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gc9bAZNOAAAAAIHQWwBOAAAAAIHRWwBPwABD3QAAAACB0lsAA8AAQ+jAAEbbBAAAAwADAAAAAIHTWwAAAAAAgdRbAAAAAACB1VsAAFsBSz4DQT4ITsAARC/AAEQ7AACDnGADwAEAgwGAwABEPcAA0i9OwABESsAARE8AAE5gA8ABAAIBFsAARFWAwABEUcAA0i9OwAEAjknAAERfHMAARGgUwABEY8AA02IPAIHYAQABJ4OdAMABABQ+Aj0VwABEi8AA02IPHMAARJcUwABEksAA02IPAIC+AQABFsAARLAng55hwAEABgDAAQAYQUbAAES/wABE1cAARMgAAACDn2ADwAEAgwAWwABEzy6DmYHTPgNOwABE48AAROgAAIG9YAPAAQCDARzAAETuFMAAROrAANPnEABsAQABFMAARPbAANNiDwAAwAEArk3AAEUJAjUAAAAAAFsBHsAARQnAALn5BAAEHMAARSYewABFE8AA8NgBAAEUwABFIMAA1AQRAACDoAAAAADAAPIUhQDAANLahgDAANLjFADAANMMCgAAK0nAAEUFFADAANMjCwA+Aj0VwABFPMAA00UOFMAARUrAANQEEQBCwABFWgE/P03AAEWjAjUAAAAAAFsBHsAARaPAALn5BAAEHMAARakugz8CAAIUwABFusAA00UOAIHAAEXHwADSQACBfoUAwADS2oYAwADS4xQAwADTDAoAACtOwABFksAARZkAAIF2XQNpAV0DwAD+vwFgA8AA/hsBFADAANMjCwBBR8AARdeBwABF38AA0kACAcAARgFqwABGAWADXYHkAD4CPRzAAEYeFsAARg8ugz2BeoC/AgACgMAARh/AANIvHMAARjUWwABGJi6DPYF6SwEAARTAAEY2wADTRQ4AAMAA/wUAwAD/BkLAAEZMAQHAAEZoasAARmhgA12B8AA+Aj0cwABGiRbAAEZ4LoM+gXuAvwIAAoDAAEaKwADSLxzAAEaiFsAARpEugz6Be0sBAAEUwABGo8AA00UOAADAAP8FAMAA/wZCwABGuQE9i8AARsrAANKxFMAARtHAANUSEABCAAA9HgDAALn8AgACggDAANJzgwDAANKxAErAAEbbAAMBAFsBAAAAAIHUWwABAAAAAIHVWwA+AT0cAIIAwADSc4HdAgACFADAANY+DgAUAMAA1kcPAADAALsM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YAOagAAAWwE+Aj0ewABIoII5AwADFsAASK4uhGiCxoDAAEi7wAE42y4APR7AAEjJgjkDAAMWwABI1y6EqoLJgMAASOTAATjbLgAAAAE1twABNf4AATZEAAE2rgABNu4AATdYAAE34wABODoAATi0AAE5LgAAAAkCgt0NwABJVMAASVrAAEs8A4S5AAABYAGCUwAAAgSC3w3AAEmSwABJnQmEaABdA8AA/r8BYAOE7AAEguANwABJrsAASbUJhLoAYAPAAQACAAEFgucNwABJusAASbrAAEoNAAAAA8AAScXAAEoNAAAAAgICwABJywAABIRoXQPAAP6/AWADhOwAwABJ3QAABIS6YAPAAQACAABgA4LdAT4BPR7AAEnsgjQCAAIWwABJ9y6EaILfLgADCAGC34AAwAE5zggBguCBAMABOeMJAcAASbqCaAAAAAAEBoLiDcAAShLAAEoXwABKcAAAhGkAAAABA8AASiTAAEpwAAAAAQEBwABKMAAAAIS3YAOE7AAAXAE+AT0cwABKThbAAEpCLoRogt9WAQABNcAASlIAAAEAYAOE7AGAwABKUsABOls1AAAAAQBbARfAAEpegcAASlzAATqDhFcuglmBAMABOoMAwAD+0AaC4w3AAEp1wABKdcAASqYAAIRSAAAAAQPAAEp7wABKpgAAAAEBAcAASogAAACA8l0DmU8BWwAAWwFKwABKjgEcwABKkIDAAEqOwAE65oS7AQABLgCZqQaC5A3AAEqrwABKq8AASucAAIRTAAAAAQPAAEq4wABK5wAAAAEBAcAASsEAAACA8l0DmkQBWwAAXAE+AT0ewABKyoI1AgACFsAAStQuhGiC34DAAErhwAE7PQAGguUNwABK7MAASuzAAEs6AACEWQAAAAEDwABK/cAASzoAAAABAQHAAEsKAAAAgPJgA5qAAABbAT4BPR7AAEsTgjkDAAMWwABLIS6EaILfgMAASy7AATuYLgAAAAE6NAABOr8AATsWAAE7cQABO8sAAAAEAoLoDcAAS3bAAEt8wABNOgOEvAAAAWABglMAAAIEguoNwABLocAAS6cYhL0AYAPAAPxVAASC6w3AAEu/wABLxAmEvgBdA8AA/r8BYAPAAQACAAMFgvQNwABL+MAAS/jAAEwbAAAAA8AATALAAEwbAAAAAgICwABMCAAABIS9YAPAAPxV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wAGdASMcwADVDhQAwAGewgwASAEAASsAADHAANUmYAOIkQAUAMABnsIMAAFdA8AA/r8BYAOIkQgAhAo1AAAAAQBdA8AA/r8BYAOIkQEUwADVScABnR8IACMcwADVWRQAwAGfFAwASAEAASsAADHAANVxYAOIkQAUAMABnxQMAAFdA8AA/r8BYAOIkQgAhAk1AAAAAQBgA8AA/hsBNQAAAAEAYAPAAP4bARTAANWnwAGdPQkAIxzAANW+FADAAZ91DABIAQABKwAANQAAAAEAXQPAAP6/AWADiJEBh8AA1cHAAZ0BIxzAANXXFADAAZ+iDQBIAQABKwAAKxbAANXXFADAAZ+iDQBhwAD+7wFgA8AA/hsUAMABn3UMAAFgA8AA/hsjHMAA1d4UAMABn2gMAEgBAAErAACTFADAAZ9oDAABYAPAAP4bCQDAANXsg64DAAOBwADV8sABnFoUwADV+MABnVYKABTAANYBwAGdbwsAABIGhA4NwADXg8AA14zAANetAQCEIgAAAAEDwADXlMAA160AAAAAAAAAYAPAAPxVAUrAANeXASEcwADXqRzAANedFsAA15cuhIOEBIN8AQABasAA159gA8AA/hsVAMAA/jNIAQABkwDAAP8/BoQPDcAA17HAANe6wADX4QEAhCQAAAABA8AA18XAANfhAAAAAAAAAGADwAD8VQFKwADXyAEhHMAA190cwADXzhbAANfILoSDhASDfAEAAWrAANfQYAPAAP4bIQDAAP4zSAEAAZMAwAD/PwaEGQ3AANfmwADX78AA2EcCAIQiAAAAAQPAANf2wADYRwAAAAEBAcAA1/wAAACAlmADwAD8VQAAXAE+AT0XwADYCS6EgyOAwADYEcABoUYcwADYIBbAANgaLoSDhASBBgEAAWrAANgiYAPAAP4bFQDAAP40HMAA2DYWwADYMC6Eg4QEg3wBAAEcwADYOGrAANg5YAPAAP4bFYSSAAAAAMAA/jYAwAD+MwFgA8AA/huEBAaEGg3AANhMwADYVcAA2LYCAIQkAAAAAQPAANhfwADYtgAAAAEBAcAA2GUAAACAlmADwAD8VQAAXAE+AT0XwADYci6EgyOAwADYesABofccwADYiRbAANiDLoSDhASBBgEAAWrAANiLYAPAAP4bIQDAAP40HMAA2KIWwADYnC6Eg4QEg3wBAAEcwADY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YAPAAP4bAAaJvw3AAq/HwAKv1cACr+UDAkgAAAABA8ACr9fAAq/lAAAAAQEBwAKv3wAAAIPbYAPAAP9oAABgA8AA/FUABonADcACsBDAArAZwAKwNwAChroAAAABA8ACsCDAArA3AAAAAQEBwAKwMQAAAIWFYAObwgAAYAOI/AAGicENwAKwPMACsEfAArCDAACGuwAAAAEDwAKwU8ACsIMAAAAAAAAAYAOE7AE+AUrAArBcAR/AArBnh3MBAAEuAAAAA2qOAANqyAADawIAA2s8AANrawADa6kAA2vkAANsJQAAAAcCicYNwAKwiMACsJfAArGdB4a8AAEAAIJ6YAPAAP9oAVsBYAGJugAAAQSJyA3AArDJwAKwzgmAlgBfAwAAAAEFic8NwAKw08ACsNPAArDwAAAAA8ACsOTAArDwAAAAAQEBwAKw6gAABICWXwMAAAAAXQOJxgFfAwAAAT8CCAGJyIAAwANsqwkBwAKw04nFAAAAAAMGicoNwAKw9cACsPzAArESAAAjAAAAAQPAArEEwAKxEgAAAAAAAABgA8ABAAIBSsACsQoBJMACsRIBFsACsQwugJaJyAaJzQ3AArEXwAKxH8ACsTkBAIPGAAAAAQPAArEowAKxOQAAAAAAAABgA8AA/hsBSsACsSsBFsACsTEWwAKxKy6AlonIg8bAAP97BonLDcACsT7AArFMwAKxmwMASAAAAAEDwAKxTsACsZsAAAABAQHAArFWAAAAg9tgA8AA/2gAAGADwAD8VQFKwAKxZgEiJcACsWyAwAKxZsADbZFdA4nGAV8DAAAAHMACsZMWwAKxjRTAArGHwANtkQABXQOJxgFfAwAAgJaJyEgBAAEWwAKxli6AlonIAMAA/3UAAANs3QADbSEAA21rAANt/QAAAAMCidANwAKxoMACsabAArLQA4a9AAABXQGJxgFgA8AA/yUAAAABBYnXDcACsdfAArHXwAKx8wAAAAPAArHjwAKx8wAAAAAAAABgA4nQAT8BCQDAArHoic8BAAErAAQGidINwAKx+MACsfjAArISAACEUwAAAAEDwAKyBcACshIAAAABAQHAArIOAAAAgPJdA5pEAVsAAFwBPgAGidMNwAKyFsACshbAArJMAACEUgAAAAEDwAKyHMACskwAAAABAQHAArItAAAAgPJdA5nPAVsAAFsBSsACsjMBHMACsjWAwAKyM8ADbtKGvgEAAS4AmdIGidQNwAKyUMACslDAArKQAACE/AAAAAEDwAKyX8ACspAAAAABAQHAArJoAAAAgPJdA5pEAVsAAFsBSsACsm4BHMACsnCAwAKybsADbymGvwEAAS4AmmMGidUNwAKylcACsp7AArLOAACGugAAAAEDwAKypcACss4AAAABAQHAArK2AAAAhYVgA5vCAABgA4j8AUrAArLAARbAArLGgMACssDAA2+AhYibzgAAA25vAANuqwADbwIAA29ZAANvrAAAAAQCidgNwAKy08ACstnAArQOA4bAAAABXQGJxgFgA8AA/FUAAAABBYnfDcACswrAArMKwAKzMQAAAAPAArMWwAKzMQAAAAEBAcACsxwAAACAlmADwAD8VQAAYAOJ2AE/AQkAwAKzJYnPAQABgMACsyvAA3AMAAQGidoNwAKzNsACszbAArNQAACEUwAAAAEDwAKzQ8ACs1AAAAABAQHAArNMAAAAgPJdA5pEAVsAAFwBPgAGidsNwAKzVMACs1TAArOKAACEUgAAAAEDwAKzWsACs4oAAAABAQHAArNrAAAAgPJdA5nPAVsAAFsBSsACs3EBHMACs3OAwAKzccADcJ2GwQEAAS4AmdMGidwNwAKzjsACs47AArPOAACE/AAAAAEDwAKzncACs84AAAABAQHAArOmAAAAgPJdA5pEAVsAAFsBSsACs6wBHMACs66AwAKzrMADcPSGwgEAAS4AmmQGid0NwAKz08ACs9zAArQMAACGugAAAAEDwAKz48ACtAwAAAABAQHAArP0AAAAhYVgA5vCAABgA4j8AUrAArP+ARbAArQEgMACs/7AA3FLhb2bzwAAA3A6AANwdgADcM0AA3EkAANxdwAAAAQCieANwAK0EcACtBfAArVFA4bDAAABXQGJxgFgA8AA/hsAAAABBYnnDcACtEbAArRGwAK0awAAAAPAArRRwAK0awAAAAEBAcACtFYAAACAlmADwAD+GwAAYAOJ4AE/AQkAwAK0X4nPAQABgMACtGXAA3HXAAQGieINwAK0cMACtHDAArSKAACEUwAAAAEDwAK0fcACtIoAAAABAQHAArSGAAAAgPJdA5pEAVsAAFwBPgAGieMNwAK0jsACtI7AArTDAACEUgAAAAEDwAK0lMACtMMAAAABAQHAArSlAAAAgPJdA5nPAVsAAFsBSsACtKsBHMACtK2AwAK0q8ADcmiGxAEAAS4AmdQGieQNwAK0x8ACtMfAArUGAACE/AAAAAEDwAK01sACtQYAAAABAQHAArTfAAAAgPJdA5pEAVsAAFsBSsACtOUBHMACtOeAwAK05cADcr+GxQEAAS4AmmUGieUNwAK1C8ACtRTAArVDAACGugAAAAEDwAK1G8ACtUMAAAABAQHAArUsAAAAhYVgA5vCAABgA4j8AUrAArU2ARbAArU8gMACtTbAA3MWhZ2b0AAAA3IFAANyQQADcpgAA3LvAANzQgAAAAQCiegNwAK1SMACtU7AArcwA4bGAAABXQGJxgFgA8AA/M0AAAABBYnyDcACtYPAArWDwAK1rgAAAAPAArWRwAK1rgAAAAEBAcACtZkAAACAlmADwAD8zQAAYAOJ6AE/AQkAwAK1oonPAQABgMACtajAA3OiAAYGieoNwAK1s8ACtbPAArXNAACEUwAAAAEDwAK1wMACtc0AAAABAQHAArXJAAAAgPJdA5pEAVsAAFwBPgAGiesNwAK10cACtdHAArYJAACEUgAAAAEDwAK118ACtgkAAAABAQHAArXoAAAAgPJdA5nPAVsAAFsBSsACte4BHMACtfCAwAK17sADdDOGxwEAAS4AmdUGiewNwAK2DcACtg3AArZPAACE/AAAAAEDwAK2HMACtk8AAAABAQHAArYlAAAAgPJdA5pEAVsAAFsBSsACtisBHMACti2AwAK2K8ADdIqGyAEAAS4AmmYGifANwAK2VMACtlzAAraKAQCDxgAAAAEDwAK2ZcACtooAAAAAAAAAYAPAAP4bAUrAArZoASMWwAK2bhbAArZoLoCWiciGycAA/2E3gMcYwAK2goPGic0BYAPAAP4bBontDcACto7AAracwAK27gMASAAAAAEDwAK2nsACtu4AAAABAQHAAramAAAAg9tgA8AA/2gAAGADwAD8VQFKwAK2tgEiJcACtryAwAK2tsADdT5gA4noAB7AArbRwAD3/AIAAhbAArbbLoCWicgWwAK26BTAArbiwAN1PgABYAOJ6ICWicgABonuDcACtvPAArb8wAK3LgAAhroAAAABA8ACtwPAArcuAAAAAQEBwAK3FAAAAIWFYAObwgAAYAOI/AFKwAK3HgEWwAK3JIDAArcewAN1xoX9m9IAAANz0AADdAwAA3RjAAN0ugADdRgAA3WfAAN18gAAAAYCifMNwAK3M8ACtznAAricA4bKAAABXQGJxgFgA8ABAAIAAAABBYn6DcACt27AArduwAK3uQAAAAPAArd8wAK3uQAAAAEBAcACt4QAAACAlmADwAEAAgAAYAOJ8wE+AUAhHMACt62AwAK3p8ADdlpIAQABKwDAAQARwAK3p8ACt7QAAQkAwAK3jYnPAQABgMACt5PAA3ZaAAQGifUNwAK3vsACt77AArfYAACEUwAAAAEDwAK3y8ACt9gAAAABAQHAArfUAAAAgPJdA5pEAVsAAFwBPgAGifYNwAK33MACt9zAArgUAACEUgAAAAEDwAK34sACuBQAAAABAQHAArfzAAAAgPJdA5nPAVsAAFsBSsACt/kBHMACt/uAwAK3+cADdw+GywEAAS4AmdYGifcNwAK4GMACuBjAArhaAACE/AAAAAEDwAK4J8ACuFoAAAABAQHAArgwAAAAgPJdA5pEAVsAAFsBSsACuDYBHMACuDiAwAK4NsADd2aGzAEAAS4AmmcGifgNwAK4X8ACuGjAAriaAACGugAAAAEDwAK4b8ACuJoAAAABAQHAAriAAAAAhYVgA5vCAABgA4j8AUrAAriKARbAAriQgMACuIrAA3e9hdib0wAAA3asAAN26AADdz8AA3eWAAN36QAAAAQCifsNwAK4n8ACuKXAArugA4bNAAABYAGJugAAAgSJ/Q3AArjWwAK42gmAvQBgA8ABAAIABIn+DcACuO7AArj+CYbOAGADgnwAAQWKCQ3AArkDwAK5A8ACuTMAAAADwAK5EcACuTMAAAACAgLAArkXAAAEgL1gA8ABAAIAwAK5IgAABIbOYAOCfAAAYAOJ+wE/AwgBif2AAMADeG4IAYn+gQDAA3h+CQHAArkDicUAAAAABwaKAA3AArk4wAK5OMACuVIAAIRTAAAAAQPAArlFwAK5UgAAAAEBAcACuU4AAACA8l0DmkQBWwAAXAE+AAaKAQ3AArlXwAK5V8ACuY8AAIRSAAAAAQPAArldwAK5jwAAAAEBAcACuW4AAACA8l0Dmc8BWwAAWwFKwAK5dAEcwAK5doDAArl0wAN5GIbPAQABLgCZ1waKAg3AArmTwAK5k8ACudUAAIT8AAAAAQPAArmiwAK51QAAAAEBAcACuasAAACA8l0DmkQBWwAAWwFKwAK5sQEcwAK5s4DAArmxwAN5b4bQAQABLgCaaAaKAw3AArnawAK54cACumQAACMAAAABA8ACuenAArpkAAAAAAAAAGADwAEAAgE+AUrAArnyASMhHMACugoWwAK5+S6Gzon+SAEAASsAwAD/dSTAArpWBCeG0RbAAro7FsACujEWwAK6IC6Gzon+hG2Cg4R8go4nhngWwAK6SC6AvYn9JMACumACJ4bRFsACulsugL2J/QFgA8ABAAIGigcNwAK6acACunHAArqgAQCDxgAAAAEDwAK6esACuqAAAAAAAAAAYAPAAP4bAUrAArp9AR7AArqDiwICAAIWwAK6iS6AvYn9FsACuo8uhs6J/gAGigQNwAK6pcACurPAArteAwBIAAAAAQPAArq1wAK7XgAAAAEBAcACur0AAACD22ADwAD/aAAAYAPAAPxVAUrAArrNASIewAK6zcAA9/wCAAIugMACut3AA3q2AAEiIiXAArr0gMACuu7AA3q2YAOJ+wAcwAK7HhbAArsZFMACuxPAA3q2AAFgA4n7gL2J/UgBAAEWwAK7IS6AvYn9AMABABEAHMACu0oWwAK7ORTAArszwAN6tgABYAOJ+4bOif5IAQABFsACu00uhs6J/gDAAP91BooFDcACu2PAArtswAK7ngAAhroAAAABA8ACu3PAArueAAAAAQEBwAK7hAAAAIWFYAObwgAAYAOI/AFKwAK7jgEWwAK7lIDAAruOwAN7ioYEm9QAAAN4tQADePEAA3lIAAN5nwADejwAA3qQAAN7YwADe7YAAAAHAooKDcACu6PAArupwAK/+gOG0gAAAWABiboAAAQEigwNwAK72cACu+AJheQAYAOI/AAEig0NwAK788ACu/wJheUAYAOI/AAEig4NwAK8HcACvCQJg9UAXQPAAP6/AWADihwABIoQDcACvgvAAr4aGIbTgi4AYAPAAP4bASsBBYobDcACvCnAArwpwAK8YAAAAAPAArw0wAK8YAAAAAMDA8ACvDoAAASF5GADiPwAwAK8SAAABIXlYAOI/ADAArxYAAAEg9VdA8AA/r8BYAOKHAAAYAOKCgE/BAgBigyAAMADfHsIAYoNgQDAA3yJCAGKDoIAwAN8lwkBwAK8KYnFAAAAAAcGihINwAK8ZcACvGXAAr02AACEUwAAAAEDwAK8csACvTYAAAABAQHAArx7AAAAgPJdA5pEAVsAAFwBPgM9HMACvIwWwAK8hC6F5IoMhFIBAAGAwAK8k8ADfQYAiP49HMACvKUWwAK8my6F5YoNhFIBAAGAwAK8rMADfQYAiP5GwAK8tMACvOLAArzQAAABg9RgA4ocABbAArzZLoPVig4+Aj0cwAK89BbAArzwgcACvOrAA31mg9aKHoT8AQABgMACvQTAA30GAIm+PRzAAr0aFsACvRSBwAK9DsADfWaAloofhPwBAAGAwAK9KsADfQYAib4GihMNwAK9O8ACvTvAAr1wAACEUgAAAAEDwAK9QcACvXAAAAABAQHAAr1SAAAAgPJdA5nPAVsAAFsBSsACvVgBHMACvVqAwAK9WMADffmG1AEAAS4AmdgGihQNwAK9dMACvXTAAr2zAACE/AAAAAEDwAK9g8ACvbMAAAABAQHAAr2MAAAAgPJdA5pEAVsAAFsBSsACvZIBHMACvZSAwAK9ksADflCG1QEAAS4AmmkGihUNwAK9uMACvb/AAr4CAAAjAAAAAQPAAr3HwAK+AgAAAAAAAABgA8ABAAIBSsACvc0BJMACvgIIFsACvdUuhZ7AAP98J2MWwAK94y6F5IoMJ4GLFsACve0uheWKDSeG1hbAAr35LoPVig4ngyYGihkNwAK+HsACvibAAr63AQCDxgAAAAEDwAK+L8ACvrcAAAAAAAAAYAPAAP4bAT4BSsACvjUBNQAAAAEAYAPAAP4bARbAAr48LobTgi6KECMcwAK+TIAAwAN/J0gBAAErAMAA/z8XwAK+PC6G04IuHsACvlaLAQMAAxbAAr52FsACvm4uheSKDIPGwAD/exbAAr6KFsACvoAuheWKDYPGwAD/ex7AAr6aiwMBAAEWwAK+qi6D1YoOAACKEIAAwAN/JwFgA8AA/hsGihYNwAK+vMACvsrAAr+aAwBIAAAAAQPAAr7MwAK/mgAAAAEBAcACvtQAAACD22ADwAD/aAAAYAPAAPxVAUrAAr7kASIewAK+5MAA9/wCAAIugMACvvTAA3/eAAEiIiIlwAK/C4DAAr8FwAN/3mADigoAHMACvzUWwAK/LRTAAr8nwAN/3gABYAOKCoXkigxIAQABFsACvzguheSKDACJAAAcwAK/XRbAAr9TFMACv03AA3/eAAFgA4oKheWKDUgBAAEWwAK/YC6F5YoNAIkAAB7AAr93gkcCAAIWwAK/iBTAAr+CwAN/3gABYAOKCoPVig4WwAK/kS6D1YoOAAaKFw3AAr+fwAK/qMACv/gAAIa6AAAAAQPAAr+vwAK/+AAAAAEBAcACv8AAAACFhWADm8IAAGADiPwBSsACv9ABHMACv9aAwAK/0MADgN2F5wIAAhbAAr/lLoXkigwWwAK/7i6F5YoNAJvdAAADfN8AA33SAAN+KQADfoAAA37vAAN/uAADgLYAA4EhAAAABwKKHA3AAr/9wALAA8ACwTgDhtcAAAFgAcAA/2gAAAIEih4NwALAJ8ACwCoJg9YAYAOJugAEih8NwALAPcACwEIJgJYAYAOJugABBYomDcACwEbAAsBGwALAbAAAAAPAAsBWwALAbAAAAAICAsACwFwAAASD1mADiboAwALAZgAABICWYAOJugAAYAOKHAE/AwgBih6AAMADgbIIAYofgQDAA4HACQHAAsBGwAD/fgAAAAADBoohDcACwHHAAsB4wALAlAAAIwAAAAEDwALAgMACwJQAAAAAAAAAYAPAAQACAUrAAsCGASTAAsCUAxbAAsCILoPWih4ng1sWwALAji6AloofBookDcACwJnAAsChwALAxAEAg8YAAAABA8ACwKrAAsDEAAAAAAAAAGADwAD+GwFKwALArQEewALAs4sCAgACFsACwLkug9aKHhbAAsC+LoCWih8ABooiDcACwMnAAsDXwALBNgMASAAAAAEDwALA2cACwTYAAAABAQHAAsDhAAAAg9tgA8AA/2gAAGADwAD8VQFKwALA8QEiIiXAAsD3gMACwPHAA4LEYAOKHAAcwALBGBbAAsEUFMACwQ7AA4LEAAFgA4ocg9aKHkgBAAEWwALBGy6D1ooeAIm/ABzAAsEuFsACwSgUwALBIsADgsQAAWADihyAloofSAEAARbAAsExLoCWih8Aib8AAAOB+QADgkoAA4KeAAODVAAAAAMCiicNwALBO8ACwUHAAsTxA4bYAAABYAGJugAAAwSKKQ3AAsFywALBfgmF2wBgA4j8AASKKg3AAsGXwALBngmD1QBdA8AA/r8BYAOJugAEiiwNwALDNsACw0UYhtOCLgBgA8AA/hsBKwEFijcNwALBo8ACwaPAAsHQAAAAA8ACwa/AAsHQAAAAAgICwALBtQAABIXbYAOI/ADAAsHIAAAEg9VdA8AA/r8BYAOJugAAYAOKJwE/AwgBiimAAMADg/QIAYoqgQDAA4QCCQHAAsGjicUAAAAABwaKLg3AAsHVwALB1cACwmYAAIRTAAAAAQPAAsHiwALCZgAAAAEBAcACwesAAACA8l0DmkQBWwAAXAE+Aj0cwALCARbAAsH0LoXbiimEUgEAAYDAAsIIwAOEZwCI/kbAAsIQwALCOcACwiQAAAGGHWADiboAFsACwjAug9WKKj4BPRzAAsJKgcACwkHAA4SmhPwBAAGAwALCWsADhGcAib4Gii8NwALCa8ACwmvAAsKhAACEUgAAAAEDwALCccACwqEAAAABAQHAAsKCAAAAgPJdA5nPAVsAAFsBSsACwogBHMACwoqAwALCiMADhQeG2QEAAS4AmdkGijANwALCpcACwqXAAsLlAACE/AAAAAEDwALCtMACwuUAAAABAQHAAsK9AAAAgPJdA5pEAVsAAFsBSsACwsMBHMACwsWAwALCw8ADhV6G2gEAAS4AmmoGijENwALC6sACwvHAAsMtAAAjAAAAAQPAAsL5wALDLQAAAAAAAABgA8ABAAIBSsACwv8BJMACwy0GFsACwwcuhZ7AAP98J2MWwALDFS6F24opJ4bWFsACwyQug9WKKieDJgaKNQ3AAsNJwALDUcACw9IBAIPGAAAAAQPAAsNawALD0gAAAAAAAABgA8AA/hsBPgFKwALDYAE1AAAAAQBgA8AA/hsBFsACw2cuhtOCLoosIxzAAsN3gADAA4YoSAEAASsAwAD/PxfAAsNnLobTgi4ewALDgYr/AgACFsACw6UWwALDmC6F24opg8bAAP97HsACw7WLAwEAARbAAsPFLoPViioAAIosgADAA4YoAWADwAD+GwaKMg3AAsPXwALD5cACxJYDAEgAAAABA8ACw+fAAsSWAAAAAQEBwALD7wAAAIPbYAPAAP9oAABgA8AA/FUBSsACw/8BIh7AAsP/wAD3/AIAAi6AwALED8ADhsoAASIiJcACxCaAwALEIMADhspgA4onABzAAsRWFsACxEkUwALEQ8ADhsoAAWADiieF24opSAEAARbAAsRZLoXbiikAiQAAHsACxHOCRwIAAhbAAsSEFMACxH7AA4bKAAFgA4ong9WKKhbAAsSNLoPViioABoozDcACxJvAAsSkwALE7wAAhroAAAABA8ACxKvAAsTvAAAAAQEBwALEvAAAAIWFYAObwgAAYAOI/AFKwALEzAEcwALE0oDAAsTMwAOHmYXdAQABFsACxOIuhduKKQCb2wAAA4RAAAOE4AADhTcAA4WOAAOF8AADhqQAA4dyAAOH0wAAAAcCijgNwALE9MACxPrAAsieA4bbAAABYAGJugAAAwSKOg3AAsUqwALFNgmF2wBgA4j8AASKOw3AAsVPwALFVgmD1QBdA8AA/r8BYAOJugAEij0NwALG68ACxvoYhtOCLgBgA8AA/hsBKwEFikgNwALFW8ACxVvAAsWHAAAAA8ACxWbAAsWHAAAAAgICwALFbAAABIXbYAOI/ADAAsV/AAAEg9VdA8AA/r8BYAOJugAAYAOKOAE/AwgBijqAAMADiIMIAYo7gQDAA4iRCQHAAsVbicUAAAAABwaKPw3AAsWMwALFjMACxh0AAIRTAAAAAQPAAsWZwALGHQAAAAEBAcACxaIAAACA8l0DmkQBWwAAXAE+Aj0cwALFuBbAAsWrLoXbijqEUgEAAYDAAsW/wAOI9gCI/kbAAsXHwALF8MACxdsAAAGGHWADiboAFsACxecug9WKOz4BPRzAAsYBgcACxfjAA4k1hPwBAAGAwALGEcADiPYAib4GikANwALGIsACxiLAAsZXAACEUgAAAAEDwALGKMACxlcAAAABAQHAAsY5AAAAgPJdA5nPAVsAAFsBSsACxj8BHMACxkGAwALGP8ADiZaG3AEAAS4AmdoGikENwALGW8ACxlvAAsaaAACE/AAAAAEDwALGasACxpoAAAABAQHAAsZzAAAAgPJdA5pEAVsAAFsBSsACxnkBHMACxnuAwALGecADie2G3QEAAS4AmmsGikINwALGn8ACxqbAAsbiAAAjAAAAAQPAAsauwALG4gAAAAAAAABgA8ABAAIBSsACxrQBJMACxuIGFsACxrwuhZ7AAP98J2MWwALGyi6F24o6J4bWFsACxtkug9WKOyeDJgaKRg3AAsb+wALHBsACx4cBAIPGAAAAAQPAAscPwALHhwAAAAAAAABgA8AA/hsBPgFKwALHFQE1AAAAAQBgA8AA/hsBFsACxxwuhtOCLoo9IxzAAscsgADAA4q3SAEAASsAwAD/PxfAAsccLobTgi4ewALHNor/AgACFsACx1oWwALHTS6F24o6g8bAAP97HsACx2qLAwEAARbAAsd6LoPVijsAAIo9gADAA4q3AWADwAD+GwaKQw3AAseMwALHmsACyEoDAEgAAAABA8ACx5zAAshKAAAAAQEBwALHpAAAAIPbYAPAAP9oAABgA8AA/FUBSsACx7QBIh7AAse0wAD3/AIAAi6AwALHxMADi1kAASIiJcACx9uAwALH1cADi1lgA4o4ABzAAsgKFsACx/0UwALH98ADi1kAAWADijiF24o6SAEAARbAAsgNLoXbijoAiQAAHsACyCeCRwIAAhbAAsg4FMACyDLAA4tZAAFgA4o4g9WKOxbAAshBLoPVijsABopEDcACyE/AAshYwALInAAAhroAAAABA8ACyF/AAsicAAAAAQEBwALIcAAAAIWFYAObwgAAYAOI/AFKwALIegEcwALIgIDAAsh6wAOMKIXhAQABFsACyI8uhduKOgCb3AAAA4jPAAOJbwADicYAA4odAAOKfwADizMAA4wBAAOMYgAAAAcCikkNwALIocACyKfAAs/MA4beAAABYAGJugAABASKSw3AAsjdwALI6wmF6gBgA4J8AASKTA3AAskEwALJEQmFOABdA8AA/r8BYAOI/AAEik0NwALJNMACyT8JhesAXQPAAP7xAmADgnxgA4m6AASKTw3AAs1ywALNgRiG04IuAGADwAD+GwErAQWKWw3AAslEwALJRMACyY8AAAADwALJVMACyY8AAAADAwPAAslaAAAEhepgA4J8AMACyW8AAASFOF0DwAD+vwFgA4j8AMACyYMAAASF610DwAD+8QJgA4J8YAOJugAAYAOKSQE/BAgBikuAAMADjTIIAYpMgQDAA41ACAGKTYIAwAONVQkBwALJRInFAAAAAAgGilENwALJlMACyZ7AAsnBAQCE7wAAAAEDwALJqMACycEAAAAAAAAAYAODHAFKwALJqwEWwALJuhbAAsmrLoXqikuEb4KEBopUDcACycbAAsnGwALLAgAAhFMAAAABA8ACydPAAssCAAAAAQEBwALJ3AAAAIDyXQOaRAFbAABcAT4EPRzAAsn8FsACyfQWwALJ5S6F6opLhG+ChIT8AQABgMACygzAA44OAINZPR7AAsoUgjUCAAIWwALKHi6FOIpMgMACyi3AA44OAEbAAso1wALKacACykoAAAGEY2ADgnwAFsACymMWwALKVy6F64pNg2jAAP8TPgE9HMACyoMWwALKe4HAAspxwAOOdYRzgoaE/AEAAYDAAsqTwAOODgCD20bAAsqhwALK1cACyrUAAAGGHWADiboAFsACys0WwALKwS6F64pNKcAA/xQ+AT0cwALK5oHAAsrdwAOOzIT8AQABgMACyvbAA44OAIm+BopVDcACywfAAssHwALLQQAAhFIAAAABA8ACyw3AAstBAAAAAQEBwALLHgAAAIDyXQOZzwFbAABbAUrAAsskARzAAssmgMACyyTAA483ht8BAAEuAJnbBopWDcACy0XAAstFwALLiQAAhPwAAAABA8ACy1TAAsuJAAAAAQEBwALLXQAAAIDyXQOaRAFbAABbAUrAAstjARzAAstlgMACy2PAA4+OhuABAAEuAJpsBopXDcACy47AAsuVwALNaQAAIwAAAAEDwALLncACzWkAAAAAAAAAYAPAAQACAT4HTsACy6zAAsuvAAGD6WADwAEATAEfwALLtcABAGsAAAAAPRzAAsvMgMACy8nAA4/vgo4BAAEkwALL7QEWwALL5BbAAsvVLoXqikuEb4KEAMABAGBJwALL9CEWwALMHxbAAswQFsACzAgWwALL+S6F6opLhG+ChITFgyuBVcAA/qE+Az0cwALMM4DAAswwwAOP74KOAQABJ2MAwAEAYD0cwALMSIDAAsxFwAOP74KOAQABHMACzHscwALMXBbAAsxOLoU4ikyAqwEBYAPAAQACATTAAsxgA8ACzGDAAsx5AAAAAQEBwALMYQAAAIKUYAOI/AAAYAPAAQACAUrAAsxqARzAAsxvgcACzGrAA5DSIwAAAACCUADAAP6IWAEAASeBiwDAAP6RAMABAGA9HMACzJGAwALMjsADj++CjgEAASeAlwDAAQBgPz0cwALMqoDAAsynwAOP74KOAQABJ4bhAMABAGA9HMACzMcWwALMuy6F64pNg/0BAAE0wALMzwPAAszPwALNNwAAAAICAsACzNoAAACF72ADgnwAwALM7QAAAIYdYAOJugAAYAPAAP8lAT4BPRzAAs0CgMACzP/AA4/vgo4BAAEkwALNLwQWwALNHBbAAs0UgcACzQvAA5F7hHOChoC9g5Qng1uCwALNJMADkYkngYsAwAEAYADAAP8QPRzAAs1BgMACzT7AA4/vgo4BAAEnhuIAwAEAYErAAs1RARzAAs1bgMACzVjAA4/vIwAAAADAAQBlBopSDcACzYXAAs2NwALOSgEAg8YAAAABA8ACzZbAAs5KAAAAAAAAAGADwAD+GwE+AUrAAs2cATUAAAABAGADwAD+GwEWwALNoy6G04Iuik8jHMACzbOAAMADkmBIAQABKwDAAP8/F8ACzaMuhtOCLh7AAs29iwEDAAMWwALN5BbAAs3VLoXqikuDxsAA/3sewALN9oJDAQABFsACzgMuhTiKTAAewALOIYsFAQABFsACzjkuheuKTQAAik+AAMADkmABYAPAAP4bBopYDcACzk/AAs5dwALPaQMASAAAAAEDwALOX8ACz2kAAAABAQHAAs5nAAAAg9tgA8AA/2gAAGADwAD8VQE+AUrAAs50ASIewALOe8AA9/wCAAIugMACzovAA5MXAAEiIiIlwALOpIDAAs6ewAOTF2ADikkAHMACztwWwALOzRTAAs7HwAOTFwABYAOKSYXqiktIAQABFsACzt8uheqKSwDAAP91AB7AAs79gkcCAAIWwALPDhTAAs8IwAOTFwABYAOKSYU4ikwWwALPHS6FOIpMAAAewALPO4JIAgACFsACz0sUwALPRcADkxcAAWADikmF64pNFsACz1guheuKTQAGilkNwALPbsACz3fAAs/KAACGugAAAAEDwALPfsACz8oAAAABAQHAAs+PAAAAhYVgA5vCAABgA4j8AUrAAs+fAR/AAs+jiUcCAAIWwALPsS6E74pRFsACz7wuhTiKTAAAAAONoQADjecAA48QAAOPZwADj74AA5IoAAOS8QADk/IAA5RSAAAACAKKXA3AAs/PwALP1cAC1IADhuMAAAFgAYm6AAACBIpeDcAC0B3AAtAsCYbkAGADimsABIpfDcAC0EXAAtBKCYWFAF0DwAD+vwFgA4j8AAEFimoNwALQT8AC0E/AAtCNAAAAA8AC0GvAAtCNAAAAAgICwALQcQAABIbkYAOKawDAAtCHAAAEhYVdA8AA/r8BYAOI/AAAYAOKXAE/AwgBil6AAMADlOwIAYpfgQDAA5T6CQHAAtBPicUAAAAABwaKYQ3AAtCSwALQksAC0PAAAIRTAAAAAQPAAtCfwALQ8AAAAAEBAcAC0KgAAACA8l0DmkQBWwAAXAE+Aj0cwALQwRbAAtCxLobkil6E/AEAAYDAAtDRwAOVXwCK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/hS8+cAERRgOAIC+AgACkxy9Fxa9EBS9C8AERRgOAGHAAQAGgY0BAAE3BgDAAP9CAMABABg/PRUAwARE1gkcABy9QBa9Ji5ri/hIAQABKwDAAQCqSAEAASkAAEkAFADABETWCQA/PgJNvVQCNQAAAAAAWwEevVTAALn5BAAEHL2NHL1lFr1aLoJTjASH6wEAARa9ci5ri/gAi7yDoAAAAACLw4MAwAREn4QAwAREqBQAwARE4QoAACs9FQDABETWCRwAIRQAwARE9gsASAEAASkAAEm9IhQAwARE1gkAPgNJvZ8WvaMuh7eMAz4BPRy9uS6IMwIAAhy+Dmq93F0DkdEBYQMBYAPAAQCDYAORuoeEiD0BAAEWvhwua4v4AJHVar5NYAOSEoGjAIwXPz2JvmPABESDH75ujE0BAAEUvovABEUYDgAAQgAAP02+swI1AAAAAABbAR6+s8AAufkEAAQcvuwcvsQWvrkuglOMBIfrAQABFr7RLmuL+ACLvIftAAAAAIvFgwDABESfhADABESoFADABEThCgAAK06+pL6pAACCZGADwAEAAgEUAMAERPYLAEs+BE2/NAI1AAAAAABbAR6/NMAAufkEAAQev1GMPAIAAha/Vy5ri/gUv3LABEb5DwAAgwDABESfhADABESoFADABEThCgAAK06/I78oAACIYGADjDYBFADABET2CwA9ib9/wAREgxy/ixS/hsAER1kQAIJlAQABFL+cwARFGA4AAIw7QgAAAAG/qWADjFYBv9MAAAGDU2ADjFYAAD4DPRy/3i6IMwIAAhzAAEAiar//XQOR0QFhAwFgA8ABAAJgA5G6h6iIPQEAASTAAEA8ARbAAEA1FMAAQDPABEefEACBx4xYAJHVasAAQFJgA5ISgaMAjBc9icAAQGDABESDH8AAQGuMTQEAARTAAECIwARFGA4AAEIAAD0eAMAAufwCAAKAAMAERGGBAMAERIMASsAAQJcAAwEAWwEAAAAAgdRbAAEAAAAAgdVbAD4BPRwAgADABERhgd0CAAIUAMAESEkOABQAwARIUg8AAMAAuww9igDABESWHgDAALn9AQABFADABEThCgAAPYsAwAREnx4AwAC59wEAARQAwARE4QoAAD2MAMAERKgeAMAAufgBAAEUAMAEROEKAAA9HLwcgADABERhagEAARQAwARE4QoAAABKAAEWAIAAwAREYYHewAC7CAaMEhTAAEFYwABBacAARUsAAIhZi94AAAABA8AAQXXAAEVLAAIAAAAAAF0DwAC64wFgA50rAT4OTgAAAAGByl0DwAC6KQFgA50rAR/AAEF+wAC6NgABYAOdKwAATgAAAACBy10DwAC63wFgA50rAE4AAAAAgcxbAE4AAAAAgc1bAE4AAAAAgc5bAE4AAAAAgc9bAZNOAAAAAIHQWwBOAAAAAIHRWwBPwABBaQAAAACB0lsAA8AAQXXAAEVLBAAAAwADAAAAAIHTWwAAAAAAgdRbAAAAAACB1VsAAFsBSz4DQT4KScAAQYQhHMAAQZIWwABBiC6IF4vei+NIAQABKwDAAP91PgI9icAAQZvABElQFsAAQaIuiBeL3ovjQgAAPz0XwABBsS6IGIveK4vkScAAQcohHMAAQeMWwABB0xbAAEHOLogWi96L4oJLi3JIAQABKwDAAQCqPgNNwABCBwI1AAAAAABbAR7AAEIHwAC5+QQABBzAAEINLohiAQABFsAAQikWwABCJC6IFovei+KCS4tyAIwggwDABElshADABEl1FADABEmeCAAAKz2JwABB9MAESVAXwABB+y6IF4veFADABEm1CQCL40IAAD9JwABCRhzAAEJYFsAAQlEWwABCSi6CVYvxYcAA/u+AlwEAAZQAwAD/Sz4DPRzAAELoLogzAgACasAAQwlgA5HFh85qwABDOmADkhKBowCMFz2JwABDSMAESVAXwABDTy6IF4veasAAQ2RgA50rh+2L40IAAD9OwABDf8AAQ4UAAIF7YAPAAQCDARbAAEOOFsAAQ4cuglWL8YMewAD+o0nAAEPjHMAAQ/QWwABD7RTAAEPnwARLOAwAgbzAAQCJSAEAASeHjQDAAQARPgI9icAAQ//ABElQF8AARAYuiBeL3mrAAEQbYAOdK4fti+NCAAA/ScAARCwcwABEPRbAAEQ2FMAARDDABEs4DACBvMABAIlIAQABJ4haAMABABE+Az0cwABEVC6BxQIAAhzAAESNasAARGZgA5HFh/iCXwMAAxTAAESpwARLOAwAHMAARLCUgcYAAAAAwAD+PmrAAES0YAPAAP4bFQCRzWrAAETSYAOSEoGjAIwNPYnAAETgwARJUBfAAETnLogXi95qwABE/GADnSuH7YvjQgAAP03AAEUmAjUAAAAAAFsBHsAARSbAALn5BAAEHMAARSwuiGiL3gEAARbAAEVBFsAARTouglWL8YMewAD+owCME4MAwARJbIQAwARJdRQAwARJnggAACs9icAARRPABElQF8AARRouiBeL3hQAwARJtQkAi+NCAAA9HgDAALn8AgACgADABEksgQDABElQAErAAEVLAAMBAFsBAAAAAIHUWwABAAAAAIHVWwA+AT0cAIAAwARJLIHdAgACFADABEz3DAAUAMAETQANAADAALsMPYoAwARJYx4AwAC5/QEAARQAwARJnggAAD2LAMAESWweAMAAufcBAAEUAMAESZ4IAAA9jADABEl1HgDAALn4AQABFADABEmeCAAAPRzAAEF1gADABEksagEAARQAwARJnggAAABKAAEWAIAAwARJLIHewAC7CAaMIBTAAEWPwABFoMAASYkAAIhiAAAAAQPAAEW2wABJiQACAAEBAcAARbsAAACBvWADwAEAgwAAXQPAALrjAWADnSsBPg9OAAAAAYHKXQPAALopAWADnSsBH8AARcfAALo2AAFgA50rAABOAAAAAIHLXQPAALrfAWADnSsATgAAAACBzFsATgAAAACBzVsATgAAAACBzlsATgAAAACBz1sBk04AAAAAgdBbAE4AAAAAgdFbAE4AAAAAiFxbAE/AAEWgAAAAAIHSWwADwABFtsAASYkEAAADAAMAAAAAgdNbAAAAAACB1FsAAAAAAIHVWwAAWwFLPgNBPgZOwABF1wAAAIhpXQPAAP6/AWADwAD+GwBLPgJNwABGPwI1AAAAAABbAR7AAEY/wAC5+QQABBzAAEZjHMAARlAWwABGRS6CU4wEh+sBAAGAwABGXcAETcoAi7yH7AAAAACLxIQAwAROKoUAwAROMxQAwAROZQoAACs9FcAARjTABE6eDhQAwAROfAsAAAHAAEZ4YAOLyAHAAEaWAAABg1NgA4vIAAA+AT0cwABGoS6IMwIAAhzAAEbXasAARsJdA5HRAWEDAmADwAEAg2ADwAEAAmADkbqIHYg9AgACgMAARuXABE3KFsAARu0UwABG68AETzMPACKLywCR1WrAAEcAYAOSEoGjAIwXScAARxIhHMAARx8UwABHFsAETp4OAEgBAAErAMAA/uk+Aj0XwABHMC6IGIvegMAARz/ABE3Ki+RLPgNOwABHasAAR24AAICrXQPAAP7xAmADwAEAAmADwAEAgwEewABHfJ06AwACFMAAR5HABE6eDgCAwABHm8AETcoBiGspPYrAAEfFwARODh/AAEfQnWEBAAEUwABH3MAET+IPAABCAAAAAsAAR+pgA8AA/e4BwABIBAAAAYNTYAPAAP3uAAA+AT0cwABIES6BxQIAAhzAAEh7HMAASFFqwABIJV0DkdEBYQMBYAPAAQACYAORuohGiD0BAAEWwABIYRTAAEhfwARQVA8AIsAA/fAAkdWCXwMAA4DAAEiIwARNyhbAAEiQFMAASI7ABFBUDwCDYsAA/fJqwABImGADwAD+GxUAkcFqwABIuGADkhKBowCMDcAASMhbAcAASM8AAAGDU1sAAD4BPRzAAEjcLogzAgACHMAASRRqwABI/10DkdEBYQMCYAPAAQCDYAPAAQACYAORuogdiD0CAAKAwABJIsAETcokwABJLAEUwABJKsAEUPoPAACR1WrAAEk4YAOSEoGjAIwXPz0XwABJUi6IGIveK4vkPYrAAElrwARODmrAAEl7YAOdK4ftQgAAPR4AwAC5/AIAAoEAwARN6oIAwARODgBKwABJiQADAQBbAQAAAACB1FsAAQAAAACB1VsAPgE9HACBAMAETeqB3QIAAhQAwARRsQ4AFADABFG6DwAAwAC7DD2LAMAETiEeAMAAuf0BAAEUAMAETmUKAAA9jADABE4qHgDAALn3AQABFADABE5lCgAAPY0AwAROMx4AwAC5+AEAARQAwAROZQoAAD0cwABFtoEAwARN6moBAAEUAMAETmUKAAAASgABFgCBAMAETeqB3sAAuwgGjBMUwABNH8AATTDAAFFGAACIaIveAAAAAQPAAE09wABRRgACAAEBAcAATUIAAACIbWADwAEAgwAAXQPAALrjAWADnSsBPg5OAAAAAYHKXQPAALopAWADnSsBH8AATVPAALo2AAFgA50rAABOAAAAAIHLXQPAALrfAWADnSsATgAAAACBzFsATgAAAACBzVsATgAAAACBzlsATgAAAACBz1sBk04AAAAAgdBbAE4AAAAAgdFbAE/AAE0wAAAAAIHSWwADwABNPcAAUUYEAAADAAMAAAAAgdNbAAAAAACB1FsAAAAAAIHVWwAAWwFLPgNBPgtOwABNXcAATWEAAIOfYAPAAQCDARzAAE1tgMAATWPABFKGbAEAASeBagDAAQCuScAATX8hFsAATYgUwABNhMAEU1ENAINBwAEAlD4DPRzAAE2cLogzAgACHMAATe9qwABNvV0DkdEBYQMBYAPAAQACYAORuohpiD0BAAEkwABOLQMniG+AwABOIsAEUoYngWoAkdVqwABOQ2ADkhKHJwCMFz2KwABOW8AEUspqwABOa2ADnSuH7UIAAD9PwABOgsAATo4AAAGIcGEDAWADwAEAg10DwAC64wFgA8ABAIMAA8AATpjAAE9AAAIAAQEBwABOnQAAAIOfYAPAAQCDAABdA8AAuuMBYAPAAQCDAT4OTgAAAAGByl0DwAC6KQFgA8ABAIMBH8AATqjAALo2AAFgA8ABAIMAAE4AAAAAgctdA8AAut8BYAPAAQCDAE4AAAAAgcxbAE4AAAAAgc1bAE4AAAAAgc5bAE4AAAAAgc9bAZNOAAAAAIHQWwBOAAAAAIHRWwBPwABOggAAAACB0lsAA8AATpjAAE9ABAAAAwADAAAAAIHTWwAAAAAAgdRbAAAAAACB1VsAAFsBSz4DQT4FTsAATrTAAE6+AACIcWADwAEAgwEcwABOxBTAAE7AwARUPg8AbAEAASeIcgDAAQCuTcAATuQCNQAAAAAAWwEewABO5MAAufkEAAQcwABPDRzAAE71FsAATuouglOMBIfrAQABFMAATwLABFURHAAAi7yDoAAAAACLwxQAwARUphMAFADABFSvFAAUAMAEVNgYAAArScAATuAUAMAEVO8ZAD4CPRXAAE8XwARUiBEUwABPHsAEVREcAEIAAD89FcAATy/ABFSIEStCAAA9HgDAALn8AgACFADABFRgEAAUAMAEVIgRAABKwABPQAADAQBbAQAAAACB1FsAAQAAAACB1VsAPgE9HAAUAMAEVGAQAIHdAgACFADABFYBHAAUAMAEVgodAADAALsMPRUAwARUnRIeAMAAuf0BAAEUAMAEVNgYAAA9FQDABFSmEx4AwAC59wEAARQAwARU2BgAAD0VAMAEVK8UHgDAALn4AQABFADABFTYGAAAPRzAAE6YFADABFRgEABqAQABFADABFTYGAAAAEoAARYAFADABFRgEACB3sAAuwhNwABPdwI1AAAAAABbAR7AAE93wAC5+QQABBzAAE+HFMAAT33ABFQPDgAgAQABFMAAT4jABFNRDQAA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AFgQwABYOwAAAAEBAcAAWBEAAACIe1sAAGADwAD/JQE+AT0cwABYIYDAAFgewARc5IIDAQABJMAAWDECJ4h8hMAAWC/ABF4FAMABAGMAwAD+jT0cwABYTIDAAFhJwARc5IIDAQABJMAAWGcCJ4h9FsAAWF8uglWL8QDAAQBjPRzAAFhxgMAAWG7ABFzkggMBAAEkwABYjAIniH4WwABYhC6Bk4vyAMABAGM9HMAAWJeAwABYlMAEXOSCAwEAASQAAieIfyMcwABY6BbAAFjbFsAAWNYuiBaL3oviglSLcUgBAAErAMAA/3UniIAniIEBYAPAAQACAMABAGM9HMAAWQuAwABZCMAEXOSCAwEAASQABieIghbAAFkuFsAAWSIuiCKL3ovthZ7AAP98J4DZJ4iDFsAAWWMWwABZWBbAAFlTLogWi96L4oJTi3eFnsAA/3wngyYAwAEAYz0cwABZgoHAAFl5wARdCSACAAIniIQWwABZmxbAAFmWLogWi96L4oe0i3MAAD0cwABZuYHAAFmwwARdCSACAAIniIUWwABZ1hbAAFnRLogWi96L4oJKi3QAAD0cwABZ84DAAFnwwARc5IIDAQABJMAAWiICJ4iGFsAAWhEWwABaDC6IFovei+KCS4tyAMABAGM9HMAAWiyAwABaKcAEXOSCAwEAASTAAFpMAieIhxbAAFpBLogXi96L4wDAAQBjPRzAAFpXgMAAWlTABFzkggMBAAEkwABaewIniIgWwABaby6Ht4wDAMABAGM9HMAAWoWAwABagsAEXOSCAwEAASTAAFrABSeIiRbAAFqaLogdi96L6SeIihbAAFq2FsAAWrEuiBaL3ovih7OLbyeDJgDAAQBjPRzAAFrKgMAAWsfABFzkggMBAAEkAAYniIsWwABa6C6IIIvei+wngNkniIMWwABbIRbAAFscLogWi96L4muLcCeDJgDAAQBjPRzAAFtHgMAAW0TABFzkggMBAAEkwABbiwUniIwWwABbXy6IHovei+oniIoWwABbfhbAAFt5LogWi96L4oe1i3UngyYAwAEAYz0cwABbloDAAFuTwARc5IIDAQABJMAAW7oCJ4iNFsAAW64uglCMBQDAAQBjPRzAAFvEgMAAW8HABFzkggMBAAEkwABcBwUniI41AAAAAQBgA4s0ARbAAFvXLogji96L7iMcwABb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AGADkcUBasAARXBgA5HFjnEEjKgYwABGqsAAR5MGiVoAXQOR0QFhAwFgA8ABAAJgA5G6AWrAAEbZXQOR0QFhAwFgA8ABAAJgA5G6jpYEjKkYwABH+cAASMsGiVwAXQORrwFhAwFgA8ABAAJgA5G6AWrAAEgkXQORrwFhAwFgA8ABAAJgA5G6jrYEjKoYwABKq8AAS/UGiV4AXQOR0QFhAwFgA58iYAORugFqwABK110DkdEBYQMBYAOfImADkbqO5QSMqxjAAExbwABNKwaJYQBdA5GvAWEDAWADnyJgA5G6AWrAAEyDXQORrwFhAwFgA58iYAORuo8RBIysGMAATyrAAFAPBolkAF0DkdEBYQMBYAOfImADkboBasAAT11dA5HRAWEDAWADnyJgA5G6jzsEjK0YwABQdcAAUWAGiWYAXQORrwFhAwFgA58iYAORugFqwABQpF0Dka8BYQMBYAOfImADkbqPZgSMrhjAAFLmwABTQgaJaQBdA5GvAWADwAD/JQFqwABTFmADkcWPkASMrxjAAFOQwABUSAaJbABgA5HFAWrAAFPJYAORxY+QBIywGMAAVJXAAFS/BoltAF0Dka8BYAPAAP8lAWrAAFSqYAORxY+0BIyxGMAAVQ3AAFWyBolwAGADkcUBasAAVStgA5HFj7QEjLIYwABWIMAAVzIGiXEAXQOR0QFhAwFgA8ABAAJgA5G6AWrAAFZXXQOR0QFhAwFgA8ABAAJgA5G6j9gEjLMYwABXnMAAWHkGiXMAXQORrwFhAwFgA8ABAAJgA5G6AWrAAFfPXQORrwFhAwFgA8ABAAJgA5G6j/gEjLQYwABaY8AAWr8GiXUAXQORrwFgA8AA/yUBasAAWpNgA5HFkDAEjLUYwABbDcAAXAoGiXkAYAORxQFqwABbRmADkcWQMASMthjAAFxXwABciwaJegBdA5GvAWADwAD/JQFqwABccWADkcWQYgSMtxjAAFzZwABdfQaJfgBgA5HFAWrAAFz8YAORxZBiBIy4GMAAXe3AAF73BogJAF0DkdEBYQMBYAPAAQACYAORugFqwABeHF0DkdEBYQMBYAPAAQACYAORuoeoBIy5GMAAX1/AAF/4Bol/AF0Dka8BYQMBYAPAAQACYAORugFqwABfil0Dka8BYQMBYAPAAQACYAORupCEBIy6GMAAYaXAAGH/BomBAF0Dka8BYAPAAP8lAWrAAGHUYAORxZCvBIy7GMAAYk3AAGMeBomEAGADkcUBasAAYoFgA5HFkK8EjLwYwABja8AAY8UGiYUAXQORrwFgA8AA/yUBasAAY5pgA5HFkNYEjL0YwABkE8AAZVIGiYkAYAORxQFqwABkR2ADkcWQ1gSMvhjAAGWfwABl7waJigBdA5GvAWADwAD/JQFqwABlyWADkcWHzgSMvxjAAGY9wABnSQaIBQBgA5HFAWrAAGZsYAORxYfOBIzAGMAAZ5bAAGfmBomLAF0Dka8BYAPAAP8lAWrAAGfAYAORxYf4BIzBGMAAaDTAAGk3BogGAGADkcUBasAAaGNgA5HFh/gEjMIYwABppcAAazMGiYwAXQOR0QFhAwFgA8ABAAJgA5G6AWrAAGnnXQOR0QFhAwFgA8ABAAJgA5G6kP4EjMMYwABrncAAbLMGiY8AXQORrwFhAwFgA8ABAAJgA5G6AWrAAGvbXQORrwFhAwFgA8ABAAJgA5G6kSwEjMQYwABvQMAAcIgGiZIAXQOR0QFhAwFgA8ABAAJgA5G6AWrAAG9uXQOR0QFhAwFgA8ABAAJgA5G6kVsEjMUYwABw8MAAcdgGiZUAXQORrwFhAwFgA8ABAAJgA5G6AWrAAHEeXQORrwFhAwFgA8ABAAJgA5G6kYkEjMYYwABz9MAAdWMGiZgAXQOR0QFhAwFgA8ABAAJgA5G6AWrAAHQwXQOR0QFhAwFgA8ABAAJgA5G6kbUEjMcYwAB1zcAAdtEGiZoAXQORrwFhAwFgA8ABAAJgA5G6AWrAAHYFXQORrwFhAwFgA8ABAAJgA5G6kdYEjMgYwAB5NsAAegIGiAoAXQOR0QFhAwJgA8ABAINgA8ABAAJgA5G6AWrAAHlXXQOR0QFhAwJgA8ABAINgA8ABAAJgA5G6iB0EjMkYwAB6dMAAeyYGiZwAXQORrwFhAwJgA8ABAINgA8ABAAJgA5G6AWrAAHqRXQORrwFhAwJgA8ABAINgA8ABAAJgA5G6kgwEjMoYwAB8+8AAfggGiZ8AXQOR0QFhAwFgA58iYAORugFqwAB9NF0DkdEBYQMBYAOfImADkbqSPgSMyxjAAH5ywAB/bQaJoQBdA5GvAWEDAWADnyJgA5G6AWrAAH6nXQORrwFhAwFgA58iYAORupJpBIzMGMAAgUbAAIMLBomkAF0DkdEBYQMBYAOfImADkboBasAAgXZdA5HRAWEDAWADnyJgA5G6kpYEjM0YwACDccAAhFEGiacAXQORrwFhAwFgA58iYAORugFqwACDoV0Dka8BYQMBYAOfImADkbqSwgSMzhjAAIatwACG8QaJqgBdA5GvAWADwAD/JQFqwACG0WADkcWS+QSMzxjAAIc/wACIGQaJrgBgA5HFAWrAAIdoYAORxZL5BIzQGMAAiGbAAIisBomvAF0Dka8BYAPAAP8lAWrAAIiLYAORxZMhBIzRGMAAiPrAAIovBomzAGADkcUBasAAiSRgA5HFkyEEjNIYwACKfMAAiqAGibQAXQORrwFgA8AA/yUBasAAio5gA5HFk00EjNMYwACK7sAAjAYGibgAYAORxQFqwACLCWADkcWTTQSM1BjAAIxTwACMmQaJuQBdA5GvAWADwAD/JQFqwACMeGADkcWTcgSM1RjAAIznwACOIgaJuwBgA5HFAWrAAI0RYAORxZNyBIzWGMAAjm/AAI6VBom8AF0Dka8BYAPAAP8lAWrAAI6CYAORxZOdBIzXGMAAjuPAAI+mBonAAGADkcUBasAAjv9gA5HFk50EjNgYwACP88AAkCEGicEAXQORrwFgA8AA/yUBasAAkApgA5HFk8gEjNkYwACQb8AAkUIGicUAYAORxQFqwACQj2ADkcWTyASM2hjAAJHcwACTTQaJxgBdA5HRAWEDAmADwAEAAmADwAEAAmADkboBasAAkgpdA5HRAWEDAmADwAEAAmADwAEAAmADkbqT8ASM2xjAAJPFwACUsgaJyQBdA5GvAWEDAmADwAEAAmADwAEAAmADkboBasAAk/NdA5GvAWEDAmADwAEAAmADwAEAAmADkbqUJASM3BjAAJfAwACY/gaJzABdA5HRAWEDAmADwAEAAmADwAEAAmADkboBasAAl+VdA5HRAWEDAmADwAEAAmADwAEAAmADkbqUWQSM3RjAAJl6wACaJgaJzwBdA5GvAWEDAmADwAEAAmADwAEAAmADkboBasAAmZ9dA5GvAWEDAmADwAEAAmADwAEAAmADkbqUgwSM3hjAAJx9wACdVgaJ0QBdA5HRAWEDAWADwAEAAmADkboBasAAnKpdA5HRAWEDAWADwAEAAmADkbqUtASM3xjAAJ28wACejgaJ0wBdA5GvAWEDAWADwAEAAmADkboBasAAneVdA5GvAWEDAWADwAEAAmADkbqU4QSM4BjAAKBewAChKwaJ1gBdA5HRAWEDAWADwAEAAmADkboBasAAoIddA5HRAWEDAWADwAEAAmADkbqVDQSM4RjAAKGRwACiFgaJ2ABdA5GvAWEDAWADwAEAAmADkboBasAAobZdA5GvAWEDAWADwAEAAmADkbqVLQSM4hjAAKPawACkpAaJ2gBdA5HRAWEDAWADwAEAAmADkboBasAApAJdA5HRAWEDAWADwAEAAmADkbqVWASM4xjAAKUKwAClyAaJ3ABdA5GvAWEDAWADwAEAAmADkboBasAApS5dA5GvAWEDAWADwAEAAmADkbqVhQSM5BjAAKeNwACoZQaJ3wBdA5HRAWEDAWADwAEAAmADkboBasAAp7xdA5HRAWEDAWADwAEAAmADkbqVrgSM5RjAAKjLwACpzQaJ4ABdA5GvAWEDAWADwAEAAmADkboBasAAqPZdA5GvAWEDAWADwAEAAmADkbqVzgSM5hjAAKucwACsZgaJ4gBdA5HRAWEDAWADwAEAAmADkboBasAAq8RdA5HRAWEDAWADwAEAAmADkbqV+gSM5xjAAKzMwACtigaJ5ABdA5GvAWEDAWADwAEAAmADkboBasAArPBdA5GvAWEDAWADwAEAAmADkbqWGgSM6BjAAK9PwACwJwaJ5gBdA5HRAWEDAWADwAEAAmADkboBasAAr35dA5HRAWEDAWADwAEAAmADkbqWQwSM6RjAALCNwACxjwaJ5wBdA5GvAWEDAWADwAEAAmADkboBasAAsLhdA5GvAWEDAWADwAEAAmADkbqWYwSM6hjAALNiwAC0PwaJ6QBdA5HRAWEDAWADwAEAAmADkboBasAAs5BdA5HRAWEDAWADwAEAAmADkbqWjwSM6xjAALSlwAC1hAaJ6wBdA5GvAWEDAWADwAEAAmADkboBasAAtM9dA5GvAWEDAWADwAEAAmADkbqWvASM7BjAALc7wAC3iQaJ7gBdA5GvAWADwAD/JQFqwAC3ZGADkcWW6ASM7RjAALfXwAC4hwaJ8QBgA5HFAWrAALgFYAORxZboBIzuGMAAuNTAALj8BonyAF0Dka8BYAPAAP8lAWrAALjoYAORxZcSBIzvGMAAuUrAALomBon2AGADkcUBasAAuWdgA5HFlxIEjPAYwAC6c8AAupUGifcAXQORrwFgA8AA/yUBasAAuoRgA5HFlz0EjPEYwAC648AAvCIGifsAYAORxQFqwAC6/WADkcWXPQSM8hjAALxvwAC8uwaJ/ABdA5GvAWADwAD/JQFqwAC8l2ADkcWXbwSM8xjAAL0JwAC9/gaKAABgA5HFAWrAAL02YAORxZdvBIz0GMAAvkvAAL6hBooBAF0Dka8BYAPAAP8lAWrAAL54YAORxZeUBIz1GMAAvu/AAL+7BooEAGADkcUBasAAvyFgA5HFl5QEjPYYwADACMAAwGQGigUAXQORrwFgA8AA/yUBasAAwDhgA5HFl7gEjPcYwADAssAAwYIGiggAYAORxQFqwADA62ADkcWXuASM+BjAAMHPwADCDQaKCQBdA5GvAWADwAD/JQFqwADB7mADkcWX7ASM+RjAAMJbwADDbQaKDgBgA5HFAWrAAMKDYAORxZfsBIz6GMAAw7rAAMQOBooPAF0Dka8BYAPAAP8lAWrAAMPmYAORxZgfBIz7GMAAxFzAAMVnBooTAGADkcUBasAAxI1gA5HFmB8EjPwYwADFtMAAxeoGihQAXQORrwFgA8AA/yUBasAAxc9gA5HFmEQEjP0YwADGOMAAxwAGihcAYAORxQFqwADGXGADkcWYRASM/hjAAMdNwADHewaKGABdA5GvAWADwAD/JQFqwADHZGADkcWYaQSM/xjAAMfJwADILgaKGwBgA5HFAWrAAMftYAORxZhpBI0AGMAAyLLAAMpnBoocAF0DkdEBYQMBYAPAAQACYAORugFqwADI210DkdEBYQMBYAPAAQACYAORupiNBI0BGMAAys3AAMvBBooeAF0Dka8BYQMBYAPAAQACYAORugFqwADK9l0Dka8BYQMBYAPAAQACYAORupi7BI0CGMAAzoTAAM+TBoohAF0DkdEBYQMBYAOJumADkboBasAAzq5dA5HRAWEDAWADibpgA5G6mOcEjQMYwADQAMAA0N0GiiMAXQORrwFhAwFgA4m6YAORugFqwADQKl0Dka8BYQMBYAOJumADkbqZEgSNBBjAANN0wADUcwaKJgBdA5HRAWEDAWADibpgA5G6AWrAANOaXQOR0QFhAwFgA4m6YAORupk8BI0FGMAA1ODAANWtBoooAF0Dka8BYQMBYAOJumADkboBasAA1QZdA5GvAWEDAWADibpgA5G6mWcEjQYYwADYNMAA2UQGiisAXQOR0QFhAwFgA4m6YAORugFqwADYZF0DkdEBYQMBYAOJumADkbqZkQSNBxjAANm1wADauQaKLQBdA5GvAWEDAWADibpgA5G6AWrAANnlXQORrwFhAwFgA4m6YAORupm8BI0IGMAA3RPAAN1RBoowAF0Dka8BYAPAAP8lAWrAAN0yYAORxZnzBI0JGMAA3Z/AAN5bBoo0AGADkcUBasAA3cdgA5HFmfMEjQoYwADey8AA38QGijUAXQOR0QFhAwFgA8ABAAJgA5G6AWrAAN8DXQOR0QFhAwFgA8ABAAJgA5G6mhgEjQsYwADgMMAA4S4GijcAXQORrwFhAwFgA8ABAAJgA5G6AWrAAOBkXQORrwFhAwFgA8ABAAJgA5G6mjgEjQwYwADjFsAA5EcGijkAXQOR0QFhAwFgA4j8YAORugFqwADjQV0DkdEBYQMBYAOI/GADkbqaZASNDRjAAOSwwADlSgaKOwBdA5GvAWEDAWADiPxgA5G6AWrAAOTbXQORrwFhAwFgA4j8YAORupqCBI0OGMAA6C/AAOmjBoo9AF0DkdEBYQMEYAPAAQACYAOJumADiPxgA4j8YAORugFqwADoYV0DkdEBYQMEYAPAAQACYAOJumADiPxgA4j8YAORupqrBI0PGMAA6k3AAOs6Boo/AF0Dka8BYQMEYAPAAQACYAOJumADiPxgA4j8YAORugFqwADqe10Dka8BYQMEYAPAAQACYAOJumADiPxgA4j8YAORuprXBI0QGMAA74vAAPD5BopBAF0DkdEBYQMCYAOJumADiPxgA5G6AWrAAO+9XQOR0QFhAwJgA4m6YAOI/GADkbqbDgSNERjAAPF6wADyPQaKQwBdA5GvAWEDAmADibpgA4j8YAORugFqwADxrF0Dka8BYQMCYAOJumADiPxgA5G6mzAEjRIYwAD1t8AA9uQGikUAXQOR0QFhAwJgA8ABAAJgA4m6YAORugFqwAD16F0DkdEBYQMCYAPAAQACYAOJumADkbqbXQSNExjAAPdkwAD4ZAaKRwBdA5GvAWEDAmADwAEAAmADibpgA5G6AWrAAPeVXQORrwFhAwJgA8ABAAJgA4m6YAORupuOBI0UGMAA+3vAAPyhBopKAF0DkdEBYQMCYAPAAQACYAOJumADkboBasAA+6ddA5HRAWEDAmADwAEAAmADibpgA5G6m74EjRUYwAD9IcAA/hMGikwAXQORrwFhAwJgA8ABAAJgA4m6YAORugFqwAD9TV0Dka8BYQMCYAPAAQACYAOJumADkbqb4gSNFhjAAQEFwAECEAaKTgBdA5HRAWEDAWADwAEAAmADkboBasABATZdA5HRAWEDAWADwAEAAmADkbqcEgSNFxjAAQJ2wAEDdwaKUABdA5GvAWEDAWADwAEAAmADkboBasABAqddA5GvAWEDAWADwAEAAmADkbqcPwSNGBjAAQWJwAEHJwaKUwBdA5HRAWEDAWADibpgA5G6AWrAAQXIXQOR0QFhAwFgA4m6YAORupxrBI0ZGMABB5jAAQi0BopVAF0Dka8BYQMBYAOJumADkboBasABB9NdA5GvAWEDAWADibpgA5G6nJYEjRoYwAELzMABDR8GilgAXQOR0QFhAwFgA4m6YAORugFqwAEL910DkdEBYQMBYAOJumADkbqcwASNGxjAAQ2QwAEOcAaKWgBdA5GvAWEDAWADibpgA5G6AWrAAQ27XQORrwFhAwFgA4m6YAORupzeBI0cGMABEXzAARKlBopcAF0DkdEBYQMDYAOJumADiPxgA4j8YAORugFqwAERoV0DkdEBYQMDYAOJumADiPxgA4j8YAORup0IBI0dGMABE0DAARPyBopeAF0Dka8BYQMDYAOJumADiPxgA4j8YAORugFqwAETYV0Dka8BYQMDYAOJumADiPxgA4j8YAORup0uBI0eGMABF2jAARhzBopgAF0DkdEBYQMBYAOJumADkboBasABF5hdA5HRAWEDAWADibpgA5G6nV8EjR8YwAEY5MABGecGimIAXQORrwFhAwFgA4m6YAORugFqwAEZEF0Dka8BYQMBYAOJumADkbqdigSNIBjAARyewAEd0QaKZQBdA5HRAWEDA2ADwAEAAmADwAEAAmADwAEAAmADkboBasABHMVdA5HRAWEDA2ADwAEAAmADwAEAAmADwAEAAmADkbqdtASNIRjAAR5dwAEfCgaKZwBdA5GvAWEDA2ADwAEAAmADwAEAAmADwAEAAmADkboBasABHoRdA5GvAWEDA2ADwAEAAmADwAEAAmADwAEAAmADkbqd4ASNIhjAASHHwAEiywaKaQBdA5HRAWEDAWADwAEAAmADkboBasABIfNdA5HR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YAORuqnYBI2AGMABsQDAAbIPBotRAF0DkdEBYQMBYAPAAQACYAORugFqwAGxNF0DkdEBYQMBYAPAAQACYAORuqoDBI2BGMABsnnAAbNZBotTAF0Dka8BYQMBYAPAAQACYAORugFqwAGyrV0Dka8BYQMBYAPAAQACYAORuqojBI2CGMABtWTAAbZeBotVAF0DkdEBYQMBYAPAAQACYAORugFqwAG1kV0DkdEBYQMBYAPAAQACYAORuqpOBI2DGMABtsTAAbdVBotXAF0Dka8BYQMBYAPAAQACYAORugFqwAG27V0Dka8BYQMBYAPAAQACYAORuqpuBI2EGMABuVPAAbpLBotZAF0DkdEBYQMDYAPAAQACYAPAAQCDYAPAAQCDYAORugFqwAG5eF0DkdEBYQMDYAPAAQACYAPAAQCDYAPAAQCDYAORuqqZBI2FGMABusrAAbuPBotbAF0Dka8BYQMDYAPAAQACYAPAAQCDYAPAAQCDYAORugFqwAG6610Dka8BYQMDYAPAAQACYAPAAQCDYAPAAQCDYAORuqrSBI2GGMABvfXAAb75BoteAF0DkdEBYQMDYAPAAQACYAPAAQCDYAPAAQCDYAORugFqwAG+IF0DkdEBYQMDYAPAAQACYAPAAQCDYAPAAQCDYAORuqsHBI2HGMABv3jAAcBJBotfAF0Dka8BYQMDYAPAAQACYAPAAQCDYAPAAQCDYAORugFqwAG/n10Dka8BYQMDYAPAAQACYAPAAQCDYAPAAQCDYAORuqszBI2IGMABwrvAAcOzBothAF0DkdEBYQMDYAPAAQACYAPAAQCDYAPAAQCDYAORugFqwAHC4F0DkdEBYQMDYAPAAQACYAPAAQCDYAPAAQCDYAORuqtqBI2JGMABxDLAAcTmBotjAF0Dka8BYQMDYAPAAQACYAPAAQCDYAPAAQCDYAORugFqwAHEU10Dka8BYQMDYAPAAQACYAPAAQCDYAPAAQCDYAORuquWBI2KGMABx0zAAchQBotlAF0DkdEBYQMDYAPAAQACYAPAAQCDYAPAAQCDYAORugFqwAHHd10DkdEBYQMDYAPAAQACYAPAAQCDYAPAAQCDYAORuqvKBI2LGMAByM/AAcnVBotmAF0Dka8BYQMDYAPAAQACYAPAAQCDYAPAAQCDYAORugFqwAHI9l0Dka8BYQMDYAPAAQACYAPAAQCDYAPAAQCDYAORuqwDBI2MGMABzC7AAc0lBotpAF0DkdEBYQMBYAPAAQACYAORugFqwAHMWl0DkdEBYQMBYAPAAQACYAORuqw7BI2NGMABzYvAAc5fBotrAF0Dka8BYQMBYAPAAQACYAORugFqwAHNs10Dka8BYQMBYAPAAQACYAORuqxoBI2OGMAB0EXAAdElBotuAF0DkdEBYQMBYAPAAQACYAORugFqwAHQeF0DkdEBYQMBYAPAAQACYAORuqyUBI2PGMAB0YvAAdJTBotwAF0Dka8BYQMBYAPAAQACYAORugFqwAHRul0Dka8BYQMBYAPAAQACYAORuqy0BI2QGMAB1CrAAdUhBotyAF0DkdEBYQMBYAPAAQACYAORugFqwAHUVl0DkdEBYQMBYAPAAQACYAORuqzfBI2RGMAB1YfAAdZ/Bot0AF0Dka8BYQMBYAPAAQACYAORugFqwAHVr10Dka8BYQMBYAPAAQACYAORuq0MBI2SGMAB2GXAAdlFBot3AF0DkdEBYQMBYAPAAQACYAORugFqwAHYmF0DkdEBYQMBYAPAAQACYAORuq04BI2TGMAB2avAAdpzBot5AF0Dka8BYQMBYAPAAQACYAORugFqwAHZ2l0Dka8BYQMBYAPAAQACYAORuq1YBI2UGMAB3ErAAd1/Bot7AF0DkdEBYQMBYAOfImADkboBasAB3HFdA5HRAWEDAWADnyJgA5G6rYYEjZUYwAHd5cAB3nkGi34AXQORrwFhAwFgA58iYAORugFqwAHeCF0Dka8BYQMBYAOfImADkbqtqASNlhjAAeBvwAHhcgaLgABdA5HRAWEDAWADwAEAAmADkboBasAB4JxdA5HRAWEDAWADwAEAAmADkbqt0QSNlxjAAeHYwAHiuQaLggBdA5GvAWEDAWADwAEAAmADkboBasAB4gVdA5GvAWEDAWADwAEAAmADkbqt/gSNmBjAAeS8wAHlnAaLhQBdA5HRAWEDAWADwAEAAmADkboBasAB5PJdA5HRAWEDAWADwAEAAmADkbquKgSNmRjAAeYGwAHm4AaLhwBdA5GvAWEDAWADwAEAAmADkboBasAB5jhdA5GvAWEDAWADwAEAAmADkbquSgSNmhjAAeixwAHphwaLiQBdA5HRAWEDAWADwAEAAmADkboBasAB6N1dA5HRAWEDAWAD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JQFqwAJmdWADkcW56ASN/RjAAmbhwAJn4AaMcABgA5HFAWrAAmcIYAORxbnoBI3+GMACaC3AAmhVBoxxAF0Dka8BYAPAAP8lAWrAAmhBYAORxboQBI3/GMACaKPAAmlhBox0AGADkcUBasACaMBgA5HFuhAEjgAYwAJprsACaegGjHUAXQORrwFgA8AA/yUBasACactgA5HFujgEjgEYwAJqNsACatoGjHgAYAORxQFqwAJqXGADkcW6OASOAhjAAmsnwAJrUwaMeQBdA5GvAWADwAD/JQFqwAJrPWADkcW6XwSOAxjAAmuhwAJsZQaMfABgA5HFAWrAAmvAYAORxbpfBI4EGMACbM/AAm3RBox9AF0DkdEBYQMBYAOfImADkboBasACbPZdA5HRAWEDAWADnyJgA5G6uocEjgUYwAJuN8ACbssGjIAAXQORrwFhAwFgA58iYAORugFqwAJuWl0Dka8BYQMBYAOfImADkbq6qQSOBhjAAnBlwAJwjwaMggBdA5GvAWADwAD/JQFqwAJwemADkcW63wSOBxjAAnDdwAJxlgaMhgBgA5HFAWrAAnD7YAORxbrfBI4IGMACcePAAnIpBoyHAF0Dka8BYAPAAP8lAWrAAnIIYAORxbsKBI4JGMACcnfAAnNiBoyLAGADkcUBasACcqFgA5HFuwoEjgoYwAJzzMACdJ8GjIwAXQOR0QFhAwFgA8ABAAJgA5G6AWrAAnP5XQOR0QFhAwFgA8ABAAJgA5G6uy8EjgsYwAJ1BcACdZYGjI4AXQORrwFhAwFgA8ABAAJgA5G6AWrAAnUuXQORrwFhAwFgA8ABAAJgA5G6u08EjgwYwAJ3Q8ACd20GjJAAXQORrwFgA8AA/yUBasACd1hgA5HFu3oEjg0YwAJ3u8ACgrwGjJMAYAORxQFqwAJ33WADkcW7egSODhjAAoMJwAKDNQaMlABdA5GvAWADwAD/JQFqwAKDH2ADkcW7ngSODxjAAoODwAKEaQaMlwBgA5HFAWrAAoOmYAORxbueBI4QGMAChOvAAoXYBoyYAF0DkdEBYQMCYAOI/GADiPxgA5G6AWrAAoUTXQOR0QFhAwJgA4j8YAOI/GADkbq7wgSOERjAAoZWwAKG7AaMmgBdA5GvAWEDAmADiPxgA4j8YAORugFqwAKGel0Dka8BYQMCYAOI/GADiPxgA5G6u+QEjhIYwAKJjcACipEGjJwAXQOR0QFhAwFgA8ABAAJgA5G6AWrAAonDXQOR0QFhAwFgA8ABAAJgA5G6vBEEjhMYwAKK+8ACi6cGjJ4AXQORrwFhAwFgA8ABAAJgA5G6AWrAAostXQORrwFhAwFgA8ABAAJgA5G6vDEEjhQYwAKNm8ACjtgGjKAAXQOR0QFhAwFgA8ABAAJgA5G6AWrAAo2+XQOR0QFhAwFgA8ABAAJgA5G6vFwEjhUYwAKPPsACj70GjKIAXQORrwFhAwFgA8ABAAJgA5G6AWrAAo9hXQORrwFhAwFgA8ABAAJgA5G6vHwEjhYYwAKR+8ACkyMGjKQAXQOR0QFhAwFgA8ABAAJgA5G6AWrAApIfXQOR0QFhAwFgA8ABAAJgA5G6vKcEjhcYwAKTicAClAsGjKYAXQORrwFhAwFgA8ABAAJgA5G6AWrAApOtXQORrwFhAwFgA8ABAAJgA5G6vMcEjhgYwAKWScACl4AGjKgAXQOR0QFhAwFgA8ABAAJgA5G6AWrAApZuXQOR0QFhAwFgA8ABAAJgA5G6vPIEjhkYwAKX5sACmGsGjKoAXQORrwFhAwFgA8ABAAJgA5G6AWrAApgLXQORrwFhAwFgA8ABAAJgA5G6vRIEjhoYwAKao8ACm7AGjKwAXQOR0QFhAwFgA8ABAAJgA5G6AWrAAprAXQOR0QFhAwFgA8ABAAJgA5G6vT0EjhsYwAKcFsACnIMGjK4AXQORrwFhAwFgA8ABAAJgA5G6AWrAApwzXQORrwFhAwFgA8ABAAJgA5G6vV0EjhwYwAKejMACn1cGjLAAXQOR0QFhAwFgA8ABAAJgA5G6AWrAAp6xXQOR0QFhAwFgA8ABAAJgA5G6vYgEjh0YwAKfvcACoDYGjLIAXQORrwFhAwFgA8ABAAJgA5G6AWrAAp/eXQORrwFhAwFgA8ABAAJgA5G6vagEjh4YwAKiAMACovcGjLQAXQOR0QFhAwFgA4j8YAORugFqwAKiH10DkdEBYQMBYAOI/GADkbq90wSOHxjAAqNgwAKj1gaMtgBdA5GvAWEDAWADiPxgA5G6AWrAAqN/XQORrwFhAwFgA4j8YAORur3xBI4gGMACpmfAAqeMBoy4AF0DkdEBYQMDYAOI/GADiPxgA4j8YAORugFqwAKmh10DkdEBYQMDYAOI/GADiPxgA4j8YAORur4aBI4hGMACqBvAAqi7Boy6AF0Dka8BYQMDYAOI/GADiPxgA4j8YAORugFqwAKoN10Dka8BYQMDYAOI/GADiPxgA4j8YAORur5ABI4iGMACrD7AAq1KBoy8AF0DkdEBYQMCYAPAAQACYAOI/GADkboBasACrF1dA5HRAWEDAmADwAEAAmADiPxgA5G6vnEEjiMYwAKtwMACrkMGjL4AXQORrwFhAwJgA8ABAAJgA4j8YAORugFqwAKt310Dka8BYQMCYAPAAQACYAOI/GADkbq+lQSOJBjAArEJwAKx/gaMwABdA5HRAWEDAWADwAEAAmADkboBasACsTddA5HRAWEDAWADwAEAAmADkbq+xASOJRjAArJkwAKy+AaMwgBdA5GvAWEDAWADwAEAAmADkboBasACso5dA5GvAWEDAWADwAEAAmADkbq+5ASOJhjAArS9wAK1GQaMxABdA5GvAWADwAD/JQFqwAK07WADkcW/FQSOJxjAArVnwAK2twaMyABgA5HFAWrAArWcYAORxb8VBI4oGMACtwTAArdaBozJAF0Dka8BYAPAAP8lAWrAArcxYAORxb9ABI4pGMACt6jAAriWBozNAGADkcUBasACt9pgA5HFv0AEjioYwAK448ACuRMGjM4AXQORrwFgA8AA/yUBasACuPtgA5HFv2sEjisYwAK5YcACuloGjNIAYAORxQFqwAK5gmADkcW/awSOLBjAArqnwAK6ywaM0wBdA5GvAWADwAD/JQFqwAK6uWADkcW/lgSOLRjAArsZwAK72waM1wBgA5HFAWrAArs0YAORxb+WBI4uGMACvF/AAr2iBozYAF0DkdEBYQMBYAPAAQACYAORugFqwAK8iF0DkdEBYQMBYAPAAQACYAORur++BI4vGMACvgjAAr7VBozbAF0Dka8BYQMBYAPAAQACYAORugFqwAK+MV0Dka8BYQMBYAPAAQACYAORur/sBI4wGMACwSfAAsKpBozeAF0DkdEBYQMBYAPAAQACYAORugFqwALBXV0DkdEBYQMBYAPAAQACYAORusAAQBsEjjEYwALDE8ACxB0GjOEAXQORrwFhAwFgA8ABAAJgA5G6AWrAAsNJXQORrwFhAwFgA8ABAAJgA5G6wABAUQSOMhjAAsawwALH/AaM5ABdA5HRAWEDAWADwAEAAmADkboBasACxt1dA5HRAWEDAWADwAEAAmADkbrAAECDBI4zGMACyGLAAsk7BozmAF0Dka8BYQMBYAPAAQACYAORugFqwALIj10Dka8BYQMBYAPAAQACYAORusAAQKgEjjQYwALLgMACzKcGjOgAXQOR0QFhAwFgA8ABAAJgA5G6AWrAAsu8XQOR0QFhAwFgA8ABAAJgA5G6wABA2ASONRjAAs0RwALOTQaM6gBdA5GvAWEDAWADwAEAAmADkboBasACzUldA5GvAWEDAWADwAEAAmADkbrAAEELBI42GMAC0G3AAtF0BoztAF0DkdEBYQMBYAPAAQACYAORugFqwALQrl0DkdEBYQMBYAPAAQACYAORusAAQT0EjjcYwALR3sAC0tkGjO8AXQORrwFhAwFgA8ABAAJgA5G6AWrAAtIbXQORrwFhAwFgA8ABAAJgA5G6wABBYQSOOBjAAtUGwALWcAaM8QBdA5HRAWEDAmADiPxgA4j8YAORugFqwALVOF0DkdEBYQMCYAOI/GADiPxgA5G6wABBkwSOORjAAtbuwALX+waM9ABdA5GvAWEDAmADiPxgA4j8YAORugFqwALXIF0Dka8BYQMCYAOI/GADiPxgA5G6wABBywSOOhjAAtr/wALbRwaM9wBdA5GvAWADwAD/JQFqwALbJWADkcXAAEH/BI47GMAC25XAAtw6Boz6AGADkcUBasAC28BgA5HFwABB/wSOPBjAAtyHwALcwQaM+wBdA5GvAWADwAD/JQFqwALcpGADkcXAAEInBI49GMAC3Q/AAt24Boz+AGADkcUBasAC3TVgA5HFwABCJwSOPhjAAt5YwALfZwaM/wBdA5HRAWEDAmADiPxgA4j8YAORugFqwALegV0DkdEBYQMCYAOI/GADiPxgA5G6wABCTwSOPxjAAt/lwALgxwaNAQBdA5GvAWEDAmADiPxgA4j8YAORugFqwALgDl0Dka8BYQMCYAOI/GADiPxgA5G6wABChASOQBjAAuN3wALjvQaNBABdA5GvAWADwAD/JQFqwALjnGADkcXAAELKBI5BGMAC5AvAAuUQBo0JAGADkcUBasAC5DVgA5HFwABCygSOQhjAAuVdwALlmwaNCgBdA5GvAWADwAD/JQFqwALlfGADkcXAAEMHBI5DGMAC5enAAubABo0OAGADkcUBasAC5hFgA5HFwABDBwSO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kdEBYQMEYAOI/GADiPxgA8ABAAJgA8ABAAJgA5G6AWrAA2MNXQOR0QFhAwRgA4j8YAOI/GADwAEAAmADwAEAAmADkbrAAE0+BI6FGMADZWvAA2acBo2uAF0Dka8BYQMEYAOI/GADiPxgA8ABAAJgA8ABAAJgA5G6AWrAA2WVXQORrwFhAwRgA4j8YAOI/GADwAEAAmADwAEAAmADkbrAAE1zBI6GGMADa5jAA225Bo2wAF0DkdEBYQMFYAOI/GADiPxgA8ABAAJgA4j8YAPAAQACYAORugFqwANrx10DkdEBYQMFYAOI/GADiPxgA8ABAAJgA4j8YAPAAQACYAORusAATbMEjocYwANudMADb8QGjbIAXQORrwFhAwVgA4j8YAOI/GADwAEAAmADiPxgA8ABAAJgA5G6AWrAA26jXQORrwFhAwVgA4j8YAOI/GADwAEAAmADiPxgA8ABAAJgA5G6wABN7ASOiBjAA3U5wAN3PwaNtABdA5HRAWEDBWADiPxgA4j8YAPAAQACYAOI/GADwAEAAmADkboBasADdXBdA5HRAWEDBWADiPxgA4j8YAPAAQACYAOI/GADwAEAAmADkbrAAE4wBI6JGMADd/7AA3liBo22AF0Dka8BYQMFYAOI/GADiPxgA8ABAAJgA4j8YAPAAQACYAORugFqwAN4MV0Dka8BYQMFYAOI/GADiPxgA8ABAAJgA4j8YAPAAQACYAORusAATmkEjooYwAN+ZsADfrIGjbgAXQORrwFgA8AA/yUBasADfo5gA5HFwABOrQSOixjAA38AwAN/zQaNuwBgA5HFAWrAA38tYAORxcAATq0EjowYwAOANMADgQQGjbwAXQOR0QFhAwFgA8ABAINgA5G6AWrAA4BbXQOR0QFhAwFgA8ABAINgA5G6wABO1QSOjRjAA4FnwAOCCQaNvgBdA5GvAWEDAWADwAEAg2ADkboBasADgYpdA5GvAWEDAWADwAEAg2ADkbrAAE75BI6OGMADg3vAA4O5Bo3AAF0Dka8BYAPAAP8lAWrAA4OaYAORxcAATzcEjo8YwAOEB8ADhOUGjcQAYAORxQFqwAOEL2ADkcXAAE83BI6QGMADhTLAA4WABo3FAF0Dka8BYAPAAP8lAWrAA4VbYAORxcAAT2IEjpEYwAOFzsADhoEGjcgAYAORxQFqwAOF/GADkcXA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juwYwARIysAESkwGjogAXQOR0QFhAwJgA4j8YAOI/GADkboBasAESO1dA5HRAWEDAmADiPxgA4j8YAORusAAXVgEju0YwARKysAES5kGjosAXQORrwFhAwJgA4j8YAOI/GADkboBasAESu1dA5GvAWEDAmADiPxgA4j8YAORusAAXZAEju4YwARO+8AEUHMGjo4AXQOR0QFhAwJgA4j8YAOI/GADkboBasAETyNdA5HRAWEDAmADiPxgA4j8YAORusAAXccEju8YwARQ8cAEUc0GjpEAXQORrwFhAwJgA4j8YAOI/GADkboBasAEURldA5GvAWEDAmADiPxgA4j8YAORusAAXf8EjvAYwARVJcAEVqwGjpQAXQOR0QFhAwJgA4j8YAOI/GADkboBasAEVVFdA5HRAWEDAmADiPxgA4j8YAORusAAXjMEjvEYwARXKsAEWBQGjpYAXQORrwFhAwJgA4j8YAOI/GADkboBasAEV1ZdA5GvAWEDAmADiPxgA4j8YAORusAAXlwEjvIYwARbLcAEW2UGjpgAXQORrwFgA8AA/yUBasAEW0lgA5HFwABenwSO8xjABFuzwARcZwaOnABgA5HFAWrABFvYYAORxcAAXp8EjvQYwARctMAEXOIGjp0AXQORrwFgA8AA/yUBasAEXMtgA5HFwABe2QSO9RjABF0wwAReBQaOoQBgA5HFAWrABF1QYAORxcAAXtkEjvYYwAReb8AEXzkGjqIAXQOR0QFhAwFgA8ABAAJgA5G6AWrABF6ZXQOR0QFhAwFgA8ABAAJgA5G6wABfBASO9xjABF+fwARgJwaOpABdA5GvAWEDAWADwAEAAmADkboBasAEX8VdA5GvAWEDAWADwAEAAmADkbrAAF8oBI74GMAEYcXABGHzBo6mAF0Dka8BYAPAAP8lAWrABGHcYAORxcAAX1oEjvkYwARiQcAEYwEGjqkAYAORxQFqwARiYWADkcXAAF9aBI76GMAEY07ABGOABo6qAF0Dka8BYAPAAP8lAWrABGNnYAORxcAAX4oEjvsYwARjzsAEZJoGjq0AYAORxQFqwARj8GADkcXAAF+KBI78GMAEZOfABGUrBo6uAF0Dka8BYAPAAP8lAWrABGULYAORxcAAX8kEjv0YwARlecAEZx8GjrMAYAORxQFqwARlomADkcXAAF/JBI7+GMAEZ4nABGhuBo60AF0DkdEBYQMBYAOfImADkboBasAEZ61dA5HRAWEDAWADnyJgA5G6wABf9wSO/xjABGjUwARpXwaOtgBdA5GvAWEDAWADnyJgA5G6AWrABGj0XQORrwFhAwFgA58iYAORusAAYBwEjwAYwARrBsAEa9gGjrgAXQOR0QFhAwJgA8ABAINgA8ABAAJgA5G6AWrABGssXQOR0QFhAwJgA8ABAINgA8ABAAJgA5G6wABgSwSPARjABGxKwARs0gaOugBdA5GvAWEDAmADwAEAg2ADwAEAAmADkboBasAEbGxdA5GvAWEDAmADwAEAg2ADwAEAAmADkbrAAGB1BI8CGMAEbo7ABG7SBo68AF0Dka8BYAPAAP8lAWrABG6yYAORxcAAYK0EjwMYwARvIMAEcB8Gjr8AYAORxQFqwARvSWADkcXAAGCtBI8EGMAEcGzABHCgBo7AAF0Dka8BYAPAAP8lAWrABHCGYAORxcAAYOkEjwUYwARw7sAEcdIGjsUAYAORxQFqwARxEWADkcXAAGDpBI8GGMAEch/ABHJdBo7GAF0Dka8BYAPAAP8lAWrABHI+YAORxcAAYRoEjwcYwARyq8AEc84GjskAYAORxQFqwARy02ADkcXAAGEaBI8IGMAEdBvABHRRBo7KAF0Dka8BYAPAAP8lAWrABHQ2YAORxcAAYUcEjwkYwAR0n8AEdZEGjs0AYAORxQFqwAR0w2ADkcXAAGFHBI8KGMAEdd7ABHYmBo7OAF0Dka8BYAPAAP8lAWrABHYEYAORxcAAYYMEjwsYwAR2dMAEd1oGjtMAYAORxQFqwAR2n2ADkcXAAGGDBI8MGMAEd6fABHfLBo7UAF0Dka8BYAPAAP8lAWrABHe5YAORxcAAYbQEjw0YwAR4GcAEeUAGjtgAYAORxQFqwAR4NGADkcXAAGG0BI8OGMAEearABHqWBo7ZAF0DkdEBYQMBYAPAAQACYAORugFqwAR50F0DkdEBYQMBYAPAAQACYAORusAAYeAEjw8YwAR6/MAEe7kGjtsAXQORrwFhAwFgA8ABAAJgA5G6AWrABHseXQORrwFhAwFgA8ABAAJgA5G6wABiEwSPEBjABH2VwAR+twaO3gBdA5HRAWEDAWADwAEAAmADkboBasAEfbNdA5HRAWEDAWADwAEAAmADkbrAAGJIBI8RGMAE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A8ABAINgA5G6wABpOASPShjABMviwATMLgaPYABdA5GvAWADwAD/JQFqwATMCmADkcXAAGlwBI9LGMAEzHzABM1ZBo9kAGADkcUBasAEzKlgA5HFwABpcASPTBjABM2mwATN5AaPZQBdA5GvAWADwAD/JQFqwATNxWADkcXAAGmvBI9NGMAEzjLABM9DBo9qAGADkcUBasAEzlpgA5HFwABprwSPThjABM/fwATRLgaPawBdA5HRAWEDA2ADiPxgA4j8YAOI/GADkboBasAE0BVdA5HRAWEDA2ADiPxgA4j8YAOI/GADkbrAAGndBI9PGMAE0b3ABNL9Bo9tAF0Dka8BYQMDYAOI/GADiPxgA4j8YAORugFqwATR710Dka8BYQMDYAOI/GADiPxgA4j8YAORusAAahYEj1AYwATWsMAE2BwGj3AAXQOR0QFhAwNgA8ABAAJgA8ABAAJgA4j8YAORugFqwATW3l0DkdEBYQMDYAPAAQACYAPAAQACYAOI/GADkbrAAGpOBI9RGMAE2KTABNmxBo9yAF0Dka8BYQMDYAPAAQACYAPAAQACYAOI/GADkboBasAE2NJdA5GvAWEDA2ADwAEAAmADwAEAAmADiPxgA5G6wABqiwSPUhjABN18wATetQaPdQBdA5HRAWEDAmADwAEAAmADwAEAAmADkboBasAE3Z9dA5HRAWEDAmADwAEAAmADwAEAAmADkbrAAGrKBI9TGMAE3zHABN/XBo94AF0Dka8BYQMCYAPAAQACYAPAAQACYAORugFqwATfVF0Dka8BYQMCYAPAAQACYAPAAQACYAORusAAavoEj1QYwATiDMAE4mAGj3oAXQORrwFgA8AA/yUBasAE4jhgA5HFwABrQASPVRjABOKuwATjogaPfgBgA5HFAWrABOLfYAORxcAAa0AEj1YYwATj78AE5BsGj38AXQORrwFgA8AA/yUBasAE5AVgA5HFwABrcQSPVxjABORpwATldQaPgwBgA5HFAWrABOSIYAORxcAAa3EEj1gYwATlwsAE5fQGj4QAXQORrwFgA8AA/yUBasAE5dtgA5HFwABrsASPWRjABOZCwATnfAaPiQBgA5HFAWrABOZkYAORxcAAa7AEj1oYwATnycAE6A0Gj4oAXQORrwFgA8AA/yUBasAE5+1gA5HFwABr5ASPWxjABOhbwATp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A5G6AWrABXasXQORrwFhAwJgA8ABAAJgA8ABAAJgA5G6wAB37gSPrhjABXpQwAV7OgaQSQBdA5HRAWEDAmADwAEAAmADwAEAg2ADkboBasAFenRdA5HRAWEDAmADwAEAAmADwAEAg2ADkbrAAHgmBI+vGMAFe6rABXwqBpBLAF0Dka8BYQMCYAPAAQACYAPAAQCDYAORugFqwAV7yl0Dka8BYQMCYAPAAQACYAPAAQCDYAORusAAeFAEj7AYwAV+NMAFfw8GiA0AXQOR0QFhAwFgA8ABAAJgA5G6AWrABX5bXQOR0QFhAwFgA8ABAAJgA5G6iEYEj7EYwAV/d8AFf/gGkE0AXQORrwFhAwFgA8ABAAJgA5G6AWrABX+aXQORrwFhAwFgA8ABAAJgA5G6wAB4ggSPshjABYGIwAWBqgaQTwBdA5GvAWADwAD/JQFqwAWBmWADkcXAAHi+BI+zGMAFgfjABYLCBpBTAGADkcUBasAFghJgA5HFwAB4vgSPtBjABYMPwAWDPwaQVABdA5GvAWADwAD/JQFqwAWDJ2ADkcXAAHjpBI+1GMAFg43ABYQxBpBXAGADkcUBasAFg65gA5HFwAB46QSPthjABYR+wAWEoAaQWABdA5GvAWADwAD/JQFqwAWEj2ADkcXAAHkUBI+3GMAFhO7ABYX9BpBcAGADkcUBasAFhQhgA5HFwAB5FASPuBjABYZKwAWGiAaQXQBdA5GvAWADwAD/JQFqwAWGaWADkcXAAHlCBI+5GMAFhtbABYd/BpBgAGADkcUBasAFhv5gA5HFwAB5QgSPuhjABYfrwAWJMQaQYQBdA5HRAWEDAWADwAEAg2ADkboBasAFiAtdA5HRAWEDAWADwAEAg2ADkbrAAHltBI+7GMAFiZTABYpDBpBkAF0Dka8BYQMBYAPAAQCDYAORugFqwAWJtF0Dka8BYQMBYAPAAQCDYAORusAAeaMEj7wYwAWMjMAFja0GkGcAXQOR0QFhAwNgA8ABAINgA8ABAAJgA8ABAAJgA5G6AWrABYy2XQOR0QFhAwNgA8ABAINgA8ABAAJgA8ABAAJgA5G6wAB51QSPvRjABY4vwAWPSgaQaQBdA5GvAWEDA2ADwAEAg2ADwAEAAmADwAEAAmADkboBasAFjlldA5GvAWEDA2ADwAEAg2ADwAEAAmADwAEAAmADkbrAAHoUBI++GMAFkfLABZIUBpBsAF0Dka8BYAPAAP8lAWrABZIDYAORxcAAelIEj78YwAWSYsAFkv0GkG8AYAORxQFqwAWSfGADkcXAAHpSBI/AGMAFk0rABZNuBpBwAF0Dka8BYAPAAP8lAWrABZNcYAORxcAAeoMEj8EYwAWTvMAFlJAGkHQAYAORxQFqwAWT12ADkcXAAHqDBI/CGMAFlN3ABZUPBpB1AF0Dka8BYAPAAP8lAWrABZT2YAORxcAAerMEj8MYwAWVXcAFlooGkHkAYAORxQFqwAWVf2ADkcXAAHqzBI/EGMAFltfABZcbBpB6AF0Dka8BYAPAAP8lAWrABZb7YAORxcAAeuEEj8UYwAWXacAFmBQGkH0AYAORxQFqwAWXkmADkcXAAHrhBI/GGMAFmLvABZnGBpB+AF0DkdEBYQMDYAPAAQCDYAPAAQCDYAPAAQCDYAORugFqwAWY3V0DkdEBYQMDYAPAAQCDYAPAAQCDYAPAAQCDYAORusAAewkEj8cYwAWaQ8AFm0EGkIAAXQORrwFhAwNgA8ABAINgA8ABAINgA8ABAINgA5G6AWrABZplXQORrwFhAwNgA8ABAINgA8ABAINgA8ABAINgA5G6wAB7OQSPyBjABZ29wAWfJQaQggBdA5HRAWEDA2ADwAEAg2ADwAEAg2ADwAEAAmADkboBasAFndpdA5HRAWEDA2ADwAEAg2ADwAEAg2ADwAEAAmADkbrAAHt6BI/JGMAFn6TABaCTBpCFAF0Dka8BYQMDYAPAAQCDYAPAAQCDYAPAAQACYAORugFqwAWfwV0Dka8BYQMDYAPAAQCDYAPAAQCDYAPAAQACYAORusAAe7wEj8oYwAWjNcAFo1cGkIgAXQORrwFgA8AA/yUBasAFo0ZgA5HFwAB7/QSPyxjABaOlwAWkUwaQjABgA5HFAWrABaO/YAORxcAAe/0Ej8wYwAWkusAFpXkGkI0AXQOR0QFhAwFgA8ABAINgA5G6AWrABaTYXQOR0QFhAwFgA8ABAINgA5G6wAB8KASPzRjABaXcwAWmaQaQjwBdA5GvAWEDAWADwAEAg2ADkboBasAFpfZdA5GvAWEDAWADwAEAg2ADkbrAAHxbBI/OGMAFp8rABaf4BpCSAF0Dka8BYAPAAP8lAWrABafhYAORxcAAfI0Ej88YwAWoRsAFqNkG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AWEDAmADwAD+G2ADwAD+G2ADkboBasAGYKddA5HRAWEDAmADwAD+G2ADwAD+G2ADkbrAAI2MBJBRGMAGYefABmLaBpHAAF0Dka8BYQMCYAPAAP4bYAPAAP4bYAORugFqwAZiB10Dka8BYQMCYAPAAP4bYAPAAP4bYAORusAAjcUEkFIYwAZlDsAGZkoGkcMAXQOR0QFhAwJgA8AA/htgA8AA/htgA5G6AWrABmUvXQOR0QFhAwJgA8AA/htgA8AA/htgA5G6wACOAASQUxjABma6wAZnrQaRxgBdA5GvAWEDAmADwAD+G2ADwAD+G2ADkboBasAGZttdA5GvAWEDAmADwAD+G2ADwAD+G2ADkbrAAI4tBJBUGMAGad3ABmoLBpHIAF0Dka8BYAPAAP8lAWrABmn0YAORxcAAjmkEkFUYwAZqWcAGa1kGkcwAYAORxQFqwAZqeWADkcXAAI5pBJBWGMAGa6bABmvMBpHNAF0Dka8BYAPAAP8lAWrABmu5YAORxcAAjpwEkFcYwAZsGsAGbOAGkdEAYAORxQFqwAZsNmADkcXAAI6cBJBYGMAGbUjABm4TBpHSAF0DkdEBYQMBYAPAAP4bYAORugFqwAZtcV0DkdEBYQMBYAPAAP4bYAORusAAjskEkFkYwAZud8AGb24GkdQAXQORrwFhAwFgA8AA/htgA5G6AWrABm6cXQORrwFhAwFgA8AA/htgA5G6wACO/ASQWhjABnELwAZyRQaR1wBdA5HRAWEDAWADwAEAAmADkboBasAGcTtdA5HRAWEDAWADwAEAAmADkbrAAI8xBJBbGMAGcqvABnOBBpHaAF0Dka8BYQMBYAPAAQACYAORugFqwAZy110Dka8BYQMBYAPAAQACYAORusAAj1gEkFwYwAZ1fsAGda4GkdwAXQORrwFgA8AA/yUBasAGdZZgA5HFwACPjQSQXRjABnX8wAZ22QaR4ABgA5HFAWrABnYdYAORxcAAj40EkF4YwAZ3Q8AGd/gGkeEAXQOR0QFhAwFgA8ABAAJgA5G6AWrABndkXQOR0QFhAwFgA8ABAAJgA5G6wACPugSQXxjABnhewAZ5MAaR4wBdA5GvAWEDAWADwAEAAmADkboBasAGeHtdA5GvAWEDAWADwAEAAmADkbrAAI/tBJBgGMAGeuDABnubBpHmAF0DkdEBYQMCYAPAAQACYAPAAQCDYAORugFqwAZ6/10DkdEBYQMCYAPAAQACYAPAAQCDYAORusAAkB8EkGEYwAZ8C8AGfHwGkegAXQORrwFhAwJgA8ABAAJgA8ABAINgA5G6AWrABnwmXQORrwFhAwJgA8ABAAJgA8ABAINgA5G6wACQSQSQYhjABn56wAZ/YAaR6gBdA5HRAWEDA2ADwAEAAmADwAEAg2ADwAEAg2ADkboBasAGfqRdA5HRAWEDA2ADwAEAAmADwAEAg2ADwAEAg2ADkbrAAJB+BJBjGMAGf9/ABoB8BpHsAF0Dka8BYQMDYAPAAQACYAPAAQCDYAPAAQCDYAORugFqwAaABV0Dka8BYQMDYAPAAQACYAPAAQCDYAPAAQCDYAORusAAkK4EkGQYwAaCpsAGguwGke4AXQORrwFgA8AA/yUBasAGgstgA5HFwACQ6QSQZRjABoM6wAaEEQaR8QBgA5HFAWrABoNkYAORxcAAkOkEkGYYwAaEf8AGhWkGkfIAXQOR0QFhAwFgA8ABAAJgA5G6AWrABoSzXQOR0QFhAwFgA8ABAAJgA5G6wACREgSQZxjABoXPwAaGmgaR9ABdA5GvAWEDAWADwAEAAmADkboBasAGhf9dA5GvAWEDAWADwAEAAmADkbrAAJE2BJBoGMAGiF7ABoiqBpH2AF0Dka8BYAPAAP8lAWrABoiGYAORxcAAkXQEkGkYwAaI+MAGidkGkfoAYAORxQFqwAaJJWADkcXAAJF0BJBqGMAGiibABopuBpH7AF0Dka8BYAPAAP8lAWrABopMYAORxcAAkZ8EkGsYwAaKvMAGi8oGkf4AYAORxQFqwAaK52ADkcXAAJGfBJBsGMAGjBfABoxnBpH/AF0Dka8BYAPAAP8lAWrABoxBYAORxcAAkdkEkG0YwAaMtcAGjb8GkgMAYAORxQFqwAaM5GADkcXAAJHZBJBuGMAGjgzABo42BpIEAF0Dka8BYAPAAP8lAWrABo4hYAORxcAAkgoEkG8YwAaOhMAGj0cGkggAYAORxQFqwAaOomADkcXAAJIKBJBwGMAGj5TABo/GBpIJAF0Dka8BYAPAAP8lAWrABo+tYAORxcAAkkYEkHEYwAaQFMAGkNwGkg0AYAORxQFqwAaQNmADkcXAAJJGBJByGMAGkXjABpLxBpIOAF0DkdEBYQMCYAPAAQACYAOI/GADkboBasAGkZhdA5HRAWEDAmADwAEAAmADiPxgA5G6wACSdASQcxjABpNnwAaUJAaSEQBdA5GvAWEDAmADwAEAAmADiPxgA5G6AWrABpOHXQORrwFhAwJgA8ABAAJgA4j8YAORusAAkp8EkHQYwAaXgsAGmPIGkhMAXQOR0QFhAwJgA8ABAAJgA4j8YAORugFqwAaXol0DkdEBYQMCYAPAAQACYAOI/GADkbrAAJLYBJB1GMAGmWjABpolBpIWAF0Dka8BYQMCYAPAAQACYAOI/GADkboBasAGmYhdA5GvAWEDAmADwAEAAmADiPxgA5G6wACTAwSQdhjABp16wAae8waSGABdA5HRAWEDAmADwAEAAmADiPxgA5G6AWrABp2aXQOR0QFhAwJgA8ABAAJgA4j8YAORusAAkzwEkHcYwAafacAGoCYGkhsAXQORrwFhAwJgA8ABAAJgA4j8YAORugFqwAafiV0Dka8BYQMCYAPAAQACYAOI/GADkbrAAJNnBJB4GMAGozXABqNzBpIdAF0Dka8BYAPAAP8lAWrABqNUYAORxcAAk68EkHkYwAajwcAGpSUGkiIAYAORxQFqwAaj6WADkcXAAJOvBJB6GMAGpY/ABqZOBpIjAF0DkdEBYQMBYAOfImADkboBasAGpbNdA5HRAWEDAWADnyJgA5G6wACT3QSQexjABqa0wAanYQaSJQBdA5GvAWEDAWADnyJgA5G6AWrABqbUXQORrwFhAwFgA58iYAORusAAlA4EkHwYwAao8cAGqcoGkigAXQOR0QFhAwJgA8ABAAJgA58iYAORugFqwAapFF0DkdEBYQMCYAPAAQACYAOfImADkbrAAJQ+BJB9GMAGqj/ABqr2BpIqAF0Dka8BYQMCYAPAAQACYAOfImADkboBasAGql5dA5GvAWEDAmADwAEAAmADnyJgA5G6wACUZgSQfhjABq0DwAauIQaSLABdA5HRAWEDAmADwAEAAmADwAEAAmADkboBasAGrTRdA5HRAWEDAmADwAEAAmADwAEAAmADkbrAAJSaBJB/GMAGrpnABq+4BpIuAF0Dka8BYQMCYAPAAQACYAPAAQACYAORugFqwAauyl0Dka8BYQMCYAPAAQACYAPAAQACYAORusAAlMQEkIAYwAayS8AGsvAGkjAAXQOR0QFhAwFgA8ABAAJgA5G6AWrABrJrXQOR0QFhAwFgA8ABAAJgA5G6wACU/ASQgRjABrNYwAazxAaSMgBdA5GvAWEDAWADwAEAAmADkboBasAGs3RdA5GvAWEDAWADwAEAAmADkbrAAJUgBJCCGMAGtTXABrYJBpI0AF0DkdEBYQMBYAOfImADkboBasAGtV1dA5HRAWEDAWADnyJgA5G6wACVTwSQgxjABrZvwAa3LAaSNgBdA5GvAWEDAWADnyJgA5G6AWrABraTXQORrwFhAwFgA58iYAORusAAlYAEkIQYwAa4ocAGuNkGkjkAXQORrwFgA8AA/yUBasAGuL1gA5HFwACVswSQhRjABrknwAa5/gaSPQBgA5HFAWrABrlMYAORxcAAlbMEkIYYwAa6S8AGun8Gkj4AXQORrwFgA8AA/yUBasAGumVgA5HFwACV7gSQhxjABrrNwAa7mwaSQgBgA5HFAWrABrrwYAORxcAAle4EkIgYwAa8G8AGvRcGkkMAXQOR0QFhAwJgA8ABAAJgA8ABAAJgA5G6AWrABrxCXQOR0QFhAwJgA8ABAAJgA8ABAAJgA5G6wACWGQSQiRjABr2TwAa+ZgaSRQBdA5GvAWEDAmADwAEAAmADwAEAAmADkboBasAGvbZdA5GvAWEDAmADwAEAAmADwAEAAmADkbrAAJZSBJCKGMAGwFTABsCEBpJIAF0Dka8BYAPAAP8lAWrABsBsYAORxcAAlooEkIsYwAbA0sAGwToGkksAYAORxQFqwAbA92ADkcXAAJaKBJCMGMAGwaHABsJXBpJMAF0DkdEBYQMBYAPAAQCDYAORugFqwAbBx10DkdEBYQMBYAPAAQCDYAORusAAlrIEkI0YwAbCusAGw2wGkk4AXQORrwFhAwFgA8ABAINgA5G6AWrABsLcXQORrwFhAwFgA8ABAINgA5G6wACW1gSQjhjABsTfwAbFrQaSUABdA5HRAWEDAWADwAEAAmADkboBasAGxQ1dA5HRAWEDAWADwAEAAmADkbrAAJcGBJCPGMAGxhPABsbNBpJSAF0Dka8BYQMBYAPAAQACYAORugFqwAbGPV0Dka8BYQMBYAPAAQACYAORusAAlyoEkJAYwAbIb8AGyJcGklQAXQORrwFgA8AA/yUBasAGyINgA5HFwACXXASQkRjABsjlwAbJbgaSVwBgA5HFAWrABskCYAORxcAAl1wEkJIYwAbJu8AGyeMGklgAXQORrwFgA8AA/yUBasAGyc9gA5HFwACXjASQkxjABsoxwAbLGQaSXABgA5HFAWrABspOYAORxcAAl4wEkJQYwAbLZsAGy5AGkl0AXQORrwFgA8AA/yUBasAGy3tgA5HFwACXyASQlRjABsvewAbMlAaSYQBgA5HFAWrABsv8YAORxcAAl8gEkJYYwAbNMsAGzxkGkmIAXQOR0QFhAwJgA8ABAAJgA8ABAAJgA5G6AWrABs1nXQOR0QFhAwJgA8ABAAJgA8ABAAJgA5G6wACX9gSQlxjABs+VwAbQXAaSZQBdA5GvAWEDAmADwAEAAmADwAEAAmADkboBasAGz8pdA5GvAWEDAmADwAEAAmADwAEAAmADkbrAAJgjBJCYGMAG0zzABtNsBpJnAF0Dka8BYAPAAP8lAWrABtNUYAORxcAAmF4EkJkYwAbTusAG1J4GkmsAYAORxQFqwAbT22ADkcXAAJheBJCaGMAG1OvABtUbBpJsAF0Dka8BYAPAAP8lAWrABtUDYAORxcAAmIsEkJsYwAbVacAG1l4Gkm8AYAORxQFqwAbVimADkcXAAJiLBJCcGMAG1qvABtbbBpJwAF0Dka8BYAPAAP8lAWrABtbDYAORxcAAmMMEkJ0YwAbXKcAG1/QGknQAYAORxQFqwAbXSmADkcXAAJjDgQ8GkJ8XmOuY8ppKAAGCRAAAAAEDmP+aSgAAAAEBAZkEAAAAgKxgA8ABAIMAAGADwAEAAgE+AUqaAAEjHJoLgJoHwAVu2EgBAAErAMABAKorHpock9sDAAMamjPAAQCIgJo5wAVu2BqaPp23AAFgA8ABAAIGkKAXmpOampuaAAGSdQAAAAEDmqabmgAAAAEBAZq0AAAAhL5dA8AA/r8BYAPAAQACAABgA8ABAAIBPgVOmsya0wAAgo9gA8ABAEwBH5rZwAEAawAAAABFmusBmvSa9gAAYmADwAD+GwGTARya/YKa+8AFb4hjAQABHJsMFpsFgJr/wAVvSmHAAP7vgY0BAAGUAMAA/0IAwAD/SQGKmxHABW+IHJsSgpsRwAVviGQBAAGUAMAA/0E+Aj0cmyOBmxzABW9qgo4BAAEnknYAwAEAYD0cmzyBmzXABW9qggMBAAEcm0mAm0TABW9KSwEAAYKbSsAFb4gAwAD+zgDAAQBjPRybXIGbVcAFb2qCjgEAASeSdgDAAQBgPRybc4GbbMAFb2qCjgEAARabf4CbecAFb0qB6sAA/qQAwAEAYEqbiAEkm5gBgZuRwAVvagaQohiE1ITchhcAAZJ3jHsAAAABA4UEhhcAAAABAQGFDAAAAIC9YAPAAQACAABgA5G6AT4DSYUWFoUfgIUawAVwmIFVwAEACD0whSgnkng/PYiFRMAFcJgehUuCSgEAAYCFaMAFcJgASoVxAR+FfJHEAwABaoWEXQORrwFhAwFgA8ABAAJgA5G6iYUCIiSF8wMnknmAhcPABXCYJ5J6WzKGBmADwAEAAlsBJ4C9gIYPwAVwmAaQoxiNGY0hjpIAAZJ7jHsAAAABA41TjpIAAAABAQGNWwAAAIC9YAPAAQACAABgA5G6AT4DSY1lFo1ugI1pwAVxTIFVwAEACD0wjXcnkng/PYiNk8AFcUwejZqCSgEAAYCNt8AFcUwASo3AAR+Ny5HEAwABao3TXQORrwFhAwFgA8ABAAJgA5G6ijsCIiSObgMnknyAjjfABXFMJ5J9WzKOgWADwAEAAlsBJ4C9gI6KwAVxTAaQpBiQupDCkbcAAZJ+jHsAAAABA5DbkbcAAAABAQGQ4wAAAIC9YAPAAQACAABgA5G6AT4DSZDtFpD2gJDxwAVyAIFVwAEACD0wkP8nkng/PYiRG8AFcgAekSKCSgEAAYCRP8AFcgAASpFIAR+RU5HEAwABapFbXQORrwFhAwFgA8ABAAJgA5G6iocCIiSRmQMnkn+AkY/ABXIAJ4FLWzKRpmADwAEAAlsBJ4C9gJGvwAVyAAaQpRiU/pUGl3YAAZKAjHsAAAABA5Unl3YAAAADAwOVNAAAAIC9YAPAAQACAJVDAAAAkoFgA4j8AJVTAAAAkoJgA4j8AABgA5G6AT4ISZVfFpVogJVjwAVytIFVwAEACD0wlXEnkng/PYiVjcAFcrQelZSCSgEAAYCVscAFcrQATpXGlc4AAJKDYAOf3gEfldSgAwAAAABOlfKV/AAAkoRdA8AA/r8BYAPAAP9oARyWBoOV/sAFcxaShQEAAYGWEMAFcsIAn+ROlieWMgAAkoZdA8AA/r8BYAPAAP9oARyWPIOWNMAFcxaShQEAAYKWRsAFcs4An+ROlliWXQAAgpRgA8ABAAIBHJZphJZfwAVzLVgAAAAAwAD+kU6WepaAAACSh2ADwAEAAgEclo2FloLABXNdWAAAAADAAP6RSpaXAR+WopHEAwABapaqXQORrwFhAwNgA8ABAAJgA4j8YAOI/GADkbqK5wIiHJcQJJcQByeDSICW2MAFcrQnkoiGlvfABXONJ5KJh5cFwAVzsCeDSGQBAAEWlySDlxzABXMWkoqgAQDAAQAXWzKXRWADwAEAAlsDJ4C9gJdOwAVytCeClIGXXMAFcsInkoeCl2zABXLOBpCmGJ8enyahswABkouMewAAAAEDn02hswAAAAICAp9cAAAAkoFgA4j8AJ9sAAAAkoJgA4j8AABgA5G6AT4GTp+En4wAAJKDYAOf3gEfn5KgAwAAAABOn7CfugAAkoRdA8AA/r8BYAPAAP9oARyfxIKfvMAFdKiShQEAAYCfzsAFdIcAn+ROn+Wf8AAAkoZdA8AA/r8BYAPAAP9oARyf+oKf8sAFdKiShQEAAYGgBMAFdJMAn+ROoBagGwAAgpRgA8ABAAIBHKAng6AdwAV0v1gAAAAAwAD+kU6gOKA+AACSh2ADwAEAAgEcoEuEoEDABXTvWAAAAADAAP6RSqBVAR+gYJHEBAABaqBoXQORrwFhAwJgA4j8YAOI/GADkbqLpQMiHKD2JKD2BSeSjIWguMAFdR8nko2GoOrABXVCJ4FLZAEAARahDoKhBsAFdKiSiqABAMABABeI1iShfQMnko6GoXLABXVCJ4FLWzKhkGADwAEAAlsCJ4KUgKGZwAV0hyeSh4GhqcAFdJMGkKcYpJ6kpqX9AAGSj4x7AAAAAQOkyaX9AAAAAQEBpM4AAACSkGADwAD+GwAAYAORugE+Ak6k5KTsAACSkWADwAEAAgEkpTQCJ5KSHKUjHKUVHKUDgKT5wAV2EoQOAQABNxAAwAD+SZKTAAAAAMABACiSlAIAApcnhA0AwAEAHUqlOAEfpUORxAMAAWqlS10Dka8BYQMBYAPAAP4bYAORuowAAiIkpc8DJ5KVgaWawAV2KSeSllsypeJgA8ABAAJbASeSkICl8MAFdhIGkKgYsSKxKrLtAAGSl4x7AAAAAQOxUrLtAAAAAgICsVoAAACAvWADwAEAAgCxZwAAAJKYYAPAAQACAABgA5G6AT4FSbFyFrF7gLF2wAV23oFVwAEACD0wsYQnkng/PYixoMAFdt4esaeCSgEAAYCxxMAFdt4ASbHNFrHXgbHRwAV27IFVwAEACD0wseAnkng/PYmx/MAFduwesgSCSgEAAYGyIcAFduwASrIrAR+yNpHEAwABarI+XQORrwFhAwJgA8ABAAJgA8ABAAJgA5G6jTQCIiSyuQUnkpmAspfABXbeJ5KagbKuwAV27CeBS1syssxgA8ABAAJbAieAvYCy1cAFdt4nkpiBsuTABXbsBpCpGLc6t0K58gABkpuMewAAAAEDt2+58gAAAAICArd8AAAAgL1gA8ABAAIAt4kAAACSmGADwAEAAgAAYAORugE+BUm3lBa3nYC3mMAFd+2BVcABAAg9MLemJ5J4Pz2It8LABXftHrfJgkoBAAGAt+bABXftAEm37xa3+YG388AFd/uBVcABAAg9MLgCJ5J4Pz2JuB7ABXf7HrgmgkoBAAGBuEPABXf7AEq4TQEfuFiRxAQAAWq4YF0Dka8BYQMCYAPAAQACYAPAAQACYAORuo2cAyIkuTgFJ5KcgLixwAV37SeSnYG5LcAFd/sngUuI1iS5vgMnkp6BuWvABXf7J5KfWzK50WADwAEAAlsCJ4C9gLnawAV37SeSmIG56cAFd/sGkKoYvWe9b78oAAGSoIx7AAAAAQO9m78oAAAAAQEBvaMAAACAvWADwAEAAgAAYAORugE+A0m9rRa9toC9scAFeQ+BVcABAAg9ML2/J5J4Pz2IvdvABXkPHr3igkoBAAGAvf/ABXkPAEq+CAEfvhORxAQAAWq+G10Dka8BYQMBYAPAAQACYAORuo3yAyIkvsIDJ5KcgL5rwAV5DyeSoYjWJL8EAyeSnoC+9cAFeQ8nkqJbMr8XYAPAAQACWwEngL2AvyDABXkPBpCrGMAAQr3AAELFwABEgQABkqOMewAAAAEDwABC+sAARIEAAAABAQHAAEMCAAAAgL1gA8ABAAIAAGADkboBPgNJwABDDBbAAEMVgMAAQxDABXnggVXAAQAIPTDAAEMeJ5J4Pz2IwABDOsAFeeAewABDQYJKAQABgMAAQ17ABXngAErAAENnAR/AAENykcQEAAFqwABDel0Dka8BYQMBYAPAAQACYAORuo4/AyIkwABEGwMnkpyAwABD08AFeeAnkqSI1iTAAERdAyeSnoDAAEROwAV54CeSolsywABEcGADwAEAAlsBJ4C9gMAARHnABXngBpCsGMAASQfAAEkPwABKQQABkqWMewAAAAEDwABJN8AASkEAAAABAQHAAEk/AAAAgL1gA8ABAAIAAGADkboBPgNJwABJSRbAAElSgMAASU3ABXrTgVXAAQAIPTDAAElbJ5J4Pz2IwABJd8AFetMewABJfoJKAQABgMAASZvABXrTAErAAEmkAR/AAEmvkcQDAAFqwABJt10Dka8BYQMBYAPAAQACYAORuo62AiIkwABKHQMnkqaAwABJ+8AFetMnkqdbMsAASjBgA8ABAAJbASeAvYDAAEo5wAV60waQrRjAAE1nwABNb8AATrwAAZKojHsAAAABA8AATZTAAE68AAAAAQEBwABNmwAAAJKpYAOfIgAAYAORugE+Ak7AAE2twABNtAAAgmJgA8ABAAIBFsAATbyAwABNtsAFe6+CYp88SsAATcYBH8AATdGRxAQAAWrAAE3ZXQORrwFhAwFgA58iYAORuo8RAyIkwABOUQMnkqqBwABOLcAFe8YnkquI1ieJYFsywABOqWADwAEAAlsBJ5KpgMAATrPABXuvBpCuGMAAUZzAAFGkwABSmQABkqyMewAAAAEDwABR0MAAUpkAAAABAQHAAFHXAAAAkqlgA58iAABgA5G6AT4CTsAAUenAAFHwAACCYmADwAEAAgEWwABR+IDAAFHywAV8cYJinzxKwABSAgEfwABSDZHEAwABasAAUhVdA5GvAWEDAWADnyJgA5G6j2YCIiTAAFJzAyeSrYHAAFJYwAV8iCeSrlsywABShmADwAEAAlsBJ5KpgMAAUpDABXxxBpCvGMAAWLXAAFi9wABaFgABkq+MewAAAAEDwABY7cAAWhYAAAABAQHAAFj1AAAAgL1gA8ABAAIAAGADkboBPgNJwABY/xbAAFkIgMAAWQPABX0ugVXAAQAIPTDAAFkRJ5J4Pz2IwABZLcAFfS4ewABZNIJKAQABgMAAWVHABX0uAErAAFlaAR/AAFllkcQDAAFqwABZbV0Dka8BYQMBYAPAAQACYAORuo/4AiIkwABZ8gMnknmAwABZvsAFfS4nkrBbMsAAWgVgA8ABAAJbASeAvYDAAFoOwAV9LgaQsBjAAGA0wABgPMAAYVgAAZKxjHsAAAABA8AAYGTAAGFYAAAAAQEBwABgbAAAAIPxYAPAAQACAABgA5G6AT4CScAAYHgWwABgg4DAAGB8wAV+CoFVwAEACD0wwABgjCeSsj9KwABgqgEfwABgtZHEAwABasAAYL1dA5GvAWEDAWADwAEAAmADkbqQhAIiJMAAYTYDJ5KzgMAAYSvABX4KJ4FqWzLAAGFDYAPAAQACWwEng/GAwABhTsAFfgoGkLEYwABs78AAbPfAAG66AAGStIx7AAAAAQPAAG0ywABuugAAAAEBAcAAbT8AAACAvWADwAEAAgAAYAORugE+A0nAAG1JFsAAbVKAwABtTcAFfsiBVcABAAg9MMAAbVsnkng/PYjAAG13wAV+yB7AAG1+gkoBAAGAwABtm8AFfsgASsAAbaQBH8AAba+RxAQAAWrAAG23XQORrwFhAwFgA8ABAAJgA5G6kSwDIiTAAG5nAyeStYDAAG4nwAV+yCeStojWJ4mOWzLAAG6pYAPAAQACWwEngL2AwABussAFfsgGkLIYwAByFMAAchzAAHOGAAGSt4x7AAAAAQPAAHJHwABzhgAAAAEBAcAAck8AAACD8WADwAEAAgAAYAORugE+AknAAHJbFsAAcmaAwAByX8AFf6mBVcABAAg9MMAAcm8nkrI/SsAAco0BH8AAcpiRxAQAAWrAAHKgXQORrwFhAwFgA8ABAAJgA5G6kYkDIiTAAHMvAyeSuIDAAHL6wAV/qSeSuYjWJ4mUWzLAAHNxYAPAAQACWwEng/GAwABzfMAFf6kGkLMYwAB3DcAAdxXAAHjAAAGSuox7AAAAAQPAAHdKwAB4wAAAAAEBAcAAd1IAAACAvWADwAEAAgAAYAORugE+A0nAAHdcFsAAd2WAwAB3YMAFgGyBVcABAAg9MMAAd24nkng/PYjAAHeKwAWAbB7AAHeRgkoBAAGAwAB3rsAFgGwASsAAd7cBH8AAd8KRxAQAAWrAAHfKXQORrwFhAwFgA8ABAAJgA5G6kdYDIiTAAHhtAyeSu4DAAHgtwAWAbCeStojWJ4mOWzLAAHivYAPAAQACWwEngL2AwAB4uMAFgGwGkLQYwAB7YsAAe2rAAHyNAAGSvIx7AAAAAQPAAHuEwAB8jQAAAAICAsAAe4kAAACSvWADwAEAgwDAAHuWAAAAg/FgA8ABAAIAAGADkboBPgNOwAB7qcAAe60AAICsYAPAAQACAR7AAHuvkJ8BAAGAwAB7vcAFgU0AScAAe8YWwAB70YHAAHvKwAWBXYFVwAEACD0wwAB72ieSsj9KwAB7+AEfwAB8A5HEAwABasAAfAtdA5GvAWEDAmADwAEAg2ADwAEAAmADkbqSDAIiJMAAfFgEJ5K+gsAAfEXABYF2J5K/gcAAfE7ABYFdWzLAAHxrYAPAAQACWwIngKyAwAB8c8AFgU0ng/GBwAB8g8AFgV0GkLUYwAB/qcAAf7HAAIDCAAGSwIx7AAAAAQPAAH/jwACAwgAAAAEBAcAAf+oAAACSqWADnyIAAGADkboBPgJOwAB//MAAgAMAAIJiYAPAAQACARbAAIALgMAAgAXABYJegmKfPErAAIAVAR/AAIAgkcQDAAFqwACAKF0Dka8BYQMBYAOfImADkbqSaQIiJMAAgJwDJ4NIgcAAgGfABYJ1J5LBWzLAAICvYAPAAQACWwEnkqmAwACAucAFgl4GkLYYwACEjcAAhJXAAIZgAAGSwox7AAAAAQPAAITCwACGYAAAAAEBAcAAhMkAAACSqWADnyIAAGADkboBPgJOwACE28AAhOIAAIJiYAPAAQACARbAAITqgMAAhOTABYMbgmKfPErAAIT0AR/AAIT/kcQEAAFqwACFB10Dka8BYQMBYAOfImADkbqSwgMiJMAAhcwDJ4NIgcAAhUvABYMyJ5LDiNYniaZbMsAAhk1gA8ABAAJbASeSqYDAAIZXwAWDGwaQtxjAAJTuwACU9sAAlyIAAZLEjHsAAAABA8AAlSHAAJciAAAAAgICwACVKQAAAIC9YAPAAQACAMAAlTYAAACSmGADwAEAAgAAYAORugE+BUnAAJVBFsAAlUqAwACVRcAFg92BVcABAAg9MMAAlVMnkng/PYjAAJVvwAWD3R7AAJV2gkoBAAGAwACVk8AFg90AScAAlZwWwACVpoHAAJWgwAWD7YFVwAEACD0wwACVryeSeD89icAAlcvABYPtHsAAldOCSgEAAYHAAJXwwAWD7QBKwACV+gEfwACWBZHEBAABasAAlg1dA5GvAWEDAmADwAEAAmADwAEAAmADkbqUJAMiJMAAlqcFJ5LFgMAAllXABYPdJ5LGgcAAln/ABYPtJ5LHiNYkwACW7gUnksiBwACW1sAFg+0nksmAwACW5MAFg90ngUtbMsAAlwFgA8ABAAJbAieAvYDAAJcKwAWD3SeSmIHAAJcZwAWD7QaQuBjAAJpiwACaasAAnBMAAZLKjHsAAAABA8AAmozAAJwTAAAAAgICwACalAAAAIPxYAPAAQACAMAAmqMAAACSy2ADwAEAAgAAYAORugE+A0nAAJqwFsAAmruAwACatMAFhUuBVcABAAg9MMAAmsQnkrI/ScAAmuIWwACa7oHAAJrmwAWFW4FVwAEACD0wwACa9yeSsj9KwACbFQEfwACbIJHEBAABasAAmyhdA5GvAWEDAmADwAEAAmADwAEAAmADkbqUgwMiJMAAm6MFJ5LMgMAAm4bABYVLJ5KJgcAAm5bABYVbJ4FLiNYnic5bMsAAm+pgA8ABAAJbAieD8YDAAJv1wAWFSyeSy4HAAJwIwAWFWwaQuRjAAJ7KwACe0sAAn/QAAZLNjHsAAAABA8AAnvjAAJ/0AAAAAQEBwACfAAAAAIC9YAPAAQACAABgA5G6AT4DScAAnwoWwACfE4DAAJ8OwAWGX4FVwAEACD0wwACfHCeSeD89iMAAnzjABYZfHsAAnz+CSgEAAYDAAJ9cwAWGXwBKwACfZQEfwACfcJHEAwABasAAn3hdA5GvAWEDAWADwAEAAmADkbqU4QIiJMAAn9ADJ5LOgMAAn8bABYZfJ4FLWzLAAJ/jYAPAAQACWwEngL2AwACf7MAFhl8GkLoYwACiUsAAolrAAKNwAAGSz4x7AAAAAQPAAKJ8wACjcAAAAAEBAcAAooQAAACAvWADwAEAAgAAYAORugE+A0nAAKKOFsAAopeAwACiksAFhzuBVcABAAg9MMAAoqAnkng/PYjAAKK8wAWHOx7AAKLDgkoBAAGAwACi4MAFhzsASsAAoukBH8AAovSRxAMAAWrAAKL8XQORrwFhAwFgA8ABAAJgA5G6lS0CIiTAAKNMAyeS0IDAAKNCwAWHOyeBS1sywACjX2ADwAEAAlsBJ4C9gMAAo2jABYc7BpC7GMAApgTAAKYMwACnHwABktGMewAAAAEDwACmLcAApx8AAAABAQHAAKY1AAAAgL1gA8ABAAIAAGADkboBPgNJwACmPxbAAKZIgMAApkPABYgXgVXAAQAIPTDAAKZRJ5J4Pz2IwACmbcAFiBcewACmdIJKAQABgMAAppHABYgXAErAAKaaAR/AAKalkcQDAAFqwACmrV0Dka8BYQMBYAPAAQACYAORupWFAiIkwACm+wMnktKAwACm8cAFiBcngUtbMsAApw5gA8ABAAJbASeAvYDAAKcXwAWIFwaQvBjAAKoJwACqEcAAqzIAAZLTjHsAAAABA8AAqjnAAKsyAAAAAQEBwACqQQAAAIC9YAPAAQACAABgA5G6AT4DScAAqksWwACqVIDAAKpPwAWI84FVwAEACD0wwACqXSeSeD89iMAAqnnABYjzHsAAqoCCSgEAAYDAAKqdwAWI8wBKwACqpgEfwACqsZHEAwABasAAqrldA5GvAWEDAWADwAEAAmADkbqVzgIiJMAAqw4DJ5LSgMAAqwTABYjzJ4FLWzLAAKshYAPAAQACWwEngL2AwACrKsAFiPMGkL0YwACtxsAArc7AAK7hAAGS1Ix7AAAAAQPAAK3vwACu4QAAAAEBAcAArfcAAACAvWADwAEAAgAAYAORugE+A0nAAK4BFsAArgqAwACuBcAFic+BVcABAAg9MMAArhMnkng/PYjAAK4vwAWJzx7AAK42gkoBAAGAwACuU8AFic8ASsAArlwBH8AArmeRxAMAAWrAAK5vXQORrwFhAwFgA8ABAAJgA5G6lhoCIiTAAK69AyeS1YDAAK6zwAWJzyeBS1sywACu0GADwAEAAlsBJ4C9gMAArtnABYnPBpC+GMAAscvAALHTwACy9AABktaMewAAAAEDwACx+8AAsvQAAAABAQHAALIDAAAAgL1gA8ABAAIAAGADkboBPgNJwACyDRbAALIWgMAAshHABYqrgVXAAQAIPTDAALIfJ5J4Pz2IwACyO8AFiqsewACyQoJKAQABgMAAsl/ABYqrAErAALJoAR/AALJzkcQDAAFqwACye10Dka8BYQMBYAPAAQACYAORupZjAiIkwACy0AMnktWAwACyxsAFiqsngUtbMsAAsuNgA8ABAAJbASeAvYDAALLswAWKqwaQvxjAALXAwAC1yMAAtu4AAZLXjHsAAAABA8AAte/AALbuAAAAAQEBwAC19wAAAIC9YAPAAQACAABgA5G6AT4DScAAtgEWwAC2CoDAALYFwAWLh4FVwAEACD0wwAC2EyeSeD89iMAAti/ABYuHHsAAtjaCSgEAAYDAALZTwAWLhwBKwAC2XAEfwAC2Z5HEAwABasAAtm9dA5GvAWEDAWADwAEAAmADkbqWvAIiJMAAtsoDJ5LYgMAAtsDABYuHJ4FLWzLAALbdYAPAAQACWwEngL2AwAC25sAFi4cGkMAYwADL/cAAzAXAAM35AAGS2Yx7AAAAAQPAAMwrwADN+QAAAAEBAcAAzDMAAACAvWADwAEAAgAAYAORugE+A0nAAMw9FsAAzEaAwADMQcAFjGOBVcABAAg9MMAAzE8nkng/PYjAAMxrwAWMYx7AAMxygkoBAAGAwADMj8AFjGMASsAAzJgBH8AAzKORxAQAAWrAAMyrXQORrwFhAwFgA8ABAAJgA5G6mLsDIiTAAM1nAyeDSIDAAMzowAWMYyeSw4jWJ4mmWzLAAM3oYAPAAQACWwEngL2AwADN8cAFjGMGkMEYwADRGcAA0SHAANLpAAGS2ox7AAAAAQPAANFIwADS6QAAAAEBAcAA0VIAAACS22ADiboAAGADkboBPgROwADRbcAA0XUAAJKDYAOf3gEfwADRe6ADAAAAAE7AANGZwADRpwAAktxdA8AA/r8BYAPAAP9oARzAANGxgcAA0anABY1bkt0BAAGAwADRv8AFjUQAn+VOwADR1MAA0d0AAIYdYAPAAQACARzAANHtgsAA0d/ABY14WAAAAADAAP6RSsAA0fcBH8AA0gKRxAMAAWrAANIKXQORrwFhAwFgA4m6YAORupkSAiIcwADSliTAANKWAyeS3oPAANJUwAWNsieS32QBAAEWwADSroHAANKmwAWNW5KKoAEAwAEAF1sywADSz2ADwAEAAlsBJ4YdgMAA0tzABY1EBpDCGMAA1enAANXxwADXqQABkuCMewAAAAEDwADWFMAA16kAAAABAQHAANYeAAAAkttgA4m6AABgA5G6AT4ETsAA1jnAANZBAACSg2ADn94BH8AA1kegAwAAAABOwADWZcAA1nMAAJLcXQPAAP6/AWADwAD/aAEcwADWfYHAANZ1wAWOlJLdAQABgMAA1ovABY59AJ/lTsAA1qDAANapAACGHWADwAEAAgEcwADWuYLAANarwAWOsVgAAAAAwAD+kUrAANbDAR/AANbOkcQDAAFqwADW1l0Dka8BYQMBYAOJumADkbqZZwIiHMAA11YkwADXVgMnkuGDwADXGMAFjusnkuJkAQABFsAA126BwADXZsAFjpSSiqABAMABABdbMsAA149gA8ABAAJbASeGHYDAANecwAWOfQaQwxjAANr1wADa/cAA3MYAAZLjjHsAAAABA8AA2yrAANzGAAAAAQEBwADbNAAAAJLbYAOJugAAYAORugE+BE7AANtPwADb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xhtgA8ABAAJbASeAvYDAAsYkwAXnFAaRFhjAAsl3wALJf8ACyxIAAZPGjHsAAAABA8ACyanAAssSAAAAAQEBwALJsQAAAIC9YAPAAQACAABgA5G6AT4DScACybsWwALJxIDAAsm/wAXn94FVwAEACD0wwALJzSeSeD89iMACyenABef3HsACyfCCSgEAAYDAAsoNwAXn9wBKwALKFgEfwALKIZHEBAABasACyildA5GvAWEDAWADwAEAAmADkbrAAECoAyIkwALKkQMnk8eAwALKc8AF5/cnkxKI1ieKm1sywALLAWADwAEAAlsBJ4C9gMACywrABef3BpEXGMACzonAAs6RwALP/wABk8iMewAAAAEDwALOxsACz/8AAAABAQHAAs7OAAAAgL1gA8ABAAIAAGADkboBPgNJwALO2BbAAs7hgMACztzABejagVXAAQAIPTDAAs7qJ5J4Pz2IwALPBsAF6NoewALPDYJKAQABgMACzyrABejaAErAAs8zAR/AAs8+kcQDAAFqwALPRl0Dka8BYQMBYAPAAQACYAORusAAQQsCIiTAAs/bAyeDSIDAAs+SwAXo2ieTyVsywALP7mADwAEAAlsBJ4C9gMACz/fABejaBpEYGMAC0xXAAtMdwALUZgABk8qMewAAAAEDwALTV8AC1GYAAAABAQHAAtNkAAAAgL1gA8ABAAIAAGADkboBPgNJwALTbhbAAtN3gMAC03LABem4gVXAAQAIPTDAAtOAJ5J4Pz2IwALTnMAF6bgewALTo4JKAQABgMAC08DABem4AErAAtPJAR/AAtPUkcQDAAFqwALT3F0Dka8BYQMBYAPAAQACYAORusAAQWECIiTAAtRCAyeDSIDAAtQjwAXpuCeTy1sywALUVWADwAEAAlsBJ4C9gMAC1F7ABem4BpEZGMAC2DfAAtg/wALasgABk8yMewAAAAEDwALYbsAC2rIAAAACAgLAAth9AAAAkoFgA4j8AMAC2I0AAACSgmADiPwAAGADkboBPgZOwALYpcAC2K0AAJKDYAOf3gEfwALYs6ADAAAAAE7AAtjRwALY2wAAkoRdA8AA/r8BYAPAAP9oARzAAtjlgsAC2N3ABeq7koUBAAGAwALY78AF6pYAn+ROwALZBsAC2REAAJKGXQPAAP6/AWADwAD/aAEcwALZG4LAAtkTwAXqu5KF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D1gAAAAAwAD+kUrABECoAR/ABECzkcQEAAFqwARAu10Dka8BYQMCYAOI/GADiPxgA5G6wABcsgMiHMAEQTckwARBNwUnlFCFwARBCsAGOEknlEqGwARBK8AGOHQngUtkAQABFsAEQU+CwARBR8AGN7iSiqABAMABABeI1ieOflsywARByWADwAEAAlsCJ4KUgMAEQdLABjeTJ5KHgcAEQeLABjehBpFPGMAERaTABEWswARIKgABlFGMewAAAAEDwARF0sAESCoAAAACAgLABEXhAAAAkoFgA4j8AMAERfEAAACSgmADiPwAAGADkboBPgZOwARGCcAERhEAAJKDYAOf3gEfwARGF6ADAAAAAE7ABEY1wARGPwAAkoRdA8AA/r8BYAPAAP9oARzABEZJgsAERkHABjmHkoUBAAGAwARGU8AGOWIAn+ROwARGasAERnUAAJKGXQPAAP6/AWADwAD/aAEcwARGf4LABEZ3wAY5h5KFAQABgcAERonABjlwAJ/kTsAERpvABEagAACClGADwAEAAgEcwARGrIPABEaiwAY5pFgAAAAAwAD+kU7ABEa9wARGwwAAkodgA8ABAAIBHMAERtCEwARGxcAGOd5YAAAAAMAA/pFKwARG2gEfwARG5ZHEBAABasAERu1dA5GvAWEDAmADiPxgA4j8YAORusAAXSEDIhzABEd4JMAER3gFJ5RShcAER0bABjoYJ5RThsAER2zABjpDJ4FLZAEAARbABEeQgsAER4jABjmHkoqgAQDAAQAXiNYnjoRbMsAESAdgA8ABAAJbAieClIDABEgQwAY5YieSh4HABEggwAY5cAaRUBjABEvVwARL3cAETlsAAZRUjHsAAAABA8AES/3ABE5bAAAAAgICwARMBwAAAJKBYAOI/ADABEwXAAAAkoJgA4j8AABgA5G6AT4GTsAETC/ABEw3AACSg2ADn94BH8AETD2gAwAAAABOwARMW8AETGUAAJKEXQPAAP6/AWADwAD/aAEcwARMb4LABExnwAY7VpKFAQABgMAETHnABjsxAJ/kTsAETJDABEybAACShl0DwAD+vwFgA8AA/2gBHMAETKWCwARMncAGO1aShQEAAYHABEyvwAY7PwCf5E7ABEzBwARMxgAAgpRgA8ABAAIBHMAETNKDwARMyMAGO3NYAAAAAMAA/pFOwARM48AETOkAAJKHYAPAAQACARzABEz2hMAETOvABjutWAAAAADAAP6RSsAETQABH8AETQuRxAQAAWrABE0TXQORrwFhAwJgA4j8YAOI/GADkbrAAF2QAyIcwARNmSTABE2ZBSeUVYXABE1nwAY75yeUU4bABE2NwAY8EieBS2QBAAEWwARNsYLABE2pwAY7VpKKoAEAwAEAF4jWJ46KWzLABE44YAPAAQACWwIngpSAwAROQcAGOzEnkoeBwAROUcAGOz8GkVEYwARSCcAEUhHABFSFAAGUVox7AAAAAQPABFI2wARUhQAAAAICAsAEUkAAAACSgWADiPwAwARSUAAAAJKCYAOI/AAAYAORugE+Bk7ABFJowARScAAAkoNgA5/eAR/ABFJ2oAMAAAAATsAEUpTABFKeAACShF0DwAD+vwFgA8AA/2gBHMAEUqiCwARSoMAGPSWShQEAAYDABFKywAY9AACf5E7ABFLJwARS1AAAkoZdA8AA/r8BYAPAAP9oARzABFLegsAEUtbABj0lkoUBAAGBwARS6MAGPQ4An+ROwARS+sAEUv8AAIKUYAPAAQACARzABFMLg8AEUwHABj1CWAAAAADAAP6RTsAEUxzABFMiAACSh2ADwAEAAgEcwARTL4TABFMkwAY9fFgAAAAAwAD+kUrABFM5AR/ABFNEkcQEAAFqwARTTF0Dka8BYQMCYAOI/GADiPxgA5G6wABd/wMiHMAEU9UkwART1QUnlFeFwARTo8AGPbYnlFOGwARTycAGPeEngUtkAQABFsAEU+2CwART5cAGPSWSiqABAMABABeI1ieOkFsywARUYmADwAEAAlsCJ4KUgMAEVGvABj0AJ5KHgcAEVHvABj0OBpFSGMAEWFDABFhYwARa4AABlFiMewAAAAEDwARYgcAEWuAAAAACAgLABFiQAAAAkoFgA4j8AMAEWKAAAACSgmADiPwAAGADkboBPgZOwARYuMAEWMAAAJKDYAOf3gEfwARYxqADAAAAAE7ABFjkwARY7gAAkoRdA8AA/r8BYAPAAP9oARzABFj4gsAEWPDABj70koUBAAGAwARZAsAGPs8An+ROwARZGcAEWSQAAJKGXQPAAP6/AWADwAD/aAEcwARZLoLABFkmwAY+9JKFAQABgcAEWTjABj7dAJ/kTsAEWUrABFlPAACClGADwAEAAgEcwARZ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H8AE2yigAwAAAABOwATbRsAE21AAAJKEXQPAAP6/AWADwAD/aAEcwATbWoPABNtSwAZRH5KFAQABgsAE22TABlCGAJ/kTsAE23XABNt6AACClGADwAEAAgEcwATbhoTABNt8wAZRPFgAAAAAwAD+kUrABNuQAR/ABNubkcQDAAFqwATbo10Dka8BYQMDYAPAAQACYAPAAQACYAOI/GADkbrAAGqLAiIcwATcdSTABNx1ByeUgIDABNwZwAZQZieUgYHABNwrwAZQdieUgoXABNxqwAZRdieBS2QBAAEWwATcjYPABNyFwAZRH5KKoAEAwAEAF1sywATcrmADwAEAAlsDJ4C9gMAE3LfABlBmJ5KYgcAE3MbABlB2J4KUgsAE3NXABlCGBpFjGMAE4BPABOAbwAThvwABlIOMewAAAAEDwATgO8AE4b8AAAACAgLABOBDAAAAg/FgA8ABAAIAwATgUgAAAJLLYAPAAQACAABgA5G6AT4DScAE4F8WwATgaoDABOBjwAZSf4FVwAEACD0wwATgcyeSsj9JwATgkRbABOCdgcAE4JXABlKPgVXAAQAIPTDABOCmJ5KyP0rABODEAR/ABODPkcQEAAFqwATg110Dka8BYQMCYAPAAQACYAPAAQACYAORusAAavoDIiTABOFSBSeTY4DABOEbwAZSfyeUhIHABOFFwAZSjyeBS4jWJ493WzLABOGWYAPAAQACWwIng/GAwAThocAGUn8nksuBwAThtMAGUo8GkWQYwATxJMAE8SzABPJ2AAGUhYx7AAAAAQPABPFTwATydgAAAAEBAcAE8VsAAACAvWADwAEAAgAAYAORugE+A0nABPFlFsAE8W6AwATxacAGU5WBVcABAAg9MMAE8Xcnkng/PYjABPGTwAZTlR7ABPGagkoBAAGAwATxt8AGU5UASsAE8cABH8AE8cuRxAMAAWrABPHTXQORrwFhAwFgA8ABAAJgA5G6wABs1QIiJMAE8lIDJ5SGgMAE8kjABlOVJ4FLWzLABPJlYAPAAQACWwEngL2AwATybsAGU5UGkWUYwAT3bsAE93bABPi5AAGUh4x7AAAAAQPABPeNwAT4uQAAAAEBAcAE95QAAACSqWADnyIAAGADkboBPgJOwAT3psAE960AAIJiYAPAAQACARbABPe1gMAE96/ABlRzgmKfPErABPe/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hcAGluYAAAACAgLABpSNAAAAgL1gA8ABAAIAwAaUnAAAAJKBYAOI/AAAYAORugE+BknABpSnFsAGlLCAwAaUq8AGnpOBVcABAAg9MMAGlLknkng/PYjABpTVwAaekx7ABpTcgkoBAAGAwAaU+cAGnpMATsAGlQ7ABpUWAACSg2ADn94BH8AGlRygAwAAAABOwAaVOsAGlUQAAJKEXQPAAP6/AWADwAD/aAEcwAaVToLABpVGwAae+5KFAQABgcAGlVjABp6jAJ/kTsAGlWnABpVuAACClGADwAEAAgEcwAaVeoPABpVwwAafGFgAAAAAwAD+kUrABpWEAR/ABpWPkcQEAAFqwAaVl10Dka8BYQMCYAPAAQACYAOI/GADkbrAAJKfAyIcwAaWByTABpYHBSeVL4DABpXWwAaekyeVMITABpX8wAafUieBS2QBAAEWwAaWH4LABpYXwAae+5KKoAEAwAEAF4jWJMAGlrMDJ5UxgMAGlqnABp6TJ4FLWzLABpbGYAPAAQACWwIngL2AwAaWz8AGnpMngpSBwAaW3cAGnqMGkaQYwAaaYcAGmmnABpzeAAGVMox7AAAAAQPABpqGwAac3gAAAAICAsAGmo4AAACAvWADwAEAAgDABpqdAAAAkoFgA4j8AABgA5G6AT4GScAGmqgWwAaasYDABpqswAagVIFVwAEACD0wwAaauieSeD89iMAGmtbABqBUHsAGmt2CSgEAAYDABpr6wAagVABOwAabD8AGmxcAAJKDYAOf3gEfwAabHaADAAAAAE7ABps7wAabRQAAkoRdA8AA/r8BYAPAAP9oARzABptPgsAGm0fABqC8koUBAAGBwAabWcAGoGQAn+ROwAabasAGm28AAIKUYAPAAQACARzABpt7g8AGm3HABqDZWAAAAADAAP6RSsAGm4UBH8AGm5CRxAQAAWrABpuYXQORrwFhAwJgA8ABAAJgA4j8YAORusAAkwMDIhzABpwIJMAGnAgFJ5LzgMAGm9fABqBUJ5UwhMAGm/3ABqETJ4FLZAEAARbABpwggsAGnBjABqC8koqgAQDAAQAXiNYkwAacqwMnlTOAwAacocAGoFQngUtbMsAGnL5gA8ABAAJbAieAvYDABpzHwAagVCeClIHABpzVwAagZAaRpRjABqBiwAagasAGougAAZU0jHsAAAABA8AGoIfABqLoAAAAAgICwAagjwAAAIC9YAPAAQACAMAGoJ4AAACSgWADiPwAAGADkboBPgZJwAagqRbABqCygMAGoK3ABqIVgVXAAQAIPTDABqC7J5J4Pz2IwAag18AGohUewAag3oJKAQABgMAGoPvABqIVAE7ABqEQwAahGAAAkoNgA5/eAR/ABqEeoAMAAAAATsAGoTzABqFGAACShF0DwAD+vwFgA8AA/2gBHMAGoVCCwAahSMAGon2ShQEAAYHABqFawAaiJQCf5E7ABqFrwAahcAAAgpRgA8ABAAIBHMAGoXyDwAahcsAGoppYAAAAAMAA/pFKwAahhgEfwAahkZHEBAABasAGoZldA5GvAWEDAmADwAEAAmADiPxgA5G6wACTZwMiHMAGogkkwAaiCQUnlTWAwAah2MAGohUnlTCEwAah/sAGotQngUtkAQABFsAGoiGCwAaiGcAGon2SiqABAMABABeI1iTABqK1AyeVNoDABqKrwAaiFSeBS1sywAaiyGADwAEAAlsCJ4C9gMAGotHABqIVJ4KUgcAGot/ABqIlBpGmGMAGp53ABqelwAaodAABlTeMewAAAAEDwAanwsAGqHQAAAABAQHABqfJAAAAkqlgA58iAABgA5G6AT4CTsAGp9vABqfiAACCYmADwAEAAgEWwAan6oDABqfkwAaj1oJinzxKwAan9AEfwAan/5HEAwABasAGqAddA5GvAWEDAWADnyJgA5G6wACUDgIiJMAGqE4DJ5U4gcAGqELABqPtJ4FLWzLABqhhYAPAAQACWwEnkqmAwAaoa8AGo9YGkacYwAarMsAGqzrABqxpAAGVOYx7AAAAAQPABqtWwAasaQAAAAICAsAGq14AAACD8WADwAEAAgDABqtsAAAAkqlgA58iAABgA5G6AT4DScAGq3cWwAargoDABqt7wAaklYFVwAEACD0wwAariyeSsj9OwAarsMAGq7cAAIJiYAPAAQACARbABqu/gcAGq7nABqSlgmKfPErABqvJAR/ABqvUkcQDAAFqwAar3F0Dka8BYQMCYAPAAQACYAOfImADkbrAAJRmAiIkwAasMQUnlTqAwAasEMAGpJUnlTuCwAasJcAGpN8ngUtbMsAGrERgA8ABAAJbAieD8YDABqxPwAaklSeSqYHABqxgwAakpQaRqBjABq/0wAav/MAGsd8AAZU8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gMAARjjACAF7HMAARj4uhwoAAAAAlVcAlU4GlU4uwABGWcAARl7AAEnKAACX5pUhAAAAAQPAAEZ0wABJygAAAAICAsAARnoAAACD82ADgkwAwABGhAAAAJfsYAPAAP4bAABcAT4BRsAARpYAwABGrwAAAJftYAOWlQAWwABGvS6XjJUhlTFBPgpOwABG4cAARuwAAYcDXQOKtgFgA8AA/2gBFsAARvmCwABG7sAIAgiHA5aXTsAARxHAAEcXAAGAlmADwAD/aAEcwABHKxbAAEckg8AARxnACAImhumKuUsBAAGAwABHLMAIAd8AwAD/BUnAAEc5HMAAR0OEwABHPcAIAlFIAQABKwDAAP91PgFCwABHVgA/ScAAR28hHsAAR4eKvQEAASbAAEeTAYDAAEeTwAgB32ADglMAPgE9MMAAR6QfwABHrsAA/U4BAAEkwABIAQMnl+4WwABH34DAAEfawAgB34WewAD/fCeX7wA/ScAASBMhHsAASBjAAPf8AgACFsAASCIul5GVIZU2FsAASCkul42VIZUyAD4BPTDAAEg/H8AASEnAAP1OAQABJAAIJ5fwJ5fxFsAASLuDwABIsMAIAiaD7Iq4J5fyFsAASM6AwABIycAIAd+FnsAA/3wngNmAwABI3MAIAd8ngyYAPz0XwABI9C6XkZUhFsAASPwul46VIZUzlTY9HMAASSwWwABJHILAAEkRwAgCCJfzlphWAQABgcAASTDACAHtAMAA/tA9HMAASV4WwABJToLAAElDwAgCCJfzlphWAQABHMAASWIuhwoAAAAAlVcAwAD+0D0cwABJh4PAAEl8wAgCJocHAwADhMAASZXACAJRgMAASZzACAHfLgCKuz0XwABJry6XkZUhFsAASbcul42VIZUylTYGlYEuwABJz8AASeDAAEtoAACHFgFqwABJ0GADwAD/aAIAAAEDwABJ6sAAS2gAAAADAAADwABKBwAAAITFXQPAAP6/AWADiZYBagBgA8AA/yV5wABKIgAAAIcXYAPAAPxVAWrAAEovYAPAAPxVAMAASkEAAACHGGADwAD8VQFqwABKUGADwAD8VQBcAT4DScAASl4hHMAASnGAwABKYsAIBHhIAQABKwDAAP7pPgE9HMAASpgWwABKgi6XhJUhlSqX9AEAAYDAAEqewAgEeACWaT9JwABKuYHAAEq9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0QjAANEZwADRmAAAhisBasAA0QlgA8AA/2gCAAABA8AA0THAANGYAAAAAQEBwADRRgAAAIPzYAOHqAAAXAE+Aj0cwADRUi6HCwEAAWrAANFgYAPAAP4bwACXWQCVUj0cwADRei6HFQEAARbAANGJgMAA0YTACHlRgm+HqgCVawaV3S7AANGdwADRrsAA0noAAIYvAWrAANGeYAPAAP9oAgAAAQPAANG4wADSegAAAAEBAcAA0b8AAACD82ADh7IAAFwBPgU9IxzAANHcFsAA0csul4GVIZUnSAEAASsAwAD/dRfAANHLLpeBlSEfwADR5JZBAAAAAJUnKwFgA5Y1PRzAANIMFsAA0fsul4GVIZUnl/UAAAAAljw9HMAA0h0uhwsBAAFqwADSK2ADwAD+G6ACAJVSPRzAANI3LpfAAQABFsAA0kqAwADSRcAIedaGLYe0AJVhPRzAANJsFsAA0lsul4GVIZUnl/YAAAAAlj0Gld4uwADSf8AA0pDAANNuAACGMgFqwADSgGADwAD/aAIAAAEDwADSoMAA024AAAABAQHAANKtAAAAg/NgA4e9AABcAT4FPSMcwADSyhbAANK5LpeBlSGVJ0gBAAErAMAA/3UXwADSuS6XgZUhH8AA0tKWQQAAAACVJysBYAOWNT0cwADS+hbAANLpLpeBlSGVJ5f1AAAAAJY8PRzAANMLLocLAQABasAA0xlgA8AA/hu/kwCVUj0cwADTKy6XwAEAARbAANM+gMAA0znACHrHhi2HvwCVYT0cwADTYBbAANNPLpeBlSGVJ5f2AAAAAJY9BpXfLsAA03PAANOEwADT1AAAhjQBasAA03RgA8AA/2gCAAABA8AA05fAANPUAAAAAQEBwADTpwAAAIPzYAOHyAAAXAE+AT0cwADTsy6HCwEAAWrAANPBYAPAAP4boPYAlVIGleAuwADT2cAA0+rAANTXAACGOAFqwADT2mADwAD/aAIAAAEDwADT/sAA1NcAAAABAQHAANQPAAAAg/NgA4fQAABcAT4FPRzAANQbLocLAQABasAA1ClgA8AA/huEjACVUj0cwADUPy6HFQEAARbAANROgMAA1EnACHwahdKH0gCVaz0cwADUXi6YCgEAARbAANRvgMAA1GrACHwahjaH1ACVjj0cwADUii6YCgEAARbAANSbgMAA1JbACHwahjeH1QCVjj0cwADUtC6X2AEAARbAANTLgMAA1MbACHwaIofTAJV4BpXhLsAA1NzAANTtwADV5wAAhjoBasAA1N1gA8AA/2gCAAABA8AA1QLAANXnAAAAAQEBwADVFAAAAIPzYAOH3QAAXAE+BUnAANUgHMAA1TIWwADVJC6XgpUhlShIAQABKwDAAP91PgE9F8AA1UMul4KVIR/AANVXlksAAAAAlSg/PRzAANV/FsAA1XEul4KVIZUol/QBAAGAwADVhcAIfP8Alkc9HMAA1ZAuhwsBAAFqwADVnmADwAD+G8AAYRcAlVI9HMAA1bUuhxUBAAEWwADVxIDAANW/wAh8/4Jth98AlWs9HMAA1d0WwADVzy6XgpUhlSgGAAAAAJZIBpXiLsAA1ezAANX9wADWxAAAhh4BasAA1e1gA8AA/2gCAAABA8AA1hTAANbEAAAAAQEBwADWKAAAAIPzYAOHaAAAXAE+BD0cwADWNC6HCwEAAWrAANZCYAPAAP4bwACcaQCVUj0cwADWWy6YCgEAARbAANZsgMAA1mfACH37hFiCWgCVjj0cwADWfS6HFAEAARbAANaQgMAA1ovACH37gpSHawCVXj0cwADWmy6XsQEAARbAANa3gMAA1rLACH37hh2HagCVWwaV4y7AANbJwADW2sAA13kAAIY8AWrAANbKYAPAAP9oAgAAAQPAANbtwADXeQAAAAEBAcAA1v0AAACD82ADh+cAAFwBPgM9HMAA1wkuhwsBAAFqwADXF2ADwAD+G6QWAJVSPRzAANcsLpgKAQABFsAA1z2AwADXOMAIfsKEWIJaAJWOPRzAANdOLocPAQABHMAA12cWwADXWi6XgpUhlShLAQABFsAA122AwADXaMAIfsKCSYfpAJZJAJVUBpXkLsAA137AANePwADYOgAAhj4BasAA139gA8AA/2gCAAABA8AA16LAANg6AAAAAQEBwADXsgAAAIPzYAOH8QAAXAE+BD0cwADXvi6HCwEAAWrAANfMYAPAAP4bpEEAlVI9HMAA1+EumAoBAAEWwADX8oDAANftwAh/foRYgloAlY49HMAA2AMuhxUBAAEWwADYEoDAANgNwAh/foXSh/MAlWs9HMAA2CIuhxUBAAEWwADYMYDAANgswAh/foJth/QAlWsGleUuwADYP8AA2FDAANjyAACGQAFqwADYQGADwAD/aAIAAAEDwADYYMAA2PIAAAABAQHAANhtAAAAg/NgA4f8AABcAT4EPRzAANh5LocLAQABasAA2IdgA8AA/humkwCVUj0cwADYmS6YCgEAARbAANiqgMAA2KXACIBDhFiCWgCVjj0cwADYuy6HFQEAARbAANjKgMAA2MXACIBDgm2H/gCVaz0cwADY1S6HFQEAARbAANjkgMAA2N/ACIBDhdKH/wCVawaV5i7AANj3wADZCMAA2nsAAIZEAWrAANj4YAPAAP9oAgAAAQPAANkZwADaewAAAAEBAcAA2ScAAACD82ADiAcAAFwBPgk9IxzAANlEFsAA2TMul4GVIZUnSAEAASsAwAD/dRfAANkzLpeBlSEfwADZTJZBAAAAAJUnKwFgA5Y1PRzAANl0FsAA2WMul4GVIZUnl/UAAAAAljw9HMAA2YUuhwsBAAFqwADZk2ADwAD+G6iPAJVSPRzAANmmLpgKAQABFsAA2beAwADZssAIgQiEWIJaAJWOPRzAANnILpgXAQABFsAA2eqAwADZ5cAIgQiGQogJAJXzPRzAANn6LpfYAQABFsAA2hGAwADaDMAIgQiF0ogKAJV4PRzAANohLpfAAQABFsAA2jSAwADaL8AIgQiGQ4gLAJVhPRzAANpCLocVAQABFsAA2lGAwADaTMAIgQiCbYgMAJVrPRzAANptFsAA2lwul4GVIZUnl/YAAAAAlj0GlecuwADagMAA2pHAANwmAACGSAFqwADagWADwAD/aAIAAAEDwADapMAA3CYAAAABAQHAANq0AAAAg/NgA4gUAABcAT4JPSMcwADa0RbAANrALpeBlSGVJ0gBAAErAMAA/3UXwADawC6XgZUhH8AA2tmWQQAAAACVJysBYAOWNT0cwADbARbAANrwLpeBlSGVJ5f1AAAAAJY8PRzAANsSLocLAQABIxbAANshgMAA2xzACIJ9hkeIGmrAANsvYAPAAP4bv2hqwADbSWADwAD+G62lAWADwAD+GwCVUj0cwADbXi6YCgEAARbAANtvgMAA22rACIJ9hFiCWgCVjj0cwADbgC6YCgEAARbAANuRgMAA24zACIJ9hkaIFgCVjj0cwADboi6YHQEAARbAANvAgMAA27vACIJ9gnCIFwCV8j0cwADbzy6HFQEAARbAANvegMAA29nACIJ9g9GIGACVaz0cwADb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vEnAAR9RJcABH16AwAEfVcAIvuJgA4nzPgE9HMABH4cWwAEfeS6XhZZYl64BAAEWwAEflBTAAR+LwAi+4gABYAOJ84CWicgAlnJJwAEfpyXAAR+0gMABH6vACL7iYAOJ+z4BPRzAAR/dFsABH88ul4WWWJeuAQABFsABH+oUwAEf4cAIvuIAAWADifuAvYn9AJZyScABH/wlwAEgCYDAASAAwAi+4mADieg+AT0cwAEgMhbAASAkLpeFlliXrgEAASTAASBJARbAASBCFMABIDnACL7iAAFgA4nogJaJyACWcknAASBXJcABIGSAwAEgW8AIvuJgA4ngPgJOwAEghsABIIwAAYCWYAPAAP4bARbAASCXFMABII7ACL7iAAFgA4nggJaJyEnAASCkIRzAASC8HMABILUcwAEgr4LAASCpwAjAcJglAAAAAMAA/j+DwQEAATceAMAA/jhIAQABkwDAAP8/PgE9HMABINoWwAEgzC6XhZZYl64BAAEkwAEg5gGCwAEg4MAIwHAAlnI/P07AASEGwAEhEAABmHRgA8AA/hsBFsABIRIumHGWWz0cwAEhKhbAASEiLoPVlllWAQABgMABIS7ACL7iAMAA/tA9F8ABIT0umHEcwAEhSBbAASE9LphxlltkAQABHMABIVQWwAEhSy6YcpUhll2XtAEAAYDAASFswAi+4gCVXQDAAP9BlltKwAEhewE1AAAAAQBdA8AA/vECYAOJumADwAD+GwEWwAEhgi6YcJZaNQAAAAEAYAOJugGAwAEhisAIvuI1AAAAAQBgA8AA/hsBgsABIZbACMEFNQAAAAEAXAEcwAEhiYPAASGJwAjBkIC/AgAChMABIYnACMGyhQDACMHGAMAA/waFAMAIwcYGlmAuwAEhqMABIajAASHjAACYMwAAAAEDwAEhwMABIeMAAAABAQHAASHKAAAAg/NgA4m6AABbAT4BPRzAASHWLpeuAQABgMABIdrACMI3AJZfBpZhLsABIejAASH1wAEiFwMASwAAAAEDwAEh98ABIhcAAAABAQHAASIBAAAAg/NgA4m6AABgA8AA/hsBSsABIgoBHMABIhEWwAEiCi6YcJZaSwEAAYDAASISwAjCiADAAP8FAAAIvrsACMIQAAjCYgAIwsUAAAADApZkLsABIhzAASIiwAEkzAOYdQAAAWABwAD/aAAAAgSWZi7AASJZwAEidwknAF0DwAD+8QJgA4mWYAPAAP4bATLAASJ1YAOJlmADwAD+GwAElmcuwAEif8ABIo4YmGoAYAPAAP4bAZMBBZZtAAAAAAQAAAMAAAAAAAAAAABgA5ZkAT8BCQEAwAD/fgAAAAADBpZpLsABIpPAASKYwAEjcAAAl/QAAAABA8ABIp3AASNwAAAAAQEBwAEisgAAAITFXQPAAP6/AWADiZYAAFwBPgFFwAEiyAHAASLRwAEi0wAAYmADwAD+GwGTARzAASLagcABItjACMOxYwEAARbAASLrgMABItzACMORYcAA/u8AwAD/SQGJwAEi9cAIw7EcwAEi84HAASL1wAjDsWQBAAGUAMAA/0E+A07AASMOwAEjGAAAgO1gA4mWARzAASMogMABIxrACMORSwEAAYHAASMpwAjDsQDAAP7OPRzAASM4FsABIzMuJ5ZmgL8CAAKCwAEjOcAIxBQWwAEjRi6YapZnAMAA/wY9F8ABI1sumGocwAEjWRbAASNbLphqlmdkAQABlADAAP9BlmcGlmouwAEjdcABI3rAASQ0AAAGAAAAAQPAASN+wAEkNAAAAAEBAcABI5MAAACExV0DwAD+vwFgA4mWAABcAT4CPRfAASOpLphqHMABI7UWwAEjqS6YapZngY0BAAEWwAEjx4DAASO4wAjEu2HAAP7vAMAA/0KWZ0XAASPTAcABI9zAASPeAABiYAPAAP4bAZMBHMABI+WBwAEj48AIxRJjAQABFsABI/aAwAEj58AIxLthwAD+7wDAAP9JAYnAASQAwAjFEhzAASP+gcABJADACMUSZAEAAZQAwAD/QT4BPRzAASQRFsABJAsuJ5ZmhF4BAAEcwAEkJoDAASQYwAjEu0sBAAGBwAEkJ8AIxRIAwAD+zgDAAP8OBpZrLsABJDnAASRGwAEkygMASwAAAAEDwAEkSMABJMoAAAABAQHAASRXAAAAgO1gA4mWAABgA8AA/hsBSsABJGsBNQAAAAEAYAPAAP4bARzAASRwFsABJGsuJ5ZmSwEAAYDAASRxwAjF0wDAAP8FIxzAASR8gQDACMXwSAEAASsAADDAASSGH8ABJJDAAP1OAQABJMABJMgDJ5h2gMABJK/ACMXTJ5h3AIEAwAjF8AFgA8AA/hsAAAjDagAIxJUACMWtAAjGYwAAAAMClm4uwAEkz8ABJNXAASZXA5h4AAABYAHAAP9oAAABBJZwLsABJS/AASVNCScAXQPAAP7xAmADwAEAAmADwAD+GwEewAElO8AA/vgAAmADwAEAAmADwAD+GwAAAQWWdS7AASVSwAElUsABJXMAAAADwAElX8ABJXMAAAAAAAAAYAOWbgE+AT0cwAElaC6XrgEAAScAAJZyAQkBwAElUsAA/34AAAAAAgaWci7AASV4wAElfMABJiEAAJeuAAAAAQPAASV/wAEmIQAAAAEBAcABJYcAAACD8WADwAEAAgAAYAPAAP4bAT4DTsABJZnAASWgAACBdmADwAD+GwEcwAElpxbAASWiLieWcEsBAAGAwAElqMAIx0YAwAD/BUnAASW1HMABJcCBwAElucAIx2FIAQABKwDAAP8/PgI9icABJdHACMdhFsABJeAWwAEl2i4nlnBhwAD/FT0cwAEl8xbAASXuLieWcIC/AgACgMABJfTACMdGgcABJf7ACMdhAMAA/wY/SsABJhABgcABJhfACMdhBpZzLsABJibAASYzwAEmVQMASwAAAAEDwAEmNcABJlUAAAABAQHAASY9AAAAg/FgA8ABAAIAAGADwAD+GwFKwAEmSAEcwAEmTRbAASZILieWcEsBAAGAwAEmTsAIyDEAwAD/BQAACMcfAAjICwAIyG8AAAACApZ2LsABJlrAASZgwAEnmAOYeQAAAWABwAD/aAAAAQSWeC7AASa0wAEmzwknAF0DwAD+8QJgA8ABAINgA8AA/hsBHsABJsDAAP74AAJgA8ABAINgA8AA/hsAAAEFlnwuwAEm1MABJtTAASb0AAAAA8ABJt7AASb0AAAAAAAAAGADlnYBPgE9HMABJucul64BAAErAJZ6AQkBwAEm1MAA/34AAAAAAQaWei7AASb5wAEm/cABJ5YAAJeuAAAAAQPAAScAwAEnlgAAAAEBAcABJwUAAACArGADwAEAgwAAYAPAAP4bAT4DTsABJxTAAScbAACBdmADwAD+GwEcwAEnIhbAAScdLieWeEsBAAGAwAEnI8AIyU0AwAD/BUnAASctHMABJziBwAEnMcAIyWhIAQABKwDAAP8/PgI9icABJ0nACMloFsABJ1gWwAEnUi4nlnhhwAD/FT0cwAEnaxbAASdmLieWeIC/AgACgMABJ2zACMlNgcABJ3PACMloAMAA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wAE4U8AA/VwDAAODwAE4Y8AI2xeEwAE4asAI2zIWwAE4doLAAThvwAjbB2HAAQAGAEnAATiDHMABOI2DwAE4h8AI2xdIAQABhMABOJDACNsyAMAA/z9KwAE4lQGBwAE4nMAI2vg/TsABOKvAATitAABiYAPAAP4bAYPAATivwAjbF07AATi+wAE4xQAAYWADwAD+GwEWwAE4zoDAATjHwAja4WHAAP7vRMABONo+A07AATjpwAE48gAAmI1gA8AA/hsBHMABOPuCwAE49MAI2weEEAEAATUAAAABAGADwAD+GwGFwAE5BsAI2/s1AAAAAQBgA8AA/hsBjcABOQbACNv7HMABOQeHAMAI3GtkAQABlADAAP9BhwDACNxrAMABABBDwAE5EhzAATkih8ABORnACNxEYwEAATeAgADAAP9JPgRJwAE5MxzAATk9gcABOTfACNr4gW0BAAGGwAE5QMAI3BcAwAD/TErAATlIARzAATlPlIHGAAAAAMAA/j4/PRzAATlhgMABOVvACNrhgL8CAAI1AAAAAQBgA8AA/hsBgcABOWLACNr4NQAAAAEAYAPAAP4bAYnAATliwAja+BzAATlnFADACN0pCABkAQABlADAAP9BFADACN0pCACHwAE5bcAI3EQAwAD+z0nAATl/HMABOYWFwAE5g8AI2/uBbQEAAYTAATmIwAjbMgDAAP9MSsABOY0BgcABOZTACNr4Pz2PwAE5o8AI3EQcwAE5tYLAATmuwAjbB4QQAQABNQAAAAEAYAPAAP4bAYXAATnAwAjb+zUAAAABAGADwAD+GwGNwAE5wMAI2/scwAE5wRQAwAjd1QgAZAEAAZQAwAD/QRQAwAjd1QgAAMABABBJwAE51BzAATnhh8ABOdjACNxEYwEAATeIAADAAP9JPgQ9icABOfTACNr4HMABOfqBwAE59MAI2vhkAQABlQDAAP9BScABOggcwAE6EoHAAToMwAja+ICXAQABhsABOhTACNwXAMAA/0tKwAE6HAEcwAE6I5SBxgAAAADAAP4+Pz0cwAE6NYDAATovwAja4YC/AgACHMABOjyBwAE6NsAI2viBjQEAAZUAwAD/QhzAATpIN4DAgQYBAAEcwAE6VIfAATpLwAjcRIPBAQABNwYAwAD+OADAAP40AMAA/s89HMABOmmAwAE6Y8AI2uGAvwIAAhzA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AP91ARbAAKuGLpizlqiW40nAAKurHMAAq7SDwACrr8AJbshIAQABKwDAAP91PgE9i8AAq8XACW7IH8AAq9CEJAIAASsBhGOCwACr/8AJbqA/TsAArBnAAKwhAACEZmADwAEAgwEcwACsIy6YywAAAACXBk7AAKw/wACsSgAAhFhgA8AA/hsBHMAArEwumSIAAAAAl1BOwACsYsAArHAAAITZYAPAAP4bARzAAKxyLpkiAAAAAJdQTsAArIjAAKyOAACEg2ADwAD+GwEcwACskC6HHAAAAACW607AAKykwACsqQAAgL1gA4jHARzAAKyrLocjAAAAAJcbTsAArL/AAKzLAACEaF0DwAD+vwFgA4TsARzAAKzNLpjQAQABg8AArODACW7IAJcLQBzAAK1aNMAArPIDwACs8sAArVoAAAAAAAAAYAPAAPxVAT4CPRzAAK0HFsAArP0umLKW51YBAAE1AAAAAQBgA8ABAAIBNQAAAAEAYAOIxwEWwACtEIPAAK0LwAluyIC9g5QjHMAArRYUAMAJcKsLAEgBAAErAAArFsAArRYUAMAJcKsLAIC9iMoBYAPAAQACIxzAAK0bFADACXCeCwBIAQABKwAAJ5k7FADACXCeCwABYAPAAQACAMAA/tBKwACtSAEpIAAAAAAAwACs8sAArVwATsAArWfAAK13AACFOWADgnwBHMAArXkumRIAAAAAlxhOwACtmMAAraYAAIU4XQPAAP6/AWADiPwBHMAAragumTwAAAAAl0JOwACtxMAArd0AAJk9YAPAAP4bARbAAK3yFsAArd8umKiW12HAAP7vTsAArgLAAK4RAACExV0DwAD+vwFgA4mWARzAAK4TLpkqAAAAAJdHPRzAAK43LoceAAAAAJbsTsAArmXAAK58AACFOmADwAD+GwEcwACufi6HHgAAAACW7E7AAK6SwACupgAAmT5gA8AA/hsBFsAArrYWwACuqC6YpJbTYcAA/u9OwACuxsAArtEAAIWrXQPAAP6/AWADiJEBHMAArtMumSsAAAAAl0xOwACvAcAArwcAAIV1XQPAAP6/AWADiJEBHMAArwkumSsAAAAAl0w9F8AAr0EWwACvMy6YpJbTYRTAAK9KwAlx/xAAwAD+7T0XwACvdhbAAK9jLpioltdhFMAAr3/ACXF/DQDAAP7tPRzAAK+nFsAAr50u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2LMAAAEAYAOF+wEfwADYs4YNAwACHMAA2N0umRIAAAAAlxgcwADY9C6ZPwAAAACXSQGEIik1AAAAAQBbARfAANksg8AA2SrACZJihFiCwADZOcAJkjqCWoMAwAmSYgHAANlQasAA2VBgA8AA/hvAAGjVAD4CTsAA2XPAANl6AACDYmADwAD+GwEcwADZfC6ZIgAAAACXUErAANmSATXAANmdAAABAGADhg4BH8AA2Z2GIQMAAhzAANnMLpkSAAAAAJcYHMAA2eMumT8AAAAAl0kBhCIqNQAAAAEAWwEXwADaHIPAANoawAmTAoRYgsAA2inACZLaglqDAMAJkwIBwADaQGrAANpAYAPAAP4bg0oAPgJOwADaaMAA2m8AAINiYAPAAP4bARzAANpxLpkiAAAAAJdQSsAA2ocBNcAA2pIAAAEAYAOGDgEfwADakoYhAwACHMAA2sEumRIAAAAAlxgcwADa2C6ZPwAAAACXSQGEIik1AAAAAQBbARfAANsQg8AA2w7ACZOghFiCwADbHcAJk3iCWoMAwAmToAHAANs0asAA2zRgA8AA/hvAAGaJAD4BSsAA20EBH8AA20yGOAEAARzAANtQLpjEAAAAAJczAAHAANtyasAA23JgA8AA/huEDgA+AUrAANuNAR/AANuYhkUDAAMcwADbqi6YxAAAAACXMxzAANvILplNAQABHMAA2+AuhxwAAAAAlusAlzAcwADb7S6YxAAAAACXMwABwADcD2rAANwPYAPAAP4bwABmKwA+AUrAANwuAR/AANw5hlMEAAQcwADcTy6YxAAAAACXMxzAANxhLpjEAAAAAJczHMAA3H8umMQAAAAAlzMcwADckS6ZUAAAAACXRQABwADct2rAANy3YAPAAP4bsVAAPgJOwADc2MAA3N8AAINiYAPAAP4bARzAANzhLpkiAAAAAJdQSsAA3PcBNcAA3QIAAAEAYAOGVAEfwADdAoZeAQABHMAA3RYumSMAAAAAlzEANQAAAAEAWwEXwADdOIPAAN02wAmVMoRYgsAA3UXACZUKglqDAMAJlTIBwADdXGrAAN1cYAPAAP4bwACceAA+A07AAN17wADdggAAg2JgA8AA/hsBHMAA3YQumSIAAAAAl1BOwADdnsAA3asAAIXbYAOI/AEcwADdrS6HJAAAAACXRkrAAN3FATXAAN3QAAAB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iasGl0EvwAESjMABEpzAAROTAACZYAAAAAEDwAESrcABE5MAAAAAAAAAXQPAAP6/AWADiasBPgROwAESusABEsEAAGFgA8AA/hsBHMABEsMuhx4AAAAAluxOwAES48ABEuoAAIF2XQPAAP6/AWADiasBHsABEvjAAP7EAwFgA4mrAoDAARMPwAnD1SsBhXYpRcABEzIBwAETO8ABEz0AAGJgA8AA/hsBkwEcwAETRILAARNCwAnEMmMBAAGAwAETRsAJw9UAwAD/SQGKwAETUMAJxDIcwAETToLAARNQwAnEMmQBAAGUAMAA/0E+AT0cwAETYYHAARNbwAnD9oC/AgACgsABE2LACcQyHMABE2cumS4AAAAAlz8AwAD+z0rAAROCAYHAAROJwAnD9gaXQi/AAROYwAETp8ABFJoAAJk8AAAAAQPAARO3wAEUmgAAAAAAAABdA8AA/r8BYAOI/AE+BE7AARPEwAETywAAYWADwAD+GwEcwAETzS6HHgAAAACW7E7AARPswAET8wAAgXZdA8AA/r8BYAOI/AEewAEUAcAA/sQDAWADiPwCgMABFBfACcUAKwGFdilFwAEUOgHAARRDwAEURQAAYmADwAD+GwGTARzAARRMgsABFErACcVdYwEAAYDAARROwAnFAADAAP9JAYrAARRYwAnFXRzAARRWgsABFFjACcVdZAEAAZQAwAD/QT4BPRzAARRpgcABFGPACcUhgL8CAAKCwAEUasAJxV0cwAEUby6HJAAAAACXRgDAAP7PSsABFIkBgcABFJDACcUhBpdDL8ABFJ/AARSvwAEVpgAAmWEAAAABA8ABFMDAARWmAAAAAAAAAF0DwAD+vwFgA4l1AT4ETsABFM3AARTUAABhYAPAAP4bARzAARTWLoceAAAAAJbsTsABFPbAART9AACBdl0DwAD+vwFgA4l1AR7AARULwAD+xAMBYAOJdQKAwAEVIsAJxisrAYV2KUXAARVFAcABFU7AARVQAABiYAPAAP4bAZMBHMABFVeCwAEVVcAJxohjAQABgMABFVnACcYrAMAA/0kBisABFWPACcaIHMABFWGCwAEVY8AJxohkAQABlADAAP9BPgE9HMABFXSBwAEVbsAJxkyAvwIAAoLAARV1wAnGiBzAARV6LpliAAAAAJdEAMAA/s9KwAEVlQGBwAEVnMAJxkwG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wAniqy4Airw9F8ABNdgumKqWqIPAATXmwAni5JbbSsABNfcBhMABNf7ACeMaBpdeL8ABNg/AATYgwAE2rgAAhxYBasABNhBgA8AA/2gCAAABA8ABNirAATauAAAAAQAAAcABNkAAAACExV0DwAD+vwFgA4mWAWoAYAPAAP8leVwBPgFJwAE2VyEcwAE2aoDAATZbwAnjoUgBAAErAMAA/uk+AT0cwAE2jhbAATZ7LpiolteApQEAAYDAATaVwAnjoQDAAP7RPwaXXy/AATazwAE2xMABN1sAAIcZAWrAATa0YAPAAP9oAgAAAQPAATbOwAE3WwAAAAEAAAHAATbkAAAAhMVdA8AA/r8BYAOJlgFqAGADwAD/JXlcAT4BScABNvshHMABNw6AwAE2/8AJ5DtIAQABKwDAAP7pPgE9NQAAAAEAXQPAAP6/AWADiZYBFsABNx8umKiW1xfAATcygcABNzLACeR/YRzAATc5FsABNzKBwAE3MsAJ5H9hwAD+74GNAQABFsABN0uAwAE3PMAJ5DthwAD+7wDAAP9CwAD+7T8Gl10vwAE3YMABN3HAATlIAACYvJaoAWrAATdhYAPAAP9oAgAAAQPAATeDwAE5SAAAAAICAsABN4kAAACD82ADgkwAwAE3kwAAAJfsYAPAAP4bAABgA4JMAT4DScABN6UcwAE3thbAATepLplslqiXWEgBAAErAMAA/uk+AUrAATfHAYDAATfOwAnlGD9GwAE338ABOATAATfoAAAAl+1gA5d7ABbAATf2LplslqiXWD4CTsABOFvAAThqAAGZb2ADwAD+GwEcwAE4fhbAATh3gsABOGzACeV5humXfksBAAGBwAE4f8AJ5SYAwAD/BUnAATiSIRzAATilg8ABOJbACeWWSAEAASsAwAD/Pz4BPRzAATjVFsABOM4WwAE4w4LAATi4wAnleYcDl32G6Yq5gL8CAAImwAE41QGAwAE41sAJ5RhgA4JTHMABOOoumXCWqAMAA4DAATj4wAnlGBbAATkJgsABOP7ACeV5hwOXfYPAATkVwAnllgCXXADAAP8GP0rAATk5AYDAATlAwAnlGAaXYC/AATlNwAE5YsABOfUAAIckAWrAATlOYAPAAP9oAgAAAQPAATluwAE59QAAAAAAAABgA4j8AT4DTsABOX3AATmIAAGX7GADwAD+GwEWwAE5ii6YqpaolttOwAE5ocABOagAAYF2YAOI/AEdwAE5sIckAAAAAJdGSsABOcQBJsABOcQBHMABOcsumLyWqAIAAoHAATnewAnm0IDAATnmwAnmsACXXWADiPwGl2EvwAE5+sABOg7AATrVAACZCgFqwAE5+2ADwAD/aAIAAAEDwAE6GcABOtUAAAACAgLAATokAAAAgllgA4qUAMABOjMAAACZFWADwAD+GwAAYAOCjAE+A07AATpKwAE6VQABl+xgA8AA/hsBFsABOlcumKqWqJbbTsABOm7AATp1AAGBdmADgowBHcABOn2ZCgIAAoDAATqJwAnnU4HAATqUwAnnYQCXHErAATqkASbAATqkARzAATqrLpi8lqgCAAKDwAE6vsAJ55qCwAE6xsAJ53oAl11gA4KMBpdiL8ABOtrAATruwAE7fwAAmRwBasABOttgA8AA/2gCAAABA8ABOvnAATt/AAAAAAAAAGADgvcBPgNOwAE7CMABOxMAAZfsYAPAAP4bARbAATsVLpiqlqiW207AATsswAE7MwABgXZgA4L3AR3AATs7mRwAAAAAlyFKwAE7TgEmwAE7TgEcwAE7VS6YvJaoAgACgcABO2jACehYgMABO3DACeg4AJddYAOC9waXYy/AATuEwAE7lsABPDkAAJkdAWrAATuFYAPAAP9oAgAAAQPAATufwAE8OQAAAAEBAcABO6QAAACZFWADwAD+GwAAYAODHAE+A07AATu7wAE7xgABl+xgA8AA/hsBFsABO8gumKqWqJbbTsABO9/AATvmAAGBdmADgxwBHcABO+6ZHQEAAYDAATv4wAno2wCXIkrAATwIASbAATwIARzAATwPLpi8lqgCAAKCwAE8IsAJ6RSBwAE8KsAJ6PQAl11gA4McBpdkL8ABPD7AATxQwAE83QAAmR8BasABPD9gA8AA/2gCAAABA8ABPFnAATzdAAAAAAAAAGADg68BPgNOwAE8aMABPHMAAZfsYAPAAP4bARbAATx1LpiqlqiW207AATyMwAE8kwABgXZgA4OvAR3AATybmR8AAAAAlyZKwAE8rAEmwAE8rAEcwAE8sy6YvJaoAgACgcABPMbACenJgMABPM7ACempAJddYAODrwaXZS/AATziwAE8+sABPZMAAJkvAWrAATzjYAPAAP9oAgAAAQPAAT0JwAE9kwAA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PglJwABC1hbAAEL3FsAAQvMWwABC6RbAAELaLpmrl+CZjpfEgKuXk4FVwAD/FkrAAEMAAD9OwABDGMAAQyAAAJnTYAOmiwEfwABDJqaXAQABgMAAQzvACil/AE7AAENPwABDVQAAmdRgA5feARzAAENXLpm0AgACgcAAQ2PACinGFsAAQ3aAwABDbMAKKX+G94qaAJfxPRzAAEOFLpnSAQABJ5noAJgQPRzAAEOiLpnNAQABJ4bhAJgdPTUAAAABAGADl94BgsAAQ7fACinsF8AAQ72DwABDvcAKKkyD4hzAAEO1FsAAQ72DwABDvcAKKkyD4pflZAEAAZQAwAD/QZflRsAAQ87AAEQiwABD4gAAAYYdYAOJugAcwABEGBbAAEQTFsAARA8WwABEBRbAAEP2Lpmrl+CZjpfEgKuXk4NowAD/E4CtAAAAAMAA/pM+AT0cwABEMILAAEQqwAop7IcVAQABg8AARDrACiqbAJgTPTUAAAABAGADl94BgsAARFHACinsF8AARFeDwABEV8AKKwOD4hzAAERPFsAARFeDwABEV8AKKwOD4pflgY0BAAGUAMAA/0KX5T0cwABEaC6ZzQEAASeG4gCYHQaYCTDAAER9wABEgcAARMIAAJnpAAAAAQPAAESOwABEwgAAAAEBAcAARJgAAACD82ADglMAAGADwAD+GwE+AUrAAESkAR7AAES2mMEBAAEmwABEuQGAwABEucAKK4NgA4TsAAaYCjDAAETHwABEzMAARRoAAIKOAAAAAQPAAETRwABFGgAAAAEBAcAARNkAAACD8WADwAEAAgAAXAE+Aj0cwABE7BbAAETnLoRAl+GCjgEAAYDAAETywAor5gDAAQBuPRfAAET/LocFHMAARQYWwABE/y6HBZfmZAEAARbAAEUQgMAARQnACivmYcABAAYAwAD/QZfmBpgLMMAARR/AAEUkwABFcAAAmeoAAAABA8AARS7AAEVwAAAAAQABwABFNwAAAIPxYAPAAQACAWrAAEVAYAPAAQACwACdfABcAT4CPRzAAEVMLoKOAQABgMAARVLACix7AJgKPRfAAEVfLoJSGsAARWeX6pftBpgMMMAARXXAAEV6wABFsgAAmesAAAABA8AARYXAAEWyAAAAAAAAAFwBPgFJwABFjiEcwABFmBbAAEWSLoJSl+1IAQABGsAARZuX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mFgwwACsqsAArKrAAKzvAACF+wAAAAEDwACsucAArO8AAAABAQHAAKzFAAAAg/NgA4bEAABgA8AA/yUBPgE9HMAArNEumdIBAAEkwACs6gEWwACs44DAAKzewAqIooCWhsYAmBAGmFkwwACs9MAArPTAAK0/AACF/gAAAAEDwACtBsAArT8AAAABAQHAAK0VAAAAg/NgA4bNAABgA8AA/yUBPgE9HMAArSEumdIBAAEkwACtOgEWwACtM4DAAK0uwAqJCICWhs8AmBAGmFowwACtRMAArUTAAK2LAACGAAAAAAEDwACtVMAArYsAAAABAQHAAK1hAAAAg/NgA4bWAABgA8AA/yUBPgE9HMAArW0umdIBAAEkwACthgEWwACtf4DAAK16wAqJboCWhtgAmBAGmFswwACtkMAArZDAAK3OAACGAgAAAAEDwACtoMAArc4AAAABAQHAAK2tAAAAg/NgA4bfAABgA8AA/yUBPgE9HMAArbkumdIBAAEnhEEAmBAGmFwwwACt08AArdPAAK5kAACGIQAAAAEDwACt28AArmQAAAABAQHAAK3gAAAAg/NgA4d0AABgA8AA/yUBPgQ9HMAArewumdIBAAEnml0AmBA9HMAArgIumB0BAAEWwACuIIDAAK4bwAqKJYJwh3YAmIc9HMAAri8umeQBAAEnml4AmA49HMAArkYumhQBAAEWwACuW4DAAK5WwAqKJYJth3cAmC8GmF0wwACuacAArmnAAK8pAACGIwAAAAEDwACufcAArykAAAABAQHAAK6OAAAAg/NgA4eAAABgA8AA/yUBPgQ9HMAArpoumeQBAAEnml8AmA49HMAArrQummACAAEWwACuzRbAAK7IgMAArsPACorKgm2HgoYth7QBhrspmHE9HMAArvIumewBAAEnmmEAmA09HMAArwoumhQBAAEWwACvH4DAAK8awAqKyoCWh4MAmC8GmF4wwACvLsAAry7AAK/ZAACFyAAAAAEDwACvQMAAr9kAAAABAQHAAK9PAAAAg/NgA4YiAABgA8AA/yUBPgQ9HMAAr1sumhQBAAEWwACvcIDAAK9rwAqLe4JvhiQAmC89HMAAr4EumewBAAEnYwCYDT0cwACvly6IeAIBYAOI/AIWwACvpoDAAK+hwAqLe4U4hiUWwACvtS6Z+JgXAJgmPRzAAK/FLpnsAQAB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CrJ/hYWFuIO3wAD+oj4DPRzAANi3LpnsAQABJ2MAmA09HMAA2M8uiHgCAWADiPwCFsAA2N6AwADY2cAKsn+FhYW4FsAA2OUumfiYFwCYJj0cwADY9y6Z7AEAASeAlwCYDT89HMAA2RMumewBAAEng9wAmA1OwADZLcAA2TUAAJp7XQPAAP59AWADglMBHMAA2W0xwADZT10DwAD+vwFgA4JTAhbAANlVgMAA2VDACrJ/hauFuRbAANlmgMAA2WHACrJ/hXWFuoSVAQFgA4JTATTAANl0A8AA2XTAANl8AAAAAQEBwADZdQAAAIOAXQPAAP6/AWADglMAAF0DwAD+vwFgA4JTAUrAANl7AYHAANl7wAqzkADAAP6LPRzAANmDLoh4AgFgA4JTAoHAANmNwAqzIRbAANmWLocVmBMAmCY9HMAA2aYumewBAAEngyYAmA0GmIkwwADZv8AA2b/AANo+AACFugAAAAEDwADZ08AA2j4AAAABAQHAANnkAAAAg/NgA4XEAABgA8AA/yUBPgM9HMAA2fAumdIBAAEWwADZ/4DAANn6wAq0JYC9hcYAmBA9HMAA2goume0BAAEnguoAmA89HMAA2h8umhQBAAEWwADaNIDAANovwAq0JYCWhccAmC8GmIowwADaQ8AA2kPAANqkAACYPwAAAAEDwADaU8AA2qQAAAABAQHAANpeAAAAg/NgA4eiAABgA8AA/yUBPgI9HMAA2moume8AAAAAmBI9HMAA2oIumc0BAAEkwADanwEWwADakoDAANqNwAq0uIWewAD/fACYHQaYizDAANqpwADaqcAA2wQAAIVdAAAAAQPAANrAwADbBAAAAAEBAcAA2tQAAACD82ADhHsAAGADwAD/JQE+AT0cwADa4C6Z0gEAASeafACYEAaYjDDAANsJwADbCcAA260AAIVgAAAAAQPAANsewADbrQAAAAEBAcAA2zAAAACD82ADhIIAAGADwAD/JQE+Az0cwADbPC6Z5QEAARbAANtjgMAA217ACrWAhV+EhACYKT0cwADbeC6Z5AEAASeAvACYDj0cwADbji6aFAEAARbAANujgMAA257ACrWAgJaEhQCYLwaYjTDAANuywADbssAA3FcAAIViAAAAAQPAANvHwADcVwAAAAEBAcAA29kAAACD82ADhJEAAGADwAD/JQE+Az0cwADb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mewBAAEnmokAmA09HMAA9N0umeoAAAAAmAs9HMAA9O8umhQBAAEWwAD1BIDAAPT/wArK8IJviosAmC89HMAA9RUumc0AAAAAmB0GmKcwwAD1J8AA9SfAAPVmAACYLQAAAAEDwAD1MsAA9WYAAAABAQHAAPU4AAAAg/NgA4JMAABgA8AA/yUBPgE9HMAA9UQugo4BAAEkwAD1YQMnYxbAAPVTgMAA9U7ACsu5hZ7AAP98J4CXAJgKAAAKD44AChA4AAoQcAAKEJ4AChDMAAoRWwAKEj8AChLOAAoTXQAKFBUAChSxAAoVnQAKFsMAChdSAAoXuwAKGEoAChm7AAoaBwAKHNcACh4uAAofVwAKIXgACiWJAAopWAAKK1wACiu/AAosVAAKLMkACi0qAAotkAAKLgIACi5yAAovBwAKL2kACi/AAAoxXwAKMdIACjL5AAoztwAKNDoACjSrAAo1swAKNooACjb/AAo4IwAKONEACj0wAAo+KQAKQJAACkZIAApHuwAKSFoACkkWAApLMwAKTDkACkyZAApNpAAKTgQACk8PAApTagAKU8oAClSnAApVBwAKVtIACleeAApYhQAKWMQACl0RAApftAAKYOoACmMeAApnEwAKa9YACm1VAApuCQAKbt0ACm+xAApwZwAKcQsACnG6AApyOwAKc04ACnRgAAp2JgAKeGkACnnLAAp6jgAKe1EACnwUAAp/cgAKgBIACoDPAAqBQQAKgaEACoHyAAqCQwAKgsQACoP9AAqFNgAKhpkACocsAAqHngAKiAEACoh7AAqI4QAKiUcAComtAAqJ/gAKiqMACotUAAqMBgAKjLcACo1oAAqOHAAKkHcACpDfAAqRvgAKklEACpMPAAqTpAAKlFgACpU/AAqV1QAKlp4ACpdSAAqYOQAKmJkACpksAAqZrQAKmxcACpuGAAqcBwAKnGcACp23AAqecwAKnykACp/vAAqg1gAKokgACqNwAAqkqwAKppAACqdGAAqoeAAKqUQACqnxAAqruAAKrHsACq1mAAqt4QAKrxoACrJYAAqz/gAKtJEACrUIAAq1WQAKtewACrZ+AAq3EAAKt3AACrfTAAq4TQAKudwACrqTAAq65AAKuzUACruGAAq8kAAKvOcACr2tAAq/PQAKwHgACsDtAArBTQAKweMACsLgAArD3QAKxYkACsga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82ADiGcAAF8DAAABSrV5ARy1eS6HJwEAAYC1icALHB4AmVEGmbExtZK1lLXJAACGFQAAAAEDtaG1yQAAAAEBAbWrAAAAg/NgA4dDAABfAwAAAUq1tAEctbQuhycBAAGAtcTACxxkAJlRBpmyMbXNtc+2BgAAhwAAAAABA7XdtgYAAAABAQG16AAAAIPzYAOKlAAAXwMAAAFKtfEBHLXxLocnAQABgLYBwAscqgCZUQAACwIXAAsCSwALApEACwLXAAsDHQALA2MACwOpAAsD7wALBDUACwR7AAsEwQALBQcACwVNAAsFkwALBdkACwYfAAsGZQALBqsACwbxAAsHNwALB30ACwfDAAsICQALCE8ACwiVAAsI2wALCSEACwlnAAsJrQALCfMACwo5AAsKfwALCsUACwsLAAsLUQALC5cACwvdAAsMIwALDGkACwyvAAsM9QALDTsACw2BAAsNxwALDg0ACw5TAAsOmQALDt8ACw8lAAsPawALD7EACw/3AAsQPQALEIMACxDJAAsRDwALEVUACxGbAAsR4QALEicACxJtAAsSswALEvkACxM/AAsThQALE8sACxQRAAsUVwALFJ0ACxTjAAsVKQALFW8ACxW1AAsV+wALFkEACxaHAAsWzwALFxUACxdbAAsXoQALF+cACxgtAAsYcwALGLkACxj/AAsZRQALGYsACxnRAAsaFwALGl0ACxqjAAsa6QALGy8ACxt1AAsbuwALHAEACxxHAAscjQALHNMAAABiApm1MbYLthG4gQOaswABAACXTmADwAD/aAFbAWABwAD/aAAAAAEFmcExtii2LrY/AQAAA7Y9tj8AAAAAAAAAXQOZtQFfAwAAAT8BCQG2LsAA/34AAAAACQaZtzG2RLZGtmwAAJg1AAAAAQO2VbZsAAAAAQEBtl8AAACD82ADiPwAAF8DAAABSrZoASsGmbgxtnG2c7auAACGiQAAAAEDtoO2rgAAAAEBAbaQAAAAg/NgA4kHAABfAwAAAUq2mQEctpkumDUBAAGAtqnACx8NAJm3Bpm5MbaytrS27wAAhowAAAABA7bEtu8AAAABAQG20QAAAIPzYAOJEwAAXwMAAAFKttoBHLbaLpg1AQABgLbqwAsfUwCZtwaZujG287b1tyoAAIaOAAAAAQO3ArcqAAAAAQEBtwwAAACD82ADiR8AAF8D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CyuLAAsrxgALLAEACyw8AAssdwALLLIACyztAAstKAALLWMACy2eAAAADwKZ9THAAEQ+wABERMAAStYDmrcAAQAAl05gA8AA/2gBWwFgAcAA/2gAAV0Bmc8BXwMAAAEEmfgxwABEmsAARKMJmriY7ABdA5niAVsAAQWaCjHAAESowABEqMAARNAAAAADwABEwMAARNAAAAABAQHAAETGAAAEmrhdA5niAVsAAF0DmfUBXwMAAAE/AggBmfiAAMALLlMJAcAARKjAAP9+AAAAAA8GmfoxwABE1cAAROPAAEVHAACG8gFqwABE1mADwAD/aAIAAAEDwABE+8AARUcAAAABAQHAAEUQAAAAg/NgA4qJAABfAwAAAUrAAEUfASbAAEUfARzAAEUpFsAARR8umriY7Jn4hvIBAAGAwABFQsALLrwAmfJfAwAABpn7McAARUzAAEVawABFvgAAhu8BasAARU1gA8AA/2gCAAABA8AARXLAAEW+AAAAAQEBwABFhwAAAIPzYAOKewAAXwMAAAFKwABFlgEmwABFlgEcwABFoBbAAEWWLpq4mOyZ+IbvAQABgMAARbnACy81AJnxXwMAAAaZ/DHAAEXDwABF0cAARikAAIbsAWrAAEXEYAPAAP9oAgAAAQPAAEXlwABGKQAAAAEBAcAARfYAAACD82ADimsAAF8DAAABSsAARgUBJsAARgUBHMAARg8WwABGBS6auJjsmfiG7AEAAYDAAEYkwAsvrgCZ8F8DAAAGmf0xwABGLsAARjzAAEa7AACG5QFqwABGL2ADwAD/aAIAAAEDwABGXcAARrsAAAABAQHAAEZ7AAAAg/NgA4pcAABfAwAAAUrAAEaKASbAAEaKARzAAEaUFsAARooumriY7Jn4huUBAAGAwABGtsALMCcAme9fAwAABpn+McAARsDAAEbOwABHKQAAht8BasAARsFgA8AA/2gCAAABA8AARuPAAEcpAAAAAQEBwABG9QAAAIPzYAOKSQAAXwMAAAFKwABHBAEmwABHBAEcwABHDhbAAEcELpq4mOyZ+IbfAQABgMAARyTACzCgAJnuXwMAAAaZ/zHAAEcuwABHPMAAR4IAAIbcAWrAAEcvYAPAAP9oAgAAAQPAAEdMwABHggAAAAEBAcAAR1kAAACD82ADijgAAF8DAAABSsAAR2IBJsAAR2IBHMAAR2wWwABHYi6auJjsmfiG3AEAAYDAAEd9wAsxGQCZ7V8DAAAGmgAxwABHh8AAR5XAAEfeAACG2QFqwABHiGADwAD/aAIAAAEDwABHpsAAR94AAAABAQHAAEe0AAAAg/NgA4onAABfAwAAAUrAAEe9ASbAAEe9ARzAAEfHFsAAR70umriY7Jn4htkBAAGAwABH2cALMZIAmexfAwAABpoBMcAAR+PAAEfxwABINwAAhtQBasAAR+RgA8AA/2gCAAABA8AASAHAAEg3AAAAAQEBwABIDgAAAIPzYAOKCgAAXwMAAAFKwABIFwEmwABIFwEcwABIIRbAAEgXLpq4mOyZ+IbUAQABgMAASDLACzILAJnrXwMAAAaaAjHAAEg8wABISsAASJ8AAIbPAWrAAEg9YAPAAP9oAgAAAQPAAEhdwABInwAAAAEBAcAASG0AAACD82ADifsAAF8DAAABSsAASHwBJsAASHwBHMAASIYWwABIfC6auJjsmfiGzwEAAYDAAEiawAsyhACZ6l8DAAAGmgMxwABIpMAASLLAAEkHAACGywFqwABIpWADwAD/aAIAAAEDwABIxcAASQcAAAABAQHAAEjVAAAAg/NgA4nzAABfAwAAAUrAAEjkASbAAEjkARzAAEjuFsAASOQumriY7Jn4hssBAAGAwABJAsALMv0AmelfAwAABpoEMcAASQzAAEkawABJbwAAhscBasAASQ1gA8AA/2gCAAABA8AASS3AAElvAAAAAQEBwABJPQAAAIPzYAOJ6AAAXwMAAAFKwABJTAEmwABJTAEcwABJVhbAAElMLpq4mOyZ+IbHAQABgMAASWrACzN2AJnoXwMAAAaaBTHAAEl0wABJgsAAScgAAIbEAWrAAEl1YAPAAP9oAgAAAQPAAEmSwABJyAAAAAEBAcAASZ8AAACD82ADieAAAF8DAAABSsAASagBJsAASagBHMAASbIWwABJqC6auJjsmfiGxAEAAYDAAEnDwAsz7wCZ518DAAAGmgYxwABJzcAASdvAAEokAACGwQFqwABJzmADwAD/aAIAAAEDwABJ7MAASiQAAAABAQHAAEn6AAAAg/NgA4nYAABfAwAAAUrAAEoDASbAAEoDARzAAEoNFsAASgMumriY7Jn4hsEBAAGAwABKH8ALNGgAmeZfAwAABpoHMcAASinAAEo3wABKgAAAhr4BasAASipgA8AA/2gCAAABA8AASkjAAEqAAAAAAQEBwABKVgAAAIPzYAOJ0AAAXwMAAAFKwABKXwEmwABKXwEcwABKaRbAAEpfLpq4mOyZ+Ia+AQABgMAASnvACzThAJnlXwMAAAaaCDHAAEqFwABKk8AAStQAAJgvAWrAAEqGYAPAAP9oAgAAAQPAAEqiwABK1AAAAAEBAcAASqwAAACD82ADiboAAF8DAAABSsAASrUBJsAASrUBHMAASr8WwABKtS6auJjsmfiYLwEAAYDAAErPwAs1WgCZ5F8DAAAAAAsuiQALLwIACy97AAsv9AALMG0ACzDmAAsxXwALMdgACzJRAAsyygALM0MACzO8AAs0NQALNK4ACzUnAAs1oAAAAA8CmgsxwABLnsAAS6TAAFJDA5q5AAEAAJdOYAPAAP9oAVsBYAHAAP9oAAFdAZniAV8DAAACBJoOMcAAS//AAEwHGJq6mOwAXQOZ9QFbASsEmg8xwABMHMAATEBYmrsAXQPAAP7xAmADibpfAwAAAR7AAEwowADDGQACYAOJul8DAAAAAAEFmiIxwABMRcAATEXAAEycAAAAA8AATF/AAEycAAAAAAAAAF0DmgsBXwMAAAE+AT0XwABMaC6aupjsH8AATHeaCgEBXwMAAAEuAJoOAQkBwABMRcAA/34AAAAAEAaaETHAAE2+wABNwMAAThMAAIYfAAAAAQPAAE3NwABOEwAAAAEBAcAATdcAAACD82ADiboAAF8DAAABPgFKwABN4wEmwABN4wE1AAAAAQBdA8AA/vECYAOJul8DAAABFsAATeoumruaDzUAAAABAGADiboBgMAATfDACzbsNQAAAAEAXwMAAAEcwABN74HAAE3vwAs3D0sBAAGCwABN78ALNy8AwAD/BSMcwABN9oMAwAs3Q0gBAAErAMAA/3U1AAAAAQBbASbAAE3vARzAAE3/gMAATfrACzbshFIBAAEWwABOBi6aupjsmg4Aib1fAwAANQAAAAEAXAEcwABN74HAAE3vwAs3D4C/AgACgsAATe/ACzcvhADACzeEAMAA/waEAMALN4SDAMALN0MBW18DAAAGmhIxwABOGMAAThrAAE5AAACYLwAAAAEDwABOKcAATkAAAAABAQHAAE4zAAAAg/NgA4m6AABfAwAAAUrAAE48ASsGmhMxwABORcAA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AEqqgcAASp7AC7YVmv+bf0rAAEq7ASsGm5Q0wABKz8AAStjAAEs9AACGrAAAAAEDwABK7sAASz0AAAABAQHAAEsBAAAAg/NgA4mEAABgA4j8AT4BSsAASw0BNQAAAAEAYAOI/AEcwABLFC6a7gEAARbAAEsngMAASyLAC7cSgO2JhwCbkyMcwABLMoEAwAu3L0gBAAErAACAwABLNcALtxKBAMALty8BYAOI/AAAC6p0AAuqsQALquQAC6sYAAusHAALrOkAC603AAutcQALrasAC63lAAuuHwALryMAC7BNAAuxBQALsUAAC7S2AAu11wALtusAC7eAAAAAEgKblzTAAEtCwABLSMAATvgDmwcAAAFgAZt1AAACBJuZNMAAS4PAAEuMGJsIAGADwAD+GwGTBJuaNMAAS5XAAEunGJsJAGADwAD8VQEqAQWbnzTAAEuswABLrMAATFUAAAADwABLwMAATFUAAAACAQLAAEveAAAAhPFdA8AA/vECYAOJlmADiPwAwABMCAAAAJr/YAOblwFqAGADwAD/JXkAYAOblwE+AT0cwABMPRbAAEwwLoTxm3eApQEAAYDAAExEwAu4QQDAAP8NAQkAwABMGJt8AQABgcAATB7AC7haAAIGm5w0wABMWsAATHvAAEzdAACbBAFqwABMW2ADwAD/aAIAAAEDwABMjsAATN0AAAAAAAAAYAOblwE+AUrAAEyXAR/AAEyim58CAAIywABM0GADiZZgA4j8AC4ABpudNMAATOLAAEz3wABO9gAAhqwBasAATONgA8AA/2gCAAABA8AATQ3AAE72AAAAAQEBwABNIAAAAIPzYAOJhAAAYAOI/AE+BU7AAE01wABNQQAAhFxgA4j8ARzAAE1DLpruAQABFsAATVaAwABNUcALuUGA7YmHAJuTScAATWYcwABNdoHAAE1qwAu5WEgBAAErAIkASsAATX8BgMAATYbAC7lBP0nAAE2QFsAATZQumwmbmkrAAE2gAYHAAE2nwAu5WD89F8AATboumwgcwABNuBbAAE26LpsIm5lkAQABlADAAP9Bm5lJwABNxRzAAE3PFsAATckumwibmYCXAQABFsAATd4WwABN0S6E8Zt3YcAA/xUAwAD/Sz4DPRfAAE3uLpsJKZuaPRfAAE4JLpsIHMAATgcWwABOCS6bCJuZgY0BAAGUAMAA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AJuMYAOcggAWwABGvxbAAEa2LpuRm/mcQinAAP8UPgE9F8AARtmAwABGz8AMGT6bqyqchD0XwABG8S6blCqcSAacczbAAEhxwABIhcAASMIBAISIAAAAAQPAAEiNwABIwgAAAAAAAABdA8AA/n0BYAODHAE+Aj0XwABIky6blCmcSErAAEiqARbAAEi6FsAASLEum5Gb+ZxCg2jAAP8TBpx0NsAASMfAAEjPwABJFgEAm64AAAABA8AASN/AAEkWAAAAAAAAAGADwAD+GwE+Aj0XwABI5S6blCmcSErAAEj8ARbAAEkMFsAASQMum5Gb+ZxCYcAA/xUGnE82wABKEcAASijAAErPAACbrwAAAAEDwABKQsAASs8AAAAAAAAAYAOcIQE+Aj0jHMAASmkWwABKSy6bp5v5nERIAQABKwDAAP91F8AASksum6eb+R/AAEp5nDwBAAEuAJxEKwFgA5wuSsAASqcBFsAASq4um6eb+ZxEBpxQNsAAStTAAErwwABLuwAAm10BasAAStVgA8AA/2gCAAABA8AASwHAAEu7AAAAAQEBwABLEgAAAJteXQPAAP59AWADgxwAAF0DwAD+fQFgA4McAT4DTsAASyfAAEs0AACbsF0DwAD/swFgA4McARzAAEtAgMAASzbADBrrlXEAAAAAwAD+lEbAAEtNAMAAS1gAAACA9WADgxwAgMAAS13ADBrrPTUAAAABAGADnIIBHMAAS3AWwABLaC6bkZv5nEJLAQABgsAAS3HADBtGAMAA/wUjHMAAS3WDAMAMG19IAQABKwAAKxfAAEt1gwDADBtfm6spnIQBYAPAAPxVSsAAS4YBHMAAS5sWwABLlhbAAEuNLpuRm/mcQoNowAD/E4GlAQABFsAAS66BwABLocAMGxCDHMAA/78AwAD+iQacUTbAAEvAwABL0cAATHoAAJtqAWrAAEvBYAPAAP9oAgAAAQPAAEvdwABMegAAAAICAsAAS+QAAACba2ADgxwAwABL9AAAAITzYAODHAAAYAPAAPxVAT4CScAATAYewABMCsAA9/wCAAKAwABMFMAMHCqBwABMHsAMHDgASsAATCsBKT9KwABMPAEcwABMVRzAAExDLpuqAQABgMAATEvADBwqAJxMm2oBAAEcwABMYi6bqgEAAYHAAExqwAwcOACcTACclgacUjbAAEx/wABMkMAATTQAAJtJAWrAAEyAYAPAAP9oAgAAAQPAAEybwABNNAAAAAICAsAATKIAAACbSGADgxwAwABMsQAAAITzYAODHAAAYAPAAPxVAT4CScAATMMewABMx8AA9/wCAAKAwABM0cAMHPCBwABM2sAMHP4ASsAATOcBKT9KwABM+AEcwABNEBzAAEz/LpuqAQABgMAATQfADBzwAJxMm0kBAAEcwABNHC6bqgEAAYHAAE0kwAwc/gCcTACclwacUzbAAE05wABNSsAATZ4AAJtsAWrAAE06YAPAAP9oAgAAAQPAAE1XwABNngAAAAEBAcAATV4AAACEmGADgxwAAGADwAD8VQE+AUrAAE1sARbAAE2QFsAATYMcwABNcy6bqgEAAYDAAE17wAwdtgCcTJucnImDt8AA/qIGnFU2wABNo8AATbTAAFDaAACbsZv5AAAAAQPAAE3NwABQ2gAAAAEBAcAATdkAAACBVGADnIIAAF0DwAD+vwFgA5yCAT4HScAATeUhHMAATgMWwABN7oDAAE3pwAweKJuynI1IAQABKwDAAP7pSsAATgwBFsAAThiAwABOE8AMHiibspyNP07AAE42wABOOwAAm7NgA5ymATXAAE5BAAABAGADnKYBH8AATkGcqwAAAAA1AAAAAQBbARzAAE5NgcAATkvADB6YVgEAAYDAAE5RwAweKACmx4EAwAwemE7AAE5gwABOZgAAm7RdA8AA/r8BYAOcggExwABOdGADnIIAPRfAAE6BgMAATnzADB4om7KCwABOmMAMHt2cjU7AAE6uwABOtwAAm7VgA5yCAStDwABOwxbAAE7PgcAATsrADB6Gg7emxUE+CU7AAE7nwABO8AAAm7ZgA5yCARzAAE73gcAATvLADB6GhF4AAAAApshJwABPBx7AAE8LwAD3/AIAAoTAAE8VwAwfSYPAAE8fwAwfHABCwABPKgA/PRzAAE9AgsAATzrADB7dVgEAAYTAAE9EwAwfSQDAAP7QPYvAAE9VwAwfHITAAE9gwAwfSU7AAE90wABPfgAAhO9gA4McARbAAE+JhMAAT4DADB9JhO+chU/AAE+awABPnwAAAZu3YQMBYAOJq1wAA8AAT6jAAE/2AAAAAQEBwABPswAAAIThYAOJqwAAXAE+AT0cwABPzYHAAE/IwAwehlYBAAEcwABP0S6bqgEAARbA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r/wAAIFUYAOcggEcwACwBhbAAK/+LpuRm/mcQksBAAGAwACwB8AMagYAwAD/BU7AALAZwACwLgAAm/5gA5x4ATXAALA0AAABAGADnHgBH8AAsDScgQAAAAA1AAAAAQBbARzAALBTgsAAsFHADGphm5gBAAEWwACwZYHAALBgwAxqGpvdnIYAnH2CAMAMamFOwACwgMAAsJQAAJv/YAOceAE1wACwmgAAAQBgA5x4AR/AALCanIEAAAAANQAAAAEAWwEcwACwuYPAALC3wAxqwpuYAQABFsAAsMuBwACwxsAMahqb3ZyGAJx9gwDADGrCScAAsOMhHMAAsPgWwACw7oDAALDnwAxqBoThgyxIAQABKwCJtj4DTsAAsRTAALEiAACcAGADnIIBHMAAsSwWwACxJC6bkZv5nEJLAQABFsAAsT4WwACxNIDAALEtwAxqBoThgyyE74mwAMAA/wU9HMAAsXCCwACxUMAMak+bmwEAARbAALGOhMAAsYDADGs4nAGciwCcfj0cwACxwYPAALGtwAxqsJubAQABFsAAsd+EwACx0cAMazicApyMAJx+P0nAALICIRzAALIZFsAAsg2AwACyBsAMagaE4oMtSAEAASsAibY+Ak7AALI1wACyRQAAnANgA5yCARzAALJPFsAAskcum5Gb+ZxCSwEAARbAALJjFsAAsleAwACyUMAMagaE4oMthO+JsADAAP8FPRzAALKUg8AAsnXADGqwm5sBAAEWwACytITAALKkwAxr+ZwCnIwAnH4/RsAAstfAALMMwACy5gAAAIThYAOJqwAWwACy+oDAALLzwAxqBoTjgy4+Ak7AALMfwACzLQAAnABgA5yCARzAALM3FsAAsy8um5Gb+ZxCSwEAARbAALNChMAAszjADGxyhO+JsADAAP8FPRzAALNog8AAs1TADGqwm5sBAAEWwACzhoXAALN4wAxslZwCnIwAnH49F8AAs66BwACzqcAMahqcARzAALPcgsAAs8fADGpPm54AAAAAnH+ciz0XwACz+oHAALP1wAxqGpwCHMAAtCaDwAC0EsAMarCbngAAAACcf5yMBpxvNsAAtTvAALVFwAC28AAAnAQAAAABA8AAtVjAALbwAAAAAAAAAF0DwAD+vwFgA8AA/hsBPgNOwAC1ZcAAtWwAAIF2XQPAAP6/AWADwAD+GwExwAC1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xQPADIWyZAEAARzAAMUfHMAAxReAwADFC8AMhZdLAQABHMAAxRqCwADFGMAMhcxkAQABlADAAP9BAMAA/s6BjQEAARzAAMUtgMAAxSHADIWXSwEAAYLAAMUuwAyFzADAAP7OAMAA/0IAwAD/QUrAAMU4AYHAAMU/wAyFsgE2AAyGvAAL9tIAC/dYAAwI2QAMCaEADApNAAwTfQAMc4AADHnNAAx+vAAMgOwADILDAAAACgAMgsYADIVuAAyGvAAAAAIAAgacrJwaNwAAAoD1AACCLgAAgQgAAKbQAAAAAAABApytN4FugXSrbwOH8gAAAWABwAD/aAAANQScrzeBqYNGBZwbAF0DwAD+8QJgA8ABAAJdA8AA/r8BYAPAAQACATKBu2ADwAEAAl0DwAD+vwFgA8ABAAIDJ5wcMYHOYAPAAQACECecHSecHiecHyecICecISecIiecIyecJCecJSecJiecJyecKCeE0yecKSecKiecKyecLDGC8GADwAEAAgEnnCgnnC0xgxtgA8ABAAICJwMnnC4EnLA3g16DYwknAGADptEABJyyN4Nwg3wYnC+crABgA4KMASsEnLM3g4aDkhicMJysAGADgxwBKwSctDeDnIOmGJwxnKwAYAODHAErBJy1N4Owg7oYnDKcrABgA4McASsEnLY3g8SDzRicM5ysAGADgxwBKwSctzeD14PgGJw0nKwAYAODHAErBJy4N4Pqg/YYnDWcrABgA4McASsEnLk3hACEDBicNpysAGADgxwBKwScujeEFoQgGJw3nKwAYAODHAErBJy7N4QqhDMYnDicrABgA4McASsEnLw3hD2ERhicOZysAGADgxwBKwScvTeEUIReGJw6nKwAYAODHAErBJy+N4RohHYYnDucrABgA4McASsEnL83hICEjBicPJysAGADgxwBKwScwDeEloSgGJw9nKwAYAODHAErBJzBN4SqhLgYnD6crABgA4McASsEnMI3hMKE0hicP5ysAGADgxwBKwScwzeE3ITyGJxAnKwAYAODHAErBJzEN4UChSYYnEGcrABgA4PiASsEnMU3hTaFWhicQpysAGADg+IBKwScxjeFaIV8GJxDnKwAYAOEJQErBJzHN4WKhaYYnEScrABgA4QlASsEnMg3hbSFxxicRZysAGADhCUBKwScyTeF14X9GJxGnKwAYAOD4gErBJzKN4YLhhgYnEecrABgA4QlASsEnMs3hiaGNhicSJysAGADhCUBKwSczDeGQYZVGJxJnKwAYAODHAErBJzNN4Zihm8YnEqcrABgA4KMASsEnM43hnmGhRicS5ysAGADgxwBKwSczzeGj4afGJxMnKwAYAODHAErBJzQN4aphrUYnE2crABgA4McASsEnNE3hr+G2BicTpysAGADgxwBKwSc0jeG4obwGJxPnKwAYAODHAErBJzTN4cAhx8YnFCcrABgA4PiASsEnNQ3hy2HTBicUZysAGADhCUBKwSc1TeHWodxGJxSnKwAYAOEJQErBJzWN4eBh6AYnFOcrABgA4PiASsEnNc3h7CH0RicVJysAGADg+IBKwSc2DeH4YgNGJxVnKwAYAOD4gErBJzZN4gbiDoYnFacrABgA4QlASsEnNo3iEiIaRicV5ysAGADhCUBKwSc2zeId4iWGJxYnKwAYAOEJQErBJzcN4ikiMQYnFmcrABgA4QlASsEnN03iNKI8xicWpysAGADhCUBKwSc3jeJAYkWGJxbnKwAYAOEJQErBJzfN4kkiTgYnFycrABgA4QlASsEnOA3iZOJohicXZysAGADgowBKwSc4TeJrYm5GJxenKwAYAODHAErBJziN4nDic4YnF+crABgA4OvASsEnOM3idiJ5hicYJysAGADg68BKwSc5DeJ9ooIGJxhnKwAYAOD4gErAQWdKTeKDYoNimUAAAADihaKZQAAAAEBAYohAAAAgllgA4qUAABgA5ytAT8CCACcsB+KQKbnAQABgIpbwAyL/AAJAYoNwAD/fgAAAABCBpzmN4pqiniLGQEAnGIAAAABA4qZixkAAAAAAAAAYAOEJQE+AUqKnwEmip8BNQAAAAEAYAOEJQEWiqYunFqcrJzdIxyKyIAAwAyMX0gBAAErAMAA/3UXiqYunFqcrCaKpgEcitoWitQuJ5ywnGMCAAInnC0nnGQApuJgA4QlnN2AAMAMjF8BYAODkGADhCUGnOc3ix6LKot4AQCcZQAAAAEDizeLeAAAAAAAAABgA4KMAT4BSos9ATUAAAABAGADgowBFotELpxKnKyczSMci1KAAMAMjOpIAQABKwDAAP91F4tELpxKnKwci1wWi1YuJ5ywnGYBAAEnnC0AptuczYAAwAyM6gFgA4KMBpzoN4t9i4iL+AEA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wAD/dReeWC6cSJysJp5YARyeexaedS4nnLCcaAMAAyecHCecJSeclQCm4GADhCWcy4AAwAyeuAFgA4OQYAOEJQadDTeesZ69nxQBAJyYAAAAAQOezJ8UAAAAAAAAAGADgowBPgFKntIBNQAAAAEAYAOCjAEWntkunF2crJzgIxye6YAAwAyfRkgBAAErAMAA/3UXntkunF2crBye8xae7S4nnLCcmQEAASecmgCm3JzggADADJ9GAWADgowGnQ43nxmfKaAjAQCcmwAAAAEDn02gIwAAAAAAAABgA4PiAT4BSp9TASafUwE1AAAAAQBgA4PiARafWi6cQpysnMUjHJ9/gADADJ/GSAEAASsAwAD/dRefWi6cQpysJp9aARyf4haf3C4nnLCcaAMAAyecHCecnCecnQCm4GADg+KcxYAAwAyfxgFgA4OQYAOD4gadDzegKKAyoH8BAJsvAAAAAQOgPKB/AAAAAAAAAGADgxwBPgFKoEIBNQAAAAEAYAODHAEWoEkunDGcrJy0IxygVIAAwAygVEgBAAErAMAA/3UXoEkunDGcrBygXhagWC4nnLCcbwIAAiecHCecHgCm3py0gADADKBUAWADgxwGnRA3oISgjqDYAQCbMwAAAAEDoJeg2AAAAAAAAABgA4McAT4BSqCdATUAAAABAGADgxwBFqCkLpw0nKyctyMcoK6AAMAMoNNIAQABKwDAAP91F6CkLpw0nKwcoLgWoLIuJ5ywnG8CAAInnBwnnCEApt6ct4AAwAyg0wFgA4McBp0RN6DdoOehOgEAmy4AAAABA6DzoToAAAAAAAAAYAODHAE+AUqg+QE1AAAAAQBgA4McARahAC6cMJysnLMjHKENgADADKFSSAEAASsAwAD/dRehAC6cMJysHKEXFqERLiecsJxvAgACJ5wcJ5wdAKbenLOAAMAMoVIBYAODHAadEjehP6FNoakBAJyeAAAAAQOhWqGpAAAAAAAAAGADhCUBPgFKoWABJqFgATUAAAABAGADhCUBFqFnLpxHnKycyiMcoXWAAMAModVIAQABKwDAAP91F6FnLpxHnKwmoWcBHKF/FqF5LiecsJxoAwADJ5wcJ5wdJ0gApuBgA4QlnMqAAMAModUBYAODkGADhCUGnRM3oa6huKILAQCcnwAAAAEDocSiCwAAAAAAAABgA4McAT4BSqHKATUAAAABAGADgxwBFqHRLpxenKyc4SMcod6AAMAMomJIAQABKwDAAP91F6HRLpxenKwcoegWoeIuJ5ywnG8CAAInnBwnnKAApt6c4YAAwAyiYgFgA4McBp0UN6IQohqidAEAnKEAAAABA6IlonQAAAAAAAAAYAODrwE+AUqiKwEmoisBNQAAAAEAYAODrwEWojIunF+crJziIxyiPoAAwAyi5UgBAAErAMAA/3UXojIunF+crCaiMgEcokgWokIuJ5ywnGgDAAMnnBwnnKAngL0ApuBgA4OvnOKAAMAMouUBYAODkGADg68GnRU3onmig6LmAQCcogAAAAEDopGi5gAAAAAAAABgA4OvAT4BSqKXASailwE1AAAAAQBgA4OvARaini6cYJysnOMjHKKtgADADKN3SAEAASsAwAD/dReini6cYJysJqKeARyitxaisS4nnLCcaAMAAyecHCecoCd6AKbgYAODr5zjgADADKN3AWADg5BgA4OvBp0WN6LrovujYAEAnKMAAAABA6MNo2AAAAAAAAAAYAOD4gE+AUqjEwEmoxMBNQAAAAEAYAOD4gEWoxounGGcrJzkIxyjLYAAwAykCEgBAAErAMAA/3UXoxounGGcrCajGgEcozcWozEuJ5ywnGgDAAMnnBwnnKAngLUApuBgA4PinOSAAMAMpAgBYAODkGADg+IGnRc3o2Wjb6POAQCcpAAAAAEDo3+jzgAAAAAAAABgA4McAT4BSqOFATUAAAABAGADgxwBFqOMLpxMnKyczyMco52AAMAMpJZIAQABKwDAAP91F6OMLpxMnKwco6cWo6EuJ5ywnG8CAAInnBwnnKUApt6cz4AAwAyklgFgA4McBp0YN6PTo92kMAEAm0IAAAABA6PppDAAAAAAAAAAYAODHAE+AUqj7wE1AAAAAQBgA4McARaj9i6cTZysnNAjHKQDgADADKUVSAEAASsAwAD/dRej9i6cTZysHKQNFqQHLiecsJxvAgACJ5wcJ5wuAKbenNCAAMAMpRUBYAODHAadGTekNaRApK0BAJymAAAAAQOkW6StAAAAAAAAAGADg5ABPgFKpGEBHKRuFqRoLiecsJxoAwADJ5wtJ5ynJ5yoAKbgBp0aN6SypL2lHQEAnKkAAAABA6TSpR0AAAAAAAAAYAODkAE+AUqk2AEcpOUWpN8uJ5ywnGgD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mEkAAZ0dAAAAAQOWkJhJAAAAAQEBlpoAAACH2GADkhIAAGADwAD8VQE+AkFHlqiAlrDADNq1BAKWzmqWzmADkhKBo5bnapbnYAOSEocnAD4BSpb+ASkBlx5qlx5gA5ISiRUAPgFKlzgBIRaXYBaXWBqXUIxqeoxiglCMBQKXf2qXf2ADkhKJM5eaapeaYAOSEoajAD4BSpepASoBl8pql8pgA5ISiSQAPgFCl9kASpgKASaYCgEemBGdiwQABCSYJgGAmB3ADNq1J50dHJg+lIHGAAAAAMAA/j4rAGADwAD8VQE8AAzbggAM0CkAAAAAAAzQSQAM1PUADNjzAAzZsAAM2pgADNuCAAAABQACBp1/nR49AAADgPMAAIIuAAEBBIR7hwSCBoRUgUIAAIxdAAEBAYIQgXgBAIx7AACEKYx/ka+RupHFkdGR2JHokf+Qn4x9kKCMgIyBjIKMg4yEjIWMhoyHjIiMiYyKjIuMjIyNjI6Mj4yQjJGMkoyTjJSMlYyWjJeMmIyZjJqMm4ycjJ2MnoyfjKCMoYyijKOMpIyljKaMp4yojKmMqoyrjKyMrYyujK+MsIyxjLKMs4y0jLWMtoy3jLiMuYy6jLuMvIy9jL6Mv4zAjMGMwozDjMSMxYzGjMeMyIzJjMqMy4zMjM2MzozPjNCM0YzSjNOM1IzVjNaM14zYjNmM2ozbjNyM3YzejN+M4IzhjOKM44zkjOWM5oznjOiM6YzqjOuM7IztjO6M74zwjPGM8ozzjPSM9Yz2jPeM+Iz5jPqM+4z8jP2M/oz/jQCNAY0CjQONBI0FjQaNB40IjQmNCo0LjQyNDY0OjQ+NEI0RjRKNE40UjRWNFo0XjRiNGY0ajRuNHI0djR6NH40gjSGNIo0jjSSNJY0mjSeNKI0pjSqNK40sjS2NLo0vjTCNMY0yjTONNI01jTaNN404jTmNOo07jTyNPY0+jT+NQI1BjUKNQ41EjUWNRo1HjUiNSY1KjUuNTI1NjU6NT41QjVGNUo1TjVSNVY1WjVeNWI1ZjVqNW41cjV2NXo1fjWCNYY1ijWONZI1ljWaNZ41ojWmNao1rjWyNbY1ujW+NcI1xjXKNc410jXWNdo13jXiNeY16jXuNfI19jX6Nf42AjYGNgo2DjYSNhY2GjYeNiI2JjYqNi42MjY2Njo2PjZCNkY2SjZONlI2VjZaNl42YjZmNmo2bjZyNnY2ejZ+NoI2hjaKNo42kjaWNpo2njaiNqY2qjauNrI2tja6Nr42wjbGNso2zjbSNtY22jbeNuI25jbqNu428jb2Nvo2/jcCNwY3CjcONxI3FjcaNx43IjcmNyo3LjcyNzY3Ojc+N0I3RjdKN043UjdWN1o3XjdiN2Y3ajduN3I3djd6N343gjeGN4o3jjeSN5Y3mjeeN6I3pjeqN643sje2N7o3vjfCN8Y3yjfON9I31jfaN9434jfmN+o37jfyN/Y3+jf+OAI4BjgKOA44EjgWOBo4HjgiOCY4KjguODI4Njg6OD44QjhGOEo4TjhSOFY4WjheOGI4ZjhqOG44cjh2OHo4fjiCOIY4ijiOOJI4ljiaOJ44ojimOKo4rjiyOLY4uji+OMI4xjjKOM440jjWONo43jjiOOY46jjuOPI49jj6OP45AjkGOQo5DjkSORY5GjkeOSI5JjkqOS45Mjk2OTo5PjlCOUY5SjlOOVI5VjlaOV45YjlmOWo5bjlyOXY5ejl+OYI5hjmKOY45kjmWOZo5njmiOaY5qjmuObI5tjm6Ob45wjnGOco5zjnSOdY52jneOeI55jnqOe458jn2Ofo5/joCOgY6CjoOOhI6FjoaOh46IjomOio6LjoyOjY6Ojo+OkI6RjpKOk46UjpWOlo6XjpiOmY6ajpuOnI6djp6On46gjqGOoo6jjqSOpY6mjqeOqI6pjqqOq46sjq2Oro6vjrCOsY6yjrOOtI61jraOt464jrmOuo67jryOvY6+jr+OwI7BjsKOw47EjsWOxo7HjsiOyY7KjsuOzI7Njs6Oz47QjtGO0o7TjtSO1Y7WjteO2I7ZjtqO247cjt2O3o7fjuCO4Y7ijuOO5I7ljuaO547ojumO6o7rjuyO7Y7uju+O8I7xjvKO8470jvWO9o73jviO+Y76jvuO/I79jv6O/48AjwGPAo8DjwSPBY8GjwePCI8JjwqPC48Mjw2PDo8PjxCPEY8SjxOPFI8VjxaPF48YjxmPGo8bjxyPHY8ejx+PII8hjyKPI48kjyWPJo8njyiPKY8qjyuPLI8tjy6PL48wjzGPMo8zjzSPNY82jzePOI85jzqPO488jz2PPo8/j0CPQY9Cj0OPRI9Fj0aPR49Ij0mPSo9Lj0yPTY9Oj0+PUI9Rj1KPU49Uj1WPVo9Xj1iPWY9aj1uPXI9dj16PX49gj2GPYo9jj2SPZY9mj2ePaI9pj2qPa49sj22Pbo9vj3CPcY9yj3OPdI91j3aPd494j3mPeo97j3yPfY9+j3+PgI+Bj4KPg4+Ej4WPho+Hj4iPiY+Kj4uPjI+Nj46Pj4+Qj5GPko+Tj5SPlY+Wj5ePmI+Zj5qPm4+cj52Pno+fj6CPoY+ij6OPpI+lj6aPp4+oj6mPqo+rj6yPrY+uj6+PsI+xj7KPs4+0j7WPto+3j7iPuY+6j7uPvI+9j76Pv4/Aj8GPwo/Dj8SPxY/Gj8ePyI/Jj8qPy4/Mj82Pzo/Pj9CP0Y/Sj9OP1I/Vj9aP14/Yj9mP2o/bj9yP3Y/ej9+P4I/hj+KP44/kj+WP5o/nj+iP6Y/qj+uP7I/tj+6P74/wj/GP8o/zj/SP9Y/2j/eP+I/5j/qP+4/8j/2P/o//kACQAZACkAOQBJAFkAaQB5AIkAmQCpALkAyQDZAOkA+QEJARkBKQE5AUkBWQFpAXkBiQGZAakBuQHJAdkB6QH5AgkCGQIpAjkCSQJZAmkCeQKJApkCqQK5AskC2QLpAvkDCQMZAykDOQNJA1kDaQN5A4kDmQOpA7kDyQPZA+kD+QQJBBkEKQQ5BEkEWQRpBHkEiQSZBKkEuQTJBNkE6QT5BQkFGQUpBTkFSQVZBWkFeQWJBZkFqQW5BckF2QXpBfkGCQYZBikGOQZJBlkGaQZ5BokGmQapBrkGyQbZBukG+QcJBxkHKQc5B0kHWQdpB3kHiQeZB6kHuQfJB9kH6Qf5CAkIGQgpCDkISQhZCGkIeQiJCJkIqQi5CMkI2QjpCPkJCQkZCSkJOQlJCVkJaQl5CYkJmQmpCbkJyQnQAAAAAABQadgT2BlIGdgdEBAYglAAAAAQOBp4HRAAAAAAAAAGADwAD8VQFKgaoBFoHKFoHCGoG6jGp6jGKAgYv6Bp2DPYHUgd2CVQABhwEAAAABA4HoglUAAAACAgKB7QAAAICsYAPAAQCDAIH2AAAAh3FgA8AA/hsAAGADiq0BPgFKggYBNQAAAAEAYAOK7AEcgjAWgiUagh2Maob2jGNLAQABgIIxwAzkjwDAAP8FIxyCN4IAwAzkuEgBAAErAAArHII3ggDADOS4hwECAAKAgkPADOSPgYJIwAzknQCK9QFgA4qtBp2EPYJYgmGC2wABnR8AAAABA4Jz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nfQAYAOfagFqwAB3L2ADn2rAALGHBJ9vQ8AAd7TAAHgtBp32AGADn2oBasAAd8dgA59qwACxtgSfcEPAAHhJwAB4pgad+ABgA59qAWrAAHhVYAOfasAAseUEn3FDwAB4wsAAeUUGnfkAYAOfagFqwAB43WADn2rAALIRBJ9yQ8AAeWHAAHm4Bp36AGADn2oBasAAeXpgA59qwACyQASfc0PAAHnUwAB6WQadYgBgA59qAWrAAHnwYAOfasAAntcEn3RDwAB6dcAAet4GnfsAYAOfagFqwAB6hGADn2rAALJyBJ91Q8AAevrAAHuOBp38AGADn2oBasAAewxgA59qwACyngSfdkPAAHuqwAB8PQad/QBgA59qAWrAAHvGYAOfasAAstAEn3dDwAB8nsAAfU0Gnf4AYAOfagFqwAB8vWADn2rAALMHBJ94Q8AAfWnAAH3nBp4AAGADn2oBasAAfX5gA59qwACzPQSfeUPAAH4DwAB+QQaeAgBgA59qAWrAAH4UYAOfasAAs28En3pDwAB+XcAAfr4GngMAYAOfagFqwAB+amADn2rAALOfBJ97Q8AAftrAAH9HBp4EAGADn2oBasAAfupgA59qwACz1QSffEPAAH9jwAB/wgaeBQBgA59qAWrAAH92YAOfasAAtA4En31DwAB/3sAAgF8GngcAYAOfagFqwAB/6mADn2rAALRABJ9+Q8AAgHvAAIDqBp4IAGADn2oBasAAgItgA59qwAC0dASff0PAAIFLwACBxAaeCQBgA59qAWrAAIFeYAOfasAAtKsEn4BDwACB4MAAgkwGngsAYAOfagFqwACB72ADn2rAALThBJ+BQ8AAgmjAAIKvBp4NAGADn2oBasAAgnxgA59qwAC1EwSfgkPAAILLwACDEgaeDgBgA59qAWrAAILfYAOfasAAtUAEn4NDwACDLsAAg7YGng8AYAOfagFqwACDPGADn2rAALVrBJ+EQ8AAg9LAAIREBp4QAGADn2oBasAAg+NgA59qwAC1ogSfhUPAAIRgwACE0gaeEgBgA59qAWrAAIR8YAOfasAAtdQEn4ZDwACE7sAAhUcGnhMAYAOfagFqwACFCGADn2rAALYGBJ+HQ8AAhWPAAIXYBp4UAGADn2oBasAAhYBgA59qwAC2NgSfiEPAAIX0wACGUwaeFQBgA59qAWrAAIX/YAOfasAAtmYEn4lDwACGb8AAhvUGnhYAYAOfagFqwACGfWADn2rAALaZBJ+KQ8AAh9fAAIgvBp4XAGADn2oBasAAh+5gA59qwAC20gSfi0PAAIhLwACInAadmABgA59qAWrAAIhiYAOfasAAtwgEn4xDwACIuMAAiTYGnhkAYAOfagFqwACIw2ADn2rAALc3BJ+NQ8AAiVLAAInaBp4aAGADn2oBasAAiWBgA59qwAC3aQSfjkPAAIn2wACKeQaeGwBgA59qAWrAAIoEYAOfasAAt50En49DwACKlcAAiwgGnhwAYAOfagFqwACKpmADn2rAALfWBJ+QQ8AAiyTAAIuxBp4eAGADn2oBasAAizVgA59qwAC4DASfkUPAAIvNwACMSgaeHwBgA59qAWrAAIvhYAOfasAAuEUEn5JDwACMZsAAjKoGniEAYAOfagFqwACMeWADn2rAALh3BJ+TQ8AAjMbAAI1MBp4iAGADn2oBasAAjNRgA59qwAC4rASflEPAAI1owACN8gaeIwBgA59qAWrAAI15YAOfasAAuOUEn5VDwACODsAAjowGnXIAYAOfagFqwACOGWADn2rAAJ8GBJ+WQ8AAjqjAAI8wBp4kAGADn2oBasAAjrZgA59qwAC5GASfl0PAAI9MwACPzwaeJQBgA59qAWrAAI9aYAOfasAAuUwEn5hDwACP68AAkF4GniYAYAOfagFqwACP/GADn2rAALmBBJ+ZQ8AAkHrAAJD/Bp4oAGADn2oBasAAkIhgA59qwAC5sASfmkPAAJEbwACRjQaeKQBgA59qAWrAAJEsYAOfasAAuecEn5tDwACRqcAAkiEGnisAYAOfagFqwACRvWADn2rAALodBJ+cQ8AAkj3AAJKsBp1zAGADn2oBasAAklhgA59qwACfNwSfnUPAAJLIwACTJAaddABgA59qAWrAAJLhYAOfasAAn2kEn55DwACTQMAAk7cGnXUAYAOfagFqwACTXGADn2rAAJ+eBJ+fQ8AAk9PAAJRkBp4tAGADn2oBasAAk+NgA59qwAC6TQSfoEPAAJSAwACU+AaeLgBgA59qAWrAAJSTYAOfasAAuoYEn6FDwACVFMAAlWQGnjAAYAOfagFqwACVKWADn2rAALq4BJ+iQ8AAlYDAAJX+Bp4xAGADn2oBasAAlZZgA59qwAC67wSfo0PAAJYawACWnAaeMgBgA59qAWrAAJYnYAOfasAAux4En6RDwACWuMAAlycGnjMAYAOfagFqwACWyGADn2rAALtVBJ+lQ8AAl0PAAJe1Bp41AGADn2oBasAAl1VgA59qwAC7iwSfpkPAAJfRwACYQwaeNwBgA59qAWrAAJfiYAOfasAAu7sEn6dDwACYX8AAmOQGnjgAYAOfagFqwACYd2ADn2rAALvrBJ+oQ8AAmQDAAJmKBp46AGADn2oBasAAmRpgA59qwAC8IQSfqUPAAJmmwACaPAaeOwBgA59qAWrAAJnDYAOfasAAvFgEn6pDwACaWMAAmqsGnj0AYAOfagFqwACacGADn2rAALyKBJ+rQ8AAmsfAAJtSBp4+AGADn2oBasAAmtVgA59qwAC8twSfrEPAAJtuwACb4AaePwBgA59qAWrAAJt/YAOfasAAvPAEn61DwACb/MAAnIQGnkEAYAOfagFqwACcCWADn2rAAL0fBJ+uQ8AAnKDAAJ0PBp5CAGADn2oBasAAnLBgA59qwAC9WASfr0PAAJ0rwACdygadeABgA59qAWrAAJ1TYAOfasAAoAwEn7BDwACd5sAAno8GnkQAYAOfagFqwACeDmADn2rAAL2OBJ+xQ8AAnqvAAJ8uBp5GAGADn2oBasAAnrlgA59qwAC9wASfskPAAJ9KwACf6AaeRwBgA59qAWrAAJ9eYAOfasAAvfYEn7NDwACgBMAAoIkGnkgAYAOfagFqwACgG2ADn2rAAL4vBJ+0Q8AAoKXAAKD1Bp5KAGADn2oBasAAoLxgA59qwAC+YQSftUPAAKERwAChZQaeTABgA59qAWrAAKEpYAOfasAAvpAEn7ZDwAChgcAAofgGnk0AYAOfagFqwAChnmADn2rAAL7ABJ+3Q8AAohTAAKK5Bp5OAGADn2oBasAAojpgA59qwAC+9gSfuEPAAKLVwACjkQaddwBgA59qAWrAAKMBYAOfasAAn9cEn7lDwACjrcAAo7wGnXwAYAOfagFqwACjumADnmXAAKB0BJ+6Q8AAo9jAAKPnBp2hAGADn2oBasAAo+VgA55lwACn5QSfu0PAAKQ1wACksAaeUABgA59qAWrAAKRHYAOfasAAvygEn7xDwAClR8AApbgGnlIAYAOfagFqwAClWGADn2rAAL9VBJ+9Q8AApkTAAK87Bp5UAF0DwAD+vwFgA59qAWrAAKZKXQPAAP6/AWADn2rAAL9+BJ++Q8AAr0rAAK9OCYJrAGADwAD+GwAEn79DwACvw8AAr80JncYAYAPAAPxVAASfwEPAALAgwACwKgmd2ABgA8AA/FUABJ/BQ8AAsMjAALDZCZ3HAGADwAD8VQAEn8JDwACxTsAAsWUJgiwAYAPAAPxVAASfw0PAALIFwACyCwmCYgBgA8ABAAIABJ/EQ8AAskrAALJOCYC9AGADwAEAAgAEn8VDwACyzcAAstcJmkoAYAPAAP4bAASfxkPAALMmwACzMQmd2QBgA8ABAAIAAQWf2kPAALM2wACzPMAAtH8BAAADwACzRcAAtH8AAAAJBATAALNLAAAEgmJgA8ABAAIAwACzWAAABIC9YAPAAQACAMAAs2MAAASaSmADwAD+GwDAALN0AAAEgmtgA8AA/hsABcAAs4YAAASdxmADwAD8VQFqwACzkmADwAD8VQDAALOkAAAEndhgA8AA/FUBasAAs7BgA8AA/FUAwACzwgAABJ3HYAPAAPxVAWrAALPVYAPAAPxVAMAAs+cAAASCLGADwAD8VQFqwAC0AGADwAD8VQDAALQUAAAAndlgA8ABAAIBasAAtCFgA8ABAALAAMCcYAOfagE/CggBn8OAAMANZMMIAZ/EgQDADWTTCAGfxYIAwA1k4wgBn76DAMANZPMIAZ+/hADADWUECAGfwIUAwA1lIAgBn8GGAMANZTwIAZ/ChwDADWVYCACfxiMcwAC0WBTAALRMwA1ldAgASAEAASeeVQDAAQARgMAAtGvADWTDFMAAtHTADWV0CAABYAPAAQACCQHAALM8wAD/fgAAAAAQBp/IQ8AAtNrAALTjwAC1GgEAnlYAAAABA8AAtPbAALUaAAAAAAAAAGADwAD8VQFKwAC0+QEcwAC1BBbAALT5LppKn8VIAQABasAAtQdgA8AA/huEFwDAAP8/Bp/JQ8AAtXfAALWAwAC1uwEAnlcAAAABA8AAtZXAALW7AAAAAAAAAGADwAD8VQFKwAC1mAEcwAC1oxbAALWYLppKn8VIAQABasAAtaZgA8AA/hsVAMAA/z8Gn8pDwAC4K8AAuDTAALlAAQCeWAAAAAEDwAC4SsAAuUAAAAAAAAAAYAPAAPxVAUrAALhTASIiIiIiIhzAALhYLkgBAAFqwAC4ZWADn2rAALKeAMAA/3UBHMAAuH0uSAEAAWrAALiKYAOfasAAstAAwAD/dQEcwAC4rC5IAQABasAAuLlgA59qwAC0QADAAP91ARzAALjLLkgBAAFqwAC42GADn2rAALR0AMAA/3UBHMAAuO4uSAEAAWrAALj7YAOfasAAtWsAwAD/dQEcwAC5Dy5IAQABasAAuRxgA59qwAC7HgDAAP91ARzAALkvLkgBAAFqwAC5PGADn2rAAL0fAMAA/3UGn8tDwAC5mMAAuaHAALmzAQCdxAAAAAEDwAC5q8AAubMAAAAAAAAAYAPAAPxVAUrAALmuASoGn8xDwAC6DsAAuhfAALpnAQCeWQAAAAEDwAC6KsAAumcAAAAAAAAAYAPAAPxVAUrAALozASIcwAC6OC5IAQABasAAukVgA59qwACz1QDAAP91ARzAALpVLkgBAAFqwAC6YmADn2rAALaZAMAA/3UGn81DwAC6w8AAuszAALslAQCeWgAAAAEDwAC64MAAuyUAAAAAAAAAYAPAAPxVAUrAALrpASIcwAC67i5IAQABasAAuvtgA59qwAC7iwDAAP91ARzAALsNLkgBAAFqwAC7GmADn2rAALodAMAA/3UGn85DwAC7bcAAu3bAALuYAQCdzgAAAAEDwAC7gMAAu5gAAAAAAAAAYAPAAPxVAUrAALuDARzAALuIFsAAu4MugmufvkgBAAFqwAC7i2ADwAD+G8AAnGwAwAD/Pwafz0PAALwKwAC8E8AAvCQBAJ3FAAAAAQPAALwcwAC8JAAAAAAAAABgA8AA/FUBSsAAvB8BKgaf0EPAALyEwAC8jcAAvNABAJ5bAAAAAQPAALymwAC80AAAAAAAAABgA8AA/FUBSsAAvKkBHMAAvLQWwAC8qS6aSp/FSAEAAWrAALy3YAPAAP4bwACOZgDAAP8/Bp/RQ8AAvSzAAL01wAC9xwEAnlwAAAABA8AAvUrAAL3HAAAAAAAAAGADwAD8VQFKwAC9UwEiIiIcwAC9WC5IAQABasAAvWVgA59qwACfBgDAAP91ARzAAL12LkgBAAFqwAC9g2ADn2rAALkYAMAA/3UBHMAAvZcuSAEAAWrAAL2kYAOfasAAtzcAwAD/dQEcwAC9tS5IAQABasAAvcJgA59qwAC3aQDAAP91Bp/SQ8AAvh7AAL4nwAC+WAEAnl0AAAABA8AAvjfAAL5YAAAAAAAAAGADwAD8VQFKwAC+OgEcwAC+RRbAAL46LppKn8VIAQABasAAvkhgA8AA/hvAAJeJAMAA/z8Gn9NDwAC+t8AAvsDAAL76AQCeXgAAAAEDwAC+18AAvvoAAAAAAAAAYAPAAPxVAUrAAL7aARzAAL7lFsAAvtoumkqfxUgBAAFqwAC+6GADwAD+G4NwAMAA/z8Gn9RDwAC/WMAAv2HAAMAMAQCeXwAAAAEDwAC/d8AAwAwAAAAAAAAAYAPAAPxVAUrAAL+AASIiIhzAAL+LFsAAv4AumkqfxUgBAAFqwAC/jmADwAD+G8AAi/YAwAD/PwEcwAC/ri5IAQABasAAv7tgA59qwAC5sADAAP91ARzAAL/PLkgBAAFqwAC/3GADn2rAALuLAMAA/3UBHMAAv/QuSAEAAWrAAMABYAOfasAAuh0AwAD/dQaf1UPAAMCKwADAk8AAwMoBAJ5gAAAAAQPAAMCmwADAygAAAAAAAABgA8AA/FUBSsAAwKkBHMAAwLQWwADAqS6aSp/FSAEAAWrAAMC3YAPAAP4bwACGvADAAP8/Bp/YQ8AAwM/AAMDiwADA9AAAIwFqwADA0GADwAD/aAIAAAEDwADA6sAAwPQAAAAAAAAAYAPAAQACAUrAAMDwARbAAMDwLoC9n8QGn9ZDwADBLsAAwUfAAMFWAQCAlgFqwADBL2ADwAD8CIZqAAABA8AAwU3AAMFWAAAAAAAAAGADwAEAAgFKwADBUAEWwADBUC6CYp/DAAANZjUADWaPAA1m6AANZ+0ADWgjAA1okgANaQEADWldAA1pkwANae8ADWqaAA1q9gANa1AADWwGAA1sYgANbKwADWz4AAAAEAASBJ47Q4ICghMGnmEAYAPAAP4bAWqCEmADwAD+GwkEnjxDgh+COAaeYgBgA8AA/hsBaoI3YAPAAP4bFQSePUOCRIJaBp5jAGADwAD+GwFqgllgA8AA/hshBJ4+Q4JmgoAGnmQAYAPAAP4bAWqCf2ADwAD+G1MEnj9DgoyCogaeZQBgA8AA/hsBaoKhYAPAAP4bgVcEnkBDgq6CxwaeZgBgA8AA/hsBaoLGYAPAAP4bgj8EnkFDgtOC7QaeZwBgA8AA/hsBaoLsYAPAAP4bguEEnkJDgvmDEAaeaABgA8AA/hsBaoMPYAPAAP4bwACSBwSeQ0ODHIM1Bp5pAGADwAD+GwFqgzRgA8AA/huDXQSeREODQYNaBp5qAGADwAD+GwFqg1lgA8AA/huEEQSeRUODZoOBBp5rAGADwAD+GwFqg39gA8AA/huEFASeRkODjYOoBp5sAGADwAD+GwFqg6ZgA8AA/hvAAJhbBJ5HQ4O0g8kGnm0AYAPAAP4bAWqDx2ADwAD+G8AAl4kEnkhDg9WD7QaebgBgA8AA/hsBaoPrYAPAAP4bhBcEnklDg/mEFwaebwBgA8AA/hsBaoQVYAPAAP4bwACOZgSeSkOEI4Q5Bp5wAGADwAD+GwFqhDdgA8AA/hvAAIv2BJ5LQ4RFhFwGnnEAYAPAAP4bAWqEWmADwAD+G4NwBJ5MQ4RohIAGnnIAYAPAAP4bAWqEfmADwAD+G8AAhrwAAUMADW9oAA0j8QANJkEADSgVAA0o9gANM/0ADTYiAA1BPQANQ4YADUVDAA1GeAANSKAADUo9AA1VYAANWMAADW1BAAAADgANb2gAAAAAAAIGn9sARQAABoDaAADAAMcCAAEBAYJkgPwAAIIuAAEBH4bAho+E14a5hteGhIbGhouFDoaVhoiG3obDhpGEe4bYhtKGvYbjhT6G24bKhs2G6oRUhqKG7oazhqmG8YaNg9kAAJjsAAEBApq1mrOEJgAAp+IAAQEBnnOEaQAAjHsAAQEDiASR5pHqhMwAAJ2HAAEBAZ0nAAAAAgKf3kWGJIYqqecDnnQAAAFgAcAA/2gAAl0BmbUBXF0Bmc8BXAMEn+BFhoSGmxiEvgBdA8AA/r8BYAOgBAExhplgA6AEAASf4UWGvoblGJ51AF0DwAD+8QJgA8ABAAJdA8AA/r8BYAOgBAEyhuNgA8ABAAJdA8AA/r8BYAOgBAAEn+JFhveG/RiBdgBdA8AA/r8BYAPAAP9oASsBBaADAAAAAAQAAAMAAAAAAAAAAABgA5/eAT8BCQEAwAD/fgAAAAAdBp/kRYf+iAuI3gAAkoUAAAABA4gUiN4AAAABAQGIHgAAAIKUYAOI/AAAXQPAAP6/AWADwAD/aAE+BEmIeRyIgoCIfcANcS9IAQABKwCJAEqIiwExiJJgA8AA/2gBJ552Pz0XiKUugXYxiK5gA8AA/2gAn+I9HIi7gIi2wA1xL4RSAQABLgCI/kqIzQEWiNQugXaf4gaf5UWJ44nwitcAAJLdAAAAAQOJ/YrXAAAAAQEBigcAAACGHWADiboAAF0DwAD+vwFgA8AA/2gBPgRJimYcinOAimrADXHDSAEAASsAib9KinwBMYqDYAPAAP9oASeedz89F4qaLoF2MYqjYAPAAP9oAJ/iPRyKtICKq8ANccOEUgEAAS4Aib1KisYBForNLoF2n+IGoAFFi3WLgIw5AQCSigAAAAEDi4+MOQAAAAAAAABgA8ABAAIBPgNOi6KLqwAAnnhgA8ABAEwBH4uxwAEAawAAAABGi8WL5YvWAAAAgL1gA6AEABaL3i6Evp/gPgE9HIv2gIvtwA1yYoKOAQABFowBgYv8wA1ygZ55oA4AwAEAYEqMGwEcjCuAjCLADXJiIwAAAADAAQBlBp/mRYyMjJiNlgABnnoAAAABA4ygjZYAAAABAQGMqgAAAIKUYAOI/AAAYAPAAPxVAT4CSYy2IiWMv4CMusANcu5gA4k3AByM5xaM4haM2BSM08ANcu4AAWADiTeE74k9gL2DIkgBAAEnnB0AwAEAET4CTo0AjQoAAIR8YAPAAQCDARaNLBaNGxaNERSNDMANcu4AAWADiTeE74k9hLKDRoR8go5KjT0BIhyNVRaNToGNRMANc0SBvMABAIlIAQABJ4eNAMABABEAHI1xFo1sgY1iwA1zRE7AAQCOSAEAASeHjgDAAQARP0qNhgEqBp/nRY2bjaeQ6QAAnnsAAAABA420kOkAAAAEBASNxQAAAIPzYAOCUwCN0gAAAJ58YAPAAQACAI3gAAAAhHxgA8ABAIMAje8AAACEZmADwAEAgwAAYAOgBAE+Ak6OEI4eAACefV0DwAD+vwFgA6AEARyOJxaOIC6edZ/hSwEAAYGOKMANc+cAwAD/BUmONxyOSYSOO8ANdBpIAQABKwDAAP7pPgROjpeOnAAAgL1gA6AEAR+OrKAQBQAFgI64wA1z24GOvsANc+eCjsjADXP1g47TwA10Ay4APRyO7xaO6S6Evp/gVgEAAYWO88ANdGMAwAD+0D0cjwcWjwAunnWf4YC/AgACgY8IwA1z5zGPFGADoAQBhY8VwA10YwDAAP8GSo8iAYWPKcANdGM+BUaPQo9zj1MAAACefmADoAQAhI9kwA10Gj4BSY99HI+UFo+PhY+BwA108IPzoAZIAQABgI+XwA1z2wDAAP91PgFKj9QBhY/bwA108D9OkEyQUQAAgL1gA6AEAR+QYaAQBQAFgJBtwA1z24GQc8ANc+eCkH3ADXP1g5CIwA10Ay4APRyQpBaQni6Evp/gVgEAAYWQqMANdTgAwAD+0D0ckMOEkLXADXQaVgEAAYWQx8ANdTgAwAD+0EqQ1AGFkNvADXU4Bp/oRZDukPOREwAAmDUAAAABA5ECkRMAAAABAQGRDAAAAIKUYAOI/AAAXAE+AAaf6UWRF5EckUAAAIakAAAAAQORLJFAAAAAAQEBkTkAAACD82ADiWMAAFwBPgAGn+pFkUWRSpHiAACGiQAAAAEDkVqR4gAAAAEBAZFnAAAAg/NgA4kHAABcAT4BPRyRyxaRxC6Bdp/iVgEAASeafwDAAP7QBp/rRZHnkeySgAAAhpAAAAABA5H7koAAAAABAQGSBwAAAIPzYAOJKwAAXAE+AT0ckmoWkmMugXaf4lYBAAEnnn8AwAD+0Aaf7EWShZKKkswAAIaMAAAAAQOSmpLMAAAAAQEBkqcAAACD82ADiRMAAFwBPgE9HJK6FpKzLoF2n+JWAQABJ5qAAMAA/tAGn+1FktGS1pMPAACGjgAAAAEDkuOTDwAAAAEBAZLtAAAAg/NgA4kfAABcAT4BPRyTABaS+S6Bdp/iVgEAASeagQDAAP7QBp/uRZMUkxmVcAAAhqwAAAABA5MvlXAAAAABAQGTQgAAAIPzYAOJhAAAXAE+BE6TV5NeAACEV2ADglMBFpNlgJNgwA13PoDtiYdDk3QiISWTgoGTe8ANd1BgA4KMACEck5iBk5HADXdQSAEAASsAwAD/dT4BPYmTqcANd1AWk7mBk7LADXdQhFeCWU6UZ5R4AACEsmADgowBJpRnAYGUesANd1BgA4KMPRyUjhaUhy6Bdp/iVgEAARyUki6eewQABBaUroCUqcANdz6A7YmHFpTQFpTGgJTBwA13PoDtiYeAvYmaIxyU74KU3sANd61IAQABKwDAAP91GpT5n90WlReClQbADXethHyCjgFgA8ABAIMjHJU7gpUqwA13rUgBAAErAMAA/3UalUWf3RaVY4KVUsANd62EZoKPAWADwAEAgwCf5wDAAP7QBp/vRZV1lXqcHgAAhpoAAAABA5WLnB4AAAABAQGVmQAAAIPzYAOJSQAAXAE+CT0clbUWlaqAlaXADXiIhVWJUYRSAQABLgCI/j0clc4WlccugXaf4lYBAAEnnoAAwAD+0EmV5BaV/BaV7YCV6MANeIiExYlLg7fAAP6iPgQ9HJYXFpYQLoF2n+JWAQABJ2MAwAD+0E6WLJYyAACDHmADwAD8VQEpRpZAlnGWUwAAAJlyYAOJlgAWlmGAllzADXiIhMWJSz4DSZZ7IYGWgMANeQA9HJaOFpaHLoF2n+JWAQABJ4GLAMAA/tA/PRyWqBaWoS6Bdp/iVgEAARaWsoKWrMANeRWAvYmaAMAA/tBJlsEiHpbFn+YBAAEWltSCls7ADXkVhYeJmwAAJZbwFpbkgpbewA15FYa0iZxgA4kTPgA+Aj0cl28Wl2gugXaf4lYBAAEnnoEAwAD+0D0cl5cWl5GCl4vADXkVhYeJm4RSAQABLgCI/j0cl8QWl70ugXaf4lYBAAEngJcAwAD+0D89HJffFpfYLoF2n+JWAQABJ4PcAMAA/tBOl/KX+AAAgx5gA8AA/FUBKUWYBAGYDZgPAABiYAPAAP4bAZMBHJgWgpgUwA16JmMBAAEWmB2AmBjADXiIhTqJTADAAP9JAYqYNcANeiYcmDaCmDXADXomZAEAAZQAwAD/QT4DSZhCIYGYR8ANehI9HJhVFphOLoF2n+JWAQABJ4GLAMAA/tA/PRyYgxyYfxaYa4CYZsANeIiEx4lNSwEAAYKYgMANeiYAwAD+zoRSAQABLgCI/j2JmJfADXoSKkmYsByY1RaYzhaYuYCYtMANeIiEx4lNYcAA/u+AlwEAARaY3ICY18ANeIiFOolMAMAA/0s+BUmY/ByZHBaZBYCZAMANeIiFOolMgJcBAAGTAMAA/0s9HJkoFpkhLoF2n+JWAQABJ4GLAMAA/tA/PRyZQBaZOS6Bdp/iVgEAASeZ8gDAAP7QPYmZUMANehIpRZlkAZltmW8AAGJgA8AA/hsBFpl2gJlxwA14iIU6iUwBHJmagpmYwA17Y2MBAAEWmbYWmaGAmZzADXiIhMeJTWHAAP7vAMAA/0kBipnIwA17YxyZyYKZyMANe2NkAQABlADAAP9BPgNJmdchgZncwA16Ej0cmeoWmeMugXaf4lYBAAEngYsAwAD+0D89HJoaHJoWFpoCgJn9wA14iITHiU1LAQABgpoXwA17YwDAAP7OhFIBAAEuAIj+PYmaMMANehIqPRyaVBaaTS6Bdp/iVgEAASeZ8wDAAP7QP0maaBaagRaacYCabMANeIiEyIlOg7fAAP6iPgVJmpUWmrMWmp6AmpnADXiIhMeJTYO3wAD+oj0cmsYWmr8ugXaf4lYBAAEngYsAwAD+0D89HJreFprXLoF2n+JWAQABJ5oSAMAA/tA9iZruwA16EilFmwIBmwubDQAAYmADwAD+GwGTARybFIKbEsANfK9jAQABFpsrFpsbgJsWwA14iITIiU5hwAD+7wDAAP9JAYqbM8ANfK8cmzSCmzPADXyvZAEAAZQAwAD/QT4ESZtCIYGbR8ANehI9HJtVFptOLoF2n+JWAQABJ4GLAMAA/tA/PRybhRabgBybfBabbYCbaMANeIiEyIlOSwEAAYKbfcANfK8AwAD+zoKUiXmEUgEAAS4AiP49HJuiFpubLoF2n+JWAQABJJvIAieA2Rabwhybvhabr4CbqsANeIiEyIlOSwEAAYKbv8ANfK8AwAD+zoC9iXgAwAD+0D2Jm9PADXoSKj0cm/cWm/AugXaf4lYBAAEnhuIAwAD+0D89HJwSFpwLLoF2n+JWAQABJ4MmAMAA/tAGn/BFnCOcKJ4sAACGlAAAAAEDnDqeLAAAAAEBAZxJAAAAg/NgA4k3AABcAT4DTpxbnGUAAITvYAODHAEWnGyAnGfADX36hO+JPT0cnIIWnHsugXaf4lYBAAEcnIYunnsEAASBnJ3ADX4MFpy6gZywwA1+DIC9gyIWnOMWnNKBnMjADX4MhLKDRoR8go4WnREWnQCBnPbADX4MhLKDRoRmgo8An+cAwAD+0EmdIBadNxadKYCdJMANffqFOIk7g7fAAP6iPgQ9HJ1SFp1LLoF2n+JWAQABJ2MAwAD+0E6dZ51tAACDHmADwAD8VQEpRp17naidiQAAAJ6CYAOI/AAWnZmAnZTADX36hTiJOz4DSZ2yIYKdt8ANfrs9HJ3FFp2+LoF2n+JWAQABJ4GLAMAA/tA/PRyd4IOd2MANftCEUgEAAS4AiP49ip32wA1+uyo9HJ4aFp4TLoF2n+JWAQABJ4CXAMAA/tA/Bp/xRZ4xnjaeVgAAmC8AAAABA55FnlYAAAABAQGeTwAAAIPzYAOJugAAXAE+AAaf8kWeW55gnp8AAIa+AAAAAQOecZ6fAAAAAQEBnn8AAACD82ADidAAAFwBPgE9HJ6SFp6LLoF2n+JWAQABgJ6WwA1/kQDAAP7QBp/zRZ6knqme6AAAhsEAAAABA566nugAAAABAQGeyAAAAIPzYAOJ2AAAXAE+AT0cntsWntQugXaf4lYBAAGAnt/ADX/bAMAA/tAGn/RFnu2e8p8vAACGxAAAAAEDnwKfLwAAAAEBAZ8PAAAAg/NgA4ngAABcAT4BPRyfIhafGy6Bdp/iVgEAAYCfJsANgCUAwAD+0Aaf9UWfNJ85n3wAAIbHAAAAAQOfTJ98AAAAAQEBn1wAAACD82ADiegAAFwBPgE9HJ9vFp9oLoF2n+JWAQABgJ9zwA2AbwDAAP7QBp/2RZ+Bn4afyQAAhs8AAAABA5+Zn8kAAAABAQGfqQAAAIPzYAOJ+wAAXAE+AT0cn7wWn7UugXaf4lYBAAGAn8DADYC5AMAA/tAGn/dFn86f06ApAACGywAAAAEDn+agKQAAAAEBAZ/2AAAAg/NgA4nzAABcAT4BPRygCRagAi6Bdp/iVgEAARygEmqgDWADwADJ4okBlaIBAAEWoB6AoBnADYEDgJaJyADAAMnpAMAA/tAGn/hFoC6gM6HdAACG3wAAAAEDoEih3QAAAAEBAaBaAAAAg/NgA4pJAABcAT4FPRygnB+gaolHAgACFqB9gKB4wA2BbITvilEWoI2AoIjADYFshTiKTACEUgEAAS4AiUI9HKC1FqCuLoF2n+JWAQABJ4bhAMAA/tBOoMmgzwAAgx5gA8AA/FUBKUag2wCg5gAAAISbYAODrwAWoP4WoPSAoO/ADYFshO+KUYSLgy9BPgVJoQ4WoRiCoRLADYHchB6DwUKhIgA/SaEyIYGhN8ANgcg9HKFFFqE+LoF2n+JWAQABJ4GLAMAA/tA/PRyhXRahVi6Bdp/iVgEAASShcgIWoWqCoWTADYHcgL2DlCeDWwDAAP7QPRyhnRyhixahgIChe8ANgWyF64pNSwEAARahkoKhjMANgdyEY4JrAMAA/wWEUgEAAS4Aib09iaGxwA2ByCo9HKHRFqHKLoF2n+JWAQABJ4biAMAA/tAGn/lFoeKh56MVAACG2QAAAAEDofijFQAAAAEBAaIGAAAAg/NgA4onAABcAT4GPRyiGRaiEi6Bdp/iVgEAASdjAMAA/tA9HKI5FqIsgKInwA2C14XbiimEUgEAAS4AiP49HKJSFqJLLoF2n+JWAQABJ5qGAMAA/tBOomaibAAAgx5gA8AA/FUBKUaieKKgooYAAACGHWADiboAFqKXgKKSwA2C14PViio+A0miqCGBoq3ADYMzPRyiuxaitC6Bdp/iVgEAASeBiwDAAP7QPz0cotWCoszADYNIhFIBAAEuAIm9PYmi6cANgzMqPRyjCRajAi6Bdp/iVgEAASeZ8wDAAP7QBp/6RaMaox+kSwAAhtwAAAABA6MvpEsAAAABAQGjPAAAAIPzYAOKOAAAXAE+Bj0co08Wo0gugXaf4lYBAAEnYwDAAP7QPRyjbxajYoCjXcANg9qF24o6hFIBAAEuAIj+PRyjiBajgS6Bdp/iVgEAASeahwDAAP7QTqOco6IAAIMeYAPAAPxVASlGo66j1qO8AAAAhh1gA4m6ABajzYCjyMANg9qD1Yo7PgNJo94hgaPjwA2ENj0co/EWo+ougXaf4lYBAAEngYsAwAD+0D89HKQLgqQCwA2ES4RSAQABLgCJvT2JpB/ADYQ2Kj0cpD8WpDgugXaf4lYBAAEnhuIAwAD+0Aaf+0WkUKRVpfEAAIbUAAAAAQOkZaXxAAAAAQEBpHIAAACD82ADigoAAFwBPgg9HKSFFqR+LoF2n+JWAQABJ2MAwAD+0D0cpKAWpJiApJPADYTdheSKDIRSAQABLgCI/j0cpLkWpLIugXaf4lYBAAEngYsAwAD+0D0cpNcWpM2ApMjADYTdheWKDYRSAQABLgCI/j0cpPAWpOkugXaf4lYBAAEnmocAwAD+0E6lBKUKAACDHmADwAD8VQEpRqUWpUOlLAAAAIPUYAOKHAAWpTqApTXADYTdg9WKDj4FSaVLIYGlUMANhWw9HKVeFqVXLoF2n+JWAQABJ4GLAMAA/tA/PRyleRaldYKlb8ANhYGD1ooehFIBAAEuAIm9PRyllBaljS6Bdp/iVgEAASeDWwDAAP7QPRylsRalq4KlpcANhYGAloofhFIBAAEuAIm9PYmlxcANhWwqPRyl5Ral3i6Bdp/iVgEAASeG4gDAAP7QBp/8RaX2pfunkgAAhuwAAAABA6YPp5IAAAABAQGmIAAAAIPzYAOKawAAXAE+BE6mNqZAAACEnWADhCUBFqZHgKZCwA2GTYSdim9OplymZgAAhO9gA4McARamcoGmaMANhl+FGYOYSaaGIRymlIKmisANhntIAQABKwDAAP91PgI9HKasFqalLoF2n+JWAQABHKawLp57BAAEgqbJwA2Gexam6IKm3sANhnuAvYMiFqcTFqcCgqb4wA2Ge4Syg0aEfIKOFqdDFqcygqcowA2Ge4Syg0aEZoKPAJ/nAMAA/tA9HKdbFqdULoF2n+JWAQABJ4FqAMAA/tA/PRyndhanby6Bdp/iVgEAARaniRanhIGnesANhl+AvYOUgL2IygDAAP7QBp/9RaeXp5ypCgAAhuUAAAABA6e9qQoAAAABAQGn2wAAAIPzYAOKXAAAXAE+Aj0cp/wWp+yAp+fADYdwhuSKXoRSAQABLgCKc0moDhaoHRaoF4CoEsANh3CFhYpfg7fAAP6iPgQ9HKg4FqgxLoF2n+JWAQABJ2MAwAD+0E6oTahTAACDHmADwAD8VQEpRqhhqIaobwAAAJ6CYAOI/AAWqH+AqHrADYdwhYWKXz4DSaiQIYGolcANh9A9HKijFqicLoF2n+JWAQABJ4GLAMAA/tA/PRyovoKotsANh+WEUgEAAS4AiP49iajUwA2H0Co9HKj4FqjxLoF2n+JWAQABJ4CXAMAA/tA/Bp/+RakPqRSpZwAAhu8AAAABA6ksqWcAAAABAQGpQQAAAIPzYAOKewAAXAE+AT0cqVcWqVKAqU3ADYh4gpSKfYRSAQABLgCI/gaf/0WpbKlxqeUAAIbyAAAAAQOpianlAAAAAQEBqZ4AAACD82ADiokAAFwBPgE9HqmqnY0DAAMnnoMcqdiUgcYAAAAAwAD+PisAAAANcRIADXGmAA1yOgANctEADXO+AA11rQANddsADXYJAA12TwANdpUADXbbAA13IQANeGsADX3dAA1/RgANf3QADX++AA2ACAANgFIADYCcAA2A5gANgU8ADYK6AA2DvQANhMAADYYwAA2HUwANiFsADYikAA2I7gAAAB0CoARFqhiqHq+SA56EAAABYAHAAP9oAAAFBKAGRao9qkEJg/MAYAOCUwAEoAdFqleqYgmehQBgA5/eAASgCEWqc6p3CYC9AGADwAEAAgAEoAlFqoWqjgmEfABgA8ABAIMABKAKRaqcqqMJhGYAYAPAAQCDAAEFoBBFqqiqqKsAAAAAA6qzqwAAAAAFBQWqwAAABIPzYAOCUwCqywAABIC9YAPAAQACAKrWAAAEhHxgA8ABAIMAquYAAASEZmADwAEAgwCq9AAABJ6FYAOf3gAAYAOgBAE/BggBoAaAAMANifgIAaAIgQDADYoECAGgCYIAwA2KEggBoAqDAMANiiAIAaAHhADADYouCQGqqMAA/34AAAAAAgagDEWrBasMq9QAACMAAAABA6sUq9QAAAAAAAAAYAPAAQACAT4DTqsvqz0AAJ5+XQPAAP6/AWADoAQBHKtSFqtLFqs/Lp6FoAeedZ/hSwEAARarUy6AvaAIAMAA/wVJq14cq3cWq3CAq2LADYqoYcAA/u9IAQABlADAAP8/PgFKq4UBFquMLoC9oAg/SqucASSr0AQWq6UugL2gCCeehhyryRyru4CrrcANiqiAuwEAAS4AwAD+1GQBAAGUAMAA/0EnmggGoA5Fq9mr5K+QAQCeeQAAAAEDq/KvkAAAAAAAAABgA8ABAAIBPgRJq/giHKwNFqwGFqv8LoR8oAmBvMABAIlIAQABJ4eNAMABABEAHKwpFqwkFqwaLoR8oAlOwAEAjkgBAAEnh44AwAEAET4BSaw8IiWsRRasQC6D86AGYAODHAAcrGhqrFFdA8AA/r8BYAPAAQACwADAq4McAQABFqxxLoC9oAgAwAD+jD4CTqzQrN4AAJ5+XQPAAP6/AWADoAQBHKzzFqzsFqzgLp6FoAeedZ/hSwEAARas9C6AvaAIAMAA/wVJrQMcrRwWrRWArQfADYvyYcAA/u9IAQABlADAAP8/PgFKrS4BJwA/Pz9JrVUiHK1jFq1ZLoR8oAlIAQABGq1mn90AwAEAqgEhJa15Fq10LoPzoAZgA4McPgJOrgSuEgAAnn5dA8AA/r8BYAOgBAEcricWriAWrhQunoWgB551n+FLAQABFq4oLoC9oAgAwAD/BUmuNRyuThauR4CuOcANjIRhwAD+70gBAAGUAMAA/z8+AUquXgEnAD8/Tq6DrosAACJgA5G6ASMiHK6YFq6OLoR8oAlIAQABFq6bLoRmoAoAwAEAqgEcrrcWrrAWrqYuhHygCYG8wAEAiUgBAAEnh40AwAEAERyu32quzF0DkdEBYQMCYAPAAQACYAPAAQCDYAORusAAkB+IPQIAAhyu7S4jAAAAAKAMFq75LoR8oAkAkdUcryxqrw5dA5HRAWEDA2ADwAEAAmADwAEAg2ADwAEAg2ADkbrAAJB+iD0DAAMcr0cuIwAAAACgDBavUy6EfKAJFq9eLoRmoAoAkdUBYAORukqvbAEcr3snnodkAQABFq+FgK99wA2M5SKRvQDAAQAXAAANioEADYtFAA2N3QAAAAIAAQSf3UWp9KoVBZ6IAGADwAEAgwEeqgXAAQCxAQABJ56JAAABRQANjhIADXBQAA2JawANje4AAAACAA2OEgAAAAAAAgagEZ6KRgAACoFFAQCbGgABAQKVpJrggY8BAJv5AAEBAYfxgdIBAKflAAEBAZ6LggkBAJysAAEBAYfygkIBAJsTAAEBAZrXgowBAJeBAAEBAZmFgswBAJu/AAEBAZspgxEBAKhjAAEBAZ6Mg1sAAJeBAAEBApmFmaqDpAAAgi4AAQEDhNeFF4RRCZe7mxSbHpswm8KcBZytp+aoZQAAAAAAAgagE0aD4IPlhNkAAZ6NAAAAAQOD8ITZAAAAAwICg/YAAACD82ADgkwAhAcAAACEQGADwAEAbAABhBkAAACZq2ADl7sBagBgA8AA/yV5XAE+AUmELhyEN4CEMsANjvFIAQABKwDAAP91PgE9HIRLgYRGwA2O/YKOAQABJ4RBAMABAG4+Aj0jHIR4goRpwA2PDEgBAAErAMAA/3WKhGnADY8MH4SAl9YAAAAAKwFgA5e7PRyExB+ElpipAgABgYSewA2O/QGZq4KEtMANjwyHFQEAAYCEzsANjvEAmBMGoBRGhNyE4YbLAAGejgAAAAEDhPWGywAAAAMCAoT9AAAAgmpgA4OQAIUQAAAAhEBgA8ABAGwAAYUmAAAAmatgA5e7AWoAYAPAAP8leVwBPgFJhTschUaAhT/ADY/NSAEAASsAwAD/dT4BPRyFWoGFVcANj9mCjgEAASeEQQDAAQBuPgY9IxyFh4KFeMANj+hIAQABKwDAAP91ioV4wA2P6B+Fj5fWAAAAACsBYAOXuz0chaaBhaHADY/Zgo4BAAEWhcQWhbOAhazADY/NhLKDmYR8go4AwAEAbj0chdmBhdTADY/Zgo4BAAEnhngAwAEAbk6F8IX0AACaJmADgxwBFoX9gIX2wA2PzYUZg5hJhhEhHIYZg4YVwA2Qo0gBAAErAMAA/3U+Aj0chi+BhirADY/Zgo4BAAE1AAAAAQBgA8ABAAIBFoY5g4Y1wA2Qo4C9gyIjHIY+hADADZDpSAEAASsAAByGUIKGQcANj+iZlwEAAYOGWsANkKMAl8uEAMANkOkBWwDAAQBuPRyGbIGGZ8ANj9mCjgEAASeGeADAAQBuPz0choiBhoPADY/Zgo4BAAE1AAAAAQBgA8ABAAIBNQAAAAEAYAOIxwEWhpWAho7ADY/NgL2DlCMchpuEAMANkXFIAQABKwAAKxaGm4QAwA2RcYC9iMoBYAPAAQACIxyGoIQAwA2RZEgBAAErAAAchrKChqPADY/omZYBAAGAhr3ADY/NAJfKhADADZFkAVsAwAEAbgFGAA2R5gANjtEAAAAAAA2O1AANj7AADZHmAAAAAgACBqAVno9HAAAEgPAAAMAAucIAAQEBA4ESAADAAMcCAAEBAYiegToAAMAA7D8AAQEFnpCekZ6SnpMLgZoAAJ2HAAEBAYgRAAAAAQKgH0eDeoOAhLUDnQwAAAFgAcAA/2gAAAQEoCFHg5SDlwmArABgA8ABAIMABKAiR4Omg7AJh3EAYAPAAP4bAASgI0eDwoPHCYHHAGADwAD/aAAEoCRHg92D4gmB7gBgA8AA/9YAAQWgKEeD54PnhB8AAAADg+yEHwAAAAQEBIPyAAAEgKxgA8ABAIMAg/wAAASHcWADwAD+GwCEDQAABIHHYAPAAP9oAIQZAAAEge5gA8AA/9YAAGADoB8BPwUIAaAhgADADZLNCAGgIoEAwA2S2wgBoCOCAMANkukIAaAkgwDADZL3CQGD58AA/34AAAAAAQagJkeEJIQrhLMAACMAAAABA4QzhLMAAAAAAAAAYAPAAQACAT4BSoQ8ASSErwgnnpQWhF0ugKygISeelRaEdy6HcaAiJ4OFFoSELoHHoCMjHISRFoSLLoHuoCRIAQABKwDAAP91JwAkhKoCJ4CvFoSkLoHuoCQBYAPAAQACJ4CvAAANk0IADZPCAAAAAQADBKAXR4HQggAGnpYAYAPAAQACAWqB52ADwAEAAsAAwMsEoBhHgpyCrgSemABgA8AA/FUBKgSgGUeDaYN3BJ6ZAGADwAEAgwAEBqAbR4S4hL2FBAABnpoAAAABA4TQhQQAAAAAAAAAXAE+Aj0bhNegGSs9G4TwoBgqBqAcR4UHhRGMKAABnpsAAAABA4UfjCgAAgEAAIJ6YAPAAP9oAVsEAgSFIAAAAIHHWwCFMgAAAIHuYAPAAP/WAIVCAAAAgKxgA8ABAIMBagBgA8AA/yV5hUsAAACHcWADwAD+GwFqAGADwAD/JXkAXQPAALrjAV8DAAABPhJOAAAAAYHKXQPAALopAV8DAAABH4VewAC6NgABXwMAAAAATgAAAACBy10DwAC63wFfAwAAAE4AAAAAgcxbAE4AAAAAgc1bAE4AAAAAgc5bAE4AAAAAgc9bAZNOAAAAAIHQWwBOAAAAAIHRWwBOAAAAAIhcWwBOAAAAAJ6cWwBOAAAAAJ6dWwBOAAAAAJ6eWwBPhREAAAAAgdJbAAOFH4woBAAAAwADAAAAAIHTWwAAAAAAgdRbAAAAAACB1VsAAFsBSz4DQT4UT4VihWIAAAGen2EDAWADwAEAAl0DwAC64wFgA8AA/yUAA4VmhbAAAgABAQGFbgAAAJ6fYAPAAQACAABdA8AAuuMBYAPAAP8lAT4OTgAAAAGByl0DwAC6KQFgA8AA/yUBH4V6wAC6NgABYAPAAP8lAABOAAAAAIHLXQPAALrfAWADwAD/JQBOAAAAAIHMWwBOAAAAAIHNWwBOAAAAAIHOWwBOAAAAAIHPWwGTTgAAAACB0FsATgAAAACB0VsAT4ViAAAAAIHSWwADhWaFsAQAAAMAAwAAAACB01sAAAAAAIHUWwAAAAAAgdVbAABbAUs+A0E+Az0chYcahYDAAOyEgo4BAAEUhY3ADZW5FQAAwAD3SU2FmAI1AAAAAABbAR6FmMAAufkEAAQchaUahZ7AAOyEhEYAAAAAwAD3UBQAwA2WHRkAFADADZYmGgAUAMANlk0eAAArPRQAwA2WYB8APR4AwAC5/AIAAhQAwA2V2RYAFADADZX/FwAASoWwAAMBAFsBAAAAAIHUWwABAAAAAIHVWwA+AT0cABQAwA2V2RYAgd0CAAIUAMANlxAiABQAwA2XGSMAAMAAuww9FQDADZYUGB4AwAC5/QEAARQAwA2WTR4AAD0VAMANlh0ZHgDAALn3AQABFADADZZNHgAAPRUAwA2WJhoeAMAAufgBAAEUAMANlk0eAAA9HIVmFADADZXZFgBqAQABFADADZZNHgAAAEoAARYAFADADZXZFgCB3sAAuwhJhbUahbmgGD4CPY2FxcANlOkehdDAALrtAgFfAwAAAoCF4MANlHKBhefADZR7AEIAAD9JhfElhfuAhfXADZRyYAOgHz4EPYmGC8ANlHsmhgsBNQAAAAEAWwEWhhmAhhPADZRyge4AIxyGHxQAwA2YFhUASAEAASsAAIGGIsANlHsUAMANmBYVAAFbYAPAAP/WPYqGLcANlIkmhi0BNQAAAAEAWwEWhjmAhjPADZRygKwAIxyGPRQAwA2YYRUASAEAASsAAIKGQMANlIkUAMANmGEVAAFbYAPAAQCDPYuGScANlKAmhkkBNQAAAAEAWwEWhlyAhlbADZRyh3EAIxyGZxQAwA2YrBUASAEAASsAAIOGasANlKAUAMANmKwVAAFbYAPAAP4bPYiGesANlHIWhoiAhoLADZRygccAPz0jHIaZgoaVwA2UiUgBAAErAMABAKqKhpXADZSJGoadoBkrAWADwAEAgz0bhq+gGClOhtmG3gAAEl0DwAD+8QJgA8ABAAJbATKG8WADwAEAAlsAPRyG+xSG98ANmTIVAIC/AgACJ4KUJ4NwAMAA/wY9HIcVFIcRwA2ZMhUAgL8CAAIng1QnnqAAwAD/BkmHNSEchz2ChznADZSJSAEAASsAwAEAqj0ch0oUh0bADZkyFQCAvwIAAieArCSHWgGCh1bADZSJAMAA/wY/SYdeIRyHbYOHYsANlKBIAQABKwDAAP8/PRyHehSHdsANmTIVAIC/AgACJ4Nig4eHwA2UoADAAP8GPz0ch5kUh5XADZkyFQCAvwIAAieBxx6HpaAdAQABgIeywA2UcgAAwAD/Bj0ch8AUh7zADZkyFQCAvwIAAieB7iSH1AGBh87ADZR7AMAA/wZOh9+H5AAAgmRgA8ABAAIBHofmwADHJwEAARSH8cANmTIVAABOiAWIDAAAg1RgA8ABAqUBHogSwAECsQAAAABLPgROiDCIOgAAnqFgA8ABAIMBHohAwAEAsQEAAWqIRmADwAEAAsAAwMsATohzAAAAg1ZgA8ABAsoASz4CTYiWAjUAAAAAAFsBHoiWwAC5+QQABByIoxSInMANmnkXAJ6iAQABFIirwA2alxgAAMABAriHAMANlQUUAMANlQ4IABQAwA2VWRAAACs9FYiMwA2avxkUAMANlWwRAAABiL1gA8AA9uMAAD4DPRyJDxSJCMANmnkXAIKMAQAAAZ6jKcABAsQ9jYkpwA2U6R6JNMAAuu0CAV8DAAACH4lToCgEAASCiVnADZSJg4lewA2UoICJasANlHKBiXHADZR7AIGJecANlHsAQgAASYmLIRyJlxSJj8ANmr8ZAEgBAAErAMAA/3U+Dk2JqAI1AAAAAABbAR6JqMAAufkEAAQcibIUia7ADZWQFAAgAQABJ56kAACHAMANlQUUAMANlQ4IABQAwA2VWRAAACs9FADADZVsEQA9F4nhFInZwA2avxkAnqUqwAECzD0Xig0UigXADZq/GQCepirAAQLQToowijUAAJaxYAPAAQACATUAAAABAGADwAD2CAE1AAAAAQBgA8ABAwQBNQAAAAEAYAPAAQLKARSKN8ANmr8ZACMcikAUAMANnFcaAEgBAAErAAArFopAFADADZxXGgCep8ABAtcBYAPAAQMEIxyKUBQAwA2cShoASAEAASsAACsWilAUAMANnEoaAJ6owAEDBgFgA8AA9ggjHIpfFADADZw9GgBIAQABKwAAKxaKXxQAwA2cPRoAlrHAAPYUAWADwAEAAk6Kb4p0AACWsmADwAD+GwE1AAAAAQBgA8ABAwQBNQAAAAEAYAPAAQLKARSKdsANmr8ZACMcin8UAMANnQ4bAEgBAAErAAArFop/FADADZ0OGwCep8ABAtcBYAPAAQMEIxyKjxQAwA2dARsASAEAASsAACsWio8UAMANnQEbAJ6pwAEDBwFgA8AA/htNiqECNQAAAAAAWwEeiqHAALn5BAAEHIqrFIqnwA2VkBQAIAEAASSKvQQngZ0UirLADZwtGgAnguoUirjADZzxGwAAAIcAwA2VBRQAwA2VDggAFADADZVZEAAAKz0UAMANlWwRAE2KxgI1AAAAAABbAR6KxsAAufkEAAQUiszADZq/GQCHAMANlQUUAMANlQ4IABQAwA2VWRAAACs9NYrGAAABAGADwAECygEUAMANlWwRADUAAAABAFsBF4rmForeFIrcwA2eGRwAnqrAAQLUnqsaiwDAAQJowAECPzUAAAABAFsBHIsPFIsNwA2eGRwAgo4BAAEUixXADZpVFgAAwADy9BQAwA2eGRwATYsiAjUAAAAAAFsBHosiwAC5+QQABByLMBSLKMANmr8ZAIKMAAAAAMABAtmHAMANlQUUAMANlQ4IABQAwA2VWRAAACs9FADADZVsEQBNiz8CNQAAAAAAWwEeiz/AALn5BAAEHItJFItFwA2VkBQAIAEAASeBagAAhwDADZUFFADADZUOCAAUAMANlVkQAAArPRQAwA2VbBEAPwEBi1pbAYthAAABg1NbAAGLZAAAAYh7YAPAAP/WAD4ETYttAjUAAAAAAFsBHottwAC5+QQABByLdxSLc8ANlZAUACABAAEki5QFJ4CvHot9oB0BAAEUi4rADZ8nGAAAJ4CvFIuQwA2fMRkAJ4CvAACHAMANlQUUAMANlQ4IABQAwA2VWRAAACs9FADADZVsEQBNi5sCNQAAAAAAWwEei5vAALn5BAAEHIulFIuhwA2VkBQAIAEAASSLxAMnnqwUi7nADZpVFgAnnq0AAIcAwA2VBRQAwA2VDggAFADADZVZEAAAKz0UAMANlWwRAD0ci9QUi83ADZp5FwCCjAEAAAGeoynAAQLETYvqAjUAAAAAAFsBHovqwAC5+QQABByL9BSL8MANlZAUACABAAEngK8AAIcAwA2VBRQAwA2VDggAFADADZVZEAAAKz0UAMANlWwRAD2Ni/7ADZTpHowJwAC67QIBXwMAAAKAjBnADZRygYwgwA2UewBCAAA9HgDAALn8AgAChADADZTHhQDADZTpAEqMKAADAQBbAQAAAACB1FsAAQAAAACB1VsAPgE9HACEAMANlMeB3QIAAhQAwA2gvBQAFADADaDFFQAAwAC7DD2OAMANlPweAMAAuf0BAAEUAMANlVkQAAA9jwDADZUFHgDAALn3AQABFADADZVZEAAAPRUAwA2VDggeAMAAufgBAAEUAMANlVkQAAA9HIUfhADADZTHagEAARQAwA2VWRAAAABKAAEWAIQAwA2Ux4HewAC7CAagHUeMK4wyjMcAAZ0NAAAAAQOMPozHAAAAAQEBjEYAAACDxWADwAD/aAAAYAPAAQACAT4BSz4BSoxcASSMbAGAjGXADaGEAAGMclsBjHkAAAGDU1sAAD4BSoyCASSMwQMnnq4WjKmAjKLADaGEhZ7AAP98J56vBqAeR4zKjNSN6wABlV8AAAABA4zpjesAAgEAAIJ6YAPAAP9oAVsCAgKNBAAAAIjbYQMAXQPAALrjAV8DAAAAjRsAAACesGEDAGADwAEAgwAAXQPAALrjAV8DAAABPg9OAAAAAYHKXQPAALopAV8DAAABH40twAC6NgABXwMAAAAATgAAAACBy10DwAC63wFfAwAAAE4AAAAAgcxbAE4AAAAAgc1bAE4AAAAAgc5bAE4AAAAAgc9bAZNOAAAAAIHQWwBOAAAAAIHRWwBOAAAAAIhcWwBPjNQAAAAAgdJbAAOM6Y3rBAAAAwADAAAAAIHTWwAAAAAAgdRbAAAAAACB1VsAAFsBSz4DQT4CPR6NMaAbAAAAAEs+A02NWwI1AAAAAABbAR6NW8AAufkEAAQcjWeAjWHADaIHIAAAAAAAhQDADaJ8hgDADaKFFADADaK1CwAAKz2LjVTADaJgFADADaLIDABCAAABA41vYAOgHwAAPgE9L41+jYtgA52PAAA+AT0vjZ+NrFsBjbMAAAGDU1sAAY22AAABiHtgA8AA/9YAPgI9i42/wA2iYB6NxqAcAwFfAwAAAxSN0sANo2cPABSN1cANo3EQAByN4oGN2MANoh0gAAAAAAAAQgAAPR4AwAC5/AIAAoIAwA2iPoMAwA2iYABKjesAAwEAWwEAAAAAgdRbAAEAAAAAgdVbAD4BPRwAggDADaI+gd0CAAIUAMANo9sPABQAwA2j5BAAAMAAuww9jADADaJzHgDAALn9AQABFADADaK1CwAAPY0AwA2ifB4AwAC59wEAARQAwA2itQsAAD2OAMANooUeAMAAufgBAAEUAMANorULAAA9HIzpggDADaI+agEAARQAwA2itQsAAABKAAEWAIIAwA2iPoHewAC7CAFHAA2khQANkk8ADZPPAAAAAQANlBkADZRJAA2hZwANod4ADaSFAAAABAACBqApnrFIAAAKgPYAAMAAucIAAQEBA4EYAACCLgABAQGEe4FIAACLCgABAQGCCYGCAAComQABAQGesoG9AACdhwABAQGdJ4HqAACongABAQGes4ItAACdlgABAQGIEoJTAACdogABAQGIE4KIAACoxgABAQGetILFAACo7wABAQGetQAAAAECoCpIgvGC94gcA5VgAAABYAGonwAAAwSgLEiDRoN5CZ62AF0DwAD+8QJgA8ABAINgA6jQATKDd2ADwAEAg2ADqNAABKAtSIODg5MYlbUAYAPAAPxVASoEoC5Ig6ODqRiVcwBgA6jwASsBBaA3SIOug66EVgAAAAODuIRWAAAAAwMDg8AAAACIIWADnZcAg9YAAACVbmADnaMAg+wAAACet2ADizQAAGADoCoBPgE9F4Q1LpVzH4RCqPsBAAEuAKAuAQkAhAOoxQMAA4CECcANpbmBhBHADaXFgoQgwA2l0QAGBqAwSIRbhGyFBwAAnrgBaoRcYAPAAP9oAgAAAQOEgIUHAAAABAQEhIwAAACEfGADwAEAgwCEmwAAAIRmYAPAAQCDAISuAAAAhyldA8AA/r8BYAPAAP4bAITEAAAAmQ1dA8AA/r8BYAPAAP4bAABc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18AOh+YAPgI9iMAAo+jADofmHMAAo+8un7sAAAAAoONJwACkAh7AAKQGwAD3/AIAAmrAAKQQYAPAAP4bwABII4DAAKQXwA6H5gA+Aj2IwACkKsAOh+YcwACkMS6fuwAAAACg4z2NwACkSMAOiFccwACkRoXAAKRIwA6IV2QBAAGUAMAA/0E/ScAApGgewACkbMAA9/wCAAKAwACkdsAOh+ZqwACkfGADwAD+G4QUAD4DScAApIwhg8AApJHADoglPgM9HMAApO0un74BAAGEwACk+8AOiDoAoOY9i8AApRTADoglKT2MwAClNcAOiDoWwAClRC6fwKExPz0cwAClYi6f0wAAAACg8j2IwAClgcAOh+YcwACliC6fuwAAAACg4z4CScAApaocwACls4DAAKWuwA6H5oCXAQABN38AwAD/Sz4CPYvAAKXGwA6IJSo9isAApejADogQKj89iMAAphTADofmHMAAphsun7sAAAAAoONKwACmOAGAwACmP8AOh+YGoRxOwACmTMAAplHAAKciAACgDAAAAAEDwACmXsAApyIAAAADAwPAAKZjAAAAamADwAD+GwDAAKZ0AAAAgpRgA59qAMAApn8AAACdUmADwAD8VQAAXAE+A0nAAKaQIRbAAKaVLpWboNFKwACmpgA/TsAApr/AAKbKAACgEmADneUBHMAApswun9sDAAOBwACm38AOjMSAwACm5cAOjLWCwACm7MAOjNIAoPg9HMAApvwuoAmgxwEAAYPAAKcTwA6M/wChIAahHU7AAKcnwACnLMAAp/YAAKALAAAAAQPAAKc5wACn9gAAAAMDA8AApz4AAABqYAPAAP4bAMAAp08AAACClGADn2oAwACnWgAAAJ1SYAPAAPxVAABcAT4DScAAp2shFsAAp3AulZug0UrAAKeBAD9OwACnk8AAp54AAKASYAOfIgEcwACnoC6f3AMAA4HAAKezwA6NiYDAAKe5wA6NeoLAAKfAwA6NlwCg+T0cwACn0C6gCaDHAQABg8AAp+fADo3EAKEgBqEeTsAAqFLAAKhXwACqCgAAn8YAAAABA8AAqGLAAKoKAAAAAQEBwACoaQAAAJKpYAOfIgAAXAE+BD0XwACoexbAAKh2LoPwoNmDtYDAAKiCwA6OP59FPRfAAKiTgMAAqI3ADo4/nV4WwAConi6D8KDZn0c9F8AA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DrCMhsAA1+/ADrDcAKDrTsAA2DzAANhHAACgKGADwAD+GwEjHMAA2FQWwADYSS6dY6DXYwEAARbAANhWLp/BoTIAwAD/SRbAANhlLp1joNeBwADYcsAOsGwBYAPAAP4bPRzAANiCLp/aAQABH8AA2JiiEgMAA4fAANirwA6xURTAANizwA6xyAgAFsAA2L8un8GhMgAAoPcGoS9OwADY1sAA2NrAANmRAACgEQAAAAEDwADY68AA2ZEAAAABAQHAANjxAAAAoClgA8AA/FUAAGADwAD+GwE+AknAANkGHMAA2Qoun+AAAAAAoP9KwADZGQFqwADZIGADwAD+Gwk/ScAA2SqAwADZLsAOsnc+AUrAANlFARzAANlMLp+7AAAAAKDjPgFKwADZfgEcwADZhZSBxgAAAADAAP4+AAAONaIADjZAAA42ZQAONpgADja9AA426wAONxAADjc1AA43awAON54ADjg0AA44lgAOOSIADjl6AA451QAOOqEADjtCAA477QAOPGsADjy3AA49swAOP9cADkCZAA5BvAAOQr0ADkMfAA5DgQAOQ80ADkZ4AA5HFQAOR/AADkj1AA5JJAAOS9gADkzgAA5aTwAOXGMADl1SAA5ePgAOXrwADmCBAA5iPQAOY/kADmR3AA5k9QAOZjMADmdxAA5o+wAOau4ADm2BAA5uygAOcSAADnIPAA50dQAOdssADnsEAA58pwAOhREADoXmAA6HvwAOjI4ADo1TAA6OGAAOj1IADpBFAA6RdAAOlroADpfjAA6YVAAOmiQADp2PAA6epgAOoCcADqIYAA6k1AAOqE0ADq0xAA6wNQAOslAADrLzAAAATwKhNU7AANrKwADa0MAA4js3oCoAAAFgAcAA/2gAAV0BwADDqQFgA8AA/hsAAQWheAAAAAAFAAADAAAAAAAAAAAAYAOhNQE/AQkAAMAA/34AAAAAPQahN0+J7on+ih8BAFwAAAABA4oHih8AAAAAAAAAXQPAAP64AWADwAD+GwFKigoBH4oKwADPFQEBYAPAAP4bAS4ABqE/T4okiiaKSQAAlo4AAAABA4ovikkAAAABAQGKNAAAACdgA8AA/hsAAGADwAD+GwFKij4BHIpCLksBAAGAikPADrTqAMAA/s4GoUBPik6KWoqyAACWkgAAAAEDimSKsgAAAAEBAYpxAAAgg9td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kQCnyAAAAIJqYAOvnwCn3AAAAJ8yYAOpHwCn7QAAAIRmYAPAAQCDAABgA6KCAT8BCgCn/qO3CwAAC568gKggwA83OoJqgqg9wA83UqEIg6hhwA83XqEOK4eJFqi2FqivgKinwA83OpVzqaiHiaqKh4UWqOcWqOCAqNjADzc6lXOpqIeFqoufpIGpEsAPN0ahBzUAAAABAGADwAD8VQE1AAAAAQBgA6+fAYKpX8APN1IjHKlnhQDADzfvSAEAASsAACsWqWeFAMAPN++hB8AAVscBYAPAAPxVIxypg4UAwA834kgBAAErAAAqhQDADzfiAWADwAD8VaEfK4CshKm/wA83aqELNQAAAAEAYAOueQEWqfEWqeqAqeLADzc6lXOpqKEmqo8jHKoXhQDADzhWSAEAASsAACscqheFAMAPOFahJwMAA4SqRMAPN2o1AAAAAQBgA6+RAYGqTcAPN0YjHKphhgDADzidSAEAASsAACsWqmGGAMAPOJ2Eya+XAWADiTeAqmvADzc6AK57AWADrn+BCgaiqlWqeaqCqtoBAKEoAAAAAQOqkKraAAAAAAAAAGADwAD8VQE+AUqqlgEiHKqyFqqdLqEToppIAQABkwDAAP8/ACWqwRaqui6CaqKGYAPAAFeABqKrVarfquirUQEAoSkAAAABA6sFq1EAAAAAAAAAYAPAAPxVAT4BSqsLASIWqxIuoQeiiwElqzgWqzEugmqihmADwABXgAairFWrVqtqq6ABAIboAAAAAQOrequgAAAAAAAAAGADm8IBSqt9ATUAAAABAGADsQwBFqt9LqELopEjHKuLgADADzmkSAEAASsAACsWq4uAAMAPOaShKrEWAWADwABWOAairVWrpauyrA8BAKErAAAAAQOrx6wPAAAAAAAAAGADiPwBSqvQASMWq9AuglCik2qr42ADiROEm2qr+WADtiPAAMK5AWADiPwGoq9VrBSsJay8AAChLAFqrBVgA8AA/2gCAAABA6wprLwAAAABAQGsMQAAAIPzYAPAAP9oAABcAT4DSaw9JaxGgKxBwA86TGADiPw+AT0erFudiwQABCeGhCehLByseZSBxgAAAADAAP4+Fqx9LoCsopAAPz0XrI0uoQ8qopY9HayuoSwBAAGArLPADzpMAMAAW38GorBVrMGszKzrAAChLQAAAAEDrNes6wAAAAAA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AYXAAEQ2wA9KtWADswY9jcAARErAD0q1HMAARGGHwABEV8APTFKhWgMAAx/AAESGtYoDAAMuFsAARMaGwABEv8APS/ODtZ89HsAARNCI0AIAAoTAAETVwA9KdBbAAETqFsAARNsunryihaFXqcsAABbAAEUQFsAARQuGwABFBMAPS/ODtZ89g2KfPioAsyU/TsAARUvAAEVgAAChW2ADr+sBJsAARUsBHMAARWIuoS8AAAAAwABbgmADr+tJwABFbyIhJcAARX6FwABFc8APSrVgA7PfACElwABFsIXAAEWlwA9KtWADsy0+AT0cwABF1C6hLAEAARzAAEXZLqFcAwADHMAARfQuoS4BAAGFwABF/MAPSrUAorNqwABGD2ADkcW34WrAAEYtYAPAAP4bFQCjkgCirz4BPRzAAEZQLqEsAQABHMAARlUuoS4BAAGFwABGXcAPSrUAorMAoq89F8AARnkuoRiGwABGi8APTPmioAaiwlXAAEauwABGv8AAR8QAAKFdAWrAAEavYAPAAP9oAgAAAQPAAEbOwABHxAAAAAEBAcAARtMAAACA7mADwAD+GwAAXAE+Aj0cwABG4C6hTwEAASehXgCjqEnAAEcAHMAARwqAwABHBMAPTg1IAQABkwDAAP8/PgE9HMAARxguoSwBAAFqwABHJ2ADwABbPsAAwwgAoq8+AT0cwABHRS6hLAEAATUAAAABAF0DwAD+vwFgA4TsARzAAEdrasAAR1BdA8AAW8cBYAOE7MAAwx+hLwIAAhbAAEdvLqE7wABbdYDAAEd2wA9ODQDAAFvJIxzAAEd9gQDAD06ASAEAASsAAGrAAEeUYAPAAFs+wADDCIEAwA9OgAFgA8AA/2gAoq8GosNVwABHycAAR9rAAEk+AAChYAFqwABHymADwAD/aAIAAAEDwABH68AAST4AAAAHBwfAAEf5AAAAoWFgA58iAMAASBIAAAChYmADnyIAwABILgAAAKFjYAOfIgDAAEhFAAAAoWRgA58iAMAASGAAAACA7mADwAD+GwDAAEhzAAAAn8NgA58iAMAASIsAAACdcGADnyIAAFwBPgM9HMAASJsuoU8BAAEnoWUAo6hJwABIvSEWwABI3xbAAEjYFsAASNEWwABIwi6evKKFlXOpqIJJqpafuaisPgE9HMAASPouoWYBAAGCwABJGcAPT0oAwABZPz89HMAASS8uoSwBAAGEwABJNMAPT2YAoq8GosRVwABJQ8AASVTAAEqIAAChZwFqwABJRGADwAD/aAIAAAEDwABJYsAASogAAAAHBwfAAElpAAAAoWFgA58iAMAASXwAAAChYmADnyIAwABJkgAAAKFjYAOfIgDAAEmpAAAAoWRgA58iAMAASb4AAACA7mADwAD+GwDAAEnLAAAAn8NgA58iAMAASd0AAACdcGADnyIAAFwBPgM9HMAASe0uoU8BAAEnoWgAo6hJwABKByEWwABKKRbAAEoiFsAAShsWwABKDC6evKKFlXOpqIJJqpafuaisPgE9HMAASkQuoWYBAAGCwABKY8APUFgAwABZPz89HMAASnkuoSwBAAGEwABKfsAPUHQAoq8GosVVwABKjcAASp7AAFMzAAChaQFqwABKjmADwAD/aAIAAAEDwABKqsAAUzMAAAAAAAAAXAE+CD0cwABKsy6hTwEAASehaQCjqE7AAErXwABK3QAAgO5gA8AA/hsBJsAAStcBHMAASt8uoS8AAAAAwABbgmADwAD+G07AAEr9wABLBAAAhItdA8AA/r8BYAPAAFb9ATHAAEsUYAPAAFb9AEXAAEscAcAASyXAAEsnAABiYAPAAP4bAZMBHMAASy6CwABLLMAPUb5jAQABgMAASzDAD1FiAMAA/0kBisAASzfAD1G+HMAASziCwABLN8APUb5kAQABlADAAP9BQT4JTsAAS0/AAEtbAACFIWADhOwBJsAAS08BHMAAS10uoS8AAAAAwABbgmADhOxOwABLdcAAS4AAAJ33YAPAAFZdASbAAEt1ARzAAEuCLqEvAAAAAMAAW4JgA8AAVl1OwABLlsAAS5sAAIC9YAPAAQACARbAAEuohMAAS53AD1JEgL3AAFZfTsAAS7wAAACfC2ADwABWsgBJwABLzyEcwABL5hbAAEvTLp+koodIAQABKwDAAP91PgE9jsAAS/nAD1KcHMAATCYWwABMEy6fpKKHnuYCAAGFwABMOMAPUnQBmnopr5s+AT2OwABMZsAPUpwcwABMgxbAAEx0Lp68ooWe5gIAAYXAAEyVwA9SdAGaeinAAFWnTsAATMcAAACfMWADwABW/QBJwABM2yIWwABM64bAAEzfwA9SnIebwABWwAAcwABNBxbAAE0ChsAATPbAD1Kcg7XAAFa0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asAApUxgA5HFtP2CXwMAAxbAAKWFLoCsopAWwACljobAAKWKwA+HzIdxnysWwAClnobAAKWawA+HzGGfOwCRzQCjkz9OwAClwsAApc0AAKG2YAOuAQEfwACl064JAgACKYXAAKXowA+HrAA9NQAAAAEAYAOxDAEWwACl+i6hC6KRIxzAAKYIFADAD4iZCABIAQABKwAAKxzAAKYIFADAD4iZCAChkAQABC5qwACmL2ADiROEm2rAAKZKYAOE3YV4h8AAplDAD4hxALEaAVxKwACmYgEWwACmdIfAAKZpwA+IcYJviFMGotpVwACmh8AApozAAKf+AAChtwAAAAEDwACmncAAp/4AAAABAQHAAKakAAAAkqlgA58iAABcAT4DTsAAprjAAKa/AAChr2ADwABZowEfwACmxcAAWo4BAAEuAEnAAKbXIRbAAKbigMAAptzAD4k5ndafMD4CPYjAAKbxwA+JORzAAKcAgcAApvnAD4lNobcBAAGAwACnEsAPiTkAwABZ/j0cwACnIC6huAEAARbAAKcxgMAApyvAD4k5h3GfKwDAAFuKPgE9HMAAp1EuoX4AAAAAosk9HMAAp88uoZkCAAImwACn4QEWwACn4S6CaqKGYAPAAFeAasAAp/VgA4TdhXgAot0GottVwACoA8AAqA7AAKkJAAChuQAAAAEDwACoI8AAqQkAAAABAQHAAKgqAAAAkqlgA58iAABgA4TsAT4FTsAAqD7AAKhFAAChr2ADwABZowEfwACoS8AAWo4BAAEuAD2IwACoXcAPij4cwACobIHAAKhlwA+KVaG0AQABHMAAqIOBwACofMAPilWhtQEAAYDAAKiawA+KPgDAAFqDAMAAWihOwACossAAqL0AAIJvYAOE7AEcwACovy6hLQAAAACisD0cwACo0i6huAEAARbAAKjjgMAAqN3AD4o+h3GfKwDAAFuKSsAAqPQBgsAAqPvAD4q6BqLcVcAAqQ7AAKkZwACqBAAAoboAAAABA8AAqSjAAKoEAAAAAQEBwACpLwAAAJKpYAOfIgAAYAOE7AE+BU7AAKlDwACpSgAAoa9gA8AAWaMBH8AAqVDAAFqOAQABLgA9iMAAqWLAD4syHMAAqXGBwACpasAPi0mhuwEAARzAAKmGgcAAqX/AD4tJobUBAAGAwACpncAPizIAwABagwDAAFnPTsAA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wA+qEACCWoQAwA+qlgCirwai7VXAANbEwADWycAA2DgAAKHoAAAAAQPAANbUwADYOAAAAAEBAcAA1tsAAACSqWADnyIAAFwBPgJOwADW78AA1vQAAKHzYAPAAP9oARzAANb2LqEvAAAAAMAAW4JJwADXASXAANcKgcAA1wXAD6ufYAO1NT4BPRzAANcuLqEsAQABHMAA1zgUwADXM8APq58BAWADtTWh9AMAAhzAANdFLqEvAAAAAMAAW4IWwADXUoDAANdMwA+ri4dxnysBofUptToAoq8+Az0cwADXhi6hLwAAAADAAFuCPYjAANeTwA+rixbAANehgMAA15vAD6uLg7WfPT0cwADXrS6hLAEAARzAANeyLqE0AwADHMAA1+BqwADXxV0DkdEBYQMBYAOfImADkbq0NYg9AQABgMAA1+7AD6uLAJHVHsAA2ADAAFssAQABgMAA2A/AD6uLAB7AANgXwABbMwEAAYDAANgmwA+riwAAo5EAoq8Gou5VwADYPcAA2ELAANn0AACh5QAAAAEDwADYWsAA2fQAAAABAQHAANhhAAAAkqlgA58iAABcAT4CTsAA2HXAANh6AACh82ADwAD/aAEcwADYfC6hLwAAAADAAFuCScAA2IclwADYkIHAANiLwA+tC2ADtTU+Ak7AANi7wADYxAAAhZdgA8AA/2gBIx7AANjGwABbKAIAAieBaoDAANjUwA+s9wAcwADY3S6hLwAAAADAAFuCHMAA2OUuoS0AAAAAorABYAPAAP9oPRzAANj6LqEsAQABHMAA2QQUwADY/8APrQsBAWADtTWh9AIAAoLAANkRwA+tSBbAANkhgMAA2RvAD6z3h3GfKwC1OgCirz4DPRzAANlCLqEvAAAAAMAAW4I9iMAA2U/AD6z3FsAA2V2AwADZV8APrPeDtZ89PRzAANlpLqEsAQABHMAA2W4uoTQDAAMcwADZnGrAANmBXQOR0QFhAwFgA58iYAORurQ1iD0BAAGAwADZqsAPrPcAkdUewADZvMAAWywBAAGAwADZy8APrPcAHsAA2dPAAFszAQABgMAA2eLAD6z3AACjkQCirwai71XAANn5wADZ/sAA2ngAAKH2AAAAAQPAANoUwADaeAAAAAICAsAA2iIAAACCbmADhMEAwADaNgAAAFtgA4W2AABgA8AA/FUBPgFKwADaaQEp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FwAAhdddA8AA/r8BYAOE7AExwAEZJWADhOwAScABGVocwAEZchbAARlrFsABGWSEwAEZXsAP2HKCYp88YcABAAaAlwEAAZQAwAD/Sz4CTsABGYjAARmOAACAlmADwAEAAgEewAEZnLBcBAAEFsABGbqEwAEZtMAP2HKCYp88hsABGcLAD9jShMABGcnAD9hyLgBJwAEZ3xbAARnpFMABGePAD9lXCACDt8ABAAk+AT0cwAEaDYfAARoBwA/ZAVYBAAEcwAEaGBbAARoRLqEFooSiKQIAAhTAARoswA/ZVwgAhMABGjPAD9hyALXXAMAA/tA/P0XAARpUAcABGl3AARpfAABiYAPAAP4bAZQBHMABGmYUwAEaZMAP2gIIAGMBAAEcwAEadRbAARpug8ABGmjAD9fJYcAA/u+BjQEAAZQAwAD/QgDAAP9JARXAARp6wA/aAggcwAEaexTAARp6wA/aAggAZAEAAZQAwAD/QT4CTsABGpDAARqVAACaUmADwAD/aAEcwAEanIPAARqXwA/XyUsBAAEUwAEancAP2gIIAADAAP7OScABGqklwAEashTAARqtwA/aegkAYAOfIj4BScABGsghHMABGt8WwAEa2BbAARrRFMABGszAD9p6CQFgA58igmKfPGHAAQAGSAEAAZMAwAD/Pz4CTsABGvrAARsAAACAlmADwAEAAgEewAEbArBfBAAEFsABGxAUwAEbC8AP2noJAWADnyKCYp88hsABGxjAD9jSFMABGx/AD9p6CQFgA58iLgA9HMABG0SHwAEbOMAP2QFWAQABHMABG08WwAEbSC6hBaKEoikCAAIUwAEbY8AP2wQKABTAARtqwA/aegkBYAOfIgC11wDAAP7QPz4BPRzAARulh8ABG5nAD9kBVgEAARzAARupLqEuAQABFMABG7HAD9p6CQAAorMAwAD+0EnAARv8HMABHBMWwAEcDBbAARwFhcABHADAD9iigmKfPGHAAQAGgJcBAAGUAMAA/0s+Ak7AARwpwAEcLwAAgJZgA8ABAAIBHsABHDGwXQUABRbAARxahcABHFXAD9iigmKfPIbAARxiwA/Y0oXAARxpwA/YohbAARx0hcABHG/AD9iihJOfNi4AScABHJAWwAEcmhTAARyUwA/cBAgAg7fAAQAJPgE9HMABHL6HwAEcssAP2QFWAQABHMAB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wAEzCQAAolMAAAABA8ABLtfAATMJAAAAAgEBwAEu4wAAAIUhYAOE7AABwAEu9wAAAKJUYAOfIgFqAGADwAD/JXlcAT4LTsABLxLAAS8XAACD82ADwAD/aAEcwAEvGS6hLwAAAADAAFuCScABLyQlwAEvLYLAAS8owA/q4mADwABbzD4CPRzAAS9ILqEsAQABFMABL03AD+riAgFgA8AAW8wAoq9KwAEvWgA/TsABL3fAAS+CAACd92ADwABWXQEmwAEvdwGCwAEvhMAP6uJgA8AAVl1AIRzAAS+zFsABL5UuoRuiokgBAAEcwAEvtpSBxgAAAADAAP4+AMAA/z/AAS+VwAEvuABOwAEvxMABL8wAAIQiYAPAAPxVASEcwAEv+hzAAS/tFsABL88uoRuiooN8AQABasABL+9gA8AA/hshAMAA/jNIAQABkwDAAP8/TsABMAnAATARAACEIGADwAD8VQEhHMABMD8cwAEwMhbAATAULqEboqKDfAEAAWrAATA0YAPAAP4bg3AAwAD+M0gBAAGTAMAA/z9OwAEwTsABMFUAAIUsYAPAAPxVASEcwAEwghzAATB2FsABMFguoRuiooN8AQABasABMHhgA8AA/huEjADAAP4zSAEAAZMAwAD/P0AcwAEwm4TAATCTwA/rpEgBAAEcwAEwrxbAATCfLqEYoqBIAQABasABMMJgA6/rwADC5gDAAP91AMAA/3XAATCTwAEwywBOwAEw5sABMO8AAIJwYAOIkQE1wAEw9QAAAQBgA66gAR/AATD1rrAIAAIWwAExJYPAATEawA/rSIC9wABWXxbAATErLqETopoGolcWwAExgB7AATFcwABWXAEAAYPAATF0wA/rSACEk582hSGAwAExosAP6reClBzAATG9LqFtAQABFsABMcsuoRqioQCjrYQghcABMffAD+vthCKEwAEyEcAP66SFLIbAATIqwA/sNzUAAAABAFsBF8ABMjqHwAEyOMAP7NmEWBbAATJSg8ABMkfAD+tIh3HAAFZgglo1AAAAAQBbARfAATJlh8ABMmPAD+zZhmgewAEyeMAAWywBAAGBwAEyh8AP6sYAiJOHAMAP7Nk9HMABMqgWwAEymS6evKKFolgDAAOHwAEy0sAP7McWwAEy3C6G6KKsFsABMu0ugKyikACqID0cwAEy9y6hLAEAAYfAATL8wA/sxwCirwajC1XAATMOwAEzH8ABM2UAAKJZAWrAATMPYAPAAP9oAgAAAQPAATM0wAEzZQAAAAEBAcABMzsAAACSqWADnyIAAFwBPgE9F8ABM0guoRApopcGowxVwAEzasABM3vAATRKAACiWgFqwAEza2ADwAD/aAIAAAEDwAEzjsABNEoAAAACAgLAATOVAAAAolFgA58iAMABM68AAACSqWADnyIAAFwBPgQ9HMABM7wuoU8BAAEnhV4Ao6g9F8ABM+AuoRAqopdAHMABNCYWwAE0GoDAATQHwA/urJ3Zn0FIAQABJ4C8AMABABHAATQHwAE0LAA9HMABNDMuoSwBAAEcwAE0OC6hLQAAAACisACirwajDVXAATRPwAE0YMABNaQAAKJbAWrAATRQYAPAAP9oAgAAAQPAATR4wAE1pAAAAAEBAcABNH8AAACSqWADnyIAAFwBPgI9HMABNIwuoU8BAAEnolwAo6hJwAE0shzAATTGFsABNLYuoRiioEgBAAFqwAE02WADr+vAAMLmAMAA/3U+AT0cwAE1MC6hLAEAARzAATU8FsABNTUuoQWihKGOAQABHsABNU7AAFssAQABgMABNV3AD+9oAAC11gCirz4BPRzAATV6LqEsAQABasABNYlgA8AAWz7AAMSZAKKvBqMOVcABNanAATW6wAE3OQAAol4BasABNapgA8AA/2gCAAABA8ABNdLAATc5AAAAAQEBwAE12QAAAKJfYAOfIgAAXAE+Bz0cwAE2Hi6hTwEAASeiYACjqE7AATZOwAE2UwAAg/NgA8AA/2gBHMABNlUuoS8AAAAAwABbgknAATZgJcABNmmBwAE2ZMAP8G5gA8AAW8w+Aj0cwAE2hC6hLAEAARTAATaJwA/wbgEBYAPAAFvMAKKvSsABNpYAP07AATa8wAE2xQAAgnBgA4iRASbAATa8AYHAATbHwA/wbmADiJE9F8ABNtqCwAE20cAP8NSEWBbAATbxgMABNufAD/BIh3GfK4JaPRzAATcBLqEsAQABgsABNwbAD/DUAKKvPRzAATcVLqFJAgACgsABNyXAD/DUFsABNy8unzKwiACivQajD1XAATc+wAE3T8ABOj0AAKJhAWrAATc/YAPAAP9oAgAAAQPAATdowAE6PQAAAAMDA8ABN3YAAACSqWADnyIAwAE3gwAAAKFjYAOfIgDAATeUAAAAoWRgA58iAABcAT4KPRzAATerLqFPAQABJ6JhAKOoScABN9ghFsABN/oWwAE38xbAATfsFsABN90unryihZVzqaiCSaqWn7morD4BPRzAATgVLqFmAQABgcABODTAD/GYAMAAWT8/TsABOFnAATheAACClGADwABYYAEmwAE4WQEcwAE4YC6hLwAAAADAAFuCYAPAAFhgTsABOG/AATh5AACiYmADwAD+GwEcwAE4niMhHMABOIaBwAE4fMAP8ZhIAQABKwDAAP91asABOJBgA8AA/huEjJMBYAPAAP4bgQYBAAEewAE4sbApAQABNQAAAAEAYAOfIgGCwAE4ycAP8aYjHMABONqEAMAP8ptIAQABKwAAKxbAATjahADAD/KbgmKfPAFgA8ABAAIAAMAA/jQ9HcABOO2hLAEAARbAATjyLqEboqIAwABbfz0dwAE5HKEsAQABNQAAAAEAYAPAAFhgARbAATkhLqEaoqEjHMABOTqFAMAP8wRIAQABKwAAasABOUdgA8AAWz7AAMSzhQDAD/MEAWADwAD/aADAAFt/PRfAATlSLqEag8ABOW3AD/IUoqE9F8ABOXcuoRuEwAE5l8AP8kSioj0dwAE5rKEsAQABFsABObEuoRiioADAAFt/PRfAATnHLqEYIyEcwAE58hzAATnlhMABOdvAD/JEg3wBAAFqwAE552ADwAD+GyEAwAD+M0gBAAGTAMAA/z9qwAE6EmADr+vAAMLmasABOjVgA6/rwADCpgFgA6/roqAGoxBVwAE6QsABOlPAAUAEAACiZAFqwAE6Q2ADwAD/aAIAAAEDwAE6asABQAQAAAACAgLAATpvAAAAgO5gA8AA/hsAwAE6fAAAAJ1wYAOfIgAAXAE+Aj0cwAE6jC6hTwEAASeiZQCjqEnAATq0HMABOr6AwAE6uMAP9CJIAQABlADAAP8/PglOwAE608ABOtgAAIPzYAPAAP9oARzAATraLqEvAAAAAMAAW4I9F8ABOucuoRgmwAE65wEcwAE6+S6hLwAAAADAAFuCYAOv66KgPRfAATsGLqEaJsABOwYBHMABOyEuoS8AAAAAwABbgmADwABYYKKhPRfAATsuLqEbJsABOy4BHMABO04uoS8AAAAAwABbgmADwAD+G6KiTsABO2zAATt4AACEaF0DwAD+vwFgA4TsASbA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AYXUAAAAAgICwAF9xgAAAJ/DYAOfIgDAAX3YAAAAosZgA58iAABcAT4IPRzAAX44LqFPAQABJ4TTAKOoScABflAhFsABfnIWwAF+axbAAX5kFsABflUunryihZVzqaiCSaqWn7morD4BPRzAAX6NLqLHAQABgcABfqfAECZ3AMAAWT4/TsABftXAAX7fAABbXQPAAP6/AWADwABYYAEmwAF+1QEcwAF+4S6hLwAAAADAAFuCXQPAAP6/AWADwABYYE7AAX7zwAF++AAAgL1gA8AA/2gBHMABfvouoS8AAAAAwABbgknAAX8FJcABfw6DwAF/CcAQJyJgA8AAVoI+BE7AAX82wAF/QAAAoshgA8AAVoIBFMABf0LAECciAwFgA8AAVoJOwAF/VcABf1wAAIMpYAPAAP9oARbAAX9ohMABf17AECdhoiLAAFaETsABf3/AAX+GAACgJ2ADnyIBHsABf4jAAFZcAQABhMABf6DAECdhAEnAAX+yJcABf72FwAF/tsAQJ4ZgA7MGPgE9i8ABf9XAECciHMABf+MUwAF/3MAQJ4YFAWADswaiyQEAAYbAAX/zwBAnrgCzJz4HTsABgBrAAYAfAACAvWADwAEAAgEewAGAIaKAAQABhcABgC3AECeGAE7AAYBFwAGAUQAAospgA8ABAAIBHsABgFOifwIAAofAAYBdwBAoIBbAAYBqhsABgGPAECeugmKfPABOwAGAf8ABgIYAAINiYAPAAP4bAR7AAYCIwABbLAEAAYDAAYCXwBAmaQBOwAGAtMABgLwAACJgA5G6ARzAAYDVasABgMRdA5HRAWEDAWADwAEAAmADkbrAAHETiD0BAAEUwAGA48AQKEgIAACR1T0cwAGBCBbAAYD5Lp68ooWe2wQABBTAAYEgwBAorAoAFMABgSnAECiCCQAewAGBMcAAWzQCAAKAwAGBPsAQJmmGwAGBSsAQJ64AFsABgVMugKyikACp9T0cwAGBYS6hLAEAAR/AAYFqwABYawMAAzXAAYGKAAABAGADwABX8gEfwAGBisAAWAcCAAKHwAGBm8AQKCArADUAAAABAFsBHMABgbcUwAGBtcAQKV8LAJ7hAQABH8ABgcDAAFfNAgACh8ABgebAECggHMABggYUwAGB/sAQKKwKAIJfAwADFsABgiougKyikBTAAYIvwBAoggkAHsAB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YAPAAP9oAgAAAQPAAp2dwAKfhwAAAAUDA8ACnaYAAAAiYAORugDAAp2zAAAAh3FgA8AA/hsAwAKdwwAAAGFgA8AA/hsAAsACnecAAACCV10DwAD+vwFgA5HYAWoAYAPAAP8lecACnfUAAACik2ADwAD8VQFqwAKeBmADwAD8VQBgA4TsAT4DScACnhQhhMACnhnAEQC8PgE9HMACnjIuntsFAAOAwAKePcARAHGBwAKeRsARAH6CwAKeUsARAI4Cn5MpgleDwAKef8ARAJ6jpT9OwAKemsACnp8AAIGyYAPAAQACARzAAp7PFsACnr4WwAKetxbAAp6wFsACnqEunryihZVzqaiCSaqWgleoo4grAgACHMACnt6AwAKe1sARAHGCXwMAAxbAAp7rLoCsopCBwAKe8MARAH6CwAKe/MARAI4AkcFqwAKfDmADkhKBowCMcUrAAp8aARzAAp8hLqM8AgACNcACn0YAAAEAYAOE9AEfwAKfRoT+AQABhcACn1jAEQEqADUAAAABAFsBF8ACn1+GwAKfXcARAb6EWIHAAp9swBEAfoJahgDAEQG+gcACn3jAEQB+AKOwBqOSVcACn4zAAp+jwAKhzAAAoVwBasACn41gA8AA/2gCAAABA8ACn7DAAqHMAAAABAMDwAKfvAAAAIJvYAOE7ADAAp/QAAAAImADkboAwAKf3QAAAGFgA8AA/hsAAcACoAEAAACCV10DwAD+vwFgA5HYAWoAYAPAAP8leWADhOwBPgNOwAKgFcACoCAAAIdxYAPAAP4bARzAAqApFsACoCIuoQWihJkiAQABgMACoDTAEQJHALXbTsACoE7AAqBXAACH2GADkhIBFsACoGYWwAKgYYHAAqBZwBECVYKXkbyH2JG1ScACoHQiHMACoIGFwAKgeMARAsxIAQABasACoI1gA5ISgaMAwAD/dQEiHMACoKeFwAKgnsARAsxIAQABasACoLNgA5ISiRUAwAD/dQAhFsACoMouglCikz4BSsACoN4BHMACoOUuoUgDAAKAwAKhBcARAkccwAKhGYHAAqERwBECVYJfAwADFsACoSYugKyikITAAqErwBECmILAAqE3wBECYgCRwQGCV4PAAqFTwBECcqOTPgI9HMACoXAuntsEAAOBwAKhe8ARAlWEwAKhhMARApiCwAKhkMARAmIBgleDwAKh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AIC9YAPAAQACAMACsNoAAACDYmADwAD+GwDAArDmAAAAo/xgA8AA/hsAAGADhHQBPgFKwAKxBwE1wAKxEgAAAQBgA62lAR/AArESra4DAAOAwAKxOcARDkaBwAKxSMARDlQfwAKxW4i7AQABHMACsXguoXoBAAEcwAKxoC6hNAMAAxzAArIJasACscRdA5HRAWEDAWADwAEAAmADkbrAAEDYiD0BAAGCwAKyF8ARDmIAkdWDwAKyLsARDnJqwAKyRmADwAD+GxUAo5EAo7EAADUAAAABAFsBF8ACsluFwAKyWcARDqGEWIPAArJowBEOcoJahQDAEQ6hBqObVcACtKrAArTCwALCCQAAoXsBasACtKtgA8AA/2gCAAABA8ACtNfAAsIJAAAABgUFwAK03QAAAISTYAPAAPxVAMACtPEAAACAvWADwAEAAgDAArUBAAAAo/1gA8AA/hsAwAK1FgAAAKP+YAPAAP4bAMACtTMAAACCb2ADhOwAAcACtU8AAAChfGADiPwBagBgA8AA/yV5YAOEdAE+Ak7AArVqwAK1cgAAhCZgA8AAVrIBHMACtYcWwAK1dC6fpKKHnuYBAAGBwAK1mcARD6QAr5tJwAK1pCEcwAK1tjUAAAABAGADwABWsgGGwAK1qMAREAIjHMACtbGHAMAREEFIAQABKwAAKxbAArWxhwDAERBBg7XAAFa0AWADwABWskgBAAErAMAA/3U+AUrAArXzATXAArX+AAABAGADhK8BH8ACtf6EtwEAATXAArYeAAABAGADiJEBH8ACth6IuwEAATXAArZKAAABAGADhOwBHMACtkouoXoBAAEcwAK2ZS6hNAMAAxzAArasasACtotdA5HRAWEDAWADwAEAAmADkbqqTog9AQABgcACtrrAEQ+kAJHVgsACttPAEQ+0FsACtvuBwAK29sARD6RhwAEABgCjkQCjsTUAAAABAFsBF8ACtxaHwAK3FMAREMWEWILAArcjwBEPtIJahwDAERDFADUAAAABAFsBF8ACt0KHwAK3QMAREK2EWILAArdPwBEPtIJahwDAERCtADUAAAABAFsBF8ACt2qHwAK3aMAREJWEWILAArd3wBEPtIJahwDAERCVScACt5MiJcACt5+GwAK3l8AREAJgA8AAVv0AFsACt7oUwAK3ssAREAIGAWADwABW/aEHwABTZz4EPSMcwAK38RbAArffLp80oqNIAQABKwDAAP91F8ACt98unzQywAK4AmADwAEAAmADwAD+GwCioysBXQPAAP7xAmADwAEAAmADwAD+G0nAArgMHMACuCIWwAK4EC6fNKKjh2QBAAGBwAK4LsARD6QAwAD/BD4BSsACuD8BHMACuEYuo/sFAAUWwAK4aRTAArhhwBEQAgYBYAPAAFb9hJvAAFcBhMACuHDAEQ/UgcACuHzAEQ+kg8ACuI7AEQ/EHMACuLEWwAK4oC6fNKKjSwEAAYHAAriywBEPpADAAP8FAKOaPz0cwAK42RbAArjILp80oqOAvwIAAoHAArjawBEPpIPAArjiwBEPxADAAP8GScACuPoiFsACuQYUwAK4/sAREAIGAWADwABW/YQgr6oAFsACuRkUwAK5EcAREAIGAWADwABW/aP/r64+BT0cwAK5My6e2wQAAxzAArmSasACuVFdA5HRAWEDAWADwAEAAmADkbrAAEDYiD0BAAGBwAK5oMARD6QAkdWDwAK5s8ARD8RqwAK50WADwAD+GxUBglcxwAK58GADkdgBHMACunUcwAK6TmrAAroGXQOR0QFhAwFgA8ABAAJgA5G6wABBPYg9AQABgcACulzAEQ+kAJHVgl8DAAMWwAK6gi6ArKKQFsACuo8UwAK6h8AREAIGAWADwABW/Ydxr6IWwAK6oIHAArqbwBEPpGHAAQAGAJHBo6VOwAK6yMACutQAAJk0YAPAAFayARzAArr4FsACuvEWwAK64i6evKKFlXOpqJ+fAAAAAKC/TsACuzHAArs8AAChnGADhOwBHMACuz4uoakDAAImwAK7bQEWwAK7bYfAArthwBEUEYJJwABWuWADg5AcwAK7iBbAAruBLqEFooShpAIAAoPAAruYwBEPxDHAAru2YAOE7AE1wAK7zQAAAQBgA4a7ARzAArvNFsACu8YuoQWihKIpAgACgcACu+HAEQ+kKwC11zUAAAABAFsBF8ACu/8UwAK7/cARFKcIAIRYg8ACvAzAEQ/EgloUAMARFKcIAAC1xwGHcYPAArxFwBEPxKNMScACvGAlwAK8bxTAArxkwBEURQgAYAOuVT4BPRXAAryiwBEURQgcwAK8ry6hegEAARTAArzKwBEURQgAAKOxP0rAArzpATXAArz0AAABAGADraUBH8ACvPStrgMAAxbAAr0nFMACvR/AERACBgFgA8AAVv2Em8AAVwGEwAK9OsARD9QfwAK9Voi7AQABNcACvYsAAAEAYAOE7AEcwAK9ixbAAr2ELqEFooSh/QIAAisUwAK9ncARFEUIAAC1/DUAAAABAFsBF8ACvb0UwAK9u8ARFaEJAIRYg8ACvcrAEQ/EgloUAMARFaEJAAAANQAAAAEAWwEXwAK96RTAAr3nwBEVWgkAhFiDwAK99sARD8SCWhQAwBEVWgkAPgJJwAK+HyIiIRbAAr4kLoJQopMAIRzAAr5JhcACvj7AEQ/jSAEAASsAiQAAIRzAAr5xFsACvmEuhuiirJtJAgAChcACvn3AEQ/jFsACvpcWwAK+kRTAAr6JwBEQAgYBYAPAAFb9hJvAAFcBgpSDsQCb9j4BPRzAAr65FsACvqounryihZ7bBQAEHMACvxNqwAK+2V0DkdEBYQMDYAPAAQACYAOI/GADiPxgA5G6wABSRog9AwADgcACvyHAEQ+khcACvyfAEQ/jFsACv0EWwAK/OxTAAr8zwBEQAgYBYAPAAFb9hJvAAFcBgpSDsQCR1YPAAr9WwBEPxGrAAr92YAPAAP4bFRbAAr+OLoCsopABglcxwAK/qmADkdgBHMACwAJqwAK/wmADkcXAAFK+gl8DAAMWwALAFxTAAsAPwBEQAgYBYAPAAFb9hGavoxbAAsAoFMACwCDAERACBgFgA8AAVv2Hca+iasACwDRgA8AA/hsVAJHNqfU/SsACwGIBNcACwG0AAAEAYAOtPQEfwALAba1BAgACFsACwIwUwALAhMAREAIGAWADwABW/YSbwABXAYTAAsCTwBEP1AA1AAAAAQBbARfAAsCrh8ACwKnAEReuhFiDwALAuMARD8SCWjUAAAABAFsBF8ACwNWHwALA08ARF66Ek4DAAsDjwBEPlIR2hwDAEReuPgFKwALBCwEcwALBEi6heQIAAhzAAsE1LqF6AQABHMACwVAuoTQDAAMcwALBlGrAAsFyXQOR0QFhAwFgA8ABAAJgA5G6wABReYg9AQABgcACwaLAEQ+kAJHVgsACwbfAEQ+0FsACwduBwALB1sARD6RhwAEABgCjkQCjsYLAAsHvwBEPtACjmAajnFXAAsIOwALCJsACxLEAAKGFAWrAAsIPYAPAAP9oAgAAAQPAAsI7wALEsQAAAAQDBMACwkgAAACEk2ADwAD8VQDAAsJhAAAAmTRgA4PiAMACwngAAABbYAOFtgDAAsKOAAAAh3FgA8AA/hsBasACwptgA8AA/huBngBgA4R0AT4DScACwqYiFsACwrEWwALCqi6CaqKGhCKvpwAhFsACwsmBwALCvcARGQKEIoPsPgFKwALC2gEcwALC4S6j+gQABIHAAsMJwBEZAibAAsMgAYLAAsMgwBEZEGADrLQcwALDNS6hegEAARzAAsNQLqE0AwADasACw3JgA5HFmB+DwALDqsARGR0WwALD2hbAAsPVFsACw9CBwALDxMARGQKAvYOUgL2IymHAAQAGAKORAKOxg8ACw+7AERkdAKOZPz0XwALEBS6hDSqilErAAsQwATXAAsQ7AAABAGADrhUBH8ACxDuuGwIAAoHAAsRUwBEZAibAAsRhAYLAAsRhwBEZEGADrLQANQAAAAEAWwEXwALEdITAAsRywBEaE4RYg8ACxIHAERkdglo1AAAAAQBbARfAAsSUhMACxJLAERoThJOAwALEosARGPKEdoQAwBEaEwajnVXAAsS2wALEzsACxw4AAKQAAWrAAsS3YAPAAP9oAgAAAQPAAsTpwALHDgAAAAMCA8ACxP0AAACZNGADg+IAwALFFAAAAFtgA4W2AMACxSoAAACHcWADwAD+GwFqwALFN2ADwAD+G4GeAGADhHQBPgNJwALFQhzAAsVTFsACxUYuoQaiiKQBAgACFsACxXoWwALFcy6CaqKGgL2vshbAAsWRFsACxYyAwALFgMARGsaAvYOUgL2IygDAAFMsPgNOwALFpMACxasAAGFgA8AA/hsBFsACxcMWwALFvhbAAsW5gMACxa3AERrGgL2DlIC9iMphwAEABknAAsXRHMACxdyDwALF1cARG1VIAQABkwDAAP8/PYvAAsXiwBEbVRbAAsXyJ5pZYcABAAY/PRzAAsYALp7bAwADasACxhFgA5HFoS6CwALGK8ARGuGDwALGN8ARG1UAo6U/PRfAAsZ+LqENKqKUSsACxqkBNcACxrQAAAEAYAOt+gEfwALGtK4AAgACgMACxtPAERrGJsACxuABgcACxuDAERrUYAOstAA1AAAAAQBbARfAAsbzg8ACxvHAERwBhFiCwALHAMARGuGCWoMAwBEcAQajnlXAAscTwALHJMACx5EAAKQCAWrAAscUYAPAAP9oAgAAAQPAAscywALHkQAAAAEBAcACxzkAAACSqWADnyIAAFwBPgI9HMACx0YuoU8BAAEnhRIAo6g9HMACx2IuoSwBAAEfwALHa6PKAgACgMACx3TAERyRFsACx4GAwALHe8ARHJGHcZ8rAACirwajn1XAAseWwALHp8ACyBYAAKQDAWrAAseXYAPAAP9oAgAAAQPAAse3wALIFgAAAAEBAcACx74AAACSqWADnyIAAFwBPgI9HMACx8suoU8BAAEnpAQAo6g9HMACx+kuoSwBAAEewALH8sAAVmIBAAGAwALIC8ARHR4AAKKvBqOgVcACyBvAAsgswALJwwAApAUBasACyBxgA8AA/2gCAAABA8ACyEXAAsnDAAAAAQEBwALITAAAAJKpYAOfIgAAXAE+AUnAAshZFsACyGQWwALIXS6CaqKGhmWvsz4BPRzAAsh2LqEsAQABasACyIVgA8AAWz7AAMaHAKKvPgE9HMACyKcuoSwBAAEcwALIsxbAAsisLqEFooShOgMAA4DAAsjKwBEdmzHAAsjmYAOHogEcwALI9C6iQgMAAhzAAsk+asACySFdA5HRAWEDAWADnyJgA5G6s7uIPQEAAYDAAslMwBEdmwCR1RbAAslqgMACyWTAER2bh3GfKwFhFsACyZSAwALJjsARHZthnzujlisAtekAoq8Go6FVwALJyMACyePAAs7QAACkBwFqwALJyWADwAD/aAIAAAEDwALJ8sACztAAAAACAgLAAsoJAAAAlahgA8AAWGAAwALKGgAAAKQIYAPAAPxVAABgA8AAWGABPgNOwALKRsACyk4AAIQmYAPAAFgdARbAAspbgMACylDAER60hCbAAFhiScACymgiJcACynSCwALKbMARHt9gA8AAV/IAFsACyp8WwALKkxTAAsqLwBEe3wIBYAPAAFfynwvAAFf2pAnAAFbSPgZOwALKy8ACyuAAAKQKYAPAAFhDASbAAsrLARbAAsrqFMACyuLAER7fAgFgA8AAV/KfC8AAV/ZgA8AAWENOwALLC8ACyxkAAIauYAOJlgEWwALLMIPAAssbwBEfS4DtwABYTk7AAstQAAAAImADkdgAScACy18iIRbAAstkLqEpoqsAJcACy5kWwALLkoTAAsuEwBEfh4RXgllgA4McPgE9jcACy63AER+tHMACy+BqwALLvWADkcXAAJGfgl8DAAMWwALMBYDAAsv6wBEetIRmwABYZBbAAswlgMACzBrAER60h3HAAFhjFsACzFAWwALMS4TAAsw9wBEfh4C9iZphwAEABgCRzUnAAsxmHMACzHoWwALMai6hGKKgSAEAAWrAAsyNYAOv68AAwuYAwAD/dT4BPY3AAsyhwBEfrRzAAszWasACzLFgA5HFwACRdIJfAwADFsACzPuAwALM8MARHrSEZsAAWGQWwALNG4DAAs0QwBEetIdxwABYYxbAAs1GFsACzUGEwALNM8ARH4eAvYmaYcABAAYAkc0+AUrAAs1mAYDAAs1twBEetD0cwALNhy6e2wMAAxbAAs2ahcACzZLAER+tiOuR3RbAAs2xhcACzanAER+th3GR2xbAAs3FhcACzb3AER+tYZHcAKOlSsACzdQBH8ACzd/AAFhrAwADNcACzf0AAAEAYAPAAFfyAR/AAs39wABYBwIAAhbAAs4chMACzg7AER+HgL2JmisANQAAAAEAWwEcwALONobAAs40wBEhTZ7hAQABH8ACzj/AAFfNAgACFsACzmCEwALOUsARH4eAvYmahcACzmbAER+tAADAAFf4hgDAESFNFsACzoaAwALOe8ARHrSHccAAWGMWwALOp4DAAs6cwBEetIRmwABYZAA/SsACzrsBgMACzsLAER60BqOiVcACztXAAs7swALRRgAAoaMBasACztZgA8AA/2gCAAABA8ACzwPAAtFGAAAAAgICwALPFQAAAFtgA4W2AMACzysAAACCb2ADhOwAAGADhOwBPgVJwALPPRzAAs9LgMACz0HAESI2SAEAASsAwAD/dUrAAs9UAYHAAs9bwBEiQz9OwALPfMACz4gAAIXXXQPAAP6/AWADhOwBHsACz5bAAP7FAQFgA4TsARzAAs+zFsACz6wuoQWihKNCAQABgMACz8fAESI2ALXLAEbAAs/YwALQGMACz+0AAACFdWADhcQAHMACz/0WwALP9i6hBaKEo0MBAAGAwALQDMARIjYAtco+AT0cwALQLILAAtAgwBEih1YBAAEWwALQNoPAAtAwwBEi2YCWhccAwAD+0EbAAtBIwALQesAC0FgAAAAfYAOE7AAWwALQcILAAtBkwBEih5jgwAD+8D4BPYnAAtCCwBEiQx/AAtCTh38CAAIfwALQpoi7AwABg8AC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rQDAAP7PSsAC52kBgcAC53DAETQiBqOvVcAC537AAueRwALpGgAAoaIBasAC539gA8AA/2gCAAABA8AC567AAukaAAAAAwEBwALntgAAAIC9YAPAAQACAALAAufKAAAAhpJgA8ABAAIBagBgA8AA/yV5wALn2gAAAIeYYAPAAPxVAWrAAufjYAPAAPxVAGADwAEAAgE+AknAAufxHMAC5/+BwALn9cARNW1IAQABKwDAAQARPgNOwALoFsAC6BoAAJomYAODHAEWwALoKRbAAugcLqEGooiaJsAAUyFJwALoNILAAug4wBE1hj4CPYvAAuhLwBE1yxbAAuhVg8AC6FHAETXLhPODPUPAAuhpFsAC6HSDwALocMARNcuE9oNAPgE9i8AC6JTAETXLFsAC6J6DwALomsARNcuE84M9Pz2JwALowsARNW0WwALo0oPAAujOwBE1y4C9gyI/SsAC6OIBIxbAAujugMAC6OnAETVcgVXAAQAIgcAC6PjAETVtJMAC6RYDgcAC6QbAETVtJ4FqgMAC6RHAETVcAWADwAEAAgajsFXAAukfwALpNsAC6gUAAKM8AWrAAukgYAPAAP9oAgAAAQPAAulNwALqBQAAAAICAsAC6VkAAACkFGADhOwAwALpaAAAAIdxYAPAAP4bAABgA4TsAT4CScAC6XoWwALpfi6CUKKTSsAC6YoBgMAC6ZHAETbpP0rAAumgATXAAum/AAABAGADhOwBHsAC6b+vBQEAAYDAAunXwBE26QA1AAAAAQBbARfAAunqgsAC6ejAETc1hFiBwALp98ARNveCWoIAwBE3NQajsVXAAuoKwALqIcAC6s0AAKF6AWrAAuoLYAPAAP9oAgAAAQPAAuo7wALqzQAAAAEBAcAC6kcAAACD82ADhOwAAGADhOwBPgNJwALqUxbAAupXLoJQopNKwALqYwGAwALqasARN7I/TsAC6pfAAuqiAACkFWADrlUBJsAC6pcBgMAC6qTAETeyYAOuVUrAAuquARbAAurAgcAC6rXAETfopBSuWQajslXAAurSwALq6cAC7BoAAKM9AWrAAurTYAPAAP9oAgAAAQPAAusJwALsGgAAAAQEBMAC6xUAAACkFGADhOwAwALrLQAAAJk0YAODkADAAutEAAAAW2ADhbYAwALrUwAAAIdxYAPAAP4bAABgA4TsAT4C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ywAAAIQmYAPAAFWAABbAAEfjFsAAR9YupD2kGynAAP8UPgE9HMAASAOBwABH9cARiT9WAQABFsAASA+CwABIB8ARiXGESMAAVZIAwAD/wEbAAEgnwABIT8AASDYAAACkdWADipQAFsAASEAupEakJD4BPRzAAEhngcAASFnAEYk/l1IBAAEWwABIeILAAEhxwBGJzIb1ipgAwAD/xEbAAEiSwABItcAASJ8AAACIxGADgowAgcAASKbAEYk/PgE9HMAASM+AwABIv8ARiOVWAQABFsAASNeCwABI08ARihqEfIKOAMAA/8A/BqQtVsAASQ/AAEkcwABOCgAApGQAAAABA8AASTbAAE4KAAIAAQEBwABJUwAAAKRaXQPAAP6/AWADwABVgAAAXQPAALrjAVwBPg5OAAAAAYHKXQPAALopAVwBH8AASWrAALo2AAFcAABOAAAAAIHLXQPAALrfAVwATgAAAACBzFsATgAAAACBzVsATgAAAACBzlsATgAAAACBz1sBk04AAAAAgdBbAE4AAAAAgdFbAE/AAEkcAAAAAIHSWwADwABJNsAATgoEAAADAAMAAAAAgdNbAAAAAACB1FsAAAAAAIHVWwAAWwFLPgNBPgFJwABJcCEcwABJghbAAEl0LqRGpCRIAQABKwDAAP7pPgROwABJmMAASacAAKR2YAPAAPxVASpGwABJtsAASd7AAEnFAAAApHVgA4qUABbAAEnPLqRGpCQ+A07AAEntwABJ+wAApHdgA8AA/FUBKkbAAEoMwABKMsAAShkAAACIxGADgowAFsAASicUwABKIMARi4kOAIb1ipg+AUnAAEo+IRzAAEpiFsAASlkWwABKUhbAAEpDLqQ7pBmVc6Aunt6go4dkAQABFsAASnIUwABKbsARi8EQAIR8go4AwAD/BD4EPRzAAEqsFsAASqIWwABKmxbAAEqMLqQ7pBmVc6AuhvWgpVYBAAEUwABKsMARi8EQAADAAP7QPRzAAErRFsAASsIupDukGZ6/AQABFMAAStzAEYvBEAAAoDU9HMAASv6AwABK7sARioVWAQABHMAASxgWwABLERbAAEsCLqQ7pBmVc6AuntwCAAIWwABLIRTAAEsdwBGLwRAAhHyCjhzAAEsslIHGAAAAAMAA/j4AoLQAwAD+0D0VwABLPsARi6QPKT9JwABLchTAAEt2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TsAAWibAAFotAACBdl0DwAD+vwFgA4KMAR7AAFozwAD5uQEBYAOCjAGTAE7AAFpawABaZQAApH1dA8AA/vECYAPAAQCDYAOCjAEywABadWADwAEAg2ADgowATsAAWo/AAFquAACkfl0DwAD+8QJgA8ABAINgA4KMATLAAFq+YAPAAQCDYAOCjABOwABa2MAAWvwAAKR/XQPAAP7xAmADwAEAg2ADgowBMsAAWwxgA8ABAINgA4KMAEbAAFsUwABbPMAAWyEAAACESGADgowAgMAAWyzAEZbdPgI9HMAAW04UwABbRMARl7AIAIC/AgACFsAAW1cUwABbT8ARmEULAIR8go4UwABbZMARmEULAADAAP8GScAAW3McwABbkBbAAFuJFsAAW38UwABbd8ARmEULAIR8go6BvMABAIlIAQABJ4eNAMABABE+Aj0cwABbrIfAAFulwBGXhVYBAAEUwABbsMARmEULAADAAP7QPTUAAAABAF0DwAD+vwFgA4KMAYbAAFvCwBGXVyMcwABb2hQAwBGY9AwASAEAASsAACscwABb2hQAwBGY9AwAVgEAARTAAFvewBGYRQsAAMAA/tABXD4CPRzAAFwdFMAAW//AEZffCQCAvwIAAhbAAFwmFMAAXB7AEZhFCwCEfIKOFMAAXDPAEZhFCwAAwAD/Bj0cwABcZxTAAFxEwBGYDgoAgL8CAAIWwABccBTAAFxowBGYRQsAhHyCjhTAAFx9wBGYRQsAAMAA/wZOwABco8AAXKwAAJvcXQPAAP6/AWADwAEAgwEewABcssAA+bkBAWADwAEAgwGTAD0cwABczBTAAFzDwBGZvgsAgKUBAAGBwABc08ARlvIAwAD+0UbAAFzhAMAAXPUAAACevGADwABVgACCwABdB8ARlwlBPgRJwABdICIcwABdPhbAAF03FsAAXTMUwABdJMARmhYMAICswABVk4G8wAEAiUgBAAEnh40AwAEAEQAhFsAAXVsUwABdTMARmhYMAISTwABViz4BQsAAXXIAP07AAF2SwABdlgAAiMRgA4KMARbAAF2nFMAAXZjAEZoWDACESMAAVZI9HMAAXdQUwABdtsARl98JAIC/AgACFsAAXeQUwABd1cARmhYMAICswABVkxTAAF3rwBGajA0AAMAA/wY9HMAAXgAUwABd9sARl7AIAIC/AgACFsAA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e8AARIsAAAAAAAAAYAPAAE4HAUrAAESBARzAAESGgsAARIHAEhF7gp8AAAAAuYMApJIBpYoWwABEt4LAAESywBIRe5Z7uYG+mQCkkgC27AC+mACkkgak9lrAAETvwABE9MAASAoAAKVlAAAAAQPAAEUAwABICgAAAAQDA8AARRQAAAClWWADvEYAwABFMQAAAKUcYAO+igDAAEVQAAAAglpgA746AAHAAEVoAAAApWZhAwFgA76KXAFqAGADwAD/JXlcAT4BPRzAAEWXFsAARY4ultikzJbZAgFgA8AA/yUCJ6VlNMAARbYDwABFtsAASAUAAAAAAAAAYAPAAP8lAT4HPRzAAEXKgcAARcHAEhMapYsDAAMWwABF2i6lFKTCgsAARfTAEhMoHMAARjYWwABGHYDAAEYKwBITDIb1vEqAqwEBYAPAAQCDATTAAEY6A8AARjrAAEZpAAAAAQEBwABGSQAAAIRIYAO+BAAAYAPAAQCDAUrAAEZVARbAAEZdhMAARlXAEhPvpYy+BgDAAP6IAL6WPRzAAEZ8FsAARnMugtKk0aWNAAAAAKVKPRzAAEaQLqWGAgABgcAARpvAEhMaAaVmg8AARrHAEhM3pPU9F8AARs2BwABGxMASExqljim+jT0cwABG8oHAAEbpwBITGoKMAAAAAL6XPRzAAEdtFsAAR14upRSkwqWPAQABFsAAR4OBwABHesASExqlkL6SAMAATmhAIhbAAEecLqUlpNcBHMAAR8SBwABHu8ASExqlkQEAAYDAAEfqwBITDAC+msAAR5zAAEf9AACkkgak91rAAEizwABIs8AASPcAAKVqAAAAAQPAAEi9wABI9wAAAAEBAcAASMcAAAClHGADvooAAFsBPgE9HMAASOCAwABI18ASFRalkgAAAAC+mwak+FrAAEj8wABJAcAASdMAAKVnAAAAAQPAAEkXwABJ0wAAAAEBAcAASSEAAAClHGADvooAAFwBPgJAHMAAST4WwABJOC6lJKTWSAEAAWrAAElBYAPAAP4bFQDAAP8/wABJOMAASVABJMAASWwCJ6WTFsAASWYupSSk1j0cwABJfBbAAElzLoLSpNGllAMAAyellRbAAEm6FsAASaiAwABJn8ASFWellr6TYcAA/qAnpZcApUsGpPlawABJ2MAASd3AAEppAAClcwAAAAEDwABJ8MAA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wBKJ60gBAAErAAArFomOgQDAEonrhEim6wFgA4KMBqbdYonfieSKHgAAp4oAAAABA4nzih4AAAABAQGJ+wAAAICsYAPAAQACAABgA8AA/FUBSooDARyKDhaKAy6Iw6bQpteHZAEAAYCKGsASilMAwAD/BAam3mKKn4qliw4AAJxvAAAAAQOKrYsOAAAAAgICirUAAACESGADwAEAAgCKxQAAAIaSYAPAAQACAABgA4McAT4BSorWARyK9xyK3S6nh6bQAQABgIruwBKKqACm2pxvAQABgYsAwBKKtgCm9Aam32KLSotQi7oAAJyIAAAAAQOLW4u6AAAAAgICi2MAAACESGADwAEAAgCLcwAAAIaSYAPAAQACAABgA4McAT4BSouEATUAAAABAGADpukBHIuVFouLLojDptCm10sBAAGAi5bAEosUAMAA/wUjHIugggDAEos9SAEAASsAACsci6CCAMASiz2ciAEAAYGLrMASiyIApvUBYAODHAam4GKN+o4BjosAAJxoAAAAAQOOCo6LAAAAAwMDjhIAAACESGADwAEAAgCOIgAAAIaSYAPAAQACAI40AAAAp4tgA8ABAAIAAGADg5ABPgFKjkYBHI5nHI5NLqeHptABAAGAjl7AEouwAKbanGgCAAKBjnHAEou+go58wBKLzACm9gam4WKOyI7Pj1oAAKeMAAAAAQOO249aAAAAAwMDjuMAAACESGADwAEAAgCO8wAAAIaSYAPAAQACAI8FAAAAp4tgA8ABAAIAAGADg5ABPgFKjxcBNQAAAAEAYAOm6QEcjygWjx4uiMOm0KbXSwEAAYCPKcASjDEAwAD/BSMcjzODAMASjGhIAQABKwAAKxyPM4MAwBKMaKeMAgACgY9AwBKMP4KPS8ASjE0ApvcBYAODkAam4mKROZFAka4AAJxjAAAAAQORUZGuAAAAAgICkVkAAACESGADwAEAAgCRaQAAAKeLYAPAAQACAABgA4OQAT4BSpF7ARyRgi6caAMAA4CRjMASjOJqkZVgA8ABAALAAOA7gZGfwBKM8ACm4Aam42KR85H6kocAAKeNAAAAAQOSDpKHAAAAAwMDkh0AAACESGADwAEAAgCSLQAAAIaSYAPAAQACAJI/AAAAp4tgA8ABAAIAAGADg5ABPgFKklEBHJJYLqeMAwADgJJlwBKNTmqSbmADwAEA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p/cABqhbacAAUhHAAFIRwABSUgAAhMoAAAABA8AAUh3AAFJSAAAAAQEBwABSJgAAAIPzYAOC9wAAWwE+AUrAAFIyARzAAFI5LocnAQABgMAAUknAEwVOAKhNAAASxQQAEsWSABLFygASxgIAEsY6ABLGpgASx/YAEslzABLJwAASyfwAEspiABLKqgASyyEAEsucABLMEQASzKQAEs0LABLNkAASzecAEs5cABLOpQASzwwAEs+eABLQIgAS0JYAEtEMABLRggAS0dsAEtJgABLTDwAS04QAEtQVABLUpgAS1VMAEtbvABLXYgAS2AsAEthUABLYqQAS2OQAEtkfABLZfAAS2h0AEtq+ABLbewAS2/IAEtxLABLcpAAS3RMAEt1cABLdpQAS3e4AEt43ABLecgAS3v4AEt91ABLfzgAS4EMAEuC4ABLg8wAS4Y4AEuJfABLivAAS4zMAEuOqABLktQAS5W8AEuazABLncQAS584AEuhnABLoxAAS6WcAEupMABLqwwAS61IAEu08ABLtyAAS774AEvHKABL0CAAS9pAAEvj/ABL5pQAS/DMAEv1IABL9yQAS/iAAEv5yABL+xAAS/xYAEv9oABL/ugATACkAEwCGABMA3QATAV4AEwILABMCVgATAq0AEwMEABMDYQATA9AAEwQnABMEpwATBScAEwV+AAAAagKoXmnAAFJXwABSXcAAU64DqDkAAAFgAafmAAAAAQWoYmnAAFKHwABSh8AAU2IAAAADwABSl8AAU2IAAAACAAACwABSvQAAAJ8hXQPAAP7xAmADiZZgA4j8AWoAYAPAAP8lecAAUtoAAACoI2ADwAD8VQFqwABS7WADwAD8VXdgA6heAT8BCQDAAFL8qF0CAAACnyGAwABTIcATB3CoI4HAAFNRwBMHkgEGqGBpwABTZ8AAU3zAAFOsAACoMQFqwABTaGADwAD/aAIAAAEDwABTkcAAU6wAAAABAQHAAFOfAAAAg/NgA4TBAABgA4JTAUrAAFOoASsAABMH2AATCCYAAAABAAAAAWkAEwg2ABLDEgATBy8AEwgzAAAAAgATCDYAAAAAAAIGqGMAagAABYDaAACCLgABAQyGj4TXhoSGi4aVhpGGiIamhrOGqYaiho2B8QAAmxoAAQEClaSa4IIvAACbvwABAQGbKYJoAADAAFG+AAEBAqg6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sgBFrL0BrMasyAAAYmADwAD+GwGTARysz4SszcATjkZjAQABFqzXgKzRwBOMkWHAAP7vAMAA/0kBjKzfwBOORhys4ISs38ATjkZkAQABlADAAP9BPgNOrPOs+AAAgL1gA8ABAAIBHKz/gKz6wBOMkUsBAAGErQDAE45GAMAA/s5OrRKtHgAAnwtgA8AAVrIBHK0sFq0lLptmqRZLAQABha0twBOOlwDAAP8FSa06Fq1Khq0+wBOOwYQewABWzj4BPYqtXsATjPMpPgE9HK2Og62HwBOOFoC/AgACha2PwBOOl4atl8ATjsEAwAD/BkqttgEjgq29wBOM8x+t1alFBgAABp8zga3vwBOMxptmg64LwBOOFoSJFq4sLqiyqRKpGIRXFq5NLoRXqRmkJRaubC6os6kaotAWrpwuotCpIS4BYAOpHwAAE3WRABN1zAATdgEAE3aHABN24QATdzsAE3eGABN4WgATeMMAE3mSABN59gATetIAE3wwABN+TwATgG4AE4DZABOBsgATgnMAE4MjABODYwAThEQAE4XfABOGaQAThyoAE4jzABOJZwATilwAE4xrABOPhQAAABwCqUlwrsGux7BIA6jMAAABYAHAAP9oAAABBKlLcK7krukJnzIAYAOpHwABBalScK7uru6vBgAAAAOu+q8GAAAAAQEBrwAAAASfMmADqR8AAGADqUkBPwIIAalLgADAE5BBCQGu7sAA/34AAAAABAapTXCvC68Qr10AAISWAAAAAQOvGa9dAAAAAgICryEAAACAvWADwAEAAgCvLwAAAIQmYAPAAFayAABcAT4BPRyvSRavRBavPi6fMqlLnzOpFYC/AgACgK9KwBOQiYGvUsATkJcAwAD/BgapTnCvYq9nr7YAAKiVAAAAAQOvcK+2AAAAAgICr3gAAACAvWADwAEAAgCvhgAAAIQmYAPAAFayAABcAT4BPRyvohavmxavlS6fMqlLm2apFoC/AgACgK+jwBOQ8oGvq8ATkQAAwAD/BgapT3Cvu6/AsAwAAISZAAAAAQOvzLAMAAAAAQEBr94AAACEJmADwABTxAAAXAE+AT0cr/MWr+0unzKpS4SZAQABgLAAwBORWwCpOgapUHCwEbAisEYDAEsAAAABA7AksEYAAAABAQGwLAAAAIC9YAPAAQACAABgA8AAVrIBSrA1ARywQBaw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BATAAEtVAAAAhvddA8AA/r8BYAPAAFfPAMAAS2YAAACAvWADwAEAAgDAAEtzAAAAgKxgA8ABAAIAwABLfAAAAKkoYAPAAP4bAABcAT4CPRfAAEuNLqkLgcAAS5rAE9uxqbZJwABLpCEcwABLrILAAEuowBPbwUgBAAErAMABABE+BD0XwABLvS6fQRzAAEvJLmwDAAMWwABL1i6ArKnRgsAAS9vAE9vBg8AAS+DAE9vRAKnZqbdOwABL9sAATAEAAKScYAPAAQCDARzAAEwDLmwDAAMWwABMCy6EZqmwgsAATBTAE9vBg8AATBnAE9vRAKnZTsAATDrAAExCAACESGADwABVgAEcwABMSxbAAExELpVzqaie3AQAAhbAAExQLp9BqbeDwABMW8AT29EChGaEwABMecAT3E+e3S6gtEnAAEycHMAATK0WwABMpxbAAEygLpVzqaiDHqCsSAEAAS4AwAD/dT4BPRfAAE0pFsAATSIulXOpqIMehcAATTHAE9yMoKw/Pwap4HLAAE1PwABNVMAAUdYAAKk4AAAAAQPAAE1dwABR1gAAAAUFBcAATWUAAACpCmADwAEAAgDAAE2RAAAAhvddA8AA/r8BYAPAAFfPAMAATaUAAACiYmADwAD+GwDAAE28AAAAgpRgA8AAWB0AwABN0gAAAKk5XQPAAP6/AWADqmUAAFwBPgFGwABN5MAATgfAAE3zAAAAgVRgA6plAITAAE37wBPdjT4ITsAAThTAAE4cAACEImADwAD8VQEhHMAATjQcwABOKILAAE4ewBPdbYN8AQABasAATipgA8AA/hshAMAA/jNIAQABkwDAAP8/TsAATkXAAE5NAACEIGADwAD8VQEhHMAATmUcwABOWYLAAE5PwBPdbYN8AQABasAATltgA8AA/huDcADAAP4zSAEAAZMAwAD/P07AAE52wABOmgAAqTpgA8AA/FUBIobAAE6cwBPdygGHwABOp8AT3hJOwABOvAAAAKBZYAOfIgBJwABOziIUwABO0sAT3lsIAAEiHMAATwmDwABPBMAT3X1IAQABKwDAAP91ACEWwABPFS6CUKmzPgE9FcAATyzAE96DCRbAAE8+hcAATznAE92wqTuqaT9JwABPXiEcwABPbRTAAE9iwBPegwkASAEAASsAwAD/dT4DTsAAT+rAAE/zAACdcGADnyIB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INjAFGe4h57AAFa+PgE9i8ABIPvAFGgdNcABIQwAAAEAYAOGDgEfwAEhDIYgAgACJsABIS4BFsABIS6BwAEhIsAUZ7iCScAAVrlgA4PigsABITbAFGfjADUAAAABAFsBF8ABIUuEwAEhScAUaFGEIimGEoQAwBRoUT4BPYvAASFuwBRoHTXAASF/AAABAGADhfsBH8ABIX+GDAIAAibAASGcARbAASGcgcABIZDAFGe4gknAAFa5YAOEJYLAASGkwBRn4wA1AAAAAQBbARfAASG5hMABIbfAFGi+hCIphf+EAMAUaL49HMABIdsWwAEh0y6ESKm8hGkBAAGDwAEh6cAUaB0Agq4GqgpywAEh/cABIgLAASiZAACpQQAAAAEDwAEiEcABKJkAAAACAgLAASIaAAAAhEhgA4KMAMABIj0AAACpp10DwAD/swFgA6mlAABcAT4FScABIkkhHMABIlOBwAEiTsAUaXRWAQABLgDAAP/APgFKwAEiZgA/TsABIxnAASMlAACpMmADwAD+GwGTTsABIzLAASM+AACpqGADwAD+GwGTQ8ABI0ciHMABI1qCwAEjTsAUabZjAQABFsABI2QWwAEjXC6Z06mtYcAA/u8AwAD/SQEcwAEjeoPAASNuwBRpy2MBAAEWwAEjhBbAASN8LqkGqa5hwAD+7wDAAP9JQT4BScABI5QiHMABI6SDwAEjmMAUacuBbQEAARbAASOvFsABI6cuqQaprmHAAP7vAMAA/0wBIhzAASPQgsABI8TAFGm2YwEAARbAASPaFsABI9IumdOprWHAAP7vAMAA/0kAHMABJBIWwAEkBxzAASP5FsABI/IumdOprUsBAAGCwAEj+sAUabYAwAD+zodxwABT+mMBAAEWwAEkOxzAASQtFsABJCYuqQaprksBAAGDwAEkLsAUacsAwAD+zodxwABT5wDAAP9JPgNOwAEkb8ABJHYAAISvYAPAAFPxARzAASR/FsABJHgumdOprUsBAAE1AAAAAQBgA8AA/hsBgsABJIDAFGm2NQAAAAEAYAPAAP4bAYrAASSAwBRpthzAASSLhADAFGsvZAEAAZQAwAD/QYQAwBRrLwDAAP7OScABJOIhHMABJP4WwAEk7YTAASTmwBRrCKk2wABT/EgBAAErAMABABE+Aj0cwAElEy6ppgEAARbAASUuhMABJSfA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AAABAQHAANj0AAAAg/NgA4UXAABgA4m6AT4EScAA2QAlwADZEhbAANkJgMAA2QTAFdJZhZeFGWADhv4+A0nAANleHMAA2XIWwADZYi6qnKsiSAEAASsAwAD/dT4BSsAA2YUBHMAA2YwuqrACAAKAwADZmsAV0lknquoAqzI/RsAA2dzAANoTwADZ7QAAAYSbYAODrwAWwADaDRbAANoGFsAA2fYuqpyrIoSLq4WDaMAA/xM+AUnAANodHMAA2iwWwADaJ4HAANohwBXS24C9g5RIAQABFsAA2jSAwADaL8AV0lmAvYUaAIjTPgFKwADaRgEcwADaYxbAANpdFsAA2k0uqpyrIoSLq4VLAQABgcAA2mTAFdLbAMAA/wU/SsAA2oQBHMAA2osuqrACAAKAwADamcAV0lkkwADa6wMnqusWwADazoDAANrJwBXSWYC9hRonquwAqzI/TsAA2wjAANsRAAGFl2ADiboBHMAA2xMuqquq0QEAARbAANsvgMAA2yrAFdJZhZeFGQCrPUnAANs+IiXAANtLgcAA20LAFdOuYAOJ8wAcwADbbxbAANtqFsAA22WAwADbYMAV0lmAvYUagL2IykgBAAEnYQDAAQARPgJJwADbhBbAANuILqqpqyw+AUrAANunARzAANuuLp1OAQABH8AA27+q3gEAARbAANvkFsAA294UwADb1cAV064BAWADifOAlonIYcABAAYAAKt3P0rAANv8ARzAANwDLp1OAQABH8AA3BSJ5wEAARbAANwvFsAA3CkUwADcIMAV064BAWADifOAlonIYcABAAYAAKt3ScAA3EQWwADcSC6qqKsrPgFKwADcZQEcwADcbC6qsQIAAoDAANx4wBXSWR/AANyMhScDAAMcwADcmC6qsgEAAYHAANygwBXTrgCrNBbAANywgMAA3KvAFdJZgL2FGhbAANy7gMAA3LbAFdJZhZmFHQAAqzNJwADc2SXAANzmgcAA3N3AFdOuYAOJ0D4BSsAA3P8BHMAA3QYugcUCAAKAwADdDcAV0llqwADdE2ADkcWfLQCrMT9KwADdOQEcwADdQC6BxQIAAoDAAN1QwBXSWRzAAN2CasAA3V5dA5HRAWEDAmADwAEAAmADibpgA5G6m76IPQIAAhbAAN2nFsAA3aKAwADdncAV0lmAvYUagL2IyoHAAN2twBXTrgCR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zQAAYAOJ6AE+AknAAQ6zFsABDrcuqqmrLD4BScABDzciFsABD0GAwAEPO8AV+PKqwcAA/2QAIR7AAQ9OwAD3/AIAAoDAAQ9YwBX48hzAAQ9fKAAAAAAAAAAAgcYAAAAAwAD84AA+Ak7AAQ90wAEPdgAAYmADwAD+GwEcwAEPfoDAAQ94wBX48qrjAAAAAMAA/1dJwAEPjxzAAQ+ZgMABD5PAFfjySAEAARzAAQ+egcABD5zAFfloqn0AAAAAwAD/WADAAP8/SsABD6oBH8ABD7Wq3gEAAYHAAQ/LwBX5aAA/Pz9KwAEP4QEfwAEP7InyAQABgMABD/vAFfjyAAarbnTAARAKwAEQD8ABEqkAAKr1AAAAAQPAARAYwAESqQAAAAICAsABECIAAACGHWADiboAwAEQNQAAAIKUYAOI/AAAYAPAAPxVAT4DTsABEErAARBXAACq/mADiPwBHMABEGKAwAEQWcAV+iSGugEAARbAARBqLoboqxUAicBJwAEQgBbAARCELqqpqyw+AknAARChIhzAARCygsABEKXAFfpLSAEAARbAARDFFsABELUuhuirFYWdm9AAiQAAHMABEN+BwAEQ2sAV+jJIAQABFsABEPIWwAEQ4i6G6KsVhf2b0gCJAD4BSsABEUMBKT9JwAERXyIcwAERcILAARFjwBX6S0gBAAEWwAERgxbAARFzLoboqxWF/ZvSAIkAABzAARGggcABEZvAFfoySAEAARbAARGzFsABEaMuhuirFYWdm9AAiQA+Ak7AARHNwAER0wAAgJZgA8AA/M0BFsABEfImwAER3wCAwAER1sAV+iRgA4nogJaJyEnAARIBIhbAARILg8ABEgXAFftIqsHAAP9kABzAARIdg8ABEhfAFftISAEAARzAARImg8ABEiDAFftIqsIAAAAAwAD86QDAAP8/PgFKwAESRgEpPz8/SsABEm8BHMABEoYWwAESdi6G6KsVm0kCAAKCwAESksAV+kuBwAESoMAV+jIAm/YGq290wAESrsABErfAARPbAACq9AAAAAEDwAESxsABE9sAAAADAwPAARLQAAAAhh1gA4m6AMABEuMAAACClGADiPwAwAES8gAAAIPzYAOCUwAAYAOJugE+AknAARL+IRzAARMDLqr1AgACgMABEw3AFfwjgcABExfAFfwxAKtuPgFKwAETJgEc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FaMRABWrLgAVr50AFbAUABXJlAAVz2cAFdImABXV3AAV1qIAFdhRABXbJQAV4AoAFeqPABXr1QAV7cAAFe9nABXwRwAV8ugAFfOPABX0jwAV9QkAFfW8ABX4ZQAV+MsAFfn9ABX7/AAV/QgAFf2IABX+CQAV/uEAFf/XABYAnQAWAgIAFgTQABYFXgAWBkUAFgb2ABYIvgAWC84AFhBoABYQ9gAAAFECq4B0wAEpY8ABKWnAAS6/A6sGAAABYAHAAP9oAAAGBKuCdMABKY/AASmYGKsHAGADqw4ABKuDdMABKc7AASnTCanQAGADgxwABKuEdMABKirAASo3CYU4AF0DwAD+vwFgA4j8AASrhXTAASqDwAEqnwmEiwBdA8AA/vECYAODr2ADiboBMsABKp1gA4OvYAOJugAEq4Z0wAEqwMABKt0JhewAXQPAAP6/AWADh9ABMcABKttgA4fQAASrh3TAASr5wAErGQmF7QBdA8AA/r8BYAOE7AExwAErF2ADhOwAAQWrjXTAASsewAErHsABK10AAAADwAErLcABK10AAAADAwPAASszAAAEqwdgA6sOAMABK0MAAASp0GADgxwAwAErTwAABIU4XQPAAP6/AWADiPwAAGADq4ABPwQIAauCgADAFhNFCAGrg4EAwBYTUwgBq4SCAMAWE2EJAcABKx7AAP9+AAAAAAMGq4l0wAErYsABK2fAASu3AACq1gAAAAEDwAErdMABK7cAAAACAgLAASt7AAAAhJtgA4OvAMABK4sAAACGHWADiboAAFwBPgE9HMABK6EWwAErmy6Ei6uFgL8CAAKAwAErosAWE9KBwAErq8AWE+AAwAD/BgarinTAASu8wAErzcABLU8AAKrUAAAAAQPAASvawAEtTwAAAAAAAABgA4pJAT4FQBbAASvyFsABK+ouheyrhoFVwAD+ocABK+rAASv5AE7AASwfwAEsKwABhetdA8AA/vECYAOCfGADiboBMsABLEJgA4J8YAOJugA9HMABLFEWwAEsSi6Ei6uFg/0BAAE0wAEsWQPAASxZwAEs1wAAAAICAsABLGAAAACEm2ADg68AwAEscAAAAICWYAOJugAAYAPAAP8lAT4CQCElwAEsjILAASyGwBYUz2ADionAASyGwAEsowA9HMABLLeAwAEsrMAWFG6AvwIAAhbAASy+gcAB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SsABNlsBgMABNmLAFhv2P0rAATZsAR7AATZzmx4CAAKAwAE2fsAWG/YWwAE2hC6p56rRq5EAAAAWF8IAFhgnABYYzAAWGYAAFhoiABYa4gAWG88AFhxeAAAABwKrn3TAATbVwAE228ABN4IDqwwAAAFgAcAA/2gAAAMEq6F0wAE2/8ABNwMJg/MAYAOCUwAEq6J0wAE3FcABNxwJIgBgA5G6AASro3TAATc7wAE3QgmCVwBdA8AA/r8BYAOR2AABBauldMABN0fAATdHwAE3gAAAAAPAATdXwAE3gAAAAAMCAsABN10AAASD82ADglMAwAE3aAAABCJgA5G6AAHAATd3AAAEglddA8AA/r8BYAOR2AFqAGADwAD/JXlgA6ufAT8ECAGroYAAwBYdCggBq6KBAMAWHRgIAaujggDAFh0mCQHAATdHwAD/fgAAAAAAAAAWHXgAAAAAAqumdMABN4XAATeLwAE4EwOrDQAAAWABwAD/aAAAAgSrqHTAATe7wAE3vwmD8wBgA4JTAASrqXTAATfQwAE31wkiAGADwAEAAgABBaurdMABN9zAATfcwAE4EQAAAAPAATf4wAE4EQAAAAICAsABN/4AAASD82ADglMAwAE4CQAABCJgA8ABAAIAAGADq6YBPwMIAauogADAFh3uCAGrqYEAwBYd/AkBwAE33MAA/34AAAAAAAAAFh42AAAAAAKrrHTAATgWwAE4JcABOM0Hqw4AAAFgAcAA/2gAAAABBauxdMABODfAATg9wAE4TAEAAAPAAThKwAE4TAAAAAAAAABgA6usAT8BCQHAATg9wAD/fgAAAAACBquudMABOFHAAThWwAE4kgACgcUAAAABA8ABOFzAATiSAAAAAgICwAE4bAAAACJgA5HYAMABOIoAAACCV10DwAD+vwFgA5HYAABcAAarr3TAATiXwAE4nMABOMsAAqqvAAAAAQPAATizwAE4ywAAAAEBAcABOMYAAACD82ADhPQAAFwAAAAWHpgAFh7kABYfHAAAAAICq7J0wAE40MABONbAATtZA6sPAAABYAHAAP9oAAFgAausAAEFq7p0wAE5B8ABOQ3AATkiAQAAA8ABOSDAATkiAAAAAAAAAGADq7IBPwEJAcABOQ3AAP9+AAAAAAQGq7R0wAE5J8ABOTjAATnpAACBxQFqwAE5KGADwAD/aAIA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R1eGAMAWpS1IAQABKwAAasAAR2BgA6yOwADi9YYAwBalLQFgA4j8KQGr9imuhEnAAEebIRzAAEe1FsAAR6mGwABHn8AWpP6EXLF1SAEAASsAwAD/dT4BPRfAAEfILqQZFsAAR9iGwABHzsAWpP6EXLF1rOo/TsAAR/zAAEgEAACr6WADiPwBFsAASBCGwABIBsAWpP6hnbF0TsAASC/AAEg7AACr92ADhOwBHMAASEaAwABIPcAWnr+r7wUABILAAEhiwBae14fAAEhwwBaluhbAAEh5LqQZrOqDwABIfsAWn7ABq/YlwABIsYLAAEikwBae12ADiR+xNj0cwABIxS6r9ayhAwADgMAASNPAFp6/NQAAAAEAYAOE7AEUwABI3cAWpd4IACMcwABI6RQAwBamVgkASAEAASsAABbAAEjsLqQZrOoUAMAWplYJAAFgA4Tsh8AASPHAFqW6AK5gScAASQEhHMAASRcWwABJBS6r0qztSAEAASsAwAD/dT4ETsAASTvAAElMAACr+GADhdYBJsAASTsBFsAASWAWwABJTi6r0qzthdKGSGADhdY9HMAASXyAwABJc8AWnr+r5QMAAh7AAEmkwABWBwIAAhbAAEm9gMAASbTAFp6/h4WxDoLAAEnIwBae1wAUwABJ18AWpsUJAAGr5iqxQj2NwABKX8AWoBMjHMAASneBwABKbsAWnstIAQABKwCJAIfAAEqNwBaluhzAAErTFsAASqyAwABKo8AWnr+hKrEpq/kCAAKBwABK6cAWnsuHwABK88AWpboAwACK2gFgA4j8PRfAAEsXFsAASwUuq9Ks7YXUhcAASyTAFqAThks+AT2NwABLScAWoBOHwABLWMAWpbpJwABLcyXAAEt8LmADrXs+AT0cwABLoC6r9ayhAwADgMAAS67AFp6/FsAAS7gugo6s62rAAEvFYAOJH8AAnXEArmA+AT0cwABL5S6r9ayhAwADgMAAS/PAFp6/FsAAS/0ugo6s64XAAEwEwBagEwCuYD0XwABMHS6hnSMWwABMNC6r06zuNQAAAAEAYAOI/AGBwABMRMAWnssjHMAATE2GAMAWqFpIAQABKwAAasAATFZgA4kThJuGAMAWqFoBYAOI/IXAAExnwBagEwFgA4j8rldKwABMeQEfwABMhK7zAgACJsAATL4BFsAATL6EwABMr8AW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AINQAAAAgnBgA4iRAABgA62gAT8BCQDAAINchLcBAAGAwACDYsAWy+8AAQatonvAAINwwACDgcAAg+cAAKu/AWrAAINxYAPAAP9oAgAAAQPAAIOQwACD5wAAAAEBAcAAg6IAAACHUGADrwsAAFwBPgFKwACDsQEcwACDwIDAAIO4wBbMTqwzAQABLgCvOgAAFswbABbMfgAAAAECraV7wACEO8AAhEHAAIYIA6w0AAABYAGErwABYAGthgIErad7wACEq8AAhLAJhJsAYAODrwAErah7wACExcAAhMoJgJYAYAOE7AABBa2ue8AAhM/AAITPwACFYAAAAAPAAITswACFYAAAAAMDA8AAhPkAAASEm2ADg68AwACFBQAABICWYAOE7ADAAIUgAAAAgnBgA4iRAABgA62lAT4BPTUAAAABAGADhOwBFsAAhUgugJatqCMcwACFT4MAwBbNLUgBAAErAAArF8AAhU+DAMAWzS2EVy6CWQFgA62lAwgBraeAAMAWzPkIAa2ogQDAFs0HCQDAAIUyhLcBAAGCwACFOMAWzRUAAgatqnvAAIVlwACFdMAAhYUBAKu+AAAAAQPAAIV9wACFhQAAAAAAAABgA4TsAUrAAIWAARbAAIWALoCWragGrax7wACFisAAhZvAAIYGAACrvwFqwACFi2ADwAD/aAIAAAEDwACFqsAAhgYAAAABAQHAAIW8AAAAh1BgA68LAABcAT4BSsAAhcsBHMAAhdqAwACF0sAWzgWsNQEAAS4ArzsAABbNlQAWzdIAFs41AAAAAgKtr3vAAIY8wACGQsAAiDIDrDYAAAFgAYcbAAFgAa0hAQStsXvAAIaVwACGoRihnQBgA4j8ASsBBa21e8AAhqbAAIamwACHegAAAAPAAIa5wACHegAAAAMBAcAAhssAAACF110DwAD+vwFgA4TsAALAAIboAAAAhdtgA4j8AWoAYAPAAP8lecAAhvsAAACEImADwAD8VQFqwACHBGADwAD8VQBgA62vAT8CDABAIRzAAIcogcAAhxvAFs62SAEAASsAiQDAAIcbwACHLwAJAMAAhzqHJwMAAYDAAIdAwBbOoAKF24HAAIdbwBbOtoQigsAAh3LAFs7NAQats3vAAId/wACHpcAAiDAAAKu/AWrAAIeAYAPAAP9oAgAAAQPAAIe0wACIMAAAAAICAsAA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AQPAAK1rwACtwQAAAAEBAcAArX0AAACHUGADrwsAAFwBPgFKwACtjAEcwACtm4DAAK2TwBboIKxgAQABLgCvXAAAFudZABbnlgAW5+0AFuhQAAAAAwKuO3vAAK3twACt88AAr0sDrGEAAAFgAYboAAFgAa0hAQSuPXvAAK5OwACuWhihnQBgA4j8ASsBBa5Be8AArl/AAK5fwACukQAAAAPAAK50wACukQAAAAEBAcAArnwAAACAlmADwAEAAgAAYAOuOwE/AQkAwACuhYbyAQABgMAArovAFui/AAEGrj97wACulsAArrzAAK9JAACrvwFqwACul2ADwAD/aAIAAAEDwACuy8AAr0kAAAACAgLAAK7kAAAAh1BgA68LAMAArvYAAACrzmADiPwAAGADsXIBPgFKwACvCQEcwACvGIDAAK8QwBbpIKxiAgACLoHAAK85wBbpLgCvXQAAFujtABbpagAAAAECrkJ7wACwLsAAsDTAALJEA6xjAAABYAGuVQAAAgSuRHvAALCOwACwmQmZNABgA4OQAASuRXvAALCtwACwtglbAGADhbYAAQWuTHvAALC7wACwu8AAsUIAgLWsoQADwACw4cAAsUIAAAADAwPAALD7AAAApBRgA4TsAMAAsQsAAASZNGADg5AAwACxHQAABFtgA4W2AABgA65CAT8DCAGuRIEAwBbp8QgBrkWCAMAW6f8JAMAAsTauZgEAAYDAALE4wBbp4wACBq5He8AAsUfAALFdwACxewEArAwAAAABA8AAsW/AALF7AAAAAAAAAGADrLQBSsAAsXIBJsAAsXIBFsAAsXIuW65FYAOstAauSXvAALGAwACxpsAAskIAAKu/AWrAALGBYAPAAP9oAgAAAQPAALG1wACyQgAAAAICAsAAsc4AAACHUGADrwsAwACx4AAAAKvOYAOI/AAAYAOxcgE+AUrAALHzARzAALICgMAAsfrAFuq3rGQCAAIugcAAsjLAFurFAK9eAAAW6j4AFuqEABbrAQAAAAICrk17wACyt8AAsr3AALQyA6xlAAABYAGuVQAAAQSuT3vAALMLwACzFQmCbwBgA4TsAAEFrlR7wACzGsAAsxrAALN5AIC1rKEAA8AAszDAALN5AAAAAgICwACzQwAAAKQUYAOE7ADAALNTAAAEgm9gA4TsAABgA65NAT8CCAGuT4EA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ANMEFsAA0v0ulbSxLUgBAAErAMAA/3XAANL9wADTCwA/ScAA0xMlwADTIYDAANMXwBb9AWADrgo+AUrAANSBARzAANSSFMAA1IjAFv0BAAFgA64Kq78BAAEfwADUpq9yAQABLgAArgxJwADUyiXAANTYgMAA1M7AFv0BYAOIFD4BSsAA1PMBHMAA1QQUwADU+sAW/QEAAWADiBSFjQIAAh/AANUQr3IBAAEuACsAiB1JwADVOiXAANVIgMAA1T7AFv0BYAOH3T4BSsAA1WUBHMAA1XYUwADVbMAW/QEAAWADh92FjQIAAh/AANWCr3IBAAEuACsAh+JJwADVrCXAANW6gMAA1bDAFv0BYAOH5z4BSsAA1dUBHMAA1eYUwADV3MAW/QEAAWADh+eFjQIAAh/AANXyr3IBAAEuACsAh+w+AAAAFviTABb49AAW+/QAFvzOABb+agAAAAQCrol7wADXJsAA1yzAANh4A6x8AAABYAGG8wABYAGtIQEErot7wADXf8AA14sYoZ0AYAOI/AErAQWuj3vAANeQwADXkMAA18AAAAADwADXo8AA18AAAAABAQHAANetAAAAgpRgA4j8AABgA66JAT8BCQDAANe1hv0BAAGAwADXu8AW/t0AAQaujXvAANfFwADX68AA2HYAAKu/AWrAANfGYAPAAP9oAgAAAQPAANf6wADYdgAAAAICAsAA2BMAAACHUGADrwsAwADYJQAAAKvOYAOI/AAAYAOxcgE+AUrAANg4ARzAANhHgMAA2D/AFv88rH0CAAIugcAA2GbAFv9KAK9mAAAW/wkAFv+GAAAAAQKukHvAANjWwADY3MAA4ZYDrH4AAAFgAbHXAAAAAQWumXvAANkMwADZDMAA2YAArHUAA8AA2SbAANmAAAAAAQEBwADZPQAAAKEqYAPAAFY4AABgA66QAT8BCQDAANlisf8BAAGAwADZasAW/9QABgauknvAANmFwADZlcAA2zoAAKx/AWrAANmGYAPAAP9oAgAAAQPAANm0wADbOgAAAAEBAcAA2ckAAACCcGADiJEAAGADwAD+GwE+AUnAANnZJcAA2eaAwADZ3cAXADVgA66gPgFKwADaDgEWwADaHhTAANoVwBcANQABYAOuoKyArKGupT4BSsAA2ygBkwauk3vAANs/wADbUMAA3DoAAKyBAWrAANtAYAPA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F6ILDQA+BD2PwADVAsAXnkAxwADVEGADiPwAPRXAANUawBeeVggxwADVKGADiPwAPRXAANUywBeebAkxwADVRmADiPwAPRXAANVQwBeiMw4ewADVasAAwxkAAmADglNgA4j8AAA/ScAA1ZgUwADVnMAXntAKAD4EPYzAANW1wBeeDDHAANXFYAOI/AJqwADVzGADrI7AAOL1asAA1eFgA6yOwADi9T0cwADWFhbAANYAFsAA1fcuq9+vDaEqsSms6QcABoPAANYxwBed6BbAANZNgsAA1kTAF526hMWDKysrgcAA1mnAF52jhMAA1nbAF54MAYQiFsAA1p2AwADWmMAXnZWEIoc3wABWQj2NwADWrcAXniIcwADWzITAANa/wBeeDEsBAAGTAMAA/s49jsAA1tfAF54xHMAA1viEwADW68AXngxLAQABlADAAP7OPgI9jcAA1xDAF54iFsAA1yeAwADXIsAXnZWF5Ic4PY7AANc2wBeeMRbAANdPgMAA10rAF52VheWHOU7AANd1wADXgAAArQVdA8AA/r8BYAOE7AEewADXhsAA+BYBAWADhOwBFsAA15gWwADXkIDAANeLwBedlYPVhzphwAD+7wBOwADXtsAA18MAAK0GXQPAAP6/AWADhOwBHsAA18nAAPgWAQFgA4TsARbAANfbFsAA19OAwADXzsAXnZWD1Yc6YcAA/u8ARcAA1+gBwADX8cAA1/MAAGJgA8AA/hsBkwEcwADX+hTAANf4wBekgBEAYwEAARbAANgJFsAA2AGAwADX/MAXnZWD1Yc6YcAA/u8AwAD/SQEVwADYEcAXpIARHMAA2BIUwADYEcAXpIARAGQBAAGUAMAA/0E+Ak7AANgnwADYLQAAg9RgA4dDARzAANg7FsAA2DSAwADYL8AXnZWD1Yc6SwEAARTAANg8wBekgBEAAMAA/s5JwADYRiElwADYUBTAANhKwBek8RIAYAOyjz4CPRzAANh9FMAA2HPAF6PvDwCAvwIAAhTAANh+wBekgBEAFsAA2JMcwADYjxbAANiIgMAA2IPAF52Vg9WHOksBAAEUwADYkMAXpIARAADAAP7Og9aHRQDAAP7PPRzAANisFMAA2KDAF6Q1EACAvwIAAhTAANitwBekgBEAFsAA2MIcwADYvhbAANi3gMAA2LLAF52Vg9WHOksBAAEUwADYv8AXpIARAADAAP7OgJaHRgDAAP7PP07AANjgwADY7AAArQdgA8AA/FUBKk7AANj+wADZCwAArQhgA8AA/FUBKk7AANkdwADZLwAArQlgA8AA/FUBKknAANk8IhTAANlAwBee0AoAARTAANlTwBeiCw0APgo9F8AA2W0urKorrw89F8AA2YourKsrrxA9F8AA2agurKwrrxE9F8AA2csurK0rrxJOwADZ9cAA2gcAAK0KYAOI/AFqwADaD2ADrI7AAOL1ScAA2iQiFMAA2ijAF58vDAAAIRTAANpCwBee/wsAPgE9FcAA2l7AF6aNFBzAANqeFsAA2nsWwADaci6r368NoSqxKYWKAgACJsAA2rIBgcAA2rLAF52jYAOJNxbAANrSFsAA2sgWwADavy6r368Nh4WxDptAnQUAprtJwADa7yIhFMAA2vTAF58vDAAAFMAA2w3AF57/CwA+AT0VwADbKcAXpo0UH8AA20GJRwIAAhbAANtiFsAA21gWwADbTy6r368Nh4WxDps+nQsxwADbgmADiPwChcAA24PAF54ihsAA25TAF54xAD9FwADbtwHAANvAwADbwgAAYmADwAD+GwGTARzAANvJFMAA28fAF6eaFQBjAQABFsAA29gWwADb0IDAANvLwBedlYPVhzphwAD+7wDAAP9JARXAANviwBenmhUcwADb4BTAANviwBenmhUAZAEAAZQAwAD/QT4DTsAA2/jAANv+AACD1GADh0MBHMAA3AwWwADcBYDAANwAwBedlYPVhzpLAQABFMAA3A3AF6eaFQAAwAD+zj0cwADcGS6s7QoAChTAANw0wBeoCxYAgMAA3EfAF52VhcAA3FnAF54ihsAA3HbAF54xFMAA3JXAF6aNFAAUwADctMAXnlYIABTAANzNwBeebAkAFMAA3OzAF6IzDgAUwADdDcAXntAKABTAAN0qwBeiCw0AAK9EScAA3UUUwADdScAXntAKAD4CPRzAAN1yh8AA3WbAF55AVgEAARzAAN2LFsAA3X6DwADddsAXneiFOIk7SwEAAZMAwAD+zgDAAP7QPRzAAN2nh8AA3ZvAF55AVgEAARzAAN3AFsAA3bODwADdq8AXneiFOIk7SwEAAZQAwAD+zgDAAP7QPz0VwADd3sAXpf8RIRzAAN37FsAA3ewurKqvD0gBAAErAMAA/z89FcAA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wAEUNMABFEgAAK0dXQPAAP6/AWADiZYBFsABFG0WwAEUXhbAARRXgMABFFLAF8yAgkmEpYUZg5iExYMrTsABFJDAARSeAACFOF0DwAD+vwFgA4j8AR7AARSswAD4FgEBYAOI/AEWwAEUz4HAARS7wBfMlGHAAP7vAEXAARTcAcABFOXAARTnAABiYAPAAP4bAZMBHMABFO6DwAEU7MAXzRNjAQABFsABFP6CwAEU8MAXzNFhwAD+7wDAAP9JAYvAARUGwBfNExzAARUHg8ABFQbAF80TZAEAAZQAwAD/QT4BPRzAARUggsABFRPAF8zRgL8CAAKDwAEVIcAXzRMfwAEVKomVAQABHMABFU+BwAEVPMAXzJRLAQABg8ABFVDAF80TAMAA/s4AAMAA/s89HsABFXGsvwIAAibAARWdARbAARWdgMABFZjAF8yAW4SjYAOstILAARWowBfM0QA9HMABFcUWwAEVvC6r368NrLUGAAUrFsABFfGAwAEV7MAXzICEWIJaFsABFhoWwAEWERbAARYKgMABFgXAF8yAgkmEpYJug+aFVoTYFsABFksWwAEWPBbAARY1gMABFjDAF8yAgkmEpYUZg5iEyYNLFsABFmKAwAEWXcAXzICsDK38AazNKbFTPR7AARa1rMABAAEmwAEW2wEWwAEW24DAARbWwBfMgFuEo2ADrLQABq9RfMABFu7AARcUwAEXgQAAhgsBasABFu9gA8AA/2gCAAABA8ABFyDAAReBAAAAAgICwAEXKQAAAIPzYAOHBwDAARc4AAAgq85gA4j8AABgA7FyAUrAARdOAWrAARdUYAOxcsAA4zIGr1J8wAEXhsABF4vAARoRAACsUQAAAAEDwAEXnsABGhEAAAABAQHAAReuAAAAg/NgA64BAABcAT4GTsABF8XAARfOAACrvmADhOwBFsABF9WAwAEX0MAXzzCrvq4FTsABF/LAARgBAACtHmADsOcBFsABGAwWwAEYAy6r368NrR6xLk7AARgpwAEYNQAAq85gA4j8ASMhFsABGEeCwAEYOMAXz2itH7DqFsABGGyCwAEYXcAXz2itILDrasABGJFgA6yOwADi9QFgA4j8TsABGK0AAAChnWADiPwAScABGL8hHMABGNMWwAEYyIDAARjDwBfPMIJviFNIAQABKwDAAP91PgI9HMABGO0WwAEY5C6r368Nq+0EAAOBwAEY/cAXz0SDwAEZB8AXz40pAav2Ka6EPYzAARlAwBfP1x7AARlPrKMCAAKBwAEZX8AXz0QWwAEZaS6r368NAD4BPYzAARmHwBfP1xbAARmzFsABGakWwAEZnxbAARmWLqvfrw2HhbEOmy+dD4UBg0o9HMABGdWCwAEZxsAXz2itIQQABBbAARniLqvfrw2AwAEZ7MAXzzCEwAEZ8sAXz9cWwAEaBYDAARoAwBfPMKJErgMAsPcGr1N8wAEaFsABGjDAASTsAACsOQAAAAEDwAEaR8ABJOwAAAACAgLAARpiAAAAg/NgA622AMABGnEAAACrzmADiPwAAGADsXIBPhFOwAEaisABGpMAAJs9YAODHAEWwAEaqBbAARqeFsABGpUuq9+vDYeFsQ6bPZ0KTsABGsTAARrMAACtD2ADiTcBFsABGteCwAEazsAX0SaEyYNLTsABGvQAAACpE10DwAD+vwFgA4j8AE7AARsQAAAArNtgA4j8AE7AARs5AAAArOddA8AA/r8BYAOI/ABOwAEbWQAAAKzoXQPAAP6/AWADiPwATsABG2/AARt/AACs3WADwAD8VQElwAEbkxbAARuGgMABG4HAF9EBhduHK2ADtiNOwAEbtcABG8YAAKy6YAPAAPxVASEWwAEb0hbAARvJLqvfrw2Hn7EmTsABG/oAAACs3F0DwAD+8QJgA4JTYAOI/ABJwAEcEyIUwAEcF8AX0ckIAAEUwAEcKsAX0fgJAD4DPY7AARxEwBfRnTHAARxSYAOI/AA9j8ABHFzAF9GzMcABHGpgA4j8AD0VwAEcdMAX0iAKHsABHI7AAMMZAAJgA4JTYAOI/AAAP0nAARy8FMABHMDAF9HJCAA+Az2MwAEc2cAX0XgxwAEc6WADiPwBasABHPBgA6yOwADi9T0cwAEdJRbAAR0PFsABHQYuq9+vDaEqsSms6QcABoPAAR1AwBfRVBbAAR1cgsABHVPAF9EmhMWDKysrgcABHXjAF9EPhMABHYXAF9F4AYQiFsABHayAwAEdp8AX0QGEIocqwABWQj2NwAEdvMAX0Y4cwAEd4ITAAR3TwBfReEsBAAGTAMAA/s4+AT2NwAEd+MAX0Y4WwAEeFIDAAR4PwBfRAYXbhytJwAEeLCIUwAEeMMAX0ckIAAEUwAEeQ8AX0fgJAD4BRcABHl0BwAEeZsABHmgAAGJgA8AA/hsBkwEcwAEebxTAAR5twBfTnwsAYwEAARbAAR6CFsABHnaAwAEeccAX0QGF14csYcAA/u8AwAD/SQEVwAEejMAX058LHMABHooUwAEejMAX058LAGQBAAGUAMAA/0E+A07AAR6iwAEepwAAgpRgA4j8ARzAAR6pLqzaBgAGHMABHtMWwAEeyIDAAR7DwBfRAYXXhyxLAQABFMABHtTAF9OfCwAAwAD+zoDAAR7kwBfRAYXAAR72wBfRjhTAAR8YwBfSIAoAFMABHznAF9HJCAAUwAEfVsAX0fgJAACvPz0cwAEffYfAAR9xwBfRs1YBAAEUwAEfgcAX1BAMAADAAP7QScABH5AUwAEflMAX0ckIAD4BPRzAAR+9hsABH7HAF9GdVgEAARzAAR/WFsABH8mDwAEfwcAX0VSFOIk7SwEAAZMAwAD+zgDAAP7QPz9JwAEf+BTAAR/8wBfRyQgAPgQ9HMABIDQWwAEgHhbAASAVLqvfrw2hKrEprOkGAAaDwAEgWsAX0VQWwAEgdoLAASBtwBfRJoTFgyuGwAEgkMAX0Z2HwAEgp8AX0bOBwAEgvsAX0Q+EwAEg1cAX0XgAwABWQj2NwAEg68AX0Y4cwAEhD4TAASECwBfReEsBAAGTAMAA/s49NQAAAAEAYAPAAFQSARbAASEjFsABIRouq9+vDaoKsSgjHMABITQUAMAX1ZULAEgBAAErAAArHMABITQUAMAX1ZULAKpQBAAEFsABIU8WwAEhRi6r368NgKyxJRbAASFjgMABIV7AF9EBhFiCWies6h/AASGTwABUMAEAATHAASGzYAOI/AGFwAEhtMAX0Y4AAMAAVBQBXD0XwAEh2IDAASHTwBfRAYXbhcABIefAF9GOhys/ScABIgcUwAEiC8AX0fgJAD4BRcABIiUBwAEiLsABIjAAAGJgA8AA/hsBkwEcwAEiNxTAASI1wBfWYAsAYwEAARbAASJKFsABIj6AwAEiOcAX0QGF14csYcAA/u8AwAD/SQEVwAEiUsAX1mALHMABIlMUwAEiUsAX1mALAGQBAAGUAMAA/0E+AT0cwAEiYS6s5QQABBzAASKLFsABIoCAwAEie8AX0QGF14csSwEAARTAASKMwBfWYAsAAMAA/s6AwAEikMAX0QEWwAEim4DAASKWwBfRAYXbhysUwAEiqcAX0iAKAACvQD89F8ABItaAwAEi0cAX0QGhnR/AASLpiUcCAAKCwAEi98AX0SYxwAEjAWADiPwBhcABIwLAF9GOAK24ScABIx4hFsABIywWwAEjIy6r368Nh5+xJj4DTsABI1XAASNdAACESGADqaUBFsABI2gWwAEjXy6r368NhEixK0nAASN3FMABI3vAF9HJCAA+AT0cwAEjnhTAASOWwBfXhwsAoqYEAAOAwAEjw8AX0QEWwAEj0hbAASPJLqvfrw2hKrEpFsABI/kWwAEj8hbAASPpLqvfrw2VtLEtgKzAAFXIAanHKaodP0nAASQqIRbAASRTFsABJEUWwAEkPhbAASQ3FMABJC/AF9eHCwCVc6mogkmqlp63qKKHlotAPgE9F8ABJIIWwAEkexbAASRyLqvfrw2VtLEtoRUpwABVyz8/SsABJLEBH8ABJLyxdwEAARbAASTbgMABJNbAF9EBoZ2tuAAGr1R8wAEk8cABJQvAASgwAACsVAAAAAEDwAElKMABKDAAAAACAgLAASVJAAAAg/NgA64PAMABJVgAAACrzmADiPwAAGADsXIBPgpOwAEldMABJX0AAKvgYAOI/AFqwAElhWADiROEm07AASXCwAElxwAAntxgA4TsARbAASXOgMABJcnAF9i3ntys6UnAASXYJcABJeGDwAEl3MAX2PlgA4WVPgI9isABJffAF9jcFsABJg4WwAEmBxTAASYCwBfY+QMBYAOFlYJJhZmFHoOjPRzAASYlgMABJiDAF9i3q/WsoQMAAxbAASYzLqvfrw0UwAEmPcAX2PkDAWADhZWCwAEmQ8AX2NwArmA/TsABJl8AAACtImADg5AATsABJnnAASaGAACr4WADiPwBasABJo5gA6yOwADi9U7AASaswAEmsgAAgo5gA4TsARbAASa5gMABJrTAF9i3go6s60nAASbEJcABJs6GwAEmyMAX2ctgA4WlPgM9jcABJuTAF9msFsABJwAWwAEm+RTAASbzwBfZywYBYAOFpYJJhaqFH4OkPYzAAScSwBfZnRbAAScmFMABJyDAF9nLBgFgA4WlgkmFqj0ewAEnSMAAVgIBAAGEwAEnXcAX2Z0AP07AASd+wAEniwAAoZ1gA4j8ARbAASfGHMABJ5qAwAEnlcAX2Ler3qyhAwADFsABJ6Quq9+vDYLAASeuwBfY3IXAASe4wBfZrACs9KGdrvE9HMABJ92AwAEn2MAX2LesaKyhAAAAAK5fSsABJ/oBH8ABKAWxdwEAAYfAASgfwBfabQAGr1V8wAEoNcABKFvAASoEAACFsgFqwAEoNmADwAD/aAIAAAEDwAEoacABKgQAAAACAgLAASh7AAAAg/NgA4WVAMABKIoAACCrzmADiPwAAGADsXIBPgZOwAEopMABKKsAAIJJYAODkAEWwAEosoDAASitwBfbIYJJhZk9HsABKNLAAFYCAQABgsABKOfAF9tGAE7AASj9wAEpAgAAgpRgA4j8ARbAASkLgsABKQTAF9tGhR6Do0nAASkbIiXAASkmgsABKR/AF9tGYAOEJQAcwAEpQhbAASk9FMABKTbAF9tGAgFgA4QlgmuEKEgBAAFqwAEpU2ADhGWFSgDAAP91PgE9i8ABKWPAF9uBHMABKXMWwAEpai6r368NrSMDAAODwAEphsAX24GBwAEpjMAX2y+AwAEpmcAX2yEAsVw/PRzAASmzFsABKaouq9+vDaywAgACgMABKcXAF9shg8ABKcvAF9uBALEySsABKdYBH8ABKeGxdwEAAYPAASn7wBfbgQAGr1Z8wAEqCcABKi/AAS1pAACFwgFqwAEqCmADwAD/aAIAAAEDwAEqRMABLWkAAAACAgLAASpdAAAAg/NgA4X7AMABKmwAACCrzmADiPwAAGADsXIBPgZOwAEqjMABKpcAAKzPYAOJSQEjIRzAASqlFsABKp6AwAEqmcAX3KSCSYYCSAEAASsAwAD/dRbAASrMFsABKsMWwAEqvIDAASq3wBfcpIJJhgKCboQqhVaE2B/AASrniWICAAIxwAEq9GADiPwAasABKv5gA4kThJsAAWADiUlOwAErF8ABKzAAAKy2YAPAAPxVASEcwAErYx7AASs6rKoBAAEWwAErWIDAAStTwBfcpFuF/gBIAQABKwDAAP7pTsABK3nAASuGAAChnWADiPwBHMABK5EWwAEriC6r368NrLUFAAWBwAErocAX3LIWwAEru4DAASu2wBfcpIRYglqCwAErx8AX3MkWwAEr3oLAASvTwBfcyYVViVEWwAEr74DAASvqwBfcpFuF/gCxUz0cwAEsCBbAASv/Lqvfrw2ssAIAAoDAASwawBfcpITAASwgwBfdhwCxMknAASwzIiIhFsABLEEWwAEsOC6r368Nh5+xJgAhg8ABLFjAF91HACEcwAEsiBbAASyBgMABLHzAF9ykgkmGAkgBAAErAMAA/3U+AT0cwAEsqhbAASyiFsABLJkuq9+vDYRIsSujQAQAA4DAASzTwBfcpBbAASziFsABLNkuq9+vDaEqsSkWwAEtCRbAAS0CFsABLPkuq9+vDZW0sS2ArMAAVcgBqccpqiM/SsABLTMBH8ABLT6xdwEAAYTAAS1YwBfdhwAGr1d8wAEtbsABLZTAAS8PAACF2QFqwAEtb2ADwAD/aAIAAAEDwAEtrMABLw8AAAACAgLAAS3IAAAAg/NgA4ZUAMABLdcAACCrzmADiPwAAGADsXIBPgJJwAEt6iEWwAEt+BbAAS3vLqvfrw2Hn7EmPgFGwAEuDMABLjzAAS4cAAAAgm9gA4TsABbAAS4vgMABLirAF98XhdeGVj4BPRzAAS5PFsABLkYuq9+vDavtAwADgsABLmzAF99fasABLn5gA6yOwADi9SEWwAEulxbAAS6OLqvfrw2Hn7EmAK6EP0rAAS62AR/AAS7BsXcBAAEWwAEvAxbAAS73FsABLu0WwAEu5C6r368Nh4WxDps1nR+FAYNKAAavWHzAAS8UwAEvOsABL9AAAIX5AWrAAS8VYAPAAP9oAgAAAQPAAS9MwAEv0AAAAAICAsABL2YAAACD82ADhrsAwAEvdQAAIKvOYAOI/AAAYAOxcgFKwAEviwEfwAEvj7F3AQABFsABL8gWwAEvvBbAAS+yFsABL6kuq9+vDYeFsQ6bNZ0fhQGDSgAGr1l8wAEv1cABL9rAATHpAACsVgAAAAEDwAEv98ABMekAAAABAQHAATARAAAAg/NgA64VAABcAT4CTsABMCrAATA3AACE8WADmzABHsABMEabNwEAARzAATB1FsABMGYWwAEwXS6r368Nh/axJ5thAgACFsABMKkWwAEwoBbAATCXLqvfrw2EybEqhO+JPRbAATDAFsABMLmAwAEwtMAX4KyCSYSWhRmDmACcDwA9HMABMN8WwAEw1i6r368NrLUGAAUrFsABMQuAwAExBsAX4KyEWIJaJsABMSwBHMABMSyBwAExH8AX4MCFmwEAARbAATFqFsABMV0WwAExVBbAATFNgMABMUjAF+CsgkmEloJug+aFVoTYhceJVwCbP2ADiUkWwAExkxbAATGKLqvfrw2EybEqFsABMaqAwAExpcAX4KysDK4XAazNKbFTBq9afMABMe7AATIIwAE1DgAArFgAAAABA8ABMirAATUOAAAAAgICwAEyUAAAAIPzYAOuHADAATJfAAAAq85gA4j8AABgA7FyAT4EScABMnIhHMABMosWwAEye4DAATJ2wBfh+oWZhe9IAQABKwDAAP91PgE9NQAAAAEAYAPAAFQSARbAATKlFsABMpwuq9+vDaoKsSgjHMABMraCAMAX4klIAQABKwAAKxzAATK2ggDAF+JJqlAEAAQWwAEyxhbAATK9Lqvfrw2ArLElFsABMtCAwAEyy8AX4fqEWIJaJ4JJH8ABMvTAAFQiAQABFsABMxeAwAEzEsAX4fqFmYXvAADAAFQUAVw/TsABM07AATNVAACBdmADsXIBHMABM2AWwAEzVy6r368NrREIAAWAwAEzf8AX4forFsABM5CAwAEzi8AX4fqEWIJaKoHAATOjwBfiCAOCSSMhHMABM9UWwAEzxYDAATPAwBfh+oWZhe9IAQABKwDAAP91HsABM++xjQEAARbAATQXgMABNBLAF+H6hZmF7wBqwAE0PGADsYbAAOMLAWADsYatJBbAATR2gMABNHHAF+H6gL2F61sWwAE0lIDAATSPwBfh+luF7LFXPRfAATSpgMABNKTAF+H6oZ0WwAE0v4LAATS4wBfi3KGdsXSuHkrAATTRAR/AATTcsXcBAAEWwAE0/YLAATT2wBfi3KGdsXQABq9bfMABNRPAATUtwAE3bwAArFoAAAABA8ABNUrAATdvAAAAAgICwAE1awAAAIPzYAOuJQDAATV6AAAAq85gA4j8AABgA7FyAT4CScABNY0hHMABNaYWwAE1loDAATWRwBfkE4WZhXdIAQABKwDAAP91PgE9NQAAAAEAYAPAAFQSARbAATXAFsABNbcuq9+vDaoKsSgjHMABNdGCAMAX5GJIAQABKwAAKxzAATXRggDAF+RiqlAEAAQWwAE14RbAATXYLqvfrw2ArLElFsABNeuAwAE15sAX5BOEWIJaJ4JJH8ABNg/AAFQiAQABFsABNjKAwAE2LcAX5BOFmYV3AADAAFQUAVw/SsABNk8BHMABNl8WwAE2Vi6r368NrRMGAASAwAE2cMAX5BMrFsABNoGAwAE2fMAX5BOEWIJagcABNo3AF+QhAqIeIyEcwAE2wxbAATazgMABNq7AF+QThZmFd0gBAAErAMAA/3UewAE23bGNAQABFsABNwWAwAE3AMAX5BOFmYV3AGrAATcqYAOxhsAA4wsBYAOxhq0lFsABN2aAwAE3YcAX5BOAvYV0sVkGr1x8wAE3dMABN3nAATx9AACsYAAAAAEDwAE3lcABPH0AAAABAQHAATeuAAAAg/NgA64zAABcAT4ETsABN8XAATfYAACsXmADhOwBFsABN9+AwAE32sAX5cWsXq41PRzAATgAFsABN/cuq9+vDavtAwADgcABOBDAF+XZasABOCpgA6yOwADi9SkAroROwAE4TcABOFwAAK0mYAOI/AEewAE4XqyjAgACgcABOG7AF+XZFsABOIIuq9+vDQBGwAE4ksABOMzAATiqAAAAqC5gA64sABbAATi9gMABOLjAF+XFrF+uNj4CRsABONTAATkWwAE45AAAAK0nYAOE7AAWwAE5AYPAATj2wBfmZKxcri4+A07AATk6wAE5TwAArShgA7FyARzAATlmFsABOV0uq9+vDavtAwADhMABOXbAF+aPgsABOYbAF+YsKQCuhE7AATmuwAE5wQAArSlgA4j8ARbAATnYhcABOcPAF+ayoZ2xdEnAATpSIRzAATpgFsABOlcuq9+vDazgAgACgsABOm3AF+YshsABOn3AF+buALE1PgE9HMABOq4WwAE6pxbAATqeLqvfrw2VtLEtntsEAAMcwAE67mrAATrIXQOR0QFhAwJgA4j8YAOI/GADkbrAAIs0iD0CAAKCwAE7D8AX5iyGwAE7H8AX5u4AkdUWwAE7UYTAATtCwBfmj4RYglpqwAE7a2ADwAD+GxUBglcxwAE7jGADkdgBHMABO8hqwAE7nmADkcXAAIudgl8DAAMWwAE78xbAATvqLqvfrw2ArLElFsABPAuBwAE7+MAX5dmEWIJaasABPBdgA8AA/hsVAJHNwABVzz89HMABPFQWwAE8Sy6r368NrHsBAAEWwAE8boPAATxjwBfmZIJtiDEAroYGr118wAE8gsABPJzAAT1xAACsYgAAAAEDwAE8tsABPXEAAAACAgLAATzUAAAAg/NgA647AMABPOMAAACrzmADiPwAAGADsXIBPgI9F8ABPPuAwAE89sAX6GihnRbAAT0pFsABPR0WwAE9ExbAAT0KLqvf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tGADwABVxQDAAEJpAAAAhVVgA4j8AMAAQocAAACFa2ADhN0AwABCngAAAIJtYAOHogAAXAAGsRuAisAAQuzAAELxwABDOQACoYcAAAABA8AAQwHAAEM5AAAAAgICwABDEgAAAJW0YAPAAFXFAMAAQy0AAACFIWADhHQAAFwABrEcgIrAAEN/wABDhMAAQ9UAAqFMAAAAAQPAAEORwABD1QAAAAICAsAAQ6kAAACVtGADwABVxQDAAEPJAAAAhGhdA8AA/r8BYAOE7AAAXAAGsR2AisAAREnAAEROwABEjQACrMwAAAABA8AARGjAAESNAAAAAQEBwABEgQAAAIRoXQPAAP6/AWADhOwAAFwABrEegIrAAETuwABE88AARWAAAqGPAAAAAQPAAEUMwABFYAAAAAMDA8AARR0AAACVtGADwABVxQDAAEU9AAAAhSFgA4TsAMAARVMAAACtLGADiPwAAFwAAAAYk0sAGJO/ABiT4wAYlBEAGJRBABiUcQAYlMgAGJUtABiVdgAYlcYAGJYGABiWXQAAAAsCsSGAisAARnbAAEaFwAFw1QepAQAAAWABsQwAAA4EsSOAisAARyXAAEdsBa4JAGADiUkBH8AAR0GJYgIAAmrAAEdOXQPAAP6/AWADiPyGIWrAAEdeYAOJE4SbAASxJICKwABHi8AAR5EJrHYAYAPAAFXyAASxJYCKwABHrMAAR68JgKwBasAAR5dgA8AA/2gCYAPAAQCDAASxJoCKwABIb8AASHkJh58AYAPAAPxVAASxJ4CKwABIk8AASKEJh/YAYAOcBQAEsSiAisAASLzAAEjLCaoKAGADwABUEgAEsSmAisAASOzAAEkBCaEqAGADwABWOAAEsSqAisAASRrAAEkiCYTJAGADiTcABLErgIrAAElOwABJVQmESAFqwABJKGADwAD/aAJgA6mlAASxLICKwABJeMAASaEJrgoAXQPAAP7xAmADglNgA4j8ATLAAEmfYAOCU2ADiPwABLEtgIrAAEm2wABJvBiVtABgA8AAVcUBKwSxLoCKwABKM8AASkEYrR4AYAOw5wErBLEvgIrAAErZwABK8RiuCwBgA5swASsEsTCAisAAS47AAEucGK4MAGADiUkBKwEFsWaAisAAS6HAAEuhwABNHQCsdQADwABLucAATR0AAAAFBQXAAEvGAAAErHZg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qbMKALX7GsAApUSwOybAAKViARzAAKViFsAApVourt+y/rMOoaQCAAIWwAClci6EWLMLMcAApYpgA4TsARzAAKWLLq8JAAAAALO6ALXHYAOstAGFmRbAAKW1LqIZs7I1AAAAAQBbARfAAKXFgcAApcPAGiIIhFgWwACl0i6EWLMLglqBAMAaIgg9NQAAAAEAYAOs5wGAwACl4sAaId8jHMAApfWCAMAaIsdIAQABKwAAKxfAAKX1ggDAGiLHntyBwACl/MAaIfas6QFgA63ESsAApgYBgcAApg3AGiH2BrPAgI7AAKYawACmMcAAqDQAAK7psv4BasAAphtgA8AA/2gCAAABA8AApjvAAKg0AAAAAwMDwACmRwAAAICWYAOE7ADAAKZTAAAAo5tgA8AA/FUAwACmgAAAAK7mYAOs5wAAYAOE7AE+BEnAAKaZIYHAAKaewBojXkrAAKarARzAAKayLq8Ksv4CAAKAwACmxsAaI1CCwACmzcAaI24As7w/TsAApv7AAKcEAACCjmADrcQBNcAApwoAAAEAYAOtxAEfwACnCq3OBAADHMAApzQWwACnLC6u37L+sw6h6gEAARbAAKdJLpKpswoAtfsawACnWbA8JsAAp3cBHMAAp3cWwACnby6u37L+sw6hpAIAAhbAAKeHLoRYswsxwACnn2ADhOwCHMAAp6AurwkAAAAAs7qAwACnr8AaI1AAtcdgA6y0AYWZFsAAp9Eum2SzszUAAAABAFsBF8AAp+GDwACn38AaI8+EWBbAAKfuLoRYswuCWoMAwBojzz01AAAAAQBgA6znAYLAAKf+wBojbiMcwACoEYQAwBokl0gBAAErAAArF8AAqBGEAMAaJJeCjoPAAKgZwBojvazrAWADrcRKwACoJAGDwACoK8AaI70Gs8GAjsAAqDnAAKhQwACo7AAAruOy/gFqwACoOmADwAD/aAIAAAEDwACoV8AAqOwAAAACAgLAAKhqAAAAgm1gA4TsAMAAqIoAAACu5mADrOcAAGADhOwBPgFKwACoowEdwACosK7jsv4CAAIewACouLMAAgACFsAAqMAurwiztIDAAKjPwBolIACBwACo1sAaJS4AsxsGs8KAjsAAqPHAAKkIwACpuwAAodMBasAAqPJgA8AA/2gCAAABA8AAqRTAAKm7AAAAAgICwACpGQAAAINiYAPAAP4bAMAAqSsAAABbYAOFtgAAYAOE7AE+AUrAAKk8ARzAAKlLFsAAqUMurt6y/rMJodQFAAQcwACpai6hMwAAAACzExrAAKl9sDCBwACph8AaJcSAwACpksAaJbQBodUpta8Gs8OAjsAAqcDAAKnmwACqTAAArucBasAAqcFgA8AA/2gCAAABA8AAqfzAAKpMAAAAAQEBwACqCAAAAKQZYAOE7AAAYAOs5wFKwACqFgEmwACqFgEewACqJ68AAwADKxbAAKpBLiezsYDAAKpIwBomVgBgA6znBrPEgI7AAKpRwACqYsAArEMAAIQxAWrAAKpSYAPAAP9oAgAAAQPAAKppwACsQwAAAAEBAcAAqnUAAACEQGADwAEAbAAAXAE+CU7AAKqMwACqmwAAmatgA5e7AR/AAKqhl9YAAAAAPRzAAKq4gMAAqrPAGibMgo4BAAEnrwwAwAEAbj0ewACq0KATAwACFsAAqtwuJ7OxgMAAquPAGibMAZmrgcAAqvnAGibiPRzAAKsTgMAAqw7AGibMgo4BAAEnrv0AwAEAbj0ewACrLKAUAwACFsAAq0EuohmzsoDAAKtJwBomzAGZq4HAAKtfwBom4j0cwACreYDAAKt0wBomzIKOAQABJ67+AMABAG49HsAAq5KgFAMAAhbAAKunLptks7OAwACrr8AaJswBmauBwACrxcAaJuI9HMAAq9+AwACr2sAaJsyCjgEAASevDgDAAQBuPR7AAKv/oBMDAAIWwACsCy6vCLO0gMAArBrAGibMAZmrgcAArDDAGibiAAAaG8QAGhwKABocUQAaHNsAGh7hABof3gAaIakAGiMaABok6gAaJYAAGiYiABommAAaKBUAAAAMArPHgI7AAKxIwACsTsAAvYYDrxAAAAFgAbMGAAAEBLPJgI7AAKyRwACslgknAGADhOwABLPKgI7AAKyowACsrgmiGQBgA4OQAASzy4COwACswMAArMYJm2QAYAODkAAEs8yAjsAArN/AAKzsGK8IAGADiJEBKwEFs96AjsAArPHAAKzxwACthAAAAAPAAK0MwACthAAAAAUFBcAArScAAACVtGADtZYAwACtNQAAAJKpYAOfIgDAAK1HAAAEJ2ADhOwAwACtUwAABKIZYAODkADAAK1gAAAEm2RgA4OQAABgA7PHAT8ECAGzyYIAwBopBAgBs8qDAMAaKREIAbPLhADAGikfCQDAAK1wsywCAAKAwACtdsAaKOiBwACtfsAaKPYADAazz4COwACticAArZTAAK2tAQCu4LL+AAAAAQPAAK2mwACtrQAAAAAAAABgA8ABAAIBSsAArakBJ0sGs9CAjsAArbLAAK29wACt6AEAruGy/gAAAAEDwACtyMAAregAAAAAAAAAYAPAAQACAUrAAK3LASevEAaz0oCOwACt7cAArfjAAK50AACvCQAAAAEDwACuA8AArnQAAAAAAAAAYAOE7AE+Aj0jHMAArhoWwACuDC6vCLPMSAEAASsAwAD/dRfAAK4MLq8IH8AAriKIuwEAARbAAK4/LiezyQCzzCsBYAOIkUrAAK5LAR/AAK5WhQoBAAEWwACuYi6vCLPMAAaz1ICOwACuecAAroTAALFlAACvCrL+AAAAAQPAAK6XwACxZQAAAAICAsAArqoAAACAlmADhOwAwACuywAAAK7mYAOs5wAAYAOE7AE+Bk7AAK74wACvBgAArwtgA4iRAR/AAK8MiLsBAAGAwACvKcAaKpsAScAArzUcwACvQBbAAK85Lptks8tIAQABKwDAAP91PgE9HMAAr1kWwACvUS6u3rL+swmh/AMAAhrAAK9usDwWwACvfC6EWLMLAYeYKbW1P07AAK+4wACvvgAAgo5gA4XpATXAAK/EAAABAGADhekBH8AAr8SF+QMAAxrAAK/jsDwcwACwARbAAK/5Lq7fsv6zDqGkAgACFsAAsBEuhFizCzHAALA1YAOE7AIcwACwNi6vCQAAAACz0h/AALBJhQoBAAGCwACwVcAaKsAAALXHJsAAsG8BFsAAsG8um2Szy2ADhCUANQAAAAEAWwEXwACwf4PAALB9wBorR4RYFsAAsIwuhFizC4JagwDAGitHPTUAAAABAGADrOcBgcAAsJzAGiqpIxzAALCvhADAGiv1SAEAASsAACsXwACwr4QAwBor9YKOg8AAsLfAGis1rOsBYAOF6U7AALDWwACw3AAAru9gA4iRAR/AALDiiLsBAAGDwACw/8AaKzUASsAAsQsBHsAAsRKzAAIAAoLAALEjwBoqwB7AALEyswACAAKEwACxOsAaLDofwACxRYUKAQABgsAAsVHAGirAAAAABrPVgI7AALFqwACxgcAAswIAAK7ksv4BasAAsWtgA8AA/2gCAAAB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YAOIxwE1AAAAAQBgA4OQARbAAM/LLqIes+EjHMAAz9eCAMAaQeZIAQABKwAAKxbAAM/XggDAGkHmgL2DlAFgA4jHIxzAAM/dggDAGkHbSAEAASsAACsWwADP3YIAwBpB24C9iMoBYAPAAQACIxzAAM/jggDAGkHOSAEAASsAACsWwADP44IAwBpBzmHAAQAGAWADwAD+GyMcwADP6oIAwBpBwUgBAAErAACTggDAGkHBAWADwAD+GwDAAP9BAqHtKaHVKbWvPgFKwADQ1QEcwADQ5BbAANDcLq7esv6zCaGpAwACJsAA0PoBFsAA0Pouoh6z4WADhCWBwADRBsAaP5wBh3GAwADRJ8AaP4y1qAaz7oCOwADRPcAA0WPAANG9AACu5wFqwADRPmADwAD/aAIAAAEDwADRecAA0b0AAAABAQHAANGFAAAApBlgA4TsAABgA6znAUrAANGTASbAANGTAR7AANGkrwQBAAGAwADRucAaQyMAYAOs5waz74COwADRwsAA0dPAANMAAACEMQFqwADRw2ADwAD/aAIAAAEDwADR2sAA0wAAAAABAQHAANHmAAAAhEBgA8ABAGwAAFwBPgVOwADR/cAA0gwAAJmrYAOXuwEfwADSEpfWAAAAAD0cwADSKYDAANIkwBpDj4KOAQABJ68VAMABAG49HsAA0kagFAMAAhbAANJbLqIes+GAwADSZ8AaQ48BmauBwADSfcAaQ6U9HMAA0peAwADSksAaQ4+CjgEAASevFgDAAQBuPR7AANK1oBQDAAIWwADSyi6sxLPigMAA0tfAGkOPAZmrgcAA0u3AGkOlAAAaOB4AGjtlABo7rAAaPD8AGj2xABo/WAAaQu8AGkNbABpETQAAAAgCs/KAjsAA1WzAANVywADwggOvFwAAAWABswYAAAUEs/SAjsAA1u3AANb3CaIeAGADhCUABLP1gI7AANguwADYOgmvGABgA4QlAASz9oCOwADZoMAA2asJrMQAYAOEJQAEs/eAjsAA2sfAANrUCaEfAGADiJEABLP4gI7AANtSwADbaQmhIABdA8AA/r8BYAOJlgABBbQJgI7AANtuwADbbsAA3M8AAAADwADbjsAA3M8AAAAHBwfAANuwAAAAlbRgA7WWAMAA28QAAACSqWADnyIAwADb1gAABKIeYAOEJQDAANvtAAAErxhgA4Ql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AG49HsABDDygFAMAAhbAAQxRLqzEtA6AwAEMXsAaYPIBmauBwAEMdMAaYQgAABpV4AAaWTAAGll3ABpaCgAaWpwAGlxhABpefwAaYFIAGmC+ABphsAAAAAkCtCKAjsABD2XAAQ9rwAEXLwOvIAAAAWABswYAAAMEtCSAjsABD7nAAQ/JCal0AGADwABTxAAEtCWAjsABD97AAQ/mCYWXAGADhOwABLQmgI7AAQ//wAEQFAmuSQBdA8AA/r8BYAOI/AABBbQwgI7AARAZwAEQGcABEOYAAAADwAEQOcABEOYAAAAFBQXAARBbAAAAlbRgA7WWAMABEG8AAACSqWADnyIAwAEQgQAABKl0YAPAAFPEAMABEJ4AAASFl2ADhOwAwAEQswAABK5JXQPAAP6/AWADiPwAAGADtCIBPwQIAbQkggDAGmKGCAG0JYMAwBpilggBtCaEAMAaYqQJAMABENKzLAIAAoDAARDYwBpiaoHAARDgwBpieAAFBrQpgI7AARDrwAERAsABEYABAK7gsv4BasABEOxgA8AA/2gCAAABA8ABERTAARGAAAAAAAAAAGADwAEAAgE+AUrAAREaASbAAREaAR7AAREhnY0DAAMnryEWwAERay6EWLMLFsABEXcuruKy/rMRAGADwAEAAga0KoCOwAERhcABEZzAARHMAQCu4bL+AWrAARGGYAPAAP9oAgAAAQPAARGnwAERzAAAAAAAAABgA8ABAAIBSsABEaoBJ68gBrQsgI7AARHuwAER7sABFc0AAKFaAAAAAQPAARIBwAEVzQAAAAMDA8ABEiEAAACh82ADtTUAwAESKwAAAK7yYAPAAP4bAMABEkAAAACh9WADwAD8VQAAWwE+BknAARJTIRzAARJvFsABEl8WwAESVy6u3rL+swmhGLWbSAEAAWrAARKCYAOv68AAwqYAwAD/dT4BPRzAARKYFsABEpAurt6y/rMJntsDAANqwAESrmADkcXAAHB5FsABEs0uhFizCxbAARLfFsABEtkukqmzCmGfOwDAAFXPP07AARL6wAETAQAAohlgA8AAVrIBHMABExQWwAETAy6pdLQknuYBAAEWwAETMBbAARMrgMABEybAGmPjgL21N4C9iMoAwABT0k7AARNDwAETSgAAm2RgA8AAVrIBHMABE2UWwAETVC6pdLQknuYCAAEWwAET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odMCAAKAwAEoJ8AadkaBwAEoL8AadlYAsyRgA4TsFsABKFMWwAEoQy6vK7RBgym04hbAAShpFsABKGMukqmzCodxnysAta0GtEyAjsABKH3AASiUwAEqRAAAo1ABasABKH5gA8AA/2gCAAABA8ABKKXAASpEAAAABgYGwAEowgAAAIU4XQPAAP6/AWADwABYYADAASjeAAAAgL1gA8ABAAIAwAEo9AAAAFtgA4W2AMABKQsAAACiX2ADnyIAwAEpIgAAAKNPYAOfIgDAASlBAAAAoapgA7LxAABgA4TsAT4BSsABKVIBHMABKWEWwAEpWS6u3rL+swmkDwMAAxzAASmOFsABKX4uryy0QqNQBgAGgMABKaDAGncXgcABKa/AGncugsABKbXAGnc+g8ABKczAGndLhMABKdfAGndZhcABKebAGndnALMoFsABKgoWwAEp+i6vK7RBgym04h7AASoawABbLAEAARbAASo5FsABKikuryy0QpKpswoAALWtBrRNgI7AASpJwAEqWsABKwcAAIQxAWrAASpKYAPAAP9oAgAAAQPAASphwAErBwAAAAEBAcABKm0AAACEQGADwAEAbAAAXAE+BD0cwAEqfoDAASp5wBp4UIKOAQABJ68vAMABAG49HMABKqWAwAEqoMAaeFCCjgEAARbAASqrLq8rtEEAwAEAbj0cwAEqxoDAASrBwBp4UIKOAQABJ68wAMABAG49HMABKu2AwAEq6MAaeFCCjgEAARbAASrzLq8stEIAwAEAbgAAGm3WABpucgAabyUAGnAIABpwdAAace8AGnJlABpyrAAadhIAGnbjABp4HAAaeOMAAAALArRUgI7AAS3PwAEt1cABShcDrzEAAAFgAbRlAAABBLRWgI7AAS4nwAEuMgmfCwBgA8AAWDMAAQW0ZICOwAEuN8ABLjfAAS7cAAAAA8ABLkfAAS7cAAAABAQEwAEuYgAAAJW0YAO1lgDAAS5wAAAAkqlgA58iAMABLoIAAASfC2ADwABYMwDAAS6WAAAArzJgA8ABAAIAAGADtFQBPwIIAbRWggDAGnmOCQDAAS6wtHYEAASAwAEutsAaeXKBwAEuvsAaeYArg8ABLsvAGnmeAAgGtFmAjsABLuHAAS74wAEvGAEAruGy/gFqwAEu4mADwAD/aAIAAAEDwAEvA8ABLxgAAAAAAAAAYAPAAQACAUrAAS8GASevMQa0XICOwAEvHcABLzXAATUdAACiywFqwAEvHmADwAD/aAIAAAEDwAEvU8ABNR0AAAABAQHAAS9pAAAAW10DwAD+vwFgA8AAWGAAAGADwABYHQE+BUnAAS96FsABL4oWwAEvfi6fC7RWnxPAAFbDPgFKwAEv2AEdwAEv5aLLAQABgMABMATAGnpkALMmP0nAATAaIRzAATAogMABMB7AGnpkSAEAASsAwAD+6T4CTsABMD3AATBGAACdJWADwAD+GwEWwAEwVBbAATBILp8LtFavM8AAWDxJwAEwbiEcwAEwgxbAATB8gMABMHLAGnpkYcAA/u9IAQABgcABMIbAGnreAMAA/z8+Az0cwAEw6hbAATDiLq7esv6zCaHRAQABgMABMQHAGnpkALW6PRzAATEdFsABMRUurt6y/rMJogEDAAMWwAExUBbAATFELp8LtFaAvcAAWDeBwAExVsAaet4WwAExYC6EWLMLALW2PYjAATJ2wBp6ZCs/ScABMpshHMABMr4WwAEyqxbAATKfLp8LtFavM8AAWDxIAQABkwDAAP8/PgE9HMABMtQWwAEyzC6u3rL+swme2wMAAxzAATMeasABMupdA5HRAWEDAWADwAD+G2ADkbrAAGa5iD0BAAEWwAEzOBbAATMsLp8LtFavM8AAWDwAkdUWwAEzVy6EWLMLHsABM23AAFszAQABFsABM3wukqmzCgAAwABVzz9OwAEzogAAAK80XQPAAP6/AWADwABYHQBJwAEzuCEcwAEzxoDAATO8wBp6ZEgBAAErAMAA/uk+Aj2JwAEz18AafFEewAEz7sAA+BYBAWADwABYHQEWwAE0CoDAATQAwBp6ZGHAAP7vAEXAATQZAcABNCLAATQkAABiYAPAAP4bAZMBHMABNCuCwAE0KcAafL5jAQABFsABND6BwAE0LcAafFFhwAD+7wDAAP9JAYrAATRGwBp8vhzAATRHgsABNEbAGny+ZAEAAZQAwAD/QT4BPRzAATRlgcABNFXAGnxRgL8CAAKCwAE0ZsAafL4WwAE0pBzAATR/FsABNHcurt6y/rMJpAcCAAIcwAE0mIDAATSPwBp6ZEsBAAGCwAE0mcAafL4AwAD+zioAtbGEJsAAWGIAwAD+zz9KwAE0vwE1wAE0ygAAAQBgA8AAV/IBH8ABNMrAAFgHAgACFsABNNsuruCy/rRogcABNO7AGnxRADUAAAABAFsBHMABNQiCwAE1BsAafY+e4QEAARbAATUNLp8LtFYAwABX+IIAwBp9jwa0XYCOwAE1IsABNTnAATbbAACjUAFqwAE1I2ADwAD/aAIAAAEDwAE1SsABNtsAAAAGBgbAATVnAAAAhThdA8AA/r8BYAPAAFhgAMABNYMAAACAvWADwAEAAgDAATWZAAAAW2ADhbYAwAE1sAAAAKJfYAOfIgDAATXHAAAAo09gA58iAMABNeYAAAChqmADsvEAAGADhOwBPgFKwAE19wEcwAE2BhbAATX+Lq7esv6zCaNUCAAIFsABNiounwu0VoPAATY/wBp+WITAATZSwBp+ZoLAATZpwBp+S4HAATZ8wBp+O4DAATaKwBp+JB7AATahwABbLAEAATUAAAABAGADnyIBg8ABNrDAGn5YIxzAATa6hgDAGn7qSAEAASsAABbAATa9LpKpswqGAMAafuoBYAOfIgCFwAE2zcAafnQAtbAGtF6AjsABNuDAATbxwAE3mQAAhDEBasABNuFgA8AA/2gCAAABA8ABNvjAATeZAAAAAQEBwAE3BAAAAIRAYAPAAQBsAABcAT4EPRzAATcVgMABNxDAGn9mgo4BAAEnrzUAwAEAbj0cwAE3OIDAATczwBp/ZoKOAQABFsABNz4unwu0VgDAAQBuPRzAATdVgMABN1DAGn9mgo4BAAEnrzYAwAEAbj0cwAE3fYDAATd4wBp/ZoKOAQABFsABN4MuruCy/rRoAMABAG4GtFqAjsABN57AATe5wAE7BgEAgm8BasABN59gA8AA/2gCAAABA8ABN8TAATsGAAAAAAAAAGADhOwBPgJJwAE3yhzAATffGMABN9SCb7RpSAEAASsAwAD/dT4BScABN/AlwAE4ABbAATf0Lp8LtFZgA8AAV8E+A07AATg0wAE4QAAAnwtgA8AAV8EBJsABODQBFsABOEcunwu0VmADwABXwT0cwAE4ZBbAAThcLq7esv6zCaH+AwADFsABOJwWwAE4lIDAATiIwBqAcyLAAFfDiOuR3RbAATirLoRYswsWwAE4vRbAATi3LpKpswphnzsAtbI9GcABONSCbxzAATjpFsABOOEurt6y/rMJozwCAAI1wAE5FgAAAQBgA4TsARzAATkWFsABOQ4urt+y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AXusLoRYswujm4DAAXvFwBq0pbMeScABe94ewAF74sAA9/wCAAInnioWwAF78i6iUbTHAD4BSsABfA8BHMABfCAWwAF8Fi6hWbS0rusEAAIawAF8OLBBFsABfEMugJa0xgKDYhbAAXxcLoRYswujm4DAAXx1wBq0pbMeScABfI4ewAF8ksAA9/wCAAInnkMWwAF8oi6iUbTHAD4BSsABfL8BHMABfNAWwAF8xi6hWbS0rusEAAIawAF86LBCFsABfPYugJa0xgKDYhbAAX0PLoRYswujm4DAAX0owBq0pbMeScABfUEewAF9RcAA9/wCAAInni8WwAF9VS6iUbTHAD4BSsABfXIBHMABfYMWwAF9eS6hWbS0rusEAAIawAF9m7BGFsABfagugJa0xgKDYhbAAX3BLoRYswujm4DAAX3awBq0pbMeScABffMewAF998AA9/wCAAInngEWwAF+By6iUbTHAD4BSsABfiQBHMABfjUWwAF+Ky6hWbS0rusEAAIawAF+TbAuFsABflwugJa0xgKDYhbAAX51LoRYswujm4DAAX6OwBq0pbMeScABfqcewAF+q8AA9/wCAAInnkAWwAF+uy6iUbTHAD4BSsABftgBHMABfukWwAF+3y6hWbS0rusEAAIawAF/AbAyFsABfw8ugJa0xgKDYhbAAX8oLoRYswujm4DAAX9BwBq0pbMeScABf1oewAF/XsAA9/wCAAInnicWwAF/by6iUbTHAD4BSsABf4wBHMABf50WwAF/ky6hWbS0rusEAAIawAF/tbA9FsABf8QugJa0xgKDYhbAAX/dLoRYswujm4DAAX/2wBq0pbMeScABgA8ewAGAE8AA9/wCAAInnh0WwAGAJC6iUbTHAD4BSsABgEEBHMABgFIWwAGASC6hWbS0rusEAAIawAGAarBIFsABgHougJa0xgKDYhbAAYCTLoRYswujm4DAAYCswBq0pbMeScABgMUewAGAycAA9/wCAAInniAWwAGA2y6iUbTHAD4BSsABgPgBHMABgQkWwAGA/y6hWbS0rusEAAIawAGBIbBJFsABgTIugJa0xgKDYhbAAYFLLoRYswujm4DAAYFkwBq0pbMeScABgX0ewAGBgcAA9/wCAAInnjwWwAGBki6iUbTHAD4BSsABga8BHMABgcAWwAGBti6hWbS0ruoEAAMWwAGB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gIGslcAbMJOCrKDAGzCfg6ypwBswsgA1AAAAAQBbARest4WstcAbMNeEWB6sxMAAWywBAAGErNPAGzC+AIJahQDAGzDXBrXkgJCs4qztrk4AAKOYAAAAAQOs/65OAAAABwYGrRsAAACCcGADiJEArTYAAACD0WADhOwArVAAAACjlWADh6IArWsAAACCbWADhOwArYIAAACfDWADhOwArZcAAACSqWADnyIAAa2qAAAAhkdgA8AA/FUBaq2zYAPAAPxVAGADhOwBPgFKrcEBNa3MAAABAGADsoIBH63Mso4GAAWArdnAGzFTga3jwBsxX4Kt7cAbMWuDrffAGzF3hK39wBsxgwGGR4auF8AbMZw1AAAAAQBbAReuKIeuJsAbMcCEWB6uNcAAWywBAAGFrkTAGzGPAIJahwDAGzHABrXlgJCuU65cr70AAKOXAAAAAQOub6+9AAAABwYGrosAAACCcGADiJEArqYAAACD0WADhOwArsAAAACjlWADh6IArtkAAACCbWADh0MArvAAAACfDWADhOwArwUAAACSqWADnyIAAa8YAAAAhkdgA8AA/FUBaq8hYAPAAPxVAGADh0MBPgFKry8BNa86AAABAGADsuMBH686su8GAAWAr0jAGzJMga9SwBsyWIKvXMAbMmSDr2bAGzJwhK9swBsyfAGGR4avhsAbMpU1AAAAAQBbARevl4evlcAbMrmEWB6vpMAAWywBAAGFr7PAGzKIAIJahwDAGzK5BrXmgJCwJbA3sWAAAKO4AAAAAQOwTrFgAAAABQUFsFwAAACjsGADnyIAsHcAAACjjGADnyIAsJkAAACF0mADhOwAsLAAAACjFmADnyIAsMgAAAAiYAOE7AAAYAOEuAE+AUqw1wEfsOKsygEAASaw/AEcsPwuo7UGAAaAsRvAGzNFgbEqwBszUYKxO8AbM12DsUbAGzNphLFNwBszdSsAtedgA4fQAAa154CQsa2xt7hVAACjtQAAAAEDscy4VQAAAAYGBrHTAAAAo7BgA58iALHoAAAAo4xgA58iALIKAAAAhdJgA4TsALIbAAAAoxZgA58iALItAAAAImADhOwAsjwAAACiPGADnyIAAGADh6IBPgROs72zyQAAmMBgA8AA/hsBFrPgFrPbgbPLwBsz94O1nz2DYp8+TrPwAAAAmRVgA8AA/hsAPgROtNS05gAAr2hgA58iATUAAAABAGADnyIBg7TowBs0DyMctO4UAMAbNH8IAEgBAAErAAAWtQGBtPHAGzP3nXmfLxQAwBs0fwgAAWADnyJOtRe1KgAAr2lgA58iAYG1LMAbM/dBQ7VDIRa1XhS1S8AbNL8JAJ3WnzA+A061dbV/AACvamADnyIBFrWUFLWBwBs0vwkAg7WfPUm1ohy1sBS1psAbNOsKAEgBAAEUtbPAGzRxCAAAwAD/dT4BQrXSAEm16CIetezAAFsoAgACJ4CnFLX6wBs06woAAAActiMWth4UthTAGzTrCgCDtZ89SAEAARS2JsAbNHEIAADAAP91PgFCtr8APz0VttjAGzS/CRS27cAbNOsKAEm3Bha3HRS3CsAbNL8JAJ3WnzA+AT2Pty7AGzRgjrc6wBs0Oxy3SJSBxgAAAADAAP4+PgE9j7djwBs0YBy3iRa3ghS3b8AbNL8JAINinz5kAQABFreeFLeLwBs0vwkAYZ87AMAA/0FKt7gBH7fDrNIEAAGCt9vAGzQDA4Y2hrgEwBs0O4Y3h7gtwBs0YCKEuEnAGzQbBrXogJC4WrhluO0AAKKVAAAAAQO4erjtAAAAAgICuIYAAACFymADhOwAuJUAAACSqWADnyIAAGADhOwBPgFKuKIBNbitAAABAGADh00BH7ith1cBAAGAuL3AGzY8ADUAAAABAFsBF7jHgrjFwBs2YYRYHrjUwABbLAEAAYG448AbNkgAglqCAMAbNmEGtemAkLlouXK7jwAAoToAAAABA7l9u48AAAADAwO5iwAAAKBrYAOfIgC5pgAAAIYtXQPAAP6/AWADh6IAubgAAAChOWADnyIAAGADh6IBPgNOudoAAACdV10DwAD+vwFgA4eiAEW55AG57bnvAABiYAPAAP4bAZMBHLn2hLn0wBs3E2MBAAEWugOBufjAGzbUYcAA/u8AwAD/SQGMugvAGzcTHLoMhLoLwBs3E2QBAAGUAMAA/0E+Ak66IrosAACFaGADh6IBHLo4gbouwBs21EsBAAGEujnAGzcTAMAA/s5JukMlulGFukfAGzdkYAO2Fz4CPSMcunqDunXAGzb8SAEAASsAwAD+6Yu6dcAbNvweuoLAAP7FAQFgA4eiARy6ooG6l8AbNtSgOQIAApOEuq7AGzcTAMAA/uMAKwFdA8AA/r8BYAOHoj0cusCDurvAGzb8gKUBAAEWutEUusfAGzdkBQFgA7YXr2u2GQDAAP7RSbrtIRy69oO68cAbNvxIAQABKwDAAP7pPgE9HLsOg7sJwBs2/FYBAAGFuxLAGzdkAMAA/tA/SrswATW7OwAAAQBgA6zTAR+7O6zZAQABNQAAAAEAXQPAAP6/AWADh6IBg7tJwBs2/CMcu06EAMAbOGtIAQABKwAAgbtRwBs21IQAwBs4awFdA8AA/r8BYAOHogA1AAAAAQBbARe7ZYS7Y8AbOFeEWB67csAAWywBAAGAu4HAGzbIAIJahADAGzhXBrXqgJC7yLvSvHAAAKPgAAAAAQO75rxwAAAAAwMDu/QAAACj3GADnyIAvAkAAACZWmADwAD/aAC8FgAAAKI8YAOfIgAAYAOHogE+AUq8JwE1vDIAAAEAYAOH5wEfvDKH8AEAASsANQAAAAEAWwEXvEiDvEbAGzkthFgWvGKAvFXAGzj6h3GfK4JagwDAGzktBrXrgJC8prysvlQAAKMdAAAAAQO8t75UAAAABwcHvMUAAACjFGADnyIAvN8AAACjGmADiPwAvPoAAACjFWADnyIAvSIAAACvbGADiJEAvVAAAACvbWADiJEAvXQAAACvbmADiPwAvZQAAACCbWADh6IAAGADiGcBPgFKvaABNb2rAAABAGADrmcBH72rrmwEAAKDvbnAGzmuhr3NwBs50gKGW4G94sAbOZaGXIS9/cAbObo1AAAAAQBbARe+Goe+GMAbOeuEWB6+J8AAWywBAAE1AAAAAQBgA58iAYC+NsAbOYojHL5AFADAGzo+CABIAQABKwAAgr5DwBs5ohQAwBs6PggAAWADnyIAglqHAMAbOesGteyAkL+ev6nAAEDGAACh8gAAAAEDv8TAAEDGAAAABQUFv9AAAACF0mADhOwAv+EAAACi5GADnyIAv/wAAACi6WADhOwAwABAEgAAAKHfYAOfIgDAAEAkAAAAouhgA4TsAABgA4TsAT4BSsAAQDoBNcAAQEUAAAEAYAOGRgEfwABARYZTBAAEgMAAQGTAGzqhgsAAQG/AGzq5hMAAQH/AGzrTKwA1AAAAAQBbARfAAECdhcAAQJvAGzrwhFgewABAqsAAWywBAAGBwABAucAbOq0AglqFAMAbOvAGte2AkMAAQQLAAEEMwABBswAAo+oAAAABA8AAQSPAAEGzAAAAAwMDwABBMQAAAKPkYAOfIgDAAEFJAAAAmVpgA8AA/2gAwABBVgAAAKI8YAOfIgAAYAOHogE+AUrAAEFnATXAAEFyAAABAGADh+cBH8AAQXKH8AEAASsANQAAAAEAWwEXwABBiIPAAEGGwBs7vYRYFsAAQaWAwABBlcAbO4KHcZ8rglqDAMAbO70Gte6AkMAAQenAAEHzwABCugAAo4YAAAABA8AAQgTAAEK6AAAABQUFwABCCwAAAKODYAOfIgDAAEIgAAAAgm1gA4eiAMAAQjIAAACjhGADnyIAwABCSwAAAIXSYAOE7ADAAEJcAAAAojxgA58iAABgA4eiAT4BSsAAQm0BNcAAQngAAAEAYAOtEwEfwABCeK0ZAgACgcAAQoPAGzw+g8AAQonAGzxaADUAAAABAFsBF8AAQpWFwABCk8AbPIWEWBbAAEKsgMAAQqLAGzwwh3GfK4JahQDAGzyFBrXvgJDAAEMuwABDOMAAQ7YAAKGYAAAAAQPAAENRwABDtgAAAAICAsAAQ10AAACCb2ADhOwAwABDbwAAAKI8YAOfIgAAYAOHogE+AUrAAEOAAR/AAEOLrTMBAAGAwABDp8AbPQkABrXwgJDAAEQawABEJMAARHcAAKOuAAAAAQPAAEQ4wABEdwAAAAEBAcAARD8AAACiPGADnyIAAGADh6IBPgFKwABEUAEfwABEW60sAAAAAAa18YCQwABErsAARLjAAEZNAACikQAAAAEDwABEysAARk0AAAAJCQnAAETYAAAAon1gA58iAMAARPAAAACjjGADnyIAwABFIQAAAIZCXQPAAP6/AWADiJEAwABFOAAAAKJ/YAOfIgDAAEVYAAAAhdJgA4TsAMAARXMAAACihGADh6IAwABFngAAAK9vXQPAAP6/AWADhOwAwABFtAAAAK9wYAOfIgDAAEXWAAAAgm1gA4eiAABgA4eiAT4BSsAAReIBNcAARe0AAAEAYAOtQgEfwABF7a1JBAAEgsAARfnAGz3ahMAARgTAGz39hsAARg/AGz4ZFMAARhnAGz48CAAANQAAAAEAWwEXwABGJxTAAEYlwBs+WQkAhFgWwABGP4DAAEY0wBs9vodxnyuCWhQAwBs+WQkABrXygJDAAEaGwABGkMAAR4YAAKJPAAAAAQPAAEahwABHhgAAAAUFBcAARqgAAACvcWADnyIAwABGvgAAAIXSYAOE7ADAAEbZAAAAr3JgA4eiAMAARu4AAACvc2ADnyIAwABHBQAAAK90YAOHogAAYAOHogE+AUrAAEcaATXAAEclAAABAGADrWwBH8AARyWtcgMAA4HAAEcwwBs/A4LAAEc7wBs/EYTAAEdKwBs/LQA1AAAAAQBbARfAAEdhhcAAR1/AGz9KhFgWwABHeIDAAEduwBs+9YdxnyuCWoUAwBs/Sga184CQwABIwsAASM3AAEoKAACi4QAAAAEDwABI38AASgoAAAAEBATAAEjyAAAAhcpgA4TsAMAASQEAAACd2GADnyIAwABJEwAAAK91YAOfIgDAAEkpAAAAgpRgA4j8AABgA4TsAT4DTsAASUDAAElHAACBdmADhOwBNcAASU0AAAEAYAOGlQEfwABJTYagAgACgMAASVrAGz/Xg8AASWPAG0ABADUAAAABAFsBF8AASXGEwABJb8AbQCqEWB7AAEl+wABbLAEAAYHAAEmNwBs/5QCCWoQAwBtAKknAAEmeIRzAAEmugsAASaLAGz/zSAEAASsAwAD/dT4BPYzAAEm/wBtAGBzAAEnILqHuAwADhMAASdLAG0AYgsAASdrAGz/zKgC19T9KwABJ+QGEwABKAMAbQBgGtfSAkMAASp7AAEqpwABLlwAAofAAAAABA8AASsDAAEuXAAAAAwMDwABK0wAAAK92YAOE7ADAAErmAAAAhc5gA58iAMAASvsAAACvd2ADhOwAAGADhOwBPgFKwABLDwE1wABLGgAAAQBgA4Y5AR/AAEsahkUDAAOAwABLNcAbQQ0WwABLS4HAAEtCwBtBG53Zn0GCwABLWMAbQSkANQAAAAEAWwEXwABLboPAAEtswBtBRoRYHsAAS3vAAFssAQABgcAAS4rAG0EbAIJagwDAG0FGBrX1gJDAAEucwABLp8AATCkAAKHuAAAAAQPAAEuwwABMKQAAAAMDA8AAS7wAAACFymADhOwAwABLywAAAJKpYAOfIgDAAEvXAAAAhJNgA8AA/FUAAGADhOwBPgFKwABL6gE1wABL9QAAAQBgA4YuAR/AAEv1hjgBAAGAwABL+cAbQeAANQAAAAEAWwEXwABMA4PAAEwBwBtCG4RYHsAATBDAAFssAQABgcAATB/AG0HuAIJagwDAG0IbBrX2gJDAAEzKwABM1cAATVoAAKHGAAAAAQPAAEzxwABNWgAAAAMDA8AATP8AAACjjGADnyIAwABNGwAAAIJvYAOE7ADAAE0tAAAAr3BgA58iAABgA4TsAT4BSsAATUUBgcAATUzAG0KoBrX3gJDAAE3awABN5MAATpcAAKOoAAAAAQPAAE36wABOlwAAAAICAsAATgEAAACveGADnyIAwABOFwAAAKI8YAOfIgAAYAOHogE+AUrAAE4oAR/AAE4zrTMBAAE1wABOXAAAAQBgA4cHAR/AAE5chw8AAAAANQAAAAEAWwEXwABOZ4LAAE5lwBtDOIRYHsAATnTAAFssAQABgMAAToPAG0MDAIJaggDAG0M4AAa1+ICQwABO0cAATtvAAE+hAACiQwAAAAEDwABO8MAAT6EAAAADAgLAAE71AAAAhFhgA8AA/hsAwABPDAAAAIJvYAOE7AABwABPJAAAAKJEYAPAAPxVAWrAAE8tYAPAAPxVd2ADh6IBPgFKwABPOgE1wABPRQAAAQBgA64BAR/AAE9FrgkCAAKCwABPVMAbQ86BwABPXcAbQ78ANQAAAAEAWwEXwABPcYPAAE9vwBtD+IRYNQAAAAEAYAPAAP4bAYDAAE9+wBtDryMcwABPiYQAwBtEO0gBAAErAABqwABPlWADwAD+G4GehADAG0Q7AWADwAD+G4JagwDAG0P4BrX5gJDAAE+mwABPscAAUF0AAKIrAAAAAQPAAE/KwABQXQAAAAICAsAAT+MAAACF110DwAD+vwFgA4TsAMAAT/YAAACSqWADnyIAAGADhOwBPgFKwABQAwE1wABQDgAAAQBgA4ZUAR/AAFAOhl4BAAGAwABQIsAbRK0ANQAAAAEAWwEXwABQN4LAAFA1wBtE34RYHsAAUETAAFssAQABgcAAUFPAG0TCAIJaggDAG0TfBrX6gJDAAFEOwABRGMAAUXQAAKKPAAAAAQPAAFEuwABRdAAAAAEBAcAAUTkAAACFaGADh6IAAGADh6IBPgFKwABRSgEfwABRVYfmAQABgMAAUWbAG0VeAAa1+4CQwABRecAAUYTAAFHvAACh6gAAAAEDwABRmMAAUe8AAAABAQHAAFGfAAAAkqlgA58iAABgA4TsAT4BSsAAUawBNcAAUbcAAAEAYAOG/gEfwABRt4cGAAAAADUAAAABAFsBF8AAUcmBwABRx8AbRdOEWB7AAFHWwABbLAEAAYDAAFHlwBtFtgCCWoEAwBtF0wa1/ICQwABSUMAAUlvAAFLjAACh/QAAAAEDwABSZsAAUuMAAAACAgLAAFJtAAAAr3lgA58iAMAAUoYAAACCb2ADhOwAAGADhOwBPgFKwABSmAE1wABSowAAAQBgA4cQAR/AAFKjhxoBAAGBwABSqcAbRlcANQAAAAEAWwEXwABStoLAAFK0wBtGdIRYHsAAUsPAAFssAQABgMAAUtLAG0ZJAIJaggDAG0Z0BrX9gJDAAFLowABS7cAAUwwAAKGGAAAAAQPAAFL0wABTDAAAAAEBAcAAUvwAAACvemADwAD/aAAAYAPAAPxVAUrAAFMCASXAAFMEgMAAUwLAG0bzYAOHEAa1/oCQwABVZ8AAVXHAAFbsAACjJwAAAAEDwABVg8AAVuwAAAAFBQXAAFWKAAAAoyBgA58iAMAAVaAAAACCbWADh6IAwABVuAAAAK97XQPAAP6/AWADiGcAwABVzAAAAKMhYAOfIgDAAFXmAAAAoyJgA4eiAABgA4eiAT4ETsAAVgTAAFYLAACBdmADh6IBgcAAVg3AG0dZScAAVhchHMAAViiCwABWG8AbR2dIAQABKwDAAP7pPgE9jcAAVjnAG0ehH8AAVkaucwIAAoXAAFZXwBtHoYLAAFZfwBtHZwA/ScAAVnghHMAAVomEwABWfMAbR4pIAQABKwDAAP91PgE9jcAAVprAG0ehH8AAVqeueAIAAoXAAFa6wBtHoYTAAFbCwBtHigA/SsAAVtsBhcAAVuLAG0ehBrX/gJDAAFbxwABXB8AAV5EAAKJmAAAAAQPAAFcbwABXkQAAAAICAsAAVz0AAACva10DwAD+vwFgA4iRAMAAV08AAACArGADwAEAgwAAYAO2FwE+AUrAAFdaAR/AAFdltiECAAKAwABXe8AbSIKBwABXicAbSJcABrYAgJDAAFeWwABXsMAAWD0AAKJ0AAAAAQPAAFfXwABYPQAAAAEBAcAAV/UAAACiZmADthcAAF0DwAD+vwFgA4iRAT4BSsAAWBEBFsAAWC2AwABYGMAbSPqva7YZBrYBgJDAAFhCwABYTMAAWfwAAKE+AAAAAQPAAFhZwABZ/AAAAAEBAcAAWGQAAACFaGADh6IAAGADh6IBPgFJwABYdSXAAFiDgMAAWHnAG0lXYAO2Fz4BSsAAWKUBNcAAWLAAAAEAYAOs0wEfwABYsKzZAQABHsAAWM3AAP7FAgFgA4eiARbAAFjsFMAAWOLAG0lXAAFgA7YXr2u2GQGFdikANQAAAAEAWwEXwABZFYHAAFkTwBtJjYRYFsAAWSwUwABZIsAbSVcAAWADtheEWIJaglqBAMAbSY1JwABZQyXAAFlRgMAAWUfAG0lXYAOIkT4BSsAAWXEBNcAAWXwAAAEAYAOs0wEfwABZfKzZAQABMcAAWZVgA4eiARTAAFmWwBtJVwABYAOIkQA1AAAAAQBbARfAAFmsgcAAWarAG0ophFgWwABZwxTAAFm5wBtJVwABYAOIkYRYglqCWoEAwBtKKT4BSsAAWeIBgMAAWenAG0lXBrYCgJDAAFqPwABamcAAW08AAKOsAAAAAQPAAFqtwABbTwAAAAMDA8AAWrsAAACjhGADnyIAwABa1AAAAIXSYAOE7ADAAFrpAAAAgm1gA4eiAABgA4eiAT4BSsAAWvUBNcAAWwAAAAEAYAOuzgEfwABbAK7UAgACgcAAWw7AG0rZgsAAWxnAG0rnADUAAAABAFsBF8AAWyeDwABbJcAbSwSEWBbAAFtBgMAAWzTAG0rLh3GfK4JagwDAG0sEBrYDgJDAAFwdwABcJ8AAXPQAAKO7AAAAAQPAAFw7wABc9AAAAAQEBMAAXEkAAACvfGADnyIAwABcXQAAAK99YAOfIgDAAFxuAAAAgm9gA4TsAMAAXIAAAACiPGADnyIAAGADh6IBPgFKwABckQE1wABcnAAAAQBgA67VAR/AAFycrtsCAAIhHMAAXK+BwABcqsAbS5ZIAQABKwDAAP91gsAAXLjAG0ukADUAAAABAFsBF8AAXMyEwABcysAbS8+EWBbAAFzmgMAAXNnAG0uIh3GfK4JahADAG0vPBrYEgJDAAF08wABdR8AAXb8AAKKHAAAAAQPAAF1rwABdvwAAAAEBAcAAXXYAAACFaGADh6IAAGADhOwBPgFKwABdhwEWwABdsSbAAF2ZAIDAAF2PwBtMY2ADh6iCb4eqBrYFgJDAAF3EwABdycAAXe4AAKPWAAAAAQPAAF3QwABd7gAAAAEBAcAAXdgAAACD82ADwAD/aAAAYAPAAPxVAUrAAF3hASXAAF3mgMAAXeHAG0zDYAOHsga2BoCQwABeU8AAXljAAF6cAACiiAAAAAEDwABeaMAAXpwAAAABAQHAAF5zAAAAhWhgA4eiAABgA8AA/FUBSsAAXoEBJcAAXouAwABegcAbTRtgA4fIBrYHgJDAAF6hwABepsAAYMEAAKN9AAAAAQPAAF61wABgwQAAAAEBAcAAXr0AAACD82ADwAD/aAAAYAPAAPxVAT4FScAAXsklwABe0oDAAF7NwBtNcWADh6g+Ak7AAF8GwABfEAAAhWhgA4eoASbAAF8GAYDAAF8SwBtNcWADh6g9iMAAXx7AG01xFsAAXy+BwABfJcAbTaWCb4eqP0nAAF9FJcAAX06AwABfScAbTXFgA4iRPgJOwABfgsAAX4sAAIJwYAOIkQEmwABfggGAwABfjcAbTXFgA4iRPYjAAF+ZwBtNcRbAAF+pgcAAX6DAG04AhSGImT9JwABfwCXAAF/JgMAAX8TAG01xYAOuVT4CTsAAYA3AAGATAACvfmADrlUBJsAAYA0BgMAAYBXAG01xYAOuVT2IwABgIcAbTXEWwABgLoHAAGAowBtOW6QUrlk/ScAAYEMlwABgTIDAAGBHwBtNcWADh3Q+Ak7AAGBgwABgZAAAml1gA4d0ASbAAGBgAYDAAGBmwBtNcWADh3Q9iMAAYHLAG01xFsAAYIYWwABgfYHAAGB5wBtOtoJwh3aFIYiZP0rAAGCdASXAAGCpgMAAYKTAG01xYAOE9Aa2CICQwABhK8AAYTDAAGGEAACihgAAAAEDwABhRcAAYYQAAAABAQHAAGFQAAAAhWhgA4eiAABgA8AA/FUBSsAAYWQBJcAAYW6AwABhZMAbT0BgA4eoBrYJgJDAAGGJwABhjsAAYcUAAKQNAAAAAQPAAGGewABhxQAAAAEBAcAAYaYAAACD82ADwAD/aAAAYAPAAPxVAUrAAGGvASXAAGG0gMAAYa/AG0+WYAOG/ga2CoCQwABhysAAYc/AAGITAACicwAAAAEDwABh5cAAYhMAAAABAQHAAGHtAAAAg/NgA8AA/2gAAGADwAD8VQFKwABh9gElwABh+4DAAGH2wBtP7mADthcGtguAkMAAYoPAAGKXwABk1QAAr38AAAABA8AAYrDAAGTVAAAACQICwABivwAAAIC9YAPAAQACAMAAYskAAAChE2ADwAD+GwAHwABi8QAAAIUhYAOE7AFqAGADwAD/JXnAAGMNAAAAgpRgA4j8AWoAYAPAAP8lecAAYx4AAACEIGADwAD8VQFqwABjJ2ADwAD8VQDAAGM5AAAAhCJgA8AA/FUBasAAY0JgA8AA/FUAwABjVAAAAIZtYAPAAPxVAWrAAGNjYAPAAPxVAMAAY3UAAACEJWADwAD8VQFqwABjgmADwAD8VQDAAGOUAAAAo3BgA8AA/FUBasAAY6VgA8AA/FUAYAOIkQE+AUrAAGOzAR/AAGO+rrAJAAKAwABj2sAbUEaBwABj4MAbUFYHgpSDwABkBMAbUH6FIYLAAGQfwBtQZ4QghMAAZD3AG1CVhCKFwABkV8AbULGGbYbAAGR3wBtQzYQlh8AAZJvAG1Dpo3AUwABkwcAbUQUIAAa2DICQwABk2sAAZO7AAGX7AACh2AAAAAEDwABlD8AAZfsAAAADAgLAAGUbAAAAhFhgA8AA/hsAwABlMgAAAIUhYAOE7AABwABlTwAAAIKUYAOI/AFqwABlXGADiROEm2ADiJEBPgFKwABlcgE1wABlfQAAAQBgA66gAR/AAGV9rrIBAAGBwABlosAbUdIANQAAAAEAWwEXwABlt4PAAGW1wBtSCIKUgsAAZb7AG1HhiJc1AAAAAQBbARfAAGXLg8AAZcnAG1IIhFg1AAAAAQBgA8AA/hsBgMAAZdjAG1HCIxzAAGXjhQDAG1JlSAEAASsAAGrAAGXvYAPAAP4bgZ6FAMAbUmUBYAPAAP4bglqDAMAbUggGtg2AkMAAZgDAAGYEwABmZQAAr4AAAAABA8AAZg3AAGZlAAAAAgICwABmIgAAAIJwYAOIkQDAAGY3AAAAgm1gA4TsAABgA4d0AT4BSsAAZkMBH8AAZk6HfwIAAoDAAGZSwBtS14HAAGZcwBtS5QAGtg6AkMAAZmrAAGZ3wABpLAAAr4EAAAABA8AAZonAAGksAAAACAEBwABmlAAAAIJtYAOHogAHwABmtQAAAITFXQPAAP6/AWADiZYBagBgA8AA/yV5wABm5QAAAITHXQPAAP6/AWADiJEBagBgA8AA/yV5wABnGwAAAITIXQPAAP6/AWADiJEBagBgA8AA/yV5wABnNgAAAIU6YAPAAP4bAWoAYAPAAP8lecAAZ10AAACFVWADiPwBasAAZ29gA4kThJvAAGeQAAAAhWtgA4TdAWrAAGepYAOE3YV4wABnwQAAAIVsYAOE3QFqAGADwAD/JXlgA4TBAT4BSsAAZ9kBH8AAZ+StTAgAAYDAAGf5wBtTRgeExYHAAGgXwBtTVYTHgsAAaEXAG1NzhMiDwABodMAbU5GFOoTAAGilwBtTr4VVhcAAaNHAG1PIhWuGwABo8sAbU+GFbIfAAGkYwBtT+ga2D4CQwABpMcAAaT/AAGmIAACvggAAAAEDwABpUsAAaYgAAAABAQHAAGlaAAAAgL1gA8ABAAIAAGADiZYBPgFKwABpZgEfwABpcYmqAQABgMAAaX/AG1SnAAa2EICQwABpjcAAaZ/AAGoJAACvHAAAAAEDwABptsAAagkAAAABAQHAAGnFAAAAhq5gA4mWAABgA4mEAT4BSsAAadoBH8AAaeWJlQEAAYDAAGn3wBtVAQAGthGAkMAAag7AAGohwABqzgAAr4MAAAABA8AAajnAAGrOAAAAAgICwABqRQAAAIRYYAPAAP4bAMAAal4AAACCbmADhMEAAGADh10BPgFKwABqbgE1wABqeQAAAQBgA4ddAR/AAGp5h2cBAAGBwABqjMAbVWkANQAAAAEAWwEXwABqnoLAAGqcwBtVhoRYNQAAAAEAYAPAAP4bAYDAAGqrwBtVWSMcwABqtoMAwBtVwEgBAAErAABqwABqwmADwAD+G4GegwDAG1XAAWADwAD+G4JaggDAG1WGBrYSgJDAAGrTwABq5MAAa8MAAK+EAAAAAQPAAGr8wABrwwAAAAMDA8AAawgAAACEWGADwAD+GwDAAGsfAAAAgm9gA4TsAMAAazUAAABbYAOFtgAAYAOF1gE+AUrAAGtGATXAAGtRAAABAGADrcQBH8AAa1GtzgMAA4HAAGtqwBtWQhrAAGt2sDAmwABrgAGCwABrgMAbVlBgA6y0ADUAAAABAFsBF8AAa5ODwABrkcAbVmyEWDUAAAABAGADwAD+GwGAwABroMAbVjIjHMAAa6uEAMAbVsBIAQABKwAAasAAa7dgA8AA/huBnoQAwBtWwAFgA8AA/huCWoMAwBtWbAa2E4CQwABryMAAa9jAAGxIAACvhQAAAAEDwABr7cAAbEgAAAACAgLAAGv1AAAAgL1gA8ABAAIAwABsBgAAAIJvYAOE7AAAYAOFxAE+AUrAAGwYAR/AAGwjhc0CAAKAwABsM8AbVzKBwABsOcAbV0IABrYUgJDAAGxNwABsXsAAbSYAAK0ZAAAAAQPAAGx0wABtJgAAAAMDA8AAbIAAAACEWGADwAD+GwDAAGyWAAAAhJ1gA4QlAMAAbKsAAABbYAOFtgAAYAOF+wE+AUrAAGy8ATXAAGzHAAABAGADhfsBH8AAbMeGDAIAAoHAAGzYwBtXs4LAAGzjwBtXwQA1AAAAAQBbARfAAGz2g8AAbPTAG1fdhFg1AAAAAQBgA8AA/hsBgMAAbQPAG1ejIxzAAG0OhADAG1ggSAEAASsAAGrAAG0aYAPAAP4bgZ6EAMAbWCABYAPAAP4bglqDAMAbV90AABse3gAbH+gAGyGFABsh2AAbIiIAGyJsABsitgAbIxcAGyNaABsj6AAbJHYAGyU8ABslogAbJsMAGyfkABspFAAbKboAGypIABsq1gAbK2IAGywBABssRQAbLJ0AGyzjABstggAbLisAGy7dABsvjwAbMGIAGzE1ABsyLgAbMycAGzPNABs2HgAbNqoAGzjcABs5bAAbOn8AGztaABs8CAAbPOEAGz1HABs9lgAbPs0AGz+vABtA5QAbQbgAG0JyABtC2wAbQ4cAG0SFABtFNgAbRY4AG0YhABtGywAbRyMAG0haABtI0gAbSS8AG0qjABtLYAAbTDsAG0ybABtM8wAbTUkAG08YABtPbgAbT8YAG1AeABtRmgAbUq8AG1MeABtUfwAbVNkAG1UxABtWCgAbVwoAG1d7ABtYagAAAE4CtheAkMAAbSvAAG0xwABvIwOvhgAAAWABh6IAAAIEthmAkMAAbX3AAG2JCa9rAF0DwAD+vwFgA4iRAAS2GoCQwABtl8AAbZoJgKwAYAPAAQCDAAEFtiGAkMAAbZ/AAG2fwABt+gAAAAPAAG20wABt+gAAAAICAsAAbboAAASva10DwAD+vwFgA4iRAMAAbc0AAASArGADwAEAgwAAYAO2FwE+AT0ewABt2II0AgACFsAAbeMur2u2GS4AAwgBthmAAMAbWiIIAbYagQDAG1o3CQHAAG2fh6cAAAAABAa2HICQwABt/8AAbf/AAG45AACEUgAAAAEDwABuBcAAbjkAAAABAQHAAG4GAAAAgPJdA5kiAVsAAFsBPgE9HsAAbg+djQMAAyeEUhbAAG4lLoRYgloWwABuMS6ArLYaAAa2HYCQwABuPsAAbj7AAG5/AACFjQAAAAEDwABuRcAAbn8AAAACAgLAAG5GAAAAgPJdA5q9AltbAMAAbkkAAACFjlsAAFsBPgE9HsAAblSdjQMAAyeFjRbAAG5rLoRYgloWwABudy6ArLYaAAa2HoCQwABuhMAAboTAAG7MAACEUwAAAAEDwABukcAAbswAAAABAQHAAG6SAAAAgPJdA5pEAVsAAFwBPgE9HsAAbpudjQMAAyeEUxbAAG64LoRYgloWwABuxC6ArLYaAAa2H4CQwABu0cAAbtHAAG8hAACEWQAAAAEDwABu4sAAbyEAAAABAQHAAG7jAAAAgPJgA5qAAABbAT4BPR7AAG7snY0DAAMnhFkWwABvDS6EWIJaFsAAbxkugKy2GgAAABtaiAAbWugAG1tUABtbtAAbXBIAAAAEAAAAAYCQABtcLgAbHpMAG1mrABtcKwAAAAIAG1wuAAAAAAACBrYir4eAkQAAAoEDAACCLgABAQSGhJqzmrSavoFkAACdhwABAQKdD50nAAAAAQK2I4CRgpeCnYSXA6EBAAABYAGI/AAAAAEFtiuAkYLHgs2C4wEAAAOC4YLjAAAAAAAAAGADtiMBPwEJAYLNiQYAAAAABAa2JYCRguiC+IMrAQCGhQFqgulgA8AA/2gCAAABA4MEgysAAAAAAAAAYAOI7gFKgwcBJoMHAR6DB52NAwADJ4aFHIMilIHGAAAAAMAA/j4rAGADiO4GtieAkYMwgzyDnwAAhFIBaoMxYAPAAP9oAgAAAQODQoOfAAAAAQEBg1sAAACA8l0DmbUBYAPAAP9oAABbAT4BPR6DZJ2LBAAEJIN8ARaDcC6FnsAA/3wkg5ABFoODgIOBwBtdP4WewAD/fByDkpSBxgAAAADAAP4+KwAGtiiAkYOkg7CEIgAAhY0BaoOlYAPAAP9oAgAAAQODt4QiAAAAAgICg9kAAACA8l0DmcICYAPAAP9oYAPAAP9oAIPcAAAAhY5bAABbAT4BPR6D552LBAAEJIP/ARaD8y6FnsAA/3wkhBMBFoQGgIQEwBtduoWewAD/fByEFZSBxgAAAADAAP4+KwAGtimAkYQnhDOElQAAhFMBaoQoYAPAAP9oAgAAAQOEQISVAAAAAQEBhFEAAACA8l0DmkQBYAPAAP9oAABcAT4BPR6EWp2LBAAEJIRyARaEZi6FnsAA/3wkhIYBFoR5gIR3wBteRIWewAD/fByEiJSBxgAAAADAAP4+KwAAABtcwgAbXRcAG12SABteHAAbXpcAAAAEAAAAAYCRABteswAbXH0AG16wAAAAAQAbXrMAAAAAAAIGtiwAgJIAAAmA3AAAgi4AAQEMho+GhJqzhouGlYaRhoiGpoazhqmGooaNggkAAJsaAAEBAZshgk8AAKhjAAEBAahFgo4AAMAAUb4AAQECqDqoO4LcAAComQABAQiesqjpqOqeyqj1ns2ezqiwg9wAAMAAU5AAAQEBqIOEHQAAwABTqAABAQGohIRnAACMewABAQaCKYlGiUyJUY/Wj9qFlwEAqGMAAQEBqEUBqI4AAAICtj6AkqUspTKsyQOviAAAAWABwAD/aAABXQHAAFHBAWADwAD+GwQEtkCAkqVppXEYpKEAXQPAAP6/AWADwAD+GwErBLZBgJKlj6WYGIZCAF0DwAD+vwFgA8AAWEMABLZCgJKlrqW0GKg9AF0DwAD+vwFgA8AAWB0ABLZDgJKmTKZRGKg+AF0DwAD+vwFdA8AA/r8BYAPAAP4bASsBBbZHgJKmVqZWrCMAAAADpmisIwAAAAICAqZuAAAEhkJdA8AA/r8BYAPAAFhDAKZ+AAAEqD1dA8AA/r8BYAPAAFgdAABgA7Y+AT4HQBympBamnRamky6GQrZBYcAA/u9IAQABFqauFqanLqg9tkJhwAD+7wDAAP8/ppOmtAA9F6a8LqShHqbLwAD4FgEBYAPAAP4bARam3xam1S6GQrZBYcAA/u8AtkBOpwqnGgAAr4ldA8AA/vECYAPAAFhDYAPAAP4bATKnPmADwABYQ2ADwAD+GwA9F6dGLqg+HqdSwAD4FgEBXQPAAP6/AWADwAD+GwEWp2wWp2IuhkK2QWHAAP7vALZDRad5AaeCp4QAAGJgA8AA/hsBkwEcp4uDp4nAG2EnYwEAARanlhanjS6kobZAYcAA/u8AwAD/SQGLp57AG2EnHKefg6eewBthJ2QBAAGUAMAA/0E+Az0cp7MWp6supKG2QIC/AgACg6e0wBthJ4OnucAbYScAwAD+zz0cp9GCp8LAG2DGgL8CAAIcp9sWp9IuhkK2QUsBAAGDp9zAG2EnAMAA/s6Dp+LAG2EnAMAA/wY9HKfwFqfrLqg+tkOAvwIAAoOn8cAbYScxp/tgA8AA/hsAAMAA/s9PqAqoDwAAAa+KYQMCYAPAAP4bYAPAAFgdXAADqCSrvQAAAAICAqgpAAAAJ2ADwAD+GwCoPAAAAIKUYAPAAFgdAABcAT4BSahKJahThahOwBtiLWADwABX8j4CSahyIiWohxaoexSodsAbYi0FAWADwABX8p8LwABX9mADwABYQwAcqLwWqLIuhkK2QYMcAQABFqjKFKjFwBtiLQUBYAPAAFfynwvAAFf2AMAA/ow+AT0cqQ0cqOkWqOQuqD62Q0sBAAEcqPmCqOrAG2DGSwEAARao/xSo+sAbYi0FAWADwABX8p8LwABX9gDAAP8FAMAA/s5WAQABhKkRwBtiIADAAP7QP0mpKyEcqT4WqTQUqS/AG2ItBQFgA8AAV/JbwABX9UgBAAErAMAA/uk+AUapU6mAqWQAAAAfYAPAAFgdABapdRSpcMAbYi0FAWADwABX8lvAAFf1PgE9HKmjg6mOwBth/SACAAKEqaTAG2IghqmrwBtjLQAAP0mp2SWp4oWp3cAbYi1gA8AAV68+A0mqBCEcqhsWqg0UqgjAG2ItBQFgA8AAV6+izcAAV7JIAQABKwDAAP7pPgFGqjCqbapJAAAAqXpgA8AAWEMAFqpeFKpZwBtiLQUBYAPAAFevos3AAFeyPgE9HKqQg6p7wBth/SACAAKEqpHAG2IgFqqlhqqYwBtjuIWHwABYRQAAP0mqyyEcqtwWqtQUqs/AG2ItBQFgA8AAV6+hd8AAV7NIAQABKwDAAP7pPgFGqvGrKKsNAAAAgO1gA8AAVxYAFqsfFKsawBtiLQUBYAPAAFevoXfAAFezPgE9HKtLg6s2wBth/SACAAKEq0zAG2IgFqtdhqtTwBtkOYKUwABXGgAAPz0cq5eDq4LAG2H9IAIAAoSrmMAbYiAWq6QUq5/AG2ItBQFgA8AAV6+FVcAAV7EAAD9Fq8QBq82rzwAAYmADwAD+GwGTARyr1oSr1MAbZL9jAQABFqvhFqvYLqShtkBhwAD+7wDAAP9JAYyr6cAbZL8cq+qEq+nAG2S/ZAEAAZQAwAD/QT4BPRysC4Or9sAbYf0gAgAChKwMwBtkvxysFRasDy6oPbZCSwEAAYSsFsAbZL8AwAD+zgAAAwgBtkGAAMAbYDcIAbZCgQDAG2BMCQGmVsAA/34AAAAAAQa2RYCSrIWsk6zHAACkggAAAAEDrJ6sxwAAAAEBAayjAAAgJ2ADwAD+GwAAXQPAAP59AWADwAD+GwE+AUqssAEcrLwWrLcuqD62Q0sBAAGArL3AG2WDAMAA/s4AABtlZQAbZcAAAAABArZIgJLAAHsbwAB7IcAAf4UDr4sAAAFgAcAA/2gAAV0BmbUBYAPAAPxVAAEFtlWAksAAe1nAAHtfwAB7cwEAAAPAAHtxwAB7cwAAAAAAAABgA7ZIAT8BCQHAAHtfwAD/fgAAAAAKBrZKgJLAAHt4wAB7fcAAe7IAAJg1AAAAAQPAAHuMwAB7sgAAAAEBAcAAe5YAAACD82ADiPwAAGADwAD8VQFKwAB7nwEwwAB7nyedJwa2S4CSwAB7t8AAe7zAAHxMAACvjAAAAAEDwAB7zMAAfEwAAAABAQHAAHvcAAAAhYVdA8AA/r8BYAOI/AAAYAPAAPxVAT4CRsAAe+nAAHwGwAB79wAAAIKUYAOI/ACAwAB7/8AbZqc+AUnAAHwOJsAAfBcBHMAAfBeBwAB8EsAbZs+EUgEAAS4AiP5gA8AA/FVKwAB8JQEpP0rAAHw8ASoGtkyAksAAfFHAAHxWwAB8gQAAhokAAAABA8AAfGbAAHyBAAAAAQEBwAB8cwAAAIPzYAOJBwAAYAPAAPxVAUrAAHx8ASoGtk2AksAAfIbAAHyLwAB8tgAAhowAAAABA8AAfJvAAHy2AAAAAQEBwAB8qAAAAIPzYAOJEwAAYAPAAPxVAUrAAHyxASoGtk6AksAAfLvAAHzAwAB85QAAho4AAAABA8AAfM3AAHzlAAAAAQEBwAB81wAAAIPzYAOJHwAAYAPAAPxVAUrAAHzgASoGtk+AksAAfOrAAHzvwAB9GAAAhpAAAAABA8AAfP7AAH0YAAAAAQEBwAB9CgAAAIPzYAOJKwAAYAPAAPxVAUrAAH0TASoGtlCAksAAfR3AAH0iwAB9fgAAhpQAAAABA8AAfTTAAH1+AAAAAQEBwAB9QwAAAIPzYAOJNwAAYAPAAPxVAT4BSsAAfU8BHMAAfVYur4wBAAEWwAB9bIDAAH1nwBtoW4U4iTsAtksGtlGAksAAfYPAAH2IwAB+4QAAhpoAAAABA8AAfZnAAH7hAAAAAQEBwAB9pwAAAIPzYAOJSQAAYAPAAPxVAT4EScAAfbMcwAB9ty6vjAEAARbAAH3NgMAAfcjAG2jBhMeJTQC2S0rAAH3kASk/RsAAffXAAH4pwAB+CAAAAIJwYAOJlgAWwAB+GYDAAH4UwBtowYTFiUs+AUnAAH4xJsAAfkQBHMAAfkQWwAB+PoHAAH41wBtpD4WHiZuEUgEAAS4AiP5gA8AA/FVKwAB+UgEpP0bAAH5pwAB+lsAAfngAAACClGADiXUAFsAAfoWAwAB+gMAbaMGEyIlOPgFJwAB+nibAAH6sARzAAH6sFsAAfqeBwAB+osAbaXOClIl5hFIBAAEuAIj+YAPAAPxVSsAAfroBKT9KwAB+0QEqBrZSgJLAAH7mwAB+68AAfyEAAIasAAAAAQPAAH8BwAB/IQAAAAEBAcAAfxQAAACD82ADiYQAAGADwAD8VQFKwAB/HQEpBrZTgJLAAH8mwAB/K8AAf4MAAIakAAAAAQPAAH87wAB/gwAAAAEBAcAAf0gAAACD82ADiWMAAGADwAD8VQE+AUrAAH9UARzAAH9bLq+MAQABFsAAf3GAwAB/bMAbakKFOIlnALZLAAAbZjMAG2Z/ABtnHwAbZ2QAG2epABtn7gAbaDMAG2iZABtp1QAbahoAG2qAAAAACgAAEAa2LoCShxmHHZAkAAGo1gAAAAEDhyyQJAAAAAICAodBAAAAgnBgA8AAWEMAh1cAAACClGADwABYHQAAYAPAAP4bAT4CSYdhJYdqgYdlwBtq4GADwABX8j4CToech6gAAJ8LYAPAAFgzARaHrxSHqsAbauABAWADwABX8p8LwABX9kmHwCIch9CCh8TAG2sOSAEAASsAwAD/dQElh+eCh9vAG2sOYAPAAFhDPgFJiAcciBUWiBAUiAvAG2rgAQFgA8AAV/KAvcAAV/RIAQABFoghgIgYwBtq0oC9wABYNwDAAP91PgFKiDEBaohBYAPAAP4bFT4BSohjAWqIc2ADwAD+Gwk+AUmImSWIqYKIncAbaw5gA8AAUxE+A06IyIjPAACBdmADwAD+GwFqiNpgA8AA/hsJSYjtIRyJABaI9hSI8cAbauABAWADwABX8lvAAFf1SAEAASsAwAD+6T4BRokViUKJJgAAAB9gA8AAWB0AFok3FIkywBtq4AEBYAPAAFfyW8AAV/U+AT2LiVDAG2vPHoliqJUCAAKDiWfAG2vPHolvti4CAAKAiX/AG2rShImJwBtsFwAAP0qJswGDibrAG2vPSYnPJYnfgonTwBtrDmADwABTfT4DTooCigkAAIF2YAPAAP4bAWqKFGADwAD+GwlJiichHIo6FoowFIorwBtq4AEBYAPAAFfyW8AAV/VIAQABKwDAAP7pPgFFik8BiliKWgAAYmADwAD+GwGTARyKYYSKX8AbbNVjAQABFopyFopoFIpjwBtq4AEBYAPAAFfyW8AAV/VhwAD+7wDAAP9JAYyKfMAbbNUcinqEinzAG2zVZAEAAZQAwAD/QT4BPYuKjcAbbI4eip+olQIAAoOKtcAbbI4eitaolgIAAh6K87YuAgACgIsDwBtq0hyLGxaLEhSLDcAbauABAWADwABX8lvAAFf1SwEAAYSLHMAbbNUAwAD+zgAeizW2LgIAAhyLdxaLahSLXsAbaw4CAWADwABTfaLNwABTgEsBAAGEi3jAG2zVAMAA/s4Wi4gUi3zAG2sOAgFgA8AAU32ClMAAU38AAAA/SouvAYOLtsAbbI4/SYvVJYvegYvZwBtq4GADwABXrz4FTowAjAcAAIF2YAPAAP4bAWqMEmADwAD+GwlJjCEhHIw1FowqFIwlwBtq4AEBYAPAAFevhVXAAFexSAEAASsAwAD/dT4BPYqMRsAbbf8ejGKolQIAAoKMZ8Abbf8ejG+2LgIAAoCMf8AbatIWjI4UjInAG2rgAQFgA8AAV6+FVcAAV7EAAD9JjKYhHIy9FoyvFIyqwBtq4AEBYAPAAFevos3AAFeySAEAASsAwAD+6T4BRozOjQuM5wAAAKl6YAPAAFhDABaM/BSM98AbauABAWADwABXr6LNwABXsj4BSY4fIiEcjjYWjjCDjiPAG260hYfAAFhFSAEAASsAwAD/dQAhHI57Ho5Nti4CAAKAjl3AG2rSFo50g45nwBtutIWHwABYRQBIAQABao6XYAPAAP4bCQDAAP8/PgE9io6uwBtt/2qOwGADwAD+G1M/P0mO5yEcjvgWjvAUjuvAG2rgAQFgA8AAV6+hd8AAV7NIAQABKwDAAP7pPgFGjwmPPY8lAAAAmhpgA8AAVxYAFo80FI8vwBtq4AEBYAPAAFevoXfAAFezPgE9io9HwBtt/x6PWaiVAgACgo9rwBtt/x6PiKiWAgACao+ZYAPAAP4bIR6PuLYuAgACgI/IwBtq0haP2YOP0sAbb3yClMAAVxoAAAA/So/0AYKP+8Abbf8/SpAJAWqQGWADwAD+GwkGti+AkpAnkDOcJwABr40AAAABA5BCnCcAAAAEAwOQVAAAAIKUYAPAAFgdAJCEAAAAr45dA8AA/vECYAPAAFhDYAPAAFgdAJDBAAAAr49dA8AA/vECYAPAAFhDYAPAAFgdAAGQ3gAAAIQlYAPAAPxVAWqQ7GADwAD8VXdgA8AAWB0BPgNJkPclkQCAkPvAG3AoYAPAAFfyPgZJkRslkTAWkSQUkR/AG3AoAAFgA8AAV/KfC8AAV/ZgA8AAWEM+AkmRUIORVMAbcG0+AUqRawE1AAAAAQBgA8AAWB0BHJGDgZFywBtwNksBAAEWkYkUkYTAG3AoAAFgA8AAV/KfC8AAV/YAwAD/BSMckZaEAMAbcNpIAQABKwAAFJGZwBtwKAABYAPAAFfyhADAG3DaAWADwABYHT9Kka0BNQAAAAEAYAPAAFgdARyRxYKRtMAbcFFLAQABFpHLFJHGwBtwKAABYAPAAFfynwvAAFf2AMAA/wUjHJHYhADAG3FESAEAASsAABSR28AbcCgAAWADwABX8oQAwBtxRAFgA8AAWB0/SZHrIhyR/haR9BSR78AbcCgAAWADwABX8lvAAFf1SAEAASsAwAD+6QEckh8WkhgWkg4UkgnAG3AoAAFgA8AAV/JbwABX9WHAAP7vSAEAAZMAwAD/Pz4BSpItARSSNMAbcCgAAWADwABX8j9OklYAAABbXQPAAP6/AWADwABYHQBFkmUBkm6ScAAAYmADwAD+GwGTARySd4WSdcAbci1jAQABFpKIFpJ+FJJ5wBtwKAABYAPAAFfyW8AAV/VhwAD+7wDAAP9JAY2SkMAbci0ckpGFkpDAG3ItZAEAAZQAwAD/QT4CTpKpkr0AAK+QYAPAAFgdAR6Sv7YvBAADHJLoFpLfFJLawBtwKAABYAPAAFfyW8AAV/VLAQABhZLpwBtyLQDAAP7OgZLtwBtwNoKTAMAbcFEBhCWDkyrAG3BtSZM+IRyTVoaTQsAbco5IAQABHJNnFpNeFJNZwBtwKAABYAPAAFfyW8AAV/VLAQABhZNowBtyLQDAAP7OAMAA/3U+Aj0jHJOAhJN2wBtyFUgBAAErAMAA/umMk3bAG3IVHJOTFpOJFJOEwBtwKAABYAPAAFfyW8AAV/WArQAAAADAAP6TKwFdA8AA/r8BYAPAAFgdPRyTroSTpcAbchWAvwIAAoWTr8Abci2Gk7TAG3KOAMAA/s8/SZPbIRyT6YST38AbchVIAQABKwDAAP7pPgFKk/oBNZQFAAABAGADwABX8gEflAXAAFgHAgACFpQbFJQWwBtwKAABYAPAAFfygL3AAFf0hJQhwBtyFQA1AAAAAQBbARyULYWUK8Abc72e4QEAARaUNxSUMsAbcCgAAWADwABX8p8LwABX9gDAAFf4hQDAG3O9P0qUTwEUlFbAG3AoAAFgA8AAV/I/SZRjJZRsgJRnwBtwKGADwABXrz4MTpSkAAAAhkJdA8AA/r8BYAPAAFhDAEmUsyEclMoWlLwUlLfAG3AoAAFgA8AAV6+izcAAV7JIAQABKwDAAP7pPgE9jJTbwBt0WR6U68AA+BYBAWADwABYQwEWlRgWlQoUlQXAG3AoAAFgA8AAV6+izcAAV7JhwAD+7wA/TpVIAAAAoXddA8AA/r8BYAPAAFcWAEmVVSEclWYWlV4UlVnAG3AoAAFgA8AAV6+hd8AAV7NIAQABKwDAAP7pPgE9jZV3wBt01B6VhcAA+BYBAWADwABXFgEWla8WlacUlaLAG3AoAAFgA8AAV6+hd8AAV7NhwAD+7wA/TpXOAAAAhVVgA8AAWB0ATpXjlesAAK+RYAPAAPxVASpJlfkhHJYQFpYCFJX9wBtwKAABYAPAAFevos3AAFeySAEAASsAwAD+6T4BRZYhAZYqliwAAGJgA8AA/hsBkwEcljMUljHAG3WdCABjAQABFpY/hJY1wBt0WWHAAP7vAMAA/0kBFZZHwBt1nQgclkgUlkfAG3WdCABkAQABlADAAP9BPgNOlmqWcwAAgnBgA8AAWEMBHJaHFpZ6FJZ1wBtwKAABYAPAAFevos3AAFeySwEAARSWiMAbdZ0IAADAAP7OTpaglqYAAIWHYAPAAFgdAR6WqLYvBAADFpbOFJbFwBt18wkAhYfAAFhFgZbVwBtwNoKW6MAbcFEBhCWDlxTAG3BtSZcqIRyXNBSXLsAbdjAKAEgBAAEWl0AUlzfAG3XzCQCFh8AAWEUAwAD/dT4CPRyXXISXU8AbdFmAvwIAAhSXXcAbdZ0IAB+XZsAAWF0EAAMWl5IUl4nAG3XzCQCAvcAAWDcml6EBFpehFJeYwBt18wkAhFfAAFg4YAOppRaXshSXqcAbdfMJAIdxr6IBhYcUl9PAG3YwCgAAwAD+zz2Pl+XAG3VeKT4BPRyYGYSYEMAbdFmAvwIAAhSYGsAbdZ0IABSYH8AbdfMJAADAAP7PP0mYRiEcmFcWmE8UmErAG3AoAAFgA8AAV6+hd8AAV7NIAQABKwDAAP7pPgFFmGgBmHGYcwAAYmADwAD+GwGTARyYehSYeMAbd3AIAGMBAAEWmISFmHzAG3TUYcAA/u8AwAD/SQEVmIzAG3dwCByYjRSYjMAbd3AIAGQBAAGUAMAA/0E+A06Yspi5AACaGmADwABXFgEcmMcWmMAUmLvAG3AoAAFgA8AAV6+hd8AAV7NLAQABFJjIwBt3cAgAAMAA/s5OmOCY7gAAq5NgA8AAWB0BHpjwti8EAAMWmRQUmQ3AG3fGCQCClMAAVxqBmRrAG3A2gpktwBtwUQGEJSGDmVrAG3BtSZlwIRyZghSZdMAbeAMKAEgBAAEWmYwUmYXAG3fGCQCClMAAVxoAwAD/dT4CPRyZpYWZnsAbdNSAvwIAAhSZpsAbd3AIAB+Zr8AAVzAGAAYWmdwUmdXAG3fGCQCG98AAVxgWmfsUmfTAG3fGCQCiYsAAVxkUmhTAG3gDCgAWmjgUmjHAG3fGCQCAvcAAVxsmmlMBFppTFJpMwBt3xgkAhFevoWADwABVgBaacBSaacAbd8YJAIdxr6IAAMAA/s89j5qHwBt1Xik+AT0cmrmFmrLAG3TUgL8CAAIUmrrAG3dwCAAUmr/AG3fGCQAAwAD+zz89jprkwBt1Tx6a8bYvBAADFpsPFJsKwBtwKAABYAPAAFevhVXAAFexgZsbwBtwNoKbLsAbcFEBhCUpSZthIRybcIabZcAbdU9IAQABFpt4FJtzwBtwKAABYAPAAFevhVXAAFexAMAA/3U+AT2Pm4zAG3VeKT9Jm6eHm6vAG3VePgFKm7wBH5vHwABXvwMAA4ab28AbdU+Em+fAG3RZhZvywBt01AA/SpwHARScDsAbcCgAAWADwABXrz9KnBoBgJwhwBtwKAa2MICSnCqcNpzdAAGa4AAAAAEDnECc3QAAAAICApxSAAAAgpRgA8AAWB0AnH4AAACE8V0DwAD+8QJgA8AAWENgA8AAWB0AAGADwABYHQE+AUqckAEenJe2LwQAA4Ccp8AbehqBnK3AG3oogZy7wBt6KAGEJSkGtjGAkp4Nnh+kgQABoQQAAAABA54upIEAAAAEBASeSQAAAIZCXQPAAP6/AWADwABYQwCeZAAAAJ7SYAPAAFgdAJ59AAAAhQJgA8AAWB0AnpYAAACbLmADwABTEQAAXQPAAP6/AWADwABYHQE+B06euZ7AAACoPV0DwAD+vwFgA8AAWB0BHp7GwAD4FgEBYAPAAFgdARae4oCe2MAbepBhwAD+7wBFnu4Bnvee+QAAYmADwAD+GwGTARyfAIWe/sAbextjAQABFp8MgJ8CwBt6kGHAAP7vAMAA/0kBjZ8UwBt7GxyfFYWfFMAbextkAQABlADAAP9BPgE9HJ8lhJ8fwBt64YC/AgAChZ8mwBt7GzUAAAABAGADwABYHQEWnzgcnzSAnyvAG3qQSwEAAYWfNcAbexsAwAD+zoWHwABYRSMcnz6GAMAbe4NIAQABKwAAgZ9BwBt6pYYAwBt7gwFgA8AAWB0AwAD+z06faJ9uAACkgGADtj4BH590tkcCAAKAn4fAG3qQhJ+SwBt64QBOn62fvwAAqEldA8AA/r8BXQPAAP6/AWADwAD+GwEen8HAAFHAAQFgA8AA/hsBhZ/ZwBt73QBGn+OgEp/yAAAAglldA8AA/r8BYAPAAP4bAIaf/8AbfAI+BE6gPqBSAACvkl0DwAD+8QJgA8AAWENgA8AAWB0BMqB+YAPAAFhDYAPAAFgdAE6grKC9AACvk10DwAD+8QJgA8AAWENgA8AAWB0BMqDpYAPAAFhDYAPAAFgdAEag8aEWoPoAAACvlGADwAD+GwCHoQvAG3w8PgI9HKExFKEewBt8WwgAgL8CAAIcoTuAoTLAG3qQSwEAARShPMAbfLkKAADAAP7OgaFOwBt6pQDAAP8GPRyhcRShYcAbfIgJAIC/AgACHKF7gKFywBt6kEsBAAEUoXzAG3y5CgAAwAD+zoKhjsAberMAwAD/BkahpKHJoa0AAACvlGADwAD+GwCHob7AG3w8PgE9HKHXhKHRwBt64YC/AgACFKHYwBt9SQoAHqHpti8EAAMcogqEogTAG3rhSwEAARSiC8AbfUkKAADAAP7OFKIbwBt8WwgAFKIwwBt8iAkAAYQlKQDAAP7PRaJtAaJ2ongAAGJgA8AA/hsBkwEcon+Hon3AG328YwEAARaii4CigcAbepBhwAD+7wDAAP9JAY+ik8AbfbwcopSHopPAG328ZAEAAZQAwAD/QT4FTqLEotEAAITxXQPAAP7xAmADwABYQ2ADwABYHQEyov1gA8AAWENgA8AAWB0ATqMrozwAAK+TXQPAAP7xAmADwABYQ2ADwABYHQEyo2hgA8AAWENgA8AAWB0APRyjfBSjcMAbfg0IAIC/AgACHKOGgKN9wBt6kEsBAAGHo4fAG328AMAA/s4co5OEo43AG3rhSwEAAYejlMAbfbwAwAD+zgDAAP8GPRyjrBSjnMAbfjoJAIC/AgACHKO2gKOtwBt6kEsBAAGHo7fAG328AMAA/s6Co73AG3qzAMAA/wZFo80Bo9aj2AAAl/1gA8AA/hsBkwEco98Uo93AG37tCgBjAQABFqPrgKPhwBt6kGHAAP7vAMAA/0kBFaPzwBt+7Qoco/QUo/PAG37tCgBkAQABlADAAP9BPgE9HKQGhKQAwBt64YC/AgACFKQHwBt+7QoAHqQMti8EAAMcpCKEpBzAG3rhSwEAARSkI8Abfu0KAADAAP7OFKQnwBt+DQgAFKQ1wBt+OgkAAYQlKQDAAP7PSqRyAYSkecAbeuEGtjKAkq0zrUqx4gABr5UAAAABA61gseIAAAACAgKteAAAAIJwYAPAAFhDAK2QAAAAgpRgA8AAWB0AAF0DwAD+vwFgA8AAV/IBPgNOrbOtuAAAr5ZdA8AA/r8BYAPAAFfyATGtzGADwABX8gBJrdIlrduBrdbAG3/SYAPAAFfyPgFJrfYcrgsWrf8UrfrAG3/SAQFgA8AAV/KfC8AAV/ZIAQABgK4OwBt/xADAAP91PgE9HK4lgq4gwBt/8lYBAAEUrinAG3/SAQFgA8AAV/IAwAD+0D4BSa5DIRyuVhauTBSuR8Abf9IBAWADwABX8lvAAFf1SAEAASsAwAD+6T4BRq5prpauegAAAB9gA8AAWB0AFq6LFK6GwBt/0gEBYAPAAFfyW8AAV/U+AT0crqeCrqLAG3/ygKUBAAEerq62MgIAAoCuxcAbf8SDrs/AG4CrAADAAP7RP0mu/CWvBYGvAMAbf9JgA8AAV68+Az0cryiCryPAG3/ygKUBAAEery+2MgIAAoCvRsAbf8QWr1UUr1DAG3/SAQFgA8AAV6+FVcAAV7EAAMAA/tFJr2chHK9+Fq9wFK9rwBt/0gEBYAPAAFevos3AAFeySAEAASsAwAD+6T4BRq+Pr9GvqAAAAK+XYAPAAFhDABavwhSvvcAbf9IBAWADwABXr6LNwABXsj4CSa/bIRyv9xav8YOv38AbgYCFh8AAWEVIAQABKwDAAP91PgE9HLARgrAMwBt/8oClAQABHrAntjICAAKAsD7AG3/EFrBag7BIwBuBgIWHwABYRQAAwAD+0T9JsHUhHLCXFrCLg7B5wBuBgIa0wABYRkgBAAErAMAA/3U+AT0csLGCsKzAG3/ygKUBAAEesMe2MgIAAoCw3sAbf8QWsPqDsOjAG4GAhrTAAFhGAADAAP7RPz9JsSUhHLE2FrEuFLEpwBt/0gEBYAPAAFevoXfAAFezSAEAASsAwAD+6T4BRrFHsXuxYwAAAJoaYAPAAFcWABaxchSxbcAbf9IBAWADwABXr6F3wABXsz4BPRyxioKxhcAbf/KApQEAAR6xkbYyAgACgLGowBt/xBaxuYOxssAbgouClMAAVxoAAMAA/tE/P0qx1QGCsdzAG3/yBrYzgJKzRrNTtdcAAa+YAAAAAQOzaLXXAAAAAQEBs4MAAACGQl0DwAD+vwFgA8AAWEMAAF0DwAD+vwFgA8AA/2gBPgNOs5+zuAAAr5ldA8AA/r8BYAPAAP9oATGzwmADwAD/aABGs8iz+bPhAAAAr5pgA8AAWEMAgLPuwBuDEz4DTrQWtCMAAIDPXQPAAP6/AWADwABX8gExtDdgA8AAV/IARrQ/tHG0WAAAAK+bYAPAAFhDAIC0ZsAbgxM+Ak60kLSVAACvll0DwAD+vwFgA8AAV/IBHrShtjICAAKEtLjAG4OcFrTOgrTEwBuDX4WHwABYRQBJtNwhHLTsFrTlhbTgwBuDtGHAAP7vSAEAAZMAwAD/Pz4BPRy1CYO0/MAbg3eApQEAAYW1EMAbg7QAwAD+0T9JtSkhHLVBFrU6g7UtwBuDd2HAAP7vSAEAAZMAwAD/Pz4CPRy1aIG1T8AbgzpWAQABgrVswBuDXwDAAP7QPRy1l4G1fsAbgzpWAQABg7WbwBuDdwDAAP7QP0q1tgGBtb3AG4M6BrY0gJK3NbdCwABEjgABr5wAAAABA7djwABEjgAAAAEBAbdwAAAAgpRgA8AAWB0AAF0DwAD+vwFgA8AA/2gBPgNOt4e3nAAAr51dA8AA/r8BYAPAAP9oATG3pmADwAD/aABJt6wlt7WAt7DAG4SvYAPAAFfyPgFJt9Act+MWt9kUt9TAG4SvAAFgA8AAV/JbwABX9UgBAAErAMAA/uk+Ak64C7gXAACfC2ADwABYMwEWuB4UuBnAG4SvAAFgA8AAV/KfC8AAV/ZJuDEluEGCuDXAG4UuYAPAAFOVPgROuGW4cAAAr55gA8AA/FUBKk64lbikAACExV0DwAD+vwFgA4mWARa4tha4shS4psAbhS4CAWADwABTlZomwABTl4TFgytFuM4BuNe42QAAYmADwAD+GwGTASIcuOCFuN7AG4WzYwEAARa48YS44sAbhXxhwAD+7wDAAP9JACGDuPzAG4VrAY25CsAbhbMcuQiFuQrAG4WzZAEAAZQAwAD/QT4BSbkZHrkdmyICAAIWuVMcuU+EuUHAG4V8SwEAAYW5UMAbhbMAwAD+zoWHiZscuWmEuVrAG4V8lXEAAAAAwAD+lAA+AT2LuYHAG4VrKT9JubKDubbAG4VrPgI9HLnjgbnOwBuEz1YBAAEUuefAG4SvAAFgA8AAV/IAwAD+0D0cug2BufjAG4TPVgEAAWq6EV0DwAD+vwFgA8AA/2jAAOEZAMAA/tA/Sbo7JbpLgro/wBuFLmADwABTqT4ETrpzun4AAK+eYAPAAPxVASpOuqO6sgAAhMVdA8AA/r8BYAOJlgEWusgWusAUurTAG4UuAgFgA8AAU6mGmcAAU4GExYL8RbrgAbrpuusAAGJgA8AA/hsBkwEiHLryhbrwwBuHEGMBAAEWuwOEuvTAG4bZYcAA/u8AwAD/SQAhg7sOwBuGyAGNuxzAG4cQHLsahbscwBuHEGQBAAGUAMAA/0E+AUm7Kx67L5siAgACFrtlHLthhLtTwBuG2UsBAAGFu2LAG4cQAMAA/s6Fh4mbHLt7hLtswBuG2ZVxAAAAAMAA/pQAPgE9i7uTwBuGyCk/SbvEg7vIwBuGyD4CPRy79YG74MAbhM9WAQABFLv5wBuErwABYAPAAFfyAMAA/tA9HLwfgbwKwBuEz1YBAAFqvCNdA8AA/r8BYAPAAP9owADhGQDAAP7QP0m8TSIlvF2CvFHAG4UuYAPAAFMRACEcvJQWvIYUvHrAG4UuAgFgA8AAUxGizcAAUxNIAQABKwDAAP7pPgJOvLS8wQAAgM9dA8AA/r8BYAPAAP9oAR68z7YzAQABFrzxFLzlwBuFLgIBYAPAAFMRos3AAFMTAEm9CSEcvSEWvRqDvQ3AG4hNYcAA/u9IAQABkwDAAP8/PgI9HL1Igb0zwBuEz1YBAAEUvUzAG4SvAAFgA8AAV/IAwAD+0D0cvXKBvV3AG4TPVgEAAYO9dsAbiE0AwAD+0D9JvZwlvayCvaDAG4UuYAPAAFN9PgJJvcshHL3pFr3bFL3PwBuFLgIBYAPAAFN9os3AAFOASAEAASsAwAD+6T4CTr4LvhgAAIDPXQPAAP6/AWADwAD/aAEevii2MwEAARa+ShS+PsAbhS4CAWADwABTfaLNwABTgABJvmQhHL58Fr51g75owBuJJmHAAP7vSAEAAZMAwAD/Pz4CPRy+pYG+kMAbhM9WAQABFL6pwBuErwABYAPAAFfyAMAA/tA9HL7Rgb68wBuEz1YBAAGDvtXAG4kmAMAA/tA/P0m/AiW/Fxa/EhS/BsAbhS4CAWADwABTfYKUwABTf2ADwABXrz4CTr9Pv1QAAIKUYAPAAFevASa/TwEWv2IUv1bAG4UuAgFgA8AAU32ClMAAU39gA8AAV69Jv3IhHL+JFr97g792wBuJ5qLNwABXskgBAAErAMAA/uk+Ak6/rb+6AACAz10DwAD+vwFgA8AA/2gBHr/MtjMBAAEWv+eDv+LAG4nmos3AAFeyAEnAAEADIRzAAEAbFsAAQBSEwABAB8AbijthwAD+70gBAAGTAMAA/z8+Aj0cwABARoHAAEAxwBuEz1YBAAGDwABASsAbieYAwAD+0D0cwABAdIHAAEBfwBuEz1YBAAGEwABAeMAbijsAwAD+0D8/Pz8+AUbAAEDGwABA88AAQNcAAAAfYAPAAFgdABbAAEDoFMAAQOPAG4SvAAFgA8AAV/JbwABX9T4BPRzAAEEfgcAAQP3AG4TPgKUBAAEewABBJrY0AQABgsAAQUjAG4rlAADAAP7RScAAQWslwABBdIDAAEFvwBuEr2ADwABXrz4DPRzAAEGwgcAAQZLAG4TPgKUBAAEewABBt7Y0AQABFsAAQd4UwABB2cAbhK8AAWADwABXr4VVwABXsQAAwAD+0UnAAEHwIRzAAEIHFsAAQfkUwABB9MAbhK8AAWADwABXr6LNwABXskgBAAErAMAA/uk+AUbAAEIYwABCUcAAQjEAAACCcGADwABYQwAWwABCQhTAAEI9wBuErwABYAPAAFevos3AAFeyPgJJwABCWyEcwABCbhbAAEJogsAAQl/AG4vVhYfAAFhFSAEAASsAwAD/dT4BPRzAAEKngcAAQoPAG4TPgKUBAAEewABCrrY0AQABFsAAQtmCwABC0MAbi9WFh8AAWEUAAMAA/tE/ScAAQvQhHMAAQw0WwABDAYLAAEL4wBuL1Ya0wABYRkgBAAErAMAA/3U+AT0cwABDRoHAAEMiwBuEz4ClAQABHsAAQ022NAEAARbAAEN4gsAAQ2/AG4vVhrTAAFhGAADAAP7RPz9JwABDoyEcwABDtBbAAEOsFMAAQ6fAG4SvAAFgA8AAV6+hd8AAV7NIAQABKwDAAP7pPgFGwABDxcAAQ/nAAEPhAAAAmhpgA8AAVxYAFsAAQ/AUwABD68AbhK8AAWADwABXr6F3wABXsz4BPRzAAEQlgcAARAPAG4TPgKUBAAEewABELLY0AQABFsAARFWCwABETsAbjQiClMAAVxoAAMAA/tE/P0rAAERxAYHAAER4wBuEzwa2NYCSwABGIMAARi3AAEyxAAGvnwAAAAEDwABGRsAATLEAAAABAQHAAEZhAAAAhkJdA8AA/r8BYAPAAFhDAABdA8AA/r8BYAPAAP9oAT4DTsAARn3AAEaEAACoUl0DwAD+vwFgA8AA/2gBMcAARo5gA8AA/2gARsAARpTAAEbEwABGrQAAAIJwYAPAAFhDAIDAAEa5wBuNpz4BScAARsohHMAARt0WwABG14LAAEbOwBuN/4WHwABYRUgBAAErAMAA/3U+Ak7AAEb7wABHGQAAr6BdA8AA/r8BYAPAAP9oAR7AAEcltjQBAAEWwABHUILAAEdHwBuN/4WHwABYRQBFwABHXgHAAEdnwABHaQAAYmADwAD+GwGTARzAAEdwhMAAR27AG46FYwEAARbAAEeQg8AAR3LAG45GYcAA/u8AwAD/SQGMwABHmMAbjoUcwABHmoTAAEeYwBuOhWQBAAGVAMAA/0E+BE7AAEe7wABHwAAAgpRgA8AAV/IBJsAAR7sBHMAAR9+DwABHwsAbjkZLAQABhMAAR+DAG46FAMAA/s5gA8AAV/JOwABH+cAASBIAAK+ZXQPAAP6/AWADwAD/aAEmwABH+QEcwABIPYPAAEggwBuORksBAAEcwABIQITAAEg+wBuOhWQBAAGUAMAA/0EAwAD+zl0DwAD+vwFgA8AA/2hFwABITgHAAEhXwABIWQAAl/1gA8AA/hsBkwEcwABIYIfAAEhewBuPimMBAAEWwABIe4bAAEhiwBuPKGHAAP7vAMAA/0kBj8AASIPAG4+KHMAASIWHwABIg8Abj4pkAQABlQDAAP9BPgNOwABIq8AASLUAAK+aYAPAAFhDASbAAEirARzAAEjPhsAASLfAG48oSwEAAYfAAEjQwBuPigDAAP7OYAPAAFhDTsAASPXAAEkCAACAz10DwAD+vwFgA8AAV/IBJsAASPUBHMAASRyGwABJBMAbjyhLAQABHMAASR+HwABJHcAbj4pkAQABlADAAP9BAMAA/s5dA8AA/r8BYAPAAFfyRsAASS/AAElhwABJRQAAAITBYAPAAFfyABTAAElTwBuQLgkAPgM9HMAASXaBwABJb8AbjdBWAQABgsAASXrAG43/AMAA/tA9HMAASZiBwABJkcAbjdBWAQABHMAASd1qwABJnF0DkdEBYQMBYAPAAQACYAORuo4eiD0BAAEWwABJ/BbAAEnwhcAASevAG47onwvAAFf2gL3AAFg3AJHVAMAA/tA9HMAASheBwABKEMAbjdBWAQABMcAASitgA5HYARzAAEquHMAASnBqwABKO10DkdEBYQMBYAPAAQACYAORusAAcCaIPQEAARbAAEqVFsAASokUwABKfsAbkJMKAJ8LwABX9oC9wABYNwCR1YJfAwADFsAASsUUwABKu8Abj+4IAIRmr6MWwABK2BTAAErOwBuP7ggAh3GvohbAAEsJFsAASwQUwABK+sAbj+4IAIC9wABYN2HAAQAGAJHBAMAA/tBJwABLPxzAAEtjFsAAS1yGwABLQ8AbjyhhwAD+70gBAAGTAMAA/z8+Az0cwABLyoHAAEvDwBuN0FYBAAGCwABLzsAbjf8AwAD+0D0cwABL6oHAAEvjwBuN0FYBAAEcwABMLWrAAEvuXQOR0QFhAwFgA8ABAAJgA5G6jh6IPQEAARbAAExMFsAATECFwABMO8AbjuifC8AAV/aAvcAAWDcAkdUAwAD+0D0cwABMZYHAAExewBuN0FYBAAFqwABMaV0DwAD+vwFgA5HYwADn1QDAAP7QPz9KwABMogGBwABMqcAbjdAGtjaAksAATwnAAE8cwABbDAABr6EAAAABA8AATznAAFsMAAAAAwIDwABPSwAAAGpgA8AAWB0AwABPaQAAAIKQYAPAAFgzAMAAT48AAACvol0DwAD/swFgA8AAWDMBagBgA8AA/yV5AF0DwAD+vwFdA8AA/r8BYAPAAP9oAT4EPSMcwABPpYLAAE+dwBuTGUgBAAErAMAA/3WKwABPncAbkxkewABPrcAAwyIAAWADwABYMwAAKwFdA8AA/7MBYAPAAFgzTsAAT+rAAE/wAACApF0DwAD+vwFdA8AA/r8BYAPAAP9oATHAAFAAXQPAAP6/AWADwAD/aABJwABQBiXAAFAQgMAAUArAG5L6YAPAAFfyPgJOwABQQsAAUE4AAJ8LYAPAAFgzARbAAFBWFMAAUFDAG5L6AAFgA8AAV/KfC8AAV/ZJwABQZxzAAFB7FsAAUHEUwABQa8AbkvoAAWADwABX8lvAAFf1SAEAASsAwAD+6T4BScAAUIwcwABQohbAAFCWFMAAUJDAG5L6AAFgA8AAV/KfC8AAV/ZIAQABgcAAUKXAG5MJAMAA/3U+AT0cwABQuoPAAFC0wBuTl1YBAAExwABQxmADwAD/aAEUwABQx8AbkvoAAWADwABX8gDAAP7QScAAUN0cwABQ6YLAAFDhwBuTGVYBAAEWwABQ8xTAAFDtwBuS+gABYAPAAFfynwvAAFf2AMAA/8A+AknAAFELIiXAAFEbhMAAUQ/AG5PnYAPAAFMRACEcwABRSBbAAFE6FMAAUS7AG5PnBAFgA8AAUxGizcAAUxNIAQABKwDAAP7pPgFGwABRXcAAUZ3AAFF2AAAAgnBgA8AAWEMAFsAAUY4UwABRgsAbk+cEAWADwABTEaLNwABTEz4BScAAUashHMAAUb4WwABRuIXAAFGvwBuVQoWHwABYRUgBAAErAMAA/3U+AUbAAFHXwABSQcAAUekAAABOXQPAAP6/AWADwAD/aAAewABR8bY2AwADFsAAUiuFwABSIsAblUKFh8AAWEWBwABSMsAbkwmCwABSN8AbkxkAPgE9HMAAUlmDwABSU8Abk5dWAQABNcAAUmUAAAEAXQPAAP6/AWADwAD/aAExwABSZWADwAD/aAIUwABSZsAbkvoAAWADwABX8oXAAFJtwBuVQjUAAAABAFsBHMAAUniHwABSdsAblgGApQEAAYbAAFJ/wBuVpADAAP7RhwDAG5YBAMAA/tA/ScAAUsAlwABS0ITAAFLEwBuT52ADwABTfT4CScAAUvEhHMAAUw8WwABTARTAAFL1wBuT5wQBYAPAAFN9os3AAFOASAEAASsAwAD+6T4BRsAAUybAAFNmwABTPwAAAIJwYAPAAFhDABbAAFNXFMAAU0vAG5PnBAFgA8AAU32izcAAU4A+AUnAAFN2IRzAAFOJFsAAU4OFwABTesAblsmFh8AAWEVIAQABKwDAAP91PgFGwABTpMAAVDLAAFO2AAAAr6NdA8AA/r8BYAPAAP9oAB7AAFPctjYDAAMWwABUHIXAAFQTwBuWyYWHwABYRYHAAFQjwBuTCYLAAFQowBuTGQA+AT0cwABUTIPAAFRGwBuTl1YBAAE1wABUWAAAAQBdA8AA/r8BYAPAAP9oATHAAFRYYAPAAP9oAhTAAFRZwBuS+gABYAPAAFfyhcAAVGDAG5bJNQAAAAEAWwEcwABUa4fAAFRpwBuXiYClAQABhsAAVHLAG5crAMAA/tGHAMAbl4kAwAD+0D8/ScAAVMolwABU3xbAAFTaFMAAVM7AG5PnBAFgA8AAU32ClMAAU39gA8AAV68+Ak7AAFUZwABVHgAAgpRgA8AAV68BJsAAVRkBFsAAVSwUwABVIMAbk+cEAWADwABTfYKUwABTf2ADwABXr0nAAFU+IRzAAFVVFsAAVUeFwABVQsAbmCqizcAAV7JIAQABKwDAAP7pPgFGwABVbsAAVafAAFWHAAAAgnBgA8AAWEMAFsAAVZiFwABVk8AbmCqizcAAV7I+AUnAAFW5IRzAAFXMFsAAVcaGwABVvcAbmJmFh8AAWEVIAQABKwDAAP91PgFGwABV6cAAVnvAAFX7AAAAr6NdA8AA/r8BYAPAAP9oAB7AAFYjtjYDAAMWwABWZYbAAFZcwBuYmYWHwABYRYHAAFZswBuTCYLAAFZxwBuTGQA+AT0cwABWsIPAAFaRwBuTl1YBAAE1wABWvAAAAQBdA8AA/r8BYAPAAP9oATHAAFa8YAPAAP9oAhTAAFa9wBuS+gABYAPAAFfyhsAAVsTAG5iZNQAAAAEAWwEcwABWzxTAAFbNwBuZUQgAgKUBAAGHwABW1sAbmPMAwAD+0RQAwBuZUQgAAMAA/tA/Pz8/PRzAAFdSgsAAV0rAG5MZhF4BAAEWwABXXxTAAFdZwBuS+gABYAPAAFfynwvAAFf2AMAA/8I/PgFGwABXiMAAV7bAAFeZAAAAH2ADwABYHQAWwABXqxTAAFelwBuS+gABYAPAAFfyW8AAV/U+AT0cwABXxoPAAFfAwBuTl4ClAQABHsAAV822NgMAA4XAAFfrwBuaCoHAAFf1wBuTCYLAAFf6wBuTGQAAwAD+0UnAAFgcJcAAWCaAwABYIMAbkvpgA8AAV68+Az0cwABYSoPAAFhEwBuTl4ClAQABHsAAWFG2NgMAAxbAAFh1FMAAWG/AG5L6AAFgA8AAV6+FVcAAV7GBwABYgcAbkwmCwABYhsAbkxkAAMAA/tFJwABYlSEcwABYrRbAAFifFMAAWJnAG5L6AAFgA8AAV6+izcAAV7JIAQABKwDAAP7pPgFGwABYvsAAWPjAAFjXAAAAgnBgA8AAWEMAFsAAWOkUwABY48AbkvoAAWADwABXr6LNwABXsj4CScAAWQIhHMAAWRUWwABZD4TAAFkGwBubHoWHwABYRUgBAAErAMAA/3U+AT0cwABZMIPAAFkqwBuTl4ClAQABHsAAWUa2NgMAAxbAAFlthMAAWWTAG5sehYfAAFhFgcAAWXTAG5MJgsAAWXnAG5MZAADAAP7RP0nAAFmWIRzAAFmvFsAAWaOEwABZmsAbmx6GtMAAWEZIAQABKwDAAP91PgE9HMAAWcqDwABZxMAbk5eApQEAAR7AAFnRtjYDAAMWwABaB4TAAFn+wBubHoa0wABYRoHAAFoUwBuTCYLAAFoZwBuTGQAAwAD+0T8/ScAAWkAhHMAAWlIWwABaShTAAFpEwBuS+gABYAPAAFevoXfAAFezSAEAASsAwAD+6T4BRsAAWmPAAFqYwABafwAAAJoaYAPAAFcWABbAAFqPFMAAWonAG5L6AAFgA8AAV6+hd8AAV7M+AT0cwABaqIPAAFqiwBuTl4ClAQABHsAAWq+2NgMAAxbAAFrUhMAAWs3AG5x1gpTAAFcagcAAWtrAG5MJgsAAWt/AG5MZAADAAP7RPz9KwABa/gGDwABbBcAbk5cGtjeAksAAXR/AAF0ywABiuwABr6QAAAABA8AAXUPAAGK7AAAAAQEBwABdWwAAAJ8LYAPAAFgzAABdA8AA/r8BXQPAAP6/AWADwAD/aAE+A07AAF1/wABdhgAAr6VdA8AA/r8BXQPAAP6/AWADwAD/aAExwABdll0DwAD+vwFgA8AA/2gAScAAXZwiJcAAXayAwABdoMAbnSZgA8AAUxEAIRzAAF3ZFsAAXcsUwABdv8AbnSYAAWADwABTEaLNwABTE0gBAAErAMAA/uk+AUbAAF3owABeKMAAXgEAAACCcGADwABYQwAWwABeGRTAAF4NwBudJgABYAPAAFMRos3AAFMTPgFJwABeMCEcwABeQxbAAF49gsAAXjTAG53VhYfAAFhFSAEAASsAwAD/dT4BRsAAXlbAAF64wABeaAAAAE5dA8AA/r8BYAPAAP9oAB7AAF58tjYCAAIWwABeo4LAAF6awBud1YWHwABYRRTAAF6qwBudJgABYAPAAFMRAD4BPRzAAF7LgcAAXsTAG51PVgEAATXAAF7XAAABAF0DwAD+vwFgA8AA/2gBMcAAXtdgA8AA/2gBgsAAXtjAG53VNQAAAAEAWwEcwABe44TAAF7hwBuek4ClAQABg8AAXurAG543AMAA/tGEAMAbnpMAwAD+0D9JwABfEyXAAF8jgMAAXxfAG50mYAPAAFN9PgJJwABfPiEcwABfXBbAAF9OFMAAX0LAG50mAAFgA8AAU32izcAAU4BIAQABKwDAAP7pPgFGwABfbcAAX63AAF+GAAAAgnBgA8AAWEMAFsAAX54UwABfksAbnSYAAWADwABTfaLNwABTgD4BScAAX7chHMAAX8oWwABfxILAAF+7wBufSoWHwABYRUgBAAErAMAA/3U+AUbAAF/fwABgTcAAX/EAAACvo10DwAD+vwFgA8AA/2gAHsAAYBG2NgIAAhbAAGA4gsAAYC/AG59KhYfAAFhFFMAAYD/AG50mAAFgA8AAU30APgE9HMAAYGKBwABgW8AbnU9WAQABNcAAYG4AAAEAXQPAAP6/AWADwAD/aAExwABgbmADwAD/aAGCwABgb8Abn0o1AAAAAQBbARzAAGB6hMAAYHjAG6AJgKUBAAGDwABggcAbn6wAwAD+0YQAwBugCQDAAP7QPz9JwABguyXAAGDQFsAAYMsUwABgv8AbnSYAAWADwABTfYKUwABTf2ADwABXrz4CTsAAYQTAAGEJAACClGADwABXrwEmwABhBAEWwABhFxTAAGELwBudJgABYAPAAFN9gpTAAFN/YAPAAFevScAAYSMhHMAAYToWwABhLILAAGEnwBugmaLNwABXskgBAAErAMAA/uk+AUbAAGFNwABhhsAAYWYAAACCcGADwABYQwAWwABhd4LAAGFywBugmaLNwABXsj4BScAAYZIhHMAAYaUWwABhn4PAAGGWwBuhCIWHwABYRUgBAAErAMAA/3U+AUbAAGG8wABiLMAAYc4AAACvo10DwAD+vwFgA8AA/2gAHsAAYfC2NgIAAhbAAGIXg8AAYg7AG6EIhYfAAFhFFMAAYh7AG50mAAFgA8AAU30APgE9HMAAYkOBwABiPMAbnU9WAQABNcAAYk8AAAEAXQPAAP6/AWADwAD/aAExwABiT2ADwAD/aAGDwABiUMAboQg1AAAAAQBbARzAAGJbhcAAYlnAG6G/gKUBAAGEwABiYsAboWIAwAD+0YUAwBuhvwDAAP7QPz8/P0rAAGKsAYHAAGKzwBudTwa2OICSwABkvsAAZMvAAGl1AAGvpgAAAAEDwABk6cAAaXUAAAACAgLAAGUGAAAAnwtgA8AAWDMAwABlJgAAAK+lXQPAAP6/AV0DwAD+vwFgA8AA/2gAAF0DwAD+vwFgA8AA/2gBPgNOwABlP8AAZUYAAKhSXQPAAP6/AWADwAD/aAExwABlUGADwAD/aABGwABlVsAAZXnAAGVoAAAAr6ddA8AA/r8BYAPAAP9oAIHAAGVxwBuiaT4BScAAZX8cwABlkBbAAGWJg8AAZYPAG6LIYcAA/u9IAQABlQDAAP8/PgVOwABlwcAAZcoAAIJwYAPAAFhDASbAAGXBARzAAGXRg8AAZczAG6LISwEAAZMAwAD+zmADwABYQ07AAGXtwABl8gAAgpRgA8AAV/IBJsAAZe0BHMAAZfmDwABl9MAboshLAQABlADAAP7OYAPAAFfyPRzAAGYLgsAAZgTAG6KZVgEAAYTAAGYPwBujFADAAP7QPRzAAGYngsAAZiDAG6KZVgEAARzAAGZdasAAZitdA5HRAWEDAWADwAEAAmADkbqN0Yg9AQABFsAAZnwWwABmcIXAAGZrwBujTJ8LwABX9oC9wABYNwCR1QDAAP7QPRzAAGaRgsAAZorAG6KZVgEAASsAwAD+0D4GTsAAZtDAAGbYAACCV10DwAD+vwFgA5HYATHAAGbqYAOR2ABFwABm9AHAAGb9wABm/wAAYmADwAD+GwGTARzAAGcGhcAAZwTAG6RFYwEAARbAAGcOg8AAZwjAG6LIYcAA/u8AwAD/SQGNwABnFsAbpEUcwABnGIXAAGcWwBukRWQBAAGVAMAA/0E+A07AAGc8wABnRQAAgnBgA8AAWEMBJsAAZzwBHMAAZ0yDwABnR8AboshLAQABhcAAZ03AG6RFAMAA/s5gA8AAWENOwABnasAAZ28AAIKUYAPAAFfyASbAAGdqARzAAGd2g8AAZ3HAG6LISwEAARzAAGd5hcAAZ3fAG6RFZAEAAZQAwAD/QQDAAP7OYAPAAFfyPRzAAGePhMAAZ4fAG6QdVgEAARzAAGf1HMAAZ8NqwABnk10DkdEBYQMBYAPAAQACYAORusAAb9OIPQEAARbAAGfiFsAAZ9aHwABn0cAbpOifC8AAV/aAvcAAWDcAkdWCXwMAAxbAAGgchsAAaBPAG6SohGavoxbAAGguhsAAaCXAG6Soh3GvohbAAGhIFsAAaEOGwABoOsAbpKiAvcAAWDdhwAEABgCRwQDAAP7QTsAAaHHAAGiGAACvqGADwABX8gEmwABocQEcwABojYPAAGiIwBuiyEsBAAGUAMAA/s5gA8AAV/I9HMAAaKCCwABomcAboplWAQABgMAAaKTAG6JZAMAA/tA9HMAAaL+CwABouMAboplWAQABHMAAaOtqwABow10DkdEBYQMCYAPAAQACYAPAAQACYAORuo1oiD0CAAIWwABpEIDAAGkEwBuiWYC9wABYNxbAAGk3FsAAaSuFwABpFsAbpeWfC8AAV/aAvcAAWDcAkdUAwAD+0D0cwABpTILAAGlFwBuimVYBAAGEwABpUMAbpB0AwAD+0ErAAGlmAYLAAGltwBuimQa2OYCSwABrQsAAa0/AAGv9AAGo+wAAAAEDwABrdcAAa/0AAAABAQHAAGuVAAAAhkJdA8AA/r8BYAPAAFhDAABdA8AA/r8BYAPAAP9oAT4CScAAa6QcwABrsoDAAGuowBunDEgBAAErAMAA/ulKwABruwExwABrymADwAD/aAA/SsAAa9ABHsAAa9e2NQEAAYDAAGvxwBunDAAGtjqAksAAbgrAAG4XwAB0yAABqPoAAAABA8AAbjvAAHTIAAAAAgEBwABuWAAAAJ8LYAPAAFgzAAHAAG5vAAAAqb9gA8AA/FUBasAAboVgA8AA/FV3XQPAAP6/AWADwAD/aAE+CE7AAG6dwABupAAAqFJdA8AA/r8BYAPAAP9oATHAAG6uYAPAAP9oAEnAAG60IiXAAG7EgMAAbrjAG6emYAPAAFMRACEcwABu8RbAAG7jFMAAbtfAG6emAAFgA8AAUxGizcAAUxNIAQABKwDAAP7pPgE9HMAAbweCwABvAMAbp+SApQEAAR7AAG8OtjUBAAEWwABvNBTAAG8owBunpgABYAPAAFMRos3AAFMTAADAAP7RScAAb04iJcAAb16AwABvUsAbp6ZgA8AAU30AIRzAAG+VFsAAb4cUwABve8Abp6YAAWADwABTfaLNwABTgEgBAAErAMAA/uk+AT0cwABvq4LAAG+kwBun5IClAQABHsAAb7K2NQEAARbAAG/YFMAAb8zAG6emAAFgA8AAU32izcAAU4AAAMAA/tE/TsAAcALAAHARAACvqV0DwAD+vwFdA8AA/r8BYAPAAP9oATHAAHAhXQPAAP6/AWADwAD/aABGwABwJ8AAcGLAAHA5AAAAr6ddA8AA/r8BYAPAAP9oAB7AAHBCtjcBAAGAwABwVMAbp6YAPgFJwABxRxzAAHFYFsAAcVGEwABxS8AbqVthwAD+70gBAAGVAMAA/z8+AT0cwABxdYPAAHFmwBupHlYBAAGEwABxecAbqVsAwAD+0D4ETsAAcZvAAHGyAACvqmADwAEAAgEkwABx6gMWwABxzYDAAHHBwBunpoRmr6MnguoWwABx5IDAAHHYwBunpoC9wABYN07AAHH5wAByCwAAr6tgA8ABAAIBK0XAAHIZAcAAciLAAHIkAABiYAPAAP4bAZQBHMAAciuHwAByKcAbqjJjAQABFsAAcjOEwAByLcAbqVthwAD+7wDAAP9JAY/AAHI7wBuqMhzAAHI9h8AAcjvAG6oyZAEAAZUAwAD/QT4DTsAAcl7AAHJjAACClGADwABX8gEmwAByXgEcwAByaoTAAHJlwBupW0sBAAGHwABya8AbqjIAwAD+zmADwABX8k7AAHJ+wAByigAAr6xgA8ABAAIBJMAAcs4DFsAAcqwWwAByoBTAAHKbwBuqlQgAnwvAAFf2hGavoyeC6hbAAHLIFsAAcrwUwAByt8AbqpUIAJ8LwABX9oC9wABYN0nAAHLYIhzAAHLuhsAActzAG6oYSAEAASsAwAEAEQEcwABzLhzAAHMXhsAAcwXAG6oYgk8BAAEUwABzIcAbqtUJAADAAQASgJcBAAGTAMAA/0s+AT2OwABzP8AbqhgUwABzU8AbqtUJAD9JwABzeBzAAHOThcAAc3zAG6nVSAEAAYbAAHOWwBuqGADAAQARPgE9HMAAc8KDwABzs8AbqR5WAQABhMAAc8bAG6lbAMAA/tA/TsAAc+/AAHQFAACvrV0DwAD+vwFgA8AA/2gBHsAAdA22OAIAAoDAAHQswBunpoPAAHQ5wBupHgA9HMAAdFOCwAB0TMAbp+SApQEAAYTAAHRawBur5QDAAP7RScAAdHWBwAB0ecAbp7c+AT0ewAB0lbY7AQABg8AAdKHAG6keAD9KwAB0uQGCwAB0wMAbp+QGtjuAksAAdXPAAHV4wAB2FAABr64AAAABA8AAdYPAAHYUAAAAAQEBwAB1lwAAAK+lXQPAAP6/AV0DwAD+vwFgA8AA/2gAAFwBPgFGwAB1o8AAdcbAAHW1AAAAr6ddA8AA/r8BYAPAAP9oAIDAAHW+wBusmz4CTsAAdeDAAHXpAACCcGADwABYQwEmwAB14AEcwAB18IHAAHXrwBusx0sBAAGTAMAA/s5gA8AAWEM9F8AAdgKCwAB1+cAbrOqFhyvAAFhFBrY8gJLAAHYXwAB2HMAAeY8AAaj5AAAAAQPAAHY0wAB5jwAAAAIBAcAAdkEAAACClGADwABYHQABwAB2WgAAAIF2XQPAAP6/AWADwABYHQFqAGADwAD/JXlcAT4CPSMcwAB2boHAAHZnwButcEgBAAErAMAA/umJwAB2Z8AbrXAxwAB2f2ADwABYHQArAV0DwAD+vwFgA8AAWB1JwAB2hSXAAHaOgMAAdonAG61fYAPAAFevPgNJwAB2rCIhHMAAdsMWwAB2tRTAAHawwButXwABYAPAAFevos3AAFeySAEAASsAwAD+6QAcwAB26BbAAHbhFsAAdtMUwAB2zsAbrV8AAWADwABXr6LNwABXsmHAAP7vgJcBAAGTAMAA/0s+Aj0cwAB2/IHAAHb1wButcFYBAAEUwAB3AMAbrV8AAWADwABXrwDAAP7QRsAAdw7AAHdLwAB3JwAAAKl6YAPAAFhDABbAAHc8FMAAdzfAG61fAAFgA8AAV6+izcAAV7I+Aj0ewAB3VbY8AgABFsAAd3uCwAB3bsAbroqFh8AAWEUBgXaBwAB3isAbrXA9HsAAd5u2PAIAARbAAHfBgsAAd7TAG66KhrTAAFhGAYF2gcAAd9bAG61wPz0ewAB38bY8AgABFsAAeA8UwAB4CsAbrV8AAWADwABXr4VVwABXsQGBdoHAAHgjwButcEnAAHgwIRzAAHhBFsAAeDkUwAB4NMAbrV8AAWADwABXr6F3wABXs0gBAAErAMAA/uk+AUbAAHhSwAB4hsAAeG4AAACaGmADwABXFgAWwAB4fRTAAHh4wButXwABYAPAAFevoXfAAFezPgE9HsAAeJC2PAIAARbAAHiwgsAAeKnAG69+gpTAAFcaAYF2gcAAeL7AG61wP0nAAHjeIiXAAHjngMAAeOLAG61fYAPAAFfyACEcwAB5DRbAAHkDFMAAeP7AG61fAAFgA8AAV/JbwABX9UgBAAErAMAA/uk+AUbAAHkcwAB5ScAAeS0AAAAfYAPAAFgdABbAAHk+FMAAeTnAG61fAAFgA8AAV/JbwABX9T4BPR7AAHlRtjwCAAGCwAB5asAbsCkBgXaBwAB5fMAbrXA/BrY9gJLAAHo8wAB6QcAAepgAAa3tAAAAAQPAAHpUwAB6mAAAAAEBAcAAel4AAACClGADiPwAAGADwAD8VQE+AUrAAHpoASbAAHpoARzAAHp0gMAAem/AG7CehFIBAAFqwAB6gWADtkjAAOfbAIj+YAPAAPxVAYCSABuw6wAbX4EAG2XNABtqsQAAAAIAG2q0ABtwCgAbefwAG3pyABt/pgAbgvUAG4SNABuNfwAbktIAG5z+ABuiMQAbpuQAG6d+ABuscwAbrTcAG7B2ABuw6wAAABAAAga2Vq+vgJMAAAKBWAEAgi4AAQFJhbWF84Y1hXmGLIaPhjuGWoYnhNeCBoUyhcOGUYaEhouGM4WDhiqFDoZFhnCGGoVqhpWFW4aRhY+GiIXxhjmGIIR7hKiEuYYOhWWHBIYUhhKFF4W8hnKFuYamhFGGAYU+hVeFloWhhgqGVYIHhbGFwYWzhdaFYYW/ha+GTIYIhFSGs4aphMSGooZnhZGFlIaNh02HwQEArKEAAQEiq7CrvavBq8WryKvQq/6sAKwJrAusFKwTrCGsHawarJ+sPKw/rEGsRKxOrFCsDqw0rDKsL6xVrFesWaxbrF2kNayVrJtrgkyCU4KMgsOC3YL3gxyDkIOvg+KEJYRlhHSEkYSvhMGE3YTshPSE/4ULhReFKYWDhZWFpYW2hcSF1oXphfuGDoZUhpWGoYbfhv6HB4cbhzWHQ4ddh3SHl4eih6iHsofIh9CH3YfniBSILYg7iFGIZ4iRiLyIx4j8iQeJE4kfiSuJN4lJiWOJdYmEiZaKlIqtgjSstKzErMus06zarOetA60KrS2tNK09rUqtTa1ZrWGtbK2UraCtpa3Erc+t2K3jrfquAa4VrhyuJa4srjOuoK7ErtWu5gAAAAAAAAGAkwAbsx0AG7MaAAAAAAAbsx0AAAAAAAIGtlcAgJQAAAmA2gAAwAC5wgABAQEDgPwAAJv5AAEBAYfxgT8AAJysAAEBAYfygXgAAIImAAEBBIIGhT6GhIazgdUAAIveAAEBAYIOghUAAIxdAAEBAYIQglQAAKQQAAEBAZXCgpsAAKGSAAEBAZWHgt4AAItpAAEBAQ8AAAABArZagJSDFIMjkmYHpC8AAAFgAcAA/2gAAAAACQa2XICUg0KDSoSIBAEAAAAAAQODZISIAAAABAIEg3UAAAB6YAOLbQCDggAAAIGuYAPAAQCDAIOZAAAApD5gA8ABAIMBagBgA8AA/yV5g7UAAACkN2ADwAD8VQFqAGADwAD/JXkAYAO2WgE+AUqDyQEfg9SkQgMAAx+D9Yx6AQABH4QWjCYCAAACeoCEMMAbs+6CVTGEQWADwAEAgwGBhELAG7P5AIKEWcAbtAeDhHjAG7QeAAa2XYCUhT2FRYaUBAGkSwAAAAEDhW2GlAAAAAQDBIWFAAAAemADi20AhZIAAACBrmADwAEAgwCFqAAAAIJZYAOKlACFvwAAAKQ3YAPAAPxVAWoAYAPAAP8leQBgA7ZaAT4BSoXTAR+F3qRBAwADH4YNjHoBAAEfhi6MJgIAAAJ6gIZIwBu0o4JVMYZZYAPAAQCDAYGGWsAbtK4AgoZxwBu0vIOGhMAbtMgABrZfgJSHH4cxh2oAAqRMAAAAAQOHPYdqAAAAAgAAAodJAAAAntZdA8AA/r8BYAPAAQCDAWoAYAPAAP8leYdbAAAApE1gA8AA/FUBagBgA8AA/yV5XQPAALrjAWADipQABrZggJSHzofYh+YAAqRxAAAAAQOH5IfmAAAAAAAAAGADnK0ABrZhgJSIT4heiHEAAqRyAAAAAQOIb4hxAAAAAAAAAGADnAUABrZigJSJMYk2iUkAAqSlAAAAAQOJQIlJAAAAAQEBiUUAAACArGADwAEAgwAAXAAGtmOAlIqbiqCKtgACpKYAAAABA4q0irYAAAAAAAAAXAAGtmSAlIyMjJGMzwACpKcAAAABA4yzjM8AAAABAQGMxAAAAIhOXQPAAP6/AWADipQAAFwABrZlgJSRYZFzkmQAAqSNAAAAAQORhJJkAAAABwUHkZMAAACCb2ADwAEAAgCRuwAAAJcKXQPAAP7xAmADwAEAAmADiPwAkeIAAACkjl0DwAD+vwFgA4mWAJIAAAAApI9gA8ABAAIAkiIAAACY/WADwAEAgwCSPAAAAIaSYAPAAQACAWoAYAPAAP8leZJSAAAAhB5gA8AA/FUBapJdYAPAAPxVAABdA8AAuuMBYAOEJQAAABuz0QAbtIUAG7UvABu1jwAbtbMAG7XXABu2BgAbticAG7ZbABu3CwAAAAkAAAEGtlmAlJJpkm6SywABoFgAAAABA5J/kssAAAABAQGShwAAAJ33YAPAAQACAABgA8AA/FUBPgFKkpcBHpKsoZkBAAGAkr7AG7dZAAGAlAAbt4UAG7O1ABu3OAAAAAEAG7c7ABu3hQAAAAEAAga2Zq+wgJUAAASBAQAAwAC5wgAAgRYAAMAAxwIAAIEtAADAANW8AACBSAAAi7kAAAAAAAICtmeAlYIWghyF4gOkMAAAAWABwAD/aAABYAGLugMEtmqAlYJhgmwJr7G2ZgBdA8AA/vECYAPAAQCDYAPAAOU5ATKCamADwAEAg2ADwADlOQAEtmuAlYJ/gpwJr7K2ZgBdA8AA/7MBYAPAAQCDAR6CksAAwyEAAWADwAEAgwAABLZsgJWDWINoGILlAGADwAEAgwABBbZ0gJWDbYNtg9IAAAADg32D0gAAAAEBAYOCAAAAguVgA8ABAIMAAGADtmcBPwIIALZsHoOvtnABAAGAg8HAG7iHAAkBg23AAP9+AAAAAAMGtm6AlYPXg/qEfgAAh+sBaoPYYAPAAP9oAgAAAQOEBoR+AAAAAQEBhAsAAACArGADwAEAgwAAYAO2dQE+AUqEFgEfhCG2iAIAAi4chGochFoWhEkuguW2bINCAQABgIRlwBu45gDAAQCvnN4AAAAAwAEAsAAGtnKAlYSDhI6FSQEAiDkAAAABA4SahUkAAAAAAAAAYAPAAQACAT4EToSthLAAAIPpYAPAAQBMAR+EtsABAGsAAAAAPRyE0RaEyi6vsbZmtmqD/QEAATSE2QOE2YT5AAAAAgIChNoAAACArGADwAEAgwCE3wAAAIC1YAPAAOU5AABcAUqE5QEchOiAhOXAG7lcgo4BAAEkhPgDJ6+zgYTywBu5lyeArwDAAQBgAMAA/xA9HIUNFoUALq+ytma2a4P9AQABNIUVA4UVhTIAAAABAQGFFgAAAICsYAPAAQCDAABcAUqFHgEchSGAhR7AG7lcgo4BAAEkhTEDJ6+zgYUrwBu6BSeArwDAAQBgAMAA/o1KhTkBJIVFAYCFQsAbuVwGtnCAlYVOhVmF4AABr7S2ZgAAAAEDhWqF4AAAAAEBAYVvAAAAgKxgA8ABAIMAAGADwAEAgwE+AkmFeiEchYgWhYOAhX/AG7pzTsABAI5PAQABJ1AAwAEAEz4BPYiFn8AbunMchamAhaXAG7pziHUBAAABThyFwBaFu4CFt8AbunNOwAEAjmQBAAEnUADAAQAXwAEArD9KhdIBgIXZwBu6cwAAG7i+ABu5MwAbulMAG7r0AAAAAwK2dYCVhjqGQI9oA6+1AAABYAHAAP9oAAFgAYu/AgS2eICVho6GmQmIIrZmAGADtmcABLZ5gJWGtIa3CYCsAWqGn2ADwAD/aAJgA8ABAIMAAQW2iICVhryGvIbwAIC1tmYAA4bUhvAAAAACAgKG2gAABIgiYAO2ZwCG7AAABICsYAPAAQCDAABgA7Z1AT8DCAG2eIAAwBu7dggBtnmBAMAbu4IJAYa8wAD/fgAAAAAJBrZ7gJWG9YcJhyEBAIPGAWqG9mADwAD/aAIAAAEDhxKHIQAAAAAAAABgA8AA/hsBSocVARaHGRaHFS6ArLZ5g8bAAQCeBrZ9gJWHJodAh8YDAEgBaocnYAPAAP9oAgAAAQOHQofGAAAAAQEBh0oAAACD22ADwAD/aAAAYAPAAPxVAUqHWgEiIiWHYICHWsAbvCVgA7Z1AByHjRaHiRSHg8AbvCUAAWADtnWArLZ5SAEAARaHkC6ArLZ5AMABAKoAHoedwAD3/AIAAhaHrRSHp8AbvCUAAWADtnWIIrZmtngWh7ouiCK2ZrZ4AAa2foCViECIRYj2AACvtgAAAAEDiFSI9gAAAAAAAABcAT4CSYhdIRyIeRyIcxaIbRaIYS6IIrZmtnivsbZmtmpLAQABFoh0LoCstnkAwAD/BUgBAAErAMAA/3U+AT0wiIofiJSLzwIAAhaIqC6ArLZ5JIjEAyevtxaItS6ArLZ5J6+4AD89HIjqFojdFojRLogitma2eK+ytma2a1YBAAEWiO4ugKy2eQDAAP/ABrZ/gJWI+4kUiYUAAIOgAWqI/GADwAD/aAIAAAEDiRqJhQACAAAAAABdA8AAuuMBYAPAAPxVAT4NTgAAAAGByl0DwAC6KQFgA8AA/FUBH4kjwAC6NgABYAPAAPxVAABOAAAAAIHLXQPAALrfAWADwAD8VQBOAAAAAIHMWwBOAAAAAIHNWwBOAAAAAIHOWwBOAAAAAIHPWwGTTgAAAACB0FsAT4kUAAAAAIHSWwADiRqJhQQAAAMAAwAAAACB01sAAAAAAIHUWwAAAAAAgdVbAABbAUs+A0E+Aj2JiSnAG72xIiEciUgciUIWiTwWiTAuiCK2ZrZ4r7G2ZrZqSwEAARaJQy6ArLZ5AMAA/wVIAQABKwDAAP91ARyJdBaJZxaJWy6IIrZmtnivsrZmtmuDHAEAARaJfS6ArLZ5AMAA/79CAAA9HgDAALn8AgACgADAG72LgQDAG72xAEqJhQADAQBbAQAAAACB1FsAAQAAAACB1VsAPgE9HACAAMAbvYuB3QIAAhQAwBu+tAsAFADAG769DAAAwAC7DD2KAMAbvcYeAMAAuf0BAAGHAMAbvfYAPYsAwBu9zx4AwAC59wEAAYcAwBu99gA9jADAG73YHgDAALn4AQABhwDAG732AD0ciRqAAMAbvYtqAQABhwDAG732AABKAAEWAIAAwBu9i4HewAC7CAa2gICViYqJqIpwAACH7AFqiYtgA8AA/2gCAAABA4mzinAAAgAAAAAAXQPAALrjAV0DwAD+vwFgA8AA/hsBPg1OAAAAAYHKXQPAALopAV0DwAD+vwFgA8AA/hsBH4m8wAC6NgABXQPAAP6/AWADwAD+GwAATgAAAACBy10DwAC63wFdA8AA/r8BYAPAAP4bAE4AAAAAgcxbAE4AAAAAgc1bAE4AAAAAgc5bAE4AAAAAgc9bAZNOAAAAAIHQWwBPiagAAAAAgdJbAAOJs4pwBAAAAwADAAAAAIHTWwAAAAAAgdRbAAAAAACB1VsAAFsBSz4DQT4ETonMidUAAIhpYAPAAOU5ARyJ6RaJ4xaJ1y6IIrZmtnivsbZmtmpLAQABFonqLoCstnkAwAD/BUmJ9ByKARSJ+MAbwEwLAEgBAAErAMAA/3U+AT0wihIfihyLzwIAAhaKMC6ArLZ5JIpQAyevuRaKPC6ArLZ5J6+6AD89iYpdwBu/yxSKZMAbwEwLAEIAAD0eAMAAufwCAAKAAMAbv5eBAMAbv8sASopwAAMBAFsBAAAAAIHUWwABAAAAAIHVWwA+AT0cAIAAwBu/l4HdAgACFADAG8D5CwAUAMAbwQIMAADAALsMPYoAwBu/5x4AwAC5/QEAAYcAwBvAFwA9iwDAG7/wHgDAALn3AQABhwDAG8AXAD2MAMAbv/keAMAAufgBAAGHAMAbwBcAPRyJs4AAwBu/l2oBAAGHAMAbwBcAAEoAARYAgADAG7+Xgd7AALsIBraBgJWKdYqQi18AAIftAWqKdmADwAD/aAIAAAEDipyLXwACAAAAAABdA8AAuuMBYAPAAQACAT4OTgAAAAGByl0DwAC6KQFgA8ABAAIBH4qlwAC6NgABYAPAAQACAABOAAAAAIHLXQPAALrfAWADwAEAAgBOAAAAAIHMWwBOAAAAAIHNWwBOAAAAAIHOWwBOAAAAAIHPWwGTTgAAAACB0FsATgAAAACB0VsAT4qQAAAAAIHSWwADipyLXwQAAAMAAwAAAACB01sAAAAAAIHUWwAAAAAAgdVbAABbAUs+A0E+A02KvQI1AAAAAABbAR6KvcAAufkEAAQcisMuh+wAAAAAtoCDAMAbwhmEAMAbwiIUAMAbwkkIAAArToq1irsAAIQ5XQPAAP6/AWADwAD+GwEUAMAbwlwJAEs+Aj2JiuLAG8H7HIruaorpYAPAAMtngYmHLAEAARSK9cAbwrYMAADAAMtwQgAAAAGLA2ADwAD97gGLHQAAAYNTYAPAAP3uAAA+AT0wiygfizKLzwIAAhaLRi6ArLZ5FotNFItLwBvDDg0AIsAA/fAAPR4AwAC5/AIAAoAAwBvB1YEAwBvB+wBKi18AAwEAWwEAAAAAgdRbAAEAAAAAgdVbAD4BPRwAgADAG8HVgd0CAAIUAMAbw2UMABQAwBvDbg0AAMAAuww9igDAG8IQHgDAALn9AQABFADAG8JJCAAAPYsAwBvCGR4AwAC59wEAARQAwBvCSQgAAD2MAMAbwiIeAMAAufgBAAEUAMAbwkkIAAA9HIqcgADAG8HVagEAARQAwBvCSQgAAABKAAEWAIAAwBvB1YHewAC7CAa2goCVjASMCYyuAACvuwAAAAEDjBmMrgAAAAEBAYwkAAAAhDldA8AA/r8BYAPAAP4bAABcAT4BSYwxJYw7gIw1wBvELWADwADlOT4BPRyMUS6vvLZmAgACFoxZLoCstnkUjF7AG8QtAAFgA8AA5TkAtoU+AT0cjHkur7y2ZgIAAhaMgS6ArLZ5HoyKwADlPgEAAYCMncAbxC0AALaFBraDgJWNfI2BjpMAAIRKAAAAAQONko6TAAAAAQEBjZoAAACIe2ADwAEAAgAAXAE+AT0cjmYur7y2ZgIAAhaObi6ArLZ5Jo6CAByOeGqOc2ADwADLZ4GJlaIBAAGAjn/AG8TLAMAAyXBgA8AA5TkAtoUGtoWAlY6Yjp2PZgAAr7y2ZgAAAAEDjqSPZgAAAAICAo6pAAAAgKxgA8ABAIMAjrgAAAASYAPAAOU5AABcAT4CSY7EHI7hFo7UFo7ILogitma2eK+ytma2a4McAQABgI7qwBvFPgDAAP+/PgE9MI74H48Ci88CAAKAjxbAG8U+JI83Ayevt4CPI8AbxT4nr70APz0cj1YWj1AWj0QuiCK2ZrZ4r7G2ZrZqgL8CAAKAj1fAG8U+gY9ewBvFTADAAP8GAAAbu7kAG7v+ABu8pAAbvVEAG79WABvBmwAbxA8AG8StABvFHgAbxd8AAAAJAAAAAYCVABvGDwAbt9oAG7sJABvGDAAAAAIAG8YPAAAAAAACBraJr76AlgAAB4D4AACCJgABAQKEqIS5gUIAAMAAUb4AAQEBqDqBdwAAr48AAQEBnsyBqwAAwABT4QABAQGo8IHOAADAAFPuAAEBAajxgfEAAKjGAAEBAZ60gjMAAKmhAAEBAZ7EAAAAAQK2ioCWgnuCgYhdA6QxAAABYAHAAP9oAAFdAcAAUcEBYAPAAQCDAQS2jICWgseCzwme3gBdA8AA/vECYAPAAQCDYAPAAFWAAAEFtpKAloLUgtSC7wAAAAOC4ILvAAAAAQEBguYAAASe3l0DwAD+8QJgA8ABAINgA8AAVYAAAGADtooBPwIIAbaMgADAG8b8CQGC1MAA/34AAAAAAga2joCWgvSDBoMfAQCkoQAAAAEDgw+DHwAAAAAAAABdA8AA/n0BYAPAAQCDAUqDEgEWgxsWgxIunt62jINowAD/Ewa2kICWgySDMohbAACkggAAAAEDgz2IWwABAAEBAYNCAAAgpKBgA8ABAIMAAF0DwAD+fQFgA8ABAIMBPgROAAAAAIHPWwGTTgAAAACB0FsAT4MyAAAAAIjtWwADgz2IWwQAAAEBAQAAAACI7l0DwAD4BwFgA8ABAIMAAGADwAD8VQE+Aj4DToNlg20AAIRIYAPAAFWAARyDdxaDby6e3raMSwEAAYCDeMAbx5YAwAD/BUmDhRyDkYWDicAbx/9IAQABKwDAAP91PgE9MIOiJIPEAievv4CDvcAbx5Y/SYPQJYPchYPUwBvH/2ADqaU+A0aD/YQkhAkAAACEr2ADwABT8QAWhBsUhBPAG8f/BQFgA6mlmdOprT4BSYR1IRyEiRaEgIaEecAbyG2HkcAAU/RIAQABKwDAAP91PgJOhKKEpgAAgKxgA8ABAIMBFoS4FoSvhoSowBvIbYeRwABT9ICswABVk0mExxyE1BaEyy6e3raMh2QBAAGHhODAG8i1AMAA/wQ+AT4CPRcAhADAG8feiO/AAPe+h4T6wBvItcAA+AxNhPQCKT8/RoUjhUqFLwAAAISwYAPAAFPiABaFQRSFOcAbx/8FAWADqaWpBqmuPgJOhViFXAAAgKxgA8ABAIMBFoVuFoVlhoVewBvJJqmqwABT5YCswABVk0mFexyFiBaFfy6e3raMh2QBAAGHhZTAG8lLAMAA/wQ+AT4CPRcAhADAG8feiO/AAPe+h4WswBvJS8AA+AxNhaYCKT9GhcmF+oXjAAAAmlJgA6mlABaF8xSF68Abx/8FAWADqaWEhqmrPgJOhgiGDAAAgKxgA8ABAIMBFoYThoYOwBvJu4CsqdFJhiAchi0WhiQunt62jIdkAQABh4Y5wBvJ3gDAAP8EPgE+Aj0XAIQAwBvH3ojvwAD3voeGUcAbyd7AAPgMTYZLAik/SYZzJYZ/hYZ3wBvH/2ADqNA+AkaGu4b+htIAAACEwWADgsMAFobwFoboFIbgwBvH/wUBYAOo0IRIqNKAz4KdPgJOhwyHEAAAgKxgA8ABAIMBFocrFocdhocSwBvKVoSzgs6EfIKOSYc+HIdLFodCLp7etoyHZAEAAYeHV8AbyoAAwAD/BD4BPgI9FwCEAMAbx96I78AA976Hh2/AG8qAwAD4DE2HaQIpP0aHnIfMh60AAACaUmADgt0AFofFFoe9FIe1wBvH/wUBYAOo0IRIqNKEhoKfPgJOh9qH3gAAgKxgA8ABAIMBHIfsFofoFIfgwBvH/wUBYAOo0ICsqOlsAQABFof5hof0wBvK7IS6guAAwAEArkmICxyIGBaIDy6e3raMh2QBAAGHiCTAG8sWAMAA/wQ+AT4CPRcAhADAG8feiO/AAPe+h4g8wBvLFsAA+AxNiDYCKT8/SohbASpKAAEfAMAA+AYBAWADwAEAgwGDAMAbx8sAAAAbxzYAG8d4ABvLtQAAAAIAAAABgJYAG8vJABvGmgAby8YAAAABABvLyQAAAAAAAga2k6/AgJcAAAAAAAABAraUgJeA9YD7groDhLwAAAFgAcAA/2gAAAIEtpaAl4EVgRsJhL0AYAPAAPxVAAS2l4CXgTKBNwmEvgBdA8AA/7MBYAPAAQACAAMFtpuAl4E8gTyBfAAAAAOBRoF8AAAABAQEgUwAAASEvWADwAD8VQCBWQAABIS+XQPAAP+zAWADwAEAAgCBZAAAAIdxYAPAAP4bAIF0AAAAhGZgA8ABAIMAAGADtpQBPwMIAbaWgADAG8xXCAG2l4EAwBvMZQkBgTzAAP9+AAAAAAW2nICXgYGBgYIKAIS/AAOBkIIKAAAAAwMDgaIAAACEvl0DwAD+fQFgA8ABAAIAga0AAACHcWADwAD+GwCBvQAAAIRmYAPAAQCDAABgA7aUAT8BCgCBzrabBAAEKR6B3cAAwyMBAWADwAEAAgGAge7AG8zYAIGB9sAbzO2CggLAG8z7AAW2nYCXgg+CD4KZAITAAAOCHoKZAAAAAwMDgjAAAACEvl0DwAD+fQFgA8ABAAIAgjsAAACHcWADwAD+GwCCSwAAAIRmYAPAAQCDAABgA7aUAT8BCgCCXLabBAAEKh6CbMAAwyMBAWADwAEAAgGAgn3AG81cAIGChcAbzXGCgpHAG81/AAEGtpmAl4KegqeCuAEAhMIAAAABA4KugrgAAAAAAAAAYAPAAPxVAUqCsQEhFoKyLoS9tpYAABvNxwAbzfoAAAABAAAAAYCXABvOCgAby/QAG84HAAAAAQAbzgoAAAAAAAIGtp4AgJgAAAGA2gAAwADsPwABAQOvwQevwgAAAAAAAAEGtqCAmIENgRGC5AABpDIAAAABA4EbguQAAAACAgKBJgAAABJdA8AA/r8BYAPAAP4bAIEzAAAAgudgA8ABAAIAAGADwAEAgwE+Bk6BvIHGAACvw2ADwADv6QEfgczAAO/2AAAAAE6B5YIAAACvxF0DwAD+vwFgA8AA/hsBHIIMgoICwBvOk5WiAQABgIITwBvOZgDAAMlwToImgi4AAK/FYAPAAPA5ARyCRRqCOsAA8D6vxgEAASSCXwGBglbAG856AMAA8EpOgmmCbgAAgb1gA8AA8NUBHoJ0wADw1wEAASSCmQQWgoSEgnzAG87gTsAA8DsnUIGCjMAbznonr8cAPRyCo4WCnsAbzw+vuwEAAYOCtMAbzq4AwADw9kqC0wEWgt+FgtrAG88PgKzAAPILAYCYABvPeAAbzkUAAAAAABvOSAAbz3gAAAABAAIGtqGvyICZAAAEgW0AAMAAucIAAIGDAACLuQAAga8AALZmAACB4gAAkoAAAAAAAAICtqKAmYKkgqqD7QOkMwAAAWABwAD/aAABYAGLugIEtqSAmYLsgvIJpJUAYAO2ZwAEtqWAmYMHgw8Jr8kAYAOLugABBbapgJmDFIMUg4UAAAADgySDhQAAAAIBAoMqAAAEpJVgA7ZnAIM+AAAAr8pgA4u6AWoAYAPAAP8leQBgA7aiAT8DCAG2pIAAwBvQIQgAtqU1AAAAAQBgA4u6AYGDXcAb0C0jHINnggDAG9BZSAEAASsAABqDfZKDggDAG9BZAWADi7oJAYMUwAD/fgAAAAABBrangJmDioOng+sAAIfrAWqDi2ADwAD/aAIAAAEDg7OD6wAAAAEBAYO4AAAAgKxgA8ABAIMAAGADi78BSoPGAR+Dyra3AgACgIPhwBvQwC4AAAAb0JgAG9DpAAAAAQK2qoCZhEaETIeRA6/LAAABYAHAAP9oAAFgAYu/AwS2rICZhI2EkAmArABgA8ABAIMABLaugJmEpYSuGK/MtqEAYAOLvwErBLavgJmEyYTMCa/NtqEAYAO2ogABBba3gJmE0YTRhPsAAAADhOeE+wAAAAICAoTtAAAEgKxgA8ABAIMAhPcAAASvzWADtqIAAGADtqoBPwMIAbasgADAG9FrCAG2r4EAwBvReQkBhNHAAP9+AAAAAAQGtrGAmYUAhR2GlwEAr84AAAABA4UmhpcAAgAAAAAAXQPAALrjAWADi78BPg9OAAAAAYHKXQPAALopAWADi78BH4UswAC6NgABYAOLvwAATgAAAACBy10DwAC63wFgA4u/AE4AAAAAgcxbAE4AAAAAgc1bAE4AAAAAgc5bAE4AAAAAgc9bAZNOAAAAAIHQWwBOAAAAAIHRWwBOAAAAAIg3WwBPhR0AAAAAgdJbAAOFJoaXBAAAAwADAAAAAIHTWwAAAAAAgdRbAAAAAACB1VsAAFsBSz4DQT4HSYUyIRyFQBaFNi6vzLahtq5IAQABKwDAAP91PgI9iYVJwBvR/haFUC6vzLahtq5CAAA/ToVwhXcAAKSGYAOLvwEchYQWhX0WhXkur822obavpJW2pIfrAQABFoWRLoCstqwAtm49FQDAG9JICBwAIiIhHIWsFoWlFoWhLoCstqyBvMABAIlIAQABJ4G9AMABABEAIRyFxBaFvRaFuS6ArLasgbzAAQCJSAEAAScSAMABABEAJYXrFoXiFoXeLq/NtqG2r6/JtqVgA5KBSAEAASkAAEkAFADAG9JICAA/PgJNhg0CNQAAAAAAWwEehg3AALn5BAAEHIYaFIYTwBvSuw0Ag6AAAAAAi8ODAMAb0hqEAMAb0iMUAMAb0lMJAAArPRUAwBvSSAgcABQAwBvSZgoASAEAASkAAEmFmxQAwBvSSAgAPgM9F4YsLq/MtqEUhjjAG9K7DQC2rj2JhkbAG9H+FoZNLq/MtqG2rkIAAD89iYZiwBvR/heGaS6vzLahHIaCFoZ5FoZ1Lq/NtqG2r6/JtqWH6wEAARaGjy6ArLasAIu8tq5CAAA9HgDAALn8AgACgADAG9HcgQDAG9H+AEqGlwADAQBbAQAAAACB1FsAAQAAAACB1VsAPgE9HACAAMAb0dyB3QIAAhQAwBvUUA0AFADAG9RZDgAAwAC7DD2KAMAb0hEeAMAAuf0BAAEUAMAb0lMJAAA9iwDAG9IaHgDAALn3AQABFADAG9JTCQAAPYwAwBvSIx4AwAC5+AEAARQAwBvSUwkAAD0chSaAAMAb0dxqAQABFADAG9JTCQAAAEoAARYAgADAG9Hcgd7AALsIBrazgJmGnIa1huAAAIOgAWqGnWADwAD/aAIAAAEDhruG4AACAAAAAABdA8AAuuMBYAPAAPxVAT4OTgAAAAGByl0DwAC6KQFgA8AA/FUBH4bHwAC6NgABYAPAAPxVAABOAAAAAIHLXQPAALrfAWADwAD8VQBOAAAAAIHMWwBOAAAAAIHNWwBOAAAAAIHOWwBOAAAAAIHPWwGTTgAAAACB0FsATgAAAACB0VsAT4a1AAAAAIHSWwADhruG4AQAAAMAAwAAAACB01sAAAAAAIHUWwAAAAAAgdVbAABbAUs+A0E+A02GyAI1AAAAAABbAR6GyMAAufkEAAQWhs4ur862sYMAwBvVeIQAwBvVgRQAwBvVqAgAACs9iYbHwBvVWhyG2BQAwBvVuwkAg6AAAAAAi8NCAAA9HgDAALn8AgACgADAG9U0gQDAG9VaAEqG4AADAQBbAQAAAACB1FsAAQAAAACB1VsAPgE9HACAAMAb1TSB3QIAAhQAwBvWTgwAFADAG9ZXDQAAwAC7DD2KAMAb1W8eAMAAuf0BAAEUAMAb1agIAAA9iwDAG9V4HgDAALn3AQABFADAG9WoCAAAPYwAwBvVgR4AwAC5+AEAARQAwBvVqAgAAD0chruAAMAb1TRqAQABFADAG9WoCAAAAEoAARYAgADAG9U0gd7AALsIBra0gJmG5YcDhzgAAIfsAWqG5mADwAD/aAIAAAEDhw6HOAACAAAAAABdA8AAuuMBXQPAAP6/AWADwAD+GwE+Dk4AAAABgcpdA8AAuikBXQPAAP6/AWADwAD+GwEfhxrAALo2AAFdA8AA/r8BYAPAAP4bAABOAAAAAIHLXQPAALrfAV0DwAD+vwFgA8AA/hsATgAAAACBzFsATgAAAACBzVsATgAAAACBzlsATgAAAACBz1sBk04AAAAAgdBbAE4AAAAAgdFbAE+HAwAAAACB0lsAA4cOhzgEAAADAAMAAAAAgdNbAAAAAACB1FsAAAAAAIHVWwAAWwFLPgNBPgNNhxsCNQAAAAAAWwEehxvAALn5BAAEFochLq/OtrGDAMAb15KEAMAb15sUAMAb18IIAAArPYmHGsAb120chysUAMAb19UJAIfsAAAAAIvEQgAAPR4AwAC5/AIAAoAAwBvXOYEAwBvXbQBKhzgAAwEAWwEAAAAAgdRbAAEAAAAAgdVbAD4BPRwAgADAG9c5gd0CAAIUAMAb2GgMABQAwBvYcQ0AAMAAuww9igDAG9eJHgDAALn9AQABFADAG9fCCAAAPYsAwBvXkh4AwAC59wEAARQAwBvXwggAAD2MAMAb15seAMAAufgBAAEUAMAb18IIAAA9HIcOgADAG9c5agEAARQAwBvXwggAAABKAAEWAIAAwBvXOYHewAC7CAa2tYCZhz2HWIePAACH7QFqhz5gA8AA/2gCAAABA4dkh48AAgAAAAAAXQPAALrjAWADwAEAAgE+Dk4AAAABgcpdA8AAuikBYAPAAQACAR+HcMAAujYAAWADwAEAAgAATgAAAACBy10DwAC63wFgA8ABAAIATgAAAACBzFsATgAAAACBzVsATgAAAACBzlsATgAAAACBz1sBk04AAAAAgdBbAE4AAAAAgdFbAE+HWAAAAACB0lsAA4dkh48EAAADAAMAAAAAgdNbAAAAAACB1FsAAAAAAIHVWwAAWwFLPgNBPgNNh3ECNQAAAAAAWwEeh3HAALn5BAAEFod3Lq/OtrGDAMAb2ZCEAMAb2ZkUAMAb2cAIAAArPYmHcMAb2XIch4EUAMAb2dMJAIftAAAAAIvFQgAAPR4AwAC5/AIAAoAAwBvZTIEAwBvZcgBKh48AAwEAWwEAAAAAgdRbAAEAAAAAgdVbAD4BPRwAgADAG9lMgd0CAAIUAMAb2mYMABQAwBvabw0AAMAAuww9igDAG9mHHgDAALn9AQABFADAG9nACAAAPYsAwBvZkB4AwAC59wEAARQAwBvZwAgAAD2MAMAb2ZkeAMAAufgBAAEUAMAb2cAIAAA9HIdkgADAG9lMagEAARQAwBvZwAgAAABKAAEWAIAAwBvZTIHewAC7CAAAG9GuABvU+gAb1vgAG9kSABvbEAAAAAQAAAABgJkAG9ssABvPxQAb0PYAG9spAAAAAgAb2ywAAAAAAAIGtrivz4CaAAACgPgAAIImAAEBA4R7hKiEuYFPAADAAFG+AAEBAag6AAAAAQK2uYCagYSBioY8A6Q2AAABYAHAAP9oAAFdAcAAUcEBYAPAAQCDAQS2u4CagcmB0gmG9QBdA8AA/vECYAPAAQCDYAOCjAABBbbBgJqB14HXgfMAAAADgeOB8wAAAAEBAYHpAAAEhvVdA8AA/vECYAPAAQCDYAOCjAAAYAO2uQE/AggBtruAAMAb29kJAYHXwAD/fgAAAAACBra9gJqB+IIKgiQBAKShAAAAAQOCE4IkAAAAAAAAAF0DwAD+fQFgA8ABAIMBSoIWARaCIBaCFi6G9ba7g2jAAP8TBra/gJqCKYI3hjoAAKSCAAAAAQOCQoY6AAEAAQEBgkcAACCkoGADwAEAgwAAXQPAAP59AWADwAEAgwE+BE4AAAAAgc9bAZNOAAAAAIHQWwBPgjcAAAAAiO1bAAOCQoY6BAAAAQEBAAAAAIjuXQPAAPgHAWADwAEAgwAAYAPAAPxVAT4CPgROgmOCawAAhEhgA4KMARyCdhaCbS6G9ba7SwEAAYCCd8Ab3HEAwAD/BUmChByCkIWCiMAb3NpIAQABKwDAAP91PgE9MIKhJILDAievv4CCvMAb3HE/RoLsgyeDAwAAAITBYAOCwwAWgxmFgxHAG9zagM+CnT4DToMzgzgAAK/QYAPAAQCDARaDUxaDRYaDOsAb3TOEs4LOhHyCjk6DaINtAACTU2ADwAEAgwEWg4gWg3qGg2/AG90zhLOCzoRmgo9Jg5ccg6UWg5suhvW2u4dkAQABh4OxwBvdUADAAP8EPgE+Aj0XAIQAwBvcuYjvwAD3voeDyMAb3VDAAPgMTYPCAilJg9shHIPkFIPfwBvddQgASAEAASsAwAEAqj4BSYP3HIQFFoP7Lob1truHZAEAARSEEcAb3XUIAADAAP8EPgE+Aj0XAIQAwBvcuYjvwAD3vhSEKsAb3XUIAMAA+AxNhCQCKT8/RoTlhQ2E9gAAAJpSYAOC3QAWhQaFhP7AG9zahIaCnz4DToUZhSEAAIS6YAPAAQCDARyFNRaFK4WFI8Ab3NqEfIKObAEAARaFQoaFPcAb3kSEuoLgAMABAK5OhVaFXgAAhGZgA8ABAIMBHIVwFoVohYVgwBvc2oRmgo9sAQABFoV9hoV4wBveRIS6guAAwAEArkmFjRyFmxaFkS6G9ba7h2QBAAGHhafAG95hAMAA/wQ+AT4CPRcAhADAG9y5iO/AAPe+h4XBwBveYcAA+AxNhbsCKUmF1yIhHIXjFIXbwBvemQgASAEAAYeF5sAb3mEAwAEAqgAchfsWhfEuhvW2u4dkAQABFIYHwBvemQgAAMAA/wQ+AT4CPRcAhADAG9y5iO/AAPe+FIYhwBvemQgAwAD4DE2GGwIpP0qGOgEqSgABHwDAAPgGAQFgA8ABAIMBgwDAG9ymAAAAG9wRABvcUwAb35YAAAACAAAAAYCaABvfqgAb23kAG9+nAAAAAQAb36oAAAAAAAIGtsKv0YCbAAABgToAAFoAAAAAAAMCtsOAm4GdgaOC8AOlBQAAAWABwAD/aAABYAGAkQABBbbIgJuB1IHage4BAAADgeyB7gAAAAAAAABgA7bDAT8BCQGB2sAA/34AAAAAAga2xYCbgfOCCoKKAACCkgFqgfRgA8AA/2gCAAABA4IagooAAAADAwOCIgAAAIC9YAPAAQACAIIvAAAAgpNgA8ABAAIAgkUAAACClGADdQAAYAOAhQE+AUqCUQEegmG20AMAA4CCcMAb4FGBgnbAG+BfgoKBwBvgbQAGtsaAm4KPgqyC7gAAgpUBaoKQYAPAAP9oAgAAAQOCvILuAAAAAQEBgsEAAACArGADwAEAgwAAYAOAiwE+AUqCzAEfgte22wEAAYCC5sAb4MoAAAAb4CkAG+CiABvg9AAAAAICtsmAm4MagyCEuAOkrQAAAWABwAD/aAABYAGAhQEEtsuAm4NQg1QJgL0AYAPAAQACAAEFttKAm4NZg1mDbAAAAAODYYNsAAAAAQEBg2cAAASAvWADwAEAAgAAYAO2yQE/AggBtsuAAMAb4VEJAYNZwAD/fgAAAAAEBrbNgJuDcYOCg5UAAFYBaoNyYAPAAP9oAgAAAQODhYOVAAAAAQEBg40AAACAlmADwAEAAgAAXAE+AAa2zoCbg5qDq4O0AACCjAFqg5tgA8AA/2gCAAABA4Owg7QAAAAAAAAAXAE+AAa2z4Cbg7mDzIPeAAAjAWqDumADwAD/aAIAAAEDg9SD3gAAAAAAAABgA8ABAAIBSoPaARaD2i6AvbbLBrbQgJuEKYQ5hLYAAYFyAAAAAQOER4S2AAAAAwMDhFYAAACAvWADwAEAAgCEYwAAAIKTYAPAAQACAIR5AAAAgpRgA3UAAGADtskBPgFKhIUBH4SQttIBAAEkhLEFgISbwBviPieBaoGEocAb4kwngWqChKzAG+JaAAAAG+F+ABvhuAAb4eUAG+IgABvimQAAAAQCttOAm4S7hMGFwAOv0gAAAWABwAD/aAABYAGAiwEEttWAm4T6hP0JgKwAYAPAAQCDAAEFttuAm4UChQKFGgAAAAOFEIUaAAAAAQEBhRYAAASArGADwAEAgwAAYAO20wE/AggBttWAAMAb4v4JAYUCwAD/fgAAAAADBrbXgJuFH4UwhWMAAIKOAWqFIGADwAD/aAIAAAEDhTWFYwAAAAMBA4VAAAAAgo9dA8AA/r8BYAPAAP4bAIVNAAAAamADwAD+GwFqhVVgA8AA/hsJhVwAAACCkGADwAD+GwFqAGADwAD/JXkAXAE+AAa22ICbhWiFeYWCAACCjAFqhWlgA8AA/2gCAAABA4V+hYIAAAAAAAAAXAE+AAa22YCbhYeFmoW+AAAjAWqFiGADwAD/aAIAAAEDhaKFvgAAAAAAAABgA8ABAAIBSoWoASSFvgMnr9MWhbkugKy21SeDJgAAG+MrABvjmwAb48gAG+QNAAAAAwAAAAGAmwAb5CUAG9/cABvhBQAb4rIAG+QiAAAAAwAb5CUAAAAAAAIGttyv1ICcAAAFgQAAAL3+AACBJAAAgPsAAQEBgu+BVQAApWIAAIFtAAC2/gABAQGk6oGYAAC3CwABAQGk7QAAAAICtt2AnIIPgh6KIgeHbwAAAWABwAD/aAAAAAEFtvAAAAAABAAAAwAAAAAAAAAAAGADtt0BPwEJAQDAAP9+AAAAAA8Gtt+AnII1gkuCUgECegAAAAEDglKCUgAAAAAAAABgA4EIAAa24oCcgpaCm4KnAAKWzQAAAAEDgp6CpwAAAAEBAYKfAAAAIlsAAFwABrbjgJyCrIKsgtcAAqXDAAAAAQOCuYLXAAAAAgICgsQAAAClr2ADtw8Ags8AAAAiWwAAWwAGtuSAnIO8g8eD6AACpbEAAAABA4PYg+gAAAABAQGD4wAAAIPzYAO3DwAAYAO2/wAGtuWAnIPtg/KEnAAAr9UAAAABA4QEhJwAAAADAgOEDwAAAKWvYAO3DwCEJgAAAKWwYAOlZQCEPgAAAFtdA8AA/vECW1sBaoRKXQPAAP7xAltbwADHcABcAT4BPRyEWy6lsgEAARyEZy6lrgMAA4CEdcAb5Z2BhIDAG+WpgoSNwBvltQC27QC25ga25oCchKGEpoURAAKlsgAAAAEDhLGFEQAAAAIBAoTEAAAAImADtvEAhOwAAACW/l0DwAD+vwFgA7bxAWqE9F0DwAD+vwFgA7bxwADHfwBcAAa254CchRaFG4XJAAClRQAAAAEDhS+FyQAAAAMCA4U6AAAApa9gA7cPAIVRAAAApbBgA6VlAIVpAAAAW10DwAD+8QJbWwFqhXVdA8AA/vECW1vAAMdwAFwBPgE9HIWGLqH6AQABHIWULqWuAwADgIWiwBvmd4GFrcAb5oOChbrAG+aPALbtALboBrbogJyFzoXThkAAAqH6AAAAAQOF4IZAAAAAAgEChfMAAAAiYAO28QCGGwAAAJb+XQPAAP6/AWADtvEBaoYjXQPAAP6/AWADtvHAAMd/AFwABrbpgJyGRYZKhvIAAK/WAAAAAQOGW4byAAAAAwIDhmYAAAClr2ADtw8Ahn0AAAClsGADpWUAhpUAAABbXQPAAP7xAltbAWqGoV0DwAD+8QJbW8AAx3AAXAE+AT0chrIupbQBAAEchr0upa4DAAOAhsvAG+dRgYbWwBvnXYKG48Ab52kAtu0AtuoGtuqAnIb3hvyHZgACpbQAAAABA4cGh2YAAAACAQKHGQAAACJgA7bxAIdBAAAAlv5dA8AA/r8BYAO28QFqh0ldA8AA/r8BYAO28cAAx38AXAAGtuuAnIdrh36H0QACpbUBaodsYAPAAPwIhmoAAAEDh4iH0QAAAAMCA4eTAAAAg/NgA7cPAIelAAAAgfVgA6VlAIe7AAAAW10DwAD+8QJbWwFqh8ddA8AA/vECW1vAAMdwAFwABrbsgJyIVIhUiHsAAqWIAAAAAQOIZoh7AAAAAgICiG4AAACWe2ADvf8AiHcAAACBpmEDAFsAAFsABrbtgJyIgIiSiO8AAqWuAAAAAQOIn4jvAAAAAwIDiKoAAAClr2ADtw8AiMEAAAClsGADpWUAiNkAAABbXQPAAP7xAltbAWqI5V0DwAD+8QJbW8AAx3AAYAO28QAGtuCAnIlEiU2JXQECpbcAAAABA4ldiV0AAAAAAAAAYAPAAPxVAAa27oCcieGJ5oogAAClmgAAAAEDifeKIAAAAAMDA4n/AAAAImADwAEAAgCKCAAAAIHtWwCKEwAAAIZcWwAAXAE+AAAAG+TOABvk8QAb5RoAG+VPABvlfwAb5ggAG+ZZABvm4gAb5zMAG+e8ABvoDQAb6HEAG+iqABvpBgAb6SwAG+luAAAADwK28YCciiWKK4rZA4IdAAABYAHAAP9oAAADBLbzgJyKUopcCZcCAGADtv8ABLb0gJyKcIp5CaWvAGADtw8ABLb1gJyKi4qSCSIAYAOl2QABBbb3gJyKl4qXitcAAAADiqiK1wAAAAMDA4quAAAElwJgA7b/AIq/AAAEpa9gA7cPAIrPAAAEImADpdkAAGADtvEBPwQIAbbzgADAG+ocCAG29IEAwBvqKAgBtvWCAMAb6jQJAYqXwAD/fgAAAAAAAAAb6nIAAAAAAAAAAYCcABvqfgAb5IwAG+mzABvqewAAAAIAG+p+AAAAAAACBrb4r9eAnQAAAYECAAC3CwAAAAAAAAABBLb6gJ2CIoI0BK/YAGADwAD8VQEqAga2/ICdgpaCloMcAAGk5wAAAAEDgqWDHAAAAAEBAYKtAAAAImADwAEAAgAAWwE+AUAagsG2+oLBgssBHoLTtv0CAAJqgtxgA7cPwADHQiSDGAInr9mAgxDAG+rrAAa2/YCdhZiFnYcoAAGk6AAAAAEDhaWHKAAAAAIBAoWwAAAApa9gA7cPAIXDAAAAImADwAEAAgFqAGADwAD/JXkAYAPAAPxVAT4CSYZBHIZPgIZFwBvrSEgBAAErAMAA/3U+AT0whl4fhmi3IAIAAmqGgmADtw/AAMecJ6/aAD89MIbvH4b5tyACAAKAhxPAG+tIgYcewBvrVAABgJ0AG+vEABvqtQAAAAAAG+rNABvrKgAb68QAAAACAAIGtv6v24CeAAABgQQAALcLAAEBAaTtAAAAAQK2/4CegS2BM4NCA6TqAAABYAHAAP9oAAFgAbcPAwS3AYCegWGBZAmArABgA8ABAIMABLcCgJ6BcoF3CYKYAGADwAD+GwAEtwOAnoGFgYgJgpAAYAPAAP4bAAEFtwqAnoGNgZOBvQEAAAOBnYG9AAAAAwMDgaMAAASArGADwAEAgwCBrQAABIKYYAPAAP4bAIG5AAAEgpBgA8AA/hsAAGADtv8BPwQIAbcBgADAG+xzCAG3AoEAwBvsgQgBtwOCAMAb7I8JAYGTwAD/fgAAAAADBrcFgJ6BwoHWgisBAIPGAWqBw2ADwAD/aAIAAAEDgd+CKwAAAAAAAABgA8AA/hsBPgFKgeUBHIIUHIH+HIHvNw2DjQEAARaB9RaB8S6ArLcBg8bAAQCeAMAA/0NkAQABHIIDNxGDjQEAARaCCxaCBS6CmLcCg8bAAP9gAMAA/0MAwAD/QWQBAAEcghk3E4ONAQABFoIfFoIbLoKQtwODxsAA/2AAwAD/QwDAAP9BBrcHgJ6CMIJKgvoDAEgBaoIxYAPAAP9oAgAAAQOCTIL6AAAAAQEBgk0AAACD21sAAGADwAD8VQE+A0mCWh6CXsAA9/wCAAIugIJuwBvtpQBKgnYBKT9JgochJYKRgIKLwBvtpWADtv9KgqEBKj9KgrMBIiIcgr4WgrougKy3AUgBAAEWgseAgsHAG+2lgKwAAMABAKoAHILUFoLOLoKYtwJIAQABFoLdgILXwBvtpYKYAADAAP8/AByC6haC5i6CkLcDSAEAARaC84CC7cAb7aWCkAAAwAD/Pwa3CICegv+DEoNAAAAjAWqDAGADwAD/aAIAAAEDgxqDQAAAAAAAAABgA8ABAAIBSoMgASSDQAcnr9wWgy0ugKy3ASeBixaDMy6CmLcCJ4GLFoM7LoKQtwMngyYAABvs0AAb7X4AG+5XABvusgAAAAMAAAABgJ4AG+7KABvr/wAb7scAAAABABvuygAAAAAAAga3C6/dgJ8AAAAAAAADArcPgJ+BmoGpgbQHpO0AAAFgAcAA/2gAAAABBbcRAAAAAAQAAAMAAAAAAAAAAABgA7cPAT8BCQEAwAD/fgAAAAAAAAAb7zcAAAAAArcSgJ+Bt4G9gk4Dr94AAAFgAcAA/2gAAWABtw8BBLcUgJ+B9oH6CYC9AGADwAEAAgABBbcYgJ+B/4IFgiIBAAADgheCIgAAAAEBAYIdAAAEgL1gA8ABAAIAAGADtxIBPwIIAbcUgADAG++MCQGCBcAA/34AAAAAAQa3FoCfgieCOoJMAAAjAWqCKGADwAD/aAIAAAEDgkKCTAAAAAAAAABgA8ABAAIBSoJIARaCSC6AvbcUAAAb77kAG+/0AAAAAQK3GYCfhFeEXYVHA6TuAAABYAHAAP9oAAACBLcbgJ+Ei4SPCYPzAGADtw8ABLccgJ+EoISnCSIAYAPAAQACAAEFtyCAn4SrhKuE3QAAAAOExITdAAAAAgIChMoAAASD82ADtw8AhNUAAAQiYAPAAQACAABgA7cZAT8DCAG3G4AAwBvwWggBtxyBAMAb8GYJAYSrwAD/fgAAAAABBrcegJ+E4oT1hUUAACMBaoTjYAPAAP9oAgAAAQOE/YVFAAAAAAAAAGADwAEAAgFKhQMBJAACJ6/fIyEchSgWhSAuIrccSAEAASsAwAEAESSFPwIng1sWhTYuIrccJwABYAPAAQACAAAb8JwAG/ECAAAAAQACBLcNgJ+DEoNdBqTrAGADtw8BaoM4YAO3EsAAx5wEtw6An4QVhFQGpOwAYAO3DwFqhDNgA7cSwADHQgABgJ8AG/FMABvu9QAb70AAG/ABABvxDwAAAAMAG/FMAAAAAAACBrchr+CAoAAACoF1AACksQAAgY4AALb4AAEBAa/YgcYAAIHgAACB4gAAwABcDQAAgfgBAMAAXDoAAIIYAQDAAFzdAACCNQEAwABc/AAAglIBAMAAXRwAAIJnAQDAAFwNAACCfAEAwABdwgAAJMAAXA/AAFwSwABcGcAAXBDAAFwTwABcFMAAXBrAAFwdwABcK8AAXBvAAFwcwABcPMAAXD/AAFxgwABchsAAXLHAAFw+wABcycAAXNPAAFzewABc/cAAXSHAAF0jwABdJ8AAXTrAAF0/wABdRMAAXUvAAF1qwABdcMAAXXrAAF2jwABdJMAAXSXAAF0mwABdwwADtyOAoISor+EAAF4DAAEBAVsAAVcDtyMAWwABhLMAAACIe1sAALckgKCGRK/iAABeAwACAgJbYQMAWwABVwO3JABbAAKGUwAAAIh7WwCGVgAAAIGmYQMAWwAAtyWAoIjGr+MAAF4DAAMDA2ADtt1gA7cPYAPAAQACAAFXA7clAFsAA4jpAAAApS5gA7bdAIj9AAAAg/NgA7cPAIkKAAAAr+RgA8ABAAIAAAECtzmAoIPag+CEOgOv5QAAAWABggQAAAEEtzuAoIQjhDgJg+MBaoQLYAPAAP9oAmADwAEAAgEngNkBBbc9AAAAAAQAAAMAAAAAAAAAAABgA7c5AT8BCQEAghQAAAAAAAAAG/N5AAAAAAAEBLcngKCDS4NlBq/mAGADwAD8VQFqg2FgA8AA/FV3BLcpgKCET4R1BK/ntyEAYAO3OQEfhGK3PQAAAAAEtyqAoIqgisMEr+i3IQBdA8AA/7MBYAPAAP9oAR6KtsAAwyEAAWADwAD/aAAABLcrgKCLHIsyBK/pAGADwAD8VQEqCga3LYCgg6mDroPXAAGv6gAAAAEDg72D1wAAAAAAAABcAT4BPRuDxLb6KQa3NoCghQiFF4WSAQGv6wAAAAEDhSKFkgAAAAAAAABeAwABAQFbAAFXA7cjAFsBPgI9HoUmty0AAAAASoV+AWqFhWEDAVtbwADn4Aa3L4CghbmFuYYNAAGv7LchAAAAAQOFxIYNAAAAAQEBhcUAAACIe1sAAFsBPgFJhcxqhdBgA8AA/FV3PR6F5cAA9/4BAAEkhgoCFoX7GoXutymD4oILgIYIwBv0mAA/Brc3gKCHP4dSh5IBAa/tAAAAAQOHYYeSAAAAAAAAAF4DAAICAlthAwBbAAFXA7ckAFsBPgI9Hodlty0AAAAASod6AWqHgWEDAlthAwBbW8AA5+MGtzCAoIe9h72IRgABr+63IQAAAAEDh8yIRgAAAAICAofNAAAAiHtbAIfQAAAAgaZhAwBbAABbAT4EPRyH4xqH2bc2IAEAASSH7gInr++Ah+zAG/VKAABOh/eH/gAAgXZbARyIDRqIALcpg+YBAAGBiBnAG/VTAIISPRyIKRqIH7c2IAEAASSIMgInr/CAiDDAG/VKAABKiDcBgog+wBv1gga3MoCgiG+Ib4iTAAGv8QAAAAEDiHmIkwAAAAAAAABbAT4BPR6IgLctAAAAAAa3OICgiUaJVYmNAQGv8gAAAAEDiWCJjQAAAAAAAABeAwADAwNgA7bdYAO3D2ADwAEAAgABVwO3JQBbAT4CPR6JZLctAAAAAEqJeQFqiYBhAwNgA7bdYAO3D2ADwAEAAlvAAOfmBrcxgKCJs4mzil0AAa/ztyEAAAABA4m+il0AAAADAwOJ0gAAAKUuYAO23QCJ5gAAAIPzYAO3DwCJ8wAAAK/kYAPAAQACAABbAT4BPRyKFYCKBcAb9n2ltQMAA4GKIMAb9olqijJgA6VlwADHiDKKO1tbASeBsiSKWQInr/SCikzAG/aVALbrBrczgKCMpYyljfgAAa/1AAAAAQOMqo34AAAABAMDjLAAAACv9mADwAD8VQCMwAAAAIPFYAPAAP9oAIzPAAAAImADwAEAAgABjN4AAACv92ADwAD8VQFqAGADwAD/JXlbAT4GSYzvIYCM9MAb9wJKjP0BgY0EwBv3ED89HI0eGo0OtypWAQABgY0iwBv3EADAAP/ATo00jTgAAINZYAPAAQACASSNZgYnr/gWjUuBjUTAG/cQg8bAAP97J4LqgY1WwBv3ECeC6oKNXsAb9x5JjWocjXmDjW7AG/csSAEAASsAwAD/dT2LjYLAG/csGo2Ptys/SY2hg42lwBv3LD4BPRyNvBqNt8AAXBIgAQABhI29wBv3eAAAPgE9HI3cGo3StzYgAQABhI3dwBv3eAAASo3pAYGN8MAb9xAGtzSAoI8wjzWQvQABr/sAAAABA48+kL0AAAADAQGPRgAAAIPFYAPAAP9oAAKPVgAAACJgA8ABAAIBagBgA8AA/yV5j2QAAACv92ADwAD8VQFqAGADwAD/JXlgA8AA/FUBPgJJj3Ucj4kaj3m3KoMcAQABgI+SwBv4PADAAP+/PgJJj6EhHI+tgY+lwBv4S0gBAAErAMABABE+A06PxY/JAACDWWADwAEAAgEkj/kGJ6/8Fo/egI/XwBv4PIPGwAD/eyeC6oCP6cAb+DwnguqBj/HAG/hLSZABHJAQgpAFwBv4YUgBAAErAMAA/3U9ipAZwBv4YRqQJrcrP0mQPIKQQMAb+GE+AT0ckFsakFbAAFwSIAEAAYOQXMAb+LoAAD4BPRyQgxqQebc2IAEAAYOQhMAb+LoAAD9KkJwBKT9KkK8BKgGAoAAb+WEAG/MaABvzggAAAAEAG/QDABv0LQAb9HgAG/TXABv1KgAb9csAG/X4ABv2XQAb9uQAG/geABv5YQAAAAoAAga3Pq/9gKEAABCA/QAApLEAAIETAAC3UgAAgTEAAKR2AACBTQAAvIUAAQEBpPWBfgAAvnoAAIGVAAC9/gAAgbYAAMAAQnsAAIHUAADAAEMwAACB+QAAwABDzgAAghsAAMAAXekAAII+AADAAEQQAACCZgAAwABeGgAAgpIAAMAAXlAAAIK9AADAAGHHAACC1AAAwABM8QAAgwIAAMAAToEAAAAAAAECtz+AoYN8g4uMzAev/gAAAWABwAD/aAAAAAEFt1EAAAAABAAAAwAAAAAAAAAAAGADtz8BPwEJAQDAAP9+AAAAAA4Gt0GAoYOfg7aDuwEClskAAAABA4O7g7sAAAAAAAAAXQPAAP6/AWADpHcABrdCgKGDwIPVg+UBAqVQAAAAAQOD5YPlAAAAAAAAAGADwABDzwAGt0OAoYPqg/6ECQECr/8AAAABA4QJhAkAAAAAAAAAYAPAAF4bAAa3RYChhEKET4ShAAKlhQAAAAEDhGGEoQAAAAICAoR2AAAApUBgA8AATsgAhJIAAACwAGADvTIAAGADwABOhQAGt0aAoYVNhVKFgAACpUkAAAABA4VmhYAAAAABAQGFdAAAAKVAYAPAAE6FAABcAAa3R4ChhgaGFIZgAAKlSwAAAAEDhiKGYAAAAAEBAYZFAAAApT5gA8AAQqEAAGADwABD+gAGt0iAoYavhr+HiQACpXIAAAABA4bUh4kAAAAFBQWG6QAAAJblYAOkdwCHAgAAAKVAYAPAAE6FAIcwAAAApXBgA8AAQqEAh1wAAACwAWADwABD+gCHegAAAKVNYAO3sAAAYAPAAF3qAAa3SYChh8SHyYfsAAKlegAAAAEDh9WH7AAAAAEBAYfkAAAAsAFgA8AAQ/oAAFwABrdKgKGILIg3iJYAArACAAAAAQOIR4iWAAAAAgICiFwAAACW5WADpHcAiHwAAACwA2ADwABDTgAAYAPAAGHhAAa3S4ChiOmI9IkxAAKlsQAAAAEDiQWJMQAAAAICAokQAAAApa9gA7cPAIkiAAAApTNgA73/AABgA7b/AAa3TIChiW+JfYnaAAKwBAAAAAEDiZCJ2gAAAAICAomlAAAApUBgA8AAToUAicYAAAClbWADwABEGwAAYAPAAEKcAAa3TYChizaLQ4t9AAKwBQAAAAEDi1eLfQAAAAEBAYt7AAAAgaZhAwFgA74lXAAAYAPAAF8HAAa3ToChi8aLy4vyAAKwBgAAAAEDi9+L8gAAAAEBAYvrAAAAg0pgA8AAXqUAAFwABrdPgKGMRIxIjMoAAqV3AAAAAQOMV4zKAAAABAQEjGUAAAClQGADwABOhQCMfwAAAKV4YAPAAEQRAIyhAAAApUpgA8AAQ/oAjL0AAACldGADwABM+AAAYAPAAP4bAAAAG/qOABv6uQAb+t8AG/sFABv7RQAb+3QAG/uoABv8EAAb/D8AG/x/ABv8uwAb/P0AG/0zABv9YgAb/cAAAAAOAAAAAYChABv+BAAb+kwAG/4BAAAAAQAb/gQAAAAAAAIGt1KwB4CiAAAYgPsAAMAAYfOChQEBAZqbgTwAAKSxAACBVQAAuYYAAIF3AADAAGIFAACBmgAAvIUAAIG6AAC9/gAAgd4AAMAAY8cAAQEChoSGkYIcAAC/HwAAgk0AAMAAQnsAAIJuAADAAEMwAACClgAAwABlW4KFAIK0AADAAEPOAACC2QAAwABlkAAAgvwAAMAAXhoAAQEBsAiDOAAAwABoagAAg1oAAMAAXlAAAIOIAADAAGHHAACDogAAwABozgAAg8UAAMAATKYAAIPpAADAAGkyAAEBBLAJsAqwC7AMhDkAAMAATgQAAQEDpQmlCrANhKIAAMAAae4AAITBAACB4AAAhN0AAMAAToEAAAAAABECt1OAooT2hPyItgOwDgAAAWABwABOBwAAAQS3VoCihPwABJadt1IAWwExAFsBGgC3WAEFt2aAooUihSiFNwEAAAOFNYU3AAAAAAAAAGADt1MBPwEJAYUowABOFQAAAAALBrdYgKKFPIVEhaEEQbAPAAAAAQOFZIWhAAAAAQEBhXAAAACDSmADwABepQAAYAO3UwE9NQAAAACCcVsBGgC3dhMAAAa3WoCihaaFq4YPAACwEAAAAAEDhbqGDwAAAAEBAYXEAAAAhEBgA8AAXlYAAFwBPgE9MIXQH4XawAD9rQEAASewEQAGt1yAooYUhjuGjgEAsBIAAAABA4Zbho4AAAAAAAAAXQPAAP59AV0DgfkCYAPAAGPLYAPAAGPLAT4BSoZhAWqGaF0DwAD+vwFdA4H5AmADwABjy2ADwABjy8AA5+kGt12AooaThqiGyAEAsBMAAAABA4a1hsgAAAAAAAAAXQPAAP59AWADwAEAAgFKhrgBaoa4XQPAAP6/AWADwAEAAoM5BrdegKKGzYbshzIBALAUAAAAAQOHB4cyAAAAAAAAAF0DwAD+fQFdA8AA/7MBYAO+EwE+AUqHDQFqhxRdA8AA/r8BXQPAAP+zAWADvhPAAOf8BrdfgKKHN4dAh1gBALAVAAAAAQOHUIdYAAAAAAAAAGADwAD8VQFKh1MBKga3YICih12Hd4ecAQCwFgAAAAEDh4SHnAAAAAAAAABdA8AA/n0BYAO+QQFKh4cBaoeHXQPAAP6/AWADvkHAAOgJBrdhgKKHoYfEiAEBALAXAAAAAQOH2ogBAAAAAAAAAF0DwAD+fQFgA8AAaSIBSofjAWqH410DwAD+vwFgA8AAaSLAAOgPBrdigKKIBogjiD4BALAYAAAAAQOIM4g+AAAAAAAAAF0DwAD+fQFgA8AAaJYBSog2AWqINl0DwAD+vwFgA8AAaJbAAOgXBrdjgKKIQ4hgiHkBAKkQAAAAAQOIboh5AAAAAAAAAF0DwAD+fQFgA746AUqIcQFqiHFdA8AA/r8BYAO+OsAA6B8Gt2SAooh+iJWItAEAsBkAAAABA4ipiLQAAAAAAAAAXQPAAP59AWADwABMuAFKiKwBaoisXQPAAP6/AWADwABMuMAA6CUAABv/lgAb/9kAHAAcABwAeQAcALwAHAENABwBOAAcAXkAHAG+ABwCAwAcAkQAHAKJAAAACwK3Z4CiiLmIv6r+A7AaAAABYAHAAE4eAAFgAbdTCwS3aYCiiR6JNAaD7ABgA8ABAAIBaokkYAPAAQACwADoLQS3aoCiiViJXgmCagFqiTpgA8AA/2gCYAO+JQAEt2yAoomAiaAYsBy3UgBdA8AA/7MBXQOB+QJgA8AAY8tgA8AAY8sABLdtgKKJsIm9GLAdt1IAXQPAAP+zAWADwAEAAgAEt26AoonYifMYsB63UgBdA8AA/r8BXQPAAP+zAWADvhMABLdvgKKJ/IoUGLAft1IAYAPAAPxVASoEt3CAoootijoYsCC3UgBdA8AAae8BYAO+QQAEt3GAoopYim4YsCG3UgBdA8AA/7MBYAPAAGkiAAS3coCiioeKlxiwIrdSAF0DwAD+vwFgA8AAaJYABLdzgKKKr4q9GLAjt1IAXQPAAP+zAWADvjoABLd0gKKKz4rjGLAkt1IAXQPAAP+zAWADwABMuAACBbePgKKK6IroiwMAAAADivaLAwAAAAEBAYr8AAAEgmpgA74lAABgA7dnAT8KCAG3dCsIAbdzKwgBt3IrCAG3cSsIAbdwKwgBt24rCAG3bSsIAbdsKwgBt2qAAMAcBD4JAYrowABOMgAAAAAFt5CAoosIiwiNIwCVpwADix+NIwAAAA4ODossAAAEgmpgA74lAItKAAAAsCVdA8AA/7MBYAPAAGlAAItsAAAAsCZdA8AA/7MBYAPAAGlyAIuLAAAAsCddA8AA/7MBYAPAAGm8AIusAAAAsChdA8AA/7MBYAPAAGnaAIvFAAAEsBxdA8AA/7MBXQOB+QJgA8AAY8tgA8AAY8sAi/IAAASwHV0DwAD/swFgA8ABAAIAjAwAAASwHl0DwAD+vwFdA8AA/7MBYAO+EwCMNAAABLAfYAPAAPxVAIxRAAAEsCBdA8AAae8BYAO+QQCMawAABLAhXQPAAP+zAWADwABpIgCMjgAABLAiXQPAAP6/AWADwABolgCMqwAABLAjXQPAAP+zAWADvjoAjMYAAASwJF0DwAD/swFgA8AATLgAAGADt2cBPwsIAbdqgADAHASqCAG3bIUAwBwFCggBt22GAMAcBSoIAbduhwDAHAU/CAG3bxQAwBwFWQgACAG3cBQAwBwFZwkACAG3cRQAwBwFegoACAG3chQAwBwFjwsACAG3cxQAwBwFpAwACAG3dBQAwBwFtw0ACQCM6sAATjMEAASBjPPAHAS2go0AwBwEy4ONDMAcBOCEjRbAHAT1ABYGt3aAoo0ojTCWcQQBsA8AAAABA41RlnEAAAABAQGNXQAAAINKYAPAAF6lAABgA7dnAT4SPRyNcoCNa8AcBouCmAEAAWqNeGADwAEAAsAA6C0AwABep06Nj42WAACCamADviUBHI2fgI2YwBwGi6zTAAAAAMAAXtxOjcGNzQAAsCVdA8AA/7MBYAPAAGlAATUAAAABAF0DwAD+vwFgA8AAaUABHI3fgI3PwBwGi7ApAgFgA8AAaUABNI3oA43ojhMAAAAAAAAAYAPAAGlAAUqN7gEejfnAAGlIAQABgI4MwBwGiwABsCopwABesiMcjj6CAMAcBv1IAQABKwAAKxyOPoIAwBwG/ZVxAAAAAMAA/pQBXQPAAP+zAWADwABpQE6OWo5lAACwJl0DwAD/swFgA8AAaXIBNQAAAAEAXQPAAP6/AWADwABpcgEcjneAjmfAHAaLsCkCAWADwABpcgE0joADjoCOqgAAAAAAAABgA8AAaXIBSo6GAR6OkMAAaYQBAAGAjqPAHAaLAAGwKinAAF6yIxyOyYMAwBwHpEgBAAErAAArHI7JgwDAHAeklXEAAAAAwAD+lAFdA8AA/7MBYAPAAGlyTo7jjuwAALAnXQPAAP+zAWADwABpvAE1AAAAAQBdA8AA/r8BYAPAAGm8ARyO/oCO7sAcBouwKQIBYAPAAGm8ATSPBwOPB48vAAAAAAAAAGADwABpvAFKjw0BHo8VwABpxAEAAYCPKMAcBosAAbAqKcAAXrIjHI9OhADAHAhLSAEAASsAACscj06EAMAcCEuVcQAAAADAAP6UAV0DwAD/swFgA8AAabxOj2yPeQAAsChdA8AA/7MBYAPAAGnaATUAAAABAF0DwAD+vwFgA8AAadoBHI+LgI97wBwGi7ApAgFgA8AAadoBNI+UA4+Uj8AAAAAAAAAAYAPAAGnaAUqPmgEej6bAAGnfAQABgI+5wBwGiwABsCopwABesiMcj+uFAMAcCPJIAQABKwAAKxyP64UAwBwI8pVxAAAAAMAA/pQBXQPAAP+zAWADwABp2k6QFpA2AACwEl0DwAD/swFdA4H5AmADwABjy2ADwABjywE1AAAAAQBdA8AA/r8BXQOB+QJgA8AAY8tgA8AAY8sBHJBHgJBAwBwGi7ApAgFdA4H5AmADwABjy2ADwABjywE0kFADkFCQnwAAAAAAAABdA4H5AmADwABjy2ADwABjywE+AUqQWwEfkGaCAwICYAPAAGPLYAPAAGPLAhyQcoCQa8AcBouHJAAAAADAAF7PHJCJgJCCwBwGi4ckAAAAAMAAXs8AAbAqKcAAXrIjHJC1hgDAHAmkSAEAASsAACsckLWGAMAcCaSVcQAAAADAAP6UAV0DwAD/swFdA4H5AmADwABjy2ADwABjy06QzpDbAACwE10DwAD/swFgA8ABAAIBNQAAAAEAXQPAAP6/AWADwAEAAgEckOSAkN3AHAaLsCsBAAABsCopwABeuCMckQSHAMAcCqRIAQABKwAAKxyRBIcAwBwKpJVxAAAAAMAA/pQBXQPAAP+zAWADwAEAAk6RKJFDAACwFF0DwAD+vwFdA8AA/7MBYAO+EwEckUyAkUXAHAaLsCkCAV0DwAD/swFgA74TATSRVQORVZGKAAAAAAAAAF0DwAD/swFgA74TAT4BSpFgARyRfByRboCRZ8AcBouwLAABYAO+EwAAwABe2ZVxAAAAAMAA/pQBsCopwABesk6RqZG5AACwFWADwAD8VQEckcKAkbvAHAaLsC0AAAAAwABes06R1pHoAACwLmADwAD+GwEckfGAkerAHAaLsC8AAAAAwABetU6SG5IoAACwFl0DwABp7wFgA75BASMhHJI8FJIqwBwLqgoASAEAASsAwAD/Px+SUsAAaiEBAWADvkEBFJJkwBwLqgoAACsBXQPAAGnvAWADvkFOkqWSuwAAsBddA8AA/7MBYAPAAGkiATUAAAABAF0DwAD+vwFgA8AAaSIBHJLNgJK9wBwGi7ApAgFgA8AAaSIBNJLWA5LWkwsAAAAAAAAAYAPAAGkiAUqS3AEekvHAAGkoAQABgJMEwBwGiwABsCopwABesiMckzYUAMAcDDcMAEgBAAErAAArHJM2FADAHAw3DACVcQAAAADAAP6UAV0DwAD/swFgA8AAaSJOk1iTaAAAsBhdA8AA/r8BYAPAAGiWARyTcYCTasAcBouwKQIBYAPAAGiWATSTgwOTg5OyAAAAAAAAAGADwABolgFKk4kBHpOYwABopwEAAYCTq8AcBosAAbAqKcAAXrJOk+iT9gAAqRBdA8AA/7MBYAO+OgE1AAAAAQBdA8AA/r8BYAO+OgEclAeAlADAHAaLsDABAWADvjoAAbAqKcAAXt4jHJQ3FADAHA1ADgBIAQABKwAAKxyUNxQAwBwNQA4AlXEAAAAAwAD+lAFdA8AA/7MBYAO+Ok6UUpRmAACwGV0DwAD/swFgA8AATLgBNQAAAAEAXQPAAP6/AWADwABMuAEclHiAlGjAHAaLsCkCAWADwABMuAE0lIEDlIGUqgAAAAAAAABgA8AATLgBSpSHAR6UkMAATO4BAAGAlKPAHAaLAAGwKinAAF6yIxyUyRQAwBwNuQ8ASAEAASsAACsclMkUAMAcDbkPAJVxAAAAAMAA/pQBXQPAAP+zAWADwABMuD0clN2AlNbAHAaLgpABAAFqlOFgA8ABAALAAOgtAMAAXqhKlOsBH5T2t5AOAA6BlRfAHAbEgpUnwBwG5oOVPMAcB42ElVDAHAg0hZViwBwI24aVeMAcCYKHlaHAHAqNFJW3wBwLAggAFJXbwBwLhgkAFJX0wBwLzgsAFJYKwBwMIAwAFJYpwBwMyw0AFJZCwBwNKw4AFJZZwBwNog8AAAa3eICilnaWh5whAACwEAFqlndgA8AA/2gCAAABA5aWnCEAAAABAQGWoAAAAIRAYAPAAF5WAABcAT4QPRyWsYCWrMAcDxOCmAEAAWqWt2ADwAEAAsAA6C0AwABeWz0clsaAlsHAHA8TrSIBAAEmltIBFpbSLoJqt2pgA8AAkGYAwABeiT0cluSAlt/AHA8TiHgDAWADwABpQAIWlu4usCXAAE4nNJb7A5b7lygAAAABAQGXBwAAALAxYAPAAGlAAABcAUqXDwEclxOBlw/AHA+dsBABAAGAlyPAHA8TAMAAaUoBmAgpwABeXz0cl02Al0jAHA8TiHgDAWADwABpcgIWl1cusCbAAE4pNJdjA5djl48AAAABAQGXbgAAALAxYAPAAGlyAABcAUqXdgEcl3qBl3bAHBADsBABAAGAl4rAHA8TAMAAaYABmAgpwABeXz0cl7SAl6/AHA8TiHgDAWADwABpvAIWl74usCfAAE4oNJfIA5fIl/IAAAABAQGX0QAAALAxYAPAAGm8AABcAUqX2QEcl92Bl9nAHBBpsBABAAGAl+3AHA8TAMAAadMBmAgpwABeXz0cmBeAmBLAHA8TiHgDAWADwABp2gIWmCEusCjAAE4qNJgvA5gvmF0AAAABAQGYPAAAALAxYAPAAGnaAABcAUqYRAEcmEiBmETAHBDPsBABAAGAmFjAHA8TAMAAaeEBmAgpwABeXz0cmIKAmH3AHA8TiHgDAV0DgfkCYAPAAGPLYAPAAGPLAhaYpi6wHLdSt2w0mNADmNCZIgAAAAEBAZjRAAAAqv9dA4H5AmADwABjy2ADwABjywAAYAPAAP8lAT4CPRyY5ICY38AcDxOHFAEAARaY94GY8sAcEUCB14H7AMAAXnw9HJkGgJkBwBwPE4cUAQABFpkZgZkUwBwRQIJOgfwAwABefAGYCCnAAF5fPRyZP4CZOsAcDxOwMgIAARaZTC6wHbdSt20BmAgpwABeZT0cmXaAmXHAHA8TiHgDAV0DwAD/swFgA74TAhaZgC6wHrdSt24WmaKAmZ3AHA8TsDPAAF6GAZgIKcAAXl89HJnTgJnOwBwPE7A0AQABFpndLrAft1K3bwDAAF5gPRyZ+YCZ9MAcDxOwNQEAATUAAAABAF0DwABp7wFgA75BARaaCC6wILdSt3AjHJoXgQDAHBJASAEAASsAACsWmheBAMAcEkCAlsAAafkBYAPAAP4bAMAAXmI9HJoogJojwBwPE4h4AwFgA8AAaSICFpo7LrAht1K3cTSaWwOaW5qyAAAAAQEBmnEAAACwNmADwABpIgAAXAFKmo8BHJqdgZqPwBwStrAQAQABgJqtwBwPEwDAAGkqAZgIKcAAXl89HJrXgJrSwBwPE4h4AwFgA8AAaJYCFprhLrAit1K3cjSa+wOa+5s2AAAAAQEBmwsAAACwN2ADwABolgAAXAFKmxgBHJshgZsYwBwTHLAQAQABgJsxwBwPEwDAAGipAZgIKcAAXl89HJtbgJtWwBwPE7A4AgABFptoLrAjt1K3cwGYCCnAAF6LPRybk4CbjsAcDxOIeAMBYAPAAEy4AhabnS6wJLdSt3Q0m7sDm7ub8AAAAAEBAZvFAAAApVJgA8AATLgAAFwBSpvSARyb24Gb0sAcE6SwEAEAAYCb68AcDxMAwABM1AGYCCnAAF5fPRycFYCcEMAcDxOCkAEAAWqcGWADwAEAAsAA6C0AwABeXAa3eYCinCacN52cAACwOQFqnCdgA8AA/2gCAAABA5w8nZwAAAABAQGcUAAAAIdQYAPAAE5rAABcAT4EPRycahacXy6wJsAATimD/QEAATSccgOccpyoAAAAAQEBnH0AAACwMWADwABpcgAAXAFKnIUBHJyNgJyFwBwUJrA6AgACFpycLoJqt2qBnKTAHBRaAMAATm0AwAD+jT0cnLsWnK8usCXAAE4ng/0BAAE0nMMDnMOc7gAAAAEBAZzPAAAAsDFgA8AAaUAAAGEDAmADviVgA8AAaUBcAUqc1wEWnN+AnNfAHBQmsDvAAE5uAMAA/o09HJz+Fpz1LrAnwABOKIP9AQABNJ0GA50GnTgAAAABAQGdDwAAALAxYAPAAGm8AABcAUqdFwEcnR+AnRfAHBQmsDwCAAIWnSwugmq3aoGdNMAcFRAAwABObwDAAP6NPRydVRadPy6wKMAATiqD/QEAATSdXQOdXZ2XAAAAAQEBnWoAAACwMWADwABp2gAAXAFKnXIBHJ16gJ1ywBwUJrA9AgACFp2LLoJqt2qBnZPAHBVuAMAATnAAwAD+jQa3eoCinaGdpp6QAACwPgAAAAEDncyekAAAAAICAp3dAAAAm0hgA8AAY8sAne8AAACE4WADwABjywAAXAE+Aj0jHJ4hFp4ALrAct1K3bEgBAAErAMAA/3UXngAusBy3UjUAAAABAF0DwAD/swFdA4H5AmADwABjy2ADwABjywEeAMAAwyEAAV0DgfkCYAPAAGPLYAPAAGPLAACCAMAcFgy3bCsBXQPAAP+zAV0DgfkCYAPAAGPLYAPAAGPLPRyeVxaeLS6wHLdSt2xWAQABH55fggMCAmADwABjy2ADwABjywKAnnjAHBXJgZ6BwBwV1wAAwAD/wAa3hYCinpWeyJ95AQCwEgFqnpZgA8AA/2gCAAABA57on3kAAAAAAAAAXQPAAP59AV0DgfkCYAPAAGPLYAPAAGPLAT4BSp7uASMhHJ8WFp71LrAct1K3bEgBAAErAMAA/3UWnygusBy3Urdsap9TXQPAAP6/AV0DgfkCYAPAAGPLYAPAAGPLwADn6QFdA8AAztQBXQOB+QJgA8AAY8tgA8AAY8sGt3uAop9+n4Of3wAAsD8AAAABA5+Wn98AAAABAQGfngAAAIC9YAPAAQACAABcAT4CPSMcn7gWn6ousB23UrdtSAEAASsAwAD/dRefqi6wHbdSNQAAAAEAXQPAAP+zAWADwAEAAgEeAMAAwyEAAWADwAEAAgAAgQDAHBeXt20rAV0DwAD/swFgA8ABAAI9HJ/SFp/ELrAdt1K3bVYBAAGAn9bAHBdiAMAA/8AGt4aAop/koAWgWwEAsBMBap/lYAPAAP9oAgAAAQOgEqBbAAAAAAAAAF0DwAD+fQFgA8ABAAIBPgFKoBgBIyEcoC0WoB8usB23UrdtSAEAASsAwAD/dRagNy6wHbdSt21qoEddA8AA/r8BYAPAAQACgzkBXQPAAM7UAWADwAEAAga3fICioGCgZaENAACwQAAAAAEDoIahDQAAAAEBAaCYAAAAhIhdA8AA/7MBYAO+EwAAXAE+Aj0jHKDDFqCnLrAet1K3bkgBAAErAMAA/ukXoKcusB63UjGg2V0DwAD/swFgA74TALduKwFdA8AA/r8BXQPAAP+zAWADvhM9HKD9FqDhLrAet1K3blYBAAGAoQHAHBiNAMAA/tAGt4eAoqESoT2h1wEAsBQBaqETYAPAAP9oAgAAAQOhWKHXAAAAAAAAAF0DwAD+fQFdA8AA/7MBYAO+EwE+AUqhXgEjIRyhgRahZS6wHrdSt25IAQABKwDAAP7pFqGTLrAet1K3bmqhuV0DwAD+vwFdA8AA/7MBYAO+E8AA5/wBXQPAAP6/AV0DwAD/swFgA74TBrd9gKKh3KHhohsAALBBAAAAAQOh96IbAAAAAAAAAFwBPgE9F6IALrAft1Ipt28Gt4iAoqIgojWiWAEAsBUBaqIhYAPAAP9oAgAAAQOiRaJYAAAAAAAAAGADwAD8VQFKokgBFqJILrAft1K3bwa3foCiol2iYqLpAACwQgAAAAEDonWi6QAAAAEBAaKCAAAAhWtgA75BAABcAT4CPSMcoqMWopUusCC3UrdwSAEAASsAwABqDBeilS6wILdSH6KrwABqIAABYAO+QQAAt3ArAV0DwABp7wFgA75BPRyi1Raixy6wILdSt3BWAQABgKLZwBwaJQDAAGoABreJgKKi7qMUo5wBALAWAWqi72ADwAD/aAIAAAEDoyGjnAAAAAAAAABdA8AA/n0BYAO+QQE+AUqjJwEjIRyjPBajLi6wILdSt3BIAQABKwDAAGoMHKNcFqNOLrAgt1K3cIPRAQABaqNxXQPAAP6/AWADvkHAAOh0AMAAaglqo4NdA8AA/r8BYAO+QcAA6AkBXQPAAP59AWADvkEGt3+AoqOho6akPQAAsEMAAAABA6PCpD0AAAABAQGj2AAAALA2YAPAAGkiAABcAT4CPSMcpAQWo+0usCG3UrdxSAEAASsAwAD/dRej7S6wIbdSNQAAAAEAXQPAAP+zAWADwABpIgEeAMAAwyEAAWADwABpIgAAgQDAHBuBt3ErAV0DwAD/swFgA8AAaSI9HKQnFqQQLrAht1K3cVYBAAGApCvAHBtMAMAA/8AGt4qAoqRCpHGk0AEAsBcBaqRDYAPAAP9oAgAAAQOkh6TQAAAAAAAAAF0DwAD+fQFgA8AAaSIBPgFKpI0BNQAAAAEAXQPAAP+zAWADwABpIgEWpJQusCG3UrdxIxykq4AAwBwcF0gBAAErAABqpK5dA8AA/r8BYAPAAGkiwADoD4AAwBwcFwFdA8AAztQBYAPAAGkiBreAgKKk1aTapVsAALBEAAAAAQOk8KVbAAAAAQEBpQAAAACwRWADwABolgAAXAE+Aj0jHKUnFqUWLrAit1K3ckgBAAErAMAA/ukXpRYusCK3UjGlK2ADwABolgC3cisBXQPAAP6/AWADwABolj0cpUQWpTMusCK3UrdyVgEAAYClSMAcHIsAwAD+0Aa3i4CipWCliaXWAQCwGAFqpWFgA8AA/2gCAAABA6WZpdYAAAAAAAAAXQPAAP59AWADwABolgE+AUqlnwE1AAAAAQBdA8AA/r8BYAPAAGiWARalpi6wIrdSt3IjHKW3gADAHB02SAEAASsAAGqlul0DwAD+vwFgA8AAaJbAAOgXgADAHB02AV0DwAD+vwFgA8AAaJYGt4GAoqXbpeCmTwAAsEYAAAABA6X0pk8AAAABAQGmBAAAAIJuYAO+OgAAXAE+Aj0jHKYjFqYULrAjt1K3c0gBAAErAMAA/3UXphQusCO3UjUAAAABAF0DwAD/swFgA746AR4AwADDIQABYAO+OgAAgQDAHB3dt3MrAV0DwAD/swFgA746PRymPhamLy6wI7dSt3NWAQABgKZCwBwdqgDAAP/ABreMgKKmVKZ9prYBAKkQAWqmVWADwAD/aAIAAAEDpoumtgAAAAAAAABdA8AA/n0BYAO+OgE+AUqmkQE1AAAAAQBdA8AA/7MBYAO+OgEWppgusCO3UrdzIxymp4AAwBwea0gBAAErAABqpqpdA8AA/r8BYAO+OsAA6B+AAMAcHmsBXQPAAM7UAWADvjoGt4KAoqa7psCnOwAAsEcAAAABA6bapzsAAAABAQGm5AAAAKVSYAPAAEy4AABcAT4CPSMcpwkWpvQusCS3Urd0SAEAASsAwAD/dRem9C6wJLdSNQAAAAEAXQPAAP+zAWADwABMuAEeAMAAwyEAAWADwABMuAAAgQDAHB8Ot3QrAV0DwAD/swFgA8AATLg9HKcqFqcVLrAkt1K3dFYBAAGApy7AHB7ZAMAA/8AGt42AoqdAp2OnqAEAsBkBaqdBYAPAAP9oAgAAAQOnd6eoAAAAAAAAAF0DwAD+fQFgA8AATLgBPgFKp30BNQAAAAEAXQPAAP+zAWADwABMuAEWp4QusCS3Urd0IxynmYAAwBwfpEgBAAErAABqp5xdA8AA/r8BYAPAAEy4wADoJYAAwBwfpAFdA8AAztQBYAPAAEy4BreDgKKnrafAqvwAACMBaqeuYAPAAP9oAgAAAQOnyKr8AAAAAAAAAGADwAEAAgE+Dk6n3qfhAACD6WADwAEATAEfp+fAAQBrAAAAAD0cp/6Ap/vAHCAsgo4BAAEnsEgAwAEAYD0eqCfAAE4TAgACgKgvwBwgLC4AT6g/qEQAAAFWYQMCYAPAAQACXQPAAP59AVtcAAOoR6jtAAAAAgICqE8AAACwSWADwAEAAgCoXwAAAIPRXQPAAP59AVsAAFwBPgFJqHEWqH6DqHXAHCCng7fAAP6iPgI9HKiXgKiUwBwgLIKOAQABJKipAyewSoKoosAcIJknguoAwAEAYD0cqL2DqLTAHCCng/0BAAE0qMUDqMWo3gAAAAEBAajGAAAAg1NbAABcAUqozAEcqM+AqMzAHCAsgo4BAAEkqN0CJ7BLhKjbwBwhFQDAAQBgAMAA/o0/PRyo94Go9MAcIHUgAgACJ7ASFqkbLrASt4UAAD0cqUSBqUHAHCB1IAIAAiewExapVS6wE7eGAAA9HKlrgalowBwgdSACAAInsBQWqYousBS3hwAASamrFqmvLrAVt4g+AT0cqcuAqcjAHCAsgo4BAAEnsEwAwAEAYD89HKn7gan4wBwgdSACAAInsBYWqgwusBa3iQAAPRyqIoGqH8AcIHUgAgACJ7AXFqo8LrAXt4oAAD0cqluBqljAHCB1IAIAAiewGBaqby6wGLeLAAA9HKqIgaqFwBwgdSACAAInqRAWqpouqRC3jAAAPRyqsYGqrsAcIHUgAgACJ7AZFqrJLrAZt40AAEqq5AEcqu6AquvAHCAsIwAAAADAAQBlAAAcBm0AHA7rABwT/gAcFasAHBahABwXRAAcF+8AHBhvABwZCQAcGZoAHBnJABwaBwAcGpMAHBsuABwb2QAcHG0AHBz4ABwdjAAcHi8AHB67ABwfZgAcH/oAHCJqAAAAFgK3kYCiq5Grl7X/A7BNAAABYAHAAP9oAAAFBLeUgKKrxKvXCbBOt1IAYAO8RgAEt5WAoqvuq/0Jpau3UgBgA74lAAS3loCirBasIgmwT7dSAGADt2cABLeXgKKsOKw+GJR2t1IAXQPAAP6/AWADt/kBKwS3mICirFqsZhiwULdSAF0DwAD+vwFgA7glASsBBbevgKKsa6xrrOoAAAADrHqs6gAAAAICAqyAAAAEsE5gA7xGAKyaAAAEpatgA74lAABgA7eRAT8ECAG3lIAAwBwjcwgBt5WBAMAcI38IALeWH6zLt48BAAGBrNrAHCN/AAkBrGvAAP9+AAAAABQGt5qAoqzvrQKtNgAAIwFqrPBgA8AA/2gCAAABA60KrTYAAAAAAAAAYAPAAQACAUqtEAEkrTYCJ7BRFq0mLqWrt1K3lQa3m4CirTutTq3FAACwUgFqrTxgA8AA/AiGagAAAQOtZ63FAAAAAQEBrXQAAACWe2ADvhMAAFwBPgE9HK2DLrBTAQABHK2tFq2ZLrBOt1K3lLBUAQABgK24wBwkNQC8XAC3pga3nICircqtz64pAACwVQAAAAEDreCuKQAAAAEBAa3rAAAAsFZgA8AAaXIAAFwBPgE9HK4JFq38LrBPt1K3lrBVAQABgK4bwBwkjQDAAE4vBredgKKuLq4zrpIAALBXAAAAAQOuRa6SAAAAAQEBrlEAAACwWGADwABpQAAAXAE+AT0crnAWrmMusE+3UreWsFcBAAGAroPAHCTdAMAATi0Gt56Aoq6Xrpyu7AAAsFkAAAABA66rruwAAAABAQGutAAAALBaYAPAAGm8AABcAT4BPRyu0Bauwy6wT7dSt5awWQEAAYCu4MAcJS0AwABOLga3n4CirvGu9q9aAACwWwAAAAEDrwmvWgAAAAEBAa8WAAAAsFxgA8AAadoAAFwBPgE9HK82Fq8pLrBPt1K3lrBbAQABgK9KwBwlfQDAAE4wBreggKKvX69ksAkAALA+AAAAAQOvirAJAAAAAgICr5sAAACbSGADwABjywCvrQAAAIThYAPAAGPLAABcAT4BPRyvyxavvi6wT7dSt5awPgIAAoCv8sAcJc2Br/vAHCXbALd6BrehgKKwDrATsJIAALBdAAAAAQOwLrCSAAAAAQEBsD4AAACWe2ADvjoAAFwBPgE9HLBaFrBNLrBPt1K3lrBVAQABHrBwwABpngEAAYCwhcAcJjAAAMAATi8Gt6KAorCXsJyw7QAAsD8AAAABA7CvsO0AAAABAQGwtwAAAIC9YAPAAQACAABcAT4BPRyw0Bawwy6wT7dSt5awPwEAAYCw5MAcJokAt3sGt6OAorDysPexdAAAsEAAAAABA7EYsXQAAAABAQGxKgAAAISIXQPAAP+zAWADvhMAAFwBPgE9HLFGFrE5LrBPt1K3lrBAAQABgLFowBwm1wC3fAa3pICisXmxfrHnAACwRwAAAAEDsZix5wAAAAEBAbGiAAAApVJgA8AATLgAAFwBPgE9HLG/FrGyLrBPt1K3lrBHAQABgLHawBwnKgC3gga3pYCiseyx8bI5AACwQQAAAAEDsgeyOQAAAAAAAABcAT4BPRyyHRayEC6wT7dSt5awQQAAAAC3fQa3poCisj6yQ7KnAACwUwAAAAEDsliypwAAAAEBAbJnAAAAgpRgA8AAY/MAAFwBPgE9HLJzLrBZAQABHrKHwABpywEAAYCyncAcJ7EAALeeBrengKKyrLKxsxUAALBCAAAAAQOyxLMVAAAAAQEBstEAAACFa2ADvkEAAFwBPgE9HLLxFrLkLrBPt1K3lrBCAQABgLMFwBwoAQC3fga3qICisxqzH7OiAACwQwAAAAEDszuzogAAAAEBAbNRAAAAsDZgA8AAaSIAAFwBPgE9HLNzFrNmLrBPt1K3lrBDAQABgLOQwBwoTQC3fwa3qYCis6ezrLQfAACwRAAAAAEDs8K0HwAAAAEBAbPSAAAAsEVgA8AAaJYAAFwBPgE9HLP1FrPoLrBPt1K3lrBEAQABgLQMwBwomwC3gAa3qoCitCS0KbSMAACwRgAAAAEDtD20jAAAAAEBAbRNAAAAgm5gA746AABcAT4BPRy0aha0XS6wT7dSt5awRgEAAYC0f8AcKOkAt4EGt6uAorSRtJa06QAAsF4AAAABA7SptOkAAAABAQG0tgAAAIC9YAO3+QAAXAE+Aj0jHLTJFrTCLpR2t1K3l0gBAAErAMAA/ukXtMIulHa3UjG0zWADt/kAt5crAV0DwAD+vwFgA7f5PRy03Ba01S6UdrdSt5dWAQABgLTgwBwpNQDAAP7QBresgKK07rTztWoAALBfAAAAAQO1DLVqAAAAAQEBtR8AAACCb2ADuCUAAFwBPgI9Ixy1Pha1MS6wULdSt5hIAQABKwDAAP7pF7UxLrBQt1IxtUJgA7glALeYKwFdA8AA/r8BYAO4JT0ctVcWtUousFC3UreYVgEAAYC1W8AcKboAwAD+0Aa3rYCitW+1fbX9AACCjAAAAAEDtYK1/QAAAAEBAbWKAAAAgpdgA8AAmA4AAGADt8wBPgFKtZYBH7Wht9oEAASAtbjAHCo/FrW+LrBPt1K3ljUAAAABAF0DwAD+vwFgA7f5ARa1zC6UdrdSt5cjHLXTgQDAHCpzSAEAASsAAGq11l0DwAD+vwFgA7f5wADoioEAwBwqcwFdA8AA/r8BYAO3+TUAAAABAF0DwAD+vwFgA7glARa14C6wULdSt5gjHLXtgQDAHCrESAEAASsAAGq18F0DwAD+vwFgA7glwADokIEAwBwqxAFdA8AA/r8BYAO4JQAAABwjyAAcJAwAHCRvABwkvwAcJQ8AHCVfABwlrwAcJhIAHCZrABwmuQAcJwwAHCdaABwnkwAcJ+MAHCgvABwofQAcKMsAHCkXABwpnAAcKiEAHCsVAAAAFAK3sICitlG2YLcJB7BgAAABYAHAAP9oAAAAAQW3twAAAAAEAAADAAAAAAAAAAAAYAO3sAE/AQkBAMAA/34AAAAAAwa3soCitnO2krasAQKlPgAAAAEDtqy2rAAAAAAAAABgA8AAQqEABrezgKK2sLbCts8BAqVKAAAAAQO2z7bPAAAAAAAAAGADwABD+gAGt7WAorbTtuG3BwACsGEAAAABA7bytwcAAAABAQG3AAAAAIJqYAO+JQAAYAO3zAAAABwrsAAcK9YAHCv8ABwsLAAAAAMCt7iAoreOt5S5VQOwYgAAAWABt7AAAAMEt7qAorfzuA0JpT4BarfHYAPAAP9oAmADwABCoQAEt7uAorgxuD4JpUoBargSYAPAAP9oAmADwABD+gAEt72AorhcuG0JsGO3UgBgA8AAYcgAAQW3wYCiuHK4crjbAAAAA7iIuNsAAAADAwO4jgAABKU+YAPAAEKhALivAAAEpUpgA8AAQ/oAuMkAAASwY2ADwABhyAAAYAO3uAE/BAgBt7qAAMAcLMUIAbe7gQDAHCzTCAG3vYIAwBws4QkBuHK3twAAAAABBre/gKK44Lj6uVMAALBhAWq44WADwAD/aAIAAAEDuQu5UwAAAAEBAbkZAAAAgmpgA74lAABgA7fMAT4BSrknARy5QBa5Li6wY7dSt71nAQABgLlIwBwtSADAAGHVAAAcLSAAHC19AAAAAQK3woCiubS5urwKA7BkAAABYAG3sAAAAwS3xICiuh26NwmlPgFqufFgA8AA/2gCYAPAAEKhAAS3xYCiulu6aAmlSgFqujxgA8AA/2gCYAPAAEP6AAS3x4CiupS6mAmqp7dSAF0DwAD+8QJgA74lYAO3zAABBbfLgKK6nbqduv4AAAADure6/gAAAAMDA7rEAAAEpT5gA8AAQqEAuuUAAASlSmADwABD+gC6+QAABKqnXQPAAP7xAmADviVgA7fMAABgA7fCAT8ECAG3xIAAwBwuFwgBt8WBAMAcLiUIAbfHggDAHC4zCQG6nbe3AAAAAAEGt8mAorsDux28CAAAsGEBarsEYAPAAP9oAgAAAQO7LrwIAAAAAQEBuzwAAACCamADviUAAGADt8wBPgNOu1i7XwAAgXZgA7fMARy7ZRa7YS6qp7dSt8dLAQABgLtmwBwuowDAAP8FSbtzHLt+gbt3wBwuuEgBAAErAMAA/3U+AT0eu4+2/QIAAoC7mMAcLqMku+oFJ7BlgLvEwBwuoyeDTx67zsAA9/0BAAGAu9/AHC6jACeYlgA/Srv3AYG7/sAcLrgAABwuewAcLz4AAAABArfMgKK8SbxPwABTaAOwZgAAAWABwAD/aAAABQS3zoCivHW8iwaD7ABgA8ABAAIBarx7YAPAAQACwADolgS3z4CivJ28oQmClwBgA8AAmA4ABLfQgKK8uby/CbBoAGADt1MABLfRgKK837zrCbBpAF0DwAD+fQFgA7f5AAS30oCivRG9IwmwagBdA8AA/n0BYAO4JQABBbfagKK9KL0ovYAAAAADvTW9gAAAAAQEBL1CAAAEgpdgA8AAmA4AvU0AAASwaGADt1MAvVoAAASwaV0DwAD+fQFgA7f5AL1tAAAEsGpdA8AA/n0BYAO4JQAAYAO3zAE/BQgBt8+AAMAcL/oIAbfQgQDAHDAICAG30YIAwBwwFAgBt9KDAMAcMCcJAb0owAD/fgAAAAAEBrfUgKK+m76jwABAJgQBsA8AAAABA77DwABAJgAAAAMDA77WAAAAg0pgA8AAXqUAvvYAAACwaV0DwAD+vwFgA7f5AL8iAAAAsGpdA8AA/r8BYAO4JQAAYAO3zAE+BT0cv0OAvzzAHDCZgpgBAAFqv0lgA8ABAALAAOiWAMAAXqdOv1q/XwAAgpdgA8AAmA4BJr9aARy/aIC/YcAcMJmwawAAAADAAF7yYAPAAJgOTr+Ov5UAALBoYAO3UwEev6W3dgEAAYC/uMAcMJkAPRy/zIC/xcAcMJmCkAEAAWq/0GADwAEAAsAA6JYAwABeqEq/2gEfv+W32gQABIO/88AcMPiEv/nAHDEmgcAAQAHAHDCngsAAQA/AHDC6AAa31oCiwABBJsAAQSvAAEG6AACwEAAAAAEDwABBOsAAQboAAAABAQHAAEFEAAAAhEBgA8AAXlYAAFwBPgQ9HMAAQVWAwABBUMAcMbqCmAEAAWrAAEFbYAPAAQACwADolgDAAF5bPRzAAEFqgMAAQWXAHDG6sGwBAAEWwABBfC6Cl7fPAMAAXp89HMAAQY4WwABBhy6waLfQsBABAAGAwABBnsAcMboAt1o9HMAAQa6AwABBqcAcMbqCkAEAAWrAAEGyYAPAAQACwADolgDAAF5cBrfXgKLAAEG/wABBxMAAUf8AALBtAAAAAQPAAEHVwABR/wAAAAICAsAAQdwAAACwbmADwABlkwDAAEHrAAAAsG9gA8AAXkMAAFwBPgJGwABB+sAAQiHAAEILAAAAgL1gA7f5ABbAAEITLrBpt9E+AUFHwABCKRbAAEI2gsAAQjHAHDK5gmu3/BQBwABCW2rAAEJbYAO328AA6JwAPgI9F8AAQnSCwABCb8AcMrmAlhbAAEKCgMAAQnzAHDKLsHHAAGXPuBJCwABCnAABwABCwGrAAELAYAO328AA6K0APgI9F8AAQuCCwABC28AcMrmAlhzAAELugMAAQujAHDKLsHMBAAEmwABDAwEWwABDA4LAAEL+wBwyuRK3/2ADvf8AwABmGrgSQsAAQxQAAcAAQzhqwABDOGADt9vAAOi+AD4CPRfAAENSgsAAQ03AHDK5gJYcwABDYIDAAENawBwyi4aSAQABJsAAQ28BFsAAQ2+CwABDasAcMrkSt/9gA74TAMAAZhu4EkLAAEOAAAHAAEOkasAAQ6RgA7fbwADozwA+Aj0XwABDx4LAAEPCwBwyuYCWHMAAQ9WAwABDz8AcMouwdgEAASbAAEP5ARbAAEP5gsAAQ/TAHDK5Erf/YAO+JQDAAGYcuBJCwABECgABwABELmrAAEQuYAO328AA6OAAPgI9F8AAREyCwABER8AcMrmAlhzAAERagMAARFTAHDKLsHgBAAEmwABEcQEWwABEcYLAAERswBwyuRK3/2ADvjoAwABmJ7gSQsAARIIAAcAARKZqwABEpmADt9vAAOjyAD4CPRfAAETFgsAARMDAHDK5gJYcwABE04DAAETNwBwyi7B6AQABJsAAROsBFsAAROuCwABE5sAcMrkSt/9gA746AMAAZh24EkLAAET8AAHAAEUgasAARSBgA7fbwADpBAA+Aj0XwABFO4LAAEU2wBwyuYCWHMAARUmAwABFQ8AcMouwfAEAASbAAEVZARbAAEVZgsAARVTAHDK5Erf/YAO+EwDAAGYsuBJCwABFagABwABFjmrAAEWOYAO328AA6RYAPgI9F8AARa2CwABFqMAcMrmAlhzAAEW7gMAARbXAHDKLsH4BAAEmwABFzwEWwABFz4LAAEXKwBwyuRK3/2ADwABjywDAAGYruBJCwABF4AABwABGBGrAAEYEYAO328AA6SoAPgI9F8AARiGCwABGHMAcMrmAlhzAAEYvgMAARinAHDKLsIABAAEmwABGRQEWwABGRYLAAEZAwBwyuRK3/2ADvhMAwABmLbgSQsAARlYAAcAARnpqwABGemADt9vAAOk8AD4CPRfAAEaZgsAARpTAHDK5gJYcwABGp4DAAEahwBwyi7CCAQABJsAARr8BFsAARr+CwABGusAcMrkSt/9gA746AMAAZgK4EkLAAEbQAAHAAEb0asAARvRgA7fbwADpTgA+Aj0XwABHEoLAAEcNwBwyuYCWHMAARyCAwABHGsAcMouwhAEAASbAAEc/ARbAAEc/gsAARzrAHDK5Erf/YAO+NwDAAGYPuBJCwABHUAABwABHdGrAAEd0YAO328AA6WAAPgI9F8AAR4+CwABHisAcMrmAlhzAAEedgMAAR5fAHDKLsIYBAAEmwABHsQEWwABHsYLAAEeswBwyuRK3/2ADwABMuADAAGYGuBJCwABHwgABwABH5mrAAEfmYAO328AA6XQAPgI9F8AASAaCwABIAcAcMrmAlhzAAEgUgMAASA7AHDKLsIgBAAEmwABILQEWwABILYLAAEgowBwyuRK3/2ADvjcAwABmJrgSQsAASD4AAcAASGJqwABIYmADt9vAAOmIAD4CPRfAAEiNgsAASIjAHDK5gJYcwABIm4DAAEiVwBwyi7CKAQABJsAASLsBFsAASLuCwABItsAcMrkSt/9gA74TAMAAZgy4EkLAAEjMAAHAAEjwasAASPBgA7fbwADpmgA+Aj0XwABJGoLAAEkVwBwyuYCWHMAASSiAwABJIsAcMouwjAEAASbAAElHARbAAElHgsAASULAHDK5Erf/YAO9/wDAAGYNuBJCwABJWAABwABJfGrAAEl8YAO328AA6a4APgI9F8AASaiC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AAAcMHcAHDGSABwyYwAcPhIAHD+kAAAABAK324CiwABTa8AAU3DAAFUbC7CpAAABYAHAAP9oAAAXBLfdgKLAAFNwwABTcAknAGADwAD+GwAEt9+AosAAU3DAAFNwCSi3UgBgA8ABAAIABLfggKLAAFNwwABTcAYpAF0DwAD+vwFgA7fbAWoAXQPAAP6/AWADt9vAAOp1BLfhgKLAAFOEwABThAawqgBgA7fbAWoAYAO328AA6JwEt+KAosAAU5DAAFOQBrBzAGADt9sBagBgA7fbwADorQS344CiwABTo8AAU6MGhpIAYAO32wFqAGADt9vAAOi+BLfkgKLAAFOwwABTsAawqwBgA7fbAWoAYAO328AA6M8Et+WAosAAU8bAAFPGBrCsAGADt9sBagBgA7fbwADo4AS35oCiwABT18AAU9cGsK0AYAO32wFqAGADt9vAAOjyBLfngKLAAFPpwABT6QawfABgA7fbAWoAYAO328AA6QQEt+iAosAAU/fAAFP3BrB+AGADt9sBagBgA7fbwADpFgS36YCiwABUCcAAVAkGhPEAYAO32wFqAGADt9vAAOkqBLfqgKLAAFQZwABUGQawrgBgA7fbAWoAYAO328AA6TwEt+uAosAAVCvAAFQrBrCvAGADt9sBagBgA7fbwADpTgS37ICiwABUPMAAVDwGoZwAYAO32wFqAGADt9vAAOlgBLftgKLAAFRKwABUSgawsABgA7fbAWoAYAO328AA6XQEt+6AosAAVF3AAFRdBrCKAGADt9sBagBgA7fbwADpiAS374CiwABUe8AAVHsGsIwAYAO32wFqAGADt9vAAOmaBLfwgKLAAFSYwABUmAawjgBgA7fbAWoAYAO328AA6a4Et/GAosAAVLfAAFS3BrCQAGADt9sBagBgA7fbwADpwgS38oCiwABU3cAAVN0GsJIAYAO32wFqAGADt9vAAOnUBLfzgKLAAFT2wABU9gawlABgA7fbAWoAYAO328AA6egEt/SAosAAVRPAAFUTBrCWAGADt9sBagBgA7fbwADp/AEFt/iAosAAU3DAAFNwwABVGwEAAAPAAFNwwABVGwAAAAICAsAAU3AAAAQnYAPAAP4bAMAAU3AAAAQoYAPAAQACAABgA7fbAT8DCAC33YAAwBxC3ggAt9+BAMAcQu0JAADAAP9+AAAAAAEGt/aA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hEC4voKYAQABasAApLRgA8ABAALAAPBeAMAAXls9HMAApMgumvEBAAEWwACk04DAAKTOwByQOIC9wACYAQC4wT0cwACk3i6a8QEAARbAAKTpgMAApOTAHJA4gm7AAJgCALjBPRzAAKT9FsAApPguhEC4voKQAQABasAApQxgA8ABAALAAPBeAMAAXlw9HMAApSAusXe3UgEAAYDAAKUrwByQOAC4xAa43oCiwAClOcAApUrAAKYnAACxmgFqwAClOmADwAD/aAIAAAEDwAClVcAApicAAAABAQHAAKVoAAAAg/NgA8AAmC0AAFwBPgY9HMAApXkWwACldC6EQLi+sLcBAAFqwACljmADuDvAAOxzAMAAXmc9HMAApaAWwAClmy6EQLi+gpgBAAFqwAClsWADwAEAAsAA8GEAwABeWz0cwAClvi6a8QEAARbAAKXJgMAApcTAHJFahZfAAJgvALjBPRzAAKXYLprxAQABFsAApeOAwACl3sAckVqlUsAAmDAAuME9HMAApfcWwACl8i6EQLi+gpABAAFqwACmBmADwAEAAsAA8GEAwABeXD0cwACmEy6xd7dSAQABgMAAph7AHJFaALjEBrjfgKLAAKYswACmPcAApw4AALGbAWrAAKYtYAPAAP9oAgAAAQPAAKZLwACnDgAAAAEBAcAAplkAAACD82ADwACX7wAAXAE+BT0cwACmahbAAKZlLoRAuL6wtwEAAWrAAKZ/YAO4O8AA7IcAwABeZz0cwACmlBbAAKaPLoRAuL6CmAEAAWrAAKalYAPAAQACwADwZADAAF5bPRzAAKa6FsAAprUuhEC4voG7AQABFsAApsuAwACmxsAcknyAvcAAl9AAwABeYz0cwACm2xbAAKbWLoRAuL6CkAEAAWrAAKbqYAPAAQACwADwZADAAF5cPRzAAKb6LrF3t1IBAAGAwACnBcAcknwAuMQGuOCAosAApxPAAKckwACoTQAAhm8BasAApxRgA8AA/2gCAAABA8AApzzAAKhNAAAAAQEBwACnVAAAAIPzYAPAAJflAABcAT4GPRzAAKdlFsAAp2AuhEC4vrC3AQABasAAp3pgA7g7wADsmwDAAF5nPRzAAKeZFsAAp5QuhEC4voKYAQABasAAp6pgA8ABAALAAPBnAMAAXls9HMAAp8kWwACnxC6EQLi+gbsBAAEWwACn2oDAAKfVwByThoC9wACX0ADAAF5jPRzAAKfqFsAAp+UuhEC4vrA0AQABFsAAp/mAwACn9MAck4awvMAAl+cAwABeYD0cwACoEBbAAKgLLoRAuL6CkAEAAWrAAKgfYAPAAQACwADwZwDAAF5cPRzAAKg5LrF3t1IBAAGAwACoRMAck4YAuMQGuOGAosAAqFLAAKhjwACpGAAAsZwBasAAqFNgA8AA/2gCAAABA8AAqGzAAKkYAAAAAQEBwACodQAAAIPzYAPAAJf3AABcAT4EPRzAAKiGFsAAqIEuhEC4vrC3AQABasAAqJtgA7g7wADsrwDAAF5nPRzAAKi1FsAAqLAuhEC4voKYAQABasAAqMZgA8ABAALAAPBqAMAAXls9HMAAqOAWwACo2y6EQLi+gpABAAFqwACo72ADwAEAAsAA8GoAwABeXD0cwACpBC6xd7dSAQABgMAAqQ/AHJS+ALjEBrjigKLAAKkdwACpLsAAqgkAALGdAWrAAKkeYAPAAP9oAgAAAQPAAKk+wACqCQAAAAEBAcAAqU4AAACD82ADwACX2wAAXAE+BT0cwACpXxbAAKlaLoRAuL6wtwEAAWrAAKl0YAO4O8AA7MMAwABeZz0cwACpixbAAKmGLoRAuL6CmAEAAWrAAKmcYAPAAQACwADwbQDAAF5bPRzAAKmzFsAAqa4uhEC4voG7AQABFsAAqcSAwACpv8AclZqAvcAAl9AAwABeYz0cwACp1BbAAKnPLoRAuL6CkAEAAWrAAKnjYAPAAQACwADwbQDAAF5cPRzAAKn1LrF3t1IBAAGAwACqAMAclZoAuMQGuOOAosAAqg7AAKofwACq/gAAsZ4BasAAqg9gA8AA/2gCAAABA8AAqivAAKr+AAAAAQEBwACqNwAAAIPzYAPAAJe/AABcAT4GPRzAAKpIFsAAqkMuhEC4vrC3AQABasAAql1gA7g7wADs1wDAAF5nPRzAAKpwFsAAqmsuhEC4voKYAQABasAAqoFgA8ABAALAAPBwAMAAXls9HMAAqpQWwACqjy6EQLi+gbsBAAEWwACqpYDAAKqgwByWpKrgwACXwQDAAF5jPRzAAKquLprxAQABFsAAqrmAwACqtMAclqQfwACXwgC4wT0cwACqzRbAAKrILoRAuL6CkAEAAWrAAKrcYAPAAQACwADwcADAAF5cPRzAAKrqLrF3t1IBAAGAwACq9cAclqQAuMQGuOSAosAAqwPAAKsUwACr7gAAsZ8BasAAqwRgA8AA/2gCAAABA8AAqx/AAKvuAAAAAQEBwACrKgAAAIPzYAPAAJewAABcAT4GPRzAAKs7FsAAqzYuhEC4vrC3AQABasAAq1BgA7g7wADs6wDAAF5nPRzAAKtiFsAAq10uhEC4voKYAQABasAAq3NgA8ABAALAAPBzAMAAXls9HMAAq4UWwACrgC6EQLi+gbsBAAEWwACrloDAAKuRwByX0KrgwACXsgDAAF5jPRzAAKufLprxAQABFsAAq6qAwACrpcAcl9AfwACXswC4wT0cwACrvhbAAKu5LoRAuL6CkAEAAWrAAKvNYAPAAQACwADwcwDAAF5cPRzAAKvaLrF3t1IBAAGAwACr5cAcl9AAuMQGuOWAosAAq/PAAKwEwACs8QAAsaABasAAq/RgA8AA/2gCAAABA8AArA/AAKzxAAAAAQEBwACsGgAAAIPzYAPAAJefAABcAT4HPRzAAKwrFsAArCYuhEC4vrC3AQABasAArEBgA7g7wADs/wDAAF5nPRzAAKxSFsAArE0uhEC4voKYAQABasAArGNgA8ABAALAAPB2AMAAXls9HMAArHUWwACscC6EQLi+gbsBAAEWwACshoDAAKyBwByY/KrgwACXoQDAAF5jPRzAAKyPLprxAQABFsAArJqAwACslcAcmPyFzcAAl6IAuME9HMAArKUumvEBAAEWwACssIDAAKyrwByY/IXPwACXowC4wT0cwACswRbAAKy8LoRAuL6CkAEAAWrAAKzQYAPAAQACwADwdgDAAF5cPRzAAKzdLrF3t1IBAAGAwACs6MAcmPwAuMQGuOaAosAArPbAAK0HwACt8wAAsaEBasAArPdgA8AA/2gCAAABA8AArRDAAK3zAAAAAQEBwACtGQAAAIPzYAPAAJeIAABcAT4GPRzAAK0qFsAArSUuhEC4vrC3AQABasAArT9gA7g7wADtEwDAAF5nPRzAAK1ZFsAArVQuhEC4voKYAQABasAArWpgA8ABAALAAPB5AMAAXls9HMAArX8umvEBAAEWwACtioDAAK2FwByaTIJJwACXigC4wT0cwACtly6HTwEAARbAAK2mgMAAraHAHJpMW8AAl4sAuMI9HMAArbsWwACtti6EQLi+gpABAAFqwACtymADwAEAAsAA8HkAwABeXD0cwACt3y6xd7dSAQABgMAArerAHJpMALjEBrjngKLAAK34wACuCcAArvAAALGiAWrAAK35YAPAAP9oAgAAAQPAAK4RwACu8AAAAAEBAcAArhkAAACD82ADwACXlwAAXAE+Bj0cwACuKhbAAK4lLoRAuL6wtwEAAWrAAK4/YAO4O8AA7ScAwABeZz0cwACuWBbAAK5TLoRAuL6CmAEAAWrAAK5pYAPAAQACwADwfADAAF5bPRzAAK59LprxAQABFsAAroiAwACug8Acm22CScAAl4oAuME9HMAArpUuh08BAAEWwACupIDAAK6fwBybbVvAAJeLALjCPRzAAK65FsAArrQuhEC4voKQAQABasAArshgA8ABAALAAPB8AMAAXlw9HMAArtwusXe3UgEAAYDAAK7nwBybbQC4xAa46ICiwACu9cAArwbAALAMAACxowFqwACu9mADwAD/aAIAAAEDwACvFsAAsAwAAAABAQHAAK8mAAAAg/NgA8AAl3gAAFwBPgc9HMAArzcWwACvMi6EQLi+sLcBAAFqwACvTGADuDvAAO05AMAAXmc9HMAAr2MWwACvXi6EQLi+gpgBAAFqwACvdGADwAEAAsAA8H8AwABeWz0cwACvhi6a8QEAARbAAK+RgMAAr4zAHJyOhdLAAJd6ALjBPRzAAK+hLprxAQABFsAAr6yAwACvp8AcnI6Br8AAl3sAuME9HMAAr7cumvEBAAEWwACvwoDAAK+9wBycjoXTwACXfAC4wT0cwACv1xbAAK/SLoRAuL6CkAEAAWrAAK/mYAPAAQACwADwfwDAAF5cPRzAAK/4LrF3t1IBAAGAwACwA8AcnI4AuMQGuOmAosAAsBHAALAiwACxWAAAsaQBasAAsBJgA8AA/2gCAAABA8AAsD3AALFYAAAAAQEBwACwWAAAAIPzYAPAAJduAABcAT4GPRzAALBpFsAAsGQuhEC4vrC3AQABasAAsH5gA7g7wADtTQDAAF5nPRzAALCgFsAAsJsuhEC4voKYAQABasAAsLFgA8ABAALAAPCCAMAAXls9HMAAsM4umvEBAAEWwACw2YDAALDUwByd058LwACXcAC4wT0cwACw6y6a8QIAARbAALD2gMAAsPHAHJ3TgJbAAJdgAZgIKbjBPRzAALEYFsAAsRMuhEC4voKQAQABasAAsSdgA8ABAALAAPCCAMAAXlw9HMAAsUQusXe3UgEAAYDAALFPwByd0wC4xAa46oCiwACxXcAAsW7AALJ9AACxpQFqwACxXmADwAD/aAIAAAEDwACxfcAAsn0AAAABAQHAALGMAAAAg/NgA8AAl1wAAFwBPgc9HMAAsZ0WwACxmC6EQLi+sLcBAAFqwACxsmADuDvAAO1hAMAAXmc9HMAAscgWwACxwy6EQLi+gpgBAAFqwACx2WADwAEAAsAA8IUAwABeWz0cwACx6i6a8QEAARbAALH1gMAAsfDAHJ74sabAAJdeALjBPRzAALINFsAAsgguhEC4vrGnAQABFsAAsiSAwACyH8Acnviq4MAAl18AwABeZD0cwACyLS6a8QEAARbAALI4gMAAsjPAHJ74gJbAAJdgALjBPRzAALJJFsAAskQuhEC4voKQAQABasAAslhgA8ABAALAAPCFAMAAXlw9HMAAsmkusXe3UgEAAYDAALJ0wBye+AC4xAa464CiwACygsAAspPAALPSAACxqAFqwACyg2ADwAD/aAIAAAEDwACyr8AAs9IAAAABAQHAALLLAAAAg/NgA8AAlz8AAFwBPgY9HMAAstwWwACy1y6EQLi+sLcBAAFqwACy8WADuDvAAO1zAMAAXmc9HMAAsxQWwACzDy6EQLi+gpgBAAFqwACzJWADwAEAAsAA8IgAwABeWz0cwACzQy6HTwEAARbAALNSgMAAs03AHKBIr2vAAJdBALjCPRzAALNqFsAAs2UuhEC4vrA0AQABFsAAs3mAwACzdMAcoEixqcAAl0IAwABeYD0cwACzkRbAALOMLoRAuL6CkAEAAWrAALOgYAPAAQACwADwiADAAF5cPRzAALO+LrF3t1IBAAGAwACzycAcoEgAuMQGuOyAosAAs9fAALPowAC1AQAAsaoBasAAs9hgA8AA/2gCAAABA8AAs/7AALUBAAAAAQEBwAC0FAAAAIPzYAPAAJcvAABcAT4GPRzAALQlFsAAtCAuhEC4vrC3AQABasAAtDpgA7g7wADthwDAAF5nPRzAALRXFsAAtFIuhEC4voKYAQABasAAtGhgA8ABAALAAPCLAMAAXls9HMAAtIUWwAC0gC6EQLi+gbsBAAEWwAC0loDAALSRwByhdYjlwACXMQDAAF5jPRzAALSlLodPAQAB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HMFsAD0cwADSahbAANJjLoNKuQiCkAEAAWrAANJ5YAPAAQACwADwLgDAAF6oQsAA0owAAcAA0qlqwADSqWADuDvAAOtDAD4GPRzAANLLFsAA0sQug0q5CIKYAQABasAA0txgA8ABAALAAPAxAMAAXqdOwADTCsAA0xUAAJ+BXQPAAP6/AWADwACYxQEcwADTFy6wKQABYAPAAJjFAAC5Dk7AANMwwADTOwAAsYlgA8AA/FUBHMAA00QWwADTPS6DSrkIsC0AAAAAwABesz2KwADTWMAcvxMfwADTY8AAmMQCAAGDwADTeMAcwioBsYmEwADTkMAcwlk9HMAA06wWwADTpS6DSrkIgpABAAFqwADTu2ADwAEAAsAA8DEAwABeqELAANPXAAHAANP0asAA0/RgA7g7wADrVQA+BD0cwADUDhbAANQHLoNKuQiCmAEAAWrAANQfYAPAAQACwADwNADAAF6nPYrAANQzwBy/Ex/AANQ+wACYtQAAAAA9HMAA1F0WwADUVi6DSrkIgpABAAFqwADUbGADwAEAAsAA8DQAwABeqELAANSAAAHAANSdasAA1J1gA7g7wADrZwA+BT0cwADUvhbAANS3LoNKuQiCmAEAAWrAANTPYAPAAQACwADwNwDAAF6nTsAA1P7AANUHAACIeV0DwAD+vwFgA8AAlxABHMAA1QkusCkAAWADwACXEAAAuQ49isAA1R3AHL8TH8AA1SjAAJipAQABg8AA1TzAHMOiAD0cwADVVhbAANVPLoNKuQiCkAEAAWrAANVlYAPAAQACwADwNwDAAF6oQsAA1YAAAcAA1Z1qwADVnWADuDvAAOt5AD4EPRzAANW5FsAA1bIug0q5CIKYAQABasAA1cpgA8ABAALAAPA6AMAAXqc9isAA1eDAHL8TH8AA1evAAJdbAQABHMAA1fountwAAWADwACXEAAAuQ0APRzAANYSFsAA1gsug0q5CIKQAQABasAA1iFgA8ABAALAAPA6AMAAXqhCwADWNwABwADWVGrAANZUYAO4O8AA640APgY9HMAA1nAWwADWaS6DSrkIgpgBAAFqwADWgWADwAEAAsAA8D0AwABep07AANajwADWrwAAsRFgA7f5AR7AANa9uAIBAAEWwADW0C6DSrkIAD0cwADW7hbAANbhLrBpuQlWAQABg8AA1vLAHMT2AMAA/tA9isAA1wjAHL8Tg8AA1w/AHMT2PRzAANcrFsAA1yQug0q5CIKQAQABasAA1zpgA8ABAALAAPA9AMAAXqhCwADXUAABwADXbWrAANdtYAO4O8AA658APgY9HMAA14cWwADXgC6DSrkIgpgBAAFqwADXmGADwAEAAsAA8EAAwABep07AANe0wADXuwAAgylgA8AAlxoBHMAA170untwAAWADwACXGgAAuQ1OwADX1cAA19oAAJasYAPAAJcaARzAANfcLp7cAAFgA8AAlxoAALkNPYrAANfswBy/Ex/AANf3wABoLAIAAoPAANgBwBzFv4TAANgJwBzF5wA9HMAA2B8WwADYGC6DSrkIgpABAAFqwADYLmADwAEAAsAA8EAAwABeqELAANhCAAHAANhfasAA2F9gA7g7wADrsQA+BD0cwADYgBbAANh5LoNKuQiCmAEAAWrAANiRYAPAAQACwADwQwDAAF6nPYrAANiswBy/Ex/AANi3wABoAAEAARzAANjPFsAA2Mgug0q5CLC2AAAAAMAAXrYAPRzAANjtFsAA2OYug0q5CIKQAQABasAA2PxgA8ABAALAAPBDAMAAXqhCwADZFwABwADZNGrAANk0YAO4O8AA68MAPgU9HMAA2VgWwADZUS6DSrkIgpgBAAFqwADZaWADwAEAAsAA8EYAwABep07AANmYwADZngAAhIZdA8AA/r8BYAPAAJhgARzAANmgLrApAAFgA8AAmGAAALkOPYrAANm0wBy/Ex/AANm/wACYjwEAAYPAANnWwBzHQgA9HMAA2e0WwADZ5i6DSrkIgpABAAFqwADZ/GADwAEAAsAA8EYAwABeqELAANoaAAHAANo3asAA2jdgA7g7wADr1wA+BD0cwADaUxbAANpMLoNKuQiCmAEAAWrAANpkYAPAAQACwADwSQDAAF6nPYrAANp6wBy/Ex/AANqFwACYeQAAAAA9HMAA2qYWwADany6DSrkIgpABAAFqwADatWADwAEAAsAA8EkAwABeqELAANrLAAHAANroasAA2uhgA7g7wADr6wA+BD0cwADbBhbAANr/LoNKuQiCmAEAAWrAANsXYAPAAQACwADwTADAAF6nPYrAANsvwBy/Ex/AANs6wACYmwEAARzAANtSFsAA20sug0q5CLC2AAAAAMAAXrYAPRzAANtwFsAA22kug0q5CIKQAQABasAA239gA8ABAALAAPBMAMAAXqhCwADblwABwADbtGrAANu0YAO4O8AA6/0APgQ9HMAA29IWwADbyy6DSrkIgpgBAAFqwADb42ADwAEAAsAA8E8AwABepz2KwADb+8AcvxMfwADcBsAAmIMBAAEcwADcHhbAANwXLoNKuQiwtgAAAADAAF62AD0cwADcPBbAANw1LoNKuQiCkAEAAWrAANxLYAPAAQACwADwTwDAAF6oQsAA3GMAAcAA3IBqwADcgGADuDvAAOwRAD4FPRzAANymFsAA3J8ug0q5CIKYAQABasAA3LdgA8ABAALAAPBSAMAAXqdOwADc38AA3OQAAIC9YAPAAJcaARzAANzmLp7cAAFgA8AAlxoAALkNPYrAANz2wBy/Ex/AAN0BwACXLgEAAYPAAN0awBzJvAA9HMAA3TAWwADdKS6DSrkIgpABAAFqwADdP2ADwAEAAsAA8FIAwABeqELAAN1fAAHAAN18asAA3XxgA7g7wADsJQA+BD0cwADdmBbAAN2RLoNKuQiCmAEAAWrAAN2pYAPAAQACwADwVQDAAF6nPYrAAN2/wBy/Ex/AAN3KwACYcQEAARzAAN3gFsAA3dkug0q5CLAtAAAAAMAAXrMAPRzAAN38FsAA3fUug0q5CIKQAQABasAA3gtgA8ABAALAAPBVAMAAXqhCwADeIQABwADePmrAAN4+YAO4O8AA7DcAPgY9HMAA3mAWwADeWS6DSrkIgpgBAAFqwADecWADwAEAAsAA8FgAwABep07AAN6fwADesQAAsRpgA7glAR7AAN7RuC0BAAEWwADe5C6DSrkIAD0cwADfCBbAAN71LrBquQpWAQABg8AA3wzAHMsOAMAA/tA9isAA3yjAHL8Tg8AA3y/AHMsOPRzAAN9RFsAA30oug0q5CIKQAQABasAA32BgA8ABAALAAPBYAMAAXqhCwADffAABwADfmWrAAN+ZYAO4O8AA7EsAPgc9HMAA37IWwADfqy6DSrkIgpgBAAFqwADfw2ADwAEAAsAA8FsAwABep07AAN/pwADf8AAAg/RdA8AA/r8BYAPAAJfvARzAAN/yLrApAAFgA8AAl+8AALkOTsAA4A/AAOAUAACCbWADwACV/gEcwADgFi6e3AABYAPAAJX+AAC5DU7AAOA3wADgRQAAoYpgA8AAmB4BHMAA4FoWwADgUy6DSrkIsLMBAWADwACYHgFqwADgdF0DwAD+vwFgA8AAmB7AAPFOAMAAXro9isAA4IXAHL8TH8AA4JDAAJgdAwACg8AA4JfAHMvXhMAA4J/AHMwGAaGKhcAA4LTAHMwuPRzAAODTFsAA4Mwug0q5CIKQAQABasAA4OJgA8ABAALAAPBbAMAAXqhCwADg9QABwADhEmrAAOESYAO4O8AA7F8APgY9HMAA4TAWwADhKS6DSrkIgpgBAAFqwADhQWADwAEAAsAA8F4AwABep07AAOFowADhbQAAgL1gA8AAlxcBHMAA4W8untwAAWADwACXFwAAuQ1OwADhhsAA4Y8AAIJuYAPAAJgOARzAAOGRLp7cAAFgA8AAmA4AALkNPYrAAOGhwBy/Ex/AAOGswACYDQIAAoPAAOG9wBzNGITAAOHDwBzNQAA9HMAA4d0WwADh1i6DSrkIgpABAAFqwADh7GADwAEAAsAA8F4AwABeqELAAOIEAAHAAOIhasAA4iFgA7g7wADscwA+Bj0cwADiOBbAAOIxLoNKuQiCmAEAAWrAAOJJYAPAAQACwADwYQDAAF6nTsAA4mjAAOJxAACFl2ADwACXEAEcwADicy6e3AABYAPAAJcQAAC5DU7AAOKRwADimgAApVJgA8AAlxABHMAA4pwuntwAAWADwACXEAAAuQ09isAA4qzAHL8TH8AA4rfAAJg7AgACg8AA4snAHM3+hMAA4tPAHM4mAD0cwADi7RbAAOLmLoNKuQiCkAEAAWrAAOL8YAPAAQACwADwYQDAAF6oQsAA4w0AAcAA4ypqwADjKmADuDvAAOyHAD4EPRzAAONEFsAA4z0ug0q5CIKYAQABasAA41VgA8ABAALAAPBkAMAAXqc9isAA42nAHL8TH8AA43TAAJf2AQABHMAA44gWwADjgS6DSrkIsLYAAAAAwABetgA9HMAA46YWwADjny6DSrkIgpABAAFqwADjtWADwAEAAsAA8GQAwABeqELAAOPJAAHAAOPmasAA4+ZgA7g7wADsmwA+Bj0cwADkChbAAOQDLoNKuQiCmAEAAWrAAOQbYAPAAQACwADwZwDAAF6nTsAA5EDAAORFAACAvWADwAEAAgEcwADkThbAAORHLoNKuQiwtgAAAADAAF62TsAA5GnAAOR1AACwvGADwAD8VQEcwADkfhbAAOR3LoNKuQiwLQAAAADAAF6zPYrAAOSSwBy/Ex/AAOSdwACX7gIAAYPAAOS0wBzPgQGwvITAAOTHwBzPrj0cwADk5BbAAOTdLoNKuQiCkAEAAWrAAOTzYAPAAQACwADwZwDAAF6oQsAA5REAAcAA5S5qwADlLmADuDvAAOyvAD4EPRzAAOVNFsAA5UYug0q5CIKYAQABasAA5V5gA8ABAALAAPBqAMAAXqc9isAA5XfAHL8TH8AA5YLAAJf+AAAAAD0cwADlnBbAAOWVLoNKuQiCkAEAAWrAAOWrYAPAAQACwADwagDAAF6oQsAA5cQAAcAA5eFqwADl4WADuDvAAOzDAD4EPRzAAOX9FsAA5fYug0q5CIKYAQABasAA5g5gA8ABAALAAPBtAMAAXqc9isAA5iTAHL8TH8AA5i/AAJfkAQABHMAA5kUWwADmPi6DSrkIsLYAAAAAwABetgA9HMAA5mMWwADmXC6DSrkIgpABAAFqwADmcmADwAEAAsAA8G0AwABeqELAAOaIAAHAAOalasAA5qVgA7g7wADs1wA+Bj0cwADmvRbAAOa2LoNKuQiCmAEAAWrAAObOYAPAAQACwADwcADAAF6nTsAA5ufAAObqAACq4GADwAEAAgEcwADm8xbAAObsLoNKuQiwtgAAAADAAF62TsAA5xfAAOcgAAAfYAPAAJcQARzAAOciLp7cAAFgA8AAlxAAALkNPYrAAOcywBy/Ex/AAOc9wACXzQIAAoPAAOdIwBzRlITAAOdMwBzRwQA9HMAA52YWwADnXy6DSrkIgpABAAFqwADndWADwAEAAsAA8HAAwABeqELAAOeHAAHAAOekasAA56RgA7g7wADs6wA+Bj0cwADnuxbAAOe0LoNKuQiCmAEAAWrAAOfMYAPAAQACwADwcwDAAF6nTsAA5+TAAOfnAACq4GADwAEAAgEcwADn8BbAAOfpLoNKuQiwtgAAAADAAF62TsAA6BTAAOgdAAAfYAPAAJcQARzAAOgfLp7cAAFgA8AAlxAAALkNPYrAAOgvwBy/Ex/AAOg6wACXvgIAAoPAAOhEwBzSfoTAAOhIwBzSqwA9HMAA6GIWwADoWy6DSrkIgpABAAFqwADocWADwAEAAsAA8HMAwABeqELAAOiCAAHAAOifasAA6J9gA7g7wADs/wA+Bz0cwADothbAAOivLoNKuQiCmAEAAWrAAOjHYAPAAQACwADwdgDAAF6nTsAA6N/AAOjiAACq4GADwAEAAgEcwADo6xbAAOjkLoNKuQiwtgAAAADAAF62TsAA6Q/AAOkUAACFzWADwACXEAEcwADpFi6e3AABYAPAAJcQAAC5DU7AAOk0wADpOgAAhc9gA8AAlxABHMAA6TwuntwAAWADwACXEAAAuQ09isAA6UzAHL8TH8AA6VfAAJevAwADg8AA6WHAHNNohMAA6WXAHNOVhcAA6WvAHNO9AD0cwADpghbAAOl7LoNKuQiCkAEAAWrAAOmRYAPAAQACwADwdgDAAF6oQsAA6aIAAcAA6b9qwADpv2ADuDvAAO0TAD4GPRzAAOneFsAA6dcug0q5CIKYAQABasAA6e9gA8ABAALAAPB5AMAAXqdOwADqFsAA6h0AAIJJYAPAAJcQARzAAOofLp7cAAFgA8AAlxAAALkNTsAA6kPAAOpNAABbXQPAAP6/AWADwACXEAEcwADqTy6wKQABYAPAAJcQAAC5Dj2KwADqY8AcvxMfwADqbsAAl5YCAAKDwADqdsAc1ISEwADqfsAc1KwAPRzAAOqZFsAA6pIug0q5CIKQAQABasAA6qhgA8ABAALAAPB5AMAAXqhCwADqwQABwADq3mrAAOreYAO4O8AA7ScAPgY9HMAA6vwWwADq9S6DSrkIgpgBAAFqwADrDWADwAEAAsAA8HwAwABep07AAOszwADrNwAAmiZgA8AAlxABHMAA6zkuntwAAWADwACXEAAAuQ1OwADrXcAA62cAAFtdA8AA/r8BYAPAAJcQARzAAOtpLrApAAFgA8AAlxAAALkOPYrAAOt9wBy/Ex/AAOuIwACXngIAAoPAAOuPwBzVcITAAOuUwBzVmAA9HMAA668WwADrqC6DSrkIgpABAAFqwADrvmADwAEAAsAA8HwAwABeqELAAOvWAAHAAOvzasAA6/NgA7g7wADtOQA+Bz0cwADsDxbAAOwILoNKuQiCmAEAAWrAAOwgYAPAAQACwADwfwDAAF6nTsAA7ETAAOxOAACF0mADwACXEAEcwADsUC6e3AABYAPAAJcQAAC5DU7AAOxuwADscwAAga9gA8AAlxABHMAA7HUuntwAAWADwACXEAAAuQ1OwADsk8AA7J0AAIXTYAPAAJcQARzAAOyfLp7cAAFgA8AAlxAAALkNPYrAAOyvwBy/Ex/AAOy6wACXhwMAA4PAAOzJwBzWXITAAOzUwBzWhIXAAOzawBzWrAA9HMAA7PUWwADs7i6DSrkIgpABAAFqwADtBGADwAEAAsAA8H8AwABeqELAAO0aAAHAAO03asAA7TdgA7g7wADtTQA+Bj0cwADtXhbAAO1XLoNKuQiCmAEAAWrAAO1vYAPAAQACwADwggDAAF6nTsAA7Z/AAO2rAACfC2ADwACXFwEcwADtrS6e3AABYAPAAJcXAAC5DU7AAO3LwADt0QAAgJZgA8AAlxABHMAA7doWwADt0y6DSrkIscEBAWADwACXEAE2FsAA7eounty5DQFgA8AAlxAAwABesT2KwADt+cAcvxMfwADuBMAAl3cCAAKDwADuHsAc13OEwADuK8Ac15sAPRzAAO5CFsAA7jsug0q5CIKQAQABasAA7lFgA8ABAALAAPCCAMAAXqhCwADucgABwADuj2rAAO6PYAO4O8AA7WEAPgc9HMAA7qoWwADuoy6DSrkIgpgBAAFqwADuu2ADwAEAAsAA8IUAwABep07AAO7ewADu6wAAsaZgA8AAlxABHMAA7u0untwAAWADwACXEAAAuQ1OwADvBMAA7wcAAKrgYAPAAQACARzAAO8QFsAA7wkug0q5CLHCAAAAAMAAXrdOwADvOsAA70AAAICWYAPAAJcQARzAAO9CLp7cAAFgA8AAlxAAALkNPYrAAO9SwBy/Ex/AAO9dwACXbQMAA4PAAO90wBzYdoTAAO+CwBzYnoXAAO+GwBzYywA9HMAA750WwADvli6DSrkIgpABAAFqwADvrGADwAEAAsAA8IUAwABeqELAAO/BAAHAAO/easAA795gA7g7wADtcwA+Bj0cwADwBhbAAO//LoNKuQiCmAEAAWrAAPAXYAPAAQACwADwiADAAF6nTsAA8FnAAPBmAACva10DwAD+vwFgA8AAl24BHMAA8GgusCkAAWADwACXbgAAuQ5OwADwgcAA8I4AALGpYAPAAPxVARzAAPCXFsAA8JAug0q5CLAtAAAAAMAAXrM9isAA8KvAHL8TH8AA8LbAAJdNAgABg8AA8NHAHNmSAbGphMAA8PnAHNnBPRzAAPEXFsAA8RAug0q5CIKQAQABasAA8SZgA8ABAALAAPCIAMAAXqhCwADxSAABwADxZWrAAPFlYAO4O8AA7YcAPgY9HMAA8YcWwADxgC6DSrkIgpgBAAFqwADxmGADwAEAAsAA8IsAwABep07AAPG7wADxxAAAiOVgA8ABAAIBHMAA8c0WwADxxi6DSrkIsLYAAAAAwABetk7AAPH3wADx/gAAglVdA8AA/r8BYAPAAJcQARzAAPIALrApAAFgA8AAlxAAALkOPYrAAPIUwBy/Ex/AAPIfwACXPgIAAoPAAPI9wBzahoTAAPJHwBzaswA9HMAA8l8WwADyWC6DSrkIgpABAAFqwADybmADwAEAAsAA8IsAwABeqELAAPKKAAHAAPKnasAA8qdgA7g7wADtmQA+Bj0cwADywRbAAPK6LoNKuQiCmAEAAWrAAPLSYAPAAQACwADwjgDAAF6nTsAA8vTAAPL/AACCb2ADwACXEAEcwADzAS6e3AABYAPAAJcQAAC5DU7AAPMWwADzHgAAsaxgA8AA/FUBHMAA8ycWwADzIC6DSrkIsC0AAAAAwABesz2KwADzO8AcvxMfwADzRsAAlw8CAAKDwADzU8Ac23iEwADzX8Ac26AAPRzAAPN4FsAA83Eug0q5CIKQAQABasAA84dgA8ABAALAAPCOAMAAXqhCwADzmwABwADzuGrAAPO4YAO4O8AA7a0APgQ9HMAA89kWwADz0i6DSrkIgpgBAAFqwADz6mADwAEAAsAA8JEAwABepz2KwAD0BcAcvxMfwAD0EMAAlwIBAAEcwAD0KxbAAPQkLoNKuQiwtgAAAADAAF62AD0cwAD0SRbAAPRCLoNKuQiCkAEAAWrAAPRYYAPAAQACwADwkQDAAF6oQsAA9HMAAcAA9JBqwAD0kGADuDvAAO2/AD4GPRzAAPSxFsAA9Koug0q5CIKYAQABasAA9MJgA8ABAALAAPCUAMAAXqdOwAD05MAA9OoAAJlaYAPAAQACARzAAPTzFsAA9Owug0q5CLC2AAAAAMAAXrZOwAD1FsAA9RsAAIJtYAPAAJX5ARzAAPUdLp7cAAFgA8AAlfkAALkNPYrAAPUtwBy/Ex/AAPU4wACW9gIAAoPAAPVMwBzdAITAAPVTwBzdLQA9HMAA9WkWwAD1Yi6DSrkIgpABAAFqwAD1eGADwAEAAsAA8JQAwABeqELAAPWTAAHAAPWwasAA9bBgA7g7wADt0wA+Bj0cwAD11BbAAPXNLoNKuQiCmAEAAWrAAPXlYAPAAQACwADwlwDAAF6nTsAA9hLAAPYXAACAvWADwACXFwEcwAD2GS6e3AABYAPAAJcXAAC5DU7AAPYwwAD2OQAAgm5gA8AAmA4BHMAA9jsuntwAAWADwACYDgAAuQ09isAA9kvAHL8TH8AA9lbAAJbpAgACg8AA9m3AHN3rhMAA9nPAHN4TAD0cwAD2jRbAAPaGLoNKuQiCkAEAAWrAAPacYAPAAQACwADwlwDAAF6oQsAA9roAAcAA9tdqwAD212ADuDvAAO3nAD4FPRzAAPb1FsAA9u4ug0q5CIKYAQABasAA9wZgA8ABAALAAPCaAMAAXqdOwAD3J8AA9ywAAIJtYAPAAJX+ARzAAPcuLp7cAAFgA8AAlf4AALkNPYrAAPc+wBy/Ex/AAPdJwACW3AEAAYPAAPdUwBze0QA9HMAA92oWwAD3Yy6DSrkIgpABAAFqwAD3eWADwAEAAsAA8JoAwABeqELAAPeRAAHAAPeuasAA965gA7g7wADt+wA+Bj0cwAD3yRbAAPfCLoNKuQiCmAEAAWrAAPfaYAPAAQACwADwnQDAAF6nTsAA9/3AAPgIAACCb2ADwACXEAEcwAD4Ci6e3AABYAPAAJcQAAC5DU7AAPgjwAD4KAAAgm1gA8AAlf4BHMAA+CountwAAWADwACV/gAAuQ09isAA+DrAHL8TH8AA+EXAAJbSAgACg8AA+E3AHN+GhMAA+FnAHN+uAD0cwAD4bxbAAPhoLoNKuQiCkAEAAWrAAPh+YAPAAQACwADwnQDAAF6oQsAA+JMAAcAA+LBqwAD4sGADuDvAAO4PAD4GPRzAAPjQFsAA+Mkug0q5CIKYAQABasAA+OFgA8ABAALAAPCgAMAAXqdOwAD5CcAA+Q0AAIPWYAPAAJcQARzAAPkPLp7cAAFgA8AAlxAAALkNTsAA+TXAAPk7AACGSl0DwAD+vwFgA8AAlsIBHMAA+T0usCkAAWADwACWwgAAuQ49isAA+VHAHL8TH8AA+VzAAJbBAgACg8AA+WbAHOBshMAA+WvAHOCUAD0cwAD5ghbAAPl7LoNKuQiCkAEAAWrAAPmRYAPAAQACwADwoADAAF6oQsAA+asAAcAA+chqwAD5yGADuDvAAO4hAD4GPRzAAPnkFsAA+d0ug0q5CIKYAQABasAA+fVgA8ABAALAAPCjAMAAXqdOwAD6GsAA+iYAAJ8LYAPAAJcXARzAAPooLp7cAAFgA8AAlxcAALkNTsAA+kHAAPpGAACCbWADwACV/gEcwAD6SC6e3AABYAPAAJX+AAC5DT2KwAD6WMAcvxMfwAD6Y8AAlrQCAAKDwAD6bMAc4VmEwAD6ecAc4YEAPRzAAPqPFsAA+ogug0q5CIKQAQABasAA+p5gA8ABAALAAPCjAMAAXqhCwAD6tAABwAD60WrAAPrRYAO4O8AA7jUAPgc9HMAA+u4WwAD65y6DSrkIgpgBAAFqwAD6/2ADwAEAAsAA8KYAwABep07AAPsfwAD7JAAAgm1gA8AAlf4BHMAA+yYuntwAAWADwACV/gAAuQ1OwAD7P8AA+0kAALGyYAPAAJaoARzAAPtSFsAA+0sug0q5CLHBAQFgA8AAlqgBNhbAAPtiLp7cuQ0BYAPAAJaoAMAAXrFOwAD7esAA+4YAALGzYAPAAJX+ARzAAPuPFsAA+4gug0q5CLHBAQFgA8AAlf4BNhbAAPufLp7cuQ0BYAPAAJX+AMAAXrE9isAA+67AHL8TH8AA+7nAAJanAwADg8AA+8DAHOI/hMAA+8bAHOJnhcAA+9HAHOKsAD0cwAD77hbAAPvnLoNKuQiCkAEAAWrAAPv9YAPAAQACwADwpgDAAF6oQsAA/BQAAcAA/DFqwAD8MWADuDvAAO5JAD4FPRzAAPxQFsAA/Ekug0q5CIKYAQABasAA/GFgA8ABAALAAPCpAMAAXqdOwAD8iMAA/JMAAIJvYAPAAJcQARzAAPyVLp7cAAFgA8AAlxAAALkNPYrAAPylwBy/Ex/AAPywwACWmQEAAYPAAPy5wBzjkAA9HMAA/NUWwAD8zi6DSrkIgpABAAFqwAD85GADwAEAAsAA8KkAwABeqELAAPz9AAHAAP0aasAA/RpgA7g7wADuXQA+BT0cwAD9OhbAAP0zLoNKuQiCmAEAAWrAAP1LYAPAAQACwADwrADAAF6nTsAA/XPAAP15AACAlmADwACXEAEcwAD9ghbAAP17LoNKuQixwQEBYAPAAJcQATYWwAD9ki6e3LkNAWADwACXEADAAF6xPYrAAP2hwBy/Ex/AAP2swACWjQEAAYPAAP22wBzkRQA9HMAA/c0WwAD9xi6DSrkIgpABAAFqwAD93GADwAEAAsAA8KwAwABeqELAAP32AAHAAP4TasAA/hNgA7g7wADucQA+BT0cwAD+MhbAAP4rLoNKuQiCmAEAAWrAAP5DYAPAAQACwADwrwDAAF6nTsAA/mPAAP5vAACxtmADwAEAAgEcwAD+eBbAAP5xLoNKuQixwgAAAADAAF63PYrAAP6UwBy/Ex/AAP6fwACWgQEAAYPAAP6owBzlFwA9HMAA/sUWwAD+vi6DSrkIgpABAAFqwAD+1GADwAEAAsAA8K8AwABeqELAAP7tAAHAAP8KasAA/wpgA7g7wADugwA+BT0cwAD/LBbAAP8lLoNKuQiCmAEAAWrAAP89YAPAAQACwADwsgDAAF6nTsAA/2DAAP9sAACxtmADwAEAAgEcwAD/dRbAAP9uLoNKuQixwgAAAADAAF63PYrAAP+RwBy/Ex/AAP+cwACWdQEAAYPAAP+owBzl0QA9HMAA/8UWwAD/vi6DSrkIgpABAAFqwAD/1GADwAEAAsAA8LIAwABeqELAAP/wAAHAAQANasABAA1gA7g7wADulwA+Bj0cwAEAKRbAAQAiLoNKuQiCmAEAAWrAAQA6YAPAAQACwADwtQDAAF6nTsABAF3AAQBiAACCbWADwACV+QEcwAEAZC6e3AABYAPAAJX5AAC5DU7AAQCCwAEAjAAAhdJgA8AAlxABHMABAI4untwAAWADwACXEAAAuQ09isABAJ7AHL8TH8ABAKnAAJZpAgACg8ABAK/AHOaLhMABALXAHOazAD0cwAEA0BbAAQDJLoNKuQiCkAEAAWrAAQDfYAPAAQACwADwtQDAAF6oQsABAPUAAcABARJqwAEBEmADuDvAAO6pAD4GPRzAAQExFsABASoug0q5CIKYAQABasABAUJgA8ABAALAAPC4AMAAXqdOwAEBacABAXMAAIXSYAPAAJcQARzAAQF1Lp7cAAFgA8AAlxAAALkNTsABAZLAAQGXAACCbWADwACV+QEcwAEBmS6e3AABYAPAAJX5AAC5DT2KwAEBqcAcvxMfwAEBtMAAll0CAAKDwAEBvcAc53GEwAEByMAc55kAPRzAAQHeFsABAdcug0q5CIKQAQABasABAe1gA8ABAALAAPC4AMAAXqhCwAECBgABwAECI2rAAQIjYAO4O8AA7rsAPgc9HMABAkIWwAECOy6DSrkIgpgBAAFqwAECU2ADwAEAAsAA8LsAwABep07AAQJ6wAEChwAAsaZgA8AAlxABHMABAokuntwAAWADwACXEAAAuQ1OwAECp8ABAq4AAIPFYAPAAJcQARzAAQKwLp7cAAFgA8AAlxAAALkNTsABAs3AAQLSAACCbWADwACV+QEcwAEC1C6e3AABYAPAAJX5AAC5DT2KwAEC5MAcvxMfwAEC78AAllEDAAODwAEC+MAc6FeEwAEDBsAc6H+FwAEDDsAc6KcAPRzAAQMkFsABAx0ug0q5CIKQAQABasABAzNgA8ABAALAAPC7AMAAXqhCwAEDTAABwAEDaWrAAQNpYAO4O8AA7s0APgg9HMABA4YWwAEDfy6DSrkIgpgBAAFqwAEDl2ADwAEAAsAA8L4AwABep07AAQO8wAEDwQAAqtxgA8AAlxABHMABA8MuntwBAWADwACXEAABmAgpuQ1OwAED8MABA/oAAIXSYAPAAJcQARzAAQP8Lp7cAQFgA8AAlxAAAZgIKbkNTsABBCnAAQQwAACsx2ADwACXEAEcwAEEMi6e3AEBYAPAAJcQAAGYCCm5DU7AAQRewAEEYwAAgm1gA8AAlfkBHMABBGUuntwAAWADwACV+QAAuQ09isABBHXAHL8TH8ABBIDAAJZEBAAEg8ABBIfAHOluhMABBI3AHOmZhcABBJjAHOnEhsABBKDAHOnvAD0cwAEEthbAAQSvLoNKuQiCkAEAAWrAAQTFYAPAAQACwADwvgDAAF6oQsABBNwAAcABBPlqwAEE+WADuDvAAO7fAD4HPRzAAQUVFsABBQ4ug0q5CIKYAQABasABBSZgA8ABAALAAPDBAMAAXqdOwAEFSsABBVQAAIXSYAPAAJcQARzAAQVWLp7cAAFgA8AAlxAAALkNTsABBXPAAQV4AACBr2ADwACV+QEcwAEFei6e3AABYAPAAJX5AAC5DU7AAQWXwAEFoQAAhdNgA8AAlfkBHMABBaMuntwAAWADwACV+QAAuQ09isABBbPAHL8TH8ABBb7AAJYwAwADg8ABBcTAHOq/hMABBc/AHOrnhcABBdXAHOsPAD0cwAEF8BbAAQXpLoNKuQiCkAEAAWrAAQX/YAPAAQACwADwwQDAAF6oQsABBhUAAcABBjJqwAEGMmADuDvAAO7xAD4EPRzAAQZRFsABBkoug0q5CIKYAQABasABBmJgA8ABAALAAPDEAMAAXqc9isABBnvAHL8TH8ABBobAAJYgAAAAAD0cwAEGqhbAAQajLoNKuQiCkAEAAWrAAQa5YAPAAQACwADwxADAAF6oQsABBtIAAcABBu9qwAEG72ADuDvAAO8DAD4EPRzAAQcTFsABBwwug0q5CIKYAQABasABByRgA8ABAALAAPDHAMAAXqc9isABB0LAHL8TH8ABB03AAJYWAQABHMABB2QuntwAAWADwACXEAAAuQ0APRzAAQd8FsABB3Uug0q5CIKQAQABasABB4tgA8ABAALAAPDHAMAAXqhCwAEHqQABwAEHxmrAAQfGYAO4O8AA7xUAPgU9HMABB9wWwAEH1S6DSrkIgpgBAAFqwAEH7WADwAEAAsAA8MoAwABep07AAQgQwAEIGwAAhi1dA8AA/r8BYAPAAJX5ARzAAQgdLrApAAFgA8AAlfkAALkOPYrAAQgxwBy/Ex/AAQg8wACWCQEAAYPAAQhFwBzs8gA9HMABCGEWwAEIWi6DSrkIgpABAAFqwAEIcGADwAEAAsAA8MoAwABeqELAAQiAAAHAAQidasABCJ1gA7g7wADvJwA+BT0cwAEItRbAAQiuLoNKuQiCmAEAAWrAAQjGYAPAAQACwADwzQDAAF6nTsABCOvAAQjwAACCbV0DwAD+vwFgA8AAlfkBHMABCPIusCkAAWADwACV+QAAuQ49isABCQbAHL8TH8ABCRHAAJX4AQABg8ABCRzAHO2uAD0cwAEJMhbAAQkrLoNKuQiCkAEAAWrAAQlBYAPAAQACwADwzQDAAF6oQsABCVMATsABCXbAAQmIAAClwmADwABDNAEcwAEJmRbAAQmSLoNKuQixwwEBYAPAAEM0ATTAAQm3A8ABCbfAAQn8AAAAAAAAAGADwABDNAE+AUrAAQnCAR7AAQnbwABDNgEAARbAAQnuLoNKuQgAAMAAXrBJwAEKAyEcwAEKGYPAAQoHwBzuLEgBAAErAMAA/3U+AT2KwAEKKsAcvxMcwAEKNoLAAQoxwBy/E7CZAQABg8ABCkzAHO4sAMAAlec/SsABCmoBJsABCmoBgsABCnHAHL8TXwMAAAa5DoCiwAEKfsABCobAAQr9AACwKQAAAAEDwAEKocABCv0AAAEAAIJ6YAPAAJXZAWADwACV2QEAAAHAAQqoAAAAsCpgA8AA/FUBasABCrVgA8AA/FUAXQPAAP6/AV8DAAABPgFKwAEKwwEcwAEK0RbAAQrKLoNKuQiwKQIBXwMAAAE2FsABCtounty5DQFfAwAAAbAqgMABCu3AHO84wABesgAAHLzqABy+HQAc7v4AHO+gAAAAAwK5EoCiwAELAsABCwjAAQ3jA7HEAAABYAHAAP9oAAFgAcAAXxUDBLkUgKLAAQtKwAELVQmlQABgA8AAToUABLkVgKLAAQtxwAELfQmwaQBdA8AA/r8BYAO3+QAEuRaAosABC5/AAQuxCbBqAF0DwAD+vwFgA7glAAEFuRyAosABC7bAAQu2wAEMDAAAAAPAAQvHwAEMDAAAAAMDA8ABC9QAAASlQGADwABOhQDAAQvmAAAEsGldA8AA/r8BYAO3+QDAAQv5AAAEsGpdA8AA/r8BYAO4JQAAYAO5EgE/BAgBuRSAAMAc8FEIAbkVgQDAHPBhCAG5FoIAwBzwdgkBwAELtsAA/34AAAAAAwa5GICiwAEMEcABDCvAAQyxAACxxQFqwAEMEmADwAD/aAIAAAEDwAEMPMABDLEAAAABAQHAAQxIAAAAg0pgA8AAXqUAAGADvzoBPgFKwAEMVgEcwAEMhhbAAQxpFsABDF0upUC5FLHGwABOjrHHAQABgMABDKbAHPD0AL+2BrkZgKLAAQy2wAEMysABDVEAALHIAWrAAQy3YAPAAP9oAgAAAQPAAQzUwAENUQAAAAEBAcABDOAAAACDSmADwABepQAAYAPAAJXZAT4BSsABDO4BHsABDQi5DAMAA4DAAQ0kwBzxcRbAAQ0sLrBpuRUWwAENOi6warkWAAa5GoCiwAENVsABDW3AAQ3hAACxyQFqwAENV2ADwAD/aAIAAAEDwAENhMABDeEAAAABAQHAAQ2QAAAAg0pgA8AAXqUAAGADvIgBPgFKwAENngEcwAENyxbAAQ3AFsABDbEWwAENpS6lQLkUsADAAE6Xscq9PksBAAEcwAEN04DAAQ3MwBzx7bHLAAAAAMAAXrQAwAD+zgAAHPDAABzxPQAc8bkAHPJPAAAAAwK5HYCiwAEN5sABDezAARAWA7HMAAABYAHAAP9oAAFgAcAAXxwBBLkfgKLAAQ4uwAEOOQmlQABgA8AAToUAAQW5JYCiwAEOPsABDj7AAQ5hAAAAA8ABDk/AAQ5hAAAAAQEBwAEOVQAABKVAYAPAAE6FAABgA7kdAT8CCAG5H4AAwBzyxgkBwAEOPsAA/34AAAAAAwa5IYCiwAEOZsABDnfAAQ8BAACxzQFqwAEOZ2ADwAD/aAIAAAEDwAEOicABDwEAAAACAgLAAQ6TAAAAhEBgA8AAXlYAwAEOpwAAAICWYAO/OgAAXAE+AT0cwAEO1BbAAQ7AFsABDrQupUC5H7HGwABOjrHOAgACgMABDvHAHPMrgcABDvfAHPM7AL+3BrkigKLAAQ8GwAEPF8ABD3YAALHPAWrAAQ8HYAPAAP9oAgAAAQPAAQ8iwAEPdgAAAAICAsABDywAAACEQGADwABeVgDAAQ86AAAAg/NgA8AAldkAAFwBPgE9HsABD1e4wAIAAoDAAQ9nwBzzt4HAAQ9twBzzxwAGuSOAosABD3vAAQ+MwAEQFAAAsdABasABD3xgA8AA/2gCAAABA8ABD6TAARAUAAAAAgICwAEPrgAAAIRAYAPAAF5WAMABD78AAACAlmADvIgAAFwBPgE9HMABD9GAwAEPzMAc9C6x0QEAARzAARABFsABD/UWwAEP5hbAAQ/aLqVAuR+wAMAATpexyr0+gLsBAAGBwAEQCcAc9D4AwAD+1ADAAF5hAAAc8vcAHPODABzz+gAc9KAAAAADAAAAAYCiABz0uAAb/zUAHAK+ABwiywAcK24AHCxBABwtigAcL0sAHD+9ABxDaAAcVdAAHFe7ABxj+gAcbEUAHHVsABy74gAc77UAHPJkABz0tQAAABEAHPS4AAAAAAACBrkmsdKApAAAA4FZAADAAGpJAAEBAoZysdOBkAAAwABqegABAQGx1IHNAADAAEymAAEBAaUHAAAABAK5J4Ckgh2CI4lHA7HVAAABYAHAAP9oAAAQBLkpgKSCbIJ5BiAAYAPAAQACAWqCc2ADwAEAAsAA8WYEuSqApILsgv8GXgBgA8ABAAIBaoL2YAPAAQACwADxaAS5K4Ckg3GDlAacugBgA8ABAAIBaoODYAPAAQACwADxagS5LICkg+2EAgZcAGADwAEAAgFqg/hgA8ABAALAAPFtBLktgKSEZIR/Bq8lAGADwAEAAgFqhHJgA8ABAALAAPFvBLkugKSEu4TIBoHpAGADwAEAAgFqhMJgA8ABAALAAPFyBLkvgKSFG4U5BrHWAGADwAEAAgFqhStgA8ABAALAAPF1BLkwgKSFi4WnBrHXAGADwAEAAgFqhZpgA8ABAALAAPF4BLkxgKSGC4YcBmEAYAPAAQACAWqGFGADwAEAAsAA8XsEuTKApIZyhooGri0AYAPAAQACAWqGfmADwAEAAsAA8X0EuTOApIbQhtkGsdkAYAPAAQACAWqG1WADwAEAAsAA8YAEuTSApIcnh0AGsdoAYAPAAQACAWqHNGADwAEAAsAA8YMEuTWApIeWh78GsdsAYAPAAQACAWqHq2ADwAEAAsAA8YYEuTaApIgaiE0GsdwAYAPAAQACAWqINGADwAEAAsAA8YkEuTeApIihiMYGsd0AYAPAAQACAWqItGADwAEAAsAA8YwEuTiApIkciUUGsd4AYAPAAQACAWqJMWADwAEAAsAA8Y8BBbk6AAAAAAQAAAMAAAAAAAAAAABgA7knAT8BCQEAwAD/fgAAAAAAAAAc950AAAAAArk7gKSJZYlrjvUDsd8AAAFgAcAA/2gAAA4EuT2ApImsidUGIABgA8AAakoBaom5YAPAAGpawADxkgS5PoCkikaKdQZeAGADwABqSgFqilZgA8AAalrAAPGmBLk/gKSKsIrWBrHgAGADwABqSgFqisFgA8AAalrAAPG6BLlAgKSLLYteBlwAYAPAAGpKAWqLPmADwABqWsAA8c4EuUGApIvBi+gGXQBgA8AAakoBaovSYAPAAGpawADx5AS5QoCkjDmMdAax1gBgA8AAakoBaoxPYAPAAGpawADx+AS5Q4CkjL+M5wax4QBgA8AAakoBaozRYAPAAGpawADyDgS5RICkjP6NIQax4gBgA8AAakoBao0RYAPAAGpawADyIgS5RYCkjTeNXwax4wBgA8AAakoBao1OYAPAAGpawADyNgS5RoCkjXWNiwax5ABgA8AAakoBao2HYAPAAGpKwADxkgS5R4CkjaKNzwZhAGADwABqSgFqjbFgA8AAalrAAPJKBLlIgKSN5o4fBrHXAGADwABqSgFqjftgA8AAalrAAPJeBLlJgKSONo5sBrHlAGADwABqSgFqjlNgA8AAalrAAPJ1BLlKgKSOwI7zBq4tAGADwABqSgFqjtJgA8AAalrAAPKJAQW5TAAAAAAEAAADAAAAAAAAAAAAYAO5OwE/AQkBAMAA/34AAAAAAAAAHPmxAAAAAAK5TYCkjxePHZhnA6TwAAABYAHAAP9oAAAQBLlPgKSPh4/aBZyqAGADwABMuAEej5rAAEzoAgACao+uYAPAAGpawADyoGqP0mADwABqe8AA8rQABLlQgKSQT5B7BV4AYAPAAEy4AR6QXcAATOIBAAFqkHNgA8AAakrAAPGmAAS5UYCkkOOREQVcAGADwABMuAEekPLAAEziAQABapEIYAPAAGpKwADxzgAEuVKApJF4kcEFXQBgA8AATLgBHpGNwABM6AIAAmqRoWADwABqSsAA8eRqkblgA8AAanvAAPK0AAS5U4CkkiOSdgWx1gBgA8AATLgBHpI9wABM6AIAAmqSUWADwABqSsAA8fhqkm5gA8AAanvAAPLFAAS5VICkksKTBQWx5wBgA8AATLgBHpLhwABM4gEAAWqS92ADwABqSsAA8fgABLlVgKSTYZOsBbHhAGADwABMuAEek3fAAEzoAgACapOLYAPAAGpKwADyDmqTpGADwABqe8AA8rQABLlWgKST9JQpBbHoAGADwABMuAEelAnAAEziAQABapQfYAPAAGpKwADyDgAEuVeApJRElIcFsekAYAPAAEy4AR6UWsAATOIBAAFqlHBgA8AAalrAAPLZAAS5WICklKKU+wWCTwBgA8AATLgBHpS4wABM6AIAAmqUzGADwABqWsAA8vBqlPNgA8AAanvAAPLFAAS5WYCklRaVQAWV+wBgA8AATLgBHpUjwABM5QEAASdIAAS5WoCklVuVhQVhAGADwABMuAEelWjAAEziAQABapV+YAPAAGpKwADySgAEuVuApJWglfsFhBAAYAPAAEy4AR6Vt8AATOgCAAJqlctgA8AAalrAAPMHapXzYAPAAGp7wADyxQAEuVyApJYWljIFJwBgA8AATLgBHpYiwABM5gAAAAAEuV2ApJZNloMFsdcAYAPAAEy4AR6WYMAATOIBAAFqlnZgA8AAakrAAPJeAAS5XoCkl2uYZQWx6gBdA8AA/r8BYAPAAEy4ATGXe2ADwABMuA8al4G5TxqXjblQGpeauVEal6i5UhqXtrlTGpfJuVQal+G5VRqX8LlWGpgEuVcamBO5WBqYIrlZGpguuVoamDq5WxqYSrlcGphVuV0BBblgAAAAAAQAAAMAAAAAAAAAAABgA7lNAT8BCQEAwAD/fgAAAAAAAAAc/TEAAAAAArlhgKSYhJiKpCkDpPEAAAFgAcAA/2gAABkEuWOApJjEmPcFsesAYAPAAQCDAR6Y1cABAPYCAAACgbwnh41OJ5oNBLlkgKSZMpl1BbHsAGADwAEAgwEemU7AAQD2AgAAAoG8J4eNTiex7QS5ZYCkmaqZ2wWx7gBgA8ABAIMBHpm6wAEA9gIAAAKBvCeHjU4nh44EuWaApJoQmkEFse8AYAPAAQCDAR6aIMABAPYCAAACgbwnh41OJ7HwBLlngKSafZrCBbHxAGADwAEAgwEemprAAQD2AgAAAoG8J4eNTiex8gS5aICkmv2bQAWx8wBgA8ABAIMBHpsZwAEA9gIAAAKBvCeHjU4nsfQEuWmApJt4m68FsfUAYAPAAQCDAR6bi8ABAPYCAAACgbwnh41OJ7H2BLlqgKSb5JwVBbH3AGADwAEAgwEem/TAAQD2AgAAAoG8J4eNTieDNwS5a4CknE2chAWx+ABgA8ABAIMBHpxgwAEA9gIAAAKBvCeHjU4nnyYEuWyApJy+nPkFsfkAYAPAAQCDAR6c08ABAPYCAAACgbwnh41OJ4ZzBLltgKSdPJ2PBbH6AGADwAEAgwEenWDAAQD2AgAAAoG8J4eNTiex+wS5boCkncqeDQWx/ABgA8ABAIMBHp3mwAEA9gIAAAKBvCeHjU4nsf0EuW+ApJ5BnnAFsf4AYAPAAQCDAR6eUMABAPYCAAACgbwnh41OJ7H/BLlwgKSeqp7lBbIAAGADwAEAgwEenr/AAQD2AgAAAoG8J4eNTieyAQS5cYCknxyfUQWyAgBgA8ABAIMBHp8uwAEA9gIAAAKBvCeHjU4nsgMEuXKApJ+Jn8AFsgQAYAPAAQCDAR6fnMABAPYCAAACgbwnh41OJ7IFBLlzgKSf+6A+BbIGAGADwAEAgwEeoBfAAQD2AgAAAoG8J4eNTieyBwS5dICkoHOgpAWyCABgA8ABAIMBHqCDwAEA9gIAAAKBvCeHjU4nsgkEuXWApKDioSsFsgoAYAPAAQCDAR6hAcABAPYCAAACgbwnh41OJ7ILBLl2gKSha6G4BbIMAGADwAEAgwEeoYzAAQD2AgAAAoG8J4eNTieyDQS5d4CkofKiLQWyDgBgA8ABAIMBHqIHwAEA9gIAAAKBvCeHjU4nsg8EuXiApKJwosMFshAAYAPAAQCDAR6ilMABAPYCAAACgbwnh41OJ7IRBLl5gKSi9qMfBbISAGADwAEAgwEeowDAAQD2AgAAAoG8J4eNTieChQS5eoCko1WjkAWyEwBgA8ABAIMBHqNmwAEA9gIAAAKBvCeB204nshQEuXuApKPVpCcFshUAYAPAAQCDAR6j9sABAPYCAAACgbwngdtOJ7IWAQW5fQAAAAAEAAADAAAAAAAAAAAAYAO5YQE/AQkBAMAA/34AAAAAAAAAHQFkAAAAAAAAAAGApAAdAXAAHPVPABz3pgAc+boAHP06AB0BbQAAAAQAHQFwAAAAAAACBrl+sheApQAAAoD4AAC9/gABAQGyGIEuAADAAE4EAAEBAaUJAAAAAQK5f4ClgWiBd4HiB6TyAAABYAHAAP9oAAAAAQW5hQAAAAAEAAADAAAAAAAAAAAAYAO5fwE/AQkBAMAA/34AAAAAAga5gYClgbKBw4HKAQKWewAAAAEDgcqBygAAAAAAAABgA74lAAa5g4Clgc+B24HgAAKCnwAAAAEDgd6B4AAAAAAAAABgA8AATgcAAAAdAgMAHQInAB0CTQAAAAIAAAABgKUAHQJhAB0BwQAdAl4AAAABAB0CYQAAAAAAAga5hrIZgKYAAA2BMgAApLEAAIFIAAC5JgABAQKx1aTxgXsAAMAAarKyGgCBtwAAwABO5QABAQGGHIH0AADAAGIFAACCFAAAvf4AAII1AADAAGPHAACCUwAAvx8AAIKBAADAAGwRAAEBAbIbgrwAAMAAbNQAAILbAADAAG1RAACDAAAAgPsAAIMXAADAAEymAAEBAaUHAAAABwK5h4Cmg3KDgb0dB7IcAAABYAHAAP9oAAAAAQW6cgAAAAAEAAADAAAAAAAAAAAAYAO5hwE/AQkBAMAA/34AAAAAgOcGuYmApoPFg9WD4AECmy4AAAABA4Pgg+AAAAAAAAAAYAO+EwAGuYqApoQUhCSELQECmzAAAAABA4QthC0AAAAAAAAAYAO+EwAGuYuApoRghHCEeAECmzMAAAABA4R4hHgAAAAAAAAAYAO+EwAGuYyApoSrhLuEwwECmzEAAAABA4TDhMMAAAAAAAAAYAO+EwAGuY2ApoT5hQmFFAECmzQAAAABA4UUhRQAAAAAAAAAYAO+EwAGuY6ApoVKhVqFZQECmzUAAAABA4VlhWUAAAAAAAAAYAO+EwAGuY+ApoWdha2FugECmzkAAAABA4W6hboAAAAAAAAAYAO+EwAGuZCApoXyhgKGDwECsh0AAAABA4YPhg8AAAAAAAAAYAO+EwAGuZGApoZFhlWGYAECmzYAAAABA4ZghmAAAAAAAAAAYAO+EwAGuZKApoaUhqSGrQECmy8AAAABA4athq0AAAAAAAAAYAO+EwAGuZOApobhhvGG+gECmzcAAAABA4b6hvoAAAAAAAAAYAO+EwAGuZSApoc0h0SHUwECnKQAAAABA4dTh1MAAAAAAAAAYAO+EwAGuZWApoeHh5eHoAECmzwAAAABA4egh6AAAAAAAAAAYAO+EwAGuZaApofTh+OH6wECmz0AAAABA4frh+sAAAAAAAAAYAO+EwAGuZeApogeiC6INgECmz4AAAABA4g2iDYAAAAAAAAAYAO+EwAGuZiApohpiHmIjQECsh4AAAABA4iNiI0AAAAAAAAAYAO+EwAGuZmApojFiNWI4gECm0AAAAABA4jiiOIAAAAAAAAAYAO+EwAGuZqApokViSWJMAECm0MAAAABA4kwiTAAAAAAAAAAYAO+EwAGuZuApoliiXKJfQECm0IAAAABA4l9iX0AAAAAAAAAYAO+EwAGuZyApomfibGJvAECnIcAAAABA4m8ibwAAAAAAAAAYAO+BAAGuZ2AponfifGJ/QECnGUAAAABA4n9if0AAAAAAAAAYAO+BAAGuZ6ApooiijSKQgECnJgAAAABA4pCikIAAAAAAAAAYAO+BAAGuZ+ApopqinyKjAECsh8AAAABA4qMiowAAAAAAAAAYAO+BAAGuaCApoq0isaK1QECsiAAAAABA4rVitUAAAAAAAAAYAO+BAAGuaGAposAixKLJQECsiEAAAABA4sliyUAAAAAAAAAYAO+BAAGuaKApotSi2SLcgECsiIAAAABA4tyi3IAAAAAAAAAYAO+BAAGuaOApouZi6uLtQECsiMAAAABA4u1i7UAAAAAAAAAYAO+BAAGuaSApovci+6L/QECsiQAAAABA4v9i/0AAAAAAAAAYAO+BAAGuaWApowdjC+MPAECsiUAAAABA4w8jDwAAAAAAAAAYAO+BAAGuaaApoxfjHGMgQECsiYAAAABA4yBjIEAAAAAAAAAYAO+BAAGuaeApoy+jM6M3AECsicAAAABA4zcjNwAAAAAAAAAYAO+EwAGuaiApo2FjZuNsgECsigAAAABA42yjbIAAAAAAAAAYAO+UgAGulyApo5bjmCOjgACsikAAAABA45zjo4AAAABAQGOhgAAAJZ7YAO+UgAAYAPAAPxVAAa5qYCmjsCO047kAQKyKgAAAAEDjuSO5AAAAAAAAABgA746AAa6XYCmj4mPjo+5AAKyKwAAAAEDj6OPuQAAAAEBAY+xAAAAlntgA74lAABgA8AA/FUABrmqgKaP2I/oj/MBAp7SAAAAAQOP84/zAAAAAAAAAGADwABkRAAGuauAppAokDqQRAEChigAAAABA5BEkEQAAAAAAAAAYAPAAGPzAAa5rICmkHeQiZCRAQKFvQAAAAEDkJGQkQAAAAAAAABgA8AAY/MABrmtgKaQw5DVkNwBApsyAAAAAQOQ3JDcAAAAAAAAAGADwABj8wAGua6AppEOkSCRJwEChZ0AAAABA5EnkScAAAAAAAAAYAPAAGPzAAa5r4CmkVyRbpF4AQKF/QAAAAEDkXiReAAAAAAAAABgA8AAY/MABrmwgKaRrZG/kckBAoXYAAAAAQORyZHJAAAAAAAAAGADwABj8wAGubGAppH+khCSGgEChgQAAAABA5IakhoAAAAAAAAAYAPAAGPzAAa5soCmklGSY5JvAQKFVgAAAAEDkm+SbwAAAAAAAABgA8AAY/MABrmzgKaSopK0krwBAoWIAAAAAQOSvJK8AAAAAAAAAGADwABj8wAGubSAppLvkwGTCQEChZ8AAAABA5MJkwkAAAAAAAAAYAPAAGPzAAa5tYCmkw6TIJMvAQKyLAAAAAEDky+TLwAAAAAAAABgA8AAY/MABrm2gKaTaJN6k4gBAq9uAAAAAQOTiJOIAAAAAAAAAGADwABj8wAGul6AppRRlF+UfwACrOYAAAABA5RnlH8AAAABAAGUcgAAAJs7YAPAAGPLAWoAYAPAAP8leQBgA8AAY/MABrpfgKaVR5VVlXQAAq0PAAAAAQOVXJV0AAAAAQABlWcAAACbO2ADwABjywFqAGADwAD/JXkAYAPAAGPzAAa6YICmlkuWWZaIAAKtAQAAAAEDlmCWiAAAAAIAApZrAAAAheRgA8AAY8sBagBgA8AA/yV5ln0AAACF5WADwABjywFqAGADwAD/JXkAYAPAAGPzAAa6YYCml1WXY5eHAAKbPwAAAAEDl2+XhwAAAAEAAZd6AAAAmztgA8AAY8sBagBgA8AA/yV5AGADwABj8wAGumKApphTmGGYgwAChiUAAAABA5hrmIMAAAABAAGYdgAAAJs7YAPAAGPLAWoAYAPAAP8leQBgA8AAY/MABrpjgKaZT5ldmX8AAptBAAAAAQOZZ5l/AAAAAQABmXIAAACbO2ADwABjywFqAGADwAD/JXkAYAPAAGPzAAa6ZICmmcyZ0Zn/AAKyLQAAAAEDmeqZ/wAAAAEBAZn3AAAAlntgA74TAABgA8AA/FUABrplgKaaQ5pImnIAArIuAAAAAQOaXZpyAAAAAQEBmmoAAACWe2ADvhMAAGADwAD8VQAGumaAppq0mrma3QACsi8AAAABA5rImt0AAAABAQGa1QAAAJZ7YAO+EwAAYAPAAPxVAAa6Z4CmmuKa8JtcAAKyMAAAAAEDmwWbXAAAAAMBAZsUAAAAsjFgA8AAY/MAApssAAAAsjJgA8AA/FUBaps5YAPAAPxVAJtFAAAAsjNgA8AA/FUBaptVYAPAAPxVAGADwABj8wAGumiAppthm2+bngACsjQAAAABA5uEm54AAAABAQGbkwAAALIxYAPAAGPzAABgA8AAY/MABrm3gKabo5uzm74BArI1AAAAAQObvpu+AAAAAAAAAGADvjcABrm4gKabw5vVm+0BArI2AAAAAQOb7ZvtAAAAAAAAAGADwABj8wAGubmAppwGnBacJQECsjcAAAABA5wlnCUAAAAAAAAAYAO+EwAGubqAppwpnD+cVAECsjgAAAABA5xUnFQAAAAAAAAAYAO+UgAGubuAppxYnG6ciAECsjkAAAABA5yInIgAAAAAAAAAYAO+UgAGubyAppyMnJ+ctQECsjoAAAABA5y1nLUAAAAAAAAAYAO+OgAGub2Appy5nMyc5wECsjsAAAABA5znnOcAAAAAAAAAYAO+OgAGub6AppzsnPydCwECsjwAAAABA50LnQsAAAAAAAAAYAO+EwAGub+App0PnSWdOgECsj0AAAABA506nToAAAAAAAAAYAO+UgAGucCApp0+nVSdbgECsj4AAAABA51unW4AAAAAAAAAYAO+UgAGucGApp1ynYWdmwECsj8AAAABA52bnZsAAAAAAAAAYAO+OgAGucKApp2fnbKdzQECskAAAAABA53Nnc0AAAAAAAAAYAO+OgAGucOApp3SneWd9wECskEAAAABA533nfcAAAAAAAAAYAO+OgAGummApp38ngGePAACskIAAAABA54knjwAAAABAQGeNAAAAJZ7YAO+OgAAYAPAAPxVAAa5xICmnlaeaZ59AQKyQwAAAAEDnn2efQAAAAAAAABgA746AAa5xYCmnoGelJ6kAQKyRAAAAAEDnqSepAAAAAAAAABgA746AAa5xoCmnqieu57MAQKyRQAAAAEDnsyezAAAAAAAAABgA746AAa5x4CmntCe4571AQKyRgAAAAEDnvWe9QAAAAAAAABgA746AAa5yICmnvqfDZ8VAQKyRwAAAAEDnxWfFQAAAAAAAABgA746AAa5yYCmnxqfLZ82AQKySAAAAAEDnzafNgAAAAAAAABgA746AAa5yoCmnzufTp9ZAQKySQAAAAEDn1mfWQAAAAAAAABgA746AAa5y4Cmn16fcZ+GAQKySgAAAAEDn4afhgAAAAAAAABgA746AAa5zICmn4ufnp+tAQKySwAAAAEDn62frQAAAAAAAABgA746AAa5zYCmn7KfxZ/XAQKyTAAAAAEDn9ef1wAAAAAAAABgA746AAa5zoCmn9yf75/9AQKyTQAAAAEDn/2f/QAAAAAAAABgA746AAa5z4CmoAKgEqAiAQKyTgAAAAEDoCKgIgAAAAAAAABgA74TAAa50ICmoCegN6BLAQKyTwAAAAEDoEugSwAAAAAAAABgA74TAAa50YCmoFCgYKBwAQKyUAAAAAEDoHCgcAAAAAAAAABgA74TAAa50oCmoHWghaCTAQKyUQAAAAEDoJOgkwAAAAAAAABgA74TAAa504CmoJigrqDHAQKyUgAAAAEDoMegxwAAAAAAAABgA75SAAa51ICmoMyg36D2AQKyUwAAAAEDoPag9gAAAAAAAABgA746AAa51YCmoPuhDqEoAQKyVAAAAAEDoSihKAAAAAAAAABgA746AAa51oCmoS2hQKFgAQKyVQAAAAEDoWChYAAAAAAAAABgA746AAa514CmoWWhdaGHAQKyVgAAAAEDoYehhwAAAAAAAABgA74TAAa52ICmoYyhnKGpAQKyVwAAAAEDoamhqQAAAAAAAABgA74TAAa52YCmoa6hvqHKAQKyWAAAAAEDocqhygAAAAAAAABgA74TAAa52oCmoc+h36HsAQKyWQAAAAEDoeyh7AAAAAAAAABgA74TAAa524CmofGiAaILAQKyWgAAAAEDoguiCwAAAAAAAABgA74TAAa53ICmohCiIKItAQKyWwAAAAEDoi2iLQAAAAAAAABgA74TAAa53YCmojKiQqJNAQKyXAAAAAEDok2iTQAAAAAAAABgA74TAAa53oCmolKiYqJtAQKyXQAAAAEDom2ibQAAAAAAAABgA74TAAa534CmonKigqKeAQKyXgAAAAEDop6ingAAAAAAAABgA74TAAa54ICmoqOis6LRAQKyXwAAAAEDotGi0QAAAAAAAABgA74TAAa54YCmotai5qL/AQKyYAAAAAEDov+i/wAAAAAAAABgA74TAAa54oCmowSjFKMrAQKyYQAAAAEDoyujKwAAAAAAAABgA74TAAa544CmozCjQKNQAQKyYgAAAAEDo1CjUAAAAAAAAABgA74TAAa55ICmo1WjZaN8AQKyYwAAAAEDo3yjfAAAAAAAAABgA74TAAa55YCmo4GjkaOkAQKyZAAAAAEDo6SjpAAAAAAAAABgA74TAAa55oCmo6mjuaPKAQKyZQAAAAEDo8qjygAAAAAAAABgA74TAAa554Cmo8+j36P1AQKyZgAAAAEDo/Wj9QAAAAAAAABgA74TAAa56ICmo/qkCqQiAQKyZwAAAAEDpCKkIgAAAAAAAABgA74TAAa56YCmpCekN6RJAQKyaAAAAAEDpEmkSQAAAAAAAABgA74TAAa56oCmpE6kXqRrAQKyaQAAAAEDpGukawAAAAAAAABgA74TAAa564CmpHCkgKSNAQKyagAAAAEDpI2kjQAAAAAAAABgA74TAAa6aoCmpQWlCqU/AAKyawAAAAEDpSqlPwAAAAEBAaU4AAAAgmpgA74lAABgA8AA/FUABrnsgKalRKVXpXEBArJsAAAAAQOlcaVxAAAAAAAAAGADvjoABrntgKaldqWMpaMBArJtAAAAAQOlo6WjAAAAAAAAAGADvlIABrprgKamEKYfpj4AArJuAAAAAQOmMaY+AAAAAQEBpjkAAACAvWADwAEAAgAAYAO+OgAGue6ApqZDplOmXwECsm8AAAABA6Zfpl8AAAAAAAAAYAO+EwAGue+ApqZkpnSmhQECsnAAAAABA6aFpoUAAAAAAAAAYAO+EwAGufCApqaKppqmqgECsnEAAAABA6aqpqoAAAAAAAAAYAO+EwAGufGApqavpr+m0wECsnIAAAABA6bTptMAAAAAAAAAYAO+EwAGufKApqbYpuim/AECsnMAAAABA6b8pvwAAAAAAAAAYAO+EwAGufOApqcBpxGnIgECsnQAAAABA6cipyIAAAAAAAAAYAO+EwAGufSApqcnpzenTgECsnUAAAABA6dOp04AAAAAAAAAYAO+EwAGufWApqdTp2SngAECsnYAAAABA6eAp4AAAAAAAAAAYAO+JQAGufaApqgVqCWoQAECsncAAAABA6hAqEAAAAAAAAAAYAO+EwAGufeApqhFqFWoagECsngAAAABA6hqqGoAAAAAAAAAYAO+EwAGufiApqhvqH+ojwECsnkAAAABA6iPqI8AAAAAAAAAYAO+EwAGufmApqiTqKOouQECsnoAAAABA6i5qLkAAAAAAAAAYAO+EwAGufqApqi9qM2o4gECsnsAAAABA6jiqOIAAAAAAAAAYAO+EwAGufuApqjmqPapDQECsnwAAAABA6kNqQ0AAAAAAAAAYAO+EwAGufyApqkSqSKpOAECsn0AAAABA6k4qTgAAAAAAAAAYAO+EwAGuf2Apqk9qU2pYwECsn4AAAABA6ljqWMAAAAAAAAAYAO+EwAGuf6ApqloqXipjQECsn8AAAABA6mNqY0AAAAAAAAAYAO+EwAGuf+ApqnVqeWp+gECsoAAAAABA6n6qfoAAAAAAAAAYAO+EwAGugCApqn/qhWqLAECsoEAAAABA6osqiwAAAAAAAAAYAO+UgAGugGApqoxqkSqTgECsoIAAAABA6pOqk4AAAAAAAAAYAO+OgAGugKApqpTqmaqcQECsoMAAAABA6pxqnEAAAAAAAAAYAO+OgAGugOApqp2qomqlQECsoQAAAABA6qVqpUAAAAAAAAAYAO+OgAGugSApqqaqq2qxAECsoUAAAABA6rEqsQAAAAAAAAAYAO+OgAGugWApqskqzerUgECsoYAAAABA6tSq1IAAAAAAAAAYAO+OgAGugaApquQq6OruQECsocAAAABA6u5q7kAAAAAAAAAYAO+OgAGugeApqu+q9Gr4wECsogAAAABA6vjq+MAAAAAAAAAYAO+OgAGugiApqvoq/usDgECsokAAAABA6wOrA4AAAAAAAAAYAO+OgAGugmApqwTrCasOQECsooAAAABA6w5rDkAAAAAAAAAYAO+OgAGugqApqw+rFGsXAECsosAAAABA6xcrFwAAAAAAAAAYAO+OgAGuguApqxhrHSshgECsowAAAABA6yGrIYAAAAAAAAAYAO+OgAGugyApqyLrJ6sqwECso0AAAABA6yrrKsAAAAAAAAAYAO+OgAGug2ApqywrMOs4AECso4AAAABA6zgrOAAAAAAAAAAYAO+OgAGug6ApqzlrPitFQECso8AAAABA60VrRUAAAAAAAAAYAO+OgAGug+Apq0arS2tPwECspAAAAABA60/rT8AAAAAAAAAYAO+OgAGuhCApq1ErVetaAECspEAAAABA61orWgAAAAAAAAAYAO+OgAGuhGApq1trYCtlQECspIAAAABA62VrZUAAAAAAAAAYAO+OgAGuhKApq2ara2tuwECspMAAAABA627rbsAAAAAAAAAYAO+OgAGuhOApq3ArdOt9wECspQAAAABA633rfcAAAAAAAAAYAO+OgAGuhSApq38rg+uLwECspUAAAABA64vri8AAAAAAAAAYAO+OgAGuhWApq40rkeuZwECspYAAAABA65nrmcAAAAAAAAAYAO+OgAGuhaApq5srn+umAECspcAAAABA66YrpgAAAAAAAAAYAO+OgAGuheApq6drrCuwwECspgAAAABA67DrsMAAAAAAAAAYAO+OgAGuhiApq7Irtuu8AECspkAAAABA67wrvAAAAAAAAAAYAO+OgAGuhmApq71rwivGAECspoAAAABA68YrxgAAAAAAAAAYAO+OgAGuhqApq8drzCvQgECspsAAAABA69Cr0IAAAAAAAAAYAO+OgAGuhuApq9Hr1qvbAECspwAAAABA69sr2wAAAAAAAAAYAO+OgAGuhyApq9xr4SvlgECsp0AAAABA6+Wr5YAAAAAAAAAYAO+OgAGuh2Apq+br66vxAECsp4AAAABA6/Er8QAAAAAAAAAYAO+OgAGuh6Apq/Jr9yv7AECsp8AAAABA6/sr+wAAAAAAAAAYAO+OgAGuh+Apq/xsASwGwECsqAAAAABA7AbsBsAAAAAAAAAYAO+OgAGuiCAprAgsDOwSQECsqEAAAABA7BJsEkAAAAAAAAAYAO+OgAGuiGAprBOsGGwggECsqIAAAABA7CCsIIAAAAAAAAAYAO+OgAGuiKAprCHsJqwqQECsqMAAAABA7CpsKkAAAAAAAAAYAO+OgAGuiOAprCusMGwzQECsqQAAAABA7DNsM0AAAAAAAAAYAO+OgAGuiSAprDSsOWw8gECsqUAAAABA7DysPIAAAAAAAAAYAO+OgAGuiWAprD3sQqxFQECsqYAAAABA7EVsRUAAAAAAAAAYAO+OgAGuiaAprEasS2xPQECsqcAAAABA7E9sT0AAAAAAAAAYAO+OgAGuieAprFCsVWxYQECsqgAAAABA7FhsWEAAAAAAAAAYAO+OgAGuiiAprFmsXmxkgECsqkAAAABA7GSsZIAAAAAAAAAYAO+OgAGuimAprGXsaqxxAECsqoAAAABA7HEscQAAAAAAAAAYAO+OgAGuiqAprHJsdyx9AECsqsAAAABA7H0sfQAAAAAAAAAYAO+OgAGuiuAprH5sgyyIQECsqwAAAABA7IhsiEAAAAAAAAAYAO+OgAGuiyAprImsjmySgECsq0AAAABA7JKskoAAAAAAAAAYAO+OgAGui2AprJPsmKycwECsq4AAAABA7JzsnMAAAAAAAAAYAO+OgAGui6AprJ4souymwECsq8AAAABA7KbspsAAAAAAAAAYAO+OgAGui+AprKgsrOyyQECsrAAAAABA7LJsskAAAAAAAAAYAO+OgAGujCAprLOsuGzAAECsrEAAAABA7MAswAAAAAAAAAAYAO+OgAGujGAprMFsxizKQECsrIAAAABA7MpsykAAAAAAAAAYAO+OgAGujKAprMus0GzTwECsrMAAAABA7NPs08AAAAAAAAAYAO+OgAGumyAprNUs1mzhgACsrQAAAABA7Nvs4YAAAABAQGzfwAAAIJqYAO+OgAAYAPAAPxVAAa6bYCms4uzl7PDAAKytQAAAAEDs6yzwwAAAAEBAbOxAAAAlcBgA8AA/hsAAGADvhMABrpugKazyLPXtAQAArK2AAAAAQOz7bQEAAAAAQEBs/IAAACVwGADwAD+GwAAYAO+OgAGujOAprQJtBy0OwECsrcAAAABA7Q7tDsAAAAAAAAAYAO+OgAGujSAprRAtFO0eAECsrgAAAABA7R4tHgAAAAAAAAAYAO+OgAGujWAprSStKW0rQECsrkAAAABA7SttK0AAAAAAAAAYAO+OgAGujaAprSxtMS00AECsroAAAABA7TQtNAAAAAAAAAAYAO+OgAGujeAprTUtOe0+AECsrsAAAABA7T4tPgAAAAAAAAAYAO+OgAGujiAprT8tQ+1IQECsrwAAAABA7UhtSEAAAAAAAAAYAO+OgAGujmAprUltTi1SAECsr0AAAABA7VItUgAAAAAAAAAYAO+OgAGujqAprVMtV+1bQECsr4AAAABA7VttW0AAAAAAAAAYAO+OgAGujuAprVxtYG1iwECsr8AAAABA7WLtYsAAAAAAAAAYAO+NwAGujyAprWPtZ+1rAECssAAAAABA7WstawAAAAAAAAAYAO+NwAGuj2AprWwtcC1ygECssEAAAABA7XKtcoAAAAAAAAAYAO+NwAGuj6AprXOtd616gECssIAAAABA7XqteoAAAAAAAAAYAO+NwAGuj+AprXutgG2DgECssMAAAABA7YOtg4AAAAAAAAAYAO+OgAGukCAprYStiW2MgECssQAAAABA7YytjIAAAAAAAAAYAO+OgAGukGAprY2tkm2WgECssUAAAABA7ZatloAAAAAAAAAYAO+OgAGukKAprZftnK2jQECssYAAAABA7aNto0AAAAAAAAAYAO+OgAGukOApraRtqS2wAECsscAAAABA7bAtsAAAAAAAAAAYAO+OgAGukSAprbEtte29QECssgAAAABA7b1tvUAAAAAAAAAYAO+OgAGukWAprb6tw23HgECsskAAAABA7cetx4AAAAAAAAAYAO+OgAGukaAprcitzW3TgECssoAAAABA7dOt04AAAAAAAAAYAO+OgAGukeAprdSt2W3gQECsssAAAABA7eBt4EAAAAAAAAAYAO+OgAGukiApreFt5i3swECsswAAAABA7ezt7MAAAAAAAAAYAO+OgAGukmApre3t8q36AECss0AAAABA7fot+gAAAAAAAAAYAO+OgAGukqAprfst/+4DwECss4AAAABA7gPuA8AAAAAAAAAYAO+OgAGukuAprgTuCa4PgECss8AAAABA7g+uD4AAAAAAAAAYAO+OgAGukyAprhCuFW4cAECstAAAAABA7hwuHAAAAAAAAAAYAO+OgAGuk2Aprh0uIe4lwECstEAAAABA7iXuJcAAAAAAAAAYAO+OgAGuk6ApribuK64xgECstIAAAABA7jGuMYAAAAAAAAAYAO+OgAGuk+AprjKuN24+AECstMAAAABA7j4uPgAAAAAAAAAYAO+OgAGulCAprj8uQ+5IgECstQAAAABA7kiuSIAAAAAAAAAYAO+OgAGulGAprkmuTm5VAECstUAAAABA7lUuVQAAAAAAAAAYAO+OgAGulKAprlYuWu5iQECstYAAAABA7mJuYkAAAAAAAAAYAO+OgAGulOAprmO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bmADvjoAAGADwAD8VQAAAB0poAAdKcQAHSnoAB0qDAAdKjAAHSpUAB0qhgAdKrgAHSrcAB0rAAAdKz4AAAAKArqCgKbAAECMwABAm8AASQUHsuwAAAFgAcAA/2gAAWABuYcAAQW6mwAAAAAEAAADAAAAAAAAAAAAYAO6ggE/AQkBAMAA/34AAAAAFQa6hICmwABBeMAAQX3AAEGwAAKy7QAAAAEDwABBlcAAQbAAAAABAQHAAEGoAAAAlntgA75SAABgA8AA/FUABrqFgKbAAEJlwABCasAAQpwAArLuAAAAAQPAAEKBwABCnAAAAAEBAcAAQpQAAACWe2ADvlIAAGADwAD8VQAGuoaApsAAQqHAAEKmwABC2wACsu8AAAABA8AAQsXAAELbAAAAAQEBwABC0wAAAJZ7YAO+JQAAYAPAAPxVAAa6h4CmwABDJMAAQynAAENWAAKy8AAAAAEDwABDQ8AAQ1YAAAABAQHAAENNAAAApVJgA8AATLgAAGADwAD8VQAGupGApsAAQ1vAAENuwABDfwECsvEAAAABA8AAQ3/AAEN/AAAAAAAAAGADvjoABrqSgKbAAEOEwABDl8AAQ6EBArLyAAAAAQPAAEOhwABDoQAAAAAAAABgA746AAa6iICmwABDpsAAQ6vAAEPPAAKy8wAAAAEDwABDusAAQ88AAAABAQHAAEPIAAAAgmpgA74lAABgA8AA/FUABrqJgKbAAER/wABEhMAARPQAArL0AAAAAQPAAESawABE9AAAAAMDA8AARKQAAAClUmADwABMuADAAES8AAAAhZdgA786AMAAROAAAACxxmADv0UAAGADwAD8VQAGupOApsAARPnAAEUMwABFGQECsvUAAAABA8AARRnAAEUZAAAAAAAAAGADvjoABrqUgKbAAEUewABFMcAARUEBArL2AAAAAQPAAEVBwABFQQAAAAAAAABgA746AAa6lYCmwABFRsAARVnAAEVsAQKy9wAAAAEDwABFbMAARWwAAAAAAAAAYAO+OgAGupaApsAARXHAAEWBwABFjQECsvgAAAABA8AARY3AAEWNAAAAAAAAAGADvhMABrqKgKbAAEXwwABF9cAARhQAArL5AAAAAQPAAEX/wABGFAAAAAEBAcAARg0AAACCamADviUAAGADwAD8VQAGuouApsAARnfAAEZ8wABGmwACsvoAAAABA8AARobAAEabAAAAAQEBwABGlAAAAIJqYAO+JQAAYAPAAPxVAAa6jICmwABHAcAARwbAAEcoAAKy+wAAAAEDwABHE8AARygAAAABAQHAAEchAAAAgmpgA74lAABgA8AA/FUABrqNgKbAAEctwABHMsAAR1cAArL8AAAAAQPAAEdGwABHVwAAAAEBAcAAR1MAAACaJmADvhMAAGADwAD8VQAGupeApsAAR3/AAEePwABHowECsv0AAAABA8AAR6PAAEejAAAAAAAAAGADvhMABrqYgKbAAEeowABHuMAAR88BArL+AAAAAQPAAEfPwABHzwAAAAAAAABgA74TAAa6mYCmwABIBcAASBXAAEgiAQKy/wAAAAEDwABIIsAASCIAAAAAAAAAYAO+EwAGuo6ApsAASCfAAEgswABISwACswAAAAABA8AASDXAAEhLAAAAAQEBwABIQwAAAJZ7YAO+JQAAYAPAAPxVAAa6j4CmwABIyMAASM3AAEkDAAKzAQAAAAEDwABI6sAASQMAAAABAQHAAEj6AAAAgm5gA746AABgA8AA/FUAAAAdK7sAHSv5AB0sNwAdLHUAHSy1AB0s4wAdLREAHS1PAB0tqwAdLdkAHS4HAB0uNQAdLmMAHS6hAB0u3wAdLx0AHS9bAB0viQAdL7cAHS/lAB0wIwAdMGEAAAAVArqcgKbAAEkIwABJDsAA/QEDswIAAAFgAcAA/2gAA2ABuYdgAbpzYAG6goCDBLqfgKbAAEl+wABJggmzA7mGAGADvEYABLqggKbAAEmcwABJpAmzBLmGAGADgRQABLqhgKbAAEnmwABJ8hicMLmGAGADvhMBKwS6ooCmwABKasAASnQYnDK5hgBgA74TASsEuqOApsAASuDAAErpGJw0uYYAYAO+EwErBLqkgKbAAEtSwABLWxicM7mGAGADvhMBKwS6pYCmwABLxMAAS9AYnDW5hgBgA74TASsEuqaApsAATEjAAExUGJw2uYYAYAO+EwErBLqngKbAAEzMwABM2hicPrmGAGADvhMBKwS6qICmwABNWMAATWYYswW5hgBgA74TASsEuqmApsAATeTAAE3wGJw8uYYAYAO+EwErBLqqgKbAAE5owABOchicMbmGAGADvhMBKwS6q4CmwABO3sAATugYnD25hgBgA74TASsEuqyApsAAT1TAAE9kGJxMuYYAYAO+EwErBLqtgKbAAE/owABP8hicN7mGAGADvhMBKwS6roCmwABQXsAAUGcYnDi5hgBgA74TASsEuq+ApsAAUNDAAFDZGJw5uYYAYAO+EwErBLqwgKbAAFFCwABRVxizBrmGAGADvhMBKwS6sYCmwABSCMAAUhYYnDq5hgBgA74TASsEurKApsAAUpTAAFKgGJxLuYYAYAO+EwErBLqzgKbAAFMZwABTJRicTbmGAGADvhMBKwS6tICmwABToMAAU6wYnC+5hgBgA74EASsEurWApsAAVDnAAFRGGJxKuYYAYAO+BAErBLq2gKbAAFUjwABVMhicXbmGAGADvgQBKwS6t4CmwABVuMAAVckYswe5hgBgA74EASsEuriApsAAVl7AAFZuGLMIuYYAYAO+BAErBLq5gKbAAFb5wABXDRizCbmGAGADvgQBKwS6uoCmwABXo8AAV7IYswq5hgBgA74EASsEuruApsAAWEDAAFhLGLMLuYYAYAO+BAErBLq8gKbAAFkkwABZNBizDLmGAGADvgQBKwS6vYCmwABZzsAAWdwYsw25hgBgA74EASsEur6ApsAAWlvAAFpsGLMOuYYAYAO+BAErBLq/gKbAAFrywABbARizD7mGAGADvhMBKwS6wICmwABbk8AAW6sYsxC5hgBgA75SASsEusGApsAAXQvAAF05GLMRuYYAYAPAAPxVASoEusKApsAAXU/AAF11GLMSuYYAYAO+UgErBLrDgKbAAGGxwABhwxizE7mGAGADvjoBKwS6xICmwAB56cAAefkYsxS5hgBgA74TASsEusWApsAAe3HAAHuHGLMVuYYAYAO+UgErBLrGgKbAAHudwAB7uBizFrmGAGADvlIBKwS6x4CmwAB7y8AAe+IYsxe5hgBgA746ASsEusiApsAAe/XAAHwRGLMYuYYAYAO+OgErBLrJgKbAAIAfwACALxizGbmGAGADvhMBKwS6yoCmwACA2cAAgO8Ysxq5hgBgA75SASsEusuApsAAgQXAAIEgGLMbuYYAYAO+UgErBLrMgKbAAIEzwACBShizHLmGAGADvjoBKwS6zYCmwACBXcAAgXkYsx25hgBgA746ASsEus6ApsAAhYvAAIWeGLMeuYYAYAO+OgErBLrPgKbAAI9awACPchizH7mGAGADvjoBKwS60ICmwACQGMAAkDMYsyC5hgBgA746ASsEutGApsAAkOzAAJENGLMhuYYAYAO+OgErBLrSgKbAAJLGwACS2RizIrmGAGADvhMBKwS604CmwACTY8AAk3EYsyO5hgBgA74TASsEutSApsAAk+7AAJP7GLMkuYYAYAO+EwErBLrVgKbAAJR1wACUgxizJbmGAGADvhMBKwS61oCmwACVAMAAlQsYsya5hgBgA74TASsEuteApsAAlXnAAJWHGLMnuYYAYAO+EwErBLrYgKbAAJYEwACWEBizKLmGAGADvhMBKwS62YCmwACWh8AAlpMYsym5hgBgA74TASsEutqApsAAlwrAAJcnGLMquYYAYAO+EwErBLrbgKbAAJfZwACX+BizK7mGAGADvhMBKwS63ICmwACYsMAAmMoYsyy5hgBgA74TASsEut2ApsAAmWnAAJmBGLMtuYYAYAO+EwErBLregKbAAJoawACaKxizLrmGAGADvhMBKwS634CmwACascAAmskYsy+5hgBgA74TASsEuuCApsAAm2TAAJt4GLMwuYYAYAO+EwErBLrhgKbAAJwHwACcGRizMbmGAGADvhMBKwS64oCmwACcosAAnLkYszK5hgBgA74TASsEuuOApsAAnVHAAJ1qGLMzuYYAYAO+EwErBLrkgKbAAJ4IwACeGxizNLmGAGADvhMBKwS65YCmwACep8AAnrUYszW5hgBgA74TASsEuuaApsAAnzLAAJ9AGLM2uYYAYAO+EwErBLrngKbAAKCawACgtRizN7mGAGADvjoBKwS66ICmwACiBsAAoh4Yszi5hgBgA75SASsEuumApsAAor3AAKLPGLM5uYYAYAO+OgErBLrqgKbAAKNkwACjbxizOrmGAGADvjoBKwS664CmwACnssAAp8AYszu5hgBgA746ASsEuuyApsAAqEnAAKhaGLM8uYYAYAO+OgErBLrtgKbAAKjswACpABizPbmGAGADvjoBKwS67oCmwACpjsAAqZsYsz65hgBgA74TASsEuu+ApsAAqi/AAKo+GLM/uYYAYAO+OgErBLrwgKbAAKr1wACrBxizQLmGAGADvhMBKwS68YCmwACrncAAq64Ys0G5hgBgA74TASsEuvKApsAArWbAAK1zGLNCuYYAYAO+EwErBLrzgKbAAK3hwACt8xizQ7mGAGADvhMBKwS69ICmwACudsAArocYs0S5hgBgA74TASsEuvWApsAAr03AAK9iGLNFuYYAYAO+EwErBLr2gKbAALBnwACwfBizRrmGAGADvhMBKwS694CmwACw+cAAsQsYs0e5hgBgA74TASsEuviApsAAsY7AALGaGJxeuYYAYAO+EwErBLr5gKbAALISwACyJxizSLmGAGADvjcBKwS6+oCmwACytcAAss0Ys0m5hgBgA743ASsEuvuApsAAs2TAALN8GLNKuYYAYAO+EwErBLr8gKbAALQSwAC0LxizS7mGAGADviUBKwS6/YCmwAC07cAAtQkYs0y5hgBgA74TASsEuv6ApsAAuSrAALlAGLNNuYYAYAO+EwErBLr/gKbAALnLwAC54xizTrmGAGADvlIBKwS7AICmwAC6iMAAupMYs0+5hgBgA746ASsEuwGApsAAuw/AALsbGLNQuYYAYAO+OgErBLsCgKbAALuawAC7pxizUbmGAGADvjoBKwS7A4CmwAC8KcAAvEEYs1K5hgBgA746ASsEuwSApsAAvN7AALz6GLNTuYYAYAO+OgErBLsFgKbAAL2twAC9xBizVLmGAGADvjoBKwS7BoCmwADDpcAAw8wYs1W5hgBgA746ASsEuweApsAA2o7AANqXGLNWuYYAYAO+OgErBLsIgKbAANsEwADbERizV7mGAGADvjoBKwS7CYCmwADbkMAA26IYs1i5hgBgA746ASsEuwqApsAA3DHAANxEGLNZuYYAYAO+OgErBLsLgKbAANzQwADc4RizWrmGAGADvjoBKwS7DICmwADdZ8AA3XYYs1u5hgBgA746ASsEuw2ApsAA3uXAAN7wGLNcuYYAYAO+NwErBLsOgKbAAN9YwADfYxizXbmGAGADvjcBKwS7D4CmwADfy8AA39kYs165hgBgA743ASsEuxCApsAA4FDAAOBdGLNfuYYAYAO+NwErBLsRgKbAAODOwADg3BizYLmGAGADvjoBKwS7EoCmwADhZcAA4XMYs2G5hgBgA746ASsEuxOApsAA4fzAAOIOGLNiuYYAYAO+OgErBLsUgKbAAOKmwADiwhizY7mGAGADvjoBKwS7FYCmwADjecAA45YYs2S5hgBgA746ASsEuxaApsAA5FDAAORvGLNluYYAYAO+OgErBLsXgKbAAOvOwADr6BizZrmGAGADvhMBKwS7GICmwADs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hgAAAAEDwACH7sAAiCsAAAABAQHAAIf2AAAAgL1gA8ABAAIAAGADvjoBSsAAiAUBJsAAiAUBHMAAiAUus3e5hgIAAhbAAIgYLpxluzeAwACIJsAddRgAvA1gA746BrtegKbAAIgwwACIT8AAiJgBALJDAWrAAIgxYAPAAP9oAgAAAQPAAIhkwACImAAAAAAAAABgA746AUrAAIhtARzAAIhtLrOOuYYBAAEns48AvBUGu1+ApsAAiJzAAIi7wACI/AEAskQBasAAiJ1gA8AA/2gCAAABA8AAiMzAAIj8AAAAAAAAAGADvjoBSsAAiNUBHMAAiNUus465hgEAASezkAC8FQa7YICmwACJAMAAiR/AAIliAQCyRQFqwACJAWADwAD/aAIAAAEDwACJMcAAiWIAAAAAAAAAYAO+OgFKwACJOgEcwACJOi6zjrmGAQABJ7ORALwVBrthgKbAAIlmwACJhcAAicoBALJGAWrAAIlnYAPAAP9oAgAAAQPAAImYwACJygAAAAAAAABgA746AUrAAImhARzAAImhLrOOuYYBAAEns5IAvBUGu2KApsAAic/AAInuwACKMwEAskcBasAAidBgA8AA/2gCAAABA8AAiffAAIozAAAAAAAAAGADvjoBSsAAigABHMAAigAus465hgEAASezkwC8FQa7Y4CmwACKOMAAilfAAIq+AQCySAFqwACKOWADwAD/aAIAAAEDwACKYcAAir4AAAAAAAAAYAO+OgFKwACKZAEmwACKZAEcwACKaRbAAIpkLrMDuYa6n7OAAgACHMAAiocus425hgEAASezlAC8FCeySAC8U2ADvjoGu2SApsAAisPAAIriwACLTQEAskkBasAAisRgA8AA/2gCAAABA8AAiu7AAItNAAAAAAAAAGADvjoBSsAAivEBJsAAivEBHMAAivYWwACK8S6zA7mGup+zgAIAAhzAAIsULrONuYYBAAEns5QAvBQnskkAvFNgA746BrtlgKbAAItSwACLccAAi+gBALJKAWrAAItTYAPAAP9oAgAAAQPAAIuHwACL6AAAAAAAAABgA746AUrAAIuKASbAAIuKARzAAIuPFsAAi4ouswO5hrqfs4ACAAIcwACLrS6zjbmGAQABJ7OUALwUJ7OVALxTYAO+Oga7ZoCmwACL7cAAjAzAAIxRAQCySwFqwACL7mAD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YAPAAP9oAgAAAQPAAKOdwACj2wAAAAAAAABgA746AUrAAKOmASbAAKOmATUAAAABAGADvjoBFsAAo6Yuszq5hrrqIxzAAKOygADAHY3MSAEAASsAwAD/dRfAAKOmLrM6uYYmwACjpgEcwACjti6zf7mGAgACFsAAo8cusli7cydWALwOYAO+OrrqgADAHY3MAWADviVgA746BrwYgKbAAKPgwACj5cAApFQAALO6uYYAAAABA8AAo/XAAKRUAAAAAQEBwACkAgAAAJomYAO+EwAAYAPAAPxVAT4BSsAApA0BIhzAAKQdFsAApBiAwACkFMAdjmOAvb4BSAEAASezogDAAQARABzAAKQ6FsAApDKAwACkLsAdjmOESL4VSAEAARbAAKQ9LrIhuzsAwAD/dQa8M4CmwACkWcAApGrAAKUMAACy8wFqwACkWmADwAD/aAIAAAEDwACkecAApQwAAAABAQHAAKSHAAAAgmpgA74lAABgA8AA/FUBPgFKwACklQEiIhzAAKSoFsAApKOAwACknMAdjwSAvb4BSAEAASeApgDAAQARABbAAKTFgMAApL7AHY8EhRy+KgAcwACk4S6zurmGAQABFsAApPmAwACk8sAdjwSFGb4zALwYBrw0gKbAAKURwAClIsAAp54AALL0AWrAAKUSYAPAAP9oAgAAAQPAAKU4wACnngAAAAMDA8AApUIAAAClUmADwABMuADAAKVaAAAAhZdgA786AMAApX4AAACxxmADv0UAAGADwAD8VQE+AknAAKWZHMAApawWwAClnS6zO7mGuutIAQABKwDAAP91PgROwAClycAApc0AAJomYAO+EwEcwACl2S6zcbmGAwACFsAApeQusiG7OyezogGaeiq8DEnAAKYdHMAApiWDwACmIcAdkApIAQABKwDAAP91SsAApi4BKj89F8AApkIuszu5hibAAKZCARzAAKZTLrN/uYYDAAKDwACmZMAdkAongKYBmnoqvA5gA746uutJwACmihzAAKadFsAApo4uszu5hrrrSAEAASsAwAD/dUrAAKamASo/P0rAAKa+ASIcwACmzoDAAKbFwB2PsbO7AQABFsAAptYuszu5hrrrAMAATNgAIhzAAKb7gcAApvLAHY/BSAEAASsAwAD/dQEWwACniBzAAKc3gsAApxLAHY/Ps7wDAAOBwACnScAdj8EWwACnUy6y9buKFsAAp2uAwACnYsAdj7Gni8AATLwAv6yzvb8pBruKgKbAAKfEwACn48AAqDUBALL1AWrAAKfFYAPAAP9oAgAAAQPAAKfxwACoNQAAAAAAAABgA746AUrAAKf6ASbAAKf6ATUAAAABAGADvjoBFsAAp/ouszu5hrrrIxzAAKgJgADAHZGSSAEAASsAwAD/dRfAAKf6LrM7uYYmwACn+gEcwACoDS6zf7mGAgACFsAAqB4usle7cieApgC8DmADvjq664AAwB2RkgFgA74lYAO+Oga7i4CmwACoXsAAqH3AAKjYAQCy9gFqwACoX2ADwAD/aAIAAAEDwACojsAAqNgAAAAAAAAAYAO+OgFKwAColwEmwAColwE1AAAAAQBgA746ARbAAKiXLrM8uYa67CMcwACoqYAAwB2SR0gBAAErAMAA/3UXwAColy6zPLmGJsAAqJcBHMAAqK0us3+5hgIAAhbAAKi+LrJXu3InIwC8DmADvjq67IAAwB2SRwFgA74lYAO+Oga7jICmwACpBMAAqSPAAKl9AQCy9wFqwACpBWADwAD/aAIAAAEDwACpN8AAqX0AAAAAAAAAYAO+OgFKwACpQAEmwACpQAE1AAAAAQBgA746ARbAAKlALrM9uYa67SMcwACpVYAAwB2S+0gBAAErAMAA/3UXwACpQC6zPbmGJsAAqUABHMAAqVkus3+5hgIAAhbAAKlqLrJXu3InZAC8DmADvjq67YAAwB2S+wFgA74lYAO+Oga7jYCmwACpn8AAqbvAAKoJAQCy+AFqwACpoGADwAD/aAIAAAEDwACpyMAAqgkAAAAAAAAAYAO+EwFKwACp0QE1AAAAAQBgA74TARbAAKnRLrM+uYa67iMcwACp34AAwB2TqUgBAAErAMAA/3UXwACp0S6zPrmGHMAAqeMus3G5hgIAAhbAAKnuLrIiuzwns74AvAy67oAAwB2TqQFgA74TBruOgKbAAKpCwACqYcAAqs8BALLhAWrAAKpDYAPAAP9oAgAAAQPAAKpwwACqzwAAAAAAAABgA746AUrAAKpzASbAAKpzATUAAAABAGADvjoBFsAAqnMusz+5hrrvIxzAAKqDgADAHZRQSAEAASsAwAD/dRfAAKpzLrM/uYYmwACqcwEcwACqjS6zd7mGAwACFsAAqqAusiW7PyezvwGaeiq8DWADvjq674AAwB2UUAFgA74lYAO+Oga7j4CmwACrC8AAqyfAAKuMAQCy4wFqwACrDGADwAD/aAIAAAEDwACrOcAAq4wAAAAAAAAAYAO+EwFKwACrPAE1AAAAAQBgA74TARbAAKs8LrNAuYa68CMcwACrT4AAwB2VAkgBAAErAMAA/3UXwACrPC6zQLmGHMAAq1kus3G5hgMAAhbAAKtkLrImu0AnsdkBmnoqvAy68IAAwB2VAgFgA74TBruQgKbAAKuywACrzsAArDkBALLkAWrAAKuzYAPAAP9oAgAAAQPAAKvfwACsOQAAAAAAAABgA74TAUrAAKviATUAAAABAGADvhMBFsAAq+Ius0G5hrrxIxzAAKv0gADAHZWmSAEAASsAwAD/dRfAAKviLrNBuYYcwACr/i6zcbmGAwACFsAArAkusia7QCezwAGaeiq8DLrxgADAHZWmAWADvhMGvDWApsAArD7AAKxZwACslQAAsm4BasAArD9gA8AA/2gCAAABA8AArGvAAKyVAAAAAQEBwACscwAAAIC9YAPAAQACAABgA746AUrAAKx8ARzAAKx8LrPBuYYBAAGAwACskMAdlj0AvBkGvBmApsAArJrAAKypwACs/AAAs8G5hgAAAAEDwACsvMAArPwAAAABAQHAAKzEAAAAgL1gA8ABAAIAAGADvjoBSsAArNMBJsAArNMBHMAArNMus3e5hgIAAhbAAKzmLrIguzqAwACs98AdlpwAvA1gA746BrwagKbAAK0BwACtDcAArVUAALPCuYYAAAABA8AArR3AAK1VAAAAAQEBwACtJQAAAIC9YAPAAQACAABgA74TAUrAAK00ARzAAK00LrNxuYYCAAIWwACtPy6yILs6gMAArVDAHZcPALwMBruRgKbAAK13wACtk8AArdABALJvAWrAAK14YAPAAP9oAgAAAQPAAK2gwACt0AAAAAAAAABgA74TAUrAAK2jATUAAAABAGADvhMBFsAAraMus0K5hrryIxzAAK2xgADAHZePSAEAASsAwAD/dRfAAK2jLrNCuYYcwACttS6zwrmGAQABJ7PDALwauvKAAMAdl48BYAO+Ewa7koCmwACt98AArhPAAK5lAQCycAFqwACt+GADwAD/aAIAAAEDwACuJcAArmUAAAAAAAAAYAO+EwFKwACuLgE1AAAAAQBg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ARzAAM9ULrPBuYYBAAEnsqoAvBkGu9CApsAAz4rAAM+pwADP+gEAsqsBasAAz4tgA8AA/2gCAAABA8AAz8LAAM/6AAAAAAAAAGADvjoBSsAAz8sBHMAAz8sus8G5hgEAASeyqwC8GQa70YCmwADP/8AA0B7AANBpAQCyrAFqwADQAGADwAD/aAIAAAEDwADQNMAA0GkAAAAAAAAAYAO+OgFKwADQPQEcwADQPS6zwbmGAQABJ7KsALwZBrvSgKbAANBuwADQjcAA0NABALKtAWrAANBvYAPAAP9oAgAAAQPAANCfwADQ0AAAAAAAAABgA746AUrAANCoARzAANCoLrPBuYYBAAEnsq0AvBkGu9OApsAA0NXAAND0wADRgQEAsq4BasAA0NZgA8AA/2gCAAABA8AA0QbAANGBAAAAAAAAAGADvjoBSsAA0QkBIxbAANESFsAA0QkuswS5hrqggriBVhzAANErLrPiuYYBAAEnsq4AvB0cwADRWS6zwbmGAQABJ7KuALwZAWADvjoGu9SApsAA0YbAANGlwADR6QEAsq8BasAA0YdgA8AA/2gCAAABA8AA0bbAANHpAAAAAAAAAGADvjoBSsAA0b8BHMAA0b8us8G5hgEAASez4wC8GQa71YCmwADR7sAA0g3AANJaAQCysAFqwADR72ADwAD/aAIAAAEDwADSJMAA0loAAAAAAAAAYAO+OgFKwADSLQEcwADSLS6zwbmGAQABJ7KwALwZBrw5gKbAANJfwADScMAA0yMAALLnAWrAANJgYAPAAP9oAgAAAQPAANKOwADTIwAAAAEBAcAA0pwAAACCamADviUAAGADwAD8VQE+AUrAANKqASIiFsAA0riAwADSscAdtrSHn74oABzAANLaFsAA0tWAwADSzsAdtrSAvb4BSAEAASez5ADAAQARABzAANMRFsAA0wmAwADTAsAdtrSESL40SAEAARbAANMULpyHuzYAwAD/dQa71oCmwADTKMAA00fAANOmAQCysQFqwADTKWADwAD/aAIAAAEDwADTZ8AA06YAAAAAAAAAYAO+OgFKwADTcAEcwADTcC6zwbmGAQABJ7KxALwZBrvXgKbAANOrwADTysAA1AsBALKyAWrAANOsYAPAAP9oAgAAAQPAANPcwADUCwAAAAAAAABgA746AUrAANPlARzAANPlLrPBuYYBAAEns+UAvBkGu9iApsAA1BDAANQvwADUZgEAsrMBasAA1BFgA8AA/2gCAAABA8AA1D7AANRmAAAAAAAAAGADvjoBSsAA1EEBHMAA1EEus8G5hgEAASeyswC8GQa8OoCmwADUa8AA1HzAANUNAACytAFqwADUbGADwAD/aAIAAAEDwADUksAA1Q0AAAABAQHAANSiAAAAgmpgA746AABgA8AA/FUBPgFKwADUsAEiHMAA1MMWwADUvoDAANS3wB24YoC9vgFIAQABJ7PmAMABABEAHMAA1PcWwADU74DAANTowB24YoRIvjRIAQABFsAA1PousiS7PgDAAP91BrwbgKbAANVXwADVXMAA1mUAALPnuYYAAAABA8AA1XPAANZlAAAAAQEBwADVeAAAAJXAYAPAAP4bAABcAT4CQBzAANWqgMAA1ZjAHbj5gJcBAAGTAMAA/0vAANWYwADVrQBJwADVtBzAANXKgMAA1bjAHbj5gJcBAAE3FADAAP9LPgE9HsAA1di2/QIAAmrAANXsYAO3D8AAx0IkAAIns+iAwADWR8AduPkAPwa8O4CmwADWasAA1oLAANcjAACytQFqwADWa2ADwAD/aAIAAAEDwADWl8AA1yMAAAABAQHAANacAAAAlcBgA8AA/hsAAGADvhMBPgI9HMAA1rUus+e5hgEAAYDAANbNwB25rwC8G0rAANblARzAANbsLrPCuYYBAAEkwADXHgInhcaAwADXDMAdua8AvBoGvDyApsAA1yjAANdDwADX5gAAsrYBasAA1ylgA8AA/2gCAAABA8AA11nAANfmAAAAAQEBwADXXgAAAJXAYAPAAP4bAABgA746AT4CPRzAANd3LrPnuYYBAAGAwADXj8Aduj0AvBtKwADXpwEcwADXri6zwbmGAQABJMAA1+ECJ7HmgMAA18/AHbo9ALwZBrvZgKbAANfrwADYCsAA2GkBALK3AWrAANfsYAPAAP9oAgAAAQPAANgqwADYaQAAAAAAAABgA746AUrAANgzARzAANgzLrPBuYYBAAEnsrcAvBkGu9qApsAA2G7AANiNwADY+AEAsrgBasAA2G9gA8AA/2gCAAABA8AA2LPAANj4AAAAAAAAAGADvjoBSsAA2LwBHMAA2Lwus8G5hgEAASeyuAC8GQa8PYCmwADY/cAA2Q7AANm7AACy/AFqwADY/mADwAD/aAIAAAEDwADZIsAA2bsAAAABAQHAANkvAAAAmiZgA74TAABgA8AA/FUBPgFKwADZOgEiIhzAANlNFsAA2UWAwADZQcAdu3GESL4VSAEAARbAANlQLrMIuYa6uADAAP91ACEcwADZdRbAANlwgMAA2WzAHbtxgL2+AUgBAAEnhcYAwAEAEQAcwADZnBbAANmXgMAA2ZPAHbtxgL2+AYHYAQABJ4XGAMABABQGvByApsAA2dXAANnhwADaGwAAs8W5hgAAAAEDwADZ7sAA2hsAAAABAQHAANn2AAAAgL1gA8ABAAIAAGADvhMBSsAA2f8BHMAA2f8us3G5hgIAAhbAANoKLrIjuz2AwADaFsAdvDEAvAwGvB2ApsAA2iDAANovwADaegAAs+K5hgAAAAEDwADaP8AA2noAAAABAQHAANpHAAAAgL1gA8ABAAIAAGADvjoBSsAA2lYBJsAA2lYBHMAA2lYus3e5hgIAAhbAANppLrIjuz2AwADadcAdvJoAvA1gA746BrvbgKbAANqbwADausAA2vABALK5AWrAANqcYAPAAP9oAgAAAQPAANrDwADa8AAAAAAAAABgA746AUrAANrGATUAAAABAGADvjoBFsAA2sYus1a5hrsHIxzAANrQgADAHb0kSAEAASsAwAD/dRfAANrGLrNWuYYcwADa1C6z4rmGAQABJ7K5ALwduweAAMAdvSQBYAO+Oga73ICmwADbFcAA2zTAANt8AQCyugFqwADbFmADwAD/aAIAAAEDwADbQcAA23wAAAAAAAAAYAO+OgFKwADbSgE1AAAAAQBgA746ARbAANtKLrNXuYa7CCMcwADbWIAAwB29u0gBAAErAMAA/3UXwADbSi6zV7mGHMAA21wus+K5hgEAASeyugC8HbsIgADAHb27AWADvjoGu92ApsAA26bAANvFwADcHQEAsrsBasAA26dgA8AA/2gCAAABA8AA29fAANwdAAAAAAAAAGADvjoBSsAA2+ABNQAAAAEAYAO+OgEWwADb4C6zWLmGuwkjHMAA2/OAAMAdvlJIAQABKwDAAP91F8AA2+Aus1i5hhzAANv3LrPiuYYBAAEns1gAvB27CYAAwB2+UgFgA746BrvegKbAANxIwADcZ8AA3LwBALK8AWrAANxJYAPAAP9oAgAAAQPAANx6wADcvAAA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lsABDqcAAAABAQHAAQ6jAAAAmiZgA74TAABgA8AAY/MABrxdgKbAAQ84wAEPRsABD2IAArQZAAAAAQPAAQ9RwAEPYgAAAAEBAcABD14AAACaJmADvhMAAGADwABj8wAGvF6ApsABD5HAAQ+WwAEPtQACtBoAAAABA8ABD6TAAQ+1AAAAAQEBwAEPsQAAAJomYAO+EwAAYAPAAPxVAAa8X4CmwAEQA8ABEAjAARArAAKE9gAAAAEDwAEQGsABECsAAAABAQHAARAnAAAAmiZgA74TAABgA8AA/FUABrxggKbAARBvwAEQdMABEJ4AArQbAAAAAQPAARCNwAEQngAAAAEBAcABEJoAAACaJmADvhMAAGADwAD8VQAGvGGApsABEQTAARENwAERQgACtBwAAAABA8ABESHAARFCAAAAAQEBwAERNQAAAKl6YAO+HwAAYAPAAGPLAAa8YoCmwAERbcABEXrAARGiAAKr6wAAAAEDwAERicABEaIAAAABAQHAARGZAAAAgm5gA746AABgA8AAZFkABrxjgKbAARHowAER/8ABEjAAArQdAAAAAQPAARIXwAESMAAAAAEBAcABEicAAACCbmADvjoAAF0DwAD+vwFgA8AAZBkABrxkgKbAARJlwAEScsABEpMAArQeAAAAAQPAARKGwAESkwAAAAEBAcABEo0AAACfM2ADvl4AAGADwABkWQAGvGWApsABErvAARLEwAES4wACtB8AAAABA8ABEtDAARLjAAAAAQEBwAES3QAAAISbYAO+NwAAYAPAAGPLAAa8ZoCmwAEUFMABFB3AARQ8AAK0IAAAAAEDwAEULcABFDwAAAABAQHAARQ3AAAAgpRgA8AAY8sAAGADwABjywAGvGeApsABFHXAARR6wAEUlgACtCEAAAABA8ABFIXAARSWAAAAAQEBwAEUkgAAAJomYAO+EwAAYAPAAPxVAAAAHd5tAB3emwAd3skAHd7+AB3fPAAd35YAHd/hAB3gSQAd4JQAHeEYAB3hnAAd4vAAHeNYAB3jowAd4/IAHeQ9AB3klQAd5OIAHeU3AB3lZwAd5aUAHeXjAB3mIQAd5l8AHeadAB3m2wAd5xkAHedeAB3nnAAd59oAHegaAB3oWAAAAB8CvGqApsABFJvAARSqwAEYuwe0IgAAAWABvEYAAAABBbx0AAAAAAQAAAMAAAAAAAAAAABgA7xqAT8BCQEAvGkAAAAABwa8bICmwAEVN8ABFTzAARV0AAK0IwAAAAEDwAEVSMABFXQAAAACAgLAARVVAAAAmiZgA74TAMABFV8AAACBpmEDAWADvhNcAABcAAa8bYCmwAEVxsABFdnAARYGAAK0JAAAAAEDwAEV88ABFgYAAAABAQHAARYAAAAAhJtgA743AABgA8AATw0ABrxugKbAARZ3wAEWfMABFqwAArQlAAAAAQPAARaXwAEWrAAAAAEBAcABFqUAAACCamADviUAAGADwAD8VQAGvG+ApsABFt3AARb0wAEXFQACtCYAAAABA8ABFv7AARcVAAAAAQEBwAEXDQAAAIRIYAO+BAAAXQPAAP59AWADvgkABrxwgKbAARdWwAEXbsABF5cAArQnAAAAAQPAAReAwAEXlwAAAAEBAcABF48AAACESGADvgQAAF0DwAD+fQFgA8AAYjgABrxxgKbAARfUwAEX7MABGA0AArQoAAAAAQPAARf8wAEYDQAAAAEBAcABGAkAAACaJmADvhMAAF0DwAD+fQFgA8AAYjgABrxygKbAARhNwAEYZcABGLkAArQpAAAAAQPAARh2wAEYuQAAAAIBAcABGIQAAACCamADviUAAcABGJgAAAC0KmADwAD8VQFqwAEYsmADwAD8VQBdA8AA/n0BYAPAAGI4AAAAHekhAB3pbAAd6aoAHenoAB3qKwAd6nAAHeq1AB3rFgAAAAcCvHWApsABGL7AARjNwAElege0KwAAAWABvEYAAAABBbyEAAAAAAQAAAMAAAAAAAAAAABgA7x1AT8BCQEAvGkAAAAADAa8d4CmwAEZScABGU7AARmWAAK0LAAAAAEDwAEZaMABGZYAAAACAgLAARl1AAAAmiZgA74TAMABGX8AAACBpmEDAWADviVcAABcAAa8eICmwAEZ0MABGdXAARoyAAK0LQAAAAEDwAEZ68ABGjIAAAACAgLAARn/AAAAmiZgA74TAMABGgkAAACBpmEDAWADvllcAABcAAa8eYCmwAEabMABGnHAARrBAAK0LgAAAAEDwAEahcABGsEAAAACAgLAARqaAAAAgmpgA74lAMABGqcAAACBpmEDAWADvjpcAABcAAa8eoCmwAEbKcABGy7AARtWAAK0LwAAAAEDwAEbRcABG1YAAAABAQHAARtS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DgEywACtvGADviVgA70OAAS9AoCnwACuMsAArmYJtNoAXQPAAP7xAmADwABiOGADvQ4BMsAArmRgA8AAYjhgA70OAAS9BICnwACuuMAArsMJtNu8hQBgA7zhAAEFvQ2Ap8AArsjAAK7IwACu4wAAAAPAAK7RwACu4wAAAAEBAcAArtcAAAS022ADvOEAAGADvP0BPwIIAb0EgADAHkv3CQHAAK7IwAD/fgAAAAAFBr0GgKfAAK8hwACvKsAAr0gBAIO3AAAAAQPAAK81wACvSAAAAAAAAABgA8AA/FUBSsAArzgBFsAArz4WwACvOC60h7z/g7fAAP6iBr0IgKfAAK92wACvf8AAr8YAALSpAAAAAQPAAK+HwACvxgAAAAAAAABgA70OAT4CQBbAAK+XLoO3vQbAAK+XwACvoQBKwACvqAEcwACvtRbAAK+vLrSHvP+fkAAAAADAAMSABr0JgKfAALDqwACw78AAsjUAAISXAAAAAQPAALD3wACyNQAAAAICAsAAsQQAAACWe2ADvhMAwACxFwAAALSeYAO87wAAXAE+Ak7AALEswACxMQAAh0RgA70OARzAALFBFsAAsTMutNi9AEsBAAGAwACxQsAeTPwAwAD/BUnAALFQHMAAsVmCwACxVMAeTR5IAQABKwDAAP91PgM9isAAsWrAHk0eH8AAsXW9GwIAAoDAALGDwB5M/IHAALGMwB5NCgA9HMAAsawWwACxni602L0AgL8CAAKAwACxrcAeTPyCwACxuMAeTR4AwAD/Bj0cwACxyhbAALHELrSHvP9WAQABgsAAsc7AHk0eAMAAxIQ+AT0XwACx7YLAALHowB5NHrTcHMAAsggWwACx/C6027yFvQSXVwIAAhbAALITgsAAsg7AHk0etNy9EIHAALIhwB5NCgC86r0QBr0KgKfAALNZwACzXsAAtKcAAISWAAAAAQPAALNnwAC0pwAAAAICAsAAs3UAAACWe2ADviUAwACziAAAALSeYAO87wAAXAE+Ak7AALOdwACzogAAh0RgA70OARzAALOyFsAAs6QutNm9AUsBAAGAwACzs8AeTlUAwAD/BUnAALPBHMAAs8qCwACzxcAeTndIAQABKwDAAP91PgM9isAAs9vAHk53H8AAs+a9IgIAAoDAALP1wB5OVYHAALP+wB5OYwA9HMAAtB4WwAC0EC60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asAA0NVgA8ABAALAAPTdAMAAXqdOwADQ5MAA0PMAAKVhYAPAAPxVARzAAND8gMAA0PXAHmBksC0AAAAAwABes07AANEdwADRKQAAscpdA8AA/r8BYAO8iAEcwADRMoDAANErwB5gZLApAQFgA7yIATTAANE7A8AA0TvAANIZAAAAAAAAAGADvIgBPgROwADRS8AA0VgAALRDYAPAAPxVARzAANFhgMAA0VrAHmBksC0AAAAAwABes07AANF6wADRfwAAgL1gA8ABAAIBHMAA0YiAwADRgcAeYGSwtgAAAADAAF62TsAA0a7AANG4AAC0nl0DwAD/swFgA74JARzAANHPHMAA0cGAwADRusAeYGS08wAAAADAAF7tlXEAAAAAwAD+lErAANHeAR/AANHpvJQDAAOCwADR9MAeYR2DwADSAsAeYUmEwADSCMAeYXUAAMAAXrJOwADSK8AA0joAALToYAO8iAEcwADSR4LAANI8wB5g0UsBAAEcwADST4DAANJIwB5gZLHLAAAAAMAAXrQAwAD+zk7AANJ9wADSiQAAtO9dA8AA/vECYAO+E2ADvIgBHMAA0pKAwADSi8AeYGS09AECYAO+E2ADvIgBNMAA0p8DwADSn8AA0tUAAAAAAAAAYAO8iAE+AUrAANKqARzAANK8gsAA0rHAHmDRSwEAARzAANLEgMAA0r3AHmBkscsAAAAAwABetADAAP7OAMAAXtpOwADS+sAA0wcAALTwXQPAAP7xAmADviVgA7yIARzAANMYgMAA0xHAHmBktPUBAmADviVgA7yIATTAANMmA8AA0ybAANNvAAAAAQEBwADTNAAAAIJqYAO+JQAAYAO8iAE+AUrAANNEARzAANNWgsAA00vAHmDRSwEAARzAANNegMAA01fAHmBkscsAAAAAwABetADAAP7OAMAAXt9OwADTlcAA06QAALTxXQPAAP7xAmADwABiOGADvIgBHMAA062AwADTpsAeYGS09gECYAPAAGI4YAO8iAE0wADTvQPAANO9wADT8wAAAAAAAABgA7yIAT4BSsAA08gBHMAA09qCwADTz8AeYNFLAQABHMAA0+KAwADT28AeYGSxywAAAADAAF60AMAA/s4AwABe6k7AANQUwADUJAAAtPddA8AA/vECYAO+CWADwAEAAgEcwADUNYDAANQuwB5gZLT4AQFgA8ABAAIBFsAA1EqAwADUQ8AeYGSwtsAAXrYAwABe7k7AANR5wADUhQAAtKBdA8AA/vECYAPAAQACXQPAAP6/AWADvIgBHMAA1I6AwADUh8AeYGS0+QEBXQPAAP6/AWADvIgBNMAA1JwDwADUnMAA1QAAAAAAAAAAXQPAAP6/AWADvIgBPgFKwADUpwEcwADUtYDAANSuwB5gZLApAQFgA7yIATTAANS+A8AA1L7AANT4AAAAAAAAAGADvIgBPgFKwADUywEcwADU3YLAANTSwB5g0UsBAAEcwADU5YDAANTewB5gZLHLAAAAAMAAXrQAwAD+zgDAAF6yAMAAXrlOwADVLMAA1UcAALTyXQPAAP7xAmADvglgA7zSARzAANVYgMAA1VHAHmBktPgBAWADvNIBNMAA1WYDwADVZsAA1mkAAAAAAAAAYAO80gE+BE7AANV4wADVhQAAtMRgA8ABAAIBHMAA1Y6AwADVh8AeYGSwtgAAAADAAF62TsAA1anAANWwAACDKWADwAEAAgEcwADVuYDAANWywB5gZLC2AAAAAMAAXrZOwADV28AA1ewAALTGYAO+BAEcwADV9YDAANXuwB5gZJkKAAAAAMAAXtRKwADWCgEfwADWFbzZAwADFMAA1jvAHmVjCQAUwADWScAeZY8KABTAANZRwB5luwsAAADAAF7uPRzAANZ3gMAA1nDAHmBkgpABAAFqwADWe2ADwAEAAsAA9N0AwABeqErAANaFAR/AANaQvVUKAAqBwADWqMAeYKWDwADWwMAeYeaEwADW2MAeYieFwADW7cAeYrVqwADXRF0DwAD+8QJgA75eYAO8iMAA9OCGwADXacAeY1GCwADXgcAeYNGHwADXlsAeY+MUwADXr8AeZDQIABTAANfEwB5lEwkAAAa9RICnwADYGsAA2B/AAN3CAACwEAAAAAEDwADYLsAA3cIAAAABAQHAANg4AAAAhEBgA8AAXlYAAFwBPgw9HMAA2EmAwADYRMAeZumCmAEAAWrAANhPYAPAAQACwAD03QDAAF5bPRzAANhegMAA2FnAHmbpsDQBAAEWwADYaC6lYb01AMAAXmBOwADYksAA2KQAALT6XQPAAP7xAmADvIhgA8AA/hsBMsAA2KZgA7yIYAPAAP4bAD0cwADYs4DAANiuwB5m6Yh4AgFgA7yIAhbAANi9LrHKvT40wADYygPAANjKwADZrwAAAAEBAcAA2NYAAAC0pGADvIgAAGADwAD/JQE+BD0cwADY+4HAANjqwB5nSoC/AgACgsAA2PzAHmeuFsAA2RyBwADZCsAeZ0phwAD/FQDAAP8GPRzAANkvgMAA2SrAHmbpsDQBAAEWwADZRILAANk5wB5nrrRDvIoAwABeYD0cwADZXoDAANlZwB5m6YG7AQABFsAA2XWCwADZasAeZ66AvbyLAMAAXmM9HMAA2YeAwADZgsAeZum0+wEAARbAANmfgsAA2ZTAHmeutES8hbyNAMAAXpoAwABeXz0cwADZu4DAANm2wB5m6bHRAQABHMAA2dWBwADZxMAeZ0pLAQABFsAA2dYutOi9NgDAAP8FAMAAXmE9HMAA2fGAwADZ7MAeZum0/AIBYAO8iAIWwADZ/y606byFvTg0wADaDQPAANoNwADaYAAAAAEBAcAA2hkAAAC0pGADvIgAAGADwAD/JQE+AT0cwADaMoDAANotwB5m6bHRAQABHMAA2kyBwADaO8AeZ0pLAQABgsAA2k3AHmj1AMAA/wUAwABeYQDAAF6HPRzAANpsgMAA2mfAHmbptP0CAWADvIgCFsAA2nsutOW8hb05NMAA2pIDwADaksAA2voAAAACAgLAANqgAAAAgmpgA74lAMAA2rMAAAC0pGADvIgAAGADwAD/JQE+AT0cwADazIDAANrHwB5m6bHRAQABHMAA2uaBwADa1cAeZ0pLAQABg8AA2ufAHmmRAMAA/wUAwABeYQDAAF6MPRzAANsGgMAA2wHAHmbptP4CAWADvIgCFsAA2xcutOu8hb07NMAA2ygDwADbKMAA23sAAAABAQHAANs0AAAAtKRgA7yIAABgA8AA/yUBPgE9HMAA202AwADbSMAeZumx0QEAARzAANtngcAA21bAHmdKSwEAAYLAANtowB5qHwDAAP8FAMAAXmEAwABelT0cwADbh4DAANuCwB5m6bT/AgFgA8ABAAICFsAA25YutE68hb08FsAA262AwADbqMAeZumBu8AAXmMAwABemz0cwADbxIDAANu/wB5m6bUAAgFdA8AA/r8BYAO8iAIWwADb0y60oL0/NMAA2+ADwADb4MAA3JUAAAABAQHAANvyAAAAscpdA8AA/r8BYAO8iAAAYAPAAP8lAT4BPRzAANwMgMAA3AfAHmbpiHgCAWADvIgCgsAA3CHAHmrxNMAA3DgDwADcOMAA3I0AAAABAQHAANxEAAAAtKRgA7yIAABcAUrAANxhARzAANxmgMAA3GHAHmbpsdEBAAEcwADcgIHAANxvwB5nSksBAAGDwADcgcAea0UAwAD/BQDAAF5hAMAAXl8AwABeZj0cwADcoYDAANycwB5m6bT/AgFgA7zSAhbAANywLrRTvIW9PTTAANzVA8AA3NXAAN2qAAAAAQEBwADc6AAAALUBYAO80gAAYAPAAP8lAT4DPRzAAN0IgMAA3QPAHmbpgbsBAAEWwADdJoLAAN0UwB5r1rTEvNQAwABeYz0cwADdQIDAAN07wB5m6YG7AQABFsAA3V6CwADdTMAea9aDKbzVAMAAXmM9HMAA3XKAwADdbcAeZumwywEAASbAAN2RARbAAN2RgsAA3X/AHmvWtMW8hbzXYAPAAJBaAMAAXoEAwABemz0cwADdtoDAAN2xwB5m6YKQAQABasAA3bpgA8ABAALAAPTdAMAAXlwGvUWAp8AA3lnAAN5kwADfaQAAtQIAAAABA8AA3nbAAN9pAAAAAgEBwADegwAAAJomYAO+EwABwADejgAAAJgIYAPAAPxVAWrAAN6ZYAPAAPxVAGADvIgBPgRJwADepyEWwADerC6lYb01SsAA3rwBFsAA3sMutOi9Nj9OwADe4sAA3ucAALRWYAO8iAEcwADe9RbAAN7pLrTpvIW9OEsBAAGAwADe9sAebNIAwAD/BUAigcAA3wfAHmzhASEcwADfGYLAAN8UwB5tJkgBAAErAMAA/3XAAN8HwADfIAEkwADfQQIntQOAwADfPcAebNJKwADfSAE1AAAAAQBgA7yIAYLAAN9PwB5tJiMcwADfVIMAwB5toUgBAAErAAAWwADfVy606L02gwDAHm2hAWADvIgGvUaAp8AA327AAN95wADfuwAAtQQAAAABA8AA35XAAN+7AAAAAQEBwADfogAAAJomYAO+EwAAYAO8iAFKwADfqgEcwADfthbAAN+qLrTpvIW9OEsBAAGAwADft8AebgQAwAD/BQa9R4CnwADf98AA4ALAAODuAAC05gAAAAEDwADgFcAA4O4AAAABAQHAAOAjAAAAgmpgA74lAABgA7yIAT4EScAA4DEhFsAA4DYupWG9NUrAAOBGARbAAOBNLrTovTY/TsAA4GzAAOBxAAC0VmADvIgBHMAA4IAWwADgcy605byFvTlLAQABgMAA4IHAHm5pAMAA/wVAIRzAAOCagcAA4JXAHm6hSAEAASsAwAD/dcAA4JXAAOChASTAAODGAie1BYDAAOC/wB5uaUrAAODNATUAAAABAGADvIgBgcAA4NTAHm6hIxzAAODZggDAHm8RSAEAASsAABbAAODcLrTovTaCAMAebxEBYAO8iAa9SICnwADg88AA4P7AAOFPAAC1BgAAAAEDwADhG8AA4U8AAAABAQHAAOEpAAAAgmpgA74lAABgA7yIAUrAAOE6ARzAAOFHFsAA4ToutOW8hb05SwEAAYDAAOFIwB5vdADAAP8FBr1TgKfAAOGewADhusAA4eUBALUHAAAAAQPAAOHOwADh5QAAAAAAAABdA8AA/n0BYAPAAGI4AUrAAOHRARbAAOHhFsAA4dEutOu8hb07g2jAAP8TBr1JgKfAAOIjwADiLsAA4rYAALUIAAAAAQPAAOJDwADitgAAAAEBAcAA4lIAAACGHWADwABiOAAAYAO8iAE+AknAAOJiIRbAAOJnLqVhvTVKwADidwEWwADifi606L02P0rAAOKSARzAAOKoFsAA4pkutOu8hb07SwEAAYDAAOKpwB5wLQDAAP8FBr1KgKfAAOK7wADixsAA4yAAALUJAAAAAQPAAOLlwADjIAAAAAEBAcAA4vQAAACGHWADwABiOAAAYAO8iAFKwADjBwEcwADjFhbAAOMHLrTrvIW9O0sBAAGAwADjF8AecLcAwAD/BQa9S4CnwADjVMAA41nAAOO8AAC1CgAAAAEDwADjaMAA47wAAAABAQHAAON1AAAAlntgA74TAABgA8AA/FUBPgFKwADjhAEhHMAA46ccwADjiy61AgEAAYDAAOOewB5xHgC9RUgBAAEWwADjqi606L02AMAA/3UGvUyAp8AA5SPAAOUowADmlAAAtQsAAAABA8AA5UXAAOaUAAAAAgICwADlUwAAAJaDYAO+JQDAAOVmAAAAm6FgA74lAABgA8AA/FUBPgVOwADle8AA5YoAALUMYAO8iAEcwADljC605gEAAYDAAOWgwB5xlAC9R07AAOW2wADlwwAAtQ1gA7yIARzAAOXFLrTmAQABgcAA5dnAHnGiAL1HScAA5eIcwADl84PAAOXmwB5x5EgBAAEWwADl9i606L02AMAA/3VKwADmBgEpP0nAAOYXHMAA5iqCwADmG8AecbtIAQABFsAA5i0utOi9NgDAAP91SsAA5j0BKj9KwADmTwEcwADmbBbAAOZjg8AA5lbAHnHktES8hbyNhAcBAAEWwADmh4LAAOZ4wB5xu7REvIW8jQDAAP/IBr1NgKfAAOf8wADoAcAA6YEAALUOAAAAAQPAAOgowADpgQAAAAICAsAA6D0AAACWg2ADviUAwADoUQAAAJuhYAPAAGI4AABgA8AA/FUBPgVOwADoZsAA6HUAALUMYAO8iAEcwADody605gEAAYDAAOiLwB5yzQC9R07AAOihwADorgAAtQ1gA7yIARzAAOiwLrUIAQABgcAA6MbAHnLbAL1JScAA6M8cwADo4IPAAOjTwB5zH0gBAAEWwADo4y606L02AMAA/3VKwADo8wEpP0nAAOkEHMAA6ReCwADpCMAecvZIAQABFsAA6RoutOi9NgDAAP91SsAA6SoBKj9KwADpPAEcwADpWRbAAOlQg8AA6UPAHnMftES8hbyNhAcBAAEWwADpdILAAOllwB5y9rREvIW8jQDAAP/IBr1OgKfAAOnhwADp5sAA6vUAALUPAAAAAQPAAOoBwADq9QAAAAEBAcAA6h4AAACGHWADwABjqgAAXAE+BEnAAOouIRbAAOozLqVhvTVKwADqQwA/TsAA6lrAAOpfAAC0VmADvIgBFsAA6mqAwADqYcAedAi0VsAAY61AIhzAAOqeHMAA6pMWwADqhC6067yFvTtLAQABgMAA6pTAHnQIAMAA/wVIAQABKwDAAP91ARzAAOrDHMAA6rgWwADqqS6067yFvTtLAQABgMAA6rnAHnQIAMAA/wVIAQABgcAA6sbAHnQ1AMAA/3XAAOqEwADqygA9HMAA6uAWwADq0S6067yFvTuAvwIAAoDAAOrhwB50CIHAAOrtwB50NQDAAP8GBr1PgKfAAOs5wADrQMAA7DQAALUQAAAAAQPAAOtSwADsNAAAAAICAsAA610AAACD82ADtw8AwADrcAAAAISvYAO+CQAAYAPAAQACAT4DTsAA64XAAOuKAACAvWADwAEAAgEcwADrnBbAAOuMLrROvIW9PEsBAAGBwADrncAedTYAwAD/BUnAAOuqHMAA67OCwADrrsAedU9IAQABKwDAAQARPgE9MMAA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AUrAAEQcAR7AAEQgwAD5uQEBYAPAAJXZAZMAAMAA/wxWAQABgcAAREPAHrtjAMAA/tA9NQAAAAEAXQPAAP7xAmADwACV2WADwABufAEWwABEUC61Pb2jvdc1AAAAAQBgA8AAldkBgcAARFrAHrtjIxzAAERgHMAARFmDwABEWcAevCxLAQABhMAARFnAHrxSAMAA/wVIAQABKwDAAP91NQAAAAEAYAPAAG58ASMWwABEZC61cr3TH8AARHrAAG6CAAAAAB/AAESLvf0AAAAAAWADwABufDUAAAABAFwBHMAARFmDwABEWcAevCyAvwIAAoTAAERZwB68UoUAwB68mADAAP8GhQDAHryYKwFgA8AAbnw/Br3ogKnAAESlwABEqsAARewAALV/AAAAAQPAAES9wABF7AAAAAICAsAARMwAAACGHWADwABiOADAAEThAAAAgpdgA8AAldkAAFwBPgFJwABE7RbAAEUCFsAARPoWwABE8S6Cmr3SeqTDgoiBNT4DQCIcwABFNRzAAEUqFsAARRsutTy9o73ZSwEAAYDAAEUrwB69NADAAP8FSAEAASsAwAD/dQEcwABFZBzAAEVZFsAARUoutTy9o73ZSwEAAYDAAEVawB69NADAAP8FSAEAAYHAAEVnwB69RADAAP91wABFG8AARWsAPRzAAEWDFsAARXQutTy9o73ZgL8CAAKAwABFhMAevTSBwABFkMAevUQAwAD/Bj01AAAAAQBdA8AA/vECYAPAAJXZYAPAAG58ARbAAEWcLrU9vaO91zUAAAABAGADwACV2QGBwABFpsAevUQjHMAARawcwABFpYLAAEWlwB6+I0sBAAGDwABFpcAevkkAwAD/BUgBAAErAMAA/3U1AAAAAQBgA8AAbnwBIxbAAEWwLrVyvdMfwABFxsAAboIAAAAAH8AARde9/QAAAAABYAPAAG58NQAAAAEAXAEcwABFpYLAAEWlwB6+I4C/AgACg8AARaXAHr5JhADAHr6PAMAA/waEAMAevo8rAWADwABufD8GveCAqcAARfHAAEX6wABGHAEAtYAAAAABA8AARgnAAEYcAAAAAAAAAGADwAD8VQFKwABGDAEhFsAARg0utXK90wa96YCpwABGi8AARpDAAEc8AAC1gQAAAAEDwABGmcAARzwAAAACAgLAAEalAAAAg/NgA8AAldkAwABGrwAAAGpgA8AA/hsAAFwBPgNOwABGwMAARsUAABJgA8AAbnwBHMAARtAWwABGxy61Pb2jvddLAQABgMAARtHAHr9sAMAA/wU9NQAAAAEAYAPAAG58AYLAAEbcwB6/kSMcwABG4oMAwB6/yEgBAAErAAArF8AARuKDAMAev8hqgcAARurAHr98wABufgFgA8AA/htJwABG9iIWwABG+i61gL3gACEcwABHEYLAAEcMwB6/kUgBAAErAMAA/3U+AT0cwABHKRbAAEciLrV3vaO92lYBAAEmwABHLQGCwABHLcAev5FgA731AMAA/tA/Br3qgKnAAEdBwABHRsAASJYAALWCAAAAAQPAAEdKwABIlgAAAAEBAcAAR1IAAACD8WADwAEAAgAAXAE+AUnAAEdgFsAAR2QutYC94D4BPRzAAEhnFsAASGAutXe9o73ag/0BAAE0wABIbwPAAEhvwABIiwAAAAEBAcAASHAAAACBpmADvfUAAFwBSsAASHYBHMAASH4WwABIeIHAAEh2wB7A5bWDvaO9+IKOAQABgMAASITAHsCUAMABAGAAwAD+jT8GveuAqcAASJvAAEigwABJqQAAtYQAAAABA8AASKjAAEmpAAAABAQEwABItAAAAIPzYAPAAJXZAMAASL4AAABqYAPAAP4bAMAASMkAAACCkGADwAD+GwDAAEjSAAAAtYVgA8AA/hsAAFwBPgNOwABI5cAASOoAABJgA8AAbnwBHMAASPUWwABI7C61Pb2jvddLAQABgMAASPbAHsFWAMAA/wU9NQAAAAEAYAPAAG58AYTAAEkBwB7BmyMcwABJB4UAwB7B0kgBAAErAAArF8AASQeFAMAewdKCkILAAEkNwB7BdcAAbn8BYAPAAP4bScAASRYiFsAASRoutYC94AAhHMAASTGEwABJLMAewZtIAQABKwDAAP91PgNOwABJRsAASUsAAIHqYAO99QEcwABJVBbAAElNLrV3vaO92oYuAAAAAMAA/t5AHMAASXSEwABJb8AewZtIAQABhcAASXfAHsJJAMAA/3XAAElvwABJewBAHMAASZYWwABJkITAAEmLwB7Bm2rAAG5+SAEAAYHAAEmZwB7BZgDAAP8/wABJi8AASZ4APwa97ICpwABKKsAASi7AAErnAAC1QwAAAAEDwABKNMAASucAAAABAQHAAEo8AAAApIZgA73/AABgA8AA/hsBPgFJwABKShzAAEpdFsAASk4utXW9o73Yh2QBAAGAwABKacAewvwAwAD/BD4BSsAASnoBHMAASqgcwABKmBzAAEqPFsAASoEutXW9o73YSwEAAYDAAEqQwB7C/ADAAP8FgKsBAWADwAD+GwEWwABKnC61hr3tAMAA/oiDXwIBYAPAAP4bApM0wABKsAPAAEqwwABKvwAAAAICAsAASrEAAACB12ADwAD+GwDAAEq0AAAAgk5gA8AA/hsAAGADwAD+GwFKwABKugEcwABKvIHAAEq6wB7DrGQBAAGCwABKvsAew7wAwAD/QQDAAP6PPgFKwABK1QGTBr3tgKnAAErswABK8MAAS3cAALWGAAAAAQPAAEr6wABLdwAAAAEBAcAASwYAAACD82ADwACV2QAAYAPAAP4bAT4DTsAASxvAAEsgAACXAWADwABufAEcwABLKxbAAEsiLrU9vaO910sBAAGAwABLLMAexDAAwAD/BUnAAEs3HMAAS0CBwABLO8AexEtIAQABKwDAAP91SsAAS0kBkz9KwABLVwEcwABLZxbAAEtjgcAAS17AHsRLgpDAAG5/gY0BAAEWwABLboHAAEtpwB7ES2rAAG5+AMAA/0IGve6AqcAAS3zAAEuLwABMPQAAtVAAAAABA8AAS5HAAEw9AAAAAQEBwABLnwAAAKSGYAO+JQAAXQPAAP6/AWADwABufAE+A07AAEu+wABLwwAAgpddA8AA/r8BYAPAAJXZARzAAEvTFsAAS8UutXW9o73YSwEAAYDAAEvUwB7FCgDAAP8FScAAS+EcwABL6oHAAEvlwB7FKkgBAAErAMAA/ulKwABL8wFqwABL+l0DwAD+vwFgA8AAbnzAAPUNP0rAAEwIARzAAEwxHMAATBSBwABMD8AexSqAqwEBYAPAAG58ATTAAEwYA8AATBjAAEwvAAAAAQEBwABMGQAAALWHYAPAAJXZAABgA8AAbnwBSsAATCEBHMAATCoWwABMIS61Pb2jvddLAQABgsAATCvAHsXZAMAA/wUAwAD+iICtAAAAAMAA/pMGve+AqcAATELAAExHwABN6QAAgogAAAABA8AATE/AAE3pAAAAAgICwABMXQAAAKVAYAPAAE6FAMAATIsAAAClcGADwABCoQAAXAE+AT0cwABMqS6XAwEBYAPA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hQAe9rkAHvcHAB73TAAe920AHvegAAAACwK+roCrmdOZ4qAFB7XnAAABYAG+igAAAQS+sYCrm5mbwRi16L56AGADwABOZQFqm7FgA8AATmXAAMbqAQW+wAAAAAAEAAADAAAAAAAAAAAAYAO+rgE/AQkBAL6eAAAAAAsGvrOAq5oEmhWaGQECluUAAAABA5oZmhkAAAAAAAAAYAOkdwAGvreAq5odmiKaPQACtekAAAABA5osmj0AAAABAQGaOQAAAJomYAO+EwAAXAAGvriAq5pBmkaagAACteoAAAABA5pWmoAAAAACAgKaZAAAAIJqYAO+JQCadgAAALBWYAPAAGlyAABcAAa+uYCrmoSaiZq9AAK16wAAAAEDmpeavQAAAAICApqlAAAAgmpgA74lAJq1AAAAsFpgA8AAabwAAFwABr66gKuawZrGmu4AArXsAAAAAQOa15ruAAAAAQEBmuMAAACwWGADwABpQAAAXAAGvruAq5rymvebIgACte0AAAABA5sJmyIAAAABAQGbFgAAALBcYAPAAGnaAABcAAa+tICrmyabO5tDAQKqHQAAAAEDm0ObQwAAAAAAAABgA76fAAa+tYCrm8ab2Zv6AQClFAAAAAEDm+ib+gAAAAAAAABgA8AATmUBSpvrARab6y616L56vrEGvryAq5v/nBCczwAApYsBapwAYAPAAP9oAgAAAQOcFJzPAAAAAwMDnCQAAAClFGADwABOZQCcQwAAAIJaYAO+OgCcYwAAAIb1XQPAAP59AWADwAEAgwAAXAE+Aj0XnHQutei+eoCchsAe+du+sT0cnKMWnJouqh2+tLXjAwADLoGctcAe+emCnMHAHvn1AL6oBr69gKuc1JzlnaQAAIKMAWqc1WADwAD/aAIAAAEDnOqdpAAAAAAAAABcAT4CPRedWi616L56ap1yYAPAAE5lwADG6r6xPRydkRadiC6qHb60teYAAAAAvqoGvr6Aq53rnfCgAwAAte4AAAABA54IoAMAAAABAQGeHAAAAKVZYAO8RgAAYAPAAPxVAT4CPRyeOxaeNi6W5b6zltkCAWADwAD/JQInte80nl4Dnl6f7QAAAAAAAABgA8AA/yUBPgFGnrafC57HAAAAs4JgA74TABae7hae4S6lNr6PtfDAAHF9PgFFnxUBnyafMwAAhPBgA74TAYGfNcAe+wgB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gK26u7rIuvYAArZ6AAAAAQO617r2AAAAAQEBuvAAAAiAlmADvzoAAGADvyAABr+MgK27Y7twu5cAArZ7AAAAAQO7eLuXAAAAAQEBu5EAAAiAlmADvzoAAGADvyAABr+NgK28DrwbvEgAArZ8AAAAAQO8KbxIAAAAAQEBvEIAAAiAlmADvzoAAGADvyAABr+OgK28u7zIvPgAArZ9AAAAAQO82bz4AAAAAQEBvPIAAAiAlmADvzoAAGADvyAABr+PgK29WL1mvaEAApdXAAAAAQO9a72hAAAAAgICvYQAAAiB12ADvzoAvZ8AAAiCTmADvzoAAGADvzoABr+QgK2+CL4WvkEAArZ+AAAAAQO+Ib5BAAAAAQEBvjoAAAApXQPAAP59AWADvzoAAGADvzoABr+RgK2+or6wvvkAApdYAAAAAQO+vL75AAAAAgICvtwAAAiB12ADvzoAvvcAAAiCTmADvzoAAGADvzoABr+SgK2/ab92v74AArZ/AAAAAQO/gb++AAAAAgICv6EAAAiB12ADvzoAv7wAAAiCTmADvzoAAGADvyAABr+TgK3AAEAqwABAN8AAQF0AAoQHAAAAAQPAAEBCwABAXQAAAAEBAcAAQFsAAAiB12ADvzoAAGADvyAABr+UgK3AAECswABAusAAQO4AAraAAAAAAQPAAEDZwABA7gAAAAEBAcAAQOgAAACAlmADwABiOAAAYAO/OgAGv5WArcAAQTzAAEFBwABBawACtoEAAAABA8AAQUzAAEFrAAAAAQEBwABBZQAACICWYAO/OgAAYAPAAPxVAAa/loCtwABCkMAAQp7AAENMAAK2ggAAAAEDwABCssAAQ0wAAAAFBQXAAELIAAAAtoNgA786AMAAQuQAAAC2hGADwAD/aADAAEMHAAAAtoVgA74lAMAAQy4AAACbO2ADvzoAwABDRQAAAGFgA8AA/hsAAGADvzoABr+XgK3AAEPRwABD38AARAsAAraGAAAAAQPAAEP2wABECwAAAAEBAcAARAUAAACAlmADvzoAAGADvzoABr+YgK3AAETawABE3sAARQUAAraHAAAAAQPAAETwwABFBQAAAAEBAcAARP8AAACAlmADvzoAAGADwAD+GwAGv5mArcAARU3AAEVSwABFdgACoqwAAAABA8AARVfAAEV2AAAAAQEBwABFcAAACICWYAO/OgAAYAPAAPxVAAa/moCtwABGe8AARonAAEcfAAK2iAAAAAEDwABGl8AARx8AAAAEBATAAEatAAAAtoNgA786AMAARskAAAC2hGADwAD/aADAAEbsAAAAtoVgA74lAMAARxMAAACbO2ADvzoAAGADvzoABr+bgK3AAEeewABHrMAAR9IAAraJAAAAAQPAAEe9wABH0gAAAAEBAcAAR8wAAACAlmADvzoAAGADvzoABr+cgK3AAEgawABIH8AASEMAAqz4AAAAAQPAAEgkwABIQwAAAAEBAcAASD0AAAiAlmADvzoAAGADwAD8VQAGv52ArcAASU3AAElbwABKBAACtooAAAABA8AASWnAAEoEAAAABQUFwABJfwAAALaDYAO/OgDAAEmbAAAAtoRgA8AA/2gAwABJvgAAALaFYAO+JQDAAEnlAAAAg9ZgA786AMAASf4AAACAlmADvzoAAGADvzoABr+egK3AAEp/wABKjcAASq8AAraLAAAAAQPAAEqawABKrwAAAAEBAcAASqkAAACAlmADvzoAAGADvzoABr+fgK3AAEsswABLOsAAS14AAraMAAAAAQPAAEtJwABLXgAAAAEBAcAAS1gAAACAlmADvzoAAGADvzoABr+ggK3AAEvZwABL3sAATAkAAraNAAAAAQPAAEvqwABMCQAAAAEBAcAATAMAAAiAlmADvzoAAGADwAD8VQAGv6GArcAATRrAAE0owABOAwACto4AAAABA8AATT3AAE4DAAAABgYGwABNUwAAALaDYAO/OgDAAE1vAAAAtoRgA8AA/2gAwABNkgAAALaFYAO+JQDAAE25AAAAg9ZgA786AMAATdIAAACAlmADvzoAwABN+gAAALaPXQPAAP7xAmADwAEAAmADvzoAAGADvzoABr+igK3AAE5jwABOaMAATp4AAraQAAAAAQPAAE59wABOngAAAAICAsAATowAAACAlmADvzoAwABOmgAAAIPWYAPAAQACAABgA8AA/FUABr+jgK3AAE8swABPOsAAT3MAAraRAAAAAQPAAE9SwABPcwAAAAICAsAAT2EAAACAlmADvzoAwABPbwAAAIPWYAPAAQACAABgA786AAa/pICtwABQZMAAUGnAAFC+AAK2kgAAAAEDwABQe8AAUL4AAAACAgLAAFCRAAAAtpNgA786AMAAUK8AAAC2lGADvzoAAGADwAD8VQAGv6WArcAAUc3AAFHbwABSAQACtpUAAAABA8AAUezAAFIBAAAAAQEBwABR+wAAAICWYAO/OgAAYAO/OgAGv6aArcAAUx3AAFMkwABTSgACtpYAAAABA8AAUzXAAFNKAAAAAQEBwABTRAAAAICWYAO/OgAAYAPAAP9oAAa/p4CtwABUV8AAVGTAAFSNAAK2lwAAAAEDwABUeMAAVI0AAAABAQHAAFSHAAAAgJZgA786AABgA74lAAa/qICtwABU4cAAVObAAFUVAAK2mAAAAAEDwABU9sAAVRUAAAABAQHAAFUPAAAIgJZgA786AABgA8AA/FUABr+pgK3AAFWQwABVnsAAVfQAAraZAAAAAQPAAFWywABV9AAAAAICAsAAVcgAAAC2g2ADvzoAwABV7gAAAICWYAPAAGJuAABgA786AAa/qoCtwABWo8AAVrrAAFbqAAK2mgAAAAEDwABWy8AAVuoAAAABAQHAAFbkAAAIgJZgA786AABgA8AAYm4ABr+rgK3AAFc/wABXTcAAV3wAArabAAAAAQPAAFdcwABXfAAAAAEBAcAAV3QAAACElF0DwAD+fQFgA74lAABgA786AAa/rICtwABYR8AAWFTAAFikAAKzvAAAAAEDwABYZcAAWKQAAAADAwPAAFh7AAAAhZdgA786AMAAWJIAAACCamADviUAwABYnwAAAIC9YAPAAGpKAABgA78gAAa/rYCtwABZI8AAWTDAAFl7AAK2nAAAAAEDwABZScAAWXsAAAACAgLAAFlfAAAAhZdgA786AMAAWXIAAAClUmADwABMuAAAYAO/IAAGv66ArcAAWj7AAFpMwABahwACtp0AAAABA8AAWnjAAFqHAAAAAQEBwABaggAAAIKUYAPAAGPLAABgA786AAa/r4CtwABbKsAAWzfAAFttAAKDHAAAAAEDwABbP8AAW20AAAACAgLAAFtOAAAAtp5gA786AMAAW2YAAAC2n2ADvzoAAGADvyAABr+wgK3AAFwQwABcHcAAXE8AAragAAAAAQPAAFwhwABcTwAAAAICAsAAXDAAAAC2n2ADvzoAwABcRgAAALaeYAO/OgAAYAO/IAAGv7GArcAAXP7AAF0LwABdSAACtqEAAAABA8AAXR3AAF1IAAAAAgICwABdLAAAAIWXYAO/OgDAAF0/AAAApVJg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AWqbBWADwAD/aAIAAAEDmzSbZQAAAAEBAZtDAAAIgJZgA786AABgA78gAUqbUwFqm2BgA78gwAD12wbAAEAQgK6bapuDm78AALZyAWqba2ADwAD/aAIAAAEDm5SbvwAAAAEBAZujAAAIgJZgA786AABgA78gAUqbrQFqm7pgA78gwAD12wbAAEARgK6bxJvdnBAAALZxAWqbxWADwAD/aAIAAAEDm+WcEAAAAAEBAZv0AAAIgJZgA786AABgA78gAUqb/gFqnAtgA78gwAD12wbAAEASgK6cFZwunGEAALZwAWqcFmADwAD/aAIAAAEDnDacYQAAAAEBAZxFAAAIgJZgA786AABgA78gAUqcTwFqnFxgA78gwAD12wbAAEATgK6cZpx/nLMAALZvAWqcZ2ADwAD/aAIAAAEDnIicswAAAAEBAZyXAAAIgJZgA786AABgA78gAUqcoQFqnK5gA78gwAD12wbAAEAUgK6cuJzRnQkAALZuAWqcuWADwAD/aAIAAAEDnN6dCQAAAAEBAZztAAAIgJZgA786AABgA78gAUqc9wFqnQRgA78gwAD12wbAAEAVgK6dDp0nnWMAALZtAWqdD2ADwAD/aAIAAAEDnTidYwAAAAEBAZ1HAAAIgJZgA786AABgA78gAUqdUQFqnV5gA78gwAD12wbAAEAWgK6daJ2BnbMAALZsAWqdaWADwAD/aAIAAAEDnYidswAAAAEBAZ2XAAAIgJZgA786AABgA78gAUqdoQFqna5gA78gwAD12wbAAEAXgK6duJ3Rng4AALZrAWqduWADwAD/aAIAAAEDneOeDgAAAAEBAZ3yAAAIgJZgA786AABgA78gAUqd/AFqnglgA78gwAD12wbAAEAYgK6eE54snmUAALZqAWqeFGADwAD/aAIAAAEDnjqeZQAAAAEBAZ5JAAAIgJZgA786AABgA78gAUqeUwFqnmBgA78gwAD12wbAAEAZgK6eap6Dnr8AALZpAWqea2ADwAD/aAIAAAEDnpSevwAAAAEBAZ6jAAAIgJZgA786AABgA78gAUqerQFqnrpgA78gwAD12wbAAEAagK6exJ7dnxQAALZoAWqexWADwAD/aAIAAAEDnumfFAAAAAEBAZ74AAAIgJZgA786AABgA78gAUqfAgFqnw9gA78gwAD12wbAAEAbgK6fGZ8yn3EAALZn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AgACgK2WwB+HqIGtoMAfh7YAwABAnQAGwABAnYCvra6ts65PAAC28sAAQEkAAAABA63Erk8AAAACAgKtzgAAALbwYAPAAEH5AK3kAAAAmiZgA74TAABgA8AA/FUBPgFKre8BIhyuEhauAxat9i62xcAAQEnAAEBPh/bAAE6TqpQBAAGBriHAH4gpAMAActgAHK46gK4xwB+IG7bzAQABga5HwB+IKQDAAEIXBsAAQKmAr65Urm2u6QAAtl8Baq5VYAPAAP9oAgAAAQOuf67pAAAAAgICrokAAAi28GADwABB+QCunwAAAJomYAO+EwAAYAO/IAFKrq0BHq66vy0BAAEcrsYutvTAAEBJAgACgK7awB+ItYGu5MAfiMMAwABAngAGwABAnoCvru6u86+MAAC29MAAQEkAAAABA68Gr4wAAAACAgKvEAAAALbwYAPAAEH5AK8mAAAAmiZgA74TAABgA8AA/FUBPgFKrzEBIhyvRRavOC62xcAAQEnAAEBPtvUBAAGBr1PAH4k0AMAATpoAHK9sgK9jwB+JJrbsAgACga92wB+JNBavey62xcAAQEnAAEBPAMAAQhsGwABAqoCvr5GvqrF8AAC2YAFqr5JgA8AA/2gCAAABA6+2sXwAAAACAgKv0QAACLb2YAPAAEH5AK/tAAAAmiZgA74TAABgA78gAT4CTrAGsA8AALbwYAO/OgEjHLAWgbASwB+J00gBAAEWsCgWsBkutFnAAEBvmy+5kgDAAP91HLA9LrZYAQABgbBTwB+J0wDAAECWHLBiLrZXAQABgbB3wB+J0wDAAECVAWADwABB+UmwgRywshywlICwhcAficWXVwIAAiawmgGCsJrAH4noYAPAAEH5FrCkLrbFwABAScAAQE8AwABCH0gBAAGCsLXAH4noAMAAQhg+AUqwxwFqsNtgA78gwAD1y0mw7Byw/4Cw8MAficW29wIAAiaxCgGCsQrAH4noYAPAAEH5FrEULrbFwABAScAAQE8AwABCID4BSrErAWqxP2ADvyDAAPXTPgFKsVkBarFtYAO/IMAA9dsGwABAq4CvsYGxmrHiAACBVQFqsYJgA8AA/2gCAAABA7GhseIAAAABAQGxqwAACICWYAPAAEH5AABgA78gAUqxuwEesci/LQEAARax2oCx1MAfiyeBVcAAQiYABsAAQKyAr7HnsgCyXQAAtmEBarHoYAPAAP9oAgAAAQOyB7JdAAAAAQEBshEAAAiAlmADwABB+QAAYAO/IAFKsiEBHrIuvy0BAAEiFrJAgLI6wB+LgrZhwABCKgAhFrJSgLJMwB+Lgrb4wABCJwAGwABArYCvsmKye7LbAAC2YgFqsmNgA8AA/2gCAAABA7KIstsAAAABAQGykgAACICWYAPAAEH5AABgA78gAUqyogEesq+/LQEAASIWssGAsrvAH4vwtmHAAEIqARyyzC62+cAAQEkBAAGAstTAH4vwAMAAQJ8ABsAAQK6Ar7LgsvizRAAAtmMBarLhYAPAAP9oAgAAAQOzBbNEAAAAAQEBsw8AAAitamADwABB+QAAYAO+EwE+AUqzGwEcsyeAsyLAH4xmtvoBAAEWszMutsXAAEBJwABATwDAAEIeBsAAQK+Ar7NJs1qziwAAtpgBarNKYAPAAP9oAgAAAQOzarOLAAAAAQEBs3QAAAiAlmADwABB+QAAYAPAAPxVAUqzfgEWs4SAs37AH4zMtvvAAEIxBsAAQLCAr7OQs7O0SwAAtpoBarORYAPAAP9oAgAAAQOzxLRLAAAAAQEBs84AAAitamADwABB+QAAYAPAAGJuAT4CSbPaFrPjgLPewB+NILb7wABCMT4CTrQCtAwAALb8YAPAAEJnASa0AgGAtA7AH40gYAPAAEJnSrQaARa0K4G0IcAfjU6AlsAAQms/SrQ8ASsGwABAsYCvtFC0arT+AAC2mQFqtFFgA8AA/2gCAAABA7R+tP4AAAACAgK0mQAACLaDYAPAAEH5ALS/AAAAgJZgA8AAYm4AAGADvzoBPgFKtMwBH7TXwABCegIAAoC05cAfjbKBtPTAH43AAAbAAECygK+1A7UctecAAKhcAWq1BGADwAD/aAIAAAEDtSK15wAAAAEBAbUsAAAIgJZgA8AAQfkAAGADvyABPgFJtTkWtUOAtT3AH44dqFzAAEIoPgFKtVMBarVnYAO/IMAA9ctJtXgWtYKAtXzAH44dtvjAAEInPgFKtZYBarWqYAO/IMAA9ds+AUq1xAFqtdhgA78gwAD10wbAAECfgK+17LXxthgAALb5wABASQAAAAEDtfi2GAAAAAEBAbYCAAAAgJZgA8AAQfkAAGADwAD8VQFKtgwBFrYSgLYMwB+OsKhcwABCKAbAAECzgK+2HbY2tywAALS5AWq2HmADwAD/aAIAAAEDtkG3LAAAAAEBAbZLAAAIgJZgA8AAQfkAAGADvyABPgFKtlgBHrZsvy8BAAEiIiIiHLZ5Lrb9wABASQEAAYC2j8AfjwQAwABAoAEctqEutv7AAEBJAQABgLa2wB+PBADAAECiARy2yC62/8AAQEkBAAGAtt/AH48EAMAAQKEBHLbxLrcAwABASQEAAYC3B8AfjwQAwABApAEctxkutvnAAEBJAQABgLchwB+PBADAAECfAAbAAEC0gK+3MbdKt6wAALZkAWq3MmADwAD/aAIAAAEDt1u3rAAAAAEBAbdlAAAIgJZgA8AAQfkAAGADvyABSrd1AR63gr8vAQABHLePLrb9wABASQEAAYC3pcAfj9YAwABAoAAGwABAoICvt7G3trnkAAC2/cAAQEkAAAABA7fLueQAAAABAQG31QAAAICWYAPAAEH5AABgA8AA/FUBPgFKuG8BIiIiIiIcuHYutvHAAEBJAgACgLiEwB+QNBa4mha4iy60WcAAQG+yWbnaAMAAQJwBHLi0LrbxwABASQIAAoC4wsAfkDQWuNgWuMkutFnAAEBvslq52wDAAECcARy47y628cAAQEkCAAKAuP3AH5A0FrkTFrkELrRZwABAb7JouekAwABAnAEcuTIutvHAAEBJAgACgLlAwB+QNBa5Vha5Ry60WcAAQG+yabnqAMAAQJwBHLlwLrbxwABASQIAAoC5fsAfkDQWuZQWuYUutFnAAEBvsmq56wDAAECcARy5ri628cAAQEkCAAKAubzAH5A0FrnSFrnDLrRZwABAb7JbudwAwABAnAbAAEC1gK+56boCumYAALZlAWq56mADwAD/aAIAAAEDuhS6ZgAAAAEBAboeAAAIgJZgA8AAQfkAAGADvyABSrouAR66O78vAQABHLpILrb/wABASQEAAYC6X8AfkYAAwABAoQAGwABAoYCvumu6cLrYAAC2/8AAQEkAAAABA7qGutgAAAABAQG6kAAAAICWYAPAAEH5AABgA8AA/FUBPgFKup0BHLqkLrbxwABASQIAAoC6ssAfkd4WusgWurkutFnAAEBvsl253gDAAECcBsAAQLaAr7rduva7VgAAtmYBarreYAPAAP9oAgAAAQO7BrtWAAAAAQEBuxAAAAiAlmADwABB+QAAYAO/IAFKuyABHrstvy8B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wABEJ8AARMAAALZxAWrAAEQPYAPAAP9oAgAAAQPAAEQvwABEwAAAAAEBAcAARDkAAAiAlmADwABB+QAAYAO/IAE+AUrAAERGAR7AAERavy0BAAEiIRbAAERtgMAARGfAH5mftvjAAEInABzAAESDLrb0wABASQIAAoDAAESXwB+ZnxbAAEStFsAARJ4utFnAAEBvsmq56wDAAECeAAbAAEDBgK/AAETFwABE3sAARYUAALZyAWrAAETGYAPAAP9oAgAAAQPAAETvwABFhQAAAAEBAcAARPkAAAiAlmADwABB+QAAYAO/IAE+AUrAAEUGAR7AAEUavy0BAAEiIRbAAEUtgMAARSfAH5pHtvjAAEInABzAAEVDLrb0wABASQIAAoDAAEVXwB+aRxbAAEVtFsAARV4utFnAAEBvsmi56QDAAECeAAbAAEDCgK/AAEWKwABFo8AARjwAALZzAWrAAEWLYAPAAP9oAgAAAQPAAEW6wABGPAAAAAEBAcAARcQAAAiAlmADwABB+QAAYAO/IAE+AUrAAEXRAR7AAEXlvy0BAAEcwABF+i629MAAQEkCAAKAwABGDsAfmu8WwABGJBbAAEYVLrRZwABAb7JouekAwABAngAGwABAw4CvwABGQcAARlrAAEbIAAC2dAFqwABGQmADwAD/aAIAAAEDwABGacAARsgAAAABAQHAAEZzAAAIgJZgA8AAQfkAAGADvyABPgFKwABGgAEewABGlL8tAQABHMAARqaAwABGoMAfm4C3AwEAARbAAEa2LrbFwABAScAAQE8AwABCEgAGwABAxICvwABGzcAARubAAEdrAAC2dQFqwABGzmADwAD/aAIAAAEDwABG7sAAR2sAAAABAQHAAEb4AAAIgJZgA8AAQfkAAGADvyABPgFKwABHBQEewABHGb8tAQABIhzAAEc0gMAARy7AH5wHtwQBAAEWwABHRC62xcAAQEnAAEBPAMAAQhQAIRbAAEdcgMAAR1bAH5wHtvjAAEInAAbAAEDFgK/AAEdwwABHicAAR+EAALZ2AWrAAEdxYAPAAP9oAgAAAQPAAEeXwABH4QAAAAEBAcAAR6EAAAiAlmADwABB+QAAYAO/IAFKwABHsQEewABHvr8tAQABHMAAR8outwXAAEBJAQABgMAAR9rAH5ylAMAAQKUABsAAQKWAr8AAR+bAAEfrwABIPwAAtwXAAEBJAAAAAQPAAEf6wABIPwAAAAEBAcAASAQAAACAlmADwABB+QAAYAPAAPxVAT4BSsAASBEBHMAASB6AwABIGMAfnRe3BAEAARbAAEguLrbFwABAScAAQE8AwABCFAbAAEDGgK/AAEhEwABIXcAASOUAALZ3AWrAAEhFYAPAAP9oAgAAAQPAAEhlwABI5QAAAAEBAcAASG8AAAiAlmADwABB+QAAYAO/IAE+AUrAAEh8AR7AAEiQvy0BAAEiHMAASKuAwABIpcAfnZW3BgEAARbAAEi+LrbFwABAScAAQE8AwABCEwAhFsAASNaAwABI0MAfnZW2+MAAQicABsAAQMeAr8AASOrAAEkDwABJcwAAtngBasAASOtgA8AA/2gCAAABA8AASRHAAElzAAAAAQEBwABJGwAACICWYAPAAEH5AABgA78gAT4BSsAASSgBHsAASTy/LQEAARzAAElOgMAASUjAH54ztwYBAAEWwABJYS62xcAAQEnAAEBPAMAAQhMABsAAQMiAr8AASXjAAEmRwABKGAAAtnkBasAASXlgA8AA/2gCAAABA8AASZrAAEoYAAAAAQEBwABJpAAACICWYAPAAEH5AABgA78gAT4BSsAASbEBHsAAScW/LQEAASIcwABJ4IDAAEnawB+eurcHAQABFsAASfEutsXAAEBJwABATwDAAEIVACEWwABKCYDAAEoDwB+eurb4wABCJwAGwABAyYCvwABKHcAASjbAAEqQAAC2egFqwABKHmADwAD/aAIAAAEDwABKRcAASpAAAAABAQHAAEpPAAAIgJZgA8AAQfkAAGADvyABSsAASl8BHsAASmy/LQEAARzAAEp4LrcIwABASQEAAYDAAEqJwB+fWADAAECmAAbAAECmgK/AAEqVwABKmsAASvAAALcIwABASQAAAAEDwABKqsAASvAAAAABAQHAAEq0AAAAgJZgA8AAQfkAAGADwAD8VQE+AUrAAErBARzAAErOgMAASsjAH5/KtwcBAAEWwABK3y62xcAAQEnAAEBPAMAAQhUGwABAyoCvwABK9cAASw7AAEuWAAC2ewFqwABK9mADwAD/aAIAAAEDwABLFsAAS5YAAAABAQHAAEsgAAAIgJZgA8AAQfkAAGADvyABPgFKwABLLQEewABLQb8tAQABIhzAAEtcgMAAS1bA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AEgVgcAASBPAIA8nlqzAAEEuAMAAct5KwABIHAEqP0rAAEg0ASkGwABBTICywABISMAASFHAAEsIAAC3VQAAAAEDwABIYcAASwgAAAACAgLAAEhvAAAAg9tgA8AAQScAwABIgwAAAKVAYAPAAE6FAABgA8AAQfkBPgNAHMAASKIWwABInS6WrMAAQS5IAQABFsAASKuAwABIpcAgEUyWrMAAQS4AwAD/dcAASJ3AAEivAE7AAEnGwABJzwAAt0hgA8AA/hsBIxzAAEnYFsAASdIuhIPAAEEvYwEAARbAAEnggMAASdrAIBFMhIPAAEEvAMAA/0kcwABJ9xbAAEnxLoSDwABBL4N8AQABHMAASgwcwABKBxbAAEoBgMAASfvAIBFMhIPAAEEvg3wBAAGUAMAA/jOBBgEAARzAAEoOlISSAAAAAMAA/jYAwAD+NADAAP4zHMAASigWwABKIoDAAEocwCARTISDwABBL4N8AQABHMAASjccwABKMhbAAEosLoSDwABBL4N8AQABlADAAP4zgQYBAAEcwABKOZSEkgAAAADAAP42AMAA/jQAwAD+MwFgA8AA/htJwABKQhzAAEpMFsAASkYuhIPAAEEvSAEAAYLAAEpPwCARrwDAAP8/PgFKwABKYQEuScAASnkcwABKiRbAAEqDgMAASn3AIBFMhIPAAEEvSAEAAYLAAEqMwCARrwDAAP8/PgFKwABKngGAwABKpcAgEUw+AUrAAEq/AR7AAErKwABBMQMAAxbAAEriLpaswABBLoLAAErowCARr4HAAErywCARXAAGwABBTYCywABLDcAASxbAAE5dAAC3VgAAAAEDwABLMMAATl0AAAACAgLAAEtFAAAAg9tgA8AAQScAwABLWQAAAKVAYAPAAE6FAABgA8AAQfkBPgVAIRzAAEt4FsAAS3MulqzAAEEuSAEAARbAAEuBgMAAS3vAIBODlqzAAEEuAMAA/3XAAEtzwABLhQBAHMAAS64WwABLn4HAAEuTwCATk4f2wABOk5tqAgACFsAAS8GAwABLu8AgE4OWrMAAQS4WwABLxy6WrMAAQS4AwABy3cAAS5PAAEvMAEnAAExCFsAATEYutmHAAEFaSsAATE8BHMAATFYut1cBAAGAwABMaMAgE4MAwABBTj9OwABNl8AATaAAALdIYAPAAP4bARzAAE2uFsAATaiAwABNosAgE4OEg8AAQS+DfAEAARzAAE29HMAATbgWwABNsi6Eg8AAQS+DfAEAAZQAwAD+M4EGAQABHMAATb+UhJIAAAAAwAD+NgDAAP40AMAA/jNJwABNyBzAAE3YFsAATdKAwABNzMAgE4OEg8AAQS9IAQABgsAATdvAIBRlAMAA/z8+AUrAAE3tAYDAAE30wCATgz4BSsAATg4BHsAAThnAAEExAwADFsAATjeAwABOMcAgE4OWrMAAQS6CwABOPcAgFGWBwABOR8AgE5MABsAAQU6AssAATmLAAE5rwABPBQAAt1cAAAABA8AATnzAAE8FAAAAAQEBwABOigAAAIPbYAPAAEEnAABgA8AAQfkBPgFKwABOlwEjIhbAAE6eLrb4wABBWwAWwABOsoDAAE6swCAVfLb4wABBWx/AAE7LwABBbAAAAAAfwABO6sAAQWsAAAAAAWADwABB+QbAAEFPgLLAAE8KwABPG8AAVTsAALa1AWrAAE8LYAPAAP9oAgAAAQPAAE8hwABVOwAAAAMDA8AATy8AAACWe2ADviUAwABPPQAAAIC9YAPAAGpKAMAAT1AAAAClQGADwABOhQAAYAPAAPxVAT4GTsAAT3LAAE+BAAC0WWADuYcBFsAAT4+CwABPg8AgFjS0WcAATo1AHMAAT7cWwABPsoDAAE+qwCAWFoC9vgFIAQABFsAAT7+BwABPusAgFiSBssAAak4AwAEAEcAAT6rAAE/DAEnAAE/KFsAAT84ugVXAAEFXSsAAT9cBKj9JwABP6RbAAE/tLqhcwABBWD4BSsAAT/0BHMAAUBCCwABQBMAgFjS3WAMAAxbAAFA3g8AAUCjAIBZPsly53YHAAFBEwCAWJIDAAFBKwCAWFgDAAE6mP07AAFBrwABQcQAAg9tgA74TARbAAFB7gMAAUHPAIBYWhRm+M0nAAFCPHMAAUJmEwABQk8AgFyJIAQABFsAAUKuDwABQnMAgFk+yXLndAMAA/3U+AUrAAFDAARbAAFDHLrb4wABBW0nAAFDeFsAAUOIutmHAAEFaPgFKwABQ8wEcwABRBoLAAFD6wCAWNLdYAwADFsAAURMulqzAAEEugcAAURnAIBYkgMAAUR/AIBYWAMAATqZJwABRNBbAAFE4Lrc9wABBYz4BSsAAUUwBIiIcwABRX4LAAFFTwCAWNLdYAwADFsAAUWwulqzAAEEugcAAUXLAIBYkgMAAUXjAIBYWAMAATqYBHMAAUakWwABRmoLAAFGOwCAWNIf2wABOk5tqAgAChMAAUbbAIBciFsAAUb0ulqzAAEEuAMAAct0BHMAAUdyCwABR0MAgFjS3WQIAAhbAAFH0LpaswABBLoTAAFH6wCAXIgDAAE6hPgVAFsAAUhwuqvXAAEFkwABSHMAAUiUATsAAUjPAAFI6AACBdmADwAD8VQEiIiIcwABSSILAAFI8wCAWNLdYAwADFsAAUlUulqzAAEEugcAAUlvAIBYkgMAAUmHAIBYWAMAATqYBHMAAUpIWwABSg4LAAFJ3wCAWNIf2wABOk5tJAgAChMAAUp7AIBciFsAAUqUulqzAAEEuAMAAct4BHMAAUsSCwABSuMAgFjS3WgIAAoTAAFLhwCAXIhbAAFLoLpaswABBLgDAAE6kARzAAFMHgsAAUvvAIBY0t1sCAAKEwABTLsAgFyIWwABTNS6WrMAAQS4AwABOoEnAAFNChcAAU0bAIBinSsAAU04BKT9OwABT+cAAVAMAALdcXQPAAP59AWADvhMBHMAAVBGCwABUBcAgFjS3DAEAARbAAFQdLpaswABBLgDAAE6eSsAAVCoBHMAAVDuGwABUMcAgGZ+B1gEAATTAAFQ/A8AAVD/AAFUwAAAAAQEBwABUQAAAAKmKYAO+EwAAYAPAAPxVAUrAAFRfASIiHMAAVGuCwABUX8AgFjS3WAMAA4fAAFR4wCAaCIHAAFSKwCAWJIDAAFSQwCAWFgDAAE6mARzAAFTBFsAAVLKCwABUpsAgFjSH9sAATpObagIAAoTAAFTOwCAXIofAAFTVwCAaCADAAHLdARzAAFUAgsAAVPTAIBY0t1kCAAKHwABVGMAgGgiEwABVKsAgFyIAwABOoQDAAP6SBsAAQVCAssAAVUDAAFVRwABXjQAAtpwBasAAVUFgA8AA/2gCAAABA8AAVWrAAFeNAAAAAgICwABVewAAAKVSYAPAAEy4AMAAVZwAAAilQGADwABOhQAAYAPAAPxVAT4DScAAVgQWwABWCC63GcAAQVlKwABWFwEqP0nAAFcVIhbAAFcZLrZhwABBWgAWwABXKRbAAFckLpaswABBLoQfvhdKwABXNQEqP0rAAFdIARzAAFdbgcAAV0/AIBsFt10DAAMWwABXbS6WrMAAQS6AwABXc8AgGvUWwABXfS63O8AAQEnAAEFWAMAATqUGwABBUYCywABXksAAV6vAAFvXAAC2oQFqwABXk2ADwAD/aAIAAAEDwABXvcAAW9cAAAACAgLAAFfHAAAApVJgA8AATLgAwABX3gAAAKVAYAPAAE6FAABgA74lAT4IScAAV/EWwABX9S63GcAAQVlKwABYBAErP0nAAFgVHMAAWCWBwABYGcAgG/G3XgIAAoDAAFg5wCAb4S4AwABOqErAAFhKASs/TsAAWHLAAFh6AACHrV0DwAD+fQFgA74lARzAAFiIgcAAWHzAIBvxtX0CAAKAwABYlsAgG+EuAMAATqpJwABYqyEcwABYvhbAAFi3gsAAWK/AIBxSYcAA/qBIAQABlADAAP8/SsAAWMQBKz9OwABY4sAAWOkAAIF2YAO+JQEWwABY84LAAFjrwCAcUoMewAD+o07AAFkKwABZFAAArr5gA74TARbAAFkdg8AAWRbAIBy9hRm+M0nAAFotFsAAWjEuqvXAAEFkPgJJwABaeRzAAFqJgcAAWn3AIBvxt18CAAIWwABari6WrMAAQS6EwABatMAgHOMAwABOoz4BSsAAWsoBg8AAWtHAIBy9P0rAAFrxASs+AknAAFsRHMAAWzAWwABbIYHAAFsVwCAb8Yf2wABOk5tqAgACFsAAWz0ulqzAAEEuhMAAW0PAIBzjAMAAct0+AUrAAFtZAYPAAFtgwCAcvT9JwABbdhzAAFuGgcAAW3rAIBvxt2ACAAIWwABbnS6WrMAAQS6EwABbo8AgHOMAwABOokrAAFuvAYPAAFu2wCAcvT9KwABbyAErBsAAQVKAssAAW9zAAFv2wABcygMASAFqwABb3WADwAD/aAIAAAEDwABb+MAAXMoAAAABAQHAAFv9AAAAg9tbAABgA8AA/FUBPgRJwABcCh7AAFwOwAD3/AIAAi6AwABcHsAgHjMASsAAXCYBKT9JwABcNyElwABcQYDAAFw7wCAeM2ADwABBJ0rAAFxTASo/TsAAXHLAAFx8AAC3YWADwABBJwEmwABccgGAwABcfsAgHjNgA8AAQSdKwABciQEiHMAAXJcWwABckS6Eg8AAQS9IAQABFsAAXKSBwABcmsAgHo+Eg8AAQS8AwAD/PwAcwABctBbAAFyvLpaswABBLkgBAAEWwABcwYHAAFy3wCAej5aswABBLgDAAP91BsAAQWWAssAAXM/AAFzjwABdNQEAg8YBasAAXNBgA8AA/2gCAAABA8AAXOzAAF01AAAAAAAAAGADwAD+GwE+AUrAAFzyARzAAF0cIxzAAFz/FsAAXPoulqzAAEEuSAEAASsAwAD/dZMWwABdEhbAAF0NLpaswABBLoPGwAD/ewFgA8AA/htkAQABHMAAXSE3H4ONAQABFsAAXSkWwABdIy6Eg8AAQS+DxsAA/2AAwAD/QwDAAP9BBsAAQVOAssAAXTrAAF1NwABesAAAIwFqwABdO2ADwAD/aAIAAAEDwABdVcAAXrAAAAAAAAAAYAPAAQACAT4IScAAXV4WwABdYi63GcAAQVlKwABdcQEjFsAAXXgutvjAAEFbJ4QDJ7diAWADwAEAAj9OwABdrMAAXbMAAIKPYAPAAQBMAR/AAF25wAEAawAAAABJwABdzRbAAF3RLrb4wABBWz0cwABd5IDAAF3dwCAgRIKOAQABJ7djAMABAGA/ScAAXfgWwABd/C62YcAAQVo9HMAAXgyAwABeBcAgIESCjgEAASe3ZADAAQBgP0nAAF4hFsAAXiUutz3AAEFjPRzAAF44gMAAXjHAICBEgo4BAAEnt2UAwAEAYD9JwABeUBbAAF5ULqr1wABBZD0cwABeZoDAAF5fwCAgRIKOAQABJ7dmAMABAGA/PRzAAF6EgMAAXn3AICBEgo4BAAEWwABejxbAAF6KLpaswABBLoC9vgEAwAEAYErAAF6aASTAAF6sAyeZ8oDAAF6kwCAgRCeZ8wAAH+QGAB/mvgAf6BsAH+kGAB/pgQAf6c4AH+oaAB/qfgAf6uIAH+s+AB/rdQAf66wAH+vjAB/sGgAf7FEAH+yIAB/svwAf7RkAH+1zAB/t6wAf7nAAH++RAB/yEQAf9H4AH/TuAB/2FwAf9rkAH/eJAB/4KwAf+M0AH/kuAB/5ywAf+rAAH/tBAB/+mAAgAG4AIAMIACAE5gAgC8gAIA7pACARIgAgE1kAIBVSACAV4AAgGr8AIBurACAd/gAgHxsAIB/SACAhZQAAADECwABBcYCzgUqBWY/RB7dnAAABYAHAAP9oAAFgAcAAQfkAAQXAAEGXgLOBn4GfgbMAAAADgbGBswAAAAAAAABgA8AAQXEBPwEJAYGfwAD/fgAAAAAiBsAAQXOAs4GEgZGBmgECtwoAAAABA4GagZoAAAAAAAAAYAPAAEH5AAbAAEF0gLOBuIHNgfUBALcZAWqBuWADwAD/aAIAAAEDgduB9QAAAAAAAABgA8AA/FUBSoHeARaB6BaB3i63CsAAQXO3GcAAQikGwABBdYCzgfmCDoIqAQCBVQFqgfpgA8AA/2gCAAABA4IWgioAAAAAAAAAYAPAAPxVAUqCGQEWgiMWghkutwrAAEFzgVXAAEImBsAAQXaAs4IugkOCZQEAtvgBaoIvYAPAAP9oAgAAAQOCToJlAAAAAAAAAGADwAD8VQFKglEBFoJbFoJRLrcKwABBc7b4wABCJwbAAEF3gLOCaYJ+gpgBAKhcAWqCamADwAD/aAIAAAEDgoWCmAAAAAAAAABgA8AA/FUBSoKIARaCkhaCiC63CsAAQXOoXMAAQigGwABBeICzgpyCsYLNAQC2YQFqgp1gA8AA/2gCAAABA4K5gs0AAAAAAAAAYAPAAPxVAUqCvAEWgsYWgrwutwrAAEFztmHAAEIqBsAAQXmAs4LSgueC9wEAt0ABaoLTYAPAAP9oAgAAAQOC74L3AAAAAAAAAGADwAD8VQFKgvIBKgbAAEF6gLOC+4MQgyQBALaBAWqC/GADwAD/aAIAAAEDgxyDJAAAAAAAAABgA8AA/FUBSoMfASoGwABBe4CzgyiDPYNLAQCirAFqgylgA8AA/2gCAAABA4NDg0sAAAAAAAAAYAPAAPxVAUqDRgEqBsAAQXyAs4NPg2SDcgEArPgBaoNQYAPAAP9oAgAAAQODaoNyAAAAAAAAAGADwAD8VQFKg20BKgbAAEF9gLODdoOLg6ABALaNAWqDd2ADwAD/aAIAAAEDg5iDoAAAAAAAAABgA8AA/FUBSoObASoGwABBfoCzg6SDuYPJAQC2+wFqg6VgA8AA/2gCAAABA4PBg8kAAAAAAAAAYAPAAPxVAUqDxAEqBsAAQX+As4PNg+KD9gEAt0EBaoPOYAPAAP9oAgAAAQOD74P2AAAAAAAAAGADwAD8VQFKg/IBKQbAAEGCgLOD+4QMhHYAALcOAWqD/GADwAD/aAIAAAEDhBSEdgAAAAICAoQeAAAAg9tgA8AAQfkAhDIAAAClQGADwABOhQAAYAPAAPxVAT4BSoRFARyEVhaETC63CsAAQXO3DgIAAoCEX8AgJceBhGbAICXVAMAAQhkGwABBg4CzhHuEjIT+AAC3DQFqhHxgA8AA/2gCAAABA4SYhP4AAAACAgKEogAAAIPbYAPAAEH5AIS2AAAApUBgA8AAToUAAGADwAD8VQE+AUqEyQEchNoWhNAutwrAAEFztw0CAAKAhOfAICZAgYTuwCAmTgDAAEIaBsAAQYSAs4UDhRSFdQAAtwMBaoUEYAPAAP9oAgAAAQOFI4V1AAAAAQEBhTEAAAClQGADwABOhQAAYAPAAPxVAT4BSoVEARyFVRaFSy63CsAAQXO3AwEAAYCFZcAgJrkAwABCEgbAAEGFgLOFeoWLhfIAALcGAWqFe2ADwAD/aAIAAAEDhZ2F8gAAAAEBAYWrAAAApUBgA8AAToUAAGADwAD8VQE+AUqFvgEchc8WhcUutwrAAEFztwYBAAGAheLAICcdAMAAQhMGwABBhoCzhfeGCIZpAAC3BAFqhfhgA8AA/2gCAAABA4YXhmkAAAABAQGGJQAAAKVAYAPAAE6FAABgA8AA/FUBPgFKhjgBHIZJFoY/LrcKwABBc7cEAQABgIZZwCAngQDAAEIUBsAAQYeAs4Zuhn+G4gAAtwcBaoZvYAPAAP9oAgAAAQOGj4biAAAAAQEBhp0AAAClQGADwABOhQAAYAPAAPxVAT4BSoawARyGwRaGty63CsAAQXO3BwEAAYCG0sAgJ+UAwABCFQbAAEGIgLOG54b4h18AALcCAWqG6GADwAD/aAIAAAEDhwqHXwAAAAEBAYcYAAAApUBgA8AAToUAAGADwAD8VQE+AUqHKwEchzwWhzIutwrAAEFztwIBAAGAh0/AIChJAMAAQhYGwABBiYCzh2SHdYe/AAC28wFqh2VgA8AA/2gCAAABA4eBh78AAAABAQGHjgAAAJomYAO+EwAAYAPAAPxVAT4BSoeZARyHqhaHoC63CsAAQXO28wEAAYCHt8AgKK0AwABCFwbAAEGKgLOHxIfViEAAALbsAWqHxWADwAD/aAIAAAEDh96IQAAAAAICAofrAAAAmiZgA74TAIf9AAAApUBgA8AAToUAAGADwAD8VQE+AUqIEAEciCEWiBcutwrAAEFztuwCAAKAiCvAICkPgYgwwCApGwDAAEIbBsAAQYuAs4hFiFaIvwAAgxwBaohGYAPAAP9oAgAAAQOIXoi/AAAAAgICiGsAAACaJmADvhMAiH0AAAClQGADwABOhQAAYAPAAPxVAT4BSoiQARyIoRaIly63CsAAQXODHAIAAoCIqsAgKYaBiK/AICmSAMAAQhwGwABBjICziMSI1YkuAACEBwFqiMVgA8AA/2gCAAABA4jgiS4AAAABAQGI7gAAAKVAYAPAAE6FAABgA8AA/FUBPgFKiQEBHIkSFokILrcKwABBc4QHAQABgIkewCAp/QDAAEIdBsAAQY2As4kziUuJpAAAtvoBaok0YAPAAP9oAgAAAQOJVomkAAAAAQEBiWQAAAClQGADwABOhQAAYAO+EwE+AUqJdwEciYgWiX4utwrAAEFztvoBAAGAiZTAICphAMAAQh4GwABBjoCziamJvosEAACXVwFqiapgA8AA/2gCAAABA4nDiwQAAAACAgKJxAAAAIPbYAPAAEH5AInYAAAApUBgA8AAToUAAGADwABB+QE+AkmJ6xyJ9C5IAQABgIn3wCAqwwDAAEGVPgFKigYBLkmKHhyKIi63FwEAAYCKNsAgKsMAwABBlD4BSopGASMWilOAik3AICrDtvjAAEIngIpgwCAqwy4BYAPAAEH5SYp5FoqDgIp9wCAqw7cZwABCKT4BSoqaASMWiqeAiqHAICrDtvjAAEInHIq5LoaAAAAAAMAAQhAuAWADwABB+T9KitYBHIrnFordLrcKwABBc5dXAgACgIrtwCAqw4GK9MAgKtEAwABCHwbAAEGPgLOLCYsai4gAALb3AWqLCmADwAD/aAIAAAEDiySLiAAAAAICAosuAAAAg9tgA8AAQfkAi0IAAAClQGADwABOhQAAYAPAAPxVAT4BSotVARyLZhaLXC63CsAAQXO29wIAAoCLccAgK9mBi3jAICvnAMAAQiAGwABBkICzi42LoowUAACXWAFqi45gA8AA/2gCAAABA4uujBQAAAACAgKLuAAAAIPbYAPAAEH5AIvMAAAApUBgA8AAToUAAGADwABB+QE+AUqL3wEci/AWi+YutwrAAEFzl1gCAAKAi/3AICxSgYwEwCAsYADAAEIhBsAAQZGAs4wZjCqMzQAAtpwBaowaYAPAAP9oAgAAAQOMQ4zNAAAAAgICjFQAAAClUmADwABMuACMdQAACKVAYAPAAE6FAABgA8AA/FUBPgFKjIgBHIyZFoyPLrcKwABBc7acAgACgIyzwCAsy4GMvcAgLNkAwABCIwbAAEGSgLOM0ozjjWIAALa1AWqM02ADwAD/aAIAAAEDjOmNYgAAAAMDA4z3AAAAlntgA74lAI0FAAAAgL1gA8AAakoAjRgAAAClQGADwABOhQAAYAPAAPxVAT4BSo0rARyNPBaNMi63CsAAQXO2tQMAA4CNQ8AgLUSBjUzAIC1Qgo1SwCAtXgDAAEIiBsAAQZOAs41njYCOBAAAtqEBao1oYAPAAP9oAgAAAQONko4EAAAAAgICjZwAAAClUmADwABMuACNswAAAKVAYAPAAE6FAABgA74lAT4BSo3GARyN1xaNzS63CsAAQXO2oQIAAoCN6sAgLdCBjfTAIC3eAMAAQiQGwABBlICzjgmODo8DAAC3FwAAAAEDjiGPAwAAAAEBAY4iAAAAg9tbAABgA8AA/FUBPgJJji8hJY45gI4zwCAuPWADwABBcUqOUQEqP0mOYxaOcRaOZy63CsAAQXO2+MAAQic+AUqOhQEcjpYWjowutwrAAEFzSAEAARyOqRaOn4COmcAgLj23CgCGgAAAAAAAAMAAQhg+AUqOyAEcjtkWjs8utwrAAEFzSAEAARyO7BaO4oCO3MAgLj23CgCGgQAAAAAAAMAAQhgGwABBlYCzjwiPIo95AwBIAWqPCWADwAD/aAIAAAEDjySPeQAAAAEBAY8lAAAAg9tbAABgA8AA/FUBPgFKjzIBIhyPOS63FwEAAYCPTcAgLw8AwABBlAAcj2IWj1cutvjAAEF2SAEAARaPa4CPZcAgLw+2+AAAwAD/dQbAAEGAgLOPfo+Sj88BAIPGAWqPf2ADwAD/aAIAAAEDj5uPzwAAAAAAAABgA8AA/hsBSo+eATCPnie3aAAAICKHACAirwAgIvgAICNBACAjigAgI9MAICQcACAkUwAgJIoAICTBACAk+AAgJS8AICVmACAlnQAgJhYAICaPACAm8wAgJ1cAICe7ACAoHwAgKIMAICjlACApXAAgKdMAICo3ACAqmQAgK68AICwoACAsoQAgLRoAIC2mACAuHQAgLuYAIC9gACAvnAAAACICwABBmICzj9SP45DBB7dpAAABYAHAAEFxAAAAAQXAAEGdAAAAAAQAAAMAAAAAAAAAAABgA8AAQZgBPwEJAQDAAEGXAAAAAAIGwABBmoCzkEqQVpBkAQK2hAAAAAEDkGSQZAAAAAAAAABgA4JMAAbAAEGbgLOQnZCukL8BAraFAAAAAQOQv5C/AAAAAAAAAGADviUAAAAgMHUAIDCbACAwwQAAAAICwABBnoC0gcWBy5Q/A7dqAAABYAHAAEGYAAAGBMAAQaCAtIJsgoEGg+wAYAPAAQACAWqCcmADwAEAAsAA98IEwABBoYC0gqGCqgm3CgFqgodgA8AA/2gCYAPAAEH5AATAAEGigLSCyYLXCbaEAWqCsGADwAD/aAJgA4JMAATAAEGjgLSC+4MMCbaFAWqC3WADwAD/aAJgA74lAATAAEGkgLSDQYNKCYXlAGADwABB+QAEwABBpYC0g32DhAmF5ABgA8AAQfkAAQXAAEG3gLSDiYOJg/UAAAADg5SD9QAAAAUFBYOaAAAEtwpgA8AAQfkAg6oAAAS2hGADgkwAg78AAAS2hWADviUAg90AAASF5GADwABB+QCD6wAABIXlYAPAAEH5AABgA8AAQZ4BPwYIAcAAQaGAAMAgMbUIAcAAQaKBAMAgMcMIAcAAQaOCAMAgMc8IAcAAQaWDAMAgMdsIAcAAQaSEAMAgMekJAYOJwABBnQAAAAANBsAAQaeAtIQzhDuGjgQBsA8AAAABA4RZho4AAAACAgKEbAAAAINKYAPAAF6lAISBAAAApUBgA8AAToUAAGADwABBngE+CD0chJuAhJTAIDJqgpgBAAFqhKFgA8ABAALAAPfCAMAAXqdOhLSEvgAAtwpgA8AAQfkBHoTEwABCCgIAAoCE4MAgMmqBhOjAIDJ4AE6FBoUVAAC2hGADglMBHIUegIUXwCAyarcSAAAAAMAAXsZOhUWFVwAAtoVgA74lARyFYICFWcAgMmq3EwAAAADAAF7dToWBhYkAAIXkYAPAAEH5AR6Fj8AAQgoCAAKAhavAIDJqgYWzwCAyeABOhc6F2AAAheVgA8AAQfkBHoXewABCCgIAAoCF+sAgMmqBhgLAIDJ4AD0chhuAhhTAIDJqgpABAAFqhh9gA8ABAALAAPfCAMAAXqhKhikBH4Y0wABBtwUABYKGScAgMrODhlTAIDLchIZkwCAy/oWGd8AgMyCGhoDAIDNJAAbAAEGpgLSGwobTiA4AALAQAWqGw2ADwAD/aAIAAAEDhuKIDgAAAAEBAYbsAAAAhEBgA8AAXlYAAFwBPgg9HIb9gIb4wCAz77C3AQABaocUYAPAAEHowAD3yADAAF5nPRyHI4CHHsAgM++CmAEAAWqHKWADwAEAAsAA98IAwABeWz0chz0WhzMutwrAAEGhsBABAAGAh03AIDPvAMAAQgw9HIddgIdYwCAz77cVAQABJodxARaHcS62hMAAQaJgA4JTAMAAXnM9HIeLgIeGwCAz77cWAQABJoedARaHnS62hcAAQaNgA8AAkGYAwABeij0ch70Wh7UuheTAAEGlsBABAAGAh83AIDPvAMAAQgw9HIfiFofYLoXlwABBpLAQAQABgIfywCAz7wDAAEIMPRyIAoCH/cAgM++CkAEAAWqIBmADwAEAAsAA98IAwABeXAbAAEGqgLSIE4goiNAAAIaAAWqIFGADwAD/aAIAAAEDiDCI0AAAAAAAAABgA8AAQfkBPgFKiDkBIxaIQC62+MAAQXYuH4howABBtwUABRyIfhaIdC63CsAAQaGGgAAAAADAAEIQFoiKLraEwABBohaIpi62hcAAQaMWiLkuheTAAEGlFojCLoXlwABBpAABYAPAAEGeBsAAQauAtIjViOqJmAAAhoEBaojWYAPAAP9oAgAAAQOI9YmYAAAAAAAAAGADwABB+QE+AUqI/gEjFokFLrb4wABBdh+JHsAAQbcFAAUciTQWiSoutwrAAEGhhoEAAAAAwABCERaJQy62hMAAQaIWiV8utoXAAEGjFolyLoXkwABBpRaJey6F5cAAQaQALgFgA8AAQZ4GwABBsoC0iZ2JsonGAQC2gQFqiZ5gA8AA/2gCAAABA4m+icYAAAAAAAAAYAPAAPxVAUqJwQEqBsAAQbOAtInKid+J7AEArPgBaonLYAPAAP9oAgAAAQOJ5YnsAAAAAAAAAGADwAD8VQFKiegBKQbAAEG0gLSJ8IoFihQBALZhAWqJ8WADwAD/aAIAAAEDig2KFAAAAAAAAABgA8AA/FUBSooQASkGwABBrIC0ihmKKoshAAC3FwFqihpgA8AA/2gCAAABA4o9iyEAAAABAQGKPgAAAIPbWwAAYAPAAPxVAT4CSYpLISWKVYCKT8AgNw5gA8AAQZ5KimYBKj9KingBIiIiHYqFtxcBAAGAipnAIDcOAMAAQZQAHIq6FoqrLraEwABBokgBAAEWisOAir3AIDcOtoQAAMAA/3UAHIrlFordLoXkwABBpUgBAAEWiu6AiujAIDcOheQAAMAAQhgAHIsLFosBLoXlwABBpEgBAAEWixSAiw7AIDcOheUAAMAAQhgGwABBrYC0iyaLO4xUAACXWAFqiydgA8AA/2gCAAABA4tHjFQAAAACAgKLUQAAAIPbYAPAAEH5AItlAAAApUBgA8AAToUAAGADwABB+QE+A06LgYuVAAC3GGADwABB+QEci6EWi5cutwrAAEGhl1gCAAKAi67AIDfsgYu1wCA3+gDAAEIhSYvHFovfgovLwCA4E7cZwABCKUqL7gGCi/XAIDgTP0qMDgEjFowpgowVwCA4E7b4wABCJxyMNi6GgAAAAADAAEGqHIxDLoaBAAAAAMAAQasBYAPAAEH5BsAAQa6AtIxZjG6TFgAAl1cBaoxaYAPAAP9oAgAAAQOMc5MWAAAAAgICjHwAAACD21sAjJAAAAClQGADwABOhQAAYAPAAEH5AT4BSYyjHIysLkgBAAGAjK/AIDjIAMAAQa8+AUqMvgEuSYzWHIzaLrcXAQABgIzuwCA4yADAAEGsPgFKjP4BJoz+ASMmjQsBFo0LgI0FwCA4yLb4AGADwAD8VYCNGMAgOMguAVtgA8AAQflJjTEmjTsBFo07gI01wCA4yLcZAGADwAD8VT4BSo1SASMmjV8BFo1fgI1ZwCA4yLb4AGADwAD8VRyNcS6GgAAAAADAAEGqLgFgA8AAQflJjY8iIiIiJo2ZARaNmYCNk8AgOMis+ABgA8AA/FUAIRyNshaNqi6F5MAAQaVIAQABKwDAAEIYACEcjdMWjcuAjcXAIDjIheQASAEAASsAwAD/dQAhHI3wFo3mLoXlwABBpEgBAAErAMAAQhgAIRyOExaOCYCOA8AgOMiF5QBIAQABKwDAAP91PgROji2OOAAAtyRgA8AAQfkBHI5CFo46LoXkwABBpZdXAgACJo5OARaOToCOSMAgOMiF5ABgA8AAQfmBjlfAIDjRAMAAQh9OjnSOgQAAtyVgA8AAQfkBHI6NFo6DLoXlwABBpJdXAgACJo6ZARaOmYCOk8AgOMiF5QBgA8AAQfmBjqTAIDjRAMAAQh9OjsGOzgAAtxtgA8AAQfkBHI7aFo7QLrcKwABBoZdXAgACJo7mARaO5oCO4MAgOMi3CgBgA8AAQfmBjvHAIDjRAMAAQh9KjwUBH48QwABBtwUABYSPJ8AgOrQrK4KPQcAgOiqDj03AIDpvAEmPZyaPcQEWj3GAj2vAIDjIto0AYAPAAPxVPgZAHJAMFpAEgI/+wCA4yIXkAEgBAAEekB3AAEIFAgACFpBdFpBOgZBCwCA40bRZwABOjbJXudiBkGzAIDjRAADAAP91j/6QeABOkIqQlQAAtyRgA8AAQfkBHJCfFpCXLoXkwABBpZdXAgACJpCrARaQq4CQpcAgOMiF5ABgA8AAQfmBkLTAIDjRAMAAQh9OkNGQ3gAAtyVgA8AAQfkBJpDRARyQ/xaQ+BaQ8ICQ6sAgOMi3IgApAINfAgACFpEELoXkwABBpTSRDQORDZEuAAAAAgICkQ4AAACA1FsAkREAAACDqFsAAFsBSpEXARyRGYORF8AgPA2XVwIAAoSRH8AgPBaBkSLAIDjRAAAAAGADwABB+U6RQJFNAAC3G2ADwABB+QEckVkWkU8utwrAAEGhl1cCAAImkWUBFpFlgJFfwCA4yLcKAGADwABB+YGRcMAgONEAwABCH06RkJGfAAC3bWADwABBngEfkaXAAEG3BQAFhJG8wCA8TiMckeMWkdQutoTAAEGiSAEAARaR7ICR5sAgOMi2hAAAwAD/dRaR/S62hMAAQaIrAWADgkwjHJIwFpIeLraFwABBo0gBAAEWkjmAkjPAIDjItoUAAMAA/3UWklsutoXAAEGjKwFgA74lgpKNwCA7g4OSo8AgO8gASpK4AYWSv8AgPJM+AUqS4gEckvMWkukutwrAAEGhl1cCAAImkvkBgJL5wCA4yGADwABB+YGTAMAgONEAwABCHwbAAEGvgLSTG5M1k1ADAEgBapMcYAPAAP9oAgAAAQOTN5NQAAAAAQEBkzgAAACD21sAAGADwAD8VQFKk0IBHZNISAEAAYCTS8AgPZMAwABBlQbAAEG1gLSTVZNpk9YBAIPGAWqTVmADwAD/aAIAAAEDk3KT1gAAAAAAAABgA8AA/hsBPgFKk3gBHpN/gegFAAUWk5gutoTAAEGiFpOoLrb4wABBdhaTtC6F5MAAQaUWk70uheXAAEGkFpPILrcKwABBoQAGwABBsIC0k9uT7pQ9AAAjAWqT3GADwAD/aAIAAAEDk/aUPQAAAAAAAABgA8ABAAIBPgFKk/8BJJQ5Bye3bhaUDC63CsAAQaEntycWlB0uheTAAEGlJ686FpQuLoXlwABBpCeDJgAAIDJKACAzxQAgNRUAIDWqACA2PwAgNnYAIDatACA25AAgN8IAIDieACA9agAgPbsAID4uACA+kwAAAA0CwABBuIC1gcGBx47dA7dvAAABYAHAAEGYAAAFBMAAQbqAtYJogn0Gg+wAYAPAAQACAWqCbmADwAEAAsAA990EwABBu4C1gp2Cpgm3CgFqgoNgA8AA/2gCYAPAAEH5AATAAEG8gLWCxYLTCbaEAWqCrGADwAD/aAJgA4JMAATAAEG9gLWC94MICbaFAWqC2WADwAD/aAJgA74lAATAAEG+gLWDP4NKCZs7AGADwABB+QABBcAAQc+AtYNPg0+DrwAAAAODWoOvAAAABAQEg2AAAAS3CmADwABB+QCDcAAABLaEYAOCTACDhQAABLaFYAO+JQCDowAABJs7YAPAAEH5AABgA8AAQbgBPwUIAcAAQbuAAMAgP50IAcAAQbyBAMAgP6sIAcAAQb2CAMAgP7cIAcAAQb6DAMAgP8MJAYNPwABBnQAAAAAMBsAAQcCAtYPtg/WF9gQBsA8AAAABA4QThfYAAAACAgKEJgAAAINKYAPAAF6lAIQ7AAAApUBgA8AAToUAAGADwABBuAE+Bz0chFWAhE7AIEA4gpgBAAFqhFtgA8ABAALAAPfdAMAAXqdOhG6EeAAAtwpgA8AAQfkBHoR+wABCCgIAAoCEmsAgQDiBhKLAIEBGAE6EwITPAAC2hGADglMBHITYgITRwCBAOLcSAAAAAMAAXsZOhP+FEQAAtoVgA74lARyFGoCFE8AgQDi3EwAAAADAAF7dToU7hUcAAJs7YAPAAEH5AR6FTcAAQgoCAAKAhWnAIEA4gYVxwCBARgA9HIWKgIWDwCBAOIKQAQABaoWOYAPAAQACwAD33QDAAF6oSoWYAR+Fo8AAQc8EAASChbjAIECBg4XDwCBAqoSF08AgQMyFhebAIEDuAAbAAEHCgLWGKoY7h1UAALAQAWqGK2ADwAD/aAIAAAEDhkqHVQAAAAEBAYZUAAAAhEBgA8AAXlYAAFwBPgc9HIZlgIZgwCBBjbC3AQABaoZ8YAPAAEHowAD34wDAAF5nPRyGi4CGhsAgQY2CmAEAAWqGkWADwAEAAsAA990AwABeWz0chqUWhpsutwrAAEG7sBABAAGAhrXAIEGNAMAAQgw9HIbFgIbAwCBBjbcVAQABJobZARaG2S62hMAAQbxgA4JTAMAAXnM9HIbzgIbuwCBBjbcWAQABJocFARaHBS62hcAAQb1gA8AAkGYAwABeij0chykWhx0umzvAAEG+sBABAAGAhznAIEGNAMAAQgw9HIdJgIdEwCBBjYKQAQABaodNYAPAAQACwAD33QDAAF5cBsAAQcOAtYdah2+H/QAAhoABaodbYAPAAP9oAgAAAQOHd4f9AAAAAAAAAGADwABB+QFKh30BIxaHfS62+MAAQXYuH4ehwABBzwQABByHwhaHuC63CsAAQbuGgAAAAADAAEIQFofOLraEwABBvBaH3i62hcAAQb0Wh/EumzvAAEG+AAFgA8AAQbgGwABBxIC1iAKIF4iqAACGgQFqiANgA8AA/2gCAAABA4giiKoAAAAAAAAAYAPAAEH5AUqIKAEjFogoLrb4wABBdh+IP8AAQc8EAAQciFUWiEsutwrAAEG7hoEAAAAAwABCERaIZC62hMAAQbwWiH4utoXAAEG9FoiRLps7wABBvgAuAWADwABBuAbAAEHLgLWIr4jEiNEBAKKsAWqIsGADwAD/aAIAAAEDiMqI0QAAAAAAAABgA8AA/FUBSojNASkGwABBzIC1iNaI64j6AQC2YQFqiNdgA8AA/2gCAAABA4jziPoAAAAAAAAAYAPAAPxVAUqI9gEpBsAAQcWAtYj/iRCJ5wAAtxcBaokAYAPAAP9oAgAAAQOJI4nnAAAAAQEBiSQAAACD21sAAGADwAD8VQE+AkmJMSEliTuAiTXAIEQ+YAPAAEG4SolMASo/SoleASIiHYlrtxcBAAGAiX/AIEQ+AMAAQZQAHImgFomRLraEwABBvEgBAAEWiamAiaPAIEQ+toQAAMAA/3UAHInPFonDLps7wABBvkgBAAEWidiAidLAIEQ+mzsAAMAAQhgGwABBxoC1ieyKAYsaAACXWAFqie1gA8AA/2gCAAABA4oNixoAAAACAgKKFwAAAIPbYAPAAEH5AIorAAAApUBgA8AAToUAAGADwABB+QE+A06KR4pbAAC3GGADwABB+QEcimcWil0utwrAAEG7l1gCAAKAinTAIET3gYp7wCBFBQDAAEIhSYqNFoqlgoqRwCBFHrcZwABCKUqKtAGCirvAIEUeP0qK1AEjForvgorbwCBFHrb4wABCJxyK/C6GgAAAAADAAEHDHIsJLoaBAAAAAMAAQcQBYAPAAEH5BsAAQceAtYsfizSN5QAAl1cBaosgYAPAAP9oAgAAAQOLOY3lAAAAAgICi0IAAACD21sAi1YAAAClQGADwABOhQAAYAPAAEH5AT4BSYtpHItyLkgBAAGAi3XAIEXTAMAAQcg+AUqLhAEuSYucHIugLrcXAQABgIu0wCBF0wDAAEHFPgFKi8QBJovEASMmi9EBFovRgIvLwCBF07b4AGADwAD8VYCL3sAgRdMuAVtgA8AAQflJi/cmjAEBFowBgIv7wCBF07cZAGADwAD8VT4BSowYASMmjCUBFowlgIwfwCBF07b4AGADwAD8VRyMNy6GgAAAAADAAEHDLgFgA8AAQflJjFUiIiaMXwEWjF+AjFnAIEXToqwAYAPAAPxVACEcjHwWjHAumzvAAEG+SAEAASsAwABCGAAhHIyhFoyVgIyPwCBF05s7AEgBAAErAMAA/3U+A06Mu4zKAAC3GmADwABB+QEcjOIWjNYumzvAAEG+l1cCAAImjO4BFozugIzowCBF05s7AGADwABB+YGM+8AgRdwAwABCH06NGI0lAAC3G2ADwABB+QEcjTEWjScutwrAAEG7l1cCAAImjT0BFo09gI03wCBF07cKAGADwABB+YGNSMAgRdwAwABCH0qNXAEfjWfAAEHPBAAEg41zwCBHQysrgo2NwCBG/gA+AUqNsQEcjcIWjbgutwrAAEG7l1cCAAImjcgBgI3IwCBF02ADwABB+YGNz8AgRdwAwABCHwbAAEHIgLWN6o4Ejh8DAEgBao3rYAPAAP9oAgAAAQOOBo4fAAAAAQEBjgcAAACD21sAAGADwAD8VQFKjhEBHY4XSAEAAYCOGsAgSAQAwABBlQbAAEHNgLWOJI44jo0BAIPGAWqOJWADwAD/aAIAAAEDjkGOjQAAAAAAAABgA8AA/hsBSo5KAR6OSoHoBAAEFo5aLraEwABBvBaOai62+MAAQXYWjnYumzvAAEG+Fo6DLrcKwABBuwAGwABByYC1jpKOpY7bAAAjAWqOk2ADwAD/aAIAAAEDjq2O2wAAAAAAAABgA8ABAAIBSo6zASSO2wUnt3IWjrkutwrAAEG7J7cdFo7OLps7wABBvieDJgAAIEAYACBBYwAgQpQAIEMdACBDpgAgQ90AIEQUACBEzQAgRakAIEfbACBILAAgSJMAIEjpAAAADALAAEHQgLaBmoGghmYDt3MAAAFgAcAAcU0AAAIEwABB0oC2geOB8Bi3dABgA8AA/FUBKgTAAEHUgLaCAoIIGLd1wABASQBdA8AA/7MBYAPAAEH5ASsBBcAAQdsAAAAABAAAAwAAAAAAAAAAAGADwABB0AE/AQkBAMAAcVEAAAAABAbAAEHWgLaCDYIegxYAALa1AWqCDmADwAD/aAIAAAEDgiSDFgAAAAMDA4IyAAAAlntgA74lAIJAAAAAgL1gA8AAakoAglMAAAi2sWADwABOhQAAYAPAAPxVAT4ESYJgFoJkLrd0wABB0kqCawEpP0mCfByChxaCgC63dcAAQEnAAEHUSAEAASsAwAD/dUqCkAEqP0aCooLAgrAAAACtamADwABB+QAWgrgut3XAAEBJwABB1D4BSYLIHILRg4LMwCBKO7a1AwADgILYwCBJzYGC4cAgSdmCgufAIEnnAMAAQiJKgu8BKT9KgwYBKgbAAEHXgLaDG4MshLwAALacAWqDHGADwAD/aAIAAAEDg0WEvAAAAAICAoNPAAAApVJgA8AATLgAg2YAAAi2sWADwABOhQAAYAPAAPxVAT4DSYNzFoN3Lrd0wABB0j4CToOPg5QAAK1qYAPAAEH5AR6DpMAAQgICAAIWg8sWg7yBg7bAIErItFnAAE6Nmy65iYGD2MAgSsgASoPmARyD8oKD7cAgSvC2nAIAAoCEDMAgSrqBhBbAIErIAMAAQiM/RoQohEaENgAAAK1qYAPAAEH5ABaEPi63dcAAQEnAAEHUPgFJhE4chFeChFLAIEtUtpwCAAKAhHHAIEq6gYR7wCBKyADAAEIjPgFKhI0BKT9KhKwBKgbAAEHYgLaEwYTShbMAALa0AWqEwmADwAD/aAIAAAEDhOeFswAAAAEBAYTxAAAIrWpgA8AAQfkAAGADwAD8VQE+BEmE/RaFAS63dMAAQdJKhQgBKj9JhRochSOAhR7AIEvOSAEAASsAwABCGD4DPReFNC63dCnAAEHSPReFSC63dcAAQEkrwABB1EqFXQEpPz0jHIV7FoV0Lrd1wABAScAAQdRIAQABKwDAAP91F4V0Lrd1wABASR6Fg8AAwyEAAWADwABB+QAAwABB1CsBXQPAAP+zAWADwABB+UqFmAEchaYWhZ8ut3XAAEBJwABB1FYBAAGAharAIEvOAMAA/8AGwABB2YC2hbiFy4ZkAAAjAWqFuWADwAD/aAIAAAEDhdOGZAAAAAAAAABgA8ABAAIBPgFJhdwWheAut3TAAEHSPgFKhe8BJ7d2SYYKIRyGFRaGDi63dcAAQEnAAEHUSAEAASsAwAD/dT4BSoYmASSGNgEWhi8ut3XAAEBJwABB1D4BSoZLASe3dwAAIEmjACBKkAAgS6QAIEykACBNLQAAAAQCwABB3IC2hmmGb4etA6T9AAABYAHAAP9oAAFgAb80AAEFwABB4YC2hqWGq4a9AQAAA4a7hr0AAAAAAAAAYAPAAEHcAT8BCQGGq8AA/34AAAAAAgbAAEHegLaGwobihzYAALY7AWqGw2ADwAD/aAIAAAEDhu6HNgAAAAEBAYb8AAAApUBgA8AAToUAAGADv0UBPgFKhw8BH4cawABA9QEAAYCHJsAgTcMABsAAQd+Atoc7h2OHqwAAtjwBaoc8YAPAAP9oAgAAAQOHeYerAAAAAAAAAGADwABxUgE+AUqHggEfh43AAEHnAAAAAAAAIE2ZACBN7wAgTjIAAAACAsAAQeKAtoewh7aKRgO3eAAAAWABwAD/aAABYAHAAHFSAAEFwABB54C2h/qIAIgaAQAAA4gYiBoAAAAAAAAAYAPAAEHiAT8BCQGIAMAA/34AAAAAAgbAAEHkgLaIH4hHiPIAALauAWqIIGADwAD/aAIAAAEDiGCI8gAAAAICAohxAAAApVJgA8AATLgAiIIAAAC2r2ADwAD/aAAAYAPAAHFNAT4BSoibATWIpgAAAQBgA8AAQdABH4imwABB2wAAAAA1AAAAAQBbARyIxoKIxMAgTu22tAEAASaI3AGBiNzAIE7QYAPAAEH5AMAAQdiCAMAgTu0GwABB5YC2iPeJCIpEAAC2sAFqiPhgA8AA/2gCAAABA4kWikQAAAADAwOJIgAAALBYYAPAAGlAAIk7AAAAgmpgA74lAIlgAAAItrFgA8AAToUAAGADwAD8VQE+A06Jdol/AAClUmADwABMuAEWiYyAiYHAIE9ipVLAAGlDTomjiagAAK1qYAPAAEH5ASaJowEWibWAiarAIE9itW3AAGlEYAPAAEH5SonNASIcid2DidTAIE+VtrIBAAGBiezAIE9wAMAATNUAIhyKBYSKAMAgT7VIAQABKwDAAEIYARyKFYSKEMAgT7W2tQMAA4GKHMAgT3AWii2DiiTAIE+Vp4vAAEy8goo5wCBPfADAAEIiAAAgTpgAIE84ACBQRwAAAAICwABB6IC2io+KlIrmC7d5AAABYAHAAP9oAAAKBMAAQeqAtoqUipQJJwBgA8AA/hsABMAAQeyAtoqUipQJKMAAQEkAYAPAAQACAATAAEHtgLaKlIqUBikAXQPAAP6/AWADwABB6AFqAF0DwAD+vwFgA8AAQejAAPgmBMAAQe6AtoqliqUGt3wAYAPAAEHoAWoAYAPAAEHowAD2qwTAAEHvgLaKrYqtBpdXAGADwABB6AFqAGADwABB6MAA9/oEwABB8IC2iraKtga3fQBgA8AAQegBagBgA8AAQejAAPZ2BMAAQfGAtorDisMGl3kAYAPAAEHoAWoAYAPAAEHowAD34wTAAEHygLaKyorKBoCrAGADwABB6AFqAGADwABB6MAA98gEwABB84C2itGK0Qa3fgBgA8AAQegBagBgA8AAQejAAPaQBMAAQfSAtorfit8GgJYAYAPAAEHoAWoAYAPAAEHowAD4EQEFwABB+IC2ipSKlIrmAQAAA4qUiuYAAAACAgKKlAAABCdgA8AA/hsAipQAAAQoYAPAAQACAABgA8AAQegBPwMIAMAAQeqAAMAgUdsIAMAAQeyBAMAgUegJAADAAP9+AAAAAAEGwABB9oC2ipSKlIrmAAAjAAAAAQOKlIrmAAAAAAAAAGADwAEAAgFKAAEPAC7AAEHsAAAgUiMAIFJUAAAAAQLAAEH5gLaLqYu4uVkHt38AAAFgAcAA/2gAAWABvzoBBMAAQfyAtou4AASWncAAQEkAWwExAFsCGgDAAEH/GgDAAEIEADIGwABB/oC2i96L5oypBAEAAAAAAQOL7oypAAAABAQEjAIAAACWrGADvhMAjAwAAACCa2ADwAD+GwCMFwAAALb4YAPAAPxVAIwwAAAApUBgA8AAToUAAGADwABB+QE+AUqMQwEejE7AAEExAwADgIxvwCBSxhyMgRyMe4GMdsAgUtKDvwEAAZQAwAD+N4EGAQABI4KMhMAgUuCUkwFgA8AA/hsAwAD+NIOMmcAgUu4ABsAAQf+AtoyujLyM4QRJhbYAAAABA4zKjOEAAAAAAAAAYAPAAEH5AT01AAAAAIJxWwEaAMAAQWwTAAAGwABCAIC2jOaM7o5kBAGuewAAAAEDjPyOZAAAAAICAo0JAAAAlqxgA74TAI0cAAAApUBgA8AAToUAAGADwABB+QE+AkAcjVoWjUuBjT/AIFO9h/bAAE6TqpQBAAGAjWnAIFOxAMAActiNP41uAR6NeLb9AgACNQAAAAEAYAO+EwGAjY7AIFOxIxyNk4IAwCBUCEgBAAErAABqjZZgA7cPwADHnIIAwCBUCAFgA7cPJAAFJ7eAJ6lmgI4FwCBTsSe3gRyOKRaOGoGODsAgU72H9sAATpO0sgEAAYCOLsAgU7EAwABy8ABKjj0BH45IwABBaAEAAYCOW8AgU7EABsAAQgGAto5pjnGPPgQBt4IAAAABA46Gjz4AAAACAgKOkwAAAJasYAO+EwCOpgAAAKVAYAPAAE6FAABgA8AAQfkBPgJJjrkcjtgWjsmBjr3AIFS6h/bAAE6TqpQBAAGAjufAIFSuAMAActhKjvQBH47/wABBaAEAAYCPEsAgVK4AP0qPHQFqjypgA8AAQSfAAPYgBsAAQgKAto9Dj0uR7gQBm2sAAAABA49cke4AAAACAgKPaQAAAJasYAO+EwCPfAAAAKVAYAPAAE6FAABgA8AAQfkBPgNAHI+6Fo+rgY+fwCBVTYf2wABOk6qUAQABgI/JwCBVQQDAAHLYj5+PzgEej9i2/QIAAjUAAAABAGADvhMBgI/uwCBVQSMcj/OCAMAgVZhIAQABKwAAao/2YAO3D8AAx5yCAMAgVZgBYAO3DyQABSe3gyepZoCQaMAgVUEnt4EckIwWkH2BkHHAIFVNh/bAAE6TtLIBAAGAkJHAIFVBAMAAcvAATpCskLQAALeEYAO+EwEckMKBkLbAIFVNt4UBAAGAkOHAIFVBAMAATptJkOwckPiCkPDAIFYJSAEAASsAwAD/dT4BSpEJAR+RFMAAQWwAAAAASZExHJFQFpFBgZE1wCBVTYf2wABOk7cLAQABgpFlwCBWCQDAAHLqPgFKkXcBH5GCwABBaQEAAYKRmMAgVgkAPgFKkbUBHpHAwABCAAIAAoKRz8AgVgmBkdjAIFVNAAbAAEIDgLaR85H7lAgEAZtIAAAAAQOSC5QIAAAAAgICkhgAAACWrGADvhMAkisAAAClQGADwABOhQAAYAPAAEH5AT4ETpJKklIAALeEYAO+EwEckmCBklTAIFbjt4YBAAGAkn3AIFbXAMAATpxJkogckpSCkozAIFb8SAEAASsAwAD/dT4BSpKlAR+SsMAAQWwAAAAAP0mSzByS6xaS3IGS0MAgVuOH9sAATpO3NgEAAYKS/cAgVvwAwABy7D4BSpMPAR6TGsAAQgICAAKCkyzAIFb8gZM1wCBW4wA/SZNNHJNsFpNdgZNRwCBW44f2wABOk7c1AQABgpOAwCBW/ADAAHLrPgFKk5IBH5OdwABBagEAAYKTssAgVvwAPgFKk88BHpPawABCAAIAAoKT6cAgVvyBk/LAIFbjAAbAAEIEgLaUDZQblE4ESbcwAAAAAQOUMJROAAAAAAAAAGADwABB+QE9NQAAAACCcVsBGgDAAEFrEwAABsAAQgWAtpRTlFuV3wQBtzEAAAABA5Rwld8AAAACAgKUfQAAAJasYAO+EwCUkAAAAKVAYAPAAE6FAABgA8AAQfkBPgJAHJTOFpS/gZSzwCBYWYf2wABOk6qUAQABgJTdwCBYTQDAAHLYlLOU4gEelOy2/QIAAjUAAAABAGADvhMBgJUCwCBYTSMclQeCAMAgWKRIAQABKwAAapUKYAO3D8AAx5yCAMAgWKQBYAO3DyQABSe3gCepZoCVecAgWE0nt4EclZ0WlY6BlYLAIFhZh/bAAE6TtLIBAAGAlaLAIFhNAMAAcvAASpWxAR+VvMAAQW0BAAGAldbAIFhNAAbAAEIGgLaV5JXslt0EAbeHAAAAAQOWCJbdAAAAAgIClhwAAACWrGADvhMAli8AAAClQGADwABOhQAAYAPAAEH5AT4CSZZCHJZhFpZSgZZGwCBZVof2wABOk6qUAQABgJZwwCBZSgDAAHLYPgFKln8BH5aKwABBbQEAAYCWpMAgWUoAP0qWtQFqlsJgA8AAQSfAAPYxBsAAQgeAtpbiluqZqQQBtzIAAAABA5cCmakAAAACAgKXDwAAAJasYAO+EwCXIgAAAKVAYAPAAE6FAABgA8AAQfkBPgNAHJdgFpdRgZdFwCBZ64f2wABOk6qUAQABgJdvwCBZ3wDAAHLYl0WXdAEel362/QIAAjUAAAABAGADvhMBgJeUwCBZ3yMcl5mCAMAgWjZIAQABKwAAapecYAO3D8AAx5yCAMAgWjYBYAO3DyQABSe3gyepZoCYDsAgWd8nt4EcmDIWmCOBmBfAIFnrh/bAAE6TtLIBAAGAmDfAIFnfAMAAcvAATphSmFoAALeEYAO+EwEcmGiBmFzAIFnrt4UBAAGAmIfAIFnfAMAATptJmJIcmJ6CmJbAIFqnSAEAASsAwAD/dT4BSpivAR+YusAAQWsAAAAASZjeHJj9FpjugZjiwCBZ64f2wABOk7cLAQABgpkSwCBapwDAAHLqPgFKmSQBH5kvwABBbgEAAYKZTMAgWqcAPgFKmWkBHpl0wABCBQIAAoKZisAgWqeBmZPAIFnrAAbAAEIIgLaZrpm2m+YEAbczAAAAAQOZzZvmAAAAAgICmdoAAACWrGADvhMAme0AAAClQGADwABOhQAAYAPAAEH5AT4ETpoMmhQAALeEYAO+EwEcmiKBmhbAIFuBt4YBAAGAmj/AIFt1AMAATpxJmkocmlaCmk7AIFuaSAEAASsAwAD/dT4BSppnAR+acsAAQWsAAAAAP0malRyatBaapYGamcAgW4GH9sAATpO3NgEAAYKaxsAgW5oAwABy7D4BSprYAR6a48AAQgcCAAKCmvzAIFuagZsFwCBbgQA/SZsdHJs8FpstgZshwCBbgYf2wABOk7c1AQABgptQwCBbmgDAAHLrPgFKm2IBH5ttwABBbwEAAYKbicAgW5oAPgFKm6YBHpuxwABCBQIAAoKbx8AgW5qBm9DAIFuBAAbAAEIJgLab65vznHIEAbeIAAAAAQOcA5xyAAAAAgICnBcAAAC2t10DwAD+fQFgA8AAQfkAnCsAAAClQGADwABOhQAAYAPAAEH5AT4BSpw+AR6cU8AAQjwCAAKAnFvAIFywgZxiwCBcxQAGwABCCoC2nK2ctaCKBAGwDwAAAAEDnNCgigAAAAICApzjAAAAg0pgA8AAXqUAnPgAAAClQGADwABOhQAAYAPAAEH5AT4DTp0YnR0AAIJrYAPAAEHoARydJoCdH8AgXRqwswEBYAPAAEHoAWqdPF0DwAD+vwFgA8AAQejAAPgmAMAAXrpHnUmCnVHAIF1BBwGdcWqdcWADwABB6MAA9qsAPgFKnX8BHp2KwABBMgIAAoCdqsAgXRqBnbLAIF0oAAGd2Gqd2GADwABB6MAA9/oAPgFKnecBHp3ywABCOQIAAoCeE8AgXRqBnhvAIF0oAAGeQWqeQWADwABB6MAA9nYAPgFKnlQBHp5fwABA/wIAAoCehMAgXRqBnozAIF0oAAGesmqesmADwABB6MAA9+MAPgFKnr8BHp7KwABBwAIAAoCe6cAgXRqBnvHAIF0oAAGfF2qfF2ADwABB6MAA98gAPgFKnyQBHp8vwABBpwIAAoCfTsAgXRqBn1bAIF0oAAGffGqffGADwABB6MAA9pAAPgFKn5ABHp+bwABBFQIAAoCfwcAgXRqBn8nAIF0oAAGf72qf72ADwABB6MAA+BEAPgFKn/4BHqAJwABCbQIAAoCgKsAgXRqBoDLAIF0oAD0woEofoFTAAP2tAQABJKCFAye3iYKgf8AgXUEngWoABsAAQgyAtqC7oMCg3gACsBAAAAABA6DPoN4AAAABAQGg2QAAAIRAYAPAAF5WAABcAAbAAEINgLahUqFiodIAAbeKAAAAAQOhc6HSAAAAAQEBoXQAAACtalsAAGADwABB+QE+AkOhgCahjAEWoYyAoYfAIF9Kt0EAYAPAAPxVPgE9iKGiwCBfShahroChqcAgX0q3CgBKocMBJqHDAYChysAgX0pgA8AAQfkGwABCDoC2oy6jOqQzAAG3iwAAAAEDo0ykMwAAAAICAqNWAAAArWpgA8AAQfkAo2kAAAClQGADwABOhQAAYAPAAPxVAT4DTqODo4oAAKXEYAPAAQACAR6jjMAAQg8CAAKAo6PAIF/DgaOpwCBf0QBAHKPJgqPCwCBf6kgBAAErAMABABGjwqPQAR6j2rb9AgACaqPjYAO3D8AAx0IkpBwDgKP8wCBfwye3jIKkFcAgX+oASqQkASkGwABCD4C2pDikRqlIAAG3jQAAAAEDpFypSAAAAAICAqRtAAAArWpgA8AAQfkApIAAAAClQGADwABOhQAAYAPAAQACAT4DPYikk8AgYHoepJrAAEINAQABgKSswCBgegBJpLclpMCApLvAIGB6YAPAAEEnPgdJpNkWpOIUpN3AIGB6AAFgA8AAQSe3GcAAQVlKpPEBKz9JpQQWpQ0UpQjAIGB6AAFgA8AAQSe2YcAAQVo+AkmlICEcpUAWpTGBpSXAIGCIh/bAAE6TqpQBAAEWpVQUpU/AIGB6AAFgA8AAQSeWrMAAQS4AwABy2D4BSqVnASSllwMnt44WpXwUpXfAIGB6AAFgA8AAQSeWrMAAQS4nt48/SqWrASs/SaXGFqXPFKXKwCBgegABYAPAAEEntz3AAEFjPgJJpeUhHKYFFqX2gaXqwCBgiIf2wABOk7cLAQABFqYfFKYawCBgegABYAPAAEEnlqzAAEEuAMAAcuo+AUqmMgEkpm4DJ7eQFqZKFKZFwCBgegABYAPAAEEnlqzAAEEuJ7eRP0qmggErP0AWpqkUpqTAIGB6AAFgA8AAQSeq9cAAQWSmpKayAEmmuyEcptsWpsyBpsDAIGCIh/bAAE6TtzUBAAEWpvQUpu/AIGB6AAFgA8AAQSeWrMAAQS4AwABy6z4BSqcFASSnQAMnt5IWpxwUpxfAIGB6AAFgA8AAQSeWrMAAQS4nt5E/SadQHKdvFqdggadUwCBgiIf2wABOk7c2AQABFqeGFKeBwCBgegABYAPAAEEnlqzAAEEuAMAAcuw+AUqnlwEkp8kDJ7eSFqeuFKepwCBgegABYAPAAEEnlqzAAEEuJ7eTP0qn2QErSafxJaf6gKf1wCBgemADwABCMj4CRqgUqEGoIgAAALeUYAPAAEH5ABaoMhSoLcAgYHoAAWADwABCMreVwABCNz4CTqhSqGAAALeWYAPAAQACAR6oYsAAQg8CAAKCqHnAIGL6gaiCwCBgiABJqJghHKiqg6icwCBjI0gBAAErAMABABE+AUqovwEkqPIHJ7eXgqjQwCBi+ieBnhSo3MAgYHoAAWADwABCMieDW4Oo48AgYyMngWo/SqkMASs/SqkjASSpRAMnt5iAqT7AIGB6J4FqBsAAQhCAtqmDqYyplgAChoAAAAABA6mUqZYAAAAAAAAAYAPAAEH5AAbAAEIRgLap1aneqesAAoaBAAAAAQOp6anrAAAAAAAAAGADwABB+QAGwABCJoC2qiiqMao4AQKBVQAAAAEDqjiqOAAAAAAAAABgA8AA/FUABsAAQieAtqpvqniqggECtvgAAAABA6qCqoIAAAAAAAAAYAPAAPxVAAbAAEIogLaqw6rMqtIBAqhcAAAAAQOq0qrSAAAAAAAAAGADwAD8VQAGwABCKYC2qwSrDasaAQK3GQAAAAEDqxqrGgAAAAAAAABgA8AA/FUABsAAQiqAtquRq5qroQECtmEAAAABA6uhq6EAAAAAAAAAYAPAAPxVAAbAAEIrgLar16vgq+cBArdAAAAAAQOr56vnAAAAAAAAAGADwAD8VQAGwABCLIC2rCisMaw8AQK2gQAAAAEDrDysPAAAAAAAAABgA8AA/FUABsAAQi2Atqx3rICshQECoqwAAAABA6yFrIUAAAAAAAAAYAPAAPxVAAbAAEIugLaswKzJrM4BAqz4AAAAAQOszqzOAAAAAAAAAGADwAD8VQAGwABCL4C2rY+tmK2kAQK2jQAAAAEDraStpAAAAAAAAABgA8AA/FUABsAAQjCAtq4Grg+uGwECt0EAAAABA64brhsAAAAAAAAAYAPAAPxVAAbAAEIxgLaubq53rn4BArb7AAAAAQOufq5+AAAAAAAAAGADwAD8VQAGwABCEoC2roOuiK6xAAK3AwAAAAEDrpeusQAAAAEBAa6lAAAApUBgA8AAToUAAGADwAD8VQAGwABCE4C2rrWuuq7mAAK3BgAAAAEDrsyu5gAAAAEBAa7aAAAApUBgA8AAToUAAGADwAD8VQAGwABCFIC2ruqu768YAAK3BAAAAAEDrv6vGAAAAAEBAa8MAAAApUBgA8AAToUAAGADwAD8VQAGwABCFYC2rxyvIa9LAAK3BwAAAAEDrzGvSwAAAAEBAa8/AAAApUBgA8AAToUAAGADwAD8VQAGwABCFoC2r0+vVK+AAAK3AgAAAAEDr2avgAAAAAEBAa90AAAApUBgA8AAToUAAGADwAD8VQAGwABCF4C2r4Svia+mAAK28wAAAAEDr5WvpgAAAAEBAa+iAAAAmiZgA74TAABgA8AA/FUABsAAQhiAtrB+sJiwoQMCSAFqsH9gA8AA/2gCAAABA7CasKEAAAABAQGwmwAAAIPbWwAAYAPAAPxVAAbAAEIZgLaxprGrsd0AArcOAAAAAQOxs7HdAAAAAgICsb0AAACD22ADwABB+QCx0QAAAKVAYAPAAE6FAABgA8AA/FUABsAAQhqAtrLisuezHQACtw0AAAABA7Lzsx0AAAACAgKy/QAAAIPbYAPAAEH5ALMRAAAApUBgA8AAToUAAGADwAD8VQAGwABCG4C2s2CzZbOZAAK27AAAAAEDs26zmQAAAAICArN7AAAAmiZgA74TALONAAAApUBgA8AAToUAAGADwAD8VQAGwABCHIC2s+qz77QiAAKDHAAAAAEDs/e0IgAAAAICArQEAAAAmiZgA74TALQWAAAApUBgA8AAToUAAGADwAD8VQAGwABCHYC2tGe0bLSRAAKEBwAAAAEDtHe0kQAAAAEBAbSFAAAApUBgA8AAToUAAGADwAD8VQAGwABCHoC2tRy1KLVNAAK2+gAAAAEDtTO1TQAAAAEBAbVBAAAApUBgA8AAToUAAGADvhMABsAAQh+AtrWataO10gACl1cAAAABA7WotdIAAAACAgK1sgAAAIPbYAPAAEH5ALXGAAAApUBgA8AAToUAAGADwABB+QAGwABCIIC2thy2IbZVAAK29wAAAAEDtiu2VQAAAAICArY1AAAAg9tgA8AAQfkAtkkAAAClQGADwABOhQAAYAPAAPxVAAbAAEIhgLa2qbaytugAApdYAAAAAQO2vrboAAAAAgICtsgAAACD22ADwABB+QC23AAAAKVAYAPAAE6FAABgA8AAQfkABsAAQiKAtreht6a35wACtrUAAAABA7est+cAAAADAwO3ugAAAJZ7YAO+JQC3yAAAAIC9YAPAAGpKALfbAAAApUBgA8AAToUAAGADwAD8VQAGwABCI4C2uEi4TbiNAAK2nAAAAAEDuGa4jQAAAAICArhwAAAApVJgA8AATLgAuIcAAAC2sWADwABOhQAAYAPAAPxVAAbAAEIkgLa5C7kYuVcAArahAAAAAQO5KrlXAAAAAgICuTQAAAClUmADwABMuAC5SwAAAKVAYAPAAE6FAABgA74lAAAAIFKnACBTVgAgU5EAIFSOACBVIQAgVrcAIFfyACBYLQAgWSoAIFm/ACBbVQAgXJAAIFz6ACBe+QAgXyoAIF+jACBgWgAgY7IAIGPaACBkAgAgZCoAIGRSACBkegAgZKIAIGTKACBk8gAgZRoAIGVCACBlagAgZZIAIGW6ACBl4gAgZhgAIGZOACBmhAAgZroAIGbwACBnJAAgZ14AIGeiACBn5gAgaCgAIGhqACBooAAgaNQAIGkYACBpXAAgaaAAIGnwACBqNAAganYAAAAyAsAAQjKAt4DqgPC8gAO3mQAAAWABwAD/aAABYAHAAEH5BATAAEI0gLeBjoGlBoPsAGADwAEAAgFqgZRgA8ABAALAAPhKBMAAQjWAt4G7gc8Gt5sAYAPAAP4bAWqBzmADwAD+G4FXBMAAQjaAt4KdgsEGt5wAYAPAAPxVAWqCvGADwAD8VQAEwABCN4C3gt+C7Am3lQBdA8AA/r8BYAPAAEEnAAEFwABCZoC3gvGC8YOKAIZzwABASQADgwiDigAAAAEBAYMOAAAEt5VdA8AA/r8BYAPAAEEnAABgA8AAQjIBPgJAHIM/FoM4FoMqLreVwABCN2HAAP7vgJcBAAGUAMAA/0uDKoNCAEAcg14Wg1Aut5XAAEI3losBAAE0g2QDg2SDhAAAAAEBAYNuAAAArWpgA8AAQfkAAGADwAD8VQFKg3cBIRaDfYGDeMAgbHG3QMAAQisAwAD+kINQg4UAAggBwABCN4AAwCBsCwkBgvHAAP9+AAAAACkGwABCOYC3g8qD0oULBAGwDwAAAAEDg/KFCwAAAAICAoQFAAAAg0pgA8AAXqUAhBoAAAClQGADwABOhQAAYAPAAEIyAT4EPRyENICELcAgbOCCmAEAAWqEOmADwAEAAsAA+EoAwABep06EV4RlAAC3lV0DwAD+vwFgA8AAQScBHIR3gIRnwCBs4LApAQFgA8AAQScBNISAA4SAhLoAAAAAAAAAYAPAAEEnAUqEhgEmhIYBHoSKwABCCgIAAoCEpsAgbOCBhK7AIGzuAGADwABBJwDAAF6yPRyEyICEwcAgbOCCkAEAAWqEzGADwAEAAsAA+EoAwABeqEqE1gEfhOHAAEJmAQABgoT5wCBtKQAGwABCO4C3hUGFUoYkAACwEAFqhUJgA8AA/2gCAAABA4VhhiQAAAABAQGFawAAAIRAYAPAAF5WAABcAT4EPRyFfICFd8AgbfiwtwEAAWqFk2ADwABB6MAA9/oAwABeZz0chaSAhZ/AIG34gpgBAAFqhapgA8ABAALAAPhKAMAAXls9HIW5gIW0wCBt+Ih4AgFgA8AAQScCFoXMLreVwABCNzSF2wOF24YMAAAAAQEBhekAAACtamADwABBJwAAXAFKhfIBHIX3gYXywCBufbAQAQABgIYHwCBt+ADAAEE0AMAAXl89HIYYgIYTwCBt+IKQAQABaoYcYAPAAQACwAD4SgDAAF5cBsAAQjyAt4YphjmImwABt4gAAAABA4ZAiJsAAAACAgKGVAAAALa3XQPAAP59AWADwABB+QCGaAAAAKVAYAPAAE6FAABgA8AAQfkBPglAHIaRgIaLwCBu9JaLAQABNIaXA4aXhs8AAAABAQGGmAAAAK1qYAPAAEH5AABgA8AA/FUBSoahAR6GqsAAQg4CAAKChr3AIG8/gYbDwCBvCQAAwAD+kIaLhtAATobqhvMAALedXQPAAP6/AWADwABBJwExhwNgA8AAQScAPR6HC8AAQj0DAAOAhxnAIG70gocgwCBvfYGHKsAgbwkASYc8FodJgodAwCBvfYFVwAD+oUqHUgEfh13AAEFrAAAAAD9Jh3och44Wh4eCh37AIG99YcAA/u+AlwEAAWqHkGADwAD+G4FXAMAA/0s+AUqHqgEeh7HAAEI+AgACgoe5wCBvfYGHw8AgbwkAP0mH2xyH7xaH6IKH38Agb31hwAD+70gBAAGUAMAA/z9Kh/UBHIgEgof8wCBvfUsBAAGTAMAA/s4/TogbiCEAAJdXYAPAAEIyAR+IJ8AAQmYBAAGCiD/AIG99AEAeiF7AAEIOAgACg4hxwCBwZIGIeMAgbwkAiFWIhABKiIsBg4iSwCBwZAbAAEI9gLeIoIiskJcAAbeeAAAAAQOIuZCXAAAAAwMDiM0AAAC2t10DwAD+fQFgA8AAQfkAiO0AAAC3nV0DwAD+vwFgA8AAQScAiQQAAAClQGADwABOhQAAXAE+AUaJjwCJnQAAAK1qYAPAAEH5AICJpcAgcM9BPgI9i4m0wCBxEB6JxMAAQg0BAAGDidbAIHEQAEmJ4xaJ7IOJ58AgcRC3QMAAQis+Ak6KDYoTAACXV2ADwABCMgEmig0Bg4oVwCBxEGADwABCMj0eiiPAAEI9AwADFoo3hIoxwCBxWLeVwABCN4GKRsAgcOSCilDAIHD5AEmKaxaKdIOKb8AgcRCBVcAAQiY+AUKKhwA+BU6KtYq+AAC3n2ADwABBJwEmirUBg4rAwCBxEGADwABBJ06K0oreAAC3oGADwAD+GwEciuCUgcYAAAAAwAD+Pk6K8Yr5AAC3oWADwAD8VQEqQUWLbwGLeIt6AABiYAPAAP4bAZMBHIuBh4t/wCByEmMBAAEWi4yBi4PAIHDkYcAA/u8AwAD/SQGPi5TAIHISHIuVh4uUwCByEmQBAAGUAMAA/0FBPgpOi7KLugAAXmADwABBJwEci8SBi7zAIHDkSwEAAYeLxcAgchIAwAD+zkmL0xyL3xSL18AgcmQIAEgBAAErAMAAQVJCi+gCP06MBYwNAAC3omADwABB+QEcjBiEjA/AIHG+l1cCAAIUjB7AIHJkCACCjCfAIHD5AMAAQURJjIMWjI8UjIfAIHKrCQC3QMAAQitCjJgCPz2OjKzAIHH9KUmNLByNOBSNMMAgcmQIAEgBAAEUjTvAIHKrCQAAwABBUkKNRAE/PRyOTIGORMAgcOSAvwIAAoeOTcAgchImjkwBFI5SwCByqwkAYAPAAEEnAMAA/s89jI5lwCBxviaOZQEUjnDAIHKrCQBgA8AAQSdJjoQhHI6UhY6IwCBx30gBAAEcjpeUgcYAAAAAwAD+PgDAAP8/PgI9HI9ngY9ewCBw5KBGAQABhY9wwCBx3wDAAP7dPY+PisAgchIcj4uHj4rAIHISgY0BAAGUAMAA/0I/PY2P1sAgcd+Hj+TAIHISSZBhIYaQZsAgcf09HJB4gZBvwCBw5FYBAAGEkHzAIHG+AMAA/tA/BsAAQj6At5CckKyZMgABt6MAAAABA5CzmTIAAAACAgKQxwAAALa3XQPAAP6/AWADwABBJwCQ2wAAAKVAYAPAAE6FAABgA8AAQfkBPgpJkVoWkWSAkV7AIHQogVXAAP6hPTCRbR+RgcAA/U8CAAKAkYfAIHQoJ7a3AD9OkhiSJAAAt6RgA8AA/FUBHJIsgJImwCB0KJaLAQABNJIyA5IykkUAAAABAQGSMwAAAINTYAPAAEEnAABgA8AA/FUBSpI5ASEWkjyCkjrAIHSvqvXAAEFkAMAA/pBOklGSXAAAtvhgA8AA/FUBHJJkgJJewCB0KIHWAQABNJJoA5JoknsAAAABAQGSaQAAAINTYAPAAEEnAABgA8AA/FUBSpJvARaScYOSb8AgdQy2+MAAQVsAwAD+kk6SlZKgAAC3pV0DwAD+vwFgA74TARySwRySqICSosAgdCiAqwEBYAO+EwE0kqwDkqySvwAAAAEBAZKtAAAArWpgA8AAQScAAGADvhMBSpK2ARaSu4SStsAgdXSWrMAAQS4AwAD+iICtAAAAAMAA/pNOkuWS8AAAt6ZdA8AA/n0BYAO+EwEckwaBkvrAIHQ9t6cBAAGEkxnAIHU8AMAATp1Ok2cAAAC3qGADvhMATpN8AAAAt6lgA8AA/hsATpOOAAAAt6pgA8AA/hsARpOck8aTrQAAAIhxYAO+EwCFk7rAIHWsPgVPk86T0wAAAberYQMBW2ADwAD8VQADk++UnQAAAAEBAZPwAAAAmiZbAABgA8AA/FUBSpQCASIiIRyUBhSUAsAgdkALAEgBAAEUlAnAIHYLCQAAwAD/dQAclDsWlCyBlCDAIHQ9h/bAAE6Tt6wBAAEmlFQBFJRUwCB2QAsAYAO+EwDAAHLbAByUgRaUcoGUZsAgdD2H9sAATpObagIAAiaUjgEUlI7AIHZACwBgA74TFJSTwCB2CwkAAMAAct1OlKoAAACY3mADwAD+GwBOlLoAAACCa2ADwAD+GwBJlMYigpTKwCB0gwAclOSElNnAIHU8losBAAEUlOrAIHYjCgAAwAD+kD4DPRWWAMAgdu0MapYUYAPAAP4bIT0Vlu/AIHbeCxyXERaXAoGW9sAgdD2H9sAATpO3rQEAARSXJcAgdgsJAADAAHLhQByXUhSXTcAgdt4LAIFrAQABHJdwFpdhgZdVwCB0PYf2wABOk7euAQABFJeDwCB2CwkAAMAAcuYAwAD/SpdNl40APgI9FZenwCB27Qxql7tgA8AA/htTPRWXzMAgdt4LHJfuFpffgZfTwCB0PYf2wABOk7euAQABFJgBwCB2CwkAAMAAcuZJmFgiHJhohphcwCB13EgBAAErAMAA/3UBHJh4FJhzwCB23gsAYwEAARSYesAgdfgIAADAAP9JPgM9jpiOwCB13BSYnMAgdgsJAD0VmK/AIHX4CBSYusAgdt4LAD2PmMjAIHXpFJjTwCB27QwAP0qY6wEemPbAAEH+BAAEhpj/wCB13IeZDMAgdemDmRbAIHTggZkiwCB0PQAGwABCP4C3mTeZTJsRAACXVwFqmThgA8AA/2gCAAABA5lRmxEAAAACAgKZWgAAAIPbWwCZbgAAAKVAYAPAAE6FAABgA8AAQfkBPgU9iJmBwCB4sR6ZksAAQg0BAAGAmaTAIHixAEmZsCIhJpm0ARaZu4CZtcAgeLG3QABgA8AA/FUAHJnUFpnGLreVwABCN4McAQABgJndwCB4sQDAAP6MSpnlAS4/TpoKmhIAALevXQPAAP6/AWADwABBJwEemhjAAP7FAQFgA8AAQScBFpowLreVwABCNwBJmkQhJppIARaaT4CaScAgeLG3QABgA8AA/FU+AT0cmmiCmmDAIHkuVgEAASaabAGAmmzAIHixYAPAAEEnAMAA/tA+AkAlmpSAmo7AIHixYAPAAEIymo6apAA9HJq1gpqtwCB5LoClAQABJprCARaawoCavMAgeLG3lQBdA8AA/n0BYAPAAEEnAMAA/tFKmtwBHprnwABCCQIAAoKa+MAgeS6BmwHAIHi6AAbAAEJAgLebFpsrnjkAAJdYAWqbF2ADwAD/aAIAAAEDmzeeOQAAAAICAptAAAAAg9tbAJtUAAAApUBgA8AAToUAAGADwABB+QE+Bj2Im2fAIHozHpt4wABCDQEAAYCbisAgejMASZuWIiEmm5oBFpuhgJubwCB6M7dAAGADwAD8VQAcm7oWm6wut5XAAEI3gxwBAAGAm8PAIHozAMAA/oxKm8sBJpvLAYCb0sAgejNgA8AAQfk/SZvdIiab5wEWm+eAm+HAIHozt0AAYAPAAPxVAByb9y5IAQABgJv6wCB6MwDAAEJVSpwBAS4/TpwinDAAALewXQPAAP6/AWADwABB+QExnDxgA8AAQfkARpxEnGycUgAAAF5gA8AAQfkAFpxdLreVwABCNz4BSZx0Jpx+ARacfoCceMAgejO3QABgA8AA/FU+AUmckSacqQEcnKkWnJuAnJXAIHozt5UAgxwBAAGDnLLAIHsbAABgA8AA/FU+AT0cnNaCnMjAIHr2VgEAAYOc2sAgexsAwAD+0D4BRpz/nTMAAAABAFsAJp0kARadJICdHsAgejO3lQBdA8AA/n0BWz4CTp0RAAAAt0NgA8AAQScBJpz/AYSdEcAge59gA8AAQSc9HJ1Pgp1BwCB69lYBAAEcnVuDnVPAIHsbl1gCAAKFnWjAIHvCgZ1zwCB6PADAAEIhAMAA/tA+AT0cnb2Cna/AIHr2VgEAARydyYOdwcAgexuXWAIAAiad1gGAndbAIHozYAPAAEH5gZ3dwCB6PADAAEIhAMAA/tBKnf4BHp4JwABCCQIAAoKeGsAgevaBninAIHo8AAbAAEJBgLeePp5PnwkAALb3AWqeP2ADwAD/aAIAAAEDnlmfCQAAAAICAp5jAAAAg9tgA8AAQfkAnncAAAClQGADwABOhQAAYAPAAPxVAT4CRp6Knq2ekwAAAF5gA8AAQScAFp6eLreVwABCNz4BSZ61IRyewoKeusAgfMu29wIAAoCezcAgfKCBntTAIHyuAMAAQUlKnuIBKj9KnvoBKQbAAEJCgLefDp8jn/kAAIaAAWqfD2ADwAD/aAIAAAEDnyuf+QAAAAAAAABgA8AAQfkBPgRJnzQWnzgutvjAAEJaSp9EAS4/Tp9on3AAALevXQPAAP6/AWADwABBJwEen3bAAP7FAQFgA8AAQScBFp+OLreVwABCNwA9HJ+pgJ+iwCB9XYC/AgACkyafqQEcn7ocn7aAn6/AIH1dSwEAAZMAwAD+zoaAAAAAAMAAQTVgA8AAQScAwAD+z0qfygEfn9XAAEJmAQABgJ/twCB9XQAGwABCQ4C3n/6gE6EGAACGgQFqn/9gA8AA/2gCAAABA6AeoQYAAAAAAAAAYAPAAEH5AT4DSaAnIRagLC62+MAAQlpKoDgBLj9OoGCgbAAAt7FdA8AA/n0BYAPAAEEnARygxRygfBagbi63lcAAQjeAqwEBYAPAAEEnATSggAOggKDDAAAAAQEBoIEAAACDU2ADwABBJwAAYAPAAEEnAT4CTqCZoJsAAIOpYAPAAEEnASagmQEcoJ+AoJ3AIH5thoEAAAAAwABBNmADwABBJ0qgtAGBoLvAIH6GAMAA/oiArQAAAADAAP6TSqDTAR+g3sAAQmYBAAEmoPYBgKD2wCB+Ll0DwAD+vwFgA8AAQScABsAAQleAt6ELoSChNgEAtxkBaqEMYAPAAP9oAgAAAQOhLqE2AAAAAAAAAGADwAD8VQFKoTEBKgbAAEJYgLehOqFPoV8BAIFVAWqhO2ADwAD/aAIAAAEDoVehXwAAAAAAAABgA8AA/FUBSqFaASoGwABCWYC3oWOheKGHAQCoXAFqoWRgA8AA/2gCAAABA6F/oYcAAAAAAAAAYAPAAPxVAUqhggEqBsAAQlqAt6GLoaCh1AEAtvgBaqGMYAPAAP9oAgAAAQOhq6HUAAAAAAAAAGADwAD8VQFKoa4BHKG8FqGuLreVwABCN4HWAQABNKHAA6HAodMAAAABAQGhwQAAAINTYAPAAEEnAABgA8AA/FUBSqHHARahyYChx8Agf++2+MAAQVsAwAD+kgbAAEJbgLeh2KHtof0BALZhAWqh2WADwAD/aAIAAAEDofWh/QAAAAAAAABgA8AA/FUBSqH4ASoGwABCXIC3ogGiFqIlAQC3QAFqogJgA8AA/2gCAAABA6IeoiUAAAAAAAAAYAPAAPxVAUqiIQEpBsAAQl2At6Ipoj6iUgEAtoEBaqIqYAPAAP9oAgAAAQOiSqJSAAAAAAAAAGADwAD8VQFKok0BKgbAAEJegLeiVqJronkBAKKsAWqiV2ADwAD/aAIAAAEDonGieQAAAAAAAABgA8AA/FUBSqJ0ASoGwABCX4C3on2ikqKgAQCs+AFqon5gA8AA/2gCAAABA6KYoqAAAAAAAAAAYAPAAPxVAUqimwEqBsAAQmCAt6KkormizgEAto0BaqKlYAPAAP9oAgAAAQOixqLOAAAAAAAAAGADwAD8VQFKoskBKgbAAEJhgLei0qLnovwBALdBAWqi02ADwAD/aAIAAAEDovSi/AAAAAAAAABgA8AA/FUBSqL3ASoGwABCYoC3owCjFaMlAQC2+wFqowFgA8AA/2gCAAABA6MdoyUAAAAAAAAAYAPAAPxVAUqjIAEqBsAAQkSAt6QXpByo3AAAt7IAAAABA6QtqNwAAAACAgKkNwAAAIPbYAPAAEH5AKRLAAAApUBgA8AAToUAAGADwAD8VQE+C0AhFqSVgKSPwCCB9rdAwABCK6SOpJwAQCEcpN0WpM8ut5XAAEI3gdYBAAE0pOEDpOGlEAAAAAEBAaTiAAAArWpgA8AAQScAAGADwAD8VQFKpOsBHKTwgqTrwCCCVbcNAgACgKT9wCCB9oGlBMAgggQAwABBOgDAAP6SpM6lEQBAIRylVS6DHAIAAhaleRalaoGlXsAgggS0WcAATo2bLrmJgaWGwCCCBADAAEJOpVSlkgBAIhalzS62+MAAQloBIRal4oCl3MAggfa2+MAAQielzaXsAEmmJBamLoCmKMAggfa2YcAAQipKpjcBKj9JpmocpnSApm7AIIH2gxwCAAIWppgWpomBpn3AIIIEtFnAAE6Nmy65iYGmpcAgggQAwABCHD4BSqa7ASo/TqbgpuUAALd8YAPAAEEnASam4AEepvDAAEINAQABgKcCwCCB9gBgA8AAQSdJpzQhHKc5LoMcAgACFqdHgqdCwCCDSJaswABBLoGnTcAgggQAwABCTkqnWwEqP06nowAAAISUXQPAAP59AWADvhMASaewFqe5gqe0wCCDSLc9wABBYz4BPYunzcAgg6Mcp/IWp+OBp9fAIIIEh/bAAE6Tt1MBAAEWqAqCqAXAIINIlqzAAEEuAMAAcuA+AkAWqDCCqCvAIINIqvXAAEFkqCuoOQA9i6hCwCCDoxyoZxaoWIGoTMAgggSH9sAATpO3VAEAARaofYKoeMAgg0iWrMAAQS4AwABy5UqojgEcqJ2DqJXAIIOjlosBAAE0qKMDqKOo1wAAAAEBAaiwAAAAmiZgA74TAABgA8AA/FUBSqi4ARyovS6DHAIAAoSoxsAghG6BqMvAIIIEAMAAQk4AwAD+kAbAAEJFgLeo4ajyrZMAALcOAWqo4mADwAD/aAIAAAEDqPqtkwAAAAICAqkEAAAAg9tgA8AAQfkAqRgAAAClQGADwABOhQAAYAPAAPxVAT4EPYipK8AghNEeqTzAAEINAQABgKlOwCCE0QBJqVoiFqleLrb4wABCWgAhFqlzgKltwCCE0bb4wABCJ0qpfwEqP0mpkRapm4CplcAghNG3QMAAQis+A06puqnAAACXV2ADwABCMgEmqboBgKnCwCCE0WADwABCMk+pz6nUAAABt7NhAwJgA8AAQSddA8AA/n0BYAPAAEEnYAPAAPxVAAOp5KunAAAAAgICqfIAAACtamADwABBJwCqDwAAALa3XQPAAP59AWADwABBJwAAYAPAAPxVAT4CTqr4qwoAALe0YAPAAEEnASaq+AEcqxGEqwzAIIWfhoEAAAAAwABBNmADwABBJ0qrKAEcqzWFqy/AIIWtgdYBAAE0qzkDqzmrngAAAAEBAatHAAAAg9tgA8AAQScAAGADwAD8VQE+AUqrWgEcq2eHq2HAIIYbtw0CAAKGq3TAIIXNgauHwCCE3wDAAEE6AMAA/pJKq7ABHKvFFqu3LreVwABCN5aLAQABNKvLA6vLrTsAAAABAQGr2QAAALe1YAPAAEEnAABgA8AA/FUBPgNOq/asAAAAt7ZgA8AA/FUBHKwSg6wCwCCFcCACAAKErBPAIIaCFqwngqwhwCCFTbeVwABCNwAASaw/IiJqrENgA8AA/FUAACGFrHDAIIabABysj4KsicAghU23sgIAAoSsocAghoKBrK/AIITfAMAAQkQ+AT0wrMkkrQ4FJ7e3LieBiYCtB8AghNEngWo/Sq0iAYWtKcAghpsAwAD+kD9KrUgBHK1dFq1PLreVwABCN5aLAQABNK1jA61jrY4AAAABAQGtZAAAAK1qYAPAAEEnAABgA8AA/FUBSq1tARytcoKtbcAgh123DgIAAoCte8AghNGBrYLAIITfAMAAQTkAwAD+kAbAAEJGgLetmK2psBMAALcNAWqtmWADwAD/aAIAAAEDrbWwEwAAAAICAq2/AAAAg9tgA8AAQfkArdMAAAClQGADwABOhQAAYAPAAPxVAT4HPYit5sAgh8gerffAAEINAQABgK4JwCCHyABJrhUiFq4fgK4ZwCCHyLb4wABCJwAhFq4uLrb4wABCWkquOgEqP0muTBauVoCuUMAgh8i3QMAAQitKrl8BHK5sgK5mwCCHyLcOAgACLoGue8Agh9YAwABCGT89iK6NwCCHyByum4CulcAgh8iGgQAAAADAAEIRTq7hrusAALe2YAPAAPxVARyvAxau9S63lcAAQjeB1gEAATSvBwOvB682AAAAAQEBrwgAAACtamADwABBJwAAYAPAAPxVAUqvEQEcrxaCrxHAIIiutw0CAAKAryPAIIfIga8qwCCH1gDAAEE6AMAA/pJJrz0iImqvQWADwAD8VQAAIYKvasAgiH8AHK9/LreyAgACgK+RwCCHyIGvmMAgh9YAwABCRD4BPTCvriSv8wUnt7cuJ4GJgK/swCCHyCeBaj9Kr/8BgrAGwCCIfwbAAEJHgLewGLApsKQAALcDAWqwGWADwAD/aAIAAAEDsDiwpAAAAAEBAbBGAAAApUBgA8AAToUAAGADwAD8VQE+AUqwWQEcsG4WsGAut5XAAEI3losBAAE0sHQDsHSwnwAAAAEBAbB1AAAArWpgA8AAQScAAGADwAD8VQFKsH4BHLCDgbB+wCCJsbcDAQABgLCTwCCJdQDAAEE7AMAA/pAGwABCSIC3sKmwurE7AAC3BgFqsKpgA8AA/2gCAAABA7DMsTsAAAABAQGw2gAAAKVAYAPAAE6FAABgA8AA/FUBPgFKsO0BHLECFrD0LreVwABCN5aLAQABNLEIA7EIsTYAAAABAQGxCQAAAK1qYAPAAEEnAABgA8AA/FUBSrESARyxF4GxEsAgilG3BgEAAYCxKsAgihUAwABBPADAAP6QBsAAQkmAt7FAsVGx3wAAtwQBarFBYAPAAP9oAgAAAQOxYLHfAAAAAQEBsW4AAAClQGADwABOhQAAYAPAAPxVAT4BSrGBARyxlhaxiC63lcAAQjeWiwEAATSxnAOxnLHaAAAAAQEBsZ0AAACtamADwABBJwAAYAPAAPxVAT4BSrGrARyxt4GxssAgivG3BAEAAYCxx8AgirUAwABBPQDAAP6QBsAAQkqAt7HksfWycgAAtwcBarHlYAPAAP9oAgAAAQOyBbJyAAAAAQEBshMAAAClQGADwABOhQAAYAPAAPxVAT4BSrImARyyOxayLS63lcAAQjeWiwEAATSyQQOyQbJtAAAAAQEBskIAAACtamADwABBJwAAYAPAAPxVAUqySwEcslCBskvAIIuTtwcBAAGAsmHAIItXAMAAQT4AwAD+kAbAAEJLgLeyd7KIswkAALcCAWqyeGADwAD/aAIAAAEDspqzCQAAAAEBAbKoAAAApUBgA8AAToUAAGADwAD8VQE+AUqyuwEcstAWssIut5XAAEI3losBAAE0stYDstazBAAAAAEBAbLXAAAArWpgA8AAQScAAGADwAD8VQFKsuABHLLlgbLgwCCMM7cCAQABgLL4wCCL9wDAAEE/AMAA/pAGwABCTIC3sw6zH7OLAAC28wFqsw9gA8AA/2gCAAABA7Mrs4sAAAABAQGzOAAAAJZ7YAO+EwAAYAPAAPxVAT4BSrNHARyzXBazTi63lcAAQjeWiwEAATSzYgOzYrOGAAAAAQEBs2MAAACtamADwABBJwAAYAPAAPxVAUqzbAEcs3GBs2zAIIzRtvMBAAGAs37AIIyXAMAAQUAAwAD+kAbAAEJNgLezkLOhtCYAALbsAWqzkWADwAD/aAIAAAEDs6q0JgAAAAICArO3AAAAmiZgA74TALPJAAAApUBgA8AAToUAAGADwAD8VQE+AUqz3AEcs/EWs+Mut5XAAEI3losBAAE0s/cDs/e0IQAAAAEBAbP4AAAArWpgA8AAQScAAGADwAD8VQFKtAEBHLQGgrQBwCCNfbbsAgACgLQQwCCNNYG0FcAgjUEAwABBQQDAAP6QBsAAQk6At7QrtDy0twAAgxwBarQsYAPAAP9oAgAAAQO0RLS3AAAAAgICtFEAAACaJmADvhMAtGMAAAClQGADwABOhQAAYAPAAPxVAT4BSrR2ARy0ixa0fS63lcAAQjeB1gEAATS0jwO0j7SyAAAAAQEBtJAAAACDU2ADwABBJwAAYAPAAPxVAUq0lgEctJiCtJbAII4wgxwCAAKAtKHAII3ogbSmwCCN9ADAAEE3AMAA/pIGwABCT4C3tLy0zbU+AACEBwFqtL1gA8AA/2gCAAABA7TYtT4AAAABAQG05gAAAKVAYAPAAE6FAABgA8AA/FUBPgFKtPkBHLUOFrUALreVwABCN4HWAQABNLUSA7UStTkAAAABAQG1EwAAAK1qYAPAAEEnAABgA8AA/FUBSrUcARy1IYG1HMAgjteEBwEAAYC1LcAgjpsAwABBQwDAAP6SBsAAQlCAt7VDtVu1iAAAtvoBarVEYAPAAP9oAgAAAQO1ZrWIAAAAAQEBtXQAAAClQGADwABOhQAAYAO+EwFKtYQBKwbAAEJRgLe1jbWetksAALacAWq1jmADwAD/aAIAAAEDtbe2SwAAAAICArXBAAAApVJgA8AATLgAtdgAAAClQGADwABOhQAAYAPAAPxVAT4BSrXrARy2CRa18i63lcAAQjeB1gEAATS2DQO2DbZGAAAAAQEBtg4AAACDU2ADwABBJwAAYAPAAPxVAUq2FAEcthaCthTAII/ItpwCAAKAtjDAII9+gbY6wCCPjADAAEFQAMAA/pIGwABCUoC3tlC2YbbyAAC2tQFqtlFgA8AA/2gCAAABA7ZntvIAAAADAwO2dQAAAJZ7YAO+JQC2gwAAAIC9YAPAAGpKALaWAAAApUBgA8AAToUAAGADwAD8VQE+AUq2qQEctr4WtrAut5XAAEI3gdYBAAE0tsIDtsK27QAAAAEBAbbDAAAAg1NgA8AAQScAAGADwAD8VQFKtskBHLbLg7bJwCCQiba1AwADgLbSwCCQM4G228AgkD+CtuHAIJBNAMAAQU8AwAD+kgbAAEJTgLe297cQuMMAALahAWq2+GADwAD/aAIAAAEDtyK4wwAAAAICArcsAAAApVJgA8AATLgAt0MAAAClQGADwABOhQAAYAO+JQE+A063YwAAAIhxYAO+JQBGt3K3m7eEAAAArWpgA8AAQScAFreMLreVwABCNz4CTrewt7gAAF5gA74lARy3v4O3usAgkTG2oQIAAoC30sAgkPuBt9zAIJEJAMAAQVFJt/Act/yEt/TAIJFMSAEAASsAwAD/dT4BSrgPAStJuCkcuDeCuC3AIJEgSAEAASsAwAD/dT4BPYq4SsAgkSCEuFbAIJFMSbhsIRy4eoK4cMAgkSBIAQABhLh9wCCRTADAAP91PgFKuJABKz9KuK8Bgri2wCCRIAbAAEJUgLe4yLjbuY8AACMBarjJYAPAAP9oAgAAAQO447mPAAAAAAAAAGADwAEAAgE+Ak6487j/AAC3uGADwAEAAgEcuV81uUAAAAEAXQPAAP6/AWADwAEAAgEcuUAcuRgWuQout5XAAEI3gKsBAWADwAEAAgE0uRwDuRy5PgAAAAEBAbkmAAAArWpgA8AAQfkAAGADwAEAAgFKuS8BHLk0gLkvwCCSdSMAAAAAwAD/dgDAAP6IgK0AAAAAwAD+kzUAAAABAFsBHLlKgLlIwCCSOICuAAAAAMAA/tKAAMAgkjhYAQABJ4GLAMAA/pFKuW8BJLmLAye3uYC5fsAgkiUngyYGwABCVYC3uZS5rrtQAwBIAWq5lWADwAD/aAIAAAEDubC7UAAAAAEBAbmxAAAAg9tbAABgA8AA/FUBPgNJub4eucLAAPf8AgACLoC50sAgkx0ASrnaASk/T7nsufEAAAGEB2EDAGADwAD8VQADufy6pwAAAAAAAABgA8AA/FUBPgFKugcBJroHARy6Iha6FIC6DsAgkx23lQCWiwEAATS6KAO6KLqgAAAAAQEBuikAAACDU1sAAGADwAD8VQE+Ak66Oro+AACAq10DwAD+fQFgA8AAQfkBHLpOFrpALreVwABCN4CrAQFgA8AAQfkBNLpSA7pSumgAAAABAQG6UwAAAINTYAPAAEEnAABgA8AAQfkBSrpZARy6W4O6WcAgk/CGgQAAAADAAEE2AMAA/ohKunMBHLp+g7p6wCCTtIMcAQABHLqJgrqHwCCToIaBAAAAAAAAwAD+jAAAYAPAAPxVSrquASIiIiW6u4C6tcAgkx1gA8AAQjIAHLroFrrdFLrXwCCTHQABYAPAAEIytvjAAEJaSAEAARa66y62+MAAQloAwAD/dQAcuxwWuxUWuwcUuwHAIJMdAAFgA8AAQjK3lcAAQjdhwAD+70gBAAEWuy0Wux8ut5XAAEI3YcAA/u8AwAD/PwAcu0qBuz/AIJNPIAAAAAAABsAAQmOAt7tVu2m8fgEAg8YBartWYAPAAP9oAgAAAQO7crx+AAAAAAAAAGADwAD+GwE+A067fLuFAACDxmADwAD+GwEjFruHLrb4wABCWjdWNysBYAPAAP4bRrv3vBe8AAAAAK1qYAPAAEEnABa8CC63lcAAQjc+AT2IvB/AIJUfHLxTHLw0gLwrwCCVH4PAAQABFrxJHLw7gbw2wCCVSYaBAAAAAMAAQTaDxsAA/3sAwAD+NYN8AQABN/////8AwAD+M0q8awGAvHLAIJUfAAAgbMAAIG3OACBu1AAgcK8AIHQIACB4hwAgegkAIHx2ACB9FQAgfeUAIH70ACB/KwAgf2IAIH+ZACCAHgAggFUAIICMACCAwwAggPoAIIExACCBaAAggZ8AIIHWACCEpwAgh54AIIlLACCJ6wAgiosAIIstACCLzQAgjG0AII0LACCNvgAgjnEAII8RACCPVAAgkAkAIJDRACCR8QAgkvQAIJTqACCVuQAAACkCwABCZ4C4gOqA8Ii2A7e6AAABYAHAAEFxAAADBMAAQmmAuIGVgawGg+wAYAPAAQACAWqBm2ADwAEAAsAA+E0EwABCaoC4gcyB1Qm3CgFqgbJgA8AA/2gCYAPAAEH5AATAAEJrgLiB9oH7CYCWAGADwABibgABBcAAQnqAuIIAggCCKQAAAAOCDYIpAAAAAgICghMAAAS3CmADwABB+QCCIwAABICWYAPAAGJuAABgA8AAQmcBPwMIAcAAQmqAAMAglvcIAcAAQmuBAMAglwUJAYIAwABBlwAAAAAKBsAAQm2AuIJpgnGDrAQBsA8AAAABA4KRg6wAAAACAgKCpAAAAINKYAPAAF6lAIK5AAAApUBgA8AAToUAAGADwABCZwE+BT0cgtOAgszAIJdigpgBAAFqgtlgA8ABAALAAPhNAMAAXqdOguyC9gAAtwpgA8AAQfkBHoL8wABCCgIAAoCDGMAgl2KBgyDAIJdwAE6DQINJAACGHWADwABiOAEcg1KAg0vAIJdisMoAAAAAwABe5T0cg22Ag2bAIJdigpABAAFqg3FgA8ABAALAAPhNAMAAXqhKg3sBH4OGwABCegIAAoKDlMAgl6smg58Bg4OfwCCX1GADwABibgAGwABCb4C4g+KD84SqAACwEAFqg+NgA8AA/2gCAAABA4QChKoAAAABAQGEDAAAAIRAYAPAAF5WAABcAT4FPRyEHYCEGMAgmGqwtwEAAWqENGADwABB6MAA+BEAwABeZz0chEWAhEDAIJhqgpgBAAFqhEtgA8ABAALAAPhNAMAAXls9HIRfFoRVLrcKwABCarAQAQABgIRvwCCYagDAAEIMPRyEf4CEesAgmGqwzAEAARaEjS6AlsAAQmsAwABekj0chJ6AhJnAIJhqgpABAAFqhKJgA8ABAALAAPhNAMAAXlwGwABCcIC4hK+ExIUiAACGgAFqhLBgA8AA/2gCAAABA4TMhSIAAAAAAAAAYAPAAEH5AT4BSoTVASMWhNwutvjAAEF2Lh+E9MAAQnoCAAIchQwWhQIutwrAAEJqhoAAAAAAwABCEBaFGC6AlsAAQmsAAWADwABCZwbAAEJxgLiFJ4U8hbAAAIaBAWqFKGADwAD/aAIAAAEDhUeFsAAAAAAAAABgA8AAQfkBPgFKhVABIxaFVy62+MAAQXYfhXDAAEJ6AgACHIWIFoV+LrcKwABCaoaBAAAAAMAAQhEWhZcugJbAAEJrAC4BYAPAAEJnBsAAQneAuIW1hcqF2QEAtvsBaoW2YAPAAP9oAgAAAQOF0oXZAAAAAAAAAGADwAD8VQFKhdUBKQbAAEJygLiF3oXvhoIAALcXAWqF32ADwAD/aAIAAAEDhgKGggAAAAEBAYYDAAAAg9tbAABgA8AA/FUBPgJJhhAhJYYagIYUwCCacGADwABCZ0qGLQEqP0qGPwEiHYZMtxcBAAGAhmDAIJpwAMAAQZQAHIZwFoZqLoCWwABCa0gBAAEWhnmAhnPAIJpwgJYAAMAAYnMGwABCc4C4hoeGnIe1AACXWAFqhohgA8AA/2gCAAABA4aoh7UAAAACAgKGsgAAAIPbYAPAAEH5AIbGAAAApUBgA8AAToUAAGADwABB+QE+A06G4ob2AAC3GGADwABB+QEchwIWhvgutwrAAEJql1gCAAKAhw/AIJsEgYcWwCCbEgDAAEIhSYcoFodAgocswCCbK7cZwABCKUqHTwGCh1bAIJsrP0qHbwEjFoeKgod2wCCbK7b4wABCJxyHly6GgAAAAADAAEJwHIekLoaBAAAAAMAAQnEBYAPAAEH5BsAAQnSAuIe6h9SH7wMASAFqh7tgA8AA/2gCAAABA4fWh+8AAAABAQGH1wAAAIPbWwAAYAPAAPxVAUqH4QEdh+dIAQABgIfqwCCb3wDAAEGVBsAAQniAuIf0iAiITwEAg8YBaof1YAPAAP9oAgAAAQOIEYhPAAAAAAAAAGADwAD+GwE+AUqIFwEeiB6B6AMAAxaILi6AlsAAQmsWiDUutvjAAEF2FohBLrcKwABCagAGwABCdYC4iFSIZ4i0AAAjAWqIVWADwAD/aAIAAAEDiG+ItAAAAAAAAABgA8ABAAIBPgFKiHgBJIiwBSe3vBaIhy63CsAAQmonrzociKEWiJsugJbAAEJrpzUAAAAAwABiWCeDJgAAIJdCACCYQAAgmSEAIJmYACCaDwAgmkYAIJraACCbtgAgnAcAIJxmACCcywAAAAoAAAEGwABAS4CvwABvsMAAb7fAAHT7AAG3vQAAAAEDwABvwcAAdPsAAAABAQHAAG/LAAAAgpRgA8AAQfkAAGADwAEAAgE+BknAAG/VJcAAb96AwABv2cAgnSlgA8AAQSc+BEnAAHFDFsAAcUwUwABxR8AgnSkAAWADwABBJ7cZwABBWUrAAHFbASMWwABxZxTAAHFiwCCdKQABYAPAAEEntvjAAEFbJ5weJ7e+AWADwAEAAj9OwABxkcAAcZoAALe/YAPAAQACASMWwABxoRTAAHGcwCCdKQABYAPAAEEntvjAAEFbJ4D0JwABYAPAAQACTsAAccPAAHHLAAC3wGADwAEAAgEjFsAAcdIUwABxzcAgnSkAAWADwABBJ7ZhwABBWicAIxbAAHHmFMAAceHAIJ0pAAFgA8AAQSe3PcAAQWMnZCeDjQFgA8ABAAIBYAPAAQACSsAAcgIBJMAAci0DFsAAchYWwAByERTAAHIMwCCdKQABYAPAAEEnlqzAAEEugL2+AYHAAHIcwCCdsYLAAHIlwCCd7j9JwAByNSXAAHI+gMAAcjnAIJ0pYAPAAEIyPgFKwAByVgEcwABygBzAAHJwFsAAcmIUwAByXcAgnSkAAWADwABCMreVwABCN4CrAQFgA8ABAAIBasAAcnRhAwFgA8AAQflgA8ABAALAAPhQAMAA/ohYAQABJ7fBAMAA/pE/ScAAcpMlwABynIDAAHKXwCCdKWADwABA9j4DTsAAcr/AAHLJAAC3fWADwAEAAgEewAByy8AAQEsBAAEWwABy2xTAAHLWwCCdKQABYAPAAED2twrAAED5AE7AAHLywABy+QAAgmpgA8ABAAIBHsAAcvvAAEBLAQABFsAAcwsUwABzBsAgnSkAAWADwABA9ps7wABA/ABKwABzHQEkwABzOQSBwABzJsAgnywnY4LAAHMxwCCfaSeAlz9JwABzQSXAAHNKgMAAc0XAIJ0pYAPAAEGePgROwABzZ8AAc3EAALd9YAPAAQACAR7AAHNzwABASwEAARbAAHODFMAAc37AIJ0pAAFgA8AAQZ63CsAAQaEATsAAc5rAAHOeAACD1mADwAEAAgEewABzoMAAQEsBAAEWwABzsBTAAHOrwCCdKQABYAPAAEGeheTAAEGlAE7AAHPFwABzywAAgJZgA8ABAAIBHsAAc83AAEBLAQABFsAAc90UwABz2MAgnSkAAWADwABBnoXlwABBpABKwABz7QEkwAB0DQaBwABz9sAgn+UnY4LAAHQBwCCgIieAp4PAAHQGwCCgXyeAlz9JwAB0FSXAAHQegMAAdBnAIJ0pYAPAAEJnPgNOwAB0PcAAdEYAAK5vYAPAAQACAR7AAHRIwABASwEAARbAAHRYFMAAdFPAIJ0pAAFgA8AAQme3CsAAQmoATsAAdG/AAHR1AACAlmADwAEAAgEcwAB0ghbAAHR8FMAAdHfAIJ0pAAFgA8AAQmeAlsAAQmuw0AAAAADAAGJZSsAAdJoBJMAAdLMDgcAAdKPAIKDnJ4C8gsAAdK3AIKEkP0rAAHS7ASTAAHTJAYDAAHTEwCCdKQqAr4CwgLGAsoCzgLSAtYC2gLeAuAAgoZkAH2ObAB/COQAfzgMAH99EACAiMgAgMC0AIDDSACA+0AAgSSIAIE1GACBOQwAgUFgAIFJhACBrRwAglmYAIJz8AAAADwAgnP8AIKGZAAAAAQACBsAAQnuFhYC5AAAOgOoAAIIugggAgRIAAKSxAAEBAqToh/iBTwAAuSYAAIFuAACkdgABAQGkvYGfAACktAABAQGlDoHIAAC9/gAAgewAAMAARBAAAIIXAADAAHO+AACCPgAAwABzhwABAQG2uoKEAADAAF5QAACCsgAAwABMpgABAQGlB4LkAADAAE6BAAEBAaULgw4AAL8fAACDMwAAwAB0bwAAAAAACwLAAEJ8gLmF5IXzjFYHtTUAAAFgAcAA/2gAAAEEwABCf4C5hfMABJadwABCewBbATEAWwEaAMAAQoEACwbAAEKBgLmGZIZshzYEQbAPAAAAAQOGnoc2AAAAAwMDhqoAAACDSmADwABepQCGxgAAAIJXYAODkACG4wAAALHGYAO/RQAAYAPAAEJ8AT01AAAAAIJxWwEaAMAAQuATAAAGwABCg4C5h36Hg4fjAAKwEAAAAAEDh5KH4wAAAAMDA4ecAAAAhEBgA8AAXlYAh6wAAACCV2ADg5AAh88AAACxxmADv0UAAFwABsAAQoqAuYg1iEeISwECgpQAAAABA4hLiEsAAAAAAAAAYAO/OgAGwABCi4C5iMaIz4jbAQK3wgAAAAEDiNuI2wAAAAAAAABgA8AA/FUABsAAQoyAuYksiTWJQQECt8MAAAABA4lBiUEAAAAAAAAAYAPAAPxVAAbAAEKNgLmJlYmnibEBAoVVAAAAAQOJsYmxAAAAAAAAAGADvzoABsAAQoSAuYoGihSKMAACt8QAAAABA4oeijAAAAABAQGKKwAAAIPzYAOCUwAAYAO/OgAGwABChYC5ireKxYrjAAK3xQAAAAEDitGK4wAAAAEBAYreAAAAg/NgA4JTAABgA786AAbAAEKGgLmLHIsqi0oAArfGAAAAAQOLOItKAAAAAQEBi0UAAACD82ADglMAAGADvzoABsAAQoeAuYuZi6eLzwACt8cAAAABA4u9i88AAAABAQGLygAAAIPzYAOCUwAAYAO/OgAGwABCiIC5jB+MLYxUAAK3yAAAAAEDjEKMVAAAAAEBAYxPAAAAg/NgA4JTAABgA786AAAAIKLpACCjSgAgo5MAIKO5ACCj4QAgpAkAIKQvACCkYQAgpJMAIKTFACCk9wAgpSkAAAALAsAAQo6AuYzAjM+Q9we3yQAAAWABwAD/aAAAAQTAAEKRgLmMzwAElp3AAEJ7AFsBMQBbARoAwABCkwAIBsAAQpOAuY0+jUaOEARBsA8AAAABA413jhAAAAADAwONgwAAAINKYAPAAF6lAI2fAAAAgldgA4OQAI28AAAAscZgA79FAABgA8AAQo4BPTUAAAAAgnFbARoAwAB1DBMAAAbAAEKVgLmOV45cjrwAArAQAAAAAQOOa468AAAAAwMDjnUAAACEQGADwABeVgCOhQAAAIJXYAODkACOqAAAALHGYAO/RQAAXAAGwABCloC5j4CPn4+pAAK3ygAAAAEDj6ePqQAAAAAAAABgA8AAQo4ABsAAQpeAuY/zkAGQHQACt8QAAAABA5ALkB0AAAABAQGQGAAAAIPzYAOCUwAAYAO/OgAGwABCmIC5kCGQL5BNAAK3xQAAAAEDkDuQTQAAAAEBAZBIAAAAg/NgA4JTAABgA786AAbAAEKZgLmQUpBgkIAAArfGAAAAAQOQbpCAAAAAAQEBkHsAAACD82ADglMAAGADvzoABsAAQpqAuZCFkJOQuwACt8cAAAABA5CpkLsAAAABAQGQtgAAAIPzYAOCUwAAYAO/OgAGwABCm4C5kMCQzpD1AAK3yAAAAAEDkOOQ9QAAAAEBAZDwAAAAg/NgA4JTAABgA786AAAAIKWaACCl+wAgpkQAIKZsACCmngAgptAAIKcCACCnNAAgp2YAAAAIAsAAQpyAuZE1kUSRlge3ywAAAWABwAD/aAAAAAEFwABCoAAAAAAEAAADAAAAAAAAAAAAYAPAAEKcAT8BCQEAwAD/fgAAAAABBsAAQp6AuZFWkXGRlAACt8wAAAABA5F8kZQAAAABAQGRjAAAAJZ7YAO+OgAAYAPAAEKhAAAAIKfXACCoCwAAAAECwABCoYC5kwiTF5idB6T+AAABYAHAAP9oAAAAAAoGwABCo4C5k36ThpUyBAGwDwAAAAEDk7OVMgAAAAQEBJPGAAAAg0pgA8AAXqUAk+MAAAC0s2ADwABzxACUAgAAAKVAYAPAAE6FAJQiAAAApXhgA8AARBEAAGADwABCoQE+A06UO5RFAAC3zWADwAD8VQEclE6AlEfAIKhWsC0AAAAAwABes0mUXoSUYsAgqJk+AUqUdQEflIDAAEL6AQABgpSiwCCocgA/SpS6AR6UxcAAQsgEAASAlQDAIKhWgZUIwCCoZIKVFMAgqHKDlSHAIKiAAAbAAEKlgLmVdZV6lbMAArAQAAAAAQOViZWzAAAAAgIClZMAAACEQGADwABeVgCVqAAAALSzYAPAAHPEAABcAAbAAEKtgLmVuJXJldQBAqVAAAAAAQOV1JXUAAAAAAAAAGADwABOhQAGwABCroC5ldmV6pX2AQKleAAAAAEDlfaV9gAAAAAAAABgA8AARBEABsAAQqaAuZX7lhuWPgACtUsAAAABA5Yplj4AAAABAQGWNwAAAIJqYAO+JQAAYAPAAEJ8AAbAAEKngLmWQ5ZRlnMAArVNAAAAAQOWYpZzAAAAAQEBlmkAAACA7WADvl4AAGADvzoABsAAQqiAuZbolvaXNQACt84AAAABA5cKlzUAAAACAgKXFAAAAKVSYAPAAEy4AJcsAAAAhZdgA786AABgA786AAbAAEKpgLmXlZeal8oAArfPAAAAAQOXuJfKAAAAAQEBl8UAAACD82ADglMAAGADwAD8VQAGwABCqoC5mAeYFZg0AAK30AAAAAEDmCKYNAAAAAEBAZgvAAAAg/NgA4JTAABgA786AAbAAEKrgLmYaph4mJsAArfRAAAAAQOYiZibAAAAAQEBmJYAAACD82ADglMAAGADvzoAAAAgqDYAIKkKACCpSQAgqXEAIKmZACCpzQAgqf8AIKo/ACCqcwAgqqUAIKrXAAAACgLAAEKvgLmY0JjWngoDpP8AAAFgAaR3AAAEBMAAQrGAuZlnmX4JgL0BaplPYAPAAP9oAmADwAEAAgEnt9IEwABCsoC5mZKZmgmCmgBgA6S3AATAAEKzgLmaOppPGLfTAGADwABzlAErBMAAQrSAuZpvmoAYt9QAYAPAAEKhASsBBcAAQriAuZqFmoWa7QAAAAOanJrtAAAAAQEBmqYAAACCmmADpLcAAGADwABCrwE/AggAwABCsoCaw8Agq6MJAJrVpJcBAAEWmuSAmtvAIKujlsWk3QABBsAAQraAuZsnm0KeCAAApW8AAAABA5tYnggAAAADAwObaAAAALfVYAO+OgCbiAAAAKVAYAPAAE6FAJupAAAApW1gA8AARBsAAGADwABCoQE+AUqbxAEcm8sulwMBAWADwABCoQE0m9MDm9OeAwAAAAAAAABgA8AAQqEBPgVOm/kAAAC31mADwABCoQBJnAgWnBUWnAwugprAAEKygqyk5z4BPYucNcAgrF0fnEPAAEL6AQABgZxlwCCsCwA+Aj0jHJygFpyKLrfTwABCs0gBAAErAMAA/3UXnIout9MmnIoBHJzKFpytFpykLoKawABCsqUQpLqwBAIAAoGc3sAgrAuCnOvAIKwZALdMYAPAAHOUwABCsysBYAPAAEKcPYudCcAgrF0cnSkWnRMut9PAAEKzt8wBAAGAnTXAIKv/AMAAc589HJ1uFp1dgZ1RwCCsC7fXwABOkLfYAQABg52PwCCsXQDAAHG5SZ2fGp2jpLM+AT0XncMut9SDndfAIKxdwABCtD9Kne4Bg531wCCsXQCkiQAAIKvfACCtcgAAAAECwABCuYC5ng2eE7ybA7fZAAABYAHAAP9oAAFgAcAAQqELBMAAQruAuZ7hnwYGg+wAYAPAAQACAWqe52ADwAEAAsAA+FUEwABCvIC5nyqfNQmlQAFqnwxgA8AA/2gCYAPAAE6FAATAAEK9gLmfWJ9kCaV4AWqfOmADwAD/aAJgA8AARBEABMAAQr+AuZ+On54Jt9vAAEJ7AGADwABCfAAEwABCwIC5n8if2Qm33MAAQnsAYAPAAEJ8AATAAELBgLmf8aAICbfdwABCewBgA786AATAAELDgLmgRqBTCbfeAF0DwAD+8QJgA74lYAPAAEJ8AATAAELEgLmgd6CHCbffAF0DwAD+8QJgA75eYAO/OgAEwABCxYC5oKKguQm34ABdA8AA/7MBYAOCUwAEwABCxoC5oNGg6gm34QBdA8AA/7MBYAPAAEy4AATAAELCgLmhFKEjCbfiwABCewBdA8AA/vECYAOCU2ADvzoAAQXAAELVgLmhKKEoo0cAAAADoUajRwAAAAcHB6FTAAAEpUBgA8AAToUAoWsAAASleGADwABEEQChhAAABLfeXQPAAP7xAmADviVgA8AAQnwAoZ4AAAS3310DwAD+8QJgA75eYAO/OgChuwAABLfgXQPAAP+zAWADglMAod8AAAS34V0DwAD/swFgA8AATLgAogUAAAS34l0DwAD+8QJgA4JTYAO/OgAAYAPAAEK5AT8LCAHAAEK8gADAIK8HCAHAAEK9gQDAIK8VCAHAAELDggDAIK8jCAHAAELEgwDAIK88CAHAAELFhADAIK9TCAHAAELGhQDAIK9mCAHAAELChgDAIK97CADAAEK/H6I1wABDHQEAARaicYCiZcAgrwexxsAATo4ACADAAELAH6KnwABDLwEAARai5ICi2MAgrwexxsAATo4ACADAAELBFqM8FqMogKMcwCCvB7HGwABOjp7Sv0cJAaEowAD/fgAAAAALBsAAQsiAuaNMo1SoiAQBsA8AAAABA6OFqIgAAAAEBASjmAAAAINKYAPAAF6lAKO1AAAAtLNgA8AAc8QAo9QAAAClQGADwABOhQCj9AAAAKV4YAPAAEQRAABgA8AAQrkBPgg9HKQPgKQIwCCwfIKYAQABaqQVYAPAAQACwAD4VQDAAF6nTqRSpGAAALfeXQPAAP7xAmADviVgA8AAQnwBHKRxgKRqwCCwfLT1AQJgA74lYAPAAEJ8ATSkfwOkf6VdAAAAAQEBpI0AAACCamADviUAAGADwABCfAFKpKQBHqSowABC4AMAA4Ck7MAgsHwcpQ+BpQTAILCKt+MBAAGEpSTAILEiAMAAc+IWpUmCpT3AILCYscbAAE6OAADAAF7fTqV+pY8AALffXQPAAP7xAmADvl5gA786ARylmIClkcAgsHy35AECYAO+XmADvzoBNKWlA6WlpgcAAAAAAAAAYAO/OgFKpbMBHKXgFqW/gqWzwCCwmLHGwABOjrHHAQABgKYAwCCwfAC/tgDAAF7kTqYfpjcAALfgXQPAAP+zAWADglMBHKZQHKZAgKY5wCCwfLflAAFgA4JTAADAAF7HlXEAAAAAwAD+lE6ma6aFAAC34V0DwAD/swFgA8AATLgBHKbOHKaWgKaPwCCwfLApAQFgA8AATLgBNKafA6afpswAAAAAAAAAYAPAAEy4AUqmpQEepqnAAEzuAQABgKbFwCCwfAAAwABespVxAAAAAMAA/pROpvunCgAAt+ZdA8AA/vECYAOCU2ADvzoBHKcTgKcMwCCwfLfnAQJgA4JTYAO/OgE0pywDpyynhgAAAAAAAABgA786AUqnMgEcp18Wpz6CpzLAILCYscbAAE6OsccBAAGAp3/AILB8AL+2AMAAXsg9HKeUgKeNwCCwfIKQAQABaqeYYAPAAQACwAD4VQDAAF6oSqeiAR+nrcAAQtUHAAeCp9XAILCYg6fqwCCwpoSoAMAgsOGFqBfAILF9hqgxwCCx7IeoUsAgsiYUqHXAILKQCAAABsAAQsqAuaiNqJ6sTQAAsBABaqiOYAPAAP9oAgAAAQOoraxNAAAAAgICqLcAAACEQGADwABeVgCozAAAALSzYAPAAHPEAABcAT4IPRyo44Co3sAgs4ywNAEAASoAwABeYD0cqROAqQ7AILOMgpgBAAFqqRlgA8ABAALAAPhVAMAAXls9HKkogKkjwCCzjLT9AgFgA8AAQnwCFqlALrfewABCwzSpVwOpV6o7AAAAAgICqWUAAACCamADviUAqY0AAACBdmADwABCfAAAXAFKqaQBHKmrg6mkwCC0H7AQAwADgKnMwCCzjByp7YGp4sAgs5q34wEAAYKqAsAgtBMAwABz4haqJxaqGy6lQMAAQryxxsAATo4AwABCgwDAAF6MPRyqR4CqQsAgs4y36AIBYAO/OgIWql4ut9/AAELENKp4A6p4qucAAAABAQGqhwAAAICWYAO/OgAAXAFKqpEBHKq+FqqdFqqRLqVAwABCvLHGwABOjrHOAgACgKrbwCCzjIKq4cAgtK4Av7cAwABekT0cqvOAqu7AILOMt+kBAAEWqwIut+DAAELFAMAAXnQ9HKslgKsgwCCzjIh4AgFgA8AATLgCFqsvLrfhwABCxjSrUgOrUquHAAAAAQEBq1wAAAClUmADwABMuAAAXAFKq2kBHKtygqtpwCC1P7AQAQABgKuCwCCzjADAAEzUAMAAXl89HKuTgKuOwCCzjLfqAgFgA786AharrS634sAAQnvAAELCNKvGA6vGrDUAAAABAQGr1QAAAICWYAO/OgAAXAFKq98BHKwMFqvrFqvfLqVAwABCvLHGwABOjrHOAgACgKwpwCCzjIKsL8AgtaQAv7cAwABedT0crEGArDzAILOMgpABAAFqrEVgA8ABAALAAPhVAMAAXlwGwABCy4C5rFKsfq7pAAC1SwFqrFNgA8AA/2gCAAABA6yMrukAAAABAQGsmgAAAIJqYAO+JQAAYAPAAEJ8AT4CQCElrL+ArLjAILY0YAO+Way4rNgBHqzitv0CAAKArPjAILY0JAACJ7frJ7fsAEqufAE1AAAAAQBgA8AAQnwBHK6QFq6DLrfewABCw0sBAAGArpHAILY0AMAA/wUjHK6ZgQDAILZ9SAEAASsAACMlrqyArqXAILY0YAO+OhauwC633MAAQnvAAELAFq7ULrfbwABCe8AAQr8BYAPAAEJ8gQDAILZ9AWADwABCfAbAAELMgLmu7q8IsEYAALVNAWqu72ADwAD/aAIAAAEDrxmwRgAAAAEBAa8gAAAAgO1gA75eAABgA786AT4BSrAFATUAAAABAGADvzoBHLAcFrAMLrffwABCxEsBAAGAsB3AILcgAMAA/wUjHLAogQDAILc5SAEAASsAABawKy633cAAQnvAAELBgQDAILc5AWADvzoGwABCzYC5sEuwZbTYAAC3zgFqsExgA8AA/2gCAAABA7B5tNgAAAACAgKwigAAAKVSYAPAAEy4ALCiAAAAhZdgA786AABgA786AT4FSbEBFrEOgLEFwCC3tLftwABMy0qxIwEWsUoWsTYWsSoupUDAAEK8scbAAE6OntK/Rz9JsVsiFrFogLFfwCC3tIVQwABMyQEWsX2AsXTAILe0t+7AAEzNPgFKsZEBFrG4FrGkFrGYLqVAwABCvLHGwABOjp7Sv0c/SbHPHLHTLrfvAgACgLHqwCC3tIGx9MAgt8IAwABCzj4BSrIHARyyLhayGhayDi6lQMAAQryxxsAATo62hgEAAYGyRsAgt8IAv5c/SbJbHLJfLrfwAgACgLJzwCC3tIGyfcAgt8IAwABCzz4BSrKQARyytxayoxayly6lQMAAQryxxsAATo62jAEAAYGyx8Agt8IAv58/SbLdHLLtFrLhLqVAwABCvLdeAgACgLMBwCC3tIGzC8Agt8IAwABOqD4BSrMeARazRRazMRazJS6lQMAAQryxxsAATo6e0r9HPgROs3yzhQAAiHldA8AA/n0BYAO+JQEcs50Ws5EupUDAAEK8tX0CAAKAs6vAILe0gbO1wCC3wgDAAE6qTrPas+AAAIWFXQPAAP6/AWADvzoBMbPxYAO/OgBGs/u0IrQNAAAAlntgA74lAIK0GMAguS8+Ak60OrQ/AACClGADvzoBHLRBLrfxAgAChLRawCC5ioC0Y8Agt7QAwABC0D0ctHyDtHbAILlpVgEAAYW0gMAguaAAwAD+0Eq0lQEctLwWtKgWtJwupUDAAEK8scbAAE6Otn4BAAGDtMjAILlpAL+QBsAAQs6AubTdtOK1sgAAt+8AAAABA7T4tbIAAAACAgK1AgAAAKVSYAPAAEy4ALUaAAAArWpgA786AABgA8AA/FUBPgFKtSYBIiIhHLUygbUtwCC6O0gBAAErAMAA/3UAHLVlFrVRFrVFLqVAwABCvLHGwABOjraBAQABgbVxwCC6OwC/lQActZwWtYIut+HAAELGgxwBAAGAtaXAILotAMAA/78GwABCz4C5tbe1vLZnAAC38AAAAAEDtc+2ZwAAAAICArXZAAAApVJgA8AATLgAtfEAAACtamADvzoAAGADwAD8VQE+AUq1/QEiIiEctgmBtgTAILrfSAEAASsAwAD/dQActjwWtigWthwupUDAAEK8scbAAE6OrPgBAAGBtkLAILrfAL+cABa2XIC2U8AgutG38sAATMwGwABC0IC5tmy2erq7AAC38QAAAAEDtpK6uwAAAAICAranAAAAlntgA74lALa5AAAApVJgA8AATLgAAGADvzoBPgFJtskiHLbaFrbVgLbNwCC7Z4C9vgFIAQABarbpYAPAAQACwADxdQDAAQARACEctxAWtwuBtwLAILtzgL3AAEzGSAEAARa3G4C3E8Agu2eAvb4BAMABABE+AUq3ogEWt8Ect6kutUsBAAGAt7jAILtnAMAAQsuFVcAAQo1Jt9gWt+WBt9zAILtzhU7AAEzIPgFJt/cWuAOAt/vAILtns9q+LT4BSrhYARa4fxa4axa4Xy6lQMAAQryxxsAATo6FVr9JSbiaFrimgLiewCC7Z4ebviw+AUq4uQEWuNgcuMAutUsBAAGAuM/AILtnAMAAQsuClMAAQopJuOsWuPeAuO/AILtnhU6+Lj4BSrkLARa5Khy5Ei61SwEAAYC5IcAgu2cAwABCy4VVwABCjT4CQCq5VLlZAR65W7b9AgACgLlkwCC7ZyS5iQInt/OAuYHAILtnAEq5lQEWubwWuagWuZwupUDAAEK8scbAAE6OntK/R0m53CIWueiAueDAILtnhU6+LgEWufyAufTAILtnh5u+LD4CQCIWuh2BuhTAILtzs7jAAEzKARa6MIG6J8Agu3OFUMAATMm6FLo4AEq6QQEWumgWulQWukgupUDAAEK8scbAAE6OntK/Rz4BSrqIARa6pxy6jy61SwEAAYC6nsAgu2cAwABCy4VVwABCjQbAAELRgLm7eruLu+8AALfPAWq7e2ADwAD/aAIAAAEDu6m77wAAAAEBAbuyAAAAt/RgA4JMAABgA8AA/FUBSrvFARy73Ra7xS634MAAQsWDHAEAAYC75sAgvbAAwAD/vwbAAELSgLm79LwOvEIAALfQAWq79WADwAD/aAIAAAEDvBu8QgAAAAEBAbwkAAAAg/NgA4JMAABgA786AUq8LQEcvDwWvC0ut+LAAEJ7wABCwksBAAGAvD3AIL4QAMAA/wUGwABC04C5vEe8YbyZAAC30QFqvEhgA8AA/2gCAAABA7xyvJkAAAABAQG8ewAAAIPzYAOCTAAAYAO/OgFKvIQBHLyTFryELrfiwABCe8AAQsJLAQABgLyUwCC+cQDAAP8FAAAgsFwAILNiACC2CgAgtvYAILeKACC6DQAgurEAILtHACC9hgAgveYAIL5HACC+qAAAAAsCwABC1oC5vJ68pMAARh4Dt/UAAAFgAcAA/2gAAWABwABCfAYEwABC2IC5vYW9sAaD7ABgA8ABAAIBar2LYAPAAQACwAD4WATAAELagLm92r3fCbf3wABCewBgA8AAQo4ABMAAQtuAub4Dvg0JhVUBar3kYAPAAP9oAmADvzoABMAAQtyAub4xvjUJgpQBar4SYAPAAP9oAmADvzoABMAAQt2Aub5QvlwJt8MBar46YAPAAP9oAmADwAD8VQAEwABC3oC5vne+gwm3wgFqvmFgA8AA/2gCYAPAAPxVAAEFwABC6YC5voi+iL8BAAAAA76rvwEAAAAFAwO+sQAABLf3YAPAAEKOAL69AAAEhVVgA786AL7OAAAEgpRgA786AAK+4AAABLfDYAPAAPxVAWoAYAPAAP8leb7zAAAEt8JgA8AA/FUBagBgA8AA/yV5YAPAAELWAT8GCAHAAELagADAIL/WCAHAAELbgQDAIL/kCAHAAELcggDAIL/wCAHAAELdgwDAIL/9CAHAAELehADAIMAUCQG+iMAA/34AAAAABwbAAELggLm/Br8OwABCPgQBsA8AAAABA79EwABCPgAAAAMDA79XAAAAg0pgA8AAXqUAv28AAACCV2ADg5AAv5IAAACxxmADv0UAAGADwABC1gE+CD0cv7SAv63AIMChgpgBAAFqv7pgA8ABAALAAPhYAMAAXqdOv+O/6AAAEmADwABCjgEcv/GAv+rAIMChscEBAWADwABCjgE0wABAAQPAAEABwABAgAAAAAAAAABgA8AAQo4BPgFKwABADAEewABAF8AAdQwDAAOAwABAVMAgwKGBwABAXMAgwK+CwABAZcAgwLsAAMAAXrFOwABAlcAAQKAAAIVVYAO/OgEcwABAvoLAAECqwCDAu7HHAQABgMAAQN7AIMChAL+2TsAAQPnAAED+AACClGADvzoBHMAAQRyCwABBCMAgwLuxxwEAAYDAAEE8wCDAoQC/tk7AAEFOwABBWwAAt8NgA8AA/FUBHMAAQWSAwABBXcAgwKGwLQAAAADAAF6zTsAAQXnAAEGGAAC3wmADwAD8VQEcwABBj4DAAEGIwCDAobAtAAAAAMAAXrM9HMAAQaaAwABBn8AgwKGCkAEAAWrAAEGqYAPAAQACwAD4WADAAF6oSsAAQbQBH8AAQb/AAELpBQADg8AAQePAIMD0hMAAQenAIMFphcAAQfXAIMGaArfDhsAAQhHAIMHLt8KHwABCLcAgwfcGwABC4oC5wABCQ8AAQlTAAERAAACwEAFqwABCRGADwAD/aAIAAAEDwABCY8AAREAAAAADAwPAAEJtAAAAhEBgA8AAXlYAwABCfQAAAIJXYAODkADAAEKgAAAAscZgA79FAABcAT4HPRzAAELAgMAAQrvAIMLEgpgBAAFqwABCxmADwAEAAsAA+FgAwABeWz0cwABC1YDAAELQwCDCxLf4AgFgA8AAQo4CFsAAQuYut/fAAEJ7wABC2jTAAELtA8AAQu3AAENaAAAAAQEBwABDDQAAABJgA8AAQo4AAGADwAD/JQE+AT0cwABDIIPAAEMbwCDDW7AQAwADgMAAQzDAIMLEgcAAQzbAIMLUgsAAQz/AIMLiAMAAQpUAwABeXj0cwABDdYLAAENhwCDC4rHOAgACgMAAQ5LAIMLEFsAAQ5guhVXAAELbAL+3PRzAAEO9gsAAQ6nAIMLisc4CAAKAwABD2sAgwsQWwABD4C6ClMAAQtwAv7c9HMAAQ/CAwABD68AgwsSwNAEAARbAAEP6LrfDwABC3QDAAF5gPRzAAEQSgMAARA3AIMLEsDQBAAEWwABEHC63wsAAQt4AwABeYD0cwABENIDAAEQvwCDCxIKQAQABasAARDhgA8ABAALAAPhYAMAAXlwGwABC44C5wABERcAARF/AAESSAAC3xAFqwABERmADwAD/aAIAAAEDwABEacAARJIAAAABAQHAAERyAAAAg/NgA4JMAABgA786AUrAAER7ATUAAAABAGADwABCjgEWwABEey6398AAQnvAAELaIxzAAESCgQDAIMTISAEAASsAACscwABEgoEAwCDEyLfEAQABJsAARI0BgMAARI3AIMStYAOCUwDAAEKXAWADvzoGwABC5IC5wABElsAARLDAAETnAAC3xQFqwABEl2ADwAD/aAIAAAEDwABEvMAAROcAAAABAQHAAETFAAAAg/NgA4JMAABgA786AUrAAETOATUAAAABAGADwABCjgEWwABEzi6398AAQnvAAELaIxzAAETVgQDAIMV2SAEAASsAACscwABE1YEAwCDFdrfFAQABJsAAROIBgMAAROLAIMVbYAOCUwDAAEKYAWADvzoGwABC5YC5wABE68AARQXAAEVAAAC3xgFqwABE7GADwAD/aAIAAAEDwABFE8AARUAAAAABAQHAAEUcAAAAg/NgA4JMAABgA786AUrAAEUlATUAAAABAGADwABCjgEWwABFJS6398AAQnvAAELaIxzAAEUsgQDAIMYkSAEAASsAACscwABFLIEAwCDGJLfGAQABJsAARTsBgMAARTvAIMYJYAOCUwDAAEKZAWADvzoGwABC5oC5wABFRMAARV7AAEWvAAC3xwFqwABFRWADwAD/aAIAAAEDwABFdMAARa8AAAABAQHAAEV9AAAAg/NgA4JMAABgA786AUrAAEWMATUAAAABAGADwABCjgEWwABFjC6398AAQnvAAELaIxzAAEWTgQDAIMbSSAEAASsAACscwABFk4EAwCDG0rfHAQABJsAARaoBgMAARarAIMa3YAOCUwDAAEKaAWADvzoGwABC54C5wABFs8AARc3AAEYcAAC3yAFqwABFtGADwAD/aAIAAAEDwABF4sAARhwAAAABAQHAAEXrAAAAg/NgA4JMAABgA786AUrAAEX6ATUAAAABAGADwABCjgEWwABF+i6398AAQnvAAELaIxzAAEYBgQDAIMeASAEAASsAACscwABGAYEAwCDHgLfIAQABJsAARhcBgMAARhfAIMdlYAOCUwDAAEKbAWADvzoAACDAfQAgwo4AIMR3ACDFJQAgxdMAIMaBACDHLwAgx90AAAAHAsAAQuqAucAARiHAAEYnwABLPAO3+QAAAWABwAD/aAABYAHAAEKhBATAAELsgLnAAEaSwABGnQmlQAFqwABGdGADwAD/aAJgA8AAToUABMAAQu6AucAARs7AAEbiCbf6wABCewBgA8AAQvsABMAAQu+AucAARvrAAEcRCbfdwABCewBgA786AATAAELwgLnAAEc0wABHXAmleAFqwABHFmADwAD/aAJgA8AARBEBH8AAR0fAAERdAAAAAAEFwABC+oC5wABHYcAAR2HAAEhnAAAAA8AAR4LAAEhnAAAAAQEBwABHiAAABKVAYAPAAE6FAABgA8AAQuoBPwQIAcAAQuyAAMAgyOMIAMAAQu4fwABHuMAAQwsBAAEWwABIDBbAAEf4gMAAR+zAIMjjscbAAE6OntK/RwAIAMAAQu8WwABIXBbAAEhIgMAASDzAIMjjscbAAE6OntK/RwkBwABHYcAA/34AAAAABwbAAELygLnAAEhswABIfcAASOQAALAQAWrAAEhtYAPAAP9oAgAAAQPAAEiMwABI5AAAAAICAsAASJYAAACEQGADwABeVgDAAEirAAAAtLNgA8AAc8QAAFwBPgE9HMAASMKAwABIvcAgyaGwNAEAASkAwABeYAbAAELzgLnAAEjpwABI+sAASS8AALfPAWrAAEjqYAPAAP9oAgAAAQPAAEkYwABJLwAAAAEBAcAASSEAAACD82ADgkwAAGADwAD8VQFKwABJKgEqBsAAQvSAucAASTTAAElOwABJxgAAt84BasAASTVgA8AA/2gCAAABA8AASWLAAEnGAAAAAgICwABJbAAAAKVSYAPAAEy4AMAASYQAAACtamADvzoAAGADvzoBPgFKwABJkAEWwABJtxbAAEmjFsAASZcupUDAAELsscbAAE6OntK/RwbAAEL1gLnAAEnLwABJ5cAASjAAALVNAWrAAEnMYAPAAP9oAgAAAQPAAEn2wABKMAAAAAEBAcAASf0AAACA7WADvl4AAGADvzoBPgFKwABKDgEWwABKFS633cAAQnvAAELvBsAAQvaAucAASjXAAEphwABKqgAAtUsBasAASjZgA8AA/2gCAAABA8AASm/AAEqqAAAAAQEBwABKfQAAAIJqYAO+JQAAYAPAAEJ8AT4BSsAASosBFsAASpIut/rAAEJ7wABC7gbAAEL3gLnAAEqvwABKycAASvQAALfRAWrAAEqwYAPAAP9oAgAAAQPAAErawABK9AAAAAEBAcAASucAAACD82ADglMAAGADvzoBSsAASvABKwbAAEL4gLnAAEr5wABLE8AASzoAALfQAWrAAEr6YAPAAP9oAgAAAQPAAEsgwABLOgAAAAEBAcAASy0AAACD82ADglMAAGADvzoBSsAASzYBKwAAIMlrACDJ4AAgyjMAIMq1ACDLFwAgy3sAIMvMACDMHQAAAAcCwABC+4C5wABLP8AAS0XAAE8DA7f7AAABYAHAAP9oAAFgAcAAQnwBBMAAQv2AucAAS7PAAEu+CZ7SAGADvzoAAQXAAEMLgLnAAEvDwABLw8AAS/sAAAADwABL6cAAS/sAAAABAQHAAEvvAAAEntJgA786AABgA8AAQvsBPwIIAcAAQv2AAMAgzKgJAcAAS8PAAP9+AAAAAAoGwABC/4C5wABMAMAATB7AAEwxAQCClAFqwABMAWADwAD/aAIAAAEDwABMI8AATDEAAAAAAAAAYAO/OgFKwABMJgEWwABMJi6e0sAAQv0GwABDAIC5wABMNsAATFTAAExtAQCFVQFqwABMN2ADwAD/aAIAAAEDwABMX8AATG0AAAAAAAAAYAO/OgFKwABMYgEWwABMYi6e0sAAQv0GwABDAYC5wABMcsAATIfAAEycAQC3wwFqwABMc2ADwAD/aAIAAAEDwABMlMAATJwAAAAAAAAAYAPAAPxVAUrAAEyXASoGwABDBIC5wABMocAATLvAAEzmAAC3yAFqwABMomADwAD/aAIAAAEDwABM0MAATOYAAAABAQHAAEzZAAAAg/NgA4JMAABgA786AUrAAEziASsGwABDBYC5wABM68AATQXAAE0xAAC3xwFqwABM7GADwAD/aAIAAAEDwABNG8AATTEAAAABAQHAAE0kAAAAg/NgA4JMAABgA786AUrAAE0tASsGwABDBoC5wABNNsAATVDAAE10AAC3xgFqwABNN2ADwAD/aAIAAAEDwABNXsAATXQAAAABAQHAAE1nAAAAg/NgA4JMAABgA786AUrAAE1wASsGwABDB4C5wABNecAATZPAAE21AAC3xQFqwABNemADwAD/aAIA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NxarFC64lMAARBDAAEREgxwBAAGAq0DAIS2kAMAA/78AACEnTAAhKF4AISkZACEqpwAhLGMAISzAACEtHQAhLXoAIS3gAAAACALAAERRgLyrUatXrekDuKsAAAFgAcAA/2gAAWABwABEEQEEwABEVIC8q5mrvAm4rMAARBAAYAPAAHnVAR+rr8AAeg8AAAAAAQXAAERdAAAAAAQAAAMAAAAAAAAAAABgA8AARFEBPwEJAQDAAP9+AAAAAAYGwABEVoC8q8Gr0qweAACwEAFqq8JgA8AA/2gCAAABA6vhrB4AAAABAQGr6wAAAIRAYAPAAF5WAABcAT4BPRyr/ICr98AhLqawNAEAASkAwABeYAbAAERXgLysI6w7rIsAALVkAWqsJGADwAD/aAIAAAEDrFKsiwAAAAEBAaxiAAAAlntgA746AABgA8AAedUBPgFKrHEBFqx4LriswABEEMAARFQGwABEWIC8rJCsoazYAAC4hgFqrJFgA8AA/2gCAAABA6y4rNgAAAABAQGsyAAAAJZ7YAO+OgAAYAPAAPxVAUqs1AEpBsAARFmAvKzdrO6tGgAAuIUBaqzeYAPAAP9oAgAAAQOs/K0aAAAAAQEBrQoAAACWe2ADviUAAGADwAD8VQFKrRYBKQbAAERagLytH60wrV8AALiEAWqtIGADwAD/aAIAAAEDrT6tXwAAAAEBAa1OAAAAlntgA746AABgA8AA/FUBSq1aASoGwABEW4C8rWStfK3nAAC4gwFqrWVgA8AA/2gCAAABA62UrecAAAACAgKtpQAAAKVSYAPAAEy4AK29AAAAhZdgA786AABgA8AAedUBPgFKrc0BFq3ULriswABEEMAARFQAACEufAAhLs8AIS8hACEvZAAhL6cAIS/qACEwSgAAAAYAAAABgLwAITBuACEXngAhGcgAIRuPACEllQAhLgkAITBrAAAABQAhMG4AAAAAAAIGwABEXritgL0AADWA/gAAgi6CCACBJwAAtz4AAIFKAACksQAAgWMAALdSAACBhAAApHYAAIGjAAC5fgAAgcEAALmGAAEBArIcpPOCCwAApLQAAIImAAC8hQABAAGk8oJUAAC9owAAgnAAAL3+AACClAAAvnoAAIKuAADAAHoqAAEBAbiugwYAAMAAQzAAAIMuAAC/HwAAg18AAMAAc4cAAIOOAADAAEJ7AACDrwAAwAB6eAAAg9YAAMAAQ84AAIP7AADAAHqqAACEJwAAwAB7ZgAAhFUAAMAAe4kAAISLAADAAF3pAACEsQAAwAB7vwAAhOEAAMAARBAAAIUMAADAAHvmAACFOgAAwABlkAAAhV0AAMAAd/IAAIWIAADAAHkUAACFuwAAwAB5VQABAQK4r7iwhhQAAMAAXhoAAQEBuLGGVwAAwAB8UQABAQG4soaUAADAAGVbgoUAhrIAAMAARMsAAIbbAADAAGhqAACG/QAAwAB8UgAAhx4AAID7AACHOAAAwABeUAAAh2YAAMAAfJMAAIeLAADAAEV4AACHpwAAwABhxwAAh8EAAMAAfmUAAIfdAADAAHeVAACH9gAAwABM8QAAiCcAAMAATKYAAIhLAADAAE4EAACIcwAAwABOgQAAiIsAAMAAfm8AAIiiAADAAHO+AACIvQAAwAB/ogAAiN0AAMAAgO0AAIj1AADAAIFIAACJFQAAwABs1AAAAAAABQLAAERfgL2JLIkyvOsDuLMAAAFgAcAA/2gAAWABtz8MBMAARGKAvYlyiXsJpabAAEReAGADpLcABMAARGOAvYmUiZ8YuLTAAEReAGADwAB/owErBMAARGSAvYopikcYuLXAAEReAGADwAB7nwErBMAARGWAvYpiingYuLbAAEReAGADwAB8hAErBMAARGaAvYqDiokYuLfAAEReAGADwABlkwErBMAARGeAvYqnisAYuLjAAEReAGADwAB70gErBMAARGiAvYrViuEYuLnAAEReAGADwABeGwErBMAARGmAvYsAixEYuLrAAEReAGADwAB4CQErBMAARGqAvYsnizgYsGPAAEReAGADwABDzwErBMAARGuAvYtXi3AYsAMAYAPAAENOASsEwABEbIC9i9eMDAm4uwBdA8AA/vECYAO+JWADwACXEAEyjApgA74lYAPAAJcQAATAAERtgL2QTJBkGLi8AF0DwAD+8QJgA74lYAPAAE4HASsBBcAARImAvYwRjBGOQgAAAAOMIo5CAAAAAQEBjCgAAASlpmADpLcAAGADwABEXwE+BE6MPoxQAACC/2ADwAD8VQEWjGQWjFwWjFIupabAAERewABEYnqkw4L/gT1JjHshgYyAwCE0aj4BPReMmy6wA2qMvWADwAB6ecAA+HrAAERrPgE9F4z3LrADH40XwAB6NAEAAS4AwABEaz0XjUguuLnAAEReH41bwABeMgIAAhaNay6lpsAARF7AAERigY12wCE0agDAAERoPReNji6wY8AARF4fjabAAGHgBQAFFo3NFo3DLqWmwABEXsAARGJ6pMMWjegWjd4upabAAERewABEYqUupOAuFo4SFo4ILqWmwABEXsAARGKWxaTdFo4kLrADwABEawDAAERqAggBwABEYoAAwCE0UwkBjBHAAP9+AAAAABcGwABEb4C9jkeOao7cAQCWyQFqjkhgA8AA/2gCAAABA45wjtwAAAAAAAAAXQPAAP6/AWADpHcBPgNOjomOkAAAgXZdA8AA/r8BYAOkdwEmjokBFo6jFo6SLqVQwABEcJbJwABD1F0DwAD+vwFgA6R3PRyOtYCOrsAhNbhWAQABFo65Lq//wABEcQDAAP7QSo7LAYCO0sAhNbgGwABEcIC9juGPAo8nAQClUAFqjuJgA8AA/2gCAAABA48TjycAAAAAAAAAYAPAAEPPAUqPFgEWjxYusGPAAERewABEagbAAERxgL2PLI9Mj2cBAK//AWqPLWADwAD/aAIAAAEDj1iPZwAAAAAAAABgA8AAXhsBSo9bARaPWy64ucAARF7AAERoBsAARHKAvY9sj3aPjwEAuL0AAAABA4+Gj48AAAAAAAAAYAPAAGWTAUqPiQEWj4kuuLfAAERewABEZgbAAERzgL2PlI+nj9YBALi+AAAAAQOPvY/WAAAAAAAAAGADwAB8UwFKj8ABFo/ALri2wABEXsAARGUGwABEdIC9j9uP+ZAoAQC4vwAAAAEDkBSQKAAAAAAAAABgA8AAeAkBSpAXARaQFy64usAARF7AAERpBsAARHmAvZBpkHCRGgAAuMAAAAABA5CKkRoAAAABAQGQmAAAAJZ7YAO+JQAAYAPAAQACAT4BSpCnAR6QrsAAZV0CAAEckMoWkL0uuLvAAERsSwEAAYCQy8AhN20AwAD/BQGC+xaRAxaQ+xaQ8S6lpsAARF7AAERieqTDgvuBOAbAAER1gL2RH5FAkcoBALSzAWqRIGADwAD8CIZqAAABA5FLkcoAAAAAAAAAYAPAAHPEAT4CQCEckWQWkVguuLTAAERewABEY0gBAAErAMAA/3WRWJFrASe4wUqRtAEWkbsuuLTAAERewABEYwbAAER2gL2SNpJYk1IBALjCAAAAAQOSdpNSAAAAAAAAAGADwAB7nwE+AkAhHJKrFpKMLri1wABEXsAARGRIAQABKwDAAP91koySsgEekry2/QIAAmqSxWADtw/AAMdCJ7jDAEqTKQEWkzAuuLXAAERewABEZAbAAER3gL2TV5N1lOoBALjEAAAAAQOThpTqAAAAAAAAAGADwAB4CQE+A0AhHJOuFpOcLri6wABEXsAARGlIAQABKwDAAP91k5yTtQEek7+2/QIAAmqTyGADtw/AAMdCJ7jFAEAhFpRLFpQ5Lri6wABEXsAARGm4xsAAeA+UOJRhAR6Ua7b9AgACapR0YAO3D8AAx0InuMcASpTOARaU1S64usAARF7AAERpBsAARHqAvZTvlQiZHQAApYUBapTwYAPAAP9oAgAAAQOVGpkdAAAAAgIClS8AAAClQGADwABOyACVSwAAALAAYAO9MgAAYAPAAE6FAT4ITpV4lYEAAKV8YAPAAETOASaVeAEWlY0WlYMupabAAERewABEYqUPpLlgA8AARM49F5WjLri0wABEXh+VtcAAgEoFAAUWld0WldMupabAAERewABEYqUupOAWlfkWle8upabAAERewABEYoCJpMcmlhcBFpYXgpYOwCE5prSzwABE62ADwACFoxaWN4CWK8AhOYG4yMAATtcWllyAllDAITmBpW7AAE7aAMAARGNOloKWkwAAuMlgA8AAbNcBH5aZwABs4wAAAABOlsOW1gAAuMpgA8AAfoYBH5bcwAB+lgMAAxaW+C64tMAARF7AAERjg5cFwCE6UxaXI4CXF8AhOYGlbsAATtoATpdOl2EAALjLYAPAAIFOAR+XZ8AAgWcFAAUWl4UuuLTAAERewABEY4OXmsAhOlOEl7TAITpuFpfaFpfQLqWmwABEXsAARGJ6pMMWl/UWl+supabAAERewABEYqUbpMsATpgemCsAAKWEYAPAAE6FARyYQIWYLcAhOq64zAMAA4CYXMAhOYEWmHKCmGnAITmmuM3AAETfgZiBwCE5jwDAAIFdPReYohaYli64tMAARF7AAERjuM4fmMq9MQEAARaY8YaY5MAhOw6wAMAATpcAwAB/0EqZBgGGmQ3AITsOBsAARHuAvZkimTOZmwAApUkBapkjYAPAAP9oAgAAAQOZR5mbAAAAAQEBmWAAAAilQGADwACA7gAAXAE+AT0XmXMuuLTAAEReFpmNgJmBwCE7tbSzwACBA8AARGMGwABEfIC9maCZuqAxAAClSwFqmaFgA8AA/2gCAAABA5nIoDEAAAABAQGZ6wAAAKU+YAPAAEKhAABgA8AAQ/oBPgtOmhqaJgAApUBgA8AAToUBFppDgJoowCE8EaVAwABCrU6aZJpsAAC4f2ADwAB4kQFqmnRgA8AAeJHAAPiBTpqWmqEAALiAYAPAAGaqASMWmrUWmq0WmqMupabAAERewABEYnqkw4L7gThqmthgA8AAZrzAAPiIapr9YAPAAGaqwAD4jwFgA8AAZqpOmxebHgAAuH5gA8AAd5sBH5skwAB3qAIAAoGbK8AhPCoWm0IWmzgupabAAERewABEYoFypN8ATptrm3YAALh8YAPAAHg7AR+bfMAAeJAFAAWCm53AITxKFpu6gZuuwCE8KrjPwABOiRab2oGbzsAhPCqlWcAATosWnAKBm/bAITwqtFnAAE6NFpwmgZwawCE8KrjQwABOjwBOnE8AAAC4e2ADwAB5TQBJnGUWnHsWnHMWnGkupabAAERewABEYnqkw4KtgTQ+Aj2OnJvAIT1NH5yywAB4OgEAAYGc08AhPCoAPRec5y64usAARF4fnQnAAHgiAgACgZ0qwCE8KiadNwGGnTfAIT1NYAPAAHg0AMAARGk+A06dbp1/AAC40WADwAB4ZQEfnYXAAHh6AQABgZ2WwCE8KgA9F52qLri6wABEXoedvsAhPcrAAERpPY6d1sAhPU2HnenAIT3KTp4UniUAALh9YAPAAHlcASMWnjkWnjEWnicupabAAERewABEYnqkw4K4gVYfnljAAHl3BgAGgZ53wCE8KoaekMAhPU0WnrqBnq7AITwquM/AAE6JFp7egZ7SwCE8KqVZwABOixafCoGe/sAhPCq0WcAATo0WnzKBnybAITwquNDAAE6PACsBYAPAAHlmTp9en2YAALABYAPAAEP6AR+fbMAARA8GAAaGn37AIT1NhZ+QwCE864efpMAhPhGEn7bAITy0gp++wCE8SoOfx8AhPGcAPRyf6haf2S6lUMAARHC4XQIAAoCf9cAhPBEUoBHAIT6eCAAAwABD0UqgHwEUoCbAIT6eCAAGwABEfYC9oDagUqftAAClcgFqoDdgA8AA/2gCAAABA6Bnp+0AAAAFBQWgfAAAAJblYAOkdwCglQAAAKVAYAPAAE6FAKDDAAAApXBgA8AAQqEAoO8AAACwAWADwABD+gChDQAAAKVNYAO3sAAAYAPAAF3qAT4IQCEcoTYWoSouuLTAAERewABEY0gBAAErAMAA/3WhKqE9ASe4wU6hnaG0AAC40mADwAB8MAEfobrAAHw/AwADFqHmgaHawCE/TbjTwABOihaiC4Gh/8AhP020WcAATo0Woi+BoiPAIT9NuM/AAE6JAD0cokAuuNTAAEReAwADgqJhwCE/W4OiecAhP2mFooLAIT+zAMAARH9OorKixQAApVlgA7xGARai04Gix8AhP02lWcAATotOovqjCQAAtFlgA7mHARajF4GjC8AhP020WcAATo1OozqjQgAAtUBgA8AAeskBH6NQwAB7ZQIAAoejX8AhQEQWo4EWo3kWo28upabAAERewABEYnqkw4K4gVYAPRejmC64tcAARF4fo73AAHupAwADh6PkwCFARIaj9MAhQCYWpBSBpAjAIT9NuM/AAE6JAMAARGRKpCUBH6QwwABeGQUABYCkScAhP0EfpFvAAE1HAwADgaSAwCE/TRykuRakoxakmS6lpsAARF7AAERipRuky7Y8AAAAAL83haTfwCE/swAfpQTAAESVBQAFLoGlQMAhP02EpVnAIT93H6V5wACAywEAARaljC64tMAARF7AAERjAB+mYsAAYNoBAAEWpokWpn4WpnIuuLTAAERewABEY7jVwAB/wbjWwACmGQAAH6amwAB7iAgACBam1Ramyy6lpsAARF7AAERieqTDhqbqwCFAJoenCsAhQEQUpybAIUBiCAAWp0eBpzvAIT9NtKbAAE6IFqdtgadhwCE/TbjQwABOjxangi64wsAARHYmp60BFqetLri+wABEc2ADwAB8hAAWp9mBp83AIT9NpW7AAE6UAAbAAER/gL2oOKg9rnoAALjUwABEXgAAAAEDqFSuegAAAAMDA6h3AAAApT5gA8AAQqEAqKcAAACwAWADwABD+gCozQAAALjSYAPAAHwwAABcAT4ITqj4qQQAAKVAYAPAAE6FARapIYCpBsAhQiulQMAAQq1OqUKpSgAAuH9gA8AAeJEBFqlUgalMwCFCObh/wABEAU6pbKl3AAC4gGADwABmqgEWqYGBqXnAIUI5uIDAAEQCPRepkS64t8AARF4jFqmsFqmkFqmaLqWmwABEXsAARGJ6pMOC+4E4Ixap2xap0xapyS6lpsAARF7AAERieqTDgwaBTR+p/8AAZ34DAAODqhPAIUJbhKogwCFCe4WqKcAhQpsAH6pHwABnugMAA4OqU8AhQluEqmDAIUJ7happwCFCmwABYAPAAGWTH6qDwABmMgMAA4OqicAhQluEqpbAIUJ7haqfwCFCmwABYAPAAGWTwABEZj0XqrAuuLbAAEReH6rNwAB8kgcABxaq9haq7C6lpsAARF7AAERieqTDFqsTg6sHwCFCW6VZwABOixarO4OrL8AhQlu0WcAATo0Wq1+Dq1PAIUJbuNfAAE6MFqtyLq//wABEcRark4Orh8AhQlu42MAATpEWq7qDq67AIUJbuM/AAE6JAMAARGU9HKvXFqvLLq//wABEcbjZAwADFqvlLri3wABEXsAARGaBq+3AIUI5g6v2wCFCWwDAAF4vTqx0rHwAALVAYAPAAHrJAR+sgsAAe2UCAAIWrKaDrJrAIUJbtFnAAE6NFqzIFqzAFqy2LqWmwABEXsAARGJ6pMOCuIFWAD0XrOAuuLjAAEReH60AwAB75QwADIOtIsAhQlsWrUODrTfAIUJbpVnAAE6LFq1rg61fwCFCW7RZwABOjYatg8AhRCwWraCDrZTAIUJbuM/AAE6JFq3Ag620wCFCW7SmwABOiBat4oOt1sAhQlu40MAATo8mrfMBFq3zLri+wABEc2ADwAB8hBauEi64t8AARF7AAERmgq4iwCFCRxauQi64xMAARHcWrmgWrlwur//AAERxuNrAAF4pAMAARGcGwABEgIC9rn+ui7SiAAC42wAAAAEDrpe0ogAAAAUFBa6oAAAApYdgA7l/AK7BAAAApUBgA8AAToUAruMAAAClTWADt7AArwYAAAC43GADwABe9QCvKgAAALjdYAPAAGDSAABgA8AATgcBPglOr06vVQAAgmpgA74lARavXICvV8AhRU+We7mBTq93r34AAIF2YAO3zAEcr4+Cr4DAIUVpsGEBAAGFr6HAIUWcALe1Sa+uFq/EFq+8Fq+yLqWmwABEXsAARGJ6pMOCzIFCPgxOr9uv6AAAuN5gA8AA/FUBKU6wA7AIAAASXQPAAP6/AWADwAD/aAExsApgA8AA/2gATrAdsCIAAIRAYAPAAF5WAR+wKMAAYbMCAAEUsDPAIUYQCAABuN6HsEfAIUX/PRywYRSwXMAhRjAJALjfAQABH7B7uSUBAAGBsI3AIUVbAADAAF6hPRywqYawosAhRbiwEAEAARSwucAhRjAJAAC31k6w0bDYAACDSmADwABepQEfsN7AAGHGAgABFLDrwCFGEAgAAbjeh7D/wCFF/06xJrEzAACwaV0DwAD+vwFgA7f5ATGxNWADt/kATrFXsWkAALEaXQPAAP6/AWADuCUBMbFrYAO4JQA9HLF8FLF1wCFGoAoAuOABAAEfsaG5HAMAA4Gxs8AhRVsUscDAIUbNCwAUsc7AIUbqDAAAAMAAXq09HLHwFLHpwCFGoAoAuOEBAAGDsgXAIUV1AMAAXqo9HLIhFLIawCFGoAoAuOIBAAGEsjnAIUWDAMAAXqk9jrJRwCFFuB6yaLfUAwADFLKGwCFGoAoAFLKOwCFGzQsAFLKcwCFG6gwAAD9JsrohHLLKFrLFhrK+wCFFuIKXt89IAQABKwDAAP91PgE9HLLoFrLbLri7wABEbIC/AgAChbLpwCFFnBay+oay88AhRbiCl7fPAMAA/wY/SbMKGrMOpLM+Aj0jHLNFFrMsLri8wABEbUgBAAErAMAA/3UXsywuuLwys2RgA74lYAPAAE4HAMAARG0rAV0DwAD+8QJgA74lYAPAAE4HPRyzhhazbi64vMAARG2AvwIAAoWzh8AhRZwWs5iGs5HAIUW4sGi30ADAAP8GP06ztrPCAAC0aWADwABOBwEcs+YWs8wuuLjAAERewABEZ7jjAQABFrQEhrP9wCFFuLBot9AAwAB74z0ctCgWtBsWtBEupabAAERewABEYqUepM+1eQIAAoW0N8AhRZyHtD/AIUh0AL3kPRy0WIa0UcAhRbiwbQIAAha0ai64t8AARF7AAERmFrR+FrRyLq//wABEcbBvwABeKgC310q0jAGHtJPAIUh0BsAARIGAvbSntLi1KAAApXoBarSoYAPAAP9oAgAAAQO0xLUoAAAAAQEBtNMAAACwAWADwABD+gAAXAE+Aj0ctPwWtOIusAPAAERruBMAAAAAwABDUj0ctR0WtRaAtQ7AIUlEuH7AAEQAgowAAAAAwAB3pgbAAESCgL21LbU9tp0AAKV3AWq1LmADwAD/aAIAAAEDtUy2nQAAAAQEBLVaAAAApUBgA8AAToUAtXQAAACleGADwABEEQC1lgAAAKVKYAPAAEP6ALWyAAAApXRgA8AATPgAAGADwAD+GwE+A061yrXWAACldmADwAD+GwEcteQWtdgur//AAERxpXcFAAUWtf0uuLfAAERewABEZoC2BcAhSbeBthLAIUnFgrYgwCFJ04O2L8AhSeEAwABeMD0ctl8Wtk6AtkLAIUm3t9fAAE6QuOQBAAEWtngWtm4upabAAERewABEYqUupOAAwABxukq2hwGEto7AIUn6BsAARIOAvbaitrm4FQAAsAIBarajYAPAAP9oAgAAAQO2ybgVAAAAAgICtt4AAACW5WADpHcAtv4AAACwA2ADwABDTgAAYAPAAGHhAT4BSrcfAR+3KsAARLEGAAaAt0TAIUqyFrdcFrdSLqWmwABEXsAARGJ6pMMWt3cWt20upabAAERewABEYqUupOAWt5MWt4kupabAAERewABEYqUepM8Wt+MutLPAAER1gbf3wCFKvgAGwABEhIC9uBq4Mbi0AAClsQFquBtgA8AA/2gCAAABA7hCuLQAAAACAgK4TQAAAKWvYAO3DwC4XwAAAKUzYAO9/wAAYAO2/wE+AUq4dQEcuIgWuHwuuLTAAERewABEY7jlAgACgLiWwCFLZYG4ocAhS3EAwAB/1AbAAESFgL24ubjTuYQAALAEAWq4umADwAD/aAIAAAEDuOa5hAAAAAICArj7AAAApUBgA8AAToUAuRwAAAClbWADwABEGwAAYAPAAEKcAT4BSrk3AR+5QsAAc6QDAAMWuVQupabAAERewABEYoC5X8AhS9yBuWzAIUvqAAbAAESGgL25ibmauroAALAGAWq5imADwAD/aAIAAAEDua66ugAAAAEBAbm6AAAAg0pgA8AAXqUAAFwBPgM9HLnPgLnIwCFMV7jmAQABH7nowACA4QEAARa5+y64tMAARF7AAERjAADAAF6rPRy6FYC6DsAhTFe44QEAAR+6LsAAgMsBAAEWukEuuLTAAERewABEYwAAwABeqj0culuAulTAIUxXuOIBAAEfuoDAAGDaAQABFrqnFrqcFrqQLri0wABEXsAARGO41cAAf8G41sAAphkAAMAAXqkGwABEh4C9ur+62LzpAACwBQFqusBgA8AA/2gCAAABA7rsvOkAAAABAQG7EAAAAIGmYQMBYAO+JVwAAGADwABfBwE+BE67HbszAAC452ADwAD+GwEcu0EWuzUuuLTAAERewABEY7joAAAAAMAAf9JOu3q7hwAAuOlgA8AAgOIBH7uVwACA7AIAAha7qC64tMAARF7AAERjgbu1wCFNSwBFu9EBu9q75gAAuOpgA8AA/hsBkwEcu/+Du/PAIU2pYwEAARa8FRa8DRa8AS64tMAARF7AAERjhJTAAH/EYcAAkI8AwAD/SQGLvCXAIU2pHLwwg7wlwCFNqWQBAAGUAMAA/0FBPgNOvEm8UAAAgmpgA74lARy8Zha8Xha8Ui64tMAARF7AAERjhJTAAH/EuOsBAAGDvHDAIU2pAMAAkItJvIQiHLyPhLyIwCFODEgBAAErAMAA/3UBFryhhLyawCFODIQfvjJCvK0APz0cvL6AvL3AIU0wIAEAAYS8v8AhTgwAAEq80gGCvNnAIU12AAAhNX4AITYXACE2WwAhNp8AITbZACE3EwAhN00AITfMACE4OAAhOK0AITlXACE7iwAhO+cAIT8XACFCBwAhRS8AIUkaACFJjQAhSogAIUs7ACFLsgAhTC0AIU0GACFOkwAAABcCwABEioC9vO689L93A7jsAAABYAHAAP9oAAFgAb78BQTAAESNgL29SL1YCbjtwABEXgBgA8AARF8ABMAARI6Avb1vvXsJtsXAAEReAGADwABOhQAEwABEj4C9vZS9owm47sAARF4AYAO3sAAEwABEkIC9vbq9xwm478AARF4AYAPAAF71AATAAESRgL294b3xCbjwwABEXgBgA8AAYNIAAQXAAESVgL299r32voMAAAADvhK+gwAAAAUFBb4YAAAEuO1gA8AARF8Avi8AAAS2xWADwABOhQC+SAAABLjuYAO3sAC+XgAABLjvYAPAAF71AL5yAAAEuPBgA8AAYNIAAGADwABEigE/BggBwABEjYAAwCFPtAgBwABEjoEAwCFPwggBwABEj4IAwCFP0AgBwABEkIMAwCFP3AgBwABEkYQAwCFP6gkBvfbAAP9+AAAAAAEGwABEk4C9voi+nb91AAC2IAFqvolgA8AA/2gCAAABA76rv3UAAAABAQG+uQAACKSGYAO+JQAAYAO5fwE+Akm+xxa+0oC+y8AhUHWEH74ySr7eASs/Sr7vAR+++sAARKIGAAYWvxAuuO3AAERewABEjRa/Ii62xcAARF7AAESOFr84LrjuwABEXsAARI8Wv0kuuO/AAERewABEkBa/WC648MAARF7AAESRgL9qwCFQdQAAACFQSwAhUPwAAAABAsAARJaAvb96v4DAAEHwA7jxAAABYAG5fwAABgTAAESZgL2/w7/TCbjtwABEXgBgA8AARF8ABMAARJqAvb/qv/YJtsXAAEReAGADwABOhQAEwABEm4C9wABAD8AAQB4JuO7AAEReAGADt7AABMAARJyAvcAAQDXAAEBCCbjvwABEXgBgA8AAXvUABMAARJ2AvcAAQFzAAEBsCbjwwABEXgBgA8AAYNIABMAARJ6AvcAAQI/AAECWCZZ7AWrAAEBxYAPAAP9oAmADviUAAQXAAESigL3AAECbwABAm8AAQU4AAAADwABAsMAAQU4AAAAGBgbAAEC9AAAEuO1gA8AARF8AwABA2gAABLbFYAPAAE6FAMAAQPMAAAS47mADt7AAwABBDwAABLjvYAPAAF71AMAAQSkAAAS48GADwABg0gDAAEFGAAAElntgA74lAABgA8AARJYBPwcIAcAARJmAAMAhUfsIAcAARJqBAMAhUgsIAcAARJuCAMAhUhsIAcAARJyDAMAhUikIAcAARJ2EAMAhUjkIAcAARJ6FAMAhUkkJAcAAQJu5hQAAAAABBsAARKCAvcAAQVPAAEFrwABB7gAAgp8BasAAQVRgA8AA/2gCAAABA8AAQW7AAEHuAAAAAAAAAGADwABOBwE+AUrAAEF3ARzAAEGPFsAAQX4uuO3AAERewABEmbjbBQAFLhbAAEGrLrbFwABEXsAARJoWwABBuS647sAARF7AAESbFsAAQcouuO/AAERewABEnBbAAEHZLrjwwABEXsAARJ0AwABEgAAAIVK2ACFTXAAAAAECwABEo4C9wABCL8AAQjXAAEggA7jyAAABYAHAAP9oAAFgAcAAYeEIBMAARKaAvcAAQnPAAEJ4CbjzwABEXgBgA6R3AATAAESngL3AAEKSwABCmgmzBMAARF4AYAOBFAAEwABEqIC9wABCt8AAQsAJpRHAAEReAGADtt0ABMAARKmAvcAAQtfAAELkCbj0wABEXgBgA73PAATAAESqgL3AAEL9wABDCAm4tMAARF4AYAPAAHPEAATAAESrgL3AAEMswABDRgm49cAARF4AYAPAAENOAATAAESsgL3AAENfwABDaxi49sAARF4AYAPAAEPXASsEwABErYC9wABDf8AAQ48YuPfAAEReAGADwAB+HwErAQXAAESxgL3AAEOUwABDlMAARBwAAAADwABDpMAARBwAAAAGBgbAAEOqAAAEuPNgA6R3AMAAQ7YAAASzBGADgRQAwABDxQAABKURYAO23QDAAEPbAAAEuPRgA73PAMAAQ+8AAAS4tGADwABzxADAAEQBAAAEuPVgA8AAQ04AAGADwABEowE/BwgBwABEpoAAwCFUoQgBwABEp4EAwCFUrwgBwABEqIIAwCFUvQgBwABEqYMAwCFUywgBwABEqoQAwCFU2QgBwABEq4UAwCFU6QkBwABDlMAA/34AAAAAAQbAAESvgL3AAEQhwABENMAASB4AAKL5AWrAAEQiYAPAAP9oAgAAAQPAAEQ5wABIHgAAAAcHB8AARE4AAACCamADviUAwABEaQAAAKVAYAPAAE6FAMAARJcAAAC31mADwABCoQDAAES0AAAAsAFgA8AAQ/oAwABE0wAAALj4YAO3kQDAAETwAAAAsG5gA8AAZskAwABFDAAAALBvYAPAAF4zAABgA8AAResBPgM9IxzAAEUoFsAARRsuuPbAAERewABErEgBAAErAMAA/3UXwABFGy649sAARF4fwABFMMAAQ+4BAAEWwABFUIHAAEVEwCFVnqVuwABOlADAAESsKwFgA8AAQ9c9IxzAAEV3FsAARWYuuPfAAERewABErUgBAAErAMAA/3UXwABFZi6498AARF4fwABFf8AAfigCAAACgv4WwABFtxbAAEWuLrMEwABEXsAARKeC/oE8uPkWwABF8RbAAEXoLrMEwABEXsAARKeCv4FFwABErSsBYAPAAH4fSsAARgoBHMAARhcWwABGES6488AARF7AAESmlwMBAWADwABF6wE0wABGHwPAAEYfwABIGQAAAAAAAABgA8AAResBPgJOwABGQMAARkgAAIQmYAPAAHygAR/AAEZOwAB9rhAAEBbAAEZvLrMEwABEXsAARKcWwABGgy6lEcAARF7AAESogMAARpjAIVWQHMAARrYWwABGqi64tMAARF7AAESquPoBAAGAwABGyMAhVZAAwABz4xbAAEbbLrj0wABEXsAARKkWwABG9C64tMAARF7AAESqgsAARwvAIVWugcAARx7AIVWehMAARzXAIVXOhcAAR0nAIVXchsAAR1rAIVXsFsAAR3WDwABHbcAhVb64fsAARAAWwABHj4PAAEeHwCFVvrh8wABD/hbAAEelLrj1wABEXsAARKsWwABHyy649sAARF7AAESsFsAAR+MuuPfAAERewABErQBKwABH/AEcwABIC4fAAEgDwCFXIaL5AAAAAMAAfWgApIkAACFVWgAhWFgAAAABAsAARLKAvcAASCPAAEgpwABUWQO4+wAAAWABwAD/aAABYAHAAHPtAgTAAES1gL3AAEiPwABIpgm1OMAARF4AYAPAAEKhAATAAES2gL3AAEjKwABI2Bi4/MAARF4AYAPAAEJ8ASsBBcAARMqAvcAASN3AAEjdwABJYAAAAAPAAEj5wABJYAAAAAICAsAASQ4AAACCSWADviUAwABJGwAABLU4YAPAAEKhAABgA8AARLIBPgE9F8AASTouuPzAAEReHMAASUsuuP3AAEReAQABgMAASVXAIVjwAMAARLnAAES2AggBwABEtYEAwCFY/gkBwABI3cAA/34AAAAAEAbAAES5gL3AAEllwABJhcAASgkAALj9wABEXgAAAAEDwABJjsAASgkAAAABAQHAAEmcAAAAg1NgA74lAABgA8AAQnwBSsAASagBHMAAScsWwABJqC61OMAARF7AAES1tUsBAAEjJcAASdyAwABJ2sAhWZBgA75ZFsAASfkUwABJ98AhWZAAAWADvlmZNL5bgMAASgfAIVmQAWADviUAwABCpgbAAES6gL3AAEoOwABKKMAASr8AALj+AWrAAEoPYAPAAP9oAgAAAQPAAEo3wABKvwAAAAEBAcAASkcAAACCbmADvjoAAGADvzoBPgFKwABKVwEewABKc8AAfmgCAAKAwABKmcAhWjoWwABKoy61OMAARF7AAES1AAbAAES7gL3AAErEwABK3sAAS3EAALj/AWrAAErFYAPAAP9oAgAAAQPAAEr2wABLcQAAAAICAsAASxIAAACD82ADhdYAwABLLAAAALHGYAO/RQAAYAO/OgE+AUrAAEtHARzAAEtdFsAAS04uuPzAAERewABEtrfEAQABgMAAS2jAIVqyAMAAQoQGwABEvIC9wABLdsAAS5DAAEvnAAC5AAFqwABLd2ADwAD/aAIAAAEDwABLocAAS+cAAAABAQHAAEuxAAAAg/NgA4UXAABgA786AT4BSsAAS70BHMAAS9MWwABLxC64/MAARF7AAES2t8QBAAGAwABL3sAhWzoAwABChAbAAES9gL3AAEvswABMBsAATGkAALkBAWrAAEvtYAPAAP9oAgAAAQPAAEwdwABMaQAAAAEBAcAATDMAAACD82ADhTwAAGADvzoBPgFKwABMPwEcwABMVRbAAExGLrj8wABEXsAARLa3xAEAAYDAAExgwCFbtADAAEKEBsAARL6AvcAATG7AAEyIwABNDwAAuQIBasAATG9gA8AA/2gCAAABA8AATJnAAE0PAAAAAgICwABMsAAAAIPzYAOFKQDAAEzKAAAAscZgA79FAABgA786AT4BSsAATOUBHMAATPsWwABM7C64/MAARF7AAES2t8QBAAGAwABNBsAhXC4AwABChAbAAES/gL3AAE0UwABNLsAATf4AALfRAWrAAE0VYAPAAP9oAgAAAQPAAE0/wABN/gAAAAICAsAATVYAAAC5A2ADhxsAwABNdwAAALHGYAO/RQAAYAO/OgE+AUrAAE2SATUAAAABAGADvzoBHMAATbEWwABNmS61OMAARF7AAES1t9EBAAGAwABNw8AhXLYAwABCqyMcwABN0IIAwCFc4UgBAAErAAAWwABN74HAAE3bwCFcxJ7Sv0eCAMAhXOEBYAO/OgbAAETAgL3AAE4DwABOHcAATngAALfGAWrAAE4EYAPAAP9oAgAAAQPAAE4rwABOeAAAAAEBAcAATj4AAACD82ADiBQAAGADvzoBPgFKwABOSgEcwABOYBbAAE5RLrj8wABEXsAARLa3xgEAAYDAAE5vwCFdeQDAAEKGBsAARMGAvcAATn3AAE6XwABPAAAAt8gBasAATn5gA8AA/2gCAAABA8AATqzAAE8AAAAAAQEBwABOvwAAAIPzYAOIFAAAYAO/OgE+AUrAAE7LARzAAE7hFsAATtIuuPzAAERewABEtrfIAQABgMAATvfAIV3zAMAAQogGwABEwoC9wABPBcAATx/AAE+KAAC3xwFqwABPBmADwAD/aAIAAAEDwABPNcAAT4oAAAABAQHAAE9IAAAAg/NgA4gUAABgA786AT4BSsAAT1QBHMAAT2oWwABPWy64/MAARF7AAES2t8cBAAGAwABPgcAhXm0AwABChwbAAETDgL3AAE+PwABPoMAAUIEAALkEAWrAAE+QYAPAAP9oAgAAAQPAAE+1wABQgQAAAAICAsAAT88AAACD82ADiBQAwABP6QAAALHGYAO/RQAAYAPAAPxVAT4CTsAAUBLAAFAXAACtamADvzoBHMAAUBkut8YBAAGAwABQKMAhXucAwABEwErAAFAzARbAAFBtHMAAUE6BwABQOsAhXvW2ogEAAYLAAFBnwCFfDgC/s7VPvygGwABExIC9wABQhsAAUKDAAFFbAAC5BQFqwABQh2ADwAD/aAIAAAEDwABQscAAUVsAAAABAQHAAFDEAAAAg/NgA4gUAABgA786AT4BSsAAUNABHsAAUOzAAH5rAwADHsAAURfAAEzmAAAAABzAAFEpLrfGAQABgMAAUTjAIV+cAMAARMAWwABRPy61OMAARF7AAES1AAbAAETFgL3AAFFgwABResAAUgYAALkGAWrAAFFhYAPAAP9oAgAAAQPAAFGLwABSBgAAAAEBAcAAUZkAAACCamADviUAAGADvzoBPgFKwABRpwEewABRw8AAfmkCAAKAwABR4sAhYDEWwABR6i61OMAARF7AAES1AAbAAETGgL3AAFILwABSJcAAUrwAALkHAWrAAFIMYAPAAP9oAgAAAQPAAFI/wABSvAAAAAEBAcAAUkYAAACA7WADvl4AAGADvzoBPgFKwABSVwEewABSc8AAfmoCAAKAwABSlcAhYKkWwABSoC61OMAARF7AAES1AAbAAETHgL3AAFLBwABS28AAU4wAALfOAWrAAFLCYAPAAP9oAgAAAQPAAFLvwABTjAAAAAICAsAAUvkAAAClUmADwABMuADAAFMRAAAArWpgA786AABgA786AT4BSsAAUx0BHsAAUznAAH5rAwADgMAAU2DAIWEhgcAAU2rAIWExFsAAU3AutTjAAERewABEtQAGwABEyIC9wABTkcAAU6vAAFRXAAC5CAFqwABTkmADwAD/aAIAAAEDwABTwcAAVFcAAAACAgLAAFPYAAAAsEVgA8AAaJYAwABT9QAAAKVAYAPAAE6FAABgA786AT4BSsAAVAgBHsAAVCTAAH5sAgACgMAAVDfAIWGygcAAVEfAIWHCAAAAIVliACFaBAAhWnwAIVsEACFbfgAhW/gAIVyAACFdQwAhXb0AIV43ACFesQAhX2YAIV/7ACFgcwAhYOsAIWF8ACFh/wAAABAAAAABgL0AIWJLACEyvwAhTvgAIVEJACFTaQAhWGUAIWJIAAAABQAhYksAAAAAAAIGwABEy7kJgL4AACuBBQAAgi6CCACBLgAApLEAAIFHAADAAIHRAACBbAAAuSYAAQEBpPGBlQAAwACB1wAAgbkAAKR2AACB2AAAuX4AAIH2AAC5hgAAghgAAKS0AACCMwAAvIUAAQEBpPSCaQAAvf4AAIKNAAC+egAAgqcAAKXpltAAgswAAL8BAACC8AAAwACB5gAAgxEAAMAAgh0AAQEBuQqDRQAAwACCpQAAg2EAAMAAg4gAAIN+AADAAIObAAEBAbkLg6kAAMAAb/8AAIPSAADAAHqqAACD/gAAwACD2AAAhCkAAMAAe4kAAIRfAADAAG+SAAEBAbkMhJ8AAMAAe78AAITPAADAAHvmAACE/QAAwABsEQAAhSYAAMAAcY4AAIVbAADAAIRDAACFjAAAwACEbwAAhcIAAMAAbVEAAIXqAADAAHxSAAEBAbkNhikAAMAAhRUAAIZLAACA+wAAhmUAAMAAcs8AAIaQAADAAE17AACGxAAAwABxRgAAhu0AAMAATgQAAIcVAADAAGnuAACHNAAAwACFMgAAh1EAAMAAhWEAAIdsAADAAIWeAACHjAAAwABFKAAAAAAABALAAETOgL6IEYgXrFUDuQ4AAAFgAb8CAAARBMAARNCAvohsiKsJuQ8AYAPAAGxMAR+Ij8AAbF0AAAAABMAARNKAvoi/iM8YuRDAAETLAGADwABsEgErBMAARNOAvojjiOsYswTAAETLAGADgRQABMAARNSAvoj8iQkYuRHAAETLAGADpHcABMAARNWAvokkiS8YuLTAAETLAGADwACFowErBMAARNaAvolLiWMYuRLAAETLAGADwACE8AErBMAARNeAvomCiZYYuRPAAETLAGADwACGxQErBMAARN+AvonGidgJuM0AXQPAAP7xAmADviVgA8AAgh4BMonWYAO+JWADwACCHgAEwABE2IC+ie2J/Ri5FMAARMsAYAPAAIOVASsEwABE2YC+ihKKIxi5FcAARMsAYAPAAIHzASsEwABE2oC+ij6KUBi5FsAARMsAYAPAAGx9ASsEwABE24C+iqqKvhi5F8AARMsAYAPAAIPwASsEwABE3IC+ityK9Ri5GMAARMsAYAPAAHx2ASsEwABE3YC+i4WLphi5GcAARMsAYAPAAHuYASsEwABE3oC+i7qLyBi5GsAARMsAYAPAAG+TASsEwABE4IC+jBuMLBi5GwBgA8AAgdIBKwTAAEThgL6MUoxmGLYnAWqMMmADwAD/aAJgA8AAcY8BKwEFwABE+YC+jGuMa450AAAAA4yBjnQAAAAEBASMhwAABLkRYAOkdwCMmwAABLMEYAOBFACMvgAAAKUuYAO23QCM2AAAAICJYAOl6gAAYAPAAETOAT4FQCEcjQAWjPIuuRHAAETLwABE1EgBAAErAMAA/3WM8o0HAD0XjQ4uuLTAAETLH40owACGRwQABIKNP8AhZmWDjUnAIWZxLhaNXC6zBMAARMvAAETTAMAARNU9F41rLrkUwABEyx+NgsAARScCAAIWjZguuRHAAETLwABE1BaNpy64tMAARMvAAETVAMAARNg9F425LrkXwABEyx+N1MAAhCMBAAEuAMAARNs9F433LrYnH44SwABxrwIAAhaONC60WcAAROofjkjAAIbfAQABFo5jLri0wABEy8AARNUAAMAAROEDCAHAAETUgADAIWZNCAHAAETTgQDAIWZZCQGMa78RAAAAABMGwABE44C+ilSKaoqRAQC2LQAAAAEDinyKkQAAAAAAAABgA8AAbEMBSop/ARaKfy65FsAARMvAAETaBsAAROSAvo55jpaO2wEAuRwAAAABA465jtsAAAAAAAAAYAPAAHx2AUqOwgEWjsIuuRjAAETLwABE3AbAAETlgL6O4I7zjxwBALkdAAAAAQOPC48cAAAAAAAAAGADwABvkwFKjw4BFo8OLrkawABEy8AARN4GwABE7oC+jyGPMpGpAAClVwFqjyJgA8AA/2gCAAABA49DkakAAAAAAAAAXAE+BD0ckEIWkC8upVnAAETptBkBAAEWkF0WkE4utFnAAETqsli52QC8XT0ckIMWkHAupVnAAETptBkBAAEWkJ4WkI8utFnAAETqsma55wC8XT0ckLwuuR7AAETLAQABFpEDFpD0LrRZwABE6rJWudcAwABE8D0ckVsuuR7AAETLAQABFpGZFpGKLrRZwABE6rJcud0AwABE8AbAAETwgL6RrpGzlOwAALkewABEywAAAAEDkeGU7AAAAAEBAZH1AAAAuR9gA74TAABcAT4DSZINHJIigJIRwCFpJUgBAAErAMAA/3VKkisAP06SQ5JPAACbLmADvhMBFpJgFpJRLrRZwABE6psuuYk9HJKEFpJxLqVZwABE6bQVAgACgZKXwCFpUzSSrAOSrJTnAAAAAgICkq0AAACAtWADvhMAkr0AAACCamADviUAAGADwAD/JQE+Ak6S2pLsAAC5IGADviUBHJMMFpLuLqVZwABE6bOAAgACgJMjwCFpJRaTPIOTNcAhaaWAvb4BALxTQByT4xaT1ISTwsAhabyFGb4zSAEAAYCT5sAhaSUAwAD/dZPCk/YBHpQCtv0CAAKElBrAIWm8JAAKJ7khFpRMg5RFwCFppYC9vgEnuSKAlGbAIWklJ7kjJ7kkhJSRwCFpvCeb6haUzYSUu8AhabyFGb4zJ4FqAAC8VwbAAETygL6U8ZUQolAAAKVWAWqU8mADwAD/aAIAAAEDlSiiUAAAAAICApU9AAAAluVgA6R3AJVMAAAAgppgA6S3AABgA77BAT4NTpV0lYMAALklYAPAAITwARyVhS65JsAARMsAAAAAwABE8U6VupXCAAC1QGADwAB6yQEfldDAAHtlAgACFpXfLrRZwABE6haWABaV+IGV78AhaqJ6pMOCuIFWAD0XlhcuuRjAAETLH5Y3wAB8gwUABRaWYoGWWcAhaqJ6pMMWlnMupVnAAETpFpaPLrRZwABE6haWsxaWpy64tMAARMvAAETVhYXAAIXHH5bGwACFMQIAAiaW3AEWltwupVnAAETpYAO8ahaW8C6y4MAAROYAAMAARNw9F5cHLrkWwABEyx+XIMAAbIwBAAEmlzYBFpc2LrLgwABE5mADwABsXgDAAETaPReXTC65GcAARMsfl3TAAHueBAAEFpeeLqVZwABE6RaXui60WcAAROoWl9IusuDAAETmFpfrLrkXwABEy8AARNsAwABE3T0XmAYuuRrAAETLH5gbwABvnwEAAS4AwABE3k6YQphPAAC5J2ADwABzTgEfmFXAAIbEAQABJphoARaYaC60s8AAROtgA8AAhaMATpiPmKUAALkoYAPAAHMXAR+Ys8AAcy8CAAIWmMkutFnAAETqhJjZwCFsGgBOmQOZGgAAuSlgA8AAcFkBH5kowABwYAAAAABOmiGaMQAApW5gA8AAcCIBH5o3wABwWAIAAhaaXYGaVMAhaqJ6pMMWmn2GmmbAIWx1uSrAAHBbAD0XmpUuuRsfmq3AAHvRCgAKFprSLqVZwABE6Raa7i60WcAAROqDmwbAIWrZFpsXLrLgwABE5habMC65GMAARMvAAETcFptTLrkXwABEy8AARNsWm3EuuRnAAETLwABE3YKbnMAhareFm7TAIWxJh5vTwCFskADAAETgTpwAnBcAALkrYAPAAHv7AR+cJcAAfC8DAAMWnE0usuDAAETmJpxeARacXi6lWcAAROlgA7xqJpxyARacci60WcAAROpgA7pzAEqchwEfnJK+8QYABoCcrsAhapYWnMWBnLzAIWqipS6k4B+c28AAhG4MAAwWnQyBnQPAIWqieqTDJp0hARadIS6lWcAAROlgA7xqJp1BARadQS60WcAAROpgA7pzg51dwCFq2Radci6y4MAAROYUnY/AIW1CCAAWnbMuuRfAAETLwABE2xad1S62J8AAROEWnfcuuRnAAETLwABE3RaeJi65GMAARMvAAETcFp5NLrkawABEy8AARN4WnnKBnmnAIWqipR2kzgAfnpHAAE4DEQARFp65LrMEwABEy8AARNMmns8BFp7PLrSzwABE62ADwACFoxae5y6lWcAAROkWnxMWnwcuuLTAAETLwABE1YWFwACFxxafJi60WcAAROoWn0IusuDAAETmFp9fLrYtwABE4xSffsAhbUIIABafoi65F8AARMvAAETbgp/EwCFqtxaf4C65GsAARMvAAETeFp/8LrkYwABEy8AARNwWoCMutifAAEThhqBFwCFsdWqgb2ADwABxWMAA+JaFoJbAIWxJhKC5wCFsGgAfoNTAAEUKCwALFqD3LrkRwABEy8AARNQmoRIBFqESLrSzwABE62ADwACFoxahKi6y4MAAROYWoUcuti3AAETjhqFmwCFsdRahii65G8AAROAWoakuuM3AAETfFqHNgaHEwCFqoqUxpOEWoeYuuRrAAETLwABE3haiAi65FMAARMvAAETYFqIgLrkVwABEy8AARNkAh6I8wCFskAAGwABE84C+olWiZqM+AAClaAFqolZgA8AA/2gCAAABA6J1oz4AAAAAAAAAXAE+AkAhHKKaFqKFLrkTwABEy8AARNdIAQABKwDAAP91ooWioQEnuSw9HKLyFqLdLrkTwABEy8AARNe2LAIAAhajFy6y4MAAROYWoyguti3AAETjAMAAhtAGwABE5oC+o0OjY6SjAQCy4AFqo0RgA8AA/2gCAAABA6NzpKMAAAAAAAAAYAPAAGwSAT4CSaN5HKOOFqN9LrkQwABEy8AARNJIAQABKwDAAP91PgI9F6OfLrkQwABEyxyjyRajsi65D8AARNCCjAEAARajzy6lWcAAROkAwABsWsAARNJAIRykDRaj/C65EMAARMvAAETSSAEAASsAwAD/daP8pBQBHqQgtv0CAAJqpClgA7cPwADHQie5LQA/SqSIARakjy65EMAARMvAAETSBsAARPSAvqSopLmn4gAApUQBaqSpYAPAAP9oAgAAAQOk0KfiAAAAAQEBpN4AAAC5LmADwABFOgAAXAE+BD0cpP4WpPIuuLTAAETLwABE1bkvAQABFqUYgKULwCFxPYJZwABFPADAAIYwSaUoFqU1FqUsLrMEwABEy8AARNODCIFcPgE9F6VOLrkVwABEyx6lYsAAgegBAAEfpXnAAIOOAgACFqWdgKWQwCFxPYJZwABFPBaltBalqC64tMAARMvAAETVqoHAAIXPAADAAETZPz0XpdMuuRPAAETLH6XuwACG0gMAAyamEQEWphEutLPAAETrYAPAAIWjFqYdLrkPwABE0BamNS65FcAARMvAAETZAMAARNdGpk2mdaZWAAAAgKxgA8ABAIMAFqZqgKZdwCFxPYb1wABFPj4ETqaLppMAAIRIYAO+BAEcpqgWppUupVnAAETps3MBAAGBprbAIXIuALxOSabCHqbGwABtVwEAARam4IKm2MAhck+ljL4GAD4BPRynDham+S65E8AARMvAAETXtioBAAGCpyfAIXJPAMAAhsw/PRynVBanPy65E8AARMvAAETXtisBAAGCp3DAIXJPAMAAhs9Jp4Acp4iBp4TAIXIuSAEAARqnkLlmAMABAKo+AT0cp7oWp6UuuRfAAETLwABE27kwAAAAAMAAg/w/BsAAROeAvqfnp/yoKwEAuTEAAAABA6gXqCsAAAAAAAAAYAPAAIHzAUqoGgEWqBouuRXAAETLwABE2QbAAETogL6oMKhEqHEBALkyAAAAAQOoXqhxAAAAAAAAAGADwACDlQFKqGEBFqhhLrkUwABEy8AARNgGwABE6YC+qHaomajNAQClWQFqqHdgA8AA/2gCAAABA6isqM0AAAAAAAAAYAO8RgFKqK8BFqi7FqivLri0wABEy8AARNWlWcAAhcgGwABE6oC+qNKo8akdAQC0WQFqqNNgA8AA/2gCAAABA6kAqR0AAAAAAAAAYAO5hwFKqQMBFqkPFqkDLri0wABEy8AARNW0WcAAhckGwABE64C+qSKpOalSAQC0swAAAAEDqUSpUgAAAAAAAABgA8AAhWIBSqlHARapRy64tMAARMvAAETVBsAARPWAvqlXqXSp2AAApTABaqlYYAPAAP9oAgAAAQOpiqnYAAAAAQEBqZQAAACCmmADpLcAAGADvJUBSqmnAR+pq8AAhUcCAAKAqcLAIXSFFqnMLri0wABEy8AARNUABsAARPaAvqndqfiqVgAApV4BaqneYAPAAP9oAgAAAQOqA6pWAAAAAQEBqhcAAAC2KGADwABOFgAAYAO+OgE+AUqqLAEWqkYWqjMupVnAAETppV28SQbAAETxgL6qW6pzq1AAALkmwABEywAAAAEDqpGrUAAAAAAAAABgA8AAhPABPgFKqpoBNQAAAAEAYAPAAITwARaqoS65EsAARMvAAETWIxyquoAAwCF1Q0gBAAErAMAA/3UXqqEuuRLAAETLIxaqxxaqvi6zBMAARMvAAETTgq2BNGqq7mADwACE+cAA+J0fqx3AAIUUAQABFqs5LqVZwABE6QABYAPAAITwwABE1oAAwCF1QwFgA8AAhPAGwABE7IC+q1Wrcau0AQC5MwAAAAEDq5OrtAAAAAAAAABgA8AAhPABSqucARarnC65EsAARMvAAETWBsAARPeAvqu5q9CsUwAApbEBaqu6YAPAAP9oAgAAAQOr4axTAAAAAgICq+wAAAClr2ADtw8Aq/4AAAClM2ADvf8AAGADtv8BPgFKrBQBHKwnFqwbLri0wABEy8AARNW45QIAAoCsNcAhdi+BrEDAIXY7AMAAhdQAACFnjgAhZ8gAIWgCACFoPAAhaQEAIWpsACFvvwAhcEMAIXETACFzFwAhc1EAIXOLACFz1gAhdCEAIXRbACF0uwAhdRAAIXXLACF2BQAhdnwAAAATAsAARPqAvqxYrF6xwgO5NAAAAWABwAD/aAABYAG+/AoEwABE/YC+rKasswm5EcAARMsAYAOkdwAEwABE/oC+rNSs3wm4tMAARMsAYAPAAIWjAATAAET/gL6s+60NCbk1wABEywBgA8AAgdIABMAARQCAvq0srUEJuTbAAETLAGADwACFGQAEwABFAYC+rWKteQm5N8AARMsAYAPAAHBZAATAAEUCgL6tqK22Cbk4wABEywBdA8AA/vECYAO+JWADwACCHgAEwABFA4C+rdmt5QmlEsAARMsAXQPAAP7xAmADvf9gA8AATgcABMAARQSAvq3+rgwJuRrAAETLAGADwABvkwAEwABFBYC+riauNgm5FMAARMsAYAPAAIOVAATAAEUGgL6uUa5iCbkVwABEywBgA8AAgfMAAQXAAEUKgL6uZ65nsEsAAAADrnywSwAAAAsLC66JAAAEuRFgA6R3AK6jAAAEuLRgA8AAhaMArsYAAACy4GADwABsEgCu7wAAALYtYAPAAGxDAK8NAAAEuTdgA8AAcFkArzEAAAS5NWADwACB0gCvUAAABLk4XQPAAP7xAmADviVgA8AAgh4Ar2sAAASlEl0DwAD+8QJgA73/YAPAAE4HAK+EAAAEuRpgA8AAb5MAr58AAAS5FGADwACDlQCvvAAABLkVYAPAAIHzAABgA8AARPoBPwsIAcAARP2AAMAheCUIAcAARP6BAMAheDEIAcAARQGEAMAheFsIAcAARP+FAMAheGkIAcAARQKGAMAheHcIAcAARQOHAMAheJAIAcAARQQUAMAheKkIAAgBwABFBRQAwCF4twkACAHAAEUGFADAIXjFCgAIAMAARQAfr/PAAIa4AwADgbAbwCF4MYKwKMAheD+DsDnAIXhNAAkBrmfAAP9+AAAAAAEGwABFCIC+sFCwZbHAAAC2IAFqsFFgA8AA/2gCAAABA7BzscAAAAABAQGwgQAACKSGYAO+JQAAYAO5fwE+AUqwjwEfsJrAAEUdCwALFrCyLrkRwABEy8AARP0WsMkuuLTAAETLwABE/haw3i65NcAARMvAAET/FrD6Lrk2wABEy8AARQAWsRkuuTfAAETLwABFAYCxOsAheawWsUouuTjAAETLwABFAhaxYi6lEsAARMvAAEUDFrF4LrkawABEy8AARQQWsZAuuRTAAETLwABFBRaxqi65FcAARMvAAEUGAAAAIXmCACF6YgAAAAECwABFC4C+scWxy7xNA7k5AAABYAHAAP9oAAFgAbl/CwTAAEUOgL6yBbISCbkRwABEywBgA6R3AATAAEUPgL6yM7I+Cbi0wABEywBgA8AAhaMABMAARRCAvrJasmwJuTXAAETLAGADwACB0gAEwABFEYC+souyoAm5NsAARMsAYAPAAIUZAATAAEUSgL6ywbLYCbk3wABEywBgA8AAcFkABMAARRiAvrL7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AEYOgMKgYqBioRIAAAADoGihEgAAAAAAAABgA8AAResBPgI9F6BxLoPUHKB5LrnyAAAAAMAARfzAAEXuPReg9i4GH6EBwABGzgAAAADAAEXvAQkBoGLAAP9+AAAAABIGwABF+4DCoRehHKGsAAC58wAAAAEDoSShrAAAAAEBAaExAAAAml9gA8AARpkAAFwBPgROoUKhRQAAtLRgA8AA/hsBFqFOFqFHLrnwwABF9mHAAP7vPRehYIChWsAh2oO0tIGhZcAh2pfAAEabPRyhdBahbS658MAARfZWAQABgKF4wCHagwDAAP7QQB6hi8AA9/wCAAIcoZsWoZUuufDAAEX2SwEAAYGhnMAh2pcAwAD+zoChocAh2oMAoYuhpwAGwABF/IDCobGhvaIkAAC58gAAAAEDociiJAAAAAAAAABgA8AARpkBPgNOod2h5AAAgXZgA8AARpkBH6HqwABGzgAAAAA9HKH9LrnzAQABgKIGwCHbTgDAAEX7SqITAYCiGsAh204GwABF/YDCoimiNaMNAAC59AAAAAEDokqjDQAAAAICAqJdAAAAgklgA8AAh3AAonsAAACZjF0DwAD+vwFgA8AAh2cAAGADwABGmQE+A06ilaKcAACBdmADwABGmQEcop4uufIAAAAAwABF/D0XoriCorHAIdvXufUfos7AAEteAwADgqLfwCHb14Ci58Ah26mBou/AIdu3AMAARqFKovwBgqMDwCHb1wbAAEX+gMKjEqMcpmYAAKsXAAAAAQOjJ6ZmAAAAAwICozYAAACGHWADwABiOACjTQAAAKVAYAPAAE6FAAGjcwAAAKXCYAPAAEM0AWoAYAPAAP8leWADwABJpQE+A06jl6OeAACBdmADwABJpQEco6kWo6AumY7AAEX5SwEAAYCjqsAh3FAAwAD/BUmkCBykE4OkDMAh3I5IAQABKwDAAP91PgVJpCQhFqQygKQpwCHcULn2wABiOj4BPYikkMAh3FBqpKFgA8AAYnfAAPs1P06k0qTXAACClGADvzoBHKUEFqTlgaTZwCHcXrHGwABOjraAAQABgKUkwCHcUAC/lD2LpTXAIdyONaVCAAABAGADwABJpQEfpULAAEm6AgACgKVVwCHcUISlX8Ah3QAANQAAAAEAWwEXpW+FpW3AId04pcKCpYPAIdxtwABG04UAwCHdOD0cpaIW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XgAAubQBasAAQyVgA8AA/2gCAAABA8AAQznAAENeAAAAAQEBwABDQAAAAIPzYAPAAEoNAABbAUrAAENJARzAAENJLroYAQABgMAAQ1nAIfnMAMAARh8GwABGR4DCwABDYsAAQ27AAEOmAAC5tQFqwABDY2ADwAD/aAIAAAEDwABDfMAAQ6YAAAABAQHAAEOIAAAAg/NgA8AAShYAAFsBSsAAQ5EBHMAAQ5EuuhgBAAGAwABDocAh+jQAwABGHwbAAEZIgMLAAEOqwABDtsAAQ/MAALm2AWrAAEOrYAPAAP9oAgAAAQPAAEPGwABD8wAAAAEBAcAAQ9QAAACD82ADwABKiQAAWwFKwABD3QEcwABD3S655gEAAYDAAEPuwCH6nADAAEYUBsAARkmAwsAAQ/fAAEP3wABENAAAuhsAAAABA8AARAfAAEQ0AAAAAQEBwABEFQAAAIPzYAPAAEiCAABbAUrAAEQeARzAAEQeLrnmAQABgMAARC/AIfr4AMAARhQGwABGSoDCwABEOMAARETAAER7AAC5twFqwABEOWADwAD/aAIAAAEDwABEUcAARHsAAAABAQHAAERcAAAAg/NgA8AASIkAAFsBSsAARGUBHMAARGUuuhsBAAGAwABEdsAh+2AAwABGSQbAAEZLgMLAAER/wABEi8AARMIAALm4AWrAAESAYAPAAP9oAgAAAQPAAESYwABEwgAAAAEBAcAARKMAAACD82ADwABIkAAAWwFKwABErAEcwABErC66GwEAAYDAAES9wCH7yADAAEZJBsAARkyAwsAARMbAAETSwABFDQAAubkBasAARMdgA8AA/2gCAAABA8AAROHAAEUNAAAAAQEBwABE7gAAAIPzYAPAAEnDAABbAUrAAET3ARzAAET3LrnmAQABgMAARQjAIfwwAMAARhQGwABGTYDCwABFEcAARR3AAEVeAAC5ugFqwABFEmADwAD/aAIAAAEDwABFLMAARV4AAAABAQHAAEU5AAAAg/NgA8AASZsAAFsBSsAARUIBHMAARUIuuhUBAAGAwABFWcAh/JgAwABGHAbAAEZOgMLAAEViwABFbsAARaEAALm8AWrAAEVjYAPAAP9oAgAAAQPAAEV5wABFoQAAAAEBAcAARYIAAACD82ADwABJPQAAWwFKwABFiwEcwABFiy66FAEAAYDAAEWcwCH9AADAAEYbBsAARk+AwsAARaXAAEWxwABF3gAAhcsBasAARaZgA8AA/2gCAAABA8AARbnAAEXeAAAAAQEBwABFvwAAAIPzYAPAAEm7AABbAUrAAEXIARzAAEXILrnmAQABgMAARdnAIf1oAMAARhQGwABGUIDCwABF4sAARe7AAEY7AAC5vQFqwABF42ADwAD/aAIAAAEDwABGBcAARjsAAAABAQHAAEYaAAAAg/NgA8AASmYAAFsBSsAARiMBHMAARiMuuhIBAAGAwABGNsAh/dAAwABGGQbAAEZRgMLAAEY/wABGS8AARngAALm/AWrAAEZAYAPAAP9oAgAAAQPAAEZTwABGeAAAAAEBAcAARlkAAACD82ADwABJ3AAAWwFKwABGYgEcwABGYi655gEAAYDAAEZzwCH+OADAAEYUBsAARlKAwsAARnzAAEaIwABGxAAAubsBasAARn1gA8AA/2gCAAABA8AARpXAAEbEAAAAAQEBwABGoAAAAIPzYAPAAEjWAABbAUrAAEapARzAAEapLroOAQABgMAARr/AIf6gAMAARhUGwABGU4DCwABGyMAARtTAAEcWAAC5vgFqwABGyWADwAD/aAIAAAEDwABG58AARxYAAAABAQHAAEb4AAAAg/NgA8AASckAAFsBSsAARwEBHMAARwEuubkBAAGAwABHEcAh/wgAwABGTAbAAEZUgMLAAEcawABHJsAAR2UAALnAAWrAAEcbYAPAAP9oAgAAAQPAAEc6wABHZQAAAAEBAcAAR0wAAACD82ADwABLPAAAWwFKwABHVQEcwABHVS66GQEAAYDAAEdgwCH/cADAAEYpBsAARlWAwsAAR2nAAEd1wABHugAAucEBasAAR2pgA8AA/2gCAAABA8AAR4nAAEe6AAAAAQEBwABHmwAAAIPzYAPAAEhnAABbAUrAAEekARzAAEekLrnmAQABgMAAR7XAIf/YAMAARhQGwABGVoDCwABHvsAAR8rAAEf4AAC5wgFqwABHv2ADwAD/aAIAAAEDwABH0sAAR/gAAAABAQHAAEfYAAAAg/NgA8AAR3UAAFsBSsAAR+EBHMAAR+wWwABH5oDAAEfhwCIAQICWwABHd4RSAQABLgDAAEdCBsAARleAwsAAR/zAAEgIwABIRgAAucMBasAAR/1gA8AA/2gCAAABA8AASBbAAEhGAAAAAQEBwABIIgAAAIPzYAPAAEjxAABbAUrAAEgrARzAAEgrLroOAQABgMAASEHAIgCzAMAARhUGwABGWIDCwABISsAASFbAAEiJAACxtAFqwABIS2ADwAD/aAIAAAEDwABIYcAASIkAAAABAQHAAEhqAAAAg/NgA8AASh8AAFsBSsAASHMBHMAASHMuuhYBAAGAwABIhMAiARsAwABGHQbAAEZZgMLAAEiNwABImcAASNIAALnEAWrAAEiOYAPAAP9oAgAAAQPAAEinwABI0gAAAAEBAcAASLMAAACD82ADwABJBwAAWwFKwABIvAEcwABIvC66EAEAAYDAAEjNwCIBgwDAAEYWBsAARlqAwsAASNbAAEjiwABJHQAAucUBasAASNdgA8AA/2gCAAABA8AASPHAAEkdAAAAAQEBwABI/gAAAIPzYAPAAEkQAABbAUrAAEkHARzAAEkHLroQAQABgMAASRjAIgHrAMAARhYGwABGW4DCwABJIcAASS3AAElpAAC5ygFqwABJImADwAD/aAIAAAEDwABJOsAASWkAAAABAQHAAElFAAAAg/NgA8AASN8AAFsBSsAASU4BHMAASU4uug4BAAGAwABJZMAiAlMAwABGFQbAAEZcgMLAAEltwABJecAASawAALGwAWrAAEluYAPAAP9oAgAAAQPAAEmEwABJrAAAAAEBAcAASY0AAACD82ADwABI+gAAWwFKwABJlgEcwABJli66FgEAAYDAAEmnwCICuwDAAEYdBsAARl2AwsAASbDAAEm8wABJ7wAAucYBasAASbFgA8AA/2gCAAABA8AAScfAAEnvAAAAAQEBwABJ0AAAAIPzYAPAAEpHAABbAUrAAEnZARzAAEnZLrnmAQABgMAASerAIgMjAMAARhQGwABGXoDCwABJ88AASf/AAEo8AAC5xwFqwABJ9GADwAD/aAIAAAEDwABKD8AASjwAAAABAQHAAEodAAAAg/NgA8AASnsAAFsBSsAASiYBHMAASiYuueYBAAGAwABKN8AiA4sAwABGFAbAAEZfgMLAAEpAwABKTMAASosAALnIAWrAAEpBYAPAAP9oAgAAAQPAAEpdwABKiwAAAAEBAcAASmwAAACD82ADwABLQwAAWwFKwABKdQEcwABKdS655gEAAYDAAEqGwCID8wDAAEYUBsAARmCAwsAASo/AAEqbwABK1AAAuckBasAASpBgA8AA/2gCAAABA8AASqnAAErUAAAAAQEBwABKtQAAAIPzYAPAAEtMAABbAUrAAEq+ARzAAEq+LrnmAQABgMAASs/AIgRbAMAARhQGwABGYYDCwABK2MAASuTAAEsWAACxnAFqwABK2WADwAD/aAIAAAEDwABK7cAASxYAAAABAQHAAEr0AAAAg/NgA8AASdAAAFsBSsAASv0BHMAASv0uub4BAAGAwABLEcAiBMMAwABGUwbAAEZigMLAAEsawABLJsAAS1cAAIYNAWrAAEsbYAPAAP9oAgAAAQPAAEswwABLVwAAAAEBAcAASzgAAACD82ADwABKPwAAWwFKwABLQQEcwABLQS66FgEAAYDAAEtSwCIFKwDAAEYdBsAARmOAwsAAS1vAAEtnwABLrAAAucsBasAAS1xgA8AA/2gCAAABA8AAS3vAAEusAAAAAQEBwABLjQAAAIPzYAPAAEolAABbAUrAAEuWARzAAEuWLrnmAQABgMAAS6fAIgWTAMAARhQGwABGZIDCwABLsMAAS7zAAEwIAAC5zAFqwABLsWADwAD/aAIAAAEDwABL0cAATAgAAAABAQHAAEvkAAAAg/NgA8AASOgAAFsBSsAAS+0BHMAAS+0uug4BAAGAwABMA8AiBfsAwABGFQbAAEZlgMLAAEwMwABMGMAATEUAALGxAWrAAEwNYAPAAP9oAgAAAQPAAEwgwABMRQAAAAEBAcAATCYAAACD82ADwABJewAAWwFKwABMLwEcwABMLy66FgEAAYDAAExAwCIGYwDAAEYdBsAARmaAwsAATEnAAExVwABMgAAAubABasAATEpgA8AA/2gCAAABA8AATFzAAEyAAAAAAQEBwABMYQAAAIPzYAPAAEqyAABbAUrAAExqARzAAExqLrnmAQABgMAATHvAIgbLAMAARhQGwABGZ4DCwABMhMAATJDAAEzJAAC5sgFqwABMhWADwAD/aAIAAAEDwABMnsAATMkAAAABAQHAAEyqAAAAg/NgA8AAStwAAFsBSsAATLMBHMAATLMuueYBAAGAwABMxMAiBzMAwABGFAbAAEZogMLAAEzNwABM2cAATSAAALmxAWrAAEzOYAPAAP9oAgAAAQPAAEzuwABNIAAAAAEBAcAATQEAAACD82ADwABKzwAAWwFKwABNCgEcwABNCi655gEAAYDAAE0bwCIHmwDAAEYUBsAARmmAwsAATSTAAE0wwABNbQAAuc0BasAATSVgA8AA/2gCAAABA8AATUPAAE1tAAAAAQEBwABNVAAAAIPzYAPAAErkAABbAUrAAE1dARzAAE1dLroZAQABgMAATWjAIggDAMAARikGwABGaoDCwABNccAATX3AAE26AAC5zwFqwABNcmADwAD/aAIAAAEDwABNkMAATboAAAABAQHAAE2hAAAAg/NgA8AASxkAAFsBSsAATaoBHMAATaouuhkBAAGAwABNtcAiCGsAwABGKQbAAEZrgMLAAE2+wABNysAATgcAALnOAWrAAE2/YAPAAP9oAgAAAQPAAE3dwABOBwAAAAEBAcAATe4AAACD82ADwABLAAAAWwFKwABN9wEcwABN9y66GQEAAYDAAE4CwCII0wDAAEYpBsAARmyAwsAATgvAAE4XwABOSgAAudABasAATgxgA8AA/2gCAAABA8AATiXAAE5KAAAAAQEBwABOMQAAAIPzYAPAAEslAABbAUrAAE46ARzAAE46LroZAQABgMAATkXAIgk7AMAARikGwABGbYDCwABOTsAATlrAAE6LAACxhQFqwABOT2ADwAD/aAIAAAEDwABOZMAATosAAAABAQHAAE5sAAAAg/NgA8AASiwAAFsBSsAATnUBHMAATnUuueYBAAGAwABOhsAiCaMAwABGFAbAAEZugMLAAE6PwABOm8AATswAALnRAWrAAE6QYAPAAP9oAgAAAQPAAE6lwABOzAAAAAEBAcAATq0AAACD82ADwABKNQAAWwFKwABOtgEcwABOti655gEAAYDAAE7HwCIKCwDAAEYUBsAARm+AwsAATtHAAE7dwABPIgAAudIBasAATtJgA8AA/2gCAAABA8AATvHAAE8iAAAAAQEBwABPAwAAAIPzYAPAAEwGAABbAUrAAE8MARzAAE8MLrnmAQABgMAATx3AIgpzAMAARhQGwABGcIDCwABPJsAATzLAAE+HAAC50wFqwABPJ2ADwAD/aAIAAAEDwABPS8AAT4cAAAABAQHAAE9iAAAAg/NgA8AATA8AAFsBSsAAT3EBHMAAT3EuueYBAAGAwABPgsAiCtsAwABGFAbAAEZxgMLAAE+MwABPmMAAT+MAALnUAWrAAE+NYAPAAP9oAgAAAQPAAE+vwABP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LroCwABGpWHAAP7vAMAA/z/AAGk7wABpfQBAHMAAaZUWwABpj4DAAGmLwCIm5ppfwABG2EgBAAErAMAA/3XAAGmLwABpnAA9HMAAaagWwABpoy66LMAARqC6IAIAAhbAAGm+FsAAabkuuizAAEaggerAAEaMgMAAacTAIibmAMAARpA9HMAAadKAwABpzsAiJua6PQEAAS4AwABHQwbAAEa8gMLAAGnzwABp+MAAamcAALpBAAAAAQPAAGoBwABqZwAAAAEBAcAAagcAAAC6QGADwABJ3AAAXAE+Az0cwABqFxbAAGoSLroswABGoIReAQABgMAAah7AIigjAMAARpNAHMAAajkWwABqM4DAAGovwCIoI5pfwABG2EgBAAEuAMAA/3XAAGovwABqQAA9HMAAakuAwABqR8AiKCO6QgAAAADAAEdEBsAARr2AwsAAamzAAGpxwABrZQAAujsAAAABA8AAannAAGtlAAAAAgICwABqhwAAALohYAPAAEbQAMAAapwAAAC56GADwABG0AAAXAE+BUAhJcAAar2AwABqtsAiKM1gA8AASdzAAGq2wABqxQBAISXAAGrfgcAAatPAIijdYAPAAEncwABq08AAaucAQCIcwABq9S66NAAAAADAAEawARzAAGsBLro1AAAAAMAARrHAAGr1wABrCwA9HMAAaxIuuiACAAKAwABrI8AiKM2BwABrK8AiKN0AwABGkD0cwABrSYHAAGs9wCIo3bo9AQABLgDAAEdDBsAARr6AwsAAa2rAAGtvwABsZQAAukMAAAABA8AAa3jAAGxlAAAAAgICwABrhgAAALohYAPAAEbQAMAAa5sAAAC56GADwABG0AAAXAE+BUAhJcAAa7yAwABrtcAiKcNgA8AASdzAAGu1wABrxABAISXAAGvegcAAa9LAIinTYAPAAEncwABr0sAAa+YAQCIcwABr9C66NAAAAADAAEawARzAAGwALro1AAAAAMAARrHAAGv0wABsCgA9HMAAbBEuuiICAAKAwABsI8AiKcOBwABsK8AiKdMAwABGkT0cwABsSYHAAGw9wCIp07o9AQABLgDAAEdDBsAARr+AwsAAbGrAAGx7wABtVgAAhF4BasAAbGtgA8AA/2gCAAABA8AAbIHAAG1WAAAAAQEBwABsjwAAALnoYAPAAEbQAABcAT4FQCIcwABs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kcAA9/wCAAIcwACkoRbAAKSbLoJVwABG1ksBAAGCwACkosAiXy4AwAD+zoDAAKSmwCJfAwA9HMAApLMWwACkrS6CVcAARtaAvwIAAoLAAKS0wCJfLoHAAKS5wCJfEwDAAP7PPwbAAEdGgMLAAKUGwAClC8AApjUAALqkAAAAAQPAAKUZwACmNQAAAAICAsAApS0AAACDYV0DwAD+vwFgA8AARtAAwAClQAAAALnoYAPAAEbQAABcAT4ETsAApVfAAKVeAABhYAPAAP4bARbAAKVlgMAApWDAImAqYcAA/u9OwACldcAApXcAAGJgA8AA/hsBk0PAAKWAHMAApYmDwAClh8AiYH1jAQABgsAApYvAImBXAMAA/0k+AUnAAKWbHMAApauBwACln8AiYEFIAQABHMAApbKAwAClrsAiYCpLAQABg8AApbPAImB9AMAA/s4AwAD/dT4CPRzAAKXFgMAApcHAImAqgL8CAAKDwAClxsAiYH0cwAClz4DAAKXLwCJgKksBAAEcwACl14LAAKXQwCJgV4GNAQABlADAAP9CAMAA/s4AwAD+zz2KwACl5cAiYFccwACl64LAAKXlwCJgV4GNAQABlADAAP9CPgE9i8AApgbAImB9HMAApgeDwACmBsAiYH1kAQABlADAAP9BPRfAAKYigMAAph3AImAqYYLAAKYrwCJgV8AA/u0GwABHR4DCwACmccAApnbAAKa6AAC6owAAAAEDwACmgMAAproAAAABAQHAAKaOAAAApB9gA8AARtAAAFwBPgE9HMAAppouuqQCAAIWwACmqS66JsAARteAwACmscAiYdUAwABHRgbAAEdIgMLAAKc4wACnPcAAqI0AALqlAAAAAQPAAKdGwACojQAAAAICAsAAp1QAAAC6pmADwABG0ADAAKdrAAAAuqdgA8AARtAAAFwBPgNAIiEcwACni4HAAKeCwCJiSkgBAAErAMAA/3UAIR7AAKeXwAD3/AIAAoDAAKehwCJiOoHAAKerwCJiSgDAAKeCwACntABFwACnuwHAAKfEwACnxgAAYmADwAD+GwGTARzAAKfNgsAAp8vAImKqYwEAARbAAKfWFsAAp88uglXAAEbWYcAA/u8AwAD/SQGKwACn3sAiYqocwACn34LAAKfewCJiqmQBAAGUAMAA/0E+AUnAAKfrHsAAp+/AAPf8AgACHMAAp/8WwACn+S6CVcAARtZLAQABgsAAqADAImKqAMAA/s6AwACoBMAiYjoAPgI9HMAAqB8WwACoGS6CVcAARtaAvwIAAoLAAKggwCJiqoHAAKglwCJiSgDAAP7PPRzAAKhHFsAAqECBwACoN8AiYkq6JsAARtdWAQABLgDAAP7QPz0cwACoZC66pAIAAhbAAKh8gMAAqHPAImI6uibAAEbXLgDAAEdGBsAAR0mAwsAAqJLAAKiXwACpLwAAuqgAAAABA8AAqLHAAKkvAAAAAgICwACoxgAAALohYAPAAEbQAMAAqNsAAAC6qWADwABG0AAAXAE+AT0cwACpEB7AAKj/wABHZgIAAi6AwACpCMAiY/IAhF0BAAGBwACpHMAiZAIAwABHZwbAAEdKgMLAAKk0wACpOcAAqhcAALqqAAAAAQPAAKlDwACqFwAAAAEBAcAAqVEAAACD22ADwABG0AAAXAE+BkAhJcAAqWouYAPAAEemwACpZcAAqXoAQCElwACpjS5gA8AASdzAAKmIwACplQBAISXAAKmpgMAAqaPAImRxYAPAAEncwACpo8AAqbEAPRzAAKm+FsAAqbguml/AAEbYuiMBAAEuAMAARpI9HMAAqdwWwACp1oDAAKnQwCJkcZpfwABG2LoiAgACgMAAqe7AImRxLgDAAEaRPRfAAKoALppfFsAAqg6AwACqCMAiZHGaX8AARtjAAEbYBsAAR0uAwsAAqhzAAKohwACqNgAAufYAAAABA8AAqivAAKo2AAAAAAAAAGADwAD8VQFKwACqMQEqBsAAR0yAwsAAqjrAAKo/wACqWwAAuqsAAAABA8AAqlDAAKpbAAAAAAAAAGADwAD8VQFKwACqVgEqBsAAR02AwsAAql/AAKpkwACqfQAAuqwAAAABA8AAqnLAAKp9AAAAAAAAAGADwAD8VQFKwACqeAEqBsAAR06AwsAAqoHAAKqGwACqoQAAuq0AAAABA8AAqpbAAKqhAAAAAAAAAGADwAD8VQFKwACqnAEqBsAAR0+AwsAAqqXAAKqqwACqxgAAuq4AAAABA8AAqrvAAKrGAAAAAAAAAGADwAD8VQFKwACqwQEqBsAAR1CAwsAAqsrAAKrPwACq6gAAuq8AAAABA8AAqt/AAKrqAAAAAAAAAGADwAD8VQFKwACq5QEqBsAAR1GAwsAAqu7AAKrzwACrDAAAurAAAAABA8AAqwHAAKsMAAAAAAAAAGADwAD8VQFKwACrBwEqBsAAR1KAwsAAqxDAAKsVwACrLQAAurEAAAABA8AAqyLAAKstAAAAAAAAAGADwAD8VQFKwACrKAEqBsAAR1OAwsAAqzHAAKs2wACrUAAAurIAAAABA8AAq0XAAKtQAAAAAAAAAGADwAD8VQFKwACrSwEqBsAAR1SAwsAAq1TAAKtZwACrcgAAurMAAAABA8AAq2fAAKtyAAAAAAAAAGADwAD8VQFKwACrbQEqBsAAR1WAwsAAq3fAAKt8wACrrAAAtm4AAAABA8AAq4nAAKusAAAAAQEBwACrlwAAAKVAYAPAAE6FAABgA8AA/FUBSsAAq6cBKgbAAEdWgMLAAKuxwACrtsAArFkAALoJAAAAAQPAAKu9wACsWQAAAAAAAABgA8AA/FUBPgROwACr0cAAq9sAALoKYAPAAIixAR/AAKvhwACIvgAAAAA9F8AAq/2AwACr88AiZ/e55RbAAKwMLppfwABG2MAAReU9HMAArCGAwACsF8AiZ/e55gEAAS4AwACIvErAAKw9ARbAAKxOgMAArETAImf3ugnAAIizBsAAR1eAwsAArF7AAKxjwACsgwAAurQAAAABA8AArHjAAKyDAAAAAAAAAGADwAD8VQFKwACsfgEqBsAAR1iAwsAArIjAAKyNwACspQAAurUAAAABA8AArJrAAKylAAAAAAAAAGADwAD8VQFKwACsoAEqBsAAR1mAwsAArKrAAKyvwACuDgAAukwAAAABA8AArLjAAK4OAAAAAQEBwACsxgAAAIPbYAPAAEbQAABgA8AA/FUBPgVJwACtBBzAAK0NLkgBAAGAwACtEMAiaQgAwAD/dUrAAK0XASo/ScAArSkhHMAArTMWwACtLS6aX8AARthIAQABFsAArTyAwACtNsAiaQiaX8AARtgAwAD/dUrAAK1DARzAAK1QFsAArUouml/AAEbYukwBAAEWwACtYIDAAK1awCJpCJpfwABG2ADAAEbLP07AAK16wACtggAAXmADwABG0AEWwACtiS6DtcAARtpDwACtkyEcwACtooHAAK2awCJpskgBAAErAMAA/3U+AknAAK2zHMAArb+BwACtt8AiabJIAQABgMAArcLAImkIAMAA/3VKwACtyQEpPz2JwACt3MAiabIWwACt7oHAAK3mwCJpsoO1wABG2krAAK3+ASoGwABHWoDCwACuE8AAriDAALJ0AAC6tgAAAAEDwACuK8AAsnQAAAADAwPAAK45AAAApUBgA8AAToUAwACuTwAAAIKUYAPAAGPLAMAArlkAAACCa2ADwAD+GwAAYAPAAEbQAT4KScAArmUcwACuboHAAK5pwCJqfEgBAAErAMAA/3VKwACudwEuPz2JwACuiMAianwWwACulIHAAK6PwCJqfLUgwABjzUAhFsAAr0OBwACvPsAianykCcAAY9bAAK89wACvUQBAIhbAAK9kgcAAr1/AImp8s4PAAGPOARbAAK93gcAAr3LAImp8urfAAGPVwACvX8AAr4UAScAAr4wWwACvlYHAAK+QwCJqfIedwABj0ErAAK+gAS4/ScAAr7EWwACvuoHAAK+1wCJqfLq4wABj0krAAK/CAS4/ScAAr9McwACv3IHAAK/XwCJqfEgBAAEWwACv+hbAAK/rgMAAr9/AImpstFnAAE6Nhii5qwDAAP91SsAAsAYBLj9JwACwFyIWwACwIIHAALAbwCJqfLq3wABj1QEWwACwN4HAALAywCJqfLq5wABj2D4BSsAAsEsBH8AAsFbAAEr+BQAFgcAAsGbAImp8gsAAsGzAImqMFsAAsJwWwACwiIDAALB8wCJqbLHGwABOjp7Sv0cuFsAAsK8upcLAAEbTAD9AFsAAsNmBwACw1MAiany0dcAAY9PAALDUwACw6ABJwACw7yIcwACw+ILAALDzwCJqjEgBAAFqwACxC2ADwAD+GwkAwAD/PwAhFsAAsR+BwACxGsAianyzg8AAY84+AT0wwACxMyTAALFsBSe6uoHAALFWwCJqfCe6uy4ngyY+A07AALGPwACxnQAAurxgA8AAY/MBJsAAsY8BgcAAsZ/AImp8YAPAAGPzTsAAsbnAALHBAACbSGADvzoBHMAAse4WwACxz4DAALHDwCJqbLHGwABOjrZYAQABFsAAshKDwACyBMAibMGWe8AAY/UAv2ZKwACyIgEfwACyLcAASv4FAAWBwACyPcAianyCwACyQ8AiaoyEwACyScAibOouFsAAslgupcLAAEbTAAbAAEdbgMLAALLZwACy3sAAs1MAALq9AAAAAQPAALLxwACzUwAAAAEBAcAAsv8AAACD22ADwABG0AAAYAPAAPxV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AAAAAABgA8AARtABSsAA0HkBHMAA0H8WwADQeS6CVcAARtZLAQABlADAAP7OBsAAR5SAwsAA0IbAANCXwADQqQEAJwAAAAEDwADQncAA0KkAAAAAAAAAYAPAAEbQAUrAANCgARzAANCmFsAA0KAuglXAAEbWSwEAAZMAwAD+zgbAAEeVgMLAANCtwADQvsAA0NABAKBLAAAAAQPAANDEwADQ0AAAAAAAAABgA8AARtABSsAA0McBHMAA0M0WwADQxy6CVcAARtZLAQABlQDAAP7OBsAAR5aAwsAA0WbAANF3wADRrQEAut0AAAABA8AA0YXAANGtAAAAAAAAAGADwABG0AFKwADRiAEjHMAA0ZYWwADRjxbAANGILoJVwABG1mHAAP7vgJcBAAGWAMAA/0scwADRohbAANGcLoJVwABG1ksBAAGWAMAA/s4WwADRqC4nwABHlAFgA8AARtAGwABHmIDCwADRscAA0cLAANHZAAC6lgFqwADRsmADwAD/aAIAAAEDwADRz8AA0dkAAAAAAAAAYAPAAPxVAUrAANHVASkGwABHmYDCwADR3sAA0erAANIkAACEUgFqwADR32ADwAD/aAIAAAEDwADR8MAA0iQAAAABAQHAANH6AAAAh1BdA8AARXkBWwAAWwFKwADSBgEcwADSDoDAANIGwCKIIbmXAQABLgDAAEWCBsAAR5qAwsAA0ijAANI4wADSaAAAup0BasAA0ilgA8AA/2gCAAABA8AA0kDAANJoAAAAAAAAAGADwAD+GwFKwADSRgFqwADSU2ADwAD+GyEGwABHm4DCwADSbMAA0n3AANKnAAC6nAFqwADSbWADwAD/aAIAAAEDwADSh8AA0qcAAAABAQHAANKIAAAIg9tgA8AARtAAAGADwAD8VQFKwADSkgElwADSmIDAANKSwCKI22ADwABHigbAAEecgMLAANKrwADSvMAA0uIAALqgAWrAANKsYAPAAP9oAgAAAQPAANLGwADS4gAAAAEBAcAA0tQAAAiD22ADwABG0AAAYAPAAPxVAUrAANLeASkAACKGIwAihnUAIobHACKHGgAih6YAIofrACKIVQAiiKUAIokNACKJYgAAAAkCwABHn4DCwADS58AA0vbAANQhB7reAAABYAHAAEemAAAAAQXAAEelgMLAANMiwADTIsAA04kAAAADwADTNMAA04kAAAACAgLAANNJAAAAt/5gA79FAMAA02QAAACCVV0DwAD+vwFgA8AARtAAAGADwABHnwE/AQkAwADTdMAAR6sCAAKAwADTesAiideBwADTgsAiieUAAwbAAEehgMLAANONwADTnsAA07QBAIXSAAAAAQPAANOowADTtAAAAAAAAABgA8AARtABSsAA06sBHMAA07EWwADTqy6CVcAARtZLAQABkwDAAP7OBsAAR6KAwsAA07jAANPIwADT6QEAut8AAAABA8AA09PAANPpAAAAAAAAAGADwABGmQFKwADT1gEcwADT5hbAANPcFsAA09Yuml/AAEbYujDAAEamSwEAAZMAwAD+zgbAAEejgMLAANPtwADT/cAA1B8BALrgAAAAAQPAANQJwADUHwAAAAAAAABgA8AARpkBSsAA1AwBHMAA1BwWwADUEhbAANQMLppfwABG2LowwABGpksBAAGUAMAA/s4AACKKJwAiinoAIorYACKLNgAAAAMCwABHpoDCwADUJMAA1DPAANXaB7rhAAABYAHAAEbQAAAAAQXAAEergMLAANRZwADUWcAA1YAAAAADwADUZcAA1YAAAAACAgLAANR6AAAAt/5gA79FAMAA1JUAAACCVV0DwAD+vwFgA8AARtAAAGADwABHpgE/AQkAwADVYcAAR14CAAKBwADVZ8Aii6EWwADVdoDAANVvwCKLk7ZNv1wAAgbAAEeogMLAANWEwADVlcAA1awAALqWAWrAANWFYAPAAP9oAgAAAQPAANWiwADVrAAAAAAAAABgA8AA/FUBSsAA1agBKQbAAEepgMLAANWwwADVwcAA1dgAALq1AWrAANWxYAPAAP9oAgAAAQPAANXOwADV2AAAAAAAAABgA8AA/FUBSsAA1dQBKQAAIovsACKMMQAijHYAAAACAsAAR6yAwsAA1gfAANYNwADa1gO64gAAAWABwABG0AAABATAAEeugMLAANZAwADWRwmWewBgA74TAATAAEevgMLAANakwADWrwm64wBgA8AA/FUABMAAR7CAwsAA1//AANgQGLrkAF0DwAD+vwFgA8AAY/MABMAAR7GAwsAA2IzAANiWGLVfAGADvjoAAQXAAEe5gMLAANibwADYm8AA2aUAAAADwADYosAA2aUAAAAHBATAANioAAAElntgA74TAMAA2MQAAACCVV0DwAD+vwFgA8AARtAAwADY2gAAAIKUYAO/OgDAANj4AAAApcJgA8AAQzQAA8AA2RcAAAS65F0DwAD+vwFgA8AAY/MBagBgA8AA/yV5wADZLwAABLrjYAPAAPxVAWrAANk8YAPAAPxVAMAA2UgAAAS1X2ADvjoBagBgA8AA/yV5YAPAAEesAT4BPRfAANl8LqXCg8AA2ZDAIo1twABG0wUIAcAAR66AAMAijToIAcAAR7CEAMAijX4IAcAAR6+FAMAijZ4IAcAAR7GGAMAijboJAMAA2V3AAEdeAgACgcAA2WPAIo1IgsAA2WvAIo1fAAQGwABHs4DCwADZqsAA2bvAANnrAAC6lAFqwADZq2ADwAD/aAIAAAEDwADZx8AA2esAAAABAQHAANncAAAAt/5gA79FAABgA8AA/FUBSsAA2ecBKQbAAEe3gMLAANnwwADaAcAA2j8BALrlAAAAAQPAANoKwADaPwAAAAAAAABgA8AARtABPgJAFsAA2hcuuuPAAEevwADaF8AA2iIASsAA2ikBFsAA2jcWwADaMC6CVcAARtaB6sAA/qQGwABHtIDCwADaRMAA2lDAANqFAACEUgFqwADaRWADwAD/aAIAAAEDwADaVsAA2oUAAAABAQHAANpgAAAAh1BdA8AARXkBWwAAWwFKwADabAEcwADadIDAANpswCKPMrmYAQABLgDAAEWGBsAAR7WAwsAA2orAANqdwADa1AAAIwFqwADai2ADwAD/aAIAAAEDwADapcAA2tQAAAAAAAAAYAPAAQACAUrAANqrASTAANrUBSe65hbAANq1LpZ7wABHrieBixbAANrALrrkwABHsCeDJgAAIo5CACKOlQAijvwAIo9mACKP0AAAAAQCwABHuoDCwADbEMAA2xbAANw9A7rnAAABYAHAAEbQAAAAAQXAAEfAgMLAANs6wADbOsAA23gAAAADwADbRMAA23gAAAABAQHAANtTAAAAgpRgA786AABgA8AAR7oBPwEJAMAA21vAAEdeAgACMcAA229gA8AARtAAgMAA23PAIpAxAAMGwABHvIDCwADbfcAA247AANu+AAC6lAFqwADbfmADwAD/aAIAAAEDwADbmsAA274AAAABAQHAANuvAAAAt/5gA79FAABgA8AA/FUBSsAA27oBKQbAAEe9gMLAANvDwADbz8AA3AcA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/cABCxsBALsUAAAAAQPAAQsJwAELGwAAAAAAAABgA8AA/FUBSsABCwwBHMABCxQWwAELDC6We8AASDVIAQABKwDAAP91BsAASEKAwsABCyDAAQsswAELYwAAhFIBasABCyFgA8AA/2gCAAABA8ABCzLAAQtjAAAAAQEBwAELPAAAAIdQXQPAAEV5AVsAAFsBSsABC0gBHMABC1CAwAELSMAit/u5nQEAAS4AwABFiwbAAEhDgMLAAQtowAELeMABC6UAALqdAWrAAQtpYAPAAP9oAgAAAQPAAQuAwAELpQAAAAAAAABgA8AA/hsBSsABC4YBasABC5NgA8AA/hvAAG0HBsAASESAwsABC6nAAQu6wAEL4QAAupwBasABC6pgA8AA/2gCAAABA8ABC8TAAQvhAAAAAQEBwAELxQAACIPbYAPAAEbQAABgA8AA/FUBSsABC88BJcABC9WAwAELz8AiuLhgA8AASDoGwABIRYDCwAEL5cABC/bAAQwtAAC6oAFqwAEL5mADwAD/aAIAAAEDwAEMAMABDC0AAAABAQHAAQwLAAAIg9tgA8AASDoAAGADwAD8VQFKwAEMFQEcwAEMHRbAAQwVLpZ7wABINUgBAAEWwAEMJoDAAQwgwCK5IJZ7wABINQDAAP91BsAASEaAwsABDDHAAQxEwAEMhAAAIwFqwAEMMmADwAD/aAIAAAEDwAEMTMABDIQAAAAAAAAAYAPAAQACAUrAAQxSASTAAQyEBSe7FRbAAQxlLpZ7wABINSe7FhbAAQxzLrqLwABHECeDJgAAIrVHACK2TgAits0AIrctACK3cgAit8UAIrgvACK4ggAiuOoAIrlsACK51gAAAAoCwABIS4DCwAEMicABDI/AARAHA7sXAAABYAHAAEgzAAAAAQXAAEhWgMLAAQyywAEMssABDekAAAADwAEMu8ABDekAAAAEBATAAQzQAAAAt/5gA79FAMABDOQAAACWe2ADvjcAwAENAAAAAIWXYAPAAEbQAMABDRcAAACAlmADwABG0AAAYAPAAEhLAT4DPRzAAQ16FsABDW4utWPAAEbbuxAAAAAAwAB58D0cwAENoRbAAQ2VLrVjwABG27sRAAAAAMAAefI9HMABDckWwAENvS61Y8AARtu4mwAAAADAAHoCAQkAwAENJsAASDkDAAOBwAENLMAiul0xwAENQ2ADwABG0AKCwAENRMAiumuDwAENTsAiunsWwAENXYDAAQ1WwCK6T7ZNv1wABwbAAEhNgMLAAQ3uwAEN/8ABDlYAALqTAWrAAQ3vYAPAAP9oAgAAAQPAAQ4HwAEOVgAAAAEBAcABDhwAAAC3/mADv0UAAGADwAD8VQFKwAEOLQEWwAEORRzAAQ42FsABDi0uhZfAAEg3qFwBAAGAwAEOPcAiu2gAwABHHrO9vykGwABIToDCwAEOW8ABDnTAAQ6pAAC6mAFqwAEOXGADwAD/aAIAAAEDwAEOg8ABDqkAAAABAQHAAQ6RAAAApUBgA8AAToUAAGADwABG0AFKwAEOoQEWwAEOoS6Fl8AASDcGwABIT4DCwAEOrcABDr7AAQ7VAAC6mQFqwAEOrmADwAD/aAIAAAEDwAEOy8ABDtUAAAAAAAAAYAPAAPxVAUrAAQ7RASkGwABIVIDCwAEO2sABDuvAAQ79AQCAlgAAAAEDwAEO8cABDv0AAAAAAAAAYAPAAEbQAUrAAQ70ARzAAQ76FsABDvQuglXAAEbWSwEAAZQAwAD+zgbAAEhQgMLAAQ8BwAEPDcABD0QAAIRSAWrAAQ8CYAPAAP9oAgAAAQPAAQ8TwAEPRAAAAAEBAcABDx0AAACHUF0DwABFeQFbAABbAUrAAQ8pARzAAQ8xgMABDynAIrzfuZ4BAAEuAMAARYwGwABIUYDCwAEPe8ABD4zAAQ+tAAC6tQFqwAEPfGADwAD/aAIAAAEDwAEPmcABD60AAAAAAAAAYAPAAPxVAUrAAQ+fARbAAQ+mFsABD58uuibAAEbXgVXAAP6hBsAASFKAwsABD7LAAQ/FwAEQBQAAIwFqwAEPs2ADwAD/aAIAAAEDwAEPzcABEAUAAAAAAAAAYAPAAQACAUrAAQ/TASTAARAFBSe7GBbAAQ/mLpZ7wABINSe7FhbAAQ/0LrqLwABHECeDJgAAIrsyACK7sQAivBEAIrxWACK8qQAivRMAIr1uACK92AAAAAcCwABIV4DCwAEQCsABEBDAARQEA7sZAAABYAHAAEbQAAABBMAASFmAwsABED/AARBLCazgAGADwAD8VQABBcAASGaAwsABEE/AARBPwAERswAAAAPAARBZwAERswAAAAMCAsABEGcAAACFl2ADwABG0ADAARB/AAAAgpRgA786AAHAARCWAAAErOBgA8AA/FUBagBgA8AA/yV5YAPAAEhXAT4FQCEcwAEQ7RbAARDgLqzgwABIWUgBAAErAMAA/3XAARDgwAEQ9AA9HMABEQcWwAEQ+y61Y8AARtu7EAAAAADAAHnwPRzAAREuFsABESIutWPAAEbbuxEAAAAAwAB58j0cwAERSi66jgAAAADAAEcXScABEVsWwAERZC6s4MAASFk+AT0cwAERhhbAARF6LrVjwABG27iaAAAAAMAAegA/AggBwABIWYIAwCK+fgkAwAEQrcAAR14CAAIxwAEQwWADwABG0AGAwAEQwsAivl+BwAEQzcAivm8ACQbAAEhbgMLAARG4wAERycABEeIBAIWXAAAAAQPAARHSwAER4gAAAAAAAABgA8AARtABSsABEdUBFsABEdwWwAER1S6CVcAARtaAw8AA/qUGwABIXYDCwAER58ABEfjAARJPAAC6kwFqwAER6GADwAD/aAIAAAEDwAESAMABEk8AAAABAQHAARIVAAAAt/5gA79FAABgA8AA/FUBSsABEiYBFsABEj4cwAESLxbAARImLoWXwABIW6hcAQABgMABEjbAIr/+AMAARx6zvb8pBsAASF6AwsABElTAARJtwAESogAAupgBasABElVgA8AA/2gCAAABA8ABEnzAARKiAAAAAQEBwAESigAAAKVAYAPAAE6FAABgA8AARtABSsABEpoBFsABEpouhZfAAEhbBsAASF+AwsABEqbAARK3wAESzgAAupkBasABEqdgA8AA/2gCAAABA8ABEsTAARLOAAAAAAAAAGADwAD8VQFKwAESygEpBsAASGCAwsABEtPAARLfwAETFwAAhFIBasABEtRgA8AA/2gCAAABA8ABEuXAARMXAAAAAQEBwAES7wAAAIdQXQPAAEV5AVsAAFsBSsABEvsBHMABEwOAwAES+8AiwSK5oAEAAS4AwABFjgbAAEhhgMLAARMcwAETLMABE1oAALqdAWrAARMdYAPAAP9oAgAAAQPAARM0wAETWgAAAAAAAABgA8AA/hsBSsABEzoBasABE0dgA8AA/hvAAEfwBsAASGKAwsABE17AARNvwAETlwAAupwBasABE19gA8AA/2gCAAABA8ABE3nAAROXAAAAAQEBwAETegAACIPbYAPAAEbQAABgA8AA/FUBSsABE4QBJcABE4qAwAEThMAiwd9gA8AASFcGwABIY4DCwAETm8ABE6zAARPQAAC6oAFqwAETnGADwAD/aAIAAAEDwAETtsABE9AAAAABAQHAARPCAAAIg9tgA8AASFcAAGADwAD8VQFKwAETzAEpBsAASGSAwsABE9TAARPnwAEUAgAAIwFqwAET1WADwAD/aAIAAAEDwAET78ABFAIAAAAAAAAAYAPAAQACAUrAARP1ASe7GgAAIr95ACK/yAAiwEcAIsCnACLA7AAiwVYAIsGpACLCEQAiwmYAIsKsAAAACQLAAEhngMLAARSRwAEUl8ABG4EDuxsAAAFgAcAAR34AAAYEwABIaYDCwAEU0sABFN8GuxwAYAPAAP4bAWrAARTeYAPAAP4bCQTAAEhqgMLAARTwwAEU+ga7HQBgA8AA/hsBasABFPlgA8AA/hsVBMAASGuAwsABFQvAARUWBrseAGADwAD+GwFqwAEVFWADwAD+GyEEwABIbIDCwAEVLMABFTMJlnsAYAO+NwAEwABIbYDCwAEVRMABFUgJux8AYAPAAQACAATAAEhugMLAARVWwAEVXAm7IABgA8AA/hsABAXAAEh+gMLAARVhwAEVYcABFqEAgLXAAEV4AAPAARVzwAEWoQAAAAUFBcABFXkAAASWe2ADvjcAwAEVhwAABLsfYAPAAQACAMABFZIAAAS7IGADwAD+GwDAARWzAAAAglVdA8AA/r8BYAPAAEbQAMABFckAAACClGADvzoAAGADwABIZwE+BD0cwAEV/RbAARXxLrVjwABG27sQAAAAAMAAefA9HMABFiQWwAEWGC61Y8AARtu7EQAAAADAAHnyPRzAARZMFsABFkAutWPAAEbbuJsAAAAAwAB6Aj0cwAEWehbAARZuLrVjwABG27iaAAAAAMAAegAECAHAAEhsgADAIsPkCAHAAEhtgQDAIsPyCAHAAEhuggDAIsQCCQDAARXXwABHgAIAAoPAARXdwCLEEoTAARXlwCLEKQAFwABIf4DCwAEWpsABFqbAAReHALshAAPAARa/wAEXhwAAAAUFBcABFswAAACWe2ADvjcAwAEW3AAAALsfYAPAAQACAMABFvUAAACFl2ADwABG0ADAARcMAAAAhcpgA8AARtAAwAEXIwAAAIKUYAO/OgAAYAPAAEhnAT8BCgDAARc2wABIfgUABYDAARdFwCLFHIHAARdOwCLFKmrAARdUYAPAAP4bCTHAARdtYAPAAEbQAoLAARduwCLFOoPAARd4wCLFSoTAAReCwCLFWgAFwABIgIDCwAEXjMABF4zAARg7ALsiAAPAAReiwAEYOwAAAAQEBMABF68AAACWe2ADvjcAwAEXvwAAALsfYAPAAQACAMABF9gAAACFl2ADwABG0ADAARfwAAAAgpRgA786AABgA8AASGcBPwEKAMABGAPAAEh+BQAFgMABGAXAIsXrgcABGA7AIsX5asABGBRgA8AA/hsVMcABGCpgA8AARtABgsABGCvAIsYJg8ABGDbAIsYZAAXAAEiBgMLAARhAwAEYQMABGPEAuyMAA8ABGFfAARjxAAAABAQEwAEYZAAAAJZ7YAO+NwDAARh0AAAAux9gA8ABAAIAwAEYjQAAAIWXYAPAAEbQAMABGKUAAACClGADvzoAAGADwABIZwE/AQoAwAEYuMAASH4FAAWAwAEYusAixqGBwAEYw8Aixq9qwAEYyWADwAD+GyExwAEY4GADwABG0AGCwAEY4cAixr+DwAEY7MAixs8ACwbAAEhwgMLAARj2wAEZB8ABGRwBAIWXAAAAAQPAARkQwAEZHAAAAAAAAABgA8AARtABSsABGRMBHMABGRkWwAEZEy6CVcAARtZLAQABkwDAAP7OBsAASHGAwsABGSHAARkqwAEZRQEAuyQAAAABA8ABGTLAARlFAAAAAAAAAGADwAD8VQFKwAEZNQEcwAEZPBbAARk1LrsgwABIbkgBAAFqwAEZP2ADwAD+GxUAwAD/PwbAAEhygMLAARlJwAEZUsABGW8BALslAAAAAQPAARlbwAEZbwAAAAAAAABgA8AA/FUBSsABGV4BHMABGWUWwAEZXi67IMAASG5IAQABasABGWhgA8AA/hshAMAA/z8GwABIc4DCwAEZc8ABGXzAARmdAQC7JgAAAAEDwAEZh8ABGZ0AAAAAAAAAYAPAAPxVAUrAARmKARzAARmRFsABGYouuyDAAEhuSAEAAWrAARmUYAPAAP4bCQDAAP8/BsAASHaAwsABGaLAARmzwAEaCgAAupMBasABGaNgA8AA/2gCAAABA8ABGbvAARoKAAAAAQEBwAEZ0AAAALf+YAO/RQAAYAPAAPxVAUrAARnhARbAARn5HMABGeoWwAEZ4S6Fl8AASHCoXAEAAYDAARnxwCLI1QDAAEces72/KQbAAEh3gMLAARoPwAEaKMABGl0AALqYAWrAARoQYAPAAP9oAgAAAQPAARo3wAEaXQAAAAEBAcABGkUAAAClQGADwABOhQAAYAPAAEbQAUrAARpVARbAARpVLoWXwABIcAbAAEh4gMLAARphwAEacsABGokAALqZAWrAARpiYAPAAP9oAgAAAQPAARp/wAEaiQAAAAAAAABgA8AA/FUBSsABGoUBKQbAAEh0gMLAARqOwAEan8ABGrEBAICWAAAAAQPAARqlwAEasQAAAAAAAABgA8AARtABSsABGqgBHMABGq4WwAEaqC6CVcAARtZLAQABlADAAP7OBsAASHmAwsABGrXAARrBwAEa/wAAhFIBasABGrZgA8AA/2gCAAABA8ABGsfAARr/AAAAAQEBwAEa0QAAAIdQXQPAAEV5AVsAAFsBSsABGt0BHMABGuWAwAEa3cAiyky5wQEAAS4AwABFsQbAAEh6gMLAARsEwAEbFcABGzIAALq1AWrAARsFYAPAAP9oAgAAAQPAARsiwAEbMgAAAAAAAABgA8AA/FUBSsABGygBFsABGyguuybAAEhzBsAASHuAwsABGzbAARtJwAEbfwAAIwFqwAEbN2ADwAD/aAIAAAEDwAEbUcABG38AAAAAAAAAYAPAAQACAUrAARtXASTAARt/Bie7JxbAARtpLrsfwABIbSeA2RbAARtvLrsgwABIbieA2RbAARt3LpZ7wABIbAAAIscyACLHhQAix+MAIshBACLInwAiyR4AIsl+ACLJwwAiyhYAIsqAACLK0AAiy0YAAAALAsAASIKAwsABG4TAARuTwAEcZQe7KAAAAWABwABG0AAAAQTAAEiEgMLAARvFwAEbzQmCcABgA75eAAEFwABIiIDCwAEb0sABG9LAARw4AAAAA8ABG97AARw4AAAAAwMDwAEb5AAABIJwYAO+XgDAARwBAAAAglVdA8AA/r8BYAPAAEbQAMABHBcAAACClGADvzoAAGADwABIggE/AggBwABIhIAAwCLL2wkAwAEcJcAAR14CAAKBwAEcK8Aiy+mCwAEcM8AizAAAAQbAAEiGgMLAARw9wAEcTsABHGMBAIWXAAAAAQPAARxXwAEcYwAAAAAAAABgA8AARtABSsABHFoBHMABHGAWwAEcWi6CVcAARtZLAQABkwDAAP7OAAAizEUAIsyYAAAAAQLAAEiJgMLAARxowAEcbsABHiIDuykAAAFgAcAASIIAAAABBcAASI+AwsABHNzAARzcwAEdsQAAAAPAARzlwAEdsQAAAAQEBMABHOwAAACCcGADvl4AwAEdAgAAAJ8zYAPAAEnDAMABHRcAAACClGADvzoAwAEdNQAAAKXCYAPAAEM0AABgA8AASIkBPgE9F8ABHYgupcKDwAEdnMAizRnAAEbTAQkAwAEdUMAASIgDAAOAwAEdVsAizO0xwAEdbmADwABG0AGBwAEdb8AizPuCwAEdd8AizQsAAgbAAEiLgMLAAR22wAEdwsABHfkAAIRSAWrAAR23YAPAAP9oAgAAAQPAAR3IwAEd+QAAAAEBAcABHdIAAACHUF0DwABFeQFbAABbAUrAAR3eARzAAR3mgMABHd7AIs22ubcBAAEuAMAARaYGwABIjYDCwAEd/sABHg7AAR4gAQCfMwAAAAEDwAEeFMABHiAAAAAAAAAAYAPAAEnDAUrAAR4XASbAAR4XARzAAR4dFsABHhcuglXAAEbWSwEAAZMAwAD+zmADwABJwwAAIs2AACLN6gAizkkAAAACAsAASJCAwsABHiXAAR4rwAEfvAO7KgAAAWABwABIggAAAAEFwABImIDCwAEeTsABHk7AAR74AAAAA8ABHlfAAR74AAAABAQEwAEebAAAALf+YAO/RQDAAR56AAAAgnBgA75eAMABHpAAAACfM2ADwABJwwDAAR6qAAAAgJZgA8AARtAAAGADwABIkAE/AQkAwAEeucAASIgDAAOBwAEev8AizrAxwAEe12ADwABG0AKCwAEe2MAizr6DwAEe38Aizs4WwAEe7oDAAR7nwCLOorZNv1wABAbAAEiSgMLAAR79wAEfCcABH0AAAIRSAWrAAR7+YAPAAP9oAgAAAQPAAR8PwAEfQAAAAAEBAcABHxkAAACHUF0DwABFeQFbAABbAUrAAR8lARzAAR8tgMABHyXAIs9mubgBAAEuAMAARacGwABIlYDCwAEfRcABH1XAAR9nAQCfMwAAAAEDwAEfW8ABH2cAAAAAAAAAYAPAAEnDAUrAAR9eASbAAR9eARzAAR9kFsABH14uglXAAEbWSwEAAZMAwAD+zmADwABJwwbAAEiWgMLAAR9rwAEffMABH44BAICWAAAAAQPAAR+CwAEfjgAAAAAAAABgA8AARtABSsABH4UBHMABH4sWwAEfhS6CVcAARtZLAQABlADAAP7OBsAASJOAwsABH5LAAR+jwAEfugAAurUBasABH5NgA8AA/2gCAAABA8ABH7DAAR+6AAAAAAAAAGADwAD8VQFKwAEftgEpAAAizzAAIs+aACLP+QAi0EwAItCRAAAABALAAEiZgMLAAR+/wAEfzsABIRoHuysAAAFgAcAARtAAAAABBcAASKCAwsABH/DAAR/wwAEgPQAAAAPAAR/4wAEgPQAAAAICAsABIAcAAACClGADvzoAwAEgIAAAAIJVXQPAAP6/AWADwABG0AAAYAPAAEiZAT8BCQDAASAqwABHXgIAAoHAASAwwCLRAIDAASA4wCLQ8gADBsAASJuAwsABIELAASBLwAEgXwEAuywAAAABA8ABIFfAASBfAAAAAAAAAGADwAD8VQFKwAEgWgEqBsAASJyAwsABIGPAASB2wAEgjAEAsEUAAAABA8ABIIXAASCMAAAAAAAAAGADwABolgFKwAEgiAErBsAASJ6AwsABIJHAASCiwAEhGAAAupMBasABIJJgA8AA/2gCAAABA8ABIKrAASEYAAAAAQEBwAEgvwAAALf+YAO/RQAAYAPAAPxVAT4BSsABIM0BIhzAASDgFsABINQutWPAAEbbupEAAAAAwAB57QEcwAEhABbAASD0LrVjwABG27qSAAAAAMAAee4AACLRQgAi0XsAItG0ACLSQAAAAAMCwABIoYDCwAEhHcABISPAASqJA7stAAABYAHAAEiZAAAFBMAASKOAwsABIVfAASFjCbsuAGADwACbGgAEwABIpIDCwAEhfsABIYkJuywBasABIWhgA8AA/2gCYAPAAPxVAATAAEilgMLAASGuwAEhvAmwRQFqwAEhjmADwAD/aAJgA8AAaJYABMAASKaAwsABIdTAASHhGLsvAGADwABofgAEwABIp4DCwAEh+sABIgkJuzAAYAO+OgACBcAASLOAwsABIg7AASIOwAElZAAAAAPAASIawAElZAAAAAgDA8ABIiAAAAS7LmADwACbGgDAASI8AAAAgpRgA786AMABIlUAAACCVV0DwAD+vwFgA8AARtAABcABImkAAAS7LGADwAD8VQFqwAEidmADwAD8VQDAASKPAAAAuzFgA8AAedUBagBgA8AA/yV5wAEirQAAALBFYAPAAGiWAWoAYAPAAP8lecABItcAAAC7L2ADwABofgFqAGADwAD/JXnAASLxAAAEuzBgA746AWoAYAPAAP8leWADwABIoQE+BkAhHMABI5MWwAEjhi67LsAASKNIAQABKwDAAP91wAEjhsABI5oAScABI6EiHMABI62EwAEjpcAi04dIAQABKwDAAHnmACEcwAEjx4XAASO4wCLToEgBAAErAMAA/3U+AT2MwAEj2MAi04cWwAEj8YXAASPiwCLToLVjwABonT9JwAEkCBzAASQfFsABJBEuuy/AAEimSAEAASsAwAD/dT4BPRfAASQ1LrsvIxzAASRVhcABJEbAItOgSAEAASsAwAD/dWrAASR+YAPAAGh+wAD7ZRbAASSdhcABJI7AItOguy/AAGieAWADwABofsAASKY/QCEcwAEk0BbAASTCLrsvwABIpkgBAAErAMAA/3XAASS9wAEk1wBJwAEk3yEcwAEk64TAASTjwCLTh0gBAAErAMAAeeY9HMABJQAWwAEk9C61Y8AARttWAQABhMABJQTAItOHAMAAegc/ScABJRIiIRzAASUlhcABJRbAItOgSAEAASsAwAD/dQAWwAElP4XAASUwwCLToLqNwABooD4BPRzAASVPLrqOAAAAAMAARxc/BggBwABIo4AAwCLTNQgBwABIpIMAwCLTawgBwABIp4cAwCLT0ggAwABIpYXAASMhwCLToAgAwABIpobAASNOwCLTuQkAwAEjZcAASKACAAKBwAEja8Ai00WCwAEjccAi01MABcAASLSAwsABJWnAASVpwAEmlACFaAADwAElf8ABJpQAAAAFBQXAASWMAAAAuy5gA8AAmxoAwAElrQAAAIJVXQPAAP6/AWADwABG0ADAASXHAAAAuzFgA8AAedUAwAEl3wAAALBFYAPAAGiWAMABJf0AAACClGADvzoAAGADwABIoQE/AQoAwAEmC8AASLMGAAOAwAEmEMAi1h6EwAEmHsAi1mWBwAEmJMAi1i4DuywpuzGCwAEmYMAi1kWwRYPAASaFwCLWVQkGwABIqYDCwAEmmcABJqXAASbfAACEUgFqwAEmmmADwAD/aAIAAAEDwAEmq8ABJt8AAAABAQHAASa1AAAAh1BdA8AARXkBWwAAWwFKwAEmwQEcwAEmyYDAASbBwCLW9rmfAQABLgDAAEWNBsAASKqAwsABJuTAASb1wAEnEwAAurUBasABJuVgA8AA/2gCAAABA8ABJwLAAScTAAAAAAAAAGADwAD8VQFKwAEnCAEWwAEnCC67LMAASKQGwABIq4DCwAEnF8ABJyjAASgjAAC6kwFqwAEnGGADwAD/aAIAAAEDwAEnMMABKCMAAAABAQHAASdFAAAAt/5gA79FAABgA8AA/FUBPgJJwAEnUxzAASdlFsABJ14WwAEnVy6CVcAARtZhwAD+74CXAQABkwDAAP9LPgFKwAEncgEjFsABJ5UcwAEnhhbAASeAFsABJ3kuglXAAEbWgx7AAP6jqFwBAAGAwAEnjcAi17AAwABHHrO9vykWwAEnwRbAASezLrsvwABIprqTwABoiBbAASfuFsABJ+QWwAEn1i67L8AASKa7MsAAaIu6k8AAaIgBYAPAAPxVP0rAASgCARbAASgXFsABKAkuuy/AAEimupPAAGiIBsAASKyAwsABKCjAASg5wAEobAAAupkBasABKClgA8AA/2gCAAABA8ABKEbAAShsAAAAAAAAAGADwAD8VQFKwAEoTAEWwAEoWhbAAShMLrsvwABIprszwABoigbAAEitgMLAAShxwAEogsABKRkAALqUAWrAAShyYAPAAP9oAgAAAQPAASiOwAEpGQAAAAEBAcABKKMAAAC3/mADv0UAAGADwAD8VQFKwAEotAEiIiEcwAEowxbAASi0LrBFwABIpUgBAAErAMAA/3UAFsABKOMWwAEo1C6wRcAASKW6lMAAaJ8AFsABKQgcwAEo+S6oXAEAAYDAASkAwCLZIwDAAEcetjW/KgbAAEiugMLAASkewAEpLsABKV4AALqdAWrAASkfYAPAAP9oAgAAAQPAASk2wAEpXgAAAAAAAABgA8AA/hsBSsABKTwBasABKUlgA8AA/hu0nQbAAEivgMLAASliwAEpc8ABKZ0AALqcAWrAASljYAPAAP9oAgAAAQPAASl9wAEpnQAAAAEBAcABKX4AAAiD22ADwABG0AAAYAPAAPxVAUrAASmIASXAASmOgMABKYjAItofYAPAAEihBsAASLCAwsABKaHAASmywAEqOQAAuqABasABKaJgA8AA/2gCAAABA8ABKbzAASo5AAAAAQEBwAEpygAACIPbYAPAAEihAABgA8AA/FUBPgFKwAEp1wEiIRzAASnyFsABKesWwAEp3i67LsAASKODSsAAmxxIAQABKwDAAQARABzAASoZFsABKhIWwAEqBS67LsAASKODSsAAmxxIAQABFsABKi8WwAEqIoDAASocwCLah7suwABIo4NKwACbHADAAQARBsAASLGAwsABKj7AASpRwAEqhwAAIwFqwAEqP2ADwAD/aAIAAAEDwAEqWcABKocAAAAAAAAAYAPAAQACAUrAASpfASTAASqHAye7NBbAASp9FsABKnAuuy7AAEijg0rAAJscJ7s1AAAi1sAAItcqACLXegAi2JIAItjtACLZmAAi2ekAItpRACLbFAAi23oAAAAJAsAASLWAwsABKozAASqbwAEsXQe7NgAAAWABwABG0AAAAQTAAEi3gMLAASrdwAEq5QmlUgFqwAEqw2ADwAD/aAJgA8AATLgAAQXAAEi+gMLAASrpwAEq6cABK90AAAADwAEq9sABK90AAAAEBATAASsLAAAAhc1gA8AARtAAwAErHgAAAIXPYAPAAEbQAMABKyoAAASlUmADwABMuADAAStCAAAAgpRgA786AABgA8AASLUBPgM9HMABK4sWwAErfy61Y8AARtu7EAAAAADAAHnwPRzAASuyFsABK6YutWPAAEbbuxEAAAAAwAB58j0cwAErzi66jgAAAADAAEcXAggBwABIt4IAwCLcNQkAwAErUMAAR14CAAIxwAErZGADwABG0AKAwAErZcAi3BWBwAEra8Ai3CWDwAErc8Ai3EUAAwbAAEi5gMLAASviwAEr88ABLAQBAIXNAAAAAQPAASv4wAEsBAAAAAAAAABgA8AARtABSsABK/sBHMABLAEWwAEr+y6CVcAARtZLAQABkwDAAP7OBsAASLqAwsABLAjAASwZwAEsKwEAhc8AAAABA8ABLB/AASwrAAAAAAAAAGADwABG0AFKwAEsIgEcwAEsKBbAASwiLoJVwABG1ksBAAGUAMAA/s4GwABIvIDCwAEsMMABLFDAASxbAAKdKAAAAAEDwAEsWcABLFsAAAAAAAAAYAPAAGrzAAAAItzpACLdPAAi3Y8AIt3BAAAAAwLAAEi/gMLAASxgwAEsb8ABLWgHuzcAAAFgAcAASLUAAAABBcAASMOAwsABLJvAASybwAEtKwAAAAPAASyswAEtKwAAAAQEBMABLLoAAACFzWADwABG0ADAASzNAAAAhc9gA8AARtAAwAEs3QAAAKVSYAPAAEy4AMABLPsAAACClGADvzoAAGADwABIvwE/AQkAwAEtCcAASL4EAASAwAEtD8Ai3h6BwAEtFcAi3i6CwAEtHMAi3j6DwAEtJsAi3k4AAQbAAEjBgMLAAS0vwAEtW8ABLWYAAp0oAWrAAS0wYAPAAP9oAgAAAQPAAS1kwAEtZgAAAAAAAABgA8AAavMAAAAi3pkAIt7XAAAAAQLAAEjEgMLAAS1rwAEtccABL1sDuzgAAAFgAcAASL8AAAABBcAASMyAwsABLZTAAS2UwAEuFwAAAAPAAS2YwAEuFwAAAAQEBMABLaYAAACFzWADwABG0ADAAS25AAAAhc9gA8AARtAAwAEtyQAAAKVSYAPAAEy4AMABLecAAACClGADvzoAAGADwABIxAE/AQkAwAEt9cAASMMEAASAwAEt+8Ai3yyBwAEuAcAi3zyCwAEuCMAi30yDwAEuEsAi31wABQbAAEjGgMLAAS4bwAEuJ8ABLlkAAIRSAWrAAS4cYAPAAP9oAgAAAQPAAS4twAEuWQAAAAEBAcABLjcAAACHUF0DwABFeQFbAABbAUrAAS5DARzAAS5LgMABLkPAIt/duZIBAAEuAMAARXwGwABIx4DCwAEuXsABLorAAS6sAACdKAFqwAEuX2ADwAD/aAIAAAEDwAEuk8ABLqwAAAAAAAAAYAPAAGrzAUrAAS6ZAWrAAS6pYAPAAGuUwAD7cQbAAEjIgMLAAS6wwAEuwMABLucAALqdAWrAAS6xYAPAAP9oAgAAAQPAAS7IwAEu5wAAAAAAAABgA8AA/hsBSsABLs4BasABLttgA8AA/huCPwbAAEjJgMLAAS7rwAEu/MABLx4AALqcAWrAAS7sYAPAAP9oAgAAAQPAAS8GwAEvHgAAAAEBAcABLwcAAAiD22ADwABG0AAAYAPAAPxVAUrAAS8RASXAAS8XgMABLxHAIuDrYAPAAEjEBsAASMqAwsABLyLAAS8zwAEvWQAAuqABasABLyNgA8AA/2gCAAABA8ABLz3AAS9ZAAAAAQEBwAEvSwAACIPbYAPAAEbQAABgA8AA/FUBSsABL1UBKQAAIt+nACLgEQAi4GQAIuC1ACLhHQAi4XIAAAAFAsAASM2AwsABL17AAS9kwAExYAO7OQAAAWABwABIvwAAAAEFwABI1YDCwAEvisABL4rAATAQAAAAA8ABL5HAATAQAAAABAQEwAEvnwAAAIXNYAPAAEbQAMABL7IAAACFz2ADwABG0ADAAS/CAAAApVJgA8AATLgAwAEv4AAAAIKUYAO/OgAAYAPAAEjNAT8BCQDAAS/uwABIwwQABIDAAS/0wCLh14HAAS/6wCLh54LAATABwCLh94PAATALwCLiBwAFBsAASM+AwsABMBTAATAgwAEwVQAAhFIBasABMBVgA8AA/2gCAAABA8ABMCbAATBVAAAAAQEBwAEwMAAAAIdQXQPAAEV5AVsAAFsBSsABMDwBHMABMESAwAEwPMAi4oi5mgEAAS4AwABFiAbAAEjQgMLAATBawAEwhsABMKsAAJ0oAWrAATBbYAPAAP9oAgAAAQPAATCPwAEwqwAAAAAAAABgA8AAavMBSsABMJUBasABMKVgA8AAa4rAAPuABsAASNGAwsABMK/AATC/wAEw6QAAup0BasABMLBgA8AA/2gCAAABA8ABMMfAATDpAAAAAAAAAGADwAD+GwFKwAEwzQFqwAEw2mADwAD+G4LhBsAASNKAwsABMO3AATD+wAExIwAAupwBasABMO5gA8AA/2gCAAABA8ABMQjAATEjAAAAAQEBwAExCQAACIPbYAPAAEbQAABgA8AA/FUBSsABMRMBJcABMRmAwAExE8Ai45ZgA8AASM0GwABI04DCwAExJ8ABMTjAATFeAAC6oAFqwAExKGADwAD/aAIAAAEDwAExQsABMV4AAAABAQHAATFQAAAIg9tgA8AARtAAAGADwAD8VQFKwAExWgEpAAAi4lIAIuK8ACLjDwAi42AAIuPIACLkHQAAAAUCwABI1oDCwAExY8ABMWnAATNxA7s6AAABYAHAAEi/AAAAAQXAAEjegMLAATGRwAExkcABMhkAAAADwAExmsABMhkAAAAEBATAATGoAAAAhc1gA8AARtAAwAExuwAAAIXPYAPAAEbQAMABMcsAAAClUmADwABMuADAATHpAAAAgpRgA786AABgA8AASNYBPwEJAMABMffAAEjDBAAEgMABMf3AIuSCgcABMgPAIuSSgsABMgrAIuSig8ABMhTAIuSyAAUGwABI2IDCwAEyHcABMinAATJgAACEUgFqwAEyHmADwAD/aAIAAAEDwAEyL8ABMmAAAAABAQHAATI5AAAAh1BdA8AARXkBWwAAWwFKwAEyRQEcwAEyTYDAATJFwCLlM7m7AQABLgDAAEWqBsAASNmAwsABMmXAATKRwAEyuAAAnSgBasABMmZgA8AA/2gCAAABA8ABMprAATK4AAAAAAAAAGADwABq8wFKwAEyoAFqwAEysGADwABrZcAA+48GwABI2oDCwAEyvMABMszAATL4AAC6nQFqwAEyvWADwAD/aAIAAAEDwAEy1MABMvgAAAAAAAAAYAPAAP4bAUrAATLaAWrAATLnYAPAAP4bwACSBwbAAEjbgMLAATL8wAEzDcABMzQAALqcAWrAATL9YAPAAP9oAgAAAQPAATMXwAEzNAAAAAEBAcABMxgAAAiD22ADwABG0AAAYAPAAPxVAUrAATMiASXAATMogMABMyLAIuZDYAPAAEjWBsAASNyAwsABMzjAATNJwAEzbwAAuqABasABMzlgA8AA/2gCAAABA8ABM1PAATNvAAAAAQEBwAEzYQAACIPbYAPAAEbQAABgA8AA/FUBSsABM2sBKQAAIuT9ACLlZwAi5boAIuYNACLmdQAi5soAAAAFAsAASN+AwsABM3TAATN6wAE1ggO7OwAAAWABwABIvwAAAAEFwABI54DCwAEzosABM6LAATQqAAAAA8ABM6vAATQqAAAABAQEwAEzuQAAAIXNYAPAAEbQAMABM8wAAACFz2ADwABG0ADAATPcAAAApVJgA8AATLgAwAEz+gAAAIKUYAO/OgAAYAPAAEjfAT8BCQDAATQIwABIwwQABIDAATQOwCLnL4HAATQUwCLnP4LAATQbwCLnT4PAATQlwCLnXwAFBsAASOGAwsABNC7AATQ6wAE0cQAAhFIBasABNC9gA8AA/2gCAAABA8ABNEDAATRxAAAAAQEBwAE0SgAAAIdQXQPAAEV5AVsAAFsBSsABNFYBHMABNF6AwAE0VsAi5+C5ygEAAS4AwABFuwbAAEjigMLAATR2wAE0osABNMkAAJ0oAWrAATR3YAPAAP9oAgAAAQPAATSrwAE0yQAAAAAAAABgA8AAavMBSsABNLEBasABNMFgA8AAa1zAAPueBsAASOOAwsABNM3AATTdwAE1CQAAup0BasABNM5gA8AA/2gCAAABA8ABNOXAATUJAAAAAAAAAGADwAD+GwFKwAE06wFqwAE0+GADwAD+G4NdBsAASOSAwsABNQ3AATUewAE1RQAAupwBasABNQ5gA8AA/2gCAAABA8ABNSjAATVFAAAAAQEBwAE1KQAACIPbYAPAAEbQAABgA8AA/FUBSsABNTMBJcABNTmAwAE1M8Ai6O5gA8AASN8GwABI5YDCwAE1ScABNVrAATWAAAC6oAFqwAE1SmADwAD/aAIAAAEDwAE1ZMABNYAAAAABAQHAATVyAAAIg9tgA8AARtAAAGADwAD8VQFKwAE1fAEpAAAi56oAIugUACLoZwAi6LgAIukgACLpdQAAAAUCwABI6IDCwAE1hcABNYvAATfKA7s8AAABYAHAAEi/AAAAAQXAAEjwgMLAATW7wAE1u8ABNksAAAADwAE1zMABNksAAAAEBATAATXaAAAAhc1gA8AARtAAwAE17QAAAIXPYAPAAEbQAMABNf0AAAClUmADwABMuADAATYbAAAAgpRgA786AABgA8AASOgBPwEJAMABNinAAEjDBAAEgMABNi/AIunagcABNjXAIunqgsABNjzAIun6g8ABNkbAIuoKAAUGwABI6oDCwAE2T8ABNlvAATaaAACEUgFqwAE2UGADwAD/aAIAAAEDwAE2YcABNpoAAAABAQHAATZrAAAAh1BdA8AARXkBWwAAWwFKwAE2dwEcwAE2f4DAATZ3wCLqi7nMAQABLgDAAEXABsAASOuAwsABNp/AATbLwAE3AAAAnSgBasABNqBgA8AA/2gCAAABA8ABNtTAATcAAAAAAAAAAGADwABq8wFKwAE24AFqwAE28GADwABrgMAA+60GwABI7IDCwAE3BMABNxTAATdJAAC6nQFqwAE3BWADwAD/aAIAAAEDwAE3HMABN0kAAAAAAAAAYAPAAP4bAUrAATciAWrAATcvYAPAAP4bsVAGwABI7YDCwAE3TcABN17AATeNAAC6nAFqwAE3TmADwAD/aAIAAAEDwAE3aMABN40AAAABAQHAATdpAAAIg9tgA8AARtAAAGADwAD8VQFKwAE3cwElwAE3eYDAATdzwCLrmWADwABI6AbAAEjugMLAATeRwAE3osABN8gAALqgAWrAATeSYAPAAP9oAgAAAQPAATeswAE3yAAAAAEBAcABN7oAAAiD22ADwABG0AAAYAPAAPxVAUrAATfEASkAACLqVQAi6r8AIusSACLrYwAi68sAIuwgAAAABQLAAEjxgMLAATfNwAE308ABOeEDuz0AAAFgAcAASL8AAAABBcAASPmAwsABN/zAATf8wAE4hQAAAAPAATgGwAE4hQAAAAQEBMABOBQAAACFzWADwABG0ADAATgnAAAAhc9gA8AARtAAwAE4NwAAAKVSYAPAAEy4AMABOFUAAACClGADvzoAAGADwABI8QE/AQkAwAE4Y8AASMMEAASAwAE4acAi7IWBwAE4b8Ai7JWCwAE4dsAi7KWDwAE4gMAi7LUABQbAAEjzgMLAATiJwAE4lcABOM0AAIRSAWrAATiKYAPAAP9oAgAAAQPAATibwAE4zQAAAAEBAcABOKUAAACHUF0DwABFeQFbAABbAUrAATixARzAATi5gMABOLHAIu02ucMBAAEuAMAARbMGwABI9IDCwAE40sABOP7AATkmAACdKAFqwAE402ADwAD/aAIAAAEDwAE5B8ABOSYAAAAAAAAAYAPAAGrzAUrAATkNAWrAATkdYAPAAGt3wAD7vwbAAEj1gMLAATkqwAE5OsABOWcAALqdAWrAATkrYAPAAP9oAgAAAQPAATlCwAE5ZwAAAAAAAABgA8AA/hsBSsABOUgBasABOVVgA8AA/hvAAEgjBsAASPaAwsABOWvAATl8wAE5pAAAupwBasABOWxgA8AA/2gCAAABA8ABOYbAATmkAAAAAQEBwAE5hwAACIPbYAPAAEbQAABgA8AA/FUBSsABOZEBJcABOZeAwAE5kcAi7kZgA8AASPEGwABI94DCwAE5qMABObnAATnfAAC6oAFqwAE5qWADwAD/aAIAAAEDwAE5w8ABOd8AAAABAQHAATnRAAAIg9tgA8AARtAAAGADwAD8VQFKwAE52wEpAAAi7QAAIu1qACLtvQAi7hAAIu54ACLuzQAAAAUCwABI+oDCwAE6pMABOqrAATzxA7s+AAABYAHAAEemAAAAAQXAAEkDgMLAATrLwAE6y8ABOycAAAADwAE60sABOycAAAACAgLAATrnAAAAt/5gA79FAMABOwIAAACCVV0DwAD+vwFgA8AARtAAAGADwABI+gE/AQkAwAE7EsAAR6sCAAKAwAE7GMAi7zKBwAE7IMAi70AABQbAAEj8gMLAATsswAE7NsABO14AAIYdAAAAAQPAATs+wAE7XgAAAAEBAcABO0MAAAAnYAPAAP4bAABgA8AASaUBSsABO00BJsABO00BHMABO1MWwAE7TS6CVcAARtZLAQABHMABO1qAwAE7VMAi76xkAQABlADAAP9BAMAA/s5gA8AASaUGwABJAIDCwAE7YsABO3PAATuKAQCCbwAAAAEDwAE7fsABO4oAAAAAAAAAYAPAAEbQAUrAATuBARzAATuHFsABO4EuglXAAEbWSwEAAZMAwAD+zgbAAEkBgMLAATw0wAE8RMABPGoBALs/AAAAAQPAATxSwAE8agAAAAAAAABgA8AARpkBSsABPFUBFsABPGYWwAE8WxbAATxVLppfwABG2LowwABGpoHqwAD+pAbAAEj9gMLAATxvwAE8e8ABPLAAAIRSAWrAATxwYAPAAP9oAgAAAQPAATyBwAE8sAAAAAEBAcABPIsAAACHUF0DwABFeQFbAABbAUrAATyXARzAATyfgMABPJfAIvDqsbABAAEuAMAARbwGwABI/oDCwAE8tcABPMjAATzvAAAjAWrAATy2YAPAAP9oAgAAAQPAATzQwAE87wAAAAAAAABgA8ABAAIBSsABPNYBJMABPO8CJ7tAFsABPOguglXAAEbWAAAi74IAIvAHACLwWgAi8LQAIvEeACLxdgAAAAUCwABJBIDCwAE89MABPQPAAT23B7tBAAABYAHAAEi1AAAAAQXAAEkGgMLAAT0qwAE9KsABPbUAAAADwAE9NsABPbUAAAAEBATAAT1EAAAAhc1gA8AARtAAwAE9VwAAAIXPYAPAAEbQAMABPWcAAAClUmADwABMuADAAT2FAAAAgpRgA786AABgA8AASQQBPwEJAMABPZPAAEi+BAAEgMABPZnAIvHbgcABPZ/AIvHrgsABPabAIvH7g8ABPbDAIvILAAAAACLyVgAAAAACwABJB4DCwAE9usABPcDAAT/KA7tCAAABYAHAAEkEAAAAAQXAAEkPgMLAAT3kwAE95MABPm0AAAADwAE97sABPm0AAAAEBATAAT38AAAAhc1gA8AARtAAwAE+DwAAAIXPYAPAAEbQAMABPh8AAAClUmADwABMuADAAT49AAAAgpRgA786AABgA8AASQcBPwEJAMABPkvAAEkGBAAEgMABPlHAIvKngcABPlfAIvK3gsABPl7AIvLHg8ABPmjAIvLXAAUGwABJCYDCwAE+ccABPn3AAT61AACEUgFqwAE+cmADwAD/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1cABegHAAXokAACdKAFqwAF51mADwAD/aAIAAAEDwAF6CsABeiQAAAAAAAAAYAPAAGrzAUrAAXoQAWrAAXogYAPAAGujwAD8gQbAAEoRgMLAAXoowAF6OMABemAAALqdAWrAAXopYAPAAP9oAgAAAQPAAXpAwAF6YAAAAAAAAABgA8AA/hsBSsABekYBasABelNgA8AA/hvAAIX8BsAAShKAwsABemTAAXp1wAF6mAAAupwBasABemVgA8AA/2gCAAABA8ABen/AAXqYAAAAAQEBwAF6gAAACIPbYAPAAEbQAABgA8AA/FUBSsABeooBJcABepCAwAF6isAjOmZgA8AASg0GwABKE4DCwAF6nMABeq3AAXrTAAC6oAFqwAF6nWADwAD/aAIAAAEDwAF6t8ABetMAAAABAQHAAXrFAAAIg9tgA8AARtAAAGADwAD8VQFKwAF6zwEpAAAjOSAAIzmKACM53QAjOjAAIzqYACM67QAAAAUCwABKFoDCwAF62MABet7AAXyqA7uDAAABYAHAAEnrAAAAAQXAAEoegMLAAXsBwAF7AcABe00AAAADwAF7C8ABe00AAAAEBATAAXsMAAAAhc1bAMABexIAAACFz1sAwAF7GQAAAKVSWwDAAXsjAAAAgpRbAABgA8AAShYBPwEJAMABeyvAAEnvBAAEgMABezHAIztSgcABezfAIztdgsABez7AIztog8ABe0jAIztzAAUGwABKGIDCwAF7UcABe13AAXuVAACEUgFqwAF7UmADwAD/aAIAAAEDwAF7Y8ABe5UAAAABAQHAAXttAAAAh1BdA8AARXkBWwAAWwFKwAF7eQEcwAF7gYDAAXt5wCM78bm1AQABLgDAAEWkBsAAShmAwsABe5rAAXvGwAF77gAAnSgBasABe5tgA8AA/2gCAAABA8ABe8/AAXvuAAAAAAAAAGADwABq8wFKwAF71QFqwAF75WADwABrrMAA/JAGwABKGoDCwAF78sABfALAAXwwAAC6nQFqwAF782ADwAD/aAIAAAEDwAF8CsABfDAAAAAAAAAAYAPAAP4bAUrAAXwQAWrAAXwdYAPAAP4bwABy2AbAAEobgMLAAXw0wAF8RcABfG0AALqcAWrAAXw1YAPAAP9oAgAAAQPAAXxPwAF8bQAAAAEBAcABfFAAAAiD22ADwABG0AAAYAPAAPxV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wABK64DCwAG7HcABuyYYu7gAYAO/OgErAgXAAEr+gMLAAbtlwAG7ZcABvNIAAAADwAG7dMABvNIAAAAFBQXAAbt6AAAEu6ZgA8AAY8sAwAG7jwAABIJrYAPAAP4bAMABu6MAAACClGADvzoAwAG7vAAAAIF7YAPAAEbQAMABu9UAAAClwmADwABDNAAAYAPAAErkAT4DQCIcwAG8SxbAAbw8LrumwABK6EgBAAErAMAA/3UBIRbAAbxmFsABvFcuu6bAAErou7nAAGPUwAG8PMABvG8APRfAAbx7LqXBFsABvJGDwAG8i8AjeUilwcAARtLAAEbSPRfAAbypLqXChMABvL3AI3lYwABG0wQIAcAASuiAAMAjeRoIAcAASumBAMAjeSoIAMAASuqCwAG7/sAjeToJAMABvAzAAEeJAgACMcABvCBgA8AARtABg8ABvCHAI3lIgsABvCnAI3k6AAXAAEr/gMLAAbzXwAG818ABvhwAu7oAA8ABvP3AAb4cAAAABQUFwAG9AwAABLumYAPAAGPLAMABvRgAAASCa2ADwAD+GwDAAb0yAAAAgpRgA786AMABvUUAAACBe2ADwABG0ADAAb1ZAAAAu7tgA8AARtAAAGADwABK5AE+AkAhFsABveUWwAG91i67psAASui7ucAAY9TAAb3VwAG97gA9F8ABvfUupcEWwAG+C4PAAb4FwCN6kKXBwABG0sAARtIECAHAAErogADAI3piCAHAAErpgQDAI3pyCADAAErqgsABvYPAI3qCCQDAAb2RwABHiQIAAjHAAb2lYAPAAEbQAoPAAb2mwCN6kITAAb2twCN6oILAAb3CwCN6ggAPBsAASu2AwsABviHAAb4qwAG+rgEAu7wAAAABA8ABvkDAAb6uAAAAAAAAAGADwAD8VQE+AUrAAb5GASIiIRzAAb5cFsABvk0uu6bAAEroSAEAASsAwAD/dQAWwAG+fhbAAb5vLrumwABK6LR1wABj0wAcwAG+pxbAAb6gFsABvpkuglXAAEbWYcAA/u+AlwEAAZQAwAD/SwbAAErugMLAAb6zwAG+xMABvuMBALu7AAAAAQPAAb7XwAG+4wAAAAAAAABgA8AARtABSsABvtoBHMABvuAWwAG+2i6CVcAARtZLAQABlADAAP7OBsAASu+AwsABvujAAb8FwAG/JwEAuksBasAB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ALqdAWrAAiZbYAPAAP9oAgAAAQPAAiZywAImlgAAAAAAAABgA8AA/hsBSsACJngBasACJoVgA8AA/hu2qgbAAExXgMLAAiabwAImrMACJt8AALqcAWrAAiacYAPAAP9oAgAAAQPAAia2wAIm3wAAAAEBAcACJsQAAAiD22ADwABG0AAAYAPAAPxVAUrAAibOASXAAibUgMACJs7AI9g7YAPAAExLBsAATFiAwsACJuTAAib1wAInQQAAuqABasACJuVgA8AA/2gCAAABA8ACJv/AAidBAAAAAQEBwAInCQAACIPbYAPAAExLAABgA8AA/FUBPgFKwAInFgEcwAInKRbAAicdLoX1wABMT0gBAAEWwAInMoDAAicswCPYo4X1wABMTwDAAP91BsAATFmAwsACJ0bAAidLwAIonAAAu78AAAABA8ACJ1bAAiicAAAAAQEBwAInZAAAAKVAYAPAAE6FAABgA8AA/FUBPgRJwAIndyEWwAIniBbAAid8Lq7AwABMTbZAv0BKwAInkwEqP07AAie5wAInzQAAscZgA79FARbAAifbgMACJ8/AI9kbscbAAE6OTsACKALAAigMAAC7uGADvzoBFsACKBsWwAIoDi66S8AATFK6i8AARxBKwAIoMAEWwAIoiBzAAihUgcACKDfAI9lZtqACAAKCwAIoWcAj2X8WwAIocBbAAihkLq7AwABMTbY/vz8Av7C1T78oBsAATFqAwsACKKHAAii0wAIpHgAAIwFqwAIoomADwAD/aAIAAAEDwAIovMACKR4AAAAAAAAAYAPAAQACAT4CTsACKMzAAijSAACBx2ADwAEAAgEjFsACKNQuhfXAAExPJ7waJ7wbAWADwAEAAkrAAikBASTAAikaAye8HIDAAikTwCPaKieDJgAAI9ZTACPWpgAj1wUAI9dKACPXtAAj2AUAI9htACPY8QAj2eoAI9pyAAAACQLAAExdgMLAAimGwAIpjMACLqUDvB0AAAFgAcAAR4EAAAQEwABMX4DCwAIpvcACKcUJvA8AYAPAAGPLAATAAExggMLAAinqwAIp9QmuwABgA789AATAAExhgMLAAioEwAIqDwmF9QBgA8AA/FUABMAATGKAwsACKibAAiosCZacAGADviUAAQXAAExugMLAAioxwAIqMcACKvMAAAADwAIqP8ACKvMAAAAGBgbAAipNAAAAgyNgA8AARtAAwAIqWwAABLwPYAPAAGPLAMACKmoAAASuwGADvz0AwAIqggAABIX1YAPAAPxVAMACKpQAAASWnGADviUAwAIqqgAAAIKUYAO/OgAAYAPAAExdAT8GCAHAAExfgQDAI9tbCAHAAExgggDAI9trCAHAAExhgwDAI9t5CAHAAExihADAI9uJDABAIRzAAirLg8ACKr/AI9t5SAEAASsAwAD/dcACKr/AAirSAAkAwAIq3cAAR4kCAAIxwAIq42ADwABG0AGAwAIq5MAj20uFwAIq7sAj25cACAbAAExkgMLAAir4wAIrFcACKy4BALpLAWrAAir5YAPAAP9oAgAAAQPAAisiwAIrLgAAAAAAAABgA8AARtABSsACKyUBHMACKysWwAIrJS6CVcAARtZLAQABkwDAAP7OBsAATGaAwsACKzPAAitEwAIrXAAAurUBasACKzRgA8AA/2gCAAABA8ACK1HAAitcAAAAAAAAAGADwAD8VQFKwAIrVwEqBsAATGeAwsACK2HAAittwAIrqQAAhFIBasACK2JgA8AA/2gCAAABA8ACK3PAAiupAAAAAQEBwAIrfQAAAIdQXQPAAEV5AVsAAFsBSsACK4kBHMACK5GAwAIricAj3Qu51wEAAS4AwABFzAbAAExogMLAAiuuwAIrs8ACLQQAALu/AAAAAQPAAiu+wAItBAAAAAEBAcACK8wAAAClQGADwABOhQAAYAPAAPxVAT4EScACK98hFsACK/AWwAIr5C6uwMAATGC2QL9ASsACK/sBKj9OwAIsIcACLDUAALHGYAO/RQEWwAIsQ4DAAiw3wCPdabHGwABOjk7AAixqwAIsdAAAu7hgA786ARbAAiyDFsACLHYuukvAAExkuovAAEcQSsACLJgBFsACLPAcwAIsvIHAAiyfwCPdp7agAgACgsACLMHAI93NFsACLNgWwAIszC6uwMAATGC2P78/AL+wtU+/KAbAAExpgMLAAi0JwAItGcACLUwAALqdAWrAAi0KYAPAAP9oAgAAAQPAAi0hwAItTAAAAAAAAABgA8AA/hsBSsACLScBasACLTRgA8AA/hu6NQbAAExqgMLAAi1RwAItYsACLZsAALqcAWrAAi1SYAPAAP9oAgAAAQPAAi1swAItmwAAAAEBAcACLXoAAAiD22ADwABG0AAA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8QJgA8AATLhgA8AAcUcBMqbwYAPAAQACXQPAAP7xAmADwABMuGADwABxRwAEwABNtYDFpyyncgm8bcAATXsAXQPAAP7xAmADwAEAAl0DwAD+8QJgA8AATLhgA8AAcUcBMqdwYAPAAQACXQPAAP7xAmADwABMuGADwABxRwAEwABNtoDFp6yn8gm8bsAATXsAXQPAAP7xAmADwAEAAl0DwAD+8QJgA8AATLhgA8AAcUcBMqfwYAPAAQACXQPAAP7xAmADwABMuGADwABxRwAEwABNt4DFqBqoTwm8b8AATXsAXQPAAP7xAmADvhNgA8AAcPABMqhNYAO+E2ADwABw8AAEwABNuIDFqQKpNAm8cMAATXsAXQPAAP7xAmADviVgA8AAcHMBMqkyYAO+JWADwABwcwAEwABNuYDFqoaqygm8ccAATXsAXQPAAP7xAmADwAEAAl0DwAD/swFgA8AAcHMBMqrIYAPAAQACXQPAAP+zAWADwABwcwAEwABNuoDFq12roAm8csAATXsAXQPAAP7xAmADwAEAAl0DwAD/swFgA8AAcHMBMqueYAPAAQACXQPAAP+zAWADwABwcwAEwABNu4DFrDSsdwm8c8AATXsAXQPAAP7xAmADwAEAAl0DwAD/swFgA8AAcHMBMqx1YAPAAQACXQPAAP+zAWADwABwcwAEwABNvIDFrJOsuQm898AATXsAXQPAAP+zAWADvjcBHqynwADDIQABYAO+NwAABMAATb2AxazSrPEJvHTAAE17AF0DwAD/swFgA8AAY8sBHqziwADDIQABYAPAAGPLAAAEwABNvoDFrRGtLwm8ecAATXsAXQPAAP+zAWADwABkGQE1AAAAAQBdA8AA/7MBYAPAAGQZAR4AwADDIQABYAPAAGQZAACAAMAkfAUEwABNv4DFrbyt3gm8+MAATXsAXQPAAP+zAWADvl4BHq3SwADDIQABYAO+XgAABMAATcCAxa39rkYJvPnAAE17AF0DwAD/swFgA746AR6uMcAAwyEAAWADvjoAAATAAE3BgMWuYa5pCbMEwABNewBgA4EUAATAAE3CgMWuhq6ZCbBOwABNewBgA7xGAATAAE3DgMWura63Cbz6wABNewBgA8AAZUQABMAATcSAxa7Qrt8JtR3AAE17AGADuYcABMAATcWAxa76rwoJuRDAAE17AGADwABsEgAEwABNxoDFryavOAm5FsAATXsAYAPAAGxDAATAAE3HgMWvWa9wCbz7wABNewBgA8AAe/sABMAATciAxa+Or6IJuRfAAE17AGADwACD8AAEwABNyYDFr8Sv0wm8/MAATXsAYAPAAITwAATAAE3KgMWv7K/+Cbz9wABNewBgA8AAb5MABMAATcuAxbAhsDoJuRjAAE17AGADwAB8dgAEwABNzIDFsFmwbgm8/sAATXsAYAPAAHGPAATAAE3NgMWwj7CmCbk3wABNewBgA8AAcFkABMAATc6AxbDNsOkJvHXAAE17AGADwABxUgAEwABNz4DFsQmxHwm8/8AATXsAYAPAAHMXAATAAE3QgMWxNrFDCb0AwABNewBgA8AAc04ABMAATdGAxbFNsVwYvQHAAE17AGADwAD8VQEqBMAATdKAxbFtsX4YvQLAAE17AGADwABOyAErBMAATdOAxbGascgJvQPAAE17AF0DwAD/swFgA74lAR6xtcAAwyEAAWADviUAAATAAE3UgMWx5rIQCbx2wABNewBdA8AA/7MBYAPAAGI4AR6x/MAAwyEAAWADwABiOAAABMAATdWAxbImsk8JvQTAAE17AF0DwAD/swFgA75eAR6yQ8AAwyEAAWADvl4AAATAAE3WgMWyZrKRGL0FwABNewBdA8AA/7MBYAO+JQEesn7AAMMhAAFgA74lAAAEwABN14DFstSy3wm4tMAATXsAYAPAAIWjAAEFwABOA4DFsuSy5LUNAAAAA7L+tQ0AAAARERGzCwAABLMEYAOBFACzIAAABLi0YAPAAIWjALM4AAAEsE5gA7xGALNYAAAEvPpgA8AAZUQAs28AAAS1HWADuYcAs4sAAAS5EGADwABsEgCzqAAABLkWYAPAAGxDALPHAAAEvPtgA8AAe/sAs+sAAAS5F2ADwACD8AC0DAAABLz8YAPAAITwALQoAAAEvP1gA8AAb5MAtEcAAAS5GGADwAB8dgC0bQAABLz+YAPAAHGPALSPAAAEuTdgA8AAcFkAtLMAAAS8dWADwABxUgC03AAABLz/YAPAAHMXALT/AAAEvQBgA8AAc04AAGADwABNrQE/EggBwABNwYAAwCR/TAgBwABN14EAwCR/WAgBwABNwoIAwCR/ZggBwABNw4MAwCR/cggBwABNxIQAwCR/gAgBwABNxYUAwCR/jAgB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AMMhAAFgA8AAansAACsBXQPAAP+zAWADwABqez0cwABDU4LAAENEwCSKDFYBAAEWwABDYIPAAENXwCSKLLXHwABMvQDAAP/APz9KwABDjAE1AAAAAQBdA8AA/7MBYAPAAGp7AYLAAEOTwCSKDCMcwABDooMAwCSLZUgBAAErAABqwABDpV0DwAD+vwFgA8AAanvAAP4cgwDAJItlAV0DwADO1AFgA8AAansGwABN54DFwABDxcAAQ8rAAEVsAAC8gMAATXsAAAABA8AAQ97AAEVsAAAAAgICwABECQAAALyBXQPAAP7xAmADwABMuGADwABxRwDAAEQhAAAAgmpgA74lAABgA8AA/FUBPgNJwABELxzAAEQ9gMAARDPAJIvsSAEAASsAwAD/dUrAAERGASo/RsAARFjAAESCwABEZgAAAKVSYAPAAEy4ABbAAER8gMAARHLAJIvsg2jAAP8TPgFJwABEihzAAESXgsAARI7AJIxPtrIBAAGBwABEpsAkjAkAwABM1T4CTsAARM3AAETTAAC2t2ADwABxRwEcwABE3oDAAETVwCSL7EsBAAGCwABE38AkjE8AwAD/BUnAAETyHMAARPyDwABE9sAkjJ62tQMAA4HAAEUDwCSMCRbAAEUUgsAARQvAJIxPp4vAAEy8LgDAAHFJPgFKwABFMwEpPz9KwABFXAEqBsAATfKAxcAARbrAAEXewABGFwAAvQgAAAABA8AARfHAAEYXAAAAAAAAAF0DwAD+8QJgA74TYAPAAE2hAT4BSsAARfoBFsAARgEuvPTAAE17wABNsAbAAE3ogMXAAEYcwABGNMAARrUAALyEwABNewAAAAEDwABGUMAARrUAAAABAQHAAEZeAAAAgmpgA74lAABdA8AA/n0BYAPAAGp7AT4BSsAARmwBHMAARnMuvILAAE17AgACHMAARpsWwABGji68bMAATXvAAE20SwEAARbAAEajgMAARpzAJI2hgL2+AQDAAP8FgMAARqrAJI2hAMAATeYGwABN6YDFwABGusAARr/AAEcxAAC8hcAATXsAAAABA8AARtDAAEcxAAAAAQEBwABG3gAAAIJqYAO+JQAAYAPAAPxVAT4BSsAARuwBHMAARvMuvIDAAE17AgACHMAARxcWwABHCC68bcAATXvAAE21SwEAARbAAEcfgMAARxjAJI5BgL2+AQDAAP8FgMAARybAJI5BAMAATecGwABN6oDFwABHNsAARzvAAEetAAC8hsAATXsAAAABA8AAR0zAAEetAAAAAQEBwABHWgAAAIJqYAO+JQAAYAPAAPxVAT4BSsAAR2gBHMAAR28uvIDAAE17AgACHMAAR5MWwABHhC68bsAATXvAAE22SwEAARbAAEebgMAAR5TAJI7agL2+AQDAAP8FgMAAR6LAJI7aAMAATecGwABN84DFwABHssAAR8PAAFE/AACwVwFqwABHs2ADwAD/aAIAAAEDwABH1cAAUT8AAAACAgLAAEfoAAAAsFhgA8AAaUAAwABIBwAAALyHXgMAAgICYAO+JV0DwABp7wFgA8AAcNkAAVcDwABwYwBcAABcAT4ETsAASCLAAEgrAAClUmADwABMuAEWwABIOIDAAEgtwCSPe6VSwABpQ07AAEhNwABIWAAArSRgA8ABAAIBFsAASGOCwABIWsAkj7yAvcAATMZPwABIbsAASHMAAAG8iGEDA10DwAD+8QJgA8ABAAJdA8AA/7MBYAPAAHBzYQMBYAPAAHBzXQPAAGnvAWADwABw2WEDAWADwABwc2ADwAD8VVwAA8AASHvAAEqBAAAAAwMDwABIowAAALSrXQPAAP7xAmADwAEAAl0DwAD/swFgA8AAcHMAwABIyQAAAIjbYQMBYAPAAHBzXQPAAGnvAWADwABw2QDAAEjxAAAAvIlhAwFgA8AAcHNgA8AA/FUAAFwBPgE9HMAASR0uvIrAAE17AwADhcAASSnAJJBsg8AASTTAJI/kNMAASUADwABJQMAASnoAAAABAQHAAElNAAAAvItgA8AAcHMAAGADwAD8VQE+AknAAEleIhzAAElrgsAASWLAJI+8trIBAAEWwABJgBTAAEl6wCSRBAgApIbAAHB2AMAATNUAHMAASbQWwABJly68dcAATXvAAE3OtrADAAOAwABJ1MAkj3sWwABJ5hTAAEngwCSRBAgApIbAAHB2LgDAAHFVPgI9HMAASguBwABKAcAkj4sgAgACFsAAShIUwABKDMAkkQQIAKSGwABwdhzAAEoghsAAShrAJJCQIAEAARTAAEohwCSRBAgAAAAAAErAAEo0ARzAAEpKh8AASjvAJJCwIAEAARTAAEpLwCSRBAgAAAA/SsAASmUBKgDAAE3vQUfAAEqIFsAASpuA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AGyawAB4PwAAvJfAAE17AAAAAQPAAGypwAB4PwAAAAMCAsAAbLcAAACCamADviUAwABs0gAAALYAXQPAAGnvAWADwABw2QABwABs5gAAALXuYAPAAPxVAWrAAG0AYAPAAPxVAGADwABwcwE+A07AAG0awABtIAAAvItgA8AAcHMBHMAAbS4WwABtIi68cMAATXvAAE24SwEAAYDAAG0vwCSq2gDAAP8FScAAbTwcwABtRoPAAG1AwCSrJkgBAAErAMAAcJM+AknAAG1XFsAAbWKAwABtW8AkqtqFHL4qPgpOwABthcAAbZAAAKeLYAPAAQACARbAAG2ZgMAAbZLAJKragL2+AU7AAG2zwABttwAAmiZgA74TARbAAG3AgMAAbbnAJKrahRm+M07AAHAawABwIwAAhmVgA8AA/FUBHMAAcDYWwABwJS65EMAATXvAAE3FtA8BAAGFwABwRMAkq78AwABsGj2LwABwUsAkqyYewABwXsAAcHgBAAGAwABwasAkqtoAScAAcHsiFsAAcIaAwABwf8AkqtqHm74sACGGwABwksAkq+M+AT0cwABwr4HAAHCowCSq6IClAQABHMAAcLyDwABwtsAkqyaq3AAAAADAAHCOAMAAagE/ScAAcNchgsAAcNzAJKsAPgJJwABxAiIWwABxDYDAAHEGwCSq2oebviwAhsAAcRjAJKvjPgE9HMAAcTAuteEBAAGAwABxRMAkqtoAwABN+j9JwABxYyIiFsAAcW6AwABxZ8Akqtqz2r4tABzAAHGWFsAAcZGAwABxisAkqtqAvb4BSAEAAWrAAHGlYAPAAQACwADxZgDAAQARABzAAHHPFsAAcbsusE7AAE17wABNwrQaAQABhcAAcd7AJKu/ALxePgE9HMAAchoWwABx8i68+cAATXvAAE3AVgEAASbAAHIeAYDAAHIewCSq2mADvjoAwAD/wD8/ScAAckYiFsAAclCDwABySsAkqya8k8AAcIgAHMAAcmkuvIXAAE17AQABgMAAcnvAJKraAMAATek+AT0cwAByl4HAAHKQwCSq6IClAQABHMAAcqSDwABynsAkqyae3AEAAWrAAHKyXQPAAGnvAWADwABxJsAA/jsAwABwkADAAGoBP0nAAHLVFsAAct+DwABy2cAkqya8kcAAcIc+Ak7AAHMcwABzKwAAvINdA8AA/n0B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pQ4AAAAAAAAAYAPAAQACAUqk+AEkpQ4DJ71BFqUILoC9wABOYCeDJgAAJOnfACTqKAAAAAECwABOZYDGpV+lZac9A6UIAAABYAHAAP9oAAAAAQXAAE5qgMaleKV+pY4BAAADpYyljgAAAAAAAABgA8AATmUBPwEJAaV+wAD/fgAAAAACBsAATmeAxqXipeemlQAAtGoAAAABA6XyppUAAAAEBASl9wAAAKWKWwCmEQAAALBoYAPAAE4HAKYyAAAAh1BgA8AATmsApkkAAAC9QmADwABOXgAAXAE+AT0cpoOBpnzAJOqtsDkBAAGCponAJOq7AMAAThAGwABOaIDGpvWm+qc7AACljwAAAAEDpwanOwAAAAEBAacVAAAAvUJgA8AATl4AAFwBPgAAACTqhAAk6vgAJOsrAAAAAgLAAE5rgManeaeIqKAHsA0AAAFgAcAA/2gAAAABBcAATnIAAAAABAAAAwAAAAAAAAAAAGADwABOawE/AQkBAMAA/34AAAAABAbAAE5tgMann6ekp9wAArA6AAAAAQOnsqfcAAAAAgICp8AAAACCamADviUAp9IAAACwVmADwABpcgAAXAAGwABOboDGp+Cn5aggAAKwOwAAAAEDp/SoIAAAAAICAqgCAAAAgmpgA74lAKgVAAAAsFhgA8AAaUAAAFwABsAATm+AxqgkqCmoWwACsDwAAAABA6g1qFsAAAACAgKoQwAAAIJqYAO+JQCoUwAAALBaYAPAAGm8AABcAAbAAE5wgMaoX6hkqJ4AArA9AAAAAQOodKieAAAAAgICqIIAAACCamADviUAqJYAAACwWmADwABp2gAAXAAAACTrhAAk68EAJOv+ACTsOwAk7HgAAAAEAsAATnOAxqkkqSqt9AO0QQAAAWABwAD/aAABYAHAAE5rBATAAE52gMapfamMCb1DwABOBABeAwACAgJgA74lYAPAAGlyAAFXA8AATgYBYAPAAGlyXAAEwABOd4DGqaupuwm9RMAATgQAXgMAAgICYAO+JWADwABpQAABVwPAAE4GAWADwABpQFwABMAATniAxqnXqeQJvUXAAE4EAF4DAAICAmADviVgA8AAabwAAVcDwABOBgFgA8AAabxcAATAAE55gMaqBKoVCb1GwABOBABeAwACAgJgA74lYAPAAGnaAAFXA8AATgYBYAPAAGnaXAAB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wAEBdQTAAE71gMmDPIM8Bp2YAGADwABO5gFqAGADwABO5sABAY0EwABO9oDJg0iDSAa9eABgA8AATuYBagBgA8AATubAAQGlBMAATveAyYNRg1EGvXkAYAPAAE7mAWoAYAPAAE7mwAEBvQTAAE74gMmDXoNeBp34AGADwABO5gFqAGADwABO5sABAdcEwABO+YDJg2WDZQa9egBgA8AATuYBagBgA8AATubAAQHxBMAATvqAyYN9g30GvXsAYAPAAE7mAWoAYAPAAE7mwAECCQTAAE77gMmDhYOFBp2yAGADwABO5gFqAGADwABO5sABAiMEwABO/IDJg4yDjAa9fABgA8AATuYBagBgA8AATubAAQI9BMAATv2AyYOTg5MGnagAYAPAAE7mAWoAYAPAAE7mwAECVQTAAE7+gMmDm4ObBp37AGADwABO5gFqAGADwABO5sABAm8EwABO/4DJg6WDpQa9fQBgA8AATuYBagBgA8AATubAAQKJBMAATwCAyYPAg8AGvX4AYAPAAE7mAWoAYAPAAE7mwAECowTAAE8BgMmD0YPRBpmwAGADwABO5gFqAGADwABO5sABAr0EwABPAoDJg9uD2wa9fwBgA8AATuYBagBgA8AATubAAQLXBMAATwOAyYPjg+MGvYAAYAPAAE7mAWoAYAPAAE7mwAEC8QTAAE8EgMmD7IPsBr2BAGADwABO5gFqAGADwABO5sABAwsEwABPBYDJg/6D/ga9ggBgA8AATuYBagBgA8AATubAAQMlBMAATwaAyYQWhBYGvYMAYAPAAE7mAWoAYAPAAE7mwAEDPwTAAE8HgMmEKYQpBp19AGADwABO5gFqAGADwABO5sABA1kEwABPCIDJhDOEMwa9hABgA8AATuYBagBgA8AATubAAQNzAQXAAE8MgMmCrIKshEIBAAADgqyEQgAAAAICAoKsAAAEJ2ADwAD+GwCCrAAABChgA8ABAAIAAGADwABO5gE/AwgAwABO6IAAwCUI6AgAwABO6oEAwCUI9QkAAMAA/34AAAAAAQbAAE8KgMmCrIKshEIAACMAAAABA4KshEIAAAAAAAAAYAPAAQACAUoAAQ8ALsAATuoAACUJMAAlCWEAAAABAsAATw2AyYYyhkGQPAeGHAAAAWABwAD/aAAAAQTAAE8QgMmGXIZlGIaXwABO5QBgA8AA/hsB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AAAAAABgA8AA/FUBPgFKwABMZgEcwABMdxbAAExtLlvAAE+6gdYBAAE0wABMewPAAEx7wABMjwAAAAEBAcAATHwAAACDU2ADwABPDQAAYAPAAPxVAUrAAEyCARbAAEyEgMAATILAJUkpvYzAAE8WAMAA/pIAACU9GgAlPV0AJT3PACU/FAAlQCAAJUCyACVBugAlRSwAJUaUACVIdQAlSLoAJUlgAAAACwLAAE/LgMnAAEzWwABM3MAAWJYDvb4AAAFgAcAATw0AAAEEwABPzYDJwABNOMAATUMJhdcAXQPAAP6/AWADwABPDQABBcAAT9uAycAATUjAAE1IwABNdwAAAAPAAE1lwABNdwAAAAEBAcAATWsAAASF110DwAD+vwFgA8AATw0AAGADwABPywE/AggBwABPzYAAwCVJ/gkBwABNSMAATyUAAAAACQbAAE/PgMnAAE18wABNo8AATc0BAIJrAWrAAE19YAPAAP9oAgAAAQPAAE2owABNzQAAAAAAAABgA8AATuYBSsAATasBasAATcJgA8AATubAAQETBsAAT9KAycAATdLAAE3ewABOSwAAhFIBasAATdNgA8AA/2gCAAABA8AATeTAAE5LAAAAAgECwABN/wAAAIdQXQPAAFEOAltbAMAATgkAAACCV1sBagBgA8AA/yV5AFsBPgFKwABOGQEcwABOKIDAAE4gwCVKw72/AgACLoHAAE4/wCVK1gDAAFEbBsAAT9SAycAATlDAAE5hwABPeQAAvYbAAE7lAWrAAE5RYAPAAP9oAgAAAQPAAE52wABPeQAAAAEBAcAAToQAAACD6WADwAEATAAAXAE+BD0cwABOkYDAAE6OwCVLUYKOAQABJ73AAMABAGBOwABOwMAATsoAAL2hYAPAAQACAScARsAATtTAAE8CwABO7AAAAICWYAPAAE8NABbAAE71LoXXwABPzT4DPRzAAE8NgMAATwrAJUtRgo4BAAGBwABPE8AlS4MAwAEAYD0cwABPK4LAAE8lwCVLob2GwABO5QEAAYDAAE9BwCVLUQDAAE8fPYnAAE9MwCVLgyeApz0cwABPaoDAAE9nwCVLUYKOAQABJ72iAMABAGAGwABP14DJwABPfsAAT53AAFAyAACwOQFqwABPf2ADwAD/aAIAAAEDwABPosAAUDIAAAABAQHAAE+3AAAAW2AD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ARbAANVkFsAA1VcugyrAAFC+g8bAAE8UAMAA/0MAwAD/QQbAAFDDgMnAANV1wADVhsAA1gAAAL2HwABO5QFqwADVdmADwAD/aAIAAAEDwADVjcAA1gAAAAABAQHAANWwAAAIg9tgA8AAULsAAGADwAD8VQE+AUrAANW9ASIcwADVyRbAANXELoC9wABQvUgBAAEWwADV0oDAANXMwCW9TIC9wABQvQDAAE8iABzAANXnFsAA1dougyrAAFC+SAEAARbAANXwgMAA1erAJb1MgyrAAFC+AMAATyIGwABQxYDJwADWBcAA1hrAANY7AQC9iwFqwADWBmADwAD/aAIAAAEDwADWJcAA1jsAAAAAAAAAYAPAAPxVAT4BSsAA1isBKgbAAFDGgMnAANZAwADWVcAA1sABAL2MAWrAANZBYAPAAP9oAgAAAQPAANZhwADWwAAAAAAAAABgA8AA/FUBPgFKwADWZwEiFsAA1nMWwADWbi6AvcAAUL29jMAATxYBIiEcwADWmBbAANaLLoMqwABQvkgBAAErAMAATyIAFsAA1rAWwADWoy6DKsAAUL69jMAATxYAACW7ZQAlvGoAJb0SACW9ygAlvhEAJb6lAAAABQLAAFDJgMnAANbywADW+MAA4OIDviAAAAFgAcAAULsAAAABBcAAUNSAycAA11DAANdQwADX2AAAAAPAANd1wADX2AAAAAICAsAA15AAAACAvWADwABPDQDAANepAAAAgypgA8AATw0AAGADwABQyQE/AQkAwADXv8AAUMgCAAKAwADXxcAlvwqBwADXy8AlvxoABgbAAFDLgMnAANfdwADYBMAA2EYBAIJrAWrAANfeYAPAAP9oAgAAAQPAANgJwADYRgAAAAAAAABgA8AATuYBPgFKwADYDwFqwADYLWADwABO5sABAPwGwABQzYDJwADYS8AA2FfAANjMAACEUgFqwADYTGADwAD/aAIAAAEDwADYXcAA2MwAAAACAQLAANh4AAAAh1BdA8AAUQ4CW1sAwADYggAAAIJXWwFqAGADwAD/JXkAWwE+AUrAANiSARzAANihgMAA2JnAJb/gviECAAIugcAA2MDAJb/zAMAAUSYGwABQz4DJwADY0cAA2OLAANoJAAC9hsAATuUBasAA2NJgA8AA/2gCAAABA8AA2PfAANoJAAAAAQEBwADZBQAA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JeNfhFICAAIugcABBGnAJeNvAMAATxhfAwAABsAAURGAycABBHrAAQR8wAEEqAACvcgAAAABA8ABBIPAAQSoAAAAAgICwAEEmQAAAL43YAPAAE/7AMABBKAAACCCV18DAQAAAF8DAAAABsAAURKAycABBKzAAQSuwAEE3gACvZAAAAABA8ABBLfAAQTeAAAAAgICwAEEzwAAAL43YAPAAE8yAMABBNYAACCCV18DAQAAAF8DAAAABsAAUROAycABBOLAAQTkwAEFEgACvZMAAAABA8ABBOzAAQUSAAAAAgICwAEFAwAAAL43YAPAAE9BAMABBQoAACCCV18DAQAAAF8DAAAABsAAURSAycABBRbAAQUYwAEFTAACvZYAAAABA8ABBSPAAQVMAAAAAgICwAEFPQAAAL43YAPAAE9QAMABBUQAACCCV18DAQAAAF8DAAAABsAAURWAycABBVDAAQVSwAEFhgACvZkAAAABA8ABBV3AAQWGAAAAAgICwAEFdwAAAL43YAPAAE9fAMABBX4AACCCV18DAQAAAF8DAAAABsAAURaAycABBYrAAQWMwAEFvAACvZwAAAABA8ABBZXAAQW8AAAAAgICwAEFrQAAAL43YAPAAE9uAMABBbQAACCCV18DAQAAAF8DAAAABsAAUReAycABBcDAAQXCwAEF8gACh08AAAABA8ABBcvAAQXyAAAAAgICwAEF4wAAAL43YAPAAE97AMABBeoAACCCV18DAQAAAF8DAAAABsAAURiAycABBfbAAQX4wAEGJgACvaQAAAABA8ABBgDAAQYmAAAAAgICwAEGFwAAAL43YAPAAE+OAMABBh4AACCCV18DAQAAAF8DAAAABsAAURmAycABBirAAQYswAEGWgACvacAAAABA8ABBjTAAQZaAAAAAgICwAEGSwAAAL43YAPAAE+hAMABBlIAACCCV18DAQAAAF8DAAAABsAAURqAycABBl7AAQZgwAEGngACva0AAAABA8ABBnDAAQaeAAAAAgICwAEGjwAAAL43YAPAAE+1AMABBpYAACCCV18DAQAAAF8DAAAABsAAURuAycABBqLAAQakwAEG4gACvb8AAAABA8ABBrTAAQbiAAAAAgICwAEG0wAAAL43YAPAAE/LAMABBtoAACCCV18DAQAAAF8DAAAABsAAURyAycABBubAAQbowAEHHAACvcIAAAABA8ABBvPAAQccAAAAAgICwAEHDQAAAL43YAPAAE/cAMABBxQAACCCV18DAQAAAF8DAAAABsAAUR2AycABByDAAQciwAEHUgACn1QAAAABA8ABByvAAQdSAAAAAgICwAEHQwAAAL43YAPAAE/rAMABB0oAACCCV18DAQAAAF8DAAAABsAAUR6AycABB1bAAQdYwAEHmgACvdQAAAABA8ABB2rAAQeaAAAAAgICwAEHiwAAAL43YAPAAFAaAMABB5IAACCCV18DAQAAAF8DAAAABsAAUR+AycABB57AAQegwAEH0gAChTAAAAABA8ABB6rAAQfSAAAAAgICwAEHwwAAAL43YAPAAFAMAMABB8oAACCCV18DAQAAAF8DAAAABsAAUSCAycABB9bAAQfYwAEIEAACtUUAAAABA8ABB+XAAQgQAAAAAgICwAEIAQAAAL43YAPAAFAoAMABCAgAACCCV18DAQAAAF8DAAAABsAAUSGAycABCBTAAQgWwAEISgACsaAAAAABA8ABCCHAAQhKAAAAAgICwAEIOwAAAL43YAPAAFA4AMABCEIAACCCV18DAQAAAF8DAAAABsAAUSKAycABCE7AAQhQwAEIigACvgEAAAABA8ABCF7AAQiKAAAAAgICwAEIewAAAL43YAPAAFBOAMABCIIAACCCV18DAQAAAF8DAAAABsAAUSOAycABCI7AAQiQwAEIwgACvgUAAAABA8ABCJrAAQjCAAAAAgICwAEIswAAAL43YAPAAFBhAMABCLoAACCCV18DAQAAAF8DAAAABsAAUSSAycABCMbAAQjIwAEJCAACvgkAAAABA8ABCNnAAQkIAAAAAgICwAEI+QAAAL43YAPAAFB1AMABCQAAACCCV18DAQAAAF8DAAAABsAAUSWAycABCQzAAQkOwAEJTAACsaMAAAABA8ABCR7AAQlMAAAAAgICwAEJPQAAAL43YAPAAFCHAMABCUQAACCCV18DAQAAAF8DAAAABsAAUSaAycABCVDAAQlSwAEJpwACviEAAAABA8ABCWrAAQmnAAAAAgICwAEJmAAAAL43YAPAAFDJAMABCZ8AACCCV18DAQAAAF8DAAAABsAAUSeAycABCavAAQmtwAEKAAACvikAAAABA8ABCcTAAQoAAAAAAgICwAEJ8QAAAL43YAPAAFDVAMABCfgAACCCV18DAQAAAF8DAAAABsAAUSiAycABCgTAAQoGwAEKXwACviwAAAABA8ABCiDAAQpfAAAAAgICwAEKUAAAAL43YAPAAFDhAMABClcAACCCV18DAQAAAF8DAAAABsAAUSmAycABCmPAAQplwAEKmQACvjIAAAABA8ABCnDAAQqZAAAAAgICwAEKigAAAL43YAPAAFDtAMABCpEAACCCV18DAQAAAF8DAAAABsAAUSqAycABCp3AAQqfwAEK4QAChcgAAAABA8ABCrHAAQrhAAAAAgICwAEK0gAAAL43YAPAAFD9AMABCtkAACCCV18DAQAAAF8DAAAABsAAUSuAycABCubAAQrowAELIwACvhcAAAABA8ABCvfAAQsjAAAAAgICwAELFAAAAL43YAPAAFCbAMABCxsAACCCV18DAQAAAF8DAAAABsAAUSyAycABCyfAAQspwAELWgACvhsAAAABA8ABCzPAAQtaAAAAAgICwAELSwAAAL43YAPAAFCrAMABC1IAACCCV18DAQAAAF8DAAAAAAAl4zUAJeO3ACXkBQAl5FMAJeShACXk7wAl5T0AJeWLACXl2QAl5icAJeZ1ACXmwwAl5xEAJedfACXnrQAl5/sAJehJACXolwAl6OUAJekzACXpgQAl6c8AJeodACXqawAl6rkAJesHACXrVQAl66MAJevxACXsPwAAAB0CwABRL4DJwAELX8ABC2XAASexA744AAABXQHAAFEOAltbAAABBMAAUTGAycABC67AAQvFCYPpAGADwAEATAEfwAELt8ABAGsAAAAAAQXAAFFUAAAAAAQAAAMAAAAAAAAAAABgA8AAUS8BPwEJAQDAAFEuAAAAACAGwABRM4DJwAELysABC8/AAQ0YAACCjgAAAAEDwAEL1MABDRgAAAADAgLAAQvoAAAAhFdgA8AATw0AwAEMAwAAAIRbYAPAAE8NAAHAAQwWAAAAvjlgA8AA/FUBasABDCdgA8AA/FV3XAE+AUnAAQw0IhzAAQxJFsABDD6BwAEMOMAl7W6aSsAATxNjAQABFsABDFKAwAEMS8Al7V6aSsAATxMAwAD/SQEiIYLAAQxpwCXtfwAcwAEMjRbAAQyCgcABDHzAJe1umkrAAE8TSAEAARbAAQyXgMABDJDAJe1emkrAAE8TAMAA/z8+Az0cwAEMrhbA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wCX0ygDAAFE1PYrAARKcwCX0rSk9HMABErwWwAESuS6D6cAAUTGCjgEAASeZ8wDAAQBgBsAAUT2AycABEs/AARLgwAETkAAAvaQBasABEtBgA8AA/2gCAAABA8ABEujAAROQAAAAAgECwAES/wAAAL43YAPAAE+OAMABEwUAACCAtVsBagBgA8AA/yV5AFwBPgU9HMABExIWwAETDy6D6cAAUTGCjgEAASe+PADAAQBgPRzAARMnLr46AQABFsABEz6AwAETOsAl9ZmClMAAT5AAwABRND0cwAETTBbAARNJLoPpwABRMYKOAQABJ5oSAMABAGA9HMABE18WwAETXC6D6cAAUTGgLQIAAhbAARNsgMABE2jAJfWZKcAAT5EngYsAwAEAYj0cwAETghbAARN/LoPpwABRMYKOAQABJ4biAMABAGAGwABRPoDJwAETlcABE6bAARUAAAC9pwFqwAETlmADwAD/aAIAAAEDwAETrsABFQAAAAACAQLAARPFAAAAvjdgA8AAT6EAwAETywAAIIC1WwFqAGADwAD/JXkAXAE+BT0cwAET2BbAARPVLoPpwABRMYKOAQABJ748AMABAGA9HMABE+0uvjoBAAEWwAEUBIDAARQAwCX2rIKUwABPowDAAFE0PRzAARQSFsABFA8ug+nAAFExgo4BAAEnmhIAwAEAYEXAARQiAcABFCvAARQxAAAnYAPAAP4bAZMBHMABFDyCwAEUNsAl9z5jAQABFsABFEcWwAEUQoDAARQ+wCX2rINowABPpGHAAP7vAMAA/0kBisABFE/AJfc+HMABFFSCwAEUT8Al9z5kAQABlADAAP9BPgRJwAEUYBzAARRqgsABFGTAJfc+gJcBAAGTAMAA/0s+AT0cwAEUfBbAARR5LoPpwABRMYKOAQABJ4GLAMABAGA/PRzAARSXLprxAQABHMABFKUWwAEUoYDAARSdwCX2rINowABPpEsBAAGCwAEUpsAl9z4AwAD+zgDAAFE1PRzAARS4FsABFLUug+nAAFExgo4BAAEng1sAwAEAYD0cwAEUyy6a8QEAARzAARTbFsABFNWAwAEU0cAl9qwpwABPpUsBAAGCwAEU3MAl9z4AwAD+zgDAAFE1PRzAARTyFsABFO8ug+nAAFExgo4BAAEnhuIAwAEAYAbAAFE/gMnAARUFwAEVFsABGHcAAL2tAWrAARUGYAPAAP9oAgAAAQPAARUmwAEYdwAAAAIBAsABFUUAAAC+N2ADwABPtQDAARVLAAAggLVbAWoAYAPAAP8leQBcAT4KPRzAARVYFsABFVUug+nAAFExgo4BAAEnvjwAwAEAYD0cwAEVcBbAARVtLoPpwABRMYKOAQABFsABFZAWwAEVgRbAARV6gMABFXbAJfjWgknAAE+4hRm+M4C9vgEAwAEAYD0cwAEVmy6+OgEAARbAARWygMABFa7AJfjWgpTAAE+3AMAAUTRJwAEVvSEcwAEV0RbAARXMFsABFcWAwAEVwcAl+NaCScAAT7iAvb4BSAEAAScAAMABABE+Aj0cwAEV4xbAARXgLoPpwABRMYKOAQABJ4FqAMABAGA9HMABFfgWwAEV9S6D6cAAUTGCjgEAARbAARYJFsABFgKAwAEV/sAl+NaCScAAT7iAvb4BAMABAGA/PRzAARYdFsABFhoug+nAAFExgo4BAAEng9wAwAEAYE7AARYywAEWPQAAvPFgA8AA/FUBKk7AARZPwAEWWwAAvj1gA8AA/hsBFsABFm8WwAEWYYDAARZdwCX41rXHwABPubhZwABqh0XAARaMAcABFpXAARabAAAnYAPAAP4bAZMBHMABFqaEwAEWoMAl+oBjAQABg8ABFqjAJfpIAMAA/0kBjMABFrXAJfqAHMABFrqEwAEWtcAl+oBkAQABlADAAP9BPgNJwAEWxoLAARbKwCX6Mz4BPRzAARbjFsABFuAug+nAAFExgo4BAAEngYsAwAEAYD89HMABFv4umvEBAAEcwAEXERbAARcIgMABFwTAJfjWW8AAT7pLAQABhMABFxLAJfqAAMAA/s4AwABRNT2KwAEXIcAl+jMpRcABFz4BwAEXR8ABF00AACdgA8AA/hsBkwEcwAEXWITAARdSwCX7VGMBAAEWwAEXbBbAARdegMABF1rAJfjWtcfAAE+5vDfAAGqGAMAA/0kBjMABF4DAJftUHMABF4WEwAEXgMAl+1RkAQABlADAAP9BPgVJwAEXkYLAAReVwCX6Mz4BPRzAAReuFsABF6sug+nAAFExgo4BAAEngYsAwAEAYD89HMABF8wWwAEXyS6D6cAAUTGCjgEAARzAARfyFsABF+QWwAEX1oDAARfSwCX41rXHwABPuarawABqi0sBAAGEwAEX88Al+1QAwAD+zgDAAQBgPRzAARgFFsABGAIug+nAAFExgo4BAAEng1sAwAEAYD0cwAEYGC6a8QEAARzAARgrFsABGCKAwAEYHsAl+NZbwABPuksBAAEcwAEYOIPAARgswCX6SGQBAAGEwAEYOsAl+1QAwAD/QQDAAP7OAMAAUTU9isABGEnAJfozKT0cwAEYaRbAARhmLoPpwABRMYKOAQABJ4MmAMABAGAGwABRQIDJwAEYfMABGI3AARptAAC9vwFqwAEYfWADwAD/aAIAAAEDwAEYncABGm0AAAACAQLAARi8AAAAvjdgA8AAT8sAwAEYwgAAIIC1WwFqAGADwAD/JXkAXAE+Az0cwAEYzxbAARjMLoPpwABRMYKOAQABJ4OzAMABAGBGwAEY38ABGRbAARj3AAAAgm9gA8AATw0AFsABGQmAwAEZBcAl/RWF18AAT80+AUnAARkeHMABGTIWwAEZLYLAARkiwCX9ZoJrwABPEkgBAAFqwAEZTGADwABO5sABAm8AwAD/dT4CTsABGXfAARl+AACD8WADwABPXwEmwAEZdwGCwAEZgMAl/WZgA8AAT189HMABGdAWwAEZzS6D6cAAUTGCjgEAASTAARntARbAARngg8ABGdnAJf3FndnAAE9hAMABAGA+Az0cwAEaChbAARoHLoPpwABRMYKOAQABJ5pTAMABAGA9HMABGiAumvEBAAGCwAEaJsAl/WYAwABRNT0cwAEaPhbAARo7LoPpwABRMYKOAQABJ4biAMABAGA9HMABGl8WwAEaXC6D6cAAUTGCjgEAASeDswDAAQBgBsAAUUGAycABGnLAARqDwAEa4QAAvcIBasABGnNgA8AA/2gCAAABA8ABGo7AARrhAAAAAgECwAEaqAAAAL43YAPAAE/cAMABGq4AACCAtVsBagBgA8AA/yV5AFwBPgI9HMABGrsWwAEauC6D6cAAUTGCjgEAASeG0QDAAQBgPRzAARrOFsABGssug+nAAFExgo4BAAEWwAEa2IDAARrUwCX+0oC9wABP3gDAAQBgBsAAUUKAycABGubAARr3wAEbPgAAn1QBasABGudgA8AA/2gCAAABA8ABGwDAARs+AAAAAgECwAEbGAAAAL43YAPAAE/rAMABGx4AACCAtVsBagBgA8AA/yV5AFwBPgE9HMABGysWwAEbKC6D6cAAUTGC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0xbAASPQLoPpwABRMYKOAQABJ75FAMABAGA9HMABI/wumvEBAAEWwAEkBoDAASQCwCYKGoC9wABQvQDAAFE1ScABJBEhHMABJCYWwAEkGYDAASQVwCYKGoMqwABQvkgBAAErAMAATyI+Aj0cwAEkOhbAASQ3LoPpwABRMYKOAQABJ75EAMABAGA9HMABJFsumvEBAAEWwAEkZYDAASRhwCYKGoMqwABQvgDAAFE1Pz0cwAEkgRbAASR+LoPpwABRMYKOAQABJ4MmAMABAGAGwABRT4DJwAEklMABJKXAASXAAAC+LAFqwAEklWADwAD/aAIAAAEDwAEkv8ABJcAAAAACAQLAASToAAAAvjdgA8AAUOEAwAEk9AAAIIC1WwFqAGADwAD/JXkAXAE+BD0cwAElARbAAST+LoPpwABRMYKOAQABJ75GAMABAGA9HMABJS0umvEBAAEWwAElN4DAASUzwCYLTIC9wABQvQDAAFE1ScABJUIhHMABJVcWwAElSoDAASVGwCYLTIMqwABQvkgBAAErAMAATyI+Aj0cwAElaxbAASVoLoPpwABRMYKOAQABJ75EAMABAGA9HMABJYwumvEBAAEWwAElloDAASWSwCYLTIMqwABQvgDAAFE1Pz0cwAElshbAASWvLoPpwABRMYKOAQABJ4MmAMABAGAGwABRUIDJwAElxcABJdbAASakAAC+MgFqwAElxmADwAD/aAIAAAEDwAEl4cABJqQAAAACAQLAASX7AAAAvjdgA8AAUO0AwAEmAQAAIIC1WwFqAGADwAD/JXkAXAE+BD0cwAEmDhbAASYLLoPpwABRMYKOAQABJ5pVAMABAGA9HMABJiQumvEBAAEWwAEmLoDAASYqwCYMfoXSwABQ7wDAAFE1ScABJj4hHMABJk4WwAEmRoDAASZCwCYMfiLAAFDwSAEAASsAwABPIj4CPRzAASZiFsABJl8ug+nAAFExgo4BAAEngYsAwAEAYD0cwAEmdS6a8QEAARbAASZ/gMABJnvAJgx+IsAAUPAAwABRNT89HMABJpYWwAEmky6D6cAAUTGCjgEAASeDJgDAAQBgBsAAUVGAycABJqnAASa6wAEnfAAAhcgBasABJqpgA8AA/2gCAAABA8ABJszAASd8AAAAAgECwAEm7QAAAL43YAPAAFD9AMABJvMAACCAtVsBagBg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Z8AmRjsAAWADwABSk76TwABSoT4BScAAR44lwABHlIHAAEeSwCZGSWADwABSkz4BPRzAAEe4FMAAR7bAJkZJAQFgA8AAUpO+nQEAARbAAEfPFMAAR83AJkY7AAFgA8AAUpOva8AAUpYAwABSmj4BPR7AAEgBwABR1AIAAoHAAEgbwCZGSRbAAEggFMAASB7AJkY7AAFgA8AAUpOva8AAUpYAPz4DScAASGQewABIaMAAUdcBAAGAwABIc8AmRjsAPgE9i8AASIXAJkdfHsAASKDAAFK5BQAFFsAASLouoQbAAFIDgMAASNjAJkY7gcAASOvAJkZJHMAASQiCwABI/sAmRldIAQABasAASRVgA8AAUkbAAQfiAMAA/3UcwABJVBbAAElNFsAASUUWwABJOC6hBsAAUgOESK+WlXPAAFWQSAEAARbAAElhFsAASVcuh4nAAFIClXPAAFHpAMAA/3UAPgE9i8AASYnAJkdfHsAASbvAAFKtBQAFFsAASdUuoQbAAFIDgMAASfPAJkY7gcAASgbAJkZJHMAASiOCwABKGcAmRldIAQABasAASjBgA8AAUkbAAQfiAMAA/3UcwABKbxbAAEpoFsAASmAWwABKUy6hBsAAUgOESK+WlXPAAFWQSAEAARbAAEp8FsAASnIuh4nAAFIClXPAAFHpAMAA/3UAPTUAAAABAGADwABR4AFqwABKm2ADwABR4HkjHMAASqKEAMAmUp5IAQABKwAAKxzAAEqihADAJlKels0BAAEkwABKvQInvp6DwABKtcAmR18AwABR4gFcScAASsolwABK1YPAAErOwCZHX2ADwABSkz4BPRzAAEsTFsAASv8WwABK9S6HicAAUgKqXcAAUfBWAQABFMAASxfAJkdfAwFgA8AAUpMAwAD+0D9CwABLPgBKwABLUAGDwABLV8AmR18GwABSC4DNwABLZsAAS27AAE3oAAC+jQAAAAEDwABLhsAATegAAAACAgLAAEuPAAAAgddgA8AAVrIAwABLmgAAAIJOYAPAAFayAABgA8AAVrIBPgRJwABLoyXAAEupgMAAS6fAJlOFYAPAAFKTPgNOwABLywAAAIF2YAPAAFayAEXAAEvZAcAAS+LAAEvkAABiYAPAAP4bAZMBHMAAS+uDwABL6cAmU+FjAQABFsAAS/wWwABL7xTAAEvtwCZThQAB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AFMdwABTPU7AARDdwAEQ3wAAgddgA8AAVrIBFsABEOYugdfAAFKNPTUAAAABAGADwABR4AFqwAEQ7WADwABR4HkjHMABEPSDAMAnIC1IAQABKwAAKxzAARD0gwDAJyAtls0BAAEkAAYnvz0ewAERFcAAUdUBAAGCwAERHsAnIAwAJ4DZHsABES/AAFHVAQABFsABETgugk7AAFKOACe/PhbAARFQFsABEUMuoQbAAFKMocDAAFMnAMAAUeIBXEnAARFqHMABEXsWwAERbi6hBsAAUoxIAQABFsABEYCCwAERfsAnIAyEV8AAVrYAwAD/dT4BScABEZAlwAERloLAARGUwCcgDGADwABXXz4CScABEbUiFsABEbsUwAERucAnIAwCAWADwABXX4VOwABXRgAhHsABEcjAAFHeAQABFMABEd7AJyAMAgFgA8AAV18APgNOwAER9wAAAIKUYAOI/ABJwAESBxbAARINFsABEgsugk7AAFKOhU7AAFbCPgJOwAESL8ABEjcAAL7PYAOEJQEmwAESLwEWwAESOxbAARI5LoJOwABSjoJJwABWuWADhCU9i8ABEk/AJyFXFsABEmcWwAESXoTAARJWwCchhIJuhCqFVYTKScABEoQWwAESihbAARKILoJOwABSjoVQwABWzT4CTsABEqzAARK0AAC+z2ADhCUBJsABEqwBFsABErgWwAESti6CTsAAUo6CScAAVrlgA4QlPYvAARLMwCchVxbAARMAFsABEvkWwAES5BbAARLbhMABEtPAJyH6gm6EKoTHhMiAw8AA/qWClIiXScABExcWwAETHRbAARMbLoJOwABSjoebwABWwD4CTsABEzrAARNCAAC+z2ADg68BJsABEzoBFsABE0YWwAETRC6CTsAAUo6CScAAVrlgA4OvPYvAARNawCchVxbAARNphMABE2HAJyKEgpSDsT9JwAEThSEcwAETjoPAAROJwCchV0gBAAErAIkAPgI9i8ABE6XAJyFXHMABFGMewAETuZs4AQABHMABE+qAwAET4MAnHye+eQIAAhbAARQuFsABFCoWwAEUHS6hBsAAUoyaJsAAUyGEyYNLJsABFEEBFsABFEEWwAEUOhbAARQ4LoJOwABSjoJJwABWuYUZAGADgxwAwABR+ACFmwEAAYPAARRywCchVwCbP0nAARSFIiEWwAEU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AR/fAcABH+jAAR/qAABiYAPAAP4bAZMBHMABH/GBwAEf78AnLhhjAQABFsABIAUWwAEf+C6va8AAUpZhwAD+7wDAAP9JAYnAASANwCcuGBzAASAOgcABIA3AJy4YZAEAAZQAwAD/QT4BPR7AASAawABR1AIAAhzAASBFFsABIDkur2vAAFKWSwEAAYHAASBGwCcuGADAAP7OgMABIErAJy32AEAcwAEghhbAASB/HMABIHeAwAEgasAnLfaVcQAAAADAAP6UYcAAztZIAQABFsABIJaAwAEgicAnLfZhwAD+7wDAAP8/wAEgasABIJwABsAAUpuAzcABIKbAASCtwAEg0wACpBAAAAABA8ABILLAASDTAAAAAQEBwAEgyQAAAIeJYAPAAFHlAABgA4OQAAbAAFKcgM3AASDYwAEg5sABIQUAAr7kAAAAAQPAASDwwAEhBQAAAAEBAcABIP4AAACEV2ADwABTEQAAYAPAAFKTAAbAAFKegM3AASEKwAEhHsABITcBAIRmAWrAASELYAPAAP9oAgAAAQPAASEmwAEhNwAAAAAAAABgA8ABAIMBSsABISkBFsABITAWwAEhKS6EV8AAUpWEZq+jBsAAUp+AzcABITzAASFQwAEhbwEAh3EBasABIT1gA8AA/2gCAAABA8ABIVvAASFvAAAAAAAAAGADwAD+GwFKwAEhXgEWwAEhZRbAASFeLoRXwABSlYdxr6IGwABSoIDNwAEhdMABIYvAASHEAQChwAFqwAEhdWADwAD/aAIAAAEDwAEhncABIcQAAAAAAAAAYAPAAQACAUrAASGgARzAASG7HMABIa0WwAEhoC6va8AAUpaAqwEBYAPAAQACAWrAASGxYQMBYAPAAFayYAPAAQACwAEIKQDAAP6IWAEAASeWCQDAAP6RBsAAUqGAzcABIcnAASHSwAEh7wEAvpMAAAABA8ABIejAASHvAAAAAAAAAGADwAD8VQFKwAEh6wEpBsAAUqKAzcABIfTAASILwAEiLgEAgkkBasABIfVgA8AA/2gCAAABA8ABIhLAASIuAAAAAAAAAGADg5ABSsABIhUBJsABIhUBFsABIigWwAEiIhbAASIVLq9rwABSloMewAD+o4JJwABWuWADg5AAACctzAAnLwQAJy9EACcvhgAnL98AJzA4ACcwxgAnMP8AJzFtAAAACALA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J0MLCABIAQABKwAAKxzAATdWFADAJ0MLCACWzQEAASQABCe/TB7AATeJwABR1QEAAYLAATeSwCc+TQAnv04ewAE3pMAAUdUBAAGFwAE3rcAnQjMAAMAAUeIBXE7AATfOwAE30gAAgKxgA8ABAAIBJMABN+sBFsABN+YWwAE33hbAATfXLoRXwABSlYRIr5aArMAAVZNJwAE39yIiHMABN/8UwAE3+8AnQ4gIAEgBAAEnv1AAwAEAEQAcwAE4QhbAATg9FsABODAWwAE4KBbAATghLoRXwABSlYRmr6ODHcABAJGB6sAA/qRIAQABJ79RAMABABEBIhzAAThsFMABOGjAJ0OICABIAQABJ584AMABABEAHMABOLoWwAE4tRbAATioFsABOKAWwAE4mS6EV8AAUpWEZq+jgx3AAQCRgerAAP6kSAEAASe/UgDAAQARPgA+Aj2KwAE5WMAnPk0rPYvAATl2wCc+XitCwAE5ogA/P0nAATnFHMABOdOCwAE5ycAnPk1IAQABKwDAAP91PgVOwAE568ABOfAAAIC9YAPAAQACARbAATn5FsABOfIuhFfAAFKVocDAAFMnTsABOhbAATodAABhYAPAAP4bASMWwAE6JhbAATofLoRXwABSlb9TwABW1ZQWwAE6TYTAATpIwCdEvmHAAQAGAWADwAD+G07AATpwwAE6eAAAglddA8AA/r8BYAOR2AEcwAE7OBzAATqHFsABOnour2vAAFKWgKsBAWADkdgBNMABOosDwAE6i8ABOzYAAAABAQHAATqUAAAAlvFgA8AAVrIAAGADkdgBPgFKwAE6oQEcwAE67GrAATqoYAORxaYPgl8DAAMWwAE6+4bAATr5wCdFeoRmwABWtxbAATsGhsABOwTAJ0V6h3HAAFa4FsABOyYWwAE7FIbAATsSwCdFeqHAwABWu2HAAQAGAJHNAMAA/oiArQAAAADAAP6TPRzAATtQFsABO0kuhFfAAFKVntsEAAMcwAE7jGrAATtmXQOR0QFhAwJgA8ABAAJgA8ABAAJgA5G6k/CIPQIAAhbAATuwFsABO6kuhFfAAFKVocDAAFMnFsABO9YWwAE70BbAATvDLq9rwABSloMewAD+o6HAwABWuwCR1RbAATv7FsABO/QuhFfAAFKVh3GvooXAATwRwCdE6QGCV4bAATwswCdFL6+aSsABPDwBKz89NQAAAAEAYAPAAFHgAWrAATxTYAPAAFHgeSMcwAE8WoQAwCdGt0gBAAErAAArHMABPFqEAMAnRreWzQEAASQABCe/VBbAATx+LqHAwABSoCeDWx7AATyfwABR1QEAAYLAATyowCc+TQAAwABR4gFcTsABPMrAATzPAACCa2ADhGUBasABPN9gA4RlhUpJwAE86yIiFsABPPmCwAE878AnPk2Hm8AAVsABFsABPQ6CwAE9BMAnPk2FUMAAVs0BFsABPSSCwAE9GsAnPk2FTsAAVsI+AT2MwAE9NsAnRyYjFsABPT0uhVDAAFKXasABPVZgA4RlhTtqwAE9bWADhGWFLAFgA4RlScABPYAiJcABPZUWwAE9joLAAT2EwCc+TYJJwABWuWADhCUAHMABPcMWwAE9vhbAAT23gsABPa3AJz5NgknAAFa5gmsASAEAAWrAAT3UYAOEZYVZAMAA/3U+AT2MwAE95sAnRyZqwAE9+2ADhGWFWT9JwAE+EBbAAT4ULr9BwABSmD4DPTUAAAABAGADwABR4AFqwAE+KmADwABR4HkjHMABPjGFAMAnSEFIAQABKwAAKxzAAT4xhQDAJ0hBls0BAAEkAAwnv1QWwAE+VS6hwMAAUqAng1snv1UWwAE+ii6EV8AAUpUngYuCwAE+k8AnPk0ngYsWwAE+ny6va8AAUpYngYuEwAE+rsAnRyYngyYAwABR4gFcTsABPsTAAT7JAAC/VmADg5ABHMABPykfwAE+2cAAivsFAAWAwAE+6MAnPV0WwAE+8y6EV8AAUpWCwAE++8AnPk0WwAE/Bi6va8AAUpaEwAE/FMAnRyYAodsAAAAAwACK70nAAT87HMABP0oWwAE/RhbAAT8/LoRXwABSlZomwABTIUgBAAEWwAE/UoXAAT9NwCdI04UZg5gAwAD/dT4FPRzAAT93FsABP3MWwAE/bC6EV8AAUpWaJsAAUyGElgEAAYXAAT+BwCdI0wCDVk7AAT+lwAE/rQAAhEhgA6mlASbAAT+lARbAAT+2FsABP68uhFfAAFKVhEivlmADqaVJwAE/xyXAAT/cFsABP9WCwAE/y8AnPk2CScAAVrlgA4QlPgE9NcABP/4AAAEAXQPAAP6/AWADhCUBFsABP/6GwAE/9sAnSaCpEqnANQAAAAEAWwEcwAFAEYfAAUAPwCdJ9lYBAAEmwAFAFQGFwAFAFcAnSNNgA4QlAMAA/tA1AAAAAQBbARzAAUAch8ABQBrAJ0n2VgEAASbAAUAqARbAAUAqgsABQCDAJz5NgknAAFa5YAOEJQDAAP7QhwDAJ0n2Pz01AAAAAQBgA8AAUeABasABQEVgA8AAUeB5IxzAAUBMhwDAJ0qUSAEAASsAACscwAFATIcAwCdKlJbNAQABJAAFJ79UFsABQHAuocDAAFKgJ4NbJ79XhcABQJ/AJ0jTAMAAUeIBXEnAAUCvFsABQLoWwAFAsy6EV8AAUpWE9sAAUx0+AUrAAUDaASbAAUDaARfAAUDhLr9DJsABQOEBFsABQQuCwAFBAcAnPk2CScAAVrlgA4OQwABSsmADg5A+AUrAAUEuARfAAUE1Lr9DhcABQVXAJ0jTwABSsj8/PTUAAAABAGADwABR4AFqwAFBeGADwABR4HkjHMABQX+FAMAnS3FIAQABKwAAKxzAAUF/hQDAJ0txls0BAAEkwAFB0QMnv1QWwAFBrC6hwMAAUqAnv1gAwABR4gFcSsABQdgBJsABQdgBF8ABQd8uv0MmwAFB3wEWwAFCCYLAAUH/wCc+TYJJwABWuWADg5DAAFKyYAODkAbAAFK4gM3AAUIYwAFCMsABQtUAAL7kAWrAAUIZYAPAAP9oAgAAAQPAAUI8wAFC1QAAAAEBAcABQkoAAACEV2ADwABTEQAAYAPAAFKTAT4BSsABQlgBIxzAAUJmgMABQl/AJ0w8SAEAARbAAUJuLoRXwABSlQDAAP91Lh/AAUKSwABSuwQABIDAAUKkwCdMPBbAAUKsLq9rwABSlhbAAUK6LoVQwABSlxbAAULELr9BwABSmAABYAPAAFKwBsAAUrmAzcABQtrAAULpwAFFPAABt0gAAAABA8ABQvHAAUU8AAAABQUFwAFC/wAAAIRXYAPAAFMRAMABQw8AAACB12ADwABWsgDAAUMaAAAAgk5gA8AAVrIAwAFDKAAAAIVQYAPAAPxVAMABQzcAAAC/RmADwAD8VQAAYAPAAFayAT4ETsABQ13AAUNqAACva10DwAD+vwFgA8AAVrIBMcABQ3VgA8AAVrIAScABQ30lwAFDg4HAAUOBwCdM/GADwABSkz4BPRzAAUOfFMABQ53AJ0z8AQFgA8AAUpO+nQEAAYXAAUO0wCdNRwDAAFKaPgE9HMABQ+OFwAFD1sAnTUdWAQABgcABQ+fAJ0z8AMAA/tBJwAFD9SXAAUP7gsABQ/nAJ00MYAPAAFKTPgE9HMABRBcUwAFEFcAnTQwCAWADwABSk76dAQABhcABRCzAJ01HAMAAUpo+AT0ewAFETsAAUdQCAAKCwAFEaMAnTQyFwAFEa8AnTUcAScABRIQcwAFEnBbAAUSVhcABRIjAJ01HYcAA/u9IAQABlADAAP8/PgFKwAFEqgEWwAFEvoXAAUSxwCdNR4DDwAD+pT4BSsABRNkBH8ABROTAAFK7BAAEgMABRQHAJ0zshcABRQnAJ01Hg8ABRRfAJ00chMABRSHAJ00sAAAAJzlSACc6BwAnPDwAJz0nACdMBgAnTMIAJ064AAAABgLAAFK8gM3AAUVBwAFFR8ABTIkDv1kAAAFgAcAAUpMAAAABBcAAUsaAzcABRYjAAUWIwAFGqQAAAAPAAUWuwAFGqQAAAAUFBcABRcMAAACEV2ADwABTEQDAAUXZAAAAv1pgA8AAVrIAwAFF9wAAAL9FYAPAAFayAMABRhoAAACFUGADwAD8VQDAAUYvAAAAv0FgA8AA/FUAAGADwABSvAE/AQkAwAFGRcAAUqQEAASAwAFGS8AnTyExwAFGXGADwABWsgKCwAFGXcAnT0GBwAFGdcAnTzGDwAFGksAnT1GEwAFGnMAnT2EABgbAAFK+gM3AAUauwAFGusABRuMBAL9FAAAAAQPAAUbRwAFG4wAAAAAAAABgA8AAVrIBSsABRtQBHMABRuAWwAFG1C6va8AAUpZLAQABkwDAAP7OBsAAUr+AzcABRujAAUb0wAFHFQEAv1oAAAABA8ABRwPAAUcVAAAAAAAAAGADwABWsgFKwAFHBgEcwAFHEhbAAUcGLq9rwABSlksBAAGUAMAA/s4GwABSwYDNwAFHGsABRyHAAUncAACkEAAAAAEDwAFHJsABSdwAAAABAQHAAUc9AAAAh4lgA8AAUeUAAGADg5ABPgVJwAFHTiIhFsABR1oWwAFHUy6EV8AAUpWEH6+mACEWwAFHhRzAAUd4FsABR3OAwAFHacAnUJOHTsAAUedLAQABFsABR4AWwAFHeS6EV8AAUpWaJsAAUyEAwAD/Bb6HwABSMz4BPRzAAUfyH8ABR6LAAFKSAwADFsABR7cuhFfAAFKVFsABR78uv0XAAFK+FsABR9cuv1rAAFK/AKQQAQABgMABR/jAJ1CTAMAAUpA/TsABSB3AAUgiAACCa2ADhGUBasABSDJgA4RlhUpJwAFIPiIWwAFIURbAAUhCLr9awABSv4VQwABWzQEWwAFIbBbAAUhdLr9awABSv4VOwABWwj4BPYnAAUh+wCdRWyMWwAFIhS6FUMAAUpdqwAFInmADhGWFO2rAAUi1YAOEZYUsAWADhGU/ScABSMcWwAFIyy6/QcAAUpg+AT0cwAFJph/AAUlVwACK+wUABYDAAUlkwCdQkxbAAUlvLoRXwABSlRbAAUl3Lr9awABSvxbAAUmHLq9rwABSloHAAUmVwCdRWwCh2wAAAADAAIrvP0rAAUm8ASbAAUm8ARbAAUnSFsABScMuv1rAAFK/gknAAFa5YAODkAbAAFLCgM3AAUnhwAFJ+8ABStkAAL7kAWrAAUniYAPAAP9oAgAAAQPAAUoFwAFK2QAAAAEBAcABShMAAACEV2ADwABTEQAAYAPAAFKTAT4BSsABSiEBIxzAAUovgMABSijAJ1KlSAEAARbAAUo3LoRXwABSlQDAAP91Lh/AAUpbwABSxgUABYDAAUqCwCdSpRbAAUqKLr9awABSvxbAAUqmLr9FwABSvhbAAUq+LoVQwABSlxbAAUrILr9BwABSmAABYAPAAFK8BsAAUsOAzcABSt7AAUrtwAFLrAABv1sAAAABA8ABSvvAAUusAAAAAQEBwAFLBAAAAJ8LYAPAAFayAABgA8AAVrIBPgFJwAFLFyXAAUsngMABSxvAJ1NhYAPAAFK8PgFKwAFLWgEWwAFLbRTAAUthwCdTYQABYAPAAFK8v1rAAFK/PgFKwAFLkAGAwAFLl8AnU2EGwABSxIDNwAFLscABS8DAAUyHAAG/XAAAAAEDwAFLzsABTIcAAAABAQHAAUvXAAAAnwtgA8AAVrIAAGADwABWsgE+AUnAAUvqJcABS/qAwAFL7sAnU/NgA8AAUrw+AUrAAUwtARbAAUxAFMABTDTAJ1PzAAFgA8AAUry/RcAAUr4+AUrAAUxrAYDAAUxywCdT8wAAJ0/DACdQFgAnUGkAJ1JvACdTNwAnU8kAJ1RbAAAABgABBMAAUcqAzYqlivsGgooAYAPAAFHgAWqK32ADwABR4HkUBsAAUcyAzYtai16LxgABv10AAAABA4txi8YAAAACAgKLegAAAIHXYAPAAFayAIuFAAAAgk5gA8AAVrIAAGADwAD+GwE+AUqLjAEei6KcHgIAAiaLswEWi7OAi7HAJ1S/gknAAFa5YAODkCaLvQEWi72Bi7vAJ1TNgknAAFa5YAODkAAGwABRzYDNi8mL14wmAAGi9AAAAAEDi+GMJgAAAAEBAYvpAAAAgmpgA4OQAABgA4RlAT4BSov1ASMljAOAi/zAJ1VCYAOEJRaMGRSMEsAnVUIAAWADhCWCa4QoKwFgA4RlBsAAUc6AzYwpjC6MrgABv14AAAABA4w9jK4AAAACAgKMQwAAAIC9YAOIxwCMWAAAAJ68YAPAAFWAAABgA8AA/FUBPgFKjGwBIiEWjHmAjHTAJ1WjhnWIzgEcjJMWjIuAjIbAJ1WjhEiIzUgBAAEWjKWBjJbAJ1WvhEjAAFWSAMAA/3UGwABRz4DNjfSN+Y/NAAG/XwAAAAEDjg6PzQAAAAICAo4XAAAAgddgA8AAVrIAjiIAAACCTmADwABWsgAAYAPAAPxVAT4ISY4pFo4vgI4twCdWJoQewABWzkqOOQEpP0mOSByOYR6OTMAAUc0BAAEmjlkBFo5ZgI5XwCdWJoJJwABWuWADg5AASAEAAR6OZMAAUc0BAAEmjnEBFo5xgY5vwCdWNIJJwABWuWADg5AAAMAA/3VKjnoBKj9JjooWjpCAjo7AJ1Ymh5vAAFbASo6ZASEiIhaOpIGOosAnVjSHm8AAVsABFo6xgY6vwCdWNIVOwABWwgEWjr+Bjr3AJ1Y0hVDAAFbNP0mOzBaO0oGO0MAnVjSHm8AAVsBKjtsBISIiFo7mgI7kwCdWJoebwABWwAEWjvOAjvHAJ1YmhU7AAFbCARaPAYCO/8AnViaFUMAAVs0/SY8OFo8UgI8SwCdWJoVQwABWzUqPHgEhIhaPKYGPJ8AnVjSFTsAAVsIBFo83gY81wCdWNIVQwABWzT9Jj0QWj0qBj0jAJ1Y0hVDAAFbNSo9UASEiFo9fgI9dwCdWJoVOwABWwgEWj22Aj2vAJ1YmhVDAAFbNP0mPeiIlj4CAj37AJ1YmYAPAAFKwASWPmoGPmMAnVjRgA8AAUrBKj7ABKj9Kj8ABKQbAAFHQgM2P0I/VkEkAAb9gAAAAAQOP4pBJAAAAAQEBj+sAAACfC2ADwABWsgAAYAPAAPxVAT4BSo/8ASIWkA+AkAPAJ1ggh5vAAFbAACEiFpAogJAcwCdYIIQgwABWwQEWkD+AkDPAJ1gghCLAAFa9BsAAUdGAzZBMkFGaNgABvqIAAAABA5BhmjYAAAACAgKQbwAAAIHXYAOEwQCQfwAAAIJOYAOEwQAAYAPAAPxVAT4TTpCakKoAAL6vXQPAAP6/AWADiZYBFpCugJCswCdYkYTFhMZOkNSQ5AAAvrBdA8AA/r8BYAOJlgEWkOiBkObAJ1idhMWExk6Q/pERAACrtmADwAD+GwEWkSOCkRPAJ1i0YcAA/u9JkS0hHJFEhJExwCdY+kgBAAEWkVeDkUfAJ1jXYcAA/u8AwAD/P0qRXwEqP06RfAAAAITxYAObMABJkYwhHJGjhJGQwCdY+kgBAAGTAMAA/z8+BE6RvpHEAACFhV0DwAD+vwFgA4j8AR6RysAA+BYBAWADiPwBhJHZwCdY+gBFkfIBkfuR/QAAYmADwAD+GwGTARySBIeSAsAnWZpjAQABhJIGwCdY+gDAAP9JAY+SGsAnWZockhuHkhrAJ1maZAEAAZQAwAD/QT4BPRySLIaSJ8AnWWyAvwIAAoeSLcAnWZofkjaJlQEAARySV4KSSMAnWLRLAQABh5JYwCdZmgDAAP7OAADAAP7PPY2SZ8AnWUUekoObOgIAAoOSjcAnWNeGkp7AJ1lsAEWSqgGSs5K1AABiYAPAAP4bAZMBHJK8h5K6wCdaRGMBAAGEkr7AJ1j6AMAA/0kBj5LSwCdaRByS04eS0sAnWkRkAQABlADAAP9BPgNOkuiS7wAAvrNgA4j8ARaTBByTAIKS8cAnWLRLAQABh5MBwCdaRADAAP7OhYeJm06TGpMhAAC+tGADiPwBHJMwhZMjwCdZRYWbAQABFpNSHJNOg5M/wCdY10sBAAGHk0/AJ1pEAMAA/s6Fh4mbAJs/SZNgIRyTaxSTZMAnWo0IAEgBAAEUk27AJ1q8CQAAiQBKk3YBKj8/SZORIRyTrhaTl4CTlcAnWJGFOoTHSAEAARaTs4GTscAnWJ2FOoTHAMAA/z9Kk8sBKj9Ok/WUCwAAv2FdA8AA/r8BYAOIkQEWlA+AlA3AJ1iRhMeEyE6UQZRXAAC/Yl0DwAD+vwFgA4iRARaUW4GUWcAnWJ2Ex4TISZRzIRyUlBaUjYaUd8AnW1ZhwAD+70gBAAEWlK2HlJfAJ1t5YcAA/u8AwAD/Pz4BSpS7ASo/RZTPAZTYlNoAAGJgA8AA/hsBkwEclOEUlN/AJ1vVCABjAQABFpT5hpTjwCdbVmHAAP7vAMAA/0kBFZUBwCdb1QgclQIUlQHAJ1vVCABkAQABlADAAP9BPgdOlSCVKwAAvr1gA4iRARyVQoaVLcAnW1ZLAQABFJVDwCdb1QgAAMAA/s5OlV+VagAAvr5gA4iRARyVgYeVbMAnW3lLAQABFJWCwCdb1QgAAMAA/s5JlYohHJWlFpWZFJWOwCdcKwkAhCWIpUgBAAEWlbMUlajAJ1xVCgCEJYilAMAA/3VKlcABKj9OlduV4QAAvsBgA4j8ARaV7hSV48AnXCsJAIKUiJdOlgGWBwAAvsFgA4j8ARaWFBSWCcAnXFUKAIKUiJdJlh4hHJYvhZYiwCdZRUgBAAErAMAA/3U+AT0VlkDAJ1zTDByWVYWWSMAnWUWFmwEAARSWZMAnXNMMAACbPz9JlnYhHJaAFJZ6wCdctQsASAEAARSWg8AnXNMMAACJAEqWigEqP06WuZbKAAC/Y10DwAD+vwFgA4iRARaWzoCWzMAnWJGEyITJTpb7lwwAAL9kXQPAAP6/AWADiJEBFpcQgZcOwCdYnYTIhMlJlyMhHJc/Fpc4FJcnwCddVggAYcAA/u9IAQABFpdTFJdCwCddeQkAYcAA/u8AwAD/P0qXWwEqP0WXawGXdJd2AABiYAPAAP4bAZMBHJd9FJd7wCdd1woAYwEAARaXkBSXf8AnXVYIAGHAAP7vAMAA/0kBFZeYwCdd1wocl5kUl5jAJ13XCgBkAQABlADAAP9BPghOl7eXwgAAvr1gA4iRARyX1BSXxMAnXVYIAEsBAAEUl9XAJ13XCgAAwAD+zk6X8Zf8AAC+vmADiJEBHJgOFJf+wCddeQkASwEAARSYD8AnXdcKAADAAP7OSZgXIRyYMhaYJhSYG8AnXi8LAIQliKVIAQABFphAFJg1wCdeWwwAhCWIpQDAAP91SphNASo/SZhfIRyYcxaYbhSYY8AnXi8LAIC9iJVIAQABFpiBFJh2wCdeWwwAgL2IlQDAAQARSpiHASo/TpiimKgAAL7AYAOI/AEWmLUUmKrAJ14vCwCClIiXTpjImM4AAL7BYAOI/AEWmNsUmNDAJ15bDACClIiXSZjlIRyY9oWY6cAnWUVIAQABKwDAAP91PgE9FZkHwCdfEQ4cmRyFmQ/AJ1lFhZsBAAEUmSvAJ18RDgAAmz8/SZk9IRyZRxSZQcAnXvMNAEgBAAEUmUrAJ18RDgAAiQBKmVEBKj9OmW+ZewAAvrZgA4j8ARaZf4CZfcAnWJGFVYTKTpmWmaIAAL63YAOI/AEWmaaBmaTAJ1idhVWEykmZtCEcmcWFmbjAJ1lFSAEAASsAwAD/dT4BPRWZ1MAnX7ALHJnvhZniwCdZRYWbAQABFJn+wCdfsAsAAJs/P0qaEwEcmiYUmhrAJ1+UCgBIAQABFJopwCdfsAsAAIkABsAAUdKAzcABAaHAAQG2wAECRwABv2UAAAABA8ABAc7AAQJHAAAAAgICwAEB1wAAAIHXYAPAAFayAMABAeIAAACCTmADwABWsgAAXQPAAP6/AWADkdgBPgFKwAEB6QEewAEB8MAAUdMDAAMmwAECGAEWwAECGIDAAQIWwCdgVIJJwABWuWADg5AmwAECIgEWwAECIoHAAQIgwCdgZIJJwABWuWADg5AWwAECPhbAAQIsgMABAirAJ2BUocDAAFa7YcABAAYABsAAUdOAzcABAkrAAQJfwAEE9AABv2YAAAABA8ABAn3AAQT0AAAAAwMDwAECigAAAIHXYAODkADAAQKUAAAAgk5gA4OQAMABApsAAABhYAPAAP4bAABdA8AA/r8BYAOR2AE+Bk7AAQL5wAEDAQAAm3dgA8AA/hsBHMABAxIkwAEDEQEWwAEDCIDAAQMGwCdhGoRmg5WCTwEAASTAAQMqARbAAQMhgcABAx/AJ2EohGaDlQDAAQASScABAy8cwAEDO4PAAQMzwCdhVUgBAAGTAMAA/z8+AT2LwAEDR8AnYVUcwAEDXhbAAQNTgMABA1HAJ2EahFiCWoJPAQABFsABA2qBwAEDaMAnYSiEWIJaAMAA/0A/TsABA4QAAACDHmADg5AATsABA5QAAACa7WADg5AAScABA54cwAEDqoPAAQOiwCdhVWMBAAGTAMAA/0k+Aj2MwAEDtcAnYgWAwAEDvcAnYRo9jcABA8TAJ2IUgcABA83AJ2EoPgI9jMABA9/AJ2IFgcABA+fAJ2EoPY3AAQPuwCdiFIDAAQP3wCdhGkrAAQQAATHAAQQXYAOR2AIcwAEEQ2rAAQQdYAORxcAAT2KCXwMAAxbAAQRfhMABBFnAJ2IFhGaDlRbAAQRuhMABBGjAJ2IFhFiCWoLAAQR6wCdhNgCRzRzAAQStasABBIdgA5HFwABPioJfAwADFsABBMqFwAEEw8AnYhSEZoOVFsABBNqFwAEE08AnYhSEWIJagsABBObAJ2E2AJHNBsAAUdSAzcABTIzAAUyRwAFOvgABv2cAAAABA8ABTKrAAU6+AAAAAgICwAFMuAAAAJ8LYAPAAFayAMABTNMAAACva10DwAD+vwFgA8AAVrIAAFwBPgNOwAFM7MABTPMAAIJJYAODkAEmwAFM7AEWwAFNAYDAAUz1wCdjV4JJwABWuWADg5BJwAFNCyXAAU0WgsABTQ/AJ2OEYAOEJT4CTsABTTfAAU1AAACCbmADhMEBFsABTUkUwAFNQsAnY4QCAWADhCWCboQqRcABTVcBwAFNYMABTWIAAGJgA8AA/hsBkwEcwAFNaYTAAU1nwCdj/GMBAAEWwAFNeIHAAU1rwCdjZ2HAAP7vAMAA/0kBjMABTYDAJ2P8HMABTYGEwAFNgMAnY/xkAQABlADAAP9BPgJOwAFNlMABTZoAAIPbYAODkAEmwAFNlAEWwAFNrBzAAU2ogcABTZzAJ2NnSwEAAYTAAU2pwCdj/ADAAP7OgknAAFa5YAODkEnAAU26JcABTcSFwAFNvsAnZF9gA4QlPgFJwAFN3B7AAU3gwABR0QIAAoPAAU3xwCdjzRbAAU4BFMABTfvAJ2RfBQFgA4Qlgm6EKgBKwAFODAA/Pz4BRcABTjEBwAFOOsABTjwAAGJgA8AA/hsBkwEcwAFOQ4PAAU5BwCdlAWMBAAEWwAFOUoHAAU5FwCdjZ2HAAP7vAMAA/0kBi8ABTlrAJ2UBHMABTluDwAFOWsAnZQFkAQABlADAAP9BPgFJwAFOZxzAAU53gMABTmvAJ2NXSAEAARzAAU6GgcABTnrAJ2NnSwEAAYPAAU6HwCdlAQDAAP7OAMAA/3VKwAFOiwA/PRzAAU6sgcABTp/AJ2NnVgEAAYDAAU6wwCdjVwDAAP7QBsAAUdWAzcABTsHAAU7IwAFQOwABqT8AAAABA8ABTtDAAVA7AAAAAQEBwAFO2QAAAJ8LYAPAAFayAABgA8ABAAIBPgROwAFO8cABTvgAAKAnYAPAAQACASMWwAFPBoDAAU76wCdl8YVQwABWzSeAvCcAAWADwAEAAknAAU8dJcABTy2AwAFPIcAnZfFgA8AAUpM+AUrAAU9FASTAAU91AhbAAU9bFMABT0/AJ2XxAAFgA8AAUpOhwMAAUqCBwAFPbsAnZgw/TsABT4XAAU+MAACEV2ADwABWsgEWwAFPmoDAAU+OwCdl8YRXwABWtkrAAU+kASMcwAFPsoLAAU+rwCdmjkgBAAErAMAA/3UkwAFP8gIWwAFP0YDAAU/FwCdl8aHAwABWu4HAAU/kwCdmDCTAAVA5BBbAAU/+gsABT/fAJ2aOocDAAFa7J4FqFsABUB+AwAFQE8AnZfGhwMAAVruBwAFQMsAnZgwBYAPAAQACBsAAUdaAzcABUD7AAVBCwAFQrAABv2gAAAABA8ABUFjAAVCsAAAAAgICwAFQbQAAAIHXYAOIkQDAAVCEAAAAgk5gA4iRAABgA8AA/hsBPgFKwAFQiwEcwAFQmRbAAVCUgMABUJLAJ2digL2IlYJPAQABFsABUKWBwAFQo8AnZ3CAvYiVAMABABIGwABR14DNwAFQr8ABULTAAVEiAAGEHwAAAAEDwAFQvsABUSIAAAABAQHAAVDHAAAAnwtgA8AAVrIAAGADwAD8VQE+AUrAAVDYASImwAFQ8gEWwAFQ8hbAAVDrgMABUN/AJ2frgknAAFa5hB8AYAPAAPxVASXAAVEMgMABUQDAJ2frYAPAAFKwBsAAUdiAzcABUSXAAVEqwAFTVgABv2kAAAABA8ABUTzAAVNWAAAABgYGwAFRTwAAAJomYAPAAFMRAMABUWkAAACCamADwABXXwDAAVGMAAAAgO1gA8AAVxYAwAFRpAAAAIKUYAOI/ADAAVGzAAAAvqVgA8AA/FUAwAFR3wAAAIeJYAPAAFHlAABgA8AA/FUBPgc9NQAAAAEAYAPAAFHgAWrAAVHuYAPAAFHgeSMcwAFR9YYAwCdo3UgBAAErAAArHMABUfWGAMAnaN2WzQEAASTAAVIhBCe/P4PAAVIKwCdooye/QILAAVIWwCdokwDAAFHiAVxJwAFSJhzAAVIvg8ABUirAJ2ijSAEAARbAAVJDFsABUjyCwAFSMsAnaJOCScAAVyiClIiXAIkASsABUkkBKT9OwAFSXcABUmQAAIF2YAPAAPxVASlJwAFSboTAAVJywCdosT4DPR7AAVKKwABR2QQABIDAAVKnwCdoc4HAAVKswCdog4LAAVK0wCdok4XAAVK/wCdowQA9i8ABUs/AJ2ijasABUtxgA4kHwACdYD2OwAFS78AnaX4qPz0XwAFTFhbAAVMPgsABUwXAJ2iTgknAAFcogpSDwAFTHcAnaKOIlz0XwAFTLIHAAVMlwCdog76lKcAAV2hKwAFTRwGGwAFTTsAnaX4GwABR2YDNwAFTWcABU17AAVSxAAG/agAAAAEDwAFTesABVLEAAAAEBATAAVOIAAAAmiZgA8AAUxEAwAFTmwAAAIJqYAPAAFNiAMABU74AAACA7WADwABXFgDAAVPfAAAAh4lgA8AAUeUAAFwBPgJOwAFT9cABU/oAAIC9YAPAAQACARbAAVQGgsABU/zAJ2qNgL3AAFcbPRzAAVQSgMABVA7AJ2ptntsEAAMcwAFUVGrAAVQkXQOR0QFhAwFgA8ABAAJgA5G6kbWIPQEAAYTAAVRiwCdqswCR1RbAAVR5gsABVG/AJ2qNh3GvohbAAVSQhMABVIvAJ2qzYcABAAYBn5Mpr5oGwABR2oDNwAFUtMABVLnAAVbCAAGuAQAAAAEDwAFUyMABVsIAAAAFBQXAAVTWAAAAmiZgA8AAUxEAwAFU7AAAAKmTYAPAAFdfAMABVQsAAACClGADiPwAwAFVFgAAAL6lYAPAAPxVAMABVT4AAACHiWADwABR5QAAYAPAAPxVAT4FScABVU0cwAFVVoLAAVVRwCdrkkgBAAEWwAFVfRbAAVV0FsABVWqBwAFVWcAna4KEncAAV3CCboQqhVWEygCJAErAAVWJASk/TsABVZ3AAVWkAACBdmADwAD8VQEpScABVa6DwAFVssAna6A+Az0ewAFVysAAUdsDAAOAwAFV5MAna3KBwAFV6cAna4KEwAFV+8Ana7AAPYrAAVYLwCdrkmrAAVYYYAOJB8AAnWA9jcABVivAJ2wTKj4BPRfAAVZbgcABVkrAJ2uCvqUpwABXaD0XwAFWnhbAAVaVFsABVouBwAFWesAna4KEncAAV3CCboQqhVWCwAFWq8Ana5KEykrAAVazAYXAAVa6wCdsEwbAAFHbgM3AAVbFwAFWysABX6gAAb9rAAAAAQPAAVbjwAFfqAAAAAMDA8ABVvYAAACaJmADwABTEQDAAVcJAAAAgmpgA8AAU2IAwAFXJwAAAIeJYAPAAFHlAABcAT4DTsABVz3AAVdCAACAvWADwAEAAgEWwAFXS4HAAVdEwCdtE6HAwABTc07AAVd1AAAAglddA8AA/r8BYAOR2AA9HMABXu6AwAFe6sAnbQOe2wUAAxzAAV82asABXwBdA5HRAWEDAWADwAEAAmADkbqQ/og9AQABg8ABX0TAJ205AJHVFsABX1iBwAFfUcAnbROHca+iFsABX2+DwAFfasAnbTlhwAEABgKfkymCV4TAAV+ewCdtYa+aBsAAUdyAzcABX6vAAV+wwAFgvgABv2wAAAABA8ABX8jAAWC+AAAAAgICwAFf1gAAAJomYAPAAFMRAMABX+gAAACCamADwABW/QAAXAE+Ak7AAV/7wAFgAAAAgL1gA8ABAAIBFsABYAmBwAFgAsAnbimhwMAAU3M9HMABYCKAwAFgHsAnbhme2wQAAxzAAWBkasABYDRdA5HRAWEDAWADwAEAAmADkbqRtYg9AQABgsABYHLAJ24/AJHVFsABYIaBwAFgf8AnbimHca+iFsABYJ2CwAFgmMAnbj9hwAEABgGfkymvmgbAAFHdgM3AAWDBwAFgzsABYVAAAZxvAAAAAQPAAWDWwAFhUAAAAAEBAcABYOMAAACClGADwABYHQAAYAPAAFMRAT4CTsABYPXAAWEBAACfC2ADwABWsgEWwAFhCIDAAWEDwCdu/p8LwABYH0rAAWEXASMlwAFhKoHAAWEewCdvGWADwABTERTAAWE8wCdvGQEBYAPAAFMRKwFgA8AAUxEGwABR3oDNwAFhU8ABYVjAAWJWAAG/bQAAAAEDwAFhbcABYlYAAAABAQHAAWF2AAAAnwtgA8AAVrIAAGADwAD8VQE+AkAiJcABYZqAwAFhjsAnb55gA8AAV18BJcABYb2AwAFhscAnb55gA6j/wAFhjsABYdEBJMABYfUBFsABYeiAwAFh3MAnb56FnsAA/3xKwAFh+gEjJcABYg2AwAFiAcAnb55gA8AAV18hHMABYkAWwAFiNRTAAWIpwCdvngABYAPAAFdfhVXAAFc2SAEAASsAwAD/dSkBYAPAAPxVBsAAUd+AzcABYlnAAWJewAFjfAABv24AAAABA8ABYn/AAWN8AAAAAgICwAFiiAAAAJ8LYAPAAFayAMABYpkAAAAnYAPAAP4bAABgA8AA/FUBPgJAIiXAAWK3gMABYqvAJ3B9YAPAAFdfASXAAWLagMABYs7AJ3B9YAOo/8ABYqvAAWLuASTAAWMSARbAAWMFgMABYvnAJ3B9hZ7AAP98SsABYxcBIyXAAWMqgMABYx7AJ3B9YAPAAFdfIRzAAWNmFsABY2EcwAFjWRbAAWNSFMABY0bAJ3B9AAFgA8AAV1+hd8AAVzlLAQABgcABY1rAJ3CNAMAA/s6ClMAAVxpIAQABKwDAAP91KQFgA8AA/FUBgM0AJ3FjACYwkwAmMTUAJkTHACbhWgAm84UAJvR3ACb27AAm+YsAJxZQACcd+gAnLHkAJzGWACc4bQAnTtkAJ1R8AAAADgAnVJ8AJ1UiACdVgwAnVgYAJ1gAACdYcQAnYCoAJ2DwACdjLQAnZccAJ2c4ACdnwQAnaEkAJ2pDACdrSAAnbNkAJ23vACdu1AAnb3QAJ3BTACdxYwAAABQAAgbAAFLHv2+AzwAABID4AACCLgABAQSGhJqzmrSavoFZAACeOQABAQGCFoGIAACdhwABAQGdJ4G1AAComQABAQGopwAAAAECwABSyIDPgeeB7YRKA6hgAAABYAGI/AAAAwTAAFLKgM+CKIIuCYJqAGADwABTYgAEwABSy4DPgjiCSBipOwBgA58iAATAAFLMgM+CUYJiGL9wAGADwAD8VQEqAQXAAFLUgM+CwoLCgvcAAAADgtOC9wAAAAICAoLZAAAEgmpgA8AAU2IAguYAAASpO2ADnyIAAGADwABSyAE/AwgBwABSyoAAwCdywQgBwABSy4EAwCdyzwkBgsKJBgAAAAAEBsAAUs6Az4JngmuCvQEAhoUAAAABA4J3gr0AAAAAAAAAYAOI7gFKgoABJoKAAR6CgJ2NAwADJ4aFFoKiFoKbLoJqwABSyodxr6IWgrUWgq4ugmrAAFLKhGavowBgA4juBsAAUtCAz4L8gvyDYAAAhFIAAAABA4MCg2AAAAABAQGDGwAAAIDyXQOZtQFgA8AA/2gAAFsBPgE9HoMknY0DAAMnhFIWg0EWgzougmrAAFLKh3GvohaDVBaDTS6CasAAUsqEZq+jAAbAAFLRgM+DZYNlg9kAAIWNAAAAAQODbIPZAAAAAgICg44AAACA8l0DmcICYAPAAP9oYAPAAP9oAIORAAAAhY5bAABbAT4BPR6DnJ2NAwADJ4WNFoO6FoOzLoJqwABSyodxr6IWg80Wg8YugmrAAFLKhGavowAGwABS0oDPg96D3oRIAACEUwAAAAEDg+uESAAAAAEBAYP8AAAAgPJdA5pEAWADwAD/aAAAXAE+AT0ehAWdjQMAAyeEUxaEKRaEIi6CasAAUsqHca+iFoQ8FoQ1LoJqwABSyoRmr6MAAAAncwgAJ3NoACdzzwAndEUAJ3SsAAAABAAAAAGAzwAndMgAJ3JKACd0xQAAAAEAJ3TIAAAAAAACBsAAUtW/cYDQAAACgQIAAIIuAAEBAYZngT4AAKiZAAEBAZ7HAAAAAQLAAFLWgNCBaoFwg2IDqGEAAAFgAcAAVrIAAAMEwABS2IDQga6BtAmEVwFqgZVgA8AA/2gCYAPAAFayAATAAFLZgNCBz4HWCYRmAWqBumADwAD/aAJgA8ABAIMABMAAUtqA0IH1gf0JgnAAYAOIkQABBcAAUuOA0IICggKCOwAAAAOCEYI7AAAAAwMDghcAAASCcGADiJEAgiYAAASEV2ADwABWsgCCMwAABIRmYAPAAQCDAABgA8AAUtYBPwQIAcAAUtqAAMAndZkIAcAAUtiBAMAndaUIAcAAUtmCAMAndbMJAYICwABW2wAAAAAGBsAAUtyA0IJAglSCdQEAh3EBaoJBYAPAAP9oAgAAAQOCX4J1AAAAAAAAAGADwAD+GwFKgmIBFoJrFoJiLoJwwABS2oRYgloGwABS3YDQgnqCg4KSAQCiFwAAAAEDgouCkgAAAAAAAABgA8AA/FUBSoKOASkGwABS3oDQgpeCoIK7AQCEIgAAAAEDgqiCuwAAAAAAAABgA8AA/FUBSoKrARaCtBaCqy6CcMAAUtqEIoikBsAAUt+A0ILAgsmC5AEAhCAAAAABA4LRguQAAAAAAAAAYAPAAPxVAUqC1AEWgt0WgtQugnDAAFLahCCIowbAAFLggNCC6YMBgxMBAIJJAAAAAQODCIMTAAAAAAAAAGADiJEBSoMLARaDCy6CcMAAUtoGwABS4YDQgxiDL4NgAQChwAFqgxlgA8AA/2gCAAABA4NBg2AAAAAAAAAAYAPAAQACAUqDRAE1AAAAAQBgA8ABAAIBFoNNFoNELoJwwABS2oC9iJUjHINSgADAJ3dVSAEAASsAACe1FYAAwCd3VQFgA8ABAAIAACd1/AAndkMAJ3ZwACd2rQAnduoAJ3ceACd3kwAAAAYAAAABgNAAJ3e3ACd1DQAnd7QAAAABACd3twAAAAAAAgbAAFLkAIDRAAAEgNoAAIIuAAEBDIW1hoSGi4VqhpGEqIYkhReGcoU+hVeGVYH9AACpoQABAQGexIJIAAComQABAQGex4J0AAC1xAABAQGhAAAAAAECwABS5YDRguSC6ohfA6hiAAABYAHAAFayAAAEBMAAUueA0YMsgzIJhFcAYAOppQAEwABS6IDRg0+DXwmvJgBgA4LDAATAAFLpgNGDkYObCYdxAGADwAD+GwAEwABS6oDRhECERxiaQgBgA4OQASsBBcAAUvKA0YRMhEyEkwAAAAOEXoSTAAAAAwMDhGQAAASEV2ADqaUAhHEAAASvJmADgsMAhIgAAASHcWADwAD+GwAAYAPAAFLlAT8ECAHAAFLngADAJ3i0CAHAAFLogQDAJ3jACAHAAFLpggDAJ3jMCQGETMAAVtsAAAAABAbAAFLsgNGEmISghLkBAIRmAAAAAQOEqIS5AAAAAAAAAGADwAEAgwFKhKsBFoSyFoSrLoRXwABS54RmqbAGwABS74DRhL6EyoV9AACvKAAAAAEDhNuFfQAAAAMDA4TnAAAAh3FgA8AA/hsAhPoAAAChBWADtcUAhQwAAABbYAOFtgAAYAOHjAE+AUqFHQEmhR0BNYUrAAABAGADhOwBHIUrgYUkwCd5gK8oAgACFoU9Lq8mwABS6IKFT8AneYwAtdw1AAAAAQBbAReFYoOFYMAneaiEWICFb8AneXKCWoMAwCd5qGADh4wGwABS8IDRhYKFjIgfAACvJwAAAAEDhZ+IHwAAAAEBAYWnAAAAoQVgA7XFAABgA4QlAT4FSYW1IRyFwRaFuS6aQsAAUupIAQABKwDAAP91SoXKASaFygEWhdEumkLAAFLqYAOEJT9OheqF9QAAgm9gA4eMARyF9y6vKAMAAxaGCS6HccAAUumAhhXAJ3odKwDAAFLvToYvhjYAAIMpYAPAAQACARaGShaGQ4GGOMAnemSEr4eOgL2CyD0XhlQumkI1hmIAAAEAYAOEJQEfhmKEYwUAAx6GeYjQAgACJIaVAie/coKGjsAnepIWhp4WhpcuhFfAAFLnhEipvABqhr5gA4RlhUofhtKE3AIAAR+G44haAQABgYbzwCd6ZAABhVUfhxyJRwIAAhaHQhaHOBaHMRaHKi6EV8AAUueVc6moh4Wqi5tDnP0xh2lgA4j8AWqHcGADiROEmwAChGYWh6IWh5oWh5MuhFfAAFLnhEipvIRmgo+EHik1AAAAAQBbAReHy4OHycAner6E2BaH3S6HccAAUumEJzUAAAABAFsBF4fwg4fuwCd6voRYFof9LodxwABS6YJagwDAJ3q+wABS6kqIDQEmiA0BFogULppCwABS6mADhCUGwABS7YDRiCSIO4hdAQChwAFqiCVgA8AA/2gCAAABA4hNiF0AAAAAAAAAYAPAAQACAUqIUAEnryUAACd5FQAneVIAJ3n9ACd71AAnfA0AAAAEAAAAAYDRACd8KQAneCkAJ3wmAAAAAQAnfCkAAAAAAAIGwABS8wCA0gAAAYDaAAComQABAQKex59vAAAAAgLAAFL0gNKBzoHUgvADv3MAAAFgAakfAAAAAQXAAFL4gNKB9IH0giQAAAADggGCJAAAAAAAAABgA8AAUvQBPwEJAIIMqUYBAAABotAqAQbAAFL2gNKCKYIxgu4AAKjCAAAAAQOCOYLuAAAABQUFgkEAAACAvWADwAEAAgCCSwAAAIdxYAPAAP4bAIJbAAAAhGZgA8ABAIMAgn8AAACAq10DwAD+8QJgA8ABAAJgA8AAVrIAgokAAACow2ADwAD8VQAAYAPAAFayAT4BSoKgAR+Cq8AAUwMEAASAgr/AJ3zRhILFwCd9FoGC1sAnfN+CguLAJ3ztAAAAJ3yxACd9WQAAAAECwABS+YDSgvOC+YRZA6hjAAABYAHAAFayAAAEBMAAUvuA0oMugzIJgL0AYAPAAQACAATAAFL8gNKDQoNRCajDAGADwAD8VQAEwABS/YDSg2yDdgmHcQFqg1dgA8AA/2gCYAPAAP4bAATAAFL+gNKDkYOYCYRmAWqDfGADwAD/aAJgA8ABAIMAAQXAAFMDgNKDnYOdg/cAAAADg7CD9wAAAAQEBIO9AAAEgL1gA8ABAAIAg8gAAASow2ADwAD8VQCD3gAABIdxYAPAAP4bAIPvAAAEhGZgA8ABAIMAAGADwABS+QE/BQgBwABS+4AAwCd+CggBwABS/IEAwCd+GAgBwABS/YIAwCd+JggBwABS/oMAwCd+NAkBg53AAFbbAAAAAAIGwABTAIDSg/yEFIQiAQCEVwFqg/1gA8AA/2gCAAABA4QbhCIAAAAAAAAAYAPAAFayAUqEHgErBsAAUwGA0oQnhD6EVwEAocABaoQoYAPAAP9oAgAAAQOEUIRXAAAAAAAAAGADwAEAAgFKhFMBFoRTLoC9wABS+wAAJ36JACd+wAAnfwAAAAACAAAAAYDSACd/FAAnfGMAJ31mACd/EQAAAAIAJ38UAAAAAAACBsAAUwQAgNMAAAKA2gAAkgwAAQEBghKBAQAAnX+DWQAAAAAAAAABBsAAUwaA04EhgSqFHQABqGsAAAABA4E5hR0AAAADAwOBSAAAAIfYYAOSEgCBYwAAAIKXXQORrwFgA8AA/2gAgW0AAACEZmADwAEAgwAAYAOSEgE+B0mBeiEcgYeAgX7AJ398SAEAAWqBk2ADkhKJJADAAP91PgFKgaIBgIGpwCd/fD9OgcGBxgAATmADwAEAAgEWgdCCgcjAJ3+bTsABAI5Ogd+B6QAAv3RgA8ABAAIBJ791ToISghgAACdgA8AA/hsBHIIfg4IawCd/4IC7AQABhIInwCd//gDAAQAVSYI1HII/hYI5wCeAEUgBAAEcgkKUgcYAAAAAwAD+PgDAAP8/PgM9jIJMwCd//ie/dj2NgnvAJ4ARHIKIg4KDwCd/4IC7AQABhIKQwCd//gDAAQAVSYKgHIKqhYKkwCeAEUgBAAEcgq2UgcYAAAAAwAD+PgDAAP8/SoKxAYCCuMAnf3w/P0mCyByC0YGCzMAnf4hIAQABaoLYXQORrwFhAwFgA8ABAAJgA5G6wACXKgDAAP91PgFHhGYchHODhG7AJ3/ggL4BAAEchI4WhIeEhH3AJ3/+YcABAAZkAQABhYSQwCeAEQDAAP9BAMABABgBAoSlaoSlYAPAAQACwAEILoTFaoTFYAPAAQACwAEIMQA+AUqE6QGAhPDAJ398P0qFBgFqhRZgA5ISgaMBgNMAJ4FlACd/WQAAAAAAJ39cACeBZQAAAAEAAgbAAFMHv3mA1AAAA4DxAADAALnCAAEBAQOBEwAAgi4AAQEBggaBRQAAnZYAAQEBiBIAAAABAsAAUwiA1IIpgjiDLQeCCQAAAWABwAD/aAAAAQTAAFMKgNSCUIJWCYghAGADnZcAAQXAAFMPgNSCW4Jbgm4AAAADgmGCbgAAAAEBAYJnAAAEiCFgA52XAABgA8AAUwgBPwIIAcAAUwqAAMAnggMJAYJbwAD/fgAAAAACBsAAUwyA1IKmgriCxwAClXcAAAABA4LFgscAAAAAAAAAXQPAALrjAWADipQABsAAUw2A1IMJgxuDKwAClWkAAAABA4MpgysAAAAAAAAAXQPAALrjAWADipQAAAAngjIAJ4JfACeCjAAAAAIAAAABgNQAJ4KgACeBtwAngp0AAAABACeCoAAAAAAAAgbAAFMQv3qA1QAAF4D4AACCLgABARqFtYXzhNeFMoaEhouFg4UOhWqGkYaIhg6FF4W8hnKFPoVXhTeGVYWxhreGCIazhqmGZ4aNg1IAAIIuAAEBAoaVhqmDmgAAm/kAAQEBh/GD3QAAp+UAAQEBqDmEGAAAnKwAAQEBh/KEUQAAqGMAAQEDqEOoTahWhMkAAJsaAAEBApWkmuCFEwAAmxq/ewEBAZsdhWsAAJu/AAEBAZsphbAAAKj8AAEBAZ7BhfMAAK+PAAEBCajTnseezKinqNWfb6jMns2osIboAADAAFauAACHBAAAr5AAAIcoAACMewABASOCKYgEjSmNdJCVkJmQnZChh/OLVY0fjUyNUY11jXuNh42UjZmNo42njf6OJ49rj56QI5AnkCyQMZA1kDqQP5BEkMyQ1pHSjUsAAKiZAAEBDKjTnseo1J7Knsyop6jVnsuo959vns2osI6rAACSSwABAQKVtpWmjxkAAKA4AAEBAZVhj1MAAMAAivwAAQEBvm+PfgAAsCwAAQEBrYWPrQAAnYcAAQEFlU6dJJ0Pg2WdJ5AVAACpEgABAQGewpBEAACpoQABAQGexJCPAACsgAABAQGfWQAAAAICwABTEYDVkM6Q3cABD9IHnrIAAAFgAa+RAAAIBMAAUxOA1ZFxkX4Yos0AXQPAAP6/AWADwABYQwAEwABTFIDVki+SOBiE4QBgA8AAWB0ABMAAUxWA1ZKakqQYnuMAXQPAAP6/AWADwABYHQAEwABTFoDVkwSTCxio2QBdA8AA/r8BYAPAAFgdAATAAFMXgNWTHJMoCYTkAGADqR8ABMAAUxiA1ZNAk1cJqOAAYAOpSQAEwABTGYDVk4CTlxi/fABdA8AA/vECYAPAAQACYAPAAFNbASsEwABTGoDVk6mTtRipDwBgA8AAUxEBKwEFwABTWoDVk7qTupVVAAAAA5PGlVUAAAALCwuT5AAAAIb3XQPAAP6/AWADwABXzwCT+AAAAKJiYAPAAP4bAJQQAAAAgL1gA8ABAAIAlCEAAASizV0DwAD+vwFgA8AAWEMAlDsAAASE4WADwABYHQCUUQAABJ7jXQPAAP6/AWADwABYHQCUaAAABKjZXQPAAP6/AWADwABYHQCUfQAAAJ8yYAOpHwCUjwAABITkYAOpHwCUsgAAAIRXYAPAAFWAAJTEAAAAh3FgA8AA/hsAAGADwABTEQE/BwgBwABTE4MAwCeFxQgBwABTFIQAwCeF2ggBwABTFYUAwCeF6AgBwABTFoYAwCeF/QgBwABTFxQAwCeGHggACADAAFMYH5T2qVIBAAEUlQPAJ4YeCAAACQCVGq+dBgAGgJUgwCeFlIGVKsAnhamClTXAJ4W3FJU7wCeGKgkAFJVDwCeGOAoAh5VPwCeGEgA6BsAAUxyA1ZValWWVgAEApCUAAAABA5VvlYAAAAAAAAAAYAPAAQACAUqVcgEnnrIGwABTHYDVleGV6pYTAQCE9gAAAAEDlf2WEwAAAAAAAABgA8AA/FUBSpYAASEclgwWlgAuhOLAAFMfSAEAASsAwAD/dQbAAFMegNWWGJYtlokBAKl4AWqWGWADwAD/aAIAAAEDlkWWiQAAAAAAAABgA8AA/FUBPgFKlksBIhaWUi6E9sAAUx0AGJZuqXivrQbAAFMfgNWWjpaelqkBAoTiAAAAAQOWqZapAAAAAAAAAGADwABYHQAGwABTKYDVlq6Wt5bVAgKE4gAAAAEDlsKW1QAAAAEBAZbPAAAAhPVgA8AAWB0AAFwABsAAUyCA1ZbalwCXHQEAqNgAAAABA5cWlx0AAAAAAAAAXQPAAP6/AWADwABWoAFKlxkBKwbAAFMrgNWXIpcnmJUAAJ79AAAAAQOXPpiVAAAAAQEBl04AAACESGADwABVgAAAXAE+BE+XXZdiAAABovlhAwJgA8ABAAJgA8AAVrJcAAOXZ5frAAAAAgICl28AAAC/fWADwAEAAgCXfwAAAJ8LYAPAAFayAABcAT4CTpeil6kAAIJqYAPAAFNiASaXogGDl6vAJ4iRYAPAAFNiPRyXxYSXvsAniKWe/QEAAYCX3cAniEoAwABTdT0emALAAFfVBQAFIxaYHC6e4MAAVssWmC0WmCYunrvAAFMkmibAAFMhFpgzLpomwABTIQFgA4McFpg4Lob3wABYNSaYQgGAmELAJ4hKYAOppS4rAD0cmGkWmFwuhOTAAFMXg/0BAAGBmHHAJ4hgAKk9PRyYgxaYfS6fMq+Tg/0BAAGBmIvAJ4hgAKk9BsAAUyyA1Zk3mTybQAAApAEAAAABA5lSm0AAAAACAgKZWgAAAINKYAPAAQACAJlpAAAAgklgA8ABAAIAAGADwAD8VQE+BU6ZjpmXAAC/fmADwABTWwEfmZ3AAFNgAQABgZm0wCeJmwA9IxyZ2RaZwS6/fMAAUxlIAQABKwDAAP91F5nBLr98Mpn9YAPAAQACYAPAAFNbAMAAUxkrAV0DwAD+8QJgA8ABAAJgA8AAU1s9HJocFpoFLr98wABTGYC/AgACgJodwCeJjYKaJ8AnibQAwAD/BkOaNSEcmkWCmjzAJ4m0SAEAASsAwAD/dT4DSZpWFppjgppawCeJtL9/wABTXkqacgEqP0mahhyamhaak4KaisAnibSCScAAU11IAQABgJqdwCeJjQDAAQARPgI9F5q4gpqvwCeJtL9/KcAAU15KmtYBKT89iprxwCeJtBybExaa/C6/fMAAUxlLAQABFpsdgpsUwCeJtIJJwABTXQDAAP8FSpswASoGwABTLYDVm0WbVa0SAACe8QFqm0ZgA8AA/2gCAAABA5torRIAAAABAQGbeAAACIRIYAPAAFWAAABgA8AA/hsBPgVJm4ccm6EWm4suqNjAAFMgSAEAASsAwAD+6UqbqgGTP0abuJv3m9kAAACYFGADwABWoAAWm+AuqNjAAFMgPgE9HJwDgZv/wCeLUKP0AgACFpwNLp8yr5OAnBTAJ4sTAMAAVqtOnCycMgAAgO5gA8AA/hsBFpxKFpw0LqjYwABTIGHAAP7vSZxWIRycYIGcWsAni49IAQABkwDAAP8/PgNOnImclgAAhORdA8AA/vECYAPAAQACYAPAAFNiASaciQEWnKoWnJ0uhOTAAFMXnzOpFV0DwAD+8QJgA8ABAAJgA8AAU2JOnP+dBQAAhL5dA8AA/r8BYAPAAQACARydGRadFIKdB8Ani8uDaMAA/xOArQAAAADAAP6TRp0pnUSdNQAAAIC9YAPAAQACAIOdPcAnjBA+Ak6dVp1iAACfC2ADwABWsgEcnXCCnWTAJ4vLSwEAAYSdccAnjEgAwAD/BUSdgD4DSZ2PIRydphadn4Wdk8AnjGCEV8AAVrZIAQABLgDAAP91PgE9Hp29nYwEAAQkndIBFp3KLoRmr6MknfMBFp3qFp3jhZ3XwCeMYIRXwABWtoRmwABWtxad9S6Hca+iFp4RLoRmr6MAP0meMSWeQYWeNcAnjGBgA8AAV6I+Ak6e1Z7nAAChoGADwABWoAEWnwUUnvnAJ4xgBQFgA8AAV6KhoMAAV6RJnyQhHJ86hp8owCeNC0gBAAErAMAA/3U+A06fW59pAAC/gGADwABWsgEWn32Gn2vAJ40LgknAAFanSZ+THJ+oFp+jFJ+XwCeMYAUBYAPAAFeig7XAAFa0SAEAASsAwAD/dT4BPRyg9S6/gQIAAhShD8AnjGAFAWADwABXoiahHAGAoRzAJ4sTYAOppQDAAFM7P0mhRCWhVoehSMAnjU1gA8AAVzI+A06hi6GZAACFOF0DwAD+vwFgA4j8ARahpxShm8AnjGAFAWADwABXooU4wABXpUmhxhyh2BShysAnjdoIAEgBAAErAMAA/uk+AT0VosnAJ43aCB6i3cAA/sQDAWADiPwCFqM9FqMuFqMfFqMYFKMKwCeNTQcBYAPAAFcygmrAAFNxhRmDmITFgythwAD+72qjYWADiROEmwGFdik/PRyjxRSjucAnjGAFAWADwABXor+CAgACFqQCFKP0wCeNTQcBYAPAAFcygmrAAFNxFKQKwCeN2ggAAMAAV6lJpC8lpEGHpDPAJ41NYAOo/z4DTqR4pIYAAIU4XQPAAP6/AWADiPwBFqSUFKSIwCeMYAUBYAPAAFeihTjAAFelSaSzHKTFFKS3wCeOxggASAEAASsAwAD+6T4BPRWltsAnjsYIHqXKwAD+xAMBYAOI/AIWpioWphsWpgwWpgUUpffAJ41NBwFgA6j/gmqpAoUZg5iExYMrYcAA/u9qpk5gA4kThJsBhXYpPz0cprIUpqbAJ4xgBQFgA8AAV6K/ggIAAham7xSm4cAnjU0HAWADqP+CaqkCFKb3wCeOxggAAMAAV6lJpxwlpy6HpyDAJ41NYAOpcj4DTqddp2UAACJgA5G6ARynnWqnZ10DkdEBYQMBYAPAAQACYAORuqpOiD0BAAEWp72Gp6vAJ40LocDAAFapAJHVSafhFqfxFKflwCeMYAUBYAPAAFeihCKvpz4BPRyoDi6e2wMAAxSoGcAnj6oIABaoLhSoIsAnjGAFAWADwABXoodxr6JqqDpgA8AA/hsVAK+aPgE9HKhwLp7bAwADFKh7wCePqggAFqiQFKiEwCeMYAUBYAPAAFeih3GvomqonGADwAD+GxUAr5o9F6lpFKldwCeMYAUBYAPAAFeigm0fqXSSYAEAARapvYapq8AnjQuhwMAAVqkAwABXfD4DTqoAqggAACJgA5G6ARyqQWqqCl0DkdEBYQMBYAPAAQACYAORusAAf6iIPQEAARaqYYaqT8AnjQuhwMAAVqkAkdVJqoUWqpUUqonAJ4xgBQFgA8AAV6KEIq+nPgE9HKqyLp7bAwADFKq9wCeQpggAFqrSFKrGwCeMYAUBYAPAAFeih3Gvomqq3mADwAD+GxUAr5o+AT0cqxQuntsDAAMUqx/AJ5CmCAAWqzQUqyjAJ4xgBQFgA8AAV6KHca+iaqtAYAPAAP4bFQCvmj0XrA0UrAHAJ4xgBQFgA8AAV6KCbR+sGJJgAQABFqxhhqxPwCeNC6HAwABWqQDAAFd8Pz89jaypwCeMYBasw4Wst8AnjGCDtcAAVrQhHKzmhazawCeMYEgBAAErAMAA/3U/Sq0CAYGtCcAni48GwABTLoDVrUutX6/OAACiFAFqrUxgA8AA/2gCAAABA61wr84AAAAFBAStfwAAAIC9YAPAAQACAK2JAAAAh3FgA8AA/hsArZkAAACEZmADwAEAgwCtsQAAAK1FYAPAAFWAAAGtzwAAAIVQYAPAAPxVAWqt2WADwAD8VQBgA8AAVrIBPgRJreciIRyuAxat/IOt68AnkjCeu8AAVrpIAQABFq4OFq4GLoRIr5aeu8AAVroAwAD/dQAcrh2ArhjAJ5IGgdgBAAEngLUAwAEAFD4BSq42ASs/Tq5VrmEAAJ8LYAPAAFayASOErmPAJ5I/HK58Fq52Lp8yr5OiHwQAA4CuicAnkgaBro/AJ5IUgq6bwCeSIgGowyqpMxyuzBauxi6fMq+Tl1EEAAOArtPAJ5IGga7ZwCeSFIKu5cAnkiIBqMMqqTIBYAPAAFaySa8LIhyvG4WvD8AnkrNIAQABKwDAAP91ABavJi6e4MAAVss+AUqvNwEcr0UWrz4unrvAAFMkohQFAASAr2LAJ5IGga9owCeSFIKvdMAnkiKDr33AJ5IwAYVQhK+jwCeSP8AAUy4/Sq+4AYWvv8AnkrMGwABTL4DVr9Ov27GcAACjVQAAAAEDr/OxnAAAAAQEBLACAAAAgL1gA8ABAAIAsAwAAACHcWADwAD+GwCwHAAAAICsYAPAAQCDALAwAAAArUVgA8AAVYAAAGADwABWsgE+BEmwSCIhHLBkFrBdg7BMwCeT4p67wABWukgBAAEWsG8WsGcuhEivlp67wABWugDAAP91ABywfoCwecAnk7iB2AEAASeAtQDAAQAUPgFKsJcBKz9OsLawwgAAnwtgA8AAVrIBHLDRFrDELoTkwABTF5dRAwADgLDYwCeTuIGw3sAnk8aCsOrAJ5PUAKkySbD0IhyxBISw+MAnlE1IAQABKwDAAP91ABaxDy6e4MAAVss+AUqxIAEcsS4WsScunrvAAFMko1UEAASAsVLAJ5O4gbFYwCeTxoKxZMAnk9SDsWnAJ5PiAMAAUy8/SrGGAYSxjcAnlE0GwABTMIDVsaGxprHuAACD/QAAAAEDsa2x7gAAAAEBAbGzAAAAgaZhAwJgA8ABAAJgA8AAVrJcAABcAT4BPRyx4Bax2i6fMq+Tg/0BAAGAsejAJ5UOAKk9BsAAUzGA1bHzsgez+gAAnuYBarH0YAPAAP9oAgAAAQOyGLP6AAAAAwEBsiAAAACAvWADwAEAAgACsjIAAACbZGADwAD8VQFqsjpgA8AA/FUAskYAAACaemADwAD8VQFqslBgA8AA/FUAYAPAAFayAT4ETrJmsm4AAIQmYAPAAFayASOBsnDAJ5V/HLKGFrJ/FrJ5Lp8yr5ObZqkWSwEAAYCyh8AnlXAAwAD/BRyymhaylRayjy6fMq+TnzOpFUsBAAGAspvAJ5VwAMAA/wUBYAPAAFaySbKmIhyysoOyqsAnlblIAQABKwDAAP91ABayvS6e4MAAVss+AT2Lss7AJ5W5I4Gy2MAnlX8csvUWsu4WsugWsuEunrvAAFMknzKvk5tmqRZLAQABgLL2wCeVcADAAP8FHLMQFrMLFrMFFrL+Lp67wABTJJ8yr5OfM6kVSwEAAYCzEcAnlXAAwAD/BQFgA8AAVrI/SbMiIoKzJsAnlZcAHLM6g7MywCeVuUgBAAErAMAA/3U+AT0es0udiQMAAxyziGqzZl0DkdEBYQMCYAPAAQACYAPAAQACYAORusAAViWIPQIAAoCzpcAnlXAWs6suocDAAFMnAJHVHLPJlIHGAAAAAMAA/j4rAD9Ks+gBg7PvwCeVuQbAAFMygNW1z7Xdtq0AAL+DAAAAAQO17batAAAAAQEBtfUAAACAvWADwAEAAgAAYAPAAFNiAT4DTrYJthUAAJ8LYAPAAFayARy2Fy6e5gIAAYC2KcAnl1ABmnopwABTMUO2RCEctlwWtleBtkvAJ5dpg7XAAFa0SAEAASsAwAD/dT4BPYm2bcAnl2kWtoeBtnvAJ5dpg7XAAFa0SraXASa2lwGBtp7AJ5dpYAPAAFNiBsAAUyGA1bcXtyG3JAECmiYAAAABA7cktyQAAAAAAAAAYAODHAAGwABTIoDVt6a3urhEAQCCSQAAAAEDt8G4RAAAAAAAAABgA8AAVq8BSrfEASa3xAEet8SdjQMAAyQAAie/hCe/hRa4Ki6Hca+iFrg8LoRmr6MAYAPAAFavBsAAUyOA1bhJuFO4XAECqNcAAAABA7hcuFwAAAAAAAAAYAODHAAGwABTJIDVuGG4fricAQCeuwFquGJgA8AA/2gCAAABA7iFuJwAAAAAAAAAYAPAAFMRAUq4iAE1AAAAAQBgA8AAUxEBFriILqkPwABTGiMcuJWAAMAnmLtIAQABKwAALoAAwCeYuwFgA8AAUxEGwABTJYDVuKG4v7jXAQCEyQFquKJgA8AA/2gCAAABA7jIuNcAAAAAAAAAYAOJNwFKuMsBFrjPFrjLLpomwABTIYTJg0sGwABTM4DVuQe5FboPAAC/hgAAAAEDuTG6DwAAAAICArlIAAAAhEhgA8AAVYAAuWAAAABbXQPAAP6/AWADiPwAAGADiTcBPgJAIhy5goG5eMAnmWNIAQABKwDAAP7pARy5pxa5oBa5kRa5jS6aJsAAUyGExYMrYcAA/u9IAQABFrm0gbmqwCeZY2HAAP7vAMAA/z+5eLm6AEq5wQEjHLnSgbnIwCeZY0gBAAErAMAA/ukWueAWudwumibAAFMhhQGDSh+57olHAgACFrn8LpomwABTIYG6AcAnmWMAAWADiTcGwABTJoDVuhS6KLpYAQCvMwFquhVgA8AA/2gCAAABA7o7ulgAAAAAAAAAYAPAAP4bAUq6PgE1AAAAAQBgA8AA/hsBNQAAAAEAXQPAAP6/AWADwABYQwEWuj4uos3AAFMTIxy6TYAAwCeaWkgBAAErAAArFrpNgADAJ5paYcAA/u8BYAPAAP4bIxy6VIAAwCeaTUgBAAErAACTgADAJ5pNAWADwAD+GwbAAFM0gNW6Xbpsvy8AAL+HAAAAAQO6fr8vAAAAAgICupUAAACESGADwABVgAC6sAAAAFtdA8AA/r8BYAPAAFgdAABdA8AA/r8BYAOI/AE+Bkm6wSIcus+BusXAJ5rrSAEAASsAwAD+6QAcuugWutouos3AAFMTSAEAASsAwAD+6T4BSrr5ATG7CmADiPwAP0m7GSIcuyeBux3AJ5rrSAEAASsAwAD+6QAhHLtAFrsyLqLNwABTE0gBAAErAMAA/uk+BE67YLtnAACBdl0DwAD+vwFgA4j8AR67d8AA/sQDAWADiPwCFrubFruNLqLNwABTE2HAAP7vKwGFdilFu8ABu8m7ywAAYmADwAD+GwGTARy70oO70MAnm75jAQABFrvbgrvUwCebgWHAAP7vAMAA/0kBi7vlwCebvhy744O75cAnm75kAQABlADAAP9BPgE9HLv4grvywCebgYC/AgACg7v5wCebvhy8Gxa8Dxy8Cxa7/i6izcAAUxNLAQABg7wMwCebvgDAAP7OhrTAAFhGovkBAAGAvCHAJ5rdAMAAWC0AwAD+z0m8OSW8RYC8PcAnmt1gA6mlPgE9HLx+FrxwFLxowCea3QABYAOppakTqcGApQEAAYK8hcAnm4EAwAD/wT9KvJwBgryjwCebgT9JvLYiIRy8xIG8usAnmutIAQABKwDAAP7pACEcvOAWvNmBvM/AJ5rrYcAA/u9IAQABNQAAAAEAYAPAAP4bATUAAAABAF0DwAD+vwFgA8AAWEMBFrzkLqLNwABTEyMcvPOCAMAnnOxIAQABKwAAKxa884IAwCec7GHAAP7vAWADwAD+GyMcvPqCAMAnnN9IAQABKwAAk4IAwCec3wFgA8AA/hsAwAD/Pz4BSr1WASa9VgEevV2diwQABBa90Ry9nmq9cl0DkdEBYQMBYAPAAP4bYAORusAAjsmIPQEAARa9uha9rC6izcAAUxNhwAD+7wCR1SKRvSe/hxy+BJSBxgAAAADAAP4+KwBdA8AA/r8BYAOI/D9OvmO+agAAgXZdA8AA/r8BYAOI/AEevnjAAP7EAwFgA4j8Aha+mIG+jsAnmuthwAD+7ysBhXYpRb67Ab7EvsYAAGJgA8AA/hsBkwEcvs2DvsvAJ538YwEAARa+1oK+z8AnncJhwAD+7wDAAP9JAYu+4MAnnfwcvt6DvuDAJ538ZAEAAZQAwAD/QT4BPRy+8YK+68AnncKAvwIAAoO+8sAnnfwcvwQcvwCBvvfAJ5rrSwEAAYO/AcAnnfwAwAD+zqL5AQABgL8KwCea3QDAAFgtAMAA/s9Kvx4Bgr8lwCedwgbAAFM1gNW/gb+PwABANQAAv4gAAAABA7+YwABANQAAAAICAr+oAAAAhEhgA8AAVYAAv8MAAABbXQPAAP6/AWADwABYHQAAYAOJNwE+AUq/1AEcv9suv4YCAAKAwABAAcAnnsUcwABACi6/hwIAAoDAAEAdwCeexYHAAEAmwCee0wDAAFM0AMAAUzMGwABTNoDVwABAOsAAQETAAEELAACo3wAAAAEDwABAUsAAQQsAAAACAgLAAEBpAAAAhEhgA8AAVYAAwABAhAAAAFtdA8AA/r8BYAPAAFgdAABgA4mrAT4CTsAAQJvAAECfAACaJmADgxwBIxbAAEChLp7gwABWyxbAAECyFsAAQKsunrvAAFMkmibAAFMhFsAAQL0umibAAFMhAWADgxxKwABAxgEfwABA0Ym4AgACgsAAQNvAJ5+FHMAAQOAuv4cCAAKAwABA88Ann1aBwABA/MAnn2YAwABTNAAGwABTN4DVwABBEMAAQRrAAELDAACfEQAAAAEDwABBKsAAQsMAAAACAgLAAEFBAAAAhEhgA8AAVYAAwABBXAAAAFtdA8AA/r8BYAPAAFgdAABgA4mrAT4CTsAAQXPAAEF3AACaJmADgxwBIxbAAEF5Lp7gwABWyxbAAEGKFsAAQYMunrvAAFMkmibAAFMhFsAAQZUumibAAFMhAWADgxxJwABBniEcwABBrIHAAEGiwCegQUgBAAErAMAA/uk+AUrAAEG9AR/AAEHIibgCAAKCwABB0sAnoGAcwABB1y6/hwIAAoDAAEHqwCegMYHAAEHzwCegQQDAAFM0AD4BSsAAQhMBH8AAQh6JuAIAAoLAAEIzwCegYB7AAEJGwAD+xAMBYAOI/AIWwABCfhbAAEJvgsAAQmvAJ6BghMWDK2HAAP7vasAAQoxgA6yOwADi9QGFdikABsAAUziA1cAAQsjAAELNwABLGwAAnvYAAAABA8AAQtzAAEsbAAAAAQEBwABC5wAAAIeFYAOcrQAAXAE+CUnAAEPbHMAAQ+oWwABD3y6e48AAUxVIAQABKwDAAP7pSsAAQ/MAP07AAEQ4AAAAv4lgA8AAUxEATsAARFTAAERjAAC/imADwABYHQEWwABEZS6E4cAAUxRJwABEdCXAAESHgsAARHjAJ6HRYAPAAFfyPgJOwABErMAARLEAAL+LYAPAAFayARbAAETCFMAARLPAJ6HRAgFgA8AAV/KfC8AAV/ZJwABE1SXAAETeg8AARNnAJ6IMYAPAAFMRPgE9icAARPnAJ6HAFMAARQbAJ6IMAwFgA8AAUxE/P07AAEVSAAAAv4xdA8AA/vECYAPAAFMRYAPAAP4bAE7AAEV3AAAAv41dA8AA/vECYAPAAFMRYAPAAP4bAE7AAEWewABFqgAAv45dA8AA/7MBYAPAAFMRAR7AAEWwwADDIQABYAPAAFMRAABGwABFycAARe7AAEXaAAAAgpRgA8AAWB0AFsAAReIunuPAAFMVPgFJwABF9iXAAEX/hsAARfrAJ6LmYAPAAFfyPgNOwABGIsAARi0AAIdxYAPAAP4bARzAAEYvlIHGAAAAAMAA/j5OwABGZ8AARmwAAL+LYAPAAFayARbAAEZzFMAARm7AJ6LmBgFgA8AAV/KfC8AAV/ZJwABGiCXAAEaRFMAARozAJ6NECABgA8AAUxE+Ak7AAEa7wABGxQAAnaBgA8AAUxEBFMAARsfAJ6NECAFgA8AAUxFJwABG1xzAAEbmgcAARtvAJ6HASAEAARTAAEbpwCejkQkAAMAA/3U+AT0cwABHAi6e2wMAAxzAAEc7asAARx5dA5HRAWEDAWADwAEAAmADkbrAAEj1iD0BAAEWwABHUxTAAEdJwCejkQkAgL3AAFg3AJHVh8AAR2rAJ6MgasAAR4ZgA8AA/hsVAK+aScAAR6IcwABHsoXAAEemwCeisIMcAQABFMAAR7vAJ6ORCQAAwAD/vz4FPSMcwABIBIPAAEf7wCeidEgBAAErAMAA/3WLwABH+8AnonQewABIDMAA/vgAAmADwABTEWADwAD+GwAAKwFdA8AA/vECYAPAAFMRYAPAAP4bPTUAAAABAF0DwAD+8QJgA8AAUxFgA8AA/hsBg8AASDLAJ6J0NQAAAAEAYAPAAFMRARTAAEg7wCejkQkAIxzAAEhGHMAASDoUwABIOsAnpL0KAEsBAAEUwABIOsAnpOALAADAAP8FSAEAASsAwAD/PzUAAAABAGADwAD+GwGTNQAAAAEAXAEcwABIOhTAAEg6wCekvQoAgL8CAAIUwABIOsAnpOALABQAwCelLAwAAMAA/wYUAMAnpSwMACsBYAPAAP4bPTUAAAABAF0DwAD+8QJgA8AAUxFgA8AA/hsBg8AASFnAJ6J0NQAAAAEAYAPAAFMRARTAAEhiwCejkQkAHMAASGEUwABIYcAnpYAKAIC/AgACFMAASGHAJ6WjCwAcwABIbRzAAEhhFMAASGHAJ6WACgBLAQABFMAASGHAJ6WjCwAAwAD/BWQBAAGUAMAA/0EAwAD/Bj0jHMAASJCEwABIgMAnopJIAQABKwDAAP91jMAASIDAJ6KSHsAASJjAAP74AAJgA8AAUxFgA8AA/hsAACsBXQPAAP7xAmADwABTEWADwAD+Gz01AAAAAQBdA8AA/vECYAPAAFMRYAPAAP4bAYTAAEi+wCeikjUAAAABAGADwABTEQEUwABIzsAno5EJACMcwABI2RzAAEjNFMAASM3AJ6ZlCgBLAQABFMAASM3AJ6aICwAAwAD/BUgBAAErAMAA/z81AAAAAQBgA8AA/hsBh8AASN3AJ6MgNQAAAAEAXAEcwABIzRTAAEjNwCemZQoAgL8CAAIUwABIzcAnpogLABQAwCem1AwAAMAA/wYUAMAnptQMACsBYAPAAP4bScAASPocwABJDBbAAEkIFMAASP7AJ6ORCQCaJsAAUyFIAQABFsAASRmAwABJD8AnoYWbOpz+AMAA/3U+AT0cwABJNi6e2wMAA2rAAElBYAORxcAASFOHwABJXMAnoyAWwABJixbAAEmGFsAASYIUwABJeMAno5EJAJomwABTIYC9gyJhwAEABgCvmj4BPRzAAEm/hcAASbPAJ6KwVgEAARTAAEnDwCejkQkAAMAA/8A/P0nAAEn3IRzAAEoEg8AASfvAJ6J0SAEAASsAwAD/dT4BPRzAAEoeg8AAShXAJ6J0g/0BAAE0wABKJgPAAEomwABLEAAAAAICAsAASjQAAACdoGADwABTEQDAAEpDAAAAv49gA8AA/hsAAGADwAD/JQE+AT0cwABKWi6e2wMAAxzAAEqNasAASnJdA5HRAWEDAmADwAEAAmADwAD+G2ADkbrAAEh+iD0CAAIWwABKtobAAEqswCeoKIC9wABYN4fAAEq8wCeoOACR1RzAAErlhMAAStbAJ6KSSwEAAYbAAErmwCeoKADAAP8FasAASv5gA8AA/hsVAK+aAMAA/xA/BsAAUzmA1cAASyDAAEslwABSMgAAv5AAAAABA8AASzvAAFIyAAAAAgICwABLTQAAAIThYAOJqwDAAEtoAAAAhuhgA5vCAABcAT4DTsAAS5TAAEucAACESGADqaUBJsAAS5QBFsAAS6MuhEivlmADqaVOwABLycAAS9AAAKhSXQPAAP6/AWADqIcBHsAAS9KoZwMAAh/AAEv2iUcCAAIWwABMDoDAAEwEwCepCITvibAWwABMI4DAAEwZwCepCIU4ia4AgcAATDvAJ6kWAahOKknAAExzIRzAAEx+g8AATHfAJ6lQSAEAASsAwAD+6T4BRsAATI/AAEy3wABMpgAAAKnJYAOohwCDwABMr8AnqVA+Bk7AAEzJAAAAImADkboATsAATOPAAEzsAAAfYAOI/AEWwABM9ITAAEzuwCep1x+oiU7AAE0UwABNIgAAhq5gA4mWARbAAE0qhMAATSTAJ6nXhq6oik7AAE1GwABNTwAAqcdgA8AA/FUBHMAATWcWwABNWYLAAE1RwCepKqkTqcGDHAEAAYbAAE1wwCep/wDAAP+/ScAATYMiJcAATZCGwABNh8Anqf9gA4lJABzAAE3CFsAATbsWwABNrBTAAE2jwCep/wYBYAOJSYTFiUthwAD+74CXAQABkwDAAP9LPgJJwABN0xTAAE3XwCeqRQgAPgE9jcAATe/AJ6nxHMAATkJqwABN+V0DkdEBYQMBYAOI/GADkbrAAEPpiD0BAAEUwABOUMAnqf8GAWADiUkAkdU+AT2NwABOesAnqfFqwABOhGADkcXAAERQPY/AAE7OwCeqISs+AUnAAE7/FMAATwPAJ6pFCAA+AT2NwABPG8AnqfEcwABPZmrAAE81XQOR0QFhAwZgA4j8YAOI/GADwAEAAmADwAEAAmADwAEAAmADwAEAAmADkbrAAEyxiD0GAAaGwABPicAnqf8WwABPtYfAAE+nwCeqIYWHiZsWwABP3ofAAE/QwCeqIYC9iZoewABP+KhpAQABFsAAUBGEwABQC8AnqdeoRKiLABbAAFBJFsAAUD+AwABQNcAnqQiE74mwgL2DIhbAAFBjLoC9wABYNwCR1T4BPY3AAFCJwCep8RzAAFC8asAAUJNdA5HRAWEDBmADiPxgA4j8YAPAAQACYAPAAQACYAPAAQACYAPAAQACYAORusAATCGIPQYABobAAFDbwCep/xbAAFEDh8AAUPXAJ6ohhYeJmxbAAFEoh8AAURrAJ6ohgL2Jmh7AAFE+qGkBAAEWwABRV4TAAFFRwCep16hEqIsAFsAAUYsWwABRgYDAAFF3wCepCITvibCAvYMiFsAAUaEugL3AAFg3AJHVPRzAAFHPgsAAUcfAJ6kqqcwEAASFwABR9MAnqfEWwABR/S6EZq+jFsAAUgYuh3GvoofAAFISwCeqIQCqGD8GwABTOoDVwABSN8AAUjzAAF1KAACp1QAAAAEDwABSUMAAXUoAAAABAQHAAFJhAAAAhuhgA5vCAABcAT4JTsAAUo3AAFKVAACESGADqaUBJsAAUo0BFsAAUpwuhEivlmADqaVGwABS2MAAUwzAAFLrAAAAgO1gA4mWABbAAFL8FsAAUvgumibAAFMhhMWDKz4CTsAAUyzAAFMzAACoUl0DwAD+vwFgA6iHAR7AAFM1qGcDAAIWwABTYYLAAFNXwCetfoWHiZuAwABTaMAnrTwBqE4pScAAU6MhHMAAU66DwABTp8AnraRIAQABKwDAAP7pPgFGwABTwQDAAFPYAAAAqclgA6iHAIPAAFPhwCetpEE+Bk7AAFP+wABUBwAAH2ADiPwBFsAAVA+EwABUCcAnrgsfqIlOwABUMcAAVD8AAIauYAOJlgEWwABUR4TAAFRBwCeuC4auqIpJwABUYBzAAFR6FsAAVGyBwABUZMAnrVCpE6nBgxwBAAGFwABUg8AnriYAwAD/vz4BQsAAVf0AP07AAFYmAAAAImADkboAScAAVjkiJcAAVkaFwABWPcAnriZgA4lJABzAAFZ4FsAAVnEWwABWYhTAAFZZwCeuJgUBYAOJSYTFiUthwAD+74CXAQABkwDAAP9LPgI9j8AAVovAJ66kasAAVpVgA5HFwABEUD2OwABW1cAnrkgrPgE9j8AAVwrAJ66kHMAAVzJqwABXFF0DkdEBYQMEYAOI/GADiPxgA8ABAAJgA8ABAAJgA5G6wABLKIg9BAAEhcAAV1HAJ64mFsAAV3mGwABXa8AnrkiFh4mbFsAAV56GwABXkMAnrkiAvYmaHsAAV7SoaQEAARbAAFfNhMAAV8fAJ64LqESoiwAAkdU9HMAAV/2BwABX9cAnrVCpzAQABIfAAFgkwCeupBbAAFgtLoRmr6MWwABYQILAAFg2wCetfoRYglqGwABYTMAnrkgAqhg/ScAAWJEhHMAAWKMWwABYmRbAAFiVLpomwABTIYThgyxIAQABKwCJtj4BPRzAAFi0Lr+QAgACFsAAWM8WwABYyy6aJsAAUyGE4YMsgMAAWNrAJ608AMAAUzk/ScAAWPYhHMAAWQoWwABY/hbAAFj6LpomwABTIYTigy1IAQABKwCJtj4BPRzAAFkbLr+QAgACFsAAWTYWwABZMi6aJsAAUyGE4oMtgMAAWUPAJ608AMAAUzk/ScAAWV8hHMAAWXgWwABZZxbAAFljLpomwABTIYTjgy5IAQABKwDAAP7pPgFGwABZicAAWbvAAFmYAAAAhOFgA4mrABbAAFmpFsAAWaUumibAAFMhhOODLj4BPRzAAFnFLr+QAgACgsAAWdzAJ7DbgMAAWefAJ608AMAAUzk/RsAAWiXAAFpFwABaMAAAAISbYAODrwAWwABaPRbAAFo5LpomwABTIYSLgy8+AT0cwABaVYHAAFpNwCetUKnNAgACgsAAWmjAJ7EtgMAAWm/AJ608AKoZRsAAWovAAFq3wABamgAAAISdYAOEJQAWwABaqxbAAFqnLpomwABTIYSKgzE+AT0cwABax4HAAFq/wCetUKnPAwADFsAAWvaCwABa7MAnsYSCboQqgMAAWwDAJ608FsAAWxEuhGavowCqG0bAAFslwABbV8AAWzYAAACZNGADg+IAFsAAW0kWwABbRS6aJsAAUyGE5IMwPgE9HMAAW2eBwABbX8AnrVCpzwMAAxbAAFuYgsAAW4zAJ7Hugm6D5oDAAFuiwCetPBbAAFuzLoRmr6MAqhtGwABbx8AAXCXAAFvqAAAAghdgA4QCABbAAFwFFsAAXAEumibAAFMhhOWDMj4BPRzAAFw1gcAAXC3AJ61Qqc4GAAOAwABcX8AnrTwWwABccC6EZq+jFsAAXIWCwABcecAnsliEWIJaA4TFFsAAXLeCwABcq8AnsliExYQHhMcWwABc84LAAFznwCeyWITHhAiEyBbAAF0wgsAAXSTAJ7JYhMiECqoaBsAAUzuA1cAAXU/AAF1UwABiFwAAv4EAAAABA8AAXW3AAGIXAAAAAgICwABdhgAAAKmQYAPAAFdfAMAAXa8AAACESGADqaUAAFwBPgROwABfpcAAX7cAAL+RYAOo/wEmwABfpQEcwABf1BbAAF/OFsAAX8gWwABfwS6eu8AAUySfMq+TnzOpFZl2AgACJ5adNMAAX/EDwABf8cAAYVQAAAAAAAAAYAOo/wE+BU7AAGAIwABgEAAAo0tgA4cbAR/AAGAWhycBAAExwABgLmADhOwAAE7AAGA+wABgQwAAgL1gA4jHAR7AAGBJiNACAAInlp0WwABgZ4HAAGBfwCezL4RIqbwATsAAYH3AAGCDAACEm2ADg68BNcAAYIkAAAEAYAODrwEfwABgiYPhBAABg8AAYI/AJ7PJA4QeKYUhgsAAYLzAJ7OihGYWwABg0hbAAGDOLpomwABTIYRmgyo1AAAAAQBbARfAAGDlhMAAYOPAJ7QNhFgWwABg9hbAAGDyLpomwABTIYRYglqCWoQAwCe0DT0cwABhDBbAAGEILpomwABTIYSWAQABhMAAYRbAJ7P7AINWSsAAYSQBH8AAYS+pEQIAAoTAAGFBwCez+y4AAMAA/wxgA6j/TsAAYWHAAGFnAACEm2ADg68BJsAAYWEBFsAAYXuCwABhacAns0OCaqkCYAODr07AAGGTwABhmwAAo0tgA4cbASbAAGGTARbAAGGjg8AAYZ3AJ7TQhSGDs2ADhxs9HMAAYdEWwABhvITAAGG0wCe0/oXXhx9WAQABNcAAYdkAAAEAYAOFlQEfwABh2YWjAQABFsAAYfaAwABh48Ansx+EncAAV3AANQAAAAEAWwEXwABiAoXAAGIAwCe1SIRXhMAAYgvAJ7T+glmFAMAntUgAwAD+0AbAAFM8gNXAAGIcwABiIcAAZHYAAL+SAAAAAQPAAGI0wABkdgAAAAUFBcAAYkIAAACFhWADwACK/QDAAGJWAAAAm/pgA4OQAMAAYnMAAACuH2ADg5AAwABijwAAAIVQYAPAAPxVAMAAYp8AAACaHWEDA2ADg5BgA4OQYAPAAPxVWwAAXAE+AUbAAGNgwABjo8AAY28AAACE4WADiasAFsAAY5sWwABjjILAAGN8wCe16oUZg5iE+oNFPgJOwABjssAAY7QAAEVgA4OQARzAAGPGFsAAY7yAwABjtsAntcyHicAAiv++hAMAAxbAAGP0hcAAY+rAJ7YyhO+JsBbAAGQPgsAAY//AJ7XqgL2DlIPAAGQVwCe1+ADAAFH6ScAAZCYhHMAAZCyGwABkKsAntl5IAQABKwDAAP91PgE9HMAAZEeEwABkP8AntgggAwADgcAAZEjAJ7XchsAAZFjAJ7Zeg8AAZFvAJ7X4AAA/BsAAUz2A1cAAZHvAAGSAwABvqAAAvzsAAAABA8AAZI3AAG+oAAAABgUFwABkmwAAAIWFYAPAAIr9AMAAZK8AAACb+mADg5AAwABkzAAAAK4fYAODkADAAGToAAAAhVBgA8AA/FUAwABk+AAAAJodYQMDYAODkGADg5BgA8AA/FVbAAHAAGVMAAAAvzxgA8AA/FUBasAAZV9gA8AA/FUAXAE+A0nAAGVtHMAAZYCBwABlccAnt0lIAQABgsAAZYPAJ7dXAMAA/3U+AUrAAGWcAD9JwABlriIlwABlwYHAAGWywCe3SWADg+IBJcAAZeOCwABl08Ant1dgA4PiPgE9HsAAZfudigMAAye/kxbAAGZFgcAAZjbAJ7dJhFiCWhbAAGZRLoRmr6MAP0nAAGZlIiXAAGZ4gcAAZmnAJ7dJYAOEJQAlwABmmILAAGaIwCe3V2ADhCU+A0nAAGauIhzAAGbGFsAAZsEUwABmssAnt0kBAWADhCWCa4QoSAEAAWrAAGbXYAOEZYVKAMAA/3UAHMAAZwAWwABm+xTAAGbrwCe3VwIBYAOEJYJrhChIAQABasAAZxFgA4RlhUoAwAD/dT4CTsAAZyjAAGc2AAC/lGADwAD8VQEcwABnOC6/lQQABIDAAGdZwCe3ORTAAGdgwCe3SQEBYAOEJRTAAGdwwCe3VwIBYAOEJYXAAGeBwCe3kgDAAFNLScAAZ5yGwABnoMAnuNI+AT0cwABnuy6/kgUABYDAAGfewCe3ORTAAGflwCe3SQEBYAOEJRTAAGf1wCe3VwIBYAOEJYPAAGgGwCe3ZYTAAGgQwCe3dQDAAFM8Pz9JwABoMyIcwABoSxbAAGhGFMAAaDfAJ7dJAQFgA4QlgmuEKEgBAAFqwABoXGADhGWFLADAAP91ABzAAGiFFsAAaIAUwABocMAnt1cCAWADhCWCa4QoSAEAAWrAAGiWYAOEZYUsAMAA/3U+AT0cwABoqC6/lgQABIDAAGjJwCe3ORTAAGjQwCe3SQEBYAOEJRTAAGjgwCe3VwIBYAOEJYXAAGjxwCe3kgDAAFNMP0nAAGkSIhzAAGkqFsAAaSUUwABpFsAnt0kBAWADhCWCa4QoSAEAAWrAAGk7YAOEZYU7AMAA/3UAHMAAaWQWwABpXxTAAGlPwCe3VwIBYAOEJYJrhChIAQABasAAaXVgA4RlhTsAwAD/dT4CTsAAaYzAAGmaAAC/lGADwAD8VQEcwABpnC6/lwQABIDAAGm9wCe3ORTAAGnEwCe3SQEBYAOEJRTAAGnUwCe3VwIBYAOEJYXAAGnlwCe3kgDAAFNNScAAagCGwABqBMAnupo+AT0cwABqHy6/kgUABYDAAGpCwCe3ORTAAGpJwCe3SQEBYAOEJRTAAGpZwCe3VwIBYAOEJYPAAGpqwCe3ZYTAAGp0wCe3dQDAAFM8Pz8+Bk7AAGqpwABqwQAAv5hgA8AA/FUBIiXAAGrSgcAAasPAJ7dJYAODrwEiJcAAaveBwABq6MAnt0lgA4QlABbAAGsWFMAAawfAJ7dJAQFgA4QlhU6EQ07AAGsrwABrRAAAv5lgA8AA/FUBIiXAAGtWgsAAa0bAJ7dXYAODrwEiJcAAa3yCwABrbMAnt1dgA4QlABbAAGucFMAAa4zAJ7dXAgFgA4QlhU6EQ07AAGuxwABryQAAv5pgA8AA/FUBIiIiJcAAa9uBwABrzMAnt0lgA4OvACEWwABsBRTAAGv2wCe3SQEBYAODr4Qgg78AIRbAAGwuFMAAbB/AJ7dJAQFgA4OvhCKDwAEiJcAAbFOBwABsRMAnt0lgA4QlABbAAGxyFMAAbGPAJ7dJAQFgA4QlhVCERE7AAGyHwABsoAAAv5tgA8AA/FUBIiIiJcAAbLOCwABso8Ant1dgA4OvACEWwABs3hTAAGzOwCe3VwIBYAODr4Qgg78AIRbAAG0IFMAAbPjAJ7dXAgFgA4OvhCKDwAEiJcAAbS6CwABtHsAnt1dgA4QlABbAAG1OFMAAbT7AJ7dXAgFgA4QlhVCEREnAAG1eIobAAG1iwCe7TACHwABtfcAnu6A+AT0cwABtoS6/lgQABIDAAG3CwCe3OYHAAG3JwCe3SYLAAG3ZwCe3V4XAAG3qwCe3kgDAAFNMP0nAAG4LIhTAAG4PwCe79AgAABTAAG4qwCe8fgkAPgJOwABuU8AAbmEAAL+UYAPAAPxVARzAAG5jLr+XBAAEgMAAboTAJ7c5gcAAbovAJ7dJgsAAbpvAJ7dXhcAAbqzAJ7eSAMAAU01JwABuxxTAAG7LwCe9eAoAPgE9HMAAbuYuv5IFAAWAwABvCcAntzmBwABvEMAnt0mCwABvIMAnt1eDwABvMcAnt2WEwABvO8Ant3UAwABTPD8/BsAAUz6A1cAAb63AAG+ywABwBAAAnvgAAAABA8AAb8DAAHAEAAAAAgICwABv1wAAAIeJYAOcBQDAAG/yAAAAhuhgA5vCAABcAT4ABsAAUz+A1cAAcAnAAHAOwABwegAAnvkAAAABA8AAcCLAAHB6AAAAAwMDwABwLQAAAIeFYAOcrQDAAHBHAAAAh4lgA5wFAMAAcGgAAACG6GADm8IAAFwBPgAGwABTQIDVwABwf8AAcITAAHGDAAC/nAAAAAEDwABwnsAAcYMAAAADAwPAAHCsAAAAqdBgA4McAMAAcMIAAACHiWADnAUAwABw0wAAAJsuYAODHAAAYAPAAPxVAT4CTsAAcO3AAHD6AACdWWADg5ABHMAAcQaBwABw/MAnvu2bYwIAAoDAAHEYwCe+3xrAAHEfsEUAnBJKwABxNgEiIRzAAHFKg8AAcT3AJ78USAEAASsAwAD/dQAhHMAAcXEWwABxYoPAAHFVwCe/FIUZg5hIAQABgsAAcXTAJ777AMAA/3UGwABTQYDVwABxiMAAcY3AAHZPAAC/nQAAAAEDwABxtsAAdk8AAAADAwPAAHHFAAAAv55gA4OQAMAAcekAAACCSWADoDsAwABx+wAAAISdYAOEJQAAXAE+Ck7AAHITwAByGgAAgylgA8ABAAIBIxbAAHIugsAAciTAJ7/chU6EQyenfyMWwAByTILAAHJCwCe/3IVQhEQnp4EnAAFgA8ABAAIBYAPAAQACTsAAcnPAAHJ+AAChnGADhOwBHMAAcpUWwAByh4HAAHKAwCe/zp63qKKHlwYABhbAAHLCFsAAcruBwABytMAnv86Vc6BBh4Wqix/AAHLZhwYAAAAAHMAAcvqDwABy88Anv/BkAQABFsAAcwsWwABzBoLAAHL8wCe/3IC9g5SAvYjKAMABABcewABzHYW8AQABFsAAczuCwABzMcAnv9yCboQqABbAAHNYgsAAc07AJ7/chFiCWioAi0lOwABzkMAAc5cAAIF2YAOE7AE1wABznQAAAQBgA4XWAR/AAHOdhecEAAQfwABzsocGAAAAABrAAHPMsEUfwABz4oXCAQABMcAAc+xgA4TsAYTAAHPtwCfAQACAwABz+8Anv8AANQAAAAEAWwEXwAB0GoXAAHQYwCfBC4RYFsAAdDGCwAB0J8Anv9yEWIJaglqFAMAnwQtJwAB0QSElwAB0YxbAAHRYFsAAdE+CwAB0RcAnv9yCboQqhVWEymADiR8+AT2NwAB0ecAnwPk1wAB0hgAAAQBgA4ahAR/AAHSGhrICAAKFwAB0k8AnwPkWwAB0rhbAAHSlgsAAdJvAJ7/cgm6EKoVVhMoANQAAAAEAWwEXwAB0xIbAAHTCwCfBxYX1KYaqNQAAAAEAWwEXwAB04YbAAHTfwCfBxYRYFsAAdPiCwAB07sAnv9yEWIJaglqGAMAnwcU/PRfAAHUhFsAAdRiCwAB1DsAnv9yCboQqgm01wAB1LAAAAQBgA4hRAR/AAHUsiFoBAAGFwAB1PMAnwPkANQAAAAEAWwEXwAB1TIbAAHVKwCfCaoRYFsAAdWOCwAB1WcAnv9yEWIJaglqGAMAnwmqE2j0XwAB1ixbAAHWGFsAAdX2CwAB1c8Anv9yCboQqgm2E14RXFsAAdZ6CwAB1lMAnv9yCboQqglk9F8AAdbeCwAB1rcAnv9yEHyqEUD0XwAB12YLAAHXPwCe/3IVNKYRWPRfAAHYHgsAAdf3AJ7/chUUqhFM9F8AAdi+CwAB2JcAnv9yFRiqEVAbAAFNCgNXAAHZUwAB2WcAAeRMAAL+fAAAAAQPAAHZ9wAB5EwAAAAQEBMAAdoUAAACdWWADg5AAwAB2pgAAAIJJYAOgOwDAAHa4AAAAhJ1gA4QlAMAAdtIAAACHiWADnAUAAFwBPghOwAB29MAAdvsAAJ8gYAOoXgEfwAB3AahiAgAAAp8hHsAAdy2bHwEAARzAAHdkg8AAd1rAJ8Oam2ECAAIWwAB3eS6aJsAAUyEWwAB3iILAAHd+wCfDjIUZg5gAnA8AqCMqTsAAd8rAAHfRAACoUGADhCUBNcAAd9oAAAEAYAOEJQEcwAB32oTAAHfTwCfDrp8dAQFgA4QlAYLAAHfgwCfDjACn9zUAAAABAFsBF8AAd+yFwAB36sAnxCGEJCqEUYUAwCfEIT0cwAB4BC6/nQMAA4DAAHguwCfDcIHAAHg8wCfDfoXAAHhEwCfEDwDAAFNBPRzAAHhgFsAAeFUWwAB4US6aJsAAUyGEioMxVgEAAYXAAHhkwCfEDwDAAP7QPRfAAHh4hcAAeHHAJ8QPhFcWwAB4gS6aJsAAUyGCWU7AAHigwAB4qAAAhEhgA6mlASbAAHigARbAAHivLoRIr5ZgA6mlPRzAAHjWFsAAeMSGwAB4vMAnxOupEqnAVgEAAYXAAHjawCfEDwDAAP7QPRzAAHkBFsAAeO+GwAB458AnxOupEqnAVgEAAYLAAHkFwCfDjADAAP7QBsAAU0OA1cAAeRjAAHkdwAB8bAAAv6AAAAABA8AAeUPAAHxsAAAABAQEwAB5SwAAAJ1ZYAODkADAAHlsAAAAgklgA6A7AMAAeXoAAACEm2ADg68AwAB5kAAAAIeJYAOcBQAAXAE+BU7AAHmuwAB5uwAAhPFgA5swAR7AAHnKmzcBAAEcwAB564PAAHnhwCfFuJthAgACFsAAegAumibAAFMhFsAAeguCwAB6BcAnxaqFGYOYAJwPAE7AAHorwAB6MgAAohlgA4QlATXAAHo4AAABAGADhCUBH8AAejiEYwQAAxbAAHpRgsAAekvAJ8WqgL2DlGrAAHptYAOEZYUsH8AAeoGE3AYAASsFhMUxwAB6v2ADiZYAhMcxwAB6+mADiJEAhMgxwAB7MGADiJEAhTqThVUcwAB7gITAAHtzwCfFzIWbAQABFsAAe5WCwAB7j8AnxaqClIOxAJs/AYRmFsAAe7SCwAB7rsAnxaqEZoOVNQAAAAEAWwEXwAB7xYXAAHvDwCfGL4RYFsAAe9iCwAB70sAnxaqEWIJaglqFAMAnxi89HMAAe+guv50DAAOAwAB8EsAnxY6BwAB8IMAnxZyFwAB8KMAnxh0AwABTQT0cwAB8RBbAAHw5FsAAfDUumibAAFMhhIqDMVYBAAGFwAB8SMAnxh0AwAD+0D0XwAB8XIXAAHxVwCfGHYRXFsAAfGUumibAAFMhglkGwABTRIDVwAB8ccAAfHbAAIArAAC/oQAAAAEDwAB8nMAAgCsAAAAEBATAAHykAAAAnVlgA4OQAMAAfMUAAACCSWADoDsAwAB80wAAAISbYAODrwDAAHzpAAAAh4lgA5wFAABcAT4FTsAAfQfAAH0UAACE8WADmzABHsAAfSObNwEAARzAAH1Eg8AAfTrAJ8fTm2ECAAIWwAB9WS6aJsAAUyEWwAB9ZILAAH1ewCfHxYUZg5gAnA8ATsAAfYTAAH2LAACbZGADhCUBNcAAfZEAAAEAYAOEJQEfwAB9kYRjBAADFsAAfaqCwAB9pMAnx8WAvYOUasAAfcZgA4RlhTsfwAB92oTcBgABKwWExTHAAH4YYAOJlgCExzHAAH5TYAOIkQEfwAB+Z4i6AgABJ4CWAYKUHMAAfqmEwAB+nMAnx+eFmwEAARbAAH6+gsAAfrjAJ8fFgpSDsQCbP4TIMcAAfwZgA4iRAIU6lIVVasAAf09gA4kfwACdcQGEZhbAAH9zgsAAf23AJ8fFhGaDlTUAAAABAFsBF8AAf4SFwAB/gsAnyEqEWBbAAH+XgsAAf5HAJ8fFhFiCWoJahQDAJ8hKPRzAAH+nLr+dAwADgMAAf9HAJ8epgcAAf9/AJ8e3hcAAf+fAJ8g4AMAAU0E9HMAAgAMWwAB/+BbAAH/0LpomwABTIYSKgzFWAQABhcAAgAfAJ8g4AMAA/tA9F8AAgBuFwACAFMAnyDiEVxbAAIAkLpomwABTIYJZBsAAU0WA1cAAgJjAAICdwACUJgAAnvsAAAABA8AAgLbAAJQmAAAAAgICwACAywAAAIJJYAOgOwDAAIDiAAAAh4lgA5wFAABgA8AA/FUBPhBJwACA8xbAAID7FsAAgPcumibAAFMhhB+DOErAAIEHASo/TsAAgSTAAIE8AAC/ol0DwAD/swFgA4jHAR7AAIFCwADDIQABYAOIxwAATsAAgV3AAIF7AAC/o10DwAD/swFgA4jHAR7AAIGBwADDIQABYAOIxwAATsAAgZjAAIGwAAC/pGADgxwBFsAAgbYWwACBsi6aJsAAUyGE84M9Q8AAgcYiIRzAAIHuhMAAgdbAJ8p+SAEAASsAwAD/dQAWwACCEYTAAIH5wCfKfoQfgzg+AT2MwACCJcAnyn4WwACCV4TAAII/wCfKfoTzgz1JwACCbSEcwACCiYTAAIJxwCfKfkgBAAErAMAA/3U+BU7AAIKfwACCvwAAv6VgA8AA/FUBHMAAgsEuv5wDAAOEwACC58Anyn6BwACDAMAnye8WwACDEoDAAIMLwCfJ4ZsuoE0AwABTQE7AAIMzwACDPAAAv6ZdA8AA/r8BYAODkAEcwACDUoHAAINIwCfJ75tlAQABhMAAg2XAJ8p+AJwTRsAAg4XAAIPdwACDkQAAAIJqYAODkAAcwACDr4HAAIOlwCfJ75toAQABhMAAg8PAJ8p+AJwVPgFJwACD5yIihcAAg+zAJ8sVASIhHMAAhJccwACESBbAAIQ3hMAAhB/AJ8p+hLKDRoJPAQABFsAAhIUWwACEdofAAIRvwCfLnYUZg5iEsoNGAIK6SAEAAZMAwAD/PwAWwACE1xbAAITSh8AAhMvAJ8udgL2DlIZ1iM4AHMAAhSgewACFAJwgAgAChsAAhRHAJ8tdFsAAhSKHwACFG8Any52AvYOUAEgBAAErAMAA/3U+AT0cwACFVYLAAIU9wCfKKlYBAAEWwACFYIfAAIVZwCfLnYC9g5QAwAD/wD9OwACFjcAAhZ0AAL+nXQPAAP6/AWADg5ABHMAAhbOBwACFqcAnye+bZQIAAYTAAIXGwCfKfgGbZimcE0bAAIX1wACGXcAAhgEAAACCamADg5AAHMAAhiCBwACGC8Anye+baAIAAYTAAIY0wCfKfgGbZimcFT4BScAAhmccwACGqR7AAIZ6nCACAAKHwACGi8AnzKgWwACGoxTAAIacwCfM6wgAgL2DlABIAQABKwDAAP91PgE9HMAAhuiDwACGysAnylRWAQABFsAAhvMUwACG7MAnzOsIAIC9g5QAwAD/wD8/TsAAhx7AAIcrAACdWWADg5ABHsAAhzycIAIAAhzAAIdggcAAh1bAJ8nvm2gBAAEWwACHdC6aJsAAUyEAnBUawACHerBFAE7AAIefwACHqAAAv6ZdA8AA/r8BYAODkAEcwACHtIHAAIeqwCfJ75tlAQABFsAAh8cumibAAFMhAJwTTsAAh97AAIfnAACb0l0DwAD+vwFgA4OQARzAAIfzgcAAh+nAJ8nvm2kBAAEWwACIBi6aJsAAUyEAnBZOwACIFsAAiDQAAL+oYAPAAPxVARzAAIg+Lr+cAwADFsAAiFkumibAAFMhgcAAiF7AJ8nvFsAAiHCAwACIacAnyeGbLqBNAMAAU0BOwACIh8AAiI8AAK+RYAPAAPxVASpGwACInADAAIioAAAAgmpgA4OQABzAAIi8gcAAiLLAJ8nvm2gBAAEWwACI0C6aJsAAUyEAnBVBPgJJwACKmyIiIiXAAIqmFMAAip/AJ86rCgBgA4QlACIUwACKwcAnzkYIAAEiIRzAAItSHMAAiyAWwACK9BbAAIrwLpomwABTIYSyg0aCTwEAARbAAItAFsAAizEUwACLKsAnzqsKAWADhCWFGYOYhLKDRgCCukgBAAGTAMAA/z8AFsAAi44WwACLiRTAAIuCwCfOqwoBYAOEJYC9g5SGdYjOABzAAIvdHsAAi7WcIAIAAobAAIvGwCfN0BbAAIvXFMAAi9DAJ86rCgFgA4QlgL2DlABIAQABKwDAAP91ACEcwACMC4LAAIvzwCfKKoMcAQABFsAAjBsUwACMFMAnzqsKAWADhCWAvYOUAMAA/78+BEnAAIwsIRzAAIxnHsAAjD+cIAIAAofAAIxQwCfOCxbAAIxhFMAAjFrAJ86rCgFgA4QlgL2DlABIAQABKwDAAP91PgE9HMAAjHwuv50DAAOFwACMtcAnzYqAwACMw8AnyeEUwACMy8AnzqsKAWADhCUAwABTQT4BPRzAAIzvLr+fBAAEhcAAjSPAJ82KgMAAjTHAJ8nhFMAAjTnAJ86rCgFgA4QlgcAAjUHAJ8nvAMAAU0I9HMAAjXeCwACNX8AnyipWAQABFsAAjYIUwACNe8AnzqsKAWADhCWAvYOUAMAA/8A9FcAAjZHAJ86RCSlCwACNqQA/ScAAjcIiIiXAAI3NFMAAjcbAJ86rCgBgA4OvABzAAI4aHsAAjfKcIAIAAobAAI4DwCfN0BbAAI4UFMAAjg3AJ86rCgFgA4OvgL2DlABIAQABKwDAAP91ACEcwACOSILAAI4wwCfKKoMcAQABFsAAjlgUwACOUcAnzqsKAWADg6+AvYOUAMAA/78+Az0cwACOaS6/oAQABIXAAI6dwCfNioDAAI6rwCfJ4RTAAI6zwCfOqwoBYAODr4HAAI67wCfJ7wDAAFNDPRzAAI7ngsAAjs/AJ8oqVgEAARbAAI7yFMAAjuvAJ86rCgFgA4OvgL2DlADAAP/APRXAAI8BwCfOkQkpP07AAI8xwACPQQAAv6ddA8AA/r8BYAODkAEcwACPVYHAAI9LwCfJ75tlAgABFsAAj2gumibAAFMhAZtmKZwTTsAAj47AAI+eAACbyl0DwAD+vwFgA4OQARzAAI+ygcAAj6jAJ8nvm2kCAAEWwACPxS6aJsAAUyEBm2YpnBZGwACP3sAAkCfAAI/qAAAAgmpgA4OQABzAAI/+gcAAj/TAJ8nvm2gCAAEWwACQEi6aJsAAUyEBm2YpnBU+AknAAJAvIiIlwACQOhTAAJAzwCfSawwAYAOEJQAcwACQkh7AAJBjnCACAAIUwACQdMAn0ecKABbAAJCMFMAAkIXAJ9JrDAFgA4QlgL2DlABIAQABKwDAAP91ACEcwACQ1IPAAJC2wCfKVIMcAQABFsAAkOQUwACQ3cAn0msMAWADhCWAvYOUAMAA/78+A0nAAJD1IRzAAJE3HsAAkQicIAIAAhTAAJEZwCfSJQsAFsAAkTEUwACRKsAn0msMAWADhCWAvYOUAEgBAAErAMAA/3U+AT0cwACRWC6/nQMAA4XAAJGRwCfNioDAAJGfwCfJ4RTAAJGnwCfSawwBYAOEJQDAAFNBPgE9HMAAkcsuv58EAASFwACR/8AnzYqAwACSDcAnyeEUwACSFcAn0msMAWADhCWBwACSHcAnye8AwABTQj0cwACSWYPAAJI7wCfKVFYBAAEWwACSZBTAAJJdwCfSawwBYAOEJYC9g5QAwAD/wD0VwACSc8AnzpEJKT9JwACSkSIiJcAAkpwUwACSlcAn0msMAGADg68AHMAAkvAewACSwZwgAgACFMAAktLAJ9HnCgAWwACS6hTAAJLjwCfSawwBYAODr4C9g5QASAEAASsAwAD/dQAhHMAAkzKDwACTFMAnylSDHAEAARbAAJNCFMAAkzvAJ9JrDAFgA4OvgL2DlADAAP+/PgM9HMAAk1Muv6EEAASFwACTh8AnzYqAwACTlcAnyeEUwACTncAn0msMAWADg6+BwACTpcAnye8AwABTRD0cwACT14PAAJO5wCfKVFYBAAEWwACT4hTAAJPbwCfSawwBYAODr4C9g5QAwAD/wD0VwACT8cAnzpEJKT9KwACUFAEUwACUG8AnzpEJAAbAAFNHgNXAAJQrwACUL8AAlW4AAL+pwABTEAAAAAEDwACUPMAAlW4AAAABAQHAAJREAAAAgmpgA4OQAABgA8ABAIMBPgNJwACUUiXAAJRdgMAAlFbAJ9ViYAODr0rAAJRnARbAAJR1FMAAlG7AJ9ViAAFgA4OvhGaDlT9JwACUgiXAAJSNgMAAlIbAJ9ViYAOEJUrAAJSbARbAAJSpFMAAlKLAJ9ViAAFgA4QlhGaDlT9KwACVJgEmwACVJgEewACVLZ2LBAAEJMAAlU4BFsAAlUGAwACVOsAn1WKFnsAA/3wnv6kcwACVYZSBxgAAAADAAP4+KwBgA8ABAIMGwABTSIDVwACVc8AAlYDAAKOHAAC/qsAAUxAAAAABA8AAlZ3AAKOHAAAABgYGwACVqwAAAIWFYAPAAIr9AMAAlb8AAACb+mADg5AAwACV3AAAAK4fYAODkADAAJYAAAAAv6tgA4TBAMAAliUAAAC/rGADhMEAwACWQwAAAL88YAPAAPxVAABgA5swAT4ETsAAlmjAAJZ+AAC/rWADmzABasAAlo1gA5swwACeXknAAJaYFsAAlsoWwACWuxbAAJasgsAAlpzAJ9Z9hRmDmITFgyuDt8AA/qI+AT2OwACW3sAn1sAewACXA5s4AQABHMAAlzAWwACXG4DAAJcVwCfWX4eJwACK/755AgACFsAAl10WwACXWS6aJsAAUyGEyYNLFsAAl3eCwACXZ8An1n2FGYOYAMAAUfgAP0nAAJeTIRzAAJfANQAAAAEAXQPAAP6/AWADiZYBNQAAAAEAYAOEwQGDwACXl8An1osjHMAAl6mHAMAn14lIAQABKwAAKxbAAJephwDAJ9eJhMWExgFdA8AA/r8BYAOJliMcwACXuYcAwCfXd0gBAAErAAArFsAAl7mHAMAn13dhwAD+7wFgA8AA/htIAQABNQAAAAEAXQPAAP6/AWADiZYBNQAAAAEAYAOEwQGEwACXy8An1pkjHMAAl96HAMAn2A1IAQABKwAAKxbAAJfehwDAJ9gNhMWExgFdA8AA/r8BYAOJliMcwACX7ocAwCfX+0gBAAErAAArFsAAl+6HAMAn1/thwAD+7wFgA8AA/hsAwAD/Pz4BPRzAAJgGFsAAl/4uhEivlp7bBQAEHMAAmEJqwACYHF0DkdEBYQMCYAPAAQACYAPAAQACYAORusAAd7WIPQIAAiQAAxbAAJiAFsAAmHGBwACYYsAn1m+FGYOYgL2DIieBahbAAJixFsAAmKyBwACYncAn1m+AvYOUgL2IyiQAAxbAAJjpFsAAmNqCwACYysAn1n2FGYOYgL2DIieBahbAAJkbFsAAmRaCwACZBsAn1n2AvYOUgL2IygCR1RbAAJk9gcAAmS7AJ9ZvhFiCWmrAAJlTYAPAAP4bFRbAAJl2gcAAmWfAJ9ZvhGaDlQGCVxzAAJqQMcAAmZJgA5HYARzAAJoVHMAAmddqwACZpF0DkdEBYQMBYAPAAQACYAORusAAdKmIPQEAARbAAJn6FsAAmfWCwACZ5cAn1n2AvYOUgL2IygCR1YJfAwADHMAAmiIuv6nAAFMQAQABgsAAmjDAJ9Z9AMAAU0cWwACaaoLAAJpawCfWfYRYglpqwACadmADwAD+GxUAkcFkAQABHMAAmqAuv64CAAKFwACascAn1qeBwACaw8An1m8AwABTTgDAAP7hwABVmknAAJrgIiEWwACbCRbAAJr7FsAAmvQWwACa7RbAAJrlLoRIr5aVc8AAVZCCSaCmnreoooJQizsAIRzAAJtANQAAAAEAYAOEwQGDwACbH8An1osjHMAAmzGHAMAn2ndIAQABKwAAKxbAAJsxhwDAJ9p3hMWExgFdA8AA/r8BYAOJlkgBAAErAMAA/uk+BU7AAJtuwACbfgAAnxpdA8AA/vECYAOJlmADiPwBMsAAm6NgA4mWYAOI/ABFwACbrQHAAJu2wACbuAAAYmADwAD+GwGTARzAAJu/FMAAm73AJ9r2CABjAQABFsAAm+EWwACb0oPAAJvBwCfWi4TFhMZhwAD+7wDAAP9JARXAAJvrwCfa9ggcwACb6RTAAJvrwCfa9ggAZAEAAZQAwAD/QT4BPRzAAJwHh8AAm/jAJ9rGgL8CAAIcwACcKBbAAJwahMAAnAjAJ9aZhMWExksBAAEUwACcKcAn2vYIAADAAP7OH8AAnD+JlQEAARzAAJxwFsAAnGKDwACcUcAn1ouExYTGSwEAARTAAJxxwCfa9ggAAMAA/s4AAMAA/wZOwACckcAAnJ4AAITxYAObMAEewACcrZs0AQABh8AAnLXAJ9rGAEXAAJzNAcAAnNbAAJzYAABiYAPAAP4bAZMBHMAAnN8UwACc3cAn3AwJAGMBAAEWwACdARbAAJzyg8AAnOHAJ9aLhMWExmHAAP7vAMAA/0kBFcAAnQvAJ9wMCRzAAJ0JFMAAnQvAJ9wMCQBkAQABlADAAP9BPgNOwACdJsAAnTgAAL+vYAOJlgEcwACdWRbAAJ1Lg8AAnTrAJ9aLhMWExksBAAEUwACdWsAn3AwJAADAAP7OTsAAnXTAAJ2HAAC/sGADiZYBHMAAnakWwACdm4TAAJ2JwCfWmYTFhMZLAQABFMAAnarAJ9wMCQAAwAD+zknAAJ22IRbAAJ3OFMAAnbvAJ9y6CwCFLYmfPgROwACd+8AAngkAAL+xYAOI/AEWwACeHRTAAJ4LwCfcfQoAhYeJm07AAJ43wACeRgAAv7JgA4j8ARbAAJ5bFMAAnkjAJ9y6CwCFh4mbScAAnmwhHMAAnoaGwACecMAn1sBIAQABKwDAAP91PgI9FcAAnp3AJ90TDBzAAJ7DhsAAnq3AJ9bAhZsBAAEUwACe0sAn3RMMAACbPz0VwACe7sAn3TkNHMAAnyWGwACfD8An1sCFmwEAARTAAJ80wCfdOQ0AAJs/P0nAAJ9bIRzAAJ9tFMAAn1/AJ90TDABIAQABHMAAn30UwACfcMAn2+EIAIWbAQABFMAAn4zAJ905DQAAmz8AiQA+AT0cwACfsxbAAJ+rLoRIr5ae2wUABBzAAJ/1asAAn89dA5HRAWEDAmADwAEAAmADwAEAAmADkbrAAHe1iD0CAAIkAAMWwACgORbAAKAqgcAAoBvAJ9ZvhRmDmIC9gyIngWoWwACgcBbAAKBrgcAAoFzAJ9ZvgL2DlIC9iMokAAMWwACgrhbAAKCfgsAAoI/AJ9Z9hRmDmIC9gyIngWoWwACg5hbAAKDhgsAAoNHAJ9Z9gL2DlIC9iMoAkdUWwAChDoHAAKD/wCfWb4RYglpqwAChKmADwAD+GxUWwAChU4HAAKFEwCfWb4Rmg5UBglccwACikTHAAKF1YAOR2AEcwACiChzAAKHGasAAoY1dA5HRAWEDAWADwAEAAmADkbrAAHSpiD0BAAEWwACh6RbAAKHkgsAAodTAJ9Z9gL2DlIC9iMoAkdWCXwMAAxzAAKIXLr+pwABTEAEAAYLAAKIlwCfWfQDAAFNHFsAAomWCwACiVcAn1n2EWIJaasAAonFgA8AA/hsVAJHBZAEAARzAAKKnLr+uAgAChcAAorjAJ9angcAAosrAJ9ZvAMAAU04AwAD+4cAAVZo/Pz2OwACjAMAn1sAewACjL5s9AgAChsAAozfAJ9bAFMAAo07AJ9vhCAAAP0rAAKNnAYbAAKNuwCfWwAbAAFNJgNXAAKOMwACjmcAApToAAL+zwABTEAAAAAEDwACjtcAApToAAAACAgLAAKPDAAAAhYVgA8AAiv0AwACj0QAAAJv6YAODkAAAYAObMAE+A07AAKP0wACkCQAAv7RgA5swAWrAAKQYYAObMMAAnl5JwACkIxbAAKRUFsAApEUWwACkNoHAAKQnwCfgSYUZg5iExYMrg7fAAP6iPgE9isAApGjAJ+BgHsAApIybOAEAARzAAKS5FsAApKSAwACknsAn4DmHicAAiv++eQIAAhbAAKTmFsAApOIumibAAFMhhMmDSxbAAKT/gcAApPDAJ+BJhRmDmADAAFH4AD9KwAClGwGCwAClIsAn4GAGwABTSoDVwAClP8AApUTAAK/oAAC/tcAAUxAAAAABA8AApU/AAK/oAAAACwoKwAClXQAAAIWFYAPAAIr9AMAApXcAAAC/rWADmzAAwACloQAAAL+0YAObMADAAKXEAAAAm/pgA4OQAMAApeEAAACuH2ADg5AAwACmAQAAAK0sYAOI/ADAAKYeAAAAurxgA4j8AMAApjgAAACEJWADwAD8VQDAAKZfAAAAv69gA4iRAMAApn0AAAC/PGADwAD8VQABwACmmwAAAL+2YAPAAPxVAWrAAKazYAPAAPxVAFwBPgdJwACmwRbAAKbpFsAAptsWwACm1BbAAKbNFsAApsUuhEivlpVzwABVkIJJoKaet6iiglCLO0rAAKb1AD9JwACnAiEcwACnHIHAAKcGwCfhWEgBAAErAMAA/3U+AT2OwACnLcAn4Z4cwACnU4HAAKc9wCfhWIWbAQABhsAAp2LAJ+GeAJs/P0nAAKd8IRzAAKeVgsAAp4DAJ+FmSAEAASsAwAD/dT4BPY3AAKemwCfhkBzAAKfKgsAAp7XAJ+FmhZsBAAGFwACn2cAn4ZAAmz8/TsAAp/jAAKgEAAC/t2ADwAD8VQEiIRzAAKgYFMAAqAbAJ+G8CABIAQABKwDAAP91ARTAAKgjwCfh2woATsAAqEfAAKhPAACbSGADiPwBIxTAAKhRwCfizAsAhsAAqF/AJ+GehcAAqG/AJ+GQAWADiPxOwACoisAAqJQAAIThYAOI/AEjFMAAqJbAJ+LMCwCFwACopMAn4ZCGwACos8An4Z4BYAOI/EnAAKjHHMAAqNGAwACoy8An4Ui/OgIAAhTAAKjjwCfjCAwAFMAAqOzAJ+M9DQAAwACLAT4AScAAqUYih8AAqUrAJ+GsABzAAKlfgMAAqVnAJ+FIvzoCAAIUwACpccAn4z0NABTAAKl8wCfjCAwAAMAAiwE+AEnAAKohIiXAAKotFMAAqiXAJ+MIDABgA4kHASXAAKpJFMAAqj/AJ+M9DQBgA4kHPgA+Bk7AAKrzwACrBgAAv7hgA8ABAAIBJMAAq1UDFsAAqzMWwACrJIPAAKsVwCfhdIUZg5iAvYMiJ4FqFsAAq08WwACrSoPAAKs7wCfhdIC9g5SAvYjKTsAAq2TAAKt4AAC/uWADwAEAAgEkwACryQMWwACrphbAAKuXhMAAq4fAJ+GChRmDmIC9gyIngWoWwACrwxbAAKu+hMAAq67AJ+GCgL2DlIC9iMpOwACr2QAAACJgA5G6AE7AAKvsAAAAhFhgA8AA/hsAScAAq/4cwACsFBTAAKwCwCfhvAgASAEAASsAwAD/dT4CPRXAAKwnwCfkwBAcwACsWGrAAKwxXQOR0QFhAwRgA8ABAAJgA4j8YAOI/GADwAEAAmADkbrAAHdCiD0EAAQUwACsc8An5BoOAIXAAKyTwCfhkIbAAKytwCfhnhTAAKzIwCfkbQ8AAJHVPRXAAKzmwCfkzhEWwACtAoPAAKzzwCfhdIRYglo+Aj0VwACtJcAn5MAQHMAArVVqwACtL10DkdEBYQMFYAPAAQACYAPAAQACYAOI/GADiPxgA8ABAAJgA5G6wAB2wIg9BQAFFsAArYIUwACtcMAn4bwIAIC9iJUUwACtlMAn5BoOAIXAAK20wCfhkIbAAK3OwCfhnhTAAK3pwCfkbQ8AAJHVPRXAAK4HwCfkzhEWwACuJhTAAK4UwCfhvAgAhFiCWj0cwACuSBbAAK5ALoRIr5ae2wUABBTAAK5TwCfkwBAAFMAArlzAJ+TOEQBqwACuaGADwAD+GxUWwACugYPAAK5ywCfhdIRmg5UBglccwACvmzHAAK6dYAOR2AEcwACvIBzAAK7iasAArq9dA5HRAWEDAWADwAEAAmADkbrAAHSpiD0BAAEWwACvBRbAAK8AhMAArvDAJ+GCgL2DlIC9iMoAkdWCXwMAAxzAAK8tLr+pwABTEAEAAYTAAK87wCfhggDAAFNHFsAAr3WEwACvZcAn4YKEWIJaasAAr4FgA8AA/hsVAJHBZAEAARzAAK+rLr+uAgACFMAAr7zAJ+HKCQCDwACvzsAn4XQAwABTTgDAAP7hwABVmgbAAFNLgNXAALBSwACwV8AAypwAAL+VAAAAAQPAALBqwADKnAAAAAQEBMAAsHEAAACFhWADwACK/QDAALCCAAAAm/pgA4QlAMAAsKIAAACuH2ADhCUAwACwuAAAAL88YAPAAPxVAABgA8AA/FUBPhRAHMAAsOsWwACw5oHAALDXwCfneoJrhChIAQABasAAsPxgA4RlhUoAwAD/dcAAsNfAALECAEAcwACxJRbAALEggsAAsRDAJ+eIgmuEKEgBAAFqwACxNmADhGWFSgDAAP91wACxEMAAsTwATsAAsUjAALFWAAC/lGADwAD8VQEqTsAAsXDAALGBAAC/q2ADhMEBFsAAsZKBwACxg8An53qCboQqTsAAsa3AALG/AAC/rGADhMEBFsAAsdGCwACxwcAn54iCboQqTsAAse3AALIDAAC/rWADmzABHMAAsgUuv6rAAFMQBgAGgMAAsizAJ+dqgcAAsjvAJ+d6gsAAslPAJ+eIhcAAsmzAJ+gwhsAAsobAJ+hUg8AAsqHAJ+eWAMAAU0hOwACyxsAAstsAAL+0YAObMAEcwACy5S6/s8AAUxACAAKAwACzAsAn52qBwACzCcAn53oAwABTST0cwACzHy6/tcAAUxAKAAqAwACzNMAn52qHwACzQ8An6HgUwACzYsAn6NQIAIHAALOAwCfneoLAALOYwCfniBbAALPChcAAs7HAJ+gwhVWEyhbAALPohsAAs9bAJ+hUhVWEyiorg8AAtBnAJ+eWAMAAU0pJwAC0MBzAALRhFsAAtFoWwAC0RYXAALQ0wCfoMITHhMhhwAD+72MBAAEWwAC0khbAALR9hsAAtGvAJ+hUhMeEyGHAAP7vAMAA/0k+AT0cwAC0qhbAALSiLoRIr5ae2wUABBzAALTpasAAtMBdA5HRAWEDAmADwAEAAmADwAEAAmADkbrAAHVtiD0CAAIkAAMWwAC1JxbAALUYgcAAtQnAJ+d6hRmDmIC9gyIngWoWwAC1WBbAALVTgcAAtUTAJ+d6gL2DlIC9iMokAAMWwAC1kBbAALWBgsAAtXHAJ+eIhRmDmIC9gyIngWoWwAC1whbAALW9gsAAta3AJ+eIgL2DlIC9iMoAkdUWwAC15IHAALXVwCfneoRYglpqwAC1+mADwAD+GxUWwAC2HYHAALYOwCfneoRmg5UBglccwAC3MDHAALY5YAOR2AEcwAC2vBzAALZ+asAAtktdA5HRAWEDAWADwAEAAmADkbrAAHSpiD0BAAEWwAC2oRbAALacgsAAtozAJ+eIgL2DlIC9iMoAkdWCXwMAAxbAALbZgsAAtsnAJ+eIhGaDlRbAALcKgsAAtvrAJ+eIhFiCWmrAALcWYAPAAP4bFQCRwWQBAAEcwAC3QC6/rgIAAoPAALdRwCfnloHAALdjwCfnegDAAFNOAMAA/uHAAFWaP0nAALd/HMAAt6wWwAC3lYbAALeDwCfoVIU6hMdjAQABFsAAt8eFwAC3tsAn6DCFOoTHAMAA/0k+AT0cwAC37xbAALfnLoRIr5ae2wUABBzAALgrasAAuAVdA5HRAWEDAmADwAEAAmADwAEAAmADkbrAAHZMiD0CAAIkAAMWwAC4aRbAALhagcAAuEvAJ+d6hRmDmIC9gyIngWoWwAC4mhbAALiVgcAAuIbAJ+d6gL2DlIC9iMokAAMWwAC40hbAALjDgsAAuLPAJ+eIhRmDmIC9gyIngWoWwAC5BBbAALj/gsAAuO/AJ+eIgL2DlIC9iMoAkdUWwAC5JoHAALkXwCfneoRYglpqwAC5PGADwAD+GxUWwAC5X4HAALlQwCfneoRmg5UBglccwAC6cjHAALl7YAOR2AEcwAC5/hzAALnAasAAuY1dA5HRAWEDAWADwAEAAmADkbrAAHSpiD0BAAEWwAC54xbAALnegsAAuc7AJ+eIgL2DlIC9iMoAkdWCXwMAAxbAALobgsAAugvAJ+eIhGaDlRbAALpMgsAAujzAJ+eIhFiCWmrAALpYYAPAAP4bFQCRwWQBAAEcwAC6gi6/rgIAAoPAALqTwCfnloHAALqlwCfnegDAAFNOAMAA/uHAAFWaP0XAALrBAcAAusrAALrMAABiYAPAAP4bAZMBIhzAALrbFMAAutnAJ+1kCQBjAQABFsAAuwMWwAC67oXAALrdwCfoMITHhMhhwAD+7wDAAP9JABzAALsbFMAAuxnAJ+1kCQBjAQABFsAAu0QWwAC7L4bAALsdwCfoVITHhMhhwAD+7wDAAP9JARXAALtUwCftZAkcwAC7VRTAALtUwCftZAkAZAEAAZQAwAD/QT4ETsAAu3XAALuHAAC/r2ADiJEBHMAAu7gWwAC7pIXAALuTwCfoMITHhMhLAQABFMAAu7nAJ+1kCQAAwAD+zk7AALvXwAC76gAAv7BgA4iRARzAALwcFsAAvAiGwAC79sAn6FSEx4TISwEAARTAALwdwCftZAkAAMAA/s49HMAAvCcuv7XAAFMQCgAKgMAAvD7AJ+dqh8AAvE/AJ+h4FMAAvHDAJ+jUCACBwAC8kMAn53qCwAC8qsAn54gWwAC81xTAALzFwCfuDAoAgpSIlxbAAL0RHMAAvQ0WwAC8+YbAALznwCfoVITHhMhLAQABFMAAvQ7AJ+1kCQAAwAD+zoKUiJciFsAAvTMUwAC9IcAn7gwKAIQliKUBFsAAvVUUwAC9QsAn7kkLAIQliKUUwAC9bMAn7gwKAIPAAL2JwCfnlgDAAFNKScAAvaIWwAC9uBTAAL2mwCfuDAoAhCWIpT2MwAC9xcAn6BspP0nAAL3lIhbAAL4KFsAAvfqFwAC96cAn6DCEyITJgVXAAP6hABbAAL4/FsAAvi+GwAC+HcAn6FSEyITJgVXAAP6hPgFKwAC+UAGEwAC+V8An6Bs/ScAAvnAcwAC+nBbAAL6VFsAAvoWFwAC+dMAn6DCEyITJYcAA/u9jAQABFsAAvsgWwAC+uIbAAL6mwCfoVITIhMlhwAD+7wDAAP9JPgE9HMAAvuAWwAC+2C6ESK+WntsFAAQcwAC/GmrAAL72XQOR0QFhAwJgA8ABAAJgA8ABAAJgA5G6wAB0/Ig9AgACJAADFsAAv1gWwAC/SYHAAL86wCfneoUZg5iAvYMiJ4FqFsAAv4kWwAC/hIHAAL91wCfneoC9g5SAvYjKJAADFsAAv8EWwAC/soLAAL+iwCfniIUZg5iAvYMiJ4FqFsAAv/MWwAC/7oLAAL/ewCfniIC9g5SAvYjKAJHVFsAAwBWBwADABsAn53qEWIJaasAAwCtgA8AA/hsVFsAAwE6BwADAP8An53qEZoOVAYJXHMAAwWExwADAamADkdgBHMAAwO0cwADAr2rAAMB8XQOR0QFhAwFgA8ABAAJgA5G6wAB0qYg9AQABFsAAwNIWwADAzYLAAMC9wCfniIC9g5SAvYjKAJHVgl8DAAMWwADBCoLAAMD6wCfniIRmg5UWwADBO4LAAMErwCfniIRYglpqwADBR2ADwAD+GxUAkcFkAQABHMAAwXEuv64CAAKDwADBgsAn55aBwADBlMAn53oAwABTTgDAAP7hwABVmj9PwADBsMAAwbQAAAG/aGEDAmADiJFgA4iRYAPAAP4bAAPAAMHKwADCKgAAAAICAsAAwd8AAAC/umADiJEAwADB9wAAAL+7YAOIkQAAYAPAAP4bAT4BSsAAwgMBHMAAwhIWwADCDRTAAMIKwCfx8AoAgL2IlYJPAQABFsAAwh8UwADCHMAn8f4LAIC9iJUAwAEAEk7AAMJLwADCXgAAv7xdA8AA/r8BYAOIkQE1wADCbAAAAQBdA8AA/r8BYAOIkQEewADCbMAA/sUBAWADiJEBFsAAwoeFwADCdsAn6DCEyITJADUAAAABAFsBHMAAwqQUwADCosAn8m0KAICuAQABFMAAwqnAJ/HGCQAAwAD+0hQAwCfybQoATsAAwuDAAML0AAC/vV0DwAD+vwFgA4iRATXAAMMCAAABAF0DwAD+vwFgA4iRAR7AAMMCwAD+xQEBYAOIkQEWwADDHobAAMMMwCfoVITIhMkANQAAAAEAWwEcwADDOxTAAMM5wCfy8wsAgK4BAAEUwADDQMAn8cYJAADAAP7SFADAJ/LzCwBOwADDe8AAw5MAAL++XQPAAP64AWADiJEBFsAAw7AUwADDncAn8lQKAFzAAP6fTsAAw9zAAMP1AAC/v10DwAD+uAFgA4iRARbAAMQTFMAAw//AJ/LaCwBcwAD+n0FDwADELCIcwADESxTAAMQzwCfzYAwAXQAAAADAAP66ABzAAMR6FMAAxGHAJ/OODQBdAAAAAMAA/ro+BEPAAMSOIRzAAMS6FsAAxLUWwADErRTAAMSVwCfzYAwAXsAA/ryAvYiVSAEAARbAAMToFsAAxOAUwADEx8An844NAF7AAP68gL2IlQDAAQARPgFJwADE+CEcwADFFRTAAMT9wCfzYAwAXQAAAADAAP66PgI9HMAAxTUWwADFLS6ESK+WntsFAAQcwADFdmrAAMVPXQOR0QFhAwNgA8ABAAJgA8ABAAJgA8ABAAJgA5G6wAB13og9AwADJAADFsAAxbgWwADFqYHAAMWawCfneoUZg5iAvYMiJ4FqFsAAxe0WwADF6IHAAMXZwCfneoC9g5SAvYjKFsAAxigWwADGIBTAAMYHwCfzjg0AXsAA/ryAvYiVJAADFsAAxmIWwADGU4LAAMZDwCfniIUZg5iAvYMiJ4FqFsAAxpgWwADGk4LAAMaDwCfniIC9g5SAvYjKAJHVFsAAxr6BwADGr8An53qEWIJaasAAxthgA8AA/hsVFsAAxv+BwADG8MAn53qEZoOVAYJXHMAAyCoxwADHH2ADkdgBHMAAx64cwADHbGrAAMc1XQOR0QFhAwFgA8ABAAJgA5G6wAB0qYg9AQABFsAAx48WwADHioLAAMd6wCfniIC9g5SAvYjKAJHVgl8DAAMWwADHy4LAAMe7wCfniIRmg5UWwADIAILAAMfwwCfniIRYglpqwADIDGADwAD+GxUAkcFkAQABHMAAyD4uv64CAAKDwADIT8An55aBwADIYcAn53oAwABTTgDAAP7hwABVmkLAAMh9AD9OwADItsAAyMgAAL+vYAOIkQEWwADI4hTAAMjKwCfzYAwAXsAA/rw9HMAAyPEuv7XAAFMQCgAKgMAAyQjAJ+dqh8AAyRnAJ+h4FMAAyTrAJ+jUCACBwADJWsAn53qCwADJdMAn54gWwADJoRTAAMmPwCf2Qg4AgpSIlxbAAMnSFsAAycoUwADJscAn844NAF7AAP68gpSIlxbAAMn0FMAAyeLAJ/ZCDgCEJYilFMAAygvAJ/ZCDgCDwADKKMAn55YAwABTSknAAMpBFsAAylcUwADKRcAn9kIOAIQliKU9jMAAymTAJ+gbKT9KwADKhAGEwADKi8An6BsGwABTTIDVwADKocAAyqbAAM12AAC/lgAAAAEDwADKucAAzXYAAAAEBATAAMrAAAAAhYVgA8AAiv0AwADKzgAAAJv6YAODkADAAMrrAAAArh9gA4OQAMAAywEAAAC/PGADwAD8VQAAXAE+BU7AAMsmwADLPAAAv61gA5swARzAAMs+Lr+qwABTEAYABoDAAMtlwCf3ZIHAAMtswCf3dILAAMt8wCf3gisrg8AAy5nAJ/eQAMAAU0hOwADLvcAAy9IAAL+0YAObMAEcwADL3C6/s8AAUxACAAKAwADL+cAn92SBwADMAMAn93QAwABTSU7AAMwewADMKwAArSxgA4j8ARbAAMw8gcAAzC3AJ/d0hR6Do07AAMxVwADMYwAAurxgA4j8ARbAAMx1gsAAzGXAJ/eChR6Doz0cwADMhS6/tcAAUxAKAAqAwADMmsAn92SEwADMqcAn96aFwADMyMAn9/KBwADM5sAn93SCwADM/sAn94KGwADNF8An+CqHwADNLcAn+E4qK4PAAM1hwCf3kADAAFNKBsAAU02A1cAAzeDAAM3lwADSigAAv5cAAAABA8AAzfjAANKKAAAABAQEwADN/wAAAIWFYAPAAIr9AMAAzg0AAACb+mADg5AAwADOKgAAAK4fYAODkADAAM5AAAAAvzxgA8AA/FUAAGADwAD8VQE+Ck7AAM5lwADOewAAv61gA5swARzAAM59Lr+qwABTEAYABoDAAM6kwCf4+oHAAM6rwCf5CoLAAM67wCf5GCsrg8AAztjAJ/kmAMAAU0hOwADO/MAAzxEAAL+0YAObMAEcwADPGy6/s8AAUxACAAKAwADPOMAn+PqBwADPP8An+QoAwABTSU7AAM9dwADPagAArSxgA4j8ARbAAM97gcAAz2zAJ/kKhR+DpE7AAM+UwADPogAAurxgA4j8ARbAAM+0gsAAz6TAJ/kYhR+DpE7AAM/YwADP6gAAv69gA4iRATUAAAABAF0DwAD+vwFgA4iRATUAAAABAGADhMEBFsAA0AOBwADP9MAn+QqCboOiIxzAANANFADAJ/oxCABIAQABKwAAKxbAANANFADAJ/oxCACEx4TIAV0DwAD+vwFgA4iRIxzAANAjFADAJ/ofCABIAQABKwAAKxzAANAjFADAJ/ofCACWjgEAAZMAwAD+nAFgA4iRTsAA0DrAANBGAACEJWADwAD8VQE1AAAAAQBgA8AA/FUBNQAAAAEAYAOIkQEUwADQSMAn+g0IACMcwADQWxQAwCf61QkASAEAASsAACsWwADQWxQAwCf61QkAhCWIpQFgA8AA/FUjHMAA0GcUAMAn+sgJAEgBAAErAAAqFADAJ/rICQABYAPAAPxVScAA0HUiIRTAANB6wCf6tAkAACXAANCYgcAA0InAJ/kKYAODrz4BPRXAANCqwCf6tAkWwADQxxTAANC4wCf5CgEBYAODr4Qlg74/ScAA0N4iIRTAANDjwCf6tAkAACXAANECgsAA0PLAJ/kYYAODrz4BPRXAANEUwCf6tAkWwADRMhTAANEiwCf5GAIBYAODr4Qlg74/PRzAANFJLr+1wABTEAsACoDAANFewCf4+oTAANFtwCf5QYXAANGMwCf5jYHAANGqwCf5CoLAANHCwCf5GIbAANHbwCf5xYfAANHxwCf56RTAANIIwCf6tAkAFMAA0h3AJ/oNCACDwADSOMAn+SYBv7YpwABTSkrAANJ0ARTAANJ7wCf6tAkABsAAU06A1cAA0t/AANL0wADXWgAAv64AAAABA8AA0wTAANdaAAAAAgICwADTEQAAAL88YAPAAPxVAMAA0yoAAACb+mADg5AAAF0DwAD+vwFgA5HYAT4CScAA00AcwADTYhbAANNTgcAA00TAJ/yUhRmDmEgBAAEWwADTZS6aJsAAUyEAwAD/dT4BSsAA040BasAA05RdA8AA/r8BYAOR2MAA59U/ScAA06iAwADTrMAn/IQ+AUrAANPfATHAANPmYAOR2AEcwADUQBzAANQbasAA0/BdA5HRAWEDAWADwAEAAmADkbrAAFN7iD0BAAEWwADULRbAANQpLpomwABTIYC9gyIAkdWCXwMAAxbAANRRFsAA1E0umibAAFMhhGaDKhbAANReFsAA1FoumibAAFMhhFiCWhbAANRzFsAA1G4WwADUai6aJsAAUyGAvYMiYcABAAYAkcE+AUnAANSXFsAA1J8WwADUmy6aJsAAUyGE6YM6PgROwADU7sAA1PcAAL/AYAPAAQACARbAANUIFsAA1P0WwADU+S6aJsAAUyGE84M9hPeDQU7AANUmwADVMAAAv8FgA8ABAAIBFsAA1UMWwADVNhbAANUyLpomwABTIYT0gz6AvYMiTsAA1VXAANVlAAC/wmADwAD+GwEWwADVihbAANVrFsAA1WcumibAAFMhhPmDQ2HAAQAGSsAA1ZoBMcAA1aFgA5HYARzAANYTHMAA1eFqwADVrV0DkdEBYQMCYAPAAQACYAPAAQACYAORusAAScSIPQIAAoPAANXvwCf+A4LAANX6wCf90QCR1YJfAwADFsAA1iQWwADWIC6aJsAAUyGEZoMqFsAA1jEWwADWLS6aJsAAUyGEWIJahMAA1j3AJ/41AJHBPgFKwADWmQExwADWoGADkdgBHMAA1wQcwADW3WrAANasXQOR0QFhAwFgA8ABAAJgA5G6wABssYg9AQABFsAA1u8WwADW6y6aJsAAUyGAvYMiAJHVgl8DAAMWwADXFRbAANcRLpomwABTIYRmgyoWwADXIhbAANceLpomwABTIYRYgloWwADXNxbAANcyFsAA1y4umibAAFMhgL2DImHAAQAGAJHBBsAAUyeA1cAA11/AANdqwADYGwEAocAAAAABA8AA13zAANgbAAAAAAAAAGADwAEAAgE+AUrAANeCASMiFsAA14kuhPbAAFMdACEWwADXoC6peMAAUx4kwADYEQMWwADXzxbAANfFLoThwABTFKHAwABYIieHaRbAANf1FsAA1+kuhOLAAFMfocDAAFgiFsAA2BMugL3AAFg3AWADwAEAAgbAAFNPgNXAANggwADYJcAA2sEAAKplAAAAAQPAANg6wADawQAAAAAAAABcAT4CQBbAANhOFsAA2EoumibAAFMhhOyDPMAA2ErAANhgAEbAANhnwADYnsAA2HQAAACZNGADwABWsgAWwADYlhbAANiQFsAA2IMuhOTAAFMXnzOpFSnAAP8UPgFJwADYpiIhFsAA2LeAwADYq8AoAJOEk8AAVs8AIhbAANjdgMAA2NHAKACThCPAAFa/ARbAANj2gMAA2OrAKACT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ba8KAIRYFIYHwChtgggAgloUAMAoba8KAAkAhhvAAFPUCAAIgIYhwChtBoGGK8AobRuChjbAKG0phoY8wChtZhSGRMAobYIIAIWGUMAobVqDhmPAKG03hIZzwChtTAACBsAAVAmA4IZ/ho2GpAEAgpMAAAABA4aXhqQAAAAAAAAAYAODYQFKhpoBFoaaLr/vwABUA8AAVAcGwABUC4DghqmGs5YLAACi+QAAAAEDhriWCwAAAAICAobVAAAAnrxgA6mlAIb0AAAAnIdgA8AAVYAAAGADg2EBPgVPhweHDAAAAajdYQMCYAPAAQACYAPAAFayXAADhxmRqgAAAAICAochAAAAgL1gA8ABAAIAhy8AAACfC2ADwABWsgAAXAE+AUSHRD4CSYdRIRyHaBaHYYSHVcAobw6EV8AAVrZIAQABLgDAAP91PgFJh30hHIeJFoeBLoRmr6NIAQABFoefFoeYhIeMwChvDoRXwABWtoRmwABWtwDAAQCqPgE9Hoe2nYwEAAQkh8sBFofDLoRmr6Mkh+wBFofjFofchIfQwChvDoRXwABWtoRmwABWtxaH7i6Hca+iFogKLoRmr6MAPgE9HogznYwEAAQWiD4uocDAAFg7NQAAAAEAYAPAAFayARaIXYSIUcAobw6EV8AAVrYjHIhlhQDAKG/VSAEAASsAACsWiGWFAMAob9WhwMAAVrsBYAPAAQACFoiILodxr6IWiJQuhGavowBJiLkliMmEiL3AKG8OYAPAAFb9PgNOiOyI8gAAhJtgA4OvARyJABSI9MAobw4EAWADwABW/aL5AQABgIkGwChuuADAAFcPPRyJOBaJMICJIcAobriESKm8hJYBAAGFiULAKHBAAIKtPRyJZxaJXxaJVC6/78AAVAPAAFQHhJSDZ1YBAAEfiW+DjwQAAASAvR6JoojQAgACFomzFImnwChvDgQBYAPAAFb9gL3AAFb/FonIgIm5wChuuIRIqbwAgmoWie6FiejAKHBAhGOCa4QeFoodFIoRwChvDgQBYAPAAFb9hB6vq4JraopPYAODcIS2AMAA/tBJimclineEimvAKG8OYAPAAFdfPgdOip+KqAAAgm5gA4OQARyKthSKqsAobw4EAWADwABXX6L5AQABgIq8wChuuADAAFd3PRyK7haK5oCK18AobriESKm8hJYBAAGFivjAKHE2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FMAAQ3vAKKhDCwAAABbAAEOULr/9wABUQgAAAD4CPRXAAEO6wCimuAgfwABDxIi6AwABKwKClIfAAEPkwCimgYQgKT0VwABEBcAopscJH8AARBSHsQEAAR/AAEQshecEAAQfwABETIUKAQABg8AARFjAKKWkAB7AAERviNABAAEngL8AH8AARIqFwgEAATHAAESUYAOE7AIfwABEpoUnAwADH8AARLaFCgEAARTAAETCwCimuAgAAB7AAETMiNABAAEng9YAFsAARNkuv/7AAFREAB/AAET3hScDAAMfwABFGIUKAQABFMAARSTAKKa4CAAAHsAARS6I0AEAASeAlgAWwABFPS6//8AAVEUAABbAAEVkLr/9wABUQgAATsAARYLAAEWMAACFaGADh6IBH8AARZKIIQMAAxTAAEWqwCimuAgAH8AARbOFJwMAA4XAAEW/wCilyR7AAEXKiNABAAEng9UAFsAARdsuoq3AAFRBABTAAEXowCimxwkAAEnAAEX4FsAARgKAwABF/MAopYCh9bKmPgE9FcAARhfAKKriCh/AAEYniFADAAMfwABGQoY4AQABH8AARkqF5wQABB/AAEZfhQoBAAGGwABGa8AopfkAHsAARnaI0AEAASdIAB/AAEaUhcIBAAExwABGnmADhOwBH8AARqOG5wAAAAAAFsAARrQunJ7AAFRAAAAUwABGzsAoquIKACsAPz0cwABG+YTAAEb0wCilsFYBAAEUwABG/cAoquIKAADAAP7QBsAAVFaA4sAARxDAAEcZwABSXQAAwABAEsAAVDgAAAABA8AARzHAAFJdAAAABAMDwABHRAAAAIPzYAOE7ADAAEdTAAAAmztgA4j8AMAAR3EAAACIeV0DwAD+vwFgA4TsAAHAAEeHAAAAoqxgA8AA/FUBasAAR45gA8AA/FUAYAOCUwE+CU7AAEfrwABH7QAAYmADwAD+GwGTQUXAAEf2AAEcwABH/4TAAEf9wCisimMBAAEWwABICoLAAEgBwCisUGHAAP7vAMAA/0kBjMAASBTAKKyKHMAASBKEwABIFMAorIpkAQABlADAAP9BPgJJwABIHyXAAEgvHMAASCuCwABII8AorFBLAQABhMAASCzAKKyKAMAA/s5gA7JCQsAASEYAPz0cwABIW4LAAEhTwCisUIC/AgAChMAASFzAKKyKJsAASFsBNcAASG0AAAEAWwEcwABIbRzAAEhpgsAASGHAKKxQSwEAAYTAAEhqwCisigDAAP7OhFIBAAEuAITwNQAAAAEAWwEXwABIe4XAAEh5wCitTIRXgMAASITAKKw0AIUAwCitTGADhOwAwAD+z0nAAEjJHMAASM+EwABIzcAorIpIAQABFsAASNuCwABI0sAorFBhwAD+7wDAAP8/SsAASOMBgMAASOrAKKw0P0/AAEj1wABJAAAAAasWYQMBXQPAAP6/AWADhOxgA4TsAAPAAEkLwABKBQAAAAEBAcAASR0AAACF110DwAD+vwFgA4TsAABgA4TsAT4BSsAASTIBI4PAAEk5wCisZh/AAElPhzQDAAGGwABJWsAoriQChduBwABJg8AorEKEIikfwABJr4cnAwABhsAASbvAKK4kAoXbgcAASeTAKKxChCIpAWADhOxOwABKQMAASkYAAISGXQPAAP6/AWADhOwBMcAASkhgA4TsAE7AAEphwABKbQAAwABAHF0DwAD+vwFgA4TsASMcwABKcYTAAEpvwCisioCXAQABkwDAAP9LHMAASoCCwABKd8AorFCBWAIAApOEwABKi8AorIoAwAD+4isBXQPAAP6/AWADhOxFwABKmwABHMAASqSEwABKosAorIpjAQABFsAASq+CwABKpsAorFBhwAD+7wDAAP9JAYzAAEq5wCisihzAAEq3hMAASrnAKKyKZAEAAZQAwAD/QT4CTsAASs/AAErXAACWe2ADhOwBHMAASuGCwABK2cAorFBLAQABhMAASuLAKKyKAMAA/s5JwABK7CXAAEr4FMAASvDAKK93CABgA7JOPgNJwABLFCEcwABLJIfAAEsYwCiuvkgBAAErAMAA/uk+Aj0cwABLP4bAAEs5wCium1YBAAEcwABLToXAAEtDwCit+SABAAGHwABLT8Aorr4AAADAAP7QPY/AAEtowCiuvis/TsAAS5nAAEuqAACrGGADhOwBJsAAS5kBHMAAS78WwABLtBTAAEuswCivdwgBYAOyToJvslCEUgEAAS4AhPBgA4TsScAAS9UWwABL4RTAAEvZwCivdwgBYAOyTqH1slE+Ak7AAEwOwABMEwAAwABAD2ADiJEBH8AATCeIugIAASsBhSEUwABMTsAosCUJAD0cwABMcYbAAExrwCium1YBAAEfwABMeYd/AgACFMAATIzAKLCGCgAfwABMpIZTBAAEH8AATNGF5wMAAx/AAEzmhQoBAAEUwABM8sAosIYKAAAewABM/YjQAQABJ0gAH8AATSOFwgEAATHAAE0tYAOE7AEfwABNMobnAAAAAAAAHMAATWGFwABNVsAorfkgAQABMcAATWJgA4TsAAAAH8AATX2FCgEAARTAAE2JwCiwhgoAAGrAAE2oYAOJE4SbAAAAwAD+0D4BPRzAAE3bhsAATdXAKK6bVgEAARTAAE3fwCiwJQkAAMAA/tBJwABOCSXAAE4VFMAATg3AKK93CABgA7JfPgVJwABOLSEcwABOPYfAAE4xwCiuvkgBAAErAMAA/uk+Aj0cwABOWIbAAE5SwCium1YBAAEcwABOZ4XAAE5cwCit+SABAAGHwABOaMAorr4AAADAAP7QPY/AAE6BwCiuvis/TsAATrLAAE68AACF0mADhOwBJsAATrIBHMAATtAWwABOxhTAAE6+wCivdwgBYAOyX4XSsmGEUgEAAS4AhPBgA4TsTsAATvHAAE72AACBr2ADhOwBJsAATvEBHMAATxQcwABPA4XAAE74wCit+SABAAExwABPBGADhOwBFsAATw0UwABPBcAor3cIAWADsl+Br7JiAACEUgEAAS4AhPBgA4TsTsAATzXAAE8/AACF02ADhOwBJsAATzUBIyEcwABPUxbAAE9JFMAAT0HAKK93CAFgA7JfhdOyY0gBAAErAMAA/3UcwABPihzAAE90hcAAT2nAKK35IAEAATHAAE91YAOE7AEWwABPfhTAAE92wCivdwgBYAOyX4XTsmMAAIRSAQABLgCE8BzAAE+whcAAT6XAKK35IAEAATHAAE+xYAOE7AAAAAFbYAOE7D0cwABPxIbAAE++wCium1YBAAEfwABPzIZTBAAEFMAAT+/AKLIaCQAUwABP+sAoslwKABTAAFAAwCiyvAsAasAAUBFgA4kThJsAAMAA/tBJwABQLyIlwABQOxTAAFAzwCivdwgAYAOycAElwABQVBTAAFBMwCivdwgAYAOygj4BPR7AAFCMnYsEAAQkwABQrgEWwABQoRTAAFCZwCivdwgAhZ7AAP98J8AAQBIWwABQ4BTAAFDYwCivdwgAhFiCWh7AAFDsnY4BAAEUwABQ98Aor3cIAAAAPgI9IxzAAFElh8AAURnAKK6+SAEAASsAwAD+6Y/AAFEZwCiuvjHAAFE1YAOE7AArAV0DwAD+vwFgA4TsPRzAAFFNh8AAUUHAKK6+VgEAASbAAFFZARzAAFFZFMAAUVHAKK93CACEUgEAAS4AhPBgA4TsAMAA/tBJwABReiEcwABRiofAAFF+wCiuvkgBAAErAMAA/uk+AT0cwABRoYbAAFGbwCium1YBAAEcwABRsIXAAFGlwCit+SABAAGHwABRscAorr4AAADAAP7QP0rAAFHKASODwABR0cAorGYfwABR5YZ2AgABhsAAUfbAKK6bAYXbgcAAUgvAKKxCH8AAUiaGagIAAYbAAFI4wCiumwGF24HAAFJNwCisQgFgA4TsBsAAVFeA4sAAUmLAAFJrwABcvQAAwABAE8AAVDgAAAABA8AAUn3AAFy9AAAAAQEBwABSiQAAAIPzYAOHNQAAYAOCUwE+CU7AAFLnwABS6QAAYmADwAD+GwGTQUXAAFLyAAEcwABS+4HAAFL5wCi1omMBAAEWwABTChbAAFMCgMAAUv3AKLWLg9WHOmHAAP7vAMAA/0kBicAAUxTAKLWiHMAAUxKBwABTFMAotaJkAQABlADAAP9BPgJJwABTHyXAAFMzHMAAUy8WwABTKIDAAFMjwCi1i4PVhzpLAQABgcAAUzDAKLWiAMAA/s5gA7KPQsAAU0sAPz0cwABTZBbAAFNdgMAAU1jAKLWLg9WHOoC/AgACgcAAU2XAKLWiJsAAU2QBNcAAU3oAAAEAWwEcwABTehzAAFN2FsAAU2+AwABTasAotYuD1Yc6SwEAAYHAAFN3wCi1ogDAAP7OhFIBAAEuAIdINQAAAAEAWwEXwABTiILAAFOGwCi2f4RXgMAAU5HAKLWLAIIAwCi2f2ADh0MAwAD+z0nAAFPcHMAAU+KBwABT4MAotaJIAQABFsAAU/IWwABT6oDAAFPlwCi1i4PVhzphwAD+7wDAAP8/SsAAU/oBgMAAVAHAKLWLP0/AAFQMwABUFwAAAasWYQMBXQPAAP6/AWADh0NgA4c1AAPAAFQiwABUsgAAAAEBAcAAVDIAAACD1V0DwAD+vwFgA4dDAABgA4c1AT4BSsAAVEMBH8AAVE6HQgQAAYPAAFRZwCi3aQOF5BbAAFR6gMAAVHXAKLWLheSHOIXlFsAAVJOAwABUjsAotYuF5Yc5hCIpTsAAVO3AAFTzAACEhl0DwAD+vwFgA4TsATHAAFT1YAOE7ABOwABVDMAAVRgAAMAAQBxdA8AA/r8BYAOHQwEjHMAAVRyBwABVGsAotaKAlwEAAZMAwAD/SxzAAFUvFsAAVSeAwABVIsAotYuD1Yc6gVgCAAKTgcAAVTrAKLWiAMAA/uIrAV0DwAD+vwFgA4dDRcAAVUoAARzAAFVTgcAAVVHAKLWiYwEAARbAAFViFsAAVVqAwABVVcAotYuD1Yc6YcAA/u8AwAD/SQGJwABVbMAotaIcwABVaoHAAFVswCi1omQBAAGUAMAA/0E+Ak7AAFWAwABVhgAAg9RgA4dDARzAAFWUFsAAVY2AwABViMAotYuD1Yc6SwEAAYHAAFWVwCi1ogDAAP7OScAAVZ8lwABVqYXAAFWjwCi4umADsqM+A0nAAFXGIRzAAFXWhMAAVcrAKLfvSAEAASsAwAD+6T4CPRzAAFXxg8AAVevAKLfMVgEAARzAAFYAgsAAVfXAKLc+IAEAAYTAAFYBwCi37wAAAMAA/tA9jMAAVhrAKLfvKz9OwABWS8AAVlwAAKsYYAOE7AEmwABWSwEcwABWbxbAAFZkFMAAVl7AKLi6BQFgA7Kjgm+ypYRSAQABLgCE8GADhOxJwABWhRbAAFaPFMAAVonAKLi6BQFgA7KjofWypj4CTsAAVrzAAFbBAADAAEAPYAOIkQEfwABW1Yi6AgABKwGFIYbAAFb8wCi5bz0cwABXH4PAAFcZwCi3zFYBAAEfwABXJ4d/AgACh8AAVzrAKLnQH8AAV1KGUwQABB/AAFd/hecDAAMfwABXlIUKAQABh8AAV6DAKLnQAB7AAFeriNABAAEnSAAfwABX0YXCAQABMcAAV9tgA4TsAR/AAFfghucAAAAAAAAcwABYD4LAAFgEwCi3PiABAAExwABYEGADh0MAAAAfwABYK4UKAQABh8AAWDfAKLnQAGrAAFhWYAOJE4SbAAAAwAD+0D4BPRzAAFiJg8AAWIPAKLfMVgEAAYbAAFiNwCi5bwDAAP7QScAAWLclwABYwYXAAFi7wCi4umADsrg+BUnAAFjaIRzAAFjqhMAAWN7AKLfvSAEAASsAwAD+6T4CPRzAAFkFg8AAWP/AKLfMVgEAARzAAFkUgsAAWQnAKLc+IAEAAYTAAFkVwCi37wAAAMAA/tA9jMAAWS7AKLfvKz9OwABZX8AAWWkAAIXSYAOE7AEmwABZXwEcwABZexbAAFlxFMAAWWvAKLi6BQFgA7K4hdKyuoRSAQABLgCE8GADhOxOwABZnMAAWaEAAIGvYAOE7AEmwABZnAEcwABZvRzAAFmugsAAWaPAKLc+IAEAATHAAFmvYAOHQwEWwABZthTAAFmwwCi4ugUBYAOyuIGvsrsAAIRSAQABLgCHPWADhOxOwABZ3sAAWegAAIXTYAOE7AEmwABZ3gEjIRzAAFn6FsAAWfAUwABZ6sAouLoFAWADsriF07K8SAEAASsAwAD/dRzAAFovHMAAWhuCwABaEMAotz4gAQABMcAAWhxgA4dDARbAAFojFMAAWh3AKLi6BQFgA7K4hdOyvAAAhFIBAAEuAIc9HMAAWlWCwABaSsAotz4gAQABMcAAWlZgA4dDAAAAAVtgA4TsPRzAAFppg8AAWmPAKLfMVgEAAR/AAFpxhlMEAASGwABalMAou1iHwABan8Aou5oUwABapcAou/oIAGrAAFq2YAOJE4SbAADAAP7QScAAWtQiJcAAWt6FwABa2MAouLpgA7LNASXAAFr2hcAAWvDAKLi6YAOy4z4BPR7AAFsvnYsEAAQkwABbTwEWwABbQoXAAFs8wCi4uoWewAD/fCfAAEATFsAAW3mFwABbc8AouLqEWIJaHsAAW4WdjgEAAYXAAFuQwCi4ugAAPgI9IxzAAFu8hMAAW7DAKLfvSAEAASsAwAD+6YzAAFuwwCi37zHAAFvKYAOHQwArAV0DwAD+vwFgA4dDPRzAAFvihMAAW9bAKLfvVgEAASbAAFvsARzAAFvshcAAW+bAKLi6hFIBAAEuAIdIYAOHQwDAAP7QScAAXA0hHMAAXB2EwABcEcAot+9IAQABKwDAAP7pPgE9HMAAXDSDwABcLsAot8xWAQABHMAAXEOCwABcOMAotz4gAQABhMAAXETAKLfvAAAAwAD+0D9KwABcXQEfwABcaIaDAwABg8AAXHnAKLfMAoXkFsAAXJaAwABckcAotYuF5Ic4heUWwABcr4DAAFyqwCi1i4XlhzkAACiB8gAogx8AKIcPACiJCgAoiegAKIyXACiOyQAokY0AKJXGACiWlAAol2IAKJs0ACidJgAonfUAKKBkACiilAAopVYAKKwEACi1WwAovngAAAATAAAAAYDiACi+0AAofskAKL7NAAAAAQAovtAAAAAAAAIGwABUXcAAQB2A4wAABoEBAADAAPe+AAEAAYYUgSQAAIIuAAEBDIW1hYOGkYYghbyGcoU+hhCFwYRUhmeFkYJHAACcrAABAQGH8oKAAACY7AABAQGawIK4AACqfQABAQGexYLyAACSSwABAQGVpgAAAAECwABUXoDjg4KDiIngA6oFAAABYAGagAAAAwTAAFRggOODxoPPCYeFAGADnK0ABMAAVGGA44Pjg+0Jv/sAYAOEJQAEwABUYoDjhAGECgnAAEAeAGADhCUAAQXAAFRpgOOFbIVshikAAAADhYGGKQAAAAEBAYWPAAAAlXNgA6qEAABgA8AAVF4BPwQIAMAAVGAWhbKAhavAKL/Th4WqiwgAwABUYR6F0sAAVGUBAAEWhemAheLAKL/Th4WqiwAIAMAAVGIehgnAAFRmAQABFoYfgIYYwCi/04eFqosACQGFbJqHAAAAAAMGwABUZYDjhA+EIIToAAHAAEABwABUXQAAAAEDhC+E6AAAAAEBAYQ6AAAAh4VgA5ytAABgA4QlAT4DToRVhF0AAIQtYAOEJQEmhFUBHIRvFoRpgIRfwCjAbCecsJxoAwADJ5wcJ5yWJwAApuBgA4QlToSthLIAAIJtYAOSUgEmhK0BNQAAAAEAYAOEwQE1AAAAAQBgA4QlAYGEtMAowIEjHIS9ggDAKMDUSAEAASsAACsWhL2CAMAowNSCboQqAWADhMEjHITHggDAKMDJSAEAASsAACsWhMeCAMAowMmCbYTXAWADh6JgA5JSSoTRASaE0QE1AAAAAQBgA5JSAYKE2MAowLcjHITegwDAKME6SAEAASsAACsWhN6DAMAowTqCSZJUAWADg5BgA4QlBsAAVGaA44TthP6FZwABwABAH8AAVF0AAAABA4UMhWcAAAABAQGFFwAAAIeFYAOcrQAAYAOEJQE+AUqFKAEmhSgBHIU/FoU5gIUvwCjBmSecsJxoAwADJ5wcJ5yWJ1YApuBgA4QlBsAAVGeA44YuhjeJ3gAAhhEAAAABA4ZGid4AAAABAQGGUgAAAIPzYAOHKAAAYAOCUwE+BUmGXhaGZ4CGYsAowfmEIocqSoZwAYCGd8Aowfk/TobfhuYAAMAAQCBgA4iRAR+G7Ii7AgABH4cWhgwCAAIWhzQuv/vAAFRhH4dEhcICAAExh05gA4TsAAGFhTGHWWADiPwBFodfgIdawCjB+YXbhysAAYKUH4eCiUcCAAIWh5oWh5Auh4XAAFRgmz2dCjGHpGADiPwBFoeqgIelwCjB+YXbhysATof1h/wAAMAAQCFgA4TsAR+IAoUKAQABgYgOwCjCKwBFiBsBiCSIJgAAYmADwAD+GwEciEAWiDkWiC2AiCjAKMH5hdeHLGHAAP7vgY0BAAGUAMAA/0IBHIhHg4hFwCjC1YFtAQABkwDAAP9MAYuITcAowtUciE6DiE3AKMLVgY0BAAGUAMAA/0I+Ak6IlYibAACD1GADhOwBJoiVARyIsRyIrRaIooCIncAowfmF14csSwEAAYOIrsAowtUAwAD+zoRSAQABLgCE8GADhOw9iojFwCjCsh+I0od/AgACH4jliLsBAAEfiQaF5wQABB+JKoUKAQABgYk2wCjCKwAeiVGI0AEAASdWAB+JcIXCAQABMYl6YAOE7AGEiXvAKMM9ABaJki7AAEAewABUYgAAgompwCjCsgBKibwBH4nHh38CAAKBicvAKMIrgonTwCjCsgAAACjARgAowXMAKMHZACjEAwAAAAMAAAABgOMAKMQbACi/XwAoxBgAAAABACjEGwAAAAAAAgbAAFRqwABAIoDkAAAEgQUAAJ45AAEBAYIWgTQAAMAAi1sAAQEBwABAI4F7AADAAFhyAAEBAa2MgaIAAMAAWaAAAQEBoOIAAAABAsAAVGuA5IIogi6HpQOqBgAAAWABwABZowAAAQTAAFRtgOSCWoJkGMAAQCQAYAPAAFmjASsBBcAAVHaA5IJpgmmCnwAAAAOCeoKfAAAAAQEBgoQAAACqHWADwABYcwAAYAPAAFRrAT8BCQCCkMAAWo4BAAGAgpbAKMTTAAYGwABUb4DkgqSCtoL5AAChtAFqgqVgA8AA/2gCAAABA4LFgvkAAAABAQGCzAAAAJKpYAOfIgAAYAOfIgE+AUqC2QEcguAuwABAJQEAAYCC78AoxSkAwABUcQbAAFRwgOSC/oMQg1IAAMAAQCYBaoL/YAPAAP9oAgAAAQODKYNSAAAAAQEBgzAAAACSqWADnyIAAGADnyIBPgFKgz0BFoNKgINEwCjFhIO1nz0GwABUcYDkg1eDXYXTAADAAEAlAAAAAQODa4XTAAAAAQEBg3IAAACSqWADnyIAAGADnyIBPgU9IxyE1BaEyS7AAEAkwABUbUgBAAErAMAA/3UXhMkuwABAJB+E3MAAWo4BAAEfhOfAAItiAQABFoT/LqodwABZpQAAwABUbSsBYAPAAFmjPReFGhaFDy7AAEAkwABUbcAAQCcWhTguwABAJ8AAWabAAFmmPReFZBaFWS7AAEAkwABUbcAAQCgWhXEuwABAKMAAWafAAFmnPReFjBaFgS7AAEAkwABUbcAAQCkWhZguwABAKcAAWajAAFmoSoWnARyFuRaFri7AAEAkwABUbaG0AQABgIXJwCjFzADAAFooBsAAVHKA5IaFhouGxAAAwABAKgAAAAEDhpyGxAAAAAEBAYajAAAAkqlgA58iAABgA58iAUqGrQEchq0uwABAKwEAAYCGvsAoxuEAwABaTQbAAFRzgOSGyYbPh1oAAMAAQCwAAAABA4bgh1oAAAADAwOG5wAAAJKpYAOfIgCG8wAAAKLgYAPAAPxVAIcGAAAAwABALWADwAD8VQAAYAOfIgE+AUqHGwEchyIuwABALgMAA4CHM8AoxzCBhzrAKMc8godIwCjHSgDAAFocBsAAVHSA5Idfh3GHowAAwABALwFqh2BgA8AA/2gCAAABA4eCh6MAAAABAQGHiQAAAJKpYAOfIgAAYAOfIgFKh5MBHIeTLsAAQDABAAGAh53AKMe3AMAAWeIAACjE/wAoxVgAKMWqACjGvwAoxw4AKMeLACjH5AAAAAYAAAABgOQAKMgIACjEggAoyAUAAAABACjICAAAAAAAAgbAAFR3wABAMYDlAAAUgPgAAIIuAAEBCYV5hYOGkYR7hKiEuYRUhrOGZ4HqAACb+QABAQGH8YItAACcrAABAQGH8oJmAACeOQABAQGCFoKVAACvjwAAgrgAAK+QAACC5wAAr+oAAQEBoNWDIAAAoBUAAQEBnQyDRAAAjHsAAQEFh9OCKYgEi9COI4PvAADAAItjAAEBAcAAQDKEMgAAonkAAQEBn3KEagAAqJkAAQEDqOmo9Z7NhNIAALBMAAEBBaDhrY6g5aDioOmFKwAAnYcAAQEEiBGVTp0knQ+FgwAAwABV1QABAQGrnYXUAACw4gABAQGg94YWAACpoQABAQGexIZXAADAAFs9AAEBBKDxoPSg9a2thrsAALCsAACG4QAAsFYAAQEBoO8AAAABAsAAVHiA5YcOhxTAAH8gA6oHAAABYAHAAFtzAAAOBMAAVHqA5YdWh2QJnrwAYAOppQAEwABUe4Dlh36HhwmHiQBgA5wFAATAAFR8gOWHnIelCYeFAGADnK0ABMAAVH2A5Ye1h8EJh5MAYAPAAPxVAATAAFR+gOWH0YfqCaEJAGADwAD8VQAEwABUf4DliAmIHAmhJgBgA8AAVfIABMAAVICA5YgliEMYwABAMwBgA8AA/hsBkwTAAFSBgOWIS4hhGMAAQDQAYAPAAP4bAZMEwABUg4DliHmIjBjAAEA1wABUdwBgA6+RASsEwABUhIDliJ2IqhjAAEA2wABUdwBgA8AAUxEBKwTAAFSFgOWItIjYGMAAQDcAYAPAAPxVASoEwABUhoDliR+JOhjAAEA4AGADwAD+GwGTBMAAVIeA5YnPidoYhxcAYAOpHwAEwABUiIDlie+J8hiArAFqieBgA8AA/2gCYAPAAQCDAAEFwABU74DlifeJ94uaAAAAA4oDi5oAAAAEBASKGQAAAIRIYAOppQCKJwAABIeJYAOcBQCKNwAABIeFYAOcrQCKTQAABKEmYAPAAFXyAABgA8AAVHgBPwkIAcAAVHuBAMAoyucIAcAAVHyCAMAoyvMIAcAAVH+DAMAoyv8IAMAAVHqAinvAKMrbCADAAFSIFoqagIqSwCjK24RmqbAIAMAAVIcWisGAirnAKMrbnzLAAFWCCADAAFR9HIsPFosBFor6ForzgIrrwCjK25VzqaiCSaqWnreoooeTAQABFoskgIscwCjK24CsqdEAi0gIAMAAVH4Wi34Wi3AWi2kWi2KAi1rAKMrblXOpqIJJqpaet6iih5SLPgkBiffAAFuvAAAAAGIGwABUioDli5+LtovfAQCqIQAAAAEDi8mL3wAAAAAAAABgA6+RAUqLzAEWi8wuwABANcAAVHfAAFSDBsAAVI2A5Yvki+2M5QIAqiEAAAABA4v/jOUAAAABAQGMEwAAAIQmYAOvkQAAXAE+AUmMIhyMLoCMJsAozD1IAQABKwDAAP91PgE9F4w/LsAAQDbAAFR3F4xPLsAAQDXAAFR3K8AAVIPAAFSEPgI9F4x+LsAAQDXAAFR3gIyUwCjMPcAAVIM9F4yjLsAAQDbAAFR3IyWMu4CMs8AozD1gA8AAUxEUjM3AKMw9AAFgA8AAUxErAWADwABTEcAAVIQGwABUi4DljOqM+40YAQCE8AAAAAEDjQiNGAAAAAAAAABgA8AAUxEBSo0LARaNCy7AAEA2wABUd8AAVIQGwABUj4DljR2NLo5GAAChXQFqjR5gA8AA/2gCAAABA409jkYAAAABAQGNQgAAAIDuYAPAAP4bAABcAT4DQByNVi6hywIAAisejWewrgIAAmqNf2ADsLDAAOabgI2GwCjNQgAAwABbeI1WjY0APRyNlC6hTwEAASehXgDAAFTpSY20HI2+gI24wCjNQoCXAQABkwDAAP9LPgI9HI3LLsAAQDkBAAEcjdmAjdPAKM1CgY0BAAGUAMAA/0IAwABbeT0cjeUuoSwBAAE1AAAAAQBgA8AA/2gBHI3qLqEvAQABao34YAPAAFs+wADmqgDAAFuCIxyN/4EAwCjN4kgBAAErAABqjgxgA8AAWz7AAOaqgQDAKM3iAWADwAD/aADAAFt/PgE9HI4nLqEsAQABao42YAPAAFs+wADmqgDAAFt/BsAAVJCA5Y5LjlyPBwAAoVEBao5MYAPAAP9oAgAAAQOOZ48HAAAAAwMDjm4AAACfw2ADnyIAjoAAAAChUmADnyIAjpgAAACdcGADnyIAAFwBPgM9HI6oLqFPAQABJ6FTAMAAVOk9HI7ELsAAQDkBAAEjHI7dgY7MwCjOjUgBAAErAMAA/3WUlQFgA8AA/hsAwABbeT0cjvMuoSwBAAGAjvjAKM6BAMAAW38GwABUkYDljwyPHY/JAADAAEA6AWqPDWADwAD/aAIAAAEDjyaPyQAAAAQEBI80AAAAwABAO2ADnyIAj0cAAADAAEA8YAOfIgCPWAAAAKI8YAOfIgCPaAAAAKIuYAPAAPxVAABcAT4DPRyPdy6hTwEAASfAAEA9AMAAVOlJj5GDj5XAKM9VPRyPni7AAEA5AQABlADAAFt5Pz0cj64uwABAOQEAAZQAwABbeQbAAFSSgOWPzo/fkGAAAMAAQD4Bao/PYAPAAP9oAgAAAQOP/5BgAAAAAQEBkAYAAACfw2ADnyIAAFwBPgI9HJAYLqFPAQABJ8AAQD8AwABU6T0ckEYuoS8AAAAAwABbggbAAFSTgOWQZZB2kLgAAMAAQEABapBmYAPAAP9oAgAAAQOQh5C4AAAAAQEBkI4AAACSqWADnyIAAFwBPgE9HJCbLqFPAQABJ8AAQEEAwABU6QbAAFSUgOWQvZDOkRgAAMAAQEIBapC+YAPAAP9oAgAAAQOQ45EYAAAAAQEBkOoAAACSqWADnyIAAFwBPgE9HJD3LqFPAQABJ8AAQEMAwABU6QbAAFSVgOWRHZEukcIAAMAAQEQBapEeYAPAAP9oAgAAAQORaJHCAAAAAQEBkW8AAACSqWADnyIAAFwBPgE9HJF8LqFPAQABJ8AAQEUAwABU6QbAAFSWgOWRx5HYkhcAAMAAQEYBapHIYAPAAP9oAgAAAQOR5JIXAAAAAQEBkesAAADAAEBHYAOfIgAAXAE+AT0ckf8uoU8BAAEnwABASADAAFTpBsAAVJeA5ZIcki2SigAAosUBapIdYAPAAP9oAgAAAQOSN5KKAAAAAgICkj4AAACfw2ADnyIAklAAAACixmADnyIAAFwBPgI9HJJkLqFPAQABJ4TTAMAAVOk9HJJ8LsAAQDkBAAGUAMAAW3kGwABUmIDlko+SoJLXAADAAEBJAWqSkGADwAD/aAIAAAEDkquS1wAAAAEBAZKwAAAAgO5gA8AA/hsAAFwBPgE9HJK9LqFPAQABJ8AAQEoAwABU6QbAAFSZgOWS3JLtk10AAMAAQEsBapLdYAPAAP9oAgAAAQOTEpNdAAAAAQEBkxkAAADAAEBMYAOfIgAAXAE+AT0ckywuoU8BAAEnwABATQDAAFTpBsAAVJqA5ZNik3OTwwAAwABATgFqk2NgA8AA/2gCAAABA5OIk8MAAAABAQGTjwAAAMAAQExgA58iAABcAT4BPRyToi6hTwEAASfAAEBPAMAAVOkGwABUm4Dlk8iT2ZQcAADAAEBQAWqTyWADwAD/aAIAAAEDk/CUHAAAAAAAAABcAT4BPRyT+S6hTwEAASfAAEBRAMAAVOkGwABUnIDllCGUMpSVAACjZQFqlCJgA8AA/2gCAAABA5RClJUAAAADAwOURwAAAIDuYAPAAP4bAJRUAAAAn8NgA58iAJRmAAAAnXBgA58iAABcAT4BPRyUdi6hTwEAASejZgDAAFTpBsAAVJ2A5ZSalKuU/wAAo2cBapSbYAPAAP9oAgAAAQOUxZT/AAAAAQEBlMwAAACSqWADnyIAAFwBPgE9HJTZLqFPAQABJ6NoAMAAVOkGwABUnoDllQSVFZV4AACiWgFqlQVgA8AA/2gCAAABA5UolXgAAAACAgKVLwAAAKJRYAOfIgCVSQAAAJKpYAOfIgAAXAE+AT0clVYuoU8BAAEnhV4AwABU6QbAAFSfgOWVfZWOld4AAKJbAWqVfmADwAD/aAIAAAEDlaaV3gAAAAEBAZWtAAAAkqlgA58iAABcAT4BPRyVui6hTwEAASeiXADAAFTpBsAAVKCA5ZXjlfSWPgAAo/UBapXkYAPAAP9oAgAAAQOWCZY+AAAAAQEBlhAAAACSqWADnyIAAFwBPgE9HJYdLqFPAQABJ6P2AMAAVOkGwABUoYDllkOWVJfrAACjCwFqlkRgA8AA/2gCAAABA5Znl+sAAAAEBASWcwAAAIDuYAPAAP4bAJaAAAAAn8NgA58iAJaSAAAAnXBgA58iAJanAAAAgmtgA8AAWwoAAFwBPgQ9HJazLqFPAQABJ6MMAMAAVOlAHJbkgJbewCjUy0gBAAGTAMAA/z+W3pboAEmXJiIiIRyXL4OXKsAo1PFIAQABapc9YAPAAFsKwADFBADAAP91AB6XYMAA9/wCAAIcl2oun70AAAAAwABbgSeBjQAAHpeCwAD3/AIAAhaXl4GXjMAo1NmDtZ89gpedwCjU5QA+Aj0cl7AuoS8AAAAAwABbgj0cl70uoSwBAAEngcYAwABbfz89HJfXLqEsAQABgZfcwCjU2QDAAFt/BsAAVKKA5ZfwmAGYvgAAwABAUgFql/FgA8AA/2gCAAABA5gZmL4AAAACAgKYIAAAAJKpYAOfIgCYMgAAAIJrYAPAAFsKAABcAT4DPRyYPi6hTwEAASfAAEBTAMAAVOlJmGQemGjAAPf8AgACHJhyLp+9AAAAAMAAW4EngY0APgI9HJiILqEvAAAAAMAAW4I9HJiVLqEsAQABJ4HGAMAAW38/PRyYry6hLAEAAYCYtMAo1foAwABbfwbAAFSjgOWYw5jUmUEAAKLTAWqYxGADwAD/aAIAAAEDmOOZQQAAAAICApjqAAAAotRgA58iAJj/AAAAosZgA58iAABcAT4CPRyZEy6hTwEAASeGlQDAAFTpPRyZMy7AAEA5AQABlADAAFt5BsAAVKSA5ZlGmVeiCgAAwABAVAFqmUdgA8AA/2gCAAABA5lrogoAAAADAwOZeQAAAMAAQFVgA58iAJmPAAAAlftgA58iAJmdAAAAnXBgA58iAABcAT4KPRyZrS6hTwEAASfAAEBWAMAAVOlJmdMcmd6BmdfAKNcrSAEAASsAwAD/dT0cmecuoS8AAAAAwABbgj9OmgWaCgAAgL1gA8AA/2gBHJoMLqEvAAAAAMAAW4JOmh2aJgAAhvdgA58iASaaHQEcmiguoS8AAAAAwABbgmADnyI9HJozLqG4AQABFppNgJo+wCjXHYdxnysAwABbikmaXiWaZ4OaYsAo14RgA8AAW8xKmnoAP06amJqnAACpnWADwABTfQEmmpgBHJqpLsAAQFcDAAOAmrfAKNcdKyaazQGDms3AKNeEYAPAAQACAMAAVORgA8AAU309HJrYLqG7AwADhZrmwCjX+4Sa9sAo16IWmw+FmwDAKNf7hpnAAFOBAMAAVOpJmx0lmzCFmyHAKNf7YAPAAFN9PgJOm1mbXgAAgpRgA8AAWB0BFptvFJtgwCjX+wUBYAPAAFN9gpTAAFN/SZt7JZuEhpt/wCjYgGADwABXrz4CTpvDm8sAAKF3XQPAAP6/AWADwABXFgEWm9IUm83AKNiABgFgA8AAV6+hd8AAV7NJm+MhHJvvh5vnwCjYvUgBAAErAMAA/uk+AUWcBAGcDZwPAABiYAPAAP4bAZMBHJwWFJwUwCjZCQgAYwEAARacIIecGMAo2L1hwAD+7wDAAP9JARWcKsAo2QkIHJwoFJwqwCjZCQgAZAEAAZQAwAD/QT4DTpxSnFkAAJoaYAPAAFcWARycYoecW8Ao2L1LAQABFJxjwCjZCQgAAMAA/s5OnImckgAAhvddA8AA/r8BYAPAAFfPARacmxSclMAo2V8JAIb3wABXGEmcsSIhHJy+FJy1wCjZiwoASAEAASsAwAD+6QAcnNkWnNIUnMnAKNmLCgBhwAD+74CXAQABkwDAAP9LPgNOnY6dnAAAwABAWGADnyIBHJ2eLsAAQFkDAAOAncDAKNcdgp3QwCjXNxad5hyd4hSd2sAo2YsKAEsBAAGTAMAA/s6HccAAV9MAwABU606eEp4eAACEaF0DwAD+vwFgA4TsARyeMi6huwMAAxSeQMAo1/sFAWADwABTfRSeUMAo2fELACsAwABU6kmedBaefxSeeMAo2V8JAMAAQFrAAFcjPgJOnrOevQAAgO1gA4iRARye/hae6hae4hSe08Ao1/sFAWADwABTfYaZwABTgYTHgv9LAQABFJ7/wCjZCQgAAMAA/s5GnxOfPp8jAAAAhLdgA4TsABSfMcAo2j4MAD4BPRyfXBSfUsAo2pMNAIRpAQABFJ9qwCja2Q4AAIizPgFGn7CgDp/JAAAAhXVgA4iRABaf/Raf9RSf5sAo1/sFAWADwABTfYaZwABTgYTIgwA+AUmgIhygMRagLBSgJsAo2xUNAIC9iJVIAQABFqA7FKA0wCjZXwkAgL3AAFcbAMABABE+AUagV6CCoGcAAACEt2ADhOwAFKB1wCjaPgwAPgE9HKCgFKCawCjbFQ0AhGkBAAEUoK7AKNt6DgAAiLM/Pz8/SaE+IRyhUYWhQsAo1/tIAQABKwDAAP91PgE9HqFinYsEAAQkoZEBFqF+haFvwCjX+6HAwABYOyfAAEBUFqHEgKG1wCjXHYdxnysWodAugKzAAFSIAD89HKHhLqG4AQABFqH7gKHswCjXHYdxnysAwABbigbAAFSlgOWiD6IgovwAAKFnAWqiEGADwAD/aAIAAAEDoi6i/AAAAAcHB6I1AAAAoWFgA58iAKJIAAAAoWJgA58iAKJeAAAAoWNgA58iAKJ1AAAAoWRgA58iAKKKAAAAgO5gA8AA/hsAopcAAACfw2ADnyIAoqkAAACdcGADnyIAAFwBPgI9HKK5LqFPAQABJ6FoAMAAVOk9HKLTLsAAQFsDAAOEot/AKNyAhaLmwCjcjioAwABU0QbAAFSmgOWjAaMSo28AAKKXAWqjAmADwAD/aAIAAAEDoyWjbwAAAAICAqMsAAAAophgA58iAKM+AAAAoFlgA58iAABcAT4BPRyjUC6hTwEAASeCKwDAAFTpBsAAVKeA5aN0o4WlUAAAwABAXAFqo3VgA8AA/2gCAAABA6OWpVAAAAADAwOjnQAAAJ/DYAOfIgCjrwAAAMAAQF1gA58iAKO/AAAAnXBgA58iAABcAT4IPRyjzy6hTwEAASfAAEBeAMAAVOlOo/ekAQAAwABAX2ADnyIBJqP3ARykAy6hLwAAAADAAFuCYAOfIk6kFaQaAACAvWADwAD/aAEcpBwuoS8AAAAAwABbgk6kLaQ2AACG92ADnyIBJqQtARykOC6hLwAAAADAAFuCYAOfIj0cpEMuobgBAAEWpFmApE7AKN1ih3GfKwDAAFuKSaRqJaRzhKRuwCjdyGADwABbzEqkhgA/TqSnpLAAAaodYAPAAFtzARykui7AAEBgAQABJqTRARyk0S7AAEBXAwADgKTfwCjdYoGk68Ao3W4mpPUBhKT1wCjdyGADwAEAAgDAAFTkYAPAAFcyAMAAVM89HKUBLsAAQGEEAASGpRPAKN4/g6UdwCjdooWlKMAo3eZqpT1gA8AAWwrAAQg5AMAAVOIGwABUqIDlpVWlZqWuAADAAEBjAWqlVmADwAD/aAIAAAEDpXqlrgAAAAEBAaWBAAAAkqlgA58iAABcAT4BPRylji6hTwEAASfAAEBkAMAAVOkGwABUqYDlpbOlxKbPAAChYAFqpbRgA8AA/2gCAAABA6XVps8AAAAHBwel4wAAAKFhYAOfIgCl/AAAAKFiYAOfIgCmGAAAAKFjYAOfIgCmLwAAAKFkYAOfIgCmSgAAAIDuYAPAAP4bAKZdAAAAn8NgA58iAKZ1AAAAnXBgA58iAABcAT4CPRymhS6hTwEAASehZQDAAFTpPRympy7AAEBbAwADhKazwCjfdYWmusAo34MpAMAAVNEGwABUqoDlptSm5acnAACi1gFqptVgA8AA/2gCAAABA6b2pycAAAABAQGm/QAAAJKpYAOfIgAAXAE+AT0cpwouoU8BAAEnotcAwABU6QbAAFSrgOWnLKc9p3oAAKF+AWqnLWADwAD/aAIAAAEDp1GnegAAAAAAAABcAT4BPRynWi6hTwEAASehfwDAAFTpBsAAVKyA5ad/p5Cn8QAAoYEBaqeAYAPAAP9oAgAAAQOnn6fxAAAAAwMDp6QAAACA7mADwAD+GwCnsQAAAJ/DYAOfIgCnwwAAAJ1wYAOfIgAAXAE+AT0cp9MuoU8BAAEnoYIAwABU6QbAAFStgOWn9qgHqnEAAKIgAWqn92ADwAD/aAIAAAEDqBaqcQAAAAEBAagdAAAAoVhgA58iAABcAT4FQByoMi6hywIAAoCoPcAo4PExqEVgA7CwAmqoYmADsLDAAOZ4HqiJsK8BAAExqJZgA7CwBGqoqmADsLDAAMWkaqjCYAOwsMAAw8FqqN9gA7CwwADD22qpAWADsLDAAMVrAADAAFt4qDKpIAA9HKknLqFPAQABJ6IgAMAAVOlOqVGpWAAAoCdgA8AA/2gBHKlaLqEvAAAAAMAAW4JOqWypcwAAgylgA8AA/2gBHKl1LqEvAAAAAMAAW4JJqYAlqYuCqYTAKOGeYAPAAFvMPgE9HKmmLqEsAQABFKmrwCjhngIBYAPAAFvMAMAAW39Jqb8lqcqBqcPAKOGAYAPAAFvMPgE9HKnlLqEsAQABFKnqwCjhgAEBYAPAAFvMAMAAW38+AkAeqg3AAPf8AgACgaoXwCjhgBaqKxaqJoCqH8Ao4PGDtZ89gmKfPACqDaoyAD0cqjsuoSwBAAEfqkTAAFaJAgACgqpSwCjhnhaqYYCqWsAo4PGDtZ89AADAAFt/BsAAVK6A5ap2qoerEgAAwABAZQFqqndgA8AA/2gCAAABA6qVqxIAAAACAgKqnAAAAMAAQGZgA58iAKqyAAAAojxgA58iAABcAT4DPRyqwy6hTwEAASfAAEBlAMAAVOk9HKrlLqEvAAAAAMAAW4I9HKr5LqEvAAAAAMAAW4IGwABUr4DlqxerKKtyAACiJAFqqxhgA8AA/2gCAAABA6s6q3IAAAABAQGrQQAAAJKpYAOfIgAAXAE+AT0cq04uoU8BAAEnoiQAwABU6QbAAFSwgOWrd6uIq8gAAKIlAWqreGADwAD/aAIAAAEDq5iryAAAAAEBAaufAAAAkqlgA58iAABcAT4BPRyrrC6hTwEAASeiJgDAAFTpBsAAVLGA5avNq96sPwAAoicBaqvOYAPAAP9oAgAAAQOr7qw/AAAAAgICq/MAAACiKGADwAD+GwCsDQAAAJ1wYAOfIgAAXAE+AT0crB0uoU8BAAEnoicAwABU6QbAAFSygOWsRKxVrK0AAKIsAWqsRWADwAD/aAIAAAEDrGesrQAAAAICAqxuAAAAoi1gA58iAKyAAAAAoi5gA8AA/FUAAFwBPgE9HKyPLqFPAQABJ6IvAMAAVOkGwABUs4DlrLKsw6z7AACiMQFqrLNgA8AA/2gCAAABA6zPrPsAAAABAQGs1gAAAJKpYAOfIgAAXAE+AT0crOMuoU8BAAEnojIAwABU6QbAAFS0gOWtAK0RrWgAAKIzAWqtAWADwAD/aAIAAAEDrSqtaAAAAAEBAa0vAAAAojRgA8AA/hsAAFwBPgE9HK1DLqFPAQABJ6I1AMAAVOkGwABUtYDlrW2tfq3nAADAAEBnAWqtbmADwAD/aAIAAAEDrY6t5wAAAAICAq2TAAAAgO5gA8AA/hsAraAAAADAAEBoYAOfIgAAXAE+Aj0crbcuoU8BAAEnwABAaQDAAFTpPRyt1S7AAEA5AQABgK3dwCjlFADAAFt5BsAAVLaA5a3srf2uaAAAwABAagFqre1gA8AA/2gCAAABA64OrmgAAAADAwOuFQAAAK9xYAOfIgCuJgAAAKJ+YAOfIgCuNwAAAMAAQGtgA58iAABcAT4BPRyuSC6hTwEAASfAAEBsAMAAVOkGwABUt4Dlrm2ufq7DAADAAEBtAWqubmADwAD/aAIAAAEDrpCuwwAAAAEBAa6VAAAAgO5gA8AA/hsAAFwBPgE9HK6iLqFPAQABJ8AAQG4AwABU6QbAAFS4gOWuyK7Zr1EAAMAAQG8Baq7JYAPAAP9oAgAAAQOu669RAAAAAgICrvIAAADAAEBwYAOfIgCvCQAAAJKpYAOfIgAAXAE+Aj0crxYuoU8BAAEnwABAcQDAAFTpPRyvNi6hLAEAARavQYGvO8Ao5lmd2Z9BAMAAW38GwABUuYDlr1avZ6/lAADAAEByAWqvV2ADwAD/aAIAAAEDr4Cv5QAAAAICAq+HAAAAwABAcGADnyIAr54AAACSqWADnyIAAFwBPgI9HK+rLqFPAQABJ8AAQHMAwABU6T0cr9IuoSwBAAEnqq4AwABbfwbAAFS6gOWv6q/7sFUAAMAAQHQBaq/rYAPAAP9oAgAAAQOwD7BVAAAAAQEBsBQAAACA7mADwAD+GwAAXAE+Aj0csCEuoU8BAAEnwABAdQDAAFTpPRywQy7AAEA5AQABgLBLwCjnOADAAFt5BsAAVLuA5bBasGuwogAAwABAdgFqsFtgA8AA/2gCAAABA7BysKIAAAABAQGweQAAAMAAQHdgA58iAABcAT4BPRywjC6hTwEAASfAAEB4AMAAVOkGwABUvIDlsKewuLDvAADAAEB5AWqwqGADwAD/aAIAAAEDsL+w7wAAAAEBAbDGAAAAwABAemADnyIAAFwBPgE9HLDZLqFPAQABJ8AAQHsAwABU6QbAAFS9gOWw9LEFsUIAAMAAQHwBarD1YAPAAP9oAgAAAQOxE7FCAAAAAQEBsRgAAACA7mADwAD+GwAAXAE+AT0csSUuoU8BAAEnwABAfQDAAFTpBsAAVL6A5bFHsVix5AAAwABAfgFqsUhgA8AA/2gCAAABA7FqseQAAAACAgKxcQAAAMAAQH9gA58iALGIAAAAwABAgGADnyIAAFwBPgI9HLGZLqFPAQABJ8AAQIEAwABU6T0csbkuwABAggIAAoGxxMAo6KpqsdlgA8AAWz7AAQhTAMAAW4AGwABUv4Dlsemx+rTfAADAAECEAWqx6mADwAD/aAIAAAEDsgO03wAAAAICArIKAAAAwABAhWADnyIAsh8AAACiPGADnyIAAFwBPgs9HLIwLqFPAQABJ6jxAMAAVOlOslGyVgAAgL1gA8AA/2gBHLJYLqEvAQABarJmYAPAAFs+wAEIUwDAAFuCTrJ6soMAAIb3YAOfIgEmsnoBHLKFLqEvAAAAAMAAW4JgA58iPRyykC6huAEAARayqYCym8Ao6SKHcZ8rAMAAW4pJsrolssOCsr7AKOlUYAPAAFvMSrLWAD9Os1qzaQAAwABAhmADnyIBFrN5gLNrwCjpIoO1nz1Os4qzlAAAhHxgA8ABAAIBHrOesF4DAAMWs7yEs63AKOnYgmKfPISzxMAo6dguAEmz3xyz7YWz48Ao6faB2AEAASepNADAAQAUSrQGAD9OtBu0JwAAwABAh2ADgowBFrQ4FrQpLp68wABUeoRIqbxOtFe0YgAAhMFgA4LDARy0hBa0eIa0bMAo6kSAz4KdSwEAATUAAAABAGADwAD+GwEWtIUuwABAM8AAVIA1AAAAAQBgA8AA/hsBF7SFLsAAQDMctJ+HAMAo6ohkAQABlADAAP9BwABUgIcAwCjqiADAAP7OPRy0qC6huwMAAxa0ti6evMAAVHqDtMbAKOl/h7TQwCjqZQDAAFTqBsAAVMCA5bTktPW1OQAAwABAiAFqtOVgA8AA/2gCAAABA7UItTkAAAABAQG1DwAAAKI8YAOfIgAAXAE+AT0ctSAuoS8BAAFqtS5gA8AAWz7AAQhTAMAAW4IGwABUwYDltT61T7aIAADAAECJAWq1P2ADwAD/aAIAAAEDtVi2iAAAAAICArVfAAAAwABAimADnyIAtXQAAACiPGADnyIAAFwBPgU9HLWFLqFPAQABJ6jwAMAAVOlOtaa1rwAAhvdgA58iASa1pgEctbEuoS8AAAAAwABbgmADnyJOtcS10AAAwABAh2ADgowBFrXhFrXSLp68wABUeoRIqbxOtgC2CwAAhMFgA4LDARy2LRa2IYO2FcAo69mAz4KdSwEAATUAAAABAGADwAD+GwEWti4uwABAM8AAVIA1AAAAAQBgA8AA/hsBF7YuLsAAQDMctkiEAMAo7B1kAQABlADAAP9BwABUgIQAwCjsHQDAAP7OPRy2US6huwMAAxa2Xy6evMAAVHqCtm/AKOu1hLZ5wCjr+gDAAFTqBsAAVMKA5baNtp65BAAAwABAiwFqto5gA8AA/2gCAAABA7aluQQAAAACAgK2rAAAAMAAQDtgA58iALa/AAAAojxgA58iAABcAT4EPRy20C6hTwEAASfAAECMAMAAVOlOtu+2+AAAhvdgA58iASa27wEctvouoS8AAAAAwABbgmADnyJOtw23GQAAwABAh2ADgowBFrcqFrcbLp68wABUeoRIqbxJtzcct1QWt00Wt0eDtzvAKO0XhIaCn2HAAP7vgJcBAAEWt1YuwABANMAAVIEAwAD/Sz4CTriXuJwAAJpSYAOC3QEcuK8WuKqDuJ7AKO0XhIaCn0sBAAE1AAAAAQBgA8AA/hsBFriwLsAAQDTAAFSBNQAAAAEAYAPAAP4bARe4sC7AAEA0HLjChADAKO2PZAEAAZQAwAD/QcAAVIGEAMAo7Y8AwAD+zj0cuM0uobsDAAMWuNsunrzAAFR6grjrwCjs84S49cAo7WwAwABU6j8GwABUw4DluQm5GrmIAACj7AFquQpgA8AA/2gCAAABA7kruYgAAAABAQG5MgAAAJKpYAOfIgAAXAE+Aj0cuT8uoU8BAAEno+wAwABU6T0cuWQuwABAOQEAAZUAwABbeQbAAFTEgOW5jbmeugMAAKPuAWq5jmADwAD/aAIAAAEDua26AwAAAAMDA7m0AAAAkqlgA58iALm/AAAAJ2ADwAD+GwC5zAAAAKPvYAOfIgAAXAE+AT0cueIuoU8BAAEno+4AwABU6QbAAFTFgOW6CLoZunEAAKPxAWq6CWADwAD/aAIAAAEDuim6cQAAAAICArowAAAAn8NgA58iALpCAAAAnXBgA58iAABcAT4BPRy6Ui6hTwEAASej8gDAAFTpBsAAVMaA5bp2uoe7KwAAozUBarp3YAPAAP9oAgAAAQO6nrsrAAAAAwMDuqwAAABqYAOfIgC6uQAAAKFSYAOfIgC60QAAAJ1wYAOfIgAAXAE+Aj0cuuEuoU8BAAEnozYAwABU6T0cuwkuoxkBAAGBuxbAKO9ZAMAAW4MGwABUx4DluzC7Qb3uAADAAECNAWq7MWADwAD/aAIAAAEDu1a97gAAAAMDA7tkAAAAn8NgA58iALt2AAAAwABAjmADnyIAu4wAAACdcGADnyIAAFwBPgg9HLucLqFPAQABJ8AAQI8AwABU6U67yLvSAADAAEBfYAOfIgEmu8gBHLvULqEvAAAAAMAAW4JgA58iTrvmu+sAAIC9YAPAAP9oARy77S6hLwAAAADAAFuCTrv+vAcAAIb3YAOfIgEmu/4BHLwJLqEvAAAAAMAAW4JgA58iPRy8FC6huAEAARa8KoC8H8Ao78qHcZ8rAMAAW4pJvDsiJbxEhLw/wCjwMGADwABbzAEWvFkuwABAN8AAVIVKvHcAP068lLycAACEJmADwABXMgEmvJQBHLyeLqG9AgACgLywwCjvyoS8vMAo8DAAwABU5WADwABXMkm8xyIcvNWDvMvAKPAKSAEAASsAwAD/dQEevODAAFsoAgACJ4C8Fr0BFrz4g7zuwCjwCp15ny+DtZ89AD4BPRy9EC7AAECQBAAEg705wCjwCoa9RMAo8LVqvVhgA8AAWwrAAQhvhb1hwCjwTgDAAFTQPgE9HL1/LsAAQGEEAAQcvZEuwABAYAEAAYa9qMAo8LUAwABUz4O9ssAo8AqFvb3AKPBOar3cYAPAAFsKwAEIbwDAAFTiBsAAVMiA5b3zvgS+lwAAwABAkgFqvfRgA8AA/2gCAAABA74dvpcAAAACAgK+JAAAAJ/DYAOfIgC+NgAAAJ1wYAOfIgAAXAE+Aj0cvkYuoU8BAAEnlaYAwABU6T0cvnAuwABAOQEAAZQAwABbeQbAAFTJgOW+nL6tvxQAAMAAQJMBar6dYAPAAP9oAgAAAQO+xb8UAAAAAgICvswAAACiLWADnyIAvt8AAACiPGADnyIAAFwBPgE9HL7wLqFPAQABJ8AAQJQAwABU6QbAAFTKgOW/Gb8qv58AAMAAQJUBar8aYAPAAP9oAgAAAQO/Sb+fAAAAAgICv1AAAACiLWADnyIAv2MAAACiPGADnyIAAFwBPgE9HL90LqFPAQABJ8AAQJYAwABU6QbAAFTLgOW/pL+1wABArgAAwABAlwFqv6VgA8AA/2gCAAABA7/UwABArgAAAAICAr/bAAAAoi1gA58iAL/uAAAAojxgA58iAABcAT4CPRy//y6hTwEAASfAAECYAMAAVOlJwABALCEWwABAMS6Hk8AAVH0+AT0dwABATaKFAwADasAAQG9gA5HFsa2AwABAi8Ao8veAwABAmMAo8vcAwABbqD8GwABUzIDlwABAs8AAQMTAAESjAADAAECZAWrAAEC0YAPAAP9oAgAAAQPAAEDSwABEowAAAAUFBcAAQNkAAADAAEBdYAOfIgDAAEDpAAAAn8NgA58iAMAAQPsAAADAAECaYAOfIgDAAEETAAAAoYBgA58iAMAAQSwAAACdcGADnyIAAFwBPgk9HMAAQTwuoU8BAAEnhQ8AwABU6T0cwABCHC6hLwAAAADAAFuCTsAAQjvAAEJAAACAvWADwAD/aAEcwABCQi6hLwAAAADAAFuCTsAAQlPAAEJcAACG92ADnyIBJsAAQlMBHMAAQl4uoS8AAAAAwABbgmADnyI9HMAAQmkuobgBAAEWwABCf4HAAEJ0wCjzsodxnysAwABbiknAAEKQIiXAAEKZhcAAQpTAKPQXYAPAAFvMARbAAEKuLsAAQDfAAFSFSsAAQswAP07AAELoAAAAhCZgA8AAVzIAScAAQvUiJcAAQv6FwABC+cAo9BdgA8AAVoIBIhzAAEMkgMAAQxvAKPOiSAEAASsAwAD/dQAcwABDNIXAAEMvwCj0F0gBAAE1AAAAAQBgA8AAUxEBFsAAQzcuhPDAAFSLIxzAAENFFADAKPUSCABIAQABKwAAKxbAAENFFADAKPUSCACAvcAAWDcBYAPAAQACAMAA/3U+AT2PwABDVMAo9LomwABDVAEcwABDXi6hvQIAAoHAAENwwCjzsoXAAEN8wCj0FwDAAFTlYAPAAFcyPgE9j8AAQ5bAKPS6JsAAQ5YBHMAAQ6AuwABAVwMAA4HAAEOuwCjzsoDAAEO6wCjzoibAAEPEAYXAAEPEwCj0F2ADwAEAAgDAAFTkYAPAAFcyPRzAAEPVLsAAQGEEAAQcwABD8C7AAEBgAQABh8AARAfAKPS6AMAAVM+CwABEGcAo88CGwABELcAo9DsjFsAAREeHwABEP8Ao9LqEHq+rasAARGlgA8AAWwrAAQiIasAARI9gA8AAWwrAAQikAWADwABbCgDAAFTiBsAAVM2A5cAARKjAAES2wABI8AAAqiQAAAABA8AARMTAAEjwAAAABgICwABE1QAAAIQmYAOvnwDAAETkAAAAhxdgA6kfAATAAET9AAAAoQdgA8AA/FUBagBgA8AA/yV5wABFNAAAAKEfYAOIkQFqAGADwAD/JXnAAEVdAAAAoSBdA8AA/r8BYAOJlgFqAGADwAD/JXnAAEWCAAAAoQ5gA6kfAWoAYAPAAP8leWADwABbcwE+BE7AAEaiwABGqwAAhMlgA4k3ASMcwABGw4PAAEa1wCj2wkgBAAErAMAA/3U1AAAAAQBgA6+RARbAAEbNLqohwABUiiMcwABG4YYAwCj3Q0gBAAErAAArFsAARuGGAMAo90OEya+XAWADiTcrAWADiTdOwABHA8AARxAAAKELYAOxDAE1AAAAAQBgA8AAVfIBFsAARxIuoSbAAFR/IxzAAEcnhwDAKPeaSAEAASsAACscwABHJ4cAwCj3mqEnAwADFsAAR0gugKzAAFSIhsAAR03AKPcYFsAAR1cunrzAAFR6AMAAVf0BYAOxDE7AAEd8wABHjAAAoRhgA6/rASMiFsAAR5aAwABHjsAo9oyHnsAAVr4AFsAAR6+AwABHp8Ao9oyEIq+nasAAR9FgA6/rwADC5mrAAEf0YAOv68AAwqYBYAOv60rAAEf+ARzAAEgFLsAAQJ0IAAiAwABIJcAo9oyBwABINsAo9pqFwABIS8Ao9veCwABIacAo9qmDwABIjsAo9sKEwABIpcAo9tmHwABIxsAo94gUwABI3MAo+AIIAADAAFTOBsAAVM6A5cAASPXAAEkDwABMagAAwABAnQAAAAEDwABJGcAATGoAAAAICAjAAEkxAAAAhCZgA6+fAMAASUYAAACHF2ADqR8AwABJXwAAAKEOYAOpHwDAAEmAAAAAoQdgA8AA/FUAwABJtwAAAKEfYAOIkQDAAEngAAAAoSBdA8AA/r8BYAOJlgDAAEoMAAAAoQtgA7EMAMAASjAAAAChGGADr+sAAGADwABbcwE+AUrAAEpHATXAAEpSAAABAGADooIBH8AASlKjtwwAAAyevBbAAEp3Lp68wABUeoJqgMAASpfAKPjpoQiBwABKuMAo+PehDoLAAErjwCj5BYeJFsAASwwuh4nAAFR7h4UWwABLKi6HhcAAVHyfpBbAAEtRLqohwABUiqEHg8AAS4rAKPkToR+EwABLvsAo+SOhIIXAAEvuwCj5MYCsFsAATBQugKzAAFSIoQuGwABML8Ao+UY1AAAAAQBbARfAAExFFMAATEPAKPlzCAChGIfAAExXwCj5VKKgFADAKPlzCAAGwABUz4DlwABMb8AATH3AAE7uAADAAEBgAAAAAQPAAEyTwABO7gAAAAEBAcAATKQAAACEJmADwABXMgAAYAPAAFtzAT4FTsAATL/AAEzSAAHAAECeYAOpHwEcwABM5IDAAEzcwCj6d8AAQJ8BAAEWwABM/i6HF8AAVIcAwABXUk7AAE0cwABNMQABoQ5gA6kfARzAAE1DgMAATTvAKPp3obMBAAGBwABNX8Ao+pIAwABXUEAhHMAATZKBwABNf8Ao+pJIAQABKwDAAP91wABNf8AATZkAQCEcwABNvILAAE2nwCj6zEgBAAErAMAA/3XAAE2nwABNwwBKwABNygEcwABN0S6qJAYAAoDAAE3gwCj6d4HAAE3pwCj6kgShBxbAAE4qgMAATiLAKPp3oQfAAFNnoR8WwABOZoDAAE5ewCj6d6EfwABXTaEgFsAATp6AwABOlsAo+nehIMAAV06hDoLAAE7VwCj6zMAAVM0GwABU0IDlwABO88AATvjAAFHTAADAAECQAAAAAQPAAE8VwABR0wAAAAQEBMAATyMAAACSqWADnyIAwABPOgAAAIQmYAPAAFcyAMAAT04AAACCa2ADwABbCgDAAE9aAAAAhvdgA58iAABcAT4CTsAAT37AAE+HAAGqHWADwABbcwEcwABPiS7AAEBgAQABgcAAT6DAKPvzAMAAVM9LPgVOwABPwcAAT8gAAKGvYAPAAFmjAR/AAE/OwABajgEAAYTAAE/VwCj8JwBJwABP5iEcwABP84PAAE/qwCj8E0gBAAErAMAA/3U+Aj0cwABQDYXAAFAGwCj8WcAAQKABAAEcwABQJoXAAFAfwCj8WaG1AQABg8AAUD3AKPwTAMAAWoMAwABZzj0cwABQWoTAAFBRwCj8J6EvAAAAAMAAW4I/PYjAAFCMwCj75RzAAFCbhcAAUJTAKPxZwABAoQIAAhzAAFDGhcAAUL/AKPxZobUBAAGAwABQ3cAo++UAwABag2rAAFDwYAPAAFsKwAEIbwDAAFnVPRzAAFEJhMAAUQDAKPwnoS8AAAAAwABbgj0cwABROoTAAFExwCj8J6G4AQABFsAAUVAWwABRS4DAAFFFwCj75YO1nz2HcZ8rAMAAW4oBAsAAUWNgA52PAAA+AT0vwABRecAAUYhbAcAAUY8AAAGDU1sAAcAAUZIAAAGIe2ADwAD/1gA+AT0wwABRnR/AAFGnoCgEAAQWwABRrS6ArMAAVIgWwABRuIDAAFGywCj75YdxnyuFwABRxMAo/bOGwABRx8Ao/b8ABsAAVNGA5cAAUdjAAFHdwABUiQAAwABAWwAAAAEDwABR6MAAVIkAAAADAwPAAFHtAAAAgO5gA8AA/hsAwABR+gAAAJKpYAOfIgDAAFIGAAAAh59gA8AA/FUAAFwBPgdOwABSJcAAUisAAIS+XQPAAP6/AWADwAEAAgEcwABST2rAAFIzXQPAAFvBAWADwAEAAsABCLmhLwIAAhbAAFJTLqE7wABbdYDAAFJawCj+PgDAAFvDTsAAUmzAAFJ1AACG92ADnyIBJsAAUmwBHMAAUncuoS8AAAAAwABbgmADnyI9HMAAUoIuobgBAAEWwABSk4HAAFKNwCj+TodxnysAwABbiknAAFKkIhzAAFKug8AAUqjAKP5ySAEAASsAwAD+6QEWwABSuS7AAEA3wABUhUrAAFLXAD9OwABS7MAAUvgAAJ8LYAPAAFayARzAAFL6LsAAQFcDAAOBwABTCMAo/k4rFsAAUxuDwABTFcAo/nKDHsAA/qMAwABU5D0cwABTji7AAECiBAAEHMAAU6MuqiQDAAImwABTsgGFwABTssAo/0pgA6+fFsAAU78uhxfAAFSHAaEHFsAAVBGFwABUBcAo/0qhB8AAVsfAAFTNgcAAVDfAKP5OhMAAVEbAKP7HgsAAVFjAKP5cAMAAVOM9HMAAVGkuobgBAAEWwABUeoHAAFR0wCj+TodxnysAwABbigbAAFTSgOXAAFSOwABUn8AAVQQAAMAAQKMBasAAVI9gA8AA/2gCAAABA8AAVLLAAFUEAAAAAQEBwABUuQAAAJ1wYAOfIgAAXAE+Aj0cwABUyS6hTwEAASfAAECkAMAAVOk9HMAAVOouoS8AAAAAwABbggbAAFTTgOXAAFUJwABVGsAAVVgAAKFwAWrAAFUKYAPAAP9oAgAAAQPAAFUjwABVWAAAAAAAAABcAT4CPRzAAFUsLqFPAQABJ4UXAMAAVOk9HMAAVUYuobgBAAEcwABVUZSBxgAAAADAAP4+AMAAW4oGwABU1IDlwABVXcAAVW7AAFYPAACjsQFqwABVXmADwAD/aAIAAAEDwABVd8AAVg8AAAAFBQXAAFV+AAAAo7BgA58iAMAAVZQAAACCa2ADwABamwDAAFWgAAAAo4xgA58iAMAAVb0AAACjsmADnyIAwABVzwAAAKOzYAOfIgAAXAE+AT0cwABV5S6hTwEAASeg4QDAAFTpBsAAVNWA5cAAVhTAAFYlwABYjwAAwABApQFqwABWFWADwAD/aAIAAAEDwABWOsAAWI8AAAACAgLAAFZLAAAAgmtgA8AAWvsAwABWVwAAAJKpYAOfIgAAXAE+CkAcwABWay6hywIAAoHAAFZ2wCkB5DHAAFZ9YAOwsANqwABWj2ADsLDAAOabasAAVqZgA7CwwADmeGrAAFbMYAOwsMAA5r8AwABbeMAAVmvAAFbeAD0cwABW5S6hTwEAASfAAEClAMAAVOlOwABXFMAAVx8AAJ/DYAOfIgEmwABXFAEcwABXIS6hLwAAAADAAFuCYAOfIk7AAFczwABXOAAAgL1gA8AA/2gBHMAAVzouoS8AAAAAwABbgj0cwABXRS6hLwAAAADAAFuCQBzAAFeFFsAAV3IuqiHAAFSKSAEAASsAwAD/dcAAV3LAAFeMAEAcwABXphbAAFeaLocXwABUh0gBAAEWwABXuBbAAFepLp68wABUep8ywABVggDAAP91wABXmsAAV70AScAAV8QlwABXzYPAAFfIwCkCjmADwABbzD4CPRfAAFfoLsAAQDcpwABUhUrAAFgTAD89F8AAWCUuqiEmwABYJQEcwABYOi7AAEBXAwADgsAAWEjAKQJiKybAAFhaAYPAAFhawCkCjmADwAEAAgDAAFTkYAOvkcAAVI09F8AAWGUuhxcWwABYhhbAAFhzLqohwABUip8yr5PAAFSHBsAAVNaA5cAAWJTAAFilwABZogAAwABApgFqwABYlWADwAD/aAIAAAEDwABYuMAAWaIAAAAEBATAAFjQAAAAgmtgA8AAWvsAwABY2gAAAMAAQKdgA8AA/hsAwABY7QAAAJ/DYAOfIgDAAFj/AAAAnXBgA58iAABcAT4EPRzAAFkPLqFPAQABJ8AAQKgAwABU6T0XwABZMy6qISvAAFSNPRfAAFlSLsAAQDcqwABUhT0XwABZfC6HFxbAAFmZFsAAWYounrzAAFR6nzLAAFWCwABUhwbAAFTXgOXAAFmnwABZuMAAWjoAAMAAQKkBasAAWahgA8AA/2gCAAABA8AAWc3AAFo6AAAAAwMDwABZ1AAAAIKYYAOfIgDAAFnhAAAAwABAqmADnyIAwABZ9gAAAIC9YAOfIgAAXAE+Aj0cwABaAi6hTwEAASfAAECpAMAAVOk9HMAAWisuoSwBAAGAwABaMMApBMkAwABbfwbAAFTYgOXAAFo/wABaUMAAWtgAAMAAQKsBasAAWkBgA8AA/2gCAAABA8AAWmPAAFrYAAAAAgICwABaagAAAJ/DYAOfIgDAAFp8AAAAnXBgA58iAABcAT4CPRzAAFqMLqFPAQABJ8AAQKsAwABU6T0cwABasy6huAEAARbAAFrJgMAAWr7AKQVih3GfKwDAAFuKBsAAVNmA5cAAWt3AAFruwABbaQAAwABArAFqwABa3mADwAD/aAIAAAEDwABbA8AAW2kAAAACAgLAAFsKAAAAwABArWADnyIAwABbHgAAAIC9YAOfIgAAXAE+Aj0cwABbKi6hTwEAASfAAECsAMAAVOk9HMAAW1MuoSwBAAGAwABbWMApBfQAwABbfwbAAFTagOXAAFtuwABbf8AAXAsAAMAAQK4BasAAW29gA8AA/2gCAAABA8AAW5LAAFwLAAAAAgICwABbmQAAAMAAQK1gA58iAMAAW60AAACdcGADnyIAAFwBPgI9HMAAW70uoU8BAAEnwABArgDAAFTpPRzAAFvkLqG4AQABFsAAW/yAwABb78ApBn+HcZ8rAMAAW4oGwABU24DlwABcEMAAXCHAAF1IAADAAECvAWrAAFwRYAPAAP9oAgAAAQPAAFw6wABdSAAAAAICAsAAXEEAAADAAECwYAOfIgDAAFxZAAAAol9gA58iAABcAT4EPRzAAFxqLqFPAQABJ8AAQK8AwABU6U7AAFyewABcowAAgL1gA8ABAAIBNQAAAAEAYAPAAQACATUAAAABAGADnyIBgcAAXKXAKQcjIxzAAFywggDAKQduSAEAASsAACsWwABcsIIAwCkHboJinzwBYAPAAQACIxzAAFy3ggDAKQdhSAEAASsAACTAAF0YAifAAECxNQAAAAEAYAPAAP4bARbAAFz9LsAAQDjAAFSGNQAAAAEAYAPAAP4bARfAAFz9LsAAQDgcwABdFIMAwCkHymQBAAGUAMAA/0HAAFSGgwDAKQfKggDAKQdhAWADwAEAAj0cwABdHi6hLAEAAYLAAF0jwCkHTQDAAFt/PRzAAF0uLqEsAQABgMAAXTPAKQcTAMAAW38GwABU3IDlwABdTcAAXV7AAF4SAADAAECyAWrAAF1OYAPAAP9oAgAAAQPAAF11wABeEgAAAAMDA8AAXYMAAADAAECwYAOfIgDAAF2bAAAAoxRgA58iAMAAXawAAACdcGADnyIAAFwBPgI9HMAAXbwuoU8BAAEnwABAsgDAAFTpPRzAAF3nLqG4AQABFsAAXgOAwABd8sApCJOHcZ8rAMAAW4oGwABU3YDlwABeF8AAXijAAF8bAADAAECzAWrAAF4YYAPAAP9oAgAAAQPAAF4vwABfGwAAAAMDA8AAXjYAAADAAEC0YAOfIgDAAF5JAAAAoqNgA58iAMAAXlgAAACA7mADwAD+GwAAXAE+BT0cwABeZS6hTwEAASfAAEC1AMAAVOk9HMAAXp9qwABeg10DwABbwQFgA8AA/2jAAMNSoS8CAAIWwABeoy6hO8AAW3UcwABesILAAF6qwCkJU4ONAQABlQDAAP9DAMAAW8M9HMAAXrouoS8AAAAAwABbgj0cwABezi6hLwAAAADAAFuCPRzAAF71LqG4AQABFsAAXwyAwABfAMApCTWHcZ8rAMAAW4oGwABU3oDlwABfIMAAXzHAAGA9AADAAEC2AWrAAF8hYAPAAP9oAgAAAQPAAF9JwABgPQAAAAUFBcAAX1AAAACfw2ADnyIAwABfYgAAAMAAQLdgA58iAMAAX3wAAACV+2ADnyIAwABfigAAAMAAQLhgA58iAMAAX6MAAACdcGADnyIAAFwBPgQ9HMAAX7MuoU8BAAEnwABAuQDAAFTpPRzAAF/dLqEvAAAAAMAAW4I9HMAAX/EuoS8AAAAAwABbgj0cwABgGC6huAEAARbAAGAugMAAYCPAKQpGh3GfKwDAAFuKBsAAVN+A5cAAYELAAGBOwABghgAAwABAugAAAAEDwABgXMAAYIYAAAABAQHAAGBrAAAAqh1gA8AAW3MAAGADhN0BSsAAYHgBJsAAYHgBHMAAYIGAwABgeMApCxyhLwAAAADAAFuCYAOE3QbAAFTggOXAAGFdwABhYsAAYk0AAMAAQLsAAAABA8AAYXjAAGJNAAAABgYGwABhjgAAAKodYAPAAFtzAMAAYaQAAACSqWADnyIAwABhvAAAAIJrYAPAAFsKAMAAYdAAAAChd1sAwABh6wAAAKGKYAOE3QDAAGIIAAAAgm1bAABcAT4BPRzAAGIdgMAAYhTAKQuGoYkDAAODwABiLMApC7SEwABiNcApC7+FwABiRMApC80AwABbegbAAFThgOXAAGMiwABjJ8AAY64AAMAAQLwAAAABA8AAYzvAAGOuAAAABAQEwABjSgAAAKodYAPAAFtzAMAAY1oAAACgWWADnyIAwABjcgAAAIb3YAOfIgDAAGOBAAAAh59gA8AA/FUAAFwBPgE9HMAAY5yAwABjk8ApDD2haQAAAADAAFt7BsAAVOKA5cAAY7PAAGO4wABoSwAAwABAYQAAAAEDwABjycAAaEsAAAAEBATAAGPYAAAAqh1gA8AAW3MAwABj6AAAAKBZYAOfIgDAAGQAAAAAhvdgA58iAMAAZBUAAACCa2ADwABbCgAAXAE+Ak7AAGQnwABkLQAAkqlgA58iAYHAAGQvwCkM00s+Dk7AAGRSwABkWQAAoa9gA8AAWaMBH8AAZF/AAFqOAQABgMAAZGbAKQzDAEnAAGR3IRzAAGSEgsAAZHvAKQzhSAEAASsAwAD/dT4CPRzAAGSehcAAZJfAKQ0jwABAoAEAARzAAGS3hcAAZLDAKQ0jobUBAAGCwABkzsApDOEAwABagwDAAFnOPRzAAGTrgMAAZOLAKQzDoS8AAAAAwABbgj89jMAAZRDAKQ0FHMAAZR+FwABlGMApDSPAAEChAgACHMAAZUqFwABlQ8ApDSOhtQEAAYTAAGVhwCkNBQDAAFqDg8AAZWnAKQzvAMAAWdVOwABlfcAAZYUAAKF3YAPAAP9oARzAAGWQgMAAZYfAKQzDoS8AAAAAwABbgj0cwABlpoDAAGWdwCkMw6G4AQABFsAAZbwWwABlt4TAAGWxwCkNBYO1nz2HcZ8rAMAAW4o9jMAAZc/AKQ0FHMAAZd6FwABl18ApDSPAAEC9AQABhMAAZfPAKQ0FAMAAWf09jMAAZgHAKQ0FHMAAZhCFwABmCcApDSPAAEC+AQABhMAAZibAKQ0FAMAAWiBOwABmQMAAZk4AAKGKYAOE3QE1AAAAAQBgA4TdARzAAGZQLsAAQLoBAAGAwABmX8ApDMMAwABU3yMcwABmaYcAwCkO3UgBAAErAABqwABmeGADhN2FeIcAwCkO3QFgA4TdTsAAZonAAGaWAACi4GADwAD8VQEqTsAAZqrAAGa4AADAAEAtYAPAAPxVARzAAGbIh8AAZrrAKQ7LSAEAAWrAAGbXYAOE3YV4AMAA/3U9HMAAZuqFwABm48ApDSPAAEAsAwADhMAAZvzAKQ0FFMAAZwPAKQ8sCAAUwABnEcApD0EJAADAAFodTsAAZy7AAGczAACCbWADwAD/aAEcwABnPoDAAGc1wCkMw6EvAAAAAMAAW4I9HMAAZ1SAwABnS8ApDMOhuAEAARbAAGdlhMAAZ1/AKQ0Fh3GfKwDAAFuKPRzAAGd4LsAAQLsGAAaAwABnmsApDMOBwABnpMApDNODwABnsMApDO+GwABntsApDhGHwABnv8ApDssUwABnzsApD7MKAADAAFTgAQLAAGfbYAOdjwAAPgE9L8AAZ/HAAGgAWwHAAGgHAAABg1NbAAHAAGgKAAABiHtgA8AA/9YAPgE9MMAAaBUfwABoH6AoBAAEFsAAaCUugKzAAFSIFsAAaDCEwABoKsApDQWHcZ8rhcAAaDzAKRBuhsAAaD/AKRB6AAbAAFTjgOXAAGhQwABoVcAAamYAAMAAQKIAAAABA8AAaGDAAGpmAAAABAQEwABobwAAAKodYAPAAFtzAMAAaH8AAACgWWADnyIAwABokQAAAIb3YAOfIgDAAGimAAAAh59gA8AA/FUAAFwBPgVOwABovsAAaMQAAJKpYAOfIgGBwABoxsApEQlOwABo3cAAaOQAAKGvYAPAAFmjAR/AAGjqwABajgEAAYDAAGjxwCkQ+QBJwABpAIPAAGkEwCkRJT4BPYzAAGkYwCkROxzAAGknhcAAaSDAKRFWwABAvwEAATUAAAABAGADnyIBgsAAaTvAKREXIxzAAGlEhgDAKRGvSAEAASsAAITAAGlHwCkRO4YAwCkRrwFgA58iAMAAWfY+AT2MwABprsApETsWwABp5xzAAGm9hcAAabbAKRFWwABAwAIAAjUAAAABAGADnyIBgsAAac7AKREXIxzAAGnXhgDAKRIVSAEAASsAAITAAGnawCkRO4YAwCkSFQFgA58iKwDAAFoPg7WfPT0cwABp9y7AAEC8BAAEgMAAagzAKRD5gcAAahbAKREJgsAAaiLAKREXg8AAaizAKRElAMAAVOE9HMAAakaAwABqPcApEPmhuAEAARbAAGpXhMAAalHAKRE7h3GfKwDAAFuKBsAAVOSA5cAAamvAAGpzwABt9AAAwABAVwAAAAEDwABqgMAAbfQAAAADAwPAAGqHAAAAkqlgA58iAMAAapQAAADAAEBdYAOfIgDAAGqlAAAAgL1gA8ABAAIAAGADwABWsgE+BU7AAGr1AAAAnwtgA8AAVrIAScAAawYhHMAAax0WwABrCi6qIcAAVIpIAQABKwDAAP91PgJJwABrLiEcwABrNhbAAGsyLoCswABUiEgBAAEWwABrTBbAAGs5LqohwABUioRmr6MAwAEAqj4BPR7AAGtfnYwEAAQkwABrcAEWwABrbC6ArMAAVIgkwABrkQEWwABriBbAAGt1LqohwABUioRmr6MWwABrshbAAGufLqohwABUiodxr6IWwABr0RbAAGu+LqohwABUioRmr6MAP0nAAGvqIiEcwABr94HAAGvuwCkS9UgBAAErAMAA/3UAHsAAbALAAFsoAgACJ5d5gcAAbBLAKRL1AD4BPYvAAGwnwCkTIBzAAGxVFsAAbE4WwABsSBbAAGw1LqohwABUip8yr5ObZqkWSwEAAYLAAGxWwCkTBQDAAP8FPgE9i8AAbHTAKRMgHMAAbKAWwABsmxbAAGyVFsAAbIIuqiHAAFSKnzKvk58zqRVLAQABgsAAbKHAKRMFAMAA/wVJwABsuyIhHMAAbMiBwABsv8ApEvVIAQABKwDAAP91AB7AAGzTwABbKAIAAieXeYHAAGzjwCkS9QA+AT2LwABs9sApEyAcwABtIBbAAG0ZFsAAbRMWwABtBC6evMAAVHqfMsAAVYKbZqkWSwEAAYLAAG0hwCkTBQDAAP8FPgE9i8AAbTvAKRMgHMAAbWQWwABtWBbAAG1JLp68wABUeqLRwABVhEsBAAGCwABtZcApEwUAqVA9i8AAbXbAKRMgHMAAbYQuwABAwQIAAoPAAG2ZwCkTIIDAAG2mwCkS5wDAAFTmPRzAAG2yLsAAQMIDAAOAwABtv8ApEueDwABtxsApEyCCwABt08ApEwUAwABU50rAAG3eAYPAAG3lwCkTIAbAAFTlgOXAAG35wABuAcAAcAAAAKG9AAAAAQPAAG4SwABwAAAAAAICAsAAbhkAAACSqWADnyIAwABuJwAAAKn1YAPAAP9oAABgA8AAVrIBPghAIRzAAG5SFsAAbkUuhPDAAFSLSAEAASsAwAD/dcAAbkXAAG5ZAE7AAG5oAAAAnwtgA8AAVrIATsAAboAAAACgJ2ADwAEAAgBJwABujCXAAG6ggcAAbpDAKRYAYAPAAFaCPgE9i8AAbrrAKRZSFsAAbtMUwABuw8ApFgABAWADwABWgoC9wABWXz4BPYvAAG7swCkWUibAAG7sASMcwABvBYHAAG71wCkWAEgBAAEWwABvFRbAAG8ILoTwwABUi4C9wABYNwDAAP91JwCBwABvIcApFgABYAPAAP9oYAPAAQACPYrAAG88wCkWQRzAAG9pFsAAb2QWwABvVxbAAG9KLoTwwABUi4TkwABTF58zqRVLAQABg8AAb2rAKRZSAMAA/wU9isAAb3fAKRZBHMAAb4UuwABAwQIAAoLAAG+awCkWQYDAAG+nwCkV8gDAAFTmPRzAAG+zLsAAQMIDAAOAwABvwMApFfKCwABvx8ApFkGBwABv1MApFgAAwABU50rAAG/qAYLAAG/xwCkWQQbAAFTmgOXAAHAFwABwDcAAdF8AAMAAQMEAAAABA8AAcCHAAHRfAAAAAgICwABwKgAAAJ8LYAPAAFayAMAAcD0AAACSqWADnyIAAGADwABWsgE+Ak7AAHBOwABwVQAAg2JgA8AA/hsBFsAAcF2BwABwV8ApF+SHcZ8rScAAcG0cwABwgzUAAAABAGADwABWsgGAwABwccApF9QjHMAAcH6DAMApGC1IAQABKwAAKxbAAHB+gwDAKRgtg7XAAFa0AWADwABWskgBAAErAMAA/3U+AUrAAHCUAYDAAHCbwCkX1D4ETsAAcMMAAADAAEDDYAPAAFayAE7AAHDhwABw7QAAwABAxGADwAD+GwEcwABw75SBxgAAAADAAP4+RMAAcPk+AknAAHFCHMAAcUoWwABxRi6ArMAAVIhIAQABFsAAcVmAwABxTcApF9SEZsAAVrcAwAEAqj4CTsAAcuXAAHLuAADAAEDFYAPAAP4bARzAAHMHFsAAcvyAwABy8MApF9SHccAAVriBjQEAAYLAAHMJwCkX/QDAAP9CScAAcxscwABzKIXAAHMfwCkZAYFtAQABkwDAAP9MPgFJwABzPCIcwABzTITAAHNAwCkYn0gBAAEcwABzT5SBxgAAAADAAP4+AMAA/z8BHMAAc16FwABzVcApGQFjAQABhMAAc2DAKRifAMAA/0k+Aj2MwABzfcApGJ+FwABzi8ApGQE9i8AAc6PAKRiMgMAAc7jAKRfUPz8/PYjAAHPxwCkX1BbAAHQLgMAAc//AKRfUg7XAAFa0IRzAAHQsgMAAdCDAKRfUSAEAASsAwAD/dUrAAHQ8AYPAAHRDwCkYjAbAAFTngOXAAHRkwAB0acAAddUAAMAAQMIAAAABA8AAdHXAAHXVAAAAAwMDwAB0fAAAAJKpYAOfIgDAAHSLAAAAnwtgA8AAVrIAwAB0nwAAAIC9YAPAAP9oAABcAT4CScAAdKscwAB0u4HAAHSvwCkaW0gBAAErAMAA/3U+AT0ewAB0zJ2JAwADHMAAdPxqwAB03F0DkdEBYQMBYAPAAQACYAORusAAVdKIPQEAASTAAHURAYLAAHUMwCkaawCR1RbAAHUkgMAAdR7AKRpNh3GfKxbAAHUwLoCswABUiAA/ScAAdUAhHMAAdUgWwAB1RC6ArMAAVIhIAQABFsAAdVeBwAB1S8ApGluEZsAAVrcAwAEAqj4BPR7AAHVonYwEAAQkwAB1eQEWwAB1dS6ArMAAVIgkwAB1kwEWwAB1ioHAAHV+wCkaW4RmwABWtxbAAHWhgcAAdZXAKRpbh3HAAFa4FsAAdcOBwAB1t8ApGluEZsAAVrcAPwbAAFTogOXAAHXawAB168AAdtgAAJ7bAWrAAHXbYAPAAP9oAgAAAQPAAHX1wAB22AAAAAUDA8AAdf4AAAAiYAORugDAAHYLAAAAh3FgA8AA/hsAwAB2GwAAAGFgA8AA/hsAAsAAdi8AAACfk2ADwAD8VQFqwAB2O2ADwAD8VQDAAHZXAAAAglddA8AA/r8BYAOR2AFqAGADwAD/JXlcAT4BPRzAAHZ2FsAAdmcunrzAAFR6ntsGAASAwAB2gcApG86BwAB2isApG9uCwAB2lsApG+sWwAB2ni6ArMAAVIgCn5ODwAB2t8ApG/uCV4TAAHbMwCkcF6n1BsAAVOmA5cAAdt3AAHbuwAB3NAAAoU8BasAAdt5gA8AA/2gCAAABA8AAdvjAAHc0AAAAAQEBwAB3AAAAAIC9YAPAAQACAABcAT4ABsAAVOqA5cAAd6rAAHe7wAB5VwAAobsAAAABA8AAd8jAAHlXAAAAAwMDwAB34AAAAIQmYAOvnwDAAHfvAAAAhvdgA58iAMAAeAIAAACEV2ADglMAAF0DwAD+vwFgA4TsAT4CScAAeBAhHMAAeB2BwAB4FMApHRNIAQABKwDAAP91PgROwAB4PMAAeEUAAKodYAPAAFtzARzAAHhHLqokAwACgMAAeFbAKR0FFsAAeF8uhxfAAFSHAaEHKsAAVM1OwAB4qMAAeK8AAKGvYAPAAFmjAR/AAHi1wABajgEAAYPAAHi8wCkdXwA9HMAAeNSEwAB4zcApHZvAAECgAQABHMAAeO2EwAB45sApHZuhtQEAAYHAAHkEwCkdEwDAAFqDAMAAWc5KwAB5FgEcwAB5JoPAAHkdwCkdX6GsAQABgsAAeTXAKR0hAMAAW3w/SsAAeUgBKwbAAFTrgOXAAHobwAB6IcAAe0QAAMAAQFkAAAABA8AAei/AAHtEAAAAAwMDwAB6NgAAAGpgA58iAMAAekMAAACCkGADnyIAwAB6TAAAAINiYAPAAP4bAABgA58iAT4DScAAeloiHMAAemWCwAB6XsApHnZjAQABFsAAem2AwAB6Z8ApHluHcZ8rAMAA/0kBHMAAeoKCwAB6e8ApHnaBbQEAARbAAHqJgcAAeoXAKR5oh3GfKwDAAP9MPgFKwAB6nQErP0PAAHq0IRzAAHrBgMAAervAKR5bSAEAAYHAAHrEwCkeaADAAP91PgJJwAB60RzAAHrcgsAAetXAKR52SAEAARbAAHrlgMAAet/AKR5bh3GfKwDAAP8/PgFKwAB6+wGAwAB7AsApHls/PYjAAHsXwCkeWxbAAHslgMAAex/AKR5bg7WfPUrAAHs1ASsGwABU7IDlwAB8jcAAfJnAAH55AADAAEDGAAAAAQPAAHypwAB+eQAAAAMDA8AAfLAAAABqYAOfIgDAAHy9AAAAgpBgA58iAMAAfMwAAACYcF0DwAD+vwFgA8AA/hsAAF0DwAD+vwFgA58iAT4DTsAAfOfAAHzuAACBdl0DwAD+vwFgA58iAR7AAHz8wAD+xAMBYAOfIgIWwAB9F4LAAH0PwCkfxGHAAP7vKwGFdipFwAB9OwHAAH1EwAB9RgAAYmADwAD+GwGTASIhHMAAfVGAwAB9S8ApH6lIAQABgcAAfVTAKR+2AMAA/3UAHMAAfV2EwAB9W8ApIDFjAQABFsAAfWeCwAB9X8ApH8RhwAD+7wDAAP9JAD4CTsAAfXzAAH2DAACDYmADwAD+GwEcwAB9jILAAH2FwCkfxEsBAAGEwAB9jcApIDEAwAD+zknAAH2XHMAAfaKFwAB9m8ApIJZjAQABFsAAfaqAwAB9pMApH6mHcZ8rAMAA/0k+AT2MwAB9wsApIDEcwAB9wITAAH3CwCkgMWQBAAGUAMAA/0FJwAB90hzAAH3dhcAAfdbAKSCWSAEAARbAAH3mgMAAfeDAKR+ph3GfKwDAAP8/PgI9HMAAfgKDwAB9/MApH+uAvwIAAoTAAH4DwCkgMYDAAH4IwCkfqQDAAP7PPYjAAH4XwCkfqRbAAH4lgMAAfh/AKR+pg7WfPT4BPYjAAH5CwCkfqRbAAH5QgMAAfkrAKR+pg7WfPUrAAH5oAYPAAH5vwCkf6wbAAFTtgOXAAH5+wAB+j8AAfx4AAMAAQMcBasAAfn9gA8AA/2gCAAABA8AAfp3AAH8eAAAAAgICwAB+rAAAAIKXXQORrwFbAMAAfrgAAACSqWADnyIAAGADwAD8VQE+AUrAAH7FASIewAB+zMAAi2UCAAKAwAB+4cApIfeBwAB+58ApIgcAAR3AAH7/wABAxwIAAoDAAH8OwCkh94HAAH8UwCkiBwDAAFupAAAoy+MAKMwdACjM3AAozRgAKM5XACjPAQAoz6sAKNALACjQXAAo0K0AKND+ACjRUQAo0bwAKNIPACjSYgAo0rUAKNL6ACjTYQAo064AKNQHACjUVAAo1KEAKNXOACjWhgAo1vEAKNwmACjc3QAo3TYAKN7KACjfGwAo39IAKOAfACjgYAAo4McAKOJ/ACji/AAo40kAKOOWACjj8QAo5EwAKOSZACjk6AAo5WEAKOXMACjmHwAo5psAKOcMACjndwAo58oAKOgdACjocAAo6PYAKOr+ACjrVwAo7JMAKO4GACjuZQAo7ssAKO8kACjvngAo8aAAKPINACjyagAo8scAKPNqACj2YgAo+L0AKPpLACj7uQAo/hIAKQAjACkAlQApAQUAKQGcACkDvgApBJEAKQUqACkFvAApBkcAKQbbACkIWwApCP0AKQoOACkK8AApC1oAKQwRACkMlwApEM0AKRK7ACkVyAApF6gAKRohACkbmAApHJAAKRzbACkeLwApH30AKSG/ACkiaQAAAGIAAAABgOUAKSP9ACjJUwApI/oAAAABACkj/QAAAAAAAgbAAFTwwABAyIDmAAACgPYAAJ45AAEBAYIWgSUAALBMAAEBA6oGrYyg5QAAAAECwABU8YDmgZeBnYJwA6oIAAABYAHAAFRrAAAAAQXAAFT1gOaBxoHGgfUAAAADgdCB9QAAAAEBAYHaAAAAqh1gA8AAWHMAAGADwABU8QE/AQkAgebAAFR2AQABgIHswCkkgAABBsAAVPOA5oH6ggCCbgAAwABAyQAAAAEDghmCbgAAAAICAoIgAAAAkqlgA58iAIIyAAAAgmtgA8AAWwoAAGADnyIBPgFKgj4BHIJFLsAAQMoCAAKAgl7AKSTOgYJlwCkk2gDAAFnXAAApJKwAKSUSAAAAAQAAAAGA5gApJSIAKSRIACklHwAAAAEAKSUiAAAAAAACBsAAVPbAAEDLgOcAABCA+gAAgi4AAQEBhVeBMAAAr48AAIFTAAC2kwABAQGEvIGBAADAAFPYAAEBAajvgbUAAIx7AAEBFofTgimIBIoOiqSKqYq+ismL0I5WkCKRSpINiOiK9Iswi46LkpAMkBKQFpAbhPoAAMAAi2MAAQEBwABAMoWKAAComQABAQSo1aj2nsqezYYkAACv+AABARCtZK1lrWatZ6DXrWitaaiooNig2aipoNqg26j/rXCoqod9AACSqAABAQSFEoIqlguWDIgQAACwTAABAQig4a2OoOOg5KDnoOWg6KDpiOcAAJ2HAAEBAZ0PiRIAALBWAAEBAaDviT8AAJIwAAEBAYIWiWUAAKmhAAEBBKnkqdep+57EiggAAMAAWz0AAQEEoPGg9KD1ra2KbAAAsKwAAAAAAAICwABU94DnioiKjYrLC63VAAABYAHAAP9oAAAGBMAAVPmA54qNio0JJwBgA8AA/hsABMAAVPuA54qNio0JKMAAVPYAYAPAAQACAATAAFT8gOeKjYqNBikAXQPAAP6/AWADwABU9wFqAF0DwAD+vwFgA8AAVPfAAQkRBMAAVP2A54qcipwGrWMAYAPAAFT3AWoAYAPAAFT3wAEIywTAAFT+gOeKqIqoBsAAQM8AYAPAAFT3AWoAYAPAAFT3wAEI5ATAAFT/gOeKs4qzBpWmAGADwABU9wFqAGADwABU98ABCP0BBcAAVQOA54qNio2KywEAAAOKjYrLAAAAAgICio0AAAQnYAPAAP4bAIqNAAAEKGADwAEAAgAAYAPAAFT3AT8DCADAAFT5gADAKSd8CADAAFT7gQDAKSeJCQAAwAD/fgAAAAABBsAAVQGA54qNio2KywAAIwAAAAEDio2KywAAAAAAAABgA8ABAAIBSgABDwAuwABU+wAAKSfEACkn9QAAAAECwABVBIDnis6K1MAA6nYDqgkAAAFgAcAAW3MAAAgEwABVBoDnixiLHwmESABgA6mlAATAAFUHgOeLL4s7CYeTAGADwAD8VQAEwABVCIDni0qLYwmhCQBgA8AA/FUABMAAVQmA54tsi4EYoSgAYAPAAPxVASoEwABVCoDni4qLoxjAAEDQAGADwAD8VQEqBMAAVQuA54uri7oYqTIAYAPAAP4bAZMEwABVDIDni8aL1hipjwBgA8ABAAIBKwTAAFUNgOeMHYw4GMAAQDgAYAPAAP4bAZMBBcAAVX6A54w9jD2NVwAAAAOMS41XAAAAAQEBjGEAAACESGADqaUAAGADwABVBAE/BAgAwABVBoCMfMApKPMIAMAAVQccjMwWjL4WjLcWjLCAjKjAKSjzlXOpqIJJqpaet6iih5MBAAEWjOGAjNnAKSjzgKyp0QCLSAgAwABVCBaNOxaNLRaNJhaNH4CNF8ApKPOVc6mogkmqlp63qKKHlIs+CQGMPcAAW68AAAAAbQbAAFUPgOeNXI1wjYYBAICsAWqNXWADwAD/aAIAAAEDjXSNhgAAAAAAAABgA8ABAIMBSo13ARaNfxaNdy6ESMAAVQaEZqmwBsAAVRGA542LjY+NpwAAwABA0QAAAAEDjZyNpwAAAAAAAABgA8AA/hsBSo2iASaNogEcjaIuoS8AAAAAwABbgmADwAD+GwbAAFUSgOeNrI25j2MAAMAAQNIAAAABA43Kj2MAAAABAQGNzwAAAIDuYAPAAP4bAABdA8AA/r8BYAPAAQACAT4FSY3cHI3mgI3gwCkqNkgBAAGTAMAA/z9KjewBKz9OjgqODwAAg2FdA8AA/r8BYAPAAQACAR6OFcAA+BYBAWADwAEAAgGAjiLAKSo2AE6OM45EAADAAEDTYAPAAPxVASpFjlEBjlqOXAAAYmADwAD+GwEcjmSAjl7AKSo2gY0BAAGUAMAA/0IBHI5rg45pwCkquIFtAQABkwDAAP9MAYuOccApKrgcjnKDjnHAKSq4gY0BAAGUAMAA/0I+Az0cjn4uwABA0QAAAADAAFURTo6cjqcAAJ33YAPAAP9oARyOqS6hLwAAAADAAFuCSY62JY7FhI66wCkrImADwABbzD4BPYqO4sApKqIpPgE9HI8WgY8SwCkqc4C/AgACg48XwCkquCaPFgGEjxzAKSsiYAPAAQACAMAA/s9KjzoBI4KPQcApKqIrgY9bwCkqcwFdA8AA/r8BYAPAAQACBsAAVROA549oj3mRJAAAoVEBao9pYAPAAP9oAgAAAQOPhJEkAAAAAwMDj4sAAACfw2ADnyIAj50AAAChUmADnyIAj7UAAACdcGADnyIAAFwBPgc9HI/FLqFPAQABJ6FTAMAAVXw9HI/hLqEvAAAAAMAAW4JJj/khHJAOgY/9wCkr5EgBAAErAMAA/3U+Aj0ckB8uoS8AAAAAwABbgj0ckDYuoS8AAAAAwABbgj89HJBbLqEvAAAAAMAAW4I9HJB4LqEvAAAAAMAAW4JOkJSQnQAAwABA1GADwAD/aAEckJ8uoS8AAAAAwABbgj0ckMMuoSwBAAEjJZDRg5DIwCksemADwABbzBSQ7cApLHoDAWADwABbzB+RBMAAV9cBAAGAkRTAKSvYAAFgA8AA/2gAwABbfwbAAFUUgOeRKZE6kd8AAKFdAWqRKmADwAD/aAIAAAEDkUmR3wAAAAEBAZFOAAAAgO5gA8AA/hsAAFwBPgI9HJFbLqFPAQABJ6FeAMAAVXw9HJF7LqEsAQABNQAAAAEAXQPAAP6/AWADwABXzwEckatqkYZdA8AAW8EBYAPAAFfPwAEJJaEvAgACFpGvLqE7wABbdYCRtsApLQsAwABbwyMckb2BAMApLTtIAQABKwAAapHSYAPAAFs+wADDCIEAwCktOwFgA8AA/2gAwABbfwbAAFUVgOeR5JH1knQAAMAAQD4BapHlYAPAAP9oAgAAAQOSFZJ0AAAAAQEBkhwAAACdcGADnyIAAFwBPgI9HJIsLqFPAQABJ8AAQD8AwABVfD0cklouoS8AAAAAwABbggbAAFUWgOeSeZKKk3UAAMAAQHkBapJ6YAPAAP9oAgAAAQOSkZN1AAAAAQEBkpgAAADAAEB6YAOfIgAAXAE+Az0ckqsuoU8BAAEnwABAewDAAFV8TpLKktAAAIS+YAPAAP9oARyS0i6hLwAAAADAAFuCSZLdJZLngZLhwCkuZGADwABbzD4BPRyTAi6hLAEAARSTB8ApLmQBAWADwABbzADAAFt/PgE9HJMiLqEsAQABH5Mrtp0DAAMmkzsBgZM7wCkuZF0DwAD+fQFgA8ABAAIWk06Ak0LAKS48h3GfKxaTYhaTWi6ESMAAVQaEZqmwAADAAFt/BsAAVReA55N6k4uUdgAAwABAdgFqk3tgA8AA/2gCAAABA5OSlHYAAAABAQGTmQAAAMAAQHdgA58iAABcAT4DPRyTrC6hTwEAASfAAEB4AMAAVXxOk8uT0QAAhL5gA8AA/2gBHJPTLqEvAAAAAMAAW4JJk94lk+iBk+LAKS9ZYAPAAFvMPgE9HJQDLqEsAQABFJQIwCkvWQEBYAPAAFvMAMAAW38+AT0clCMuoSwBAAEflCy2nAMAAyaUPAGBlDzAKS9ZXQPAAP59AWADwAEAAhaUT4CUQ8ApLzGHcZ8rFpRjFpRbLoRIwABVBoRmqbAAAMAAW38GwABVGIDnlHuUjJUtAADAAEB8AWqUfGADwAD/aAIAAAEDlJqVLQAAAAEBAZSfAAAAgO5gA8AA/hsAAFwBPgI9HJSsLqFPAQABJ8AAQH0AwABVfD0clMsuoSwBAAE1AAAAAQBdA8AA/r8BYAO2lAEclPZqlNZdA8AAW8EBYAO2lMABCTKhLwIAAhaU+i6hO8AAW3WAlQHAKTAmAMAAW8MjHJUIgQDAKTBYSAEAASsAAGqVHWADwABbPsABCUKBAMApMFgBYAPAAP9oAMAAW38GwABVGYDnlTKVQ5buAADAAECJAWqVM2ADwAD/aAIAAAEDlUyW7gAAAAICApVTAAAAwABAimADnyIAlWgAAACiPGADnyIAAFwBPgg9HJV5LqFPAQABJ6jwAMAAVXxOlaSVsAAAhKpdA8AA/r8BYAO2lAEmlaQBHJWyLqEvAAAAAMAAW4JdA8AA/r8BYAO2lE6V0ZXgAACpLF0DwAD+vwFgA8AAU9kBJpXRARyV4i6hLwAAAADAAFuCXQPAAP6/AWADwABT2U6V8ZX7AACpKGADwAD+GwEclf0uwABA0QAAAADAAFURTpYZlh0AAICsYAPAAQACASaWGQEclh8uoS8AAAAAwABbgmADwAEAAk6WQJZJAACG910DwAD+vwFgA8AAV88BJpZAARyWSy6hLwAAAADAAFuCXQPAAP6/AWADwABXzz0cll4WllYuhEjAAFUGqSsGAAaGlmjAKTHXhZZywCkxr4OWd8ApMVmClofAKTEnFpaqgJacwCkw9YdxnyuElrbAKTGPAKnbPRyWxi6huAEAARaW34CW0cApMPWHcZ8rAMAAW4oGwABVGoDnlvOXBJhjAADAAEB+AWqW9GADwAD/aAIAAAEDlxaYYwAAAAICApcdAAAAwABAf2ADnyIAlzQAAADAAECAYAOfIgAAXAE+Az0cl0UuoU8BAAEnwABAgQDAAFV8SZdlHJdzgZdpwCkyqkgBAAErAMAA/3U+Aj0cmBAuoSwBAAFqmB9gA8AAWz7AAQhTAMAAW389HJguLqEsAQABHJgzlIHGAAAAAMAA/j4AwABbfz89HJhCLqEsAQABIRyYV4CYR8ApMpxIAQABKwDAAP91AMAAW38GwABVG4DnmGiYeZtnAADAAECEAWqYaWADwAD/aAIAAAEDmIKbZwAAAAICApiJAAAAwABAhWADnyIAmJ4AAACiPGADnyIAAFwBPgw9HJivLqFPAQABJ8AAQNYAwABVfE6Y3ZjpAACEql0DwAD+vwFgA7aUASaY3QEcmOsuoS8AAAAAwABbgl0DwAD+vwFgA7aUTpj7mQYAAIS2YAPAAPxVASaY+wEcmQguoS8AAAAAwABbgmADwAD8VU6ZF5kkAADAAEDXYAPAAP4bASaZFwEcmSYuoS8AAAAAwABbgmADwAD+G06ZOJk/AACDKWADwAD/aAEcmUEuoS8BAAFqmU9gA8AAWz7AAQhTAMAAW4JOmXCZfwAAqSxdA8AA/r8BYAPAAFPZASaZcAEcmYEuoS8AAAAAwABbgl0DwAD+vwFgA8AAU9lOmZCZmgAAqShgA8AA/hsBHJmcLsAAQNEAAAAAwABVEU6ZuJm8AACArGADwAEAAgEmmbgBHJm+LqEvAAAAAMAAW4JgA8ABAAJOmhWaHgAAhvddA8AA/r8BYAPAAFfPASaaFQEcmiAuoS8AAAAAwABbgl0DwAD+vwFgA8AAV889HJorLqG4AQABFppEgJo2wCkzdIdxnysAwABbikmaVSWaYIWaWcApNCxgA8AAW8xKmnMAPz0cmocWmn8uhEjAAFUGpJIKAAoUmprAKTTVCQAUmqzAKTStCACGmrnAKTRXJprRAYWa0cApNCxgA8ABAAKCmuHAKTOog5r2wCkz2habGICbCsApM3SHcZ8rhJsswCk0AoebQsApNI01AAAAAQBgA8AA/hsBFptVLqkywABVCzUAAAABAGADwAD+GwEXm1UuqTIcm2AUAMApNacKAGQBAAGUAMAA/0HAAFULFADAKTWnCgAAqd0GwABVHIDnm2ybfZwwAADAAEBtAWqbbWADwAD/aAIAAAEDm4+cMAAAAAEBAZuUAAAAgO5gA8AA/hsAAFwBPgI9HJuhLqFPAQABJ8AAQNgAwABVfD0cm8cuoSwBAAE1AAAAAQBdA8AA/r8BYAPAAFPZARyb9Wqb0l0DwABbwQFgA8AAU9nAAQlXoS8CAAIWm/kuoTvAAFt1gJwAwCk2IADAAFvDIxycB4EAwCk2UkgBAAErAABqnBxgA8AAWz7AAQlpgQDAKTZSAWADwAD/aADAAFt/BsAAVR2A55w1nEaeEQAAwABAagFqnDZgA8AA/2gCAAABA5xXnhEAAAADAwOcXgAAAK9xYAOfIgCcbwAAAKJ+YAOfIgCcgAAAAMAAQGtgA58iAABcAT4HPRyckS6hTwEAASfAAEDaAMAAVXxOnLqcxQAAh3FgA8AA/hsBHJzHLsAAQNEAAAAAwABVEU6c45znAACArGADwAEAAgEmnOMBHJzpLqEvAAAAAMAAW4JgA8ABAAJJnPQhHJ0Cgpz4wCk3C0gBAAErAMAA/3U9HJ0LLsAAQNEAAAAAwABVET9OnSedMQAAhdJgA8ABAAIBJp0nATUAAAABAGADwAD/aAEcnTMuoxkBAAGCnUDAKTcLAMAAW4MjHJ1LhQDAKTe5SAEAASsAACeXDoUAwCk3uQFgA8AA/2hgA8ABAAJOnWGdbAAAqS5gA8AA/2gBHJ1uLqEvAAAAAMAAW4JJnXklnYiGnX3AKTgCYAPAAFvMPgE9HJ2jLqEsAQABFJ2owCk4AgYBYAPAAFvMAMAAW38+AT0cncguoSwBAAEfndHAAFPgBAAEg53fwCk3Myad6wGGnevAKTgCYAPAAQAChZ33wCk3pYSeAsApN1MAAMAAW38GwABVHoDnnhaeJ580AADAAEBnAWqeF2ADwAD/aAIAAAEDnjefNAAAAAICAp48AAAAgO5gA8AA/hsAnkkAAADAAEBoYAOfIgAAXAE+Az0cnmAuoU8BAAEnwABAaQDAAFV8Tp6LnpEAAIS+XQPAAP6/AWADwAEAAgEcnpMuwABA0gEAAYCepcApOMAAwABVEkmesRyeu4KetcApOPZIAQABKwDAAP7pPgE9HJ7MLqEsAQABH57VwABb0gEAARae9IGe5MApOM6HcZ8rAADAAFt/PgE9HJ8VLqEsAQABHJ8ggp8awCk49lgBAAEngWoAwAD+kQDAAFt/BsAAVR+A5585n0qgPAAAwABAiAFqnzpgA8AA/2gCAAABA59doDwAAAABAQGfZAAAAKI8YAOfIgAAXAE+Bj0cn3UuoU8BAAEnwABA2wDAAFV8PRyfli6hLwAAAADAAFuCPRyfsC6hLwEAAWqfvmADwABbPsABCYMAwABbgj0cn+AuoS8AAAAAwABbgj0cn/suoS8BAAFqoAlgA8AAWz7AAQhTAMAAW4I9HKAgLqEvAAAAAMAAW4IGwABVIIDnoEGgUqFcAADAAECLAWqgQmADwAD/aAIAAAEDoFmhXAAAAAICAqBgAAAAwABAO2ADnyIAoHMAAACiPGADnyIAAFwBPgY9HKCELqFPAQABJ8AAQIwAwABVfE6goKCrAACHcWADwAD+GwEcoK0uwABA0QAAAADAAFURTqDJoM0AAICsYAPAAQACASagyQEcoM8uoS8AAAAAwABbgmADwAEAAk6g8KD5AACG910DwAD+vwFgA8AAV88BJqDwARyg+y6hLwAAAADAAFuCXQPAAP6/AWADwABXzz0coQ4WoQYuhEjAAFUGhKYDAAOEoRbAKTrpg6EgwCk6wYKhJcApOqEAqd49HKE2LqG4AQABFqFNgKFBwCk6bYdxnysAwABbigbAAFUhgOehYaFyohoAAMAAQG8BaqFiYAPAAP9oAgAAAQOhhKIaAAAAAgICoYsAAADAAEBwYAOfIgChogAAAJKpYAOfIgAAXAE+Az0coa8uoU8BAAEnwABAcQDAAFV8PRyhzy6hLAEAAR6h1JKqAQABFqHtgaHnwCk7oJ3Zn0EAAMAAW389HKIALqEsAQABFqILgaIFwCk7oIdxnysAwABbfwbAAFUigOeiH6IwosoAAMAAQHIBaqIgYAPAAP9oAgAAAQOiSaLKAAAAAgIColAAAADAAEBwYAOfIgCiZwAAAJKpYAOfIgAAXAE+Az0conQuoU8BAAEnwABAcwDAAFV8PRyimy6hLAEAASeqrgDAAFt/PRyisC6hLAEAARaiu4GitcApPEKHcZ8rAMAAW38GwABVI4Dnos+i4KViAACiAwFqotBgA8AA/2gCAAABA6LwpWIAAAACAgKi9wAAAJKpYAOfIgCjEAAAAIJXYAPAAFrAAABcAT4CSaMfHKMrgaMjwCk8zEgBAAFqo0BgA8AAjZbAAQmfAMAA/3U+Az0co14uoU8BAAEnogMAwABVfE6jmqOjAACG910DwAD+vwFgA8AAV88BJqOaARyjpS6hLwAAAADAAFuCXQPAAP6/AWADwABXz0mjshajvICjtsApPMCEk582PgE9HKPTLqEsAQABH6PcwABb0gEAARaj8YCj68ApPMCHcZ8rAADAAFt/PgE9HKQWLqEsAQABH6QfwABW+wQABIKkMMApPRcWpECApDrAKTzAgmKfPBakToCkSMApPMCHcZ8rHqRmwABVewEAAYCkfsApPMAAAADAAFt/PgI9HaSpogMCAAKApLrAKTzAgaTBwCk8zADAAFuHPRyk0S6hLAEAARak3ICk1sApPMCHcZ8rAMAAW39JpPMiFqT3LqEowABVCQAcpRCBpQjAKTzMSAEAAWqlJWADwACN38ABCdwAwAD/dT4BPRelQC7AAEDQKcAAVQo/BsAAVSSA56VnpXil0QAAwABA3wFqpWhgA8AA/2gCAAABA6WEpdEAAAABAQGliwAAAJKpYAOfIgAAXAE+Aj0dpZ7AAEDfAQABgKWrwCk+fwDAAFuIPRylty6hLAEAARalwoClvMApPn+HcZ8rAMAAW38GwABVJYDnpdal56ZYAACiJQFqpddgA8AA/2gCAAABA6X3plgAAAABAQGl/gAAAJKpYAOfIgAAXAE+AT0cpgsuoU8BAAEnoiYAwABVfAbAAFUmgOemXaZuqNIAAKInAWqmXmADwAD/aAIAAAEDpn6o0gAAAAICAqaDAAAAoihgA8AA/hsApp0AAACdcGADnyIAAFwBPgI9HKatLqFPAQABJ6InAMAAVXxJptEcpuiAptXAKT87SAEAAZMAwAD/Pz4DTqb8pwIAAJKpYAOfIgEmpvwBHKcELqEvAAAAAMAAW4JgA58iPRynES6hLAEAAR6nFrBeAwADFqcrgqclwCk/hoJinzyCpzPAKT+GLgAAwABbfz0cp0guoSwBAAEWp1OCp03AKT+Gh3GfKwDAAFt/PgZOp3mnhAAAn8NgA58iASaneQEcp4YuoS8AAAAAwABbgmADnyJOp5enogAAh3FgA8AA/hsBFqevgqekwCk/94dxnys9HKfBLqEsAQABJKgFA2qn3mADwAEAAsAA4GknwABA4IOn+cApQBsAwABbfz0cqA4uoSwBAAGDqBPAKUAbAMAAW39OqEioXAAAwABA4WADwAD+GwEcqGmDqF7AKUAbZAEAARaofRaodoKoa8ApP/eCYp88YcABAAYAwAD/QT0cqIsuntsDAANqqJZgA5HFwABZqYSoscApQHuUAMAAVXkGwABVJ4DnqNeo6KqHAACiLAFqqNhgA8AA/2gCAAABA6j6qocAAAACAgKpAQAAAKItYAOfIgCpEwAAAKIuYAPAAPxVAABcAT4CPRypIi6hTwEAASeiLwDAAFV8SalCgalGwClBDT4DPRypnS6hLwAAAADAAFuCTqnBqcYAAIC9YAPAAP9oARypyC6hLwAAAADAAFuCSanVJanegqnZwClBTmADwABbzD4BPRep+y6pjycAwABVDD4BPReqKS6pjyaqKQGCqjzAKUFOYAPAAQACwABVDD4BPReqaC6pjycAwABVDAbAAFUogOeqjKqdq90AAKIzAWqqjWADwAD/aAIAAAEDqrar3QAAAAEBAaq7AAAAojRgA8AA/hsAAFwBPgY9HKrPLqFPAQABJ6I1AMAAVXxOqwOrCAAAg2FdA8AA/r8BYAPAAQACAR6rDsAA+BYBAWADwAEAAgGAqxvAKUHkAE6rMqs9AACHcWADwAD+GwEcqz+UgcYAAAAAwAD+PkWrRwGrUKtSAABiYAPAAP4bARyrYYCrVMApQeSBjQEAAZQAwAD/QgEcq2iDq2bAKUJagW0BAAGTAMAA/0wBi6tuwClCWhyrb4OrbsApQlqBjQEAAZQAwAD/Qj4CPYqre8ApQjkmq3sBHKuILqEvAAAAAMAAW4JgA8AA/hs9HKuZgauVwClCCoC/AgACg6uawClCWiarmQEcq58uoS8AAAAAwABbgmADwAEAAgDAAP7PPRyrsC6hLAEAARyruoGrtcApQgpYAQABJwAAwAD+kQDAAFt/PRyryS6hLAEAAYKrzsApQjkAwABbfwbAAFUpgOer4qvzrKwAAMAAQHQBaqvjYAPAAP9oAgAAAQOsB6ysAAAAAQEBrAwAAACA7mADwAD+GwAAXAE+Aj0crBkuoU8BAAEnwABA4gDAAFV8PRysPi6hLAEAATUAAAABAF0DwAD+vwFgA8ABAAIBHKxDLsAAQNIBAAGArFXAKUNsAMAAVRIjHKxcgQDAKUOeSAEAASsAACMcrG6ArGjAKUNsSAEAAZMAwAD/P2qsf2ADwABbPsABChkfrJTAAFvSAQABHKyjlIHGAAAAAMAA/j4AAWADwAD/aIEAwClDngFgA8AA/2gAwABbfwbAAFUqgOessazCr80AAKIgAWqssmADwAD/aAIAAAEDrNGvzQAAAAEBAazYAAAAoVhgA58iAABcAT4IQBys7S6hywIAAoCs+MApRFcxrQBgA7CwBGqtJGADsLDAAOVZaq1IYAOwsMAA5nhqrYBgA7CwwADlWR6tmrCvAQABMa2yYAOwsANqrb1gA7CwwADFpGqtzWADsLDAAMPbaq3nYAOwsMAAxWsAAMAAW3is7a3+AD0crgUuoU8BAAEnoiAAwABVfE6uLK45AADAAEDkYAPAAP4bASauLAEcrjsuoS8AAAAAwABbgmADwAD+G06uTa5UAACgJ2ADwAD/aAEcrlYuoS8AAAAAwABbgk6uZa5sAACDYmADwAD+GwEmrmUBHK5uLqEvAAAAAMAAW4JgA8AA/htOroCuhwAAgylgA8AA/2gBHK6JLqEvAAAAAMAAW4JJrpQlrp+ErpjAKUVhYAPAAFvMPgE9HK66LqEsAQABFK6/wClFYQQBYAPAAFvMAMAAW39JrtMlrt6CrtfAKUUbYAPAAFvMPgE9HK75LqEsAQABFK7+wClFGwIBYAPAAFvMAMAAW38+A0AeryHAAPf8AgACgq8rwClFGxavPxavOoCvM8ApRFeDtZ89gmKfPACvIa9GAEAcr2OBr1bAKUTxSAEAARavchavbYCvZsApRFeDtZ89h3GfKwDAAP8/r1avfAA9HK+FLqEsAQABH6+OwABWiQIAAoSvnMApRWEWr6uAr6TAKURXg7WfPQAAwABbfz0cr70uoSwBAAGDr8LAKUU5AMAAW38GwABVK4Dnr9Kv47G0AADAAEBlAWqv02ADwAD/aAIAAAEDr/GxtAAAAAICAq/4AAAAwABAZmADnyIAsA4AAACiPGADnyIAAFwBPgg9HLAfLqFPAQABJ8AAQGUAwABVfD0csEEuwABA0QAAAADAAFURTrBdsHIAAKkKYAPAAQACAR6wdMAAVXsBAAGAsIzAKUayAE6wqLCtAACAvWADwAD/aAEcsK8uoS8AAAAAwABbgk6w0LDZAACG910DwAD+vwFgA8AAV88BJrDQARyw2y6hLwAAAADAAFuCXQPAAP6/AWADwABXzz0XsO4WsOYuhEjAAFUGqQqCsQXAKUb3qbRJsR8hJbEog7EjwClHGWADwABbzD4BPRexTBaxRC6ESMAAVQaAvR6xU8AAVlsDAAODsV/AKUcZHrFlwABbLAEAAYCxdMApRrIAFrGFLoCswABVDwCptT89F7GdFrGVLoRIwABVBob3hLGowClHN6m4BsAAVSyA57G5scqywQAAwABA5QFqsbpgA8AA/2gCAAABA7HyssEAAAABAQGx+QAAAJKpYAOfIgAAXAE+Aj0csgYuoU8BAAEnwABA5gDAAFV8PRyyQxayOy6ESMAAVQapHwIAAmqyemADqizAAOE1J8AAQOcAqdYGwABVLYDnssay17RgAADAAECpAWqyx2ADwAD/aAIAAAEDsuy0YAAAAAMDA7LzAAAAgphgA58iALMAAAAAwABAqmADnyIAsxUAAACAvWADnyIAAFwBPgU9HLMhLqFPAQABJ8AAQKkAwABVfE6zZLNyAACizV0DwAD+vwFgA8AAWEMBJrNkARyzdC6hLwAAAADAAFuCXQPAAP6/AWADwABYQz0cs38uoSwBAAE1AAAAAQBdA8AA/r8BYAPAAFhDAYOzhMApSNgjHLOShADAKUkYSAEAASsAAGqzn2ADwABbPsAAxd+EAMApSRgBYAPAAP9oAMAAW389HLPlFrO7FrOzLoRIwABVBqkMqbmp6gMAAxa0AYKz/MApSLKCYp88FrQOgrQJwClIsodxnyuDtBrAKUjYAKpTPRy0Li6hLAEAASMhHLRBgbQzwClIpEgBAAErAMAA/3VqtEtgA8AA/hsVkwFgA8AA/hsAwABbfwbAAFUugOe0ZbR2tb0AAMAAQKwBarRmYAPAAP9oAgAAAQO0i7W9AAAAAgICtJIAAADAAECtYAOfIgC0pgAAAIC9YAOfIgAAXAE+BD0ctLIuoU8BAAEnwABArADAAFV8TrT1tQMAAKLNXQPAAP6/AWADwABYQwEmtPUBHLUFLqEvAAAAAMAAW4JdA8AA/r8BYAPAAFhDPRy1EC6hLAEAATUAAAABAF0DwAD+vwFgA8AAWEMBgrUVwClKOSMctSODAMApSnlIAQABKwAAarUwYAPAAFs+wADF34MAwClKeQFgA8AA/2gAwABbfz0ctXYWtUwWtUQuhEjAAFUGqQypuantAwADFrWSgbWNwClKE4JinzwWtZ+BtZrAKUoTh3GfK4K1q8ApSjkAqlUGwABVL4DntcK107kAAADAAEClAWq1w2ADwAD/aAIAAAEDtei5AAAAAAICArX5AAAAgmtgA8AAWvsAtgUAAACSqWADnyIAAFwBPgNJthIcthuAthbAKUsvSAEAAWq2LmADwABa+8ABCjUAwAD/dT4DQBy2SC6hywIAAoG2U8ApSz0xtlpgA7CwAR62ZLCvAQABMbZxYAOwsAJqtnxgA7CwwADD22q2lmADsLDAAObOAADAAFt4tki2rABOtry2zgAAqfJgA8AA/2gBHLbQLp+9AAAAAMAAW4FJtt4ltvSCtuLAKUu+YAPAAFgdPgE9HLdEFrcWFrcOLoRIwABVBqkMqbmp7wEAARS3XsApS74CAWADwABYHQCqVz8/PRy3hC6hTwEAASfAAEClAMAAVXw9HLimFriFFrh9LoRIwABVBqkMqbme6QIAAha45Ra4xBa4vC6ESMAAVQapDKm5os2qYBa49C6ESMAAVQYAqlkGwABVMIDnuQW5Frq1AADAAEDpAWq5BmADwAD/aAIAAAEDuTC6tQAAAAMDA7k+AAAAgphgA58iALlLAAAAwABAqmADnyIAuWAAAACAvWADnyIAAFwBPgU9HLlsLqFPAQABJ8AAQOkAwABVfE65tLnCAACizV0DwAD+vwFgA8AAWEMBJrm0ARy5xC6hLwAAAADAAFuCXQPAAP6/AWADwABYQz0cuc8uoSwBAAE1AAAAAQBdA8AA/r8BYAPAAFhDAYO51MApTN0jHLnihADAKU0dSAEAASsAAGq572ADwABbPsAAxd+EAMApTR0BYAPAAP9oAMAAW389HLosFroLFroDLoRIwABVBqkMqbmp7AMAAxa6VoK6UcApTLeCYp88FrpjgrpewClMt4dxnyuDum/AKUzdAKpUPRy6gy6hLAEAASMhHLqWgbqIwClMqUgBAAErAMAA/3VquqBgA8AA/hsVkwFgA8AA/hsAwABbfwbAAFUxgOe6urrLu9AAAMAAQOoBarq7YAPAAP9oAgAAAQO657vQAAAAAgICuvUAAADAAEC4YAOfIgC7DAAAAMAAQOtgA8AA/hsAAFwBPgI9HLsjLqFPAQABJ8AAQOwAwABVfD0cu00uoSwBAAE1AAAAAQBdA8AA/r8BYAPAAFfyARy7i2q7WF0DwABbwQFgA8AAV/LAAQpJoS8CAAIWu48uoTvAAFt1gbuWwClOGADAAFvDIxy7p4IAwClOTEgBAAErAABqu7xgA8AAWz7AAQpbggDAKU5MAWADwAD/aADAAFt/BsAAVTKA57vVu+a8nQAAwABA7gFqu9ZgA8AA/2gCAAABA7v+vJ0AAAAAAAAAXAE+BD0cvAcuoU8BAAEnwABA7gDAAFV8PRy8My6hLwEAAWq8QWADwABbPsABClsAwABbgj0cvGYuoS8AAAAAwABbgj0cvIYuoS8AAAAAwABbggbAAFUzgOe8oryzvW8AAMAAQO8BaryjYAPAAP9oAgAAAQO8y71vAAAAAAAAAFwBPgM9HLzULqFPAQABJ8AAQO8AwABVfD0cvQAuoS8BAAFqvQ5gA8AAWz7AAQpbAMAAW4I9HL0zLqEvAQABar1BYAPAAFs+wAEKWwDAAFuCBsAAVTSA5710vYW+BAAAwABA8AFqvXVgA8AA/2gCAAABA72XvgQAAAABAQG9ngAAAMAAQPFgA58iAABcAT4CPRy9tC6hTwEAASfAAEDwAMAAVXw9HL3aLqEsAQABNQAAAAEAYAPAAP4bATUAAAABAGADnyIBgL3fwClP6SMcve+BAMApUChIAQABKwAAKxa974EAwClQKIdxnysBYAPAAP4bIxy9+oEAwClQG0gBAAErAAAcvf2UgcYAAAAAwAD+PoEAwClQGwFgA8AA/hsAwABbfwbAAFU1gOe+Cb4avvMAAMAAQPIBar4KYAPAAP9oAgAAAQO+J77zAAAAAgICvi4AAACjFGADnyIAvj0AAACpVmADwAD+GwAAXAE+Aj0cvk4uoU8BAAEnwABA8gDAAFV8PRy+by6hLAEAATUAAAABAF0DwAD+vwFgA8AAV/IBHL6gar56XQPAAFvBAWADwABX8sABCkmhLwIAAha+pC6hO8AAW3WBvqvAKVDIAMAAW8MjHL62ggDAKVD6SAEAASsAAB++xcAAW9IBAAEevtTAAFssAQABgL7jwClQvAAAggDAKVD6AWADwAD/aADAAFt/BsAAVTaA5774vwnAAEO9AADAAECrAWq++WADwAD/aAIAAAEDvxzAAEO9AAAAAgICvyMAAACfw2ADnyIAvzUAAACdcGADnyIAAFwBPg89HL9FLqFPAQABJ8AAQKsAwABVfE6/c7+IAACpCmADwAEAAgEev4rAAFV7AQABgL+iwClRrwBOv8W/0AAAnuNdA8AA/r8BYAPAAFgdASa/xQEcv9IuoS8BAAFqv+BgA8AAWz7AAQpbAMAAW4JdA8AA/r8BYAPAAFgdTr/6wABACgAAqWBgA8AA/hsBJr/6ARzAAEAMLqEvAAAAAMAAW4JgA8AA/htOwABAI8AAQC0AAIThYAPAAFgdASbAAEAjARzAAEAvLsAAQPMBAAEcwABARC6hLwAAAADAAFuCAMAAVTdgA8AAWB1OwABAVMAAQF4AAKJiYAPAAP4bASbAAEBUARzAAEBgLqEvAAAAAMAAW4JgA8AA/htOwABAhcAAQJMAAKLNXQPAAP6/AWADwABYQwEmwABAhQEcwABAlS6hLwAAAADAAFuCXQPAAP6/AWADwABYQ07AAECkwABArwAAqNtgA8AA/hsBJsAAQKQBHMAAQLEuoS8AAAAAwABbgmADwAD+G07AAEDDwABAyAAAgL1gA8AA/2gBHMAAQMouoS8AAAAAwABbgknAAEDVIiEcwABA54fAAEDZwClS5EgBAAErAMAA/ukAJcAAQPyFwABA8sApUnJgA8AAV9k+AT0XwABBKhTAAEEgwClScgUBYAPAAFfZos2HwABBOsApUuTAAFfeP07AAEFpwABBcgAAhvddA8AA/r8BYAPAAFfPASbAAEFpARzAAEF0LqEvAAAAAMAAW4JdA8AA/r8BYAPAAFfPPRzAAEF/LqG4AQABFsAAQZWAwABBisApUa+HcZ8rAMAAW4pJwABBpiXAAEGvFMAAQarAKVNSCQBgA8AAW8w+Aj0cwABB0hbAAEHKLoRIwABVBqkiAgACasAAQglgA6oswADgciepJgCp10rAAEI0AD9OwABCUcAAQmEAAajaYAPAAP4bASMcwABCdBTAAEJrwClT0woASAEAASsAwAD+6RbAAEKJgMAAQn7AKVGvh3GfKxbAAEKlFsAAQp8UwABClsApU9MKAIMewAD+o4dxwABX0wFgA8AA/hs9HMAAQr4WwABCti6ESMAAVQaElwsAC4LAAELQwClR4RTAAELuwClT0woAhsAAQwDAKVK0JsAAQxMBFMAAQxPAKVNSCQBgA8ABAAKHwABDIcApUuSFwABDOMApUnKDwABDS8ApUgMUwABDX8ApVIILABTAAEN4wClTIggAFsAAQ5WBwABDjMApUbuHcZ8rhMAAQ6nAKVJGAKn2BsAAVTeA58AAQ8LAAEPJwABEIAAAwABA8wAAAAEDwABD3cAARCAAAAABAQHAAEPlAAAAg/NgA8AA/2gAAGADwAD/aAE+AUrAAEPxASMlwABD/YDAAEP4wClVsGADwABbzCuAwABEGMApVbABYAPAAP9oBsAAVTiA58AARCXAAEQ2wABJxQAAwABArgFqwABEJmADwAD/aAIAAAEDwABEScAAScUAAAACAgLAAERQAAAAwABA9GADnyIAwABEYgAAAJ1wYAOfIgAAXAE+Dj0cwABEci6hTwEAASfAAECuAMAAVXxOwABEoMAARLUAAKkKYAPAAQACAR7AAES3wABVewEAAYDAAETPwClWLgBOwABE8sAARP0AAJ7jXQPAAP6/AWADwABYHQEmwABE8gEcwABE/y6hLwEAAWrAAEUNYAPAAFs+wAEKWwDAAFuCXQPAAP6/AWADwABYHU7AAEU1wABFSgAAwABA9V0DwAD+vwFgA8AAWB0BJsAARTUBHMAARUwuwABA8wEAARzAAEVhLqEvAAAAAMAAW4IAwABVN10DwAD+vwFgA8AAWB1OwABFh8AARZUAAKLNXQPAAP6/AWADwABYQwEmwABFhwEcwABFly6hLwEAAWrAAEWlYAPAAFs+wADF3wDAAFuCXQPAAP6/AWADwABYQ07AAEW9wABFyAAAqNtgA8AA/hsBJsAARb0BHMAARcouoS8AAAAAwABbgmADwAD+G07AAEXcwABF4QAAgL1gA8AA/2gBHMAAReMuoS8AAAAAwABbgk7AAEYEwABGDQAAhvddA8AA/r8BYAPAAFfPASbAAEYEARzAAEYPLqEvAQABasAARh1gA8AAWz7AAMMIAMAAW4JdA8AA/r8BYAPAAFfPPRzAAEYsLqG4AQABFsAARkKAwABGN8ApVi6HcZ8rAMAAW4pJwABGUyXAAEZch8AARlfAKVeuYAPAAFvMPgI9HMAARn8WwABGdy6ESMAAVQapIgIAAmrAAEa2YAOqLMAA4IMnqSYAqddKwABG4QA/TsAARvfAAEcDAACYwGADwAD+GwEjHMAARxYUwABHDcApV9IIAEgBAAErAMAA/ukWwABHK4DAAEcgwClWLodxnysWwABHRxbAAEdBFMAARzjAKVfSCACDHsAA/qOHccAAV9MBYAPAAP4bTsAAR2MAAACE4WADwABYHQBJwABHciIhHMAAR4uEwABHdsApVt9IAQABKwDAAP7pABbAAEerhMAAR5bAKVbfg7fAAP6iPgFJwABHvxzAAEffFsAAR9iEwABHw8ApVt9hwAD+70gBAAGUAMAA/z8+AT0VwABH78ApWPcKFsAASBCEwABH+8ApVt+DHsAA/qM+AT0VwABILsApWPcKH8AASD7AAFfqAgACFsAASHiEwABIY8ApVt+DHsAA/qMcwABInBzAAEiUhMAASH/AKVbfloQBAAGUAMAA/peArQAAAADAAP6TAD89HMAASMEWwABIuS6ESMAAVQapYwsAC4LAAEjewClWaBTAAEj8wClX0ggAasAASQ5gA8AA/hvAAOCRJsAASSwBh8AASSzAKVeuYAPAAQAChcAASTrAKVcxFMAASVHAKVj3CgCDwABJZMApVpIUwABJeMApWI4JAIbAAEmNwClXfhbAAEmqgcAASaHAKVY+h3GfKxzAAEm+lIHGAAAAAMAA/j4AqfcGwABVOYDnwABJysAASdvAAEr2AADAAED2AWrAAEnLYAPAAP9oAgAAAQPAAEn7wABK9gAAAAEBAcAASgIAAADAAECwYAOfIgAAXAE+A0AcwABKIS6hywIAAoDAAEoswClauTHAAEo+YAOwsAFqwABKSWADsLDAAOaDAMAAW3jAAEohwABKXQA9HMAASmQuoU8BAAEnwABArwDAAFV8PRzAAEqZFsAASpEuhEjAAFUGqR8CAAJqwABK0GADqizAAOCcJ4KTAKnWBsAAVTqA58AASvvAAEsMwABNvAAAwABArwFqwABK/GADwAD/aAIAAAEDwABLJcAATbwAAAACAgLAAEssAAAAwABAsGADnyIAwABLRAAAAKJfYAOfIgAAXAE+CUAcwABLXC6hywIAAoDAAEtnwClbgDHAAEuBYAOwsAJqwABLjGADsLDAAObtasAAS65gA7CwwADmgwDAAFt4wABLXMAAS8IAPRzAAEvJLqFPAQABJ8AAQK8AwABVfE7AAEwQwABMHgAAos1dA8AA/r8BYAPAAFhDASbAAEwQARzAAEwgLqEvAAAAAMAAW4JdA8AA/r8BYAPAAFhDTsAATC/AAEw2AACDYmADwAD+GwE1AAAAAQBgA8AA/hsBNQAAAAEAYAOfIgGBwABMOMApW5AjHMAATEODAMApXGBIAQABKwAAKxbAAExDgwDAKVxgh3GfKwFgA8AA/hsjHMAATE6DAMApXFNIAQABKwAAFsAATGKAwABMUcApW4CHcZ8rgwDAKVxTAWADwAD+G07AAEx5wABMfgAAgL1gA8ABAAIBNQAAAAEAYAPAAQACATUAAAABAGADnyIBgcAATIDAKVuQIxzAAEyLhADAKVzxSAEAASsAACsWwABMi4QAwClc8YJinzwBYAPAAQACIxzAAEyShADAKVzkSAEAASsAACTAAEzzAifAAECxNQAAAAEAYAPAAP4bARbAAEzYLsAAQDjAAFUNNQAAAAEAYAPAAP4bARfAAEzYLsAAQDgcwABM74UAwCldTWQBAAGUAMAA/0HAAFUNhQDAKV1NhADAKVzkAWADwAEAAj0cwABM+S6hLAEAAYTAAEz+wClc0ADAAFt/PRzAAE0JLqEsAQABg8AATQ7AKVw/AMAAW389HMAATRsuoSwBAAE1AAAAAQBdA8AA/r8BYAPAAFhDAYLAAE0gwClcASMcwABNLoUAwCld60gBAAErAABqwABNO2ADwABbPsAAxd+FAMApXesBYAPAAP9oAMAAW389HMAATYEWwABNVxbAAE1PLoRIwABVBqkMqbmp7gMAA4TAAE2cwClc0IPAAE2iwClcP4LAAE2qwClcAQCqVgbAAFU7gOfAAE3BwABN0sAAUrkAAMAAQLIBasAATcJgA8AA/2gCAAABA8AATenAAFK5AAAAAwMDwABN9wAAAMAAQLBgA58iAMAATg8AAACjFGADnyIAwABOIAAAAJ1wYAOfIgAAXAE+DEAcwABONy6hywIAAoDAAE5CwClesTHAAE5UYAOwsAUewABOXLCvAQABMcAATmlgA7CwAmrAAE50YAOwsMAAw9tqwABOjmADsLDAAObOAGrAAE6tYAOwsMAA5u1qwABO1WADsLDAAOVZasAATu5gA7CwwADmF2rAAE8KYAOwsMAA5oMAwABbeMAATjfAAE8jAD0cwABPKi6hTwEAASfAAECyAMAAVXxOwABPXMAAT3EAAKkKYAPAAQACAR7AAE9zwABVewEAAYDAAE+LwClesQBOwABPrsAAT7gAAIThYAPAAFgdASbAAE+uARzAAE+6LqEvAAAAAMAAW4JgA8AAWB1OwABP38AAT+0AAKLNXQPAAP6/AWADwABYQwEmwABP3wEcwABP7y6hLwEAAWrAAE/9YAPAAFs+wADF3wDAAFuCXQPAAP6/AWADwABYQ07AAFAVwABQIAAAqNtgA8AA/hsBJsAAUBUBHMAAUCIuoS8AAAAAwABbgmADwAD+G07AAFA0wABQOQAAgL1gA8ABAAIBJsAAUDQBHMAAUDsuoS8BAAFqwABQSWADwABbPsAA5gIAwABbgmADwAEAAknAAFBUHMAAUF2HwABQWMApYGBIAQABKwDAAQARPgI9jsAAUG7AKWAwFsAAUIyAwABQe8ApXrGHcZ8rPY/AAFCewClgYCTAAFCyAYbAAFCnwClgMD9OwABQ1MAAUN0AAIb3XQPAAP6/AWADwABXzwEmwABQ1AEcwABQ3y6hLwEAAWrAAFDtYAPAAFs+wADDCADAAFuCXQPAAP6/AWADwABXzz0cwABQ/C6huAEAARbAAFEYgMAAUQfAKV6xh3GfKwDAAFuKTsAAUS3AAFE5AACYwGADwAD+GwEjHMAAUUQUwABRO8ApYPQIAEgBAAErAMAA/ukWwABRZ4DAAFFWwClesYdxnysWwABRixbAAFGFFMAAUXzAKWD0CACDHsAA/qOHccAAV9MBYAPAAP4bPRzAAFGjFsAAUZsuhEjAAFUGqXAJAAmDwABRxMApX4kUwABR4sApYPQIAJOHwABSQMApYGCFwABSTsApX+OEwABSZcApX7MUwABSeMApYWQJAIbAAFKNwClgMBbAAFKqgsAAUqHAKV7Ph3GfKwCp+wbAAFU8gOfAAFK+wABSzMAAU/wAAMAAQPcAAAABA8AAUuDAAFP8AAAAAQEBwABS5wAAAJKpYAOfIgAAYAOEZQE+BEnAAFL0HMAAUv6AwABS+MApYmhIAQABKwDAAP91SsAAUwcBasAAUxxgA4RlhUo/ScAAUygewABTLMAAWygCAAInmkGAwABTPMApYmgASsAAU0QBasAAU1lgA4RlhSw/ScAAU2UewABTacAAWygCAAInl3mAwABTecApYmgASsAAU4EBasAAU5ZgA4RlhTs/SsAAU6IBJsAAU6IBHsAAU6mdiwQABBbAAFPCgMAAU7zAKWJogmKfPCfAAED3FsAAU+iAwABT4sApYmiHcZ8rFsAAU/QugKzAAFUPAGADhGUGwABVPYDnwABUAcAAVBLAAFUBAADAAED4AWrAAFQCYAPAAP9oAgAAAQPAAFQlwABVAQAAAAICAsAAVCwAAADAAEBHYAOfIgDAAFRAAAAAwABA+WADnyIAAFwBPgI9HMAAVF0WwABUVS6ESMAAVQapHwMAAmrAAFSUYAOqLMAA4VgnwABA+gGpICqp1j0cwABUzy6hLAEAASMhHMAAVOKBwABU1MApY6VIAQABKwDAAP91asAAVOxgA8AA/huDXZMBYAPAAP4bAMAAW38GwABVPoDnwABVBsAAVRfAAFuZAADAAEBcAWrAAFUHYAPAAP9oAgAAAQPAAFUowABbmQAAAAMDA8AAVS8AAACfw2ADnyIAwABVQQAAAMAAQF1gA58iAMAAVVEAAACdcGADnyIAAFwBPhU9HMAAVWEuoU8BAAEnwABAXADAAFV8TsAAVZHAAFWWAACCa2ADwABU9wEmwABVkQEcwABVmC6hLwAAAADAAFuCYAPAAFT3TsAAVcDAAFXIAAChd10DwAD+vwFgA8AAVxYBJsAAVcABHMAAVcouoS8AAAAAwABbgl0DwAD+vwFgA8AAVxZOwABV2cAAVecAAMAAQPtgA8AA/hsBJsAAVdkBHMAAVekuoS8AAAAAwABbgmADwAD+G07AAFYOwABWHAAAos1dA8AA/r8BYAPAAFhDASbAAFYOARzAAFYeLqEvAAAAAMAAW4JdA8AA/r8BYAPAAFhDTsAAVi3AAFY4AACHcWADwAD+GwEmwABWLQEcwABWOi6hLwAAAADAAFuCYAPAAP4bTsAAVkzAAFZRAACAvWADwAD/aAEcwABWUy6hLwAAAADAAFuCTsAAVmrAAFZ1AACFVWADwABYHQEmwABWagEcwABWdy6hLwAAAADAAFuCYAPAAFgdTsAAVofAAFaSAACEH2ADwAD8VQEcwABWmYPAAFaUwClkqUgBAAFqwABWp2ADwABU98ABCMsAwAD/dUnAAFa1IiEcwABWwoHAAFa5wClkb0gBAAErAMAA/3UAHsAAVs3AAFsoAgACJ5d5gcAAVt3AKWRvAD4BScAAVvAiHMAAVvyEwABW9MApZNlIAQABKwDAAP7pASEcwABXFhbAAFcPhMAAVwfAKWTZYcAA/u9IAQABlADAAP8/PgE9FcAAV5XAKWYLCio/P07AAFe/wABXyQAAomJgA8AA/hsBJsAAV78BHMAAV8suoS8AAAAAwABbgmADwAD+G0nAAFfWFMAAV9rAKWYLCgA+AT0VwABX7sApZtILHMAAV/gUwABX7sApZtILAIEGAQABasAAV/tgA8AA/hsVAMAA/jQ/ScAAWBMhHMAAWCgWwABYFy6pj8AAVQxIAQABKwDAAQARPgE9FcAAWDnAKWbSCxzAAFhDFMAAWDnAKWbSCwCBBgEAAWrAAFhGYAPAAP4bg10AwAD+ND9OwABYdMAAWH0AAIb3XQPAAP6/AWADwABXzwEmwABYdAEcwABYfy6hLwAAAADAAFuCXQPAAP6/AWADwABXzz0cwABYii6huAEAARbAAFiggMAAWJXAKWRhh3GfKwDAAFuKPRzAAFkSHMAAWMIWwABYsS6ESMAAVQapIgIAAmrAAFjuYAOqLMAA4VgnwABA+gCp157pAgAChsAAWR/AKWVJFsAAWS4uhEjAAFUGAKpZScAAWTwlwABZRRTAAFlAwClltwgAYAPAAFvMSsAAWVgAP07AAFluwABZfgABqNpgA8AA/hsBIxzAAFmRFMAAWYjAKWecDABIAQABKwDAAP7pFsAAWaaAwABZm8ApZGGHcZ8rFsAAWcIWwABZvBTAAFmzwClnnAwAgx7AAP6jh3HAAFfTAWADwAD+G07AAFnZwABZ7gAAqQpgA8ABAAIBHsAAWfDAAFV7AQABgMAAWgjAKWRhAD0cwABaIRbAAFoZLoRIwABVBoScDgANFMAAWjfAKWjWDgAUwABaVcApZ5wMABTAAFpnwClm0gsAFMAAWnrAKWXbCQAmwABajgEUwABajsApZbcIAGADwAEAAobAAFqcwCllSYTAAFqzwClk2RzAAFrELsAAQPcBAAGBwABa2cApZG8AwABVPBTAAFrswClobQ0Ah8AAWwXAKWWHhcAAWxnAKWUXFsAAWzmCwABbMMApZH+HcZ8rFsAAW00uqY/AAFUMAYefKaoAPRfAAFt+LqmPK8AAVQwGwABVP4DnwABbnsAAW6/AAFyOAADAAECTAWrAAFufYAPAAP9oAgAAAQPAAFvHwABcjgAAAAICAsAAW84AAACiLWADnyIAwABb4QAAAKI8YAOfIgAAXAE+Aj0cwABb8i6hTwEAASfAAECUAMAAVXxJwABcGCEcwABcLRbAAFwcLqmPwABVDEgBAAErAMABABE+AT0cwABcPi6hLAEAAWrAAFxOYAPAAFT3wAEI5ADAAFt/PgE9HMAAXGsuoSwBAAFqwABce2ADwABU98ABCMsAwABbfwbAAFVAgOfAAFyTwABcpMAAXRkAAMAAQJUBasAAXJRgA8AA/2gCAAABA8AAXMPAAF0ZAAAAAgICwABcygAAAKItYAOfIgDAAFzdAAAAojxgA58iAABcAT4BPRzAAFzuLqFPAQABJ8AAQJYAwABVfAbAAFVBgOfAAF0ewABdL8AAXhkAAMAAQJcBasAAXR9gA8AA/2gCAAABA8AAXU7AAF4ZAAAAAgICwABdVQAAAKItYAOfIgDAAF1oAAAAojxgA58iAABcAT4CScAAXXkhFsAAXX4uh5PAAFUHPgE9HcAAXZqihQMAA2rAAF28YAORxbGtgMAAXdjAKWtQgMAAXeXAKWtQAMAAW6g/PRzAAF39LqEsAQABasAAXg1gA8AAVPfAAQjkAMAAW38GwABVQoDnwABeHsAAXi/AAF7vAADAAEBjAWrAAF4fYAPAAP9oAgAAAQPAAF5DwABe7wAAAAEBAcAAXkoAAACSqWADnyIAAFwBPgI9HMAAXlcuoU8BAAEnwABAZADAAFV8ScAAXnkhHMAAXo4WwABefS6pj8AAVQxIAQABKwDAAQARPgE9HMAAXp8uoSwBAAFqwABer2ADwABU98ABCOQAwABbfz4BPRzAAF7MLqEsAQABasAAXtxgA8AAVPfAAQjLAMAAW38GwABVQ4DnwABe9MAAXwXAAF+SAADAAED8AWrAAF71YAPAAP9oAgAAAQPAAF8ewABfkgAAAAICAsAAXyUAAACSqWADnyIAwABfMQAAAMAAQP1gA8AA/FUAAFwBPgI9HMAAX0kuoU8BAAEnwABA/ADAAFV8PRzAAF92LqEsAQABasAAX4ZgA8AAVPfAAQjkAMAAW38GwABVRIDnwABfl8AAX6jAAGUEAADAAED+AWrAAF+YYAPAAP9oAgAAAQPAAF+zwABlBAAAAAYGBsAAX7oAAADAAED5YAOfIgDAAF/PAAAAoWFgA58iAMAAX+IAAAChYmADnyIAwABf/gAAAKFkYAOfIgDAAGAVAAAAwABAXWADnyIAwABgJQAAAIC9YAOfIgAAXAE+CT0XwABgMS6hKCIcwABgVjUAAAABAGADnyIBhcAAYEnAKW2uIxzAAGBPhgDAKW3RSAEAASsAACsWwABgT4YAwClt0YJinzwBYAPAAQACSAEAARbAAGCCFsAAYGEWwABgWS6ESMAAVQapDKm5gL2qXgDAAQARABzAAGCfhMAAYJbAKW2eSAEAASsAwAD/dcAAVQlOwABguwAAAKJiXQPAAP6/AWADsCAAScAAYMohHMAAYNyAwABgzsApbWRIAQABKwDAAP91PgI9IxzAAGD3hsAAYO3AKW5TSAEAASsAwAD+6Y7AAGDtwCluUzHAAGEFYAOwIAArAV0DwAD+vwFgA7AgPRzAAGEZhsAAYQ/AKW5TVgEAAWrAAGEdYAOwIMAA5CgAwAD+0D9JwABhMiEcwABhQoHAAGE2wCltdEgBAAErAMAA/3U+AUnAAGFTFsAAYVcuoSjAAFUJPgE9HMAAYXAuooUDAANqwABhlGADkcXAAIaRgcAAYa7AKW10gcAAYbvAKW10AMAAW6g+Aj0jHMAAYeqGwABh4MApblNIAQABKwDAAP7pjsAAYeDAKW5TMcAAYfhgA7AgACsBXQPAAP6/AWADsCA9HMAAYg6GwABiBMApblNWAQABasAAYhJgA7AgwADkRgDAAP7QP0nAAGItIRzAAGJAgsAAYjHAKW2CSAEAASsAwAD/dT4CPSMcwABiW4bAAGJRwCluU0gBAAErAMAA/umOwABiUcApblMxwABiaWADsCAAKwFdA8AA/r8BYAOwID0cwABifYbAAGJzwCluU1YBAAFqwABigWADsCDAAOQZAMAA/tA/ScAAYpchHMAAYquDwABim8ApbZBIAQABKwDAAP91PgJOwABiw8AAYsoAAIJiYAPAAQACARbAAGLcg8AAYszAKW2QgmKfPEnAAGLqHsAAYu7AAPf8AgACJ4Qrh8AAYv/AKXBOAD4CPSMcwABjHIbAAGMSwCluU0gBAAErAMAA/umOwABjEsApblMxwABjKmADsCAAKwFdA8AA/r8BYAOwID0cwABjQIbAAGM2wCluU1YBAAFqwABjRGADsCDAAORVAMAA/tBJwABjVx7AAGNbwAD3/AIAAieEKofAAGNuwClwTgA+Aj0jHMAAY4uGwABjgcApblNIAQABKwDAAP7pjsAAY4HAKW5TMcAAY5lgA7AgACsBXQPAAP6/AWADsCA9HMAAY6+GwABjpcApblNWAQABasAAY7NgA7AgwADkNwDAAP7QPgI9IxzAAGPchsAAY9LAKW5TSAEAASsAwAD+6Y7AAGPSwCluUzHAAGPqYAOwIAArAV0DwAD+vwFgA7AgPRzAAGQAhsAAY/bAKW5TVgEAAWrAAGQEYAOwIMAA5AsAwAD+0D89HMAAZB4uoSwBAAE1AAAAAQBgA8AA/hsBNQAAAAEAYAOfIgGDwABkI8ApbZAjHMAAZDSHAMApce1IAQABKwAAKxbAAGQ0hwDAKXHth3GfKwFgA8AA/hsjHMAAZD+HAMApceBIAQABKwAAHMAAZEKUgcYAAAAAwAD+PocAwClx4AFgA8AA/hsAwABbfz0cwABkSy6hLAEAATUAAAABAF0DwAD+vwFgA7AgAYbAAGRQwCluUyMcwABkWocAwClybEgBAAErAABqwABkZ2ADwABbPsAA5dKHAMApcmwBYAPAAP9oAMAAW389HMAAZH8WwABkdy6ESMAAVQapHwMAAmrAAGS2YAOqLMAA4UYnwABA+gGpICqp1gbAAFVFgOfAAGUJwABlGsAAgkQAAMAAQJkBasAAZQpgA8AA/2gCAAABA8AAZSjAAIJEAAAABQUFwABlLwAAAMAAQF1gA58iAMAAZT8AAACfw2ADnyIAwABlUQAAAMAAQJpgA58iAMAAZWkAAAChgGADnyIAwABlggAAAJ1wYAOfIgAAXAE+IEAcwABlmS6hywIAAoHAAGWkwClzMTHAAGWwYAOwsAFqwABlu2ADsLDAAOWuAMAAW3jAAGWZwABlxwA9HMAAZc4uoU8BAAEnhQ8AwABVfE7AAGXzwABl/AAAwABA/2ADwABU9wEmwABl8wEcwABl/i6hLwAAAADAAFuCYAPAAFT3ScAAZgkcwABmFoXAAGYNwClzv0gBAAFqwABmJGADwABU98ABCP0AwAD/dT4BPRzAAGZtLqEvAAAAAMAAW4I/QBzAAGaFLqHLAgACgcAAZpDAKXMxMcAAZpxgA7CwCWrAAGauYAOwsMAA5ZZqwABmzWADsLDAAOVZasAAZvhgA7CwwADm7WrAAGcgYAOwsMAA5VkewABnPrCvAQABMcAAZ0tgA7CwBGrAAGdfYAOwsMAAxaRqwABnd2ADsLDAAMVrasAAZ5hgA7CwwADmKGrAAGe0YAOwsMAAw9sAasAAZ95gA7CwwADm3GrAAGgBYAOwsMAA5elqwABoImADsLDAAOVZasAAaFVgA7CwwADmgwDAAFt4wABmhcAAaG8ATsAAaJPAAGibAAChd10DwAD+vwFgA8AAVxYBJsAAaJMBHMAAaJ0uoS8AAAAAwABbgl0DwAD+vwFgA8AAVxZOwABorMAAaLoAAMAAQPtgA8AA/hsBJsAAaKwBHMAAaLwuoS8AAAAAwABbgmADwAD+G07AAGjhwABo7wAAos1dA8AA/r8BYAPAAFhDASbAAGjhARzAAGjxLqEvAAAAAMAAW4JdA8AA/r8BYAPAAFhDTsAAaQDAAGkLAACHcWADwAD+GwEmwABpAAEcwABpDS6hLwAAAADAAFuCYAPAAP4bTsAAaR/AAGkuAADAAEEAYAPAAP9oARzAAGkwLqEvAAAAAMAAW4JJwABpOyIcwABpUWrAAGlIYAOSrcAAm1hIAQABFMAAaVTAKXXsCgAAwAD/dQAcwABpbobAAGlmwCl1DkgBAAErAMAA/uk+AT0VwABpf8ApdewKasAAaZlgA5KtwACbgD9OwABptgAAAIC9YAPAAP9oAE7AAGnOAAAAgmtgA4RlAEnAAGnYJcAAaesUwABp3MApdewKAGADkq0+BD0VwABqAMApdnILHsAAageSqwEAARTAAGoYwCl17AoBYAOSrQA9FcAAai/AKXaDDGrAAGpEYAOEZYVZTsAAaljAAGpuAADAAEEBYAPAAP4bAR7AAGpwkqwBAAEUwABqjsApdewKAWADkq0AScAAaqUhHMAAasA1AAAAAQBgA8AA/hsBNQAAAAEAXQPAAP6/AWADwABXFgGGwABqqsApdQ4jHMAAarMUAMApdzAOAEgBAAErAAArFsAAarMUAMApdzAOAGHAAP7vAWADwAD+GyMcwABquhQAwCl3Iw4ASAEAASsAAJMUAMApdyMOAAFgA8AA/htIAQABFMAAasPAKXboDQAAwAD/Pz4ETsAAawwAAACI5V0DkdEBYQMBYAPAAQACYAORugBBR8AAax4UwABrJsApdugNAAQBwABrTmrAAGtOYAPAAP4bCQA+Aj0VwABrXcApd7cOasAAa2hdA5HRAWEDAWADwAEAAmADkbrAAHNzQsAAa5gAAcAAa69qwABrr2ADwAD+GxUAPgJJwABrvhzAAGvUasAAa8tgA5KtwACbWEgBAAEUwABr18ApdewKAWADkq0AwAD/dT4BPRXAAGv3wCl3tw5qwABsAl0DkdEBYQMBYAPAAQACYAORusAAcws+AT0VwABsTcApd7cOasAAbFhdA5HRAWEDAWADwAEAAmADkbrAAHPGQsAAbJYAAcAAbK1qwABsrWADwAD+GyEAPgI9FcAAbLzAKXe3DmrAAGzHXQOR0QFhAwFgA8ABAAJgA5G6wAB0K0LAAGz3AAABPgE9HsAAbR6diwQABCTAAG1AARTAAG0qwCl26A0AJ5YMFMAAbXPAKXW8CQAWwABtfy6ArMAAVQ8ATsAAbZ7AAG2lAACD8WADwAEAAgEmwABtngEUwABtp8ApdnILAGADwAEAAj0cwABttS6e2wMAAxzAAG3JFMAAbcDAKXe3DgCIPQEAASbAAG3XARTAAG3XwCl2cgsAYAPAAQACAJHVFMAAbd7AKXW8CQAWwABt8RTAAG3qwCl5Og8AYcABAAYAwABVeT4BScAAbhEhHMAAbh2GwABuFcApdQ5IAQABKwDAAP7pPgFGwABuMsAAbmHAAG5OAAAAmhpgA8AAVxYAhsAAbljAKXUOPgFJwABubyEWwABuexTAAG50wCl57w4AhXTAAFchPgE9HMAAbpcuntsDAANqwABuomADkcXAAHSBFsAAbs0UwABuxsApee8OAIdxr6IWwABu9xbAAG7yFMAAbuvAKXnvDgCAvcAAVxthwAEABgDAAFV5Pz8+Aj0VwABvP8ApdnILFMAAb0bAKXXsCgA9FcAAb1zAKXaDDBzAAG9jLsAAQPcBAAGAwABveMApcyEAwABVPE7AAG+ZwABvpAAAhVVgA8AAWB0BJsAAb5kBHMAAb6YuoS8AAAAAwABbgmADwABYHU7AAG+2wABvwQAAhB9gA8AA/FUBHMAAb8yFwABvw8Apc79IAQABasAAb9pgA8AAVPfAAQjLAMAA/3VJwABv6CIhHMAAb/WAwABv7MApcyFIAQABKwDAAP91AB7AAHAAwABbKAIAAieXeYDAAHAQwClzIQA+AUnAAHAjIhzAAHAvhsAAcCfAKXUOSAEAASsAwAD+6QEhHMAAcEkWwABwQobAAHA6wCl1DmHAAP7vSAEAAZQAwAD/Pz4BPRXAAHDIwCl66w4qPz9OwABw8sAAcPwAAKJiYAPAAP4bAR7AAHEHsCgCAAEmwABxEAEcwABxEC6hLwAAAADAAFuCXQPAAP6/AWADsCABhB8UwABxI8ApeusOAEnAAHE0IRzAAHFJFsAAcTguqY/AAFUMSAEAASsAwAEAET4BPRXAAHFawCl7sg8cwABxZBTAAHFawCl7sg8AgQYBAAFqwABxZ2ADwAD+G4NdAMAA/jQ/ScAAcX8hHMAAcZ4cwABxjhTAAHGEwCl7sg8Ag3wBAAFqwABxkGADwAD+G4NdAMAA/jNIAQABkwDAAP8/PgE9FcAAcazAKXuyDxzAAHG2FMAAcazAKXuyDwCDfAEAARzAAHG5asAAcbpgA8AA/hsVhJIAAAAAwAD+NgDAAP4zP07AAHHXwABx3wAAhCJgA8AA/FUBIRzAAHH5HMAAcewUwABx4sApe7IPAIN8AQABasAAce5gA8AA/hshAMAA/jNIAQABkwDAAP8/TsAAcgfAAHIdAADAAEECYAPAAP4bASbAAHIHARzAAHIfLqEvAAAAAMAAW4JgA8AA/htOwAByQMAAckkAAIb3XQPAAP6/AWADwABXzwEmwAByQAEcwABySy6hLwAAAADAAFuCXQPAAP6/AWADwABXz07AAHJdwABycgAAqQpgA8ABAAIBHsAAcnTAAFV7AQABgcAAcozAKXMxAE7AAHK4wAByywAAn6RgA6pCARzAAHLVFsAAcs0uhEjAAFUGqSICAAJqwABzCmADqizAAOFGJ8AAQPoAqddJwABzPyXAAHNIFMAAc0PAKXZyCwBgA8AAW8w+BD0XwABzYy6pjyvAAFUMPRfAAHOCLqEoKsAAVQk9HMAAc7IUwABzn8ApfbgUAJ7pAgACFMAAc7/AKXV+CAAWwABzzi6ESMAAVQYAqllKwABz3gA/TsAAc/jAAHQIAACpjWADwAEAAgEjIhzAAHQXFMAAdBLAKXaDDABIAQABasAAdChgA4RlhSwAwAD/dQEcwAB0NxTAAHQywCl2gwwASAEAAWrAAHRIYAOEZYU7AMAA/3UrHMAAdHgWwAB0cC6ESMAAVQapKgIAAhTAAHSawCl2cgsAFMAAdKDAKXW8CQAAqdoBYAPAAQACScAAdLEiIhzAAHTFFMAAdLXAKX5lFQBIAQABKwDAAQARABzAAHTxHMAAdOMUwAB02cApe7IPAIN8AQABasAAdOVgA8AA/huDSgDAAP4zSAEAAZMAwAD/PwAcwAB1LxbAAHUqFsAAdQkWwAB1AS6ESMAAVQapDKm5gmuqXUgBAAFqwAB1VWADqizAAOCcAMAA/3U+CU7AAHWNwAB1lwAAgpNgA6pCARbAAHWrFsAAdaMuhEjAAFUGqQypuU7AAHX5AAAAhPFdA8AA/vECYAPAAFhDYAPAAFgdAEnAAHYNIRzAAHYpFsAAdhsUwAB2EcApf48WAKLNqmBIAQABKwDAAP7pPgROwAB3HcAAdzYAAMAAQQNdA8AA/r8BYAPAAFhDARzAAHdNFsAAdzguhEjAAFUGqYIDAAIWwAB3aRTAAHdfwCl/jxYAos2qYBTAAHd4wCl9uBQAAalvKaoQPRXAAHfFwCl/thcywAB31GADwABYQ2ADwABYHQBFwAB34AHAAHfpwAB36wAAYmADwAD+GwGTARzAAHfyFMAAd/DAKYB5GQBjAQABFsAAeA0UwAB39MApf/8YAGHAAP7vAMAA/0kBFcAAeBXAKYB5GRzAAHgWFMAAeBXAKYB5GQBkAQABlADAAP9BPgE9HMAAeDIUwAB4JsApf7YXAIC/AgACHMAAeEoWwAB4PRTAAHgzwCl/jxYAos2qYEsBAAEUwAB4S8ApgHkZAADAAP7OH8AAeGPAAFgIAQABHMAAeLoUwAB4osApf/8YAEsBAAEUwAB4u8ApgHkZAADAAP7OAADAAP8GScAAeNIhHMAAeOQUwAB41sApdX4IAEgBAAErAMAA/uk+AT0VwAB4+cApdX4INcAAeQkAAAEAXQPAAP6/AWADwABYQwEUwAB5CcApf/8YADUAAAABAFsBHMAAeSMUwAB5IcApgYkZAIClAQABFMAAeSrAKXV+CAAAwAD+0RQAwCmBiRkAPgE9FcAAeVXAKXV+CBTAAHllwCl//xgAP07AAHm0wAB5xwAAwABBBF0DwAD+vwFgA8AAVxYBMcAAeclgA8AAVxYATsAAed/AAHnoAACEyWADwABYHQEWwAB59BTAAHnqwCl/jxYAqfKqYUnAAHoNIRzAAHoeFMAAehHAKX+2FwBIAQABKwDAAP91PgI9FcAAejHAKYIiGRzAAHpFFMAAejzAKYIiGQC+/wEAARTAAHpLwCl/thcAAMAAWCo9HMAAenUUwAB6YsApfbgUAKkcAQABH8AAeoHAAFhrAwADFMAAepDAKYIiGQAcwAB6mpSBxgAAAADAAP4+KwAAqlg/PRzAAHrHFMAAerTAKYH5GABWAQABH8AAes/AAFcwBgAGK2rAAHr3YAPAAP4bg3AUwAB7AsApgiIZACfAAEEFKxTAAHsbwCl1vAkAAADAAP7QScAAey8hHMAAezuGwAB7M8ApdQ5IAQABKwDAAP7pPgE9HMAAe2EUwAB7TsApgfkYAIClAQABhsAAe2jAKXUOAMAA/tE/PY7AAHuAwCl1DhTAAHuKwCmB+RgAPz0cwAB7vBTAAHupwCl9uBQAnukCAAIUwAB7ycApdX4IABbAAHvYLoRIwABVBgCqWUnAAHvmIRzAAHv6FMAAe+rAKX5lFQBIAQABKwDAAQARPgRJwAB8CyIUwAB8D8ApfNQQAAAhHMAAfCOFwAB8GsApc79IAQABasAAfDFgA8AAVPfAAQjLAMAA/3U+Aj0cwAB8RS6e2wMAA2rAAHxQYAORxZfsFMAAfHHAKX0eEQA3BQDAAFV5PRXAAHyUwCl7sg8cwAB8nhTAAHyUwCl7sg8Ag3wBAAEcwAB8oWrAAHyiYAPAAP4bIYSSAAAAAMAA/jYAwAD+Mz9JwAB8uyEcwAB8yhTAAHy/wCl6uw0ASAEAASsAwAD/dT4CPRzAAH0dLqKFAwADasAAfUFgA5HFoeWBwAB9Y8ApczGBwAB9b8ApczEAwABbqD0VwAB9hMApersNKz9OwAB9r8AAfb8AAajaYAPAAP4bASMcwAB91BTAAH3LwCl9UBIASAEAASsAwAD+6RbAAH3pgcAAfd7AKXMxh3GfKxbAAH4FFsAAff8UwAB99sApfVASAIMewAD+o4dxwABX0wFgA8AA/hs9HMAAfh8WwAB+Fy6ESMAAVQapjA4ADRTAAH45wCl9jhMAFMAAflnAKX1QEgAUwAB+bcApe7IPABTAAH6CwCl6uw0AFMAAfpjAKXZyCwAUwAB+qMApfmUVABTAAH7DwCl1fggAhsAAftzAKXUOFMAAfu/AKYTfFgAUwAB/CsApdbwJAIfAAH8gwCl1TBbAAH9ChMAAfznAKXNdh3GfKxbAAH9YLqmPwABVDAGhgIPAAH+HwClzT6n/PgNJwAB/rhTAAH+ywCl81BAAPgI9HMAAf8UuntsDAANqwAB/0GADkcWg+RTAAH/kwCl9HhEANwUAwABVeT0VwACAB8Ape7IPHMAAgBEUwACAB8Ape7IPAIN8AQABHMAAgBRqwACAFWADwAD+GyGEkgAAAADAAP42AMAA/jM/TsAAgDjAAIBIAAGo2mADwAD+GwEjHMAAgF0UwACAVMApfVASAEgBAAErAMAA/ukWwACAcoHAAIBnwClzMYdxnysWwACAjhbAAICIFMAAgH/AKX1QEgCDHsAA/qOHccAAV9MBYAPAAP4bPRzAAICoFsAAgKAuhEjAAFUGhJwOAA0UwACAwMApfY4TABTAAIDgwCl9UBIAFMAAgPTAKXuyDwAUwACBCcApersNACbAAIEfARTAAIEfwCl2cgsAYAPAAQACFMAAgS/AKXV+CACGwACBSMApdQ4UwACBW8ApdoMMABTAAIFrwCmGfhYAFMAAgYbAKXW8CQCHwACBnMApdUwWwACBvoTAAIG1wClzXYdxnysWwACB1C6pj8AAVQwBh58qqgA9F8AAgg4uqY8rwABVDD0XwACCKy6hKCrAAFUJBsAAVUaA58AAgknAAIJawACD8gAAwABASwFqwACCSmADwAD/aAIAAAEDwACCf8AAg/IAAAABAQHAAIKGAAAAwABATGADnyIAAFwBPgQ9HMAAgpkuoU8BAAEnwABATQDAAFV8TsAAgtPAAILaAACpXGADwAD/aAEcwACC3C6hLwAAAADAAFuCTsAAgu7AAIL4AACE4WADwAD/aAEcwACC+i6hLwAAAADAAFuCScAAgwUlwACDEIHAAIMJwCmIImADwABbzD4BPRzAAIMrLqEsAQABFMAAgzDAKYgiAQFgA8AAW8wAwABbf0nAAINEJcAAg1KCwACDSMApiEZgA8AAW8w+AT0cwACDbS6hLAEAARTAAINywCmIRgIBYAPAAFvMAMAAW38+AT0cwACDkS6hLAEAARzAAIOeFsAAg5YuhEjAAFUGqVsDAAMmwACDvQGCwACDvcApiEZgA8AAWB0mwACDyAGBwACDyMApiCJdA8AA/r8BYAPAAFgdFsAAg9yAwACD0MAph/aHcZ8rAKnxAMAAW38GwABVR4DnwACD98AAhAjAAIhnAADAAEC2AWrAAIP4YAPAAP9oAgAAAQPAAIQgwACIZwAAAAUFBcAAhCcAAACfw2ADnyIAwACEOQAAAMAAQLdgA58iAMAAhFMAAACV+2ADnyIAwACEYQAAAMAAQLhgA58iAMAAhHoAAACdcGADnyIAAFwBPg49HMAAhIouoU8BAAEnwABAtgDAAFV8TsAAhL3AAITSAACpCmADwAEAAgEewACE1MAAVXsBAAGAwACE7MApiYoATsAAhQ/AAIUaAACe410DwAD+vwFgA8AAWB0BJsAAhQ8BHMAAhRwuoxkBAAGDwACFKcApibYAwABbg10DwAD+vwFgA8AAWB1OwACFSMAAhVkAAKmKYAPAAP9oARzAAIVbLqEvAAAAAMAAW4JOwACFasAAhXQAAKJiYAPAAP4bASbAAIVqARzAAIV2LqEvAAAAAMAAW4JgA8AA/htOwACFm8AAhakAAKLNXQPAAP6/AWADwABYQwEmwACFmwEcwACFqy6hLwAAAADAAFuCXQPAAP6/AWADwABYQ07AAIW6wACFxQAAh3FgA8AA/hsBJsAAhboBHMAAhccuoS8AAAAAwABbgmADwAD+G07AAIXZwACF3gAAgL1gA8AA/2gBHMAAheAuoS8AAAAAwABbgk7AAIYBwACGCgAAhvddA8AA/r8BYAPAAFfPASbAAIYBARzAAIYMLqEvAAAAAMAAW4JdA8AA/r8BYAPAAFfPPRzAAIYXLqG4AQABFsAAhi2AwACGIsApiYqHcZ8rAMAAW4pJwACGPiIlwACGRxTAAIZCwCmLIwsAYAPAAFvMASXAAIZth8AAhlzAKYphYAPAAFvMPgI9HMAAhpAWwACGiC6ESMAAVQapIgIAAmrAAIbHYAOqLMAA4MAnqSYAqddKwACG9wA/TsAAhw7AAIceAACo2mADwAD+GwEWwACHK4DAAIcgwCmJiodxnytOwACHP8AAh00AAKjcYAPAAP4bARbAAIdYhMAAh0/AKYnGh3GfKz0cwACHcBbAAIdoLoRIwABVBqmJCgAKhcAAh5LAKYnwFMAAh7DAKYtHDAAmwACHwgEUwACHwsApiyMLAGADwAEAAhTAAIfQwCmKtQkAFMAAh+fAKYqFCAAmwACH+gGHwACH+sApimFgA8AAWB2GwACIFMApihoUwACIKMApjAwNABTAAIhBwCmK8woAFMAAiFXAKYwyDgAAqf0GwABVSIDnwACIbMAAiH3AAIlHAACjZQFqwACIbWADwAD/aAIAAAEDwACIjcAAiUcAAAADAwPAAIiSAAAAgO5gA8AA/hsAwACInwAAAJ/DYAOfIgDAAIixAAAAnXBgA58iAABcAT4CPRzAAIjBLqFPAQABJ6NmAMAAVXw9HMAAiOIuoSwBAAE1AAAAAQBdA8AA/r8BYAPAAFgdARzAAIkOasAAiO1dA8AAW8EBYAPAAFgdwAEKcqEvAgACFsAAiRIuoTvAAFt1gMAAiRnAKY0nAMAAW8MjHMAAiSCDAMApjXlIAQABKwAAasAAiTVgA8AAWz7AAMOIgwDAKY15AWADwAD/aADAAFt/BsAAVUmA58AAiUzAAIldwACJ0wAAo2cBasAAiU1gA8AA/2gCAAABA8AAiXfAAInTAAAAAQEBwACJfgAAAJKpYAOfIgAAXAE+Aj0cwACJiy6hTwEAASejaADAAFV8PRzAAImzLqEvAQABasAAicFgA8AAWz7AAMOIAMAAW4IGwABVSoDnwACJ2MAAienAAIohAACiMQFqwACJ2WADwAD/aAIAAAEDwACJ9cAAiiEAAAABAQHAAIn8AAAAkqlgA58iAABcAT4BPRzAAIoJLqFPAQABJ6IyAMAAVXwGwABVS4DnwACKJsAAijfAAIrUAACiwgFqwACKJ2ADwAD/aAIAAAEDwACKVMAAitQAAAABAQHAAIpbAAAAosNgA58iAABcAT4BScAAimchFsAAioIWwACKexbAAIp0FsAAimwuhEjAAFUGlXOpqIJJqpafuaisPgE9HMAAip0uosQBAAGAwACKxcApjwoAwABZQD8GwABVTIDnwACK2cAAiurAAIyEAACixQFqwACK2mADwAD/aAIAAAEDwACK9MAAjIQAAAACAgLAAIr7AAAAn8NgA58iAMAAiw0AAACixmADnyIAAFwBPgY9HMAAiyEuoU8BAAEnhNMAwABVfEnAAIs5IRbAAItUFsAAi00WwACLRhbAAIs+LoRIwABVBpVzqaiCSaqWn7morD4BPRzAAItvLqLHAQABgcAAi4nAKY+rAMAAWT4/TsAAi7TAAIu+AABbXQPAAP6/AWADwABYHQEmwACLtAEcwACLwC6hLwAAAADAAFuCXQPAAP6/AWADwABYHU7AAIvPwACL2gAAh3FgA8AA/hsBJsAAi88BHMAAi9wuoS8AAAAAwABbgmADwAD+G07AAIvuwACL8wAAgL1gA8AA/2gBHMAAi/UuoS8AAAAAwABbgknAAIwAJcAAjAmEwACMBMApkIpgA8AAW8w+AT0cwACMJC6hLAEAARTAAIwpwCmQigQBYAPAAFvMAMAAW38+AT0cwACMQy6hLAEAARzAAIxQFsAAjEguhEjAAFUGqVoDAAOEwACMXcApkIqCwACMY8ApkB2DwACMbsApkFoAqfAAwABbfwbAAFVNgOfAAIyJwACMmsAAjTwAAMAAQEkBasAAjIpgA8AA/2gCAAABA8AAjKXAAI08AAAAAQEBwACMqgAAAIDuYAPAAP4bAABcAT4CPRzAAIy3LqFPAQABJ8AAQEoAwABVfD0cwACM0y6hLAEAATUAAAABAF0DwAD+vwFgA8AAV/IBHMAAjQRqwACM3l0DwABbwQFgA8AAV/LAAQpJoS8CAAIWwACNCC6hO8AAW3WAwACND8ApkWkAwABbwyMcwACNFoEAwCmRoUgBAAErAAAfwACNJcAAW9IBAAEcwACNNJSBxgAAAADAAP4+AIEAwCmRoQFgA8AA/2gAwABbfwbAAFVOgOfAAI1BwACNUsAAjcAAAKP1AWrAAI1CYAPAAP9oAgAAAQPAAI1nwACNwAAAAAEBAcAAjW4AAACSqWADnyIAAFwBPgI9HcAAjYGj9QEAAYDAAI2XwCmSZgDAAFuVPRfAAI2jLsAAQNAqwABVCgbAAFVPgOfAAI3FwACN1sAAjkkAAKLWAWrAAI3GYAPAAP9oAgAAAQPAAI3nwACOSQAAAAEBAcAAje4AAACSqWADnyIAAFwBPgI9HMAAjfsuoU8BAAEnotcAwABVfD0cwACOGi6hLAEAARzAAI4nFsAAjh8uhEjAAFUGqV0BAAEWwACOOYDAAI4zwCmS2IdxnysAqfIAwABbfwbAAFVQgOfAAI5OwACOX8AAkCsAAKLtAWrAAI5PYAPAAP9oAgAAAQPAAI5zwACQKwAAAAUFBcAAjnoAAACSqWADnyIAwACOjAAAAIJrYAPAAFsKAMAAjpgAAACi7mADnyIAwACOswAAAKFiYAOfIgDAAI7JAAAAoWRgA58iAABcAT4CScAAjw0hFsAAjygWwACPIRbAAI8aFsAAjxIuhEjAAFUGlXOpqIJJqpafuaisPgE9HMAAj0MuoWYBAAGCwACPYsApk48AwABZPz89HMAAj3wuoSwBAAEcwACP4xzAAI+uIyEcwACPkYPAAI+CwCmTnUgBAAErAMAA/3VqwACPm2ADwAD+G4FXkwFgA8AA/huBBgEAASMhHMAAj8eCwACPucApk49IAQABKwDAAP91asAAj9FgA8AA/huFIZMBYAPAAP4bAMAA/jSBBgEAAR7AAI/2sCkBAAE1AAAAAQBgA58iAYTAAJAOwCmTqyMcwACQH4UAwCmUlkgBAAErAAArFsAAkB+FAMAplJaCYp88AWADwAEAAgAAwAD+NADAAFt/BsAAVVGA58AAkDDAAJBBwACSvQAAou8BasAAkDFgA8AA/2gCAAABA8AAkFPAAJK9AAAABwcHwACQYQAAAKLwYAOfIgDAAJB6AAAAovFgA58iAMAAkJcAAACiX2ADnyIAwACQrgAAAKLyYAOfIgDAAJDMAAAAovNgA58iAMAAkPYAAACCa2ADwABarQDAAJENAAAAovRgA8AAWwoAAFwBPgc9HMAAkR8uoU8BAAEnovUAwABVfE7AAJFGwACRUQAAh3FgA8AA/hsBJsAAkUYBHMAAkVMuoS8AAAAAwABbgmADwAD+G07AAJFlwACRagAAgL1gA8AA/2gBHMAAkWwuoS8AAAAAwABbgk7AAJGDwACRiAAAgpRgA8AAWB0BJsAAkYMBHMAAkYouwABA8wEAARzAAJGfLqEvAAAAAMAAW4IAwABVN2ADwABYHU7AAJGvwACRuQAAomJgA8AA/hsBJsAAka8BHMAAkbsuoS8AAAAAwABbgmADwAD+G07AAJHcwACR5QAAhvddA8AA/r8BYAPAAFfPASbAAJHcARzAAJHnLqEvAAAAAMAAW4JdA8AA/r8BYAPAAFfPScAAkfIlwACR+xTAAJH2wCmVxAgAYAPAAFvMPgE9HMAAkhYuoSwBAAEUwACSG8AplcQIAWADwABbzADAAFt/PgE9HMAAkjUuoSwBAAEcwACSQhbAAJI6LoRIwABVBqmjBwAHFMAAklXAKZZaCwAUwACSX8AplioKABTAAJJqwCmV6AkAJsAAknABFMAAknDAKZXECABgA8ABAAIhHMAAkoyAwACSgMAplRRIAQABKwDAAP91h8AAkpXAKZWUg8AAkqHAKZU+AKoFAMAAW38GwABVUoDnwACSwsAAktPAAJMcAACjAgFqwACSw2ADwAD/aAIAAAEDwACS/cAAkxwAAAAAAAAAXAE+AAbAAFVTgOfAAJMhwACTMsAAk7IAAKMDAWrAAJMiYAPAAP9oAgAAAQPAAJNawACTsgAAAAAAAABcAT4BPRzAAJNjLqFPAQABJ6MEAMAAVXwGwABVVIDnwACTt8AAk8jAAJREAACjBgFqwACTuGADwAD/aAIAAAEDwACT48AAlEQAAAACAgLAAJPqAAAAlftgA58iAMAAk/gAAACSqWADnyIAAFwBPgE9HMAAlAUuoU8BAAEnowcAwABVfAbAAFVVgOfAAJRJwACUWsAAlNQAAKMIAWrAAJRKYAPAAP9oAgAAAQPAAJR7wACU1AAAAAEBAcAAlIIAAACSqWADnyIAAFwBPgE9HMAAlI8uoU8BAAEnowkAwABVfAbAAFVWgOfAAJTZwACU6sAAmGwAAKL7AWrAAJTaYAPAAP9oAgAAAQPAAJUFwACYbAAAAAMDA8AAlREAAACA7mADwAD+GwDAAJUeAAAAn8NgA58iAMAAlTAAAACdcGADnyIAAFwBPgQ9HMAAlUAuoU8BAAEnovwAwABVfE7AAJWAwACVhQAAgmtgA8AAWq0BIx7AAJWHwABbKAIAAieaEoHAAJWVwCmY/QBqwACVv2ADwABarcAAxTNqwACV62ADwABarcAAxUoBYAPAAFqtTsAAlyfAAJcyAACa6l0DwAD+vwFgA8AAVxYBHMAAl25qwACXQl0DwABbwQFgA8AAVxbAAMVeoS8CAAIWwACXci6hO8AAW3WAwACXecApmO0AwABbw0nAAJeFHMAAl5SEwACXicApmYZIAQABKwDAAP7pPgE9HMAAl6UuoSwBAAEfwACXrsAAW9IBAAEewACXvcAAWywBAAGBwACXzMApmP0AAADAAFt/PgJGwACX7sAAmCPAAJgKAAAAgO1gA8AAVxYAhMAAmBfAKZmGPgE9F8AAmDeFwACYLcApmjiCa4PAAJg+wCmZM8AAVxw9HMAAmFIuoSwBAAGEwACYV8ApmYYAwABbfwbAAFVXgOfAAJhxwACYgsAAowcAAKMLAWrAAJhyYAPAAP9oAgAAAQPAAJiVwACjBwAAAAQEBMAAmKEAAACA7mADwAD+GwDAAJiuAAAAn8NgA58iAMAAmMAAAACdcGADnyIAwACY1QAAAIJrYAPAAFsKAABcAT4GPRzAAJjhLqFPAQABJ6MMAMAAVXxOwACZIgAAAKF3XQPAAP6/AWADwABXFgBJwACZLxzAAJk5gMAAmTPAKZrBSAEAAZQAwAD/Pz4CTsAAmU7AAJlTAACB6mADwAD/aAEcwACZVS6hLwAAAADAAFuCScAAmWIlwACZa4XAAJlmwCmbTl0DwAD+vwFgA8AAVxY+AT2MwACZlsApmxcUwACZoMApm04FAV0DwAD+vwFgA8AAVxZJwACZsyElwACZvIXAAJm3wCmbTmADwABbzD4DQCEcwACZ5oXAAJnhwCmbTkgBAAErAMAA/3XAAJnhwACZ7QA9jMAAmfjAKZsXHsAAmgbAAPgWAQFgA8AAVxYBlAA9HMAAmjaEwACaL8ApmxeAvwIAApMmwACaNgGFwACaPMApm05gA8AAVxYAwAD+zz9JwACaVRzAAJpfgMAAmlnAKZrBgJcBAAGUAMAA/0s+A07AAJpzwACaeAAAgepgA8AA/2gBHMAAmnouoS8AAAAAwABbgj2IwACah8ApmsEcwACajIDAAJqHwCmawYGNAQABlADAAP9CScAAmpYlwACan4XAAJqawCmcY2ADwABbzD4BPRzAAJq8LsAAQDkBAAGAwACaxMApmsEAwABbeUnAAJrZJcAAmuKFwACa3cApnGNdA8AA/r8BYAPAAFcWPgI9jMAAmw3AKZsXHMAAm1ZqwACbHV0DwABbwQFgA8AAVxbAAMVeow8DAAMWwACbYC6hO8AAW3WAwACbZ8ApmsEWwACbcxTAAJtuwCmcYwUBXQPAAP6/AWADwABXFmHAAP7vAMAAW8RJwACbhCEcwACbkITAAJuIwCmbF0gBAAErAMAA/uk+AT0cwACbrYTAAJulwCmbF4NkAwADgMAAm7bAKZrBFsAAm8WEwACbvcApmxdhwAD+7xTAAJvNwCmcYwUBXQPAAP6/AWADwABXFgDAAP7kPz4CPYzAAJv1wCmbFxzAAJw+asAAnAVdA8AAW8EBYAPAAFcWwADFXqMPAwADFsAAnEguoTvAAFt1gMAAnE/AKZrBlADAAFvEScAAnGIhHMAAnG6EwACcZsApmxdIAQABKwDAAP7pPgE9HMAAnIqEwACcg8ApmxeAvwIAAoDAAJyLwCmawSbAAJyKAYXAAJyUwCmcY2ADwABXFgDAAP7PPz9JwACctiEcwACcwoTAAJy6wCmbF0gBAAErAMAA/uk+AkAWwACc4oTAAJzawCmbF4O3wAD+osAAnNrAAJzsAEnAAJz1HMAAnQgWwACdAYTAAJz5wCmbF2HAAP7vSAEAAZUAwAD/Pz4BScAAnVgiIRzAAJ1sFsAAnWccwACdY4TAAJ1cwCmbF0sBAAGTAMAA/s6AvcAAVxtIAQABKwDAAQARABzAAJ2HFsAAnYIcwACdfoTAAJ13wCmbF0sBAAGTAMAA/s6AvcAAVxtIAQABFsAAnZUcwACdkYTAAJ2KwCmbF0sBAAGUAMAA/s6AvcAAVxsAwAEAET4BPRzAAJ2nLp7bBAADHMAAneFqwACdwV0DkdEBYQMBYAPAAQACYAORuq7OiD0BAAEWwACd+hzAAJ32hMAAne/AKZsXSwEAAZQAwAD+zoC9wABXGwCR1RbAAJ4aHMAAnhaEwACeD8ApmxdLAQABlADAAP7Oh3GvohbAAJ5EFsAAnj8cwACeO4TAAJ40wCmbF0sBAAGUAMAA/s6AvcAAVxthwAEABgGCVzHAAJ5jYAOR2AEcwACe4xzAAJ6vasAAnnVdA5HRAWEDAWADwAEAAmADkbqvGog9AQABFsAAnsgcwACexITAAJ69wCmbF0sBAAGUAMAA/s6AvcAAVxsAkdWCXwMAAxbAAJ8JLoCswABVDxbAAJ8ZHMAAnxWEwACfDsApmxdLAQABkwDAAP7Oh3GvohbAAJ81FsAAnzAcwACfLITAAJ8lwCmbF0sBAAGTAMAA/s6AvcAAVxthwAEABgCRwcAAVXk/ScAAn2YcwACfeRbAAJ9yhMAAn2rAKZsXYcAA/u+AlwEAAZUAwAD/Sz4CTsAAn6zAAJ+2AACuTl0DwAD+8QJgA8ABAAJgA8AAVxYBMsAAn+RgA8ABAAJgA8AAVxYARsAAn/AAwACgDAAAAJoaYAPAAFcWAITAAKAWwCmbF0E+AknAAKArHMAAoDsWwACgNobAAKAvwCmhNYC9wABXG0gBAAErAMABABFCwACgRAA/ScAAoFgcwACgZoXAAKBcwCmg/YdkAQABFsAAoHmGwACgcsApoTWAvcAAVxsAwAD/BD4BPRzAAKCOLp7bBAADHMAAoMpqwACgql0DkdEBYQMBYAPAAQACYAORuq7OiD0BAAEWwACg34bAAKDYwCmhNYC9wABXGwCR1RbAAKD9hsAAoPbAKaE1h3GvohbAAKElFsAAoSCGwAChGcApoTWAvcAAVxthwAEABgGCVzHAAKFGYAOR2AEcwAChyBzAAKGWasAAoVpdA5HRAWEDAWADwAEAAmADkbqvGog9AQABFsAAoauGwAChpMApoTWAvcAAVxsAkdWCXwMAAxbAAKHVLoCswABVDxbAAKHxHMAAoeOFwACh2sApoP1LAQABFsAAoeuGwACh5MApoTWAvcAAVxsAwAD/BYdxr6IWwACiMxbAAKIuHMAAoiCFwACiF8ApoP1LAQABFsAAoiiGwACiIcApoTWAvcAAVxsAwAD/BYC9wABXG2HAAQAGAJHBwABVeT4BPRzAAKJ3hcAAom7AKaD9gL8CAAIWwACif4bAAKJ4wCmhNYC9wABXG4bAAKKHwCmhNQDAAP8GPz89HMAAorcuoSwBAAEWwACix4HAAKK8wCma0YdxnysAwABbfz0cwACi2C6hLAEAATUAAAABAF0DwAD+vwFgA8AAVxYBhMAAot3AKZsXIxzAAKLlhQDAKaNrSAEAASsAAGrAAKLyYAPAAFs+wADlf4UAwCmjawFgA8AA/2gAwABbfwbAAFVYgOfAAKMMwACjHcAAo6UAAMAAQFIBasAAow1gA8AA/2gCAAABA8AAozXAAKOlAAAAAgICwACjPAAAAJKpYAOfIgDAAKNOAAAAgmtgA8AAWwoAAFwBPgI9HMAAo1ouoSwBAAEWwACjZYDAAKNfwCmj84dxnysAwABbfz0dwACjfMAAQFICAAKAwACjlcApo/OBwACjnMAppAEAwABbmAbAAFVZgOfAAKOqwACju8AApFwAAKOxAWrAAKOrYAPAAP9oAgAAAQPAAKPEwACkXAAAAAUFBcAAo8sAAACjsGADnyIAwACj4QAAAIJrYAPAAFqbAMAAo+0AAACjjGADnyIAwACkCgAAAKOyYAOfIgDAAKQcAAAAo7NgA58iAABcAT4BPRzAAKQyLqFPAQABJ6DhAMAAVXwGwABVWoDnwACkYcAApHLAAKcVAADAAECzAWrAAKRiYAPAAP9oAgAAAQPAAKR5wACnFQAAAAMDA8AApIAAAADAAEC0YAOfIgDAAKSTAAAAoqNgA58iAMAApKIAAACA7mADwAD+GwAAXAE+Cj0cwACkry6hTwEAASfAAEC1AMAAVXxOwACkzsAApOMAAKkKYAPAAQACAR7AAKTlwABVewEAAYDAAKT9wCmlLABOwAClJsAApTgAAKmbXQPAAP6/AWADwABW9AEcwAClbmrAAKVIXQPAAFvBAWADwABW9MABCn+hLwIAAhbAAKVyLqE7wABbdYLAAKV5wCmlSgDAAFvDTsAApYnAAKWUAACHcWADwAD+GwEmwACliQEcwAClli6hLwAAAADAAFuCYAPAAP4bTsAApcDAAKXQAACo2mADwAD+GwEWwACl3oDAAKXSwCmlLIdxnytOwACl9cAApfoAAIC9YAPAAP9oARzAAKX8LqEvAAAAAMAAW4JOwACmHcAApiYAAIb3XQPAAP6/AWADwABXzwEmwACmHQEcwACmKC6hLwAAAADAAFuCXQPAAP6/AWADwABXzz0cwACmMy6huAEAARbAAKZKgMAApj7AKaUsh3GfKwDAAFuKScAAplslwACmZIfAAKZfwCmmS2ADwABbzErAAKZ3AD89HMAAposWwACmgy6ESMAAVQapmgcAB4PAAKaTwCmldhTAAKapwCmmbwgAJsAAprMBh8AAprPAKaZLYAPAAQAChMAAprnAKaWghsAAptTAKaYlhcAApuXAKaX1NQAAAAEAYAOfIgE1AAAAAQBgA58iAYHAAKbxwCmlPCMcwACm/BQAwCmnVgkASAEAASsAACsWwACm/BQAwCmnVgkAnXmfLwFgA58iIxzAAKcGFADAKadLCQBIAQABKwAAKxbAAKcGFADAKadLCQCHcZ8rAWADwAD+GwCqAgbAAFVbgOfAAKcawACnK8AAp74AAMAAQQYBasAApxtgA8AA/2gCAAABA8AAp0HAAKe+AAAAAQEBwACnSAAAAJKpYAOfIgAAXAE+AT0cwACnXRbAAKdVLoRIwABVBqkfAwACasAAp4tgA6oswADg8CepnwGpICqp1gbAAFVcgOfAAKfDwACn1MAAqKAAAKLMAWrAAKfEYAPAAP9oAgAAAQPAAKflwACooAAAAAEBAcAAp+wAAACfw2ADnyIAAFwBPgI9HMAAp/4uoU8BAAEnoswAwABVfD0cwACoKxbAAKgjLoRIwABVBqkfAwACasAAqGJgA6oswADhBCepogGpICqp1gbAAFVdgOfAAKilwACotsAAqZ0AAKL/AWrAAKimYAPAAP9oAgAAAQPAAKjXwACpnQAAAAEBAcAAqN4AAACSqWADnyIAAFwBPgI9HMAAqOsuoU8BAAEnov8AwABVfD0cwACpKBbAAKkgLoRIwABVBqkfAwACasAAqV9gA6oswADhBCepogGpICqp1gbAAFVegOfAAKmiwACps8AAq4sAAKLTAWrAAKmjYAPAAP9oAgAAAQPAAKnCwACriwAAAAICAsAAqckAAACi1GADnyIAwACp3gAAAKLGYAOfIgAAXAE+Bz0cwACp8i6hTwEAASeGlQDAAFV8ScAAqhIhFsAAqi0WwACqJhbAAKofFsAAqhcuhEjAAFUGlXOpqIJJqpafuaisPgE9HMAAqkguoscBAAGBwACqYsApqZYAwABZPj9OwACqmMAAqqAAAKF3XQPAAP6/AWADwABXFgEmwACqmAEcwACqoi6hLwAAAADAAFuCXQPAAP6/AWADwABXFj0cwACqrS6hLwAAAADAAFuCTsAAqtbAAKrhAACFVWADwABYHQEmwACq1gEcwACq4y6hLwAAAADAAFuCYAPAAFgdTsAAqwjAAKsWAACizV0DwAD+vwFgA8AAWEMBJsAAqwgBHMAAqxguoS8AAAAAwABbgl0DwAD+vwFgA8AAWEM9HMAAqyMuoSwBAAEcwACrMBbAAKsoLoRIwABVBqmgBAAEg8AAq0nAKapXhMAAq1XAKaqHgsAAq2TAKaoIFsAAq3uAwACrbcApqYiHcZ8rAKoEAMAAW38GwABVX4DnwACrkMAAq6HAAK2EAACjAAFqwACrkWADwAD/aAIAAAEDwACrwMAArYQAAAACAgLAAKvHAAAAol9gA58iAMAAq9gAAACi5GADnyIAAFwBPgc9HMAAq+guoU8BAAEnowEAwABVfE7AAKw1wACsPQAAoXddA8AA/r8BYAPAAFcWASbAAKw1ARzAAKw/LqEvAAAAAMAAW4JdA8AA/r8BYAPAAFcWTsAArE7AAKxcAADAAED7YAPAAP4bASbAAKxOARzAAKxeLqEvAAAAAMAAW4JgA8AA/htOwACsdcAArIAAAIVVYAPAAFgdASbAAKx1ARzAAKyCLqEvAAAAAMAAW4JgA8AAWB1OwACsp8AArLUAAKLNXQPAAP6/AWADwABYQwEmwACspwEcwACsty6hLwAAAADAAFuCXQPAAP6/AWADwABYQ0nAAKzCIRbAAKzdFsAArNYWwACszxbAAKzHLoRIwABVBpVzqaiCSaqWn7morD4BPRzAAKz4LqLHAQABgcAArRLAKatfAMAAWT4/PRzAAK0nLqEsAQABHMAArTQWwACtLC6ESMAAVQapoAQABITAAK1NwCmr94XAAK1ZwCmsJ4LAAK1owCmrh4PAAK1xwCmrxQCqBADAAFt/BsAAVWCA58AArYnAAK2awAC16gAAwABAVAFqwACtimADwAD/aAIAAAEDwACtrsAAteoAAAADAwPAAK28AAAAwABAVWADnyIAwACt0gAAAJX7YAOfIgDAAK3gAAAAnXBgA58iAABcAT4KPRzAAK3wLqFPAQABJ8AAQFQAwABVfE7AAK4fwACuNAAAqQpgA8ABAAIBHsAArjbAAFV7AQABgMAArk7AKa00AE7AAK59AAAAos1dA8AA/r8BYAPAAFhDAE7AAK6XAAAAgL1gA8AA/2gATsAArqUAAACHcWADwAD+GwBOwACuyQAAAIVWYAPAAFevAEnAAK7bHMAAruaBwACu38AprURIAQABKwDAAP91PglOwACvFMAArxwAAKF3XQPAAP6/AWADwABXFgEmwACvFAEcwACvHi6hLwAAAADAAFuCXQPAAP6/AWADwABXFj0cwACvKy6hLwAAAADAAFuCPYzAAK9KwCmtpibAAK9KARzAAK9aLqEvAAAAAMAAW4JdA8AA/r8BYAPAAFhDPY7AAK9nwCmtzybAAK9nARzAAK90LqEvAAAAAMAAW4JgA8AA/hs9jcAAr4HAKa2+HMAAr4guoS8AAAAAwABbgk7AAK+hwACvrAAAhVVgA8AAWB0BJsAAr6EBHMAAr64uoS8AAAAAwABbgmADwABYHUnAALAbJcAAsCSFwACwH8Aprb5gA8AAW8w+Az0cwACwQS6hLwAAAADAAFuCPRzAALBlFsAAsF0uhEjAAFUGqSICAAJqwACwnmADqizAAODwJ6kmAKnXSsAAsMIAPz0cwACw4BbAALDYLoRIwABVBqkfAwACasAAsRlgA6oswADhBCepogGpICqp1j2PwACxXcApreAcwACxfhbAALF2LoRIwABVBqmgBAAEFMAAsY7AKa7MCQArFMAAsaDAKa4QCACGwACxqcAprc8AqgQ+Bk7AALHQwACx1QAAgpRgA8AA/2gBHMAAsdcuoS8AAAAAwABbgj2MwACx5MApraYmwACx5AEcwACx9C6hLwAAAADAAFuCXQPAAP6/AWADwABYQz2OwACyAcAprc8mwACyAQEcwACyDi6hLwAAAADAAFuCYAPAAP4bPY3AALIbwCmtvhzAALIiLqEvAAAAAMAAW4JJwACyLyXAALI4hcAAsjPAKa2+YAPAAFvMPgM9HMAAslUuoS8AAAAAwABbgj0cwACyeRbAALJxLoRIwABVBqkiAgACasAAsrJgA6oswADhBCepJgCp10rAALLbAD9JwACy8SXAALL6FMAAsvXAKa/LCABgA8AAV68+AT2PwAC0Y8ApreAUwAC0csApr8sIAWADwABXrz4BPRzAALTBLp7bAwADasAAtMxgA5HFwACSRhbAALTugcAAtOfAKa1Eh3GfKxbAALUBgcAAtPrAKa1EYZ87AMAAVXlOwAC1MsAAtTsAAIb3XQPAAP6/AWADwABXzwEmwAC1MgEcwAC1PS6hLwAAAADAAFuCXQPAAP6/AWADwABX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wCnafik9HMAA6VCDwADpScAp2pWCRgAAAADAAQBkP0nAAOlrFsAA6XaDwADpb8Ap2pWDt8ABAGk+AT0cwADplYPAAOmOwCnalYIDAAAAAMABAGM/PRzAAOm5g8AA6bLAKdqVgo4BAAGEwADpv8Ap2tYAwAEAYD89icAA6dbAKdozFsAA6eqBwADp4cAp2jODtZ89SsAA6foBHMAA6giDwADqAcAp2pUjAAAAAMABAGUGwABVfIDnwADqG8AA6izAAOp0AAChTwFqwADqHGADwAD/aAIAAAEDwADqNsAA6nQAAAABAQHAAOo+AAAAgL1gA8ABAAIAAFwBPgAAACkphwApKc4AKSoUACkrrgApLOEAKS2wACkuEAApLwUAKS/6ACkwyQApMnAAKTNIACk19AApNscAKTiUACk5iwApOkEAKTtmACk8CAApPJYAKT5TACk+xAApPxEAKUDXAClBugApQ0AAKUQtAClGhgApR/UAKUhsAClJ2QApSwMAKUxxAClN3gApTsEAKU9AAClPvQApUJAAKVF/AClVhAApVfYAKVqBAClbSAApXnkAKWI8ACljXQApZCkAKWnVAClqqQApaxgAKWvTAClsmQApbSwAKXLpACmHvgApiVIAKYzxACmN+gApjncAKY7UACmPZwApkTEAKZIwACmSogApkzsAKZTeACmXZQApl6AAKZfvACmYWgApmLcAKZqLACmjuwAppF0AKaT0ACmnxgApqD4AKajIACmpUgApqxsAKaz8ACmx8gAptX4AKbmsACm8igApvdQAKb70ACnARAApxwUAKcjMACnKtgApy9sAKc/IACnQVQAp0dQAKdKUACnTDwAp014AKdPQACnURAAp1gsAKdZeACnW6wAp11wAKdftACnYWAAp2UQAKdnuACncUAAp3JsAAABtAAAAAYDnACneWwApJn8AKSgCACneWAAAAAIAKd5bAAAAAAACBsAAVX/AAEEYgOgAAAmA+gAAgi4AAQEBhHuBKgAAtpMAAQEBhLyBWAAAnYcAAQEClU6dJ4GWAADAAFPhAAEBAajwgbwAAKCeAAEBAZVlgeIAAJ1/AAEBBofVgimIBI4KjieOL4LhAACSDAABAQGCEoMLAACvjwABAQmesp7HnsmfcaivqOufb6jMns2D6AAAwABWrgAAAAAAAwLAAFWAgOiEBIQToXsH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LsAAQboBAAEnwABAVgDAAFh3BsAAWNGBAsAARqTAAEapwABG9wAAwABATgAAAAEDwABGvsAARvcAAAABAQHAAEbFAAAAwABATGADnyIAAFwBPgE9HMAARtguwABBugEAASfAAEBPAMAAWHcGwABY0oECwABHJ8AARyzAAEdtAADAAEBQAAAAAQPAAEdDwABHbQAAAAAAAABcAT4BPRzAAEdMLsAAQboBAAEnwABAUQDAAFh3BsAAWNOBAsAASJDAAEiVwABI5gAAwABA6QAAAAEDwABIr8AASOYAAAADAwPAAEi9AAAAgphgA58iAMAASMoAAADAAECqYAOfIgDAAEjfAAAAgL1gA58iAABcAT4ABsAAWNSBAsAASXrAAEl/wABJ7QAAwABASwAAAAEDwABJpMAASe0AAAABAQHAAEmrAAAAwABATGADnyIAAFwBPgE9HMAASb4uwABBugEAASfAAEBNAMAAWHcGwABY1YECwABL+MAAS/3AAEyfAADAAEC2AAAAAQPAAEwVwABMnwAAAAUFBcAATBwAAACCmGADnyIAwABMKQAAAMAAQLdgA58iAMAATD0AAACV+2ADnyIAwABMUQAAAMAAQLhgA58iAMAATGoAAACdcGADnyIAAFwBPgE9HMAATHouwABBugEAASfAAEC5AMAAWHcGwABY1oECwABMpMAATKnAAEzHAADAAEHeAAAAAQPAAEyywABMxwAAAAEBAcAATLkAAADAAEB6YAOfIgAAXAE+AAbAAFjXgQLAAE0vwABNNMAATWkAAMAAQHkAAAABA8AATTvAAE1pAAAAAQEBwABNQgAAAMAAQHpgA58iAABcAT4BPRzAAE1VLsAAQboBAAEnwABAewDAAFh3BsAAWNiBAsAATW7AAE1zwABNtwAAwABAdAAAAAEDwABNh8AATbcAAAABAQHAAE2MAAAAgO5gA8AA/hsAAFwBPgE9HMAATZkuwABBugEAASfAAEB1AMAAWHcGwABY2YECwABNvMAATcHAAE3dAADAAEHfAAAAAQPAAE3OwABN3QAAAAEBAcAATdUAAACSqWADnyIAAFwBPgAGwABY2oECwABN4sAATefAAE4cAADAAEBJAAAAAQPAAE3ywABOHAAAAAEBAcAATfcAAACA7mADwAD+GwAAXAE+AT0cwABOBC7AAEG6AQABJ8AAQEoA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V2ADwABawAAAXAE+AT0cwACmAS7AAEG6AQABJ61DAMAAWHcGwABZaIECwACmIMAApiXAAKaeAACjKAAAAAEDwACmPMAApp4AAAACAgLAAKZKAAAAoylgA58iAMAApmMAAACjKmADnyIAAFwBPgE9HMAApn0uwABBugEAASejKwDAAFh3BsAAWWmBAsAApqPAAKaowACm9gAAotwAAAABA8AAprjAAKb2AAAAAgICwACmvwAAAJ3YYAOfIgDAAKbRAAAAot1gA58iAABcAT4BPRzAAKbcLsAAQboBAAEnot4AwABYdwbAAFlqgQLAAKb7wACnAMAAp0AAAKKvAAAAAQPAAKcRwACnQAAAAAEBAcAApxgAAACSqWADnyIAAFwBPgE9HMAApyUuwABBugEAASeisADAAFh3BsAAWWuBAsAAp0XAAKdKwACnvgAAo9oAAAABA8AAp17AAKe+AAAAAwMDwACnawAAAKPbYAPAAPxVAMAAp3wAAACj3GADnyIAwACnkAAAAJ1wYAOfIgAAXAE+AT0cwACnoC7AAEG6AQABJ4Y7AMAAWHcGwABZbIECwACnw8AAp8jAAKhFAACj4wAAAAEDwACn38AAqEUAAAADAwPAAKfsAAAAo9tgA8AA/FUAwACn/QAAAKPkYAOfIgDAAKgUAAAAnXBgA58iAABcAT4BPRzAAKgkLsAAQboBAAEno+UAwABYdwbAAFltgQLAAKhKwACoT8AAqJUAAKOtAAAAAQPAAKhjwAColQAAAAEBAcAAqGoAAACSqWADnyIAAFwBPgE9HMAAqHcuwABBugEAASeGMwDAAFh3BsAAWW6BAsAAqJrAAKifwACozgAAo68AAAABA8AAqKrAAKjOAAAAAgICwACosQAAAKOwYAOfIgDAAKjHAAAAgmtgA8AAWpsAAFwBPgAGwABZb4ECwACo08AAqNjAAKllAACjsQAAAAEDwACo4cAAqWUAAAAFBQXAAKjoAAAAo7BgA58iAMAAqP4AAACCa2ADwABamwDAAKkKAAAAo4xgA58iAMAAqScAAACjsmADnyIAwACpOQAAAKOzYAOfIgAAXAE+AT0cwACpTy7AAEG6AQABJ6DhAMAAWHcGwABZcIECwACp58AAqezAAKowAACisgAAAAEDwACp/8AAqjAAAAABAQHAAKoGAAAAkqlgA58iAABcAT4BPRzAAKoTLsAAQboBAAEnorMAwABYdwbAAFlxgQLAAKq0wACqucAAqvcAAKI2AAAAAQPAAKrJwACq9wAAAAEBAcAAqtAAAACSqWADnyIAAFwBPgE9HMAAqt0uwABBugEAASeiNwDAAFh3BsAAWXKBAsAAqvzAAKsBwACrgQAAopoAAAABA8AAqxLAAKuBAAAABAQEwACrHgAAAIDuYAPAAP4bAMAAqysAAACim2ADnyIAwACrPgAAAKKcYAOfIgDAAKtSAAAAop1gA58iAABcAT4BPRzAAKtmLsAAQboBAAEnop4AwABYdwbAAFlzgQLAAKuGwACri8AArM0AAKKnAAAAAQPAAKugwACszQAAAAUFBcAAq6oAAACA7mADwAD+GwDAAKu7AAAAoqNgA58iAMAAq9AAAACinGADnyIAwACr6AAAAKKoYAOfIgDAAKyXAAAAoqlgA8AA/FUAAFwBPgE9HMAArK4uwABBugEAASeiqgDAAFh3BsAAWXSBAsAArNLAAKzXwACtFwAAorUAAAABA8AArOjAAK0XAAAAAQEBwACs7wAAAJKpYAOfIgAAXAE+AT0cwACs/C7AAEG6AQABJ6K2AMAAWHcGwABZdYECwACtHMAArSHAAK13AACiLAAAAAEDwACtM8AArXcAAAACAgLAAK06AAAAoi1gA58iAMAArUwAAACiLmADwAD8VQAAXAE+AT0cwACtWy7AAEG6AQABJ6IvAMAAWHcGwABZdoECwACtfMAArYHAAK3FAACjbAAAAAEDwACtlMAArcUAAAABAQHAAK2bAAAAod9gA58iAABcAT4BPRzAAK2oLsAAQboBAAEno20AwABYdwbAAFl3gQLAAK3KwACtz8AArfAAAKNFAAAAAQPAAK3hwACt8AAAAAEBAcAAregAAACSqWADnyIAAFwBPgAGwABZeIECwACt9cAArfrAAK47AACjTAAAAAEDwACuCsAArjsAAAABAQHAAK4RAAAAkqlgA58iAABcAT4BPRzAAK4eLsAAQboBAAEno00AwABYdwbAAFl5gQLAAK5AwACuRcAAroUAAMAAQEAAAAABA8AArlbAAK6FAAAAAQEBwACuXQAAAJKpYAOfIgAAXAE+AT0cwACuai7AAEG6AQABJ8AAQEEAwABYdwbAAFl6gQLAAK6KwACuj8AAryEAAMAAQEQAAAABA8AArsnAAK8hAAAAAQEBwACu0AAAAJKpYAOfIgAAXAE+AT0cwACu3S7AAEG6AQABJ8AAQEUAwABYdwbAAFl7gQLAAK8mwACvK8AAr2gAAMAAQEYAAAABA8AArzfAAK9oAAAAAQEBwACvPgAAAMAAQEdgA58iAABcAT4BPRzAAK9SLsAAQboBAAEnwABASADAAFh3BsAAWXyBAsAAr23AAK9ywACvugAAo/UAAAABA8AAr4fAAK+6AAAAAQEBwACvjgAAAJKpYAOfIgAAXAE+AT0cwACvmy7AAEG6AQABJ6P2AMAAWHcGwABZfYECwACvv8AAr8TAAK/+AACkAgAAAAEDwACv0sAAr/4AAAABAQHAAK/ZAAAAkqlgA58iAABcAT4BPRzAAK/mLsAAQboBAAEnhRIAwABYdwbAAFl+gQLAALADwACwCMAAsEYAAKQDAAAAAQPAALAYwACwRgAAAAEBAcAAsB8AAACSqWADnyIAAFwBPgE9HMAAsCwuwABBugEAASekBADAAFh3BsAAWX+BAsAAsI/AALCUwACw7QAAwABAbwAAAAEDwACwpsAAsO0AAAACAgLAALCtAAAAwABAcGADnyIAwACwxAAAAJKpYAOfIgAAXAE+AT0cwACw0S7AAEG6AQABJ8AAQHEAwABYdwbAAFmAgQLAALFowACxbcAAsdQAAMAAQHIAAAABA8AAsYbAALHUAAAAAgICwACxjQAAAMAAQHBgA58iAMAAsaQAAACSqWADnyIAAFwBPgE9HMAAsbEuwABBugEAASfAAEBzAMAAWHcGwABZgYECwACyY8AAsmjAALK+AAChxAAAAAEDwACyhMAAsr4AAAABAQHAALKLAAAAkqlgA58iAABcAT4BPRzAALKYLsAAQboBAAEnocUAwABYdwbAAFmCgQLAALNywACzd8AAs88AAKHHAAAAAQPAALOUwACzzwAAAAEBAcAAs5sAAACSqWADnyIAAFwBPgE9HMAAs6guwABBugEAASehyADAAFh3BsAAWYOBAsAAtNTAALTZwAC1FgAAoiAAAAABA8AAtOjAALUWAAAAAQEBwAC07wAAAKFYYAOfIgAAXAE+AT0cwAC0/S7AAEG6AQABJ6IhAMAAWHcGwABZhIECwAC1G8AAtSDAALVeAACiJQAAAAEDwAC1MMAAtV4AAAABAQHAALU3AAAAkqlgA58iAABcAT4BPRzAALVELsAAQboBAAEnoiYAwABYdwbAAFmFgQLAALVjwAC1aMAAtcsAAKNqAAAAAQPAALV9wAC1ywAAAAICAsAAtYQAAACSqWADnyIAwAC1nQAAAIJXYAPAAFrAAABcAT4BPRzAALWsLsAAQboBAAEno2sAwABYdwbAAFmGgQLAALXQwAC11cAAth0AAKO+AAAAAQPAALXkwAC2HQAAAAMDA8AAtekAAACjoWADwAD+GwDAALX5AAAAo79gA8AA/hsAwAC2EAAAAJ/CYAOfIgAAXAE+AAbAAFmHgQLAALYiwAC2J8AAtwoAAKPKAAAAAQPAALY0wAC3CgAAAAcHB8AAtkAAAACjoWADwAD+GwDAALZWAAAAo79gA8AA/hsAwAC2cwAAAKPLYAOfIgDAALaPAAAAo8xgA58iAMAAtqwAAACjzWADwAD+GwDAALbIAAAAn8JgA58iAMAAtuAAAACdcGADnyIAAFwBPgE9HMAAtvAuwABBugEAASeGTADAAFh3BsAAWYiBAsAAtw/AALcUwAC3dQAAo2kAAAABA8AAtyjAALd1AAAAAgICwAC3LwAAAJKpYAOfIgDAALdIAAAAgldgA8AAWsAAAFwBPgE9HMAAt1cuwABBugEAASeGCADAAFh3BsAAWYmBAsAAt3rAALd/wAC36QAAozMAAAABA8AAt6XAALfpAAAAAQEBwAC3rAAAAJKpYAOfIgAAXAE+AT0cwAC3uS7AAEG6AQABJ6M0AMAAWHcGwABZioECwAC37sAAt/PAALhHAACjLAAAAAEDwAC4DsAAuEcAAAABAQHAALgVAAAAkqlgA58iAABcAT4BPRzAALgiLsAAQboBAAEnoy0AwABYdwbAAFmLgQLAALhMwAC4UcAAuLkAAKMwAAAAAQPAALh2wAC4uQAAAAEBAcAAuH0AAACSqWADnyIAAFwBPgE9HMAAuIouwABBugEAASejMQDAAFh3BsAAWYyBAsAAuL7AALjDwAC48QAAowIAAAABA8AAuO3AALjxAAAAAAAAAFwBPgAGwABZjYECwAC49sAAuPvAALlhAACjAwAAAAEDwAC5I8AAuWEAAAAAAAAAXAE+AT0cwAC5LC7AAEG6AQABJ6MEAMAAWHcGwABZjoECwAC5ZsAAuWvAALnNAACjBgAAAAEDwAC5hsAAuc0AAAACAgLAALmNAAAAlftgA58iAMAAuZsAAACSqWADnyIAAFwBPgE9HMAAuaguwABBugEAASejBwDAAFh3BsAAWY+BAsAAudLAALnXwAC6NwAAowgAAAABA8AAufjAALo3AAAAAQEBwAC5/wAAAJKpYAOfIgAAXAE+AT0cwAC6DC7AAEG6AQABJ6MJAMAAWHcGwABZkIECwAC6PMAAukHAALqBAACi1gAAAAEDwAC6UsAAuoEAAAABAQHAALpZAAAAkqlgA58iAABcAT4BPRzAALpmLsAAQboBAAEnotcAwABYdwbAAFmRgQLAALqGwAC6i8AAuq0AAMAAQhAAAAABA8AAup7AALqtAAAAAQEBwAC6pQAAAJKpYAOfIgAAXAE+AAbAAFmSgQLAALqywAC6t8AAuyAAAKO5AAAAAQPAALrIwAC7IAAAAAMDA8AAus8AAACjumADnyIAwAC64QAAAKKZYAOfIgDAALryAAAAnXBgA58iAABcAT4BPRzAALsCLsAAQboBAAEnhmEAwABYdwbAAFmTgQLAALxWwAC8W8AAvK0AAKKFAAAAAQPAALxxwAC8rQAAAAMDA8AAvIEAAAAiYAORugDAALyQAAAAoFlgA58iAMAAvKIAAACdcGADnyIAAFwBPgAGwABZlIECwAC9qcAAva7AAL4XAADAAEIRAAAAAQPAAL2+wAC+FwAAAAEBAcAAvcoAAACSqWADoc4AAFwBPgE9HMAAvdcuooUDAAMWwAC99IDAAL3uwCu0zIJhodKAwAC+BsArtMyAwAC+DcArtMwAwABZkwbAAFmVgQLAAL4cwAC+LcAAvsQAAK2kAWrAAL4dYAPAAP9oAgAAAQPAAL5AwAC+xAAAAAQEBMAAvlAAAAAiYAORugDAAL5fAAAIhGBgA58iAMAAvm0AAACfwWADwAD+GwDAAL5/AAAAYWADwAD+GwAAXAE+AT0cwAC+jS6ihQMAA4DAAL6kwCu1SoHAAL6twCu1V4HAAL63wCu1VwDAAFmTBsAAWZaBAsAAwAHAAMAGwADAcgAAo/kAAAABA8AAwBzAAMByAAAAAgICwADAIwAAAJKpYAOfIgDAAMAyAAAAImADkboAAFwBPgE9HMAAwEEuooUDAAOBwADAWMArte2AwADAYcArtd+AwADAaMArtd8AwABZkwbAAFmXgQLAAMB3wADAfMAAwLIAAKIxAAAAAQPAAMCIwADAsgAAAAEBAcAAwI8AAACSqWADnyIAAFwBPgE9HMAAwJwuwABBugEAASeiMgDAAFh3BsAAWZiBAsAAwZ3AAMGiwADBzgAAwABCEgAAAAEDwADBysAAwc4AAAAAAAAAXAE+AAbAAFmZgQLAAMOtwADDssAAxCQAAMAAQhMAAAABA8AAw8zAAMQkAAAAAgICwADD1AAAAMAAQhRgA8ABAAIAwADD6QAAAMAAQhVgA8AA/hsAAFwBPgE9HMAAxAAuwABBugEAASfAAEIWAMAAWHcGwABZmoECwADFbsAAxXPAAMXNAADAAEIXAAAAAQPAAMWJwADFzQAAAAQEBMAAxZcAAADAAEIYYAOfIgDAAMWpAAAAgylgA58iAMAAxbcAAAChWGADnyIAwADFxQAAAJKpYAOfIgAAXAE+AAbAAFmbgQLAAMZDwADGSMAAxmQAAMAAQhkAAAABA8AAxmDAAMZkAAAAAAAAAFwBPgAAACtUrwArVNwAK1URACtVRgArVXkAK1XYACtWKQArVlwAK1atACtXDAArVz0AK1ecACtXzQArV/4AK1g5ACtYagArWLEAK1jyACtZZQArWZgAK1nlACtaMAArWosAK1ruACtbKwArW4AAK1vBACtcGAArXGMAK1ygACtc9wArXSwAK11tACtd0AArXgMAK15OACtegQArXqgAK17/ACtfMAArX3cAK1+pACtgBQArYDYAK2CTACtgxAArYQsAK2E8ACthgwArYbgAK2IdACtiUAArYqUAK2L5ACtjPgArY48AK2PyACtkZQArZNgAK2U7ACtlzAArZiMAK2ZiACtmzwArZ14AK2gbACto2AAraR0AK2liACtppwAradgAK2ovACtqdAAraqUAK2rsACtrQQAra4YAK2u3ACtr/AArbC0AK2x0ACtspQArbOoAK20bACttYAArbZEAK24CACtuWQArbqoAK27pACtvSgArb4kAK2/+ACtwVwArcKAAK3D9ACtxVgArcekAK3IqACtygwArctwAK3MbACtzdAArc7MAK3QUACt0UQArdKYAK3TjACt1OAArdXkAK3XiACt2RwArdp4AK3bdACt3NgArd3UAK3fqACt4UwAreJAAK3jjACt5IgAreXUAK3myACt6EwAremYAK3qlACt6+AAre0sAK3uIACt73QArfBoAK3yLACt80AArfSUAK316ACt90QArfiQAK35xACt+xgArfwUAK39sACt/zQArgAoAK4BXACuAvAArgREAK4FCACuBmQArgd4AK4JnACuC+gArg7UAK4RwACuFKwArheYAK4ahACuG4AArhzUAK4dyACuH4QAriCAAK4iRACuI0AAriTcAK4l2ACuJ/QArijwAK4qfACuK3gAri0MAK4uoACuMDQArjGIAK4zDACuNNAArjZUAK43WACuOLwArjm4AK47PACuPDAArj30AK4+8ACuQHwArkIAAK5C/ACuRIAArkXcAK5HOACuSDQArkrYAK5MHACuTfAArk7sAK5QcACuUWQArlKwAK5UbACuVbgArleEAK5ZCACuWlwArl2QAK5gQACuYmQArmPAAK5ktACuZjgArmc0AK5o+ACuakwArmuoAK5snACubdAArm+QAK5wjACuchAArnMEAK50iACudewArnd4AK54bACuefAArns8AK58iACufXwArn7IAK5/vACugHgAroH8AK6C8ACuhEQAroVwAK6GvACuiAgAroj8AK6J8ACui0QAroyQAK6N3ACujygArpAcAK6RoACukywArpSwAK6WNACul4AArplEAK6bCACunFQArp2IAK6fvACuoQgArqJUAK6kUACupowArqfYAK6pZACuqrAArqukAK6s8ACurkwArq+oAK6xDACuslgArrOkAK608ACutowArrgoAK65dACuusAArrwMAK69WACuvuQArsBYAK7DDACuxJgArsXkAK7HMACuyHwArsk4AK7KTACuy9AArs0cAK7OaACuz2QArtEgAK7SgACu1FAArtbUAK7YrACu2fgArtq8AK7ccACu3hwArt7gAAAEnAAAAAYECACu8YAArVGAAK7xdAAAAAQArvGAAAAAAAAIGwABZoMAAQhqBAwAAFYD4AACMewABAQKIBIjogS4AAIx7oNYAgVYAAJIwAAEBAoIUghaBiAAAnjkAAQENnmKdb55jnmiVkJ5xnmmecp3cnd2dW5GonUiDDgAAoiYAAQEUoLegk6CIlY+gr6CUoKuglqCLnUmgiaCFoJqgl6CZoJigo6DKoKmgjIVBAADAAFqaAAEBAaDhhWQAAJLMAAEBAYIrhZYAAMAAWvoAAQEBrY6FzAAAwACLZgAAhe4AAMAAWqgAAQED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NRbAAEEGHMAAQMQuwABCRwIAAhzAAEDhLqG1AQABgMAAQPjAK8s1AMAAWoMrAMAAWbmDtZ89PRzAAEEZFsAAQRAuqh3AAFmlwABCBAEAAYDAAEEwwCvLNQDAAFkvSsAAQTwBgMAAQUPAK8s1BsAAWbmBA8AAQ1HAAENXwABLgAAAwABCRwAAAAEDwABDc8AAS4AAAAACAgLAAEOBAAAAkqlgA58iAMAAQ5kAAADAAEJEYAPAAItnAABgA58iAT4KPYjAAEOvwCvL7BzAAEO3LsAAQKABAAGAwABDycAry+wAwABZzk7AAEPbwABD4AAAg7VgA58iARbAAEPogMAAQ+LAK8vsg7WfPUnAAEPyFsAAQ/uCwABD9sArzDqdx583PgFKwABEFgEcwABEHS7AAEJUAwADgMAARD3AK8vsgsAARETAK8w6gcAARErAK8v6AMAAWb0/TsAARGvAAERxAABqYAOfIgGAwABEc8Ary+xJwABEvhbAAETHgsAARMLAK8w6ncafND4CScAARNsiIh7AAETfwABbKAIAAieEK4LAAETvwCvMOgABHsAARQLAAFsoAgACJ5otgsAARRPAK8w6AAEiIh7AAEUowABbKAIAAieELILAAEU6wCvMOgABHsAARUPAAFsoAgACJ4QqgsAARVXAK8w6AAAhHsAARffAAFsoAgACJ5o6FsAARg6CwABGCcArzDqDtZ89AD4CPTUAAAABAGADwACLZwGBwABGIMAry/ojHMAARjCEAMArzXVIAQABKwAAKxzAAEYwhADAK811wABCVQAAAADAAItsAVxKwABGTAEcwABGUy7AAEJWAQABgMAARmvAK8vsAMAAWfc/Q8AARoEWwABGkxbAAEaOgMAARojAK8vsg7WfPZ3GnzQ+AT2IwABGqcAry+wWwABGt4DAAEaxwCvL7IO1nz0/PYrAAEbPwCvMOhbAAEbcgMAARtbAK8vsg7WfPUnAAEbmFsAARu+CwABG6sArzDqdx583PgFKwABHCgEcwABHES7AAEJUAwADg8AARzHAK8yrgsAARzjAK8w6gcAARz7AK8v6AMAAWb1JwABHWhbAAEdjgsAAR17AK8w6nc+fMz4CPTUAAAABAGADwACLZwGBwABH6MAry/ojHMAAR/iEAMArzptIAQABKwAAKxzAAEf4hADAK86bwABCVQAAAADAAItsAVxKwABIEgEcwABIGS7AAEJWAQABg8AASDHAK8yrAMAAWfdJwABIRCEcwABIUxbAAEhOg8AASEjAK8yrg7WfPUgBAAGCwABIVsArzDoAwAD/dT4CPTUAAAABAGADwACLZwGBwABIZMAry/ojHMAASHSEAMArzzFIAQABKwAAKxzAAEh0hADAK88xwABCVQAAAADAAItsAVxKwABI3AEcwABI4y7AAEJWAQABg8AASPvAK8yrAMAAWfc/ScAASR0iFsAASSaCwABJIcArzDqd2J81AB7AAEk0wABbKAIAAieD3BbAAElHgsAASULAK8w6g7WfPQA+Az0cwABJpi7AAEJXAgACgsAASb3AK8w6asAASclgA5HFwACOaQDAAFp6PRzAAEpQFsAASkcuwABCO8AAWa7AAEJYAgACgsAASnXAK8w6JMAASqMCJ8AAQlkWwABKl4LAAEqSwCvMOodxnysAwACNSUrAAEqsARzAAEqzLsAAQlYBAAGCwABKy8ArzDoAwABZ9z89HMAASzAWwABLJy6qHcAAWaXAAEIGAQABgsAAS0TAK8w6AMAAWTFKwABLTwEcwABLVi7AAEJaAQABgMAAS3bAK8vsAMAAWn4GwABZuoEDwABL/sAATATAAE2fAADAAEJbAAAAAQPAAEwiwABNnwAAAAICAsAATCkAAABqYAOfIgDAAEw2AAAAncxgA58iAABgA58iAT4DTsAATEvAAExUAACorWADnyIBFsAATFyAwABMVsAr0NeDtZ89Q8AATGYhHMAATHaCwABMbcAr0PtIAQABgcAATHnAK9DkAMAA/3U+AknAAEyKHsAATI7AAFsoAgACJ4QpgsAATKPAK9D7AD4CPRzAAEy4LsAAQlwCAAKCwABM1sAr0PuBwABM4MAr0OQAwABZu0rAAEzyAYLAAEz5wCvQ+z4BPRzAAE0uLsAAQl0CAAKCwABNSsAr0PuBwABNVMAr0OQAwABZvD2KwABNbMAr0PsWwABNgILAAE13wCvQ+4O1nz1KwABNkAErBsAAWbuBA8AATefAAE3swABO2wAAwABCXAAAAAEDwABOCcAATtsAAAACAgLAAE4QAAAAamADnyIAwABOHQAAAJ3MYAOfIgAAXAE+Ak7AAE4ywABOOwAAqK1gA58iARbAAE5DgMAATj3AK9IQg7WfPUPAAE5NIRzAAE5dgsAATlTAK9IxSAEAAYHAAE5gwCvSHQDAAP91PgI9HMAAToMuwABCXQIAAoLAAE6fwCvSMYHAAE6pwCvSHQDAAFm8PYrAAE65wCvSMRbAAE7NgsAATsTAK9Ixg7WfPQbAAFm8gQPAAE9MwABPUcAAUq4AAMAAQl0AAAABA8AAT2zAAFKuAAAAAgICwABPcwAAAKitYAOfIgDAAE+DAAAAwABCXmADnyIAAFwBPgFJwABPmSIewABPncAAWygCAAInhCyAwABPr8Ar0ukAAB7AAE+8wABbKAIAAieaOoHAAE/OwCvS9wA+AT0cwABP5y7AAEJXAgACgMAAT/7AK9LpasAAUA5gA5HFlz0AwABaeknAAFAtHsAAUDHAAFsoAgACJ4QugMAAUEbAK9LpAD4BScAAUFkewABQXcAAWygCAAInmjqBwABQb8Ar0vcAPgE9HMAAUIouwABCVwIAAoDAAFChwCvS6WrAAFCxYAORxbkNAMAAWnpJwABQ1R7AAFDZwABbKAIAAiedjYHAAFDqwCvS9wA+AT0cwABRBS7AAEJXAgACgMAAURzAK9LpasAAUSxgA5HFuZIAwABaeknAAFFPHsAAUVPAAFsoAgACJ4aZgcAAUWfAK9L3AD4BPRzAAFGCLsAAQlcCAAKAwABRmcAr0ulqwABRqWADkcW6XwDAAFp6PgE9HMAAUdkuwABCSAIAAoDAAFIGwCvS6WrAAFIWXQOR0QFhAwFgA58iYAORurqHAMAAWns+AT0cwABSTi7AAEJIAgACgMAAUnnAK9LpasAAUoldA5HRAWEDAWADnyJgA5G6uocAwABaewbAAFm9gQPAAFM6wABTQMAAXZ0AAMAAQlQAAAABA8AAU1/AAF2dAAAAAwMDwABTbQAAAGpgA58iAMAAU3oAAACdzGADnyIAwABTlAAAAMAAQkRgA8AAi2cAAGADnyIBPgRAFsAAU7mBwABTscAr1Qadx583wABTscAAU8oATsAAU97AAFPkAAGAlmADwAEAAgEWwABT7oHAAFPmwCvVBp3Zn0FJwABT/x7AAFQDwAD3/AIAAoPAAFQNwCvVSyeaOgA+Az01AAAAAQBgA8AAi2cBgsAAVCbAK9UUIxzAAFQ2hADAK9WSSAEAASsAACscwABUNoQAwCvVksAAQlUAAAAAwACLbAFcTsAAVFbAAFRkAADAAECqYAOfIgEcwABUZi7AAEJbAgACgMAAVIXAK9T5gcAAVIzAK9UGAMAAWbpKwABUnAEcwABUoy7AAEJfAgAChMAAVMXAK9XVgcAAVNTAK9UGAMAAWeRJwABU6R7AAFTtwAD3/AIAAoPAAFT3wCvVSyedjQA+Az01AAAAAQBgA8AAi2cBgsAAVQ/AK9UUIxzAAFUfhADAK9ZYSAEAASsAACscwABVH4QAwCvWWMAAQlUAAAAAwACLbAFcPRzAAFU5LsAAQlwCAAKAwABVV8Ar1PmBwABVXsAr1QYAwABZu0rAAFVuARzAAFV1LsAAQmABAAGBwABVf8Ar1QYAwABZ4z4CTsAAVofAAFaRAADAAEJLYAPAAQACARbAAFagFsAAVpuBwABWk8Ar1QaDtZ89ndmfQUnAAFazIh7AAFa3wAD3/AIAAoTAAFbBwCvW4yeD3AABHsAAVtTAAPf8AgAChMAAVt7AK9bjJ4FqAD4CPTUAAAABAGADwACLZwGCwABW+cAr1RQjHMAAVwmFAMAr11BIAQABKwAAKxzAAFcJhQDAK9dQwABCVQAAAADAAItsAVxKwABXJQEcwABXLC7AAEJWAQABgMAAV0TAK9T5AMAAWfdJwABXWR7AAFddwAD3/AIAAoTAAFdnwCvW4ydjAD4DScAAV4IewABXhsAA9/wCAAKDwABXkMAr1UsngpMAPgJOwABYGcAAWCIAAJ15YAOfIgEWwABYMRbAAFgsgcAAWCTAK9UGg7WfPZ15ny9JwABYRSIhHMAAWFKFwABYScAr1/NIAQABKwDAAP91AB7AAFhdwABbKAIAAieaQBbAAFh1hcAAWGzAK9fzg7WfPQA+Aj01AAAAAQBgA8AAi2cBgsAAWIrAK9UUIxzAAFiahgDAK9hlSAEAASsAACscwABYmoYAwCvYZcAAQlUAAAAAwACLbAFcSsAAWLoBHMAAWMEuwABCYQEAAYHAAFjQwCvVBgDAAFnwPz89NQAAAAEAYAPAAItnAYLAAFj4wCvVFCMcwABZCIUAwCvYzEgBAAErAAArHMAAWQiFAMAr2MzAAEJVAAAAAMAAi2wBXErAAFkkARzAAFkrLsAAQlYBAAGAwABZQ8Ar1PkAwABZ9z4CPRzAAFliLsAAQlwCAAKAwABZgMAr1PmBwABZh8Ar1QYAwABZu0nAAFmZHsAAWZ3AAPf8AgACg8AAWafAK9VLJ4SvAD4CPTUAAAABAGADwACLZwGCwABZxcAr1RQjHMAAWdWFAMAr2XhIAQABKwAAKxzAAFnVhQDAK9l4wABCTAIAAi6BwABZ58Ar1QYAwACLbgFcSsAAWfsBHMAAWgIuwABCTQEAAYHAAFoOwCvVBgDAAFnAScAAWicewABaK8AA9/wCAAKDwABaNcAr1UsnhLAAPgI9NQAAAAEAYAPAAItnAYLAAFpTwCvVFCMcwABaY4UAwCvaB0gBAAErAAArHMAAWmOFAMAr2gfAAEJOAgACLoHAAFp1wCvVBgDAAIttAVxKwABaiQEcwABakC7AAEJPAQABgcAAWpzAK9UGAMAAWcVJwABatR7AAFq5wAD3/AIAAoPAAFrDwCvVSyeGmQA+Aj01AAAAAQBgA8AAi2cBgsAAWuLAK9UUIxzAAFryhQDAK9qWSAEAASsAACscwABa8oUAwCvalsAAQlUAAAAAwACLbAFcSsAAWxABHMAAWxcuwABCYgEAAYHAAFskwCvVBgDAAFnRScAAWz0ewABbQcAA9/wCAAKDwABbS8Ar1UsnhPUAPgI9NQAAAAEAYAPAAItnAYLAAFtowCvVFCMcwABbeIUAwCvbG0gBAAErAAArHMAAW3iFAMAr2xvAAEJVAAAAAMAAi2wBXErAAFuWARzAAFudLsAAQmMBAAGBwABbqMAr1QYAwABZ60nAAFvBHsAAW8XAAPf8AgACg8AAW8/AK9VLJ4KTAD4CPTUAAAABAGADwACLZwGCwABb8MAr1RQjHMAAXACFAMAr26BIAQABKwAAKxzAAFwAhQDAK9ugwABCVQAAAADAAItsAVxKwABcHgEcwABcJS7AAEJhAQABgcAAXDTAK9UGAMAAWfBJwABcTR7AAFxRwAD3/AIAAoPAAFxbwCvVSyeaUgA+AUrAAFx3ARzAAFx+LsAAQlICAAKBwABckMAr1QaCwABcmcAr1RQAwABZy0nAAFy5HsAAXL3AAPf8AgACg8AAXMfAK9VLJ4RIAD4CPTUAAAABAGADwACLZwGCwABc5sAr1RQjHMAAXPaFAMAr3G9IAQABKwAAKxzAAFz2hQDAK9xvwABCUAIAAi6BwABdCcAr1QYAwACLbwFcSsAAXR0BHMAAXSQuwABCUQEAAYHAAF01wCvVBgDAAFm+Pz0wwABdXCTAAF2ZAyfAAEJkg8AAXZHAK9VLJ4FLBsAAWb6BA8AAXfbAAF38wABfdQAAwABCUQAAAAEDwABeDMAAX3UAAAABAQHAAF4TAAAAwABAZmADnyIAAGADnyIBPgZAHsAAXjDAAFsoAgACJ4RIgMAAXkTAK90mAMAAXjDAAF5TAD0cwABeYxbAAF5aLqodwABZpcAAQe4BAAGAwABedMAr3SYAwABY/07AAF6PwABelQAAkqlgA58iARzAAF6XLsAAQmUDAAOAwABepsAr3SZqwABeyGADwACNy8ABCwdqwABe72ADwACNy8ABC0QAwABZ3z2JwABfDcAr3YkcwABfFS7AAEJnAQABgcAAXyXAK92JAMAAWgc9HMAAXzoWwABfMS6qHcAAWaXAAEBlAgACgMAAX0nAK90mgcAAX1nAK92JAMAAWQBKwABfZQGBwABfbMAr3YkGwABZv4EDwABfzsAAX9TAAGJbAADAAEJoAAAAAQPAAF/owABiWwAAAAEBAcAAX+8AAACSqWADnyIAAGADnyIBPgNOwABgAsAAYAcAAIO1YAOfIgEWwABgD4DAAGAJwCveY4O1nz1JwABgGSIewABgHcAAWygCAAInmmKBwABgMsAr3noAAB7AAGA7wABbKAIAAieZ5xbAAGBPgcAAYErAK956g7WfPQA+BE7AAGBkwABgcgAAwABCaWADnyIBgcAAYHTAK956TsAAYIbAAGCQAADAAECAYAOfIgEWwABgl4HAAGCSwCveeoO1nz09iMAAYKPAK95jHMAAYKsuwABCagIAAoPAAGDHwCve/2rAAGDkYAPAAI2wwAELgQDAAFnzPRzAAGENFsAAYQQuqh3AAFmlwABAfgIAAoLAAGEgwCve4oPAAGEvwCve/wDAAFjiScAAYUYewABhSsAAWygCAAInmeeBwABhWcAr3noAPgNOwABhbsAAYXgAAMAAQIBgA58iAYHAAGF6wCveej2IwABhhsAr3mMcwABhji7AAEJqAgACgcAAYZ/AK956asAAYbdgA8AAjbDAAQuBAMAAWfM9HMAAYeAWwABh1y6qHcAAWaXAAEB+AgACK4LAAGH5wCvfqQDAAFjiPgE9HMAAYiEWwABiGC6qHcAAWaXAAEB+AgACKysAwABY4krAAGJLAYDAAGJSwCveYwbAAFnAgQPAAGLfwABi5cAAZRAAAMAAQk0AAAABA8AAYvDAAGUQAAAAAQEBwABi9wAAAMAAQIVgA58iAABgA58iAT4IQB7AAGMTwABbKAIAAieEr4DAAGMmwCvgfgDAAGMTwABjNAA9HMAAY0QWwABjOy6qHcAAWaXAAEHjAQABgMAAY1DAK+B+AMAAWOFOwABjasAAY3AAAJKpYAOfIgEcwABjci7AAEJsAQABgMAAY4bAK+B+AMAAWgZOwABjoMAAY6QAAICsYAOfIgGBwABjpsAr4OE9icAAY7HAK+DhHMAAY7kuwABCbQEAAYHAAGPRwCvg4QDAAFnCPYnAAGPdwCvg4RzAAGPlLsAAQmgBAAGBwABj+sAr4OEAwABZvz2JwABkBsAr4OEWwABkKRzAAGQOLsAAQm4BAAGBwABkIsAr4OEAwABZxoO1nz1JwABkMx7AAGQ3wABbKAIAAieW+YHAAGRFwCvg4QA+Aj0cwABkXhbAAGRVLqodwABZpcAAQIQCAAKAwABkaMAr4H6BwABkd8Ar4OEAwABY40rAAGSFAYHAAGSMwCvg4T4CPRzAAGTBFsAAZLguqh3AAFmlwABAhAIAAoDAAGTLwCvgfisAwABY40rAAGTnARzAAGTuLsAAQm8BAAGCwABlAsAr4Q4AwABZwQbAAFnBgQPAAGWAwABlhsAAc5gAAMAAQm8AAAABA8AAZZnAAHOYAAAAAQEBwABloAAAAJKpYAOfIgAAYAOfIgE+Dk7AAGW8wABlzAABwABCcGADwABYcwEWwABlzi6qHcAAWaVOwABl+cAAZgoAAcAAQnFgA8AAjQoBH8AAZhjAAI0XAAAAAD0XwABmxy6qHYLAAGbSwCvir8AAWaU9iMAAZujAK+J2HMAAZvAuwABCbQEAAYDAAGcIwCvidgDAAFnCPYjAAGcUwCvidhzAAGccLsAAQmgBAAGAwABnMcAr4nYAwABZvz2IwABnPcAr4nYcwABnRS7AAEJuAQABgMAAZ1nAK+J2AMAAWcZOwABnbMAAZ4EAAMAAQnJgA58iARbAAGeUgsAAZ4PAK+KvwABAf8AAjQ1OwABnrsAAZ7gAAMAAQnNgA8AA/FUBIRzAAGfVFsAAZ8uCwABnusAr4q/AAECAwACNDEgBAAErAMAA/3VOwABn58AAZ/UAAMAAQnRgA8AA/FUBFsAAaAiCwABn98Ar4q/AAEJ0wACNDz0XwABojYLAAGh8wCvir6odgcAAaJjAK+KNwACLiE7AAGjiAAAAojxgA58iAETAAGjxPgxOwABpAsAAaQgAAGpgA58iARbAAGkQgMAAaQrAK+J2g7WfPT2IwABpZ8Ar4nYcwABpby7AAEJ1AgACgMAAaZHAK+J2asAAaZhdA8AA/r8BYAPAAQACwAELuQDAAFoKPRzAAGp3gsAAambAK+KvgkYAAAAAwACNET2IwABqhsAr4nYcwABqji7AAEJtAQABgMAAaqbAK+J2AMAAWcJJwABqtCEcwABq0xbAAGrJgsAAarjAK+Kvr3HAAI0OSAEAASsAwAD/dT4BScAAauYhHMAAav+DwABq6sAr41dIAQABKwDAAP91PgBJwABrj4TAAGuTwCvjgT4AScAAbCKFwABsJsAr470+AD8/ScAAbMEiHsAAbMXAAFsoAgACJ5piFsAAbOCAwABs2sAr4naDtZ89AAAhHsAAbPTAAFsoAgACJ5nnFsAAbQ4WwABtCYDAAG0DwCvidoO1nz2DtZ89AD4CPRzAAG0oFsAAbR8uqh3AAFmlwABAfgIAAhbAAG1BgMAAbTvAK+J2g7WfPSsAwABY4j2IwABtVsAr4nYWwABtZIDAAG1ewCvidoO1nz0+AT2IwABtgcAr4nYcwABtiS7AAEJoAQABgMAAbZ7AK+J2AMAAWb9JwABttCEcwABt2RbAAG3JgsAAbbjAK+KvwABAf8AAjQ1IAQABKwDAAP91PgFJwABt7CEcwABuBYPAAG3wwCvjV0gBAAErAMAA/3U+AT0cwABuGi7AAEJXAgACFsAAblGCwABuQMAr4q/AAEB/wACNDWrAAG5oYAORxai9AMAAWno+AknAAG6ehMAAbqLAK+OBPgE9HMAAbrsuwABCVwIAAhbAAG7jgsAAbtLAK+KvwABAf8AAjQ1qwABvCmADkcWmlgDAAFp6Pz2LwABvPcAr41cWwABvZYLAAG9UwCvir8AAQH/AAI0NP0nAAG+OIRzAAG+tFsAAb6OCwABvksAr4q/AAECAwACNDEgBAAErAMAA/3U+AUnAAG/AhMAAb8TAK+OBPgE9HMAAb9suwABCVwIAAhbAAHASgsAAcAHAK+KvwABAgMAAjQxqwABwI2ADkcWpOgDAAFp6PgJJwABwV4XAAHBbwCvjvT4BPRzAAHB4LsAAQlcCAAIWwABwsYLAAHCgwCvir8AAQIDAAI0MasAAcMJgA5HFwAB+fQDAAFp6Pz2MwABw98Ar44EpPz2IwABxIsAr4nYcwABxKi7AAEJuAQABgMAAcT7AK+J2AMAAWcY9jcAAcUzAK+O9IoXAAHFcwCvjvQEWwABxfoLAAHFtwCvir8AAQnTAAI0PScAAcZQewABxmMAAWygCAAInlvkWwABxrIDAAHGmwCvidoO1nz0APgE9jsAAcb3AK+QHFsAAcc+AwABxycAr4naDtZ89ScAAceIewABx5sAA9/wCAAKHwABx8MAr5B0WwABx/YDAAHH3wCvidoO1nz0APgE9jsAAclvAK+QHHMAAcmcuwABCZwEAAYDAAHJ3wCvidgDAAFoHPz0cwABylhbAAHKNLqodwABZpcAAQIgBAAGGwAByqsAr5AcAwABY5BzAAHLNhsAAcsPAK+QHSAEAASsAwAD/dUnAAHLcIiEcwABy9YPAAHLgwCvjV0gBAAErAMAA/3UAIYTAAHMBwCvjgT4BPRzAAHMULsAAQlcCAAKDwABzNsAr41dqwABzUmADkcXAAGlwAMAAWno/SsAAc4QBhsAAc4vAK+QHBsAAWcKBA8AAc+jAAHPuwAB0+wAAwABCbQAAAAEDwAB0BcAAdPsAAAABAQHAAHQMAAAAkqlgA58iAABgA58iAT4FPRzAAHQiFsAAdBkuqh3AAFmlwABB5QEAARbAAHQ9gMAAdDfAK+lZg7WfPQDAAFjlTsAAdEzAAHRSAACA7mADwAD+GwGTQ8AAdFsewAB0YsAAWygCAAInmm8WwAB0d4DAAHRxwCvpWYO1nz0APgI9icAAdIbAK+mgHMAAdIuBwAB0hsAr6aBkAQABlADAAP9BPYjAAHSVwCvpWRzAAHSdLsAAQnYBAAGAwAB0scAr6VkAwABZwz0cwAB0zBbAAHTDLqodwABZpcAAQG0BAAGBwAB038Ar6aAAwABY5krAAHTrAYDAAHTywCvpWQbAAFnDgQPAAHVswAB1csAAegUAAMAAQnYAAAABA8AAdYXAAHoFAAAAAQEBwAB1jAAAAJKpYAOfIgAAYAOfIgE+D07AAHWfwAB1qQAAr3FgA58iAYjAAHWrwCvqhhbAAHW5gMAAdbPAK+qGg7WfPUAewAB1ysAAWygCAAInmm+AwAB12cAr6oYAwAB1ysAAdd8APRzAAHXvFsAAdeYuqh3AAFmlwABB5gEAAYDAAHYDwCvqhgDAAFjnTsAAdhXAAHYfAACifmADnyIBFsAAdieAwAB2IcAr6oaDtZ89ScAAdjEhHsAAdjbAAFsoAgACJ4PcgsAAdkTAK+sUAD4CPRzAAHZYLsAAQlcCAAKCwAB2esAr6xQcwAB2omrAAHaLXQOR0QFhAwFgA8ABAAJgA5G6sfaIPQEAASeD3ACR1QDAAFp6PYrAAHa9wCvrFBzAAHbSFsAAdskuwABCO8AAWa7AAEJ3AgACgMAAdt/AK+qGKQDAAI0tPz2IwAB298Ar6oYcwAB2/y7AAEJ4AQABgsAAdw/AK+sUAMAAWcROwAB3JcAAdyoAAIO1YAOfIgEWwAB3MoDAAHcswCvqhoO1nz1OwAB3QgAAAMAAQnlgA58iAEnAAHdUHsAAd1jAAFsoAgACJ0iDwAB3Z8Ar6/cAPgM9jMAAd3bAK+wbg8AAd4XAK+v3PYjAAHeRwCvqhhzAAHeZLsAAQmwBAAGDwAB3rcAr6/cAwABaBj2LwAB3usAr6/cWwAB3x4DAAHfBwCvqhoO1nz0/ScAAd9chHMAAd+CDwAB328Ar6/dIAQABFsAAd+2CwAB348Ar6xSdeZ8vAMAA/3U+Ak7AAHgFwAB4DgAAnXlgA58iARbAAHgagsAAeBDAK+sUnXmfL0nAAHgqFsAAeDeFwAB4LsAr7NGEk582PgE9i8AAeJzAK+v3HMAAeKwWwAB4oy7AAEI7wABZrsAAQnoCAAKAwAB4usAr6oaFwAB4wcAr7NEAwACNLz4CPRzAAHjjLsAAQkgCAAKDwAB5A8Ar6/dqwAB5D10DkdEBYQMBYAOfImADkbrAAJPdAMAAWns9i8AAeTHAK+v3hcAAeTjAK+zRPz2IwAB5VMAr6oaDwAB5XMAr6/dAHsAAeW3AAFsoAgACJ4MmgMAAeXvAK+qGAMAAeW3AAHmBAD2IwAB5icAr6oYcwAB5kS7AAEJsAQABgMAAeaXAK+qGAMAAWgY9HMAAeboWwAB5sS6qHcAAWaXAAEBqAwADgcAAeczAK+qdgsAAedfAK+sUhMAAeeLAK+wbAMAAWOhKwAB59QGAwAB5/MAr6oYGwABZxIEDwAB6XcAAemPAAHvkAADAAEJ4AAAAAQPAAHpywAB75AAAAAEBAcAAenkAAACSqWADnyIAAGADnyIBPgY9iMAAeobAK+5iHMAAeo4uwABCagIAAoDAAHqfwCvuYmrAAHq4YAPAAI2LwAEL3ADAAFnzTsAAes/AAHrfAADAAEBoYAOfIgGAwAB64cAr7mJOwAB68MAAevYAAIDuYAPAAP4bAZRDwAB6/x7AAHsGwABbKAIAAieBahbAAHsagMAAexTAK+5ig7WfPQA+Aj2IwAB7KcAr7mIcwAB7MS7AAEJqAgACFsAAe1OAwAB7TcAr7mKDtZ89asAAe2tgA8AAjYvAAQwZAMAAWfM9isAAe4rAK+7KHMAAe4+CwAB7isAr7spkAQABlADAAP9BPRzAAHumFsAAe50uqh3AAFmlwABAZwIAAoLAAHu3wCvuyoHAAHu+wCvurQDAAFjpSsAAe9QBgMAAe9vAK+5iBsAAWcWBA8AAfFPAAHxZwAB9xAAAwABCTwAAAAEDwAB8ZMAAfcQAAAABAQHAAHxrAAAAwABAimADnyIAAGADnyIBPghAHsAAfIfAAFsoAgACJ4SwgMAAfJrAK+/RAMAAfIfAAHyoAD0cwAB8uBbAAHyvLqodwABZpcAAQdQBAAGAwAB8xMAr79EAwABYp07AAHzewAB85AAAkqlgA58iARzAAHzmLsAAQmwBAAGAwAB8+sAr79EAwABaBj2JwAB9DsAr8DQcwAB9Fi7AAEJtAQABgcAAfS7AK/A0AMAAWcI9icAAfTrAK/A0HMAAfUIuwABCbgEAAYHAAH1WwCvwNADAAFnGPYnAAH1iwCvwNBzAAH1qLsAAQmcBAAGBwAB9esAr8DQAwABaBz0cwAB9jxbAAH2GLqodwABZpcAAQIkCAAKAwAB9mcAr79GBwAB9qMAr8DQAwABYqErAAH20AYHAAH27wCvwNAbAAFnGgQPAAH4jwAB+KcAAgAIAAMAAQm4AAAABA8AAfjzAAIACAAAAAQEBwAB+QwAAAJKpYAOfIgAAYAOfIgE+BU7AAH5WwAB+WwAAg7VgA58iARbAAH5jgMAAfl3AK/E6g7WfPT0cwAB+dhbAAH5tLqodwABZpcAAQcoBAAGBwAB+h8Ar8VEAwABYlk7AAH6WwAB+nAAAgO5gA8AA/hsBk0FDwAB+pSk+BE7AAH7BwAB+xwAAgJZgA8ABAAIBFsAAfs6BwAB+ycAr8VGd2Z9BScAAfuEewAB+5cAA9/wCAAInhMCDwAB+98Ar8boAPgE9iMAAfwnAK/E6HMAAfxEuwABCfAEAAYDAAH8bwCvxOgDAAFnHScAAfzAewAB/NMAA9/wCAAInhL+DwAB/RsAr8boAPgE9iMAAf1jAK/E6HMAAf2AuwABCfQEAAYDAAH9qwCvxOgDAAFnIPgI9HMAAf5IWwAB/iS6qHcAAWaXAAEB8AQABgsAAf6HAK/GcAMAAWJdCwAB/sQA9icAAf8bAK/FRFsAAf9OAwAB/zcAr8TqDtZ89PYrAAH/fwCvxnBzAAH/kgsAAf9/AK/GcZAEAAZQAwAD/QUrAAH/yAYDAAH/5wCvxOgbAAFnHgQPAAIBXwACAXcAAgU8AAMAAQnwAAAABA8AAgGbAAIFPAAAAAQEBwACAbQAAAJKpYAOfIgAAYAOfIgE+Bk7AAICAwACAjAAAwABAemADnyIBFsAAgJSAwACAjsAr8xGDtZ89QB7AAIClwABbKAIAAieEwIHAAIC2wCvzKADAAIClwACAwgA9HMAAgNIWwACAyS6qHcAAWaXAAEHeAQABgcAAgNzAK/MoAMAAWNY9iMAAgO7AK/MRHMAAgPYuwABCfgEAAYHAAIEKwCvzKADAAFnJPRzAAIElFsAAgRwuqh3AAFmlwABAeQEAAYHAAIEtwCvzKADAAFjXSsAAgT8BgMAAgUbAK/MRBsAAWciBA8AAgaTAAIGqwACCnAAAwABCfQAAAAEDwACBs8AAgpwAAAABAQHAAIG6AAAAkqlgA58iAABgA58iAT4GTsAAgc3AAIHZAADAAEB3YAOfIgEWwACB4YDAAIHbwCv0HoO1nz1AHsAAgfLAAFsoAgACJ4S/gcAAggPAK/Q1AMAAgfLAAIIPAD0cwACCHxbAAIIWLqodwABZpcAAQgABAAGBwACCKcAr9DUAwABZJD2IwACCO8Ar9B4cwACCQy7AAEJ+AQABgcAAglfAK/Q1AMAAWck9HMAAgnIWwACCaS6qHcAAWaXAAEB2AQABgcAAgnrAK/Q1AMAAWSVKwACCjAGAwACCk8Ar9B4GwABZyYEDwACC+MAAgv7AAIQ8AADAAEJ+AAAAAQPAAIMRwACEPAAAAAEBAcAAgxgAAACSqWADnyIAAGADnyIBPgU9iMAAgyXAK/UrHMAAgy0uwABCagIAAoDAAIM+wCv1K2rAAINXYAPAAI1/wAEMVADAAFnzTsAAg2zAAINyAACA7mADwAD+GwGUQ8AAg3sewACDgsAAWygCAAIngKcWwACDloDAAIOQwCv1K4O1nz0APgI9iMAAg6XAK/UrHMAAg60uwABCagIAAhbAAIPEgMAAg77AK/Urg7WfPWrAAIPcYAPAAI1/wAEMVADAAFnzPYnAAIPvwCv1dhzAAIP0gcAAg+/AK/V2ZAEAAZQAwAD/QT0cwACECxbAAIQCLqodwABZpcAAQHQBAAGBwACEIMAr9XYAwABY2ErAAIQsAYDAAIQzwCv1KwbAAFnKgQPAAISGwACEjMAAheoAAMAAQn8AAAABA8AAhJnAAIXqAAAAAQEBwACEoAAAAJKpYAOfIgAAYAOfIgE+Bj0cwACEthbAAIStLqodwABZpcAAQd8BAAEWwACEyoDAAITEwCv2dIO1nz0AwABY2T2IwACE1cAr9nQcwACE9h7AAITdwACNVQIAAoDAAITpwCv2dCkAwABCgAIAAoDAAIUHwCv2dC4AwACNX07AAIUdwACFIwAAgO5gA8AA/hsBlEPAAIUsHsAAhTPAAFsoAgACJ4CnFsAAhUeAwACFQcAr9nSDtZ89AD4CPYjAAIVWwCv2dBzAAIV8HsAAhV7AAI1VAgACFsAAhXCAwACFasAr9nSDtZ89KQDAAEKAAgACFsAAhZOAwACFjcAr9nSDtZ89LgDAAI1fPYnAAIWmwCv29xzAAIWrgcAAhabAK/b3ZAEAAZQAwAD/QT0cwACFwhbAAIW5LqodwABZpcAAQEkBAAGBwACFzsAr9vcAwABY2krAAIXaAYDAAIXhwCv2dAbAAFnLgQPAAIXvwACF9cAAh18AAMAAQlIAAAABA8AAhgbAAIdfAAAAAgICwACGDQAAAMAAQDtgA58iAMAAhisAAADAAEJEYAPAAItnAABgA58iAT4CQB7AAIZIwABbKAIAAieaUoDAAIZZwCv4BgDAAIZIwACGZQBJwACGbB7AAIZwwABbKAIAAieanhbAAIaLgMAAhn/AK/gGg7WfPQA+Aj01AAAAAQBgA8AAi2cBgcAAhprAK/gWIxzAAIaqggDAK/h+SAEAASsAACscwACGqoIAwCv4fsAAQoECAAIugMAAhrzAK/gGAMAAi3EBXErAAIbQARzAAIbXLsAAQoIBAAGAwACG48Ar+AYAwABZzT4CPTUAAAABAGADwACLZwGBwACHBMAr+BYjHMAAhxSCAMAr+O9IAQABKwAAKxzAAIcUggDAK/jvwABCgwIAAi6AwACHJMAr+AYAwACLcAFcSsAAhzgBHMAAhz8uwABChAEAAYDAAIdJwCv4BgDAAFnMBsAAWcyBA8AAh6zAAIeywACItwAAwABChAAAAAEDwACHu8AAiLcAAAABAQHAAIfCAAAAwABAO2ADnyIAAGADnyIBPgZAHsAAh9zAAFsoAgACJ5pSgMAAh+3AK/mIAMAAh9zAAIf5AD0cwACICRbAAIgALqodwABZpcAAQfsBAAGAwACIE8Ar+YgAwABZFk7AAIgrwACIMQAAkqlgA58iARzAAIgzLsAAQmwBAAGAwACIR8Ar+YgAwABaBj2JwACIWcAr+escwACIYS7AAEJnAQABgcAAiHHAK/nrAMAAWgc9HMAAiIYWwACIfS6qHcAAWaXAAECLAgACgMAAiI7AK/mIgcAAiJvAK/nrAMAAWRdKwACIpwGBwACIrsAr+esGwABZzYEDwACJGcAAiR/AAItlAADAAEKCAAAAAQPAAIkqwACLZQAAAAEBAcAAiTEAAADAAEA7YAOfIgAAYAOfIgE+Ck7AAIlKwACJVAAAwABAPGADnyIBFsAAiWKAwACJVsAr+qeDtZ89QB7AAIlzwABbKAIAAieaUoDAAImEwCv6pwDAAIlzwACJkABAHsAAiZ7AAFsoAgACJ5qegcAAia3AK/rAAMAAiZ7AAIm3AD0cwACJxxbAAIm+LqodwABZpcAAQfwBAAGAwACJ08Ar+qcAwABZGE7AAInqwACJ8gAAoi5gA8AA/FUBFsAAigMWwACJ/oHAAIn0wCv6wIO1nz2dVJ8xTsAAihsAAACSqWADnyIAScAAiiaCwACKKsAr+1M+AT2LwACKO8Ar+4IcwACKQy7AAEJlAwADgcAAilLAK/rAasAAim9gA8AAjcvAAQyRasAAipVgA8AAjcvAAQzOAMAAWd8+AT2LwACKv8Ar+4IcwACKxy7AAEJsAQABgcAAitvAK/rAAMAAWgY9i8AAivHAK/uCHMAAivkuwABCZwEAAYPAAIsJwCv7ggDAAFoHPRzAAIseFsAAixUuqh3AAFmlwABAOgQABIDAAIsowCv6p4HAAIs1wCv6wIPAAItAwCv7goLAAItHwCv7UwDAAFkZSsAAi1UBg8AAi1zAK/uCBsAAWc6BA8AAi6rAAIuwwACMqgAAwABAoAAAAAEDwACLwcAAjKoAAAABAQHAAIvIAAAAkqlgA58iAABgA58iAT4FPRzAAIveFsAAi9Uuqh3AAFmlwABB+QEAARbAAIv2gMAAi/DAK/ysg7WfPQDAAFkQTsAAjAXAAIwLAACA7mADwAD+GwGTQ8AAjBQewACMG8AAWygCAAIng4QWwACML4DAAIwpwCv8rIO1nz0APgI9iMAAjD7AK/ysHMAAjEYuobsBAAGAwACMVMAr/KwAwABZzz2JwACMYsAr/PMcwACMZ4HAAIxiwCv882QBAAGUAMAA/0E9HMAAjH4WwACMdS6qHcAAWaWhXQEAAYHAAIyOwCv88wDAAFkRSsAAjJoBgMAAjKHAK/ysBsAAWc+BA8AAjRDAAI0WwACQPgAAobsAAAABA8AAjSPAAJA+AAAAAQEBwACNKgAAAJKpYAOfIgAAYAOfIgE+DE7AAI09wACNRQAAwABCh2ADnyIBFsAAjU2AwACNR8Ar/dODtZ89QB7AAI1ewABbKAIAAieDhIHAAI1swCv96gDAAI1ewACNdAA9HMAAjYQWwACNey6qHcAAWaWhTgEAAYHAAI2SwCv96gDAAFkSPYjAAI2gwCv90xzAAI2oLsAAQmoCAAKBwACNucAr/epqwACN1GADwACN2MABDQsAwABZ8z2IwACN7MAr/dMcwACN/C7AAEKJAgACgMAAjhLAK/3TasAAjitgA8AAjdjAAQ1IAMAAWeBJwACORh7AAI5KwABbKAIAAidjFsAAjl6AwACOWMAr/dODtZ89AD4BPRzAAI5tLsAAQlcCAAIWwACOioDAAI6EwCv904O1nz1qwACOlmADkcXAAGVxAMAAWno/PYjAAI6/wCv90xzAAI7kHsAAjsfAAI1WAQABgMAAjt3AK/3TAMAAQosCAAKAwACO88Ar/dMuAMAAjWtOwACPC8AAjxIAAKFYYAOfIgErScAAjx4ewACPIsAAWygCAAIngWoWwACPNoDAAI8wwCv904O1nz0APgI9isAAj0XAK/9WFsAAj1SAwACPTsAr/dODtZ89PYjAAI9gwCv90xzAAI9oLsAAQmoCAAKCwACPhMAr/1ZqwACPnmADwACN2MABDYUAwABZ8z89iMAAj9HAK/3THMAAj9kuwABAKgEAAYDAAI/rwCv90wDAAFpOPRzAAJAAFsAAj/cuqh3AAFmloVEDAAOBwACQDMAr/eqCwACQFcAr/1YWwACQI4DAAJAdwCv904O1nz0AwABZE0rAAJAuAYDAAJA1wCv90wbAAFnQgQPAAJCRwACQl8AAkTkAAMAAQkYAAAABA8AAkKLAAJE5AAAAAQEBwACQqQAAAJKpYAOfIgAAYAOfIgE+BD2IwACQtsAsAIIWwACQxIDAAJC+wCwAgoO1nz1AHsAAkNXAAPf8AgACFsAAkOWAwACQ38AsAIKClJ9CasAAkPVgA59qwACyQADAAJDVwACRAAA9HMAAkRAWwACRBy6qHcAAWaWiMQEAAYDAAJEdwCwAggDAAFmXSsAAkSkBgMAAkTDALACCBsAAWdGBA8AAkyLAAJMowACXtAAAwABCYgAAAAEDwACTNMAAl7QAAAABAQHAAJM7AAAAwABAVWADnyIAAGADnyIBPgpAHsAAk1jAAFsoAgACJ4aZgMAAk2zALAFKAMAAk1jAAJN7AD0cwACTixbAAJOCLqodwABZpcAAQQYBAAGAwACTosAsAUoAwABYz07AAJPAwACTyQAAwABCjWADwACNWAEewACTy8AAjVUCAAKAwACT18AsAUoqAE7AAJP5wACT/wAAkqlgA58iARbAAJQjHMAAlAqBwACUAcAsAa3AAEKOAQABgMAAlBPALAFKAMAAjWKDtZ89TsAAlDMAAACV+2ADnyIATsAAlFLAAJRcAACfUmADwACNZQEewACUXsAAjVYCAAKCwACUdMAsAdopAEnAAJSGIiIcwACUk4HAAJSKwCwBrUgBAAFqwACUlmADwACNWMABDb0AwAD/dQAiHMAAlLQWwACUr4LAAJSpwCwB2oJrnzpIAQABasAAlLdgA8AA/hvAAJxOAMAA/z8BFsAAlNYWwACU0YLAAJTLwCwB2oKUn0KdxZ/PAB7AAJTrwABbKAIAAieAvBbAAJUPHMAAlQOEwACU+cAsAieWhAEAAYLAAJUIwCwB2gDAAI1tg7WfPQA+BD0cwACVJxbAAJUeLqodwABZpaIDAgACgsAAlTjALAHaasAAlVFgA8AAjfLAAQ3JAMAAWWc9i8AAlWzALAIYFsAAlZscwACVf4TAAJV1wCwCJ8AAQpACAAKCwACVjsAsAdouAMAAjWyDtZ89QB7AAJWuwABbKAIAAieAvIPAAJW8wCwCGADAAJWuwACVwwA9isAAlczALAHaHMAAle4ewACV1MAAjVUCAAKDwACV4MAsAhgpAMAAQoACAAKDwACV/8AsAhguAMAAjV8+BD2KwACWIcAsAdocwACWMoHAAJYpwCwBrcAAQpECAAKAwACWPMAsAUouAMAAjWE9isAAllnALAHaHMAAlmEuwABCagIAAoLAAJZywCwB2mrAAJaLYAPAAI3ywAENyQDAAFnzPYrAAJamwCwB2hzAAJa4hMAAlq7ALAInwABCkAIAAoLAAJbHwCwB2i4AwACNbD2KwACW28AsAdocwACW7S7AAEKSAgACgsAAlw7ALAHaasAAlyBgA8AAWwrAAQ4GAMAAWdg9isAAlz7ALAHaHMAAl0YuwABCZwEAAYLAAJdWwCwB2gDAAFoHPRzAAJdrFsAAl2Iuqh3AAFmlwABAVAMAA4DAAJeAwCwBSoPAAJeQwCwCGILAAJeYwCwB2gDAAFjQSsAAl6QBgsAAl6vALAHaBsAAWdKBA8AAmCrAAJgwwACamwAAwABClAAAAAEDwACYScAAmpsAAAABAQHAAJhQAAAAkqlgA58iAABgA58iAT4FTsAAmGPAAJhvAADAAEBMYAOfIgEWwACYd4DAAJhxwCwFMYO1nz1JwACYgSEewACYhsAAWygCAAInmjuBwACYl8AsBUgAPgM9HMAAmPQuwABCVwIAAoHAAJkWwCwFSBzAAJlAasAAmSldA5HRAWEDAWADwAEAAmADkbqx9og9AQABJ5o7AJHVAMAAWno9icAAmV7ALAVIHMAAmXUWwACZbC7AAEI7wABZrsAAQpUCAAKAwACZjMAsBTFqwACZm2ADnmXAAK52AMAAjUpJwACZqCEewACZrcAAjVQBAAEWwACZzoHAAJnCwCwFSIO1nz0APgE9HMAAmegWwACZ3y7AAEI7wABZrsAAQlgBAAGBwACaAsAsBUgAwACNST8/PYjAAJoiwCwFMRzAAJoqLsAAQn8BAAGBwACaOMAsBUgAwABZyj0cwACaUxbAAJpKLqodwABZpcAAQEsBAAGBwACaecAsBUgAwABY1ErAAJqLAYDAAJqSwCwFMQbAAFnTgQPAAJqgwACapsAAm8MAAMAAQpYAAAABA8AAmrjAAJvDAAAAAQEBwACavwAAAJKpYAOfIgAAYAOfIgE+A07AAJrSwACa3gAAwABATGADnyIBFsAAmuaAwACa4MAsBuuDtZ89ScAAmvAewACa9MAAWygCAAInmjuBwACbBcAsBwIAPgI9iMAAmxvALAbrHMAAmyMuwABCfwEAAYHAAJsxwCwHAgDAAFnKPRzAAJtOFsAAm0Uuqh3AAFmlwABATgEAAYHAAJtkwCwHAgDAAFjRPgE9HMAAm44WwACbhS6qHcAAWaXAAEBQAAAAAMAAWNJKwACbswGAwACbusAsBusGwABZ1IEDwACcNcAAnDvAAJ93AADAAEKXAAAAAQPAAJxYwACfdwAAAAQEBMAAnGYAAACSqWADnyIAwACccwAAAIC9YAOfIgDAAJx+AAAAhU5gA8AA/FUAwACckwAAAIJrYAPAAFsKAABgA58iAT4DTsAAnKXAAJyqAACDtWADnyIBFsAAnLKAwACcrMAsB+6DtZ89ScAAnLwewACcwMAAWygCAAIng9yEwACczsAsCDMAPgJJwACc3YLAAJzhwCwICj4BPRzAAJz1LsAAQlcCAAKEwACdDMAsCDNqwACdGGADkcXAAET1AMAAWno/PYjAAJ1BwCwH7hzAAJ1JLsAAQpgCAAKAwACdX8AsB+6DwACdZsAsCBoAwABZ2UnAAJ14gsAAnXzALAgKPgE9HMAAnZcWwACdji6qHcAAWaXAAEBSAgAChMAAnbDALAgzg8AAnbbALAgaAMAAWLE+BEnAAJ3iHsAAnebAAFsoAgACJ4XOgcAAnfvALAf8AD4CTsAAnhLAAJ4XAACDtWADnyIBFsAAnh6BwACeGcAsB/yDtZ89ScAAniwWwACeNYXAAJ4wwCwJQZ3YnzU+AT2JwACeTcAsB/yFwACeVMAsCUFJwACeaRzAAJ5tLsAAQpkBAAGFwACeesAsCUEAwABaDj4BPYnAAJ6NwCwH/BbAAJ6ZhcAAnpTALAlBg7WfPT8/PRzAAJ63LsAAQlcCAAKBwACezsAsB/wcwACe1C7AAEKaAQABg8AAnuzALAgaAMAAWdsAwABaej2IwACe+sAsB+4cwACfCxbAAJ8CLsAAQjvAAFmuwABCdwIAAoDAAJ8YwCwH7ioAwACNLT2IwACfLcAsB+4cwACfNS7AAEDJAgACgMAAn0/ALAfug8AAn1bALAgaAMAAWdpKwACfZwGAwACfbsAsB+4GwABZ1YEDwACffMAAn4LAAKCFAADAAEChAAAAAQPAAJ+awACghQAAAAICAsAAn6EAAACSqWADnyIAwACfswAAAIJrYAPAAFsKAABgA58iAT4DTsAAn8XAAJ/KAACDtWADnyIBFsAAn9KAwACfzMAsCqODtZ89ScAAn9wewACf4MAAWygCAAIng9yCwACf7sAsCsoAPgE9iMAAn/3ALAqjHMAAoAUuwABCmAIAAoDAAKAbwCwKo4HAAKAiwCwKsQDAAFnZPgE9HMAAoEUWwACgPC6qHcAAWaXAAEBSAgACgsAAoF7ALArKgcAAoGTALAqxAMAAWLFKwACgdQGAwACgfMAsCqMGwABZ1oEDwACgisAAoJDAAKD+AADAAEKbAAAAAQPAAKCkwACg/gAAAAICAsAAoKsAAACSqWADnyIAwACgvQAAAIJrYAPAAFsKAABgA58iAT4BSsAAoMkBHMAAoNAuwABAygIAAhbAAKDvgMAAoOnALAuog7WfPYHAAKD1wCwLtgDAAFnXBsAAWdeBA8AAoQPAAKEJwACieQAAwABAygAAAAEDwAChIcAAonkAAAACAgLAAKEoAAAAkqlgA58iAMAAoToAAACCa2ADwABbCgAAYAOfIgE+BkAewAChTcAAWygCAAIng9yAwAChW8AsDC0AwAChTcAAoWEAPRzAAKGuFsAAoaUuqh3AAFmlwABB+gEAAYDAAKHMwCwMLQDAAFkUTsAAod7AAKHpAAChOWADnyIBFsAAofGAwACh68AsDC2deZ8vQB7AAKIGwABbKAIAAieDJoLAAKIUwCwMngDAAKIGwACiHwA9HMAAoi8WwACiJi6qHcAAWaWjCwQABJOAwACiRsAsDC2CwACiTcAsDJ6BwACiWcAsDDsAwABYs0rAAKJkAYLAAKJrwCwMngbAAFnYgQPAAKNQwACjVsAApIMAAMAAQpIAAAABA8AAo3bAAKSDAAAAAgICwACjfQAAAJKpYAOfIgDAAKOPAAAAgmtgA8AAWwoAAGADnyIBPgNOwACjocAAo6YAAIO1YAOfIgEWwACjroDAAKOowCwNV4O1nz1JwACjuCEewACjvcAAWygCAAIng9yCwACjy8AsDX4APgI9HMAAo9ouwABCVwIAAoLAAKPxwCwNfhzAAKP3LsAAQpoBAAGBwACkD8AsDWUAwABZ2wDAAFp6PYrAAKQdwCwNfhzAAKQtFsAApCQuwABCO8AAWa7AAEJ3AgACgMAApDrALA1XKgDAAI0tP0rAAKRTARzAAKRaLsAAQMkCAAKCwACkdMAsDX6BwACkesAsDWUAwABZ2gbAAFnZgQPAAKWSwAClmMAApggAAMAAQpgAAAABA8AApa3AAKYIAAAAAgICwACltAAAAJKpYAOfIgDAAKXGAAAAgmtgA8AAWwoAAGADnyIBPgFKwACl0gEcwACl2S7AAEDJAgACFsAApfmAwACl88AsDoODtZ89gcAApf/ALA6RAMAAWdoGwABZ2oEDwACnGsAApyDAAK9YAADAAEDJAAAAAQPAAKc5wACvWAAAAAICAsAAp0AAAACSqWADnyIAwACnUgAAAIJrYAPAAFsKAABgA58iAT4ITsAAp2TAAKdqAACCmGADnyIBgMAAp2zALA8IQB7AAKd+wABbKAIAAieD3IDAAKeMwCwPCADAAKd+wACnkgA9HMAAp6IWwACnmS6qHcAAWaWjCgIAAoLAAKe4wCwPL4HAAKe/wCwPFgDAAFiyTsAAp87AAKfdAACjHGADwAD+GwGTQUPAAKfmKUE+CU7AAKgBwACoBgAAg7VgA58iARbAAKgOgMAAqAjALA8Ig7WfPUnAAKgaHsAAqB7AAFsoAgACJ4MmhMAAqCzALA+6AD4CPYjAAKg9wCwPCITAAKhFwCwPukLAAKhTAD89i8AAqGrALA+bHMAAqGiDwACoasAsD5tkAQABlADAAP9BTsAAqIfAAKiNAACAlmADwAEAAgEWwAColITAAKiPwCwPup3Zn0FJwACopx7AAKirwAD3/AIAAoXAAKi1wCwQOieZ8gA+Az2IwACozMAsDwgcwACo1C7AAEKcAgACgMAAqPbALA8IgcAAqP3ALA8WAMAAWd09iMAAqQzALA8IHMAAqRQuwABCnQIAAoDAAKklwCwPCILAAKkswCwPLwDAAFoEQsAAqTwAScAAqVAewACpVMAA9/wCAAKFwACpXsAsEDonmhIAPgM9iMAAqXXALA8IHMAAqX0uwABCngIAAoDAAKmawCwPCIHAAKmhwCwPFgDAAFnePYjAAKmwwCwPCBzAAKm4LsAAQp0CAAKAwACpycAsDwiCwACp0MAsDy8AwABaBELAAKngAEnAAKn0HsAAqfjAAPf8AgAChcAAqgLALBA6J0sAPgQ9iMAAqi7ALA8IHMAAqjYuwABCnwEAAYDAAKpMwCwPCADAAFoJPYjAAKpcwCwPCBzAAKpkLsAAQpwCAAKAwACqhsAsDwiBwACqjcAsDxYAwABZ3T2IwACqnMAsDwgcwACqpC7AAEKdAgACgMAAqrXALA8IgsAAqrzALA8vAMAAWgRCwACqzAA/PYjAAKrhwCwPCBzAAKrpLsAAQqADAAOAwACq/sAsDwhqwACrGWADwABarcAAxRyBwACrJMAsDxYAwABZ3D2MwACrMcAsD7oWwACrPoDAAKs4wCwPCIO1nz1JwACrSiEewACrT8AAWygCAAIngKeEwACrXcAsD7oAPgNOwACrdMAAq3kAAIO1YAOfIgEWwACrgYDAAKt7wCwPCIO1nz1JwACrjx7AAKuTwABbKAIAAieDJobAAKuhwCwShQA+AT2IwACrtMAsDwiGwACrvMAsEoU+AUnAAKvzFsAArAYWwACr/YLAAKv3wCwPL515ny+Ek582PgE9iMAArKfALA8IHMAArLgWwACsry7AAEI7wABZrsAAQnoCAAKAwACsxsAsDwgWwACs04LAAKzNwCwPL515ny8AwACNL0nAAKzvIhzAAKz9FsAArPiGwACs88AsEoWCa586SAEAAWrAAK0AYAPAAP4bwACcTgDAAP8/ABzAAK0xFsAArSwWwACtJ4bAAK0iwCwShYO1nz2Ca586SAEAAWrAAK00YAPAAP4bwACcTgDAAP8/PgI9iMAArX7ALA8IHMAArYYuwABCoQMAA4DAAK2pwCwPCBzAAK3dasAArcZdA5HRAWEDAWADwAEAAmADkbqx9og9AQABJ4CnAJHVH8AArgWfIQIAAmrAAK4eYAOfasAAtUAWwACuKobAAK4lwCwShYdxnysAAMAAWghCwACuRAE+AT2IwACubcAsDwgcwACudS7AAEKdAgACgMAArobALA8IgsAAro3ALA8vAMAAWgRCwACuswA/PYjAAK7IwCwPCITAAK7QwCwPukAewACu58AAWygCAAIngyaAwACu9cAsDwgAwACu58AArvsAPRzAAK8LFsAArwIuqh3AAFmlowsEAASDwACvH8AsD5uCwACvL8AsDy+AwACvNsAsDwiBwACvPcAsDxYAwABYs0rAAK9IAYDAAK9PwCwPCAbAAFnbgQPAAK+8wACvxMAAsSEAAMAAQpoAAAABA8AAr9vAALEhAAAAAQEBwACv5wAAAIJrYAPAAFsK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1QDAANIqwADSPgA9HMAA0k4WwADSRS6qHcAAWaXAAEH6AQABgsAA0mzALCn8AMAAWRROwADSfMAA0osAAKMcYAPAAP4bAZNBQ8AA0pQpPgdOwADSr8AA0rQAAIO1YAOfIgEWwADSvIDAANK2wCwp1YO1nz1JwADSyB7AANLMwABbKAIAAieZ84TAANLawCwqkQA+AULAANLrAD89iMAA0wDALCnVHMAA0wguwABCoAMAA4DAANMowCwp1WrAANNDYAPAAFqtwADFSoHAANNXwCwp4wDAAFncPYzAANNkwCwqkRbAANNxgMAA02vALCnVg7WfPT2LwADTf8AsKnMcwADTfYPAANN/wCwqc2QBAAGUAMAA/0FJwADTlSEewADTmsAAWygCAAIngKeEwADTqMAsKpEAPgJJwADTuSEewADTvsAAWygCAAInmfOEwADTzMAsKpEAPgM9HMAA0/UuwABCVwIAAoTAANQbwCwqkRzAANQ+asAA1CddA5HRAWEDAWADwAEAAmADkbqx9og9AQABJ5nzAJHVAMAAWno9jMAA1JDALCqRFsAA1J2CwADUl8AsKfydeZ8vQ8AA1LEhHMAA1MMWwADUvoDAANS4wCwp1YO1nz1IAQABhMAA1MbALCqRAMAA/3U+AT2IwADU2sAsKdUWwADU6IDAANTiwCwp1YO1nz0/QsAA1QwAPz2IwADVIcAsKdWEwADVKcAsKpFJwADVORzAANVMg8AA1T3ALCpzSAEAAZMAwAD/Pz4DPRzAANVaLsAAQqEDAAOAwADVd8AsKdVqwADVjmADkcWvnh/AANW/nxcEAARqwADV7WADn2rAALG2JwAWwADWCBbAANYDgMAA1f3ALCnVg7WfPYdxnyuTAADAAFoIPYjAANYfwCwp1RzAANYnLsAAQqADAAOAwADWR8AsKdVqwADWYmADwABarcAAxUqBwADWdsAsKeMAwABZ3D2LwADWhcAsKnMcwADWg4PAANaFwCwqc2QBAAGUAMAA/0E/PYjAANafwCwp1RbAANatgMAA1qfALCnVg7WfPUAewADWvsAAWygCAAInmfOAwADWzMAsKdUAwADWvsAA1tIAPRzAANbiFsAA1tkuqh3AAFmlovsDAAODwADW/sAsKnOCwADXDsAsKfyAwADXFcAsKdUAwABZFUrAANchAYDAANcowCwp1QbAAFnegQPAANfRwADX18AA3T0AAMAAQp4AAAABA8AA1/PAAN09AAAAAgICwADX+gAAAJKpYAOfIgDAANgMAAAAgmtgA8AAWwoAAGADnyIBPgpOwADYHsAA2CQAAIKYYAOfIgGIwADYJsAsLe4WwADYNIDAANguwCwt7oO1nz1AHsAA2EXAAFsoAgACJ5oSgMAA2FPALC3uAMAA2EXAANhZAD0cwADYaRbAANhgLqodwABZpcAAQfoBAAGCwADYh8AsLhUAwABZFE7AANiXwADYpgAAoxxgA8AA/hsBk0FDwADYryk+B07AANjKwADYzwAAg7VgA58iARbAANjXgMAA2NHALC3ug7WfPUnAANjjHsAA2OfAAFsoAgACJ4bihMAA2PXALC6qAD4BQsAA2QYAPz2IwADZG8AsLe4cwADZLS7AAEKgAwADgMAA2ULALC3uasAA2V1gA8AAWq3AAMUzgcAA2WzALC38AMAAWdw9jMAA2XnALC6qFsAA2YaAwADZgMAsLe6DtZ89PYvAANmUwCwujBzAANmSg8AA2ZTALC6MZAEAAZQAwAD/QUnAANmqIR7AANmvwABbKAIAAieAp4TAANm9wCwuqgA+AknAANnOIR7AANnTwABbKAIAAieG4oTAANnhwCwuqgA+Az0cwADaCi7AAEJXAgAChMAA2jDALC6qHMAA2lNqwADaPF0DkdEBYQMBYAPAAQACYAORurH2iD0BAAEnhuIAkdUAwABaej2MwADapcAsLqoWwADasoLAANqswCwuFZ15ny9DwADaxiEcwADa2BbAANrTgMAA2s3ALC3ug7WfPUgBAAGEwADa28AsLqoAwAD/dT4BPYjAANrvwCwt7hbAANr9gMAA2vfALC3ug7WfPT9CwADbIQA/PYjAANs2wCwt7oTAANs+wCwuqknAANtOHMAA22GDwADbUsAsLoxIAQABkwDAAP8/PgM9HMAA228uwABCoQMAA4DAANuMwCwt7mrAANujYAORxa91H8AA29GfFwQABGrAANv/YAOfasAAsbYnABbAANwaFsAA3BWAwADcD8AsLe6DtZ89h3GfK5MAAMAAWgg9iMAA3DHALC3uHMAA3EMuwABCoAMAA4DAANxYwCwt7mrAANxzYAPAAFqtwADFM4HAANyCwCwt/ADAAFncPYvAANyRwCwujBzAANyPg8AA3JHA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EHkWwAEQdIDAARBuwCxPFIO1nz2dz58zABzAARC4asABEJxdA8AA/r8BYAPAAQACwAEPn4McAQABFsABEMwWwAEQx4DAARDBwCxPFIO1nz2CYp88AMAA/ow+Aj0cwAEQ3y7AAEJXAgACFsABEQmAwAERA8AsTxSDtZ89HMABES1qwAERFV0DkdEBYQMBYAPAAQACYAORurR9iD0BAAEnmkAAkdUAwABaej2IwAERS8AsTxQcwAERUy7AAELKAQABgMABEWDALE8UAMAAWe8+AT2IwAERf8AsTxQcwAERhy7AAELIAQABgMABEZfALE8UAMAAWe5JwAERriEcwAERzRbAARHDhMABEbLALE9toxTAAI0aSAEAASsAwAD/dT4BScABEeCFwAER5MAsT9Q+AT0cwAER9y7AAEJXAgACFsABEi6EwAESHcAsT22jFMAAjRpqwAESP2ADkcXAAGwXAMAAWno+AknAARJ1hsABEnnALFAOPgE9HMABEpYuwABCVwIAAhbAARLPhMABEr7ALE9toxTAAI0aasABEuBgA5HFwABH8wDAAFp6Pz2NwAETEsAsT9QpPz2IwAETOcAsTxQcwAETQS7AAEK9AQABgMABE2DALE8UAMAAWepJwAETbyEcwAETlhbAAROEhMABE3PALE9twABAuMAAjRtIAQABKwDAAP91PgFJwAETqYbAAROtwCxQDj4BPRzAARPILsAAQlcCAAIWwAET8ITAARPfwCxPbcAAQLjAAI0basABFBdgA5HFwABrsADAAFp6PgE9jsABFE7ALFAOKT89HMABFIYWwAEUfS6qHcAAWaXAAEDvAAAAAMAAWJEiIR7AART8wABbKAIAAieaEhbAARUQgMABFQrALE8Ug7WfPQAAIRzAARUfh8ABFRnALFBoSAEAAYDAARUiwCxPFADAAP91PRfAARUvLqodg8ABFTrALE9LwABZpUrAARVPAYDAARVWwCxPFAbAAFnugQPAARW2wAEVvMABFmUAAMAAQsgAAAABA8ABFcvAARZlAAAAAQEBwAEV0gAAAJKpYAOfIgAAYAOfIgE+AknAARXfIR7AARXkwABbKAIAAieaQBbAARX5gMABFfPALFP+g7WfPQA+Aj0cwAEWERbAARYILqodwABZpcAAQPICAAIrkwDAAFiPSsABFi8BgMABFjbALFP+P0rA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A4HAASCTwCxWrWrAASCqYAPAAFr7wAEKNTUAAAABAGADnyIBgsABILXALFbvIxzAASC7hQDALFuSSAEAASsAACsWwAEgu4UAwCxbkoJinzwBYAPAAQACAMAAWg09HMABINEWwAEgyC6qHcAAWaXAAECyAwADgMABIOnALFZxg8ABIPvALFfUgcABIQbALFatAMAAWJVKwAEhEgGBwAEhGcAsVq0GwABZ8YEDwAEhJ8ABIS3AASKMAADAAELMAAAAAQPAASE8wAEijAAAAAEBAcABIUMAAACSqWADnyIAAGADnyIBPgROwAEhVsABIVsAAIO1YAOfIgEWwAEhY4DAASFdwCxcSIO1nz1JwAEhbSEcwAEhexbAASF2gcABIXHALFxfgmufOkgBAAFqwAEhfmADwAD+G8AAYBkAwAD/Pz4CPRzAASGULsAAQkgCAAKBwAEhtMAsXF9qwAEhwF0DkdEBYQMBYAOfImADkbq1bADAAFp7PYnAASHfwCxcXxzAASHvFsABIeYuwABCO8AAWa7AAELNAgACgMABIfvALFxIH8ABIhCfFwMAA2rAASIvYAOfasAAsnInABbAASJAgcABIjvALFxfh3GfKwAAwACNLj89HMABImEWwAEiWC6qHcAAWaWiJQEAAYHAASJywCxcXwDAAFmESsABIn0BgcABIoTALFxfBsAAWfKBA8ABI0bAASNMwAEkiQAAwABCWAAAAAEDwAEjZcABJIkAAAAEAgLAASNsAAAAkqlgA58iAMABI4UAAACCV2ADwABawAACwAEjnQAAACJgA5G6AWoAYAPAAP8lecABI6wAAADAAELOYAOfIgFqAGADwAD/JXlgA58iAT4DTsABI8nAASPOAACDtWADnyIBFsABI9aAwAEj0MAsXauDtZ89PRzAASPgLsAAQlcCAAI1AAAAAQBgA58iAYPAASP3wCxd4CMcwAEkBoUAwCxeM0gBAAErAACEwAEkCcAsXgGFAMAsXjMBYAOfIjUAAAABAGADkboBgsABJBfALF3KIxzAASQfhQDALF5uSAEAASsAABzAASQ7FsABJCqBwAEkIsAsXbnAAELPwABa9Ig9AQABhMABJEnALF4BAJHVhQDALF5uAWADkboAwABaekrAASRVARzAASRlFsABJFwuwABCO8AAWa7AAEJYAQABgMABJH/ALF2rAMAAjUkGwABZ84EDwAElzMABJdLAASdbAADAAEJqAAAAAQPAASXiwAEnWwAAAAICAsABJekAAACSqWADnyIAwAEmAgAAAIJXYAPAAFrAAABgA58iAT4FQCEcwAEmIIHAASYYwCxfOEgBAAErAMAA/3XAASYYwAEmJwBOwAEmNMABJj8AAJ33YAOfIgEWwAEmR4DAASZBwCxfKoO1nz1JwAEmUSEcwAEmZRbAASZggsABJlXALF90gmufOkgBAAFqwAEmaGADwAD+G8AAnE4AwAD/Pz4DPYrAASaCwCxfdBzAASaXgcABJo/ALF84wABCagIAAoDAASaowCxfKi4AwABa90AhHMABJs6CwAEmw8AsX3RIAQABKwDAAP91wAEmw8ABJtUAQBbAASbwgsABJuXALF90nc+fM8ABJuXAAScFAD89HMABJxsWwAEnEi6qHcAAWaWiAwIAAoLAAScswCxfdIHAASc4wCxfOADAAFlnSsABJ0YBgsABJ03ALF90BsAAWfSBA8ABJ2DAASdlwAEn8AAAwABC0AAAAAEDwAEncsABJ/AAAAACAgLAASd6AAAAgJZgA8ABAAIAwAEnhwAAAJKpYAOfIgAAYAPAAPxVAT4BSsABJ5QBIiEewAEnnMAA9/wCAAIWwAEnrIHAASemwCxgtYJrnzpqwAEnsmADwAD+GwkAACEewAEnycAA9/wCAAKAwAEn08AsYKUWwAEn4IHAASfawCxgtZ3Zn0EABsAAWfWBA8ABJ/XAASf7wAEobQAAwABC0QAAAAEDwAEoEMABKG0AAAABAQHAASgXAAAAkqlgA58iAABgA58iAT4BSsABKCQBHMABKE4ewAEoK8AAjVYCAAKAwAEoQcAsYVYpAMAAQpACAAKAwAEoXcAsYVYuAMAAjWwGwABZ9oEDwAEpqsABKbDAASpDAADAAEC/AAAAAQPAASnDwAEqQwAAAAEBAcABKcoAAACSqWADnyIAAGADnyIBPgI9iMABKdfALGHQHMABKd8uwABAoAEAARzAASnxLqG1AQABgMABKgjALGHQAMAAWoMAwABZzkrAASoVARbAASo7HMABKhwuwABCVgEAAYDAASo0wCxh0ADAAFn3g7WfPQbAAFn3gQPAASpIwAEqTsABP3wAAMAAQlYAAAABA8ABKmXAAT98AAAAAQEBwAEqbAAAAJKpYAOfIgAAYAOfIgE+FE7AASp/wAEqiwAAwABC0mADnyIBgMABKo3ALGJxTsABKp7AASqjAACDtWADnyIBFsABKquAwAEqpcAsYnGDtZ89PRzAASq+FsABKrUuqh3AAFmlwABCBgEAAYLAASrSwCxipQDAAFkxTsABKuQAAADAAED5YAOfIgBOwAEq/QAAAKFjYAOfIgBOwAErEgAAAKFkYAOfIgBJwAErKB7AASsswACM1QEAAYLAASs3wCxipQA+AknAAStGHsABK0rAAFsoAgACJ4QugsABK1/ALGKlAD4CPYvAAStwwCxi8IjAASuAwCxicYLAASuIwCxipT2KwAErlsAsYqUWwAEro4DAASudwCxicYO1nz0/ScABK7cewAEru8AAjNUBAAGCwAErxsAsYqUAPgJJwAEr1x7AASvbwABbKAIAAieEKoLAASvtwCxipQA+Aj2NwAEsAMAsYxCIwAEsEsAsYnGCwAEsGsAsYqU9isABLCrALGKlFsABLDeAwAEsMcAsYnGDtZ89ScABLEwewAEsUMAAWygCAAInhCuCwAEsYMAsYqUAPgI9jcABLHPALGMQiMABLIXALGJxgsABLI3ALGKlPYrAASydwCxipRbAASyqgMABLKTALGJxg7WfPUnAASy/HsABLMPAAFsoAgACJ4QsgsABLNXALGKlAD4CPY3AASzowCxjEIjAASz6wCxicYLAAS0CwCxipT2KwAEtEsAsYqUWwAEtH4DAAS0ZwCxicYO1nz1JwAEtNB7AAS04wABbKAIAAieaLYLAAS1JwCxipQA+Az2MwAEtXMAsYwGIwAEtaMAsYnGCwAEtcMAsYqU9isABLYDALGKlFsABLY2AwAEth8AsYnGDtZ89ScABLZ0iHsABLaHAAIzVAQABgsABLazALGKlAAAewAEttcAAWygCAAInhCqCwAEtx8AsYqUAPgI9jcABLdzALGMQiMABLe7ALGJxgsABLfbALGKlPYrAAS4IwCxipRbAAS4VgMABLg/ALGJxg7WfPT8/ScABLjkewAEuPcAAjNUBAAGCwAEuSMAsYqUAPgFJwAEucSIhHMABLoWFwAEudcAsYxBIAQABKwDAAP91ACIiHsABLp/AAFsoAgACJ4QqgsABLrHALGKlAAEewAEuzMAAWygCAAInhCuCwAEu3MAsYqUAAR7AAS73wABbKAIAAieE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g7WfPUAewAFxg8AAWygCAAInmkeBwAFxlcAskBUAwAFxg8ABcZsATsABcajAAXGtAACDtWADnyIBFsABcbWBwAFxr8AskBWDtZ89ScABcb8ewAFxw8AAWygCAAIngWqCwAFx0cAskFwAPgU9icABceDALJAVgsABcejALJBcPYrAAXH0wCyQXBbAAXIBgcABcfvALJAVg7WfPUnAAXINIRzAAXIbFsABchaCwAFyEcAskFyCa586SAEAAWrAAXIeYAPAAP4bwACcTgDAAP8/PgE9isABcjrALJBcHMABcndqwAFyU2ADwACNm8ABEGXAAEJqAgACgcABcojALJAVLgDAAI2dPz2JwAFypMAskBWCwAFyrMAskFw9isABcrjALJBcFsABcsWBwAFyv8AskBWDtZ89P0nAAXLVIR7AAXLawABbKAIAAieD3ILAAXLowCyQXAA+AknAAXMJHsABcw3AAFsoAgACJ545gsABcxzALJBcAD4FPYnAAXN0wCyQFYLAAXN8wCyQXD2KwAFzisAskFwWwAFzl4HAAXORwCyQFYO1nz1JwAFzpSEWwAFzr4LAAXOqwCyQXJ1UnzE+AT2KwAF0FMAskFwcwAF0JBbAAXQbLsAAQjvAAFmuwABCWAEAAYHAAXQ+wCyQFQDAAI1JPz2JwAF0WMAskBWCwAF0YMAskFw9isABdG7ALJBcFsABdHuBwAF0dcAskBWDtZ89P0nAAXSPHsABdJPAAFsoAgACJ4C8gsABdKHALJBcAD4BScABdLIewAF0tsAAWygCAAInmkeBwAF0yMAskBUAPgA+AT0cwAF1My7AAEJXAgACgcABdVnALJAVasABdWZgA5HFvxUAwABaeknAAXWsIR7AAXWxwABbKAIAAieD3ILAAXW/wCyQXAA+Aj0cwAF10C7AAEJXAgACgsABdfTALJBcHMABdhxqwAF2AF0DkdEBYQMBYAPAAQACYAORurD3iD0BAAEng9wAkdUAwABaej0cwAF2QhbAAXY5LsAAQjvAAFmuwABCdwIAAoHAAXZPwCyQFSoAwACNLT8/SsABdnABHMABdncuwABC4wEAAYDAAXaWwCyP/wDAAFoBBsAAWgGBA8ABdqXAAXarwAF3OgAAwABC4wAAAAEDwAF2ycABdzoAAAABAQHAAXbQAAAAkqlgA58iAABgA58iAT4DPYjAAXbdwCyTnxzAAXblLqG0AQABgMABdvXALJOfAMAAWig9HMABdwoWwAF3AS6qHcAAWaWhhAEAARbAAXcfgMABdxnALJOfg7WfPQDAAFj1SsABdyoBgMABdzHALJOfBsAAWgKBA8ABeJHAAXiXwAF7kAAAwABCsQAAAAEDwAF4osABe5AAAAADAwPAAXipAAAAkqlgA58iAMABeN4AAACI5V0DkdEBYQMBYAOfImADkboAwAF47wAAAMAAQuVgA8ABAAIAAGADnyIBPgROwAF5BsABeQsAAIO1YAOfIgEWwAF5E4DAAXkNwCyUQYO1nz1JwAF5HR7AAXkhwABbKAIAAieaEoPAAXkvwCyUhABKwAF5NgGDwAF5PcAslIQ/ScABeUccwAF5VIHAAXlLwCyUT0gBAAErAMAA/3U+AUnAAXllHMABeXOCwAF5acAslGlIAQABKwDAAQARPgE9HMABeckuwABCVwIAAoPAAXntwCyUhBzAAXoQasABefldA5HRAWEDAWADwAEAAmADkbqx9og9AQABJ5oSAJHVAMAAWno+AT0cwAF6pi7AAEJXAgACgMABer3ALJRBHMABevdqwAF61l0DkdEBYQMBYAPAAQACYAORurKaiD0BAAGCwAF7BcAslGkAkdUAwABaej4BPRzAAXstLsAAQlcCAAKDwAF7RMAslIQcwAF7U4HAAXtKwCyUT4g9AQABg8ABe2HALJSEAJHVAMAAWnpKwAF7cwEcwAF7ei7AAELmAQABgMABe4bALJRBAMAAWgMGwABaA4EDwAF7lcABe5vAAX0UAADAAELmAAAAAQPAAXumwAF9FAAAAAEBAcABe60AAACSqWADnyIAAGADnyIBPgVOwAF7wMABe8UAAIO1YAOfIgEWwAF7zYDAAXvHwCyWL4O1nz1OwAF74sABe+0AAMAAQudgA55NASbAAXviARzAAXv4FsABe+8uwABCO8AAWa7AAELNAgACgMABfATALJYvH8ABfBefBQIAAmrAAXw1YAOfasAAnzcWwAF8ToHAAXxJwCyWRoNinz4AAMAAjS5gA55NTsABfGLAAXxrAACdeWADnyIBHMABfHYWwAF8bS7AAEI7wABZrsAAQs0CAAKCwAF8gsAslmofwAF8mp8hAgACasABfLNgA59qwAC11BbAAXzNgcABfMjALJZGg2KfPgAAwACNLj0XwAF85oLAAXzbwCyWap15g8ABfPHALJbanlVKwAF8/wGCwAF9BsAslmoGwABaBIEDwAF90MABfdbAAYCuAADAAEKdAAAAAQPAAX3mwAGArgAAAAICAsABfe0AAACSqWADnyIAwAF9+gAAAMAAQuhgA58iAABgA58iAT4FTsABfhHAAX4WAACDtWADnyIBFsABfh6AwAF+GMAsl5SDtZ89ScABfigewAF+LMAAWygCAAIngyaCwAF+OsAsl7sAPgFKwAF+SQGCwAF+UMAsl7s/ScABfmAWwAF+dxbAAX5ugcABfmTALJeinXmfL4STnzY+AUrAAX8GARzAAX8WFsABfw0uwABCO8AAWa7AAEJ6AgACgMABfyTALJeUFsABfzWBwAF/K8Asl6KdeZ8vAMAAjS8/PRzAAX+MLsAAQlcCAAKCwAF/rMAsl7scwAF/z2rAAX+4XQOR0QFhAwFgA8ABAAJgA5G6sfaIPQEAASeDJgCR1QDAAFp6SsABgJEBFsABgKKBwAGAmMAsl6KdeZ8vBsAAWgWBA8ABgT3AAYFDwAGCcQAAwABC6QAAAAEDwAGBTsABgnEAAAABAQHAAYFVAAAAkqlgA58iAABgA58iAT4FTsABgWjAAYFtAACDtWADnyIBFsABgXWAwAGBb8AsmPqDtZ89ScABgX8ewAGBg8AAWygCAAInguqBwAGBkcAsmREASsABgZgBgcABgZ/ALJkRP07AAYGxwAGBuQAAImADkboBHMABgdhqwAGBwV0DkdEBYQMBYAPAAQACYAORurH2iD0BAAEnguoAkdVOwAGB9sABgf8AAMAAQupgA58iAR/AAYIFnyECAAJqwAGCHmADn2rAALUTFsABgiqBwAGCJcAsmRGHcZ8rAErAAYI7ARzAAYJCLsAAQqEDAAOAwAGCVMAsmPqCwAGCW8AsmWODwAGCZMAsmZ0AwABaCAbAAFoGgQPAAYMVwAGDG8ABhJwAAMAAQmwAAAABA8ABgy7AAYScAAAAAQEBwAGDNQAAAJKpYAOfIgAAYAOfIgE+A07AAYNIwAGDTQAAg7VgA58iARbAAYNVgMABg0/ALJo5g7WfPUnAAYNfIR7AAYNkwAD3/AIAAhbAAYNzgcABg27ALJpQgmufOmrAAYN5YAPAAP4bwABgGQA+A07AAYOYwAGDoAAAImADkboBHMABg79qwAGDqF0DkdEBYQMBYAOfImADkbq1bIg9AQABgcABg83ALJpQAJHVTsABg+DAAYPpAADAAELqYAOfIgEfwAGD+Z8XBAAEasABhBhgA59qwACycifAAELrFsABhCuBwAGEJsAsmlCHcZ8rkwA9HMABhEEuwABCoQMAA4DAAYRTwCyaOYLAAYRawCyaqoPAAYRjwCya6ADAAFoIP0rAAYR4ARzAAYR/LsAAQuwBAAGAwAGEksAsmjkAwABaRgbAAFoHgQPAAYVJwAGFT8ABiAEAAMAAQmcAAAABA8ABhV7AAYgBAAAAAQEBwAGFZQAAAJKpYAOfIgAAYAOfIgE+BE7AAYZFwAGGSgAAg7VgA58iARbAAYZSgMABhkzALJung7WfPUnAAYZcHsABhmDAAFsoAgACJ5b5gcABhm7ALJu+AErAAYZ1AYHAAYZ8wCybvj89HMABhzwuwABCVwIAAh7AAYdTwABbKgEAAYDAAYdywCybpwAcwAGHpGrAAYeIXQOR0QFhAwFgA8ABAAJgA5G6sPeIPQEAASeW+QCR1QDAAFp6SsABh70BHMABh80WwAGHxC7AAEI7wABZrsAAQtkCAAKAwAGH4sAsm6dqwAGH82ADn2rAALyKAMAAjUsGwABaCIEDwAGIlsABiJzAAYlDAADAAEKhAAAAAQPAAYitwAGJQwAAAAMDA8ABiLQAAACSqWADnyIAwAGIwwAAACJgA5G6AMABiNIAAADAAELqYAOfIgAAYAOfIgE+Aj0cwAGI4i7AAEJXAgACFsABiP+AwAGI+cAsnMiDtZ89gcABiQXALJzWAMAAWnpKwAGJEwEcwAGJIxbAAYkaLsAAQjvAAFmuwABCzQIAAoDAAYkvwCycyILAAYk2wCyc4wDAAI0uBsAAWgmBA8ABiaHAAYmnwAGK/gAAwABCnwAAAAEDwAGJvMABiv4AAAABAQHAAYnDAAAAkqlgA58iAABgA58iAT4FTsABidbAAYnbAACDtWADnyIBFsABieOAwAGJ3cAsnYyDtZ89QB7AAYn0wABbKAIAAidLgcABigPALJ2jAMABifTAAYoIAE7AAYoVwAGKIQAAhFxgA58iARzAAYojLpZ+AgACH8ABijWeVwIAAmrAAYpKYAOfasAAn54WwAGKZIHAAYpfwCydo4Ninz4AH8ABinme8QIAAmrAAYqJYAOfasAAtjYcwAGKqxbAAYqkgcABip/ALJ2jg2KfPmQBAAGUAMAA/0EAAMAAWoI9HMABir8WwAGKti7AAEI7wABZrsAAQu0CAAKAwAGK1cAsnYyCwAGK3MAsnekAwACNMErAAYruAYDAAYr1wCydjAbAAFoKgQPAAYulwAGLq8ABjVgAAMAAQnUAAAABA8ABi8HAAY1YAAAAAgICwAGLyAAAAJKpYAOfIgDAAYvcAAAAwABC7l0DwAD+vwFgA8ABAAIAAGADnyIBPgNOwAGL9sABi/sAAIO1YAOfIgEWwAGMA4DAAYv9wCye2oO1nz1JwAGMDRzAAYweFsABjBaCwAGMEcAsnwqdzJ85SAEAASsAwAD/dT4CTsABjDzAAYxGAAHAAEJLYAPAAQACARbAAYxSFsABjE2CwAGMSMAsnwqDtZ89ndmfQUbAAYxlwAGMkMABjHEAAADAAELvYAPAAQACAIHAAYyCwCye6D4BScABjJoewAGMnsAA9/wCAAKDwAGMqMAsn1aEwAGMs8Asn48APgI9HMABjM8uwABCSAIAAoLAAYzvwCyfCmrAAYz7XQOR0QFhAwFgA58iYAORusAAk90AwABae0rAAY0fAYLAAY0mwCyfCj8/SsABjUgBgMABjU/ALJ7aBsAAWguBA8ABjV3AAY1jwAGPEQAAwABCvgAAAAEDwAGNdMABjxEAAAABAQHAAY17AAAAkqlgA58iAABgA58iAT4HTsABjY7AAY2aAACiLWADnyIBiMABjZzALKBTFsABjaqAwAGNpMAsoFODtZ89QB7AAY27wABbKAIAAiedpoHAAY3OwCygagDAAY27wAGN2gBOwAGN5sABje4AAKIuYAPAAPxVASpJwAGN+xzAAY4PFsABjgoWwAGOBYDAAY3/wCygU4O1nz2Ca586SAEAAWrAAY4SYAPAAP4bwABgGQDAAP8/PgI9isABjijALKC6KT2IwAGOPsAsoFMcwAGORi7AAELsAQABgMABjlnALKBTAMAAWkY/PRzAAY50FsABjmsuqh3AAFmloiwCAAKBwAGOh8AsoGqCwAGOlMAsoLoAwABZdT0cwAGOoi7AAEJXAgACgcABjsLALKBqasABjtVgA5HFwABtCgDAAFp6SsABjwEBgMABjwjALKBTBsAAWgyBA8ABjxbAAY8cwAGPtgAAwABC8AAAAAEDwAGPO8ABj7YAAAABAQHAAY9CAAAAkqlgA58iAABgA58iAT4BSsABj40BHMABj5QuwABCsQMAA4DAAY+gwCyh0CsrAMAAWgIGwABaDYEDwAGQBcABkAvAAZI6AADAAEK6AAAAAQPAAZArwAGSOgAAAAMDA8ABkDkAAACSqWADnyIAwAGQUAAAAIJrYAPAAFr7AMABkF0AAADAAELxYAPAAQACAABgA58iAT4JTsABkIPAAZCJAACCmGADnyIBiMABkIvALKI1FsABkJmAwAGQk8AsojWDtZ89QB7AAZCqwABbKAIAAieaEoDAAZC4wCyiNQDAAZCqwAGQvgA9HMABkM4WwAGQxS6qHcAAWaXAAEClAgACgcABkOTALKJDgMABkOrALKI1AMAAWIVOwAGQ+sABkQAAAIDuYAPAAP4bAZNDwAGRCRzAAZEQLsAAQtACAAInhuIWwAGRKYDAAZEjwCyiNYO1nz0AwABZ9D4CPYjAAZE4wCyiNRzAAZFALsAAQvIDAAOAwAGRcsAsojWBwAGRecAsokOCwAGRf8AsolMAwABaEj2MwAGRosAsou4cwAGRoITAAZGiwCyi7mQBAAGUAMAA/0E9iMABkbPALKI1FsABkcGAwAGRu8AsojWDtZ89QB7AAZHSwABbKAIAAieG4oDAAZHgwCyiNQDAAZHSwAGR5gA9HMABkfYWwAGR7S6qHcAAWaXAAECmBAAEgcABkgrALKJDhMABkhDALKLug8ABkhfALKJugMABkh7ALKI1AMAAWIZKwAGSKgGAwAGSMcAsojUGwABaDoEDwAGSP8ABkkTAAZLJAADAAEKZAAAAAQPAAZJQwAGSyQAAAAEBAcABklcAAACSqWADnyIAAGADwAD8VQFKwAGSZwEiIhzAAZJyFsABkm2AwAGSZ8AspEWCa586SAEAAWrAAZJ1YAPAAP4bwACcTgDAAP8/ABzAAZKcFsABkpWAwAGSj8AspEWCYp88SAEAASfAAELzAMABABEAHsABkrDAAFsoAgACJ4GNFsABksSAwAGSvsAspEWDtZ89AAbAAFoPgQPAAZP3wAGT/cABlMAAAMAAQMAAAAABA8ABlA3AAZTAAAAAAgICwAGUFAAAAJKpYAOfIgDAAZQiAAAAhpJgA8ABAAIAAGADnyIBPgFKwAGUMwEWwAGUuBzAAZQ6LsAAQvIDAAMcwAGUbi6htQEAAYDAAZSFwCylBwDAAFqDasABlJ1gA8AAWvvAAQ8zgcABlKTALKUVAMAAWhKDtZ89BsAAWhCBA8ABle7AAZX0wAGWtwAAwABC9AAAAAEDwAGWBMABlrcAAAACAgLAAZYLAAAAkqlgA58iAMABlhkAAAC/wWADwAEAAgAAYAOfIgE+AUrAAZYqARbAAZavHMABljEuwABC8gMAAxzAAZZlLqG1AQABgMABlnzALKWrAMAAWoNqwAGWlGADwABa+8ABD3eBwAGWm8AspbkAwABaEoO1nz0GwABaEYEDwAGX6sABl/DAAZjCAADAAEL1AAAAAQPAAZgEwAGYwgAAAAICAsABmAsAAACSqWADnyIAwAGYGQAAAKlxYAPAAQACAABgA58iAT4BSsABmC4BFsABmLocwAGYNS7AAELyAwADHMABmFwuobUBAAGAwAGYc8Aspk8AwABag2rAAZiXYAPAAFr7wAEKNYHAAZiiwCymXQDAAFoSg7WfPQbAAFoSgQPAAZoCwAGaCMABtsoAAMAAQvIAAAABA8ABmi7AAbbKAAAAAwMDwAGaPAAAAJKpYAOfIgDAAZpTAAAAgmtgA8AAWvsAwAGaYAAAAMAAQvFgA8ABAAIAAGADnyIBPhROwAGahsABmpIAAMAAQtJgA58iAYjAAZqUwCym8xzAAZqcLsAAQKABAAGAwAGarsAspvMAwABZzk7AAZrBAAAAoWJgA58iAE7AAZrbAAAAwABA+WADnyIATsABmvQAAAChY2ADnyIATsABmwkAAAChYWADnyIATsABmyAAAAChZGADnyIATsABmzzAAZtBAACDtWADnyIBFsABm0mAwAGbQ8AspvODtZ89ScABm1MewAGbV8AAjNUBAAEUwAGbYsAsp7EJAAA+AknAAZtxHsABm3XAAFsoAgACJ4QuFMABm4rALKexCQAAPgI9jcABm5vALKdziMABm6vALKbzFMABm7PALKexCQA9FcABm8HALKexCRbAAZvOgMABm8jALKbzg7WfPT9JwAGb4h7AAZvmwACM1QEAARTAAZvxwCynsQkAAD4CScABnAIewAGcBsAAWygCAAInhCgUwAGcGcAsp7EJAAA+Aj2PwAGcLMAsp5OIwAGcOsAspvMUwAGcQsAsp7EJAD0VwAGcUsAsp7EJFsABnF+AwAGcWcAspvODtZ89ScABnHQewAGceMAAWygCAAInhC8UwAGcjsAsp7EJAAA+Aj2MwAGcocAsp2SIwAGcssAspvMUwAGcusAsp7EJAD0VwAGcysAsp7EJFsABnNeAwAGc0cAspvODtZ89P0nAAZzvHsABnPPAAIzVAQABFMABnP7ALKexCQAAPgJJwAGdER7AAZ0VwABbKAIAAieEKhTAAZ0nwCynsQkAAD4CPRXAAZ08wCynogiIwAGdTsAspvMUwAGdVsAsp7EJAD0VwAGdaMAsp7EJFsABnXWAwAGdb8AspvODtZ89ScABnYwewAGdkMAAWygCAAInhCsUwAGdoMAsp7EJAAA+Aj0VwAGdtcAsp6IIiMABncfALKbzFMABnc/ALKexCQA9FcABneHALKexCRbAAZ3ugMABnejALKbzg7WfPUnAAZ4FIh7AAZ4JwABbKAIAAieELBTAAZ4bwCynsQkAAAAcwAGeM4TAAZ4kwCynZEgBAAErAMAA/3U+Aj0VwAGeSsAsp6IIiMABnlzALKbzFMABnmTALKexCQA9FcABnnbALKexCRbAAZ6DgMABnn3ALKbzg7WfPUnAAZ6aHsABnp7AAFsoAgACJ5otFMABnq/ALKexCQAAPgM9jsABnsTALKeEiMABntDALKbzFMABntjALKexCQA9FcABnurALKexCRbAAZ73gMABnvHALKbzg7WfPUnAAZ8JIh7AAZ8NwACM1QEAARTAAZ8YwCynsQkAAAAewAGfIcAAWygCAAInhCoUwAGfM8Asp7EJAAA+Aj0VwAGfSsAsp6IIiMABn1zALKbzFMABn2TALKexCQA9FcABn3jALKexCRbAAZ+FgMABn3/ALKbzg7WfPT8/ScABn68ewAGfs8AAjNUBAAEUwAGfvsAsp7EJAAA+CU7AAZ/rwAGf8wAAgldgA8AAjNYBNcABn/kAAAEAYAPAAIzWAR/AAZ/5wACM/AEAAS4ANQAAAAEAWwEXwAGgJxTAAaAlwCyriQoAoWKEwAGgOMAsp2TAAIzbNQAAAAEAWwEXwAGgVxTAAaBVwCyriQoAwABA+YXAAaBnwCync8AAjNw1AAAAAQBbARfAAaCFFMABoIPALKuJCgChY4bAAaCRwCynhMAAjN41AAAAAQBbARfAAaCrFMABoKnALKuJCgChYYfAAaC5wCynk8AAjOA1AAAAAQBbARfAAaDVFMABoNPALKuJCgChZBTAAaDnwCynoggAwACM5RQAwCyriQoAPYjAAaEFwCym8xzAAaEVFMABoQ3ALKt1CgDAAEL2AQABgMABoS/ALKbzAMAAjOk9FcABoUPALKexCRbAAaFQgMABoUrALKbzg7WfPT2MwAGhY8Asp2QWwAGhfBTAAaF0wCyrdQoAoWLAAIzbPY3AAaGYwCyncxbAAaGwFMABoajALKt1CgDAAED5wACM3D2OwAGhy8Asp4QWwAGh3xTAAaHXwCyrdQoAoWPAAIzePY/AAaH2wCynkxbAAaIMFMABogTALKt1CgChYcAAjOA9FcABoiXALKeiCBbAAaI/FMABojfALKt1CgChZMAAjOc9FcABol3ALKt1Cis/Pz8/PRzAAaKfFsABopYuqh3AAFmlwABB8gAAAADAAFkGTsABornAAaLEAADAAEKlYAOfIgGAwAGixsAspvNOwAGi2sABouMAAMAAQo1gA8AAjVgBHsABouXAAI1VAwADgMABovHALKbzKikAPYjAAaMKwCym8xzAAaMbFMABoxLALK2wCwDAAEKOAQABgMABoyTALKbzAMAAjWI9FcABozDALKexCRbAAaM9gMABozfALKbzg7WfPU7AAaNOAAAAwABAXWADnyIAScABo1whHMABo2oWwAGjZRTAAaNgwCynsQkAgpSfQkgBAAFqwAGjd2ADn2rAALG2AMAA/3U+Ak7AAaOSwAGjmAAAgJZgA8ABAAIBFsABo58UwAGjmsAsp7EJAJ3Zn0FJwAGjsiIewAGjtsAA9/wCAAIUwAGjwMAsrnINACeaQQABHsABo9HAAPf8AgACFMABo9vALK5yDQAnl3kAPgFJwAGj9BbAAaQCFsABo/0UwAGj+MAsp7EJAIO1nz2dVJ8xPgI9FcABpBzALK4qDIjAAaQnwCym8xTAAaQvwCynsQkAPRXAAaQ/wCynsQkWwAGkTIDAAaRGwCym84O1nz0/ScABpLYewAGkusAA9/wCAAIUwAGkxMAsrnINACeELQA+Ak7AAaTnwAGk7QAAm8BgA58iARbAAaT0FMABpO/ALKexCQCDtZ89ScABpQIiFsABpQwUwAGlBsAsr1wOAJ1UnzEBFsABpSIUwAGlHMAsr1wOAJ3GnzQ+BEnAAaU6IRzAAaVJFMABpT7ALK2TCgBIAQABgMABpUzALKbzAMAA/3U+AT0cwAGlYS7AAEJXAgACgMABpXjALKbzasABpYVgA5HFwACPjQDAAFp6Pz2IwAGltsAspvMcwAGlvi7AAEL3BgAGgMABpdHALKbzgcABpdjALKcBg8ABpd7ALKcshcABpevALKdzNQAAAAEAYAOfIgGHwAGmCMAsp5MjHMABphQUAMAssEIPAEgBAAErAACEwAGmF8Asp2QUAMAssEIPAAFgA58iFMABpifALKeiCAAAwABaFD0cwAGmTBbAAaZDLqodwABZpaFwAAAAAMAAWQhKwAGmYwGAwAGmasAspvM/ScABptAewAGm1MAA9/wCAAIUwAGm3sAsrnINACeFzgA+A07AAacCwAGnCAAAm8BgA58iARbAAacPFMABpwrALKexCQCDtZ89TsABpzDAAac6AACfUmADwACNZQEewAGnPMAAjVYBAAEUwAGnUsAsp7EJAABJwAGnzyIWwAGn2RTAAafTwCyw3w4AgiyfOAAcwAGn/hTAAaf0wCyxBQ8ASAEAAWrAAagBYAPAAI1lwAEOlADAAP91PgM9iMABqB/ALKbzHMABqCcuwABC+AwADIPAAahCwCynLIXAAahdwCync4fAAah6wCynk4TAAaiVwCynZIbAAaizwCynhBTAAajMwCynoggAFMABqOvALK2TCgAUwAGpBcAsrbALABTAAakdwCyuKgwAFsABqTuAwAGpNcAspvODtZ89gcABqU/ALKcBgsABqWPALKcRAMAAWhM9HMABqZEWwAGpiC6qHcAAWaWhcAAAAADAAFkISsABqagBgMABqa/ALKbzScABqcUiIh7AAanJwABbKAIAAieeGBTAAanZwCyw3w4AAAEewAGp78AAWygCAAInngYUwAGp/8AssN8OAAABIiIWwAGqHBTAAaoWwCyw3w4AndifNQAhHsABqjvAAFsoAgACJ4C8FMABqknALLDfDgAAACEewAGqZMAAWygCAAInYxTAAapywCyw3w4AAD4BSsABqq8BHMABqrYuwABC+QgACIPAAarlwCynLIXAAasAwCync4fAAasdwCynk4TAAas4wCynZIbAAatWwCynhBTAAatvwCynoggAFMABq47ALK2TCgCBwAGrqMAspwEAwABad0nAAau+HMABq8IuwABCmQEAARTAAavPwCyw3w4AAMAAWg4+Az2IwAGr+cAspvMcwAGsAS7AAEL4DAAMg8ABrBzALKcshcABrDfALKdzh8ABrFTALKeThMABrG/ALKdkhsABrI3ALKeEFMABrKbALKeiCAAUwAGsxcAsrZMKABTAAazfwCytsAsAFMABrPfALK4qDAAWwAGtFYDAAa0PwCym84O1nz2BwAGtKcAspwGCwAGtPcAspxEAwABaEz0cwAGtaxbAAa1iLqodwABZpaFwAAAAAMAAWQhKwAGtggGAwAGticAspvM/ScABrfAiIRbAAa36FMABrfXALKexCQCdVJ8xASIiHsABrhXAAPf8AgACFMABrh/ALK5yDQAnhpkAABzAAa5IgMABrkLALKbzSAEAAYPAAa5LwCynLADAAP91ABbAAa5yFsABrm0UwAGuaMAsp7EJAIO1nz2dVJ8xPgFKwAGunwEcwAGupi7AAEL6DAAMgMABrszALKbzg8ABrt/ALKcshcABrvjALKdzh8ABrxPALKeThMABryzALKdkhsABr0jALKeEFMABr1/ALKeiCAAUwAGvfMAsrZMKABTAAa+UwCytsAsAFMABr6rALK4qDACBwAGvwMAspwGCwAGv0sAspxEAwABaeD9JwAGwACIcwAGwDRTAAbAEwCytsAsASAEAAWrAAbAQYAPAAI1YwAENvQDAAP91ABzAAbAqFMABsBrALKeiCABIAQABKwDAAP91PgJOwAGwQcABsEcAAJvAYAOfIgEWwAGwThTAAbBJwCynsQkAg7WfPUnAAbBaIhbAAbBkFMABsF7ALLVpDQCCLJ84ABzAAbCOFsABsIUUwAGwf8AstWkNAJ15ny9IAQABKwDAAP91PgJOwAGwqMABsK4AAICWYAPAAQACARbAAbC7FsABsLYUwAGwsMAstWkNAIO1nz2d2Z9BScABsNAiIh7AAbDUwAD3/AIAAhTAAbDewCy1zw4AJ4PcAAEewAGw+cAA9/wCAAIUwAGxA8Astc8OACeaEgABHsABsR7AAPf8AgACFMABsSjALLXPDgAnmhMAPgFKwAGxdAEcwAGxey7AAEL5CAAIg8ABsarALKcshcABscXALKdzh8ABseLALKeThMABsf3ALKdkhsABshvALKeEFMABsjTALKeiCAAUwAGyU8AsrZMKAIHAAbJtwCynAQDAAFp3Pz8/PRXAAbLWwCynsQkWwAGy4hTAAbLdwCynsQkAg7Wf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LOeIgMACAYPALORyAMAAWSE+AT0cwAIBqxbAAgGiLqodwABZpaI+AgAChMACAcjALOeIKwDAAFkhSsACAeQBgMACAevALORyP07AAgICwAICCAAAgphgA58iAYPAAgIKwCzkrU7AAgIYwAICJwAAo81gA8AA/hsBk0nAAgIwIR7AAgI1wABbKAIAAieaEoPAAgJDwCzkrQA+A0nAAgKxHsACArXAAFsoAgACJ5pxg8ACAsjALOStAD4DPRzAAgLZLsAAQlcCAAKDwAIC8MAs5K1qwAIC/GADkcWx0ADAAFp6PYvAAgMawCzkrRzAAgMqFsACAyEuwABCO8AAWa7AAELNAgACg8ACA0PALOStH8ACA02fIQIAAmrAAgNmYAOfasAAtwgWwAIDehbAAgN1g8ACA3DALOStg7WfPYdxnysAAMAAjS5KwAIDkAEcwAIDly7AAEMSAgACg8ACA7PALOStgcACA7nALOSAAMAAWh4/ScACBKoiFsACBLODwAIErsAs5K2dz58zAB7AAgTMwABbKAIAAieaExbAAgTgg8ACBNvALOStg7WfPQA+Aj0cwAIE8S7AAEJIAgACg8ACBRHALOStasACBR1dA5HRAWEDAWADnyJgA5G6wACT3QDAAFp7SsACBT8BHMACBUYuwABDEgIAAhbAAgVng8ACBWLALOStg7WfPYHAAgVtwCzkgADAAFoeP0nAAgWSIhbAAgWbg8ACBZbALOStnc+fMwAewAIFtMAAWygCAAInmhIWwAIFx4PAAgXCwCzkrYO1nz0APgM9HMACBdguwABCSAIAAoPAAgX4wCzkrWrAAgYEXQOR0QFhAwFgA58iYAORusAAk90AwABaez2IwAIGJsAs5HKDwAIGLsAs5K09jMACBjzALOhii8ACBkTALOStFsACBlGAwAIGS8As5HKDtZ89PgM9iMACBprALORyHMACBqIuwABCsQMAA4DAAgauwCzkcmrAAga7XQOR0QFhAwFgA58iYAORurO7KwDAAFoCPRzAAgbxFsACBuguqh3AAFmlpAUBAAGAwAIHC8As5HIAwABY+krAAgcbARbAAgcogMACByLALORynXmfLz9OwAIHT8ACB14AAMAAQxNgA8AAjMYBFsACB2AuwABAKcAAWag9F8ACB28uwABAKWrAAgeFYAPAAIzGwAEK18AAWag9HMACB58WwAIHli6qHcAAWaWttgEAAYTAAge2wCzoYgDAAFjJPYjAAgfCwCzkcoPAAgfKwCzkrUPAAgfUHMACB9suwABC0AIAAieG4hbAAgf0gMACB+7ALORyg7WfPQDAAFn0PgROwAIICcACCBQAAKBZYAOfIgEWwAIIHIDAAggWwCzkcoO1nz09iMACCCjALORyHMACCDAuwABDFAEAAYDAAgg/wCzkcgDAAFohScACCE0ewAIIUcAA9/wCAAIWwAIIYYDAAghbwCzkcoO1nz2HwAIIZ8As6/8APgI9HMACCOwuwABCVwIAAoDAAgkQwCzkchzAAgk1asACCR1dA5HRAWEDAWADnyJgA5G6wACT3Yg9AQABgMACCUPALORyAJHVAMAAWno9iMACCVTALORyFsACCWKAwAIJXMAs5HKDtZ89Pz2NwAIJeMAs6H0cwAIJdoXAAgl4wCzofWQBAAGUAMAA/0E9iMACCZLALORyFsACCaCAwAIJmsAs5HKDtZ89QB7AAgmxwABbKAIAAieG4oDAAgm/wCzkcgDAAgmxwAIJxQA9HMACCdUWwAIJzC6qHcAAWaWhcQMAA4XAAgnqwCzofYTAAgn6wCzoYoDAAgoBwCzkcgDAAFjKPRfAAgoNLsAAQCmGwAIKGcAs61fAAFmoSsACCi0BgMACCjTALORyBsAAWh6BA8ACCkLAAgpIwAIMSwAAwABDEgAAAAEDwAIKY8ACDEsAAAACAgLAAgpqAAAAkqlgA58iAMACCnYAAADAAEMMYAPAAPxVAABgA58iAT4GQB7AAgqZwABbKAIAAieaE4DAAgqowCztyQDAAgqZwAIKrgBOwAIKu8ACCsEAAIKYYAOfIgGAwAIKw8As7ck9iMACCs7ALO3JHMACCtYuobQBAAGAwAIK5sAs7ckAwABaKEnAAgryIYHAAgr3wCzt1z4CPYjAAgsVwCztyRzAAgsdLsAAQmcBAAGAwAILLcAs7ckAwABaBz0cwAILRBbAAgs7LqodwABZpaI+AgACgsACC2HALO4VgMACC2jALO3JAMAAWSE+AT0cwAILjBbAAguDLqodwABZpaI+AgACgsACC6nALO4VKwDAAFkhScACC8EWwAILxS7AAEI8wABZrz4BPRzAAgvjFsACC9ouqh3AAFmlo/kCAAKCwAIMBcAs7hVqwAIMEmADkcXAAEOBAMAAWZY/SsACDDsBgMACDELALO3JBsAAWh+BA8ACDFDAAgxWwAIOHAAAwABDEQAAAAEDwAIMZ8ACDhwAAAABAQHAAgxuAAAAkqlgA58iAABgA58iAT4DTsACDILAAgyIAACAlmADwAEAAgEWwAIMlRbAAgyQgMACDIrALO9hg7WfPZ3Zn0FJwAIMph7AAgyqwAD3/AIAAoHAAgy0wCzveCeaDQA+Az2IwAIMzcAs72EWwAIM24DAAgzVwCzvYYO1nz09icACDOfALO94FsACDPoWwAIM9YDAAgzvwCzvYYO1nz2d2Z9BScACDQ4ewAINEsAA9/wCAAKBwAINHMAs73gng40APgE9iMACDTPALO9hFsACDUGAwAINO8As72GDtZ89P0nAAg1aHsACDV7AAPf8AgACgcACDWjALO94J5oLAD4DPYjAAg2AwCzvYRbAAg2OgMACDYjALO9hg7WfPT2JwAINmsAs73gWwAINrRbAAg2ogMACDaLALO9hg7WfPZ3Zn0FJwAINwR7AAg3FwAD3/AIAAoHAAg3PwCzveCeDjQA+AT2IwAIN5sAs72EWwAIN9IDAAg3uwCzvYYO1nz0/P0rAAg4MAYDAAg4TwCzvYQbAAFoggQPAAg4hwAIOJ8ACEcUAAMAAQL4AAAABA8ACDjzAAhHFAAAAAQEBwAIOQwAAAJKpYAOfIgAAYAOfIgE+CE7AAg5WAAAAmg1gA58iAE7AAg5nAAAAr31gA58iAD0XwAIOcS7AAEAoasACDoxgA5LNwACb7sAAWadOwAIOnMACDqEAAIO1YAOfIgEWwAIOqYDAAg6jwCzxHoO1nz1JwAIOsx7AAg63wABbKAIAAieaDYPAAg7JwCzxbwA+Az2JwAIO2MAs8TWIwAIO4MAs8R6DwAIO6MAs8W89i8ACDvTALPFvFsACDwGAwAIO+8As8R6DtZ89ScACDw0ewAIPEcAAWygCAAIng42DwAIPH8As8W8APgM9F8ACDzAuwABAKGrAAg9LYAOSzcAAnCHAAFmnPYrAAg9ewCzxRIPAAg9lwCzxbz2IwAIPc8As8R6DwAIPe8As8W8+AT0XwAIPmC7AAEAoasACD7NgA5LNwACcEMAAWadJwAIPzR7AAg/RwABbKAIAAieaC4PAAg/iwCzxbwA+Az2JwAIP8cAs8TWIwAIP+cAs8R6DwAIQAcAs8W89i8ACEA3ALPFvFsACEBqAwAIQFMAs8R6DtZ89ScACECYewAIQKsAAWygCAAIng42DwAIQOMAs8W8APgM9F8ACEEkuwABAKGrAAhBkYAOSzcAAm//AAFmnPYrAAhB2wCzxRIPAAhB9wCzxbz2IwAIQi8As8R6DwAIQk8As8W8+AT0cwAIQsC7AAEJXAgACgcACEMfALPE1asACENRgA5HFwABg6QDAAFp6Pz0cwAIRDBbAAhEDLqodwABZpaKXAgACgcACESDALPE1gsACESfALPFEAMAAWHpJwAIRMiIhFsACETcuwABCPsAAWbEAHsACEUbAAFsoAgACJ5b5FsACEVqAwAIRVMAs8R6DtZ89AD4BPRzAAhFpLsAAQlcCAAIWwAIRhoDAAhGAwCzxHoO1nz1qwAIRkmADkcWJ6QDAAFp6P0rAAhG1AYDAAhG8wCzxHgbAAFohgQPAAhHkwAIR6sACE2wAAMAAQxQAAAABA8ACEfjAAhNsAAAAAQEBwAIR/wAAAJKpYAOfIgAAYAOfIgE+BEnAAhIMHMACEiE1AAAAAQBgA8AA/hsBFsACEhAuwABCOcAAWao1AAAAAQBgA8AA/hsBF8ACEhAuwABCORzAAhIegQDALPRFZAEAAZQAwAD/QcAAWaqBAMAs9EWAlwEAATeB9ADAAP9LPgFKwAIS6AEcwAIS7y7AAEMVAQABgMACEwjALPQkAMAAWnk/TsACEyDAAhMnAACBdmADnyIBHMACEykuwABDFgEAAYDAAhM5wCz0JADAAFoiPRfAAhNFLsAAQjkcwAITUxbAAhNFLsAAQjnAAFmqgY0BAAGUAMAA/0LAAFmqSsACE1sBgcACE2LALPTHBsAAWiKBA8ACE3HAAhN3wAIjQgAAwABDFgAAAAEDwAIThsACI0IAAAABAQHAAhONAAAAkqlgA58iAABgA58iAT4DScACE5oewAITnsAA9/wCAAIWwAITsxbAAhOugMACE6jALPVbg7WfPYJrnzpqwAITuWADwAD+G8AAnE4APgJJwAIT1B7AAhPYwABbKAIAAieC6hbAAhPxFsACE+yAwAIT5sAs9VuDtZ89g7WfPQA+AUrAAhQCARzAAhQJLsAAQxcBAAGAwAIUH8As9VsAwABaJj9KwAIUNQEcwAIUPC7AAEMYBgAGgMACFHvALPVbgMACFILALPVbKysrKgDAAFpZP07AAhS6wAIUwAABgJZgA8ABAAIBFsACFM0WwAIUyIDAAhTCwCz1W4O1nz2d2Z9BScACFN4ewAIU4sAA9/wCAAKBwAIU7MAs9jMnmhIAPgFKwAIVQQEcwAIVSC7AAEMZAgACgMACFVPALPVbKwDAAFpmScACFWwewAIVcMAA9/wCAAKBwAIVesAs9jMnmnEAPgFKwAIVlAEcwAIVmy7AAEMaAQABgMACFbDALPVbAMAAWiRJwAIVwyIewAIVx8AA9/wCAAKBwAIV0cAs9jMnhCsAAR7AAhXiwAD3/AIAAoHAAhXswCz2MyeEKgA+A07AAhYLwAIWFgAAwABDG2ADnyIBFsACFh6AwAIWGMAs9VuDtZ89ScACFiohHsACFi/AAIzVAQABFsACFkWCwAIWOsAs9yCDtZ89AD4BSsACFlYBHMACFl0uwABDGAYABoLAAhaewCz3IIDAAhaqwCz1WyuCwAIWt8As9yArKgDAAFpZP0rAAhbfARzAAhbmLsAAQxwBAAGAwAIXDMAs9VsAwABaWEnAAhcfHsACFyPAAPf8AgACgcACFy3ALPYzJ5otAD4DTsACF0vAAhdVAAChY2ADnyIBFsACF12AwAIXV8As9VuDtZ89ScACF2khHsACF27AAIzVAQABFsACF4OCwAIXecAs9+WDtZ89AD4BSsACF5QBHMACF5suwABDGAYABoLAAhfcwCz35YDAAhfnwCz1W4LAAhfuwCz35SsrKgDAAFpZP0rAAhgbARzAAhgiLsAAQxwBAAGAwAIYSMAs9VsAwABaWEnAAhhbHsACGF/AAPf8AgACgcACGGnALPYzJ5pvAD4BSsACGH8BHMACGIYuwABDHQEAAYDAAhiXwCz1WwDAAFpcScACGKoiHsACGK7AAPf8AgACgcACGLjALPYzJ5pcAAAewAIYy8AAWygCAAInmmgWwAIY5hbAAhjhgMACGNvALPVbg7WfPYO1nz0APgFKwAIY9QEcwAIY/C7AAEMeAgACFsACGRSAwAIZDsAs9VuDtZ89FsACGSCAwAIZGsAs9VuDtZ89AMAAWl1JwAIZMh7AAhk2wAD3/AIAAoHAAhlAwCz2MyeaaAA+AUrAAhlXARzAAhleLsAAQx4CAAKAwAIZcMAs9VsrAMAAWl1JwAIZiR7AAhmNwAD3/AIAAoHAAhmXwCz2MyeaWgA+AUrAAhmyARzAAhm5LsAAQx8BAAGAwAIZz8As9VsAwABaa0nAAhniHsACGebAAPf8AgACgcACGfDALPYzJ5pmAD4BSsACGgkBHMACGhAuwABDIAEAAYDAAhokwCz1WwDAAFpkScACGjcewAIaO8AA9/wCAAKBwAIaRcAs9jMnmmcAPgFKwAIaWwEcwAIaYi7AAEMhAQABgMACGnjALPVbAMAAWmVJwAIaix7AAhqPwAD3/AIAAoHAAhqZwCz2MyeacgA+AUrAAhqwARzAAhq3LsAAQyIBAAGAwAIaycAs9VsAwABabEnAAhrcHsACGuDAAPf8AgACgcACGurALPYzJ5pqAD4BSsACGwQBHMACGwsuwABDIwEAAYDAAhsgwCz1WwDAAFptScACGzMewAIbN8AA9/wCAAKBwAIbQcAs9jMnmmUAPgFKwAIbWgEcwAIbYS7AAEMkAQABgMACG3XALPVbAMAAWnFJwAIbiB7AAhuMwAD3/AIAAoHAAhuWwCz2MyeabgA+AUrAAhuyARzAAhu5LsAAQyUBAAGAwAIb0MAs9VsAwABadEnAAhvjHsACG+fAAPf8AgACgcACG/HALPYzJ5pjAD4BSsACHAsBHMACHBIuwABDJgEAAYDAAhwnwCz1WwDAAFpzScACHDoewAIcPsAA9/wCAAKBwAIcSMAs9jMnlvkAPgFKwAIcXQEcwAIcZC7AAEMnAQABgMACHHjALPVbAMAAWnVJwAIcix7AAhyPwAD3/AIAAoHAAhyZwCz2MyeaeAA+AkfAAhyyFsACHLouwABAKMAAWacDAcACHONqwAIc42ADks3AAJvuAD4CScACHPMewAIc98AAWygCAAInguoWwAIdEBbAAh0LgMACHQXALPVbg7WfPYO1nz0APgFKwAIdJQEcwAIdLC7AAEMXAQABgMACHULALPVbAMAAWiY/SsACHWABHMACHWcuwABDHAEAAYDAAh2NwCz1WwDAAFpYAsACHbFqwAIdsWADks3AAJv/wAId1mrAAh3WYAOSzcAAnCEAPgFKwAId6wEcwAId8i7AAEMoAQABgMACHgbALPVbAMAAWiMBwAIeKmrAAh4qYAOSzcAAnBAAPgI9HMACHjsuwABCVwIAAhbAAh5YgMACHlLALPVbg7WfPWrAAh5kYAORxcAAmMMAwABaekrAAh6JARzAAh6QLsAAQygBAAGAwAIepMAs9VsAwABaIz0wwAIeuiTAAh70AyfAAEMpFsACHucuwABAKMAAWacngUtJwAIfAR7AAh8FwAD3/AIAAoHAAh8PwCz2MyeELAA+AUrAAh8oARzAAh8vLsAAQyoBAAGAwAIfWsAs9VsAwABaV0nAAh9tHsACH3HAAPf8AgACgcACH3vALPYzJ5pcAD4CScACH5QWwAIfmC7AAEI+wABZsT4BScACH68hHMACH7QuwABDKwEAAYDAAh/NwCz1WwDAAFpoPgFKwAIf4QEcwAIf6C7AAEMcAQABgMACIA7ALPVbAMAAWlg/P0rAAiELARzAAiESLsAAQywBAAGAwAIhK8As9VsAwABaJ0nAAiE+Ih7AAiFCwAD3/AIAAoHAAiFMwCz2MyeXeQAAFsACIW0WwAIhaBbAAiFjgMACIV3ALPVbg7WfPYO1nz2dVJ8xPgI9HMACIasuwABCSAIAAhbAAiHcgMACIdbALPVbg7WfPWrAAiHoXQOR0QFhAwFgA58iYAORusAAk90AwABae0rAAiIIARzAAiIPLsAAQxYBAAEWwAIiJYDAAiIfwCz1W4O1nz0AwABaIknAAiI3FsACIkYWwAIiQYDAAiI7wCz1W4O1nz2dVJ8xPgJJwAIiXB7AAiJgwABbKAIAAieC6hbAAiJ5FsACInSAwAIibsAs9VuDtZ89g7WfPQA+AUrAAiKKARzAAiKRLsAAQxcBAAGAwAIip8As9VsAwABaJj9KwAIivQEcwAIixC7AAEMcAQABgMACIurALPVbAMAAWlg+AUrAAiMFARzAAiMMLsAAQxwBAAGAwAIjMsAs9VsAwABaWAbAAFojgQPAAiOZwAIjn8ACJTIAAMAAQygAAAABA8ACI7LAAiUyAAAAAQEBwAIjuQAAAJKpYAOfIgAAYAOfIgE+CU7AAiPMwAIj0gAAgphgA58iAYjAAiPUwCz/3BbAAiPigMACI9zALP/cg7WfPUAewAIj88AAWygCAAInmniAwAIkBcAs/9wAwAIj88ACJAsAPRzAAiQbFsACJBIuqh3AAFmlwABCEAEAAYHAAiQvwCz/8wDAAFmRTsACJEEAAACimWADnyIAScACJFAewAIkVMAAWygCAAIng40WwAIkaIDAAiRiwCz/3IO1nz0APgE9isACJHfALQBqiMACJIPALP/cFsACJJGAwAIki8As/9yDtZ89Pz2IwAIkocAs/9wcwAIkqS6htAEAAYDAAiS5wCz/3ADAAFooPYjAAiTFwCz/3BzAAiTNLsAAQmcBAAGAwAIk3cAs/9wAwABaBz0cwAIk8hbAAiTpLqodwABZpaO5AwADgcACJQTALP/zgsACJQvALQBqgMACJRbALP/cAMAAWZJKwAIlIgGAwAIlKcAs/9wGwABaJIEDwAIli8ACJZHAAifDAADAAEMaAAAAAQPAAiWlwAInwwAAAAEBAcACJawAAACSqWADnyIAAGADnyIBPgpOwAIlv8ACJcUAAIKYYAOfIgGIwAIlx8AtAYEWwAIl1YDAAiXPwC0BgYO1nz1AHsACJebAAFsoAgACJ5pxgMACJfnALQGBAMACJebAAiX/AD0cwAImDxbAAiYGLqodwABZpcAAQf4BAAGBwAImJMAtAZgAwABZHE7AAiY2wAImOwAAg7VgA58iARbAAiZDgMACJj3ALQGBg7WfPUnAAiZNHsACJlHAAFsoAgACJ5b5gsACJl/ALQIPAD4CPRzAAiZ3FsACJm4uqh3AAFmlokADAAMqgcACJpHALQGYgsACJpjALQIPAMAAWSJKwAImpQGCwAImrMAtAg8/PYjAAia8wC0BgRzAAibELqG0AQABgMACJtTALQGBAMAAWig9iMACJuDALQGBHMACJuguwABCZwEAAYDAAib4wC0BgQDAAFoHPRzAAicNFsACJwQuqh3AAFmlokADAAMpgcACJybALQGYgMACJy3ALQGBAMAAWSJJwAInORbAAic9LsAAQjzAAFmvPgE9HMACJ1sWwAInUi6qHcAAWaWj+QIAAoHAAid9wC0BmGrAAieKYAORxcAAQ4EAwABZlj9KwAInswGAwAInusAtAYEGwABaJYEDwAIoCMACKA7AAijyAADAAEMtAAAAAQPAAigYwAIo8gAAAAEBAcACKB8AAACSqWADnyIAAGADnyIBPgVAFsACKD4WwAIoOYDAAigzwC0Di4O1nz2dVJ8xwAIoM8ACKEoAPYjAAihRwC0DixbAAiiVHMACKFkuwABCagIAAoDAAihqwC0Di2rAAiiDYAPAAI3BwAER7QDAAFnzg7WfPUAewAIopsAAWygCAAInguqAwAIotMAtA4sAwAIopsACKLoAPRzAAijKFsACKMEuqh3AAFml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gAGDwAJ/9sAtO/edeZ8vAMAAjS8+Aj0cwAKAay7AAEJXAgAChsACgJPALT1YHMACgLZqwAKAn10DkdEBYQMBYAPAAQACYAORurH2iD0BAAEnmfMAkdUAwABaej2IwAKA18AtO7UWwAKA6oPAAoDfwC079515ny9CwAKBCgA/TsACga3AAoGzAACjFmADnxgBH8ACgbmfIQIAAmrAAoHSYAOfasAAtUAWwAKB3obAAoHZwC09WINinz4ATsACgffAAoH/AAAiYAORugEjHMACggmHwAKCAcAtPbaAlwEAAZMAwAD/S2rAAoIhYAORxbM+HMACgmdqwAKCUF0DkdEBYQMBYAPAAQACYAORurH2iD0BAAEngKcAkdUBYAORuj2OwAKCg8AtPVgcwAKCii7AAEKhAwADgMACgpzALTu1FMACgqPALUC3CgAUwAKCrMAtQHsJAADAAFoIPz2IwAKCwsAtO7WGwAKCysAtPVg9F8ACgtouwABAJ4XAAoL4wC09HcAAWaY9HMACgwoWwAKDAS6qHcAAWaWimgQABITAAoMcwC08YYPAAoMjwC0794HAAoMvwC07w4DAAoM9wC07tQDAAFlySsACg0kBgMACg1DALTu1BsAAWjqBA8ACg/HAAoP3wAKP7wAAwABDTgAAAAEDwAKEEcACj+8AAAACAgLAAoQYAAAAkqlgA58iAMAChCUAAACinGADnyIAAGADnyIBPglOwAKEP8AChEkAAKKjYAOfIgGIwAKES8AtQfwWwAKEWYDAAoRTwC1B/IO1nz1AHsAChGrAAFsoAgACJ5oSgsAChHjALUIhAMAChGrAAoSCAE7AAoSPwAKElAAAg7VgA58iARbAAoScgMAChJbALUH8g7WfPUnAAoSmHsAChKrAAFsoAgACJ4big8AChLjALUJxAD4CPRzAAoTQFsAChMcuqh3AAFmloqcFAAWTgsAChOnALUIhgcAChPTALUIKg8AChQLALUJxKgDAAFlzSsAChRYBg8AChR3ALUJxP07AAoU5wAKFPQABg2BgA8AA/FUBFsAChT8uwABAJ8AAWaY9F8AChWAuwABAJynAAFmmTsAChYzAAoWSAACA7mADwAD+GwGTTsAChjoAAACiqWADwAD8VQBDwAKGTCk+CU7AAoZlwAKGbQAAwABDVmADwAD+GwGTTsAChonAAoaOAACB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g7WfPQDAApD4wAKREQBOwAKRS8ACkVAAAIO1YAOfIgEWwAKRZhbAApFdFsACkViAwAKRUsAtSlSDtZ89nXmfL4O1nz1OwAKRdMACkXkAAIJrYAPAAP4bARbAApGAgcACkXvALUqXgmufOknAApGKIiIhHsACkY/AAPf8AgACgsACkZnALUrNasACkZ9gA8AA/hvAALcBAAAhHsACkbvAAPf8AgACgsACkcXALUrNasACkctgA8AA/hvAAJycAAAiIR7AApHywAD3/AIAAoLAApH8wC1KzWrAApICYAPAAP4bwACcbAABIiEewAKSIcAAWygCAAInmg2BwAKSM8AtSpcAACEewAKSPcAAWygCAAInmguBwAKSTsAtSpcAPgE9HMACkl4uwABCSAIAAoHAApJ+wC1Kl2rAApKKXQOR0QFhAwFgA58iYAORusAAk90AwABaez9KwAKSrgEcwAKStS7AAEMFAQABgMACks3ALUpUAMAAWhYGwABaPIEDwAKUm8AClKHAApl/AADAAENPAAAAAQPAApTBwAKZfwAAAAICAsAClNUAAAFqYAOfIgDAApTiAAAAopxgA58iAABgA58iAT4JQB7AApT9wABbKAIAAidjFsAClRGAwAKVC8AtTCqDtZ89AMAClP3AApUWAE7AApUwwAKVPwAAwABDXGADwACNZQEewAKVQcAAjVYCAAKAwAKVV8AtTCopAE7AApVvwAKVdQAAkqlgA58iARzAApWGgsAClXfALUx5loQBAAGAwAKVi8AtTCoAwACNbU7AApWdwAKVogAAg7VgA58iARbAApWqg8AClaTALUymg7WfPUnAApW0HsAClbjAAFsoAgACJ4PchMAClcbALUzZAD4DScACldUhHMACleaBwAKV2cAtTDdIAQABKwDAAP91PgE9HMAClfkuwABCSAIAAoHAApYmwC1MN2rAApY6XQOR0QFhAwFgA58iYAORusAAk90AwABaez89i8AClmLALUymHMAClnmCwAKWasAtTHnAAEKQAgACgMAClojALUwqLgDAAI1sSsAClpwBHMAClqMuwABDWwEAAYPAApa+wC1MpgDAAFo7Pz2LwAKW0MAtTKYcwAKW54LAApbYwC1MecAAQosCAAKAwAKW9sAtTCouAMAAjWtJwAKXCB7AApcMwABbKAIAAieaEoTAApcawC1M2QA+AknAApcpHMACl04WwAKXPILAApctwC1MeZXAwACNaICXAQABlQDAAP9LPgE9HMACl2YWwAKXXS6qHcAAWaWihQMAA2rAApeQYAORxcAAgckWwAKXzoDAApfIwC1MKoO1nz2DwAKX4MAtTKYAwABZkz9KwAKX9gEcwAKX/S7AAENOAgACg8ACmBjALUymgcACmB/ALUw3AMAAWjo/ScACmDgiIR7AApg9wABbKAIAAieZ8oTAAphLwC1M2QAAIR7AAphVwABbKAIAAidLhMACmGTALUzZAD4CPRzAApioLsAAQlcCAAKEwAKYysAtTNkcwAKY7WrAApjWXQOR0QFhAwFgA8ABAAJgA5G6sfaIPQEAASeZ8gCR1QDAAFp6PRzAApkRFsACmQguwABCO8AAWa7AAELZAgACg8ACmSbALUymasACmTdgA59qwAC4rADAAI1LP0rAAplJARzAAplQLsAAQ00CAAKDwAKZZ8AtTKaBwAKZbsAtTDcAwABaOQbAAFo9gQPAApqNwAKak8ACnUMAAMAAQ10AAAABA8ACmqfAAp1DAAAAAQEBwAKargAAAJKpYAOfIgAAYAOfIgE+A07AApuJwAKbjgAAgVRgA8AAjLwBHsACm5DAAIy6AQABgMACm6TALU+5AEPAApuwIRzAApu8gcACm7fALU/QSAEAASsAwAD/dT4CScACm80WwAKb1oHAApvRwC1P0MAAQ1fAAIy+PgQ9iMACm+rALU+5HMACm/IuobQBAAGAwAKcAsAtT7kAwABaKE7AApwYwAKcHgAAod9gA58iARzAApwgLsAAQukBAAGAwAKcLMAtT7kAwABaBT2IwAKcPMAtT7kcwAKcRC6htAEAAYLAApxUwC1QWgDAAFooPRzAApyZFsACnJAuqh3AAFmlorkCAAKCwAKcr8AtUFoWwAKcvIDAApy2wC1PuYO1nz0AwABZAT4BPYjAApzawC1PuRzAApzngcACnOLALU/QgwsCAAKAwAKc7cAtT7kuAMAAjME9icACnQnALU/QHMACnRWBwAKdEMAtT9DAAENZAQABgMACnSHALU+5AMAAjMJKwAKdMwGAwAKdOsAtT7kGwABaPoEDwAKdSMACnU7AAqADAADAAENCAAAAAQPAAp1owAKgAwAAAAICAsACnW8AAACSqWADnyIAwAKdiAAAAIJXYAPA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ARbAArBYLsAAQCfAAFmmPRfAArB5LsAAQCcpwABZpj2IwAKwocAtXzYcwAKwqS7AAENiAQABgMACsMLALV82AMAAWkhOwAKw0sACsNgAAIDuYAPAAP4bAZRDwAKw4R7AArDowAD3/AIAAhbAArD9FsACsPiAwAKw8sAtXzaDtZ89gmufOmrAArEDYAPAAP4bwABgGQA+Aj2IwAKxGsAtXzYcwAKxIi7AAENiAQABgMACsTvALV82AMAAWkg9isACsUnALV/lHMACsU6CwAKxScAtX+VkAQABlADAAP9BScACsVwcwAKxZoLAArFgwC1f5YCXAQABlADAAP9LPgE9HMACsXwWwAKxcy6qHcAAWaWiMwEAAYLAArGWwC1f5QDAAFkFPz0XwAKxqC7AAEAngcACscbALV+OwABZpkrAArHPAYDAArHWwC1fNgbAAFpHgQPAArJNwAKyU8ACtZMAAMAAQ0UAAAABA8ACsmXAArWTAAAAAQEBwAKybAAAAJKpYAOfIgAAYAOfIgE+BU7AArJ/wAKyiQAAor5gA58iAYjAArKLwC1hFxbAArKZgMACspPALWEXg7WfPUAewAKyqsAAWygCAAInhtGBwAKyuMAtYS4AwAKyqsACssIAPRzAArLSFsACsskuqh3AAFmlwABCAgEAAYHAArLlwC1hLgDAAFkqTsACsvvAArMAAACDtWADnyIBFsACswiAwAKzAsAtYReDtZ89ScACsxIWwAKzG4LAArMWwC1hpYIsnzg+Az0cwAKzRRbAArM8LqodwABZpaQCAQABgsACs1TALWGlAMAAWX09HMACs2oWwAKzYS6qHcAAWaWivQIAAoHAArN7wC1hLpQAwABZK0rAArOQAYLAArOXwC1hpUnAArOoHsACs6zAAFsoAgACJ5qBgsACs73ALWGlAD4DPRzAArPVFsACs8wuqh3AAFmlpAMBAAGCwAKz5sAtYaUAwABZfj0cwAKz/BbAArPzLqodwABZpaK9AgACgcACtA3ALWEulADAAFkrSsACtCIBgsACtCnALWGlPgVOwAK0RsACtEwAAIDuYAPAAP4bAZQ9iMACtFfALWEXHMACtF8uwABCagIAAoDAArRwwC1hF2rAArSJYAPAAI21wAESUwDAAFnzQ8ACtJ8ewAK0psAAWygCAAIngWoWwAK0uoDAArS0wC1hF4O1nz0APgI9i8ACtMvALWK4HMACtNCDwAK0y8AtYrhkAQABlADAAP9BPYjAArTcwC1hFxzAArTkLsAAQmoCAAIWwAK1CIDAArUCwC1hF4O1nz1qwAK1IGADwACNtcABEpAAwABZ8z0cwAK1UxbAArVKLqodwABZpaK9AgACgcACtWTALWEug8ACtW/ALWK4AMAAWStKwAK1fQGAwAK1hMAtYRcGwABaSIEDwAK1mMACtZ7AArp5AADAAENiAAAAAQPAArW2wAK6eQAAAAEBAcACtb0AAACSqWADnyIAAGADnyIBPgk9iMACtcrALWPxFsACtdiAwAK10sAtY/GDtZ89QB7AArXpwAD3/AIAAhbAArX5gMACtfPALWPxgmufOmrAArX/YAPAAP4bwABgGQDAArXpwAK2DAA9HMACthwWwAK2Ey6qHcAAWaWiJAEAAYDAArYvwC1j8QDAAFkCTsACtn3AAraQAACiKGADwAD+GwGTTsACtp/AArakAACDtWADnyIBFsACtqyAwAK2psAtY/GDtZ89TsACtrrAAra/AACCa2ADwAD+GwEWwAK2xoLAArbBwC1kloJrnzpBQ8ACttAhHMACttyDwAK218AtZLpIAQABasACtt9gA8AA/hsJAMAA/z8+BUnAArbyHsACtvbAAPf8AgACg8ACtwDALWS6asACtwZgA8AA/huFIQA+Az2IwAK3T8AtY/EWwAK3bRzAArdXLqG0AQABgsACt2fALWSWAMAAWiiDtZ89ScACt3shHsACt4DAAFsoAgACJ4bigMACt47ALWPxAD4CPRzAAreiLsAAQlcCAAKAwAK3yMAtY/EcwAK37GrAArfVXQOR0QFhAwFgA8ABAAJgA5G6sfaIPQEAASeG4gCR1QDAAFp6PYjAArgLwC1j8RbAArgYgsACuBPALWSWnXmfLz89HMACuD0WwAK4NC6qHcAAWaXAAEHwAgACgsACuFvALWSWgMACuGHALWPxAMAAWQNJwAK4dh7AArh6wAD3/AIAAoPAAriEwC1kumrAAriKYAPAAP4bwAC9hAA+Aj2IwAK43MAtY/EcwAK45C7AAEAmAQABgsACuP7ALWSWAMAAWkk9HMACuRYWwAK5DS6qHcAAWaXAAEHwAgACgsACuTTALWSWKwDAAFkDPgFCwAK5WAA9icACuW/ALWSBHMACuW2BwAK5b8AtZIFkAQABlADAAP9BPYjAArnVwC1j8RzAArndLsAAQswBAAGAwAK57cAtY/EAwABZ8T2KwAK5+8AtZJYWwAK6CIDAAroCwC1j8YO1nz09i8ACuhTALWS6FsACuiCCwAK6G8AtZJaCa586PRzAAro5FsACujAuqh3AAFmloicCAAKBwAK6SsAtZIGCwAK6XsAtZJYAwABZBErAArppAYDAArpwwC1j8QbAAFpJgQPAArp+wAK6hMACu8UAAMAAQCYAAAABA8ACup3AArvFAAAAAQEBwAK6pAAAAJKpYAOfIgAAYAOfIgE+Ak7AArq3wAK6vAAAg7VgA58iARbAArrEgMACur7ALWd9g7WfPUnAArrOIhzAArrcFsACuteBwAK60sAtZ5SCa586SAEAAWrAArrfYAPAAP4bwACcbADAAP8/AB7AArrwwAD3/AIAAhbAArr/gcACuvrALWeUndmfQSeaWQA+Aj0cwAK7JhbAArsdLqodwABZpaNpAgACgcACuzvALWeUasACu1NgA8AAjZvAARAoAMAAWYhKwAK7ZgGBwAK7bcAtZ5Q+AUrAAruGARzAAruNLsAAQz4CAAKAwAK7l8AtZ31qwAK7sGADwACNm8ABECgAwABaTAbAAFpKgQPAArwdwAK8I8ACvNcAAMAAQ0YAAAABA8ACvDPAArzXAAAAAQEBwAK8OgAAAJKpYAOfIgAAYAOfIgE+BD2IwAK8R8AtaLIWwAK8VYDAArxPwC1osoO1nz1AIh7AArxmwABbKAIAAiedlIDAArx4wC1osgABHsACvILAAFsoAgACJ5cOgMACvJPALWiyAMACvGbAAryZAD0cwAK8qRbAArygLqodwABZpaKvAQABgMACvLvALWiyAMAAWWpKwAK8xwGAwAK8zsAtaLIGwABaS4EDwAK9GsACvSDAAr24AADAAENHAAAAAQPAAr0wwAK9uAAAAAEBAcACvTcAAACSqWADnyIAAGADnyIBPgQ9iMACvUTALWmCFsACvVKAwAK9TMAtaYKDtZ89QB7AAr1jwABbKAIAAieEQYDAAr10wC1pggDAAr1jwAK9egA9HMACvYoWwAK9gS6qHcAAWaWitQEAAYDAAr2cwC1pggDAAFl0SsACvagBgMACva/ALWmCBsAAWkyBA8ACvb3AAr3DwALAegAAwABDPgAAAAEDwAK9zMACwHoAAAACAgLAAr3TAAAAkqlgA58iAMACvewAAACCV2ADwABawAAAYAOfIgE+B07AAr4BwAK+DAAAn8NgA58iAYjAAr4OwC1qNxzAAr4WLsAAQmoCAAKAwAK+J8AtajeBwAK+LsAtakUAwABZ80nAAr48HsACvkDAAFsoAgACJ5pJFsACvlSAwAK+TsAtajeDtZ89AD4DTsACvmnAAr5uAACiw2ADnyIBFsACvnaAwAK+cMAtajeDtZ89TsACvojAAr6NAACDtWADnyIBFsACvpSDwAK+j8AtasaDtZ89ScACvqAiHsACvqTAAFsoAgACJ4PchMACvrLALWrqAAEewAK+u8AAWygCAAInmfKEwAK+ycAtauoAPgI9HMACvuMWwAK+2i6qHcAAWaWiwgEAAYPAAr8BwC1qxgDAAFk9PYjAAr8QwC1qN4PAAr8YwC1qxj8/TsACv0PAAr9LAACegmADwACNZQEewAK/TcAAjVcBAAGAwAK/aMAtajcAScACv3QhHMACv4CDwAK/eMAta4NIAQABasACv4NgA8AAjWXAAQ6UAMAA/3U+AT2IwAK/ncAtajccwAK/rYPAAr+lwC1rg8AAQosCAAKAwAK/vMAtajcuAMAAjWs+AT0cwAK/5hbAAr/dLqodwABZpcAAQEIBAAEWwALAAoDAAr/8wC1qN4O1nz0AwABZRz2IwALAE8AtajccwALAGy7AAEAqAQABgMACwC3ALWo3AMAAWk49HMACwEIWwALAOS6qHcAAWaWhygIAAoLAAsBNwC1qXhbAAsBfgMACwFnALWo3g7WfPQDAAFkjSsACwGoBgMACwHHALWo3BsAAWk2BA8ACwH/AAsCFwALBTAAAwABAKwAAAAEDwALAlcACwUwAAAABAQHAAsCcAAAAkqlgA58iAABgA58iAT4DTsACwK/AAsC0AACDtWADnyIBFsACwLyAwALAtsAtbNGDtZ89PRzAAsDPFsACwMYuqh3AAFmlwABAQAEAAYHAAsDhwC1s6ADAAFl5ScACwOwewALA8MAAWygCAAIng9yBwALA/sAtbOgAPgFKwALBDQEWwALBGYHAAsEUwC1s6J15ny8+AUrAAsE2AYDAAsE9wC1s0QbAAFpOgQPAAsFRwALBV8ACwioAAMAAQCoAAAABA8ACwWjAAsIqAAAAAQEBwALBbwAAAJKpYAOfIgAAYAOfIgE+Ak7AAsGCwALBhwAAg7VgA58iARbAAsGPgMACwYnALW2ng7WfPUnAAsGZIR7AAsGewABbKAIAAieD3IHAAsGswC1tvgA+Aj0cwALBxBbAAsG7LqodwABZpcAAQEABAAGBwALB1sAtbb4AwABZeUrAAsHjAYDAAsHqwC1tpz4BSsACwgQBHMACwgsuwABCiwEAAYDAAsIawC1tpwDAAFpPBsAAWk+BA8ACwzjAAsM+wALDiQAAwABCiwAAAAEDwALDTMACw4kAAAABAQHAAsNTAAAAkqlgA58iAABgA58iAT4BSsACw2ABHMACw2cuwABDYAEAARbAAsOAgMACw3rALW6Hg7WfPQDAAFpQBsAAWlCBA8ACw47AAsOUwALKdgAAwABDYAAAAAEDwALDpsACynYAAAABAQHAAsOtAAAAkqlgA58iAABgA58iAT4MTsACw8DAAsPGAACCmGADnyIBgMACw8jALW7zQB7AAsPawABbKAIAAieD3IHAAsPowC1vCgDAAsPawALD7gA9HMACw/4WwALD9S6qHcAAWaXAAEG8AQABgcACxA3ALW8KAMAAWHhOwALEHcACxCsAALw2YAPAAP4bAZNOwALEOcACxE4AAMAAQ2VgA8AA/FUBKk7AAsRgwALEZAAAg2BgA8AA/FUBFsACxGYuwABAJ8AAWaY9F8ACxIcuwABAJynAAFmmQUPAAsSvKT4KTsACxMrAAsTPAACDtWADnyIBFsACxNeAwALE0cAtbvODtZ89ScACxOMewALE58AAWygCAAIngyaFwALE9cAtb9YAPgI9iMACxQbALW7zhcACxQ7ALW/WQsACxRwAP07AAsU3wALFPQAAod9gA58iAStJwALFSx7AAsVPwABbKAIAAieC6hbAAsVihcACxV3ALW/Wg7WfPQA+Az2IwALFc8AtbvMWwALF2hzAAsWHLsAAQmoCAAKAwALFmMAtbvNqwALFsWADwACN5sABEs0AwABZ84O1nz09jsACxejALXA0gMACxfDALW7zPYvAAsX/wC1vhClJwALGKYPAAsYtwC1vhD4BPRzAAsaCLsAAQlcCAAKFwALGmcAtb9ZqwALGpWADkcXAAH4MAMAAWno/PYjAAsbZwC1u8xzAAsbhLqG0AQABgMACxvHALW7zAMAAWig9jcACxv/ALW/WFsACxwyAwALHBsAtbvODtZ89ScACxxghHMACxyKGwALHHMAtcDRIAQABKwDAAP91PRzAAsc0FsACxysuqh3AAFmlo2wBAAGGwALHSMAtcDQAwABZdj89isACx1jALW9vHMACx1aCwALHWMAtb29kAQABlADAAP9BScACx20hHsACx3LAAFsoAgACJ4CnhcACx4DALW/WAD4CScACx5EewALHlcAAWygCAAIngyaFwALHo8Atb9YAPgI9iMACx7bALW7zhcACx77ALW/WQsACx84AP0nAAsf7HsACx//AAFq+AQABhcACyBjALW/WAD4BPY3AAsiywC1v1hzAAsi5LsAAQqEDAAOAwALI2sAtbvMcwALJDGrAAsj1XQOR0QFhAwFgA8ABAAJgA5G6sfaIPQEAASeApwCR1R/AAskynyECAAJqwALJS2ADn2rAALVAFsACyVeFwALJUsAtb9aDYp8+AADAAFoIPgI9iMACyXzALW7zHMACyYQuwABCnQIAAoDAAsmVwC1u84HAAsmcwC1vCgDAAFoEQsACya4APz2IwALJzcAtbvOFwALJ1cAtb9ZAHsACyezAAFsoAgACJ4MmgMACyfrALW7zAMACyezAAsoAAD0XwALKBy7AAEAnhMACyiXALW+bwABZpj0cwALKNxbAAsouLqodwABZpaHCAwADgsACykTALW9vgcACylPALW8KgMACylrALW7zAMAAWHlKwALKZgGAwALKbcAtbvMGwABaUYEDwALKv8ACysXAAsxgAADAAEM7AAAAAQPAAsrYwALMYAAAAAEBAcACyt8AAACSqWADnyIAAGADnyIBPghOwALK8sACyvsAAIXOYAOfIgGIwALK/cAtc5AWwALLC4DAAssFwC1zkIO1nz1AHsACyxzAAFsoAgACJ5pXgcACyyvALXOnAMACyxzAAss0AE7AAstBwALLRQAAot1gA58iAStJwALLUR7AAstVwABbKAIAAieaSRbAAstpgMACy2PALXOQg7WfPQA+AT2KwALLeMAtc/eIwALLfsAtc5AWwALLjIDAAsuGwC1zkIO1nz0/TsACy6XAAsuuAADAAEKNYAPAAI1YARzAAsuwLsAAQ2cBAAGAwALLx8Atc5AAwABaUj2IwALL08Atc5AcwALL5IPAAsvbwC10WcAAQrYCAAKAwALL9sAtc5AuAMAAjV49HMACzBEWwALMCC6qHcAAWaWi3AIAAoHAAswiwC1zp4LAAswswC1z9wDAAFlpSsACzDYBHMACzD0uwABDaAEAAYDAAsxWwC1zkADAAFpUBsAAWlKBA8ACzGXAAsxuwALOYQAAwABDZwAAAAEDwALMhMACzmEAAAABAQHAAsyLAAAAkqlgA58iAABgA8AAjVgBPgNOwALMocACzKoAAMAAQo1gA8AAjVgBHsACzKzAAI1VAgACgMACzLjALXUyKQBJwALMyhbAAszXgcACzM7ALXVLtvjAAI1cPgJOwALM8cACzPYAAIO1YAOfIgEWwALNERzAAs0BgcACzPjALXVLwABCjgEAAYDAAs0KwC11MgDAAI1ig7WfPUnAAs0dIR7AAs0iwABbMgIAAoLAAs0vwC11k2rAAs01XQPAAP6/AWADwAEAAsABEwUAPgE9icACzhnALXVLFsACzi2BwALOJMAtdUvAAENpwACNWj8/SsACzk4BgcACzlXALXVLBsAAWlOBA8ACzqTAAs6qwALP3wAAwABDPAAAAAEDwALOvcACz98AAAABAQHAAs7EAAAAkqlgA58iAABgA58iAT4GTsACztfAAs7gAACFzmADnyIBiMACzuLALXZhFsACzvCAwALO6sAtdmGDtZ89QB7AAs8BwABbKAIAAieZ54HAAs8QwC12eADAAs8BwALPGQBOwALPKcACzzIAAMAAQo1gA8AAjVgBHMACzzQuwABDZwEAAYDAAs9LwC12YQDAAFpSPYjAAs9XwC12YRzAAs9ogsACz1/ALXbIwABCtgIAAoDAAs96wC12YS4AwACNXj0cwALPlRbAAs+MLqodwABZpaLYAQABgcACz6bALXZ4AMAAWVNKwALPtQEcwALPvC7AAENoAQABgMACz9XALXZhAMAAWlQGwABaVIEDwALP5MACz+rAAtJsAADAAENoAAAAAQPAAtACwALSbAAAAAEBAcAC0AkAAACSqWADnyIAAGADnyIBPgFDwALQFik+CU7AAtAxwALQNgAAg7VgA58iARbAAtA+gMAC0DjALXeYg7WfPU7AAtBRwALQVwAAgJZgA8ABAAIBFsAC0F6BwALQWcAtd7ed2Z9BScAC0HEiIR7AAtB2wAD3/AIAAoLAAtCAwC132yeaVwAAIR7AAtCRwAD3/AIAAoLAAtCbwC132yeZ5wA+AUrAAtCzAYDAAtC6wC13mD89HMAC0T4uwABCSAIAAoHAAtFewC13t2rAAtFqXQOR0QFhAwFgA58iYAORusAAk90AwABae0nAAtGKHsAC0Y7AAFsoAgACJ5pJFsAC0aGBwALRnMAtd7eDtZ89AD4BPYnAAtGywC13txbAAtG+gcAC0bnALXe3g7WfPT9OwALR28AC0eQAAMAAQo1gA8AAjVgBHMAC0eYuwABDZwEAAYHAAtH9wC13twDAAFpSPYjAAtIKwC13mBzAAtIbg8AC0hLALXjJwABCjgEAAYHAAtIkwC13twDAAI1iPYnAAtIxwC13txbAAtI+gMAC0jjALXeYg7WfPT2KwALSSsAtd9sWwALSV4HAAtJSwC13t53Zn0EGwABaVYEDwALS2cAC0t7AAtW1AADAAENqAAAAAQPAAtL0wALVtQAAAAEBAcAC0vsAAACSqWADnyIAAGADwAD8VQE+AknAAtMIFsAC0xKAwALTDMAteYqdVJ8xPgNJwALTKB7AAtMswABbKAIAAidjFsAC00CAwALTOsAteYqDtZ89AD4DTsAC02TAAtNuAACfUmADwACNZQEewALTcMAAjVYBAAGAwALThsAteYoAScAC05YcwALTpIHAAtOawC155EgBAAFqwALTp2ADwACNZcABDpQAwAD/dT4BSsAC08UBKj89iMAC0+XALXmKHMAC0/eBwALT7cAteeSWhAEAAYDAAtP8wC15igDAAI1tPz2IwALUEsAteYoWwALUIIDAAtQawC15ioO1nz1JwALULB7AAtQwwABbKAIAAieD3IDAAtQ+wC15igA+Aj2IwALUUMAteYoWwALUZxbAAtRegMAC1FjALXmKnXmfL4O1nz1KwALUdQEiIiIewALUfMAAWygCAAInmhKAwALUisAteYoAAR7AAtSgwABbKAIAAieaE4DAAtSvwC15igABHsAC1MXAAFsoAgACJ5oNgMAC1NfALXmKAAEewALU7cAAWygCAAInmguAwALU/sAteYoAScAC1RMewALVF8AAWygCAAInmhOAwALVJsAteYoAPgFKwALVhgEpPz9KwALVpQEqBsAAWlaBA8AC1f/AAtYEwALWtAAAwABDXgAAAAEDwALWGcAC1rQAAAABAQHAAtYgAAAAkqlgA58iAABgA8AA/FUBPgFKwALWLQEiIiIewALWNMAAWygCAAInmhKAwALWQsAte5sAAR7AAtZUwABbKAIAAieaE4DAAtZjwC17mwABHsAC1nXAAFsoAgACJ5oNgMAC1ofALXubAAEewALWmcAAWygCAAInmguAwALWqsAte5sABsAAWleBA8AC1rnAAta/wALaRgAAwABDKgAAAAEDwALW6cAC2kYAAAABAQHAAtb2AAABamADnyIAAGADnyIBPgROwALXCcAC1xQAAMAAQQ5gA58iARbAAtccgMAC1xbALXxPg7WfPUAewALXLcAAWygCAAInhCyBwALXP8AtfGUAwALXLcAC10oAScAC11EhHsAC11bAAIzVAQABFsAC12yBwALXYcAtfGWDtZ89AD4DTsAC14TAAteNAADAAEKNYAPAAI1YAR7AAtePwACNVQIAAoHAAtebwC18ZSoAScAC17UcwALXwoLAAte5wC181UgBAAFqwALXxWADwACNWMABDb0AwAD/dT4ETsAC193AAtfiAACDtWADnyIBFsAC1++BwALX5MAtfGWDtZ89ScAC1/0hFsAC2AeDwALYAsAtfS+dVJ8xPgFKwALYIQEcwALYKC7AAEMsAQABgMAC2EHALXxPAMAAWic/PYvAAthbwC19LxbAAthng8AC2GLALX0vg7WfPUnAAth1ISIiIiIewALYe8AAWygCAAIngLyDwALYicAtfS8AARbAAti7g8AC2LbALX0vnc+fMwEewALY4MAAWygCAAInlvmDwALY7sAtfS8AAR7AAtkDwABbKAIAAieAp4PAAtkRwC19LwABHsAC2SbAAFsoAgACJ5oSg8AC2TTALX0vAD4BSsAC2UgBHMAC2U8uwABDLAEAAYDAAtlowC18TwDAAFonPz9KwALZiAEcwALZjy7AAEMYBgAGgcAC2c7ALXxlgMAC2drALXxPK4HAAtnnwC18ZYLAAtnzwC181SoAwABaWT9KwALaDwEcwALaFi7AAEMcAQABgMAC2jzALXxPAMAAWlgGwABaWIEDwALdJMAC3SrAAuKHAADAAEMcAAAAAQPAAt1PwALihwAAAAIBAsAC3VwAAAFqYAOfIgDAAt1vAAAAwABDa2ADwAD8VQFqwALdk2ADwAD8VQAAYAOfIgE+B07AAt2nwALdrQAAkqlgA58iAYDAAt2vwC1+307AAt3AwALdxQAAg7VgA58iARbAAt3NgsAC3cfALX8Tg7WfPUnAAt3XHsAC3dvAAFsoAgACJ4OEg8AC3enALX8uAD4CPYrAAt34wC1/ExzAAt4ALsAAQKABAAGCwALeEsAtfxMAwABZzj2LwALeIMAtfy4WwALeLYLAAt4nwC1/E4O1nz0/TsAC3kQAAAChY2ADnyIATsAC3lkAAAChZGADnyIAScAC3m8ewALec8AAjNUBAAGDwALefsAtfy4APgJJwALejSIiHsAC3pHAAFsoAgACJ4Qrg8AC3qHALX8uAAEewALetMAAWygCAAInhCqDwALexsAtfy4AAR7AAt7ZwABbKAIAAieELIPAAt7rwC1/LgA+Aj2NwALe/MAtf8OKwALfDsAtfxMWwALfHILAAt8WwC1/E4O1nz09i8AC3yrALX8uFsAC3zeCwALfMcAtfxODtZ89ScAC30oewALfTsAAWygCAAInmi2DwALfX8Atfy4APgM9jMAC33DALX+0isAC33zALX8Tg8AC34TALX8uPYvAAt+SwC1/LhbAAt+fgsAC35nALX8Tg7WfPUnAAt+tIh7AAt+xwACM1QEAAYPAAt+8wC1/LgAAHsAC38XAAFsoAgACJ4Qqg8AC39fALX8uAD4CPY3AAt/qwC1/w4rAAt/8wC1/E4PAAuAEwC1/Lj2LwALgFMAtfy4WwALgIYLAAuAbwC1/E4O1nz0/P0nAAuBAHsAC4ETAAIzVAQABg8AC4E/ALX8uAD4GTsAC4IzAAuCUAACCV2ADwACM1gE1wALgmgAAAQBgA8AAjNYBH8AC4JrAAIz8AQABLgA1AAAAAQBbARfAAuDEhsAC4MLALYGBoWOEwALg0MAtf7TAAIzeNQAAAAEAWwEXwALg5obAAuDkwC2BgaFkhcAC4PjALX/DwACM5YYAwC2BgT2KwALhEsAtfxMcwALhIobAAuEawC2BbcAAQ2wBAAGCwALhRMAtfxMAwACM7T2LwALhVMAtfy4WwALhYYLAAuFbwC1/E4O1nz09jMAC4XDALX+0FsAC4YSGwALhfMAtgW2hY8AAjN49jcAC4ZfALX/DFsAC4bGGwALhqcAtgW2hZMAAjOc9jsAC4cvALYFtKz8/SsAC4e4BHMAC4fUuwABDGAYABoLAAuIpwC1/E4DAAuIwwC1+34TAAuI/wC1/tIXAAuJKwC1/wyuBwALiYcAtfuwAwABaWQbAAFpZgQPAAuK+wALixMAC9VEAAMAAQxgAAAABA8AC4vfAAvVRAAAABgYGwALjCwAAAcAAQqVgA58iAMAC4ykAAAFqYAOfIgDAAuNCAAABoWNgA58iAMAC41kAAAChZGADnyIAwALjeQAAAMAAQo1gA8AAjVgAwALjjgAAAMAAQ2tgA8AA/FUAAGADnyIBPg49IxzAAuPAhMAC47fALYMrSAEAASsAwAD/dYzAAuO3wC2DKx7AAuPEwACNVQIAAoDAAuPQwC2C8ioAKwFgA8AAjVhOwALj78AC4/UAAJKpYAOfIgEcwALkAITAAuP3wC2DK8AAQo4BAAGAwALkCcAtgvIAwACNYk7AAuQgwALkJQAAg7VgA58iARbAAuQthsAC5CfALYOag7WfPUnAAuQ4hcAC5DzALYM9PgFJwALkZyEcwALkdYLAAuRrwC2DD0gBAAErAMAA/3U+AT0cwALkiC7AAEJIAgACgsAC5LXALYMPasAC5MZdA5HRAWEDAWADnyJgA5G6uocAwABaez8+AUnAAuT+HMAC5QIuwABDagEAAYfAAuUZwC2DzwDAAFpVPgZJwALlWSEcwALlbYPAAuVdwC2DHUgBAAErAMAA/3U+AT0cwALlgi7AAEJIAgACg8AC5bHALYMdasAC5chdA5HRAWEDAWADnyJgA5G6uocAwABae0nAAuX0IRzAAuYCgsAC5fjALYMPSAEAASsAwAD/dT4BPRzAAuYXLsAAQkgCAAKCwALmRsAtgw9qwALmV10DkdEBYQMBYAOfImADkbq6hwDAAFp7P0nAAuaGIR7AAuaLwABbKAIAAieDhBbAAuafgcAC5pnALYMCg7WfPQA+Aj0cwALmuxbAAuayLqodwABZpcAAQfkBAAEWwALm04HAAubNwC2DAoO1nz0AwABZED0cwALm7RbAAubkLqodwABZpaFdAQABkwDAAFkRP07AAucZwALnJwAAwABDbWADnyIBHMAC51EewALnNcAAjVYBAAGHwALnS8Atg88AwABCkAIAAofAAudgwC2Dzy4AwACNbD0cwALnfhbAAud1LqodwABZpaN0AQABFsAC56KBwALnnMAtgwKDtZ89AMAAWMc9jsAC57HALYOaHMAC58KEwALnucAtgyvAAEKRAgACgMAC58zALYLyLgDAAI1hSsAC5+cBHMAC5+4uwABDCgQABIbAAugFwC2DmhbAAugSgcAC6AzALYMCg7WfPRTAAugYwC2FmggAKgDAAFoYP0nAAuhCIiIcwALoUYDAAuhGwC2C8kgBAAGBwALoVMAtgwIAwAD/dQAWwALoboTAAuhlwC2DK7b4wACNXAAWwALojYTAAuiEwC2DK8AAQ27AAI1bPgRAHsAC6K/AAFsoAgACJ4D0hsAC6L3ALYOaAMAC6K/AAujDAEAWwALo2IfAAujTwC2Dz51UnzHAAujTwALo5ABOwALo88AC6QMAAMAAQ29gA58iARbAAukKh8AC6QXALYPPg7WfPUnAAumKHsAC6Y7AAFsoAgACJ4C8FMAC6ZzALYcPCAAAPgVOwALqRMAC6lUAAMAAQ3BgA8AAWHMBFsAC6lcuqh3AAFmlPRfAAuppLqodH8AC6njAAIy1AAAAAMAAWaVOwALq4sAC6vIAAMAAQ3FgA58iARbAAusvHMAC6wAuwABDMQEAARTAAusewC2HDwgAAMAAWimDtZ89PRfAAus9LqodFMAC60jALYdXCQDAAFmlScAC62MewALrZ8AAWygCAAInguoUwALrdcAth5MKAAA+Az2MwALsF8AtgytqwALsImADwACNWMABDb09jsAC7DTALYOagcAC7DzALYMCPY/AAuxNwC2DzxbAAuxahsAC7FTALYOag7WfPT9JwALsdyIhFsAC7IwUwALsfMAthw8IAJ3OnzIAIR7AAuykwABbMgIAAhTAAuyxwC2HDwgAasAC7MJdA8AA/r8BYAPAAQACwAETHwA+Az2MwALtZMAtgytqwALtb2ADwACNWMABDb09jsAC7X/ALYOagcAC7YfALYMCPY/AAu2WwC2DzxbAAu2jhsAC7Z3ALYOag7WfPT8/ScAC7bwcwALtxobAAu3AwC2DmkgBAAGBwALtycAtgwIAwAD/dT4BScAC7luFwALuX8Atgz0+AUrAAu6MAYHAAu6TwC2DAj4BSsAC7rEBHMAC7rguwABDLAEAAYHAAu7RwC2DAgDAAFonP0nAAu7sIiIWwALu+hbAAu71h8AC7vDALYPPgpSfQp3En8sAHMAC7xqAwALvD8AtgvJIAQABgcAC7x3ALYMCAMAA/3UAFsAC7zeEwALvLsAtgyvAAENuwACNWz4BScAC77oiHsAC777AAFsoAgACJ5nnh8AC783ALYPPAAEewALv1sAAWygCAAInmleHwALv5cAtg88APgJOwALv+sAC7/8AAIJrYAPAAP4bARbAAvALFsAC8AaHwALwAcAtg8+DtZ89gmufOknAAvAZIiIhHMAC8CZqwALwHWADwAD+G8AAl1lIAQABFMAC8CnALYnoCAAAwAD/PwAhHMAC8E1qwALwPWADwAD+G5SASAEAARTAAvBQwC2J6AgAAMAA/z8AIRzAAvBwasAC8GRgA8AA/hvAAEe9SAEAARTAAvBzwC2J6AgAAMAA/z8+AUnAAvCFhcAC8InALYM9PgFJwALwuiEewALwv8AAWygCAAInml4WwALw04fAAvDOwC2Dz4O1nz0APgFKwALw6gGBwALw8cAtgwI/PgFKwALxJQEcwALxLC7AAEMsAQABgcAC8UXALYMCAMAAWic/Pz9JwALxdhbAAvF/h8AC8XrALYPPnVSfMT4BScAC8lAcwALyZIPAAvJUwC2DHUgBAAErAMAA/3U+AUnAAvJ3IhzAAvKEhMAC8nvALYMrSAEAAWrAAvKHYAPAAI1YwAENvQDAAP91ABzAAvKbgsAC8pHALYMPSAEAASsAwAD/dT4BPRzAAvKwLsAAQlcCAAKHwALyx8Atg89qwALy02ADkcXAAGaMAMAAWno/ScAC8w4ewALzEsAAWygCAAInhCuDwALzIsAtgx0APgFJwALzPiEcwALzS4TAAvNCwC2DK0gBAAFqwALzTmADwACNWMABDb0AwAD/dT4BPRzAAvNiLsAAQlcCAAKDwALzecAtgx1qwALzkGADkcXAAI6cAMAAWno/Pz9JwALzwyEewALzyMAAWygCAAIng4QWwALz3IHAAvPWwC2DAoO1nz0APgI9HMAC8/QWwALz6y6qHcAAWaXAAEH5AQABFsAC9AyBwAL0BsAtgwKDtZ89AMAAWRA9HMAC9CIWwAL0GS6qHcAAWaWhXQEAAZMAwABZET89jsAC9EDALYOaHMAC9FGEwAL0SMAtgyvAAEKRAgACgMAC9FvALYLyLgDAAI1hPY/AAvRywC2DzxbAAvR/hsAC9HnALYOag7WfPT0cwAL0khbAAvSJLqodwABZpaJhAwADh8AC9KzALYPPgsAC9LLALYMPg8AC9L3ALYMdAMAAWU9JwAL00yGFwAL02MAtgz0+AT2OwAL1A8Atg5ocwAL1Cy7AAENyAgAChsAC9SnALYOaKQDAAFpaP0rAAvVBAYbAAvVIwC2DmgbAAFpagQPAAvVWwAL1XMAC92UAAMAAQ3IAAAABA8AC9XnAAvdlAAAAAgICwAL1gAAAAJKpYAOfIgDAAvWMAAAAwABDc2ADwAD8VQAAYAOfIgE+BE7AAvWowAL1rgAAgO5gA8AA/hsBlD2IwAL1t8AtjZkcwAL1vy7AAEN0AQABgMAC9eTALY2ZAMAAWltDwAL18B7AAvX3wABbKAIAAieApxbAAvYLgMAC9gXALY2Zg7WfPQA+Aj2IwAL2GsAtjZkcwAL2Ii7AAEN0AQABFsAC9k2AwAL2R8AtjZmDtZ89AMAAWls9isAC9lzALY3CHMAC9lqCwAL2XMAtjcJkAQABlADAAP9BScAC9m2BwAL2ccAtjac+A07AAvaRwAL2mwAAojxgA58iARzAAvadLsAAQmcBAAGAwAL2rcAtjZkAwABaBz0cwAL2xBbAAva7LqodwABZpaJkAgACgsAC9tzALY3Cg8AC9uPALY6FAMAAWVBKwAL29QGDwAL2/MAtjoU+Aj0cwAL3IxbAAvcaLqodwABZpaJkAgACgsAC9zvALY3CKwDAAFlQSsAC908BgMAC91bALY2ZBsAAWluBA8AC92rAAvdwwAL4tQAAwABDdAAAAAEDwAL3lMAC+LUAAAABAQHAAvebAAAAkqlgA58iAABgA58iAT4FTsAC967AAve4AACiX2ADnyIBHMAC98IuwABCagIAAoDAAvfTwC2PUWrAAvfsYAPAAI3TwAETNgDAAFnzPRzAAvgUFsAC+Asuqh3AAFmlwABB5wEAAYHAAvgvwC2PaADAAFjsPYjAAvg/wC2PURzAAvhHLsAAQt4BAAGBwAL4Y8Atj2gAwABZ/D0cwAL4fBbAAvhzLqodwABZpaJeAQABgcAC+JXALY9oAMAAWO1KwAL4pQGAwAL4rMAtj1EGwABaXIEDwAL5J8AC+S3AAvuTAADAAEMdAAAAAQPAAvk9wAL7kwAAAAEBAcAC+UQAAACSqWADnyIAAGADnyIBPgtOwAL5V8AC+V8AAKJKYAOfIgEWwAL5Z4DAAvlhwC2QT4O1nz1AHsAC+XjAAFsoAgACJ5pvgcAC+YfALZBmAMAC+XjAAvmPAD0cwAL5nxbAAvmWLqodwABZpcAAQeABAAGBwAL5sMAtkGYAwABY2z2IwAL5vsAtkE8cwAL5xi7AAENRAQABgcAC+ePALZBmAMAAWjM9HMAC+foWwAL58S6qHcAAWaWiRQEAARbAAvoTgMAC+g3ALZBPg7WfPQDAAFjdPYjAAvoewC2QTxzAAvomLsAAQxQBAAGAwAL6NcAtkE8AwABaIT0cwAL6ShbAAvpBLqodwABZpaJHAQABgMAC+lvALZBPAMAAWN5OwAL6bcAC+ncAAKJLYAOfIgErScAC+oMewAL6h8AAWygCAAInmnAWwAL6noDAAvqYwC2QT4O1nz0APgQ9isAC+q3ALZFxFsAC+r+AwAL6ucAtkE+DtZ89PRzAAvrUFsAC+ssuqh3AAFmlrcsBAAGCwAL658AtkXEAwABY3z2IwAL6+cAtkE8cwAL7AS7AAEMUAQABgsAC+xDALZFxAMAAWiE9HMAC+ysWwAL7Ii6qHcAAWaWtzAEAAYLAAvs8wC2RcQDAAFjgPz0cwAL7WxbAAvtSLqodwABZpaJJAgACgcAC+2rALZBmgsAC+3PALZFxAMAAWNxKwAL7gwGAwAL7isAtkE8GwABaXYEDwAL9ZsAC/WzAAwAbAADAAEMeAAAAAQPAAv19wAMAGwAAAAICAsAC/YQAAACSqWADnyIAwAL9kQAAAKOLYAOfIgAAYAOfIgE+CE7AAv2pwAL9sgAAooNgA58iAYjAAv20wC2SoRbAAv3CgMAC/bzALZKhg7WfPUAiHMAC/d6BwAL908Atkq9IAQABKwDAAP91AR7AAv3pwABbKAIAAieaXIHAAv37wC2SrwDAAv3TwAL+BgBAHsAC/hTAAFsoAgACJ5pogMAC/iTALZKhAMAC/hTAAv4qAD0cwAL+OhbAAv4xLqodwABZpa24AQABgsAC/kzALZLGAMAAWLo9iMAC/lzALZKhHMAC/mQuwABDdgIAAoHAAv57wC2Sr4LAAv6HwC2SxgDAAFpeTsAC/pzAAv6nAACd92ADnyIBFsAC/q+AwAL+qcAtkqGDtZ89PYjAAv65wC2SoRzAAv7BLsAAQ3cDAAOAwAL+1sAtkqGBwAL+3cAtkq+CwAL+6cAtksYAwABaX0nAAv74Ih7AAv78wABbKAIAAieaXhbAAv8RgMAC/wvALZKhg7WfPQABHsAC/xrAAFsoAgACJ4LqFsAC/y6AwAL/KMAtkqGDtZ89AD4BSsAC/2MBHMAC/2ouwABDeAQABIDAAv95wC2SoYHAAv+AwC2Sr4LAAv+MwC2SxoPAAv+WwC2TpgDAAFpiPgFKwAL/4QEcwAL/6C7AAEN5AwADgcAC//XALZKvgMADAAHALZKhgsADAAjALZLGAMAAWmAGwABaXoEDwAMAnsADAKTAAwZ6AADAAEN2AAAAAQPAAwC6wAMGegAAAAICAsADAMEAAACji2ADnyIAwAMA0wAAAKKDYAOfIgAAYAOfIgE+A07AAwDpwAMA+QAAo4xgA58iARbAAwEEgcADAPvALZT4g7WfPUnAAwEOIR7AAwETwABbKAIAAieD3ILAAwEhwC2VDwA+CD0cwAMBTS7AAEJXAgACgsADAW/ALZUPHMADAZ1qwAMBhl0DkdEBYQMBYAPAAQACYAORurH2iD0BAAEng9wAkdUAwABaek7AAwHEwAMBzgAAwABC6GADnk0BJsADAcQBHMADAdkWwAMB0C7AAEI7wABZrsAAQs0CAAKBwAMB8MAtlPgfwAMCCJ8FAgACasADAjVgA59qwACfaRbAAwJRgsADAkHALZUPg2KfPgAAwACNLmADnk1OwAMCaAAAAJKpYAOfIgBJwAMCdSEcwAMChIDAAwJ5wC2U6kgBAAErAMAA/3U+Az2MwAMCl8AtlgkcwAMCqBbAAwKfLsAAQjvAAFmuwABCWAEAAYPAAwLCwC2VmQDAAI1JPYzAAwLWwC2WCRzAAwLnFsADAt4uwABCO8AAWa7AAEKVAgAChMADAv7ALZYJasADAw1gA55lwACndQDAAI1KPYzAAwMawC2WCRzAAwMrFsADAyIuwABCO8AAWa7AAEJYAQABhMADA0XALZYJAMAAjUk+Aj2MwAMDZMAtlgkcwAMDdRbAAwNsLsAAQjvAAFmuwABC2QIAAoPAAwOKwC2VmWrAAwOfYAOfasAAvIoAwACNSz2MwAMDs8AtlgkcwAMDxBbAAwO7LsAAQjvAAFmuwABC2QIAAoTAAwPZwC2WCWrAAwPqYAOfasAAvIoAwACNSz0XwAMED4PAAwQFwC2VmZ15jMADBBrALZYJHMADBCsWwAMEIi7AAEI7wABZrsAAQs0CAAKEwAMEN8AtlgkfwAMETJ8hAgACasADBGVgA59qwAC2BhbAAwSCgsADBHLALZUPg2KfPgAAwACNLp5VPYzAAwSTwC2WCRzAAwSkFsADBJsuwABCO8AAWa7AAEJYAQABhMADBL7ALZYJAMAAjUk9HMADBNUWwAMEzC7AAEI7wABZrsAAQtkCAAKEwAME6sAtlglqwAME+2ADn2rAALyKAMAAjUs9isADBQ7ALZUPg8ADBSDALZWZP0rAAwYzARzAAwY6LsAAQxwCAAKCwAMGYMAtlQ8pAMAAWlgGwABaX4EDwAMG/sADBwTAAwsxAADAAEN3AAAAAQPAAwcYwAMLMQAAAAMDA8ADBx8AAACSqWADnyIAwAMHLAAAAKOLYAOfIgDAAwc+AAAAooNgA58iAABgA58iAT4EScADB04hHMADB1iAwAMHUsAtmJJIAQABFsADB2SCwAMHW8AtmK6DtZ89AMAA/3U+Aj2IwAMHcsAtmJIcwAMHei7AAENyAgACgMADB5jALZiSKgDAAFpaPRzAAwe2FsADB60uqh3AAFmlonoBAAGAwAMH48AtmJIAwABYuUnAAwf2HsADB/rAAFsoAgACJ5b5FsADCA6AwAMICMAtmJKDtZ89AD4BPRzAAwgmFsADCB0uqh3AAFmlonUBAAEWwAMIT4DAAwhJwC2YkoO1nz0AwABYtz4CPYjAAwhpwC2YkhzAAwhxLqG0AQABgMADCIHALZiSAMAAWig9HMADCJgWwAMIjy6qHcAAWaWieAEAAYDAAwjAwC2YkgDAAFi4TsADCNjAAwjdAACDtWADnyIBFsADCOWAwAMI38AtmJKDtZ89ScADCO8ewAMI88AAWygCAAInlvmDwAMJAcAtmeIAPgFJwAMJECEcwAMJH4HAAwkUwC2YoEgBAAErAMAA/3U+AT0cwAMJMi7AAEJXAgACgcADCUnALZigasADCVtgA5HFwABarADAAFp6P0nAAwmHIR7AAwmMwABbKAIAAieaXoPAAwmbwC2Z4gA+AUnAAwm8HsADCcDAAFsoAgACJ4Lqg8ADCc7ALZniAD4BPRzAAwnfLsAAQlcCAAKDwAMJ9sAtmeJqwAMKAmADkcWTyADAAFp6ScADCikhHMADCjiBwAMKLcAtmKBIAQABKwDAAP91PgI9HMADCksuwABCVwIAAoPAAwpvwC2Z4hzAAwqSasADCntdA5HRAWEDAWADwAEAAmADkbqx9og9AQABJ5peAJHVAMAAWno9HMADCraAwAMKsMAtmJKd2gEAATXAAwrPAAABAGADnwYBH8ADCs+fDAIAAmrAAwrtYAOeZcAAp3UWwAMK9oPAAwrxwC2Z4oNinz4ANQAAAAEAWwEcwAMK/4TAAwr9wC2bUZ3aAQABg8ADCwfALZniAJ7qhADALZtRAJ9MPz9KwAMLIQGAwAMLKMAtmJIGwABaYIEDwAMM5cADDOvAAw6YAADAAEN5AAAAAQPAAwz3wAMOmAAAAAMDA8ADDP4AAACji2ADnyIAwAMNEAAAAJKpYAOfIgDAAw0dAAAAooNgA58iAABgA58iAT4JPYnAAw0twC2cAxzAAw01LsAAQ3oDAAOBwAMNS8AtnAOCwAMNUsAtnBGAwAMNXMAtm/UAwABaYT0cwAMNdhbAAw1tLqodwABZpa3FAQABFsADDZKBwAMNjMAtnAODtZ89AMAAWL1OwAMNp8ADDbYAAMAAQxNgA8AAjMYBFsADDbguwABAKcAAWag9F8ADDccuwABAKWrAAw3dYAPAAIzGwAEK8MAAWag9icADDe3ALZwDHMADDfUuwABDFAEAAYHAAw4EwC2cAwDAAFohPRfAAw4QLsAAQCmDwAMOHMAtnI3AAFmoPRzAAw45FsADDjAuqh3AAFmlrccBAAEWwAMOU4HAAw5NwC2cA4O1nz0AwABYvj0cwAMOZxbAAw5eLqodwABZpaKLAQABFsADDn2BwAMOd8AtnAODtZ89AMAAWLxKwAMOiAGBwAMOj8AtnAMGwABaYYEDwAMOncADDqPAAxKGAADAAEN6AAAAAQPAAw64wAMShgAAAAMDA8ADDr8AAACSqWADnyIAwAMOzAAAAKKDYAOfIgDAAw7cAAAAo4tgA58iAABgA58iAT4KTsADDvTAAw8EAACjjGADnyIBFsADDw+BwAMPBsAtnbCDtZ89QB7AAw8gwABbKAIAAieaaIHAAw8wwC2dsADAAw8gwAMPOQBAHsADD0fAAFsoAgACJ4Pcg8ADD1XALZ3VAMADD0fAAw9lAE7AAw9zwAMPgQAAon9gA58iARzAAw+DLsAAQmcBAAGAwAMPk8AtnaIAwABaB0nAAw+fHsADD6PAAFsoAgACJ5b5FsADD7+EwAMPscAtnj+DtZ89AD4BPYjAAw/OwC2dohzAAw/WLsAAQycBAAGEwAMP6sAtnj8AwABadT4BPYjAAxANwC2dohzAAxAVLsAAQywBAAGEwAMQLsAtnj8AwABaJ07AAxBMwAMQXAAAo79gA8AA/hsBk0FDwAMQZSk+BU7AAxCAwAMQhQAAg7VgA58iARbAAxCNgMADEIfALZ2ig7WfPUnAAxCZHsADEJ3AAFsoAgACJ4MmhsADEKvALZ7/AD4CPYjAAxC8wC2doobAAxDEwC2e/0LAAxDSAD89iMADEOfALZ2iFsADEQYcwAMQ7y6htAEAAYDAAxD/wC2dogDAAFoog7WfPT2NwAMRFMAtnuEcwAMREoXAAxEUwC2e4WQBAAGUAMAA/0FJwAMRKyEewAMRMMAAWygCAAIngKeAwAMRPsAtnaIAPgFCwAMRUAA/ScADEWkhHMADEXOAwAMRbcAtnaJIAQABFsADEYaDwAMRdsAtndWdeZ8vAMAA/3U+Aj0cwAMRmC7AAEJIAgACgMADEbjALZ2iasADEcVdA5HRAWEDAWADnyJgA5G6wACT3QDAAFp7PYjAAxHlwC2dohbAAxH9g8ADEe3ALZ3VnXmfLz89HMADEhoWwAMSES6qHcAAWaWifAQABIHAAxI2wC2dsIPAAxJAwC2d1YTAAxJRwC2eP4XAAxJgwC2e4QDAAFi7SsADEnYBgMADEn3ALZ2iBsAAWmKBA8ADFEzAAxRSwAMWEwAAwABDeAAAAAEDwAMUYMADFhMAAAAEBATAAxRuAAAAkqlgA58iAMADFHsAAACji2ADnyIAwAMUjQAAAKKDYAOfIgDAAxSdAAAAnfdgA58iAABgA58iAT4JPYjAAxSvwC2g0BzAAxS3LsAAQ3sEAASAwAMUz8AtoNCBwAMU1sAtoN6CwAMU4sAtoOyDwAMU7MAtoPoAwABaYz0cwAMVBhbAAxT9LqodwABZpa3IAQABFsADFRuAwAMVFcAtoNCDtZ89AMAAWMNOwAMVMMADFT8AAMAAQxNgA8AAjMYBFsADFUEuwABAKcAAWag9F8ADFVAuwABAKWrAAxVmYAPAAIzGwAEK8MAAWag9iMADFXbALaDQHMADFX4uwABDFAEAAYDAAxWNwC2g0ADAAFohPRfAAxWZLsAAQCmEwAMVpcAtoX/AAFmoPRzAAxXCFsADFbkuqh3AAFmlrcoBAAEWwAMV1YDAAxXPwC2g0IO1nz0AwABYxD0cwAMV6RbAAxXgLqodwABZpaOcAQABFsADFfiAwAMV8sAtoNCDtZ89AMAAWMBKwAMWAwGAwAMWCsAtoNAGwABaY4EDwAMWGMADFh7AAxreAADAAEN7AAAAAQPAAxY1wAMa3gAAAAQEBMADFkMAAACSqWADnyIAwAMWUAAAAKOLYAOfIgDAAxZiAAAAooNgA58iAMADFnIAAACd92ADnyIAAGADnyIBPgtOwAMWisADFpQAAKONYAOfIgEWwAMWnIDAAxaWwC2ilIO1nz1AHsADFq3AAFsoAgACJ5pogsADFr3ALaKwAMADFq3AAxbGAEAewAMW1MAAWygCAAIng9wWwAMW64LAAxbiwC2isIO1nz0AwAMW1MADFvAAQCIewAMW/sAAWygCAAInml6EwAMXDcAtotUAAR7AAxcbwABbKAIAAieC6oTAAxcpwC2i1QDAAxb+wAMXMwBJwAMXOyEWwAMXS4PAAxdAwC2ivp1UnzE+AT0cwAMXYS7AAEJIAgACg8ADF4zALaK+asADF55dA5HRAWEDAWADnyJgA5G6tDUAwABae0nAAxfGIRzAAxfVg8ADF8rALaK+SAEAAYDAAxfYwC2ilADAAP91PgFJwAMX5x7AAxfrwABbKAIAAieAvBbAAxgEg8ADF/nALaK+g7WfPQA+AT0cwAMYFS7AAEJXAgACFsADGESDwAMYOcAtor6DtZ89asADGFBgA5HFwABRTADAAFp6PgE9HMADGI0uwABCSAIAAhbAAxjFg8ADGLrALaK+g7WfPWrAAxjRXQOR0QFhAwFgA58iYAORusAAk90AwABae0nAAxj+IiEcwAMZDYHAAxkCwC2iokgBAAErAMAA/3UAIRbAAxkZLsAAQj3AAFmwPgE9HMADGW4uwABCVwIAAoTAAxmFwC2i1WrAAxmWYAORxYy2AMAAWno/PRzAAxnEFsADGbsuqh3AAFmlo4cBAAEWwAMZ44TAAxnZwC2i1YO1nz0AwABYwT2IwAMZ7sAtopQcwAMZ9i6htAEAAYTAAxoGwC2i1QDAAFooPYjAAxoWwC2ilBzAAxoeLsAAQp0CAAKAwAMaL8AtopQWwAMaP4LAAxo2wC2isIO1nz0AwABaBD0cwAMaUxbAAxpKLqodwABZpaOIAQABgMADGmbALaKUAMAAWMI9HMADGnsWwAMaci6qHcAAWaWjigQABIHAAxqZwC2iooLAAxqlwC2isBbAAxq4gsADGq/ALaKwg7WfPYTAAxq+wC2i1QDAAFi/SsADGs4BgMADGtXALaKUBsAAWmSBA8ADG0LAAxtIwAMdXgAAwABDIAAAAAEDwAMbW8ADHV4AAAABAQHAAxtiAAAAkqlgA58iAABgA58iAT4MTsADG3XAAxuAAADAAEN8YAOfIgEWwAMbiIDAAxuCwC2mH4O1nz1AHsADG5nAAFsoAgACJ5pmgcADG6vALaY2AMADG5nAAxu2AD0cwAMbxhbAAxu9LqodwABZpa2+AQABgcADG9rALaY2AMAAWVE9iMADG+vALaYfHMADG/MuwABDUQEAAYHAAxwQwC2mNgDAAFozPRzAAxwqFsADHCEuqh3AAFmlrcIBAAEWwAMcSIDAAxxCwC2mH4O1nz0AwABYo07AAxxdwAMcbAAAwABDE2ADwACMxgEWwAMcbi7AAEApwABZqD0XwAMcfS7AAEApasADHJNgA8AAjMbAAQrwwABZqD2IwAMco8Atph8cwAMcqy7AAEMUAQABgMADHLrALaYfAMAAWiE9F8ADHMYuwABAKYLAAxzSwC2m98AAWag9HMADHO8WwAMc5i6qHcAAWaWtxAEAARbAAx0LgMADHQXALaYfg7WfPQDAAFikPRzAAx0fFsADHRYuqh3AAFmlo6sCAAKBwAMdMcAtpjYWwAMdQ4DAAx09wC2mH4O1nz0AwABZUkrAAx1OAYDAAx1VwC2mHwbAAFplgQPAAx3IwAMdzsADIRAAAMAAQyEAAAABA8ADHePAAyEQAAAAAQEBwAMd6gAAAJKpYAOfIgAAYAOfIgE+D07AAx39wAMeBQAAwABDfWADnyIBFsADHg2AwAMeB8AtqBWDtZ89QB7AAx4ewABbKAIAAieaZ4HAAx4twC2oLADAAx4ewAMeNQA9HMADHkUWwAMePC6qHcAAWaWtvQEAAYHAAx5bwC2oLADAAFifPRzAAx5yFsADHmkuqh3AAFmlrb8BAAEWwAMelIHAAx6MwC2oLIO1nz0AwABYoU7AAx6pwAMeuAAAwABDE2ADwACMxgEWwAMeui7AAEApwABZqD0XwAMeyS7AAEApasADHt9gA8AAjMbAAQrwwABZqD2IwAMe78AtqBUcwAMe9y7AAEMUAQABgcADHwbALagsAMAAWiE9F8ADHxQuwABAKYLAAx8gwC2oyMAAWag9HMADHz0WwAMfNC6qHcAAWaWtwQEAAYDAAx9VwC2oFQDAAFiiTsADH2fAAx9yAADAAEN8YAOfIgEWwAMfeoDAAx90wC2oFYO1nz1JwAMfhCEewAMficAAWygCAAInmmaDwAMfm8AtqWwAPgI9HMADH7AuwABCVwIAAoPAAx/SwC2pbBzAAx/7asADH+RdA5HRAWEDAWADwAEAAmADkbqx9og9AQABJ5pmAJHVAMAAWno9i8ADIBrALalsHMADIDAWwAMgJy7AAEI7wABZrsAAQpUCAAKAwAMgR8AtqBVqwAMgVmADnmXAAK4+AMAAjUo/PYjAAyBowC2oFRzAAyBwLsAAQ1EBAAGDwAMgjcAtqWwAwABaMz2IwAMgnsAtqBUcwAMgpi7AAEJnAQABgMADILbALagVAMAAWgc9HMADIMsWwAMgwi6qHcAAWaWjggMAA4HAAyDfwC2oLIPAAyDowC2pbIDAAyD0wC2oFQDAAFigSsADIQABgMADIQfALagVBsAAWmaBA8ADIVnAAyFfwAMkZAAAwABDGQAAAAEDwAMhacADJGQAAAACAgLAAyFwAAAAkqlgA58iAMADIX4AAADAAELlYAPAAQACAABgA58iAT4JTsADIZXAAyGbAACCmGADnyIBiMADIZ3ALarzHMADIaUuwABCsQMAA4DAAyGxwC2q8yuBwAMhvsAtqwEAwABaAj0cwAMh1xbAAyHOLqodwABZpa28AQABgsADIeLALascAMAAWH5OwAMh8sADIgEAAKPNYAPAAP4bAZNOwAMiEMADIhsAAKBZYAOfIgEWwAMiI4DAAyIdwC2q84O1nz1DwAMiLRzAAyI0LsAAQtACAAInhuKEwAMiR8Atq5YAwABZ9D4EPYjAAyJcwC2q8xzAAyJkLsAAQxQBAAGAwAMic8AtqvMAwABaIUnAAyKBHsADIoXAAPf8AgACFsADIpWAwAMij8AtqvODtZ89hMADIpvALauWAD4CPYjAAyMgwC2q8xbAAyMugMADIyjALarzg7WfPT0cwAMjPC7AAEJXAgACgMADI2DALarzHMADI4VqwAMjbV0DkdEBYQMBYAOfImADkbrAAJPdiD0BAAGAwAMjk8AtqvMAkdUAwABaej89i8ADI6zALauBHMADI6qDwAMjrMAtq4FkAQABlADAAP9BPYzAAyPCwC2rlhbAAyPVgMADI8/ALarzg7WfPT2IwAMj5cAtqvMWwAMj84DAAyPtwC2q84O1nz1AHsADJATAAFsoAgACJ4bigMADJBLALarzAMADJATAAyQYAD0cwAMkKBbAAyQfLqodwABZpaJnAwADg8ADJDHALauBgsADJEHALascgMADJEjALarzAMAAWH9KwAMkVAGAwAMkW8AtqvMGwABaZ4EDwAMkacADJG/AAyaKAADAAEAvAAAAAQPAAySAwAMmigAAAAEBAcADJIcAAACSqWADnyIAAGADnyIBPghOwAMkmsADJKAAAIKYYAOfIgEWwAMkqIDAAySiwC2tiYO1nz1AHsADJLnAAFsoAgACJ5oSgcADJMfALa2gAMADJLnAAyTNAE7AAyVdwAMlbgAAwABDcGADwABYcwEWwAMlcC6qHcAAWaU9F8ADJX4uqh01wAMljQAAAQBgA8AAi4YBH8ADJY3AAIy1AQABFsADJaAuqh3AAFmlADUAAAABAFsBF8ADJauDwAMlqcAtrhLAAEN+KsAAi4mDAMAtrhLAAFmlPYjAAyYEwC2tiRzAAyYMLsAAQxkCAAKAwAMmF8AtrYkrAMAAWmY9F8ADJikuqh2CwAMmNMAtrefAAFmlPRzAAyZTFsADJkouqh3AAFmlomgBAAGBwAMmbsAtraAAwABYgErAAyZ6AYDAAyaBwC2tiQbAAFpogQPAAycVwAMnGsADKbkAAMAAQysAAAABA8ADJzLAAym5AAAAAQEBwAMnOQAAAJKpYAOfIgAAYAPAAPxVAT4FPYjAAydGwC2u/xbAAydUgMADJ07ALa7/g7WfPUAewAMnZcAAWygCAAInmlyAwAMnd8Atrv8AwAMnZcADJ30APYjAAyeEwC2u/xbAAyeSgMADJ4zALa7/g7WfPUnAAyh3FsADKIGAwAMoe8Atrv+dVJ8xPgI9iMADKJfALa7/FsADKKWAwAMon8Atrv+DtZ89ScADKLEewAMotcAAWygCAAIng9yAwAMow8Atrv8APgI9iMADKNXALa7/FsADKOwWwAMo44DAAyjdwC2u/515ny+DtZ89ScADKPoewAMo/sAAWzECAAKAwAMpBsAtrv8xwAMpDWADwAEAAgUnlvkngWoniHQngPQnnjkAPgFKwAMpNwEpP0nAAylbHsADKV/AAFsxAgACgMADKWfALa7/McADKW5gA8ABAAIDJ4FqJ4MmJ5nzAD4BSsADKYoBKT8/SsADKakBKgbAAFppgQPAAyoRwAMqF8ADLGIAAMAAQ0AAAAABA8ADKivAAyxiAAAAAgICwAMqMgAAAJKpYAOfIgDAAyo+AAAAwABDM2ADwAD8VQAAYAOfIgE+Bk7AAypZwAMqZAAAo4tgA58iARbAAypsgMADKmbALbCag7WfPUAewAMqfcAAWygCAAInmlyCwAMqj8AtsMMAwAMqfcADKpoAPRzAAyqqFsADKqEuqh3AAFmlwABBvQEAAYLAAyq/wC2wwwDAAFh7PYjAAyrQwC2wmhzAAyrYLsAAQzADAAOCwAMq+8AtsMNqwAMrB2ADwAD+G4NwgcADKxvALbCoAMAAWitJwAMrLxbAAyszLsAAQj3AAFmwPgE9HMADK00WwAMrRC6qHcAAWaWilAIAAoLAAytgwC2wwxbAAytygMADK2zALbCag7WfPQDAAFh8PgNOwAMrnsADK6gAAIH1YAORxQFqwAMrsGADkcWM6T0cwAMrzC7AAEJXAgACgsADK+PALbDDg8ADK+/ALbG6AMAAWno9HMADLAoWwAMsAS6qHcAAWaWilgMAA4LAAywkwC2wwxbAAyw2gMADLDDALbCag7WfPYPAAyw8wC2xugDAAFh9SsADLFIBgMADLFnALbCaBsAAWmqBA8ADLRHAAy0XwAMwWwAAwABDLwAAAAEDwAMtK8ADMFsAAAACAgLAAy0yAAAAkqlgA58iAMADLT4AAADAAEMzYAPAAPxVAABgA58iAT4GTsADLVnAAy1kAACi62ADnyIBFsADLWyAwAMtZsAtsnaDtZ89QB7AAy19wABbKAIAAieaW4LAAy2PwC2ynwDAAy19wAMtmgBJwAMtoR7AAy2lwABbKAIAAieW+RbAAy2+gsADLbPALbKfg7WfPQA+Aj0cwAMumC7AAEJXAgACFsADLsWCwAMuusAtsp+DtZ89asADLtFgA5HFwABnTwDAAFp6PRzAAy8CFsADLvkuwABCO8AAWa7AAELNAgACgsADLxnALbKfH8ADLzOfFwQABGrAAy9hYAOfasAAsnInwABC6xbAAy9/FsADL3qCwAMvb8Atsp+DtZ89h3GfK5MAAMAAjS4/PYjAAy+awC2ydiOBwAMvosAtsoQcwAMvui6htAEAAYLAAy/KwC2ynwDAAFooHMADL+AuwABDMQEAAYLAAy/+wC2ynwDAAFopAWADnyI9HMADMBgWwAMwDy6qHcAAWaWi6gIAAoLAAzAuwC2ynxbAAzBAgMADMDrALbJ2g7WfPQDAAFksSsADMEsBgMADMFLALbJ2BsAAWmuBA8ADMKrAAzCwwAMxxwAAwABDHwAAAAEDwAMwxcADMccAAAABAQHAAzDMAAAAkqlgA58iAABgA58iAT4GTsADMN/AAzDqAACi62ADnyIBFsADMPKAwAMw7MAttGKDtZ89QB7AAzEDwABbKAIAAieaWoHAAzEXwC20eQDAAzEDwAMxIgA9HMADMTIWwAMxKS6qHcAAWaXAAEIDAQABgcADMUjALbR5AMAAWS09iMADMVnALbRiHMADMWEuwABCZwEAAYHAAzFxwC20eQDAAFoHPRzAAzGLFsADMYIuqh3AAFmlo6UCAAKBwAMxn8AttHmAwAMxq8AttGIAwABZLkrAAzG3AYDAAzG+wC20YgbAAFpsgQPAAzMbwAMzIcADRGgAAMAAQyIAAAABA8ADMzLAA0RoAAAAAQEBwAMzOQAAAJKpYAOfIgAAYAOfIgE+DE7AAzNMwAMzVwAAoyBgA58iARbAAzNfgMADM1nALbV0g7WfPUAewAMzcMAAWygCAAInmnKBwAMzgMAttYsAwAMzcMADM4sAPRzAAzObFsADM5Iuqh3AAFmlwABCBwEAAYHAAzOtwC21iwDAAFk1TsADM8TAAzPRAADAAEBHYAOfIgEcwAMz0y7AAEMZAgACgcADM97ALbWLJ8AAQ38AwABaZj2IwAM0AMAttXQWwAM0FYLAAzQIwC21+YO1nz1OwAM0I8ADNC4AAKMfYAPAAP4bAZNOwAM0P8ADNEUAAICWYAPAAQACARbAAzRNgMADNEfALbV0ndmfQUPAAzReIh7AAzRlwAD3/AIAAoTAAzRvwC22XieacwABHsADNILAAPf8AgAChMADNIzALbZeJ5pAAD4MPRzAAzSrFsADNKIuqh3AAFmloxABAAGAwAM0vMAttXQAwABZN07AAzTQwAM02gAAoxRgA58iAStJwAM06B7AAzTswAD3/AIAAoTAAzT2wC22XieaQAA+BD2NwAM1LsAttuSAwAM1OsAttXQ9isADNUnALbX5HMADNXEewAM1WMAAjVUCAAKAwAM1ZMAttXQpAMAAQrYCAAKAwAM1g8AttXQuAMAAjV49iMADNZnALbV0FsADNa6CwAM1ocAttfmDtZ89PYzAAzW8wC22XhbAAzXKgMADNcTALbV0ndmfQT9OwAM168ADNfgAAKMVYAOfIgErTsADNgzAAzYSAACjFmADnyIBK0nAAzYgHsADNiTAAPf8AgAChMADNi7ALbZeJ5pzAD4IPY7AAzZJwC23n4DAAzZYwC21dE7AAzZuwAM2eQAAwABDgGADnyIBFsADNoiGwAM2e8Att5+DtZ89ScADNpYhHsADNpvAAFsoAgACJ4PcFMADNqnALbf4CAAAPgI9HMADNsIuwABCVwIAAhTAAzbZwC23+AgAasADNutgA5HFk00AwABaej0VwAM3CsAtt/gIHMADNyAWwAM3Fy7AAEI7wABZrsAAQncCAAKGwAM3LcAtt58pAMAAjS0/TsADN1vAAzdpAADAAEOBYAOfIgEWwAM3dhTAAzdrwC23+AgAg7WfPUnAAzeEIRzAAzebFsADN5YUwAM3iMAtuJ8JAIJrnzpIAQABasADN55gA8AA/hvAAJxOAMAA/z8+AT0VwAM3vMAtuJ8JHMADN/xqwAM33mADwACNdcABE3PAAEJqAgACFMADOA3ALbf4CAAuAMAAjXc/ScADODMewAM4N8AAWygCAAIngyYWwAM4UxTAAzhFwC24nwkAg7WfPQA+AD4DPY/AAziewC23shbAAzi0FMADOKbALbifCQCDtZ89ScADOMQhHsADOMnAAFsoAgACJ4Cnh8ADONfALbeyAD4CScADOQUhFsADORgUwAM5CsAtuJ8JAISTnzY+AT0cwAM5NS7AAEJXAgACh8ADOUzALbeyasADOVlgA5HFk00AwABaej9JwAM8rRbAAzzFFsADPLwUwAM8scAtt/gIAJ15ny+Ek582PgI9HMADPTMWwAM9Ki7AAEI7wABZrsAAQnoCAAIUwAM9QcAtuJ8JABbAAz1bFMADPVDALbf4CACdeZ8vAMAAjS89j8ADPXTALbeyKz4BPY/AAz2lwC23shzAAz3IFsADPb8uwABCO8AAWa7AAELZAgACFMADPd3ALbifCQBqwAM99mADn2rAALVAAMAAjUs/ScADPiIhHMADPiyHwAM+JsAtt7JIAQABKwDAAP91PgNOwAM+ScADPlMAAMAAQ4NgA58iARbAAz5bh8ADPlXALbeyg7WfPUnAAz5tIRzAAz6AFsADPnsUwAM+ccAturoKAIJrnzpIAQABasADPoNgA8AA/hvAAJxOAMAA/z8+AT0VwAM+pcAturoKHMADPuVqwAM+w2ADwACNdcABE3PAAEJqAgACh8ADPvbALbeyLgDAAI13P0nAAz8eIR7AAz8jwABbKAIAAieDJhbAAz87FMADPzHALbq6CgCDtZ89AD4CScADP2whFsADP3sUwAM/ccAturoKAISTnzY+AT0cwAM/mi7AAEJXAgACFsADP9AUwAM/xsAturoKAIO1nz1qwAM/3GADkcWTcgDAAFp6P0nAA0AeFsADQDYWwANALRTAA0AiwC23+AgAnXmfL4STnzY+AT0cwANAqBbAA0CfLsAAQjvAAFmuwABCegIAAhTAA0C2wC26ugoAFsADQMwUwANAwcAtt/gIAJ15ny8AwACNLz8/Pz2KwANBE8AttfkcwANBIi7AAEKYAgAChsADQTjALbefasADQVFgA8AAWwrAAROwAMAAWdk9iMADQWHALbV0FsADQXaCwANBacAttfmDtZ89Pz0cwANBkxbAA0GKLqodwABZpaMRAQABgMADQaLALbV0AMAAWTg9isADQbDALbX5HMADQb8uwABDGQIAAoLAA0HKwC21+SfAAEOFAMAAWmY9iMADQe/ALbV0FsADQgSCwANB98AttfmDtZ89PYvAA0ISwC22SRzAA0IQg8ADQhLALbZJZAEAAZQAwAD/QT0cwANCLRbAA0IkLqodwABZpaMTAwADhcADQj7ALbbkhsADQknALbefh8ADQlfALbeyAMAAWTk9jMADQmXALbZeFsADQnOAwANCbcAttXSd2Z9BTsADQqTAA0KzAACjIWADnyIBK0nAA0K/HsADQsPAAFsoAgACJ5p1gMADQtfALbV0AD4EPY3AA0LnwC29YYDAA0L4wC21dD2KwANDBcAttfkcwANDFC7AAEMZAgACgMADQx/ALbV0J8AAQ4YAwABaZj2IwANDP8AttXQWwANDVILAA0NHwC21+YO1nz09HMADQ2kWwANDYC6qHcAAWaWjqQEAAYXAA0N8wC29YQDAAFk6PgFJwANDoBzAA0Ovg8ADQ6TALbZJSAEAAZMAwAD/Pz4BPRzAA0O/LsAAQlcCAAKBwAND1sAttYtqwAND6GADkcXAAHLbAMAAWno/PRzAA0QUFsADRAsuqh3AAFmlox4DAAODwANEJMAttkmBwANEMMAttYuFwANEPMAt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wJKDtZ89AMAAWm9JwANODxzAA04jhsADThPALcGbgJcBAAGTAMAA/0s+AULAA040AD4FPRzAA05sLsAAQlcCAAIUwANOksAtwcUIABzAA060asADTp5dA5HRAWEDAWADwAEAAmADkbq1wYg9AQABJ5psAJHVAMAAWnpOwANO3MADTuUAAJ15YAOfIgEWwANO84HAA07nwC3AqZ15ny9DwANPByEcwANPGRbAA08UgMADTw7ALcCSg7WfPUgBAAEUwANPHMAtxg8KAADAAP91PgE9iMADTzTALcCSFsADT0KAwANPPMAtwJKDtZ89PRXAA09ewC3BxQgcwANPZS7AAEOMAQABFsADT3qAwANPdMAtwJKDtZ89AMAAWm9CwANPiwA9iMADT6rALcCSHMADT7IuwABDjQcAB4DAA0/OwC3AkhTAA0/VwC3BxQgAhcADT9vALcF1h8ADT+bALcGwhsADT/zALcGbg8ADUA3ALcEhhMADUB3ALcE0AMAAWnA9isADUDnALcEMHMADUDeCwANQOcAtwQxkAQABlADAAP9BPYjAA1BOwC3AkhbAA1BcgMADUFbALcCSg7WfPT0cwANQbxbAA1BmLqodwABZpaPQAwADgsADUH7ALcEMgcADUInALcCpgMADUJbALcCSAMAAWSlAHsADUKnAAFsoAgACJ4bigMADULfALcCSAMADUKnAA1C9AErAA1DEAYDAA1DLwC3AkgbAAFpvgQPAA1F0wANResADUg8AAMAAQ4wAAAABA8ADUYjAA1IPAAAAAQEBwANRjwAAAJKpYAOfIgAAYAOfIgE+AkPAA1GcIhbAA1GpgMADUaPALcfmnVSfMQAewANRucAAWygCAAInguoWwANRzYDAA1HHwC3H5oO1nz0APgE9iMADUdzALcfmFsADUe8WwANR6oDAA1HkwC3H5oO1nz2DtZ89SsADUf8BgMADUgbALcfmBsAAWnCBA8ADUlHAA1JXwANXggAAwABDjQAAAAEDwANScsADV4IAAAAHBwfAA1KAAAAAkqlgA58iAMADUpMAAACfvWADnyIAwANSpQAAAIKYYAOfIgDAA1K2AAAAo6FgA8AA/hsAwANSzAAAAKO/YAPAAP4bAMADUukAAACjy2ADnyIAwANTBQAAAKPMYAOfIgAAYAOfIgE+BT0cwANTJxbAA1MeLqodwABZ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JhbAA10xgMADXSvALc3gg7WfPQA+Az2MwANdQsAtz2CAwANdT8AtzeA9iMADXV7ALc3gHMADXWYuobQBAAGAwANddsAtzeAAwABaKEnAA12GHsADXYrAAFsoAgACJ4CnFsADXZ6AwANdmMAtzeCDtZ89AD4BPYjAA13ZwC3N4BbAA13ngMADXeHALc3gg7WfPT8/P07AA14QwANeGQAAnXlgA58iARbAA14rg8ADXhvALc6PnXmfL0nAA145HMADXkgWwANeQ4DAA149wC3N4IO1nz1IAQABhsADXkvALdC1AMAA/3U+AT2IwANeXcAtzeCGwANeZcAt0LU+AUnAA16UFsADXqGGwANemMAt0LWEk582PgE9iMADXwbALc3gHMADXxcWwANfDi7AAEI7wABZrsAAQnoCAAKAwANfJcAtzeCGwANfLMAt0LUAwACNLz4CPRzAA19OLsAAQkgCAAIWwANfgYDAA197wC3N4IO1nz1qwANfjV0DkdEBYQMBYAOfImADkbrAAJPdAMAAWns9iMADX6/ALc3ghsADX7fALdC1QB7AA1/bwABbKAIAAieDJoDAA1/pwC3N4ADAA1/bwANf7wA9F8ADX/YuwABAJ4XAA2AUwC3Pc8AAWaZJwANgHRzAA2AmgcADYCHALc3uSAEAAWrAA2AwYAPAAFqbwADGMgDAAP91PgE9HMADYEQuwABCVwIAAoLAA2BbwC3OdGrAA2BwYAORxYwsAMAAWnpJwANglxzAA2CggcADYJvALc3uSAEAAWrAA2CqYAPAAFqbwADGGwDAAP91PgE9HMADYL0uwABCZwEAAYDAA2DNwC3N4ADAAFoHPz0cwANg6BbAA2DfLqodwABZpaOxBQAFgsADYPvALc50gcADYQrALc3ug8ADYRDALc6PhMADYSHALc9gFsADYTOAwANhLcAtzeCDtZ89AMAAWW9KwANhPgGAwANhRcAtzeAGwABac4EDwANhnMADYaLAA2JpAADAAEMmAAAAAQPAA2G2wANiaQAAAAEBAcADYb0AAACSqWADnyIAAGADnyIBPgJAHsADYdHAAFsoAgACJ5pjFsADYeqAwANh5MAt0yqDtZ89AMADYdHAA2HvAErAA2I1ARbAA2JhHMADYjwuwABC4QIAAoDAA2JIwC3TKmrAA2JWYAPAAFqbwADGGwDAAFpyg7WfPQbAAFp0gQPAA2LGwANizMADZggAAMAAQyUAAAABA8ADYuLAA2YIAAAAAQEBwANi6QAAAJKpYAOfIgAAYAOfIgE+B07AA2L8wANjDAAAo+RgA58iAYjAA2MOwC3T0RbAA2McgMADYxbALdPRg7WfPUAewANjLcAAWygCAAInmm6BwANjQsAt0+gAwANjLcADY1IATsADY17AA2NoAACj22ADwAD8VQEqScADY3UWwANjhBbAA2N/gMADY3nALdPRg7WfPZ1UnzE+Az2IwANjmsAt09EcwANjoi7AAEJqAgACgMADY7PALdPRasADY8xgA8AAjcbAARPiAMAAWfM9isADY+PALdQ4KUnAA2P7IRbAA2QALsAAQkLAAFm0PgE9HMADZCYuwABCVwIAAoHAA2RKwC3T6GrAA2RhYAORxaMkAMAAWno/ScADZJMhFsADZJguwABCQMAAWbM+AT0cwANksy7AAEJXAgACgcADZNXALdPoIxzAA2T6FsADZPAuwABAKcAAWahIAQABasADZQdgA8AAjMbAARPJAMAA/3VqwANlKmADkcWjl2rAA2ViYAORxaMkAWADkcUAwABaej89iMADZYvALdPRHMADZZMuwABCZwEAAYDAA2WjwC3T0QDAAFoHPRzAA2W4FsADZa8uqh3AAFmlo+MDAAOCwANl0MAt1DiBwANl28At0+iAwANl7MAt09EAwABZbErAA2X4AYDAA2X/wC3T0QbAAFp1gQPAA2ZLwANmUcADZuwAAMAAQycAAAABA8ADZmTAA2bsAAAAAQEBwANmawAAAJKpYAOfIgAAYAOfIgE+BD2IwANmeMAt1fwWwANmhoDAA2aAwC3V/IO1nz1AHsADZpfAAFsoAgACJ5b5gMADZqXALdX8AMADZpfAA2arAD0cwANmuxbAA2ayLqodwABZpaOtAQABgMADZtDALdX8AMAAWW1KwANm3AGAwANm48At1fwGwABadoEDwANngMADZ4bAA2hlAADAAEOPAAAAAQPAA2eTwANoZQAAAAICAsADZ5oAAADAAEMEYAOfIgDAA2etAAAAkqlgA58iAABgA58iAT4DTsADZ8DAA2fFAACDtWADnyIBFsADZ9OAwANnx8At1rGDtZ89Q8ADZ90iIRzAA2fpgsADZ+TALdbYSAEAAYHAA2fswC3WwQDAAP91ACEcwANn+oLAA2f1wC3W2EgBAAGAwANn/cAt1rEAwAD/dT4CPYjAA2gSwC3WsYLAA2ggwC3W2D2KwANoLMAt1tgWwANoP4DAA2gzwC3WsYO1nz1KwANoTwGAwANoVsAt1rEGwABad4EDwANpMMADaTbAA21YAADAAEL5AAAAAQPAA2lVwANtWAAAAAgICMADaWMAAADAAELSYAOfIgDAA2l8AAAAwABA+WADnyIAwANplwAAAKFhYAOfIgDAA2mwAAAAoWJgA58iAMADacwAAAChY2ADnyIAwANp4wAAAKFkYAOfIgDAA2oAAAAAwABCpWADnyIAwANqIgAAAIJrYAPAAFr7AABgA58iAT4ITsADajfAA2pAAADAAEKNYAPAAI1YAR7AA2pCwACNVQMAA4bAA2pOwC3YCCkpAE7AA2pywANqfQAAwABDCWADnyIBHMADaogUwANqf8At2DEIAMAAQo4BAAGGwANqkcAt2AgAwACNYk7AA2qowANqrQAAg7VgA58iARbAA2q6FMADaq/ALdhfCQCDtZ89ScADasUewANqycAAWygCAAInhc4UwANq3sAt2JgKAAA+AT0VwANq7cAt2JgKFsADavkUwANq9MAt2JgKAIO1nz0+Aj0cwANrEi7AAEJXAgACFMADaynALdiYCgBqwANrNWADkcXAAGjYAMAAWno9HMADa2QWwANrWy7AAEI7wABZrsAAQpUCAAIUwANre8At2F8JAGrAA2uPYAOeZcAAqd4AwACNSkAiIiIWwANrshTAA2utwC3YmAoAndifNQAcwANrzhbAA2vFFMADa8DALdiYCgCdeZ8vSAEAASsAwAD/dQEewANr4sAAWygCAAInnhgUwANr8sAt2JgKAAABHsADbAPAAFsoAgACJ54GFMADbBPALdiYCgAAwANrrMADbBgATsADbCbAA2wsAACSqWADnyIBHMADbC4uwABC+AwADIDAA2xDwC3XsIHAA2xYwC3XwILAA2xvwC3X0IPAA2yEwC3X3oTAA2ycwC3X7IXAA2yvwC3X+obAA2zIwC3YCBTAA2zcwC3YMQgAKxbAA20HFMADbPzALdhfCQCDtZ89h8ADbRXALdgYKwDAAFoTPRzAA203FsADbS4uqh3AAFmloXAAAAAAwABZCErAA21IARTAA21PwC3Z4QsABsAAWniBA8ADbkPAA25JwAN2XAAAwABC+gAAAAEDwANuYcADdlwAAAAMDAzAA25vAAAAkqlgA58iAMADboIAAADAAELSYAOfIgDAA26bAAAAwABA+WADnyIAwANutgAAAKFhYAOfIgDAA27PAAAAoWJgA58iAMADbusAAAChY2ADnyIAwANvAgAAAKFkYAOfIgDAA28fAAAAwABCpWADnyIAwANvOgAAAMAAQo1gA8AAjVgAwANvUAAAAMAAQF1gA58iAMADb3AAAACCa2ADwABa+wDAA2+DAAAAwABC8WADwAEAAgAAYAOfIgE+Bk7AA2+pwANvrgAAg7VgA58iARbAA2+2gMADb7DALdrGg7WfPU7AA2/HwANvzQAAgJZgA8ABAAIBFsADb9QUwANvz8At24kMAJ3Zn0FJwANv5h7AA2/qwAD3/AIAAhTAA2/0wC3brQ0AJ5o6AD4BSsADcA0BHMADcBQuwABDkAEAARTAA3AuwC3biQwAAMAAWn9JwANwQB7AA3BEwAD3/AIAAhTAA3BOwC3brQ0AJ52NAD4BSsADcGYBHMADcG0uwABDkQEAARTAA3CGwC3biQwAAMAAWoBJwANwmB7AA3CcwAD3/AIAAhTAA3CmwC3brQ0AJ4aZAD4BSsADcMEBHMADcMguwABDkgEAARTAA3DkwC3biQwAAMAAWoFJwANw9iIWwANw/xTAA3D6wC3biQwAndifNQAcwANxGxbAA3ESFMADcQ3ALduJDACdeZ8vSAEAASsAwAD/dT4BSsADcSwBHMADcTMuwABC+QgACIHAA3FewC3a1ILAA3F1wC3a5IPAA3GOwC3a9ITAA3GlwC3bAoXAA3G/wC3bEIbAA3HUwC3bHofAA3HvwC3bLBTAA3IFwC3bXgoAAMAAWnc/ScADchciIiIhHMADciQUwANyG8At204JAEgBAAErAMAA/3UBHsADcjfAAPf8AgACFMADckHALdutDQAng9wAAR7AA3JYwAD3/AIAAhTAA3JiwC3brQ0AJ5oTAAEewANyesAA9/wCAAIUwANyhMAt260NACeaEgA+AT2IwANymcAt2sYcwANyoS7AAEL4DAAMgcADcrjALdrUgsADcs/ALdrkg8ADcujALdr0hMADcv/ALdsChcADcxnALdsQhsADcy7ALdseh8ADc0nALdssFMADc1/ALds8CAAUwANzc8At204JABbAA3ONgMADc4fALdrGg7WfPRTAA3OdwC3bXgoAFMADc63ALdtuCwAAwABaE0nAA3PTHMADc92AwANz18At2sZIAQABgcADc+DALdrUAMAA/3U+Az0cwAN0Qy7AAEJIAgACFMADdGPALduJDABqwAN0b10DkdEBYQMBYAOfImADkbqyQgDAAFp7PRzAA3ScFsADdJMuqh3AAFmlwABAowEAARTAA3SwwC3biQwAAMAAWQdJwAN0vSEewAN0wsAA9/wCAAIUwAN0zMAt260NACeG4gA+AT2IwAN1B8At2sYUwAN1D8At24kMAD8+AT2IwAN1MMAt2sYcwAN1OC7AAECiCgAKgcADdU/ALdrUgsADdWbALdrkg8ADdX/ALdr0hMADdZbALdsChcADdbDALdsQhsADdcXALdseh8ADdeDALdssFMADdfbALds8CAAWwAN2EIDAA3YKwC3axoO1nz0UwAN2IMAt214KAADAAFn4PRzAA3Y7FsADdjIuqh3AAFmloXAAAAAAwABZCErAA3ZMAYDAA3ZTwC3axgbAAFp5gQPAA3buwAN29MADeFUAAMAAQxUAAAABA8ADdwzAA3hVAAAAAQEBwAN3EwAAAJKpYAOfIgAAYAOfIgE+Bk7AA3cmwAN3KwAAg7VgA58iARbAA3czgMADdy3ALd/yg7WfPT0cwAN3PS7AAEJXAgACgcADd1TALeAJasADd2BgA5HFwACF/wDAAFp6PYnAA3d7wC3gCRzAA3eLFsADd4IuwABCO8AAWa7AAELZAgACgMADd6DALd/yasADd7FgA59qwAC8igDAAI1LPRzAA3fKFsADd8Euqh3AAFmlo60BAAGBwAN338At4AkAwABZbUPAA3frHMADd/IuwABC0AIAAieG4oHAA3gFwC3gCQDAAFn0PgI9iMADeBTALd/ygcADeBzALeAJPYnAA3gowC3gCRbAA3g1gMADeC/ALd/yg7WfPUrAA3hFAYDAA3hMwC3f8gbAAFp6gQPAA3hawAN4X8ADeT8AAMAAQlcAAAABA8ADeHXAA3k/AAAAAgICwAN4fAAAAJKpYAOfIgDAA3iLAAAAImADkboAAFwBPgI9iMADeNrALeFIHsADeOLAAFsrAQABgMADePnALeFIAD0cwAN5DhbAA3kFLqodwABZpaKFAwADgcADeSXALeFWgMADeS7ALeFIgMAD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SAEAATdgAMAA/z8+Ak7AA5ndwAOZ6gAAwABDpWADwAD+GwEcwAOZ9IPAA5nswC3y+4C7AgACJ55LHMADmgeFwAOaAcAt8zZkAQABlADAAP9BAMABABVJwAOaFSIhHMADmiaHwAOaGcAt9tpIAQABHMADmimUgcYAAAAAwAD+PgDAAP8/ABzAA5o8h8ADmi/ALfbaYwEAAYLAA5o+wC3y4ADAAP9JPgE9jcADmk/ALfM2h8ADmlfALfbaPz89jcADmn/ALfM2HMADmn2FwAOaf8At8zZkAQABlADAAP9BSsADmpABhMADmpfALfMhBsAAWomBA8ADmxPAA5sXwAOd0wAAwABDowAAAAEDwAObJ8ADndMAAAADAwPAA5svAAAAnNNgA8ABAAIAwAObPAAAACdgA8AA/hsAwAObRwAAAIKQYAPAAP4bAABgA8AA/hsBPghJwAObiCIcwAObkoHAA5uMwC339YFtAQABgsADm5XALfgEAMAA/0wBIR7AA5udwABbLgEAARzAA5uugMADm6bALfflhBABAAGBwAObucAt9/UAwAEAEAA+AUrAA5vKAYHAA5vRwC339T9DwAOb4iIcwAOb74HAA5vpwC339WMBAAGCwAOb8cAt+AQAwAD/SQAewAOb+MAAWy8BAAEcwAOcEIDAA5wIwC335YQQAQABgcADnBvALff1AMABABAAPgE9icADnC7ALff1HMADnCyBwAOcLsAt9/VkAQABlADAAP9BScADnGAiHMADnGqBwAOcZMAt9/WBbQEAAYLAA5xtwC34BADAAP9MASEcwAOcjhzAA5x8gMADnHTALfflhBABAAGBwAOch8At9/UAwAEAEEgBAAE3LgDAAP8/PgFKwAOcqQGBwAOcsMAt9/U/PYnAA5zDwC339RzAA5zBgcADnMPALff1ZAEAAZQAwAD/QUnAA5z/IhzAA50JgcADnQPALff1gW0BAAGCwAOdDMAt+AQAwAD/TAEhHsADnRTAAFsuAQABHMADnSWAwAOdHcAt9+WEEAEAAYHAA50wwC339QDAAQAQAD4BSsADnUEBgcADnUjALff1Pz2JwAOdW8At9/UcwAOdWYHAA51bwC339WQBAAGUAMAA/0FDwAOdZiIcwAOdc4HAA51twC339WMBAAGCwAOddcAt+AQAwAD/SQAewAOdfMAAWy8BAAEcwAOdlIDAA52MwC335YQQAQABgcADnZ/ALff1AMABABAAPgE9icADnbLALff1HMADnbCBwAOdssAt9/VkAQABlADAAP9BSsADncMBgcADncrALff1BsAAWoqBA8ADnqvAA56wwAOmWgAAwABDpgAAAAEDwAOeyMADploAAAACAgLAA57PAAAAkqlgA58iAMADntoAAADAAEIVYAPAAP4bAABgA8AA/FUBPgxOwAOe98ADnv0AAIKYYAOfIgGAwAOe/8At+s1OwAOfEMADnxsAAMAAQhhgA58iAStJwAOfJx7AA58rwABbKAIAAieaSIDAA587wC36zQA+Aj2LwAOfS8At+xOAwAOfWMAt+s09iMADn2XALfrNFsADn3OAwAOfbcAt+s2DtZ89P07AA5+JAAAAgylgA58iAE7AA5+RAAAAoVhgA58iAEnAA5+dIhbAA5+ngMADn6HALfrNnVSfMQAewAOft8AAWygCAAIngWoWwAOfy4DAA5/FwC36zYO1nz0APgM9jMADn9rALft4gMADn+PALfrNPY3AA5/wwC37hxbAA5//gMADn/nALfrNg7WfPT2IwAOgC8At+s0WwAOgGoXAA6ATwC37h4O1nz0/ScADoCoWwAOgNIDAA6AuwC36zZ3WnzA+Aj2IwAOgiMAt+s0cwAOgmRbAA6CQLsAAQjvAAFmuwABCWAEAATUAAAABAGADnyIBNQAAAAEAYAOfIgGFwAOgvsAt+4cjHMADoMWGAMAt/GdIAQABKwAAg8ADoMjALfsThgDALfxnAWADnyIjHMADoNOGAMAt/FxIAQABKwAAHMADoNYuobUBAAGAwAOg7cAt+s0AwABag4YAwC38XAFgA58iAMAAjUlJwAOg/BzAA6EGgsADoQDALfr4SAEAARbAA6EPgMADoQnALfrNg7WfPQDAAP91PgE9isADoR/ALfr4gMADoSfALfrNPz9OwAOhRsADoVYAAMAAQHBgA58iAStJwAOhYh7AA6FmwABbKAIAAieFzoDAA6F7wC36zQA+Aj2OwAOhi8At/SOAwAOhncAt+s09iMADoarALfrNFsADobiAwAOhssAt+s2DtZ89P0nAA6HIFsADodKAwAOhzMAt+s2CLJ84PgFJwAOh8xbAA6ICFsADof2AwAOh98At+s2DtZ89ndafMD4CPRzAA6ITLsAAQ6cGAAaCwAOi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LJjOACyaDQAsm3sALJycACydYAAsnq4ALKAnACyhpAAsogkALKQZACyk2wAspX8ALKYjACymxwAsuV4ALMpDACzSoQAs1hkALNdFACzYnAAs2vgALNwDACzecAAs37wALORGACztnQAs7zUALPDyACzz+AAs9S8ALP+wAC0BVQAtA18ALQRaAC0GRAAtBwIALQpCAC0K9gAtDH0ALRhGAC0ZWgAtHeIALSN4AC0ovwAtML0ALTRbAC01tgAtNnUALTbhAC037gAtOZcALTuJAC1B0AAtSigALUv+AC1PjQAtUUoALVOzAC1U1AAtVwYALVg0AC1ZTQAtXUYALV5AAC1fCgAtYOsALWPFAC1nUQAtaIYALWlWAC1qCwAtbKUALW17AC1uWwAtbscALXNkAC11BgAtdjUALXdsAC15XgAte28ALXwjAC1+swAtgsYALY1tAC2PJQAtkCMALZJ1AC2UvgAtmGYALZvJAC2ddgAtoKQALaJoAC2l8wAtp+kALarHAC2tXQAtrtMALbBuAC2ySgAttDYALbVIAC2+ogAtwGYALce6AC3IbQAtzAMALc20AC3S/gAt06UALdXQAC3WhQAt14QALdqaAC3fxgAt4RwALeG/AC3ilQAt40wALePSAC3lKwAt5rsALehLAC3pDwAt6agALeqCAC3sGgAt7MgALfCfAC3ylQAt97kALfqhAC4AAgAuAXIALgN+AAAA3gAAAAGBAwAuBwIAK76TAC4G/wAAAAEALgcCAAAAAAACBsAAWo/AAEOqgQQAAAKA/gAAjHsAAQEBiASBKgAAkjAAAQEBghYAAAABAsAAWpCBBIFQgVaDXgOtjQAAAWABwAD/aAAAAwTAAFqSgQSBu4HGCcAAQ6sAYAPAAP4bAATAAFqTgQSCHoInCZkVAGADwAD+GwAEwABalIEEgjqCQQkiAGADkboAAgXAAFqYgQSCRoJGgoEAAAADglGCgQAAAAMDA4JXAAAEwABDq2ADwAD+GwCCaQAABJkVYAPAAP4bAIJ5AAAEImADkboAAGADwABakAE/BAgBwABakoAAwC4HwggBwABak4EAwC4H0ggBwABalIIAwC4H4AkBgkbAAP9+AAAAAAXAAFqZgQSChoKGgw0AwABDrAADgpyDDQAAAAMDA4KjAAAAgphgA58iAIKwAAAAgpBgA58iAIK9AAAAImADkboAAGADwABakAE/AQoAgs7AAFqYAwADFoLZgILTwC4IQ4dxnyscgvQWgumBguXALghPh3GfK2QBAAEWgvqBgvbALghPndOfKgDAAP9BgoMFwC4IWwABBsAAWpaBBIMSgxmDXAAAIwAAAAEDgyGDXAAAAAAAAABgA8ABAAIBSoMnASSDXAYng4QWgysuwABDq8AAWpIng1sWg0MWgzsuIsAAWpQikb0ngK8Wg1cWg08uIsAAWpSI1pG+AAAuCLoALgkdAAAAAQAAAAGBBAAuCS0ALgdJAC4JKgAAAAEALgktAAAAAAACBsAAWprAAEOtgQUAAAAAAAABAsAAWpuBBYHrgfCCIwug4QAAAWABwAD/aAAABgTAAFqdgQWB8IHwCScAYAPAAP4bAATAAFqfgQWB8IHwCSjAAFqaAGADwAEAAgAEwABaoIEFgfCB8AYpAF0DwAD+vwFgA8AAWpsBagBdA8AA/r8BYAPAAFqbwAEUGgTAAFqhgQWB+4H7BoWDAGADwABamwFqAGADwABam8AAxjIEwABaooEFggmCCQaFWwBgA8AAWpsBagBgA8AAWpvAAMZJBMAAWqOBBYIYghgGggcAYAPAAFqbAWoAYAPAAFqbwADGGwEFwABap4EFgfCB8IIjAQAAA4HwgiMAAAACAgKB8AAABCdgA8AA/hsAgfAAAAQoYAPAAQACAABgA8AAWpsBPwMIAMAAWp2AAMAuClcIAMAAWp+BAMAuCmQJAADAAP9+AAAAAAEGwABapYEFgfCB8IIjAAAjAAAAAQOB8IIjAAAAAAAAAGADwAEAAgFKAAEPAC7AAFqfAAAuCp8ALgrQAAAAAQAAAAGBBQAuCuAALglcAC4K3QAAAAEALgrgAAAAAAACBsAAWqjAAEOugQYAAAAAAAABAsAAWq2BBoFQgVWBnwug4wAAAWABwAD/aAAABgTAAFqvgQaBVYFVCScAYAPAAP4bAATAAFqxgQaBVYFVCSjAAFqoAGADwAEAAgAEwABasoEGgVWBVQYpAF0DwAD+vwFgA8AAWq0BagBdA8AA/r8BYAPAAFqtwAEULgTAAFqzgQaBbYFtBsAAQ68AYAPAAFqtAWoAYAPAAFqtwADFHATAAFq0gQaBeoF6BsAAQ7AAYAPAAFqtAWoAYAPAAFqtwADFMwTAAFq1gQaBi4GLBsAAQ7EAYAPAAFqtAWoAYAPAAFqtwADFSgEFwABauYEGgVWBVYGfAQAAA4FVgZ8AAAACAgKBVQAABCdgA8AA/hsAgVUAAAQoYAPAAQACAABgA8AAWq0BPwMIAMAAWq+AAMAuDBAIAMAAWrGBAMAuDB0JAADAAP9+AAAAAAEGwABat4EGgVWBVYGfAAAjAAAAAQOBVYGfAAAAAAAAAGADwAEAAgFKAAEPAC7AAFqxAAAuDFgALgyJAAAAAQAAAwbAAFqqgQaBooGnghIAAcAAQWYAAAABA4HFghIAAAABAQGB2gAAAIKUYAPAAFqtAABgA8AA/FUBPgFKgeQBHIIJaoH/YAPAAFqtwADFHEgBAAGAggzALgy7AMAA/3UGwABaq4EGghWCGoKNAAHAAEFnAAAAAQOCPIKNAAAAAQEBglEAAACClGADwABarQAAYAPAAPxVAT4BSoJbARyChGqCdmADwABarcAAxTNIAQABgIKHwC4NGQDAAP91BsAAWqyBBoKQgpWDEgABwABBaAAAAAEDgryDEgAAAAEBAYLRAAAAgpRgA8AAWq0AAGADwAD8VQE+AUqC2wEcgwlqgvZgA8AAWq3AAMVKSAEAAYCDDMAuDXcAwAD/dQGBBgAuDbMALgsPAC4MlgAAAAEALgyZAC4M9wAuDVUALg2zAAAAAwACBsAAWroAgQcAAAaA2gAAnjkAAQECghadSIEUAACMewABAQOIBIjoi/qBZgAAoiYAAQEBnUmBpwAAwACNcAAAgc8AAMAAWaAAAQEBoOKB8gAAwABbJgABAQLAAEI0oOkAAAHAAFq8gQe5bsAAQjYAAQAAgnpgA8AA/2gBW14DAAEBAV8DAAAAAVcDwABavAFfAwAAYAORugABuZoAAAAAXwMAAAAAAQLAAFrAgQeDy4PRtM0DoOQAAAFgAcAA/2gAADIEwABawoEHhIKExwbAAEJrAGADwACNsAFqhKhgA8AAjbDAAQuBBMAAWsOBB4VNhYMGqS4AYAPAAI2LAWqFZmADwACNi8ABC9wEwABaxIEHhjqGiQbAAEJ7AGADwACNiwFqhl9gA8AAjYvAAQwZBMAAWsWBB4cPh0UGpJEAYAPAAI1/AWqHKGADwACNf8ABDFQEwABaxoEHh/6IQgbAAEKIAGADwACN2AFqiB5gA8AAjdjAAQ0LBMAAWseBB4j9iVEGwABCigBgA8AAjdgBaokgYAPAAI3YwAENSATAAFrIgQeKJ4qfBsAAQowAYAPAAI3YAWqKXGADwACN2MABDYUEwABayYEHixuLYQbAAEKPAGADwACN8gFqizxgA8AAjfLAAQ3JBMAAWsqBB4wIjEoGwABCqQBgA8AAjaYBaownYAPAAI2mwAEOXATAAFrLgQeNAY1XBsAAQqgAYAPAAI2rAWqNKmADwACNq8ABDh8EwABazIEHjgCOPgbAAEOCAGADwACNdQFqjh1gA8AAjXXAARNzBMAAWs2BB47NjwEGhnQAYAPAAI3LAWqO52ADwACNy8ABCwcEwABazoEHj42P2gbAAEJmAGADwACNywFqj7NgA8AAjcvAAQtEBMAAWs+BB5CNkMcGwABChQBgA8AAjcsBapCkYAPAAI3LwAEMkQTAAFrQgQeRd5HJBsAAQoYAYAPAAI3LAWqRmmADwACNy8ABDM4EwABa0YEHkkWShQbAAEKyAGADwACNkQFqkmNgA8AAjZHAAQ65BMAAWtKBB5MXk2EGwABA3QBgA8AAjZYBapM6YAPAAI2WwAEJnwTAAFrTgQeUVJSvBsAAQ7IAYAPAAI16AWqUhWADwACNesABDvYEwABa1IEHlWSVtAbAAEOzAGADwACN/gFqlYpgA8AAjf7AARRHBMAAWtWBB5Y1loIGwABDtABgA8AAjfcBapZZYAPAAI33wAEUhATAAFrWgQeW/pc6BsAAQ7UAYAPAAI33AWqXGmADwACN98ABFMEEwABa14EHl+uYQAbAAEO2AGADwACN9wFqmBNgA8AAjffAART+BMAAWtiBB5jMmVUGogkAYAPAAI3rAWqY8GADwACN68AAxAoEwABa2YEHmcuaDQaiCgBgA8AAjaEBapnqYAPAAI2hwADETQTAAFragQeam5sqBsAAQtoAYAPAAI3rAWqav2ADwACN68ABD+UEwABa24EHm7eb+wbAAEDeAGADwACN3wFqm9dgA8AAjd/AAQncBMAAWtyBB51oncUGwABC/ABgA8AAjd8Bap2UYAPAAI3fwAEQogTAAFrdgQefIp9uBsAAQ7cAYAPAAI3fAWqfPWADwACN38ABEKIEwABa3oEHoBCgYgbAAEMLAGADwACNuwFqoDdgA8AAjbvAARD5BMAAWt+BB6GqohUGwABDuABgA8AAjbsBaqHdYAPAAI27wAEVOwTAAFrggQeipaLvBsAAQw4AYAPAAI2EAWqiyGADwACNhMABETYEwABa4YEHo7SkFwbAAEMPAGADwACNhAFqo+NgA8AAjYTAARFzBMAAWuKBB6TppXsGwABDEABgA8AAjYQBaqUqYAPAAI2EwAERsATAAFrjgQemF6ZZBsAAQy4AYAPAAI3BAWqmNmADwACNwcABEe0EwABa5IEHpvOnLwbAAENjAGADwACNtQFqpw9gA8AAjbXAARJTBMAAWuWBB6f/qFQGwABDZABgA8AAjbUBaqgnYAPAAI21wAESkATAAFrmgQeo3akTBoJvAGADwACNmwFqqPZgA8AAjZvAARAoBMAAWueBB6mOqd0GwABC5ABgA8AAjZsBaqmzYAPAAI2bwAEQZQTAAFrogQeqkarfBsAAQ2YAYAPAAI3mAWqqtmADwACN5sABEs0EwABa6YEHq2yrvgbAAEN1AGADwACN0wFqq5NgA8AAjdPAARM2BMAAWuqBB6xcrJoGwABDjgBgA8AAjcYBaqx5YAPAAI3GwAET4gTAAFrsgQesrKyxCSjAAFq6AGADwAEAAgAEwABa7YEHrRmtJgmiCABgA8AA/FUABMAAWu6BB62Tra8JwABDuQBgA8AA/FUABMAAWu+BB64CrgoJwABDugBgA8AA/FUABMAAWvCBB65Qrl4JwABDuwBgA8AA/FUABMAAWvGBB66/rs8JogYAYAPAAPxVAATAAFrygQevKa9DCcAAQ7wAYAPAAPxVAATAAFrzgQevwa/cCaINAGADwAD8VQAEwABa9IEHsA2wHQnAAELPAF0DkdEBXgMAAQEBYAOfIgABVwPAAFq8AWADnyJgA5G6AAEFwABa+YEHsCKwKLL9AQAAA7A5sv0AAAAJAQGwPwAABChgA8ABAAIACLBSAAAEoghgA8AA/FUBarBhYAPAAPxVALBzAAAEwABDuWADwAD8VQFqsJFgA8AA/FUAsKMAAATAAEO6YAPAAPxVAWqwrWADwAD8VQCwvwAABMAAQ7tgA8AA/FUBarDPYAPAAPxVALDhAAAEogZgA8AA/FUBarDzYAPAAPxVALEFAAAEwABDvGADwAD8VQFqsSFgA8AA/FV3sTIAAACiDWADwAD8VQFqAGADwAD/JXmxWgAABMAAQs9dA5HRAV4DAAEBAWADnyIAAVcDwABavAFgA58iYAORugFqsWxdA5HRAWEDAWADnyJgA5G6tDVgA8AAWsABPwoIAcAAWuyAAMAuFYgIAcAAWu2BAMAuFZYIAcAAWu6CAMAuFa4IAcAAWu+DAMAuFcgIAcAAWvCEAMAuFeIIAcAAWvGFAMAuFfwIAcAAWvKGAMAuFhQIAcAAWvQUAMAuFkUIAAgAwABa8zUAAAABAGADwAD8VQGHsqHALhYuIxyyvRQAwC4W9gkASAEAASsAACIigbLRwC4VlgGEsuLALhXiAYOy9MAuFcgUAMAuFvYJAAFgA8AA/FUJAbAowAD/fgAAAAACBsAAWvaBB7MCswmzHAAAIwAAAAEDsxGzHAAAAAAAAABgA8ABAAIBSrMXARazFy4owABausAAWuwGwABa94EHs9qz4LTLAADAAEJqAAAAAQOz8LTLAAAAAgICs/cAAACSqWADnyIAtAUAAAChr2ADwABZowAAYAOfIgE+AkAhHLQqFrQlFrQggLQawC4Xq4O1nz2Ca586SAEAAWq0LWADwAD+G8AAnE4AwAD/P7QatD0ASrS8ASsAAC4XUQAuF4kALhgHAAAAAgAAAgbAAFq+gQe1S7VQt7gAAcAAQhwAAAABA7Vot7gAAAABAQG1bwAAAIO1YAOfIgAAYAPAAPxVAUq1fAEiIiIiIiIiIiIiIiIiIiIiIha1gYC1fMAuGD2dVJ8xASIWtZqAtZXALhg9nc6fMgAhHrWowABavwEAAYC1wMAuGD0AARy11xa10oC1zcAuGD2ClJ9CSAEAAWq15GADn2rAALFYAMAA/3UBHLX8FrX3gLXywC4YPYKUn0JIAQABarYJYAOfasAAuHcAwAD/dQEcth8WthqAthXALhg9gpSfQkgBAAFqtixgA59qwACxhwDAAP91ARy2SRa2RIC2P8AuGD2ClJ9CSAEAAWq2VmADn2rAALG2AMAA/3UBHLZyFrZtgLZowC4YPYKUn0JIAQABarZ/YAOfasAAseUAwAD/dQEctpQWto+AtorALhg9gpSfQkgBAAFqtqFgA59qwACycgDAAP91AR62r8AAWygCAAInmhKAtr3ALhg9AAEetsrAAFsoAgACJ4PcgLbYwC4YPQABHrblwABbKAIAAieZ8oC288AuGD0AAR63AMAAWygCAAInS4C3D8AuGD0AAR63HMAAWygCAAInY4C3KsAuGD0AAR63N8AAWygCAAInmkmAt0XALhg9AAEet1LAAFsoAgACJ4GNgLdgwC4YPQABHrdtwABbKAIAAieEkoC3e8AuGD0AAR63iMAAWygCAAInnjaAt5fALhg9AAEet6TAAFsoAgACJ54sgLezwC4YPQAGwABav4EHuDi4PbkaAAHAAEO9AAAAAQO4VLkaAAAAAQEBuFsAAACSqWADnyIAAGADwAD8VQFKuGUBHrhlwABbMgIAAoC4csAuGnhquHldA8AA/r8BYAPAAQACwAEVcwABgQcALhq2AC4OggAuGBgAAAABAC4YGwAuGlYALhq2AAAAAgACBsAAWvoAgQgAAAAAAAABAsAAWvuBCIDZgN6B5QutjgAAAWABwAD/aAAABwTAAFr9gQiA3oDeCScAYAPAAP4bAATAAFr/gQiA3oDeCSjAAFr6AGADwAEAAgAEwABbAIEIgN6A3gYpAF0DwAD+vwFgA8AAWvsBagBdA8AA/r8BYAPAAFr7wAEVtwTAAFsBgQiBEYERBsAAQ74AYAPAAFr7AWoAYAPAAFr7wAEPtATAAFsCgQiBYoFiBoTXAGADwABa+wFqAGADwABa+8ABDzMEwABbA4EIgbCBsAaE1QBgA8AAWvsBagBgA8AAWvvAAQ93BMAAWwSBCIHagdoGhQQAYAPAAFr7AWoAYAPAAFr7wAEKNQEFwABbCIEIgN6A3oHlAQAAA4DegeUAAAACAgKA3gAABCdgA8AA/hsAgN4AAAQoYAPAAQACAABgA8AAWvsBPwMIAMAAWv2AAMAuHAkIAMAAWv+BAMAuHBYJAADAAP9+AAAAAAEGwABbBoEIgN6A3oHlAAAjAAAAAQOA3oHlAAAAAAAAAGADwAEAAgFKAAEPAC7AAFr/AAAuHFEALhyCAAAAAQAAAAGBCAAuHJIALhrqAC4cjwAAAAEALhySAAAAAAACBsAAWwnAAEO/gQkAAAAAAAABAsAAWwqBCYD9gQKDnQug5QAAAWABwAD/aAAADwTAAFsMgQmBAoECCScAYAPAAP4bAATAAFsOgQmBAoECCSjAAFsJAGADwAEAAgAEwABbD4EJgQKBAgYpAF0DwAD+vwFgA8AAWwoBagBdA8AA/r8BYAPAAFsKwAEWHwTAAFsQgQmBOYE5BoZaAGADwABbCgFqAGADwABbCsABE7AEwABbEYEJgVOBUwaFWgBgA8AAWwoBagBgA8AAWwrAAQhvBMAAWxKBCYF4gXgGwABAVgBgA8AAWwoBagBgA8AAWwrAAQ4GBMAAWxOBCYHLgcsGwABDwwBgA8AAWwoBagBgA8AAWwrAAQ6gBMAAWxSBCYIcghwGwABDxABgA8AAWwoBagBgA8AAWwrAAMUEBMAAWxWBCYJQglAGtcAAYAPAAFsKAWoAYAPAAFsKwAEQ3wTAAFsWgQmCmYKZBsAAQ8UAYAPAAFsKAWoAYAPAAFsKwAEIpATAAFsXgQmCz4LPBsAAQ8YAYAPAAFsKAWoAYAPAAFsKwAEIiATAAFsYgQmC+oL6BsAAQF4AYAPAAFsKAWoAYAPAAFsKwAEIOQTAAFsZgQmDMYMxBsAAQ8cAYAPAAFsKAWoAYAPAAFsKwAEV1ATAAFsagQmDZYNlBsAAQ8gAYAPAAFsKAWoAYAPAAFsKwAEV7gTAAFsbgQmDjoOOBsAAQ8kAYAPAAFsKAWoAYAPAAFsKwAEWCAEFwABbH4EJgQKBAoOdAQAAA4ECg50AAAACAgKBAgAABCdgA8AA/hsAgQIAAAQoYAPAAQACAABgA8AAWwoBPwMIAMAAWwyAAMAuHwAIAMAAWw6BAMAuHw0JAADAAP9+AAAAAAEGwABbHYEJgQKBAoOdAAAjAAAAAQOBAoOdAAAAAAAAAGADwAEAAgFKAAEPAC7AAFsOAAAuH0gALh95AAAAAQAAAAGBCQAuH4kALhzBAC4fhgAAAAEALh+JAAAAAAACBsAAWyDAAEPKgQoAAASBAgAAnjkAAQEBghaBMQAAwABa+gABAQGtjoFnAADAAFRqAAEBAaoGgaIAAMAAWHIAAQEBrYwAAAABAsAAWyGBCoI6gkCDWAOtjwAAAWABwABUawAAAAEFwABbJYEKgm2CbYKgAAAAA4J7gqAAAAABAQGChQAAAKodYAPAAFhzAABgA8AAWyEBPwEJAIKRwABUdgEAAYCCl8AuICYAAQbAAFsjgQqCpYK3g1YAAMAAQroBaoKmYAPAAP9oAgAAAQOC14NWAAAAAwMDgukAAACSqWADnyIAgwAAAACCa2ADwABa+wCDDQAAAMAAQvFgA8ABAAIAAGADnyIBSoMwARyDMC7AAELwAQABgINQwC4gfgDAAFoMAAAuIFIALiDJAAAAAQAAAAGBCgAuINkALh/uAC4g1gAAAAEALiDZAAAAAAACBsAAWybAAEPLgQsAAASA9gAAgi4AAQEBhFSBJwAAjHsAAQEBh/OBVAAAkjAAAQEBghaBegAAnjkAAQEEnW+d0JGonUgAAAAAAAAVBsAAWyiBC4IYgh2CcQABoOkAAAABA4IlgnEAAAACAgKCLQAAAICWYAPAAQACAII6AAAAkqlgA58iAABgA8AA/FUBPgFKgkUBHoJMwAD3/AIAAoCCVsAuIWEWgmOBgl3ALiFvndmfQQAGwABbKYELgvWC+4QYAAHAAEPMAAAAAQODE4QYAAAAAQEBgx8AAACFzWADnk0AAGADnyIBPgZOgy+DOAAAnXBgA58iARaDP4CDOsAuIcudcJ5PSYNLHINYgYNPwC4h4EgBAAErAMAA/3U+AUqDZwErP06DgIOGAACSqWADnyIBgIOIwC4hy06DloObAACDtWADnyIBFoOjgoOdwC4iG4O1nz1Dg6siIRyDt4ODssAuIjBIAQABgYO6wC4h4ADAAP91ACEcg8uDg8bALiIwSAEAARaD04ODzsAuIjCDtZ89AMAA/3U+Aj2Kg9/ALiIbg4PnwC4iMD2Lg/HALiIwFoP+goP4wC4iG4O1nz1KhAoBgoQRwC4iGwbAAFsqgQuEjYSThXkAAcAAQjAAAAABA4SxhXkAAAABAQGEuAAAAJKpYAOfIgAAYAOfIgE+AkFDhMMiFoTQgITKwC4i4YSTnzYAHITsFoTlgITfwC4i4WGfO0gBAAGTAMAA/z8+A06E/oUHAACdXmADnyIBFoUPgIUJwC4i4Z3Vny1JhSQchTGBhSjALiMmSAEAASsAwAD/dT4BQoVCAD89iIVTwC4i4YGFW8AuIyZKhWsBgIVywC4i4QbAAFsrgQuGPoZEhtkAAcAAQi8AAAABA4ZahtkAAAABAQGGYQAAAJKpYAOfIgAAYAOfIgE+AkOGbCIiFoZ5gIZzwC4jm4STnzYAHIaVFoaOgIaIwC4jm2GfO0gBAAGTAMAA/z8AIRaGpICGnsAuI5ud1p8wPgE9iIaxwC4jmxaGv4CGucAuI5uDtZ89SobLAYCG0sAuI5sGwABbLIELh0SHSIehAAGg6AAAAAEDh1aHoQAAAAEBAYddAAAAkqlgA58iAABgA8AA/hsBPgFKh2gBIxyHdYCHb8AuJDBIAQABKwDAAP91aoeIYAPAAP4bgZ4Wh5mAh5PALiQwg2KfPgFgA8AA/hsGwABbLYELh6SHqYfRAAGWbgAAAAEDh7CH0QAAAAEBAYe1AAAAgPVgA8AA/hsAAGADwAD8VQFKh7sBIhyHvYCHu8AuJJ+BbQEAATcwAMAA/0wAHIfKgIfIwC4kn4FrAQABNzkAwAD/SgbAAFsugQuH1IfZiBwAAcAAQjEAAAABA4fhiBwAAAABAQGH5gAAAID1YAPAAP4bAABgA8AA/FUBSofsASIiHIfugIfswC4lCYFtAQABN0EAwAD/TAAch/uAh/nALiUJgWsBAAE3WgDAAP9KASIciAiAiAbALiUJgW0BAAE3YQDAAP9MAByIFYCIE8AuJQmBawEAATd6AMAA/0oGwABbL4ELiB+IJIhXAAHAAEIyAAAAAQOIM4hXAAAAAQEBiDgAAACA9WADwAD+GwAAYAPAAPxVAUqIPgEiHog+wABbLgEAAYCIR8AuJaMAAR6ITcAAWy0BAAGAiFXALiWjAAbAAFswgQuIWohfiKMAAcAAQjUAAAABA4hriKMAAAABAQGIcAAAAID1YAPAAP4bAABgA8AA/FUBSoh2ASIiIhyIeICIdsAuJgVIAQABNyAAwAD/PwEciIWAiIPALiYFSAEAATcKAMAA/z8BHIiRgIiPwC4mBUgBAAE3DQDAAP8/ARyInYCIm8AuJgVIAQABNwkAwAD/PwbAAFsxgQuI6ojviZkAAcAAQjMAAAABA4j2iZkAAAACAgKI/QAAAJKpYAOfIgCJFQAAACldA8AA/n0BYAPAAQACAABgA8AA/FUBPgJGiSGJQ4ktAAAAwABDzWADwAEAAgCBiTvALianPgFJiUkeiU3AAFsoAgACgolWwC4myoCJYsAuJpsAPgFKiXIBKT9KiYsBKgbAAFsygQuJ6onviqQAAcAAQjQAAAABA4n7iqQAAAACAgKKAgAAAJKpYAOfIgCKGgAAACldA8AA/n0BYAPAAQACAABgA8AA/FUBPgJGiiaKSIoyAAAAwABDzWADwAEAAgCBikDALic6PgFJik4eilLAAFsoAgACgopbwC4nXYCKZ8AuJy4APgFKincBKT9KipABFoqdgIqXwC4nLp3WnzAGwABbM4ELiwaLCotaAAGg5gAAAAEDixiLWgAAAAEBAYsfAAAAkqlgA58iAABgA8AA/hsBPgFKiyoBIxyLN4CLMcAuJ8xIAQABKwDAAP91aotBYAPAAP4bFRaLUoCLTMAuJ8xhnzsBYAPAAP4bBsAAWzSBC4wcjCCM2gABoOcAAAABA4wsjNoAAAACAgKMMwAAAIKYYAOfIgCMQAAAAIKQYAOfIgAAYAPAAP4bAT4DSYxJHIxTgIxNwC4oOUgBAAErAMAA/3VKjFwBHoxjwABbMwEAAYGMcsAuKEUAP0mMehyMgoGMfsAuKEVIAQABKwDAAP91SoyLAR6MksAAWzMBAAGAjKHALig5AD9KjKsBHIzKHIy9Foy2gYyywC4oRYNinz5kAQABFozDgYy/wC4oRWGfOwDAAP9BgY0BAAEWjNKAjMzALig5g2KfPgDAAP9CBsAAWzWBC4zdjOOOzgABwABDzgAAAAEDjO+OzgAAAAEBAYz2AAAAkqlgA58iAABgA58iAT4FPYiNAcAuKR8WjQ+AjQnALikfg7WfPUAejR7AAFsoAgACJ4OEgI0swC4pHwCNHo0yAE6NPY1CAACDtWADnyIBFo1KgI1EwC4pH4O1nz1JjVIWjVuBjVbALillnVSfMT4EPYiNb8AuKR+BjXfALillPYmNgcAuKWUWjY6AjYjALikfg7WfPUONmB6Nn8AAWygCAAIngWqBja3ALillAD4DPYiNvMAuKR+BjcTALillPYmN0MAuKWUWjd2AjdfALikfg7WfPUmN6RaN8oGN7cAuKWWdVJ8xPgI9iI4KwC4pH4GOEsAuKWU9iY4gwC4pZRaOLYCOJ8AuKR+DtZ89P0mORSIejknAAFsoAgACJ4PcgY5XwC4pZQAAIRaObxaOZoGOYcAuKWWdeZ8vhJOfNj4CPYiOhMAuKR8WjpGBjozALillnXmfLz2JjqHALillFo6ugI6owC4pH4O1nz0/P0qOwAGAjsfALikfBsAAWzaBC48zjzmQjgABwABDzwAAAAEDj0KQjgAAAAEBAY9JAAAAkqlgA58iAABgA58iAT4CQB6PW8AAWygCAAIngW2Aj2rALiq9AI9bj3AASo91ATWPgAAAAQBgA57FAR+PgJ7xAwADao+dYAOfasAAtzcWj6eAj6HALiq9h3GfKyaPuQEWj7mAj7PALiq9nU+fP2ADnlgANQAAAAEAWwEcj9KBj9DALirxndoBAAE1j94AAAEAYAOexQEfj96e8QIAAmqP9GADn2rAALZmHJAJFo/+gI/4wC4qvYdxnytkAQABlADAAP9BADUAAAABAFsBF5B6gpB4wC4rTIO1FpCHgJCBwC4qvYO1nz2eyoIAwC4rTACe6oEAwC4q8QbAAFs3gQuQ85D/klQAAcAAQ9AAAAABA5EIklQAAAABAQGRDwAAAJKpYAOfIgAAYAOexQE+AkAekSHAAFsoAgACJ4PBgJEwwC4r2wCRIZE2AEqROwE1kUYAAAEAYAOexQEfkUae8QMAA2qRY2ADn2rAALc3FpFtgJFnwC4r24dxnysmkX8BFpF/gJF5wC4r251Pnz9gA55YADUAAAABAFsBHJGYgZGWwC4sD53aAQABNZGkAAABAGADnsUBH5GknvECAAJqkbpgA59qwAC3NxyRzxaRxICRvsAuK9uHcZ8rZAEAAZQAwAD/QQA1AAAAAQBbAReSQIKSPsAuLGqDtRaSTYCSR8AuK9uDtZ89nsqCAMAuLGoAnuqBAMAuLA8GwABbOIELkrySwpRlAAHAAEPRAAAAAQOSzZRlAAAAAQEBktQAAACSqWADnyIAAGADnyIBPgJAHpLmwABbKAIAAieeHYCS9sAuLPkAkuaS/ABKkwEBNZMMAAABAGADnsUBH5MMnvEDAANqkylgA59qwAC3NxaTM4CTLcAuLPmHcZ8rJpNFARaTRYCTP8AuLPmdT58/YAOeWAA1AAAAAQBbARyTXoGTXMAuLS2d2gEAATWTagAAAQBgA57FAR+Tap7xAgACapOAYAOfasAAtzcck5UWk4qAk4TALiz5h3GfK2QBAAGUAMAA/0EANQAAAAEAWwEck6KCk6DALi2IndoBAAE1k64AAAEAYAOexQEfk66e8QIAAmqTxGADn2rAALZmHJPZFpPOgJPIwC4s+YdxnytkAQABlQDAAP9BADUAAAABAFsBF5RQg5ROwC4t2oO1FpRdgJRXwC4s+YO1nz2eyoMAwC4t2gCe6oIAwC4tiACe6oEAwC4tLQbAAFs5gQuU45TplkoAAcAAQ9IAAAABA5T6lkoAAAABAQGVAQAAAJKpYAOfIgAAYAOfIgE+AkAelRPAAFsoAgACJ54dgJUjwC4ucgCVE5UpAEqVLgE1lTkAAAEAYAOexQEflTme8QMAA2qVVmADn2rAALc3FpVggJVawC4ucodxnysmlXIBFpVygJVswC4ucp1Pnz9gA55YADUAAAABAFsBHJWLgZWJwC4upp3aAQABNZWXAAABAGADnsUBH5WXnvECAAJqla1gA59qwAC3aRyVxRaVuoCVtMAuLnKHcZ8rZAEAAZQAwAD/QQA1AAAAAQBbAReWNoKWNMAuLwGDtRaWQ4CWPcAuLnKDtZ89nsqCAMAuLwEAnuqBAMAuLqYGwABbOoELlsiWzpgvAAHAAEPTAAAAAQOW35gvAAAAAQEBluYAAACSqWADnyIAAGADnyIBPgJAHpb4wABbKAIAAieWCoCXCMAuL5AAlviXDgBKlxMBNZceAAABAGADnsUBH5cenvEDAANqlztgA59qwAC3NxaXRYCXP8AuL5CHcZ8rJpdXARaXV4CXUcAuL5CdT58/YAOeWAA1AAAAAQBbARyXcIGXbsAuL8Sd2gEAATWXfAAAAQBgA57FAR+XfJ7xAgACapeSYAOfasAAt50cl6oWl5+Al5nALi+Qh3GfK2QBAAGUAMAA/0EANQAAAAEAWwEXmBuCmBnALjAfg7UWmCiAmCLALi+Qg7WfPZ7KggDALjAfAJ7qgQDALi/EBsAAWzuBC5ivmLWaHAABwABD1AAAAAEDmMiaHAAAAAEBAZjPAAAAkqlgA58iAABgA58iAT4CQB6Y4cAAWygCAAInniCAmPLALjCuAJjhmPgASpj9ATWZCAAAAQBgA57FAR+ZCJ7xAwADapklYAOfasAAtzcWmS+AmSnALjCuh3GfKyaZQQEWmUGAmTvALjCunU+fP2ADnlgANQAAAAEAWwEcmVqBmVjALjDindoBAAE1mWYAAAEAYAOexQEfmWae8QIAAmqZfGADn2rAALfWHJmXFpmMgJmGwC4wrodxnytkAQABlADAAP9BADUAAAABAFsBF5oIgpoGwC4xPYO1FpoVgJoPwC4wroO1nz2eyoIAwC4xPQCe6oEAwC4w4gbAAFs8gQuah5qNm1UAAcAAQ9UAAAABA5qYm1UAAAABAQGanwAAAIO1YAOfIgAAYAOfIgE+AUqaqQE1mrQAAAEAYAOfGAEfmrSfIQIAAmqazWADn2rAALc3FprWgJrRwC4xzIdxnysANQAAAAEAWwEXm0iBm0bALjHlg7WAm0/ALjHMnsqBAMAuMeUBgQsALjI1AC4hPgAAAAAALiFBAC4hqQAuIr8ALiN5AC4kEAAuJH8ALiTnAC4lgQAuJeMALiZ5AC4nDAAuJ6wALigZAC4o/QAuKpsALiu5AC4s1wAuLlAALi9uAC4wjAAuMaoALjI1AAAAFQACBsAAWz3AAEPWgQwAAAiA+QAAgi4AAQEEhXmFg4VqhFSBVQAAjHsAAQEGh9OCKYgEibmPoo40gjUAALBMAAEBBa2MoOWg4qDnoOiCkwAAwABaugABAQGg5ILXAACdhwABAQSVTp0Pg2WdJ4MzAACwVgABAQGg74NgAACSMAABAQGCFoOGAACwrAAAAAAABgLAAFs+gQyDooOnhqYLoPQAAAFgAcAA/2gAAC4EwABbQIEMg6eDpwknAGADwAD+GwAEwABbQoEMg6eDpwkowABbPQBgA8ABAAIABMAAW0OBDIOng6cGKQBdA8AA/r8BYAPAAFs+AWoAXQPAAP6/AWADwABbPsABGEIEwABbRIEMg7WDtQaFtQBgA8AAWz4BagBgA8AAWz7AAMNiBMAAW0WBDIPCg8IGwABD6QBgA8AAWz4BagBgA8AAWz7AARZcBMAAW0aBDIPIg8gGwABD6gBgA8AAWz4BagBgA8AAWz7AAMX5BMAAW0eBDIPWg9YGhiwAYAPAAFs+AWoAYAPAAFs+wADDLQTAAFtIgQyD34PfBsAAQ+sAYAPAAFs+AWoAYAPAAFs+wADlLATAAFtJgQyD7oPuBsAAQ+wAYAPAAFs+AWoAYAPAAFs+wAEWdQTAAFtKgQyEAYQBBsAAQH0AYAPAAFs+AWoAYAPAAFs+wAEJQgTAAFtLgQyEEIQQBsAAQ+0AYAPAAFs+AWoAYAPAAFs+wAEWjwTAAFtMgQyEHIQcBsAAQG4AYAPAAFs+AWoAYAPAAFs+wAEJaQTAAFtNgQyEL4QvBsAAQ+4AYAPAAFs+AWoAYAPAAFs+wAEWqwTAAFtOgQyEToROBsAAQ+8AYAPAAFs+AWoAYAPAAFs+wAEWxQTAAFtPgQyEcYRxBsAAQ/AAYAPAAFs+AWoAYAPAAFs+wAEW3wTAAFtQgQyEjISMBsAAQ/EAYAPAAFs+AWoAYAPAAFs+wAEW+wTAAFtRgQyEwoTCBsAAQ/IAYAPAAFs+AWoAYAPAAFs+wADlRATAAFtSgQyE1ITUBsAAQ/MAYAPAAFs+AWoAYAPAAFs+wAEJgwTAAFtTgQyE4ITgBsAAQ/QAYAPAAFs+AWoAYAPAAFs+wAEXFwTAAFtUgQyE+IT4BoWDAGADwABbPgFqAGADwABbPsAAxNgEwABbVYEMhQaFBgbAAEP1AGADwABbPgFqAGADwABbPsABFzMEwABbVoEMhReFFwaFXgBgA8AAWz4BagBgA8AAWz7AAMSZBMAAW1eBDIUrhSsGowwAYAPAAFs+AWoAYAPAAFs+wADlfwTAAFtYgQyFP4U/BsAAQ/YAYAPAAFs+AWoAYAPAAFs+wADGhwTAAFtZgQyFT4VPBsAAQ/cAYAPAAFs+AWoAYAPAAFs+wAEXTwTAAFtagQyFaYVpBsAAQ/gAYAPAAFs+AWoAYAPAAFs+wAEXawTAAFtbgQyFgoWCBq1DAGADwABbPgFqAGADwABbPsAAxXwEwABbXIEMhZCFkAbAAEB1AGADwABbPgFqAGADwABbPsABChkEwABbXYEMhaKFogahggBgA8AAWz4BagBgA8AAWz7AAReHBMAAW16BDIWyhbIGwABD+QBgA8AAWz4BagBgA8AAWz7AAMZgBMAAW1+BDIW8hbwGoVMAYAPAAFs+AWoAYAPAAFs+wADDCATAAFtggQyFyIXIBq3WAGADwABbPgFqAGADwABbPsAA5dIEwABbYYEMhdWF1QaGcgBgA8AAWz4BagBgA8AAWz7AAOYCBMAAW2KBDIXdhd0GwABD+gBgA8AAWz4BagBgA8AAWz7AARejBMAAW2OBDIX2hfYGwABD+wBgA8AAWz4BagBgA8AAWz7AAQhTBMAAW2SBDIYAhgAGhfgAYAPAAFs+AWoAYAPAAFs+wAEXvwTAAFtlgQyGEYYRBsAAQ/wAYAPAAFs+AWoAYAPAAFs+wADCzATAAFtmgQyGIIYgBoIWAGADwABbPgFqAGADwABbPsAA5qoEwABbZ4EMhimGKQaE0wBgA8AAWz4BagBgA8AAWz7AAMSzBMAAW2iBDIYxhjEGo2YAYAPAAFs+AWoAYAPAAFs+wADDiATAAFtpgQyGQoZCBsAAQ/0AYAPAAFs+AWoAYAPAAFs+wAEKWwTAAFtqgQyGVYZVBsAAQEoAYAPAAFs+AWoAYAPAAFs+wAEX2QTAAFtrgQyGYYZhBqPwAGADwABbPgFqAGADwABbPsABF/UEwABbbIEMhnGGcQaj8gBgA8AAWz4BagBgA8AAWz7AAMXfBMAAW22BDIaChoIGwABD/gBgA8AAWz4BagBgA8AAWz7AARgRBMAAW26BDIaahpoGwABD/wBgA8AAWz4BagBgA8AAWz7AARgrAQXAAFtygQyDp4OnhqYBAAADg6eGpgAAAAICAoOnAAAEJ2ADwAD+GwCDpwAABChgA8ABAAIAAGADwABbPgE/AwgAwABbQIAAwC45sQgAwABbQoEAwC45vgkAAMAA/34AAAAAAQbAAFtwgQyDp4OnhqYAACMAAAABA4OnhqYAAAAAAAAAYAPAAQACAUoAAQ8ALsAAW0IAAC45+QAuOioAAAABAsAAW3OBDIaphri09AetrQAAAWABwABYcwAAAQTAAFt1gQyG54b6CaE7AGADwABbsAEfhvPAAFvAAAAAAAEFwABbrwAAAAAEAAADAAAAAAAAAAAAYAPAAFtzAT8BCQEAwABZnwAAAAA2BsAAW3eBDIfmh+uJ6AAAozcAAAABA4f1iegAAAADAwOH/AAAAJKpYAOfIgCIDQAAAIJrYAOwsACIGgAAAICWYAPAAP9oAABgA8AA/FUBPgJJiCchHIgxgYgswC46zKQQAQABgog3wC462ACwzz4CTohOiFYAACJgA8ABAAIBJAAIJ8AARACCiG3ALjrYJ8AARAEWiH6CiHjALjrYhZ7AAP98J8AARAInlSOBiKXALjrMJ4FqSYi0IRyIvoCIuMAuOsBIAQABKwDAAP91PgE9MIlBHolHnYkDAAMfiWiRxAIAASsBIoOJf8AuOxAWiY+AiYnALjrAh3GfKxaJmy6ArMAAW60APgE9MIm4g4m+wC47ED9KidkBKQbAAFt4gQyLuYu+llwAAKHLAAAAAQOLyJZcAAAAAgICi88AAACSqWADnyIAi+YAAACt6F0DwAD+vwFgA7CwAABgA8AA/FUBPgROi/iMAAAAgqBgA8AA/FUBKUWMDAGMFYwfAACZN2ADwAD+GwGTARyMLoOMJMAuPBZjAQABFow2gYwwwC475GHAAP7vAMAA/0kBi4w+wC48FhyMR4OMPsAuPBZkAQABlADAAP9BPgNOjFeMYgAAwABEA2ADwAD+GwEcjIIcjHYWjGoWjGQuoTvAAFt1oEzAAFuzgY0BAAGDjHjALjwWAMAA/0KBjQEAAZQAwAD/Qk6Ml4ycAACCa2ADsLABHIyjgYyewC475EsBAAGDjKTALjwWAMAA/s5JjLYcjMWEjLrALjxogW0BAAGTAMAA/0w+Ak6M3IziAACAlmADwAD/aAEcjO8WjOoWjOQuoTvAAFt1oEvAAFuySwEAAYSM8MAuPGgAwAD+zkmNBSEcjQ+FjQrALjyvpBABAAGGjRXALjzxALDPPgE9io0pwC48Aio/PgE9io1bwC48AipJjX4hgo2DwC48Aj4HTo2hjaQAAIPpYAPAAQBMAR+NqsABAGsAAAAAT43BjcgAAAGdDWEDAWADwAD/aGADwAEAAgADjdSOjwAAAAEBAY3cAAAAg8VgA8AA/2gAAGADwAEAAgE+AUs+AUqN/gEkjg4BhY4HwC49pwABjhpbAY4hAAABg1NbAAA+AUqOWQEcjnMWjmeFjmDALj2nhZ7AAP98IwAAAADAAP92T46Yjp8AAAGSlGEDAmADwAD/aGADwAD+G2ADwAEAAgADjqaPbwAAAAICAo6uAAAAg8VgA8AA/2gAjroAAABhYAPAAP4bAABgA8ABAAIBPgNOjtOO2AAAgbJgA8ABAAIBHI7mhI7awC49hSABAAGGjufALj4uAABJjvgcjwgWjwEUjvzALj5UCABhwAEABmMBAAGHjwrALj48AMAA/0k+AUqPHgEcj0IcjykngNmDjQEAARyPM4ePLMAuPjyBjQEAARaPOhSPNcAuPlQIAGHAAQAGAMAA/0IAwAEAHGQBAAEUj0TALj5UCAAAwAEAFz9Kj1wBFI9jwC4+VAgAT494j38AAAHAAEQEYQMCYAPAAP9oYAPAAP4bYAPAAQACAAOPh5BQAAAAAgICj48AAACDxWADwAD/aACPmwAAAGFgA8AA/hsAAGADwAEAAgE+A06PtI+5AACBsmADwAEAAgEcj8eEj7vALj2FIAEAAYePyMAuPywAAEmP2RyP6RaP4hSP3cAuP1IJAGHAAQAGYwEAARSP68AuPzoIAADAAP9JPgFKj/8BHJALFJAGwC4/UgkAZAEAARyQESeA2YONAQABHJAbFJAUwC4/OggAgY0BAAEWkCIUkB3ALj9SCQBhwAEABgDAAP9CAMABABwAwAEAFz9KkD0BFJBEwC4/UgkAQUWQ0QGQ2pDkAACZN2ADwAD+GwGTARyQ84eQ6cAuQAZjAQABHJECFpD7gZD1wC475GHAAP7vZAEAAZYAwAD/QQDAAP9JAY+RB8AuQAYckRCHkQfALkAGZAEAAZQAwAD/QT4ITpEikS0AAMAARANgA8AA/hsBHJFNHJFBFpE1FpEvLqE7wABbdaBMwABbs4GNAQABh5FDwC5ABgDAAP9CgY0BAAGUAMAA/0JJkVoiHJFpFJFewC5AZQgAYwEAAZMAwAD/SQAckXqHkXDALkAGgW0BAAEWkYOBkX3ALjvkYcAA/u8AwAD/TD4BQpHRAD89HJHtg5HqwC49aIKOAQABHJH6hZHzwC4+BiACAAKHkfvALkAGlwAAAMABAGA9HJIWg5ITwC49aIKOAQABJ4NbAMABAGBOkjUAAACCa2ADsLAASZJDHJJRh5JHwC5ABmMBAAEWklmBklPALjvkYcAA/u8AwAD/ST4CPRWSbcAuQTYJHJJ5gZJ0wC475EsBAAGHknrALkAGAMAA/s49HJKTg5KQwC49aIKOAQABHJKhhpKZwC4/AiACAAIUkqLALkE2CQA3PAAAAMABAGA+AT0cksyDksnALj1ogo4BAAEcktqGktLALj8CIAIAAifAAEQFNzwAAADAAQBgSZL6HJMJFJL+wC5AZQgAgW0BAAGTAMAA/0w+BE6TIpMoAACAlmADwAD/aAEckzUWkzAWkyouoTvAAFt1oEvAAFuySwEAARSTNsAuQGUIAADAAP7OSZNNIhyTVhSTUcAuQTYJAEgBAAErAMAA/3UBHJNmFJNhwC5BNgkApBABAAEUk2zALkIHCgAAsM8+AT0ck4WDk4LALj1ogo4BAAEngNkAwAEAYD4BPRyTs4OTsMAuPWiCjgEAASeDjQDAAQBgPRyT2IOT1cAuPWiCjgEAARyT6oST3sAuPYUgAQABFJPrwC5CBwoAAAAAwAEAYD0clAGDk/7ALj1ogo4BAAEklCADJ4NPFpQSFJQMwC5CBwoAhZ7AAP98J4MmAMABAGA+AkmUPhyURxSUQsAuQTYJAEgBAAErAMAA/3U+AT0clGGDlF7ALj1ogo4BAAEngNkAwAEAYD4BPRyUj4OUjMAuPWiCjgEAASeDjQDAAQBgPRyUtIOUscAuPWiCjgEAASfAAEQFAMABAGA9HJTXg5TUwC49aIIDAAAAAMABAGNOlPiVAAAAImADwAEAAgEklR0DFpUELoWewAD/fCfAAEQGg5UawC49aEmVJSEclS+AlSnALjvYSAEAASsAwAD/dT4BPTCVsh6VuJ2JAwADH5XZkcQCAAErASKHlfDALkOIFpYAgJX6wC472IdxnysWlgwugKzAAFutAD4BPTCWKYeWL8AuQ4g/SpZKAYKWUcAuPAIGwABbrYEMlmGWdZZ4AQKArAFqlmJgA8AA/2gCAAABA5Z4lngAAAAAAAAAYAPAAQCDAAbAAFt5gQyWfZaClsoAAMAAQDkAAAABA5aJlsoAAAABAQGWjgAAAIOoYAPAAP4bAABcAT4BRZaXAZaglqIAAGJgA8AA/hsBkwEclqmBlqfALkSFYwEAAYCWq8AuRG4AwAD/SQGJlq7ALkSFHJavgZauwC5EhWQBAAGUAMAA/0E+AT0clrsuoS8AAAAAwABbggbAAFt6gQyXOpc/l8oAAKGJAAAAAQOXTZfKAAAAAwMDl18AAAihd1sAl3QAAAChimADhN0Al40AAAiCbVsAAFwBPgFKl5kBHpegnY0DAAMnoYkcl76UgcYAAAAAwAD+PhaXwi6ArMAAW60ABsAAW3uBDJg6mEKYhgAAoWkAAAABA5hOmIYAAAAAAAAAWwE+AUqYVwEemF6djQMAAyehaRyYepSBxgAAAADAAP4+Fph+LoCswABbrQAGwABbfIEMmPaZB5leAAChrAAAAAEDmRWZXgAAAAEBAZkfAAAAhFdgA4JTAABdA8AA/r8BYAOE7AE+AUqZLQEmmS0BHpk0nY0DAAMnoawcmVKUgcYAAAAAwAD+PhaZVi6ArMAAW60AXQPAAP6/AWADhOwGwABbfYEMmc6Z05oNAAChdAAAAAEDmeGaDQAAAAAAAABcAUqZ5wEemeedjQMAAyehdByaBZSBxgAAAADAAP4+FpoJLoCswABbrQAGwABbfoEMmmOaa5r8AAChrgAAAAEDmoCa/AAAAAMDA5qPAAAAoa9gA8AAWaMAmp0AAACSqWADnyIAmrEAAACa6mADhMEAAFsBPgFKmsMBHprKnY0DAAMnwABEBxya8JSBxgAAAADAAP4+Fpr0LoCswABbrQAGwABbf4EMmwGbBptsAAChLAAAAAEDmwqbbAAAAAEBAZsSAAAAg/NgA8AA/2gAAFwBPgJJmx4cmyeAmyLALkbmSAEAASsAwAD/dT0emzCdiwQABCeEQSehLBybSpSBxgAAAADAAP4+FptOLoCswABbrQA/PRybXhabWC6hO8AAW3WhLAEAAYCbY8AuRuYAwABbugbAAFuAgQybcZt2m+EAAMAAQIIAAAABA5uAm+EAAAACAgKbhwAAAMAARAhgA58iAJueAAAAreVgA8AAWz4AAFwBPgFJm68cm7+Am7PALkd6SAEAASsAwAD/dT0cm84Wm8guoTvAAFt1oSwBAAGBm9PALkeIAMAAW7o/BsAAW4GBDJvmm+2cGwAAn70AAAABA5vxnBsAAAAAAAAAYAPAAP9oAUqb9wEjFpv9Fpv3LqE7wABbdYO3wABbtRacEBacCi6hO8AAW3WB6sAAW7crAWADwAD/aAbAAFuCgQycIJwnnGcAAKEvAAAAAQOcKpxnAAAAAQABnDYAAACt5WADwABbPgFqAGADwAD/JXkAYAPAAP9oAT4BSpxIARycVRacTy6hO8AAW3WhLwEAAYCcWcAuSE0AwABbuwbAAFuDgQycbJxznLsAAKMZAAAAAQOcf5y7AAAAAQEBnIcAAACAlmADwAD/aAAAYAPAAP9oAT4BSpyUASMcnKGAnJvALkiwSAEAASsAwAD/dSscnLIuoS8AAAAAwABbggFgA8AA/2gGwABbhIEMnMCcxZz6AAChTwAAAAEDnM+c+gAAAAEBAZzXAAAAgL1gA8ABAAIAAFwBPgAGwABbhYEMnP+dBJ4fAADAAEQJAAAAAQOdDp4fAAAAAQEBnRYAAACAvWADwAEAAgAAXAE+Az0enSLAAPf+AQABJ8AARAoARp1FnWSdUQAAAK96YAPAAP9oABadXBadVi6hO8AAW3UpwABbuD4ETp1znXUAAIh7YAPAAQACASSdfQIng+GBnXvALkl1Tp2JnY8AACdgA8AA/hsBHJ2Tgp2RwC5JmIC7AQABJ4CvAMABABVJnaghHJ2yg52swC5JtkgBAAEcnbWUgcYAAAAAwAD+PgDAAP8/PgE9ip3DwC5JmByd3RydyYKdx8AuSZiAvgIAApODndbALkm2AMABABhkAQABJ50aAMABABc/PR6d9MAA9/4BAAGCnfrALkmYAD0engjAAPf+AQABJJ4aAifAAEQLgJ4VwC5JTAAGwABbhoEMniSeNZ6TAADAAEG6AWqeJWADwAD/aAIAAAEDnj2ekwAAAAEBAZ5FAAAAgL1gA8ABAAIAAFwBPgI9HJ5RLsAARAkBAAGAnlzALkqRAMAAW4U9Hp5nnYsEAASAnnHALkqRJJ6FARaeeS6FnsAA/3wcnoeUgcYAAAAAwAD+Phaeiy6ArMAAW60ABsAAW4eBDJ6YnqmgZAAAogMBap6ZYAPAAP9oAgAAAQOeuaBkAAAAAgICnsAAAACSqWADnyIAntkAAACCV2ADwABawAAAXAE+Aj0cnuguoU8BAAEnogMAwABbhEmfDCEWnxeAnxHALksdhJOfNj4BPRyfLC6hLAEAARafN4CfMcAuSx2CYp88AMAAW38+AT0coDAuoSwBAAEfoDnAAFvSAQABFqBOgKBIwC5LHYdxnysAAMAAW38GwABbiIEMoGmgeqDSAADAAEDfAWqgamADwAD/aAIAAAEDoIag0gAAAAEBAaCNAAAAkqlgA58iAABcAT4CPRygmi6hTwEAASfAAEILAMAAW4Q9HKC0LqEsAQABaqDDYAPAAFs+wADFfADAAFt/BsAAW4mBDKDXoOihJwAAoYQBaqDYYAPAAP9oAgAAAQOg9qEnAAAAAQEBoP0AAACSqWADnyIAAFwBPgE9HKEKLqFPAQABJ4VbAMAAW4QGwABbioEMoSyhMaIpAAChuAAAAAEDoTuiKQAAAAEBAaFAAAAAh3FgA8AA/hsAAFwBPgFJoVIWoVwWoVYuoTvAAFt1g7fAAFu1PgE9HqFwnYkDAAMcobBqoYtdA5HRAWEDAmADwAEAAmADwAEAAmADkbrAAFb/iD0CAAIkod0BFqHQLoWewAD/fByh7Bah5Rah3y6hO8AAW3UpwABbuFgBAAEnsEsAwAD+kQCR1YCiBcAuTIMWohsugKzAAFutAD8GwABbi4EMoi6iP6KwAADAAEIEAWqiL2ADwAD/aAIAAAEDolWisAAAAAEBAaJcAAAAkqlgA58iAABcAT4CPRyiaS6hTwEAASfAAEIFAMAAW4Q9HKKQLqG4AQABFqKhgKKbwC5NT4dxnysAwABbigbAAFuMgQyitaLGozoAAMAAQc0BaqK2YAPAAP9oAgAAAQOi2KM6AAAAAgICot0AAACA7mADwAD+GwCi6gAAAJKpYAOfIgAAXAE+Aj0covcuoU8BAAEnwABBzgDAAFuEPRyjGi6huAEAARajK4GjJcAuTcuHcZ8rAMAAW4oGwABbjYEMoz+jUKOdAADAAEDwAWqjQGADwAD/aAIAAAEDo2KjnQAAAAEBAaNpAAAAwABA8WADnyIAAFwBPgE9HKN/LqFPAQABJ8AAQcEAwABbhAbAAFuOgQyjoqOzpAAAAMAAQPIBaqOjYAPAAP9oAgAAAQOjwKQAAAAAAgICo8cAAACjFGADnyIAo9YAAACpVmADwAD+GwAAXAE+AT0co+cuoU8BAAEnwABBxQDAAFuEBsAAW4+BDKQFpBakfwAAwABBEAFqpAZgA8AA/2gCAAABA6QnpH8AAAADAwOkLgAAAIKYYAOfIgCkOwAAAMAAQLdgA58iAKRPAAAAoi1gA58iAABcAT4BPRykYi6hTwEAASfAAEERAMAAW4QGwABbkIEMpISklaTeAADAAEESAWqkhWADwAD/aAIAAAEDpKak3gAAAAEBAaStAAAAwABArWADnyIAAFwBPgE9HKTBLqFPAQABJ8AAQcYAwABbhAbAAFuRgQyk46T0pTkAAMAAQO4BaqTkYAPAAP9oAgAAAQOlDKU5AAAAAAAAAFwBPgE9HKUVLqFPAQABJ8AAQcMAwABbhAbAAFuSgQylPqVPpZQAAMAAQO8BaqU/YAPAAP9oAgAAAQOlZ6WUAAAAAAAAAFwBPgE9HKVwLqFPAQABJ8AAQccAwABbhAbAAFuTgQylmaWqpiMAAMAAQOoBaqWaYAPAAP9oAgAAAQOlxqYjAAAAAgICpdQAAADAAEC4YAOfIgCl6wAAAMAAQOtgA8AA/hsAAFwBPgE9HKYCLqFPAQABJ8AAQcIAwABbhAbAAFuUgQymKKY5pqYAAMAAQEIBaqYpYAPAAP9oAgAAAQOmTqamAAAAAQEBplUAAACSqWADnyIAAFwBPgI9HKZiLqFPAQABJ8AAQEMAwABbhD0cpoUuoSwBAAFqppRgA8AAWz7AAMOIAMAAW38GwABblYEMpqumvKcpAACj9QFqpqxgA8AA/2gCAAABA6bRpykAAAABAQGm2AAAAJKpYAOfIgAAXAE+Aj0cpuUuoU8BAAEno/YAwABbhD0cpwguoSwBAAFqpxdgA8AAWz7AAMXfAMAAW38GwABbloEMpy6nP6fTAADAAEBEAWqnL2ADwAD/aAIAAAEDp3mn0wAAAAEBAaeAAAAAkqlgA58iAABcAT4BPRynjS6hTwEAASfAAEBFAMAAW4QGwABbl4EMp9in6ahCAADAAEBGAWqn2WADwAD/aAIAAAEDp/WoQgAAAAEBAaf8AAAAwABAR2ADnyIAAFwBPgI9HKgQLqFPAQABJ8AAQEgAwABbhD0cqCouoSwBAAFqqDlgA8AAWz7AAMSzAMAAW38GwABbmIEMqEeoWKjfAADAAEBSAWqoSGADwAD/aAIAAAEDqHCo3wAAAAICAqh3AAAAkqlgA58iAKiJAAAAgmtgA8AAWwoAAFwBPgI9HKiVLqFPAQABJ8AAQFMAwABbhD0cqLsuoSwBAAFqqMpgA8AAWz7AAOV/AMAAW38GwABbmYEMqOSo9alWAADAAEBAAWqo5WADwAD/aAIAAAEDqQapVgAAAAEBAakNAAAAkqlgA58iAABcAT4CPRypGi6hTwEAASfAAEBBAMAAW4Q9HKk5LqEsAQABaqlIYAPAAFs+wADDYgDAAFt/BsAAW5qBDKlbqWyp9QAAwABAkwFqqVxgA8AA/2gCAAABA6mEqfUAAAACAgKpiwAAAKItYAOfIgCpngAAAKI8YAOfIgAAXAE+Aj0cqa8uoU8BAAEnwABAlADAAFuEPRyp1S6hLAEAAWqp5GADwABbPsAAxocAwABbfwbAAFubgQyp+qoLqoAAAMAAQJUBaqn7YAPAAP9oAgAAAQOqKqqAAAAAAgICqjEAAACiLWADnyIAqkQAAACiPGADnyIAAFwBPgE9HKpVLqFPAQABJ8AAQJYAwABbhAbAAFucgQyqhaqWqwsAAMAAQJcBaqqGYAPAAP9oAgAAAQOqtasLAAAAAgICqrwAAACiLWADnyIAqs8AAACiPGADnyIAAFwBPgE9HKrgLqFPAQABJ8AAQJgAwABbhAbAAFudgQyrEKshq4sAAMAAQGMBaqsRYAPAAP9oAgAAAQOrNauLAAAAAQEBqzwAAACSqWADnyIAAFwBPgI9HKtJLqFPAQABJ8AAQGQAwABbhD0cq2suoSwBAAFqq3pgA8AAWz7AAMaHAMAAW38GwABbnoEMq5CroawAAAChfgFqq5FgA8AA/2gCAAABA6u1rAAAAAAAAAAAXAE+Aj0cq74uoU8BAAEnoX8AwABbhD0cq+AuoSwBAAFqq+9gA8AAWz7AAReHAMAAW38GwABbn4EMrAWsFqx0AAChxAFqrAZgA8AA/2gCAAABA6wyrHQAAAABAQGsOQAAAJKpYAOfIgAAXAE+AT0crEYuoU8BAAEnocQAwABbhAbAAFuggQyseayKrOQAAKHHAWqsemADwAD/aAIAAAEDrKes5AAAAAEBAayuAAAAkqlgA58iAABcAT4BPRysuy6hTwEAASehyADAAFuEBsAAW6GBDKzprPqtVQAAoiQBaqzqYAPAAP9oAgAAAQOtDK1VAAAAAQEBrRMAAACSqWADnyIAAFwBPgI9HK0gLqFPAQABJ6IkAMAAW4Q9HK1GLqEsAQABgK1LwC5VqQDAAFt/BsAAW6KBDK1arWuumwAAoicBaq1bYAPAAP9oAgAAAQOte66bAAAAAgICrYAAAACiKGADwAD+GwCtmgAAAJ1wYAOfIgAAXAE+Aj0craouoU8BAAEnoicAwABbhEmtzhyt5YCt0sAuVgxIAQABkwDAAP8/PgJOrfmt/wAAkqlgA58iASat+QEcrgEuoS8AAAAAwABbgmADnyI9HK4OLqEsAQABHq4TsF4DAAMWriiCriLALlZXgmKfPIKuMMAuVlcuAADAAFt/PgE9Hq5SnYoDAAMnwABEDBaugYGueMAuVhqHcZ8rFq6NLoCswABbrQAGwABbo4EMrqCusa9ZAACiLAFqrqFgA8AA/2gCAAABA67Dr1kAAAACAgKuygAAAKItYAOfIgCu3AAAAKIuYAPAAPxVAABcAT4CPRyu6y6hTwEAASeiLwDAAFuESa8Lga8PwC5XBz4BPRyvIC6hLwAAAADAAFuCPwbAAFukgQyvXq9vr64AAMAAQcwBaq9fYAPAAP9oAgAAAQOvg6+uAAAAAAAAAFwBPgE9HK+MLqEvAAAAAMAAW4IGwABbpYEMr7OvuLBOAADAAEHVAAAAAQOv0rBOAAAAAgICr9kAAACSqWADnyIAr+gAAAAiYAORugAAXAE+Aj0cr/cuoU8BAAEnwABB1gDAAFuEPRywHy6hLwAAAADAAFuCBsAAW6aBDLBTsGSwqQAAod4BarBUYAPAAP9oAgAAAQOwdbCpAAAAAQEBsHwAAACh32ADnyIAAFwBPgE9HLCJLqFPAQABJ8AAQcAAwABbhAbAAFungQywrrC/sP4AAKMRAWqwr2ADwAD/aAIAAAEDsM2w/gAAAAEBAbDUAAAAkqlgA58iAABcAT4BPRyw4S6hTwEAASejEgDAAFuEBsAAW6iBDLEDsRSyMQAAooUBarEEYAPAAP9oAgAAAQOxKrIxAAAAAwMDsToAAAAiYAORugCxSQAAAKBZYAOfIgCxWwAAAJ1wYAOfIgAAXAE+Az0csWsuoU8BAAEksZECJ4HIFrGIgLGAwC5YryKRvQDAAFuESbGYHLGcLsAAQMcCAAIWsbOAsavALlivgpeRvIGxucAuWLoAwABbqUqxxgA/PRyx0i6e2wMAA4Cx3cAuWK8esebAAFssAQABgbH1wC5YugAesgrAAFs0AgACgbIXwC5YuoKyI8AuWMYAAMAAW6sGwABbqYEMsjayO7PAAADAAEDHAAAAAQOySbPAAAAAAgICslgAAACCl10Dka8BWwCyZAAAAJKpYAOfIgAAYAPAAPxVAT4BSbJxHLJ6gLJ1wC5ZikgBAAFqsn1dA5GvAWADwAD/JcAAbQoAwAD/dT4BSrMCASlJsxocsyOAsx7ALlmKSAEAAWqzJl0Dka8BYAPAAP8lk3IAwAD/dT4BSrOKASk+AUqzqgEqBsAAW6qBDLPFs9a0cwAAraQBarPGYAPAAP9oAgAAAQOz6bRzAAAABAQEs/kAAAAiYAORugC0CAAACJKpYAOfIgC0EwAAAJ/BYAPAAP4bALQlAAAAYWADwAD+GwAAXAE+AT0ctDMuntsDAAOAtD7ALlo7HLRYFrRNgbRHwC5aRodxnytkAQABgrRawC5aUgDAAP9Bg7RowC5aYADAAFurBsAAW6uBDLR4tH208gACntsAAAABA7SHtPIAAAAFAwO0kAAAACJgA5G6ALSdAAAAh3FgA8AA/hsAtK0AAABhYAPAAP4bAAK0wQAAAJ+TYAPAAPxVAWq0zWADwAD8VQC06QAAAIJXXQPAAP6/AWADkdgBagBgA8AA/yV5XAAAAC46oAAuO7gALkQaAC5ETAAuRNwALkVHAC5FlAAuRgYALkZRAC5GxgAuR1gALkfSAC5ILQAuSJAALkj3AC5JKgAuSmUALkrzAC5LqQAuTBYALkxjAC5NIwAuTZEALk4NAC5OYAAuTr8ALk8qAC5PfQAuT8IALlAHAC5QagAuUNcALlFAAC5RkQAuUgAALlJ7AC5S6AAuU2EALlO+AC5UGwAuVIgALlTlAC5VMgAuVX8ALlXiAC5W0QAuV0gALleIAC5X6QAuWDgALliFAC5ZaAAuWhEALlqwAC5bLQAAADYCwABbsIEMtPe0/bxlA8AARA0AAAFgAcAA/2gAAAIEwABbsoEMtRS1LxigSwBdA8AA/r8BYAPAAP9oAR61IMAA+BYBAWADwAD/aAE3CAAEwABbs4EMtTe1RhigTABgA8AA/hsBkwEFwABbwAAAAAAEAAADAAAAAAAAAAAAYAPAAFuwAT8BCQEAwAD/fgAAAAAIBsAAW7WBDLVLtVS1cQEAg7cAAAABA7VftXEAAAAAAAAAYAPAAPxVAUq1YgEctW4WtWIuoEzAAFuzgJcBAAGTAMAA/0sGwABbtoEMtXa1frWTAQBhAAAAAQO1hbWTAAAAAAAAAGADwAD+GwFKtYgBFrWILqBMwABbswbAAFu3gQy1mLWjtgsBAIHqAAAAAQO1qLYLAAAAAAAAAGADwAD/aAE+Ak61u7XBAAGAlmADwAD/aAEctcgWtcMuoEvAAFuySwEAARy11Ra1yS6gTMAAW7OBjQEAAZQAwAD/QgDAAP7OSrXfASMlteyAtebALl1DYAPAAFs+K4C2AsAuXUMBYAPAAP9oBsAAW7qBDLYQthW2igAAoSwAAAABA7YZtooAAAABAQG2IQAAAICWYAPAAP9oAABcAT4CPRy2Mxa2Li6gS8AAW7KAvwIAAjUAAAABAGADwAD+GwEWtjQuoEzAAFuzNQAAAAEAYAPAAP4bARe2NC6gTBy2P4EAwC5d62QBAAGUAMAA/0HAAFuzgQDALl3rgLZFwC5dxADAAP7PSbZQHLZhFrZaFrZULqBLwABbsmHAAP7vSAEAARa2ZC6gTMAAW7MAwAD/Pz4BPRy2eS7AAEQOwABbPQAAAADAAFu+PwbAAFu7gQy2j7aWt8UAAKEvAAAAAQO2mbfFAAAAAQEBtqQAAACt5WADwABbPgAAYAPAAP9oAT4EQBy2yBa2vC6gTMAAW7OAlwEAAZMAwAD/S7a8tssATrbftuUAAYCWYAPAAP9oARy27Ba25y6gS8AAW7JLAQABF7bvLqBMHLbtFrbvLqBMwABbs4GNAQABlADAAP9CwABbswDAAP7OPRy3Bha3AS6gS8AAW7KAvwIAAha3By6gTMAAW7MrAMAA/s9JtyAhJbcqgbckwC5e12ADwABbPj4BSrdBAYG3SMAuXtdJt1oiHLdogLdewC5eoEgBAAErAMAA/3UBHLd5gbdzwC5e10gBAAGAt3zALl6gAMAA/3U+AUq3jwErPgFKt68Bgbe2wC5e1wbAAFu8gQy3yrfXuvMAAMAARA8AAAABA7feuvMAAAADAwO34wAAAIDuYAPAAP4bALf3AAAAg2FdA8AA/r8BYAPAAP9oALgHAAAAreVgA8AAWz4AAF0DwAD+vwFgA8AA/2gBPghAHLgrFrgfLqBMwABbs4FtAQABgLguwC5fywDAAP9MuB+4MwBOuE24UwABoEtdA8AA/r8BYAPAAP9oARa4Wi6gS8AAW7JOuG+4dgABYWADwAD+GwEWuHguoEzAAFuzTriTuJ4AAcAARBBgA8AA/hsBHLinhLigwC5gU4GNAQABgLipwC5fywDAAP9CTri5uMoAAMAAQNNgA8AA/FUBKkW41wG44LjiAABiYAPAAP4bAZMBHLjph7jnwC5gr2MBAAGAuOvALl/LAMAA/0kBj7jywC5grxy484e48sAuYK9kAQABlADAAP9BPgROuQO5DgAAwABEEWADwAD+GwEcuRuFuRDALmBsZAEAAYe5HcAuYK8AwAD/QU65M7k5AAGAlmADwAD/aAEcuUCDuTvALmAySwEAARS5QcAuYPgIAADAAP7OPRy5WYO5VMAuYDKAvwIAAhS5WsAuYPgIACsAwAD+z0m5dCIiJbl+FLl4wC5hJAkAYAPAAFs+ABy5mIK5jsAuX+5IAQABKwDAAP91AR65rcAA9/wCAAIUubfALmEkCQCCub7ALl/uAD4BPRy52IG51MAuX9mAvwIAAoe52cAuYK8rAMAA/s9JufElufsUufXALmEkCQBgA8AAW8w+AT2OuhjALmCZKT4CSbpIJbpSFLpMwC5hJAkAYAPAAFs+PgE9HrpswAD3/gEAARS6csAuYSQJAWADwABbPgA/PRy6kIG6jMAuX9mAvwIAAoe6kcAuYK8UupbALmEkCQAAwAD+zz0Xuq8uoEwcursWuq8uoEzAAFuzgY0BAAGAur7ALl/LAMAA/0LAAFuzSrrKASOGutHALmCZK4G668AuX9kBXQPAAP6/AWADwAD/aAbAAFu4gQy6+LsJu6YBACkAAAABA7sQu6YAAAAAAAAAXQPAAP6/AWADwAD/aAE+BE67ILsnAAFhYAPAAP4bARa7KS6gTMAAW7NOu027UgABg2FdA8AA/r8BYAPAAP9oAR67WMAA+BYBAWADwAD/aAGAu2XALmLLAD0cu3eBu3LALmLkg2QDAAOTgLuDwC5iyxa7iy6gS8AAW7IAwAD+5Eq7lwGBu57ALmLkBsAAW76BDLuru7C8YwAAwABEDsAAWz0AAAABA7u1vGMAAAAAAAAAXAE+BE67yLvPAAFhYAPAAP4bARa71xa70S6gS8AAW7JhwAD+70679rv/AAGgUV0DwAD+vwFgA8AA/2gBHrwFwAD4FgEBYAPAAP9oARy8GYC8EsAuY3CDjQEAAZUAwAD/QwA9HLwsgbwjwC5jkYNkBAAEk4C8OMAuY3AWvEAuoEvAAFuykwDAAP7kPRe8Ty6gS4G8V8AuY5HAAFuyAAAuXJ8ALlzjAC5dGAAuXaQALl6AAC5fqQAuYpoALmNEAC5kBwAAAAgCwABbwYEMvQ69FL6/A6DxAAEAAIJ6YAPAAP9oAVsBYAHAAP9oAAAAAQXAAFvGgQy9Lb0zvUYBAAADvUS9RgAAAAAAAABdA8AAW8EBXwMAAAE/AQkBvTPAAP9+AAAAAAIGwABbw4EMvUu9U73rAAChLwAAAAEDvVa96wAAAAMCA71dAAAAoTtgA8AAW7AAvWgAAACA7mADwAD+GwC9egAAAK3lYAPAAFs+AWoAYAPAAP8leQBdA8AA/r8BXwMAAAE+Akm9jBy9loG9kMAuZL5IAQABkwDAAP8/Sr2cASs/Sr2tASa9rQEcvbqAvbTALmSwwABEDwMAA4G9wsAuZL4evc3AAPgWAQFfAwAAAYG91cAuZL4Agr3dwC5kzADAAFu8XQPAAP6/AV8DAAAGwABbxIEMvfC9+L69AACjDwAAAAEDvgG+vQAAAAQDBL4IAAAAoTtgA8AAW7AAvhMAAACA7mADwAD+GwC+HgAAAJbzYAPAAP4bAL44AAAAreVgA8AAWz4BagBgA8AA/yV5AF0DwAD+vwFfAwAAAT4CSb5KHL5eHL5Ugb5OwC5limQBAAGCvlbALmWYAMAA/0FIAQABkwDAAP8/Sr5kASs/Sr51ASa+dQEcvoKAvnzALmV8wABEDwMAA4G+isAuZYoevpXAAPgWAQFfAwAAARy+o4G+ncAuZYpkAQABgr6lwC5lmADAAP9BAIO+r8AuZaYAwABbvF0DwAD+vwFfAwAAAAAuZJAALmVcAC5mXAAAAAICwABbx4EMvz2/Q8AAQBcDoPIAAQAAgnpgA8AA/2gBWwFgAcAA/2gAAAABBcAAW8uBDL9Xv12/awEAAAO/ab9rAAAAAAAAAF0DwABbxwFfAwAAAT8BCQG/XcAA/34AAAAAAQbAAFvJgQy/cL94wABAFQAAoS8AAAABA797wABAFQAAAAMCA7+CAAAAoTtgA8AAW7AAv40AAACA7mADwAD+GwC/nwAAAK3lYAPAAFs+AWoAYAPAAP8leQBdA8AA/r8BXwMAAAE+AUq/sQEmv7EBHL++gL+4wC5m88AARA8DAAOBv8/ALmcBHr/awAD+xAMBXwMAAAKBv+nALmcBKwGFdimCwABAB8AuZw8AwABbvF0DwAD+vwFfAwAAAAAuZs8ALmeIAAAAAQLAAFvMgQzAAEAawABAIMAAQKQDoPUAAAFgAcAA/2gAAAEEwABbzoEMwABAPcAAQEcJh3EAYAPAAP4bAAEFwABb0oEMwABAS8AAQEvAAEBqAAAAA8AAQFnAAEBqAAAAAQEBwABAXwAABIdxYAPAAP4bAABgA8AAW8wBPwIIAcAAW86AAMAuZ/cJAcAAQEvAAP9+AAAAAAEGwABb0IEMwABAb8AAQHbAAECiAAAjAAAAAQPAAEB+wABAogAAAAAAAABgA8ABAAIBSsAAQIQBJMAAQKIDJ8AARBIWwABAli6HccAAW84ngyYAAC5oLAAuaH0AAAABAAAAAYEMAC5ojQAuMzAALjo3AC5cDgAuZDAALmZtAC5nlQAuaIoAAAAGAC5ojQAAAAAAAgbAAFvTAIENAAAHgNwAAIIuAAEBDITXhoSGi4aVhpGFF4ZyhqaFPoazhqmGjYHyAACbGgABAQKa4JWkgjwAAKyAAAEBAZ9ZgmkAAMAAVhQAAQEDrfCroMAAQT2C1gAAsCwAAQEBoNyC/QAArIAAAIMZAADAAFYUAAAAAAADAsAAW9SBDYPXg+bAAEQBB63uAAABYAHAAP9oAAACBMAAW9eBDYQHhC8JwABEE8AAW9MAXQPAAP6/AWADwABcAwExhC1gA8AAXAMABMAAW9iBDYROhGQJwABEFMAAW9MAXQPAAP6/AWADiZYAAQXAAFvygQ2E5YTlhWgAvyMAA4UHhWgAAAABAQGFIAAAAITFXQPAAP59AWADiZYAAGADwABb1AE/AggAwABb2ByFYICFUcAuacSArQAAAADAAP6TCQGE5cAA/34AAAAAFAbAAFvagQ2FbYV1hisEAQAAAAABA4WLhisAAAACAgKFogAAAICJYAPAAFY4AIXNAAAAhMVdA8AA/n0BYAOJlgAAYAPAAFvUAT4BSoXjAR+F7sAAXAICAAKAhgvALmongYYYwC5qNQAGwABb3IENhjCGOoZFAQKbLgAAAAEDhkWGRQAAAAAAAABgA4McAAbAAFvdgQ2GSoZUhmEBAps5AAAAAQOGYYZhAAAAAAAAAGADgxwABsAAW96BDYZmhnCGfQECmzoAAAABA4Z9hn0AAAAAAAAAYAODHAAGwABb34ENhoKGjIaVAQKbLwAAAAEDhpWGlQAAAAAAAABgA4McAAbAAFvhgQ2GmoafhtcAAr85AAAAAQOGrIbXAAAAAgIChrwAAACuemADwABWGQCG0QAAAIadYAOI/AAAXAAGwABb4oENhtyG4YcZAAK/OAAAAAEDhu6HGQAAAAICAob+AAAArnpgA8AAVhkAhxMAAACGnGADiPwAAFwABsAAW+OBDYcehyWHZgACm2cAAAABA4c3h2YAAAADAgKHPgAAAISYYAODHACHSwAAAIC9YAOIxwABh1cAAACbZGADwAD8VQFqh19gA8AA/FUAYAODkAAGwABb5IENh2uHeYeyAAKFigAAAAEDh4yHsgAAAAICAoebAAAAgpRgA4k3AIenAAAAhPNgA4McAABgA4k3AAbAAFvlgQ2Ht4fFh94AAoYlAAAAAQOHz4feAAAAAQEBh9kAAACClGADiPwAAGADiTcABsAAW+aBDYggiEOKZAAArnkAAAABA4hVimQAAAAAAAAAXQPAAP7xAmADiZZgA8AAVhkBPgROiIGIiAAAgXZdA8AA/vECYAOJlmADwABWGQEyiLFgA4mWYAPAAFYZAEaIuYjxiMwAAACA7WADiZYAFojZLsAARBTAAFvTwABb2D4BPRyI/4CI+cAubH2AvwIAAoGJAMAubKofiRHAAFYhAAAAAADAAP8GRoktiWmJQwAAAMAARBVgA8AAXAMAFolWLsAARBPAAFvTwABb1z4BSYlxFomFgYl1wC5s9MAARBbAAFwHPgE9HImYLr85AgACHImsgImmwC5sfUsBAAEWib2Bia3ALmz0gO3AAFwFAMAA/wUWidmBicnALmz0hYfAAFwGAMAAW+E+AT0cifguvzgCAAIcigyAigbALmx9SwEAARaKHYGKDcAubPSA7cAAXAUAwAD/BRaKOYGKKcAubPSFh8AAXAYAwABb4kqKUwGAilrALmx9BsAAW+eBDYtei2OMfQAArngAAAABA4tyjH0AAAACAgKLfAAAAJtIYAOI/ACLjgAAAIThYAOI/AAAYAPAAPxVAT4ETouji70AAMAARBdgA8AA/hsBFovRFou/LsAARBPAAFvTwABb12HAAP7vTovii+oAAMAARBhgA8AA/FUBHIvsLsAARBnAAFvTAgACgIv8wC5t3oGMBcAubeoAwABb7kmMFSGDjBrALm4rPgE9F4w9FowrLsAARBPAAFvTwABb12GCjEbALm4BwAD+7T9KjGsBg4xywC5uKwbAAFvpgQ2MgoyHjQ0AAMAARBrAAFvTAAAAAQOMlo0NAAAAAgICjKUAAACA7WADiZYAjLkAAACGnGADiPwAAFwBPgE9HIzYFozGLsAARBPAAFvTwABb11YBAAEfjODAAFwLAgACgIz3wC5uvYGNAsAubskAAMAA/tAGwABb6oENjRKNF42dAADAAEQbwABb0wAAAAEDjSaNnQAAAAICAo01AAAAgO1gA4mWAI1JAAAAhp1gA4j8AABcAT4BPRyNaBaNVi7AAEQTwABb08AAW9dWAQABH41wwABcDAIAAoCNh8AubzaBjZLALm9CAADAAP7QBsAAW+uBDY2ijaebCAAAwABEHMAAW9MAAAABA42+mwgAAAACAgKNzAAAAJtIYAOJSQCN4gAAAIThYAOJSQAAYAPAAPxVAT4JSZJSHJJ1FpJegJJWwC5vr4U6iUyAlwEAARaSgYGSd8Aub7uFOolMAMAA/0s+AUqSoQEqP0mSuRyS4RaS2haSxYCSvcAub6+Ex4lNYcAA/u9jAQABFpMKFpL1gZLrwC5vu4THiU1hwAD+7wDAAP9JPgFKkxoBKj9JkzIhHJNUFpNNFpM+gJM2wC5vr4TFiUthwAD+70gBAAEWk3AWk2GBk1fALm+7hMWJS2HAAP7vAMAA/z8+AUqTgAEqP0mTmBaTsxaTpICTnMAub6+ExYlLg7fAAP6iPgZOk+ST+AAAwABEHV0DwAD+8QJgA4mWYAOI/AEylB1gA4mWYAOI/ABOlESUWgAAwABEHl0DwAD+8QJgA4mWYAOI/AEylH9gA4mWYAOI/ABOlJ2UsAAAwABEH10DwAD+vwFgA4mWATGUwWADiZYASZTLIRyU0C7AAEQgwABb0wUABRaU6oCU4sAub6+ExYlLFpUEgZT6wC5vu4TFiUuClR7ALnCpg5UzwC5w0ISVSsAucPcAwABb8D4BSpVpASo/PYiVhsAub68elZDAAFYWAwADgJWwwC5vr4KVucAucKmElc7ALnD3AD2JlenALm+7HpX1wABWFgMAA4GWFcAub7uDliDALnDQhJY3wC5w9wA/SZZ1IiEllo4WloOBlnnALm+7hVWJUWADiR8AIRyWpy7AAEQZwABb0wIAAhaWv4CWt8Aub6+FVYlRFpbVgZbLwC5vu4VViVEAwABb7j4BSpbqASo/RZckAZctly8AAGJgA8AA/hsBkwEclzaClzTALnIPYwEAARaXVxaXQoGXOMAub7uEx4lNYcAA/u8AwAD/SQGKl2HALnIPHJdfgpdhwC5yD2QBAAGUAMAA/0E+A06XdZeIAACbUmADiPwBHJeoFpeUgZeKwC5vu4THiU1LAQABgpepwC5yDwDAAP7OTpe8l80AAJtTYAOI/AEcl+sWl9eAl8/ALm+vhMeJTUsBAAGCl+zALnIPAMAA/s5JmCchHJgsLsAARBnAAFvTAgACg5g8wC5yZ4SYUMAucpYAwABb7j4BSphtASo/TpiRmKIAAJtUYAPAAP4bAZNGmKuY65i6AAAAm1JgA4l1ABaY2oGY0MAub7uEyIlOPgRDmPMiHJkLgpj6wC5y82MBAAEWmSUWmRWAmQ3ALm+vhMiJTmHAAP7vAMAA/0kAIRyZaBaZYxyZUBaZQYCZOcAub6+EyIlOSwEAAYKZUcAucvMAwAD+zoC9iXhIAQABFpmMg5l5wC5zCIC9iXgAwAEAET4BPYqZnsAucvMcmZyCmZ7ALnLzZAEAAZQAwAD/QUmZvhyZ04KZwsAucvNIAQABFpnuFpnegJnWwC5vr4TIiU5hwAD+7wDAAP8/Spn2ASo/TpoUmiUAAJtTYAOJdQEcmj4Wmi+AmifALm+vhMiJTksBAAGCmj/ALnLzAMAA/s5JmokhHJqOLsAARBnAAFvTAgACFpqxg5qewC5zCIKUiXkWmsiEmrfALnPmgpSJeQDAAFvuPgFKmtkBKj9KmvkBKQbAAFvsgQ2bDZsSof4AAMAARCHAAFvTAAAAAQObKqH+AAAAAgICm0AAAACbSGADiTcAm1cAAACE4WADiTcAAGADwAD8VQE+BE6geqCVAADAAEQiYAOJNwEcoJ8uhYoCAAKAoLPALnR7FqDGgaC8wC50h4TviT0AwABb5Emg1hyg9YKg2sAudJ5IAQABKwCJRUqg/gEqP0WhEAGhGaEbAABiYAPAAP4bAZMBHKEig6EgwC5072MBAAEWoUcWoTgWoS6BoSTALnSHhO+JPYTFgythwAD+7wDAAP9JAYuhT8AudO8coVCDoU/ALnTvZAEAAZQAwAD/QT4BSaFcIRyhYS7AAEQZwABb0wIAAhyhmRahjIKhccAudJ6FOIk7SwEAAYOhmsAudO8AwAD+zhyhvxahsoGhqMAudIeFOIk7SwEAAYOhwMAudO8AwAD+zgDAAFvuPgFKoc8BKj9Koe8BKQbAAFvtgQ2iA6IIo4gAALb5wABb0wAAAAEDog+jiAAAAAEBAaIZAAAAgpRgA4j8AABgA8AA/FUBPgFKo0ABIiWjTICjR8AuddhgA4k3AB6jYMAA9/wCAAIWo28Uo2rALnXYAAFgA4k3hO+JPRajei6bL8AAW98ABsAAW+6BDaVspXG9aQAAwABEGcAAW9MAAAABA6WAvWkAAAACAgKligAAAJtIYAOI/AClnAAAAIThYAOI/AAAYAPAAPxVAT4OSaYJJaYVgKYNwC52UWADrI5KpiUBKT9JppIlpqCBppbALnZdYAOsjkqmsAEpP0mnMyIlpz+ApzfALnZRYAOJhAAcp3YWp18uwABEFMAAW9PAAFvYgxwBAAEWp4cUp3/ALnZRAAFgA4mEgO2JhwDAAP6MPgI9HKebLsAARBvAAFvTAgACFqezFKerwC52UQABYAOJhIDtiYeBp77ALnZdAMAAW+pKp9ABKT9JqFciJahlgahbwC52XWADiYQAHKicFqiFLsAARBTAAFvTwABb2IMcAQABFqivFKilwC52XQEBYAOJhIDtiYcAwAD+jD4CPRyowy7AAEQawABb0wIAAhao3RSo08Audl0BAWADiYSA7YmHgKjowC52UQDAAFvpSqj4ASk/SaolHqopwAD3/AIAAoCqM8AudlGBqjzALnZdAEqqSAEpP0mqwByqxC7AAEQjwABb0wEAAYGqy8Audl0AwABb70qq1wEpP0mrYhyrZi62+cAAW9MBAAGAq27ALnZRAMAAW+1Kq3gBKT9Jq7AiJau8gKu0wC52UWADiTcAHqvYwAD3/AIAAhar6hSr4sAudlEAAWADiTeE74k9Fqv1Lps6wABb3gA+BE6sFqwhAACbSmADiPwBHKw4FqwrFKwjwC52UQABYAOJN4U4iTtLAQABkwDAAP7OSaxDIiWsUYGsR8Audl1gA4k3AB6sb8AA9/wCAAIWrIMUrHnALnZdAQFgA4k3hO+JPRasji6bOsAAW94APgJOrYytmQAAm0tgA4j8ARytshatpRStm8Audl0BAWADiTeFOIk7SwEAAZMAwAD+zkqtvwEcrcYuwABEGcAAW9MCAAKCrdbALnhAg63iwC54rQDAAFvuP06vS69ZAACbTGADiTcBHK9bLoYlAQABgq9mwC54QADAAFvlSq95ASIcr4AuwABEGcAAW9MCAAKDr5DALnkDga+fwC52XQDAAFvuAByvty7AAEQZwABb0wIAAoKvx8AueECBr9PALnZdAMAAW+4/Sa/qIiWv+IGv7sAudl1gA4k3AB6wFMAA9/wCAAIWsCgUsB7ALnZdAQFgA4k3hO+JPRawMy6bOsAAW94APgNOsfqyBwAAm0tgA4j8ARyyIBayExSyCcAudl0BAWADiTeFOIk7SwEAAZMAwAD+zk6yObJJAACbTWADiTcBHLJLLoYlAQABgrJWwC55rwDAAFvlSrJrASIcsnIurngCAAKAsoLALnZRg7KLwC553gDAAFvnARyyqS7AAEQZwABb0wIAAoCyucAudlGCssLALnmvAMAAW+4/SbPqJbP2gLPuwC52UWADiYQ+Akm0FCIltCKBtBjALnZdYAOJhAAetETAAPf8AgACFrRWFLROwC52UQABYAOJhIDtiYcWtGsUtGHALnZdAQFgA4mEgO2JhwA+AUq1rwEpP0q2ugEctsEuwABEGcAAW9MCAAIWtuMWttkUttHALnZRAAFgA4mEgO2Jh4WHiZuBturALnZdAMAAW+4/SbcAIiW3DIC3BMAudlFgA4k3ACW3KoG3IMAudl1gA4k3PgFKt0QBHLdLLsAARCHAAFvTAgACFLdkwC52UQABYAOJNxS3bcAudl0BAWADiTcAwABb7D9Jt4Mlt4+At4fALnZRYAOJST4BSbeoJbe2gbeswC52XWADiTc+AUq30gEiHrfZwAD3/AIAAha37RS348Audl0BAWADiTeE74k9Frf4Lps5wABb3QABHrgWwAD3/AIAAha4KhS4IMAudl0BAWADiTeE74k9Frg1LpsuwABb3ABJuFAluF6BuFTALnZdYAOJST4BSrh5ARy4gC7AAEQcwABb0wIAAhS4mMAudlEAAWADiUkUuKHALnZdAQFgA4lJAMAAW+s/P0m53SW56YC54cAudlFgA4k3PgJOugq6FQAArhFgA4OQARy6Fy6bZwIAAha6MhS6KsAudlEAAWADiTeE74k9Gro9sDAAwABb40m6TiIlul2CulLALnwQYAOEJQAhFrp5FLpuwC58EAIBYAOEJYVOhEM+Ak66lrqfAACuN2ADiPwBFrqsFLqhwC58EAIBYAOEJYUehEtJusAhHLrNg7rEwC58b0gBAAErAIkAPgI9i7riwC58bxy7Ix67CJs4AQABFLsawC52UQABYAOJNwCFmwEAAYO7MsAufG8Amz9KvRABHL0XLsAARBnAAFvTAgACg70nwC58b4G9McAudl0AwABb7j8/P0q9WQEqBsAAW++BDb1uvXO+CgAAwABEI8AAW9MAAAABA715vgoAAAABAQG9gwAAAIKUYAOI/AAAYAPAAPxVAUq9kgEiIiW9l4C9ksAufSxgA4kTASW9tIC9r8AufSxgA4kfASIlvc+AvcrALn0sYAOJNwAevePAAPf8AgACFr3yFL3twC59LAABYAOJN4TviT0Wvf0umy7AAFvcAAbAAFvwgQ2/nL+hwABD/wAAwABEIMAAW9MAAAABA7+ywABD/wAAAAUFBb/OAAAAwABEJF0DwAD+vwFgA4mWAL/xAAAAwABEJV0DwAD+vwFgA4mWAMAAQB0AAADAAEQmXQPAAP7xAmADiZZgA4j8AMAAQE8AAADAAEQnXQPAAP7xAmADiZZgA4j8AMAAQHgAAADAAEQfXQPAAP6/AWADiZYAAGADwAD8VQE+A0AcwABAqBbAAEChgMAAQJnALn3HYcAA/u9IAQABFsAAQLOBwABAq8AufdxhwAD+7wDAAP8/wABAmcAAQLkARcAAQdMBwABB3MAAQd4AAGJgA8AA/hsBkwEcwABB5YXAAEHjwC5+jGMBAAEWwABB74DAAEHnwC59x2HAAP7vAMAA/0kBjcAAQfnALn6MHMAAQfeFwABB+cAufoxkAQABlADAAP9BPglOwABCEsAAQhkAAMAARChgA4mWAR/AAEIfiaoBAAEWwABCOBzAAEI0gcAAQi3ALn3cSwEAAYXAAEI1wC5+jADAAP7OgL2JmgA9HMAAQliEwABCRcAufidWAQABhsAAQlzALn7vAMAA/tBOwABCdMAAQoIAAMAARClgA4j8AR/AAEKIiZUBAAGGwABCmsAufu8APRzAAEK2gsAAQqnALn3xgL8CAAIcwABCvoDAAEK3wC59x0sBAAGFwABCv8AufowAwAD+zofAAELFwC5/WADAAP8GPRzAAELng8AAQtrALn4MgL8CAAIcwABC74HAAELowC593EsBAAGFwABC8MAufowAwAD+zofAAEL2wC5/WADAAP8GTsAAQxTAAEMbAADAAEQqYAOI/AEewABDHZseAgACFsAAQzMcwABDL4DAAEMowC59x0sBAAGFwABDMMAufowAwAD+zoWHiZuCwABDOsAuffEATsAAQ1nAAENgAADAAEQrYAOI/AEewABDYpseAgACFsAAQ3gcwABDdIHAAENtwC593EsBAAGFwABDdcAufowAwAD+zoWHiZuDwABDf8AufgwAPRfAAEOchsAAQ5XALn7vhYcUwABDpMAugFUJAImbScAAQ7IhHMAAQ7cuwABEGcAAW9MCAAIUwABDx8AugFUJABTAAEPPwC6ABAgAAMAAW+5KwABD2AEqP0rAAEPwASkAAC5qCAAuam8ALmqVAC5quwAuauEALmsHAC5rRAAua4EALmvXAC5sFQAubEcALm2+AC5ulwAubxAALm+JAC50VQAudbQALnYrAC59BgAufZ0ALoEEAAAAFALAAFvzgQ3AAEQEwABECsAASPQDwABELAAAAWABwABb1AAAAQTAAFv1gQ3AAERmwABEcQmAiQBgA8AAVjgAAQXAAFwCgQ3AAER2wABEdsAARP0AAAADwABEksAARP0AAAACAgLAAESfAAAEgIlgA8AAVjgAwABExAAAAITFXQPAAP59AWADiZYAAGADwABb8wE/AggBwABb9YAAwC6BwQkAwABE4sAAW/IBAAGBwABE7sAugdEACQbAAFv3gQ3AAEUCwABFGMAARUgBAJsuAWrAAEUDYAPAAP9oAgAAAQPAAEUkwABFSAAAAAAAAABgA4McAUrAAEUnARbAAEU9FsAARTMWwABFJy6AicAAW/WHhZvEmy6dEQbAAFv4gQ3AAEVNwABFY8AARZcBAJs5AWrAAEVOYAPAAP9oAgAAAQPAAEVxwABFlwAAAAAAAABgA4McAUrAAEV0ARbAAEWKFsAARYAWwABFdC6AicAAW/WHhZvEmzmc/AbAAFv5gQ3AAEWcwABFssAAReYBAJs6AWrAAEWdYAPAAP9oAgAAAQPAAEXAwABF5gAAAAAAAABgA4McAUrAAEXDARbAAEXZFsAARc8WwABFwy6AicAAW/WHhZvEmzqc/gbAAFv6gQ3AAEXrwABGAcAARi0BAJsvAWrAAEXsYAPAAP9oAgAAAQPAAEYLwABGLQAAAAAAAABg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RH6BwABEesAvMvSDaMAA/xMCr/kWwABEnxbAAESXLpmnwABdpaaEwABdTcAARMqBwABEssAvMvTAAF2/AMAA/xAAwABdUAbAAF24gRLAAETRwABE1sAARcUAAMAARMYAAAABA8AAROXAAEXFAAAAAAAAAFwBPgE9HMAARPYWwABE7i6Zp8AAXaXAAESiAgACJ8AARMs0wABFCwPAAEULwABFwAAAAAAAAABgA8AA/yUBPgE9HMAARSQWwABFFi7AAETAwABdp4P9AQABNMAARSwDwABFLMAARbgAAAACAgLAAEUtAAAAg9ZbAMAARUUAAACAq10DwAD+8QJbXQPAAP6/AVsAAGADwAD/JQE+AT0cwABFXBbAAEVULpmnwABdpYRbAwADJ8AARMwywABFb2ADwAEAAlsBJ7BJJMAARX8BgMAARXvALzQUNMAARYIDwABFgsAARa4AAAAAAAAAYAPAAP8lAT4BPRzAAEWRLsAARM0BAAGBwABFn8AvNB8AwABduQDAAF1TAMAA/xAAwABdUAbAAF25gRLAAEXKwABFz8AARpEAAMAARM0AAAABA8AARdzAAEaRAAAAAQEBwABF9AAAAICrXQPAAP7xAltdA8AA/n0BWwAAXAE+Ak7AAEYDwABGDQAAwABEzl0DwAD+8QJbWwEewABGD8AAXSUBAltbAYDAAEYawC808wA9HMAARi6BwABGJMAvNROD/QEAATTAAEY2A8AARjbAAEaMAAAAAgICwABGNwAAAIP+WwDAAEY6AAAAg2FbAABgA8AA/yUBPgE9HMAARkguwABEyQQAAyemhCTAAEZlAYLAAEZjwC81aybAAEZnAYPAAEZnwC81dl0DwAD+fQFbAa/5FsAARnwWwABGdC6Zp8AAXaWmhMAAXU3AAF2/AMAA/xAGwABduoESwABGlsAARpvAAEcGAADAAETIAAAAAQPAAEanwABHBgAAAAAAAABcAT4BPRzAAEa4FsAARrAumafAAF2lwABEogIAAifAAETPNMAARsoDwABGysAARwEAAAAAAAAAYAPAAP8lAT4BPRzAAEbmFsAARuEWwABG1S7AAETCwABdqYNowAD/E4P9AQABFsAARu4uwABE0MAAXbsAwAD+jQDAAF1QBsAAXbuBEsAARwvAAEcQwABNWQAAwABE0AAAAAEDwABHG8AATVkAAAAB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AEzWAAAAAQEBwABMRQAAAMAARJBbAABgA8AA/yUBPgE9HMAATFwuwABEyQUAAyemhCTAAEx/ARTAAEx3wC89yQsAHMAATISBwABMgcAvNstLAQABFMAATIXALz3JCwAAwAD/BQKv+YbAAEymwC86tsAARNUqwABdvwDAAP6NAMAAXVM9j8AATPPALztCHMAATPqHwABM88AvO0JkAQABlADAAP9BAMAA/xBJwABNChTAAE0OwC87VwgAPgE9HMAATScWwABNHy6Zp8AAXaXAAESmAAAAAMAAXVY/PRzAAE1FFsAATT0umafAAF2lgowBAAEnhDYAwABdVAbAAF28gRLAAE1ewABNY8AATcUAAMAARLcAAAABA8AATW3AAE3FAAAAAAAAAFwBPgE9HMAATX4WwABNdi6Zp8AAXaXAAESiAgACJ8AARNY0wABNjgPAAE2OwABNwAAAAAAAAABgA8AA/yUBPgE9HMAATacWwABNohbAAE2ZLsAARMPAAF2qg2jAAP8Tg/0BAAEWwABNry7AAETXwABdvQDAAP6NAMAAXVAGwABdvYESwABNysAATc/AAE4qAADAAETXAAAAAQPAAE3YwABOKgAAAAEBAcAATdkAAACD1lsAAFwBPgJOwABN9MAATfkAAMAARNhgA8AAXZkBHMAATgMWwABN+y7AAETDwABdqksBAAGAwABOBMAvP48AwAD/BT0cwABOE4HAAE4OwC8/oMAARLcBAAEWwABOHi6Zp8AAXaUAwABdnwbAAF2+gRLAAE4vwABOQMAAURcAAMAARJkBasAATjBgA8AA/2gCAAABA8AATk/AAFEXAAAABgQEwABOUAAAAMAARNlbAMAATl8AAACB110DwAD+fQFbAMAATmIAAADAAETaWwDAAE5xAAAAgk5dA8AA/n0BWwACwABOfwAAAMAARJxdA8AA/vECW1sBagBgA8AA/yV5wABOigAAAMAARJ1dA8AA/vECW1sBagBgA8AA/yV5XAE+AT0cwABOoBbAAE6YLpmnwABdpYRbAwADJ8AARNsywABOtmADwAEAAlsBJ7BJJMAATtADgMAATsLAL0A5J8AARNyCwABOy8AvQFg0wABO0wPAAE7TwABREgAAAAAAAABgA8AA/yUBPgZOwABO48AATukAAMAARN1dA8AA/r8BWwEcwABPFhzAAE7tgcAA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AQEBwABF6wAAAICWYAO8iAAAXAE+AkAhHMAARhcWwABGCC7AAEWSwABeUMAAXzJIAQABKwDAAP91wABGCMAARh4BJAACJ8AARgUnwABGBj0cwABGmRbAAEaKLsAARZLAAF5QwABfMrHQAgACLoDAAEa4wC//HwDAAF8fBsAAX3eBF8AARsfAAEbYwABHrwAAsc0BasAARshgA8AA/2gCAAABA8AARurAAEevAAAAAQEBwABG+QAAAICWYAO/OgAAXAE+AkAhHMAARxwWwABHDS7AAEWSwABeUMAAXzJIAQABKwDAAP91wABHDcAARyMBJ8AARgc9HMAAR4wWwABHfS7AAEWSwABeUMAAXzKxzQIAAi6AwABHpcAv/80AwABfHgbAAF94gRfAAEe0wABHxcAASIEAALHPAWrAAEe1YAPAAP9oAgAAAQPAAEfQwABIgQAAAAEBAcAAR9kAAACAlmADwACV2QAAXAE+AkAhHMAAR/wWwABH7S7AAEWSwABeUMAAXzJIAQABKwDAAP91wABH7cAASAMBJ8AARgg9HMAASGUWwABIVi7AAEWSwABeUMAAXzKxzwIAAi6AwABId8AwAHMAwABfIAbAAF9TgRfAAEjUwABI2cAASOsAAsAARZbAAF5QAAAAAQPAAEjfwABI6wAAAAEBAcAASOcAAACD7GADwAEAAgAAXAAGwABfVIEXwABJPMAASUHAAElRAALAAEWXwABeUAAAAAEDwABJRcAASVEAAAABAQHAAElNAAAAg+xgA8ABAAIAAFwABsAAX1WBF8AASZzAAEmhwABJvQACwABGAcAAXlAAAAABA8AASbLAAEm9AAAAAQEBwABJtwAAAICWYAPAAQCDAABcAAbAAF9WgRfAAEoLwABKEMAASjIAAsAARgDAAF5QAAAAAQPAAEokwABKMgAAAAEBAcAASiwAAACAlmADwAEAAgAAXAAGwABfV4EXwABKlMAASpnAAEq1AALAAEWiwABeUAAAAAEDwABKqsAASrUAAAABAQHAAEqvAAAAgJZgA8AA/hsAAFwABsAAX1iBF8AASwLAAEsHwABLKAACwABFr8AAXlAAAAABA8AASxnAAEsoAAAAAQEBwABLIgAAAICWWwAAXAAAAC/IuAAvytIAL8uzAC/MqQAvzjIAL8/PAC/QlwAv0T0AL9IqAC/SzgAv07MA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UAAAAAEDwABCWcAATv8AAAAAAAAAYAPAAGI4AT4DTsAAQnTAAEJ5AACCa2ADwABiBgEcwABCey7AAEYvwABeUAEBYAPAAGIGAWrAAEKfXQPAAP6/AWADwABiBsABIhkAwABfu0fAAEKsgMAAQrTAMDd7EgHAAELZasAAQtlgA8AAYgbAAR1aAD4CTsAAQuzAAELyAACAlmADwAD8VQEcwABC9C6wLQAAAADAAF/FSsAAQwgBHsAAQxPAAGLFAQABgcAAQyXAMDfnAAHAAENKasAAQ0pgA8AAYgbAAR10AD4CTsAAQ17AAENkAACAlmADwAD8JwEcwABDZi7AAEZGwABeUAAAAADAAF+tSsAAQ30BHsAAQ4jAAGKeAQABgcAAQ5nAMDg+AAHAAEO+asAAQ75gA8AAYgbAAR2NAD4CTsAAQ9XAAEPbAACAlmADwAD8zQEcwABD3S7AAEZDwABeUAAAAADAAF+sSsAAQ/kBHsAARATAAGKvAQABgcAARBjAMDibAAHAAEQ9asAARD1gA8AAYgbAAR2mAD4CTsAARFTAAERaAACAlmADwAEAAgEcwABEXC6wtgAAAADAAF/GSsAARHIBH8AARH3AAGL+AQABgcAARJHAMDj4AAHAAES2asAARLZgA8AAYgbAAR3AAD4BSsAARMQBasAARNFgA8AAYnfAAPs1AcAARQNqwABFA2ADwABiBsABHdkAPgNOwABFJcAARS4AAIJuYAPAAJBsASbAAEUlARzAAEUwLqzTAAAAAMAAX5xgA8AAkGxOwABFT8AARVQAAIKUYAPAAGPLARzAAEVWLockAAAAAMAAX71KwABFbgEfwABFecAAYm0CAAKBwABFj8AwOXsmwABFmQGCwABFmcAwOatgA8AAZFkAAcAARb1qwABFvWADwABiBsABHfIAPgNOwABF1MAARdkAAIKUYAPAAGPLARzAAEXbLockAAAAAMAAX71OwABGB8AARg8AAIPVXQPAAP6/AWADwABiOAEcwABGES7AAEVrAAFgA8AAYjgAAMAAYSpKwABGKgEfwABGNcAAYygCAAImwABGRwGBwABGR8AwOhdgA8AAY/OCwABGTcAwOjsAAcAARnRqwABGdGADwABiBsABHgwAPgNOwABGisAARo8AAIKUYAPAAGPLARzAAEaRLockAAAAAMAAX71OwABGusAARsIAAIPVYAPAAGM5ASbAAEa6ARzAAEbELrDKAAAAAMAAX85gA8AAYzlKwABG3AEfwABG58AAa/sCAAImwABHDQGBwABHDcAwOrZgA8AAY/OCwABHE8AwOtoAAcAARzpqwABHOmADwABiBsABHigAPgZOwABHUMAAR1UAAIKUYAPAAGPLARzAAEdXLockAAAAAMAAX71OwABHgcAAR4kAAMAARfRgA8AAYxkBJsAAR4EBHMAAR4susMoAAAAAwABfzmADwABjGU7AAEe3wABHvgAAKV0DwAD+vwFgA8AAYjgBHMAAR8AuwABFawABYAPAAGI4AADAAGEqTsAAR+fAAEfyAADAAEX1YAPAAGI4ARzAAEf0LsAARWgAAAAAwABhKU7AAEgXwABIJgAAsjNgA8AA/FUBHMAASCgusC0AAAAAwABfxUrAAEg8AR/AAEhHwABsEAUABSbAAEh6AYHAAEh6wDA7UmADwABj84LAAEiAwDA7doPAAEiJwDA7qITAAEiRwDA72oXAAEidwDA8AgABwABIy2rAAEjLYAPAAGIGwAEeQgA+A07AAEjuwABI8wAAgpRgA8AAY/MBJsAASO4BHMAASPUuhyQAAAAAwABfvWADwABj807AAEktwABJNAAAhItdA8AA/vECYAO+N2ADwABiOAEcwABJQi609QECYAO+N2ADwABiOAE0wABJfQPAAEl9wABJpAAAAAEBAcAASYsAAACCamADviUAAGADwABiOAFKwABJlgEcwABJli6wygAAAADAAF/OAMAAYR5KwABJrwEfwABJusAAY5kCAAKBwABJ08AwPImCwABJ2cAwPLkAAcAASf9qwABJ/2ADwABiBsABHlwAPgNOwABKFsAASiYAALSYYAPAAGPLARzAAEooLockAAAAAMAAX71OwABKScAASk4AAIKUYAPAAGPLARzAAEpQLockAAAAAMAAX71KwABKaAEfwABKc8AAYxgCAAKBwABKhcAwPW4mwABKlgGCwABKlsAwPZJgA8AAY/MAAcAASrpqwABKumADwABiBsABHnYAPgNOwABK4MAASu4AAIU4XQPAAP6/AWADwABjywEcwABK8C7AAEVgAAAAAMAAYRdOwABLF8AASyAAAIJuYAPAAGI4ARzAAEsiLrDKAAAAAMAAX85KwABLOgEfwABLRcAAY6kCAAKBwABLYMAwPf4mwABLbwGCwABLb8AwPitgA8AAYl0AAcAAS5dqwABLl2ADwABiBsABHpIAPgFKwABLrQEfwABLuMAAY8YAAAAAAcAAS+lqwABL6WADwABiBsABHq4APgJOwABMCsAATA4AAJomYAO+EwEcwABMEC6ZHQAAAADAAF+aSsAATCUBH8AATDDAAGNcAQABgcAATEnAMD7BAAHAAExsasAATGxgA8AAYgbAAR7KAD4DTsAATJPAAEycAACGHWADwABiOAEcwABMni6wygAAAADAAF/OTsAATMHAAEzGAAC0VmADvIgBHMAATMgusckAAAAAwABf1ErAAEzrAR/AAEz2wABjugIAAoHAAE0SwDA/FoLAAE0cwDA/OgABwABNQGrAAE1AYAPAAGIGwAEe5AA+Ak7AAE1pwABNdwAAtj9gA786ARzAAE15LrHFAAAAAMAAX9VKwABNlgEfwABNocAAY3wBAAGBwABNv8AwP5gAAcAATexqwABN7GADwABiBsABHv4APgFKwABOAQFqwABODmADwABjfcAA+zwBwABOR2rAAE5HYAPAAGIGwAEfGgA+Ak7AAE5pwABObgAAgL1gA8AAmHoBJsAATmkBHMAATnAuscgAAAAAwABf1mADwACYekrAAE6GAR/AAE6RwABjbAEAAYHAAE6lwDBAGQA9MMAATrYfwABOwMAA/a0BAAEkwABO+gMnwABGSIDAAE7zwDA3eyeBagAGwABfsIEYwABPBMAATxDAAFRgAADAAEY8wABeUAAAAAEDwABPHcAAVGAAAAABAQHAAE8qAAAAwABFwmADwABg/gAAYAOCUwE+A07AAE9KwABPTwAAgmtgA8AAYD0BHMAAT1EuwABGL8AAXlABAWADwABgPQFqwABPcV0DwAD+vwFgA8AAYD3AASJpAMAAX7tHwABPfoHAAE+GwDBA2QcBwABPp2rAAE+nYAPAAGA9wAEbKAA+AUrAAE+0ARbAAE/MHMAAT7suwABGMMAAXlAAAAAAwABfpYPzwABg8gHAAE/rasAAT+tgA8AAYD3AARtBAD4BSsAAT/sBFsAAUBQcwABQAi7AAEYtwABeUAAAAADAAF+jg/PAAGEAAcAAUDNqwABQM2ADwABgPcABG1oAPgJOwABQb8AAUIMAALEqYAOIvAEmwABQbwEcwABQhS7AAEY8wABeUAEA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wABJjwAAwABHX8AAY8cAAAABA8AASRrAAEmPAAAAAgICwABJKAAAAIPbYAPAAGRvAMAASTwAAADAAEdUYAPAAGPlAABgA8AA/FUBPgFKwABJTwEcwABJYxbAAElWLoXbwABkcb2HwABjxwIAAhbAAElxgMAASWvAMetthdvAAGRxgcAASX/AMet9AMAAY+EAADHnbwAx57QAMegPADHohwAx6SkAMemVADHqVwAx6z0AMevbAAAACALAAGR/gSTAAEqmwABKtcAATd4HmrMAAgAAl05gA8AA/2gBWwAAg9lgA8AA/2gBWwFgAcAA/2gAAAABBcAAZIyBJMAASs/AAErVwABK5gEAAAPAAErkwABK5gAAAAAAAABdA8AAZH8CXwMAAF8DAQABPwEJAcAAStXAAP9+AAAAAAoGwABkgYEkwABK68AASu3AAEs2AACa8QAAAAEDwABK8sAASzYAAAACAgLAAEsGAAAIgpRgA8AAY8sAwABLDgAAIB9fAwEAAABfAwAAAUrAAEsbARzAAEsggMAASxvAMeywhFICAl8DAABfAwEAAi6BwABLLcAx7MAAwABj3wbAAGSCgSTAAEs7wABLPcAAS3cAAIaOAAAAAQPAAEtKwABLdwAAAAICAsAAS14AAAiClGADwABkOgDAAEtmAAAgH18DAQAAAF8DAAABSsAAS3MBKwbAAGSDgSTAAEt8wABLfsAAS8gAALUlAAAAAQPAAEuTwABLyAAAAAICAsAAS68AAAiClGADwABkGQDAAEu3AAAgH18DAQAAAF8DAAABSsAAS8QBKwbAAGSEgSTAAEvNwABLz8AATDIAALUkAAAAAQPAAEvowABMMgAAAAICAsAATBMAAAiClGADwABkKADAAEwbAAAgH18DAQAAAF8DAAABSsAATC4BKwbAAGSFgSTAAEw3wABMOcAATHsAAIaaAAAAAQPAAExKwABMewAAAAICAsAATGIAAAiClGADwABkWQDAAExqAAAgH18DAQAAAF8DAAABSsAATHcBKwbAAGSGgSTAAEyAwABMgsAATMYAAIaUAAAAAQPAAEyUwABMxgAAAAICAsAATK0AAAiClGADwABj8wDAAEy1AAAgH18DAQAAAF8DAAABSsAATMIBKwbAAGSHgSTAAEzLwABMzcAATQ0AAIakAAAAAQPAAEzdwABNDQAAAAICAsAATPQAAAiClGADwABkBgDAAEz8AAAgH18DAQAAAF8DAAABSsAATQkBKwbAAGSIgSTAAE0SwABNFMAATVQAAIaMAAAAAQPAAE0kwABNVAAAAAICAsAATTsAAAiClGADwABkRADAAE1DAAAgH18DAQAAAF8DAAABSsAATVABKwbAAGSJgSTAAE1ZwABNW8AATZMAALUfAAAAAQPAAE1nwABNkwAAAAICAsAATXoAAAiClGADwABkTwDAAE2CAAAgH18DAQAAAF8DAAABSsAATY8BKwbAAGSKgSTAAE2YwABNmsAATdwAALUeAAAAAQPAAE2rwABN3AAAAAICAsAATcMAAAiClGADwABkbwDAAE3LAAAgH18DAQAAAF8DAAABSsAATdgBKwAAMeyGADHtAwAx7VcAMe2rADHt/wAx7lMAMe6nADHu+wAx708AMe+jADHv9wAAAAoCwABkjYEkwABN4cAATfDAAFIPB8AAR20AAgAAl05gA8AA/2gBWwAAg9lgA8AA/2gBWwFdAcAAZH8CXwMAAF8DAQAAAAABBcAAZJmBJMAATizAAE4ywABORwEAAAPAAE5FwABORwAAAAAAAABdA8AAZI0CXwMAAF8DAQABPwEJAcAATjLAAGSMAAAAAAkGwABkj4EkwABOTMAATk7AAE58AAKfVAAAAAEDwABOV8AATnwAAAACAgLAAE5rAAAIgpRgA8AAY8sAwABOcwAAIB9fAwEAAABfAwAAAAbAAGSQgSTAAE6BwABOj8AATuQAAIaOAWrAAE6CYAPAAP9oAgAAAQPAAE6cwABO5AAAAAICAsAATrAAAAiClGADwABkOgDAAE64AAAgH18DAQAAAF8DAAABSsAATssBHMAATssun1QCAAKAwABO1cAx8TiBwABO28Ax8UgAwABkjwbAAGSRgSTAAE7pwABO98AAT1wAALUlAWrAAE7qYAPAAP9oAgAAAQPAAE8MwABPXAAAAAICAsAATygAAAiClGADwABkGQDAAE8wAAAgH18DAQAAAF8DAAABSsAAT0MBHMAAT0Mun1QCAAKAwABPTcAx8bmBwABPU8Ax8ckAwABkjwbAAGSSgSTAAE9hwABPb8AAT+cAALUkAWrAAE9iYAPAAP9oAgAAAQPAAE+IwABP5wAAAAICAsAAT7MAAAiClGADwABkKADAAE+7AAAgH18D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YAPAAP4bCWrAAM9fYAPAAP4bgZ4BYAPAAP4bBsAAZVCBJMAA0CnAANA3wADQaAACwABHqQAAAAEDwADQQ8AA0GgAAAACAgLAANBSAAAAgpRgA8AAY/MAwADQZAAAAJomYAO+EwAAYAPAAGPzAAbAAGVRgSTAANFWwADRX8AA0ZMAAsAAR9MAAAABA8AA0W3AANGTAAAAAgICwADRdwAAAJasYAPAAGPLAMAA0YsAAACCV2ADwABj8wAAYAPAAGPLAAbAAGVSgSTAANIkwADSMsAA0k4AArQZAAAAAQPAANI9wADSTgAAAAEBAcAA0koAAACaJmADvhMAAGADwABj8wAGwABlU4EkwADSr8AA0r3AANLaAALAAEfUAAAAAQPAANLJwADS2gAAAAEBAcAA0tYAAACaJmADvhMAAGADwABj8wAGwABlVIEkwADTZ8AA03/AANOdAAK9GgAAAAEDwADTjMAA050AAAABAQHAANOZAAAAmiZgA74TAABdA8AA/n0BYAPAAGPzAAbAAGVVgSTAANPZwADT8cAA1A8AAsAAR9UAAAABA8AA0/7AANQPAAAAAQEBwADUCwAAAJomYAO+EwAAXQPAAP59AWADwABj8wAGwABlVoEkwADUkcAA1J7AANS9AALAAEeqAAAAAQPAANSpwADUvQAAAAEBAcAA1LgAAACClGADwABj8wAAYAPAAGRZAAbAAGVXgSTAANV1wADVesAA1mwAAsAAR9YAAAABA8AA1ZTAANZsAAABAACCemADwAD/aAFbBAQEwADVngAAAIJXXwMAAADAANW8AAAAhThdA8AA/r8BYAPAAGPLAMAA1eAAAACizV0DwAD+vwFgA8AAY8sAwADV+gAAAMAAR9dhAwRfAwAAYAPAAGPLYAPAAGQZYAPAAGPLXAAAXAAGwABlWIEkwADXCMAA1xvAANqBAAHAAEfYAAAAAQPAANcqwADagQAAAAEBAcAA1zQAAACClGADwABjywAAYAO+EwE+A07AANdMAAAAwABH2WADvhMAPRzAANdjgMAA117AMmy8wABHUwEAATTAANd3A8AA13fAANghAAAAAQEBwADXiQAAAKl6YAPAAGQZAABgA8AA/yUBPgJJwADXnyElwADXyBbAANe4FsAA17CCwADXo8AybQ+We8AAZBu1tr4hYAO+E0rAANfZAD89icAA1+fAMmzVJsAA1+cBFsAA2AsWwADYA4LAANf2wDJtD5Z7wABkG7W2viFgA74TAMAAY91KwADaagGBwADaccAybNUAADJn1gAyaAYAMmhYADJoqgAyaRwAMmn3ADJqSQAyap0AMmrdADJrHwAya2YAMmuvADJr8wAybJAAMm2hAAAADgAAAQbAAGPKgSTAAEmUwABJmcAASqMAAcAAR9rAAGPHAAAAAQPAAEmkwABKowAAAAMDA8AASbQAAACB110DwAD+vwFgA8AAY8sAwABJxgAAAIJOXQPAAP6/AWADwABjywDAAEnWAAAAwABHVGADwABj5QAAYAPAAPxVAT4DScAASechHMAASfQWwABJ7YDAAEnrwDJuFWHAAP7vSAEAARbAAEn5gcAASffAMm4sYcAA/u8AwAD/P0rAAEoBASo/RcAAShEBwABKGsAASiAAACdgA8AA/hsBkwEcwABKK4PAAEolwDJup2MBAAEWwABKL4DAAEotwDJuFWHAAP7vAMAA/0kBi8AASjfAMm6nHMAASjyDwABKN8AybqdkAQABlADAAP9BPgFJwABKRiEcwABKVBzAAEpMgMAASkvAMm4VSwEAAYPAAEpNwDJupwDAAP7OvYfAAGPHAgACHMAASl2BwABKXMAybixLAQABg8AASl7AMm6nAMAA/s6CwABKZsAybkMAwABj4T4BSsAASnwBKj9KwABKlgEpAYEkADJvfAAxsSQAMbaHADG8mAAxw1YAMcnHADHNLAAx0S4AMdL9ADHVCAAx1tgAMebWADHsBAAx8CgAMfU3ADINZwAyEEQAMh5oADIfdwAyIwIAMiPcADI98QAyVyYAMlzRADJjeAAyZw0AMm3iAAAAGQAybeUAMm98AAAAAQACBsAAZVuChYElAAAIgOcAAMAAlKgAAIENAACksQAAgSYAAID7AACBQAAAvaMAAQEBpPeBbgAAwABRVQABAQG+YIGfAADAAHp4AACBwQEAwACUqAAAgeYBAMAAm9cAAHXAAJS8wACU/sAAlUnAAJWLwACV1sAAldnAAJXtwACV+cAAlf7AAJYLwACWF8AAliHAAJYywACWN8AAlkXAAJZSwACWXsAAlmrAAJZ2wACWgsAAlo7AAJaawACWqMAAlrXAAJbCwACWx8AAltPAAJbdwACW6sAAlvfAAJcDwACXEMAAlxfAAJca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AQACASfAAEkEBMAAZbGBJrljuXYJwABJBQBgA8ABAAIBJ4OEBMAAZbKBJrmHuaMJwABJBgBgA8ABAAIBJ8AASQcEwABls4EmubS53AnAAEkIAGADwAEAAgEnwABJCQTAAGW0gSa57boVCcAASQoAYAPAAQACASfAAEkLBMAAZbWBJromukwJwABJDABgA8ABAAIBJ8AASQ0EwABltoEmul26pwnAAEkOAGADwAEAAgEnwABJDwTAAGW3gSa6zrrVCbh/AWq6rWADwAD/aAJgA8AAeJEABMAAZbiBJrr3uwEJuIABarrbYAPAAP9oAmADwABmqgAEwABlnYEmu1+7ewbAAEkQwABlkABgA8ABAAIBartzYAPAAQACwAEvpATAAGWegSa7mLvDBcAASRLAAGWQAGADwACXGgEfu63AAGgAAQABJ55FAATAAGWfgSa737wNBcAASRPAAGWQAGADwACXGgEfu/jAAGgAAQABJ4C1AATAAGW5gSa8KbxQBcAASRQAYAPAAJcaAR+8O8AAaAABAAEnZAAEwABloIEmvGy8nQXAAEkVwABlkABgA8AAlxoBH7yCwABoAAEAASeagAAEwABloYEmvK28wRjAAEkWwABlkABgA8AAlxoBKwTAAGWigSa80LzkGMAASRfAAGWQAGADwACXGgErBMAAZaOBJrz0vQgYwABJGMAAZZAAYAPAAJcaASsEwABlpIEmvYC9jxjAAEkZwABlkABgA8AAlxoBKwTAAGW6gSa+ZL58CcAASRoAYAPAAQACASeWCQTAAGW7gSa+lb7LBZ32AGADwAD/kgEevqbAAP+rAQABJ8AASRsABMAAZbyBJr7jvxYFwABJHABgA8AA/5IBHr79wAD/qwEAASfAAEkdAATAAGWlgSa/Lr86CbbFwABlkABgA8AAToUABMAAZb2BJsAAQIbAAEChCcAASR4AYAPAAGabAR/AAECUwABmqQAAAAAEwABlvoEmwABAw8AAQNMJwABJHwBdA8AA/vECYAO9/2ADwACXGgEywABA0WADvf9gA8AAlxoABMAAZb+BJsAAQYjAAEGiCcAASSAAXQPAAP7xAmADvf9gA8AAlxoBMsAAQaBgA73/YAPAAJcaAATAAGXAgSbAAEHEwABB2AnAAEkhAF0DwAD+8QJgA8ABAAJgA8AAlxoBMsAAQdZgA8ABAAJg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wABlkAMAA4DAAERJwDKTeILAAEROwDKT5RbAAERdgcAARFbAMpPXgL2+AQDAAGXgAMAA/xA9HMAARIYWwABEcC7AAEkgwABlv4P9AQABNMAARI4DwABEjsAARNUAAAACAgLAAESPAAAApIZgA73/AMAARJcAAADAAEk7YAPAAJcaAABgA8AA/yUBPgE9HMAARKcuwABJOsAAZZADAAOAwABEtcAyk3iCwABEusAylHwWwABEyYHAAETCwDKUboC9vgEAwABl4ADAAP8QPRzAAETsFsAARNwuwABJIcAAZcCD/QEAATTAAET0A8AARPTAAEUyAAAAAgICwABE9QAAAIC9YAPAAQACAMAARPsAAADAAEk7YAPAAJcaAABgA8AA/yUBPgE9HMAARQsuwABJOsAAZZADAAOAwABFGcAyk3iCwABFHsAylRWBwABFJsAylQUAwABl4ADAAP8QSsAARTkBgMAARUDAMpN4BsAAZfyBJsAASBXAAEgpwABKNAAAwABJQQAAAAEDwABIRsAASjQAAAAAAAAAXQPAAP7xAmADwAEAAmADwAEAAgE+BU7AAEhTwABIVwAAgKtdA8AA/vECYAPAAQACYAPAAQACATLAAEhpYAPAAQACYAPAAQACAD0cwABIiRbAAEhxLsAASSXAAGXEg/0BAAE0wABIkQPAAEiRwABI2AAAAAICAsAASJIAAACkhmADviUAwABImgAAAMAASTtgA8AAlxoAAGADwAD/JQE+AT0cwABIqi7AAEk6wABlkAMAA4DAAEi4wDKVu4LAAEi9wDKWKBbAAEjMgcAASMXAMpYagL2+AQDAAGXgAMAA/xA9HMAASPMWwABI3y7AAEkjwABlwoP9AQABNMAASPsDwABI+8AASWIAAAACAgLAAEj8AAAAgL1gA8ABAAIAwABJAgAAAMAASTtgA8AAlxoAAGADwAD/JQE+AT0cwABJEi7AAEk6wABlkAMAA4DAAEkgwDKVu4LAAEklwDKWwTUAAAABAGADwAEAAgEcwABJTBbAAEktLsAASSTAAGXDSwEAAYHAAElNwDKWsQDAAP8FIxzAAElTgwDAMpcCSAEAASsAAIHAAElWwDKWsYMAwDKXAgFgA8ABAAIAwABl4ADAAP8QPRzAAEnZFsAAScMuwABJJsAAZcWD/QEAATTAAEnhA8AASeHAAEofAAAA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wADSQMAA0k8AALCGYAPAAQACARzAANJRLsAASV0BAAEWwADScYDAANJqwDLdKIC9vgEAwABmL0rAANJ+ASTAANKrBCfAAEkEgcAA0o/AMt2cJ55FgsAA0pzAMt3gAMAAZe4GwABmHYEmwADSvMAA0tPAANN4AACwegFqwADSvWADwAD/aAIAAAEDwADS5cAA03gAAAABAQHAANL1AAAAlpxgA746AABgA8AAlxoBPgFKwADTAwEjFsAA0xGAwADTCsAy3niFHL4qHMAA0ywusIIBAAGAwADTP8Ay3ngAwABmAhzAANNRLrCOAQABgMAA023AMt54AMAAZgsBYAPAAJcaBsAAZfmBJsAA1LbAANS7wADVfAAAwABJoMAAZZAAAAABA8AA1NnAANV8AAAAAQEBwADU5wAAAJZ7YAO+JQAAYAPAAPxVAT4BSsAA1WIBFsAA1XGAwADVacAy3xKHm74sBsAAZh6BJsAA1crAANXRwADWgAAAsMYAAAABA8AA1ebAANaAAAAAAQEBwADV9AAAAJZ7YAO+JQAAYAPAAQACAT4CScAA1gMcwADWBy7AAEmgwABlkAEAAYDAANYmwDLfbADAAGX5SsAA1jABFsAA1jcuwABJocAAZsw/SsAA1k4BHMAA1lUusMMBAAEWwADWdIDAANZswDLfbIRIvjQAwABmJAbAAGYfgSbAANaFwADWo8AA138AALCfAWrAANaGYAPAAP9oAgAAAQPAANa8wADXfwAAAAEBAcAA1soAAACWe2ADviUAAGADwACX2wE+AknAANbZHMAA1t0uwABJoMAAZZABAAGAwADW/MAy4BsAwABl+T4BSsAA1w4BH8AA1xnAAJfkAQABFsAA1ysuwABJocAAZswAP0rAANdJARzAANdQLrCYAQABFsAA13OAwADXa8Ay4BuESL40AMAAZiUGwABmIIEmwADXhMAA14vAANftAACwxAAAAAEDwADXn8AA1+0AAAABAQHAANesAAAAlntgA74TAABgA8ABAAIBPgFKwADXuwEcwADXwi6wwwEAARbAANfhgMAA19nAMuDNhEi+FQDAAGYkBsAAZiGBJsAA1/LAANgQwADYegAAsJsBasAA1/NgA8AA/2gCAAABA8AA2CjAANh6AAAAAQEBwADYNQAAAJZ7YAO+EwAAYAPAAJfbAT4BSsAA2EQBHMAA2EsusJgBAAEWwADYboDAANhmwDLhQ4RIvhUAwABmJQbAAGYigSbAANh/wADYhsAA2TgAALDFAAAAAQPAANiZwADZOAAAAAEBAcAA2KEAAACWe2ADvf8AAGADwAEAAgE+AknAANiwJcAA2LyAwADYtMAy4a1gA74aPgFKwADY1gEcwADY3S6wwwEAARbAANj8FMAA2PTAMuGtAAFgA74ahEi+HADAAGYkP0rAANkQARzAANkXLrDEAQABJsAA2SwBgMAA2SzAMuGtYAO+EwDAAGYgBsAAZiOBJsAA2T3AANlbwADaGQAAsJ0BasAA2T5gA8AA/2gCAAABA8AA2XLAANoZAAAAAQEBwADZegAAAJZ7YAO9/wAAYAPAAJfbAT4CScAA2YklwADZlYDAANmNwDLibGADvho+AUrAANmvARzAANm2LrCYAQABFsAA2dkUwADZ0cAy4mwAAWADvhqESL4cAMAAZiU/SsAA2e0BHMAA2fQusJsBAAEmwADaDQGAwADaDcAy4mxgA74TAMAAZiEGwABmJIEmwADaW8AA2mLAANveAACwwwAAAAEDwADaeMAA294AAAABAQHAANqHAAAAhEhgA74EAABgA8ABAAIBPgRJwADalhzAANqigMAA2prAMuMfSAEAARbAANq1FsAA2qUutR3AAGWQwABl0rIhuaEAwAD/dUrAANrKASetsT9OwADa3sAA2uIAAICsYAPAAQCDARbAANrsgMAA2uTAMuMfpYy+BknAANr+HMAA2w0WwADbBoHAANsCwDLjd4G8wAEAiUgBAAEnh40AwAEAET4DScAA2yAcwADbLRbAANsogcAA2yTAMuN3TsABAI5IAQABJ7HwAMABABFKwADbOAEnwABI+j9JwADbShzAANtXFsAA21KBwADbTsAy43dOwAEAjoHYAQABJ4C1AMABABRKwADbaAEnwABI9z9KwADbegEnmtw/SsAA25ABHMAA26gawADbl8AAZZpLAQABHMAA278WwADbthbAANuxgMAA26nAMuMfgL2+AYPGwAEAB5YJAQABFsAA29MawADbwcAAZZphwAD+7wDAAP9EAMAA/s4GwABmJYEmwADb48AA3AHAANx6AACwmAFqwADb5GADwAD/aAIAAAEDwADcG8AA3HoAAAABAQHAANwqAAAAhEhgA74EAABgA8AAl9sBPgFKwADcOQEfwADcRMAAl+QBAAEcwADcVi6wwwEAAYDAANxtwDLkzwDAAGYkAAbAAGYmgSbAANx/wADclsAA3YsAALCIAWrAANyAYAPAAP9oAgAAAQPAANypwADdiwAAAAEBAcAA3LYAAACWe2ADvjcAAGADwACXGgE+A0AiFsAA3NSAwADczMAy5UmHn74oARbAANzqgMAA3OLAMuVJhB6+KcAA3MzAANzyAE7AAN0EwADdCQAAgL1gA8AAlxoBHMAA3QsuwABJhMAAZZADAWADviUDgMAA3TbAMuVJFsAA3T8uwABJmMAAZZDAAGX1FsAA3WAuwABJIMAAZb8AwABl60rAAN18AYHAAN2DwDLlkgbAAGYngSbAAN2QwADdp8AA3w4AALB4AWrAAN2RYAPAAP9oAgAAAQPAAN24wADfDgAAAAEBAcAA3cgAAACWe2ADvjoAAGADwACXGgE+BEAiFsAA3eaAwADd3sAy5i2Hn74oARbAAN38gMAA3fTAMuYthB6+KcAA3d7AAN4EAE7AAN4SwADeHAAArr5gA8ABAAIBIxzAAN49FsAA3i6AwADeJsAy5i2FGb4zSAEAASsAwAD/dScAFsAA3mMWwADeVIDAAN5MwDLmLYUZvjOAvb4BAWADwAEAAk7AAN50wADefAAAhEhgA8ABAAIBHMAA3n4uwABJVsAAZZABAAEWwADenYDAAN6VwDLmLYRIvjQAwABl90rAAN6rARzAAN6yLsAASX/AAGWQAQABJMAA3wkGgsAA3trAMubQJ4C1gcAA3uXAMuZ2J4C1FsAA3vqAwADe8sAy5i2Avb4BJ8AASaIAwABl5wbAAGYogSbAAN9QwADfV8AA4JoAAMAASaMAAAABA8AA33fAAOCaAAAAAgICwADfjQAAAIRIYAO+BADAAN+dAAAAlntgA73/AABgA8ABAAIBPgJOwADgPMAA4EgAAIZ0YAPAAQACARzAAOBKLsAASVbAAGWQAQABgMAA4GHAMueIAMAAZfdKwADgbwEkwADglgOCwADgecAy568ngWoWwADgkIHAAOCIwDLnloC9vgEGwABmKYEmwADgn8AA4KbAAODcAADAAEmkAAAAAQPAAOC9wADg3AAAAAEBAcAA4MwAAACGHWADwABiOAAAYAPAAQACAUrAAODZASeHcAbAAGXcgSbAAODhwADg7MAA4RkBAMAASWsAAAABA8AA4QfAAOEZAAAAAAAAAGADwAEAAgFKwADhCgEnwABJpQbAAGXdgSbAAOGVwADhoMAA4cEBAMAASaYAAAABA8AA4bDAAOHBAAAAAAAAAGADwAEAAgFKwADhswEnwABJpwbAAGYqgSbAAOIxwADiPMAA420AAMAASagAAAABA8AA4k/AAONtAAAAAQEBwADiXQAAAIVWYAPAAGRZAABgA8AAlxoBPgFKwADicQEcwADijBbAAOJ4LsAASTXAAGXLmXYCAAKAwADimMAy6QI0wADipgPAAOKmwADjaAAAAAAAAABgA8AAlxoBPgM9IxzAAOLEFsAA4rEuwABJNsAAZZDAAGWuSAEAASsAwAD/dRfAAOKxLsAASTbAAGWQH8AA4szAAGaaAAAAAMAAZa4rAWADwABmjE7AAOLuwADi+wAAmYNgA8ABAAIBHMAA4xAWwADi/S7AAEk2wABlkMAAZa7AAEmpAQABgMAA4xzAMukCAMAAZpBKwADjMQEcwADjOC7AAElUAgACFsAA40UuwABJIsAAZcGBwADjVMAy6awAwABmFwDAAP8MBsAAZiuBJsAA43LAAOOJwADlEQAAsH4BasAA43NgA8AA/2gCAAABA8AA45fAAOURAAAAAQEBwADjoQAAAIKUYAPAAGPLAABgA8AAlxoBPgNJwADjrRbAAOO2gMAA47HAMupVurfAAGPVPgFKwADkFgEfwADkIcAAaEABAAExwADkLmADwABn2QMfwADkPMAAaAABAAEWwADkWBbAAORNLriAwABluMAASarAAGa1ACbAAORzARrAAORzwABln2ADwABn2SbAAOSPARzAAOSPLsAASagBAAEmwADkowGAwADko8Ay6lVgA8AAZFkAwABmKmADwABn2QA/TsAA5MvAAOTZAAC6vGADwABj8wEmwADkywGAwADk28Ay6lVgA8AAY/NKwADk5QEcwADk7C6wfAEAARbAAOUFgcAA5PfAMusZlnvAAGP1AMAAZiwGwABmLIEmwADlFsAA5S3AAOYVAACwfAFqwADlF2ADwAD/aAIAAAEDwADlN8AA5hUAAAABAQHAAOVEAAAAlntgA74TAABgA8AAlxoBPgFKwADlmQEfwADlpMAAaEABAAExwADlsWADwABn2QIfwADlvcAAaAABAAEWwADl2RbAAOXOLriA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ATC4ASo/ScABMMohFsABMOsWwAEw1IDAATDPwDMx/7UiwABkXYFVwAD+oUrAATD0ASo/ScABMQYhFsABMSQWwAExEIDAATELwDMx/7UjwABkX4FVwAD+oUrAATEtASo/RsABMT/AATFvwAExTQAAAIDtYAPAAGPLABbAATFfgMABMVrAMzH/tSHAAGRcPgFJwAExdyEWwAExhoHAATF8wDMyqYedwABj0ErAATGRASo/SsABMakBKQbAAGaYgSbAATG9wAExycABNNoAAIaaAWrAATG+YAPAAP9oAgAAAQPAATHawAE02gAAAAICAsABMegAAAiClGADwABkWQDAATHuAAAggLVbAABbAT4HScABMfccwAEx+y7AAEnlwABlkAEAAYDAATIRwDMzLgDAAGaXPgI9HMABMiMWwAEyIC6D6cAAZo6CjgEAASTAATJMAieB/RbAATJEFsABMjWAwAEyMMAzMy61IcAAZFxhwAD+7wDAAQBgSsABMlUAPz0cwAEyZy6a8QEAARbAATJygMABMm3AMzMuhVXAAGRbAMAAZpE9HMABMoYWwAEygy6D6cAAZo6CjgEAASeAtQDAAQBgRsABMpbAATLGwAEypAAAAIDtYAPAAGPLABbAATK2gMABMrHAMzMutSHAAGRcPgI9HMABMtEWwAEyzi6D6cAAZo6CjgEAASeAtQDAAQBgPRzAATLjLprxAQABgsABMunAMzQLAMAAZpFOwAEzBMABMwoAAIMeYAPAAPxVASpGwAEzF8ABM0/AATMlAAAAgO1gA8AAY8sAFsABMzeAwAEzMsAzMy61IsAAZF0+BEnAATNXIYLAATNcwDM0az4BPRzAATNwFsABM20ug+nAAGaOgo4BAAEngLUAwAEAYD89HMABM40WwAEzii6D6cAAZo6CjgEAASeAtQDAAQBgPRzAATOfLprxAQABg8ABM6XAMzSIAMAAZpE9isABM7fAMzRrKUnAATPPIRbAATPtFsABM9mAwAEz1MAzMy61I8AAZF+BVcAA/qE+Aj2KwAEz/sAzNGsqRsABNBPAATRIwAE0IQAAAIDtYAPAAGPLABbAATQzgMABNC7AMzMutSPAAGRfPgRJwAE0UiGCwAE0V8AzNGs+AT0cwAE0bRbAATRqLoPpwABmjoKOAQABJ4C1AMABAGA/PRzAATSOFsABNIsug+nAAGaOgo4BAAEngLUAwAEAYD0cwAE0oi6a8QEAAYPAATSowDM1XgDAAGaRPYrAATS8wDM0ayk/AAAzLrYAMy9QADMvzAAzMCIAMzCxADMxQAAzMc8AMzL4ADM1+gAAAAgCwABmm4EmwAE038ABNOXAATj1A8AASeYAAAFgAcAA/2gAAAIEwABmnoEmwAE2csABNoYJwABJ58AAZZAAXQPAAP7xAmADwAEAAmADwAEAAgEywAE2hGADwAEAAmADwAEAAgAEwABmn4EmwAE2nMABNq4JwABJ6MAAZZAAXQPAAP+zAWADwAEAAgEewAE2qcAAwyEAAWADwAEAAgAAAQXAAGapAAAAAAQAAAMAAAAAAAAAAABgA8AAZpsBPwEJAQDAAP9+AAAAAAcGwABmoYEmwAE2s8ABNrjAATboAADAAEmNAAAAAQPAATa+wAE26AAAAAEBAcABNsYAAACAvWADwAEAAgAAYAPAAPxVAUrAATbPARzAATbaFsABNs8uwABJ6MAAZZDAAGafgxwBAAGAwAE248AzNxgAwAD/vwbAAGaigSbAATbswAE28cABNyQAAMAASZUAAAABA8ABNvnAATckAAAAAQEBwAE3AQAAAIC9YAPAAQACAABgA8AA/FUBSsABNwoBIRzAATcWFsABNwsuwABJ6MAAZZDAAGafgxwBAAGAwAE3H8AzN4wAwAD/vwbAAGajgSbAATcowAE3LcABN10AAMAASY4AAAABA8ABNzjAATddAAAAAQEBwAE3QAAAAIC9YAPAAQACAABgA8AA/FUBSsABN0kBHMABN1QWwAE3SS7AAEnowABlkMAAZp9WAQABgMABN1jAMzgBAMAA/8AGwABmpIEmwAE3YsABN2nAATeiAADAAEnpAAAAAQPAATd0wAE3ogAAAAEBAcABN3wAAACfH2ADwAEAAgAAYAPAAQACAUrAATeJARzAATeYFsABN4kuwABJ58AAZZDAAGaeSwEAAYDAATeZwDM4dADAAP8FBsAAZqWBJsABN6bAATerwAE4QQAAwABJ6gAAAAEDwAE3uMABOEEAAAACAgLAATfAAAAAnx9gA8ABAAIAwAE30QAAAMAASetgA8ABAAIAAFwBPgJAIRzAATf7FsABN+suwABJ58AAZZDAAGaeh2QBAAGAwAE4B8AzOOcAwAD/BMABN+rAATgQAD0cwAE4JhbAATgXLsAASefAAGWQwABmnoC/AgACgMABOCfAMzjngcABODPAMzj3AMAA/wYGwABmpoEmwAE4RsABOEvAATiSAADAAEnsAAAAAQPAAThYwAE4kgAAAAEBAcABOGAAAACfH2ADwAEAAgAAYAPAAPxVAUrAAThtARzAATh9FsABOG0uwABJ58AAZZDAAGaeh2QBAAGAwAE4icAzOaMAwAD/BAbAAGangSbAATiWwAE4m8ABOPMAAMAASe0AAAABA8ABOKfAATjzAAAAAQEBwAE4rwAAAIhxYAPAAQACAABgA8AA/FUBPgFKwAE4wAEcwAE41xbAATjHLsAASefAAGWQwABmnsAARGsBAAGAwAE45cAzOhcAwAD/AwAAMzbsADM3YAAzN9UAMzhIADM4uwAzOXcAMznrADM6YwAAAAcCwABmqoEmwAE5HMABOSLAATu1A8AASe4AAAFgAcAA/2gAAAABBcAAZruBJsABOTHAATk3wAE5QwEAAAPAATlBwAE5QwAAAAAAAABgA8AAZqoBPwEJAcABOTfAAP9+AAAAAA4GwABmrIEmwAE5SMABOVPAATlqAQCnfgAAAAEDwAE5YMABOWoAAAAAAAAAYAPAAQACAUrAATljASfAAEnvBsAAZq2BJsABOW7AATl5wAE5kAEAp4AAAAABA8ABOYbAATmQAAAAAAAAAGADwAEAAgFKwAE5iQEnwABJ8AbAAGaugSbAATmUwAE5n8ABObMBAMAASWAAAAABA8ABOarAATmzAAAAAAAAAGADwAEAAgFKwAE5rQEnIAbAAGavgSbAATm3wAE5wsABOd4BAMAASfEAAAABA8ABOdPAATneAAAAAAAAAGADwAEAAgFKwAE51gEnwABJ8gbAAGawgSbAATniwAE57cABOgoBAMAASfMAAAABA8ABOfvAAToKAAAAAAAAAGADwAEAAgFKwAE5/gEnwABJ9AbAAGaxgSbAAToOwAE6GcABOjwBAMAASfUAAAABA8ABOirAATo8AAAAAAAAAGADwAEAAgFKwAE6LQEnwABJ9gbAAGaygSbAATpAwAE6S8ABOmoBAMAASfcAAAABA8ABOmPAATpqAAAAAAAAAGADwAEAAgFKwAE6ZgEng8AGwABms4EmwAE6bsABOnnAATqgAQDAAEn4AAAAAQPAATqMwAE6oAAAAAAAAABgA8AB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M/F/AMAAeeU9HKCygKCtwDPxf7HRAQABFqDJFqC7LrsvwABonsAASzXAAGhqwABohQDAAF5hPRyg2oCg1cAz8X+wNAEAARag5C66lMAAaJ8AwABeYD0coPyAoPfAM/F/sDQBAAEWoQYuuo3AAGigAMAAXmA9HKEYgKETwDPxf4KQAQABaqEcYAPAAQACwAE8nwDAAF5cBsAAaKqBK6EpoTyiaAAAIwFqoSpgA8AA/2gCAAABA6FEomgAAAAAAAAAYAPAAQACAT4BSqFNASQADCfAAEtMJ8AAS00WoXouwABLQMAAaJknwABLThahoC7AAEtBwABomifAAEtPFqHOLrVjwABonSfAAEtQFqHxLrsvwABoniMWogwuupTAAGifJ8AAS1EnAAFgA8ABAAIjFqI+LrqNwABooCfAAEtSJwABYAPAAQACJ4MmBsAAaKyBK6JtooOjuQABwABLU8AAaGoAAAABA6KMo7kAAAABAAABopMAAAC6lGADwAD8VQFqoqFgA8AA/FUAYAPAAGiWAT4GTqK+oscAALA3YAPAAGiWAR+izcAAaLcAAAAAPRyi+Bai7IGi48Az9S+1Y8AAaJ27EQAAAADAAHnyPRyjKRajHYGjFMAz9S+1Y8AAaJ27EAAAAADAAHnwPRejTYGjRMAz9S+7L2qjcWADwABofsABPGPAAGiePRejhYGjfMAz9S+6lICjlMAz9Q3AAGifSqOmAYGjrcAz9S8GwABorYEro76j1KSbAAHAAEtUwABoagAAAAEDo+WkmwAAAAAAAABgA8AAaJYBPgFKpF0BNaRkAAABAGADwABolgEepGTAAGisAAAAADUAAAABAFsBHKR9FqRxgKRvwDP1+7VjwABonbuYAAAAAMAAefaAAMAz9fsGwABoroErpKCktqWEAAHAAEtVwABoagAAAAEDpMelhAAAAAAAAABgA8AAaJYBPgFKpT8BNaVGAAABAGADwABolgEepUbAAGisAAAAADUAAAABAFsBHKVfFqVTgKVRwDP2c7VjwABonbuMAAAAAMAAefSAAMAz9nMGwABosYErs+uz98AASBcAAcAAS1YAAAABA7QIwABIFwAAAA0DA7QjAAAApS5gA7bdALQ3AAAApa9gA7cPALRJAAAAwABLV2ADwAEAAgAKtG0AAADAAEtYXQPAAP59AWADwAEAAgFqAGAD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NAR0FwBIAQABKQDAAP91ABzAAEaGFMAARn/ANATJGABIAQABKQDAAP91PgE9HMAARqIUwABGl8Az+D0OACABAAEnwABLdAAAP0nAAEbTFMAARtfAM/goDQBKwABG4gA/ScAAR0QhHMAAR1QUwABHSMA0A7UVAEgBAAErAMAAeeY9HMAAR2uEwABHXcAz9yUgAQABFMAAR2zANAO1FQAAAD9JwABHfiEcwABHjRTAAEeCwDQEGxYASAEAASsAwAD/dT0cwABHn4XAAEeWwDP3QiABAAEUwABHoMA0BBsWAAAAP0nAAEexIRzAAEfCFMAAR7XANAR0FwBIAQABKwDAAP91PRzAAEfahsAAR8vAM/dfIAEAARTAAEfbwDQEdBcAAAA/ScAAR+4hHMAAR/kUwABH8sA0BMkYAEgBAAErAMAA/3U9HMAASAuHwABIAsAz93wgAQABFMAASAzANATJGAAAAD8GwABosoErwABIHMAASC/AAE/fAAHAAEt1AAAAAQPAAEg9wABP3wAAAAMDA8AASEoAAAClsmEDAWADwAEAAlwAwABIbgAAALsxYAPAAQACAMAASH4AAADAAEtlYAPAAQACAABgA8AAedUBPgZJwABIjSIcwABImYHAAEiRwDQG1EgBAAErAMABABEAHMAASKyCwABIpMA0BuRIAQABKwDAAQARSsAASLUBKz9JwABIxyIcwABI04HAAEjLwDQG1EgBAAErAMABABEBHMAASOaCwABI3sA0BuRIAQABKwDAAQARPgI9HMAASQKAwABI98A0BsAgAQABJ8AAS3YAAErAAEk6ASs/TsAASV7AAElqAAC1Y2ADwAB51QEfwABJcMAAeg8AAAAAScAASYMcwABJj4HAAEmHwDQG1EgBAAEnh6sAwAEAET4BPRzAAEmug8AASaLANAebuxAAAAAAwAB58EnAAEnQHMAASdyBwABJ1MA0BtRIAQABJ55UAMABABE+AD4DTsAASiTAAEoxAADAAEt3XQPAAP6/AWADwAEAAgEcwABKO4HAAEozwDQG1ICmAQABJ4CnAMABACVJwABKTRbAAEpehMAASlHANAgZgVXAAP6hPgE9HMAASnyAwABKccA0BsAgAQABJ8AAS3gAAD9GwABKqcAASs3AAEq1AAAAwABLeWADwAEAAgCEwABKv8A0CBk+AUFHwABK14XA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aKjANB0gAMAAaMdGwABovMAAaPTAAGjKAAAAgO1gA8AAY8sAFsAAaOSCwABo18A0HX+1IcAAZFw+AT0cwABo/i7AAEuYwABoagIAAoPAAGkHwDQd4IHAAGkSwDQdIADAAGjIPwbAAGjIgSvAAGpiwABqZ8AAcRgAAMAAS5jAAGhqAAAAAQPAAGpvwABxGAAAAAICAsAAankAAACClGADwABjywDAAGqEAAAAwABLl2ADwAD8VQAAXAE+Aj2IwABql8A0HmAcwABqsRbAAGqeLqVZwABowrQgAQABgMAAasLANB5gALxmScAAas0lwABq1oDAAGrRwDQeYGADwABkWT4DTsAAavzAAGsJAACFVmADwABkWQEUwABrC8A0HmAAAWADwABkWT0cwABrFy7AAEuYwABoagIAAhbAAGstgsAAayDANB7PhVXAAGRbgcAAaznANB5wAMAAaMhGwABrTcAAa4XAAGtbAAAAgO1gA8AAY8sAFsAAa3WCwABraMA0Hs+1IcAAZFw+AT0cwABrjy7AAEuWwABoagIAAoPAAGuXwDQfMIHAAGuiwDQecADAAGjHPgFJwABryyGBwABr0MA0HnA+AT0cwABsAxbAAGvxFsAAa+cuwABLksAAaGrAAGi8wABLQcAAaJpWAQABgMAAbAfANB5gAMAA/tA+AknAAGwlIiXAAGwugMAAbCnANB5gYAPAAGPzABzAAGxeFsAAbE4usuDAAGjAtA8BAAEWwABscRTAAGxswDQeYAABYAPAAGPzlnvAAGP1AMAAbBo+AT0cwABtHBbAAG0KFsAAbQAuwABLksAAaGrAAGi8wABLQcAAaJpWAQABFMAAbSDANB5gAAFgA8AAY/MAwAD+0D9JwABtOiIiIRbAAG0/LoLOwABowQEWwABtcYDAAG1swDQeYIedwABj0AEcwABtj4DAAG2KwDQeYEgBAAEWwABtoRbAAG2SLrRZwABovoYouasAwAD/dT4CTsAAb3TAAG94AACaJmADvhMBFsAAb4kWwABvei60WcAAaL6yYbniPRzAAG/IFsAAb7YWwABvrC7AAEuSwABoasAAaLzAAEtBwABomlYBAAEcwABv3xbAAG/MLqVZwABowrQZAQABgsAAb+vANCC4ALxdAMAA/tA+AAbAAGjJgSvAAHEdwABxLMAAc9EAAMAAS5kAAAABA8AA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AF0DwAD+vwFgA8AAaM/AAT/xBMAAaNWBLINPg08GwABLvQBgA8AAaM8BagBgA8AAaM/AAT1yBMAAaNaBLIObg5sGnX0AYAPAAGjPAWoAYAPAAGjPwAE9iwTAAGjXgSyD0IPQBsAAS74AYAPAAGjPAWoAYAPAAGjPwAE9pATAAGjYgSyEFoQWBp1+AGADwABozwFqAGADwABoz8ABPb0EwABo2YEshGmEaQbAAEu/AGADwABozwFqAGADwABoz8ABPdYEwABo2oEshKmEqQa1uwBgA8AAaM8BagBgA8AAaM/AAT3wBMAAaNuBLITRhNEGwABLwABgA8AAaM8BagBgA8AAaM/AAT4KBMAAaNyBLIUMhQwGwABLwQBgA8AAaM8BagBgA8AAaM/AAT4kBMAAaN2BLIVJhUkGwABLwgBgA8AAaM8BagBgA8AAaM/AAT5ABMAAaN6BLIWdhZ0GwABLwwBgA8AAaM8BagBgA8AAaM/AAT5aBMAAaN+BLIXbhdsGwABLxABgA8AAaM8BagBgA8AAaM/AAT50BMAAaOCBLIYthi0GwABLxQBgA8AAaM8BagBgA8AAaM/AAT6OBMAAaOGBLIZ4hngGwABLxgBgA8AAaM8BagBgA8AAaM/AAT6qBMAAaOKBLIathq0GwABLxwBgA8AAaM8BagBgA8AAaM/AAT7GBMAAaOOBLIbihuIGwABLyABgA8AAaM8BagBgA8AAaM/AAT7gBMAAaOSBLIdah1oGwABLyQBgA8AAaM8BagBgA8AAaM/AAT78BMAAaOWBLIekh6QGwABLygBgA8AAaM8BagBgA8AAaM/AAT8YBMAAaOaBLIf+h/4GwABLywBgA8AAaM8BagBgA8AAaM/AAT8yBMAAaOeBLIg7iDsGtboAYAPAAGjPAWoAYAPAAGjPwAE/TgTAAGjogSyIY4hjBsAAS8wAYAPAAGjPAWoAYAPAAGjPwAE/agTAAGjpgSyI2ojaBsAAS80AYAPAAGjPAWoAYAPAAGjPwAE/hgTAAGjqgSyJPYk9BsAAS84AYAPAAGjPAWoAYAPAAGjPwAE/ogTAAGjrgSyJtYm1BsAAS88AYAPAAGjPAWoAYAPAAGjPwAE/vgTAAGjsgSyKWYpZBsAAS9AAYAPAAGjPAWoAYAPAAGjPwAE/2gEFwABo8IEsgv+C/4p1AQAAA4L/inUAAAACAgKC/wAABCdgA8AA/hsAgv8AAAQoYAPAAQACAABgA8AAaM8BPwMIAMAAaNGAAMA0L2IIAMAAaNOBAMA0L28JAADAAP9+AAAAAAEGwABo7oEsgv+C/4p1AAAjAAAAAQOC/4p1AAAAAAAAAGADwAEAAgFKAAEPAC7AAGjTAAA0L6oANC/bAAAAAQLAAGjxgSyKrYqzjUoDwABL0QAAAWABwAD/aAAAAwTAAGjzgSyK2YrdCYKUAGADwABj8wAEwABo9IEsiuyK9gm59gBgA8AA/FUABMAAaPWBLIsFiwwJgVUAYAPAAPxVAAEFwABo/IEsixGLEYtYAAAAA4sei1gAAAADAQGLJAAABIKUYAPAAGPzAAKLMAAABLn2YAPAAPxVAWqLPGADwAD8VQCLSAAABIFVYAPAAPxVAWqLUWADwAD8VQBgA8AAaPEBPwQIAcAAaPOAAMA0MGQIAcAAaPSBAMA0MHMIAcAAaPWCAMA0MIsJAYsRwAD/fgAAAAADBsAAaPeBLItdi3GL4AEAg8YBaoteYAPAAP9oAgAAAQOLeovgAAAAAAAAAGADwAD+GwE+AUqLgAEci70ci5oci5UWi4wWi4cugpTAAGjzg8bAAGP8g40BAAE3DQDAAP9DZAEAARyLuBaLrxaLpC659sAAaPSDxsAA/FmDjQEAATcRAMAA/0MAwAD/QWQBAAEci9gWi88Wi8cugVXAAGj1g8bAAPxZg40BAAE3EwDAAP9DAMAA/0EGwABo+YEsi+WL/4zWAwBIAWqL5mADwAD/aAIAAAEDjAGM1gAAAAEBAYwCAAAAg9tbAABgA8AA/FUBPgNJjA8ejBPAAPf8AgACLoCMI8A0MbwASowrASk/SYw8ISWMRoCMQMA0MbxgA8AAaPFKjFkBKj9KjGsBIiIcjHcWjHIugpTAAGjzSAEAARaMgICMesA0MbyClAAAwABkAAAcjJsWjJAuufbAAGj0SAEAARaMpICMnsA0Mby59gAAwAD/dQAcjMIWjLougVXAAGj1SAEAARaMy4CMxcA0MbyBVQAAwAD/dQbAAGj6gSyM24zujUgAACMBaozcYAPAAP9oAgAAAQOM9o1IAAAAAAAAAGADwAEAAgE+AUqM/wEkjUQHJ8AAS9IWjRYugpTAAGjzJ8AAS9MWjScuufbAAGj0J8AAS9QWjTsugVXAAGj1J4MmAAA0MN0ANDGTADQydgA0MuEAAAADAsAAaP2BLI2CjYiP/wPAAEvVAAABYAHAAP9oAAADBMAAaP+BLI2ujbIJgpQAYAPAAGPzAATAAGkAgSyNwY3LCbn2AGADwAD8VQAEwABpAYEsjdqN4QmBVQBgA8AA/FUAAQXAAGkIgSyN5o3mji0AAAADjfOOLQAAAAMBAY35AAAEgpRgA8AAY/MAAo4FAAAEufZgA8AA/FUBao4RYAPAAPxVAI4dAAAEgVVgA8AA/FUBao4mYAPAAPxVAGADwABo/QE/BAgBwABo/4AAwDQzcggBwABpAIEAwDQzgQgBwABpAYIAwDQzmQkBjebAAP9+AAAAAAMGwABpA4EsjjKORo6dAQCDxgFqjjNgA8AA/2gCAAABA45Pjp0AAAAAAAAAYAPAAP4bAUqOWAEcjoYcjmscjmYWjl0WjlgugpTAAGj/g8bAAGP8g40BAAE3DQDAAP9DZAEAARyOgRaOeBaObS659sAAaQCDxsAA/FmDjQEAATcRAMAA/0MAwAD/QWQBAAEcjpkWjpAWjogugVXAAGkBg8bAAPxZg40BAAE3EwDAAP9DAMAA/0EGwABpBYEsjqKOvI+TAwBIAWqOo2ADwAD/aAIAAAEDjr6PkwAAAAEBAY6/AAAAg9tbAABgA8AA/FUBPgNJjswejtDAAPf8AgACLoCO4MA0NMgASo7oASk/SY75ISWPA4CO/cA0NMhgA8AAaP1KjxYBKj9KjygBIiIcjzQWjy8ugpTAAGj/SAEAARaPPYCPN8A0NMiClAAAwABkAAAcj1gWj00uufbAAGkASAEAARaPYYCPW8A0NMi59gAAwAD/dQAcj38Wj3cugVXAAGkBSAEAARaPiICPgsA0NMiBVQAAwAD/dQbAAGkGgSyPmI+rj/0AACMBao+ZYAPAAP9oAgAAAQOPs4/9AAAAAAAAAGADwAEAAgFKj78BJI/9ByfAAEvWFo/PLoKUwABo/yfAAEvTFo/gLrn2wABpACfAAEvUFo/0LoFVwABpASeDJgAANDPrADQ0nwA0NYIANDXrAAAAAwLAAGkJgSyQOpBAktsDwABL1wAAAWABwAD/aAAAAwTAAGkLgSyQZ5BrCYKUAGADwABj8wAEwABpDIEskHqQhAm59gBgA8AA/FUABMAAaQ2BLJCTkJoJgVUAYAPAAPxVAAEFwABpFIEskJ+Qn5DnAAAAA5CtkOcAAAADAQGQswAABIKUYAPAAGPzAAKQvwAABLn2YAPAAPxVAWqQy2ADwAD8VQCQ1wAABIFVYAPAAPxVAWqQ4GADwAD8VQBgA8AAaQkBPwQIAcAAaQuAAMA0NnwIAcAAaQyBAMA0NosIAcAAaQ2CAMA0NqMJAZCfwAD/fgAAAAADBsAAaQ+BLJDskQCRbwEAg8YBapDtYAPAAP9oAgAAAQORCZFvAAAAAAAAAGADwAD+GwE+AUqRDwEckUwckSkckSQWkRsWkRYugpTAAGkLg8bAAGP8g40BAAE3DQDAAP9DZAEAARyRRxaRPhaRMy659sAAaQyDxsAA/FmDjQEAATcRAMAA/0MAwAD/QWQBAAEckWcWkV4WkVYugVXAAGkNg8bAAPxZg40BAAE3EwDAAP9DAMAA/0EGwABpEYEskXSRjpJmAwBIAWqRdWADwAD/aAIAAAEDkZCSZgAAAAEBAZGRAAAAg9tbAABgA8AA/FUBPgNJkZ4ekaLAAPf8AgACLoCRssA0N9QASpG6ASk/SZHLISWR1YCRz8A0N9RgA8AAaQlKkekBKj9KkfsBIiIckgcWkgIugpTAAGkLSAEAARaSEICSCsA0N9SClAAAwABkAAAckisWkiAuufbAAGkMSAEAARaSNICSLsA0N9S59gAAwAD/dQAcklIWkkougVXAAGkNSAEAARaSW4CSVcA0N9SBVQAAwAD/dQbAAGkSgSySa5J+ktkAACMBapJsYAPAAP9oAgAAAQOShpLZAAAAAAAAAGADwAEAAgE+AUqSjwEkktUHJ8AAS9gWkqcugpTAAGkLJ8AAS9MWkrguufbAAGkMJ8AAS9QWkswugVXAAGkNJ4MmAAA0NvUANDerADQ4jgA0OPkAAAADAsAAaRWBLJMBkweYoAPAAEvZAAABYAHAAP9oAAADBMAAaReBLJNfk2MJgmsAYAPAAJy7AATAAGkYgSyTnpOqCYWaAGADwABjywAEwABpGYEslA6UGgnAAEvaAGADwABjywABBcAAaSGBLJQflB+UXgAAAAOULZReAAAAAwMDlDMAAASCa2ADwACcuwCUPgAABIWaYAPAAGPLAJRRAAAEwABL2mADwABjywAAYAPAAGkVAT8ECAHAAGkXgADANDmMCAHAAGkYgQDANDmaCAHAAGkZggDANDmoCQGUH8AA/34AAAAABAbAAGkbgSyUY5R3lOEBAIPGAWqUZGADwAD/aAIAAAEDlICU4QAAAAAAAABgA8AA/hsBSpSJARyUvxyUnByUlxaUjhaUiS6Ca8AAaReDxsAA/3uDjQEAATcNAMAA/0NkAQABHJS6FpSxFpSkLoWawABpGIPGwAD/e4ONAQABNxEAwAD/QwDAAP9BZAEAARyU3RaU1BaUxy7AAEvawABpGYPGwAD/e4ONAQABNxMAwAD/QwDAAP9BBsAAaR6BLJTmlQCV5gMASAFqlOdgA8AA/2gCAAABA5UCleYAAAABAQGVAwAAAIPbWwAAYAPAAPxVAT4DSZUQHpUUwAD3/AIAAi6AlSTANDrSAEqVLAEpP0mVPSEllUeAlUHANDrSYAPAAGkVSpVbASo/SpVtASIiHJV5FpV0LoJrwABpF0gBAAEWlYKAlXzANDrSgmsAAMAA/3UAHJWfFpWSLoWawABpGEgBAAEWlaiAlaLANDrShZoAAMAA/3UAHJXNFpXALsAAS9rAAGkZSAEAARaV1oCV0MA0OtLAAEvaAADAAP91BsAAaRyBLJYfliqYJQEAtcgAAAABA5Y0mCUAAAAAAAAAYAPAAQACAT4DTpZHlkoAAIPpYAPAAQBMAR+WUMABAGsAAAAAQUeWZBaWbC6Ca8AAaRcDAZaSapaSYAPAAJy7wAFAXgA+Az0clqWAlqLANDu7go4BAAEnwABL3ADAAQBgPRyWwoCWv8A0O7uCjgEAARaWyC6FmsAAaRgAwAEAYEKW3wABlwRqlwRgA8AAnLvAAUB3AD4FPRyXF4CXFMA0O7uCjgEAASfAAEveAMABAGA9HJc0gJcxwDQ7u4KOAQABFpc6LoWawABpGADAAQBgPRyXVICXUcA0O7uCjgEAASdQAMABAGA9HJdrgJdowDQ7u4KOAQABFpdxLsAAS9rAAGkZAMABAGBCl4gAAZetapetYAPAAJy7wAFAkAA+Az0cl8GAl77ANDu7go4BAAEnwABL4ADAAQBgPRyX34CX3MA0O7uCjgEAARaX5S6FmsAAaRgAwAEAYEKX/ABKmA0BHJgXgJgUwDQ7uyMAAAAAwAEAZQbAAGkfgSyYKpg9mJ4AACMBapgrYAPAAP9oAgAAAQOYRZieAAAAAAAAAGADwAEAAgFKmEsBJAAHJ8AAS+EWmGEugmvAAGkXJ8AAS+IWmHAuhZrAAGkYJ8AAS+MWmJAuwABL2sAAaRkngyYAADQ58wA0OqkANDuQADQ9IwA0PY0AAAAEAsAAaSKBLJkLmRGeeQPAAEvkAAABYAHAAP9oAAADBMAAaSSBLJk+mVsGg+wAYAPAAQACAWqZRGADwAEAAsABQKQEwABpJYEsmaWZsQmFVgBgA8AAY8sABMAAaSaBLJn6mgcJhTgAXQPAAP6/AWADwABjywABBcAAaTGBLJoMmgyaRwAAAAOaIJpHAAAAAgICmiYAAASFVmADwABjywCaOQAABIU4XQPAAP6/AWADwABjywAAYAPAAGkiAT8DCAHAAGklgADAND42CAHAAGkmgQDAND5ECQGaDMAA/34AAAAABgbAAGkogSyaTJpUm28EAbAPAAAAAQOae5tvAAAAAQEBmocAAACDSmADwABepQAAYAPAAGkiAT4FPRyanICalcA0PqiCmAEAAWqaomADwAEAAsABQKQAwABep06atZrCAACFVmADwABjywEcmsuAmsTAND6ohyQAAAAAwABez06a7pr8AACFOF0DwAD+vwFgA8AAY8sBHJsFgJr+wDQ+qMAARWAAAAAAwABe0D0cmyGAmxrAND6ogpABAAFqmyVgA8ABAALAAUCkAMAAXqhKmy8BH5s6wABpMQIAAoGbT8A0PuOCm13AND8HAAbAAGkqgSybdJt5nBIAALAQAAAAAQObiJwSAAAAAQEBm5IAAACEQGADwABeVgAAXAE+BD0cm6OAm57AND+SgpgBAAFqm6lgA8ABAALAAUCkAMAAXls9HJu4gJuzwDQ/kocUAQABFpvGLoVWwABpJQDAAF58PRyb3oCb2cA0P5LAAEU+AQABFpvtLoU4wABpJgDAAF59PRycBoCcAcA0P5KCkAEAAWqcCmADwAEAAsABQKQAwABeXAbAAGkugSycS5xWnIEBALXIAAAAAQOcYJyBAAAAAAAAAGADwAEAAgFKnGMBJJyBAydjHJx1FpxnLoU4wABpJlgBAAEngKcAwAD+kSeAlwbAAGkvgSychpyanO0BAIPGAWqch2ADwAD/aAIAAAEDnKOc7QAAAAAAAABgA8AA/hsBSpysAR6ctIHzAgACFpy9LoU4wABpJh6c1IHxAQABFpzfLoVWwABpJQAABsAAaSuBLJzynQyd6QMASAFqnPNgA8AA/2gCAAABA50OnekAAAABAQGdDwAAAIPbWwAAYAPAAPxVAT4DSZ0cHp0gwAD3/AIAAi6AnTDANED8AEqdOAEpP0mdSSElnVOAnU3ANED8YAPAAGkiSp1tASo/Sp1/ASIcnZMWnYYuhVbAAGklSAEAARadnICdlsA0QPyFVgAAwAD/dQAenbSB5AIBYAPAAGPLAhadwi6FOMAAaSYmndcBFp3XgJ3RwDRA/IU4AF0DwAD+vwFgA8AAY8sABsAAaSyBLJ3ungGedwAAIwFqne9gA8AA/2gCAAABA54JnncAAAAAAAAAYAPAAQACAT4BSp4SASQABifAAEvmFp49LoVWwABpJSeApyfAAEvnFp5kLoU4wABpJieDJgAAND6IADQ/cgA0QCkANEB3ADRA0wA0QaUANEIDAAAABgAAAAGBLAA0QicANCtzADQv6AA0MvYANDYAADQ5DgA0PaYANEIkAAAABgA0QicAAAAAAAIGwABpMsAAS+iBLQAAC4LaAACksQAAgvMAAMAAYgUAAIMWAADAAGPHAACDNwAAvf4AAINbAAC/HwAAg4wAAMAAXlAAAIO6AADAAH5vAACD3QAAgeAAAQEChAWDu4QVAADAAGp6AAEBAbHUhEYAAMAATKYAAQEBpQeEbAAAwABxRgABAQHAAEvpAAAABwLAAGkzgS2EpISphNILvFIAAAFgAcAA/2gAAAYEwABpNYEthKmEqQknAGADwAD+GwAEwABpN4EthKmEqQkowABpMgBgA8ABAAIABMAAaTiBLYSphKkGKQBdA8AA/r8BYAPAAGkzAWoAXQPAAP6/AWADwABpM8ABQKkEwABpOYEthLyEvAbAAEvqAGADwABpMwFqAGADwABpM8AA/icEwABpOoEthMaExgadmQBgA8AAaTMBagBgA8AAaTPAAP5QBMAAaTuBLYTNhM0GnbIAYAPAAGkzAWoAYAPAAGkzwAD+ZwEFwABpP4EthKmEqYTSAQAAA4SphNIAAAACAgKEqQAABCdgA8AA/hsAhKkAAAQoYAPAAQACAABgA8AAaTMBPwMIAMAAaTWAAMA0Q+EIAMAAaTeBAMA0Q+4JAADAAP9+AAAAAAEGwABpPYEthKmEqYTSAAAjAAAAAQOEqYTSAAAAAAAAAGADwAEAAgFKAAEPAC7AAGk3AAA0RCkANERaAAAAAQLAAGlAgS2FnYWjkfcDsAoAAAFgAcAA/2gAAAQEwABpQoEthcaF2QaD7ABgA8ABAAIBaoXMYAPAAQACwAFAvQTAAGlDgS2F7YX1CaVSAGADwABMuAAEwABpRIEthgaGGAm1bQBgA8AA/2gABMAAaUaBLYYxhj8JwABL7MAAaTIAXQPAAP6/AWADwABjywABBcAAaVOBLYZEhkSHpAAAAAOGToekAAAAAwMDhlQAAASlUmADwABMuACGYwAABLVtYAPAAP9oAIZ8AAAEwABL7F0DwAD+vwFgA8AAY8sAAGADwABpQAE+AUAchssWhrkWhqsWhqIupVLAAGlDtcfAAEy9lcDAAGqDSAEAATUAAAABAGADwAD+GwE1AAAAAQBdA8AA/r8BYAPAAGPLARaG2y7AAEvswABpMsAAaUYjHIbrgwDANEWASAEAASsAACsWhuuDAMA0RYBhwAD+7wFgA8AA/hsjHIbygwDANEVzSAEAASsAAJODAMA0RXMBYAPAAP4bAMAA/z+Goob3ASQABSfAAEvtFodRFodDFoc6LqVSwABpQ7XHwABMvZXAwABqgyfAAEvuNQAAAAEAYAPAAP4bATUAAAABAF0DwAD+vwFgA8AAY8sBFod1LsAAS+zAAGkywABpRiMch4WDAMA0RipIAQABKwAAKxaHhYMAwDRGKmHAAP7vAWADwAD+GyMch4yDAMA0Rh1IAQABKwAAk4MAwDRGHQFgA8AA/hsnwABL7wQIAcAAaUOAAMA0RREIAcAAaUSBAMA0RR8IAcAAaUaCAMA0RS0JAYZEwAD/fgAAAAAIBsAAaUiBLYeph7GJhAQBsA8AAAABA4fOiYQAAAABAQGH2gAAAINKYAPAAF6lAABgA8AAaUABPgg9HIfvgIfowDRG6oKYAQABaof1YAPAAQACwAFAvQDAAF6nTogIiBEAAKVSYAPAAEy4AR6IHMAATO4BAAGAiC/ANEbqAE6IQYhPAADAAEvwYAPAAPxVARyIWICIUcA0RuqwLQAAAADAAF6zTohvAAAAtW1gA8AA/2gASYiHgoiLwDRHRz4BPYuIosA0R20ciL6AiLfANEbqscUAAAAAwABe7z9OiOyI+gAAhThdA8AA/r8BYAPAAGPLARyJA4CI/MA0RurAAEVgAQAAAbAqKcAAXtA9HIkwgIkpwDRG6oKQAQABaok0YAPAAQACwAFAvQDAAF6oSok+AR+JScAAaVMDAAOBiVTANEclg4lewDRHbYSJcsA0R6UABsAAaUqBLYmJiY6LewAAsBAAAAABA4mdi3sAAAABAQGJpwAAAIRAYAPAAF5WAABcAT4GPRyJuICJs8A0SDqCmAEAAWqJvmADwAEAAsABQL0AwABeWz0cidEWicgupVLAAGlDsBABAAGAieHANEg6AMAATNQ9HInxgInswDRIOrA0AQABIRyKDhaJ+y61bcAAaURIAQABKwDAAP91AMAAXmBJihwhHIozFoogLrVtwABpREgBAAErAMAA/3U+AUmKRCWKWxaKSC61bcAAaURgA786PgE9HIp8gIp3wDRIOrHNAQABJoqPARaKjy61bcAAaURgA786AMAAXpw+AT0wirsfisXAAP2tAQABJIsbAifAAEvxFosHLrVtwABpRAA/PRyLNYCLMMA0SDrAAEU+AgABFotELsAAS+zAAGkywABpRgGYCCnAAF59PRyLb4CLasA0SDqCkAEAAWqLc2ADwAEAAsABQL0AwABeXAbAAGlOgS2LtIu/jtcBALXIAAAAAQOLyY7XAAAAAAAAAGADwAEAAgE+Bk6L3IvfAACD6WADwAEATAEfi+XAAQBrAAAAAEmL+SEcjBAWi/0utW3AAGlESAEAASsAwAD/dT4DTowljDAAAK56YAPAAP9oARaMMi61bcAAaURJjEwljFuBjFDANEnpYAPAAHFqPgJJjH4WjI0UjILANEnpAQFgA8AAcWrAAEvywABxdz4BPRyMpICMocA0SbGCjgEAASfAAEvzAMABAGBJjMMWjNIUjMfANEnpAQFgA8AAcWq2YcAAcXY+AT0cjOqAjOfANEmxgo4BAAEnwABL9ADAAQBgPz0cjRCAjQ3ANEmxgo4BAAEWjSUWjSEUjRbANEnpAQFgA8AAcWqaJsAAcWyAvb4BAMABAGA+AT0cjUaAjUPANEmxgo4BAAGBjUzANEnpAMABAGA9HI1qgI1nwDRJsYKOAQABJ4FqAMABAGA/PRyNg4CNgMA0SbGCjgEAARaNkhaNiS6lUsAAaUOAvcAATMYAwAEAYEmNnSIhHI2vFo2hLoU4wABpUEgBAAErAMAA/ukAFo3IFo26LoU4wABpUIO3wAD+oj4DPRyN34CN3MA0SbGCjgEAASdjAMABAGA9HI30gI3xwDRJsYKOAQABHI4IFo36LoU4wABpUFgBAAEngKcAwAD+kQDAAQBgPRyOHYCOGsA0SbGCjgEAASeAlwDAAQBgP0mOMxaOQBaONy6lUsAAaUOzuMAATMo+AT0cjlOAjlDANEmxgo4BAAEWjnAWjmIWjlkupVLAAGlDtcfAAEy9tcjAAGqNAMABAGBJjocWjpQWjosupVLAAGlDhVDAAEzJPgE9HI6pgI6mwDRJsYKOAQABJ4C8AMABAGA/So6/ARyOyYCOxsA0SbEjAAAAAMABAGUGwABpT4EtjtyO74+yAQCCawAAAAEDjvSPsgAAAAAAAABgA8AAaTMBPgFJjvoWjwcWjv4upVLAAGlDhU7AAEzIPgFKjxkBao8vYAPAAGkzwAD+UEmPPxaPTBaPQy6lUsAAaUOFUMAATMk+AUqPXgFqj3RgA8AAaTPAAP5nPgFKj4wBao+iYAPAAGkzwAD+JwbAAGlQgS2Pt4/Kj/8BAIU4AAAAAQOP2I//AAAAAAAAAF0DwAD+vwFgA8AAY8sBSo/bATUAAAABAF0DwAD+vwFgA8AAY8sBFo/bLsAAS+zAAGkywABpRiMcj+qAAMA0TP9IAQABKwAAao/tXQPAAP6/AWADwABjy8AA+12AAMA0TP8BXQPAAP6/AWADwABjywbAAGlRgS2QBJAYkH0BAIPGAWqQBWADwAD/aAIAAAEDkCGQfQAAAAAAAABgA8AA/hsBSpAkAR6QLIHzAgACFpA8LoU4wABpUB6QU4HyAgACFpBfLqVSwABpQxaQaS61bcAAaUQAAAbAAGlLgS2QgpCckaEDAEgBapCDYAPAAP9oAgAAAQOQnpGhAAAAAQEBkJ8AAACD21sAAGADwAD8VQE+A0mQrB6QsMAA9/wCAAIugJDAwDRN6gBKkMgBKT9JkNkhJZDjgJDdwDRN6mADwABpQEqQ8wEqP0qRBQEiIhyRFRaRDC6lUsAAaUNIAQABFpEegJEYwDRN6qVSAADAAP91AByRRRaRMi61bcAAaURIAQABFpFOgJFIwDRN6rVtAADAAP91AB6RbIHkAgFgA8AAY8sCFpF6LoU4wABpUCaRjwEWkY+AkYnANE3qhTgAXQPAAP6/AWADwABjywAGwABpTIEtkaaRuZH1AAAjAWqRp2ADwAD/aAIAAAEDkcGR9QAAAAAAAABgA8ABAAIBSpHHASSR9QUWkckupVLAAGlDJ4CnFpHTLrVtwABpRCeApxaR5y6FOMAAaVAAADRGygA0SBoANEmGADRMPAA0TMsANE1bADRNwQA0TrgANE8VAAAACALAAGlUgS2R+pH/k28LtdAAAAFgAcAA/2gAABcEwABpVoEtkf+R/wknAGADwAD+GwAEwABpWIEtkf+R/wkowABpMgBgA8ABAAIABMAAaVmBLZH/kf8GKQBdA8AA/r8BYAPAAGlUAWoAXQPAAP6/AWADwABpVMABQMIEwABpWoEtkhGSEQbAAEv1AGADwABpVAFqAGADwABpVMAA/n4EwABpW4EtkiSSJAbAAEv2AGADwABpVAFqAGADwABpVMAA/2UEwABpXIEtkjaSNgbAAEv3AGADwABpVAFqAGADwABpVMAA/xwEwABpXYEtkkmSSQbAAEv4AGADwABpVAFqAGADwABpVMAA/3wEwABpXoEtklaSVgbAAEv5AGADwABpVAFqAGADwABpVMAA/zMEwABpX4EtkmqSagbAAEv6AGADwABpVAFqAGADwABpVMAA/vEEwABpYIEtknqSegbAAEv7AGADwABpVAFqAGADwABpVMAA/qcEwABpYYEtkpCSkAbAAEv8AGADwABpVAFqAGADwABpVMAA/r8EwABpYoEtkqaSpgbAAEv9AGADwABpVAFqAGADwABpVMAA//kEwABpY4EtkrGSsQbAAEv+AGADwABpVAFqAGADwABpVMAA84oEwABpZIEtksGSwQbAAEv/AGADwABpVAFqAGADwABpVMAA/tkEwABpZYEtktCS0AbAAEwAAGADwABpVAFqAGADwABpVMAA8zwEwABpZoEtkuaS5gbAAEwBAGADwABpVAFqAGADwABpVMAA81YEwABpZ4EtkwKTAgbAAEwCAGADwABpVAFqAGADwABpVMAA86IEwABpaIEtkxOTEwbAAEwDAGADwABpVAFqAGADwABpVMAA/98EwABpaYEtkx+THwbAAEwEAGADwABpVAFqAGADwABpVMAA83AEwABpaoEtkzCTMAbAAEwFAGADwABpVAFqAGADwABpVMAA/5MEwABpa4Etkz6TPgbAAEwGAGADwABpVAFqAGADwABpVMAA/0sEwABpbIEtk0yTTAbAAEwHAGADwABpVAFqAGADwABpVMAA/6sEwABpbYEtk1qTWgbAAEwIAGADwABpVAFqAGADwABpVMAA/8UB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SAEAASsAwAD/dT4CPRyf9oCf88A0W96CjgEAARagEhagA4Gf/MA0XOCFGb4zgL2+AQDAAQBgPRygJICgIcA0W96CjgEAASeBagDAAQBgPz9JoEIcoFMWoE4WoEYulnvAAGl1gL2+AUgBAAErAMABABE+AT0coGeAoGTANFvego4BAAEnmgAAwAEAYD4BPRygk4CgkMA0W96CjgEAARagoRagmS6We8AAaXWAvb4BAMABAGBJoLIiIRygxBagti6FOMAAaXxIAQABKwDAAP7pABag3Ragzy6FOMAAaXyDt8AA/qI+Az0coPSAoPHANFvego4BAAEnYwDAAQBgPRyhCYChBsA0W96CjgEAARyhHRahDy6FOMAAaXxYAQABJ4CnAMAA/pEAwAEAYD0coTKAoS/ANFvego4BAAEngJcAwAEAYD9JoUghHKFaFqFMLrXHwABpeUgBAAErAMAAaps+BD0coW6AoWvANFvego4BAAEng9wAwAEAYD0coYOAoYDANFvego4BAAEWoZcWoYkutcfAAGl5uFnAAGqHAMABAGBJobccodwWockWobsutcfAAGl5vDfAAGqGgJcBAAGTAMAA/0s+Aj0coe6AoevANFvego4BAAEngKcAwAEAYD0cogWAogLANFvego4BAAEcojQcohkWogsutcfAAGl5uFoAAAAAwABql1gBAAEngKcAwAD+kQDAAQBgPz0colGAok7ANFvego4BAAEngyYAwAEAYD9JomchHKJ6FqJrLoSuwABpekgBAAErAMAA/3U+Az0coo6AoovANFvego4BAAEnmhIAwAEAYD0coqOAoqDANFvego4BAAEWorgWoqkuhK7AAGl6gL2+CwDAAQBgPRyiyICixcA0W96CjgEAASeG4gDAAQBgP0mi3iEcousWouIuhh3AAGl7SAEAASsAwAD/dT4CPRyi/4Ci/MA0W96CjgEAASeAvADAAQBgPRyjFICjEcA0W96CjgEAARyjIxajGi6GHcAAaXuw0AAAAADAAGJZAMABAGA/SqNCARyjTICjScA0W94jAAAAAMABAGUGwABphYEto7mjwadBBAHAAEwQAAAAAQOj16dBAAAABAIEo+4AAACWe2ADvjoApAUAAAC1x2ADwABqewCkKgAAAIU4XQPAAP6/AWADwABjywFqAGADwAD/JXmkRgAAAISuYAO+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RHW2/QIAAoDAAER+wDRuFCTAAETNAyfAAEw7gMAARKjANG4UJ8AATBsASsAARNUBH8AARODAAGmlAgACgMAARPPANG4UasAARQpgA8AAaVTAAP+TAAbAAGmUgS3AAEVOwABFVsAARsIEAcAATDwAAAABA8AARWnAAEbCAAAAAQEBwABFdgAAAJZ7YAO+NwAAYAPAAGlyAT4DQBbAAEWdgMAARZXANG8phRy+KsAARZXAAEWtAR7AAEW3tv0CAAKAwABFwMA0bykkwABGDgMnwABMPYDAAEXqwDRvKSfAAEw4AEAWwABGJYDAAEYdwDRvKYebvizAAEYdwABGLAEewABGNrb9AgACgMAARj/ANG8pJMAARnYDJ8AATD2AwABGXcA0byknwABMIgBKwABGfgEfwABGicAAaaUCAAKAwABGnMA0bylqwABGs2ADwABpVMAA/0sABsAAaZWBLcAARxHAAEcZwABJMAQBwABMPgAAAAEDwABHNMAASTAAAAACAgLAAEdOAAAAlntgA75SAMAAR2UAAAC1x2ADwABqewAAYAPAAGlyAT4DQBbAAEeSgMAAR4rANHAqh56+K8AAR4rAAEefAR7AAEeptv0CAAKAwABHssA0cCokwABIBwMnwABMP4DAAEfowDRwKifAAExAAEAhHMAASC2BwABIH8A0cDhIAQABKwDAAGqbwABIH8AASDQBHsAASD62/QIAAoDAAEhUwDRwKiQAAyfAAExBgMAASLLANHAqJ4FqAErAAEjDAR/AAEjOwABppQMAAoDAAEjhwDRwKmrAAEj4YAPAAGlUwADzcAG1x4HAAEkewDRwOAbAAGmWgS3AAEmPwABJl8AATAoEAcAATEIAAAABA8AASbfAAEwKAAAABAQEwABJ0QAAAJZ7YAO+UgDAAEnuAAAAtcdgA8AAansAwABKEQAAAIKUYAPAAGPzAMAASioAAACErmADvgkAAGADwABpcgE+A0AhHMAASkyCwABKR8A0cWZIAQABKwDAAGQAwABKR8AASlMBHsAASl22/QIAAoDAAEpmwDRxSCfAAExDAEAWwABKvYDAAEq1wDRxSIeevivAAEq1wABKygEewABK1Lb9AgACgMAASurANHFIJAAEJ8AATESAwABLJsA0cUgngNknwABMRQBKwABLXAEfwABLZ8AAaaUFAAKAwABLesA0cUhqwABLkWADwABpVMAA8zwDgpSCwABLs8A0cWa1x4HAAEvQwDRxVoSug8AAS/fANHF2BsAAaZeBLcAATHLAAEx6wABO/AQBwABMRgAAAAEDwABMmsAATvwAAAAEBATAAEy0AAAAlntgA75SAMAATNEAAAC1x2ADwABqewDAAEz0AAAAgpRgA8AAY/MAwABNDQAAAISuYAO+CQAAYAPAAGlyAT4DQCEcwABNL4LAAE0qwDRyqUgBAAErAMAAZADAAE0qwABNNgEewABNQLb9AgACgMAATUnANHKLJ8AATEMAQBbAAE2ggMAATZjANHKLh56+K8AATZjAAE2tAR7AAE23tv0CAAKAwABNzcA0coskAAQnwABMR4DAAE4JwDRyiyeA2SfAAExFAErAAE4/AR/AAE5KwABppQUAAoDAAE5mwDRyi2rAAE59YAPAAGlUwADzVgOClILAAE6lwDRyqbXHgcAATsLANHKZhK6DwABO6cA0crkGwABpmIEtwABPNsAATz7AAFBCBAHAAExIAAAAAQPAAE9RwABQQgAAAAEBAcAAT14AAACWe2ADvjcAAGADwABpcgE+AkAWwABPhYDAAE99wDRzzoUcvirAAE99wABPlQEewABPn7b9AgACgMAAT7XANHPOJMAAT/YDJ8AATEmAwABP08A0c84nwABMSgBKwABP/gEfwABQCcAAaaUCAAKAwABQHMA0c85qwABQM2ADwABpVMAA/6sABsAAaZmBLcAAUIXAAFCNwABR3QQBwABMSwAAAAEDwABQqMAAUd0AAAACAgLAAFC8AAAAlntgA743AMAAUNMAAACGHWADwABiOAAAYAPAAGlyAT4CQBbAAFD7gMAAUPPANHSGhRy+KsAAUPPAAFELAR7AAFEVtv0CAAKAwABRK8A0dIYkwABRbAMnwABMSYDAAFFJwDR0hifAAExKAErAAFF0AR/AAFF/wABppQMAAoDAAFGSwDR0hmrAAFGpYAPAAGlUwAD/xQGGHYHAAFHQwDR0lAbAAGmagS3AAFIjwABSK8AAU1kEAcAATEwAAAABA8AAUj3AAFNZAAAAAQEBwABSSgAAAJZ7YAO+NwAAYAPAAGlyAT4CQCIWwABScYDAAFJpwDR1WYUcvioBJcAAUo2AwABShcA0dVlgA8AAfx3AAFJpwABSnAEewABSprb9AgACgMAA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gKcWwABc2y6ClMAAaXgngKcWwABc4S6FOMAAaXwngKcWwABc8C61x8AAaXkngyYAADRVkAA0V7gANFnfADRbswA0YDQANGHmADRi5QA0Y/QANGURADRl8gA0ZzkANGgWADRo4wA0abAANGpUADRrQAA0a+8ANGxlADRt6AA0bv0ANG/+ADRxHAA0cl8ANHOiADR0WgA0dS0ANHX7ADR2yQA0dzYANHgnADR4lAA0eSAANHmqADR6OwA0fE4ANHznAAAAIwLAAGmmgS3AAF0EwABdCcAAXe0LtdEAAAFgAcAA/2gAAA8EwABpqIEtwABdCcAAXQkJJwBgA8AA/hsABMAAaaqBLcAAXQnAAF0JCSjAAGkyAGADwAEAAgAEwABpq4EtwABdCcAAXQkGKQBdA8AA/r8BYAPAAGmmAWoAXQPAAP6/AWADwABppsABQR8EwABprIEtwABdGcAAXRkGwABMVABgA8AAaaYBagBgA8AAaabAAPQZBMAAaa2BLcAAXSXAAF0lBsAATFUAYAPAAGmmAWoAYAPAAGmmwAD0RwTAAGmugS3AAF0wwABdMAbAAExWAGADwABppgFqAGADwABppsAA9DAEwABpr4EtwABdPsAAXT4GmpoAYAPAAGmmAWoAYAPAAGmmwADzugTAAGmwgS3AAF1OwABdTga9hABgA8AAaaYBagBgA8AAaabAAPPpBMAAabGBLcAAXV/AAF1fBsAATFcAYAPAAGmmAWoAYAPAAGmmwAD0AQTAAGmygS3AAF13wABddwbAAExYAGADwABppgFqAGADwABppsAA89EEwABps4EtwABdjsAAXY4GwABMWQBgA8AAaaYBagBgA8AAaabAAPReBMAAabSBLcAAXZ/AAF2fBsAATFoAYAPAAGmmAWoAYAPAAGmmwAD0eATAAGm1gS3AAF2ywABdsgbAAExbAGADwABppgFqAGADwABppsAA9JAEwABptoEtwABdv8AAXb8GwABMXABgA8AAaaYBagBgA8AAaabAAPSoBMAAabeBLcAAXdDAAF3QBsAATF0AYAPAAGmmAWoAYAPAAGmmwAD0wAEFwABpu4EtwABdCcAAXQnAAF3tAQAAA8AAXQnAAF3tAAAAAgICwABdCQAABCdgA8AA/hsAwABdCQAABChgA8ABAAIAAGADwABppgE/AwgAwABpqIAAwDSA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AbPpAAAAAQPAAGsGwABriAAAAAICAsAAaxAAAACClGADwABjywDAAGsjAAAAhK5gA74JAABgA8AAabwBPgFKwABrOQEfwABrRMAAadkDAAOAwABrVcA0it5qwABrZ2ADwABppsAA87qBwABrdcA0iu4ABsAAacuBLcAAa8XAAGvNwABsPQQBsDYAAAABA8AAa+LAAGw9AAAAAQEBwABr8QAAAIKUYAPAAGPzAABgA8AAabwBPgFKwABr/QEfwABsCMAAadkCAAKAwABsGcA0i2RqwABsK2ADwABppsAA8+kABsAAacyBLcAAbITAAGyMwABtRAQBwABMbwAAAAEDwABspsAAbUQAAAACAgLAAGy8AAAAgpRgA8AAY/MAwABszwAAAISuYAO+CQAAYAPAAGm8AT4BSsAAbOUBH8AAbPDAAGnZAwADgMAAbQrANIvVasAAbRxgA8AAaabAAPPRgcAAbTHANIvlAAbAAGnNgS3AAG12wABtfsAAbfsEAcAATHAAAAABA8AAbZnAAG37AAAAAQEBwABtqAAAAIKUYAPAAGPzAABgA8AAabwBPgFKwABttAEfwABtv8AAadkCAAKAwABt0MA0jF1qwABt4mADwABppsAA9AEABsAAac6BLcAAbinAAG4xwABumwQBwABMcQAAAAEDwABuScAAbpsAAAABAQHAAG5TAAAAgpRgA8AAY8sAAGADwABpvAE+AUrAAG5fAR/AAG5qwABp2QIAAoDAAG57wDSMzmrAAG6NYAPAAGmmwAD0kAAGwABpz4EtwABuy8AAbtPAAG+qBAHAAExyAAAAAQPAAG7uwABvqgAAAAEBAcAAbvgAAACClGADwABjywAAYAPAAGm8AT4BSsAAb24BH8AAb3nAAGnZAgACgMAAb4rANI0/asAAb5xgA8AAaabAAPSQAAbAAGnQgS3AAHB3wABwf8AAcOkEAYXbAAAAAQPAAHCTwABw6QAAAAEBAcAAcJ0AAACClGADwABjywAAYAPAAGm8AT4BSsAAcKkBH8AAcLTAAGnZAgACgMAAcMXANI2uasAAcNdgA8AAaabAAPSoAAbAAGnRgS3AAHEmwABxLsAAca0EAcAATHMAAAABA8AAcU3AAHGtAAAAAQEBwABxXwAAAIKUYAPAAGQZAABgA8AAabwBSsAAcW4BH8AAcXbAAGnZAgACgMAA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AAEBAbIcgZYAAL3+AACBugAAwACIywAAgd8AAMAAY8cAAIIAAADAAGIFAAAAAAAkAsAAaumBMaLrovqjGQfAAEypAAABYAHAAP9oAAAAAQXAAGrtAAAAAAQAAAMAAAAAAAAAAABgA8AAaukBPwEJAQDAAP9+AAAAAAEGwABq64ExowijE6MXAQKAvQAAAAEDoxejFwAAAAAAAABgA8ABAAIAAAA00ZIANNG6AAAAAQLAAGrugTGjHKMro7sHwABMqgAAAWABwABq6QAAAAEFwABq8gAAAAAEAAADAAAAAAAAAAAAYAPAAGruAT8BCQEAwABq7QAAAAABBsAAavCBMaOPo52juQACg18AAAABA6Oho7kAAAABAQGjsAAAAIYdYAPAAGI4AABgA8AAYjgAAAA00hEANNJHAAAAAQLAAGrzgTGjvqPNpIUHwABMqwAAAWABwABq6QAAAAEFwABq+AAAAAAEAAADAAAAAAAAAAAAYAPAAGrzAT8BCQEAwABq7QAAAAACBsAAavWBMaQypECkbQACg18AAAABA6REpG0AAAACAgKkUwAAAIXNYAPAAGI4AKRnAAAAhc9gA8AAYjgAAGADwABiOAAGwABq9oExpHGkcaSDAAKwOQAAAAEDpHakgwAAAAICAqR3AAAAhc1bAKR9AAAAhc9bAABbAAAANNKeADTS4gA00xcAAAACAsAAavmBMaSIpI6mwAPAAEysAAABYAHAAP9oAAFgAcAAau4BBMAAavuBMaTVpN8JgL0BaqS9YAPAAP9oAmADwAEAAgEnhJIBBcAAav+BMaTkpOqk+wEAAAOk+aT7AAAAAAAAAGADwABq+QE/AQkBpOrAAP9+AAAAAAEGwABq/YExpQClGqa+AACDXwFqpQFgA8AA/2gCAAABA6Uepr4AAAABAQGlLQAAAIYdYAPAAGI4AABgA8AAYjgBPgJJpT0epUHAAGreAQABgKVHwDTTzAA+A0mlpxaltIClq8A008zAAEcHwABiTj4BPYily8A008wepdbAAGrWAQABGqXnwAD8KQA/TqYNphkAAMAATK1gA8AAYpEBJqYNAYCmG8A008xgA8AAYpFKpnkBHqaAwABq1QEAARymjRammoGmjsA01C6q88AAYpOEkgAAAADAAPxDAD9Kpq8BKwAANNOiADTUggAAAAECwABrAIExpsOmyamu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wABE7cA08IiDjQEAAYHAAET0wDTwmADAAPw5BsAAa2qBMcAARP7AAEUOwABFOwAAwABMyAFqwABE/2ADwAD/aAIAAAEDwABFFsAARTsAAAACAgLAAEUbAAAAhc1gA8AA/zIAwABFJQAAAIXPYAPAAP8yAABgA8AA/zIBSsAARS8BHMAARTSAwABFL8A08Q+DjQEAAYHAAEU2wDTxHwDAAP9DBsAAa2uBMcAARUDAAEVMwABFbgAAsDkBasAARUFgA8AA/2gCAAABA8AARVHAAEVuAAAAAgICwABFUgAAAIXNWwDAAEVYAAAAhc9bAABbAUrAAEViARzAAEVngMAARWLANPGUg40BAAGBwABFacA08Z8AAAAANPBQADTw1wA08V4ANPHRAAAAAwLAAGtugTHAAEVzwABFecAARuYDwABMzQAAAWABwABrUwAAAQTAAGtwgTHAAEXFwABFzwmAvQFqwABFrWADwAD/aAJgA8ABAAIBJ5YJAQXAAGt2gTHAAEXUwABF2sAAResBAAADwABF6cAAResAAAAAAAAAYAPAAGtuAT8BCQHAAEXawABrWwAAAAADBsAAa3KBMcAARfDAAEYDwABGbwAAwABMtgFqwABF8WADwAD/aAIAAAEDwABGC8AARm8AAAACAgLAAEYTAAAAhc1gA8AA/CcAwABGIAAAAIXPYAPAAPwnAABgA8AA/CcBPgJJwABGLRzAAEY3gcAARjHANPK6SAEAARrAAEZBwAD8KQDAAP91SsAARkcBKz9KwABGWAEcwABGZIDAAEZfwDTyqpYJAQABgcAARmbANPK6AMAA/DwGwABrc4ExwABGdMAARoTAAEaxAADAAEzIAWrAAEZ1YAPAAP9oAgAAAQPAAEaMwABGsQAAAAICAsAARpEAAACFzWADwAD/MgDAAEabAAAAhc9gA8AA/zIAAGADwAD/MgFKwABGpQEcwABGqoDAAEalwDTzYJYJAQABgcAARqzANPNwAMAA/0QGwABrdIExwABGtsAARsLAAEbkAACwOQFqwABGt2ADwAD/aAIAAAEDwABGx8AARuQAAAACAgLAAEbIAAAAhc1bAMAARs4AAACFz1sAAFsBSsAARtgBHMAARt2AwABG2MA08+WWCQEAAYHAAEbfwDTz8AAAAAA08nIANPMoADTzrwA09CIAAAADAsAAa3eBMcAARunAAEbvwABIhQPAAEzOAAABYAHAAGtTAAABBMAAa3mBMcAARz7AAEdQCYC9AWrAAEcmYAPAAP9oAmADwAEAAgEnmIgBBcAAa3+BMcAAR1XAAEdbwABHbwEAAAPAAEdtwABHbwAAAAAAAABgA8AAa3cBPwEJAcAAR1vAAGtbAAAAAAMGwABre4ExwABHdMAAR4fAAEf8AADAAEy2AWrAAEd1YAPAAP9oAgAAAQPAAEePwABH/AAAAAICAsAAR5cAAACFzWADwAD8JwDAAEekAAAAhc9gA8AA/CcAAGADwAD8JwE+AknAAEexHMAAR7uBwABHtcA09QtIAQABGsAAR8XAAPwpAMAA/3VKwABHywErP0rAAEfcARzAAEfogMAAR+PANPT7mIgBAAGBwABH8sA09QsAwAD8PQbAAGt8gTHAAEgBwABIEcAASEcAAMAATMgBasAASAJgA8AA/2gCAAABA8AASBnAAEhHAAAAAgICwABIHgAAAIXNYAPAAP8yAMAASCgAAACFz2ADwAD/MgAAYAPAAP8yAUrAAEgyARzAAEg3gMAASDLANPWxmIgBAAGBwABIQcA09cEAwAD/SAbAAGt9gTHAAEhMwABIWMAASIMAALA5AWrAAEhNYAPAAP9oAgAAAQPAAEhdwABIgwAAAAICAsAASF4AAACFzVsAwABIZAAAAIXPWwAAWwFKwABIbgEcwABIc4DAAEhuwDT2NpiIAQABgcAASH3ANPZBAAAAADT0wwA09XkANPYAADT2cwAAAAMCwABrgIExwABIiMAASI7AAErGA8AATM8AAAFgAcAAa1MAAAEEwABrgoExwABI5MAASO8JgL0BasAASMxgA8AA/2gCYAPAAQACASeGnwEFwABriYExwABI9MAASPrAAEkVAQAAA8AASRPAAEkVAAAAAAAAAGADwABrgAE/AQkBwABI+sAAa1sAAAAABAbAAGuEgTHAAEkawABJLcAASZoAAMAATLYBasAASRtgA8AA/2gCAAABA8AASTXAAEmaAAAAAgICwABJPQAAAIXNYAPAAPwnAMAASUoAAACFz2ADwAD8JwAAYAPAAPwnAT4CScAASVccwABJYYHAAElbwDT3XEgBAAEawABJa8AA/CkAwAD/dUrAAElxASs/SsAASYIBHMAASY6AwABJicA090yGnwEAAYHAAEmRwDT3XADAAPw7BsAAa4WBMcAASZ/AAEmywABKXgAAwABMyAFqwABJoGADwAD/aAIAAAEDwABJusAASl4AAAACAgLAAEm/AAAAhc1gA8AA/zIAwABJyQAAAIXPYAPAAP8yAABgA8AA/CcBPgNOwABJ2sAASeAAAMAATNBgA8AA/zIBHMAASeeAwABJ4sA0+AJQAQABgcAASenANPgSAMAA/0VJwABJ9CIWwABJ/oLAAEn4wDT4LYbJwAD/YQEWwABKDYLAAEoHwDT4LZsJwAD/Y0rAAEoZASs/SsAASioBHsAASjXAAPxUAQABHMAASlIcwABKR4LAAEpBwDT4La1KAAAAAMAA/1Gq4wAAAADAAP9XAAbAAGuGgTHAAEpjwABKb8AASpIAALA5AWrAAEpkYAPAAP9oAgAAAQPAAEp0wABKkgAAAAICAsAASnUAAACFzVsAwABKewAAAIXPWwAAWwFKwABKhQEcwABKioDAAEqFwDT5CYafAQABgcAASo3ANPkUAAAGwABrh4ExwABKl8AASqjAAErEAADAAEzKAWrAAEqYYAPAAP9oAgAAAQPAAEq6wABKxAAAAAAAAABgA8AA/FUBSsAASsABKQAANPcUADT3ygA0+NMANPlGADT5jQAAAAQCwABrioExwABKycAASs/AAEwrA8AATNEAAAFgAcAAa1MAAAEEwABrjIExwABLG8AASyUJgL0BasAASwNgA8AA/2gCYAPAAQACASdQAQXAAGuTgTHAAEsqwABLMMAAS0EBAAADwABLP8AAS0EAAAAAAAAAYAPAAGuKAT8BCQHAAEswwABrWwAAAAAEBsAAa46BMcAAS0bAAEtZwABLjAAAwABMtgFqwABLR2ADwAD/aAIAAAEDwABLYcAAS4wAAAACAgLAAEtpAAAAhc1gA8AA/CcAwABLdgAAAIXPYAPAAPwnAABgA8AA/M0BSsAAS4ABHMAAS4WAwABLgMA0+mlQAQABgcAAS4fANPp5AMAA/DoGwABrj4ExwABLkcAAS6HAAEvOAADAAEzIAWrAAEuSYAPAAP9oAgAAAQPAAEupwABLzgAAAAICAsAAS64AAACFzWADwAD/MgDAAEu4AAAAhc9gA8AA/zIAAGADwAD/MgFKwABLwgEcwABLx4DAAEvCwDT671ABAAGBwABLycA0+v8AwAD/RQbAAGuQgTHAAEvTwABL5MAAS/YAAMAATMkBasAAS9RgA8AA/2gCAAABA8AAS+zAAEv2AAAAAAAAAGADwAD8VQFKwABL8gEpBsAAa5GBMcAAS/vAAEwHwABMKQAAsDkBasAAS/xgA8AA/2gCAAABA8AATAzAAEwpAAAAAgICwABMDQAAAIXNWwDAAEwTAAAAhc9bAABbAUrAAEwdARzAAEwigMAATB3ANPu6UAEAAYHAAEwkwDT7xQAAAAA0+jEANPq3ADT7PQA0+4QANPv2AAAABALAAGuUgTHAAEwuwABMNMAAUQYDwABM0gAAAWABwAD/aAABYAHAAGrzAQTAAGuWgTHAAEx5wABMgwmAvQFqwABMYWADwAD/aAJgA8ABAAIBJ2QBBcAAa5uBMcAATIjAAEyOwABMnAEAAAPAAEyawABMnAAAAAAAAABgA8AAa5QBPwEJAcAATI7AAP9+AAAAAAIGwABrmIExwABMocAATLvAAFDRAACDXwFqwABMomADwAD/aAIAAAEDwABMv8AAUNEAAAACAgLAAEzOAAAAhc1gA8AAYjgAwABM4gAAAIXPYAPAAGI4AABgA8AAYjgBPgRPwABM78AATP0AAAHAAEyvYQMCYAPAAGI4YAPAAGI4YAPAAGI4AAPAAE0CwABQJwAAAAICAsAATREAAACFzWADwABiOADAAE0lAAAAhc9gA8AAYjgAAGADwABiOAE+AUnAAE00IhbAAE09g8AATTjANP01u2fAAGI/ABbAAE1MhMAATUbANP1Fu2fAAGI/PgROwABNbsAATXYAAMAATLNgA8AAYpEBJsAATW4Bg8AATXjANP01YAPAAGKRTsAATZfAAE2gAADAAEy0YAPAAGKRASbAAE2XAYTAAE2iwDT9RWADwABikU7AAE24wABNvwAAgXZgA8AA/CcBHMAATdIWwABNyYXAAE3BwDT9karzwABik2QBAAEWwABN3YbAAE3UwDT9vKrzwABikwDAAPw3SsAATe8BHsAATfbAAGrWAQABh8AATgDANP3nAEnAAE4WIhbAAE4fg8AAThrANP01u2bAAGJBABbAAE4uhMAATijANP1Fu2bAAGJBPgROwABOUMAATlgAAMAATMVgA8AAYosBJsAATlABg8AATlrANP01YAPAAGKLTsAATnnAAE6CAADAAEzGYAPAAGKLASbAAE55AYTAAE6EwDT9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AQABgMAARMbANWDJAMAA/wVIAQABgcAARNLANWDXAMABABHAAESQwABE1gEewABE4Lb9AgACgMAARPbANWDJJAAJJ8AATV+AwABFNsA1YMkng1snwABNYBzAAEVvFsAARV8uwABNW8AAbIFLAQABgMAARXDANWDJAMAA/wUngJknwABNYYHAAEWWwDVg1yeBSwA9HMAARbUWwABFpS7AAE1bwABsgYC/AgACgMAARbbANWDJgcAARcHANWDXAMAA/wYGwABsh4EywABFzsAARd/AAEZYAADAAE07AWrAAEXPYAPAAP9oAgAAAQPAAEX2wABGWAAAAAICAsAARgYAAACWnGADvjoAwABGHQAAALA3YAPAAGiWAABcAT4BPRzAAEZBFsAARi0uwABNXMAAbIKAvwIAAoDAAEZCwDViNoHAAEZMwDViRADAAP8GBsAAbIiBMsAARl3AAEZuwABG6AAAwABNPAFqwABGXmADwAD/aAIAAAEDwABGiMAARugAAAACAgLAAEaVAAAAhJtgA743AMAARqsAAACwN2ADwABolgAAXAE+AT0cwABG0hbAAEa7LsAATV3AAGyDgL8CAAKAwABG08A1YsGBwABG3MA1Ys8AwAD/BgbAAGyJgTLAAEbtwABG/sAAR3oAAMAATT0BasAARu5gA8AA/2gCAAABA8AARxnAAEd6AAAAAgICwABHJgAAAISbYAO+NwDAAEc8AAAAsDdgA8AAaJYAAFwBPgE9HMAAR2QWwABHTC7AAE1ewABshIC/AgACgMAAR2XANWNMgcAAR27ANWNaAMAA/wYGwABsioEywABHf8AAR5bAAEgmAACCjAFqwABHgGADwAD/aAIAAAEDwABHm8AASCYAAAAAAAAAYAPAAGwlAUrAAEehAR/AAEelwABsxQUABRbAAEe0LrkQwABsEcAAbIAWwABHxi7AAE1bwABsgRbAAEfeLsAATVzAAGyCFsAAR/QuwABNXcAAbIMWwABIDS7AAE1ewABshAAAADVgkQA1Yf4ANWKJADVjFAA1Y58ANWQ4AAAABQLAAGyNgTLAAEibwABIocAAdXEDwABNYgAAAWABwAD/aAACYAHAAGwlYAHAAGxeBwTAAGyPgTLAAElUwABJZwaD7ABgA8ABAAIBasAASVpgA8ABAALAAUIqBMAAbJGBMsAASd/AAEn+BsAATWTAAGwRAGADwAEAAgFqwABJ+GADwAEAAsABQi8EwABskoEywABKHcAASi0JuRDAAGwRAGADwABsXgAEwABsk4EywABKmcAASqkJwABNWwBdA8AA/vECYAO+JWADwAEAAgAEwABslIEywABLFsAASyoJwABNXABdA8AA/vECYAO+OmADwABolgAEwABslYEywABLmcAAS7AJwABNXQBdA8AA/vECYAO+JWADwABolgAEwABsloEywABMHcAATDUJwABNXgBdA8AA/vECYAO+JWADwABolgABBcAAbMWBMsAATDrAAEw6wABM7QAAAAPAAExIwABM7QAAAAUFBcAATFUAAAS5EGADwABsXgDAAExyAAAEwABNW10DwAD+8QJgA74lYAPAAQACAMAATI8AAATAAE1cXQPAAP7xAmADvjpgA8AAaJYAwABMsAAABMAATV1dA8AA/vECYAO+JWADwABolgDAAEzUAAAEwABNXl0DwAD+8QJgA74lYAPAAGiWAABgA8AAbI0BPwYIAcAAbJKAAMA1Zb0IAcAAbJOBAMA1Zc0IAcAAbJSCAMA1ZeoIAcAAbJWDAMA1ZgcIAcAAbJaEAMA1ZiQJAcAATDrAAP9+AAAAACYGwABsmIEywABM8sAATPrAAFOGBAHAAE1TAAAAAQPAAE0PwABThgAAAAICAsAATSMAAACAq2ADwACFYgDAAE05AAAAEmADwACB8wAAYAPAAGyNAT4ITsAATVnAAE1pAACy4GADwABsXgEewABNd8AAbGoCAAKAwABNksA1ZsKBwABNl8A1ZtIATsAATbzAAE3NAADAAE1bXQPAAP7xAmADviVgA8ABAAIBMsAATc9gA74lYAPAAQACAE7AAE37wABOEAAAwABNXF0DwAD+8QJgA746YAPAAGiWATLAAE4SYAO+OmADwABolgBOwABOPMAATlQAAMAATV1dA8AA/vECYAO+JWADwABolgEywABOVmADviVgA8AAaJYATsAAToDAAE6ZAADAAE1eXQPAAP7xAmADviVgA8AAaJYBMsAATptgA74lYAPAAGiWAD0cwABOqYHAAE6kwDVm0sAATWYBAAE0wABOwQPAAE7BwABQhgAAAAQEBMAATswAAACD82ADg5AAwABO4QAAAIC9YAPAAQACAMAATwAAAADAAEuUXQPAAP59AWADwAEAAgDAAE8tAAAAwABLlV0DwAD+fQFgA8ABAAIAAGADwAD/JQE+BE7AAE9WwABPXQAAgmpgA74lARzAAE9jgMAAT1/ANWbCnGgBAAGHwABPbcA1aAwAwACFcj0cwABPioPAAE96wDVnH4C/AgACFMAAT4vANWhnCwAUwABPlcA1aBoIAADAAP8GTsAAT6bAAE+yAADAAEuXYAPAAPxVARzAAE/EgsAAT7TANWbswABNKQEAARTAAE/WwDVoZwsAAMAAbHY9HMAAT/mEwABP5cA1Z1CAvwIAAibAAE/5ARTAAE/6wDVoZwsAYAO+OhzAAFAIgMAAUATANWbCwABNZwQAA4fAAFAuwDVoDBTAAFA0wDVoKgkAFMAAUEjANWhDCgABwABLlxTAAFBzwDVoyQwAwACFhgDAAP8GAMAAgg89HMAAUJOBwABQjsA1ZtLAAE1oAQABNMAAUKoDwABQqsAAUswAAAAEBATAAFC1AAAAg/NgA4OQAMAAUMoAAACAvWADwAEAAgDAAFDpAAAAwABLlF0DwAD+fQFgA8ABAAIAwABRFgAAAMAAS5VdA8AA/n0BYAPAAQACAABgA8AA/yUBPgVOwABRPsAAUUQAAISbYAO+NwEmwABRPgEcwABRSoDAAFFGwDVmwpxoAQABh8AAUVTANWmoAMAAhXJgA743PRzAAFFxg8AAUWHANWcfgL8CAAIUwABRcsA1agMLABTAAFF7wDVptggAAMAA/wZOwABRjMAAUZgAAMAAS5dgA8AA/FUBHMAAUaqCwABRmsA1ZuzAAE0pAQABFMAAUbzANWoDCwAAwABsdj0cwABR4YXAAFHKwDVngYC/AgACFMAAUeLANWoDCwAcwABR74DAAFHrwDVmwsAATWkEAAMmwABSGAGHwABSGMA1aahgA4OvFMAAUh7ANWnGCQAUwABSMsA1ad8KAAHAAEuXFMAAUl3ANWpvDADAAIWEAMAA/wY9HMAAUomGwABSccA1Z7KAvwIAAhTAAFKKwDVqAwsAHMAAUqGAwABSncA1ZsLAAE1qAQABJsAAUsABh8AAUsDANWmoYAODrwDAAIWFAMAA/wYAwACCEErAAFLUAR/AAFLfwABsxQUABYLAAFL3wDVm7IPAAFMQwDVnH4TAAFMqwDVnUIXAAFNIwDVngYbAAFNpwDVnsgAGwABsmYEywABTi8AAU5PAAFffBAGwDwAAAAEDwABTtMAAV98AAAACAgLAAFPHAAAAg0pgA8AAXqUAwABT4gAAAKVZYAO8RgAAYAPAAGyNAT4IPRzAAFQDgMAAU/zANWvfgpgBAAFqwABUCWADwAEAAsABQioAwABep07AAFQjwABUMwAAsuBgA8AAbBIBHsAAVEHAAGxrAgACgMAAVGTANWvfgcAAVGzANWvvAE7AAFSfwABUsAAAwABNW10DwAD+8QJgA74lYAPAAQACARzAAFTBgMAAVLrANWvftPUBAmADviVgA8ABAAIBNMAAVM8DwABUz8AAVPsAAAABAQHAAFTdAAAAgmpgA74lAABgA8ABAAIBSsAAVOgBHMAAVO+AwABU6MA1a9+wtgAAAADAAF62AMAAXt9OwABVJsAAVTsAAMAATVxdA8AA/vECYAO+OmADwABolgEcwABVTIDAAFVFwDVr37T1AQJgA746YAPAAGiWATTAAFVaA8AAVVrAAFWsAAAAAQEBwABVaAAAAIJqYAO+JQAAYAPAAGiWAUrAAFV/AR7AAFWDwABopwEAAYDAAFWlwDVr3wAAwABe307AAFXVwABV7QAAwABNXV0DwAD+8QJgA74lYAPAAGiWARzAAFX+gMAAVffANWvftPUBAmADviVgA8AAaJYBNMAAVgwDwABWDMAAVl4AAAABAQHAAFYaAAAAgmpgA74lAABgA8AAaJYBSsAAVjEBHsAAVjXAAGinAQABgMAAVlfANWvfAADAAF7fTsAAVofAAFagAADAAE1eXQPAAP7xAmADviVgA8AAaJYBHMAAVrGAwABWqsA1a9+09QECYAO+JWADwABolgE0wABWvwPAAFa/wABXEQAAAAEBAcAAVs0AAACCamADviUAAGADwABolgFKwABW5AEewABW6MAAaKcBAAGAwABXCsA1a98AAMAAXt89HMAAVx+AwABXGMA1a9+CkAEAAWrAAFcjYAPAAQACwAFCKgDAAF6oSsAAVy0BH8AAVzjAAGzFBQAFJsAAV1ABgsAAV1DANWwwYAPAAGxeg8AAV2nANWxjhMAAV4PANWzuhcAAV6HANW13hsAAV8LANW4AAAbAAGybgTLAAFfkwABX9cAAWqcAALAQAWrAAFflYAPAAP9oAgAAAQPAAFgEwABapwAAAAEBAcAAWA4AAACEQGADwABeVgAAXAE+Bz0cwABY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wABL2sAAS+DAAEziA8AATb0AAAFgAcAA/2gAAAIEwABtSIEzwABMC8AATA8Jg/MAYAOIkQAEwABtSoEzwABMHcAATCIYkoHAAGzUAGADwABjywErAQXAAG1QgTPAAEwnwABMJ8AATDsAAAADwABMMMAATDsAAAABAQHAAEw2AAAEg/NgA4iRAABgA8AAbUYBPwIIAcAAbUiAAMA1x6oJAcAATCfAAP9+AAAAAAIGwABtTIEzwABMQMAATEnAAEysAADAAE2jAAAAAQPAAExUwABMrAAAAAEBAcAATGQAAAC0s2ADwABzxAAAYAPAAGPLAT4BSsAATHYBNQAAAAEAYAPAAGPLARbAAEx9LpKBwABs1MAAbUojHMAATIOBAMA1yCpIAQABKwDAAP91F8AATH0ukoHAAGzUHMAATJKAwABMh8A1yAnAAE2jAQABFsAATKMWwABMni6D88AAbUiClIiXAMAAc8rAAG1KgQDANcgqAWADwABjywbAAG1OgTPAAEyxwABMxcAATOABAMAAQZcAAAABA8AATNLAAEzgAAAAAAAAAGADhMEBSsAATNUBJsAATNUBFsAATNoWwABM1S6D88AAbUiEV4JZYAOEwQAANcfdADXIqAA1yP8AAAACAAABBsAAbNaBM8AATXnAAE1+wABPKQABwABNvgAAAAEDwABNnMAATykAAAAEBATAAE2yAAAAtDhgA8AAbNcAwABN1gAAALSzYAPAAHPEAMAATfUAAACCbmADvjoAwABOCAAAAIGmXgMAAQIBYAO+XgHAAEnPYAPAAPxVAABcAABcAT4CTsAATkPAAE5NAADAAE19YAPAAHQAARzAAE5fgMAATk/ANck/wABNfwEAAYLAAE5swDXJXwDAAGzgPR7AAE55wABzwwMAA4HAAE6RwDXJT4LAAE6dwDXJXzTAAE6tA8AATq3AAE8mAAAAAgEBwABOxQAAAIJwYAOIkQABwABO1QAAAMAASc9gA8AA/FUBagBgA8AA/yV5YAPAAP8lAT4BPRzAAE7ng8AATubANcltIAIAARzAAE7yhMAATujANcmVwABNnAEAAYXAAE8DwDXKAADAAHQEAcAASc+GwABPGMA1yg8AAAGBMwA1ynkANZAUADWWkgA1qkAANbSUADXAewA1w98ANccpADXJEAAAAAcANckTADXKeQAAAAEAAgbA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CE6yqbK3AADAAE47XQPAAP7xAltbARyyuS7AAE45wABvDAEAARayyYCyxMA2VzqG9cAAbjgAwABvL06y3bLpAADAAE48XQPAAP7xAltbARyy6y7AAE45wABvDAEAARay+4Cy9sA2VzqEiMAAbjsAwABvL06zDbMbAADAAE49XQPAAP7xAltbARyzHS7AAE45wABvDAEAARazLYCzKMA2Vzq1WcAAbjkAwABvL06zQbNOAADAAE4+XQPAAP7xAltbARyzUC7AAE45wABvDAEAARazYICzW8A2VzqEh8AAbjoAwABvL06zc7N+AADAAE4/XQPAAP7xAltbARyzgC7AAE45wABvDAEAARazkICzi8A2VzqEi8AAbjwAwABvL06zobOvAADAAE5AXQPAAP7xAltbARyzsS7AAE45wABvDAEAARazwYCzvMA2VzqZjsAAbj0AwABvL06z1bPiAADAAE5BXQPAAP7xAltbARyz5C7AAE45wABvDAEAARaz9ICz78A2Vzq1W8AAbj4AwABvL0q0AwEytApbWwcnhEiBtB3ANldWJ5o6grQ7wDZXjyeCboO0WsA2V8gnhpmEtHrANlgBJ4SbhbSXwDZYOieGHYa0tcA2WHMntWiHtNXANlisBsAAbzGBN7TxtPW1YgAAwABOQsAAbwwAAAABA7UJtWIAAAABAQG1GQAAAIFUYAPAAG7JAABdA8AA/vECW1sBSrUoATK1KFtbAie0tBa1Qhy1Ly7AAE42AQABFrU6gLU1wDZZWoJJwABuywDAAG8swABOKcAAb08nrWoWtV2AtVjANllarWrAAG7MBsAAbzKBN7VntWu3HgAAwABOQ8AAbwwAAAABA7V/tx4AAAABAQG1iAAAALWIYAPAAG41AABdA8AA/vECW1sBPgVOtZu1nwAAgKtdA8AAxiQCYAPAAQACXQPAAP6/AVsBH7WlwADGRwECYAPAAQACXQPAAP6/AVsBarXAYQMCYAPAAQACYAPAAQACYAPAAP4bwAFE+wBPtdW12gAAAZW0YQMBYAPAAG4wXAADteC2vgAAAAEBAbXqAAAAgVRgA8AAbjAAAFwBPgJJtfgWtgYWtgGDtfzANlpzr5bAAG4ygVXAAP6hSrYPAD89HLYggbYdwDZaAIC/AgACFrYtHLYhLsAATjYBAAGDtifANlpzAMAAbyzAAE4pwABv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HMAAROQuwABOSsAAbwwBAAEWwABE+IDAAETzwDZoZYKXwABuhQDAAG83AMAA/w2BAMA2aIcGwABvNYE3wABGRsAARkrAAEcOAADAAE5LwABvDAAAAAEDwABGYcAARw4AAAABAQHAAEZ0AAAAwABOTGADwABu1gAAXQPAAP7xAltbAUrAAEZ9ATLAAEZ9W1sEJ4QoFsAARpaAwABGkcA2aU2EHsAAbtgnhCwWwABGtoDAAEaxwDZpTYQiwABu2SeELRbAAEbXgMAARtLANmlNhCPAAG7aJ4QuFsAARvuAwABG9sA2aU2EJMAAbtsGwABvNoE3wABHE8AARxfAAEeRAADAAE5NwABvDAAAAAEDwABHKsAAR5EAAAABAQHAAEc5AAAAgVRgA8AAbs8AAF0DwAD+8QJbWwFKwABHSAEywABHSFtbAyeAvRbAAEdWgMAAR1HANmoEgL3AAG7RJ4KUFsAAR2mAwABHZMA2agSClMAAbtInrSwWwABHhIDAAEd/wDZqBK0swABu0wbAAG8+gTfAAEeWwABHmsAASlkAALVFAAAAAQPAAEenwABKWQAAAAEBAcAAR7UAAACBVGADwABurAAAXQPAAP7xAltbAT4BSsAAR8EBNcAAR8gAAAEAXQPAAP7xAltbARzAAEfILsAATknAAG8MAQABgMAAR9jANmqcAMAAbzQ1AAAAAQBbARzAAEfmgcAAR+TANmrAgKUBAAEywABH/WADwAEAAmADwAD/aAknl98ewABIE8AAbw8CAAIWwABIL4DAAEgqwDZqnLVbwAButBbAAEg5LsAATjbAAG8sACeiYhzAAEhWLsAATkvAAG8MAQABFsAASHOAwABIbsA2apyiYsAAbrMAwABvNSeFVRbAAEiagMAASJXANmqchVXAAG62J65WFsAASMmAwABIxMA2apyuVsAAbrcnmuocwABJMhzAAEkPFsAASQSAwABI/8A2apya6sAAbriAqwEBXQPAAP7xAltbATTAAEkTA8AASRPAAEkwAAAAAQEBwABJFAAAAIDUYAPAAG7PAABdA8AA/vECW1sBSsAASRoBHMAASRouwABOTcAAbwwBAAGCwABJLsA2a+4AwABvNgDAAP6IgK0AAAAAwAD+kye1YxbAAElYgMAASVPANmqctWPAAG65J7VlFsAASYKAwABJfcA2apy1ZcAAbron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IwAAYAPAAG5yAUqr1QEXq9uCq9XANp2YhFeAq+TANpyjwABuKD0cq/4Wq/eAq/LANpyjhIvAAG52g/0BAAGBrAbANp12AMAA/o09HKwpFqwfgKwawDaco7VZwABudYP9AQABgawxwDaddgDAAP6NSqxFAYCsTMA2nKMAwACdbwbAAG+KgTisX6xprocAAJkfAAAAAQOscq6HAAAAAAAAAGADwABukQFKrHgBHKx/Fqx4LoNKwABvebHDAQFgA8AAbpEBNKyVA6yVroYAAAAAAAAAYAPAAG6RAT4KTqysrLEAAIFUYAPAAG6RAR+st8AAbp0AAAAAPRys1S7AAE5pwABvUgEAAYCs5MA2noAAwABvgT0XrPiArPPANp6AtVscrQoWrQMug0rAAG95sCkBAWADwABuwQEWrRMuwABOYsAAb40AwACdV8AAbpU9F60ugK0pwDaegKGdHK1EFq09LoNKwABvebC2AAAAAMAAnXrAAG6UPRetX4CtWsA2noCClxytbRatZi6DSsAAb3mwKQEBYAPAAG58ARatdi7AAE5rwABvUsAAb4IAwACdV8AAbpY9F62TgK2OwDaegIKUHK2hFq2aLoNKwABvebC2AAAAAMAAnXrAAG6TPRetvICtt8A2noCEIhytzRatxi6DSsAAb3mwLQAAAADAAJ15wABul0mt4Rat6oCt5cA2noCEIsAAbpc+AT0XrgSArf/ANp6AhSEcrhIuwABObMAAb1IAAAAAwABvg8AAbpg/PRyuSRauQICuO8A2noC1W8AAbpWD/QEAATSuUQOuUa5nAAAAAQEBrlIAAACA9WADwABuwQAAYAPAAG6RAUquWAEXrlqBrljANqAIhFeArmPANp6AwABuKADAAP6NSq5yAYCuecA2noAAwACdbwbAAG+CgTiujK6VrzkAAMAATmvAAG9SAAAAAQOuoq85AAAAAAAAAGADwABufAE+AUquqwE1rrYAAAEAYAPAAG58AR+utsAAboIAAAAANQAAAAEAWwEXrsmArsfANqCDahyu2Bau0S6DSsAAb3mwLwAAAADAAJ1YwABufjUAAAABAFsBF67wgK7uwDagg4KQHK79Fq72LoNKwABvebAvAAAAAMAAnVjAAG5/NQAAAAEAWwEXrxWArxPANqCDgbIcryMWrxwug0rAAG95scIAAAAAwACdWcAAboCAAMA2oIMGwABvg4E4rz6vS6/IAADAAE5swABvUgAAAAEDr16vyAAAAAAAAABgA8AAboMBPgNOr2yvdgAAwABObWADwAD8VQEcr38Wr3gug0rAAG95sC0AAAAAwACdeUmvj4Cvk8A2oV5Kr54BHK+lLrDKAAAAAMAAb4s/Sq+5ASsGwABvi4E4r82v2rC5AACwygAAAAEDr+awuQAAAAAAAABgA8AAboMBSq/sARyv8xav7C6DSsAAb3mxwwEBYAPAAG6DATSwDAOwDLC4AAAAAAAAAGADwABugwE+BE6wJrArAACBVGADwABugwEfsDHAAG6KAAAAAD0csFIuwABOacAAb1IBAAGAsGHANqIFAMAAb4E9F7B1gLBwwDaiBYKXHLCDFrB8LoNKwABvebApAQFgA8AAbnwBFrCMLsAATmvAAG9SwABvggDAAJ1XwABuhUqwpAGAsKvANqIFAMAAnW8GwABvhIE4sL6w0LHmAADAAE5uwABvUgAAAAEDsOax5gAAAAAAAABgA8AAbtYBPgJOsPOw+QAAgJZgA8AA/hsBHLECFrD7LoNKwABvebHLAAAAAMAAnXtKsREBH7EcwABu3QQAAASEHiEcsVUcsUeAsUHANqK6g3wBAAFqsUlgA8AA/huDXQDAAP4zSAEAAZMAwAD/P4QiIRyxfxyxcoCxbMA2orqDfAEAAWqxdGADwAD+G4FXAMAA/jNIAQABkwDAAP8/hCMhHLGtHLGegLGYwDaiuoN8AQABarGgYAPAAP4bIQDAAP4zSAEAAZMAwAD/P4QkIRyx3RyxzYCxx8A2orqDfAEAAWqxz2ADwAD+GxUAwAD+M0gBAAGTAMAA/z8GwABvhYE4seux+bJ4AADAAE5vwABvUgAAAAEDsguyeAAAAAAAAABgA8AAbs8BPgFKshQBH7IfwABu1QMAAxyyPRayNi6DSsAAb3mwtgAAAADAAJ16HLJSFrJLLoNKwABvebC2AAAAAMAAnXocsmcWsmAug0rAAG95sLYAAAAAwACdegAGwABvjIE4sn2yirU7AADAAE5gAAAAAQOylrU7AAAAAAAAAGADwABurAFKspwBHLKjFrKcLoNKwABvebHDAQFgA8AAbqwBNLK8A7K8tToAAAAAAAAAYAPAAG6sAT4NTrLWstsAAIFUYAPAAG6sAR+y4cAAbsAAAAAAPRyzAi7AAE5pwABvUgEAAYCzEcA2pIwAwABvgT0XsyWAsyDANqSMtVscszcWszAug0rAAG95sCkBAWADwABuwQEWs0AuwABOYsAAb40AwACdV8AAbrQ9F7NbgLNWwDakjKJiHLNnLsAATm7AAG9SAAAAAMAAb4TAAG6zPRezjoCzicA2pIyFVRyzohazmy6DSsAAb3mwtgAAAADAAJ16wAButj0Xs72As7jANqSMrlYcs9kWs9Iug0rAAG95sLYAAAAAwACdesAAbrc9F7P0gLPvwDakjJrqHLQIFrQBLoNKwABvebApAQFgA8AAbs8BFrQRLsAATm/AAG9SwABvhQDAAJ1XwABuuD0XtDOAtC7ANqSMtWMctEgWtEEug0rAAG95sLYAAAAAwACdesAAbrk9F7RjgLRewDakjLVlHLR5FrRyLoNKwABvebAvAAAAAMAAnVjAAG66PRe0l4C0ksA2pIyClxy0pRa0ni6DSsAAb3mwKQEBYAPAAG58ARa0ri7AAE5rwABvUsAAb4IAwACdV8AAbrs9F7TLgLTGwDakjIKUHLTZFrTSLoNKwABvebC2AAAAAMAAnXrAAG61PRy0/Ra09IC078A2pIy1W8AAbrSD/QEAATS1BQO1BbUbAAAAAQEBtQYAAACA9WADwABuwQAAYAPAAG6sAUq1DAEXtQ6BtQzANqaMhFeAtRfANqSMwABuKADAAP6NSrUmAYC1LcA2pIwAwACdbwbAAG+GgTi1QLVPta8AAMAATmbAAG9SAAAAAQO1YrWvAAAAAAAAAGADwABuyQFKtW4BH7VywABuzgIAAhy1gS7AAE5fAAAAAMAAb30ctZwWtZUug0rAAG95scIAAAAAwACdWQAGwABvjYE4tbS1wLa0AADAAE5iAAAAAQO1y7a0AAAAAAAAAGADwABuwQFKtdEBHLXYFrXRLoNKwABvebHDAQFgA8AAbsEBNLXwA7XwtrMAAAAAAAAAYAPAAG7BAT4FTrYJtg4AAIFUYAPAAG7BAR+2FMAAbsgAAAAAPRy2NC7AAE5pwABvUgEAAYC2Q8A2p5UAwABvgT0XtleAtlLANqeVgm4ctmIuwABOYAAAAADAAG+MwABuwz0XtogWtn+AtnrANqeVgm7AAG7DhFeAtpHANqeVwABuKEq2nwGAtqbANqeVAMAAnW8GwABvjoE4trm2xbeAAACZHAAAAAEDttC3gAAAAAAAAABgA8AAbp4BSrbWARy23Ra21i6DSsAAb3mxwwEBYAPAAG6eATS29QO29bd/AAAAAAAAAGADwAD/JQE+A063DrcTAACBVGADwABungEftxnAAG6lAAAAAD0ctzkuwABOacAAb1IBAAGAt0jANqh6AMAAb4E9F7dcgLdXwDaoeoKUHLdqFrdjLoNKwABvebC2AAAAAMAAnXrAAG6gAMAAnW8GwABvh4E4t4W3lLgNAADAAE5qwABvUgAAAAEDt6W4DQAAAAAAAABgA8AAbmkBPgNOt7O3vQAAwABObWADwAD8VQEct8YWt78ug0rAAG95sC0AAAAAwACdeUm31oC32sA2qQ5Kt+UBHLfsLsAATmEAAAAAwABvjz9Kt/4BKwbAAG+PgTi4ErghuT4AAMAATmEAAAABA7gruT4AAAAAAAAAYAPAAG5pAUq4MQEcuDgWuDEug0rAAG95scMBAWADwABuaQE0uFMDuFO5PQAAAAAAAABgA8AAbmkBPgVOuG+4dAAAgVRgA8AAbmkBH7h6wABucQAAAAA9HLidLsAATmnAAG9SAQABgLiswDapuQDAAG+BPRe4wIC4u8A2qbmC5xy40ha4yy6DSsAAb3mxwgAAAADAAJ1ZwABuaz0XuPOAuO7ANqm5mdMcuQQWuP0ug0rAAG95sCkBAWADwAEAAgEWuRQWuQ0ug0rAAG95sLbAAJ16AMAAnVfAAG5sSrkpAYC5MMA2qbkAwACdbwAANo2CADaN1AA2jioANo/VADaWogA2mNkANpmvADacRgA2niMANqBOADahLQA2oagANqKJADajqQA2pC0ANqbSADanNgA2qB0ANqjdADapWgA2qmgAAAAUAAQEwABvVYE4uU25YQbAAE5wwABvUgBgA8AA/hsBarldYAPAAP4bg10EwABvVoE4uW25gAbAAE5xwABvUgBgA8AA/hsBarl8YAPAAP4bgVcEwABvV4E4uYy5oQbAAE5ywABvUgBgA8AA/hsBarmdYAPAAP4bIQTAAG9YgTi5rbnDBsAATnPAAG9SAGADwAD+GwFqub9gA8AA/hsVAgbAAG9agTiBv4HEgisAAZWiAAAAAQOByoIrAAAAAgICgdMAAACBVGADwABuNQCB6QAAAIRAXQPAAP/QAV0DwAD+vwFgA8AA/hsAAFwBPgE9HIIbH4H3wABvdgEAAR+CCcAAnSoBAAGBghTANquMAADAAE30AQABgIIkwDarfgDAAG9jBsAAb1uBOIIugjaCjAABhywAAAABA4I8gowAAAABAQGCRwAAABJdA8AA/r8BYAPAAP4bAABgA8AAbjUBPgFKglEBHIKBH4JcwABvkQEAAR+CbcAAnYsBAAGAgnrANqwBAACDogAAAADAAG9+AYE4ADasTQA2dUUANo0BADaqwQAAAAIANqteADar4QA2rE0AAAACAAIGwABvkgCBOQAAD4DaAACCLoIIAIEDAACksQAAgRwAAMAAYgUAAIE/AAC9/gAAgWMAAMAAiL8AAIGLAADAAJ2MAACBrgAAwAB2bgABAQHAAE50gd4AAMAAgUgAAIIKAADAAIVhAACCLwAAwABEywAAglgAAMAAbXMAAQEDwABN2cAATebAAE3ggp0AAMAAiUYAAILDAACA+wAAgt0AAMAAXlAAAIMLAADAAHBhAAAAAAAIAsAAb5OBOYY7hkGXJQO5DAAAAWABwAD/aAAAAwTAAG+WgTmGbYZ4Cbi0wABvkgBgA8AAhWIABMAAb5eBOYaahqkJwABOdcAAb5IAXQPAAP7xAmADwABtfmADwABvoAEyhqdgA8AAbX5gA8AAb6AABMAAb5iBOYbQhuUJwABOdsAAb5IAXQPAAP7xAmADwABt6mADwABvpgEyhuNgA8AAbepgA8AAb6YAAQXAAG+fgTmG6obqh08AAAADhviHTwAAAAEBAYcQAAAAwABOd2ADwABEzgAAYAPAAG+TAT8CCADAAG+WFodFgIc2wDat7LSzwABE6wkBhurAAP9+AAAAAAQGwABvmoE5h7+HxJP/AACwUgAAAAEDh92T/wAAAAEBAYflAAAAhJhgA8AAbX4AAFwBPgZOh/yIBgAAhO9gA4McARyIFBaICC64tMAAb5LAAG+WwABOeAEAAYCIIcA2rkkAwACFgU6IQohPAACE5F0DwAD+vwFgA8AAbbMBMYhRYAPAAG2zAE6IdIh+AAC1Ul0DwAD+8QJgA8AAbepgA8AAb64BMoiAYAPAAG3qYAPAAG+uAEaIiACIlgAAAISbYAODrwAWiKmBiJ/ANq5dhIuDL0E+BUmIuSEWiMSEiL7ANq7ghRyDyEKI1gA/TojziQAAAMAATnlgA743ARyJDhaJAi64tMAAb5LAAG+WwABOegEAAYSJF8A2ruAAwACFdU6JM4k+AACCb2ADhOwBFolGhIlAwDau4IUhg7NOiWeJbQAAgJZgA8AAYjgBHIl7FolvLri0wABvksAAb5bAAE57AwABhomMwDavSQLAAE58KsAATn0pwACFf0mJ1SIhHInfh4nZwDavZUgBAAErAMAA/3UAFonwh4nqwDavZbn2wABiOj4BPRyKD4OKBsA2rrCAvwIAAiaKDwGFihDANq8VYAPAAG3qH4okwABvtQEAAYeKMsA2r2UAAMAA/wY/RopNioiKYQAAAJk0YAOD4gAWinqBinDANq5dhOSDMD4DToqdirAAAMAATn5gA8AAbbMBJoqdARyKvhaKsi64tMAAb5LAAG+WqHQBAAGEis3ANrAMAMAAhXRgA8AAbbM9HIrugorhwDauj1YBAAGFivLANrApAMAA/tBGiw0AiyEAAACFIWADhHQAFos8hIswwDawDIUzg+dBPgFJi1Qli2SGi1jANrCFYAOEgj4HTouWi5sAABJgA8AAb64BHIu0g4urwDausEsBAAEci8EWi7UuuLTAAG+SwABvlsAATnoBAAEWi9YUi8rANrCFBgFgA4SChJuEhwDAAIV1AMAA/wVJi+kci/KHi+3ANrC2SAEAASsAwAD/dT4BQoyPAD9OjLyMzQAAwABOf2ADwABvxAFqjNVgA8AAb8TAAUUZTo0EjQoAAICWYAOE7AEWjRgUjQzANrCFBgFgA4SCgJaEhU6NN41FAADAAE6BYAPAAGI4ARyNUxaNRy64tMAAb5LAAG+WwABOewMAARSNZMA2sUYJAALAAE58KsAATn0pwACFf0mNsCIhHI3CFI20wDaxaAoASAEAASsAwAD/dQAWjdsUjc3ANrFoCgC59sAAYjo+AT0VjfXANrEnCB+ODMAAb88BAAEUjh/ANrFoCgAASY5AJY5KFI5EwDaxRgkAYAOE/z4DTo6CjowAAIDtYAOIkQEWjpQUjo7ANrFGCQFgA4T/gnCFAU6Oro63AACBs2ADwAD+GwEcjvMWjt4WjtWEjsnANrAMgm6D5oTHhMiAuwEAARSO+8A2sgwLAADAAP7USY8TIRyPIBSPF8A2si4MAEgBAAEcjyOUgcYAAAAAwAD+PgDAAP8/PgFJjzccj0QUjzvANrIuDACBbQEAARaPXBaPU4SPR8A2sAyCboPmhTqExwDAAP9MPgI9FY+GwDaxaAocj6IWj5YuuLTAAG+SwABvlsAATnsDAAEWj9IUj8jANrIMCwCFIYiZAsAATnwqwABOfSnAAIV/SZBEIiEckFYUkEjANrFoCgBIAQABKwDAAP91ABaQbxSQYcA2sWgKALn2wABiOj4BPRWQj8A2sScIH5C8wABv0AIAAhSQ08A2si4MABSQ3cA2sWgKAAA/Pz4CPRWRMsA2si4MHJF0FpFkFpFbhJFPwDawDIJug+aEyITJgLsBAAEUkXzANrIMCwAAwAD+1EmRliEckaMUkZrANrIuDABIAQABHJGmlIHGAAAAAMAA/j4AwAD/Pz4CPRWRvMA2sWgKHJHYFpHMLri0wABvksAAb5bAAE57AwABFpIIFJH+wDayDAsAhSGImQLAAE58KsAATn0pwACFf0mSeiIhHJKMFJJ+wDaxaAoASAEAASsAwAD/dQAWkqUUkpfANrFoCgC59sAAYjo+AT0VksXANrEnCB+S8sAAb9ECAAIWkw4UkwTANrIMCwCAvYiVFJMUwDaxaAoAAD8/Pz0ck3sWk2+Hk2rANrC2hTPAAG+xgL8CAAKFk3zANrApFJOSwDaxJwgAAMAA/wY/PRyTyhaTwC7AAE51wABvksAAb5eAvwIAAoCTy8A2rkkfk9nAAG+lAgACgpPjwDauj4OT8cA2rrAAAMAA/wYGwABvm4E5lASUCZY9AAC5QwAAAAEDlByWPQAAAAICApQkAAAAhJtgA8AAbeoAlEEAAADAAE6CYAPAAJ4fAABcAT4FTpRclGEAAIPzYAODrwEmlFwBHJRvFpRjLri0wABvksAAb5a5OgEAAYCUfcA2tOUAwACFjGADg69OlJeUogAAgm9gA4TsARaUqYKUpMA2tQmFIYOzTpTIlM4AAICWYAPAAGI4ARyU3BaU0C64tMAAb5LAAG+WwABOewMAAYOU7cA2tUECwABOfBaVF4KVEsA2tQmEIoPAwABOfSnAAIV/SZU5IiEclUOElT3ANrVdSAEAASsAwAD/dQAhFpVVhJVPwDa1Xbn2wABiOj4BPYyVacA2tV0rPz0clgkWlfkuwABOdsAAb5LAAG+YgL8CAAKAlgrANrTlH5YXwABvrQIAAoSWJ8A2tV2Bli7ANrTzAADAAP8GBsAAb5yBOZZCllCWuwAAwABOgwAAAAEDlmqWuwAAAAEBAZZyAAAAhJtgA8AAbeoAAGADwABvrgE+AUqWfwEclrAWlqcclpAWloYuwABOdcAAb5LAAG+XSwEAARaWl4CWkcA2tj6FGcAAbZQAwAD/BbVSwABvo0sBAAGAlrHANrY+AMAA/wUGwABvnYE5lsCW0JcjAADAAE6EAAAAAQOW7JcjAAAAAQEBlvQAAACEm2ADwABt6gAAYAPAAG+mAT4BSpcBARyXGBaXCC7AAE52wABvksAAb5hLAQABgJcZwDa2xADAAP8FAAA2rikANrTFADa2HAA2tqIANrcDAAAABALAAG+ggTmXKJcul8IDwABOhQAAAWABwAD/aAAAAgTAAG+igTmXVZdhCYTkAF0DwAD+vwFgA8AAbbMABMAAb6OBOZeGl48JtVIAXQPAAP7xAmADwABt6mADwABvrgABBcAAb6WBOZeUl5SXwAAAAAOXnZfAAAAAAgICl6MAAASE5F0DwAD+vwFgA8AAbbMAl7YAAAS1Ul0DwAD+8QJgA8AAbepgA8AAb64AAGADwABvoAE/AwgBwABvooAAwDa3lggBwABvo4EAwDa3qwkBl5TAAP9+AAAAAAAAADa39QAAAAACwABvpoE5l8WXy5izA8AAToYAAAFgAcAA/2gAAAIEwABvqIE5l/OX/wmWkQBgA8AAYjgABMAAb6mBOZgfmCkJwABOggBgA8AAnh8AAQXAAG+tgTmYLpgumGEAAAADmD2YYQAAAAICAphDAAAElpFgA8AAYjgAmFYAAATAAE6CYAPAAJ4fAABgA8AAb6YBPwMIAcAAb6iAAMA2uGYIAcAAb6mBAMA2uHQJAZguwAD/fgAAAAABBsAAb6uBOZhmmG+YsQEAwABOhwAAAAEDmH+YsQAAAAAAAABgA8AA/FUBSpiCASIhHJiNFpiCLsAAToLAAG+pSAEAASsAwAD/dQAhHJiqFpijFpiYLsAAToLAAG+phIvAAJ4iSAEAASsAwAD/dQAANrizADa5IAAAAAECwABvroE5mLaYvJngA8AATogAAAFgAcAA/2gAAAIEwABvsIE5mOKY7gmWkQBgA8AAYjgABMAAb7GBOZkXmSgJhTMAXQPAAP7xAmADwABts2ADwABvxAEymSZgA8AAbbNgA8AAb8QAAQXAAG+1gTmZLZktmU0AAAADmTqZTQAAAAEBAZlAAAAElpFgA8AAYjgAAGADwABvrgE/AggBwABvsIAAwDa5sAkBmS3AAP9+AAAAAAEGwABvs4E5mVKZZZneAAAjAWqZU2ADwAD/aAIAAAEDmW2Z3gAAAAAAAABgA8ABAAIBSpl5ASQABifAAE6JNQAAAAEAYAPAAGI4ARaZly6WkcAAb7AjHJmlgADANrofSAEAASsAACscmaWAAMA2uh+w0AAAAADAAGJZAWADwAEAAieApyfAAE6KFpnQLoUzwABvsSeDJgAANrnhADa6dgAAAAECwABvtoE5meOZ6JomC8AATosAAAFgAcAA/2gAAAcEwABvuIE5meiZ6AknAGADwAD+GwAEwABvuoE5meiZ6AkowABvkgBgA8ABAAIABMAAb7uBOZnomegGKQBdA8AA/r8BYAPAAG+2AWoAXQPAAP6/AWADwABvtsABRYIEwABvvIE5mfyZ/Aa7qABgA8AAb7YBagBgA8AAb7bAAUU8BMAAb72BOZoGmgYGhasAYAPAAG+2AWoAYAPAAG+2wAFFVQTAAG++gTmaFJoUBoV1AGADwABvtgFqAGADwABvtsABRW4EwABvv4E5mh2aHQbAAE6PAGADwABvtgFqAGADwABvtsABRQUBBcAAb8OBOZnomeiaJgEAAAOZ6JomAAAAAgICmegAAAQnYAPAAP4bAJnoAAAEKGADwAEAAgAAYAPAAG+2AT8DCADAAG+4gADANrukCADAAG+6gQDANruxCQAAwAD/fgAAAAABBsAAb8GBOZnomeiaJgAAIwAAAAEDmeiaJgAAAAAAAABgA8ABAAIBSgABDwAuwABvugAANrvsADa8HQAAAAECwABvxIE5mimaL55MA4VbAAABYAHAAP9oAAAEBMAAb8aBOZpVmlkJgmsAYAPAAG+2AATAAG/HgTmaZ5psCScAYAPAAP4bAATAAG/IgTmafZqBCYC9AGADwAEAAgAEwABvyYE5mpmangmAlgBgA8AAYjgABAXAAG/PgTmao5qjmxIAu6gAA5q1mxIAAAABAQGauwAABICWYAPAAGI4AABgA8AAb8QBPwUIAcAAb8mAAMA2vLoIAMAAb8ZqmuFgA8AAb7bAAUU8CADAAG/HKwgAwABvyCsJAZqjwAD/fgAAAAAFwABv0IE5mxebF5uEAIWrAAObLZuEAAAAAgICmzMAAAQnYAPAAP4bAJs/AAAEgJZgA8AAYjgAAGADwABvxAE/BQgBwABvx4AAwDa9JwgBwABvyYEAwDa9NAgAwABvxmqbZWADwABvtsABRVUIAMAAb8grCQGbF8AA/34AAAAABcAAb9GBOZuJm4mb7ACFdQADm5qb7AAAAAICApugAAAEgL1gA8ABAAIAm6sAAASAlmADwABiOAAAYAPAAG/EAT8FCAHAAG/IgADANr2mCAHAAG/JgQDANr20CADAAG/GapvRYAPAAG+2wAFFbggAwABvxysJAZuJwAD/fgAAAAAFwABv0oE5m/Gb95x0AcAATo8AA5wKnHQAAAAAAAAAYAPAAG/EAT8FCADAAG/GapwsYAPAAG+2wAFFBQgAwABvxysIAMAAb8grCADAAG/JKwkBm/fAAP9+AAAAAAIGwABvy4E5nHmchJ4bAQC1yAAAAAEDnI6eGwAAAAAAAABgA8ABAAIBPgJHnJQWnJwugmvAAG/GBAGcv2qcv2ADwABvtsABRTwAPgFKnM8BHJzcFpzWLoCWwABvybDQAAAAAMAAYlkBnQtqnQtgA8AAb7bAAUVVAD4BSp0fASSdSgMWnSguJ8AAb8cnguocnTYWnTAugJbAAG/JsNAAAAAAwABiWQGdZ2qdZ2ADwABvtsABRW4APgFKnXYBJJ2gAxadfy6AvcAAb8gnguocnYwWnYYugJbAAG/JsNAAAAAAwABiWQGdvWqdvWADwABvtsABRQUAPgFKnc4BJ4D0PTCd5B+d7sAA/a0BAAEknhYCJ8AATpAWnhEugmvAAG/GAAbAAG/NgTmeIJ4znkoAACMBap4hYAPAAP9oAgAAAQOeO55KAAAAAAAAAGADwAEAAgFKnkEBFp5BLrXIwABvywAANr5nADa/hgA2v8UAAAACAsAAb9OBOZ5PnlXAAFDKA71IAAABYAHAAP9oAAACBMAAb9WBOZ7hnvcGg+wAYAPAAQACAWqe52ADwAEAAsABRZoEwABv14E5n3efgQnAAE6SwABvkgBdA8AA/vECYAO+N2ADwABv4QABBcAAb+CBOZ+Gn4afpwCAtcAAb5IAA5+Wn6cAAAABAQGfnAAABMAATpJdA8AA/vECYAO+N2ADwABv4QAAYAPAAG/TAT8CCAHAAG/XgADANsBfCQGfhsAA/34AAAAABAbAAG/ZgTmf6J/woTsEAbAPAAAAAQOgEaE7AAAAAgICoCQAAACDSmADwABepQCgPAAAAHpgA4EUAABgA8AAb9MBPgQ9HKBSgKBLwDbAvYKYAQABaqBYYAPAAQACwAFFmgDAAF6nTqCGoJAAALVSXQPAAP7xAmADvjdgA8AAb+EBHKCZgKCSwDbAvbT1AQJgA743YAPAAG/hATSgsAOgsKD1AAAAAQEBoL4AAACCamADviUAAGADwABv4QFKoMkBHqDNwABv7AEAAYCg7sA2wL0AAMAAXt89HKEDgKD8wDbAvYKQAQABaqEHYAPAAQACwAFFmgDAAF6oSqERAR+hHMAAb+ABAAGCoS3ANsEDAAbAAG/cgTmhcqF3olEAALAQAAAAAQOhhqJRAAAAAQEBoZAAAACEQGADwABeVgAAXAE+Az0coaGAoZzANsHLgpgBAAFqoadgA8ABAALAAUWaAMAAXls9HKG2gKGxwDbBy7T9AgFgA8AAb+ECFqHOLsAATpLAAG+SwABv1zSh4gOh4qI5AAAAAgICofAAAACCamADviUAogoAAAASYAPAAG/hAABcAUqiHwEcoiSCoh/ANsJAsBABAAGAojTANsHLAMAAb+4AwABejD0cokWAokDANsHLgpABAAFqoklgA8ABAALAAUWaAMAAXlwGwABv2oE5olaiXsAAT/cEAZaDAAAAAQOiccAAT/cAAAADAwOigwAAAKVAYAPAAIlHAKKgAAAAgKtgA8AAgYIAorsAAAB6YAOBFAAAYAPAAG/TAT4OTqLuovgAALVSXQPAAP7xAmADvjdgA8AAb+EBMqL6YAO+N2ADwABv4QBPowOjCAAAAcAATpNhAwFgA743YAPAAPxVAAOjE6OnAAAAAQEBoyAAAACEm2ADvjcAAGADwAD8VQE+AUqjLwEiIRyjUxajQ4CjN8A2wrqlbsAAiV/AAE6UAQABhaNgwDbDOQDAAHAuACEco4wWo4GAo3XANsK6uM/AAIlNwABNKgEAAYWjm8A2wzkAwABsLT0co9wWo8gWo7qAo67ANsK6tVPAAIlbwABOdcAAb5LAAG+Xg/0BAAE0o+QDo+S0gwAAAAICAqPxAAAAmiZgA74TAKQAAAAAwABGPmADwABvoAAAYAPAAP8lAT4BPRykJxakHYakE8A2w+W1UsAAb6OD/QEAATSkLwOkL7R7AAAAAgICpDcAAADAAE6VYAPAAG3qAKRNAAAAEmADwABvrgAAYAPAAP8lAT4ETqRkpGsAAMAATpZgA8AAd1MBJqRkARykcYGkbcA2wsjAAE6XAQABh6SBwDbEJgDAAIGGYAPAAHdTSaSSHKSdFKSWwDbETgkASAEAASsAwAD/dT4BSqSyAD9OpWmldQAAvMlgA8AAcHMBHKWSFqWDgKV3wDbCurjIwACJXUsBAAGHpZPANsQmAMAA/wVJpaQhFqW1FKWpwDbEpwoAvMzAAHB8PgFJpcocpdmEpc7ANsMXIAEAAYel2sA2xCYAAD4BPRyl+oOl8cA2wuyAvwIAAhSl+8A2xE4JAGqmC2ADwABv4cABRZ8AwAD/Bj8+AUmmVSEcpmsWpl4UplnANsQ2CACWkcAAb7BIAQABKwDAAP91PghOppAAAACWkWADwABiOABOpq+mvAAAwABOmGADwAD8VQEqT6bSptcAAAHAAE6ZYQMBYAPAAGI4XAADpuqoEgAAAAEBAab5AAAAgJZgA8AAYjgAAFwBPgJJpxAUpxTANsVwDABKpyIAP0mnOBynSRSnPMA2xWELAEgBAAErAMAA/3U+AT0Vp2TANsVhCxSnc8A2xaQOAEmnjyEcp6AUp5PANsVhCwBIAQABFKejwDbFpA4AAMAA/3U+Aj0Vp7zANsVhCys9FafhwDbFcAwpPz0cqD4WqC0UqCHANsSnCgDAAE6awABwe4P9AQABFKhGwDbFhQ0AAMAA/o1OqG6ogAAAwABOm2ADwAD8VQEpQUaolACopgAAAJk0YAPAAG2zABaov4aotcA2w+WE5MAAb6JBPgZJqN0UqOHANsVwDAA+AUKpAQA/TqkzqUQAAMAATpxgA8AAcHMBHKlzFqlkgKlYwDbCurjIwACJXUsBAAEUqXTANsZxDwAAwAD/BUmpkByppRSplMA2xqYQAEgBAAErAMAAcJM+AUKp8gE/Tqotqj8AAMAATp1gA75hASMcqm8Wql+AqlPANsK6pW7AAIlfwABOlAEAARSqfMA2xnEPAADAAHAuFqqtFKqhwDbGcQ8AtbnAAG2uFqrpFKrYwDbGphAAwABOncAAcIUBYAO+YU6rF6sjAACFIWADwABvxAEcqzYWqyoUqyXANsQ2CACFM8AAb7FLAQABFKs3wDbGcQ8AAMAA/wVJq1Mcq2MUq1fANsdhEgBIAQABKwDAAP91PgE9Fat+wDbGWg4qPgFBR6vAFqvUFKvIwDbHYRIAgmvAAG/GBAGsA2qsA2ADwABvtsABRTwAPgI9HKwyFKwfwDbFhQ0AIAEAARasPxSsM8A2x2ESAICWwABvyQAAQqxbAgGsiWqsiWADwABvtsABRVUAPgJJrKkcrL8WrLkUrK3ANsdhEgAnwABvx4FtAQABFqzsFKzawDbG/REAhMe+ZQDAAP9MPgE9HK0tFK0awDbFhQ0AIAEAARatOhStLsA2x2ESAICWwABvyQAAPgE9Fa11wDbFcAwpQq20AgGt4mqt4mADwABvtsABRW4APgJJrf0hHK49Fq4UFK4CwDbG/REAhMi+ZoMcAQABFq5SFK5GwDbHYRIAgL3AAG/IAMAA/ow+AT0croQUrnHANsWFDQAgAQABFq6RFK6FwDbHYRIAgJbAAG/JAAA+AT0VrszANsVwDClCrwsCAa85aq85YAPAAG+2wAFFBQA+Aj0Vr1bANsVwDClCr38CSa/CIRSvx8A2xloOAD4BPRyv/RSv6sA2xYUNACABAAEWsAMUr/7ANsQ2CACWkcAAb7AAAD9JsCwiIRSwMcA2xXAMAAAhHLBOFLBBwDbFYQsASAEAASsAwAD/dT4GTrB1sHsAAICWYAPAAGI4ARywgYGwfcA2wsjAAE6eAQABFLCTwDbFYQsAAMAAgYhOsLWwywAAwABOn2ADwAD8VQEqTrDnsQAAAMAATqBgA8AA/FUBKkAhHLEkFLEewDbJiA8ASAEAASsAwAD/dbEesSsASbE8IiEWsU0UsUHANsSnCgDAAE6hwABwfwAcsWSEsVnANsMXIAEAAYexZcA2xCYAAD4BPRWxgMA2ybcQKUmxsyIiIhaxvRSxt8A2yYgPAKhcwABiOwEWsd8UsdnANsmIDwC7Z8AAYj8BFrIAFLH6wDbJiA8Au2XAAGI8ARayIhSyHMA2yYgPALZ7wABiQj4BPRWzCMA2ycoRKT89HLNQg7NHwDbC7IC/AgACFLNRwDbETgkAH7NfwABv9QQAAASWkRSzksA2yYgPAMAATqIUs7/ANsm3EADAAEnPFLPywDbJtxAAwABOoBS0NcA2ycoRAADAAP8GPz8AwAD/EADAAP8QTrSYtKoAAMAATqNdA8AA/r8BYAPAAG3qATG0rGADwABt6gBOtMG00QAAwABOpF0DwAD+vwFgA8AAbeoBMbTTYAPAAG3qAD0ctQEWtOiAtNzANsK6uMjAAIldg/0BAAE0tQkDtQm2gwAAAAICArUXAAAAgmpgA74lALUrAAAAvMlgA8AAcHMAAGADwAD/JQE+AUm1QCIWtUuHtUTANstoh5u+LAAhFrVeh7VXwDbLaIUcvio+Ak61irWaAADAAE6lYAPAAG+mARy10ha1wha1tIC1qMA2wrq1U8AAiVvAAE52wABvksAAb5hLAQABh7XTwDbLaADAAP8FSbXkFrX4FLXowDbLsQkAwABOh8AAb6s+AT0ctiWGthXANssfVgEAASa2KQGHtinANstoYAPAAG3qAMAA/tA+AT0ctl+Ftk3ANsr8VgEAASa2YwGHtmPANstoYAPAAG3qAMAA/tA/AMAA/xBOtri2yAAAwABOpl0DwAD/swFgA8AAbeoBNQAAAAEAXQPAAP+zAWADwABt6gEeAMAAwyEAAWADwABt6gAAhwDANsx5Trcvtz0AAMAATqddA8AA/7MBYAPAAG3qATUAAAABAF0DwAD/swFgA8AAbeoBHgDAAMMhAAFgA8AAbeoAABQAwDbMvAgATrgEuBcAAMAATqhgA8AA/hsBk0+4+7kNAAABwABOqWEDAWADwABt6mADwABv4QADuRnAAEv3AAAAAQEBuSEAAADAAE6VYAPAAG3qAABgA8AAb+EBPgtOuTi5PwAAwABOlmADwAB3UwEmuTgBHLlFgblBwDbCyMAATpcBAAEUuVXANs0jCwAAwACBhmADwAB3U0m5phy5sRS5qsA2zT4MAEgBAAErAMAA/3VKuboBKz9OueC55QAAEmADwABv4QEcufCDuefANsLsSwEAARS58cA2zT4MAADAAP8FSboAHLoUh7oEwDbMYIMcAQABFLodwDbNIwsAAMAA/78+AUq6cwE1AAAAAQBgA8AAb+EBFLp6wDbNmA0AIxy6fxQAwDbN6Q4ASAEAASsAAGq6iGADwABv4cABRckUAMA2zekOAAFgA8AAb+E/SbqrHLq9FLqvwDbMowgAgxwBAAEUusbANs0jCwAAwAD/vz4BSrr3ASs/PRy7IBS7EsA2zKMIAFYBAAEUuyTANs0jCwAAwAD/wE67P7tLAAC8yWADwABwcwEcu2gWu1mAu03ANsK6uMjAAIldSwEAARS7acA2zSMLAADAAP8FSbt4IiEWu4kUu33ANs54DgC8zMAAcHwAHLufhLuUwDbDFyABAAEUu6DANs0jCwAAAD4BPRW7s8A2zZgNNQAAAAEAXQPAAP7xAmADvjdgA8AAb+EBg7u6wDbC7DUAAAABAGADwAB3UwEUu8TANs0+DAA1AAAAAQBgA8AAb+EBarvUYAPAAG/hwAFFnzUAAAABAFwBHLvDFLvDwDbO6Q8AgL8CAAIUu8PANs8IEAAUAMA2zx4RAADAAP8GFADANs8eEQA+CU68E7wmAADAAE6iYAPAAPxVASEWvDUUvCnANs54DgDAAE6hwABwf068V7xnAADAAE6lYAPAAG+mARy8nxa8jxa8gYC8dcA2wrq1U8AAiVvAAE52wABvksAAb5hLAQABFLygwDbNIwsAAMAA/wVOvL+8xQAAgJZgA8AAYjgBHLzYgbzHwDbCyMAATp4CAAEWvPoUvOrANs+YEACWkcAAb6gBmAgpwACBiE69wL3JAADAAEnPYAPAAPxVASIiFL3XwDbPcQ8AACEcvfMUve3ANs/eEQBIAQABKwDAAP91ABy+CYS9/sA2wxcgAQABFL4KwDbNIwsAAABOviEAAADAAE6qYAPAAPxVAE7AAEDLAAAAwABOq10DwAD+vwFgA743AE7AAEDvwABA/QAAwABOrGADwAD+GwErScAAQQ4UwABBEsA20BkSAD4BPRXAAEGNwDbQaBMqPgM9FcAAQxnANtBoEyEcwABDKRTAAEMjwDbP3hEASAEAASsAwAD/dUnAAEM8IRTAAENBwDbQaBMAPgNOwABD48AAQ+4AAMAAToJgA8AAnh8BFsAARAAUwABD8MA2z5gQAMAAToLAAG+pPRXAAEQYwDbQaBM1AAAAAQBgA8AA/FUBNQAAAAEAYAPAAJ4fARTAAEQiwDbRARYAIxzAAEQuFADANtFHFwBIAQABKwAAKxbAAEQuFADANtFHFwDAAE6qwACeKQFgA8AA/FUjHMAARDYUAMA20ToXAEgBAAErAAAqFADANtE6FwABYAPAAPxVScAAREwiFMAARFDANtBoEwAAIRzAAERtFsAARGYUwABEW8A20QEWAISLwACeIkgBAAErAMAA/3U+AUFGwABEhsAARK/AAESUAAAAg/NgA4OvABbAAESnFMAARJzANtEBFgCEi8AAniI+Bk7AAETIwABE0wAAwABOrWADwABt6gEmwABEyAEcwABE7BbAAEThgMAARNXANsK6tLPAAIlJwABOegEAARTAAET1wDbR+RcAAMAAhgVgA8AAbepOwABFHsAARSgAAMAATq5gA8AAb+EBHMAARTYUwABFKsA2zP0KACABAAEUwABFN8A20iAYAAAAScAARVQcwABFYhTAAEVYwDbSchkASAEAASsAwAD/dT4CPRXAAEW3wDbQaBMqQsAARdoAP0nAAEYDFsAARhEUwABGB8A20nIZAMAATq/AAG/xPgI9FcAARmrANtBoEypCwABGjQA/ScAARrYhFsAARsUUwABGu8A20nIZAMAATqLAAG/mPgI9FcAAR7LANtBoEypCwABH1QA/ScAAR/4hFsAASA0UwABIA8A20nIZAMAATp/AAG/yPgI9IxzAAEhPFMAASDjANtB5FABIAQABKwDAAP7pFcAASDjANtB5FDHAAEhTYAO+NwArAV0DwAD+vwFgA743ScAASGkawABIbaSzPgE9HMAASLAUwABImcA20HkUAFYBAAEmwABIuAEcwABIuIHAAEi0wDbCyMAATpcBAAEUwABIyMA20iAYAADAAIGGYAO+NwDAAP7QPz8/P0nAAEkxIhTAAEk1wDbQaBMAACEcwABJVxTAAElAwDbQeRQASAEAASsAwAD+6T4CPRXAAEluwDbQkRU1AAAAAQBgA8AA/hsBFMAASX7ANszoCQA1AAAAAQBgA8AA/hsBFcAASX7ANszoCRzAAEmQFADANtQ0FgBkAQABlADAAP9BFADANtQ0FgBJwABJoCEawABJpaSzPgE9FcAAScvANtB5FCs/PgE9FcAAShfANtB5FCs9FcAASlXANs2YDTUAAAABAF0DwAD+8QJgA743YAPAAG/hAYPAAEpcwDbC7DUAAAABAGADwAB3UwEUwABKZsA2zT4MADUAAAABAGADwABv4QEfwABKdMAAb/UGAAAGlpEUwABKocA2z94RAMAATqIUwABKyMA2z3EPAMAASc8UwABK8sA20BkSAMAATqoUwABLEcA20GgTAMAATqgUwABLOsA20JEVAMAATrAUwABLd8A20HkUADUAAAABAFwBHMAASmUUwABKZcA21LcWAIC/AgACFMAASmXANtTYFwAUAMA21PAYAADAAP8GFADANtTwGAA9HMAAS60UwABLn8A2zKMIAIReAQABFMAAS7TANs0jCwAAwAD/wj0cwABL04fAAEvDwDbMYFYBAAEUwABL18A2zSMLAADAAP/ASsAAS+YBFMAAS+3ANs2YDQA9HMAATHCFwABMXsA2yvyD/QEAARTAAEx4wDbM/QoAAMAA/o09HMAATU2GwABNPcA2yx+ArgEAATTAAE1SA8AATVLAAE+ZAAAAAgICwABNWgAAAIHXYAPAAG3qAMAATWQAAACCTmADwABt6gAAYAPAAP4bAT4JTsAATXPAAE16AACBdmADwAD+GwEewABNhsAAiMECAAIWwABNpRbAAE2dFMAATZvANtZECwCESMAAbZOljMAAbXkWwABNvRbAAE21FMAATbPANtZUDACESMAAbZOljMAAbXkAScAATdIhHMAATd0UwABN1sA21m8NAEgBAAGTAMAA/z9KwABN4wEUwABN6sA21m8NAD9OwABOBMAATg4AAMAATrFgA4qtARbAAE44HMAATicWwABOHIDAAE4QwDbCurSzwACJSbk6AQABFMAATjXANtZECwAAwACGFoRggmZOwABOVMAATl4AAMAATrJgA4qtARbAAE6IHMAATncWwABObIDAAE5gwDbCurSzwACJSbk6AQABFMAAToXANtZUDAAAwACGFoRggmY9FcAATpjANtZvDR7AAE6hwACIxAIAAhbAAE69FMAATrPANtcEDgCBvYqvFsAATs0UwABOw8A2108PAIG9iq8AScAATtohHMAATuUUwABO3sA21m8NAEgBAAGTAMAA/z9KwABO6wEUwABO8sA21m8NAD89FcAATwDANtZvDRzAAE8YFsAATxMUwABPCcA21wQOAIH7irCCTwEAARbAAE8sFMAATyLANtdPDwCB+4qwAMAA/0BJwABPOSEcwABPRBTAAE89wDbWbw0ASAEAAZMAwAD/P0rAAE9KARTAAE9RwDbWbw0AP0rAAE9fARzAAE93FsAAT3AUwABPZsA21wQOAIcFirGCTwEAARbAAE+LFMAAT4HANtdPDwCHBYqxAMAA/0AAwAD+0j0cwABPsYbAAE+hwDbLH4P9AQABFMAAT7nANsz9CgAAwAD+jUrAAE/NAR/AAE/YwABv4AEAAYPAAE/pwDbC7AAGwABv3YE5wABQXMAAUG7AAFDIAAC1VAAAAAEDwABQesAAUMgAAAABAQHAAFCCAAAAhJtgA8AAd1MAAGADwABv4QE+AUrAAFCPATUAAAABAGADwABv4QEcwABQoBbAAFCWLsAATpLAAG+SwABv10sBAAGAwABQocA22SsAwAD/BSMcwABQqIEAwDbZTEgBAAErAABqwABQsWADwABv4cABRcmBAMA22UwBYAPAAG/hAAA2wJ0ANsGrADbClgA22QEANtmwAAAABALAAG/hgTnAAFECwABRCMAAXFUDwABOswAAAWABwAD/aAAACATAAG/jgTnAAFEywABRTQaD7ABgA8ABAAIBasAAUThgA8ABAALAAUXzBMAAb+SBOcAAUWbAAFFyCZaRAGADwABiOAAEwABv5YE5wABRgcAAUZkJwABOoABgA8AA/FUABMAAb+aBOcAAUajAAFG6CcAATqIAYAPAAPxVAATAAG/ngTnAAFHJwABR0QnAAEnPAGADwAD8VQAEwABv6IE5wABSfMAAUoMJwABOqgBgA8AA/FUABMAAb+mBOcAAU0fAAFNZCcAATqgAYAPAAP4bAATAAG/qgTnAAFN2wABTlgnAAE6wAF0DwAD+vwFgA743AAEFwABv9YE5wABTm8AAU6HAAFSvAQAAA8AAU7LAAFSvAAAABwAAB8AAU8AAAASWkWADwABiOAFqAGADwAD/JXnAAFPZAAAEwABOoGADwAD8VQFqwABT82ADwAD8VQDAAFQFAAAEwABOomADwAD8VQFqwABUGWADwAD8VQDAAFQrAAAEwABJz2ADwAD8VQFqwABUNWADwAD8VQDAAFRHAAAEwABOqmADwAD8VQFqwABUUGADwAD8VQDAAFRiAAAEwABOqGADwAD+GwFqwABUdmADwAD/JXnAAFSHAAAEwABOsF0DwAD+vwFgA743AWrAAFSpYAPAAP8leWADwABv4QE/CAgBwABv5IAAwDbbBAgBwABv5YEAwDbbHQgBwABv5oIAwDbbOwgBwABv54MAwDbbWQgBwABv6IQAwDbbdwgBwABv6YUAwDbblQgBwABv6oYAwDbbswkBwABTocAA/34AAAAABgbAAG/sgTnAAFS0wABUvMAAWA8EAcAATrUAAAABA8AAVNzAAFgPAAAAAQEBwABU6AAAAINKYAPAAF6lAABgA8AAb+EBPgo9HMAAVP2AwABU9sA23G6CmAEAAWrAAFUDYAPAAQACwAFF8wDAAF6nTsAAVRzAAFUpAACWkWADwABiOAEcwABVMoDAAFUrwDbcbsAARWgAAAAAwABe5k7AAFVRwABVagAAwABO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+isAwABqCD4BSsAARtQBasAARudgA4Fngy5JwABG/xzAAEcPgcAARwPANvvPgxwBAAFqwABHKWADwABwA8AA+qQAwABqCD4BSsAAR0UBasAAR1hgA4FngyNJwABHcBzAAEeAgcAAR3TANvvPgxwBAAFqwABHmmADwABwA8AA+ssAwABqCD4BSsAAR7YBasAAR8lgA4Fngy4/Pz9KwABH7gEWwABH9S7AAE7YwABv/8AAcD4GwABwVYE7wABIIcAASDnAAErmAADAAE7UAWrAAEgiYAPAAP9oAgAAAQPAAEhQwABK5gAAAAEBAcAASF4AAACCamADviUAAGADgWcBPgJJwABIbCEcwABId4DAAEhwwDb9e0gBAAErAMAA/3U+Ak7AAEiiwABIrgAAhGhdA8AAae8BYAPAAHADARzAAEjBFsAASLAuuSrAAHBBSwEAAYDAAEjCwDb9ewDAAP8FScAASNEhHMAASOGBwABI1cA2/bJIAQABKwDAAGoMPgFJwABI9BzAAEkEgcAASPjANv2ygxwBAAFqwABJHmADwABwA8AA+gQAwABqCD4BSsAASTcBasAASUpgA4FngyNJwABJYhzAAElygcAASWbANv2ygxwBAAFqwABJjGADwABwA8AA+isAwABqCD4BSsAASaUBasAASbhgA4Fngy5JwABJ0BzAAEnggcAASdTANv2ygxwBAAFqwABJ+mADwABwA8AA+qQAwABqCD4BSsAAShYBasAASilgA4FngyNJwABKQRzAAEpRgcAASkXANv2ygxwBAAFqwABKa2ADwABwA8AA+ssAwABqCD4BSsAASocBasAASppgA4Fngy4/Pz9KwABKvwEWwABKxi7AAE7ZwABv/8AAcD8GwABwVoE7wABK68AASwPAAEzOAAC0fAFqwABK7GADwAD/aAIAAAEDwABLHcAATM4AAAABAQHAAEsrAAAAgmpgA74lAABgA4FnAT4CScAASzkhHMAAS0SAwABLPcA2/1xIAQABKwDAAP91PgJOwABLb8AAS3sAAIRoXQPAAGnvAWADwABwAwEcwABLjhbAAEt9LrkqwABwQUsBAAGAwABLj8A2/1wAwAD/BUnAAEueIRzAAEuugcAAS6LANv+TSAEAASsAwABqDD4BScAAS8EcwABL0YHAAEvFwDb/k4McAQABasAAS+tgA8AAcAPA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EMA3IszAAE8DwABwegDAAP91AByjMRajKS68zMAAcHxIAQABFqM6gKM0wDcizLzMwABwfADAAP91AByjVxajTS7AAE8EwABwgkgBAAEWo2CAo1rANyLMwABPBMAAcIIAwAD/dQAco34Wo3UuwABOocAAcH9IAQABFqOHgKOBwDcizMAATqHAAHB/AMAA/3UAHKOxFqObLryTwABwiEgBAAEWo7qAo7TANyLMvJPAAHCIAMAA/3UAHKPyFqPbLryVwABwiUgBAAEWo/uAo/XANyLMvJXAAHCJAMAA/3UAHKQ1FqQdLryRwABwh0gBAAEWpD6ApDjANyLMvJHAAHCHAMAA/3UAHKR2FqRhLr0RwABwhkgBAAEWpH+ApHnANyLMvRHAAHCGAMAA/3UAHKSrFqSfLsAATvTAAHBhwABwaEgBAAEWpLSApK7ANyLMwABO9MAAcGHAAHBoAMAAagwAHKTXFqTLLsAATvbAAHBhwABwa0gBAAEWpOCApNrANyLMwABO9sAAcGHAAHBrAMAAagwAHKT9FqT3LrzQwABwfkgBAAEWpQaApQDANyLMvNDAAHB+AMAAagwAHKUeFqUXLrzTwABwgUgBAAEWpSeApSHANyLMvNPAAHCBAMAAagwAHKVBFqU5LrzXwABwhEgBAAEWpUqApUTANyLMvNfAAHCEAMAAagwAHKVsFqVdLsAATwDAAHB9SAEAARaldYClb8A3IszAAE8AwABwfQDAAGoMABylnxaljy7AAE8BwABwgEgBAAEWpaiApaLANyLMwABPAcAAcIAAwABqDAAcpdQWpcMuwABPAsAAcINIAQABFqXdgKXXwDcizMAATwLAAHCDAMAAagwAHKYLFqX5LsAATp3AAHCFSAEAARamFICmDsA3IszAAE6dwABwhQC+bQAANxUnADcbQAA3G28ANxulADcb5AA3HC0ANxx0ADcctQA3HP4ANx1FADcdhgA3Hc8ANx4WADceQwA3HpEANx7jADcfNQA3H4cANx/OADcgIwA3IIEANyDfADchSwA3IaIANyHrADcihAA3IqwANyXsAAAAGwLAAHCZgTymYKZmsx8DwABPBgAAAWABwABwcwAABgTAAHCbgTymrqa8CcAATwABaqaNYAPAAP9oAl0DwABp7wFgA8AAcSYABMAAcJyBPKbjpvIJwABPAQFqpsJgA8AA/2gCXQPAAGnvAWADwABxJgAEwABwnYE8pxmnKQnAAE8CAWqm+GADwAD/aAJdA8AAae8BYAPAAHEmAATAAHCegTynUKdVCbzQAWqnL2ADwAD/aAJdA8AAae8BYAPAAHEmAATAAHCfgTynfKeCCbzTAWqnW2ADwAD/aAJdA8AAae8BYAPAAHEmAATAAHCggTynqaewCbzXAWqniGADwAD/aAJdA8AAae8BYAPAAHEmAAIFwABwqIE8p7WntamQAKhQAAOnyamQAAAACAICp9cAAACCamADviUAp/IAAADAAE76XQPAAGnvAWADwABw2QAGqAoAAATAAE8AXQPAAGnvAWADwABxJgFqAGADwAD/JXmoJQAABMAATwFdA8AAae8BYAPAAHEmAWoAYAPAAP8leahBAAAEwABPAl0DwABp7wFgA8AAcSYBagBgA8AA/yV5qF4AAAS80F0DwABp7wFgA8AAcSYBagBgA8AA/yV5qHAAAAS8010DwABp7wFgA8AAcSYBagBgA8AA/yV5qIMAAAS8110DwABp7wFgA8AAcSYBagBgA8AA/yV5YAPAAHCZAT8NCAHAAHCbggDANyewCAHAAHCcgwDANyfQCAHAAHCdhADANyfwCAHAAHCehQDANygQCAHAAHCfhgDANyguCAHAAHCghwDANyhMDABAIRyoq4KonMA3J7BIAQABKwDAAGoMqJyosgAMAEAhHKjUg6jEwDcn0EgBAAErAMAAagyoxKjbAAwAQCEcqP6EqO3ANyfwSAEAASsAwABqDKjtqQUADABAIRypHYWpF8A3KBBIAQABKwDAAGoMqRepJAAMAEAhHKk9hqk2wDcoLkgBAAErAMAAagypNqlEAAwAQCEcqV6HqVbANyhMSAEAASsAwABqDKlWqWUACQCpdsAAcJgCAAKAqX3ANyeMgamFwDcnmAAFwABwqYE8qZWplar7AAAAA6miqvsAAAAEAQGpsAAAAIJqYAO+JQADqcQAAATAAE8AXQPAAGnvAWADwABxJgFqAGADwAD/JXmp2QAABMAATwFdA8AAae8BYAPAAHEmAWoAYAPAAP8leanvAAAEwABPAl0DwABp7wFgA8AAcSYBagBgA8AA/yV5YAPAAHCZAT8KCAHAAHCbgQDANymrCAHAAHCcggDANynLCAHAAHCdgwDANynrCADAAHCeH6oWwABq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HMAARP6FwABE7cA3QjBIAQABKwDAAGoMwABE7cAARQUADABAIRzAAEUdhMAARRfAN0IQSAEAASsAwABqDMAARRfAAEUkAAwAQCEcwABFPobAAEU2wDdCUkgBAAErAMAAagzAAEU2wABFRQAJAMAARVbAAHCYAgACgMAARV3AN0G0gsAARWfAN0HUAAXAAHDYgTzAAEV3wABFd8AARswAAAADwABFgsAARswAAAADAQHAAEWSAAAAgm5gA746AALAAEWoAAAEwABPAF0DwABp7wFgA8AAcSYBagBgA8AA/yV5wABFvQAABMAATwJdA8AAae8BYAPAAHEmAWoAYAPAAP8leWADwABwxAE/CAgBwABwxoEAwDdDnwgBwABwx4IAwDdDwQgAwABwyB/AAEXkwABqIAABYAPAAHEmAAAIAMAAcMkfwABGBcAAaiAAAWADwABxJgAACADAAHDKH8AARi3AAHEkAQABFsAARkWAwABGPMA3Q5C1ub49AAwAQCEcwABGeIHAAEZpwDdDn0gBAAErAMAAagzAAEZpwABGfwAMAEAhHMAARqKCwABGkcA3Q8FIAQABKwDAAGoMwABGkcAARqkACQDAAEa6wABwlwEAAYDAAEbDwDdDkAAIBsAAcMyBPMAARtHAAEbmwABHIQEAwABPBAFqwABG0mADwAD/aAIAAAEDwABG8MAARyEAAAAAAAAAYAPAAPxVAUrAAEbzASIWwABG+xbAAEbzLrzXwABwyYO3wABp+wAWwABHGBbAAEcJLsAATxfAAHDKwABPBMAAcSAGwABwzoE8wABHJsAAR0nAAEeoAQDAAE71wABwYQFqwABHJ2ADwAD/aAIAAAEDwABHVsAAR6gAAAAAAAAAXQPAAGnvAWADwABw2QFKwABHXwEjFsAAR2YWwABHXy6khsAAcHaFHL4qasAAR4RdA8AAae8BYAPAAHDZwAFKJWrAAEeeXQPAAGnvAWADwABw2cABSjcBXQPAAGnvAWADwABw2QbAAHDSgTzAAEetwABHzMAASsIAAJ7cAWrAAEeuYAPAAP9oAgAAAQPAAEfQwABKwgAAAAEBAcAAR+EAAADAAE8FXQPAAGnvAWADwABxJgAAXQPAAGnvAWADwABw2QE+Bk7AAEf2wABIBwAAwABPGGADwAD8VQEWwABICS7AAE8EwABwzE7AAEgdwABILAAAwABPB2ADwAD8VQEWwABILi68zMAAcHw9HMAASEEWwABIOy680MAAcMiApQEAARzAAEhXFsAASEguwABPAMAAcMaXUgEAAYDAAEhhwDdGDgDAAGoDAMAAagE9HMAASHkWwABIcS6818AAcMmApQEAARzAAEiRFsAASIAuwABPAsAAcMeXUgEAAWrAAEikXQPAAGnvAWADwABxJsAA/jsAwABqAwDAAGoBPRzAAEjIFsAASLkuwABPF8AAcMrAAE8ZAAAAAMAAcRxJwABI2IHAAEjcwDdGOT4CScAASPaCwABI+sA3Rl0+AUrAAEkUAWrAAEkmXQPAAGnvAWADwABw2cABSgE/SsAASToBHMAASU0WwABJQS7AAE70wABwYcAAcGiXUgEAASMWwABJXhbAAElXLqSGwABwdoUcvipqwABJhl0DwABp7wFgA8AAcNnAAUpKasAASbVdA8AAae8BYAPAAHDZwAFKXAFdA8AAae8BYAPAAHDZAMAAagNJwABJ2ILAAEncwDdGXT4BSsAASfQBHMAASgcWwABJ+y7AAE70wABwYcAAcGiXUgEAAWrAAEocXQPAAGnvAWADwABw2cABShMAwABqAz4BSsAASj0BHMAASlAWwABKRC7AAE70wABwYcAAcGiXUgEAASMWwABKYRbAAEpaLqSGwABwdoUcvipqwABKiV0DwABp7wFgA8AAcNnAAUolasAASq1dA8AAae8BYAPAAHDZwAFKNwFdA8AAae8BYAPAAHDZAMAAagMGwABw04E8wABKx8AASubAAExqAAC8jwFqwABKyGADwAD/aAIAAAEDwABK7MAATGoAAAACAgLAAEsEAAAAwABPBV0DwABp7wFgA8AAcSYAwABLHAAAALXHYAPAAGp7AABdA8AAae8BYAPAAHDZAT4ETsAASzbAAEtHAADAAE8YYAPAAPxVARbAAEtJLsAATwTAAHDMPRzAAEtnFsAAS1guwABPF8AAcMq8jwEAAYHAAEtuwDdI+ADAAHEbPRzAAEuKFsAAS4IuvNfAAHDJgKUBAAEcwABLohbAAEuRLsAATwLAAHDHl1IBAAGAwABLrMA3SN8AwABqAwDAAGoBScAAS7yCwABLwMA3SRo+AUrAAEvaAWrAAEvsXQPAAGnvAWADwABw2cABSgE+AUrAAEwFARzAAEwjFsAATAwuwABO9MAAcGHAAHBol1IBAAEjFsAATC0uvMzAAHB8asAATEJdA8AAae8BYAPAAHDZwAFKAWrAAExUXQPAAGnvAWADwABw2cABShMBXQPAAGnvAWADwABw2QDAAGoDBsAAcM+BPMAATG/AAEySwABMxwEAwABOnQFqwABMcGADwAD/aAIAAAEDwABMpMAATMcAAAAAAAAAYAO+YQFKwABMpwEWwABMthbAAEynLsAATxfAAHDKwABOncAAcSIGwABw0IE8wABMzMAATOHAAE2CAQC8kQFqwABMzWADwAD/aAIAAAEDwABM+cAATYIAAAAAAAAAYAPAAPxVAUrAAE0CASIcwABNExbAAE0CLsAATwLAAHDHgxwBAAFqwABNI2ADwABxJsABABcAwABqCAEiHMAATUQWwABNPC6818AAcMmDHAEAAWrAAE1UYAPAAHEmwAEAFwDAAGoIACEWwABNdhbAAE1nLsAATxfAAHDKwABPGsAAcSEGwABw1IE8wABNh8AATZ/AAE6wAACfHQFqwABNiGADwAD/aAIAAAEDwABNpMAATrAAAAAAAAAAYAPAAHBzAT4BSsAATa0BH8AATbjAAHDXBwADJsAATdQBFsAATdQupIbAAHB2YAO+OhzAAE3rFsAATdwuwABPF8AAcMqfHQAAAADAAHEdHMAATgAWwABN9C7AAE70wABwYcAAcGifHQAAAADAAGoLBLzQHMAATh4WwABOGC680MAAcMifHQAAAADAAGoLwABPABzAAE5OFsAATj8uwABPAMAAcMafHQAAAADAAGoLvNccwABOcBbAAE5oLrzXwABwyZ8dAAAAAMAAagvAAE8CHMAATqQWwABOky7AAE8CwABwx58dAAAAAMAAagsGwABw1YE8wABOtcAATsjAAFBAAAAjAWrAAE62YAPAAP9oAgAAAQPAAE7QwABQQAAAAAAAAABgA8ABAAIBSsAATtYBJAAVJ8AATxsWwABO5C6khsAAcHYngKcnwABPChzAAE8CFsAATvwuvNDAAHDIg9EBAAFqwABPEl0DwAD+vwFgA8AAcSbAAUntAMAAagkngKcnwABPDBzAAE82FsAATy4uvNfAAHDJg9EBAAFqwABPRl0DwAD+vwFgA8AAcSbAAUntAMAAagkngKcnwABPHBbAAE9pLsAATxfAAHDKJ4CnJ8AATw0cwABPohbA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wACwjhzAALB8FsAAsGkuuUfAAHKPwABPzQEAAYDAALCIwDgLjwDAAIOnwABPzsAAg70AwAByyMAAcpc9HMAAsKYuwABH5gEAARbAALC1gMAAsLDAOAuPgnCIFwDAAJEEPRzAALDELsAAR+YBAAEWwACw04DAALDOwDgLj4JtiBkAwACRBD0cwACw3i7AAE/WAwADgMAAsPPAOAuPgcAAsPnAOAuogsAAsQfAOAveAMAAcmo9F8AAsRoutyKDwACxJMA4DpTAAHKXBsAAcmyBP8AAsTfAALFIwACyOAAAhkABasAAsThgA8AA/2gCAAABA8AAsVjAALI4AAAAAQEBwACxaAAAAIPzYAOH/AAAYAPAAP8lAT4ETsAAsXzAALGHAADAAE/VYAPAAHLBARfAALGJLrciHMAAsaMWwACxmy63IsAAcpGEXgEAARbAALHPHMAAsb0WwACxqi65R8AAco/AAE/NAQABgMAAscnAOA/HAMAAg6fAAE/OwACDvQDAAHLIwABylz0cwACx5y7AAEfmAQABFsAAsfaAwACx8cA4D8eCbYf+AMAAkQQ9HMAAsgEuwABH5gEAARbAALIQgMAAsgvAOA/HhdKH/wDAAJEEPRfAALIgLrcigcAAsirAOA/gwABylwbAAHJtgT/AALI9wACyTsAAs2MAAIY+AWrAALI+YAPAAP9oAgAAAQPAALJhwACzYwAAAAEBAcAAsnQAAACD82ADh/EAAGADwAD/JQE+BU7AALKIwACykwAAwABP1WADwABywQEXwACylS63IhzAALKvFsAAsqcutyLAAHKRhF4BAAEWwACy2xzAALLJFsAAsrYuuUfAAHKPwABPzQEAAYDAALLVwDgQ5QDAAIOnwABPzsAAg70AwAByyMAAcpc9HMAAsvMuwABH5gEAARbAALMCgMAAsv3AOBDlhdKH8wDAAJEEPRfAALMSLrciFsAAsxwuwABPfMAAcpLAAHKXPRzAALMxLsAAR+YBAAEWwACzQIDAALM7wDgQ5YJth/QAwACRBD0XwACzSy63IoHAALNVwDgQ/sAAcpcGwAByboE/wACzaMAAs23AALOdAADAAE/aAAAAAQPAALOCwACznQAAAAEBAcAAs5YAAACD82ADiCIAAFwBPgAGwAByb4E/wACzosAAs7PAALXIAACGSwFqwACzo2ADwAD/aAIA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AWrAANCSYAPAAP9oAgAAAQPAANCtwADRmAAAAAEBAcAA0K4AAACD21sAAGADwAD8VQE+AknAANC7HsAA0L/AAPf8AgACLoDAANDPwDguiwBKwADQ1wEpP0rAANDoASIiIiXAAND1gMAA0O/AOC6LYAPAAHKiABzAANEbFsAA0Q4urSzAAHKkSAEAARbAANEkFMAA0R7AOC6LAAFgA8AAcqKtLMAAcqQAiQAAHsAA0TyB5QIBYAOI/AIWwADRRi7AAE/swABypRbAANFXFMAA0VHAOC6LAAFgA8AAcqLAAE/swABypQAAHsAA0W2B5QIBYAOI/AIWwADRdy7AAE/twAByphbAANGJFMAA0YPAOC6LAAFgA8AAcqLAAE/twABypgAGwAByrYE/wADRncAA0aLAANMtAADAAE/uwABx4QAAAAEDwADRqsAA0y0AAAACAgLAANG/AAAAg+lgA8ABAEwAwADR6gAAAMAAT+9hAwFdA8AA/n0BYAOI/GADwAEAAgAAXAE+BT0cwADSAIDAANH9wDgvvoKOAQABJ5oSAMABAGBOwADSF8AA0h0AAKMWYAPAAQACAScAScAA0ichHMAA0jUWwADSKy7AAE/swABypUgBAAErAMAA/3U+Az0cwADSSYDAANJGwDgvvoKOAQABJ8AAT/AAwAEAYD0cwADSYoDAANJfwDgvvoKOAQABHMAA0nOBwADSaMA4L84gAQABFsAA0nQuwABP7MAAcqUAAADAAQBgPYrAANKHwDgwECeApz9JwADSniEcwADSrRbAANKiLsAAT+3AAHKmSAEAASsAwAD/dT4DPRzAANLBgMAA0r7AOC++go4BAAGCwADSx8A4MBAAwAEAYD0cwADS2IDAANLVwDgvvoKOAQABJ8AAT/EAwAEAYD0cwADS8oDAANLvwDgvvoKOAQABHMAA0wOBwADS+MA4L84gAQABFsAA0wQuwABP7cAAcqYAAADAAQBgPz0cwADTH4DAANMcwDgvvoKOAQABJ4biAMABAGAGwAByroE/wADTMsAA00XAANSBAAAjAWrAANMzYAPAAP9oAgAAAQPAANNNwADUgQAAAAAAAABgA8ABAAIBPgdOwADTY8AA02YAAIPpYAPAAQBMAR/AANNswAEAawAAAAA9HMAA04OAwADTgMA4Ma6CjgEAASfAAE/yAMABAGA9HMAA06CAwADTncA4Ma6CjgEAASTAANO+AifAAE/zFsAA07EurSzAAHKkAMABAGBJwADTxSEcwADT0xbAANPJLsAAT+zAAHKlSAEAASsAwAD/dT4BPRzAANPngMAA0+TAODGugo4BAAEkwADT/wInvg8WwADT9S7AAE/swABypQDAAQBgP0nAANQMIRzAANQbFsAA1BAuwABP7cAAcqZIAQABKwDAAP91PgE9HMAA1C+AwADULMA4Ma6CjgEAASTAANRJAie+EBbAANQ+LsAAT+3AAHKmAMABAGA/PRzAANRZgMAA1FbAODGugo4BAAEngyYAwAEAYErAANRpARzAANRzgMAA1HDAODGuIwAAAADAAQBlAAA4K2sAOC13ADguVgA4L44AODFuADgzAQAAAAUCwABys4E/wADVjMAA1ZLAAPRxA8AAT/QAAAFgAcAA/2gAAAMEwABytYE/wADV4sAA1e4JrSwAYAOI/AAEwABytoE/wADWQ8AA1k4JwABP9QBdA8AA/n0BYAPAAHKiAATAAHK3gT/AANapwADWuAnAAE/2AF0DwAD+fQFgA4j8AAEFwABywIE/wADWvcAA1r3AANcCAAAAA8AA1sfAANcCAAAAAwMDwADWzQAABK0sYAOI/ADAANbgAAAEwABP9V0DwAD+fQFgA8AAcqIAwADW8gAABMAAT/ZdA8AA/n0BYAOI/AAAYAPAAHKzAT8ECAHAAHK1gADAODPECAHAAHK2gQDAODPSCAHAAHK3ggDAODPrCQHAANa9wAD/fgAAAAAFBsAAcrmBP8AA2B/AANgqwADfEQAAwABPpQAAAAEDwADYMcAA3xEAAAACAQHAANg+AAAAgpRgA4j8AAHAANhKAAAAu2pgA8AA/FUBagBgA8AA/yV5YAPAAHKzAT4HTsAA2GnAANh4AADAAE/3XQPAAP+zAWADwAByogEewADYfsAAwyEAAWADwAByogAAT8AA2JbAANibAAABwABP+GEDAWADwAByomADwAD8VQADwADYqMAA3LsAAAABAQHAANi0AAAAwABP+WADwAByogAAYAPAAPxVAT4HTsAA2M3AANjVAACvkWADwAD8VQEqT8AA2OXAANj2AAABwABP+mEDAl0DwAD/swFgA4j8YAOI/F0DwAD/swFgA4j8AAPAANj/wADaWgAAAAICAsAA2REAAACXeV0D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A4W2AABgA8AAansABsAAc9CBQ4ixiLqI2QACwABQkAAAAAEDiMWI2QAAAAEBAYjUAAAAg/NgA4TsAABgA8AATLgABsAAc9GBQ4kjiTCJSQACnGgAAAABA4k5iUkAAAABAQGJRAAAAIPzYAODkAAAYAO+JQAGwABz0oFDiZiJp4nDAALAAFCRAAAAAQOJsInDAAAAAQEBib4AAACD82ADhCUAAGADvjoABsAAc9OBQ4ozikWKYwACqHQAAAABA4pTimMAAAABAQGKXgAAAIPzYAODkAAAYAO+UgAGwABz1IFDiquKt4rOAALAAE56AAAAAQOKv4rOAAAAAQEBiskAAACD82ADg68AAGADvjcABsAAc9WBQ4sWiyKLOQACnG8AAAABA4sqizkAAAABAQGLNAAAAIPzYAODHAAAYAO+EwAGwABz1oFDi4+Lm4u6AALAAFCSAAAAAQOLqYu6AAAAAQEBi7UAAACD82ADgvcAAGADwABkBgAGwABz14FDjDSMQYyPAALAAFCTAAAAAQOMT4yPAAAAAwICjF0AAACCV2ADviUAjG4AAACAvWADiMcAAYyAAAAAm2RgA8AA/FUBaoyIYAPAAPxVAGADviUABsAAc9iBQ40GjRWNOgACwABPYwAAAAEDjSmNOgAAAAEBAY02AAAAmiZgA74TAABgA746AAbAAHPZgUONcY12jYsAApl1AAAAAQONfY2LAAAAAQEBjYYAAACAvWADiMcAAGADwABqSgAGwABz2oFDjdyN644fAALAAFCUAAAAAQOOBY4fAAAAAQEBjhoAAACD82ADhfsAAGADwABolgAGwABz24FDjn6OjY7IAALAAFCVAAAAAQOOro7IAAAAAQEBjsMAAACD82ADhfsAAGADwABolgAGwABz3IFDjy+PPo+HAALAAFCWAAAAAQOPZo+HAAAAAQEBj4IAAACD82ADhfsAAGADwABolgAGwABz3YFDkFCQXpDGAALAAE57AAAAAQOQbpDGAAAAAwEBkH0AAACCb2ADhOwAApCVAAAAwABOfGADwAD8VQFqkKZgA8AA/FV3kLEAAADAAE59YAPAAPxVAWqQv2ADwAD8VQBgA8AAYjgABsAAc96BQ5EEkRGRNQACwABQlwAAAAEDkRqRNQAAAAEBAZEwAAAAg/NgA4LDAABgA74JAAbAAHPfgUORbpF+kasA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ccA48L0ASsAAUYsAP0LAAFGhAAHAAFG8asAAUbxgA8AAdBXAAUzdAD4DTsAAUeDAAFHlAACD82ADh1gBJsAAUeABFsAAUfKFwABR58A48WyD88AAdClgA4dYPR7AAFH+wABzwgMAAxbAAFI0hsAAUi/AOPN3gm6HWoPAAFI+wDjwlYTAAFJSwDjwvQBKwABSagAAAT4APR7AAFKFtv0CAAKBwABSjsA48F8kwABSxQMnwABQxYXAAFK5wDjxbCeBagABgUMAOPQOADjHPgA40A4AONPbADjXzwA42eIAONwpADjdrgA44OwAOOQvADjmjgA46mkAAAAKADjqbAA46+wAOO0QADjwIwA49A4AAAAEAAIGwAB0bwCBRAAAJIDaAACCLoIIAIEDAABaAACBJQAAwACG9AAAgT8AAKSxAACBWAAAuSYAAIF3AACktAAAgZIAALmGAACBtAAAwABiBQAAgdcAAL3+AACB+wAAwABqSQAAghwAAMAAY8cAAII9AADAAEQQAACCaAAAwABxjgAAgp0AAMAAc74AAILEAADAAIDtAACC6AAAwABs1AAAgwoAAMAAaGoAAIMsAACA+wAAg0YAAMAAXlAAAIN0AADAAGp6AACDngAAwABMpgAAg8IAAMAAedQAAIPqAADAAE6BAACEAgAAvx8AAIQnAADAAKD0AACERQAAwACh0gAAhGMAAMAAoeyCigCEgQAAwACh8wAAhJ8AAMAAolQAAIS6AADAAKJjAACE1AAAwACicgAAhO4AAMAAon8AAIUNAADAAHOHAACFMAAAwACeZAAAhVAAAMAAosgAAIVrAADAAEJ7AAAAAAAEAsAAdHOBRIYthjyl0gfAAFDGAAABYAHAAP9oAAABBMAAdHWBRIbHiPsJt+EAXQPAAP+zAWADwABMuAEehu3AAMMjAQFgA8AATLgBMYcKYAPAAEy4CB6HFMAATOIBAAFqhypgA8AAalrAAU3eAB6HSMAATOIBAAFqh15gA8AAalrAAU31AB6He8AATOIBAAFqh5FgA8AAalrAAU4MAB6HsMAATOgCAAJqh8RgA8AAalrAAU4jaoftYAPAAGp7wADyxQAeh//AAEzoAgACaogTYAPAAGpawAFOOmqIOmADwABqe8AA8sUAHohMwABM5gAAAAAeiGbAAEzoAgACaoh6YAPAAGpawAFOUWqI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OReDwABRAwIAAhbAAEZvLrHGwAB0eibAAEaEAYPAAEaEwDkZrmADwACgNADAAKBAAMAAc409HMAARpuAwABGlsA5F4PAAFEEAAAAAMAAoEE9HMAARrsWwABGsS673cAAdKpWAQABFsAARsSAwABGv8A5F4OF5MAAoDcAwABzjD0cwABG3BbAAEbSLrvdwAB0qlYBAAEWwABG5YDAAEbgwDkXg4XlwACgOADAAHOMPRzAAEb/FsAARvUuu93AAHSqgKUBAAEWwABHFxbAAEcLgMAARwbAOReDwABRBcAAoDYpwAD/FADAAHONPRzAAEcuFsAARyQuu93AAHSqVgEAAYDAAEcywDkXgwDAAHOMBsAAdMyBRMAAR0DAAEdRwABkKQAAwABQewFqwABHQWADwAD/aAIAAAEDwABHY8AAZCkAAAAAAAAAXAE+Ez0cwABHbC7AAFEGAAAAAMAAdM1OwABHlMAAR5kAALSyYAPAAKKAASMawABHqcAAofEfwABHu8AAoo4CAAIWwABHyS65YcAAdG/AAHS0LgArAWADwACigD01AAAAAQBgA8AAooABgMAAR+3AORtXIxzAAEfzgQDAORucSAEAASsAACscwABH84EAwDkbnMAAUQcAAAAAwACiiQFcPRzAAEgJLsAAUQgAAAAAwAB01z0cwABIHy7AAFEJAAAAAMAAdNY9HMAASJsWwABIlBbAAEiFFsAASH8uhYXAAHS4t+bAAKLfKcAA/xSD/QEAATTAAEijA8AASKPAAEjkAAAAAQEBwABItAAAAIFUYAPAAJ5pAABgA8AA/yUBPgE9HMAASMIuwABQyAEAASbAAEjYAYHAAEjYwDkcRGADwACf7QDAAHTJAMAA/o09HMAASVcWwABJUBbAAElCFsAASTwuhYXAAHS4wABRCsAAouApwAD/FIP9AQABNMAASV8DwABJX8AASZ8AAAABAQHAAElwAAAAgVRgA8AAnmkAAGADwAD/JQE+AT0cwABJfi7AAFDJAQABJsAASZMBgcAASZPAORzNYAPAAKASAMAAdMoAwAD+jT0cwABKKhbAAEojFsAAShUWwABKDy6FhcAAdLjAAFELwACi4SnAAP8Ug/0BAAE0wABKMgPAAEoywABKcgAAAAEBAcAASkMAAACBVGADwACeaQAAYAPAAP8lAT4BPRzAAEpRLsAAUMoB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UwAAAK1qYAO/OgDAAKJvAAAAhZpgA8AAnmkAwACikAAAALsIYAO+JQDAAKKtAAAAW2ADwACiHgDAAKLRAAAAuKdgA8AAehIAAsAAovEAAADAAFDZYAPAAPxVAWoAYAPAAP8lecAAowQAAADAAFDdYAPAAPxVAWoAYAPAAP8leWADwACeaQE+B0nAAKMaFsAAoyeCwACjHsA5XLG37cAATMs+AUrAAKM+ARzAAKNFLsAAUNgIAAeBwACjW8A5XKOCwACjYcA5XLGDwACja8A5XMGEwACjccA5XM+FwACjf8A5XN+GwACjkcA5XO2HwACjnMA5XPwBwABQ2RTAAKPCwDldDQgAwAB05j9JwACj1hzAAKPmFsAAo9oupUDAAHS2t14CAAKCwACj+sA5XLGDwACkBMA5XMEAwACBHz4BPRzAAKQmh8AApBPAOVz8wABQ7wAAAADAAHoePz0cwACkhBzAAKRmFsAApFoupUDAAHS2tX0CAAKCwACkdMA5XLGDwACkfsA5XMEAwACBIYP9AQABNMAApIwDwACkjMAApNsAAAABAQHAAKSNAAAAwABQ22ADviUAAGADwAD/JQE+AT0cwACknS7AAFDuAwADh8AApK/AOVz8gsAApMPAOVyxFMAApM3AOV5qCgAAwAB0wgDAAP6NTsAApPvAAKUAAACBVGADwACfYwEfwAClBsAAn50LAWADgkwLFsAApS4uscbAAHR6FsAApVEWwAClSy6FhcAAdLirOsAAowOAwAClaMA5XJOBwAClesA5XKOFwACliMA5XN+CwAClmMA5XLGDwAClqsA5XMGEwACluMA5XM+GwAClzsA5XO0UwACl4cA5XQ0IABTAAKXxwDldKAkAAD0cwACmCxTAAKYGwDleugoAwABRQgEAAS4AwACfbj0cwACmNhbAAKYnFsAApiEuhYXAAHS4wABRN8AAouRWAQABFMAApjrAOV66CgAAwAD+0ErAAKZFARTAAKZMwDleugoABsAAdOSBRMAAplnAAKZ1wACneQAAwABQ1gFqwACmWmADwAD/aAIAAAEDwACmgsAAp3kAAAACAgLAAKaLAAAAg/NgA4JMAMAApqEAAAAfYAPAAJ5pAABgA8AAnmkBPgROwACmxsAApssAAIFUYAPAAKCMAR/AAKbRwACglwMAAxbAAKbvLrHGwAB0ehbAAKcK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ANVsLsAAUVfAAHRvwAB1CUgBAAErAMAA/3UXwADVbC7AAFFXwAB0bzLAANWeYAOIFGADvzoAwAB1CSsBXQPAAP7xAmADiBRgA786PRzAANWxFsAA1aYuwABRV8AAdG/AAHUJgL8CAAKAwADVssA5hsqBwADVusA5htgAwAD/BgbAAHUSgUTAANXHwADVzMAA1moAAMAAUPcAAAABA8AA1d/AANZqAAAAAgICwADV8gAAAIPzYAOIFADAANYGAAAArWpgA786AABcAT4CPSMcwADWHxbAANYSLsAAUVjAAHRvwAB1CkgBAAErAMAA/3UXwADWEi7AAFFYwAB0bzLAANZFYAOIFGADvzoAwAB1CisBXQPAAP7xAmADiBRgA786PRzAANZZFsAA1k0uwABRWMAAdG/AAHUKgL8CAAKAwADWWsA5h5+BwADWYsA5h60AwAD/BgbAAHUTgUTAANZvwADWdMAA1xIAAMAAUPUAAAABA8AA1ofAANcSAAAAAgICwADWmgAAAIPzYAOIFADAANauAAAArWpgA786AABcAT4CPSMcwADWxxbAANa6LsAAUVbAAHRvwAB1CEgBAAErAMAA/3UXwADWui7AAFFWwAB0bzLAANbtYAOIFGADvzoAwAB1CCsBXQPAAP7xAmADiBRgA786PRzAANcBFsAA1vUuwABRVsAAdG/AAHUIgL8CAAKAwADXAsA5iHSBwADXCsA5iIIAwAD/BgbAAHUUgUTAANcXwADXMcAA17UAALfIAWrAANcYYAPAAP9oAgAAAQPAANdGwADXtQAAAAEBAcAA12MAAAiD82ADiBQAAGADvzoBPgJJwADXbxzAANd/FsAA13MuwABRV8AAdG/AAHUJSAEAASsAwAD/dUrAANeIASs/SsAA15kBHMAA16sWwADXoC7AAFFXwAB0b8AAdQlLAQABgMAA16zAOYlTAMAA/wUGwAB1FYFEwADXusAA19TAANhbAAC3xwFqwADXu2ADwAD/aAIAAAEDwADX6sAA2FsAAAABAQHAANgHAAAIg/NgA4gUAABgA786AT4CScAA2BMcwADYJBbAANgXLsAAUVjAAHRvwAB1CkgBAAErAMAA/3VKwADYLQErP0rAANg+ARzAANhRFsAA2EUuwABRWMAAdG/AAHUKSwEAAYDAANhSwDmJ/ADAAP8FBsAAdRaBRMAA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o74WwACjt4bAAKOxwDr7amHAAP7vSAEAARbAAKPHhcAAo8HAOvs7YcAA/u8AwAD/P8AAo7HAAKPNAEXAAKPWAcAAo9/AAKPlAAAnYAPAAP4bAZMBHMAAo/CHwACj6sA6+9xjAQABFsAAo/iGwACj8sA6+2phwAD+7wDAAP9JAY/AAKQAwDr73BzAAKQFh8AApADAOvvcZAEAAZQAwAD/QT4CTsAApCTAAKQpAACAvWADwACXEAEcwACkLmrAAKQrYAPAAJl+wAEjIYPxAQABHMAApDqFwACkNcA6+ztLAQABh8AApDvAOvvcAMAA/s4AwACZjz0cwACkaITAAKRMwDr7FFYBAAEfwACkcMAAmNECAAIUwACkf8A6/D8IABzAAKSFLprxAgACHMAApJCGwACki8A6+2pLAQABh8AApJHAOvvcAMAA/s6BwACkmcA69r0AwAB4rgAAwAD+0D0cwACkvoPAAKSzwDr3AyACAAIWwACkyBbAAKS/LsAAUvXAAHfywAB4osAASjHAAHiZH8AApPbAAJjEAQABhMAApQ7AOvsUAAAAP0nAAKVPFsAApWYWwAClWIDAAKVTwDr2raLNwABkYIO3wAD+oj4BPTUAAAABAF0DwAD+vwFgA8AAZCgBFsAApXouwABFpcAAeKcXwAClkITAAKWQwDr9bGEcwACllxbAAKWQhMAApZDAOv1sYcAA/u+BjQEAARbAAKWtFsAApZ+AwAClmsA69q2izcAAZGBhwAD+7wDAAP9CwAD+7T9KwAClwAEfwACly8AAmMQBAAGCwACl48A69tgABsAAeLeBSsAApffAAKYUwACmaAAAho4BasAApfhgA8AA/2gCAAABA8AApiHAAKZoAAAAAgICwACmKwAACIKUYAPAAGQ6AMAApkAAACCwb2ADwABeMwAAYAPAAJcQAT4BSsAApk8BHMAAplYuwABS+wAAAADAAHisBsAAeLiBSsAApm3AAKaKwACvNQAAhqQBasAApm5gA8AA/2gCAAABA8AApprAAK81AAAAAgICwACmpwAACIKUYAPAAGQGAMAAprwAACCwb2ADwABeMwAAYAPAAJcQAT4GTsAAptDAAKbdAADAAFMGYAPAAPxVARzAAKbfLsAAUs0BAAGAwACm88A6/qsAwAB4pU7AAKcHwACnFQAAwABTB2ADwABjywEWwACnHIDAAKcXwDr+q7UgwABkCk7AAKcwwACnPAAAwABTCF0DwAD+8QJgA8AAZBlgA8AAlxABFsAApz4uwABS9sAAeKZJwACnUxzAAKdnFsAAp1cuwABS9sAAeKZIAQABKwDAAP91PgI9F8AAq3EuwABS9jLAAKunYAPAAGQZYAPAAJcQAMAAeKY9HMAAq7aAwACrscA6/qvAAEdTAQABNMAAq8oDwACrysAArCkAAAABAQHAAKvcAAAAgnBgA8AAZBkAAGADwAD/JQE+AT0cwACr/xbAAKvwLsAAUvbAAHimgL8CAAKFwACsAMA6/9AcwACsDC7AAFLMAQABhcAArBfAOv/QAMAAeKQAwAD/BgDAAGQRP0/AAKw3wACsSAAAAYc6YQMBYAPAAJcQYAPAAJcQAAPAAKxOwACsqAAAAAEBAcAArGAAAACBdmADwACXEAAAYAPAAJcQAT4CPRfAAKxwLsAAUvaEwACsgsA6/zHAAHimSsAArJUBhsAArJzAOwBfScAArK+CwACss8A6/tY+Bk7AAKzhwACs7QAAhSFgA8AAmLYBJsAArOEBHMAArO8umvECAAKDwACs9cA6/weBwACtBMA6/rsAwAB4rmADwACYtk7AAK1SwACtVwAAgL1gA8AAlxABHMAArVkuwABS+QIAAhbAAK11gMAArXDAOv6rlnvAAGQIgcAArX7AOv67AMAAeKpOwACtn8AAra4AAMAAUwlgA8AAlxABIxbAAK21gMAArbDAOv6rs4PAAGQOh8AArczAOwDzHMAArd0uh08DAAIWwACt7IDAAK3nwDr+q4U4wABkCYHAAK37wDr+uwGD74fAAK4KwDsA88AAeLUBYAPAAJcQTsAArlnAAK5dAACD7GADwACYegEcwACuYmrAAK5fYAPAAJl+wAEjIYPxAQABFsAArnIWwACuaS7AAFL1wAB38sAAeKLAAEojwAB4kwDAAJmPPRzAAK6cFsAArpGGwACuhcA7ALGfgcAAmLhWAQABH8AArqTAAJjRAgACFMAArrPAOwGpCQAUwACuuMA7ATYIAAAAwAD+0ErAAK7QARzAAK7dhcAArtfAOwA3IAEAAYbAAK7ewDsAsQAAPgFKwACu/wEcwACvDIXAAK8GwDsANyABAAEcwACvDS6a8QIAAoPAAK8TwDr/B4HAAK8iwDr+uwDAAHiuAAAGwAB4uYFKwACvOsAAr1fAALHqAAC1HgFqwACvO2ADwAD/aAIAAAEDwACvaMAAseoAAAACAgLAAK99AAAIgpRgA8AAZG8AwACvkgAAILBvYAPAAF4zAABgA8AAlxABPgVOwACvtsAAr8EAAJ+BXQPAAP6/AWADwACYxQExwACv02ADwACYxQBPwACv3MAAr+EAAAHAAFMFYQMCYAPAAQACYAPAAJcQXAADwACv7MAAsFoAAAACAgLAAK/0AAAAgL1gA8ABAAIAwACwCwAAAICWYAPAAJcQAABcAT4BPRzAALAlgsAAsBrAOwMBVgEAAR/AALAtwACY0QIAAhzAALA/asAAsDxgA8AAmX7AASMhg/EBAAGEwACwRsA7A1cAwACZj4XAALBNwDsDZwAAwAD+0D0cwACxCoPAALD/wDsDLCACAAIWwACxFBbAALELLsAAUvXAAHfywAB4osAASjPAAHibHMAAsSRqwACxIWADwACZfsABIyHAAFL/AQABlADAAJmUAABJwACxNCEWwACxSxbAALE+gMAAsTnAOwLWhdvAAGRxwABHT8AAY88+AT0cwACxboPAALFjwDsDLCACAAIWwACxeBbAALFvLsAAUvXAAHfywAB4osAASjXAAHicHMAAsYkumvECAAIWwACxlIDAALGPwDsC1oXbwABkcYHAALGiwDsC5gDAAHiuAAA/SsAAsbgBH8AAscPAAJjEAQABgsAAsdvAOwMBAAAAOug5ADrqGwA66pgAOuryADrrTgA666oAOuw8ADrtTQA67nAAOu7oADrvXgA68MoAOvKMADr0QgA69MsAOvVUADr1tQA69hYAOvZ3ADr9/QA6/nUAOwKgADsEzQAAABYCwAB4woFKwACx78AAsfXAALTCA8AAUwoAAAFgAcAA/2gAAWABwAB5NgEEwAB4xIFKwACyRMAAsm0JgKsAXQPAAP7xAmADvhNgA8AAeSgBHsAAsk7AAP74AAJgA74TYAPAAHkoAAABBcAAeMwAAAAABAAAAwAAAAAAAAAAAGADwAB4wgE/AQkBAMAA/34AAAAABAbAAHjGgUrAALJywACyk8AAsxYDAEsBasAAsnNgA8AA/2gCAAABA8AAspXAALMWAAAAAQEBwACyogAAAJZ7YAO+EwAAYAPAAHkoAT4CTsAAsr3AALLEAACBdmADwAB5KAEcwACyyRbA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Axya4i7AAFQKwAB6qgEAASfAAFQLAMAAe2AcmzMuwABUCMAAeqoBAAEnwABUDADAAHthFpuBLrI3wAB7TsAAetiAAMA71SEBYAPAAHq3BsAAex6BUJvrm/2cfAEAwABUDQAAAAEDnAqcfAAAAAAAAABgA8AAercBPgFKnBABNQAAAAEAYAPAAHq3ARacFy7AAFPOwAB6qsAAetkjHJwlgADAO9YTSAEAASsAwAD/dRecFy7AAFPOwAB6qh+cNcAAesgBAAABvF8xnFhgA74TARacaRacWS61HcAAeqrAAHrMsle52MAAetmAAMA71hMBYAPAAHq3BsAAex+BUJyenLCd6AEAwABUDgAAAAEDnLqd6AAAAAAAAABgA8AAercBPgFKnMABNQAAAAEAYAPAAHq3ARacxy7AAFPPwAB6qsAAetojHJzSgADAO9a7SAEAASsAwAD/dRecxy7AAFPPwAB6qh+c2sAAesgBAAABvF8xnP1gA74TBhadFRadBS61HcAAeqrAAHrMslq52xadNxadJy61HcAAeqrAAHrMsmi56RadYRadUS61HcAAeqrAAHrMsmm56hadhhaddi61HcAAeqrAAHrMsmq56xadqxadmy61HcAAeqrAAHrMslm52had0BadwC61HcAAeqrAAHrMslu53MAAetqAAMA71rsBYAPAAHq3BsAAeyCBUJ3tnf+eFQEAwABUDwAAAAEDngmeFQAAAAAAAABgA8AAercBSp4MARaeDC7AAFQOwAB7HwbAAHshgVCeGp4snkUBAMAAVBAAAAABA545nkUAAAAAAAAAYAPAAHq3AUqePAEWnjwuwABUDsAAex8GwAB7IoFQnmieep7zAQDAAFQRAAAAAQOehZ7zAAAAAAAAAGADwAB6twE+AUqeiwE1AAAAAQBgA8AAercBFp6SLsAAU9DAAHqqwAB62yMcnp6AAMA72EBIAQABKwDAAP91F56SLsAAU9DAAHqqH56uwAB6yAEAAAG8XzGe0WADvhMBFp7iFp7SLrUdwAB6qsAAesyyXbnewAB624AAwDvYQAFgA8AAercGwAB7I4FQnxWfJ5+eAQCt5QAAAAEDnzGfngAAAAAAAABgA8AAercBPgFKnzcBNQAAAAEAYAPAAHq3ARafPi7AAFPRwAB6qsAAetwjHJ9JgADAO9jmSAEAASsAwAD/dRef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ATUAAAABAGADwAB6twEWwABHxi6cPsAAeqrAAHr9IxzAAEfVgADAO/U6SAEAASsAwAD/dRfAAEfGLpw+wAB6qh/AAEflwAB6yAEAAAHAAFO6McAASAJgA74TARbAAEgTFsAASAMutR3AAHqqwAB6zLJvue7AAHr9gADAO/U6AWADwAB6twbAAHtKgVDAAEhGwABIWMAASWUBAJs+AAAAAQPAAEhhwABJZQAAAAAAAABgA8AAercBPgFKwABIZwE1AAAAAQBgA8AAercBFsAASG4unDnAAHqqwAB6/iMcwABIeIAAwDv1+EgBAAErAMAA/3UXwABIbi6cOcAAeqofwABIgMAAesgBAAABwABTujHAAEkGYAO+EwIWwABJIhbAAEkSLrUdwAB6qsAAesybPLmVFsAASUcWwABJNy61HcAAeqrAAHrMsje5ucAAev6AAMA79fgBYAPAAHq3BsAAe0uBUMAASYbAAEmYwABKiQEAmz0AAAABA8AASaHAAEqJAAAAAAAAAGADwAB6twFKwABJpAE1AAAAAQBgA8AAercBFsAASaQunDjAAHqqwAB6/yMcwABJroAAwDv2zUgBAAErAMAA/3UXwABJpC6cOMAAeqofwABJtsAAesgBAAABwABTujHAAEnTYAO+EwIWwABKTRbAAEo9LrUdwAB6qsAAesybPLmVFsAASnAWwABKYC61HcAAeqrAAHrMsjy5vsAAev+AAMA79s0BYAPAAHq3BsAAe0yBUMAASrPAAErFwABLTAEAsnAAAAABA8AAStfAAEtMAAAAAAAAAGADwAB6twE+AUrAAErdATUAAAABAGADwAB6twEWwABK5C6zQ8AAeqrAAHsAIxzAAEr3gADAO/ekSAEAASsAwAD/dRfAAErkLrNDwAB6qh/AAEsHwAB6yAEAAAHAAFO6McAASyRgA74TARbAAEs1FsAASyUutR3AAHqqwAB6zLJwue/AAHsAgADAO/ekAWADwAB6twbAAHtNgVDAAEt5wABLi8AATPcBAMAAVDUAAAABA8AAS6DAAEz3AAAAAAAAAGADwAB6twE+AUrAAEumATUAAAABAGADwAB6twEWwABLrS7AAFPywAB6qsAAewEjHMAAS8OAAMA7+GRIAQABKwDAAP91F8AAS60uwABT8sAAeqofwABLy8AAesgCAAACwABTuTHAAEvl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ZFYutR3AAHqqwAB6zLLOukoWwABkkBbAAGSALrUdwAB6qsAAesyyz7pLFsAAZMIWwABksi61HcAAeqrAAHrMstC6TBbAAGT3FsAAZOcutR3AAHqqwAB6zLLRuk0WwABlIRbAAGURLrUdwAB6qsAAesyy0rpOFsAAZVMWwABlQy61HcAAeqrAAHrMstO6TxbAAGWIFsAAZXgutR3AAHqqwAB6zLLUulAWwABltRbAAGWlLrUdwAB6qsAAesyy1bpRFsAAZeoWwABl2i61HcAAeqrAAHrMsta6UsAAU7oxwABmImADvhMBFsAAZjwWwABmLC61HcAAeqrAAHrMsm+57sAAU7kxwABmhGADvjoABsAAe1yBUMAAZrXAAGbHwABneQEAwABUPgAAAAEDwABm08AAZ3kAAAAAAAAAYAPAAHq3AUrAAGbWATUAAAABAGADwAB6twEWwABm1i7AAFP/wAB6qsAAexEjHMAAZuOAAMA8C5lIAQABKwDAAP91F8AAZtYuwABT/8AAeqofwABm58AAesgCAAACwABTuTHAAGcIYAO+OgEWwABnGRbAAGcJLrUdwAB6qsAAesyyxbpBwABTuzHAAGdBYAPAAHq3ARzAAGdCLsAAVAjAAHqqAQABJ8AAVD8AwAB7YcAAexGAAMA8C5kBYAPAAHq3AAA7y+4AO8zXADvN2AA7zpUAO8+kADvQdgA70YcAO9K8ADvTiwA71DEAO9TyADvV4gA71ooAO9ebADvX1QA72A8AO9i3ADvZXQA72lsAO9sbADvb2wA73PEAO93YADvemAA730AAO+AHADvgVQA74KMAO+DxADvhmQA74lYAO+L+ADvj3gA75HUAO+StADvk5wA75SEAO+VbADvllQA75nEAO+csADvn1AA76P8AO+nGADvqbgA7630AO+weADvtFAA77bcAO+5fADvu8gA775oAO/BKADvxCgA78mkAO/NeADv0IgA79P8AO/W9ADv2lAA792kAO/gnADv5XQA7+mYAO/ttADv8KwA7/SEAO/3lADv+pwA7/2kAPACVADwBgAA8AnIAPANNADwEEQA8BNMAPAXTADwIRwA8C14APAxLAAAATwAAAAGBUAA8DZMAO7sdADu8ggA7wwcAPA2QAAAAAwA8DZMAAAAAAAIGwAB7ZsAAVECBUQAAEIEIAADAAL/WAACBIwAA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FsABD9MupUDAAHzEsADAAE6XtQgBAAGBwAEQBMA9SWIAvUlOwAEQIMABEDEAAMAAVYpgA8AAYjgBH8ABEEHAAGO6AgACgcABEF3APUlig8ABEGTAPUohAD0cwAEQgBbAARB3Lrj4wAB8xbBbAQABH8ABEJjAAGntAQABJsABEK0BhMABEK3APUpgYAPAAGOqAAC3nz0cwAEQzRbAARDHLqE7wAB8vlYBAAEcwAEQ1xbAARDRLqSAwAB8orn4AwADJsABEPYBhMABEPbAPUpgYAPAAGOqgsABEQjAPUmgFsABERsupUDAAHzEAMAARf8AwAD+0D4BPRzAARFDFsABET0uoTvAAHy+VgEAARzAARFNFsABEUcupIDAAHyiqxcDAAKBwAERWcA9SWIWwAERYC6lQMAAfMQBpcKCwAERisA9SaDAAEX+AMAA/tAGwAB9cYFXwAERrMABEb3AARc3AACGVgFqwAERrWADwAD/aAIAAAEDwAER0cABFzcAAAABAQHAARHlAAAAg/NgA4hRAABcAT4GTsABEgPAARIVAAClwmADwABDNAEcwAESORbAARIfLsAAVOjAAHyTwAB807gaAQABgMABEkXAPUu+AMAAQ1xOwAESXQAAAICWYAPAAEbQAEnAARJoHMABEnwWwAEScYDAARJswD1LvoJviFNIAQABKwDAAP91PgE9isABEo3APUwQHMABEpsWwAESlS6kgMAAfKK5/wEAARbAARKrLqVAwAB8xADAAEYGPgM9HMABEtwWwAES0YDAARLMwD1LvoJviFOEUgEAAS4AhPA9isABEvDAPUwQHMABEvguoS8AAAAAwAB830nAARMFHMABEyMWwAETFxbAARMJLsAAVOHAAHyTwAB8t4VrwAB8mEgBAAFqwAETMmADvkHAAOhSAMAA/3U+AD4BPYrAARURwD1MEBzAARUmFsABFRkuwABU28AAfJPAAHyxwABVIAMAAxbAARVpFsABFVsuwABU4cAAfJPAAHy3gmrAAHyXgsABFXHAPUwQFsABFXguwABU38AAfJPAAHy1AMAAoOI9HMABFZguwABU+8AAfJMAAAAAwAB86EnAARW1IhbAARXIFsABFbkuwABU3cAAfJPAAHyzgVXAAP6hABbAARXhFsABFdMuwABU0sAAfMOFUL4vPgFJwAEV8yXAARYDFsABFfyA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wAB8pgDAAH05PRzAApOWFsACk5AuoTvAAHy+VgEAARzAApOgFsACk5oupIDAAHyiuf0CAAKDwAKTusA+RxAWwAKTwC6lQMAAfMQAwABGBADAAP7QSsACk9UAPz0cwAKT8RbAApPoLqUuwAB8wq/VAwADHMAClBkWwAKUDS64tMAAfJPAAHyvwABQnAIAAhbAApQmLsAAVNLAAHzDgcAClDXAPkaDAMAAc+ZqwAKUVGADpWXAAMeIMsAClGVbWwEngbInwABWagC25T0cwAKUxhbAApTALqE7wAB8vlYBAAEcwAKU0BbAApTKLqSAwAB8orn/AQABFsAClOAupUDAAHzEAMAARgYAwAD+0AbAAH04gVfAApT2wAKU+sACltgAAMAAVmvAAHyTAAAAAQPAApUcwAKW2AAAAAICAsAClTIAAACGHWADwABiOADAApVIAAAAs4JgA74TAABgA8AA/hsBPgJJwAKVXCXAApVpgMAClWDAPkiYYAPAAGOJPgFJwAKVjhzAApWoFsAClaAWwAKVmxTAApWSwD5ImAABYAPAAGOJgpTAAGMBlnvAAGP1SAEAAYHAApWrwD5IqADAAP91PgNAIhzAApXhFsACldoWwAKV0xTAApXKwD5ImAABYAPAAGOJhIvAAGOLYcAA/xVIAQABlADAAP8/ARzAApYAFsAClfkWwAKV8hTAApXpwD5ImAABYAPAAGOJhIvAAGOLYcAA/xVIAQABlQDAAP8/wAKVysAClgQATsAClh3AApYrAADAAEziYAPAAGI4ARbAApZEFsAClj0WwAKWNhTAApYtwD5ImAABYAPAAGOJhIvAAGOLKcAA/xSDHsAA/qNJwAKWUyXAApZlgsACllfAPkmXYAPAAGKRPgFKwAKWhgEcwAKWpBbAApabFMAClo3APkmXAgFgA8AAYpGq88AAYpOq4wAAAADAAPxPPz8/SsAClskBKwbAAH05gVfAApcfwAKXJ8ACmFkAAMAAVmnAAHyTAAAAAQPAApc7wAKYWQAAAAICAsACl0oAAACGHWADwABiOADAApdhAAAAsG5gA8AAZskAAGADwACXGgE+A07AApdywAKXeAAAJ2ADwAD+GwEcwAKXei7AAFZrwAB8kwIAAoDAApemwD5KYxbAApfAFsACl7AutR3AAHyTwAB8z7LdulkAwAB9OEnAApfUHMAC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PgI9HMACx48WwALHiS6hO8AAfL5WAQABHMACx5kWwALHky6kgMAAfKK5/wEAARbAAsepLqVAwAB8xADAAEYGAMAA/tBKwALHvgA/TsACx+PAAsfqAACCVV0DwAD+vwFgA8AARtABHMACx+wuwABWC8AAfJMBAAEWwALIEYDAAsgGwD5qQ1uF/gDAAH0jPRzAAsghLqEsAQABH8ACyCrAAEtLAwADHMACyEeBwALIQcA+atBLAQABkwDAAP7OHMACyFKBwALITMA+atBLAQABlADAAP7OFsACyGwWwALIVy7AAFTswAB8k8AAfNSF2L9OAADAAHzeBsAAfUSBV8ACyIHAAsiGwALMvwAAwABVe8AAfJMAAAABA8ACyJvAAsy/AAAABgQEwALIqQAAAIJJYAO+JQDAAsjEAAAAW10DwAD+vwFgA8AARtAAwALI4wAAALbwYAO/OgDAAsj8AAAAhThdA8AA/r8BYAPAAGPLAALAAskkAAAApcJgA8AAQzQBagBgA8AA/yV5wALJRQAAALK6YAPAAGPzAWoAYAPAAP8leVwBPgRJwALJkBzAAsmULsAAVUDAAHyTCAAHJsACya4BgMACya7APmuqYAO+OisrgcACycLAPmu4g8ACyc3APmvcK4TAAsniwD5r9AGyuoXAAsoLwD5sDcAAfVE+AUrAAsoiAD9OwALKOQAAALnoWwBJwALKShzAAsplFsACyloWwALKTi6lQMAAfMS4z8AATonAAE0pAQABgMACynfAPmuqAMAAbDQ+AT2OwALKiMA+bIscwALKli7AAFaawAB8kwIAAibAAsqvAYDAAsqvwD5rqmADvjqBwALKt8A+a7gAwAB9Rj4DPY7AAsrWwD5sizXAAsroAAABAGADwABICwEfwALK6MAASBcFAASAwALLAcA+a6qBwALLCcA+a7iCwALLFMA+a86DwALLHsA+a9wBuwUhHMACy1YWwALLSC7AAFTtwAB8k8AAfNi4hAEAASbAAstlAYDAAstlwD5rqmADvjoAwABEGDUAAAABAFsBF8ACy3iHwALLdsA+bRelwoTAAsuMwD5r9MAARtOHAMA+bRdJwALLphbAAsvJFsACy6ouwABU18AAfJPAAHyrg7fAAP6iPgE9F8ACy+uGwALL38A+bIu65B7AAswPwAD+xQEBYAPAAGPzARbAAswoLsAA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ABTAAtpgwD522w4AhcAC2mzAPm8FADUAAAABAFsBF8AC2oUUwALag8A+eF0PAKXChsAC2pnAPm8cwABG0xQAwD54XQ8AAMAAfN4+AT0cwALawC6hLAEAAR/AAtrJwABH8QcABoPAAtrewD5u34LAAtrowD5u0RTAAtr2wD51dgwAFMAC2v7APnbbDgCFwALbFMA+bwWGwALbI8A+bxwBuvMUwALbT8A+dfwNAADAAHzeBsAAfUaBV8AC223AAtt6wALt+wAAwABWmsAAfJMAAAABA8AC25LAAu37AAAAAgICwALbqQAAAJZ7YAO+OgDAAtvFAAAAW10DwAD+vwFgA8AARtAAAGADwABIoQE+EUAcwALb9BbAAtvpFsAC290upUDAAHzEuM/AAE6JwABNKQEAAYDAAtwGwD55dQDAAGw0wALb3cAC3A4APRzAAtweFsAC3BUuuPjAAHzFsEYBAAGAwALcM8A+eXUAt6pJwALcQiIiJcAC3E6AwALcRsA+eXVgA75SABbAAtx2FMAC3G7APnl1AAFgA75StWC+VQAcwALcohbAAtyWLsAASULAAHyTwAB81cAATTABAAEWwALcxBTAAty8wD55dQABYAO+UoUZvjMAwABsNj4NTsAC3VfAAt1jAACZNGADvlIBFMAC3WXAPnl1AAFgA75STsAC3XjAAt16AABiYAPAAP4bAZNOwALdicAC3ZMAAMAAVqBgA8AA/hsBk07AAt2iwALdtAAAwABWoV0DwAD+vwFgA8AARtABMcAC3cRgA8AARtAATsAC3dLAAt3jAADAAFaiXQPAAP7xAmADwAEAAmADwACXEAEewALd6cAA/vgAAmADwAEAAmADwACXEAAATsAC32DAAt9lAACD82ADhCUBJsAC32ABFsAC35QcwALfcxbAAt9nLri0wAB8k8AAfK/AAFCaAQABgsAC34fAPnpyAMAAc+GD88AAdClgA4QlTsAC373AAt/NAACEyF0DwAD+vwFgA4iRARzAAt/3FsAC3+cWwALf3ofAAt/ZwD57I4JuhCqEyITJgK0AAAAAwAD+kz0cwALgFxTAAuAHwD57dAgAgK4BAAFqwALgHGEDAmADiJFgA4iRYAPAAP4bwAFN0QDAAP7SRsAC4DPAAuBswALgTwAAAIJwYAOIkQAUwALgW8A+e3QIAD4ETsAC4H3AAuCL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A05ZASo/ScADTnIiHMADToIWwANOdi7AAElCwAB8k8AAfNXAAE0pAQABgMADTpTAPsw6AMAAbDQAISIlwANOtIDAA06rwD7MOmADvlIAFsADTtUUwANOzMA+zDoAAWADvlK1YL5VPgFKwANPNQEqP07AA09TwANPXgAAuHBgA8AA/FUBIhzAA09qFsADT2AuwABU0MAAfL+AlwEAAZMAwAD/SwEWwANPdxbAA09xLqSAwAB8ornvwABF9UnAA1ANHMADUB4WwANQES649sAAfJPAAHy4uHgBAAGAwANQL8A+zDoAwABD6krAA1A6ASo/TsADUFHAA1BkAADAAFbMYAPAAPxVARzAA1B7FsADUG4uuPbAAHyTwAB8uLhvAgABgMADUIXAPsw6AbhwFMADUJvAPs1lCADAAEPmScADUKwcwANQwxTAA1CwwD7N5QkASAEAASoAwAD/dUrAA1DNASo/T8ADUODAA1DlAAABwABWzWEDAGADwAD8VQADwANQ+cADWOAAAAAAAAAAYAPAAPxVAT4IScADUQQWwANREBbAA1EILnrAAHzBgqeBK0rAA1EhASo/QCIiIiIhHMADUVGBwANRSMA+zEhIAQABKwDAAP91ARbAA1FzgMADUWrAPsw6hB6+KQEWwANRloDAA1GNwD7MOoefvigBFsADUbuAwANRssA+zDqHnr4rASXAA1HjgMADUdrAPsw6YAO+WcADUUjAA1H7AR7AA1IHtv0CAAKAwANSEMA+zDokwANSRwMnwABWzoDAA1I9wD7MOieBagBJwANSUSEcwANSXoHAA1JVwD7MSEgBAAErAMAA/3U+AknAA1JxIRzAA1J/gcADUnbAPsxIs7sBAAGAwANSh8A+zDoAwABM2ErAA1KSASo/ScADUqgiIRzAA1KxgsADUqzAPsxYSAEAASsAwAD/dQAWwANTNhzAA1LuFsADUsguwABU7MAAfJPAAHzUs7wDAAOCwANTAMA+zFiAwANTBsA+zDoWwANTGYHAA1MQwD7MSKeLwABMvAC/rLY1vyo+AUrAA1NVASo/P0nAA1N8HMADU4wWwANTgC7AAElCwAB8k8AAfNXAAE0pAQABgMADU57APsw6AMAAbDRKwANTqQEqP0nAA1QFHMADVBcWwANUEoDAA1QJwD7MOoC9vgFIAQABJ0gAwAEAET4BScADVCoiIRzAA1RGFsADVDeAwANULsA+zDqFGb4zSAEAARbAA1RZFsADVEkutR3AAHyTwAB8z5suuYkAwAD/dQAWwANUyBzAA1SaHMADVIWDwANUdMA+zGZLAQABlADAAP7OqFwBAAEWwANUoS7AAFTswAB8k8AAfNQAwABHHrO9vyk+AUrAA1TnASo/P0nAA1WnIiIlwANVtIDAA1WrwD7MOmADvlIAFsADVd8UwANV1sA+zDoAAWADvlK0Zr5UABzAA1YQFsADVgQuwABJQsAAfJPAAHzVwABJewEAARbAA1YxFMADVijAPsw6AAFgA75ShRm+MwDAAGwdPgFKwANWTAEqP0nAA1beISXAA1brgMADVuLAPsw6YAO+WT4BScADVxAWwANXRBzAA1crFsADVxQupXDAAHzGtUsBAAGAwANXOsA+zDoAwABCprfDwABCjD4CPRfAA1iILsAAVOPAAHyTKsAAfLtKwANYqAEqPz9KwANYzwEpT8ADWOfAA1jsAAABwABWz2EDAWADwAB+A2ADwAD8VQADwANY/sADWZIAAAABAQHAA1kKAAAAwABW0GADwAB+AwAAYAPAAPxVAT4BSsADWVkBHMADWWsUwANZYMA+0hsMAMAAVtEBAAABwABW0pTAAH4XT8ADWZnAA1meAAABwABW02EDAWADwAB+A2ADwAD8VQADwANZsMADW0oAAAABAQHAA1m8AAAAwABW0GADwAB+AwAAYAPAAPxVAT4DScADWkkcwANaTS7AAFbUwAB8kwEAAYDAA1pbwD7MOgDAAH1fPgFKwANacAEcwANaghTAA1p3wD7SjQ0AwABW0QAAAADAAH4XP0nAA1qgHMADWq8UwANapMA+0o0NAMAAVtUBAAABvDYWwANa8YPAA1rfwD7MZmHAAP7vwAB+GT4BSsADWwQBKT9KwANbHwEcwANbOBTAA1smwD7R8QsAIAEAARTAA1s5wD7SjQ0AAABPwANbUcADW1YAAAHAAFbWYQMAYAPAAPxVAAPAA1tqwANoVAAAAAAAAABgA8AA/FUBPhFJwANbmBzAA1urFsADW5wuwABU3cAAfJPAAHyzgdYBAAE0wANbrwPAA1uvwANb1AAAAAEBAcADW7AAAACD1GADwAB9tgAAYAPAAPxVAUrAA1u6ARzAA1vJFsADW8AUwANbusA+08EOAIJuwAB9uEgBAAGAwANbzMA+zDoAwAD/dQDAAP6SPgFKwANb4QEqP07AA1yZwANctwAAtQtgA8AA/FUBHMADXN8WwANcxRbAA1y5LqVAwAB8xLAAwABOl7ULAgACFsADXP0uwABU08AAfJPAAHyngMADXRTAPsw6AL1MTsADXTHAA108AADAAFbQYAPAAH4DARzAA11ZFsADXUguuPfAAHyTwAB8ucAAVtcCAAIWwANdZy64tMAAfJPAAHyvgMADXXTAPsw6AMAAfiZJwANdhiEUwANdi8A+1BwOAD4BSsADXbQBHMADXc0UwANdu8A+0fELACABAAEUwANdzsA+1G8PAAAAP0nAA142IhbAA146LsAAVNzAAHyTwAB8sgEWwANeUi7AAFTgwAB8k8AAfLY+AUrAA156ARzAA16TFMADXoHAPtJjDAAgAQABFMADXpTAPtRvDwAAAD9JwANesBzAA17HFMADXrTAPs3lCQBIAQABKQDAAP91PgNOwANfaQAAAKXEYAPAAQACAEAcwANfyxXAA1+OwD7VcBAcwANfohTAA1+XwD7Ubw8AwABW2AEAAAHAAFbZKcAAfhhIAQABKwDAAQARwANfjcADX+IBHsADX/C2/QIAAoDAA1/5wD7MOiTAA2AlBCfAAFbagMADYBPAPsw6J4NbFMADYB7APtVwEAAASsADYDEBKT9OwANgUcADYF8AAMAAVttgA8AA/hsBFsADYH0WwANgaoDAA2BhwD7MOrW5vj21xr5xTsADYJgAAADAAFbSYAPAAP4bAEnAA2CwFMADYLTAPs1lCAA+AT0VwANgysA+1jQRHMADYQVqwANg6mADwAD+G4QOZAEAARzAA2FGasADYSBgA8AA/huBV4ONAQABFMADYUjAPtYDEAAAwAD/QwDAAP9BPgE9FcADYW7APtY0ERzAA2GqasADYY5gA8AA/hvAAIv2ZAEAARzAA2HsasADYcVgA8AA/htTg40BAAEUwANh7sA+1gMQAADAAP9DAMAA/0FOwANiEcADYiEAAMAAVtxgA8AA/FUBHMADYjAWwANiIy649sAAfJPAAHy4uHkBAAGAwANiQsA+zDoAwABD7E7AA2JYwANiYwAAwABW3WADwAD8VQEcwANiZS7AAFbUwAB8kwEAAYDAA2JzwD7MOgDAAH1fScADY0UiFMADY0nAPtb2EgABFMADY1zA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LoSHwAB/xsAATYwDAmADwACQemADwACniQMUwABFA8BAKHULABTAAEUKwEAohAwAFMAARRPAQCifDQAAwACQpQDAAP8GQBzAAEUtFMAARSfAQCh1CwBIAQABFsAARTgUwABFMMBAKIQMAMAARX/AAJB8AMAA/z/AAEUnwABFRAAAwACAtj0cwABFWoTAAEVTwEAcjIKQAQABasAARV5gA8ABAALAAV9bAMAAXqg9HMAARXuEwABFdMBAHIyCmAEAAWrAAEWBYAPAAQACwAFfYADAAF6nPRzAAEWihcAARZXAQB2RwABYNAEAATTAAEWwA8AARbDAAEgmAAAAAgICwABFtQAAACdgA8AA/hsAwABFygAAAIJqYAPAAJBmAABgA8AA/yUBPgROwABF5sAAResAABJgA8AAptYBHsAARfHAAKbfAQABhMAARhDAQByMAD0cwABGJxbAAEYfLoSUwAB/xMAATYwDAmADwACQZmADwACm1gMUwABGN8BAKf8LABTAAEY+wEAqDgwAFMAARkbAQCopDQAAwACQpUFHwABGUxbAAEZrFsAARmAUwABGW8BAKikNAMAATbHAAKbYgmvAAHQoAgLAAEaLasAARotgA8AAdBXAAUySwABGrGrAAEasYAPAAHQVwAFMqwA+A07AAEbNwABG0gAAg/NgA4OQASbAAEbNARbAAEbkFsAARtkUwABG1MBAKikNAMAATbHAAKbYg/PAAHQpYAODkEnAAEb0FsAARv8UwABG+MBAKg4MAIebviw+AT0cwABHHhbAAEcWLr26wAB/zYC/AgACJsAARx4BFMAARx/AQCrxDgBgA4OvJsAARx4BFMAARyfAQCoODABgA8AAkHIAwAD/BknAAEdAFsAAR0sUwABHRMBAKg4MAIeevis+AT0cwABHdhbAAEdoLsAAWBHAAH/LgL8CAAIUwABHd8BAKvEOACbAAEd2ARTAAEd/wEAqDgwAYAPAAJBvAMAA/wY+AT0cwABHrxbAAEemLsAAWBLAAH/MgL8CAAImwABHrwEUwABHsMBAKvEOAGADhCUmwABHrwEUwABHuMBAKg4MAGADwACQbADAAP8GQsAAR9YAAAE+AEAcwABICRTAAEgDwEAp/wsASAEAARbAAEgTFMAASAzAQCoODAC46sAAkGgAwAD/P8AASAPAAEgeAADAAIC3PRzA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wABYNAEAATTAAGIRA8AAYhHAAGJDAAAAAQEBwABiHAAAAIPzYAODkAAAYAPAAP8lAT4BPRzAAGIrgcAAYirAQEgdIAEAARzAAGIsLpxoAQABg8AAYjbAQEi/AMAAgAAAAADAAKYxBsAAf/eBW8AAYk3AAGJZwABjiQAAs30AAAABA8AAYmTAAGOJAAAAAgICwABidAAAAIRIYAPAAJBaAMAAYoQAAACAvWADwAEAAgAAYAO+EwE+BUAcwABily7AAFg+AQABgMAAYqPAQEk0AMAAgCzAAGKXwABiqwBOwABivsAAYskAAMAAWDxgA8AApiEBHMAAYtUWwABiyy6G9cAAf8LAAFgZAQABgMAAYtzAQEk0AMAAkK5OwABi9MAAYv0AAMAAWEFgA8AApkwBHMAAYwqCwABi/8BASYKzfQEAAYHAAGMWwEBJRADAAKYuScAAYyEhHMAAYy6DwABjJcBASb5IAQABKwDAAP91PgFKwABjPwEcwABjRi7AAFhCAgACFsAAY2CDwABjV8BASb6aJsAApleDwABjZcBASb4AwACALz9KwABjegErBsAAf9mBW8AAY47AAGOTwABk2QAAwABYQ8AAf6IAAAABA8AAY6DAAGTZAAAAAgICwABjsAAAAIRIYAPAAJBaAMAAY74AAACBpmEDAWADvhNcAABcAT4DQBzAAGPfLsAAWD4BAAGAwABj68BASoEAwACALMAAY9/AAGPzAE7AAGQGwABkEQAAwABYPGADwACmIQEcwABkHRbAAGQTLob1wAB/wsAAWBkBAAGAwABkJMBASoEAwACQrj0cwABkPYLAAGQywEBKzqVaAQABNMAAZEoDwABkSsAAZNQAAAABAQHAAGRVAAAAwABYQWADwACmTAAAYAPAAP8lAT4BScAAZGchFsAAZHWDwABkbMBASzG0G8AAplg+AT0cwABkm4HAAGSawEBKkSABAAEcwABknC7AAFhCAgACFsAAZLaDwABkrcBASzGaJsAApleDwABku8BASzEAwACALwAAPwDAAKYvBsAAf/iBW8AAZN7AAGTrwABlxgAAtBIAAAABA8AAZPzAAGXGAAAAAwICwABlCgAAAJomYAPAAJBgAMAAZRYAAACAvWADwAEAAgABwABlKAAAAJtkYAPAAPxVAWrAAGUwYAPAAPxVAGADviUBPgNAHMAAZUUu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AH/bSsAAotEBFsAAot2BwACi2MBAhArAAFfHwACmqgbAAIATgVvAAKL0wACjBMAAo8EAAMAAUEgBasAAovVgA8AA/2gCAAABA8AAoxXAAKPBAAAAAQEBwACjIwAAAJomYAPAAJBgAABgA8AA/hsBPgRAHMAAozUuwABYPgEAAYDAAKNBwECEvwDAAIAswACjNcAAo0UATsAAo1fAAKNcAAASYAPAAKaeARzAAKNmFsAAo14uhIjAAH/DwABNoQEAAYDAAKNuwECEvwDAAJCePRzAAKN4LsAAWEXAAH+iAgACgMAAo4rAQIS/gcAAo4/AQIT/AMAAf9tKwACjmgEWwACjtRbAAKOmgcAAo6HAQIT/wABXx8AApqrAAFhtwACntwbAAIAUgVvAAKPGwACj6sAApJYAAMAAR9UBasAAo8dgA8AA/2gCAAABA8AAo/fAAKSWAAAAAQEBwACkBQAAAJomYAPAAJBgAABdA8AA/n0BYAPAAGPzAT4EQBzAAKQXLsAAWD4BAAGAwACkI8BAhcEAwACALMAApBfAAKQnAE7AAKQ5wACkPgAAEmADwACmngEcwACkSBbAAKRALoSIwAB/w8AATaEBAAGAwACkUMBAhcEAwACQnj0cwACkWi7AAFhFwAB/ogIAAoDAAKRswECFwYHAAKRxwECGCADAAH/bSsAApHwBFsAApIiBwACkg8BAhgie48AApqkGwACAFYFbwACkm8AApKzAAKU8AADAAFhuAAAAAQPAAKTHwAClPAAAAAEBAcAApOAAAAiCamADwACQZgAAYAPAAHQmAT4CQBzAAKT1LsAAWD4BAAGAwAClAcBAhq8AwACALMAApPXAAKUIAErAAKUPARbAAKUuHMAApR4WwAClFi6ElMAAf8TAAE2hAQABgMAApSbAQIavAMAAkJ7AAE2xwACm2AbAAIAWgVvAAKVBwAClUcAApdYAAMAAWG8AAAABA8AApWvAAKXWAAAAAQEBwAClgwAACJomYAPAAJBgAABgA8AAdFgBPgJAHMAApZUuwABYPgEAAYDAAKWhwECHUwDAAIAswACllcAApaUASsAApawBFsAApcgcwACluxbAAKWzLoSIwAB/w8AATaEBAAGAwAClw8BAh1MAwACQnsAATbHAAKakBsAAgBeBW8AApdvAAKX0wACmqgAAwABQlwFqwACl3GADwAD/aAIAAAEDwACl/cAApqoAAAABAQHAAKYTAAAAg/NgA4LDAABgA74JAT4DTsAApirAAKYyAACESGADgowBJsAApioBFsAApjmAwACmNMBAiAOEV4JZYAOCjE7AAKZSwACmVwAAEmADwACmNAEcwACmYxbAAKZZLob1wAB/wsAATaEBAAEmwACmawEcwACmay7AAFg5AQABgcAApn7AQIgaAMAAgC5gA8AAkFoAwACQnkrAAKaNARzAAKagFsAAppmCwACmlMBAiEiZ08AApjhLAQABgMAApqHAQIgDAMAA/wUGwACARoFbwACmr8AApsbAAKebAQCG6AAAAAEDwACm1sAAp5sAAAAAAAAAYAObwgE+AknAAKbcHMAApvEWwACm4C7AAFgMwAB/osAAf7lIAQABKwDAAP91PgE9IxzAAKcTFsAApwIuwABYDMAAf6LAAH+5SAEAASsAwAD/dRfAAKcCLsAAWAzAAH+iHsAApxubywIAAh/AAKc9nSkBAAEWwACnVRbAAKdKLrjVwAB/wbjWwACmGQAWwACnZS6H9sAAgEcAwAB/uSsBYAObwj9KwACngAEWwACnhy7AAFgMwAB/osAAf7kGwACAR4FbwACnoMAAp7bAAKhZAQCH9gAAAAEDwACnxcAAqFkAAAAAAAAAYAOcBQE+AknAAKfLHMAAp98WwACnzy7AAFgNwAB/osAAf7pIAQABKwDAAP91PgE9IxzAAKgAFsAAp/AuwABYDcAAf6LAAH+6SAEAASsAwAD/dRfAAKfwLsAAWA3AAH+iHsAAqAicBwEAARbAAKglFsAAqBouuNXAAH/BuNbAAKYZAMAAf7orAWADnAU/SsAAqD8BFsAAqEYuwABYDcAAf6LAAH+6BsAAgBiBW8AAqF7AAKh9wACtjgAAwABQoAFqwACoX2ADwAD/aAIAAAEDwACoksAArY4AAAABAQHAAKigAAAAgmpgA74lAABgA8AAoL0BPgZOwACov8AAqNAAAMAAWHBgA8AAdCYBFsAAqOocwACo2hbAAKjSLoSUwAB/xMAATaEBAAEmwACo4gGAwACo4sBAir5gA8AAkGYAwACQnsAATbHAAKbYTsAAqQoAAADAAFhxYAPAAJ5WAE7AAKkyAAAAhMlgA4k3AEFHwACpQBbAAKlZgcAAqUjAQIrXgmvAAHQoAwPAAKl3asAAqXdgA8AAdBXAAUySwACplmrAAKmWYAPAAHQVwAFMq8AAqblqwACpuWADwAB0FcABTMQAPgROwACp3MAAqeEAAIPzYAODkAEmwACp3AEWwACp9IHAAKnjwECK14PzwAB0KWADg5A9i8AAqgLAQIs/NQAAAAEAYAODHAEWwACqEoTAAKoNwECLpoUZg5gjHMAAqiKFAMBAi+BIAQABKwAAKxbAAKoihQDAQIvghMmDSwFgA4k3PYrAAKo0wECLLBbAAKpgHMAAqlAWwACqSC6ElMAAf8TAAE2hAQABJsAAqlgBgMAAqljAQIq+YAPAAJBmAMAAkJ7AAFfVwACm2kLAAKp1AAHAAKqSasAAqpJgA8AAdBXAAUzdAD4DTsAAqrPAAKq4AACD82ADglMBJsAAqrMBFsAAqsuBwACqusBAiteD88AAdClgA4JTQUPAAKrZIRzAAKrlhMAAquDAQIyLSAEAASsAwAD/dT4CScAAqvolwACrA4TAAKr+wECMi2ADg5A+BE7AAKspwACrMAAAgmpgA4OQARTAAKsywECMiwQBYAODkD2LwACrRMBAiz81AAAAAQBgA4McARbAAKtWhcAAq0/AQIz1hRmDmCMcwACrZoYAwECNIEgBAAErAAArFsAAq2aGAMBAjSCEyYNLAWADiTc9isAAq3zAQIssFsAAq7McwACrmBbAAKuQLoSUwAB/xMAATaEBAAEmwACroAEcwACroC6caAEAAYXAAKuqwECM9QDAAIAAYAPAAJBmAMAAkJ7AAFfVwACm2kLAAKvMAT89jMAAq+nAQIyLFsAAq/WEwACr8MBAjIuEV4JZQsAArA8AA8AArCxqwACsLGADwAB0FcABTPbAAKxQasAArFBgA8AAdBXAAU0QwACscWrAAKxxYAPAAHQVwAFNKgA+Aj2KwACsiMBAiyxqwACsomADwACeVsABX49CwACsvQBAIRzAAKzogsAArNbAQIssSAEAASsAwAD/dcAArNbAAKzvASTAAK0WAyfAAFhygMAArQ7AQIq+J4FqSsAArR0BH8AArSjAAKf1AwADFsAArTkuhujAAIBGgsAArUrAQIssHsAArWnAAJDxAQABg8AArYDAQIs/AAAGwACAGYFbwACtk8AAraTAAK4ZAACZdQFqwACtlGADwAD/aAIAAAEDwACtq8AArhkAAAABAQHAAK20AAAAgL1gA4jHAABgA8AAakoBPgFKwACtwAEewACty8AAakwCAAIWwACt3oDAAK3ZwECO8IC9iMojFsAAremAwACt5MBAjvCGdYjOHMAArfUunGYBAAEWwACuBYDAAK4AwECO8IRIiM0AwAB/+ysBYAO+BAAGwACAGoFbwACuHsAArjjAAK9gAADAAFCPAWrAAK4fYAPAAP9oAgAAAQPAAK5IwACvYAAAAAEBAcAArlYAAABbYAOFtgAAYAPAAGp7AT4DTsAArmvAAK55AAC8NmADwAD+GwEcwACulxbAAK6QFsAAroWAwACue8BAj6CFq4W5YcAA/u9kAQABFsAArqkWwACuo4DAAK6ZwECPoIV1hbphwAD+7wDAAP9BTsAArsLAAK7RAACq2l0DwAD+vwFgA8ABAAIBHMAArvYcwACu4xbAAK7dgMAArtPAQI+ghXWFuoCrAQFgA8ABAAIBNMAArucDwACu58AArvQAAAABAQHAAK7oAAAAg1NgA4XEAABgA8ABAAIBSsAAru4BFsAArvCCwACu7sBAkGeAvYXGAMAA/oiArQAAAADAAP6TSsAArwQBHsAArw/AAGqRAwADgcAArybAQI+4gsAArzXAQJASFsAAr1UWwACvT4DAAK9FwECPoIWFhbhhwAD+7wAGwACAG4FbwACvZcAAr3rAALLmAADAAFCQAWrAAK9mYAPAAP9oAgAAAQPAAK+FwACy5gAAAAEBAcAAr5QAAACD82ADhOwAAGADwABMuAE+B0nAALBCJcAAsEuAwACwRsBAkR1gA4UXPgFKwACwZgEcwACwbS7AAFhzAQABFsAAsIQUwACwf8BAkR0AAWADhReAvYUaAMAAgB0/ScAAsJUlwACwnoDAALCZwECRHWADhTw+AUrAALC/ARzAALDGLsAAWHMBAAEWwACw5BbAALDdFMAAsNjAQJEdAAFgA4U8gkmFQYC9g5QAwACAHT9JwACw9SXAALD+gMAAsPnAQJEdYAOFcj4BSsAAsR4BHMAAsSUuwABYcwEAARbAALE8FMAAsTfAQJEdAAFgA4VygL2FdADAAIAdP0nAALFNJcAAsVaAwACxUcBAkR1gA4UpPgFKwACxcQEcwACxeC7AAFh0AQABFsAAsY8UwACxisBAkR0AAWADhSmAvYUsAMAAgB4/ScAAsaAlwACxqYDAALGkwECRHWADhYM+AUrAALHJARzAALHQLsAAWHQBAAEWwACx5xTAALHiwECRHQABYAOFg4C9hYUAwACAHj9JwACx+CXAALIBgMAAsfzAQJEdYAOFzj4BSsAAsiUBHMAAsiwuwABYdQEAARTAALJCwECRHQABYAOFzgDAAIAcPz0wwACyUx7AALJZtv0CAAJqwACya2ADtw/AAMecJAACJ8AAWHaAwACy28BAkR0ABsAAgByBW8AAsuvAALL0wAC0+QAAwABYdQAAAAEDwACzCcAAtPkAAAABAQHAALMiAAAAoZxgA4XOAABgA8AATLgBPgVOwACzOcAAsz4AAIC9YAPAAGpKARzAALNALpl1AQABFsAAs1OAwACzSMBAk0yAvYXRAMAAgBlOwACzawAAAIJrYAPAAEynAEnAALN1HsAAs4LAAEzTAQABFsAAs5aBwACzkcBAk2WBssAAak4APgFJwACzpSIcwACzroHAALOpwECTZUgBAAFqwACzt2ADwABqSsAA8iIAwAD/dQEcwACzyoHAALPFwECTZUgBAAFqwACz02ADwABqSsAA8jYAwAD/dT4BPYrAALPtwECTm2rAALQBYAPAAEynwAD9PT4BPYrAALQfwECTm2rAALQzYAPAAEynwAD9Jz4BPYrAALRYwECTm2rAALRsYAPAAEynwAD9E07AALSLwAC0mQAAtcdgA8AAansBHMAAtJsuwABQjwEAARbAALS3gMAAtKzAQJNMW4XQAMAAgBpKwAC0xwEewAC00sAATOADAAOCwAC028BAk5uBwAC04cBAk2WDwAC058BAlHgABsAAgB2BW8AAtP7AALUHwAC1uQAAwABYcwAAAAEDwAC1GMAAtbkAAAABAQHAALUhAAAAwABYd2ADiMcAAGADwABMuAE+Ak7AALU0wAC1OQAAgL1gA8AAakoBHsAAtT/AAGpMAgACFsAAtVSAwAC1TcBAlQiAvYjKIxbAALVhgMAAtVrAQJUIhnWIzhzAALVtLpxmAQABFsAAtX+AwAC1eMBAlQiESIjNAMAAf/srAWADvgQASsAAtZUBHsAAtaDAAEziAQABgcAAtbDAQJUjAAbAAIAegVvAALW+wAC1x8AAtnkAAMAAWHQAAAABA8AAtdjAALZ5AAAAAQEBwAC14QAAAMAAWHdgA4jHAABgA8AATLgBPgJOwAC19MAAtfkA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QKpISAEAASsAwAD/dT4CScAAz1EhgsAAz1bAQKp1PgE9MMAAz24ewADPdLb9AgACasAAz4pgA7cPwADHnCfAAFiHAD89i8AAz9PAQKr0H8AAz+LAAE96AAAAAD4BPYvAANAPwECq9BzAANBeH8AA0CjAAKijAgABLgHAAE58gcAA0E3AQKpXmvEBAAGAwADQZMBAqkgAwACog0nAANB1HMAA0IKDwADQecBAqvRIAQABKwDAAE8iPgJJwADQk4HAANCXwECqVz4BPTDAANCyH8AA0LzAAP2tAQABJMAA0Q0CJ8AAWIgewADQ+sAAqCUBAAGAwADRBsBAqkgAAD9KwADRHgErP07AANFDwADRSQAAgJZgA8AAYjgBHMAA0UsuwABYWwMAAh7AANFpwACeNQEAAYDAANGHwECqSACDwADRjsBAqvQBwABOfIHAANGxwECqV8AAgAtJwADRxyIhFsAA0dKEwADRzMBArBu59sAAYjoAIYHAANHhwECqVz4BSsAA0foBKz9KwADSEQGEwADSGMBArBsGwACAJIFbwADSZMAA0njAANOUAADAAFiJAAAAAQPAANKDwADTlAAAAAEBAcAA0pgAAACEaF0DwAD+vwFgA4TsAABdA8AA/r8BYAPAAGI4AT4EScAA0qsWwADSu4DAANKvwECs14FVwAD+oUrAANLEAWrAANLLXQPAAP6/AWADwABiOMABI0o/TsAA0vzAANMFAACG910DwAD+vwFgA8AAYjgBMcAA0xZgA8AAYjgAPRzAANMqgMAA0x7AQKzXg/0BAAE0wADTMgPAANMywADTegAAAAEBAcAA00EAAACD82ADhOwAAGADwAD/JQE+AT0cwADTWIHAANNPwECtNFYBAAEcwADTXC7AAE57AQABgsAA023AQK2CAMAAgCMAwAD+0ADAAP6NSsAA04EBgcAA04jAQK00BsAAgCWBW8AA05nAANO0wADXHwAAwABPYwFqwADTmmADwAD/aAIAAAEDwADTyMAA1x8AAAABAQHAANPVAAAAmiZgA74TAABgA746AT4EQUPAANPgIRzAANPrgMAA0+fAQK4ZSAEAASsAwAD/dT4DPYjAANP8wECuGRzAANQVFsAA1AIupVnAAIBBtBMBAAGAwADUI8BArhkAwACAaU7AANQ8wADUQwAAgmpgA74lARzAANRYFsAA1EUupVnAAIBBs4ACAAKAwADUesBArhlqwADUi2ADwAEAAsAA8XUAwACAaEnAANShIiEcwADUrIHAANSlwECuf0gBAAErAMAA/3UAIRbAANS/gcAA1LjAQK5/hB++Mj4CScAA1NUWwADU4IHAANTZwECuf7Pavi0+Ak7AANUHwADVEAAAgm5gA746ASbAANUHAYHAANUSwECuf2ADvjpJwADVJBzAANVZFsAA1UQWwADVMYLAANUowECvErW5vj2Ex75lgW0BAAGUAMAA/0w+AUrAANVtAYLAANV0wECvEj8/QsAA1gYAP07AANYuwADWNwAAgm5gA746ASbAANYuARzAANZMFsAA1jkupVnAAIBBs4ACAAIWwADWexbAANZsLrRZwACAQpsuuyNqwADWlGADwAEAAsAA8XUAwACAaGADvjpAIRzAANa4gcAA1q/AQK+BSAEAASsAwAD/dcAA1q/AANa/AR7AANbJtv0CAAKAwADW0sBArhkkwADXBAMnwABYioDAANb/wECuGSeBagBKwADXDAGBwADXE8BAr4EGwACAJoFbwADXJMAA1zfAANfBAADAAFgsAAAAAQPAANdJwADXwQAAAAMDA8AA11gAAAC1tmADvf8AwADXcAAAAIC9YAPAAQACAMAA13oAAAAnYAPAAP4bAABgA74fAT4BSsAA14cBH8AA15LAAHeUAwADgMAA16DAQLBkgcAA17HAQLBygsAA17fAQLCCAAbAAIAngVvAANfGwADX18AA2IAAAMAAWIsAAAABA8AA1+zAANiAAAAAAgICwADYBgAAAJk0YAO+UgDAANgmAAAAtblgA75hAABgA8AAdwwBPgFKwADYQAEfwADYS8AAdxgCAAImwADYXAGAwADYXMBAsPNgA8AAduaBwADYacBAsQEABsAAgCiBW8AA2IXAANiUwADZGAAAwABYjAAAAAEDwADYp8AA2RgAAAACAgLAANi+AAAAgm5gA746AMAA2NEAAACbO2ADwABjywAAYAPAAHcnAT4BSsAA2OQBH8AA2O/AAHc1AgACJsAA2P4BgMAA2P7AQLF2YAPAAHbfgcAA2QjAQLGEAAbAAIApgVvAANkdwADZIsAA2cMAALQuAAAAAQPAANk2wADZwwAAAAICAsAA2UsAAACCamADviUAwADZWAAAAIGmYQMBYAO+OlwAAFwBPgJAHMAA2YAuwABYPgEAAYDAANmMwECx+QDAAIAswADZgMAA2ZMAPTUAAAABAF0DwAD+vwFgA8AAkGwBHMAA2asWwADZmi7AAFgTwAB/osAAf7xLAQABgMAA2azAQLH5AMAA/wUjHMAA2bWCAMBAskVIAQABKwAAKxzAANm1ggDAQLJFg/0BAAGBwADZvcBAsgcAwAD+jQFcBsAAgCqBW8AA2cjAANniwADaSQAAuPoBasAA2clgA8AA/2gCAAABA8AA2fPAANpJAAAAAQEBwADaAQAAAIJqYAO+JQAAYAPAAGPzAT4BSsAA2g8BHMAA2i4cwADaHhbAANoWLoSUwAB/xMAATaEBAAEmwADaJgGAwADaJsBAsutgA8AAkGYAwACQnrj6AQABLgDAAKbcBsAAgCuBW8AA2k7AANpywADa8gAAwABQmwFqwADaT2ADwAD/aAIAAAEDwADalcAA2vIAAAABAQHAANqqAAAAgmpgA74lAABgA8AAoMQBPgFKwADauAEWwADa1xzAANrHFsAA2r8uhJTAAH/EwABNoQEAASbAANrPAYDAANrPwECzg2ADwACQZgDAAJCewABX28AAptkGwACALIFbwADa98AA2vzAANvOAADAAFg+AAAAAQPAANsHwADbzgAAAAEBAcAA2w8AAACkhmADvf8AAGADwAD8VQE+AkAcwADbNyTAANs2AYDAANsvwEC0DIHYAQABasAA20JgA8ABAALAAPhvAMABABTAANstwADbUgEewADbXLb9AgACgMAA22XAQLQMJMAA27cFJ8AAWI2AwADbjcBAtAwnwABYjmrAANumYAPAAQACwAD4byeBagBKwADbvwEpBsAAgC2BW8AA29PAANvpwADc3AAAwABQnAFqwADb1GADwAD/aAIAAAEDwADb9cAA3NwAAAACAgLAANwDAAAAgmpgA74lAMAA3BMAAACD82ADgkwAAGADtw8BPgROwADcKgAAAJcCYAO2/wBJwADcOiXAANxDgcAA3D7AQLTnYAOCUz4BPYrAANxbwEC0/h7AANxowACeNQEAARTAANyGwEC05wEBYAOCUwA/PSMcwADcooLAANyXwEC0/kgBAAErALcHisAA3JfAQLT+HMAA3KYuuOUCAAKAwADctMBAtNkrAMAAf9QrAWADtv9KwADcxwGCwADczsBAtP4GwACA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J68AAISGXQPAAP6/AWADwAEAAgExwAEnuWADwAEAAgBOwAEobcABKHcAAMAAWLNgA8ABAAIBJ7VoTsABKJTAASicAABeYAOCUwGAwAEonsBA5rdBQ8ABKOEhHMABKPCDwAEo6MBA5xJIAQABKwDAAP91PgNOwAEpBcABKQoAAIPzYAOCUwGDwAEpDMBA5xJJwAEpGyXAASkkhMABKR/AQOdNYAOHXT4CPRzAASlOgcABKUjAQObSVgEAAYLAASlSwEDm+QDAAP7QPYrAASlmwEDm+ScAScABKYMlwAEpjITAASmHwEDnTWADiLw+Ak7AASm4wAEpvQAAgL1gA8ABAAIBFsABKc0WwAEpxBTAASm/wEDnTQQBYAOIvIJwiL6AvYiVScABKdsiIRzAASnkhcABKd/AQOfHSAEAASsAwAEAEQAhHMABKfSFwAEp78BA58dIAQABJwAAwAEAET4BPRzAASoNgcABKgfAQObSVgEAAR7AASoRwACIyAEAAYXAASowwEDnxwAAwAD+0D4CPRzAASpZgcABKlPAQObSVgEAAYLAASpdwEDm+QDAAP7QPYrAASpzwEDm+ScAScABKpolwAEqo4TAASqewEDnTWADgxw+Aj0cwAErEYHAASsLwEDm0lYBAAEWwAErGhTAASsVwEDnTQQBYAODHIC9gyIAwAD+0ELAASspAEnAASs9JcABK0aEwAErQcBA501gA4QlPgFJwAErYRzAAStvFsABK2oUwAErZcBA500EAWADhCWCa4QoSAEAAWrAASuDYAOEZYHRAMAA/3U+AT0cwAErnoHAASuYwEDm0lYBAAEewAErosAAiMYBAAEmwAErwwEcwAErwy6caAEAARTAASvNwEDnTQQBYAOEJQDAAIAAYAO+OgAAwAD+0D4BPRzAASv3gcABK/HAQObSVgEAAR7AASv7wACIyAEAARbAASwkFsABLB8UwAEsGsBA500EAWADhCWAvYOUgL2IygAAwAD+0EnAASxDJcABLEyEwAEsR8BA501gA4PiPgI9HMABLG+BwAEsacBA5tJWAQABHsABLHPAAIjGAQABJsABLJQBHMABLJQunGgBAAEUwAEsnsBA500EAWADg+IAwACAAGADvjoAAMAA/tBCwAEsrwA/PYvAASzEwEDnEhbAASzWg8ABLM7AQOcShFeCWUrAASzoARzA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AEl3AAAAAgICwABIXQAAAKSGYAO+EwDAAEhwAAAAtFZgA7yIAABgA8AA/yUBPgJOwABIjMAASJoAAMAAWUBgA74TARzAAEiggMAASJzAQZyWwABZGAEAASbAAEivAYfAAEivwEGdsWADwACQYADAAIGbScAASMAhHMAASNIUwABIxMBBndgJAEgBAAErAMAA/3U+AT0cwABJTobAAElIwEGdX4C/AgACFMAASU/AQZ3YCQAUwABJYMBBnb8IAADAAP8GPwDAAP8QPRzAAEmRhcAASYDAQZ0yg/0BAAE0wABJmQPAAEmZwABK6gAAAAICAsAASaAAAACkhmADvl4AwABJswAAALRWYAO8iAAAYAPAAP8lAT4BScAASjUlwABKQIfAAEo5wEGemWADwABt/T4CTsAASmPAAEpvAAC1WmADwACHKwEcwABKg4LAAEpxwEGcs8AAUVABAAEWwABKmRTAAEqSwEGemQcBYAPAAG39g/PAAG4CAMAAhv49HMAASrCGwABKqsBBnV+AvwIAAhbAAEq9FMAASrHAQZ7bCQDAAFanwACHMBTAAErTwEGepwgAAMAA/wY/AMAA/xBKwABK8wGGwABK+sBBnV9PwABLisAAS6gAAAG07WEDAl0DwAD+8QJgA74lYAO8iF0DwAD+8QJgA75eYAO8iF0DwAD+8QJgA74lYAO8iAADwABLuMAAT5YAAAACAgLAAEvgAAAAtKtdA8AA/vECYAO+JWADvIgAwABMCgAAALSsXQPAAP7xAmADvl5gA7yIAABdA8AA/vECYAO+JWADvIgBPgROwABMKMAATC8AAIF2XQPAAP7xAmADviVgA7yIATLAAExLYAO+JWADvIgAPRzAAExfhcAATFXAQZ/Dg/0BAAE0wABMZwPAAExnwABNkQAAAAICAsAATHUAAACkhmADviUAwABMiAAAALRWYAO8iAAAYAPAAP8lAT4CTsAATKXAAEyzAADAAFlAYAO+JQEcwABMuYDAAEy1wEGclsAATpcBAAEmwABMyQEUwABMycBBoFsIAGADwACQZgDAAIGcScAATNohHMAATOwUwABM3sBBoIIKAEgBAAErAMAA/3U+AT0cwABNaIfAAE1iwEGgCYC/AgACFMAATWnAQaCCCgAUwABNesBBoGkJAADAAP8GPwDAAP8QPRzAAE2rhsAATZrAQZ/c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RKHAAETuAAC13gFqwABEimADwAD/aAIAAAEDwABEucAARO4AAAABAQHAAETGAAAAmiZgA74TAABgA8AATgcBPgFKwABE0QEcwABE2C7AAFRSwACEQwEAAYDAAETmwEMA5QDAAIRfBsAAhGqBZ8AARPPAAEULwABFjAAAsFIBasAARPRgA8AA/2gCAAABA8AARSTAAEWMAAAAAQEBwABFMQAAAJomYAO+EwAAYAPAAE4HAT4CPRzAAEVLFsAARTwuuRrAAIRDwACEUrBSAQABJsAARWUBgMAARWXAQwFYYAPAAG1+AMAAb5pKwABFbwEcwABFdi7AAFRSwACEQwEAAYDAAEWEwEMBWADAAIRfBsAAhGuBZ8AARc3AAEXZwABKYwAAwABaXAAAAAEDwABF7cAASmMAAAAAAAAAYAPAAE4HAT4KQCEcwABGIRbAAEYNFsAARf0utR3AAIRDwACESrIhuaFIAQABKwDAAP91wABF/cAARigATsAARkbAAEZUAAC2KGADwABOHgEfwABGWsAATjIAAAAAPRzAAEcxLsAAWlfAAIRDAgACFsAAR1IWwABHQi61HcAAhEPAAIRKsl253oDAAEdfwEMCNADAAIRXPRzAAEdzLsAAWlfAAIRDAgACFsAAR5QWwABHhC61HcAAhEPAAIRKsly53YDAAEehwEMCNADAAIRXScAAR7UWwABHwhbAAEe5LrMEwACEQ8AAhEiCrYE0PgI9HMAASE4uwABaVsAAhEMCAAKAwABIZcBDAjQWwABIfRbAAEh0LsAAVELAAIRDwACES7KfwAB7FADAAIRWPRzAAEiWLsAAWlbAAIRDAgACgMAASK3AQwI0FsAASMUWwABIvC7AAFRCwACEQ8AAhEuyocAAexMAwACEVj9JwABI6RbAAEj2FsAASO0uswTAAIRDwACESIK3gVU+AT0cwABJHS7AAFpWwACEQwIAAoDAAEk0wEMCNBbAAElMFsAASUMuwABUQsAAhEPAAIRLsovAAHtTAMAAhFY/ScAASWUWwABJchbAAElpLrMEwACEQ8AAhEiCuIFWPgE9HMAASYwuwABaVsAAhEMCAAKAwABJo8BDAjQWwABJuxbAAEmyLsAAVELAAIRDwACES8AAVD7AAHtcAMAAhFY/PRzAAEnULsAAWlbAAIRDAgACgMAASevAQwI0FsAASgMW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RXnAQ9ICVgEAARzAAEWchMAARYzAQ9JUIAEAAYXAAEWdwEPTEAAAAMAA/tBOwABFyMAARdgAAITIXQPAAP6/AWADwAEAAgExwABF4mADwAEAAgBOwABF+cAARg0AALUjXQPAAP6/AWADwABjywExwABGGWADwABjywBOwABGPsAARlQAAMAAWFpdA8AA/r8BYAOIkQE1wABGcwAAAQBdA8AA/r8BYAOIkQEcwABGcxbAAEZjgMAARl7AQ9FthMiEyYCtAAAAAMAA/pM1AAAAAQBbARzAAEZ9h8AARnvAQ9RCgK4BAAE0wABGggPAAEaCwABGpAAAAAICAsAARoMAAACB12ADiJEAwABGhgAAAIJOYAOIkQAAYAPAAP4bAUrAAEaMARzAAEaTFsAARo4UwABGjMBD1KYIAIC9iJWCTwEAARbAAEafFMAARp3AQ9S0CQCAvYiVAMABABIAwAD+0ocAwEPUQkbAAEarwABG6sAARscAAACCcGADiJEAh8AARtPAQ9QnPgI9HMAARwKFwABG8sBD09lWAQABFsAARw8UwABHBsBD1RsIAIC9iJUAwAD+0D0cwABHMIbAAEccwEPUAFYBAAEcwABHRITAAEc0wEPSVCABAAEUwABHRcBD1RsIAAAAAMAA/tBOwABHdgAAAKLNXQPAAP6/AWADwABkKABJwABHiRbAAEehFsAAR5KAwABHjcBD0W2ExYTGg7fAAP6iPglOwABHxMAAR9MAAITFXQPAAP6/AWADwABjywExwABH32ADwABjywBGwABH6cAASCXAAEf/AAAAhq5gA4mWABbAAEgVgMAASBDAQ9FthMWExj4BPRzAAEhLFMAASC/AQ9XUCQBWAQABHMAASE8uwABNowEAAR/AAEhfiZUBAAEUwABIdMBD1gMKAAAAwACGBgDAAP7QPRXAAEiUwEPVmAgewABIqMAA/scCAWADwABkKAIWwABI6xbAAEjcgMAASNfAQ9FthMWExmHAAP7vNMAASP0DwABI/cAASSsAAAABAQHAAEkCAAAAJ2ADwAD+GwAAYAPAAGQoAUrAAEkMAR/AAEkQwABkOQEAARTAAEklwEPWtAoAAABPwABJNcAAST4AAAG+/2EDAWADwABjy2ADwABjywADwABJQ8AASZUAAAABAQHAAElNAAAAgpRgA8AAY8sAAGADwABjywE+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IMmAvgEAARzAAJo1HMAAmiSEwACaH8BEIMmWtQEAASdQAMABABZkAQABlADAAP9BAMABABg/TsAAmlTAAJpcAACESGADwACQWgEcwACaXi7AAFrzAgACg8AAmmzARCCEgsAAmnLARCBeAMAAhjxKwACahQEcwACalhbAAJqMLob1wACFt8AATZ0DA2ADwACQWmADwACo9GADwACo4gOEwACan8BEITsfwACarMAAqP8BAAGAwACaucBEH/0ANQAAAAEAYAPAAKjiAYHAAJrIwEQgCyMcwACa04UAwEQhwkgBAAErAAAcwACa2hbAAJrWLpbQwACFtrNzAQABgsAAmujARCBeAMAAqN2FAMBEIcIBYAPAAKjiAMAAkLMGwACGKYFswACa/8AAmwvAAJuEAADAAFhCAAAAAQPAAJsbwACbhAAAAAIBAsAAmyUAAACD82ADgxwAwACbNgAAAMAAWEFgA8AAqQABagBgA8AA/yV5AGADvhMBPgFKwACbRwE1AAAAAQBdA8AA/vECYAODHGADwACQYAEWwACbTi60qsAAhb41AAAAAQBgA4McAYDAAJtXwEQiTDUAAAABAGADwACQYAEcwACbVoLAAJtWwEQihEsBAAGDwACbVsBEIqgAwAD/BSMcwACbXYQAwEQivEgBAAErAMAA/3U1AAAAAQBgA74TASbAAJtWARzAAJthLsAAWvTAAIWeAgACgMAAm3HARCJMgcAAm3fARCJaAMAAhe1gA8AAkGA1AAAAAQBcARzAAJtWgsAAm1bARCKEgL8CAAKDwACbVsBEIqiFAMBEIv8AwAD/BoUAwEQi/4QAwEQivAFgA74TBsAAhe2BbMAAm4nAAJuVwACdkQAAwABa9MAAhZ4AAAABA8AAm6TAAJ2RAAAAAgICwACbrgAAAIPzYAODHADAAJu+AAAAwABYQWADwACpAAAAYAO+EwE+BUAhFsAAm98uwABYLcAAhbzAAJvewACb6gEkAAYnwABa8C4nwABa8SfAAFr1gMAAnDzARCOtJ4FqTsAAnFLAAJxaAACESGADwABtdgEmwACcUgEcwACcXC7AAFg5AQABFsAAnHSAwACcb8BEI62EsoNGAMAAhihgA8AAbXZJwACcixzAAJyYgcAAnI/ARCO7SAEAASsAwAD/dT4BPYnAAJypwEQjuxzAAJzOHMAAnL4WwACctC6G9cAAhbfAAFgZAQABgsAAnMXARCQOAMAAkK6zfQEAARbAAJzfgMAAnNrARCOtgL2DIgDAAKjtP07AAJz9wACdAQAAmiZgA8AAkGABHMAAnQsuwABa9gMAAoLAAJ0XwEQkDhbAAJ0lgMAAnSDARCOtgL2DIgGEHxbAAJ08gMAAnTfARCOthB+DOMAAhj1KwACdTQEcwACdXBbAAJ1ULoSIwACFuMAATZ0DA2ADwACQYGADwACpPGADwACpAAODwACdZcBEJMMfwACdbsAAqVABAAGAwACdfcBEI60AgcAAnYTARCO7AMAAkLMGwACGKoFswACdlsAAnaTAAJ4FAADAAFhOAAAAAQPAAJ22wACeBQAAAAEBAcAAncIAAACD82ADgvcAAGADvhoBPgFKwACdzgE1AAAAAQBdA8AA/vECYAOC92ADwACQegEWwACd1S7AAFgPwACFvzUAAAABAGADgvcBgMAAneDARCWgNQAAAAEAYAPAAJB6ARzAAJ3fgcAAnd/ARCW9SwEAAYLAAJ3fwEQl4wDAAP8FIxzAAJ3mgwDARCX3SAEAASsAwAD/dTUAAAABAGADvhoBJsAAnd8BHMAAneouwABa98AAhZ4BAAGAwACd/MBEJaAAwACF7mADwACQejUAAAABAFwBHMAAnd+BwACd38BEJb2AvwIAAoLAAJ3fwEQl44QAwEQmOgDAAP8GhADARCY6gwDARCX3AWADvhoGwACF7oFswACeCsAAnhjAAKBkAADAAFr3wACFngAAAAEDwACeKcAAoGQAAAABAQHAAJ41AAAAg/NgA4L3AABgA74aAT4FQCEWwACeUi7AAFgtwACFvMAAnlHAAJ5dASQABifAAFrwLifAAFrxJ8AAWviAwACescBEJt8ngWpOwACezcAAntUAAIRIYAPAAJBaASbAAJ7NARzAAJ7XLsAAWDkBAAEWwACe74DAAJ7qwEQm34SygwIAwACGKGADwACQWk7AAJ8VwACfHQAAhplgA8AAkHoBHMAAnx8uwABa+QIAAoHAAJ8twEQnLhbAAJ87gMAAnzbARCbfgL2C+wDAAIY+TsAAn1LAAJ9eAACGlmADwABkBgEfwACfZMAAZBgDAAOCwACfecBEJ3IewACfjsAA/sQCAWADwABjywIWwACfxRbAAJ+2gMAAn7HARCbfhMWC/GHAAP7vasAAn9NgA8AAZETAASB0ACbAAJ/rARzAAJ/rLsAATaMBAAEWwACf/IDAAJ/3wEQm34KUgv0AwACGBmADwABkWQBKwACgCAEcwACgGBbAAKAPLoSHwACFu8AATZ0CAmADwACQemADwACpvAKCwACgKsBEJ3IfwACgN8AAqcIDAAOAwACgRMBEJt+CwACgSsBEJ3KDwACgU8BEJ7MAAMAAkKQGwACGK4FswACgacAAoHzAAKDyAADAAFhHAAAAAQPAAKCTwACg8gAAAAEBAcAAoKUAAACD82ADiZYAAGADvh8BPgFKwACgsQE1AAAAAQBdA8AA/vECYAOJlmADvh8BFsAAoLguwABYEMAAhcA1AAAAAQBgA4mWAYDAAKDIwEQo1jUAAAABAGADvh8BHMAAoMeBwACgx8BEKPNLAQABgsAAoMfARCkXAMAA/wUjHMAAoM6DAMBEKStIAQABKwDAAP91NQAAAAEAYAO+HwEcwACg0i7AAFr6wACFngEAAYDAAKDpwEQo1gDAAIXvNQAAAAEAXAEcwACgx4HAAKDHwEQo84C/AgACgsAAoMfARCkXhADARClsAMAA/waEAMBEKWyDAMBEKSsBYAO+HwbAAIXvgWzAAKD3wAChCsAAp74AAMAAWvrAAIWeAAAAAQPAAKEgwACnvgAAAAEBAcAAoTIAAACD82ADiZYAAGADvh8BPgRAIRbAAKFPLsAAWC3AAIW8wAChTsAAoVoBJAAGJ8AAWvAuJ8AAWvEnwABa+4DAAKG0wEQqBSeBaknAAKHBJcAAodEWwAChyoDAAKHFwEQqBYRXgllgA4McPgNOwACh78AAofMAAJomYAODHAEmwACh7wEWwACh+oDAAKH1wEQqBYRXgllgA4McTsAAogzAAKISAAAnYAPAAP4bARzAAKInFsAAohiBwACiFMBEKnaExYMrgLsBAAGAwACiL8BEKgUAwAD+1ErAAKI8ARzAAKJRFsAAokMuos3AAIW6wABNnQICYAPAAJB1YAPAAKnDAibAAKJlARzAAKJlLsAAWCwDAAMcwACieC7AAFhCAQABgcAAoonARCp2AMAAhikWwACilIDAAKKPwEQqBYC9iZqCwACimsBEKqQAwACGP2ADwACQdR/AAKKwwACpzgEAAYDAAKLCwEQqBQAAwACQpD9JwACi1CXAAKLkFsAAot2AwACi2MBEKgWEV4JZYAOEwT4DTsAAoxDAAKMVAADAAFLxYAOEwQEmwACjEAEWwACjHIDAAKMXwEQqBYRXgllgA4TBTsAAoy7AAKM0AAAnYAPAAP4bARzAAKNKFsAAozuBwACjNsBEK52ExYTGgLsBAAGAwACjUsBEKgUAwAD+1EnAAKNfJcAAo28WwACjaIHAAKNjwEQrnYRXgllgA4PiPgNOwACjm8AAo6cAAJk0YAOD4gEmwACjmwEWwACjroHAAKOpwEQrnYRXgllgA4PiTsAAo8fAAKPLAACaJmADgxwBFsAAo9mDwACjzcBELCyFGYOYSsAAo/EBHMAAo/guwABYRwEAARzAAKQiFsAApBSEwACkEMBELFqExYMrSwEAAYLAAKQjwEQrzQDAAP7OAMAAhitJwACkOSXAAKRJFsAApEKBwACkPcBEK52EV4JZYAOEJT4CTsAApHHAAKR7AACEnWADhCUBJsAApHEBFsAApIKBwACkfcBEK52EV4JZYAOEJUnAAKSSHMAApKUWwACkoIPAAKSWwEQs4YJrhChIAQABasAApLlgA4RlgdEAwAD/dT4CTsAApNfAAKTbAACaJmADgxwBFsAApOeDwACk3cBELOGFGYOYSsAApQEBHMAApQguwABYRwEAARzAAKUyFsAApSSEwAClIMBELUGExYMrSwEAAYLAAKUzwEQrzQDAAP7OAMAAhis+AUrAAKVXARzAAKVsFsAApV4uos3AAIW6wABNnQICYAPAAJB1YAPAAKnDAibAAKWEARzAAKWELsAAWCwDAAMcwAClqi7AAFg3AQABg8AApbzARCzhAMAAhi0WwAClzYDAAKXIwEQqBYC9iZqCwACl08BEK80AwACGP2ADwACQdR/AAKXtwACpzgEAAYDAAKX/wEQqBQAAwACQpEnAAKYeJcAApi4WwACmJ4HAAKYiwEQrnYRXgllgA4dYPgI9HMAAppUuwABa2gEAASbAAKarARbAAKargcAApqbARCudhFeCWWADh1gAwACGNUrAAKa8ARzAAKbSFsAApsMuwABYEMAAhcBLAQABgMAAptPARCoFAMAA/wU+AT0wwACm8R/AAKb7wAD9rQEAASQABCfAAFr8J8AAWv0WwACnU4HAAKdOwEQrnYRXglkngWoAPz0wwACncR/AAKd7wAD9rQEAASTAAKe5AyfAAFr+gMAAp7PARCoFJ4FqAAbAAIYsgWzAAKfDwACn1cAAqEEAAMAAWFAAAAABA8AAp+vAAKhBAAAAAQEBwACn9gAAAIPzYAODkAAAYAO+UgE+AUrAAKgCATUAAAABAF0DwAD+8QJgA4OQYAPAAJBvARbAAKgJLsAAWBHAAIXBNQAAAAEAYAODkAGAwACoGMBEL0o1AAAAAQBgA8AAkG8BHMAAqBeBwACoF8BEL2dLAQABgsAAqBfARC+NAMAA/wUjHMAAqB6DAMBEL6FIAQABKwDAAP91NQAAAAEAYAO+UgEmwACoFwEcwACoIi7AAFr/wACFngEAAYDAAKg4wEQvSgDAAIXwYAPAAJBvNQAAAAEAXAEcwACoF4HAAKgXwEQvZ4C/AgACgsAAqBfARC+NhADARC/kAMAA/waEAMBEL+SDAMBEL6EBYAO+UgbAAIXwgWzAAKhGwACoWMAArjAAAMAAWv/AAIWeAAAAAQPAAKhtwACuMAAAAAEBAcAAqHgAAACD82ADg5AAAGADvlIBPghAIRbAAKiVLsAAWC3AAIW8wAColMAAqKABJAAGJ8AAWvAuJ8AAWvEnwABbAIDAAKj4wEQwiSeBak7AAKkVAAAAwABBl2ADhMEATsAAqTPAAKlCAACFGWADvhMBHMAAqUQuwABYQgEAARbAAKlagMAAqVXARDCJhRmDmADAAIYpTsAAqXTAAKl5AACAvWADwABqSgEcwACpey6ZdQEAARbAAKmIgMAAqYPARDCJgL2DlADAAIYZTsAAqZjAAKmjAACEJGADwAD8VQEWwACpqoDAAKmlwEQwiYQkg6BOwACpzgAAAJk0YAPAAJBvAEnAAKnfJcAAqeiAwACp48BEMIlgA4PiPgI9icAAqgPARDDYFsAAqhcUwACqEsBEMIkAAWADg+KCboPmPY3AAKonwEQxexzAAKo1LsAAWwEFAAOCwACqUcBEMOmDwACqYcBEMR8cwACqcS7AAFrsAgABgcAAqofARDDYAcAAWu0qwACGGwKEJITAAKrKwEQxVYQiFsAAquQUwACq38BEMIkAAWADg+KEIoPswACGQEnAAKr5JcAAqwKAwACq/cBEMIlgA4QlPgM9icAAqxvARDDYFsAAqy8UwACrKsBEMIkAAWADhCWCboQqTsAAq0TAAKtWAADAAFsCYAPAAPxVASIihMAAq1jARDFVABzAAKt6FsAAq3WDwACrcMBEMR+BssAAak5IAQABJ5y6AMABABEAHMAAq7xqwACrnF0DwAD+vwFgA8ABAALAAWSngxwBAAEWwACr1ILAAKvFwEQw6YC9vgEAwAD+jD2NwACr4cBEMXscwACr7y7AAFsDBgADgsAArAjARDDpg8AArBjARDEfHMAArCguwABa7AIAAYHAAKw+wEQw2AHAAFrtKsAAhhsDhCSEwACsgcBEMVWEIhbAAKylFMAArKDARDCJAAFgA4QlhCKEO7QMhsAArNbARDJ1wACGQT4BPTDAAK1GHsAArUy2/QIAAmrAAK1gYAO3D8AAx0IkwACtngMnwABbBIDAAK2XwEQwiSeBagBKwACtqwEcwACtuhbAAK2yLoSUwACFucAATZ0CAmADwACQb2ADwACpkwKFwACt8sBEMXsfwACuA8AAqaYCAAKAwACuGMBEMImBwACuHsBEMNgAAMAAkKQGwACGLYFswACuNcAArkTAAK8SAADAAFg3AAAAAQPAAK5VwACvEgAAAAEBAcAArmMAAACD82ADhCUAAGADvjoBPgFKwACu3gE1AAAAAQBgA8AAkGwBHMAAru4WwACu5S7AAFgSwACFwksBAAGAwACu78BENCsAwAD/BSMcwACu9YEAwEQ0SEgBAAErAAAcwACu+C7AAFsFwACFngEAAYDAAK8JwEQ0KwDAAIXxgQDARDRIAWADvjoGwACF8YFswACvF8AArybAALciAADAAFsFwACFngAAAAEDwACvNsAAtyIAAAABAQHAAK9EAAAAg/NgA4QlAABgA746AT4PQCEWwACvYS7AAFgtwACFvMAAr2DAAK9sASQABifAAFrwLifAAFrxJ8AAWwaAwACvwcBENOYngWpOwACv3QAAAIJuYAO+OgBOwACv+QAAAIRIYAO+BABOwACwEgAAAIUZYAO+EwBJwACwJiEcwACwPhbAALAvgMAAsCrARDTmhRmDmEgBAAErAMAA/3U+Aj2LwACwT8BENVMcwACwYC7AAFhCAQABFsAAsHaAwACwccBENOaFGYOYAMAAhik9isAAsI3ARDVEFsAAsKaDwACwl8BENVOESL4VPgE9isAAsMLARDVEHMAAsMwuwABYOQEAARbAALDkgMAAsN/ARDTmhLKDmQDAAIYoTsAAsQbAALELAACAvWADwABqSgEcwACx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AcAAzZ0AAAiGmWADvhoAAGADgvcBPgFKwADNrAEcwADNsy7AAFrrwACFngEAASbAAM3DAYDAAM3DwEROuWADwACQegDAAIXpBsAAhjeBbMAAzdTAAM3swADP/wAAwABa2AFqwADN1WADwAD/aAIAAAEDwADN+sAAz/8AAAABAQHAAM4PAAAAg/NgA4X7AABgA8AAhY8BPgJJwADOGxzAAM4uFsAAzh8utFnAAIXJst4BAAEcwADOPi6caAEAARbAAM5NgMAAzkjARE84gkmGAgDAAIYAALxAPgFHwADOXxbAAM54FsAAznMWwADObIDAAM5nwERPOIJJhgKAvYOUgL2IygQBwADOmWrAAM6ZYAPAAQACwADxgAA+AUrAAM6nAWrAAM66YAPAAIWPwAFkEgHAAM7XasAAztdgA8ABAALAAPGDAD4BSsAAzu0BasAAzwBgA8AAhY/AAWQrAcAAzyVqwADPJWADwAEAAsAA8YYAPgFKwADPQwFqwADPVmADwACFj8ABZEQBwADPg2rAAM+DYAPAAQACwADxiQA+AUrAAM+mAWrAAM+5YAPAAIWPwAFkXT9KwADP5AFqwADP92ADwACFj8ABZHYGwACGOIFswADQBMAA0B7AANILAADAAFrZAWrAANAFYAPAAP9oAgAAAQPAANBCwADSCwAAAAEBAcAA0FcAAACD82ADhfsAAGADwABj8wE+BEnAANBjIiEcwADQiBbAANCBFsAA0HYWwADQbIDAANBnwERQuluF/oWrhblhwAD+70gBAAGUAMAA/z8BFsAA0K0WwADQpxbAANCdgMAA0JjARFC6W4X+hXWFuoO3wAD+oj4BPRzAANDKFsAA0MEupS7AAIWmr9UCAAJqwADQ3WADtw/AAMecasAA0Q5gA6VlwADNqgC25T9OwADRTcAA0VYAAB9gA4JMARbAANFyFsAA0WcWwADRXYDAANFYwERQuluF/oWrhbmDHsAA/qNJwADRfSIlwADRioHAANGBwERRamADhvMAJcAA0a0WwADRqBTAANGfwERRagEBYAOG84KUhvVgA4k3PgFKwADRygEcwADR0S7AAFCOAQABJsAA0esBFsAA0esUwADR4sBEUWoBAWADhvOClIb1YAOJNwDAAIYJP0rAANH8ASsGwACGOYFswADSRMAA0l/AANPaAADAAE1pAWrAANJFYAPAAP9oAgAAAQPAANJ8wADT2gAAAAQDA8AA0oYAAACEm2ADg68AwADSpAAAAMAAS5RdA8AA/n0BYAPAAQACAMAA0skAAADAAEuVXQPAAP59AWADwAEAAgABwADS6QAAAMAAS5dgA8AA/FUBagBgA8AA/yV5YAPAAGiWAT4CTsAA0wbAANMLAACClGADwABjywEcwADTDS7AAE2jAQABFsAA0x+AwADTGcBEUlWClIOxAMAAhgZKwADTKgEcwADTRxbAANMxLsAAWw7AAIXSwABLmQUABITAANNewERSu4HAANNswERSY4LAANOAwERSfBzAANOULsAAWHgBAAABwABYeSrAAIYfAcAAS5eDwADTysBEUpbAAGjJBsAAhjqBbMAA1BPAANQuwADUzgAAwABNagFqwADUFGADwAD/aAIAAAEDwADUTMAA1M4AAAABAQHAANRWAAAAhJtgA4OvAABgA8AAaJYBPgJOwADUbMAA1HEAAIKUYAPAAGPLARzAANRzLsAATaMBAAEWwADUhYDAANR/wERTjoKUg7EAwACGBkrAANSQARzAANStFsAA1JcuwABbDsAAhdLAAEuaAQABgcAA1MXARFOnAMAAaMoGwACGO4FswADVB8AA1SLAANeLAADAAE1nAWrAANUIYAPAAP9oAgAAAQPAANU8wADXiwAAAAQDA8AA1UcAAACCamADg5AAwADVZgAAAMAAS5RdA8AA/n0BYAPAAQACAMAA1YsAAADAAEuVXQPAAP59AWADwAEAAgABwADVqwAAAMAAS5dgA8AA/FUBagBgA8AA/yV5YAPAAGiWAT4DTsAA1cgAAACClGADwABjywBJwADV0iXAANXdgMAA1dbARFREYAOEJT4BPYzAANX2wERUqhzAANX9LqvrAQABFsAA1hQUwADWDcBEVEQAAWADhCWCboQqAMAAhgpJwADWKiXAANY1gMAA1i7ARFREYAOD4j4BPYzAANZQwERUqhzAANZXLqvrAQABFsAA1m4UwADWZ8BEVEQAAWADg+KCboPmAMAAhgo+AT0ewADWjLb9AgACasAA1pVgA7cPwADHnCTAANbRAyfAAFsTgMAA1snARFREJ4FqAErAANbeARzAANb7FsAA1uUuwABbDsAAhdLAAEubBQAEJsAA1w8BhMAA1w/ARFSqYAPAAGRZgcAA1xXARFRSgsAA1zHARFRrHMAA10UuwABYeAEAAAHAAFh5KsAAhh8BwABLl4PAANd7wERUhcAAaMsGwACGPIFswADXkMAA15/AANf9AADAAFrzAAAAAQPAANeswADX/QAAAAICAsAA17QAAACAvWADwAEAAgDAANe+AAAApYxgA8ABAIMAAGADwACQWgE+AUrAANfSAR/AANfdwABtfQIAAoDAANfmwERWHoHAANfswERWLgAGwACGPYFswADYAsAA2A/AANiaAADAAFr2AAAAAQPAANgawADYmgAAAAMCAsAA2CkAAACESGADvgQAwADYOQAAAIC9YAPAAQACAAHAANhLAAAAhB9gA8AA/FUBagBgA8AA/yV5YAPAAJBgAT4BSsAA2F4BH8AA2GnAAG2IAwACJsAA2HABgMAA2HDARFaZYAPAAG12gcAA2HnARFanAYQfgsAA2IvARFa4BsAAhj6BbMAA2J/AANiuwADZDAAAwABa+QAAAAEDwADYu8AA2QwAAAACAgLAANjKAAAAhEhgA74EAMAA2NoAAACAvWADwAEAAgAAYAPAAJB6AT4BSsAA2OYBH8AA2PHAAG2QAgACJsAA2PoBgMAA2PrARFdCYAPAAG12gcAA2QPARFdQAAbAAIY/gWzAANkRwADZJMAA2a4AAMAAWCwAAAABA8AA2TbAANmuAAAAAwMDwADZRQAAALW2YAO9/wDAANldAAAAgL1gA8ABAAIAwADZZwAAACdgA8AA/hsAAGADvh8BPgFKwADZdAEfwADZf8AAbfwDAAOAwADZjcBEV8eBwADZnsBEV9WCwADZpMBEV+UABsAAhkCBbMAA2bPAANnGwADa5AAAwABbAQAAAAEDwADZ4cAA2uQAAAAFAwPAANnuAAAAhRlgA74TAMAA2gkAAACAvWADwABqSgDAANoiAAAAtblgA75hAALAANpCAAAAhCRgA8AA/FUBagBgA8AA/yV5wADaUwAAAIQiYAPAAPxVAWoAYAPAAP8leWADwACQbwE+AUrAANpjAR/AANpuwABtxQUAAybAANqFAYDAANqFwERYVmADwABtfoHAANqVwERYZILAANqbwERYdAKEJIPAANrDwERYg4QihMAA2tjARFicBsAAhkGBbMAA2unAANr8wADcgwAAwABbAwAAAAEDwADbFMAA3IMAAAAGAwPAANshAAAAhRlg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AERFqQBERjIAREbDAERM6gBEToEARE8AAERQggBEUh0ARFNWAERUDABEVfIARFZtAERXFgBEV5sARFgqAERZDgBEWhYARFtBAERcgwBEXZcARF6rAAAAfALAAIZIgWzAAOHPwADh1cAA/ckDwABbFAAAAWABvEYAAWABvGoBBMAAhkqBbMAA4k3AAOJXCbSzAGADwACFowABBcAAhnOBbMAA4lzAAOJcwADihQAAAAPAAOJ0wADihQAAAAEBAcAA4noAAAS0s2ADwACFowAAYAPAAIZIAT8CCAHAAIZKgADARGEKCQHAAOJcvGkAAAAAJQbAAIZMgWzAAOKKwADio8AA4sUBAJ7SAWrAAOKLYAPAAP9oAgAAAQPAAOKvwADixQAAAAAAAABgA8AAY8sBSsAA4rIBasAA4rhgA8AAZETAASB0BsAAhk2BbMAA4srAAOLowADjDgEAtBABasAA4stgA8AA/2gCAAABA8AA4vTAAOMOAAAAAAAAAGADvgQBSsAA4vcBFsAA4wIWwADi9y60s8AAhkrAAFg4wACFnsAAhcwGwACGToFswADjE8AA4zLAAONaAQClXQFqwADjFGADwAD/aAIAAAEDwADjP8AA41oAAAAAAAAAYAO+OgFKwADjQgEWwADjTRbAAONCLrSzwACGSsAAWDbAAIWewACFywbAAIZPgWzAAONfwADjh8AA47IBAIb1AWrAAONgYAPAAP9oAgAAAQPAAOORwADjsgAAAAAAAABdA8AA/n0BYAO+BAFKwADjlAEWwADjnxbAAOOULrSzwACGSsAAWI/AAIXQBsAAhlGBbMAA47fAAOPKwADkJAAAmbgBasAA47hgA8AA/2gCAAABA8AA49jAAOQkAAAAAQEBwADj5wAAAIRIYAO+BAAAYAPAAQACAT4BSsAA4/YBHMAA5AgWwADj/S60s8AAhkrAAFg9wACFngEAASbAAOQYAYDAAOQYwERi5mADwACQWgDAAIXXBsAAhlKBbMAA5CnAAORDwADkjAAAtBkBasAA5CpgA8AA/2gCAAABA8AA5E7AAOSMAAAAAQEBwADkWwAAAJomYAO+EwAAYAPAAGPzAT4BSsAA5GYBHMAA5HgWwADkbS60s8AAhkq0GQEAASbAAOSEAYDAAOSEwERjcGADwACQYADAAIYOBsAAhlOBbMAA5JHAAOSrwADk8wAAsFQBasAA5JJgA8AA/2gCAAABA8AA5LXAAOTzAAAAAQEBwADkwgAAAJomYAO+EwAAYAPAAGPzAT4BSsAA5M0BHMAA5N8WwADk1C60s8AAhkqzecAAhZ4BAAEmwADk6wGAwADk68BEY/RgA8AAkGAAwACF3AbAAIZUgWzAAOT4wADlCcAA5WMAALQaAWrAAOT5YAPAAP9oAgAAAQPAAOUXwADlYwAAAAEBAcAA5SQAAACaJmADvhMAAGADwAD8VQE+AUrAAOUvARbAAOVVFsAA5UccwADlNi60GQEAAYDAAOVCwERkfADAAIZShTjAAGP2g7fAAP6iBsAAhlWBbMAA5WjAAOV5wADl0QAAhPYBasAA5WlgA8AA/2gCAAABA8AA5YvAAOXRAAAAAQEBwADlmAAAAJomYAO+EwAAYAPAAPxVAT4BSsAA5aMBHMAA5bUWwADlqi60s8AAhkrAAFhjwACFngEAASbAAOXJAYDAAOXJwERk/2ADwACQYADAAIXgBsAAhlaBbMAA5dbAAOXnwADmTQAAtBsBasAA5ddgA8AA/2gCAAABA8AA5gDAAOZNAAAAAQEBwADmDQAAAJomYAO+EwAAYAPAAPxVAT4BSsAA5hgBHMAA5ioWwADmHy60s8AAhkrAAFhkwACFngEAASbAAOZFAYDAAOZFwERliWADwACQYADAAIXhBsAAhleBbMAA5lLAAOZnwADnIgAAtBwBasAA5lNgA8AA/2gCAAABA8AA5nvAAOciAAAAAQEBwADmjwAAAKl6YAO+HwAAYAPAAGPLAT4CScAA5qMlwADmtIDAAOanwERmE2ADwABuCErAAObLARbAAObfFMAA5tLARGYTAAFgA8AAbgiFh8AAbg0/SsAA5uoBHMAA5vwWwADm8S60s8AAhkq0HAEAASbAAOcRAYDAAOcRwERmE2ADwACQdQDAAIYPBsAAhliBbMAA5yfAAOdBwADnwQAAs4EBasAA5yhgA8AA/2gCAAABA8AA51TAAOfBAAAAAgICwADnaAAAAJomYAO+EwDAAOd8AAAAhThdA8AA/r8BYAPAAGPLAABgA8AAY/MBPgFKwADnkQEfwADnnMAAZAUCAAKAwADnqsBEZtOBwADnr8BEZuEABsAAhlmBbMAA58bAAOffwADoPgAAq+sBasAA58dgA8AA/2gCAAABA8AA5+7AAOg+AAAAAQEBwADn/gAAAIJuYAO+OgAAYAPAAGRZAT4BSsAA6A4BHMAA6CAWwADoFS60s8AAhkquNsAAhZ4BAAEmwADoMQGAwADoMcBEZ11gA8AAkGwAwACF3gbAAIZagWzAAOhDwADoZsAA6NcAALQdAWrAAOhEYAPAAP9oAgAAAQPAAOh+wADo1wAAAAEBAcAA6I4AAACCbmADvjoAAF0DwAD+vwFgA8AAZBkBPgFKwADongEcwADosBbAAOilLrSzwACGSsAAWF7AAIWeAQABJsAA6MoBgMAA6MrARGflYAPAAJBsAMAAhd8GwACGW4FswADo3MAA6PHAAOlBAAC0HwFqwADo3WADwAD/aAIAAAEDwADo/cAA6UEAAAABAQHAAOkKAAAAhJtgA743AABgA8AAY8sBPgFKwADpFwEcwADpKRbAAOkeLrSzwACGSsAAWF/AAIWeAQABJsAA6TcBgMAA6TfARGh2YAPAAJByAMAAhd0GwACGXIFswADpRsAA6V/AAOm9AAC0HgFqwADpR2ADwAD/aAIAAAEDwADpc8AA6b0AAAABAQHAAOmNAAAIgm5gA8AAbf0AAGADwABkWQE+AUrAAOmdARbAAOmtgMAA6aTARGkAhVbAAG4DBsAAhl2BbMAA6cLAAOnhwADqTQAAtCQBasAA6cNgA8AA/2gCAAABA8AA6fvAAOpNAAAAAQEBwADqCAAAAISbYAO+NwAAYAPAAE8NAT4BSsAA6hUBHMAA6icWwADqHC60s8AAhkrAAFhrwACFngEAASbAAOpDAYDAAOpDwERpamADwACQcgDAAIXoBsAAhl6BbMAA6lLAAOpnwADqjgAAtCABasAA6lNgA8AA/2gCAAABA8AA6nfAAOqOAAAAAQEBwADqgQAAAIKUYAPAAGPLAABgA8AAY8sBSsAA6ooBgMAA6orARGn0BsAAhl+BbMAA6pPAAOqxwADsVAAAob0BasAA6pRgA8AA/2gCAAABA8AA6sLAAOxUAAAAAwICwADqzwAAAJomYAO+EwDAAOrbAAAAgL1gA8ABAAIAAcAA6u0AAACaemADwAD8VQFqwADq92ADwAD8VQBgA75SAT4DTsAA6xfAAOsjAACZNGADvlIBHMAA6zAWwADrJS60s8AAhkqhvQIAAibAAOtCAYDAAOtCwERqUWADwACQYIHAAOtHwERqXwDAAIX5ScAA61IiHMAA62KDwADrVsBEapRIAQABKwDAAP91AILAAOttwERqcD4BPTDAAOt/HsAA64W2/QIAAmrAAOuZYAO3D8AAx5wkAAgnwABYuIHAAOvRwERqXyfAAFi5FsAA6/WAwADr8cBEalGAvb4BJ4NRJ8AAWLoWwADsIhbAAOwagMAA7BbARGpRhEi+FaWMvgYngWoAP0rAAOw+AYPAAOxFwERqlAbAAIZggWzAAOxZwADscsAA7eYAALOAAWrAAOxaYAPAAP9oAgAAAQPAAOyIwADt5gAAAAQCAsAA7JUAAACaJmADvhMAwADsoQAAAIC9YAPAAQACAALAAOyzAAAAm2RgA8AA/FUBasAA7LtgA8AA/FUAwADsxwAAAJp6YAPAAPxVAWrAAOzRYAPAAPxVAGADviUBPgNOwADs7MAA7PMAAIJqYAO+JQEcwADtCBbAAOz9LrSzwACGSrQSAwACJsAA7RoBgMAA7RrARGu6YAPAAJBggcAA7R/ARGvIAZtkgsAA7S3ARGvZwACF+EnAAO06IhzAAO1FhMAA7T7ARGwZSAEAASsAwAD/dQCDwADtUMBEa/U+AT0wwADtYh7AAO1otv0CAAJqwADtcWADtw/AAMecJMAA7cgFJ8AAWLuBwADtpMBEa8gnwABYvBbAAO3BgMAA7b3ARGu6gL2+ASeBagA/SsAA7dUBhMAA7dzARGwZBsAAhmGBbMAA7evAAO4DwADvtwAAtBMBasAA7exgA8AA/2gCAAABA8AA7hDAAO+3AAAAAgEBwADuHQAAAJomYAO+EwABwADuLgAAALQXYAPAAPxVAWrAAO5MYAPAAPxVAGADvhMBPgRAHMAA7mwWwADuYS60s8AAhkrAAFg+AQABgMAA7njARG0qAMAAhi/AAO5hwADufABOwADuj8AA7poAAITzYAO+EwE1AAAAAQBgA8AAY/MBHMAA7qcWwADunC60s8AAhkrAAFhEAQABJsAA7rQBgMAA7rTARG0qYAPAAJBgAMAAhf0jHMAA7rqCAMBEbZ9IAQABKwAAKxbAAO66ggDARG2flnvAAGP1AWADvhNJwADux4HAAO7LwERtOT4BQ8AA7vEiIRzAAO8DgsAA7vjARG2NSAEAASsAwAD/dQAcwADvIxbAAO8YLrSzwACGSsAAWGTAAIWeAQABJsAA7z4BgsAA7z7ARG2NYAPAAJBgAMAAheE+AT2KwADvVcBEbY01AAAAAQBgA8AAY/MBHMAA720WwADvYi60s8AAhkrAAFhEAQABJsAA73oBgsAA73rARG2NYAPAAJBgAMAAhf0jHMAA74eDAMBEbnpIAQABKwAAKxbAAO+HgwDARG56lnvAAGP1AWADvhM/SsAA76IBgsAA76nARG2NBsAAhmKBbMAA77zAAO/NwADwPgAAtBgBasAA771gA8AA/2gCAAABA8AA793AAPA+AAAAAgICwADv6gAAAJomYAO+EwDAAO/0AAAAgaZhAwFgA8AAY/NcAABcAT4BPRzAAPAhFsAA8BYutLPAAIZKwABYZsAAhZ4CAAImwADwMwGAwADwM8BEbyhgA8AAkGCBwADwOMBEbzYAwACF4gbAAIZjgWzAAPBDwADwVMAA8LcAALQjAWrAAPBEYAPAAP9oAgAAAQPAAPBgwADwtwAAAAICAsAA8G0AAACaJmADvhMAwADwdwAAAIGmYQMBYAO+E1wAAFwBPgE9HMAA8J4WwADwky60s8AAhkrAAFrpwACFngIAAibAAPCsAYDAAPCswERvxWADwACQYIHAAPCxwERv0wDAAIXjBsAAhmSBbMAA8LzAAPDNwADxSAAAtBQBasAA8L1gA8AA/2gCAAABA8AA8OTAAPFIAAAAAgICwADw8QAAAJomYAO+EwDAAPD7AAAAgaZhAwFgA74lXAAAXAE+AT0cwADxJBbAAPEZLrSzwACGSsAAWGjAAIWeAgACJsAA8T0BgMAA8T3ARHBgYAPAAJBggcAA8ULARHBuAMAAheUGwACGZYFswADxTcAA8V7AAPHsAAC0FQFqwADxTmADwAD/aAIAAAEDwADxcMAA8ewAAAACAgLAAPGEAAAAmiZgA74TAMAA8Y4AAACBpmEDAmADvhNgA74lXAAAXAE+AT0cwADxzRbAAPHCLrSzwACGSsAAWGnAAIWeAgACJsAA8eEBgMAA8eHARHD7YAPAAJBggcAA8ebARHEJAMAAheYGwACGZoFswADx8cAA8gLAAPKEAAC0FgFqwADx8mADwAD/aAIAAAEDwADyFMAA8oQAAAACAgLAAPIoAAAAmiZgA74TAMAA8jIAAACBpmEDAWADvlJcAABcAT4BPRzAAPJlFsAA8loutLPAAIZKwABYZ8AAhZ4CAAImwADyeQGAwADyecBEcZpgA8AAkGCBwADyfsBEcagAwACF5AbAAIZngWzAAPKJwADymsAA8yAAALQRAWrAAPKKYAPAAP9oAgAAAQPAAPKuwADzIAAAAAICAsAA8sQAAACESGADvgQAwADy0gAAAIGmYQMBYAO+JVwAAFwBPgE9HMAA8vsWwADy8C60s8AAhkrAAFhAwACFngIAAibAAPMRAYDAAPMRwERyNWADwACQWoHAAPMawERyQwDAAIXYBsAAhmiBbMAA8yXAAPM+wAD0xQAAs34BasAA8yZgA8AA/2gCAAABA8AA81HAAPTFAAAABAICwADzYAAAAIRIYAO+BADAAPNwAAAAgL1gA8ABAAIAAsAA84IAAACbZGADwAD8VQFqwADzimADwAD8VQDAAPOWAAAAmnpgA8AA/FUBasAA86BgA8AA/FUAYAO+JQE+A07AAPO7wADzwgAAgmpgA74lARzAAPPXFsAA88wutLPAAIZKs34DAAImwADz6wGAwADz68BEctBgA8AAkFqBwADz9MBEct4Bm2SCwAD0AsBEcu/AAIX1ScAA9A8iHMAA9BqEwAD0E8BEcy9IAQABKwDAAP91AIPAAPQlwERzCz4BPR7AAPQ3tv0CAAJqwAD0QGADtw/AAMecJMAA9KcFJ8AAWLuBwAD0dMBEct4nwABYvRbAAPSfgMAA9JfARHLQgL2+ASeBSwA/SsAA9LQBhMAA9LvARHMvBsAAhmmBbMAA9MrAAPTiwAD2IQAAs30BasAA9MtgA8AA/2gCAAABA8AA9O3AAPYhAAAAAwICwAD0/AAAAIRIYAO+BADAAPUMAAAAgL1gA8ABAAIAAcAA9R4AAACaemADwAD8VQFqwAD1KGADwAD8VQBgA74TAT4DTsAA9ULAAPVGAACaJmADvhMBHMAA9VMWwAD1SC60s8AAhkqzfQIAAibAAPVfAYDAAPVfwER0O2ADwACQWoHAAPVowER0SQDAAIX2ScAA9XMiHMAA9XuDwAD1d8BEdH5IAQABKwDAAP91AILAAPWGwER0Wj4BPR7AAPWYtv0CAAJqwAD1oWADtw/AAMecJMAA9gYFJ5J5gcAA9dPARHRJJ8AAWL4WwAD1/oDAAPX2wER0O4C9vgEngUsAP0rAAPYTAYPAAPYawER0fgbAAIZqgWzAAPYmwAD2N8AA9qIAAKVaAWrAAPYnYAPAAP9oAgAAAQPAAPZDwAD2ogAAAAICAsAA9lIAAACESGADvgQAwAD2YAAAAIGmYQMBYAO+E1wAAFwBPgE9HMAA9oUWwAD2ei60s8AAhkrAAFhDwACFngIAAibAAPaTAYDAAPaTwER1fWADwACQWoHAAPacwER1iwDAAIXZBsAAhmuBbMAA9qfAAPbBwAD3wAAAs3MBasAA9qhgA8AA/2gCAAABA8AA9s7AAPfAAAAAAgEBwAD20wAAAICsYAPAAQCDAAHAAPbeAAAAmnpgA8AA/FUBasAA9uhgA8AA/FUAYAO+BAE+A07AAPcEwAD3DAAAhEhgA74EARzAAPcZFsAA9w4utLPAAIZKs3MBAAGAwAD3J8BEdhgAwACF1UnAAPcxIhzAAPc9gsAA9zXARHZNSAEAASsAwAD/dQCBwAD3SMBEdik+AT0ewAD3Wrb9AgACasAA92NgA7cPwADHnCTAAPehAyeUZ4DAAPeNwER2GCfAAFi/AD9KwAD3rgGCwAD3tcBEdk0GwACGbIFswAD3xcAA99bAAPi4AAC0JQFqwAD3xmADwAD/aAIAAAEDwAD38cAA+LgAAAABAQHAAPf/AAAAgmpgA74lAABgA8AA/FUBPgFKwAD4qAEqBsAAhm2BbMAA+L3AAPjhwAD5vQAAtCcBasAA+L5gA8AA/2gCAAABA8AA+PPAAPm9AAAAAQEBwAD5DQAACIRIYAPAAJBaAABdA8AA/n0BYAPAAGI4AT4DQBzAAPkuFsAA+SMutLPAAIZKwABYPgEAAYDAAPk6wER3dwDAAIYvwAD5I8AA+UIATsAA+VbAAPliAADAAEY9YAPAAKj0ARzAAPl5FsAA+W8WwAD5ZC60s8AAhkqG9cAAhbfAAE2hAQABgMAA+YHARHd3AMAAkJ5KwAD5jwEcwAD5ooHAAPmWwER3ycAAWIkBAAEWwAD5ri60s8AAhkoAwACo+wbAAIZugWzAAPnCwAD55cAA+rgAALQmAWrAAPnDYAPAAP9oAgAAAQPAAPnvwAD6uAAAAAEBAcAA+gkAAAiESGADwACQWgAAXQPAAP59AWADvgkBPgNAHMAA+ioWwAD6Hy60s8AAhkrAAFg+AQABgMAA+jbARHhxAMAAhi/AAPofwAD6PgBOwAD6UsAA+l4AAMAARj1gA8AAqPQBHMAA+nUWwAD6axbAAPpgLrSzwACGSob1wACFt8AATaEBAAGAwAD6fcBEeHEAwACQnkrAAPqLARzAAPqegcAA+pLARHjBtCYBAAEWwAD6qS60s8AAhkoAwACo/AbAAIZvgWzAAPq9wAD64cAA+6UAALQoAWrAAPq+YAPAAP9oAgAAAQPAAPrxwAD7pQAAAAEBAcAA+wkAAAiaJmADwACQYAAAXQPAAP59AWADwABiOAE+A0AcwAD7JhbAAPsbLrSzwACGSsAAWD4BAAGAwAD7MsBEeWcAwACGL8AA+xvAAPs2AE7AAPtIwAD7UgAAwABGPmADwACpKwEcwAD7ZxbAAPtfFsAA+1QutLPAAIZKhIjAAIW4wABNoQEAAYDAAPtvwER5ZwDAAJCeSsAA+3kBHMAA+4qBwAD7gMBEebnAAFiJAQABFsAA+5YutLPAAIZKAMAAqTgGwACGcIFswAD7qsAA+87AAP0JAAC0KQFqwAD7q2ADwAD/aAIAAAEDwAD738AA/QkAAAACAQHAAPv4AAAIgmpgA8AAkGYAAcAA/AwAAAC0KmADwAD8VQFqwAD8JmADwAD8VQBdA8AA/n0BYAPAAGI4AT4DQBzAAPyBFsAA/HYutLPAAIZKwABYPgEAAYDAAPyNwER6YQDAAIYvwAD8dsAA/JQATsAA/KfAAPyyAADAAEXCYAPAAKlRARzAAPzHFsAA/L8WwAD8tC60s8AAhkqElMAAhbnAAE2hAQABgMAA/M/ARHphAMAAkJ5KwAD83AEcwAD87oLAAPzjwER6z8AAWIkBAAEWwAD8+i60s8AAhkoAwACpWAbAAIZxgWzAAP0OwAD9H8AA/ccAALQhAWrAAP0PYAPAAP9oAgAAAQPAAP0qwAD9xwAAAAEBAcAA/TcAAACaJmADvhMAAGADwAD8VQE+A0AcwAD9VBbAAP1JLrSzwACGSsAAWD4BAAGAwAD9YMBEe3cAwACGL8AA/UnAAP1kAE7AAP12wAD9gAAAwABGPmADwACpKwEcwAD9lRbAAP2NFsAA/YIutLPAAIZKhIjAAIW4wABNoQEAASbAAP2dAYDAAP2dwER7d2ADwACQYADAAJCeSsAA/acBFsAA/biBwAD9rsBEe8C0IcAAqTUAAERhPQBEYZAARGHvAERiTgBEYrAARGM6AERjvgBEZEYARGTJAERlUwBEZd0ARGadAERnJwBEZ68ARGhAAERoygBEaTQARGm+AERqGwBEa4QARGz0AERu8gBEb48ARHAqAERwxQBEcWQARHH/AERymgBEdAUARHVHAER14gBEduwARHdBAER4OwBEeTEARHorAER7QQBEfCwAAAAlAsAAhnSBbMAA/f3AAP4DwAEAEgPAAFsVAAABYAHAAGi5AAAFBMAAhnaBbMAA/lrAAP5sCaVZAWrAAP42YAPAAP9oAmADvEYABMAAhneBbMAA/pHAAP6fCbRZAWrAAP5xYAPAAP9oAmADuYcABMAAhniBbMAA/sjAAP7QCaUuAWrAAP6kYAPAAP9oAmADtt0ABMAAhnmBbMAA/vbAAP8FCbLgAWrAAP7VYAPAAP9oAmADwABsEgAEwACGe4FswAD/H8AA/ycJswTAAIWeAGADgRQAAQXAAIZ/gWzAAP8swAD/LMAA/6kAAAADwAD/QcAA/6kAAAAFBQXAAP9HAAAEpVlgA7xGAMAA/2AAAAS0WWADuYcAwAD/ewAABLLgYAPAAGwSAMAA/5EAAASlLmADtt0AwAD/oAAABLMEYAOBFAAAYAPAAIZ0AT8GCAHAAIZ2gADARH3BCAHAAIZ3gQDARH3PCAHAAIZ5ggDARH3dCAHAAIZ4gwDARH3tCAHAAIZ7hADARH37CQHAAP8swABozQAAAAABBsAAhn2BbMAA/67AAP/DwAEAEAEAgs4BasAA/69gA8AA/2gCAAABA8AA/+HAAQAQAAAAAAAAAGADwAD8VQFKwAD/6gEWwAD/8xbAAP/qLrMEwACFnsAAhnuCzoFDAABEfl4ARH67AAAAAQLAAIaAgWzAAQCXwAEAncABA1oDwABbFgAAAWABwAD/aAABYAHAAKfUAwTAAIaDgWzAAQD3wAEBAgm4tMAAhZ4AYAPAAIWjAATAAIaEgWzAAQEYwAEBJAnAAFNBwACFngBgA6XqAATAAIaFgWzAAQFQwAEBhxjAAFjCwACFngBdA8AA/vECYAPAAE8NYAPAAGI4ATLAAQGFYAPAAE8NYAPAAGI4AAEFwACGioFswAEBjMABAYzAAQHKAAAAA8ABAaXAAQHKAAAAAgICwAEBqwAABLi0YAPAAIWjAMABAb0AAATAAFNBYAOl6gAAYAPAAIaAAT8DCAHAAIaDgADARH+TCAHAAIaEgQDARH+jCQHAAQGMwAD/fgAAAAABBsAAhoiBbMABAc/AAQHdwAEDWAAAwABYXMAAhZ4AAAABA8ABAe7AAQNYAAAABAICwAECAAAAAKWvYAO3DwDAAQIeAAAAgm9gA8AATw0AAsABAjYAAADAAFhdYAPAAPxVAWoAYAPAAP8lecABAk0AAAC9y2ADwAD8VQFqwAECWWADwAD8VXdgA8AAYjgBPgFKwAECZgEcwAECdxbAAQJtLsAAWMLAAIWewACGhZl2AgACgcABAoPARIAiNMABAo8DwAECj8ABA1MAAAAAAAAAYAPAAGI4AT4BSsABApoBHMABAqyBwAECocBEgCKfTgEAAR/AAQK5wACGnQUAAxbAAQLgLri0wACFnsAAhoMWwAEC7S7AAFNBwACFnsAAhoSAwAEC+8BEgBQCwABYXYLAAQMiwESAM73Lg8ABA0DARIBOAMAATxoAwAD/DAAARH/kAESBLwAAAAECwACGi4FswAEDyMABA87AAQkdA8AAWxcAAAFgAcAAiq0AAAMEwACGjoFswAEELcABBDgJuLTAAIWeAGADwACFowAEwACGj4FswAEETsABBFoJwABTQcAAhZ4AYAOl6gAEwACGkIFswAEEdcABBH8JvcsBasABBF9gA8AA/2gCYAPAAPxVAAEFwACGnYFswAEEhMABBITAAQVTAAAAA8ABBJ/AAQVTAAAABQMDwAEErAAABLi0YAPAAIWjAMABBL4AAATAAFNBYAOl6gDAAQTWAAAApa9gA7cPAALAAQTtAAAAwABYXWADwAD8VQFqAGADwAD/JXnAAQUEAAAEvctgA8AA/FUBasABBRBgA8AA/FV3YAPAAIaLAT8ECAHAAIaOgADARIHoCAHAAIaPgQDARIH4CAHAAIaQhADARIIyCQDAAQUfwACKwQIAAYLAAQUlwESCCAHAAFhdg8ABBULARIIXCQbAAIaSgWzAAQVYwAEFd8ABBaMBALRZAWrAAQVZYAPAAP9oAgAAAQPAAQWGwAEFowAAAAAAAABgA7mHAUrAAQWJARbAAQWVFsABBYkuuLTAAIWewACGjrRZwACFyQbAAIaTgWzAAQWowAEFwsABBdwBAIWFAWrAAQWpYAPAAP9oAgAAAQPAAQXIwAEF3AAAAAAAAABgA8AAZUQBSsABBcsBFsABBdcWwAEFyy64tMAAhZ7AAIaOhYXAAIXHBsAAhpeBbMABBeHAAQX2wAEGYwAAwABH0wFqwAEF4mADwAD/aAIAAAEDwAEGBMABBmMAAAACAgLAAQYOAAAIlqxgA8AAY8sAwAEGIgAACIJJYAPAAGPzAABgA8AAY8sBPgFKwAEGMAEcwAEGQxbAAQY3Lri0wACFnsAAho7AAEfTAgACgMABBlLARIOUgcABBljARIOkAMAAhgwGwACGmIFswAEGaMABBojAAQb/AAC9tAFqwAEGaWADwAD/aAIAAAEDwAEGnsABBv8AAAABAQHAAQaxAAAImTRgA75SAABgA8AAiksBPgFKwAEGxAEcwAEG1xbAAQbLLri0wACFnsAAho7AAFhqwACFngEAASbAAQbvAYDAAQbvwESELWADwACQbwDAAIXnBsAAhpmBbMABBwTAAQcjwAEHhgAAvdIBasABBwVgA8AA/2gCAAABA8ABBzPAAQeGAAAAAQEBwAEHQAAACISbYAO+NwAAYAPAAE8NAT4BSsABB00BHMABB2AWwAEHVC64tMAAhZ7AAIaOwABYa8AAhZ4BAAEmwAEHfAGAwAEHfMBEhLtgA8AAkHIAwACF6AbAAIaagWzAAQeLwAEHqsABCBkAAL3WAWrAAQeMYAPAAP9oAgAAAQPAAQe6wAEIGQAAAAEBAcABB8EAAAifM2ADvl4AAGADwABPDQE+AT0wwAEHzh/AAQfYwAD9tAEAASfAAFjEAAbAAIabgWzAAQgewAEIMcABCH0AAL4nAWrAAQgfYAPAAP9oAgAAAQPAAQhEwAEIfQAAAAEBAcABCEwAAACAvWADwAEAAgAAYAPAAQACAT4BSsABCFgBHMABCGwWwAEIXy7AAFNBwACFnsAAho+XDAEAAYDAAQh0wESFrwCl7AbAAIaUgWzAAQiCwAEIpcABCMUBAKUuAWrAAQiDYAPAAP9oAgAAAQPAAQiuwAEIxQAAAAAAAABgA7bdAUrAAQixARbAAQi9FsABCLEuuLTAAIWewACGjqUuwACFpgbAAIaVgWzAAQjKwAEI38ABCRsBAL4xAWrAAQjLYAPAAP9oAgAAAQPAAQjwwAEJGwAAAAAAAABgA8AA/FUBSsABCPMBFsABCQcWwAEI/xbAAQjzLri0wACFnsAAho56wACFpYL+gTwAAESCoABEgv0ARINcAESD9wBEhIUARIUTAESFeQBEhfcARIZUAESGuwAAAAkCwACGnoFswAEJIMABCSbAAS2mA8AAWxgAAAFgAcAA/2gAAWABwACFGQQEwACGoYFswAEJecABCbAFwABHnMAAhZ4AYAPAAP+SAR7AAQmLwAD/qwEAASfAAFsZAATAAIaigWzAAQnSwAEJ3Qm4tMAAhZ4AYAPAAIWjAATAAIajgWzAAQn3wAEKBwm5EMAAhZ4AYAPAAGwSAATAAIakgWzAAQojwAEKNQm5FsAAhZ4AYAPAAGxDAAEFwACGuIFswAEKOsABCjrAAQqdAAAAA8ABClTAAQqdAAAAAwMDwAEKYQAABLi0YAPAAIWjAMABCnMAAAS5EGADwABsEgDAAQqKAAAEuRZgA8AAbEMAAGADwACGngE/BAgBwACGooAAwESHxAgBwACGo4EAwESH1AgBwACGpIIAwESH5AkBwAEKOsAA/34AAAAADgbAAIangWzAAQqiwAEKusABCu8BALBOwACFngAAAAEDwAEKzsABCu8AAAAAAAAAYAO8agFKwAEK0QEWwAEK3RbAAQrRLri0wACFnsAAhqKlWcAAhcgGwACGqIFswAEK9MABCwfAAQs0AQC1HcAAhZ4AAAABA8ABCxfAAQs0AAAAAAAAAGADuYcBSsABCxoBFsABCyYWwAELGi64tMAAhZ7AAIaitFnAAIXJBsAAhqqBbMABCznAAQtKwAEP+QAAuTsBasABCzpgA8AA/2gCAAABA8ABC13AAQ/5AAAAAgICwAELaAAAAIPzYAODkADAAQt/AAAAwABavGADwACB8wAAXAE+Ak7AAQuawAELpgAAwABLl2ADwAD8VQEcwAELqC7AAE1ZwACFngEAAYDAAQu7wESJEQDAAIa2ScABC8YiJcABC8+AwAELysBEiRFgA4QlASXAAQvngMABC+LARIkRYAOD4j4DTsABDBHAAQwYAACWnGADvjoBJsABDBEBHMABDCYWwAEMGi64tMAAhZ7AAIainGgBAAGAwAEMMMBEiREAwACGAGADvjpOwAEMQsABDEsAAIZlYAPAAPxVARzAAQxNLsAAWxrAAIWeAgACgMABDGfARIkRgcABDG3ARIkfAMAAhq1JwAEMhCKEwAEMiMBEid0BgsABDJTARIk3PgJOwAEMusABDMMAALA3YAPAAGiWARzAAQzFLsAAWxvAAIWeAwACJsABDO8Bg8ABDO/ARImZYAPAAG2sgcABDPfARIkfAcAAS5eCwAENIMBEiTfAAIa0PRzAAQ1JFsABDTYuuRbAAIWewACGpMAATTsCAAKDwAENYcBEiZmFwAENacBEijQAwABsRT9JwAENhyXAAQ2QgMABDYvARIkRYAODrz4DTsABDbHAAQ23AACEm2ADvjcBJsABDbEBHMABDcUWwAENuS64tMAAhZ7AAIainGgBAAEUwAENz8BEiREAAWADg68AwACGAGADvjdOwAEN4cABDeoAAIZlYAPAAPxVARzAAQ3sLsAAWxzAAIWeAgACFMABDgXARIkRAAFgA4OvgcABDgvARIkfAMAAhqxJwAEOIiKEwAEOJsBEiyEBgsABDjLARIk3PgROwAEOWMABDmoAAMAAWx1gA8AAaJYBHMABDmwuwABbHsAAhZ4DAAImwAEOmQGDwAEOmcBEitdgA8AAbeqBwAEOoMBEiR8BwABLl4LAAQ7JwESJN8AAhrNOwAEO7sABDwEAAMAAWx9gA8AAaJYBHMABDw8uwABbIMAAhZ4BAAEmwAEPMAGDwAEPMMBEitdgA8AAbeoAwACGsj0cwAEPUxbAAQ9ALrkWwACFnsAAhqTAAE08AgACg8ABD27ARIrXhcABD3XARIt+AMAAbEY9HMABD6QWwAEPkS65FsAAhZ7AAIakwABNPQIAAoPAAQ/NwESK14bAAQ/UwESL1QDAAGxHPz8GwACGrIFswAEQg8ABEIjAARPaAADAAFscwACFngAAAAEDwAEQoMABE9oAAAACAgLAARCxAAAAg/NgA4OvAMABEMgAAADAAFq8YAPAAIHzAABgA8AA/FUBPgJJwAEQ3iIWwAEQ54DAARDiwESMr4Ucg8gAHMABESEWwAERAy65EMAAhZ7AAIajtA8BAAEcwAEROxbAAREvLri0wACFnsAAhqKcbwEAARbAARFJgMABEUTARIyvhRmDmADAAIX8AMAAbBo+Aj0cwAESbi7AAFshwACFngIAAoDAARJ9wESMr4HAARKDwESMvQDAAIauSsABEpoBKT4CTsABEsHAARLGAACAvWADwAEAAgEcwAESyC7AAFsiwACFngIAAoDAARLiwESMr4HAARLowESMvQDAAIaxScABEv8hHMABEwiCwAETA8BEjXdIAQABKwDAAQARPgE9HsABExu2/QIAAh7AARMxwACeNQEAAYDAARNPwESMrwAkAAMnwABbI4DAAROvwESMryeBagA/SsABE8oBKgbAAIatgWzAARRlwAEUasABFxQAAMAAWxrAAIWeAAAAAQPAARSDwAEXFAAAAAICAsABFJUAAACD82ADg5AAwAEUrAAAAMAAWrxgA8AAgfMAAGADwAD8VQE+AknAARTCHMABFMYuwABbJMAAhZ4CAAKAwAEU1sBEjkCBwAEU3MBEjk4AwACGtT4CScABFPUiIRzAARUNFsABFP6AwAEU+cBEjkCFGYOYSAEAASsAwAD/dQAhFsABFR6AwAEVGcBEjkCFHIOfPgJJwAEVOiEcwAEVXRbAARU/LrkQwACFnsAAhqO0DwEAARzAARV3FsABFWsuuLTAAIWewACGopxvAQABFsABFYWAwAEVgMBEjkCFGYOYAMAAhfwAwABsGj4CPRzAARW4FsABFa8WwAEVoy64tMAAhZ7AAIaipS7AAIWmr9UCAAIewAEV2sAAnjUBAAGAwAEV+MBEjkAAasABFhlgA6VlwADMCAC25UrAARZNASo/PRzAARZtLsAAWyXAAIWeAgACgMABFovARI5AgcABFpHARI5OAMAAhq8+AT0cwAEWuS7AAFshwACFngIAAoDAARbIwESOQIHAARbOwESOTgDAAIauSsABFu0BKT9KwAEXBAEqBsAAhq6BbMABF4PAAReIwAEYewAAwABbIcAAhZ4AAAABA8ABF5bAARh7AAAAAgICwAEXoQAAAIPzYAODkADAARe4AAAAwABavGADwACB8wAAXAE+A07AARfVwAEX2gAAgL1gA8ABAAIBHMABF9wuwABbIsAAhZ4CAAKAwAEX9sBEkBaBwAEX/MBEkCQAwACGsT0jHMABGBaCwAEYEcBEkDxIAQABKwDAAQARisABGBHARJA8FsABGCQWwAEYH4DAARgawESQFoC9g5SAvYjKKwFgA8ABAAI9HMABGEEWwAEYLi65FsAAhZ7AAIakwABNPgIAAhzAARhhFsABGFUuuLTAAIWewACGopxoAQABgMABGGvARJAWAMAAhgCCwAEYcsBEkDwAwABsSAbAAIavgWzAARqDwAEaiMABHaYAAMAAWyXAAIWeAAAAAQPAARqlwAEdpgAAAAICAsABGrcAAACD82ADg5AAwAEazgAAAMAAWrxgA8AAgfMAAFwBPgNOwAEa68ABGvAAAIC9YAPAAQACARzAARryLsAAWyLAAIWeAgACgMABGwzARJFAgcABGxLARJFOAMAAhrE9IxzAARssgsABGyfARJFmSAEAASsAwAEAEYrAARsnwESRZhbAARs6FsABGzWAwAEbMMBEkUCAvYOUgL2IyisBYAPAAQACScABG0QcwAEbSC7AAFsmwACFngEAAYLAARtWwESRZgDAAIawPgROwAEbccABG3UAAJomYAO+EwEcwAEbgxbAARt3Lri0wACFnsAAhqKcbwEAARbAARuRgMABG4zARJFAhRmDmADAAIX8TsABG7XAARvBAADAAFsnXQPAAP6/AWADwAEAAgEcwAEb1BbAARvDLrkQwACFnsAAhqPAAE0jAQABg8ABG+nARJIOAMAAbBtJwAEb9SEcwAEcDBbAARwFhMABG/nARJJRYcAA/u9IAQABlADAAP8/PgE9HsABHBy2/QIAAh7AARwywACeNQEAAYDAARxQwESRQAAkAAMnwABbKCfAAFsphMABHLjARJJRAD89HMABHOgWwAEc1S65FsAAhZ7AAIakwABNPgIAAhzAAR0TFsABHQcuuLTAAIWewACGopxoAQABgMABHR3ARJFAAMAAhgAkwAEdPQMcwAEdMoTAAR0nwESSUUsBAAGTAMAA/s4ngWqCwAEdOMBEkWYAwABsSD4BPRzAAR1mFsABHVMuuRbAAIWewACGpMAATT4CAAIcwAEdhhbAAR16Lri0wACFnsAAhqKcaAEAAYDAAR2QwESRQADAAIYAgsABHZfARJFmAMAAbEgGwACGsIFswAEdq8ABHbDAAR3iAADAAFsmwACFngAAAAEDwAEdvcABHeIAAAABAQHAAR3FAAAAiHtgA8ABAAIAAGADwAD8VQFKwAEdywEcwAEd1xrAAR3LwACGoarYAQABgMABHeDARJPzAMAA/58GwACGsYFswAEeRsABHk3AASEvAADAAFsiwACFngAAAAEDwAEeZsABIS8AAAACAgLAAR54AAAAg/NgA4OQAMABHo8AAADAAFq8YAPAAIHzAABgA8ABAAIBPgNOwAEerAAAAMAASTtgA8ABAAIAScABHrghHMABHsuBwAEevMBElHBIAQABKwDAAP91PgE9isABHtzARJSNHMABHvSBwAEe5cBElHDAAFlyAQABgMABHwjARJRiAMAAggM+Ak7AAR8twAEfOAAAlwJgA7b/AR7AAR86wACeNQEAAYDAAR9YwESUYgBGwAEfZcABH9DAAR94AAAAgJZgA8AAYjgAHMABH6AWwAEfgS6wTsAAhZ7AAIantCkBAAEcwAEfvhbAAR+yLri0wACFnsAAhqKcaAEAAYDAAR/IwESUYgDAAIYAALxyPgJOwAEf4cABH+YAAIC9YAPAAQACAR7AAR/owACFGAMAA4PAASAIwESU74TAASAUwESVHxbAASArFsABIBsutR3AAIWewACGqLJ/uf4AScABIEscwAEgVoLAASBPwESUjUgBAAErAMABABE+AT2KwAEga8BElI2FwAEgdMBElXdJwAEgiSEcwAEgkoXAASCNwESVd0gBAAErAMABABE+AT0ewAEgp7b9AgACg8ABIL/ARJTvJMABIP8CJ8AAWyocwAEg8YTAASDrwESVH6c1AAAAAMAAYlgAP0rAASEeAYLAASElwESUjQbAAIaygWzAASE0wAEhQ8ABIfMAAMAAWyDAAIWeAAAAAQPAASFjwAEh8wAAAAEBAcABIXUAAAiEm2ADwABt6gAAYAPAAGiWAT4CTsABIYvAASGQAACD82ADg68BJsABIYsBHMABIZ4WwAEhki64tMAAhZ7AAIaiuToBAAGAwAEhrMBElowAwACGFmADg69KwAEhuAEcwAEhyxbAASG/Lri0wACFnsAAhqLAAE1qAQABgcABIerARJanAMAAhjoGwACGs4FswAEh+MABIgfAASWkAADAAFsewACFngAAAAEDwAEiJsABJaQAAAADAgLAASI1AAAAhJtgA8AAbeoAwAEiTQAAAMAAWrxgA8AAgfMAAcABImkAAADAAEuXYAPAAPxVAWoAYAPAAP8leWADwABolgE+BU7AASKGwAEiiwAAg/NgA4OvASbAASKGARzAASKZFsABIo0uuLTAAIWewACGork6AQABgMABIqfARJdKAMAAhhZgA4OvTsABIsQAAADAAEuUXQPAAP59AWADwAEAAgBOwAEi7QAAAMAAS5VdA8AA/n0BYAPAAQACAEnAASMFIRzAASMYgcABIwnARJdaSAEAASsAwAD/dT4CPYzAASMpwESX1hzAASNNgcABIz7ARJdawABLoQEAAYPAASNjwESXkgDAAIIEPY3AASNwwESX8BzAASOUgcABI4XARJdawABLogEAAYPAASOqwESXkgDAAIIFPgNOwAEj2MABI+EAAIb3XQPAAP6/AWADwABiOAEmwAEj2AEcwAEkARbAASPtLrBOwACFnsAAhqe0KQEAAYDAASQTwESXSgC8cl0DwAD+vwFgA8AAYjg9jMABJCHARJfWHsABJDbAAGhwAwADFsABJGMWwAEkVy64tMAAhZ7AAIaipS7AAIWmFsABJHkWwAEkbS64tMAAhZ7AAIaitFnAAIXJhsABJInARJiGAD2NwAEkmsBEl/AewAEkr8AAaHEDAAMWwAEk3BbAASTQLri0wACFnsAAhqKlLsAAhaYWwAEk8hbAASTmLri0wACFnsAAhqK0WcAAhcmGwAElAsBEmIYASsABJRcBHMABJSoWwAElHi64tMAAhZ7AAIaiwABNaQQAA4PAASVRwESXkoTAASVXwESX1oXAASVrwESX8AHAAEuXgsABJZTARJdtwACGOQbAAIa0gWzAASWpwAEluMABKVwAAMAAWxvAAIWeAAAAAQPAASXUwAEpXAAAAAMCAsABJeYAAACCbmADwABtrADAASYBAAAAwABavGADwACB8wABwAEmHQAAAMAAS5dgA8AA/FUBagBgA8AA/yV5YAPAAGiWAT4FTsABJjvAASZAAACD82ADg5ABHMABJk4WwAEmQi64tMAAhZ7AAIaiuToBAAGAwAEmXMBEmgQAwACGFk7AASZ8AAAAwABLlF0DwAD+fQFgA8ABAAIATsABJqUAAADAAEuVXQPAAP59AWADwAEAAgBJwAEmvSEcwAEm0IHAASbBwESaFEgBAAErAMAA/3U+Aj2MwAEm4cBEmoYcwAEnBYHAASb2wESaFMAAS6EBAAGDwAEnG8BEmkwAwACCBD2NwAEnKMBEmqAcwAEnTIHAASc9wESaFMAAS6IBAAGDwAEnYsBEmkwAwACCBT4DTsABJ5DAASeZAACG910DwAD+vwFgA8AAYjgBJsABJ5ABHMABJ7kWwAEnpS6wTsAAhZ7AAIantCkBAAGAwAEny8BEmgQAvHJdA8AA/r8BYAPAAGI4PYzAASfcwESahh7AASfxwABocAMAAxbAASgeFsABKBIuuLTAAIWewACGoqUuwACFphbAASg0FsABKCguuLTAAIWewACGorRZwACFyYbAAShEwESbNgA9jcABKFXARJqgHsABKGrAAGhxAwADFsABKJcWwAEoiy64tMAAhZ7AAIaipS7AAIWmFsABKK0WwAEooS64tMAAhZ7AAIaitFnAAIXJhsABKL3ARJs2AErAASjSARzAASjlFsABKNkuuLTAAIWewACGosAATWcEAAODwAEpCcBEmkyEwAEpD8BEmoaFwAEpI8BEmqABwABLl4LAASlMwESaJ8AAhjsGwACGtYFswAEpYcABKWbAAS0nAADAAFskwACFngAAAAEDwAEpdcABLScAAAACAgLAASmAAAAAg/NgA4OQAMABKZcAAADAAFq8YAPAAIHzAABgA8AA/FUBPgVJwAEprSEewAEpssAAbVcBAAEWwAEp2hbAASnJgMABKcTARJy0hLKDmYR8go4ASsABKeYBKj9OwAEp/QAAAMAAWXFgA8AA/FUAScABKhAhHMABKiOBwAEqFMBEnMJIAQABKwDAAP91PgE9isABKjTARJ0VHMABKlOBwAEqRMBEnMLAAFlxAQABgMABKmHARJy0AMAAggI+AT2KwAEqe8BEnRUcwAEqnBbAASqQgMABKovARJy0hGiDk4HWAQABNMABKqADwAEqoMABK3cAAAABAQHAASqvAAAAgm9gA4TsAABgA8AA/FUBPgFKwAEqxQEiJcABKteDwAEqzMBEnbBgA4YOABzAASs7HMABKw4WwAErAi64tMAAhZ7AAIaiwABQjgEAARbAASsqFMABKx/ARJ2wAwFgA4YOhcWGFgDAAIYJSAEAARbAASteFsABK04utR3AAIWewACGqLLbulcAwABkAADAAP6SScABK4QiIiGCwAEricBEnRUAFsABK6eAwAErosBEnLSEJIOgACEcwAErzxbAASu+LrkQwACFnsAAhqPAAE0pAQABHMABK+0WwAEr4S64tMAAhZ7AAIainGgBAAGAwAEr98BEnLQAwACGAADAAGwhPgE9HMABLKAWwAEslxbAASyLLri0wACFnsAAhqKlLsAAhaav1QIAAh7AASy+wACeNQEAAYDAASzcwESctABqwAEs72ADpWXAAMwsALblP0rAAS0PAYLAAS0WwESdFQbAAIa2gWzAAS0swAEtMcABLaQAAMAATVnAAIWeAAAAAQPAAS1DwAEtpAAAAAEBAcABLU4AAACD82ADg5AAAGADwAD8VQE+AUrAAS1aARzAAS1yFsABLWEuuRDAAIWewACGo8AATSkBAAEcwAEtkBbAAS2ELri0wACFnsAAhqKc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AACE72ADgxwBHJT0FpTpLrSzwACGx8AATngBAAEmlQEBFJUBwEStcwgAYAPAAJBgAMAAhhdOlRQAAACGkmADwAEAAgBJlSUhHJU4FpUpLsAAWrzAAIbKSAEAASsAwAD/dT4BPRWVS8BErdoLHJVmFpVXLsAAWrzAAIbKwABNMQEAARSVfMBEraAKAADAAIIHPgI9FZWfwEStigkclb2ClarARKlttCgBAAEUlc7ARK1zCAAAvHE9FZYowESt2gscljQuwABbMAIAAhSWRcBErXMIABSWSsBErYoJAADAAIbNSZZjIRyWcRSWZ8BErdoLAEgBAAErAMABABE+Bk6WiQAAAMAATTlgA8AA/FUASZaeIRyWsRaWoi7AAFq8wACGykgBAAErAMAA/3U+AT0VlsbARK6iDByW4xaW1C7AAFq8wACGysAATTABAAEUlv3ARK2gCgAAwACCCD4CPRWXJMBErqIMKkFGl6WXy5e4AAAAgJZgA8AAYjgAFJfBwEStigkAPgFJl9kel93AAIUXAwADFJfqwEStcwgAFJfvwESvEA0AFpgFg5f2wESpjrLkunYAPgI9FZgowESuogwpQphKAD89HJkEFpjsLsAAWy3AAIWewACGycAATTgDAAEUmRnARK1zCAACgL0UmTDARK3aCwDAAE05FJlIwESuogwAwABsPj2PmdrARKqYKT0cmgqCmffARKlttBQCAAIUmiLARK1zCAA0micDmiegRQAAAAEBAZo1AAAAgmpgA74lAABgA8AA/yUBPgFJmkkWmlQUmk3ARK/ZDQCHm74sPgA+CE6bQJtJAACCbmADvjoBJptAARSbS8BEr9kNAGADvjpOm2mbdAAAwABGaGADg5ABHJuBFpt2LrSzwACGx7k6AQABJpuPARSbj8BEr9kNAGADwACQZgDAAIYWTpurAAAAp4tgA8ABAAIASZvDIRyb1habxy7AAFq8wACGykgBAAErAMAA/3U+AT0Vm+/ARLBgEBycCxab/C7AAFq8wACGysAATTIBAAEUnCLARLAmDwAAwACCCT4BPRWcpMBEsGAQHJyxLsAAWzACAAKAnNXARKk6HJzxgpzewESpbbQpAQABFJ0DwESwBw4AALxyAMAAhs1JnSkWnTYUnS3ARLAHDgCEJL48PgE9IxydXRSdUsBEsGAQAEgBAAErAMABABEVnVLA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sgEmh7QBgoe8wES+2GADh7I9iofIwES+2BaH4BaH1YOHz8BEvy2GLYe0gx7AAP6jP06H/wAAAK7RYAOE7ABJiAkliBKCiA3ARL7YYAOIUT4BPYuIMcBEv2oWiD0UiDjARL7YAgFgA4hRgm+IU0mIVCWIXYKIWMBEvthgA4eoPgE9i4iAwES/ahaIjBSIh8BEvtgCAWADh6iCb4eqP0qIogEliK6DiKnARL9qYAOHEAbAAIbdgW6IwojdiVAAAMAAT2MBaojDYAPAAP9oAgAAAQOI8YlQAAAAAQEBiQEAAAiWnGADvjoAAGADvjoBPgFKiQ8BHIkhFokWLrSzwACG1cAAT2MBAAEWiT2AiTbARMAThRm+MwDAAIYnAABEuosARLrMAES7DQBEvmEARL/nAETAUgAAAAUAAAIGwACFoYFswAEwvcABMM/AATICAAHAAFs3wACFngAAAAEDwAEw58ABMgIAAAACAgLAATEAAAAApS5gA7bdAMABMRwAAAAiYAOR2AAAYAO28QE+Ak7AATE0wAExPwAAlwJgA7b/AR/AATFFtwoDAAMWwAExX4HAATFXwETAsICskdoWwAExbIHAATFkwETAsIdxkdscwAExixbAATGAgcABMXjARMCwh3GR22QBAAEWwAExlYHAATGNwETAsGGR3ADAAP9BAErAATGgARzAATGwgMABMafARMCipa4DAAOCwAExxcBEwMZqwAEx3WADpWXAAMeIMsABMeZbWwEngbIWwAEx94HAATHvwETAsCKR4AC27QbAAIWigWzAATIFwAEyCsABM6AAAcAAWzgAAAABA8ABMh7AATOgAAAAAwMDwAEyMgAAAKUuYAO23QDAATJSAAAAImADkdgAwAEycwAAAIJXXQPAAP6/AWADkdgAAFwBPgROwAEyksABMqQAAJcAYAO28QEewAEyrMAAhaECAAKAwAEyxcBEwbGBwAEyz8BEwb8ATsABMvPAATL5AACW/l0DwAD+vwFgA7bxATHAATL7YAO28QBGwAEzAcABMyzAATMYAAAAImADkdgAgsABMyPARMHMPgE9HMABMziEwAEzMsBEwhhWAQABHsABMzzAAIWhAgACgMABM1XARMGxhcABM1/ARMJDAADAAP7QPRzAATN5gMABM3DARMGxpbICAAKDwAEzhcBEweeEwAEzmMBEwhgAtuYD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W2BgA8AAh5UAig8AAADAAFthYAPAAId/AIosAAAAwABbYmADwACHlQCKVAAAAMAAW2NgA8AAh38AAGADwAD8VQE+AkmKZiIcinKAimrARPBpSAEAAYKKdcBE8IkAwAD/dQAeiqHAAIeBAgACgYqmwETweYOKssBE8JkAPgFKiscBKT9Ki24BKgbAAIeYgXKL64v3jPoAAcAAW2QAAAABA4wBjPoAAAACAgKMFAAAAMAARtdgA8AAh5UAjDUAAADAAFtlYAPAAId/AABgA8AA/FUBPgJJjEYiJYxUgYxKwETxKmADwACHhgAljIuAjITARPEaYAPAAIebPgFJjKwcjMMWjLoUjLDARPEqAQFgA8AAh4aCcMAAh4hIAQABFozNFIzGwETxGgABYAPAAIebgpTAAIedAMAAZCNKjNMBKT8/SozqASoAAETwRwBE8PgARPG2AAAAAgLAAIebgXKNKI0ujkMDwABGxQAAAWABwACHlQAAAQTAAIedgXKNaY1tCYKUAGADwABjywABBcAAh6KBco1yjXKNkQAAAAONho2RAAAAAQEBjYwAAASClGADwABjywAAYAPAAIebAT8CCAHAAIedgADARPIXCQGNcsAAh5oAAAAAAgbAAIefgXKNlo2wjf4DAEgBao2XYAPAAP9oAgAAAQONso3+AAAAAQEBjbMAAACD21sAAGADwAD8VQE+AUqNwAEiJY3NgI3HwETycWADwACHmwAcje0WjegugpTAAIedSAEAARaN9hSN8MBE8nEAAWADwACHm4KUwACHnQDAAP91BsAAh6CBco4DjhaOQQAAIwFqjgRgA8AA/2gCAAABA44ejkEAAAAAAAAAYAPAAQACAUqOJAEkjkEDJ8AAW2YWjjsugpTAAIedJ4MmAABE8kgARPLIAETzEwAAAAICwACHo4FyjnuOio60B8AAW2cAAAFgAcAAh5UAAAABBcAAh6UAAAAABAAAAwAAAAAAAAAAAGADwACHowE/AQkBAMAAh5oAAAAAAAAARPNuAAAAAALAAIemgXKPJI8qkHIDwABbaAAAAWABwACHowAAAQTAAIeogXKPeo9+CYKUAGADwABjywABBcAAh62Bco+Dj4OPrAAAAAOPoY+sAAAAAQEBj6cAAASClGADwABjywAAYAPAAIemAT8CCAHAAIeogADARPPHCQGPg8AAh6UA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wEUdPbHGwABOjgDAAEcttU+/KAbAAIfugXPAAEKQwABCncAAQw4AAsAAW4IAAAABA8AAQq7AAEMOAAAAAwMDwABCvgAAALnoYAPAAEfNAMAAQuwAAAC31mADwABCoQDAAEMCAAAApUBgA8AAToUAAGADwABG0AAGwACH74FzwABDE8AAQxjAAEN7AALAAFt/AAAAAQPAAEMswABDewAAAAMDA8AAQ0gAAACWzWADwACsfgDAAENaAAAAnx9gA8AARtAAwABDcQAAAJetYAPAAEbQAABcAAAARRaEAEUYogBFGXIARRrXAEUb1QBFHQEARR43AEUemwBFHvoAAAAIAsAAh/KBc8AAQ4DAAEOGwABIDQPAAFuGAAABYAHAAIfmAAAAAQXAAIf5gXPAAEO9wABDw8AAQ9MBAAADwABD0cAAQ9MAAAAAAAAAYAPAAIfyAT8BCQHAAEPDwACH8QAAAAAEBsAAh/SBc8AAQ9jAAEPywABFtgAAwABbcAFqwABD2WADwAD/aAIAAAEDwABEC8AARbYAAAADAwPAAEQbAAAAuehgA8AAR80AwABESQAAALfWYAPAAEKhAMAARF8AAAClQGADwABOhQAAYAO/OgE+A0nAAERyHMAARHYuwABbhQIAAoDAAESGwEUfvoLAAESTwEUf3gDAAIftPgFKwABEqQEWwABE0BbAAES8gsAARLDARR/escbAAE6Otki/Vz9JwABE5hzAAETqLsAAW4QCAAKAwABFBMBFH76CwABFEcBFH94AwACH7D4BSsAARScBFsAARU4WwABFOoLAAEUuwEUf3rHGwABOjrZJv1g/SsAARWkBHcAARXbAAFtwAwADgMAARZDARR++gcAARZ3ARR/OgsAARabARR/eAMAAh+gGwACH9YFzwABFu8AARefAAEYXAACdKAFqwABFvGADwAD/aAIAAAEDwABF8MAARhcAAAAAAAAAYAPAAGrzAT4BSsAARfkBasAARhBgA8AAa5TAAPtxBsAAh/aBc8AARhzAAEY1wABHYwAAwABbggFqwABGHWADwAD/aAIAAAEDwABGRsAAR2MAAAADAwPAAEZWAAAAuehgA8AAR80AwABGhAAAALfWYAPAAEKhAMAARpoAAAClQGADwABOhQAAYAPAAEbQAT4BSsAARq0BH8AARrjAAEjMBAAEHMAARtgWwABG0oDAAEbGwEUhU4JVwABG1ksBAAGUAMAA/s4cwABG9xbAAEbxgMAARuXARSFTglXAAEbWSwEAAZUAwAD+zhbAAEcQgMAARwTARSFTpVLAAEfQHMAARyIuwABbcAMAA4DAAEc8wEUhU4HAAEdJwEUhY4LAAEdSwEUhcwDAAIf0AAbAAIf3gXPAAEdowABHecAASAsAAMAAW38BasAAR2lgA8AA/2gCAAABA8AAR43AAEgLAAAAAwMDwABHqQAAAJbNYAPAAKx+AMAAR7sAAACfH2ADwABG0ADAAEfSAAAAl61gA8AARtAAAFwBPgE9HMAAR+eAwABH48BFIl/AAFuHAgACJsAAR/MBgcAAR/PARSJvYAPAAEfNJsAAR/0BgsAAR/3ARSJ/YAPAAEjEAMAArJEAAEUfhgBFIMYARSEbAEUiJwBFItkAAAAEAsAAh/qBc8AASBDAAEgWwABMRwPAAFuIAAABYAHAAIfmAAAAAQXAAIgBgXPAAEhQwABIVsAASGkBAAADwABIZ8AASGkAAAAAAAAAYAPAAIf6AT8BCQHAAEhWwACH8QAAAAAEBsAAh/yBc8AASG7AAEiawABIzQAAnSgBasAASG9gA8AA/2gCAAABA8AASKPAAEjNAAAAAAAAAGADwABq8wE+AUrAAEisAWrAAEjDYAPAAGuKwAD7gAbAAIf9gXPAAEjSwABI7MAASnYAAMAAW3ABasAASNNgA8AA/2gCAAABA8AASQXAAEp2AAAAAwMDwABJEwAAALnoYAPAAEbQAMAASUEAAAC31mADwABCoQDAAElXAAAApUBgA8AAToUAAGADvzoBPgNOwABJd8AASXwAAIXNYAPAAEbQARzAAEmQFsAASYqAwABJfsBFI+KCVcAARtZLAQABlADAAP7OScAASZkWwABJ0hzAAEmig8AASZ3ARSQbtnYBAAEWwABJvYLAAEmxwEUkArHGwABOjgDAAEcytU+/KD4BSsAASewBFsAAShMWwABJ/4LAAEnzwEUkArHGwABOjoX9v0w/SsAASikBHcAASjbAAFtwAwADJsAASlABgMAASlDARSPiYAPAAEfNgcAASl3ARSPygsAASmbARSQCAMAAh+gGwACH/oFzwABKe8AASpTAAEuaAADAAFuCAWrAAEp8YAPAAP9oAgAAAQPAAEqlwABLmgAAAAMDA8AASrUAAAC56GADwABHzQDAAErjAAAAt9ZgA8AAQqEAwABK+QAAAKVAYAPAAE6FAABgA8AARtABPgFKwABLDAEfwABLF8AASNUEAAQcwABLMRbAAEsrgMAASx/ARSUnglXAAEbWSwEAAZQAwAD+zhzAAEtIFsAAS0KAwABLNsBFJSeCVcAARtZLAQABlQDAAP7OFsAAS2GAwABLVcBFJSelUsAAR9AWwABLixbAAEt3gsAAS2vARSVHscbAAE6Ohf2/TAAGwACH/4FzwABLn8AAS7DAAExFAADAAFt/AWrAAEugYAPAAP9oAgAAAQPAAEvEwABMRQAAAAMDA8AAS+AAAACWzWADwACsfgDAAEvyAAAAnx9gA8AARtAAwABMCQAAAJetYAPAAEbQAABcAT4BPRzAAEwegMAATBrARSYjwABbiQIAAibAAEwtAYHAAEwtwEUmM2ADwABHzSbAAEw3AYLAAEw3wEUmQ2ADwABIzQDAAKySAABFI1UARSOqAEUk7wBFJesARSadAAAABALAAIgCgXPAAExKwABMUMAAWHEDwABbigAAAWABwACH5gAAAAEFwACICYFzwABMisAATJDAAEyjAQAAA8AATKHAAEyjAAAAAAAAAGADwACIAgE/AQkBwABMkMAAh/EAAAAABAbAAIgEgXPAAEyowABMwsAAThIAAMAAW3ABasAATKlgA8AA/2gCAAABA8AATNvAAE4SAAAAAwMDwABM6wAAALnoYAPAAEfNAMAATRkAAAC31mADwABCoQDAAE0vAAAApUBgA8AAToUAAGADvzoBPgJJwABNQhzAAE1GLsAAW4QCAAKAwABNYMBFJ1GCwABNbcBFJ3EAwACH7D4BSsAATYMBFsAATaoWwABNloLAAE2KwEUncbHGwABOjrZJv1g/SsAATcUBHcAATdLAAFtwAwADgMAATezARSdRgcAATfnARSdhgsAATgLARSdxAMAAh+gGwACIBYFzwABOF8AATkPAAE52AACdKAFqwABOGGADwAD/aAIAAAEDwABOTMAATnYAAAAAAAAAYAPAAGrzAT4BSsAATlUBasAATmxgA8AAa27AAUHfBsAAiAaBc8AATnvAAE6UwABXxAAAwABbggFqwABOfGADwAD/aAIAAAEDwABOpcAAV8QAAAADAwPAAE61AAAAuehgA8AAR80AwABO4wAAALfW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ASk/ScAAarEiFsAAauQcwABquoLAAGq1wEU8wbZwAQABFsAAas+BwABqw8BFPKaxxsAATo4AwABHLLVPvygAHMAAawIuwABbmAEAAYPAAGsRwEU8+ADAAIgmPgFKwABrIwEpPz9KwABrQgEqBsAAiCiBc8AAa1fAAGtwwABv7gAAwABbcQFqwABrWGADwAD/aAIAAAEDwABrg8AAb+4AAAAGBgbAAGuaAAAAuehgA8AAR80AwABrtAAAAKSAYAPAAEXrAMAAa9wAAAC31mADwABCoQDAAGv7AAAAtFlgA7qCAMAAbB4AAAClQGADwABOhQDAAGxFAAAAls1gA8AArH4AAGADwABG0AE+A07AAGxdwABsYwAAhc9gA8AARtABHMAAbHcWwABscYDAAGxlwEU+bIJVwABG1ksBAAGVAMAA/s5JwABsgBzAAGyELsAAW4ECAAKAwABsjsBFPmyEwABsm8BFPqoAwACH6T4CScAAbLEiFsAAbQwcwABsyobAAGy1wEU+1bZyAQABFsAAbOiEwABs3MBFPqqxxsAATo4AwABHLrVPvygAHMAAbSouwABblwEAAYbAAG00wEU+1QDAAIglPgNJwABtRhzAAG1KLsAAW5YCAAKAwABtWsBFPmyEwABtZ8BFPqoAwACIJz4DTsAAbY7AAG2YAACXrWADwABG0AEcwABtqC7AAFuCAwADgMAAbbrART5sgsAAbcfART6MhMAAbdDART6qAMAAiClJwABt6CEcwABt8IXAAG3swEU+ukgBAAErAMAA/3U+AT0cwABuBy7AAFt/AwADhcAAbhzART66gMAAbiHART5sh8AAbi7ART+7AMAAiCo/SsAAblABh8AAblfART+7Pz0XwABu4oDAAG7WwEU+bKVSHMAAbu0uwABbcgMAAyfAAFuZFsAAby2AwABvIcBFPmylUsAAR9CDwABvN8BFPpwAwACHv8AAR9BJwABvUCEcwABvWIXAAG9UwEU+ukgBAAErAMAA/3U+AT0cwABvbS7AAFt/AwADhcAAb4LART66gMAAb4fART5sKwDAAIgqPz89HMAAb7MuuxABAAGAwABvx8BFPmwAwACHvj9KwABv3wErBsAAiCmBc8AAb/PAAHAMwABxRwAAwABbggFqwABv9GADwAD/aAIAAAEDwABwHcAAcUcAAAADAwPAAHAtAAAAuehgA8AAR80AwABwWwAAALfWYAPAAEKhAMAAcHEAAAClQGADwABOhQAAYAPAAEbQAT4BSsAAcIQBH8AAcI/AAEjwBAAEHMAAcLwWwABwtoDAAHCqwEVBRYJVwABG1ksBAAGUAMAA/s4cwABw2xbAAHDVgMAAcMnARUFFglXAAEbWSwEAAZUAwAD+zhbAAHD0gMAAcOjARUFFpVLAAEfQHMAAcQYuwABbcAMAA4DAAHEgwEVBRYHAAHEtwEVBVYLAAHE2wEVBZQDAAIgkAAbAAIgqgXPAAHFMwABxXcAAcfwAAMAAW38BasAAcU1gA8AA/2gCAAABA8AAcXHAAHH8AAAAAwMDwABxjQAAAJbNYAPAAKx+AMAAcZ8AAACfH2ADwABG0ADAAHG2AAAAl61gA8AARtAAAFwBPgE9HMAAccuAwABxx8BFQlHAAFuaAgACJsAAceQBgcAAceTARUJhYAPAAEfNJsAAce4BgsAAce7ARUJxYAPAAEjoAMAArJcAAEU4UgBFOKcARTo2AEU7UABFPGoART40AEVBDQBFQhkARULLAAAACALAAIgtgXPAAHIBwAByEMAAeOYHwABbmwAAAWABwACH5gAAAAEFwACINIFzwAByT8AAclXAAHJtAQAAA8AAcmvAAHJtAAAAAAAAAGADwACILQE/AQkBwAByVcAAh/EAAAAABAbAAIgvgXPAAHJywAByjMAAdIoAAMAAW3ABasAAcnNgA8AA/2gCAAABA8AAcqXAAHSKAAAAAwMDwABytQAAALnoYAPAAEfNAMAAcuMAAAC31mADwABCoQDAAHL5AAAApUBgA8AAToUAAGADvzoBPgNOwABzi8AAc5AAAIXNYAPAAEbQARzAAHOkFsAAc56AwABzksBFQ4+CVcAARtZLAQABlADAAP7OScAAc60WwABz5hzAAHO2g8AAc7HARUPItnYBAAEWwABz0YLAAHPFwEVDr7HGwABOjgDAAEcytU+/KD4BSsAAdAABFsAAdCcWwAB0E4LAAHQHwEVDr7HGwABOjrZIv1c/SsAAdD0BHcAAdErAAFtwAwADgMAAdGTARUOPgcAAdHHARUOfgsAAdHrARUOvAMAAh+gGwACIMIFzwAB0j8AAdJTAAHT1AADAAFucAAAAAQPAAHSmwAB09QAAAAEBAcAAdLQAAAC56GADwABG0AAAYAPAAPxVAT4BSsAAdMcBHMAAdM4uwABbnQMAA4DAAHTewEVEvJM3HwDAAIgxBsAAiDGBc8AAdPrAAHT/wAB3tAAAwABbnQAAAAEDwAB1DsAAd7QAAAADAwPAAHUcAAAAuehgA8AARtAAwAB1LQAAAIPDYAPAAP4bAMAAdTYAAACDwmADwAD+GwAAYAPAAPxVAT4DScAAdUIcwAB1UoDAAHVGwEVFJrquAAAAAMAAR08+BU7AAHV5wAB1hwAAvfpgA8AASaUBJsAAdXkBgMAAdYnARUUmYAPAAEmlTsAAda3AAHW5AADAAEytYAPAAGKRASbAAHWtARbAAHXJg8AAdbvARUWAhh3AAEmnYAPAAGKRTsAAdd3AAHXjAACAlmADwAD+GwEcwAB1+hbAAHXxhMAAdeXARUWpqvPAAGKTquMAAAAAwAD8T0AcwAB2JRbAAHYchMAAdhDARUWpqvPAAGKTSAEAAR7AAHY2wAD8VAEAARzAAHZXFsAAdk6EwAB2QsBFRamq88AAYpOq4wAAAADAAPxPAADAAP91wAB2EMAAdl8ASsAAdmgBIhzAAHZ1hcAAdm/ARUXfgW0BAAGBwAB2eMBFRTYAwAD/TAAcwAB2hYXAAHZ/wEVF34FrAQABgsAAdojARUVGAMAA/0o/ScAAduElwAB28YDAAHblwEVFJmADwABJIj4BSsAAdwUBIhzAAHcQgcAAdwzARUU2SAEAAZMAwAD/PwAiHMAAdyMuwABbnQMAAxzAAHdFFsAAdz8UwAB3M8BFRSYAAWADwABJIoJVwABG1ksBAAGTAMAA/s6BwAB3SsBFRTaCwAB3T8BFRUYAwACIMQEcwAB3Zi7AAFudAwADHMAAd4gWwAB3ghTAAHd2wEVFJgABYAPAAEkiglXAAEbWSwEAAZQAwAD+zoHAAHeNwEVFNoLAAHeSwEVFRgDAAIgxP0rAAHekASoGwACIMoFzwAB3ucAAd77AAHjkAADAAEcZAAAAAQPAAHfIwAB45AAAAAICAsAAd9YAAAC56GADwABG0ADAAHfwAAAApUBgA8AAToUAAGADwAD8VQE+AUrAAHh4ARbAAHjQHMAAeJSAwAB4f8BFR8u2cgEAARbAAHiygcAAeKbARUfbscbAAE6OAMAARy61T78oAABFQ1cARUSQAEVE+gBFR58ARUgwAAAABALAAIg1gXPAAHjpwAB478AAgEgDwABbngAAAWABwACILQAAAAEFwACIPIFzwAB5J8AAeS3AAHlDAQAAA8AAeUHAAHlDAAAAAAAAAGADwACINQE/AQkBwAB5LcAAiDQAAAAABAbAAIg3gXPAAHlIwAB5dMAAeaoAAJ0oAWrAAHlJYAPAAP9oAgAAAQPAAHl9wAB5qgAAAAAAAABgA8AAavMBPgFKwAB5hgFqwAB5nWADwABrLMAA+84GwACIOIFzwAB5r8AAecjAAH5GAADAAFtxAWrAAHmwYAPAAP9oAgAAAQPAAHnbwAB+RgAAAAYGBsAAefIAAAC56GADwABHzQDAAHoMAAAApIBgA8AAResAwAB6NAAAALfWYAPAAEKhAMAAelMAAAC0WWADuoIAwAB6dgAAAKVAYAPAAE6FAMAAep0AAACWzWADwACsfgAAYAPAAEbQAT4ETsAAerXAAHq6AACFzWADwABG0AEcwAB6zhbAAHrIgMAAerzARUk5glXAAEbWSwEAAZQAwAD+zk7AAHrkwAB66gAAhc9gA8AARtABHMAAev4WwAB6+IDAAHrswEVJOYJVwABG1ksBAAGVAMAA/s5JwAB7BxbAAHs6HMAAexCGwAB7C8BFSaK2dQEAARbAAHslhMAAexnARUl3scbAAE6OAMAARzG1T78oPgRJwAB7VBzAAHtYLsAAW5wBAAGHwAB7a8BFSdkAwACIMD4DTsAAe4rAAHuUAACXrWADwABG0AEcwAB7oi7AAFuCAwADgMAAe7TARUk5gsAAe8HARUlZhMAAe8rARUl3AMAAiDlJwAB74CEcwAB76IXAAHvkwEVJh0gBAAErAMAA/3U+AT0cwAB7/S7AAFt/AwADhcAAfBLARUmHgMAAfBfARUk5FMAAfCTARUpuCAAAwACIOj9KwAB8QgEUwAB8ScBFSm4IAD89HMAAfQMuuxABAAGAwAB9F8BFSTkAwACHvknAAH0rHMAAfS8uwABHGQIAAofAAH06wEVJ2YTAAH1BwEVJdwDAAIgyPgE9F8AAfWWAwAB9WcBFSTmlUhzAAH1wLsAAW3IDAAMnwABbnxbAAH2zgMAAfafARUk5pVLAAEfQg8AAfb3ARUlpAMAAh7/AAEfQP0nAAH3cIRzAAH3khcAAfeDARUmHSAEAASsAwAD/dT4BPRzAAH33LsAAW38DAAOFwAB+DMBFSYeAwAB+EcBFSTkrAMAAiDo/P0rAAH43ASsGwACIOYFzwAB+S8AAfmTAAH+YAADAAFuCAWrAAH5MYAPAAP9oAgAAAQPAAH51wAB/mAAAAAMDA8AAfoUAAAC56GADwABHzQDAAH6zAAAAt9ZgA8AAQqEAwAB+yQAAAKVAYAPAAE6FAABgA8AARtABPgFKwAB+3AEfwAB+58AASQ8EAAQcwAB/DRbAAH8HgMAAfvvARUwnglXAAEbWSwEAAZQAwAD+zhzAAH8sFsAAfyaAwAB/GsBFTCeCVcAARtZLAQABlQDAAP7OFsAAf0WAwAB/OcBFTCelUsAAR9AcwAB/Vy7AAFtwAwADgMAAf3HARUwngcAAf37ARUw3gsAAf4fARUxHAMAAiC8ABsAAiDqBc8AAf53AAH+uwACARgAAwABbfwFqwAB/nmADwAD/aAIAAAEDwAB/wsAAgEYAAAADAwPAAH/eAAAAls1gA8AArH4AwAB/8AAAAJ8fYAPAAEbQAMAAgAcAAACXrWADwABG0AAAXAE+AT0cwACAHIDAAIAYwEVNM8AAW6ACAAImwACALgGBwACALsBFTUNgA8AAR80mwACAOAGCwACAOMBFTVNgA8AASQcAwACsmAAARUisAEVJAQBFS+8ARUz7AEVNrQAAAAQCwACIPYFzwACAS8AAgFHAAIv+A8AAW6EAAAFgAcAAiC0AAAABBcAAiEWBc8AAgIrAAICQwACApwEAAAPAAIClwACApwAAAAAAAABgA8AAiD0BPwEJAcAAgJDAAIg0AAAAAAUGwACIP4FzwACArMAAgMbAAII2AADAAFtwAWrAAICtYAPAAP9oAgAAAQPAAIDfwACCNgAAAAMDA8AAgO8AAAC56GADwABHzQDAAIEdAAAAt9ZgA8AAQqEAwACBMwAAAKVAYAPAAE6FAABgA786AT4DTsAAgVPAAIFYAACFzWADwABG0AEcwACBbBbAAIFmgMAAgVrARU5hglXAAEbWSwEAAZQAwAD+zknAAIF1FsAAgagcwACBfoPAAIF5wEVOmrZwAQABFsAAgZOCwACBh8BFToGxxsAATo4AwABHLLVPvyg+AUrAAIHCARbAAIHOg8AAgcnARU6auovAAEcQP0rAAIHpAR3AAIH2wABbcAMAA4DAAIIQwEVOYYHAAIIdwEVOcYLAAIImwEVOgQDAAIgvBsAAiECBc8AAgjvAAIJUwACJkgAAwABbcQFqwACCPGADwAD/aAIAAAEDwACCZ8AAiZIAAAAGBgbAAIJ+AAAAuehgA8AAR80AwACCmAAAAKSAYAPAAEXrAMAAgsAAAAC31mADwABCoQDAAILfAAAAtFlgA7qCAMAAgwIAAAClQGADwABOhQDAAIMpAAAAls1gA8AArH4AAGADwABG0AE+BE7AAINBwACDRgAAhc1gA8AARtABHMAAg1oWwACDVIDAAINIwEVPkYJVwABG1ksBAAGUAMAA/s5OwACDcMAAg3YAAIXPYAPAAEbQARzAAIOKFsAAg4SAwACDeMBFT5GCVcAARtZLAQABlQDAAP7OScAAg5MWwACDxhzAAIOchsAAg5fARU/6tnUBAAEWwACDsYTAAIOlwEVPz7HGwABOjgDAAEcxtU+/KD4DScAAg+AiHMAAg+QuwABbnAEAAYfAAIP3wEVQMQDAAIgwABzAAIQBLsAARxkCAAKGwACEDMBFT/qEwACEEsBFT88AwACIMj4DTsAAhDfAAIRBAACXrWADwABG0AEcwACETy7AAFuCAwADgMAAhGHARU+RgsAAhG7ARU+xhMAAhHfARU/PAMAAiEFJwACEjSEcwACElYXAAISRwEVP30gBAAErAMAA/3U+AT0cwACEqi7AAFt/AwADhcAAhL/ARU/fgMAAhMTARU+RFMAAhNHARVDsCAAAwACIQz9KwACE7wEUwACE9sBFUOwIAD89HMAAhbAuuxABAAGAwACFxMBFT5EAwACHvknAAIXYIhzAAIXcLsAARxkCAAKHwACF58BFUDGEwACF7sBFT88AwACIMgAcwACF/i7AAEcZAgAChsAAhgnARU/6hMAAhg/ARU/PAMAAiDI+Aj0XwACGM4DAAIYnwEVPkaVSHMAAhj4uwABbcgMAAyfAAFuiFsAAhoWAwACGecBFT5GlUsAAR9CDwACGj8BFT8EAwACHv8AAR9BJwACGqCEcwACGsIXAAIaswEVP30gBAAErAMAA/3U+AT0cwACGxS7AAFt/AwADhcAAhtrARU/fgMAAht/ARU+RKwDAAIhDP0nAAIcKIhzAAIcOLsAARxkCAAKGwACHGcBFT/qEwACHH8BFT88AwACIMgAWwACHaRzAAIc/h8AAhznARVAxtnUBAAEWwACHVITAAIdIwEVPz7HGwABOjgDAAEcxtU+/KD4CPRfAAIeRgMAAh4XARU+RpVIcwACHnC7AAFtyAwADJ8AAW6MWwACH54DAAIfbwEVPkaVSwABH0IPAAIfxwEVPwQDAAIe/wABH0EnAAIgKIRzAAIgShcAAiA7ARU/fSAEAASsAwAD/dT4BPRzAAIgnLsAAW38DAAOFwACIPMBFT9+AwACIQcBFT5ErAMAAiEM/ScAAiGwcwACIcC7AAEcZAgACh8AAiHvARVAxhMAAiILARU/PAMAAiDI+Aj0XwACIpoDAAIiawEVPkaVSHMAAiLEuwABbcgMAAyfAAFukFsAAiPmAwACI7cBFT5GlUsAAR9CDwACJA8BFT8EAwACHv8AAR9BJwACJHCEcwACJJIXAAIkgwEVP30gBAAErAMAA/3U+AT0cwACJOS7AAFt/AwADhcAAiU7ARU/fgMAAiVPARU+RKwDAAIhDPz8/SsAAiYMBKwbAAIhBgXPAAImXwACJsMAAiuUAAMAAW4IBasAAiZhgA8AA/2gCAAABA8AAicHAAIrlAAAAAwMDwACJ0QAAALnoYAPAAEfNAMAAif8AAAC31mADwABCoQDAAIoVAAAApUBgA8AAToUAAGADwABG0AE+AUrAAIooAR/AAIozwABJGAQABBzAAIpaFsAAilSAwACKSMBFVHiCVcAARtZLAQABlADAAP7OHMAAinkWwACKc4DAAIpnwEVUeIJVwABG1ksBAAGVAMAA/s4WwACKkoDAAIqGwEVUeKVSwABH0BzAAIqkLsAAW3ADAAOAwACKvsBFVHiBwACKy8BFVIiCwACK1MBFVJgAwACIPwAGwACIQoFzwACK6sAAixbAAItNAACdKAFqwACK62ADwAD/aAIAAAEDwACLH8AAi00AAAAAAAAAYAPAAGrzAT4BSsAAiygBasAAiz9gA8AAazTAAPvdBsAAiEOBc8AAi1LAAItjwACL/AAAwABbfwFqwACLU2ADwAD/aAIAAAEDwACLd8AAi/wAAAADAwPAAIuTAAAAls1gA8AArH4AwACLpQAAAJ8fYAPAAEbQAMAAi7wAAACXrWADwABG0AAAXAE+AT0cwACL0YDAAIvNwEVV2cAAW6UCAAImwACL5AGBwACL5MBFVelgA8AAR80mwACL7gGCwACL7sBFVflgA8AASRAAwACsmQAARU4pAEVPWQBFVEAARVVMAEVVoQBFVlMAAAAFAsAAiEaBc8AAjAHAAIwHwACQ0QPAAFumAAABYAHAAIgtAAAAAQXAAIhNgXPAAIw7wACMQcAAjFMBAAADwACMUcAAjFMAAAAAAAAAYAPAAIhGAT8BCQHAAIxBwACINAAAAAAEBsAAiEiBc8AAjFjAAIyEwACMtgAAnSgBasAAjFlgA8AA/2gCAAABA8AAjI3AAIy2AAAAAAAAAGADwABq8wE+AUrAAIyWAWrAAIytYAPAAGscwAD77AbAAIhJgXPAAIy7wACM1cAAjtcAAMAAW3ABasAAjLxgA8AA/2gCAAABA8AAjO7AAI7XAAAAAwMDwACM/gAAALnoYAPAAEfNAMAAjSwAAAC31mADwABCoQDAAI1CAAAApUBgA8AAToUAAGADvzoBPgROwACNYsAAjWcAAIXNYAPAAEbQARzAAI17FsAAjXWAwACNacBFV2CCVcAARtZLAQABlADAAP7OTsAAjZHAAI2XAACFz2ADwABG0AEcwACNqxbAAI2lgMAAjZnARVdgglXAAEbWSwEAAZUAwAD+zknAAI20IhbAAI3nHMAAjb2DwACNuMBFV5m2cQEAARbAAI3SgsAAjcbARVeAscbAAE6OAMAARy21T78oABbAAI4zHMAAjgmEwACOA8BFV9C2cQEAARbAAI4egsAAjhLARVeAscbAAE6OAMAARy21T78oPgFKwACOTQEWwACOdBbAAI5ggsAAjlTARVeAscbAAE6Otke/Vj9KwACOigEdwACOl8AAW3ADAAOAwACOscBFV2CBwACOvsBFV3CCwACOx8BFV4AAwACILwbAAIhKgXPAAI7cwACO9cAAkCUAAMAAW4IBasAAjt1gA8AA/2gCAAABA8AAjwbAAJAlAAAAAwMDwACPFgAAALnoYAPAAEfNAMAAj0QAAAC31mADwABCoQDAAI9aAAAApUBgA8AAToUAAGADwABG0AE+AUrAAI9tAR/AAI94wABJIQQABBzAAI+aFsAAj5SAwACPiMBFWQeCVcAARtZLAQABlADAAP7OHMAAj7kWwACPs4DAAI+nwEVZB4JVwABG1ksBAAGVAMAA/s4WwACP0oDAAI/GwEVZB6VSwABH0BzAAI/kLsAAW3ADAAOAwACP/sBFWQeBwACQC8BFWReCwACQFMBFWScAwACISQAGwACIS4FzwACQKsAAkDvAAJDPAADAAFt/AWrAAJArYAPAAP9oAgAAAQPAAJBPwACQzwAAAAMDA8AAkGsAAACWzWADwACsfgDAAJB9AAAAnx9gA8AARtAAwACQlAAAAJetYAPAAEbQAABcAT4BPRzAAJCpgMAAkKXARVoTwABbpwIAAibAAJC3AYHAAJC3wEVaI2ADwABHzSbAAJDBAYLAAJDBwEVaM2ADwABJGQDAAKyaAABFVtMARVcoAEVYzwBFWdsARVqNAAAABALAAIhOgXPAAJDUwACQ2sAAlh0DwABbqAAAAWABwACILQAAAAEFwACIVYFzwACRD8AAkRXAAJEoAQAAA8AAkSbAAJEoAAAAAAAAAGADwACITgE/AQkBwACRFcAAiDQAAAAABAbAAIhQgXPAAJEtwACRWcAAkYwAAJ0oAWrAAJEuYAPAAP9oAgAAAQPAAJFiwACRjAAAAAAAAABgA8AAavMBPgFKwACRawFqwACRgmADwABrFMAA+/sGwACIUYFzwACRkcAAkavAAJQhAADAAFtwAWrAAJGSYAPAAP9oAgAAAQPAAJHEwACUIQAAAAMDA8AAkdQAAAC56GADwABHzQDAAJICAAAAt9ZgA8AAQqEAwACSGAAAAKVAYAPAAE6FAABgA786AT4ETsAAkjjAAJI9AACFzWADwABG0AEcwACSURbAAJJLgMAAkj/ARVuWglXAAEbWSwEAAZQAwAD+zk7AAJJnwACSbQAAhc9gA8AARtABHMAAkoEWwACSe4DAAJJvwEVbloJVwABG1ksBAAGVAMAA/s5JwACSiiIWwACS4BzAAJKgg8AAko7ARVvPtn0BAAEWwACSvoLAAJKywEVbtrHGwABOjgDAAEc5tU+/KAAiFsAAkywcwACTAoPAAJL9wEVbz7ZxAQABFsAAkxeCwACTC8BFW7axxsAATo4AwABHLbVPvygBFsAAk3wcwACTUoTAAJNMwEVcBrZxAQABFsAAk2eCwACTW8BFW7axxsAATo4AwABHLbVPvyg+AUrAAJOXARbAAJO+FsAAk6qCwACTnsBFW7axxsAATo62R79WP0rAAJPUAR3AAJPhwABbcAMAA4DAAJP7wEVbloHAAJQIwEVbpoLAAJQRwEVbtgDAAIgvBsAAiFKBc8AAlCbAAJQ/wACVcAAAwABbggFqwACUJ2ADwAD/aAIAAAEDwACUUMAAlXAAAAADAwPAAJRgAAAAuehgA8AAR80AwACUjgAAALfWYAPAAEKhAMAAlKQAAAClQGADwABOhQAAYAPAAEbQAT4BSsAAlLcBH8AAlMLAAEkqBAAEHMAAlOUWwACU34DAAJTTwEVddIJVwABG1ksBAAGUAMAA/s4cwACVBBbAAJT+gMAAlPLARV10glXAAEbWSwEAAZUAwAD+zhbAAJUdgMAAlRHARV10pVLAAEfQHMAAlS8uwABbcAMAA4DAAJVJwEVddIHAAJVWwEVdhILAAJVfwEVdlADAAIhRAAbAAIhTgXPAAJV1wACVhsAAlhsAAMAAW38BasAAlXZgA8AA/2gCAAABA8AAlZrAAJYbAAAAAwMDwACVtgAAAJbNYAPAAKx+AMAAlcgAAACfH2ADwABG0ADAAJXfAAAAl61gA8AARtAAAFwBPgE9HMAAlfSAwACV8MBFXoDAAFupAgACJsAAlgMBgcAAlgPARV6QYAPAAEfNJsAAlg0BgsAAlg3ARV6gYAPAAEkiAMAArJsAAEVbCQBFW14ARV08AEVeSABFXvoAAAAEAsAAiFaBc8AAliDAAJYmwACa9QPAAFuqAAABYAHAAIgtAAAAAQXAAIhdgXPAAJZbwACWYcAAlnQBAAADwACWcsAAlnQAAAAAAAAAYAPAAIhWAT8BCQHAAJZhwACINAAAAAAEBsAAiFiBc8AAlnnAAJalwACW2AAAnSgBasAAlnpgA8AA/2gCAAABA8AAlq7AAJbYAAAAAAAAAGADwABq8wE+AUrAAJa3AWrAAJbOYAPAAGskwAD8CgbAAIhZgXPAAJbdwACW98AAmPkAAMAAW3ABasAAlt5gA8AA/2gCAAABA8AAlxDAAJj5AAAAAwMDwACXIAAAALnoYAPAAEfNAMAAl04AAAC31mADwABCoQDAAJdkAAAApUBgA8AAToUAAGADvzoBPgROwACXhMAAl4kAAIXNYAPAAEbQARzAAJedFsAAl5eAwACXi8BFYAOCVcAARtZLAQABlADAAP7OTsAAl7PAAJe5AACFz2ADwABG0AEcwACXzRbAAJfHgMAAl7vARWADglXAAEbWSwEAAZUAwAD+zknAAJfWIhbAAJgJHMAAl9+DwACX2sBFYDy2cQEAARbAAJf0gsAAl+jARWAjscbAAE6OAMAARy21T78oABbAAJhVHMAAmCuEwACYJcBFYHO2cQEAARbAAJhAgsAAmDTARWAjscbAAE6OAMAARy21T78oPgFKwACYbwEWwACYlhbAAJiCgsAAmHbARWAjscbAAE6Otke/Vj9KwACYrAEdwACYucAAW3ADAAOAwACY08BFYAOBwACY4MBFYBOCwACY6cBFYCMAwACILwbAAIhagXPAAJj+wACZF8AAmkgAAMAAW4IBasAAmP9gA8AA/2gCAAABA8AAmSjAAJpIAAAAAwMDwACZOAAAALnoYAPAAEfNAMAAmWYAAAC31mADwABCoQDAAJl8AAAApUBgA8AAToUAAGADwABG0AE+AUrAAJmPAR/AAJmawABJMwQABBzAAJm9FsAAmbeAwACZq8BFYaqCVcAARtZLAQABlADAAP7OHMAAmdwWwACZ1oDAAJnKwEVhqoJVwABG1ksBAAGVAMAA/s4WwACZ9YDAAJnpwEVhqqVSwABH0BzAAJoHLsAAW3ADAAOAwACaIcBFYaqBwACaLsBFYbqCwACaN8BFYcoAwACIWQAGwACIW4FzwACaTcAAml7AAJrzAADAAFt/AWrAAJpOYAPAAP9oAgAAAQPAAJpywACa8wAAAAMDA8AAmo4AAACWzWADwACsfgDAAJqgAAAAnx9gA8AARtAAwACatwAAAJetYAPAAEbQAABcAT4BPRzAAJrMgMAAmsjARWK2wABbqwIAAibAAJrbAYHAAJrbwEVixmADwABHzSbAAJrlAYLAAJrlwEVi1mADwABJKwDAAKycAABFX3YARV/LAEVhcgBFYn4ARWMwAAAABALAAIhegXPAAJr4wACbB8AAoJcHwABbrAAAAWABwACHugAAAAEFwACIZYFzwACbQsAAm0jAAJtfAQAAA8AAm13AAJtfAAAAAAAAAGADwACIXgE/AQkBwACbSMAAh8MAAAAABAbAAIhggXPAAJtkwACbfsAAnP8AAMAAW3ABasAAm2VgA8AA/2gCAAABA8AAm5fAAJz/AAAAAwMDwACbpwAAALnoYAPAAEfNAMAAm9UAAAC31mADwABCoQDAAJvrAAAApUBgA8AAToUAAGADvzoBPgJJwACb/hbAAJxdHMAAnCEcwACcFBbAAJwOgMAAnALARWPkglXAAEbWSwEAAZQAwAD+zrZ9AQABFsAAnD+CwACcM8BFZASxxsAATo4AwABHObVPvyg+AUrAAJx3ARbAAJyeFsAAnIqCwACcfsBFZASxxsAATo6Fvb9KP0rAAJyyAR3AAJy/wABbcAMAA4DAAJzZwEVj5IHAAJzmwEVj9ILAAJzvwEVkBADAAIe8BsAAiGGBc8AAnQTAAJ0dwACfyAAAwABbcQFqwACdBWADwAD/aAIAAAEDwACdMMAAn8gAAAAGBgbAAJ1HAAAAuehgA8AAR80AwACdYQAAAKSAYAPAAEXrAMAAnYkAAAC31mADwABCoQDAAJ2oAAAAtFlgA7qCAMAAncsAAAClQGADwABOhQDAAJ3yAAAAls1gA8AArH4AAGADwABG0AE+BE7AAJ4KwACeDwAAhc1gA8AARtABHMAAniMWwACeHYDAAJ4RwEVlAIJVwABG1ksBAAGUAMAA/s5OwACeOcAAnj8AAIXPYAPAAEbQARzAAJ5TFsAAnk2AwACeQcBFZQCCVcAARtZLAQABlQDAAP7OScAAnlwiFsAAno8cwACeZYbAAJ5gwEVlabZ1AQABFsAAnnqEwACebsBFZT6xxsAATo4AwABHMbVPvygAFsAAntscwACesYfAAJ6rwEVloLZ1AQABFsAAnsaEwACeusBFZT6xxsAATo4AwABHMbVPvyg+A07AAJ8CwACfDAAAl61gA8AARtABHMAAnw4uwABbggIAAoDAAJ8gwEVlAITAAJ8twEVlPgDAAIhiScAAn0EhHMAAn0mFwACfRcBFZU5IAQABKwDAAP91PgE9HMAAn1wuwABbfwMAA4XAAJ9xwEVlToDAAJ92wEVlABTAAJ+DwEVmSggAAMAAiGM/SsAAn50BFMAAn6TARWZKCAA/SsAAn7kBKwbAAIhigXPAAJ/NwACf2sAAoCgAAsAAW4IAAAABA8AAn+vAAKAoAAAAAgICwACgAgAAALnoYAPAAEfNAMAAoBwAAAClQGADwABOhQAAYAPAAEbQAAbAAIhjgXPAAKAtwACgMsAAoJUAAsAAW38AAAABA8AAoEbAAKCVAAAAAwMDwACgYgAAAJbNYAPAAKx+AMAAoHQAAACfH2ADwABG0ADAAKCLAAAAl61gA8AARtAAAFwAAABFY6wARWTIAEVm6wBFZz8ARWeeAAAABALAAIhmgXPAAKCawACgoMAAqMUDwABbrQAAAWABwACIXgAAAAEFwACIbYFzwACg1MAAoNrAAKDtAQAAA8AAoOvAAKDtAAAAAAAAAGADwACIZgE/AQkBwACg2sAAiGUAAAAABAbAAIhogXPAAKDywAChC8AAprQAAMAAW3EBasAAoPNgA8AA/2gCAAABA8AAoR7AAKa0AAAABgYGwAChNQAAALnoYAPAAEfNAMAAoU8AAACkgGADwABF6wDAAKF3AAAAt9ZgA8AAQqEAwAChlgAAALRZYAO6ggDAAKG5AAAApUBgA8AAToUAwACh4AAAAJbNYAPAAKx+AABgA8AARtABPghOwACh+MAAof0AAIXNYAPAAEbQARzAAKIRFsAAoguAwACh/8BFaFKCVcAARtZLAQABlADAAP7OTsAAoifAAKItAACFz2ADwABG0AEcwACiQRbAAKI7gMAAoi/ARWhSglXAAEbWSwEAAZUAwAD+zk7AAKJYwACiaAAAuotgA786ARbAAKJvhsAAomrARWi7uovAAEcQScAAooQiHMAAoo6HwACiiMBFaPK6rAAAAADAAEdNARbAAKL8HMAAoryGwACiqsBFaLu2fQEAARbAAKLahMAAos7ARWiQscbAAE6OAMAARzm1T78oPgNOwACjI8AAoy0AAJetYAPAAEbQARzAAKMvLsAAW4ICAAKAwACjQcBFaFKEwACjTsBFaJAAwACIaknAAKNiIRzAAKNqhcAAo2bARWigSAEAASsAwAD/dT4BPRzAAKN9LsAAW38DAAOFwACjksBFaKCAwACjl8BFaFIUwACjpMBFaaUJAADAAIhrP0rAAKO+ARTAAKPFwEVppQkAP0nAAKPaHMAAo+qEwACj3sBFaJC3XgIAAhbAAKQTgMAApAfARWhSpVLAAEfQFMAApB3ARWkpCAAAwABOqD4BSsAApDcBKz9OwACkZcAApG0AAL/yXQPAAP59AWADviUBHMAApIOEwACkd8BFaJC1fQIAAhbAAKSdgMAApJHARWhSpVLAAEfQFMAApKfARWkpCAAAwABOqknAAKWBHMAApZYUwAClhcBFaoYJAJaLAQABFsAApbcWwAClqITAAKWcwEVokLRZwABOjbLvuoYAwAD+kD4DTsAApe7AAKX4AACXrWADwABG0AEcwACl+i7AAFuCAgACgMAApgzARWhShMAAphnARWiQAMAAiGpJwACmLSEcwACmNYXAAKYxwEVooEgBAAErAMAA/3U+AT0cwACmSC7AAFt/AwADhcAApl3ARWiggMAApmLARWhSFMAApm/ARWsUCgAAwACIaz9KwACmiQEUwACmkMBFaxQKAD9KwACmpQErBsAAiGmBc8AAprnAAKblwACnFwAAnSgBasAAprpgA8AA/2gCAAABA8AApu7AAKcXAAAAAAAAAGADwABq8wE+AUrAAKb3AWrAAKcOYAPAAGvHwAEG2AbAAIhqgXPAAKccwACnNcAAqBgAAMAAW4IBasAApx1gA8AA/2gCAAABA8AAp0bAAKgYAAAAAgICwACnXQAAALnoYAPAAEfNAMAAp3cAAAClQGADwABOhQAAYAPAAEbQAT4BSsAAp4oBH8AAp5XAAEn6BAAEHMAAp7EWwACnq4DAAKefwEVsQoJVwABG1ksBAAGUAMAA/s4cwACnyBbAAKfCgMAAp7bARWxCglXAAEbWSwEAAZUAwAD+zhbAAKfhgMAAp9XARWxCpVLAAEfQFsAAqAsWwACn94HAAKfrwEVsUrHGwABOjoW9v0oABsAAiGuBc8AAqB3AAKguwACowwAAwABbfwFqwACoHmADwAD/aAIAAAEDwACoQsAAqMMAAAADAwPAAKheAAAAls1gA8AArH4AwACocAAAAJ8fYAPAAEbQAMAAqIcAAACXrWADwABG0AAAXAE+AT0cwAConIDAAKiYwEVtLsAAW64CAAImwACoqwGBwACoq8BFbT5gA8AAR80mwACotQGCwACotcBFbU5gA8AASfAAwACsnQAARWgaAEVrtQBFbAoARWz2AEVtqAAAAAQCwACIboFzwACoyMAAqM7AAKshA8AAW68AAAFgAcAAiF4AAAABBcAAiHSBc8AAqQDAAKkGwACpFwEAAAPAAKkVwACpFwAAAAAAAABgA8AAiG4BPwEJAcAAqQbAAIhlAAAAAAMGwACIcIFzwACpHMAAqUjAAKl5AACdKAFqwACpHWADwAD/aAIAAAEDwACpUcAAqXkAAAAAAAAAYAPAAGrzAT4BSsAAqVoBasAAqXFgA8AAa6PAAPyBBsAAiHGBc8AAqX7AAKmXwACqdgAAwABbggFqwACpf2ADwAD/aAIAAAEDwACpqMAAqnYAAAACAgLAAKm/AAAAuehgA8AAR80AwACp2QAAAKVAYAPAAE6FAABgA8AARtABPgFKwACp7AEfwACp98AAShUEAAQcwACqDxbAAKoJgMAAqf3ARW6xglXAAEbWSwEAAZQAwAD+zhzAAKomFsAAqiCAwACqFMBFbrGCVcAARtZLAQABlQDAAP7OFsAAqj+AwACqM8BFbrGlUsAAR9AWwACqaRbAAKpVgcAAqknARW7BscbAAE6Ohb2/SgAGwACIcoFzwACqe8AAqozAAKsfAADAAFt/AWrAAKp8YAPAAP9oAgAAAQPAAKqgwACrHwAAAAMDA8AAqrwAAACWzWADwACsfgDAAKrOAAAAnx9gA8AARtAAwACq5QAAAJetYAPAAEbQAABcAT4BPRzAAKr6gMAAqvbARW+dwABbsAIAAibAAKsHAYHAAKsHwEVvrWADwABHzSbAAKsRAYLAAKsRwEVvvWADwABKDQDAAKyeAABFbiQARW55AEVvZQBFcBcAAAADAsAAiHWBc8AAqyTAAKsqwACtjAPAAFuxAAABYAHAAIheAAAAAQXAAIh7gXPAAKtfwACrZcAAq3kBAAADwACrd8AAq3kAAAAAAAAAYAPAAIh1AT8BCQHAAKtlwACIZQAAAAADBsAAiHeBc8AAq37AAKuqwACr3gAAnSgBasAAq39gA8AA/2gCAAABA8AAq7PAAKveAAAAAAAAAGADwABq8wE+AUrAAKu8AWrAAKvTYAPAAGu1wAD8YwbAAIh4gXPAAKvjwACr/MAArN4AAMAAW4IBasAAq+RgA8AA/2gCAAABA8AArA3AAKzeAAAAAgICwACsJAAAALnoYAPAAEfNAMAArD4AAAClQGADwABOhQAAYAPAAEbQAT4BSsAArFEBH8AArFzAAEoDBAAEHMAArHcWwACscYDAAKxlwEVxHIJVwABG1ksBAAGUAMAA/s4cwACsjhbAAKyIgMAArHzARXEcglXAAEbWSwEAAZUAwAD+zhbAAKyngMAArJvARXEcpVLAAEfQFsAArNEWwACsvYHAAKyxwEVxLLHGwABOjoW9v0oABsAAiHmBc8AArOPAAKz0wACtigAAwABbfwFqwACs5GADwAD/aAIAAAEDwACtCMAArYoAAAADAwPAAK0kAAAAls1gA8AArH4AwACtNgAAAJ8fYAPAAEbQAMAArU0AAACXrWADwABG0AAAXAE+AT0cwACtYoDAAK1ewEVyCMAAW7ICAAImwACtcgGBwACtcsBFchhgA8AAR80mwACtfAGCwACtfMBFcihgA8AASfsAwACsnwAARXCPAEVw5ABFcdAARXKCAAAAAwLAAIh8gXPAAK2PwACtlcAAsBADwABbswAAAWABwACIXgAAAAEFwACIgoFzwACtz8AArdXAAK3uAQAAA8AArezAAK3uAAAAAAAAAGADwACIfAE/AQkBwACt1cAAiGUAAAAAAwbAAIh+gXPAAK3zwACuH8AArlgAAJ0oAWrAAK30YAPAAP9oAgAAAQPAAK4owACuWAAAAAAAAABgA8AAavMBPgFKwACuMQFqwACuSGADwABrvsAA/HIGwACIf4FzwACuXcAArnbAAK9dAADAAFuCAWrAAK5eYAPAAP9oAgAAAQPAAK6HwACvXQAAAAICAsAArp4AAAC56GADwABHzQDAAK64AAAApUBgA8AAToUAAGADwABG0AE+AUrAAK7LAR/AAK7WwABKDAQABBzAAK72FsAArvCAwACu5MBFc4eCVcAARtZLAQABlADAAP7OHMAArw0WwACvB4DAAK77wEVzh4JVwABG1ksBAAGVAMAA/s4WwACvJoDAAK8awEVzh6VSwABH0BbAAK9QFsAArzyBwACvMMBFc5exxsAATo6Fvb9KAAbAAIiAgXPAAK9iwACvc8AAsA4AAMAAW38BasAAr2NgA8AA/2gCAAABA8AAr4fAALAOAAAAAwMDwACvowAAAJbNYAPAAKx+AMAAr7UAAACfH2ADwABG0ADAAK/MAAAAl61gA8AARtAAAFwBPgE9HMAAr+GAwACv3cBFdHPAAFu0AgACJsAAr/YBgcAAr/bARXSDYAPAAEfNJsAAsAABgsAAsADARXSTYAPAAEoEAMAArKEAAEVy+gBFc08ARXQ7AEV07QAAAAMCwACIg4FzwACwE8AAsBnAALKFA8AAW7UAAAFgAcAAiF4AAAABBcAAiImBc8AAsFDAALBWwACwbAEAAAPAALBqwACwbAAAAAAAAABgA8AAiIMBPwEJAcAAsFbAAIhlAAAAAAMGwACIhYFzwACwccAAsJ3AALDTAACdKAFqwACwcmADwAD/aAIAAAEDwACwpsAAsNMAAAAAAAAAYAPAAGrzAT4BSsAAsK8BasAAsMZgA8AAa6zAAPyQBsAAiIaBc8AAsNjAALDxwACx1QAAwABbggFqwACw2WADwAD/aAIAAAEDwACxAsAAsdUAAAACAgLAALEZAAAAuehgA8AAR80AwACxMwAAAKVAYAPAAE6FAABgA8AARtABPgFKwACxRgEfwACxUcAASh4EAAQcwACxbhbAALFogMAAsVzARXXyglXAAEbWSwEAAZQAwAD+zhzAALGFFsAAsX+AwACxc8BFdfKCVcAARtZLAQABlQDAAP7OFsAAsZ6AwACxksBFdfKlUsAAR9AWwACxyBbAALG0gcAAsajARXYCscbAAE6Ohb2/SgAGwACIh4FzwACx2sAAsevAALKDAADAAFt/AWrAALHbYAPAAP9oAgAAAQPAALH/wACygwAAAAMDA8AAshsAAACWzWADwACsfgDAALItAAAAnx9gA8AARtAAwACyRAAAAJetYAPAAEbQAABcAT4BPRzAALJZgMAAslXARXbewABbtgIAAibAALJrAYHAALJrwEV27mADwABHzSbAALJ1AYLAALJ1wEV2/mADwABKFgDAAKygAABFdWUARXW6AEV2pgBFd1gAAAADAsAAiIqBc8AAsojAALKOwAC3pQPAAFu3AAABYAHAAIe6AAAAAQXAAIiPgXPAALLJwACyz8AAsuYBAAADwACy5MAAsuYAAAAAAAAAYAPAAIiKAT8BCQHAALLPwACHwwAAAAACBsAAiIyBc8AAsuvAALMXwACzTgAAnSgBasAAsuxgA8AA/2gCAAABA8AAsyDAALNOAAAAAAAAAGADwABq8wE+AUrAALMpAWrAALNAYAPAAGvfwAFCAgbAAIiNgXPAALNTwACzbMAAt6MAAMAAW3EBasAAs1RgA8AA/2gCAAABA8AAs3/AALejAAAABgYGwACzlgAAALnoYAPAAEfNAMAAs7AAAACkgGADwABF6wDAALPYAAAAt9ZgA8AAQqEAwACz9wAAALRZYAO6ggDAALQaAAAApUBgA8AAToUAwAC0QQAAAJbNYAPAAKx+AABgA8AARtABPgNOwAC03sAAtOcAAIWXYAPAAEbQARzAALT1gMAAtOnARXhdupgBAAGEwAC1BcBFeJsAwABH3EnAALUXFsAAtWYcwAC1LYbAALUbwEV4xrZ8AQABFsAAtUiEwAC1PMBFeJuxxsAATo4AwABHOLVPvyg+Az0cwAC2OS67EAEAAYDAALZNwEV4XQDAAIe+ScAAtmEWwAC2xhzAALaIFsAAtngWwAC2cYDAALZlwEV4XYJVwABG1oHqwAD+pLZyAQABFsAAtqaEwAC2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AIkKwAFnUgGXUmqXUmADwAEAAsAAnY8APgFKl2ABapdnYAPAAIkKwAFnaQGXeGqXeGADwAEAAsAAnY0APgFKl4UBapeMYAPAAIkKwAFngAGXm2qXm2ADwAEAAsAAnZgAPgFKl6gBapevYAPAAIkKwAFnlwGXv2qXv2ADwAEAAsAAnZUAPgFKl8wBapfTYAPAAIkKwAFnxQGX42qX42ADwAEAAsAAnZIAPgFKl/ABapf3YAPAAIkKwAFnrgABPgFKmBIBKwbAAIkrgXaYSJhenYgAAcAAXBoAAAABA5hmnYgAAAABAQGYegAAAIJrYAPAAIjqAABgA8AAiQoBPgFHmIaAmI7ARbm6FgGYtGqYtGADwACI6sABBAkAPgFKmMABapjHYAPAAIkKwAFmJwGY6WqY6WADwACI6sABBCAAPgFKmPkBapkAYAPAAIkKwAFmPgGZJmqZJmADwACI6sABBhIAPgFKmTUBapk8YAPAAIkKwAFmVQGZYWqZYWADwACI6sABBTAAPgFKmW4Bapl1YAPAAIkKwAFmmgGZmGqZmGADwACI6sABBUgAPgFKmaUBapmsYAPAAIkKwAFmsQGZz2qZz2ADwACI6sABBeAAPgFKmdwBapnjYAPAAIkKwAFm3wGaBmqaBmADwACI6sABBWAAPgFKmhQBapobYAPAAIkKwAFmyAGaP2qaP2ADwACI6sABBQEAPgFKmkwBappTYAPAAIkKwAFmbAGadmqadmADwACI6sABBRgAPgFKmoMBapqKYAPAAIkKwAFmgwGarWqarWADwACI6sABBLcAPgFKmroBaprBYAPAAIkKwAFm9gGa5Gqa5GADwACI6sABBM8APgFKmvEBapr4YAPAAIkKwAFnDQGbG2qbG2ADwACI6sABBOcAPgFKmykBapswYAPAAIkKwAFnJAGbVGqbVGADwACI6sABBawAPgFKm2IBaptpYAPAAIkKwAFnOwGbjWqbjWADwACI6sABBXoAPgFKm5kBapugYAPAAIkKwAFnUgGbwmqbwmADwACI6sABBcYAPgFKm9ABapvXYAPAAIkKwAFnaQGb+2qb+2ADwACI6sABBZIAPgFKnAcBapwOYAPAAIkKwAFngAGcMGqcMGADwACI6sABBIUAPgFKnD0BapxEYAPAAIkKwAFnlwGcZ2qcZ2ADwACI6sABBGsAPgFKnHQB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AIl4wACJkkgBAAErAMAA/3U+AT0XsQsuwABcP8AAiXgcsTcuwABcU8AAiXgAAAAAwACJnMAAiZI/SrFrARaxci7AAFw/wACJeMAAiZIGwACJnIFHsZqxprOiAADAAFxTwACJeAAAAAEDscyzogAAAAAAAABgA74TAT4GSbHVFrHZLreswACJqz4BSrH7ARayAi6aJsAAiZU/SbIRIRayFi6qlMAAia8+AUqyLgErP06yWAAAAJtrYAPAAImJAEayZrKZsn4AAACD82ADwACJiQAWsoYuwABcQcAAiXjAAImUPgFJsqEWsqqBsqXARerPqpTAAImvPgFJssQcstGAssjAReq8SAEAASsAwAD/dT4BPYiy5sBF6ryBsvHARerPPgFKsxIBFrMZLpomwACJlT9JszohHLNHgLM+wEXqvEgBAAErAMAA/3U+AUqzWAEcs2iAs1/AReq8t4UAAAAAwACJpD9Ks5QBFrObLpomwACJlQbAAImlgUezp7OsuqIAAIQxAAAAAQOzs7qiAAAABQICs8EAAACD6WADwAEATACzzAAAAIPiYAPAAQACAAOz5QAAAMAAUD9gA8AA/FUBarP3YAPAAPxVALQJAAAAvNZgA8AA/FUBarQRYAPAAPxVd7QpAAAAwABQQGADvhMBagBgA8AA/yV5XAE+CU+0P7REAAABwABcVGEDAWADvhNgA8AA/FUAA7RPtSwAAAABAQG0XAAAAMAAXFVgA74TAABgA8AA/FUBPgFKtG8BKT0ctTaAtTPAReuego4BAAGBtTzAReusAMABAGBJtU4WtVYWtVIumibAAImVhB++Fz4BPRy1bYC1asBF656CjgEAASfAAFxWAMABAGA/PRy1joC1i8BF656CjgEAASS1qAMnqWYWtaEWtZ0umibAAImVgL2+ASeC6gDAAQBgSbWvFrWzLrzqwACJqT4BPRy11oC108BF656CjgEAASe84wDAAQBgP0m19Ba1+C7AAFARwACJrD4BPRy2HYC2GsBF656CjgEAASfAAFxXAMABAGA/SbY9FrZBLrzrwACJqj4BPRy2ZoC2Y8BF656CjgEAASe85QDAAQBgPz0ctomAtobAReuego4BAAEnwABEVQDAAQBgSbaaFrawFraeLsAAXEHAAIl4wACJlIFVwAD+oT4BPRy2xIC2wcBF656CjgEAASeZ8wDAAQBgPgVOtuu29gAAwABQLlsBFrb4LsAAXEHAAIl4wACJlEm3EYO3FcBF69U+AT2OtyfARe2WNbdGAAABAF0DwAD+vwFgA8AAiYkBHLdGFrc0LsAAXEHAAIl4wACJlICtAAAAAMAA/pM1AAAAAQBbARy3W4e3WcBF7ceArgEAATS3YAO3YLepAAAAAgICt2EAAACB12ADwACJiQC3ZAAAAIJOYAPAAImJAABgA8AA/hsBPgFKt3UBHLeHFreCFrd+FLd8wEXuHQgAmibAAImVgL2+AYJPAQABFreXFreTFLeRwEXuKwkAmibAAImVgL2+AQDAAQASAMAA/tKHAMBF7cc/Tre/t8oAALzxYAPAAPxVASpGt9kAAAAAAQBbACa3+gGGt/rARe2WXQPAAP59AVs+Ak638QAAAIRbYAPAAImJASa32QEUt/HARe6nCABgA8AAiYlBPgVJuBAigrgUwEXruwAhFrgvFLgpwEXuxAkAqpTAAImvPgFCuEsAP0m4ZyIhHLh5hLhrwEXr7UgBAAErAMAA/3UAIRy4lxS4kcBF7sQJAMAAUDECAAKFuKPARewLGrjDwACJjgDAAImiPgFCuNUAP0m48Ye49cBF7pM+AT0cuRCAuQ3AReuego4BAAEnwABcWADAAQBgPgE9HLk8gLk5wEXrnoKOAQABJ4CvAMABAGA9HLlhFLlbwEXuxAkAhDEFAAKAuWnAReueJLl9AoG5b8BF66wng+EDwABQP4K5ncBF67u81oO5w8BF69XAAFBAhLnmwEXr7cAAiaU9j7n+wEXukylJuh+HuiPARe6TPgI9HLo8gLo5wEXrnoKOAQABJ4CvAMABAGA9HLpUgLpRwEXrnoKOAQABJLppAoG6XMBF66wnmfMAwAEAYD4BPRy6hoC6g8BF656CjgEAASeZ8wDAAQBgBsAAiaaBR7qnuq67yQAAtLIAAAABA7qyu8kAAAADAAADusIAAACD4mADwAEAAgFqus9gA8ABAAKEKLreAAAAwABQP2ADwAD8VQFquvBgA8AA/FUAuwkAAADAAFBAYAO+EwFqAGADwAD/JXlgA8ABAAIBPgNOuyy7LwAAg+lgA8ABAEwBH7s1wAEAawAAAAA9HLtJLoQxBAACg7tRwEXwwIC7VcBF8GwCwABQP4G7fMBF8IXAAFBAgrudwEXwn8AAiaVKu7EBHLu7g7u4wEXwwCMAAAAAwAEAZQbAAImngUe7zrvhu/0AACMBarvPYAPAAP9oAgAAAQO76bv9AAAAAAAAAGADwAEAAgFKu+8BHLvzFrvvLpomwACJlSMAAAAAwAD/dgAARdhgAEXZ5ABF2joARdq7AEXbEQBF25IARdvUAEXdtwBF3gMARd5BAEXf4gBF4kAAReOgAEXkJABF5GkAReU9AEXlkABF5dQAReZXAEXnhQBF6cEARepZAEXrfgBF8EsARfEkAEXxbwAAABkCwACJt4FHwABByMAAQc7AAHbiA5wSAAABYAHAAP9oAAAFBMAAibmBR8AAQk7AAEJfBoPsAGADwAEAAgFqwABCVGADwAEAAsABaIcEwACJuoFHwABCfcAAQoEJg/MAYAPAAImJAATAAIm8gUfAAEKRwABCrxjAAFxawACJeABgA74TASsEwACJvYFHwABFTMAARVUYwABcW8AAiXgAXQPAAP6/AWADwACJiQErBMAAib6BR8AARy3AAEc/GMAAXFzAAIl4AF0DwAD+vwFgA8AAiYkBKwEFwACJ2YFHwABHRMAAR0TAAEdXAAAAA8AAR0zAAEdXAAAAAQEBwABHUgAABIPzYAPAAImJAABgA8AAibcBPwIIAcAAibqAAMBF8tYJAcAAR0TAAP9+AAAAABUGwACJwIFHwABHksAAR5rAAEnhBAGwDwAAAAEDwABHtcAASeEAAAACAgLAAEfIAAAAg0pgA8AAXqUAwABH9QAAAMAAXEtdA8AA/vECYAO+E2ADwACJiQAAYAPAAIm3AT4GPRzAAEgLgMAASATARfM1gpgBAAFqwABIEWADwAEAAsABaIcAwABep07AAEguwABIMwAAg/NgA8AAiYkBHMAASDyBwABINcBF80VLAQABHMAASESAwABIPcBF8zWZHQAAAADAAF7XAMAA/wVOwABIb8AASHgAAJugXQPAAP6/AWADwACJiQEcwABIgYDAAEh6wEXzNbApAgFgA8AAiYkBNMAASIoDwABIisAASL4AAAAAAAAAYAPAAImJAT4BSsAASJUBHMAASKOBwABInMBF80VLAQABHMAASKuAwABIpMBF8zWZHQAAAADAAF7XAMAA/wUBsCopwABesk7AAEjxwABJAwAAwABcXV0DwAD+vwFgA8AAiYkBHMAASQyAwABJBcBF8zWwKQIBYAPAAImJATTAAEkVA8AASRXAAElJAAAAAAAAAGADwACJiQE+AUrAAEkgARzAAEkugcAASSfARfNFSwEAARzAAEk2gMAASS/ARfM1mR0AAAAAwABe1wDAAP8FAbAqKcAAXrI9HMAASWqAwABJY8BF8zWCkAEAAWrAAEluYAPAAQACwAFohwDAAF6oSsAASXgBNcAASYMAAAEAYAPAAIm3AR/AAEmDwACJ2QEAAYLAAEmMwEXzlQA1AAAAAQBbARfAAEmahcAASZjARfUmwABcW8AAiXiDwABJpsBF89jAAIm9NQAAAAEAWwEXwABJt4XAAEm1wEX1JsAAXFzAAIl4hMAASczARfRnwACJvoUAwEX1JgbAAInCgUfAAEoSwABKF8AAS3IAALAQAAAAAQPAAEomwABLcgAAAAEBAcAASjAAAACEQGADwABeVgAAXAE+BT0cwABKQYDAAEo8wEX10YKYAQABasAASkdgA8ABAALAAWiHAMAAXls9HMAASlaAwABKUcBF9dGwuAEAARbAAEpmFsAASmEug/PAAIm6mibAAImVAMAAXoQ9HMAASnWAwABKcMBF9dGIeAMBYAPAAImJAhbAAEp/LsAAXFvAAIl4wACJvTTAAEqKA8AASorAAErMAAAAAQEBwABKngAAAIPzYAPAAImJAABgA8AA/yUBPgE9HMAASrGAwABKrMBF9dGwuAEAARbAAErBgcAASrzARfZ+mibAAImVAMAAXoQBmAgpwABeXz0cwABK6YDAAErkwEX10Yh4AwFgA8AAiYkCFsAASvMuwABcXMAAiXjAAIm+NMAASwcDwABLB8AAS0kAAAABAQHAAEsbAAAAg/NgA8AAiYkAAGADwAD/JQE+AT0cwABLLoDAAEspwEX10bC4AQABFsAASz6BwABLOcBF9w2aJsAAiZUAwABehAGYCCnAAF5fPRzAAEtmgMAAS2HARfXRgpABAAFqwABLamADwAEAAsABaIcAwABeXAbAAInTgUfAAEt3wABLh8AAS5YBAJomAAAAAQPAAEuLwABLlgAAAAAAAABgA74TAUrAAEuOARbAAEuTFsAAS44ug/PAAIm6mibAAImVBsAAicOBR8AAS9fAAEvcwABMHAAAwABQLAAAAAEDwABL58AATBwAAAABAQHAAEv7AAAAg9tgA8AAiYkAAGADwAD8VQFKwABMBQEcwABMChbAAEwFLoPzwACJusAAUCwBAAGAwABMFsBF9/0AwACJoAbAAInEgUfAAExcwABMYcAATWMAAMAAUCsAAAABA8AATGvAAE1jAAAAAQEBwABMfwAAAIPbYAPAAImJAABgA8AA/FUBPgNJwABMjBzAAEyQLsAAUCwBAAGAwABMnMBF+G0AwACJw0rAAEykASk/ScAATLUhHMAATMMWwABMuS7AAFxbwACJeMAAib1IAQABKwDAAP7pPgFGwABM1MAATQbAAEzsAAAAwABY7WADwACJiQAWwABM+y7AAFxbwACJeMAAib0+AUnAAE0QHMAATSCBwABNFMBF+OHAAFAsAQABgMAATSzARfhtAMAAiaBKwABNNAEpPz9KwABNUwEqBsAAidSBR8AATa3AAE21wABPAgEAwABQMwAAAAEDwABNzsAATwIAAAAAAAAAYAPAAP4bAT4DTsAATdjAAE3eAACA7mADwAD+GwEWwABN5RbAAE3gLoPzwACJusAAUDDAAImtScAATgQhHMAAThIWwABOCC7AAFxbwACJeMAAib1IAQABKwDAAP7pPgFGwABOI8AATlXAAE47AAAAwABY7WADwACJiQAWwABOSi7AAFxbwACJeMAAib0+AknAAE5fFsAATm+BwABOY8BF+dS3rMAAias+AT2IwABOlcBF+XYcwABOmoDAAE6VwEX5dmQBAAGUAMAA/0E/PYjAAE6wwEX5dhzAAE62gMAATrDARfl2ZAEAARbAAE7FgcAATrnARfnUwABQMMAAia0AwAD/QT9KwABO8gGAwABO+cBF+XYGwACJ1YFHwABPYcAAT2rAAFBOAQDAAFA6AAAAAQPAAE+IwABQTgAAAAAAAABgA8AA/FUBPgJJwABPjiEcwABPnBbAAE+SLsAAXFvAAIl4wACJvUgBAAErAMAA/uk+AUbAAE+twABP38AAT8UAAADAAFjtYAPAAImJABbAAE/ULsAAXFvAAIl4wACJvT4BScAAT+kWwABP+YDAAE/twEX656qUwACJrz4BSsAAUBUBKj8/SsAAUD8BKQbAAInWgUfAAFEjwABRRMAAUYsBAMAAWO4AAAABA8AAUVHAAFGLAAAAAAAAAF0DwAD+fQFgA8AAiYkBPgFKwABRVwE1AAAAAQBdA8AA/r8BYAPAAImJARbAAFFeLsAAXFvAAIl4wACJ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AMAAQ90AACCDq2ADiUkAwABD8gAAAMAAXMpgA4juAMAARAwAAACFhWADwACK/QAAYAPAAPxVAT4BSsAARCkBHMAARDaEwABEMMBGx6e/OgIAAhbAAERVgMAAREjARsdrhquJiILAAERkwEbHiQDAAIsBBsAAiyaBfcAARG/AAESAwABFUQAAwABc0AFqwABEcGADwAD/aAIAAAEDwABElsAARVEAAAAFBQXAAESpAAAAiHtgA4mEAMAARLgAAADAAFzJYAOI7gDAAETZAAAgg6tgA4lJAMAAROgAAADAAFzKYAOI7gDAAET8AAAAhYVgA8AAiv0AAGADwAD8VQE+AUrAAEUZARzAAEUmhMAARSDARshuvzoCAAIWwABFRBbAAEU6gMAARTjARsgygO2Jh4WHiZuCwABFS8BGyFAAwACLAQbAAIsngX3AAEVWwABFZ8AARiMAAMAAXNIBasAARVdgA8AA/2gCAAABA8AARXfAAEYjAAAABQUFwABFhAAAAIh7YAOJYwDAAEWTAAAAwABcyWADiO4AwABFrgAAIIOrYAOJSQDAAEXDAAAAwABcymADiO4AwABF1wAAAIWFYAPAAIr9AABgA8AA/FUBPgFKwABF8wEcwABGAITAAEX6wEbJPr86AgACFsAARhSAwABGEsBGyQKGholrgsAARh3ARskgAMAAiwEGwACLKIF9wABGKMAARjnAAEbAAADAAFzMAWrAAEYpYAPAAP9oAgAAAQPAAEZGwABGwAAAAAUFBcAARlAAAACIe2ADiR8AwABGXwAAAMAAXMlgA4juAMAARnoAACCDq2ADiUkAwABGjwAAAMAAXMpgA4juAMAARqMAAACFhWADwACK/QAAYAPAAPxVAT4BSsAARrABKgAARrzcAEbFNABGxgcARsacAEbHMwBGx/oARsjKAEbJkQBGyiYAAAAIAsAAiyuBfcAARsXAAEbLwABNswPAAFzqAAABXQHAAIsHAWADiYQAAAABBcAAizaBfcAARxDAAEcWwABHMAEAAAPAAEcuwABHMAAAAAAAAABgA8AAiysBPwEJAcAARxbAAIsSAAAAAAgGwACLLYF9wABHNcAAR0bAAEg8AADAAFzQAWrAAEc2YAPAAP9oAgAAAQPAAEdcwABIPAAAAAUFBcAAR28AAACIe2ADiYQAwABHfgAAAMAAXMlgA4juAMAAR6QAACCDq2ADiYQAwABHswAAAMAAXMpgA4juAMAAR8cAAACFhWADwACK/QAAYAPAAPxVAT4BSsAAR9QBIhzAAEfnFsAAR92AwABH28BGyu+A7YmHSAEAARbAAEfsgsAAR+rARssNgO2JhwDAAP91ARzAAEgbhMAASBXARssrvzoCAAIWwABIL4DAAEgtwEbK74WHiZKCwABINsBGyw0AwACLAQbAAIsugX3AAEhBwABIUsAASUkAAMAAXNEBasAASEJgA8AA/2gCAAABA8AASGfAAElJAAAABQUFwABIgQAAAJdYYAOJhADAAEihAAAAwABc2WADiO4AwABI0gAAIIOrYAOJhADAAEjnAAAAwABcymADiO4AwABJAQAAAIWFYAPAAIr9AABgA8AA/FUBPgFKwABJDgEcwABJLBbAAEkigMAASRXARsvqgO2Jh0gBAAEWwABJMYLAAEkvwEbMCIDtiYcAwAD/dQbAAIsvgX3AAElOwABJX8AASiMAAMAAXM4BasAASU9gA8AA/2gCAAABA8AASXHAAEojAAAABQUFwABJgAAAAIh7YAOJNwDAAEmPAAAAwABcyWADiO4AwABJtQAAIIOrYAOJhADAAEnEAAAAwABcymADiO4AwABJ2AAAAIWFYAPAAIr9AABgA8AA/FUBPgFKwABJ5QEcwABJ+BbAAEnugMAASezARsywhO+JPUgBAAEWwABKCxbAAEoBhMAASfvARszsh4nAAIr/my/AAFHuAMAA/3UGwACLMIF9wABKKMAASjnAAErLAADAAFzLAWrAAEopYAPAAP9oAgAAAQPAAEpJwABKywAAAAUFBcAASlYAAACIe2ADiRMAwABKZQAAAMAAXMlgA4juAMAASosAACCDq2ADiYQAwABKmgAAAMAAXMpgA4juAMAASq4AAACFhWADwACK/QAAYAPAAPxVAT4BSsAASrsBKgbAAIsxgX3AAErQwABK4cAAS3UAAMAAXM8BasAAStFgA8AA/2gCAAABA8AASvLAAEt1AAAABQUFwABLAAAAAIh7YAOJSQDAAEsPAAAAwABcyWADiO4AwABLNQAAIIOrYAOJhADAAEtEAAAAwABcymADiO4AwABLWAAAAIWFYAPAAIr9AABgA8AA/FUBPgFKwABLZQEqBsAAizKBfcAAS3rAAEuLwABMRwAAwABczQFqwABLe2ADwAD/aAIAAAEDwABLnMAATEcAAAAFBQXAAEuyAAAAwABGemADiTcAwABLzgAAAMAAXNpgA4juAMAAS/sAACCDq2ADiYQAwABMEAAAAMAAXMpgA4juAMAATCoAAACFhWADwACK/QAAYAPAAPxVAT4BSsAATDcBKgbAAIszgX3AAExMwABMXcAATQ8AAMAAXNIBasAATE1gA8AA/2gCAAABA8AATG3AAE0PAAAABQUFwABMegAAAIh7YAOJYwDAAEyJAAAAwABcyWADiO4AwABMrwAAIIOrYAOJhADAAEy+AAAAwABcymADiO4AwABM0gAAAIWFYAPAAIr9AABgA8AA/FUBPgFKwABM3wEcwABM7ITAAEzmwEbPgL86AgACFsAATQCAwABM/sBGz0SGholrgsAATQnARs9iAMAAiwEGwACLNIF9wABNFMAATSXAAE2xAADAAFzMAWrAAE0VYAPAAP9oAgAAAQPAAE0ywABNsQAAAAUFBcAATTwAAACIe2ADiR8AwABNSwAAAMAAXMlgA4juAMAATWsAACCDq2ADiYQAwABNgAAAAMAAXMpgA4juAMAATZQAAACFhWADwACK/QAAYAPAAPxVAT4BSsAATaEBKgAARsq3AEbLsgBGzHgARs1LAEbN4ABGznUARs8MAEbP0wBG0GgAAAAIAsAAizeBfcAATbbAAE28wABUqwPAAFzrAAABXQHAAIsHAWADiWMAAAABBcAAi0KBfcAATfXAAE37wABODwEAAAPAAE4NwABODwAAAAAAAABgA8AAizcBPwEJAcAATfvAAIsSAAAAAAgGwACLOYF9wABOFMAATiXAAE7VAADAAFzOAWrAAE4VYAPAAP9oAgAAAQPAAE43wABO1QAAAAUFBcAATkYAAACIe2ADiTcAwABOVQAAAMAAXMlgA4juAMAATnUAACCDq2ADiWMAwABOhAAAAMAAXMpgA4juAMAATpgAAACFhWADwACK/QAAYAPAAPxVAT4BSsAATqUBHMAATrKEwABOrMBG0W2/OgIAAoDAAE7EwEbRMRbAAE7JgsAATsfARtFPhoaJawDAAIsBBsAAizqBfcAATtrAAE7rwABPlwAAwABcywFqwABO22ADwAD/aAIAAAEDwABO+8AAT5cAAAAFBQXAAE8IAAAAiHtgA4kTAMAATxcAAADAAFzJYAOI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BsAAjBuBgcAASCfAAEg4wABInQAAokkBasAASChgA8AA/2gCAAABA8AASEbAAEidAAAAAgICwABITQAAAKJKYAOfIgDAAEhcAAAAoktgA58iAABcAT4BPTUAAAABAGADwABYcwEWwABIbS6qHcAAi4gjHMAASHeCAMBHRnFIAQABKwAAKxzAAEh3ggDAR0ZxokkCAAKAwABIhsBHRk6BwABIj8BHRlwAwABY3AFcBsAAjByBgcAASKLAAEizwABJFgAAo1IBasAASKNgA8AA/2gCAAABA8AASNDAAEkWAAAAAQEBwABI1wAAAJKpYAOfIgAAXAE+AT01AAAAAQBgA8AAWHMBFsAASOQuqh3AAIuIIxzAAEjugQDAR0cRSAEAASsAACscwABI7oEAwEdHEaNSAQABgMAASQzAR0b8AMAAWOsBXAbAAIwdgYHAAEkbwABJLMAASZMAAMAAQIQBasAASRxgA8AA/2gCAAABA8AASTXAAEmTAAAAAgICwABJPAAAAMAAQIVgA58iAMAASVEAAACiPGADnyIAAFwBPgE9NQAAAAEAYAPAAFhzARbAAEliLqodwACLiCMcwABJbIIAwEdHukgBAAErAAArHMAASWyCAMBHR7rAAECEAgACgMAASXbAR0eVgcAASYXAR0elAMAAWOMBXAbAAIwegYHAAEmYwABJqcAASgoAAKJeAWrAAEmZYAPAAP9oAgAAAQPAAEnBwABKCgAAAAEBAcAAScgAAACiX2ADnyIAAFwBPgE9NQAAAAEAYAPAAFhzARbAAEnZLqodwACLiCMcwABJ44EAwEdIXEgBAAErAAArHMAASeOBAMBHSFyiXgEAAYDAAEn8wEdIRwDAAFjtAVwGwACMH4GBwABKD8AASiDAAEplAAChhAFqwABKEGADwAD/aAIAAAEDwABKLsAASmUAAAABAQHAAEo1AAAAkqlgA58iAABcAT4BPTUAAAABAGADwABYcwEWwABKQi6qHcAAi4gjHMAASkyBAMBHSPNIAQABKwAAKxzAAEpMgQDAR0jzoYQBAAGAwABKW8BHSN4AwABY9QFcBsAAjCCBgcAASmrAAEp7wABK+AAAoYEBasAASmtgA8AA/2gCAAABA8AASorAAEr4AAAAAwMDwABKjwAAAIDuYAPAAP4bAMAASpwAAACfw2ADnyIAwABKrgAAAJ1w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QjvAAFmuwABCWAEAAYDAAIefwEhK3gDAAI1JAABISqYASE3fAAAAAQLAAI3+gYjAAIfiwACH6MAAjgQDwABdVAAAAWABwABawAAAAAEFwACOAoGIwACIL8AAiDXAAIjMAQAAA8AAiF3AAIjMAAAAAAAAAGADwACN/gE/AQkAwACIaMAAWvkDAAEnwABDswKiCCnAAEO8KgEGwACOAIGIwACI0cAAiOPAAI4CAADAAEJqAWrAAIjSYAPAAP9oAgAAAQPAAIjzwACOAgAAAAICAsAAiPoAAACSqWADnyIAwACJCAAAAKGvYAPAAFmjAABgA58iAT4FTsAAiRzAAIknAACd92ADnyIBFsAAiS+AwACJKcBITpSDtZ89QCEcwACJUBbAAIlLgsAAiUDASE67gmufOkgBAAFqwACJU2ADwAD+G8AAnE4AwAD/P8AAiUDAAIljAEnAAIlqFsAAiX4WwACJeYLAAIluwEhOu4KUn0KdxZ/PPgFKwACJkAGCwACJl8BITrs/ScAAikEiIiIewACKRcAAjXQBAAGCwACKbcBITrsAAR7AAIqEwACNcwEAAYLAAIqkwEhOuwABHsAAirvAAFq/AQABgsAAitPASE67AAEewACK6sAAWzICAAKCwACK98BITrtqwACLA10DwAD+vwFgA8ABAALAAWynAD4CPRzAAIskgcAAix3ASE6iwABCSAIAAoLAAItPwEhOu2rAAIthXQOR0QFhAwFgA58iYAORurQ1AMAAWns9isAAi4TASE67HMAAi6EWwACLmIHAAIuRwEhOosAAQjvAAFmuwABCWAEAAYDAAIu7wEhOlADAAI1JScAAi84WwACL4hbAAIvdgsAAi9LASE67gpSfQp3En8s+AT0cwACL/IHAAIv1wEhOosAAQkgCAAKCwACMJ8BITrtqwACMOV0DkdEBYQMBYAOfImADkbqPOwDAAFp7PgI9HMAAjHyBwACMdcBITqLAAEJIAgACgsAAjKfASE67asAAjLldA5HRAWEDAWADnyJgA5G6tDUAwABae0nAAIzcIRbAAIzsgsAAjOHASE67nc+fMz4BPYrAAI2XwEhOuxzAAI20FsAAjauBwACNpMBITqLAAEI7wABZrsAAQlgBAAGCwACNzsBITrsAwACNST9KwACN7QGCwACN9MBITrsAAEhOXABIUTgAAAABAAAD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/pNOpcel2gAAwABdlWADwAD8VQEiFqX7FqXkLri2wACOA8AAjg/AAFR/wAB8aAEWpjMWpicuwABJQsAAjgPAAI4RwABNJsAAbCRAIiGHplTASGZjARameIGmasBIY32Dt8AA/qKmU6aCAE6moqatAADAAF2WXQPAAP6/AWADwABlcgExpq9gA8AAZXIBFqa2FqawLrjzwACOA8AAjhue0cAAXiNJps4lptkWptIuuLfAAI4DwACOGmADwABlcj4CTqb7pwsAAMAAXZdgA8AAZZMBFqcNLri3wACOA8AAjho9HKcmFKcbwEhmywgAVgEAASanOgAUpyrASGchCQBgA8AAZXIAwAD+0D9Kp1wBH6dnwACPTgkABoWnb8BIZV+Gp3rASGYfHKeDLsAAXZjAAI4DAAAAAMAAjjQcp5wuwABdmcAAjgMAAAAAwACONRanwBanui6488AAjgPAAI4bntHAAF4jFKfTwEhmywgAA8AAXZWHp/vASGZjwABdmhaoPRaoMy6oQMAAjivAAF2awACObcAAXZshHKiKFqh5LsAAXXPAAI4DwACOKkgBAAErAMAA/3UGwACOMoGJqJuooKjcAADAAF2SwACOAwAAAAEDqLGo3AAAAAAAAABcAT4BPRyoui7AAF2cwACOAwAAAADAAI5LBsAAjjOBiajhqOay3AAAwABddsAAjgMAAAABA6kAstwAAAAAAAAAXAE+Ak6pDakiAADAAF2dYAPAAQACARapLRapJC6zBMAAjgPAAI4JgrOBV0mpTiEcqWeAqVLASGiBSAEAASsAwAEAET4KTqpQqloAAMAAXZ5dA8AA/7MBYAPAAQACARyq5TGqXGADwAEAAgQnnzgnnzUnwABdnyefN5VxAAAAAMAA/pROq2GrZgAAgb1gA8AA8NUBHqtswADw1wEAAYCrccBIaIEASawyIRysPIKsN8BIaQCDoQAAAADAAPIVPgI9HKxeFqxULqURwACOA8AAjgqWzQEAASSslgInwABdoICsgcBIaIEAtuJKrKEAP0mstxyszRyswIKsu8BIaQCDowAAAADAAPDiSAEAAZMAwAD/Pz4CPRys5xas3S6lEcAAjgPAAI4Kls0BAAEnwABdoQC24kqtKQA/Tq1HrUwAABJgA8ABAAIBHK1tHq1SwADw1wEAAYCtV8BIaIEAwABdogAAAADAAPDy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2BzAAEO6HMAAQ5kWwABDiC7AAFjiwACOA8AAjiDAAFkCAQFgA743AYHAAEOlwEh2tADAAIovgKsBAWADwACPkAEWwABDvi7AAF21wACOA8AAjj0AwAD+iIGlAQABNMAAQ94DwABD3sAAQ/YAAAABAQHAAEPfAAAAhJtgA8AAj5AAAGADwAD8VQFKwABD6QEhHMAAQ++CwABD6cBIeGVIAQABKwDAAP91AMAA/omArQEAAAGFdirAAP6TBsAAjj2BicAAREfAAERTwABHfwAAwABdtcAAjgMAAAABA8AARGLAAEd/AAAAAQEBwABEbwAAAJZ7YAO+NwAAYAPAAI+QAT4FTsAARIzAAESRAACCl2ADwACXEAEcwABEoRbAAESTLsAAXWzAAI4DwACOGUsBAAGAwABEosBIeN4AwAD/BUnAAEVMHMAARVWBwABFUMBIePdIAQABKwDAAP91SsAARV4BKz9OwABFeMAARX0AAIC9YAPAAJcaARzAAEWGFsAARX8uuLfAAI4DwACOGrCOAQABgMAARaLASHjeAMAAZgtOwABFuMAARcMAAMAAST5gA8AAlxoBHMAARcwWwABFxS64t8AAjgPAAI4asIgBAAGAwABF4MBIeN4AwABmJkrAAEbnAR/AAEbywACPnQcABYDAAEcHwEh43oLAAEcQwEh5WYPAAEcWwEh5lRzAAEciLsAAXX/AAI4DAAAAAMAAjlGBwABHQMBIePcChCAhFsAAR2CAwABHWMBIeN6s4L4wwABOrykGwACOPoGJwABHhMAAR5LAAEjvAADAAF2qwACOAwAAAAEDwABHocAASO8AAAABAQHAAEevAAAAwABdqGADwACOkwAAXQPAAP6/AWADwACPhQE+BE7AAEfRwABH2wAAhvVdA8AA/r8BYAPAAI+FAR7AAEfhwAD4FgEBYAPAAI+FARbAAEf8gMAAR+/ASHppYcAAjqIATsAASA3AAEgTAACA7mADwAD+GwGTPRzAAEgpgMAASBzASHppg/0BAAE0wABIMQPAAEgxwABI1AAAAAMDA8AASEAAAACESGADvgQAwABIWwAAAISIXQPAAP6/AWADvhMAwABIfwAAAISUXQPAAP6/AWADviUAAGADwAD/JQE+AT0cwABImYHAAEiQwEh6jYC/AgACNQAAAAEAYAPAAP4bAYLAAEiawEh6zjUAAAABAGADwAD+GwGKwABImsBIes4cwABIn4YAwEh7YWQBAAGUAMAA/0GGAMBIe2EcwABIpS7AAF22wACOAwMAA4PAAEizwEh7CoTAAEi8wEh7GIXAAEjFwEh7LQDAAI5AAMAA/s8AwACOoErAAEjbAYHAAEjiwEh6jQbAAI4/gYnAAEj0wABI+cAAXz4AAMAAXYrAAI4DAAAAAQPAAEkLwABfPgAAAAEBAcAASRkAAADAAF2oYAPAAI6TAABcAT4EScAASS0cwABJOhbAAEkxLpwTwACOA8AAjiaHZAEAARbAAElWFsAASUYutR3AAI4DwACODJsuuYkAwAD/BD4CTsAASXTAAEmHAADAAF23YAPAAJcaARzAAEmQFsAASYkuuLfAAI4DwACOGrCGAQABGsAASam5VQDAAGYGPRzAAEpWFsAASkwcwABKLhbAAEomLpwTwACOA8AAjiZLAQABFsAASj8WwABKLy61HcAAjgPAAI4Mmy65iQDAAP8FwABduMAAj6xWAQABJsAASloBHMAASlouwABducAAjgMCAAIfwABKesAAaAABAAEnIwAcwABKpGrAAEqlYAPAAJl+wAEjISACAAInwABduoHAAErOwEh8eADAAJmAAMAAjkpgA8AAkAcAwAD+0D9OwABM+sAATQsAALkfYAPAAI+eARzAAE0VFsAATQ0unBPAAI4DwACOJksBAAEWwABNJhbAAE0WLrUdwACOA8AAjgyyYbniAMAA/wVOwABNUMAATVoAAMAAXbtdA8AA/7MBYAPAAQACATUAAAABAF0DwAD/swFgA8ABAAIBHgDAAMMhAAFgA8ABAAIAAIIAwEh9zD0cwABNeoDAAE1kwEh8IYP9AQABNMAATYIDwABNgsAAXzkAAAADAwPAAE2RAAAAhEhgA74EAMAATawAAADAAF28XQPAAP6/AWADvhMAwABNuwAAAIC1XQPAAP6/AWADviUAAGADwAD/JQE+AUbAAE3GwABN7cAATdcAAACaJmADvhMAhMAATd7ASH4rPgFJwABN9xzAAE4HFsAATfsuwABJQsAAjgPAAI4RtA4BAAGGwABOGMBIfmoAwABsID4BPRzAAE4+FsAATiousE7AAI4DwACOC7QUAgAChsAATlbASH5qNMAATmkDwABOacAAXx8AAAABAQHAAE53AAAAgmpgA74lAABg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G4CuAAAAAMAA/tJKwAClAAEcwAClDYPAAKUHwEi5G4CrAQFgA8AAkCEBNMAApREDwAClEcAApgAAAAABAQHAAKUaAAAAgL1gA8AAlxoAAGADwACQIQE+A07AAKVCwAClTgAAu6tgA8AAfEkBHMAApV6EwAClUMBIuUJLAQABhcAApV/ASLr+AMAA/wVOwAClesAApX8AAIKXYAPAAJcQARzAAKWZgMAApYvASLfrwABeAwEAAYbAAKW2wEi7GQDAAKSCSsAApcoBH8AApdXAAJAnAwADhcAApebASLr+gsAApezASLjZh8AApfTASLtNAADAAP6IBsAAjk2BicAApgrAAKYWwACuRgAAwABdy8AAjgMAAAABA8AApiLAAK5GAAAABAAABMAApjAAAADAAF3JYAPAAPxVAWrAAKY+YAPAAPxVAMAAplAAAADAAF3eYAPAAPxVAWrAAKZqYAPAAPxVAMAApoUAAACESGADvgQBagBgA8AA/yV5wACmoAAAAJomYAO+EwFqAGADwAD/JXldA8AA/r8BYAPAAI/OAT4FTsAAprjAAKa/AACEi10DwAD+vwFgA8AAj84BMcAApshgA8AAj84AT8AAptHAAKbWAAABhTBhAwZgA743YAPAAJcaYAPAAJcaYAPAAPxVYAPAAPxVYAPAAPxVXAADwACm4MAArTEAAAAGBgbAAKbtAAAAhJtgA743AMAApvwAAACAvWADwACXGgDAAKcKAAAAwABdZGADwACXGgDAAKclAAAAwABdZWADwAD8VQDAAKc3AAAAwABdZmADwAD8VQDAAKdJAAAAwABdZ2ADwAD8VQAAXAE+Ck7AAKdpwACndQAAwABeBGADwAD+GwGTScAAp4AUwACnhMBIvPwJAD4BScAAp5sigMAAp5/ASLvnASEcwACnzRbAAKe8LsAAVJvAAI4DwACOE8AAVIIBAAGGwACn58BIvMwAwAB78T4BPRXAAKf7wEi9OAyUPgI9FcAAqCfASL04DBzAAKgzFMAAqCfASL04DABkAQABlQDAAP9BScAAqSIhgcAAqSfASLwFPgE9FcAAqU/ASL04DBzAAKlbFMAAqU/ASL04DABkAQABlADAAP9BPz9OwACpisAAqZYAAMAAXgVgA8AA/hsBk0nAAKmhFMAAqaXASL0OCgA+AUnAAKm8IoDAAKnAwEi75wEhHMAAqe4WwACp3S7AAFSbwACOA8AAjhPAAFSDAQABhsAAqgjASLzMAMAAe/I+AT0VwACqHMBIvgsNlD4CPRXAAKpIwEi+Cw0cwACqVBTAAKpIwEi+Cw0AZAEAAZUAwAD/QUnAAKpkIYHAAKppwEi8BT4BPRXAAKqRwEi+Cw0cwACqnRTAAKqRwEi+Cw0AZAEAAZQAwAD/QT8/TsAAqtrAAKrkAAC1UmADwABv4QEcwACq9RbAAKrmLrkawACOA8AAjh21VAEAASbAAKsCAYbAAKsCwEi8zGADwAB3UwDAAG/dTsAAqx4AAADAAF4GYAPAAGI4AEnAAKs8FsAAq0oUwACrQMBIvt4OAMAATqDAAG/lPgE9FcAAq27ASL8mDxbAAKuRFMAAq4fASL7eDgCWkcAAb+Q/TsAAq7sAAADAAE6BYAPAAGI4AEnAAKvQFsAAq94UwACr1MBIvt4OAMAATp/AAG/yPgE9FcAAq//ASL96EBbAAKwZFMAArA/ASL7eDgDAAE6BwABv8z89HMAArD6EwACsN8BIvGJWAQABH8AArEbAAI/lCQAJhsAArFfASLzMh8AArGjASLzaFMAArHjASLzqCAAUwACskMBIvTgMABTAAKynwEi+Cw0AFMAArL7ASL0gCwAUwACs3MBIvyYPABTAAKz+wEi/ehAAFsAArSEUwACtF8BIvt4OAMAASc/AAG/nAADAAP7QTsAArUXAAK1NAACHUGADwACOewEfwACtU8AAjowHAAcWwACtYC6zBMAAjgPAAI4JFsAArWousE7AAI4DwACOCxbAAK2HLrUdwACOA8AAjgwWwACtmC7AAF1pwACOA8AAjg4WwACtpy7AAElCwACOA8AAjhEWwACttC64t8AAjgPAAI4aFsAArbwutsXAAI4DwACOHAA9HMAArdeGwACtz8BIwGHAAF4HBAABhcAArePASLyNA8AAXcmAwACuBcBIu+eESILAAK4cwEi8I5omg8AArirASLw6wACOhkrAAK41AYTAAK48wEi8YgbAAI5OgYnAAK5LwACuZsAAs9kAAMAAXcjAAI4DAAAAAQPAAK6CwACz2QAAAAAAAABdA8AA/n0BYAPAAJAhAT4ITsAArqTAAK6yAADAAF2mYAPAAKRzAR/AAK64wACkiQcABxbAAK7aLrUdwACOA8AAjgwWwACu+RbAAK7zLrjzwACOA8AAjhuwb8AAXioWwACvCi64tsAAjgPAAI4PFsAAryouuLfAAI4DwACOGhbAAK86Lri1wACOA8AAjhgWwACvYi7AAF1pwACOA8AAjg4WwACveS62xcAAjgPAAI4cAE7AAK+UwACvnwAAwABd52ADwAEAAgEcwACvsBbAAK+pLri3wACOA8AAjhqwwwEAARbAAK/XFsAAr8cutR3AAI4DwACODLIhuaEAwABmJE7AALBswACwcwAAwABTC2ADwACPTwEcwACwfxbAALB1LsAASkLAAI4DwACOIcAAXbEBAAGBwACwjsBIwi0AwACOu07AALCtwACwswAAhL5dA8AA/r8BYAPAAJcaATHAALC1YAPAAJcaAE7AALDewACw7QAAwABd/10DwAD+8QJgA8AAlxpgA8AAfEABMsAAsO9gA8AAlxpgA8AAfEAARsAAsPfAALFTwACxDwAAALurYAPAAHxAABbAALE+FsAAsSYuvGjAAI4DwACOF7AZwAB8OT4ETsAAsWPAALFoAACAvWADwACXGgEcwACxcRbAALFqLri3wACOA8AAjhqwlAIAAhbAALGihcAAsZbASMMhpVLAAHxCFsAAsbiFwACxrMBIwyGEiMAAfEQAwABmGT0cwACxzoPAALHIwEjCvVYBAAGGwACx0sBIw08AwAD+0EAhHMAAsgGEwACx8sBIwuSHZAEAAYbAALINwEjDTwDAAP8EwACx8cAAshIBJAAHJ8AAXgCGwACySsBIw08nwABeARzAALJ3hMAAsmnASMLkSwEAAYbAALJ4wEjDTwDAAP8FJ8AAXgKFwACyhsBIwyEngWo9HMAAsquEwACyncBIwuSAvwIAAobAALKswEjDT4XAALK0wEjDIQDAAP8GPRzAALLRg8AAssvASMK9gK4AAAAAwAD+0krAALLdARzAALLqg8AAsuTASMK9gKsBAWADwACQIQE0wACy7gPAALLuwACz1AAAAAEBAcAAsvcAAACAvWADwACXGgAAYAPAAJAhAT4DTsAAsxjAALMkAAC7q2ADwAB8QAEcwACzNITAALMmwEjC5EsBAAGFwACzNcBIxLQAwAD/BU7AALNQwACzVQAAgpdgA8AAlxABHMAAs2+AwACzYcBIwY3AAF4IAQABhsAAs4rASMTPAMAApIZKwACzngEfwACzqcAAkCcDAAOF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GwFqAGADwAD/JXnAAEIGAAAAwABd7VsBagBgA8AA/yV5wABCMQAABMAAXfBgA8AA/FUBagBgA8AA/yV5wABCUQAABLrzYAPAAPxVAWoAYAPAAP8lecAAQnQAAACFVmADwACXEAFqAGADwAD/JXnAAEKMAAAAwABd9mADwAD+GwFqAGADwAD/JXlgA8AAj/wBPgFAIRzAAERBFsAARC0uwABd8MAAj/9IAQABKwDAAP91wABELcAAREgABAgBwACP/ocAwElYsAgBwACP/xQAwElZFQsACAHAAJAAFADASVkwDAAJAMAAQqHAAI/7DAAFgMAAQqfASVgigcAAQrDASVgwgsAAQrbASVhAg8AAQrzASVhQhMAAQszASVhpB8AAXfiFwABC8MBJWHrAAF3vhsAAQxfASViVwABd8hTAAEM+wElYywgAhToUwABDcMBJWOYJAMAAXe0UwABDtMBJWP8KAIVWFMAAQ+7ASVlJDQDAAF32FMAARBTASVliDgACBsAAkAKBj8AARFLAAERnwABEeAEAhB4BasAARFNgA8AA/2gCAAABA8AARHDAAER4AAAAAAAAAGADwAD8VQFKwABEcwEqBsAAkASBj8AARH3AAESQwABFCgAAIwFqwABEfmADwAD/aAIAAAEDwABEmMAARQoAAAAAAAAAYAPAAQACAT4BSsAARKEBJAAHJ8AAXpgWwABExBbAAES/LoC9wACP6YPWwACXISfAAF6BFsAARNMulnvAAI/oJ8AAXpkewABE7sAAm9kBAAEWwABE/i6Cl8AAj+oAJ4MmAABJWnQASVq5AElbTwAAAAICwACQB4GPwABF98AARf3AAEcSA8AAXpoAAAFgAcAAj+YAAAABBcAAkAuBj8AARhvAAEYbwABGggAAAAPAAEYlwABGggAAAAMCAsAARi4AAACAvWADwACXGgDAAEZCAAAAgpdgA8AAlxAAAcAARlYAAACWe2ADviUBagBgA8AA/yV5YAPAAJAHAT8BCQDAAEZowACP7AMAA4LAAEZuwElby4DAAEZ3wElbqoHAAEZ9wElbugABBsAAkAmBj8AARofAAEaawABHEAAAIwFqwABGiGADwAD/aAIAAAEDwABGosAARxAAAAAAAAAAYAPAAQACAT4BSsAARqsBJAAHJ8AAXpsWwABGyhbAAEbFLoC9wACP6YPWwACX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SH0cwABIihzAAEiGgMAASIHASd2bSwEAAYTAAEiHwEneFADAAP7OSAEAASsAwAD/dULAAEiTAT9JwABIoxzAAEinLsAAXyUBAAEcwABIvIDAAEi3wEndm0sBAAGEwABIvcBJ3hQAwAD+zgDAAJF2PgI9i8AASMzASd33hMAASOHASd4UQsAASOwAP07AAEkTwABJGwAAr6JdA8AA/r8BYAPAAJXZARzAAEmnHMAASTwcwABJI4DAAEkdwEndm5aZAQABg8AASSjASd33AMAA/pWAqwEBYAPAAJcQATTAAElAA8AASUDAAEmlAAAAAQEBwABJSQAAAIPzYAPAAJXZAABgA8AAlxABPgFKwABJVwEjHMAASWSEwABJX8BJ33xIAQABKwDAAP91KxzAAEl2LsAAXy3AAJEtAQABHMAASYguwABfLAEAASbAAEmYAYTAAEmYwEnffGADwACXEADAAJF7AMAAkX0BYAPAAJcQAMAA/oiArQAAAADAAP6TPRzAAEm9hMAASbXASd8YgKUBAAEcwABJ7BzAAEnTgMAASc3ASd2bloQBAAGDwABJ2MBJ3fcAwAD+l4CrAQFgA8AAlxABNMAASf8DwABJ/8AASlEAAAABAQHAAEoIAAAAg/NgA8AAldkAAGADwACXEAE+AUrAAEoWASMcwABKI4XAAEoewEngYkgBAAErAMAA/3UrHMAASjUuwABfLAEAASbAAEpFAYXAAEpFwEngYmADwACXEADAAJF7AWADwACXEADAAP6IAMAA/tFOwABKXcAASmQAAIF2WwEcwABKaIHAAEpmwEndsiABAAEmwABKaQGEwABKacBJ3xhdA8AA/r8BYAPAAJcQAAA9F8AASncuwABfC4LAAEqNwEnd08AAkVFKwABKogGFwABKqcBJ4NUGwACRg4GVwABLXcAAS2LAAEuVAALAAF83AAAAAQPAAEtwwABLlQAAAAEBAcAAS4MAAAClwmADwABDNAAAXAAGwACRhIGVwABMMMAATDXAAExmAALAAF84AAAAAQPAAExBwABMZgAAAAEBAcAATFQAAAClwmADwABDNAAAXAAGwACRhYGVwABMa8AATHDAAEz2AADAAF85AAAAAQPAAEyAwABM9gAAAAEBAcAATJMAAAClwmADwABDNAAAXAE+Aj0cwABMrC7AAF83AQABgMAATLvASeHk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ot/AAKLpAADAAF9TYAPAAP4bASMlwACjAxbAAKL5gMAAovTAShh6hdPAAJYlYAPAAJYXgsAAoxvAShokHMAAoycuwABfHwEAASeacADAAJFvAWADwAD+Gz0cwACjPi7AAF8vAwACFsAAo1KAwACjTcBKGHqF0sAAliM0wACjXQPAAKNdwACkJAAAAAEBAcAAo2wAAACF0mADwACXEAAAYAPAAP8lAT4BPRzAAKN/LsAAXyQBAAEfwACjmsAAl2wCAAIWwACjsy67TcAAkV0fwACjx8AAl4cDAAOEwACj5cBKGt4ewACj8MAAlLUBAAGBwACj+sBKGfkAHsAApAbAAJS1AQABg8AApBDAShpOAAAAAMAAkXUBwABfMCrAAJF/PRzAAKQ5LqPhAQABJsAApEcBFsAApEeAwACkQsBKGHqlwsAAld5gA8AAQzQAwACRmj0cwACkXy7AAF8gAQABgcAApGrAShn5AMAAkXA9HMAApHouwABfKgEAARbAAKSOgMAApInAShh6ga/AAJYkAMAAkXlJwACkmSElwACkrBbAAKSigMAApJ3AShh6hdPAAJYlYAPAAJYXPgM9HMAApMsuo+gCAAKCwACk08BKGiQmwACk4wEWwACk44DAAKTewEoYeqXCwACV3mADwABDNADAAJFzPRzAAKT9LsAAXyABAAGDwAClCMBKGk4AwACRcD0cwAClGi7AAF8qAQABFsAApS6AwAClKcBKGHqF08AAliUAwACReT89HMAApUQuwABfIAEAAYLAAKVPwEoaJADAAJFwBsAAkaeBlcAApWLAAKVuwAClzAAAsYIBasAApWNgA8AA/2gCAAABA8AApYnAAKXMAAAAAQEBwAClpAAAAIPzYAPAAJjgAABbAT4BSsAApbABHMAApbcunScBAAGAwAClw8BKHNsAwACRdwbAAJGogZXAAKXRwACl3cAApj0AALF5AWrAAKXSYAPAAP9oAgAAAQPAAKX5wACmPQAAAAEBAcAAphUAAACD82ADwACZRwAAWwE+AUrAAKYhARzAAKYoLp0nAQABgMAApjTASh1FAMAAkXcGwACRqYGVwACmQsAApk7AAKaYAACxgAFqwACmQ2ADwAD/aAIAAAEDwACmZsAAppgAAAABAQHAAKZ+AAAAg/NgA8AAmPUAAFsBSsAApocBHMAApocunScBAAGA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wAD+vwFgA8AAldkAAGADwACYtgE+Ak7AALDBwACwzAAAn4FdA8AA/r8BYAPAAJjFAR7AALDSwAD+xwIBYAPAAJjFAhbAALDngcAAsODASihWYcAA/u80wACw7wPAALDvwACxRAAAAAEBAcAAsPQAAABiYAPAAP4bAABgA8AAmMUBPgFKwACxAQEfwACxDMAAmNECAAIWwACxKxzAALEnFsAAsR2AwACxGMBKJ5GfgcAAmLhLAQABgsAAsSjASijKAMAA/s6AvcAAmMcmwACxNwEcwACxN4HAALExwEooVksBAAGCwACxOMBKKMoAwAD+zmADwACXEAAASsAAsU0BH8AAsVjAAJjEAQABgsAAsW3ASih3AADAAJGCYAPAAJcQBsAAkb2BlcAAsYnAALGVwACxywAAsZsBasAAsYpgA8AA/2gCAAABA8AAsaPAALHLAAAAAQEBwACxsQAAAIPzYAPAAJfvAABbAUrAALG6ARzAALG6LsAASdIBAAGAwACxxsBKKbYAwACReAbAAJG+gZXAALHQwACx6sAAtOIAALGeAWrAALHRYAPAAP9oAgAAAQPAALH2wAC04gAAAAEBAcAAsgIAAACD82ADwACXvwAAYAPAAJcQAT4CScAAsg4iHMAAshoWwACyF4DAALISwEoqIKrgwACXwUgBAAEnnjYAwAEAEQEcwACyLRbAALIqgMAAsiXASiogquDAAJfBSAEAASeeLADAAQARPgJOwACyTMAAslUAAB9gA8AAlxABFsAAslyAwACyV8BKKiAfwACXwknAALJsJcAAsnmBwACycMBKKo5gA8AAl9s+AUrAALKWAR/AALKhwACXzQIAAhbAALKxgMAAsqzASiogquDAAJfBHMAAsrUuwABfLAEAARTAALLFwEoqjgEBYAPAAJfbAMAAkXsAScAAst4lwACy64HAALLiwEoqjmADwACYLT4BSsAAswsBJsAAswsBHMAAsxIuwABfNAMAAxbAALMrFMAAsyLASiqOAQFgA8AAmC2Fl8AAmC8WwACzPhTAALM1wEoqjgEBYAPAAJgtpVLAAJgwNMAAs1QDwACzVMAAs9gAAAACAgLAALNVAAAAhZdgA8AAlxAAwACzXwAAAKVSYAPAAJcQAABgA8AAl78BPgFKwACzdQEfwACzgMAAl80CAAIWwACzn4DAALOawEoqIKrg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X35gA8AA/hsBHMAA0h4uwABfHwEAASfAAF9/AMAAkW9JwADSPSEcwADSUhbAANJGgMAA0kHASkV7sbPAAJaeSAEAASsAwAD/dT4CPRzAANJwFsAA0mMuwABe9sAAkTaAvwIAAhbAANJ2gMAA0nHASkV7sbPAAJaeg8AA0oXASkfNAMAA/wY9HMAA0qUWwADSmS7AAFTRwACROlYBAAEWwADSroDAANKpwEpFe7GzwACWngDAAP7QPz0cwADS1BbAANLHLsAAXvfAAJE3gL8CAAKAwADS1cBKRXuCwADS3cBKR24AwAD/Bj0cwADS+xbAANLvLsAAVNHAAJE6VgEAAYDAANL/wEpFewDAAP7QPRzAANNyLsAAX3gAAAAAwACRxz0cwADTii7AAF8qAQABFsAA056AwADTmcBKRXuCbcAAlpwAwACReU7AANOywADTtwAAgepgA8AAldkBHMAA08UWwADTuS7AAFTRwACROoYuAAAAAMAA/t5AHMAA0+OFwADT3sBKSU1IAQABgMAA0+bASkV7AMAA/3XAANPewADT6gBJwADT8hzAANQHFsAA0/uAwADT9sBKRXuxs8AAlp5IAQABKwDAAP91PgI9HMAA1BguwABfeAAAAADAAJHHPRzAANQxLqPoAgAChMAA1DnASkf4JsAA1FEBFsAA1FGAwADUTMBKRXulwsAAld5gA8AAQzQAwACRcz4CPRzAANS/LoYwAQABHMAA1N1qwADU2mADwACZfsABIyGFaAIAAifAAF+AMcAA1PVgA8AAlxACFsAA1PYug7XAAJFfHsAA1PzAAJS1AQABhMAA1QbASkf4AADAAJmBAMAAkXQ9HMAA1SMuo+gCAAKDwADVK8BKR80mwADVPgEWwADVPoDAANU5wEpFe6XCwACV3mADwABDNADAAJFzScAA1V0hHMAA1XAWwADVZoDAANVhwEpFe7GywACWnUgBAAErAMAA/3U+DT0cwADVgS7AAF8gAQABgsAA1YzASkduAMAAkXA9HMAA1kUWwADWOC7AAF73wACRN4C/AgACFsAA1kuAwADWRsBKRXuxssAAlp2BwADWWMBKR0EAwAD/Bj0cwADWeRbAANZtLsAAVNHAAJE6VgEAARbAANaCgMAA1n3ASkV7sbLAAJadAMAA/tA9HMAA1pQuwABfeAAAAADAAJHHTsAA12DA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AEoGvQBKCfsASgplAEoONgBKDpsASg8NAEoVFABKFWoAShXPAEoW9gBKF9AAShhEAEocpQBKHQ8ASh15AEod4QBKHksASh61AEofHwBKIOgASiFFAEohrQBKIgoASiJnAEoizwBKIywASiOJAEoj5gBKJFcASiS8AEolGQBKJXYASiXTAEonWwBKKYAASinqAEos6gBKL+wASjBUAEoxPQBKMZoASjPNAEpAmABKQPoASkH1AEpC+wBKRUUASlHNAEpSNABKU/MASlRaAEpVxgBKWicASlqGAEpcKwAAAHICwACR0oGVwADtW8AA7WHAAQoTA8AAX4wAAAFgAcAAkTEAAAgEwACR1IGVwADuKcAA7jYYwABfjQBgA8ABAAIBKwTAAJHVgZXAAPBRwADwWwnAAEbdAGADwACXEAAEwACR1oGVwADxIsAA8SwJwABG3gBgA8AAlxAABMAAkdeBlcAA8evAAPH2CcAARt8AYAPAAJcQAATAAJHYgZXAAPLPwADy2wnAAEbgAGADwACXEAAEwACR2YGVwADzWsAA82oJwABG2wBgA8AAlxAABMAAkdqBlcAA84LAAPOfGMAARuEAXQPAAP6/AWADwACXEAAEwACR24GVwADzuMAA88AJskcAYAPAAJcQAAEFwACR6IGVwADzxcAA88XAAPVMAAAAA8AA89LAAPVMAAAACwICwADz5gAAAKUuYAO23QDAAPP6AAAApa9gA7cPAAnAAPQRAAAEwABG3WADwACXEAFqAGADwAD/JXnAAPQoAAAEwABG3mADwACXEAFqAGADwAD/JXnAAPQ/AAAEwABG32ADwACXEAFqAGADwAD/JXnAAPRXAAAEwABG4GADwACXEAFqAGADwAD/JXnAAPRwAAAEwABG22ADwACXEAFqAGADwAD/JXnAAPSNAAAEwABG4V0DwAD+vwFgA8AAlxABagBgA8AA/yV5wAD0twAABLJHYAPAAJcQAWoAYAPAAP8lecAA9M4AAADAAEbiYQMBYAPAAQACYAPAAQACAWoAYAPAAP8lecAA9QMAAADAAEbkYAPAAJcaAWoAYAPAAP8leWADwACR0gE/CAgBwACR1YIAwEpfSQgBwACR1oMAwEpfZAgBwACR14QAwEpffwgBwACR2IUAwEpfmggBwACR2YYAwEpftQgBwACR2ocAwEpf0AgBwACR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AJX5AMAAkXQ+AT0cwAEQZi6GMAEAASbAARCYARzAARCYH8ABEILAAJaNAQABgcABEIzASnFmALCZAQABgsABEK7ASnF2AMAAledgA8AAlfkAwACRdAbAAJH0gZXAARDQwAEQ48ABHx8AAKGJAWrAARDRYAPAAP9oAgAAAQPAARDxwAEfHwAAAAYGBsABEQwAAACa6l0DwAD+vwFgA8AAl+8AwAERMQAAAITFXQPAAP6/AWADwACX7wDAARFUAAAAwABfOmADwACV+QDAARGEAAAAwABfO2ADwACXPwDAARGyAAAAwABfPGADwABDNADAARHlAAAAwABGzmADwABDNAAAYAPAAJgOAT4NTsABEubAARLzAACva10DwAD+vwFgA8AAl24BMcABExhgA8AAl24ATsABEzPAARNFAADAAF+pXQPAAP6/AWADwACX7wExwAETVWADwACX7wBGwAETXcABE4jAARNvAAAAgO1gA8AAl+8AgMABE3zASnK/PgROwAETl8ABE5wAAIC9YAPAAQACARbAAROoFMABE57ASnOYCACAvcAAl9BOwAETu8ABE8cAAMAAX6pgA8ABAAIBHMABE8kuwABK5AEAARTAARPTwEpztAkAAMAAkW09HMABE/KHwAET4MBKc2dWAQABH8ABE/rAAJf2AQABFMABFAfASnPeCgAAAMAA/tA9HMABFCmGwAEUHMBKc0BWAQABH8ABFDHAAJd3AgACH8ABFFrAAJfuAQABFMABFHHASnO0CQAAH8ABFHzAAJfkAQABFMABFIvASnPeCgAAAADAAP7QTsABFMDAARTPAADAAF+rYAPAAJc/AR/AARTdwACXTQEAAYbAART4wEpzQABOwAEVGsABFSoAAMAAX6xgA8AAlxABJsABFRoBHMABFZocwAEVLmrAARUvYAPAAJl+wAEjISACAAInwABfrTLAARVNYAPAAQACYAPAAQACAieBdhbAARVfLsAAXv/AAJFBJ8AAXxUWwAEVgS7AAF8GwACRSQDAAJmAsJkBAAGFwAEVsMBKcyMAwACV52ADwACXEE7AARXawAEV4gAAwABfrmADwACXEAEmwAEV2gEcwAEWNRzAARXmasABFedgA8AAmX7AASMhIAIAAifAAF+vMsABFf5gA8ABAAJgA8AAl9sCJ7tNFsABFg4uu03AAJFdJ1UWwAEWJS5VwACRXgDAAJmAsJkBAAGFwAEWS8BKcyMAwACV52ADwACXEE7AARZ0wAEWgwAAwABfsGADwACV+QEmwAEWdAEcwAEXpBzAARaLasABFohgA8AAmX7AASMhhWgCAAInwABfsTLAARcIYAPAAQACYAPAAP9oBCeB9RbAARcdLsAAXwDAAJFCJ5VRHsABFzvAAJS1AQABasABF1FgA8AA/hsVACfAAF+sFMABF3LASnTCCQAnwABfrhTAAReUwEp1VAoAAMAAmYGwmQEAAYXAARe6wEpzIwDAAJXnYAPAAJX5TsABF+fAARf6AADAAF+yYAPAAJf/ASbAARfnARzAARkmHMABF/5qwAEX/2ADwACZfsABIyEgAgACJ8AAX7MywAEYfGADwAEAAmADwAD/aAUnwABftILAARiSwEpy7SeB9RbAARi0LsAAXwDAAJFCJ4JtFsABGNEuwABG5MAAkUMngXYWwAEY6y7AAF7/wACRQSfAAF+wFMABGQ/ASnXeCwAAwACZgLCZAQABhMABGTzASnMRAMAAledgA8AAl/9OwAEZZsABGX8AAMAAX7VgA8AAloIBJsABGWYBHMABGawfwAEZhcAAlo0BAAEUwAEZj8BKdpoMAACwmQEAAYXAARnCwEpzIwDAAJXnYAPAAJaCTsABGeXAARnzAADAAF+fYAPAAJgOASbAARnlARzAARt1HMABGfdqwAEZ+GADwACZfsABIyEgAgACJ8AAX7YywAEas2ADwAEAAmADwAD/aAQnwABftxbAARrXgMABGszASnK/g7fAAP6iJ8AAX6sUwAEa+8BKdJYIACfAAF+4g8ABGxzASnL/J8AAX7UUwAEbVMBKd1kNAADAAJmAsJkBAAGEwAEbi8BKcxEAwACV52ADwACYDk7AARu5wAEbzQAAwABfuWADwACXEAEmwAEbuQEcwAEcjRzAARvZasABG9pgA8AAmX7AASMhIAIAAifAAF+6MsABHAhgA8ABAAJgA8AA/2gDJ8AARuYWwAEcIy7AAEbmwACR6yeClBbAARxCLsAARufAAJHsJ8AAX58UwAEcd8BKd6sOAADAAJmAsJkBAAGFwAEco8BKcyMAwACV52ADwACXEE7AARzMwAEc5gAAwABfu2ADwACV+QEmwAEczAEcwAEdFB/AARzswACWjQEAARTAARz2wEp4YA8AALCZAQABhcABHSrASnMjAMAAledgA8AAlflKwAEdRgEmwAEdRgEcwAEe6xzAAR1PasABHVBgA8AAmX7AASMhIAIAAifAAF+8MsABHhFgA8ABAAJgA8AA/2gFJ8AAX6mHwAEeLsBKc2cnhMWBwAEeWcBKctYnwABfvRbAAR6FFsABHnwuwABe/sAAkT+ppMAAkh0nmdwWwAEenC7AAF8IwACRSyfAAF+7FMABHsnASnkCEAAAwACZgLCZAQABhMABHwHASnMRAMAAledgA8AAmA4GwACR9YGVwAEfJMABHzXAASDlAADAAF84AWrAAR8lYAPAAP9oAgAAAQPAAR9BwAEg5QAAAAEBAcABH1QAAAClwmADwABDNAAAXAE+BD0XwAEfbS7AAF8DKcAAkUY9HMABH7YuwABfIAEAARbAAR/BLsAAXvnAAJE5AMAAkXBOwAEf4sABH/4AAMAAX75gA8AAlxABJsABH+IBHMABIEkcwAEgAmrAASADYAPAAJl+wAEjISACAAInwABG2THAASAOYAPAAJcQAhbAASAWLsAARunAAJHvFsABIDUuwABfFcAAkWEAwACZgLCZAQABgMABIF/ASnpCAMAAledgA8AAlxA9HMABIHcuhjABAAEmwAEguAEcwAEguB/AASCIwACWjQEAAYHAASCSwEp6iQCwmQEAAYDAASDOwEp6QgDAAJXnYAPAAJX5AMAAkXQGwACR9oGVwAEhNMABIUXAASLqAADAAF83AWrAASE1YAPAAP9oAgAAAQPAASFTwAEi6gAAAAEBAcABIWYAAAClwmADwABDNAAAXAE+A0nAASF/FsABIYwWwAEhgy7AAF7+wACRP8AAXz/AAJIcPgE9HMABIaguwABfIAEAARbAASGzLsAAXvjAAJE4AMAAkXA+AT0cwAEh0i6GMAEAAR/AASHjwACZfQEAASfAAF+TAADAAJF0TsABIhvAASIuAADAAF+/YAPAAJcQASbAASIbARzAASJXHMABIjpqwAEiO2ADwACZfsABIyEgAgACJ8AAX8AxwAEiRWADwACXEAEWwAEiRi6yTcAAke0AwACZgLCZAQABgMABIm3ASnuPAMAAledgA8AAlxA9HMABIoUuhjABAAEmwAEivQEcwAEivR/AASKWwACWjQEAAYHAASKgwEp8DQCwmQEAAYDAASLTwEp7jwDAAJXnYAPAAJX5AMAAkXQGwACR94GVwAEi78ABIx/AASPMAADAAF89AWrAASLwYAPAAP9oAgAAAQPAASM2wAEjzAAAAAEBAcABI1AAAAClwmADwABDNAAAXQPAAP59AWADwACXbgE+Ak7AASOJwAEjkwAAhkJdA8AA/r8BYAPAAJduATHAASOwYAPAAJduAErAASO4AYHAASO/wEp9JQbAAJH4gZXAASPRwAEj6sABJKgAAMAAX0gBasABI9JgA8AA/2gCAAABA8ABI/jAASSoAAAAAgICwAEkDgAAAICWYAPAAJcQAMABJCcAAAClwmADwABDNAAAYAPAAJX5AT4BPTDAASRAHMABJE8WwAEkRi6lLsAAkU2lwwIAAhbAASRmLqWvwACRYyfAAF/BALbjBsAAkfmBlcABJK3AASS+wAElMwAAwABfGAFqwAEkrmADwAD/aAIAAAEDwAEkzcABJTMAAAAAAAAAXAE+AT0XwAEk1i7AAEbnHMABJP0uwABfHgEAARbAASUSLsAARufAAJHsAMAAkW7AAJHsAABKcNcASnEeAEpyiQBKegoASntXAEp8ywBKfVoASn3sAEp+WAAAAAgCwACR/IGVwAElOMABJT7AAU5DA8AAX8IAAAFgAcAAkTEAAAkEwACR/oGVwAEmisABJp4YwABfwwBgA8ABAAIBKwTAAJH/gZXAASbnwAEm9RjAAF/EAGADwAEAAgErBMAAkgCBlcABKSPAASkyCbJLAGADwACXEAAEwACSAYGVwAEpt8ABKcQJwABG6gBgA8AAlxAABMAAkgKBlcABKdzAASn2GMAARusAXQPAAP6/AWADwACXEAAEwACSA4GVwAEqVMABKmYJskwAYAPAAJcQAATAAJIEgZXAASr3wAErBgnAAEbsAGADwACXEAAEwACSBYGVwAErnsABK7EJwABG6ABgA8AAlxAABMAAkgaBlcABK8rAASvSCbJHAGADwACXEAABBcAAkhSBlcABK9fAASvXwAEtdAAAAAPAASvowAEtdAAAAAsCAsABK/wAAAClLmADtt0AwAEsEAAAAKWvYAO3DwAJwAEsJwAABLJLYAPAAJcQAWoAYAPAAP8lecABLEMAAASyTGADwACXEAFqAGADwAD/JXnAASxiAAAEwABG6mADwACXEAFqAGADwAD/JXnAASx8AAAEwABG610DwAD+vwFgA8AAlxABagBgA8AA/yV5wAEsowAABMAARuxgA8AAlxABagBgA8AA/yV5wAEsvwAABMAARuhgA8AAlxABagBgA8AA/yV5wAEs3wAABLJHYAPAAJcQAWoAYAPAAP8lecABLPYAAADAAEbiYQMBYAPAAQACYAPAAQACAWoAYAPAAP8lecABLSsAAADAAEbkYAPAAJcaAWoAYAPAAP8leWADwACR/AE/CAgBwACSAIIAwEp/5wgBwACSA4MAwEqAAAgBwACSAYQAwEqAGQgBwACSAoUAwEqANAgBwACSBIYAwEqAVggBwACSBYcAwEqAcQgBwACSBhQAwEqAjAgACQDAAS0+wACR0QQABIDAAS1EwEp/yoHAAS1OwEp/2BTAAS1ZwEqApQkAFMABLWvASoDJCgAACgbAAJIIgZXAASVuwAElg8ABJZYBAMAAXxcBasABJW9gA8AA/2gCAAABA8ABJY/AASWWAAAAAAAAAGADwAD8VQFKwAElkgEpBsAAkgmBlcABJiHAASY0wAEmfgEAwABfxQAAAAEDwAEmRcABJn4AAAAAAAAAYAPAAJfbAT4BSsABJksBH8ABJlbAAJfkAQABFsABJmUuwABfw8AAkf4ABsAAkgqBlcABJvnAAScMwAEnPAEAwABfxgAAAAEDwAEnF8ABJzwAAAAAAAAAYAPAAJfbAUrAAScaAR/AAScewACX5AEAARbAASctLsAAX8TAAJH/AAbAAJIMgZXAAS8lwAEvNsABNIIAAMAAX4oBasABLyZgA8AA/2gCAAABA8ABLz7AATSCAAAAAwMDwAEvTAAAAIPzYAPAAJcDAMABL2AAAACCb2ADwACXEADAAS+EAAAApcJgA8AAQzQAAFwBPgZOwAEwTcABMGQAAMAAX8ddA8AA/r8BYAPAAP4bATHAATBrYAPAAP4bARbAATBsLsAAXvjAAJE4PRzAATCTg8ABMHzASoLbgKUBAAEcwAEw7RzAATCvFsABMJouwABU0cAAkTqBpQEAATTAATC1A8ABMLXAATDiAAAAAQEBwAEwvgAAAIPzYAPAAJXZAABgA8AA/FUBSsABMMcBIRzAATDbHMABMNQWwAEwxy7AAF72wACRNksBAAGEwAEw1cBKg1YAwAD/BUgBAAErAMAA/z8AwAD+iYCrAQFgA8AA/hsBNMABMPEDwAEw8cABMRYAAAABAQHAATD6AAAAg/NgA8AAldkAAGADwAD+GwFKwAExAwEcwAExEBbAATEDLsAAXvbAAJE2SwEAAYTAATERwEqDzQDAAP8FAMAA/ogAwAD+0T0cwAExHi6GMAEAASbAATG0ARzAATG0HMABMTFqwAExLmADwACZfsABIyGFaAIAAifAAF8uMcABMUVgA8AAlxACFsABMU0uwABfxcAAkgkfwAExacAAmKkBAAEcwAExoxzAATGUg8ABMX3ASoLbgKsBAWADwACYkAFqwAExm2EDAWADwAD/MmADwACYkMABbUoAwAD+iICtAAAAAMAA/pMAAMAAmYGwmQEAAYLAATHKwEqCxQDAAJXnYAPAAJX5AMAAkXROwAEx8cABMgUAAMAAX8hgA8AAlxABJsABMfEBHMABMqYcwAEyCWrAATIKYAPAAJl+wAEjISACAAInwABfyTLAATIuYAPAAQACYAPAAJcQAifAAEbsIxbAATJOgMABMknASoKlsazAAJcGFsABMlguwABG6MAAkgUWwAEybi7AAEbswACSBAFgA8AAlxAngm+BwAEyk8BKgrUAwACZgLCZAQABgsABMrzASoLFAMAAledgA8AAlxBOwAEy4sABMvYAAMAAX8pgA8AAlxABJsABMuIBHMABM+4cwAEy+mrAATMEYAPAAJl+wAEjISACAAInwABfyzLAATNJYAPAAQACYAPAAP9oBCeySxbAATNkLrJLwACSACfAAF/IhMABM5LASoTfJ8AARuQWwAEzuS7AAEbkwACRQyfAAF/GFsABM9cuwABfxMAAkf8AwACZgLCZAQABgsABNATASoLFAMAAledgA8AAlxA9HMABNBwuhjABAAEmwAE0VQEcwAE0VR/AATQtwACWjQEAAYXAATQ3wEqFlgCwmQEAAYLAATRrwEqCxQDAAJXnYAPAAJX5AMAAkXQGwACSDYGVwAE0h8ABNJrAAUSWAAChiQFqwAE0iGADwAD/aAIAAAEDwAE0qMABRJYAAAAGBgbAATTDAAAAmupdA8AA/r8BYAPAAJfvAMABNOgAAACExV0DwAD+vwFgA8AAl+8AwAE1CwAAAMAAXzpgA8AAlfkAwAE1OwAAAMAAXztgA8AAlz8AwAE1aQAAAMAAXzxgA8AAQzQAwAE1nAAAAMAARs5gA8AAQzQAAGADwACYDgE+D07AATXHwAE10gAAwABfzGADwACXEAEmwAE1xwEcwAE2QBzAATXWasABNddgA8AAmX7AASMhIAIAAifAAF/NMsABNfdgA8ABAAJgA8AAl9sCJ4O1FsABNgcug7XAAJFfJ8AAX8UWwAE2Jy7AAF/FwACSCQDAAJmAsJkBAAGFwAE2VsBKhysAwACV52ADwACXEE7AATaAwAE2iAAAwABfzmADwACXEAEmwAE2gAEcwAE2vBzAATaMasABNo1gA8AAmX7AASMhIAIAAifAAF/PMsABNp9gA8ABAAJgA8AAl9sBJ4O1FsABNq8ug7XAAJFfAMAAmYCwmQEAAYXAATbSwEqHKwDAAJXnYAPAAJcQTsABNvzAATcKAADAAF/QYAPAAJcQASbAATb8ARzAATddHMABNw5qwAE3D2ADwACZfsABIyEgAgACJ8AAX9EywAE3JmADwAEAAmADwACXEAInu00WwAE3Ni67TcAAkV0nwABfzofAATdNwEqH2ADAAJmAsJkBAAGFwAE3c8BKhysAwACV52ADwACXEE7AATedwAE3qQAAwABf0mADwACXEAEmwAE3nQEcwAE4FRzAATetasABN65gA8AAmX7AASMhIAIAAifAAF+tMsABN8xgA8ABAAJgA8AA/2gCJ8AAXxUWwAE35C7AAF8VwACRYSeBdhbAATgCLsAAXv/AAJFBAMAAmYCwmQEAAYXAATgrwEqHKwDAAJXnYAPAAJcQTsABOFXAAThfAADAAF/TYAPAAJcQASbAAThVARzAATiyHMABOGNqwAE4ZGADwACZfsABIyEgAgACJ8AAX68ywAE4e2ADwAEAAmADwACX2wInu00WwAE4iy67TcAAkV0nVRbAATiiLlXAAJFeAMAAmYCwmQEAAYXAATjIwEqHKwDAAJXnYAPAAJcQTsABOPHAATkAAACxMGADwACV+QEmwAE48QEcwAE5HR/AATkOwACWgQEAASsAsJkBAAGFwAE5M8BKhysAwACV52ADwACV+U7AATlcwAE5ZwAAqC5gA8AAlfkBJsABOVwBHMABO6YcwAE5b2rAATlsYAPAAJl+wAEjIYVoAgACJ8AAX9QywAE6YGADwAEAAmADwAD/aAgngfUWwAE6dS7AAF8AwACRQifAAF/VHsABOqHAAJS1AQABasABOrdgA8AA/hshACfAAF/MhsABOuHASodIJ8AA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AQEBwABCBQAAAKSAYAPAAEXrAABbAT4EPRzAAEISLsAAYBkBAAGAwABCJMBK7UMAwACSrz0XwABCMC7AAGALgMAAQj/ASu1DwACSmj0cwABCSi7AAGAlAQABH8AAQlzAAEaDAgACFsAAQmuAwABCZcBK7UOD1MAARe4WwABCeIDAAEJywErtQwbAAEXvAADAAJK2PRzAAEKELsAAYCABAAEWwABCrIDAAEKmwErtQ6XCwABF+ADAAJKwBsAAkraBlsAAQsfAAELMwABD8gAAwABgJQAAAAEDwABC2cAAQ/IAAAABAQHAAELjAAAAwABgJmADwABGfAAAXAE+B07AAEL/wABDCwAAwABgJ2ADwABGfAEWwABDDS678MAAkpxOwABDLsAAQzwAAMAAYChdA8AAxHUBYAPAAEaZARbAAEM+LsAAYA3AAJKdPRfAAENOLrvwgMAAQ1nASu4mwACSnD0XwABDai7AAGANH8AAQ3vAAMUhAAFgA8AARpkAAMAAkp09HMAAQ5UuwABgKQEAARbAAEOsFsAAQ6Muu/DAAJKcasAARn4AwACS1z0XwABDuC7AAGANgsAAQ8XASu5gwACSnT0XwABD2C678IHAAEPjwEruPsAAkpwGwACSt4GWwABFxcAARcnAAE5mAACtJgAAAAEDwABF18AATmYAAAABAQHAAEXvAAAAgVRgA8AAS3IAAGADwAD+GwE+B0AlwABHFYDAAEcQwErvQ2ADwABLl8AARxDAAEc2AE7AAEdcwABHawAAwABV8mADwABLlwEmwABHXAGAwABHbcBK70NgA8AAS5dOwABHgMAAR4cAAMAAYCpgA8AARnwBFsAAR5iBwABHicBK73y78sAAS5lOwABJA8AASQoAAIF2YAPAAP4bAWrAAEkMYAPAAP4bIU7AAEkuwABJOQAAwABgK2ADwABGmQEWwABJQoLAAEk7wErvp2rAAEZ+RMAASU0+A07AAEllwABJbQAAXmADwABG0AEWwABJeoTAAElvwErv8YMewABGi0PAAEmHIRzAAEmWhcAASY7ASvAhSAEAARbAAEmkhMAASZnASu/xgerAAEaMAMAA/3U+A0nAAEnSHMAASd6FwABJ1sBK8CG6lgAAAADAAEccPgFKwABJ+wFqwABKAmADwAD+Gwk/ScAASpAiFsAASqMWwABKnIXAAEqUwErwIbomwABG14FVwAD+oQElwABKtoXAAEquwErwIWADwABISz4BPYvAAErQwErv0WrAAErZYAPAAP4bFT89jcAASvzASvAhFsAASw6FwABLBsBK8CGDtcAARtpJwABLIiXAAEsuhcAASybASvAhYAPAAElePgE9jMAAS0LASu/xHMAAS2QWwABLWoTAAEtPwErv8bowwABGpksBAAGTAMAA/s5JwABLdiXAAEuChcAAS3rASvAhYAPAAEefPgFJwABLoxzAAEu5FsAAS6cuwABf/8AAko2DHAEAARTAAEvCwErwIQUBYAPAAEefAMAA/78+AT2MwABM4MBK7/EcwABNAhbAAEz4hMAATO3ASu/xujDAAEamSwEAAZMAwAD+zj4BSsAATXEBIx7AAE14wAD3/AIAAoTAAE2CwErv8RbAAE2VgsAATY7ASu+ngpDAAEZ/AIPAAE2cwErv0WrAAE2lYAPAAP4bCQFgA8AA/hs+AUrAAE4HAWrAAE4OYAPAAP4bCRzAAE46gsAATjPASu+ngxwBAAGEwABOQ8BK7/EAwABGgUrAAE5VAYPAAE5cwErv0QbAAJK4gZbAAE5rwABOcMAATt0AAMAAYCwAAAABA8AATn7AAE7dAAAAAQEBwABOlgAAAIFUYAPAAEtyAABgA8AA/FUBPgFKwABOogEhHsAATqrAAPf8AgACHMAATrQurSYBAAGAwABOw8BK8qEAwACSt2rAAE7KYAPAAP4bCQAGwACSuYGWwABO4sAATufAAE/nAADAAGAtAAAAAQPAAE70wABP5wAAAAEBAcAATwwAAACBVGADwABLcgAAYAPAAPxVAT4DTsAATzfAAE89AACkgGADwABLlwEmwABPNwGAwABPP8BK8yBgA8AAS5dOwABPV8AAT14AAMAAYCpgA8AARoQBFsAAT2aBwABPYMBK8zu78sAAS5lKwABPeQEiIR7AAE+BwAD3/AIAAhzAAE+LLq0mAQABgMAAT5rASvMgAMAAkrdqwABPoWADwAD+GwkAACXAAE/NFsAAT8gWwABPxILAAE+9wErzZIKQwABGf4HqwABGjGADwABHnwbAAJK6gZbAAFDAwABQxcAAUbQAAMAAYC4AAAABA8AAUNfAAFG0AAAAAQEBwABQ6gAAAJpfYAPAAEtlAABcAT4BScAAUPclwABRAYDAAFD7wEr0HmAD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qgbAALPmAAC75AFqwACp9mADwAD/aAIAAAEDwACqG8AAs+YAAAABAQHAAKo1AAAAwABgXGADwABLrAAAYAPAAPxVAT4OTsAAqlrAAKpsAADAAGBdXQOTUwFgA73/AWrAAKp0XQOTUwFgA73/wAFtT07AAKqSwACqnwAAwABgMGADwACV/gEWwACqoS7AAGAEwACSk07AAKrAwACqxQAAgm1gA8AAlf4BH8AAqsvAAJYKAAAAAE7AAKruwACq9QAAgXZgA8AAlfkBg8AAqvfASzChPRfAAKsCLsAAYASDwACrFcBLMKHAAJKTScAAq/kWwACsDoDAAKv9wEswNbv1wABLsT4GRsAArCLAAKxZwACsNwAAAJlaYAPAAIdnABbAAKxRgMAArEDASzA1mYzAAEuvPgFJwACsYxbAAKxthcAArGfASzEao+nAAIdtPgROwACsksAArJwAAKPEYAPAAQACARzAAKylFsAArJ4uuLfAAJJlwACSicAASgoBAAGFwACst8BLMRoAwABm8z2MwACsycBLMMIfwACs1sAAlvYCAAKGwACs6sBLMVyEwACs9cBLMMIAPRzAAK0XFsAArQguwABgAsAAkpBWAQABhcAArRvASzEaAMAA/8A9icAArS3ASzBSHMAArVOBwACtQcBLMFKD7QEAAYXAAK1bwEsxGgCTYD9OwACuXcAArmQAAIJJYAPAAIdwARbAAK53gMAArmbASzA1gknAAEuwTsAArozAAK6WAACjxGADwAEAAgEcwACunxbAAK6YLri3wACSZcAAkonAAEoMAQABhcAArrnASzITAMAAZvQ9jMAArsjASzDCH8AArtXAAJb2AgAChsAArunASzI7hMAArvTASzDCAD0cwACvGhbAAK8DLsAAYAPAAJKRVgEAAYXAAK8ewEsyEwDAAP/APYnAAK8twEswUhzAAK9TgcAAr0HASzBSg+0BAAGFwACvW8BLMhMAk2A+AUbAAK93wACvrsAAr4wAAACZWmADwACHZwAWwACvpoDAAK+VwEswNZmMwABLrz4BScAAr7gWwACvwoXAAK+8wEsy+6PdwACHbD4CTsAAr+TAAK/uAACjxGADwAEAAgEcwACv9xbAAK/wLri3wACSZcAAkonAAEoIAQABhcAAsAbASzL7AMAAZvE9jMAAsBjASzDCH8AAsCXAAJb2AgAChsAAsDnASzM9hMAAsETASzDCAD9OwACwdMAAsHsAAIJJYAPAAIdwARbAALCOgMAAsH3ASzA1gknAAEuwScAAsJoWwACwpYXAALCewEszpcAATafAAId4PgNOwACxZ8AAsXEAAKPEYAPAAQACARzAALF6FsAAsXMuuLfAAJJlwACSicAASgkBAAGFwACxkcBLM6UAwABm8j2MwACxoMBLMMIfwACxrcAAlvYCAAKGwACxwcBLM+qEwACxzMBLMMIAPRzAALHnFsAAsdsuwABgAcAAko9WAQABhcAAsevASzOlAMAA/8A/PRfAALH/LsAAYASDwACyEsBLMKHAAJKTPRzAALIcLsAAYC4BAAEWwACyQIDAALIvwEswNYJtwABLrgDAAJK6ScAAskwWwACyYYDAALJQwEswNbv1wABLsT4BQ8AAsnUhFsAAso+BwACyfcBLMFKBVZNYPgM9HMAAsrEWwACyoi7AAGACwACSkIReAQABFsAAssqBwACyuMBLMFKD75NVAMAA/8I9HMAAsvAWwACy2S7AAGADwACSkYReAQABFsAAswmBwACy98BLMFKD75NVAMAA/8I9icAAsxjASzBSFsAAsz6BwACzLMBLMFKD8JNWPgE9HMAAs2sWwACzXy7AAGABwACSj4ReAQABFsAAs4OAwACzcsBLMDWCScAAS7AAwAD/wj0XwACzly7AAGAEgsAAs6rASzB9wACSkz0cwACzvC7AAGAWAQABhMAAs8rASzDCAMAAkqpKwACz1wEpBsAAktWBlsAAtE7AALRTwAC46wAAwABgVQAAAAEDwAC0asAAuOsAAAABAQHAALSBAAAAgVRgA8AAS7oAAFwBPgJOwAC0mMAAtJ8AAIJJYAPAAIdwARbAALSmgMAAtKHASzYCgknAAEvHScAAtLIiIRzAALS9gcAAtLbASzYYSAEAASsAwAD/dQAWwAC0z4HAALTIwEs2GKPpwACHdz4NTsAAtPLAALT/AADAAGAwYAPAAJX+ARbAALUBLsAAYATAAJKTTsAAtSLAALUnAACCbWADwACV/gEfwAC1LcAAlgoAAAAAPRfAALVFLsAAYASDwAC1WMBLNprAAJKTTsAAtXHAALV4AACBdmADwACV+QGDwAC1esBLNppGwAC1hsAAtbHAALWbAAAAmVpgA8AAh2cAFsAAtamAwAC1pMBLNgKZjMAAS8g+AUnAALW7FsAAtcWFwAC1v8BLNvij6cAAh20+A07AALXqwAC19AAAo8RgA8ABAAIBHMAAtf0WwAC19i64t8AAkmXAAJKJwABKCgEAAYXAALYPwEs2+ADAAGbzPYzAALYhwEs20x/AALYuwACW9gIAAobAALZCwEs3OoTAALZNwEs20wA9HMAAtm8WwAC2YC7AAGACwACSkFYBAAGFwAC2c8BLNvgAwAD/wD9OwAC2msAAtqQAAKPEYAPAAQACARzAALatFsAAtqYuuLfAAJJlwACSicAASgwBAAGBwAC2x8BLNhgAwABm9D2MwAC21sBLNtMfwAC248AAlvYCAAKFwAC298BLN8iEwAC3AsBLNtMAPRzAALcoFsAAtxEuwABgA8AAkpFWAQABFsAAtzGAwAC3LMBLNgKCScAAS8cAwAD/wD0cwAC3QC7AAGBDAQABgMAAt1bASzYCAMAAktI9HMAAt3oWwAC3Yy7AAGADwACSkYReAQABFsAAt4aAwAC3gcBLNgKCScAAS8cAwAD/wkbAALeVwAC3wMAAt6oAAACZWmADwACHZwAWwAC3uIDAALezwEs2ApmMwABLyD4BScAAt8oWwAC31IbAALfOwEs4tqPpwACHbT4BPRzAALgBFsAAt/IuwABgAsAAkpCEXgEAAYbAALgIwEs4tgDAAP/CPz0XwAC4KC7AAGAEgsAAuDvASzZ2wACSkz0cwAC4Ty7AAGAWAQABhMAAuF3ASzbTAMAAkqo+AT0cwAC4xC7AAGAuAQABFsAAuNyAwAC418BLNgKCbcAAS8UAwACSugbAAJLWgZbAALjwwAC49cAAvGIAAMAAYF4AAAABA8AAuQTAALxiAAAAAQEBwAC5EAAAAJpfYAPAAEtfAABgA8AA/FUBPghOwAC5L8AAuTQAAIFUYAPAAEtlARbAALk8gMAAuTbASzmogm3AAEthScAAuqwewAC6sMAA9/wCAAKBwAC6usBLOcMWwAC6wC7AAGAMwACSmwBKwAC62gEqP07AALr/wAC7EwAAwABgX2ADwABLZQEWwAC7FS7AAGAMwACSmz0XwAC7Mi7AAGAMgcAAu0zASznDwACSm07AALtbwAC7YwAAgqBgA8AA/FUBHMAAu2qBwAC7ZcBLOcOEUgEAAS4AwABLaj0XwAC7fC7AAGAMgsAAu5bASzocwACSm0nAALuwg8AAu7TASzpYPgJOwAC70cAAu94AALo4YAPAAEaZARbAALvmgMAAu+DASzmoujjAAEtiScAAu/ohHMAAvAuEwAC7/sBLOq1IAQABKwDAAP91PgE9HMAAvB4uwABgYAEAAYTAALwvwEs6rQDAAJLYPz9KwAC8UAGDwAC8V8BLOlgGwACS14GWwAC8Z8AAvGzAAL5wAADAAGApAAAAAQPAALx5wAC+cAAAAAEBAcAAvIYAAACD82ADwABGmQAAXAE+BEAWwAC8pBbAALyZLsAAYA3AAJKdgVXAAP6hwAC8mcAAvKsAQCEcwAC8voDAALy5wEs7TUgBAAErAMAA/3XAALy5wAC8xQA9HMAAvMwuwABgYAEAAYDAALzdwEs7TQDAAJLYQ8AAvOgWwAC8+hbAALzvLsAAYA3AAJKdg7fAAP6iQT4FPYjAAL0OwEs7TRzAAL0gFsAAvRUuwABgDcAAkp2fkAAAAADAAMSAQBbAAL1BgMAAvTzASztNui/AAEakwAC9PMAAvUcAQBzAAL1gFsAAvVcuu/DAAJKcgxwBAAGAwAC9acBLO00AwABGgcAAvVfAAL1uAEnAAL3tIiEcwAC+ABbAAL32gMAAvfHASztNui3AAEaiSAEAASsAwAD/dQAcwAC+Cy7AAGBeAQABFsAAviCAwAC+G8BLO026LcAARqIAwACS1j4BQsAAvjYAPz0cwAC+Ty7AAGBhAQABgMAAvmHASztNAMAAktwGwACS2IGWwAC+dcAAvnrAAL87AADAAGBgAAAAAQPAAL6KwAC/OwAAAAEBAcAAvpcAAACD82ADwABGmQAAXAE+A0nAAL6jIRbAAL6tgMAAvqjASzz6ui/AAEakSsAAvrUAP0nAAL75IRzAAL8HFsAAvv4uu/DAAJKcgxwBAAGAwAC/EMBLPPoAwABGgUrAAL8XAD89HMAAvy4WwAC/Iy7AAGANwACSnVYBAAGAwAC/MsBLPPoAwADEhAbAAJLZgZbAAL9AwAC/RcAAv/cAAMAAYGIAAAABA8AAv1PAAL/3AAAAAwMDwAC/YgAAAMAAYGNgA8ABAAIAwAC/dgAAAINKYAPAAQACAMAAv5AAAAClwmADwABDNAAAXAE+AT0cwAC/qS7AAGA5AwADgMAAv7jASz2zH8AAv8nAAJfkAQABgcAAv9jASz3FAILAAL/hwEs91QDAAJLBBsAAktqBlsAAwHvAAMCAwADPBQAAwABgZAAAAAEDwADAk8AAzwUAAAADAwPAAMC4AAAAwABgZV0DwAD+fQFdA8AAr5wBYAPAAEbQAMAAwNgAAADAAGBmYAPAAQACAMAAwO0AAADAAGBnYQMDYAPAAQACYAPAAQACYAPAAEM0XAAAXAE+DE7AAMFuwADBgwAAwABgaF0DwAD+8QJgA8ABAAJgA8AAQzQBMsAAwahgA8ABAAJgA8AAQzQATsAAwfDAAMH3AADAAER/XQPAAP59AV0DwACvnAFgA8ABAAIBHMAAwhOAwADCAcBLPlGAqwEBXQPAAK+cAWADwAEAAgE0wADCFwPAAMIXwADDjwAAAAEBAcAAwisAAACdV10DwACvnAFgA8AARtAAAF0DwACvnAFgA8ABAAIBPgVOwADCQMAAwksAALg+YAPAAQACARzAAMJbFsAAwk0uwABgB8AAkpaZdQEAARbAAMJohMAAwmPASz83g0rAAK+eAMAAr7g9HMAAwouDwADCd8BLPquAvwIAAoXAAMKMwEs/YBbAAMKmFsAAwp+EwADCmsBLPzeDSsAAr56lwsAARtMAwAD/Bk7AAMLGwADC1gAAwABgaWADwAEAAgEcwADC5hbAAMLYLsAAYAfAAJKWmXUBAAEWwADC84TAAMLuwEs/N8AAYGPAAK+fAMAAr7g9HMAAwxuDwADDB8BLPquAvwIAAoXAAMMcwEs/YBbAAMM7FsAAwy+EwADDKsBLPzfAAGBjwACvn6XCwABG0wDAAP8GSsAAw1QBH8AAw1/AAK+jAgFgA8ABAAIChcAAw2zASz9ghsAAw3jASz/mAADAAP6ITsAAxCHAAMQxAADAAGBqXQPAAP7xAmADwAEAAmADwAEAAgEewADEN8AA/vgAAmADwAEAAmADwAEAAgAATsAAxKTAAMSxAACWkV0DwAD+8QJgA8ABAAJgA8ABAAIBHsAAxLfAAP74AAJgA8ABAAJgA8ABAAIAAE7AAMUMwADFFQAAm9xdA8AA/r8BYAPAAQACATHAAMUfYAPAAQACAE7AAMWUwADFmgAAwABga10DwAD+vwFgA8ABAAIBMcAAxaRgA8ABAAIATsAAxe/AAMX8AADAAGBsXQPAAP6/AV0DwACvnAFgA8ABAAIBMcAAxgxdA8AAr5wBYAPAAQACAEbAAMYUwADGNsAAxiYAAACdV10DwACvnAFgA8ABAAIAhMAAxi7ASz7gPgFJwADGPiEcwADGThbAAMZHFMAAxkLAS0GnCgCDSsAAr55IAQABFsAAxlYUwADGUcBLQacKAMAAYGPAAK+fAMABABE+AT0cwADGehTAAMZtwEtBaAkAVgEAARTAAMZ+wEtBpwoAAMAA/tA/PYzAAMaXwEs+4BTAAMagwEtBaAkARsAAx3TAAMeWwADHhgAAAJ1XXQPAAK+cAWADwAEAAgCEwADHjsBLPuA+Az0cwADHrYXAAMeewEtAooC/AgACFsAAx7MUwADHrsBLQlEKAINKwACvnhbAAMfCFMAAx73AS0JRCgCDSsAAr54AwAD/Bj0cwADH3IbAAMfQwEtA3oC/AgACFsAAx+IUwADH3cBLQlEKAMAAYGPAAK+fFsAAx/YUwADH8cBLQlEKAINKwACvngDAAP8GPRzAAMgNh8AAyATAS0EYVgEAARbAAMgWFMAAyBHAS0JRCgDAAGBjwACvnwDAAP7QRsAAyKLAAMjEwADItAAAAJ1XXQPAAK+cAWADwAEAAgCEwADIvMBLPuA+AUnAAMjMHMAAyPIcwADI34XAAMjQwEtAoksBAAEWwADI5RTAAMjgwEtDOAoAwABgY8AAr58AwAD/BUgBAAErAMABABE+AT0cwADJCxTAAMkFwEtBPwgAVgEAARbAAMkUFMAAyQ/AS0M4CgDAAGBjwACvnwDAAP7QP0PAAMk1IRbAAMlGh8AAyT3AS0EYgVXAAP6hPgNDwADJVyEWwADJZRTAAMlfwEtBPwgAgVXAAP6hPgZOwADJf8AAyYsAAMAAYGNgA8ABAAIBHMAAyZMUwADJjcBLQT8IAIYuAAAAAMAA/t5OwADJsMAAybcAAINKYAPAAQACARzAAMnFhsAAybnAS0DeSwEAARTAAMnGwEtEDQoAAMAA/wVOwADKRsAAyksAAJ1XYAPAAQACARzAAMpchcAAyk3AS0CiSwEAARTAAMpdwEtEPQsAAMAA/wU9HMAAynqCwADKbsBLPoMgAwADFMAAynvAS0QNCgAUwADKiMBLRHMMADUAAAABAGADwABDNAEcwADKroPAAMqawEs+q0sBAAEUwADKr8BLRHMMAADAAP8FIxzAAMq1FADAS0TSDQBIAQABKwAAHMAAysyDwADKuMBLPqtLAQABFMAAys3AS0QNCgAAwAD/BRQAwEtE0g0AAWADwABDNAAAPRzAAMs1hcAAyybAS0CigL8CAAIUwADLNsBLRD0LABTAAMtAwEtEDQoAAMAA/wZJwADMFSIcwADMIBTAAMwZwEtEPQsASAEAARTAAMwjwEtEcwwAAMABABEAIRzAAMxAHMAAzDeGwADMK8BLQN5LAQABFMAAzDjAS0Q9CwAAwAD/BUgBAAErAMABABE+AT0cwADMWxTAAMxVwEtBPwgAVgEAARTAAMxfwEtEPQsAAMAA/tA/TsAAzKvAAMyzAABeYAPAAQACARzAAMy+h8AAzLXAS0EYhi4AAAAAwAD+3knAAM2VIiEcwADNshzAAM2ohcAAzZnAS0CiSwEAARTAAM2pwEtF/QoAAMAA/wVIAQABKwDAAQARACEcwADNzxTAAM3HwEtF/QoASAEAARzAAM3hhcAAzdLAS0CiSwEAARzAAM3uhsAAzeLAS0DeSwEAARTAAM3vwEtF/QoAAMAA/wUAwAD/BQDAAQARPgM9HMAAzhCCwADOBMBLPoMgAwADgcAAzhHASz5xFMAAzhvAS0X9CgAcwADOOIPAAM4kwEs+q0sBAAEUwADOOcBLRf0KAADAAP8FAAA9HMAAzluFwADOTMBLQKKAvwIAAhTAAM5cwEtF/QoAgcAAzmfASz5xAMAA/wY9HMAAzucUwADO4cBLQT8IAFYBAAEUwADO68BLRf0KAADAAP7QPwbAAJLbgZbAAM8KwADPD8AA0QQAAMAAYEgAAAABA8AAzyXAANEEAAAAAQEBwADPMgAAAIPzYAPAAEaZAABcAT4ETsAAz0rAAM9SAABVYAPAAK+kARzAAM9iFsAAz1QuwABgB8AAkpbAAGBtAQABgMAAz3HAS0d/AMAAr7lJwADPfBzAAM+IgcAAz4DAS0eVSAEAASsAwAD/dUrAAM+RAD89HMAAz54uwABgZAMAAxbAAM/DgcAAz7vAS0eVwABEf8AAr6YcwADP2RbAAM/LLsAAYAfAAJKWwABgbgAAAADAAK+3FsAAz+guwABgYsAAktkAwACS2kbAAM/+wADQM8AA0BYAAACdV10DwACvnAFgA8AARtAAFsAA0CaBwADQHsBLR5XAAFD9wACvpz4DTsAA0ELAANBHAACAvWADwAEAAgEcwADQVxbAANBJLsAAYAfAAJKWmXUBAAEWwADQZILAANBfwEtIUsAAYGPAAK+fAMAAr7g9HMAA0HgusDEBAAEWwADQgYLAANB8wEtIUoNKwACvngDAAJLDPRzAANCQLsAAYDkDAAODwADQn8BLSIIcwADQpS6hLwAAAADAAJKuNQAAAAEAYAPAAEM0ARbAANDCFsAA0LuCwADQtsBLSFKDSsAAr56lwsAARtMjHMAA0NSEAMBLSRVIAQABKwAAFsAA0OgWwADQ3ILAANDXwEtIUsAAYGPAAK+fpcLAAEbThADAS0kVAWADwABDNADAAJLBBsAAktyBlsAA0QnAANEOwADSTAAAwABgYQAAAAEDwADRH8AA0kwAAAABAQHAANEsAAAAg/NgA8AARpkAAFwBPgROwADRRcAA0VEAALnoYAPAAEbQARbAANFYgMAA0VPAS0mygx7AAEaLQ8AA0WMhHsAA0WvAAPf8AgACgcAA0XXAS0nIFsAA0YeAwADRgsBLSbKB6sAARowAPgJJwADRliEcwADRmy7AAGAOAQABgcAA0a/AS0nIAMAAkqY+AT0cwADRxy7AAGA6AQABgcAA0c7AS0nIAMAAksI/PYnAANHqwEtJyBbAANIEgcAA0fjAS0nIg7XAAEbaPRzAANIULsAAYEgBAAGAwADSK8BLSbIAwACS2z0cwADSNi6a8QEAAYHAANI8wEtJyADAAJLEBsAAkt2BlsAA0lHAANJWwADTYQAAwABgbwAAAAEDwADSaMAA02EAAAADAwPAANJ+AAAAg/NgA8AASLUAwADSiwAAAKrgYAPAAQACAMAA0qEAAAClwmADwABDNAAAXAE+BD0cwADSui6wMQEAARbAANLDgMAA0r7AS0rhhc3AAEi5AMAAksNOwADS3MAA0uMAAMAAYHBgA8AAlxABHMAA0uUuoS8AAAAAwACSrj0cwADS8C6wMQEAARbAANL5gMAA0vTAS0rhhc/AAEi6AMAAksM9HMAA0wUuoSwBAAEmwADTNAEcwADTNB/AANMOwACXrwMAA4HAANMYwEtK8YPAANMcwEtLPBzAANMkLqEvAAAAAMAAkq4AsJkBAAGCwADTSsBLSwEAwACV52ADwACXEADAAJKtBsAAkt6BlsAA02bAANNywADTrAAAubIBasAA02dgA8AA/2gCAAABA8AA04DAANOsAAAAAQEBwADTjAAAAIPzYAPAAErcAABbAT4BPRzAANOYLrAxAQABFsAA06GAwADTnMBLTCCCScAASt4AwACSwwbAAJLfgZbAANOxwADTscAA1CAAALoPAAAAAQPAANPCwADUIAAAAAICAsAA09EAAACD82ADwABItQDAANPeAAAAquBgA8ABAAIAAFsBPgE9HMAA0+guwABgbwMAA4DAANP7wEtMhIHAANQBwEtMlBbAANQKgMAA1AXAS0yEpcLAAEbTAMAAkt0GwACS4IGWwADUJcAA1CXAANSQAAC6GAAAAAEDwADUNMAA1JAAAAACAgLAANRBAAAAg/NgA8AASesAwADUTgAAAKrgYAPAAQACAABbAT4BPRzAANRYLsAAYG8DAAOAwADUa8BLTQyBwADUccBLTRwWwADUeoDAANR1wEtNDKXCwABG0wDAAJLdBsAAkuGBlsAA1QnAANUJwADWGwAAwABgcQAAAAEDwADVHcAA1hsAAAACAgLAANUrAAAAg/NgA8AASQQAwADVOAAAAKrgYAPAAQACAABbAT4CPRzAANVCLroPAgACgMAA1VTAS02WgcAA1VrAS02mAMAAkt9JwADVYyIhHMAA1WqBwADVZ8BLTaZIAQABJ5YKAMABABEAHMAA1XYuwABgFQEAAYDAANWNwEtNlgDAAJKpPgE9HMAA1ZwuoSwBAAEmwADV4wEcwADV4x/AANWlwACXrwMAAyeWChzAANW2LqEvAAAAAMAAkq4fwADVwcAAmJsBAAEnhA0AALCZAQABFsAA1f6AwADV+cBLTZalwsAARtMAwACV52ADwACXEADAAJKtPwbAAJLigZbAANYgwADWIMAA1sUAALoUAAAAAQPAANYwwADWxQAAAAICAsAA1j4AAACD82ADwABJNADAANZLAAAAquBgA8ABAAIAAFsBPgI9HMAA1lUusDEBAAEWwADWXoDAANZZwEtOuIXKwABJOADAAJLDPRzAANZsLqEsAQABJsAA1pMBHMAA1pMfwADWfsAAl74CAAKBwADWiMBLTsgcwADWjC6hLwAAAADAAJKuALCZAQABFsAA1q6AwADWqcBLTrilwsAARtMAwACV52ADwACXEADAAJKtBsAAkuOBlsAA1z7AANc+wADYPwAAwABgcgAAAAEDwADXUcAA2D8AAAACAgLAANdfAAAAg/NgA8AASTQAwADXbAAAAKrgYAPAAQACAABbAT4CPRzAANd2LroUAgACgMAA14fAS0+UgcAA143AS0+kAMAAkuJJwADXlhzAANeaLsAAYBUBAAGAwADXscBLT5QAwACSqT4BPRzAANfALqEsAQABJsAA2AcBHMAA2AcfwADXycAAl68DAAMnlgocwADX2i6hLwAAAADAAJKuH8AA1+XAAJibAQABJ4QNAACwmQEAARbAANgigMAA2B3AS0+UpcLAAEbTAMAAledgA8AAlxAAwACSrT8GwACS5IGWwADYRMAA2EnAANx5AADAAGBzAAAAAQPAANhfwADceQAAAAMCAsAA2HEAAAC56GADwABJ8ADAANiQAAAApcJgA8AAQzQAAcAA2K8AAADAAGB0YAPAAPxVAWrAANi4YAPAAPxVAFwBPgROwADYzcAA2NAAAKrgYAPAAQACARbAANjegMAA2NLAS1Cbu3/AAEnyTsAA2QPAANkIAACFzWADwABG0AEWwADZFoDAANkKwEtQm4XNwABIuU7AANktwADZMwAAhc9gA8AARtABFsAA2UGAwADZNcBLUJuFz8AASLpJwADZTCEcwADZU4PAANlQwEtQ30gBAAErAMABABE+BD0cwADZZC6wMQEAAYTAANlowEtRBwDAAJLDTsAA2YPAANmKAADAAGBwYAPAAJcQARzAANmMLqEvAAAAAMAAkq49HMAA2ZkusDEBAAGFwADZncBLUS8AwACSwz0cwADZqy6hLAEAASbAANn8ARzAANn8H8AA2bTAAJevAwADHsAA2b7AAJMeAgACg8AA2dTAS1DfgsAA2djAS1C8AIbAANniwEtRkRzAANnqLqEvAAAAAMAAkq4AsJkBAAGBwADaEsBLUKsAwACV52ADwACXEADAAJKtPglAHMAA2lpqwADaU2ADwAEAAsAAqTBIAQABJ4RBAMABABHAANpBwADaYwA9HMAA2mwusDEBAAGEwADacMBLUQcAwACSw07AANqHwADalgAAwABgdWADwACXnwEfwADapsAAl68DAAMnSBzAANq2LqEvAAAAAMAAkq4fwADawcAAmHkAAAAAAD0cwADa2i6wMQEAAYXAANrewEtRLwDAAJLDTsAA2vbAANsGAADAAGB2YAPAAJefAR/AANsMwACXrwMAAx7AANshwACTHgIAAidIgsAA2z3AS1C8ABzAANtHLqEvAAAAAMAA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S3vGlnvAAEgNYAO+WR/AAREYwABqnwEAARbAARE4g8ABES7AS3yFYcAA/u8AAAC3nAbAAJMFgZbAARFKwAERW8ABFHMAALmvAWrAARFLYAPAAP9oAgAAAQPAARFzwAEUcwAAAAEBAcABEYkAAACD82ADwABILQAAXAE+A07AARGkwAERrAAAlntgA8AAdycBJsABEaQBFsABEbOAwAERrsBLfcuWe8AASA1gA8AAdydJwAERwBbAARHMgcABEcTAS33hhRzAAHbYPgU9HMABEeYusDEBAAEcwAER9RbAARHvgMABEerAS33LglXAAEbWSwEAAZMAwAD+zgDAAJLDTsABEg/AARIWAACDxWADwACXEAEcwAESGC6hLwAAAADAAJKuTsABEjnAARJDAABbXQPAAP6/AWADwACXEAEcwAESRS6FuAEAARbAARJZgMABElTAS33LglXAAEbWAMAAkr5OwAEScMABEnsAAK0kYAPAAJcaARzAARKEFsABEn0uuLfAAJJlwACSibCCAQABgcABEpfAS33hAMAAZuI9HMABEqcuoSwBAAEmwAES8QEcwAES8R7AARKswACUuAMAA4LAARLHwEt+ZITAARLPwEt+xoPAARLbwEt+iACwmQEAARbAARMMgMABEwfAS33LpcLAAEbTAMAAledgA8AAlxAAwACSrT4DPRzAARM0LqEsAQABHMABE0IWwAETOS7AAEUIwACSZcAAkoTAAEUXAQABgcABE1fAS33hAMAAXjYAwACSrU7AARN8wAEThgAAW10DwAD+vwFgA8AAlxABHMABE4guhbgCAAEWwAETnIDAAROXwEt9y4JVwABG1gFqk8AAkr49HMABE7UuoSwBAAEfwAETvsAAl5YDAAIcwAETxi6hLwAAAADAAJKugsABE83AS3+pAaXCFsABE/qAwAET9cBLfculwsAARtMAwACSrT0cwAEULRbAARQaLsAASkLAAJJlwACSjLBVAQABHsABFEPAAGmRAQABJsABFGYBFsABFGaAwAEUYcBLfcuWe8AASA1gA746AAC3nAbAAJMGgZbAARR4wAEUicABF9QAALm9AWrAARR5YAPAAP9oAgAAAQPAARSgwAEX1AAAAAEBAcABFLUAAACD82ADwABKZgAAXAE+CU7AARTVwAEU3wAAW10DwAD+vwFgA8AAlxABHMABFOEuhbgBAAEWwAEU9YDAARTwwEuAtoJVwABG1gDAAJK+TsABFRDAARUYAACx9mADwACXEAEcwAEVKRbAARUiLri3wACSZcAAkomwmAEAARbAARVUFsABFUQutR3AAJJlwACSobIhuaEAwABm2E7AARV3wAEVgAAApVJgA8AATLgBFsABFYeAwAEVgsBLgLalUsAAR9BOwAEVpsABFa4AAISIXQPAAP+zAWADvhMBHMABFckWwAEVuC7AAFSbwACSZcAAkqPAAFSIAgACFsABFeqDwAEV4cBLgVaAvcAATMYWwAEV8C62xcAAkmXAAJKLAMAAe/c9HMABFg0WwAEWAy7AAEpCwACSZcAAkoywRwEAAYPAARYowEuBVgC3pE7AARY/wAEWSgAArSRgA8AAlxoBHMABFlMWwAEWTC64t8AAkmXAAJKJsJQCAAKDwAEWbcBLgVaEwAEWd8BLgX4AwABm5j0cwAEWhS6hLAEAASbAARbMARzAARbMHsABForAAJS4AwADgsABFqPAS4EKhcABFqzAS4IHgcABFrjAS4DMALCZAQABFsABFueAwAEW4sBLgLalwsAARtMAwACV52ADwACXEADAAJKtScABFwAWwAEXDYPAARcEwEuBVoVOwABMyD4BPRzAARcfLsAAYIQBAAGAwAEXLsBLgLYAwACTCknAARdAFsABF02DwAEXRMBLgVaFUMAATMk+AT0cwAEXXy7AAGCFAQABgMABF27AS4C2AMAAkwk+AT0cwAEXiC7AAGCDAQABgMABF53AS4C2AMAAkwg9HMABF7gWwAEXri7AAEpCwACSZcAAkoywQQAAAAC3pQbAAJMHgZbAARfZwAEX58ABG/0AAMAAYIYAAAABA8ABF/7AARv9AAAAAwMDwAEYFQAAAIPzYAPAAEfNAMABGCQAAAClUmADwABMuADAARg8AAAArWpgA786AABgA786AT4CScABGEghHMABGFkWwAEYUYDAARhMwEuDi5Z7wABH1EgBAAErAMAA/3U+Ak7AARl3wAEZgQAArr5gA74TARbAARmQFsABGYiAwAEZg8BLg4uWe8AAR9SFGb4zScABGaYcwAEZxhbAARm3FsABGaoutsXAAJJlwACSi4f2wABOk6qUAQABg8ABGdXAS4PtAMAActg+AUrAARnrARzAARoHFsABGfIuwABU7MAAkmXAAJKktlQBAAGDwAEaGsBLg+0Av2I+AkAcwAEaxBbAARq3LrbFwACSZcAAkoubbAEAAYPAARrSwEuD7QDAAE6fwAEat8ABGtwBHsABGuq2/QIAAoDAARsEwEuDiyQABifAAGCHFsABGyqAwAEbJcBLg4uWe8AAR9Qnm+qDwAEbOcBLg+0nv84nwABgiABKwAEbewEcwAEblxbAARuCLsAAVOzAAJJlwACSpLZXAQABg8ABG6zAS4PtAL9lP0rAARvKATUAAAABAGADvzoBgsABG9HAS4OrIxzAARvWgwDAS4UxSAEAASsAABbAARvuFsABG9kuwABU7MAAkmXAAJKkntK/R4MAwEuFMQFgA786BsAAkwiBlsABHALAARwHwAEjsQAAwABggwAAAAEDwAEcG8ABI7EAAAABAQHAARwrAAAAg/NgA8AAR80AAFwBPgROwAEcQMABHEkAAKVSYAPAAEy4ARbAARxQgMABHEvAS4WppVLAAEfQTsABHRzAAR0jAACCSWADviUBFsABHSqAwAEdJcBLhamWe8AAR9RJwAEdNyIiHMABHUOCwAEdPMBLhedIAQABKwDAAP91ARbAAR1VgsABHU7AS4XnhU6+LgAhHMABHu+BwAEe5sBLhb9IAQABGsABHvy5VQDAAP91PgJOwAEfysABH88AACBgA8AATLgBHsABH9XAAEzqAQABgcABH+7AS4W/AD0cwAEgFBbAAR//LsAASkLAAJJlwACSjLBXAQABH8ABICvAAGlTAwADg8ABIDbAS4ZhKxbAASBHgMABIELAS4WphTjAAEfYAAC3nT9JwAEgYiEcwAEgbYLAASBmwEuF50gBAAErAMAA/3U+A0AcwAEhkIHAASGHwEuFv7O7AQABgsABIZjAS4XnAMAATNjAASGHwAEhnwEewAEhq7b9AgACgMABIbTAS4WpJMABId8DgcABIbzAS4W/J8AAYImCwAEh2MBLhecAQCIhFsABIfqBwAEh8cBLhb+FTsAATMgAIRbAASIQgcABIgfAS4W/hVDAAEzJwAEh8MABIhgBJMABIlcDJ8AAYIqBwAEiTcBLhb8ngWo9HMABImoWwAEiYC7AAEpCwACSZcAAkoywVQEAAR7AASKAwABpkgMAAybAASKiAYLAASKiwEuF52ADvjoWwAEis4HAASKqwEuFv7XHwABMvRbAASLHgMABIsLAS4WphTjAAEfYAAC3nD4CTsABIvnAASL+AACtamADvzoBHMABIwouwABghgMAA4DAASMiwEuFqYHAASMowEuFvxbAASM3gMABIzLAS4WphZrAAEfWAMAAkwc9HMABI1YWwAEjTC7AAEpCwACSZcAAkoywVwEAAR/AASN4wABpUwMAA4HAASODwEuFv4PAASONwEuICRbAASOYgMABI5PAS4WphTjAAEfYAAC3nQbAAJMJgZbAASO2wAEju8ABJnsAAMAAYIUAAAABA8ABI8nAASZ7AAAAAgEBwAEj2QAAAIPzYAPAAEfNAAHAASPlAAAAuwFgA8AA/FUBasABI/FgA8AA/FUAXAE+AUnAASP/IiXAASQQFsABJAiAwAEkA8BLiNGWe8AAR9RgA743ACGBwAEkI8BLiOI+AT0cwAElPxbAASU1LsAASkLAAJJlwACSjLBVAQABHsABJVXAAGmUAQABJsABJW4BFsABJW6AwAElacBLiNGWe8AAR9RgA743AAC3nD4DTsABJZXAASWeAAClUmADwABMuAEWwAElpYDAASWgwEuI0aVSwABH0E7AASXDwAElyAAArWpgA786ARzAASXULsAAYIYDAAOAwAEl7MBLiNGCwAEl8sBLiYAWwAEmAYDAASX8wEuI0YWawABH1gDAAJMHPRzAASYgFsABJhYuwABKQsAAkmXAAJKMsFcBAAEfwAEmQsAAaVMDAAOCwAEmTcBLiYCDwAEmV8BLiagWwAEmYoDAASZdwEuI0YU4wABH2AAAt50GwACTCoGWwAEmgMABJoXAASnZAADAAGCEAAAAAQPAASaTwAEp2QAAAAEBAcABJqMAAACD82ADwABHzQAAXAE+AUnAASavIiEcwAEmwBbAASa4gMABJrPAS4pwlnvAAEfUSAEAASsAwAD/dQAiFsABJuEWwAEm2YDAASbUwEuKcJZ7wABH1IVOvi4BFsABJvoWwAEm8oDAASbtwEuKcJZ7wABH1Iebviw+AT0cwAEonRbAASiTLsAASkLAAJJlwACSjLBVAQABHsABKLPAAGmTAQABFsABKMyAwAEox8BLinCWe8AAR9QAALecPgNOwAEo88ABKPwAAKVSYAPAAEy4ARbAASkDgMABKP7AS4pwpVLAAEfQTsABKSHAASkmAACtamADvzoBHMABKTIuwABghgMAA4DAASlKwEuKcIHAASlQwEuLMhbAASlfgMABKVrAS4pwhZrAAEfWAMAAkwc9HMABKX4WwAEpdC7AAEpCwACSZcAAkoywVwEAAR/AASmgwABpUwMAA4HAASmrwEuLMoLAASm1wEuLWhbAASnAgMABKbvAS4pwhTjAAEfYAAC3nQbAAJMLgZbAASnewAEp6sABKy8AALmrAWrAASnfYAPAAP9oAgAAAQPAASoCwAErLwAAAAEBAcABKhgAAACD82ADwABIAQAAWwE+BD0cwAEqJC6wMQEAARbAASotgMABKijAS4wshZfAAEfXAMAAksNOwAEqRMABKkkAAIC9YAPAAJcaARzAASpSFsABKksuuLfAAJJlwACSibCGAQABFsABKmaAwAEqYcBLjCylUsAAR9AAwABm5D0cwAEqdS6hLAEAASbAASrGARzAASrGHsABKnrAAJS4AwADHMABKpMuoS8AAAAAwACSroHAASqawEuMZxzAASqgLoW4AQABFsABKrSAwAEqr8BLjCyCVcAARtYAwACSvgCwmQEAARbAASrhgMABKtzAS4wspcLAAEbTAMAAledgA8AAlxAAwACSrT0cwAEq+i7AAGCFAgABgMABKwnAS4wsAbsBFsABKyCAwAErG8BLjCy7AcAASAPAAJMJBsAAkwyBlsABKzTAAStAwAEsaAAAuakBasABKzVgA8AA/2gCAAABA8ABK1jAASxoAAAAAQEBwAErbgAAAIPzYAPAAEf3AABbAT4EPRzAASt6LrAxAQABFsABK4OAwAErfsBLjZ+Fl8AAR9cAwACSw07AASuawAErnwAAgL1gA8AAlxoBHMABK6gWwAEroS64t8AAkmXAAJKJsIYBAAEWwAErvIDAASu3wEuNn6VSwABH0ADAAGbkPRzAASvLLqEsAQABJsABLBwBHMABLBwewAEr0MAAlLgDAAMcwAEr6S6hLwAAAADAAJKugcABK/DAS43aHMABK/YuhbgBAAEWwAEsCoDAASwFwEuNn4JVwABG1gDAAJK+ALCZAQABFsABLDeAwAEsMsBLjZ+lwsAARtMAwACV52ADwACXEADAAJKtPRzAASxQLsAAYIQBAAGAwAEsX8BLjZ8AwACTCgbAAJMNgZbAASxtwAEsecABLq4AALmoAWrAASxuYAPAAP9oAgAAAQPAASyLwAEurgAAAAEBAcABLJsAAACD82ADwABH4wAAWwE+BE7AASywwAEstQAAIGADwABMuAEewAEsu8AATOoBAAEWwAEs2YDAASzUwEuO/KVSwABH0AA9HMABLOgusDEBAAEWwAEs8YDAASzswEuO/IWXwABH1wDAAJLDPRzAAS0ALqEsAQABJsABLXUBHMABLXUewAEtBcAAlLgDAAMcwAEtKy6hLwAAAADAAJKuHMABLTkWwAEtMi64t8AAkmXAAJKJsIYBAAGBwAEtSMBLjxIAwABm5BzAAS1PLoW4AQABFsABLWOAwAEtXsBLjvyCVcAARtYAwACSvgCwmQEAARbAAS2QgMABLYvAS478pcLAAEbTAMAAledgA8AAlxAAwACSrT0cwAEuaBbAAS5VLsAASkLAAJJlwACSjLBXAQABH8ABLn/AAGlTAwADgcABLorAS48SKxbAAS6bgMABLpbAS478hTjAAEflAAC3nQbAAJMOgZbAAS6zwAEuv8ABOb8AALmsAWrAAS60YAPAAP9oAgAAAQPAAS7QwAE5vwAAAAEBAcABLt8AAACD82ADwABICwAAWwE+BU7AAS74wAEvAAAAlntgA74lARbAAS8HgMABLwLAS5CUlnvAAEgNPTUAAAABAF0DwAD+vwFgA8AAY/MBFsABLxmAwAEvFMBLkJS65MAASBAjHMABLyyCAMBLkNFIAQABKwAAKxzAAS8sggDAS5DRg/0BAAEWwAEvPhbAAS80LsAASkLAAJJlwACSjLBTt6YAwAD+jQFcTsABL2/AAS95AABbXQPAAP6/AWADwACXEAEcwAEvey6FuAIAARbAAS+PgMABL4rAS5CUglXAAEbWAWqTwACSvknAAS+nHMABL7OBwAEvq8BLkKpIAQABFsABL8YWwAEvti61HcAAkmXAAJKhsuG6WgDAAP91PgE9HMABL+oWwAEv3i7AAElCwACSZcAAkqLAAE0nAAAAAMAAbB4/ScABMA0cwAEwGYHAATARwEuQqkgBAAEWwAEwLBbAATAcLrUdwACSZcAAkqGylboUAMAA/3U+BUAcwAEx0RbAATHKgsABMcDAS5E/YcAA/u9IAQABlQDAAP8/wAExwMABMdUATsABMe3AATH7AADAAGCLYAO+OgEWwAEyFxbAATIHLrUdwACSZcAAkqGylroVPRzAATJJFsABMj8uwABKQsAAkmXAAJKMsFUBAAEewAEyasAAaYUCAAKDwAEygcBLkj5qwAEynmADwABqe8AA8sUAALecTsABNQDAATUGAACFz2ADwACXEAEmwAE1AAEcwAE1cRzAATUKasABNQtgA8AAmX7AASMhIAIAAifAAGCMMcABNRtgA8AAlxACHMABNS4WwAE1JS7AAEUIwACSZcAAkoTAAEUXAQABg8ABNUPAS5I+AMAAXjYcwAE1ZILAATVbwEuRP0sBAAGUAMAA/s4AwACZgLCZAQABFsABNYyAwAE1h8BLkJSlwsAARtMAwACV52ADwACXED0cwAE1pi6hLAEAASbAATXSARzAATXSHMABNa1qwAE1rmADwACZfsABIyEgAgACJ8AAYI0xwAE1u2ADwACXEAIcwAE1xYLAATW8wEuRP0sBAAGTAMAA/s6EwAE1ysBLkrAAwACZgLCZAQABFsABNfiAwAE188BLkJSlwsAARtMAwACV52ADwACXEADAAJKtPgVOwAE2KgAAALBWYAPAAGlyAEnAATY7FsABNkeBwAE2P8BLkKqHnr4rPgJOwAE2bsABNnwAALXHYAPAAGp7AR/AATaCwABqnwIAAhbAATavgsABNqXAS5E/YcAA/u8WwAE2yhbAATa8gMABNrfAS5CUhTjAAEgOYcAA/u8APYvAATbbwEuT9h7AATbrwABplQIAAibAATcHAYHAATcHwEuQqmADvlKEwAE3EMBLlCAAScABNy0WwAE3OYHAATcxwEuQqoVOvi4+AT2LwAE3TcBLk/YewAE3XcAAaYcBAAGBwAE3ccBLkKoAScABN4gWwAE3lIHAATeMwEuQqoVQvi8+AT2LwAE3qMBLk/YewAE3uMAAaYgBAAGBwAE3zMBLkKoAPgNAFsABN/yBwAE39MBLkKqz2r4twAE39MABOAYATsABOB/AATgtAAC1x2ADwABqewEfwAE4M8AAap8CAAIWwAE4YILAAThWwEuRP2HAAP7vFsABOHsWwAE4bYDAAThowEuQlIU4wABIDmHAAP7vAD2LwAE4jMBLk/YewAE4nMAAaYUDAAMmwAE4wAGBwAE4wMBLkKpgA746hMABOMnAS5U1FsABON2AwAE42MBLkJSFOMAASA4APRzAATkFFsABOPsuwABKQsAAkmXAAJKMsFUBAAGDwAE5F8BLk/YAt5w9HMABOSkuoSwBAAEcwAE5NxbAATkuLsAARQjAAJJlwACShMAARRcBAAEmwAE5TAGBwAE5TMBLkKpgA746AMAAXjYAwACSrT0cwAE5XS6hLAEAAR/AATlmwACXlgMAAhzAATluLqEvAAAAAMAAkq6CwAE5dcBLkT8BpcIWwAE5ooDAATmdwEuQlKXCwABG0wDAAJKtBsAAkw+BlsABOcTAATnQwAFFeQAAua0BasABOcVgA8AA/2gCAAABA8ABOeDAAUV5AAAAAQEBwAE57gAAAIPzYAPAAEgYAABbAT4GTsABOgfAAToUAADAAGCOYAO+JQEWwAE6G4DAAToWwEuWwJZ7wABIDU7AATo0wAE6PwAAv4lgA74TARbAATpOgcABOkHAS5bWhRm+M07AATprwAE6dAAApVJgA8AATLgBFsABOnuAwAE6dsBLlsClUsAASBxOwAE6jsABOp4AAMAAYI9gA8AA/FUBHsABOqDAAK6sAgACgcABOrnAS5bWg8ABOsfAS5ciAEnAATrWFsABOuODwAE62sBLlyKFTsAATMg+AUnAATr1IhbAATsGgcABOvnAS5bWh5u+LAEWwAE7HoHAATsRwEuW1oVOvi4+AT0cwAE7PBbAATsyLsAASkLAAJJlwACSjLBVAQABHsABO1LAAGmLAQABgcABO2XAS5bWAAC3nD4BPRzAATuWFsABO4wuwABKQsAAkmXAAJKMsFUBAAEewAE7rMAAaY4BAAEmwAE7yAEWwAE7yIDAATvDwEuWwJZ7wABIDWADvjoAALecScABO+YWwAE784PAATvqwEuXIoVQwABMyT4BScABPAUWwAE8FoHAATwJwEuW1oebviw+AT0cwAE8MxbAATwpLsAASkLAAJJlwACSjLBVAQABHsABPEnAAGmMAQABJsABPGEBgcABPGHAS5bWYAO+NwAAt5w+AkAWwAE8nIHAATyPwEuW1oVQvi/AATyPwAE8pAA9HMABPLkWwAE8ry7AAEpCwACSZcAAkoywVQEAAR7AATzPwABpjQEAASbAATzoAYHAATzowEuW1mADvjoAALecPgFJwAE9E4TAAT0XwEuXSj4BPRzAAT08FsABPTIuwABKQsAAkmXAAJKMsFUBAAEewAE9UsAAaYoCAAImwAE9dQGBwAE9dcBLltZgA746H8ABPYfAAGqfAQABFsABPakWwAE9ooDAAT2d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AYDAAaC8wEvvNADAAJNDSsABoNYAScABoOscwAGg94bAAaDvwEvv2kgBAAEWwAGhChbAAaD6LrUdwACSZcAAkqGyZbnmAMAA/3U+AknAAaEnhMABoSvAS+91PgE9HMABoUEuwABguwEAAYDAAaFWwEvvNADAAJNDPgE9HMABoXkuwABgvQEAAYDAAaGJwEvvNADAAJNESsABoaMAScABobgcwAGhxIbAAaG8wEvv2kgBAAEWwAGh1xbAAaHHLrUdwACSZcAAkqGyZ7noAMAA/3U+AknAAaH7hMABof/AS+91PgE9HMABohUuwABgugEAAYDAAaInwEvvNADAAJNCPgE9HMABokouwABguAEAAYDAAaJewEvvNADAAJNBSsABongAPz9JwAGikiEcwAGiooHAAaKWwEvvREgBAAErAMAA/3U+AT0cwAGisy7AAGDABAADgcABosjAS+9EgsABotXAS+9Ug8ABotvAS+9kAarlhMABowLAS+91wACTSD4BPRzAAaMgLsAAYMAEAAOAwAGjNcBL7zSCwAGjPMBL71SDwAGjQsBL72QBquWEwAGjX8BL73XAAJNIBsAAk0iBlsABo3fAAaN8wAGmJAAAwABgwAAAAAEDwAGjkMABpiQAAAAEAwPAAaOlAAAAgXtgA8AARtAAwAGjtQAAAIKUYAPAAGPLAMABo80AAAClwmADwABDNAABwAGj7AAAAKrlYAPAAPxVAWrAAaP2YAPAAPxVAFwBPgU9HMABpA4WwAGkBC7AAEpCwACSZcAAkoywWQEAAR7AAaQiwABpxQEAAYHAAaQywEvzXQAAt549HMABpD8usDEBAAGAwAGkQ8BL800AwACSw07AAaRiwAGkaAAAhJtgA8AAmC0BJsABpGIBHMABpLkfwAGkdsAAmDsCAAIcwAGkiC6hLwAAAADAAJKuHMABpJYWwAGkjy64t8AAkmXAAJKJsH4BAAGBwAGkpcBL810AwABm6gCwmQEAAYLAAaTPwEvzbQDAAJXnYAPAAJgtPRzAAaUuLqEsAQABJsABpU0BHMABpU0fwAGlN8AAl74CAAInmkmEwAGlRsBL8+8AsJkBAAGCwAGlY8BL820AwACV52ADwACXEADAAJKtScABpbshg8ABpcDAS/N+PgE9HMABpdIuoSwBAAEmwAGl8QEcwAGl8R/AAaXbwACXvgIA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J54GAMABABHAAbX5wAG2HwBOwAG2K8ABtjQAAKrlYAPAAPxVARzAAbY/gcABtjbATAIiSAEAASeeBgDAAQARScABtk4iFsABtleAwAG2UsBMAhK7r8AASsEBFsABtm+AwAG2asBMAhK7sMAASsI+Aj0cwAG2iC6wMQEAARbAAbaRgMABtozATAISu63AAEq/AMAAksNJwAG2o4XAAbanwEwDDj0cwAG2sS6hLAEAAR/AAba6wACXvgIAAieaSRzAAbbJLqEvAAAAAMAAkq4AAMAAkq0/PgVAFsABtvGAwAG27MBMAhK7rsAASsDAAbbswAG2+wBOwAG3EcABtx0AALurYAPAAEbQARbAAbckgMABtx/ATAISu6vAAEq+TsABt0XAAbdTAAC6vGADwABj8wEmwAG3RQGDwAG3VcBMAkhgA8AAY/NOwAG3bcABt3UAAJZ7YAO+EwEWwAG3hYfAAbd3wEwEGpZ7wABj9UnAAbeUHMABt6AUwAG3mMBMBEMIAEgBAAEWwAG3sxbAAbejLrUdwACSZcAAkqGbL7mSAMAA/3U+AUnAAbfIhcABt8zATAMOPgE9HMABt+IuwABgvwEAAYTAAbfvwEwCpgDAAJNGPgE9HMABuBIuwABgvgEAAYTAAbgcwEwCpgDAAJNFScABuDscwAG4RxTAAbg/wEwEQwgASAEAARbAAbhkFsABuFQutR3AAJJlwACSoZsuuYkAwAD/dT4BPRzAAbkTLqEsAQABHMABuRguwABgUQIAAiGFwAG5KMBMAw6CwAG5MsBMAjIAwACTGgDAAJKtScABuVQcwAG5YBTAAblYwEwEQwgASAEAARbAAblzFsABuWMutR3AAJJlwACSoZs1uY4AwAD/dT4BPRzAAbmKLrPdAwADhMABuZbATAKmgcABuZ3ATAIigsABuafATAIyAMAAkztJwAG5yBzAAbnUFMABuczATARDCABIAQABFsABuecWwAG51y61HcAAkmXAAJKhmzS5jQDAAP91PgE9HMABuf4uwABgrwMAA4TAAboKwEwCpoHAAboRwEwCIoLAAbobwEwCMgDAAJM6ScABujwcwAG6SBTAAbpAwEwEQwgASAEAARbAAbpbFsABuksutR3AAJJlwACSoZszuYsAwAD/dT4BPRzAAbpvLrPcAwADhMABunjATAKmgcABun/ATAIigsAB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TA2SpcLAAEbTAMAAledgA8AAlxAAwACSrQbAAJNSgZbAAcjIwAHI2cABzMIAALnOAWrAAcjJYAPAAP9oAgAAAQPAAcjswAHMwgAAAAEBAcAByP0AAACD82ADwABLAAAAXAE+CE7AAckXwAHJHAAAl1RgA8AAlxABHMAByR4uwABgzMAAkmUBAAGAwAHJQsBMEVsAwACStE7AAclWwAHJYwAAwABgMGADwACV/gEWwAHJZS7AAGAEwACSk07AAcmIwAHJjQAAgm1gA8AAlfkBH8AByZPAAJYKAAAAAD0XwAHJqS7AAGAEJsAByakBg8ABybzATBHIYAPAAJX+wACSk0nAAcnGFsAByc+AwAHJysBMEVu7ycAASxU+AT0cwAHJ7C7AAGCfAwACFsAByh8WwAHKDy61HcAAkmXAAJKhso66DRbAAcpDgMAByj7ATBFbukvAAEeDAaXCFsABynOAwAHKbsBMEVulwsAARtPAAJMqScABypIWwAHKm4DAAcqWwEwRW7vIwABLFj4EPRzAAcq4LrAxAQABFsABysGAwAHKvMBMEVu6S8AAR4MAwACSw07AAcrewAHK6QAArSRgA8AAlxoBHMAByvwWwAHK9S64t8AAkmXAAJKJsIYBAAEWwAHLEIDAAcsLwEwRW7vHwABLBgDAAGbkTsABy0DAActFAAAgYAPAAJcQASbAActAARzAAct5HsABy0fAAJS4AwADHMABy2IuoS8AAAAAwACSroTAActpwEwSvjHAAct1YAPAAJcQAACwmQEAARbAAcuUgMABy4/ATBFbpcLAAEbTAMAAledgA8AAlxA9HMABy64uwABgFgEAASbAAcvbARzAAcvbH8ABy8vAAJaNAQABhcABy9XATBMFALCZAQABFsABy/aAwAHL8cBMEVulwsAARtMAwACV52ADwACV+QDAAJKqPz0XwAHMFS7AAGAEgsABzCjATBGkwACSkz2LwAHMOsBMEcgcwAHMQS7AAGAxAQABJsABzFEBg8ABzFHATBHIYAPAAJX+AMAAkrw9HMABzFwuwABgFgEAASbAAcyQARzAAcyQH8ABzG7AAJYxAgACgcABzHvATBFxg8ABzIHATBHIALCZAQABFsABzKuAwAHMpsBMEVulwsAARtMAwACV52ADwACV+QDAAJKqBsAAkrSBlsABzMfAAczVwAHQYgAA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AACa7WADwACXEAEcwAHm0y6hLwAAAADAAJKuPRzAAebpFsAB5t8uwABKQsAAkmXAAJKMsFkBAAEewAHnAcAAacUBAAEWwAHnDoDAAecJwEwpHLwZwABMTgAAt55OwAHnOMAB5z4AAISbYAO+NwEjFsAB50WAwAHnQMBMKRyF9cAATE8WwAHnaxbAAedbLrUdwACSZcAAkqGywLo8FsAB55MWwAHngy61HcAAkmXAAJKhsr+6OwFgA743TsAB56vAAeewAACAvWADwACXGgEcwAHnuRbAAeeyLri3wACSZcAAkomwhAEAAYPAAefTwEwqBQDAAGbhPRzAAefgLqEsAQABJsAB6AwBHMAB6AwcwAHn52rAAefoYAPAAJl+wAEjISACAAInwABgkTHAAef1YAPAAJcQA4HAAef2wEwpV4TAAef9wEwqY4LAAegDwEwpoADAAJmAsJkBAAEWwAHoMIDAAegrwEwpHKXCwABG0wDAAJXnYAPAAJcQAMAAkq0GwACTXIGWwAHoTMAB6FjAAenYAAC51wFqwAHoTWADwAD/aAIAAAEDwAHoasAB6dgAAAABAQHAAeh6AAAAg/NgA8AATF0AAFsBPgU9HMAB6IYusDEBAAEWwAHoj4DAAeiKwEwrXbpLwABMZADAAJLDTsAB6K/AAei2AACWnGADviUBFsAB6L2AwAHouMBMK12WnMAATGI9HMAB6NMWwAHoyS7AAEpCwACSZcAAkoywVQEAAR7AAej4wABphQIAAibAAekFAYHAAekFwEwrmGADvjpqwAHpG2ADwABqe8AA8sUAALecTsAB6TjAAelFAADAAGDUYAPAAJcQARzAAelQFsAB6UcuwABFCMAAkmXAAJKEwABFFwEAASbAAellAYHAAellwEwrmGADvjoAwABeNj0cwAHpci6hLAEAASbAAemdARzAAemdHMAB6XlqwAHpemADwACZfsABIyEgAgACJ8AARtkxwAHphmADwACXEAKCwAHph8BMLA0cwAHplS6hLwAAAADAAJKuAMAAmYCwmQEAARbAAenBgMAB6bzATCtdpcLAAEbTAMAAledgA8AAlxAAwACSrQbAAJNdgZbAAendwAHp6cAB6l4AALnYAWrAAeneYAPAAP9oAgAAAQPAAen6wAHqXgAAAAEBAcAB6gkAAACD82ADwABMbwAAWwE+AT0w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kQTAAJN9gZehRqFnCYC9AWqhLmADwAD/aAJgA8ABAAIBJ8AAYOYEwACTf4GXoYyhowm1OMAAk2QAYAPAAEKhAATAAJOAgZehvaHFCbMEwACTZABgA4EUAATAAJOBgZeh6aH6CcAAUzrAAJNkAGADwAB5TQAEwACTgoGXohGiHQm2xcAAk2QAYAPAAE6FAATAAJODgZeiN6JACcAASkLAAJNkAGADt5EABMAAk4SBl6JeomIJwABg6MAAk2QAYAPAAKx+AATAAJOFgZeibaJzGMAAYOnAAJNkAGADwABF6wErAQXAAJPEgZeieKJ4owkAAAADopCjCQAAAAYGBqKWAAAEtThgA8AAQqEAorQAAASzBGADgRQAoskAAATAAFM6YAPAAHlNAKLhAAAEtsVgA8AAToUAovQAAATAAEpCYAO3kQCjBAAABMAAYOhgA8AArH4AAGADwACTegE/BwgBwACTf4AAwExKSQgBwACTgIEAwExKVwgBwACTgYIAwExKYwgBwACTgoMAwExKcwgBwACTg4QAwExKgQgBwACThIUAwExKjwkBonjAAEZ7AAAAADkGwACTh4GXow6jIqNPAQC0WQAAAAEDozGjTwAAAAAAAABgA7qCAUqjNAEWo0EWozQutsXAAJNkwACTgrRZwABOjQbAAJOJgZejVKNso6oBAMAAVOzAAJNkAAAAAQOjgaOqAAAAAAAAAGADv0UBSqOKARajlxajii62xcAAk2TAAJOCscbAAE6OBsAAk4qBl6Ovo76j5AEAwABJQsAAk2QAAAABA6PKo+QAAAAAAAAAYAPAAGwlAUqjzQEWo9oWo80utsXAAJNkwACTgrjPwABOiQbAAJOMgZej6aP6pFAAALoLAWqj6mADwAD/aAIAAAEDpASkUAAAAAEBAaQMAAAAwABbx2ADwABF6wAAXAE+Aj0XpBsuwABg6cAAk2SApCTATEv5wACThT0cpDEuud4BAAGApETATEv5AMAARdYGwACTjYGXpFWkYawHAAC54AFqpFZgA8AA/2gCAAABA6RwrAcAAAABAQGkfQAAAJpfYAPAAEaZAABbAT4DPRykii7AAGDqAQABgKSXwExMZgDAAJOOTqSwpLwAALnoYAPAAEbQARakxICkvsBMTGaDHsAARotDpM8hHKTigaTWwExMkkgBAAErAMAA/3U+BE6lAKUFAACDtWADwABG0AEWpROBpQfATEySg7XAAEbaTqUspTgAAIRcYAPAAEbQASalLAEcpUaBpTrATEyShFIBAAEuAMAAR0JgA8AARtBJpVohHKVqg6VewExM7EgBAAGBpW3ATEySAMAA/3U+Bj0cpYqApYTATExmukcCAAKBpZLATEySg6WfwExM7ADAAEbCSabLISIWpyQcpu6DptHATEzstnYBAAEWpv0uwABU7MAAk2TAAJOJAMAARzK1T78oABanlxynYYGnRMBMTJK2dgEAARancC7AAFTswACTZMAAk4kAwABHMrVPvyg+Ak6oPahFAACphGADvzoBHKhcFqhHLsAAVOzAAJNkwACTiZdYAgACFqiEg6h4wExM7LqLwABHEBaooYGolcBMTJK6i8AARxAAv5E9F6jJg6i9wExM7LqLhKjbwExNvMAARxA/PTUAAAABAGADwABG0AGDqYTATEzsIxypnhapkISpkMBMTh+lwcAARtJIAQABKwDAAP91F6mQhKmQwExOH6XBFqmugamiwExMkqXBwABG0sAARtIrAWADvf89NQAAAAEAYAPAAEbQAYOpxcBMTOwjHKnjFqnRhKnRwExOeKXCwABG00gBAAErAMAA/3UXqdGEqdHATE54pcIWqfOBqefATEySpcLAAEbTwABG0ysBYAPAAEM0SaoOIRyqH4OqE8BMTOy6JQAAAADAAEc8PgI9HKr5gKrzwExMZro7AgACgasCwExMkoOrD8BMTOwAwABGvT2Kq5zATEzMg6ujwExM7D89HKvIgKvCwExMZoReAQABgavPwExMkgDAAEa/Pz2Jq+vATEySgqv5wExMzAbAAJOOgZesR6xHugkAAMAAYOoAAAABA6xTugkAAAABAQGsYAAAAJpfYAPAAEaZAABbAT4ZSazMFqzbFqzWgKzQwExPbLoswABGoIFVwABGjkqs5AA/Tqz1rPkAALpAYAPAAEncASas9QEWrQYWrQGArPvATE9suizAAEaggx7AAEaLYAPAAEncSa0RIRytHhatGYGtFcBMT6GDtcAARtpIAQABKwDAAP91Sq0nAD9JrTMhHK1RFq1KFq09gK03wExPbLoCwABGpWHAAP7vSAEAAZUAwAD/P0qtVwA/QBytfBatdRatboGtasBMT6GCVcAARtZhwAD+70gBAAGVAMAA/z+taq2AAE6tk62WAADAAGDrYAPAAEaZARytqhatnoCtmMBMT2y6AsAARqVLAQABkwDAAP7OTq2/rcIAAMAAYOxgA8AARpkBHK3WFq3KgK3EwExPbLoCwABGpUsBAAGUAMAA/s5Oreut9QAAujFgA8AARpkBFq39gK33wExPbLoxwABGp0muDCEiHK4fFq4Vgq4SwExQU7oxwABGp0gBAAGEriLATFCxAMAA/3UAHK48Fq4yg64vwExQgroxwABGp0gBAAGErj/ATFCxAMAA/3VKrksAP06uj66bAADAAGDtYAPAAEbQARaup4SuncBMULGB6sAARoxJrrEhJa7Bha61wExRImADwABJj0quygA/Tq7jrugAAJdUYAPAAEbQARau/Rau9oWu6sBMUSKCVcAARtaAw8AA/qVJrwkcryAWrxkWrxKGrw3ATFFduibAAEbXYcAA/u+AlwEAAZQAwAD/S0qvJQA/Tq83rz8AAKwsYAPAAPxVASpDr0wlr1iGr1PATFFdYAPAAEm7PgM9jq9pwExRXRavfBavdYavcMBMUV2CVcAARtaAw8AA/qVJr4ocr6EWr5oWr5OGr47ATFFduibAAEbXYcAA/u+AlwEAAZQAwAD/S0qvpgA/PY+vtMBMUbQhh6+/wExRtEmv0yElr9yGr9fATFFdYAPAAEnwSq/rAD9OsAQAAADAAGDuYAPAAEbQAEmwEBawQBywIxywHxawGYawFMBMUV2CVcAARtZLAQABkwDAAP7OqFwBAAEWsCouwABU7MAAk2TAAJOJAMAARx61T78oPgE9FbBawExSUggcsG4WsGiGsGPATFFdglXAAEbWSwEAAZQAwAD+zkmwfhawrhywkRywjRawh4awgsBMUV2CVcAARtZLAQABlADAAP7OqFwBAAEWsJguwABU7MAAk2TAAJOJAMAARx61T78oPgE9FbDIwExSUggcsNwWsNaGsNHATFFdglXAAEbWSwEAAZMAwAD+zj4BSrD0AE6xFLEiAADAAGDvYAPAAEbQARyxLhaxKIGxJMBMT6GCVcAARtZLAQABI4exL8BMUbSUkwFgA8AA/hsAwAD+zk6xUrFjAADAAGDwYAPAAEbQARyxbxaxaYGxZcBMT6GCVcAARtZLAQABI4excMBMUbSTlAFgA8AA/hsAwAD+zk6xkrGgAADAAGDxYAPAAEaZARyxtBaxqICxosBMT2y6AsAARqVLAQABI4extcBMUbSUkwFgA8AA/hsAwAD+zk6x17HoAADAAGDyYAPAAEaZARyx/Bax8ICx6sBMT2y6AsAARqVLAQABI4ex/cBMUbSTlAFgA8AA/hsAwAD+zkmyryIiIiIcsrMuwABg88AAk2QCAAIUssfATFJSCAAUss/ATFOACgAAwACTkQAcsuwuwABg9MAAk2QCAAIUsvzATFNBCQAqAMAAk5AAFrNuHLM7FLMdwExTgAoAtnoBAAEWs0suwABU7MAAk2TAAJOJAMAARza1T78oAByzii7AAGD1wACTZAEAARSzl8BMU78LAADAAJOSAByzsS7AAGD1wACTZAEAARSzvsBMU/4MAADAAJOSPgZOs+az8wAAqplgA8AARtABHLP8FrP1LsAAYOnAAJNkwACThbn+AgACKRa0Ei62xcAAk2TAAJOCAMAARgVOtDS0QAAAhFxgA8AARtABNbRGAAABAGADwABJ8AEftEbAAEn6BAAEFLRbwExSUggAFLRjwExU9Q0AKxa0jBa0dy7AAFTswACTZMAAk4mFvb9KADUAAAABAFsBF7SgFLSewExVQQ4ApcEWtLSBtLDATE+hpcHAAEbSwABG0jUAAAABAFsBF7TMFLTKwExVQQ4ApcIWtOSBtODATE+hpcLAAEbTwABG0xQAwExVQQ4APRy1A4C0/cBMT2y6RwIAAoG1C8BMT6EUtRDATFUxDgAAwABGwj0ctSqAtSTATE9sujwBAAEUtTXATFUxDgAAwABGtz0ctU+AtUnATE9sukEBAAGBtVnATE+hAMAARrxKtWUAP0m2EyIiIiIcthcuwABg88AAk2QCAAIUtivATFJSCAAUtjPATFOACgAAwACTkQActlAuwABg9MAAk2QCAAIUtmDATFNBCQApAMAAk5AAFrbRHLaeFLaAwExTgAoAtnoBAAEWtq4uwABU7MAAk2TAAJOJAMAARza1T78oABy27S7AAGD1wACTZAEAARS2+sBMU78LAADAAJOSABy3FC7AAGD1wACTZAEAARS3IcBMU/4MAADAAJOSPghOt0m3VwAAqppgA8AARtABHLdgFrdZLsAAYOnAAJNkwACThbn+AgACKha3dy62xcAAk2TAAJOCAMAARgVOt5m3oQAAm3dgA8AARtABH7enwABJ+gQABBS3vMBMUlIIABS3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SsAAQokBgMAAQpDATF28P0bAAEL9wABDKgAAAAEAYAPAAEbQABzAAEMgFsAAQxmAwABDFMBMXby6JsAARteArQAAAADAAP6TPgNOwABDDAAAAKQfYAPAAEiJASbAAEL9AYHAAEMMwExefWADwABIiT0cwABDPxbAAEM5gsAAQzTATF6vml/AAEbYukcCAAKCwABDR8BMXq+AwABDTcBMXbwAwABGwj0cwABDZxbAAENhgsAAQ1zATF6vml/AAEbYhF4BAAGCwABDbsBMXq8AwABGvz89HMAAQ4guwABg+AEAAYDAAEOlwExdvADAAJOWSsAAQ7ABgMAAQ7fATF28BsAAk5iBl8AAQ8TAAEPdwABFZQAAhcsBasAAQ8VgA8AA/2gCAAABA8AAQ+XAAEVlAAAAAQEBwABD6wAAAIPzYAPAAEm7AABgA8AARtABPgVOwABECsAARBEAAIJVXQPAAP6/AWADwABG0AEWwABEGIDAAEQTwExfmYJVwABG1kAcwABEORbAAEQygcAARCvATF+0YcAA/u9IAQABlADAAP8/wABEK8AARD0ATsAARFHAAERXAACBe2ADwABG0AEcwABEX4HAAERZwExftEsBAAGTAMAA/s5JwABEaCXAAERygsAARGzATGAPYAPAAEmlPgNOwABEksAARJsAAIYdYAPAAEmlARTAAESdwExgDwIBYAPAAEmlTsAARK/AAES2AAC7amADwAD8VQEWwABEyhbAAETBg8AARLjATGBWhh3AAEmnu2rAAGI9SsAARNgBHMAAROYWwABE3y7AAGDpwACTZMAAk4W5/gIAAiGEwABE98BMYHsWwABE/y62xcAAk2TAAJOCAMAARgVJwABFGSXAAEUjgsAARR3ATGAPYAPAAEm7PgFKwABFNAEcwABFRxbAAEVBFMAARTvATGAPAgFgA8AASbuCVcAARtZLAQABkwDAAP7OP0rAAEVWAYDAAEVdwExfmQbAAJOZgZfAAEVqwABFg8AARhsAALoUAWrAAEVrYAPAAP9oAgAAAQPAAEWTwABGGwAAAAEBAcAARaEAAACD82ADwABJNAAAYAPAAEbQAT4CTsAARbrAAEXBAADAAGD5YAPAAEbQARzAAEXDLsAAYPoCAAIcwABF0oDAAEXNwExhgJ0oAAAAAMAASToWwABF5IDAAEXfwExhgIXKwABJOADAAJOaSsAARfIBIyEcwABGAIHAAEX5wExhm0gBAAErAMAA/3WBwABGCsBMYZuAwABGE8BMYYABYAPAAEbQBsAAk5qBl8AARiDAAEYtwABHaAAAwABg+gAAAAEDwABGNsAAR2gAAAACAgLAAEZdAAAAnShgA8AAau4AwABGdQAAAIXKYAPAAEbQAABgA8AARtABPgJJwABGhCXAAEaQgcAARojATGJjYAPAAEmlPgNOwABGsMAARrkAAIWXYAPAAEmlARTAAEa7wExiYwEBYAPAAEmlTsAARtjAAEbfAADAAGD5YAPAAGI4ARzAAEbrgMAARuHATGJTg18BAAEWwABG+YLAAEbwwEximYYdwABJpwDAAGrwScAARwohHMAARxWDwABHDsBMYr5IAQABKwDAAP91SsAARx4BHMAARywWwABHJS7AAGDpwACTZMAAk4WrFwIAAoPAAEc4wExivhbAAEdALrbFwACTZMAAk4IAwABF/j8/SsAAR1kBKwbAAJObgZfAAEdtwABHesAATkMAAMAAYPsAAAABA8AAR5zAAE5DAAAAAQEBwABHrAAAAIPzYAPAAEfNAABgA8AARtABPgNOwABHxcAAR9QAAMAAYPxgA8AARtABHMAAR+EWwABH24DAAEfWwExjkoJVwABG1ksBAAGUAMAA/s5JwABH6hbAAEg6HMAASAaBwABH7sBMY622ZwEAARbAAEgbLsAAVOzAAJNkwACTiQDAAEcktU+/KD4HScAASFQcwABIZ4HAAEhYwExjrbqvAAAAAMAAR1A+A07AAEiPwABInQAAwABg/WADwABJpQEmwABIjwGBwABIn8BMY61gA8AASaVOwABIy8AASNQAAIYdYAPAAGLuASbAAEjLARbAAEjkgsAASNbATGQ/hh3AAEmnYAPAAGLuSsAASPYBHMAASQQWwABI/S7AAGDpwACTZMAAk4W5+QIAAhbAAEkcg8AASRPATGRqYcAAYvQWwABJJC62xcAAk2TAAJOCAMAARgBJwABJQBzAAElTgcAASUTATGOturAAAAAAwABHUT4DTsAASXnAAEmHAADAAGD9YAPAAEmlASbAAEl5AYHAAEmJwExjrWADwABJpU7AAEmzwABJvAAAhh1gA8AAYxkBJsAASbMBFsAAScyCwABJvsBMZQeGHcAASadgA8AAYxlKwABJ3gEcwABJ7BbAAEnlLsAAYOnAAJNkwACThbn5AgACFsAASgSDwABJ+8BMZTJhwABjHxbAAEoMLrbFwACTZMAAk4IAwABGAD9OwABKLsAASjYAAMAAVZdgA8AA/FUBHsAASkLAAJNmAgACFsAASl+BwABKUMBMY626i8AARxAWwABKcC62xcAAk2TAAJOCAE7AAEqTwABKngAArg1gA786ARbAAEqlgMAASqDATGOSuovAAEcQTsAASsrAAErVAAC67WADvzoBFsAASuwWwABK1y7AAFTswACTZMAAk4m2Sb9YScAAS04WwABLuhzAAEtyFsAAS1IuwABU7MAAk2TAAJOJtl8CAAKDwABLhcBMZfgWwABLoBbAAEuRLrRZwACTh7JquesAv221T78oPgE9jMAAS9bATGYeFsAAS/gWwABL4y7AAFTswACTZMAAk4m2R79WScAATBEWwABMfRzAAEw1FsAATBUuwABU7MAAk2TAAJOJtl8CAAKDwABMSMBMZfgWwABMYxbAAExULrRZwACTh7JpueoAv221T78oPgE9jMAATJnATGYeFsAATLsWwABMpi7AAFTswACTZMAAk4m2SL9XP07AAEzgwABM5wAAgXZgA8AASFcBH8AATPfAAEhmAwACgcAATQLATGOthMAATRLATGYeAazgIYLAAE0twExlsUrAAE09AYXAAE1EwExnMEnAAE1XHMAATWqBwABNW8BMY626sQAAAADAAEdSPgNOwABNjcAATZsAAMAAYP1gA8AASaUBJsAATY0BgcAATZ3ATGOtYAPAAEmlTsAATcTAAE3NAACGHWADwABjOQEmwABNxAEWwABN3YLAAE3PwExnnYYdwABJp2ADwABjOUrAAE3tARzAAE37FsAATfQuwABg6cAAk2TAAJOFufkCAAIWwABOE4PAAE4KwExnyGHAAGNCFsAAThsutsXAAJNkwACTggDAAEYAP0rAAE40ASsGwACTnIGXwABOSMAATlXAAF1/AADAAGD+AAAAAQPAAE5qwABdfwAAAAEBAcAATnoAAACD82ADwABHzQAAYAPAAEbQAT4KTsAATs3AAE7XAACdKGADwABq6QEcwABO6hbAAE7egMAATtnATGh5uvDAAEfPnSgAAAAAwACHwEnAAE77IRzAAE8JgcAATv/ATGiUSAEAASsAwAD/dT4CTsAATyfA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wExym7ruAQABKQDAAEfKgwDATHKbScAAYLMhHMAAYNYWwABgxRbAAGC4LrbFwACTZMAAk4K40MAATo/AAFK4AQABFsAAYP0WwABg7i60WcAAk4eyWLnZAMAAhMY+AUrAAGEUAYPAAGEbwExyhT89HMAAYUMWwABhPYDAAGE4wExxuppfwABG2LpDAgACgMAAYU3ATHG6g8AAYVPATHKFAMAARr5OwABheAAAAMAAQo1gA8AARtAAScAAYYYWwABhkxbAAGGKLrMEwACTZMAAk4CCuIFWPgI9jMAAYa3ATHQhH8AAYbjAAEyHAgACHMAAYe0WwABh2hbAAGHNLrbFwACTZMAAk4KlWcAATouzgQIAAhbAAGIfFsAAYhAutFnAAJOHsli52THAAGItYAPAAGPLARbAAGI9FsAAYi4utFnAAJOHhdi5sAC8WxbAAGJqFsAAYlUuwABU7MAAk2TAAJOJntK/RwA9HMAAYokWwABig4DAAGJ+wExxuppfwABG2LpDAgACgMAAYpPATHG6hMAAYpnATHQhAMAARr4+BE7AAGLEwABi0wAAwABhBGADwABG0AEfwABi2cAATDsEAARqwABjD2ADwABMIMAA/KocwABjUhbAAGMwFsAAYyMutsXAAJNkwACTgqVZwABOi7QZAQABFsAAY20WwABjXi60WcAAk4ebNbmOALxdMcAAY5NgA8AARtAAFsAAY7YWwABjoS7AAFTswACTZMAAk4me0r9HAD0cwABj1RbAAGPPgMAAY8rATHG6ml/AAEbYukMCAAKAwABj38BMcbqFwABj5cBMdRwAwABGvj2MwABj/cBMdCEfwABkDMAATDsEAARqwABkQmADwABMIMAA/MEcwABkhRbAAGRjFsAAZFYutsXAAJNkwACTgqVZwABOi7QZAQABFsAAZKAWwABkkS60WcAAk4eyWLnZALxdMcAAZMdgA8AARtABhcAAZMjATHUcFsAAZPgWwABk4y7AAFTswACTZMAAk4me0r9HAD0cwABlFxbAAGURgMAAZQzATHG6ml/AAEbYukMCAAKAwABlIcBMcbqEwABlJ8BMdCEAwABGvk7AAGVLwABlWgAAwABhBWADwABICwEfwABlYMAASBcEAAQWwABlhhbAAGV3LrRZwACTh7KcuhsxwABlsGADwABG0AKDwABlscBMcoWEwABl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nQAAuZcBasAAgoJgA8AA/2gCAAABA8AAgqrAAISdAAAAAQEBwACCuAAAAIPzYAPAAEeKAABgA8AARtABPgROwACC0cAAgtcAACdgA8AARtABFsAAgt6AwACC2cBMiLgnwABHlEnAAILpFsAAgxMcwACC84HAAILtwEyI07ZvAQABFsAAgv0uwABU7MAAk2TAAJOJAMAARyu1T78oPgFKwACDLQGAwACDNMBMiLg/ScAAg0QcwACDToHAAINIwEyI07n2AAAAAMAAR0s+A07AAINuwACDggAAwABhDmADwABJpQEmwACDbgGBwACDhMBMiNNgA8AASaVAIRbAAIO2FsAAg62CwACDmcBMiWKGHcAASae7Z8AAYj/AAIOYwACDuwBJwACDxCEewACDycAAat4BAAEWwACD84LAAIPfwEyJYoYdwABJpwA+AT0XwACEUoDAAIRNwEyIuLrcasAAhG5gA8AA/hsJwABHkT8/SsAAhI4BgMAAhJXATIi4BsAAk6GBl8AAhKLAAISvwACGLQAAwABg/wAAAAEDwACEucAAhi0AAAADAwPAAITaAAAAnShgA8AAavMAwACE+AAAAIXNYAPAAEbQAMAAhQsAAACFz2ADwABG0AAAYAPAAEbQAT4CScAAhRgiJcAAhSGBwACFHMBMik1gA8AASaUAJcAAhTeCwACFMcBMil1gA8AASaU+BE7AAIVXwACFWwAAwABhD2ADwABJpQEUwACFXcBMik0BAWADwABJpU7AAIVzwACFdwAAwABhEGADwABJpQEUwACFecBMil0CAWADwABJpU7AAIWUwACFmwAAwABg+WADwABiOAEcwACFp4DAAIWdwEyKPYNfAgACFsAAhbCDwACFrMBMiqmGHcAASacWwACFvoTAAIW6wEyK0IYdwABJpwDAAGr1ScAAhc8hHMAAhdqFwACF08BMivdIAQABKwDAAP91SsAAheMBHMAAhfEWwACF6i7AAGDpwACTZMAAk4WrFwIAAoXAAIX9wEyK9xbAAIYFLrbFwACTZMAAk4IAwABF/j8/SsAAhh4BKwbAAJOigZfAAIYywACGS8AAiDYAALmSAWrAAIYzYAPAAP9oAgAAAQPAAIZTwACINgAAAAEBAcAAhlkAAACD82ADwABIxAAAYAPAAEbQAT4ETsAAhnLAAIZ3AACFzWADwABG0AEWwACGfoDAAIZ5wEyL6YXNwABIuU7AAIaVwACGmwAAhc9gA8AARtABFsAAhqKAwACGncBMi+mFz8AASLpJwACHByIWwACHMBzAAIcQgcAAhwvATIwEtm8BAAEWwACHGi7AAFTswACTZMAAk4kAwABHK7VPvygAFsAAh3IcwACHUoLAAIdMwEyMLLZvAQABFsAAh1wuwABU7MAAk2TAAJOJAMAARyu1T78oPgJJwACHjCIlwACHlYHAAIeQwEyMBGADwABJpQAWwACHsxbAAIeqFMAAh6XATIwEAQFgA8AASaWGHcAASaeq4cAAYk9KwACHuwGCwACHwsBMjCw/ScAAh88iJcAAh9mCwACH08BMjCxgA8AASaUAFsAAh/gWwACH7xTAAIfpwEyMLAIBYAPAAEmlhh3AAEmnquHAAGJPSsAAiAABgcAAiAfATIwEPz9KwACIFwEmwACIFwEdwACIJLmSAQABgMAAiC3ATIvpAMAARiFgA8AARtAGwACTo4GXwACIO8AAiFTAAInwAAC5uwFqwACIPGADwAD/aAIAAAEDwACIYcAAifAAAAABAQHAAIhsAAAAg/NgA8AASNYAAGADwABG0AE+BE7AAIiFwACIigAAhc1gA8AARtABFsAAiJGAwACIjMBMjceFzcAASLlOwACIqMAAiK4AAIXPYAPAAEbQARbAAIi1gMAAiLDATI3Hhc/AAEi6ScAAiMAiFsAAiOgcwACIyYHAAIjEwEyN4rZ1AQABFsAAiNIuwABU7MAAk2TAAJOJAMAARzG1T78oABbAAIkpHMAAiQqCwACJBMBMjgq2dQEAARbAAIkTLsAAVOzAAJNkwACTiQDAAEcxtU+/KD4CScAAiUMiJcAAiUyBwACJR8BMjeJgA8AASaUAFsAAiWoWwACJYRTAAIlcwEyN4gEBYAPAAEmlhh3AAEmnwABHCMAAYlBKwACJcQGCwACJeMBMjgo/ScAAiYUiJcAAiY+CwACJicBMjgpgA8AASaUAFsAAia4WwACJpRTAAImfwEyOCgIBYAPAAEmlhh3AAEmnwABHCMAAYlBKwACJtQGBwACJvMBMjeI/P0rAAInMASbAAInMAR3AAInZubsBAAGAwACJ58BMjccAwABGUmADwABG0AbAAJOkgZfAAIn1wACKDsAAizUAALoPAWrAAIn2YAPAAP9oAgAAAQPAAIofwACLNQAAAAEBAcAAii4AAACD82ADwABItQAAYAPAAEbQAT4GTsAAikfAAIpMAACFzWADwABG0AEWwACKU4DAAIpOwEyPqYXNwABIuU7AAIpqwACKcAAAhc9gA8AARtABFsAAineAwACKcsBMj6mFz8AASLpOwACKosAAiqwAAJ0oYAPAAGrzARzAAIqzgMAAiq7ATI+pnSgAAAAAwABIvE7AAIrOwACK1QAAwABg+WADwABJpQEmwACKzgEcwACK1y7AAGD/AwADg8AAiuLATJAUgcAAiu3ATI/EgsAAivPATI/sAMAAk6FgA8AASaVJwACK/yEcwACLCoTAAIsDwEyQQEgBAAErAMAA/3VKwACLEwGEwACLGsBMkEA/SsAAiyYBgMAAiy3ATI+pBsAAk6WBl8AAizrAAItTwACLoQAAuhgBasAAiztgA8AA/2gCAAABA8AAi2LAAIuhAAAAAQEBwACLbwAAAIPzYAPAAEnrAABgA8AARtABPgFKwACLewEmwACLewEdwACLiLoYAQABgMAAi5jATJEBAMAARh9gA8AARtAGwACTpoGXwACLpsAAi7PAAJPHAADAAGERAAAAAQPAAIvGwACTxwAAAAEBAcAAi9MAAACD82ADwABJ6wAAYAPAAEbQAT4NTsAAi+zAAIvxAACFzWADwABG0AEWwACL+IDAAIvzwEyRcYXNwABIuU7AAIwPwACMFQAAhc9gA8AARtABFsAAjByAwACMF8BMkXGFz8AASLpOwACMNcAAjD4AAL35YAO/OgEWwACMRYHAAIxAwEyRjLqLwABHEE7AAIxowACMcgAAvftgA786ARbAAIx6gsAAjHTATJG0uovAAEcQT8AAjJDAAIydAAABwABhEmEDAGADwABG0AADwACMpcAAjNUAAAAAAAAAYAPAAEbQAUrAAIyrARzAAIyyFsAAjKsuwABg6cAAk2TAAJOFuf4CAAIpFsAAjMgutsXAAJNkwACTggDAAEYFT8AAjNvAAIzoAAABwABhE2EDAGADwABG0AADwACM8cAAjSIAAAAAAAAAYAPAAEbQAUrAAIz3ARzAAIz+FsAAjPcuwABg6cAAk2TAAJOFuf4CAAIqFsAAjRUutsXAAJNkwACTggDAAEYFScAAja0hIhbAAI3dHMAAjbiBwACNs8BMkYy2dgEAARbAAI3HLsAA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AJOJAMAARzG1T78oPgFJwACjxRzAAKPRg8AAo8nATJ3RSAEAARbAAKPjFsAAo9QutFnAAJOHmzO5iwDAAP91PgFKwACj9wEcwACkBRbAAKP+LsAAYOnAAJNkwACThbn+AgACKRbAAKQbLrbFwACTZMAAk4IAwABGBT4AScAApLQiFsAApQUcwACk0ITAAKS4wEyd97ZkAQABFsAApOIuwABU7MAAk2TAAJOJAMAARyGzvb8pABzAAKUqg8AApSLATJ3RSAEAARbAAKU8FsAApS0utFnAAJOHmzG5jADAAP91PgFKwAClhgGAwACljcBMnDdJwACmhiEewACmpcAAeVIBAAGBwACmtsBMnFIAPgNOwACm08AApuIAALb2YAO/OgEWwACm74TAAKbkwEyd97qLwABHEE7AAKcTwACnIAAAtmBgA78gARzAAKdBFsAApywuwABU7MAAk2TAAJOJtmACAAKFwACnTsBMokGDwACnXsBMndEAv25JwACnbhbAAKd/hsAAp3LATKJntU+/KD4BSsAAp5sBHMAAp6kWwACnoi7AAGDpwACTZMAAk4W5/gIAAikWwACnvy62xcAAk2TAAJOCAMAARgVJwACn2xbAAKfshsAAp9/ATKJntjW/Kj4BSsAAqAkBHMAAqBcWwACoEC7AAGDpwACTZMAAk4W5/gIAAioWwACoLi62xcAAk2TAAJOCAMAARgU/P0rAAKhPAYDAAKhWwEycNwbAAJOrgZfAAKhjwACofMAAq1YAALnNAWrAAKhkYAPAAP9oAgAAAQPAAKiPwACrVgAAAAEBAcAAqKAAAACD82ADwABK5AAAYAPAAEbQAT4EScAAqKwcwACotYDAAKiwwEyjkru/AQABFsAAqMEutsXAAJNkwACTggDAAEr7SsAAqNABFsAAqNyAwACo18BMo5K6S8AASu8/TsAAqSnAAKk1AACuwGADwABjywEWwACpPIDAAKk3wEyjkrumwABK6EnAAKlQIiXAAKlggcAAqVTATKP1YAPAAGQZABzAAKmKFsAAqYMWwACpfIDAAKl3wEyjkoJVwABG1mHAAP7vSAEAAZUAwAD/Pz4CTsAAqaXAAKmpAADAAGEZYAPAAEbQARbAAKmwgMAAqavATKOSu7vAAEruScAAqcoiIiXAAKnSgsAAqc7ATKRnYAPAAEwsABzAAKn/FsAAqfoUwACp9sBMpGcCAWADwABMLIJrwABMLkgBAAFqwACqGWADwABMIMAA/KoAwAD/dQAWwACqOhbAAKozFMAAqi/ATKRnAgFgA8AATCyCVcAARtaBVcAA/qE+Ak7AAKpWwACqWwAAgpRgA8AAY8sBFsAAqmEUwACqXcBMpGcCAWADwABMLLwPwABML0nAAKpzIhbAAKp8g8AAqnfATKUQtHXAAGPTABbAAKqUg8AAqo/ATKUQs4PAAGPOPgFKwACqrAE1wACqxQAAAQBgA8AARtABHMAAqsUWwACquIDAAKqzwEyjkrpLwABK77q2AwADFsAAqtEutsXAAJNkwACTgoPAAKrfwEylEBbAAKrqgMAAquXATKOSgmvAAErpAMAAR1o1AAAAAQBbARfAAKr+hMAAqvzATKV3pcIWwACrF4DAAKsSwEyjkqXCwABG08AARtOEAMBMpXc/Pz9KwACrRwGAwACrTsBMo5IGwACTrIGXwACrW8AAq3TAAKv1AAC5zgFqwACrXGADwAD/aAIAAAEDwACrh8AAq/UAAAABAQHAAKuYAAAAg/NgA8AASwAAAGADwABG0AE+AknAAKukHMAAq62AwACrqMBMplS7vwEAARbAAKu5LrbFwACTZMAAk4IAwABLEkrAAKvIARbAAKvUgMAAq8/ATKZUukvAAEeDP0rAAKvmAYDAAKvtwEymVAbAAJOtgZfAAKv6wACsE8AArJQAALnPAWrAAKv7YAPAAP9oAgAAAQPAAKwmwACslAAAAAEBAcAArDcAAACD82ADwABLGQAAYAPAAEbQAT4CScAArEMcwACsTIDAAKxHwEym+7u/AQABFsAArFgutsXAAJNkwACTggDAAEshSsAArGcBFsAArHOAwACsbsBMpvu6S8AAR4M/SsAArIUBgMAArIzATKb7BsAAk66Bl8AArJnAAKyywACtHAAAudABasAArJpgA8AA/2gCAAABA8AArMDAAK0cAAAAAQEBwACszAAAAIPzYAPAAEslAABgA8AARtABPgFKwACs2AEjHMAArOSAwACs38BMp6K7vwEAARbAAKzwLrbFwACTZMAAk4IAwABLNBbAAK0FgMAArQDATKeiukvAAEeDgMAArRTATKeiAWADwABG0AbAAJOvgZfAAK0hwACtLcAAro0AAMAAYRoAAAABA8AArU7AAK6NAAAAAgICwACtagAAAIPzYAPAAEfyAMAArX0AAACFl2ADwABG0AAAYAO+NwE+A07AAK2bwACtqAAAhZpgA786ARbAAK2zgcAArarATKhLuovAAEcQTsAArdXAAK3cAACCamADviUBIyXAAK3rFsAAreOAwACt3sBMqDuWe8AAR9RgA743FsAArgmAwACuBMBMqDuWe8AAR9QcwACuKBbAAK4bLrbFwACTZMAAk4K2oQIAAhbAAK5AgMAArjvATKg7pVLAAEfQgsAArkrATKhkAMAATqsBYAO+JUrAAK5dASMlwACua4PAAK5kwEyoimADvjcUwACufMBMqIoDAWADvjcrAWADvjcGwACTsIGXwACuksAArqvAALE0AAC5nQFqwACuk2ADwAD/aAIAAAEDwACuuMAAsTQAAAABAQHAAK7DAAAAg/NgA8AASDoAAGADwABG0AE+BEnAAK7PFsAArtiAwACu08BMqXK7FMAASEhKwACu5QGAwACu7MBMqXI/TsAArvrAAK8DAACFl2ADwABG0AEWwACvCoDAAK8FwEypcoWXwABIN0nAAK92JcAAr4OBwACvesBMqbZgA8AASaU+Ak7AAK+nwACvsAAAhh1gA8AAYjgBFsAAr7sUwACvssBMqbYBAWADwABJpYYdwABJp0nAAK/LFsAAr9iCwACvz8BMqfnAAEcEwABiRj4ETsAAsBDAALAkAADAAGEbYAPAAGOJASbAALAQAYLAALAmwEyp+WADwABjiU7AALBYwACwXwAAhItdA8AA/vECYAO+N2ADwABiOAEWwACwdYPAALBhwEyqRoSLwABji07AALCTwACwmQAAgJZgA8AAYjgBHMAAsKGEwACwm8BMqnFLAQABFsAAsKeAwACwosBMqXKWe8AASDUAwAD/BUnAALC5IRzAALDDhcAAsL3ATKqkSAEAASsAwAD/dT4BSsAAsNgBHMAAsOYWwACw3y7AAGDpwACTZMAAk4WrFwIAAoXAALDywEyqpBbAALD5LrbFwACTZMAAk4IAwABF/j8/P0rAALElAYDAALEswEypcgbAAJOxgZfAALE5wACxUsAAuTwAALmgAWrAALE6YAPAAP9oAgAAAQPAALFgwAC5PAAAAAEBAcAAsWwAAACD82ADwABIVwAAYAPAAEbQAT4ETsAAsYXAALGOAACFl2ADwABG0AEWwACxlYDAALGQwEyrioWXwABIW0nAALGjHMAAscIWwACxrhbAALGnLsAAYOnAAJNkwACThbnxwABF94McAQABgcAAscvATKulAMAA/78+AUnAALLVFsAAswwcwACy7BzAALLoFsAAsuKBwACy2cBMq6WCVcAARtZLAQABkwDAAP7Otm8BAAEWwACy9i7AAFTswACTZMAAk4kAwABHK7VPvyg+AUrAALMoARzAALM+FsAAsziBwACzL8BMq6WCVcAARtZLAQABkwDAAP7OP0nAALNWHMAAs2OBwACzWsBMq6W6sAAAAADAAEdRPgNOwACzh8AAs5gAAMAAYRxgA8AASaUBJsAAs4cBgcAAs5rATKulYAPAAEmlTsAAs7zAALPFAACGHWADwABjGQEmwACzvAEWwACz2ILAALPHwEyspoYdwABJp2ADwABjGUrAALPoARzAALP2FsAAs+8uwABg6cAAk2TAAJOFufkCAAIWwAC0DoPAALQFwEys0WHAAGMfFsAAtBYutsXAAJNkwACTggDAAEYAScAAtDAcwAC0PYHAALQ0wEyrpbqvAAAAAMAAR1A+A07AALRjwAC0dAAAwABhHGADwABJpQEmwAC0YwGBwAC0dsBMq6VgA8AASaVOwAC0msAAtKMAAIYdYAPAAGLuASbAALSaARbAALS2gsAAtKXATK1uhh3AAEmnYAPAAGLuSsAAtMYBHMAAtNQWwAC0zS7AAGDpwACTZMAAk4W5+QIAAhbAALTsg8AAtOPATK2ZYcAAYvQWwAC09C62xcAAk2TAAJOCAMAARgA+Ak7AALUkwAC1KQAAgpRgA786ARbAALU0gcAAtSvATKuluovAAEcQScAAtUsiHMAAtWQWwAC1Ty7AAFTswACTZMAAk4m2gQEAAYLAALVwwEyuGQC/lQAhHMAAtbEcwAC1mBbAALWDLsAAVOzAAJNkwACTibaHAQABgsAAtavATK4ZAL+YSAEAASsAwAD/Pz4CTsAAtdHAALXaAACGHWADwABG0AEcwAC14xbAALXcLsAAYOnAAJNkwACThbn5AgACHMAAthQWwAC1/y7AAFTswACTZMAAk4m2hwEAAYLAALYnwEyuGQC/mBbAALYuLrbFwACTZMAAk4IAwABGAEnAALZFFsAAtmscwAC2XhbAALZJLsAAVOzAAJNkwACTiahcAQABgsAAtmXA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AABgA8AARtABPgFJwADLBBbAAMs3HMAAyyMWwADLFRbAAMsILrbFwACTZMAAk4K1U8AAToe1VAEAASbAAMswAYLAAMswwEy8fmADwAB3UwDAAG/dwABJz8AAb+c+Aj01AAAAAQBgA8AArH4BFsAAy0suwABg6MAAk2TAAJOEIxzAAMtRhQDATL2wSAEAASsAACscwADLUYUAwEy9sMAAYSIBAAGAwADLYsBMu6QAwACsiAFcSsAAy3EBg8AAy3jATLz2PgNOwADLoMAAy6cAAIF2YAPAAEhLATXAAMu5AAABAGADwABISwEfwADLucAASFYEAAQWwADLwy7AAFTswACTZMAAk4mCwADL2cBMvH6BwADL4MBMvEKDwADL6sBMvPYANQAAAAEAWwEXwADMAYXAAMv/wEy+KqXCFsAAzBqAwADMFcBMu6SlwsAARtPAAEbThQDATL4qPTUAAAABAGADwACsfgEWwADMNS7AAGDowACTZMAAk4QjHMAAzDuGAMBMvqtIAQABKwAAKxzAAMw7hgDATL6rwABhIgIAAoDAAMxMwEy7pIXAAMxSwEy+FgDAAKyIAVxKwADMYwGFwADMasBMvhZJwADMhSEWwADM2BzAAMywFsAAzJcWwADMii62xcAAk2TAAJOCpW7AAE6UtIABAAGCwADMyMBMvH4AwABwNYMhgWo+AUrAAMzrARzAAMz9hMAAzPLATL0tIAAAAAAAP07AAM0VwADNHwAAwABZmmADwABjywEcwADNQRbAAM0uFsAAzSEutsXAAJNkwACTgqVZwABOi7QfAQABgsAAzU7ATLx+ALxlScAAzVsWwADNaBbAAM1fLrMEwACTZMAAk4CCuIFWPgROwADNncAAzakAAK7AYAO/PQEcwADNyhbAAM21LsAAVOzAAJNkwACTibZRAgABhcAAzd/ATL93AYaAKb9hScAAzgEiFsAAzhGGwADOBcBMv962QL9AABbAAM6SHMAAzkwWwADOKC7AAFTswACTZMAAk4m2oAIAAhbAAM5Xg8AAzlHATLz2uovAAEcQFsAAznSGwADOaMBMv962P78/AL+wtU+/KD4BSsAAzq4BHMAAzsCEwADOtcBMvS0gAAAAAAA/PRfAAM/igMAAz93ATLukuwEpwABIA0rAAM/7AYDAANACwEy7pD9JwADQEyIiIiEWwADQIoXAANAYwEy/d7ODwABjzgEWwADQQoXAANA4wEy/d6QJwABj1gEWwADQcBbAANBmhcAA0FzATL93tSDAAGPNurfAAGPVARbAANCeFsAA0JSFwADQisBMv3e1IMAAY826ucAAY9g+Aj0XwADRooDAANGdwEy7pLsBKcAASANKwADRuwGAwADRwsBMu6Q/TsAA0d/AANHlAACD22ADwABG0AEcwADR9YPAANHvwEy89rq2AwADFsAA0gEutsXAAJNkwACTgoXAANIPwEy/d2rAANIqYAPAAP4bCQDAAEdaScAA0jshHMAA0kWGwADSP8BMwV9IAQABg8AA0kjATLz2AMAA/3U+Aj0cwADSYhbAANJcgMAA0lfATLukml/AAEbYukMCAAKAwADSbMBMu6SGwADScsBMwV8AwABGvj2LwADSgMBMvPaGwADSiMBMwV8/SsAA0poBHMAA0qyEwADSocBMvS0gAAAAAAAGwACTtYGXwADSt8AA0tDAANZJAAC5qAFqwADSuGADwAD/aAIAAAEDwADS4sAA1kkAAAABAQHAANLyAAAAg/NgA8AAR+MAAGADwABG0AE+A07AANMLwADTEwAAtWhgA8AARtABHMAA0xqAwADTFcBMwnG6mAEAARbAANMqLrbFwACTZMAAk4IAwABH3EnAANOnJcAA07OBwADTq8BMwoxgA8AASaU+Ak7AANPXwADT4AAAhh1gA8AAYjgBFsAA0+oUwADT4sBMwowBAWADwABJpYYdwABJp0nAANP6JcAA1AeCwADT/sBMwuNgA8AAYl0+A07AANQ6wADUQQAAgklgA746ARbAANRMFMAA1EPATMLjAgFgA8AAYl2We8AAYl9OwADUcMAA1IMAALW5YAO+YQEWwADUjIPAANSFwEzDLrW5vj1JwADUqBzAANTNFsAA1L+EwADUrMBMw1y1x75ySAEAARbAANTeFsAA1NWAwADU0MBMwnGlUsAAR9C1x8AATL0AwABqmz4CQCEWwADVT4DAANVKwEzCcbrrwABHxcAA1UnAANVgAErAANVtATXAANV4AAABAGADwABICwEfwADVeMAASBcEAASDwADVhsBMwy4cwADVohzAANWaFsAA1ZOAwADVjsBMwnGCVcAARtaWhAEAAZQAwAD+l4CtAAAAAMAA/pMWwADVv4DAANW6wEzCcbqLwABHEBbAANXVgMAA1dDATMJxhTjAAEflADUAAAABAFsBF8AA1fKFwADV8MBMw+ulwhbAANYLgMAA1gbATMJxpcLAAEbTwABG04UAwEzD6z8/P0rAANY6AYDAANZBwEzCcQbAAJO2gZfAANZOwADWZ8AA36gAALmsAWrAANZPYAPAAP9oAgAAAQPAANZ4wADfqAAAAAEBAcAA1ocAAACD82ADwABICwAAYAPAAEbQAT4EPRzAANaTLsAAYPgBAAGAwADWsMBMxOkAwACTlk7AANbIwADW0AAAlntgA74lARbAANbXgMAA1tLATMTplnvAAEgNScAA1uUcwADW8YHAANbpwEzFIEgBAAEWwADXAxbAANb0LrRZwACTh7IquakAwAD/dT4BScAA1x4cwADXNRbAANcuFsAA1yeAwADXIsBMxOmCVcAARtZhwAD+70gBAAGVAMAA/z8+AUrAANdFATXAANdQAAABAGADwABJ8AEfwADXUMAASfoEAAQcwADXchbAANdsgMAA12fATMTpglXAAEbWSwEAAZMAwAD+zhzAANeCFsAA13yAwADXd8BMxOmCVcAARtZLAQABlADAAP7OKxbAANeiFsAA140uwABU7MAAk2TAAJOJhb2/SgA1AAAAAQBbARfAANe4gsAA17bATMWzpcIWwADX0YDAANfMwEzE6aXCwABG08AARtOCAMBMxbM/ScAA1/ccwADYA4HAANf7wEzFIEgBAAEWwADYFRbAANgGLrRZwACTh7KcuhsAwAD/dT4BScAA2DEcwADYSBbAANhBFsAA2DqAwADYNcBMxOmCVcAARtZhwAD+70gBAAGVAMAA/z8+AUrAANhYARzAANhfLsAAYSMBAAGAwADYc8BMxOkAwACTtz9JwADYjRzAANiZgcAA2JHATMUgSAEAARbAANirFsAA2JwutFnAAJOHspW6FADAAP91PgFJwADY1RzAANjsFsAA2OUWwADY3oDAANjZwEzE6YJVwABG1mHAAP7vSAEAAZUAwAD/Pz4CTsAA2QnAANkXAADAAGEkYAPAAEbQARzAANkkFsAA2R6AwADZGcBMxOmCVcAARtZLAQABkwDAAP7OScAA2TElwADZQ4LAANk1wEzHWWADwABJpT4CTsAA2WfAANlwAACGHWADwABJpQEUwADZcsBMx1kCAWADwABJpUnAANmLFsAA2aEW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wAEU1gAAACdgA8AA/hsAAGADwABG0AFKwAEU4AEcwAEU7xbAARTpFMABFODATOpbBwFgA8AATCyCVcAARtZLAQABFMABFPDATOsECAAAwAD+zgAAPz4CPRzAARYEhsABFe7ATOmcIAAAAAAASsABFhABHMABFiiFwAEWF8BM5ZQgAgACFsABFj0UwAEWNsBM46sDAWADwABHrJZ7wABHrjTAARagA8ABFqDAARbPAAAAAQEBwAEWpQAAAGJgA8AA/hsAAGADwABJpQFKwAEWqwEcwAEWshbAARarLsAAYOnAAJNkwACThbn/AQABFsABFsIutsXAAJNkwACTggDAAEYGAAA/ScABGCUWwAEYLoDAARgpwEzjLbrzwABMEj4CScABGLQhHMABGLkuwABhKQEAAYLAARjgwEzjcADAAJO7PgFKwAEY+QEfwAEZBMAATB8DAAOBwAEZNcBM40iDwAEZP8BM46sWwAEZTIDAARlHwEzjLbqLwABHEAA/ScABGpgWwAEa7RzAARq8FsABGpwuwABU7MAAk2TAAJOJtm4BAAEWwAEa0YPAARrKwEzjq7qLwABHEAC/f7Y1vyo+AUrAARsKAR/AARsVwABMHwMAA4HAARtGwEzjSIPAARtQwEzjqxbAARtdgMABG1jATOMtuovAAEcQAD8/SsABG4IBgMABG4nATOMtBsAAk76Bl8ABG5bAARuvwAEcUgAAudsBasABG5dgA8AA/2gCAAABA8ABG7zAARxSAAAAAQEBwAEbxwAAAIPzYAPAAEyRAABgA8AARtABPgJJwAEb0x7AARviwACHmAIAAhbAARvygMABG+3ATO1Eu6bAAEyUFsABHAeAwAEcAsBM7US8JsAATJMAPgFKwAEcHgEWwAEcMRbAARwqgMABHCXATO1EglXAAEbWgMPAAP6lP0rAARxDAYDAARxKwEztRAbAAJO/gZfAARxXwAEccMABH24AALnWAWrAARxYYAPAAP9oAgAAAQPAARx8wAEfbgAAAAEBAcABHIYAAACD82ADwABMSwAAYAPAAEbQAT4EScABHJIcwAEcm4DAARyWwEzuBbu/AQABFsABHKcutsXAAJNkwACTggDAAExZSsABHLYBFsABHMKAwAEcvcBM7gW6S8AATFI/TsABHRvAAR0lAAC8FmADwABG0AEWwAEdLIDAAR0nwEzuBbwWwABMUUnAAR07JcABHUmBwAEdP8BM7mhgA8AATH0+A07AAR1owAEdcQAAvA9gA8AAY8sBFsABHX0UwAEdc8BM7mgBAWADwABMfbumwABMf07AAR2gwAEdsQAAwABhNWADviUBHsABHcXAAK/wAwADgsABHdzATO6rFsABHeuAwAEd5sBM7gWF9cAATE8WwAEeBRbAAR34LrbFwACTZMAAk4K0WcAATo0AScABHhwhHMABHjGDwAEeIMBM7ttIAQABKwDAAP91PgJOwAEeX8ABHmsAAK7AYAO/PQEcwAEejhbAAR55LsAAVOzAAJNkwACTibZRAgABgsABHqPATO6rAYaAKb9hSsABHsYBH8ABHs3AAExuBgAGFsABHuGAwAEe3MBM7gW6S8AATFKCwAEe78BM7quEwAEe+cBM71QWwAEfF4DAAR8SwEzuBYX1wABMT4PAAR8kwEzu2xbAAR87gMABHzbATO4FuovAAEcQAD8/SsABH18BgMABH2bATO4FBsAAk8CBl8ABH3PAAR+MwAEgCwAAudcBasABH3RgA8AA/2gCAAABA8ABH57AASALAAAAAQEBwAEfrgAAAIPzYAPAAExdAABgA8AARtABPgJJwAEfuhzAAR/DgMABH77ATPBBu78BAAEWwAEfzy62xcAAk2TAAJOCAMAATGhKwAEf3gEWwAEf6oDAAR/lwEzwQbpLwABMZD9KwAEf/AGAwAEgA8BM8EEGwACTwYGXwAEgEMABICnAASJ/AAC51QFqwAEgEWADwAD/aAIAAAEDwAEgNMABIn8AAAABAQHAASA9AAAAg/NgA8AATDwAAGADwABG0AE+CE7AASBkwAEgeQAAvBRgA789ARbAASCAgMABIHvATPDovBTAAEw+TsABIKfAASC0AAC6S2ADwABG0AEWwAEgu4DAASC2wEzw6LpLwABMQk7AASDbwAEg5QAAu7hgA786ARbAASD0gsABIOfATPEpuovAAEcQTsABIRfAASEcAAC2oGADvyABHMABITMWwAEhHi7AAFTswACTZMAAk4m2oAIAAoPAASFBwEzxURbAASFhgcABIUzATPEDtj+/PwC/sEnAASF2FsABIX+EwAEhesBM8Xe2Nb8qPgFKwAEhmgEcwAEhqBbAASGhLsAAYOnAAJNkwACThbn+AgACKhbAASG/LrbFwACTZMAAk4IAwABGBT9JwAEh2CEWwAEh8oHAASHdwEzxA7ZAv0BKwAEh/QGAwAEiBMBM8Og/ScABIg8WwAEiGITAASITwEzxd7VPvyg+AUrAASIyARzAASJAFsABIjkuwABg6cAAk2TAAJOFuf4CAAIpFsABIlYutsXAAJNkwACTggDAAEYFP0rAASJwAYDAASJ3wEzw6AbAAJPCgZfAASKEwAEincABKDYAALnaAWrAASKFYAPAAP9oAgAAAQPAASK1wAEoNgAAAAEBAcABIssAAACD82ADwABMiAAAYAPAAEbQAT4ETsABIuTAASLtAACVzGADwABG0AEWwAEi+xbAASL0gMABIu/ATPLTglXAAEbWgMPAAP6lScABJeYlwAEl84HAASXqwEzy7mADwABHrD4CScABJgcWwAEmFBTAASYLwEzy7gEBYAPAAEesuuPAAEevPgI9NQAAAAEAXQPAAP6/AWADwABj8wEWwAEmNBTAASYrwEzy7gEBYAPAAEesuuTAAEewIxzAASZHggDATPNgSAEAASsAACscwAEmR4IAwEzzYIP9AQABFsABJlkWwAEmTy7AAEpCwACTZMAAk4OwU7emAMAA/o0BXErAASZ5ARbAASaQFsABJokUwAEmgMBM8u4BAWADwABHrIJVwABG1oHqwAD+pD9KwAEmpAGAwAEmq8BM8tM/ScABJrwlwAEmyYHAASbAwEzy7mADwABJpT4DTsABJu3AASb7AADAAE6BYAPAAGI4ARbAAScGFMABJv3ATPLuAQFgA8AASaWGHcAASadJwAEnFiXAAScogsABJxrATPQvYAPAAGOJPgI9HMABJ1kWwAEnTy7AAEpCwACTZMAAk4OwUwEAARbAASd9FMABJ2/ATPQvAgFgA8AAY4mClMAAYwEAt6ZKwAEnjAEfwAEnk8AATIcCAAIWwAEnqxTAASedwEz0LwIBYAPAAGOJgpTAAGMBFsABJ7oUwAEnscBM8u4BAWADwABJpbqLwABHEAA/SsABJ9oBgMABJ+HATPLTP0rAASgnAYDAASguwEzy0wAATEr+AExLPwBMS4YATEvPAExMPABMT0oATFiwAExZhABMWkUATFsUAExbYQBMXFMATF2GAExfYwBMYUoATGInAExjZgBMaE0ATHGOAEx3TgBMgogATIiCAEyKEQBMi7MATI2RAEyPcwBMkMsATJFFAEyXMwBMmAAATJkVAEycAQBMo1wATKYeAEymxQBMp2wATKgPAEypPABMq1QATLA0AEyyvgBMua4ATLtuAEzCOwBMxLMATMyoAEzPpABM1RwATNwFAEzcdgBM3ZIATOL3AEztDgBM7c8ATPALAEzwsgBM8p0ATPUiAAAAOQLAAJPFgZfAASg7wAEoQcABNdwDwABhNgAAAWABwABGDwABYAHAAJNnBQTAAJPHgZfAASigwAEorQnAAGDeAF0DwAD/swFgA8AARtAABMAAk8iBl8ABKLzAASjLCYLNAGADwAD8VQAEwACTyYGXwAEo4sABKO0JpUAAYAPAAE6FAATAAJPKgZfAASkKwAEpIwmAvQFqwAEo8mADwAD/aAJgA8ABAAIBJ8AAYTYEwACTy4GXwAEpLsABKTMYpIAAYAPAAEXrASsBBcAAk9eBl8ABKTjAASk4wAEphAAAAAPAASlIwAEphAAAAAMDA8ABKU4AAASCzWADwAD8VQDAASlkAAAEpUBgA8AAToUAwAEpdgAABMAAYN5dA8AA/7MBYAPAAEbQAABgA8AAk8UBPwQIAcAAk8iAAMBM9vwIAcAAk8mBAMBM9wwIAcAAk8eCAMBM9xwJAcABKTjAAEZ7AAAAAAcGwACTzoGXwAEpicABKaHAASneAQDAAFTswACTZAAAAAEDwAEptsABKd4AAAAAAAAAYAO/RQFKwAEpvwEWwAEpyxbAASm/LqVAwACTybHGwABOjgbAAJPQgZfAASnjwAEp9MABKyMAALoLAWrAASnkYAPAAP9oAgAAAQPAASn+wAErIwAAAAEBAcABKgYAAACkgGADwABF6wAAXAE+Az0XwAEqGC6kgIDAASogwEz3+8AAk8tJwAEq5BbAASroLoLNwACTyErAASr5AD89HMABKwYuud4BAAGAwAErGcBM9/sAwABF1gbAAJPRgZfAASsowAErOcABLCgAALngAWrAASspYAPAAP9oAgAAAQPAAStIwAEsKAAAAAEBAcABK1UAAACaX2ADwABGmQAAXAE+Ak7AAStvwAErewAAuehgA8AARtABFsABK4OAwAErfcBM+I6DHsAARotDwAErjiEcwAEroYHAASuVwEz4pEgBAAErAMAA/3U+A07AASu/wAErxAAAg7VgA8AARtABFsABK9KBwAErxsBM+KSDtcAARto9icABK97ATPikJsABK94BHMABK/iBwAEr7MBM+KSEUgEAAS4AwABHQmADwABG0D2JwAEsDMBM+KSCwAEsGsBM+OwGwACT0oGXwAEsLcABLDrAATHWAADAAGE3AAAAAQPAASxLwAEx1gAAAAMDA8ABLGAAAADAAGE4YAPAAEbQAMABLHgAAACgS2ADwABG0ADAASyMAAAAwABhOWADwABG0AAAYAPAAEeKAT4ITsABLKzAASyzAABhYAPAAEhXAR/AASy5wABIZgMAAoHAASzNwEz5kxbAASz0FsABLOAWwAEs1C6lQMAAk8mxxsAATo62Sb9YAazgIR7AAS0cwACTZgIAAhbAAS0wgcABLSrATPmTuovAAEcQFsABLUEupUDAAJPJAD0cwAEtZBbAAS1egMABLVTATPmBml/AAEbYukMCAAKAwAEtbsBM+YGDwAEtecBM+cAAwABGvk7AAS2VwAEtmgAAgpRgA786ASMWwAEt2hzAAS2ygsABLaTATPmjtnIBAAEWwAEtxC7AAFTswACTZMAAk84AwABHLrVPvygWwAEuB4LAAS35wEz5o7qLwABHEBbAAS5FFsABLjEWwAEuJS6lQMAAk8mxxsAATo62Sb9YAWADvzpOwAEuZ8ABLm0AAKQQYAPAAEeKATXAAS5zAAABAGADwABHigEfwAEuc8AAR54EAASCwAEugMBM+aODwAEuj8BM+cCBwAEul8BM+ZOEwAEunsBM+m8ANQAAAAEAWwEXwAEurIXAAS6qwEz7AqXCFsABLsqAwAEuwMBM+YGlwsAARtPAAEbThQDATPsCPRzAAS7xFsABLuuAwAEu4cBM+YGaX8AARti6QwIAAoDAAS77wEz5gYXAAS8GwEz67gDAAEa+ScABMRAWwAExQhzAATEigsABMRTATPmjtm8BAAEWwAExLC7AAFTswACTZMAAk84AwABHK7Y2vys+AT0cwAExbILAATFewEz5o7qoAgACgMABMYfATPmBhcABMZLATPruAMAAR0k/PRzAATGyFsABMaQuwABg3sAAk8dWAQABgMABMbbATPmBAMAA/8BKwAExxgGFwAExzcBM+u4GwACT04GXwAEx28ABMezAATKWAAC5pQFqwAEx3GADwAD/aAIAAAEDwAEx9sABMpYAAAABAQHAATH+AAAAg/NgA8AASpAAAFwBPgNJwAEyChzAATIcFsABMg4uwABg3sAAk8eDHAEAAYDAATIlwEz8fwDAAP+/SsABMiwAP07AATJFwAEySwAAJ2ADwABG0AEWwAEyUoDAATJNwEz8fyfAAEqePYnAATJdwEz8xxzAATJlLsAAYTcDAAOAwAEyd8BM/H8WwAEygoDAATJ9wEz8f4WXwABKnYHAATKMwEz8xwDAAJPSBsAAk9SBl8ABMpvAATKswAEzYgAAuaYBasABMpxgA8AA/2gCAAABA8ABMrzAATNiAAAAAQEBwAEyygAAAIPzYAPAAEqiAABcAT4DScABMtYcwAEy6BbAATLaLsAAYN7AAJPHgxwBAAGAwAEy8cBM/WQAwAD/v0rAATL4AD9OwAEzEcABMxcAACdgA8AARtABFsABMx6AwAEzGcBM/WQnwABKrT2JwAEzKcBM/awcwAEzMS7AAGE3AwADgMABM0PATP1kFsABM06AwAEzScBM/WSFl8AASqyBwAEzWMBM/awAwACT0gbAAJPVgZfAATNnwAEzeMABNdoAALmqAWrAATNoYAPAAP9oAgAAAQPAATOQwAE12gAAAAEBAcABM6YAAACD82ADwABH6gAAXAE+CE7AATO/wAEzxwAAlntgA74lARbAATPOgMABM8nATP5JlnvAAEfUScABM9sWwAEz5IDAATPfwEz+SbrrwABHxUrAATP3AD9JwAE0AyEcwAE0D4HAATQHwEz+X0gBAAEWwAE0LRbAATQeFsABNBIupUDAAJPJtFnAAE6NsvG6kQDAAP91SsABNEAAP0nAATRMHMABNF4WwAE0UC7AAGDewACTx4McAQABgMABNGfATP5JAMAA/79KwAE0bgA/TsABNPbAATT8AACkEGADwABHigEcwAE0/i7AAGE3AwADgMABNRnATP5JFsABNSSAwAE1H8BM/kmFl8AAR9ccwAE1NBbAATUuLqSAwACTy7n5AgACkxbAATVGLqVAwACTyQDAAEYAAMAAk9JOwAE1ZsABNW8AAMAAYTpgA8AARtABHMABNXcWwAE1cS6kgMAAk8u5+QIAAhzAATWGlIHGAAAAAMAA/j4WwAE1ii6lQMAAk8kAwABGAD0cwAE1qRbAATWigsABNZzATP8bglXAAEbWVgEAAYPAATWtwEz/hgDAAP7QPRzAATXMFsABNcWDwAE1vMBM/4a6JsAARtdWAQABgsABNdDATP8bAMAA/tAAAEz3cgBM98UATPhYAEz5VQBM/EkATP0uAEz+EwBNACoAAAAHAsAAk9iBl8ABNd/AATXlwAFlhAPAAGE7AAABYAHAAEXUAAFgAcAAk2cIBMAAk9qBl8ABNkvAATZpCYC9AWrAATYzYAPAAP9oAmADwAEAAgEnwABhOwTAAJPbgZfAATaBwAE2jAmlQABgA8AAToUABMAAk9yBl8ABNqfAATawCcAARsgAYAPAAJNuAATAAJPegZfAATa7wAE2wRjAAGDpwACTZABgA8AAResBKwTAAJPfgZfAATbawAE24hidRwBgA8AAk/kBKwTAAJPggZfAATb+wAE3QBjAAGE8AF0DwAD+8QJgA8AARtBgA8AA/FUBH8ABNySUvQACYAPAAEbQYAPAAPxVAAAEwACT4YGXwAE3ScABN2YYwABg5ABgA8AA/FUBKgTAAJPigZfAATgOwAE4IRjAAGE9AGADwABG0AErAQXAAJP4gZfAATdrwAE3a8ABN6IAAAADwAE3gMABN6IAAAACAgLAATeGAAAEpUBgA8AAToUAwAE3mAAABMAARshgA8AAk24AAGADwACT2AE/AwgBwACT24AAwE0BtggBwACT3IEAwE0BxgkBwAE3a8AARdoAAAAAEQbAAJPlgZfAATenwAE3v8ABN/wBAMAAVOzAAJNkAAAAAQPAATfUwAE3/AAAAAAAAABgA79FAUrAATfdARbAATfpFsABN90upUDAAJPbscbAAE6OBsAAk+aBl8ABOCXAATg2wAE5bAEAwABhPgAAAAEDwAE4RcABOWwAAAAAAAAAYAPAAEbQAT4CScABOEscwAE4YxbAAThPLsAAYT3AAJPiSAEAASsAwAD/dT4CTsABOMjAATjRAACGHWADwABiOAFqwAE42WADwABjfcAA+zw9F8ABOPsuwABhPRzAATkgFsABORoWwAE5ES6dR8AAk9+kgMAAk/urFwIAAoDAATkswE0CtxbAATk2LqVAwACT2wDAAEX+wACT4j9KwAE5TgEWwAE5VS7AAGE9wACT4gbAAJPogZfAATn0wAE5+cABOvgAAMAAYT8AAAABA8ABOhDAATr4AAAAAgICwAE6HgAAAMAAViJgA8AASKEAwAE6NAAAAIWXYAPAAEbQAABgA8AA/FUBPgRJwAE6RBzAATpeFsABOlcW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tMAARpsAwAD+zk7AAapgwAGqbAAAuehgA8AARtABFsABqnSAwAGqbsBNVwmDHsAARotOwAGqg8ABqokAAISDYAPAAP4bAZNDwAGqkiEcwAGqpYPAAaqZwE1bj0gBAAErAMAA/3VBPgxOwAGqusABqscAAMAAU4RgA8AA/hsBHsABqtXAAHoFAQABhMABquvATVu3AD2MwAGq+cBNW7ccwAGq/4TAAar5wE1bt4EGAQABHMABqxoWwAGrDoPAAasCwE1bj7VjwABG28AAU3oAAAAAwAB56wDAAP40TsABq0HAAatJAABeYAPAAEbQAYPAAatLwE1bjz2LwAGrXsBNW48WwAGreIPAAatswE1bj4O1wABG2knAAauEIiEcwAGrkYbAAauJwE1cYLqNAAAAAMAARxYBIRbAAaumhsABq57ATVxguo/AAEcTQsABq7EAP0nAAayhHMABrK2GwAGspcBNXGC6kwEAARbAAay2LsAAVOzAAJNkwACUNgDAAEcbQsABrM0AP0nAAazdHMABrPUWwAGs6YbAAazhwE1cYLVjwABG28AAU4MBAAGFwAGs/8BNW+0AwAB6BkLAAa0OAD9OwAGtJMABrS8AAMAAYXVgA8AA/FUBKUFGwAGtPcABrW7AAa1VAAABgXtgA8AARtAAFsABrWaGwAGtXsBNXGCCVcAARtY+AUnAAa14HMABrYgWwAGtghTAAa18wE1dZggAml/AAEbYSAEAAYDAAa2LwE1XCQDAAP91PgI9j8ABrZ7ATV1GKkLAAa28AT9JwAGuUiGHwAGuV8BNXUZCwAGuYwA/TsABroHAAa6KAACDvmADwABG0AEcwAGukYLAAa6MwE1bTpdRAQABhsABrpjATVxgAMAAsUNJwAGuqBzAAa61FMABrqzATV3pCABIAQABKwDAAP91PgE9HMABrs2CwAGuyMBNW05WAQABhsABrtHATVxgAMAAsUI+Az0cwAGu+IDAAa7ywE1XCbpJAgAChsABrw7ATVxgFMABrxfATV3pCAAAwABGwz0cwAGvMIDAAa8qwE1XCYReAQABhsABrzfATVxgAMAARr89F8ABr0kuwABg4ynAAJQ4AABNVWAATVbTAE1ewAAAAAICwACUP4GXwAGvcMABr3bAAcUbA8AAYXYAAAFgAcAARg8AAWABwACTZwIEwACUQYGXwAGv48AB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wE1wOGHAAP7vAMAA/0kBisAByKHATXBsHMAByKKCwAHIocBNcGxkAQABlADAAP9BPgNOwAHIusAByMAAAJpfYAPAAEaZARzAAcjIgcAByMLATXA4SwEAAYLAAcjJwE1wbADAAP7OPRzAAcjTLrngAQABg8AByOPATXDPAMAAlF5JwAHI8SIWwAHJBhbAAcj7g8AByPXATXDPujDAAEamg7fAAP6iABzAAckoHMABySQWwAHJGoPAAckUwE1wz7owwABGpksBAAGTAMAA/s66AwAAAADAAEayPgFFwAHJ9QHAAcn+wAHKAAAAl/1gA8AA/hsBFsAByhYcwAHKEhbAAcoIg8ABygLATXDPujDAAEamSwEAAZMAwAD+zrS0wABGmwEcwAHKHITAAcoawE1xfIFrAQABFsAByiWDwAHKH8BNcM+0tMAARpsAwAD/SgGMwAHKKcBNcXwcwAHKKoTAAcopwE1xfGQBAAGUAMAA/0E+AT0cwAHKOi654AEAARzAAcpQgcABykrATXA4SwEAAYTAAcpRwE1xfADAAP7OAMAAlF4/BsAAlF6Bl8ABynXAAcqGwAHPqAAAueABasABynZgA8AA/2gCAAABA8ABypXAAc+oAAAAAQEBwAHKogAAAJpfYAPAAEaZAABcAT4EScAByq8cwAHKzRbAAcrGFsAByrmAwAHKs8BNcna6AsAARqVhwAD+70gBAAGTAMAA/z8+AT0XwAHK8S7AAGF/H8ABywHAAJSnAQABFsABywsutsXAAJNkwACUUgDAAJRWScAByyUiHMABy0MWwAHLPBbAAcsvgMAByynATXJ2ugLAAEalYcAA/u9IAQABlADAAP8/ABzAAct7FsABy3QWwAHLaRzAActlFsABy1mAwAHLU8BNcna6AsAARqVLAQABkwDAAP7OujDAAEamYcAA/u9IAQABlADAAP8/PgE9F8ABzI0uwABhfxzAAcyhFsABzJkuwABhgMAAlFdLAQABFsABzLgcwAHMtBbAAcyogMABzKLATXJ2ugLAAEalSwEAAZMAwAD+zrS0wABGmwDAAP7OwACUVknAAczIHMABzOYWwAHM3xbAAczSgMABzMzATXJ2ugLAAEalYcAA/u9IAQABlADAAP8/PgE9F8ABzWEuwABhfxzAAc2QHMABzXUWwAHNbS7AAGGAwACUV0sBAAEWwAHN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AAABA8AARELAAERMAAAAAAAAAGADwACX2wFKwABESAErBsAAld+Ao8AARFHAAERawABEcgEAwABgTQAAAAEDwABEasAARHIAAAAAAAAAYAPAAPxVAUrAAERtASoGwACV6YCjwABEd8AARIHAAETCAADAAGG8AAAAAQPAAESMwABEwgAAAAAAAABgA8AAlfkBPgE9MMAARJUfwABEn8AA/a0BAAEnwABhvAAGwACV6oCjwABEx8AARM7AAETuAACv6wAAAAEDwABE2MAARO4AAAAAAAAAYAPAAQACAUrAAETeAR7AAETewACUuwEAAS4AAABOD2cATg+xAE4QAgBOEFAAThC/AE4RLQBOEWMAThI6AE4SdQBOErAAThL+AE4TRAAAAAsCwACV7YCjwABE88AARPnAAEcZA8AAXm0AAAFgAcAAldkAAAEEwACV74CjwABFKMAARSwJgm0AXQPAAP6/AWADwACV+QABBcAAlfiAo8AARTDAAEUwwABFQgAAAAPAAEU3wABFQgAAAAEBAcAART0AAASCbV0DwAD+vwFgA8AAlfkAAGADwACV7QE/AggBwACV74AAwE4T5AkBwABFMMAAlewAAAAABQbAAJXxgKPAAEVHwABFScAARYgAAIRSAAAAAQPAAEVSwABFiAAAAQAAgnpgA8AA/2gBWwEBAcAARWIAAACHUF0DwACUvAFfAwAAAABfAwAAAUrAAEVuARzAAEV2gMAARW7AThRWsb0BAAEuAMAAlL4GwACV8oCjwABFjcAARY/AAEXoAACFjQAAAAEDwABFnMAARegAAAIAAJdOYAPAAP9oAVsAAIPZYAPAAP9oAVsCAgLAAEWwAAAAh1BdA8AAlUkCXwMAAF8DAQAAwABFuwAAAIWOXwMBAAAAXwMAAAFKwABFyQEcwABF0YDAAEXJwE4U0rG9AgACLoHAAEXkwE4U6wDAAJVLBsAAlfOAo8AARe3AAEXywABGYAAAhFMAAAABA8AARgLAAEZgAAABAACCemADwAD/aAFbAQEBwABGEgAAAIdQXQPAAJS8AV8DAAAAAFwBPgFGwABGIQDAAEYwAAAAhWhgA8AAlfkAFsAARj0ugm3AAJXvPRzAAEZNgcAARkPAThV9hFIBAV8DAAABgMAARlTAThVdAMAAleEGwACV9ICjwABGZcAARmrAAEbtAADAAGG5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AAbAAJYcgKPAAE1zwABNeMAATbEAAMAAYbkAAAABA8AATYzAAE2xAAACAACXTmADwAD/aAFbAACD2WADwAD/aAFbAgICwABNoAAAAIdQXQPAAJVJAl8DAABfAwEAAMAATasAAACFjl8DAQAAAFwBPgAGwACWHoCjwABNtsAATcXAAE3lAACwwcAAlKgAAAABA8AATcvAAE3lAAAAAAAAAGADwACWFwFKwABN0QEfwABN1cAAliAAAAAAAABOHw4ATh9+AE4gFQBOIGUATiDVAE4hHgAAAAUCwACWIYCjwABN6sAATfDAAFEjA8AAYb0AAAFgAcAAlfkAAAMEwACWI4CjwABOGsAATiMJhdIAYAPAAJcQAATAAJYkgKPAAE43wABOOwmBrwBgA8AAlfkABMAAliWAo8AATk/AAE5YCYXTAGADwACV+QACBcAAljCAo8AATl3AAE5dwABOigAAAAPAAE5fwABOigAAAAMDA8AATmUAAASF0mADwACXEADAAE51AAAEga9gA8AAlfkAwABOgAAABIXTYAPAAJX5AABgA8AAliEBPwQIAcAAliOAAMBOIdMIAcAAliSBAMBOIeMIAcAAliWCAMBOIfMJAcAATl3AAJX9AAAAAAXAAJYxgKPAAE6PwABOj8AATtsAwABhvgADwABOmMAATtsAAAACAgLAAE6eAAAEhdJgA8AAlxAAwABOrgAABIGvYAPAAJX5AABgA8AAliEBPwQIAcAAliOAAMBOImcIAcAAliSBAMBOIncIAMAAliUfwABOy8AAliAAAAAACQHAAE6PwACV/QAAAAAGBsAAlieAo8AATuDAAE7pwABPEAEAwABhvwAAAAEDwABO8cAATxAAAAAAAAAAYAPAAPxVAUrAAE70ASElwABO/hbAAE70LoXTwACWJWADwACWFwbAAJYpgKPAAE8VwABPF8AAT1EAAIRSAAAAAQPAAE8gwABPUQAAAQAAgnpgA8AA/2gBWwEBAcAATzAAAACHUF0DwACUvAFfAwAAAABfAwAAAUrAAE88ARzAAE9EgMAATzzATiNTsbwBAAEuAMAAlMIGwACWKoCjwABPVsAAT1jAAE+sAACFjQAAAAEDwABPZcAAT6wAAAIAAJdOYAPAAP9oAVsAAIPZYAPAAP9oAVsCAgLAAE95AAAAh1BdA8AAlUkCXwMAAF8DAQAA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AKqRHMAAqpUuwABiWgEAASeaaADAAJnVSsAAqqoBHMAAqrEuwABifwAAAADAAJnyP0nAAKrEHMAAqsguwABiWgEAASeCbgDAAJnVSsAAquIBHMAAqukuwABigAAAAADAAJn0P0nAAKsMHMAAqxAuwABiWgEAASeacgDAAJnVSsAAqyUBHMAAqywuwABigQAAAADAAJn1P0nAAKs/HMAAq0MuwABiWgEAASeEKwDAAJnVPgNOwACrbcAAq3oAAK9rYAPAAJcQARzAAKt8LsAAYnYAAAAAwACZ5j0cwACrpC7AAGJWAAAAAMAAmdNKwACrvwEfwACrysAAlhYBAAGAwACr3sBPa5AAP0nAAKv8HMAArAAuwABiWgEAASeaZgDAAJnVSsAArBcBHMAArB4uwABiggAAAADAAJn3P0nAAKwzHMAArDcuwABiWgEAASeaZwDAAJnVSsAArEsBHMAArFIuwABigwAAAADAAJn4P0nAAKxkHMAArGguwABiWgEAASeaagDAAJnVSsAArIABHMAArIcuwABihAAAAADAAJn5P0nAAKydHMAArKsWwACsoS7AAGIuwACZqEgBAAEnmmwAwAEAET0cwACsti6BxwEAASfAAGKFAMAAmdY/ScAArNwcwACs6hbAAKzgLsAAYi7AAJmoSAEAASeabQDAAQARPRzAAKz4LoHHAQABJ8AAYoYAwACZ1j9JwACtIRzAAK0vFsAArSUuwABiLsAAmahIAQABJ5p4AMABABFKwACtOwEcwACtQi7AAGKHAAAAAMAAme4/ScAArVccwACtZRbAAK1bLsAAYi7AAJmoSAEAASeaOwDAAQARPgE9HMAArXougccBAAEnwABiiADAAJnWPz9OwACtu8AArdkAAMAAYolgA8AA/FUBHMAAregWwACt2y7AAGItwACZp0gBAAFqwACt62ADwAD+G4NwAMAA/z9OwACuAcAArgwAAIJvYAPAAJcQARzAAK4OLqG0AAAAAMAAmeVJwACuJiIlwACuNYHAAK4qwE9tr2ADwACX2wAcwACuRy7AAGJVAQABasAArlZgA8AA/hvAAI5mAMAAmdI+AUrAAK5mAR/AAK5xwACW9gIAAhbAAK6NFMAAroLAT22vAQFgA8AAl9uAvcAAl9AcwACuky7AAEMUAAAAAMAAmewAPz0cwACusS7AAGJWAAAA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A8AA/r8BYAPAAJXZARbAAEp7gMAASnbAT7uAr2vAAJdBScAASo0WwABKkS7AAGKewACaNj4BPRzAAEqkLsAAYrQEAAKBwABKuMBPu6tqwABKv2ADwAD+GxUCwABithbAAErjLsAAYp7AAJo2wABityrAAJpTPgVOwABLr8AAS7kAAMAAYspgA8AA/FUBIhzAAEvIFsAAS8GBwABLu8BPu6thwAD+74CXAQABlADAAP9LABbAAEvUgMAAS8/AT7uAsanAAJdCScAAS+iCwABL7MBPvDA+AT0cwABMAS6D5AAAAADAAJpAP07AAEwiwABMLQAAwABiy2ADwAD8VQEqRcAATDwBwABMRcAATEcAAGJgA8AA/hsBkwEcwABMToTAAExMwE+8vWMBAAEWwABMVoHAAExQwE+7q2HAAP7vAMAA/0kBjMAATF7AT7y9HMAATF+EwABMXsBPvL1kAQABlADAAP9BPgVOwABMcsAATHcAAIPzYAPAAJXZARzAAEx+gcAATHnAT7urSwEAAYTAAEx/wE+8vQDAAP7OTsAATJDAAEyaAADAAGLMYAPAAPxVASEewABMncAAmk0BAAGFwABMtMBPvSAAScAATMMcwABMyYTAAEzHwE+8vYCXAQABkwDAAP9LPgM9F8AATNouwABinyrAAJo3PRzAAEz+Lm8BAAEngKcAwACaRUnAAE0SIoPAAE0WwE+8oQGGwABNJMBPvVQ+Aj0cwABNPS7AAGKpAAAAAMAAmkM9HMAATVQuqMkAAAAAwACaSj4BPRzAAE19LsAAYqoAAAAAwACaRD89HMAATacuwABiuAQAAibAAE29AYXAAE29wE+9IGADwACXEGrAAE3DYAPAAP4bFQLAAGK2FsAATekuwABinsAAmjbAAGK3KsAAmnA9i8AAThnAT7yhhsAATibAT71UScAATj+CwABOQ8BPvDA+AT0cwABOWC6D5QAAAADAAJpBPwbAAJpNgZnAAE57wABOh8AAUOQAAcAAYs3AAJSoAAAAAQPAAE6dwABQ5AAAAAEBAcAATqMAAACD82ADwACV2QAAYAPAAPxVAT4CScAATq8lwABOuIDAAE6zwE++yGADwACXbj4JTsAATuDAAE7mAACAlmADwACV2QEewABO6MAAlLoBAAEWwABO9RTAAE7wwE++yAABYAPAAJdugJbAAJdgAEnA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wACkhgAAAMAAYvBgA8ABAAIAAGADwAEAAgAGwACa4IGZwACkksAApJnAAKS4AAKhSQAAAAEDwACkqMAApLgAAAABAQHAAKSwAAAAwABi8GADwAEAAgAAYAPAAQACAAbAAJrhgZnAAKS8wACkw8AApOMAAsAAYvEAAAABA8AApNPAAKTjAAAAAQEBwACk2wAAAMAAYvBgA8ABAAIAAGADwAEAAgAGwACa4oGZwACk58AApOzAAKUJAAKHFgAAAAEDwACk9sAApQkAAAABAQHAAKUEAAAAwABixmADwACarAAAXAAGwACa44GZwAClDcAApRLAAKUeAAKHGQAAAAEDwAClHMAApR4AAAAAAAAAXAAAAFAP7gBQEDIAUBB2AFAQvABQEPsAUBEoAAAABQLAAJrmgZnAAKUjwAClKcAApiYDwABi8gAAAWABwAD/aAABYAHAAJrdAAEFwACa7gAAAAAEAAADAAAAAAAAAAAAYAPAAJrmAT8BCQEAwAD/fgAAAAAFBsAAmuiBmcAApVHAAKVYwAClegAAmXUAAAABA8AApV/AAKV6AAAAAQEBwAClZwAAAMAAYvBgA8ABAAIAAGADwAEAAgFKwAClcwGAwAClc8BQEcUGwACa6YGZwAClfsAApYXAAKWvAAChSQAAAAEDwACllMAApa8AAAABAQHAAKWcAAAAwABi8GADwAEAAgAAYAPAAQACAUrAAKWoAYDAAKWowFASGAbAAJrqgZnAAKWzwAClusAApeUAAMAAYvEAAAABA8AApcrAAKXlAAAAAQEBwACl0gAAAMAAYvBgA8ABAAIAAGADwAEAAgFKwACl3gGAwACl3sBQEm0GwACa64GZwACl6cAApe7AAKYNAACHFgAAAAEDwACl+MAApg0AAAABAQHAAKYGAAAAwABixmADwACarAAAXAE+AAbAAJrsgZnAAKYRwACmFsAApiQAAIcZAAAAAQPAAKYgwACmJAAAAAAAAABcAT4AAABQEZsAUBHuAFASQQBQEpYAUBLXAFATBgAAAAUCwACa74GZwACmKcAApi/AALbHA8AAYvMAAAFgAcAA/2gAAWABwACa3QgEwACa8YGZwACmd8AApoAJheYAXQPAAP6/AV0DwAD+8QJgA8ABAAJgA8ABAAIBMcAApn5dA8AA/vECYAPAAQACYAPAAQACAATAAJrygZnA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wABIMcAASXIAALGjAAAAAQPAAEhBwABJcgAAAAEBAcAASE4AAADAAGGwYAPAAJd4AABeAwABAQFbAAFXA8AAlKsAWwE+BE7AAEhnwABIdQAAwABjLF4DAAEBAVsAAVcDwACUqwBbARzAAEh3LprxAQABFsAASIKAwABIfcBQZJeF0sAAl3oAwACbOE7AAEifwABIqAAAwABjLV4DAAEBAVsAAVcDwACUqwBbARzAAEiqLprxAQABFsAASLWAwABIsMBQZJeBr8AAl3sAwACbOE7AAEjNwABI2wAAwABjLl4DAAEBAVsAAVcDwACUqwBbARzAAEjdLprxAQABFsAASOiAwABI48BQZJeF08AAl3wAwACbOErAAEj4ATTAAEj/A8AASP/AAEluAAAAAQEBwABJAAAAAFtbAABgA8AAl3gBSsAASQ4BH8AASRLAAJeHAwADJsAASSsBHMAASSuBwABJHsBQZL8gAQABhMAASSzAUGWnAABgA8AAlxAmwABJSAEcwABJSILAAElAwFBlBCABAAGEwABJScBQZacAAGADwACXECbAAEliARzAAElig8AASVXAUGVJIAEAAYTAAEljwFBlpwAAYAPAAJcQAAbAAJtkgZrAAEl3wABJhMAASegAALGiAAAAAQPAAEmMwABJ6AAAAAEBAcAASZEAAACD82ADwACXlwAAXgMAAQEBWwABVwPAAJSrAFsBSsAASaABHMAASaAuwABjQAIAAoDAAEmwwFBmcTTAAEm2A8AASbbAAEnnAAAAAgICwABJtwAAAIJJWwDAAEm/AAAAW1sAAGADwACXlwFKwABJzQEfwABJ0cAAl54CAAImwABJ1QGBwABJ1cBQZsRgA8AAlxAmwABJ3QGCwABJ3cBQZs9dA8AA/r8BYAPAAJcQAADAAJtmBsAAm2WBmsAASe3AAEn6wABKYQAAsaEAAAABA8AASgPAAEphAAAAAQEBwABKCQAAAIPzYAPAAJeIAABeAwABAQFbAAFXA8AAlKsAWwFKwABKGAEcwABKGC7AAGNAAgACgMAASijAUGdUNMAASi4DwABKLsAASmAAAAACAgLAAEovAAAAgklbAMAASjcAAABbWwAAYAPAAJeIAUrAAEpFAR/AAEpJwACXlgIAAibAAEpOAYHAAEpOwFBnp2ADwACXECbAAEpWAYLAAEpWwFBnsl0DwAD+vwFgA8AAlxAAAMAAm2YGwACbZoGawABKZsAASnPAAE1oAADAAGNAAAAAAQPAAEqCwABNaAAAAAICAsAASogAAACD82ADwACXiADAAEqOAAAAhzphAwJbW1sAAF4DAAEBAVsAAVcDwACUqwBbAT4DTsAASrzAAErHAADAAGNBXgMAAQEBWwABVwPAAJSrAFsBHMAASskumvEBAAEWwABK1IDAAErPwFBoOYJJwACXigDAAJs4TsAASvjAAEsHAADAAGNCXQPAAP59AV4DAAEBAVsAAVcDwACUqwBbARzAAEs+HMAASyAWwABLFoDAAEsRwFBoOVvAAJeLgKsBAV4DAAEBAVsAAVcDwACUqwBbARbAAEskLsAAYxvAAJtAAMAA/oiArQAAAADAAP6TSsAAS6oBNMAAS7EDwABLscAATWQAAAABAQHAAEuyAAAAW1sAAFsBPgROwABLysAAS9EAAIJJYAPAAJXZASbAAEvKARzAAEvdgsAAS9PAUGhvIAEAAYTAAEvewFBpRQAAYAPAAJXZTsAATAHAAEwPAADAAGNDXQPAAP6/AWADwACXEAExwABMHWADwACXEABGwABMJ8AATFnAAEw5AAAAmxVeAwABAQFbAAFXA8AAlKsAWwCDwABMScBQaLQ+Ak7AAExnwABMbgAAgXZbARzAAEx8h8AATHDAUGnDIAEAAYTAAEx9wFBpRQAAScAATJElwABMnBTAAEyVwFBp6ggAXQPAAP59AVs+AT0cwABMw4bAAEy1wFBpkoClAQABJsAATMoBFMAATMrAUGnqCAFdA8AA/n0BW10DwAD+fQFgA8AAlxAAwAD+0T4BPRzAAEz8hsAATO7AUGmSVgEAASbAAE0AARTAAE0AwFBp6ggAYAPAAJcQAMAA/tBKwABNIQEcwABNLoHAAE0owFBoSSACAAKFwABNL8BQaVUcwABNRYbAAE03wFBpkoCtAQAAAYV2KsAA/pMAAAbAAJtngZrAAE1twABNesAATmsAALGgAAAAAQPAAE2FwABOawAAAAEBAcAATY0AAACD82ADwACXnwAAXgMAAQEBWwABVwPAAJSrAFsBPgROwABNpsAATa8AAMAAY0ReAwABAQFbAAFXA8AAlKsAWwEcwABNsS6a8QEAARbAAE28gMAATbfAUGsMhc3AAJeiAMAAmzhOwABN1MAATd4AAMAAY0VeAwABAQFbAAFXA8AAlKsAWwEcwABN4C6a8QEAARbAAE3rgMAATebAUGsMhc/AAJejAMAAmzhOwABN/sAATgEAAKrgYAPAAQACARbAAE4IgMAATgPAUGsMquDAAJehSsAAThABNMAAThcDwABOF8AATmcAAAABAQHAAE4YAAAAW1sAAGADwACXnwFKwABOLgEfwABOMsAAl68DAAODwABOOcBQa7wmwABORQEcwABORYHAAE49wFBrMiABAAGEwABORsBQa/0AAGADwACXECbAAE5bARzAAE5bgsAATlLAUGt3IAEAAYTAAE5cwFBr/QAAYAPAAJcQAAbAAJtogZrAAE5wwABOfcAATyoAALGfAAAAAQPAAE6IwABPKgAAAAEBAcAATpAAAACD82ADwACXsAAAXgMAAQEBWwABVwPAAJSrAFsBPgNOwABOqcAATrUAAMAAY0ZeAwABAQFbAAFXA8AAlKsAWwEcwABOty6a8QEAARbAAE7CgMAATr3AUGynH8AAl7MAwACbOE7AAE7YwABO2wAAquBgA8ABAAIBFsAATuKAwABO3cBQbKeq4MAAl7JKwABO6gE0wABO8QPAAE7xwABPJgAAAAEBAcAATvIAAABbWwAAYAPAAJewAUrAAE8AAR/AAE8EwACXvgIAAoLAAE8LwFBtESbAAE8aARzAAE8agcAATw/AUGzNIAEAAYPAAE8bwFBtUgAAYAPAAJcQAAbAAJtpgZrAAE8vwABPPMAAT+wAALGeAAAAAQPAAE9IwABP7AAAAAEBAcAAT1EAAACD82ADwACXvwAAXgMAAQEBWwABVwPAAJSrAFsBPgNOwABPasAAT3YAAMAAY0ZeAwABAQFbAAFXA8AAlKsAWwEcwABPeC6a8QEAARbAAE+DgMAAT37AUG3TH8AAl8IAwACbOE7AAE+ZwABPnAAAquBgA8ABAAIBFsAAT6OAwABPnsBQbdOq4MAAl8FKwABPqwE0wABPsgPAAE+ywABP6AAAAAEBAcAAT7MAAABbWwAAYAPAAJe/AUrAAE/BAR/AAE/FwACXzQIAAoLAAE/NwFBuPSbAAE/cARzAAE/cgcAAT9HAUG35IAEAAYPAAE/dwFBufgAAYAPAAJcQAAbAAJtqgZrAAE/xwABP/sAAUFMAALGdAAAAAQPAAFAOwABQUwAAAAEBAcAAUBsAAACD82ADwACX2wAAXgMAAQEBWwABVwPAAJSrAFsBSsAAUCoBNMAAUCoDwABQKsAAUFMAAAABAQHAAFArAAAAW1sAAGADwACX2wFKwABQOQEfwABQPcAAl+QBAAEWwABQToDAAFBJwFBu/4C9wACX0AAGwACba4GawABQWMAAUGXAAFCWAACxnAAAAAEDwABQbsAAUJYAAAABAQHAAFB0AAAAg/NgA8AAl/cAAF4DAAEBAVsAAVcDwACUqwBbAUrAAFB9ATTAAFB9A8AAUH3AAFCWAAAAAQEBwABQfgAAAFtbAABgA8AAl/cBSsAAUIwBH8AAUJDAAJf+AAAAAAbAAJtsgZrAAFCbwABQqMAAURUAAIZvAAAAAQPAAFDAwABRFQAAAAEBAcAAUNUAAACD82ADwACX5QAAXgMAAQEBWwABVwPAAJSrAFsBSsAAUOQBNMAAUOQDwABQ5MAAURUAAAABAQHAAFDlAAAAW1sAAGADwACX5QFKwABQ8wEfwABQ98AAl+4BAAEWwABREIDAAFELwFBwK4C9wACX0AAGwACbbYGawABRGsAAUSfAAFF2AACxmwAAAAEDwABRNcAAUXYAAAABAQHAAFFAAAAAg/NgA8AAl+8AAF4DAAEBAVsAAVcDwACUqwBbAUrAAFFPATTAAFFPA8AAUU/AAFF2AAAAAQEBwABRUAAAAFtbAABgA8AAl+8BSsAAUV4BH8AAUWLAAJf2AQABFsAAUXGAwABRbMBQcMuAvcAAl9AABsAAm26BmsAAUXvAAFGIwABSgQAAsZoAAAABA8AAUZPAAFKBAAAAAQEBwABRowAAAIPzYAPAAJgtAABeAwABAQFbAAFXA8AAlKsAWwE+A07AAFG8wABRyQAAwABjR14DAAEBAVsAAVcDwACUqwBbARzAAFHLLprxAQABFsAAUdaAwABR0cBQcWuFl8AAmC8AwACbOE7AAFHywABR/wAAwABjSF4DAAEBAVsAAVcDwACUqwBbARzAAFIBLprxAQABFsAAUgyAwABSB8BQcWulUsAAmDAAwACbOErAAFIbATTAAFIiA8AAUiLAAFJ9AAAAAQEBwABSIwAAAFtbAABgA8AAmC0BSsAAUjkBH8AAUj3AAJg7AgACJsAAUlgBHMAAUliBwABSTMBQcZEgAQABg8AAUlnAUHI0AABgA8AAlxAmwABScQEcwABScYLAAFJlwFBx1iABAAGDwABScsBQcjQAAGADwACXEAAGwACbb4GawABShsAAUpPAAFOTAACxmQAAAAEDwABSpcAAU5MAAAABAQHAAFK0AAAAg/NgA8AAl/8AAF4DAAEBAVsAAVcDwACUqwBbAT4DTsAAUs3AAFLdAADAAGM4XgMAAQEBWwABVwPAAJSrAFsBHMAAUt8umvEBAAEWwABS6oDAAFLlwFBy1YC9wACYAQDAAJs4TsAAUwLAAFMPAADAAGM9XgMAAQEBWwABVwPAAJSrAFsBHMAAUxEumvEBAAEWwABTHIDAAFMXwFBy1YJuwACYAgDAAJs4SsAAUysBNMAAUzIDwABTMsAAU48AAAABAQHAAFMzAAAAW1sAAGADwACX/wFKwABTSQEfwABTTcAAmA0CAAImwABTagEcwABTaoHAAFNbwFBy+yABAAGDwABTa8BQc54AAGADwACXFybAAFODARzAAFODgsAAU3fAUHNAIAEAAYPAAFOEwFBzngAAYAPAAJgOAAbAAJtwgZrAAFOYwABTpcAAVg4AALGYAAAAAQPAAFOtwABWDgAAAAEBAcAAU7IAAACD82ADwACYDgAAXgMAAQEBWwABVwPAAJSrAFsBPgNOwABT0cAAU90AAMAAY0ldA8AA/r8BXgMAAQEBWwABVwPAAJSrAFsBHMAAU/8cwABT6xbAAFPkgMAAU9/AUHQ/g/TAAJgQgKsBAV4DAAEBAVsAAVcDwACUqwBbARbAAFPvLsAAYxTAAJs6AMAA/oiArQAAAADAAP6TTsAAVBrAAFQjAADAAGMxXgMAAQEBWwABVwPAAJSrAFsBHMAAVCUumvEBAAEWwABUMIDAAFQrwFB0P4JtwACYEQDAAJs4SsAAVIkBNMAAVJADwABUkMAAVgoAAAABAQHAAFSRAAAAW1sAAGADwACYDgE+BE7AAFS0wABUuwAAg/RdA8AA/r8BYAPAAJfvATHAAFTIYAPAAJfvAEbAAFTSwABVAcAAVOQAAACbFV4DAAEBAVsAAVcDwACUqwBbAIHAAFT0wFB0ZT4CTsAAVQ/AAFUWAACBdlsBHMAAVSSFwABVGMBQdYAgAQABg8AAVSXAUHU8AABJwABVOSXAAFVEhsAAVT3AUHWnXQPAAP59AVs+AT0cwABVZITAAFVdwFB1UYClAQABJsAAVWsBFMAAVWvAUHWnBgFdA8AA/n0BW10DwAD+fQFgA8AAl+8AwAD+0T4BPRzAAFWWhMAAVY/AUHVRVgEAASbAAFWaAYbAAFWawFB1p2ADwACX7wDAAP7QTsAAVcXAAFXKAACCbWADwACV+QEmwABVxQEcwABV1ILAAFXMwFB03iABAAGDwABV1cBQdTwAAGADwACV+UrAAFXnAR/AAFXywACYHQIAAoTAAFX2wFB1USbAAFX+AYXAAFX+wFB2XmADwACV/gAGwACbcYGawABWE8AAViDAAFZeAACxlwAAAAEDwABWN8AAVl4AAAABAQHAAFZLAAAAg/NgA8AAmFgAAF4DAAEBAVsAAVcDwACUqwBbAUrAAFZUAR7AAFZUwACbNgEAAYDAAFZZwFB29QAGwACbcoGawABWY8AAVnDAAFamAACxlQAAAAEDwABWg8AAVqYAAAABAQHAAFaTAAAAg/NgA8AAmEYAAF4DAAEBAVsAAVcDwACUqwBbAUrAAFacAR7AAFacwACbNgEAAYDAAFahwFB3XgAGwACbc4GawABWq8AAVrjAAFb3AACxkwAAAAEDwABWy8AAVvcAAAABAQHAAFbbAAAAg/NgA8AAmE8AAF4DAAEBAVsAAVcDwACUqwBbAUrAAFbkATTAAFbkA8AAVuTAAFb3AAAAAQEBwABW5QAAAFtbAABgA8AAmE8BSsAAVvMBgMAAVvPAUHfHBsAAm3SBmsAAVvzAAFcJwABXXwAAsZIAAAABA8AAVxnAAFdfAAAAAQEBwABXJgAAAIPzYAPAAJhoAABeAwABAQFbAAFXA8AAlKsAWwFKwABXNQE0wABXNQPAAFc1wABXXwAAAAEBAcAAVzYAAABbWwAAYAPAAJhoAUrAAFdEAR/AAFdIwACYcQEAARbAAFdZgMAAV1TAUHhPgJbAAJhqAAbAAJt1gZrAAFdkwABXccAAV80AALGRAAAAAQPAAFeDwABXzQAAAAEBAcAAV5IAAACD82ADwACYegAAXgMAAQEBWwABVwPAAJSrAFsBSsAAV6EBNMAAV6EDwABXocAAV80AAAABAQHAAFeiAAAAW1sAAGADwACYegFKwABXsAEfwABXtMAAmIMBAAEWwABXx4DAAFfCwFB474CWwACYfAAGwACbdoGawABX0sAAV9/AAFg7AACxkAAAAAEDwABX8cAAWDsAAAABAQHAAFgAAAAAg/NgA8AAmJAAAF4DAAEBAVsAAVcDwACUqwBbAUrAAFgPATTAAFgPA8AAWA/AAFg7AAAAAQEBwABYEAAAAFtbAABgA8AAmJABSsAAWB4BH8AAWCLAAJibAQABFsAAWDWAwABYMMBQeY+AlsAAmJIABsAAm3eBmsAAWEDAAFhNwABYmQAAsY8AAAABA8AAWF3AAFiZAAAAAQEBwABYagAAAIPzYAPAAJhyAABeAwABAQFbAAFXA8AAlKsAWwFKwABYeQE0wABYeQPAAFh5wABYmQAAAAEBAcAAWHoAAABbWwAAYAPAAJhyAUrAAFiIAR/AAFiMwACYeQAAAAAGwACbeIGawABYnsAAWKvAAFocAACF2QAAAAEDwABYw8AAWhwAAAABAQHAAFjYAAAAg/NgA8AAmIQAAF4DAAEBAVsAAVcDwACUqwBbAT4CTsAAWPfAAFkCAADAAGNKXQPAAP6/AV4DAAEBAVsAAVcDwACUqwBbARzAAFkiHMAAWRcWwABZEYDAAFkMwFB6u4SGwACYhoCrAQFeAwABAQFbAAFXA8AAlKsAWwEWwABZGy6a8cAAmzgAwAD+iICtAQAAAYV2KsAA/pNKwABZPwE0wABZRgPAAFlGwABaGAAAAAEBAcAAWUcAAABbWwAAYAPAAJiEAT4CTsAAWWjAAFluAACEhl0DwAD+vwFgA8AAmGABJsAAWWgBHMAAWc0cwABZhoHAAFlwwFB64YCrAQFbATTAAFmKA8AAWYrAAFnAAAAAAQEBwABZmAAAAJsVXgMAAQEBWwABVwPAAJSrAFsAAFsBSsAAWakBHMAAWbWDwABZqcBQe9YgAQABgsAAWbbAUHt0AAAAwAD+iICtAQAAAYV2KsAA/pNdA8AA/r8BYAPAAJhgSsAAWewBH8AAWffAAJiPAQABg8AAWgvAUHuJAAbAAJt5gZrAAFohwABaLsAAWlAAAIZ2AAAAAQPAAFo3wABaUAAAAAEBAcAAWj0AAACD82ADwACXGgAAXgMAAQEBWwABVwPAAJSrAFsBSsAAWkYBHsAAWkbAAJs2AQABgMAAWkvAUHx8AAbAAJt6gZrAAFpVwABaYsAAWzgAALGMAAAAAQPAAFpywABbOAAAAAEBAcAAWn8AAACD82ADwACXTgAAXgMAAQEBWwABVwPAAJSrAFsBPgJOwABamMAAWqUAAMAAY0teAwABAQFbAAFXA8AAlKsAWwEcwABapy6a8QEAARbAAFqygMAAWq3AUHzlsY3AAJdQAMAAmzhKwABawQE0wABayAPAAFrIwABbNAAAAAEBAcAAWskAAABbWwAAYAPAAJdOAT4CTsAAWufAAFrwAACxjWADwACXEAEmwABa5wEcwABa/oHAAFrywFB9CyABAAGCwABa/8BQfWkAAGADwACXEErAAFsRAR/AAFsYwACXWwEAAYPAAFskwFB9fgAGwACbe4GawABbPcAAW0rAAF0FAACxiwAAAAEDwABbX8AAXQUAAAABAQHAAFtxAAAAg/NgA8AAmJwAAF4DAAEBAVsAAVcDwACUqwBbAT4CTsAAW7bAAFvEAADAAGNMXQPAAP6/AV4DAAEBAVsAAVcDwACUqwBbARzAAFvnHMAAW9wWwABb04DAAFvOwFB+AIh5wACYnoCrAQFeAwABAQFbAAFXA8AAlKsAWwEWwABb4C6a8cAAmzgAwAD+iICtAQAAAYV2KsAA/pNKwABcBAE0wABcCwPAAFwLwABdAQAAAAEBAcAAXAwAAABbWwAAYAPAAJicAT4CTsAAXDDAAFw5AACIeV0DwAD+vwFgA8AAlxABHMAAXLYcwABcVIHAAFw7wFB+JoCrAQFgA8AAlxABNMAAXHMDwABcc8AAXKkAAAABAQHAAFyBAAAAmxVeAwABAQFbAAFXA8AAlKsAWwAAYAPAAJcQAUrAAFySASbAAFySARzAAFyeg8AAXJLAUH8aIAEAAYLAAFyfwFB+uQAAYAPAAJcQAMAA/oiArQEAAAGFdirAAP6TSsAAXNUBH8AAXODAAJipAQABg8AAXPHAUH7OAAbAAJt8gZrAAF0KwABdF8AAXWUAALGKAAAAAQPAAF0lwABdZQAAAAEBAcAAXTAAAACD82ADwACYqgAAXgMAAQEBWwABVwPAAJSrAFsBPgFKwABdPAE0wABdQwPAAF1DwABdYQAAAAEBAcAAXUQAAABbWwAAYAPAAJiqAUrAAF1SAR/AAF1WwACYtQAAAAAGwACbfYGawABdasAAXXfAAF+7AACxiAAAAAEDwABdjcAAX7sAAAABAQHAAF2gAAAAg/NgA8AAmLYAAF4DAAEBAVsAAVcDwACUqwBbAT4DTsAAXb/AAF3OAADAAGNNXQPAAP6/AV4DAAEBAVsAAVcDwACUqwBbARzAAF38HMAAXegWwABd3YDAAF3YwFCAUp+BwACYuICrAQFeAwABAQFbAAFXA8AAlKsAWwEWwABd7C7AAGMUwACbOgDAAP6IgK0AAAAAwAD+k07AAF4PwABeGgAAsYlgA8AA/FUBFsAAXiGAwABeHMBQgFKxicAAmLlKwABeMQE0wABeOAPAAF44wABftwAAAAEBAcAAXjkAAABbWwAAYAPAAJi2AT4DTsAAXlvAAF5mAACfgV0DwAD+vwFgA8AAmMUBMcAAXnJgA8AAmMUARsAAXnzAAF6uwABejgAAAJsVXgMAAQEBWwABVwPAAJSrAFsAgcAAXp7AUIB4PgJOwABevMAAXsMAAIF2WwEcwABe0YXAAF7FwFCBdiABAAGDwABe0sBQgTIAAEnAAF7mJcAAXvGGwABe6sBQgZ1dA8AA/n0BWz4BPRzAAF8VhMAAXwrAUIFHgKUBAAEmwABfHAEUwABfHMBQgZ0GAV0DwAD+fQFbXQPAAP59AWADwACYxQDAAP7RPgE9HMAAX0uEwABfQMBQgUdWAQABJsAAX08BhsAAX0/AUIGdYAPAAJjFAMAA/tBKwABfcAEfwABfe8AAmMQCAAGEwABfjcBQgUcBsYmCwABfpcBQgPEGwACbfoGawABfwMAAX83AAGCyAACxhwAAAAEDwABf2sAAYLIAAAABAQHAAF/kAAAAg/NgA8AAmMUAAF4DAAEBAVsAAVcDwACUqwBbAT4DTsAAX/3AAGAGAADAAGM8XgMAAQEBWwABVwPAAJSrAFsBHMAAYAgumvEBAAEWwABgE4DAAGAOwFCCpIC9wACYxwDAAJs4TsAAYCvAAGA1AADAAGM/XgMAAQEBWwABVwPAAJSrAFsBHMAAYDcumvEBAAEWwABgQoDAAGA9wFCCpICWwACYyADAAJs4SsAAYE4BNMAAYFUDwABgVcAAYK4AAAABAQHAAGBWAAAAW1sAAGADwACYxQE+AUrAAGBpAR/AAGB0wACY0QIAAibAAGCFARzAAGCFgcAAYH3AUILKIAEAAYPAAGCGwFCDbQAAYAPAAJcQJsAAYJsBHMAAYJuCwABgksBQgw8gAQABg8AAYJzAUINtAABgA8AAlxAABsAAm3+BmsAAYLfAAGDEwABhIgAAsYYAAAABA8AAYNbAAGEiAAAAAQEBwABg5QAAAIPzYAPAAJlWAABeAwABAQFbAAFXA8AAlKsAWwFKwABg9AE0wABg9APAAGD0wABhIgAAAAEBAcAAYPUAAABbWwAAYAPAAJlWAUrAAGEDAR/AAGEHwACZYwEAARbAAGEagMAAYRXAUIQQG8AAmVgABsAAm4CBmsAAYSfAAGE0wABhZgAAsYQAAAABA8AAYUDAAGFmAAAAAQEBwABhSQAAAIPzYAPAAJlyAABeAwABAQFbAAFXA8AAlKsAWwFKwABhUgEmwABhUgEcwABhUi7AAGM0AQABJ7GEAMAAm09eAwABAQFbAAFXA8AAlKsAWwbAAJuBgZrAAGFrwABheMAAYiAAALGFAAAAAQPAAGGCwABiIAAAAAEBAcAAYYkAAACD82ADwACZZAAAXgMAAQEBWwABVwPAAJSrAFsBPgJOwABhosAAYbEAAMAAYzVeAwABAQFbAAFXA8AAlKsAWwEcwABhsy6a8QEAARbAAGG+gMAAYbnAUIUugm/AAJlmAMAAmzhKwABhzwE0wABh1gPAAGHWwABiHAAAAAEBAcAAYdcAAABbWwAAYAPAAJlkAT4BSsAAYeoBH8AAYfXAAJlxAQABJsAAYgkBHMAAYgmBwABh+8BQhVQgAQABgsAAYgrAUIWyAABgA8AAlxAAAABQMOgAUDGGAFAxwwBQMjEAUDJoAFAzIQBQM6wAUDQKAFA0YwBQNNQAUDVFAFA2cQBQN50AUDmbAFA6lwBQPFwAUD2SAFA+mwBQQJ0AUEK2AFBFEQBQRdMAUEZFAFBG3gBQSkkAUEvVAFBNwQBQT0sAUE+eAFBQzABQUfoAUFJ8AFBS/gBQU9AAUFSwAFBVgABQVwwAUFg4AFBZ4wBQWysAUFwpAFBdkwBQXqMAUF8iAFBfoQBQYWAAUGL/AFBkbQBQZkcAUGcqAFBoDQBQauIAUGx9AFBtqQBQbtUAUG91AFBwAQBQcKEAUHFBAFByqwBQdBUAUHbLAFB3NABQd50AUHglAFB4xQBQeWUAUHoFAFB6kQBQfFIAUHy7AFB91gBQf5oAUIAoAFCCegBQg+YAUISFAFCFBABQhgIAAABOAsAAm4SBmsAAYrPAAGK5wABlWQPAAGNOAAABXQHAAJT+AVsAAAMEwACbhoGawABi+sAAYyQJwABjTwBdA8AA/7MBYAPAAJXZAR7AAGMZwADDIQABYAPAAJXZAAAEwACbh4GawABjOsAAY1cJwABjBQBdA8AA/7MBYAPAAQACAR7AAGNKwADDIQABYAPAAQACAAAEwACbiIGawABjX8AAY2gYgO4AYAPAAP4bAZMBBcAAm4+BmsAAY23AAGNtwABjhwAAAAPAAGOFwABjhwAAAAAAAABgA8AAm4QBPwEJAcAAY23AAJVIAAAAAAQGwACbioGawABjjMAAY5HAAGPmAADAAGMSAAAAAQPAAGOqwABj5gAAAAEBAcAAY7AAAACD82ADwACV2QAAYAPAAPxVAUrAAGO/ARzAAGPYFsAAY78uwABjT8AAm4aDHAEAAYDAAGPhwFCIWwDAAP+/BsAAm4uBmsAAY+vAAGPwwABkHAAAmvEAAAABA8AAY/XAAGQcAAAAAQEBwABj+wAAAIPzYAPAAJXZAABcAT4BPRzAAGQMgMAAZAfAUIjJhFIBAVsBLgDAAJXhBsAAm4yBmsAAZCHAAGQmwABksgAAwABH5gAAAAEDwABkL8AAZLIAAAABAQHAAGQ1AAAAg/NgA8AAldkAAFwBPgNOwABkRcAAZEwAAJsFYAPAAP4bARbAAGROLoDuwACbiD0cwABkXoDAAGRZwFCJJYRTAQFbAS4AwACV4knAAGR3IRzAAGSBFsAAZHsugO7AAJuISAEAAYHAAGSEwFCJOwDAAP8/PRzAAGSlFsAAZIwuwABjT8AAm4ZWAQABgMAAZKnAUIklAMAA/8A/BsAAm42BmsAAZLfAAGS3wABlVwAAwABhtgAAAAEDwABkzMAAZVcAAAABAQHAAGTeAAAAg/NgA8AAmNIAAFsBPgM9HMAAZQMWwABk6i7AAGNPwACbhlYBAAGAwABlB8BQifEAwAD/wEnAAGUSFsAAZRuAwABlFsBQifGkJMAAmNU9HMAAZS4WwABlJC7AAGMFwACbh1YBAAEmwABlNwEWwABlN4DAAGUywFCJ8cAAR/zAAJjUYAPAAQACAMAA/8A/PRfAAGVOLoDuHMAAZUwWwABlTi6A7sAAm4hkAQABlADAAP9BwACbiAAAUIgvAFCInwBQiPkAUInFAFCKrQAAAAQCwACbkIGcgTaBPMAAQCADwABjUAAAAWABwAD/aAABXQHAAJVJAmADwAD8VWADwACV2QABBcAAm9aBnIF3gX2BkQEAAAOBj4GRAAAAAAAAAGADwACbkAE/AQkBgX3AAP9+AAAAAEMGwACbkoGcgiaCK4JSAADAAGNRAAAAAQOCMYJSAAAAAgICgjcAAAC+fGADwACV2QCCQwAAAL59YAPAAJXZAABgA8AA/FUBSoJNASoGwACbk4GcgqeCrIMGAADAAGNSAAAAAQOCtoMGAAAABAQEgrwAAAC+fGADwACV2QCCygAAAIc9YAPAAP9oAILXAAAAvn1gA8AAldkAguUAAACHPmADwAD/aAAAYAPAAPxVAUqC9gEcgv2BgvbAUIunSAEAAYODAMBQi8MAwAD/dQbAAJuUgZyDUoNXg7EAAMAAY1MAAAABA4Nhg7EAAAAEBASDZwAAAL58YAPAAJXZAIN1AAAAwABjVGADwAEAAgCDggAAAL59YAPAAJXZAIOQAAAAwABjVWADwAEAAgAAYAPAAPxVAUqDoQEcg6iBg6HAUIwnSAEAAYODq8BQjEUAwAEAEQbAAJuVgZyDtoO7hHsAAMAAY1YAAAABA4PEhHsAAAACAgKDygAAAL58YAPAAJXZAIPWAAAAvn1gA8AAldkAAGADwAD8VQE+A0mD4x6D58AA9/wCAAKAg/HAUIydgYP4wFCMqwBKhAABKT9JhBEiHIQbgIQVwFCMnUgBAAErAMAA/3UBHIQsgYQmwFCMq0gBAAErAMAA/3VKhDUBHIQ8LsAAY1ECAAKAhEPAUIydgYRKwFCMqwDAAJuSP0qEVgEchGOAhF3AUIydhY0CAmADwAD8VWADwACV2QIugYRxwFCMqwDAAJXjBsAAm5aBnISAhIWGDgAAwABjVwAAAAEDhJKGDgAAAAICAoSeAAAAwABjWF0DwAD+vwFgA8AAldkAhLAAAADAAGNZXQPAAP6/AWADwACV2QAAYAPAAPxVAT4EToTBhMcAACdgA8AA/hsBk0OE0CIchN2ChNfAUI28YwEAARaE5YCE38BQjYNhwAD+7wDAAP9JAByE9YKE78BQjbxjAQABFoT9gYT3wFCNmmHAAP7vAMAA/0k+AkmFDSEchRIuwABjVgIAAhyFIYCFHMBQjYNLAQABgoUiwFCNvADAAP7OHIUvgYUqwFCNmksBAAGChTDAUI28AMAA/s4AwACblUqFOQEqPz2KhU3AUI28HIVSgoVNwFCNvGQBAAGUAMAA/0FJhWAchWqChWTAUI28YwEAARaFcoCFbMBQjYNhwAD+7wDAAP9JPgFKhYIBHIWJLsAAY1ECAAIchZWAhZDAUI2DSwEAAYKFlsBQjbwAwAD+zisAwACbkkmFsByFuoKFtMBQjbxjAQABFoXCgYW8wFCNmmHAAP7vAMAA/0k+AUqF0gEchdkuwABjUQIAAhyF5YGF4MBQjZpLAQABgoXmwFCNvADAAP7OKwDAAJuSP0qF/wEpBsAAm5eBnIYThiSGygAAsb0BaoYUYAPAAP9oAgAAAQOGMIbKAAAAAgIChjkAAACD82ADwACV7QCGRAAAIIWOYAPAAJXZAABgA8AA/FUBPgNJhk8hJYZXgYZTwFCPamADwACV7UqGZAEchmsuwABjUQIAAoCGcsBQj1yBhnjAUI9qAMAAm5I/ToaKhpAAAIPbYAPAAJXtASaGigGBhpLAUI9qYAPAAJXtSoabARyGoi7AAGNXAgACFoa1gIawwFCPXIJtwACV7xaGwYKGu8BQj7qCbcAAle8AwACblgbAAJuYgZyGz4bgh+QAALF5AWqG0GADwAD/aAIAAAEDhvyH5AAAAAICAocVAAAAg/NgA8AAmUcAhyAAACCFjmADwACV2QAAYAPAAPxVAT4DSYcrISWHM4GHL8BQkEZgA8AAmUdKh1ABHIdXLsAAY1ECAAKAh17AUJA4gYdkwFCQRgDAAJuSP06HhoeMAACD22ADwACZRwEmh4YBgYeOwFCQRmADwACZR0qHlwEch54uwABjUgQABICHqcBQkDgWh7SAh6/AUJA4wABH/MAAmUmCh8TAUJCWFofRgofLwFCQlsAAR/zAAJlJAMAAm5MGwACbmYGch+mH+oj2AACxewFqh+pgA8AA/2gCAAABA4gUiPYAAAACAgKIKwAAAIPzYAPAAJk0AIg2AAAghY5gA8AAldkAAGADwAD8VQE+A0mIQSEliEmBiEXAUJE0YAPAAJk0SohkARyIay7AAGNRAgACgIhywFCRJoGIeMBQkTQAwACbkj9OiJiIngAAg9tgA8AAmTQBJoiYAYGIoMBQkTRgA8AAmTRKiKkBHIiwLsAAY1IEAASAiLvAUJEmFojGgIjBwFCRJsAAR/zAAJk2gojWwFCRhBaI44KI3cBQkYTAAEf8wACZNgDAAJuTBsAAm5qBnIj7iQyKBAAAsX0Baoj8YAPAAP9oAgAAAQOJJYoEAAAAAgICiTsAAACD82ADwACZHwCJRgAAIIWOYAPAAJXZAABgA8AA/FUBPgNJiVEhJYlZgYlVwFCSImADwACZH0qJcwEciXouwABjUQIAAoCJgcBQkhSBiYfAUJIiAMAAm5I/TommiawAAIPbYAPAAJkfASaJpgGBia7AUJIiYAPAAJkfSom3ARyJvi7AAGNSBAAEgInJwFCSFBaJ1ICJz8BQkhTAAEf8wACZIYKJ5MBQknIWifGCievAUJJywABH/MAAmSEAwACbkwbAAJubgZyKCYoaixYAALF+AWqKCmADwAD/aAIAAAEDijSLFgAAAAICAopLAAAAg/NgA8AAmQgAilYAACCFjmADwACV2QAAYAPAAPxVAT4DSYphISWKaYGKZcBQkxBgA8AAmQhKioQBHIqLLsAAY1ECAAKAipLAUJMCgYqYwFCTEADAAJuSP06KuIq+AACD22ADwACZCAEmirgBgYrAwFCTEGADwACZCEqKyQEcitAuwABjUgQABICK28BQkwIWiuaAiuHAUJMCwABH/MAAmQqCivbAUJNgFosDgor9wFCTYMAAR/zAAJkKAMAAm5MGwACbnIGcixuLLIwgAACxgAFqixxgA8AA/2gCAAABA4tEjCAAAAACAgKLWQAAAIPzYAPAAJj1AItkAAAghY5gA8AAldkAAGADwAD8VQE+A0mLbyEli3eBi3PAUJP+YAPAAJj1SouQARyLly7AAGNRAgACgIuewFCT8IGLpMBQk/4AwACbkj9Oi8KLyAAAg9tgA8AAmPUBJovCAYGLysBQk/5gA8AAmPVKi9MBHIvaLsAAY1IEAASAi+XAUJPwFovwgIvrwFCT8MAAR/zAAJj3gowAwFCUThaMDYKMB8BQlE7AAEf8wACY9wDAAJuTBsAAm52BnIwljDaNNgAAsYIBaowmYAPAAP9oAgAAAQOMUY02AAAAAgICjGkAAACD82ADwACY4ACMdAAAIIWOYAPAAJXZAABgA8AA/FUBPgNJjH8hJYyHgYyDwFCU7GADwACY4EqMowEcjKouwABjUQIAAoCMscBQlN6BjLfAUJTsAMAAm5I/TozYjN4AAIPbYAPAAJjgASaM2AGBjODAUJTsYAPAAJjgSozpARyM8C7AAGNSBAAEgIz7wFCU3haNBoCNAcBQlN7AAEf8wACY4oKNFsBQlTwWjSOCjR3AUJU8wABH/MAAmOIAwACbkwbAAJuegZyNO41MjgIAALGEAWqNPGADwAD/aAIAAAEDjViOAgAAAAICAo1hAAAAg/NgA8AAmXIAjWwAACCFjmADwACV2QAAYAPAAPxVAT4DSY13ISWNf4GNe8BQldpgA8AAmXJKjYwBHI2TLsAAY1ECAAKAjZrAUJXMgY2gwFCV2gDAAJuSP06Nso24AACD22ADwACZcgEmjbIBgY26wFCV2mADwACZckqNwwEcjcouwABjUgQABICN1cBQlcwWjeCAjdvAUJXMnNPAAJl0go3pwFCWKhaN9oKN8MBQliqc08AAmXQAwACbkwbAAJufgZyOB44Yjr4AALGFAWqOCGADwAD/aAIAAAEDjiKOvgAAAAICAo4pAAAAg/NgA8AAmWQAjjQAACCFjmADwACV2QAAYAPAAPxVAT4DSY4/ISWOR4GOQ8BQlsRgA8AAmWRKjlIBHI5ZLsAAY1ECAAKAjmDAUJa2gY5mwFCWxADAAJuSP06Odo58AACD22ADwACZZAEmjnYBgY5+wFCWxGADwACZZEqOhwEcjo4uwABjVgIAAhaOnYCOmMBQlraCb8AAmWYWjq+CjqnAUJcUgm/AAJlmAMAAm5UGwACboIGcjsOO1I+iAACxhgFqjsRgA8AA/2gCAAABA47mj6IAAAACAgKO9QAAAIPzYAPAAJlWAI8AAAAghY5gA8AAldkAAGADwAD8VQE+A0mPCyEljxOBjw/AUJegYAPAAJlWSo8mARyPLS7AAGNRAgACgI80wFCXkoGPOsBQl6AAwACbkj9Oj1KPWAAAg9tgA8AAmVYBJo9SAYGPWsBQl6BgA8AAmVZKj2MBHI9qLsAAY1IEAASAj3XAUJeSFo+AgI97wFCXkhvAAJlYgo+JwFCX8BaPloKPkMBQl/AbwACZWADAAJuTBsAAm6GBnI+nj7iQjAAAsYcBao+oYAPAAP9oAgAAAQOPxZCMAAAAAgICj88AAACD82ADwACYxQCP2gAAIIWOYAPAAJXZAABgA8AA/FUBPgNJj+UhJY/tgY/pwFCYiGADwACYxUqP+wEckAIuwABjUQIAAoCQCcBQmHqBkA/AUJiIAMAAm5I/TpAikCgAAIPbYAPAAJjFASaQIgGBkCrAUJiIYAPAAJjFSpAzASIckDouwABjVgIAAhaQSYCQRMBQmHqAvcAAmMcWkFWCkE/AUJjYgL3AAJjHAMAAm5UAHJBmLsAAY1YCAAIWkHWAkHDAUJh6gJbAAJjIFpCCgpB8wFCY2ICWwACYyADAAJuVBsAAm6KBnJCRkKKRfAAAsYgBapCSYAPAAP9oAgAAAQOQuJF8AAAAAgICkMsAAACD82ADwACYtgCQ1gAAIIWOYAPAAJXZAABgA8AA/FUBPgNJkOEhJZDpgZDlwFCZlmADwACYtkqRAAEckQcuwABjUQIAAoCRDsBQmYiBkRTAUJmWAMAAm5I/TpEwkTYAAIPbYAPAAJi2ASaRMAGBkTjAUJmWYAPAAJi2SpFBARyRSC7AAGNXAgACFpFbgJFWwFCZiJ+BwACYuBaRbYKRZ8BQmeafgcAAmLgAwACblgbAAJujgZyRgZGSkgUAALGKAWqRgmADwAD/aAIAAAEDkaCSBQAAAAICApGrAAAAg/NgA8AAmKoAkbYAACCFjmADwACV2QAAYAPAAPxVAT4CSZHBISWRyYGRxcBQmnJgA8AAmKpKkdgBHJHfLsAAY1ECAAKAkebAUJpkgZHswFCacgDAAJuSP0qR9gEpBsAAm6SBnJIKkhuS7QAAsYsBapILYAPAAP9oAgAAAQOSMJLtAAAAAgICkkIAAACD82ADwACYnACSTQAAIIWOYAPAAJXZAABgA8AA/FUBPgNJklghJZJggZJcwFCa/mADwACYnEqSdgEckn0uwABjUQIAAoCShMBQmvCBkorAUJr+AMAAm5I/TpKlkqsAAIPbYAPAAJicASaSpQGBkq3AUJr+YAPAAJicSpK2ARySvS7AAGNXAgACFpLQgJLLwFCa8Ih5wACYnhaS4IKS2sBQm06IecAAmJ4AwACblgbAAJulgZyS8pMDk6UAAIZ2AWqS82ADwAD/aAIAAAEDkwyTpQAAAAICApMSAAAAg/NgA8AAlxoAkx0AACCFjmADwACV2QAAYAPAAPxVAT4DSZMoISWTMIGTLMBQm9pgA8AAlxpKkzoBHJNBLsAAY1ECAAKAk0jAUJvMgZNOwFCb2gDAAJuSP06TXZNjAACD22ADwACXGgEmk10BgZNlwFCb2mADwACXGkqTbgEck3UuwABjUgQABICTgMBQm8wWk4uAk4bAUJvMg9bAAJchgpOQwFCcKhaTnYKTl8BQnCqD1sAAlyEAwACbkwbAAJumgZyTqpO7lIMAALGMAWqTq2ADwAD/aAIAAAEDk8uUgwAAAAICApPYAAAAg/NgA8AAl04Ak+MAACCFjmADwACV2QAAYAPAAPxVAT4DSZPuISWT9oGT8sBQnMRgA8AAl05KlAcBHJQOLsAAY1ECAAKAlBXAUJy2gZQbwFCcxADAAJuSP06UMZQ3AACD22ADwACXTgEmlDEBgZQ5wFCcxGADwACXTkqUQgEclEkuwABjUgQABICUVMBQnLYWlF+AlFrAUJy2sY3AAJdQgpRpwFCdFBaUdoKUcMBQnRSxjcAAl1AAwACbkwbAAJungZyUiJSZlXEAAIXZAWqUiWADwAD/aAIAAAEDlLGVcQAAAAICApTGAAAAg/NgA8AAmIQAlNEAACCFjmADwACV2QAAYAPAAPxVAT4DSZTcISWU5IGU4MBQna5gA8AAmIRKlP0BHJUELsAAY1ECAAKAlQvAUJ2ggZURwFCdrgDAAJuSP06VL5U1AACD22ADwACYhAEmlS8BgZU3wFCdrmADwACYhEqVQAEclUcuwABjVwIAAhaVWoCVVcBQnaCEhsAAmIYWlWeClWHAUJ3+hIbAAJiGAMAAm5YGwACbqIGclXaVh5YAAACxjwFqlXdgA8AA/2gCAAABA5WXlgAAAAACAgKVpAAAAIPzYAPAAJhyAJWvAAAghY5gA8AAldkAAGADwAD8VQE+AkmVuiEllcKBlb7AUJ6KYAPAAJhySpXTARyV2i7AAGNRAgACgJXhwFCefIGV58BQnooAwACbkj9KlfEBKQbAAJupgZyWBZYWluAAALGQAWqWBmADwAD/aAIAAAEDliiW4AAAAAICApY3AAAAg/NgA8AAmJAAlkIAACCFjmADwACV2QAAYAPAAPxVAT4DSZZNISWWVYGWUcBQnxZgA8AAmJBKlmgBHJZvLsAAY1ECAAKAlnbAUJ8IgZZ8wFCfFgDAAJuSP06WlJaaAACD22ADwACYkAEmlpQBgZacwFCfFmADwACYkEqWpQEclqwuwABjUgQABICWt8BQnwgWlsKAlr3AUJ8IgJbAAJiSgpbJwFCfZhaW1oKW0MBQn2aAlsAAmJIAwACbkwbAAJuqgZyW5Zb2l8AAALGRAWqW5mADwAD/aAIAAAEDlwiXwAAAAAICApcXAAAAg/NgA8AAmHoAlyIAACCFjmADwACV2QAAYAPAAPxVAT4DSZctISWXNYGXMcBQoABgA8AAmHpKl0gBHJdPLsAAY1ECAAKAl1bAUJ/ygZdcwFCgAADAAJuSP06XdJd6AACD22ADwACYegEml3QBgZd8wFCgAGADwACYekqXhQEcl4wuwABjUgQABICXl8BQn/IWl6KAl53AUJ/ygJbAAJh8gpepwFCgUBaXtoKXsMBQoFCAlsAAmHwAwACbkwbAAJurgZyXxZfWmJgAALGSAWqXxmADwAD/aAIAAAEDl+aYmAAAAAICApfzAAAAg/NgA8AAmGgAl/4AACCFjmADwACV2QAAYAPAAPxVAT4DSZgJISWYEYGYDcBQoOpgA8AAmGhKmCIBHJgpLsAAY1ECAAKAmDDAUKDcgZg2wFCg6gDAAJuSP06YTJhSAACD22ADwACYaAEmmEwBgZhUwFCg6mADwACYaEqYXQEcmGQuwABjUgQABICYb8BQoNwWmHqAmHXAUKDcgJbAAJhqgpiBwFChOhaYjoKYiMBQoTqAlsAAmGoAwACbkwbAAJusgZyYnZiumXwAALGTAWqYnmADwAD/aAIAAAEDmMGZfAAAAAICApjRAAAAg/NgA8AAmE8AmNwAACCFjmADwACV2QAAYAPAAPxVAT4DSZjnISWY74GY68BQodRgA8AAmE9KmQMBHJkKLsAAY1ECAAKAmRHAUKHGgZkXwFCh1ADAAJuSP06ZMJk2AACD22ADwACYTwEmmTABgZk4wFCh1GADwACYT0qZQQEcmUguwABjUgQABICZU8BQocYWmV6AmVnAUKHGgJbAAJhUgpllwFCiJBaZcoKZbMBQoiSAlsAAmFQAwACbkwbAAJutgZyZgZmSmmAAALGVAWqZgmADwAD/aAIAAAEDmaWaYAAAAAICApm1AAAAg/NgA8AAmEYAmcAAACCFjmADwACV2QAAYAPAAPxVAT4DSZnLISWZ04GZz8BQor5gA8AAmEZKmecBHJnuLsAAY1ECAAKAmfXAUKKwgZn7wFCivgDAAJuSP06aFJoaAACD22ADwACYRgEmmhQBgZocwFCivmADwACYRkqaJQEcmiwuwABjUgQABICaN8BQorAWmkKAmj3AUKKwgJbAAJhLgppJwFCjDhaaVoKaUMBQow6AlsAAmEsAwACbkwbAAJuugZyaZZp2m0YAALGXAWqaZmADwAD/aAIAAAEDmo2bRgAAAAICApqhAAAAg/NgA8AAmFgAmqwAACCFjmADwACV2QAAYAPAAPxVAT4DSZq3ISWav4Gau8BQo6hgA8AAmFhKmtcBHJreLsAAY1ECAAKAmuXAUKOagZrrwFCjqADAAJuSP06bCJsOAACD22ADwACYWAEmmwgBgZsQwFCjqGADwACYWEqbGQEcmyAuwABjVgIAAhabL4CbKsBQo5qAlsAAmF0WmzyCmzbAUKP4gJbAAJhdAMAAm5UGwACbr4Gcm0ubXJxuAACxmAFqm0xgA8AA/2gCAAABA5tknG4AAAACAgKbaQAAAIPzYAPAAJgOAJt0AAAghY5gA8AAldkAAGADwAD8VQE+A0mbfyElm4eBm4PAUKSEYAPAAJgOSpuQARybly7AAGNRAgACgJuewFCkdoGbpMBQpIQAwACbkj9Om7KbuAAAg9tgA8AAmA4BJpuyAYGbusBQpIRgA8AAmA5Km8MBIiIcm8ouwABjVwIAAhab3YCb2MBQpHaD9MAAmBAWm+uCm+XAUKTUg/TAAJgQAMAAm5YAHJv+LsAAY1YCAAIWnA2AnAjAUKR2gm3AAJgRFpwZgpwTwFCk1IJtwACYEQDAAJuVABycKi7AAGNSBAAEgJw1wFCkdhacQICcO8BQpHahisAAmBKCnE/AUKTUFpxcgpxWwFCk1KGKwACYEgDAAJuTBsAAm7CBnJxznISdcgAAsZkBapx0YAPAAP9oAgAAAQOclp1yAAAAAgICnKUAAACD82ADwACX/wCcsAAAIIWOYAPAAJXZAABgA8AA/FUBPgNJnLshJZzDgZy/wFCl0mADwACX/0qc1gEcnN0uwABjUQIAAoCc5MBQpcSBnOrAUKXSAMAAm5I/Tp0CnQgAAIPbYAPAAJf/ASadAgGBnQrAUKXSYAPAAJf/Sp0TASIcnRouwABjVgIAAhadKYCdJMBQpcSAvcAAmAEWnTWCnS/AUKYigL3AAJgBAMAAm5UAHJ1GLsAAY1YCAAIWnVWAnVDAUKXEgm7AAJgCFp1lgp1fwFCmIoJuwACYAgDAAJuVBsAAm7GBnJ13nYieegAAsZoBap14YAPAAP9oAgAAAQOdk556AAAAAgICnaMAAACD82ADwACYLQCdrgAAIIWOYAPAAJXZAABgA8AA/FUBPgNJnbkhJZ3BgZ29wFCm4GADwACYLUqd1QEcndwuwABjUQIAAoCd48BQptKBnenAUKbgAMAAm5I/Tp4CnggAAIPbYAPAAJgtASaeAgGBngrAUKbgYAPAAJgtSp4TASIcnhouwABjVgIAAhaeKYCeJMBQptKFl8AAmC8WnjmCnjPAUKcwhZfAAJgvAMAAm5UAHJ5OLsAAY1YCAAIWnl2AnljAUKbSpVLAAJgwFp5tgp5nwFCnMKVSwACYMADAAJuVBsAAm7KBnJ5/npCfSAAAsZsBap6AYAPAAP9oAgAAAQOenp9IAAAAAgICnqkAAACD82ADwACX7wCetAAAIIWOYAPAAJXZAABgA8AA/FUBPgNJnr8hJZ7HgZ7DwFCn7mADwACX70qe1gEcnt0uwABjUQIAAoCe5MBQp+CBnurAUKfuAMAAm5I/Tp7+nwQAAIPbYAPAAJfvASae/gGBnwbAUKfuYAPAAJfvSp8PARyfFi7AAGNSBAAEgJ8hwFCn4BafLICfJ8BQp+CAvcAAl9CCnzLAUKg+Fp8/gp85wFCoPoC9wACX0ADAAJuTBsAAm7OBnJ9Nn16ghgAAhm8Bap9OYAPAAP9oAgAAAQOfdqCGAAAAAgICn4sAAACD82ADwACX5QCflgAAIIWOYAPAAJXZAABgA8AA/FUBPgNJn6EhJZ+pgZ+lwFCo2GADwACX5UqfwgEcn8kuwABjUQIAAoCf0MBQqMqBn9bAUKjYAMAAm5I/Tp/0n/oAAIPbYAPAAJflASaf9AGBn/zAUKjYYAPAAJflSqAFASIcoAwuwABjUgQABICgF8BQqMoWoCKAoB3AUKjKgL3AAJfQgqAowFCpKBagNYKgL8BQqSiAvcAAl9AAwACbkwAcoEYuwABjUgQABICgUcBQqMoWoFyAoFfAUKjKsLzAAJfngqBpwFCpKBagdoKgcMBQqSiwvMAAl+cAwACbkwbAAJu0gZygi6CcoQAAALGcAWqgjGADwAD/aAIAAAEDoKWhAAAAAAICAqCrAAAAg/NgA8AAl/cAoLYAACCFjmADwACV2QAAYAPAAPxVAT4CSaDBISWgyYGgxcBQqgJgA8AAl/dKoNMBHKDaLsAAY1ECAAKAoOHAUKn0gaDnwFCqAgDAAJuSP0qg8QEpBsAAm7WBnKEFoRah1gAAsZ0BaqEGYAPAAP9oAgAAAQOhJqHWAAAAAgICoTMAAACD82ADwACX2wChPgAAIIWOYAPAAJXZAABgA8AA/FUBPgNJoUkhJaFRgaFNwFCqjmADwACX20qhYgEcoWkuwABjUQIAAoChcMBQqoCBoXbAUKqOAMAAm5I/TqGMoZIAAIPbYAPAAJfbASahjAGBoZTAUKqOYAPAAJfbSqGdARyhpC7AAGNSBAAEgKGvwFCqgBahuoChtcBQqoCAvcAAl9CCocDAUKreFqHNgqHHwFCq3oC9wACX0ADAAJuTBsAAm7aBnKHboeyizAAAsZ4BaqHcYAPAAP9oAgAAAQOh+KLMAAAAAgICogEAAACD82ADwACXvwCiDAAAIIWOYAPAAJXZAABgA8AA/FUBPgNJohchJaIfgaIbwFCreGADwACXv0qiLAEcojMuwABjUQIAAoCiOsBQq2qBokDAUKt4AMAAm5I/TqJSolgAAIPbYAPAAJe/ASaiUgGBolrAUKt4YAPAAJe/SqJjASIcomouwABjUgQABICidcBQq2oWooCAonvAUKtqquDAAJfBgqKEwFCryBaikYKii8BQq8iq4MAAl8EAwACbkwAcoqAuwABjVgIAAhair4CiqsBQq2ofwACXwhaiv4KiucBQq8gfwACXwgDAAJuVBsAAm7eBnKLRouKjvgAAsZ8BaqLSYAPAAP9oAgAAAQOi7aO+AAAAAgICovUAAACD82ADwACXsACjAAAAIIWOYAPAAJXZAABgA8AA/FUBPgNJowshJaMTgaMPwFCskmADwACXsEqjHwEcoyYuwABjUQIAAoCjLcBQrISBozPAUKySAMAAm5I/TqNEo0oAAIPbYAPAAJewASajRAGBo0zAUKySYAPAAJewSqNVASIco1wuwABjUgQABICjZ8BQrIQWo3KAo23AUKyEquDAAJeygqN2wFCs4hajg4KjfcBQrOKq4MAAl7IAwACbkwAco5IuwABjVgIAAhajoYCjnMBQrIQfwACXsxajsYKjq8BQrOIfwACXswDAAJuVBsAAm7iBnKPDo9Sk1gAAsaABaqPEYAPAAP9oAgAAAQOj36TWAAAAAgICo+cAAACD82ADwACXnwCj8gAAIIWOYAPAAJXZAABgA8AA/FUBPgNJo/0hJaQFgaQBwFCtrGADwACXn0qkEQEcpBguwABjUQIAAoCkH8BQrZ6BpCXAUK2sAMAAm5I/TqQ2pDwAAIPbYAPAAJefASakNgGBpD7AUK2sYAPAAJefSqRHASIiHKROLsAAY1YCAAIWpF2ApFjAUK2ehc3AAJeiFqRpgqRjwFCt/IXNwACXogDAAJuVABykei7AAGNSBAAEgKSFwFCtnhakkICki8BQrZ6q4MAAl6GCpJTAUK38FqShgqSbwFCt/KrgwACXoQDAAJuTAByksC7AAGNWAgACFqS/gKS6wFCtnoXPwACXoxakzIKkxsBQrfyFz8AAl6MAwACblQbAAJu5gZyk26TspcAAALGhAWqk3GADwAD/aAIAAAEDpPWlwAAAAAICAqT7AAAAg/NgA8AAl4gApQYAACCFjmADwACV2QAAYAPAAPxVAT4DSaURISWlGYGlFcBQrvpgA8AAl4hKpSMBHKUqLsAAY1ECAAKApTHAUK7sgaU3wFCu+gDAAJuSP06lRqVMAACD22ADwACXiAEmpUYBgaVOwFCu+mADwACXiEqlVwEiHKVeLsAAY1YCAAIWpW2ApWjAUK7sgknAAJeKFqV7gqV1wFCvSoJJwACXigDAAJuVABylji7AAGNXAgACFqWhgKWcwFCu7FvAAJeLFqWygqWswFCvSlvAAJeLAMAAm5YGwACbuoGcpcWl1qamAACxogFqpcZgA8AA/2gCAAABA6XepqYAAAACAgKl4wAAAIPzYAPAAJeXAKXuAAAghY5gA8AAldkAAGADwAD8VQE+A0ml+SElpgGBpf3AULAGYAPAAJeXSqYKARymES7AAGNRAgACgKYYwFCv+IGmHsBQsAYAwACbkj9OpiymMgAAg9tgA8AAl5cBJqYsAYGmNMBQsAZgA8AAl5dKpj0BIhymRC7AAGNWAgACFqZTgKZOwFCv+IJJwACXihamYYKmW8BQsFaCScAAl4oAwACblQAcpnQuwABjVwIAAhamh4CmgsBQr/hbwACXixammIKmksBQsFZbwACXiwDAAJuWBsAAm7uBnKarpryn2gAAsaMBaqasYAPAAP9oAgAAAQOmzKfaAAAAAgICptkAAACD82ADwACXeACm5AAAIIWOYAPAAJXZAABgA8AA/FUBPgNJpu8hJab3gabzwFCxEmADwACXeEqnCAEcpw8uwABjUQIAAoCnFsBQsQSBpxzAULESAMAAm5I/TqcypzgAAIPbYAPAAJd4ASanMgGBpzrAULESYAPAAJd4SqdDASIiHKdKLsAAY1YCAAIWp1mAp1TAULEEhdLAAJd6FqdqgqdkwFCxYoXSwACXegDAAJuVAByngC7AAGNWAgACFqePgKeKwFCxBIGvwACXexanm4KnlcBQsWKBr8AAl3sAwACblQAcp6wuwABjVgIAAhanu4CntsBQsQSF08AAl3wWp8yCp8bAULFihdPAAJd8AMAAm5UGwACbvIGcp9+n8Kl8AACxpAFqp+BgA8AA/2gCAAABA6gLqXwAAAACAgKoIwAAAIPzYAPAAJduAKguAAAghY5gA8AAldkAAGADwAD8VQE+A0moOSElqEGBqD3AULJSYAPAAJduSqhdARyoZC7AAGNRAgACgKhrwFCyRIGoccBQslIAwACbkj9OqJKomAAAg9tgA8AAl24BJqiSAYGomsBQslJgA8AAl25KqKMBIiIiHKiqLsAAY1YCAAIWqLmAqLTAULJEnwvAAJdwFqjMgqjGwFCyop8LwACXcADAAJuVAByo5C7AAGNWAgACFqjzgKjuwFCyRLGmwACXXhapB4KpAcBQsqKxpsAAl14AwACblQAcqSAuwABjUgQABICpK8BQskQWqTaAqTHAULJEquDAAJdfgqk6wFCyohapR4KpQcBQsqKq4MAAl18AwACbkwAcqVYuwABjVgIAAhapZYCpYMBQskSAlsAAl2AWqXKCqWzAULKigJbAAJdgAMAAm5UGwACbvYGcqYGpkqq0AACxpQFqqYJgA8AA/2gCAAABA6mhqrQAAAACAgKprQAAAIPzYAPAAJdcAKm4AAAghY5gA8AAldkAAGADwAD8VQE+A0mpwyElqcuBqcfAULPSYAPAAJdcSqnbARyp4i7AAGNRAgACgKnpwFCzxIGp78BQs9IAwACbkj9OqgSqCgAAg9tgA8AAl1wBJqoEAYGqDMBQs9JgA8AAl1xKqhUBIiIcqhwuwABjVgIAAhaqK4CqJsBQs8SxpsAAl14Wqj+CqjnAULQisabAAJdeAMAAm5UAHKpYLsAAY1IEAASAqmPAULPEFqpugKppwFCzxKrgwACXX4KqcsBQtCIWqn+CqnnAULQiquDAAJdfAMAAm5MAHKqOLsAAY1YCAAIWqp2AqpjAULPEgJbAAJdgFqqqgqqkwFC0IoCWwACXYADAAJuVBsAAm76BnKq5qsqrwAAAsagBaqq6YAPAAP9oAgAAAQOq5qvAAAAAAgICqv8AAACD82ADwACXPwCrCgAAIIWOYAPAAJXZAABgA8AA/FUBPgNJqxUhJasdgasZwFC1IGADwACXP0qrOgEcq0EuwABjUQIAAoCrSMBQtRKBq07AULUgAMAAm5I/Tqtwq3YAAIPbYAPAAJc/ASarcAGBq3jAULUgYAPAAJc/SquBARyriC7AAGNXAgACFqubgKuWwFC1Eq9rwACXQRarr4KrqcBQtXCva8AAl0EAwACblgbAAJu/gZyrxavWrOoAALGqAWqrxmADwAD/aAIAAAEDq+ys6gAAAAICAqv/AAAAg/NgA8AAly8ArAoAACCFjmADwACV2QAAYAPAAPxVAT4DSawVISWsHYGsGcBQtfxgA8AAly9KrDQBHKw7LsAAY1ECAAKArELAULXugaxIwFC1/ADAAJuSP06sZKxqAACD22ADwACXLwEmrGQBgaxswFC1/GADwACXL0qsdQEiHKx8LsAAY1IEAASArIfAULXuFqySgKyNwFC17ojlwACXMYKsnMBQtkwWrKmCrKPAULZMiOXAAJcxAMAAm5MAHKy+LsAAY1cCAAIWrNGArMzAULXuglXAAJcyFqzfgqzZwFC2TIJVwACXMgDAAJuWBsAAm8CBnKzvrQCt9gAAsasBaqzwYAPAAP9oAgAAAQOtDq32AAAAAgICrRkAAACD82ADwACXAwCtJAAAIIWOYAPAAJXZAABgA8AA/FUBPgNJrS8hJa03ga0zwFC3GGADwACXA0qtRgEcrU0uwABjUQIAAoCtVMBQtwqBrVrAULcYAMAAm5I/Tq1urXQAAIPbYAPAAJcDASatbgGBrXbAULcYYAPAAJcDSq1/ASIcrYYuwABjVgIAAhatlYCtkMBQtwqCb8AAlwUWraeCraHAULdogm/AAJcFAMAAm5UAHK2+LsAAY1IEAASArcnAULcKFq3UgK3PwFC3CrGswACXBoKt3cBQt2gWreqCreTAULdosazAAJcGAMAAm5MGwACbwYGcrfuuDK7gAACxrQFqrfxgA8AA/2gCAAABA64hruAAAAACAgKuMwAAAIPzYAPAAJb3AK4+AAAghY5gA8AAldkAAGADwAD8VQE+A0muSSElrlGBrk3AULg0YAPAAJb3Sq5nARyubi7AAGNRAgACgK51wFC4JoGue8BQuDQAwACbkj9OrpaunAAAg9tgA8AAlvcBJq6WAYGunsBQuDRgA8AAlvdKrqcBHK6uLsAAY1IEAASArrnAULgmFq7EgK6/wFC4JoKXwACW+YKuysBQuIQWrteCrtHAULiEgpfAAJb5AMAAm5MGwACbwoGcruWu9q/4AACGOgFqruZgA8AA/2gCAAABA68Lr/gAAAACAgKvHQAAAIPzYAPAAJbqAK8oAAAghY5gA8AAldkAAGADwAD8VQE+A0mvMyElrzuBrzfAULkeYAPAAJbqSq9RARyvWC7AAGNRAgACgK9fwFC5EIGvZcBQuR4AwACbkj9Or4CvhgAAg9tgA8AAluoBJq+AAYGviMBQuR5gA8AAlupKr5EBIhyvmC7AAGNTBAAEgK+jwFC5EBavroCvqcBQuRCZWsAAluyCr7XAULluFq/Cgq+8wFC5bplawACW7ADAAJuUAByv1C7AAGNWAgACFq/jgK/ewFC5EIJtwACW7Rav74Kv6cBQuW6CbcAAlu0AwACblQbAAJvDgZyv/bAOsRQAAIZxAWqv/mADwAD/aAIAAAEDsCaxFAAAAAICArA7AAAAg/NgA8AAlt0AsEYAACCFjmADwACV2QAAYAPAAPxVAT4DSbBRISWwWYGwVcBQujpgA8AAlt1KsHIBHLB5LsAAY1ECAAKAsIDAULosgbCGwFC6OgDAAJuSP06wpLCqAACD22ADwACW3QEmsKQBgbCswFC6OmADwACW3UqwtQEiHLC8LsAAY1YCAAIWsMuAsMbAULosgL3AAJbfFrDXgrDRwFC6ioC9wACW3wDAAJuVAByw6C7AAGNWAgACFrD3gLDywFC6LIJuwACW4BaxB4KxAcBQuoqCbsAAluAAwACblQbAAJvEgZyxGbEqscwAALGuAWqxGmADwAD/aAIAAAEDsTaxzAAAAAICArE/AAAAg/NgA8AAltMAsUoAACCFjmADwACV2QAAYAPAAPxVAT4DSbFVISWxXYGxWcBQu0hgA8AAltNKsWoBHLFxLsAAY1ECAAKAsXjAULs6gbF+wFC7SADAAJuSP06xkLGWAACD22ADwACW0wEmsZABgbGYwFC7SGADwACW00qxoQEcsaguwABjVgIAAhaxt4CxssBQuzqCbcAAlsQWscOCsb3AULuYgm3AAJbEAMAAm5UGwACbxYGcsdGx4rKwAACxrwFqsdJgA8AA/2gCAAABA7HrsrAAAAACAgKx8QAAAIPzYAPAAJbHALH8AAAghY5gA8AAldkAAGADwAD8VQE+A0myByElsg+BsgvAULwkYAPAAJbHSrIZARyyIC7AAGNRAgACgLInwFC8FoGyLcBQvCQAwACbkj9OsjyyQgAAg9tgA8AAlscBJrI8AYGyRMBQvCRgA8AAlsdKsk0BIhyyVC7AAGNWAgACFrJjgLJewFC8FoJvwACWyRaydYKyb8BQvHSCb8AAlskAwACblQAcsowuwABjVgIAAhaym4CylsBQvBaCbcAAlsQWsqeCsqHAULx0gm3AAJbEAMAAm5UGwACbxoGcsrWyxrOUAACxsAFqsrZgA8AA/2gCAAABA7LRs5QAAAACAgKy2QAAAIPzYAPAAJa1ALLkAAAghY5gA8AAldkAAGADwAD8VQE+A0my7yElsveBsvPAUL0yYAPAAJa1SrMDARyzCi7AAGNRAgACgLMRwFC9JIGzF8BQvTIAwACbkj9OsyizLgAAg9tgA8AAlrUBJrMoAYGzMMBQvTJgA8AAlrVKszkBIhyzQC7AAGNWAgACFrNPgLNKwFC9JIPWwACWtxazWoKzVMBQvYKD1sAAlrcAwACblQAcs2ouwABjVwIAAhazfYCzeMBQvSSGSsAAlrgWs4qCs4TAUL2ChkrAAJa4AMAAm5YGwACbx4Gcs5mzqrR+AACGXQFqs5pgA8AA/2gCAAABA7O0tH4AAAACAgKzuwAAAIPzYAPAAJaoALPGAAAghY5gA8AAldkAAGADwAD8VQE+A0mz0SEls9mBs9XAUL5AYAPAAJaoSrPkARyz6y7AAGNRAgACgLPywFC+MoGz+MBQvkAAwACbkj9OtAi0DgAAg9tgA8AAlqgBJrQIAYG0EMBQvkBgA8AAlqhKtBkBIhy0IC7AAGNWAgACFrQvgLQqwFC+Mp8LwACWqha0QoK0PMBQvpCfC8AAlqoAwACblQActFouwABjVgIAAha0aYC0ZMBQvjKCbcAAlqsWtHWCtG/AUL6Qgm3AAJarAMAAm5UGwACbyIGctIO0lLWWAACxsQFqtIRgA8AA/2gCAAABA7SctZYAAAACAgK0oQAAAIPzYAPAAJaaALSsAAAghY5gA8AAldkAAGADwAD8VQE+A0m0tyEltL+BtLvAUL9OYAPAAJaaSrTIARy0zy7AAGNRAgACgLTWwFC/QIG03MBQv04AwACbkj9OtOq08AAAg9tgA8AAlpoBJrTqAYG08sBQv05gA8AAlppKtPsBIiIctQIuwABjVgIAAha1EYC1DMBQv0CCbcAAlpwWtR2CtRfAUL+egm3AAJacAMAAm5UAHLUuLsAAY1YCAAIWtT2AtTjAUL9AsbLAAJadFrVOgrVIwFC/nrGywACWnQDAAJuVABy1ZC7AAGNWAgACFrVzgLVuwFC/QLGzwACWnha1hoK1gMBQv56xs8AAlp4AwACblQbAAJvJgZy1m7WstlIAAIYNAWq1nGADwAD/aAIAAAEDtba2UgAAAAICArW9AAAAg/NgA8AAlo4AtcgAACCFjmADwACV2QAAYAPAAPxVAT4DSbXTISW124G118BQwI5gA8AAlo5KteYBHLXtLsAAY1ECAAKAtfTAUMCAgbX6wFDAjgDAAJuSP062CrYQAACD22ADwACWjgEmtgoBgbYSwFDAjmADwACWjkq2GwEctiIuwABjVgIAAha2MYC2LMBQwICCb8AAlpAWtkOCtj3AUMDegm/AAJaQAMAAm5UGwACbyoGctle2aLcIAACxtAFqtlhgA8AA/2gCAAABA7ZztwgAAAACAgK2ewAAAIPzYAPAAJaCALaGAAAghY5gA8AAldkAAGADwAD8VQE+A0m2kSEltpmBtpXAUMFqYAPAAJaCSralARy2rC7AAGNRAgACgLazwFDBXIG2ucBQwWoAwACbkj9Otsq20AAAg9tgA8AAloIBJrbKAYG20sBQwWpgA8AAloJKttsBHLbiLsAAY1YCAAIWtvGAtuzAUMFcgJbAAJaEFrb+grb4wFDBuoCWwACWhADAAJuVBsAAm8uBnLcNtx631AAAsbUBarcOYAPAAP9oAgAAAQO3KLfUAAAAAgICty8AAACD82ADwACWdgC3OgAAIIWOYAPAAJXZAABgA8AA/FUBPgNJt0UhJbdNgbdJwFDCRmADwACWdkq3WAEct18uwABjUQIAAoC3ZsBQwjiBt2zAUMJGAMAAm5I/Trd8t4IAAIPbYAPAAJZ2ASa3fAGBt4TAUMJGYAPAAJZ2SreNARy3lC7AAGNTBAAEgLefwFDCOBa3qoC3pcBQwjixtsAAlniCt7fAUMKWFrfEgre+wFDClrG2wACWeADAAJuUBsAAm8yBnLfZt+q4rAAAsbcBarfaYAPAAP9oAgAAAQO397isAAAAAgICuAEAAACD82ADwACWagC4DAAAIIWOYAPAAJXZAABgA8AA/FUBPgNJuBchJbgfgbgbwFDDMGADwACWakq4LQEcuDQuwABjUQIAAoC4O8BQwyKBuEHAUMMwAMAAm5I/TrhUuFoAAIPbYAPAAJZqASa4VAGBuFzAUMMwYAPAAJZqSrhlARy4bC7AAGNTBAAEgLh3wFDDIha4goC4fcBQwyKxtsAAlmyCuI/AUMOAFricgriWwFDDgLG2wACWbADAAJuUBsAAm82BnLixuMK5hgAAsbgBariyYAPAAP9oAgAAAQO4ybmGAAAAAgICuM0AAACD82ADwACWXgC42AAAIIWOYAPAAJXZAABgA8AA/FUBPgNJuOMhJbjrgbjnwFDEGmADwACWXkq48wEcuPouwABjUQIAAoC5AcBQxAyBuQfAUMQaAMAAm5I/TrkUuRoAAIPbYAPAAJZeASa5FAGBuRzAUMQaYAPAAJZeSrklASIcuSwuwABjVgIAAha5O4C5NsBQxAyF0sAAlmAWuUyCuUbAUMRqhdLAAJZgAMAAm5UAHLliLsAAY1YCAAIWuXGAuWzAUMQMgm3AAJY0Frl9grl3wFDEaoJtwACWNADAAJuVBsAAm86BnLmLuZy6bAAAsbkBarmMYAPAAP9oAgAAAQO5prpsAAAAAgICua0AAACD82ADwACWUgC5uAAAIIWOYAPAAJXZAABgA8AA/FUBPgNJucMhJbnLgbnHwFDFKGADwACWUkq51gEcud0uwABjUQIAAoC55MBQxRqBuerAUMUoAMAAm5I/Trn6ugAAAIPbYAPAAJZSASa5+gGBugLAUMUoYAPAAJZSSroLASIcuhIuwABjVgIAAha6IYC6HMBQxRqF0sAAllQWujKCuizAUMV4hdLAAJZUAMAAm5UAHLpILsAAY1YCAAIWuleAulLAUMUagm3AAJY0FrpjgrpdwFDFeIJtwACWNADAAJuVBsAAm8+BnLpxuoK7iAAAsboBarpyYAPAAP9oAgAAAQO6jLuIAAAAAgICupMAAACD82ADwACWRQC6ngAAIIWOYAPAAJXZAABgA8AA/FUBPgNJuqkhJbqxgbqtwFDGNmADwACWRUq6vAEcusMuwABjUQIAAoC6ysBQxiiButDAUMY2AMAAm5I/TrrguuYAAIPbYAPAAJZFASa64AGBuujAUMY2YAPAAJZFSrrxASIiHLr4LsAAY1YCAAIWuweAuwLAUMYosabAAJZHFrsbgrsVwFDGhrGmwACWRwDAAJuVABy7NC7AAGNWAgACFrtDgLs+wFDGKIPFwACWSBa7UYK7S8BQxoaDxcAAlkgAwACblQAcu2QuwABjVgIAAha7c4C7bsBQxiiCbcAAljQWu3+Cu3nAUMaGgm3AAJY0AMAAm5UGwACb0IGcu427nrzCAACxuwFqu45gA8AA/2gCAAABA7umvMIAAAACAgK7qwAAAIPzYAPAAJY3ALu2AAAghY5gA8AAldkAAGADwAD8VQE+A0m7wSElu8mBu8XAUMd2YAPAAJY3SrvSARy72S7AAGNRAgACgLvgwFDHaIG75sBQx3YAwACbkj9Ou/S7+gAAg9tgA8AAljcBJrv0AYG7/MBQx3ZgA8AAljdKvAUBIiIiHLwMLsAAY1YCAAIWvBuAvBbAUMdoqtzAAJY5FrwngrwhwFDHxqrcwACWOQDAAJuVABy8OC7AAGNWAgACFrxHgLxCwFDHaIXSwACWOha8WIK8UsBQx8aF0sAAljoAwACblQAcvG4uwABjVgIAAha8fYC8eMBQx2isx8AAljsWvIuCvIXAUMfGrMfAAJY7AMAAm5UAHLyeLsAAY1YCAAIWvK2AvKjAUMdogm3AAJY0Fry5gryzwFDHxoJtwACWNADAAJuVBsAAm9GBnLzHvNi90gAAsbwBarzIYAPAAP9oAgAAAQO8373SAAAAAgICvOMAAACD82ADwACWIQC87gAAIIWOYAPAAJXZAABgA8AA/FUBPgNJvPkhJb0Bgbz9wFDI6GADwACWIUq9CQEcvRAuwABjUQIAAoC9F8BQyNqBvR3AUMjoAMAAm5I/Tr0qvTAAAIPbYAPAAJYhASa9KgGBvTLAUMjoYAPAAJYhSr07ASIiHL1CLsAAY1YCAAIWvVGAvUzAUMjahdLAAJYjFr1igr1cwFDJOIXSwACWIwDAAJuVABy9eC7AAGNWAgACFr2HgL2CwFDI2oGvwACWJBa9k4K9jcBQyTiBr8AAliQAwACblQAcvaQuwABjVgIAAha9s4C9rsBQyNqF08AAliUWvcSCvb7AUMk4hdPAAJYlAMAAm5UGwACb0oGcvde96L5qAACGNAFqvdhgA8AA/2gCAAABA737vmoAAAACAgK+CwAAAIPzYAPAAJYXAL4WAAAghY5gA8AAldkAAGADwAD8VQE+Akm+ISElvimBviXAUMooYAPAAJYXSr49ARy+RC7AAGNRAgACgL5LwFDKGoG+UcBQyigAwACbkj9KvlsBKQbAAJvTgZy+b76Av14AAIYrAWq+cGADwAD/aAIAAAEDvpi/XgAAAAICAr6tAAAAg/NgA8AAlgsAvrgAACCFjmADwACV2QAAYAPAAPxVAT4DSb7DISW+y4G+x8BQyrRgA8AAlgtKvuQBHL7rLsAAY1ECAAKAvvLAUMqmgb74wFDKtADAAJuSP06/Fr8cAACD22ADwACWCwEmvxYBgb8ewFDKtGADwACWC0q/JwEcvy4uwABjVgIAAha/PYC/OMBQyqaCb8AAlg0Wv0+Cv0nAUMsEgm/AAJYNAMAAm5UGwACb1IGcv2O/dMAAQB4AAIYvAWq/ZGADwAD/aAIAAAEDv37AAEAeAAAAAgICv4UAAACD82ADwACV/gC/kAAAIIWOYAPAAJXZAABgA8AA/FUBPgNJv5shJb+jgb+fwFDLlGADwACV/kq/rgEcv7UuwABjUQIAAoC/vMBQy4aBv8LAUMuUAMAAm5I/Tr/Sv9gAAIPbYAPAAJX+ASa/0gGBv9rAUMuUYAPAAJX+Sr/jARy/6i7AAGNXAgACFr/9gL/4wFDLhoYtwACWABbAAEAPgsAAQAnAUMvkhi3AAJYAAMAAm5YAAFCLLABQi3cAUIv3AFCMewBQjWEAUI8yAFCQDgBQkPwAUJHqAFCS2ABQk8YAUJS0AFCVogBQlowAUJdoAFCYUABQmV4AUJo6AFCaxgBQm6IAUJyMAFCddgBQnlIAUJ7eAFCfyABQoLIAUKGcAFCihgBQo3AAUKRMAFClmgBQpqgAUKe2AFCooABQqcoAUKpWAFCrQABQrFoAUK10AFCuwgBQr84AULDaAFCyGgBQs5oAULToAFC1xABQtuAAULf8AFC45gBQugIAULsQAFC77ABQvPoAUL4IAFC/FgBQwFYAUMEyAFDCDgBQwvgAUMPiAFDE8ABQxf4AUMc+AFDIsABQyfAAUMp8AFDLWABQzDwAAABDAAIEwACUrYGbguKDCQTAAGNaAGADwACbDwEfgvjAAJsZAAAAAATAAJSugZub2ZvvBoKFAGADwACZfgFqm+RgA8AAmX7AASMhDAbAAJSwgZvAAEQ4wABERsAARG4AAYPxAAAAAQPAAERMwABEbgAAAAEBAcAARFQAAACAlmADwAEAAgAAYAPAAJh6AUrAAEReARzAAERhasAARF5gA8AAmX7AASMhg/EBAAGAwABEaMBQzcQAwACZjwbAAJSxgZvAAERwwABEfsAARNwAAcAAUlgAAAABA8AARIfAAETcAAAAAgEBwABEjQAAAIC9YAPAAJcaAAHAAESUAAAAmAhbAWrAAESfYAPAAPxVAGADwACYegE+AUrAAESrARzAAES1asAARLJgA8AAmX7AASMhwABSWAIAAYDAAES/wFDONQGYCIHAAETQwFDORsAAmZMGwACUsoGbwABE38AARO3AAEUdAAHAAFNXAAAAAQPAAET3wABFHQAAAAEBAcAARP8AAACAlmADwAEAAgAAYAPAAJh6AUrAAEUJARzAAEUMasAARQlgA8AAmX7AASMhwABTVwEAAYDAAEUXwFDOzADAAJmQBsAAlLOBm8AARR/AAEUxwABFlgABwABTZAAAAAEDwABFPcAARZYAAAACAgLAAEVQAAAAg2FdA8AA/n0BYAPAAJhgAMAARV4AAACBsWADwACYYAAAXQPAAP59AWADwACYYAE+AUrAAEVtARzAAEV3asAARXRgA8AAmX7AASMhwABTZAIAAoDAAEWEwFDPP4HAAEWKwFDPVgDAAJmSBsAAlLSBm8AARZnAAEWtwABGMAABwABTYwAAAAEDwABFv8AARjAAAAACAQHAAEXSAAAAhIZdA8AA/n0BYAPAAJhgAAHAAEXeAAAAwABiH1sBasAARelgA8AA/FUAYAPAAJiEAT4BSsAARfUBHMAARf9qwABF/GADwACZfsABIyHAAFNjAgABgMAARhLAUM/bAcAAYh+BwABGJMBQz/PAAJmRBsAAlLWBm8AARjPAAEZBwABGZgABwABS/wAAAAEDwABGR8AARmYAAAABAQHAAEZMAAAAgJZgA8AA/zIAAGADwACYkAFKwABGVgEcwABGWWrAAEZWYAPAAJl+wAEjIcAAUv8BAAGAwABGYMBQ0H0AwACZlAbAAJS2gZvAAEZowABGecAARqoAAcAAYiAAAAABA8AARoHAAEaqAAAAAQEBwABGkAAAAINhXQPAAP59AWADwAD+GwAAYAPAAJicAUrAAEaZARzAAEacasAARplgA8AAmX7AASMhwABiIAEAAYDAAEalwFDQ8ADAAJmWBsAAlLeBm8AARqzAAEa9wABG9wABwABiIQAAAAEDwABGyMAARvcAAAABAQHAAEbaAAAAg2Fd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BABQ4RwAUOTQAFDlkgAAAAQAUOWVAFDmfgAAAAEAAgbAAJwNwABjZIGeAAAAAAAAAwLAAJwugZ6lNqU7r80LtAcAAAFgAcAA/2gAACsEwACcMIGepTulOwknAGADwAD+GwAEwACcMoGepTulOwkowACcDQBgA8ABAAIABMAAnDOBnqU7pTsGKQBdA8AA/r8BYAPAAJwuAWoAXQPAAP6/AWADwACcLsABWY0EwACcNIGepUmlSQbAAGNlAGADwACcLgFqAGADwACcLsABL7oEwACcNYGepVqlWgbAAGNmAGADwACcLgFqAGADwACcLsABL9MEwACcNoGepWulawbAAGNnAGADwACcLgFqAGADwACcLsABL+wEwACcN4GepXqlegbAAGNoAGADwACcLgFqAGADwACcLsABMAUEwACcOIGepYqligbAAGNpAGADwACcLgFqAGADwACcLsABMB4EwACcOYGepZqlmgbAAGNqAGADwACcLgFqAGADwACcLsABMDgEwACcOoGepaqlqgbAAGNrAGADwACcLgFqAGADwACcLsABMFIEwACcO4GepbqlugbAAGNsAGADwACcLgFqAGADwACcLsABMGwEwACcPIGepcqlygbAAGNtAGADwACcLgFqAGADwACcLsABMIgEwACcPYGepdql2gbAAGNuAGADwACcLgFqAGADwACcLsABMKIEwACcPoGepeyl7AbAAGNvAGADwACcLgFqAGADwACcLsABMLwEwACcP4Gepful+wbAAGNwAGADwACcLgFqAGADwACcLsABMNYEwACcQIGephimGAbAAGNxAGADwACcLgFqAGADwACcLsABMPIEwACcQYGepjemNwbAAGNyAGADwACcLgFqAGADwACcLsABMQ4EwACcQoGeplKmUgbAAGNzAGADwACcLgFqAGADwACcLsABMSgEwACcQ4GepmimaAbAAGN0AGADwACcLgFqAGADwACcLsABMUQEwACcRIGeps2mzQbAAGN1AGADwACcLgFqAGADwACcLsABMWAEwACcRYGepymnKQbAAGN2AGADwACcLgFqAGADwACcLsABMXoEwACcRoGep7KnsgbAAGN3AGADwACcLgFqAGADwACcLsABMZYEwACcR4Gep+Cn4AbAAGN4AGADwACcLgFqAGADwACcLsABMbIEwACcSIGeqBioGAbAAGN5AGADwACcLgFqAGADwACcLsABMc4EwACcSYGeqRqpGgbAAGN6AGADwACcLgFqAGADwACcLsABMeoEwACcSoGeqZipmAbAAGN7AGADwACcLgFqAGADwACcLsABMgYEwACcS4GeqhSqFAbAAGN8AGADwACcLgFqAGADwACcLsABMiIEwACcTIGeqpeqlwbAAGN9AGADwACcLgFqAGADwACcLsABMj4EwACcTYGeqyKrIgbAAGN+AGADwACcLgFqAGADwACcLsABMloEwACcToGeq6qrqgbAAGN/AGADwACcLgFqAGADwACcLsABMnYEwACcT4Geq/mr+QbAAGOAAGADwACcLgFqAGADwACcLsABMpIEwACcUIGerG2sbQbAAGOBAGADwACcLgFqAGADwACcLsABMq4EwACcUYGerMqsygbAAGOCAGADwACcLgFqAGADwACcLsABMzgEwACcUoGerVOtUwbAAGODAGADwACcLgFqAGADwACcLsABMsoEwACcU4GeraqtqgbAAGOEAGADwACcLgFqAGADwACcLsABMuYEwACcVIGergCuAAbAAGOFAGADwACcLgFqAGADwACcLsABMwIEwACcVYGerlquWgbAAGOGAGADwACcLgFqAGADwACcLsABMxwEwACcVoGerqCuoAbAAGOHAGADwACcLgFqAGADwACcLsABM1IEwACcV4Gertuu2wbAAGOIAGADwACcLgFqAGADwACcLsABM2wEwACcWIGerxWvFQbAAGOJAGADwACcLgFqAGADwACcLsABM4gEwACcWYGer0yvTAbAAGOKAGADwACcLgFqAGADwACcLsABM6IEwACcWoGer4avhgbAAGOLAGADwACcLgFqAGADwACcLsABM74EwACcW4Ger7+vvwbAAGOMAGADwACcLgFqAGADwACcLsABM9oBBcAAnF+BnqU7pTuvzQEAAAOlO6/NAAAAAgICpTsAAAQnYAPAAP4bAKU7AAAEKGADwAEAAgAAYAPAAJwuAT8DCADAAJwwgADAUOzyCADAAJwygQDAUOz/CQAAwAD/fgAAAAABBsAAnF2BnqU7pTuvzQAAIwAAAAEDpTuvzQAAAAAAAABgA8ABAAIBSgABDwAuwACcMgAAUO06AFDtawAAAAECwACcYIGer9Cv1b2MC7QIAAABYAHAAP9oAAAR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AAAAAQEBmRYAAACD82ADwACXlwAAYAPAAGh+AT4BSplgAWqZe2ADwABofsAA+2UGwACcr4GfmYeZp51FAACxoAFqmYhgA8AA/2gCAAABA5mynUUAAAABAQGZvQAAAIPzYAPAAJefAABgA8AAaH4BPgNOmd2Z4gAAhc1gA8AAaH4BHJnkLprxAQABFpnvgJnqwFEGiYXNwACXogDAAJyjTpoOmhQAAIXPYAPAAGh+ARyaFi6a8QEAARaaIYCaHMBRBomFz8AAl6MAwACco0eaLRaaOoCaNcBRBomq4MAAl6EEE5r2apr2YAPAAQACwACdppsGapsGYAPAAQACwACdrJsWapsWYAPAAQACwACdqZsmapsmYAPAAQACwACdoZs2aps2YAPAAQACwACdo5tGaptGYAPAAQACwACdnptXaptXYAPAAQACwACdm5toaptoYAPAAQACwAC4Bpt6apt6YAPAAQACwACdjZuKapuKYAPAAQACwACdh5uaapuaYAPAAQACwACdj5urapurYAPAAQACwACdipu8apu8YAPAAQACwACdgpvNapvNYAPAAQACwAC2zJvfapvfYAPAAQACwACdhJvwapvwYAPAAQACwAC0CJwCapwCYAPAAQACwACdmJwSapwSYAPAAQACwACdlZwiapwiYAPAAQACwACdkgA+AUqcLwEenDbAAJyhAgACgZw/wFEGooKcRcBRBtAAAZxZapxZYAPAAQACgWsAPgFKnGYBHpxtwACcoQIAAoGcdsBRBqKCnHzAUQbQAAKckGqckGADwAEAAsAAnTKcoWqcoWADwAEAAsAAnTUAPgFKnK8BHpy2wACcogIAAoGcvcBRBqIenMPAAJyhAgACgZzMwFEGooKc0sBRBtAAAAKc52qc52ADwAEAAsABI+ydAGqdAGADwAEAAsAAp28BPgFKnR0Bap04YAPAAGh+wAD7ZQbAAJywgZ+dSp1qnc4AAIYNAWqdS2ADwAD/aAIAAAEDnXSdzgAAAAEBAZ1+AAAAg/NgA8AAlo4AAGADwABofgE+AUqdigEenZHAAJyhAgACHJ2aLprxAQABFp2lgJ2gwFEJK4JvwACWkADAAJyjap3GYAPAAGh+wAD7ZQAGwACcsYGfndOd85+FAACxnwFqndRgA8AA/2gCAAABA53+n4UAAAABAQGeCQAAAIPzYAPAAJew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PgFKwABGoQEewABGqMAAnmgDAAMWwABGvYHAAEa0wFIYUqVAwAB0eIDAAEbKwFIYRBbAAEbQLpKBwACeZMAAnukABsAAnvGBqMAARt/AAEbwwABH8wAAwABROgFqwABG4GADwAD/aAIAAAEDwABG/cAAR/MAAAABAQHAAEcNAAAAq99gA8AAdHMAAGADwAD8VQE+AknAAEeRIRbAAEedFsAAR5YuwABkccAAnmTAAJ7srOC+MD4BSsAAR7MBKj9KwABHywEdwABH2MAAUToBAAGAwABH5sBSGOIAwACejAAAUhXoAFIWQABSGAgAUhiqAFIZRwAAAAQCwACe9IGowABH+MAAR/7AAEpSA8AAZHIAAAFgAcAAnsUAAAEEwACe94GowABIcsAASHcJkoHAAJ5kAGADwABkWQABBcAAnwCBqMAASHzAAEh8wABJGgAAAAPAAEiRwABJGgAAAAMDA8AASKYAAACxxmADv0UAwABI0AAAAJZ7YAO+OgDAAEjeAAAEkoFgA8AAZFkAAGADwACe9AE/AggBwACe94IAwFIZ5AkAwABI88AAnuUCAAKAwABI/cBSGciBwABJEsBSGdYAAwbAAJ76gajAAEg2wABIScAASFsBAMAAZHPAAJ5kAAAAAQPAAEhRwABIWwAAAAAAAABgA746AUrAAEhUASbAAEhUARbAAEhULsAAU43AAJ5kwACeyGADvjoGwACe/IGowABJH8AASTnAAEmcAADAAGRrAWrAAEkgYAPAAP9oAgAAAQPAAElLwABJnAAAAAEBAcAASVsAAACr32ADwAB0cwAAYAO/OgE+AUrAAElrARzAAElyLsAAZGzAAJ5kAgACFsAASYYuwABkc8AAnmTAAJ76gMAASY/AUhq7AMAAntgGwACe/oGowABJocAASbvAAEpQAADAAGRuwACeZAFqwABJomADwAD/aAIAAAEDwABJ0cAASlAAAAACAgLAAEnnAAAArWpgA786AMAASfwAAACr32ADwAB0cwAAYAO/OgE+AUrAAEoMAR7AAEoTwACeaAMAAxbAAEoogcAASh/AUhtUpUDAAHR4gMAASjXAUhtGFsAASkEWwABKOy6SgcAAnmTAAJ73hVXAAGRbAAAAUhorAFIagwBSGwoAUhu3AAAAAwLAAJ8BgajAAEpVwABKW8AATFMDwABkdAAAAWABwACe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ARzAAK4BFsAArfuAwACt8sBSZWuFhcAAdH3AAFCFAQABgcAArhnAUmWJAMAAoyg9HMAArjCCwACuKcBSZay6owEAAS4AwACegUnAAK5MIRzAAK5aFsAArlAuW8AAn2pIAQABKwDAAKIoPgE9HMAArnUWwACuay5bwACfaoP9AQABNMAArn0DwACufcAArpwAAAABAQHAAK5+AAAAgVRgA8AAnmkAAFwBSsAArocBHMAAroyBwACuh8BSZlW6owEAAS4AwACegQDAAKIqPz0dwACur8AAZFcBAAGAwACuyMBSZWsAwACejQbAAJ+VgajAAK7awACu7cAArysAACMBasAArttgA8AA/2gCAAABA8AArvXAAK8rAAAAAAAAAGADwAEAAgFKwACu+wEkwACvKwYnwABkiBbAAK8HLqQlwACfcSfAAFiWFsAArx8WwACvFi6Fl8AAn4uClMAAnm8ngNkWwACvJi6ClMAAnm8GwACfloGowACvMMAArzzAAK+lAACEUgFqwACvMWADwAD/aAIAAAEDwACvQsAAr6UAAAABAQHAAK9aAAAAh1BdA8AAoKQBWwAAWwE+AUrAAK9pARzAAK94gMAAr3DAUmdjwABkoAEAAS4AwACgtAbAAJ+XgajAAK+qwACvu8AAsPoAAMAAUToBasAAr6tgA8AA/2gCAAABA8AAr8jAALD6AAAAAQEBwACv2AAAAKvfYAPAAHRzAABgA8AA/FUBPgFKwACv6AEiIiIWwACv+BbAAK/vLoWXwACfi8AAZEzAAJ51ABzAALAdFsAAsAwuwABkkcAAnmTAAJ+KlosBAAE0wACwIwPAALAjwACwgQAAAAEBAcAAsDEAAACWe2ADviUAAGADwAD8VQFKwACwSQEWwACweRzAALBYFsAAsFKAwACwScBSZ9OFhcAAdH3AAFCFAQABgcAAsHDAUmhAAMAAoyjAAGRMwACe0QDAAP6QACIcwACwmRbAALCPLlvAAJ9qSAEAASsAwACiKAEcwACwrhbAALCkLlvAAJ9qlosBAAE0wACwtAPAALC0wACwywAAAAEBAcAAsLUAAACBVGADwACeaQAAYAPAAPxVAUrAALC+ARbAALDDgcAAsL7AUmjiwABkTMAAnnUAwACiKwAdwACw38AAUToBAAGAwACw7cBSZ9MAwACejAAAUkdAAFJKLABSSngA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2XIAAAABAQHAANkzAAAAh1BdA8AAoKQBWwAAWwE+AUrAANlCARzAANlRgMAA2UnAUox0wABkxAEAAS4AwACgrQbAAKAZgajAANl3wADZkcAA28EAAMAAQioBasAA2XhgA8AA/2gCAAABA8AA2ZzAANvBAAAAAQEBwADZrAAAAKvfYAPAAHRzAABgA786AT4ETsAA2dDAANnkAACxxmADv0UBFsAA2e+AwADZ5sBSjOSxxsAAdHpOwADaFsAA2hsAAK1qYAO/OgEWwADaHS6ClMAAnm9JwADaJyIhHMAA2kCBwADaLMBSjP2irAEAARbAANpGLoKUwACebwC/mQEhHMAA2oMcwADaa4HAANpXwFKM/baJAQABFsAA2n0ugpTAAJ5vAL+bSAEAARbAANqSFsAA2oYumzvAAKAUgpTAAJ5vAMAA/3U+AUrAANqgARzAANq7gcAA2qfAUoz9togEAAQcwADa6YHAANrVwFKM/baVAQABFsAA2vsuwABQ+8AAoBUAv6UcwADbKIHAANsUwFKM/baWAQABFsAA2zouwABQ+8AAoBUAv6YcwADbZ4HAANtTwFKM/baXAQABFsAA23wuwABQ+8AAoBUAv6cWwADboRbAANuVLps7wACgFIKUwACebwC/mj9KwADbsgGCwADbucBSjSMGwACgGoGowADbxsAA2+DAANwRAADAAGRWAWrAANvHYAPAAP9oAgAAAQPAANvowADcEQAAAAEBAcAA2/gAAACr32ADwAB0cwAAYAO/OgFKwADcBQEWwADcBS7AAFD7wACgFQbAAKAbgajAANwWwADcJ8AA3JQAAMAAUToBasAA3BdgA8AA/2gCAAABA8AA3DTAANyUAAAAAQEBwADcRAAAAKvfYAPAAHRzAABgA8AA/FUBPgFKwADcVAEiFsAA3GcWwADcWy6bO8AAoBTAAGRMwACedQAdwADcecAAUToBAAGAwADch8BSjv0AwACejAbAAKAcgajAANyZwADcqsAA3P8AALSuAWrAANyaYAPAAP9oAgAAAQPAANyxwADc/wAAAAAAAABcAT4DPR3AANzAtK4AAAAAwACekD0cwADc2xbAANzPLps7wACgFLSuAAAAAMAAnpA9F8AA3OouwABkt8AAnmQrwACghQAAUovkAFKMPgBSjKwAUo5jAFKOxQBSj1IAUo/NAAAABgLA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ngBOobKhuQAAgklgA8AARtABHKHZFqHLFqHDLoQmwACg1MAAVM/AAHy9wABVGwEAAAGlwoKh9cBS2W7AAKWATqIaoiYAALurYAPAAEbQATWiNAAAAQBgA8AASlQBH6I0wABKZQIAAoOiQcBS2ccWol4WokkuwABU7MAAoMPAAKDYtkS/UgA1AAAAAQBbAReid4SidcBS2hSlwoKii8BS2W7AAEbThADAUtoUPRyiqhaioi6EJsAAoNRWAQABhKKuwFLaBADAAH1kPRyiyBaiwC6EJsAAoNShLAEAATWi0QAAAQBgA8AATA8BH6LRwABMHgQABICi/MBS2VOEowbAUtoEg6MTwFLZxxajMBajGy7AAFTswACgw8AAoNie0r9HADUAAAABAFsBF6NFhaNDwFLaoaXCgqNZwFLZbsAARtOFAMBS2qEAwAB83kqjcQEco4AWo3guhCbAAKDUoS8AAAAAwAB83wbAAKDngaqjjqObpy0AAMAAVsEAAAABA6O7py0AAAADAgOjzAAAAIKUYAPAAGPLAKPfAAAApcFgA74lAKQHAAAApcJgA8AAQzQBagBgA8AA/yV5AGADwABG0AE+B0AhFqQugKQpwFLbTKQJwABj1qQopDwAQBak5ICk38BS20y0dcAAY9Ok36TzAE6lCKUSAACdoGADwABj8wEmpQgBgKUUwFLbTGADwABj806lMaU4AACCVV0DwAD+vwFgA8AARtABMaVIYAPAAEbQAEalUKWDpV4AAAAfYAPAAGPLABaldIOlasBS27WFOMAAY/Y+AT0cpZKEpYvAUtvWVgEAARylli7AAFU/AwAChaWqwFLb+4GltMBS21oBpcKCpeDAUttmwACg6ADAAP7QTqYMphsAAMAAUvhgA8AARtABNaYhAAABAGADwABMLAEfpiHAAEw7BAAEaqZVYAPAAEwgwAD8wRymhxamdBamZy62xcAAoMPAAKDXpVnAAE6LtBkBAAEWpp2DppPAUtu1lnvAAGP1ALxdhKavwFLb1ham1Bamvy7AAFTswACgw8AAoNie0r9HADUAAAABAFsBF6bphabnwFLcaKXCgqb9wFLbZsAARtOFAMBS3GhKpxQBhacbwFLcVgbAAKDogaqnMqc/q+wAAMAAVT8AAAABA6dSq+wAAAADAgKnYwAAAB9gA8AAY8sAp3oAAAClwWADviUAAaeiAAAApcJgA8AAQzQBagBgA8AA/yV5YAPAAEbQAT4JSae8FqfQFqfIFqfALoQmwACg1HrAAHzBgriBVj4BSqfqARyn8S7AAFU0AwACgKgLwFLdL4GoFcBS3TwBpcKCqEHAUt1JwACg6T89iKhfwFLdLxaoc4CoasBS3S+1IMAAY81JqIIWqI+AqIbAUt0vwABHT8AAY88+AUqozwEcqOQWqN4WqNYuhCbAAKDUpIDAAHyiuf8BAAEWqPQutsXAAKDDwACg1wDAAEYGP0mpDhapG4CpEsBS3S+kCcAAY9Y+AUqpMwEcqTouwABWvgMAAiapUwGAqVPAUt0vYAPAAGQZgaldwFLdPAGlwoKpicBS3UnAAKDlP06pu6nCAACCVV0DwAD+vwFgA8AARtABManSYAPAAEbQAD0cqeOAqdrAUt0vwABHUwEAATSp9wOp96rkAAAAAQEBqgkAAACCcGADwABkGQAAYAPAAP8lAT4BPRyqrIOqpcBS3mFWAQABHKqwLsAAVT8CAAKEqsTAUt6hgarOwFLdPADAAKDoAMAA/tAAwABj3U6q+Kr/AACBdmADwABG0AE1qwUAAAEAYAPAAEwsAR+rBcAATDsEAARqqzlgA8AATCDAAPyqgKtLwFLdL4OrXcBS3mEWq4IWq20uwABU7MAAoMPAAKDYntK/RwA1AAAAAQBbARerl4SrlcBS3wGlwoKrq8BS3UnAAEbThADAUt8BPRyryharwi6EJsAAoNRWAQABhKvOwFLe8QDAAH1kSqvbAYSr4sBS3vEGwACg6YGqq/Gr/q9mAADAAFU0AAAAAQOsF69mAAAAAwICrCgAAAAfYAPAAGPLAKw/AAAApcFgA74lAAGsZwAAAKXCYAPAAEM0AWoAYAPAAP8leWADwABG0AE+Bj2IrIHAUt+7FqyVgKyMwFLfu7UgwABjzUmspSEWrLOArKrAUt+7vQnAAGPZPgNOrN+s4wAAvBVgA8AARtABNazlAAABAGADwABMfQEfrOXAAEyHAgACgKzvwFLfuxatDhas+S7AAFTswACgw8AAoNie0r9HADUAAAABAFsBF60lg60jwFLgNKXCgq05wFLf1cAARtODAMBS4DQ9HK1aFq1SLoQmwACg1FYBAAGDrV7AUuAkAMAAfWRKrWoBg61xwFLgJD9Orc6t4AAAwABk/mADwACg7gEcreouwABk/8AAoMMDAAKArgPAUt+7ga4NwFLfyAGlwoKuO8BS39XAAKDfTq5hrmUAALwVYAPAAEbQATWuZwAAAQBgA8AATJEBH65nwABMnAQABBaujIOuesBS4LqCb8AAoPAWrrKDrqDAUuC6wABbZcAAoPEfrsXAAIeiAQABgK7awFLfuwAWrwIWru0uwABU7MAAoMPAAKDYntK/RwA1AAAAAQBbARevF4SvFcBS4QelwoKvK8BS39XAAEbThADAUuEHPRyvShavQi6EJsAAoNRWAQABhK9OwFLg9wDAAH1kSq9YAYSvX8BS4PcGwACg34Gqr2uvjsAAQagAAMAAZP/AAKDDAAAAAQOvpsAAQagAAAADAgKvtwAAAIKUYAPAAGPLAK/KAAAAgmpgA74lAAGv6wAAAKXCYAPAAEM0AWoAYAPAAP8leWADwACg7gE+C0AWsBGAsAzAUuHivQnAAGPZsAywJgBOsXmxkAAAwABlAGADwAD8VQEqTrGrAAAAurxgA8AAY/MATrHUsd8AAJrqXQPAAP+zAWADwABkGQEeseHAAMMhAAFgA8AAZBkAAE+x7bHyAAABwABlAWEDAWADwABkGVwAA7IFtwYAAAABAQGyFwAAAIKUYAPAAGQZAABcAT4DTrI9AAAAwABYpmADwACgxABJslclsngWsmgWsmCHslvAUuKflnvAAGQbtba+IWADvhM+Aj0VspLAUuKzCByypy7AAFcqAQABgbLBwFLh8ADAAKDkPYyy0sBS4kccsw8Wsu8WsuIutsXAAKDDwACg16VZwABOi7QZAQABJrMoARazKBazIIezG8BS4p+We8AAZBu1tr4hYAO+EwC8XT4BPRWzUcBS4rMIarN+YAPAAKDEwAFesUezlxSzn8BS4rMIAAQBs9pqs9pgA8AAoMTAAV6xAD4CPRyz+oWz78BS4lZWAQABh7P+wFLinwDAAP/ASrQPAAG0PGq0PGADwACgxMABXsoAPgNJtFUhHLRggbRZwFLh8EgBAAEWtGsWtGMuhCbAAKDUwABU0sAAfMMAwAD/dT4CPRy1o4W1mMBS4lZWAQABh7WnwFLinwDAAP/ASrW6AD89i7XYwFLiNClKtgEAAbYuarYuYAPAAKDEwAFemAA+Aj2LtkLAUuI0KUq2awAAAT4BPRy2nxa2lha2ji6EJsAAoNSlLsAAfMKlwwIAAha2wYe2vMBS4p+We8AAZBsnwABk/AC24z0ctxKAtw3AUuHiwABHUwEAAYa3JsBS4oAAwABj3U63TgAAAICJYAPAAEbQAE63eAAAAMAAW2VgA8AAh38ASbeIg7eMwFLiND4ETre5t8AAAIJJYAPAAEbQARy34ha31Ba3zC6EJsAAoNTAAFTPwAB8vcAAVRsBAAABpcKCt/7AUuH9wAClgD2PuJ3AUuSLNbi1AAABAGADwABMiAEfuLXAAEyQAgACFLjKwFLktwkAFrjnFrjSLsAAVOzAAKDDwACg2J7Sv0cANQAAAAEAWwEXuQIUuQDAUuT8CgClwoK5FsBS4f3AAEbTFADAUuT8CgA9HLk3FrkvLoQmwACg1FYBAAGHuTvAUuSLAMAAfWQ9FblPwFLkmggfuVvAAIeUAQAAAcAAUzyEuYPAUuJHP0a50roBuegAAACA7WADwABkGQCFufXAUuJWPgNOug+6IQAAwABGcGADvl4BHLpDFro1FrotLoQmwACg1MAAVM/AAHy9wABVKAEAARS6WsBS5aAJAADAAKWCTrp5uoAAALEcYAPAAEbQARy6oxa6iha6gi6EJsAAoNTAAFTPwAB8vcAARWUCAAEUuq3AUuW4CgABpcKCutPAUuH9wAClf0m67hy6/oe68sBS5ItIAQABKwDAAP91PgI9j7sRwFLkixS7H8BS5fULAD0Vuy/AUuSaCB+7O8AAh4wBAAEUu13AUuWgCQAASbt2JbuEFLt6wFLkmggAYAPAAIeGPgZOu9a76QAAwABlAmADwACHhgEmu9YBFLvrwFLkmggAYAPAAIeGTr04vUcAAMAAZQNgA8AARtABNb1JAAABAGADwABMkQEfvUnAAEycBAAEh71gwFLkixS9ecBS5JoIAB+9kMAAh7gBAAABhYUxvbFgA8AAY8sBFr3FFL2ywFLmmQwAgnDAAIeIFr3yFr3dLsAAVOzAAKDDwACg2J7Sv0cANQAAAAEAWwEXvgsUvgnAUubQDQClwoK+H8BS4f3AAEbTFADAUubQDQA9HL5CFr46LoQmwACg1FYBAAEUvkbAUua+DQAAwAB9ZD2Pvl/AUuSLH755wABMpQMAAxS+g8BS5r4NABS+k8BS5fULABa+sBa+my7AAFTswACgw8AAoNie0r9HAD0cvs4WvsYuhCbAAKDUVgEAAYe+0sBS5IsAwAB9ZD0VvujAUuSaCB++9MAAh5QBAAABwABHjjG/KGADwABkGQIWvzwUvynAUuaZDACCcMAAh4gUv0bAUuWgCQBJv2Alv24Uv2TAUuSaCABgA8AAh40+BE6/tr/EAADAAGUEYAPAAIeNASa/tgEUv8bAUuSaCABgA8AAh409j7/ZwFLkix+/88AATKUDAAOHv/3AUuSLFMAAQArAUuX1CwAWwABAJxbAAEASLsAAVOzAAKDDwACg2J7Sv0cAPRzAAEBFFsAAQD0uhCbAAKDUVgEAAYfAAEBJwFLkiwDAAH1kPRXAAEBfwFLkmggfwABAa8AAh5QCAAACwABTPBbAAECuFMAAQKDAUugwDADAAFM8wACHj8AAR45SA04AAAABAF0DwAD+vwFgA8AAZBkBMQBgA8AAZBkARgAAAAAAAQBgA8AAZBkAFsAAQOEUwABA08BS6DAMAMAAR47AAIeQPRwAFADAUujzDQBWAQABFADAUukSDgAAwAD+0D0cABQAwFLo8w0AVgEAARTAAEDrwFLloAkAAMAA/tAUAMBS6PMNAD4BPRzAAEEgFsAAQRcWwABBDy6EJsAAoNSlLsAAfMKlwwIAAhbAAEE4FMAAQS7AUuWgCQCWe8AAZBsnwABf7wC240rAAEFjAR/AAEFqwACg8wIAAofAAEGNwFLkixTAAEGawFLkmggAAAbAAKDqgarAAEJdwABCasAASZ4AAMAAVc8AAAABA8AAQn3AAEmeAAAABAMDwABCkgAAAJ8fYAPAAEbQAMAAQqUAAACClGADwABjywDAAEKvAAAAgmtgA8AA/hsAAcAAQs4AAAClwmADwABDNAFqAGADwAD/JXlgA8AARtABPgRJwABC6BbAAEL8FsAAQvQWwABC7C6EJsAAoNR6wAB8wYK4gVY+AUrAAEMWARzAAEMdLsAAZQUEAAKAwABDKsBS6g6BwABDNMBS6h4ChfUcwABDVoLAAENRwFLqLkgBAAFqwABDaWADwAD+GwkAwAD/P6XCg8AAQ5LAUuo/wACg6z9JwABDsRzAAEO6gcAAQ7XAUuoeSAEAASsAwAD/dUrAAEPDAYDAAEPKwFLqDj89icAAQ9jAUuoeFsAAQ+SBwABD38BS6h61IMAAY81JwABD8yIWwABD/IHAAEP3wFLqHrR1wABj0wAhFsAARBWBwABEEMBS6h6zg8AAY84+BU7AAEQ3wABERQAAurxgA8AAY/MBJsAARDcBgcAAREfAUuoeYAPAAGPzTsAARGHAAERpAACbSGADvzoBHMAARIoWwABEdS7AAFTswACgw8AAoNi2WAEAARbAAESuhMAARKDAUutglnvAAGP1AL9mTsAARMvAAETbAADAAFbAYAPAAEbQARzAAETdLsAAVsEDAAOBwABFCcBS6h4WwABFFxbAAEUPLoQmwACg1KXBwAB83IPAAEUmwFLqPwDAAKDnPRzAAEVIFsAARUAuhCbAAKDUVgEAAYbAAEVMwFLrzgDAAH1kSsAARWQBNcAARW8AAAEAYAPAAErkAR/AAEVvwABK/wUABYHAAEWhwFLqHoLAAEWnwFLqLoXAAEWtwFLriYDAAEW2wFLqDobAAEXAwFLrzgA1AAAAAQBbARfAAEXbh8AARdnAUuxJpcKDwABF78BS6j/AAEbThwDAUuxJScAARg0WwABGFoHAAEYRwFLqHqQJwABj1j4DTsAARjzAAEZEAACbSGADvzoBFsAARk+AwABGRsBS6g66i8AARxBOwABGc8AARoAAAKl6YAPAAEbQARzAAEaMLsAAVr4CAAImwABGpQGBwABGpcBS6h5gA8AAZBkWwABGsxbAAEarLoQmwACg1KXBwAB83ADAAKDlSsAARskBNcAARtQAAAEAYAPAAErkAR/AAEbUwABK/wUABYHAAEcGwFLqHoLAAEcMwFLqLoTAAEcSwFLs2YDAAEcbwFLqDoXAAEclwFLs/wA1AAAAAQBbARfAAEc9hsAARzvAUu1XpcKDwABHUcBS6j/AAEbThgDAUu1XScAAR28iFsAAR3iBwABHc8BS6h66t8AAY9UBFsAAR4+BwABHisBS6h66ucAAY9g+A07AAEewwABHvAAAwABlBmADwABG0AEcwABHyC7AAFU/AgACgcAAR9zAUuoeFsAAR+oWwABH4i6EJsAAoNSlwcAAfNwAwACg6E7AAEhQwABIXAAAwABlB2ADvzoBFsAASGeAwABIXsBS6g66i8AARxBKwABIfgE1wABIiQAAAQBgA8AASuQBH8AASInAAEr/BQAFgcAASLvAUuoegsAASMHAUuouhcAASMfAUu5FgMAASNTAUuoOhMAASN7AUu39ADUAAAABAFsBF8AASPWGwABI88BS7nOlwoPAAEkJwFLqP8AARtOGAMBS7nM+AUrAAEkvATXAAEk/AAABAGADwABG0AEcwABJP4DAAEk2wFLqDrq2AwADFsAASUsutsXAAKDDwACg14HAAElZwFLqHoLAAElfwFLqLgDAAEdaNQAAAAEAWwEXwABJb4TAAEltwFLu8KXCg8AASYPAUuo/wABG04QAwFLu8AbAAKDrgarAAEpMwABKWcAATcgAAMAAZQUAAAABA8AASmXAAE3IAAAABAICwABKcwAAAJ8fYAPAAEbQAMAASoYAAACClGADwABjywACwABKmAAAAIX1YAPAAPxVAWoAYAPAAP8lecAASrcAAAClwmADwABDNAFqAGADwAD/JXlgA8AARtABPglJwABK0RzAAEragcAAStXAUu+gSAEAASsAwAD/dUrAAErjAYDAAErqwFLvkD89icAASvjAUu+gFsAASwSBwABK/8BS76C1IMAAY81JwABLFBbAAEsdgcAASxjAUu+gh53AAGPQSsAASygBgMAASy/AUu+QP0nAAEs9FsAAS0aBwABLQcBS76C6uMAAY9JKwABLTgGAwABLVcBS75A/ScAAS2McwABLbIHAAEtnwFLvoEgBAAEWwABLixbAAEt8FsAAS28utsXAAKDDwACg17RZwABOjYYouasAwAD/dUrAAEuXAYDAAEuewFLvkD9OwABLusAAS8YAAMAAZQZgA8AARtABHMAAS8guwABVNAMAAoHAAEvrwFLvoBbAAEv5FsAAS/EuhCbAAKDUpcHAAHzcAaXCg8AATCPAUu/KwACg6U7AAExWwABMYgAArsBgA789ARzAAEyBFsAATGwuwABU7MAAoMPAAKDYtlECAAGBwABMlsBS76ABhoApv2FOwABMv8AATM8AALqLYAO/OgEcwABM5hbAAEzRLsAAVOzAAKDDwACg2JdYAgACFsAATQWAwABM/MBS75C6i8AARxAWwABNIoXAAE0WwFLxLbY/vz8Av5FKwABNNgE1wABNPQAAAQBgA8AATEsBH8AATT3AAExcBgAGgMAATU/AUu+QhMAATVnAUvDahcAATWbAUvEtgcAATXPAUu+ggsAATXnAUu+xhsAATYbAUvFqADUAAAABAFsBF8AATZ+HwABNncBS8celwoPAAE2zwFLvysAARtOHAMBS8ccAAFLKwABSywMAUstKAFLMpQBSzXEAUs9IAFLQ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A8AAaJYBHMAAsSwWwACxIC64tMAAoPTAAKETwABQlgEAAYDAALFVwFNyrgDAAHPcPRzAALF2FsAAsWIuwABlEcAAoPTAAKEEVgEAARbAALGJhsAAsXrAU3RntWPAAGidAMAAeiFKwACxnQEcwACxrhbAALGkLsAAZQrAAKD0wACg+sAAUOQBAAGGwACxw8BTdGcAwAB0nUnAALHfHMAAseiFwACx48BTcwJIAQABasAAsfdgA8ABAALAAPGDAMABABE+A07AALIawACyKQAAsEVgA8AAaJYBHMAAskEWwACyNS64tMAAoPTAAKETwABQlQEAAYDAALJjwFNyrgDAAHPbPRzAALKEFsAAsnAuwABlEcAAoPTAAKEEVgEAARbAALKXhsAAsojAU3U5tWPAAGidAMAAeiFKwACyqwEcwACyvBbAALKyLsAAZQrAAKD0wACg+sAAUOQBAAGGwACy0cBTdTkAwAB0nUnAALLtHMAAsvaFwACy8cBTcwJIAQABasAAswVgA8ABAALAAPGMAMABABE+AUrAALMfARbAALMtFsAAsyYuwABSp8AAoPTAAKD7hdjAAKMVPgI9HMAAs2AWwACzTC7AAGURwACg9MAAoQS4nAAAAADAAHofSsAAs3sBFsAAs4kWwACzgi7AAFKnwACg9MAAoPue0sAAoxcGwAChaoGrwACzo8AAs7/AALgeAACFwgFqwACzpGADwAD/aAIAAAEDwACz1MAAuB4AAAABAQHAALPpAAAAg/NgA4X7AABgA8AAnmkBPgVOwAC0AsAAtAkAAIJqYAO+JQEcwAC0FxbAALQLLri0wACg9MAAoROcaAEAARbAALQmgMAAtCHAU3aqgkmGAgDAAHPRTsAAtELAALRMAABbYAPAAKIeARzAALROLsAAZSoBAAEWwAC0ZIDAALRfwFN2qluF/gDAAKFcTsAAtH3AALSGAAClUmADwABMuAEcwAC0lBbAALSILri0wACg9MAAoRPAAFCQAQABgMAAtKDAU3aqAMAAc9BOwAC0ucAAtL4AAK1qYAO/OgEcwAC0zBbAALTALsAARYvAAKD0wACg/7fEAQABgMAAtNfAU3aqAMAAQpdJwAC04hzAALUCFsAAtPMWwAC05i62xcAAoPTAAKD5tFnAAIEpswABAAGBwAC1DMBTdsMAuo4+AUrAALUdARzAALUk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AAAAAQEBwADTTAAAAIPzYAOGOQAAYAPAAJ5pAT4DScAA01gcwADTahbAANNhgMAA01zAU5Cahc6GPEgBAAEnmCEAwAEAET4OTsAA04bAANOSAADAAGUyYAPAAKGtARbAANOULsAAZRnAAKD0wAChED0XwADToi7AAGUZwACg9B/AANOvwAChzgEAAYHAANPEwFOQ3QDAAKEZPRzAANPYLsAAZTMBAAEWwADT7YDAANPowFOQmoXNhjsAwAChdE7AANQFwADUHAAAwABlfmADwAChrQEWwADUHi7AAGUbwACg9MAAoRFOwADURMAA1FwAAMAAZX9gA8AAoa0BFsAA1F4uwABlHMAAoPTAAKESPRfAANR6LsAAZRnAAKD0H8AA1IfAAKHOAQABgsAA1JzAU5FTAMAAoRk9HMAA1LsuwABlMwEAARbAANTQgMAA1MvAU5Cahc+GPQDAAKF0TsAA1OnAANUBAADAAGWAYAPAAKGtARbAANUDLsAAZRvAAKD0wAChEU7AANUpwADVQgAAwABlgWADwAChrQEWwADVRC7AAGUcwACg9MAAoRJOwADVa8AA1X4AAMAAZYJgA8AAoa0BhMAA1YDAU5HxTsAA1arAANW+AADAAGWDYAPAAKGtARzAANXxH8AA1cTAAKHOAQABgcAA1dnAU5DdAMAAZTUDAAMWwADWES7AAGUKwACg9MAAoPqDwADWHMBTkXuFwADWNcBTkhkAwAChw07AANZhwADWZwAAwABcSmADwAChrQEcwADWdYHAANZpwFOQ3cAAZTUDAAMWwADWkS7AAGUKwACg9MAAoPqGwADWnMBTkkGHwADWsMBTkmAAwAChwz0cwADWzC7AAGUdwACg9AMAAxTAANbbwFOSwQgAhsAA1uLAU5JBh8AA1vbAU5JgAMAAoRxKwADXEgEWwADXIBbAANcZLsAAUqfAAKD0wACg+4W9wACjC0nAANc1HMAA10cWwADXPoDAANc5wFOQmoXOhjxIAQABJ5giAMABABE+Dk7AANdjwADXbwAAwABlMmADwAChrQEWwADXcS7AAGUZwACg9MAAoRA9F8AA138uwABlGcAAoPQfwADXjMAAoc4BAAGBwADXocBTk5YAwAChGT0cwADXtS7AAGUzAQABFsAA18qAwADXxcBTkJqFzYY7AMAAoXROwADX4sAA1/kAAMAAZX5gA8AAoa0BFsAA1/suwABlG8AAoPTAAKERTsAA2CHAANg5AADAAGV/YAPAAKGtARbAANg7LsAAZRzAAKD0wAChEj0XwADYVy7AAGUZwACg9B/AANhkwAChzgEAAYPAANh5wFOUNADAAKEZPRzAANiZLsAAZTMBAAEWwADYroDAANipwFOQmoXPhj0AwAChdE7AANjHwADY3wAAwABlgGADwAChrQEWwADY4S7AAGUbwACg9MAAoRFOwADZB8AA2SAAAMAAZYFgA8AAoa0BFsAA2SIuwABlHMAAoPTAAKESTsAA2UnAANlcAADAAGWCYAPAAKGtARzAANmPH8AA2WLAAKHOAQABgcAA2XfAU5OWAMAAZTUDAAMWwADZry7AAGUKwACg9MAAoPqCwADZusBTlAyEwADZ0sBTlKoAwAChw07AANn9wADaEQAAwABlg2ADwAChrQGFwADaE8BTlNJOwADaPsAA2kkAAMAAZYRgA8AAoa0BHMAA2leBwADaS8BTk5bAAGU1AwADFsAA2nMuwABlCsAAoPTAAKD6hsAA2n7AU5T6h8AA2pLAU5VbAMAAocM9HMAA2q4uwABlHcAAoPQDAAMUwADavcBTlXoIAIbAANrJwFOU+ofAANrdwFOVWwDAAKEcSsAA2vkBFsAA2wcWwADbAC7AAFKnwACg9MAAoPuFvcAAows/PR7AANsbtv0CAAJqwADbJGADtw/AAMecJMAA23gDJ8AAZYUWwADbbIDAANtnwFOQmoXOhjwngUsASsAA238BKwbAAKF5gavAANuTwADbr8AA3ncAAIXVAWrAANuUYAPAAP9oAgAAAQPAANvJwADedwAAAAEBAcAA2+MAAACD82ADhkYAAGADwACeaQE+DE7AANv6wADcBgAAwABlMmADwAChrQEWwADcCC7AAGUZwACg9MAAoRA9HMAA3BQuwABlMwEAARbAANwpgMAA3CTAU5abhdKGSADAAKF0TsAA3ETAANxXAADAAGWCYAPAAKGtARbAANxZLsAAZRvAAKD0wAChEU7AANx9wADckQAAwABlg2ADwAChrQEWwADcky7AAGUcwACg9MAAoRI9F8AA3K0uwABlGcAAoPQfwADcusAAoc4BAAGCwADcz8BTlwEAwAChGU7AANz4wADdAgAAwABlhmADwACeaQEcwADdBC6a8QEAARbA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ARbAARqugMABGqjAU8wmwABNhsAAoPTAAKGwAB7AARrIwACiFQEAARbAARrsgMABGubAU8wmwABlmMAAoPTAAKGxACsCwABlLCrAAGU2KgXAAKHQgavAARzgwAEc4MABHYsAwABlnAADwAEc9cABHYsAAAABAQHAAR0BAAAAg9tgA8AAoa0AAGADwAChrQE/BAgAwAChsB/AAR0ewACiUwEAARbAAR09gMABHTfAU8zPwABNhsAAoPTAAKGwAAgAwAChshbAAR1hgMABHVvAU8zPwABlmcAAoPTAAKGyCADAAKGxFsABHYSAwAEdfsBTzM/AAGWYwACg9MAAobEJAcABHODAAP9+AAAAAAXAAKHRgavAAR2QwAEdkMABHgkAlacAA8ABHaPAAR4JAAAABQMDwAEdqQAABMAATYZgA8AAoj4AwAEdtwAABMAAZZhgA8AAog8AwAEdxQAABMAAZZlgA8AAoj4AAsABHdwAAATAAGUsYAPAAPxVAWoAYAPAAP8lecABHfQAAATAAGU2YAPAAPxVAWoAYAPAAP8leWADwAChrQE/BggBwAChsIAAwFPNiggBwAChsYEAwFPNnAgBwAChsoIAwFPNrggBwAChs4MAwFPNwQgBwAChtIQAwFPN3AkBwAEdkMAA/34AAAAAEwbAAKG2gavAARtCwAEbSsABHNsEAaMlAAAAAQPAARtdwAEc2wAAAAICAsABG2kAAACD22ADwAChrQDAARt8AAAAg/NgA4JTAABgA8AAoa0BPgROwAEblsABG50AAMAAVbxgA8AAoj4BH8ABG6PAAKJSAgACFsABG8CAwAEbusBTznXAAE2GwACg9MAAobCBwAEbycBTzoUATsABG+3AARv4AADAAGWdYAPAAKIPAR7AARwGwACiFQEAARbAARwqgMABHCTAU851wABlmMAAoPTAAKGxAE7AARxGwAEcTwAAoyVgA8AAoj4BgsABHFHAU86eSsABHF0BH8ABHGjAAKHRBQADgsABHHzAU86eg8ABHITAU87khMABHJDAU88hAsAAZSwqwABlNioGwAChuIGrwAEeDsABHhfAAR5XAQDAAGUxAAAAAQPAAR4ewAEeVwAAAAAAAABgA8AA/FUBPgFKwAEeJAEiFsABHisuwABlLMAAobMBFsABHkAuwABlNsAAobQGwAChuYGrwAEeXMABHmXAAR6sAQDAAGUiAAAAAQPAAR5zwAEerAAAAAAAAABgA8AA/FUBPgFKwAEeeQEiHMABHogWwAEegC7AAGWYwACg9MAAobFIAQABKwDAAP91ARbAAR6bFsABHpMuwABlmMAAoPTAAKGxwABlIsAAohIGwAChu4GrwAEescABHrbAAR7xAADAAGUjAAAAAQPAAR7HwAEe8QAAAAAAAABcAT4BPTUAAAABAGADwACiDwEWwAEe0C7AAGWYwACg9MAAobEjHMABHtmAAMBT0IBIAQABKwAAKxfAAR7ZgADAU9CAwABlIinAAKISAWADwAD8VQbAAKG8gavAAR72wAEe+8ABH0IAAMAAZU8AAAABA8ABHxnAAR9CAAAAAAAAAFwBPgE9NQAAAAEAYAPAAKIPARbAAR8iLsAAZZjAAKD0wAChsSMcwAEfK4AAwFPRAEgBAAErAAArF8ABHyuAAMBT0QDAAGWeKcAAohMBYAPAAPxVBsAAob2Bq8ABH0fAAR9XwAEfnQAAmR8AAAABA8ABH2DAAR+dAAAAAQEBwAEfbQAAAISbYAO+NwAAYAPAAJ5pAT4BSsABH3oBHMABH4kWwAEfgS7AAGWYwACg9MAAobGZHwEAAYDAAR+TwFPRdwDAAKIYBsAAob6Bq8ABH6LAAR+nwAEgBgAAwABlKQAAAAEDwAEfssABIAYAAAACAgLAAR+/AAAAhJtgA743AMABH9YAAACClGADwACeaQAAXAE+AT0cwAEf6hbAAR/iLsAAZZjAAKD0wAChscAAZSkCAAKAwAEf9sBT0euBwAEf/cBT0fkAwACiFwbAAKG/gavAASALwAEgG8ABITIAAMAARWUAAAABA8ABICTAASEyAAAAAwMDwAEgNAAAAKvfYAPAAHRzAMABIFwAAADAAGUYXQPAAP7xAmADvl5gA743AMABIHQAAACfM2ADvl4AAGADwACeaQE+Ak7AASCNwAEgkwAAhJtgA743ARzAASClgcABIJXAU9KASwEAAYLAASCmwFPSmwDAAP8FScABILIhHMABILyDwAEgtsBT0rRIAQABKwDAAP91PgFKwAEgzQEcwAEg3YDAASDUwFPScMAAUOIBAAGDwAEg6sBT0rQAwAB0mz4BSsABIQUBHMABIRQWwAEhDC7AAE2GwACg9MAAobCwMQIAAoDAASEYwFPScILAASEiwFPSmwDAAKJDBsAAocCBq8ABITfAASE8wAEjVQAAwABVQgAAAAEDwAEhR8ABI1UAAAAHBgbAASFeAAAAq99gA8AAdHMAwAEhhgAAAMAAZRhdA8AA/vECYAO+XmADvjcAwAEhpAAAAJ8zYAO+XgDAASHBAAAAgpRgA8AAnmkAwAEh1QAAAIPzYAOCTADAASHqAAAAhdRgA8AAY8sAAcABIf0AAAC2+FsBasABIglgA8AA/FV3XAE+BEAhHMABIiKDwAEiHcBT085IAQABKwDAAP91wAEiHcABIikAPYvAASIwwFPTzhzAASJGFsABIkCAwAEiN8BT05WFhcAAdH3AAGVcAwACg8ABIlHAU9POhcABIlfAU9PsAbb4JsABIm8BhsABIm/AU9P9YAPAAPxVwACjJU7AASKNwAEikwAAhJtgA743ARzAASKlgcABIpXAU9OlSwEAAYLAASKmwFPTwADAAP8FScABIrIhHMABIryHwAEitsBT1JRIAQABKwDAAP91PgE9HMABItaAwAEizcBT05XAAFDVAgACh8ABIujAU9SUg8ABIu/AU9POAMAAdJE+AT0cwAEjERbAASMJLsAATYbAAKD0wAChsKzHBgAGgMABIxjAU9OVgsABIyLAU9PAg8ABIynAU9POhMABIy/AU9PehcABIzXAU9PsFsABI0EuwABlmcAAoPTAAKGyAMAAokQGwAChwYGrwAEjWsABI1/AASSzAADAAGV3AAAAAQPAASNqwAEkswAAAAUFBcABI4EAAACr32ADwAB0cwDAASOpAAAAwABlGF0DwAD+8QJgA75eYAO+NwDAASPHAAAAnzNgA75eAMABI90AAACClGADwABjywDAASPxAAAAg/NgA4JMAABcAT4CTsABJA3AASQZAADAAGVoYAPAAJ5pARzAASQbLsAARWUDAAOAwAEkJcBT1aGBwAEkL8BT1bGCwAEkQcBT1cwAwAChvz0cwAEkTS7AAFVCBwAGgMABJFnAU9WhgcABJGPAU9WxgsABJHXAU9XMhcABJHzAU9X+hMABJInAU9Xqg8ABJI/AU9XaAbb4KsAAocAGwAChwoGrwAEkuMABJMPAASZVAADAAGWNAAAAAQPAASTMwAEmVQAAAAICAsABJNwAAACr32ADwAB0cwDAASTxAAAAg9tgA8AAoa0AAGADwAChrQE+BT0XwAEk/i7AAGUsKsAAobM9F8ABJR0uwABlNirAAKG0ScABJT8WwAElSYHAASVDwFPWyMAAZTHAAKG4PgFKwAElWQEuP07AASV+wAElhQAAwABVvGADwACiPgEcwAEljxbAASWHLsAATYbAAKD0wAChsMAAZY0CAAKAwAElmcBT1rgWwAElqYHAASWjwFPWyMAATYbAAKD0wAChsADAAKJFSsABJbcBH8ABJcLAAKHRBQADgsABJdbAU9coFsABJd4uwABlmMAAoPTAAKGxFsABJecuwABlmcAAoPTAAKGyAsAAZSwWwAEmDS7AAGUswAChs8AAZTYWwAEmPS7AAGU2wAChtAbAAKHDgavAASZawAEmZcABKlIAAMAAZTUAAAABA8ABJnXAASpSAAAAAwMDwAEmjAAAAKvfYAPAAHRzAMABJqEAAADAAGWfYAPAAKGtAMABJrgAAADAAGWgYAPAAKGtAABgA8AAoa0BPgY9F8ABJsouwABlLCIWwAEm8YHAASbmwFPYI8AAZSzAAKGzABbAAScRgsABJwbAU9g1wABlLMAAobPAAKGzPRfAAScoLsAAZTYiFsABJ1GBwAEnRsBT2CPAAGU2wAChtAAWwAEnc4LAASdowFPYNcAAZTbAAKG0wAChtE7AASebAAAAwABVvGADwACiPgBJwAEnpxbAASerLsAAZTHAAKG4PgE9i8ABJ7vAU9jMFsABJ8QuwABNhsAAoPTAAKGwScABJ9gWwAEn54HAASfcwFPYI8AAZTHAAKG4PgE9i8ABJ/fAU9jMHMABKAgWwAEoAC7AAE2GwACg9MAAobDAAGWNAwACgMABKBLAU9gTFsABKCeCwAEoHMBT2DXAAE2GwACg9MAAobABwABloSnAAKJFScABKEsWwAEoWoLAAShPwFPYNcAAZTHAAKG4PgE9i8ABKGrAU9jMHMABKHsWwAEocy7AAE2GwACg9MAAobDAAGWNAwACgMABKIXAU9gTFsABKJqBwAEoj8BT2CPAAE2GwACg9MAAobABwABloSnAAKJFPgE9i8ABKMbAU9jMHMABKNcWwAEozy7AAE2GwACg9MAAobDAAGU1AwADgMABKPPAU9gTFsABKQiBwAEo/cBT2CPAAE2GwACg9MAAobAWwAEpHILAASkRwFPYNcAATYbAAKD0wAChsADAAKJGTsABKUrAASlVAADAAGWdYAPAAKIPATUAAAABAGADwACiDwEWwAEpVy7AAGWYwACg9MAAobEjHMABKWCEAMBT2nZIAQABKwAAKxzAASlghADAU9p2wABlNQMAA4DAASl6wFPYExbAASmPgcABKYTAU9gjwABlmMAAoPTAAKGxFsABKaOCwAEpmMBT2DXAAGWYwACg9MAAobEAwACiGgFgA8AAog9KwAEpsQEfwAEpvMAAodEFAAODwAEp0MBT2MyEwAEp2MBT2mAWwAEp5C7AAGWZwACg9MAAobICwABlLBbAASoKLsAAZSzAAKGzwABlNhbAASo6LsAAZTbAAKG0BsAAocSBq8ABKlfAASpiwAEtbgAAwABlOAAAAAEDwAEqcsABLW4AAAADAgLAASqCAAAAq99gA8AAdHMAwAEqnQAAAMAAZaJdA8AA/r8BYAPAAKGtAAHAASqxAAAAwABlQWADwAD8VQFqwAEqwGADwAD8VXdgA8AAoa0BPgZOwAEq0sABKuMAAMAAZaNgA8AA/FUBKUbAASrvwAErEMABKv8AAACCUmADwAChrQCBwAErCMBT25o+AT2LwAErGMBT29wig8ABKyvAU9vcABbAAStFhMABKz/AU9v7wABlLMAAobM9isABK2PAU9u0IoLAAStzwFPbtAAhFsABK4UuwABlLMAAobNOwAErq8ABK7IAAMAAVbxgA8AAoj4BHMABK7wWwAErtC7AAE2GwACg9MAAobDAAGU4AwACgMABK9bAU9uKHMABLD8cwAEr/IHAASvowFPbmoGlAQABNMABLAIDwAEsAsABLDAAAAABAQHAASwOAAAAglJgA8AAoa0AAGADwAD8VQFKwAEsGAEhFsABLB+EwAEsGcBT3M7AAGUswAChswDAAP6JgKsBAWADwACiPgE0wAEsQwPAASxDwAEsZgAAAAEBAcABLE8AAACCUmADwAChrQAAYAPAAKI+AUrAASxZARbAASxfhMABLFnAU90nwABNhsAAoPTAAKGwAMAA/ogBwABlQYLAASyAwFPbtMAAokc9F8ABLJQuwABlLCKDwAEsqMBT29wAIYLAASy9wFPbtMAAobNKwAEs0AEfwAEs28AAodEFAAOEwAEs78BT3GYWwAEs9y7AAGWYwACg9MAAobEWwAEtAC7AAGWZwACg9MAAobICwABlLBbAAS0mLsAAZSzAAKGz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wFQnRCbAAEgcAYfAAEgcwFQnUmADwACgWwDAAKM5AMAAogIAwACiA0rAAEgvAS4GwACiSIGuwABIv8AASMTAAEzsAADAAGU+AAAAAQPAAEjMwABM7AAAAAICAsAASNwAAACr32ADwAB0cwDAAEj+AAAAUl0DwAD+fQFgA8AAoj4AAGADwAD8VQE+A07AAEkTwABJGwAAr5FgA8AA/FUBKj0cwABJMYHAAEkowFQoK4P9AQABNMAASTkDwABJOcAATNMAAAABAQHAAElIAAAAg9tgA8AAoj4AAGADwAD/JQE+BE7AAEllwABJbAAAlrhgA8AAofQBHMAASXYWwABJbi7AAE2GwACh88AAokHAAGXOAQABFsAASYmDwABJg8BUKIjAAE2GwACh88AAokEAwACiAEAhHMAASbKEwABJq8BUKKNIAQABKwDAAP91wABJq8AASbkBJAAGJ8AAZe4nwABl7xzAAEn1FsAASe0uwABNhsAAofPAAKJBsNABAAEng+EAwACiCSeAryfAAGXwHMAASi0WwABKJYPAAEofwFQoiMAATYbAAKHzwACiQbDQAQABJ4PhAMAAoglAIhzAAEpnhMAASmDAVCijSAEAARbAAEpqLsAATYbAAKHzwACiQQDAAP91ARzAAEqHFsAASn0WwABKdS7AAE2GwACh88AAokGGQsAAofhIAQABKwDAAP91wABKYMAASo4BJAAJJ8AAZfEnwABl9xzAAErVhMAASs7AVCijsNABAAEng+EAwACiCSeAryfAAGXvHMAASwcWwABK/y7AAE2GwACh88AAokGw0AEAASeD4QDAAKIJJ4CvJ8AAZfAcwABLPxbAAEs3g8AASzHAVCiIwABNhsAAofPAAKJBsNABAAEng+EAwACiCT0cwABLbhbAAEtmg8AAS2DAVCiIwABNhsAAofPAAKJBwABlzwIAAoTAAEuFwFQoozTAAEuNA8AAS43AAEzLAAAAAgICwABLjgAAAJ8zYAO+XgDAAEuVAAAAwABk8mADwACeaQAAYAPAAP8lAT4ETsAAS7rAAEvBAADAAGXyYAPAAJ5pARzAAEvKFsAAS8MuwABNhsAAofPAAKJBSwEAAYXAAEvLwFQqqADAAKIBScAAS9scwABL5ofAAEvfwFQq00gBAAErAMAA/3VKwABL7wA/TsAATA/AAEwXAACphGAD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RF/AAETiAAC5sAFqwABETWADwAD/aAIAAAEDwABEZsAAROIAAAABAQHAAERrAAAAg/NgA8AASrIAAGADwAEAAgE+Ak7AAER+wABEgwAAgpRgA8ABAAIBHMAARJkWwABEioDAAESFwFT3VbumwABKtyMAAAAAwABj4krAAESpASTAAETeBCfAAGb6HMAARLcuwABmjQEAARbAAETIgMAARMPAVPdVgm/AAEq9AMAAo2Unu7GBwABE2cBU93AGwACjrYG0wABE58AARPrAAEWmAAC5sQFqwABE6GADwAD/aAIAAAEDwABFD8AARaYAAAABAQHAAEUiAAAAg/NgA8AASs8AAGADwAEAAgE+Ak7AAEU1wABFOgAAgpRgA8ABAAIBHMAARVAWwABFQYDAAEU8wFT4HrumwABK0SMAAAAAwABj4krAAEVgASTAAEWiBCfAAGb7HMAARXwuwABmjQEAARzAAEWTFsAARY2AwABFiMBU+B6CVcAARtZLAQABkwDAAP7OAMAAo2Unu7GBwABFncBU+DkGwACjroG0wABFq8AARb7AAEdWAAC5zQFqwABFrGADwAD/aAIAAAEDwABF0cAAR1YAAAABAQHAAEXiAAAAg/NgA8AASuQAAGADwAEAAgE+BU7AAEX1wABGAgAAuktgA8ABAAIBHMAARgQuwABmjQEAARbAAEYVgMAARhDAVPj2ukvAAErvAMAAo2VOwABGLwAAAMAAZd5gA8ABAAIAScAARjkcwABGUBbAAEZJFsAARkKAwABGPcBU+PaCVcAARtZhwAD+70gBAAGVAMAA/z8+AT2KwABGXsBU+UskwABGiAIngNkcwABGaS7AAGaNAQABFsAARoEWwABGeoDAAEZ1wFT49oJVwABG1oHqwAD+pADAAKNlPgJAHMAARrcWwABGsBbAAEapgMAARqTAVPj2glXAAEbWYcAA/u9IAQABlADAAP8/wABGpMAARrsAPYrAAEbEwFT5SycATsAARuDAAEblAACCa2ADwAEAAgEcwABG5y7AAGb8wACjPwEAAYDAAEb7wFT49gDAAKOwSsAARwYBJMAAR1IHJ8AAZv2DwABHH8BU+hsngNmBwABHJcBU+REngZ0WwABHPIDAAEc3wFT49rqLwABHEILAAEdNwFT5SwbAAKOwgbTAAEdbwABHYsAAR/4AAMAAZvzAAKM/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AMAAVJvAAKRyAAAAAQOGe4aaAAAAAAAAAGADwAB75wFKhn4BFoaLFoZ+LrbFwACkcsAApHy408AATooGwACkgoG4hp+GsJ7IAADAAF4DAAAAAQOGzJ7IAAAAAQEBhu4AAAC7q2ADwAB8SQAAYAPAAJcQAT4YTocShxoAAISIXQPAAP+zAWADvhMBFocogIccwFVZ+YSIwAB8TE+HNodHAAABwABnu2EDAWADvhNgA8AAlxAAA4dVh6QAAAABAQGHYgAAAJomYAO+EwAAYAPAAJcQAT4BSodvARyHfxaHdi7AAEUIwACkcsAApHfAAEUiAQABg4eawFVaWwDAAF5IT4gmiDYAAAHAAGe8YQMBYAO+E2ADwACV+QADiEuMVwAAAAEBAYhYAAAAmiZgA74TAABgA8AAlfkBPgROiHYAAACF0mADwACXEABAHIifFoiOLsAAVJvAAKRywACkgLsTAQABhIiywFVawADAAHvviI6ItgBJiL8ciMeEiMPAVVrASAEAARaI2haIyi61HcAApHLAAKR2sl253gDAAP91PgE9jYjxwFVa1xyI/2qI/WADwACZfsABIyEgAQABJ8AAZ70AwACZgEmJMCIiHIk4hIk0wFVawEgBAAEWiUsWiTsutR3AAKRywACkdrJaudsAwAD/dQEciWeEiWPAVVrASAEAARaJehaJai61HcAApHLAAKR2slu53ADAAP91ARyJmYSJlcBVWsBIAQABFomsFomcLrUdwACkcsAApHayWbnaAMAA/3U+AT0wicUnwABnvkmJ6iIiIhyJ8oSJ7sBVWsBIAQABFooFFon1LrUdwACkcsAApHayWLnZAMAA/3UBHIojhIofwFVawEgBAAEWijYWiiYutR3AAKRywACkdrJkueUAwAD/dQEciluEilfAVVrASAEAARaKbhaKXi61HcAApHLAAKR2smW55gDAAP91ARyKkYSKjcBVWsBIAQABFoqkFoqULrUdwACkcsAApHayZrnnAMAA/3U+AT2NisbAVVrXHIrUaorSYAPAAJl+wAEjISABAAEnwABnvwDAAJmASYsEHIsMhIsIwFVawEgBAAEWix8Wiw8utR3AAKRywACkdrJXudgAwAD/dT4BPY2LOMBVWtcci0Zqi0RgA8AAmX7AASMhIAEAASfAAGfAAMAAmYBJi3Yci36Ei3rAVVrASAEAARaLkRaLgS61HcAApHLAAKR2sly53QDAAP91PgE9jYuowFVa1xyLtmqLtGADwACZfsABIyEgAQABJ8AAZ8EAwACZgD4BPTCL4yfAAGe+SowJARyME2qMEGADwACZfsABIyGFaAIAAifAAGfCMYwwYAPAAJcQAoWMMcBVWtccjEqCjDzAVVo5IAEAAYSMS8BVWsAAAADAAJmBToxjjGwAAMAAZ8NgA8AA/FUBKk6MfoyGAADAAGfEYAPAAPxVASpOjJiMogAAwABnxWADwAD8VQEqToy0jLsAAMAAZ8ZgA8AA/FUBKk6MzYzVAADAAGfHYAPAAPxVASpOjOeM8QAAwABnyGADwAD8VQEqTo0DjQ0AAMAAZ8lgA8AA/FUBKk6NH40pAADAAGfKYAPAAPxVASpOjTuNTAAAwABny2ADwAD8VQEWjWUWjU4uuLbAAKRywACkeMAAVH/AAHxoRo2IjamNmQAAAJomYAO+EwCBjaDAVVoSPgFJjbEiIiIcjbkUjbXAVV6BDQBIAQABFo3MFo28LrUdwACkcsAApHayWLnZAMAA/3UBHI3qFI3mwFVegQ0ASAEAARaN/RaN7S61HcAApHLAAKR2smS55QDAAP91ARyOIhSOHsBVXoENAEgBAAEWjjUWjiUutR3AAKRywACkdrJlueYAwAD/dQEcjlgUjlTAVV6BDQBIAQABFo5rFo5bLrUdwACkcsAApHayZrnnAMAA/3U9jI6LwFVduilJjqccjq8UjqvAVV6BDQBIAQABFo7CFo6yLrUdwACkcsAApHayXbneAMAA/3U9jY7XwFVdzSlJjvIcjvoUjvbAVV6BDQBIAQABFo8NFo79LrUdwACkcsAApHayW7ncAMAA/3U9jo8kwFVd4ClJj0Ecj0kUj0XAVV6BDQBIAQABFo9cFo9MLrUdwACkcsAApHayWrnbAMAA/3U9j49wwFVd8ylJj4ocj5IUj47AVV6BDQBIAQABFo+lFo+VLrUdwACkcsAApHayXLndAMAA/3U9FY+6wFVeBggpSY/VHI/dFI/ZwFVegQ0ASAEAARaP8BaP4C61HcAApHLAAKR2slm52gDAAP91PRWQB8BVXhkJKUmQJByQLBSQKMBVXoENAEgBAAEWkD8WkC8utR3AAKRywACkdrJXudgAwAD/dT0VkFbAVV4sCik+AUmShhSSisBVXlIMAD4BSZKoHJK4FpKsLsAASULAAKRywACkf8AASXsBAAEUktDAVV6BDQAAwABsHT0VktbAVV4/Cyk/P0mTBIaTCMBVXeA+AT0VkxvAVV4ZCSk/SZM3h5M7wFVd8z0Vk0PAVV4ZCSk/SZNaHJNmgZNewFVaEoQHAQABFpODFpNyLsAAVJvAAKRywACkgLuPwAB7+gDAAP/IPgE9FZPPwFVePwsUk9vAVV5SDAA/TpQOlBkAAIYtXQPAAP6/AWADwACV+QExlCxgA8AAlfkASZQ1FJQ5wFVeGQkAPgROlFwAAADAAGfMYAPAAJX5AE6VcpWHAADAAGfNYAPAAJcQARyVl4KVicBVWjkgAQABI4aVmMBVXeAWlb4Wla4utR3AAKRywACkdrJbudwWlegWldgutR3AAKRywACkdrJZudoBYAO+EwAASZX/h5YDwFVd8z4BPRWWFcBVYX8OHJYlapYiYAPAAJl+wAEjIYVoAgACJ8AAZ84xlqBgA8AAlxACHJavgpahwFVaOSABAAEWlsAWlrAutR3AAKRywACkdrJaudsAABSWzcBVYZAPAADAAJmBPgE9FZb8wFVhfw4clwxqlwlgA8AAmX7AASMhhWgCAAInwABnzxSXIsBVYZAPAADAAJmBPRyXXRSXR8BVYVANAFYBAAEcl2Rql2FgA8AAmX7AASMhhWgCAAInwABn0BSXlcBVYX8OAADAAJmBAMAA/tA/SZeuFJeywFVeLAoAPgE9HJfQFJfFwFVhUA0AVgEAARyX6YOX1MBVWp4gAQABFpf6FpfqLrUdwACkcsAApHayV7nYAAAAwAD+0D9JmBUUmBnAVV4GCAA+AT0cmDUUmCrAVWFQDQBWAQABHJhOg5g5wFVaniABAAEWmF8WmE8utR3AAKRywACkdrJcud0AAADAAP7QPgE9HJlCFJk3wFVhUA0AVgEAARyZSWqZRmADwACZfsABIyGFaAEAASfAAGfRAMAAmYEAwAD+0EmZiIWZjMBVXc0+AT0cmagUmZ3AVWFQDQBWAQABHJnBg5mswFVaniABAAEWmdIWmcIutR3AAKRywACkdrJdud4AAADAAP7QP0maRISaSMBVXbo+AT0cmmUUmlrAVWFQDQBWAQABHJp+g5ppwFVaniABAAEWmo8Wmn8utR3AAKRywACkdrJYudkAAADAAP7QP0maqhSarsBVXj8LAD4BPRyazBSawcBVYVANAFYBAAEcmtNqmtBgA8AAmX7AASMhhWgCAAInwABn0jGb12ADwACXEAMcm++Cm+HAVVo5IAEAARacABab8C61HcAApHLAAKR2smC54QAAHJwtFpwkLsAARQjAAKRywACkd8AARRsBAAEWnE8WnD8utR3AAKRywACkdpsuuYkAwABeOhycexacZS7AAEUIwACkcsAApHfAAEUXAQABFpygFpyQLrUdwACkcsAApHaybLnsAMAAXjYAwACZgQDAAP7QPgNOnOac8AAAwABn02ADvhMBFp0CFpzyLrUdwACkcsAApHayX7ngSZ0oHJ1WFp06Fp0sLsAAXWnAAKRywACke7XwwABNCIMcAQABFJ1fwFVk/Q4AAMAA/ow+AT0cnYAUnXXAVWFQDQBWAQABHJ2Hap2EYAPAAJl+wAEjIYVoAgACJ8AAZ9QxnbxgA8AAlxACHJ3RFp3ILsAARQjAAKRywACkd8AARRsBAAEWnfMWneMutR3AAKRywACkdpsuuYkAwABeOhyeGYKeC8BVWjkgAQABFJ4awFVk/Q4AAAAAwACZgQDAAP7QPz0cnkwUnkHAVWFQDQBWAQABHJ5Tap5QYAPAAJl+wAEjIYVoAQABJ8AAZ9UAwACZgQDAAP7QSp59ARyehmqehGADwACZfsABIyEgAgACJ8AAZ9YfnqzAAJYJAQABFJ64wFVhUA0AAADAAJmABsAApISBuJ7NntiiEgAAwABn18AApHIAAAABA57yohIAAAACAgKfCwAAAMAAZ9hgA8AAlxAAnyIAAADAAGfZYAPAAJcQAABgA8AAl4gBPgdOnzWfSgAAwABjtmADwAEAAgFqn1pgA8ABAALAAW8mTp+Hn5gAAMAAZ9pgA8AAlxABHJ+rFp+iLsAARQjAAKRywACkd7CjAQABgp/IwFVmngDAAF4+TqDBoMgAAKpQYAPAAJgtAR+g1sAAmDsCAAKBoOvAVWaDg6DxwFVmvQBOoSChKgAAW10DwAD+vwFgA8AAlxABMaE+YAPAAJcQAoChP8BVZnOEoUXAVWbzTqFhoWgAAJW0YAO+OgEWoXoWoWoutR3AAKRywACkdrKNugxOoZ6hrwAAwABn22ADwACXEAEcoboWobEuwABFCMAApHLAAKR3wABFFwEAAYahz8BVZ0oAwABeNkqh3AEfoefAAJeWAgACh6HywFVnbYWiBMBVZxwABsAApIWBuKKsory3jAAAwABn3MAApHIAAAABA6Lat4wAAAACAgKi6wAAAKVSYAPAAEy4AKMGAAAAhIhdA8AA/7MBYAO+EwAAYAPAAJX5AT4CSaMVFqMigKMZwFVn553YwABMzj4ETqM9o0IAAIC9YAPAAQACARajTYCjRMBVZ+eAvcAATMZJo1kco2KCo13AVWgoSAEAASdIAMABABE+AUqjdQEco39qo3xgA8AAmX7AASMhhWgBAAEnwABn3QDAAJmBP0mkOyIiIRykSIGkQMBVZ/WDHAEAARakYRakUS61HcAApHLAAKR2slq52wDAAP+/ACEcpIOBpHvAVWf1gxwBAAEWpJwWpIwutR3AAKRywACkdrJZudoAwAD/vwAhHKTBgaS5wFVn9YMcAQABFqTaFqTKLrUdwACkcsAApHayW7ncAMAA/78+AUqk9AErP0mlDxylKhalHIClE8BVZ+e8NsAATMFIAQABlADAAP8/PgRJpYIiIiIcpYuCpYbAVWgoSAEAASeGnwDAAQARARylm4KllsBVaChIAQABJ4O/AMABABEBHKWrgqWmwFVoKEgBAAEnlgkAwAEAEQEcpbqCpbXAVWgoSAEAASeDwQDAAQARPgFKpc8BKz9Opf+mBgAAgXZgA8AAlxABHKYKaqYIYAPAAJl+wAEjISABAAEkph4DJ8AAZ96CphbAVWgoJ8AAZ98AwACZgEmmKSIiHKYygqYtwFVoKEgBAAEng3wAwAEAEQEcpkGCpjzAVWgoSAEAASeBBgDAAQARARymUIKmS8BVaChIAQABJ4PAAMABABE+AT2LpmTAVWmeHKZvaqZtYAPAAJl+wAEjISACAAInwABn4IOme8BVaZ4AwACZgD9KppYBHKagaqadYAPAAJl+wAEjIYVoAgACJAACJ8AAZ+EnwABn4oOnGsBVaZ4AwACZgUmnMBynOYKnNMBVaChIAQABJ4HGAMABABE+AUqnUAEcp2dqp1dgA8AAmX7AASMhhWgBAAEnwABn4wDAAJmBPgJAHKfKgqfFwFVoKEgBAAEnhJIAwAEAEafFp9AASqfbARyn5Wqn4mADwACZfsABIyGFaAEAASfAAGfkAMAAmYFJqIsiFqiYgKiPwFVn57fywABMzAEWqKyAqKPAVWfnt+7AAEzNPglOq4irlgAAwABn5WADwAD8VQEcq6CBq5jAVWf1gxwBAAEWq7kWq6kutR3AAKRywACkdrJYudkAwAD/v06r06viAADAAGfmYAPAAPxVARyr7IGr5MBVZ/WDHAEAARasBRar9S61HcAApHLAAKR2sle52ADAAP+/TqwgrDQAAMAAZ+dgA8AA/FUBIhysUhasNi62xcAApHLAAKR8tvUBAAEWrHAWrGAutR3AAKRywACkdrJ3ufYAwABOmgAcrKKBrJrAVWf1gdYBAAE0rKYDrKatOAAAAAEBAaynAAAAmiZgA74TAABgA8AA/FUBPgFKrLoBHKzuFqzOFqzBLrbFwACkcsAApHyH9sAATpObSQIAAoSs+sBVbAMWrQ8WrP8utR3AAKRywACkdrJ3ufYAwABy3gDAAP6SSa35IhauBoCt/cBVZ+e37sAATM0AIhavBxyu1hausxaupi62xcAApHLAAKR8pW7AAE6UtIABAAErAMAAcDWDIYFqASGCryPAVWstPgFKrz0BKz9Jr1giIYKvXcBVay0AIYOvb8BVa2g+AUqviQErP06vta/AAADAAGfoYAPAAJcQARyvxGqvwmADwACZfsABIyEgAQABJ8AAZ78AwACZgE+whbCWAAABwABn6WEDAGADwACXEAADsKuw9QAAAAAAAABgA8AAlxABSrC7ARywuy7AAGfXwACkcgIAAhyw2Gqw1mADwACZfsABIyEgAQABJ4WXAMAAmYAcsOhqsOZgA8AAmX7AASMhIAEAASeFlwDAAJmAAMAApIRPsP6xDwAAAcAAZ+phAwJbW2ADwACXEAADsRSxbQAAAAICArEVAAAAhc1bALEbAAAAhc9bAABgA8AAlxABPgFKsSwBJrEsASMcsTgUsTPAVW2eCABIAQABKwDAAP91FLFCwFVtpwkAHLFMarFKYAPAAJl+wAEjISACAAInwABgjTGxV1sCFLFYwFVtnggAFLFewFVtpwkAAMAAmYABW2ADwACXEEmxdhaxg4CxesBVZ+e38sAATMw+BU6xpwAAAK4ZYAPAAJcQAEmxuoKxvsBVay0+AT0VsdnAVW41CIWx5cBVbNM/SbIEg7IIwFVraD4BPRWyJMBVbjUIHLI1h7IwwFVtfiACAAIUsjbAVW41CAAcskNqskFgA8AAmX7AASMhIAEAASfAAGfrAMAAmYAAAD9JsniEsnzAVWujPgE9FbKdwFVuNQgcsq6HsqnAVW1+IAIAAhSyr8BVbjUIAByyz4ayusBVbQUgAAAAAAAAAD9KsucBHLLxarLuYAPAAJl+wAEjIYVoAgACJ8AAZ+wUs6nAVW41CAAAwACZgT4ETrPdAAAArhlgA8AAlxAASbPwgrP0wFVrLT4BPRW0D8BVbxsIhbQbwFVs0z9JtDqEtD7AVWujPgE9FbRfwFVvGwgctHCHtGvAVW1+IAIAAhS0ccBVbxsIABy0kYa0fMBVbQUgAAAAAAAAAD9KtKkBHLSzarSwYAPAAJl+wAEjIYVoAgACJ8AAZ+0UtYvAVW8bCAAAwACZgUm1qha1t4C1rsBVZ+ezuMAATMo+AUm1xyIctdkWtdSAtcvAVWfngL3AAEzGSAEAASeYJQDAAQARABy1/Ba17oC15cBVZ+e8NsAATMFIAQABkwDAAP8/PgFKtgwBHLYWarYTYAPAAJl+wAEjIYVoAQABJ8AAZ+4AwACZgT9Jto0WtpqAtpHAVWfnhU7AAEzIPgFJtqwctr4WtrmAtrDAVWfngL3AAEzGSAEAASfAAEnhAMABABE+AUq20wEctt1qttpgA8AAmX7AASMhhWgBAAEnwABn7wDAAJmBPz9Kt30BKwbAAKSGgbi3kbeivBsAAMAAXggAAAABA7e8vBsAAAABAQG30AAAALurYAPAAHxAAABgA8AAlxABPgtOt+y39QAApVJgA8AATLgBFrgDgLf3wFVwtKVSwAB8Qk64IrgqAACEiF0DwAD/swFgA74TARa4OIC4LMBVcLSEiMAAfEROuFC4YwAAwABn8GADwACXGgEcuGwWuGUuuLfAAKRywACkebCSAQABgriCwFVw7QDAAGYYTrieuK0AAMAAZ5ZdA8AA/r8BYAPAAQACATG4t2ADwAEAAgA9HLjOhLi/wFVxRlYBAAEnhZcAwAD+0Em45Ba48YG46MBVcM2FUMAATMk+AT0cuRKEuQPAVXFGVgEAASeAlgDAAP7QPgJFuTMBuTy5PgAAYmADwAD+GwGTARy5RYW5Q8BVcbFjAQABFrlQgblHwFVwzbw2wABMwQDAAP9JAY25X8BVcbEcuWCFuV/AVXGxZAEAAZQAwAD/QT4BPRy5fYS5bsBVcUZWAQABJLmGAieB14W5hMBVcbEAwAD+0EW5lwG5oLmiAABiYAPAAP4bAZQBHLmphbmnwFVyKIFrAQABFrm1gbmswFVwzZXAwABMxADAAP9KAY25yMBVcigcucmFucjAVXIoZAEAAZQAwAD/QT4BPRy55oS518BVcUZWAQABJLnxAieWRoW578BVcigAwAD+0E66ErohAACwhmADwACXGgEcuioWuiMuuLfAAKRywACkebCGAQABgbo5wFVwzQDAAGYGTrpPulwAAMAAZ/FgA8ABAAIBHLptFrpmLri3wACkcsAApHmwwwEAARa6lBa6hC61HcAApHLAAKR2siG5oQDAAGYkTrq/us0AAMAAZ/JgA8AAlfkBHLrXLsAAZ9zAAKRyAgACgbr2wFVwzYK7AMBVcO0AwACkhUm7Dhy7IIe7EsBVcxFIAQABKwDAAP91PY+7KcBVcxEcuzxquzlgA8AAmX7AASMhhWgBAAEnlvkAwACZgT9Ku1EBHLtaartYYAPAAJl+wAEjISACAAInwABn8zG7i2ADwAD/aAaEu5PAVXFGh7upwFVzEYa7vsBVcs+Du9LAVXEShbvswFVynYS8AsBVcUYAwACZgAbAAKSHgbi8ILw3wABC/QAAwABdpwAAAAEDvFPAAEL9AAAAAAAAAGADwACYnAE+Bk68r7y4AADAAF7+YAPAAHufARa8ui64tcAApHLAAKR6SbzeIRa87IC848BVdAjAAFRbwAB7p0q8+AErP069Ib0qAACIeV0DwAD+vwFgA8AAlxABMb0+YAPAAJcQAE69Xr1oAACZjl0DwAD+fQFgA8AAYjgBHL2AFr1yLsAAXWnAAKRywACke7xkAQABFr2hFr2YLsAARQjAAKRywACkd8AARSXAAF5LAMAATQVGvbgAvcsAAACGHWADwABiOACCvdfAVXRlQT4BSb3qIiW994O97sBVdLdgA8AAYwoAJb4yFr4iFL4ZwFV0twMBYAPAAGMKtJjAAGMMYAPAAGPzPglOvly+YQAAgpRgA8AAY/MBJr5cARa+bBS+Y8BVdLcDAWADwABjCrSYwABjDGADwABj806+kb6eAACzgmADvhMBFr6lhL6gwFV1CJZ7wABj9Um+tiEcvsSAvrvAVXQIwABUXAEAAYW+z8BVdToAwAB7pEK+3gA/PRy++oG+8cBVdERWAQABHL8HFr7+LsAARQjAAKRywACkd7ChAQABFL8ZwFV0twMBYAPAAGMKAMAAXj8AwAD+0D0cvzaBvy3AVXREVgEAARy/Qxa/Oi7AAEUIwACkcsAApHfAAEUjAQABhb9awFV1OgDAAF5JAMAA/tBOwABBbcAAQXgAAJ+BXQPAAP6/AWADwACYxQExwABBimADwACYxQBGwABBlsAAQdzAAEGtAAAAgmpgA75SABzAAEHAgMAAQbfAVXQIhOQBAAGFwABBzcBVdToAwAB7pT4BPRzAAEHzhsAAQejAVXX4VgEAAR/AAEH7wACY0QIAAhzAAEIcasAAQhlgA8AAmX7AASMhg/EBAAEWwABCKofAAEIjwFV2J4C9vgEAwACZjxzAAEI6FsAAQjEuwABFCMAApHLAAKR3wABFFwEAAYfAAEJPwFV2JwDAAF42AADAAP7QTsAAQnHAAEJ1AACAq2ADwACYtgEfwABCe8AAmMQBAAGGwABCk8BVdfgAPRzAAEKxgcAAQqjAVXREVgEAAYfAAEK1wFV22gDAAP7QP0rAAELOAR/AAELZwACYqQEAAYHAAELwwFV0RAAAAFVZRQBVWY4AVVnXAFVmTQBVZ8EAVXCSAFVz1wBVd0EAAAAHAAAAAYG4AFV3aQBVV4IAVXdmAAAAAQBVd2kAAAAAAAIGwACkisAAZ/SBuQAABYEQAADAAJwNwABnugCBWgAAvf4AAIF+AADAAGVbtTYAgZ8AAMAAZVsAAQEBgoWBwAAAwABeGgABAQGwCAAAAAECwACki4G5ge+B9YiyA8AAXVwAAAFgAcAA/2gAAAABBcAApI8AAAAABAAAAwAAAAAAAAAAAGADwACkiwE/AQkBAMAA/34AAAAAAQbAAKSNgbmCD4ImiLAAAcAAZ/UAAAABA4I4iLAAAAACAgKCSAAAALBvYAPAAF5DAIJgAAAAgelgA746AABgA8AAlfkBPgNOgn2CjQAAwABn9mADwACXEAEcgpeAgo/AVXhAwABFFwEAAYGCrMBVeE4AwABeNk6CyILcAADAAGf3YAPAAJcQARyC7oCC5sBVeECwowEAAWqDGWADwAEAAsABbzAAwABePkqERAEchE5qhEtgA8AAmX7AASMhhWgCAAInwABn+DKIT2ADwAEAAmADwACXEAInwABjuYOIaMBVeJQnwABn9oKIlsBVeGUAwACZgQAAVXgeAFV5EQAAAAEAAAABgbkAVXkhAFV31ABVeR4AAAABAFV5IQAAAAAAAgbAAKSQwABn+YG6AAAFgQgAAMAAnA3AAGe6AIFSAADAAGVbtTYAgXMAAMAAZVsAAQEBgoWBkwAAwACD2AABAQG82IHRAADAAI85AAAAAAABAsAApJGBuoHnge2hIAPAAGf6AAABYAHAAP9oAAAAAQXAAKSZAAAAAAQAAAMAAAAAAAAAAABgA8AApJEBPwEJAQDAAP9+AAAAAAUGwACkk4G6ggGCDYKOAAHAAGf7AAAAAQOCMoKOAAAAAQEBgkAAAAC0pmADwACD2QAAYAPAAPxVAT4BSoJUARaCaICCW8BVefrAAFO2wACD2wbAAKSUgbqDYIN3iwIAAcAAZ/wAAAABA4OfiwIAAAADAwODtAAAALSmYAPAAIPZAIPZAAAAsKNhAwFgA8ABAAJgA8AAlxAAhB0AAADAAGf9YAPAAJcQAABgA8AAlfkBPgVAFoRNgIRAwFV6SsAAU7bAAIPbhECEbwBOhIiEnAAAwABn/mADwACXEAEchMKBhKbAVXpYIAEAAWqE0WADwAEAAsABbxwAAE6E+IUJAADAAGf/YAPAAJcQARyFL4GFE8BVelggAQABaoU+YAPAAQACwAFvIQAAToVhhXwAAMAAaABgA8AAlxABHIWigYWGwFV6WCABAAFqhbFgA8ABAALAAW8mAABKhc8BHIXZaoXWYAPAAJl+wAEjIYVoAgACJInYAyfAAGgBHogqwACklQAAAAAnwABoAjKJ2mADwAEAAmADwAD/aAUnwABoAxaKF4CKCsBVekrAAFO3wACD3CfAAGf9gopXwFV6byfAAGOyg4qEwFV6oifAAGO0hIqtwFV60SfAAGO2hYrdwFV7AADAAJmBBsAApJWBuosHixWLgQABwABoBAAAAAEDiyuLgQAAAAAAAABgA8ABAAIBPgFKi28BJ8AAaAUGwACkloG6jMqM4pDSAAHAAGgGAAAAAQOM8pDSAAAAAQEBjPkAAACaJmADwACPngAAYAPAAJcQAT4LTo0RjRoAAMAAXq1dA8AA/r8BYAPAAQACARaNIICNHMBVfBPAAF6GwACPuE6NQY1NAADAAGgHXQPAAP6/AWADwAEAAgEWjVOAjU/AVXwTwABeh8AAj7lOjXaNgQAAhIldA8AA/r8BYAPAAI+eARaNh4CNg8BVfBPAAF6IwACPuk+Nno2lAAABwABoCGEDAV0DwAD+fQFgA8ABAAJgA8ABAAIAA42vjiAAAAABAQGNwQAAAJXFXQPAAP59AWADwAEAAgAAYAPAAQACAT4CSY3PHI3YhY3TwFV82EgBAAErAMAA/3VKjeEBJwA/So3yARyOETWN/wAAAQBdA8AA/r8BYAPAAQACARyN/4WN+sBVfNiArQAAAADAAP6TNQAAAAEAWwEcjgmGjgfAVX0dgK4AAAAAwAD+0oYAwFV9HVgBAAEngQYAwAD+kU6OLo42AADAAGgJYAPAAQACARyOQoSOOMBVfK0gAQABgY5DwFV8LAAATo5ZjmQAAMAAaApgA8ABAAIBHI5whI5mwFV8rSABAAGCjnHAVXxXAABOjpGOlAAAg+lgA8ABAEwBH46awAEAawEAAYWOp8BVfXQASY61IRyOxIaOucBVfZ1IAQABJwAAwAEAET4BPTWO0wAAAQBgA8ABAEwBh47TwFV9xjUAAAABAFsBHI7XFI7VwFV+BAgAgo4BAAEnlvkAwAEAYDUAAAABAFsBHI7jFI7hwFV+BAgAgo4BAAGGjunAVX2dAMABAGAUAMBVfgQIAD9OjwiPEQAAwABS7WADwAEAAgEcjxaHjxPAVX3GIwAAAADAAQBlSY8nIiIWjy+AjyvAVXwThmXAAI+yASEcj0QUjzvAVX5oCABIAQABJwAAwAEAEQEhHI9Yg49NwFV8gkgBAAErAMAA/uk+A06PfY+DAACEhl0DwAD+vwFgA8AAmGABMY+UYAPAAJhgARyPmGqPlWADwACZfsABIyHAAFNXAQABFI+jwFV+aAgAAMAAmZBJj7UhHI/Eg4+5wFV8gkgBAAErAMAA/uk+AT01j9cAAAEAXQPAAP6/AWADwACYYAEUj9fAVX7TCQA1AAAAAQBbARyP6RSP58BVfzQKAFYBAAEcj/Bqj+1gA8AAmX7AASMhwABTVwEAASeW+QDAAJmQAMAA/tA1AAAAAQBbARyQDRSQC8BVfzQKAIClAQABHJAXapAUYAPAAJl+wAEjIcAAU2QCAAIckD6DkDPAVXyCgKsBAWADwACYYAE0kEIDkEKQWQAAAAEBAZBJAAAAmiZgA8AAj54AAGADwACXGgFKkFEBFpBVFJBRwFV/4AwAgL3AAI+hAMAA/ogckF9qkFxgA8AAmX7AASMhwABTVwEAASeBBgDAAJmQAMAAmZIAwAD+0RQAwFV/NAoAP0qQgAEekIfAAJS0AgABFJCgwFV+0wkAAcAAYh8pP0qQwwErBsAApJeBupW2lc2hHgABwABoCwAAAAEDleOhHgAAAAUFBZX8AAAAwABoDGADwACXEACWHwAAAMAARRtgA8AAlxAAlkkAAADAAGgNYQMBYAPAAJcQYAPAAJcQAJaSAAAAwABoDmADwACXEACWwgAAAMAAaA9gA8AAlxAAAGADwACV+QE+Ak6W6Zb2AADAAGgQYAPAAJcQARyXFYKXAMBVgKggAQABHJcYapcWYAPAAJl+wAEjISACAAInwABoETGXKlsAAMAAmYAAAEqXNAEclz5qlztgA8AAmX7AASMhhWgCAAInwABoEjKf2WADwAEAAmADwAD/aAcngVSAn+nAVYCIJ5k0gaAKwFWAmCfAAGgQhaAzwFWA7CfAAGgOg6BiwFWAwSfAAGgPhKCTwFWA0SfAAGgTaqDSYAPAAQACwAFu+SfAAGgUKQDAAJmBAABVedgAVXooAFV7vABVe/EAVYBmAFWBswAAAAUAAAABgboAVYHTAFV5jgBVgdAAAAABAFWB0wAAAAAAAgbAAKSawABoFYG7AAAUgRAAALmGAAEBAbQrgUsAAMAAYgUAAIFuAAC9/gAAgZIAAMAAY8cAAIGzAADAAEMwAACB2wAAwABlW7U2AIH8AADAAGVbAAEBAYKFghwAAMAAZZAAAQEBmXSCSgAAwABsEQAAgnMAAMAAe+YAAIKhAADAAHfyAACCzAAAwAB5VQABAQG4r4MOAADAAGp6AAEBAbHUg0sAAMAATPEAAIN8AADAAEymAAEBAaUHg64AAMAAcUYAAQEBwABPRYPwAADAAE6BAAEBAaULhBsAAMAAjzkAAIQxAADAAF4aAAEBAbAIhF8AAMAAkCgAAAAAAAECwACkm4G7hH6EhMAAQ38DwABdXQAAAWABwAD/aAAACwTAAKSdgbuEuoTgBcAAaBYAXQPAAP+zAWADwABMuAEehNHAAMMhAAFgA8AATLgAAATAAKSfgbuE84T7CcAARQjAAKSaAGADwABeQwAEwACkoIG7hROFIQnAAEUHwACkmgBgA8AAkCkABMAApKGBu4UxhTcJuLfAAKSaAGADwABlkwAEwACkooG7hVWFYAnAAFTWwACkmgBgA8AAeDsABMAApKOBu4V4hYkJwABda8AApJoAYAPAAHlcAATAAKSkgbuFwYXMCcAASULAAKSaAGADwABsJQAEwACkpYG7heaF9gnAAFSbwACkmgBgA8AAe+cABMAApKaBu4YNhhoJwABdacAApJoAYAPAAEz4AATAAKSngbuGMYY9CbbFwACkmgBgA8AAToUABMAApKiBu4ZhhnsJuPXAAKSaAGADwABDTgABBcAApLGBu4aAhoCHnwAAAAOGloefAAAACgoKhqMAAATAAEUIYAPAAF5DAIa4AAAEwABFB2ADwACQKQCG0wAABLi3YAPAAGWTAIbmAAAEwABU1mADwAB4OwCG/gAABMAAXWtgA8AAeVwAhxwAAATAAElCYAPAAGwlAIc0AAAEwABUm2ADwAB75wCHUQAABMAAXWlgA8AATPgAh2sAAAS2xWADwABOhQCHhAAABLj1YAPAAENOAABgA8AApJsBPwsIAcAApJ+AAMBVhGsIAcAApKCBAMBVhHsIAcAApKGCAMBVhIsIAcAApKKDAMBVhJkIAcAApKOEAMBVhKkIAcAApKSFAMBVhLkIAcAApKWGAMBVhMkIAcAApKaHAMBVhNkIAcAApKcUAMBVhOkIAAgBwACkqBQAwFWE9wkACQGGgMAA/34AAAAABAbAAKSrgbuHpIe8h/gBALBOwACkmgAAAAEDh9CH+AAAAAAAAABgA7x1AUqH2QEWh+YWh9kutsXAAKSawACkp6VZwABOiwbAAKStgbuH/YgCiGIAAMAAaBcAAAABA4gSiGIAAAABAQGIIgAAAJZ7YAO+OgAAYAPAAPxVAUqINAEciEIWiDQuwABdacAApJrAAKSmvGABAAGAiFrAVYX/AMAATQMGwACkroG7i52LsanMAADAAGgYAAAAAQOLxqnMAAAAAwMDi90AAACCamADvjoAi+4AAAClUmADwABMuACMAQAAAMAATKFgA8AATLgAAGADwACQDAE+GU6Nqo24AAC1x2ADwABqewEWjcOBjbrAVYZptcfAAEy9To3pjfwAALW5YAO+YQEWjgWAjf7AVYZdtbm+PU6OIY45AAC4WWADwAD+GwEWjkmDjjvAVYaSuFnAAGqHQCIcjo0WjnuDjm3AVYaSlcDAAGqDSAEAAZMAwAD/PwEcjr0WjquDjp3AVYaSlcDAAGqDSAEAARaO04SOwMBVhrKExb5nAMAA/z+ObY7hAEmPuhyP3haPzIOPvsBVhpKVwMAAaoNIAQABFo/0hI/hwFWGsoTFvmcAwAD/Pz4CSZAMHJAohZAQwFWGzkgBAAEWkD6EkCvAVYaytca+cQDAAP8/PgJAFpCpg5CbwFWGksAATJ3AAGqKkJuQsgBKkL0BKz9JkNgiFpD/FpDvhJDcwFWGsoTIvmaDt8AA/qIAHJE4FpElg5EXwFWGkrw3wABqhkgBAAEWkWwWkVyEkUnAVYayhMi+ZmHAAP7vAMAA/z8+AUqRtAErPz9OkeGR5wAAhL5dA8AA/r8BYAPAAQACARyR94OR6cBVhpK4WgAAAADAAGqXTpIdkjEAAMAAVIFgA8AA/FUBHJJEFpIzLsAAVJvAAKSawACkpcAAVIEBAAGAkljAVYZdAMAAe/BOkrmSzAAAwABoGWADwAD+GwEjh5LOwFWIMpSTAWADwAD+G06T0pPnAADAAGgaYAPAAQACASfAAGeMTpQ+lE0AAMAAXrZdA8AA/r8BYAPAAJfvAR6UU8AA+BYBAWADwACX7wEclKoclIUUlHLAVYhqCABkAQABFpScgZSTwFWGabw2wABMwQDAAP9BZAEAARaUwYGUuMBVhmmVwMAATMQAwAD/QQBOlS2VPQAArkddA8AA/r8BYAPAAJcQAR6VQ8AA+BYBAWADwACXEAEclacclXYUlWPAVYhqCABkAQABFpWXhJWEwFWGsrXGvnEAwAD/QWQBAAEWlciElbXAVYayhMW+ZwDAAP9BAE6V4pXoAACA7mADwAD+GwGTSZXxh5X1wFWIMj4DPRWWEsBViXQMHJYXFJYSwFWJdAwAZAEAAZQAwAD/QT0cli8UliHAVYikCgCAvwIAApMfljnAAJf2AQABFJZJwFWIjQkAAADAAP7PPRyWdRSWZsBViQ8LAIC/AgACkxyWfWqWe2ADwACZfsABIyEgAgACJ4bRFJaDwFWIjQkAAMAAmYAAwAD+zz9OlqmWwAAAwABoG2ADwAD+GwEcltqFlsLAVYbOZAEAARSW3MBViGoIAADAAP9BTpdCl2oAAMAAXrtgA8AA/hsBHJeDFJdswFWKGg0AgY0BAAGUAMAA/0I9HJehFpeNLrBOwACkmsAApKu0NgIAAoCXssBVhl00l8IDl8KcpQAAAAMDA5fDAAAAgLVgA8AAY8sAl80AAACAvWADwAEAAgCX4QAAAICWYAPAAGI4AABgA8AA/yUBPgROl/eX/gAAwABJO2ADwAEAAgEcmAcWmAAuuLfAAKSawACkocAARuIBAAEUmBjAVYqqEAAAwABm9UAhHJgzFJgswFWK0RIASAEAARSYNsBViI0JAADAAQARmCyYSgBJmFMcmF0UmFfAVYl0DABjAQABFJhfwFWKGg0AAMAA/0k+Aj0cmI8UmIHAVYikCgCAvwIAAhSYkMBViXQMAB+YncAAl/YBAAEUmK3AVYrREgAAAMAA/s89HJjNFJi+wFWJDwsAgL8CAAIUmM7AVYl0DAAcmNlqmNdgA8AAmX7AASMhIAIAAieG0RSY38BVitESAADAAJmAAMAA/s8+Ak6ZA5kJAAAnYAPAAP4bARyZEYaZC8BViAeAuwEAARSZGcBViqoQAADAAP7USZkoIRyZMhSZLMBVi8wTAEgBAAEcmTWUgcYAAAAAwAD+PgDAAP8/PgM9FZlFwFWKSA4UmW/AVYl0DAA9HJoZFJoKwFWJDwsAgL8CAAIUmhrAVYl0DAAcmiVqmiNgA8AAmX7AASMhIAIAAieG0RSaK8BVitESAADAAJmAAMAA/s89HJpMFJo+wFWIpAoAgL8CAAIcmmQUmk3AVYoaDQBkAQABFJpmwFWLzBMAAMAA/0EfmoHAAJf2AQABFJqRwFWK0RIAAADAAP7PPgFJmrUcmr8UmrnAVYq4EQBIAQABKwDAAP91PgE9HJrlFJrWwFWJDwsAgL8CAAIUmubAVYl0DAAcmwgWmv8uwABFCMAApJrAAKSfsKEBAAEfmx7AAGKKAAAAAADAAF4/AMAA/s8+AkmbUyEWm14Um1jAVYq4EQCoXMAAYjs+AT0Vm+zAVYpIDhScFsBViXQMAD89HJxGFJw3wFWJDwsAgL8CAAIUnEfAVYl0DAAcnFkWnFAuwABFCMAApJrAAKSfsKEBAAEUnGvAVYq4EQAAwABePwDAAP7PPRWcl8BViXQMHJycFJyXwFWJdAwAZAEAAZQAwAD/QQC8gUmcrRyc0xacxIScscBVhrKExb5ngJcBAAGTAMAA/0s+Ak6c5JzzAAC1YmADwAD+GwEcnRUWnQ4UnP/AVYikCgBhwAD+74GNAQABFp0qhJ0XwFWGsoTFvmcAwAD/QkadQJ2ynVYAAACpemADwABkGQAcnZAWnX0WnXAutsXAAKSawACkp6VZwABOi7QdAQABgJ2pwFWGXQC8Yz4BSZ28HJ3bFp3JgZ3AwFWGaZXAwABMxEgBAAGTAMAA/z8+Ak6d9p4CAACGtGADwABjywEcnjMWnhEWngQutsXAAKSawACkp6VZwABOi7QxAQABFp5bFJ5OwFWOHBAAlnvAAGQbALx8SZ5vIRyehRaecy7AAF1rwACkmsAApKNIAQABKwDAAP91PgJOnq2etQAAwABoHGADwACXEAEcnskWnrcuwABda8AApJrAAKSjwABTOAIAAhae6S7AAEUIwACkmsAApJ8cnxUWnwMuwABda8AApJrAAKSjwABTNAIAAhafUC7AAEUIwACkmsAApJ8Un1rAVY54EQAAwAB5YADAAHliPRyfhBSfdcBViQ8LAIC/AgACNQAAAAEAYAPAAP4bARSfhcBViXQMADUAAAABAGADwAD+GwEVn4XAVYl0DByfihQAwFWPahMAZAEAAZQAwAD/QRQAwFWPahMAFJ+QwFWO3xIAAMAA/s8+AT0cn8cUn7jAVYkPCwCAvwIAAjUAAAABAGADwAD+GwEUn8jAVYl0DAA1AAAAAQBgA8AA/hsBFZ/IwFWJdAwcn80UAMBVj9QSAGQBAAGUAMAA/0EUAMBVj9QSAByf3xaf0y7AAFTWwACkmsAApKLAAEbUAwADFqAGLsAARQjAAKSawACknxSgEMBVjngRADSgHQOgHaFNAAAAAQEBoB4AAACAtWADwABkGQAAYAPAAJcQAUqgJAEcoC0WoCQuwABFCMAApJrAAKSfsKEBAAEeoSfAAGKeAQABHqE8wAD8VAEAARyhSJWBxgAAAADAAP4+AAAAwABePwDAAHg+AMAA/s8+A06hfqGFAADAAEk7YAPAAQACASShpwInnkUWoaEWoZkUoYzAVY4cEACWe8AAZBuAvb4BPRyhwRShs8BViKQKAIC/AgACNQAAAAEAYAPAAP4bARShwsBVjdwPADUAAAABAGADwAD+GwEVocLAVY3cDxyh0BQAwFWRCBIAZAEAAZQAwAD/QRQAwFWRCBIAH6HawACX9gEAARSh6sBVkMQRAAAAwAD+zz0cogwUof3AVYkPCwCAvwIAAjUAAAABAGADwAD+GwEUog3AVYl0DAA1AAAAAQBgA8AA/hsBFaINwFWJdAwcohIUAMBVkXsSAGQBAAGUAMAA/0EUAMBVkXsSAByiGmqiGGADwACZfsABIyEgAgACJ4bRFKIgwFWQxBEAAMAAmYAAwAD+zz9OokoAAACCbVsASaJwHKKAFqJ0LsAASULAAKSawACkpMAASXMBAAGAopTAVYZdAMAAbDE+AT0VoqXAVZHuDxyiuxairC7AAEUHwACkmsAApKDAAF65BgAGgKLmwFWGXYei+MBViDIcox4WoxcuuLfAAKSawACkobCGAQABgaMtwFWGaQDAAGYGFKNCwFWIpAoAFKNcwFWJDwsAFKN3wFWKSA4AAMAAkD5Jo6wWo7eAo7DAVYZdhRy+Kj4BSaPRHKPVLsAAaBcBAAGAo+bAVYZdAMAApK0+A06kBaQQAAC/iWADvhMBFqQZgKQSwFWGXYUZvjNOpDykRwAArSRgA8AAlxoBHKRQFqRJLri3wACkmsAApKGwggEAAYCkY8BVhl0AwABmAj0VpZXAVZHuDxyln2qlnGADwACZfsABIyGFaAIAAifAAGgdMaXGYAPAAP9oAxyl2xal0i7AAEUIwACkmsAApJ/AAEUVAgABFKXrwFWSxRAAAcAARRYpwABeNRSmHcBVkuERABSmM8BViQ8LAADAAJmBPgE9FaZmwFWR7g8cpnBqpm1gA8AAmX7AASMhhWgCAAInwABoHjGmm2ADwAD/aAIcpqMWppwuuLfAAKSawACkobCCAQABgKa2wFWGXQDAAGYCFKa/wFWJDwsAAMAAmYE+AT0Vpu3AVZHuDxym92qm9GADwACZfsABIyGFaAIAAifAAGgfMacaYAPAAP9oAhynJBanGy7AAEUIwACkmsAApJ/AAEUXAQABgKc5wFWGXQDAAF42FKdCwFWJDwsAAMAAmYFOp3mnkgAAwABGy2ADwABDVQEcp7cWp5wuuPXAAKSawACkqLgRAQABgKfPwFWGXQDAAENQTqfuqAAAAKXCYAPAAEM0ARyoIxSoCsBVlEYQALgXAgACgKgtwFWGXYOoNcBVhpIAwABDWU6oVKhdAACCbmADwACYDgEmqFQBHKiZHKhhaqhfYAPAAJl+wAEjISACAAInwABoIDGoeFsCFKh5wFWIpAoAFKiJwFWR7g8AAMAAmYCwmQEAARSor8BVlHoRAADAAJXnYAPAAJgOTqjTqNgAAIC9YAPAAJcaASMWqOGAqNrAVYZdhB6+KSscqPoWqPMuuLfAAKSawACkobCGAQABgakJwFWGaQDAAGYGAWADwACXGk6pI6ksAACg3GADwACXGgEjIRypRIKpN8BVhndIAQABKwDAAP91HKlWFqlPLri3wACkmsAApKGwhgEAAYKpZcBVhncAwABmBisBYAPAAJcaSql/AR+pisAAkBIEAAMUqZ7AVZUTEwAUqaTAVZVcFAAUqa7AVZSuEgABlnuAqcHAVYZdBsAApK+Bu66qrsTAAEN9AADAAF38AAAAAQOu2sAAQ30AAAADAQGu6gAAAIJqYAO+OgACrv4AAADAAF3uYAPAAPxVAWoAYAPAAP8lea8PAAAAwABd8mADwAD8VQFqAGADwAD/JXldA8AA/r8BYAPAAJAMAT4SQCEcrzaBryvAVZYRSAEAASsAwAD/da8rrz0AQCEcr1iCr0vAVZYqSAEAASsAwAD/da9Lr18ATrAxAAAAwABoIV0DwAD+8QJgA8AATLhgA8AAcUcATrIHAAAAwABns10DwAD+8QJgA8AATLhgA8AAcUcATrIfsjQAAMAAaCJgA8AA/hsBFrJQFrI9gLI2wFWWBLW5vj2Exb5nSbKjFrKugLKnwFWWBIUcvio+AT2LssjAVZaKHLLmFrLYLsAAXWnAAKSawACkprxZAQABFrL/gLL4wFWWBIC9vgEAwABM/T9JsxGBsxXAVZYRPgJOszCzNQAAIGADwAEAAgEWsz4WszcuuLfAAKSawACkocAASUzAAGXaPYyzY8BVlqgcs4EWs3MuwABdacAApJrAAKSmvFkBAAGGs5PAVZdAAMAATP0/QBazvRqzrMAApJ2BVcAA/qGzrLPEAD0jHLPZg7PLwFWWikgBAAErAMAA/3WLs8vAVZaKarPdXQPAAP7xAmADwABMuGADwABxR8ABc7grAV0DwAD+8QJgA8AATLhgA8AAcUc9Ixy0GIS0CsBVlqhIAQABKwDAAP91jLQKwFWWqGq0HF0DwAD+8QJgA8AATLhgA8AAcUfAAXO4KwFdA8AA/vECYAPAAEy4YAPAAHFHTrRktGoAAMAAZ7ZdA8AA/r8BYAPAAJAMATG0gWADwACQDABJtIoiIha0nIO0jsBVloqBVcAA/xYAFrS9hLSvwFWWqIFVwAD/FgAhIoK1HcBVlioAHLVChbUtwFWWxoCXAQABkwDAAP9LPgFKtVABhrVXwFWYQz9Otla2awAAwABoI10DwAD/swFgA8AATLgBHrZxwADDIQABYAPAAEy4AABOtpW2owAAwABoJF0DwAD/swFgA8AATLgBHrapwADDIQABYAPAAEy4AABJty8igrczwFWWKgAct1iFt0PAVZbGgJcBAAGTAMAA/0s+B064IrgwAADAAGglYAPAAEy4ARy4Ux64NsAATOEBAAGAuEvAVZYEALxPAAAAAMAATN5OuHK4ggAAwABoJmADwABMuAEjFricFLiOwFWZMQkAt+3AAEzLKxy4wRS4s8BVmTEJALxOAAAAAMAATN0BYAPAAEy4PRy474e42sBVmLpWAQABFLjzwFWZMQkAAMAA/8A9HLkXFLkJwFWY5AgAVgEAARS5G8BVmTEJAADAAP/ATrlFuUoAAL9WYAPAAJAMARy5Vi7AAGgYAwADgLlswFWWBBS5dMBVmTEJABS5g8BVmWIKAADAAKSuQCEcuacUuaLAVZnhCwBIAQABKwDAAP91uaK5rgA9HLm9hrm3wFWYQ1YBAAEUucHAVZnhCwAAwAD+0D9GudMAueEAAAClUmADwABMuAAWufuEue3AVZaog2jAAP8TQT4FTroSuiIAAMAAaCdgA8AATLgBHroywABM6AIAAha6R4C6QMBVlgSni74nFrpcFLpTwFWaWAkAtcfAAEy9AD0cuoeHunLAVZi6VgEAARS6i8BVmnoKAADAAP/ASbqkIRy6uRS6qcBVmnoKALayAQABgLrIwFWWBADAAEzVPgFCutsAP0m69By7BhS6+MBVmOQIAFYBAAEUuwrAVZp6CgAAwAD/wD4CTrs6uz8AAL9WYAPAAJAMARy7TS7AAGgYAwADgLtjwFWWBBS7a8BVmnoKABS7fMBVmlgJAADAAKSuSbuPIRy7mBS7k8BVmx8LAEgBAAErAMAA/3U+AT0cu7OGu63AVZhDVgEAARS7t8BVmx8LAADAAP7QPz9JvV8cvYwWvXoWvWwUvWPAVZpYCQC1x8AATL2VwMAAaoNIAQABkwDAAP8/PgFJvZwcvbWFvaDAVZbGgJcBAAGTAMAA/0s+A069z73wAADAAGgoYAPAAEy4AR699sAATOgCAAIWvhqAvhPAVZYEp4u+Jxy+Xha+PRS+NMBVmlgJALXHwABMvcAATJwBAAGFvnTAVZbGAMAAapYAPRy+q4e+lsBVmLpWAQABFL6vwFWb2gsAAMAA/8BJvt0cvu8UvuHAVZjkCABWAQABFL7zwFWb2gsAAMAA/8A+A06/Lb89AADAAGgmYAPAAEy4AR6/U8AATOoBAAEUv2zAVZvaCwAATr+vv7QAAL9WYAPAAJAMARy/ti7AAGgYAwADgL/dwFWWBBS/5cBVm9oLABTAAEAHwFWcbQwAAMAApK5JwABAJSEcwABALhTAAEApwFWckw0ASAEAASsAwAD/dT4BPRzAAEBNhsAAQEfAVZhDVgEAARTAAEBRwFWckw0AAMAA/tA/Pz8/RsAAQXEAwABBfwAAAKVSYAPAAEy4ABbAAEGZg8AAQYvAVZaKg2jAAP8TQT4EScAAQaccwABBwIfAAEGrwFWYuoMcAQABFMAAQcnAVZ0cCQAAwAD/v0LAAEHUAD9JwABB5CEcwABB8hTAAEHpwFWdHAkAtrIBAAGAwABCAcBVlgQAwABM1ULAAEIKAD9JwABCGiEcwABCQhzAAEIsg8AAQh/AVZaKSwEAARTAAEItwFWdHAkAAMAA/wW2tQMAA4DAAEJJwFWWBBbAAEJaFMAAQlHAVZ0cCQCni8AATLwWwABCZi62xcAApJrAAKSnAMAAcUk+AULAAEJ/AD9JwABCmBzAAEKqFMAAQpzAVZjkCABWAQABFMAAQq7AVZ0cCQAAwAD/wD4CTsAAQtfAAELcAAC/VmADwACQDAEcwABC6i7AAGgYAwADgMAAQwDAVZYEFMAAQwjAVZ0cCQArAMAApK5JwABDISEcwABDKhTAAEMlwFWePQoASAEAASsAwAD/dT4BPRzAAENFhsAAQz/AVZhDVgEAARTAAENJwFWePQoAAMAA/tA/P0rAAENtAYbAAEN0wFWYQwAAVYWYAFWF3QBVhjsAVZXeAFWezQAAAAQAAAABgbsAVZ7pAFWC7QBVnuYAAAABAFWe6QAAAAAAAgbAAKSywABoKYG8AAANgQ4AALmGAAEBAbIcgUQAALyFAAEBArRCpPWBhAAAvf4AAIGoAADAAGPHAACByQAAwABlW7U2AIHqAADAAGVbAAEBAYKFggoAAMAAtaXAAGgqAIJQAADAAGWQAAEBAZl0gn4AAMAAd/IAAQEDwABSk8AAUsTAAFKRgu4AAMAAeRQAAQEEwABTJMAAUx+VpMAAUomDYgAAwACKKQAAg4YAAIHgAAEBAZd0g68AAMAAXhoAAQECuLKwCAAAAcAApLSBvIRHwABoKwAAXgMAAQEBYAPAAHkVAAFXA8AApLQAXAABhHYAAADAAGgsYAPAAHkVAAAFAsAApLWBvISLhJGE/QPAAGgtAAABYAHAAP9oAAACBMAApLeBvISvhLMJgL0AYAPAAJcaAATAAKS4gbyEyITSCYJvAGADwACV2QABBcAApLqBvITXhNeE+wAAAAOE34T7AAAAAgIChOUAAASAvWADwACXGgCE8AAABIJvYAPAAJXZAABgA8AApLUBPwMIAcAApLeAAMBVoG0IAcAApLiBAMBVoHsJAYTXwAD/fgAAAAAAAABVoLgAAAAAAsAApLuBvIUAhQaFVAPAAGguAAABYAHAAP9oAAADBMAApL2BvIUdhSMYwABoLwBgA8AApLUBKwTAAKS+gbyFMIU8GITxAGADwACktQErBMAApL+BvIVJhVIYri0AYAPAAKS1ASsBBcAApMEAAAAABAAAAwAAAAAAAAAAAGADwACkuwE/AQkBAMAA/34AAAAAAAAAVaFSAAAAAALAAKTCgbyFV4VdjE8DwABdXwAAAWABwAD/aAAAAgTAAKTEgbyG0YbiGMAAXegAYAPAAJcQASsEwACkxoG8h6WHzQnAAGgwwACksgBdA8AA/vECYAO+E2ADwACkuwEyh8tgA74TYAPAAKS7AAEFwACkzQAAAAAEAAADAAAAAAAAAAAAYAPAAKTCAT8BCQEAwAD/fgAAAAAEBsAApMiBvIfSh9eIpAAAwABoMQAAAAEDh+CIpAAAAAMDA4ftAAAAmiZgA74TAIf9AAAAgL1gA8AAlxoAiA4AAACCb2ADwACV2QAAXAE+Ak6IKog0AADAAF3fYAPAAKS7ARyIQhaINi7AAGgwwACkssAApMaZdgIAAoCITsBVohU0iFMDiFOIaAAAAAAAAABgA8AApLsBSohZAR+IXcAApMEAAAAAAMAA/ww9F4h5g4hvwFWiQ8AAaC8fiIbAAKS6AgACgYiPwFWiIYKIlcBVoi8AwACkvQbAAKTJgbyIqYiuiY4AAMAAaDIAAAABA4i9iY4AAAADAwOI0QAAAJomYAO+EwCI4QAAAIC9YAPAAJcaAIjyAAAAgm9gA8AAldkAAFwBPgJOiQ6JGAAAwABd32ADwACkuwEciSYWiRouwABoMMAApLLAAKTGmXYCAAKAiTLAVaLrNIk3A4k3iUwAAAAAAAAAYAPAAKS7AUqJPQEfiUHAAKTBAAAAAADAAP8MPReJXYOJU8BVoxmE8R+JcMAApLoCAAKBiXnAVaL3gol/wFWjBQDAAKS+BsAApMqBvImTiZiKawAAwABoMwAAAAEDiaSKawAAAAMDA4mxAAAAmiZgA74TAInBAAAAgL1gA8AAlxoAidIAAACCb2ADwACV2QAAXAE+Ak6J7on4AADAAF3fYAPAAKS7ARyKBhaJ+i7AAGgwwACkssAApMaZdgIAAoCKEsBVo780ihcDiheKLAAAAAAAAABgA8AApLsBSoodAR+KIcAApMEAAAAAAMAA/ww9F4o9g4ozwFWj7a4tH4pNwACkugIAAoGKVsBVo8uCilzAVaPZAMAApL8GwACky4G8inCKdYxNAADAAF3jAAAAAQOKhIxNAAAAAgICipMAAAC9T2ADwACKKgCKoAAAAIGmYQMCYAPAAJcaYAPAAJXZXAAAXAE+Ak+K0YrWAAABwABoNGEDAWADwACktVwAA4rki08AAAABAQGK7gAAAMAAaDVgA8AApLUAAFwBPgJJiwAciw2DiwTAVaTgSAEAASsAwAD/dUqLFgA/PRyLJYGLJMBVpKEgAgACFosvg4smwFWk4IC9wACktxaLPoOLNcBVpOCCb8AApLgAAEaLVouUi2cAAACaJmADvhMAHIt1gItuwFWkk8AAWQQBAAEWi40Wi4EuwABoMMAApLLAAKTGg2jAAP8TAMAAii0+BE6LpouwAADAAF3fYAPAAKS7ARyLvRaLsi7AAGgwwACkssAApMZLAQABg4u+wFWlRwDAAP8FPRyL2IKLysBVpMEgAQABFovjhIvZwFWlhcAAaC/AAKS9AAA9HIwAgovywFWkwSABAAEWjAuEjAHAVaWFhPHAAKS+AAA9HIwugowgwFWkwSABAAEWjDmEjC/AVaWFri3AAKS/AAAAAFWh8wBVoskAVaOdAFWkcQBVph4AAAAEAsAApM6BvIxSjFiuHAPAAF1eAAABYAHAAP9oAAAHBMAApNGBvIyGjJUJtR3AAKSyAGADuYcABMAApNKBvIyujL0JtOHAAKSyAGADvTIABMAApNeBvIzXjOIJr/8AYAPAAF4bAATAAKTTgbyM8oz4Cbi3wACksgBgA8AAZZMABMAApNSBvI0VjR8JwABdasAApLIAYAPAAHf5AATAAKTVgbyNPY1ICcAAVNbAAKSyAGADwAB4OwAEwACk1oG8jXSNhgnAAGg2wACksgBgA8AApOEAAQXAAKTggbyNi42LjoUAAAADjZ+OhQAAAAYGBo2lAAAEtR1gA7mHAI27AAAEtOFgA70yAI3XAAAEr/9gA8AAXhsAjekAAAS4t2ADwABlkwCN9gAABMAAXWpgA8AAd/kAjgcAAATAAFTWYAPAAHg7AABgA8AApM4BPwgIAcAApNGAAMBVpyUIAcAApNKBAMBVpzEIAcAApNeCAMBVpz0IAcAApNODAMBVp0sIAcAApNSEAMBVp1kIAcAApNWFAMBVp2kIAMAApNYfjjXAAKT0AgACgI5kwFWnJYGOdcBVpzEACQGNi8AA/34AAAAABQbAAKTZgbyR9pIJoQUAAMAAXeAAAAABA5IYoQUAAAADAgKSJQAAALOCYAO+EwCSXQAAALi7XQPAAP7xAmADviVgA8AAlxAAAZJ4AAAAwABd4WADwAD8VQFqkpVgA8AA/FV3YAPAAKTCAT4GTpK1krwAAIF2YAPAAKTCAR+SwsAApM0AAAAAT5MnkywAAAHAAGg3YQMBYAPAAHkVXAADk0mcawAAAAEBAZNcAAAAwABoLGADwAB5FQAAXAE+Bk6ThpONAACWnGADvjoBFpOhhZOPwFWon65/wAB5F06TwpPHAACClGADwABkWQEWk9uFk8nAVaifrjfAAHkYTpUnAAAAwABd6GADwACXEABOlUWVUAAAhLZgA8AA/FUBKkmVXyEWlWmHlWTAVajTvQnAAGRiPgJOliqWOQAAtOhgA7yIARaWSxaWOy604cAApLLAAKTStOi9NkmWYxyWehaWZy7AAGg2wACkssAApNbAAGg4AgACh5aMwFWo0xSWksBVqSsKAADAAKTnPgE9FZavwFWo8wgclu8Wlt0WltEur//AAKTXntHAAF4jwABd+wIAAoeW+cBVqNMUlv/AVakrCgAAwACPLkmXHyGClyTAVag/PgI9FZe3wFWpBAkpPRWX1MBVqPMIHJgVFpf0FpfoLq//wACk157RwABeI8AAXfsCAAKHmB/AVajTHJg1FpglLrThwACkssAApNK05gEAAYaYScBVqLUAvUcAwACPLj8/SZhrIoKYb8BVqD8AIRyYoBSYjsBVqPMIAEgBAAErAMAA/3U+AT0XmLqDmLPAVahjwABd6BSYzsBVqPMIAMAApMQ+BE6ZCZkSAADAAFLtYAPAAJcQARyZLYGZIMBVqCVLAQABFplAhZkuwFWon8AAUx3AAHkZAMAA/wVJmVwcmYQWmXKFmWDAVaifwABTHcAAeRlIAQABKwDAAP91PgFKmckAP0mZ4yEcmfkUmefAVajzCABIAQABKwDAAP91PgFJmg4UmhLAVakECQA+AT0VmpjAVaprCh+ap8AAl68DAAMnZB+a3sAAl+QBAAEWmvcWmvAuuLfAAKSywACk08AASabAAGXdABSbGcBVqPMIAAA+AT0Vm0zAVaprChSbV8BVqPMIAD9Jm4ghHJuVFJuMwFWqawoASAEAASsAwAD/dT4CTpu1m8cAAMAASf5gA8AAlxoBHJveFpvXLri3wACkssAApNOwlgEAARab9xab7Bab5S64t8AApLLAAKTTuIDAAGW4wABJ/sAAZrcAwABmLj0cnByDnBXAVahjwABoMwMAA4CcKcBVqBkUnDfAVatpCwAUnErAVaprCgAAwACkyj9PnHKcdwAAAcAAaDlhAwFgA8AAeRxcAAOciJ57AAAAAQEBnJMAAACkEGADwAB5HAAAXAE+BE6crpy7AADAAFK0YAO+EwEWnMOGnL3AVawKmibAAHkeSZzOFpzYhpzSwFWsCsAAUrHAAHkfPgE9HJzyg5zrwFWoY8AAaDEDAAOHnQnAVaweHJ0eFp0XLri3wACkssAApNOwfAEAAYedKcBVrB4AwABmLBydOmqdOGADwACZfsABIyEgAQABJ8AATH8AwACZgADAAKTIP06dXZ1qAACE8WADwAB5PQEWnXKGnWzAVawKhPHAAHkgSZ2GIRydlxSdisBVrLQIAEgBAAErAMAA/3U+Ak6du53AAACCbWADwACXEAEcnc4uwABoOsAApLICAAIWne8WneMur//AAKTXsG/AAF4qFJ34wFWstAgAAMAApNs9HJ4Wg54PwFWoY8AAaDIDAAOHnjPAVaweHJ5IFp5BLri3wACkssAApNOwgAEAAYeeWcBVrB4AwABmLRSeaMBVrPAJAADAAKTJPz0cnoIuwABoO8AApLIDAAOAnp7AVagZhJ6swFWogIWey8BVq+sAwACk3kme5Bye9YCe6MBVqBlIAQABFp8IFp74LrUdwACkssAApNGyYLnhAMAA/3U+Ak6fL580AACClGADwABkWQEenzbAALWoAAAAAEmfZSEcn26Gn2nAVa3RSAEAASsAwABkaT4ETp+Sn50AAMAAXflgA8AAlxABH5+jwACX/gAAAABOn8qf0wAAwABS7WADwACXEAEcn+EWn9UuwABU1sAApLLAAKTVwABSxQQABBagAy64t8AApLLAAKTTFqAXFqALLq//wACk17BvwABeKoagIMBVrdGHoCbAVa4GAMAAeD1OoEagWAAAwABJ/mADwACXGgEcoG0WoGYuuLfAAKSywACk07CWAQABFqCGFqB7FqB0Lri3wACkssAApNO4gMAAZbjAAEn+wABmtwDAAGYuPRygqYOgosBVqGPAAGgzAwADgKC2wFWoGRSgxMBVroMJABSg18BVriMIAADAAKTKPz9KoPQBg6D7wFWoYwbAAKTbgbyjlqOnqNgAAMAAaDrAAKSyAAAAAQOju6jYAAAAAgICo8sAAACwb2ADwABeQwCj4QAAAITxYAPAAHk9AABgA8AAlxABPgVJo/UWpAaBo/nAVa9Ct83AAHk/PgFKpBkBH6QkwACYeQAAAAA/SaREFqRVgaRIwFWvQsAAS5fAAHlFPgFKpGoBHKRzaqRxYAPAAJl+wAEjISACAAInwABoPBykpRakmS7AAFTWwACkssAApNXAAFLOAQABFqTMgaS/wFWvQmHAAHlDAMAAeD8AwACZgD9PpOGk8gAAAZ8LYQMBYAPAAGQZYAPAAJcQAAOk/aVqAAAAAQEBpQ8AAACCcGADwABkGQAAYAPAAJcQAT4BSqUhAR+lLMAAl/YBAAEcpTwuwABoPcAApLIBAAEWpV4WpVaDpU3AVbAMlnvAAGQbgL2+AQDAAKTdAE+lcaWCAAABsDFhAwFgA8AAZBlgA8AAlxAAA6WFpfQAAAABAQGllwAAAIJwYAPAAGQZAABgA8AAlxABPgFKpakBH6W0wACX5AEAARylxi7AAGg9wACksgEAARal6Bal4ISl18BVsIOWe8AAZBuAvb4BAMAApN0ASaX7HKYWFqYMgaX/wFWvQlvAAHlBlosBAAE0phwDphymPQAAAAEBAaYmAAAAgpRgA8AAY8sAAGADwAD8VQFKpi8BFqY0hKYvwFWw/YedwABj0ADAAP6QPgFKpkgBHKZXgKZPwFWvNMAARSQAAAAAwABeSj4CTqaepqQAAICWYAPAAJcQARymsC7AAGg+wACksgMAA4Cmz8BVrzQWpuWBptjAVa9CW8AAeUGDpvDAVbBhAMAApNxJpvwWpw2BpwDAVa9Cs9rAAHlAPgJOpz6nRgAAoXddA8AA/n0BYAPAAJcQARyoIRaoFoGoCcBVr0Ka6sAAeUKAqwEBYAPAAJcQATSoJQOoJahAAAAAAQEBqCYAAACClGADwABjywAAYAPAAJcQAUqoLwEcqDqCqC/AVa/qIAEAASaoOwGFqDvAVbHjYAPAAGQZAAAAwAD+iEqoSwEcqFRqqFJgA8AAmX7AASMhIAIAAifAAFLuMahxYAPAAP9oAoWocsBVsaGEqHvAVbFLAMAAmYA+AUqomwEcqKRqqKJgA8AAmX7AASMhIAIAAifAAGg8hKjAwFWxSwDAAJmABsAApNyBvKjdqO6qRwAAwABoPsAApLIAAAABA6kMqkcAAAADAwOpHAAAALBvYAPAAF5DAKk0AAAAhYVdA8AA/r8BYAPAAGPLAKlOAAAAwABSzF4DAAEBAWADwABkGQABVwPAAHf0AGADwACXEAAAYAPAAJcQAT4CTql3qYAAAIh5XQPAAP6/AWADwACXEAEcqfscqZGBqYLAVbK8gKsBAWADwACXEAE0qZUDqZWp8AAAAAEBAamfAAAAgpRgA8AAY8sAAGADwACXEAFKqbQBHKnAFqm0LsAAVNbAAKSywACk1cAARtQDAAOAqdbAVbKug6nfwFWzPYKp5cBVstEAwAB4PgDAAP6IgK0BAAABhXYqwAD+k0qqGAEfqiPAAJipAQABg6o6wFWzAQAGwACk3YG8qkyqU6tJAADAAGg9wACksgAAAAEDqmOrSQAAAAEBAaprAAAAgL1gA8ABAAIAAGADwAEAAgE+Aj2IqvvAVbPZHKsHgKsCwFWz2YLoAgACJ4bRJ4C1AMABACJKqyEBHKsvFqsoLri3wACkssAApNPAAEbiAQABgKtAwFWz2QDAAGb1BsAApN6BvKtOq1OuGgAAwABoO8AApLIAAAABA6tlrhoAAAADAwOreQAAAJomYAO+EwCroQAAAMAAaDdeAwABAQFgA8AAeRUAAVcDwACktABcAKvLAAAAwABoP2EDAWADwAB5HFwAAFwBPgVOrAWsDwAAwABoQF0DlOIBYAO+EwEfrBWVAgABYAO+EwAATqxbrGcAAMAAUr9gA8AAeSgBHKyCFqx0FqxpLsAAXWrAAKSywACk1MAAUpTAAHf7SwEAAYCsg8BVtGEAwAB5OE6soaysAACbRV0DwAD+fQFgA8AAeRwBFqy6hKyuwFW0ycAAUqzAAHkySazGIRys1YWsysBVtQlIAQABKwDAAP91PgFGrOatDqz1AAAArhlgA8AAeRwAha0CwFW1CT4BSa0YIRytJ4OtHcBVtKeDHAEAARatOoatMMBVtVCaJsAAeR4AlO0+Aj0crVmCrUzAVbSNIAEAAYatWsBVtVAAAD0crXqDrXDAVbSnVgEAARatiIatfsBVtVCaJsAAeR4AlO4/P0mtqyEcrcgWrbuEra/AVbTJhVbAAHksSAEAASsAwAD/dT4BPRyt9oGt2cBVtG0gAQABFq4DhK33wFW0yYVWwAB5LAAAPwAAVaf3AFWvDgBVsogAVbOzAFW0OwBVthAAAAAFAsAApOGBvK5rrnG3gAPAAGhBAAABYAHAAP9oAAFdAcAAZH8CYAPAAPxVYAO8iAIEwACk5IG8rt2u7Am1HcAApLIAYAO5hwAEwACk5YG8rwWvFAm04cAApLIAYAO9MgABBcAApPSBvK8ZrxmvZgAAAAOvOq9mAAAAAgICr0AAAAS1HWADuYcAr1YAAAS04WADvTIAAGADwACk4QE/AwgBwACk5IAAwFW2qAgBwACk5YEAwFW2tAkBrxnAAP9+AAAAAAwGwACk54G8r7ivvbAVAADAAGg4AAAAAQOvzrAVAAAAAgICr9gAAACClGADwABjywCv6QAAALSkYAO8iAAAYAPAAPxVAUqv/gEcr/4umvECAAKAsATAVbcRgbAKwFW3HwDAAKToBsAApOiBvLAasCuwcwAAmvEBarAbYAPAAP9oAgAAAQOwMLBzAAAAAgICsDoAAAiClGADwABjywCwSwAAIB9gA7yIAABgA8AA/FUBSrBYARywXYCwWMBVt32EUgICYAPAAPxVYAO8iAIugbBqwFW3iwDAAGPfBsAApOmBvLB4sH2xMgAAh08AAAABA7CGsTIAAAACAgKwlgAAAIWFXQPAAP6/AWADwABjywCwqAAAAB9gA7yIAABgA8AA/FUBPgJGsLiw1bDGAAAAgpRgA8AAY8sAgLDOwFW36D4BSbDdIRyw4i6a8QIAAoKw6MBVuBeBsO7AVbf9AMAApOg+AUqxAwEqP0qxIwEpBsAApOqBvLE3sUiyMAAAtR4BarE4YAPAAP9oAgAAAQOxWbIwAAAAAgICsWcAAAiClGADwABkbwCxeAAAIB9gA7yIAABgA8AA/FUBPgJJsYghHLHOHLGcFrGMLrThwACkssAApOW1AgEAARaxvxaxry61HcAApLLAAKTkmzm5jwC9RUgBAAGBsdnAVbiTAMAA/3U+AUqx6wEqP0qyAwEcsgoumvECAAIWshWAshDAVbiFhdvAAGRxgbIjwFW4kwDAAKToBsAApOuBvLI1skayhQAAhowBarI2YAPAAP9oAgAAAQOyVrKFAAAAAgICsmMAAAiClGADwABkRACydAAAIB9gA7yIAABgA8AA/FUBSrKBASkGwACk7IG8soqym7LSAAC1HwFqsotgA8AA/2gCAAABA7KnstIAAAACAgKysAAACIKUYAPAAGRPALLBAAAgH2ADvIgAAGADwAD8VQFKss4BKQbAAKTtgbyy17Los1AAAIakAWqy2GADwAD/aAIAAAEDsvizUAAAAAICArMFAAAIgpRgA8AAZAYAsxYAACAfYAO8iAAAYAPAAPxVAT4BSrMmARyzLS6a8QIAAhazOICzM8BVuei1IMAAZAqBs0PAVbn2AMAApOgGwACk7oG8s1WzZrQ8AACGlAFqs1ZgA8AA/2gCAAABA7N4tDwAAAACAgKzhwAACIKUYAPAAGPzALOYAAAgH2ADvIgAAGADwAD8VQE+AkmzqCEcs90cs7wWs6wutOHAAKSywACk5bUCAQABFrPUgLPPwFW6XpZ7wABj9QC9RUgBAAGBs+DAVbpsAMAA/3U+AUqz8gEqP0q0CgEctBEuh08CAAIWtCCAtBvAVbpehTjAAGP2gbQvwFW6bADAAKTpBsAApO+BvLRBtFK2NwAAhpoBarRCYAPAAP9oAgAAAQO0Y7Y3AAAAAgICtHEAAAiClGADwABkWQC0ggAAIB9gA7yIAABgA8AA/FUBPgROtJe0ngAAgXZgA8AA/FUBIiIiHLSgLprxAgACFrSrgLSmwFW7HIVVwABkW4G0t8BVuyoAwACk6AActMwuh08CAAIWtNuAtNbAVbsctSHAAGRcgbTrwFW7KgDAAKTpABy1AC6HTwIAAha1D4C1CsBVuxy1IsAAZF2BtSfAVbsqAMAApOkAHLU8LodPAgACFrVLgLVGwFW7HLUjwABkX4G1YMBVuyoAwACk6Um1byGCtXTAVbtASrV8ASo/RrWOtcy1qAAAAKl6YAPAAGQoABa1vYC1uMBVuxyizcAAZGA+AUm11CEctdkumvECAAIWteyDtd/AVbv/hYfAAGQugbXzwFW7KgDAAKToPgFKtggBKj9KtigBKQbAAKTwgby2PLZNtrMAALUkAWq2PWADwAD/aAIAAAEDtma2swAAAAICAraDAAAIgpRgA8AAZCgAtpQAACAfYAO8iAAAYAPAAPxVAT4BSrakASkGwACk8YG8tri2ybchAAC1JQFqtrlgA8AA/2gCAAABA7betyEAAAACAgK28AAACIKUYAPAAGQZALcBAAAgH2ADvIgAAGADwAD8VQE+AUq3EQEqBsAApPKBvLcmtze3fgAAho4BarcnYAPAAP9oAgAAAQO3RLd+AAAAAgICt04AAAiClGADwABkOgC3XwAAIB9gA7yIAABgA8AA/FUBPgFKt28BKQAAVbbvAFW3UwBVt8gAVbhbAFW5HgBVuW4AVbm+AFW6NABVuvIAVbxVAFW8pwBVvPkAVb1LAAAADAAAAAGBvABVvYcAVaAHAFWgwQBVoVsAVaY3AFW2LQBVvYQAAAAFAFW9hwAAAAAAAgbAAKT1wABoQoG9AAAAAAAAAQLAAKT2gb2Ei4SRiFYDwABUyAAAAWABwAD/aAAABgTAAKT4gb2FH4VPBYerAGADwACk9gFqhSxgA8AApPbAAXPRBMAApPmBvYWfhdsFwABoQwBgA8AApPYBaoW7YAPAAKT2wAFz5wTAAKT6gb2GGIZYBcAAaEQAYAPAAKT2AWqGNmADwACk9sABc/0EwACk/IG9hsGG1gnAAGhFwACk9QBgA8AA/FUABMAApP2BvYblhv4JwABoRsAApPUAYAPAAPxVAATAAKT+gb2HDYchCcAAaEfAAKT1AGADwAD8VQABBcAApQWBvYclhyuHoQGAtcAApPUAA4c5h6EAAAADAwOHRAAABMAAaEVgA8AA/FUAh2QAAATAAGhGYAPAAPxVAIeIAAAEwABoR2ADwAD8VQAAYAPAAKT2AT8ECAHAAKT8gADAVb7GCAHAAKT9gQDAVb7WCAHAAKT+ggDAVb7mCQGHK8AA/34AAAAAAwbAAKUAgb2Hpoevh9oBAMAAVWoAAAABA4fDh9oAAAAAAAAAYAPAAPxVAUqHxgEWh8YuwABoR8AApPXAAKT+BsAApQGBvYfeh+eIHAEAwABVcQAAAAEDiACIHAAAAAAAAABgA8AA/FUBSogDARaIAy7AAGhGwACk9cAApP0GwAClAoG9iCCIKYhUAQDAAFVwAAAAAQOIPIhUAAAAAAAAAGADwAD8VQFKiD8BFog/LsAAaEXAAKT1wACk/AAAVb8xAFW/bwBVv60AVb/rAAAAAwAAAAGBvQBVwAMAVb3GAFXAAAAAAAEAVcADAAAAAAACBsAApQYAgb4AAAeA2gAApLEAAIDzAADAAIdmAACBFAAAvx8AAIFFAADAAEMwAACBbgAAwAB8kwAAgYwAAMAApV0AAIGqAADAAEV4AAAAAAAFAsAApQeBvoHpge+C3APAAGhIAAABYAHAAP9oAAACBMAApQmBvoIRgiAJwABoSQBgA8AASWQABMAApQqBvoI4gj4JwABVvABgA8AApV4AAQXAAKUPgb6CpoKmgtoAAAADgreC2gAAAAICAoK9AAAEwABoSWADwABJZACC0wAABMAAVbxgA8AApV4AAGADwAClBwE/AwgBwAClCYAAwFXA2wgBwAClCoEAwFXA6wkBgqbAAP9+AAAAAAIGwAClDIG+gkKCR4JtAACj4gAAAAEDgk6CbQAAAAAAAABgA8AA/FUBSoJUASWCZBaCVC7AAGhJwAClCWADwABJawbAAKUNgb6CcYJ2gqIAALv1AAAAAQOCgIKiAAAAAAAAAGADwAD8VQFKgoYBJYKWFoKGLsAAaEnAAKUJYAPAAEl0AABVwSoAVcFrAFXBrAAAAAICwAClEIG+gt+C7oVXB8AAaEoAAAFgAcAA/2gAAAEEwAClEoG+hSuFMQmCSQBgA8AAh3ABKwAJBsAApRSBvoL+gwaDewQBAAAAAAEDgxGDewAAAAICAoMoAAAAhCZgA8AAfKAAgzwAAACCSWADwACHcAAAYAPAAKUQAT4BSoNKAR+DVcAApUECAAKAg2fAVcITgYNwwFXCIQAGwAClFoG+g3+DhIPVAALAAFXWAAAAAQODkYPVAAAAAgECg6QAAAClwmADwABDNACDzgAAAJlaYAPAAIdnAWoAYAPAAP8leQBcAAbAAKUXgb6D2YPehDIAAsAAVdUAAAABA4PuhDIAAAACAQKEAQAAAKXCYAPAAEM0AIQrAAAAmVpgA8AAh2cBagBgA8AA/yV5AFwABsAApRiBvoQ2hDuEfgACwABVxwAAAAEDhEeEfgAAAAEBAYRNAAAAiNthAwJgA8AASWtgA8AApV5cAABcAAbAAKUZgb6EgoSHhNcAAsAAVbsAAAABA4SWhNcAAAABAQGEowAAAIjbYQMCYAPAAEl0YAPAAKVeXAAAXAAGwAClGoG+hNuE4ITwAALAAGhLAAAAAQOE7oTwAAAAAAAAAGADwAD8VQAGwAClG4G+hPSE+YUGAALAAFXGAAAAAQOFBIUGAAAAAAAAAGADwAD8VQAGwAClHIG+hQqFD4UWAAKCjAAAAAEDhRSFFgAAAAAAAABcAAbAAKUegb6FNYVPhVUBApmMAAAAAQOFVYVVAAAAAAAAAF0DwAD+vwFgA8AAh2cAAABVwfQAVcJWAFXCoABVwuoAVcMnAFXDZABVw44AVcO4AFXD2wBVxAoAAAAJAsAApR+BvoX/hgWJoAPAAGhMAAABYAHAAP9oAAFgAcAApRABBMAApSGBvoZJhlEJpS4AYAO23QABBcAApS6BvoZWhlaGdAAAAAOGZYZ0AAAAAQEBhmsAAASlLmADtt0AAGADwAClHwE/AggBwAClIYAAwFXEiwkBhlbAAP9+AAAAAAkGwAClI4G+hnmGiodWAADAAFXWAWqGemADwAD/aAIAAAEDhpeHVgAAAAIBAoaqAAAApcJgA8AAQzQAhtQAAACZWmADwACHZwFqAGADwAD/JXkAXAE+AT0chusWhuIupS7AAKUhpcMCAAJqhvlgA7cPwADHnCfAAGhNALbjBsAApSSBvodbh2yIPgAAwABV1QFqh1xgA8AA/2gCAAABA4d8iD4AAAACAQKHjwAAAKXCYAPAAEM0AIe5AAAAmVpgA8AAh2cBagBgA8AA/yV5AFwBPgE9HIfQFofHLqUuwAClIaXDAgACaofeYAO3D8AAx5wnwABoTgC24wbAAKUlgb6IQ4hUiHQAAMAAVccBaohEYAPAAP9oAgAAAQOIYIh0AAAAAQEBiGoAAACB8GADwAD+EQAAXAE+AAbAAKUmgb6IeIiJiKwAAMAAVbsBaoh5YAPAAP9oAgAAAQOImIisAAAAAQEBiKIAAACB8GADwAD+EQAAXAE+AAbAAKUngb6IsIjBiMoAAIKMAWqIsWADwAD/aAIAAAEDiMaIygAAAAAAAABcAT4ABsAApSiBvojOiN+I+AAAwABoSwFqiM9gA8AA/2gCAAABA4jtiPgAAAAAAAAAYAPAAPxVAUqI8wEqBsAApSmBvoj8iQ2JIwAAwABVxgFqiP1gA8AA/2gCAAABA4kYiSMAAAAAAAAAYAPAAPxVAUqJHgEqBsAApSuBvokoiU6JcQEAmYwBaokpYAPAAP9oAgAAAQOJVYlxAAAAAAAAAF0DwAD+vwFgA8AAh2cBSolYAWqJWF0DwAD+vwFgA8AAh2fAAPyfBsAApSyBvol1iZCJngEAgkkBaol2YAPAAP9oAgAAAQOJl4meAAAAAAAAAGADwACHcAFKiZoBKwAAVcS6AFXFNgBVxbIAVcXxAFXGMABVxl8AVcaYAFXG0QBVxyIAVcdZAAAACQLAAKUvgb6KgoqIlbEDwABoTwAAAWABwAD/aAABYAHAAKUQAwTAAKUxgb6K0YrYCYQmAGADwAB8oAAEwAClMoG+ivmK/wmCSQFqit1gA8AA/2gCYAPAAIdwAATAAKUzgb6LIYsmCcAAaFAAXQPAAP6/AWADwAClBwABBcAApUGBvosriyuMDAAAAAOLPIwMAAAAAgICi1MAAACEJmADwAB8oACLYQAABIJJYAPAAIdwAABgA8AApS8BPgJAHIvYHIvPFovEgIu8wFXIG8AAVNHAAHzASwEAARaL0C6CScAApTIAwAD/BUgBAAErAMAA/3WLvIvfAD0ci/kWi+6Ai+bAVcgbwABU0cAAfMCAvwIAAhaL+i6CScAApTIuAMAA/wYECAHAAKUygQDAVcgpCADAAKUxgIuAwFXIGwgAwAClMzGLrGADwAClBwAJAYsrwAD/fgAAAAAJBsAApTaBvowRjCmMbgEAwABU7MAApQYAAAABA4w+jG4AAAAAAAAAYAO/RQFKjEcBFoxbFoxPFoxHLoQmwAClMaVAwAB8xLHGwABOjgbAAKU5gb6Mc4yEjp8AAMAAVdYBaox0YAPAAP9oAgAAAQOMkY6fAAAAAgECjKQAAAClwmADwABDNACMzgAAAJlaYAPAAIdnAWoAYAPAAP8leQBcAT4FTozpAAAAwABVyGADwABG0ABJjP8cjQmBjQPAVclkSAEAASsAwAD/dT4BPYqNGsBVyYEfjTvAAElyAwADFo1CLsAAVOzAAKUGwAClNhaNWC6CScAApTKAjWDAVclWAD4BPYqNh8BVyYEfjajAAElzAwADFo23LsAAVOzAAKUGwAClNoGNzcBVyWSAjdTAVclWAE6OAI4HAADAAFW8YAPAAKVeAR+ODcAApZABAAEWjigWjiAuhCbAAKUxwABUz8AAfL0APRyORBaOPC6EJsAApTGCjAEAASaOSgGCjkrAVcmBYAPAAEemAMAAfOM9HI5nFo5hLsAAaFDAAKUzVgEAAR+Ob8AApQ8CAAImjoEBgo6BwFXJgWADwABJZIOOk8BVyhIAAMAA/tAGwAClOoG+jqSOtZF0AADAAFXVAWqOpWADwAD/aAIAAAEDjsWRdAAAAAIBAo7YAAAApcJgA8AAQzQAjwIAAACZWmADwACHZwFqAGADwAD/JXkAXAE+BU6PHQAAAMAAaFFgA8AARtAASY82HI9AgY86wFXK4kgBAAErAMAA/3U+AT2Kj1HAVcr/H491wABJeQMAAxaPfy7AAFTswAClBsAApTYWj5UugknAAKUygI+dwFXK1AA+Aj2Kj8TAVcr/H4/owABJegMAAxaP+i7AAFTswAClBsAApTaBkBDAVcrigJAXwFXK1ABAIRaQqBaQoYGQm8BVyuKCScAAh2rAAE2owACHeZCakLQATpDPkNYAAMAAVbxgA8AApV4BH5DcwAClkAEAARaQ9xaQ7y6EJsAApTHAAFTPwAB8vQA9HJETFpELLoQmwAClMYKMAQABJpEZAYKRGcBVyv9gA8AAR6YAwAB84z0ckTkWkTMuwABoUMAApTNWAQABH5FBwAClDwIAAiaRUwGCkVPAVcr/YAPAAElkg5FowFXLsgAAwAD+0AbAAKU7gb6ReZGKkicAAMAAVccBapF6YAPAAP9oAgAAAQORlpInAAAAAQEBkaAAAACI22ADwAD+EQAAXAE+AUaRrpHVkcUAAACD1GADwAClBwAWkc4uwABoUMAApTM+AUmR3RyR54GR4cBVzIyj4gAAAADAAKUMPRyR+ICR8sBVzHQgAgACFpH/gZH5wFXMjMAAaEnAAKUJFpIWgZIQwFXMjMAAVbzAAKUKAAA/BsAApTyBvpIskj2S4AAAwABVuwFqki1gA8AA/2gCAAABA5JMkuAAAAABAQGSVgAAAIjbYAPAAP4RAABcAT4BRpJkkouSewAAAIPUYAPAAKUHABaShC7AAGhQwAClMz4BSZKTHJKdgZKXwFXNObv1AAAAAMAApQ09HJKxgJKrwFXNISACAAIWkriBkrLAVc05wABoScAApQkWks+BksnAVc05wABVvMAApQoAAD8GwAClPYG+kuWS9pN7AADAAGhLAWqS5mADwAD/aAIAAAEDkwSTewAAAAAAAABgA8AA/FUBPgJGkw2TNJMkAAAAg9RgA8AApQcAFpMtLsAAaFDAAKUzPgFJkzwck0aAk0DAVc3du/UAAAAAwAClDUqTVAEpP0qTawEqBsAApT6BvpOAk5GUEAAAwABVxgFqk4FgA8AA/2gCAAABA5OclBAAAAAAAAAAYAPAAPxVAT4CRpOlk8yTvAAAAIPUYAPAAKUHABaTxS7AAGhQwAClMz4BSZPUHJPegJPYwFXOVqPiAAAAAMAApQxKk+kBKT9KlAABKgbAAKU/gb6UFZQmlKQAAIKMAWqUFmADwAD/aAIAAAEDlCuUpAAAAAAAAABcAT4BPRyUkhaUhhaUfi6EJsAApTHAAFTRwAB8wIReAQABFpSZLoJJwAClMgDAAP8OBsAApTeBvpSplM+VrwEAmYwBapSqYAPAAP9oAgAAAQOU1pWvAAAAAAAAAF0DwAD+vwFgA8AAh2cBPgNOlPKU+QAAgXZdA8AA/r8BYAPAAIdnAStGlQWVNJUaAAAAlntgA8AAh2cAFpUsFpUlLoJJwAClMpmMwACHdT4CPSMclUOAlTzAVc8sSAEAASsAwAD+6YiVPMBVzywxlVhgA8AAh2cAKwFdA8AA/r8BYAPAAIdnPRyVaYCVYsBVzyxWAQABgZVtwFXPSADAAP7QSpWBATUAAAABAF0DwAD+vwFgA8AAh2cBgJWIwFXPLCMclY+BAMBVz8FIAQABKwAAapWSXQPAAP6/AWADwACHZ8AA/J+BAMBVz8EBXQPAAP6/AWADwACHZwAAVcjeAFXJKgBVyqgAVcxIAFXM9QBVzaIAVc4bAFXOlABVzvAAVdAUAAAACQLAAKVCgb6WHJYrn58HwABoUgAAAWABwAClLwAAAQTAAKVEgb6W35cKCcAAVy0AXQPAAP7xAmADwACHcGADwAD+GwEelvTAAP74AAJgA8AAh3BgA8AA/hsAAAEFwAClS4G+lw+XD5d1AAAAA5ckl3UAAAACAgKXOwAAAIQmYAPAAHygAJdPAAAAgklgA8AAh3AAAGADwAClQgE/AQkAl1/AAKVBAgACgJdlwFXQt4GXbsBV0MUABAbAAKVGgb6XepeLml4AAMAAVdYBapd7YAPAAP9oAgAAAQOXmJpeAAAAAgECl6sAAAClwmADwABDNACX1QAAAJlaYAPAAIdnAWoAYAPAAP8leQBcAT4BSZfjHJftgZfnwFXRMkgBAAErAMAA/3U+BE6Y25jsAADAAFXIYAPAAEbQAR+Y8sAASXIEAAMWmQQuwABU7MAApQbAAKU2FpkaLoJJwAClMoCZIsBV0SQBu1EpTplzmXoAAMAAVbxgA8AApV4BH5mAwAClkAEAARaZmxaZky6EJsAApTHAAFTPwAB8vQA9HJm5FpmxLoQmwAClMYKMAQABJpm/AYKZv8BV0WhgA8AAR6YAwAB84z0cmd4WmdguwABoUMAApTNWAQABH5nmwAClDwIAAiaZ+AGCmfjAVdFoYAPAAElkg5oKwFXRqQAAwAD+0D4BPR2aLcAAVdYCAAKAmjvAVdEkgZpOwFXRMgDAAKU5BsAApUeBvppjmmia4AAAwABoUwAAAAEDmn6a4AAAAAEBAZqPAAAAmVpgA8AAh2cAAGADwAD8VQE+AUqanAEiIRyaqYCao8BV0oFIAQABKwDAAP91AByawxaatC7AAFctwAClRIdkAQABFprVgJrPwFXSgYJJwACHagDAAP8EBsAApUiBvprlmvaeuQAAwABV1QFqmuZgA8AA/2gCAAABA5sGnrkAAAACAQKbGQAAAKXCYAPAAEM0AJtDAAAAmVpgA8AAh2cBagBgA8AA/yV5AFwBPgFJm1Ecm1UuwABoUwEAAYGbbMBV0xcAwAClRz4IQCEcnFGBnEvAVdMXSAEAASsAwAD/dZxLnFgATpxunHQAAICWYAPAAEbQARycjxacfhacdi6EJsAApTGkgMAAfKK5+QIAAhycrBacni7AAFctwAClREsBAAEWnLOBnK3AVdMXgknAAIdqAMAA/wUWnMQWnLwuhCbAAKUxpUDAAHzEAMAARgA9HJzuFpzgFpzYLoQmwAClMcAAVM/AAHy9wABVQgIAAhac+i6CScAApTKCnQLAVdNrAMAApYNAHJ0sFp0lFp0egZ0YwFXTF4JJwACHapmMwACHdYMcAQABgZ01wFXTFwDAAP6MnRidOwBOnVGdZQAAwABoUWADwABG0AEfnXXAAEl5AwADFp1/LsAAVOzAAKUGwAClNhadlS6CScAApTKAnZ3AVdMJAE6dxZ3MAADAAFW8YAPAAKVeAR+d0sAApZABAAEWne0WneUuhCbAAKUxwABUz8AAfL0APRyeCxaeAy6EJsAApTGCjAEAASaeEQGDnhHAVdQ/YAPAAEemAMAAfOM9HJ4zFp4tLsAAaFDAAKUzVgEAAR+eO8AApQ8CAAImnk0Bg55NwFXUP2ADwABJZISeYsBV1H0AAMAA/tA+AT0dnoXAAFXVAgACgJ6WwFXTCYGeqcBV0xcAwAClOgbAAKVJgb6evp7Pn50AAIKMAWqev2ADwAD/aAIAAAEDntSfnQAAAAAAAABcAT4CRp8nn1afNwAAAIJJYAPAAIdwABafUBafQS7AAFctwAClRINowAD/Ez4BPRyfchafZhafXi6EJsAApTHAAFTRwAB8wIReAQABgJ95wFXVZwDAAP8OPR2fkoKMAAAAAMAApT8AAFXQ+ABV0l8AVdLdAFXVMwBV1cQAAAAEAAAAAYG+AFXV4ABVwHEAVcG9AFXENwBVx4YAVdBBAFXV3QAAAAUAVdXgAAAAAAACBsAApUwAgb8AAAWA2gAAgi6CCACBAwAApLEAAIEcAAC/HwAAgU0AAMAAfJMAAIFrAADAAEV4AAAAAAABAsAApU2Bv4HIgc6J4APAAGhUAAABXQGaRAFbAAACBMAApU+Bv4IVghwJhCYAYAPAAHygAATAAKVQgb+CV4JkGIF2AGADwABG0AErAQXAAKVcgb+CaYJpgooAAAADgnyCigAAAAEBAYKCAAAEhCZgA8AAfKAAAGADwAClTQE/AggBwAClT4AAwFXWsAkBgmmaegAAAAAHBsAApVOBv4KPgqeC7AEAwABU7MAApUwAAAABA4K8guwAAAAAAAAAYAO/RQFKgsUBFoLZFoLNFoLFLoQmwAClT6VAwAB8xLHGwABOjgbAAKVVgb+C8YMCg2MAAJgtAWqC8mADwAD/aAIAAAEDgw2DYwAAAAEBAYMWAAAAg/NgA4JMAABcAT4BPR6DIrb9AgACaoMrYAO3D8AAx5wkg14CJ8AAaFWAg1nAVddVAAbAAKVWgb+DaIN5hwcAAJg3AWqDaWADwAD/aAIAAAEDg4qHBwAAAAEBAYOZAAAAg/NgA4TsAABcAT4EPRyDqoCDpcBV17WEUgEAARaDsS6EJsAApU8AhPBOg8yD1wAAgm9gA8AARtABHIPhFoPZLoQmwAClT6EvAAAAAMAAfN9JhT0WhW4chUyBhUHAVdfktLkBAAEWhVguwABU7MAApUzAAKVTAMAARyCzvb8pPgI9HIWJLsAAZi4BAAEchZAuu9kBAAGBhZrAVdfkAMAApVoAwAClWEqFrgA/PRyG5i7AAGYuAQABHIbtLrvZAQABgYb3wFXX5ADAAKVaAMAApVgGwAClV4G/hwyHHYd1AACF2QFqhw1gA8AA/2gCAAABA4c1h3UAAAABAQGHTQAAAIPzYAOGVAAAXAE+AT0ch16Ah1nAVdi1hFMBAAEuAIZbBsAApViBv4d6h3+H7AAAwABmLgAAAAEDh4WH7AAAAAEBAYeTAAAAgm9gA8AARtAAAFwBPgE9F4elLoF2IxyHthaHry6BdsAApVBIAQABKwDAAP91gIfBwFXY/ByHzi7AAGhWAgACFofVLoF2wAClUICH3cBV2PwAwAClWQFgA8AARtDAAKVQBsAApVmBv4fxh/6IzgAAwABoVgAAAAEDiASIzgAAAAICAogSAAAAhc1gA8AARtAAiCUAAACFz2ADwABG0AAAYAPAAEbQAT4DTog/iEsAALnoYAPAAEbQAR+IWcAAS0sDAAOAiGfAVdmDgYhtwFXZkRaIiRaIdC7AAFTswAClTMAApVOF2L9OAD0ciKIWiJouhCbAAKVPVgEAAYKIpsBV2aoAwAB9ZEqIuAGCiL/AVdmqBsAApVqBv4jTiOCJ3gAAu9kAAAABA4jpid4AAAABAQGI9wAAAIJvYAPAAEbQAABgA8AARtABPgNOiRaJIgAAuehgA8AARtABNYkwAAABAGADwABLTAEfiTDAAEtRAgACgIk7wFXaMhaJXBaJRy7AAFTswAClTMAApVOF2L9OADUAAAABAFsBF4l0gYlywFXaW6XCFomTgImIwFXaMqXCwABG08AARtOBAMBV2ls9HImyFomqLoQmwAClT1YBAAGBibbAVdpLAMAAfWRKicgBgYnPwFXaSwAAVdbfAFXXKwBV14sAVdiLAFXY2gBV2WEAVdoSAFXa6AAAAAcAAAABgb8AVdsQAFXWSQBV2w0AAAABAFXbEAAAAAAAAgbAAKVdAIHAAAAPgNoAAMAAhvQAAID0AACksQAAgQ0AAL3+AACBMQAAwABjxwAAgVIAAL8fAACBgwAAwABCewAAgaQAAMAAQzAAAIHMAADAAGwRAACB9QAAwAB75gAAgiMAAMAAfm8AAQECwABQjMAAV8OCZwAAwABs1AABAQHAAE28gpUAAMAAToEAAQEBpQuCwAAAwAB8kwAAgt4AAMAARXgAAILzAADAAH5lAAAAAAACAsAApV6BwIOtg7PAAG9zA8AAZe0AAAFgAcAA/2gAAA0EwAClYIHAhX+FrBjAAFUpAF0DwAD+8QJgA75eYAPAAEbQAR6FksAA/vgAAmADvl5gA8AARtAAAATAAKVhgcCFyIX6GMAAaFcAXQPAAP7xAmADvl5gA743AR6F4cAA/vgAAmADvl5gA743AAAEwAClYoHAhhqGIQmEJgBgA8AAfKAABMAApWOBwIYvhjgYwABVWwBgA8AAhw8ABMAApWSBwIZlhq4YwABoWABdA8AA/vECYAPAAGQZYAPAAIdRAR6GhMAA/vgAAmADwABkGWADwACHUQAABMAApWWBwIa/htAJwABN6QBgA73/AATAAKVmgcCG54b0CbS3AGADviUABMAApWeBwIk+iUoJsroAYAPAAGPzAATAAKVpgcCJYIlrCcAASULAAKVdAGADwABsJQAEwAClaoHAiYaJlgnAAFSbwAClXQBgA8AAe+cABMAApWuBwMAAaarAAGm6GMAAaFkAYAO/OgAEwAClbIHAwABssMAAbPwYwABoWgBdA8AA/vECYAO+N2ADvzoBHsAAbNvAAP74AAJgA743YAO/OgAABMAApW2BwMAAbs3AAG75GMAAaFsAXQPAAP7xAmADvl5gA8AAScMBMsAAbvdgA75eYAPAAEnDAAIFwAClj4HAiZuJm4okAAAAA4moiiQAAAAGBgaJrgAABIQmYAPAAHygAIm8AAAEwABN6WADvf8AidQAAAS0t2ADviUAie4AAASyumADwABj8wCKAQAABMAASUJgA8AAbCUAihMAAATAAFSbYAPAAHvnAABgA8AApV4BPwkIAcAApWsrCAHAAKVjKwgBwAClYoAAwFXd9QgBwAClZYEAwFXeAwgBwAClZoIAwFXeEQgBwAClZ4MAwFXeHQgBwAClaYQAwFXeKwgBwAClaoUAwFXeOwkBiZvAAP9+AAAAAAXAAKWQgcCOjo6OkSMAloMAA46gkSMAAAABAQGOrwAAAIPbYAPAAKVeAABgA8AApV4BPw0IAMAApWAejtHAAMMaAQJgA75eYAPAAEbQARaO9YCO78BV3tPAAFUpwAClYAAIAMAApWEWjyeAjyHAVd7TwABoV8AApWEIAMAApWUWj12Aj1fAVd7TwABN6cAApWUIAMAApWYWj46Aj4jAVd7TtLfAAKVmCADAAKVnFo+6gI+0wFXe07K6wAClZwgAwAClYhaP4ICP2sBV3tOEJsAApWIIAMAApWMWkAOAj/3AVd7TwABVW8AApWMIAMAApWkWkCqAkCTAVd7TwABJQsAApV3AAKVpCADAAKVqFpBYgJBSwFXe08AAVJvAAKVdwAClaggAwAClbRaQjoCQiMBV3tPAAGhbwAClbQgAwAClaxaQxICQvsBV3tPAAGhZwAClawgAwAClbBaRBYCQ/8BV3tPAAGhawAClbAkBjo7AAP9+AAAAABwGwAClcIHAiimKOopdAQC2xcAApV0AAAABA4pHil0AAAAAAAAAYAPAAE6FAUqKSgEWilIWikouhCbAAKVipUDAAHzEBsAApXGBwIpiinqKuAEAwABU7MAApV0AAAABA4qPirgAAAAAAAAAYAO/RQFKipgBFoqlFoqYLrbFwAClXcAApXCxxsAATo4GwAClcoHAir2K3IsbAQC1OMAApV0AAAABA4r0ixsAAAAAAAAAYAPAAEKhAUqK/QEWiwUWiv0uhCbAAKVipXDAAHzGBsAApXSBwIt/i4iN3wAAwABVMgAAAAEDi5aN3wAAAAEBAYugAAAAgpRgA8AAY8sAAGADwABjywE+A06LtYu9AACphGADwABjywGAi7/AVeEeSYvJIRyL2haLzS6yusAApWdIAQABKwDAAGQAPgNOi/eMAwAAq85gA74TAR6MD8AAZVgBAAGBjB/AVeE3AEmMLyEcjD+CjDPAVeFrSAEAASsAwAD/dT4BPYmMUsBV4TccjHMWjGkWjFwutsXAAKVdwAClcLjXwABOjMAAR9MCAAKBjI/AVeE3HIy7FoyxFoykLrbFwAClXcAApXC418AATozAAEepAgACHIzwFozmFozZLrbFwAClXcAApXC418AAToy0GQEAARaNCRaM/C6yusAApWeWe8AAY/UAwABlUoKNI8BV4WsAwABlUADAAGVRP0mNQCEWjVIWjUUusrrAAKVnvQnAAGP6PgE9iY1zwFXhNxyNlBaNihaNfS62xcAApV3AAKVwuNfAAE6MwABH0wIAAoGNo8BV4TcWjawusrrAAKVnAMAAZVE/P0qNzQGBjdTAVeE3BsAApXWBwJHHkcySiAAAwABoXAAAAAEDkduSiAAAAAICApHiAAAAloNgA75eAJH0AAAAm6FgA743AABcAT4DQBySHhySFxaSBS7AAGhXwAClYUsBAAGAkhjAVeLFAMAA/wVIAQABKwDAAP91kgWSJQA9HJI+FpIsLsAAaFfAAKVhgL8CAAKAkj/AVeLFgZJHwFXi0QDAAP8GQCIcklYuwABoXQEAAYCSbcBV4sUAwAClewEcknYuwABVOgEAAYCSfsBV4sUAwAClfJJWkoMABsAApXaBwJKNkpqTagAAwABoXgAAAAEDkqOTagAAAAEBAZK2AAAApcJgA8AAQzQAAGADwABG0AE+A06S3JLgAADAAEpGYAPAAEbQATWS5gAAAQBgA8AAR7oBH5LmwABHwAEAARaTBhaS8S7AAFTswAClXcAApXG2RL9SADUAAAABAFsBF5MbgZMZwFXjv6XCgJMvwFXjlMAARtOBAMBV4789HJNOFpNGLoQmwAClYlYBAAGBk1LAVeOtAMAAfWRKk1wBgZNjwFXjrQbAAKV3gcCT9pP7m2cAAIcWAAAAAQOUBZtnAAAABAIClBsAAAC1WmADwACHGwCUOgAAAKXCYAPAAEM0AAKUWQAAAMAAVvJgA8AA/FUBapR3YAPAAPxVAJSLAAAAwABW9GADwABG0AFqAGADwAD/JXlcAT4FSZUVIRaVJoCVGsBV5FzAAFU9wACHH0qVOgA/TpVTAAAAwABKRmADwABG0ABJlYWClYnAVeR5PgE9jJX7wFXkzDUAAAABAGADwABG0AGDlgHAVeSTIxyWDIUAwFXk8UgBAAErAAAcliEWlhkuhCbAAKViwABU8wIAAhaWSYCWPcBV5FyCV8AAhyAWlmcWllIuwABU7MAApV3AAKVxtkS/UgDAAH1lhQDAVeTxAWADwABG0D4BPYyWiMBV5Mwclo4uwABoXgEAAYGWmMBV5GoAwACldj0cluoWlt4uwABVKcAApWCAvwIAAhaW94CW68BV5FyCV8AAhyCElwLAVeTMAMAA/wY9HJeygJemwFXkXMAAV6YBAAE0l8cDl8ebYgAAAAICApfOAAAAloNgA75eAJfgAAAAm6FgA743AABgA8AA/yUBPgROmFGYVwAAwABoX2ADwABtOgEmmFEBhZhZwFXl1GADwABtOk6Yaph2AADAAGhgYAPAAPxVARaYfoeYeMBV5ffAAE2LwABtPkAhHJirFJifwFXmGggASAEAASsAwAD/dZifmLIASZi7IhSYv8BV5hoIAAAhgpjPwFXkeT4DTpq5msUAALnoYAPAAEbQARyaxy7AAEVlAQABhZrRwFXl1ADAAKV/PRya4C7AAGhcAgAChZrwwFXl1Iaa9sBV5eAAwACldT0cmwMuwABVQgIAAoWbD8BV5dQUmxXAVeZzCQAAwAClgz4BPRybOi7AAGhcAgAChZtKwFXl1IabUMBV5eAAwACldQDAAIcVBsAApXiBwJvum/OexQAAwABoYQAAAAEDnAOexQAAAAMDA5wKAAAAwABoYmADvl4AnCIAAADAAGhjXQPAAP6/AWADvl4AnE4AAAClwmADwABDNAAAXAE+BE6cz5zWAADAAGhkYAPAAEbQARyc2C7AAEVlAQABgJziwFXnIQDAAKV/Tp0AnQcAAMAAaGVgA8AARtABHJ0JLsAAaF4BAAGCnRPAVedEAMAApXZGnSudW502AAAAwABoZmADvl4AgZ1HwFXnLz4EPRyd7C7AAFVCAgACgJ34wFXnIYOeBMBV51gAwAClg06eIJ4pAADAAGhnYAPAAEbQARyeKy7AAEVlAQABhZ41wFXnrgDAAKV/PRyeSy7AAFVCAgACgJ5XwFXnIYSeY8BV54EAwAClgz0cnnIuwABVQgIAAoWefsBV566Gno3AVeflAMAApYM9HJ6iLsAAVUICAAKAnq7AVechhJ66wFXngQDAAKWDBsAApXmBwJ87n0CxJQAAwABG2gAAAAEDn02xJQAAAAcGBp9iAAAAlntgA74lAJ97AAAAwABVW2ADwACHDwCfmgAAAMAAVTtgA8AAhxsAn8UAAACa6l0DwAD+8QJgA75eYAO/OgCf4gAAAMAAVOVdA8AA/7MBYAO+XgCgDAAAAKXCYAPAAEM0AAGgKwAAAMAAVYBgA8AA/FUBagBgA8AA/yV5XAE+CD0XoFQuwABVW4GgYMBV6JjAAKVjPRyge4OgcMBV6LiD/QEAATSggwOgg6J1AAAAAgICoIoAAACfM2ADvl4AoJ8AAAC28GADvzoAAGADwAD/JQE+BEmgsYagtcBV6PM+AUmg3Byg6oKg4MBV6KjAAFVuAQABh6D6wFXpQgDAAIcWPgFKoYYAPz9OobOhvQAAgO1gA8AARtABHKHHFqG/LoQmwAClYsAAVPMDAAKHodTAVelCFKHbwFXpTggAAcAASc8cogqEofnAVejPgxwBAAGHohPAVelCAMAA/7/AAH1lPRyiNBaiKhaiIi6EJsAApWKa6sAAfMmAvwIAAoeiNcBV6UIUoj7AVemZCQAAwAD/Bj0colsWok8uwABVKcAApWCAvwIAAoeiXMBV6UIUomXAVemZCQAAwAD/BgDAAP8QPReihBaifC6EJsAApWLAAFTlhKKXwFXoz8AAfMo9HKKuLocWAwACgqK5wFXoqIWixMBV6OQBwABW8oai/cBV6PPAAKV3SaPYIiWj5oGj3MBV6JhgA8AAhysAFqQQFKQGwFXomAEBYAPAAIcrtbPAAIc1PgZOpD2kSQAAwABYqGADwACHKwEUpEvAVeiYAQFgA8AAhys9HKUnh6UbwFXqxcAAUIQBAAE0pTsDpTulhAAAAAICAqVCAAAAloNgA75eAKVUAAAAm6FgA743AABgA8AA/yUBPgE9HKViLsAAaFwCAAIUpXLAVesFCAAUpXjAVesRCQAAwACldQDAAIc5TqXWpeYAALnqYAPAAEnQAR+l9sAASdsCAAImpggBFqYIh6X8wFXqxbsSwACHGGADwACHRxamKBamEy7AAFTswAClXcAApXG2RL9SAD0XpkoWpkQWpjwuhCbAAKVipIDAAHyiueoUplzAVetQCADAAEXwPRymhxamgRamexamcy6EJsAApWKkgMAAfKKD1MAARe66PAEAARSmksBV61AIAADAAEa3PRymqi7AAFVCAgACFqbCh6a2wFXqxcAAV7XAAIcvFKbRwFXrUAgAAMAApYNJpu4WpvqApvLAVeiMhRy+Kj4ETqfJp9kAALnqYAPAAEnQAR+n38AASdsCAAImp+8BFqfvgaflwFXomLsSwACHGGADwACHRxyn+i7AAGhoAAAAAMAApYsAPReoIBaoGhaoEi6EJsAApWKkgMAAfKK56oeoMsBV7DTAAEXwPRyoXRaoVxaoURaoSS6EJsAApWKkgMAAfKKD1MAARe66PAEAAYeoaMBV7DQAwABGtz0cqIwWqIAuwABVKcAApWCAvwIAAhaol4GojcBV6Ji7EsAAhxiHqKTAVew0AMAA/wY/TqmTqZcAAJomYAO+EwEWqaGAqZnAVeiMhRm+M06q8qsJAADAAGhpYAPAAPxVASIiJasTgKsLwFXojGADvlIAFqs7FKszwFXojAABYAO+UrRmvlQAHKtqFqteLsAASULAAKVdwAClacAASXsBAAGHq4LAVe0AAMAAbB1Jq4wcq6EWq5AuwABUm8AApV3AAKVqwABUgQEAAYCrtcBV6IwAwAB78D4ITqvMq98AALsTYAPAAPxVARyr8har4S7AAFSbwAClXcAApWq7EwEAAYesBcBV7QAAwAB7706sGKwdAACAvWADwAEAAgEjFKwfwFXtpQkAJ4WXJ4C1AWADwAEAAk6sW6xlAACA7WADwAClkQEcrGcuwABVlQEAARSsc8BV7dkKAADAAKWNTqyQrJYAAICWYAPAAEnJAR+snMAASc8CAAIUrKzAVe4ACwAcrLcuwABoaAAAAADAAKWLAD0XrN0WrNcWrM8uhCbAAKVipIDAAHyiue0UrPnAVe4pDADAAEXzPRytGhatFBatDhatBi6EJsAApWKkgMAAfKKD1MAARe66OwIAAhytLxatIy7AAFUpwAClYEsBAAEWrTqBrTDAVeiYuxLAAIcYAMAA/wUUrUbAVe4pDAAAwABGvUmtVBytcxatYBatWC6EJsAApWLAAFTkwAB8yEgBAAErAMAA/3U+AT0XrdwWrdQuhCbAAKViwABU5BSt8cBV7ikMAMAAfMg/Sa4GFK4KwFXtpQkAPgE9HK50Fq5oLsAAVSnAAKVggL8CAAIWrn+BrnXAVeiYuxLAAIcYFK6MwFXuKQwAAMAA/wY/Sa6mFK6qwFXtHAgAPgVOrtmu4wAAgO1gA8AApZEBHK7lLsAAVZUBAAEnhZcAwACljU6vma+fAACAlmADwABJyQEfr6XAAEnPAgACFK/AwFXvdQkAHK/sFq/YFq/LLrbFwAClXcAApXCxxsAATo62VQEAAYewAMBV7QAAv2MAPRewGxawFRawDS6EJsAApWKkgMAAfKK57RSwN8BV75gKAMAARfM9HLBYFrBSFrBMFrBELoQmwAClYqSAwAB8ooPUwABF7ro8AQABFLBjwFXvmAoAAMAARrdJsHEcsJAWsH0WsHUuhCbAAKViwABU5MAAfMhIAQABKwDAAP91PgE9F7D5FrDxLoQmwAClYsAAVOQUsQ7AVe+YCgDAAHzIPz8GwACleoHAscexzLJyAADAAGhqAAAAAQOx3rJyAAAAAQEBseUAAACfM2ADvl4AAGADwAD8VQE+AkAhHLH/gLH5wFXwp0gBAAErAMAA/3Wx+bIGAEqyDQEiIRyyKBayFS7AAGhXwAClYYdkAQABgLI0wFXwpwDAAP8EACEcslEWskcuwABVW8AApWPAAFenAQABgLJowFXwpwDAAIcUBsAApXuBwLJ3snyzxQAAwABoXQAAAAEDspKzxQAAAAEBAbKZAAAAnzNgA75eAABgA8AA/FUBPgZAIRyys4CyrcBV8URIAQABKwDAAP91sq2yugBJssEcssUuwABoagEAAYCy2MBV8UQAwAClekqy4AEqP0my8iElswAWsvYuwABVW8AApWNgA8AAhytKsx8BKj9Osz2zTAAAwABoa2ADvjcBHLNgFrNOLsAAaFfAAKVhSwEAAYCzYcBV8UQAwAD/BUmzbRyzgIGzccBV8bVIAQABKwDAAP91SrOJASo/SrObASWzsYGzosBV8bVgA8AAfvAGwAClfIHAs8qzz7SAAADAAFU6AAAAAQOz1rSAAAAAAQEBs90AAACfM2ADvl4AAGADwAD8VQE+A0mz6hyz7i7AAGhqAQABgLQBwFXyNgDAAKV6SrQJASo/SbQbHLQfLsAAaF0BAAGAtDbAVfI2AMAApXtKtD4BKj9KtFABHLRqFrRXLsAAaFfAAKVhh2QBAAGAtHbAVfI2AMAA/wQGwAClfoHAtIW0irTnAADAAGhswAClXQAAAAEDtKG05wAAAAEBAbSoAAAAnzNgA75eAABgA8AA/FUBPgFKtLUBHLTGFrS8LsAAVVvAAKVjwABXpwEAAYC03cBV8tYAwACHFAbAAKV/gcC1lLWhvqIAAMAARWUAAAABA7WqvqIAAAACAQG1sQAAAJ8zYAO+XgABtcsAAAClwmADwABDNAFqAGADwAD/JXlgA8AARtABPgFJteUctekuwABoagEAAYC1/MBV8zQAwAClej4ESbYMHLYkHLYcFrYQLsAAVSnAAKVgSwEAAYC2HcBV8zQAwAD/BUgBAAErAMAA/3U+AUm2NyW2QYC2O8BV8zRgA8AAh1E+AT0etmO2/QIAAmq2e2ADtw/AAMecJAAIJ8AAaG0UttHAVfM0AAFgA8AAh1EngNkngaEWtvoWtu0uwABVKcAApWCDaMAA/xMnv0AWtwUuwABN6cAApWUngWoAPgE9Hrc2tv0CAAKAt07AVfM0JAAHJ8AAaG6At3fAVfM0J4GeFrePFreCLsAAVSnAAKVgg2jAAP8TJ79AFrerLsAATenAAKVlJ4FqAD9Ot+a37AAAgJZgA8AARtABHLf6FrfuLsAAVSnAAKVgSwEAAYC3+8BV8zQAwAD/BUm4CSEcuB+BuA3AVfNBSAEAASsAwAD/dT4CPYq4MsBV9GofuD7AAEd9AgACgrhDwFX0aoG4SsBV80EAPRy4bha4Zi6EJsAApWJWAQABgrhywFX0agDAAH1kP0q4iAGCuI/AVfRqSbihHLilLsAAaF0BAAGAuLzAVfM0AMAApXs+B0645rjyAADAAFioYAPAAIcrASa45gEWuPQuwABVW8AApWNgA8AAhytOuRG5GgAAv35gA743ARy5Lha5HC7AAGhXwAClYUsBAAGAuS/AVfM0AMAA/wVOuUq5UwAAhZdgA8AARtABHLlVLsAARWUBAAEWuWuCuV/AVfUawABXtcAAhy8AwAClf065j7mUAACClGADvzoBIyW5nIC5lsBV8zRgA8AAhzwWuckWubQuwABU7MAApV3AAKVxtkS/Uhy54S7AAGhvAQABg7n7wFX1QgDAAKWMAWADvzpOuhm6IgAAwABMTGADwABG0AEfujLAAEhKBAAEg7o8wFX1QoS6RsBV9W+FulDAVfWhgbpWwFXzQQA9HLp4FrpwLoQmwAClYlYBAAGGunzAVfXzAMAAfWRKuo0BhrqUwFX180m6qRy6rS7AAFU6AQABgLq1wFXzNADAAKV8PghOutG62gAAv35gA743ARy67ha63C7AAGhXwAClYUsBAAGAuu/AVfM0AMAA/wVOuwYAAADAAGhwYAPAAIc8AEm8LyW8PIK8M8BV9nFgA8AAfx0+AT2LvFfAVfaeFrxrFLxiwFX2cQIBYAPAAH8dwABKRsAAfyA/QCEcvI6DvIXAVfaeSAEAASsAwACHQ7yFvJUATrysvLAAAMAASkZgA8AARtABHLyyLsAARWUBAAGDvLzAVfaeAMAApX9OvNq84QAAl1FgA8AARtABH7znwABISgQABIK88cBV9nGEvPvAVfcCHL0KLsAAaG8BAAGCvSTAVfZxAMAApYyBvS/AVfNBAD0cvVEWvUkuhCbAAKViVgEAAYW9VcBV9ysAwAB9ZEq9ZAGFvWvAVfcrPgVAHL2NLsAAaGzAAKVdAQABgL2lwFXzNADAAKV+vY29qwBOvcC9ywAAwABocWADwABJwwEcvc0uwABocgEAAYC91sBV8zQAwAClgU698b39AAC56GADwABG0AEfvgPAAEiPBAAEgL4NwFXzNIK+FMBV974Wvj8WviouwABU7MAApV3AAKVxntK/R4G+TMBV80EAPRy+bha+Zi6EJsAApWJWAQABg75ywFX35wDAAH1kSr6GAYO+jcBV9+cGwAClgIHAvqe+tL+3AADAAFUbAAAAAQO+vL+3AAAAAQAAAb7QAAAApcJgA8AAQzQBagBgA8AA/yV5YAPAAEbQAT4DTr73vvsAAKBlYAPAAEbQARy/BS7AAEVlAgABFr8ZFr8PLsAAVVvAAKVjuxLAAIcYAaXCgL83wFX4ecAApX9Jv08cv2cWv1eBv1PAVfiauovAAEcQSAEAASsAwAD/dT4BPRe/fIG/eMBV+Jq6ixy/ji7AAGhoAAAAAMAApYvAAEcQP0q/qQGBv7DAVfiaBsAApYGBwL+8v8jAAEKdAADAAGhyAAAAAQO/0MAAQp0AAAACAQG/1wAAAJ8zYAO+XgABv/EAAAClwmADwABDNAFqAGADwAD/JXlgA8AAScMBPgJJwABBHxzAAEE2FsAAQSsWwABBIy6EJsAApWKa6sAAfMmHZAEAAYDAAEFCwFX5TADAAP8EPgFKwABBUgEmwABBUgEcwABBaxbAAEFhFsAAQVkuhCbAAKVimurAAHzJSwEAAYDAAEFswFX5TADAAP8FYAPAAEnDP0rAAEF/ARzAAEGaFsAAQYYuwABoW8AApW2ZdgIAAoDAAEGmwFX5TDTAAEGtA8AAQa3AAEKYAAAAAAAAAGADwABJwwE+A07AAEHEwABBzwAAwABocWADwABJwwE1wABB3wAAAQBgA8AAScMBH8AAQd/AAEnIAgACgMAAQevAVflMFsAAQgcWwABB8i7AAFTswAClXcAApXG2RL9SADUAAAABAFsBF8AAQiKCwABCIMBV+kylwoHAAEI2wFX5WcAARtOCAMBV+kw9HMAAQmMWwABCXRbAAEJXFsAAQk8uhCbAAKVipIDAAHyig9TAAEXuufcBAAGCwABCbcBV+jYAwABGuErAAEKAAYLAAEKHwFX6NgDAAP8MBsAApYKBwMAAQqLAAEKowABDQQAAwABVKAAAAAEDwABCvsAAQ0EAAAABAQHAAELQAAAAgpRgA8AAZBkAAGADvl4BPgFKwABC3AEcwABC9hbAAELjLsAAaFjAAKVkmXYCAAKAwABDAsBV+zI0wABDCAPAAEMIwABDPAAAAAAAAABgA8AAh1EBPgFKwABDEwEfwABDHsAAh1sBAAGAwABDMMBV+zIAAMAA/wwGwAClg4HAwABD0cAAQ9bAAEjQAADAAFVCAAAAAQPAAEPhwABI0AAAAAMCAsAAQ+gAAACfM2ADvl4AwABD/AAAAICWYAPAAEbQAAHAAEQcAAAApcJgA8AAQzQBagBgA8AA/yV5XAE+A0nAAEQ2JcAARECBwABEOsBV++pgA8AAR3U+Ak7AAERWwABEWgAAmBRgA8AAR3UBJsAARFYBgcAARFzAVfvqYAPAAEd1PYnAAERpwFX76hbAAER1g8AARHHAVfw0gJbAAEd3P0AhHMAARI4uwABoXQEAAYDAAESlwFX73ADAAKV7wABEjcAARKsBJMAAROEDJ8AAaHOAwABEvcBV+9wnwABodEnAAEToHMAAROwuwABoagEAAYDAAET/wFX73ADAAKV6PgE9HMAARRsWwABFDy7AAFUpwAClYIC/AgACgMAARRzAVfvcgcAARSXAVfvqAMAA/wZJwABFNxzAAEU7LsAAVToBAAGAwABFQ8BV+9wAwAClfD4HTsAARV/AAEVoAAC/fmADvjcBHMAARXwWwABFai7AAGhXwAClYUsBAAGAwABFfcBV+9wAwAD/BUAhHMAARZuDwABFksBV/S9IAQABKwDAAP91wABFksAARaIATsAARbQAAADAAGhwYAPAAIc8AEnAAEXEJcAARdGDwABFyMBV/S9gA8AAfx0+AT2MwABF7MBV/YkWwABGABTAAEX3wFX9LwMBYAPAAH8dwABKRsAAfyA/QCEcwABGI4TAAEYawFX9iUgBAAErAMAAh0PAAEYawABGKgBOwABHQsAAR0YAAMAASkZgA8AARtABHMAAR0guwABFZQEAAYTAAEdSwFX9iQDAAKV/PRzAAEdrFsAAR2MuhCbAAKViVgEAATXAAEdzAAABAGADwABISwEfwABHc8AASFYEAAQWwABHfS7AAFTswAClXcAApXGDwABHk8BV/S+FwABHncBV/gOBwABHosBV++oANQAAAAEAWwEXwABHs4bAAEexwFX+SqXCgsAAR8fAVfv7wABG04YAwFX+SgDAAH1kPgNAHMAAR/UuwABobMAApV0BAAGA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AKbkAMAAc9FOwABEeMAARHwAAJomYAO+EwEWwABEhYHAAER+wFaHx4UZvjNJwABEmSEcwABEoYLAAESdwFaH/UgBAAErAMAA/3U+AUrAAESyARzAAETXFsAARMSAwABEucBWh6ylWcAAc8i0GQEAAYLAAETjwFaH/QC8XT9KwABE8wErAABWh3YAVoh4AAAAAQLAAKbrgVrAAEUHwABFFsAARpMHwABo4AAAAWABwAD/aAABYAHAAKbWAAEFwACm8QAAAAAEAAADAAAAAAAAAAAAYAPAAKbrAT8BCQEAwAD/fgAAAAADBsAApu2BWsAART7AAEVLwABFdQACq+sAAAABA8AARVrAAEV1AAAAAQEBwABFagAAALSzYAPAAKX2AABgA8AAZFkABsAApu6BWsAARXrAAEWRwABFxAACtB0AAAABA8AARanAAEXEAAAAAQEBwABFuQAAALSzYAPAAKX2AABdA8AA/r8BYAPAAGQZAAbAAKbvgVrAAEXJwABFzsAARpEAArQ2AAAAAQPAAEXewABGkQAAAAQDA8AARfUAAAC0s2ADwABzxADAAEYaAAAAtblgA75hAMAARjkAAACBpmEDA2ADwABjy2ADwAEAAmADwABiOFwAAcAARoAAAACGZWADwAD8VQFqwABGimADwAD8VQBcAAAAVojbAFaJHQBWiWYAVontAAAAAwLAAKbygVrAAEaWwABGpcAASmwHwABo4QAAAWABwAD/aAABYAHAAKbrAQTAAKb1gVrAAEcbwABHKRip58AAphEAXQPAAP6/AWADwABkGQErAQXAAKb7AAAAAAQAAAMAAAAAAAAAAABgA8AApvIBPwEJAQDAAP9+AAAAAAIGwACm94FawABG4MAARvTAAEcAAQLAAEGXAAAAAQPAAEcAwABHAAAAAAAAAABgA4TBAAbAAKb5gVrAAEcuwABHUcAASmoAALQdAWrAAEcvYAPAAP9oAgAAAQPAAEdpwABKagAAAAEBAcAAR5AAAAi0s2ADwAB/owAAXQPAAP6/AWADwABkGQE+AknAAEeiHMAAR7UWwABHpi6p58AAphHAAKb1SAEAASsAwAD+6T4BScAAR8YWwABH5hbAAEfXFsAAR8ouwABBl8AApveExYTGgVXAAP6hPgE9F8AAR/kuqefAAKYRasAASApdA8AA/r8BYAPAAGQZwAFebcAApvU+Ak7AAEhJwABIUAAAhFdgA4JTARbAAEhfFsAASFIuwABBl8AApveEV4JZScAASG8iJcAASHqBwABIc8BWi4BgA4PiASIlwABIo4HAAEicwFaLgGADhCUAHMAASNIWwABIzRTAAEjGwFaLgAEBYAOEJYJrhChIAQABasAASOZgA4RlgdEAwAD/dT4BPRfAAEj8LqnnwACmEWrAAEkNXQPAAP6/AWADwABkGcABXm3AAKb1PgE9F8AASUQuqefAAKYRHMAASiscwABJgBbAAEliFsAASVUuwABBl8AApveExYTGgKsBAWADwABkGQE0wABJlgPAAEmWwABKKQAAAAEBAcAASagAAACGrmADiZYAAGADwABkGQE+AUrAAEnFASbAAEnFARzAAEnogMAASczAVormwABNowEAAR/AAEn4iZUBAAGCwABKDcBWjH4AAMAAgAZgA8AAZBkAwAD+iICtAAAAAMAA/pPAAKb1P0rAAEpRARbAAEpYLqnnwACmEcAApvUAAFaKfgBWirAAVo0AAAAAAgLAAKb8gVrAAEpvwABKfsAATqkHwABo4gAAAWABwAD/aAABYAHAAKbrAAEFwACnAgAAAAAEAAADAAAAAAAAAAAAYAPAAKb8AT8BCQEAwAD/fgAAAAACBsAApv6BWsAASrzAAErQwABK3AECwABBlwAAAAEDwABK3MAAStwAAAAAAAAAYAOEwQAGwACnAIFawABK4cAASvLAAE6nAAC0NgFqwABK4mADwAD/aAIAAAEDwABLAsAATqcAAAAEAwPAAEsZAAAAtLNgA8AAc8QAwABLPgAAALW5YAO+YQDAAEtdAAAAgaZhAwNgA8AAY8tgA8ABAAJgA8AAYjhcAAHAAEukAAAAhmVgA8AA/FUBasAAS65gA8AA/FUAXAE+Ak/AAEu8wABLwQAAAcAAT+ReAwABAgFgA4iRAaGMYAPAAPxVAABcAAPAAEvQwABNhwAAAAIBAcAAS+gAAACD82ADiJEAAcAAS/QAAAChjGADwAD8VQFqwABMAGADwAD8VXdcAT4FTsAATBjAAEwdAACClGADwABjywEcwABMKoDAAEwfwFaNz8AATaMBAAEWwABMO4XAAEw2wFaOZIKUiJcAwABzyk7AAExPwABMVAAAgL1gA8ABAAIBFsAATFuFwABMVsBWjmSAvYiVTsAATHUAAACDKmADwABiOABJwABMiYbAAEyNwFaOcz4BScAATKMhHMAATLgWwABMrIXAAEynwFaOZIUhiJlIAQABKwDAAP91PgE9FcAATM3AVo76CRzAAEzngMAATNzAVo3PwABOewEAARbAAEz9hcAATPjAVo5khSGImQDAAHPdPgE9FcAATSbAVo76CR/AAE05wABiigAAAAA/PRzAAE1ngsAATWbAVo3tIAMAA4fAAE1owFaOlBTAAE1uwFaO1AgAFMAATXTAVo76CQAAAD0ewABNjsAAc8IEAAMWwABNtC7AAEGXwACm/oHAAE3CwFaN3zTAAE3eA8AATd7AAE6FAAAAAwEBwABN9gAAAIDtYAOIkQACwABOGAAAAMAASc9gA8AA/FUBagBgA8AA/yV5wABOBwAAAKGMYAPAAPxVAWoAYAPAAP8leWADwAD/JQE+AUnAAE4rIYbAAE4wwFaQED4BPRzAAE5ThMAATkTAVo4zIAIAAYXAAE5UwFaQAQGhjIfAAE5rwFaQKwA/AcAAUMODwABOmsBWjg4AAFaNZwBWjZkAVpCWAAAAAgLAAKcDgVrAAE6swABOssAAVfM3wABo4wAAAWABwACm4gABYAHAAKbyAQTAAKcGgVrAAEcbwABHKRip58AAphEAXQPAAP6/AWADwABkGQErAQXAAKcMAAAAAAQAAAMAAAAAAAMDAwAAAACD81sAAAAAAMAATbFbAAAAAADAAFfVWwAAYAPAAKcDAT8BCQAAwACm6gMAA4AAwFaRDYEAwFaRFYIAwFaRHwACBsAApwiBWsAARuDAAEb0wABHAAECwABBlwAAAAEDwABHAMAARwAAAAAAAAAAYAOEwQAGwACnCoFawABHLsAAR1HAAEpqAAC0HQFqwABHL2ADwAD/aAIAAAEDwABHacAASmoAAAABAQHAAEeQAAAItLNgA8AAf6MAAF0DwAD+vwFgA8AAZBkBPgJJwABHohzAAEe1FsAAR6YuqefAAKYRwACm9UgBAAErAMAA/uk+AUnAAEfGFsAAR+YWwABH1xbAAEfKLsAAQZfAAKb3hMWExoFVwAD+oT4BPRfAAEf5LqnnwACmEWrAAEgKXQPAAP6/AWADwABkGcABXm3AAKb1PgJOwABIScAASFAAAIRXYAOCUwEWwABIXxbAAEhSLsAAQZfAAKb3hFeCWUnAAEhvIiXAAEh6gcAASHPAVpJTYAOD4gEiJcAASKOBwABInMBWklNgA4QlABzAAEjSFsAASM0UwABIxsBWklMBAWADhCWCa4QoSAEAAWrAAEjmYAOEZYHRAMAA/3U+AT0XwABI/C6p58AAphFqwABJDV0DwAD+vwFgA8AAZBnAAV5twACm9T4BPRfAAElELqnnwACmERzAAEorHMAASYAWwABJYhbAAElVLsAAQZfAAKb3hMWExoCrAQFgA8AAZBkBNMAASZYDwABJlsAASikAAAABAQHAAEmoAAAAhq5gA4mWAABgA8AAZBkBPgFKwABJxQEmwABJxQEcwABJ6IDAAEnMwFaRucAATaMBAAEfwABJ+ImVAQABgsAASg3AVpNRAADAAIAGYAPAAGQZAMAA/oiArQAAAADAAP6TwACm9T9KwABKUQEWwABKWC6p58AAphHAAKb1AABWkVEAVpGDAFaT0wAAAAICwACnDYFawABOrMAATrLAAFXzN8AAaOQAAAFgAcAApwMAAWABwACm/AABBcAApxQAAAAABAAAAwAAAAAAAwMDAAAAAIPzWwAAAAAAwABNsVsAAAAAAMAAV9VbAABgA8AApw0BPwEJAADAAKcMAwADgADAVpQkgQDAVpQsggDAVpQ2AAMGwACnD4FawABOssAATrIAABK0HQAAwACm7gEDAAAAAAABAQEAAAAItLNgA8AApfYAAF0DwAD+vwFgA8AAZBkABsAApxKBWsAASrzAAErQwABK3AECwABBlwAAAAEDwABK3MAAStwAAAAAAAAAYAOEwQAGwACnEIFawABK4cAASvLAAE6nAAC0NgFqwABK4mADwAD/aAIAAAEDwABLAsAATqcAAAAEAwPAAEsZAAAAtLNgA8AAc8QAwABLPgAAALW5YAO+YQDAAEtdAAAAgaZhAwNgA8AAY8tgA8ABAAJgA8AAYjhcAAHAAEukAAAAhmVgA8AA/FUBasAAS65gA8AA/FUAXAE+Ak/AAEu8wABLwQAAAcAAT+ReAwABAgFgA4iRAaGMYAPAAPxVAABcAAPAAEvQwABNhwAAAAIBAcAAS+gAAACD82ADiJEAAcAAS/QAAAChjGADwAD8VQFqwABMAGADwAD8VXdcAT4FTsAATBjAAEwdAACClGADwABjywEcwABMKoDAAEwfwFaVEMAATaMBAAEWwABMO4XA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AMBWnOlIAQABKwDAAGRpF8AAVQEukoHAAKYRHMAAVRaAwABVC8BWnMir6wEAARbAAFUmLsAAQZfAAKcYAMAAgArAAKcagQDAVpzpAWADwABkWQbAAKcigVrAAFU8wABVZMAAVfEBAMAAV9sBasAAVT1gA8AA/2gCAAABA8AAVXzAAFXxAAAAAAAAAGADwACgxAE+AknAAFWCFsAAVYsWwABVhi6D88AApuSFHIOfSsAAVZ0BasAAVbxgA8AAoMTAAV6YP0rAAFXKAWrAAFXpYAPAAKDEwAFefwbAAKcggVrAAE6ywABOsgAAErQdAADAAKbuAQMAAAAAAAEBAQAAAAi0s2ADwACl9gAAXQPAAP6/AWADwABkGQAAAFaZLABWm04AVpySAFadXgBWneUAVp4lAAAABQLAAKclgVrAAFX2wABV/MAAX0gDwABo6AAAAWABwAD/aAABYAHAAKbrBQTAAKcngVrAAFauwABWzQaD7ABgA8ABAAIBasAAVrRgA8ABAALAAXV4BMAApyiBWsAAVvXAAFb/CcAATbEBasAAVtNgA8AA/2gCYAPAAHQmAATAAKcpgVrAAFcXwABXJQnAAFfUAGADwABj8wAEwACnKoFawABXU8AAV2oJwABX2wFqwABXKmADwAD/aAJgA8AAoMQABMAApyuBWsAAV4vAAFeZCYTFAF0DwAD+vwFgA4mWAAEFwACnN4FawABXnsAAV57AAFgSAAAAA8AAV7PAAFgSAAAABAQEwABXuQAABMAATbFgA8AAdCYAwABXygAABMAAV9RgA8AAY/MAwABX5QAABITFXQPAAP6/AWADiZYAwABX+gAABMAAV9tgA8AAoMQAAGADwACnJQE/BQgBwACnKIAAwFafRggBwACnKYEAwFafWAgBwACnK4IAwFafaggBwACnKoMAwFaffwkBwABXnsAA/34AAAAABwbAAKctgVrAAFgXwABYH8AAWl8EAbAPAAAAAQPAAFhHwABaXwAAAAEBAcAAWFMAAACDSmADwABepQAAYAPAAKclAT4HPRzAAFhogMAAWGHAVqAEgpgBAAFqwABYbmADwAEAAsABdXgAwABep07AAFiJwABYlAAAwABNsWADwAB0JgEewABYosAAdCwBAAGAwABYxsBWoAQATsAAWOHAAFjwAADAAFfUYAPAAGPzASbAAFjhARzAAFj5gMAAWPLAVqAEhyQBAAABmAgpwABez2ADwABj807AAFkzwABZQgAAhMVdA8AA/r8BYAOJlgEcwABZS4DAAFlEwFagBMAARV8AAAAAwABezk7AAFmBwABZmQAAwABX22ADwACgxAEcwABZqoDAAFmjwFagBLCzAQFgA8AAoMQBasAAWctdA8AA/r8BYAPAAKDEwAFe3gDAAF66PRzAAFnfgMAAWdjAVqAEgpABAAFqwABZ42ADwAEAAsABdXgAwABeqErAAFntAR/AAFn4wACnNwQABIHAAFoXwFagR4LAAFojwFagc4PAAFozwFagsITAAFpDwFag4wAGwACnL4FawABaZMAAWnXAAFutAACwEAFqwABaZWADwAD/aAIAAAEDwABahMAAW60AAAABAQHAAFqOAAAAhEBgA8AAXlYAAFwBPgc9HMAAWp+AwABamsBWocGwtwEAAWrAAFq5YAPAAKbEwAF1HADAAF5nPRzAAFrOgMAAWsnAVqHBgpgBAAFqwABa1GADwAEAAsABdXgAwABeWz0cwABa6RbAAFreLsAATbHAAKcosBABAAGAwABa+cBWocEAwAB0Lj0cwABbCYDAAFsEwFahwYcUAgABFsAAWxcuwABX1MAApykBmAgpwABefD0cwABbQoDAAFs9wFahwcAART0BAAEWwABbWi6ExcAApysAwABeez0cwABbdIDAAFtvwFahwbC3AQABFsAAW34uwABX28AApyoAwABeZz0cwABboYDAAFucwFahwYKQAQABasAAW6VgA8ABAALAAXV4AMAAXlwGwACnNYFawABbssAAW9LAAFv4AQDAAFfVAWrAAFuzYAPAAP9oAgAAAQPAAFvewABb+AAAAAAAAABgA8AAnlYBSsAAW+EBasAAW+dgA8AAnlbAAV+PBsAApzCBWsAAW/3AAFwWwABcngAAq+sBasAAW/5gA8AA/2gCAAABA8AAXCXAAFyeAAAAAQEBwABcRQAACLSzYAPAAH+jAABgA8AAZFkBPgE9MMAAXFcfwABcYcAA/a0BAAEnwABo6gAGwACnMYFawABco8AAXMbAAF25AAC0HQFqwABcpGADwAD/aAIAAAEDwABc3sAAXbkAAAABAQHAAFzuAAAAtLNgA8AApfYAAF0DwAD+vwFgA8AAZBkBPgFKwABdAAEcwABdrRzAAF0fFsAA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RAgBgMAARAjAV4vDYAPAAIWjAMAAqR9OwABEI8AARCoAAIJqYAODkAEjgsAARCzAV4vkHMAARD8WwABENS7AAGi9wACozMAAqRVLAQABgcAAREDAV4vTAMAA/wUcwABEUhbAAERILsAAaLzAAKjMwACpFEsBAAGBwABEU8BXi9MAwAD/BQFgA4OQSsAARF4BIyEcwABEbIPAAERlwFeMNEgBAAErAMAA/3UcwABEgYDAAER2wFeLw5xoAQABg8AARIvAV4w0AMAApfkrAWADviUGwACpIoHLwABEosAARLPAAEVzAADAAFg0AWrAAESjYAPAAP9oAgAAAQPAAETAwABFcwAAAAICAsAARNAAAAC0s2ADwACl9gDAAEThAAAAgaZhAwFgA74lXAAAXAE+Aj0cwABE/y7AAEajwACozAEAASbAAEULAYDAAEULwFeNJWADwACFowDAAKkfPRzAAEUlFsAARRwup5XAAKjMwACpFoP9AQABNMAARS0DwABFLcAARW4AAAABAQHAAEU4AAAAgmpgA4OQAABgA8AA/yUBPgE9HMAARUmBwABFSMBXjTUgAQABHMAARVWAwABFSsBXjSWcaAEAAYLAAEVfwFeNpwDAAKX5AAAAwAD+jQbAAKkjgcvAAEV4wABFlsAARnQAAKG9AWrAAEV5YAPAAP9oAgAAAQPAAEWnwABGdAAAAAICAsAARbcAAAC0s2ADwACl9gDAAEXKAAAAgL1gA8ABAAIAAGADvlIBPgM9HMAARdYuwABGo8AAqMwBAAEmwABF4gGAwABF4sBXjjBgA8AAhaMAwACpH07AAEX9wABGCQAAmTRgA4OQARzAAEYaFsAARgsuwABoycAAqMzAAKkTSwEAAYHAAEYbwFeOQADAAP8FSsAARiYBIyEcwABGOYLAAEYtwFeOhUgBAAErAMAA/3UcwABGToDAAEZDwFeOMKh0AQABgsAARl3AV46FAMAApfsrAWADvlIGwACpJIHLwABGecAARorAAEd9AAC0FgFqwABGemADwAD/aAIAAAEDwABGnMAAR30AAAACAgLAAEazAAAAtLNgA8AApfYAwABGxAAAAIGmYQMBYAO+UlwAAFwBPgI9HMAARuwuwABGo8AAqMwBAAEmwABG+AGAwABG+MBXjzxgA8AAhaMAwACpHz0cwABHIBbAAEcZFsAARwkuwABoycAAqMzAAKkTKcAA/xSD/QEAATTAAEcoA8AARyjAAEd4AAAAAQEBwABHMwAAAJk0YAODkAAAYAPAAP8lAT4BPRzAAEdJgcAAR0jAV49MIAEAARzAAEdVgMAAR0rAV488qHQBAAGCwABHZMBXj8oAwACl+wAAAMAA/o0GwACpJYHLwABHgsAAR4fAAEgsAADAAFiaAAAAAQPAAEeZwABILAAAAAEBAcAAR7AAAADAAFCrYAO+WQAAXAE+Aj0jHMAAR9wWwABHxy7AAGjKwACozMAAqRhIAQABKwDAAP7pF8AAR8cuwABoysAAqMwxwABH92ADvlkAwACpGCsBXQPAAP6/AWADvlk9HMAASBQWwABH/y7AAGjKwACozMAAqRhWAQABgMAASBjAV5BJAMAA/tAGwACpJoHLwABIMcAASELAAEiuAAC0LQFqwABIMmADwAD/aAIAAAEDwABIWMAASK4AAAABAQHAAEheAAAAgaZhAwFgA75ZXAAAXAE+AT01AAAAAQBdA8AA/r8BYAO+WQEWwABIii7AAGjKwACozMAAqRgjHMAASKCBAMBXkSNIAQABKwAAKxzAAEiggQDAV5Ejg/0BAAGAwABIqMBXkQoAwAD+jQFcBsAAqSeBy8AASLPAAEjJwABPugAAiPIBasAASLRgA8AA/2gCAAABA8AASNDAAE+6AAAAAgICwABI4AAAALSzYAPAAKX2AMAASREAAAC4yF0DwAD+8QJgA74lYAPAAHBzAABgA8AApkwBPglOwABJPwAAAMAAWBFdA8AA/vECYAPAAQACYAODkABOwABJagAAALSrXQPAAP7xAmADwAEAAmADg5AATsAASZAAAADAAGi+XQPAAP7xAmADwAEAAmADg5AATsAASa8AAACElF0DwAD+vwFgA4OQAEnAAEm8HMAASdAWwABJwC7AAGjJwACozMAAqRNIAQABKwDAAP91PgE9isAASeHAV5HmasAASfJdA8AA/vECYAPAAQACYAODkMABdZY+Aj2KwABKIsBXkeYywABKRmADwAEAAmADg5AAPRzAAEpgFsAASlAuwABoycAAqMzAAKkTg/0BAAE0wABKaAPAAEpowABLLQAAAAICAsAASnAAAACAvWADwAEAAgDAAEqAAAAAg/NgA4OQAABgA8AA/yUBPgJOwABKncAASqQAAIJqYAO+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AAAAAQEBwACkoQAAAINKYAPAAF6lAABgA8AAqvwBPgU9HMAApLaAwACkr8BYd66CmAEAAWrAAKS8YAPAAQACwAF2MQDAAF6nTsAApN3AAKTrAAC0bWADiLwBJsAApN0BHMAApPSAwACk7cBYd67AAEVZAAAAAMAAXsVgA4i8TsAApRfAAKUlAAC1x2ADwACqmwEewAClK8AAqqMBAAGAwAClScBYd64APRzAAKVdgMAApVbAWHeugpABAAFqwAClYWADwAEAAsABdjEAwABeqErAAKVrAR/AAKV2wACrBgIAAoHAAKWPwFh38YLAAKWewFh4JwAGwACrBIFjwACltcAApbrAAKZLAADAAGl9AAAAAQPAAKXEwACmSwAAAAEBAcAApc4AAACEQGADwABeVgAAXAE+BD0cwACl34DAAKXawFh4yYKYAQABasAApeVgA8ABAALAAXYxAMAAXls9HMAApfSAwACl78BYeMnAAEU3AQABFsAApgIutG3AAKr/AMAAXnI9HMAApiQWwACmFi61x8AAqwDAAGl9AQABgMAApi/AWHjJAMAAqqU9HMAApj+AwACmOsBYeMmCkAEAAWrAAKZDYAPAAQACwAF2MQDAAF5cAABYd4IAWHidAFh5fAAAAAICwACrB4FjwACmUMAAplbAAKmQA8AAaYoAAAFgAcAA/2gAAAQEwACrCYFjwACmgMAAppkGg+wAYAPAAQACAWrAAKaGYAPAAQACwAF2NgTAAKsKgWPAAKaxwACmtwmCSQBgA4QlAATAAKsLgWPAAKbQwACm3Qm1xwBgA8AAqpsABMAAqwyBY8AApvzAAKcCCYSvAGADgsMAAQXAAKsSgWPAAKcHwACnB8AAp0YAAAADwACnGMAAp0YAAAADAwPAAKceAAAEgklgA4QlAMAApysAAAS1x2ADwACqmwDAAKc/AAAEhK9gA4LDAABgA8AAqwcBPwQIAcAAqwqAAMBYekoIAcAAqwuBAMBYelgIAcAAqwyCAMBYemgJAcAApwfAAP9+AAAAAAIGwACrDoFjwACnS8AAp1PAAKjFBAHAAE61AAAAAQPAAKdzwACoxQAAAAEBAcAAp38AAACDSmADwABepQAAYAPAAKsHAT4GPRzAAKeUgMAAp43AWHrfgpgBAAFqwACnmmADwAEAAsABdjYAwABep07AAKexwACnuAAAgklgA4QlASbAAKexARzAAKfBgMAAp7rAWHrfwABFVAAAAADAAF6/YAOEJU7AAKfmwACn9AAAtcdgA8AAqpsBHsAAp/rAAKqjAQABgMAAqBjAWHrfAE7AAKg6wACoQQAAhK9gA4LDARzAAKhKgMAAqEPAWHrfwABFWAAAAADAAF7EPRzAAKh4gMAAqHHAWHrfgpABAAFqwACofGADwAEAAsABdjYAwABeqErAAKiGAR/AAKiRwACrEgMAA4HAAKijwFh7IoLAAKirwFh7WIPAAKi6wFh7ggAGwACrEIFjwACoysAAqM/AAKmOAADAAGl9AAAAAQPAAKjZwACpjgAAAAEBAcAAqOMAAACEQGADwABeVgAAXAE+BT0cwACo9IDAAKjvwFh8L4KYAQABasAAqPpgA8ABAALAAXY2AMAAXls9HMAAqQmAwACpBMBYfC/AAEUyAQABFsAAqRkugknAAKsKAMAAXmw9HMAAqTQWwACpJi61x8AAqwvAAGl9AQABgMAAqT/AWHwvAMAAqqU9HMAAqU+AwACpSsBYfC/AAEU2AQABFsAAqXAuhK/AAKsMAMAAXnE9HMAAqYKAwACpfcBYfC+CkAEAAWrAAKmGYAPAAQACwAF2NgDAAF5cAABYerMAWHwDAFh9CQAAAAICwACrE4FjwACpk8AAqZnAAK4YA8AAaYsAAAFgAcAA/2gAAAYEwACrFYFjwACpyMAAqeYGg+wAYAPAAQACAWrAAKnOYAPAAQACwAF2OwTAAKsWgWPAAKn7wACqBgmZNABgA4OQAATAAKsXgWPAAKohwACqJQmClABgA4k3AATAAKsYgWPAAKo+wACqSwm1xwBgA8AAqpsABMAAqxmBY8AAqmrAAKpwCYSvAGADgsMABMAAqxqBY8AAqn/AAKqGCYQiAGADwAD8VQABBcAAqyCBY8AAqovAAKqLwACq/AAAAAPAAKqhwACq/AAAAAUEBMAAqq4AAASZNGADg5AAwACqwAAABIKUYAOJNwDAAKrLAAAEtcdgA8AAqpsAwACq3wAABISvYAOCwwABwACq8wAABIQiYAPAAPxVAWoAYAPAAP8leWADwACrEwE/BggBwACrFoAAwFh+CQgBwACrF4EAwFh+FwgBwACrGIIAwFh+JQgBwACrGYMAwFh+NQgBwACrGoQAwFh+RAkBwACqi8AA/34AAAAAAgbAAKscgWPAAKsBwACrCcAArQkEAcAATrUAAAABA8AAqy7AAK0JAAAAAQEBwACrOgAAAINKYAPAAF6lAABgA8AAqxMBPgg9HMAAq0+AwACrSMBYft2CmAEAAWrAAKtVYAPAAQACwAF2OwDAAF6nTsAAq2nAAKt1AACZNGADg5ABHMAAq36AwACrd8BYft3AAEVUAAAAAMAAXr9OwACrpcAAq6oAAIKUYAOJNwEmwACrpQEcwACrs4DAAKuswFh+3cAARWEAAAAAwABe0WADiTdOwACr2sAAq+gAALXHYAPAAKqbAR7AAKvuwACqowEAAYDAAKwMwFh+3QBOwACsLsAArDUAAISvYAOCwwEcwACsPoDAAKw3wFh+3cAARVgAAAAAwABexE7AAKxqwACscgAAhCJgA8AA/FUBHMAArHuAwACsdMBYft2wLQAAAADAAF6zPRzAAKySgMAArIvAWH7dgpABAAFqwACslmADwAEAAsABdjsAwABeqErAAKygAR/AAKyrwACrIAUABIHAAKzCwFh/IILAAKzPwFh/TIPAAKzVwFh/goTAAKzkwFh/rAGEIoXAAKz9wFh/2AbAAKsegWPAAK0OwACtE8AArhYAAMAAaX0AAAABA8AArR3AAK4WAAAAAQEBwACtJwAAAIRAYAPAAF5WAABcAT4HPRzAAK04gMAArTPAWICZgpgBAAFqwACtPmADwAEAAsABdjsAwABeWz0cwACtTYDAAK1IwFiAmcAARTIBAAEWwACtXS6ZNMAAqxYAwABebD0cwACtdIDAAK1vwFiAmcAART8BAAEWwACthi6ClMAAqxcAwABefj0cwACtnxbAAK2RLrXHwACrGMAAaX0BAAGAwACtqsBYgJkAwACqpT0cwACtuoDAAK21wFiAmcAARTYBAAEWwACt2y6Er8AAqxkAwABecT0cwACt7YDAAK3owFiAmbA0AQABFsAArfcuhCLAAKsaAMAAXmA9HMAArgqAwACuBcBYgJmCkAEAAWrAAK4OYAPAAQACwAF2OwDAAF5cAABYfrEAWIBtAFiBvwAAAAICwACrIYFjwACuG8AAriHAALFLA8AAaYwAAAFgAcAA/2gAAAQEwACrI4FjwACuTcAArmgGg+wAYAPAAQACAWrAAK5TYAPAAQACwAF2QATAAKskgWPAAK58wACufwmaJgBgA4McAATAAKslgWPAAK6bwACuqAmFOABdA8AA/r8BYAOI/AAEwACrJoFjwACux8AArs0JhK8AYAOCwwABBcAAqyyBY8AArtLAAK7SwACvEAAAAAPAAK7lwACvEAAAAAMDA8AArusAAASaJmADgxwAwACu9QAABIU4XQPAAP6/AWADiPwAwACvCQAABISvYAOCwwAAYAPAAKshAT8ECAHAAKskgADAWIKSCAHAAKslgQDAWIKgCAHAAKsmggDAWIK1CQHAAK7SwAD/fgAAAAACBsAAqyiBY8AArxXAAK8dwACwfAQBwABOtQAAAAEDwACvP8AAsHwAAAABAQHAAK9LAAAAg0pgA8AAXqUAAGADwACrIQE+Bj0cwACvYIDAAK9ZwFiDLIKYAQABasAAr2ZgA8ABAALAAXZAAMAAXqdOwACvecAAr30AAJomYAODHAEcwACvhoDAAK9/wFiDLMAARVIAAAAAwABevU7AAK+twACvuwAAhThdA8AA/r8BYAOI/AEcwACvxIDAAK+9wFiDLMAARWIAAAAAwABe0k7AAK/ywACv+QAAhK9gA4LDARzAALACgMAAr/vAWIMswABFWAAAAADAAF7EPRzAALAwgMAAsCnAWIMsgpABAAFqwACwNGADwAEAAsABdkAAwABeqErAALA+AR/AALBJwACrLAMAA4HAALBdwFiDb4LAALBiwFiDm4PAALBxwFiDzgAGwACrKoFjwACwgcAAsIbAALFJAADAAGl9AAAAAQPAALCQwACxSQAAAAEBAcAAsJoAAACEQGADwABeVgAAXAE+BT0cwACwq4DAALCmwFiEe4KYAQABasAAsLFgA8ABAALAAXZAAMAAXls9HMAAsMCAwACwu8BYhHuXxwEAARbAALDPLpomwACrJADAAF5qPRzAALDegMAAsNnAWIR7wABFQAEAARbAALDxLoU4wACrJQDAAF5/PRzAALEKgMAAsQXAWIR7wABFNgEAARbAALErLoSvwACrJgDAAF5xPRzAALE9gMAAsTjAWIR7gpABAAFqwACxQWADwAEAAsABdkAAwABeXAAAWIMAAFiETwBYhVMAAAACAsAAqy2BY8AAsU7AALFTwACyGAvAAGmNAAABYAHAAP9oAAANBMAAqy+BY8AAsVPAALFTCScAYAPAAP4bAATAAKsxgWPAALFTwACxUwkowACqFwBgA8ABAAIABMAAqzKBY8AAsVPAALFTBikAXQPAAP6/AWADwACrLQFqAF0DwAD+vwFgA8AAqy3AAXXZBMAAqzOBY8AAsWDAALFgBsAAVCgAYAPAAKstAWoAYAPAAKstwAFiEATAAKs0gWPAALFtwACxbQavJQBgA8AAqy0BagBgA8AAqy3AAWJCBMAAqzWBY8AAsXzAALF8BoZcAGADwACrLQFqAGADwACrLcABYnQEwACrNoFjwACxisAAsYoGsS0AYAPAAKstAWoAYAPAAKstwAFijQTAAKs3gWPAALGZwACxmQaz3wBgA8AAqy0BagBgA8AAqy3AAWKmBMAAqziBY8AAsazAALGsBsAAaY4AYAPAAKstAWoAYAPAAKstwAFjDATAAKs5gWPAALHHwACxxwaxFABgA8AAqy0BagBgA8AAqy3AAWMmBMAAqzqBY8AAsd7AALHeBsAAVBwAYAPAAKstAWoAYAPAAKstwAFjkATAAKs7gWPAALHzwACx8wbAAFQbAGADwACrLQFqAGADwACrLcABY6wEwACrPIFjwACyC8AAsgsGwABUIgBgA8AAqy0BagBgA8AAqy3AAWPGAQXAAKtAgWPAALFTwACxU8AAshgBAAADwACxU8AAshgAAAACAgLAALFTAAAEJ2ADwAD+GwDAALFTAAAEKGADwAEAAgAAYAPAAKstAT8DCADAAKsvgADAWIedCADAAKsxgQDAWIesCQAAwAD/fgAAAAABBsAAqz6BY8AAsVPAALFTwACyGAAAIwAAAAEDwACxU8AAshgAAAAAAAAAYAPAAQACAUoAAQ8ALsAAqzEAAFiH6QBYiCQAAAABAsAAq0GBY8AAshvAALIhwAC0NgPAAGmPAAABYAHAAP9oAAADBMAAq0OBY8AAskLAALJSBoPsAGADwAEAAgFqwACySGADwAEAAsABdkUEwACrRIFjwACyacAAsm0JgpQAYAOI/AAEwACrRYFjwACyhMAAsogJgmsAYAPAAKtMAAEFwACrS4FjwACyjcAAso3AALKrAAAAA8AAspXAALKrAAAAAgICwACymwAABIKUYAOI/ADAALKmAAAEgmtgA8AAq0wAAGADwACrQQE/AwgBwACrRIAAwFiI1ggBwACrRYEAwFiI5AkBwACyjcAA/34AAAAAAgbAAKtHgWPAALKwwACyuMAAs6gEAcAATrUAAAABA8AAss/AALOoAAAAAQEBwACy2wAAAINKYAPAAF6lAABgA8AAq0EBPgU9HMAAsvCAwACy6cBYiVGCmAEAAWrAALL2YAPAAQACwAF2RQDAAF6nTsAAswzAALMRAACClGADiPwBHMAAsxqAwACzE8BYiVHAAEVhAAAAAMAAXtFOwACzP8AAs0QAAIJrYAPAAKtMARzAALNNgMAAs0bAWIlRsLMBAWADwACrTAFqwACzY10DwAD+vwFgA8AAq0zAAXZKAMAAXro9HMAAs3eAwACzcMBYiVGCkAEAAWrAALN7YAPAAQACwAF2RQDAAF6oSsAAs4UBH8AAs5DAAKtLAgACgcAAs5nAWImUgsAAs5/AWInAAAbAAKtJgWPAALOtwACzssAAtDQAAMAAaX0AAAABA8AAs7zAALQ0AAAAAQEBwACzxgAAAIRAYAPAAF5WAABcAT4EPRzAALPXgMAAs9LAWIqAgpgBAAFqwACz3WADwAEAAsABdkUAwABeWz0cwACz7IDAALPnwFiKgMAART8BAAEWwACz/i6ClMAAq0QAwABefj0cwAC0DoDAALQJwFiKgLC3AQABFsAAtBgugmvAAKtFAMAAXmc9HMAAtCiAwAC0I8BYioCCkAEAAWrAALQsYAPAAQACwAF2RQDAAF5cAABYiSUAWIpUAFiLMQAAAAICwACrTIFjwAC0OcAAtD7AALTFC8AAaZAAAAFgAcAA/2gAAAsEwACrToFjwAC0PsAAtD4JJwBgA8AA/hsABMAAq1CBY8AAtD7AALQ+CSjAAKoXAGADwAEAAgAEwACrUYFjwAC0PsAAtD4GKQBdA8AA/r8BYAPAAKtMAWoAXQPAAP6/AWADwACrTMABdkoEwACrUoFjwAC0T8AAtE8GwABMbABgA8AAq0wBagBgA8AAq0zAAWIpBMAAq1OBY8AAtGHAALRhBsAATG4AYAPAAKtMAWoAYAPAAKtMwAFiWwTAAKtUgWPAALRuwAC0bgbAAExrAGADwACrTAFqAGADwACrTMABYsAEwACrVYFjwAC0eMAAtHgGwABMbQBgA8AAq0wBagBgA8AAq0zAAWLZBMAAq1aBY8AAtIjAALSIBq6nAGADwACrTAFqAGADwACrTMABYvIEwACrV4FjwAC0k8AAtJMGwABpkQBgA8AAq0wBagBgA8AAq0zAAWNABMAAq1iBY8AAtKbAALSmBoVrAGADwACrTAFqAGADwACrTMABY1oEwACrWYFjwAC0tcAAtLUGwABpkgBgA8AAq0wBagBgA8AAq0zAAWN0AQXAAKtdgWPAALQ+wAC0PsAAtMUBAAADwAC0PsAAtMUAAAACAgLAALQ+AAAEJ2ADwAD+GwDAALQ+AAAEKGADwAEAAgAAYAPAAKtMAT8DCADAAKtOgADAWI0xCADAAKtQgQDAWI1ACQAAwAD/fgAAAAABBsAAq1uBY8AAtD7AALQ+wAC0xQAAIwAAAAEDwAC0PsAAtMUAAAAAAAAAYAPAAQACAUoAAQ8ALsAAq1AAAFiNfQBYjbgAAAABAsAAq16BY8AAtMjAALTOwAC3igPAAGmTAAABYAHAAP9oAAADBMAAq2CBY8AAtP7AALUdBoPsAGADwAEAAgFqwAC1BGADwAEAAsABdnIEwACrYYFjwAC1N8AAtUIJmTQAYAOD4gAEwACrYoFjwAC1W8AAtWgJtccAYAPAAKqbAAEFwACraIFjwAC1bcAAtW3AALWqAAAAA8AAtYTAALWqAAAAAgICwAC1igAABJk0YAOD4gDAALWcAAAEtcdgA8AAqpsAAGADwACrXgE/AwgBwACrYYAAwFiOaggBwACrYoEAwFiOeAkBwAC1bcAA/34AAAAAAgbAAKtkgWPAALWvwAC1t8AAtu0EAcAATrUAAAABA8AAtd3AALbtAAAAAQEBwAC16QAAAINKYAPAAF6lAABgA8AAq14BPgU9HMAAtf6AwAC198BYjuWCmAEAAWrAALYEYAPAAQACwAF2cgDAAF6nTsAAth3AALYpAACZNGADg+IBJsAAth0BHMAAtjKAwAC2K8BYjuXAAEVUAAAAAMAAXr9gA4PiTsAAtlfAALZlAAC1x2ADwACqmwEewAC2a8AAqqMBAAGAwAC2icBYjuUAPRzAALadgMAAtpbAWI7lgpABAAFqwAC2oWADwAEAAsABdnIAwABeqErAALarAR/AALa2wACraAIAAoHAALbOwFiPKILAALbbwFiPXgAGwACrZoFjwAC28sAAtvfAALeIAADAAGl9AAAAAQPAALcBwAC3iAAAAAEBAcAAtwsAAACEQGADwABeVgAAXAE+BD0cwAC3HIDAALcXwFiQAIKYAQABasAAtyJgA8ABAALAAXZyAMAAXls9HMAAtzGAwAC3LMBYkADAAEUyAQABFsAAt0EumTTAAKthAMAAXmw9HMAAt2EWwAC3Uy61x8AAq2LAAGl9AQABgMAAt2zAWJAAAMAAqqU9HMAAt3yAwAC3d8BYkACCkAEAAWrAALeAYAPAAQACwAF2cgDAAF5cAABYjrkAWI/UAFiQswAAAAICwACraYFjwAC3jcAAt5PAALnxA8AAaZQAAAFgAcAA/2gAAAMEwACra4FjwAC3uMAAt8wGg+wAYAPAAQACAWrAALe+YAPAAQACwAF2dwTAAKtsgWPAALfjwAC35wmClABgA4j8AATAAKttgWPAALgGwAC4DAmErwBgA4LDAAEFwACrc4FjwAC4EcAAuBHAALg1AAAAA8AAuB3AALg1AAAAAgICwAC4IwAABIKUYAOI/ADAALguAAAEhK9gA4LDAABgA8AAq2kBPwMIAcAAq2yAAMBYkWcIAcAAq22BAMBYkXUJAcAAuBHAAP9+AAAAAAIGwACrb4FjwAC4OsAAuELAALlKBAHAAE61AAAAAQPAALhdwAC5SgAAAAEBAcAAuGkAAACDSmADwABepQAAYAPAAKtpAT4FPRzAALh+gMAAuHfAWJHggpgBAAFqwAC4hGADwAEAAsABdncAwABep07AALiawAC4nwAAgpRgA4j8ARzAALiogMAAuKHAWJHgwABFYQAAAADAAF7RTsAAuNXAALjcAACEr2ADgsMBHMAAuOWAwAC43sBYkeDAAEVYAAAAAMAAXsQ9HMAAuROAwAC5DMBYkeCCkAEAAWrAALkXYAPAAQACwAF2dwDAAF6oSsAAuSEBH8AAuSzAAKtzAgACgcAAuTnAWJIjgsAAuT/AWJJPAAbAAKtxgWPAALlPwAC5VMAAue8AAMAAaX0AAAABA8AAuV7AALnvAAAAAQEBwAC5aAAAAIRAYAPAAF5WAABcAT4EPRzAALl5gMAAuXTAWJLzgpgBAAFqwAC5f2ADwAEAAsABdncAwABeWz0cwAC5joDAALmJwFiS88AART8BAAEWwAC5oC6ClMAAq2wAwABefj0cwAC5sIDAALmrwFiS88AARTYBAAEWwAC50S6Er8AAq20AwABecT0cwAC544DAALnewFiS84KQAQABasAAuedgA8ABAALAAXZ3AMAAXlwAAFiRtABYkscAWJOmAAAAAgLAAKt0gWPAALn0wAC5+sAAvMADwABplQAAAWABwAD/aAAAAwTAAKt2gWPAALoowAC6RQaD7ABgA8ABAAIBasAAui5gA8ABAALAAXZ8BMAAq3eBY8AAumDAALpuCa0mAGADiUkABMAAq3iBY8AAuorAALqXCYU4AF0DwAD+vwFgA4j8AAEFwACrfoFjwAC6nMAAupzAALraAAAAA8AAurHAALraAAAAAgICwAC6twAABK0mYAOJSQDAALrMAAAEhThdA8AA/r8BYAOI/AAAYAPAAKt0AT8DCAHAAKt3gADAWJRhCAHAAKt4gQDAWJRvCQHAALqcwAD/fgAAAAACBsAAq3qBY8AAut/AALrnwAC8FgQBwABOtQAAAAEDwAC7C8AAvBYAAAABAQHAALsXAAAAg0pgA8AAXqUAAGADwACrdAE+BT0cwAC7LIDAALslwFiU4YKYAQABasAAuzJgA8ABAALAAXZ8AMAAXqdOwAC7TMAAu1sAAK0mYAOJSQEmwAC7TAEcwAC7ZIDAALtdwFiU4cAARWEAAAAAwABe0WADiUlOwAC7jsAAu5wAAIU4XQPAAP6/AWADiPwBHMAAu6WAwAC7nsBYlOHAAEViAAAAAMAAXtI9HMAAu8WAwAC7vsBYlOGCkAEAAWrAALvJYAPAAQACwAF2fADAAF6oSsAAu9MBH8AAu97AAKt+AgACgcAAu/TAWJUkgsAAvATAWJVaAAbAAKt8gWPAALwbwAC8IMAAvL4AAMAAaX0AAAABA8AAvCrAALy+AAAAAQEBwAC8NAAAAIRAYAPAAF5WAABcAT4EPRzAALxFgMAAvEDAWJYFgpgBAAFqwAC8S2ADwAEAAsABdnwAwABeWz0cwAC8WoDAALxVwFiWBcAART8BAAEWwAC8bC6tJsAAq3cAwABefj0cwAC8hoDAALyBwFiWBcAARUABAAEWwAC8mS6FOMAAq3gAwABefz0cwAC8soDAALytwFiWBYKQAQABasAAvLZgA8ABAALAAXZ8AMAAXlwAAFiUtQBYldkAWJa4AAAAAgLAAKt/gWPAALzDwAC8ycAAvy4DwABplgAAAWABwAD/aAAAAwTAAKuBgWPAALzvwAC9BAaD7ABgA8ABAAIBasAAvPVgA8ABAALAAXaBBMAAq4KBY8AAvRnAAL0fCYJJAGADg5AABMAAq4OBY8AAvT7AAL1ECYSvAGADgsMAAQXAAKuJgWPAAL1JwAC9ScAAvXAAAAADwAC9VsAAvXAAAAACAgLAAL1cAAAEgklgA4OQAMAAvWkAAASEr2ADgsMAAGADwACrfwE/AwgBwACrgoAAwFiXbAgBwACrg4EAwFiXegkBwAC9ScAA/34AAAAAAgbAAKuFgWPAAL11wAC9fcAAvocEAcAATrUAAAABA8AAvZnAAL6HAAAAAQEBwAC9pQAAAINKYAPAAF6lAABgA8AAq38BPgU9HMAAvbqAwAC9s8BYl+WCmAEAAWrAAL3AYAPAAQACwAF2gQDAAF6nTsAAvdTAAL3bAACCSWADg5ABHMAAveSAwAC93cBYl+XAAEVUAAAAAMAAXr9OwAC+D8AAvhYAAISvYAOCwwEcwAC+H4DAAL4YwFiX5cAARVgAAAAAwABexD0cwAC+TYDAAL5GwFiX5YKQAQABasAAvlFgA8ABAALAAXaBAMAAXqhKwAC+WwEfwAC+ZsAAq4kCAAKBwAC+dMBYmCiCwAC+fMBYmFQABsAAq4eBY8AAvozAAL6RwAC/LAAAwABpfQAAAAEDwAC+m8AAvywAAAABAQHAAL6lAAAAhEBgA8AAXlYAAFwBPgQ9HMAAvraAwAC+scBYmPiCmAEAAWrAAL68YAPAAQACwAF2gQDAAF5bPRzAAL7LgMAAvsbAWJj4wABFMgEAARbAAL7bLoJJwACrggDAAF5sPRzAAL7tgMAAvujAWJj4wABFNgEAARbAAL8OLoSvwACrgwDAAF5xPRzAAL8ggMAAvxvAWJj4gpABAAFqwAC/JGADwAEAAsABdoEAwABeXAAAWJe5AFiYzABYmasAAAACAsAAq4qBY8AAvzHAAL83wADCbgPAAGmXAAABYAHAAP9oAAAFBMAAq4yBY8AAv1vAAL9uBoPsAGADwAEAAgFqwAC/YWADwAEAAsABdoYEwACrjYFjwAC/hcAAv4wJheQAYAOI/AAEwACrjoFjwAC/osAAv6sJheUAYAOI/AAEwACrj4FjwAC/usAAv8EJhCIAYAPAAPxVAATAAKuQgWPAAL/QwAC/1wmBVQBgA8AA/FUAAQXAAKuWgWPAAL/cwAC/3MAAwCMAAAADwAC/58AAwCMAAAAEAgLAAL/tAAAEheRgA4j8AMAAv/sAAASF5WADiPwAAsAAwAwAAASEImADwAD8VQFqAGADwAD/JXnAAMAaAAAEgVVgA8AA/FUBagBgA8AA/yV5YAPAAKuKAT8FCAHAAKuNgADAWJqTCAHAAKuOgQDAWJqhCAHAAKuPggDAWJqwCAHAAKuQgwDAWJrJCQHAAL/cwAD/fgAAAAACBsAAq5KBY8AAwCjAAMAwwADBlgQBwABOtQAAAAEDwADASsAAwZYAAAABAQHAAMBWAAAAg0pgA8AAXqUAAGADwACrigE+Bz0cwADAa4DAAMBkwFibVoKYAQABasAAwHFgA8ABAALAAXaGAMAAXqdOwADAh8AAwI8AAIXkYAOI/AEcwADAmIDAAMCRwFibVsAARWEAAAAAwABe0U7AAMC8wADAxgAAheVgA4j8ARzAAMDPgMAAwMjAWJtWwABFYQAAAADAAF7RTsAAwOzAAMD0AACEImADwAD8VQEcwADA/YDAAMD2wFibVrAtAAAAAMAAXrNOwADBEsAAwRoAAIFVYAPAAPxVARzAAMEjgMAAwRzAWJtWsC0AAAAAwABesz0cwADBOoDAAMEzwFibVoKQAQABasAAwT5gA8ABAALAAXaGAMAAXqhKwADBSAEfwADBT8AAq5YEAAKBwADBW8BYm5mCwADBZMBYm8UChCKDwADBeMBYm/GBVYTAAMGKwFicHQbAAKuUgWPAAMGbwADBoMAAwmwAAMAAaX0AAAABA8AAwarAAMJsAAAAAQEBwADBtAAAAIRAYAPAAF5WAABcAT4GPRzAAMHFgMAAwcDAWJzXgpgBAAFqwADBy2ADwAEAAsABdoYAwABeWz0cwADB2oDAAMHVwFic18AART8BAAEWwADB7C6F5MAAq40AwABefj0cwADB/4DAAMH6wFic18AART8BAAEWwADCES6F5cAAq44AwABefj0cwADCJoDAAMIhwFic17A0AQABFsAAwjAuhCLAAKuPAMAAXmA9HMAAwkOAwADCPsBYnNewNAEAARbAAMJNLoFVwACrkADAAF5gPRzAAMJggMAAwlvAWJzXgpABAAFqwADCZGADwAEAAsABdoYAwABeXAAAWJsqAFicqwBYndQAAAACAsAAq5eBY8AAwnHAAMJ3wADFPwPAAGmYAAABYAHAAP9oAAAEBMAAq5mBY8AAwqHAAMK6BoPsAGADwAEAAgFqwADCp2ADwAEAAsABdosEwACrmoFjwADC0cAAwtwJmzsAYAOI/AAEwACrm4FjwADC68AAwvIJhCIAYAPAAPxVAATAAKucgWPAAMMBwADDCAmBVQBgA8AA/FUAAQXAAKuigWPAAMMNwADDDcAAw04AAAADwADDHsAAw04AAAADAQHAAMMkAAAEmztgA4j8AALAAMM3AAAEhCJgA8AA/FUBagBgA8AA/yV5wADDRQAABIFVYAPAAPxVAWoAYAPAAP8leWADwACrlwE/BAgBwACrmoAAwFiepAgBwACrm4EAwFieswgBwACrnIIAwFiezAkBwADDDcAA/34AAAAAAgbAAKuegWPAAMNTwADDW8AAxIoEAcAATrUAAAABA8AAw3vAAMSKAAAAAQEBwADDhwAAAINKYAPAAF6lAABgA8AAq5cBPgU9HMAAw5yAwADDlcBYn02CmAEAAWrAAMOiYAPAAQACwAF2iwDAAF6nTsAAw7jAAMPEAACbO2ADiPwBHMAAw82AwADDxsBYn03AAEVhAAAAAMAAXtFOwADD6sAAw/IAAIQiYAPAAPxVARzAAMP7gMAAw/TAWJ9NsC0AAAAAwABes07AAMQQwADEGAAAgVVgA8AA/FUBHMAAxCGAwADEGsBYn02wLQAAAADAAF6zSsAAxDEBH8AAxDzAAKuiAwABgcAAxE7AWJ+QAoQigsAAxGzAWJ+8gVWDwADEfsBYn+gGwACroIFjwADEj8AAxJTAAMU9AADAAGl9AAAAAQPAAMSewADFPQAAAAEBAcAAxKgAAACEQGADwABeVgAAXAE+BT0cwADEuYDAAMS0wFigcYKYAQABasAAxL9gA8ABAALAAXaLAMAAXls9HMAAxM6AwADEycBYoHHAAEU/AQABFsAAxOAumzvAAKuaAMAAXn49HMAAxPeAwADE8sBYoHGwNAEAARbAAMUBLoQiwACrmwDAAF5gPRzAAMUUgMAAxQ/AWKBxsDQBAAEWwADFHi6BVcAAq5wAwABeYD0cwADFMYDAAMUswFigcYKQAQABasAAxTVgA8ABAALAAXaLAMAAXlwAAFifIQBYoEUAWKFHAAAAAgLAAKujgWPAAMVCwADFSMAAyOYDwABpmQAAAWABwAD/aAAABQTAAKulgWPAAMVwwADFhwaD7ABgA8ABAAIBasAAxXZgA8ABAALAAXaQBMAAq6aBY8AAxaHAAMWlCYPzAGADhRcABMAAq6eBY8AAxcLAAMXGCYJrAGADwACcuwAEwACrqIFjwADF3MAAxegJhZoAYAOI/AAEwACrqYFjwADF/sAAxgoJwABL2gBgA4j8AAEFwACrr4FjwADGD8AAxg/AAMZaAAAAA8AAxh7AAMZaAAAABAQEwADGJAAABIPzYAOFFwDAAMYvAAAEgmtgA8AAnLsAwADGOgAABIWaYAOI/ADAAMZNAAAEwABL2mADiPwAAGADwACrowE/BQgBwACrpoAAwFiiLwgBwACrp4EAwFiiPQgBwACrqIIAwFiiTQgBwACrqYMAwFiiWwkBwADGD8AA/34AAAAAAgbAAKurgWPAAMZfwADGZ8AAx/cEAcAATrUAAAABA8AAxoXAAMf3AAAAAQEBwADGkQAAAINKYAPAAF6lAABgA8AAq6MBPgY9HMAAxqaAwADGn8BYouCCmAEAAWrAAMasYAPAAQACwAF2kADAAF6nTsAAxsLAAMbHAACD82ADglMBHMAAxtCAwADGycBYouDAAEVZAAAAAMAAXsVOwADG98AAxvwAAIJrYAPAAJy7ARzAAMcFgMAAxv7AWKLgsLMBAWADwACcuwFqwADHIV0DwAD+vwFgA8AAnLvAAWPgAMAAXrpOwADHOsAAx0cAAIWaYAOI/AEcwADHUIDAAMdJwFii4MAARWEAAAAAwABe0U7AAMd0wADHgQAAwABL2mADiPwBHMAAx4qAwADHg8BYouDAAEVhAQAAAZgIKcAAXtFKwADHsQEfwADHvMAAq68EAAQmwADHzAGBwADHzMBYoyNgA4UXgsAAx9LAWKNPg8AAx9jAWKOXhMAAx+bAWKPDAAbAAKutgWPAAMf8wADIAcAAyOQAAMAAaX0AAAABA8AAyAvAAMjkAAAAAQEBwADIFQAAAIRAYAPAAF5WAABcAT4GPRzAAMgmgMAAyCHAWKRggpgBAAFqwADILGADwAEAAsABdpAAwABeWz0cwADIO4DAAMg2wFikYMAARTcBAAEWwADISS6D88AAq6YAwABecj0cwADIWYDAAMhUwFikYLC3AQABFsAAyGMugmvAAKunAMAAXmc9HMAAyHOAwADIbsBYpGDAAEU/AQABFsAAyIUuhZrAAKuoAMAAXn49HMAAyJ2AwADImMBYpGDAAEU/AgABFsAAyK8uwABL2sAAq6kBmAgpwABefj0cwADI2IDAAMjTwFikYIKQAQABasAAyNxgA8ABAALAAXaQAMAAXlwAAFiitABYpDQAWKVkAAAAAgLAAKuwgWPAAMjpwADI78AAzLgDwABpmgAAAWABwAD/aAAABQTAAKuygWPAAMkSwADJJAaD7ABgA8ABAAIBasAAyRhgA8ABAALAAXaVBMAAq7OBY8AAyTvAAMlHCZs/AGADiPwABMAAq7SBY8AAyV3AAMlpCcAAT9cAYAOI/AAEwACrtYFjwADJgcAAyZYJwABZyABgA8AAceQABMAAq7aBY8AAyaXAAMmsCYZHAGADwAD8VQABBcAAq7yBY8AAybHAAMmxwADKEwAAAAPAAMm7wADKEwAAAAQDA8AAycEAAASbP2ADiPwAwADJ1AAABMAAT9dgA4j8AMAAyecAAATAAFnIYAPAAHHkAAHAAMoKAAAEhkdgA8AA/FUBagBgA8AA/yV5YAPAAKuwAT8FCAHAAKuzgADAWKZQCAHAAKu0gQDAWKZeCAHAAKu1ggDAWKZuCAHAAKu2gwDAWKaBCQHAAMmxwAD/fgAAAAACBsAAq7iBY8AAyhjAAMogwADLygQBwABOtQAAAAEDwADKOcAAy8oAAAABAQHAAMpFAAAAg0pgA8AAXqUAAGADwACrsAE+Bj0cwADKWoDAAMpTwFinDoKYAQABasAAymBgA8ABAALAAXaVAMAAXqdOwADKdsAAyoMAAJs/YAOI/AEcwADKjIDAAMqFwFinDsAARWEAAAAAwABe0U7AAMqwwADKvQAAwABP12ADiPwBHMAAysaAwADKv8BYpw7AAEVhAQAAAZgIKcAAXtFOwADK+8AAyxEAAMAAWchgA8AAceQBHMAAyxqAwADLE8BYpw6wswEBYAPAAHHkAWrAAMsxXQPAAP6/AWADwABx5MABS00AwABeuk7AAMtDwADLSwAAhkdgA8AA/FUBHMAAy1SAwADLTcBYpw6wLQAAAADAAF6zSsAAy2QBH8AAy2/AAKu8BAADgcAAy3rAWKdRgsAAy4jAWKd9g8AAy5bAWKeuAYZHhMAAy77AWKf4BsAAq7qBY8AAy8/AAMvUwADMtgAAwABpfQAAAAEDwADL3sAAzLYAAAABAQHAAMvoAAAAhEBgA8AAXlYAAFwBPgY9HMAAy/mAwADL9MBYqIiCmAEAAWrAAMv/YAPAAQACwAF2lQDAAF5bPRzAAMwOgMAAzAnAWKiIwABFPwEAARbAAMwgLps/wACrswDAAF5+PRzAAMw4gMAAzDPAWKiIwABFPwEAARbAAMxKLsAAT9fAAKu0AMAAXn49HMAAzGKAwADMXcBYqIiwtwEAARbAAMxsLsAAWcjAAKu1AMAAXmc9HMAAzI2AwADMiMBYqIiwNAEAARbAAMyXLoZHwACrtgDAAF5gPRzAAMyqgMAAzKXAWKiIgpABAAFqwADMrmADwAEAAsABdpUAwABeXAAAWKbiAFioXABYqYkAAAACAAAAAYFjAFipnQBX3MUAWBGgAFgSogBYWSgAWF15AFhhFABYZAUAWGekAFhrPwBYbjQAWHJjAFh2jgBYeY0AWH0aAFiB0ABYhWQAWIgxAFiLQgBYjcUAWJDEAFiTtwBYlskAWJm8AFid5QBYoVgAWKV1AFipmgAAABoAWKmdAAAAAAACBsAAq73AAGmbgc0AAAGBAQEAqtEAAQEHqpKqgKsOqwirD6sknsYHqtOq1Kriqw6rjqusq7IAAAAAAAABgc0AWKpZAFiqVgAAAAAAWKpZAAAAAAACBsAAq74Agc4AAB2A2gAAgi6CCACBAgAAm7+CCACBOAAApLEAAIFRAAC5JgAAgXAAAMAAgdcAAIGUAAC5hgAAgbYAAMAATuUAAIHeAADAAGIFAACCAQAAvf4AAIIlAADAAGPHAACCRgAAwACQuAAAgmUAAMAAgqUAAIKBAADAAKoXAACCogAAwACcuAAAgs0AAMAAg5sAAILoAADAAHHhAACDCQAAwACeMAAAgyMAAMAAqHAAAINBAADAAG//AACDagAAwABsEQAAg5MAAMAAaGoAAIO1AACA+wAAg88AAMAAtakAAQEBwABpnIQXAADAAGp6AACEQQAAwABozgAAhGQAAMAATKYAAISIAADAAGkyAACEpwAAwABxRgAAhNAAAMAAhWEAAAAAAAQCwACrv4HOhSSFKonTN8AAaZ0AAAFgAcAAgucAAWABwACsMAABBcAArAsAAAAABAAAAwAAAAAAAwMDAAAAAIboYAObwgAAAAAAh/ZgA5wFAAAAAAC5R1sAAGADwACrvwE/AQkAAMAAgxsDAAOAAMBYq9eBAMBYq+KCAMBYq+0ARgbAAKvCgc6PJo86j0IBArMEwACrvgAAAAEDj0KPQgAAAAAAAABgA4EUAAbAAKvFgc6PRo9dj2UBAqUuAAAAAQOPZY9lAAAAAAAAAGADtt0ABsAAq8aBzo9pj4CPigECtLMAAAABA4+Kj4oAAAAAAAAAYAPAAIViAAbAAKvHgc6Pjo+fj6wBAqs6AAAAAQOPrI+sAAAAAAAAAGADviUABsAAq8iBzo+wj9GP3gECtigAAAABA4/ej94AAAAAAAAAYAPAALWqAAbAAKvJgc6P4o/5kAgBAoboAAAAAQOQCJAIAAAAAAAAAGADm8IABsAAq8qBzpAMkB+QLQECtFkAAAABA5AtkC0AAAAAAAAAYAO5hwAGwACrw4HOkDGQRZBVAQK5EMAAq74AAAABA5BVkFUAAAAAAAAAYAPAAGwSAAbAAKvEgc6QWZBvkIEBAsAAWA7AAKu+AAAAAQOQgZCBAAAAAAAAAGADwACotwAGwACrzYHOkIaQjZJKAADAAGmewACrvgAAAAEDkKeSSgAAAAICApC7AAAAhZpgA4j8AJDXAAAAvR5gA8AAceQAAGADwAD/aAE+AkmQ5yWQ+ICQ68BYra9gA4k3PgJJkRUckTAWkSYUkRnAWK2vAAFgA4k3hO+JPUgBAAEWkUMWkTMuhujAAKw6mzqb2QDAAP91PgFKkZIBKz9Kka0BHpG4wABxbwQABBaRzS60WcAArDsWkd0uuRDAAKu+wACsNBySBBaR+S60s8AArDecbwEAARaSGhSSDcBYra8AAWADiTeE74k9AMAAhXaBkibAWK27AD9KkjsBKwbAAKvQgc6ST5JgkysAAMAAWdEBapJQYAPAAP9oAgAAAQOSdpMrAAAAAQEBkoMAAADAAGmfYAOI/AAAXAE+Ak6SmpKfAACClGADwABjywEckqwWkqEutLPAAKw3wABNowEAAYCSuMBYrq0AwACFa0mSxSEWks+BksrAWK7Bh53AAGPQPgE9HJLwFpLiLrYowACsObBZAQABHpMEwABpxwEAAYGTG8BYrsEAAMAATi4/BsAAq86BzpMwkz+TyQAAwABpoMAAq74AAAABA5NQk8kAAAABAQGTYwAAAIWFXQPAAP6/AWADiPwAAF0DwAD+vwFgA8AAY8sBPgJJk3AWk3qAk3TAWK9XgVXAAP6hSpODASs/SpOUARyTvRyToYCTm8BYr1eAqwEBYAPAAGPLARaTsBaTpS60s8AArDfAAE2jwACFawDAAP6IgK0AAAAAwAD+kwbAAKvRgc6TzpPflC4AAMAAWdIBapPPYAPAAP9oAgAAAQOT8JQuAAAAAAAAAFwBPgE9HJQHFpP5LrYowACsOcAAaaEBAAFqlB9gA8AAaM/AAT5aAMAAtcoGwACr0oHOlDOURJhLAADAAFnhAWqUNGADwAD/aAIAAAEDlFWYSwAAAAEBAZRfAAAAhJtgA4OvAABcAT4BSZRsIhaUdoCUcMBYsFiFHIPIAByUsBaUki65EMAAq77AAKw0tA8BAAEclMkWlL4utLPAAKw3nG8BAAEWlNiAlNLAWLBYhRmDmADAAIV2AMAAbBo+B06U/5UGAACCamADviUBHJUTFpUILrSzwACsN5xoAQABgJUdwFiwWADAAIVyTpWqlbYAAMAAS5dgA8AA/FUBHJXJFpW4LrkQwACrvsAArDTAAE0pAQABgZXbwFiwvwDAAGwhTpX+lgcAAIb3XQPAAP6/AWADwABiOAEmlf4BHJYxFpYeFpYTLrSzwACsN6VZwACFZLQpAQABgZZDwFiwvwC8cl0DwAD+vwFgA8AAYjhOlmOWdgAAwABLlF0DwAD+fQFgA8ABAAIBHpaCwABocAMAAxaWmC6lLsAArDYWlqIutFnAAKw7g5aywFixIQBOltSW5wAAwABLlV0DwAD+fQFgA8ABAAIBHpbzwABocQMAAxaXCS6lLsAArDYWlxMutFnAAKw7g5cjwFixIQA9HJdCFpc0LrYowACsOcAAaaIBAAEcl2AWl1UutLPAAKw3wABNaQQAA4CXicBYsFiEl5DAWLFuhZekwFixrQHAAEuXgpfPwFiw68AAhYQAwAC1zD0cl/0Wl+QutijAAKw5wABpogEAARyYGxaYEC60s8AArDfAAE1qAQABgJg6wFiwWADAAIWFAMAAtcw/BsAAq9OBzphQmGGb5QAAwABZ4AFqmFFgA8AA/2gCAAABA5h4m+UAAAABAQGYiAAAAJk0YAOD4gAAXAE+Ak6YqJivAACCamADviUBHJi8FpixLrSzwACsN5xoAQABgJjGwFiypQDAAIVySZjYIhaY6ICY3MBYsqWEJIPtACEcmQYWmPcutFnAAKw7st4BAAGBmRbAWLK3ALpvPgVOmaaZsgAAwABLl2ADwAD8VQEcmcUWmbQuuRDAAKu+wACsNMAATSkBAAGBmdfAWLK3AMAAbCFOmfqaAwAAhvddA8AA/r8BYAPAAGI4ASaZ+gEcmi0WmhoWmg8utLPAAKw3pVnAAIVktCkBAAGBmj/AWLK3ALxyXQPAAP6/AWADwABiOE6aX5pyAADAAEuUXQPAAP59AWADwAEAAgEemn7AAGhwAwADFpqULqUuwACsNhaani60WcAArDuDmq7AWLNLAE6a0JrjAADAAEuVXQPAAP59AWADwAEAAgEemu/AAGhxAwADFpsFLqUuwACsNhabDy60WcAArDuDmx/AWLNLAD0cmz4WmzAutijAAKw5wABpogEAARybXBabUS60s8AArDfAAE1nBAADgJuCwFiypYSbj8BYs5iFm6PAWLPXAcAAS5eCm87AWLMVwACFhgDAALXMPwbAAKvUgc6b6pv7nTUAAMAAWb4BapvrYAPAAP9oAgAAAQOcC501AAAAAQEBnBgAAACbO2ADiPwAAFwBPgI9HJw5FpwrLrYowACsOcAAaaEBAAFqnFFgA8AAaM/AAT9OAMAAtco9HJxvFpxhLrYowACsObBVAQABHpyFwABphQMAAxactBacpS60WcAArDuyU7nUapzbYAPAAGp7wAEjOTGdCmADwABjywEcnRYWnQsutLPAAKw3wABNowEAAYCdIsBYtJUAwACFawAAwABOLwbAAKvVgc6dOp1LnoEAAMAAWb8Bap07YAPAAP9oAgAAAQOdWJ6BAAAAAQEBnWUAAACbO2ADiPwAAFwBPgI9HJ2GFp14LrYowACsOcAAaaEBAAFqnZ5gA8AAaM/AAT29AMAAtco9HJ24Fp2qLrYowACsObBVAQABHp3OwABphQMAAxad/Rad7i60WcAArDuyVLnVap4nYAPAAGp7wAEjKDGeVmADwABjywEcnmIWnlcutLPAAKw3wABNowEAAYCebsBYtWQAwACFawAAwABOLwbAAKvWgc6ehp6Xn9wAAMAAWcABap6HYAPAAP9oAgAAAQOeqJ/cAAAAAQEBnrUAAACbO2ADiPwAAFwBPgI9HJ7WFp7ILrYowACsOcAAaaEBAAFqnu5gA8AAaM/AAT3wAMAAtco9HJ8NFp7/LrYowACsObBVAQABHp8jwABphQMAAxafUhafQy60WcAArDuyVbnWap+CYAPAAGp7wAEjOTGfsWADwABjywEcn70Wn7IutLPAAKw3wABNowEAAYCfycBYtjMAwACFawAAwABOLwbAAKvXgc6f4Z/yo2oAAMAAWeIBap/iYAPA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I4SsFcBZEaxhwAD+7wBOrD2sTAAAhK5gA74JARysWRasTi60s8AArDfAAFCXAQABhaxjwFkRvwDAAIWAPRysfhascC62KMAArDmwVQEAASOGrJDAWRHMHqymwABplwQABIesx8BZEegUrNTAWRIUCAAmrPoBHKz6FqzvLrSzwACsN8AATaMBAAGBrQbAWRF9AMAAhWtgA8AAY/MUrQ3AWRJnCQAAHq0rwABplgQABIetTMBZEegUrVnAWRIUCAAmrX8BHK1/Fq10LrSzwACsN8AATaMBAAGBrYvAWRF9AMAAhWtgA8AAY/MUrZLAWRJnCQAAAWADwABpcgDAAE4vSa2oHK2/Fq2xga2swFkRfYU4iTuB1gEAATStwwOtw63wAAAAAQEBrdAAAACClGADiPwAAGADwAD8VQFKrdkBISWt3hSt2cBZE34KAGADiRMAwAD+kj4BPRyuCRat+y62KMAArDnAAGmhAQABaq4hYAPAAGjPwAE/2gDAALXKP0muSRyuXBauTS60WcAArDuyKQEAAYeucMBZEegAulw+AT0crpQWroYutijAAKw5wABpoQEAAWqurGADwABoz8ABPxgAwAC1yj9JrswiIhau14Cu0MBZEXGEJIOgABau+Yeu7cBZEei0DL5WACGGryLAWRHMPgE9HK9BFq8zLrYowACsOcAAaaEBAAFqr1lgA8AAaM/AAT++AMAAtco/BsAArFOBzq/kr/WxVQAAwABZ1AFqr+VgA8AA/2gCAAABA7APsVUAAAADAwOwGQAAAJomYAODHACwMAAAAIU4XQPAAP6/AWADiPwAsFoAAACEr2ADgsMAAFwBPgNOsHWwhAAAhK5gA74JARywkRawhi60s8AArDfAAFCXAQABgrCbwFkUvwDAAIWATrC2sLsAAIKUYAPAAGPzARywyBawvS60s8AArDezgQIAAoCw3MBZFKCBsOHAWRSsAMAAhW89HLEMFrD1LrYowACsObBZAQABHrEgwABpzAIAAoSxO8BZFP+DsUHAWRTRAADAAE4uBsAArFSBzrFasWu0bgAAwABZ5QFqsVtgA8AA/2gCAAABA7GRtG4AAAABAQGxqwAAAIPzYAOGDgAAXAE+A0AWscOAsb7AWRWQhCKGErG+scoATrHjse8AAJk0YAO+UgEcsfwWsfEutLPAAKw3qHQBAAEWshCAsgvA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SYEhHMAASYyBwABJhcBZI6NIAQABKwDAAP91PgFJwABJnRbAAEmogcAASaHAWSOjs9q+LT4BPRzAAEnMFsAASb4utijAAKw5sFUBAAEewABJ4sAAaY4BAAEmwABJ+QGBwABJ+cBZI6NgA746AADAAE4vPgE9HMAASigWwABKGi62KMAArDmwVQEAAR7AAEo+wABpiwEAAYHAAEpRwFkjowAAwABOLz4CPRzAAEqEFsAASnYutijAAKw5sFUBAAEewABKmsAAaYoCAAIcwABKxhbAAEq7LrSzwACsN8AAT2MBAAEWwABK6RbAAErbLqs6wACsOIUZvjMAwACFeWrAAEsSYAPAAGp7wADyxQAAwABOLz0cwABLMRbAAEsjLrYowACsOcAAaaEBAAFqwABLSWADwABoz8ABPvwAwAC1ygbAAKxdgc7AAEttwABLfsAATe4AAMAAWd4BasAAS25gA8AA/2gCAAABA8AAS47AAE3uAAAAAQEBwABLlwAAAIC9YAOIxwAAXAE+Ak7AAEuwwABLtwAAgmpgA74lARzAAEvMFsAAS8EutLPAAKw3wABQkwMAAhbAAEvbLqs6wACsOIDAAEvqwFklYwGbZCnAAIV4ScAATAMhHMAATA6BwABMB8BZJXdIAQABKwDAAP91PgFJwABMHxbAAEwqgcAATCPAWSV3h5u+LD4BPRzAAExLFsAATD0utijAAKw5sFUBAAEewABMYcAAaYwBAAEmwABMeQGBwABMecBZJXdgA743AADAAE4vPgE9HMAATKgWwABMmi62KMAArDmwVQEAAR7AAEy+wABpjQEAASbAAEzXAYHAAEzXwFkld2ADvjoAAMAATi8+Aj0cwABNChbAAEz8LrYowACsObBVAQABHsAATSDAAGmKAgACHMAATUwWwABNQS60s8AArDfAAE9jAQABFsAATW8WwABNYS6rOsAArDiFGb4zAMAAhXlqwABNmGADwABqe8AA8sUAAMAATi89HMAATbcWwABNqS62KMAArDnAAGmhAQABasAATc9gA8AAaM/AAT78AMAAtcoGwACsXoHOwABN88AATgTAAFHZAADAAFnVAWrAAE30YAPAAP9oAgAAAQPAAE4jwABR2QAAAAQEBMAATkIAAAC0bWADiLwAwABOWwAAAKrZYAPAAP4bAMAAToMAAACq2l0DwAD+vwFg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pWeBwABBYMBZpXcAwACtnEnAAEFvHMAAQYQWwABBcy7AAGnywACtikgBAAErAMAA/3U+AUrAAEGVASOBwABBnMBZpXdqwABBp2ADwACNWMABaqBqwABBtGADwACNWMABDb0BYAPAAI1YP0AhHMAAQdEWwABBzS6CkMAArYhIAQABKwDAAP91wABBzcAAQdgASsAAQd8BLgbAAK2WgdHAAEJywABCe8AAQ34AAMAAXTMAAAABA8AAQonAAEN+AAAAAQEBwABCjwAAAJp6YAPAAPxVAABgA8AAjVgBPgZAHsAAQqbAAFsoAgACJ5qBFsAAQrcuasAArYUAwABCpsAAQr0AQB7AAELLwABbKAIAAiecKRbAAELmFsAAQuAuasAArYWDtZ89AMAAQsvAAELrAD0cwABC8y7AAGn3AgACFsAAQv8uasAArYWAwABDBsBZpsMAwACtnEnAAEMVHMAAQyoWwABDGS7AAGnywACtikgBAAErAMAA/3U+AUrAAEM7AWrAAENCYAPAAI1YwAFqYz9AIRzAAENhFsAAQ10ugpDAAK2ISAEAASsAwAD/dcAAQ13AAENoAErAAENvAS4GwACtl4HRwABECMAARBHAAEUgAADAAF02AAAAAQPAAEQlwABFIAAAAAEBAcAARCsAAACaemADwAD8VQAAYAPAAI1YAT4GQB7AAERCwACNVAEAARbAAERXLmrAAK2FAMAARELAAERdAEAewABEa8AAWygCAAInnCkWwABEhhbAAESALmrAAK2Fg7WfPQDAAERrwABEiwA9HMAARJMuwABp9wIAAhbAAESfLmrAAK2FgMAARKbAWafqAMAArZxJwABEtRzAAETKFsAARLkuwABp8sAArYpIAQABKwDAAP91PgFKwABE2wFqwABE4mADwACNWMABaqA/QCEcwABFAxbAAET/LoKQwACtiEgBAAErAMAA/3XAAET/wABFCgBKwABFEQEuBsAArZiB0cAARa7AAEW3wABHAgAAwABdNwAAAAEDwABF08AARwIAAAABAQHAAEXZAAAAmnpgA8AA/FUAAGADwACNWAE+B0AewABF8MAAjVQBAAEWwABGBS5qwACthQDAAEXwwABGCwBAHsAARhnAAFsoAgACJ4D0FsAARi0WwABGJy5qwACthYO1nz0AwABGGcAARjIAQB7AAEZAwABbKAIAAiecKRbAAEZgFsAARlsWwABGVS5qwACthYO1nz2DtZ89AMAARkDAAEZlAD0cwABGbS7AAGn3AgACFsAARnkuasAArYWAwABGgMBZqQ4AwACtnEnAAEaPHMAARqQWwABGky7AAGnywACtikgBAAErAMAA/3U+AUrAAEa1AWrAAEa8YAPAAI1YwAFqmT9AIRzAAEblFsAARuEugpDAAK2ISAEAASsAwAD/dcAARuHAAEbsAErAAEbzAS4GwACtmYHRwABHf8AAR4jAAEhhAADAAF0xAAAAAQPAAEehwABIYQAAAAEBAcAAR6cAAACaemADwAD8VQAAYAPAAI1YAT4FQCIWwABHyRbAAEfEFsAAR74uasAArYWClJ9CncSfywEewABH1sAAWygCAAInhCsWwABH5i5qwACthQDAAEe+wABH7AA9F8AAR/QugpAcwABICBbAAEf6LoU4wACthpaEAQABFsAASA0uasAArYUAwACNbcAArYg9HMAASBkuwABp9wIAAhbAAEglLoKQwACtiIDAAEgqwFmqaQDAAK2cQCEcwABIRBbAAEhALoKQwACtiEgBAAErAMAA/3XAAEhAwABISwBKwABIUgEuBsAArZqB0cAASN3AAEjmwABKcAAAwABdNQAAAAEDwABJBMAASnAAAAABAQHAAEkKAAAAmnpgA8AA/FUAAGADwACNWAE+CEAewABJIcAAjVQBAAEWwABJNi5qwACthQDAAEkhwABJPABAHsAASUrAAFsoAgACJ2MWwABJXhbAAElYLmrAAK2Fg7WfPQDAAElKwABJYwBAIRzAAEl/FsAASXEuhTjAAK2GSAEAAWrAAEmCYAPAAI1lwAEOlADAAP91wABJccAASZIAPRfAAEmaLoKQHMAASa4WwABJoC6FOMAArYaWhAEAARbAAEmzLmrAAK2FAMAAjW3AAK2IPRzAAEm/LsAAafcCAAIWwABJyy6CkMAArYiAwABJ0MBZq3sAwACtnEnAAEngIiIhgMAASeXAWat7ACEewABJ8sAArScBAAEWwABKBBbAAEoALoKQwACtiIO1nz0AABzAAEoeFsAASg0uwABp8sAArYpIAQABKwDAAP91PgFKwABKLwFqwABKNmADwACNWMABDb0/QCEcwABKUxbAAEpPLoKQwACtiEgBAAErAMAA/3XAAEpPwABKWgBKwABKYQEuBsAArZuB0cAASyjAAEsxwABNIwAAwABdMgAAAAEDwABLRMAATSMAAAABAQHAAEtKAAAAmnpgA8AA/FUAAGADwACNWAE+CU7AAEtgwABLZgAAkqlgA58iARbAAEtoLmrAAK2FScAAS3MhHsAAS3jAAFsoAgACJ4FqgcAAS4bAWa1SAD4CQBbAAEujgcAAS53AWa1Snc+fM8AAS53AAEu4AD2JwABLwcBZrVIWwABLz4HAAEvJwFmtUoO1nz0/QB7AAEvmwABbKAIAAieBaoHAAEv0wFmtUgDAAEvmwABL+gBJwABMARbAAEwQFsAATAuBwABMBcBZrVKDtZ89nc+fMz4BPYnAAEwvwFmtUhbAAEw9gcAATDfAWa1Sg7WfPT89F8AATE4ugpAcwABMYhbAAExULoU4wACthpaEAQABgcAATGfAWa1SAMAAjW3AAK2IPRzAAExzLsAAafcCAAIWwABMfy6CkMAArYiAwABMhMBZrTcAwACtnEnAAEyTIiIhgMAATJjAWa03ACEewABMpcAArScBAAEWwABMtxbAAEyzLoKQwACtiIO1nz0AABzAAEzRFsAATMAuwABp8sAArYpIAQABKwDAAP91PgFKwABM4gFqwABM6WADwACNWMABDb0/QCEcwABNBhbAAE0CLoKQwACtiEgBAAErAMAA/3XAAE0CwABNDQBKwABNFAEuBsAArZyB0cAATSjAAE0twABSFgAAwABp9wAAAAEDwABNOMAAUhYAAAACAgLAAE0/AAAAkqlgA58iAMAATUsAAACaemADwAD8VQAAXAE+A0nAAE1bHsAATV/AAFsoAgACJ4D0FsAATXOAwABNbcBZr0eDtZ89AD4CPRfAAE2CLsAAafCAwABNl8BZr0fAAK2HPRfAAE2kLoKQiMAATarAWa9HFsAATbiAwABNssBZr0eDtZ89wACtiD89iMAATcjAWa9HFsAATdaAwABN0MBZr0eDtZ89QUPAAE3gHsAATefAAFsoAgACJ5wpgMAATfzAWa9HAD4OTsAAThLAAE4kAADAAGn4YAOfIgGAwABOJsBZr0c9iMAATnDAWa9HHMAATpsewABOeMAAjVYCAAKAwABOjsBZr0cpAJaEAQABgMAATqDAWa9HAMAAjW09iMAATq7AWa9HFsAATryAwABOtsBZr0eDtZ89ScAATsghHsAA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GMAArSsBAAGBwABqJMBZxBUAwACtzEnAAGoxHMAAaj0WwABqNS7AAGoBwACtzEgBAAErAMAA/3U+AT0XwABqUC7AAGoBHsAAalrAAK0rAQABFsAAamuBwABqZsBZxBWDtZ89AMAArcw/ScAAaoAcwABqjBbAAGqELsAAagHAAK3MSAEAASsAwAD/dT4BPRfAAGqfLsAAagEewABqqcAAWzwBAAGBwABqtcBZxBUAwACtzD8/SsAAas4BLgbAAK3PgdHAAGriwABq9MAAb/YAAMAAQosBasAAauNgA8AA/2gCAAABA8AAawLAAG/2AAAAAgICwABrCQAAAJKpYAOfIgDAAGsXAAAAoa9gA8AAWaMAAGADnyIBPghAHsAAayzAAPf8AgACFsAAazyAwABrNsBZyhuDtZ89FsAAa0IuasAArckAwABrLMAAa0gATsAAa1XAAGtaAACDtWADnyIBFsAAa1wuasAArck9HMAAa3cWwABrboHAAGtnwFnKKaodwABZpcAAQgwBAAEWwABrii5qwACtyQDAAFlETsAAa5rAAGugAACA7mADwAD+GwGTQUPAAGupKT4GTsAAa8fAAGvQAADAAEKNYAPAAI1YAR7AAGvSwACNVQMAA4LAAGvewFnKdikWwABr6i6iCMAArcoAScAAbAAcwABsDYTAAGwEwFnK4kgBAAFqwABsEGADwACNWMABDb0AwAD/dT4BQ8AAbDYiHMAAbEaEwABsPcBZyuJIAQABasAAbElgA8AAjVjAAQ29AMAA/3UAHsAAbFPAAFsoAgACJ4OEFsAAbGaCwABsYcBZynaDtZ89AD4DPRzAAGyAgcAAbHnAWcopwABCSAIAAhbAAGy0gsAAbK/AWcp2g7WfPWrAAGzAXQOR0QFhAwFgA58iYAORusAAk90AwABaez2KwABs5MBZynYewABs68AAWzUBAAGCwABs+MBZynYAPYzAAG0JwFnK4h7AAG0UwACNVQMAA4LAAG0gwFnKdikWwABtLC6iCMAArcoAPz2IwABtlcBZyhscwABtpoTAAG2dwFnK4sAAQoACAAKCwABtt8BZynaBwABtvcBZyikAwACNXz2KwABtzMBZynYWwABt2YDAAG3TwFnKG4O1nz09i8AAbefAWcrEHMAAbeWDwABt58BZysRkAQABlADAAP9BScAAbfQhHsAAbfnA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/hs/TpS6lLwAAIOpYAPAAP4bARyU2RyUxRaUvi64t8AArhfAAK4mwABJUwEAAYCU1sBaH9sAwABl/oJPAQABHJTqFpTjLri3wACuF8AAribAAElTAQABgZT7wFof6QDAAGX+AMABABJJlQQhHJUKhJUIwFohEEgBAAGTAMAA/z9KlRABhJUXwFohED9KlWcBHJWAFpVuLsAAalTAAK4XwACuLJt3AgACgJWIwFof24GVi8BaH+kAwAC2WgbAAK44gdOVlpWkl7kAAMAAXkkAAAABA5W9l7kAAAABAQGVzAAAAICWYAPAAGI4AABgA8AAlxABPgNJldkWleOAld3AWiHps9rAAGJHPgJOlg2WHgAAwABRMWADwABiXQEmlg0BgJYgwFoh6WADwABiXUqWLQEclj0WljQuwABFCMAArhfAAK4owABFGgEAARaWYoGWUcBaIheWe8AAYl8AwABeOT9JluwclvAuwABFJgEAAYCXEsBaIekAwACuNj4BSpciARyXOhaXKS7AAF5DwACuF8AArinAAF5EAQABgJdDwFoh6QDAAK3gP0qXVQEcl15ql19gA8AAmX7AASMhIAIAAifAAGDOMZdxYAPAAP9oAhyXeRaXci64t8AArhfAAK4mwABJpAEAAYCXkcBaIekAwABmKRyXoBaXmS64t8AArhfAAK4mwABJUQEAAYCXrcBaIekAwABl/QDAAJmABsAArjmB05e+l8KhyQAAwABFFAAAAAEDl82hyQAAAAICApfWAAAAsTlgA8AAjzoAl+wAAACldGADwABM+AAAYAPAAP4bAT4RTpgNmBoAAMAAXYxgA8AAj2UBJpgNARaYLhaYJICYHMBaI0rAAEnGwACPPIMewAD+o2ADwACPZU6YUJhiAADAAF2OXQPAAP6/AWADwACPbgEemHDAAP7FAQFgA8AAj24BFpiUgJiMwFojSsAAXY7AAI9LAE6YvZjNAADAAGpgYAPAAK5CAR+Y08AAroAIAAgWmOwuswTAAK4XwACuIhaY/i649MAArhfAAK4lFpkVLri3wACuF8AAriYWmSUuwABFCMAArhfAAK4oFpk3LsAAXkPAAK4XwACuKS4WmV8utsXAAK4XwACuK4GZdcBaI1gATpmNmaIAAMAAamFgA8AArpMBH5mowACumQAAAABOmdGZ2gAAwABqYmADwACV+QEc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Kt4AWivxAFosagBaMJ8AWje3AFo5jQAAAAsCwACuQoHUwABQVsAAUFzAATKNA8AAapAAAAFgAcAA/2gAAA0EwACuRYHUwABQhsAAUI4JswTAAK4XAGADgRQABMAArkaB1MAAUKXAAFCyCbj0wACuFwBgA73PAATAAK5HgdTAAFDCwABQyAm4t8AArhcAYAPAAGWTAATAAK5IgdTAAFDawABQ4gnAAEUIwACuFwBgA8AAXkMABMAArkmB1MAAUPzAAFEMCcAAXkPAAK4XAGADwACt+AAEwACuSoHUwABRI8AAUTAJwABqkcAArhcAYAPAAK4fAATAAK5LgdTAAFFHwABRUwm2xcAArhcAYAPAAE6FAATAAK5MgdTAAFFqwABRdwnAAF1pwACuFwBgA8AATPgABMAArk2B1MAAUYnAAFGXGMAAU1XAAK4XAGADwAB5XAErBMAArk6B1MAAUarAAFG5GMAAapLAAK4XAGADwAB5tgErBMAArk+B1MAAUlXAAFJfGMAAapPAAK4XAGADwACXGgErBMAArlCB1MAAUmHAAFJrGMAAapTAAK4XAGADwACXGgErBMAArlGB1MAAUm3AAFJ3GMAAapXAAK4XAGADwACXGgErAQXAAK6AgdTAAFO6wABTusAAVpAAAAADwABTycAAVpAAAAAICAjAAFPWAAAEswRgA4EUAMAAU+sAAAS49GADvc8AwABUBQAABLi3YAPAAGWTAMAAVBgAAATAAEUIYAPAAF5DAMAAVC0AAATAAF5DYAPAAK34AMAAVEoAAATAAGqRYAPAAK4fAMAAVGQAAAS2xWADwABOhQDAAFR9AAAEwABdaWADwABM+AAAYAPAAK5CAT4BScAAVJIWwABUnxbAAFSWLrMEwACuF8AArkWCuIFWPgI9F8AAVLkuwABTVcAArhcfwABUysAAeXcGAAYWwABU5y62xcAArhfAAK5LIxbAAFUIFsAAVP8uswTAAK4XwACuRYKtgTQfwABVL8AAeDoBAAEWwABVUC62xcAArhfAAK5LAB/AAFVuwAB4egEAARbAAFV/LrbFwACuF8AArksAAWADwAB4IxbAAFWlFsAAVZgutsXAAK4XwACuS7jPwABOiRbAAFXIFsAAVbsutsXAAK4XwACuS6VZwABOixbAAFXzFsAAVeYutsXAAK4XwACuS7RZwABOjRbA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wABaJRbAAFodgMAAWhXAWkOpwABdlMAAjz2BpQEAATTAAForA8AAWivAAFpZAAAAAQEBwABaMwAAAMAAUwtgA8AAj08AAGADwAD8VQFKwABaPgEhFsAAWkaDwABaP8BaRGfAAF4MwACPUwDAAP6JTsAAWmjAAFp3AADAAGqaYAPAAQACASTAAFqqAifAAGqbHMAAWpUewABajMAA0oAAAAAAoDYBAAE5wABHDwDAANKDTsAAWrzAAFrHAADAAGqcYAPAAK6NARzAAFrRLsAAap0DAAIWwABa5YDAAFrdwFpDqcAAXZTAAI89gsAAWu7AWkPWAcAAap4pwACuYU7AAFspwABbMgAAwABqYmADwACV+QEcwABbOmrAAFs3YAPAAJl+wAEjIYVoAgACasAAW0RgA8ABAALAAXfNMsAAW1VgA8ABAAJgA8AA/2glJ8AAaqAfwABbvsAAl+4CAAEnwABqoAGwvConwABqoRzAAFwcasAAXB1gA8AAmX7AASMhIAEAAWrAAFwgYAPAAQACwAF30gDAAJmAJ8AAaqMcwABcZhbAAFxSLsAARQjAAK4XwACuSMAARRcBAAEWwABclxbAAFyIFsAAXHsutsXAAK4XwACuS7RZwABOjbKyujEAwABeNifAAEmqHsAAXMXAAJSwAQABFsAAXOEWwABc1hbAAFzPLri3wACuF8AArke4gMAAZbjAAEmqwABmtQAnwABqpB/AAF0NwACWCQEAAR7AAF0WwACkRAQABBbAAF0yLrMEwACuF8AArkUWwABdPC7AAEUIwACuF8AArkgWwABdRi64t8AArhfAAK5HFsAAXVsWwABdTi62xcAArhfAAK5LtFnAAE6NAAAnwABqpRzAAF2ELrCjAQABasAAXaFgA8ABAALAAVvmAMAArlonwABqphzAAF3ULrCjAQABasAAXfFgA8ABAALAAW8SAMAArlonwABqpxzAAF4hLrCjAQABasAAXj5gA8ABAALAAW8XAMAArlonwABqqBzAAF5rasAAXmxgA8AAmX7AASMhIAEAASeq3ADAAJmAJ8AAaqkfwABenMAAl+4CAAEWwABexRbAAF6+Lri3wACuF8AArkfAAEmhwABmzAGwvConwABqqhzAAF8OasAAXw9gA8AAmX7AASMhIAIAAieG0RbAAF8eFsAAXxcuuLfAAK4XwACuR8AA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n0HAWnG5AMAA/otOwACfXMAAn2cAAJ+BXQPAAP6/AWADwACYxQExwACfaWADwACYxQBJwACfchzAAJ+FFsAAn3qAwACfdsBab+KE88AAj71IAQABKwDAAP91PgI9HMAAn+gUwACf0sBacfQIAFYBAAEfwACf78AAmNECAAIewACf+MAAlLABAAEnmTQAHMAAoBIuheoBAAGAwACgIcBab+IAwACuXAAAwAD+0D0cwACgOhTAAKAvwFpx9AgAVgEAAR/AAKBBwACY0QIAAhzAAKBRFsAAoEouuLfAAK4XwACuR7B8AQABFsAAoGCAwACgXMBab+KWe8AAj6AAwABmLB7AAKBqwACUtQEAAZQAAADAAP7QPz0cwACgkIfAAKCFwFpxMIP9AQABNMAAoJgDwACgmMAAoZMAAAABAQHAAKCgAAAAlpxgA8AAj+YAAGADwAD/JQE+AT0cwACg1hzAAKCwLsAAavUBAAEUwACgw8BacyUJAADAAK5qg/0BAAE0wACg3gPAAKDewAChiwAAAAICAsAAoO0AAACAvWADwACXEADAAKEBAAAAgpdgA8AAlxAAAGADwAD/JQE+A07AAKEVwAChGgAAwABq9mADwACYxQEfwAChH8AAmNECAAIUwAChKMBac3sKABTAAKEuwFpziwsAAD0cwAChPS61fgIAAhbAAKFWFMAAoU/AWnMlCQCWe8AAj+gUwAChX8Bac6YMAADAAK5dPRzAAKF5FMAAoW7AWnH0CABWAQABFMAAoX3AWnOmDAAAwAD+0ADAAP8QAMAA/o1JwAChmxbAAKGjgMAAoZ/AWm/iwABd0MAAj7M+Az0cwACieRTAAKJuwFpx9AgAVgEAAR/AAKKAwACY0QIAAh7AAKKJwACUsAEAARbAAKKlFsAAopoWwACiky64t8AArhfAAK5HuIDAAGW4wABJ8cAAZq8AHsAAosLAAJSxAQABFsAAos8uwABql8AArlcAAADAAP7QPRzAAKLuFMAAouPAWnH0CABWAQABH8AAovXAAJjRAgACHsAAownAAJSwAQABFsAAoyUWwACjGhbAAKMTLri3wACuF8AArke4gMAAZbjAAEoAwABmuAAewACjPsAAlLUBAAGUAAAAwAD+0D0cwACjkxTAAKOIwFpx9AgAVgEAAR/AAKOawACY0QIAAh7AAKOuwACUsAEAARbAAKPKFsAAo78WwACjuC64t8AArhfAAK5HuIDAAGW4wABJ+MAAZrMAH8AAo+3AAJh5AAAAAAAAwAD+0D9KwACkDAEfwACkF8AAmMQBAAEUwACkLMBacfQIAAAGwACuZ4HUwACkcMAApHfAAKlwAADAAGeHAAAAAQPAAKSFwACpcAAAAAEBAcAApIwAAACEm2ADwACPzgAAYAPAAI/mAT4FQBbAAKSmgMAApKDAWnXxwABdZcAAj9rAAKSgwACksQBOwACkxwAAAIKXYAPAAJcQAEnAAKTRFsAApNuAwACk1cBadfHAAEnPwACP2D4ETsAApPvAAKUJAADAAE6BYAPAAGI4ARbAAKURgMAApQvAWnXxwABOgcAAj9dAIRzAAKVGgsAApTjAWnZaSAEAASsAwAD/dcAApTjAAKVNASTAAKV7AifAAGr3gMAApXXAWnXxScAApYQcwAClloLAAKWIwFp2WkgBAAErAMAA/3U+AT2KwACmdMBadlofwACmiMAAYooAAAAAPz2JwACmq8BadiwcwACmtGrAAKa1YAPAAJl+wAEjISACAAInwABq+BzAAKbfLsAAXkkBAAGCwACm+cBadloAwACuWwDAAJmAPgROwACnJAAAAIjlYAPAAQACAEnAAKc0FsAApz6AwACnOMBadfHAAF6QwACP3j4BPYrAAKdqwFp3PSfAAGr5ScAAp7AWwACnuoDAAKe0wFp18cAAXpLAAI/gPgE9isAAp+LAWnc9J8AAavo+AkAhFsAAqDyAwACoNsBadfHAAF6OwACP3MAAqDXAAKhSAD2KwACoXcBadz0nwABq+07AAKimwACosAAAwABJeGADwACXEAEewACossAAlLEBAAEWwACoxYDAAKi/wFp18YC9wACP0QA9icAAqNLAWnYsHMAAqNtqwACo3GADwACZfsABIyEgAgACgsAAqN/AWnc9g8AAqOnAWnfYAMAAmYBOwACpB8AAqRIAAMAAST5gA8AAlxoBHMAAqRsWwACpFC64t8AArhfAAK5HwABJZQEAARbAAKkygMAAqSzAWnXxwABdZMAAj9IAwABmEkrAAKlFAR/AAKlQwACQCwIAAoLAAKlbwFp4SIHAAKlnwFp2LAAGwACuaIHUwACppcAAqazAAKzPAADAAGeJAAAAAQPAAKm6wACszwAAAAEBAcAAqcEAAACEm2ADwACPzgAAYAPAAI/mAT4GQBbAAKnbgMAAqdXAWnjlwABd5MAAj9vAAKnVwACp7wBOwACp/gAAAIjlYAPAAQACAE7AAKoaAAAAgpdgA8AAlxAAScAAqiQWwACqLoDAAKoowFp45cAASc/AAI/YPgE9isAAqkDAWnkxHMAAqklqwACqSmADwACZfsABIyEgAQABJ8AAavwAwACZgD4DScAAqnMWwACqfYDAAKp3wFp45cAAXpHAAI/fPgE9icAAqqnAWnkgJ8AAav1JwACq+hbAAKsEgMAAqv7AWnjlwABek8AAj+E+AT2JwACrLMBaeSAnwABq/j4CQCEWwACrkYDAAKuLwFp45cAAXo/AAI/dwACrisAAq6cAPYnAAKuywFp5ICfAAGr/TsAArATAAKwOAADAAEl4YAPAAJcQAR7AAKwQwACUsQEAARbAAKwjgMAArB3AWnjlgL3AAI/RAD2KwACsMMBaeTEcwACsOWrAAKw6YAPAAJl+wAEjISACAAKBwACsPcBaeSCDwACsR8BaehcAwACZgE7AAKxmwACscQAAwABJP2ADwACXGgEcwACsehbAAKxzLri3wACuF8AArkfAAElmAQABFsAArJGAwACsi8BaeOXAAF1kwACP0gDAAGYRSsAArKQBH8AArK/AAJALAgACg8AArLrAWnqHgsAArMbAWnkxAAbAAK5pgdTAAK0ZwACtKsAAroEAAMAAavMAAAABA8AArUDAAK6BAAAAAQEBwACtRwAAAJomYAPAAI+eAABdA8AA/n0BYAPAAI/mAT4DTsAArWPAAK1rAADAAGsAXQPAAP59AWADwACP5gEcwACttBzAAK2BFsAArXGAwACtbcBaeySEi8AAj6eBpQEAATTAAK2HA8AArYfAAK2pAAAAAQEBwACtjgAAAISbYAPAAI/OAABgA8AA/FUBSsAArZgBFsAArZ6BwACtmMBae5nAAF1lwACP2gDAAP6JgKsBAWADwACP5gEWwACtuC7AAGeHwACuZwDAAP6ITsAArd/AAK3nAACbZl0DwAD+fQFgA8AAj+YBHMAArjkcwACt/RbAAK3tgMAArenAWnskhIvAAI+ngaUBAAE0wACuAwPAAK4DwACuLgAAAAEBAcAArgoAAACEm2ADwACPzgAAYAPAAPxVAUrAAK4UARbAAK4agsAArhTAWnxCwABd5MAA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CQAAAE7AANbbwADW6QAAwABrG2ADwACYnAEfwADW+cAAmKkBAAEcwADXKRzAANcXhsAA1w3AWpaYgKsBAWADwACYegFqwADXHl4DAAECAWADwACXGgGYCFsAAGADwACYesABd+EAwAD+iICtAAAAAMAA/pMATsAA107AANdfAADAAGscYAPAAJicAR/AANdvwACYqQEAAYfAANeDwFqWwQBOwADXncAA16sAALrzYAPAAPxVASpJwADXuiXAANfFhcAA177AWpZ9YAPAAI/8PgE9FcAA1+LAWpk2CxbAANf5FMAA1/LAWpZ9BQFgA8AAj/y688AAkAA/TsAA2BvAANgyAACFOmADwAD+GwEWwADYO4XAANg0wFqWfYU6wACP9U7AANhnwADYhgAAwABd7WADwACXEAEfwADYjMAAmHkAAAAAScAA2KQWwADYr4XAANiowFqWfcAAXfLAAI/yPgE9FcAA2MfAWpm2DRzAANj0LsAAawTAAK4XAQABhcAA2RrAWpZ9AMAArm4/TsAA2TbAANlBAADAAF32YAPAAJiQAR7AANlDwACUtQEAARbAANlUhcAA2U3AWpZ9wABd9sAAj/MAScAA2WgWwADZc4XAANlswFqWfYQewACP+T4DScAA2YciIiIcwADZohTAANmLwFqZjgwAgWsBAAGVAMAA/0oAHMAA2ccWwADZwIbAANm2wFqWmGHAAP7vSAEAAZQAwAD/PwAlwADZ+hTAANnbwFqZtg0AYAPAAJhyABzAANotFsAA2iKFwADaG8Baln3AAF32wACP80gBAAGTAMAA/z8+BU/AANo/wADaTAAAAYc6YQMBYAPAAP4bYAPAAJX5AAPAANpSwADcagAAAAEBAcAA2lcAAAC8QGADwAD+GwAAYAPAAJX5AT4CTsAA2qfAANqvAADAAGsdYAPAAQACARzAANrIgsAA2sHAWpYWwABIVgIAAiTAANrfAifAAGseFMAA2tjAWpsmEAAkwADa/wInwABrHxTAANr4wFqbJhAAAMAArolKwADbDgEcwADbG2rAANsYYAPAAJl+wAEjIYVoAgACJ8AAayAywADbcGADwAEAAmADwAD/aAUnwABrHRTAANuLwFqbQREAJ7d9hMAA26/AWpZtJ8AAST4ewADb1sAAlLEBAAEWwADb6oXAANvjwFqWfcAAXe/AAI/wACeAvRbAANwah8AA3A7AWpbBgMPAAP6lJ8AAayEWwADcQoXAANw7wFqWfYVWwACP9ADAAJmBTsAA3HvAANyJAADAAGsiYAPAAJcaARbAANyVhsAA3IvAWpaYgMPAAP6lScAA3KccwADcuRTAANyrwFqcTBAASAEAARbAANy8LsAAapbAAK5WAMAA/3VKwADcxwEcwADc1BTAANzOwFqa/g8AIAEAAZMAAD9JwADc4xzAANz1FMAA3OfAWpxMEABIAQABFsAA3PguwABql8AArlcAwAD/dUrAAN0DARzAAN0QFMAA3QrAWpr+DwAgAQABlAAAP0nAAN0fHMAA3TEUwADdI8BanEwQAEgBAAEWwADdNC7AAGqYwACuWADAAP91SsAA3T8BHMAA3UwUwADdRsBamv4PACABAAGVAAA/P07AAN1owADdcAAAwABrHWADwAEAAgEcwADdhYLAAN1+wFqWFsAASFYCAAInwABrIyfAAGskAMAArolKwADdwgEcwADdz2rAAN3MYAPAAJl+wAEjIYVoAgACJ8AAayUywADepWADwAEAAmADwAD/aAknwABrHRTAAN68wFqdVQ8AJ7d9hMAA3tzAWpZtJ8AAST4ewADe/8AAlLEBAAEWwADfE4XAAN8MwFqWfcAAXe/AAI/wACeFOh7AAN9FwACUtQEAARTAAN9PwFqZjgwAACfAAF3tFMAA35TAWpm2DQAnwABrGBTAAN/LwFqYmQkAJ8AAaxkUwADf88BamQoKACfAAGshFsAA4CGFwADgGsBaln2FVsAAj/QnwABd9hTAAOBHwFqaIQ4AAMAAmYE+A0nAAOB2IiIiHMAA4JEUwADgesBamY4MAIFrAQABlQDAAP9KABzAAOC2FsAA4K+GwADgpcBalphhwAD+70gBAAGUAMAA/z8AJcAA4OkUwADgysBambYNAGADwACYcgAcwADhHBbAAOERhcAA4QrAWpZ9wABd9sAAj/NIAQABkwDAAP8/PgVPwADhLsAA4TsAAAGHOmEDAWADwAD+G2ADwACV+QADwADhQcAA48UAAAABAQHAAOFGAAAAvEBgA8AA/hsAAGADwACV+QE+A07AAOGZwADhqgAAwABrJmADwAEAAgEjFMAA4azAWpk2CwAnYie8kAFgA8ABAAJOwADh18AA4d8AAMAAax1gA8ABAAIBHMAA4eiCwADh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d4HUwAEQcMABEHzAARPzAADAAGtKAAAAAQPAARCSwAET8wAAAAAAAABgA8AAmMUBPgVOwAEQrcABELMAAIS+XQPAAP6/AWADwACYxQExwAEQtWADwACYxQBOwAEQzcABENwAALRZYAO5hwEWwAEQ6xbAARDeLrbFwACuF8AArku0WcAATo1OwAERgsABEaQAAMAAa0tdA8AA/r8BYAO+EwExwAERpmADvhMHFsABEb2BwAERrsBavBabMbmMFsABEdyBwAERzcBavBabNLmNFsABEf6BwAER78BavBabM7mLFsABEh2BwAESDsBavBabNbmOFsABEj+BwAESMMBavBabMLmKFsABEl+BwAESUMBavBabL7mSFsABEn+BwAEScMBavBabPLmVPRzAARL+gsABEtzAWrxDg/0BAAE0wAETBgPAARMGwAEThgAAAAEBAcABEwcAAACWe2ADvhMAAGADwAD/JQE+AT0cwAETHoDAARMYwFq771YBAAEfwAETJsAAmNECAAIewAETPcAAlLEBAAEcwAETURbAARNKLri3wACuF8AArkeGkgEAAYPAARNbwFq9DQDAAGYbAB7AARNmwACUsAEAARbAARN4g8ABE3DAWr0NgL2+AQAAAMAA/tAAwAD+jUrAAROOAR/AAROZwACY0QIAAh7AAROuwACUsAEAAWrAARO4YAPAAQACwAFvCAAfwAET08AAmMQBAAGAwAET6MBau+8AAAbAAK54gdTAARS+wAEUysABFWIAAMAAa0wAAAABA8ABFN3AARViAAAAAAAAAGADwACYxQE+Ak7AART0wAEU/QAAgm5gA8AAlxABHMABFQFqwAEVAmADwACZfsABIyEgAQABJ8AAa00AwACZgErAARUfAR/AARUqwACY0QIAAh7AARU2wACUsAEAAWrAARVAYAPAAQACwAFvAwCAwAEVVcBavh8ABsAArnmB1MABFfvAARYNwAEYMwAAwABrTgAAAAEDwAEWGcABGDMAAAABAQHAARYiAAAAsTlgA8AAjzoAAF0DwAD+vwFgA8AAmMUBPghOwAEWQ8ABFlMAAMAAa09dA8AA/r8BYAPAAJjFATHAARZVYAPAAJjFAE/AARZewAEWagAAAcAAa1BhAwJgA8AAlxBgA8ABAAJgA8AAmMUAA8ABFnbAARbfAAAAAgICwAEWhQAAAIb3YAPAAJcQAMABFpYAAADAAEUfYAPAAQACAABgA8AAmMUBPgFKwAEWpgEfwAEWscAAmNECAAIewAEWvcAAlLABAAGEwAEWx8Bav0cAg8ABFtDAWr83AE7AARbqwAEW8wAAwABrUWADvIgBFsABFwoWwAEW/YDAARb1wFq+uMAAXYzAAI9MtKTAAI9bTsABFyjAARcxAACG92ADwACXEAEcwAEXO4DAARczwFq+uMAAXnABAAGDwAEXUcBav5YAwACPRz0cwAEXcIHAARdgwFq+2lYBAAEcwAEXgILAARd0wFq/ByACAAKEwAEXgcBav8tqwAEXi2ADwAEAAsABW+MAAADAAP7QTsABF6nAARevAACFhWADwACXEAEcwAEXuYDAARexwFq+uMAAXnEBAAGDwAEX1MBav5YAwACPSD0cwAEX84HAARfjwFq+2lYBAAEcwAEYA4LAARf3wFq/ByACAAKFwAEYBMBawEZqwAEYC2ADwAEAAsABW+YAAADAAP7QSsABGBkBgcABGCDAWr7aBsAArnqB1MABGFrAARhnwAEeawAAwABqvgAAAAEDwAEYf8ABHmsAAAACAgLAARiPAAAAsTlgA8AAjzoAwAEYrQAAAMAAamFgA8AArpMAAGADwACV+QE+C07AARjbwAEY4wAAwABJh10DwAD+vwFgA8AAmMUBMcABGOVgA8AAmMUAScABGO4WwAEZAhbAARj6gMABGPLAWsD7wABdpcAAj0GDt8AA/xc+AT0cwAEZKYLAARkWwFrBKIClAQABHMABGTAuwABrNwEAAYHAARlWwFrBCwDAAK51AMAA/tE/ScABGXkhHMABGZoWwAEZhYDAARl9wFrA+8AAXm7AAI9CSAEAASsAwAD/dT4BPRzAARoUgsABGgzAWsEoVgEAAR/AARocwACY0QIAAh7AARozwACUsAEAAWrAARo9YAPAAQACwAFvKwAfwAEaWsAAmHkAAAAAAADAAP7QP0nAARp2FsABGoMWwAEaei6zBMAArhfAAK5FgriBVj4BPRzAARqlgsABGp3AWsEoVgEAAR/AARqswACY0QIAAh7AARq1wACUsAEAAWrAARq/YAPAAQACwAFvWAAcwAEazi7AAGtSAAAAAMAArn0AAMAA/tA/PRzAARr4gsABGvDAWsEoVgEAARzAARr8LsAAa0oAAAAAwACudwDAAP7QPRzAARxEgsABHDzAWsEoVgEAAR/AARxMwACY0QIAAh7AARxhwACUsAEAAWrAARxrYAPAAQACwAFvDQAfwAEcf8AAmMQBAAExwAEcoWADwACYxQAAAADAAP7QPRzAARy1gsABHK3AWsEoVgEAARzAARy5LsAAa0wAAAAAwACueADAAP7QPRzAARzegsABHNbAWsEogKUBAAEcwAEc5S7AAGtOAQABgMABHPLAWsD7AMAArnkAwAD+0UnAAR0CFsABHQ6AwAEdBsBawPvAAF2VwACPPz4CPRzAAR0ygsABHSrAWsEoVgEAAR/AAR06wACY0QIAAh7AAR1RwACUsAEAAWrAAR1bYAPAAQACwAFvEgAfwAEddcAAmHkAAAAAAADAAP7QPRzAAR2XgsABHY/AWsEoVgEAAR/AAR2fwACY0QIAAh7AAR2rwACUsAEAAWrAAR21YAPAAQACwAFvFwAfwAEdxcAAmHkAAAAAAADAAP7QP07AAR35wAEeBwAAwABrU2ADwACYtgEfwAEeDcAAmMQBAAGCwAEeIsBawSgASsABHjEBHMABHj5qwAEeO2ADwACZfsABIyGFaAIAAifAAGtUg8ABHlnAWsQ6AMAAmYEGwACue4HUwAEemsABHqfAASAKAADAAGrAAAAAAQPAAR6/wAEgCgAAAAICAsABHs8AAACxOWADwACPOgDAAR7tAAAAwABqYWADwACukwAAYAPAAJX5AT4DTsABHxzAAR8nAACGLV0DwAD+vwFgA8AAlfkBMcABHylgA8AAlfkAScABHzEhHMABH1IWwAEfPYDAAR81wFrEw8AAXm7AAI9CSAEAASsAwAD/dT4BPRzAAR9ugsABH2PAWsTwVgEAARzAAR94asABH3VgA8AAmX7AASMhhWgCAAInwABrVTHAAR+bYAPAAJcQAh7AAR+cwACUsAEAAWrAAR+mYAPAAQACwAFvKwAWwAEfyIDAAR/AwFrEw8AAXm7AAI9CAMAAmYEAwAD+0D9KwAEf6wEfwAEf9cAAlgkBAAGCwAEf+8BaxPAABsAArnyB1MABIA/AASAcwAElUAAAwABqwQAAAAEDwAEgKcABJVAAAAABAQHAASAzAAAAlrRgA8AAj1kAAGADwACV+QE+BknAASBDIRbAASBRFsABIEguswTAAK4XwACuRYK4gVZKwAEgYwEfwAEgbcAAliAAAAAAP07AASCMwAEglAAAwABTYGADwAB5rQEfwAEgnsAAebUAAAAATsABILvAASDDAACEiF0DwAD+fQFgA8AAj54BHMABIOAWwAEg1oDAASDNwFrGBYb1wACPXISVAQFgA8AAj54BNMABIOcDwAEg58ABIQsAAAABAQHAASDwAAAAhEhgA8AAj4UAAF0DwAD+vwFgA8AAj54BSsABIPwBFsABIQSCwAEg/MBaxsiEiMAAj4oAwAD+iz0cwAEhGoLAASESwFrGdoP9AQABNMABISIDwAEhIsABJE8AAAABAQHAASEpAAAAmiZgA8AAj54AAGADwAD/JQE+BknAASE2HMABIVAWwAEhPoPAASE6wFrHLsAAXoXAAI+pSAEAASsAwAD/dUrAASFZAD9OwAEhdcABIYAAAMAAU1NgA8AAY/MBHMABIZYWwAEhgi6wTsAArhfAAK5VtBkBAAEWwAEhpoPAASGiwFrHLpZ7wACPoAC8XU7AASHOwAEh2QAAm9RdA8AA/n0BYAPAAGPzARzAASH4FsABIfEWwAEh34PAASHbwFrHLsAAXoXAAI+pwABSrMAAeTKAqwEBYAPAAGPzATTAASIHA8ABIgfAASJKAAAAAQEBwAEiEgAAAKQQYAPAAHkcAABgA8AAY/MBSsABIhwBHMABIicWwAEiHC68+sAArhfAAK5UwABHqQIAAoTAASI0wFrHehbAASJGhcABIkDAWsgimibAAHkeAMAAZVAAwAD+iE7AASJzwAEigQAAos1dA8AA/vECYAPAAGQZYAPAAGPLATLAASKDYAPAAGQZYAPAAGPLAEbAASKNwAEi0cABIqMAAACpemADwABkGQAWwAEit4PAASKzwFrHLry3wACPqj4ETsABIu7AASL2AACWe2ADvh8BFsABIwWHwAEi+MBayL+We8AAZBtOwAEjJMABIy4AAIThYAPAAGPzARzAASNHFsABIzwuvPrAAK4XwACuVMAAR6kCAAKEwAEjVMBax3omwAEjaAEWwAEjaBTAASNgwFrI5ggAtba+IWADvhMAwABlUE7AASORwAEjpAAAwABrVl0DwAD+vwFgA8AAY8sBFsABI7AUwAEjpsBayQwJAIU4wABj9j0cwAEj1IbAASPHwFrIhIC/AgACh8ABI9XAWsi/HMABI/cUwAEj5cBayWgKAEsBAAEWwAEkABTAASP4wFrI5ggAJ74iAMAA/s4AwAD/Bj0cwAEkHoHAASQWwFrGU1YDAAOEwAEkIsBax3qFwAEkLsBax8GGwAEkOsBayIQAwAB5sgDAAP6NTsABJGbAASRtAACWnGADvjoBFsABJIsWwAEkfBbAASRvLrbFwACuF8AArku0WcAATo2yxbpBSsABJKIBHMABJK9qwAEkrGADwACZfsABIyGFaAIAAifAAGtXMcABJNVgA8AA/2gDHMABJOYWwAEk3S7AAEUIwACuF8AArkjAAEUXAQABg8ABJPvAWsohAMAAXjZqwAElCmADwAEAAsABb1gcwAElLhbAASUeLsAAapLAAK4XwACuTsAAU2EBAAGBwAElPMBaxlMAwAB50QDAAJmBBsAArn2B1MABJerAASX4wAEnmgAAwABrUgAAAAEDwAEmCcABJ5oAAAAAAAAAYAPAAJcQAT4GTsABJiTAASYzAADAAGtYXQPAAP6/AWADwACYxQExwAEmNWADwACYxQBPwAEmPcABJkIAAAHAAGtZYQMCYAPAAQACYAPAAQACXAADwAEmS8ABJrMAAAACAgLAASZTAAAAgL1gA8ABAAIAwAEmYAAAAICWYAPAAQACAABcAT4BPRzAASZ+gMABJm/AWsspVgEAAR/AASaFwACY0QIAAh7AASaOwACUsAEAAYLAASaYwFrLgQAcwAEmoWrAASaiYAPAAJl+wAEjISABAAGDwAEmpcBay5EAwACZgAAAwAD+0D0cwAEmw4HAASa6wFrLViACAAIawAEm2sAAnHonwABrWgAAPRzAAScAgcABJvfAWstWIAIAAhrAAScXwACceyeaEQAAPRzAASc2gcABJy3AWstWIAIAAhrAASdNwACcfCdLAABKwAEnawEfwAEndcAAmMQBAAGAwAEnh8BayykABsAArn6B1MABKR/AASkswAEyiwAAwABqwwAAAAEDwAEpPcABMosAAAABAQHAASlHAAAAlrRgA8AAj1kAAGADwACV+QE+Ck7AASlqwAEpdQAAhi1dA8AA/r8BYAPAAJX5ATHAASl3YAPAAJX5AEnAASnLIhbAASnYgMABKc/AWsyzwABeeMAAj2IAHsABKgLAAKSTAQABFsABKkIWwAEqNS62xcAArhfAAK5LtKbAAE6IAD4BPRzAASpkgcABKlnAWszOVgEAAR7AASp4wACklAMAAxbAASq5FsABKqwutsXAAK4XwACuS7SmwABOiBbAASrHLrCjwACuWhzAASrnasABKuhgA8AAmX7AASMhIAIAAifAAGtbMcABLDVbAADAAJmAAADAAP7QP07AASxiwAEsdAAAwABjr10DwAD+8QJgA8ABAAJgA8AAlxABMsABLHZgA8ABAAJgA8AAlxAATsABLJnAASyiAADAAF6tXQPAAP7xAmADwAEAAmADwACXEAEywAEspGADwAEAAmADwACXEABOwAEsv8ABLNMAAMAAa1xdA8AA/r8BYAPAAJX5ATHAASzVYAPAAJX5AEbAASzewAEtCsABLOsAAACESGADwACPhQAWwAEs/4DAASz2wFrMs4b1wACPXD4BRsABLRLAAS01wAEtHQAAAJomYAPAAI+eABbAAS0shcABLSTAWs5NhIjAAI+KPgJJwAEtPyEcwAEtVhbAAS1HhsABLUPAWs58wABehsAAj7hIAQABKwDAAP7pPgFGwAEta8ABLZLAAS13AAAAg+xgA8ABAAIAFsABLYKGwAEtfsBaznzAAF6GwACPuD4CPRzAAS2xgsABLaDAWs2ygL8CAAKHwAEtssBaztgcwAEtuS6F6gEAAYbAAS3IwFrOfADAAK5cAMAA/wY9HMABLeKDwAEt2sBazeeAvwIAAofAAS3jwFrO2B/AAS3uwACYcQEAASkAAMAA/wY/ScABLiIhHMABLjwWwAEuKobAAS4mwFrOfMAAXofAAI+5SAEAASsAwAD+6T4CRsABLlHAAS57wAEuXQAAAIPsYAPAAQACABbAAS5ohsABLmTAWs58wABeh8AAj7k+Aj0cwAEumoLAAS6JwFrNsoC/AgACh8ABLpvAWs+iHMABLqIuheoBAAGGwAEuscBaznwAwACuXADAAP8GPRzAAS7Lg8ABLsPAWs3ngL8CAAKHwAEuzMBaz6IfwAEu18AAmHEBAAEqAADAAP8GScABLwQhHMABLx0WwAEvDIbAAS8IwFrOfMAAXojAAI+6SAEAASsAwAD+6T4DTsABL0DAAS9LAADAAFAuXQPAAP6/AWADwACPngEWwAEvUYbAAS9NwFrOfMAAXojAAI+6TsABL33AAS+CAACWrGADwACXEAEewAEvhMAAlLABAAEcwAEvoxbAAS+ShsABL47AWs58wABeh8AAj7lLAQAB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CAHAAK6QgQDAWteuCQHAATVmwAD/fgAAAAAAAABa1/cAAAAAAsAArpOB1MABNZzAATWiwAE2cwPAAGtiAAABYAHAAP9oAAADBMAArpWB1MABNcHAATX3CcAAY7sAYAPAAK6aAR/AATXcwACupAAAAAAEwACuloHUwAE2AcABNjMJwABjvQBgA8AArpoBH8ABNhjAAK6kAAAAAATAAK6XgdTAATY9wAE2cQnAAGO/AGADwACumgEfwAE2VsAArqQAAAAAAQXAAK6ZAAAAAAQAAAMAAAAAAAAAAABgA8AArpMBPwEJAQDAAP9+AAAAAAAAAFrYywAAAAACwACumoHUwAE2dsABNnzAATgCA8AAa2MAAAFgAcAAmFgAAAEEwACunYHUwAE2xsABNswYl2HAAK4XAGADwACXEAErAQXAAK6kAAAAAAQAAAMAAAAAAAAAAABgA8AArpoBPwEJAQDAAJhfAAAAAAMGwACun4HUwAE20cABNtbAATdjAADAAGtJAAAAAQPAATbewAE3YwAAAAEBAcABNu0AAACAlmADwACXEAAAXAE+A0AcwAE3CBbAATcBLpdhwACuF8AArp1IAQABKwDAAP91wAE3AcABNw8AQBzAATczFsABNyOAwAE3HcBa2W+wzcAAlxJIAQABFsABNzsusM3AAK6iAMAA/z/AATcdwAE3SgA9F8ABN1Eul2HAAK4XgMABN1rAWtlvwACunQbAAK6hgdTAATdowAE3hsABN78BAICWAWrAATdpYAPAAP9oAgAAAQPAATeMwAE3vwAAAAAAAABgA8AAlxABPgJAIRzAATegFsABN5kul2HAAK4XwACunUgBAAErAMAA/3XAATeZwAE3pwBKwAE3rgEWwAE3tS6XYcAArhfAAK6dBsAArqKB1MABN8TAATfYwAE4AAEAsM0BasABN8VgA8AA/2gCAAABA8ABN+jAATgAAAAAAAAAAGADwAD+GwFKwAE36wFqwAE3+WADwAD+G8AAi/YAAFrZQwBa2f8AWtp/AFra0gAAAAMABgTAAK4ZgdSCoYLCBsAAa2QAYAPAAQACAWqCt2ADwAEAAsABd+YEwACuGoHUhE2EeQbAAGtmAGADwAEAAgFqhGVgA8ABAALAAXfrBMAArhuB1Im8wABA1gbAAGtoAGADwAEAAgFqwABA1mADwAEAAsABd80EwACu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AoHAAEPcwFsGgYLAAEPjwFsG6ADAAEdIPRfAAEP/hMAAQ/XAWwipuosWwABEF4HAAEQRwFsGgbqLwABHEMAARxA9isAARDLAWwbohMAARDrAWwipPYvAAERPwFsHNBbAAERjhMAARFnAWwipg7XAAEbaQsAARHMBP0nAAESUJcAARKCDwABEmMBbBzRgA8AASh8+AUnAAES2HMAARNAWwABEyRbAAETCFMAARLrAWwc0AwFgA8AASh+CVcAARtaAw8AA/qVIAQABgcAARNPAWwaBAMAA/3U+Aj0cwABE7hTAAETmwFsHNAMBYAPAAEofuqUCAAKBwABE+MBbBoGCwABE/8BbBugAwABHSErAAEURARbAAEUgFMAARRjAWwc0AwFgA8AASh+DtcAARto/P0LAAEU+AE7AAEVjwABFaAABg7VgA8AARtABFsAARXCCwABFasBbBuiDtcAARtpJwABFexzAAEWTFsAARYwWwABFhYHAAEV/wFsGgbomwABG12HAAP7vgWsBAAGUAMAA/0pKwABFmQGDwABFoMBbCks/TsAARe7AAEXzAACvlmADwABHXwEewABGA8AAR2YDAAKBwABGBsBbBoGCwABGDcBbBugBusMpScAARjIWwABGO4TAAEY2wFsKtoFVwABHbErAAEZEAYPAAEZLwFsKSz9OwABGW8AARmgAAMAAa4ZgA8AA/FUBIiXAAEZwgcAARmrAWwaBYAPAAEmlASXAAEaGgcAARoDAWwaBYAPAAEnJScAARp8WwABGqITAAEajwFsKtrrLwABHbz4DTsAARsHAAEbFAACwMWADwABG0AEWwABGzITAAEbHwFsKtoDDwABHcEnAAEbaJcAARuKGwABG3sBbC3BgA8AASdw+BEnAAEe4HMAAR8kWwABHxhbAAEfAFMAAR7zAWwtwBgFgA8AASdyaX8AARti0tMAARptjAQABFsAAR9cWwABH0YLAAEfLwFsG6JpfwABG2LS0wABGmwDAAP9JSsAAR9sBg8AAR+LAWwpLP0nAAEfwHMAAR/8WwABH+BTAAEf0wFsLcAYBYAPAAEncuibAAEbXgdYBAAE0wABIAwPAAEgDwABIGQAAAAEBAcAASAQAAACD82ADwABG0AAAYAPAAPxVAUrAAEgNASXAAEgSh8AASA3AWwxaYAPAAEncAMAA/pJKwABIHAGD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wAClgAAAAIPzYAPAAEmlAABcAT4FScAApYwcwACloxbAAKWcFsAApZWAwAClkMBbPdC6JsAARtdhwAD+74FrAQABlADAAP9KSsAApakAP07AAKXDwAClzAAAhh1gA8AAYjgBFsAApdOAwAClzsBbPdCGHcAASadJwACl4hbAAKXvgcAApebAWz4gqFzAAGI7PgI9HMAApf8uwABrqcAArqoBAAGAwACmC8BbPdAAwACvUErAAKYYAD9JwACmKxbAAKY4gcAApi/AWz4gu2fAAGI/PgI9HMAApkcuwABrqsAArqoCAAKAwACmUsBbPdAmwACmWAGBwACmWMBbPiBgA8AAYpEAwACvUUrAAKZpAD9JwACmfBbAAKaJgcAApoDAWz4gtnvAAGJCPgI9HMAAppsuwABrq8AArqoCAAKAwACmqcBbPdAmwACmrwGBwACmr8BbPiBgA8AAYu4AwACvUkrAAKbAAD8GwACvUIHWwACm1cAAptrAAKpcAADAAGupwACuqgAAAAEDwACm5cAAqlwAAAABAQHAAKbwAAAAg/NgA8AASaUAAFwBPgZOwACnAMAApwUAAJjeYAPAAP4bAZdPwACnD8AApxQAAAHAAGusYQMBYAPAAEbQYAPAAPxVAAPAAKcjwACppAAAAAEBAcAApzEAAAC56GADwABG0AAAYAPAAPxVAT4HScAAp4klwACnmYPAAKeNwFs/wGADwABKZkrAAKexASo/ScAAp8YlwACn1oPAAKfKwFs/wGADwABHwUrAAKfiASk/ScAAp/UlwACoBYPAAKf5wFs/wGADwABHrErAAKgRASk/ScAAqCQlwACoNIPAAKgowFs/wGADwABJ3ErAAKg9ASk/ScAAqJslwACoq4PAAKifwFs/wGADwABKH0rAAKi3ASo/ScAAqRElwACpIYPAAKkVwFs/wGADwABJ8ErAAKkvASo/SsAAqZIBKk7AAKmvwACpuAAAwABrp2ADwAD+GwEcwACpui7AAGulwACuqgIAAoDAAKnOwFs/Z4LAAKnUwFs/lgDAAK9OScAAqeocwACp/hzAAKn3g8AAqe7AW0Cog40BAAGBwACp+cBbP30AwAD/Q4FrAQABHMAAqgocwACqAzcHZAEAAYHAAKoFwFs/fQDAAP9BZAEAARzAAKoVg8AAqgzAW0Cog40BAAGUAMAA/0MAwAD/QQDAAP9KSsAAqhoAPz0cwACqJi7AAEaGwACuqgMAA4DAAKotwFs/Z4LAAKozwFs/lifAAGutAMAAr09KwACqUgAGwACvUYHWwACqYcAAqmbAAK45AADAAGuqwACuqgAAAAEDwACqcMAArjkAAAACAgLAAKp7AAAAg/NgA8AASaUAwACqkgAAAMAATK1gA8AAYpEAAFwBPghOwACqrMAAqrIAAICWYAPAAPwnARbAAKrAgcAAqrTAW0HVqvPAAGKTTsAAqtXAAKraAACBsmADwAEAAgEcwACq4oLAAKrcwFtB7SMAAAAAwAD8UU7AAKr2wACq+wAAmN5gA8AA/hsBFsAAqwKDwACq/cBbQhVhwAEABknAAKsOHMAAqxeEwACrEsBbQkCBawEAAZYAwAD/SkrAAKsdAD9PwACrKsAAqy8AAAHAAGusYQMBYAPAAEbQYAPAAPxVAAPAAKs+wACtcwAAAAEBAcAAq0wAAAC56GADwABG0AAAYAPAAPxVAT4HScAAq2ElwACrcYbAAKtlwFtCumADwABHwUrAAKt9ASk/ScAAq5AlwACroIbAAKuUwFtCumADwABHrErAAKusASk/ScAAq78lwACrz4bAAKvDwFtCumADwABKH0rAAKvbASk/ScAAq+4lwACr/obAAKvywFtCumADwABJ3ErAAKwHASk/ScAArFwlwACsbIbAAKxgwFtCumADwABJ8ErAAKx6ASo/ScAArN0lwACs7YbAAKzhwFtCumADwABIoUrAAKz+ASo/SsAArWEBKk7AAK1+wACthwAAwABrp2ADwAD+GwEcwACtiS7AAGulwACuqgIAAoDAAK2dwFtBxYXAAK2jwFtCkADAAK9OScAArbkcwACtzRzAAK3GhsAArb3AW0Oig40BAAGEwACtyMBbQkAAwAD/Q4FrAQABHMAArdkcwACt0jcHZAEAAYTAAK3UwFtCQADAAP9BZAEAARzAAK3khsAArdvAW0Oig40BAAGUAMAA/0MAwAD/QQDAAP9KSsAArekAPz0cwACt9S7AAEaGwACuqgMAA4DAAK38wFtBxYXAAK4CwFtCkCTAAK40AieAtRzAAK4cg8AArhfAW0IVwABEPAIAAieBjSeAtQDAAQAgAMAAr08GwACvUoHWwACuPsAArkPAALKEAADAAGurwACuqgAAAAEDwACuUMAAsoQAAAACAgLAAK5bAAAAg/NgA8AASaUAwACudQAAAMAATOFgA8AAYu4AAFwBPghOwACuksAArpgAAICWYAPAAQACARbAAK6pgcAArprAW0TtndnAAGLwTsAArr7AAK7FAABhYAPAAP4bARbAAK7NgsAArsfAW0UFYcABAAZOwACu3cAAruIAAJjeYAPAAP4bARzAAK7rg8AAruTAW0UtZAEAAZUAwAD/QUnAAK8HHMAArxCEwACvC8BbRVOBawEAAZUAwAD/SkrAAK8WAD9PwACvI8AArygAAAHAAGusYQMBYAPAAEbQYAPAAPxVAAPAAK83wACx0QAAAAEBAcAAr0UAAAC56GADwABG0AAAYAPAAPxVAT4IScAAr6glwACvuIbAAK+swFtF0mADwABIoUrAAK/JASo/ScAAsBEcwACwHIPAALAVwFtFLYFtAQABNxAAwAD/TErAALAjASk/ScAAsDclwACwR4bAALA7wFtF0mADwABHwUrAALBTASk/ScAAsGYlwACwdobAALBqwFtF0mADwABHrErAALCCASk/ScAAsJUlwACwpYbAALCZwFtF0mADwABKH0rAALCxASk/ScAAsMQlwACw1IbAALDIwFtF0mADwABJ3ErAALDdASk/ScAAsT8lwACxT4bAALFDwFtF0mADwABIS0rAALFdASk/SsAAsb8BKk7AALHcwACx5QAAwABrp2ADwAD+GwEcwACx5y7AAGulwACuqgIAAoDAALH7wFtE3YXAALIBwFtFqADAAK9OScAAshccwACyKxzAALIkhsAAshvAW0bhg40BAAGEwACyJsBbRVMAwAD/Q4FrAQABHMAAsjccwACyMDcHZAEAAYTAALIywFtFUwDAAP9BZAEAARzAALJChsAAsjnAW0bhg40BAAGUAMAA/0MAwAD/QQDAAP9KSsAAskcAPz0cwACyUy7AAEaGwACuqgMAA4DAALJawFtE3YXAALJgwFtFqCTAALJ/AyfAAGuug8AAsnbAW0UtJ4C1AMAAr08AAFs4QwBbONMAWzm7AFs6XABbPDIAWz2aAFs/NwBbQZUAW0StAFtH2gAAAAkCwACvV4HWwACy68AAsvHAALNUA8AAa68AAAFgAcAA/2gAAWABvf8BBMAAr1mB1sAAszDAALM0CYC9AWrAALMYYAPAAP9oAmADwAEAAgABBcAAr1uB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ALALAgACFMAARGTAW6uNAwFgA8AASBiAwABEasBbqb8ASAEAAZQAwAD/Pz4BPRzAAESOgsAARILAW6n1IAIAAhTAAESPwFurjQMBYAPAAEgYFsAARJoUwABElcBbq40DAWADwABIGKVSwABIHAAAPz4ABsAAsA6B2cAARWLAAEVzwABLDwAAub0BasAARWNgA8AA/2gCAAABA8AARYrAAEsPAAAAAQEBwABFnwAAAIPzYAPAAEpmAABgA8AA/FUBPgpOwABGFcAARh4AAIYdYAPAAEbQARzAAEYoLsAAa/MCAAIcwABGURbAAEZLgMAARkbAW674glXAAEbWSwEAAZQAwAD+zhbAAEZbgMAARlbAW674u4/AAEppAMAAsAhJwABGdRzAAEaCgcAARnnAW68TSAEAASsAwAD/dUrAAEaLASo/TsAARqfAAEawAAClUmADwABMuAEWwABGt4DAAEaywFuu+KVSwABH0E7AAEbTwABG4AAAhZpgA786ARbAAEbngMAARuLAW674hZrAAEfWTsAARwYAAAC56GADwABG0ABJwABHFxbAAEckgsAARxvAW6+VhU7AAEzIPgE9jMAARzbAW6/jH8AAR0jAAEgABwAHgsAAR2jAW6+Vg8AAR3zAW6+9FsAAR5mAwABHlMBbrviWe8AAR9QxwABHumADwABG0AKBwABHu8BbrxMcwABH0BbAAEfKgMAAR8XAW674glXAAEbWSwEAAZQAwAD+zikWwABH9YDAAEfwwFuu+LqLwABHEBbAAEgVgMAASBDAW674pcLAAEbTAEnAAEg0FsAASEGCwABIOMBbr5WFUMAATMk+AT2MwABIU8Bbr+MfwABIZcAASAoHAAeCwABIhcBbr5WDwABImcBbr70WwABItoDAAEixwFuu+JZ7wABH1DHAAEjXYAPAAEbQA4HAAEjYwFuvExzAAEjtFsAASOeAwABI4sBbrviCVcAARtZLAQABlADAAP7OHMAASP0WwABI94DAAEjywFuu+IJVwABG1ksBAAGVAMAA/s4pFsAASSKAwABJHcBbrvi6i8AARxAWwABJQoDAAEk9wFuu+KXCwABG0wA+A07AAEl8wABJgwAAglVdA8AA/r8BYAPAAEbQAR7AAEmJwAD+xQEBYAPAAEbQARbAAEmmgMAASaHAW674glXAAEbWAD0cwABJu4XA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RFwiHMAARG4WwABEaYLAAERgwFvTmoC9wABMxkgBAAEnmCUAwAEAEQAcwABEkRbAAESDgsAARHrAW9OavDbAAEzBSAEAAZMAwAD/Pz4BScAARKUcwABEqS7AAGwLAQABgMAARLfAW9M9AMAAsDg+AT0cwABE1S7AAGwNAgACgMAAROTAW9M9HMAARQMWwABE/YDAAETxwFvTPYJVwABG1ksBAAGUAMAA/s4AwACwPD8/Pz0cwABFURbAAEU8LsAAbADAALAWmXYCAAKAwABFXcBb0z00wABFagPAAEVqwABFewAAAAAAAABhAwBcAUrAAEVwAYHAAEVwwFvTdQDAAP8MP07AAEWWwABFnwAAhZdgA8AARtABHMAARa2AwABFocBb0z26mAEAARbAAEW9LqVAwACwGQDAAEfcTsAARd3AAEXqAACFmmADvzoBFsAARfWBwABF7MBb1gC6i8AARxA9HMAARhaAwABGCsBb0z269AIAAhbAAEYpLrHGwACwHoLAAEY+wFvWOADAAEfaTsAARs3AAEbWAAClUmADwABMuAEWwABG5IDAAEbYwFvTPaVSwABH0EnAAEbyIiEWwABHAIPAAEb3wFvWjLftwABMywAhHMAARxuDwABHEsBb1oy8SQAAAADAAEzWPgJOwABHRMAAR0kAAIO1YAPAAEbQARbAAEdXgMAAR0vAW9M9g7XAAEbaScAAR2MiJcAAR2yEwABHZ8Bb1utgA8AASyUAHMAAR48WwABHghTAAEd9wFvW6wQBYAPAAEslukvAAEeDSAEAAYHAAEeSwFvWAADAAP91PgJOwABJFMAASRwAAKmEYAO/OgEcwABJMhbAAEkeLrHGwACwHrZbAQABgsAAST7AW9Y4AL9pScAASVUhHMAASW4WwABJXhTAAElZwFvW6wQBYAPAAEsluovAAEcQSAEAAYXAAElxwFvXYwDAAP91PgI9F8AASYsUwABJhsBb1usEAWADwABLJbvOF8AASZwUwABJl8Bb1usEAWADwABLJbqLhcAASa7AW9djwABHEMAASyc9HMAAScEuwABsBAEAARTAAEnkwFvW6wQBYAPAAEslAMAAsDs/ScAASgIWwABKLxzAAEoaFsAASgYuscbAALAeqFwBAAGCwABKIcBb1jgAv3Ozvb8pPgJOwABKWsAASl8AAK+WYAPAAEdfAR7A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RCkcwABEGBbAAEQSLoacwACw6sAASnYBAAEWwABEIoDAAEQcwFwefIadwACw6wDAALBbSAEAARbAAEQsLoacwACw6gDAAP91BsAAsPeB28AARDrAAERIwABEiAMAgWsAAAABA8AARErAAESIAAAAAQEBwABEUQAAAIPbYAPAALDoAABgA8AA/FUBPgFKwABEXgEcwABEfBzAAERrFsAARGUuhp3AALDrnQsBAAEWwABEdYDAAERvwFwfQoacwACw6gDAALBaSAEAARbAAER/LoadwACw6wDAAP91BsAAsPiB28AARI3AAESbwABE2wMAgW0AAAABA8AARJ3AAETbAAAAAQEBwABEpAAAAIPbYAPAALDoAABgA8AA/FUBPgFKwABEsQEcwABEzxzAAES+FsAARLguhpzAALDqwABKdgEAARbAAETIgMAARMLAXB/Vhp3AALDrAMAAsFtIAQABFsAARNIuhpzAALDqAMAA/3UGwACw/IHbwABE4MAAROnAAEUHAQCq5gAAAAEDwABE9MAARQcAAAAAAAAAYAPAAPxVAUrAAET3ARbAAET9FsAARPcuhp3AALDrqubAALBdBsAAsP2B28AARQvAAEUUwABFMgEAwABHGQAAAAEDwABFH8AARTIAAAAAAAAAYAPAAPxVAUrAAEUiARbAAEUoFsAARSIuhpzAALDqwABHGcAAsF4GwACw/oHbwABFNsAART/AAEVeAQDAAGwzAAAAAQPAAEVNwABFXgAAAAAAAABgA8AA/FUBSsAARVABHMAARVYWwABFUC6GnMAAsOpIAQABFsAARVkuhp3AALDrAMAA/3UGwACw+YHbwABFY8AARXbAAEWWAAAjAWrAAEVkYAPAAP9oAgAAAQPAAEV+wABFlgAAAAAAAABgA8ABAAIBSsAARYQBJMAARZYFJ5nyFsAARYcuhpzAALDqJ4GLFsAARY8uhp3AALDrJ5nzAABcFK0AXBVSAFwXTwBcF+8AXBiSAFwZBwBcHGoAXB00AFwdjwBcHlIAXB8YAFwfqwBcIEAAXCCPAFwg4gBcIUIAXCGsAAAAEALAALEDgdvAAEaGwABGjMAAkY8DwABsNQAAAWABwABGDwABYAHAAJNnBgTAALEFgdvAAEe+wABH4AnAAGw2AF0DwAD+vwFgA8AASzwBMcAAR95gA8AASzwABMAAsQaB28AASGzAAEiTCcAAYNsAXQPAAP7xAmADwABG0GADwACw6AEewABIecAA/vgAAmADwABG0GADwACw6AAABMAAsQeB28AASKvAAEi2CaVAAGADwABOhQAEwACxCIHbwABIz8AASNMJgVQAYAPAALBCAATAALEJgdvAAEjuwABI9wnAAEbIAGADwACTbgAEwACxCoHbwABJA8AASQgYpIAAYAPAAEXrASsBBcAAsSiB28AASQ3AAEkNwABJmAAAAAPAAEkiwABJmAAAAAICAsAASTAAAAClQGADwABOhQDAAElCAAAEwABGyGADwACTbgAAYAPAALEDAT8ECAHAALEJgQDAXCMxCADAALEIH8AASWDAALBRAAAAAAgAwACxB4DAAEmNwFwjIQkBwABJDcAARnsAAAAAGgbAALEMgdvAAEbYwABG78AARxABAIC9AWrAAEbZYAPAAP9oAgAAAQPAAEb0wABHEAAAAAAAAABgA8ABAAIBSsAARvcBJ8AAbDcGwACxDoHbwABJncAASa7AAEsqAAC6CwFqwABJnmADwAD/aAIAAAEDwABJuMAASyoAAAABAQHAAEnAAAAApIBgA8AAResAAFwBPgQ9F8AASdIupICAwABJ2sBcJAnAALEKPRzAAEnlLrneAQABgMAASfjAXCQJAMAARdY9HMAASrEuwABsOAAAAADAALEPPRfAAEsXFsAASw0uwABGyMAAsQnAAGDbFsAASyAuwABg28AAsQbAAJNyBsAAsQ+B28AASy/AAEs0wABMAwAAwABsOAAAAAEDwABLScAATAMAAAAAAAAAXAE+AT0cwABLXhbAAEtSLsAAbDbAALEFg/0BAAE0wABLZgPAAEtmwABL/gAAAAEBAcAAS3gAAAC56GADwABLPAAAYAPAAP8lAT4CPRzAAEufFsAAS5mAwABLjcBcJOmaX8AARti6RwIAAoDAAEunwFwk6RzAAEvGFsAAS8CAwABLtMBcJOmCVcAARtZLAQABkwDAAP7OAMAARsI9HMAAS+QWwABL3oDAAEvSwFwk6ZpfwABG2IReAQABgMAAS+vAXCTpAMAARr8AwAD+jQbAALEQgdvAAEwIwABMGcAATZkAALngAWrAAEwJYAPAAP9oAgAAAQPAAEwowABNmQAAAAEBAcAATDUAAACaX2ADwABGmQAAXAE+A0/AAExCwABMRwAAAZrxYQMBYAPAAEbQXAADwABMTMAATVIAAAABAQHAAExaAAAAuehgA8AARtAAAFwBPgJOwABMdcAATHsAAMAAa7ZgA8AAsOgBJsAATHUBHMAATImCwABMfcBcJfiEUgEAAS4AwABHQmADwACw6EnAAEydFsAATO4cwABMuILAAEyhwFwl+LZvAQABFsAATM4WwABMwi6lQMAAsQexxsAATo4AwABHK7VPvyg+AkAhHMAATReDwABNEcBcJg5IAQABKwDAALD0wABNEcAATR4APRzAAE0vFsAATSkuwABg28AAsQaAvwIAAoLAAE0wwFwl+IPAAE0/wFwmDgDAAP8GPz0cwABNX4DAAE1ZwFwlu7pTAQABgcAATWrAXCXVAMAARsg9HMAATXyAwABNdsBcJbu6VQEAAYHAAE2PwFwl1QDAAEbJBsAAsRGB28AATZ7AAE2wwABPzQAAueYBasAATZ9gA8AA/2gCAAABA8AATcDAAE/NAAAAAQEBwABNzgAAALnoYAPAAEbQAABgA8AAsOgBPgFJwABN4RbAAE42HMAATfqAwABN5cBcJ1W2cgEAARbAAE4YFsAATgwupUDAALEHscbAAE6OAMAARy61T78oPgFKwABOUAEcwABOXBbAAE5XLoFUwACxCMAAbBkCAAIWwABOfxbAAE56LoFUwACxCMAAbBDAALBEHMAATo0WwABOiC6BVMAAsQjAAGwUAQABgMAATp7AXCdVAMAAsEkAwACwTknAAE64FsAATwUcwABO0YDAAE68wFwnVbZvAQABFsAATucWwABO2y6lQMAAsQexxsAATo4AwABHK7VPvyg+Ak7AAE8wwABPNgAAgJZgA8AAsKQBJsAATzABHMAATz0WwABPOC6BVMAAsQjAAGwTAQABgMAAT1HAXCdVAMAAsEhgA8AAsKRKwABPZQEcwABPcRbAAE9sLoFUwACxCMAAbBkCAAKBwABPhMBcKFCBwABPi8BcKFAAwACwTj4BSsAAT6YBHMAAT7IWwABPrS6BVMAAsQjAAGwYAAAAAMAAsE0GwACxEoHbwABP0sAAT+TAAFONAAC5vwFqwABP02ADwAD/aAIAAAEDwABP7MAAU40AAAABAQHAAE/yAAAAukBgA8AASdwAAGADwACw6AE+BknAAE/9FsAAUDAcwABQBYDAAFABwFwpJbZvAQAB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AGq3AADAAGxEYAPAALDoARzAAGq/FsAAarkuwABg28AAsQZLAQABgsAAasDAXD44AMAA/wVJwABqzCEcwABq2IPAAGrQwFw+b0gBAAErAMAAsPQ+AUnAAGtLIhbAAGt/HMAAa1SBwABrT8BcPgG2bwEAARbAAGtqFsAAa14upUDAALEHscbAAE6OAMAARyu1T78oABbAAGvOHMAAa6OCwABrncBcPji2bwEAARbAAGu5FsAAa60upUDAALEHscbAAE6OAMAARyu1T78oPgFJwABr6hbAAGv2g8AAa+7AXD5vwABHGcAAsP0+AUrAAGwOARzAAGwaFsAAbBUugVTAALEIwABsGQIAAhbAAGxBFsAAbDwugVTAALEIwABsEMAAsEQcwABsWBbAAGxSg8AAbErAXD5vhp3AALDrgY0BAAEWwABsXxbAAGxaLoFUwACxCMAAbBHAALBFAMAAsFcAwACwTknAAGx3FsAAbIODwABse8BcPm+q5sAAsPw+AUrAAGybARzAAGynFsAAbKIugVTAALEIwABsGQIAAhbAAGzOFsAAbMkugVTAALEIwABsEMAAsEQcwABs+hzAAGzcFsAAbNcugVTAALEIwABsFwEAARbAAGzzg8AAbOvAXD5vhpzAALDqAMAAsEyBjQEAARbAAG0BFsAAbPwugVTAALEIwABsEcAAsEUAwACwVwDAALBOP0nAAG0hIhbAAG1yHMAAbTmBwABtJcBcPgG2dQEAARbAAG1OFsAAbUIupUDAALEHscbAAE6OAMAARzG1T78oABbAAG3AHMAAbZaCwABtkMBcPji2dQEAARbAAG2rFsAAbZ8upUDAALEHscbAAE6OAMAARzG1T78oPgFJwABt3BbAAG3og8AAbeDAXD5vwABHGcAAsP0+AUrAAG4AARzAAG4MFsAAbgcugVTAALEIwABsGQIAAhbAAG4kFsAAbh8ugVTAALEIwABsEMAAsEQWwABuNYPAAG4twFw+b4adwACw6wDAALBOScAAbkwWwABuWIPAAG5QwFw+b6rmwACw/D4BSsAAbnABHMAAbnwWwABudy6BVMAAsQjAAGwZAgACFsAAbqMWwABuni6BVMAAsQjAAGwQwACwRBzAAG6xFsAAbqwugVTAALEIwABsFwEAARbAAG7Ig8AAbsDAXD5vhpzAALDqAMAAsEwAwACwTj8/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R8AAAAAAAAAAYAPAAQACAUrAAEeuARzAAEe2HMAAR64ulXEAAAAAwAC0WiMAAAAAwAD+nQbAALUSge/AAEfFwABHysAASHwAAFYAAAABA8AAR83AAEh8AAAAAQEBwABH0AAAIICWXwMBAAAAYAPAAPxVAT4ETsAAR9/AAEfjAACD1l8DAAABHMAAR+UuwABtO8AAtDYBAAGAwABH8sBd/U0AwAC1B07AAEgDwABICgAAgXZgA8AA/FUBKj0cwABIIBbAAEgXLsAAbTjAALQ2wAC1Bpl2AgACgcAASCzAXf1mNMAASDEDwABIMcAASGQAAAAAAAAAXwMBAAE+Aj2KwABIPMBd/ZcpSsAASFEBgMAASFjAXf1NAMAA/wxKwABIawGCwABIcsBd/ZcGwAC1E4HvwABIgcAASIbAAEi7AACApQAAAAEDwABIjMAASLsAAAABAQHAAEiZAAAgiHldA8AA/n0BXwMBAAAAXAFKwABIpgEcwABIr4DAAEimwF3+RYP9AQABFsAASLcuVsAAtRIAwAD+jQbAALUUge/AAEjAwABIxcAASOAAAIJGAAAAAQPAAEjKwABI4AAAAAAAAABcAUrAAEjQARzAAEjZFsAASNAuwABtOMAAtDbAALUGgkYAAAAAwAD/DwbAALUVge/AAEjlwABI6sAASSYAAIQHAAAAAQPAAEj1wABJJgAAAAEBAcAASQcAAACD210DwAD+fQFgA8AA/2gAAGADwAD8VQFKwABJEQEcwABJF4DAAEkRwF3/BJaLAQABFsAASR0ugxzAALUQAMAA/pAGwAC1FoHvwABKpsAASq3AAEsIAACXWQAAAAEDwABKt8AASwgAAAABAQHAAErEAAAAg9tdA8AA/7MBYAPAAP9oAABdA8AA/7MBXwMBAAFKwABK1AEcwABLARzAAErULoGlAQABNMAAStoDwABK2sAASv8AAAABAQHAAErbAAAAlntfAwEAAABgA8AA/FUBSsAASucBIRzAAErugMAASujAXf93gxwBAAGBwABK98Bd/8UAwAD/vwDAALRblXEAAAAAwAD+lAbAALUXge/AAEyGwABMjcAATM0AAJdYAAAAAQPAAEyZwABMzQAAAAEBAcAATKYAAACD210DwAD/swFgA8AA/2gAAF0DwAD/swFfAwEAAUrAAEywARzAAEzGHMAATLAugaUBAAEWwABMvIDAAEy2wF4APIMcwAD/vwDAALRblXEAAAAAwAD+lAbAALUYge/AAEzSwABM1MAATWsAAJdRAAAAAQPAAEzawABNawAAAAEBAcAATOIAAACWe2ADwAD/aAAAXwMBAAE+A0nAAEzxIiEcwABM/YDAAEz1wF4Aw0gBAAErAMAA/3UAISXAAE0QgMAATQjAXgDDXwMBAErAAE0XASs/TsAATSzAAE0wAACD1l8DAAABHMAATTIuwABtO8AAtDYBAAEmwABNRwCAwABNP8BeAMNfAwEAAMAAtQdKwABNUwEcwABNYhbAAE1aLsAAbTjAALQ2wAC1BksBAAGBwABNY8BeARcAwAD/BQbAALUZge/AAE1wwABNdcAATlAAAIReAAAAAQPAAE17wABOUAAAAAEBAcAATYMAAACWe2ADwAD/aAAAYAPAAPxVAT4FScAATZIiIRzAAE2egMAATZbAXgGqSAEAASsAwAD/dQAhJcAATbGAwABNqcBeAapfAwEASsAATbgBKj9OwABNzsAATdIAAIPWXwMAAAEcwABN1C7AAG07wAC0NgEAASbAAE3pAIDAAE3hwF4Bql8DAQAAwAC1B0nAAE31IRzAAE4DFsAATfouwABtOMAAtDbAALUGh2QBAAGBwABOD8BeAgAAwAD/BErAAE4VASo/PRzAAE4wFsAATicuwABtOMAAtDbAALUGhF4BAAGBwABON8BeAgAAwAD/DkrAAE5BASkGwAC1GoHvwABOVcAATlrAAE6aAACXUgAAAAEDwABOY8AATpoAAAABAQHAAE51AAAAiHldA8AA/n0BYAPAAP9oAABcAUrAAE6CARzAAE6LgMAAToLAXgLOg/0BAAEWwABOky6EXsAAtRkAwAD+jQbAALUbge/AAE6fwABOpMAAT14AAJdTAAAAAQPAAE6vwABPXgAAAAEBAcAATrUAAACXVGEDAV8DAQBgA8AA/FUAAFwBPgNOwABO0MAATtkAAMAAbT1dA8AA/r8BWwExwABO21sAPRzAAE7sFsAATuMuwABtOMAAtDbAALUGg/0BAAE0wABO9APAAE70wABPMgAAAAICAsAATvUAAACD1l8DAAAAwABO+gAAAICWXwMBAAAAYAPAAP8lAT4BScAATwkcwABPEYDAAE8NwF4DPCABAAGDwABPEsBeA7YAAD0cwABPI4HAAE8awF4DWVYBAAGCwABPJ8BeA6gAwAD+0D8AwAD/ED0cwABPQoHAAE85wF4DWYP9AQABFsAAT1MWwABPSi7AAG04wAC0NsAAtQaEXsAA/w4AwAD+jQbAALUcge/AAE9jwABPaMAAUVAAAJdVAAAAAQPAAE9xwABRUAAAAAEBAcAAT4MAAACIeV0DwAD+fQFgA8AA/2gAAFwBPgVOwABPl8AAT6YAAMAAbT5dA8AA/7MBXwMBAAEewABPrMAAwyIAAV8DAQAAAEbAAE/DAMAAT8wAAACWe2ADwAD/aACAwABP18BeBHdBPgRJwABP6SIhHMAAT/WCwABP7cBeBMVIAQABKwDAAP91ACElwABQCILAAFAAwF4ExV8DAQBCwABQDwA/TsAAUCPAAFAnAACD1l8DAAABHMAAUCkuwABtO8AAtDYBAAEmwABQPgCCwABQNsBeBMVfAwEAAMAAtQdJwABQTCEcwABQWhbAAFBRLsAAbTjAALQ2wAC1BodkAQABg8AAUGbAXgUcAMAA/wRCwABQbAA/PRzAAFCLgcAAUHzAXgSUVgEAARzAAFCXFsAAUI8uwABtOMAAtDbAALUGSwEAAYPAAFCYwF4FHADAAP8FAMAA/8BOwABQrsAAULsAAMAAbT9dA8AA/r8BWwExwABQvVsAPRzAAFDOFsAAUMUuwABtOMAAtDbAALUGg/0BAAE0wABQ1gPAAFDWwABRIAAAAAICAsAAUNcAAACD/l8DAAAAwABQ2gAAAIDyXwMBAAAAYAPAAP8lAT4BScAAUOUhHMAAUPmBwABQ6sBeBJSDHAEAAYTAAFECwF4GLADAAP+/PRzAAFETgsAAUQbAXgXPVgEAAYPAAFEXwF4GHgDAAP7QPwDAAP8QPRzAAFE0gsAAUSfAXgXPg/0BAAEWwABRRRbAAFE8LsAAbTjAALQ2wAC1BoRewAD/DgDAAP6NBsAAtR2B78AAUVXAAFFawABRrQAAl1YAAAABA8AAUWXAAFGtAAAAAQEBwABRawAAAJdUYQMBXwMBAGADwAD8VQAAXAFKwABRhQEcwABRhS6XUwEAATTAAFGRA8AAUZHAAFGsAAAAAQEBwABRkgAAAJZ7XwMBAAAAYAPAAPxVAUrAAFGeASEcwABRo4DAAFGfwF4G8iABAAGBwABRpMBeBzEAAADAALUbBsAAtR6B78AAUbLAAFHHwABR7gAAlpYBasAAUbNgA8AA/AiGagAAAQPAAFHQwABR7gAAAQAAgnpgA8AA/2gBWwAAAABdA8AA/7MBXwMCAAFKwABR1gEewABR2sAA/70BAl8DAQBfAwIAAS4ABsAAtR+B78AAU03AAFNUwABTgQAAl1cAAAABA8AAU1nAAFOBAAAAAQEBwABTYQAAIIPbXQPAAP+zAV8DAQAAAF0DwAD/swFfAwEAAUrAAFNrATXAAFNrAAABAF0DwAD/swFfAwEAARzAAFNrLpVxAAAAAMAAtFo1AAAAAQBbARzAAFN0gcAAU3LAXggvgKUBAAGAwABTe8BeCAYAwAD/wYEAwF4ILwAAXfn3AF36VgBd+ugAXfvSAF38JwBd/HwAXfzPAF39JABd/hsAXf6GAF3+2gBd/00AXgASAF4AmQBeAYAAXgKkAF4DEgBeBE0AXgbIAF4HcABeB9wAXgiCAAAAFQAAAAGB7wBeCOIAXbopAF3HcQBdyJgAXdgRAF3fnABd5TcAXe+VAF3y2QBd+LMAXgjfAAAACQBeCOIAAAAAAAIGwAC1IsAAbUCB8AAAAYJ8AADAANIbgzcAAAAABQLAALUjgfCCmYKojh8HqDoAAQAAg+hgA8AA/2gBWwFgAcAA/2gAAAABBcAAtTIAAAAABAAAAwAAAAAAAAAAAF0DwAC1IwFfAwAAAT8BCQEAwAD/fgAAAAALBsAAtSWB8IK1gsWCygECh04AAAABA4LKgsoAAAAAAAAAXQPAAP59AV8DAAAABsAAtSaB8ILOgteC3gECgVUAAAABA4Legt4AAAAAAAAAYAPAAPxVAAbAALUngfCC4oLqgvMBAsAAbUEAAAABA4LzgvMAAAAAAAAAYAPAAP4bAAbAALUpgfCC94MDgxYAAsAAbUIAAAABA4MMgxYAAAABAQGDDwAAIINKXwMAAAAAXQPAAP59AV8DAAAABsAAtSqB8IMagyaDOQACwABtQwAAAAEDgy+DOQAAAAEBAYMyAAAgg0pfAwAAAABdA8AA/n0BXwMAAAAGwAC1K4HwhHWEg4UAAADAAG1EAAAAAQOEmYUAAAAAAAAAAF0DwAD+vwFdA8AA/r8BXwMAAAE+Ak6EsIS3AADAAG1FXQPAALVPAV8DAAABH4S9wAC1XwEBXwMAAAEuAEqE1gEchOSAhN3AXgrDwABtRAAAAADAALVdBsAAtSyB8IU9hUKGRgAAwABtRgAAAAEDhU6GRgAAAAICAoVRAAAgg0pfAwAAAIVbAAAggklfAwAAAABgA8AA/FUBPgNOhXCFdQAAqaddA8AA/7MBXwMAAAEehXvAAMMhAAFfAwAAAABPhYmFjgAAAZW0YQMBXwMAAGADwAD8VQADhZSGJgAAAAEBAYWXAAAAg/NfAwAAAABgA8AA/FUBPgNJhaUehanAAPf8AgAChIWzwF4LjoGFucBeCzEASoXCASk/SYXVIRyF34KF2sBeC0hWAQABhIXjwF4LjgDAAP/ASoXqASo/SoX+ARyGFRyGBS7AAG1CAQABhIYPwF4LjgDAALUpgdYBAAGDhhnAXgtuAMAA/pJKhi0BHIY6g4Y0wF4LbiABAAGAhjvAXgslAAAGwAC1LYHwhoiGlIeGAADAAG1HAAAAAQOGnYeGAAEAAQEBhqAAACCG9F8DAAAAAF0DwAD+fQFfAwAAAT4ETgAAAACBz1sBk04AAAAAgdBbAE+GlAAAAACI7VsAA4adh4YEAAABAQEAAAAAiO5dA8AA+AcBXwMAAAAAYAPAAPxVAT4CPgNOhraGuwAAqaddA8AA/7MBXwMAAAEehsHAAMMhAAFfAwAAAABPhs+G2wAAAZW0YQMBXwMAAF0DwAD+fQFfAwAAAAOG4YdoAAEAAQEBhuQAAACDqF8DAAAAAF0DwAD+fQFfAwAAAT4ETgAAAACBz1sBk04AAAAAgdBbAE+GzwAAAACI7VsAA4bhh2gEAAABAQEAAAAAiO5dA8AA+AcBXwMAAAAAYAPAAPxVAT4CPgNJhvUhHIb/hYb6wF4MuVYBAAGHhwPAXg0EAMAA/8BKhwcBKj9GhxWHMYceAAAAg4BfAwAAAByHIy7AAG1CAQABh4ctwF4NBADAALUpPgE+Aj0XABQAwF4NSAsAnLbAAPe+HIdIhodCwF4M3yABAAEUh0nAXg2PDAAAAMAA+A1NhzsCKT4CPRcAFADAXg1ICwCI78AA976Hh2HAXg0EwAD4DE2HWwIpSodoASpKAAEfAMAA+AYBAV8DAAABFADAXg01CgAAPgI9FwCEAMBeDJqctsAA974ch3yGh3bAXgzfIAEAAYCHfcBeDFYAAMAA+A1Nh28CKUqHhgEqSgABHwDAAPgGAQFfAwAAAYMAwF4MhwAGwAC1LoHwh9WH4Yj7AADAAF6nAAAAAQOH6Yj7AAEAAQEBh+wAACCG9F8DAAAAAF0DwAD+fQFfAwAAAT4ETgAAAACBz1sBk04AAAAAgdBbAE+H4QAAAACI7VsAA4fpiPsEAAABAQEAAAAAiO5dA8AA+AcBXwMAAAAAYAPAAPxVAT4CPgNOiAKIBwAAqaddA8AA/7MBXwMAAAEeiA3AAMMhAAFfAwAAAABOiB+IJQAAoTtdA8AA/r8BXwMAAAExiCpfAwAAAYCIK8BeDplDiDYWiEOGiD3AXg8gg7fAAP6iPgJOiFuIYAAAg7VfAwAAARyIaIaIYsBeDyCGLgAAAADAAP7eSYh8IRyIhoWIgcBeDvyDHAEAAYeIj8BeD1kAwAD/vz4DPRyIpYWIoMBeDvxWAQABh4ipwF4PWQDAAP/APgI9FwCEAMBeDt2I78AA976HiL7AXg9ZwAD4DE2IuAIpPRyI0oaIzMBeDyCApQEAARyI2S7AAG1CAQABh4jjwF4PWQDAALUpAMAA/tE/Soj7ASpKAAEfAMAA+AYBAV8DAAABgwDAXg7KAAbAALUvgfCJx4nPimsAAMAAbUgAAAABA4niimsAAAABAQGJ5QAAIIPzXwMAAAAAXQPAAP6/AV8DAAABPgNAIRyJ/YCJ+MBeEEJIAQABKwDAAP91ifiKBABOihmKIAAAwABtRV0DwAC1TwFfAwAAAR+KJsAAtV8BAV8DAAABLgBKij8BHIpNgYpGwF4QecAAbUnAALUiAQABgIpiwF4QQgDAALVZBsAAtTCB8I0VjR6OHQAAwABtSgAAAAEDjSuOHQAAAAEBAY0uAAAghvRfAwAAAABdA8AAtSMBXwMAAAE+BE6NPo1DAADAAG1LXQPAAP7xAl8DAABfAwAAARaNbTWNSgAAAQBdA8AAtWABXwMAAAEfjUrAALVrAQFfAwAAAS4ANQAAAAEAWwEcjWKBjWDAXhEggp8BAAGAjWbAXhDmAMAAtWeBAMBeESDAAG1MwAC1ZE6Nio2QAACkgF0DwAC1MwFfAwAAAR+NlsAAtUYAAV8DAAAAAEaNro3IjbUAAACD818DAAAAFo3CgY29wF4RAoNowAD/Ez4BSY3QIRyN2YON1MBeEZxIAQABgI3cwF4Q5gDAAP91PRyN6IKN4sBeEXTAAGP1AgACHI30gY3wwF4RAksBAAGDjfXAXhGcAMAA/wWDjfzAXhGcAMAAtUA/So4NAYKOFMBeEXQAAF4JlQBeCcIAXgnqAF4KFABeCk8AXgqKAF4LAwBeDDQAXg53AF4QIABeEMQAXhIcAAAACwLAALUzgfCOIo4olRgDwABtTQABAACD6GADwAD/aAFbAV0BwAC1IwFfAwAAAAADBMAAtTaB8I53jpRYwABtTsAAtSIAXQPAAP7xAl8DAABdA8AA/7MBXwMAAAEejoTAAP74AAJfAwAAXQPAAP+zAV8DAAAAAATAALU3gfCOxY7lWMAAbU/AALUiAF0DwAD+8QJfAwAAXQPAAP+zAV8DAAABHo7VwAD++AACXwMAAF0DwAD/swFfAwAAAAAEwAC1OIHwj2WPekmziMAAtSIAXQPAAP+zAV8DAAABHo9ywADDIQABXwMAAAAAAQXAALVGAAAAAAQAAAMAAAAAAAAAAABdA8AAtTMBXwMAAAE/AQkBAMAAtTIAAAAACgbAALU6gfCO6o76jw4BAIdOAAAAAQOPAI8OAAAAAAAAAF0DwAD+fQFfAwAAAUqPAwEWjwoWjwMuwABtTsAAtSLAALU2g2jAAP8TBsAAtTuB8I8SjxuPNAEAgVUAAAABA48jjzQAAAAAAAAAYAPAAPxVAUqPJgEWjy0WjyYuwABtTsAAtSLAALU2gVXAAP8WBsAAtTyB8I84j0CPWgEAwABtQQAAAAEDj0qPWgAAAAAAAABgA8AA/hsBSo9NARaPVBaPTS7AAG1OwAC1IsAAtTZhwAD/FQbAALU+gfCPf4+Lj7oAAMAAbUIAAAABA4+Uj7oAAAABAQGPlwAAIINKXwMAAAAAXQPAAP59AV8DAAABSo+iATUAAAABAF0DwAD/swFfAwAAARyPqBaPoi7AAG1OwAC1IsAAtTZLAQABgI+pwF4UYgDAAP8FIxyPsYEAwF4UgEgBAAErAAAWj7Qus4jAALUiwAC1OIEAwF4UgAFdA8AA/7MBXwMAAAbAALU/gfCPvo/Kj/wAAMAAbUMAAAABA4/Tj/wAAAABAQGP1gAAIINKXwMAAAAAXQPAAP59AV8DAAABSo/hATUAAAABAF0DwAD/swFfAwAAARyP6haP4S7AAG1PwAC1IsAAtTdLAQABgI/rwF4VBwDAAP8FIxyP84EAwF4VJUgBAAErAAAWj/Yus4jAALUiwAC1OIEAwF4VJQFdA8AA/7MBXwMAAAbAALVAgfCQAZAGkMsAAMAAY/UAAAABA5ANkMsAAAACAgKQEAAAIINKXwMAAACQGgAAIIJJXwMAAAAAXAE+BkAhHJA2gJAvwF4VrEgBAAErAMAA/3WQL5A9AEAhHJBSgZBLwF4VuEgBAAErAMAA/3WQS5BZAD0ckGAuwABakQEAAYCQaMBeFawAwAC1QT0ckHUuwABakQEAAYGQfcBeFbgAwAC1QT0ckJkckJAWkIouwABtTsAAtSLAALU2SwEAAYCQkcBeFawAwAD/BVYBAAGBkJ3AXhW4AMAA/8A9HJC8HJCzFpCqLsAAbU/AALUiwAC1N0sBAAGBkLTAXhW4AMAA/wVWAQABgJDAwF4VrADAAP/ABsAAtUGB8JDQkNWRagAAwABakQAAAAEDkNyRagAAAAEBAZDfAAAgg/NfAwAAAABcAT4DQCEckPeAkPLAXha/SAEAASsAwAD/dZDykP4APRyRDBaRBS7AAG1OwAC1IsAAtTaZdgIAAoCRGMBeFr80kR4DkR6RMAAAAAAAAABdA8AA/7MBXwMAAAFKkSQBHpEowADDIQABXwMAAAAAAMAA/ww9HJFBFpE3LsAAbU/AALUiwAC1N5l2AgACgJFNwF4WvzSRUwORU5FlAAAAAAAAAF0DwAD/swFfAwAAAUqRWQEekV3AAMMhAAFfAwAAAAAAwAD/DAbAALVCgfCSiJKNktQAAMAAbVAAAAABA5KXktQAAAACAgKSmgAAIINKXwMAAACSpAAAIIJJXwMAAAAAXAE+AT01AAAAAQBdA8AA/7MBXwMAAAEckrgWkrIuwABtTsAAtSLAALU2SwEAAYCSucBeF7MAwAD/BSMcksKCAMBeF9JIAQABKwAAKxySwoIAwF4X0oReAQABgZLJwF4XvwDAAP/CAWADwAD8VQbAALVDgfCTbpNzlDIAAMAAbVEAAAABA5N9lDIAAAABAQGTgAAAIIPzXwMAAAAAXAE+BD0ck5MWk4wuwABtTsAAtSLAALU2hF4BAAGAk5rAXhhbAMAA/w5Ok6mTsQAAh/xdA8AA/7MBXwMAAAEck7wWk7MuwABtT8AAtSLAALU3SwEAAYCTvcBeGFsAwAD/BUmTyByT1IGTzMBeGJJIAQABKwDAAP91SpPdAD9Gk+mUBZPyAAAAg0pfAwAAAIGT/MBeGJI+AT0clBwclBMWlA0uwABtTsAAtSLAALU2SwEAAYKUFMBeGOoAwAD/BYReAQABgJQjwF4YWwDAAP/CBsAAtUSB8JTXlNyVFgAAwABtUgAAAAEDlOqVFgAAAAEBAZTzAAAgh05dA8AA/r8BXwMAAAAAXAFKlP0BHJUDgJT9wF4ZWYP9AQABFpULLsAAbVHAALVDAMAA/o0AAF4TawBeE7UAXhP6AF4UQABeFOUAXhWKAF4WnQBeF5EAXhg5AF4ZNwBeGZMAAAAKAsAAtUeB8JW2lbyXwAPAAG1TAAEAAIPoYAPAAP9oAVsBYAHAAP9oAAAEBMAAtUmB8JYFlg4YJwBgA8AA/hsBkwTAALVKgfCWQZZMGMAAbVQAYAPAAP4bAZMEwAC1S4HwlwKXERjAAGzhAGADwAD8VQEqBMAAtUyB8JdUl11YglkAXQPAAP6/AV8DAAABKwEFwAC1ToHwl2KXYpe+AAAAA5drl74AAAABAQGXcAAAAJsIYAPAAP4bAABdA8AAtUcBXwMAAAE/BAgAwAC1SYCXh8BeGm4IAMAAtUqAl6DAXhpuCADAALVLKgkBl2LAAP9+AAAAAAAAAF4auQAAAAACwAC1T4HwmCOYKaLuA8AAbVUAAQAAg+hgA8AA/2gBWwFgAcAA/2gAAAUEwAC1UoHwmGaYbAnAAGDpwAC1IgBdA8AAtSMBXwMAAAAEwAC1U4HwmLOYvRiXccAAtSIAYAPAAP4bAZMEwAC1VIHwmQ6ZJFi1d8AAtSIAXQPAAP6/AV8DAAABHpkbwAD5uQEBXwMAAAGTAATAALVVgfCZa5mGWMAAURzAALUiAF0DwAD+8QJfAwAAXQPAALVHAV8DAAABMpmEXwMAAF0DwAC1RwFfAwAAAATAALVWgfCabJqQWMAAbVbAALUiAF0DwAD+vwFdA8AA/r8BXwMAAAEemoHAAPm5AQFdA8AA/r8BXwMAAAGTAAEFwAC1X4HwmpWalZqsAAAAA5qfmqwAAAABAQGapQAABMAAYOldA8AAtSMBXwMAAAAAXQPAALVPAV8DAAABPwIIAcAAtVKAAMBeG/EJAZqVwAD/fgAAAAAFBsAAtVmB8JswmzibdgAAwABtScAAtSIAAAABA5tMm3YAAAABAQGbTwAAIIPzXwMAAAAAXQPAAP6/AV8DAAABSptYARabbRybWC7AAG1XwAC1IgEAAYCbZ8BeHFQAwAC1XIJZwAC1TAbAALVdgfCcjpycnVEAAMAAbUQAAAABA5yynVEAAAAAAAAAXQPAAP6/AV0DwAD+vwFfAwAAAT4CRpy7nNicwgAAAIPzXwMAAAAWnNEWnMouwABg6cAAtSLAALVSh07AALUlPgJOnOSc7QAAwABtWF0DwAC1RwFfAwAAARyc9Bac7y7AAFEcwAC1IsAAtVVLAQABgJz1wF4c0gDAAP8FSZ0CHJ0PgZ0GwF4c+kgBAAErAMAA/3U9HJ0YLsAAbVfAALUiAQABgJ0nwF4c0gDAALVcP0qdOAEWnT8uwABtVsAAtSLAALVWBsAAtVqB8J2TnZWeAwAAwABtWcAAtSIAAAABA52ZngMAAAAAAAAAXwMAAAE+A06dpJ2pAACD818DAAABHJ2yFp2rLrV3wAC1IsAAtVSgRgEAARydyRadwhaduy61d8AAtSLAALVUYcAA/u+BjQEAAZQAwAD/QgDAAP7dPRed3xyd2Bad0y7AAFEcwAC1IsAAtVVLAQABgJ3ZwF4dqgDAAP8FwABs4SrAALVLSp30AYCd+8BeHaoGwAC1W4Hwni+eNJ58AADAAG1awAC1IgAAAAEDnjmefAAAAAEBAZ48AAAgg/NfAwAAAABcAT4CPReeVByeTRaeSC7AAFEcwAC1IsAAtVVLAQABgJ5OwF4eVwDAAP8FwABs4SnAALVLPRyebxaeaC61d8AAtSLAALVUVgEAAYCec8BeHlcAwAD+0AbAALVcgfCfMZ8+ouwAAMAAbVfAALUiAAAAAQOfTKLsAAAAAQEBn08AACCA8l8DAAAAAF0DwAC1RwFfAwAAAT4GTp+an6AAAMAAbVtdA8AAtUcBXwMAAAEfn6bAALVOAQFfAwAAATUAAAABAGADwAD+GwEWn7Mul3HAALUiwAC1UzUAAAABAGADwAD+GwEXn7Mul3HAALUiHJ+5gQDAXh8hZAEAAZQAwAD/QcAAtVOBAMBeHyEAPRyfxxafwi7AAFEcwAC1IsAAtVWAvwIAAoCfyMBeHuCBn83AXh78AMAA/wY9HJ/YLsAAbVrAALUiAQABgJ/ewF4e4ADAALVbRp/noAif7gAAAMAAbVxfAwAAAByf+haf8y7AAGDpwAC1IsAAtVLAAG1CAQABgKAEwF4e4ADAALUpPgJOoBSgGgAAwABtXV0DwAC1RwFfAwAAARygIRagHC7AAFEcwAC1IsAAtVVLAQABgqAiwF4fvQDAAP8FSaAsHKA2g6AwwF4f9EgBAAErAMAA/3U+Aj2LoIjAXh/0HKCQLsAAbVfAALUiAQABgqCfwF4fvQDAALVcPRegsYGgq8BeHvzAAG1UHqC7wADSNQIBYAPAAP4bAhagyoGgxMBeHvzAAG1UwAC1Shag2YOg08BeH/TAAG1UwAC1SgDAALVKSaDwFqD6g6D0wF4f9MAAbOHAALVLPgE9F6FVgaFPwF4e/MAAbVQeoV/AANI1AgFgA8AA/hsCFqFugaFowF4e/MAAbVTAALVKFqF9g6F3wF4f9CfAALVJAMAAtUo/SaHWHKHoFqHggaHawF4e/MAAbVTAALVKSAEAARah8YGh68BeHvwnwAC1SQDAAP8/PgROogSiDgAAglldA8AA/r8BXwMAAAEeohTAAPm5AQFfAwAAAZMATqInAAAAwABtXF8DAAAARKIwPgM9i6I9wF4hZhyiQS7AAG1ZwAC1IgAAAADAALVaPRyiW4KiUcBeIUFWAQABg6JfwF4hZgDAAP7QPReidByicBaiay7AAFEcwAC1IsAAtVVLAQABg6JxwF4hZgDAAP8FglmCooDAXiFBwAC1TCEeopvAAPf8AgACg6KlwF4hZoCiqMBeHuAAPRyiwhaisy7AAG1WwAC1IsAAtVZWAQABgqLGwF4hQQDAAP7QP0qi3AGBouPAXh78AABeHC4AXhyVAF4dewBeHjEAXh66AF4iLgAAAAUCwAC1YIHwo2ujcajdA8AAbV4AAQAAg+hgA8AA/2gBWwFgAcAA/2gAAAMEwAC1Y4Hwo5ijngnAAGDpwAC1IgBdA8AAtSMBXwMAAAAEwAC1ZIHwo6yjxFjAAG1MAF0DwAD+8QJfAwAAXwMAAAEyo8JfAwAAXwMAAAAEwAC1ZYHwo9Sj5FjAAG1fAF0DwAD+8QJfAwAAYAPAAP4bATKj4l8DAABgA8AA/hsAAQXAALVrgfCj6KPopAUAAAADo/ikBQAAAAEBAaP+AAAEwABg6V0DwAC1IwFfAwAAAABdA8AAtWABXwMAAAE/AggBwAC1Y4AAwF4jEAkBo+jAAP9+AAAAAAIGwAC1Z4HwpAqkCqdqAACCnwAAAAEDpA2nagAAAAEBAaQQAAAghvRfAwAAAABbAT4HPRykLxakHC7AAG1MwAC1ZIC/AgACgKQwwF4jbYCkOMBeI20AwAD/Bk6kR6RPAACvkWADwAD8VQEpTqRfpGEAAGJgA8AA/hsBk06kbqR/AADAAG1gXQPAAP6/AV8DAAABHKSYHKSIFqSBLsAAYOnAALUiwAC1Y8AAbUcBAAGApJLAXiNtAMAAtS2ArQAAAADAAP6TRqSmpMakrwAAAIOoXwMAAACDpLTAXiPIPgE9HKTZFqTOLsAAbV/AALVlgL8CAAKEpNrAXiQWNQAAAAEAYAPAAP4bAYKk38BeI7g1AAAAAQBgA8AA/hsBiqTfwF4juByk4IUAwF4kSGQBAAGUAMAA/0GFAMBeJEgAwAD/Bk6k8qULAADAAG1hXQPAAP59AV8DAAABFqUeg6UNwF4jyJjgwAD+8EOlLIGlM8BeI6c+Aj2JpUTAXiOnKkalWwClZAAAAIOoXwMAAACEpWnAXiSOQT4FSaWNHKWThaWRwF4kzUgBAAGApZbAXiNtAMAA/3VCpZwAP06ls6W5AACDHmADwAD8VQEpTqXLAAAAwABtYl8DAAAARqXZpfyl4gAAAIDUXwMAAAAcpe4WpecuwABg6cAAtSLAALVjwABtQwEAAYWl+MBeJM0AwAC1Kj4BSaYIIRymIxymHxamDC7AAG1MwAC1ZEsBAAEUpiDAXiUqCAAAwAD/BUgBAAErAMAA/3U+AUmmOoamPsBeJQY+Aj2PplXAXiUXFKZcwF4lKggAPY6mbcBeJQYqPgE9j6afwF4lFxympi7AAG1jwAC1IgIAAhSmscBeJSoIAIemtMBeJRcAwAC1aT9JpuchHKcCHKb+FqbrLsAAbUzAALVkSwEAAYWm/8BeJM0AwAD/BUgBAAGHpwXAXiUXAMAA/3U+Aj0cpyoWpxcuwABtTMAAtWSAvwIAAoWnK8BeJM2HpzDAXiUXAMAA/wY9iadAwF4jpyk/BsAAtWmB8Kdvp3Go2wAAwABtY8AAtSIAAAABA6d7qNsAAAACAgKnfgAAIMAAYOtfAwAAAKeEAAAgwABg7F8DAAAAAF8DAAABPgROp5KnmgAAwABtZF8DAAABgKecwF4md06nqKewAADAAG1lXwMAAAGBp7LAXiaFQ6e6IRynyYKnwcBeJpxIAQABg6fMwF4mswDAAP91PgJDp90cp/kcp+8Wp+QuwABtX8AAtWVLAQABgqfwwF4mnADAAP8FYwEAARyoBhan+y7AAG1fwAC1ZUsBAAGDqAfAXiazAMAA/wUAwAD/ST4BPYqoG8BeJpwcqDgWqCUuwABtTMAAtWRLAQABgqg5wF4mnADAAP8FQ6hRHKhtHKhjFqhYLsAAbV/AALVlSwEAAYOoZMBeJrMAwAD/BWMBAAEcqHoWqG8uwABtX8AAtWVLAQABgqh7wF4mnADAAP8FAMAA/0k+AT2LqI/AXiazHKisFqiZLsAAbUzAALVkSwEAAYOorcBeJrMAwAD/BUqoyQGCqNDAXiacAABeI00AXiZRAF4n4AAAAAIAAAABgfAAXif0AF4JPABeElEAXhnEAF4awgBeIksAXifxAAAABQBeJ/QAAAAAAAIGwAC1bMAAbWaB8QAAB4EGAAC5JgABAQGx1YE2AAC9/gAAgVoAAIHgAAEBAZd0gYIAAL8fAACBpwAAwACh7IKKAIHFAADAAHRvAACB5AAAwACeZAAAAAAAAQLAALVxgfGHcoeBwABGMgfAAG1nAAABYAHAAP9oAAFdAcAAoKQBWwsEwAC1c4Hxh8uH1QnAAFEUAGADwACeaQAEwAC1dIHxh+6H9gmr3wBgA8AAdHMABMAAtXWB8YgMiGsGwABtaABgA8AA/hsBaogtYAPAAP4bg0oEwAC1doHxiIqItwnAAFDpAF0DlOIBYAO+JQEfiKGVAgABYAO+JQAABMAAtXeB8YltiYsJpKIAXQPAAP6/AWADwACeaQExiYlgA8AAnmkABMAAtXiB8Yp9iqUJwABtaQBdA8AA/r8BYAPAAJ/tATGKo2ADwACf7QAEwAC1eYHxi5OLuQnAAG1qAF0DwAD+vwFgA8AAoBIBMYu3YAPAAKASAATAALV6gfGMp4zNCcAAbWsAXQPAAP6/AWADwACgNAExjMtgA8AAoDQABMAAtXuB8YzwjRkJwABkuABdA5TiAWADwACeaQEfjQCVAgABYAPAAJ5pAAAEwAC1fIHxjWKNbRjAAGW2AGADwACeaQErBMAAtX2B8Y12jY4YwABRDgBgA8AA/FUBKQEFwAC1pIHxiLyIvIjpAAAAA4jJiOkAAAACAgKIzwAABMAAURRgA8AAnmkAiOAAAASr32ADwAB0cwAAYAPAALVxAT8DCAHAALVzgADAXio3CAHAALV0gQDAXipHCQGIvMAA/34AAAAAIwbAALV/gfGNk42YjiUAAMAAZb8AAAABA42vjiUAAAABAQGNwAAAAIFUYAPAAJ5pAABcAT4DSY3MHI3aFo3QLsAAZLjAALV7gxwBAAGAjePAXiqmAJTtSo3qAD89HI4AFo32LsAAZLjAALV7VgEAAYCOBMBeKqYAlO49HI4YFo4PLqSiwAC1d1YBAAGAjhzAXiqmAMAA/tAGwAC1gYHxjiqOL4+4AADAAG1swAC1bAAAAAEDjkOPuAAAAAEBAY5IAAAAoURdA8AA/7MBWwAAYAPAAPxVAT4FTo5ZjmMAAMAAbW1gA8AA/hsBFo52Fo5lLsAAUOnAALV2YZT/SY6CHI6fHI6QgY6GwF4rXGQBAAEWjpiAjpLAXitBYcAAztYAwAD/QYFrAQABao6iYAPAAP4bg0oAwAD/SkqOtgEqP06OzI7XAADAAG1uYAPAAP4bAZNGjuCPBAAAAAEAWwCAjv3AXitBPgJOjvUAAACkH2ADwACeaQEmjuABg471wF4r2mADwACeaUmPDCEcjyIWjxEuwABQ6cAAtXaDHAEAARaPMISPK8BeK+upbsAAnn0AlO0+Aj2Kj0LAXivDHI9Mgo9CwF4rw2QBAAGUAMAA/0FJj1gcj2eCj1zAXivDgJcBAAEcj3xqj2lgA8AA/huDSoGNAQABgY9+wF4rXADAAP9CAMAA/0tKj4kBKT8/So+oASoGwAC1goHxj72PwpMrAADAAEuMAAAAAQOPyZMrAAAAAAAAAFwBPgI9HJBaLsAAZb8BAAEWkHIuwABRFMAAtXMAwAC1f0FDkIMhFpCUFpCLLqSiwAC1d4FVwAD+oT4HPReQpS7AAGW2HJC8FpCzLqSiwAC1d4YuAAAAAMAA/t7AALV8SZDQHJDULsAAbWzAALVsAQABFpD1FpDpLsAAZbbAALV8oUTAAJ5rAMAAtYE+Aj0ckQcuwABltwEAASfAAG1vAMAAtYNCkSoAP0aRP5FvkVQAAACBVGADwACeaQAWkWgWkVwuwABltsAAtXyhRMAAnms+Aj0ckYoWkXkuwABQ6cAAtXZWAQABFpGTgJGOwF4tZaluwACefQCU7j0ckaiAkaPAXi1lhFIBAAEuAMAAnotDkcQhFpHbFpHMLsAAbWnAALV4gVXAAP6hPgE9HJHuLsAAbXABAAEckhMWkgQuwABtacAAtXiGLgAAAADAAP7eAMAAtZVDkjAWkkUWkjcuwABtasAAtXmDt8AA/qI+AT0cklsuwABtcQEAARySfhaScC7AAG1qwAC1eYYuAAAAAMAA/t4AwAC1lkOSmyEWkrEWkqMuwABta8AAtXqBVcAA/qE+AT0cksQuwABtcgEAARyS5xaS2S7AAG1rwAC1eoYuAAAAAMAA/t4AwAC1l0mTBCEWkwkuwABRDsAAtX1CkxwAPwbAALWDgfGTMJM1k8oAAMAAZbcAAAABA5M8k8oAAAABAQGTRAAAAKXEYAPAAQACAABcAT4CSZNSapNcYAPAAPxVAD4BPR6TbcAA9/4BAAEkk6AEJ8AAbXMWk4QuwABRFMAAtXMnwABtdICTmcBeLswAPz0Xk60uwABRDirAALV9BsAAtYSB8ZPPk+CUPgAAwABk6gFqk9BgA8AA/2gCAAABA5P5lD4AAAABAQGUDwAAAIFUYAPAAKCMAABcAT4BPRyUGy7AAGW3AQABJ8AAbXUAwAC1gwbAALWFgfGUQ5RUlcoAAMAAZO0BapREYAPAAP9oAgAAAQOUbZXKAAAAAQEBlIMAAACBVGADwACgmAAAXAE+AT0clacuwABltwEAASfAAG12AMAAtYMGwAC1hoHxlc+V4JY+AADAAGSzAWqV0GADwAD/aAIAAAEDlfqWPgAAAAEBAZYRAAAAgVRgA8AAn8wAAFwBPgE9HJYdLsAAZb8BAAGAljXAXjAAAMAAtX8GwAC1h4HxlkOWVJa6AADAAGTiAWqWRGADwAD/aAIAAAEDlnKWugAAAAEBAZaNAAAAgVRgA8AAoFsAAFwBPgE9HJaZLsAAZb8BAAGAlrHAXjBXAMAAtX8GwAC1iIHxlr+W0JdNAADAAGTAAWqWwGADwAD/aAIAAAEDlvaXTQAAAAEBAZcgAAAAgVRgA8AAn/0AAFwBPgE9HJcsLsAAZb8BAAGAl0TAXjCuAMAAtX8GwAC1iYHxl1KXY5fNAADAAGTHAWqXU2ADwAD/aAIAAAEDl4OXzQAAAAEBAZegAAAAgVRgA8AAoB8AAFwBPgE9HJesLsAAZb8BAAGAl8TAXjEFAMAAtX8GwAC1ioHxl9KX45iMAADAAGTYAWqX02ADwAD/aAIAAAEDl/+YjAAAAAEBAZgYAAAAgVRgA8AAoEwAAFwBPgE9HJhrLsAAZbcBAAEnwABtdwDAALWDBsAAtYuB8ZiRmKKZCAAAwABk2wFqmJJgA8AA/2gCAAABA5jAmQgAAAABAQGY2wAAAIFUYAPAAKBSAABcAT4BPRyY5y7AAGW/AQABgJj/wF4xsQDAALV/BsAAtYyB8ZkNmR6ZcwAAwABkvQFqmQ5gA8AA/2gCAAABA5k2mXMAAAABAQGZSwAAAIFUYAPAAJ/tAABcAT4BPRyZZhaZVy7AAG1pwAC1eFYBAAGAmWrAXjIIAMAA/tAGwAC1jYHxmXiZiZnbAADAAGTEAWqZeWADwAD/aAIAAAEDmaCZ2wAAAAEBAZm0AAAAgVRgA8AAoBIAAFwBPgE9HJnOFpnALsAAbWrAALV5VgEAAYCZ0sBeMmcAwAD+0AbAALWOgfGZ4JnxmkMAAMAAZNEBapnhYAPAAP9oAgAAAQOaCJpDAAAAAQEBmhwAAACBVGADwACgNAAAXAE+AT0cmjYWmiguwABta8AAtXpWAQABgJo6wF4yxgDAAP7QBsAAtY+B8ZpImlmalQAAwABkpwFqmklgA8AA/2gCAAABA5p1mpUAAAABAQGajgAAAIFUYAPAAJ+rAABcAT4ABsAAtZCB8Zqamqua8QAAwABkqgFqmptgA8AA/2gCAAABA5rMmvEAAAABAQGa6gAAAIFUYAPAAJ+7AABcAT4ABsAAtZGB8Zr2mwebSQAAwABkrAFqmvdgA8AA/2gCAAABA5smm0kAAAABAQGbQgAAAIFUYAPAAJ/EAABcAT4ABsAAtZKB8ZtOm1+bmQAAwABk5gFqm09gA8AA/2gCAAABA5t6m5kAAAABAQGbkgAAAIFUYAPAAKBwAABcAT4ABsAAtZOB8Zuem6+cAAAAwABkpAFqm59gA8AA/2gCAAABA5vSnAAAAAABAQGb+QAAAIFUYAPAAJ+eAABcAT4ABsAAtZSB8ZwFnBGdJwAAwABkjQFqnAZgA8AA/2gCAAABA5wznScAAAABAQGcUgAAAIFUYAPAAJ90AABbAT4DTpxrnHIAAMAAZblgA74lARaceYCcdMBeNGDAAFEWwACfdk6cnJylAACpx2ADwACeaQEcnLYWnLAWnKcuq9/AALV0hYXAAHR9wABQhQEAAYGczsBeNHQAwACjKEmc2xyc6IKc38BeNJZIAQABFpzrLsAAZbbAALV8AMAA/3U+AT0cnQAuwABlvwEAAYCdGMBeNGAAwAC1fz8GwAC1lYHxnSydMaABAADAAG1wAAAAAQOdRqABAAAAAQEBnVsAAACDYWADwACf7QAAXAE+Aj0cnXAWnWcuq9/AALV0wABQyAEAAYCdhsBeNS0AwAB0hEmdkRadmoCdlcBeNS3AAFD6wACggj4BPRydrS7AAGW3AQABJ8AAbXgAwAC1gz4BPRyd/Bad8oCd7cBeNS3AAGS4wACgh4P9AQABNJ4EA54En/YAAAABAQGeFQAAAMAAbXlgA8AAnmkAAGADwAD/JQE+AT0cnjAWniqBniXAXjW5oUTAAJ5rg/0BAAE0njgDnjif7AAAAAEBAZ5JAAAApB9gA8AAnmkAAGADwAD/JQE+AUmeWyWeZIKeX8BeNfpdA8AAn4UBWz4CSZ6VIRyepxaenhSemcBeNfoCAV0DwACfhQFbhZfAAJ+LSAEAAYGeqsBeNbkAwAD/dUqesAA/SZ7EHJ7rFp7RFp7ILqvfwAC1dLfhwAB0dYMcAQABFp75FJ70wF41+gIBXQPAAJ+FAVulUsAAn2gAwAD/vz4BPRyfFC7AAGW/AQABFJ8swF41+gIBXQPAAJ+FAVsAwAC1f0mfRiEcn2Aan0vAALVugxwBAAEWn3cWn24Un2nAXjX6AgFdA8AAn4UBW6VSwACfaIC9wABMxgDAAP+/PgE9HJ+OLsAAZbcBAAEkn8YDJ8AAbXoWn78Wn7YUn7HAXjX6AgFdA8AAn4UBW6VSwACfaIC9wABMxieZ8wDAALWDPz8AwAD+jQDAAP6NBsAAtZaB8aAGoAuirAAAwABtcQAAAAEDoB+irAAAAAEBAaAzAAAAl3lgA8AAoBIAAFwBPgI9HKBHFqA+LqvfwAC1dMAAUMkBAAGAoFzAXjdrAMAAdIVJoGYWoG6AoGrAXjdrwABQ+sAAoII+AT0coIEuwABltwEAASfAAG17AMAAtYM+AT0coM4WoMSAoMDAXjdrwABkuMAAoIeD/QEAATSg1gOg1qKhAAAAAQEBoOcAAADAAG15YAPAAJ5pAABgA8AA/yUBPgE9HKECFqD8gaD3wF4396FEwACea4P9AQABNKEKA6EKopcAAAABAQGhGwAAAKQfYAPAAJ5pAABgA8AA/yUBPgFJoS0loTaCoTHAXjg4XQPAAJ+FAVs+AkmhZyEcoXkWoXAUoWvAXjg4AgFdA8AAn4UBW4WXwACfi0gBAAGBoXzAXjf3AMAA/3VKoYIAP0mhlhahqBahnxShmsBeODgCAV0DwACfhQFbpVLAAJ9ot/LAAEzMPgE9HKHBLsAAZb8BAAEUodnAXjg4AgFdA8AAn4UBWwDAALV/SaHzIRyiDBqh+MAAtW+DHAEAARaiIxaiGhSiFcBeODgCAV0DwACfhQFbpVLAAJ9ogL3AAEzGAMAA/78+AT0cojouwABltwEAASSicQMnwABtfBaiahaiYRSiXMBeODgCAV0DwACfhQFbpVLAAJ9ogL3AAEzGJ5nzAMAAtYM/PwDAAP6NAMAA/o0GwAC1l4HxorGitqVXAADAAG1yAAAAAQOiyqVXAAAAAQEBot4AAACAq2ADwACgNAAAXAE+Aj0covIWoukuq9/AALV0wABQygEAAYCjB8BeOZIAwAB0hkmjERajGYCjFcBeOZLAAFD6wACggj4BPRyjLC7AAGW3AQABJ8AAbX0AwAC1gz4BPRyjeRajb4Cja8BeOZLAAGS4wACgh4P9AQABNKOBA6OBpUwAAAABAQGjkgAAAMAAbXlgA8AAnmkAAGADwAD/JQE+AT0co60Wo6eBo6LAXjoeoUTAAJ5rg/0BAAE0o7UDo7WlQgAAAAEBAaPGAAAApB9gA8AAnmkAAGADwAD/JQE+AUmj2CWj4YKj3MBeOl9dA8AAn4UBWz4CSaQSIRykJBakGxSkFsBeOl8CAV0DwACfhQFbhZfAAJ+LSAEAAYGkJ8BeOh4AwAD/dUqkLQA/SaRBFqRTFqRKFKRFwF46XwIBXQPAAJ+FAVulUsAAn2i38sAATMw+AT0cpGwuwABlvwEAARSkhMBeOl8CAV0DwACfhQFbAMAAtX9JpJ4hHKS3GqSjwAC1cIMcAQABFqTOFqTFFKTAwF46XwIBXQPAAJ+FAVulUsAAn2iAvcAATMYAwAD/vz4BPRyk5S7AAGW3AQABJKUcAyfAAG1+FqUVFqUMFKUHwF46XwIBXQPAAJ+FAVulUsAAn2iAvcAATMYnmfMAwAC1gz8/AMAA/o0AwAD+jQbAALWYgfGmCKYNqAwAAMAAbX8AAAABA6YgqAwAAAABAQGmQAAAAIFUXQPAAJ+FAVsAAGADwAD8VQE+BkmmTBymXxamVYCmUMBeO7lbwACfakgBAAErAMAAoihKpmgBKj9JpnoWppMWpo0WpoOApn7AXju5W8AAn2qFdcAAoiGDt8AA/xdKpp8BKj9OprimxQAAvDpgA8ABAAIBFqbVFqbMgKbHwF47uaVSwACfaIC9wABMxk6m9ab/AABbXQPAAP6/AWADwACeaQEWpxAWpwaApwHAXju5W8AAn2qFq8AAoiBJpyAcpzUWpy6CpyTAXjxMYcAA/u9IAQABlADAAP8/PgFKp0MBIhynWIGnS8BePCNIAQABJ1YAwAEAEQAcp3AWp2QuwABltsAAtXxIAQABHKd8gqdzwF48TEsBAAGTAMAA/s4AwAD/dUmnjRynohanm4KnkcBePExhwAD+70gBAAGVAMAA/z8+AUqnsAEiHKfFgae4wF48I0gBAAEnnzoAwAEAEQAcp+AWp9QuwABltsAAtXxIAQABHKfsgqfjwF48TEsBAAGUAMAA/s4AwAD/dT9Kp/wBKgbAALWZgfGoEagWqU0AAMAAbYAAAAABA6goqU0AAAACAgKoSAAAAIFUXQPAAJ+FAVsAqFIAAAAnYAPAAP4bAABgA8AA/FUBPgVOqGaocwAAvDpgA8ABAAIBFqiDFqh6gKh1wF49cqVSwACfaIC9wABMxkmojSEcqJ6CqJHAXj2aSAEAASeAvwDAAQARSqioASo/QByo1xao0BaoxoCowcBePXJbwACfamHAAKIjSAEAAZUAwAD/P6jBqNsATqj4qQIAAFtdA8AA/r8BYAPAAJ5pARapExapCYCpBMBePXJbwACfaoWrwACiIEqpIwEcqTYWqSouwABltsAAtXxIAQABHKlCg6k5wF4+DUsBAAGBqUPAXj2CAMAA/s4AwAD/dQbAALWagfGqAaoGqmUAAMAAbYEAAAABA6oTqmUAAAABAQGqMwAAAIFUXQPAAJ+FAVsAAGADwAD8VQE+AUqqPwEcqkYuwABtgAIAAoCqWcBePpKTAMAAtZkGwAC1m4Hxqz+rRKulAADAAG2CAAAAAQOrU6ulAAAAAQEBq3MAAACBVF0DwACfhQFbAABgA8AA/FUBPgFKq38BHKuGLsAAbYACAAKAq5nAXj7qlADAALWZBsAAtZyB8auqq6+s3AAAwABtgwAAAAEDq7+s3AAAAAEBAavFAAAAqyhhAwFgA8AAnzJgA8AA/FUAAFwBPgFBRqvyrBar+wAAAKQfYAPAAJ5pABasDxasAy7AAGW2wAC1fKFEwACeaz4BSaweJawngawiwF4/ZGADwACfMj4BSaxOHKxbgKxSwF4/QiABAAEUrFzAXj9kAQFgA8AAnzIAAD4CPRysby7AAGW3AQABJ8AAbYQAwAC1g0KsuwA/PwbAALWdgfGs4azyuy0AAMAAZKABaqziYAPAAP9oAgAAAQOtFbstAAAAAQEBrTwAAACBVF0DwACfhQFbAABcAT4JT61IrU0AAAHAAG2FYQMBYAO/OlwAA61cr1AAAAABAQGtawAAAK1qYAO/OgAAXAE+Ak6tgK2PAAC2hGADwAD/aAEcrbgWraQWrZsuq9/AALV0scbAAHR6tpYBAAGCrcrAXkA/AL+mSa3XIRyt6oOt28BeQFFIAQABKwDAAP91PgJOrhGuFgAAg2FgA8AAn+0BHK5BFq4zFq4tFq4kLqvfwAC1dIWFwAB0fbfmwACi30sBAAGDrkLAXkBRAMAA/wU9HK5qFq5bLsAAbWnAALV4VgEAAYSubsBeQKAAwAD+0D4BPRyvGi7AAGW3AQABJ8AAbYYAwAC1g0+vV69cAAABwABth2EDAWADvzpcAAOvarD5AAAAAQEBr3kAAACtamADvzoAAFwBPgJOr46vnQAAtoRgA8AA/2gBHK/GFq+yFq+pLqvfwAC1dLHGwAB0eraWAQABg6/YwF5BNgC/pkmv5SEcr/iEr+nAXkFISAEAASsAwAD/dT4CTrAesCIAAICrYAPAAKA0ASawHgEcsEAWsDMWsC0WsCQuq9/AALV0hYXAAHR9wABRC8AAouFLAQABhLBBwF5BSADAAP8FYAPAAKA0PRywaBawWi7AAG1rwAC1elYBAAGFsGzAXkGXAMAA/tA+AT0csMkuwABltwEAASfAAG2IAMAAtYNPsQCxBQAAAcAAbYlhAwFgA786XAADsRGxmgAAAAEBAbEgAAAArWpgA786AABcAT4BPRyxdy7AAGW3AQABJ8AAbXcAwAC1g0mx5Byx6C7AAG2CAQABgLH4wF5ACgDAALWbPgJOsguyGAAAhZpgA786ARayKBayH4CyGsBeQAqFl8AAn4uClMAAnm9JsjQcslUWskEWsjguq9/AALV0scbAAHR6toEBAAGEsmHAXkJ9AL+VPgE9HLKJgbJ6wF5AIiABAAGEsorAXkJ9AABJsqYcsscWsrMWsqouq9/AALV0scbAAHR6rPgBAAGEss3AXkJ9AL+cPgE9HLL0grLmwF5BGSABAAGEsvXAXkJ9AAA+Aj0ctjsuwABtgwEAARa2TC7AAG2KwAC1ngDAALWcPRy2dC7AAG2DAQABFraFLsAAbYvAALWfAMAAtZw/SbbVHLbZLsAAbYEBAAGAtufAXkAKAMAAtZo+Ak62+rcHAACFmmADvzoBFrcXFrcOgLcJwF5ACoWXwACfi4KUwACeb0m3Ixy3RBa3MBa3Jy6r38AAtXSxxsAAdHqs+AEAAYS3SsBeQ4EAv5w+AT0ct2+Dt2PAXkIcIAEAAYS3cMBeQ4EAAD4CPRy3li7AAG2DAQABFrenLsAAbYrAALWeAMAAtZw9HLfPLsAAbYMBAAEWt+AuwABti8AAtZ8AwAC1nD9JuBIcuBYuwABtfwEAAYC4KsBeQAoAwAC1mD4CTrg9uEoAAIWaYAO/OgEWuFoWuFGAuEzAXkAKhZfAAJ+LgpTAAJ5vSbhmHLiHFrhzFrhqLqvfwAC1dLHGwAB0eraBAQABhLiTwF5EQwC/lT4BPRy4u4G4rMBeQCIgAQABhLi8wF5EQwAAPgE9HLkOLsAAbYMBAAEWuR8uwABtisAAtZ4AwAC1nD9JuVIiIhy5W4C5VsBeQArAAGSTAQABFrl9LqvfwAC1dADAAJ+QACEcuaEWuZeAuZLAXkAKW8AAn2pIAQABKwDAAKIoABy5wxa5uYC5tMBeQApbwACfaoMcAQABFrnMLsAAZbbAALV8AMAAoiw+AT0cueIuwABltwEAASfAAG2MAMAAtYM/Troquj4AAMAAbY1dA8AA/n0BYAPAAJ5pARy6XRa6TYC6SMBeQArAAFEjwACfmoCrAQFgA8AAnmkBNLphA7phursAAAABAQG6bwAAAKSGYAO+JQAAYAPAAJ7FAT4BSrp/ARy6lRa6jxa6hi6r38AAtXSFhcAAdH3AAFCFAQABhLqtwF5FlwDAAKMoAMAA/ohJusIcutqEusbAXkVRgdYBAAE0ut4Dut66+wAAAAEBAbrfAAAApB9gA8AAnmkAAGADwAD8VQFKuugBHLrthbrowF5F/0gBAAEWuvAuwABltsAAtXwAwAD/dQDAAP6SPgE9HLsGLsAAZb8BAAGAux7AXkAKAMAAtX8/BsAAtZ6B8bvju+i9YgAAwABtigAAAAEDvAW9YgAAAAEBAbwfAAAAwABtjmADwACfMgAAYAPAAPxVAT4ESbw0IRa8R4C8OcBeRnrAAE2LwACfP0q8WwEqP0m8bSEcvJUWvIYWvH+AvHHAXkZ6lpzAAJ89hRm+M0gBAAEWvMQWvLUWvKkWvKAuq9/AALV0pUDAAHR4tFnAAE6Nsli52QDAAP91PgFKvNoBKj9OvPm8/gAAgL1gA8ABAAIBFr0VFr0OgL0AwF5GepacwACfPYC9vgFKvR8BIiIcvSyBvSfAXkcDSAEAASeAvwDAAQARARy9P4G9OsBeRwNIAQABJ1YAwAEAEQEcvVKBvU3AXkcDSAEAASefOgDAAQARBsAAtZ+B8b4ovi2/gAAAwABtiwAAAAEDvkm/gAAAAAEBAb5jAAAAwABtjmADwACfMgAAYAPAAPxVAT4ESb54IRa+i4C+fcBeR5TAAE2LwACfP0q+nwEqP0m+sSEcvtkWvsoWvsOAvrXAXkeUlpzAAJ89hRm+M0gBAAEWvwgWvvkWvu0WvuQuq9/AALV0pUDAAHR4tFnAAE6Nsje5uQDAAP91PgFKvyEBKj9Ov0C/RQAAgL1gA8ABAAIBFr9cFr9VgL9HwF5HlJacwACfPYC9vgFKv2YBHL9zgb9uwF5IHUgBAAEngL8AwAEAEQbAALWggfG/hb+KwABB+wAAtbMAAAABA7+TwABB+wAAAAEBAb+hAAAAlntgA74lAABgA8AA/FUBPgRJv7AhFr+9gL+1wF5IgbPavi1Kv8kBKj9JwABBRSIWwABBUYDAAEFJwF5IgYUcvioAHMAAQXIWwABBbYDAAEFlwF5IgYC9vgFIAQABasAAQYFgA8ABAALAAPFmAMABABE+AUrAAEGPASk/TsAAQbLAAEG2AACaJmADvhMBFsAAQcCAwABBuMBeSIGFGb4zSsAAQdQBIiEcwABB34HAAEHbwF5JAkgBAAErAMAA/3UAFsAAQe6BwABB6sBeSQK1s74WBsAAtaGB8cAAQgDAAEIRwABDyAAAwABkbwFqwABCAWADwAD/aAIAAAEDwABCK8AAQ8gAAAABAQHAAEJCAAAAgVRgA8AAnsUAAFwBPgRJwABCThbAAEJXgMAAQlLAXkmQwABkasAAntA+AT0cwABCbS7AAGW3AQABJ8AAbY8AwAC1gz9JwABCpRzAAEKpLrWzAQABFsAAQriAwABCs8BeSZCCasAAns0AwAC1oD4BPRzAAELJLsAAZbcBAAEnwABtkADAALWDP0nAAEL3IhbAAEMHFsAAQwCAwABC+8BeSZCCasAAns2Hm74sACEcwABDJBbAAEMbLqvfwAC1dMAAUOUBAAEmwABDTgEWwABDToDAAENJwF5JkIJqwACezWADvjcAwAB0oj4BPRzAAENfLsAAZbcBAAEnwABtkQDAALWDPz0cwABDpy7AAGW/AQABgMAAQ7/AXkmQAMAAtX8GwAC1ooHxwABDzcAAQ97AAEYwAADAAGSAAWrAAEPOYAPAAP9oAgAAAQPAAEP7wABGMAAAAAEBAcAARBUAAACBVGADwACfMgAAXAE+BEnAAEQhHMAAREUWwABEOhbAAEQuFsAARCUuq9/AALV0pUDAAHR4uM/AAE6JwABNKgEAARbAAERZgMAARFTAXkrulpzAAJ89AMAAbC0+AT0cwABEai7AAGW3AQABJ8AAbZIAwAC1gz9JwABEmiEcwABEsRbAAESfLqvfwAC1dMAAUOYBAAEWwABE6IDAAETjwF5K7pacwACfPQDAAHSjPgE9HMAARPkuwABltwEAASfAAG2RAMAAtYM/ScAARUEiHMAARUUuwABtigEAAYDAAEVjwF5K7gDAALWeARzAAEV0LsAAbYsBAAGAwABFkcBeSu4AwAC1nz4BSsAARf0APz0cwABGDy7AAGW/AQABgMAARifAXkruAMAAtX8AAF4qhABeKxsAXiyVAF4uqgBeLyoAXi9/AF4v1ABeMCsAXjCCAF4w2QBeMTAAXjGFAF4x3ABeMjsAXjKaAF4y+QBeMzgAXjN3AF4ztgBeM/UAXjQ0AF41CwBeN0kAXjlwAF47lwBePVAAXj5wAF4+yABePyAAXj/eAF5GWABeR3IAXkhdAF5JWABeSrYAXkweAAAAIwADBMAAtW6B8YJehFwEwABtkwBdA8AA/7MBYAPAAQACAR6CecAAwyMBAWADwAEAAgFqgopdA8AA/r8BYAPAAQACwAF4twAEwAC1b4HxhGuFwgTAAG2UAF0DwAD/swFgA8ABAAIBHoSFwADDIwEBYAPAAQACAWqEll0DwAD+vwFgA8ABAALAAXkrAATAALVwgfGF0YclBMAAbZUAXQPAAP+zAWADwAEAAgEehevAAMMjAQFgA8ABAAIBaoX8XQPAAP6/AWADwAEAAsABeXcAAAGB8QBeTYIAXih6AF5MswAAAAEAXk2CAAAAAAACBsAAtaXAAG2WgfIAAAiBXQAAwABjxwAAgX4AAMAAZVu1NgCBnwAAwABlWwABAQGChYG/AADAAEymAAEBAaUHgfEAAMAATPEAAIIiAADAAHFGAAEBAcAAT0WCZAAAwABlkAAAgnkAAMAAbBEAAAAAAAAAAAIGwAC1p4HygpWCpYbnAAHAAG2XAAAAAQOCvIbnAAAAAwMDgs8AAACldGADwABM+ACC7QAAALLgYAPAAGwSAIMEAAAAsG5gA8AAZZMAAGADwACV+QE+BEmDDyEWgySBgxTAXk5DwABNJcAAbCNKgzUBKz9Og1qDZQAAhi1dA8AA/r8BYAPAAJX5ATGDeGADwACV+QA9HIOLgIN+wF5ONbxcAQABNIOlA4Olhr4AAAACAgKDrQAAAIC9YAPAAQACAIPWAAAAvIFdA8AA/vECYAPAAEy4YAPAAHFHAABgA8AA/yUBPgE9HIPxhYPnwF5O0oP9AQABNIP5A4P5hrgAAAACAgKEAwAAAKVSYAPAAEy4AIQhAAAAhO5gA8AAcUcAAGADwAD/JQE+AUmENhaEQ4aEOsBeTxW37cAATMs+BkmEjhyErhaEm4aEksBeTxW8N8AATMKAlwEAAZMAwAD/S0qEswA/ToTHhNUAALw2YAPAAP4bARaE4IaE18BeTxW8NsAATMFOhP6FFgAAwABtmGADwAEAAgEnwABtmU6FcYV8AACa6l0DwAD+vwFgA8ABAAIBHoWCwAD+xwIBYAPAAQACAhSFpcBeT3cIADSFtAOFtIXVAAAAAQEBhbUAAABiYAPAAP4bAABgA8ABAAIBSoW7ARyF0hSFu8BeT5cJAEsBAAEUhdPAXk/rCgAAwAEADwBOheyF8QAAgL1gA8AAlxoBHIX5goXzwF5OUbCGAQABhoYIwF5PFQDAAGYGPRyGJoOGG8BeToZWAQABHIYtaoYqYAPAAJl+wAEjIYVoAgACJ8AAbZoxholgA8AA/2gDFIaKwF5QJAsAFIaQwF5PrgoAFIacwF5PrgoAAMAAmYEAwAD+0D8AwAD/EADAAE0ASobDAR+GzsAAlgkBAAGDhtrAXk6GAAbAALWogfKG6ob3iKIAAcAAbZsAAAABA4cKiKIAAAAAAAAAYAPAAGRZAT4BSofBAR+HzMAAZG4GAAZqh+ZgA8AAZETAASB0aof7XQPAAP6/AWADwABjy8AA+10eiBnAAP7EAgFgA8AAY8sCNxBqiDlgA8AAZETAASB0AGqIT10DwAD+vwFgA8ABAAKDOWqIZ10DwAD+vwFgA8AAY8vAAPtdaoiBXQPAAP6/AWADwABkKMABI9gAAYHyAF5RfQBeThAAAAAAAF5OEwBeUMcAXlF9AAAAAgACBsAAtanAAG2cgfMAAAeBAAAAwACB1wABAQHAAFRngToAAMAATuUAAIFiAAC9/gABAQK1srIYgaUAAMAAaM4AAIHIAADAAE4EAAEBAqUJpQqCGQAAwABp7gABAQHAAEx5gkUAAIHgAAEBAZd0AAAAAQLAALWqgfOCboJ0lokDwABpnAAAAWABwABOHgABYAHAAIHYCwTAALWsgfOC84L5CYJqAWqC1WADwAD/aAJgA74lAATAALWugfODDoMXGMAAU7zAALWpAF0DwABp7wFgA8AAaM8BKwTAALWvgfODMYM9GMAAWhXAALWpAF0DlOIBYAPAAGjxASsEwAC1sIHzg1eDYxjAAFoXwAC1qQBdA5TiAWADwABo/QErBMAAtbGB84N+g4sYwABaFsAAtakAXQOU4gFgA8AAaQkBKwTAALWygfODnoOvGMAAbZ3AALWpAF0DlOIBYAPAAQACASsEwAC1s4Hzg86D3xjAAG2ewAC1qQBdA5TiAWADwABPDQErBMAAtbSB84Pzg/4YwABJQsAAtakAXQOU4gFbASsEwAC1tYHzhBaEIhjAAG2fwAC1qQBdA5TiAWADvhMBKwTAALW2gfOEOoRKGMAAWh7AALWpAF0DwAD/swFgA8AAaRUBKwTAALW3gfOEaIR+GLAhwAC1qQBdA8AA/7MBYAPAAGkiASsBBcAAtdGB84SDhIOErAAAAAOEn4SsAAAAAQEBhKUAAASCamADviUAAGADwAC1qgE/AggBwAC1rIAAwF5TvQkBhIPAAE4yAAAAABYGwAC1uYHzhLGExoTWAQCBVQFqhLJgA8AA/2gCAAABA4TOhNYAAAAAAAAAYAPAAPxVAUqE0QEqBsAAtcWB84TbhOCFjgAAwABZuAAAAAEDhPKFjgAAAAEBAYUBAAAAwABUcGADwABo8QAAXAE+A0AhHIUrgIUdwF5URUgBAAErAMAAaPmFHYUyAD0jHIVGFoU5LsAAWhXAALWpwAC1r0gBAAErAMAA/3UXhTkuwABaFcAAtakfhU6VAgABYAPAAGjxAADAALWvKwFdA5TiAWADwABo8T0chXgWhWsuwABaFcAAtanAALWvVgEAAYCFfMBeVEUAlO4GwAC1uoHzhZOFu4YVAQDAAFRxAWqFlGADwAD/aAIAAAEDhceGFQAAAAAAAABdA8AA/n0BYAPAAGjxAT4BSoXNASMhHIXhFoXULsAAWhXAALWpwAC1r0gBAAErAMAA/3UWhesuwABaFcAAtanAALWvaoX6XQPAAP6/AWADwABo8cABYCIBXQPAAM7UAWADwABo8QbAALXGgfOGGoYfhs0AAMAAWbcAAAABA4Yxhs0AAAABAQGGQAAAAMAAVHJgA8AAaP0AAFwBPgNAIRyGaoCGXMBeVZZIAQABKwDAAGkFhlyGcQA9IxyGhRaGeC7AAFoXwAC1qcAAtbBIAQABKwDAAP91F4Z4LsAAWhfAALWpH4aNlQIAAWADwABo/QAAwAC1sCsBXQOU4gFgA8AAaP09HIa3FoaqLsAAWhfAALWpwAC1sFYBAAGAhrvAXlWWAJTuBsAAtbuB84bShvqHNgEAh+ABaobTYAPAAP9oAgAAAQOHBoc2AAAAAAAAAF0DwAD+fQFgA8AAaP0BSocPATUAAAABAF0DlOIBYAPAAGj9ARaHDy7AAFoXwAC1qcAAtbAjHIccgADAXlZxSAEAASsAAGqHH10DwAD+vwFgA8AAaP3AAWAqgADAXlZxAV0DwADO1AFgA8AAaP0GwAC1x4HzhzuHQIf2AADAAFm2AAAAAQOHU4f2AAAAAQEBh2MAAADAAFRzYAPAAGkJAABcAT4DQCEch4+Ah4DAXlbtSAEAASsAwABpEYeAh5YAPSMch6sWh50uwABaFsAAtanAALWxSAEAASsAwAD/dReHnS7AAFoWwAC1qR+Hs5UCAAFgA8AAaQkAAMAAtbErAV0DlOIBYAPAAGkJPRyH3xaH0S7AAFoWwAC1qcAAtbFWAQABgIfjwF5W7QCU7gbAALW8gfOH+4gkiIIBAMAAVHQBaof8YAPAAP9oAgAAAQOIMYiCAAAAAAAAAF0DwAD+fQFgA8AAaQkBPgFKiDcBIyEciEwWiD4uwABaFsAAtanAALWxSAEAASsAwAD/dRaIVi7AAFoWwAC1qcAAtbFqiGZdA8AA/r8BYAPAAGkJwAFgMgFdA8AAztQBYAPAAGkJBsAAtciB84iHiIyJSwAAwABUdwAAAAEDiKKJSwAAAAEBAYiyAAAAwABUdWADwABpFQAAXAE+A0AhHIjegIjPwF5YPkgBAAErAMAAaR6Iz4jlAD0jHIj9FojsLsAAWh7AALWpwAC1tkgBAAErAMAA/3UXiOwuwABaHsAAtakfiQWVAgABYAPAAGkVAADAALW2KwFdA8AA/7MBYAPAAGkVPRyJNBaJIy7AAFoewAC1qcAAtbZWAQABgIk4wF5YPgDAAP/ABsAAtb2B84lQiXmJ8AEAwABUdgFqiVFgA8AA/2gCAAABA4mJifAAAAAAAAAAXQPAAP59AWADwABpFQE+AUqJjwEjIRyJpxaJli7AAFoewAC1qcAAtbZIAQABKwDAAP91Fom5LsAAWh7AALWpwAC1tmqJ1F0DwAD+vwFgA8AAaRXAAWBCAV0DwADO1AFgA8AAaRUGwAC1yYHzifWJ+op0AADAAGmkAAAAAQOKEYp0AAAAAQEBihkAAACAvWADwAEAAgAAXAE+Aj0jHIo3FoolLsAAbZ3AALWpwAC1skgBAAErAMAA/3UXiiUuwABtncAAtakfij+VAgABYAPAAQACAADAALWyKwFdA5TiAWADwAEAAj0cimcWilUuwABtncAAtanAALWyVgEAAYCKa8BeWZMAlO4GwAC1voHzinmKmor8AQDAAFR4AWqKemADwAD/aAIAAAEDiquK/AAAAAAAAABdA8AA/n0BYAPAAQACAT4BSoqxASMhHIrKFoq4LsAAbZ3AALWpwAC1skgBAAErAMAA/3UWitQuwABtncAAtanAALWyaoroXQPAAP6/AWADwAEAAoM5AV0DwADO1AFgA8ABAAIGwAC1yoHziwGLBotxAADAAGmhAAAAAQOLFYtxAAAAAQEBix4AAACHxWADwABozwAAXAE+Aj0jHIs3FostLsAAU7zAALWpwAC1rkgBAAErAMAAagwXiy0uwABTvMAAtakfiz/AAGogAAFgA8AAaM8AAMAAta4rAV0DwABp7wFgA8AAaM89HIthFotXLsAAU7zAALWpwAC1rlYBAAGAi2XAXlrFAMAAagAGwAC1v4Hzi3aLmIwMAQDAAFO9AWqLd2ADwAD/aAIAAAEDi6GMDAAAAAAAAABdA8AA/n0BYAPAAGjPAT4BSounASMhHIu4FouuLsAAU7zAALWpwAC1rkgBAAErAMAAagwci9QWi8ouwABTvMAAtanAALWug9EBAAFqi+VdA8AA/r8BYAPAAGjPwAE/8QDAAGoJaov3XQPAAP6/AWADwABoz8ABYBoBXQPAAP59AWADwABozwbAALXLgfOMEYwWjLAAAMAAaaMAAAABA4wtjLAAAAABAQGMQQAAAIYdYAPAAE8NAABcAT4CPSMcjGMWjFEuwABtnsAAtanAALWzSAEAASsAwAD/dReMUS7AAG2ewAC1qR+Ma5UCAAFgA8AATw0AAMAAtbMrAV0DlOIBYAPAAE8NPRyMnxaMjS7AAG2ewAC1qcAAtbNWAQABgIyjwF5cIACU7gbAALXAgfOMtYzijWABAMAAVHkBaoy2YAPAAP9oAgAAAQOM841gAAAAAAAAAF0DwAD+fQFgA8AATw0BPgFKjPkBIyEcjRIWjQAuwABtnsAAtanAALWzSAEAASsAwAD/dRaNJC7AAG2ewAC1qcAAtbNqjUBdA8AA/r8BYAPAAE8NwAFgOgFdA8AAztQBYAPAAE8NBsAAtcyB841ljWqOAQAAwABpogAAAAEDjXyOAQAAAAEBAY2FAAAAuM9bAABcAT4DQCEcjamAjZ7AXl1USAEAASsAwAD/dY2ejbAAPSMcjcMWjbcuwABJQsAAtanAALW0SAEAASsAwAD/dReNty7AAElCwAC1qR+Ny5UCAAFbAADAALW0KwFdA5TiAVs9HI3uFo3iLsAASULAALWpwAC1tFYBAAGAjfLAXl1UAJTuBsAAtcGB844GjiiOeQEAuM8Bao4HYAPAAP9oAgAAAQOOM455AAAAAAAAAF0DwAD+fQFbAT4BSo45ASMhHI5MFo5ALsAASULAALWpwAC1tEgBAAErAMAA/3UWjlYuwABJQsAAtanAALW0ao5kXQPAAP6/AVuCZgFdA8AAztQBWwbAALXNgfOOfo6DjwEAAMAAbaAAAAABA46UjwEAAAABAQGOoQAAAMAAbaFgA74TAABcAT4CPSMcjr8WjrIuwABtn8AAtanAALW1SAEAASsAwAD/dReOsi7AAG2fwAC1qR+Ox5UCAAFgA74TAADAALW1KwFdA5TiAWADvhM9HI7vFo7iLsAAbZ/AALWpwAC1tVYBAAGAjvPAXl6BAJTuBsAAtcKB848GjyyPbgEAwABUfAFqjwdgA8AA/2gCAAABA484j24AAAAAAAAAXQPAAP59AWADvhMBPgFKjz4BNQAAAAEAXQOU4gFgA74TARaPRS7AAG2fwAC1qcAAtbUjHI9SgADAXl89SAEAASsAAGqPVV0DwAD+vwFgA74TwAEAh4AAwF5fPQFdA8AAztQBYAO+EwbAALXOgfOPc494kCUAALBTAAAAAQOPjZAlAAAAAQEBj6MAAACwNmADwABpIgAAXAE+Aj0jHI/PFo+4LrAhwAC1qcAAtbdIAQABKwDAAP91F4+4LrAhwAC1qR6P18AAwyEAAWADwABpIgAAwAC1tysBXQPAAP+zAWADwABpIj0ckA8Wj/gusCHAALWpwAC1t1YBAAGAkBPAXl+xAMAA/8AGwAC1w4HzkCqQWZC4AQCwFwFqkCtgA8AA/2gCAAABA5BvkLgAAAAAAAAAXQPAAP59AWADwABpIgE+AUqQdQE1AAAAAQBdA8AA/7MBYAPAAGkiARaQfC6wIcAAtanAALW3IxyQk4AAwF5gcUgBAAErAABqkJZdA8AA/r8BYAPAAGkiwADoD4AAwF5gcQFdA8AAztQBYAPAAGkiBsAAtc+B85C9kNCWhwAAIwFqkL5gA8AA/2gCAAABA5DYlocAAAAAAAAAYAPAAQACAT4MTpDukPEAAIPpYAPAAQBMAR+Q98ABAGsAAAAAPRyRDoCRC8BeYP+CjgEAASSROwMnwABtohaRMy6CasAAtawngyYAwAEAYD0ekU7AAE4TAgACgJFWwF5g/y4ASZFlIRyRcxaRaS7AAFO8wAC1qcAAta5IAQABKwDAAGoMPgI9HJGHgJGEwF5g/4KOAQABJ8AAbaMAwAEAYEaRpJHgkbEAAACHxWADwABozwAckcYWkbwuwABTvMAAtanAALWug9EBAAFqkdddA8AA/r8BYAPAAGjPwAE/8QDAAGoJPgE9HJHtgJHqwF5g/4KOAQABJJIBAiewS4GR+cBeYZoAwAEAYD9JkhYhHJInFpIaLsAAWhXAALWpwAC1r0gBAAErAMAA/3U+Aj0ckjuAkjjAXmD/go4BAAEnwABtpADAAQBgRpJckoSSbwAAALAxYAPAAGjxABaSdi7AAFoVwAC1qcAAta8+AT0ckpGAko7AXmD/go4BAAEkkqECJ7BLgZKdwF5iQQDAAQBgP0mStiEckscWkrouwABaF8AAtanAALWwSAEAASsAwAD/dT4CPRyS24CS2MBeYP+CjgEAASfAAG2lAMABAGBGkvyTJJMPAAAAsDFgA8AAaP0AFpMWLsAAWhfAALWpwAC1sD4BPRyTMYCTLsBeYP+CjgEAASSTQQInsEuBkz3AXmLHAMABAGA/SZNWIRyTaBaTWi7AAFoWwAC1qcAAtbFIAQABKwDAAP91PgI9HJN8gJN5wF5g/4KOAQABJ8AAbaYAwAEAYEaTnpPIk7IAAACwMWADwABpCQAWk7kuwABaFsAAtanAALWxPgE9HJPVgJPSwF5g/4KOAQABJJPlAiewS4GT4cBeY00AwAEAYD9Jk/ohHJQQFpP+LsAAbZ7AALWpwAC1s0gBAAErAMAA/3U+Aj0clCSAlCHAXmD/go4BAAEnwABtpwDAAQBgRpRHlH6UXwAAAIYdYAPAAE8NABaUay7AAG2ewAC1qcAAtbM+AT0clIuAlIjAXmD/go4BAAEklK8CJ7BLHJShgZSYwF5j06c1AAAAAMAATxwAwAEAYD9JlMQhHJTaFpTILsAAbZ3AALWpwAC1skgBAAErAMAA/3U+AT0clO6AlOvAXmD/go4BAAEklR8CJ8AAbagWlQ0uwABtncAAtanAALWyAMABAGA/SZUsIRyVPBaVMC7AAElCwAC1qcAAtbRIAQABKwDAAP91PgI9HJVQgJVNwF5g/4KOAQABJ8AAbakAwAEAYEaVcJWOlXkAAAASWwAWlYEuwABJQsAAtanAALW0PgE9HJWbgJWYwF5g/4KOAQABJJWsAiewS4GVp8BeZLgAwAEAYD9JlcEhHJXcFpXFLrAhwAC1qcAAtbdIAQABKwDAAP91PgI9HJXwgJXtwF5g/4KOAQABJ8AAbaoAwAEAYEaWE5Y8lhwAAAASYAPAAGkiABaWJC6wIcAAtanAALW3PgE9HJZJgJZGwF5g/4KOAQABJJZaAiewS4GWVcBeZTYAwAEAYD9Klm8BHJZ5gJZ2wF5g/yMAAAAAwAEAZQAAXlPsAF5UIwBeVOIAXlV0AF5WMwBeVssAXleKAF5YHABeWN8AXllxAF5aEwBeWqMAXltLAF5b/gBeXKAAXl0yAF5d4ABeXl8AXl79AF5fkQBeYDEAXmDLAF5ljgAAABYAAAABgfMAXmXyAF5SDgBeZe8AAAABAF5l8gAAAAAAAgbAALXSAIH0AAABgNoAAMAAtsoAAAAAAAICwAC104H0gT2BQ5YhA8AAbasAAAFgAcAA/2gAAAIEwAC11oH0gWSBchjAAFO8wAC10gBdA8AA/vECYAPAAQACYAPAAP9oATKBcGADwAEAAmADwAD/aAAEwAC114H0gYKBnxjAAG2swAC10gBdA8AA/7MBYAPAAQACAR6BksAAwyEAAWADwAEAAgAAAQXAALXoAAAAAAQAAAMAAAAAAAAAAABgA8AAtdMBPwEJAQDAAP9+AAAAAA0GwAC12YH0ghmCHoJqAABWAAAAAQOCIYJqAAAAAgEBgikAAACD1mADwAEAAgABgjMAAACAllsBaoI6YAPAAQAChChcAT4BPRyCThaCRS7AAFO8wAC10sAAtdaAvwIAAoCCT8BeZv4cglyBglbAXmcNIwAAAADAAP92AMAA/wYGwAC12oH0grSCuYNoAADAAG2tAAAAAQOCw4NoAAAAAgECgssAAACD1mADwAEAAgCC1QAAAICWWwFqAGADwAD/JXkAXAE+Ak6C8IL1AACDYV0DwAD+vwFgA8ABAAIBJoLwARyDARaC9y7AAFO8wAC10sAAtdaZdgIAAoCDDcBeZ380gxIDgxKDIgAAAAAAAABdA8AA/r8BYAPAAQACAUqDGAExgyBgA8ABAAIAAMAA/wxdA8AA/r8BYAPAAQACSYMpIRyDM4GDLcBeZ41IAQABKwDAAP91PgE9HINJgoNEwF5npVYBAAEcg1OBg03AXmeNIwAAAADAAP92AMAA/tA/BsAAtduB9IPzg/iELwAAwABtrgAAAAEDhAaELwAAAAEBAYQOAAAAg9ZgA8ABAAIAAFwBPgE9HIQjFoQZLsAAbazAALXSwAC111YBAAGAhCfAXmh/AMAA/8AGwAC13IH0hGKEZ4SqAACHZAAAAAEDhHKEqgAAAAEBAYR6AAAAg9ZgA8ABAAIAAGADwAD8VQE+AUqEhQEchJYWhIwuwABTvMAAtdLAALXWh2QBAAGAhKLAXmjWAMAA/wQGwAC13YH0hOaE9IUyAwCAvwAAAAEDhPeFMgAAAAICAoT/AAAAg9ZgA8ABAAIAhQsAAACAlmADwAEAAgAAXAE+AT0chSEWhRguwABTvMAAtdLAALXWgL8CAAKAhSLAXmk2gYUpwF5pRADAAP8GBsAAtd6B9IVmhXaFlgMASwAAAAEDhXiFlgAAAAEBAYWAAAAAg9ZgA8ABAAIAAGADwAD/aAFKhYgBHIWRFoWILsAAU7zAALXSwAC11ksBAAGAhZLAXmmiAMAA/wUGwAC134H0heaF7YYYAACEXgAAAAEDhfOGGAAAAAEBAYX7AAAAg9ZgA8ABAAIAAGADwAD/aAFKhgMBHIYNFoYDLsAAU7zAALXSwAC11oReAQABgIYUwF5p/wDAAP8OBsAAteWB9IZQhlmGdQEAgVUAAAABA4ZhhnUAAAAAAAAAYAPAAPxVAUqGZAEWhm4WhmQuwABTvMAAtdLAALXWgVXAAP8WBsAAteaB9IaxhrqG3AEAg7cAAAABA4bFhtwAAAAAAAAAYAPAAPxVAUqGyAEWhtIWhsguwABTvMAAtdLAALXWg7fAAP8XBsAAteCB9Ic5hz6HhQAAg/0AAAABA4dFh4UAAAABAQGHZAAAAIGmYQMCYAPAAQACYAPAAP9oXAAAXAE+AT0ch3cWh20uwABTvMAAtdLAALXWg/0BAAGAh3/AXmrnAMAA/xAGwAC14YH0h/KH+YqWAAC+XQAAAAEDiACKlgAAAAAAAABgA8ABAAIBPgROiBaIGQAAg+lgA8ABAEwBH4gfwAEAawAAAABOiDiIQwAAvPFgA8AA/FUBKkaIUIiFiFwAAACAvWADwAEAAgA1iHMAAAEAXQPAAP6/AWADwAEAAgEciHMWiG4WiGQuwABTvMAAtdLAALXWg2jAAP8TgK0AAAAAwAD+kzUAAAABAFsBHIh9g4h7wF5rk4CuAAAAAMAA/tKDAMBea5M+Ak6IlYibAACAllsBHIimFoidLsAAU7zAALXSwAC11ksBAAGCiKfAXmuEAMAA/wVJiLQhHIi+g4i4wF5r8kgBAAErAMAA/3U+BUmI0YGI1cBea28+AT0ciPCAiO3AXmtUgo4BAAEngKcAwAEAYD89HIkRgIkOwF5rVIKOAQABgokXwF5rhADAAQBgSYkmJYkwg4kqwF5r8l0DwAD+vwFgA8ABAAI+AUmJTRyJWxaJUS7AAG2swAC10sAAtdeDHAEAAYKJZMBea4QAwAD/vz4BPYuJecBea/IkiZcDJ5nyHImLg4mFwF5r8lgBAAEngKcAACeZ8z4BPYuJuMBea/IkieADJ5nyHInUNYnFAAABAFsBg4nFwF5r8jUAAAABAFsBHInMhInKwF5s+YCuAAAAAACEAMBebPlYAQABJ4CnAAAnmfM/SYoAIRyKCoOKBMBea/JIAQABJwAAwAD/dT4CPRyKIICKHcBea1SCjgEAASeAvADAAQBgPRyKOYCKNsBea1SCjgEAAYOKP8Bea/IAwAEAYD89iYpZwF5rbyk/Sop+ARyKiICKhcBea1QjAAAAAMABAGUGwAC14oH0ipuKrorUAAAjAWqKnGADwAD/aAIAAAEDiraK1AAAAAAAAABgA8ABAAIBSoq8ASSK1AMnwABtrxyKyC6+XQAAAADAALXhJ4MmBsAAteOB9Iuoi7iWHwABwABtsAAAAAEDi8CWHwAAAAEBAYvIAAAAgbJgA8ABAAIAAGADwAC10wE+BU6L3YvmAADAAFO9YAPAALXTAR+L7MAAtegAAAAASYv8HIwFgIwAwF5uFkgBAAErAMABABFKjA4BgYwVwF5uLz9OjCeMLQAAJ2ADwAD+GwGTQ4w2HIxDgow9wF5ub2MBAAEWjEqAjEXAXm4WYcABAAYAwAD/ST4GToxejGQAAMAAbbFgA8AA/hsBHIxrgIxmwF5uFoC7AgACJ4C8gox4wF5ubwDAAQAVToyKjJMAAMAAbbJgA8AA/hsBHIyagIyVwF5uFoC7AgACJ4CngoynwF5ubwDAAQAVToy8AAAAgL1gA8ABAAIATozNjNYAALHAYAPAAPxVASpJjOUiIRyM74OM6cBebqZIAQABHIzylIHGAAAAAMAA/j4AwAD/PwAhHI0BhIz4wF5u1kgBAAEcjQSUgcYAAAAAwAD+PgDAAP8/PgFJjRIcjRyDjRbAXm6mYwEAAYSNHsBebtYAwAD/ST4DPY2NNMBebwYcjUCAjTvAXm4WgL4CAAKCjUrAXm5vg41RwF5upgDAAQAYPY6NY8BebxUpPYqNfsBebm8cjYyDjYbAXm6mZAEAAZQAwAD/QT4CPY2NrMBebwYcjbiAjbPAXm4WgL4CAAKCjcLAXm5vhI3JwF5u1gDAAQAYPYqN3sBebm8cje+EjebAXm7WZAEAAZQAwAD/QUmOCyEcjhWDjg/AXm6mSAEAARyOGJSBxgAAAADAAP4+AMAA/z8+Az2NjibAXm8GHI4ygI4twF5uFoC+AgACgo48wF5ub4OOQ8BebqYAwAEAGD2OjlPAXm8VKT2KjmzAXm5vHI56g450wF5upmQBAAGUAMAA/0FJjowhHI6ZhI6QwF5u1kgBAAEcjpyUgcYAAAAAwAD+PgDAAP8/PgI9jY6qwF5vBhyOtoCOscBebhaAvgIAAoKOwMBebm+EjsfAXm7WAMABABg9io7awF5ubxyO64SO4sBebtZkAQABlADAAP9BPgI9jY8HwF5vBhyPE4CPDsBebhaAvgEAAYKPHcBebm8AwAEAGD2Kjy3AXm5vFo86gI81wF5uFmHAAQAGSY9Qho9UwF5vFT4HTpAGkBQAAMAAbbNdA8AA/r8BYAPAAQACATGQHmADwAEAAgBOkC+QNgAAu2hgA8AA/FUBIhyQPoKQOMBebm9jAQABFpBFgJBAwF5uFmHAAQAGAMAA/0kAHJBUgJBPwF5uFoHYAgACJ5nygpBkwF5ubwDAAQAUSZB0FJB4wF5xdQgAPgM9HJCVgZCMwF5uL8AAba0BAAGFkKDAXm8GAMAAtdo9HJC/h5CxwF5xUlYBAAEnmfMAwAD+0D2KkNPAXm5vHJDYgpDTwF5ub2QBAAGUAMAA/0E/TpDykP0AAMAAbbRgA8AA/hsBgpD/wF5ub0FDkQ4ckRuCkRXAXm5vYwEAARaRIoCRHcBebhZhwAEABgDAAP9JPgJOkT2RQgAAnMlgA8ABAAIBHJFJgJFEwF5uFoC+AgACgpFTwF5ubxyRYIKRWsBebm9kAQABlADAAP9BAMABABhJkXAiFpGCh5F0wF5xUoO3wAD+ogAckaMWkZ6HkZDAXnFSgerAAP6kSAEAARSRpsBecmgKAADAAQARPgI9HJHIh5G6wF5xUoYuAAAAAMAA/t49ipHiwF5ubxyR54KR4sBebm9kAQABlADAAP9BPgJOkhGSHgAAwABttWADwAEAAgEckipqkiBdA8AA/vECYAPAAQACYAPAAQACwAF51ksBAAEUkivAXnJoCgAAwAD/BUmSPiEckk8UkkLAXnMWCwBIAQABKwDAAQARPgI9HJJ2h5JowF5xUlYBAAEUknrAXnMWCwAAwAD+0D2KkpfAXm5vHJKcgpKXwF5ub2QBAAGUAMAA/0FJkrMckrwUkrfAXnJoCgBIAQABJ4CnAMABABE+AUmS1BaS5oeS2MBecVKBVcAA/qE+AUKTAQBJkx0iHJM2FpMvh5MhwF5xUmHAAP7vSAEAAZQAwAD/PwAUkz7AXnF1CAA+BE6TX5NlAACAlmADwAEAAgEck2yAk2fAXm4WgL4CAAIUk3bAXnInCQCCk4LAXm5vAMABABg9HJOjgZOawF5uL8AAba0CAAKFk67AXm8GFJO0wF50DgwAAMAAtdo9ipPMwF5ubxyT0YKTzMBebm9kAQABlADAAP9BPRWT5cBecicJgpPywF5ubz4BPYqUIMBebm8clCWClCDAXm5vZAEAAZQAwAD/QT4BPYqUXMBebm8clGGClFzAXm5vZAEAAZQAwAD/QUmUkRSUlcBecXUIAD4CTpSwlLYAAICWYAPAAQACARyUvYCUuMBebhaAvgIAAhSUx8BecicJAByU2YKU08Bebm+BjQEAAZQAwAD/QgDAAQAYSZTpFpTzFJTtwF503woAg7fAAQAJPgE9HJUWgZUNwF5uL8AAba0CAAKFlSHAXm8GFJUnwF503woAAMAAtdo/PgJOlV2VYwAAgJZgA8ABAAIBHJVqgJVlwF5uFoC+AgACFJV0wF5yJwkAgpWAwF5ubwDAAQAYPRyVm4GVksBebi9WAgABhZWfwF5vBgGAlhSVrMBedWIKAMAAtdk9ipXGwF5ubxyVy4KVxsBebm9kAQABlADAAP9BPgE9HJXvgZXmwF5uL1YBAAGFlfPAXm8GAMAAtdlKlgwBgZYTwF5uLwAAXmbfAF5nXQBeaF0AXmi2AF5pFgBeaYMAXmnfAF5qPQBeaoIAXmrHAF5rKQBebaUAXm30AF51/wAAAA0CwAC16YH0liSWKqSZA8AAbbYAAAFgAcAA/2gAAV0BwAC3AwFgA8AAtdMAAQXAALXvgfSWa5ZxlooBAAADloiWigAAAAAAAABgA8AAtekBPwEJAZZxwAD/fgAAAAADBsAAteuB9JaPlqKj0QAAwABttwFqlpBgA8AA/2gCAAABA5auo9EAAAACAgKWuAAAIMAAbbhgA8AAtdMAls8AAADAAG25YAPAAQACAABgA8ABAAIBPgFJluMclvSBlufAXnbWSAEAASeDjQDAAQARPgFKlwQBK0mXHByXLYGXIMBedtZIAQABJwAAwAEAET4BSpc8ASMWl1KAl0PAXnbGg7fAALXmJ8AAbborAWADwAEAAj4GTpeel6oAAMAAbbtdA8AA/r8BYAPAAQACATGXrGADwAEAAgBOl7+X0AAAwABtvGADwAC10wEel9vAALXjAQABgZfkwF521gBOmAWYFwAAwABtvV0DwAD/swFgA8ABAAIBHpgdwADDIQABYAPAAQACAAA9HJhDg5gywF53coP9AQABNJhLA5hLolEAAAACAgKYUwAAAIPWYAPAAQACAJhfAAAAwABC72ADwAD/aAAAYAPAAP8lAT4FTph9mIkAAMAAbb5gA8AA/FUBKUmYmRyYoYWYncBed92B2AEAASeaSQDAAQAUPgI9jZi+wF533RyYyIWYxMBed92AvgEAAZQAwAEAGD2PmODAXngGKj89HJkZhJkHwF53llYBAAGFmR3AXnfdAMAA/8BOmTKZPgAAwABtv2ADwAD/aAEcmU6AmUDAXnbGSwEAAYWZT8Bed90AwAC13kmZXSGHmWLAXngGPgFJmXscmY6AmX/AXnbGh2QBAAGFmZrAXnfdAMAAtdw+AT0cmbqCma7AXndPVgEAASSZ6wQnwABtwIWZ2sBed90ngLwUmd/AXnh3CAAAwAD+0D9JmgkhHJodgJoOwF52xodkAQABhZopwF533QDAALXcPgE9HJpHgpo7wF53T1YBAAEkmmMCJ8AAbcGFml/AXnfdAMAA/tBJmnUcmoeGmnnAXnfrSAEAAScAAMAA/3U+AUmamiEcmqoUmp7AXnh3CABIAQABJwAAwAD/dT4BPRyay4Kav8Bed09WAQABJJruAifAAG3ChZrqwF533QDAAP7QP0mbDBybHoabEMBed+tIAQABJ4ONAMAA/3U+AUqbMgBJm0klm1uGm03AXnfrXQPAAP6/AVs+AUmbcCWbgBSbdMBeeHcIAF0DwAD+vwFbPgNOm5ybpwAAwABtw10DwAD+vwFbARybtRSbqcBeeHcIAV0DwAD+vwFbgK0AAAAAwAD+k0aby5v4m9cAAADAAG3EYAPAAP9oABSb6cBed+sGAV0DwAD+vwFbPgROnA+cHAAAwABtxWADwAEAAgEknC8BFJwgwF56JwoATpxEnE8AAKAsYAPAAPxVASpJnGYcnHcUnGrAXnpLCwBPAQABJ4ONAMABABM+BE6cxJzLAACDKWADwAEAAgEcnO4UnOHAXnpLCwCAvgIAApMcnQgUnPvAXnpLCwCAuwEAASeDjQDAAQAVAMABABhOnSydNAAAv/JdA8AA/r8BWwExnTZbAEadSp1ynVYAAADAAG3GYAPAAP9oABSdZsBeefEJAD4BSZ2GHJ2aJJ2ZARSdjMBeevMPAIHYAQABFJ2lwF56mA0AAMABABQ+Aj0cncwUncTAXnrYDgBWAQABFJ3QwF568w8AAMAA/tA9FZ3zwF56agwpP0aePJ5ankgAAABfYAPAAP9oABSeUcBeetgOAD4BPRyeeRSebsBeefEJAIReAQABFJ6AwF57ZQ8AAMAA/tw+AUFGnsGe6Z7NAAAAwABtxmADwAD/aAAUnt3AXnnxCQA+AUme/RyfDhSfAcBeeksLAEgBAAEknyABFJ8TwF57pQ0AAMABABE+Az0cn0MUnzjAXnnxCQCEXgEAARSfSsBee6UNAADAAP7cPRWfbcBeemoMKUKflAA/SZ/fIRSf5MBeemoMAD4BPRygDoKgAsBed09WAQABJKA7BSfAAG3HhaAnwF533SfAAG3IFKAtwF56SwsAJ5nzAMAA/tA/SaBoFqB3FKBswF558QkAg7fAAP6iPgE9HKCygqCTwF53T1YBAAEkoOcFJ8AAbcmFoMnAXnfdJ8AAbcgcoNsUoNDAXnnxCQBYAQABJ4CnAMAA/pEnmfMAwAD+0D8+AT0coSOCoRfAXndPVgEAASQACCfAAG3KhaFAwF533SeDWyfAAG3LFKFjwF536wYBXQPAAP6/AVsnwABtzBShfMBeeHcIACeDSADAAP7QSaGoIRyhuoahrMBed+tIAQABFKG9wF54dwgAAMAA/3U+AT0coeKCodbAXndPVgEAASQACCfAAG3NhaH1wF533SfAAG3OhqIFwF536yeAmSfAAG3PFKIvwF54dwgAJ4NIAMAA/tA/AMAAteA9HKJpgKJawF52xoP9AQABNKJxA6Jxo4AAAAACAgKieQAAAIPWYAPAAQACAKKFAAAAgJZgA8AA/2gAAGADwAD/JQE+AUmiliEcoq2EopvAXneWgxwBAAGForbAXn2PAMAA/78+AUmiyByi0oaizMBefZ1IAQABJwAAwAD/dT4BPRyi84Ki58Bed09WAQABJKMQAyfAAG3QhaMLwF59jyeDSADAAP7QPgE9HKM+gqMywF53T1YBAAEko2AEJ8AAbcmFo1XAXn2PJ4C8hqNawF59nQDAAP7QPwDAALXgSqOJASMWo5yCo5DAXndPg7fAAP6iHKO1gqOpwF53T1gBAAEnsEoAwAD+kSsBYAPAAQACBsAAteyB9KPWo+mkKwAAvl0BaqPXYAPAAP9oAgAAAQOj8KQrAAAAAQEBo/oAACDAAG3RYAPAALXTAABgA8ABAAIBPgFKpAwBHKQegKQTwF5+qr5dAAAAAMAAteEGwAC17YH0pDCkQaSXAACBVQFqpDFgA8AA/2gCAAABA6RIpJcAAAABAQGkUgAAIMAAbdFgA8AAtdMAAGADwAD8VQE+AUqkZAEiHKR2gKRrwF5/BkgBAAErAMAA/3UBFqSMgKSBwF5/BoFVwAC15QAAXnaaAF5+gABeftwAXn9KAAAAAwAAAAGB9ABef2IAXmYoAF52PABef18AAAACAF5/YgAAAAAAAgbAALXwAIH1AAADgNoAAMAAxwIAAIDyAADAALchAACBGAAAwABRVQABAQGnOQAAAAICwAC18YH1gVKBWIP/A8AAak4AAAFgAcAA/2gAAWABwABRVgIEwAC19IH1gZOBngnAAG3SwAC18ABgA8AAtf8ABMAAtfWB9YG1gb4YwABt08AAtfAAYAPAAMklAAEFwAC1/oH1gcOBw4IaAIC1wAC18AADgcuCGgAAAAEBAYHRAAAEwABt0mADwAC1/wAAYAPAALXxAT8DCAHAALX0gADAXoAxCADAALX1HIH3GoHywAC4E7WNAQABgIIOwF6AMQDAALgYCQGBw8AA/34AAAAABAbAALX3gfWCH4IngkoEAQAAAAABA4ItgkoAAAAAAAAAYAPAALXxAUqCMwEfgjrAALX+AQABH4I8wAC2CQAAAAAABsAAtfmB9YJPgmCCigAAg44BaoJQYAPAAP9oAgAAAQOCZoKKAAAAAQEBgmsAAABhYAPAAP4bAABcAT4ABsAAtfqB9YKPgqCDAwAApzwBaoKQYAPAAP9oAgAAAQOCpoMDAAAAAQEBgq4AAACBsmADwAEAAgAAXAE+AUmCuiEcgsgWgr4uwABt08AAtfDAALX1SAEAASsAwAD/dT4BPRyC4xaC2S7AAG3TwAC18MAAtfVWAQABHILsaoLnYAPAAMtngYmVogEAAYCC88BegSwAwADJcADAAMlVPwbAALX7gfWDYYNog/0AAMAAScsAAAABA4Nvg/0AAAAAAAAAYAPAAQACAT4CSYN4IRyDhhaDfC7AAG3TwAC18MAAtfVIAQABKwDAAP91PgI9HIOhFoOXLsAAbdPAALXwwAC19YKMAAAAAMAAyVY9F4OwLsAAbdPAALXwK8AAtfU/SoPMARyD2mqD02ADwADIpMABef2VogEAARaD8xaD7RaD4S7AAG3SwAC18MAAtfSAlsAAtgSEOcAAt9MAwADJcAAAXoCFAF6AxgBegQIAXoGfAF6CXwAAAAQCwAC1/4H1hE6EVIXzA8AAbdQAAAFdAcAA/9ABYAPAALfRAAABBMAAtgKB9YSAhIYYl2HAALXwAGADwAC30QErAQXAALYJAAAAAAQAAAMAAAAAAAAAAABgA8AAtf8BPwEJAQDAAP/VAAAAAAMGwAC2BIH1hLaEwYT6AQCAlgAAAAEDhMeE+gAAAAAAAABgA8AAt9EBPgJAIRyE2xaE1C6XYcAAtfDAALYCSAEAASsAwAC31YTUhOIASoTpARaE8C6XYcAAtfDAALYCBsAAtgaB9YVchW2FswAAVgFqhV1gA8AA/2gCAAABA4VwhbMAAAABAQGFeAAAIICWYAPAALfRAABcAT4CQByFkxaFjC6XYcAAtfDAALYCSAEAASsAwAC31YWMhZoAPReFoS6XYcAAtfCAharAXoNrwAC2AgbAALYHgfWFuIXJhfEAAIKMAWqFuWADwAD/aAIAAAEDhc6F8QAAAAAAAABcAT4BQCEcheUWhd4ul2HAALXwwAC2AkgBAAErAMAAt9WF3oXsAAAAXoLkAF6DQgBeg7UAXoQGAAAAAwAAAAGB9QBehB4AXn+0AF6CeABehBsAAAACAF6EHgAAAAAAAgbAALYKwABt1YH2AAAHgP8AAFINAIE/AACCLgABAQGHBIFvAABaAAEBA4KRgouCfoG9AACB4AAAgdkAAKXwAACB+gAAwABRVQABAQK+Vb5IgkMAAMAAQzAAAQECuDu4UQAAAAUCwAC2C4H2goaCjKssA8AAak8AAAFgAcAA/2gAAAgEwAC2DYH2gq6CtQmB5QBgA8ABAAIABMAAtg6B9oLqgvYJgwEAYAPAAQCDAATAALYPgfaDMIM9CcAAbdYAYAPAAQCDAATAALYQgfaDWYNpCcAAbdcAYAOl8QAEwAC2EYH2g4iDrAmD1QBdA8AA/r8BYAPAALYxAR6DlsAA+bkBAWADwAC2MQGTAATAALYSgfaEEYQkCcAAbdgAXQPAAP7xAmADwAEAAmADwAEAAgAEwAC2E4H2hEKEVwnAAG3ZAF0DwAD+8QJgA8ABAAJgA8ABAAIABMAAthSB9oS3hL0JvlMAXQPAAP7xAmADwAD+G10DwAD+vwFgA8AAQ8MAAQXAALYhgfaEwoTChYwAAAADhNKFjAAAAAcHB4TfAAAEgeVgA8ABAAIAhPMAAASDAWADwAEAgwCFDAAABMAAbdZgA8ABAIMAhSYAAATAAG3XYAOl8QCFQwAABMAAbdhdA8AA/vECYAPAAQACYAPAAQACAIVjAAAEwABt2V0DwAD+8QJgA8ABAAJgA8ABAAIAhYUAAAS+U10DwAD+8QJgA8AA/htdA8AA/r8BYAPAAEPDAABgA8AAtgsBPwgIAcAAtg2AAMBehdoIAcAAtg6BAMBehegIAcAAtg+CAMBehfYIAcAAthCDAMBehgYIAcAAthKEAMBehhQIAcAAthOFAMBehjEIAcAAthSGAMBehk4JAYTCwAD/fgAAAAAJBsAAthaB9oWRhZaGGQAAwABt2gAAAAEDhaCGGQAAAAICAoWlAAAAvkpgA8AA/hsAhcIAAAC4QWADwABDgAAAXAE+AT0cheAWhdgug9XAALYRVgEAAR+F6MAAtjYCAAKBhffAXocLgIYHwF6G/QAAwAD+0AbAALYXgfaGHoYjh3MAAMAAbdsAAAABA4Y0h3MAAAACAgKGRgAAAJewXQPAAP59AWADwAEAAgCGXAAAAIKPYAPAAQBMAABcAT4EToZvhnUAAIMeYAPAAPxVASk9HIaIgYaBwF6HhYKOAQABJ5nyAMABAGBGhpiGt4akAAAAg/FgA8ABAAIAgIauwF6HcD4FSYa/IYKGxMBeh5k9HIbSgYbLwF6HhYKOAQABJ4CnAMABAGA/PRyG64GG5MBeh4WCjgEAASeDswDAAQBgPR6G/YHnAgACg4cVwF6HxoGHHcBeh4UAPRyHM4GHLMBeh4WCjgEAASeDswDAAQBgPYqHRcBeh5kqPRyHZYGHXsBeh4WCjgEAASeZ8wDAAQBgBsAAthiB9od4h3+LbwAAovkAAAABA4eEi28AAAAAAAAAYAPAAQACAT4EToerh7kAAMAAbdxdA8AAtjcBYAPAALYxAR+Hx8AAtkYAAWADwAC2MQAATogUiCYAAMAAbd1dA8AA/vECYAPAAQCDXQPAALY3AWADwAC2MQEyiFRgA8ABAINdA8AAtjcBYAPAALYxAD0ciGQWiFwug9XAALYRg/0BAAE0iGwDiGyLRwAAAAEBAYh8AAAAwABt3mADwAC2MQAAYAPAAP8lAT4GToidiKwAAMAAbd9gA4qtARyIyRaIuC7AAG3XwAC2EIcBAQABFojkgojVwF6JHL5KwAC2NACl806I/YkCAACB+2ADwAD+GwEciRgWiRODiQTAXok3gfuKsIGNAQABlADAAP9CTokniS4AAIcFYAPAAP4bARyJRhaJP4OJMMBeiTeHBYqxgY0BAAGUAMAA/0I9HIlfgIlRwF6IlVYDAAOEiWPAXoluhYlpwF6JmoKJccBeiRwAwAC2Pk6JmImhAACEYGADwABDgAEWibKCiaPAXokcuEHAALYzSYnIIRyJ1YaJzMBeie9IAQABKwDAAEOOPgFJieghHIn/Fon1honswF6J77g9wABDhEgBAAErAMABAKo+Ak6KMopGAADAAG3gXQPAALY3AWADwAC2MQEcimiBilbAXoi/mXYCAAIWin2GinTAXonvuD3AAEOENIqaA4qaisMAAAAAAAAAXQPAALY3AWADwAC2MQFKiqABH4qkwAC2RgABYAPAALYxAAAAwAD/DD0ciuSHitDAXopMVgMAAxyLBRaLAIaK98Beie+B+8AAQ4aBjQEAAZQAwAD/QhyLGhaLE4aLCsBeie+HBcAAQ4eBjQEAAZQAwAD/QoKLH8BeiRwAwAC2Pj8/AMAA/o1Ki08BHItWLsAAbeHAALYKAQABgItdwF6IlQDAALYaBsAAthqB9ot0i3uVTAAAwABt4cAAtgoAAAABA4uBlUwAAAABAQGLoAAAAMAAbdxdA8AAtjcBYAPAALYxAABgA8ABAAIBPiZOi8OLygAAwABt4l0DwAC2RwFgA8ABAIMBH4vQwAC2UAABYAPAAQCDAABOi/aL/gAAnnVdA8AAtkcBYAPAAQACAR+MBMAAtlAAAWADwAEAAgAAT4wdjCIAAAHAAG3jYQMBYAPAAEOAXAADjDKNawAAAAEBAYxCAAAAuEFgA8AAQ4AAAFwBPgFJjFohHIxthIxewF6L8kgBAAErAMAAQ44+AUmMgCEcjJ0WjJOEjITAXovyuD3AAEOESAEAASsAwAEAqj4CPRyMuYGMssBei3/AAE2dAQABFozRhIzCwF6L8rg9wABDhADAALZLSYznIRyNBRaM+oSM68Bei/K4PsAAQ4hIAQABKwDAAQARPgE9HI0kgo0cwF6LqcAATZ0BAAEWjTyEjS3AXovyuD7AAEOIAMAAtks/Pz89HI2AgI1ywF6LXcAAbeQBAAE0jY8DjY+N2wAAAAEBAY2fAAAAg9RgA8AAtjEAAGADwAD/JQE+AT0cjb6Dja7AXovTIAEAARaNxYSNv8BejNa4QcAAtjMAAADAALZEPRyN/haN9xaN4y7AAG3YwAC2EinAAP8Ug/0BAAEWjg6CjgbAXoupwABNncAAtksAwAD+jT0cjjoWjjMWjh0uwABt2cAAthMpwAD/FIP9AQABFo5Kgo5CwF6LqcAATZ3AALZLAMAA/o1GjlmOiY5vAAAAg9VdA8AA/r8BYAPAAEPDABaOgRaOei6+U8AAthQpwAD/FD4BRo6RjqyOmgAAALnfYAPAAEPDAISOo8BejYE+Aj0cjsaDjrbAXovTIAEAARaOzYWOx8Beja+4UsAAQ8UAAEmO5CEcjwAWju6FjujAXo2vuA7AAEPGSAEAASsAwAEAET4BPRyPHYKPFcBei6nAAE2dAQABFo8shY8mwF6Nr7gOwABDxgDAALZLP06Pao95AADAAG3lYAPAAQBMAR+Pf8ABAGsAAAAAPRyPky7AAG3mBAAEgI+gwF6LXYGPr8Bei3+Cj7fAXouphI/AwF6OMwDAALYbTo/jj+oAAIKPYAPAAQBMAR+P8MABAGsAAAAAPRyQC4WQBMBejn2CjgEAASfAAG3nAMABAGA9HJAkhZAdwF6OfYKOAQABJ8AAbegAwAEAYD0ckEuFkETAXo59go4BAAEkkGwDJ8AAbekWkGAugeXAALYNJ8AAbeoAwAEAYEmQcyIhHJCEFpB3LoMBwAC2DkgBAAErAMABAKoAIRyQnRaQjy7AAG3WwAC2D0gBAAErAMABAKo+AT0ckLWFkK7AXo59go4BAAEkAAQnwABt6yeDsx6Q1pPbAwADFpDnLoMBwAC2DhaQ9S7AAG3WwAC2DyoAJ8AAbeoAwAEAYD89HJEkhZEdwF6OfYKOAQABJ8AAbewAwAEAYD0ckU+FkUjAXo59go4BAAEnwABt7QDAAQBgTpF8kZIAAMAAbe5dA8AA/n0BYAPAAQACAWqRlF0DwAD+vwFgA8ABAAKDOUmRqiEckbsWka4ugwHAALYOSAEAASsAwAEAqj4BPY6RzMBej6wckf4WkfWBke7AXot/iHnAALZOgKsBAWADwAEAAgE0kgIDkgKSMQAAAAEBAZIDAAAAvJBgA8ABAIMAAGADwAEAAgFKkgkBHpIJk9sDAAMWkhougwHAALYOh5IowF6QJyoAAMAA/og/PRySPi7AAG3bAgAChpJQwF6PrIWSZ8Bejn0AwAC2Fz0cknuFknTAXo59go4BAAEnwABcWADAAQBgPRySlIWSjcBejn2CjgEAASfAAG3vAMABAGA9HJKuLsAAbdsCAAIWksiCksDAXoupiHnAALZOhZLSwF6OfQDAALYXPRyS5oWS38Bejn2CjgEAASfAAFxYAMABAGA9HJL/hZL4wF6OfYKOAQABJ8AAbfAAwAEAYD0ckySFkx3AXo59go4BAAGEkyrAXo4zAMABAGA9HJNGhZM/wF6OfYKOAQABJ8AAbeoAwAEAYD0ck2CFk1nAXo59go4BAAEnwABt8QDAAQBgPRyTlYWTjsBejn2CjgEAASfAAG3yAMABAGA9HJPEhZO9wF6OfYKOAQABJ8AAbfMAwAEAYD0ck+MuwABt9AMAAxaT9i7AAG3YwAC2EoKUC8Bei6mFlBTAXo59AMAAthw9HJQohZQhwF6OfYKOAQABJ8AAXFgAwAEAYD0clEGFlDrAXo59go4BAAEnwABt9QDAAQBgPRyUYi7AAG30AwADFpR1LsAAbdnAALYTgpSMwF6LqYWUlcBejn0AwAC2HD0clKmFlKLAXo59go4BAAEnwABt9gDAAQBgPRyUyYWUwsBejn2CjgEAASfAAG33AMABAGA9HJTmLsAAbfgDAAOBlPLAXot/gpT6wF6LqYWVA8Bejn0AwAC2HT0clReFlRDAXo59go4BAAEnwABt+QDAAQBgSpUwARyVPoWVN8Bejn0jAAAAAMABAGUGwAC2G4H2lVGVVpxTAADAAG3mAAAAAQOVYpxTAAAABAQElYEAAACD1V0DwAC2NwFgA8AAtjEAlZgAAADAAG3iXQPAALZHAWADwAEAgwCVtwAAAJ51XQPAALZHAWADwAEAAgCVzQAAAIGTYAPAAQBMAABcAT4JTpXqAAAAwABt+mADwABDgABOlgqWHQAAwABt+2ADwAD+GwGTTpYzlkcAAMAAbfxgA8AAtiIBH5ZNwAC2MAAAAABOlmaWdwAAwABt/WADwAD8VQEpTpaQlqYAAMAAbf5gA8AAtiIBH5aswAC2MAAAAABOls2W3wAAwABt/2ADwAC2IgEfluXAALYwAAAAAE6XBpcaAADAAG4AYAPAALYiAR+XIMAAtjAAAAAATpdBl1gAAMAAbgFgA8AAtiIBH5dewAC2MAAAAAA9HJd7gJdzwF6SzIP9AQABNJeDA5eDnE4AAAADAwOXiAAAAMAAbgJgA8AA/hsAl5gAAADAAG4DYAPAAP4bAJe1AAAAg9RgA8AAtjEAAGADwAD/JQE+DE6X05fiAAC4QWADwABDgAEWl+oUl+TAXpQmDgC4QcAAtjNJmAAcmBMUmATAXpQ/DwBIAQABhJgWwF6TIQDAAEOOPgFKmDgAP0mYTxyYXhSYU8BelAYMAICXAQABhZhgwF6TMgDAAP9LPgVFmH4BmIeYiQAAYmADwAD+GwGFmIvAXpMyARyYoRSYn8BelKwQAGMBAAEUmKPAXpQGDAAAwAD/SQEVmLHAXpSsEByYrxSYscBelKwQAGQBAAGUAMAA/0E+AT0cmMeDmMDAXpMNgo4BAAEnlvkAwAEAYD2NmOXAXpMyFJj6wF6UBgwAPYyZDsBekyErPRyZSYaZNcBek0WdLwAAAADAALYsPY+ZWsBek2IpP0mZgiGHmYfAXpNiPgE9HJmqg5mjwF6TDYKOAQABJ4CnAMABAGA/PY+ZxMBek2IqPRyZ+YaZ5cBek0WVogIAAoOaAMBekw0UmgjAXpQWDQAAwAC2LUmaHhyaMRSaIsBelD8PAEgBAAErAMAAQ44+AUqaRAA/TppfmmkAALg9YAPAAQCDARaaehSaa8BelD8PALg9wABDhEmaiyEcmpkUmo/AXpXHEABIAQABKwDAAQCqPgM9HJrCFJqswF6TdQgAlaICAAKDmsnAXpMNHJrXgZrRwF6S4UsBAAEUmtjAXpXHEAAAwAC2TADAALYtPRya/xSa7cBek5IJAJWiAgACg5sGwF6TDRybIhabHRSbDsBelD8PAIH7wABDhoGNAQABlADAAP9CAMAAti09HJtEFJswwF6TrwoAlaICAAKDm0vAXpMNHJtpFptiFJtTwF6UPw8AhwXAAEOHgY0BAAGUAMAA/0IAwAC2LT9Om4WbkAAAuD5gA8ABAAIBFpuhFJuSwF6UPw8AuD7AAEOISZuzIRybwhSbt8BelrwRAEgBAAErAMABABE+AT0cm+wUm9XAXpPMCwCVogIAAoOb88Bekw0cnAKCm/vAXpL4SwEAARScA8BelrwRAADAALZMAMAAti0/PYycIMBekyEUnDnAXpQ/DwAAwAC2QwbAALYcgfacWJxdnkEAAMAAbfQAAAABA5xvnkEAAAADAwOchAAAAMAAbgRdA8AA/vECYAPAAQACYAPAAQACAJyqAAAAnnVdA8AAtkcBYAPAAQACAJzAAAAAgo9gA8ABAEwAAFwBPgROnNOc2QAAgx5gA8AA/FUBKT0cnOyCnOXAXpeego4BAAEng7MAwAEAYD0cnQqAnPzAXpdsg/0BAAE0nRIDnRKeJQAAAAICAp0aAAAAwABuBWADwAEAAgCdLwAAAIC9YAPAAQACAABgA8AA/yUBPgVJnT0hg51CwF6Xsj0cnVCCnUnAXpeego4BAAEngKcAwAEAYD89HJ26gp2zwF6XnoKOAQABhJ3AwF6X+ADAAQBgPRyd3IKd1cBel56CjgEAASeApwDAAQBgPRyd9YKd7sBel56CjgEAARyeAoGd+8Bel4lLAQABhZ4DwF6YCADAALZMAMABAGA9i54RwF6XsioAwAD/ED0cnjOCnizAXpeego4BAAEng7MAwAEAYAbAALYdgfaeRp5LooMAAMAAbfgAAAABA55WooMAAAADAwOebAAAAMAAbeJdA8AAtkcBYAPAAQCDAJ6FAAAAnnVdA8AAtkcBYAPAAQACAJ6bAAAAgo9gA8ABAEwAAFwBPghOnq2euwAAwABuBmADwAC2IgEfnr3AALYwAAAAAE6e1Z7gAADAAG4HYAPAALYiAR+e4sAAtjAAAAAATp76nwYAAMAAbghgA8AAtiIBH58IwAC2MAAAAABOnyCfLgAAwABuCWADwAC2IgEfnzDAALYwAAAAAE6fSJ9UAADAAG4KYAPAALYiAR+fVsAAtjAAAAAAPRyfcYKfasBemRuCjgEAASeDswDAAQBgPRyfiBafgS6+U8AAthSD/QEAATSfkAOfkKJnAAAAAgICn5UAAACDYmADwAD+GwCfrgAAAIPVXQPAAP6/AWADwABDwwAAYAPAAP8lAT4BRp+/n9qfyAAAAIPUYAPAAEPDABSf0cBemgYJAD4CPRyf8oOf5MBemS+VogIAAoKf+cBemRsUoAHAXpn4CAAAwAC2LUmgEhagHBSgFsBemioKALhUwABDyT4FTqA/oEgAAIRgYAPAAEOAARagUBSgSsBemioKALhSwABDxT0coHOEoGjAXplMlaICAAKCoHrAXpkbHKCIgKCCwF6Y70sBAAEWoJIUoInAXpqACwC4PcAAQ4QAwAC2TADAALYtPRygtYWgqcBemWmVogIAAoKgvMBemRscoNIWoM0UoMTAXpqACwCB+8AAQ4aBjQEAAZQAwAD/QgDAALYtPRyg8Iag4sBemYaVogIAAoKg98BemRscoQ8WoQgUoP/AXpqACwCHBcAAQ4eBjQEAAZQAwAD/QgDAALYtPRyhK4ehH8BemaOVogIAAoKhMsBemRscoUGBoTrAXpkGSwEAARahSBShQsBemioKALgOwABDxgDAALZMAMAAti0+AT0coiuCoiTAXpkbgo4BAAEjFqI3FKIxwF6aKgoAuFPAAEPHJ5b5J4CnAWADwAEAAgDAAQBgAMAA/xA9HKJ1gqJuwF6ZG4KOAQABJ4OzAMABAGAGwAC2HoH2oxSjIqQyAAHAAG4LAAAAAQOjNqQyAAAAAgICozsAAACDAWADwAEAgwCjTQAAAIRmYAPAAQCDAABgA8ABAAIBPgJJo1wiIRyjbYCjYMBenBFIAQABKwDAAQCqACEco4CBo3jAXpwfSAEAASsAwAEAqj4CTqOYo6oAAMAAbgxgA8ABAAIBHqOsk9sDAAOBo73AXpwfgKPGwF6cESoASqPiASSkGQMnwABuDYKkBMBenGkngK8/SqQlAScABsAAth+B9qWPpZurKgABwABuDgAAAAEDpaqrKgAAAAgICKXKAAAAwABuD2ADwABRdgCl+gAAAMAAbddgA6XxAKYmAAAAwABt2F0DwAD+8QJgA8ABAAJgA8ABAAIAplUAAADAAG3ZXQPAAP7xAmADwAEAAmADwAEAAgCmeQAAAIC9YAPAAQACAKaJAAAAgwFgA8ABAIMApqEAAACEZmADwAEAgwCmvwAAABlgA4CRAABcAT4CTqdyp3gAACdgA8AA/hsBkz0cp7IWp5mAp4HAXpzSuAnAAFF6g/0BAAE0p7oDp7qrJQAAAAEBAafLAAAAuAlgA8AAUVwAAGADwAD/JQE+B06n9agGAADAAG4QYAPAALYLAR+oDMAAtiEHAAcWqDgUqCjAXp2bCQCAvcAAUV6FqEjAXp04hqhgwF6dRoGoc8BenOKCqI/AXpzwg6iuwF6dDRao3xSoz8BenZsJAL5QwABRXwA9HKkEFKj0wF6dmwkAvk8BAAEWqSsUqRrAXp20CgDAAG3awAC2FgDAAFFkTqlFqU8AAIKHYAPAAQACARypYhSpUcBenbQKAKL5AAAAAMAAthhOqXipggAAgpNgA8ABAAIBJ8AAbhFJqZQcqZ4UqZjAXp1lCACAlwEAAZMAwAD/Sz4BSamtHKm2hKmxwF6dKkgBAAEnAADAAQARPgI9jKnJwF6dKiMhHKnYhqnQwF6dRkgBAAErAMABAKoWqfcWqeqGqeLAXp1Ggx3AAQCRgerAAP6kJ4FeAWADwAEAAj0VqhLAXp5pDCSqOwInwABuEhaqNRSqJcBenZsJAIC9wABRXj4BPRWqWMBenmkMJKqEAifAAG4TFqp+FKpuwF6dmwkAgL3AAFFePz01qq0AAAEAYAOAhQEcqq2Hqp7AXp1UgpIDAAOEqr7AXp0qFKrEwF6eaQwAaqraYAN1gh0AgJM1AAAAAQBbARyq7xSq7cBen0ENAFYBAAEUqvPAXp5DCwAAgIc1AAAAAQBbARyrCBSrBsBen0ENAIKMAAAAAICIFADAXp9BDQA9FasXwF6dZQgcqxwUqxfAXp1lCABkAQABlADAAP9BAMAA/o0AAF6G2wBeh04AXohqAF6LNwBekqoAXpdKAF6YzQBem+8AXpywAF6f4gAAAAkCwAC2IoH2q1urYbBfA8AAbhQAAAFgAcAA/2gAAAYEwAC2JYH2q6OrrRiXYcAAtgoAYAPAAP4bAZMEwAC2JoH2rQutHQbAAG4VAGADwAD+GwFqrRxgA8AA/huCPwTAALYngfatMq1OBsAAbhYAYAPAAP4bAWqtS2ADwAD+G8AAaNUEwAC2KIH2rWOtgAbAAG4XAGADwAD+GwFqrXxgA8AA/huDSgTAALYpgfatla2zBsAAbhgAYAPAAP4bAWqtr2ADwAD+G4NKBMAAtiqB9q3LriYGwABuGQBgA8ABAAIBagBgA8ABAALAAXoMAQXAALYwAAAAAAQAAAMAAAAAAAAAAABgA8AAtiIBPwEJAQDAAP9+AAAAAAMGwAC2LIH2q+Cr5awBAACdLwAAAAEDq+qsAQAAAAAAAABcAT4BPRer8y6XYcAAtgqTwAC2JQbAALYtgfaslqybrPUAAJWiAAAAAQOsoaz1AAAAAgICrK8AAACBk2ADwAEATACsuwAAAICWYAPAAP4bAABcAT4BPResyC6XYcAAtgoerNHAALYuAwADgKzbwF6he4Gs48BeoYkWrOoul2HAALYKwAC2JQDAALYlBsAAti6B9q6OrpmwXQABwABuGwAAAAEDrqKwXQAAAAMDA66wAAAAgZNgA8ABAEwArrwAAACAlmADwAD+GwCuxwAAAINiYAPAAP4bAABgA8AA/hsBPgZOrtmu3wAAm4ZgA8AA/hsBHK7nga7hwF6iAoGNAQABgq7pwF6iEADAAP9CTq75rwEAAMAAbhxgA8AA/hsBk0mvChyvFIOvDsBeoiljAQABkwDAAP9JPgI9jK8hwF6iVJQ9i680wF6iKRyvPIOvPcBeoimBxgAAAADAAP4+Pz2Lr07AXqIpHK9jHK9dg69XwF6iKYO/AQABlADAAP43gQYBAAGEr2XAXqJUAMAA/jREr3I+BE6vga+HAACtq2ADwAD+GwEcr4+Dr4nAXqIpg3wBAAFqr5FgA8AA/hvAAGjVAMAA/jM9i6+mwF6iKRyvrIOvpsBeoimDwQEAAWqvsGADwAD+G4I/AMAA/jhJr8Ycr9CDr8rAXqIpgJcBAAGTAMAA/0s+AT2Nr9/AXqLcHK/lha/fwF6i3IEGAQABaq/oYAPAAP4bg0oAwAD+ND89HLATgLAMwF6h9IKOAQABHLAmarAZYAPAAQACwAF6DEsBAAGFsCfAXqLcAMABAA8AwAEAYBywQ4OwPcBeoimAlwEAAZMAwAD/S0qwTQGBsFTAXqICAABeoSYAXqFbAF6h0gBeo8oAAAADAsAAtjGB9rBisGiw6QPAAG4dAAABYAHAAP9oAAACBMAAtjOB9rCKsJgYuEEAYAPAAEOAAATAALY0gfawoLCsGL5KAGADwAD+GwABBcAAtjaB9rCxsLGw5wAAAAOwv7DnAAAAAgICsMUAAAS4QWADwABDgACw2gAABL5KYAPAAP4bAABgA8AAtjEBPwMIAcAAtjOAAMBepEUIAcAAtjSBAMBepFMJAbCxwAD/fgAAAAAAAABepJAAAAAAAsAAtjeB9rElsSu6cgPAAG4eAAEAAIJ6YAPAAP9oAVsBYAHAAP9oAAABBMAAtjqB9rFcsX1YqqfAALYKAF0DwAD+8QJgA8AA/htdA8AA/vECYAPAAP4bXQPAAP6/AV8DAAABMrF7YAPAAP4bXQPAAP7xAmADwAD+G10DwAD+vwFfAwAAAAEFwAC2RgAAAAAEAAADAAAAAAAAAAAAXQPAALY3AV8DAAABPwEJAQDAAP9+AAAAAAgGwAC2PYH2scix0LJaAADAAG4fwAC2CgAAAAEDsdiyWgAAAAICArHdAAAAgftgA8AA/hsAsecAAACHBWADwAD+GwAAXQPAAP6/AV8DAAABPgJOsgeyDwAAwABuIF0DwAD+8QJgA8AA/htdA8AA/r8BXwMAAAE1AAAAAQBdA8AA/vECYAPAAP4bXQPAAP7xAmADwAD+G10DwAD+vwFfAwAAARayES6qp8AAtgrAALY6NQAAAAEAYAPAAP4bAYCyFsBepXU1AAAAAQBdA8AA/vECYAPAAP4bXQPAAP6/AV8DAAABHLIVgrIVwF6lxUsBAAGDshXAXqX/AMAA/wUjHLIchADAXqYTSAEAASsAwAD/dTUAAAABAF0DwAD+8QJgA8AA/htdA8AA/r8BXwMAAAEysi5gA8AA/htdA8AA/r8BXwMAAAA1AAAAAQBcARyyFYKyFcBepcWAvwIAAoOyFcBepf+FAMBepmAAwAD/BoUAwF6mYIQAwF6mEwFdA8AA/vECYAPAAP4bXQPAAP6/AV8DAABKsjYBNQAAAAEAXQPAAP7xAmADwAD+G10DwAD+vwFfAwAAAYKyPcBepaE1AAAAAQBgA8AA/hsBgbJFwF6lgzUAAAABAF0DwAD+vwFfAwAAARyyRIOyRMBepuZLAQABhLJEwF6nDADAAP8FIxyyTYUAwF6nIEgBAAErAMAA/uk1AAAAAQBdA8AA/r8BXwMAAAExslRfAwAAADUAAAABAFwBHLJEg7JEwF6m5oC/AgAChLJEwF6nDIYAwF6nYADAAP8GhgDAXqdghQDAXqcgAV0DwAD+vwFfAwAABsAAtj6B9rLAssWzFwAAVgAAAAEDssizFwAAAAMDA7LNAAAAgftgA8AA/hsAstcAAACHBWADwAD+GwCy4QAAIJZ7XwMAAAAAXAE+AT0cswccsvAuwABuH8AAtgoCAAKAsvnAXqfZgbL/wF6n5wDAALY9VgEAAYKzC8Bep/UAwAD+0AbAALY/gfazg7OIs+UAAMAAbQUAAAABA7OQs+UAAAADAwOzlQAAAIH7YAPAAP4bALOfAAAAhwVgA8AA/hsAs6kAACCWe18DAAAAAFwBPgE9HLPPHLO4LsAAbh/AALYKAgACgLPBwF6oXoGzx8BeqGwAwAC2PZ86AgACk4Kz2cBeqHoAwAD+2QbAALZAgfa0a7RwtNUAAMAAbiEAAAABA7R7tNUAAAABAQG0fAAAAIGmYQMBYAPAAP4bWwAAXAE+Ak60mbSfAACXQV0DwAD+vwFgA8AA/hsBNbSrAAABAF0DwAD+vwFgA8AA/hsBHLSrFrSmFrShLqqnwAC2CsAAtjqDaMAA/xOArQAAAADAAP6TNQAAAAEAWwEctLWBtLPAXqkUgK4AAAAAwAD+0oEAwF6pFD0ctMeBtMHAXqj9g/0BAAGAtM/AXqjlAMAA/o0GwAC2QYH2tTy1RLYVAADAAG4iAAAAAQO1WrYVAAAAAQEBtV8AAACB+2ADwAD+GwAAXQPAAP6/AV8DAAABPgROtX21hQAAwABuIF0DwAD+8QJgA8AA/htdA8AA/r8BXwMAAAEctYsWtYcuqqfAALYKwAC2OksBAAGAtYzAXqmsAMAA/wVJtZcctaOBtZvAXqnKSAEAASsAwAD/dUq1rAErP061x7XPAADAAG4jXQPAAP6/AWADwAD+GwE1td4AAAEAXQPAAP6/AWADwAD+GwEctd4WtdmBtdHAXqnKg2jAAP8TgK0AAAAAwAD+kzUAAAABAFsBHLXogrXmwF6qRYCuAAAAAMAA/tKCAMBeqkVKtfQBHLYCgbX7wF6pyksBAAEWtguCtgPAXqosgx7AAP6jAMAA/wUGwAC2QoH2tpS2mbevAADAAG4kAAAAAQO2prevAAAAAgICtqsAAACB+2ADwAD+GwC2sQAAAIGmYQMCYAPAAP4bXQPAAP6/AV8DAABbAABcAT4CTrbqtvIAAMAAbiBdA8AA/vECYAPAAP4bXQPAAP6/AV8DAAABHLb4Frb0LqqnwAC2CsAAtjpLAQABgLb5wF6q4QDAAP8FSbcEIRy3EIK3CMBeqxJIAQABKwDAAP91PgJOtyu3MwAAwABuI10DwAD+vwFgA8AA/hsBNbdCAAABAF0DwAD+vwFgA8AA/hsBHLdCFrc9grc1wF6rEoNowAD/E4CtAAAAAMAA/pM1AAAAAQBbARy3TIO3SsBeq4qArgAAAADAAP7SgwDAXquKPRy3YoO3WsBeq3GD/QEAATS3agO3arekAAAAAQEBt28AAACHBWADwAD+GwAAYAPAAP8lAT4BPRy3goG3gcBequ8gAgAChLeDwF6r+xy3koK3i8BeqxJLAQABhLeTwF6r+wDAAP8FAAAAwAD+jT8GwAC2Q4H2uDq4P7mUAACD/QAAAAEDuEa5lAAAAAEBAbhHAAAAgaZhAwNgA8AA/htgA8AA/htfAwAAWwAAXAE+Ak64e7iBAACXQV0DwAD+vwFgA8AA/hsBNbiNAAABAF0DwAD+vwFgA8AA/hsBHLiNFriIFriDLqqnwAC2CsAAtjqDaMAA/xOArQAAAADAAP6TNQAAAAEAWwEcuJeBuJXAXqykgK4AAAAAwAD+0oEAwF6spEa4o7i7uKwAAACB+2ADwAD+GwCBuLTAXqyNPgNOuNW43QAAwABuIF0DwAD+8QJgA8AA/htdA8AA/r8BXwMAAAEcuOMWuN8uqqfAALYKwAC2OksBAAGCuOTAXq0DAMAA/wVOuPu5AwAAwABuI10DwAD+vwFgA8AA/hsBNbkSAAABAF0DwAD+vwFgA8AA/hsBHLkSFrkNg7kFwF6tG4NowAD/E4CtAAAAAMAA/pM1AAAAAQBbARy5HIS5GsBerXmArgAAAADAAP7ShADAXq15RrkquUa5MwAAAIcFYAPAAP4bAIS5PcBerWA+AT0cuWAcuVeDuVDAXq0bSwEAAYW5WMBerdEAwAD/BYP9AQABNLloA7louYEAAAABAQG5aQAAAINTXwMAAAAAWwFKuW8BHLlwgLlvwF6sayADAAOCuXHAXq0Dhbl3wF6t0Ya5f8BerhkAAADAAP6NBsAAtkSB9roWuhu6cAAAwABt5AAAAAEDuim6cAAAAAEBAboqAAAAgaZhAwFfAwAAWwAAXAE+AT0cuj4ug/0BAAE0ukYDuka6awAAAAMDA7pHAAAAgftgA8AA/hsAuk0AAACHBWADwAD+GwC6VQAAAJZ7XwMAAAAAWwFKumEBHLpigLphwF6ueCABAAGDumPAXq7BAAAAwAC2QwAAXqVPAF6nugBeqDwAXqjDAF6pigBeqr8AXqxLAF6uVgBervAAAAAIAsAAtkeB9rqkuqq8AgPAAG4lAAEAAIJ6YAPAAP9oAVsBYAHAAP9oAAABBMAAtkmB9rrGutZYgKsAXQPAAP7xAl8DAABgA8AA/hsBMrrUXwMAAGADwAD+GwABBcAAtlAAAAAABAAAAwAAAAAAAAAAAF0DwAC2RwFfAwAAAT8BCQEAwAD/fgAAAAADBsAAtkuB9rsLuw+7XgAAwABNnQAAAAEDuxe7XgAAAAEBAbsaAAAglntfAwAAAABgA8AA/hsBPgFKuykBHLs0FrswLoCrwAC2SZl2AgACgLtAwF6vxTS7SQO7SbtZAAAAAAAAAGADwAD+GwFKu08BFrtTFrtPLoCrwAC2SWHAAP8VAMAA/wwGwAC2TIH2u4m7lruzAwBLAAAAAQO7mLuzAAAAAQEBu5sAACCWe18DAAAAAGADwAD+GwFKu6cBHLuqFrunLoCrwAC2SUsBAAGAu6vAXrBIAMAA/wUGwAC2ToH2u9y77LwAAQCIeQAAAAEDu/W8AAAAAAAAAABdA8AA/n0BXwMAAAFKu/gBFrv8Frv4LoCrwAC2SYNowAD/EwAAXq+jAF6wKQBesH0AXrDBAAAAAwAAAAGB9gBesNkAXoSjAF6gDwBeo98AXqSZAF6vGQBesNYAAAAFAF6w2QAAAAAAAgbAALZRwABuJoH3AAAGgO8BAMAAQ84AAIEGAQDAAHe5AACBKgEAwACt1gAAgUoBAMAAe4kAAIFyAQDAAGWQAACBhwEAwABxjgAAK8AAQ8/AAEPXwABD78AAQ/rAAEQFwABlk8AAZZLAAGYzwABmYsAAZozAAGabwABmqsAAZrzAAGbJwABm+cAAZ2zAAGd/wABnoMAAZ/LAAGgRwABoGsAAaCPAAGgtwABoQsAAcY/AAHGZwABxsMAAcbvAAHHMwABx2sAAd7rAAHfEwAB3y8AAd9LAAHfZwAB34MAAd+fAAHuKwAB7mMAAe5/AAHuqwACt2sAArfgAAAAAAAABgfcAXrIDAF6yAAAAAAAAXrIDAAAAAAACBsAAtlLAAG4ngfgAAASBCQAAwABiBQAAgSwAAL3+AAEBBLWytbeyGLW0gY8AAMAAY8cAAIGwAADAAIopAAEBAcAAXHgAAAAEAsAAtlOB+IJHglaC2gfAAGpQAAABYAHAAP9oAAABBMAAtlaB+IJWAASWncAAtlIAWwExAFsBGgDAALZYAAIGwAC2WIH4gmuCc4KmBEEAAAAAAQOCg4KmAAAAAQEBgosAAAC9T2ADwACKKgAAYAPAALZTAT01AAAAAIJxWwEaAMAAtnwTAAAGwAC2WoH4gquCr4LYAAKbdwAAAAEDgraC2AAAAAICAoLFAAAAgddgA8AAYjgAgtYAAACCTmADwABiOAAAYAPAAP4bAAAAXrKiAF6y6gBesy4AAAACAsAAtluB+ILdguOXNgPAAG4oAAABYAHAAP9oAAJgAcAAtlNdAcAAYiICYAPAAP4bYAPAAGI4AgTAALZegfiDUINXCcAAWOLAALZSAGADwACKKgAEwAC2X4H4g22DfhjAAG4pwAC2UgBgA8AAtokBKwEFwAC2fIH4g4KDgoPbAAAAA4OTg9sAAAABAQGDmQAABMAAWOJgA8AAiioAAGADwAC2WwE+AT0Xg6guwABuKcAAtlIfg8DAALaaAQABLgDAALZfAggBwAC2XoAAwF6zywkBg4LAAP9+AAAAABoGwAC2YYH4g+CD8IQwAACbdwFqg+FgA8AA/2gCAAABA4P3hDAAAAACAgKEBgAAAIHXYAPAAGI4AIQXAAAAgk5gA8AAYjgAAGADwAD+GwFKhB0BHIQdLsAAbioCAAKAhCvAXrRGgYQuwF60VADAALZiBsAAtmKB+IQ1hDmE+gAAwABuKgAAAAEDhEaE+gAAAAICAoRVAAAAgddgA8AAYjgAhGYAAACCTmADwABiOAAAYAPAAP4bAT4ESYRvHoRzwAD3/AIAAoCEfcBetK6BhIDAXrS8AEqEhAGTP06EloSYAACDqWADwAD+GwEchKcWhKEWhJyAhJrAXrSugmvAAGJTJ8AAYgiCTwEAARaEuBaEs4GEscBetLyCa8AAYlMnwABiCADAAP9ASYTEIRyEyoKEyMBetPdIAQABkwDAAP8/SoTQAYKE18BetPc/SoTeASaE3gEchOeAhOXAXrSuhFICAAIugYT0wF60vADAAGJXYAPAAP4bBsAAtmOB+IT/hQqFwQABwABuKwAAAAEDhRyFwQAAAQAAgnpgA8AA/2gBWwMDA4UhAAAAm3dhAwJfAwAAXwMAAGADwAD+GwCFNgAAAIHXXwMAAACFOwAAAIJOXwMAAAAAYAPAAP4bAT4ESYVEIhyFSoGFSMBetdhIAQABKwDAAP91AByFV4KFVcBeteRIAQABKwDAAP91SoVgAZM/SYVuHIV0gYVywF612EgBAAErAMAA/3VKhX0BHIWElIHGAAAAAMAA/j4/SYWMHIWSgoWQwF615EgBAAErAMAA/3VKhZsBlD9KhakBHIW3gIWwwF61vyACAAKBhbjAXrXYgoW7wF615AAABsAAtmSB+IXGhdGG0QABwABuLAAAAAEDheOG0QAAAgAAlqJgA8AA/2gBWwAAgnpgA8AA/2gBWwMDA4XoAAAAm3dhAwJfAwAAXwMBAGADwAD+GwCGAwAAAIHXXQPAAP6/AV8DAAAAhg4AAACCTl0DwAD+vwFfAwEAAABgA8AA/hsBPgROhhuGHQAAg6lgA8AA/hsBHIYoFoYhgYYfwF626WHAAP7vgk8BAAEWhjSChjLAXrb8YcAA/u8AwAD/QEmGQSEchkeDhkXAXrcaSAEAAZMAwAD/P0qGTQGDhlTAXrcaP0WGWwGGZIZmAABiYAPAAP4bAZMBHIZthIZrwF63fGMBAAEWhnGBhm/AXrbpYcAA/u8AwAD/SQGMhnnAXrd8HIZ6hIZ5wF63fGQBAAGUAMAA/0E+Aj2LhobAXrcaHIaRgIaKwF620CACAAIchpOBhpLAXrbpSwEAAYSGlMBet3wAwAD+zhyGmYKGmMBetvxLAQABhIaawF63fADAAP7OAABJhqUhHIarg4apwF63GkgBAAGTAMAA/z9KhrEBg4a4wF63Gj9KhsUBkwbAALZlgfiG1obah34AAMAAbi0AAAABA4boh34AAAACAgKG9QAAAIHXYAO+EwCHBAAAAIJOYAO+EwAAYAPAAP4bAT4DTocRhxMAAIOpYAPAAP4bARyHHBaHF4CHFcBeuGOAvb4Bgk8BAAEWhyiBhybAXrhvgL2+AQDAAQASSYczIRyHOYKHN8BeuIZIAQABkwDAAP8/Soc/AYKHRsBeuIY/SodNARyHXBaHVC7AAFjiwAC2UsAAtl7AAFkHAgACgId1wF64Y4GHeMBeuG8AwACKMQbAALZmgfiHg4eHiC0AAJt4AAAAAQOHlYgtAAAAAgICh6MAAACB12ADviUAh7MAAACCTmADviUAAGADwAD+GwE+A06HwIfCAACDqWADwAD+GwEch8sWh8aAh8TAXrkzgL2+AYJPAQABFofXgYfVwF65P4C9vgEAwAEAEkmH4iEch+iCh+bAXrlWSAEAAZMAwAD/P0qH7gGCh/XAXrlWP0qH/AEciAsWiAMuwABY4sAAtlLAALZewABZAwIAAoCIJMBeuTOBiCfAXrk/AMAAijMGwAC2Z4H4iDKINojgAADAAG4uAAAAAQOIRYjgAAAAAgICiFQAAACB12ADvhoAiGUAAACCTmADvhoAAGADwAD+GwE+A06Icoh0AACDqWADwAD+GwEciH0WiHiAiHbAXroFgL2+AYJPAQABFoiJgYiHwF66EYC9vgEAwAEAEkmIlCEciJqCiJjAXrooSAEAAZMAwAD/P0qIoAGCiKfAXrooP0qIrgEciL0WiLUuwABY4sAAtlLAALZewABZDQIAAoCI18BeugWBiNrAXroRAMAAijIGwAC2aIH4iOWI6YlCAADAAG4vAAAAAQOI+YlCAAAAAgICiQMAAACB12ADwABjywCJDwAAAIJOYAPAAGPLAABgA8AA/hsBPgFKiRgBHIkxFokfLsAAbinAALZSwAC2X5t3AgACgIk5wF6614GJPMBeuuUAwAC2jwbAALZpgfiJR4lXicwAALVFAWqJSGADwAD/aAIAAAEDiWSJzAAAAAICAol7AAAIgddgA8AAYl0AiZQAACiCTmADwABiXQAAYAPAAP4bAT4BSomdARyJpC6beAIAAhaJtYCJs8Beu1aWe8AAYl8WicCBib7AXrtklnvAAGJfAMAAtmYGwAC2aoH4idGJ4YonAAC9nAFqidJgA8AA/2gCAAABA4nqiicAAAACAgKJ/QAACIHXYAPAAGJ3AIoSAAAogk5gA8AAYncAAGADwAD+GwE+AUqKGwGTBsAAtmuB+IosijyKhwAAwABHAwFqii1gA8AA/2gCAAABA4pMiocAAAACAgKKXgAACIHXYAPAAGO7AIpyAAAogk5gA8AAY7sAAGADwAD+GwE+AUqKewGTBsAAtmyB+IqMipyK/gAAvZMBaoqNYAPAAP9oAgAAAQOKpIr+AAAAAgICirYAAAiB12ADwABikQCKygAAKIJOYAPAAGKRAABgA8AA/hsBPgFKitMBHIrlForcgIrawF68hKrzwABik4JPAQABForxgYrvwF68kqrzwABikwDAAPxIBsAAtm2B+IsDixOLhAAAvZYBaosEYAPAAP9oAgAAAQOLHouEAAAAAgICizMAAAiB12ADwABiqwCLSgAAKIJOYAPAAGKrAABgA8AA/hsBPgFKi1MBHItoFotcgItawF69BawtwABirYJPAQABFot0gYtywF69E6wtwABirQDAAP9ABsAAtm6B+IuJi5mMOgAAvZABaouKYAPAAP9oAgAAAQOLoow6AAAAAgICi7UAAAiB12ADwABiwwCLygAAKIJOYAPAAGLDAABgA8AA/hsBPgNOi9eL3AAAwABuMGADwAD+GwEjFovggIvewF69hp1TwABiyJSTAWADwAD+G06L+4wAAADAAG4xYAPAAP4bASMWjASBjALAXr2UnVPAAGLIlJMBYAPAAP4bSowbARyMJ4KMIsBeva2CTwEAAYOMMcBevdkAwAD/QAbAALZvgfiMP4xPjPwAAL2ZAWqMQGADwAD/aAIAAAEDjFqM/AAAAAIC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F8AAQtrAAELfwABEUAAAwABw5MAAucIAAAABA8AAQujAAERQAAAAAQEBwABC9QAAIICWXQPAALrfAV8DAAAAAFwBPgJAIRbAAEMKLsAAcSrAALnCwAC7ZMAAQwnAAEMVAEnAAEMcJcAAQyaAwABDIMBgqqZdA8AAuuMBXwMAAD4BScAAQzwlwABDRhTAAENAwGCqpgABXQPAALrjAV8DAABdA8AAu1IBXwMAAD4BPR7AAENfwAC7eAIAAhTAAENwwGCqpgABXQPAALtSAV8DAAAuAD4BPR7AAEOVwAC7dwIAAhTAAEOpwGCqpgABXQPAALrjAV8DAAAuAD4DTsAAQ+LAAEPsAADAAFHTXQPAALsnAltbARzAAEPuLsAAcT3AALnCAAAAAMAAu3U9HMAARAguwABxJcAAucIBAAEmwABEEgGAwABEEsBgqqZfAwAAAMAAu289HsAARCDAALt/AgACLoHAAEQ8wGCreQAGwAC7eoIXwABEVcAARFrAAEUsAADAAHCDwAC5wgAAAAEDwABEbMAARSwAAAABAQHAAERvAAAggJZfAwAAAABcAT4FQCEWwABEhC7AAHEqwAC5wsAAu2TAAESDwABEjwBAISXAAESjgMAARJ3AYKwZXQPAALrjAV8DAADAAESdwABEsABOwABEyMAARNIAAMAAUdNdA8AAuycCW1sBHMAARNQuwABxPcAAucIAAAAAwAC7dT0cwABE7C7AAHElwAC5wgEAAYDAAET2wGCsGQDAALtvPR7AAEUCwAC7fwIAAi6BwABFHsBgrG4ABsAAu3uCF8AARTHAAEU2wABGDQAAwABwhMAAucIAAAABA8AARUTAAEYNAAAAAgECwABFTAAAAIHHYAPAAP9oAMAARV8AAACGXGADwAD/1gFqAGADwAD/JXkAXAE+BEAhFsAARXouwABxKsAAucLAALtkwABFecAARYUATsAARZ3AAEWnAADAAFHTXQPAALsnAltbARzAAEWpLsAAcT3AALnCAAAAAMAAu3U9HMAARcEuwABxN8AAucICAAKAwABFy8BgrQSBwABF0sBgrRQAwAC7cT0ewABF48AAu38CAAIugsAARf/AYK1QAAbAALt8ghfAAEYSwABGF8AASXQAAMAAcILAALnCAAAAAQPAAEYlwABJdAAAAAEBAcAARjIAACCAll0DwAC63wFf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AT0ewADHssAAzRcBAAGAwADHwcBioSQAAABiiXQAYonNAGKKJgBiin8AYoraAGKLNQBii5AAYoxFAGKM4ABijZEAYo5OAGKO7QBij6gAYpBTAGKQjABikNQAYpFXAGKRkgBikoIAYpOmAGKVAgBilakAYpaDAGKXlABimBQAYpjDAGKZpQBimegAYppXAGKa7ABim6MAYpyOAGKdsQBiniIAYp6rAGKfTABin6cAYqAAAGKgeQBioPgAYqFQAAAAKAAGBMAAue6CJIEMgTAFwAByVcAAucIAXQPAAP+zAWADwAEAAgEegSPAAMMhAAFgA8ABAAIAAATAALnvghiB3YHqBMAAclbAALnCAGADwAC7iwAEwAC58IIYgjiCRQTAAHJXwAC5wgBgA8AAu4sABMAAufGCGINrg4AEwAByWMAAucIAYAPAALuLAATAALnyghiELYRGBMAAclnAALnCAGADwAD8VQEqBMAAufOCHsAAx9XAAMfyBsAAclrAALnCAGADwAC/pAFqwADH52ADwAC/pMABgnszBsAAufaCH4LwgvCDFAAFwAByW8AAucIBagBgA8AAzUzAAYW6AAABA4L2gxQAAAABAQGC9wAAAINZWwAAWwAGwAC594IfhiyGNYqFAAGce8AAucIAAAABA4ZMioUAAAABAQGGTQAAALo4WwAAYAPAAP4RAT4CSYoAHIoRGooJwAC/JkgBAAFqihlgA8AAvyDAAYJ7AMAA/3VKih8BJoofAYCKJsBiozJgA8AA/hE/Soo2ARyKShqKQsAAvybAAHEvAQJbWwE0imADimCKggAAAAEBAYphAAAAg4BbAABbAUqKZwEcinOAimfAYqMyIAMAA4GKdMBio6MrKwAAAMAAvzQGwAC5+IIfix2LJowtAAGcZMAAucIAAAABA4s+jC0AAAABAQGLPwAAALo4WwAAYAPAAP4RAT4DTouFi5MAAMAAcMxhAwJbW1sBNIuVA4uVi7cAAAACAgKLlgAAAINTWwCLmQAAAIh7WwAAWwFKi58BHIurgIufwGKj9SADAAMrgYuywGKkKIKLtcBipDEAAEmLuxyLzBqLxMAAvyZIAQABaovUYAPAAL8gwAGCewDAAP91SovaAYGL4cBipAk/SovyARyMBhqL/sAAvybAAHG6AQNbW1sBgYwdwGKkCQDAAL81BsAAufmCH4z2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wACs4CEewACs5cAA9/wCAAJqwACs72ADwAC/pMABgnuCwACs+sBix6sAPgE9jMAArQfAYsfLHMAArReCwACtEsBix6vAAHI6AQFcAYTAAK0kwGLHywDAAL82P0rAAK01AR7AAK1CwAC+0AIAAoPAAK1PwGLHu4TAAK1ZwGLHywAGwAC6IoIewACtZ8AArW3AAK7CAAHAAHKQwAC5wgAAAAEDwACthcAArsIAAAAFBQXAAK2LAAAAmdxgA8AAvyAAwACtngAAAIRXYAPAAL8PAMAArasAAACk1mADwAC/IADAAK2+AAAAgbVgA8AA/PEAwACtzQAAAJodYQMBYAPAAL7IXAAAYAPAAL7IAT4CScAAreghHsAAre3AAPf8AgACasAArfdgA8AAv6TAAYJ7gsAArgLAYsi0AD4BPYzAAK5IwGLI1BzAAK5YgsAArlPAYsi0wAByOwECW2ADwAC+yAGEwACuesBiyNQAwAC/Nz9KwACuiwEewACumMAAvtECAAKDwACurcBiyMSEwACut8BiyNQABsAAuiOCHsAArsXAAK7KwACvJwABwABykcAAucIAAAABA8AArtTAAK8nAAAABAQEwACu2gAAAJncYAPAAL8gAMAAru0AAACEV2ADwAC/DwDAAK76AAAApNZgA8AAvyAAwACvBwAAAIH7YAPAAQACAABcAT4BPR7AAK8RwADNFwEAAYPAAK8gwGLJ2QAGwAC6JIIewACvKsAAry/AAK9nAAHAAHKSwAC5wgAAAAEDwACvO8AAr2cAAAABAQHAAK9DAAAAgftgA8ABAAIAAFwBPgE9HMAAr1oawACvUsAAvybAAEhlAQABgMAAr2DAYso1AMAAv0AGwAC6JYIewACvasAAr2/AALKcAAHAAHKTwAC5wgAAAAEDwACveMAAspwAAAAFBQXAAK9+AAAAmdxgA8AAvyAAwACvkQAAAIRXYAPAAL8PAMAAr54AAACk1mADwAC/IADAAK+6AAAAwABwfmADwAC+6QDAAK/NAAAAiNxdA8AA/vECW1sAAGADwAC/IAE+BT0bwACwfcAAzQdqwACwi2EDAWADwAEAAlzAAYZJScAAsJwcwACwroPAALCgwGLKzkgBAAErAMAA/3U+AT2LwACwvcBiys5qwACw02ADwAC+/sABhk5JwACw8SElwACxA4PAALD1wGLKzmADwAC+/j4BPTDAALEhH8AAsSvAAP1OAQABJAACJ8AAcpQnwABylQA/TsAAsZkAAADAAHKWXQPAAP7xAltbAEnAALGlHMAAsbSEwACxqcBiyuBIAQABKwDAAP91PgFJwACxwyXAALHMgsAAscfAYsq+YAPAAL9cPgE9jcAAsd7AYsuQFsAAse4UwACx6cBiyr4CAWADwAC/XKqnwAC5wsAAv20+AT2NwACyB8Biy5AewACyFsAAws4AAltbAAA+AT2NwACyNsBiy5AewACyRcAAwtABAltbAYTAALJSwGLK4ABKwACyZQEfwACycMAAv6MDAAMmwACyfAGCwACyfMBiyr5gA8AAv1yDwACygsBiys6FwACykcBiy5AABsAAuiiCHsAAzxXAAM8XwADVmgABiMkAAAABA8AAzyLAANWaAAABAACXTmADwAD/aAFbBAEBwADPJQAAAIJtYQMAXwMAAAADwADPNgAAAIjcXQPAAP7xAltbAWoAYAPAAP8lecAAz1QAAACk0GADwAC+6QFqAGADwAD/JXnAAM9wAAAAgaxgA8AA/hEBagBgA8AA/yV5XwMAAAE+CEnAAM9+HMAAz4qDwADPgsBizP9IAQABKwDAAP4WPgFKwADPmQEewADPoMAAuiYDAV8DAAADgMAAz63AYsy4gcAAz7PAYszKgsAAz7/AYszmAD9OwADP7wAAAMAAcpdhAwFgA8AA/2hcAE7AANAhAAAAwABymGEDAmADwAD/aGADwAD/1lwAScAA0DIlwADQPoPAANA2wGLM/2EDAmADwAD/aGADwAD/1lw+AT2NwADQasBizYkUwADQesBizP8DAWEDAmADwAD/aGADwAD/1lxJwADQjCXAANCYg8AA0JDAYsz/YQMBYAPAAP9oXD4BPYzAANC4wGLNchTAANDHwGLM/wMBYQMBYAPAAP9oXD4BPTDAANDfH8AA0OnAAP1OAQABJAACJ8AAcpknwABxvABOwADRkMAA0Z0AAJssXgMABQUFYAPAAL8gYAPAAL8PYAPAAL8gYAPAAP9oYAPAAP/WAAFXA8AAud8AXAE0wADRnwPAANGfwADTkgAAAAUFBcAA0aUAAACZ3GADwAC/IADAANG4AAAAhFdgA8AAvw8AwADRywAAAKTWYAPAAL8gAMAA0dEAAACBx2ADwAD/aADAANHjAAAAhlxgA8AA/9YAAGADwAD/JQE+AUs+AUnAANIBIRzAANIThcAA0gXAYs2JSAEAASsAwAD/dT4BPRzAANIyFsAA0iuGwADSJsBizp+EV8AAvyek1AMDXGADwAD/aGADwAD/1gOFwADSPMBizYkUwADSS8Bizs8JABTAANJSwGLO3woAAMAAvy8+AkAhHMAA0oqEwADSfcBizXJIAQABKwDAAP91wADSfcAA0pEAPRzAANKoFsAA0qGGwADSnMBizp+EV8AAvyek0gICXGADwAD/aAKEwADSscBizXIUwADSv8Bizs8JAADAAL8uAQHAANLVWwHAANLcAAABg1NbAAHAANLfAAABiHtgA8AA/9YAPgFJwADS6h7AANLuwAD3/AIAAhTAANL4wGLP2AsAFMAA0vvAYs7PCQAAPgE9HMAA0xSHwADTDcBizq/AAHFDAwADFMAA0yjAYs6/CAAUwADTLsBizs8JABTAANM1wGLO3woAAMAAvxE+AT0cwADTYIfAANNZwGLOr8AAcUMDAAMUwADTdMBizr8IABTAANN6wGLP2AsAFMAA033AYs/kDAAAwAC/EUnAANOWHMAA06yCwADTmsBizOZIAQABKwDAAP91PgE9isAA07vAYszmH8AA09vAAL8OAQAAAcAAcUOGwADUAsBizlA+AT2KwADUIMBizOYewADUOMAAvu8CAAGCwADUT8BizOYBwABxQ4bAANR/wGLOUEs+AUrAANSeAR7AANSlwAC6JgMBXwMAAAOAwADUssBizLiBwADUuMBizMqCwADUxMBizOYAAQHAANTcWwHAANTjAAABg1NbAAHAANTmAAABhlxgA8AA/9YAPgFJwADU+CEcwADVCoXAANT8wGLNiUgBAAErAMAA/3U+AT0cwADVKIXAANUbwGLNiSACAAKHwADVKcBi0UkUwADVLMBi0VUIAAAAPgJAIRzAANVghMAA1VPAYs1ySAEAASsAwAD/dcAA1VPAANVnAD0cwADVfITAANVwwGLNciABAAGHwADVfcBi0UkAAErAANWNASsGwAC6JoIewADV5sAA1ejAANadAAHAAHKawAC5wgAAAAEDwADV9MAA1p0AAAEAAJdOYAPAAP9oAVsDAwPAANX3AAAAgm1hAwBfAwAAAMAA1gMAAACI3F0DwAD+8QJbWwDAANYhAAAAwABwfmADwAC+6QAAXwMA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Z4tDAGeLygAAAAICwADJoYI/gQ+BHon4B4ujAAABXQHAAMluAmADwAEAAl0DwAD+vwFgA8AA/hsAAAEEwADJpII/hXWIBgXAAHUXwADHAgBdA8AA/vECYAPAAQACYAPAAMmhATKFmWADwAEAAmADwADJoRYnwAB1GGqFymADwADKq8ABicYnwAB1GWqF5GADwADKq8ABicYnwAB1GmqF/mADwADKq8ABicYnwAB1G2qGGGADwADKq8ABicYnwAB1HGqGLmADwADKq8ABicYnwAB1HWqGQGADwADKq8ABicYnwAB1HmqGVmADwADKq8ABicYnwAB1H2qGa2ADwADKq8ABicYnwAB1IGqGhmADwADKq8ABicYnwAB1IWqGsGADwADIWsABidInwAB1ImqGzWADwADIWsABidInwAB1I2qG6mADwADIWsABidInwAB1JGqHCWADwADIWsABidInwAB1JWqHIWADwADIWsABidInwAB0omqHOGADwADIWsABidInwAB1JmqHSWADwADIWsABidInwAB1J2qHXmADwADIWsABidInwAB1KGqHcmADwADIWsABidInwAB1KWqHiGADwADIWsABidInwABiEGqHnGADwADIWsABidInwAB1KmqH62ADwADLZ4GJJ8AAdStqh/5gA8AAy2eBiQEFwADJrYI/gUyBUoFcAQAAA4FagVwAAAAAAAAAYAPAAMmhAT8BCQGBUsAAyXgAAAAABQbAAMmmgj+B0oHzgfoBAojxAAAAAQOB+oH6AAAAAAAAAF0DwADJjQJgA8ABAAJdA8AA/r8BYAPAAP4bAAbAAMmngj+ChoKngq4BAoH4AAAAAQOCroKuAAAAAAAAAF0DwADJjQJdA8AA/r8BYAPAAP4bYAPAAQACAAbAAMmqgj+Cs4LCg8IAAMAAdSwAAAABA4LOg8IAAAABAQGC4QAAAMAAdS1dA8AAu5cBXQPAAP6/AWADwAD+GwAAXQPAALrjAWADwAEAAgE+AUqC8wEcg44cgyUcgwsWgvougfjAAMmnnuEBAAGAgxDAZ46ZAMAAyZODXwIBYAPAAQBMAh+DKsABAGsAAAAANINGA4NGg4MAAAACAgKDVAAAAIKPYAPAAQBMAINjAAAAg/FgA8ABAAIAAGADwAEATAFKg24BNYNuAAABAGADwAEATAGBg27AZ48UNQAA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iMPAaqlkAMAA/0MAwAD/QQAGwADSeIJqiXWJd4nvAADAAHkEAAAAAQOJiInvAAAAAQEBiZIAACCD210DwADSbQFfAwAAAABfAwAAAT4DTomjiaYAAMAASk9gA8AA/zIBHImqFomoLoOAwADSb4GNAQABFomygImswGqqD4OAwADSbwDAAP9CTom9icAAAMAASlBgA8AA/zIBHInEFonCLr1QwADScIGNAQABFonMgInGwGqqD71QwADScADAAP9CSonTASaJ0wEcieIcid2BidrAaqorg40BAAGBid/AaqorAMAA/0NkAQABHInngonkwGqqZIONAQABgonpwGqqZADAAP9DAMAA/0FfAwAAAABqpP8AaqVNAGqmBgBqpmMAaqcTAGqnxgBqqGQAaqjrAGqp7QBqquoAAAAJAsAA0n6Ca4Hwgf+F+wfAAGpNAWqB/2ADwADNPsABgmAAAWABwAD/aAAAAAAFBsAA0oCCaJYHlg+XPwQBAAFqlg9gA8AAzT7AAYJgAAABA5YVlz8AAAABAAGWGwAAAMAASqxgA8AA/hsBagBgA8AA/yV5AGADwADSfgE+Ak6WLJYyAACCUmADwADlZwEeljzAANJPAQABIxyWTYCWSMBqq3BIAQABKwDAAP8/HpZgwADSUQAAAACAlm7AaqtwAWADwAD+GwBKlsMBNZbOAAABAGADwADSQgEfls7AANJXAQABgZbhwGqrlAA1AAAAAQBbARyW8IKW7sBqq+HAAHjvwADSGwAAAADAANJONQAAAAEAWwEclwWClwPAaqvhwAB478AA0hsAAAAAwADSTjUAAAABAFsBHJcagpcYwGqr4cAAeO/AANIbAAAAAMAA0k41AAAAAQBbARyXL4KXLcBqq+HAAHjvwADSGwAAAADAANJOggDAaqvhBsAA0oGCaJdNl1WXiQQBwAB5BQFql1VgA8AAzT7AAYJgAAABA5dil4kAAAAAAAAAYAPAANJ+AT4BSpdrAR+XdsAA0mQAAAAABsAA0oOCa4UFhQmFGQACoDYAAAABA4UQhRkAAAABAQGFFQAAAMAASnZgA8AA/hsAAGADwAD+GwAGwADShIJrhaqFsYW9AALAAHjzAAAAAQOFu4W9AAAAAAAAAGADwAD8zQAGwADShYJrheqF74X5AALAAHj0AAAAAQOF94X5AAAAAAAAAGADwAD8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gm6rSKtPq5MAACMAAAABA6tXq5MAAAAAAAAAYAPAAQACAUqrXQEkq5MDJ8AAeXweq3jAAP0lAQABFquFLsAAeWjAANK4wADTNgAng0gGwADTZIJuq5irn6vaAAXAAHl9wADSuAFqAGADwADNTMABl+cAAAEDq6+r2gAAAAEBAauwAAAAwAB5alsAAFsAAABq/RQAav2nAGr+NwBq/okAav7JAAAABALAANNogm6r36vurBwHwAB5fwAAAWABwAD/aAAAAAEFwADTbQAAAAAEAAADAAAAAAAAAAAAYAPAANNoAT8BCQEAwAD/fgAAAAABBsAA02uCbqwDrAysGgECwAB5gMAA0rgAAAABA6warBoAAAAAAAAAYAPAAQCAAAAAav8sAGr/WgAAAAECwADTboJurB+sJcAAXT0DwAB5gQAAAWABwADTMwACYAHAANVYYAHAANNoEgTAANNxgm6sjqycCcAAeYDAANK4AGADwAEAgAAEwADTcoJurKesshjAAHmCwADSuABgA8ABAHQABMAA03OCbqzIrM4YwAB5g8AA0rgAYAPAANUJAATAANOBgm6s3aznCYQfAGADwAD8VQAEwADTdIJurPatAAnAAHmEwADSuABgA8AA/FUABMAA03WCbq28rdoJwAB5hcAA0rgAYAPAAPxVAATAANN2gm6t6q3/CcAAeYbAANK4AGADwAD8VQAEwADTgoJurg6uFAmE6gBgA8AA/FUABMAA03eCbq4drioYwAB5h8AA0rgAYAPAAQCAAATAANN4gm6xoLGuGMAAeYjAANK4AGADwAEAdAErBMAA03mCbrPds/EYwAB5icAA0rgAYAPAANNuASsEwADTeoJutg+2HxjAAHmKwADSuABbASsEwADTe4JuuiG6JxjAAGsIwADSuABbASsEwADTfIJuu4a7mhjAAHmLwADSuABbASsEwADTfYJuvzC/RhjAAHmMwADSuABbASsEwADTfoJuwABDl8AAQ6QYwAB5jcAA0rgAXQPAAP7xAmADwAEAdGADwADVCQErBMAA03+CbsAAR5/AAEetGKnnwADSuABdA8AA/r8BYAPAANVvASsEwADTgIJuwABKksAASqAYwABL7MAA0rgAXQPAAP6/AWADwADVSwErAQXAANO1gm6uL64vr8IAgLXAANK4AAOuQq/CAAAACQkJrkoAAADA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AEPeIRzAAEPwFsAAQ+IuwAB5jcAA0rjAANN+SAEAASsAwAD/dUrAAEP5ARbAAEQALsAAeY3AANK4wADTfj9OwABEGMAARB4AAMAAeZpdA8AA/vECYAPAAQB0YAPAANUJAR7AAEQkwAD++AACYAPAAQB0YAPAANUJAABOwABET8AARFcAAISUXQPAAP6/AVsBHsAARFnAANOrAwADFsAARGkuhPXAANOSFsAARHAuwAB5h8AA0rjAANN3FsAARH8uwAB5aMAA0rjAANM2AEbAAESQwABErMAARJkAAACCalsAgcAARKPAaxPPPgE9HMAARLmAwABEtMBrE5OAvwIAAibAAES5ARbAAETBgsAARLrAaxQqwAB5YgBgA8ABAHQmwABEuQGCwABEz8BrFCpgA8AA1QkAwAD/Bk7AAETmwABE8wAAhORdA8AA/r8BWwEcwABE9S7AAHmbwADSuAIAAhbAAEUKLsAAeYfAANK4wADTdxbAAEUZLsAAeWjAANK4wADTNgDAANOsTsAARS7AAEU5AADAAHmcYAPAAQACAR7AAEU7wADSvgEAARbAAEU+LsAAeWLAANOGAEbAAEVPwABFdcAARVgAAACZNFsAgsAARWfAaxSOPgI9HMAARYmEwABFfcBrFRfAAHmdwADSuAEAAYPAAEWfwGsU3gAAPRzAAEW3gMAARbLAaxOTgL8CAAImwABFtwEWwABFxITAAEW4wGsVF8AAeWIAYAPAAQB0JsAARbcBhMAARdLAaxUXYAPAANUJAMAA/wZGwABF6sAARhLAAEXzAAAAqXpgA8AA1W8AFsAARgMuos3AANOWPgE9HMAARh+AwABGGsBrE5OAvwIAAhbAAEYthMAARiDAaxWowAB5YsAA1QuEwABGO8BrFagAwAD/BkrAAEZUARfAAEZbLsAAeY3AANK4H8AARnfAAMR0AQJgA8ABAHRgA8AA1QkBgMAARqbAaxOTAMAA034GwADTj4JuwABHBcAARw7AAEeBAQDAAHmewADSuAAAAAEDwABHK8AAR4EAAAAAAAAAYAPAAPxVAT4CScAARzEcwABHOxbAAEc1LoT1wADTkkgBAAEuAMAA1WRKwABHRAEqP0rAAEdyASkGwADTloJuwABHscAAR87AAEp8AQCizQAAAAEDwABH3MAASnwAAAAAAAAAXQPAAP6/AWADwADVbwE+AknAAEfiHMAAR/UWwABH5i6p58AA0rjAANN/SAEAASsAwAD+6T4HScAASAYiIRbAAEgLLsAAeYXAANK4wADTdQAWwABILS7AAHmewADSuMAA048+AUrAAEhVARfAAEhcLqnnwADSuGrAAEhtXQPAAP6/AWADwADVb8ABl/bAANN/Pz0XwABImS6p58AA0rgewABIrsAA+bkBAWADwADVbwGTAMAA039OwABI1sAASN0AAIP0XQPAAP6/AVsBHsAASN/AANOxAQABFsAASPsuwAB5aMAA0rjAANM2AE7AAEkawABJIAAAqW5gA8AA1VgBFsAASSIuwAB5n8AA05lOwABJQQAAAMAAeaBbAEXAAElPAcAASVjAAElaAABiYAPAAP4bAZMBHMAASWGDwABJX8BrF+1jAQABFsAASWqAwABJY8BrF4NhwAD+7wDAAP9JAYvAAElywGsX7RzAAEl0g8AASXLAaxftZAEAAZUAwAD/QT4CPYrAAEmEwGsX2h/AAEmRwADUAwMAAxzAAEmygMAASazAaxeDSwEAARzAAEm1g8AASbPAaxftZAEAAZQAwAD/QQDAAP7OJsAAScEBHMAAScGAwABJu8BrF4NLAQABg8AAScLAaxftAMAA/s5gA8ABAAKBwABJxsBrF7gAPRzAAEnlFsAASdYuqefAANK4wADTf1YBAAEmwABJ6QGCwABJ6cBrF9pgA8AA1W8AwAD+0D0XwABKAC6p58AA0rgfwABKH8AAwsgBAWADwADVbwEWwABKSC6p58AA0rjAANN/AMAA038/SsAASmMBFsAASmouqefAANK4wADTfwbAANOXgm7AAEqkwABKucAATEwBAIU4AAAAAQPAAErHwABMTAAAAAAAAABdA8AA/r8BYAPAANVLAT4CScAASs0cwABK4BbAAErRLsAAS+zAANK4wADTgEgBAAErAMAA/uk+AUnAAErxIhbAAEr1LsAAeYbAANK4wADTdgEiIRbAAEsaLsAAeYXAANK4wADTdQAWwABLPC7AAHmewADSuMAA048+AT0XwABLZS7AAEvswADSuGrAAEt2XQPAAP6/AWADwADVS8ABl/7AANOAPgE9F8AAS6MuwABL7MAA0rgfwABLuMAAwsgBAWADwADVSwEcwABMDB7AAEvmwADTsgEAARbAAEv8LsAAeYDAANK4wADT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U5wBFsAAU6cWwABTnC7AAHliwADThoPGwAEAfQbAANOggm7AAFO0wABTucAAVLkAAJtJAAAAAQPAAFPEwABUuQAAAAEBAcAAU9AAAACD22ADwADVSwAAYAPAAPxVAT4DScAAU90cwABT54DAAFPhwGshqkgBAAEWwABUAB7AAFPqwADSxgAAAACe0sAA1PgAwAD/dUrAAFQNASk/ScAAVB4cwABUKIDAAFQiwGshqkgBAAEWwABUQR7AAFQrwADSxgAAAADAAEZ3wADU+QDAAP91SsAAVEsBKj9KwABUXQEewABUZMAA0sQCAAIWwABUei7AAHmAwADSuMAA03EWwABUpibAAFSRAIDAAFSLwGshqmADwADTaMAAeYDAANK4wADTawAGwADToYJuwABUvsAAVMPAAFYsAADAAHmiAAAAAQPAAFTRwABWLAAAAAEBAcAAVN0AAACD22ADwADVSwAAYAPAAPxVAT4EScAAVOocwABU9IDAAFTuwGsitUgBAAEWwABVDR7AAFT3wADSxgAAAACe0sAA1PgAwAD/dUrAAFUaASk/ScAAVSscwABVNYDAAFUvwGsitUgBAAEWwABVTh7AAFU4wADSxgAAAADAAEZ3wADU+QDAAP91SsAAVVgBKj9OwABVcMAAVYMAAcAAeaNgA8ABAIABFsAAVaEmwABVjACAwABVhsBrIrVgA8AA02jAAHmAwADSuMAA02tKwABVtQEiHsAAVbzAANLEAgACFsAAVckuwAB5gMAA0rjAANNxgcAAVdnAayNKAAEewABV+MAA0sQCAAKBwABWBcBrI0oWwABWGS7AAHmAwADSuMAA03EABsAA06KCbsAAVjHAAFY2wABXiAAAm2oAAAABA8AAVkLAAFeIAAAAAQEBwABWTwAAAIPbYAPAANVYAABgA8AA/FUBPgVJwABWXCElwABWZoDAAFZgwGskB2ADwADVWD0wwABWdx/AAFaBwAD9TgEAAYDAAFaPwGskBwA/TsAAVqfAAFa4AADAAHmkYAPAANVYASbAAFanARbAAFbAgMAAVrrAayQHwAB5n8AA1VJgA8AA1VhOwABW5cAAVucAAID1YAPAANVYAS5DwABW8yEcwABW/ILAAFb6wGskkUgBAAErAMAA1WQ+Az2KwABXDcBrJJEmwABXDQEWwABXE4LAAFcRwGskkcAAeZ/A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wACgMMAApLkDwAB6DgAAAWABwADT1AABYAHAANWSBQTAANSUgm7AAKCfwACgpAmpbgBgA8AA1QkABMAA1JWCbsAAoLPAAKC7CYQeAGADwAD8VQAEwADUloJuwACgysAAoNEJhCAAYAPAAPxVAATAANSXgm7AAKDgwACg5wmEIgBgA8AA/FUABMAA1JmCbsAAo2TAAKNpGJKBwADSuABgA8AA1UsAAQXAANSlgm7AAKDswACg7MAAoZQAgLXAANK4AAPAAKECwAChlAAAAAcHB8AAoQMAAADAAHlqWwDAAKEVAAAAwAB5YmADwAEAAgDAAKEmAAAEqW5gA8AA1QkAwAChMgAABJKBYAPAANVLAMAAoUQAAASEHmADwAD8VQDAAKFTAAAEhCBgA8AA/FUAwAChYQAABIQiYAPAAPxVAABgA8AA1JIBPwYIAcAA1JSCAMBrcy8IAcAA1JmDAMBrcz8IAcAA1JWEAMBrc08IAcAA1JaFAMBrc18IAcAA1JeGAMBrc28JAMAAoXjAANPlAgACgMAAoXrAa3MQHsAAoYXAANK/AQABgcAAoYjAa3MdAAAFBsAA1JuCbsAAoZnAAKGiwAChxgEAh58AAAABA8AAoa3AAKHGAAAAAAAAAGADwAD8VQFKwAChsAElwAChthbAAKGwLqluwADUlGADwADVLAbAANSdgm7AAKHLwACh1MAAo1QBAMAAeYfAANK4AAAAAQPAAKHiwACjVAAAAAAAAABgA8ABAIABPgJOwACh7sAAofAAAa96YAPAANUJARbAAKHyLqluwADUlEnAAKIzJcAAojmAwACiN8BrdH1gA8AA024+AUrAAKJXARbAAKJgFMAAol7Aa3R9AAFgA8AA027AAHmHwADSuMAA03dJwACieiXAAKKAgMAAon7Aa3R9YAPAANRePgFKwACinwEWwACiqBTAAKKmwGt0fQABYAPAANRewAB5h8AA0rjAANRhScAAosIlwACiyIDAAKLGwGt0fWADwADUIT4BSsAAougBFsAAovEUwACi78BrdH0AAWADwADUIcAAeYfAANK4wADULj4BPTDAAKMTH8AAox3AAP2tAQABJMAAo0kCJ8AAeg8WwACjQi6pbsAA1JQABsAA1J6CbsAAo23AAKN8wACkAgEAgpQAAAABA8AAo4HAAKQCAAAAAAAAAGADwADVSwE+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SsAAsGsBIhzAALB9FsAAsHIuwAB5YsAA1L9IAQABasAAsIBgA8ABAHTAAZsLAMABAH8BJcAAsJKAwACwjMBrg7pgA8AA1L0AAGt+LgBrfmcAa36gAGt+2QBrfxIAa39nAGt/zABrgFMAa4CoAGuA/QBrgTgAa4FzAGuBuwBrglIAa4KjAGuDAwBrg44Aa4QbAAAAEQLAANTWgm7AALCwwACwtsAAuJUDwAB6HQAAAWABwAD/aAAAAwTAANTZgm7AALDXwACxBgTAAHoewADSuABgA8AA1O4BH8AAsPLAANLiAAAAAATAANTagm7AALObwACzzwTAAHofwADSuABdA8AA/fwBYAPAANNuAR/AALO5wAD+EAEBYAPAANNuASfAAHogAATAANTbgm7AALPuwAC0HQTAAHohwADSuABdA8AA/fwBYAPAANVLAR/AALQIwAD+EAEBYAPAANVLASfAAHoiAAEFwADU5wAAAAAEAAADAAAAAAAAAAAAYAPAANTWAT8BCQEAwAD/fgAAAAAIBsAA1N2CbsAAsQrAALEewACxWQABwAB6IwAAAAEDwACxMcAAsVkAAAAAAAAAYAPAANTuAT4BSsAAsToBGsAAsUHAANTZBsAA1N6CbsAAsY/AALGlwACyRAABwAB6JAAAAAEDwACxrMAAskQAAAABAQHAALG0AAAAwAB5amADwAD/aAAAYAPAANUcAT4BSsAAscUBIyXAALHWgMAAsczAa4XUYAPAAP4RH8AAsfDAANNnAQABFMAAsgbAa4XUAAFgA8AA/hEAH8AAsh/AANNZAQABgMAAsjbAa4XUAAFgA8AA00MGwADU4IJuwACyScAAslzAALKnAAXAAHolwADSuAFqAGADwADNTMABmxQAAAEDwACyccAAsqcAAAABAQHAALJ3AAAAg9ZgA8ABAIAAAGADwADVWAAGwADU4YJuwACyq8AAsr3AALMGAAXAAHonwADSuAFqAGADwADNTMABmygAAAEDwACy0cAAswYAAAABAQHAALLXAAAAg9ZgA8ABAIAAAGADwADVSwAGwADU4oJuwACzCsAAsxbAALN0AAXAAHopwADSuAFqAGADwADNTMABmzwAAAEDwACzLcAAs3QAAAACAgLAALMzAAAAg9ZgA8ABAIAAwACzOAAAAIU4WwAAYAPAAQCAAAbAANTkgm7AALQi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A8AA5toAAFwBPgE9MMAAoc8fwACh2cAA/a0BAAEnwAB3xAAGwADWyYJzwACiF8AAohzAAKKFAACApQAAAAEDwACiIsAAooUAAAABAQHAAKI1AAAggJZdA8AA/n0BYAPAAObaAABcAT4BPTDAAKJCH8AAokzAAP2tAQABJ8AAd8QABsAA1sqCc8AAoorAAKKPwACi/gAAnzoAAAABA8AAopXAAKL+AAAAAgICwACimgAAACdgA8AA/hsAwACiqQAAIICWYAPAAObaAABcAT4BPTDAAKK2H8AAosDAAP2tAQABJ8AAemcABsAA1suCc8AAowPAAKMIwACjhQAAoEcAAAABA8AAoxHAAKOFAAAAAgICwACjFgAAACdgA8AA/hsAwACjLwAAICldA8AA/n0BYAPAAObaAABcAT4BPTDAAKM9H8AAo0fAAP2tAQABJ8AAemcABsAA1syCc8AAo4rAAKOPwACkLAAAgK4AAAABA8AAo5PAAKQsAAAAAQABwACjmQAAAJt3YQMCYAPAAObaYAPAAObaYAPAAP4bAWoAYAPAAP8leQBcAT4CScAAo78cwACjy4DAAKPDwGxp1UgBAAErAMAA/3U+AT0wwACj3CfAAHpxPz0ewACkFcAA0M4CAWADwADm2gIugMAApCDAbGnVAAbAANbNgnPAAKQxwACkNcAApTQAAIC7AAAAAQPAAKQ8wAClNAAAAAIBAsAApEUAACCWe2ADwADm2gDAAKRTAAAAamADwAD+GwFqwACkW2ADwAD+GwkAYAPAAP4bAT4DScAApGUcwACkb4HAAKRpwGxqhYFtAQABFsAApHcuYcAA/u8AwAD/TD4BSsAApIcBHMAApI6UgcYAAAAAwAD+PknAAKSdHMAApKeBwACkocBsaoVjAQABkwDAAP9JPgE9icAApLTAbGqFkz9FwACkyQHAAKTSwACk1AAAYmADwAD+GwGBwACk1sBsaoUBHMAApN+CwACk3cBsaxtjAQABFsAApOYuYcAA/u8AwAD/SQGKwACk7sBsaxscwACk74LAAKTuwGxrG2QBAAGUAMAA/0E+AUnAAKT7HMAApQccwAClAy5LAQABgsAApQTAbGsbAMAA/s5IAQABgMAApQrAbGp1AMAA/3VKwAClEwGCwAClGsBsaxs/SsAApScBHMAApS6UgcYAAAAAwAD+PgbAANbO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b8/AANcggY0BAAGAwADWbcBspzIAwAD/QisBYAPAAP4bPR7AANaAwADV0AMAAxbAANaXFsAA1pEut/fAANW8wADXG8AAb8/AANc5gMAA1qbAbKcygcAA1rXAbKdOAErAANbCAR7AANbNwADkxAMAAxbAANbiLrf3wADVvMAA1xuAwADW6cBspzKBwADW+MBsp04ABsAA1yWCc8AA1wjAANcRwADYOgAAwAB6dgAAAAEDwADXG8AA2DoAAAACAALAANchAAAAqhxgA8AA/hsBasAA1zFgA8AA/hsJwADXOAAAAGFgA8AA/hsBagBgA8AA/yV5AGADwADlMAE+Az0jHMAA106BwADXR8BsqHtIAQABKwDAAP8/icAA10fAbKh7HMAA13ccwADXZhbAANdYLsAAb8/AANcggY0BAAGAwADXaMBsqF8AwAD/QoafAQABasAA14NgA8AA/hsVAMAA/0YrAWADwAD+Gz0ewADXmMAA1dADAAMWwADXsi7AAG/PwADXIIDAANfBwGyoXxzAANfXgcAA19DAbKh7g40BAAFqwADX4mADwAD+GxUAwAD/QwBKwADX+AEewADYA8AA4MIDAAMWwADYGS6398AA1bzAANcbgMAA2CDAbKhfgcAA2C/AbKh7AAbAANcmgnPAANg/wADYScAA2X4AAJiCAAAAAQPAANhUwADZfgAAAAIAAsAA2FoAAACqHGADwAD+GwFqwADYamADwAD+GwnAANhxAAAAYWADwAD+GwFqAGADwAD/JXkAYAPAAOU5AT4DPSMcwADYh4HAANiAwGypzUgBAAErAMAA/z+JwADYgMBsqc0cwADYuBzAANinFsAA2JkuwABvz8AA1yCBjQEAAYDAANipwGypsQDAAP9Chp8BAAFqwADYxWADwAD+GxUAwAD/RisBYAPAAP4bPR7AANjawADV0AMAAxbAANj0LsAAb8/AANcggMAA2QPAbKmxHMAA2RmBwADZEsBsqc2DjQEAAWrAANklYAPAAP4bFQDAAP9DAErAANk7AR7AANlGwADhEQMAAxbAANldLrf3wADVvMAA1xuAwADZZMBsqbGBwADZc8Bsqc0ABsAA1yeCc8AA2YPAANmUwADa5AAAwAB6dwAAAAEDwADZpsAA2uQAAAACAALAANmsAAAAqhxgA8AA/hsBasAA2bxgA8AA/hsJwADZwwAAAGFgA8AA/hsBagBgA8AA/yV5AGADwADlQwE+Az0jHMAA2dmBwADZ0sBsqyFIAQABKwDAAP8/icAA2dLAbKshHMAA2gIcwADZ8RbAANnjLsAAb8/AANcggY0BAAGAwADZ88BsqwUAwAD/QoafAQABasAA2h5gA8AA/hsVAMAA/0YrAWADwAD+Gz0ewADaM8AA1dADAAMWwADaRC7AAG/PwADXIIDAANpTwGyrBRzAANpxgcAA2mrAbKshg40BAAFqwADahGADwAD+GxUAwAD/QwBKwADamgEewADapcAA4WADAAMWwADawy6398AA1bzAANcbgMAA2srAbKsFgcAA2tnAbKshAAbAANcognPAANrpwADa88AA3G0AAMAAengAAAABA8AA2v7AANxtAAAAAgACwADbBAAAAKocYAPAAP4bAWrAANsUYAPAAP4bCcAA2xsAAABhYAPAAP4bAWoAYAPAAP8leQBgA8AA5UwBPgQ9IxzAANsxgcAA2yrAbKx1SAEAASsAwAD/P4nAANsqwGysdRzAANtiHMAA21EWwADbQy7AAG/PwADXIIGNAQABgMAA21PAbKxZAMAA/0KGnwEAAWrAANtvYAPAAP4bIQDAAP9GKwFgA8AA/hs9HsAA24TAANXQAwADFsAA254uwABvz8AA1yCAwADbrcBsrFkcwADbw4HAANu8wGysdYONAQABasAA289gA8AA/hshAMAA/0MAPR7AANvlwADV0QIAAoDAANv7wGysWWrAANwUYAPAAP4bIQBKwADcKgEewADcNcAA4a8DAAMWwADcTC6398AA1bzAANcbgMAA3FPAbKxZgcAA3GLAbKx1AAbAANcpgnPAANxywADcfcAA3fwAAMAAenkAAAABA8AA3InAAN38AAAAAgACwADcjwAAAKocYAPAAP4bAWrAANyfYAPAAP4bCcAA3KYAAABhYAPAAP4bAWoAYAPAAP8leQBgA8AA5VUBPgQ9IxzAANy8gcAA3LXAbK3sSAEAASsAwAD/P4nAANy1wGyt7BzAANztHMAA3NwWwADczi7AAG/PwADXIIGNAQABgMAA3N7AbK3QAMAA/0KGnwEAAWrAANz7YAPAAP4bIQDAAP9GKwFgA8AA/hs9HsAA3RDAANXQAwADFsAA3SouwABvz8AA1yCAwADdOcBsrdAcwADdT4HAAN1I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AYDAARLJwG2rNQDAANjnBsAA2OOCc8ABEtjAARLmwAETmgMAgL8AAAABA8ABEunAAROaAAAAAgICwAES7gAAACdgA8AA/hsAwAES+QAAIICWYAPAAP4bAABcAT4CScABEwYiHMABExCAwAETCsBtrAFjAQABkwDAAP9JARzAARMdgMABExfAbawBgW0BAAEWwAETIC5hwADXOwDAAP9MPgE9MMABEzAfwAETOsAA/XEDAAOAwAETS8BtrAEuJycAPz0cwAETbC7AAHrOwADVvAIAAoDAARN+wG2sAR7AAROFwADVzQEAAYHAAROPwG2sEAAAwADY6AbAANjkgnPAAROfwAETpMABFUUAAINkAAAAAQPAAROswAEVRQAAAAQDBMABE7EAAABqYAPAAP4bAMABE7wAAACCkGADwAD+GwDAARPKAAAgg9FdA8AA/n0BWwDAARPZAAAAoDxgA8AA/hsBasABE+VgA8AA/hsJAFwBPgFJwAET7yXAARP8gsABE/PAba0IYAPAAM1BPgQ9icABFBLAbaz4HsABFCPAAP1cAwADgMABFDPAbazpgcABFDrAbaz4FsABFEQuYcAA1zsATsABFFfAARReAABhYAPAAP4bARzAARRkgcABFGDAbaz4gY0BAAGAwAEUZsBtrOkAwAD/Qk7AARR3wAEUgQAAwAB6umADwAD+GwEcwAEUlhbAARSILqocwADV6mQBAAEcwAEUnoDAARSYwG2s6YONAQABasABFKtgA8AA/hshAMAA/0MAwAD/QT0cwAEUwi7AAHq5wADVvAQABBTAARTQwG2tCAIBYAPAAM1BhcABFNrAba2/hMABFOXAba2Lg8ABFO3Aba0aAMAA11g+AT0dwAEVEoNkBAAEgMABFRvAbazpgcABFSLAbaz4JsABFScBgsABFSfAba0IXQPAAP59AWADwAD+G4PAARUxwG2tGgDAANYiBsAA2OuCc8ABFX/AARWHwAEVxQEAwABwKgAAAAEDwAEVmsABFcUAAAAAAAAAYAPAAP4bAT4BSsABFaABasABFbJgA8AA/hshBsAA2OaCc8ABFenAARX0wAEWMwAAwAB6asAA1bwAAAABA8ABFf/AARYzAAAAAQEBwAEWBAAAAGFgA8AA/hsAAGADwADlVQE+AUrAARYSAR7AARYdwADlWQEAAYDAARYowG2vFgAG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wWADwAD+GwEWwABDUi5hwAD+70XAAENeAcAAQ2fAAENpAABiYAPAAP4bAZMBHMAAQ3CCwABDbsBue01jAQABgcAAQ3LAbnspAMAA/0kBisAAQ3nAbntNHMAAQ3eCwABDecBue01kAQABlADAAP9BPgFJwABDhBzAAEOJgMAAQ4jAbnsFIAEAARzAAEOOLksBAAGCwABDj8Bue00AwAD+zgAASsAAQ5QBKT9KwABDqwEqBsAA2kuCc8AAQ8DAAEPHwABE5AAAlo8AAAABA8AAQ9HAAETkAAAAAgEBwABD1wAAAJdUYQMBYAPAAPzNYAPAAPxVAAHAAEP1AAAglpBhAwBgA8AA/M0BagBgA8AA/yV5YAPAAPzNAT4ETsAARArAAEQOAACXwWADwAD+GwEWwABEFS5hwAD+70XAAEQhAcAARCrAAEQsAABiYAPAAP4bAZMBHMAARDODwABEMcBufHNjAQABgsAARDXAbnxPAMAA/0kBi8AARDzAbnxzHMAARDqDwABEPMBufHNkAQABlADAAP9BPgJOwABES8AARFMAAJZ7YAPAAPzNARzAAERZLksBAAGDwABEWsBufHMAwAD+zknAAERkHMAARGyAwABEaMBufA8gAQABhMAARG3AbnzMAABKwABEdwGEwABEfsBufMw/ScAARJEhHMAARJyBwABElcBufClIAQABKwDAAP91SsAARKUBHMAARLKBwABErMBufCkgAAAAAAA/PTDAAES6HsAARNXAANA4AAAAAAbAANpMgnPAAETpwABE8MAARiMAAJaUAAAAAQPAAET5wABGIwAAAAIBAcAARP8AAACXVGEDAWADwAD8zWADwAD8VQABwABFHQAAIJaQYQMAYAPAAPzNAWoAYAPAAP8leWADwAD8zQE+BE7AAEUywABFNgAAl8FgA8AA/hsBFsAART0uYcAA/u9FwABFSQHAAEVSwABFVAAAYmADwAD+GwEcwABFWoLAAEVWwG5934GNAQABlADAAP9CARzAAEVhg8AARV/Abn4DgW0BAAGTAMAA/0wBi8AARWnAbn4DHMAARWeDwABFacBufgOBjQEAAZQAwAD/Qj4CTsAARXjAAEWAAACWe2ADwAD8zQEcwABFhi5LAQABg8AARYfAbn4DAMAA/s5JwABFkRzAAEWZgMAARZXAbn2fIAEAAYTAAEWawG5+bgAAPgFKwABFrgGEwABFtcBufm4/ScAARdAhHMAARduBwABF1MBufblIAQABKwDAAP91SsAAReQBHMAARfGBwABF68BufbkgAAAAAAA/PTDAAEX5HsAARhTAANA4AAAAAAbAANpNgnPAAEYowABGL8AASDMAAJaXAAAAAQPAAEY6wABIMwAAAAIBAcAARkAAAACXVGEDAWADwAD8zWADwAD8VQABwABGXgAAIJaQYQMAYAPAAPzNAWoAYAPAAP8leWADwAD8zQE+B07AAEZzwABGegAAgXZbAStOwABGi8AARpkAAMAAcyVgA8AA/FUBKk7AAEaqwABGrgAAl8FgA8AA/hsBFsAARrUuYcAA/u9FwABGwQHAAEbKwABGzAAAYmADwAD+GwGTARzAAEbThcAARtHAbn/OYwEAAYTAAEbVwG5/qgDAAP9JAY3AAEbcwG5/zhzAAEbahcAARtzAbn/OZAEAAZQAwAD/QT4CTsAARuvAAEbzAACWe2ADwAD8zQEcwABG+S5LAQABhcAARvrAbn/OAMAA/s5JwABHBBzAAEcMgMAARwjAbn9DIAEAAYbAAEcNwG6AJwAAPgNJwABHIYPAAEclwG5/kz4BPTDAAEdAHsAAR1vAANA5AAAAAD89isAAR3jAbn+DhsAAR4HAboAnPYvAAEeSwG5/kyk/ScAAR7qDwABHvsBuf5NKwABHzQEmwABHzQGCwABH1MBuf4NgA8AA/M0/ScAAR+AhHMAAR+uBwABH5MBuf11IAQABKwDAAP91SsAAR/QBHMAASAGBwABH+8Buf10gAAAAAAA/PTDAAEgJHsAASCTAANA4AAAAAAbAANpOgnPAAEg4wABIP8AASHAAAJaOAAAAAQPAAEhIwABIcAAAAAEBAcAASE0AAAAnYAPAAP4bAABgA8AA/M0BPgFKwABIWgEcwABIZS5LAQABgMAASGbAboFZAMAA/s4GwADaT4JzwABIdcAASHrAAEjVAABWAAAAAQPAAEh9wABI1QAAAAEBAcAASIUAACCAlmADwAD8zQAAXAE+AT0wwABIkh/AAEicwAD9rQEAASfAAHfEAAbAANpQgnPAAEjawABI38AASUcAAIClAAAAAQPAAEjlwABJRwAAAAEBAcAASPcAACCAll0DwAD+fQFgA8AA/M0AAFwBPgE9MMAASQQfwABJDsAA/a0BAAEnwAB3xAAGwADaUYJzwABJTMAASVHAAEm/AACfOgAAAAEDwABJV8AASb8AAAACAgLAAElcAAAAJ2ADwAD+GwDAAElqAAAggJZgA8AA/M0AAFwBPgE9MMAASXcfwABJgcAA/a0BAAEnwAB6ZwAGwADaUoJzwABJxMAAScnAAEpFAACgRwAAAAEDwABJ0sAASkUAAAACAgLAAEnXAAAAJ2ADwAD+GwDAAEnvAAAgKV0DwAD+fQFgA8AA/M0AAFwBPgE9MMAASf0fwABKB8AA/a0BAAEnwAB6ZwAGwADaU4JzwABKSsAASk/AAEqvAACArgAAAAEDwABKU8AASq8AAAABAAHAAEpZAAAAm3dhAwJgA8AA/M1gA8AA/M1gA8AA/hsBagBgA8AA/yV5AFwBPgE9HsAASoLAANDOAgFgA8AA/M0CLjUAAAABAGEDAmADwAD8zWADwAD8zWADwAD+GwGAwABKjcBug0AjHMAASpWBAMBug4JIAQABKwAAasAASqNhAwJdA8AA/GEBW10DwAD8YQFbYAPAAP4bwAGH2oEAwG6DggFhAwJgA8AA/M1gA8AA/M1gA8AA/hsABsAA2lSCc8AASrTAAEq4wABLtgAAgLsAAAABA8AASr/AAEu2AAAAAgECwABKxwAAIJZ7YAPAAPzNAMAAStUAAABqYAPAAP4bAWrAAErdYAPAAP4bCQBgA8AA/hsBPgNJwABK5xzAAErxgcAASuvAboQygW0BAAEWwABK+S5hwAD+7wDAAP9MPgFKwABLCQEcwABLEJSBxgAAAADAAP4+ScAASx8cwABLKYHAAEsjwG6EMmMBAAGTAMAA/0k+AT2JwABLNsBuhDKTP0XAAEtLAcAAS1TAAEtWAABiYAPAAP4bAYHAAEtYwG6EMgEcwABLYYLAAEtfwG6EyGMBAAEWwABLaC5hwAD+7wDAAP9JAYrAAEtwwG6EyBzAAEtxgsAAS3DAboTIZAEAAZQAwAD/QT4BScAAS30cwABLiRzAAEuFLksBAAGCwABLhsBuhMgAwAD+zkgBAAGAwABLjMBuhCIAwAD/P0rAAEuVAYLAAEucwG6EyD9KwABLqQEcwABLsJSBxgAAAADAAP4+BsAA2lWCc8AAS7vAAEu/wABM2gAAlrUAAAABA8AAS8rAAEzaAAAAAgECwABL0gAAIJZ7YAPAAPzNAMAAS+AAAABqYAPAAP4bAWrAAEvoYAPAAP8leQBgA8AA/hsBPgNJwABL9SIcwABL/4HAAEv5wG6FvkgBAAErAMAA/z8BHMAATBCBwABMCsBuhb6BbQEAARbAAEwYLmHAAP7vAMAA/0w+AT2JwABMKMBuhb4cwABMPBbAAEw1LmHAAP7vgY0BAAGUAMAA/0JJwABMTBzAAExWgcAATFDAboW+YwEAAZMAwAD/ST4BSsAATGMBHMAATGqUgcYAAAAAwAD+Pj9FwABMeAHAAEyBwABMgwAAYmADwAD+GwGBwABMhcBuhb4BHMAATI6CwABMjMBuhoiBbQEAAZMAwAD/TAGKwABMlMBuhogcwABMlYLAAEyUwG6GiIGNAQABlADAAP9CPgFJwABMoRzAAEytHMAATKkuSwEAAYLAAEyqwG6GiADAAP7OSAEAAYDAAEywwG6FrgDAAP8/SsAATLkBgsAATMDAboaIP0rAAEzNARzAAEzUlIHGAAAAAMAA/j4GwADaVoJzwABM38AATObAAE1BAACGLgAAAAEDwABM8MAATUEAAAAAAAAAYAPAAPzNAT4BPTDAAEz5H8AATQPAAP2tAQABJ8AAd8UABsAA2leCc8AATUbAAE1NwABNrwAAoEYAAAABA8AATVXAAE2vAAAAAQEBwABNWgAAACdgA8AA/hsAAGADwAD8zQE+AT0wwABNZx/AAE1xwAD9rQEAASfAAHfFAAbAANpYgnPAAE20wABNucAATi4AAJdTAAAAAQPAAE3EwABOLgAAAAEBAcAATcoAAACXVGEDAWADwAD8zWADwAD8VQAAXAE+AT0wwABN5h/AAE3wwAD9rQEAASfAAHfFAAbAANpZgnPAAE4zwABOOMAATq0AAJdWAAAAAQPAAE5DwABOrQAAAAEBAcAATkkAAACXVGEDAWADwAD8zWADwAD8VQAAXAE+AT0wwABOZR/AAE5vwAD9rQEAASfAAHfFAAbAANpkgnPAAE6ywABOvcAATxcBAIMeAAAAAQPAAE7DwABPFwAAAAAAAABgA8AA/M0BPgJJwABOyRzAAE7UFsAATs0uYcAA/u+AlwEAAZMAwAD/S0rAAE7ZARzAAE7kLksBAAGTAMAA/s4/PTDAAE7tHsAATwjAANA4AAAAAAbAANplgnPAAE8cwABPJ8AAT4kBAIHqAAAAAQPAAE8swABPiQAAAAAAAABgA8AA/M0BPgJJwABPMhzAAE89FsAATzYuYcAA/u+AlwEAAZMAwAD/S0rAAE9CARzAAE9NLksBAAEcwABPVRbAAE9OLmHAAP7vgY0BAAGUAMAA/0IAwAD+zj89MMAAT18ewABPesAA0DgAAAAABsAA2maCc8AAT47AAE+ZwABQMAEAgMMAAAABA8AAT6DAAFAwAAAAAAAAAGADwAD8zQE+A0nAAE+mHMAAT7EWwABPqi5hwAD+70gBAAGUAMAA/z9KwABPtwEcwABPwi5LAQABkwDAAP7OP0nAAE/LHMAAT9YWwABPzy5hwAD+70gBAAGTAMAA/z89MMAAT9wewABP98AA0DgAAAAAPz0wwABQCB7AAFAjwADQOQAAAAAGwADaWoJzwABQNcAAUDrAAFC4AACgSQAAAAEDwABQQMAAULgAAAACAgLAAFBFAAAAJ2ADwAD+GwDAAFBdAAAgg9FdA8AA/n0BYAPAAPzNAABcAT4CTsAAUHPAAFB3AAGCkGADwAD+GwEcwABQiRbAAFCCgcAAUHnAboqiYcAA/qBkAQABgMAAUIvAboqTAMAA/0E9HMAAUJYug2QDAAOAwABQn8BuipOCwABQpsBuir+BwABQq8BuiqIAwAD+5AbAANpbgnPAAFC9wABQwsAAUXoAAJwHAAAAAQPAAFDLwABRegAAAAMCA8AAUNAAAABqYAPAAP4bAMAAUNsAAACCkGADwAD+GwDAAFDoAAAgwABEdGADwAD8zQFqAGADwAD/JXkAXAE+Aj0ewABRBcAA/VwDAAOAwABRFcBui1KBwABRHMBui2EWwABRJi5hwAD+7wBFwABRMwHAAFE8wABRPgAAYmADwAD+GwGAwABRQMBui1IBHMAAUUmDwABRR8Bui8JjAQABgcAAUUvAbothAMAA/0kBi8AAUVLAbovCHMAAUVCDwABRUsBui8JkAQABlADAAP9BPgE9HMAAUWEugL8CAAKDwABRYsBui8KCwABRZ8Bui3EAwAD+zwAAbmjwAG5pYwBuaY0Abmm1AG5p3QBuaioAbmqLAG5q3gBua1MAbmveAG5s8ABubjAAbm9KAG5wHABucW0AbnHQAG5yKwBuco4AbnLpAG5zTABuc5EAbnPcAG50eABudLwAbnUkAG51awBudiwAbneVAG54xwBueUgAbnnQAG562wBue+UAbn11AG5/GQBugS8AboGQAG6B5gBugkQAboKqAG6DFgBug/gAboWEAG6HPABuh4gAbofjAG6IQwBuiKMAbokhAG6JuQBuimkAbosoAG6MRQAAADQCwADaaoJzwAEt/cABLh3AATKNN8AAeuQAAAFgAcAA2jAAAV0BwADWWwFgA8AA5YIAAQXAANpyAAAAAAQAAAMAAAAAAAAAAABgA8AA2moBPwEJAADAANpdAAAAAAQGwADabIJzwAEuHcABLh0AABCgPwDAANXfwADV3wEDAAAAAAADAwMAAAAAamADwAD+GwAAAAAAgpBgA8AA/hsAAAAAIIPRXQPAAP59AVsAAFwBSgABHQCgPwMAA4AAwG6NooEAwG6NroIAwG6NuwDAANXfBsAA2m6Cc8AAUfHAAFH9wABSFAACwAB6asAA1bwAAAABA8AAUgjAAFIUAAAAAQEBwABSDQAAAGFgA8AA/hsAAGADwADlggAGwADab4JzwABSGcAAUh7AAFr4AACDZAAAAAEDwABSJsAAWvgAAAAEAwTAAFIrAAAAamADwAD+GwDAAFI2AAAAgpBgA8AA/hsAwABSTAAAIJaDXQPAAP59AWADwAD8zQDAAFJdAAAAoDxgA8AA/hsBasAAUmlgA8AA/hsJAFwBPgtJwABSiCIiHMAAUo6TgJcBAAGAwABSkMBujl8AwAD/SwEcwABSn4DAAFKZwG6OX4CXAQABgcAAUqHAbo5uAMAA/0sBHMAAUqyBwABSqMBujm6AlwEAARbAAFKuLmHAAP7vAMAA/0s+Aj0ewABSycAA/VwDAAOAwABS2cBujl+BwABS4MBujm4WwABS5S5hwAD+7wBAKsAAUw3AAFMSAD9JwABTHxzAAFMtg8AAUyPAbo6VYwEAAZMAwAD/ST4BPTDAAFM6H8AAU0vAAP1lBAAEg8AAU1HAbo6VkysnoDwAP07AAFOEwABTigABgO5gA8AA/hsBHMAAU5CBwABTjMBujm6BjQEAAYDAAFOSwG6OXwDAAP9CScAAU50cwABTuxzAAFOuFsAAU6eCwABTosBujn5hwAD+oIGNAQABg8AAU7DAbo6VAMAA/0JjAQABhMAAU73Abo+XAMAA/0k+AT0wwABTzB7AAFPnwADQOgAAAAA/ScAAU/wcwABUBoTAAFQAwG6Pl0gBAAGTAMAA/z9KwABUDAA/ScAAVBklwABUIoLAAFQdwG6OfmADwADV0j4CTsAAVKzAAFS8AAHAAHprYAPAANXSASbAAFTDAILAAFS+wG6OfmADwADV0knAAFTcHMAAVPgWwABU5S7AAHAqwADWJkgBAAEWwABVC4XAAFT7wG6QaMAAcCrAANXVAMAA/z8+AUnAAFUpIhzAAFU0hMAAVS7Abo+XYwEAATcKAMAA/0kAIRzAAFVVFsAAVU6FwABVPsBukGiCj8AA1ddIAQABFsAAVV0ugo/AANYoAMAA1yM+Aj0ewABVeMAAzS4FAAUmwABVggCCwABVfcBujn5dA8AA/r8BYAPAAPzNg8AAVZPAbo6VLoDAAFWkwG6OX4TAAFWrwG6PlwBKwABVvQBJwABV1BzAAFXqFsAAVeQWwABV3S6Cj8AA1ii398AA1bzAANcbwABwKcAA1bwGAAYcwABWHBzAAFYHgMAAVgHAbo5fg40BAAEWwABWCS7AAHAqwADWJgDAAP9DZAEAARbAAFYjLqocwADWJwDAAP9BHMAAVkSEwABWPsBuj5eDjQEAARbAAFZGLsAAcCrAANYmAMAA/0MWwABWfRbAAFZ2hcAAVmbAbpBogo/AANXXt/fAANW8wADXGxzAAFavHMAAVpqDwABWkMBujpWDjQEAARbAAFacLsAAcCrAANYmAMAA/0NkAQABFsAAVsGFwABWscBukGiqHMAA1dYAwAD/QR7AAFbkwADNOwEAAS4AHsAAVwXAAM07AQABgsAAVwvAbo5+AADAANXiPgFKwABXHwA/ScAAVz4cwABXWRbAAFdShcAAV0LAbpBogo/AANXXSAEAARbAAFdhLoKPwADWKADAANcjPgVOwABYN8AAWEIAAcAAemxdA8AA/r8BYAPAAPzNASbAAFhJAILAAFhEwG6Ofl0DwAD+vwFgA8AA/M1OwABYaMAAWHMAAcAAem1gA8AA5YIBHMAAWHUuwAB6asAA1bwBAAGEwABYgcBuj5cAwADWXkXAAFiRAcAAWJrAAFicAABiYAPAAP4bAZMBHMAAWKMUwABYocBuk0QIAGMBAAGEwABYpcBuj5cAwAD/SQEVwABYrMBuk0QIHMAAWK0UwABYrMBuk0QIAGQBAAGUAMAA/0E+AT0cwABYx4fAAFi9wG6TCoC/AgACFMAAWMjAbpNECAAcwABY14bAAFjNwG6S0UsBAAEcwABY4oPAAFjYwG6OlWQBAAEUwABY5MBuk0QIAADAAP9BAMAA/s4AwAD+z0XAAFj6AcAAWQPAAFkFAABiYAPAAP4bAYDAAFkHwG6OXwEcwABZEBTAAFkOwG6UBAgAYwEAAYHAAFkSwG6ObgDAAP9JARXAAFkXwG6UBAgcwABZGBTAAFkXwG6UBAgAZAEAAZQAwAD/QT4BPRzAAFksLoC/AgACFMAAWS3AbpQECAAcwABZPIfAAFkywG6TCksBAAEcwABZPxTAAFk9wG6UBAgAgY0BAAGAwABZQcBujl8AwAD/QgDAAP7OAMAA/s9KwABZWwA/P07AAFl7AAAAoD1dA8AA/r8BWwBOwABZjgAAAKA+YAPAAP4bAEnAAFmeJcAAWaeCwABZosBujn5dA8AA/r8BYAPAAPzNPgI9jcAAWcDAbpTIFMAAWczAbo5+AgFdA8AA/r8BYAPAAPzNPY7AAFnYwG6U24PAAFnlwG6OlT4CPY3AAFoDwG6UyBzAAFokHMAAWhSCwABaD8Bujn6WhAEAAYPAAFoZwG6OlQDAAP6XgK0BAAABhXYqwAD+kz2OwABaQ8BulNuTScAAWl0cwABadBzAAFpshsAAWmHAbpTbZAEAAYTAAFpuwG6PlwDAAP9BgJcBAAEWwABagIXAAFp2wG6UyGHAAP7vAMAA/0s+AT0wwABakB7AAFqrwADQOgAAAAA/PR7AAFrFwADNLgUABYXAAFrKwG6UyIbAAFrVwG6U2y6AwABa58Bujl+EwABa7sBuj5cABsAA2nCCc8AAWv3AAFsJwABb9gAAgVgAAAABA8AAWxDAAFv2AAAAAgECwABbFQAAAGpgA8AA/hsAwABbIQAAAIKQYAPAAP4bAWoAYAPAAP8leQBgA8AA5YIBPgU9icAAWy3AbpZVHsAAWz7AAP1cAwADgMAAW07AbpZGgcAAW1XAbpZVFsAAW18uYcAA/u8ATsAAW3DAAFt3AABhYAPAAP4bARzAAFt9gcAAW3nAbpZVgY0BAAGAwABbf8BulkYAwAD/Qk7AAFuWwABbnQAAgXZgA8AA5YIBHMAAW58uwAB6asAA1bwBAAGCwABbq8Bulq0AwADWXj0cwABbv4PAAFu4wG6W4YNkBAAEk4LAAFvLwG6WrS6AwABb2cBulkYAwAD+5ErAAFvlAYPAAFvswG6W4QAAbo17AG6N7gBujjUAbpYcAG6XTwAAAAQCwADac4JzwAEt/cABLh3AATKNA8AAeuUBasABLf5gA8AA/BzAAYJAAAFgAcAA2moAAWABwADlggAACAbAANp2gnPAAS6awAEuosABLt4EAcAAeEnAANW8AAAAAQPAAS6+wAEu3gAAAAAAAABgA8AA2nMBPgE9MMABLscnwABi3gbAANp4gnPAAS8TwAEvWsABL/gDAEsBasABLxRgA8AA/BzAAZY0AAABA8ABL1zAAS/4AAAAAQEBwAEvYQAAACdgA8AA/hsAAGADwAD8zQE+AknAAS9uIhzAAS94gMABL3LAbpggYwEAAZMAwAD/SQEcwAEvhYDAAS9/wG6YIIFtAQABFsABL4guYcAA1zsAwAD/TD4BPTDAAS+YH8ABL6LAAP1xAwADgMABL7PAbpggLicnAD9KwAEv1AEcwAEv2y7AAHrmwADVvAEAAYDAAS/uwG6YIADAANp8BsAA2nmCc8ABL/3AATALwAEwuAMAgL8AAAABA8ABMA7AATC4AAAAAgICwAEwEwAAACdgA8AA/hsAwAEwIQAAIICWYAPAAPzNAABcAT4CScABMC4iHMABMDiAwAEwMsBumOxjAQABkwDAAP9JARzAATBFgMABMD/AbpjsgW0BAAEWwAEwSC5hwADXOwDAAP9MPgE9MMABMFgfwAEwYsAA/XEDAAOAwAEwc8BumOwuJycAPz0cwAEwlC7AAHrnwADVvAIAAoDAATCnwG6Y7IHAATCuwG6Y+wDAANp9BsAA2oCCc8ABMPLAATD6wAExOQEAwABwKgAAAAEDwAExDcABMTkAAAAAAAAAYAPAAP4bAT4BSsABMRMBasABMSZgA8AA/huBVwbAANp7gnPAATFdwAExacABMakAAMAAemrAANW8AAAAAQPAATF0wAExqQAAAAEBAcABMXkAAABhYAPAAP4bAABgA8AA5YIBPgFKwAExhwEewAExksAA5YYBAAGAwAExnsBumhYABsAA2nyCc8ABMa7AATG1wAEyFAAAwAB65sAA1bwAAAABA8ABMcfAATIUAAAAAQEBwAExzAAAACdgA8AA/hsAAGADwAD8zQE+AUrAATHZARzAATHgLsAAeqXAANW8AQABHMABMfKAwAEx7MBumnuDjQEAAWrAATIAYAPAAP4bgVcAwAD/QwDAANdOBsAA2n2Cc8ABMhnAATIewAEyiwAAwAB658AA1bwAAAABA8ABMjDAATKLAAAAAgICwAEyNQAAACdgA8AA/hsAwAEyQwAAAICWYAPAAPzNAABcAT4BPRzAATJQLsAAeqfAANW8AgACHMABMmKAwAEyXMBumwWDjQEAAWrAATJwYAPAAP4bgVcAwAD/Q4HAATKBwG6bFADAANdPBsAA2n6Cc8ABLh3AAS4dAAAQoD8AwADV38AA1d8BAwAAAAAAAwMDAAAAAGpgA8AA/hsAAAAAAIKQYAPAAP4bAAAAACCD0V0DwAD+fQFbAABcAUoAAR0AoD8DAAOAAMBum5WBAMBum6GCAMBum64AwADV3wAAbpejAG6X6ABumMIAbpmdAG6Z5gBumksAbprVAG6bbgBum+EAAAAIAsAA2oGCc8ABM9DAATPwwAE4YDfAAHroAAABYAHAANc1AAFgAcAA1iQAAQXAANquAAAAAAQAAAMAAAAAAAAAAABgA8AA2oEBPwEJAADAANdaAAAAADQGwADag4JzwAEz8MABM/AAABCgPwDAANXfwADV3wEDAAAAAAADAwMAAAAAamADwAD+GwAAAAAAgpBgA8AA/hsAAAAAIIPRXQPAAP59AVsAAFwBSgABHQCgPwMAA4AAwG6ch4EAwG6ck4IAwG6coADAANXfBsAA2rCCc7SltK20vwECwABwKgAAAAEDtL+0vwAAAAAAAABgA8AA/hsABsAA2rGCc7TDtMu02AECqhwAAAABA7TYtNgAAAAAAAAAYAPAAP4bAAbAANqygnO03LTstPIBAoKPAAAAAQO08rTyAAAAAAAAAGADwADXGAAGwADahIJztPe1A7UzAACWmwAAAAEDtQ+1MwAAAQAAgnpgA8AA/2gBWwAAAABdA8AA/n0BXwMAAAFKtRUBH7UZwADQKwEBXwMAAAEuAAbAANqFgnO1OLVJta8AAJaSAAAAAQO1U7WvAAAAAQEBtWUAACCD210DwAD+fQFgA8AA/M0AAF0DwAD+fQFgA8AA/M0BSrV1AR61ecAA0AMCAWADwAD8zQIugLWpwG6dugAGwADahoJztbS1vLXnAACWjQAAAAEDtcO15wAAAQAAl05gA8AA/2gBWwAAAABdA8AA/r8BXwMAAAFKtckBHrXOwAD+ygECYAPAAPzNXwMAAAEuAAbAANq5gnO167X0tmACAIMeAAAAAQO1+bZgAAAAAQEBtgEAACCAlmADwAD8zQAAXAE+Akm2Dhy2Hha2Fy5hwAD+70gBAAGTAMAA/z89MLYkH7YuwAD9cQIAApMuAD89HLZRLoC/AgACk4C2V8Bunm4AwAD+zwbAANq6gnO2ZbZutucCAIHqAAAAAQO2crbnAAAAAQEBtnoAACCAlmADwAD8zQAAXAE+Akm2hxy2lxa2kC5hwAD+70gBAAGTAMAA/z89MLadH7anwAD9cQIAApMuAD89HLbKLoC/AgACHLbXFrbQLmHAAP7vgY0BAAGUAMAA/0KAtt7Abp7jAMAA/s8GwADah4Jztuy28LesAACgRAAAAAEDtvq3rAAAAAIBArcAAAAAl1RhAwFgA8AA/M1gA8AA/FUAtxsAAABqYAPAAP4bAWq3I2ADwAD+GwkAYAPAAP4bAT4DSbctHLc3gbcxwG6fhWMBAAGTAMAA/0k9ibc8wG6fhZM/RbdLAbdUt1YAAGJgA8AA/hsBgbdYwG6fhQEct2GCt1/Abp/LYwEAARa3Yy5hwAD+7wDAAP9JAYq3a8Bun8sct2yCt2vAbp/LZAEAAZQAwAD/QT4BSbd4HLeAgLd8wG6fbiABAAEct4UuSwEAAYK3hsBun8sAwAD+zgAASreLAYK3ksBun8s/SrefARy3ppSBxgAAAADAAP4+BsAA2oiCc7ext7W4lwAAoEUAAAABA7fDuJcAAAACAQK3yQAAAJdUYQMBYAPAAPzNYAPAAPxVALfkAAAAamADwAD+GwFqAGADwAD/JXkAYAPAAP4bAT4DSbfyIhy3/IG39sBuoJdIAQABKwDAAP8/ARy4DYG4B8BuoJeBbQEAARa4FS5hwAD+7wDAAP9MPYm4HcBuoJccuDEWuCouYcAA/u+BjQEAAZQAwAD/Qj9FuDoBuEO4RQAAYmADwAD+GwGBuEfAbqCXARy4UIK4TsBuoRGBbQEAAZMAwAD/TAGKuFbAbqERHLhXgrhWwG6hEYGNAQABlADAAP9CPgFJuGMcuGuAuGfAbqCAIAEAARy4cC5LAQABgrhxwG6hEQDAAP7OAABKuHYBgrh9wG6hET9KuIoBHLiRlIHGAAAAAMAA/j4GwADaiYJzuJy4srmLAwBkAAAAAQO4s7mLAAAAAQEBuMEAACCD210DwAD+vwFgA8AA/M0AAF0DwAD+vwFgA8AA/M0BPgJOuNK43gAAg15gA8AA/hsBHLjsFrjlLmHAAP7vZAEAARa49IC47sBuob9hwAD+7wDAAP9BSrkAATW5DwAAAQBdA8AA/r8BYAPAAPzNATG5D2ADwAD8zQA1AAAAAQBbARe5GoK5GMBuoh5hgbkjwG6h5sAA/u01AAAAAQBbARy5N4K5NcBuoh6DZAMAA5MWuUguYcAA/u8uAMAA/uQ1AAAAAQBbARy5XoK5XMBuoh6DZAMAAxa5bC5hwAD+74G5dMBuoeaAuYHAbqG/AMAA/uSCAMBuoh4GwADaioJzuZC5lbo0AACDHAAAAAEDuZ26NAAAAAEBAbmlAAAAlntgA8AA/2gAAGADwAD8VQE+A065uLm8AACXwWADwAD+GwEWucMuYcAA/u9Fuc8Budi52gAAYmADwAD+GwGTARy54YK538Buow9jAQABgbnjwG6i8wDAAP9JAYq56sBuow8cueiCuerAbqMPZAEAAZQAwAD/QT4BSbn1HLoBHLn9LksBAAGCuf7AbqMPAMAA/s5IAQABgLoEwG6i2gDAAP8/SroNASk/SrokASoGwADai4Jzujm6PrsnAACgMwAAAAEDukW7JwAAAAEAAbpOAAAAoDRgA8AA0n4BagBgA8AA/yV5AFwBPgM9Ixy6ZIC6XcBuo6xIAQABKwDAAP91iLpdwG6jrB66bMAA0oAAAAAAKwFgA8AA0n5Oun66gAAAYmADwAD+GwEWuocuYcAA/u9DupMcupyBuprAbqP5gJcBAAGUAMAA/0s+BU66rbqxAACgNWADwAD+GwEcurqAurPAbqOsoDYBAAGBusLAbqP5AMAA0oM9ibrMwG6j+Ry6zoG6zMBuo/mBjQEAAZQAwAD/Qk663rriAACgN2ADwAD8zQEcuuguSwEAAYG66cBuo/kAwAD+zj0cuvcugL8CAAKBuvjAbqP5HLsBLksBAAGCuwLAbqQrAMAA/s4AwAD+zz0cuxIugL8CAAKCuxPAbqQrg7sawG6kcwDAAP7PBsAA2oyCc7ssuz27hgAAgaUAAAABA7tCu4YAAAABAQG7SAAAAIGmYQMBYAPAAPzNYAPAAPxVAABdA8AA/n0BYAPAAPzNAUq7ZAEfu2jAAM9NAgFgA8AA/M0CLoC7hMBupP0ABsAA2o2Cc7uLu5y70gAAlpkAAAABA7ugu9IAAAABAQG7pQAAAIOoYAPAAP4bAABdA8AA/n0BYAPAAPzNAUq7qwEfu6/AAM8IAwFgA8AA/M0DLpOAu9DAbqVgAAbAANqOgnO717vovD8AAJaaAAAAAQO78bw/AAAAAQEBu/cAAACXVGEDAWADwAD8zWADwAD8VQAAXQPAAP59AWADwAD8zQFKvBYBH7wawADPkwIBYAPAAPzNAi6AvDrAbqW7AAbAANqPgnO8RLxVvI4AAJaEAAAAAQO8WbyOAAAAAQEBvF4AAACDqGADwAD+GwAAXQPAAP59AWADwAD8zQFKvGQBH7xowADPCAMBYAPAAPzNAy6AvIbAbqYeKwAGwADakIJzvJO8pLz7AACWmAAAAAEDvK28+wAAAAEBAbyzAAAAl1RhAwFgA8AA/M1gA8AA/FUAAF0DwAD+fQFgA8AA/M0BSrzSAR+81sAAz8sCAWADwAD8zQIugLz2wG6meQAGwADas4JzvQC9Fb1HAQCY4AAAAAEDvR69RwAAAAAAAABdA8AA/n0BYAPAAPzNAUq9IQEfvSXAANC5AQFgA8AA/M0BLgAGwADakYJzvUy9Xb2FAACcwgAAAAEDvWK9hQAAAAAAAABdA8AA/vECYAPAAP4bYAPAAPzNAUq9aAEfvWzAANCvAQFgA8AA/M0BLgAGwADakoJzvYq9m74xAACgOQAAAAEDvaO+MQAAAAIBAr2oAAAAamADwAD+GwC9tAAAAIKQYAPAAP4bAWoAYAPAAP8leQBdA8AA/n0BYAPAAPzNAT4CPR69y8AA/VwDAAOAvdvAbqdsgb3iwG6neRa97C5hwAD+7wBKvfkBH74EwADPCAMBYAPAAPzNAy6AviLAbqdsgb4pwG6neQAGwADatIJzvja+S757AQBcAAAAAQO+VL57AAAAAAAAAF0DwAD+uAFgA8AA/M0BSr5XAR++W8AA4HEBAWADwAD8zQEuAAbAANqTgnO+gL6NvusAAICtAAAAAQO+k77rAAAAAQAAAb6aAAAAhXZgA8AA/FUBar6kYAPAAPxVd10DwAD+vwFgA8AA/M0BPgFKvrEBHr68wAD+xQIBYAPAAPzNAS4BhXaAvt7AbqhNBsAA2pSCc77wvvy/LwAAlXEAAAABA78Bvy8AAAAAAAAAXQPAAP+zAWADwAD8zQE+AUq/CgEevxXAAMMjAQFgA8AA/M0BLgAGwADalYJzvzS/Ob+0AACD/QAAAAEDv0C/tAAAAAEBAb9GAAAAgaZhAwFgA8AA/M1cAABcAT4CTr9jv2cAAJfBYAPAAP4bARa/bi5hwAD+70W/egG/g7+FAABiYAPAAP4bAZMBHL+Mgr+KwG6pL2MBAAGBv47AbqkTAMAA/0kBir+TwG6pLxy/lIK/k8BuqS9kAQABlADAAP9BPgE9HL+hgL+gwG6o+yABAAEcv6YuSwEAAYK/p8BuqS8AwAD+zgAABsAA2paCc7+5v8DAAEDKAACWlQAAAAEDv8bAAEDKAAAAAQEBv84AACCHOWEDAmADwAD8zWADwAD8zWADwAD8zQAAYAPAAPzNAT4FTr//wABAAwAAl8FgA8AA/hsBFsAAQAouYcAA/u9JwABAFhzAAEAegcAAQBrAbqnoSAEAAZMAwAD/Pz0wwABAJB7AAEA/wADQOAAAAAA/TsAAQFTAAEBaAACAlmADwAD8zQEcwABAYC5LAQABkwDAAP7ORcAAQGkBwABAcsAAQHQAAGJgA8AA/hsBlAEcwABAe4PAAEB5wG6qX2MBAAGBwABAfcBuqegAwAD/SQGLwABAhMBuql8cwABAgoPAAECEwG6qX2QBAAGUAMAA/0E+AT2KwABAj8BuqjYcwABAnoDAAECXwG6pwCACAAKCwABAn8BuqjYcwABAqi5LAQABg8AAQKvAbqpfAMAA/s4AAErAAEC6AYLAAEDBwG6qNgbAANqXgnPAAEDPwABA0cAAQasAAINfAAAAAQPAAEDYwABBqwAAAQAAgnpgA8AA/2gBWwICAsAAQNsAAACWkV8DAAAAwABA6wAAAIc5YQMCXwMAAGADwAD8zV8DAAAAAF8DAAABPgNOwABBHsAAQSIAAJfBYAPAAP4bARbAAEEpLmHAAP7vRcAAQTUBwABBPsAAQUAAAGJgA8AA/hsBkwEcwABBR4PAAEFFwG6rkWMBAAGCwABBScBuq20AwAD/SQGLwABBUMBuq5EcwABBToPAAEFQwG6rkWQBAAGUAMAA/0E+AT2IwABBW8BuqzscwABBcYHAAEFqwG6rSSACAAKAwABBcsBuqzscwABBhC5LAQABg8AAQYXAbquRAMAA/s4AAErAAEGUAYDAAEGbwG6rOwbAANqYgnPAAEGwwABBvMAAQgcAAICrAAAAAQPAAEHCwABCBwAAAQAAgnpgA8AA/2gBWwEBAcAAQcUAAACBpmEDAWADwAD8zV8DAAAAAF0DwAD+fQFfAwAAAUrAAEHhAR7AAEHlwADPHAICYAPAAPzNXwMAAAIugMAAQgXAbqxtAAbAANqZgnPAAEIMwABCGMAAQnAAAISVAAAAAQPAAEIhwABCcAAAAQAAgnpgA8AA/2gBWwEBAcAAQi4AAACBpmEDAWADwAD8zV0DwAD+fQFfAwAAAABdA8AA/n0BXwMAAAFKwABCSgEfwABCTsAAz2ECAmADwAD8zV8DAAACLoDAAEJuwG6s7gAGwADamoJzwABCdcAAQnrAAEMXAACWiwAAAAEDwABCf8AAQxcAAAABAQHAAEKFAAAAgaZhAwFgA8AA/M1gA8AA/FUAAGADwAD8VQE+A07AAEKiwABCpgAAl8FgA8AA/hsBFsAAQq0uYcAA/u9FwABCuQHAAELCwABCxAAAYmADwAD+GwGTARzAAELLgsAAQsnAbq2yYwEAAYHAAELNwG6tjgDAAP9JAYrAAELUwG6tshzAAELSgsAAQtTAbq2yZAEAAZQAwAD/QT4BScAAQt8hHMAAQuWAwABC5MBurWogAQABHMAAQuouSwEAAYLAAELrwG6tsgDAAP7OAABKwABC8AEqP0rAAEMIASkGwADam4JzwABDHMAAQyHAAEO7AACB1gAAAAEDwABDJMAAQ7sAAAABAQHAAEMqAAAAgaZhAwFgA8AA/M1gA8AA/FUAAGADwAD8VQE+A07AAENHwABDSwAAl8FgA8AA/hsBFsAAQ1IuYcAA/u9FwABDXgHAAENnwABDaQAAYmADwAD+GwGTARzAAENwgsAAQ27Abq69YwEAAYHAAENywG6umQDAAP9JAYrAAEN5wG6uvRzAAEN3gsAAQ3nAbq69ZAEAAZQAwAD/QT4BScAAQ4QcwABDiYDAAEOIwG6udSABAAEcwABDji5LAQABgsAAQ4/Abq69AMAA/s4AAErAAEOUASk/SsAAQ6sBKgbAANqcgnPAAEPAwABDx8AAROQAAJaPAAAAAQPAAEPRwABE5AAAAAIBAcAAQ9cAAACXVGEDAWADwAD8zWADwAD8VQABwABD9QAAIJaQYQMAYAPAAPzNAWoAYAPAAP8leWADwAD8zQE+BE7AAEQKwABEDgAAl8FgA8AA/hsBFsAARBUuYcAA/u9FwABEIQHAAEQqwABELAAAYmADwAD+GwGTARzAAEQzg8AARDHAbq/jYwEAAYLAAEQ1wG6vvwDAAP9JAYvAAEQ8wG6v4xzAAEQ6g8AARDzAbq/jZAEAAZQAwAD/QT4CTsAAREvAAERTAACWe2ADwAD8zQEcwABEWS5LAQABg8AARFrAbq/jAMAA/s5JwABEZBzAAERsgMAARGjAbq9/IAEAAYTAAERtwG6wPAAASsAARHcBhMAARH7AbrA8P0nAAESRIRzAAEScgcAARJXAbq+ZSAEAASsAwAD/dUrAAESlARzAAESygcAARKzAbq+ZIAAAAAAAPz0wwABEuh7AAETVwADQOAAAAAAGwADanYJzwABE6cAARPDAAEYjAACWlAAAAAEDwABE+cAARiMAAAACAQHAAET/AAAAl1RhAwFgA8AA/M1gA8AA/FUAAcAARR0AACCWkGEDAGADwAD8zQFqAGADwAD/JXlgA8AA/M0BPgROwABFMsAARTYAAJfBYAPAAP4bARbAAEU9LmHAAP7vRcAARUkBwABFUsAARVQAAGJgA8AA/hsBHMAARVqCwABFVsBusU+BjQEAAZQAwAD/QgEcwABFYYPAAEVfwG6xc4FtAQABkwDAAP9MAYvAAEVpwG6xcxzAAEVng8AARWnAbrFzgY0BAAGUAMAA/0I+Ak7AAEV4wABFgAAAlntgA8AA/M0BHMAARYYuSwEAAYPAAEWHwG6xcwDAAP7OScAARZEcwABFmYDAAEWVwG6xDyABAAGEwABFmsBusd4AAD4BSsAARa4BhMAARbXAbrHeP0nAAEXQIRzAAEXbgcAARdTAbrEpSAEAASsAwAD/dUrAAEXkARzAAEXxgcAARevAbrEpIAAAAAAAPz0wwABF+R7AAEYUwADQOAAAAAAGwADanoJzwABGKMAARi/AAEgzAACWlwAAAAEDwABGOsAASDMAAAACAQHAAEZAAAAAl1RhAwFgA8AA/M1gA8AA/FUAAcAARl4AACCWkGEDAGADwAD8zQFqAGADwAD/JXlgA8AA/M0BPgdOwABGc8AARnoAAIF2WwErTsAARovAAEaZAADAAHMlYAPAAPxVASpOwABGqsAARq4AAJfBYAPAAP4bARbAAEa1LmHAAP7vRcAARsEBwABGysAARswAAGJgA8AA/hsBkwEcwABG04XAAEbRwG6zPmMBAAGEwABG1cBusxoAwAD/SQGNwABG3MBusz4cwABG2oXAAEbcwG6zPmQBAAGUAMAA/0E+Ak7AAEbrwABG8wAAlntgA8AA/M0BHMAARvkuSwEAAYXAAEb6wG6zPgDAAP7OScAARwQcwABHDIDAAEcIwG6ysyABAAGGwABHDcBus5cAAD4DScAARyGDwABHJcBuswM+AT0wwABHQB7AAEdbwADQOQAAAAA/PYrAAEd4wG6y84bAAEeBwG6zlz2LwABHksBuswMpP0nAAEe6g8AAR77AbrMDSsAAR80BJsAAR80BgsAAR9TAbrLzYAPAAPzNP0nAAEfgIRzAAEfrgcAAR+TAbrLNSAEAASsAwAD/dUrAAEf0ARzAAEgBgcAAR/vAbrLNIAAAAAAAPz0wwABICR7AAEgkwADQOAAAAAAGwADan4JzwABIOMAASD/AAEhwAACWjgAAAAEDwABISMAASHAAAAABAQHAAEhNAAAAJ2ADwAD+GwAAYAPAAPzNAT4BSsAASFoBHMAASGUuSwEAAYDAAEhmwG60yQDAAP7OBsAA2qCCc8AASHXAAEh6wABI1QAAVgAAAAEDwABIfcAASNUAAAABAQHAAEiFAAAggJZgA8AA/M0AAFwBPgE9MMAASJIfwABInMAA/a0BAAEnwAB3xAAGwADaoYJzwABI2sAASN/AAElHAACApQAAAAEDwABI5cAASUcAAAABAQHAAEj3AAAggJZdA8AA/n0BYAPAAPzNAABcAT4BPTDAAEkEH8AASQ7AAP2tAQABJ8AAd8QABsAA2qKCc8AASUzAAElRwABJvwAAnzoAAAABA8AASVfAAEm/AAAAAgICwABJXAAAACdgA8AA/hsAwABJagAAIICWYAPAAPzNAABcAT4BPTDAAEl3H8AASYHAAP2tAQABJ8AAemcABsAA2qOCc8AAScTAAEnJwABKRQAAoEcAAAABA8AASdLAAEpFAAAAAgICwABJ1wAAACdgA8AA/hsAwABJ7wAAICldA8AA/n0BYAPAAPzNAABcAT4BPTDAAEn9H8AASgfAAP2tAQABJ8AAemcABsAA2qSCc8AASkrAAEpPwABKrwAAgK4AAAABA8AASlPAAEqvAAAAAQABwABKWQAAAJt3YQMCYAPAAPzNYAPAAPzNYAPAAP4bAWoAYAPAAP8leQBcAT4BPR7AAEqCwADQzgIBYAPAAPzNAi41AAAAAQBhAwJgA8AA/M1gA8AA/M1gA8AA/hsBgMAASo3AbrawIxzAAEqVgQDAbrbySAEAASsAAGrAAEqjYQMCXQPAAPxhAVtdA8AA/GEBW2ADwAD+G8ABh9qBAMButvIBYQMCYAPAAPzNYAPAAPzNYAPAAP4bAAbAANqlgnPAAEq0wABKuMAAS7YAAIC7AAAAAQPAAEq/wABLtgAAAAIBAsAASscAACCWe2ADwAD8zQDAAErVAAAAamADwAD+GwFqwABK3WADwAD+GwkAYAPAAP4bAT4DScAASuccwABK8YHAAErrwG63ooFtAQABFsAASvkuYcAA/u8AwAD/TD4BSsAASwkBHMAASxCUgcYAAAAAwAD+PknAAEsfHMAASymBwABLI8But6JjAQABkwDAAP9JPgE9icAASzbAbreikz9FwABLSwHAAEtUwABLVgAAYmADwAD+GwGBwABLWMBut6IBHMAAS2GCwABLX8BuuDhjAQABFsAAS2guYcAA/u8AwAD/SQGKwABLcMBuuDgcwABLcYLAAEtwwG64OGQBAAGUAMAA/0E+AUnAAEt9HMAAS4kcwABLhS5LAQABgsAAS4bAbrg4AMAA/s5IAQABgMAAS4zAbreSAMAA/z9KwABLlQGCwABLnMBuuDg/SsAAS6kBHMAAS7CUgcYAAAAAwAD+PgbAANqmgnPAAEu7wABLv8AATNoAAJa1AAAAAQPAAEvKwABM2gAAAAIBAsAAS9IAACCWe2ADwAD8zQDAAEvgAAAAamADwAD+GwFqwABL6GADwAD/JXkAYAPAAP4bAT4DScAAS/UiHMAAS/+BwABL+cBuuS5IAQABKwDAAP8/ARzAAEwQgcAATArAbrkugW0BAAEWwABMGC5hwAD+7wDAAP9MPgE9icAATCjAbrkuHMAATDwWwABMNS5hwAD+74GNAQABlADAAP9CScAATEwcwABMVoHAAExQwG65LmMBAAGTAMAA/0k+AUrAAExjARzAAExqlIHGAAAAAMAA/j4/RcAATHgBwABMgcAATIMAAGJgA8AA/hsBgcAATIXAbrkuARzAAEyOgsAATIzAbrn4gW0BAAGTAMAA/0wBisAATJTAbrn4HMAATJWCwABMlMBuufiBjQEAAZQAwAD/Qj4BScAATKEcwABMrRzAAEypLksBAAGCwABMqsBuufgAwAD+zkgBAAGAwABMsMBuuR4AwAD/P0rAAEy5AYLAAEzAwG65+D9KwABMzQEcwABM1JSBxgAAAADAAP4+BsAA2qeCc8AATN/AAEzmwABNQQAAhi4AAAABA8AATPDAAE1BAAAAAAAAAGADwAD8zQE+AT0wwABM+R/AAE0DwAD9rQEAASfAAHfFAAbAANqognPAAE1GwABNTcAATa8AAKBGAAAAAQPAAE1VwABNrwAAAAEBAcAATVoAAAAnYAPAAP4bAABgA8AA/M0BPgE9MMAATWcfwABNccAA/a0BAAEnwAB3xQAGwADaqYJzwABNtMAATbnAAE4uAACXUwAAAAEDwABNxMAATi4AAAABAQHAAE3KAAAAl1RhAwFgA8AA/M1gA8AA/FUAAFwBPgE9MMAATeYfwABN8MAA/a0BAAEnwAB3xQAGwADaqoJzwABOM8AATjjAAE6tAACXVgAAAAEDwABOQ8AATq0AAAABAQHAAE5JAAAAl1RhAwFgA8AA/M1gA8AA/FUAAFwBPgE9MMAATmUfwABOb8AA/a0BAAEnwAB3xQAGwADatYJzwABOssAATr3AAE8XAQCDHgAAAAEDwABOw8AATxcAAAAAAAAAYAPAAPzNAT4CScAATskcwABO1BbAAE7NLmHAAP7vgJcBAAGTAMAA/0tKwABO2QEcwABO5C5LAQABkwDAAP7OPz0wwABO7R7AAE8IwADQOAAAAAAGwADatoJzwABPHMAATyfAAE+JAQCB6gAAAAEDwABPLMAAT4kAAAAAAAAAYAPAAPzNAT4CScAATzIcwABPPRbAAE82LmHAAP7vgJcBAAGTAMAA/0tKwABPQgEcwABPTS5LAQABHMAAT1UWwABPTi5hwAD+74GNAQABlADAAP9CAMAA/s4/PTDAAE9fHsAAT3rAANA4AAAAAAbAANq3gnPAAE+OwABPmcAAUDABAIDDAAAAAQPAAE+gwABQMAAAAAAAAABgA8AA/M0BPgNJwABPphzAAE+xFsAAT6ouYcAA/u9IAQABlADAAP8/SsAAT7cBHMAAT8IuSwEAAZMAwAD+zj9JwABPyxzAAE/WFsAAT88uYcAA/u9IAQABkwDAAP8/PTDAAE/cHsAAT/fAANA4AAAAAD89MMAAUAgewABQI8AA0DkAAAAABsAA2quCc8AAUDXAAFA6wABQuAAAoEkAAAABA8AAUEDAAFC4AAAAAgICwABQRQAAACdgA8AA/hsAwABQXQAAIIPRXQPAAP59AWADwAD8zQAAXAE+Ak7AAFBzwABQdwABgpBgA8AA/hsBHMAAUIkWwABQgoHAAFB5wG6+EmHAAP6gZAEAAYDAAFCLwG6+AwDAAP9BPRzAAFCWLoNkAwADgMAAUJ/Abr4DgsAAUKbAbr4vgcAAUKvAbr4SAMAA/uQGwADarIJzwABQvcAAUMLAAFF6AACcBwAAAAEDwABQy8AAUXoAAAADAgPAAFDQAAAAamADwAD+GwDAAFDbAAAAgpBgA8AA/hsAwABQ6AAAIMAARHRgA8AA/M0BagBgA8AA/yV5AFwBPgI9HsAAUQXAAP1cAwADgMAAURXAbr7CgcAAURzAbr7RFsAAUSYuYcAA/u8ARcAAUTMBwABRPMAAUT4AAGJgA8AA/hsBgMAAUUDAbr7CARzAAFFJg8AAUUfAbr8yYwEAAYHAAFFLwG6+0QDAAP9JAYvAAFFSwG6/MhzAAFFQg8AAUVLAbr8yZAEAAZQAwAD/QT4BPRzAAFFhLoC/AgACg8AAUWLAbr8ygsAAUWfAbr7hAMAA/s8AAG6cYABunNMAbpz9AG6dJQBunU0Abp2aAG6d+wBunk4Abp7DAG6fTgBuoGAAbqGgAG6iugBuo4wAbqTdAG6lQABupZsAbqX+AG6mWQBuprwAbqcBAG6nTABup+gAbqgsAG6olABuqNsAbqmcAG6rBQBurDcAbqy4AG6tQABurksAbq9VAG6w5QBusokAbrSfAG61AAButVYAbrW0AG62GgButoYAbrdoAG649ABuuqwAbrr4AG67UwBuu7MAbrwTAG68kQBuvSkAbr3ZAG6+mABuv7UAAAA0AsAA2ruCc8ABM9DAATPwwAE4YDfAAHrpAAABYAHAANqBAAFdAcAA1lsBYAPAAOWLAAEFwADawwAAAAAEAAADAAAAAAAAAAAAYAPAANq7AT8BCQAAwADargAAAAAEBsAA2r2Cc8ABM/DAATPwAAAQoD8AwADV38AA1d8BAwAAAAAAAwMDAAAAAGpgA8AA/hsAAAAAAIKQYAPAAP4bAAAAACCD0V0DwAD+fQFbAABcAUoAAR0AoD8DAAOAAMBuwRKBAMBuwR6CAMBuwSsAwADV3wbAANq/gnPAAFHxwABR/cAAUhQAAsAAemrAANW8AAAAAQPAAFIIwABSFAAAAAEBAcAAUg0AAABhYAPAAP4bAABgA8AA5YsABsAA2sCCc8AAUhnAAFIewABa+AAAg2QAAAABA8AAUibAAFr4AAAABAMEwABSKwAAAGpgA8AA/hsAwABSNgAAAIKQYAPAAP4bAMAAUkwAACCWg10DwAD+fQFgA8AA/M0AwABSXQAAAKA8YAPAAP4bAWrAAFJpYAPAAP4bCQBcAT4LScAAUogiIhzAAFKOk4CXAQABgMAAUpDAbsHPAMAA/0sBHMAAUp+AwABSmcBuwc+AlwEAAYHAAFKhwG7B3gDAAP9LARzAAFKsgcAAUqjAbsHegJcBAAEWwABSri5hwAD+7wDAAP9LPgI9HsAAUsnAAP1cAwADgMAAUtnAbsHPgcAAUuDAbsHeFsAAUuUuYcAA/u8AQCrAAFMNwABTEgA/ScAAUx8cwABTLYPAAFMjwG7CBWMBAAGTAMAA/0k+AT0wwABTOh/AAFNLwAD9ZQQABIPAAFNRwG7CBZMrJ6A8AD9OwABThMAAU4oAAYDuYAPAAP4bARzAAFOQgcAAU4zAbsHegY0BAAGAwABTksBuwc8AwAD/QknAAFOdHMAAU7scwABTrhbAAFOngsAAU6LAbsHuYcAA/qCBjQEAAYPAAFOwwG7CBQDAAP9CYwEAAYTAAFO9wG7DBwDAAP9JPgE9MMAAU8wewABT58AA0DoAAAAAP0nAAFP8HMAAVAaEwABUAMBuwwdIAQABkwDAAP8/SsAAVAwAP0nAAFQZJcAAVCKCwABUHcBuwe5gA8AA1dI+Ak7AAFSswABUvAABwAB6a2ADwADV0gEmwABUwwCCwABUvsBuwe5gA8AA1dJJwABU3BzAAFT4FsAAVOUuwABwKsAA1iZIAQABFsAAVQuFwABU+8Buw9jAAHAqwADV1QDAAP8/PgFJwABVKSIcwABVNITAAFUuwG7DB2MBAAE3CgDAAP9JACEcwABVVRbAAFVOhcAAVT7AbsPYgo/AANXXSAEAARbAAFVdLoKPwADWKADAANcjPgI9HsAAVXjAAM0uBQAFJsAAVYIAgsAAVX3AbsHuXQPAAP6/AWADwAD8zYPAAFWTwG7CBS6AwABVpMBuwc+EwABVq8BuwwcASsAAVb0AScAAVdQcwABV6hbAAFXkFsAAVd0ugo/AANYot/fAANW8wADXG8AAcCnAANW8BgAGHMAAVhwcwABWB4DAAFYBwG7Bz4ONAQABFsAAVgkuwABwKsAA1iYAwAD/Q2QBAAEWwABWIy6qHMAA1icAwAD/QRzAAFZEhMAAVj7AbsMHg40BAAEWwABWRi7AAHAqwADWJgDAAP9DFsAAVn0WwABWdoXAAFZmwG7D2IKPwADV17f3wADVvMAA1xscwABWrxzAAFaag8AAVpDAbsIFg40BAAEWwABWnC7AAHAqwADWJgDAAP9DZAEAARbAAFbBhcAAVrHAbsPYqhzAANXWAMAA/0EewABW5MAAzTsBAAEuAB7AAFcFwADNOwEAAYLAAFcLwG7B7gAAwADV4j4BSsAAVx8AP0nAAFc+HMAAV1kWwABXUoXAAFdCwG7D2IKPwADV10gBAAEWwABXYS6Cj8AA1igAwADXIz4FTsAAWDfAAFhCAAHAAHpsXQPAAP6/AWADwAD8zQEmwABYSQCCwABYRMBuwe5dA8AA/r8BYAPAAPzNTsAAWGjAAFhzAAHAAHptYAPAAOWLARzAAFh1LsAAemrAANW8AQABhMAAWIHAbsMHAMAA1l5FwABYkQHAAFiawABYnAAAYmADwAD+GwGTARzAAFijFMAAWKHAbsa0CABjAQABhMAAWKXAbsMHAMAA/0kBFcAAWKzAbsa0CBzAAFitFMAAWKzAbsa0CABkAQABlADAAP9BPgE9HMAAWMeHwABYvcBuxnqAvwIAAhTAAFjIwG7GtAgAHMAAWNeGwABYzcBuxkFLAQABHMAAWOKDwABY2MBuwgVkAQABFMAAWOTAbsa0CAAAwAD/QQDAAP7OAMAA/s9FwABY+gHAAFkDwABZBQAAYmADwAD+GwGAwABZB8Buwc8BHMAAWRAUwABZDsBux3QIAGMBAAGBwABZEsBuwd4AwAD/SQEVwABZF8Bux3QIHMAAWRgUwABZF8Bux3QIAGQBAAGUAMAA/0E+AT0cwABZLC6AvwIAAhTAAFktwG7HdAgAHMAAWTyHwABZMsBuxnpLAQABHMAAWT8UwABZPcBux3QIAIGNAQABgMAAWUHAbsHPAMAA/0IAwAD+zgDAAP7PSsAAWVsAPz9OwABZewAAAKA9XQPAAP6/AVsATsAAWY4AAACgPmADwAD+GwBJwABZniXAAFmngsAAWaLAbsHuXQPAAP6/AWADwAD8zT4CPY3AAFnAwG7IOBTAAFnMwG7B7gIBXQPAAP6/AWADwAD8zT2OwABZ2MBuyEuDwABZ5cBuwgU+Aj2NwABaA8BuyDgcwABaJBzAAFoUgsAAWg/AbsHuloQBAAGDwABaGcBuwgUAwAD+l4CtAQAAAYV2KsAA/pM9jsAAWkPAbshLk0nAAFpdHMAAWnQcwABabIbAAFphwG7IS2QBAAGEwABabsBuwwcAwAD/QYCXAQABFsAAWoCFwABadsBuyDhhwAD+7wDAAP9LPgE9MMAAWpAewABaq8AA0DoAAAAAPz0ewABaxcAAzS4FAAWFwABaysBuyDiGwABa1cBuyEsugMAAWufAbsHPhMAAWu7AbsMHAAbAANrBgnPAAFr9wABbCcAAW/YAAIFYAAAAAQPAAFsQwABb9gAAAAIBAsAAWxUAAABqYAPAAP4bAMAAWyEAAACCkGADwAD+GwFqAGADwAD/JXkAYAPAAOWLAT4FPYnAAFstwG7JxR7AAFs+wAD9XAMAA4DAAFtOwG7JtoHAAFtVwG7JxRbAAFtfLmHAAP7vAE7AAFtwwABbdwAAYWADwAD+GwEcwABbfYHAAFt5wG7JxYGNAQABgMAAW3/Absm2AMAA/0JOwABblsAAW50AAIF2YAPAAOWLARzAAFufLsAAemrAANW8AQABgsAAW6vAbsodAMAA1l49HMAAW7+DwABbuMBuylGDZAQABJOCwABby8Buyh0ugMAAW9nAbsm2AMAA/uRKwABb5QGDwABb7MBuylEAAG7A6wBuwV4AbsGlAG7JjABuyr8AAAAEAsAA2sSCc8ABM9DAATPwwAE4YAPAAHrqAWrAATPRYAPAAPwcwAGCQAABYAHAANq7AAFgAcAA5YsAAAgGwADax4JzwAE0bcABNHXAATSxBAHAAHhJwADVvAAAAAEDwAE0kcABNLEAAAAAAAAAYAPAANrEAT4BPTDAATSaJ8AAYt4GwADayYJzwAE05sABNS3AATXLAwBLAWrAATTnYAPAAPwcwAGWNAAAAQPAATUvwAE1ywAAAAEBAcABNTQAAAAnYAPAAP4bAABgA8AA/M0BPgJJwAE1QSIcwAE1S4DAATVFwG7LkGMBAAGTAMAA/0kBHMABNViAwAE1UsBuy5CBbQEAARbAATVbLmHAANc7AMAA/0w+AT0wwAE1ax/AATV1wAD9cQMAA4DAATWGwG7LkC4nJwA/SsABNacBHMABNa4uwAB668AA1bwBAAGAwAE1wcBuy5AAwADazQbAANrKgnPAATXQwAE13sABNosDAIC/AAAAAQPAATXhwAE2iwAAAAICAsABNeYAAAAnYAPAAP4bAMABNfQAACCAlmADwAD8zQAAXAE+AknAATYBIhzAATYLgMABNgXAbsxcYwEAAZMAwAD/SQEcwAE2GIDAATYSwG7MXIFtAQABFsABNhsuYcAA1zsAwAD/TD4BPTDAATYrH8ABNjXAAP1xAwADgMABNkbAbsxcLicnAD89HMABNmcuwAB67MAA1bwCAAKAwAE2esBuzFyBwAE2gcBuzGsAwADazgbAANrRgnPAATbFwAE2zcABNwwBAMAAcCoAAAABA8ABNuDAATcMAAAAAAAAAGADwAD+GwE+AUrAATbmAWrAATb5YAPAAP4bg10GwADazIJzwAE3MMABNzzAATd8AADAAHpqwADVvAAAAAEDwAE3R8ABN3wAAAABAQHAATdMAAAAYWADwAD+GwAAYAPAAOWLAT4BSsABN1oBHsABN2XAAOWPAQABgMABN3HAbs2GAAbAANrNgnPAATeBwAE3iMABN+cAAMAAeuvAANW8AAAAAQPAATeawAE35wAAAAEBAcABN58AAAAnYAPAAP4bAABgA8AA/M0BPgFKwAE3rAEcwAE3sy7AAHqpwADVvAEAARzAATfFgMABN7/Abs3rg40BAAFqwAE302ADwAD+G4NdAMAA/0MAwADXUAbAANrOgnPAATfswAE38cABOF4AAMAAeuzAANW8AAAAAQPAATgDwAE4XgAAAAICAsABOAgAAAAnYAPAAP4bAMABOBYAAACAlmADwAD8zQAAXAE+AT0cwAE4Iy7AAHqrwADVvAIAAhzAATg1gMABOC/Abs51g40BAAFqwAE4Q2ADwAD+G4NdAMAA/0OBwAE4VMBuzoQAwADXUQbAANrPgnPAATPwwAEz8AAAEKA/AMAA1d/AANXfAQMAAAAAAAMDAwAAAABqYAPAAP4bAAAAAACCkGADwAD+GwAAAAAgg9FdA8AA/n0BWwAAXAFKAAEdAKA/AwADgADAbs8FgQDAbs8RggDAbs8eAMAA1d8AAG7LEwBuy1gAbswyAG7NDQBuzVYAbs27AG7ORQBuzt4Abs9RAAAACALAANrSgnPAATmywAE50sABPhA3wAB67QAAAWABwADXNQABYAHAANZhAAEFwADbAwAAAAAEAAADAAAAAAAAAAAAYAPAANrSAT8BCQAAwADXWgAAAAA3BsAA2tSCc8ABOdLAATnSAAAQoD8AwADV38AA1d8BAwAAAAAAAwMDAAAAAGpgA8AA/hsAAAAAAIKQYAPAAP4bAAAAACCD0V0DwAD+fQFbAABcAUoAAR0AoD8DAAOAAMBuz/eBAMBu0AOCAMBu0BAAwADV3wbAANsFgnPAAFw9wABcRcAAXFcBAsAAcCoAAAABA8AAXFfAAFxXAAAAAAAAAGADwAD+GwAGwADbBoJzwABcW8AAXGPAAFxwAQKqHAAAAAEDwABccMAAXHAAAAAAAAAAYAPAAP4bAAbAANsHgnPAAFx0wABchMAAXIoBAoKPAAAAAQPAAFyKwABcigAAAAAAAABgA8AA1xgABsAA2taCc8AAXI/AAFydwABctAACwAB6asAA1bwAAAABA8AAXKjAAFy0AAAAAQEBwABcrQAAAGFgA8AA/hsAAGADwADllAAGwADa14JzwABcucAAXMXAAFz1AACWmwAAAAEDwABc0cAAXPUAAAEAAIJ6YAPAAP9oAVsAAAAAXQPAAP59AV8DAAABSsAAXNcBH8AAXNvAANArAQFfAwAAAS4ABsAA2tiCc8AAXPrAAF0OwABdegAAlpIAAAABA8AAXRjAAF16AAAAAQEBwABdLQAAIIPbXQPAAP59AWADwADlsgAAXQPAAP59AWADwADlsgFKwABdPQEewABdQcAA0AMCAWADwADlsgIugMAAXXTAbtGnAAbAANrZgnPAAF1/wABdh8AAXbUAAJaNAAAAAQPAAF2OwABdtQAAAQAAl05gA8AA/2gBWwAAAABdA8AA/r8BXwMAAAFKwABdlAEewABdmcAA/soBAmADwADlsl8DAAABLgAGwADbDoJzwABducAAXcLAAF4xAgCDHgAAAAEDwABdx8AAXjEAAAABAQHAAF3SAAAggJZgA8AA5bIAAFwBPgJJwABd3xzAAF3vFsAAXeguYcAA/u9IAQABkwDAAP8/PTDAAF31H8AAXf/AAP1xAgACky4APz0cwABeIi6AvwIAApOAwABeKMBu0nsAwAD+zwbAANsPgnPAAF42wABeP8AAXrsCAIHqAAAAAQPAAF5DwABeuwAAAAEBAcAAXk4AACCAlmADwADlsgAAXAE+AknAAF5bHMAAXmsWwABeZC5hwAD+70gBAAGTAMAA/z89MMAAXnEfwABee8AA/XECAAKTLgA/PRzAAF6eLoC/AgACHMAAXqsWwABepC5hwAD+74GNAQABlADAAP9CgMAAXrLAbtMKAMAA/s8GwADa2oJzwABewMAAXsTAAF+DAACgRAAAAAEDwABezsAAX4MAAAACAQLAAF7UAAAAl1RhAwFgA8AA5bJgA8AA/FUAwABe8gAAAGpgA8AA/hsBasAAXvpgA8AA/hsJAGADwAD+GwE+A0nAAF8EHMAAXw6BwABfCMBu08xjAQABkwDAAP9JPYnAAF8TwG7TzJM/RcAAXyIBwABfK8AAXy0AAGJgA8AA/hsBgcAAXy/AbtPMARzAAF84gsAAXzbAbtQgYwEAARbAAF86LmHAAP7vAMAA/0kBisAAX0LAbtQgHMAAX0OCwABfQsBu1CBkAQABlADAAP9BPgFJwABfTxzAAF9XgMAAX1PAbtOzIAEAARzAAF9cLksBAAGCwABfXcBu1CAAwAD+zgAASsAAX2IBgsAAX2nAbtQgP0rAAF92ARzAAF99lIHGAAAAAMAA/j4GwADa24JzwABfiMAAX4zAAGBxAACgRQAAAAEDwABfmsAAYHEAAAACAQLAAF+gAAAAl1RhAwFgA8AA5bJgA8AA/FUAwABfvgAAAGpgA8AA/hsBagBgA8AA/yV5AGADwAD+GwE+A0nAAF/MIhzAAF/WgcAAX9DAbtUcSAEAASsAwAD/PwEcwABf54HAAF/hwG7VHIFtAQABFsAAX+8uYcAA/u8AwAD/TD2JwABf98Bu1RwcwABgCxbAAGAELmHAAP7vgY0BAAGUAMAA/0I/RcAAYBQBwABgHcAAYB8AAGJgA8AA/hsBgcAAYCHAbtUcARzAAGAqgsAAYCjAbtWsgW0BAAGTAMAA/0wBisAAYDDAbtWsHMAAYDGCwABgMMBu1ayBjQEAAZQAwAD/Qj4BScAAYD0cwABgRYDAAGBBwG7VAyABAAEcwABgSi5LAQABgsAAYEvAbtWsAMAA/s4AAErAAGBQAYLAAGBXwG7VrD9KwABgZAEcwABga5SBxgAAAADAAP4+BsAA2tyCc8AAYHbAAGCPwABhbgMAZAAAAAEDwABgkMAAYW4AAAABAQHAAGChAAAgg9tdA8AA/r8BYAPAAOWyAABdA8AA/r8BYAPAAOWyAT4CTsAAYLLAAGC+AACDXmADwAD+GwEcwABgzBbAAGDFLmHAAP7vZAEAARbAAGDUgMAAYM7AbtaGYcAA/u8AwAD/QUrAAGDgATXAAGDyAAABAF0DwAD+vwFgA8AA5bIBMcAAYPJgA8AA5bIANQAAAAEAWwEXwABg/YLAAGD7wG7W9WGBwABhBsBu1q/AAP7tNQAAAAEAWwEcwABhGoLAAGEYwG7W9YNkAwADkxbAAGErLmHAAP7vLgDAAP7kNQAAAAEAWwEcwABhQYLAAGE/wG7W9YNkAwADFsAAYU8uYcAA/u+BwABhV8Bu1q+AwABhZMBu1oYAwAD+5IIAwG7W9QbAANrdgnPAAGFzwABheMAAYhcAAIMcAAAAAQPAAGGAwABiFwAAAAEBAcAAYYgAAACWe2ADwAD/aAAAYAPAAPxVAT4DTsAAYZvAAGGfAACXwWADwAD+GwEWwABhpi5hwAD+70XAAGGyAcAAYbvAAGG9AABiYAPAAP4bAZMBHMAAYcSCwABhwsBu2BRjAQABgcAAYcbAbtfwAMAA/0kBisAAYc3AbtgUHMAAYcuCwABhzcBu2BRkAQABlADAAP9BPgFJwABh2BzAAGHkHMAAYeAuSwEAAYLAAGHhwG7YFADAAP7OSAEAAYDAAGHnwG7X1QDAAP91SsAAYfABKT9KwABiBwEqBsAA2t6Cc8AAYhzAAGIhwABjCgAAoDMAAAABA8AAYijAAGMKAAAAAQABwABiMQAAAKA0YAPAANJ+AWoAYAPAAP8leQBcAT4DPSMcwABiR4DAAGJAwG7Y2UgBAAErAMAA/3WIwABiQMBu2NkewABiT8AA0oAAAAAAKwFgA8AA0n5OwABiYcAAYmMAAGJgA8AA/hsBFsAAYmouYcAA/u9DwABidhzAAGJ/gcAAYn3AbtkwgJcBAAGUAMAA/0s+BU7AAGKQwABilAAAoDVgA8AA/hsBHMAAYp2AwABilsBu2NmgNgEAAYHAAGKlwG7ZMADAANKDPYnAAGKvwG7ZMBzAAGKxgcAAYq/AbtkwgY0BAAGUAMAA/0JOwABiwcAAYsUAAKA3YAPAAOWyARzAAGLLLksBAAGBwABizMBu2TAAwAD+zj0cwABi2i6AvwIAAoHAAGLbwG7ZMBzAAGLkLksBAAGCwABi5cBu2W4AwAD+zgDAAP7PPRzAAGL1LoC/AgACgsAAYvbAbtlug8AAYv3AbtnGAMAA/s8GwADa34JzwABjD8AAYxTAAGv9AACDZAAAAAEDwABjHMAAa/0AAAAEAwTAAGMhAAAAamADwAD+GwDAAGMsAAAAgpBgA8AA/hsAwABjRQAAIJaDXQPAAP59AWADwADlsgDAAGNWAAAAoDxgA8AA/hsBasAAY2JgA8AA/hsJAFwBPgtJwABjgSIiHMAAY4eTgJcBAAGAwABjicBu2nAAwAD/SwEcwABjmIDAAGOSwG7acICXAQABgcAAY5rAbtp/AMAA/0sBHMAAY6WBwABjocBu2n+AlwEAARbAAGOnLmHAAP7vAMAA/0s+Aj0ewABjwsAA/VwDAAOAwABj0sBu2nCBwABj2cBu2n8WwABj3i5hwAD+7wBAKsAAZAbAAGQLAD9JwABkGBzAAGQmg8AAZBzAbtqmYwEAAZMAwAD/ST4BPTDAAGQzH8AAZETAAP1lBAAEg8AAZErAbtqmkysnoDwAP07AAGR9wABkgwABgO5gA8AA/hsBHMAAZImBwABkhcBu2n+BjQEAAYDAAGSLwG7acADAAP9CScAAZJYcwABktBzAAGSnFsAAZKCCwABkm8Bu2o9hwAD+oIGNAQABg8AAZKnAbtqmAMAA/0JjAQABhMAAZLbAbtuoAMAA/0k+AT0wwABkxR7AAGTgwADQOgAAAAA/ScAAZPUcwABk/4TAAGT5wG7bqEgBAAGTAMAA/z9KwABlBQA/ScAAZRIlwABlG4LAAGUWwG7aj2ADwADV0j4CTsAAZajAAGW4AAHAAHprYAPAANXSASbAAGW/AILAAGW6wG7aj2ADwADV0knAAGXYHMAAZfQWwABl4S7AAHAqwADWY0gBAAEWwABmB4XAAGX3wG7cecAAcCrAANXVAMAA/z8+AUnAAGYlIhzAAGYwhMAAZirAbtuoYwEAATcKAMAA/0kAIRzAAGZRFsAAZkqFwABmOsBu3HmCj8AA1ddIAQABFsAAZlkugo/AANZlAMAA1yM+Aj0ewABmdMAAzS4FAAUmwABmfgCCwABmecBu2o9dA8AA/r8BYAPAAOWyg8AAZpLAbtqmLoDAAGajwG7acITAAGaqwG7bqABKwABmvABJwABm0xzAAGbpFsAAZuMWwABm3C6Cj8AA1mW398AA1bzAANcbwABwKcAA1bwGAAYcwABnGxzAAGcGgMAAZwDAbtpwg40BAAEWwABnCC7AAHAqwADWYwDAAP9DZAEAARbAAGciLqocwADWZADAAP9BHMAAZ0OEwABnPcBu26iDjQEAARbAAGdFLsAAcCrAANZjAMAA/0MWwABnfBbAAGd1hcAAZ2XAbtx5go/AANXXt/fAANW8wADXGxzAAGeuHMAAZ5mDwABnj8Bu2qaDjQEAARbAAGebLsAAcCrAANZjAMAA/0NkAQABFsAAZ8CFwABnsMBu3HmqHMAA1dYAwAD/QR7AAGfjwADNOwEAAS4AHsAAaATAAM07AQABgsAAaArAbtqPAADAANXiPgFKwABoHgA/ScAAaD0cwABoWBbAAGhRhcAAaEHAbtx5go/AANXXSAEAARbAAGhgLoKPwADWZQDAANcjPgVOwABpNsAAaUEAAcAAemxdA8AA/r8BYAPAAOWyASbAAGlIAILAAGlDwG7aj10DwAD+vwFgA8AA5bJOwABpasAAaXUAAcAAem1gA8AA5ZQBHMAAaXcuwAB6asAA1bwBAAGEwABpg8Bu26gAwADWbUXAAGmTAcAAaZzAAGmeAABiYAPAAP4bAZMBHMAAaaUUwABpo8Bu31UIAGMBAAGEwABpp8Bu26gAwAD/SQEVwABprsBu31UIHMAAaa8UwABprsBu31UIAGQBAAGUAMAA/0E+AT0cwABpyYfAAGm/wG7fG4C/AgACFMAAacrAbt9VCAAcwABp2YbAAGnPwG7e4ksBAAEcwABp5IPAAGnawG7apmQBAAEUwABp5sBu31UIAADAAP9BAMAA/s4AwAD+z0XAAGn8AcAAagXAAGoHAABiYAPAAP4bAYDAAGoJwG7acAEcwABqEhTAAGoQwG7gFQgAYwEAAYHAAGoUwG7afwDAAP9JARXAAGoZwG7gFQgcwABqGhTAAGoZwG7gFQgAZAEAAZQAwAD/QT4BPRzAAGouLoC/AgACFMAAai/AbuAVCAAcwABqPofAAGo0wG7fG0sBAAEcwABqQRTAAGo/wG7gFQgAgY0BAAGAwABqQ8Bu2nAAwAD/QgDAAP7OAMAA/s9KwABqXQA/P07AAGp9AAAAoD1dA8AA/r8BWwBOwABqkAAAAKA+YAPAAP4bAEnAAGqgJcAAaqmCwABqpMBu2o9dA8AA/r8BYAPAAOWyPgI9jcAAasXAbuDZFMAAatHAbtqPAgFdA8AA/r8BYAPAAOWyPY7AAGrdwG7g7IPAAGrqwG7apj4CPY3AAGsIwG7g2RzAAGspHMAAaxmCwABrFMBu2o+WhAEAAYPAAGsewG7apgDAAP6XgK0BAAABhXYqwAD+kz2OwABrSMBu4OyTScAAa2IcwABreRzAAGtxhsAAa2bAbuDsZAEAAYTAAGtzwG7bqADAAP9BgJcBAAEWwABrhYXAAGt7wG7g2WHAAP7vAMAA/0s+AT0wwABrlR7AAGuwwADQOgAAAAA/PR7AAGvKwADNLgUABYXAAGvPwG7g2YbAAGvawG7g7C6AwABr7MBu2nCEwABr88Bu26gABsAA2uCCc8AAbALAAGwWwABsZQAAgaUAAAABA8AAbBvAAGxlAAAAAQEBwABsIQAAAIGmYQMBYAPAAOWyYAPAAPxVAABdA8AA/n0BYAPAAOWyAUrAAGxAAR/AAGxEwADPTQIBYAPAAOWyAi6AwABsY8Bu4lcABsAA2uGCc8AAbGrAAGx+wABstwAAlpkAAAABA8AAbILAAGy3AAAAAQEBwABshwAAAIOoYAPAAP4bAABdA8AA/n0BYAPAAOWyAUrAAGyNAR/AAGyRwADPCAMBYAPAAOWyAy6TgMAAbLXAbuLMAAbAANrignPAAGy8wABs0MAAbS0AAJaaAAAAAQPAAGzZwABtLQAAAAEBAcAAbN8AAACXVGEDAWADwADlsmADwAD8VQAAXQPAAP59AWADwADlsgFKwABtAQEfwABtBcAAz5MCAWADwADlsgIugMAAbSjAbuM5AAbAANrjgnPAAG0ywABtRsAAbYgAAJaEAAAAAQPAAG1KwABtiAAAAAEBAcAAbU8AAACDqGADwAD+GwAAXQPAAP59AWADwADlsgFKwABtWwEfwABtX8AAzwgDAWADwADlsgMugMAAbYDAbuOuKwAGwADa5IJzwABtjcAAbaHAAG3+AACWmAAAAAEDwABtqsAAbf4AAAABAQHAAG2wAAAAl1RhAwFgA8AA5bJgA8AA/FUAAF0DwAD+fQFgA8AA5bIBSsAAbdIBH8AAbdbAAM/LAgFgA8AA5bICLoDAAG35wG7kGwAGwADbCIJzwABuA8AAbhvAAG5QAQCY4AAAAAEDwABuJMAAblAAAAAAAAAAXQPAAP59AWADwADlsgFKwABuJwEfwABuK8AA0LkBAWADwADlsgEuAAbAANrlgnPAAG5VwABuacAAbpQAAJzCAAAAAQPAAG5uwABulAAAAAAAAABdA8AA/vECYAPAAP4bYAPAAOWyAUrAAG50AR/AAG54wADQrwEBYAPAAOWyAS4ABsAA2uaCc8AAbpnAAG6twABvRgAAoDkAAAABA8AAbrXAAG9GAAAAAgECwABuugAAAGpgA8AA/hsAwABuxgAAAIKQYAPAAP4bAWoAYAPAAP8leQBdA8AA/n0BYAPAAOWyAT4CPR7AAG7dwAD9XAMAA4DAAG7twG7lPIHAAG70wG7lSxbAAG7+LmHAAP7vAErAAG8LAR/AAG8WwADPCAMBYAPAAOWyAy6AwABvN8Bu5TyBwABvPsBu5UsABsAA2wmCc8AAb0vAAG9jwABvlgEAXAAAAAEDwABvbMAAb5YAAAAAAAAAXQPAAP64AWADwADlsgFKwABvbwEfwABvc8AA4HEBAWADwADlsgEuAAbAANrngnPAAG+bwABvq8AAcAwAAICtAAAAAQPAAG+xwABwDAAAAAEAAAHAAG+4AAAAhXZgA8AA/FUBasAAb8JgA8AA/FV3XQPAAP6/AWADwADlsgE+AUrAAG/PAR7AAG/awAD+xQIBYAPAAOWyAS4BhXaAwABv/8Bu5kkGwADa6IJzwABwEcAAcCDAAHBWAACVcQAAAAEDwABwJcAAcFYAAAAAAAAAXQPAAP+zAWADwADlsgE+AUrAAHAuAR7AAHA5wADDIwEBYAPAAOWyAS4ABsAA2umCc8AAcFvAAHBgwABw3gAAg/0AAAABA8AAcGfAAHDeAAAAAQEBwABwbQAAAIGmYQMBYAPAAOWyXAAAXAE+Ak7AAHCNwABwkQAAl8FgA8AA/hsBFsAAcJguYcAA/u9FwABwpAHAAHCtwABwrwAAYmADwAD+GwGTARzAAHC2gsAAcLTAbudXYwEAAYHAAHC4wG7nMwDAAP9JAYrAAHC9wG7nVxzAAHC+gsAAcL3AbudXZAEAAZQAwAD/QT4BPRzAAHDLgMAAcMrAbucZIAEAARzAAHDQLksBAAGCwABw0cBu51cAwAD+zgAABsAA2uqCc8AAcOPAAHDtwAByAAAAlpUAAAABA8AAcPPAAHIAAAAAAQEBwABw/gAAIIc5YQMCYAPAAOWyYAPAAOWyYAPAAOWyAABgA8AA5bIBPgVOwABxNcAAcTkAAJfBYAPAAP4bARbAAHFALmHAAP7vScAAcUwcwABxVIHAAHFQwG7oMEgBAAGTAMAA/z89MMAAcVoewABxdcAA0DgAAAAAP07AAHGKwABxkAAAgJZgA8AA5bIBHMAAcZYuSwEAAZMAwAD+zkXAAHGfAcAAcajAAHGqAABiYAPAAP4bAZQBHMAAcbGDwABxr8Bu6KljAQABgcAAcbPAbugwAMAA/0kBi8AAcbrAbuipHMAAcbiDwABxusBu6KlkAQABlADAAP9BPgE9isAAccXAbuiAHMAAcdSAwABxzcBu6AYgAgACgsAAcdXAbuiAHMAAceAuSwEAAYPAAHHhwG7oqQDAAP7OAABKwABx8AGCwABx98Bu6IAGwADa64JzwAByBcAAcgfAAHLkAACDXwAAAAEDwAByDsAAcuQAAAEAAIJ6YAPAAP9oAVsCAgLAAHIRAAAAlpFfAwAAAMAAciEAAACHOWEDAl8DAABgA8AA5bJfAwAAAABfAwAAAT4DTsAAclfAAHJbAACXwWADwAD+GwEWwAByYi5hwAD+70XAAHJuAcAAcnfAAHJ5AABiYAPAAP4bAZMBHMAAcoCDwAByfsBu6dtjAQABgsAAcoLAbum3AMAA/0kBi8AAconAbunbHMAAcoeDwAByicBu6dtkAQABlADAAP9BPgE9iMAAcpTAbumFHMAAcqqBwAByo8Bu6ZMgAgACgMAAcqvAbumFHMAAcr0uSwEAAYPAAHK+wG7p2wDAAP7OAABKwAByzQGAwABy1MBu6YUGwADa7IJzwABy6cAAcvXAAHNGAACAqwAAAAEDwABy+8AAc0YAAAEAAIJ6YAPAAP9oAVsBAQHAAHL+AAAAgaZhAwFgA8AA5bJfAwAAAABdA8AA/n0BXwMAAAFKwABzHQEewABzIcAAzxwCAmADwADlsl8DAAACLoDAAHNEwG7qtwAGwADa7YJzwABzS8AAc1fAAHO1AACElQAAAAEDwABzYMAAc7UAAAEAAIJ6YAPAAP9oAVsBAQHAAHNtAAAAgaZhAwFgA8AA5bJdA8AA/n0BXwMAAAAAXQPAAP59AV8DAAABSsAAc4wBH8AAc5DAAM9hAgJgA8AA5bJfAwAAAi6AwABzs8Bu6zgABsAA2u6Cc8AAc7rAAHO/wAB0XwAAlosAAAABA8AAc8TAAHRfAAAAAQEBwABzygAAAIGmYQMBYAPAAOWyYAPAAPxVAABgA8AA/FUBPgNOwABz6sAAc+4AAJfBYAPAAP4bARbAAHP1LmHAAP7vRcAAdAEBwAB0CsAAdAwAAGJgA8AA/hsBkwEcwAB0E4LAAHQRwG7r/GMBAAGBwAB0FcBu69gAwAD/SQGKwAB0HMBu6/wcwAB0GoLAAHQcwG7r/GQBAAGUAMAA/0E+AUnAAHQnIRzAAHQtgMAAdCzAbuu0IAEAARzAAHQyLksBAAGCwAB0M8Bu6/wAwAD+zgAASsAAdDgBKj9KwAB0UAEpBsAA2u+Cc8AAdGTAAHRpwAB1BgAAgdYAAAABA8AAdGzAAHUGAAAAAQEBwAB0cgAAAIGmYQMBYAPAAOWyYAPAAPxVAABgA8AA/FUBPgNOwAB0ksAAdJYAAJfBYAPAAP4bARbAAHSdLmHAAP7vRcAAdKkBwAB0ssAAdLQAAGJgA8AA/hsBkwEcwAB0u4LAAHS5wG7tB2MBAAGBwAB0vcBu7OMAwAD/SQGKwAB0xMBu7QccwAB0woLAAHTEwG7tB2QBAAGUAMAA/0E+AUnAAHTPHMAAdNSAwAB008Bu7L8gAQABHMAAdNkuSwEAAYLAAHTawG7tBwDAAP7OAABKwAB03wEpP0rAAHT2ASoGwADa8IJzwAB1C8AAdRXAAHY4AACWjwAAAAEDwAB1H8AAdjgAAAACAQHAAHUlAAAAl1RhAwFgA8AA5bJgA8AA/FUAAcAAdUkAACCWkGEDAGADwADlsgFqAGADwAD/JXlgA8AA5bIBPgROwAB1XsAAdWIAAJfBYAPAAP4bARbAAHVpLmHAAP7vRcAAdXUBwAB1fsAAdYAAAGJgA8AA/hsBkwEcwAB1h4PAAHWFwG7uLWMBAAGCwAB1icBu7gkAwAD/SQGLwAB1kMBu7i0cwAB1joPAAHWQwG7uLWQBAAGUAMAA/0E+Ak7AAHWfwAB1pwAAlntgA8AA5bIBHMAAda0uSwEAAYPAAHWuwG7uLQDAAP7OScAAdbgcwAB1wIDAAHW8wG7tySABAAGEwAB1wcBu7oYAAErAAHXLAYTAAHXSwG7uhj9JwAB15SEcwAB18IHAAHXpwG7t40gBAAErAMAA/3VKwAB1+QEcwAB2BoHAAHYAwG7t4yAAAAAAAD89MMAAdg4ewAB2KcAA0DgAAAAABsAA2vGCc8AAdj3AAHZHwAB3gAAAlpQAAAABA8AAdlDAAHeAAAAAAgEBwAB2VgAAAJdUYQMBYAPAAOWyYAPAAPxVAAHAAHZ6AAAglpBhAwBgA8AA5bIBagBgA8AA/yV5YAPAAOWyAT4ETsAAdo/AAHaTAACXwWADwAD+GwEWwAB2mi5hwAD+70XAAHamAcAAdq/AAHaxAABiYAPAAP4bARzAAHa3gsAAdrPAbu+ZgY0BAAGUAMAA/0IBHMAAdr6DwAB2vMBu772BbQEAAZMAwAD/TAGLwAB2xsBu770cwAB2xIPAAHbGwG7vvYGNAQABlADAAP9CPgJOwAB21cAAdt0AAJZ7YAPAAOWyARzAAHbjLksBAAGDwAB25MBu770AwAD+zknAAHbuHMAAdvaAwAB28sBu71kgAQABhMAAdvfAbvAoAAA+AUrAAHcLAYTAAHcSwG7wKD9JwAB3LSEcwAB3OIHAAHcxwG7vc0gBAAErAMAA/3VKwAB3QQEcwAB3ToHAAHdIwG7vcyAAAAAAAD89MMAAd1YewAB3ccAA0DgAAAAABsAA2vKCc8AAd4XAAHePwAB5mQAAlpcAAAABA8AAd5rAAHmZAAAAAgEBwAB3oAAAAJdUYQMBYAPAAOWyYAPAAPxVAAHAAHfEAAAglpBhAwBgA8AA5bIBagBgA8AA/yV5YAPAAOWyAT4HTsAAd9nAAHfgAACBdlsBK07AAHfxwAB3/wAAwABzJWADwAD8VQEqTsAAeBDAAHgUAACXwWADwAD+GwEWwAB4Gy5hwAD+70XAAHgnAcAAeDDAAHgyAABiYAPAAP4bAZMBHMAAeDmFwAB4N8Bu8YhjAQABhMAAeDvAbvFkAMAA/0kBjcAAeELAbvGIHMAAeECFwAB4QsBu8YhkAQABlADAAP9BPgJOwAB4UcAAeFkAAJZ7YAPAAOWyARzAAHhfLksBAAGFwAB4YMBu8YgAwAD+zknAAHhqHMAAeHKAwAB4bsBu8P0gAQABhsAAeHPAbvHhAAA+A0nAAHiHg8AAeIvAbvFNPgE9MMAAeKYewAB4wcAA0DkAAAAAPz2KwAB43sBu8T2GwAB458Bu8eE9i8AAePjAbvFNKT9JwAB5IIPAAHkkwG7xTUrAAHkzASbAAHkzAYLAAHk6wG7xPWADwADlsj9JwAB5RiEcwAB5UYHAAHlKwG7xF0gBAAErAMAA/3VKwAB5WgEcwAB5Z4HAAHlhwG7xFyAAAAAAAD89MMAAeW8ewAB5isAA0DgAAAAABsAA2vOCc8AAeZ7AAHmowAB52QAAlo4AAAABA8AAebHAAHnZAAAAAQEBwAB5tgAAACdgA8AA/hsAAGADwADlsgE+AUrAAHnDARzAAHnOLksBAAGAwAB5z8Bu8xMAwAD+zgbAANr0gnPAAHnewAB548AAekEAAFYAAAABA8AAeebAAHpBAAAAAQEBwAB58QAAIICWYAPAAOWyAABcAT4BPTDAAHn+H8AAegjAAP2tAQABJ8AAd8QABsAA2vWCc8AAekbAAHpLwAB6tgAAgKUAAAABA8AAelHAAHq2AAAAAQEBwAB6ZgAAIICWXQPAAP59AWADwADlsgAAXAE+AT0wwAB6cx/AAHp9wAD9rQEAASfAAHfEAAbAANr2gnPAAHq7wAB6wMAAezEAAJ86AAAAAQPAAHrGwAB7MQAAAAICAsAAessAAAAnYAPAAP4bAMAAetwAACCAlmADwADlsgAAXAE+AT0wwAB66R/AAHrzwAD9rQEAASfAAHpnAAbAANr3gnPAAHs2wAB7O8AAe7oAAKBHAAAAAQPAAHtEwAB7ugAAAAICAsAAe0kAAAAnYAPAAP4bAMAAe2QAACApXQPAAP59AWADwADlsgAAXAE+AT0wwAB7ch/AAHt8wAD9rQEAASfAAHpnAAbAANr4gnPAAHu/wAB7xMAAfGUAAICuAAAAAQPAAHvIwAB8ZQAAAAEAAcAAe84AAACbd2EDAmADwADlsmADwADlsmADwAD+GwFqAGADwAD/JXkAXAE+AknAAHv4HMAAfASAwAB7/MBu9PpIAQABKwDAAP91PgE9MMAAfBUnwAB6cT89HsAAfE7AANDOAgFgA8AA5bICLoDAAHxZwG70+gAGwADa+YJzwAB8asAAfG7AAH1vAACAuwAAAAEDwAB8dcAAfW8AAAACAQLAAHyAAAAglntgA8AA5bIAwAB8jgAAAGpgA8AA/hsBasAAfJZgA8AA/hsJAGADwAD+GwE+A0nAAHygHMAAfKqBwAB8pMBu9aqBbQEAARbAAHyyLmHAAP7vAMAA/0w+AUrAAHzCARzAAHzJlIHGAAAAAMAA/j5JwAB82BzAAHzigcAAfNzAbvWqYwEAAZMAwAD/ST4BPYnAAHzvwG71qpM/RcAAfQQBwAB9DcAAfQ8AAGJgA8AA/hsBgcAAfRHAbvWqARzAAH0agsAAfRjAbvZAYwEAARbAAH0hLmHAAP7vAMAA/0kBisAAfSnAbvZAHMAAfSqCwAB9KcBu9kBkAQABlADAAP9BPgFJwAB9NhzAAH1CHMAAfT4uSwEAAYLAAH0/wG72QADAAP7OSAEAAYDAAH1FwG71mgDAAP91SsAAfU4BgsAAfVXAbvZAP0rAAH1iARzAAH1plIHGAAAAAMAA/j4GwADa+oJzwAB9dMAAfXjAAH6WAACWtQAAAAEDwAB9g8AAfpYAAAACAQLAAH2OAAAglntgA8AA5bIAwAB9nAAAAGpgA8AA/hsBasAAfaRgA8AA/yV5AGADwAD+GwE+A0nAAH2xIhzAAH27gcAAfbXAbvc2SAEAASsAwAD/PwEcwAB9zIHAAH3GwG73NoFtAQABFsAAfdQuYcAA/u8AwAD/TD4BPYnAAH3kwG73NhzAAH34FsAAffEuYcAA/u+BjQEAAZQAwAD/QknAAH4IHMAAfhKBwAB+DMBu9zZjAQABkwDAAP9JPgFKwAB+HwEcwAB+JpSBxgAAAADAAP4+P0XAAH40AcAAfj3AAH4/AABiYAPAAP4bAYHAAH5BwG73NgEcwAB+SoLAAH5IwG74AIFtAQABkwDAAP9MAYrAAH5QwG74ABzAAH5RgsAAflDAbvgAgY0BAAGUAMAA/0I+AUnAAH5dHMAAfmkcwAB+ZS5LAQABgsAAfmbAbvgAAMAA/s5IAQABgMAAfmzAbvcmAMAA/3VKwAB+dQGCwAB+fMBu+AA/SsAAfokBHMAAfpCUgcYAAAAAwAD+PgbAANr7gnPAAH6bwAB+pcAAfwAAAIYuAAAAAQPAAH6vwAB/AAAAAAAAAABgA8AA5bIBPgE9MMAAfrgfwAB+wsAA/a0BAAEnwAB3xQAGwADa/IJzwAB/BcAAfw/AAH9xAACgRgAAAAEDwAB/F8AAf3EAAAABAQHAAH8cAAAAJ2ADwAD+GwAAYAPAAOWyAT4BPTDAAH8pH8AAfzPAAP2tAQABJ8AAd8UABsAA2v2Cc8AAf3bAAH97wAB/8wAAl1MAAAABA8AAf4bAAH/zAAAAAQEBwAB/jAAAAJdUYQMBYAPAAOWyYAPAAPxVAABcAT4BPTDAAH+rH8AAf7XAAP2tAQABJ8AAd8UABsAA2v6Cc8AAf/jAAH/9wACAdQAAl1YAAAABA8AAgAjAAIB1AAAAAQEBwACADgAAAJdUYQMBYAPAAOWyYAPAAPxVAABcAT4BPTDAAIAtH8AAgDfAAP2tAQABJ8AAd8UABsAA2wqCc8AAgHrAAICIwACA4gEAgx4AAAABA8AAgI7AAIDiAAAAAAAAAGADwADlsgE+AknAAICUHMAAgJ8WwACAmC5hwAD+74CXAQABkwDAAP9LSsAAgKQBHMAAgK8uSwEAAZMAwAD+zj89MMAAgLgewACA08AA0DgAAAAABsAA2wuCc8AAgOfAAID1wACBVwEAgeoAAAABA8AAgPrAAIFXAAAAAAAAAGADwADlsgE+AknAAIEAHMAAgQsWwACBBC5hwAD+74CXAQABkwDAAP9LSsAAgRABHMAAgRsuSwEAARzAAIEjFsAAgRwuYcAA/u+BjQEAAZQAwAD/QgDAAP7OPz0wwACBLR7AAIFIwADQOAAAAAAGwADbDIJzwACBXMAAgWrAAIIBAQCAwwAAAAEDwACBccAAggEAAAAAAAAAYAPAAOWyAT4DScAAgXccwACBghbAAIF7LmHAAP7vSAEAAZQAwAD/P0rAAIGIARzAAIGTLksBAAGTAMAA/s4/ScAAgZwcwACBpxbAAIGgLmHAAP7vSAEAAZMAwAD/Pz0wwACBrR7AAIHIwADQOAAAAAA/PTDAAIHZHsAAgfTAANA5AAAAAAbAANr/gnPAAIIGwACCFMAAgwMAAIFYAAAAAQPAAIIbwACDAwAAAAIBAsAAgiAAAABqYAPAAP4bAMAAgiwAAACCkGADwAD+GwFqAGADwAD/JXkAYAPAAOWUAT4FPYnAAII4wG78Gh7AAIJJwAD9XAMAA4DAAIJZwG78C4HAAIJgwG78GhbAAIJqLmHAAP7vAE7AAIJ7wACCggAAYWADwAD+GwEcwACCiIHAAIKEwG78GoGNAQABgMAAgorAbvwLAMAA/0JOwACCo8AAgqoAAIF2YAPAAOWUARzAAIKsLsAAemrAANW8AQABgsAAgrjAbvxyAMAA1m09HMAAgsyDwACCxcBu/KaDZAQABJOCwACC2MBu/HIugMAAgubAbvwLAMAA/uRKwACC8gGDwACC+cBu/KYGwADbAIJzwACDCMAAgw3AAIOOAACgSQAAAAEDwACDE8AAg44AAAACAgLAAIMYAAAAJ2ADwAD+GwDAAIMzAAAgg9FdA8AA/n0BYAPAAOWyAABcAT4CTsAAg0nAAINNAAGCkGADwAD+GwEcwACDXxbAAINYgcAAg0/Abv1NYcAA/qBkAQABgMAAg2HAbv0+AMAA/0E9HMAAg2wug2QDAAOAwACDdcBu/T6CwACDfMBu/WqBwACDgcBu/U0AwADWdgbAANsBgnPAAIOTwACDmMAAhFMAAJwHAAAAAQPAAIOhwACEUwAAAAMCA8AAg6YAAABqYAPAAP4bAMAAg7EAAACCkGADwAD+GwDAAIPBAAAgwABEdGADwADlsgFqAGADwAD/JXkAXAE+Aj0ewACD3sAA/VwDAAOAwACD7sBu/f2BwACD9cBu/gwWwACD/y5hwAD+7wBFwACEDAHAAIQVwACEFwAAYmADwAD+GwGAwACEGcBu/f0BHMAAhCKDwACEIMBu/m1jAQABgcAAhCTAbv4MAMAA/0kBi8AAhCvAbv5tHMAAhCmDwACEK8Bu/m1kAQABlADAAP9BPgE9HMAAhDougL8CAAKDwACEO8Bu/m2CwACEQMBu/hwAwAD+zwAAbs/QAG7QQwBu0HcAbtCpAG7Q2wBu0SIAbtF9AG7R8ABu0lEAbtLgAG7TiQBu1NkAbtZdAG7XqwBu2K8AbtpGAG7iLQBu4qIAbuMPAG7jhABu4/EAbuRmAG7kuQBu5RIAbuXMAG7mHgBu5poAbubvAG7n3ABu6U8AbuqBAG7rAgBu64oAbuyVAG7tnwBu7y8AbvDTAG7y6QBu80oAbvOgAG7z/gBu9GQAbvTQAG71cABu9vwAbvi0AG75AABu+VsAbvm7AG76GwBu+pkAbvsxAG774QBu/RQAbv3TAG7+8AAAADcCwADbEIJzwAE5ssABOdLAAT4QA8AAeu4BasABObNgA8AA/BzAAYJAAAFgAcAA2tIAAWABwADllAAACAbAANsTgnPAAToywAE6OsABOngEAcAAeEnAANW8AAAAAQPAATpYwAE6eAAAAAAAAABgA8AA2xABPgE9MMABOmEnwABi3gbAANsVgnPAATp9wAE6vsABO14DAEsBasABOn5gA8AA/BzAAZ2WAAABA8ABOsDAATteAAAAAQEBwAE6xQAAACdgA8AA/hsAAGADwADlsgE+AknAATrSIhzAATrcgMABOtbAbwCNYwEAAZMAwAD/SQEcwAE66YDAATrjwG8AjYFtAQABFsABOuwuYcAA1zsAwAD/TD4BPTDAATr8H8ABOwbAAP1xAwADgMABOxfAbwCNLicnAD9KwAE7OAEcwAE7Py7AAHrvwADVvAEAAYDAATtUwG8AjQDAANsZBsAA2xaCc8ABO2PAATtxwAE8IwMAgL8AAAABA8ABO3TAATwjAAAAAgICwAE7eQAAACdgA8AA/hsAwAE7igAAIICWYAPAAOWyAABcAT4CScABO5ciHMABO6GAwAE7m8BvAVljAQABkwDAAP9JARzAATuugMABO6jAbwFZgW0BAAEWwAE7sS5hwADXOwDAAP9MPgE9MMABO8EfwAE7y8AA/XEDAAOAwAE73MBvAVkuJycAPz0cwAE7/S7AAHrwwADVvAIAAoDAATwSwG8BWYHAATwZwG8BaADAANsaBsAA2x2Cc8ABPF3AATxlwAE8pgEAwABwKgAAAAEDwAE8eMABPKYAAAAAAAAAYAPAAP4bAT4BSsABPH4BasABPJNgA8AA/huDcAbAANsYgnPAATzKwAE82MABPRoAAMAAemrAANW8AAAAAQPAATzjwAE9GgAAAAEBAcABPOgAAABhYAPAAP4bAABgA8AA5ZQBPgFKwAE89gEewAE9AcAA5ZgBAAGAwAE9D8BvAoMABsAA2xmCc8ABPR/AAT0pwAE9jgAAwAB678AA1bwAAAABA8ABPT3AAT2OAAAAAQEBwAE9QgAAACdgA8AA/hsAAGADwADlsgE+AUrAAT1PARzAAT1WLsAAeq3AANW8AQABHMABPWqAwAE9ZMBvAuiDjQEAAWrAAT16YAPAAP4bg3AAwAD/QwDAANdSBsAA2xqCc8ABPZPAAT2YwAE+DgAAwAB68MAA1bwAAAABA8ABPazAAT4OAAAAAgICwAE9sQAAACdgA8AA/hsAwAE9wgAAAICWYAPAAOWyAABcAT4BPRzAAT3PLsAAeq/AANW8AgACHMABPeOAwAE93cBvA3KDjQEAAWrAAT3zYAPAAP4bg3AAwAD/Q4HAAT4EwG8DgQDAANdTBsAA2xuCc8ABOdLAATnSAAAQoD8AwADV38AA1d8BAwAAAAAAAwMDAAAAAGpgA8AA/hsAAAAAAIKQYAPAAP4bAAAAACCD0V0DwAD+fQFbAABcAUoAAR0AoD8DAAOAAMBvBAKBAMBvBA6CAMBvBBsAwADV3wAAbwAQAG8AVQBvAS8AbwIKAG8CUwBvArgAbwNCAG8D2wBvBE4AAAAIAsAA2x6Cc8ABP1TAAT90wAFDijfAAHrxAAABYAHAANc1AAFgAcAA1p4AAQXAANtPAAAAAAQAAAMAAAAAAAAAAABgA8AA2x4BPwEJAADAANdaAAAAADcGwADbIIJzwAE/dMABP3QAABCgPwDAANXfwADV3wEDAAAAAAADAwMAAAAAamADwAD+GwAAAAAAgpBgA8AA/hsAAAAAIIPRXQPAAP59AVsAAFwBSgABHQCgPwMAA4AAwG8E9IEAwG8FAIIAwG8FDQDAANXfBsAA21GCc8AAhJbAAISewACEsAECwABwKgAAAAEDwACEsMAAhLAAAAAAAAAAYAPAAP4bAAbAANtSgnPAAIS0wACEvMAAhMkBAqocAAAAAQPAAITJwACEyQAAAAAAAABgA8AA/hsABsAA21OCc8AAhM3AAITdwACE4wECgo8AAAABA8AAhOPAAITjAAAAAAAAAGADwADXGAAGwADbIoJzwACE6MAAhPTAAIULAALAAHpqwADVvAAAAAEDwACE/8AAhQsAAAABAQHAAIUEAAAAYWADwAD+GwAAYAPAAOWeAAbAANsjgnPAAIUQwACFHMAAhUwAAJabAAAAAQPAAIUowACFTAAAAQAAgnpgA8AA/2gBWwAAAABdA8AA/n0BXwMAAAFKwACFLgEfwACFMsAA0CsBAV8DAAABLgAGwADbJIJzwACFUcAAhWPAAIXLAACWkgAAAAEDwACFbcAAhcsAAAABAQHAAIWAAAAgg9tdA8AA/n0BYAPAAObaAABdA8AA/n0BYAPAAObaAUrAAIWQAR7AAIWUwADQAwIBYAPAAObaAi6AwACFxcBvBqQABsAA2yWCc8AAhdDAAIXYwACGBAAAlo0AAAABA8AAhd/AAIYEAAABAACXTmADwAD/aAFbAAAAAF0DwAD+vwFfAwAAAUrAAIXlAR7AAIXqwAD+ygECYAPAAObaXwMAAAEuAAbAANtagnPAAIYIwACGEcAAhn4CAIMeAAAAAQPAAIYWwACGfgAAAAEBAcAAhh8AACCAlmADwADm2gAAXAE+AknAAIYsHMAAhjwWwACGNS5hwAD+70gBAAGTAMAA/z89MMAAhkIfwACGTMAA/XECAAKTLgA/PRzAAIZvLoC/AgACk4DAAIZ1wG8HeADAAP7PBsAA21uCc8AAhoPAAIaMwACHBgIAgeoAAAABA8AAhpDAAIcGAAAAAQEBwACGmQAAIICWYAPAAObaAABcAT4CScAAhqYcwACGthbAAIavLmHAAP7vSAEAAZMAwAD/Pz0wwACGvB/AAIbGwAD9cQIAApMuAD89HMAAhukugL8CAAIcwACG9hbAAIbvLmHAAP7vgY0BAAGUAMAA/0KAwACG/cBvCAcAwAD+zwbAANsmgnPAAIcLwACHD8AAh8wAAKBEAAAAAQPAAIcZwACHzAAAAAIBAsAAhx8AAACXVGEDAWADwADm2mADwAD8VQDAAIc7AAAAamADwAD+GwFqwACHQ2ADwAD+GwkAYAPAAP4bAT4DScAAh00cwACHV4HAAIdRwG8IyWMBAAGTAMAA/0k9icAAh1zAbwjJkz9FwACHawHAAId0wACHdgAAYmADwAD+GwGBwACHeMBvCMkBHMAAh4GCwACHf8BvCR1jAQABFsAAh4MuYcAA/u8AwAD/SQGKwACHi8BvCR0cwACHjILAAIeLwG8JHWQBAAGUAMAA/0E+AUnAAIeYHMAAh6CAwACHnMBvCLAgAQABHMAAh6UuSwEAAYLAAIemwG8JHQDAAP7OAABKwACHqwGCwACHssBvCR0/SsAAh78BHMAAh8aUgcYAAAAAwAD+PgbAANsngnPAAIfRwACH1cAAiLgAAKBFAAAAAQPAAIfjwACIuAAAAAIBAsAAh+kAAACXVGEDAWADwADm2mADwAD8VQDAAIgFAAAAamADwAD+GwFqAGADwAD/JXkAYAPAAP4bAT4DScAAiBMiHMAAiB2BwACIF8BvChlIAQABKwDAAP8/ARzAAIgugcAAiCjAbwoZgW0BAAEWwACINi5hwAD+7wDAAP9MPYnAAIg+wG8KGRzAAIhSFsAAiEsuYcAA/u+BjQEAAZQAwAD/Qj9FwACIWwHAAIhkwACIZgAAYmADwAD+GwGBwACIaMBvChkBHMAAiHGCwACIb8BvCqmBbQEAAZMAwAD/TAGKwACId8BvCqkcwACIeILAAIh3wG8KqYGNAQABlADAAP9CPgFJwACIhBzAAIiMgMAAiIjAbwoAIAEAARzAAIiRLksBAAGCwACIksBvCqkAwAD+zgAASsAAiJcBgsAAiJ7AbwqpP0rAAIirARzAAIiylIHGAAAAAMAA/j4GwADbKIJzwACIvcAAiNTAAImvAwBkAAAAAQPAAIjVwACJrwAAAAEBAcAAiOQAACCD210DwAD+vwFgA8AA5toAAF0DwAD+vwFgA8AA5toBPgJOwACI9cAAiQEAAINeYAPAAP4bARzAAIkPFsAAiQguYcAA/u9kAQABFsAAiReAwACJEcBvC4NhwAD+7wDAAP9BSsAAiSMBNcAAiTMAAAEAXQPAAP6/AWADwADm2gExwACJM2ADwADm2gA1AAAAAQBbARfAAIk+gsAAiTzAbwvyYYHAAIlHwG8LrMAA/u01AAAAAQBbARzAAIlbgsAAiVnAbwvyg2QDAAOTFsAAiWwuYcAA/u8uAMAA/uQ1AAAAAQBbARzAAImCgsAAiYDAbwvyg2QDAAMWwACJkC5hwAD+74HAAImYwG8LrIDAAImlwG8LgwDAAP7kggDAbwvyBsAA2ymCc8AAibTAAIm5wACKWAAAgxwAAAABA8AAicHAAIpYAAAAAQEBwACJyQAAAJZ7YAPAAP9oAABgA8AA/FUBPgNOwACJ3MAAieAAAJfBYAPAAP4bARbAAInnLmHAAP7vRcAAifMBwACJ/MAAif4AAGJgA8AA/hsBkwEcwACKBYLAAIoDwG8NEWMBAAGBwACKB8BvDO0AwAD/SQGKwACKDsBvDREcwACKDILAAIoOwG8NEWQBAAGUAMAA/0E+AUnAAIoZHMAAiiUcwACKIS5LAQABgsAAiiLAbw0RAMAA/s5IAQABgMAAiijAbwzSAMAA/3VKwACKMQEpP0rAAIpIASoGwADbKoJzwACKXcAAimLAAItLAACgMwAAAAEDwACKacAAi0sAAAABAAHAAIpyAAAAoDRgA8AA0n4BagBgA8AA/yV5AFwBPgM9IxzAAIqIgMAAioHAbw3WSAEAASsAwAD/dYjAAIqBwG8N1h7AAIqQwADSgAAAAAArAWADwADSfk7AAIqiwACKpAAAYmADwAD+GwEWwACKqy5hwAD+70PAAIq3HMAAisCBwACKvsBvDi2AlwEAAZQAwAD/Sz4FTsAAitHAAIrVAACgNWADwAD+GwEcwACK3oDAAIrXwG8N1qA2AQABgcAAiubAbw4tAMAA0oM9icAAivDAbw4tHMAAivKBwACK8MBvDi2BjQEAAZQAwAD/Qk7AAIsCwACLBgAAoDdgA8AA5toBHMAAiwwuSwEAAYHAAIsNwG8OLQDAAP7OPRzAAIsbLoC/AgACgcAAixzAbw4tHMAAiyUuSwEAAYLAAIsmwG8OawDAAP7OAMAA/s89HMAAizYugL8CAAKCwACLN8BvDmuDwACLPsBvDsMAwAD+zwbAANsrgnPAAItQwACLVcAAlDQAAINkAAAAAQPAAItdwACUNAAAAAQDBMAAi2IAAABqYAPAAP4bAMAAi20AAACCkGADwAD+GwDAAIuEAAAgloNdA8AA/n0BYAPAAObaAMAAi5UAAACgPGADwAD+GwFqwACLoWADwAD+GwkAXAE+C0nAAIvAIiIcwACLxpOAlwEAAYDAAIvIwG8PbQDAAP9LARzAAIvXgMAAi9HAbw9tgJcBAAGBwACL2cBvD3wAwAD/SwEcwACL5IHAAIvgwG8PfICXAQABFsAAi+YuYcAA/u8AwAD/Sz4CPR7AAIwBwAD9XAMAA4DAAIwRwG8PbYHAAIwYwG8PfBbAAIwdLmHAAP7vAEAqwACMRcAAjEoAP0nAAIxXHMAAjGWDwACMW8BvD6NjAQABkwDAAP9JPgE9MMAAjHIfwACMg8AA/WUEAASDwACMicBvD6OTKyegPAA/TsAAjLzAAIzCAAGA7mADwAD+GwEcwACMyIHAAIzEwG8PfIGNAQABgMAAjMrAbw9tAMAA/0JJwACM1RzAAIzzHMAAjOYWwACM34LAAIzawG8PjGHAAP6ggY0BAAGDwACM6MBvD6MAwAD/QmMBAAGEwACM9cBvEKUAwAD/ST4BPTDAAI0EHsAAjR/AANA6AAAAAD9JwACNNBzAAI0+hMAAjTjAbxClSAEAAZMAwAD/P0rAAI1EAD9JwACNUSXAAI1agsAAjVXAbw+MYAPAANXSPgJOwACN5cAAjfUAAcAAemtgA8AA1dIBJsAAjfwAgsAAjffAbw+MYAPAANXSScAAjhUcwACOMRbAAI4eLsAAcCrAANagSAEAARbAAI5EhcAAjjTAbxF2wABwKsAA1dUAwAD/Pz4BScAAjmIiHMAAjm2EwACOZ8BvEKVjAQABNwoAwAD/SQAhHMAAjo4WwACOh4XAAI53wG8RdoKPwADV10gBAAEWwACOli6Cj8AA1qIAwADXIz4CPR7AAI6xwADNLgUABSbAAI67AILAAI62wG8PjF0DwAD+vwFgA8AA5tqDwACOzcBvD6MugMAAjt7Abw9thMAAjuXAbxClAErAAI73AEnAAI8OHMAAjyQWwACPHhbAAI8XLoKPwADWorf3wADVvMAA1xvAAHApwADVvAYABhzAAI9WHMAAj0GAwACPO8BvD22DjQEAARbAAI9DLsAAcCrAANagAMAA/0NkAQABFsAAj10uqhzAANahAMAA/0EcwACPfoTAAI94wG8QpYONAQABFsAAj4AuwABwKsAA1qAAwAD/QxbAAI+3FsAAj7CFwACPoMBvEXaCj8AA1de398AA1bzAANcbHMAAj+kcwACP1IPAAI/KwG8Po4ONAQABFsAAj9YuwABwKsAA1qAAwAD/Q2QBAAEWwACP+4XAAI/rwG8RdqocwADV1gDAAP9BHsAAkB7AAM07AQABLgAewACQP8AAzTsBAAGCwACQRcBvD4wAAMAA1eI+AUrAAJBZAD9JwACQeBzAAJCTFsAAkIyFwACQfMBvEXaCj8AA1ddIAQABFsAAkJsugo/AANaiAMAA1yM+BU7AAJFxwACRfAABwAB6bF0DwAD+vwFgA8AA5toBJsAAkYMAgsAAkX7Abw+MXQPAAP6/AWADwADm2k7AAJGjwACRrgABwAB6bWADwADlngEcwACRsC7AAHpqwADVvAEAAYTAAJG8wG8QpQDAANaqRcAAkcwBwACR1cAAkdcAAGJgA8AA/hsBkwEcwACR3hTAAJHcwG8UUggAYwEAAYTAAJHgwG8QpQDAAP9JARXAAJHnwG8UUggcwACR6BTAAJHnwG8UUggAZAEAAZQAwAD/QT4BPRzAAJICh8AAkfjAbxQYgL8CAAIUwACSA8BvFFIIABzAAJIShsAAkgjAbxPfSwEAARzAAJIdg8AAkhPAbw+jZAEAARTAAJIfwG8UUggAAMAA/0EAwAD+zgDAAP7PRcAAkjUBwACSPsAAkkAAAGJgA8AA/hsBgMAAkkLAbw9tARzAAJJLFMAAkknAbxUSCABjAQABgcAAkk3Abw98AMAA/0kBFcAAklLAbxUSCBzAAJJTFMAAklLAbxUSCABkAQABlADAAP9BPgE9HMAAkmcugL8CAAIUwACSaMBvFRIIABzAAJJ3h8AAkm3AbxQYSwEAARzAAJJ6FMAAknjAbxUSCACBjQEAAYDAAJJ8wG8PbQDAAP9CAMAA/s4AwAD+z0rAAJKWAD8/TsAAkrYAAACgPV0DwAD+vwFbAE7AAJLJAAAAoD5gA8AA/hsAScAAktklwACS4oLAAJLdwG8PjF0DwAD+vwFgA8AA5to+Aj2NwACS/MBvFdYUwACTCMBvD4wCAV0DwAD+vwFgA8AA5to9jsAAkxTAbxXpg8AAkyHAbw+jPgI9jcAAkz/AbxXWHMAAk2AcwACTUILAAJNLwG8PjJaEAQABg8AAk1XAbw+jAMAA/peArQEAAAGFdirAAP6TPY7AAJN/wG8V6ZNJwACTmRzAAJOwHMAAk6iGwACTncBvFelkAQABhMAAk6rAbxClAMAA/0GAlwEAARbAAJO8hcAAk7LAbxXWYcAA/u8AwAD/Sz4BPTDAAJPMHsAAk+fAANA6AAAAAD89HsAAlAHAAM0uBQAFhcAAlAbAbxXWhsAAlBHAbxXpLoDAAJQjwG8PbYTAAJQqwG8QpQAGwADbLIJzwACUOcAAlEvAAJSWAACBpQAAAAEDwACUUMAAlJYAAAABAQHAAJRWAAAAgaZhAwFgA8AA5tpgA8AA/FUAAF0DwAD+fQFgA8AA5toBSsAAlHMBH8AAlHfAAM9NAgFgA8AA5toCLoDAAJSUwG8XVAAGwADbLYJzwACUm8AAlK3AAJTkAACWmQAAAAEDwACUscAAlOQAAAABAQHAAJS2AAAAg6hgA8AA/hsAAF0DwAD+fQFgA8AA5toBSsAAlLwBH8AAlMDAAM8IAwFgA8AA5toDLpOAwACU4sBvF8kABsAA2y6Cc8AAlOnAAJT7wACVVAAAlpoAAAABA8AAlQTAAJVUAAAAAQEBwACVCgAAAJdUYQMBYAPAAObaYAPAAPxVAABdA8AA/n0BYAPAAObaAUrAAJUqAR/AAJUuwADPkwIBYAPAAObaAi6AwACVT8BvGDYABsAA2y+Cc8AAlVnAAJVrwACVpQAAloQAAAABA8AAlW/AAJWlAAAAAQEBwACVdAAAAIOoYAPAAP4bAABdA8AA/n0BYAPAAObaAUrAAJV6AR/AAJV+wADPCAMBYAPAAObaAy6AwACVncBvGKsrAAbAANswgnPAAJWqwACVvMAAlhUAAJaYAAAAAQPAAJXFwACWFQAAAAEBAcAAlcsAAACXVGEDAWADwADm2mADwAD8VQAAXQPAAP59AWADwADm2gFKwACV6wEfwACV78AAz8sCAWADwADm2gIugMAAlhDAbxkYAAbAANtUgnPAAJYawACWMMAAlmMBAJjgAAAAAQPAAJY5wACWYwAAAAAAAABdA8AA/n0BYAPAAObaAUrAAJY8AR/AAJZAwADQuQEBYAPAAObaAS4ABsAA2zGCc8AAlmjAAJZ6wACWowAAnMIAAAABA8AAln/AAJajAAAAAAAAAF0DwAD+8QJgA8AA/htgA8AA5toBSsAAloUBH8AAlonAANCvAQFgA8AA5toBLgAGwADbMoJzwACWqMAAlrrAAJdRAACgOQAAAAEDwACWwsAAl1EAAAACAQLAAJbHAAAAamADwAD+GwDAAJbTAAAAgpBgA8AA/hsBagBgA8AA/yV5AF0DwAD+fQFgA8AA5toBPgI9HsAAlurAAP1cAwADgMAAlvrAbxo5gcAAlwHAbxpIFsAAlwsuYcAA/u8ASsAAlxgBH8AAlyPAAM8IAwFgA8AA5toDLoDAAJdCwG8aOYHAAJdJwG8aSAAGwADbVYJzwACXVsAAl2zAAJedAQBcAAAAAQPAAJd1wACXnQAAAAAAAABdA8AA/rgBYAPAAObaAUrAAJd4AR/AAJd8wADgcQEBYAPAAObaAS4ABsAA2zOCc8AAl6LAAJewwACYDwAAgK0AAAABA8AAl7bAAJgPAAAAAQAAAcAAl70AAACFdmADwAD8VQFqwACXx2ADwAD8VXddA8AA/r8BYAPAAObaAT4BSsAAl9QBHsAAl9/AAP7FAgFgA8AA5toBLgGFdoDAAJgCwG8bRgbAANs0gnPAAJgUwACYIcAAmFUAAJVxAAAAAQPAAJgmwACYVQAAAAAAAABdA8AA/7MBYAPAAObaAT4BSsAAmC8BHsAAmDrAAMMjAQFgA8AA5toBLgAGwADbNYJzwACYWsAAmF/AAJjbAACD/QAAAAEDwACYZsAAmNsAAAABAQHAAJhsAAAAgaZhAwFgA8AA5tpcAABcAT4CTsAAmIrAAJiOAACXwWADwAD+GwEWwACYlS5hwAD+70XAAJihAcAAmKrAAJisAABiYAPAAP4bAZMBHMAAmLOCwACYscBvHFRjAQABgcAAmLXAbxwwAMAA/0kBisAAmLrAbxxUHMAAmLuCwACYusBvHFRkAQABlADAAP9BPgE9HMAAmMiAwACYx8BvHBYgAQABHMAAmM0uSwEAAYLAAJjOwG8cVADAAP7OAAAGwADbNoJzwACY4MAAmOjAAJn1AACWlQAAAAEDwACY7sAAmfUAAAABAQHAAJj3AAAghzlhAwJgA8AA5tpgA8AA5tpgA8AA5toAAGADwADm2gE+BU7AAJkqwACZLgAAl8FgA8AA/hsBFsAAmTUuYcAA/u9JwACZQRzAAJlJgcAAmUXAbx0tSAEAAZMAwAD/Pz0wwACZTx7AAJlqwADQOAAAAAA/TsAAmX/AAJmFAACAlmADwADm2gEcwACZiy5LAQABkwDAAP7ORcAAmZQBwACZncAAmZ8AAGJgA8AA/hsBlAEcwACZpoPAAJmkwG8dpmMBAAGBwACZqMBvHS0AwAD/SQGLwACZr8BvHaYcwACZrYPAAJmvwG8dpmQBAAGUAMAA/0E+AT2KwACZusBvHX0cwACZyYDAAJnCwG8dAyACAAKCwACZysBvHX0cwACZ1S5LAQABg8AAmdbAbx2mAMAA/s4AAErAAJnlAYLAAJnswG8dfQbAANs3gnPAAJn6wACZ/MAAmtcAAINfAAAAAQPAAJoDwACa1wAAAQAAgnpgA8AA/2gBWwICAsAAmgYAAACWkV8DAAAAwACaFgAAAIc5YQMCXwMAAGADwADm2l8DAAAAAF8DAAABPgNOwACaSsAAmk4AAJfBYAPAAP4bARbAAJpVLmHAAP7vRcAAmmEBwACaasAAmmwAAGJgA8AA/hsBkwEcwACac4PAAJpxwG8e2GMBAAGCwACadcBvHrQAwAD/SQGLwACafMBvHtgcwACaeoPAAJp8wG8e2GQBAAGUAMAA/0E+AT2IwACah8BvHoIcwACanYHAAJqWwG8ekCACAAKAwACansBvHoIcwACasC5LAQABg8AAmrHAbx7YAMAA/s4AAErAAJrAAYDAAJrHwG8eggbAANs4gnPAAJrcwACa6MAAmzUAAICrAAAAAQPAAJruwACbNQAAAQAAgnpgA8AA/2gBWwEBAcAAmvEAAACBpmEDAWADwADm2l8DAAAAAF0DwAD+fQFfAwAAAUrAAJsOAR7AAJsSwADPHAICYAPAAObaXwMAAAIugMAAmzPAbx+0AAbAANs5gnPAAJs6wACbRsAAm6AAAISVAAAAAQPAAJtPwACboAAAAQAAgnpgA8AA/2gBWwEBAcAAm1wAAACBpmEDAWADwADm2l0DwAD+fQFfAwAAAABdA8AA/n0BXwMAAAFKwACbeQEfwACbfcAAz2ECAmADwADm2l8DAAACLoDAAJuewG8gNQAGwADbOoJzwACbpcAAm6rAAJxIAACWiwAAAAEDwACbr8AAnEgAAAABAQHAAJu1AAAAgaZhAwFgA8AA5tpgA8AA/FUAAGADwAD8VQE+A07AAJvTwACb1wAAl8FgA8AA/hsBFsAAm94uYcAA/u9FwACb6gHAAJvzwACb9QAAYmADwAD+GwGTARzAAJv8gsAAm/rAbyD5YwEAAYHAAJv+wG8g1QDAAP9JAYrAAJwFwG8g+RzAAJwDgsAAnAXAbyD5ZAEAAZQAwAD/QT4BScAAnBAhHMAAnBaAwACcFcBvILEgAQABHMAAnBsuSwEAAYLAAJwcwG8g+QDAAP7OAABKwACcIQEqP0rAAJw5ASkGwADbO4JzwACcTcAAnFLAAJztAACB1gAAAAEDwACcVcAAnO0AAAABAQHAAJxbAAAAgaZhAwFgA8AA5tpgA8AA/FUAAGADwAD8VQE+A07AAJx5wACcfQAAl8FgA8AA/hsBFsAAnIQuYcAA/u9FwACckAHAAJyZwACcmwAAYmADwAD+GwGTARzAAJyigsAAnKDAbyIEYwEAAYHAAJykwG8h4ADAAP9JAYrAAJyrwG8iBBzAAJypgsAAnKvAbyIEZAEAAZQAwAD/QT4BScAAnLYcwACcu4DAAJy6wG8hvCABAAEcwACcwC5LAQABgsAAnMHAbyIEAMAA/s4AAErAAJzGASk/SsAAnN0BKgbAANs8gnPAAJzywACc+sAAnhkAAJaPAAAAAQPAAJ0EwACeGQAAAAIBAcAAnQoAAACXVGEDAWADwADm2mADwAD8VQABwACdKgAAIJaQYQMAYAPAAObaAWoAYAPAAP8leWADwADm2gE+BE7AAJ0/wACdQwAAl8FgA8AA/hsBFsAAnUouYcAA/u9FwACdVgHAAJ1fwACdYQAAYmADwAD+GwGTARzAAJ1og8AAnWbAbyMqYwEAAYLAAJ1qwG8jBgDAAP9JAYvAAJ1xwG8jKhzAAJ1vg8AAnXHAbyMqZAEAAZQAwAD/QT4CTsAAnYDAAJ2IAACWe2ADwADm2gEcwACdji5LAQABg8AAnY/AbyMqAMAA/s5JwACdmRzAAJ2hgMAAnZ3AbyLGIAEAAYTAAJ2iwG8jgwAASsAAnawBhMAAnbPAbyODP0nAAJ3GIRzAAJ3RgcAAncrAbyLgSAEAASsAwAD/dUrAAJ3aARzAAJ3ngcAAneHAbyLgIAAAAAAAPz0wwACd7x7AAJ4KwADQOAAAAAAGwADbPYJzwACeHsAAnibAAJ9bAACWlAAAAAEDwACeL8AAn1sAAAACAQHAAJ41AAAAl1RhAwFgA8AA5tpgA8AA/FUAAcAAnlUAACCWkGEDAGADwADm2gFqAGADwAD/JXlgA8AA5toBPgROwACeasAAnm4AAJfBYAPAAP4bARbAAJ51LmHAAP7vRcAAnoEBwACeisAAnowAAGJgA8AA/hsBHMAAnpKCwACejsBvJJaBjQEAAZQAwAD/QgEcwACemYPAAJ6XwG8kuoFtAQABkwDAAP9MAYvAAJ6hwG8kuhzAAJ6fg8AAnqHAbyS6gY0BAAGUAMAA/0I+Ak7AAJ6wwACeuAAAlntgA8AA5toBHMAAnr4uSwEAAYPAAJ6/wG8kugDAAP7OScAAnskcwACe0YDAAJ7NwG8kViABAAGEwACe0sBvJSUAAD4BSsAAnuYBhMAAnu3AbyUlP0nAAJ8IIRzAAJ8TgcAAnwzAbyRwSAEAASsAwAD/dUrAAJ8cARzAAJ8pgcAAnyPAbyRwIAAAAAAAPz0wwACfMR7AAJ9MwADQOAAAAAAGwADbPoJzwACfYMAAn2jAAKFuAACWlwAAAAEDwACfc8AAoW4AAAACAQHAAJ95AAAAl1RhAwFgA8AA5tpgA8AA/FUAAcAAn5kAACCWkGEDAGADwADm2gFqAGADwAD/JXlgA8AA5toBPgdOwACfrsAAn7UAAIF2WwErTsAAn8bAAJ/UAADAAHMlYAPAAPxVASpOwACf5cAAn+kAAJfBYAPAAP4bARbAAJ/wLmHAAP7vRcAAn/wBwACgBcAAoAcAAGJgA8AA/hsBkwEcwACgDoXAAKAMwG8mhWMBAAGEwACgEMBvJmEAwAD/SQGNwACgF8BvJoUcwACgFYXAAKAXwG8mhWQBAAGUAMAA/0E+Ak7AAKAmwACgLgAAlntgA8AA5toBHMAAoDQuSwEAAYXAAKA1wG8mhQDAAP7OScAAoD8cwACgR4DAAKBDwG8l+iABAAGGwACgSMBvJt4AAD4DScAAoFyDwACgYMBvJko+AT0wwACgex7AAKCWwADQOQAAAAA/PYrAAKCzwG8mOobAAKC8wG8m3j2LwACgzcBvJkopP0nAAKD1g8AAoPnAbyZKSsAAoQgBJsAAoQgBgsAAoQ/AbyY6YAPAAObaP0nAAKEbIRzAAKEmgcAAoR/AbyYUSAEAASsAwAD/dUrAAKEvARzAAKE8gcAAoTbAbyYUIAAAAAAAPz0wwAChRB7AAKFfwADQOAAAAAAGwADbP4JzwAChc8AAoXvAAKGsAACWjgAAAAEDwAChhMAAoawAAAABAQHAAKGJAAAAJ2ADwAD+GwAAYAPAAObaAT4BSsAAoZYBHMAAoaEuSwEAAYDAAKGiwG8oEADAAP7OBsAA20CCc8AAobHAAKG2wACiEgAAVgAAAAEDwAChucAAohIAAAABAQHAAKHCAAAggJZgA8AA5toAAFwBPgE9MMAAoc8fwACh2cAA/a0BAAEnwAB3xAAGwADbQYJzwACiF8AAohzAAKKFAACApQAAAAEDwACiIsAAooUAAAABAQHAAKI1AAAggJZdA8AA/n0BYAPAAObaAABcAT4BPTDAAKJCH8AAokzAAP2tAQABJ8AAd8QABsAA20KCc8AAoorAAKKPwACi/gAAnzoAAAABA8AAopXAAKL+AAAAAgICwACimgAAACdgA8AA/hsAwACiqQAAIICWYAPAAObaAABcAT4BPTDAAKK2H8AAosDAAP2tAQABJ8AAemcABsAA20OCc8AAowPAAKMIwACjhQAAoEcAAAABA8AAoxHAAKOFAAAAAgICwACjFgAAACdgA8AA/hsAwACjLwAAICldA8AA/n0BYAPAAObaAABcAT4BPTDAAKM9H8AAo0fAAP2tAQABJ8AAemcABsAA20SCc8AAo4rAAKOPwACkLAAAgK4AAAABA8AAo5PAAKQsAAAAAQABwACjmQAAAJt3YQMCYAPAAObaYAPAAObaYAPAAP4bAWoAYAPAAP8leQBcAT4CScAAo78cwACjy4DAAKPDwG8p90gBAAErAMAA/3U+AT0wwACj3CfAAHpxPz0ewACkFcAA0M4CAWADwADm2gIugMAApCDAbyn3AAbAANtFgnPAAKQxwACkNcAApTQAAIC7AAAAAQPAAKQ8wAClNAAAAAIBAsAApEUAACCWe2ADwADm2gDAAKRTAAAAamADwAD+GwFqwACkW2ADwAD+GwkAYAPAAP4bAT4DScAApGUcwACkb4HAAKRpwG8qp4FtAQABFsAApHcuYcAA/u8AwAD/TD4BSsAApIcBHMAApI6UgcYAAAAAwAD+PknAAKSdHMAApKeBwACkocBvKqdjAQABkwDAAP9JPgE9icAApLTAbyqnkz9FwACkyQHAAKTSwACk1AAAYmADwAD+GwGBwACk1sBvKqcBHMAApN+CwACk3cBvKz1jAQABFsAApOYuYcAA/u8AwAD/SQGKwACk7sBvKz0cwACk74LAAKTuwG8rPWQBAAGUAMAA/0E+AUnAAKT7HMAApQccwAClAy5LAQABgsAApQTAbys9AMAA/s5IAQABgMAApQrAbyqXAMAA/3VKwAClEwGCwAClGsBvKz0/SsAApScBHMAApS6UgcYAAAAAwAD+PgbAANtGgnPAAKU5wAClPcAAplkAAJa1AAAAAQPAAKVIwACmWQAAAAIBAsAApVEAACCWe2ADwADm2gDAAKVfAAAAamADwAD+GwFqwAClZ2ADwAD/JXkAYAPAAP4bAT4DScAApXQiHMAApX6BwACleMBvLDNIAQABKwDAAP8/ARzAAKWPgcAApYnAbywzgW0BAAEWwAClly5hwAD+7wDAAP9MPgE9icAApafAbywzHMAApbsWwACltC5hwAD+74GNAQABlADAAP9CScAApcscwACl1YHAAKXPwG8sM2MBAAGTAMAA/0k+AUrAAKXiARzAAKXplIHGAAAAAMAA/j4/RcAApfcBwACmAMAApgIAAGJgA8AA/hsBgcAApgTAbywzARzAAKYNgsAApgvAbyz9gW0BAAGTAMAA/0wBisAAphPAbyz9HMAAphSCwACmE8BvLP2BjQEAAZQAwAD/Qj4BScAApiAcwACmLBzAAKYoLksBAAGCwACmKcBvLP0AwAD+zkgBAAGAwACmL8BvLCMAwAD/dUrAAKY4AYLAAKY/wG8s/T9KwACmTAEcwACmU5SBxgAAAADAAP4+BsAA20eCc8AApl7AAKZmwACmwQAAhi4AAAABA8AApnDAAKbBAAAAAAAAAGADwADm2gE+AT0wwACmeR/AAKaDwAD9rQEAASfAAHfFAAbAANtIgnPAAKbGwACmzsAApzAAAKBGAAAAAQPAAKbWwACnMAAAAAEBAcAAptsAAAAnYAPAAP4bAABgA8AA5toBPgE9MMAApugfwACm8sAA/a0BAAEnwAB3xQAGwADbSYJzwACnNcAApzrAAKewAACXUwAAAAEDwACnRcAAp7AAAAAB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AAAAgpBgA8AA/hsAAAAAIIPRXQPAAP59AVsAAFwBSgABHQCgPwMAA4AAwG84/4EAwG85C4IAwG85GADAANXfAABvNQ0AbzVSAG82LABvNwcAbzdQAG83tQBvOD8AbzjYAG85SwAAAAgCwADbaoJzwAFE3MABRPzAAUk6N8AAevUAAAFgAcAA1zUAAWABwADW2wABBcAA25sAAAAABAAAAwAAAAAAAAAAAGADwADbagE/AQkAAMAA11oAAAAANwbAANtsgnPAAUT8wAFE/AAAEKA/AMAA1d/AANXfAQMAAAAAAAMDAwAAAABqYAPAAP4bAAAAAACCkGADwAD+GwAAAAAgg9FdA8AA/n0BWwAAXAFKAAEdAKA/AwADgADAbznxgQDAbzn9ggDAbzoKAMAA1d8GwADbnYJzwACsR8AArE/AAKxhAQLAAHAqAAAAAQPAAKxhwACsYQAAAAAAAABgA8AA/hsABsAA256Cc8AArGXAAKxtwACsegECqhwAAAABA8AArHrAAKx6AAAAAAAAAGADwAD+GwAGwADbn4JzwACsfsAArI7AAKyUAQKCjwAAAAEDwACslMAArJQAAAAAAAAAYAPAANcYAAbAANtugnPAAKyZwACsp8AArL4AAsAAemrAANW8AAAAAQPAAKyywACsvgAAAAEBAcAArLcAAABhYAPAAP4bAABgA8AA5agABsAA22+Cc8AArMPAAKzPwACs/wAAlpsAAAABA8AArNvAAKz/AAABAACCemADwAD/aAFbAAAAAF0DwAD+fQFfAwAAAUrAAKzhAR/AAKzlwADQKwEBXwMAAAEuAAbAANtwgnPAAK0EwACtGMAArYQAAJaSAAAAAQPAAK0iwACthAAAAAEBAcAArTcAACCD210DwAD+fQFgA8AA5/sAAF0DwAD+fQFgA8AA5/sBSsAArUcBHsAArUvAANADAgFgA8AA5/sCLoDAAK1+wG87oQAGwADbcYJzwACticAArZHAAK2/AACWjQAAAAEDwACtmMAArb8AAAEAAJdOYAPAAP9oAVsAAAAAXQPAAP6/AV8DAAABSsAArZ4BHsAAraPAAP7KAQJgA8AA5/tfAwAAAS4ABsAA26aCc8AArcPAAK3MwACuOwIAgx4AAAABA8AArdHAAK47AAAAAQEBwACt3AAAIICWYAPAAOf7AABcAT4CScAArekc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AT0wwADPMx/AAM89wAD9rQEAASfAAHfFAAbAANuVgnPAAM+AwADPhcAAz/0AAJdTAAAAAQPAAM+QwADP/QAAAAEBAcAAz5YAAACXVGEDAWADwADn+2ADwAD8VQAAXAE+AT0wwADPtR/AAM+/wAD9rQEAASfAAHfFAAbAANuWgnPAANACwADQB8AA0H8AAJdWAAAAAQPAANASwADQfwAAAAEBAcAA0BgAAACXVGEDAWADwADn+2ADwAD8VQAAXAE+AT0wwADQNx/AANBBwAD9rQEAASfAAHfFAAbAANuignPAANCEwADQksAA0OwBAIMeAAAAAQPAANCYwADQ7AAAAAAAAABgA8AA5/sBPgJJwADQnhzAANCpFsAA0KIuYcAA/u+AlwEAAZMAwAD/S0rAANCuARzAANC5LksBAAGTAMAA/s4/PTDAANDCHsAA0N3AANA4AAAAAAbAANujgnPAANDxwADQ/8AA0WEBAIHqAAAAAQPAANEEwADRYQAAAAAAAABgA8AA5/sBPgJJwADRChzAANEVFsAA0Q4uYcAA/u+AlwEAAZMAwAD/S0rAANEaARzAANElLksBAAEcwADRLRbAANEmLmHAAP7vgY0BAAGUAMAA/0IAwAD+zj89MMAA0TcewADRUsAA0DgAAAAABsAA26SCc8AA0WbAANF0wADSCwEAgMMAAAABA8AA0XvAANILAAAAAAAAAGADwADn+wE+A0nAANGBHMAA0YwWwADRhS5hwAD+70gBAAGUAMAA/z9KwADRkgEcwADRnS5LAQABkwDAAP7OP0nAANGmHMAA0bEWwADRqi5hwAD+70gBAAGTAMAA/z89MMAA0bcewADR0sAA0DgAAAAAPz0wwADR4x7AANH+wADQOQAAAAAGwADbl4JzwADSEMAA0h7AANMNAACBWAAAAAEDwADSJcAA0w0AAAACAQLAANIqAAAAamADwAD+GwDAANI2AAAAgpBgA8AA/hsBagBgA8AA/yV5AGADwADlqAE+BT2JwADSQsBvZhQewADSU8AA/VwDAAOAwADSY8BvZgWBwADSasBvZhQWwADSdC5hwAD+7wBOwADShcAA0owAAGFgA8AA/hsBHMAA0pKBwADSjsBvZhSBjQEAAYDAANKUwG9mBQDAAP9CTsAA0q3AANK0AACBdmADwADlqAEcwADSti7AAHpqwADV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wABEMcBxT1JjAQABgsAARDXAcU8uAMAA/0kBi8AARDzAcU9SHMAARDqDwABEPMBxT1JkAQABlADAAP9BPgJOwABES8AARFMAAJZ7YAPAAPzNARzAAERZLksBAAGDwABEWsBxT1IAwAD+zknAAERkHMAARGyAwABEaMBxTu4gAQABhMAARG3AcU+rAABKwABEdwGEwABEfsBxT6s/ScAARJEhHMAARJyBwABElcBxTwhIAQABKwDAAP91SsAARKUBHMAARLKBwABErMBxTwggAAAAAAA/PTDAAES6HsAARNXAANA4AAAAAAbAAN72gnPAAETpwABE8MAARiMAAJaUAAAAAQPAAET5wABGIwAAAAIBAcAARP8AAACXVGEDAWADwAD8zWADwAD8VQABwABFHQAAIJaQYQMAYAPAAPzNAWoAYAPAAP8leWADwAD8zQE+BE7AAEUywABFNgAAl8FgA8AA/hsBFsAART0uYcAA/u9FwABFSQHAAEVSwABFVAAAYmADwAD+GwEcwABFWoLAAEVWwHFQvoGNAQABlADAAP9CARzAAEVhg8AARV/AcVDigW0BAAGTAMAA/0wBi8AARWnAcVDiHMAARWeDwABFacBxUOKBjQEAAZQAwAD/Qj4CTsAARXjAAEWAAACWe2ADwAD8zQEcwABFhi5LAQABg8AARYfAcVDiAMAA/s5JwABFkRzAAEWZgMAARZXAcVB+IAEAAYTAAEWawHFRTQAAPgFKwABFrgGEwABFtcBxUU0/ScAARdAhHMAARduBwABF1MBxUJhIAQABKwDAAP91SsAAReQBHMAARfGBwABF68BxUJggAAAAAAA/PTDAAEX5HsAARhTAANA4AAAAAAbAAN73gnPAAEYowABGL8AASDMAAJaXAAAAAQPAAEY6wABIMwAAAAIBAcAARkAAAACXVGEDAWADwAD8zWADwAD8VQABwABGXgAAIJaQYQMAYAPAAPzNAWoAYAPAAP8leWADwAD8zQE+B07AAEZzwABGegAAgXZbAStOwABGi8AARpkAAMAAcyVgA8AA/FUBKk7AAEaqwABGrgAAl8FgA8AA/hsBFsAARrUuYcAA/u9FwABGwQHAAEbKwABGzAAAYmADwAD+GwGTARzAAEbThcAARtHAcVKtYwEAAYTAAEbVwHFSiQDAAP9JAY3AAEbcwHFSrRzAAEba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AMAA1d8AAHHUXgBx1KMAcdVuAHHWSQBx1pIAcdb3AHHXgQBx2BoAcdiNAAAACALAAN/DgnPAAX9swAF/jMABg943wAB7HgAAAWABwADXNQABYAHAANbbAAEFwADf9AAAAAAEAAADAAAAAAAAAAAAYAPAAN/DAT8BCQAAwADXWgAAAAA3BsAA38WCc8ABf4zAAX+MAAAQoD8AwADV38AA1d8BAwAAAAAAAwMDAAAAAGpgA8AA/hsAAAAAAIKQYAPAAP4bAAAAACCD0V0DwAD+fQFbAABcAUoAAR0AoD8DAAOAAMBx2TOBAMBx2T+CAMBx2UwAwADV3wbAAN/2gnPAAKxHwACsT8AArGEBAsAAcCoAAAABA8AArGHAAKxhAAAAAAAAAGADwAD+GwAGwADf94JzwACsZcAArG3AAKx6AQKqHAAAAAEDwACsesAArHoAAAAAAAAAYAPAAP4bAAbAAN/4gnPAAKx+wACsjsAArJQBAoKPAAAAAQPAAKyUwACslAAAAAAAAABgA8AA1xgABsAA38eCc8AArJnAAKynwACsvgACwAB6asAA1bwAAAABA8AArLLAAKy+AAAAAQEBwACstwAAAGFgA8AA/hsAAGADwADlqAAGwADfyIJzwACsw8AArM/AAKz/AACWmwAAAAEDwACs28AArP8AAAEAAIJ6YAPAAP9oAVsAAAAAXQPAAP59AV8DAAABSsAArOEBH8AArOXAANArAQFfAwAAAS4ABsAA38mCc8AArQTAAK0YwACthAAAlpIAAAABA8AArSLAAK2EAAAAAQEBwACtNwAAIIPbXQPAAP59AWADwADn+wAAXQPAAP59AWADwADn+wFKwACtRwEewACtS8AA0AMCAWADwADn+wIugMAArX7AcdrjAAbAAN/KgnPAAK2JwACtkcAArb8AAJaNAAAAAQPAAK2YwACtvwAAAQAAl05gA8AA/2gBWwAAAABdA8AA/r8BXwMAAAFKwACtngEewACto8AA/soBAmADwADn+18DAAABLgAGwADf/4JzwACtw8AArczAAK47AgCDHgAAAAEDwACt0cAArjsAAAABAQHAAK3cAAAggJZgA8AA5/sAAFwBPgJJwACt6RzAAK35FsAArfIuYcAA/u9IAQABkwDAAP8/PTDAAK3/H8AArgnAAP1xAgACky4APz0cwACuLC6AvwIAApOAwACuMsBx27cAwAD+zwbAAOAAgnPAAK5AwACuScAArsUCAIHqAAAAAQPAAK5NwACuxQAAAAEBAcAArlgAACCAlmADwADn+wAAXAE+AknAAK5lHMAArnUWwACubi5hwAD+70gBAAGTAMAA/z89MMAArnsfwACuhcAA/XECAAKTLgA/PRzAAK6oLoC/AgACHMAArrUWwACuri5hwAD+74GNAQABlADAAP9CgMAArrzAcdxGAMAA/s8GwADfy4JzwACuysAArs7AAK+NAACgRAAAAAEDwACu2MAAr40AAAACAQLAAK7eAAAAl1RhAwFgA8AA5/tgA8AA/FUAwACu/AAAAGpgA8AA/hsBasAArwRgA8AA/hsJAGADwAD+GwE+A0nAAK8OHMAArxiBwACvEsBx3QhjAQABkwDAAP9JPYnAAK8dwHHdCJM/RcAArywBwACvNcAArzcAAGJgA8AA/hsBgcAArznAcd0IARzAAK9CgsAAr0DAcd1cYwEAARbAAK9ELmHAAP7vAMAA/0kBisAAr0zAcd1cHMAAr02CwACvTMBx3VxkAQABlADAAP9BPgFJwACvWRzAAK9hgMAAr13AcdzvIAEAARzAAK9mLksBAAGCwACvZ8Bx3VwAwAD+zgAASsAAr2wBgsAAr3PAcd1cP0rAAK+AARzAAK+HlIHGAAAAAMAA/j4GwADfzIJzwACvksAAr5bAALB7AACgRQAAAAEDwACvpMAAsHsAAAACAQLAAK+qAAAAl1RhAwFgA8AA5/tgA8AA/FUAwACvyAAAAGpgA8AA/hsBagBgA8AA/yV5AGADwAD+GwE+A0nAAK/WIhzAAK/ggcAAr9rAcd5YSAEAASsAwAD/PwEcwACv8YHAAK/rwHHeWIFtAQABFsAAr/kuYcAA/u8AwAD/TD2JwACwAcBx3lgcwACwFRbAALAOLmHAAP7vgY0BAAGUAMAA/0I/RcAAsB4BwACwJ8AAsCkAAGJgA8AA/hsBgcAAsCvAcd5YARzAALA0gsAAsDLAcd7ogW0BAAGTAMAA/0wBisAAsDrAcd7oHMAAsDuCwACwOsBx3uiBjQEAAZQAwAD/Qj4BScAAsEccwACwT4DAALBLwHHePyABAAEcwACwVC5LAQABgsAAsFXAcd7oAMAA/s4AAErAALBaAYLAALBhwHHe6D9KwACwbgEcwACwdZSBxgAAAADAAP4+BsAA382Cc8AAsIDAALCZwACxeAMAZAAAAAEDwACwmsAAsXgAAAABAQHAALCrAAAgg9tdA8AA/r8BYAPAAOf7AABdA8AA/r8BYAPAAOf7AT4CTsAAsLzAALDIAACDXmADwAD+GwEcwACw1hbAALDPLmHAAP7vZAEAARbAALDegMAAsNjAcd/CYcAA/u8AwAD/QUrAALDqATXAALD8AAABAF0DwAD+vwFgA8AA5/sBMcAAsPxgA8AA5/sANQAAAAEAWwEXwACxB4LAALEFwHHgMWGBwACxEMBx3+vAAP7tNQAAAAEAWwEcwACxJILAALEiwHHgMYNkAwADkxbAALE1LmHAAP7vLgDAAP7kNQAAAAEAWwEcwACxS4LAALFJwHHgMYNkAwADFsAAsVkuYcAA/u+BwACxYcBx3+uAwACxbsBx38IAwAD+5IIAwHHgMQbAAN/OgnPAALF9wACxgsAAsiEAAIMcAAAAAQPAALGKwACyIQAAAAEBAcAAsZIAAACWe2ADwAD/aAAAYAPAAPxVAT4DTsAAsaXAALGpAACXwWADwAD+GwEWwACxsC5hwAD+70XAALG8AcAAscXAALHHAABiYAPAAP4bAZMBHMAAsc6CwACxzMBx4VBjAQABgcAAsdDAceEsAMAA/0kBisAAsdfAceFQHMAAsdWCwACx18Bx4VBkAQABlADAAP9BPgFJwACx4hzAALHuHMAAseouSwEAAYLAALHrwHHhUADAAP7OSAEAAYDAALHxwHHhEQDAAP91SsAAsfoBKT9KwACyEQEqBsAA38+Cc8AAsibAALIrwACzFAAAoDMAAAABA8AAsjLAALMUAAAAAQABwACyOwAAAKA0YAPAANJ+AWoAYAPAAP8leQBcAT4DPSMcwACyUYDAALJKwHHiFUgBAAErAMAA/3WIwACySsBx4hUewACyWcAA0oAAAAAAKwFgA8AA0n5OwACya8AAsm0AAGJgA8AA/hsBFsAAsnQuYcAA/u9DwACygBzAALKJgcAAsofAceJsgJcBAAGUAMAA/0s+BU7AALKawACyngAAoDVgA8AA/hsBHMAAsqeAwACyoMBx4hWgNgEAAYHAALKvwHHibADAANKDPYnAALK5wHHibBzAALK7gcAAsrnAceJsgY0BAAGUAMAA/0JOwACyy8AAss8AAKA3YAPAAOf7ARzAALLVLksBAAGBwACy1sBx4mwAwAD+zj0cwACy5C6AvwIAAoHAALLlwHHibBzAALLuLksBAAGCwACy78Bx4qoAwAD+zgDAAP7PPRzAALL/LoC/AgACgsAAswDAceKqg8AAswfAceMCAMAA/s8GwADf0IJzwACzGcAAsx7AALwHAACDZAAAAAEDwACzJsAAvAcAAAAEAwTAALMrAAAAamADwAD+GwDAALM2AAAAgpBgA8AA/hsAwACzTwAAIJaDXQPAAP59AWADwADn+wDAALNgAAAAoDxgA8AA/hsBasAAs2xgA8AA/hsJAFwBPgtJwACziyIiHMAAs5GTgJcBAAGAwACzk8Bx46wAwAD/SwEcwACzooDAALOcwHHjrICXAQABgcAAs6TAceO7AMAA/0sBHMAAs6+BwACzq8Bx47uAlwEAARbAALOxLmHAAP7vAMAA/0s+Aj0ewACzzMAA/VwDAAOAwACz3MBx46yBwACz48Bx47sWwACz6C5hwAD+7wBAKsAAtBDAALQVAD9JwAC0IhzAALQwg8AAtCbAcePiYwEAAZMAwAD/ST4BPTDAALQ9H8AAtE7AAP1lBAAEg8AAtFTAcePikysnoDwAP07AALSHwAC0jQABgO5gA8AA/hsBHMAAtJOBwAC0j8Bx47uBjQEAAYDAALSVwHHjrADAAP9CScAAtKAcwAC0vhzAALSxFsAAtKqCwAC0pcBx48thwAD+oIGNAQABg8AAtLPAcePiAMAA/0JjAQABhMAAtMDAceTkAMAA/0k+AT0wwAC0zx7AALTqwADQOgAAAAA/ScAAtP8cwAC1CYTAALUDwHHk5EgBAAGTAMAA/z9KwAC1DwA/ScAAtRwlwAC1JYLAALUgwHHjy2ADwADV0j4CTsAAtbLAALXCAAHAAHprYAPAANXSASbAALXJAILAALXEwHHjy2ADwADV0knAALXiHMAAtf4WwAC16y7AAHAqwADW3UgBAAEWwAC2EYXAALYBwHHltcAAcCrAANXVAMAA/z8+AUnAALYvIhzAALY6hMAAtjTAceTkYwEAATcKAMAA/0kAIRzAALZbFsAAtlSFwAC2RMBx5bWCj8AA1ddIAQABFsAAtmMugo/AANbfAMAA1yM+Aj0ewAC2fsAAzS4FAAUmwAC2iACCwAC2g8Bx48tdA8AA/r8BYAPAAOf7g8AAtpzAcePiLoDAALatwHHjrITAALa0wHHk5ABKwAC2xgBJwAC23RzAALbzFsAAtu0WwAC25i6Cj8AA1t+398AA1bzAANcbwABwKcAA1bwGAAYcwAC3JRzAALcQgMAAtwrAceOsg40BAAEWwAC3Ei7AAHAqwADW3QDAAP9DZAEAARbAALcsLqocwADW3gDAAP9BHMAAt02EwAC3R8Bx5OSDjQEAARbAALdPLsAAcCrAANbdAMAA/0MWwAC3hhbAALd/hcAAt2/AceW1go/AANXXt/fAANW8wADXGxzAALe4HMAAt6ODwAC3mcBx4+KDjQEAARbAALelLsAAcCrAANbdAMAA/0NkAQABFsAAt8qFwAC3usBx5bWqHMAA1dYAwAD/QR7AALftwADNOwEAAS4AHsAAuA7AAM07AQABgsAAuBTAcePLAADAANXiPgFKwAC4KAA/ScAAuEccwAC4YhbAALhbhcAAuEvAceW1go/AANXXSAEAARbAALhqLoKPwADW3wDAANcjPgVOwAC5QMAAuUsAAcAAemxdA8AA/r8BYAPAAOf7ASbAALlSAILAALlNwHHjy10DwAD+vwFgA8AA5/tOwAC5dMAAuX8AAcAAem1gA8AA5agBHMAAuYEuwAB6asAA1bwBAAGEwAC5jcBx5OQAwADW50XAALmdAcAAuabAALmoAABiYAPAAP4bAZMBHMAAua8UwAC5rcBx6JEIAGMBAAGEwAC5scBx5OQAwAD/SQEVwAC5uMBx6JEIHMAAubkUwAC5uMBx6JEIAGQBAAGUAMAA/0E+AT0cwAC504fAALnJwHHoV4C/AgACFMAAudTAceiRCAAcwAC544bAALnZwHHoHksBAAEcwAC57oPAALnkwHHj4mQBAAEUwAC58MBx6JEIAADAAP9BAMAA/s4AwAD+z0XAALoGAcAAug/AALoRAABiYAPAAP4bAYDAALoTwHHjrAEcwAC6HBTAALoawHHpUQgAYwEAAYHAALoewHHjuwDAAP9JARXAALojwHHpUQgcwAC6JBTAALojwHHpUQgAZAEAAZQAwAD/QT4BPRzAALo4LoC/AgACFMAAujnAcelRCAAcwAC6SIfAALo+wHHoV0sBAAEcwAC6SxTAALpJwHHpUQgAgY0BAAGAwAC6TcBx46wAwAD/QgDAAP7OAMAA/s9KwAC6ZwA/P07AALqHAAAAoD1dA8AA/r8BWwBOwAC6mgAAAKA+YAPAAP4bAEnAALqqJcAAurOCwAC6rsBx48tdA8AA/r8BYAPAAOf7PgI9jcAAus/AceoVFMAAutvAcePLAgFdA8AA/r8BYAPAAOf7PY7AALrnwHHqKIPAALr0wHHj4j4CPY3AALsSwHHqFRzAALszHMAAuyOCwAC7HsBx48uWhAEAAYPAALsowHHj4gDAAP6XgK0BAAABhXYqwAD+kz2OwAC7UsBx6iiTScAAu2wcwAC7gxzAALt7hsAAu3DAceooZAEAAYTAALt9wHHk5ADAAP9BgJcBAAEWwAC7j4XAALuFwHHqFWHAAP7vAMAA/0s+AT0wwAC7nx7AALu6wADQOgAAAAA/PR7AALvUwADNLgUABYXAALvZwHHqFYbAALvkwHHqKC6AwAC79sBx46yEwAC7/cBx5OQABsAA39GCc8AAvAzAALwgwAC8bwAAgaUAAAABA8AAvCXAALxvAAAAAQEBwAC8KwAAAIGmYQMBYAPAAOf7YAPAAPxVAABdA8AA/n0BYAPAAOf7AUrAALxKAR/AALxOwADPTQIBYAPAAOf7Ai6AwAC8bcBx65MABsAA39KCc8AAvHTAALyIwAC8wQAAlpkAAAABA8AAvIzAALzBAAAAAQEBwAC8kQAAAIOoYAPAAP4bAABdA8AA/n0BYAPAAOf7AUrAALyXAR/AALybwADPCAMBYAPAAOf7Ay6TgMAAvL/AcewIAAbAAN/TgnPAALzGwAC82sAAvTcAAJaaAAAAAQPAALzjwAC9NwAAAAEBAcAAvOkAAACXVGEDAWADwADn+2ADwAD8VQAAXQPAAP59AWADwADn+wFKwAC9CwEfwAC9D8AAz5MCAWADwADn+wIugMAAvTLAcex1AAbAAN/UgnPAAL08wAC9UMAAvZIAAJaEAAAAAQPAAL1UwAC9kgAAAAEBAcAAvVkAAACDqGADwAD+GwAAXQPAAP59AWADwADn+wFKwAC9ZQEfwAC9acAAzwgDAWADwADn+wMugMAAvYrAcezqKwAGwADf1YJzwAC9l8AAvavAAL4IAACWmAAAAAEDwAC9tMAAvggAAAABAQHAAL26AAAAl1RhAwFgA8AA5/tgA8AA/FUAAF0DwAD+fQFgA8AA5/sBSsAAvdwBH8AAveDAAM/LAgFgA8AA5/sCLoDAAL4DwHHtVwAGwADf+YJzwAC+DcAAviXAAL5aAQCY4AAAAAEDwAC+LsAAvloAAAAAAAAAXQPAAP59AWADwADn+wFKwAC+MQEfwAC+NcAA0LkBAWADwADn+wEuAAbAAN/WgnPAAL5fwAC+c8AAvp4AAJzCAAAAAQPAAL54wAC+ngAAAAAAAABdA8AA/vECYAPAAP4bYAPAAOf7AUrAAL5+AR/AAL6CwADQrwEBYAPAAOf7AS4ABsAA39eCc8AAvqPAAL63wAC/UAAAoDkAAAABA8AAvr/AAL9QAAAAAgECwAC+xAAAAGpgA8AA/hsAwAC+0AAAAIKQYAPAAP4bAWoAYAPAAP8leQBdA8AA/n0BYAPAAOf7AT4CPR7AAL7nwAD9XAMAA4DAAL73wHHueIHAAL7+wHHuhxbAAL8ILmHAAP7vAErAAL8VAR/AAL8gwADPCAMBYAPAAOf7Ay6AwAC/QcBx7niBwAC/SMBx7ocABsAA3/qCc8AAv1XAAL9twAC/oAEAXAAAAAEDwAC/dsAAv6AAAAAAAAAAXQPAAP64AWADwADn+wFKwAC/eQEfwAC/fcAA4HEBAWADwADn+wEuAAbAAN/YgnPAAL+lwAC/tcAAwBYAAICtAAAAAQPAAL+7wADAFgAAAAEAAAHAAL/CAAAAhXZgA8AA/FUBasAAv8xgA8AA/FV3XQPAAP6/AWADwADn+wE+AUrAAL/ZAR7AAL/kwAD+xQIBYAPAAOf7AS4BhXaAwADACcBx74UGwADf2YJzwADAG8AAwCrAAMBgAACVcQAAAAEDwADAL8AAwGAAAAAAAAAAXQPAAP+zAWADwADn+wE+AUrAAMA4AR7AAMBDwADDIwEBYAPAAOf7AS4ABsAA39qCc8AAwGXAAMBqwADA6AAAg/0AAAABA8AAwHHAAMDoAAAAAQEBwADAdwAAAIGmYQMBYAPAAOf7XAAAXAE+Ak7AAMCXwADAmwAAl8FgA8AA/hsBFsAAwKIuYcAA/u9FwADArgHAAMC3wADAuQAAYmADwAD+GwGTARzAAMDAgsAAwL7AcfCTYwEAAYHAAMDCwHHwbwDAAP9JAYrAAMDHwHHwkxzAAMDIgsAAwMfAcfCTZAEAAZQAwAD/QT4BPRzAAMDVgMAAwNTAcfBVIAEAARzAAMDaLksBAAGCwADA28Bx8JMAwAD+zgAABsAA39uCc8AAwO3AAMD3wADCCgAAlpUAAAABA8AAwP3AAMIKAAAAAQEBwADBCAAAIIc5YQMCYAPAAOf7YAPAAOf7YAPAAOf7AABgA8AA5/sBPgVOwADBP8AAwUMAAJfBYAPAAP4bARbAAMFKLmHAAP7vScAAwVYcwADBXoHAAMFawHHxbEgBAAGTAMAA/z89MMAAwWQewADBf8AA0DgAAAAAP07AAMGUwADBmgAAgJZgA8AA5/sBHMAAwaAuSwEAAZMAwAD+zkXAAMGpAcAAwbLAAMG0AABiYAPAAP4bAZQBHMAAwbuDwADBucBx8eVjAQABgcAAwb3AcfFsAMAA/0kBi8AAwcTAcfHlHMAAwcKDwADBxMBx8eVkAQABlADAAP9BPgE9isAAwc/AcfG8HMAAwd6AwADB18Bx8UIgAgACgsAAwd/AcfG8HMAAweouSwEAAYPAAMHrwHHx5QDAAP7OAABKwADB+gGCwADCAcBx8bwGwADf3IJzwADCD8AAwhHAAMLuAACDXwAAAAEDwADCGMAAwu4AAAEAAIJ6YAPAAP9oAVsCAgLAAMIbAAAAlpFfAwAAAMAAwisAAACHOWEDAl8DAABgA8AA5/tfAwAAAABfAwAAAT4DTsAAwmHAAMJlAACXwWADwAD+GwEWwADCbC5hwAD+70XAAMJ4AcAAwoHAAMKDAABiYAPAAP4bAZMBHMAAwoqDwADCiMBx8xdjAQABgsAAwozAcfLzAMAA/0kBi8AAwpPAcfMXHMAAwpGDwADCk8Bx8xdkAQABlADAAP9BPgE9iMAAwp7AcfLBHMAAwrSBwADCrcBx8s8gAgACgMAAwrXAcfLBHMAAwscuSwEAAYPAAMLIwHHzFwDAAP7OAABKwADC1wGAwADC3sBx8sEGwADf3YJzwADC88AAwv/AAMNQAACAqwAAAAEDwADDBcAAw1AAAAEAAIJ6YAPAAP9oAVsBAQHAAMMIAAAAgaZhAwFgA8AA5/tfAwAAAABdA8AA/n0BXwMAAAFKwADDJwEewADDK8AAzxwCAmADwADn+18DAAACLoDAAMNOwHHz8wAGwADf3oJzwADDVcAAw2HAAMO/AACElQAAAAEDwADDasAAw78AAAEAAIJ6YAPAAP9oAVsBAQHAAMN3AAAAgaZhAwFgA8AA5/tdA8AA/n0BXwMAAAAAXQPAAP59AV8DAAABSsAAw5YBH8AAw5rAAM9hAgJgA8AA5/tfAwAAAi6AwADDvcBx9HQABsAA39+Cc8AAw8TAAMPJwADEaQAAlosAAAABA8AAw87AAMRpAAAAAQEBwADD1AAAAIGmYQMBYAPAAOf7YAPAAPxVAABgA8AA/FUBPgNOwADD9MAAw/gAAJfBYAPAAP4bARbAAMP/LmHAAP7vRcAAxAsBwADEFMAAxBYAAGJgA8AA/hsBkwEcwADEHYLAAMQbwHH1OGMBAAGBwADEH8Bx9RQAwAD/SQGKwADEJsBx9TgcwADEJILAAMQmwHH1OGQBAAGUAMAA/0E+AUnAAMQxIRzAAMQ3gMAAxDbAcfTwIAEAARzAAMQ8LksBAAGCwADEPcBx9TgAwAD+zgAASsAAxEIBKj9KwADEWgEpBsAA3+CCc8AAxG7AAMRzwADFEAAAgdYAAAABA8AAxHbAAMUQAAAAAQEBwADEfAAAAIGmYQMBYAPAAOf7YAPAAPxVAABgA8AA/FUBPgNOwADEnMAAxKAAAJfBYAPAAP4bARbAAMSnLmHAAP7vRcAAxLMBwADEvMAAxL4AAGJgA8AA/hsBkwEcwADExYLAAMTDwHH2Q2MBAAGBwADEx8Bx9h8AwAD/SQGKwADEzsBx9kMcwADEzILAAMTOwHH2Q2QBAAGUAMAA/0E+AUnAAMTZHMAAxN6AwADE3cBx9fsgAQABHMAAxOMuSwEAAYLAAMTkwHH2QwDAAP7OAABKwADE6QEpP0rAAMUAASoGwADf4YJzwADFFcAAxR/AAMZCAACWjwAAAAEDwADFKcAAxkIAAAACAQHAAMUvAAAAl1RhAwFgA8AA5/tgA8AA/FUAAcAAxVMAACCWkGEDAGADwADn+wFqAGADwAD/JXlgA8AA5/sBPgROwADFaMAAxWwAAJfBYAPAAP4bARbAAMVzLmHAAP7vRcAAxX8BwADFiMAAxYoAAGJgA8AA/hsBkwEcwADFkYPAAMWPwHH3aWMBAAGCwADFk8Bx90UAwAD/SQGLwADFmsBx92kcwADFmIPAAMWawHH3aWQBAAGUAMAA/0E+Ak7AAMWpwADFsQAAlntgA8AA5/sBHMAAxbcuSwEAAYPAAMW4wHH3aQDAAP7OScAAxcIcwADFyoDAAMXGwHH3BSABAAGEwADFy8Bx98IAAErAAMXVAYTAAMXcwHH3wj9JwADF7yEcwADF+oHAAMXzwHH3H0gBAAErAMAA/3VKwADGAwEcwADGEIHAAMYKwHH3HyAAAAAAAD89MMAAxhgewADGM8AA0DgAAAAABsAA3+KCc8AAxkfAAMZRwADHigAAlpQAAAABA8AAxlrAAMeKAAAAAgEBwADGYAAAAJdUYQMBYAPAAOf7YAPAAPxVAAHAAMaEAAAglpBhAwBgA8AA5/sBagBgA8AA/yV5YAPAAOf7AT4ETsAAxpnAAMadAACXwWADwAD+GwEWwADGpC5hwAD+70XAAMawAcAAxrnAAMa7AABiYAPAAP4bARzAAMbBgsAAxr3AcfjVgY0BAAGUAMAA/0IBHMAAxsiDwADGxsBx+PmBbQEAAZMAwAD/TAGLwADG0MBx+PkcwADGzoPAAMbQwHH4+YGNAQABlADAAP9CPgJOwADG38AAxucAAJZ7YAPAAOf7ARzAAMbtLksBAAGDwADG7sBx+PkAwAD+zknAAMb4HMAAxwCAwADG/MBx+JUgAQABhMAAxwHAcflkAAA+AUrAAMcVAYTAAMccwHH5ZD9JwADHNyEcwADHQoHAAMc7wHH4r0gBAAErAMAA/3VKwADHSwEcwADHWIHAAMdSwHH4ryAAAAAAAD89MMAAx2AewADHe8AA0DgAAAAABsAA3+OCc8AAx4/AAMeZwADJowAAlpcAAAABA8AAx6TAAMmjAAAAAgEBwADHqgAAAJdUYQMBYAPAAOf7YAPAAPxVAAHAAMfOAAAglpBhAwBgA8AA5/sBagBgA8AA/yV5YAPAAOf7AT4HTsAAx+PAAMfqAACBdlsBK07AAMf7wADICQAAwABzJWADwAD8VQEqTsAAyBrAAMgeAACXwWADwAD+GwEWwADIJS5hwAD+70XAAMgxAcAAyDrAAMg8AABiYAPAAP4bAZMBHMAAyEOFwADIQcBx+sRjAQABhMAAyEXAcfqgAMAA/0kBjcAAyEzAcfrEHMAAyEqFwADITMBx+sRkAQABlADAAP9BPgJOwADIW8AAyGMAAJZ7YAPAAOf7ARzAAMhpLksBAAGFwADIasBx+sQAwAD+zknAAMh0HMAAyHyAwADIeMBx+jkgAQABhsAAyH3AcfsdAAA+A0nAAMiRg8AAyJXAcfqJPgE9MMAAyLAewADIy8AA0DkAAAAAPz2KwADI6MBx+nmGwADI8cBx+x09i8AAyQLAcfqJKT9JwADJKoPAAMkuwHH6iUrAAMk9ASbAAMk9AYLAAMlEwHH6eWADwADn+z9JwADJUCEcwADJW4HAAMlUwHH6U0gBAAErAMAA/3VKwADJZAEcwADJcYHAAMlrwHH6UyAAAAAAAD89MMAAyXkewADJlMAA0DgAAAAABsAA3+SCc8AAyajAAMmywADJ4wAAlo4AAAABA8AAybvAAMnjAAAAAQEBwADJwAAAACdgA8AA/hsAAGADwADn+wE+AUrAAMnNARzAAMnYLksBAAGAwADJ2cBx/E8AwAD+zgbAAN/lgnPAAMnowADJ7cAAyksAAFYAAAABA8AAyfDAAMpLAAAAAQEBwADJ+wAAIICWYAPAAOf7AABcAT4BPTDAAMoIH8AAyhLAAP2tAQABJ8AAd8QABsAA3+aCc8AAylDAAMpVwADKwAAAgKUAAAABA8AAylvAAMrAAAAAAQEBwADKcAAAIICWXQPAAP59AWADwADn+wAAXAE+AT0wwADKfR/AAMqHwAD9rQEAASfAAHfEAAbAAN/ngnPAAMrFwADKysAAyzsAAJ86AAAAAQPAAMrQwADLOwAAAAICAsAAytUAAAAnYAPAAP4bAMAAyuYAACCAlmADwADn+wAAXAE+AT0wwADK8x/AAMr9wAD9rQEAASfAAHpnAAbAAN/ognPAAMtAwADLRcAAy8QAAKBHAAAAAQPAAMtOwADLxAAAAAICAsAAy1MAAAAnYAPAAP4bAMAAy24AACApXQPAAP59AWADwADn+wAAXAE+AT0wwADLfB/AAMuGwAD9rQEAASfAAHpnAAbAAN/pgnPAAMvJwADLzsAAzG8AAICuAAAAAQPAAMvSwADMbwAAAAEAAcAAy9gAAACbd2EDAmADwADn+2ADwADn+2ADwAD+GwFqAGADwAD/JXkAXAE+AknAAMwCHMAAzA6AwADMBsBx/jZIAQABKwDAAP91PgE9MMAAzB8nwAB6cT89HsAAzFjAANDOAgFgA8AA5/sCLoDAAMxjwHH+NgAGwADf6oJzwADMdMAAzHjAAM15AACAuwAAAAEDwADMf8AAzXkAAAACAQLAAMyKAAAglntgA8AA5/sAwADMmAAAAGpgA8AA/hsBasAAzKBgA8AA/hsJAGADwAD+GwE+A0nAAMyqHMAAzLSBwADMrsBx/uaBbQEAARbAAMy8LmHAAP7vAMAA/0w+AUrAAMzMARzAAMzTlIHGAAAAAMAA/j5JwADM4hzAAMzsgcAAzObAcf7mYwEAAZMAwAD/ST4BPYnAAMz5wHH+5pM/RcAAzQ4BwADNF8AAzRkAAGJgA8AA/hsBgcAAzRvAcf7mARzAAM0kgsAAzSLAcf98YwEAARbAAM0rLmHAAP7vAMAA/0kBisAAzTPAcf98HMAAzTSCwADNM8Bx/3xkAQABlADAAP9BPgFJwADNQBzAAM1MHMAAzUguSwEAAYLAAM1JwHH/fADAAP7OSAEAAYDAAM1PwHH+1gDAAP91SsAAzVgBgsAAzV/Acf98P0rAAM1sARzAAM1zlIHGAAAAAMAA/j4GwADf64JzwADNfsAAzYLAAM6gAACWtQAAAAEDwADNjcAAzqAAAAACAQLAAM2YAAAglntgA8AA5/sAwADNpgAAAGpgA8AA/hsBasAAza5gA8AA/yV5AGADwAD+GwE+A0nAAM27IhzAAM3FgcAAzb/AcgBySAEAASsAwAD/PwEcwADN1oHAAM3QwHIAcoFtAQABFsAAzd4uYcAA/u8AwAD/TD4BPYnAAM3uwHIAchzAAM4CFsAAzfsuYcAA/u+BjQEAAZQAwAD/QknAAM4SHMAAzhyBwADOFsByAHJjAQABkwDAAP9JPgFKwADOKQEcwADOMJSBxgAAAADAAP4+P0XAAM4+AcAAzkfAAM5JAABiYAPAAP4bAYHAAM5LwHIAcgEcwADOVILAAM5SwHIBPIFtAQABkwDAAP9MAYrAAM5awHIBPBzAAM5bgsAAzlrAcgE8gY0BAAGUAMAA/0I+AUnAAM5nHMAAznMcwADOby5LAQABgsAAznDAcgE8AMAA/s5IAQABgMAAznbAcgBiAMAA/3VKwADOfwGCwADOhsByATw/SsAAzpMBHMAAzpqUgcYAAAAAwAD+PgbAAN/sgnPAAM6lwADOr8AAzwoAAIYuAAAAAQPAAM65wADPCgAAAAAAAABgA8AA5/sBPgE9MMAAzsIfwADOzMAA/a0BAAEnwAB3xQAGwADf7YJzwADPD8AAzxnAAM97AACgRgAAAAEDwADPIcAAz3sAAAABAQHAAM8mAAAAJ2ADwAD+GwAAYAPAAOf7AT4BPTDAAM8zH8AAzz3AAP2tAQABJ8AAd8UABsAA3+6Cc8AAz4DAAM+FwADP/QAAl1MAAAABA8AAz5DAAM/9AAAAAQEBwADPlgAAAJdUYQMBYAPAAOf7YAPAAPxVAABcAT4BPTDAAM+1H8AAz7/AAP2tAQABJ8AAd8UABsAA3++Cc8AA0ALAANAHwADQfwAAl1YAAAABA8AA0BLAANB/AAAAAQEBwADQGAAAAJdUYQMBYAPAAOf7YAPAAPxVAABcAT4BPTDAANA3H8AA0EHAAP2tAQABJ8AAd8UABsAA3/uCc8AA0ITAANCSwADQ7AEAgx4AAAABA8AA0JjAANDsAAAAAAAAAGADwADn+wE+AknAANCeHMAA0KkWwADQoi5hwAD+74CXAQABkwDAAP9LSsAA0K4BHMAA0LkuSwEAAZMAwAD+zj89MMAA0MIewADQ3cAA0DgAAAAABsAA3/yCc8AA0PHAAND/wADRYQEAgeoAAAABA8AA0QTAANFhAAAAAAAAAGADwADn+wE+AknAANEKHMAA0RUWwADRDi5hwAD+74CXAQABkwDAAP9LSsAA0RoBHMAA0SUuSwEAARzAANEtFsAA0SYuYcAA/u+BjQEAAZQAwAD/QgDAAP7OPz0wwADRNx7AANFSwADQOAAAAAAGwADf/YJzwADRZsAA0XTAANILAQCAwwAAAAEDwADRe8AA0gsAAAAAAAAAYAPAAOf7AT4DScAA0YEcwADRjBbAANGFLmHAAP7vSAEAAZQAwAD/P0rAANGSARzAANGdLksBAAGTAMAA/s4/ScAA0aYcwADRsRbAANGqLmHAAP7vSAEAAZMAwAD/Pz0wwADRtx7AANHSwADQOAAAAAA/PTDAANHjHsAA0f7AANA5AAAAAAbAAN/wgnPAANIQwADSHsAA0w0AAIFYAAAAAQPAANIlwADTDQAAAAIBAsAA0ioAAABqYAPAAP4bAMAA0jYAAACCkGADwAD+GwFqAGADwAD/JXkAYAPAAOWoAT4FPYnAANJCwHIFVh7AANJTwAD9XAMAA4DAANJjwHIFR4HAANJqwHIFVhbAANJ0LmHAAP7vAE7AANKFwADSjAAAYWADwAD+GwEcwADSkoHAANKOwHIFVoGNAQABgMAA0pTAcgVHAMAA/0JOwADSrcAA0rQAAIF2YAPAAOWoARzAANK2LsAAemrAANW8AQABgsAA0sLAcgWuAMAA1uc9HMAA0taDwADSz8ByBeKDZAQABJOCwADS4sByBa4ugMAA0vDAcgVHAMAA/uRKwADS/AGDwADTA8ByBeIGwADf8YJzwADTEsAA0xfAANOYAACgSQAAAAEDwADTHcAA05gAAAACAgLAANMiAAAAJ2ADwAD+GwDAANM9AAAgg9FdA8AA/n0BYAPAAOf7AABcAT4CTsAA01PAANNXAAGCkGADwAD+GwEcwADTaRbAANNigcAA01nAcgaJYcAA/qBkAQABgMAA02vAcgZ6AMAA/0E9HMAA03Yug2QDAAOAwADTf8ByBnqCwADThsByBqaBwADTi8ByBokAwADW8AbAAN/ygnPAANOdwADTosAA1F0AAJwHAAAAAQPAANOrwADUXQAAAAMCA8AA07AAAABqYAPAAP4bAMAA07sAAACCkGADwAD+GwDAANPLAAAgwABEdGADwADn+wFqAGADwAD/JXkAXAE+Aj0ewADT6MAA/VwDAAOAwADT+MByBzmBwADT/8ByB0gWwADUCS5hwAD+7wBFwADUFgHAANQfwADUIQAAYmADwAD+GwGAwADUI8ByBzkBHMAA1CyDwADUKsByB6ljAQABgcAA1C7AcgdIAMAA/0kBi8AA1DXAcgepHMAA1DODwADUNcByB6lkAQABlADAAP9BPgE9HMAA1EQugL8CAAKDwADURcByB6mCwADUSsByB1gAwAD+zwAAcdkMAHHZfwBx2bMAcdnlAHHaFwBx2l4Acdq5AHHbLABx240AcdwcAHHcxQBx3hUAcd+ZAHHg5wBx4esAceOCAHHraQBx694AcexLAHHswABx7S0Ace2iAHHt9QBx7k4Ace8IAHHvWgBx79YAcfArAHHxGABx8osAcfO9AHH0PgBx9MYAcfXRAHH22wBx+GsAcfoPAHH8JQBx/IYAcfzcAHH9OgBx/aAAcf4MAHH+rAByADgAcgHwAHICPAByApcAcgL3AHIDVwByA9UAcgRtAHIFHQByBlAAcgcPAHIILAAAADcCwADgAYJzwAF/bMABf4zAAYPeA8AAex8BasABf21gA8AA/BzAAYJAAAFgAcAA38MAAWABwADlqAAACAbAAOAEgnPAAX/1wAF//cABgEQEAcAAeEnAANW8AAAAAQPAAYAkwAGARAAAAAAAAABgA8AA4AEBPgE9MMABgC0nwABi3gbAAOAGgnPAAYB5wAGAjMABgSwDAEsAAAABA8ABgI7AAYEsAAAAAQEBwAGAkwAAACdgA8AA/hsAAGADwADn+wE+AknAAYCgIhzAAYCqgMABgKTAcgm6YwEAAZMAwAD/SQEcwAGAt4DAAYCxwHIJuoFtAQABFsABgLouYcAA1zsAwAD/TD4BPTDAAYDKH8ABgNTAAP1xAwADgMABgOXAcgm6LicnAD9KwAGBBgEcwAGBDS7AAHr3wADVvAEAAYDAAYEiwHIJugDAAOAKBsAA4AeCc8ABgTHAAYE/wAGB8QMAgL8AAAABA8ABgULAAYHxAAAAAgICwAGBRwAAACdgA8AA/hsAwAGBWAAAIICWYAPAAOf7AABcAT4CScABgWUiHMABgW+AwAGBacByCoZjAQABkwDAAP9JARzAAYF8gMABgXbAcgqGgW0BAAEWwAGBfy5hwADXOwDAAP9MPgE9MMABgY8fwAGBmcAA/XEDAAOAwAGBqsByCoYuJycAPz0cwAGByy7AAHr4wADVvAIAAoDAAYHgwHIKhoHAAYHnwHIKlQDAAOALBsAA4A6Cc8ABgivAAYIzwAGCdAEAwABwKgAAAAEDwAGCRsABgnQAAAAAAAAAYAPAAP4bAT4BSsABgkwBasABgmFgA8AA/huDcAbAAOAJgnPAAYKYwAGCpsABgugAAMAAemrAANW8AAAAAQPAAYKxwAGC6AAAAAEBAcABgrYAAABhYAPAAP4bAABgA8AA5agBPgFKwAGCxAEewAGCz8AA5awBAAGAwAGC3cByC7AABsAA4AqCc8ABgu3AAYL3wAGDXAAAwAB698AA1bwAAAABA8ABgwvAAYNcAAAAAQEBwAGDEAAAACdgA8AA/hsAAGADwADn+wE+AUrAAYMdARzAAYMkLsAAerXAANW8AQABHMABgziAwAGDMsByDBWDjQEAAWrAAYNIYAPAAP4bg3AAwAD/QwDAANdWBsAA4AuCc8ABg2HAAYNmwAGD3AAAwAB6+MAA1bwAAAABA8ABg3rAAYPcAAAAAgICwAGDfwAAACdgA8AA/hsAwAGDkAAAAICWYAPAAOf7AABcAT4BPRzAAYOdLsAAerfAANW8AgACHMABg7GAwAGDq8ByDJ+DjQEAAWrAAYPBYAPAAP4bg3AAwAD/Q4HAAYPSwHIMrgDAANdXBsAA4AyCc8ABf4zAAX+MAAAQoD8AwADV38AA1d8BAwAAAAAAAwMDAAAAAGpgA8AA/hsAAAAAAIKQYAPAAP4bAAAAACCD0V0DwAD+fQFbAABcAUoAAR0AoD8DAAOAAMByDS+BAMByDTuCAMByDUgAwADV3wAAcglMAHIJkQByClwAcgs3AHILgAByC+UAcgxvAHINCAByDXsAAAAIAsAA4A+Cc8ABhpLAAYaywAGSuwPAAHsgAWrAAYaTYAPAAPwcwAGCQAABYAHAAP9oAAFgAcAA5bIAAQXAAOAxAAAAAAQAAAMAAAAAAAAAAABgA8AA4A8BPwEJAQDAAP9+AAAAAB4GwADgEYJzwAGG1sABhxfAAYdAAwRkAmrAAYbXYAPAAPwcwAGdlmoAYAPAAM1MwAGeZgAAAQPAAYcYwAGHQAAAAAEBAcABhyMAAACD22ADwADlsgAAYAPAAOWyAAbAAOASgnPAAYdEwAGHhcABh6IDBIHGAmrAAYdFYAPAAPwcwAGdlmoAYAPAAM1MwAGeegAAAQPAAYeGwAGHogAAAAAAAABgA8AA5bIABsAA4BOCc8ABh6bAAYfnwAGIEAMEgY0CasABh6dgA8AA/BzAAZ2WagBgA8AAzUzAAZ6OAAABA8ABh+jAAYgQAAAAAQEBwAGH8wAAAIPbYAPAAOWyAABgA8AA5bIABsAA4BSCc8ABiBTAAYhVwAGIfgMEg40CasABiBVgA8AA/BzAAZ2WagBgA8AAzUzAAZ6iAAABA8ABiFbAAYh+AAAAAQEBwAGIYQAAAIPbYAPAAOWyAABgA8AA5bIABsAA4BWCc8ABiILAAYiVwAGIvgMEUAFqAGADwADNTMABnrYAAAEDwAGIlsABiL4AAAABAQHAAYihAAAAg9tgA8AA5bIAAGADwADlsgAGwADgFoJzwAGIwsABiPbAAYkoAASWAQJqwAGIw2ADwAD8HMABndxqAGADwADNTMABnsoAAAEDwAGI/sABiSgAAAABAQHAAYkJAAAAg9tgA8AA5bIAAGADwADm2gAGwADgF4JzwAGJLMABiWDAAYmaAATAAHsnAmrAAYktYAPAAPwcwAGd3GoAYAPAAM1MwAGe3gAAAQPAAYlvwAGJmgAAAAEBAcABiXoAAACD22ADwADlsgAAYAPAAObaAAbAAOAYgnPAAYmewAGJ0sABigcABJX8AmrAAYmfYAPAAPwcwAGd3GoAYAPAAM1MwAGe8gAAAQPAAYndwAGKBwAAAAEBAcABiegAAACD22ADwADlsgAAYAPAAObaAAbAAOAZgnPAAYoLwAGKP8ABinwABMAAeyoCasABigxgA8AA/BzAAZ3cagBgA8AAzUzAAZ8GAAABA8ABilHAAYp8AAAAAQEBwAGKXAAAAIPbYAPAAOWyAABgA8AA5toABsAA4BqCc8ABioDAAYq0wAGK5gAEwABCrgJqwAGKgWADwAD8HMABndxqAGADwADNTMABnxoAAAEDwAGKucABiuYAAAABAQHAAYrEAAAAg9tgA8AA5bIAAGADwADm2gAGwADgG4JzwAGK6sABix7AAYtUAATAAHstAmrAAYrrYAPAAPwcwAGd3GoAYAPAAM1MwAGfLgAAAQPAAYsmwAGLVAAAAAEBAcABizEAAACD22ADwADlsgAAYAPAAObaAAbAAOAcgnPAAYtYwAGLkMABi7gABMAAey8CasABi1lgA8AA/BzAAZ2WagBgA8AAzUzAAZ9CAAABA8ABi5XAAYu4AAAAAQEBwAGLnQAAAIh7YAPAAPzNAABgA8AA5bIABsAA4B2Cc8ABi7zAAYv0wAGMEAAEmCUCasABi71gA8AA/BzAAZ2WagBgA8AAzUzAAZ9WAAABA8ABi/fAAYwQAAAAAAAAAGADwADlsgAGwADgHoJzwAGMFMABjEzAAYycAATAAHsyAmrAAYwVYAPAAPwcwAGdlmoAYAPAAM1MwAGfagAAAQPAAYxRwAGMnAAAAAICAsABjFwAAADAAHgSYAPAAOWyAMABjHIAAADAAHgTYAPAAOWyAABgA8AA5bIABsAA4CuCc8ABjKDAAYziwAGM+wEEg4ACasABjKFgA8AA/BzAAZY0agBgA8AAzUzAAZ9+AAABA8ABjOTAAYz7AAAAAAAAAGADwAD8zQAGwADgLIJzwAGM/8ABjUHAAY1aAQS9UAJqwAGNAGADwAD8HMABljRqAGADwADNTMABn5IAAAEDwAGNQ8ABjVoAAAAAAAAAYAPAAPzNAAbAAOAtgnPAAY1ewAGNoMABjbkBBMAASZ4CasABjV9gA8AA/BzAAZY0agBgA8AAzUzAAZ+mAAABA8ABjaLAAY25AAAAAAAAAGADwAD8zQAGwADgLoJzwAGNvcABjf/AAY4YAQTAAG1cAmrAAY2+YAPAAPwcwAGWNGoAYAPAAM1MwAGfugAAAQPAAY4BwAGOGAAAAAAAAABgA8AA/M0ABsAA4C+Cc8ABjhzAAY4kwAGOSwEEwAB7OAFqAGADwADNTMABn84AAAEDwAGOLcABjksAAAAAAAAAYAPAAP4bAAbAAOAfgnPAAY5QwAGOiMABjrQABKAzAmrAAY5RYAPAAPwcwAGdlmoAYAPAAM1MwAGf4gAAAQPAAY6PwAGOtAAAAAEBAcABjpQAAACtamADwAD+GwAAYAPAAOWyAAbAAOAggnPAAY64wAGO8MABjzAABMAAezsCasABjrlgA8AA/BzAAZ2WagBgA8AAzUzAAZ/2AAABA8ABjvrAAY8wAAAAAgICwAGPBQAAAMAAez1gA8AA5bIAwAGPDQAAAK1qYAPAAP4bAABgA8AA5bIABsAA4CGCc8ABjzXAAY9twAGPlAAEwAB7PgJqwAGPNmADwAD8HMABnZZqAGADwADNTMABoAoAAAEDwAGPcsABj5QAAAABAQHAAY96AAAAg4BgA8AA/M0AAGADwADlsgAGwADgIoJzwAGPmMABj9DAAY/3AATAAHtAAmrAAY+ZYAPAAPwcwAGdlmoAYAPAAM1MwAGgHgAAAQPAAY/VwAGP9wAAAAEBAcABj90AAAC9UGADwAD8zQAAYAPAAOWyAAbAAOAjgnPAAY/7wAGQM8ABkFoABMAAe0ICasABj/xgA8AA/BzAAZ2WagBgA8AAzUzAAaAyAAABA8ABkDjAAZBaAAAAAQEBwAGQQAAAAMAASZ5gA8AA/M0AAGADwADlsgAGwADgJIJzwAGQXsABkJbAAZC9AATAAHtEAmrAAZBfYAPAAPwcwAGdlmoAYAPAAM1MwAGgRgAAAQPAAZCbwAGQvQAAAAEBAcABkKMAAADAAG1cYAPAAPzNAABgA8AA5bIABsAA4CWCc8ABkMHAAZD5wAGRJAAEnQsCasABkMJgA8AA/BzAAZ2WagBgA8AAzUzAAaBaAAABA8ABkPzAAZEkAAAAAQEBwAGRBwAAAIPbYAPAAOWyAABgA8AA5bIABsAA4CaCc8ABkSjAAZFgwAGRiwAEwABKdgJqwAGRKWADwAD8HMABnZZqAGADwADNTMABoG4AAAEDwAGRY8ABkYsAAAABAQHAAZFuAAAAg9tgA8AA5bIAAGADwADlsgAGwADgJ4JzwAGRj8ABkcfAAZHlAATAAHlLAmrAAZGQYAPAAPwcwAGdlmoAYAPAAM1MwAGgggAAAQPAAZHLwAGR5QAAAAAAAABgA8AA5bIABsAA4CiCc8ABkenAAZIhwAGSSwAEwAB7SQJqwAGR6mADwAD8HMABnZZqAGADwADNTMABoJYAAAEDwAGSK8ABkksAAAAAAAAAYAPAAOWyAAbAAOApgnPAAZJPwAGSh8ABkrkABMAAe0sCasABklBgA8AA/BzAAZ2WagBgA8AAzUzAAaCqAAABA8ABkpXAAZK5AAAAAAAAAGADwADlsgAAAHIOCQByDmUAcg6yAHIPDwByD2wAcg+5AHIQFgByEHUAchDSAHIRMQByEZAAchHvAHISTgByEpsAchMOAHITWwByE6gAchP3AHIURgByFIYAchTjAHIVVAByFbMAchYSAHIWcwByFtQAchcxAHIXkAByF98AchguAHIYfQAAAB4CwADgMoJzwAGUdsABlJbAAZuHA8AAe00BasABlHdgA8AA/BzAAYJAAAFgAcAA/2gAAWABwADm2gABBcAA4E8AAAAABAAAAwAAAAAAAAAAAGADwADgMgE/AQkBAMAA/34AAAAAGQbAAOA0gnPAAZS2wAGUx8ABlOsDBIEGAWoAYAPAAM1MwAGgvgAAAQPAAZTIwAGU6wAAAAEBAcABlNEAAACD22ADwADm2gAAYAPAAObaAAbAAOA1gnPAAZTvwAGVAMABlSUDBIN8AWoAYAPAAM1MwAGg0gAAAQPAAZUBwAGVJQAAAAEBAcABlQoAAACD22ADwADm2gAAYAPAAObaAAbAAOA2gnPAAZUpwAGVOsABlV8DBIPAAWoAYAPAAM1MwAGg5gAAAQPAAZU7wAGVXwAAAAEBAcABlUQAAACD22ADwADm2gAAYAPAAObaAAbAAOA3gnPAAZVjwAGVdMABlZkDBGQBagBgA8AAzUzAAaD6AAABA8ABlXXAAZWZAAAAAQEBwAGVfgAAAIPbYAPAAObaAABgA8AA5toABsAA4DiCc8ABlZ3AAZWuwAGV0wMEgY0BagBgA8AAzUzAAaEOAAABA8ABla/AAZXTAAAAAQEBwAGVuAAAAIPbYAPAAObaAABgA8AA5toABsAA4EWCc8ABldfAAZXfwAGV9gEEg4ABagBgA8AAzUzAAaEiAAABA8ABleHAAZX2AAAAAAAAAGADwAD+GwAGwADgRoJzwAGV+sABlgLAAZYZAQS9UAFqAGADwADNTMABoTYAAAEDwAGWBMABlhkAAAAAAAAAYAPAAP4bAAbAAOBHgnPAAZYdwAGWJcABljwBBMAASZ4BagBgA8AAzUzAAaFKAAABA8ABlifAAZY8AAAAAAAAAGADwAD+GwAGwADgSIJzwAGWQMABlkjAAZZfAQTAAG1cAWoAYAPAAM1MwAGhXgAAAQPAAZZKwAGWXwAAAAAAAABgA8AA/hsABsAA4EmCc8ABlmPAAZZrwAGWkAEEwAB7OAFqAGADwADNTMABoXIAAAEDwAGWdMABlpAAAAAAAAAAYAPAAP4bAAbAAOA5gnPAAZaUwAGWyMABlvIABKAzAmrAAZaVYAPAAPwcwAGd3GoAYAPAAM1MwAGhhgAAAQPAAZbPwAGW8gAAAAEBAcABltQAAACtamADwAD+GwAAYAPAAObaAAbAAOA6gnPAAZb2wAGXKsABl2YABMAAezsCasABlvdgA8AA/BzAAZ3cagBgA8AAzUzAAaGaAAABA8ABlzTAAZdmAAAAAgICwAGXPQAAAMAAez1gA8AA5toAwAGXRQAAAK1qYAPAAP4bAABgA8AA5toABsAA4DuCc8ABl2rAAZdywAGXlAAEwAB7PgFqAGADwADNTMABoa4AAAEDwAGXd8ABl5QAAAABAQHAAZd8AAAAg4BgA8AA/hsAAGADwADm2gAGwADgPIJzwAGXmMABl6DAAZfCAATAAHtAAWoAYAPAAM1MwAGhwgAAAQPAAZelwAGXwgAAAAEBAcABl6oAAAC9UGADwAD+GwAAYAPAAObaAAbAAOA9gnPAAZfGwAGXzsABl/AABMAAe0IBagBgA8AAzUzAAaHWAAABA8ABl9PAAZfwAAAAAQEBwAGX2AAAAMAASZ5gA8AA/hsAAGADwADm2gAGwADgPoJzwAGX9MABl/zAAZgeAATAAHtEAWoAYAPAAM1MwAGh6gAAAQPAAZgBwAGYHgAAAAEBAcABmAYAAADAAG1cYAPAAP4bAABgA8AA5toABsAA4EqCc8ABmCLAAZhTwAGYcgEEwAB7XgJqwAGYI2ADwAD8HMABkzVqAGADwADNTMABof4AAAEDwAGYWcABmHIAAAAAAAAAYAPAAPxVAAbAAOBLgnPAAZh2wAGYp8ABmMYBBMAAe2ACasABmHdgA8AA/BzAAZM1agBgA8AAzUzAAaISAAABA8ABmK3AAZjGAAAAAAAAAGADwAD8VQAGwADgTIJzwAGYysABmPvAAZkaAQTAAHtiAmrAAZjLYAPAAPwcwAGTNWoAYAPAAM1MwAGiJgAAAQPAAZkBwAGZGgAAAAAAAABgA8AA/FUABsAA4E2Cc8ABmR7AAZlPwAGZbgEEwAB7ZAJqwAGZH2ADwAD8HMABkzVqAGADwADNTMABojoAAAEDwAGZVcABmW4AAAAAAAAAYAPAAPxVAAbAAOA/gnPAAZlywAGZpsABmdEABMAAe2YCasABmXNgA8AA/BzAAZ3cagBgA8AAzUzAAaJOAAABA8ABma/AAZnRAAAAAQEBwAGZtQAAAIOAYAPAAPxVAABgA8AA5toABsAA4ECCc8ABmdXAAZoJwAGaNAAEwAB7aAJqwAGZ1mADwAD8HMABndxqAGADwADNTMABomIAAAEDwAGaEsABmjQAAAABAQHAAZoYAAAAvVBgA8AA/FUAAGADwADm2gAGwADgQYJzwAGaOMABmmzAAZqXAATAAHtqAmrAAZo5YAPAAPwcwAGd3GoAYAPAAM1MwAGidgAAAQPAAZp1wAGalwAAAAEBAcABmnsAAADAAEmeYAPAAPxVAABgA8AA5toABsAA4EKCc8ABmpvAAZrPwAGa+gAEwAB7bAJqwAGanGADwAD8HMABndxqAGADwADNTMABoooAAAEDwAGa2MABmvoAAAABAQHAAZreAAAAwABtXGADwAD8VQAAYAPAAObaAAbAAOBDgnPAAZr+wAGbNsABm4UABJ/MAmrAAZr/YAPAAPwcwAGdlmoAYAPAAM1MwAGingAAAQPAAZs8wAGbhQAAAAICAsABm0cAAAC+EmADwADlsgDAAZtcAAAAvhNgA8AA5bIAAGADwADlsgAAAHIZYwByGbEAchn/AHIaTQByGpoAchroAHIbJgByG2QAchukAHIb5AByHCQAchyBAHIc8gByHUIAch2SAHId5AByHjYAch6FAHIe1AByHyMAch9yAHIf0QByIDAAciCRAHIg8gByIV8AAAAZAsAA4FCCc8ABnZDAAZ2wwAGjLQPAAHtvAWrAAZ2RYAPAAPwcwAGCQAABYAHAAP9oAAFgAcAA5/sAAQXAAOBkAAAAAAQAAAMAAAAAAAAAAABgA8AA4FABPwEJAQDAAP9+AAAAABAGwADgUoJzwAGd1MABnefAAZ4QAwRkAWoAYAPAAM1MwAGisgAAAQPAAZ3owAGeEAAAAAEBAcABnfMAAACD22ADwADn+wAAYAPAAOf7AAbAAOBTgnPAAZ4UwAGeVcABnnIDBIHGAmrAAZ4VYAPAAPwcwAGeSmoAYAPAAM1MwAGixgAAAQPAAZ5WwAGecgAAAAAAAABgA8AA5/sABsAA4FSCc8ABnnbAAZ6JwAGesgMEgY0BagBgA8AAzUzAAaLaAAABA8ABnorAAZ6yAAAAAQEBwAGelQAAAIPbYAPAAOf7AABgA8AA5/sABsAA4FWCc8ABnrbAAZ7JwAGe8gMEg40BagBgA8AAzUzAAaLuAAABA8ABnsrAAZ7yAAAAAQEBwAGe1QAAAIPbYAPAAOf7AABgA8AA5/sABsAA4FaCc8ABnvbAAZ8JwAGfMgMEUAFqAGADwADNTMABowIAAAEDwAGfCsABnzIAAAABAQHAAZ8VAAAAg9tgA8AA5/sAAGADwADn+wAGwADgV4JzwAGfNsABn27AAZ+WAATAAHsvAmrAAZ83YAPAAPwcwAGeSmoAYAPAAM1MwAGjFgAAAQPAAZ9zwAGflgAAAAEBAcABn3sAAACIe2ADwAD8zQAAYAPAAOf7AAbAAOBYgnPAAZ+awAGf0sABn+4ABJglAmrAAZ+bYAPAAPwcwAGeSmoAYAPAAM1MwAGjKgAAAQPAAZ/VwAGf7gAAAAAAAABgA8AA5/sABsAA4FmCc8ABn/LAAZ/8wAGgTAAEwAB7MgFqAGADwADNTMABoz4AAAEDwAGgAcABoEwAAAACAgLAAaAMAAAAwAB4EmADwADn+wDAAaAiAAAAwAB4E2ADwADn+wAAYAPAAOf7AAbAAOBggnPAAaBQwAGgksABoKsBBIOAAmrAAaBRYAPAAPwcwAGWNGoAYAPAAM1MwAGjUgAAAQPAAaCUwAGgqwAAAAAAAABgA8AA/M0ABsAA4GGCc8ABoK/AAaDxwAGhCgEEvVACasABoLBgA8AA/BzAAZY0agBgA8AAzUzAAaNmAAABA8ABoPPAAaEKAAAAAAAAAGADwAD8zQAGwADgYoJzwAGhDsABoRbAAaE9AQTAAHs4AWoAYAPAAM1MwAGjegAAAQPAAaEfwAGhPQAAAAAAAABgA8AA/hsABsAA4FqCc8ABoUHAAaF5wAGhoAAEwAB7PgJqwAGhQmADwAD8HMABnkpqAGADwADNTMABo44AAAEDwAGhfsABoaAAAAABAQHAAaGGAAAAg4BgA8AA/M0AAGADwADn+wAGwADgW4JzwAGhpMABodzAAaIDAATAAHtAAmrAAaGlYAPAAPwcwAGeSmoAYAPAAM1MwAGjogAAAQPAAaHhwAGiAwAAAAEBAcABoekAAAC9UGADwAD8zQAAYAPAAOf7AAbAAOBcgnPAAaIHwAGiP8ABomoABJ0LAmrAAaIIYAPAAPwcwAGeSmoAYAPAAM1MwAGjtgAAAQPAAaJCwAGiagAAAAEBAcABok0AAACD22ADwADn+wAAYAPAAOf7AAbAAOBdgnPAAaJuwAGipsABotEABMAASnYCasABom9gA8AA/BzAAZ5KagBgA8AAzUzAAaPKAAABA8ABoqnAAaLRAAAAAQEBwAGitAAAAIPbYAPAAOf7AABgA8AA5/sABsAA4F6Cc8ABotXAAaMNwAGjKwAEwAB5SwJqwAGi1mADwAD8HMABnkpqAGADwADNTMABo94AAAEDwAGjEcABoysAAAAAAAAAYAPAAOf7AAAAciIxAHIifgByIssAciMZAHIjZwByI7QAciQTAHIkYAByJMQAciURAHIlXgByJZ4AciX9AHImXAByJrkAcicYAHInZwAAABACwADgZYJzwAGjMMABozbAAaWDA8AAe4AAAQAAg9BgA8AA/2gBWwFgAcAA/2gAAV0BwAD+uAFfAwAABATAAOBognPAAaN1wAGjewnAAHuBwADVvABdA8AA/r8BXwMAAAAEwADgaYJzwAGjicABo5AJnVzAANW8AGADwAD+GwAEwADgaoJzwAGjmMABo6EYwABzdMAA1bwAYAPAAP4bAATAAOBrgnPAAaOnwAGjr1iI78AA1bwAXwMAAAErAQXAAOBxgnPAAaO0wAGjtMABpGIAAAADwAGjxsABpGIAAAABAQHAAaPMAAAAoEtdA8AA/r8BWwAAXQPAAOBlAV8DAAABPgFAIiXAAaQ1gMABpC/AciiRYAPAANc1ASXAAaRMgMABpEbAciiRYAPAAOBywAGkL8ABpF0ABAgAwADgaCbAAaPiAYDAAaPkwHIokV0DwAD+vwFfAwAACADAAOBpFsABpAOAwAGj/cByKJFhwAD+7wgAwADgahzAAaQflIHGAAAAAMAA/j4JAcABo7TAAP9+AAAAAAIGwADgbYJzwAGkZ8ABpGzAAaVjAABdAAAAAQPAAaR0wAGlYwAAAAAAAABgA8AA/FUBPgVOwAGkgcABpI4AAMAAYk5gA8AA/hsBHMABpJoWwAGkkC7AAHN0wADVvMAA4GpkAQABlADAAP9BScABpKMcwAGktIDAAaSnwHIpeWMBAAEWwAGkti6dXMAA1bzAAOBpAMAA/0k+Az0XwAGkxy6I78AA1bwcwAGk2BbAAaTSLsAAe4HAANW8wADgaEsBAAGAwAGk2cByKXkAwAD+zsAA4Gs9F8ABpO4uwABzdMAA1byAwAGk+sByKXnAAOBqSsABpQ4BKT89F8ABpSUuwABzdMAA1bwWwAGlMS6dXMAA1bzAAOBpwADgaj0XwAGlPi6I78AA1bwrwADga0rAAaVTASoGwADgb4JzwAGlaMABpW7AAaWBAQBeAAAAAQPAAaV2wAGlgQAAAAAAAABfAwAAAUrAAaV5ARbAAaV5LojvwADVvMAA4GsAAHIpRQByKncAciq8AAAAAgLAAOBygnPAAaWGwAGllcABqCYHwAB7ggAAAWABwADV0gABYAHAAOT5AAEFwADgewAAAAAEAAADAAAAAAAAAAAAYAPAAOByAT8BCQEAwADV5gAAAAAFBsAA4HSCc8ABpgrAAaYSwAGmTAEAwABvzwAAAAEDwAGmIMABpkwAAAAAAAAAYAPAAP4bAT4BSsABpiYBHMABpjQWwAGmLS5hwADgeYONAQABFsABpjYuwABwKsAA1dUAwAD/QwbAAOB1gnPAAaZRwAGmYcABpooBAIKPAAAAAQPAAaZowAGmigAAAAAAAABgA8AA1xgBPgFKwAGmbgEWwAGmgBbAAaZ1LsAAe4PAANW8wADgd4KPwADXOgbAAOB3gnPAAaaPwAGm5cABpxABBMAAe4PAANW8A2rAAaaQYAPAAPwcwAGj8mrAAaa5YAPAAPwcwADA+moAYAPAAM1MwAGkCwAAAQPAAabwwAGnEAAAAAAAAABgA8AA1zUABsAA4HiCc8ABpxXAAadvwAGnoQEEqhwDasABpxZgA8AA/BzAAYbkasABp0pgA8AA/BzAAMD6agBgA8AAzUzAAaQfAAABA8ABp33AAaehAAAAAAAAAGADwAD+GwAGwADgeYJzwAGnpsABqADAAagkAQRhA2rAAaenYAPAAPwcwAGG5GrAAafbYAPAAPwcwADA+moAYAPAAM1MwAGkMwAAAQPAAagHwAGoJAAAAAAAAABgA8AA/hsAAAByKyMAciuHAHIr3gByLEAAciycAHIs9wAAAAUCwADgfIJzwAGoKcABqEnAAayvN8AAe4gAAAFgAcAA4HIAAWABwADV5wABBcAA4KkAAAAABAAAAwAAAAAAAAAAAGADwADgfAE/AQkAAMAA4HsAAAAANAbAAOB+gnPAAahJwAGoSQAAEKA/AMAA1d/AANXfAQMAAAAAAAMDAwAAAABqYAPAAP4bAAAAAACCkGADwAD+GwAAAAAgg9FdA8AA/n0BWwAAXAFKAAEdAKA/AwADgADAci2RgQDAci2dggDAci2qAMAA1d8GwADgq4JzjiqOMo5EAQLAAHAqAAAAAQOORI5EAAAAAAAAAGADwAD+GwAGwADgrIJzjkiOUI5dAQKqHAAAAAEDjl2OXQAAAAAAAABgA8AA/hsABsAA4K2Cc45hjnGOdwECgo8AAAABA453jncAAAAAAAAAYAPAANcYAAbAAOB/gnOOfI6IjrgAAJabAAAAAQOOlI64AAABAACCemADwAD/aAFbAAAAAF0DwAD+fQFfAwAAAUqOmgEfjp7AANArAQFfAwAAAS4ABsAA4ICCc469jsuPKwAAlpIAAAABA47VjysAAAABAQGO5AAAIIPbXQPAAP59AWADwAD+GwAAXQPAAP59AWADwAD+GwFKjvQBHo74wADQAwIBYAPAAP4bAi6AjyXAci7EAAbAAOCBgnOPMI84j2AAAJaNAAAAAQOPP49gAAABAACXTmADwAD/aAFbAAAAAF0DwAD+vwFfAwAAAUqPRQEej0rAAP7KAQJgA8AA/htfAwAAAS4ABsAA4LSCc49kj22P1gIAgx4AAAABA49yj9YAAAABAQGPdwAAIICWYAPAAP4bAABcAT4CSY+EHI+UFo+NLmHAAP7vSAEAAZMAwAD/Pz0wj5ofj6TAAP1xAgACky4APz0cj8cugL8CAAKTgI/NwHIveADAAP7PBsAA4LWCc4/bj+SQWgIAgeoAAAABA4/okFoAAAABAQGP7QAAIICWYAPAAP4bAABcAT4CSY/6HJAKFpADLmHAAP7vSAEAAZMAwAD/Pz0wkBAfkBrAAP1xAgACky4APz0ckD0ugL8CAAIckEoWkEMuYcAA/u+BjQEAAZQAwAD/QoCQUcByL+0AwAD+zwbAAOCCgnOQX5BjkRwAAKBEAAAAAQOQbZEcAAAAAgECkHMAAACXVGEDAWADwAD+G2ADwAD8VQCQiwAAAGpgA8AA/hsBapCTYAPAAP4bCQBgA8AA/hsBPgNJkJ0ckKeBkKHAcjCPYwEAAZMAwAD/ST2JkKzAcjCPkz9FkLsBkMSQxgAAYmADwAD+GwGBkMjAcjCPARyQ0YKQz8ByMNVjAQABFpDTLmHAAP7vAMAA/0kBipDbwHIw1RyQ3IKQ28ByMNVkAQABlADAAP9BPgFJkOgckPCAkOzAcjB4IAEAARyQ9S5LAQABgpD2wHIw1QDAAP7OAABKkPsBgpECwHIw1T9KkQ8BHJEWlIHGAAAAAMAA/j4GwADgg4JzkSGRJZIEAACgRQAAAAEDkTOSBAAAAAIBApE5AAAAl1RhAwFgA8AA/htgA8AA/FUAkVEAAABqYAPAAP4bAWoAYAPAAP8leQBgA8AA/hsBPgNJkV8iHJFpgZFjwHIxoUgBAAErAMAA/z8BHJF6gZF0wHIxoYFtAQABFpGCLmHAAP7vAMAA/0w9iZGKwHIxoRyRnhaRly5hwAD+74GNAQABlADAAP9CP0WRpwGRsJGyAABiYAPAAP4bAYGRtMByMaEBHJG9gpG7wHIyG4FtAQABkwDAAP9MAYqRw8ByMhsckcSCkcPAcjIbgY0BAAGUAMAA/0I+AUmR0ByR2ICR1MByMYogAQABHJHdLksBAAGCkd7AcjIbAMAA/s4AAEqR4wGCkerAcjIbP0qR9wEckf6UgcYAAAAAwAD+PgbAAOCEgnOSCZIcku8DAGQAAAABA5Idku8AAAABAQGSKAAAIIPbXQPAAP6/AWADwAD+GwAAXQPAAP6/AWADwAD+GwE+Ak6SOZJFAACDXmADwAD+GwEcklMWkkwuYcAA/u9kAQABFpJbgJJVwHIyyWHAAP7vAMAA/0FKkmcBNZJzAAABAF0DwAD+vwFgA8AA/hsBMZJzYAPAAP4bADUAAAABAFsBF5J+gpJ8wHIzKGGBkofAcjLwwAD+7TUAAAABAFsBHJKbgpKZwHIzKINkAwADkxaSrC5hwAD+7y4AwAD+5DUAAAABAFsBHJLCgpLAwHIzKINkAwADFpLQLmHAAP7vgZLYwHIy8ICS5cByMskAwAD+5IIAwHIzKAbAAOCFgnOS9JL5k5gAAIMcAAAAAQOTAZOYAAAAAQEBkwkAAACWe2ADwAD/aAAAYAPAAPxVAT4DTpMckyAAAJfBYAPAAP4bARaTJy5hwAD+70WTMwGTPJM+AABiYAPAAP4bAZMBHJNFgpNDwHI0GWMBAAGBk0fAcjP9AMAA/0kBipNOwHI0GRyTTIKTTsByNBlkAQABlADAAP9BPgFJk1kck2Uck2EuSwEAAYKTYsByNBkAwAD+zkgBAAGAk2jAcjPkAMAA/z9Kk3EBKT9Kk4gBKgbAAOCGgnOTnZOilIsAAKAzAAAAAQOTqZSLAAAAAQABk7IAAACgNGADwADSfgFqAGADwAD/JXkAXAE+Az0jHJPIgJPBwHI0tkgBAAErAMAA/3WIk8HAcjS2HpPQwADSgAAAAAArAWADwADSfk6T4pPkAABiYAPAAP4bARaT6y5hwAD+70OT9xyUAIGT/sByNQOAlwEAAZQAwAD/Sz4FTpQRlBUAAKA1YAPAAP4bARyUHoCUF8ByNLagNgEAAYGUJsByNQMAwADSgz2JlDDAcjUDHJQygZQwwHI1A4GNAQABlADAAP9CTpRClEYAAKA3YAPAAP4bARyUTC5LAQABgZRNwHI1AwDAAP7OPRyUWy6AvwIAAoGUXMByNQMclGUuSwEAAYKUZsByNTUAwAD+zgDAAP7PPRyUdi6AvwIAAoKUd8ByNTWDlH7AcjV9AMAA/s8GwADgh4JzlJCUnpTbAACBpQAAAAEDlKOU2wAAAAEBAZSpAAAAgaZhAwFgA8AA/htgA8AA/FUAAF0DwAD+fQFgA8AA/hsBSpS8AR+UwMAAz00CAWADwAD+GwIugJTZwHI2BwAGwADgiIJzlOCU7pUhAACWmQAAAAEDlPKVIQAAAAEBAZT3AAAAg6hgA8AA/hsAAF0DwAD+fQFgA8AA/hsBSpT9AR+VAcAAzwgDAWADwAD+GwMuk4CVH8ByNmoABsAA4ImCc5UmlTSVhQAAlpoAAAABA5U9lYUAAAABAQGVQwAAAJdUYQMBYAPAAP4bYAPAAPxVAABdA8AA/n0BYAPAAP4bAUqVXwEflWPAAM+TAgFgA8AA/hsCLoCVgMByNsUABsAA4IqCc5WKlZiVzgAAloQAAAABA5Wclc4AAAABAQGVoQAAAIOoYAPAAP4bAABdA8AA/n0BYAPAAP4bAUqVpwEflavAAM8IAwFgA8AA/hsDLoCVxsByNygrAAbAAOCLgnOV05XhljIAAJaYAAAAAQOV6pYyAAAAAQEBlfAAAACXVGEDAWADwAD+G2ADwAD8VQAAXQPAAP59AWADwAD+GwFKlgwBH5YQwADPywIBYAPAAP4bAi6Ali3AcjeDAAbAAOCugnOWN5ZJlngBAJjgAAAAAQOWUpZ4AAAAAAAAAF0DwAD+fQFgA8AA/hsBSpZVAR+WWcAA0LkBAWADwAD+GwEuAAbAAOCMgnOWfZaLlrAAAJzCAAAAAQOWkJawAAAAAAAAAF0DwAD+8QJgA8AA/htgA8AA/hsBSpaWAR+WmsAA0K8BAWADwAD+GwEuAAbAAOCNgnOWtZbDl1YAAKA5AAAAAQOWy5dWAAAAAgECltAAAABqYAPAAP4bAJbcAAAAgpBgA8AA/hsBagBgA8AA/yV5AF0DwAD+fQFgA8AA/hsBPgI9HpbzwAD9XAMAA4CXA8ByOHaBlwrAcjiDFpcULmHAAP7vAEqXIQEflyzAAM8IAwFgA8AA/hsDLoCXR8ByOHaBl07AcjiDAAbAAOCvgnOXW5dtl5oBAFwAAAABA5d2l5oAAAAAAAAAXQPAAP64AWADwAD+GwFKl3kBH5d9wADgcQEBYAPAAP4bAS4ABsAA4I6Cc5efl6mYBAAAgK0AAAABA5evmAQAAAABAAABl7YAAACFdmADwAD8VQFql8BgA8AA/FV3XQPAAP6/AWADwAD+GwE+AUqXzQEel9jAAP7FAgFgA8AA/hsBLgGFdoCX98ByOVcGwADgj4JzmAmYEphCAACVcQAAAAEDmBeYQgAAAAAAAABdA8AA/7MBYAPAAP4bAT4BSpggAR6YK8AAwyMBAWADwAD+GwEuAAbAAOCQgnOYR5hMmMQAAIP9AAAAAQOYU5jEAAAAAQEBmFkAAACBpmEDAWADwAD+G1wAAFwBPgJOmHOYdwAAl8FgA8AA/hsBFph+LmHAAP7vRZiKAZiTmJUAAGJgA8AA/hsBkwEcmJyCmJrAcjo5YwEAAYGYnsByOh0AwAD/SQGKmKPAcjo5HJikgpijwHI6OWQBAAGUAMAA/0E+AT0cmLGAmLDAcjoFIAEAARyYti5LAQABgpi3wHI6OQDAAP7OAAAGwADgkYJzmMmYzZnOAACWlQAAAAEDmNOZzgAAAAEBAZjYAAAghzlhAwJgA8AA/htgA8AA/htgA8AA/hsAAGADwAD+GwE+BU6ZA5kHAACXwWADwAD+GwEWmQ4uYcAA/u9JmRocmSKBmR7AcjruSAEAAZMAwAD/Pz0wmSgemUPAANA4AAAAAD9OmViZXgAAgJZgA8AA/hsBHJlkLksBAAGTAMAA/s5FmW0BmXaZeAAAYmADwAD+GwGUARyZf4OZfcByO09jAQABgZmBwHI67gDAAP9JAYuZiMByO08cmYaDmYjAcjtPZAEAAZQAwAD/QT4BPYqZk8ByOy4cmaKAmZvAcjrGIAIAAoKZo8ByOy4cma4uSwEAAYOZr8ByO08AwAD+zgAASpm+AYKZxcByOy4GwADgkoJzmdOZ1ZqsAACDXwAAAAEDmdyarAAAAQAAgnpgA8AA/2gBWwICApnfAAAAlpFfAwAAAJnvAAAAhzlhAwJfAwAAYAPAAP4bXwMAAAAAXwMAAAE+A06aH5ojAACXwWADwAD+GwEWmiouYcAA/u9FmjYBmj+aQQAAYmADwAD+GwGTARyaSIOaRsByPEtjAQABgppKwHI8LwDAAP9JAYuaUcByPEscmk+DmlHAcjxLZAEAAZQAwAD/QT4BPYiaXMByPAEcmnKBmmvAcjwNIAIAAoCac8ByPAEcmoUuSwEAAYOahsByPEsAwAD+zgAASpqVAYCanMByPAEGwADgk4JzmrGavZr8AACAqwAAAAEDmsOa/AAAAQAAgnpgA8AA/2gBWwEBAZrGAAAAgaZhAwFgA8AA/htfAwAAAABdA8AA/n0BXwMAAAFKmtkBHprdwADPHAICYAPAAP4bXwMAAAIugJr6wHI8/QAGwADglIJzmwGbDZtfAACElQAAAAEDmxabXwAAAQAAgnpgA8AA/2gBWwEBAZsjAAAAgaZhAwFgA8AA/htdA8AA/n0BXwMAAAAAXQPAAP59AV8DAAABSps8AR+bQMAAz2ECAmADwAD+G18DAAACLoCbXcByPWwABsAA4JWCc5tkm2mcAwAAlosAAAABA5tunAMAAAABAQGbdAAAAIGmYQMBYAPAAP4bYAPAAPxVAABgA8AA/FUBPgNOm46bkgAAl8FgA8AA/hsBFpuZLmHAAP7vRZulAZuum7AAAGJgA8AA/hsBkwEcm7eCm7XAcj4UYwEAAYGbucByPfgAwAD/SQGKm8DAcj4UHJu+gpvAwHI+FGQBAAGUAMAA/0E+AUmbyyEcm9GAm9DAcj3WIAEAARyb1i5LAQABgpvXwHI+FADAAP7OAABKm9wBKj9Km/QBKQbAAOCWgnOcCJwNnKQAAIHWAAAAAQOcEJykAAAAAQEBnBYAAACBpmEDAWADwAD+G2ADwAD8VQAAYAPAAPxVAT4DTpwwnDQAAJfBYAPAAP4bARacOy5hwAD+70WcRwGcUJxSAABiYAPAAP4bAZMBHJxZgpxXwHI+7WMBAAGBnFvAcj7RAMAA/0kBipxiwHI+7RycYIKcYsByPu1kAQABlADAAP9BPgFJnG0cnHKAnHHAcj6vIAEAARycdy5LAQABgpx4wHI+7QDAAP7OAABKnH0BKT9KnJQBKgbAAOCXgnOcqZytncQAAJaPAAAAAQOct53EAAAAAgEBnL0AAACXVGEDAWADwAD+G2ADwAD8VQABnNUAACCWkGEDAGADwAD+GwFqAGADwAD/JXlgA8AA/hsBPgROnOqc7gAAl8FgA8AA/hsBFpz1LmHAAP7vRZ0BAZ0KnQwAAGJgA8AA/hsBkwEcnRODnRHAcj/fYwEAAYKdFcByP8MAwAD/SQGLnRzAcj/fHJ0ag50cwHI/32QBAAGUAMAA/0E+Ak6dK50zAACWe2ADwAD+GwEcnTkuSwEAAYOdOsByP98AwAD+zkmdRBydTICdSMByP4cgAQABhJ1NwHJAKAAASp1XAYSdXsByQCg/SZ1xIRydfIGddcByP59IAQABKwDAAP91Sp2FARydkoGdjMByP58gAAAAAAA/PTCdmh6dtcAA0DgAAAAABsAA4JiCc53Jnc2e+gAAlpQAAAABA53WnvoAAAACAQGd3AAAAJdUYQMBYAPAAP4bYAPAAPxVAAGd9AAAIJaQYQMAYAPAAP4bAWoAYAPAAP8leWADwAD+GwE+BE6eCZ4NAACXwWADwAD+GwEWnhQuYcAA/u9FniABnimeKwAAYmADwAD+GwEcnjGCni3AckEJgY0BAAGUAMAA/0IBHJ44g542wHJBJYFtAQABkwDAAP9MAYueQMByQSUcnj6DnkDAckElgY0BAAGUAMAA/0I+Ak6eT55XAACWe2ADwAD+GwEcnl0uSwEAAYOeXsByQSUAwAD+zkmeaByecICebMByQM0gAQABhJ5xwHJBfgAAPgFKnoUBhJ6MwHJBfj9JnqchHJ6ygZ6rwHJA5UgBAAErAMAA/3VKnrsBHJ7IgZ7CwHJA5SAAAAAAAD89MJ7QHp7rwADQOAAAAAAGwADgmYJznv+fA6EBAACWlwAAAAEDnw6hAQAAAAIBAZ8UAAAAl1RhAwFgA8AA/htgA8AA/FUAAZ8sAAAglpBhAwBgA8AA/hsBagBgA8AA/yV5YAPAAP4bAT4HTp9Bn0gAAIF2WwErTp9Zn2cAAMAAcyVgA8AA/FUBKk6feJ98AACXwWADwAD+GwEWn4MuYcAA/u9Fn48Bn5ifmgAAYmADwAD+GwGTARyfoYWfn8ByQpxjAQABhJ+jwHJCgADAAP9JAY2fqsByQpwcn6iFn6rAckKcZAEAAZQAwAD/QT4CTp+5n8EAAJZ7YAPAAP4bARyfxy5LAQABhZ/IwHJCnADAAP7OSZ/SHJ/agJ/WwHJCJSABAAGGn9vAckLlAAA+A0mf74Of88ByQm0+AT0woA4eoCnAANA5AAAAAD89iqBGwHJCYYagT8ByQuU9i6BgwHJCbSk/SaCIg6CMwHJCbUqgmwEmoJsBgqCiwHJCYWADwAD+Gz9JoK4hHKC5gaCywHJCPUgBAAErAMAA/3VKoMIBHKDPgaDJwHJCPSAAAAAAAD89MKDXHqDywADQOAAAAAAGwADgmoJzoQahCqE7AACWjgAAAAEDoROhOwAAAAEBAaEYAAAAJ2ADwAD+GwAAYAPAAP4bAT4BSqElARyhMC5LAQABgKExwHJD1QDAAP7OBsAA4JuCc6FAoUWhnQAAVgAAAAEDoUihnQAAAAEBAaFNAAAggJZgA8AA/hsAAFwBPgE9MKFaH6FkwAD9rQEAASfAAHfEAAbAAOCcgnOhoqGnogwAAIClAAAAAQOhraIMAAAAAQEBobwAACCAll0DwAD+fQFgA8AA/hsAAFwBPgE9MKHJH6HTwAD9rQEAASfAAHfEAAbAAOCdgnOiEaIWooEAAJ86AAAAAQOiHKKBAAAAAgICoiEAAAAnYAPAAP4bAKIsAAAggJZgA8AA/hsAAFwBPgE9MKI5H6JDwAD9rQEAASfAAHpnAAbAAOCegnOihqKLowQAAKBHAAAAAQOilKMEAAAAAgICopkAAAAnYAPAAP4bAKKuAAAgKV0DwAD+fQFgA8AA/hsAAFwBPgE9MKK8H6LGwAD9rQEAASfAAHpnAAbAAOCfgnOjCaMOo2gAAICuAAAAAQOjEqNoAAAAAQABoxgAAACbd2EDAmADwAD+G2ADwAD+G2ADwAD+GwFqAGADwAD/JXkAXAE+AT0eozvAANDOAgFgA8AA/hsCLjUAAAABAGEDAmADwAD+G2ADwAD+G2ADwAD+GwGAo0bAckVmIxyjToEAwHJFpEgBAAErAABqo1xhAwJdA8AA/GEBW10DwAD8YQFbYAPAAP4bwAGH2oEAwHJFpAFhAwJgA8AA/htgA8AA/htgA8AA/hsABsAA4KCCc6Nto3GkbAAAgLsAAAABA6N4pGwAAAACAQKjfQAAIJZ7YAPAAP4bAKOLAAAAamADwAD+GwFqo5NgA8AA/hsJAGADwAD+GwE+A0mjnRyjp4GjocByRkKBbQEAARajry5hwAD+7wDAAP9MPgFKo78BHKPGlIHGAAAAAMAA/j5Jo9Uco9+Bo9nAckZCYwEAAZMAwAD/ST4BPYmj7MByRkKTP0WkAQGkCqQMAABiYAPAAP4bAYGkDsByRkIBHKQXgqQVwHJGvmMBAAEWpB4uYcAA/u8AwAD/SQGKpCbAcka+HKQngqQmwHJGvmQBAAGUAMAA/0E+AUmkMxykPxykOy5LAQABgqQ8wHJGvgDAAP7OSAEAAYCkQsByRjQAwAD/P0qkSwGCpFLAcka+P0qkXwEcpGaUgcYAAAAAwAD+PgbAAOChgnOkcaR1pY0AAJa1AAAAAQOkgKWNAAAAAgECpIUAACCWe2ADwAD+GwCkkwAAAGpgA8AA/hsBaqSbYAPAAP8leQBgA8AA/hsBPgNJpKgiHKSygaSswHJHhEgBAAErAMAA/z8BHKTDgaS9wHJHhIFtAQABFqTLLmHAAP7vAMAA/0w+AT2JpNvAckeEHKTvFqToLmHAAP7vgY0BAAGUAMAA/0JJpP8cpQmBpQPAckeEYwEAAZMAwAD/ST4BSqUWARylHZSBxgAAAADAAP4+P0WlKwGlNKU2AABiYAPAAP4bAYGlOMByR4QBHKVBgqU/wHJILIFtAQABkwDAAP9MAYqlR8BySCwcpUiCpUfAckgsgY0BAAGUAMAA/0I+AUmlVBylYBylXC5LAQABgqVdwHJILADAAP7OSAEAAYClY8ByR3YAwAD/P0qlbAGCpXPAckgsP0qlgAEcpYeUgcYAAAAAwAD+PgbAAOCignOlkqWWpfEAAIYuAAAAAQOloKXxAAAAAAAAAGADwAD+GwE+AT0wpakfpbPAAP2tAQABJ8AAd8UABsAA4KOCc6X2pfqmXAAAoEYAAAABA6YCplwAAAABAQGmBwAAACdgA8AA/hsAAGADwAD+GwE+AT0wphQfph7AAP2tAQABJ8AAd8UABsAA4KSCc6Zhpmam2AAAl1MAAAABA6ZxptgAAAABAQGmdwAAAJdUYQMBYAPAAP4bYAPAAPxVAABcAT4BPTCmkB+mmsAA/a0BAAEnwAB3xQAGwADgpYJzpt2m4qdUAACXVgAAAAEDpu2nVAAAAAEBAabzAAAAl1RhAwFgA8AA/htgA8AA/FUAAFwBPgE9MKcMH6cWwAD9rQEAASfAAHfFAAbAAOCwgnOnWadhp7sBAIMeAAAAAQOnZ6e7AAAAAAAAAGADwAD+GwE+AkmnbRyneBancS5hwAD+74CXAQABkwDAAP9LSqd9ARyniC5LAQABkwDAAP7OPz0wp5Eep6zAANA4AAAAAAbAAOCxgnOnwKfIqCoBAIHqAAAAAQOnzagqAAAAAAAAAGADwAD+GwE+Akmn0xyn3han1y5hwAD+74CXAQABkwDAAP9LSqfjARyn7i5LAQABHKf2FqfvLmHAAP7vgY0BAAGUAMAA/0IAwAD+zj89MKgAHqgbwADQOAAAAAAGwADgsoJzqC+oN6jOAQCAwwAAAAEDqD6ozgAAAAAAAABgA8AA/hsBPgNJqEQcqE8WqEguYcAA/u9IAQABlADAAP8/SqhVARyoYC5LAQABkwDAAP7OP0moaRyodBaobS5hwAD+70gBAAGTAMAA/z89MKh6HqiVwADQOAAAAAA/PTCoph6owcAA0DkAAAAABsAA4KaCc6jTqNipUwAAoEkAAAABA6jeqVMAAAACAgKo4wAAACdgA8AA/hsAqPgAACCD0V0DwAD+fQFgA8AA/hsAAFwBPgJOqQ6pEgABgpBgA8AA/hsBHKkkFqkdgakUwHJLhGHAAP6gZAEAAYCpJsByS3cAwAD/QT0cqTEug2QDAAOAqTrAckt3gqlBwHJLn4GpRsByS4QAwAD+5AbAAOCngnOpWKldqhIAAJwHAAAAAQOpZqoSAAAAAwIDqWsAAABqYAPAAP4bAKl2AAAAgpBgA8AA/hsAqYAAACDAAER0YAPAAP4bAWoAYAPAAP8leQBcAT4CPR6pncAA/VwDAAOAqa3AckwUgam0wHJMIRapvi5hwAD+7wBFqcsBqdSp1gAAYmADwAD+GwGAqdjAckwUARyp4YOp38ByTHRjAQABganjwHJMIQDAAP9JAYup6sByTHQcqeiDqerAckx0ZAEAAZQAwAD/QT4BPRyp+S6AvwIAAoOp+sByTHSCqf/AckwvAMAA/s8AAHItagByLd0Aci4HAHIuLwByLlcAci6kAHIvBQByL1gAci/NAHIwWAByMWoAcjKqAHIzxAByNJYAcjXnAHI2SgByNqUAcjcIAHI3YwByN8YAcjgLAHI4VgByOPIAcjk2AHI5ngByOeUAcjqmAHI71QByPNEAcj1AAHI9tgByPo8Acj9nAHJArQByQgUAckO1AHJEBAByREoAckSYAHJE7AByRUYAckYUAHJHVgBySL4Ackj8AHJJRwBySZcAcknnAHJKTQBySskAcktXAHJL9AByTN8AAAA0AsAA4LaCc8ABqCnAAahJwAGsrzfAAHuJAAABYAHAAOB8AAFdAcAA1h4BYAPAAOUwAAEFwADgvgAAAAAEAAADAAAAAAAAAAAAYAPAAOC2AT8BCQAAwADgqQAAAAAEBsAA4LiCc8ABqEnAAahJAAAQoD8AwADV38AA1d8BAwAAAAAAAwMDAAAAAGpgA8AA/hsAAAAAAIKQYAPAAP4bAAAAACCD0V0DwAD+fQFbAABcAUoAAR0AoD8DAAOAAMByTjyBAMByTkiCAMByTlUAwADV3wbAAOC6gnOqfaqJqqAAAsAAemrAANW8AAAAAQOqlKqgAAAAAQEBqpkAAABhYAPAAP4bAABgA8AA5TAABsAA4LuCc6qlqqqzbwAAg2QAAAABA6qys28AAAAEAwSqtwAAAGpgA8AA/hsAqsIAAACCkGADwAD+GwCq1QAAIJaDXQPAAP59AWADwAD+GwCq4AAAAKA8YAPAAP4bAWqq7GADwAD+GwkAXAE+C0mrCyIiHKsRk4CXAQABgKsTwHJO4wDAAP9LARyrIoCrHMByTuOAlwEAAYGrJMByTvAAwAD/SwEcqy+BqyvAck7wgJcBAAEWqzEuYcAA/u8AwAD/Sz4CPR6rTMAA/VwDAAOAq1zAck7jgatjwHJO8BaraC5hwAD+7wBAKquQq5UAP0mrohyrsIOrpsByTxNjAQABkwDAAP9JPgE9MKu9H6vOwAD9ZQQABIOr1MByTxOTKyegPAA/TqwHrA0AAYDuYAPAAP4bARysE4GsD8ByTvCBjQEAAYCsFcByTuMAwAD/QkmsIBysPhysMRasKoKsJcByTv5hwAD+oIGNAQABg6wzwHJPEwDAAP9CYwEAAYSsQMByT+cAwAD/ST4BPTCsTx6sasAA0DoAAAAAP0msfxysiYSsg8ByT+dIAQABkwDAAP8/SqyPAD9JrJwlrKWCrKDAck7+YAPAANXSPgJOrSytPAABwAB6a2ADwADV0gEmrUMAgq0+wHJO/mADwADV0kmtXByteBatZS7AAHAqwADV6UgBAAEWrYuFrXvAclCOwABwKsAA1dUAwAD/Pz4BSa2pIhyttIStrsByT+djAQABNwoAwAD/SQAhHK3VFq3Oha2+wHJQjoKPwADV10gBAAEWrd0ugo/AANXrAMAA1yM+Aj0erfjAAM0uBQAFJq4CAIKt/cByTv5dA8AA/r8BYAPAAP4bg64QwHJPEy6AriHAck7jhK4owHJP5wBKrjoASa5RHK5nFq5hFq5aLoKPwADV67f3wADVvMAA1xvAAHApwADVvAYABhyumRyuhICufsByTuODjQEAARauhi7AAHAqwADV6QDAAP9DZAEAARauoC6qHMAA1eoAwAD/QRyuwYSuu8ByT+eDjQEAARauwy7AAHAqwADV6QDAAP9DFq76Fq7zha7jwHJQjoKPwADV17f3wADVvMAA1xscrywcrxeDrw3Ack8Tg40BAAEWrxkuwABwKsAA1ekAwAD/Q2QBAAEWrz6Fry7AclCOqhzAANXWAMAA/0Eer2HAAM07AQABLgAer4LAAM07AQABgq+IwHJO/gAAwADV4j4BSq+cAD9Jr7scr9YWr8+Fr7/AclCOgo/AANXXSAEAARav3i6Cj8AA1esAwADXIz4FTrC0sL8AAcAAemxdA8AA/r8BYAPAAP4bASawxgCCsMHAck7+XQPAAP6/AWADwAD+G06w4rDtAAHAAHptYAPAAOUwARyw7y7AAHpqwADVvAEAAYSw+8ByT+cAwADWIUWxCwGxFLEWAABiYAPAAP4bAZMBHLEdFLEbwHJS7ggAYwEAAYSxH8ByT+cAwAD/SQEVsSbAclLuCByxJxSxJsByUu4IAGQBAAGUAMAA/0E+AT0csUGHsTfAclK+gL8CAAIUsULAclLuCAAcsVGGsUfAclKNSwEAARyxXIOxUsByTxNkAQABFLFewHJS7ggAAMAA/0EAwAD+zgDAAP7PRbF0AbF9sX8AAGJgA8AA/hsBgLGBwHJO4wEcsYoUsYjAclOMCABjAQABgbGMwHJO8ADAAP9JARWxkcByU4wIHLGSFLGRwHJTjAgAZAEAAZQAwAD/QT4BPRyxpi6AvwIAAhSxp8ByU4wIAByxtoexrMByUr5LAQABHLG5FLG3wHJTjAgAgY0BAAGAsbvAck7jAMAA/0IAwAD+zgDAAP7PSrHVAD8/TrH1AAAAoD1dA8AA/r8BWwBOsggAAACgPmADwAD+GwBJshglsiGCshzAck7+XQPAAP6/AWADwAD+Gz4CPY2yN8ByVC4UskPAck7+AgFdA8AA/r8BYAPAAP4bPY6yT8ByVD+DslzAck8TPgI9jbJ6wHJULhyymxyyi4KyhsByTv6WhAEAAYOykMByTxMAwAD+l4CtAQAAAYV2KsAA/pM9jrK6wHJUP5NJstQcsuscsuOGstjAclQ/ZAEAAYSy5cByT+cAwAD/QYCXAQABFrL3hbLtwHJULmHAAP7vAMAA/0s+AT0wswcesyLAANA6AAAAAD89HrM8wADNLgUABYWzQcByVC6Gs0zAclQ/LoCzXsByTuOEs2XAck/nAAbAAOC8gnOzdLOAtG0AAIFYAAAAAQOzh7RtAAAAAgECs4wAAABqYAPAAP4bALOYAAAAgpBgA8AA/hsBagBgA8AA/yV5AGADwADlMAE+BT2Js6TAclV1HrO1wAD9XAMAA4CzxcByVWiBs8zAclV1FrPWLmHAAP7vAE6z57PuAABhYAPAAP4bARyz9IGz8MByVXWBjQEAAYCz9sByVWgAwAD/Qk60DbQUAACBdmADwADlMAEctBYuwAB6asAA1bwBAAGCtCLAclXBAMAA1iE9HLQ2g7QvwHJV64NkBAAEk4K0QsByVcEugLRQwHJVaADAAP7kSrRcAYO0Y8ByVesAAHJOFQByTogAck7DAHJVSAByVkUAAAAEAsAA4L+Cc8ABqCnAAahJwAGsrwPAAHuKAWrAAagqYAPAAPwcwAGCQAABYAHAAOC2AAFgAcAA5TAAAAYGwADgwoJzwAGpBMABqQzAAal9BAWAtcAA1bwCasABqNNgA8AA/BzAAaRJagBgA8AAzUzAAaRlAAABA8ABqRzAAal9AAAAAwMDwAGpKAAAAIKPYAPAANc1AMABqTQAAACqHGADwAD+GwDAAalHAAAAYWADwAD+GwAAYAPAAOC/AAbAAODEgnPAAamuwAGp2cABqq4DAEsBasABqa9gA8AA/BzAAMD6AAABA8ABqdvAAaquAAAAAQEBwAGp4AAAACdgA8AA/hsAAGADwAD+GwE+AknAAantIhzAAan3gMABqfHAcldRYwEAAZMAwAD/SQEcwAGqBIDAAan+wHJXUYFtAQABFsABqgcuYcAA4HkAwAD/TD4BPTDAAaoXH8ABqiHAAP1xAwADgMABqjLAcldRLicnAD9KwAGqUwEcwAGqbhbAAapaLsAAe4PAANW8wADgd8AAeoXAANW8AQABHMABqoUWwAGqdy6qHMAA1epkAQABHMABqo6AwAGqiMByV1GDjQEAAWrAAaqZYAPAAP4bFQDAAP9DAMAA/0EAwADXPgbAAODFgnPAAaqzwAGq38ABq8kDAIC/AWrAAaq0YAPAAPwcwADA+gAAAQPAAariwAGryQAAAAICAsABqucAAAAnYAPAAP4bAMABqvIAACCAlmADwAD+GwAAXAE+AknAAar/IhzAAasJgMABqwPAclhyYwEAAZMAwAD/SQEcwAGrFoDAAasQwHJYcoFtAQABFsABqxkuYcAA4HkAwAD/TD4BPTDAAaspH8ABqzPAAP1xAwADgMABq0TAclhyLicnAD89HMABq3AWwAGrZS7AAHuDwADVvMAA4HfAAHqHwADVvAIAAhzAAauQFsABq4IuqhzAANXqZAEAARzAAauZgMABq5PAclhyg40BAAFqwAGrpGADwAD+GxUAwAD/QwDAAP9BHsABq7bAANXJAQABgcABq77AcliBAADAANc/BsAA4MqCc8ABq//AAawHwAGsQwEAwABwKgAAAAEDwAGsGsABrEMAAAAAAAAAYAPAAP4bAT4BSsABrCABasABrDBgA8AA/hsVBsAA4MeCc8ABrGfAAaxwwAGsrQAAwAB6asAA1bwAAAABA8ABrHvAAaytAAAAAQEBwAGsgAAAAGFgA8AA/hsAAGADwADlMAE+AUrAAayOAR7AAayZwADlNAEAAYDAAayiwHJZ7gAGwADgyIJzwAGoScABqEkAABCgPwDAANXfwADV3wEDAAAAAAADAwMAAAAAamADwAD+GwAAAAAAgpBgA8AA/hsAAAAAIIPRXQPAAP59AVsAAFwBSgABHQCgPwMAA4AAwHJaSoEAwHJaVoIAwHJaYwDAANXfAAByVpkAclcZAHJYOQByWXYAclm+AHJaIwByWpYAAAAGAsAA4MuCc8ABrLLAAazSwAGxRjfAAHuMAAABYAHAAOByAAFgAcAA1ecAAQXAAOD4AAAAAAQAAAMAAAAAAAAAAABgA8AA4MsBPwEJAADAAOB7AAAAADQGwADgzYJzwAGs0sABrNIAABCgPwDAANXfwADV3wEDAAAAAAADAwMAAAAAamADwAD+GwAAAAAAgpBgA8AA/hsAAAAAIIPRXQPAAP59AVsAAFwBSgABHQCgPwMAA4AAwHJbNIEAwHJbQIIAwHJbTQDAANXfBsAA4PqCc44qjjKORAECwABwKgAAAAEDjkSORAAAAAAAAABgA8AA/hsABsAA4PuCc45IjlCOXQECqhwAAAABA45djl0AAAAAAAAAYAPAAP4bAAbAAOD8gnOOYY5xjncBAoKPAAAAAQOOd453AAAAAAAAAGADwADXGAAGwADgzoJzjnyOiI64AACWmwAAAAEDjpSOuAAAAQAAgnpgA8AA/2gBWwAAAABdA8AA/n0BXwMAAAFKjpoBH46ewADQKwEBXwMAAAEuAAbAAODPgnOOvY7LjysAAJaSAAAAAQOO1Y8rAAAAAQEBjuQAACCD210DwAD+fQFgA8AA/hsAAF0DwAD+fQFgA8AA/hsBSo70AR6O+MAA0AMCAWADwAD+GwIugI8lwHJcZwAGwADg0IJzjzCPOI9gAACWjQAAAAEDjz+PYAAAAQAAl05gA8AA/2gBWwAAAABdA8AA/r8BXwMAAAFKj0UBHo9KwAD+ygECYAPAAP4bXwMAAAEuAAbAAOEDgnOPZI9tj9YCAIMeAAAAAQOPco/WAAAAAQEBj3cAACCAlmADwAD+GwAAXAE+AkmPhByPlBaPjS5hwAD+70gBAAGTAMAA/z89MI+aH4+kwAD9cQIAApMuAD89HI/HLoC/AgACk4CPzcByXRsAwAD+zwbAAOEEgnOP24/kkFoCAIHqAAAAAQOP6JBaAAAAAQEBj+0AACCAlmADwAD+GwAAXAE+AkmP+hyQChaQAy5hwAD+70gBAAGTAMAA/z89MJAQH5AawAD9cQIAApMuAD89HJA9LoC/AgACHJBKFpBDLmHAAP7vgY0BAAGUAMAA/0KAkFHAcl2QAMAA/s8GwADg0YJzkF+QY5EcAACgRAAAAAEDkG2RHAAAAAIBApBzAAAAl1RhAwFgA8AA/htgA8AA/FUAkIsAAABqYAPAAP4bAWqQk2ADwAD+GwkAYAPAAP4bAT4DSZCdHJCngZChwHJeMmMBAAGTAMAA/0k9iZCswHJeMpM/RZC7AZDEkMYAAGJgA8AA/hsBgZDIwHJeMgEckNGCkM/Acl54YwEAARaQ0y5hwAD+7wDAAP9JAYqQ28ByXngckNyCkNvAcl54ZAEAAZQAwAD/QT4BSZDoHJDwgJDswHJeGyABAAEckPUuSwEAAYKQ9sByXngAwAD+zgAASpD7AYKRAsByXng/SpEPARyRFpSBxgAAAADAAP4+BsAA4NKCc5EhkSWSBAAAoEUAAAABA5EzkgQAAAACAQKROQAAAJdUYQMBYAPAAP4bYAPAAPxVAJFRAAAAamADwAD+GwFqAGADwAD/JXkAYAPAAP4bAT4DSZFfIhyRaYGRY8ByX0RIAQABKwDAAP8/ARyReoGRdMByX0SBbQEAARaRgi5hwAD+7wDAAP9MPYmRisByX0QckZ4WkZcuYcAA/u+BjQEAAZQAwAD/Qj9FkacBkbCRsgAAYmADwAD+GwGBkbTAcl9EARyRvYKRu8ByX76BbQEAAZMAwAD/TAGKkcPAcl++HJHEgpHDwHJfvoGNAQABlADAAP9CPgFJkdAckdiAkdTAcl8tIAEAARyR3S5LAQABgpHewHJfvgDAAP7OAABKkeMBgpHqwHJfvj9KkfcBHJH+lIHGAAAAAMAA/j4GwADg04JzkgmSHJLvAwBkAAAAAQOSHZLvAAAAAQEBkigAACCD210DwAD+vwFgA8AA/hsAAF0DwAD+vwFgA8AA/hsBPgJOkjmSRQAAg15gA8AA/hsBHJJTFpJMLmHAAP7vZAEAARaSW4CSVcByYGxhwAD+7wDAAP9BSpJnATWScwAAAQBdA8AA/r8BYAPAAP4bATGSc2ADwAD+GwA1AAAAAQBbAReSfoKSfMByYMthgZKHwHJgk8AA/u01AAAAAQBbARySm4KSmcByYMuDZAMAA5MWkqwuYcAA/u8uAMAA/uQ1AAAAAQBbARySwoKSwMByYMuDZAMAAxaS0C5hwAD+74GS2MByYJOAkuXAcmBsAMAA/uSCAMByYMsGwADg1IJzkvSS+ZOYAACDHAAAAAEDkwGTmAAAAAEBAZMJAAAAlntgA8AA/2gAAGADwAD8VQE+A06THJMgAACXwWADwAD+GwEWkycuYcAA/u9FkzMBkzyTPgAAYmADwAD+GwGTARyTRYKTQ8ByYbxjAQABgZNHwHJhoADAAP9JAYqTTsByYbwck0yCk07AcmG8ZAEAAZQAwAD/QT4BSZNZHJNlHJNhLksBAAGCk2LAcmG8AMAA/s5IAQABgJNowHJhhwDAAP8/SpNxASk/SpOIASoGwADg1YJzk52TopSLAACgMwAAAAEDk6mUiwAAAAEAAZOyAAAAoDRgA8AA0n4BagBgA8AA/yV5AFwBPgM9IxyTyICTwcByYllIAQABKwDAAP91iJPBwHJiWR6T0MAA0oAAAAAAKwFgA8AA0n5Ok+KT5AAAYmADwAD+GwEWk+suYcAA/u9Dk/cclACBk/7AcmKmgJcBAAGUAMAA/0s+BU6UEZQVAACgNWADwAD+GwEclB6AlBfAcmJZoDYBAAGBlCbAcmKmAMAA0oM9iZQwwHJiphyUMoGUMMByYqaBjQEAAZQAwAD/Qk6UQpRGAACgN2ADwAD+GwEclEwuSwEAAYGUTcByYqYAwAD+zj0clFsugL8CAAKBlFzAcmKmHJRlLksBAAGClGbAcmLYAMAA/s4AwAD+zz0clHYugL8CAAKClHfAcmLYg5R+wHJjIADAAP7PBsAA4NaCc5SQlJ6U2wAAgaUAAAABA5SjlNsAAAABAQGUqQAAAIGmYQMBYAPAAP4bYAPAAPxVAABdA8AA/n0BYAPAAP4bAUqUvAEflMDAAM9NAgFgA8AA/hsCLoCU2cByY6oABsAA4NeCc5TglO6VIQAAlpkAAAABA5TylSEAAAABAQGU9wAAAIOoYAPAAP4bAABdA8AA/n0BYAPAAP4bAUqU/QEflQHAAM8IAwFgA8AA/hsDLpOAlR/AcmQNAAbAAODYgnOVJpU0lYUAAJaaAAAAAQOVPZWFAAAAAQEBlUMAAACXVGEDAWADwAD+G2ADwAD8VQAAXQPAAP59AWADwAD+GwFKlV8BH5VjwADPkwIBYAPAAP4bAi6AlYDAcmRoAAbAAODZgnOVipWYlc4AAJaEAAAAAQOVnJXOAAAAAQEBlaEAAACDqGADwAD+GwAAXQPAAP59AWADwAD+GwFKlacBH5WrwADPCAMBYAPAAP4bAy6AlcbAcmTLKwAGwADg2oJzldOV4ZYyAACWmAAAAAEDleqWMgAAAAEBAZXwAAAAl1RhAwFgA8AA/htgA8AA/FUAAF0DwAD+fQFgA8AA/hsBSpYMAR+WEMAAz8sCAWADwAD+GwIugJYtwHJlJgAGwADg/YJzljeWSZZ4AQCY4AAAAAEDllKWeAAAAAAAAABdA8AA/n0BYAPAAP4bAUqWVQEfllnAANC5AQFgA8AA/hsBLgAGwADg24Jzln2Wi5awAACcwgAAAAEDlpCWsAAAAAAAAABdA8AA/vECYAPAAP4bYAPAAP4bAUqWlgEflprAANCvAQFgA8AA/hsBLgAGwADg3IJzlrWWw5dWAACgOQAAAAEDlsuXVgAAAAIBApbQAAAAamADwAD+GwCW3AAAAIKQYAPAAP4bAWoAYAPAAP8leQBdA8AA/n0BYAPAAP4bAT4CPR6W88AA/VwDAAOAlwPAcmYZgZcKwHJmJhaXFC5hwAD+7wBKlyEBH5cswADPCAMBYAPAAP4bAy6Al0fAcmYZgZdOwHJmJgAGwADg/oJzl1uXbZeaAQBcAAAAAQOXdpeaAAAAAAAAAF0DwAD+uAFgA8AA/hsBSpd5AR+XfcAA4HEBAWADwAD+GwEuAAbAAODdgnOXn5epmAQAAICtAAAAAQOXr5gEAAAAAQAAAZe2AAAAhXZgA8AA/FUBapfAYAPAAPxVd10DwAD+vwFgA8AA/hsBPgFKl80BHpfYwAD+xQIBYAPAAP4bAS4BhXaAl/fAcmb6BsAA4N6Cc5gJmBKYQgAAlXEAAAABA5gXmEIAAAAAAAAAXQPAAP+zAWADwAD+GwE+AUqYIAEemCvAAMMjAQFgA8AA/hsBLgAGwADg34JzmEeYTJjEAACD/QAAAAEDmFOYxAAAAAEBAZhZAAAAgaZhAwFgA8AA/htcAABcAT4CTphzmHcAAJfBYAPAAP4bARaYfi5hwAD+70WYigGYk5iVAABiYAPAAP4bAZMBHJicgpiawHJn3GMBAAGBmJ7AcmfAAMAA/0kBipijwHJn3ByYpIKYo8ByZ9xkAQABlADAAP9BPgE9HJixgJiwwHJnqCABAAEcmLYuSwEAAYKYt8ByZ9wAwAD+zgAABsAA4OCCc5jJmM2ZzgAAlpUAAAABA5jTmc4AAAABAQGY2AAAIIc5YQMCYAPAAP4bYAPAAP4bYAPAAP4bAABgA8AA/hsBPgVOmQOZBwAAl8FgA8AA/hsBFpkOLmHAAP7vSZkaHJkigZkewHJokUgBAAGTAMAA/z89MJkoHplDwADQOAAAAAA/TplYmV4AAICWYAPAAP4bARyZZC5LAQABkwDAAP7ORZltAZl2mXgAAGJgA8AA/hsBlAEcmX+DmX3AcmjyYwEAAYGZgcByaJEAwAD/SQGLmYjAcmjyHJmGg5mIwHJo8mQBAAGUAMAA/0E+AT2KmZPAcmjRHJmigJmbwHJoaSACAAKCmaPAcmjRHJmuLksBAAGDma/AcmjyAMAA/s4AAEqZvgGCmcXAcmjRBsAA4OGCc5nTmdWarAAAg18AAAABA5ncmqwAAAEAAIJ6YAPAAP9oAVsCAgKZ3wAAAJaRXwMAAACZ7wAAAIc5YQMCXwMAAGADwAD+G18DAAAAAF8DAAABPgNOmh+aIwAAl8FgA8AA/hsBFpoqLmHAAP7vRZo2AZo/mkEAAGJgA8AA/hsBkwEcmkiDmkbAcmnuYwEAAYKaSsByadIAwAD/SQGLmlHAcmnuHJpPg5pRwHJp7mQBAAGUAMAA/0E+AT2ImlzAcmmkHJpygZprwHJpsCACAAKAmnPAcmmkHJqFLksBAAGDmobAcmnuAMAA/s4AAEqalQGAmpzAcmmkBsAA4OKCc5qxmr2a/AAAgKsAAAABA5rDmvwAAAEAAIJ6YAPAAP9oAVsBAQGaxgAAAIGmYQMBYAPAAP4bXwMAAAAAXQPAAP59AV8DAAABSprZAR6a3cAAzxwCAmADwAD+G18DAAACLoCa+sByaqAABsAA4OOCc5sBmw2bXwAAhJUAAAABA5sWm18AAAEAAIJ6YAPAAP9oAVsBAQGbIwAAAIGmYQMBYAPAAP4bXQPAAP59AV8DAAAAAF0DwAD+fQFfAwAAAUqbPAEfm0DAAM9hAgJgA8AA/htfAwAAAi6Am13AcmsPAAbAAODkgnObZJtpnAMAAJaLAAAAAQObbpwDAAAAAQEBm3QAAACBpmEDAWADwAD+G2ADwAD8VQAAYAPAAPxVAT4DTpuOm5IAAJfBYAPAAP4bARabmS5hwAD+70WbpQGbrpuwAABiYAPAAP4bAZMBHJu3gpu1wHJrt2MBAAGBm7nAcmubAMAA/0kBipvAwHJrtxybvoKbwMBya7dkAQABlADAAP9BPgFJm8shHJvRgJvQwHJreSABAAEcm9YuSwEAAYKb18Bya7cAwAD+zgAASpvcASo/Spv0ASkGwADg5YJznAicDZykAACB1gAAAAEDnBCcpAAAAAEBAZwWAAAAgaZhAwFgA8AA/htgA8AA/FUAAGADwAD8VQE+A06cMJw0AACXwWADwAD+GwEWnDsuYcAA/u9FnEcBnFCcUgAAYmADwAD+GwGTARycWYKcV8BybJBjAQABgZxbwHJsdADAAP9JAYqcYsBybJAcnGCCnGLAcmyQZAEAAZQAwAD/QT4BSZxtHJxygJxxwHJsUiABAAEcnHcuSwEAAYKceMBybJAAwAD+zgAASpx9ASk/SpyUASoGwADg5oJznKmcrZ3EAACWjwAAAAEDnLedxAAAAAIBAZy9AAAAl1RhAwFgA8AA/htgA8AA/FUAAZzVAAAglpBhAwBgA8AA/hsBagBgA8AA/yV5YAPAAP4bAT4ETpzqnO4AAJfBYAPAAP4bARac9S5hwAD+70WdAQGdCp0MAABiYAPAAP4bAZMBHJ0Tg50RwHJtgmMBAAGCnRXAcm1mAMAA/0kBi50cwHJtghydGoOdHMBybYJkAQABlADAAP9BPgJOnSudMwAAlntgA8AA/hsBHJ05LksBAAGDnTrAcm2CAMAA/s5JnUQcnUyAnUjAcm0qIAEAAYSdTcBybcsAAEqdVwGEnV7Acm3LP0mdcSEcnXyBnXXAcm1CSAEAASsAwAD/dUqdhQEcnZKBnYzAcm1CIAAAAAAAPz0wnZoenbXAANA4AAAAAAbAAODngnOdyZ3NnvoAAJaUAAAAAQOd1p76AAAAAgEBndwAAACXVGEDAWADwAD+G2ADwAD8VQABnfQAACCWkGEDAGADwAD+GwFqAGADwAD/JXlgA8AA/hsBPgROngmeDQAAl8FgA8AA/hsBFp4ULmHAAP7vRZ4gAZ4pnisAAGJgA8AA/hsBHJ4xgp4twHJurIGNAQABlADAAP9CARyeOIOeNsBybsiBbQEAAZMAwAD/TAGLnkDAcm7IHJ4+g55AwHJuyIGNAQABlADAAP9CPgJOnk+eVwAAlntgA8AA/hsBHJ5dLksBAAGDnl7Acm7IAMAA/s5JnmgcnnCAnmzAcm5wIAEAAYSeccBybyEAAD4BSp6FAYSejMBybyE/SZ6nIRyesoGeq8BybohIAQABKwDAAP91Sp67ARyeyIGewsByboggAAAAAAA/PTCe0B6e68AA0DgAAAAABsAA4OiCc57/nwOhAQAAlpcAAAABA58OoQEAAAACAQGfFAAAAJdUYQMBYAPAAP4bYAPAAPxVAAGfLAAAIJaQYQMAYAPAAP4bAWoAYAPAAP8leWADwAD+GwE+B06fQZ9IAACBdlsBK06fWZ9nAADAAHMlYAPAAPxVASpOn3iffAAAl8FgA8AA/hsBFp+DLmHAAP7vRZ+PAZ+Yn5oAAGJgA8AA/hsBkwEcn6GFn5/AcnA/YwEAAYSfo8BycCMAwAD/SQGNn6rAcnA/HJ+ohZ+qwHJwP2QBAAGUAMAA/0E+Ak6fuZ/BAACWe2ADwAD+GwEcn8cuSwEAAYWfyMBycD8AwAD+zkmf0hyf2oCf1sByb8ggAQABhp/bwHJwiAAAPgNJn++Dn/PAcnAQPgE9MKAOHqApwADQOQAAAAA/PYqgRsBycASGoE/AcnCIPYugYMBycBApP0mgiIOgjMBycBBKoJsBJqCbAYKgosBycARgA8AA/hs/SaCuIRyguYGgssByb+BIAQABKwDAAP91SqDCARygz4GgycByb+AgAAAAAAA/PTCg1x6g8sAA0DgAAAAABsAA4OmCc6EGoQqhOwAAlo4AAAABA6EToTsAAAABAQGhGAAAACdgA8AA/hsAAGADwAD+GwE+AUqhJQEcoTAuSwEAAYChMcBycXgAwAD+zgbAAODqgnOhQKFFoZ0AAFYAAAABA6FIoZ0AAAABAQGhTQAAIICWYAPAAP4bAABcAT4BPTChWh+hZMAA/a0BAAEnwAB3xAAGwADg64JzoaKhp6IMAACApQAAAAEDoa2iDAAAAAEBAaG8AAAggJZdA8AA/n0BYAPAAP4bAABcAT4BPTChyR+h08AA/a0BAAEnwAB3xAAGwADg7IJzohGiFqKBAACfOgAAAAEDohyigQAAAAICAqIhAAAAJ2ADwAD+GwCiLAAAIICWYAPAAP4bAABcAT4BPTCiOR+iQ8AA/a0BAAEnwAB6ZwAGwADg7YJzooaii6MEAACgRwAAAAEDopSjBAAAAAICAqKZAAAAJ2ADwAD+GwCirgAAICldA8AA/n0BYAPAAP4bAABcAT4BPTCivB+ixsAA/a0BAAEnwAB6ZwAGwADg7oJzowmjDqNoAACArgAAAAEDoxKjaAAAAAEAAaMYAAAAm3dhAwJgA8AA/htgA8AA/htgA8AA/hsBagBgA8AA/yV5AFwBPgE9HqM7wADQzgIBYAPAAP4bAi41AAAAAQBhAwJgA8AA/htgA8AA/htgA8AA/hsBgKNGwHJzCSMco06BAMByc0dIAQABKwAAaqNcYQMCXQPAAPxhAVtdA8AA/GEBW2ADwAD+G8ABh9qBAMByc0cBYQMCYAPAAP4bYAPAAP4bYAPAAP4bAAbAAODvgnOjbaNxpGwAAIC7AAAAAQOjeKRsAAAAAgECo30AACCWe2ADwAD+GwCjiwAAAGpgA8AA/hsBaqOTYAPAAP4bCQBgA8AA/hsBPgNJo50co6eBo6HAcnPlgW0BAAEWo68uYcAA/u8AwAD/TD4BSqO/ARyjxpSBxgAAAADAAP4+SaPVHKPfgaPZwHJz5WMBAAGTAMAA/0k+AT2Jo+zAcnPlkz9FpAEBpAqkDAAAYmADwAD+GwGBpA7AcnPlARykF4KkFcBydGFjAQABFqQeLmHAAP7vAMAA/0kBiqQmwHJ0YRykJ4KkJsBydGFkAQABlADAAP9BPgFJpDMcpD8cpDsuSwEAAYKkPMBydGEAwAD+zkgBAAGApELAcnPXAMAA/z9KpEsBgqRSwHJ0YT9KpF8BHKRmlIHGAAAAAMAA/j4GwADg8IJzpHGkdaWNAACWtQAAAAEDpICljQAAAAIBAqSFAAAglntgA8AA/hsApJMAAABqYAPAAP4bAWqkm2ADwAD/JXkAYAPAAP4bAT4DSaSoIhyksoGkrMBydSdIAQABKwDAAP8/ARykw4GkvcBydSeBbQEAARakyy5hwAD+7wDAAP9MPgE9iaTbwHJ1Jxyk7xak6C5hwAD+74GNAQABlADAAP9CSaT/HKUJgaUDwHJ1J2MBAAGTAMAA/0k+AUqlFgEcpR2UgcYAAAAAwAD+Pj9FpSsBpTSlNgAAYmADwAD+GwGBpTjAcnUnARylQYKlP8Bydc+BbQEAAZMAwAD/TAGKpUfAcnXPHKVIgqVHwHJ1z4GNAQABlADAAP9CPgFJpVQcpWAcpVwuSwEAAYKlXcBydc8AwAD+zkgBAAGApWPAcnUZAMAA/z9KpWwBgqVzwHJ1zz9KpYABHKWHlIHGAAAAAMAA/j4GwADg8YJzpZKllqXxAACGLgAAAAEDpaCl8QAAAAAAAABgA8AA/hsBPgE9MKWpH6WzwAD9rQEAASfAAHfFAAbAAODygnOl9qX6plwAAKBGAAAAAQOmAqZcAAAAAQEBpgcAAAAnYAPAAP4bAABgA8AA/hsBPgE9MKYUH6YewAD9rQEAASfAAHfFAAbAAODzgnOmYaZmptgAAJdTAAAAAQOmcabYAAAAAQEBpncAAACXVGEDAWADwAD+G2ADwAD8VQAAXAE+AT0wppAfpprAAP2tAQABJ8AAd8UABsAA4PSCc6bdpuKnVAAAl1YAAAABA6btp1QAAAABAQGm8wAAAJdUYQMBYAPAAP4bYAPAAPxVAABcAT4BPTCnDB+nFsAA/a0BAAEnwAB3xQAGwADg/4Jzp1mnYae7AQCDHgAAAAEDp2enuwAAAAAAAABgA8AA/hsBPgJJp20cp3gWp3EuYcAA/u+AlwEAAZMAwAD/S0qnfQEcp4guSwEAAZMAwAD+zj89MKeRHqeswADQOAAAAAAGwADhAIJzp8CnyKgqAQCB6gAAAAEDp82oKgAAAAAAAABgA8AA/hsBPgJJp9Mcp94Wp9cuYcAA/u+AlwEAAZMAwAD/S0qn4wEcp+4uSwEAARyn9han7y5hwAD+74GNAQABlADAAP9CAMAA/s4/PTCoAB6oG8AA0DgAAAAABsAA4QGCc6gvqDeozgEAgMMAAAABA6g+qM4AAAAAAAAAYAPAAP4bAT4DSahEHKhPFqhILmHAAP7vSAEAAZQAwAD/P0qoVQEcqGAuSwEAAZMAwAD+zj9JqGkcqHQWqG0uYcAA/u9IAQABkwDAAP8/PTCoeh6olcAA0DgAAAAAPz0wqKYeqMHAANA5AAAAAAbAAOD1gnOo06jYqVMAAKBJAAAAAQOo3qlTAAAAAgICqOMAAAAnYAPAAP4bAKj4AAAgg9FdA8AA/n0BYAPAAP4bAABcAT4CTqkOqRIAAYKQYAPAAP4bARypJBapHYGpFMByeSdhwAD+oGQBAAGAqSbAcnkaAMAA/0E9HKkxLoNkAwADgKk6wHJ5GoKpQcByeUKBqUbAcnknAMAA/uQGwADg9oJzqVipXaoSAACcBwAAAAEDqWaqEgAAAAMCA6lrAAAAamADwAD+GwCpdgAAAIKQYAPAAP4bAKmAAAAgwABEdGADwAD+GwFqAGADwAD/JXkAXAE+Aj0eqZ3AAP1cAwADgKmtwHJ5t4GptMByecQWqb4uYcAA/u8ARanLAanUqdYAAGJgA8AA/hsBgKnYwHJ5twEcqeGDqd/AcnoXYwEAAYGp48ByecQAwAD/SQGLqerAcnoXHKnog6nqwHJ6F2QBAAGUAMAA/0E+AT0cqfkugL8CAAKDqfrAcnoXgqn/wHJ50gDAAP7PAAByWw0AcluAAHJbqgByW9IAclv6AHJcRwByXKgAclz7AHJdcAByXfsAcl8NAHJgTQByYWcAcmI5AHJjigByY+0AcmRIAHJkqwByZQYAcmVpAHJlrgByZfkAcmaVAHJm2QByZ0EAcmeIAHJoSQByaXgAcmp0AHJq4wBya1kAcmwyAHJtCgByblAAcm+oAHJxWABycacAcnHtAHJyOwByco8AcnLpAHJztwBydPkAcnZhAHJ2nwByduoAcnc6AHJ3igByd/AAcnhsAHJ4+gByeZcAcnqCAAAANALAAOEFgnPAAayywAGs0sABsUY3wAB7jQAAAWABwADgywABXQHAANYeAWADwADlOQABBcAA4Q0AAAAABAAAAwAAAAAAAAAAAGADwADhBQE/AQkAAMAA4PgAAAAABAbAAOEHgnPAAazSwAGs0gAAEKA/AMAA1d/AANXfAQMAAAAAAAMDAwAAAABqYAPAAP4bAAAAAACCkGADwAD+GwAAAAAgg9FdA8AA/n0BWwAAXAFKAAEdAKA/AwADgADAcnvfgQDAcnvrggDAcnv4AMAA1d8GwADhCYJzqn2qiaqgAALAAHpqwADVvAAAAAEDqpSqoAAAAAEBAaqZAAAAYWADwAD+GwAAYAPAAOU5AAbAAOEKgnOqpaqqs28AAINkAAAAAQOqsrNvAAAABAMEqrcAAABqYAPAAP4bAKrCAAAAgpBgA8AA/hsAqtUAACCWg10DwAD+fQFgA8AA/hsAquAAAACgPGADwAD+GwFqquxgA8AA/hsJAFwBPgtJqwsiIhyrEZOAlwEAAYCrE8ByfIYAwAD/SwEcqyKAqxzAcnyGgJcBAAGBqyTAcnyTAMAA/0sBHKsvgasrwHJ8k4CXAQABFqsxLmHAAP7vAMAA/0s+Aj0eq0zAAP1cAwADgKtcwHJ8hoGrY8ByfJMWq2guYcAA/u8AQCqrkKuVAD9Jq6Icq7CDq6bAcny2YwEAAZMAwAD/ST4BPTCrvR+rzsAA/WUEAASDq9TAcny2kysnoDwAP06sB6wNAAGA7mADwAD+GwEcrBOBrA/AcnyTgY0BAAGArBXAcnyGAMAA/0JJrCAcrD4crDEWrCqCrCXAcnyhYcAA/qCBjQEAAYOsM8ByfLYAwAD/QmMBAAGErEDAcn2KAMAA/0k+AT0wrE8erGrAANA6AAAAAD9JrH8crImErIPAcn2KSAEAAZMAwAD/P0qsjwA/SaycJaylgqygwHJ8oWADwADV0j4CTq0srTwAAcAAemtgA8AA1dIBJq1DAIKtPsByfKFgA8AA1dJJrVwcrXgWrWUuwABwKsAA1elIAQABFq2Lha17wHJ+McAAcCrAANXVAMAA/z8+AUmtqSIcrbSEra7Acn2KYwEAATcKAMAA/0kAIRyt1RatzoWtvsByfjGCj8AA1ddIAQABFq3dLoKPwADV6wDAANcjPgI9Hq34wADNLgUABSauAgCCrf3AcnyhXQPAAP6/AWADwAD+G4OuEMByfLYugK4hwHJ8hoSuKMByfYoASq46AEmuURyuZxauYRauWi6Cj8AA1eu398AA1bzAANcbwABwKcAA1bwGAAYcrpkcroSArn7AcnyGg40BAAEWroYuwABwKsAA1ekAwAD/Q2QBAAEWrqAuqhzAANXqAMAA/0EcrsGErrvAcn2Kg40BAAEWrsMuwABwKsAA1ekAwAD/Qxau+hau84Wu48ByfjGCj8AA1de398AA1bzAANcbHK8sHK8Xg68NwHJ8toONAQABFq8ZLsAAcCrAANXpAMAA/0NkAQABFq8+ha8uwHJ+MaocwADV1gDAAP9BHq9hwADNOwEAAS4AHq+CwADNOwEAAYKviMByfKEAAMAA1eI+AUqvnAA/Sa+7HK/WFq/Pha+/wHJ+MYKPwADV10gBAAEWr94ugo/AANXrAMAA1yM+BU6wtLC/AAHAAHpsXQPAAP6/AWADwAD+GwEmsMYAgrDBwHJ8oV0DwAD+vwFgA8AA/htOsOKw7QABwAB6bWADwADlOQEcsO8uwAB6asAA1bwBAAGEsPvAcn2KAMAA1iFFsQsBsRSxFgAAYmADwAD+GwGTARyxHRSxG8BygJEIAGMBAAGEsR/Acn2KAMAA/0kBFbEmwHKAkQgcsScUsSbAcoCRCABkAQABlADAAP9BPgE9HLFBh7E3wHKAYYC/AgACFLFCwHKAkQgAHLFRhrFHwHKAMEsBAAEcsVyDsVLAcny2ZAEAARSxXsBygJEIAADAAP9BAMAA/s4AwAD+z0WxdAGxfbF/AABiYAPAAP4bAYCxgcByfIYBHLGKFLGIwHKBLwgAYwEAAYGxjMByfJMAwAD/SQEVsZHAcoEvCByxkhSxkcBygS8IAGQBAAGUAMAA/0E+AT0csaYugL8CAAIUsafAcoEvCAAcsbaHsazAcoBhSwEAARyxuRSxt8BygS8IAIGNAQABgLG7wHJ8hgDAAP9CAMAA/s4AwAD+z0qx1QA/P06x9QAAAKA9XQPAAP6/AVsATrIIAAAAoD5gA8AA/hsASbIYJbIhgrIcwHJ8oV0DwAD+vwFgA8AA/hs+Aj2NsjfAcoHRFLJDwHJ8oQIBXQPAAP6/AWADwAD+Gz2Osk/AcoHig7JcwHJ8tj4CPY2yesBygdEcspscsouCsobAcnyhloQBAAGDspDAcny2AMAA/peArQEAAAGFdirAAP6TPY6yusBygeKTSbLUHLLrHLLjhrLYwHKB4mQBAAGEsuXAcn2KAMAA/0GAlwEAARay94Wy7cBygdFhwAD+7wDAAP9LPgE9MLMHHrMiwADQOgAAAAA/PR6zPMAAzS4FAAWFs0HAcoHRhrNMwHKB4i6As17AcnyGhLNlwHJ9igAGwADhC4Jzs3SzgLRtAACBWAAAAAEDs4e0bQAAAAIBArOMAAAAamADwAD+GwCzmAAAAIKQYAPAAP4bAWoAYAPAAP8leQBgA8AA5TkBPgU9ibOkwHKDGB6ztcAA/VwDAAOAs8XAcoMLgbPMwHKDGBaz1i5hwAD+7wBOs+ez7gAAYWADwAD+GwEcs/SBs/DAcoMYgY0BAAGAs/bAcoMLAMAA/0JOtA20FAAAgXZgA8AA5TkBHLQWLsAAemrAANW8AQABgrQiwHKDZADAANYhPRy0NoO0L8Byg46DZAQABJOCtELAcoNkLoC0UMBygwsAwAD+5Eq0XAGDtGPAcoOOAABye7gAcnwrAHJ8ZgBygusAcoPoAAAABALAAOEOgnPAAayywAGs0sABsUYDwAB7jgFqwAGss2ADwAD8HMABgkAAAWABwADhBQABYAHAAOU5AAAGBsAA4RGCc8ABrZHAAa2ZwAGuDAQFgLXAANW8AmrAAa1fYAPAAPwcwAGke2oAYAPAAM1MwAGklwAAAQPAAa2qwAGuDAAAAAMDA8ABrbYAAACCj2ADwADXNQDAAa3CAAAAqhxgA8AA/hsAwAGt1QAAAGFgA8AA/hsAAGADwADhDgAGwADhE4JzwAGuPcABrmjAAa8/AwBLAWrAAa4+YAPAAPwcwADA+gAAAQPAAa5qwAGvPwAAAAEBAcABrm8AAAAnYAPAAP4bAABgA8AA/hsBPgJJwAGufCIcwAGuhoDAAa6AwHKE9GMBAAGTAMAA/0kBHMABrpOAwAGujcByhPSBbQEAARbAAa6WLmHAAOB5AMAA/0w+AT0wwAGuph/AAa6wwAD9cQMAA4DAAa7BwHKE9C4nJwA/SsABruIBHMABrv0WwAGu6S7AAHuDwADVvMAA4HfAAHqJwADVvAEAARzAAa8VFsABrwcuqhzAANXqZAEAARzAAa8egMABrxjAcoT0g40BAAFqwAGvKmADwAD+GxUAwAD/QwDAAP9BAMAA10AGwADhFIJzwAGvRMABr3DAAbBdAwCAvwFqwAGvRWADwAD8HMAAwPoAAAEDwAGvc8ABsF0AAAACAgLAAa94AAAAJ2ADwAD+GwDAAa+DAAAggJZgA8AA/hsAAFwBPgJJwAGvkCIcwAGvmoDAAa+UwHKGFWMBAAGTAMAA/0kBHMABr6eAwAGvocByhhWBbQEAARbAAa+qLmHAAOB5AMAA/0w+AT0wwAGvuh/AAa/EwAD9cQMAA4DAAa/VwHKGFS4nJwA/PRzAAbABFsABr/YuwAB7g8AA1bzAAOB3wAB6i8AA1bwCAAIcwAGwIhbAAbAULqocwADV6mQBAAEcwAGwK4DAAbAlwHKGFYONAQABasABsDdgA8AA/hsVAMAA/0MAwAD/QR7AAbBJwADVygEAAYHAAbBSwHKGJAAAwADXQQbAAOEZgnPAAbCTwAGwm8ABsNgBAMAAcCoAAAABA8ABsK7AAbDYAAAAAAAAAGADwAD+GwE+AUrAAbC0AWrAAbDFYAPAAP4bFQbAAOEWgnPAAbD8wAGxBsABsUQAAMAAemrAANW8AAAAAQPAAbERwAGxRAAAAAEBAcABsRYAAABhYAPAAP4bAABgA8AA5TkBPgFKwAGxJAEewAGxL8AA5T0BAAGAwAGxOcByh5EABsAA4ReCc8ABrNLAAazSAAAQoD8AwADV38AA1d8BAwAAAAAAAwMDAAAAAGpgA8AA/hsAAAAAAIKQYAPAAP4bAAAAACCD0V0DwAD+fQFbAABcAUoAAR0AoD8DAAOAAMByh+2BAMByh/mCAMByiAYAwADV3wAAcoQ8AHKEvAByhdwAcocZAHKHYQByh8YAcog5AAAABgLAAOEagnPAAbFJwAGxacABths3wAB7kAAAAWABwADgcgABYAHAANXnAAEFwADhRwAAAAAEAAADAAAAAAAAAAAAYAPAAOEaAT8BCQAAwADgewAAAAA0BsAA4RyCc8ABsWnAAbFpAAAQoD8AwADV38AA1d8BAwAAAAAAAwMDAAAAAGpgA8AA/hsAAAAAAIKQYAPAAP4bAAAAACCD0V0DwAD+fQFbAABcAUoAAR0AoD8DAAOAAMByiNeBAMByiOOCAMByiPAAwADV3wbAAOFJgnOOKo4yjkQBAsAAcCoAAAABA45EjkQAAAAAAAAAYAPAAP4bAAbAAOFKgnOOSI5Qjl0BAqocAAAAAQOOXY5dAAAAAAAAAGADwAD+GwAGwADhS4JzjmGOcY53AQKCjwAAAAEDjneOdwAAAAAAAABgA8AA1xgABsAA4R2Cc458joiOuAAAlpsAAAABA46UjrgAAAEAAIJ6YAPAAP9oAVsAAAAAXQPAAP59AV8DAAABSo6aAR+OnsAA0CsBAV8DAAABLgAGwADhHoJzjr2Oy48rAACWkgAAAAEDjtWPKwAAAAEBAY7kAAAgg9tdA8AA/n0BYAPAAP4bAABdA8AA/n0BYAPAAP4bAUqO9AEejvjAANADAgFgA8AA/hsCLoCPJcByigoABsAA4R+Cc48wjziPYAAAlo0AAAABA48/j2AAAAEAAJdOYAPAAP9oAVsAAAAAXQPAAP6/AV8DAAABSo9FAR6PSsAA/soBAmADwAD+G18DAAABLgAGwADhUoJzj2SPbY/WAgCDHgAAAAEDj3KP1gAAAAEBAY93AAAggJZgA8AA/hsAAFwBPgJJj4Qcj5QWj40uYcAA/u9IAQABkwDAAP8/PTCPmh+PpMAA/XECAAKTLgA/PRyPxy6AvwIAApOAj83Acoq+AMAA/s8GwADhU4Jzj9uP5JBaAgCB6gAAAAEDj+iQWgAAAAEBAY/tAAAggJZgA8AA/hsAAFwBPgJJj/ockAoWkAMuYcAA/u9IAQABkwDAAP8/PTCQEB+QGsAA/XECAAKTLgA/PRyQPS6AvwIAAhyQShaQQy5hwAD+74GNAQABlADAAP9CgJBRwHKLMwDAAP7PBsAA4SCCc5BfkGORHAAAoEQAAAABA5BtkRwAAAACAQKQcwAAAJdUYQMBYAPAAP4bYAPAAPxVAJCLAAAAamADwAD+GwFqkJNgA8AA/hsJAGADwAD+GwE+A0mQnRyQp4GQocByi9VjAQABkwDAAP9JPYmQrMByi9WTP0WQuwGQxJDGAABiYAPAAP4bAYGQyMByi9UBHJDRgpDPwHKMG2MBAAEWkNMuYcAA/u8AwAD/SQGKkNvAcowbHJDcgpDbwHKMG2QBAAGUAMAA/0E+AUmQ6ByQ8ICQ7MByi74gAQABHJD1LksBAAGCkPbAcowbAMAA/s4AAEqQ+wGCkQLAcowbP0qRDwEckRaUgcYAAAAAwAD+PgbAAOEhgnORIZElkgQAAKBFAAAAAQORM5IEAAAAAgECkTkAAACXVGEDAWADwAD+G2ADwAD8VQCRUQAAAGpgA8AA/hsBagBgA8AA/yV5AGADwAD+GwE+A0mRXyIckWmBkWPAcoznSAEAASsAwAD/PwEckXqBkXTAcozngW0BAAEWkYIuYcAA/u8AwAD/TD2JkYrAcoznHJGeFpGXLmHAAP7vgY0BAAGUAMAA/0I/RZGnAZGwkbIAAGJgA8AA/hsBgZG0wHKM5wEckb2CkbvAco1hgW0BAAGTAMAA/0wBipHDwHKNYRyRxIKRw8ByjWGBjQEAAZQAwAD/Qj4BSZHQHJHYgJHUwHKM0CABAAEckd0uSwEAAYKR3sByjWEAwAD+zgAASpHjAYKR6sByjWE/SpH3ARyR/pSBxgAAAADAAP4+BsAA4SKCc5IJkhyS7wMAZAAAAAEDkh2S7wAAAAEBAZIoAAAgg9tdA8AA/r8BYAPAAP4bAABdA8AA/r8BYAPAAP4bAT4CTpI5kkUAAINeYAPAAP4bARySUxaSTC5hwAD+72QBAAEWkluAklXAco4PYcAA/u8AwAD/QUqSZwE1knMAAAEAXQPAAP6/AWADwAD+GwExknNgA8AA/hsANQAAAAEAWwEXkn6CknzAco5uYYGSh8ByjjbAAP7tNQAAAAEAWwEckpuCkpnAco5ug2QDAAOTFpKsLmHAAP7vLgDAAP7kNQAAAAEAWwEcksKCksDAco5ug2QDAAMWktAuYcAA/u+BktjAco42gJLlwHKODwDAAP7kggDAco5uBsAA4SOCc5L0kvmTmAAAgxwAAAABA5MBk5gAAAABAQGTCQAAAJZ7YAPAAP9oAABgA8AA/FUBPgNOkxyTIAAAl8FgA8AA/hsBFpMnLmHAAP7vRZMzAZM8kz4AAGJgA8AA/hsBkwEck0WCk0PAco9fYwEAAYGTR8Byj0MAwAD/SQGKk07Aco9fHJNMgpNOwHKPX2QBAAGUAMAA/0E+AUmTWRyTZRyTYS5LAQABgpNiwHKPXwDAAP7OSAEAAYCTaMByjyoAwAD/P0qTcQEpP0qTiAEqBsAA4SSCc5Odk6KUiwAAoDMAAAABA5OplIsAAAABAAGTsgAAAKA0YAPAANJ+AWoAYAPAAP8leQBcAT4DPSMck8iAk8HAco/8SAEAASsAwAD/dYiTwcByj/wek9DAANKAAAAAACsBYAPAANJ+TpPik+QAAGJgA8AA/hsBFpPrLmHAAP7vQ5P3HJQAgZP+wHKQSYCXAQABlADAAP9LPgVOlBGUFQAAoDVgA8AA/hsBHJQegJQXwHKP/KA2AQABgZQmwHKQSQDAANKDPYmUMMBykEkclDKBlDDAcpBJgY0BAAGUAMAA/0JOlEKURgAAoDdgA8AA/hsBHJRMLksBAAGBlE3AcpBJAMAA/s49HJRbLoC/AgACgZRcwHKQSRyUZS5LAQABgpRmwHKQewDAAP7OAMAA/s89HJR2LoC/AgACgpR3wHKQe4OUfsBykMMAwAD+zwbAAOElgnOUkJSelNsAAIGlAAAAAQOUo5TbAAAAAQEBlKkAAACBpmEDAWADwAD+G2ADwAD8VQAAXQPAAP59AWADwAD+GwFKlLwBH5TAwADPTQIBYAPAAP4bAi6AlNnAcpFNAAbAAOEmgnOU4JTulSEAAJaZAAAAAQOU8pUhAAAAAQEBlPcAAACDqGADwAD+GwAAXQPAAP59AWADwAD+GwFKlP0BH5UBwADPCAMBYAPAAP4bAy6TgJUfwHKRsAAGwADhJ4JzlSaVNJWFAACWmgAAAAEDlT2VhQAAAAEBAZVDAAAAl1RhAwFgA8AA/htgA8AA/FUAAF0DwAD+fQFgA8AA/hsBSpVfAR+VY8AAz5MCAWADwAD+GwIugJWAwHKSCwAGwADhKIJzlYqVmJXOAACWhAAAAAEDlZyVzgAAAAEBAZWhAAAAg6hgA8AA/hsAAF0DwAD+fQFgA8AA/hsBSpWnAR+Vq8AAzwgDAWADwAD+GwMugJXGwHKSbisABsAA4SmCc5XTleGWMgAAlpgAAAABA5XqljIAAAABAQGV8AAAAJdUYQMBYAPAAP4bYAPAAPxVAABdA8AA/n0BYAPAAP4bAUqWDAEflhDAAM/LAgFgA8AA/hsCLoCWLcBykskABsAA4UyCc5Y3lkmWeAEAmOAAAAABA5ZSlngAAAAAAAAAXQPAAP59AWADwAD+GwFKllUBH5ZZwADQuQEBYAPAAP4bAS4ABsAA4SqCc5Z9louWsAAAnMIAAAABA5aQlrAAAAAAAAAAXQPAAP7xAmADwAD+G2ADwAD+GwFKlpYBH5aawADQrwEBYAPAAP4bAS4ABsAA4SuCc5a1lsOXVgAAoDkAAAABA5bLl1YAAAACAQKW0AAAAGpgA8AA/hsAltwAAACCkGADwAD+GwFqAGADwAD/JXkAXQPAAP59AWADwAD+GwE+Aj0elvPAAP1cAwADgJcDwHKTvIGXCsByk8kWlxQuYcAA/u8ASpchAR+XLMAAzwgDAWADwAD+GwMugJdHwHKTvIGXTsByk8kABsAA4U2Cc5dbl22XmgEAXAAAAAEDl3aXmgAAAAAAAABdA8AA/rgBYAPAAP4bAUqXeQEfl33AAOBxAQFgA8AA/hsBLgAGwADhLIJzl5+XqZgEAACArQAAAAEDl6+YBAAAAAEAAAGXtgAAAIV2YAPAAPxVAWqXwGADwAD8VXddA8AA/r8BYAPAAP4bAT4BSpfNAR6X2MAA/sUCAWADwAD+GwEuAYV2gJf3wHKUnQbAAOEtgnOYCZgSmEIAAJVxAAAAAQOYF5hCAAAAAAAAAF0DwAD/swFgA8AA/hsBPgFKmCABHpgrwADDIwEBYAPAAP4bAS4ABsAA4S6Cc5hHmEyYxAAAg/0AAAABA5hTmMQAAAABAQGYWQAAAIGmYQMBYAPAAP4bXAAAXAE+Ak6Yc5h3AACXwWADwAD+GwEWmH4uYcAA/u9FmIoBmJOYlQAAYmADwAD+GwGTARyYnIKYmsBylX9jAQABgZiewHKVYwDAAP9JAYqYo8BylX8cmKSCmKPAcpV/ZAEAAZQAwAD/QT4BPRyYsYCYsMBylUsgAQABHJi2LksBAAGCmLfAcpV/AMAA/s4AAAbAAOEvgnOYyZjNmc4AAJaVAAAAAQOY05nOAAAAAQEBmNgAACCHOWEDAmADwAD+G2ADwAD+G2ADwAD+GwAAYAPAAP4bAT4FTpkDmQcAAJfBYAPAAP4bARaZDi5hwAD+70mZGhyZIoGZHsByljRIAQABkwDAAP8/PTCZKB6ZQ8AA0DgAAAAAP06ZWJleAACAlmADwAD+GwEcmWQuSwEAAZMAwAD+zkWZbQGZdpl4AABiYAPAAP4bAZQBHJl/g5l9wHKWlWMBAAGBmYHAcpY0AMAA/0kBi5mIwHKWlRyZhoOZiMBylpVkAQABlADAAP9BPgE9ipmTwHKWdByZooCZm8BylgwgAgACgpmjwHKWdByZri5LAQABg5mvwHKWlQDAAP7OAABKmb4BgpnFwHKWdAbAAOEwgnOZ05nVmqwAAINfAAAAAQOZ3JqsAAABAACCemADwAD/aAFbAgICmd8AAACWkV8DAAAAme8AAACHOWEDAl8DAABgA8AA/htfAwAAAABfAwAAAT4DTpofmiMAAJfBYAPAAP4bARaaKi5hwAD+70WaNgGaP5pBAABiYAPAAP4bAZMBHJpIg5pGwHKXkWMBAAGCmkrAcpd1AMAA/0kBi5pRwHKXkRyaT4OaUcByl5FkAQABlADAAP9BPgE9iJpcwHKXRxyacoGaa8Byl1MgAgACgJpzwHKXRxyahS5LAQABg5qGwHKXkQDAAP7OAABKmpUBgJqcwHKXRwbAAOExgnOasZq9mvwAAICrAAAAAQOaw5r8AAABAACCemADwAD/aAFbAQEBmsYAAACBpmEDAWADwAD+G18DAAAAAF0DwAD+fQFfAwAAAUqa2QEemt3AAM8cAgJgA8AA/htfAwAAAi6AmvrAcphDAAbAAOEygnObAZsNm18AAISVAAAAAQObFptfAAABAACCemADwAD/aAFbAQEBmyMAAACBpmEDAWADwAD+G10DwAD+fQFfAwAAAABdA8AA/n0BXwMAAAFKmzwBH5tAwADPYQICYAPAAP4bXwMAAAIugJtdwHKYsgAGwADhM4Jzm2SbaZwDAACWiwAAAAEDm26cAwAAAAEBAZt0AAAAgaZhAwFgA8AA/htgA8AA/FUAAGADwAD8VQE+A06bjpuSAACXwWADwAD+GwEWm5kuYcAA/u9Fm6UBm66bsAAAYmADwAD+GwGTARybt4KbtcBymVpjAQABgZu5wHKZPgDAAP9JAYqbwMBymVocm76Cm8DAcplaZAEAAZQAwAD/QT4BSZvLIRyb0YCb0MBymRwgAQABHJvWLksBAAGCm9fAcplaAMAA/s4AAEqb3AEqP0qb9AEpBsAA4TSCc5wInA2cpAAAgdYAAAABA5wQnKQAAAABAQGcFgAAAIGmYQMBYAPAAP4bYAPAAPxVAABgA8AA/FUBPgNOnDCcNAAAl8FgA8AA/hsBFpw7LmHAAP7vRZxHAZxQnFIAAGJgA8AA/hsBkwEcnFmCnFfAcpozYwEAAYGcW8BymhcAwAD/SQGKnGLAcpozHJxggpxiwHKaM2QBAAGUAMAA/0E+AUmcbRyccoCcccBymfUgAQABHJx3LksBAAGCnHjAcpozAMAA/s4AAEqcfQEpP0qclAEqBsAA4TWCc5ypnK2dxAAAlo8AAAABA5y3ncQAAAACAQGcvQAAAJdUYQMBYAPAAP4bYAPAAPxVAAGc1QAAIJaQYQMAYAPAAP4bAWoAYAPAAP8leWADwAD+GwE+BE6c6pzuAACXwWADwAD+GwEWnPUuYcAA/u9FnQEBnQqdDAAAYmADwAD+GwGTARydE4OdEcBymyVjAQABgp0VwHKbCQDAAP9JAYudHMBymyUcnRqDnRzAcpslZAEAAZQAwAD/QT4CTp0rnTMAAJZ7YAPAAP4bARydOS5LAQABg506wHKbJQDAAP7OSZ1EHJ1MgJ1IwHKazSABAAGEnU3AcptuAABKnVcBhJ1ewHKbbj9JnXEhHJ18gZ11wHKa5UgBAAErAMAA/3VKnYUBHJ2SgZ2MwHKa5SAAAAAAAD89MJ2aHp21wADQOAAAAAAGwADhNoJzncmdzZ76AACWlAAAAAEDndae+gAAAAIBAZ3cAAAAl1RhAwFgA8AA/htgA8AA/FUAAZ30AAAglpBhAwBgA8AA/hsBagBgA8AA/yV5YAPAAP4bAT4ETp4Jng0AAJfBYAPAAP4bARaeFC5hwAD+70WeIAGeKZ4rAABiYAPAAP4bARyeMYKeLcBynE+BjQEAAZQAwAD/QgEcnjiDnjbAcpxrgW0BAAGTAMAA/0wBi55AwHKcaxyePoOeQMBynGuBjQEAAZQAwAD/Qj4CTp5PnlcAAJZ7YAPAAP4bARyeXS5LAQABg55ewHKcawDAAP7OSZ5oHJ5wgJ5swHKcEyABAAGEnnHAcpzEAAA+AUqehQGEnozAcpzEP0mepyEcnrKBnqvAcpwrSAEAASsAwAD/dUqeuwEcnsiBnsLAcpwrIAAAAAAAPz0wntAenuvAANA4AAAAAAbAAOE3gnOe/58DoQEAAJaXAAAAAQOfDqEBAAAAAgEBnxQAAACXVGEDAWADwAD+G2ADwAD8VQABnywAACCWkGEDAGADwAD+GwFqAGADwAD/JXlgA8AA/hsBPgdOn0GfSAAAgXZbAStOn1mfZwAAwABzJWADwAD8VQEqTp94n3wAAJfBYAPAAP4bARafgy5hwAD+70WfjwGfmJ+aAABiYAPAAP4bAZMBHJ+hhZ+fwHKd4mMBAAGEn6PAcp3GAMAA/0kBjZ+qwHKd4hyfqIWfqsByneJkAQABlADAAP9BPgJOn7mfwQAAlntgA8AA/hsBHJ/HLksBAAGFn8jAcp3iAMAA/s5Jn9Icn9qAn9bAcp1rIAEAAYaf28BynisAAD4DSZ/vg5/zwHKdsz4BPTCgDh6gKcAA0DkAAAAAPz2KoEbAcp2nhqBPwHKeKz2LoGDAcp2zKT9JoIiDoIzAcp2zSqCbASagmwGCoKLAcp2nYAPAAP4bP0mgriEcoLmBoLLAcp2DSAEAASsAwAD/dUqgwgEcoM+BoMnAcp2DIAAAAAAAPz0woNceoPLAANA4AAAAAAbAAOE4gnOhBqEKoTsAAJaOAAAAAQOhE6E7AAAAAQEBoRgAAAAnYAPAAP4bAABgA8AA/hsBPgFKoSUBHKEwLksBAAGAoTHAcp8bAMAA/s4GwADhOYJzoUChRaGdAABWAAAAAQOhSKGdAAAAAQEBoU0AACCAlmADwAD+GwAAXAE+AT0woVofoWTAAP2tAQABJ8AAd8QABsAA4TqCc6GioaeiDAAAgKUAAAABA6GtogwAAAABAQGhvAAAIICWXQPAAP59AWADwAD+GwAAXAE+AT0wockfodPAAP2tAQABJ8AAd8QABsAA4TuCc6IRohaigQAAnzoAAAABA6IcooEAAAACAgKiIQAAACdgA8AA/hsAoiwAACCAlmADwAD+GwAAXAE+AT0wojkfokPAAP2tAQABJ8AAemcABsAA4TyCc6KGooujBAAAoEcAAAABA6KUowQAAAACAgKimQAAACdgA8AA/hsAoq4AACApXQPAAP59AWADwAD+GwAAXAE+AT0worwfosbAAP2tAQABJ8AAemcABsAA4T2Cc6MJow6jaAAAgK4AAAABA6MSo2gAAAABAAGjGAAAAJt3YQMCYAPAAP4bYAPAAP4bYAPAAP4bAWoAYAPAAP8leQBcAT4BPR6jO8AA0M4CAWADwAD+GwIuNQAAAAEAYQMCYAPAAP4bYAPAAP4bYAPAAP4bAYCjRsByoKwjHKNOgQDAcqDqSAEAASsAAGqjXGEDAl0DwAD8YQFbXQPAAPxhAVtgA8AA/hvAAYfagQDAcqDqAWEDAmADwAD+G2ADwAD+G2ADwAD+GwAGwADhPoJzo22jcaRsAACAuwAAAAEDo3ikbAAAAAIBAqN9AAAglntgA8AA/hsAo4sAAABqYAPAAP4bAWqjk2ADwAD+GwkAYAPAAP4bAT4DSaOdHKOngaOhwHKhiIFtAQABFqOvLmHAAP7vAMAA/0w+AUqjvwEco8aUgcYAAAAAwAD+Pkmj1Ryj34Gj2cByoYhjAQABkwDAAP9JPgE9iaPswHKhiJM/RaQBAaQKpAwAAGJgA8AA/hsBgaQOwHKhiAEcpBeCpBXAcqIEYwEAARakHi5hwAD+7wDAAP9JAYqkJsByogQcpCeCpCbAcqIEZAEAAZQAwAD/QT4BSaQzHKQ/HKQ7LksBAAGCpDzAcqIEAMAA/s5IAQABgKRCwHKhegDAAP8/SqRLAYKkUsByogQ/SqRfARykZpSBxgAAAADAAP4+BsAA4T+Cc6RxpHWljQAAlrUAAAABA6SApY0AAAACAQKkhQAAIJZ7YAPAAP4bAKSTAAAAamADwAD+GwFqpJtgA8AA/yV5AGADwAD+GwE+A0mkqCIcpLKBpKzAcqLKSAEAASsAwAD/PwEcpMOBpL3AcqLKgW0BAAEWpMsuYcAA/u8AwAD/TD4BPYmk28ByosocpO8WpOguYcAA/u+BjQEAAZQAwAD/Qkmk/xylCYGlA8ByospjAQABkwDAAP9JPgFKpRYBHKUdlIHGAAAAAMAA/j4/RaUrAaU0pTYAAGJgA8AA/hsBgaU4wHKiygEcpUGCpT/AcqNygW0BAAGTAMAA/0wBiqVHwHKjchylSIKlR8Byo3KBjQEAAZQAwAD/Qj4BSaVUHKVgHKVcLksBAAGCpV3AcqNyAMAA/s5IAQABgKVjwHKivADAAP8/SqVsAYKlc8Byo3I/SqWAARylh5SBxgAAAADAAP4+BsAA4UCCc6WSpZal8QAAhi4AAAABA6WgpfEAAAAAAAAAYAPAAP4bAT4BPTClqR+ls8AA/a0BAAEnwAB3xQAGwADhQYJzpfal+qZcAACgRgAAAAEDpgKmXAAAAAEBAaYHAAAAJ2ADwAD+GwAAYAPAAP4bAT4BPTCmFB+mHsAA/a0BAAEnwAB3xQAGwADhQoJzpmGmZqbYAACXUwAAAAEDpnGm2AAAAAEBAaZ3AAAAl1RhAwFgA8AA/htgA8AA/FUAAFwBPgE9MKaQH6aawAD9rQEAASfAAHfFAAbAAOFDgnOm3abip1QAAJdWAAAAAQOm7adUAAAAAQEBpvMAAACXVGEDAWADwAD+G2ADwAD8VQAAXAE+AT0wpwwfpxbAAP2tAQABJ8AAd8UABsAA4U6Cc6dZp2GnuwEAgx4AAAABA6dnp7sAAAAAAAAAYAPAAP4bAT4CSadtHKd4FqdxLmHAAP7vgJcBAAGTAMAA/0tKp30BHKeILksBAAGTAMAA/s4/PTCnkR6nrMAA0DgAAAAABsAA4U+Cc6fAp8ioKgEAgeoAAAABA6fNqCoAAAAAAAAAYAPAAP4bAT4CSafTHKfeFqfXLmHAAP7vgJcBAAGTAMAA/0tKp+MBHKfuLksBAAEcp/YWp+8uYcAA/u+BjQEAAZQAwAD/QgDAAP7OPz0wqAAeqBvAANA4AAAAAAbAAOFQgnOoL6g3qM4BAIDDAAAAAQOoPqjOAAAAAAAAAGADwAD+GwE+A0moRByoTxaoSC5hwAD+70gBAAGUAMAA/z9KqFUBHKhgLksBAAGTAMAA/s4/SahpHKh0FqhtLmHAAP7vSAEAAZMAwAD/Pz0wqHoeqJXAANA4AAAAAD89MKimHqjBwADQOQAAAAAGwADhRIJzqNOo2KlTAACgSQAAAAEDqN6pUwAAAAICAqjjAAAAJ2ADwAD+GwCo+AAAIIPRXQPAAP59AWADwAD+GwAAXAE+Ak6pDqkSAAGCkGADwAD+GwEcqSQWqR2BqRTAcqbKYcAA/qBkAQABgKkmwHKmvQDAAP9BPRypMS6DZAMAA4CpOsBypr2CqUHAcqblgalGwHKmygDAAP7kBsAA4UWCc6lYqV2qEgAAnAcAAAABA6lmqhIAAAADAgOpawAAAGpgA8AA/hsAqXYAAACCkGADwAD+GwCpgAAAIMAARHRgA8AA/hsBagBgA8AA/yV5AFwBPgI9HqmdwAD9XAMAA4CprcByp1qBqbTAcqdnFqm+LmHAAP7vAEWpywGp1KnWAABiYAPAAP4bAYCp2MByp1oBHKnhg6nfwHKnumMBAAGBqePAcqdnAMAA/0kBi6nqwHKnuhyp6IOp6sByp7pkAQABlADAAP9BPgE9HKn5LoC/AgACg6n6wHKnuoKp/8Byp3UAwAD+zwAAcoiwAHKJIwByiU0Acol1AHKJnQByieoAcopLAHKKngByixMAcoueAHKMsAByjfAAco8KAHKP3ABykS0AcpGQAHKR6wBykk4AcpKpAHKTDAByk1EAcpOcAHKUOABylHwAcpTkAHKVKwBylewAcpcbAHKYFwBymIYAcpj8AHKZ1QBymq0AcpvzAHKdSwBynvsAcp9KAHKfkAByn94AcqAyAHKgjAByoVoAcqKcAHKkBABypEIAcqSNAHKk3QBypS0AcqWTAHKmDwBypp0Acqc6AHKoJQAAADQCwADhVIJzwAGxScABsWnAAbYbN8AAe5EAAAFgAcAA4RoAAV0BwADWHgFgA8AA5UMAAQXAAOFcAAAAAAQAAAMAAAAAAAAAAABgA8AA4VQBPwEJAADAAOFHAAAAAAQGwADhVoJzwAGxacABsWkAABCgPwDAANXfwADV3wEDAAAAAAADAwMAAAAAamADwAD+GwAAAAAAgpBgA8AA/hsAAAAAIIPRXQPAAP59AVsAAFwBSgABHQCgPwMAA4AAwHKpgoEAwHKpjoIAwHKpmwDAANXfBsAA4ViCc6p9qomqoAACwAB6asAA1bwAAAABA6qUqqAAAAABAQGqmQAAAGFgA8AA/hsAAGADwADlQwAGwADhWYJzqqWqqrNvAACDZAAAAAEDqrKzbwAAAAQDBKq3AAAAamADwAD+GwCqwgAAAIKQYAPAAP4bAKrVAAAgloNdA8AA/n0BYAPAAP4bAKrgAAAAoDxgA8AA/hsBaqrsYAPAAP4bCQBcAT4LSasLIiIcqxGTgJcBAAGAqxPAcqopAMAA/0sBHKsigKscwHKqKYCXAQABgaskwHKqNgDAAP9LARyrL4GrK8ByqjaAlwEAARarMS5hwAD+7wDAAP9LPgI9HqtMwAD9XAMAA4CrXMByqimBq2PAcqo2FqtoLmHAAP7vAEAqq5CrlQA/SauiHKuwg6umwHKqWWMBAAGTAMAA/0k+AT0wq70fq87AAP1lBAAEg6vUwHKqWZMrJ6A8AD9OrAesDQABgO5gA8AA/hsBHKwTgawPwHKqNoGNAQABgKwVwHKqKQDAAP9CSawgHKw+HKwxFqwqgqwlwHKqRGHAAP6ggY0BAAGDrDPAcqpZAMAA/0JjAQABhKxAwHKrLQDAAP9JPgE9MKxPHqxqwADQOgAAAAA/Sax/HKyJhKyDwHKrLUgBAAGTAMAA/z9KrI8AP0msnCWspYKsoMByqkRgA8AA1dI+Ak6tLK08AAHAAHprYAPAANXSASatQwCCrT7AcqpEYAPAANXSSa1cHK14Fq1lLsAAcCrAANXpSAEAARati4Wte8Byq9TAAHAqwADV1QDAAP8/PgFJrakiHK20hK2uwHKrLWMBAAE3CgDAAP9JACEcrdUWrc6Frb7AcqvUgo/AANXXSAEAARat3S6Cj8AA1esAwADXIz4CPR6t+MAAzS4FAAUmrgIAgq39wHKqRF0DwAD+vwFgA8AA/huDrhDAcqpZLoCuIcByqimErijAcqstAEquOgBJrlEcrmcWrmEWrlougo/AANXrt/fAANW8wADXG8AAcCnAANW8BgAGHK6ZHK6EgK5+wHKqKYONAQABFq6GLsAAcCrAANXpAMAA/0NkAQABFq6gLqocwADV6gDAAP9BHK7BhK67wHKrLYONAQABFq7DLsAAcCrAANXpAMAA/0MWrvoWrvOFruPAcqvUgo/AANXXt/fAANW8wADXGxyvLByvF4OvDcByqlmDjQEAARavGS7AAHAqwADV6QDAAP9DZAEAARavPoWvLsByq9SqHMAA1dYAwAD/QR6vYcAAzTsBAAEuAB6vgsAAzTsBAAGCr4jAcqpEAADAANXiPgFKr5wAP0mvuxyv1havz4Wvv8Byq9SCj8AA1ddIAQABFq/eLoKPwADV6wDAANcjPgVOsLSwvwABwAB6bF0DwAD+vwFgA8AA/hsBJrDGAIKwwcByqkRdA8AA/r8BYAPAAP4bTrDisO0AAcAAem1gA8AA5UMBHLDvLsAAemrAANW8AQABhLD7wHKrLQDAANYhRbELAbEUsRYAAGJgA8AA/hsBkwEcsR0UsRvAcq40CABjAQABhLEfwHKrLQDAAP9JARWxJsByrjQIHLEnFLEmwHKuNAgAZAEAAZQAwAD/QT4BPRyxQYexN8ByrgSAvwIAAhSxQsByrjQIAByxUYaxR8ByrdNLAQABHLFcg7FSwHKqWWQBAAEUsV7Acq40CAAAwAD/QQDAAP7OAMAA/s9FsXQBsX2xfwAAYmADwAD+GwGAsYHAcqopARyxihSxiMByrtIIAGMBAAGBsYzAcqo2AMAA/0kBFbGRwHKu0ggcsZIUsZHAcq7SCABkAQABlADAAP9BPgE9HLGmLoC/AgACFLGnwHKu0ggAHLG2h7GswHKuBEsBAAEcsbkUsbfAcq7SCACBjQEAAYCxu8ByqikAwAD/QgDAAP7OAMAA/s9KsdUAPz9OsfUAAACgPV0DwAD+vwFbAE6yCAAAAKA+YAPAAP4bAEmyGCWyIYKyHMByqkRdA8AA/r8BYAPAAP4bPgI9jbI3wHKvdBSyQ8ByqkQCAV0DwAD+vwFgA8AA/hs9jrJPwHKvhYOyXMByqlk+Aj2NsnrAcq90HLKbHLKLgrKGwHKqRJaEAQABg7KQwHKqWQDAAP6XgK0BAAABhXYqwAD+kz2OsrrAcq+Fk0my1Byy6xyy44ay2MByr4VkAQABhLLlwHKrLQDAAP9BgJcBAAEWsveFsu3Acq90YcAA/u8AwAD/Sz4BPTCzBx6zIsAA0DoAAAAAPz0eszzAAM0uBQAFhbNBwHKvdIazTMByr4UugLNewHKqKYSzZcByqy0ABsAA4VqCc7N0s4C0bQAAgVgAAAABA7OHtG0AAAACAQKzjAAAAGpgA8AA/hsAs5gAAACCkGADwAD+GwFqAGADwAD/JXkAYAPAAOVDAT4FPYmzpMBysLses7XAAP1cAwADgLPFwHKwroGzzMBysLsWs9YuYcAA/u8ATrPns+4AAGFgA8AA/hsBHLP0gbPwwHKwu4GNAQABgLP2wHKwrgDAAP9CTrQNtBQAAIF2YAPAAOVDARy0Fi7AAHpqwADVvAEAAYK0IsBysQcAwADWIT0ctDaDtC/AcrExg2QEAASTgrRCwHKxBy6AtFDAcrCuAMAA/uRKtFwBg7RjwHKxMQAAcqlbAHKpzgByqgkAcrCOAHKxiwAAAAQCwADhXYJzwAGxScABsWnAAbYbA8AAe5IBasABsUpgA8AA/BzAAYJAAAFgAcAA4VQAAWABwADlQwAABgbAAOFggnPAAbJEwAGyTMABss0EBYC1wADVvAJqwAGyC2ADwAD8HMABpK1qAGADwADNTMABpMkAAAEDwAGyZMABss0AAAADAwPAAbJwAAAAgo9gA8AA1zUAwAGyfAAAAKocYAPAAP4bAMABspUAAABhYAPAAP4bAABgA8AA4V0ABsAA4WKCc8ABsv7AAbMpwAG0AAMASwFqwAGy/2ADwAD8HMAAwPoAAAEDwAGzK8ABtAAAAAABAQHAAbMwAAAAJ2ADwAD+GwAAYAPAAP4bAT4CScABsz0iHMABs0eAwAGzQcByspdjAQABkwDAAP9JARzAAbNUgMABs07AcrKXgW0BAAEWwAGzVy5hwADgeQDAAP9MPgE9MMABs2cfwAGzccAA/XEDAAOAwAGzgsByspcuJycAP0rAAbOjARzAAbO+FsABs6ouwAB7g8AA1bzAAOB3wAB6icAA1bwBAAEcwAGz1hbAAbPILqocwADV6mQBAAEcwAGz34DAAbPZwHKyl4ONAQABasABs+tgA8AA/hsVAMAA/0MAwAD/QQDAANdABsAA4WOCc8ABtAXAAbQxwAG1JAMAgL8BasABtAZgA8AA/BzAAMD6AAABA8ABtDTAAbUkAAAAAgICwAG0OQAAACdgA8AA/hsAwAG0RAAAIICWYAPAAP4bAABcAT4CScABtFEiHMABtFuAwAG0VcBys7hjAQABkwDAAP9JARzAAbRogMABtGLAcrO4gW0BAAEWwAG0ay5hwADgeQDAAP9MPgE9MMABtHsfwAG0hcAA/XEDAAOAwAG0lsBys7guJycAPz0cwAG0whbAAbS3LsAAe4PAANW8wADgd8AAeovAANW8AgACHMABtNoWwAG0zC6qHMAA1epkAQABHMABtOOAwAG03cBys7iDjQEAAWrAAbTvYAPAAP4bFQDAAP9DAMAA/0EewAG1CcAA1csBAAGBwAG1GcBys8cAAMAA10EGwADhaIJzwAG1WsABtWLAAbWfAQDAAHAqAAAAAQPAAbV1wAG1nwAAAAAAAABgA8AA/hsBPgFKwAG1ewFqwAG1jGADwAD+GxUGwADhZYJzwAG1w8ABtdTAAbYZAADAAHpqwADVvAAAAAEDwAG138ABthkAAAABAQHAAbXkAAAAYWADwAD+GwAAYAPAAOVDAT4BSsABtfIBHsABtf3AAOVHAQABgMABtg7AcrU0AAbAAOFmgnPAAbFpwAGxaQAAEKA/AMAA1d/AANXfAQMAAAAAAAMDAwAAAABqYAPAAP4bAAAAAACCkGADwAD+GwAAAAAgg9FdA8AA/n0BWwAAXAFKAAEdAKA/AwADgADAcrWQgQDAcrWcggDAcrWpAMAA1d8AAHKx3wBysl8AcrN/AHK0vABytQQAcrVpAHK13AAAAAYCwADhaYJzwAG2HsABtj7AAbxoN8AAe5QAAAFgAcAA4HIAAWABwADV5wABBcAA4ZYAAAAABAAAAwAAAAAAAAAAAGADwADhaQE/AQkAAMAA4HsAAAAANAbAAOFrgnPAAbY+wAG2PgAAEKA/AMAA1d/AANXfAQMAAAAAAAMDAwAAAABqYAPAAP4bAAAAAACCkGADwAD+GwAAAAAgg9FdA8AA/n0BWwAAXAFKAAEdAKA/AwADgADAcrZ6gQDAcraGggDAcraTAMAA1d8GwADhmIJzjiqOMo5EAQLAAHAqAAAAAQOORI5EAAAAAAAAAGADwAD+GwAGwADhmYJzjkiOUI5dAQKqHAAAAAEDjl2OXQAAAAAAAABgA8AA/hsABsAA4ZqCc45hjnGOdwECgo8AAAABA453jncAAAAAAAAAYAPAANcYAAbAAOFsgnOOfI6IjrgAAJabAAAAAQOOlI64AAABAACCemADwAD/aAFbAAAAAF0DwAD+fQFfAwAAAUqOmgEfjp7AANArAQFfAwAAAS4ABsAA4W2Cc469jsuPKwAAlpIAAAABA47VjysAAAABAQGO5AAAIIPbXQPAAP59AWADwAD+GwAAXQPAAP59AWADwAD+GwFKjvQBHo74wADQAwIBYAPAAP4bAi6AjyXAcretAAbAAOFugnOPMI84j2AAAJaNAAAAAQOPP49gAAABAACXTmADwAD/aAFbAAAAAF0DwAD+vwFfAwAAAUqPRQEej0rAAP7KAQJgA8AA/htfAwAAAS4ABsAA4aGCc49kj22P1gIAgx4AAAABA49yj9YAAAABAQGPdwAAIICWYAPAAP4bAABcAT4CSY+EHI+UFo+NLmHAAP7vSAEAAZMAwAD/Pz0wj5ofj6TAAP1xAgACky4APz0cj8cugL8CAAKTgI/NwHK4YQDAAP7PBsAA4aKCc4/bj+SQWgIAgeoAAAABA4/okFoAAAABAQGP7QAAIICWYAPAAP4bAABcAT4CSY/6HJAKFpADLmHAAP7vSAEAAZMAwAD/Pz0wkBAfkBrAAP1xAgACky4APz0ckD0ugL8CAAIckEoWkEMuYcAA/u+BjQEAAZQAwAD/QoCQUcByuNYAwAD+zwbAAOFvgnOQX5BjkRwAAKBEAAAAAQOQbZEcAAAAAgECkHMAAACXVGEDAWADwAD+G2ADwAD8VQCQiwAAAGpgA8AA/hsBapCTYAPAAP4bCQBgA8AA/hsBPgNJkJ0ckKeBkKHAcrl4YwEAAZMAwAD/ST2JkKzAcrl4kz9FkLsBkMSQxgAAYmADwAD+GwGBkMjAcrl4ARyQ0YKQz8Byub5jAQABFpDTLmHAAP7vAMAA/0kBipDbwHK5vhyQ3IKQ28Byub5kAQABlADAAP9BPgFJkOgckPCAkOzAcrlhIAEAARyQ9S5LAQABgpD2wHK5vgDAAP7OAABKkPsBgpECwHK5vj9KkQ8BHJEWlIHGAAAAAMAA/j4GwADhcIJzkSGRJZIEAACgRQAAAAEDkTOSBAAAAAIBApE5AAAAl1RhAwFgA8AA/htgA8AA/FUAkVEAAABqYAPAAP4bAWoAYAPAAP8leQBgA8AA/hsBPgNJkV8iHJFpgZFjwHK6ikgBAAErAMAA/z8BHJF6gZF0wHK6ioFtAQABFpGCLmHAAP7vAMAA/0w9iZGKwHK6ihyRnhaRly5hwAD+74GNAQABlADAAP9CP0WRpwGRsJGyAABiYAPAAP4bAYGRtMByuooBHJG9gpG7wHK7BIFtAQABkwDAAP9MAYqRw8ByuwQckcSCkcPAcrsEgY0BAAGUAMAA/0I+AUmR0ByR2ICR1MByunMgAQABHJHdLksBAAGCkd7AcrsEAMAA/s4AAEqR4wGCkerAcrsEP0qR9wEckf6UgcYAAAAAwAD+PgbAAOFxgnOSCZIcku8DAGQAAAABA5Idku8AAAABAQGSKAAAIIPbXQPAAP6/AWADwAD+GwAAXQPAAP6/AWADwAD+GwE+Ak6SOZJFAACDXmADwAD+GwEcklMWkkwuYcAA/u9kAQABFpJbgJJVwHK7smHAAP7vAMAA/0FKkmcBNZJzAAABAF0DwAD+vwFgA8AA/hsBMZJzYAPAAP4bADUAAAABAFsBF5J+gpJ8wHK8EWGBkofAcrvZwAD+7TUAAAABAFsBHJKbgpKZwHK8EYNkAwADkxaSrC5hwAD+7y4AwAD+5DUAAAABAFsBHJLCgpLAwHK8EYNkAwADFpLQLmHAAP7vgZLYwHK72YCS5cByu7IAwAD+5IIAwHK8EQbAAOFygnOS9JL5k5gAAIMcAAAAAQOTAZOYAAAAAQEBkwkAAACWe2ADwAD/aAAAYAPAAPxVAT4DTpMckyAAAJfBYAPAAP4bARaTJy5hwAD+70WTMwGTPJM+AABiYAPAAP4bAZMBHJNFgpNDwHK9AmMBAAGBk0fAcrzmAMAA/0kBipNOwHK9AhyTTIKTTsByvQJkAQABlADAAP9BPgFJk1kck2Uck2EuSwEAAYKTYsByvQIAwAD+zkgBAAGAk2jAcrzNAMAA/z9Kk3EBKT9Kk4gBKgbAAOFzgnOTnZOilIsAAKAzAAAAAQOTqZSLAAAAAQABk7IAAACgNGADwADSfgFqAGADwAD/JXkAXAE+Az0jHJPIgJPBwHK9n0gBAAErAMAA/3WIk8HAcr2fHpPQwADSgAAAAAArAWADwADSfk6T4pPkAABiYAPAAP4bARaT6y5hwAD+70OT9xyUAIGT/sByveyAlwEAAZQAwAD/Sz4FTpQRlBUAAKA1YAPAAP4bARyUHoCUF8ByvZ+gNgEAAYGUJsByvewAwADSgz2JlDDAcr3sHJQygZQwwHK97IGNAQABlADAAP9CTpRClEYAAKA3YAPAAP4bARyUTC5LAQABgZRNwHK97ADAAP7OPRyUWy6AvwIAAoGUXMByvewclGUuSwEAAYKUZsByvh4AwAD+zgDAAP7PPRyUdi6AvwIAAoKUd8Byvh6DlH7Acr5mAMAA/s8GwADhdIJzlJCUnpTbAACBpQAAAAEDlKOU2wAAAAEBAZSpAAAAgaZhAwFgA8AA/htgA8AA/FUAAF0DwAD+fQFgA8AA/hsBSpS8AR+UwMAAz00CAWADwAD+GwIugJTZwHK+8AAGwADhdYJzlOCU7pUhAACWmQAAAAEDlPKVIQAAAAEBAZT3AAAAg6hgA8AA/hsAAF0DwAD+fQFgA8AA/hsBSpT9AR+VAcAAzwgDAWADwAD+GwMuk4CVH8Byv1MABsAA4XaCc5UmlTSVhQAAlpoAAAABA5U9lYUAAAABAQGVQwAAAJdUYQMBYAPAAP4bYAPAAPxVAABdA8AA/n0BYAPAAP4bAUqVXwEflWPAAM+TAgFgA8AA/hsCLoCVgMByv64ABsAA4XeCc5WKlZiVzgAAloQAAAABA5Wclc4AAAABAQGVoQAAAIOoYAPAAP4bAABdA8AA/n0BYAPAAP4bAUqVpwEflavAAM8IAwFgA8AA/hsDLoCVxsBywBErAAbAAOF4gnOV05XhljIAAJaYAAAAAQOV6pYyAAAAAQEBlfAAAACXVGEDAWADwAD+G2ADwAD8VQAAXQPAAP59AWADwAD+GwFKlgwBH5YQwADPywIBYAPAAP4bAi6Ali3AcsBsAAbAAOGbgnOWN5ZJlngBAJjgAAAAAQOWUpZ4AAAAAAAAAF0DwAD+fQFgA8AA/hsBSpZVAR+WWcAA0LkBAWADwAD+GwEuAAbAAOF5gnOWfZaLlrAAAJzCAAAAAQOWkJawAAAAAAAAAF0DwAD+8QJgA8AA/htgA8AA/hsBSpaWAR+WmsAA0K8BAWADwAD+GwEuAAbAAOF6gnOWtZbDl1YAAKA5AAAAAQOWy5dWAAAAAgECltAAAABqYAPAAP4bAJbcAAAAgpBgA8AA/hsBagBgA8AA/yV5AF0DwAD+fQFgA8AA/hsBPgI9HpbzwAD9XAMAA4CXA8BywV+BlwrAcsFsFpcULmHAAP7vAEqXIQEflyzAAM8IAwFgA8AA/hsDLoCXR8BywV+Bl07AcsFsAAbAAOGcgnOXW5dtl5oBAFwAAAABA5d2l5oAAAAAAAAAXQPAAP64AWADwAD+GwFKl3kBH5d9wADgcQEBYAPAAP4bAS4ABsAA4XuCc5efl6mYBAAAgK0AAAABA5evmAQAAAABAAABl7YAAACFdmADwAD8VQFql8BgA8AA/FV3XQPAAP6/AWADwAD+GwE+AUqXzQEel9jAAP7FAgFgA8AA/hsBLgGFdoCX98BywkAGwADhfIJzmAmYEphCAACVcQAAAAEDmBeYQgAAAAAAAABdA8AA/7MBYAPAAP4bAT4BSpggAR6YK8AAwyMBAWADwAD+GwEuAAbAAOF9gnOYR5hMmMQAAIP9AAAAAQOYU5jEAAAAAQEBmFkAAACBpmEDAWADwAD+G1wAAFwBPgJOmHOYdwAAl8FgA8AA/hsBFph+LmHAAP7vRZiKAZiTmJUAAGJgA8AA/hsBkwEcmJyCmJrAcsMiYwEAAYGYnsBywwYAwAD/SQGKmKPAcsMiHJikgpijwHLDImQBAAGUAMAA/0E+AT0cmLGAmLDAcsLuIAEAARyYti5LAQABgpi3wHLDIgDAAP7OAAAGwADhfoJzmMmYzZnOAACWlQAAAAEDmNOZzgAAAAEBAZjYAAAghzlhAwJgA8AA/htgA8AA/htgA8AA/hsAAGADwAD+GwE+BU6ZA5kHAACXwWADwAD+GwEWmQ4uYcAA/u9JmRocmSKBmR7AcsPXSAEAAZMAwAD/Pz0wmSgemUPAANA4AAAAAD9OmViZXgAAgJZgA8AA/hsBHJlkLksBAAGTAMAA/s5FmW0BmXaZeAAAYmADwAD+GwGUARyZf4OZfcByxDhjAQABgZmBwHLD1wDAAP9JAYuZiMByxDgcmYaDmYjAcsQ4ZAEAAZQAwAD/QT4BPYqZk8ByxBccmaKAmZvAcsOvIAIAAoKZo8ByxBccma4uSwEAAYOZr8ByxDgAwAD+zgAASpm+AYKZxcByxBcGwADhf4JzmdOZ1ZqsAACDXwAAAAEDmdyarAAAAQAAgnpgA8AA/2gBWwICApnfAAAAlpFfAwAAAJnvAAAAhzlhAwJfAwAAYAPAAP4bXwMAAAAAXwMAAAE+A06aH5ojAACXwWADwAD+GwEWmiouYcAA/u9FmjYBmj+aQQAAYmADwAD+GwGTARyaSIOaRsByxTRjAQABgppKwHLFGADAAP9JAYuaUcByxTQcmk+DmlHAcsU0ZAEAAZQAwAD/QT4BPYiaXMByxOocmnKBmmvAcsT2IAIAAoCac8ByxOocmoUuSwEAAYOahsByxTQAwAD+zgAASpqVAYCanMByxOoGwADhgIJzmrGavZr8AACAqwAAAAEDmsOa/AAAAQAAgnpgA8AA/2gBWwEBAZrGAAAAgaZhAwFgA8AA/htfAwAAAABdA8AA/n0BXwMAAAFKmtkBHprdwADPHAICYAPAAP4bXwMAAAIugJr6wHLF5gAGwADhgYJzmwGbDZtfAACElQAAAAEDmxabXwAAAQAAgnpgA8AA/2gBWwEBAZsjAAAAgaZhAwFgA8AA/htdA8AA/n0BXwMAAAAAXQPAAP59AV8DAAABSps8AR+bQMAAz2ECAmADwAD+G18DAAACLoCbXcByxlUABsAA4YKCc5tkm2mcAwAAlosAAAABA5tunAMAAAABAQGbdAAAAIGmYQMBYAPAAP4bYAPAAPxVAABgA8AA/FUBPgNOm46bkgAAl8FgA8AA/hsBFpuZLmHAAP7vRZulAZuum7AAAGJgA8AA/hsBkwEcm7eCm7XAcsb9YwEAAYGbucByxuEAwAD/SQGKm8DAcsb9HJu+gpvAwHLG/WQBAAGUAMAA/0E+AUmbyyEcm9GAm9DAcsa/IAEAARyb1i5LAQABgpvXwHLG/QDAAP7OAABKm9wBKj9Km/QBKQbAAOGDgnOcCJwNnKQAAIHWAAAAAQOcEJykAAAAAQEBnBYAAACBpmEDAWADwAD+G2ADwAD8VQAAYAPAAPxVAT4DTpwwnDQAAJfBYAPAAP4bARacOy5hwAD+70WcRwGcUJxSAABiYAPAAP4bAZMBHJxZgpxXwHLH1mMBAAGBnFvAcse6AMAA/0kBipxiwHLH1hycYIKcYsByx9ZkAQABlADAAP9BPgFJnG0cnHKAnHHAcseYIAEAARycdy5LAQABgpx4wHLH1gDAAP7OAABKnH0BKT9KnJQBKgbAAOGEgnOcqZytncQAAJaPAAAAAQOct53EAAAAAgEBnL0AAACXVGEDAWADwAD+G2ADwAD8VQABnNUAACCWkGEDAGADwAD+GwFqAGADwAD/JXlgA8AA/hsBPgROnOqc7gAAl8FgA8AA/hsBFpz1LmHAAP7vRZ0BAZ0KnQwAAGJgA8AA/hsBkwEcnRODnRHAcsjIYwEAAYKdFcByyKwAwAD/SQGLnRzAcsjIHJ0ag50cwHLIyGQBAAGUAMAA/0E+Ak6dK50zAACWe2ADwAD+GwEcnTkuSwEAAYOdOsByyMgAwAD+zkmdRBydTICdSMByyHAgAQABhJ1NwHLJEQAASp1XAYSdXsByyRE/SZ1xIRydfIGddcByyIhIAQABKwDAAP91Sp2FARydkoGdjMByyIggAAAAAAA/PTCdmh6dtcAA0DgAAAAABsAA4YWCc53Jnc2e+gAAlpQAAAABA53WnvoAAAACAQGd3AAAAJdUYQMBYAPAAP4bYAPAAPxVAAGd9AAAIJaQYQMAYAPAAP4bAWoAYAPAAP8leWADwAD+GwE+BE6eCZ4NAACXwWADwAD+GwEWnhQuYcAA/u9FniABnimeKwAAYmADwAD+GwEcnjGCni3AcsnygY0BAAGUAMAA/0IBHJ44g542wHLKDoFtAQABkwDAAP9MAYueQMByyg4cnj6DnkDAcsoOgY0BAAGUAMAA/0I+Ak6eT55XAACWe2ADwAD+GwEcnl0uSwEAAYOeXsByyg4AwAD+zkmeaByecICebMByybYgAQABhJ5xwHLKZwAAPgFKnoUBhJ6MwHLKZz9JnqchHJ6ygZ6rwHLJzkgBAAErAMAA/3VKnrsBHJ7IgZ7CwHLJziAAAAAAAD89MJ7QHp7rwADQOAAAAAAGwADhhoJznv+fA6EBAACWlwAAAAEDnw6hAQAAAAIBAZ8UAAAAl1RhAwFgA8AA/htgA8AA/FUAAZ8sAAAglpBhAwBgA8AA/hsBagBgA8AA/yV5YAPAAP4bAT4HTp9Bn0gAAIF2WwErTp9Zn2cAAMAAcyVgA8AA/FUBKk6feJ98AACXwWADwAD+GwEWn4MuYcAA/u9Fn48Bn5ifmgAAYmADwAD+GwGTARyfoYWfn8Byy4VjAQABhJ+jwHLLaQDAAP9JAY2fqsByy4Ucn6iFn6rAcsuFZAEAAZQAwAD/QT4CTp+5n8EAAJZ7YAPAAP4bARyfxy5LAQABhZ/IwHLLhQDAAP7OSZ/SHJ/agJ/WwHLLDiABAAGGn9vAcsvOAAA+A0mf74Of88Byy1Y+AT0woA4eoCnAANA5AAAAAD89iqBGwHLLSoagT8Byy849i6BgwHLLVik/SaCIg6CMwHLLVkqgmwEmoJsBgqCiwHLLSmADwAD+Gz9JoK4hHKC5gaCywHLLJkgBAAErAMAA/3VKoMIBHKDPgaDJwHLLJiAAAAAAAD89MKDXHqDywADQOAAAAAAGwADhh4JzoQahCqE7AACWjgAAAAEDoROhOwAAAAEBAaEYAAAAJ2ADwAD+GwAAYAPAAP4bAT4BSqElARyhMC5LAQABgKExwHLMvgDAAP7OBsAA4YiCc6FAoUWhnQAAVgAAAAEDoUihnQAAAAEBAaFNAAAggJZgA8AA/hsAAFwBPgE9MKFaH6FkwAD9rQEAASfAAHfEAAbAAOGJgnOhoqGnogwAAIClAAAAAQOhraIMAAAAAQEBobwAACCAll0DwAD+fQFgA8AA/hsAAFwBPgE9MKHJH6HTwAD9rQEAASfAAHfEAAbAAOGKgnOiEaIWooEAAJ86AAAAAQOiHKKBAAAAAgICoiEAAAAnYAPAAP4bAKIsAAAggJZgA8AA/hsAAFwBPgE9MKI5H6JDwAD9rQEAASfAAHpnAAbAAOGLgnOihqKLowQAAKBHAAAAAQOilKMEAAAAAgICopkAAAAnYAPAAP4bAKKuAAAgKV0DwAD+fQFgA8AA/hsAAFwBPgE9MKK8H6LGwAD9rQEAASfAAHpnAAbAAOGMgnOjCaMOo2gAAICuAAAAAQOjEqNoAAAAAQABoxgAAACbd2EDAmADwAD+G2ADwAD+G2ADwAD+GwFqAGADwAD/JXkAXAE+AT0eozvAANDOAgFgA8AA/hsCLjUAAAABAGEDAmADwAD+G2ADwAD+G2ADwAD+GwGAo0bAcs5PIxyjToEAwHLOjUgBAAErAABqo1xhAwJdA8AA/GEBW10DwAD8YQFbYAPAAP4bwAGH2oEAwHLOjQFhAwJgA8AA/htgA8AA/htgA8AA/hsABsAA4Y2Cc6Nto3GkbAAAgLsAAAABA6N4pGwAAAACAQKjfQAAIJZ7YAPAAP4bAKOLAAAAamADwAD+GwFqo5NgA8AA/hsJAGADwAD+GwE+A0mjnRyjp4GjocByzyuBbQEAARajry5hwAD+7wDAAP9MPgFKo78BHKPGlIHGAAAAAMAA/j5Jo9Uco9+Bo9nAcs8rYwEAAZMAwAD/ST4BPYmj7MByzyuTP0WkAQGkCqQMAABiYAPAAP4bAYGkDsByzysBHKQXgqQVwHLPp2MBAAEWpB4uYcAA/u8AwAD/SQGKpCbAcs+nHKQngqQmwHLPp2QBAAGUAMAA/0E+AUmkMxykPxykOy5LAQABgqQ8wHLPpwDAAP7OSAEAAYCkQsByzx0AwAD/P0qkSwGCpFLAcs+nP0qkXwEcpGaUgcYAAAAAwAD+PgbAAOGOgnOkcaR1pY0AAJa1AAAAAQOkgKWNAAAAAgECpIUAACCWe2ADwAD+GwCkkwAAAGpgA8AA/hsBaqSbYAPAAP8leQBgA8AA/hsBPgNJpKgiHKSygaSswHLQbUgBAAErAMAA/z8BHKTDgaS9wHLQbYFtAQABFqTLLmHAAP7vAMAA/0w+AT2JpNvActBtHKTvFqToLmHAAP7vgY0BAAGUAMAA/0JJpP8cpQmBpQPActBtYwEAAZMAwAD/ST4BSqUWARylHZSBxgAAAADAAP4+P0WlKwGlNKU2AABiYAPAAP4bAYGlOMBy0G0BHKVBgqU/wHLRFYFtAQABkwDAAP9MAYqlR8By0RUcpUiCpUfActEVgY0BAAGUAMAA/0I+AUmlVBylYBylXC5LAQABgqVdwHLRFQDAAP7OSAEAAYClY8By0F8AwAD/P0qlbAGCpXPActEVP0qlgAEcpYeUgcYAAAAAwAD+PgbAAOGPgnOlkqWWpfEAAIYuAAAAAQOloKXxAAAAAAAAAGADwAD+GwE+AT0wpakfpbPAAP2tAQABJ8AAd8UABsAA4ZCCc6X2pfqmXAAAoEYAAAABA6YCplwAAAABAQGmBwAAACdgA8AA/hsAAGADwAD+GwE+AT0wphQfph7AAP2tAQABJ8AAd8UABsAA4ZGCc6Zhpmam2AAAl1MAAAABA6ZxptgAAAABAQGmdwAAAJdUYQMBYAPAAP4bYAPAAPxVAABcAT4BPTCmkB+mmsAA/a0BAAEnwAB3xQAGwADhkoJzpt2m4qdUAACXVgAAAAEDpu2nVAAAAAEBAabzAAAAl1RhAwFgA8AA/htgA8AA/FUAAFwBPgE9MKcMH6cWwAD9rQEAASfAAHfFAAbAAOGdgnOnWadhp7sBAIMeAAAAAQOnZ6e7AAAAAAAAAGADwAD+GwE+AkmnbRyneBancS5hwAD+74CXAQABkwDAAP9LSqd9ARyniC5LAQABkwDAAP7OPz0wp5Eep6zAANA4AAAAAAbAAOGegnOnwKfIqCoBAIHqAAAAAQOnzagqAAAAAAAAAGADwAD+GwE+Akmn0xyn3han1y5hwAD+74CXAQABkwDAAP9LSqfjARyn7i5LAQABHKf2FqfvLmHAAP7vgY0BAAGUAMAA/0IAwAD+zj89MKgAHqgbwADQOAAAAAAGwADhn4JzqC+oN6jOAQCAwwAAAAEDqD6ozgAAAAAAAABgA8AA/hsBPgNJqEQcqE8WqEguYcAA/u9IAQABlADAAP8/SqhVARyoYC5LAQABkwDAAP7OP0moaRyodBaobS5hwAD+70gBAAGTAMAA/z89MKh6HqiVwADQOAAAAAA/PTCoph6owcAA0DkAAAAABsAA4ZOCc6jTqNipUwAAoEkAAAABA6jeqVMAAAACAgKo4wAAACdgA8AA/hsAqPgAACCD0V0DwAD+fQFgA8AA/hsAAFwBPgJOqQ6pEgABgpBgA8AA/hsBHKkkFqkdgakUwHLUbWHAAP6gZAEAAYCpJsBy1GAAwAD/QT0cqTEug2QDAAOAqTrActRggqlBwHLUiIGpRsBy1G0AwAD+5AbAAOGUgnOpWKldqhIAAJwHAAAAAQOpZqoSAAAAAwIDqWsAAABqYAPAAP4bAKl2AAAAgpBgA8AA/hsAqYAAACDAAER0YAPAAP4bAWoAYAPAAP8leQBcAT4CPR6pncAA/VwDAAOAqa3ActT9gam0wHLVChapvi5hwAD+7wBFqcsBqdSp1gAAYmADwAD+GwGAqdjActT9ARyp4YOp38By1V1jAQABganjwHLVCgDAAP9JAYup6sBy1V0cqeiDqerActVdZAEAAZQAwAD/QT4BPRyp+S6AvwIAAoOp+sBy1V2Cqf/ActUYAMAA/s8AAHK2UwBytsYAcrbwAHK3GAByt0AAcreNAHK37gByuEEAcri2AHK5QQByulMAcruTAHK8rQByvX8Acr7QAHK/MwByv44Acr/xAHLATABywK8AcsD0AHLBPwBywdsAcsIfAHLChwByws4AcsOPAHLEvgByxboAcsYpAHLGnwByx3gAcshQAHLJlgByyu4AcsyeAHLM7QByzTMAcs2BAHLN1QByzi8Acs79AHLQPwBy0acActHlAHLSMABy0oAActLQAHLTNgBy07IActRAAHLU3QBy1cgAAAA0AsAA4aOCc8ABth7AAbY+wAG8aDfAAHuVAAABYAHAAOFpAAFdAcAA1h4BYAPAAOVMAAEFwADhqwAAAAAEAAADAAAAAAAAAAAAYAPAAOGjAT8BCQAAwADhlgAAAAAEBsAA4aWCc8ABtj7AAbY+AAAQoD8AwADV38AA1d8BAwAAAAAAAwMDAAAAAGpgA8AA/hsAAAAAAIKQYAPAAP4bAAAAACCD0V0DwAD+fQFbAABcAUoAAR0AoD8DAAOAAMBy1yWBAMBy1zGCAMBy1z4AwADV3wbAAOGngnOqfaqJqqAAAsAAemrAANW8AAAAAQOqlKqgAAAAAQEBqpkAAABhYAPAAP4bAABgA8AA5UwABsAA4aiCc6qlqqqzbwAAg2QAAAABA6qys28AAAAEAwSqtwAAAGpgA8AA/hsAqsIAAACCkGADwAD+GwCq1QAAIJaDXQPAAP59AWADwAD+GwCq4AAAAKA8YAPAAP4bAWqq7GADwAD+GwkAXAE+C0mrCyIiHKsRk4CXAQABgKsTwHLXzADAAP9LARyrIoCrHMBy18yAlwEAAYGrJMBy19kAwAD/SwEcqy+BqyvActfZgJcBAAEWqzEuYcAA/u8AwAD/Sz4CPR6rTMAA/VwDAAOAq1zActfMgatjwHLX2RaraC5hwAD+7wBAKquQq5UAP0mrohyrsIOrpsBy1/xjAQABkwDAAP9JPgE9MKu9H6vOwAD9ZQQABIOr1MBy1/yTKyegPAA/TqwHrA0AAYDuYAPAAP4bARysE4GsD8By19mBjQEAAYCsFcBy18wAwAD/QkmsIBysPhysMRasKoKsJcBy1+dhwAD+oIGNAQABg6wzwHLX/ADAAP9CYwEAAYSsQMBy2NAAwAD/ST4BPTCsTx6sasAA0DoAAAAAP0msfxysiYSsg8By2NBIAQABkwDAAP8/SqyPAD9JrJwlrKWCrKDActfnYAPAANXSPgJOrSytPAABwAB6a2ADwADV0gEmrUMAgq0+wHLX52ADwADV0kmtXByteBatZS7AAHAqwADV6UgBAAEWrYuFrXvActl3wABwKsAA1dUAwAD/Pz4BSa2pIhyttIStrsBy2NBjAQABNwoAwAD/SQAhHK3VFq3Oha2+wHLZd4KPwADV10gBAAEWrd0ugo/AANXrAMAA1yM+Aj0erfjAAM0uBQAFJq4CAIKt/cBy1+ddA8AA/r8BYAPAAP4bg64QwHLX/C6AriHActfMhK4owHLY0ABKrjoASa5RHK5nFq5hFq5aLoKPwADV67f3wADVvMAA1xvAAHApwADVvAYABhyumRyuhICufsBy18yDjQEAARauhi7AAHAqwADV6QDAAP9DZAEAARauoC6qHMAA1eoAwAD/QRyuwYSuu8By2NCDjQEAARauwy7AAHAqwADV6QDAAP9DFq76Fq7zha7jwHLZd4KPwADV17f3wADVvMAA1xscrywcrxeDrw3Actf8g40BAAEWrxkuwABwKsAA1ekAwAD/Q2QBAAEWrz6Fry7Actl3qhzAANXWAMAA/0Eer2HAAM07AQABLgAer4LAAM07AQABgq+IwHLX5wAAwADV4j4BSq+cAD9Jr7scr9YWr8+Fr7/Actl3go/AANXXSAEAARav3i6Cj8AA1esAwADXIz4FTrC0sL8AAcAAemxdA8AA/r8BYAPAAP4bASawxgCCsMHActfnXQPAAP6/AWADwAD+G06w4rDtAAHAAHptYAPAAOVMARyw7y7AAHpqwADVvAEAAYSw+8By2NAAwADWIUWxCwGxFLEWAABiYAPAAP4bAZMBHLEdFLEbwHLb1wgAYwEAAYSxH8By2NAAwAD/SQEVsSbActvXCByxJxSxJsBy29cIAGQBAAGUAMAA/0E+AT0csUGHsTfActungL8CAAIUsULActvXCAAcsVGGsUfActt2SwEAARyxXIOxUsBy1/xkAQABFLFewHLb1wgAAMAA/0EAwAD+zgDAAP7PRbF0AbF9sX8AAGJgA8AA/hsBgLGBwHLXzAEcsYoUsYjActx1CABjAQABgbGMwHLX2QDAAP9JARWxkcBy3HUIHLGSFLGRwHLcdQgAZAEAAZQAwAD/QT4BPRyxpi6AvwIAAhSxp8By3HUIAByxtoexrMBy26dLAQABHLG5FLG3wHLcdQgAgY0BAAGAsbvActfMAMAA/0IAwAD+zgDAAP7PSrHVAD8/TrH1AAAAoD1dA8AA/r8BWwBOsggAAACgPmADwAD+GwBJshglsiGCshzActfnXQPAAP6/AWADwAD+Gz4CPY2yN8By3RcUskPActfnAgFdA8AA/r8BYAPAAP4bPY6yT8By3SiDslzActf8PgI9jbJ6wHLdFxyymxyyi4KyhsBy1+eWhAEAAYOykMBy1/wAwAD+l4CtAQAAAYV2KsAA/pM9jrK6wHLdKJNJstQcsuscsuOGstjAct0oZAEAAYSy5cBy2NAAwAD/QYCXAQABFrL3hbLtwHLdF2HAAP7vAMAA/0s+AT0wswcesyLAANA6AAAAAD89HrM8wADNLgUABYWzQcBy3ReGs0zAct0oLoCzXsBy18yEs2XActjQAAbAAOGpgnOzdLOAtG0AAIFYAAAAAQOzh7RtAAAAAgECs4wAAABqYAPAAP4bALOYAAAAgpBgA8AA/hsBagBgA8AA/yV5AGADwADlTAE+BT2Js6TAct5eHrO1wAD9XAMAA4CzxcBy3lGBs8zAct5eFrPWLmHAAP7vAE6z57PuAABhYAPAAP4bARyz9IGz8MBy3l6BjQEAAYCz9sBy3lEAwAD/Qk60DbQUAACBdmADwADlTAEctBYuwAB6asAA1bwBAAGCtCLAct6qAMAA1iE9HLQ2g7QvwHLe1INkBAAEk4K0QsBy3qougLRQwHLeUQDAAP7kSrRcAYO0Y8By3tQAAHLW/gBy13EActesAHLeMQBy3y4AAAAEAsAA4ayCc8ABth7AAbY+wAG8aAPAAHuWAWrAAbYfYAPAAPwcwAGCQAABYAHAAOGjAAFgAcAA5UwAAAcGwADhr4JzwAG2/cABtwXAAbd4BAWAtcAA1bwCasABtstgA8AA/BzAAaTfagBgA8AAzUzAAaT7AAABA8ABtxbAAbd4AAAAAwMDwAG3IgAAAIKPYAPAANc1AMABty4AAACqHGADwAD+GwDAAbdBAAAAYWADwAD+GwAAYAPAAOGsAAbAAOGxgnPAAbepwAG31MABuKsDAEsBasABt6pgA8AA/BzAAMD6AAABA8ABt9bAAbirAAAAAQEBwAG32wAAACdgA8AA/hsAAGADwAD+GwE+AknAAbfoIhzAAbfygMABt+zAcuA6YwEAAZMAwAD/SQEcwAG3/4DAAbf5wHLgOoFtAQABFsABuAIuYcAA4HkAwAD/TD4BPTDAAbgSH8ABuBzAAP1xAwADgMABuC3AcuA6LicnAD9KwAG4TgEcwAG4aRbAAbhVLsAAe4PAANW8wADgd8AAeo3AANW8AQABHMABuIEWwAG4cy6qHMAA1epkAQABHMABuIqAwAG4hMBy4DqDjQEAAWrAAbiWYAPAAP4bIQDAAP9DAMAA/0EAwADXQgbAAOGygnPAAbiwwAG43MABuckDAIC/AWrAAbixYAPAAPwcwADA+gAAAQPAAbjfwAG5yQAAAAICAsABuOQAAAAnYAPAAP4bAMABuO8AACCAlmADwAD+GwAAXAE+AknAAbj8IhzAAbkGgMABuQDAcuFbYwEAAZMAwAD/SQEcwAG5E4DAAbkNwHLhW4FtAQABFsABuRYuYcAA4HkAwAD/TD4BPTDAAbkmH8ABuTDAAP1xAwADgMABuUHAcuFbLicnAD89HMABuW0WwAG5Yi7AAHuDwADVvMAA4HfAAHqPwADVvAIAAhzAAbmOFsABuYAuqhzAANXqZAEAARzAAbmXgMABuZHAcuFbg40BAAFqwAG5o2ADwAD+GyEAwAD/QwDAAP9BHsABubXAANXMAQABgcABub7AcuFqAADAANdDBsAA4bOCc8ABuc7AAbnTwAG7fgAAg2QAAAABA8ABudvAAbt+AAAABAMEwAG54AAAAGpgA8AA/hsAwAG56wAAAIKQYAPAAP4bAMABufkAACCD0V0DwAD+fQFbAMABuggAAACgPGADwAD+GwFqwAG6FGADwAD+GwkAXAE+AUnAAboeJcABuiuCwAG6IsBy4qhgA8AAzUE+BD2JwAG6QcBy4pgewAG6UsAA/VwDAAOAwAG6YsBy4omBwAG6acBy4pgWwAG6cy5hwADgeQBOwAG6hsABuo0AAGFgA8AA/hsBHMABupOBwAG6j8By4piBjQEAAYDAAbqVwHLiiQDAAP9CTsABuqbAAbqwAADAAHq6YAPAAP4bARzAAbrFFsABurcuqhzAANXqZAEAARzAAbrNgMABusfAcuKJg40BAAFqwAG62WADwAD+GyEAwAD/QwDAAP9BPRzAAbr7FsABuvAuwAB7g8AA1bzAAOB3wAB6ucAA1bwEAAQUwAG7CcBy4qgCAWADwADNQYXAAbsTwHLjX4TAAbsewHLjK4PAAbsmwHLiugDAANdYPgE9HcABu0uDZAQABIDAAbtUwHLiiYHAAbtbwHLimCbAAbtgAYLAAbtgwHLiqF0DwAD+fQFgA8AA/huDwAG7asBy4roAwADWIgbAAOG4gnPAAbu1wAG7vcABu/oBAMAAcCoAAAABA8ABu9DAAbv6AAAAAAAAAGADwAD+GwE+AUrAAbvWAWrAAbvnYAPAAP4bIQbAAOG1gnPAAbwewAG8KMABvGYAAMAAemrAANW8AAAAAQPAAbwzwAG8ZgAAAAEBAcABvDgAAABhYAPAAP4bAABgA8AA5UwBPgFKwAG8RgEewAG8UcAA5VABAAGAwAG8W8By5McABsAA4baCc8ABtj7AAbY+AAAQoD8AwADV38AA1d8BAwAAAAAAAwMDAAAAAGpgA8AA/hsAAAAAAIKQYAPAAP4bAAAAACCD0V0DwAD+fQFbAABcAUoAAR0AoD8DAAOAAMBy5SOBAMBy5S+CAMBy5TwAwADV3wAAct+CAHLgAgBy4SIAcuJfAHLkTwBy5JcAcuT8AHLlbwAAAAcCwADhuYJzwAG8a8ABvIvAAcLFN8AAe5gAAAFgAcAA4HIAAWABwADV5wABBcAA4eYAAAAABAAAAwAAAAAAAAAAAGADwADhuQE/AQkAAMAA4HsAAAAANAbAAOG7gnPAAbyLwAG8iwAAEKA/AMAA1d/AANXfAQMAAAAAAAMDAwAAAABqYAPAAP4bAAAAAACCkGADwAD+GwAAAAAgg9FdA8AA/n0BWwAAXAFKAAEdAKA/AwADgADAcuYRgQDAcuYdggDAcuYqAMAA1d8GwADh6IJzjiqOMo5EAQLAAHAqAAAAAQOORI5EAAAAAAAAAGADwAD+GwAGwADh6YJzjkiOUI5dAQKqHAAAAAEDjl2OXQAAAAAAAABgA8AA/hsABsAA4eqCc45hjnGOdwECgo8AAAABA453jncAAAAAAAAAYAPAANcYAAbAAOG8gnOOfI6IjrgAAJabAAAAAQOOlI64AAABAACCemADwAD/aAFbAAAAAF0DwAD+fQFfAwAAAUqOmgEfjp7AANArAQFfAwAAAS4ABsAA4b2Cc469jsuPKwAAlpIAAAABA47VjysAAAABAQGO5AAAIIPbXQPAAP59AWADwAD+GwAAXQPAAP59AWADwAD+GwFKjvQBHo74wADQAwIBYAPAAP4bAi6AjyXAcudEAAbAAOG+gnOPMI84j2AAAJaNAAAAAQOPP49gAAABAACXTmADwAD/aAFbAAAAAF0DwAD+vwFfAwAAAUqPRQEej0rAAP7KAQJgA8AA/htfAwAAAS4ABsAA4fGCc49kj22P1gIAgx4AAAABA49yj9YAAAABAQGPdwAAIICWYAPAAP4bAABcAT4CSY+EHI+UFo+NLmHAAP7vSAEAAZMAwAD/Pz0wj5ofj6TAAP1xAgACky4APz0cj8cugL8CAAKTgI/NwHLn+ADAAP7PBsAA4fKCc4/bj+SQWgIAgeoAAAABA4/okFoAAAABAQGP7QAAIICWYAPAAP4bAABcAT4CSY/6HJAKFpADLmHAAP7vSAEAAZMAwAD/Pz0wkBAfkBrAAP1xAgACky4APz0ckD0ugL8CAAIckEoWkEMuYcAA/u+BjQEAAZQAwAD/QoCQUcBy6G0AwAD+zwbAAOG/gnOQX5BjkRwAAKBEAAAAAQOQbZEcAAAAAgECkHMAAACXVGEDAWADwAD+G2ADwAD8VQCQiwAAAGpgA8AA/hsBapCTYAPAAP4bCQBgA8AA/hsBPgNJkJ0ckKeBkKHAcukPYwEAAZMAwAD/ST2JkKzAcukPkz9FkLsBkMSQxgAAYmADwAD+GwGBkMjAcukPARyQ0YKQz8By6VVjAQABFpDTLmHAAP7vAMAA/0kBipDbwHLpVRyQ3IKQ28By6VVkAQABlADAAP9BPgFJkOgckPCAkOzAcuj4IAEAARyQ9S5LAQABgpD2wHLpVQDAAP7OAABKkPsBgpECwHLpVT9KkQ8BHJEWlIHGAAAAAMAA/j4GwADhwIJzkSGRJZIEAACgRQAAAAEDkTOSBAAAAAIBApE5AAAAl1RhAwFgA8AA/htgA8AA/FUAkVEAAABqYAPAAP4bAWoAYAPAAP8leQBgA8AA/hsBPgNJkV8iHJFpgZFjwHLqIUgBAAErAMAA/z8BHJF6gZF0wHLqIYFtAQABFpGCLmHAAP7vAMAA/0w9iZGKwHLqIRyRnhaRly5hwAD+74GNAQABlADAAP9CP0WRpwGRsJGyAABiYAPAAP4bAYGRtMBy6iEBHJG9gpG7wHLqm4FtAQABkwDAAP9MAYqRw8By6psckcSCkcPAcuqbgY0BAAGUAMAA/0I+AUmR0ByR2ICR1MBy6gogAQABHJHdLksBAAGCkd7AcuqbAMAA/s4AAEqR4wGCkerAcuqbP0qR9wEckf6UgcYAAAAAwAD+PgbAAOHBgnOSCZIcku8DAGQAAAABA5Idku8AAAABAQGSKAAAIIPbXQPAAP6/AWADwAD+GwAAXQPAAP6/AWADwAD+GwE+Ak6SOZJFAACDXmADwAD+GwEcklMWkkwuYcAA/u9kAQABFpJbgJJVwHLrSWHAAP7vAMAA/0FKkmcBNZJzAAABAF0DwAD+vwFgA8AA/hsBMZJzYAPAAP4bADUAAAABAFsBF5J+gpJ8wHLrqGGBkofAcutwwAD+7TUAAAABAFsBHJKbgpKZwHLrqINkAwADkxaSrC5hwAD+7y4AwAD+5DUAAAABAFsBHJLCgpLAwHLrqINkAwADFpLQLmHAAP7vgZLYwHLrcICS5cBy60kAwAD+5IIAwHLrqAbAAOHCgnOS9JL5k5gAAIMcAAAAAQOTAZOYAAAAAQEBkwkAAACWe2ADwAD/aAAAYAPAAPxVAT4DTpMckyAAAJfBYAPAAP4bARaTJy5hwAD+70WTMwGTPJM+AABiYAPAAP4bAZMBHJNFgpNDwHLsmWMBAAGBk0fAcux9AMAA/0kBipNOwHLsmRyTTIKTTsBy7JlkAQABlADAAP9BPgFJk1kck2Uck2EuSwEAAYKTYsBy7JkAwAD+zkgBAAGAk2jAcuxkAMAA/z9Kk3EBKT9Kk4gBKgbAAOHDgnOTnZOilIsAAKAzAAAAAQOTqZSLAAAAAQABk7IAAACgNGADwADSfgFqAGADwAD/JXkAXAE+Az0jHJPIgJPBwHLtNkgBAAErAMAA/3WIk8HAcu02HpPQwADSgAAAAAArAWADwADSfk6T4pPkAABiYAPAAP4bARaT6y5hwAD+70OT9xyUAIGT/sBy7YOAlwEAAZQAwAD/Sz4FTpQRlBUAAKA1YAPAAP4bARyUHoCUF8By7TagNgEAAYGUJsBy7YMAwADSgz2JlDDAcu2DHJQygZQwwHLtg4GNAQABlADAAP9CTpRClEYAAKA3YAPAAP4bARyUTC5LAQABgZRNwHLtgwDAAP7OPRyUWy6AvwIAAoGUXMBy7YMclGUuSwEAAYKUZsBy7bUAwAD+zgDAAP7PPRyUdi6AvwIAAoKUd8By7bWDlH7Acu39AMAA/s8GwADhxIJzlJCUnpTbAACBpQAAAAEDlKOU2wAAAAEBAZSpAAAAgaZhAwFgA8AA/htgA8AA/FUAAF0DwAD+fQFgA8AA/hsBSpS8AR+UwMAAz00CAWADwAD+GwIugJTZwHLuhwAGwADhxYJzlOCU7pUhAACWmQAAAAEDlPKVIQAAAAEBAZT3AAAAg6hgA8AA/hsAAF0DwAD+fQFgA8AA/hsBSpT9AR+VAcAAzwgDAWADwAD+GwMuk4CVH8By7uoABsAA4caCc5UmlTSVhQAAlpoAAAABA5U9lYUAAAABAQGVQwAAAJdUYQMBYAPAAP4bYAPAAPxVAABdA8AA/n0BYAPAAP4bAUqVXwEflWPAAM+TAgFgA8AA/hsCLoCVgMBy70UABsAA4ceCc5WKlZiVzgAAloQAAAABA5Wclc4AAAABAQGVoQAAAIOoYAPAAP4bAABdA8AA/n0BYAPAAP4bAUqVpwEflavAAM8IAwFgA8AA/hsDLoCVxsBy76grAAbAAOHIgnOV05XhljIAAJaYAAAAAQOV6pYyAAAAAQEBlfAAAACXVGEDAWADwAD+G2ADwAD8VQAAXQPAAP59AWADwAD+GwFKlgwBH5YQwADPywIBYAPAAP4bAi6Ali3AcvADAAbAAOHrgnOWN5ZJlngBAJjgAAAAAQOWUpZ4AAAAAAAAAF0DwAD+fQFgA8AA/hsBSpZVAR+WWcAA0LkBAWADwAD+GwEuAAbAAOHJgnOWfZaLlrAAAJzCAAAAAQOWkJawAAAAAAAAAF0DwAD+8QJgA8AA/htgA8AA/hsBSpaWAR+WmsAA0K8BAWADwAD+GwEuAAbAAOHKgnOWtZbDl1YAAKA5AAAAAQOWy5dWAAAAAgECltAAAABqYAPAAP4bAJbcAAAAgpBgA8AA/hsBagBgA8AA/yV5AF0DwAD+fQFgA8AA/hsBPgI9HpbzwAD9XAMAA4CXA8By8PaBlwrAcvEDFpcULmHAAP7vAEqXIQEflyzAAM8IAwFgA8AA/hsDLoCXR8By8PaBl07AcvEDAAbAAOHsgnOXW5dtl5oBAFwAAAABA5d2l5oAAAAAAAAAXQPAAP64AWADwAD+GwFKl3kBH5d9wADgcQEBYAPAAP4bAS4ABsAA4cuCc5efl6mYBAAAgK0AAAABA5evmAQAAAABAAABl7YAAACFdmADwAD8VQFql8BgA8AA/FV3XQPAAP6/AWADwAD+GwE+AUqXzQEel9jAAP7FAgFgA8AA/hsBLgGFdoCX98By8dcGwADhzIJzmAmYEphCAACVcQAAAAEDmBeYQgAAAAAAAABdA8AA/7MBYAPAAP4bAT4BSpggAR6YK8AAwyMBAWADwAD+GwEuAAbAAOHNgnOYR5hMmMQAAIP9AAAAAQOYU5jEAAAAAQEBmFkAAACBpmEDAWADwAD+G1wAAFwBPgJOmHOYdwAAl8FgA8AA/hsBFph+LmHAAP7vRZiKAZiTmJUAAGJgA8AA/hsBkwEcmJyCmJrAcvK5YwEAAYGYnsBy8p0AwAD/SQGKmKPAcvK5HJikgpijwHLyuWQBAAGUAMAA/0E+AT0cmLGAmLDAcvKFIAEAARyYti5LAQABgpi3wHLyuQDAAP7OAAAGwADhzoJzmMmYzZnOAACWlQAAAAEDmNOZzgAAAAEBAZjYAAAghzlhAwJgA8AA/htgA8AA/htgA8AA/hsAAGADwAD+GwE+BU6ZA5kHAACXwWADwAD+GwEWmQ4uYcAA/u9JmRocmSKBmR7AcvNuSAEAAZMAwAD/Pz0wmSgemUPAANA4AAAAAD9OmViZXgAAgJZgA8AA/hsBHJlkLksBAAGTAMAA/s5FmW0BmXaZeAAAYmADwAD+GwGUARyZf4OZfcBy889jAQABgZmBwHLzbgDAAP9JAYuZiMBy888cmYaDmYjAcvPPZAEAAZQAwAD/QT4BPYqZk8By864cmaKAmZvAcvNGIAIAAoKZo8By864cma4uSwEAAYOZr8By888AwAD+zgAASpm+AYKZxcBy864GwADhz4JzmdOZ1ZqsAACDXwAAAAEDmdyarAAAAQAAgnpgA8AA/2gBWwICApnfAAAAlpFfAwAAAJnvAAAAhzlhAwJfAwAAYAPAAP4bXwMAAAAAXwMAAAE+A06aH5ojAACXwWADwAD+GwEWmiouYcAA/u9FmjYBmj+aQQAAYmADwAD+GwGTARyaSIOaRsBy9MtjAQABgppKwHL0rwDAAP9JAYuaUcBy9Mscmk+DmlHAcvTLZAEAAZQAwAD/QT4BPYiaXMBy9IEcmnKBmmvAcvSNIAIAAoCac8By9IEcmoUuSwEAAYOahsBy9MsAwAD+zgAASpqVAYCanMBy9IEGwADh0IJzmrGavZr8AACAqwAAAAEDmsOa/AAAAQAAgnpgA8AA/2gBWwEBAZrGAAAAgaZhAwFgA8AA/htfAwAAAABdA8AA/n0BXwMAAAFKmtkBHprdwADPHAICYAPAAP4bXwMAAAIugJr6wHL1fQAGwADh0YJzmwGbDZtfAACElQAAAAEDmxabXwAAAQAAgnpgA8AA/2gBWwEBAZsjAAAAgaZhAwFgA8AA/htdA8AA/n0BXwMAAAAAXQPAAP59AV8DAAABSps8AR+bQMAAz2ECAmADwAD+G18DAAACLoCbXcBy9ewABsAA4dKCc5tkm2mcAwAAlosAAAABA5tunAMAAAABAQGbdAAAAIGmYQMBYAPAAP4bYAPAAPxVAABgA8AA/FUBPgNOm46bkgAAl8FgA8AA/hsBFpuZLmHAAP7vRZulAZuum7AAAGJgA8AA/hsBkwEcm7eCm7XAcvaUYwEAAYGbucBy9ngAwAD/SQGKm8DAcvaUHJu+gpvAwHL2lGQBAAGUAMAA/0E+AUmbyyEcm9GAm9DAcvZWIAEAARyb1i5LAQABgpvXwHL2lADAAP7OAABKm9wBKj9Km/QBKQbAAOHTgnOcCJwNnKQAAIHWAAAAAQOcEJykAAAAAQEBnBYAAACBpmEDAWADwAD+G2ADwAD8VQAAYAPAAPxVAT4DTpwwnDQAAJfBYAPAAP4bARacOy5hwAD+70WcRwGcUJxSAABiYAPAAP4bAZMBHJxZgpxXwHL3bWMBAAGBnFvAcvdRAMAA/0kBipxiwHL3bRycYIKcYsBy921kAQABlADAAP9BPgFJnG0cnHKAnHHAcvcvIAEAARycdy5LAQABgpx4wHL3bQDAAP7OAABKnH0BKT9KnJQBKgbAAOHUgnOcqZytncQAAJaPAAAAAQOct53EAAAAAgEBnL0AAACXVGEDAWADwAD+G2ADwAD8VQABnNUAACCWkGEDAGADwAD+GwFqAGADwAD/JXlgA8AA/hsBPgROnOqc7gAAl8FgA8AA/hsBFpz1LmHAAP7vRZ0BAZ0KnQwAAGJgA8AA/hsBkwEcnRODnRHAcvhfYwEAAYKdFcBy+EMAwAD/SQGLnRzAcvhfHJ0ag50cwHL4X2QBAAGUAMAA/0E+Ak6dK50zAACWe2ADwAD+GwEcnTkuSwEAAYOdOsBy+F8AwAD+zkmdRBydTICdSMBy+AcgAQABhJ1NwHL4qAAASp1XAYSdXsBy+Kg/SZ1xIRydfIGddcBy+B9IAQABKwDAAP91Sp2FARydkoGdjMBy+B8gAAAAAAA/PTCdmh6dtcAA0DgAAAAABsAA4dWCc53Jnc2e+gAAlpQAAAABA53WnvoAAAACAQGd3AAAAJdUYQMBYAPAAP4bYAPAAPxVAAGd9AAAIJaQYQMAYAPAAP4bAWoAYAPAAP8leWADwAD+GwE+BE6eCZ4NAACXwWADwAD+GwEWnhQuYcAA/u9FniABnimeKwAAYmADwAD+GwEcnjGCni3AcvmJgY0BAAGUAMAA/0IBHJ44g542wHL5pYFtAQABkwDAAP9MAYueQMBy+aUcnj6DnkDAcvmlgY0BAAGUAMAA/0I+Ak6eT55XAACWe2ADwAD+GwEcnl0uSwEAAYOeXsBy+aUAwAD+zkmeaByecICebMBy+U0gAQABhJ5xwHL5/gAAPgFKnoUBhJ6MwHL5/j9JnqchHJ6ygZ6rwHL5ZUgBAAErAMAA/3VKnrsBHJ7IgZ7CwHL5ZSAAAAAAAD89MJ7QHp7rwADQOAAAAAAGwADh1oJznv+fA6EBAACWlwAAAAEDnw6hAQAAAAIBAZ8UAAAAl1RhAwFgA8AA/htgA8AA/FUAAZ8sAAAglpBhAwBgA8AA/hsBagBgA8AA/yV5YAPAAP4bAT4HTp9Bn0gAAIF2WwErTp9Zn2cAAMAAcyVgA8AA/FUBKk6feJ98AACXwWADwAD+GwEWn4MuYcAA/u9Fn48Bn5ifmgAAYmADwAD+GwGTARyfoYWfn8By+xxjAQABhJ+jwHL7AADAAP9JAY2fqsBy+xwcn6iFn6rAcvscZAEAAZQAwAD/QT4CTp+5n8EAAJZ7YAPAAP4bARyfxy5LAQABhZ/IwHL7HADAAP7OSZ/SHJ/agJ/WwHL6pSABAAGGn9vAcvtlAAA+A0mf74Of88By+u0+AT0woA4eoCnAANA5AAAAAD89iqBGwHL64YagT8By+2U9i6BgwHL67Sk/SaCIg6CMwHL67UqgmwEmoJsBgqCiwHL64WADwAD+Gz9JoK4hHKC5gaCywHL6vUgBAAErAMAA/3VKoMIBHKDPgaDJwHL6vSAAAAAAAD89MKDXHqDywADQOAAAAAAGwADh14JzoQahCqE7AACWjgAAAAEDoROhOwAAAAEBAaEYAAAAJ2ADwAD+GwAAYAPAAP4bAT4BSqElARyhMC5LAQABgKExwHL8VQDAAP7OBsAA4diCc6FAoUWhnQAAVgAAAAEDoUihnQAAAAEBAaFNAAAggJZgA8AA/hsAAFwBPgE9MKFaH6FkwAD9rQEAASfAAHfEAAbAAOHZgnOhoqGnogwAAIClAAAAAQOhraIMAAAAAQEBobwAACCAll0DwAD+fQFgA8AA/hsAAFwBPgE9MKHJH6HTwAD9rQEAASfAAHfEAAbAAOHagnOiEaIWooEAAJ86AAAAAQOiHKKBAAAAAgICoiEAAAAnYAPAAP4bAKIsAAAggJZgA8AA/hsAAFwBPgE9MKI5H6JDwAD9rQEAASfAAHpnAAbAAOHbgnOihqKLowQAAKBHAAAAAQOilKMEAAAAAgICopkAAAAnYAPAAP4bAKKuAAAgKV0DwAD+fQFgA8AA/hsAAFwBPgE9MKK8H6LGwAD9rQEAASfAAHpnAAbAAOHcgnOjCaMOo2gAAICuAAAAAQOjEqNoAAAAAQABoxgAAACbd2EDAmADwAD+G2ADwAD+G2ADwAD+GwFqAGADwAD/JXkAXAE+AT0eozvAANDOAgFgA8AA/hsCLjUAAAABAGEDAmADwAD+G2ADwAD+G2ADwAD+GwGAo0bAcv3mIxyjToEAwHL+JEgBAAErAABqo1xhAwJdA8AA/GEBW10DwAD8YQFbYAPAAP4bwAGH2oEAwHL+JAFhAwJgA8AA/htgA8AA/htgA8AA/hsABsAA4d2Cc6Nto3GkbAAAgLsAAAABA6N4pGwAAAACAQKjfQAAIJZ7YAPAAP4bAKOLAAAAamADwAD+GwFqo5NgA8AA/hsJAGADwAD+GwE+A0mjnRyjp4GjocBy/sKBbQEAARajry5hwAD+7wDAAP9MPgFKo78BHKPGlIHGAAAAAMAA/j5Jo9Uco9+Bo9nAcv7CYwEAAZMAwAD/ST4BPYmj7MBy/sKTP0WkAQGkCqQMAABiYAPAAP4bAYGkDsBy/sIBHKQXgqQVwHL/PmMBAAEWpB4uYcAA/u8AwAD/SQGKpCbAcv8+HKQngqQmwHL/PmQBAAGUAMAA/0E+AUmkMxykPxykOy5LAQABgqQ8wHL/PgDAAP7OSAEAAYCkQsBy/rQAwAD/P0qkSwGCpFLAcv8+P0qkXwEcpGaUgcYAAAAAwAD+PgbAAOHegnOkcaR1pY0AAJa1AAAAAQOkgKWNAAAAAgECpIUAACCWe2ADwAD+GwCkkwAAAGpgA8AA/hsBaqSbYAPAAP8leQBgA8AA/hsBPgNJpKgiHKSygaSswHMABEgBAAErAMAA/z8BHKTDgaS9wHMABIFtAQABFqTLLmHAAP7vAMAA/0w+AT2JpNvAcwAEHKTvFqToLmHAAP7vgY0BAAGUAMAA/0JJpP8cpQmBpQPAcwAEYwEAAZMAwAD/ST4BSqUWARylHZSBxgAAAADAAP4+P0WlKwGlNKU2AABiYAPAAP4bAYGlOMBzAAQBHKVBgqU/wHMArIFtAQABkwDAAP9MAYqlR8BzAKwcpUiCpUfAcwCsgY0BAAGUAMAA/0I+AUmlVBylYBylXC5LAQABgqVdwHMArADAAP7OSAEAAYClY8By//YAwAD/P0qlbAGCpXPAcwCsP0qlgAEcpYeUgcYAAAAAwAD+PgbAAOHfgnOlkqWWpfEAAIYuAAAAAQOloKXxAAAAAAAAAGADwAD+GwE+AT0wpakfpbPAAP2tAQABJ8AAd8UABsAA4eCCc6X2pfqmXAAAoEYAAAABA6YCplwAAAABAQGmBwAAACdgA8AA/hsAAGADwAD+GwE+AT0wphQfph7AAP2tAQABJ8AAd8UABsAA4eGCc6Zhpmam2AAAl1MAAAABA6ZxptgAAAABAQGmdwAAAJdUYQMBYAPAAP4bYAPAAPxVAABcAT4BPTCmkB+mmsAA/a0BAAEnwAB3xQAGwADh4oJzpt2m4qdUAACXVgAAAAEDpu2nVAAAAAEBAabzAAAAl1RhAwFgA8AA/htgA8AA/FUAAFwBPgE9MKcMH6cWwAD9rQEAASfAAHfFAAbAAOHtgnOnWadhp7sBAIMeAAAAAQOnZ6e7AAAAAAAAAGADwAD+GwE+AkmnbRyneBancS5hwAD+74CXAQABkwDAAP9LSqd9ARyniC5LAQABkwDAAP7OPz0wp5Eep6zAANA4AAAAAAbAAOHugnOnwKfIqCoBAIHqAAAAAQOnzagqAAAAAAAAAGADwAD+GwE+Akmn0xyn3han1y5hwAD+74CXAQABkwDAAP9LSqfjARyn7i5LAQABHKf2FqfvLmHAAP7vgY0BAAGUAMAA/0IAwAD+zj89MKgAHqgbwADQOAAAAAAGwADh74JzqC+oN6jOAQCAwwAAAAEDqD6ozgAAAAAAAABgA8AA/hsBPgNJqEQcqE8WqEguYcAA/u9IAQABlADAAP8/SqhVARyoYC5LAQABkwDAAP7OP0moaRyodBaobS5hwAD+70gBAAGTAMAA/z89MKh6HqiVwADQOAAAAAA/PTCoph6owcAA0DkAAAAABsAA4eOCc6jTqNipUwAAoEkAAAABA6jeqVMAAAACAgKo4wAAACdgA8AA/hsAqPgAACCD0V0DwAD+fQFgA8AA/hsAAFwBPgJOqQ6pEgABgpBgA8AA/hsBHKkkFqkdgakUwHMEBGHAAP6gZAEAAYCpJsBzA/cAwAD/QT0cqTEug2QDAAOAqTrAcwP3gqlBwHMEH4GpRsBzBAQAwAD+5AbAAOHkgnOpWKldqhIAAJwHAAAAAQOpZqoSAAAAAwIDqWsAAABqYAPAAP4bAKl2AAAAgpBgA8AA/hsAqYAAACDAAER0YAPAAP4bAWoAYAPAAP8leQBcAT4CPR6pncAA/VwDAAOAqa3AcwSUgam0wHMEoRapvi5hwAD+7wBFqcsBqdSp1gAAYmADwAD+GwGAqdjAcwSUARyp4YOp38BzBPRjAQABganjwHMEoQDAAP9JAYup6sBzBPQcqeiDqerAcwT0ZAEAAZQAwAD/QT4BPRyp+S6AvwIAAoOp+sBzBPSCqf/AcwSvAMAA/s8AAHLl6gBy5l0AcuaHAHLmrwBy5tcAcuckAHLnhQBy59gAcuhNAHLo2ABy6eoAcusqAHLsRABy7RYAcu5nAHLuygBy7yUAcu+IAHLv4wBy8EYAcvCLAHLw1gBy8XIAcvG2AHLyHgBy8mUAcvMmAHL0VQBy9VEAcvXAAHL2NgBy9w8AcvfnAHL5LQBy+oUAcvw1AHL8hABy/MoAcv0YAHL9bABy/cYAcv6UAHL/1gBzAT4AcwF8AHMBxwBzAhcAcwJnAHMCzQBzA0kAcwPXAHMEdABzBV8AAAA0AsAA4fOCc8ABvGvAAbyLwAHCxTfAAHuZAAABYAHAAOG5AAFdAcAA1h4BYAPAAOVVAAEFwADh+wAAAAAEAAADAAAAAAAAAAAAYAPAAOHzAT8BCQAAwADh5gAAAAAEBsAA4fWCc8ABvIvAAbyLAAAQoD8AwADV38AA1d8BAwAAAAAAAwMDAAAAAGpgA8AA/hsAAAAAAIKQYAPAAP4bAAAAACCD0V0DwAD+fQFbAABcAUoAAR0AoD8DAAOAAMBzBryBAMBzBsiCAMBzBtUAwADV3wbAAOH3gnOqfaqJqqAAAsAAemrAANW8AAAAAQOqlKqgAAAAAQEBqpkAAABhYAPAAP4bAABgA8AA5VUABsAA4fiCc6qlqqqzbwAAg2QAAAABA6qys28AAAAEAwSqtwAAAGpgA8AA/hsAqsIAAACCkGADwAD+GwCq1QAAIJaDXQPAAP59AWADwAD+GwCq4AAAAKA8YAPAAP4bAWqq7GADwAD+GwkAXAE+C0mrCyIiHKsRk4CXAQABgKsTwHMHYwDAAP9LARyrIoCrHMBzB2OAlwEAAYGrJMBzB3AAwAD/SwEcqy+BqyvAcwdwgJcBAAEWqzEuYcAA/u8AwAD/Sz4CPR6rTMAA/VwDAAOAq1zAcwdjgatjwHMHcBaraC5hwAD+7wBAKquQq5UAP0mrohyrsIOrpsBzB5NjAQABkwDAAP9JPgE9MKu9H6vOwAD9ZQQABIOr1MBzB5OTKyegPAA/TqwHrA0AAYDuYAPAAP4bARysE4GsD8BzB3CBjQEAAYCsFcBzB2MAwAD/QkmsIBysPhysMRasKoKsJcBzB35hwAD+oIGNAQABg6wzwHMHkwDAAP9CYwEAAYSsQMBzCGcAwAD/ST4BPTCsTx6sasAA0DoAAAAAP0msfxysiYSsg8BzCGdIAQABkwDAAP8/SqyPAD9JrJwlrKWCrKDAcwd+YAPAANXSPgJOrSytPAABwAB6a2ADwADV0gEmrUMAgq0+wHMHfmADwADV0kmtXByteBatZS7AAHAqwADV6UgBAAEWrYuFrXvAcwkOwABwKsAA1dUAwAD/Pz4BSa2pIhyttIStrsBzCGdjAQABNwoAwAD/SQAhHK3VFq3Oha2+wHMJDoKPwADV10gBAAEWrd0ugo/AANXrAMAA1yM+Aj0erfjAAM0uBQAFJq4CAIKt/cBzB35dA8AA/r8BYAPAAP4bg64QwHMHky6AriHAcwdjhK4owHMIZwBKrjoASa5RHK5nFq5hFq5aLoKPwADV67f3wADVvMAA1xvAAHApwADVvAYABhyumRyuhICufsBzB2ODjQEAARauhi7AAHAqwADV6QDAAP9DZAEAARauoC6qHMAA1eoAwAD/QRyuwYSuu8BzCGeDjQEAARauwy7AAHAqwADV6QDAAP9DFq76Fq7zha7jwHMJDoKPwADV17f3wADVvMAA1xscrywcrxeDrw3AcweTg40BAAEWrxkuwABwKsAA1ekAwAD/Q2QBAAEWrz6Fry7AcwkOqhzAANXWAMAA/0Eer2HAAM07AQABLgAer4LAAM07AQABgq+IwHMHfgAAwADV4j4BSq+cAD9Jr7scr9YWr8+Fr7/AcwkOgo/AANXXSAEAARav3i6Cj8AA1esAwADXIz4FTrC0sL8AAcAAemxdA8AA/r8BYAPAAP4bASawxgCCsMHAcwd+XQPAAP6/AWADwAD+G06w4rDtAAHAAHptYAPAAOVVARyw7y7AAHpqwADVvAEAAYSw+8BzCGcAwADWIUWxCwGxFLEWAABiYAPAAP4bAZMBHLEdFLEbwHMLbggAYwEAAYSxH8BzCGcAwAD/SQEVsSbAcwtuCByxJxSxJsBzC24IAGQBAAGUAMAA/0E+AT0csUGHsTfAcws+gL8CAAIUsULAcwtuCAAcsVGGsUfAcwsNSwEAARyxXIOxUsBzB5NkAQABFLFewHMLbggAAMAA/0EAwAD+zgDAAP7PRbF0AbF9sX8AAGJgA8AA/hsBgLGBwHMHYwEcsYoUsYjAcwwMCABjAQABgbGMwHMHcADAAP9JARWxkcBzDAwIHLGSFLGRwHMMDAgAZAEAAZQAwAD/QT4BPRyxpi6AvwIAAhSxp8BzDAwIAByxtoexrMBzCz5LAQABHLG5FLG3wHMMDAgAgY0BAAGAsbvAcwdjAMAA/0IAwAD+zgDAAP7PSrHVAD8/TrH1AAAAoD1dA8AA/r8BWwBOsggAAACgPmADwAD+GwBJshglsiGCshzAcwd+XQPAAP6/AWADwAD+Gz4CPY2yN8BzDK4UskPAcwd+AgFdA8AA/r8BYAPAAP4bPY6yT8BzDL+DslzAcweTPgI9jbJ6wHMMrhyymxyyi4KyhsBzB36WhAEAAYOykMBzB5MAwAD+l4CtAQAAAYV2KsAA/pM9jrK6wHMMv5NJstQcsuscsuOGstjAcwy/ZAEAAYSy5cBzCGcAwAD/QYCXAQABFrL3hbLtwHMMrmHAAP7vAMAA/0s+AT0wswcesyLAANA6AAAAAD89HrM8wADNLgUABYWzQcBzDK6Gs0zAcwy/LoCzXsBzB2OEs2XAcwhnAAbAAOH5gnOzdLOAtG0AAIFYAAAAAQOzh7RtAAAAAgECs4wAAABqYAPAAP4bALOYAAAAgpBgA8AA/hsBagBgA8AA/yV5AGADwADlVQE+BT2Js6TAcw31HrO1wAD9XAMAA4CzxcBzDeiBs8zAcw31FrPWLmHAAP7vAE6z57PuAABhYAPAAP4bARyz9IGz8MBzDfWBjQEAAYCz9sBzDegAwAD/Qk60DbQUAACBdmADwADlVQEctBYuwAB6asAA1bwBAAGCtCLAcw5BAMAA1iE9HLQ2g7QvwHMOa4NkBAAEk4K0QsBzDkEugLRQwHMN6ADAAP7kSrRcAYO0Y8BzDmsAAHMGlQBzBwgAcwdDAHMNyABzDsUAAAAEAsAA4fyCc8ABvGvAAbyLwAHCxQPAAHuaAWrAAbxsYAPAAPwcwAGCQAABYAHAAOHzAAFgAcAA5VUAAAcGwADh/4JzwAG9TsABvVbAAb3LBAWAtcAA1bwCasABvRtgA8AA/BzAAaURagBgA8AAzUzAAaUtAAABA8ABvWjAAb3LAAAAAwMDwAG9dAAAAIKPYAPAANc1AMABvYAAAACqHGADwAD+GwDAAb2TAAAAYWADwAD+GwAAYAPAAOH8AAbAAOIBgnPAAb38wAG+J8ABvwADAEsBasABvf1gA8AA/BzAAMD6AAABA8ABvinAAb8AAAAAAQEBwAG+LgAAACdgA8AA/hsAAGADwAD+GwE+AknAAb47IhzAAb5FgMABvj/Acw/RYwEAAZMAwAD/SQEcwAG+UoDAAb5MwHMP0YFtAQABFsABvlUuYcAA4HkAwAD/TD4BPTDAAb5lH8ABvm/AAP1xAwADgMABvoDAcw/RLicnAD9KwAG+oQEcwAG+vBbAAb6oLsAAe4PAANW8wADgd8AAepHAANW8AQABHMABvtUWwAG+xy6qHMAA1epkAQABHMABvt6AwAG+2MBzD9GDjQEAAWrAAb7rYAPAAP4bIQDAAP9DAMAA/0EAwADXRAbAAOICgnPAAb8FwAG/McABwCEDAIC/AWrAAb8GYAPAAPwcwADA+gAAAQPAAb80wAHAIQAAAAICAsABvzkAAAAnYAPAAP4bAMABv0QAACCAlmADwAD+GwAAXAE+AknAAb9RIhzAAb9bgMABv1XAcxDyYwEAAZMAwAD/SQEcwAG/aIDAAb9iwHMQ8oFtAQABFsABv2suYcAA4HkAwAD/TD4BPTDAAb97H8ABv4XAAP1xAwADgMABv5bAcxDyLicnAD89HMABv8IWwAG/ty7AAHuDwADVvMAA4HfAAHqTwADVvAIAAhzAAb/kFsABv9YuqhzAANXqZAEAARzAAb/tgMABv+fAcxDyg40BAAFqwAG/+mADwAD+GyEAwAD/QwDAAP9BHsABwAzAANXNAQABgcABwBbAcxEBAADAANdFBsAA4gOCc8ABwCbAAcArwAHB1wAAg2QAAAABA8ABwDPAAcHXAAAABAMEwAHAOAAAAGpgA8AA/hsAwAHAQwAAAIKQYAPAAP4bAMABwFEAACCD0V0DwAD+fQFbAMABwGAAAACgPGADwAD+GwFqwAHAbGADwAD+GwkAXAE+AUnAAcB2JcABwIOCwAHAesBzEj9gA8AAzUE+BD2JwAHAmcBzEi8ewAHAqsAA/VwDAAOAwAHAusBzEiCBwAHAwcBzEi8WwAHAyy5hwADgeQBOwAHA3sABwOUAAGFgA8AA/hsBHMABwOuBwAHA58BzEi+BjQEAAYDAAcDtwHMSIADAAP9CTsABwP7AAcEIAADAAHq6YAPAAP4bARzAAcEdFsABwQ8uqhzAANXqZAEAARzAAcElgMABwR/AcxIgg40BAAFqwAHBMmADwAD+GyEAwAD/QwDAAP9BPRzAAcFUFsABwUkuwAB7g8AA1bzAAOB3wAB6ucAA1bwEAAQUwAHBYsBzEj8CAWADwADNQYXAAcFswHMS9oTAAcF3wHMSwoPAAcF/wHMSUQDAANdYPgE9HcABwaSDZAQABIDAAcGtwHMSIIHAAcG0wHMSLybAAcG5AYLAAcG5wHMSP10DwAD+fQFgA8AA/huDwAHBw8BzElEAwADWIgbAAOIIgnPAAcIOwAHCFsABwlQBAMAAcCoAAAABA8ABwinAAcJUAAAAAAAAAGADwAD+GwE+AUrAAcIvAWrAAcJBYAPAAP4bIQbAAOIFgnPAAcJ5wAHChMABwsMAAMAAemrAANW8AAAAAQPAAcKPwAHCwwAAAAEBAcABwpQAAABhYAPAAP4bAABgA8AA5VUBPgFKwAHCogEewAHCrcAA5VkBAAGAwAHCuMBzFF4ABsAA4gaCc8ABvIvAAbyLAAAQoD8AwADV38AA1d8BAwAAAAAAAwMDAAAAAGpgA8AA/hsAAAAAAIKQYAPAAP4bAAAAACCD0V0DwAD+fQFbAABcAUoAAR0AoD8DAAOAAMBzFLqBAMBzFMaCAMBzFNMAwADV3wAAcw8ZAHMPmQBzELkAcxH2AHMT5gBzFC4AcxSTAHMVBgAAAAcCwADiCYJzwAHCyMABwujAAcdcN8AAe5wAAAFgAcAA4HIAAWABwADV5wABBcAA4jYAAAAABAAAAwAAAAAAAAAAAGADwADiCQE/AQkAAMAA4HsAAAAANAbAAOILgnPAAcLowAHC6AAAEKA/AMAA1d/AANXfAQMAAAAAAAMDAwAAAABqYAPAAP4bAAAAAACCkGADwAD+GwAAAAAgg9FdA8AA/n0BWwAAXAFKAAEdAKA/AwADgADAcxWogQDAcxW0ggDAcxXBAMAA1d8GwADiOIJzjiqOMo5EAQLAAHAqAAAAAQOORI5EAAAAAAAAAGADwAD+GwAGwADiOYJzjkiOUI5dAQKqHAAAAAEDjl2OXQAAAAAAAABgA8AA/hsABsAA4jqCc45hjnGOdwECgo8AAAABA453jncAAAAAAAAAYAPAANcYAAbAAOIMgnOOfI6IjrgAAJabAAAAAQOOlI64AAABAACCemADwAD/aAFbAAAAAF0DwAD+fQFfAwAAAUqOmgEfjp7AANArAQFfAwAAAS4ABsAA4g2Cc469jsuPKwAAlpIAAAABA47VjysAAAABAQGO5AAAIIPbXQPAAP59AWADwAD+GwAAXQPAAP59AWADwAD+GwFKjvQBHo74wADQAwIBYAPAAP4bAi6AjyXAcxbbAAbAAOIOgnOPMI84j2AAAJaNAAAAAQOPP49gAAABAACXTmADwAD/aAFbAAAAAF0DwAD+vwFfAwAAAUqPRQEej0rAAP7KAQJgA8AA/htfAwAAAS4ABsAA4kGCc49kj22P1gIAgx4AAAABA49yj9YAAAABAQGPdwAAIICWYAPAAP4bAABcAT4CSY+EHI+UFo+NLmHAAP7vSAEAAZMAwAD/Pz0wj5ofj6TAAP1xAgACky4APz0cj8cugL8CAAKTgI/NwHMXjwDAAP7PBsAA4kKCc4/bj+SQWgIAgeoAAAABA4/okFoAAAABAQGP7QAAIICWYAPAAP4bAABcAT4CSY/6HJAKFpADLmHAAP7vSAEAAZMAwAD/Pz0wkBAfkBrAAP1xAgACky4APz0ckD0ugL8CAAIckEoWkEMuYcAA/u+BjQEAAZQAwAD/QoCQUcBzGAQAwAD+zwbAAOIPgnOQX5BjkRwAAKBEAAAAAQOQbZEcAAAAAgECkHMAAACXVGEDAWADwAD+G2ADwAD8VQCQiwAAAGpgA8AA/hsBapCTYAPAAP4bCQBgA8AA/hsBPgNJkJ0ckKeBkKHAcximYwEAAZMAwAD/ST2JkKzAcximkz9FkLsBkMSQxgAAYmADwAD+GwGBkMjAcximARyQ0YKQz8BzGOxjAQABFpDTLmHAAP7vAMAA/0kBipDbwHMY7ByQ3IKQ28BzGOxkAQABlADAAP9BPgFJkOgckPCAkOzAcxiPIAEAARyQ9S5LAQABgpD2wHMY7ADAAP7OAABKkPsBgpECwHMY7D9KkQ8BHJEWlIHGAAAAAMAA/j4GwADiEIJzkSGRJZIEAACgRQAAAAEDkTOSBAAAAAIBApE5AAAAl1RhAwFgA8AA/htgA8AA/FUAkVEAAABqYAPAAP4bAWoAYAPAAP8leQBgA8AA/hsBPgNJkV8iHJFpgZFjwHMZuEgBAAErAMAA/z8BHJF6gZF0wHMZuIFtAQABFpGCLmHAAP7vAMAA/0w9iZGKwHMZuByRnhaRly5hwAD+74GNAQABlADAAP9CP0WRpwGRsJGyAABiYAPAAP4bAYGRtMBzGbgBHJG9gpG7wHMaMoFtAQABkwDAAP9MAYqRw8BzGjIckcSCkcPAcxoygY0BAAGUAMAA/0I+AUmR0ByR2ICR1MBzGaEgAQABHJHdLksBAAGCkd7AcxoyAMAA/s4AAEqR4wGCkerAcxoyP0qR9wEckf6UgcYAAAAAwAD+PgbAAOIRgnOSCZIcku8DAGQAAAABA5Idku8AAAABAQGSKAAAIIPbXQPAAP6/AWADwAD+GwAAXQPAAP6/AWADwAD+GwE+Ak6SOZJFAACDXmADwAD+GwEcklMWkkwuYcAA/u9kAQABFpJbgJJVwHMa4GHAAP7vAMAA/0FKkmcBNZJzAAABAF0DwAD+vwFgA8AA/hsBMZJzYAPAAP4bADUAAAABAFsBF5J+gpJ8wHMbP2GBkofAcxsHwAD+7TUAAAABAFsBHJKbgpKZwHMbP4NkAwADkxaSrC5hwAD+7y4AwAD+5DUAAAABAFsBHJLCgpLAwHMbP4NkAwADFpLQLmHAAP7vgZLYwHMbB4CS5cBzGuAAwAD+5IIAwHMbPwbAAOISgnOS9JL5k5gAAIMcAAAAAQOTAZOYAAAAAQEBkwkAAACWe2ADwAD/aAAAYAPAAPxVAT4DTpMckyAAAJfBYAPAAP4bARaTJy5hwAD+70WTMwGTPJM+AABiYAPAAP4bAZMBHJNFgpNDwHMcMGMBAAGBk0fAcxwUAMAA/0kBipNOwHMcMByTTIKTTsBzHDBkAQABlADAAP9BPgFJk1kck2Uck2EuSwEAAYKTYsBzHDAAwAD+zkgBAAGAk2jAcxv7AMAA/z9Kk3EBKT9Kk4gBKgbAAOITgnOTnZOilIsAAKAzAAAAAQOTqZSLAAAAAQABk7IAAACgNGADwADSfgFqAGADwAD/JXkAXAE+Az0jHJPIgJPBwHMczUgBAAErAMAA/3WIk8HAcxzNHpPQwADSgAAAAAArAWADwADSfk6T4pPkAABiYAPAAP4bARaT6y5hwAD+70OT9xyUAIGT/sBzHRqAlwEAAZQAwAD/Sz4FTpQRlBUAAKA1YAPAAP4bARyUHoCUF8BzHM2gNgEAAYGUJsBzHRoAwADSgz2JlDDAcx0aHJQygZQwwHMdGoGNAQABlADAAP9CTpRClEYAAKA3YAPAAP4bARyUTC5LAQABgZRNwHMdGgDAAP7OPRyUWy6AvwIAAoGUXMBzHRoclGUuSwEAAYKUZsBzHUwAwAD+zgDAAP7PPRyUdi6AvwIAAoKUd8BzHUyDlH7Acx2UAMAA/s8GwADiFIJzlJCUnpTbAACBpQAAAAEDlKOU2wAAAAEBAZSpAAAAgaZhAwFgA8AA/htgA8AA/FUAAF0DwAD+fQFgA8AA/hsBSpS8AR+UwMAAz00CAWADwAD+GwIugJTZwHMeHgAGwADiFYJzlOCU7pUhAACWmQAAAAEDlPKVIQAAAAEBAZT3AAAAg6hgA8AA/hsAAF0DwAD+fQFgA8AA/hsBSpT9AR+VAcAAzwgDAWADwAD+GwMuk4CVH8BzHoEABsAA4haCc5UmlTSVhQAAlpoAAAABA5U9lYUAAAABAQGVQwAAAJdUYQMBYAPAAP4bYAPAAPxVAABdA8AA/n0BYAPAAP4bAUqVXwEflWPAAM+TAgFgA8AA/hsCLoCVgMBzHtwABsAA4heCc5WKlZiVzgAAloQAAAABA5Wclc4AAAABAQGVoQAAAIOoYAPAAP4bAABdA8AA/n0BYAPAAP4bAUqVpwEflavAAM8IAwFgA8AA/hsDLoCVxsBzHz8rAAbAAOIYgnOV05XhljIAAJaYAAAAAQOV6pYyAAAAAQEBlfAAAACXVGEDAWADwAD+G2ADwAD8VQAAXQPAAP59AWADwAD+GwFKlgwBH5YQwADPywIBYAPAAP4bAi6Ali3Acx+aAAbAAOI7gnOWN5ZJlngBAJjgAAAAAQOWUpZ4AAAAAAAAAF0DwAD+fQFgA8AA/hsBSpZVAR+WWcAA0LkBAWADwAD+GwEuAAbAAOIZgnOWfZaLlrAAAJzCAAAAAQOWkJawAAAAAAAAAF0DwAD+8QJgA8AA/htgA8AA/hsBSpaWAR+WmsAA0K8BAWADwAD+GwEuAAbAAOIagnOWtZbDl1YAAKA5AAAAAQOWy5dWAAAAAgECltAAAABqYAPAAP4bAJbcAAAAgpBgA8AA/hsBagBgA8AA/yV5AF0DwAD+fQFgA8AA/hsBPgI9HpbzwAD9XAMAA4CXA8BzII2BlwrAcyCaFpcULmHAAP7vAEqXIQEflyzAAM8IAwFgA8AA/hsDLoCXR8BzII2Bl07AcyCaAAbAAOI8gnOXW5dtl5oBAFwAAAABA5d2l5oAAAAAAAAAXQPAAP64AWADwAD+GwFKl3kBH5d9wADgcQEBYAPAAP4bAS4ABsAA4huCc5efl6mYBAAAgK0AAAABA5evmAQAAAABAAABl7YAAACFdmADwAD8VQFql8BgA8AA/FV3XQPAAP6/AWADwAD+GwE+AUqXzQEel9jAAP7FAgFgA8AA/hsBLgGFdoCX98BzIW4GwADiHIJzmAmYEphCAACVcQAAAAEDmBeYQgAAAAAAAABdA8AA/7MBYAPAAP4bAT4BSpggAR6YK8AAwyMBAWADwAD+GwEuAAbAAOIdgnOYR5hMmMQAAIP9AAAAAQOYU5jEAAAAAQEBmFkAAACBpmEDAWADwAD+G1wAAFwBPgJOmHOYdwAAl8FgA8AA/hsBFph+LmHAAP7vRZiKAZiTmJUAAGJgA8AA/hsBkwEcmJyCmJrAcyJQYwEAAYGYnsBzIjQAwAD/SQGKmKPAcyJQHJikgpijwHMiUGQBAAGUAMAA/0E+AT0cmLGAmLDAcyIcIAEAARyYti5LAQABgpi3wHMiUADAAP7OAAAGwADiHoJzmMmYzZnOAACWlQAAAAEDmNOZzgAAAAEBAZjYAAAghzlhAwJgA8AA/htgA8AA/htgA8AA/hsAAGADwAD+GwE+BU6ZA5kHAACXwWADwAD+GwEWmQ4uYcAA/u9JmRocmSKBmR7AcyMFSAEAAZMAwAD/Pz0wmSgemUPAANA4AAAAAD9OmViZXgAAgJZgA8AA/hsBHJlkLksBAAGTAMAA/s5FmW0BmXaZeAAAYmADwAD+GwGUARyZf4OZfcBzI2ZjAQABgZmBwHMjBQDAAP9JAYuZiMBzI2YcmYaDmYjAcyNmZAEAAZQAwAD/QT4BPYqZk8BzI0UcmaKAmZvAcyLdIAIAAoKZo8BzI0Ucma4uSwEAAYOZr8BzI2YAwAD+zgAASpm+AYKZxcBzI0UGwADiH4JzmdOZ1ZqsAACDXwAAAAEDmdyarAAAAQAAgnpgA8AA/2gBWwICApnfAAAAlpFfAwAAAJnvAAAAhzlhAwJfAwAAYAPAAP4bXwMAAAAAXwMAAAE+A06aH5ojAACXwWADwAD+GwEWmiouYcAA/u9FmjYBmj+aQQAAYmADwAD+GwGTARyaSIOaRsBzJGJjAQABgppKwHMkRgDAAP9JAYuaUcBzJGIcmk+DmlHAcyRiZAEAAZQAwAD/QT4BPYiaXMBzJBgcmnKBmmvAcyQkIAIAAoCac8BzJBgcmoUuSwEAAYOahsBzJGIAwAD+zgAASpqVAYCanMBzJBgGwADiIIJzmrGavZr8AACAqwAAAAEDmsOa/AAAAQAAgnpgA8AA/2gBWwEBAZrGAAAAgaZhAwFgA8AA/htfAwAAAABdA8AA/n0BXwMAAAFKmtkBHprdwADPHAICYAPAAP4bXwMAAAIugJr6wHMlFAAGwADiIYJzmwGbDZtfAACElQAAAAEDmxabXwAAAQAAgnpgA8AA/2gBWwEBAZsjAAAAgaZhAwFgA8AA/htdA8AA/n0BXwMAAAAAXQPAAP59AV8DAAABSps8AR+bQMAAz2ECAmADwAD+G18DAAACLoCbXcBzJYMABsAA4iKCc5tkm2mcAwAAlosAAAABA5tunAMAAAABAQGbdAAAAIGmYQMBYAPAAP4bYAPAAPxVAABgA8AA/FUBPgNOm46bkgAAl8FgA8AA/hsBFpuZLmHAAP7vRZulAZuum7AAAGJgA8AA/hsBkwEcm7eCm7XAcyYrYwEAAYGbucBzJg8AwAD/SQGKm8DAcyYrHJu+gpvAwHMmK2QBAAGUAMAA/0E+AUmbyyEcm9GAm9DAcyXtIAEAARyb1i5LAQABgpvXwHMmKwDAAP7OAABKm9wBKj9Km/QBKQbAAOIjgnOcCJwNnKQAAIHWAAAAAQOcEJykAAAAAQEBnBYAAACBpmEDAWADwAD+G2ADwAD8VQAAYAPAAPxVAT4DTpwwnDQAAJfBYAPAAP4bARacOy5hwAD+70WcRwGcUJxSAABiYAPAAP4bAZMBHJxZgpxXwHMnBGMBAAGBnFvAcyboAMAA/0kBipxiwHMnBBycYIKcYsBzJwRkAQABlADAAP9BPgFJnG0cnHKAnHHAcybGIAEAARycdy5LAQABgpx4wHMnBADAAP7OAABKnH0BKT9KnJQBKgbAAOIkgnOcqZytncQAAJaPAAAAAQOct53EAAAAAgEBnL0AAACXVGEDAWADwAD+G2ADwAD8VQABnNUAACCWkGEDAGADwAD+GwFqAGADwAD/JXlgA8AA/hsBPgROnOqc7gAAl8FgA8AA/hsBFpz1LmHAAP7vRZ0BAZ0KnQwAAGJgA8AA/hsBkwEcnRODnRHAcyf2YwEAAYKdFcBzJ9oAwAD/SQGLnRzAcyf2HJ0ag50cwHMn9mQBAAGUAMAA/0E+Ak6dK50zAACWe2ADwAD+GwEcnTkuSwEAAYOdOsBzJ/YAwAD+zkmdRBydTICdSMBzJ54gAQABhJ1NwHMoPwAASp1XAYSdXsBzKD8/SZ1xIRydfIGddcBzJ7ZIAQABKwDAAP91Sp2FARydkoGdjMBzJ7YgAAAAAAA/PTCdmh6dtcAA0DgAAAAABsAA4iWCc53Jnc2e+gAAlpQAAAABA53WnvoAAAACAQGd3AAAAJdUYQMBYAPAAP4bYAPAAPxVAAGd9AAAIJaQYQMAYAPAAP4bAWoAYAPAAP8leWADwAD+GwE+BE6eCZ4NAACXwWADwAD+GwEWnhQuYcAA/u9FniABnimeKwAAYmADwAD+GwEcnjGCni3AcykggY0BAAGUAMAA/0IBHJ44g542wHMpPIFtAQABkwDAAP9MAYueQMBzKTwcnj6DnkDAcyk8gY0BAAGUAMAA/0I+Ak6eT55XAACWe2ADwAD+GwEcnl0uSwEAAYOeXsBzKTwAwAD+zkmeaByecICebMBzKOQgAQABhJ5xwHMplQAAPgFKnoUBhJ6MwHMplT9JnqchHJ6ygZ6rwHMo/EgBAAErAMAA/3VKnrsBHJ7IgZ7CwHMo/CAAAAAAAD89MJ7QHp7rwADQOAAAAAAGwADiJoJznv+fA6EBAACWlwAAAAEDnw6hAQAAAAIBAZ8UAAAAl1RhAwFgA8AA/htgA8AA/FUAAZ8sAAAglpBhAwBgA8AA/hsBagBgA8AA/yV5YAPAAP4bAT4HTp9Bn0gAAIF2WwErTp9Zn2cAAMAAcyVgA8AA/FUBKk6feJ98AACXwWADwAD+GwEWn4MuYcAA/u9Fn48Bn5ifmgAAYmADwAD+GwGTARyfoYWfn8BzKrNjAQABhJ+jwHMqlwDAAP9JAY2fqsBzKrMcn6iFn6rAcyqzZAEAAZQAwAD/QT4CTp+5n8EAAJZ7YAPAAP4bARyfxy5LAQABhZ/IwHMqswDAAP7OSZ/SHJ/agJ/WwHMqPCABAAGGn9vAcyr8AAA+A0mf74Of88BzKoQ+AT0woA4eoCnAANA5AAAAAD89iqBGwHMqeIagT8BzKvw9i6BgwHMqhCk/SaCIg6CMwHMqhEqgmwEmoJsBgqCiwHMqeGADwAD+Gz9JoK4hHKC5gaCywHMqVEgBAAErAMAA/3VKoMIBHKDPgaDJwHMqVCAAAAAAAD89MKDXHqDywADQOAAAAAAGwADiJ4JzoQahCqE7AACWjgAAAAEDoROhOwAAAAEBAaEYAAAAJ2ADwAD+GwAAYAPAAP4bAT4BSqElARyhMC5LAQABgKExwHMr7ADAAP7OBsAA4iiCc6FAoUWhnQAAVgAAAAEDoUihnQAAAAEBAaFNAAAggJZgA8AA/hsAAFwBPgE9MKFaH6FkwAD9rQEAASfAAHfEAAbAAOIpgnOhoqGnogwAAIClAAAAAQOhraIMAAAAAQEBobwAACCAll0DwAD+fQFgA8AA/hsAAFwBPgE9MKHJH6HTwAD9rQEAASfAAHfEAAbAAOIqgnOiEaIWooEAAJ86AAAAAQOiHKKBAAAAAgICoiEAAAAnYAPAAP4bAKIsAAAggJZgA8AA/hsAAFwBPgE9MKI5H6JDwAD9rQEAASfAAHpnAAbAAOIrgnOihqKLowQAAKBHAAAAAQOilKMEAAAAAgICopkAAAAnYAPAAP4bAKKuAAAgKV0DwAD+fQFgA8AA/hsAAFwBPgE9MKK8H6LGwAD9rQEAASfAAHpnAAbAAOIsgnOjCaMOo2gAAICuAAAAAQOjEqNoAAAAAQABoxgAAACbd2EDAmADwAD+G2ADwAD+G2ADwAD+GwFqAGADwAD/JXkAXAE+AT0eozvAANDOAgFgA8AA/hsCLjUAAAABAGEDAmADwAD+G2ADwAD+G2ADwAD+GwGAo0bAcy19IxyjToEAwHMtu0gBAAErAABqo1xhAwJdA8AA/GEBW10DwAD8YQFbYAPAAP4bwAGH2oEAwHMtuwFhAwJgA8AA/htgA8AA/htgA8AA/hsABsAA4i2Cc6Nto3GkbAAAgLsAAAABA6N4pGwAAAACAQKjfQAAIJZ7YAPAAP4bAKOLAAAAamADwAD+GwFqo5NgA8AA/hsJAGADwAD+GwE+A0mjnRyjp4GjocBzLlmBbQEAARajry5hwAD+7wDAAP9MPgFKo78BHKPGlIHGAAAAAMAA/j5Jo9Uco9+Bo9nAcy5ZYwEAAZMAwAD/ST4BPYmj7MBzLlmTP0WkAQGkCqQMAABiYAPAAP4bAYGkDsBzLlkBHKQXgqQVwHMu1WMBAAEWpB4uYcAA/u8AwAD/SQGKpCbAcy7VHKQngqQmwHMu1WQBAAGUAMAA/0E+AUmkMxykPxykOy5LAQABgqQ8wHMu1QDAAP7OSAEAAYCkQsBzLksAwAD/P0qkSwGCpFLAcy7VP0qkXwEcpGaUgcYAAAAAwAD+PgbAAOIugnOkcaR1pY0AAJa1AAAAAQOkgKWNAAAAAgECpIUAACCWe2ADwAD+GwCkkwAAAGpgA8AA/hsBaqSbYAPAAP8leQBgA8AA/hsBPgNJpKgiHKSygaSswHMvm0gBAAErAMAA/z8BHKTDgaS9wHMvm4FtAQABFqTLLmHAAP7vAMAA/0w+AT2JpNvAcy+bHKTvFqToLmHAAP7vgY0BAAGUAMAA/0JJpP8cpQmBpQPAcy+bYwEAAZMAwAD/ST4BSqUWARylHZSBxgAAAADAAP4+P0WlKwGlNKU2AABiYAPAAP4bAYGlOMBzL5sBHKVBgqU/wHMwQ4FtAQABkwDAAP9MAYqlR8BzMEMcpUiCpUfAczBDgY0BAAGUAMAA/0I+AUmlVBylYBylXC5LAQABgqVdwHMwQwDAAP7OSAEAAYClY8BzL40AwAD/P0qlbAGCpXPAczBDP0qlgAEcpYeUgcYAAAAAwAD+PgbAAOIvgnOlkqWWpfEAAIYuAAAAAQOloKXxAAAAAAAAAGADwAD+GwE+AT0wpakfpbPAAP2tAQABJ8AAd8UABsAA4jCCc6X2pfqmXAAAoEYAAAABA6YCplwAAAABAQGmBwAAACdgA8AA/hsAAGADwAD+GwE+AT0wphQfph7AAP2tAQABJ8AAd8UABsAA4jGCc6Zhpmam2AAAl1MAAAABA6ZxptgAAAABAQGmdwAAAJdUYQMBYAPAAP4bYAPAAPxVAABcAT4BPTCmkB+mmsAA/a0BAAEnwAB3xQAGwADiMoJzpt2m4qdUAACXVgAAAAEDpu2nVAAAAAEBAabzAAAAl1RhAwFgA8AA/htgA8AA/FUAAFwBPgE9MKcMH6cWwAD9rQEAASfAAHfFAAbAAOI9gnOnWadhp7sBAIMeAAAAAQOnZ6e7AAAAAAAAAGADwAD+GwE+AkmnbRyneBancS5hwAD+74CXAQABkwDAAP9LSqd9ARyniC5LAQABkwDAAP7OPz0wp5Eep6zAANA4AAAAAAbAAOI+gnOnwKfIqCoBAIHqAAAAAQOnzagqAAAAAAAAAGADwAD+GwE+Akmn0xyn3han1y5hwAD+74CXAQABkwDAAP9LSqfjARyn7i5LAQABHKf2FqfvLmHAAP7vgY0BAAGUAMAA/0IAwAD+zj89MKgAHqgbwADQOAAAAAAGwADiP4JzqC+oN6jOAQCAwwAAAAEDqD6ozgAAAAAAAABgA8AA/hsBPgNJqEQcqE8WqEguYcAA/u9IAQABlADAAP8/SqhVARyoYC5LAQABkwDAAP7OP0moaRyodBaobS5hwAD+70gBAAGTAMAA/z89MKh6HqiVwADQOAAAAAA/PTCoph6owcAA0DkAAAAABsAA4jOCc6jTqNipUwAAoEkAAAABA6jeqVMAAAACAgKo4wAAACdgA8AA/hsAqPgAACCD0V0DwAD+fQFgA8AA/hsAAFwBPgJOqQ6pEgABgpBgA8AA/hsBHKkkFqkdgakUwHMzm2HAAP6gZAEAAYCpJsBzM44AwAD/QT0cqTEug2QDAAOAqTrAczOOgqlBwHMztoGpRsBzM5sAwAD+5AbAAOI0gnOpWKldqhIAAJwHAAAAAQOpZqoSAAAAAwIDqWsAAABqYAPAAP4bAKl2AAAAgpBgA8AA/hsAqYAAACDAAER0YAPAAP4bAWoAYAPAAP8leQBcAT4CPR6pncAA/VwDAAOAqa3AczQrgam0wHM0OBapvi5hwAD+7wBFqcsBqdSp1gAAYmADwAD+GwGAqdjAczQrARyp4YOp38BzNItjAQABganjwHM0OADAAP9JAYup6sBzNIscqeiDqerAczSLZAEAAZQAwAD/QT4BPRyp+S6AvwIAAoOp+sBzNIuCqf/AczRGAMAA/s8AAHMVgQBzFfQAcxYeAHMWRgBzFm4Acxa7AHMXHABzF28AcxfkAHMYbwBzGYEAcxrBAHMb2wBzHK0Acx3+AHMeYQBzHrwAcx8fAHMfegBzH90AcyAiAHMgbQBzIQkAcyFNAHMhtQBzIfwAcyK9AHMj7ABzJOgAcyVXAHMlzQBzJqYAcyd+AHMoxABzKhwAcyvMAHMsGwBzLGEAcyyvAHMtAwBzLV0Acy4rAHMvbQBzMNUAczETAHMxXgBzMa4AczH+AHMyZABzMuAAczNuAHM0CwBzNPYAAAA0AsAA4kOCc8ABwsjAAcLowAHHXDfAAHudAAABYAHAAOIJAAFdAcAA1h4BYAPAAOVeAAEFwADiSwAAAAAEAAADAAAAAAAAAAAAYAPAAOJDAT8BCQAAwADiNgAAAAAEBsAA4kWCc8ABwujAAcLoAAAQoD8AwADV38AA1d8BAwAAAAAAAwMDAAAAAGpgA8AA/hsAAAAAAIKQYAPAAP4bAAAAACCD0V0DwAD+fQFbAABcAUoAAR0AoD8DAAOAAMBzNlOBAMBzNl+CAMBzNmwAwADV3wbAAOJHgnOqfaqJqqAAAsAAemrAANW8AAAAAQOqlKqgAAAAAQEBqpkAAABhYAPAAP4bAABgA8AA5V4ABsAA4kiCc6qlqqqzbwAAg2QAAAABA6qys28AAAAEAwSqtwAAAGpgA8AA/hsAqsIAAACCkGADwAD+GwCq1QAAIJaDXQPAAP59AWADwAD+GwCq4AAAAKA8YAPAAP4bAWqq7GADwAD+GwkAXAE+C0mrCyIiHKsRk4CXAQABgKsTwHM2+gDAAP9LARyrIoCrHMBzNvqAlwEAAYGrJMBzNwcAwAD/SwEcqy+BqyvAczcHgJcBAAEWqzEuYcAA/u8AwAD/Sz4CPR6rTMAA/VwDAAOAq1zAczb6gatjwHM3BxaraC5hwAD+7wBAKquQq5UAP0mrohyrsIOrpsBzNypjAQABkwDAAP9JPgE9MKu9H6vOwAD9ZQQABIOr1MBzNyqTKyegPAA/TqwHrA0AAYDuYAPAAP4bARysE4GsD8BzNweBjQEAAYCsFcBzNvoAwAD/QkmsIBysPhysMRasKoKsJcBzNxVhwAD+oIGNAQABg6wzwHM3KgDAAP9CYwEAAYSsQMBzN/4AwAD/ST4BPTCsTx6sasAA0DoAAAAAP0msfxysiYSsg8BzN/5IAQABkwDAAP8/SqyPAD9JrJwlrKWCrKDAczcVYAPAANXSPgJOrSytPAABwAB6a2ADwADV0gEmrUMAgq0+wHM3FWADwADV0kmtXByteBatZS7AAHAqwADV6UgBAAEWrYuFrXvAczilwABwKsAA1dUAwAD/Pz4BSa2pIhyttIStrsBzN/5jAQABNwoAwAD/SQAhHK3VFq3Oha2+wHM4pYKPwADV10gBAAEWrd0ugo/AANXrAMAA1yM+Aj0erfjAAM0uBQAFJq4CAIKt/cBzNxVdA8AA/r8BYAPAAP4bg64QwHM3Ki6AriHAczb6hK4owHM3/gBKrjoASa5RHK5nFq5hFq5aLoKPwADV67f3wADVvMAA1xvAAHApwADVvAYABhyumRyuhICufsBzNvqDjQEAARauhi7AAHAqwADV6QDAAP9DZAEAARauoC6qHMAA1eoAwAD/QRyuwYSuu8BzN/6DjQEAARauwy7AAHAqwADV6QDAAP9DFq76Fq7zha7jwHM4pYKPwADV17f3wADVvMAA1xscrywcrxeDrw3Aczcqg40BAAEWrxkuwABwKsAA1ekAwAD/Q2QBAAEWrz6Fry7AczilqhzAANXWAMAA/0Eer2HAAM07AQABLgAer4LAAM07AQABgq+IwHM3FQAAwADV4j4BSq+cAD9Jr7scr9YWr8+Fr7/Aczilgo/AANXXSAEAARav3i6Cj8AA1esAwADXIz4FTrC0sL8AAcAAemxdA8AA/r8BYAPAAP4bASawxgCCsMHAczcVXQPAAP6/AWADwAD+G06w4rDtAAHAAHptYAPAAOVeARyw7y7AAHpqwADVvAEAAYSw+8BzN/4AwADWIUWxCwGxFLEWAABiYAPAAP4bAZMBHLEdFLEbwHM7BQgAYwEAAYSxH8BzN/4AwAD/SQEVsSbAczsFCByxJxSxJsBzOwUIAGQBAAGUAMAA/0E+AT0csUGHsTfAczrVgL8CAAIUsULAczsFCAAcsVGGsUfAczqkSwEAARyxXIOxUsBzNypkAQABFLFewHM7BQgAAMAA/0EAwAD+zgDAAP7PRbF0AbF9sX8AAGJgA8AA/hsBgLGBwHM2+gEcsYoUsYjAczujCABjAQABgbGMwHM3BwDAAP9JARWxkcBzO6MIHLGSFLGRwHM7owgAZAEAAZQAwAD/QT4BPRyxpi6AvwIAAhSxp8BzO6MIAByxtoexrMBzOtVLAQABHLG5FLG3wHM7owgAgY0BAAGAsbvAczb6AMAA/0IAwAD+zgDAAP7PSrHVAD8/TrH1AAAAoD1dA8AA/r8BWwBOsggAAACgPmADwAD+GwBJshglsiGCshzAczcVXQPAAP6/AWADwAD+Gz4CPY2yN8BzPEUUskPAczcVAgFdA8AA/r8BYAPAAP4bPY6yT8BzPFaDslzAczcqPgI9jbJ6wHM8RRyymxyyi4KyhsBzNxWWhAEAAYOykMBzNyoAwAD+l4CtAQAAAYV2KsAA/pM9jrK6wHM8VpNJstQcsuscsuOGstjAczxWZAEAAYSy5cBzN/4AwAD/QYCXAQABFrL3hbLtwHM8RWHAAP7vAMAA/0s+AT0wswcesyLAANA6AAAAAD89HrM8wADNLgUABYWzQcBzPEWGs0zAczxWLoCzXsBzNvqEs2XAczf+AAbAAOJJgnOzdLOAtG0AAIFYAAAAAQOzh7RtAAAAAgECs4wAAABqYAPAAP4bALOYAAAAgpBgA8AA/hsBagBgA8AA/yV5AGADwADlXgE+BT2Js6TAcz2MHrO1wAD9XAMAA4CzxcBzPX+Bs8zAcz2MFrPWLmHAAP7vAE6z57PuAABhYAPAAP4bARyz9IGz8MBzPYyBjQEAAYCz9sBzPX8AwAD/Qk60DbQUAACBdmADwADlXgEctBYuwAB6asAA1bwBAAGCtCLAcz3YAMAA1iE9HLQ2g7QvwHM+AoNkBAAEk4K0QsBzPdgugLRQwHM9fwDAAP7kSrRcAYO0Y8BzPgIAAHM2LABzNp8AczbaAHM9XwBzPlwAAAAEAsAA4kyCc8ABwsjAAcLowAHHXAPAAHueAWrAAcLJYAPAAPwcwAGCQAABYAHAAOJDAAFgAcAA5V4AAAYGwADiT4JzwAHDp8ABw6/AAcQiBAWAtcAA1bwCasABw3VgA8AA/BzAAaVDagBgA8AAzUzAAaVfAAABA8ABw8DAAcQiAAAAAwMDwAHDzAAAAIKPYAPAANc1AMABw9gAAACqHGADwAD+GwDAAcPrAAAAYWADwAD+GwAAYAPAAOJMAAbAAOJRgnPAAcRTwAHEfsABxVUDAEsBasABxFRgA8AA/BzAAMD6AAABA8ABxIDAAcVVAAAAAQEBwAHEhQAAACdgA8AA/hsAAGADwAD+GwE+AknAAcSSIhzAAcScgMABxJbAcz9oYwEAAZMAwAD/SQEcwAHEqYDAAcSjwHM/aIFtAQABFsABxKwuYcAA4HkAwAD/TD4BPTDAAcS8H8ABxMbAAP1xAwADgMABxNfAcz9oLicnAD9KwAHE+AEcwAHFExbAAcT/LsAAe4PAANW8wADgd8AAepXAANW8AQABHMABxSsWwAHFHS6qHMAA1epkAQABHMABxTSAwAHFLsBzP2iDjQEAAWrAAcVAYAPAAP4bgVcAwAD/QwDAAP9BAMAA10YGwADiUoJzwAHFWsABxYbAAcZzAwCAvwFqwAHFW2ADwAD8HMAAwPoAAAEDwAHFicABxnMAAAACAgLAAcWOAAAAJ2ADwAD+GwDAAcWZAAAggJZgA8AA/hsAAFwBPgJJwAHFpiIcwAHFsIDAAcWqwHNAimMBAAGTAMAA/0kBHMABxb2AwAHFt8BzQIqBbQEAARbAAcXALmHAAOB5AMAA/0w+AT0wwAHF0B/AAcXawAD9cQMAA4DAAcXrwHNAii4nJwA/PRzAAcYXFsABxgwuwAB7g8AA1bzAAOB3wAB6l8AA1bwCAAIcwAHGOBbAAcYqLqocwADV6mQBAAEcwAHGQYDAAcY7wHNAioONAQABasABxk1gA8AA/huBVwDAAP9DAMAA/0EewAHGX8AA1c4BAAGBwAHGaMBzQJkAAMAA10cGwADiV4JzwAHGqcABxrHAAcbuAQDAAHAqAAAAAQPAAcbEwAHG7gAAAAAAAABgA8AA/hsBPgFKwAHGygFqwAHG22ADwAD+G4FXBsAA4lSCc8ABxxLAAcccwAHHWgAAwAB6asAA1bwAAAABA8ABxyfAAcdaAAAAAQEBwAHHLAAAAGFgA8AA/hsAAGADwADlXgE+AUrAAcc6AR7AAcdFwADlYgEAAYDAAcdPwHNCCAAGwADiVYJzwAHC6MABwugAABCgPwDAANXfwADV3wEDAAAAAAADAwMAAAAAamADwAD+GwAAAAAAgpBgA8AA/hsAAAAAIIPRXQPAAP59AVsAAFwBSgABHQCgPwMAA4AAwHNCZIEAwHNCcIIAwHNCfQDAANXfAABzPrAAcz8wAHNAUQBzQY8Ac0HYAHNCPQBzQrAAAAAGAsAA4liCc8ABx1/AAcd/wAHMATfAAHugAAABYAHAAOByAAFgAcAA1ecAAQXAAOKFAAAAAAQAAAMAAAAAAAAAAABgA8AA4lgBPwEJAADAAOB7AAAAADQGwADiWoJzwAHHf8ABx38AABCgPwDAANXfwADV3wEDAAAAAAADAwMAAAAAamADwAD+GwAAAAAAgpBgA8AA/hsAAAAAIIPRXQPAAP59AVsAAFwBSgABHQCgPwMAA4AAwHNDToEAwHNDWoIAwHNDZwDAANXfBsAA4oeCc44qjjKORAECwABwKgAAAAEDjkSORAAAAAAAAABgA8AA/hsABsAA4oiCc45IjlCOXQECqhwAAAABA45djl0AAAAAAAAAYAPAAP4bAAbAAOKJgnOOYY5xjncBAoKPAAAAAQOOd453AAAAAAAAAGADwADXGAAGwADiW4JzjnyOiI64AACWmwAAAAEDjpSOuAAAAQAAgnpgA8AA/2gBWwAAAABdA8AA/n0BXwMAAAFKjpoBH46ewADQKwEBXwMAAAEuAAbAAOJcgnOOvY7LjysAAJaSAAAAAQOO1Y8rAAAAAQEBjuQAACCD210DwAD+fQFgA8AA/hsAAF0DwAD+fQFgA8AA/hsBSo70AR6O+MAA0AMCAWADwAD+GwIugI8lwHNEgQAGwADiXYJzjzCPOI9gAACWjQAAAAEDjz+PYAAAAQAAl05gA8AA/2gBWwAAAABdA8AA/r8BXwMAAAFKj0UBHo9KwAD+ygECYAPAAP4bXwMAAAEuAAbAAOKQgnOPZI9tj9YCAIMeAAAAAQOPco/WAAAAAQEBj3cAACCAlmADwAD+GwAAXAE+AkmPhByPlBaPjS5hwAD+70gBAAGTAMAA/z89MI+aH4+kwAD9cQIAApMuAD89HI/HLoC/AgACk4CPzcBzRTUAwAD+zwbAAOKRgnOP24/kkFoCAIHqAAAAAQOP6JBaAAAAAQEBj+0AACCAlmADwAD+GwAAXAE+AkmP+hyQChaQAy5hwAD+70gBAAGTAMAA/z89MJAQH5AawAD9cQIAApMuAD89HJA9LoC/AgACHJBKFpBDLmHAAP7vgY0BAAGUAMAA/0KAkFHAc0WqAMAA/s8GwADiXoJzkF+QY5EcAACgRAAAAAEDkG2RHAAAAAIBApBzAAAAl1RhAwFgA8AA/htgA8AA/FUAkIsAAABqYAPAAP4bAWqQk2ADwAD+GwkAYAPAAP4bAT4DSZCdHJCngZChwHNGTGMBAAGTAMAA/0k9iZCswHNGTJM/RZC7AZDEkMYAAGJgA8AA/hsBgZDIwHNGTAEckNGCkM/Ac0aSYwEAARaQ0y5hwAD+7wDAAP9JAYqQ28BzRpIckNyCkNvAc0aSZAEAAZQAwAD/QT4BSZDoHJDwgJDswHNGNSABAAEckPUuSwEAAYKQ9sBzRpIAwAD+zgAASpD7AYKRAsBzRpI/SpEPARyRFpSBxgAAAADAAP4+BsAA4l+Cc5EhkSWSBAAAoEUAAAABA5EzkgQAAAACAQKROQAAAJdUYQMBYAPAAP4bYAPAAPxVAJFRAAAAamADwAD+GwFqAGADwAD/JXkAYAPAAP4bAT4DSZFfIhyRaYGRY8BzR15IAQABKwDAAP8/ARyReoGRdMBzR16BbQEAARaRgi5hwAD+7wDAAP9MPYmRisBzR14ckZ4WkZcuYcAA/u+BjQEAAZQAwAD/Qj9FkacBkbCRsgAAYmADwAD+GwGBkbTAc0deARyRvYKRu8BzR9iBbQEAAZMAwAD/TAGKkcPAc0fYHJHEgpHDwHNH2IGNAQABlADAAP9CPgFJkdAckdiAkdTAc0dHIAEAARyR3S5LAQABgpHewHNH2ADAAP7OAABKkeMBgpHqwHNH2D9KkfcBHJH+lIHGAAAAAMAA/j4GwADiYIJzkgmSHJLvAwBkAAAAAQOSHZLvAAAAAQEBkigAACCD210DwAD+vwFgA8AA/hsAAF0DwAD+vwFgA8AA/hsBPgJOkjmSRQAAg15gA8AA/hsBHJJTFpJMLmHAAP7vZAEAARaSW4CSVcBzSIZhwAD+7wDAAP9BSpJnATWScwAAAQBdA8AA/r8BYAPAAP4bATGSc2ADwAD+GwA1AAAAAQBbAReSfoKSfMBzSOVhgZKHwHNIrcAA/u01AAAAAQBbARySm4KSmcBzSOWDZAMAA5MWkqwuYcAA/u8uAMAA/uQ1AAAAAQBbARySwoKSwMBzSOWDZAMAAxaS0C5hwAD+74GS2MBzSK2AkuXAc0iGAMAA/uSCAMBzSOUGwADiYYJzkvSS+ZOYAACDHAAAAAEDkwGTmAAAAAEBAZMJAAAAlntgA8AA/2gAAGADwAD8VQE+A06THJMgAACXwWADwAD+GwEWkycuYcAA/u9FkzMBkzyTPgAAYmADwAD+GwGTARyTRYKTQ8BzSdZjAQABgZNHwHNJugDAAP9JAYqTTsBzSdYck0yCk07Ac0nWZAEAAZQAwAD/QT4BSZNZHJNlHJNhLksBAAGCk2LAc0nWAMAA/s5IAQABgJNowHNJoQDAAP8/SpNxASk/SpOIASoGwADiYoJzk52TopSLAACgMwAAAAEDk6mUiwAAAAEAAZOyAAAAoDRgA8AA0n4BagBgA8AA/yV5AFwBPgM9IxyTyICTwcBzSnNIAQABKwDAAP91iJPBwHNKcx6T0MAA0oAAAAAAKwFgA8AA0n5Ok+KT5AAAYmADwAD+GwEWk+suYcAA/u9Dk/cclACBk/7Ac0rAgJcBAAGUAMAA/0s+BU6UEZQVAACgNWADwAD+GwEclB6AlBfAc0pzoDYBAAGBlCbAc0rAAMAA0oM9iZQwwHNKwByUMoGUMMBzSsCBjQEAAZQAwAD/Qk6UQpRGAACgN2ADwAD+GwEclEwuSwEAAYGUTcBzSsAAwAD+zj0clFsugL8CAAKBlFzAc0rAHJRlLksBAAGClGbAc0ryAMAA/s4AwAD+zz0clHYugL8CAAKClHfAc0ryg5R+wHNLOgDAAP7PBsAA4mOCc5SQlJ6U2wAAgaUAAAABA5SjlNsAAAABAQGUqQAAAIGmYQMBYAPAAP4bYAPAAPxVAABdA8AA/n0BYAPAAP4bAUqUvAEflMDAAM9NAgFgA8AA/hsCLoCU2cBzS8QABsAA4mSCc5TglO6VIQAAlpkAAAABA5TylSEAAAABAQGU9wAAAIOoYAPAAP4bAABdA8AA/n0BYAPAAP4bAUqU/QEflQHAAM8IAwFgA8AA/hsDLpOAlR/Ac0wnAAbAAOJlgnOVJpU0lYUAAJaaAAAAAQOVPZWFAAAAAQEBlUMAAACXVGEDAWADwAD+G2ADwAD8VQAAXQPAAP59AWADwAD+GwFKlV8BH5VjwADPkwIBYAPAAP4bAi6AlYDAc0yCAAbAAOJmgnOVipWYlc4AAJaEAAAAAQOVnJXOAAAAAQEBlaEAAACDqGADwAD+GwAAXQPAAP59AWADwAD+GwFKlacBH5WrwADPCAMBYAPAAP4bAy6AlcbAc0zlKwAGwADiZ4JzldOV4ZYyAACWmAAAAAEDleqWMgAAAAEBAZXwAAAAl1RhAwFgA8AA/htgA8AA/FUAAF0DwAD+fQFgA8AA/hsBSpYMAR+WEMAAz8sCAWADwAD+GwIugJYtwHNNQAAGwADiioJzljeWSZZ4AQCY4AAAAAEDllKWeAAAAAAAAABdA8AA/n0BYAPAAP4bAUqWVQEfllnAANC5AQFgA8AA/hsBLgAGwADiaIJzln2Wi5awAACcwgAAAAEDlpCWsAAAAAAAAABdA8AA/vECYAPAAP4bYAPAAP4bAUqWlgEflprAANCvAQFgA8AA/hsBLgAGwADiaYJzlrWWw5dWAACgOQAAAAEDlsuXVgAAAAIBApbQAAAAamADwAD+GwCW3AAAAIKQYAPAAP4bAWoAYAPAAP8leQBdA8AA/n0BYAPAAP4bAT4CPR6W88AA/VwDAAOAlwPAc04zgZcKwHNOQBaXFC5hwAD+7wBKlyEBH5cswADPCAMBYAPAAP4bAy6Al0fAc04zgZdOwHNOQAAGwADii4Jzl1uXbZeaAQBcAAAAAQOXdpeaAAAAAAAAAF0DwAD+uAFgA8AA/hsBSpd5AR+XfcAA4HEBAWADwAD+GwEuAAbAAOJqgnOXn5epmAQAAICtAAAAAQOXr5gEAAAAAQAAAZe2AAAAhXZgA8AA/FUBapfAYAPAAPxVd10DwAD+vwFgA8AA/hsBPgFKl80BHpfYwAD+xQIBYAPAAP4bAS4BhXaAl/fAc08UBsAA4muCc5gJmBKYQgAAlXEAAAABA5gXmEIAAAAAAAAAXQPAAP+zAWADwAD+GwE+AUqYIAEemCvAAMMjAQFgA8AA/hsBLgAGwADibIJzmEeYTJjEAACD/QAAAAEDmFOYxAAAAAEBAZhZAAAAgaZhAwFgA8AA/htcAABcAT4CTphzmHcAAJfBYAPAAP4bARaYfi5hwAD+70WYigGYk5iVAABiYAPAAP4bAZMBHJicgpiawHNP9mMBAAGBmJ7Ac0/aAMAA/0kBipijwHNP9hyYpIKYo8BzT/ZkAQABlADAAP9BPgE9HJixgJiwwHNPwiABAAEcmLYuSwEAAYKYt8BzT/YAwAD+zgAABsAA4m2Cc5jJmM2ZzgAAlpUAAAABA5jTmc4AAAABAQGY2AAAIIc5YQMCYAPAAP4bYAPAAP4bYAPAAP4bAABgA8AA/hsBPgVOmQOZBwAAl8FgA8AA/hsBFpkOLmHAAP7vSZkaHJkigZkewHNQq0gBAAGTAMAA/z89MJkoHplDwADQOAAAAAA/TplYmV4AAICWYAPAAP4bARyZZC5LAQABkwDAAP7ORZltAZl2mXgAAGJgA8AA/hsBlAEcmX+DmX3Ac1EMYwEAAYGZgcBzUKsAwAD/SQGLmYjAc1EMHJmGg5mIwHNRDGQBAAGUAMAA/0E+AT2KmZPAc1DrHJmigJmbwHNQgyACAAKCmaPAc1DrHJmuLksBAAGDma/Ac1EMAMAA/s4AAEqZvgGCmcXAc1DrBsAA4m6Cc5nTmdWarAAAg18AAAABA5ncmqwAAAEAAIJ6YAPAAP9oAVsCAgKZ3wAAAJaRXwMAAACZ7wAAAIc5YQMCXwMAAGADwAD+G18DAAAAAF8DAAABPgNOmh+aIwAAl8FgA8AA/hsBFpoqLmHAAP7vRZo2AZo/mkEAAGJgA8AA/hsBkwEcmkiDmkbAc1IIYwEAAYKaSsBzUewAwAD/SQGLmlHAc1IIHJpPg5pRwHNSCGQBAAGUAMAA/0E+AT2ImlzAc1G+HJpygZprwHNRyiACAAKAmnPAc1G+HJqFLksBAAGDmobAc1IIAMAA/s4AAEqalQGAmpzAc1G+BsAA4m+Cc5qxmr2a/AAAgKsAAAABA5rDmvwAAAEAAIJ6YAPAAP9oAVsBAQGaxgAAAIGmYQMBYAPAAP4bXwMAAAAAXQPAAP59AV8DAAABSprZAR6a3cAAzxwCAmADwAD+G18DAAACLoCa+sBzUroABsAA4nCCc5sBmw2bXwAAhJUAAAABA5sWm18AAAEAAIJ6YAPAAP9oAVsBAQGbIwAAAIGmYQMBYAPAAP4bXQPAAP59AV8DAAAAAF0DwAD+fQFfAwAAAUqbPAEfm0DAAM9hAgJgA8AA/htfAwAAAi6Am13Ac1MpAAbAAOJxgnObZJtpnAMAAJaLAAAAAQObbpwDAAAAAQEBm3QAAACBpmEDAWADwAD+G2ADwAD8VQAAYAPAAPxVAT4DTpuOm5IAAJfBYAPAAP4bARabmS5hwAD+70WbpQGbrpuwAABiYAPAAP4bAZMBHJu3gpu1wHNT0WMBAAGBm7nAc1O1AMAA/0kBipvAwHNT0RybvoKbwMBzU9FkAQABlADAAP9BPgFJm8shHJvRgJvQwHNTkyABAAEcm9YuSwEAAYKb18BzU9EAwAD+zgAASpvcASo/Spv0ASkGwADicoJznAicDZykAACB1gAAAAEDnBCcpAAAAAEBAZwWAAAAgaZhAwFgA8AA/htgA8AA/FUAAGADwAD8VQE+A06cMJw0AACXwWADwAD+GwEWnDsuYcAA/u9FnEcBnFCcUgAAYmADwAD+GwGTARycWYKcV8BzVKpjAQABgZxbwHNUjgDAAP9JAYqcYsBzVKocnGCCnGLAc1SqZAEAAZQAwAD/QT4BSZxtHJxygJxxwHNUbCABAAEcnHcuSwEAAYKceMBzVKoAwAD+zgAASpx9ASk/SpyUASoGwADic4JznKmcrZ3EAACWjwAAAAEDnLedxAAAAAIBAZy9AAAAl1RhAwFgA8AA/htgA8AA/FUAAZzVAAAglpBhAwBgA8AA/hsBagBgA8AA/yV5YAPAAP4bAT4ETpzqnO4AAJfBYAPAAP4bARac9S5hwAD+70WdAQGdCp0MAABiYAPAAP4bAZMBHJ0Tg50RwHNVnGMBAAGCnRXAc1WAAMAA/0kBi50cwHNVnBydGoOdHMBzVZxkAQABlADAAP9BPgJOnSudMwAAlntgA8AA/hsBHJ05LksBAAGDnTrAc1WcAMAA/s5JnUQcnUyAnUjAc1VEIAEAAYSdTcBzVeUAAEqdVwGEnV7Ac1XlP0mdcSEcnXyBnXXAc1VcSAEAASsAwAD/dUqdhQEcnZKBnYzAc1VcIAAAAAAAPz0wnZoenbXAANA4AAAAAAbAAOJ0gnOdyZ3NnvoAAJaUAAAAAQOd1p76AAAAAgEBndwAAACXVGEDAWADwAD+G2ADwAD8VQABnfQAACCWkGEDAGADwAD+GwFqAGADwAD/JXlgA8AA/hsBPgROngmeDQAAl8FgA8AA/hsBFp4ULmHAAP7vRZ4gAZ4pnisAAGJgA8AA/hsBHJ4xgp4twHNWxoGNAQABlADAAP9CARyeOIOeNsBzVuKBbQEAAZMAwAD/TAGLnkDAc1biHJ4+g55AwHNW4oGNAQABlADAAP9CPgJOnk+eVwAAlntgA8AA/hsBHJ5dLksBAAGDnl7Ac1biAMAA/s5JnmgcnnCAnmzAc1aKIAEAAYSeccBzVzsAAD4BSp6FAYSejMBzVzs/SZ6nIRyesoGeq8BzVqJIAQABKwDAAP91Sp67ARyeyIGewsBzVqIgAAAAAAA/PTCe0B6e68AA0DgAAAAABsAA4nWCc57/nwOhAQAAlpcAAAABA58OoQEAAAACAQGfFAAAAJdUYQMBYAPAAP4bYAPAAPxVAAGfLAAAIJaQYQMAYAPAAP4bAWoAYAPAAP8leWADwAD+GwE+B06fQZ9IAACBdlsBK06fWZ9nAADAAHMlYAPAAPxVASpOn3iffAAAl8FgA8AA/hsBFp+DLmHAAP7vRZ+PAZ+Yn5oAAGJgA8AA/hsBkwEcn6GFn5/Ac1hZYwEAAYSfo8BzWD0AwAD/SQGNn6rAc1hZHJ+ohZ+qwHNYWWQBAAGUAMAA/0E+Ak6fuZ/BAACWe2ADwAD+GwEcn8cuSwEAAYWfyMBzWFkAwAD+zkmf0hyf2oCf1sBzV+IgAQABhp/bwHNYogAAPgNJn++Dn/PAc1gqPgE9MKAOHqApwADQOQAAAAA/PYqgRsBzWB6GoE/Ac1iiPYugYMBzWCopP0mgiIOgjMBzWCpKoJsBJqCbAYKgosBzWB5gA8AA/hs/SaCuIRyguYGgssBzV/pIAQABKwDAAP91SqDCARygz4GgycBzV/ogAAAAAAA/PTCg1x6g8sAA0DgAAAAABsAA4naCc6EGoQqhOwAAlo4AAAABA6EToTsAAAABAQGhGAAAACdgA8AA/hsAAGADwAD+GwE+AUqhJQEcoTAuSwEAAYChMcBzWZIAwAD+zgbAAOJ3gnOhQKFFoZ0AAFYAAAABA6FIoZ0AAAABAQGhTQAAIICWYAPAAP4bAABcAT4BPTChWh+hZMAA/a0BAAEnwAB3xAAGwADieIJzoaKhp6IMAACApQAAAAEDoa2iDAAAAAEBAaG8AAAggJZdA8AA/n0BYAPAAP4bAABcAT4BPTChyR+h08AA/a0BAAEnwAB3xAAGwADieYJzohGiFqKBAACfOgAAAAEDohyigQAAAAICAqIhAAAAJ2ADwAD+GwCiLAAAIICWYAPAAP4bAABcAT4BPTCiOR+iQ8AA/a0BAAEnwAB6ZwAGwADieoJzooaii6MEAACgRwAAAAEDopSjBAAAAAICAqKZAAAAJ2ADwAD+GwCirgAAICldA8AA/n0BYAPAAP4bAABcAT4BPTCivB+ixsAA/a0BAAEnwAB6ZwAGwADie4JzowmjDqNoAACArgAAAAEDoxKjaAAAAAEAAaMYAAAAm3dhAwJgA8AA/htgA8AA/htgA8AA/hsBagBgA8AA/yV5AFwBPgE9HqM7wADQzgIBYAPAAP4bAi41AAAAAQBhAwJgA8AA/htgA8AA/htgA8AA/hsBgKNGwHNbIyMco06BAMBzW2FIAQABKwAAaqNcYQMCXQPAAPxhAVtdA8AA/GEBW2ADwAD+G8ABh9qBAMBzW2EBYQMCYAPAAP4bYAPAAP4bYAPAAP4bAAbAAOJ8gnOjbaNxpGwAAIC7AAAAAQOjeKRsAAAAAgECo30AACCWe2ADwAD+GwCjiwAAAGpgA8AA/hsBaqOTYAPAAP4bCQBgA8AA/hsBPgNJo50co6eBo6HAc1v/gW0BAAEWo68uYcAA/u8AwAD/TD4BSqO/ARyjxpSBxgAAAADAAP4+SaPVHKPfgaPZwHNb/2MBAAGTAMAA/0k+AT2Jo+zAc1v/kz9FpAEBpAqkDAAAYmADwAD+GwGBpA7Ac1v/ARykF4KkFcBzXHtjAQABFqQeLmHAAP7vAMAA/0kBiqQmwHNcexykJ4KkJsBzXHtkAQABlADAAP9BPgFJpDMcpD8cpDsuSwEAAYKkPMBzXHsAwAD+zkgBAAGApELAc1vxAMAA/z9KpEsBgqRSwHNcez9KpF8BHKRmlIHGAAAAAMAA/j4GwADifYJzpHGkdaWNAACWtQAAAAEDpICljQAAAAIBAqSFAAAglntgA8AA/hsApJMAAABqYAPAAP4bAWqkm2ADwAD/JXkAYAPAAP4bAT4DSaSoIhyksoGkrMBzXUFIAQABKwDAAP8/ARykw4GkvcBzXUGBbQEAARakyy5hwAD+7wDAAP9MPgE9iaTbwHNdQRyk7xak6C5hwAD+74GNAQABlADAAP9CSaT/HKUJgaUDwHNdQWMBAAGTAMAA/0k+AUqlFgEcpR2UgcYAAAAAwAD+Pj9FpSsBpTSlNgAAYmADwAD+GwGBpTjAc11BARylQYKlP8BzXemBbQEAAZMAwAD/TAGKpUfAc13pHKVIgqVHwHNd6YGNAQABlADAAP9CPgFJpVQcpWAcpVwuSwEAAYKlXcBzXekAwAD+zkgBAAGApWPAc10zAMAA/z9KpWwBgqVzwHNd6T9KpYABHKWHlIHGAAAAAMAA/j4GwADifoJzpZKllqXxAACGLgAAAAEDpaCl8QAAAAAAAABgA8AA/hsBPgE9MKWpH6WzwAD9rQEAASfAAHfFAAbAAOJ/gnOl9qX6plwAAKBGAAAAAQOmAqZcAAAAAQEBpgcAAAAnYAPAAP4bAABgA8AA/hsBPgE9MKYUH6YewAD9rQEAASfAAHfFAAbAAOKAgnOmYaZmptgAAJdTAAAAAQOmcabYAAAAAQEBpncAAACXVGEDAWADwAD+G2ADwAD8VQAAXAE+AT0wppAfpprAAP2tAQABJ8AAd8UABsAA4oGCc6bdpuKnVAAAl1YAAAABA6btp1QAAAABAQGm8wAAAJdUYQMBYAPAAP4bYAPAAPxVAABcAT4BPTCnDB+nFsAA/a0BAAEnwAB3xQAGwADijIJzp1mnYae7AQCDHgAAAAEDp2enuwAAAAAAAABgA8AA/hsBPgJJp20cp3gWp3EuYcAA/u+AlwEAAZMAwAD/S0qnfQEcp4guSwEAAZMAwAD+zj89MKeRHqeswADQOAAAAAAGwADijYJzp8CnyKgqAQCB6gAAAAEDp82oKgAAAAAAAABgA8AA/hsBPgJJp9Mcp94Wp9cuYcAA/u+AlwEAAZMAwAD/S0qn4wEcp+4uSwEAARyn9han7y5hwAD+74GNAQABlADAAP9CAMAA/s4/PTCoAB6oG8AA0DgAAAAABsAA4o6Cc6gvqDeozgEAgMMAAAABA6g+qM4AAAAAAAAAYAPAAP4bAT4DSahEHKhPFqhILmHAAP7vSAEAAZQAwAD/P0qoVQEcqGAuSwEAAZMAwAD+zj9JqGkcqHQWqG0uYcAA/u9IAQABkwDAAP8/PTCoeh6olcAA0DgAAAAAPz0wqKYeqMHAANA5AAAAAAbAAOKCgnOo06jYqVMAAKBJAAAAAQOo3qlTAAAAAgICqOMAAAAnYAPAAP4bAKj4AAAgg9FdA8AA/n0BYAPAAP4bAABcAT4CTqkOqRIAAYKQYAPAAP4bARypJBapHYGpFMBzYUFhwAD+oGQBAAGAqSbAc2E0AMAA/0E9HKkxLoNkAwADgKk6wHNhNIKpQcBzYVyBqUbAc2FBAMAA/uQGwADig4JzqVipXaoSAACcBwAAAAEDqWaqEgAAAAMCA6lrAAAAamADwAD+GwCpdgAAAIKQYAPAAP4bAKmAAAAgwABEdGADwAD+GwFqAGADwAD/JXkAXAE+Aj0eqZ3AAP1cAwADgKmtwHNh0YGptMBzYd4Wqb4uYcAA/u8ARanLAanUqdYAAGJgA8AA/hsBgKnYwHNh0QEcqeGDqd/Ac2IxYwEAAYGp48BzYd4AwAD/SQGLqerAc2IxHKnog6nqwHNiMWQBAAGUAMAA/0E+AT0cqfkugL8CAAKDqfrAc2Ixgqn/wHNh7ADAAP7PAABzQycAc0OaAHNDxABzQ+wAc0QUAHNEYQBzRMIAc0UVAHNFigBzRhUAc0cnAHNIZwBzSYEAc0pTAHNLpABzTAcAc0xiAHNMxQBzTSAAc02DAHNNyABzThMAc06vAHNO8wBzT1sAc0+iAHNQYwBzUZIAc1KOAHNS/QBzU3MAc1RMAHNVJABzVmoAc1fCAHNZcgBzWcEAc1oHAHNaVQBzWqkAc1sDAHNb0QBzXRMAc157AHNeuQBzXwQAc19UAHNfpABzYAoAc2CGAHNhFABzYbEAc2KcAAAANALAAOKSgnPAAcdfwAHHf8ABzAE3wAB7oQAAAWABwADiWAABXQHAANYeAWADwADlZwABBcAA4poAAAAABAAAAwAAAAAAAAAAAGADwADikgE/AQkAAMAA4oUAAAAABAbAAOKUgnPAAcd/wAHHfwAAEKA/AMAA1d/AANXfAQMAAAAAAAMDAwAAAABqYAPAAP4bAAAAAACCkGADwAD+GwAAAAAgg9FdA8AA/n0BWwAAXAFKAAEdAKA/AwADgADAc2P5gQDAc2QFggDAc2QSAMAA1d8GwADiloJzqn2qiaqgAALAAHpqwADVvAAAAAEDqpSqoAAAAAEBAaqZAAAAYWADwAD+GwAAYAPAAOVnAAbAAOKXgnOqpaqqs28AAINkAAAAAQOqsrNvAAAABAMEqrcAAABqYAPAAP4bAKrCAAAAgpBgA8AA/hsAqtUAACCWg10DwAD+fQFgA8AA/hsAquAAAACgPGADwAD+GwFqquxgA8AA/hsJAFwBPgtJqwsiIhyrEZOAlwEAAYCrE8BzZKAAwAD/SwEcqyKAqxzAc2SggJcBAAGBqyTAc2StAMAA/0sBHKsvgasrwHNkrYCXAQABFqsxLmHAAP7vAMAA/0s+Aj0eq0zAAP1cAwADgKtcwHNkoIGrY8BzZK0Wq2guYcAA/u8AQCqrkKuVAD9Jq6Icq7CDq6bAc2TQYwEAAZMAwAD/ST4BPTCrvR+rzsAA/WUEAASDq9TAc2TQkysnoDwAP06sB6wNAAGA7mADwAD+GwEcrBOBrA/Ac2StgY0BAAGArBXAc2SgAMAA/0JJrCAcrD4crDEWrCqCrCXAc2S7YcAA/qCBjQEAAYOsM8BzZNAAwAD/QmMBAAGErEDAc2WkAMAA/0k+AT0wrE8erGrAANA6AAAAAD9JrH8crImErIPAc2WkSAEAAZMAwAD/P0qsjwA/SaycJaylgqygwHNku2ADwADV0j4CTq0srTwAAcAAemtgA8AA1dIBJq1DAIKtPsBzZLtgA8AA1dJJrVwcrXgWrWUuwABwKsAA1elIAQABFq2Lha17wHNmS8AAcCrAANXVAMAA/z8+AUmtqSIcrbSEra7Ac2WkYwEAATcKAMAA/0kAIRyt1RatzoWtvsBzZkuCj8AA1ddIAQABFq3dLoKPwADV6wDAANcjPgI9Hq34wADNLgUABSauAgCCrf3Ac2S7XQPAAP6/AWADwAD+G4OuEMBzZNAugK4hwHNkoISuKMBzZaQASq46AEmuURyuZxauYRauWi6Cj8AA1eu398AA1bzAANcbwABwKcAA1bwGAAYcrpkcroSArn7Ac2Sgg40BAAEWroYuwABwKsAA1ekAwAD/Q2QBAAEWrqAuqhzAANXqAMAA/0EcrsGErrvAc2Wkg40BAAEWrsMuwABwKsAA1ekAwAD/Qxau+hau84Wu48BzZkuCj8AA1de398AA1bzAANcbHK8sHK8Xg68NwHNk0IONAQABFq8ZLsAAcCrAANXpAMAA/0NkAQABFq8+ha8uwHNmS6ocwADV1gDAAP9BHq9hwADNOwEAAS4AHq+CwADNOwEAAYKviMBzZLsAAMAA1eI+AUqvnAA/Sa+7HK/WFq/Pha+/wHNmS4KPwADV10gBAAEWr94ugo/AANXrAMAA1yM+BU6wtLC/AAHAAHpsXQPAAP6/AWADwAD+GwEmsMYAgrDBwHNku10DwAD+vwFgA8AA/htOsOKw7QABwAB6bWADwADlZwEcsO8uwAB6asAA1bwBAAGEsPvAc2WkAMAA1iFFsQsBsRSxFgAAYmADwAD+GwGTARyxHRSxG8BzaKsIAGMBAAGEsR/Ac2WkAMAA/0kBFbEmwHNoqwgcsScUsSbAc2irCABkAQABlADAAP9BPgE9HLFBh7E3wHNoe4C/AgACFLFCwHNoqwgAHLFRhrFHwHNoSksBAAEcsVyDsVLAc2TQZAEAARSxXsBzaKsIAADAAP9BAMAA/s4AwAD+z0WxdAGxfbF/AABiYAPAAP4bAYCxgcBzZKABHLGKFLGIwHNpSQgAYwEAAYGxjMBzZK0AwAD/SQEVsZHAc2lJCByxkhSxkcBzaUkIAGQBAAGUAMAA/0E+AT0csaYugL8CAAIUsafAc2lJCAAcsbaHsazAc2h7SwEAARyxuRSxt8BzaUkIAIGNAQABgLG7wHNkoADAAP9CAMAA/s4AwAD+z0qx1QA/P06x9QAAAKA9XQPAAP6/AVsATrIIAAAAoD5gA8AA/hsASbIYJbIhgrIcwHNku10DwAD+vwFgA8AA/hs+Aj2NsjfAc2nrFLJDwHNkuwIBXQPAAP6/AWADwAD+Gz2Osk/Ac2n8g7JcwHNk0D4CPY2yesBzaescspscsouCsobAc2S7loQBAAGDspDAc2TQAMAA/peArQEAAAGFdirAAP6TPY6yusBzafyTSbLUHLLrHLLjhrLYwHNp/GQBAAGEsuXAc2WkAMAA/0GAlwEAARay94Wy7cBzaethwAD+7wDAAP9LPgE9MLMHHrMiwADQOgAAAAA/PR6zPMAAzS4FAAWFs0HAc2nrhrNMwHNp/C6As17Ac2SghLNlwHNlpAAGwADimIJzs3SzgLRtAACBWAAAAAEDs4e0bQAAAAIBArOMAAAAamADwAD+GwCzmAAAAIKQYAPAAP4bAWoAYAPAAP8leQBgA8AA5WcBPgU9ibOkwHNrMh6ztcAA/VwDAAOAs8XAc2slgbPMwHNrMhaz1i5hwAD+7wBOs+ez7gAAYWADwAD+GwEcs/SBs/DAc2sygY0BAAGAs/bAc2slAMAA/0JOtA20FAAAgXZgA8AA5WcBHLQWLsAAemrAANW8AQABgrQiwHNrfgDAANYhPRy0NoO0L8Bza6iDZAQABJOCtELAc2t+LoC0UMBzayUAwAD+5Eq0XAGDtGPAc2uoAABzY9IAc2RFAHNkgABzawUAc2wCAAAABALAAOKbgnPAAcdfwAHHf8ABzAEDwAB7ogFqwAHHYGADwAD8HMABgkAAAWABwADikgABYAHAAOVnAAAGBsAA4p6Cc8AByELAAchKwAHIvwQFgLXAANW8AmrAAcgPYAPAAPwcwAGldWoAYAPAAM1MwAGlkQAAAQPAAchcwAHIvwAAAAMDA8AByGgAAACCj2ADwADXNQDAAch0AAAAqhxgA8AA/hsAwAHIhwAAAGFgA8AA/hsAAGADwADimwAGwADioIJzwAHI8MAByRvAAcn0AwBLAWrAAcjxYAPAAPwcwADA+gAAAQPAAckdwAHJ9AAAAAEBAcABySIAAAAnYAPAAP4bAABgA8AA/hsBPgJJwAHJLyIcwAHJOYDAAckzwHNtDmMBAAGTAMAA/0kBHMAByUaAwAHJQMBzbQ6BbQEAARbAAclJLmHAAOB5AMAA/0w+AT0wwAHJWR/AAcljwAD9cQMAA4DAAcl0wHNtDi4nJwA/SsAByZUBHMABybAWwAHJnC7AAHuDwADVvMAA4HfAAHqZwADVvAEAARzAAcnJFsABybsuqhzAANXqZAEAARzAAcnSgMAByczAc20Og40BAAFqwAHJ32ADwAD+G4FXAMAA/0MAwAD/QQDAANdIBsAA4qGCc8AByfnAAcolwAHLFQMAgL8BasAByfpgA8AA/BzAAMD6AAABA8AByijAAcsVAAAAAgICwAHKLQAAACdgA8AA/hsAwAHKOAAAIICWYAPAAP4bAABcAT4CScABykUiHMAByk+AwAHKScBzbjBjAQABkwDAAP9JARzAAcpcgMABylbAc24wgW0BAAEWwAHKXy5hwADgeQDAAP9MPgE9MMABym8fwAHKecAA/XEDAAOAwAHKisBzbjAuJycAPz0cwAHKthbAAcqrLsAAe4PAANW8wADgd8AAepvAANW8AgACHMABytgWwAHKyi6qHMAA1epkAQABHMAByuGAwAHK28BzbjCDjQEAAWrAAcruYAPAAP4bgVcAwAD/QwDAAP9BHsABywDAANXPAQABgcABywrAc24/AADAANdJBsAA4qaCc8ABy0vAActTwAHLkQEAwABwKgAAAAEDwAHLZsABy5EAAAAAAAAAYAPAAP4bAT4BSsABy2wBasABy35gA8AA/huBVwbAAOKjgnPAAcu1wAHLwMABy/8AAMAAemrAANW8AAAAAQPAAcvLwAHL/wAAAAEBAcABy9AAAABhYAPAAP4bAABgA8AA5WcBPgFKwAHL3gEewAHL6cAA5WsBAAGAwAHL9MBzb64ABsAA4qSCc8ABx3/AAcd/AAAQoD8AwADV38AA1d8BAwAAAAAAAwMDAAAAAGpgA8AA/hsAAAAAAIKQYAPAAP4bAAAAACCD0V0DwAD+fQFbAABcAUoAAR0AoD8DAAOAAMBzcAqBAMBzcBaCAMBzcCMAwADV3wAAc2xWAHNs1gBzbfcAc281AHNvfgBzb+MAc3BWAAAABgLAAOKngnPAAcwEwAHMJMAB0I43wAB7pAAAAWABwADgcgABYAHAANXnAAEFwADi1AAAAAAEAAADAAAAAAAAAAAAYAPAAOKnAT8BCQAAwADgewAAAAA0BsAA4qmCc8ABzCTAAcwkAAAQoD8AwADV38AA1d8BAwAAAAAAAwMDAAAAAGpgA8AA/hsAAAAAAIKQYAPAAP4bAAAAACCD0V0DwAD+fQFbAABcAUoAAR0AoD8DAAOAAMBzcPSBAMBzcQCCAMBzcQ0AwADV3wbAAOLWgnOOKo4yjkQBAsAAcCoAAAABA45EjkQAAAAAAAAAYAPAAP4bAAbAAOLXgnOOSI5Qjl0BAqocAAAAAQOOXY5dAAAAAAAAAGADwAD+GwAGwADi2IJzjmGOcY53AQKCjwAAAAEDjneOdwAAAAAAAABgA8AA1xgABsAA4qqCc458joiOuAAAlpsAAAABA46UjrgAAAEAAIJ6YAPAAP9oAVsAAAAAXQPAAP59AV8DAAABSo6aAR+OnsAA0CsBAV8DAAABLgAGwADiq4Jzjr2Oy48rAACWkgAAAAEDjtWPKwAAAAEBAY7kAAAgg9tdA8AA/n0BYAPAAP4bAABdA8AA/n0BYAPAAP4bAUqO9AEejvjAANADAgFgA8AA/hsCLoCPJcBzcicABsAA4qyCc48wjziPYAAAlo0AAAABA48/j2AAAAEAAJdOYAPAAP9oAVsAAAAAXQPAAP6/AV8DAAABSo9FAR6PSsAA/soBAmADwAD+G18DAAABLgAGwADi34Jzj2SPbY/WAgCDHgAAAAEDj3KP1gAAAAEBAY93AAAggJZgA8AA/hsAAFwBPgJJj4Qcj5QWj40uYcAA/u9IAQABkwDAAP8/PTCPmh+PpMAA/XECAAKTLgA/PRyPxy6AvwIAApOAj83Ac3LbAMAA/s8GwADi4IJzj9uP5JBaAgCB6gAAAAEDj+iQWgAAAAEBAY/tAAAggJZgA8AA/hsAAFwBPgJJj/ockAoWkAMuYcAA/u9IAQABkwDAAP8/PTCQEB+QGsAA/XECAAKTLgA/PRyQPS6AvwIAAhyQShaQQy5hwAD+74GNAQABlADAAP9CgJBRwHNzUADAAP7PBsAA4q2Cc5BfkGORHAAAoEQAAAABA5BtkRwAAAACAQKQcwAAAJdUYQMBYAPAAP4bYAPAAPxVAJCLAAAAamADwAD+GwFqkJNgA8AA/hsJAGADwAD+GwE+A0mQnRyQp4GQocBzc/JjAQABkwDAAP9JPYmQrMBzc/KTP0WQuwGQxJDGAABiYAPAAP4bAYGQyMBzc/IBHJDRgpDPwHN0OGMBAAEWkNMuYcAA/u8AwAD/SQGKkNvAc3Q4HJDcgpDbwHN0OGQBAAGUAMAA/0E+AUmQ6ByQ8ICQ7MBzc9sgAQABHJD1LksBAAGCkPbAc3Q4AMAA/s4AAEqQ+wGCkQLAc3Q4P0qRDwEckRaUgcYAAAAAwAD+PgbAAOKugnORIZElkgQAAKBFAAAAAQORM5IEAAAAAgECkTkAAACXVGEDAWADwAD+G2ADwAD8VQCRUQAAAGpgA8AA/hsBagBgA8AA/yV5AGADwAD+GwE+A0mRXyIckWmBkWPAc3UESAEAASsAwAD/PwEckXqBkXTAc3UEgW0BAAEWkYIuYcAA/u8AwAD/TD2JkYrAc3UEHJGeFpGXLmHAAP7vgY0BAAGUAMAA/0I/RZGnAZGwkbIAAGJgA8AA/hsBgZG0wHN1BAEckb2CkbvAc3V+gW0BAAGTAMAA/0wBipHDwHN1fhyRxIKRw8BzdX6BjQEAAZQAwAD/Qj4BSZHQHJHYgJHUwHN07SABAAEckd0uSwEAAYKR3sBzdX4AwAD+zgAASpHjAYKR6sBzdX4/SpH3ARyR/pSBxgAAAADAAP4+BsAA4q+Cc5IJkhyS7wMAZAAAAAEDkh2S7wAAAAEBAZIoAAAgg9tdA8AA/r8BYAPAAP4bAABdA8AA/r8BYAPAAP4bAT4CTpI5kkUAAINeYAPAAP4bARySUxaSTC5hwAD+72QBAAEWkluAklXAc3YsYcAA/u8AwAD/QUqSZwE1knMAAAEAXQPAAP6/AWADwAD+GwExknNgA8AA/hsANQAAAAEAWwEXkn6CknzAc3aLYYGSh8BzdlPAAP7tNQAAAAEAWwEckpuCkpnAc3aLg2QDAAOTFpKsLmHAAP7vLgDAAP7kNQAAAAEAWwEcksKCksDAc3aLg2QDAAMWktAuYcAA/u+BktjAc3ZTgJLlwHN2LADAAP7kggDAc3aLBsAA4rCCc5L0kvmTmAAAgxwAAAABA5MBk5gAAAABAQGTCQAAAJZ7YAPAAP9oAABgA8AA/FUBPgNOkxyTIAAAl8FgA8AA/hsBFpMnLmHAAP7vRZMzAZM8kz4AAGJgA8AA/hsBkwEck0WCk0PAc3d8YwEAAYGTR8Bzd2AAwAD/SQGKk07Ac3d8HJNMgpNOwHN3fGQBAAGUAMAA/0E+AUmTWRyTZRyTYS5LAQABgpNiwHN3fADAAP7OSAEAAYCTaMBzd0cAwAD/P0qTcQEpP0qTiAEqBsAA4rGCc5Odk6KUiwAAoDMAAAABA5OplIsAAAABAAGTsgAAAKA0YAPAANJ+AWoAYAPAAP8leQBcAT4DPSMck8iAk8HAc3gZSAEAASsAwAD/dYiTwcBzeBkek9DAANKAAAAAACsBYAPAANJ+TpPik+QAAGJgA8AA/hsBFpPrLmHAAP7vQ5P3HJQAgZP+wHN4ZoCXAQABlADAAP9LPgVOlBGUFQAAoDVgA8AA/hsBHJQegJQXwHN4GaA2AQABgZQmwHN4ZgDAANKDPYmUMMBzeGYclDKBlDDAc3hmgY0BAAGUAMAA/0JOlEKURgAAoDdgA8AA/hsBHJRMLksBAAGBlE3Ac3hmAMAA/s49HJRbLoC/AgACgZRcwHN4ZhyUZS5LAQABgpRmwHN4mADAAP7OAMAA/s89HJR2LoC/AgACgpR3wHN4mIOUfsBzeOAAwAD+zwbAAOKygnOUkJSelNsAAIGlAAAAAQOUo5TbAAAAAQEBlKkAAACBpmEDAWADwAD+G2ADwAD8VQAAXQPAAP59AWADwAD+GwFKlLwBH5TAwADPTQIBYAPAAP4bAi6AlNnAc3lqAAbAAOKzgnOU4JTulSEAAJaZAAAAAQOU8pUhAAAAAQEBlPcAAACDqGADwAD+GwAAXQPAAP59AWADwAD+GwFKlP0BH5UBwADPCAMBYAPAAP4bAy6TgJUfwHN5zQAGwADitIJzlSaVNJWFAACWmgAAAAEDlT2VhQAAAAEBAZVDAAAAl1RhAwFgA8AA/htgA8AA/FUAAF0DwAD+fQFgA8AA/hsBSpVfAR+VY8AAz5MCAWADwAD+GwIugJWAwHN6KAAGwADitYJzlYqVmJXOAACWhAAAAAEDlZyVzgAAAAEBAZWhAAAAg6hgA8AA/hsAAF0DwAD+fQFgA8AA/hsBSpWnAR+Vq8AAzwgDAWADwAD+GwMugJXGwHN6iysABsAA4raCc5XTleGWMgAAlpgAAAABA5XqljIAAAABAQGV8AAAAJdUYQMBYAPAAP4bYAPAAPxVAABdA8AA/n0BYAPAAP4bAUqWDAEflhDAAM/LAgFgA8AA/hsCLoCWLcBzeuYABsAA4tmCc5Y3lkmWeAEAmOAAAAABA5ZSlngAAAAAAAAAXQPAAP59AWADwAD+GwFKllUBH5ZZwADQuQEBYAPAAP4bAS4ABsAA4reCc5Z9louWsAAAnMIAAAABA5aQlrAAAAAAAAAAXQPAAP7xAmADwAD+G2ADwAD+GwFKlpYBH5aawADQrwEBYAPAAP4bAS4ABsAA4riCc5a1lsOXVgAAoDkAAAABA5bLl1YAAAACAQKW0AAAAGpgA8AA/hsAltwAAACCkGADwAD+GwFqAGADwAD/JXkAXQPAAP59AWADwAD+GwE+Aj0elvPAAP1cAwADgJcDwHN72YGXCsBze+YWlxQuYcAA/u8ASpchAR+XLMAAzwgDAWADwAD+GwMugJdHwHN72YGXTsBze+YABsAA4tqCc5dbl22XmgEAXAAAAAEDl3aXmgAAAAAAAABdA8AA/rgBYAPAAP4bAUqXeQEfl33AAOBxAQFgA8AA/hsBLgAGwADiuYJzl5+XqZgEAACArQAAAAEDl6+YBAAAAAEAAAGXtgAAAIV2YAPAAPxVAWqXwGADwAD8VXddA8AA/r8BYAPAAP4bAT4BSpfNAR6X2MAA/sUCAWADwAD+GwEuAYV2gJf3wHN8ugbAAOK6gnOYCZgSmEIAAJVxAAAAAQOYF5hCAAAAAAAAAF0DwAD/swFgA8AA/hsBPgFKmCABHpgrwADDIwEBYAPAAP4bAS4ABsAA4ruCc5hHmEyYxAAAg/0AAAABA5hTmMQAAAABAQGYWQAAAIGmYQMBYAPAAP4bXAAAXAE+Ak6Yc5h3AACXwWADwAD+GwEWmH4uYcAA/u9FmIoBmJOYlQAAYmADwAD+GwGTARyYnIKYmsBzfZxjAQABgZiewHN9gADAAP9JAYqYo8BzfZwcmKSCmKPAc32cZAEAAZQAwAD/QT4BPRyYsYCYsMBzfWggAQABHJi2LksBAAGCmLfAc32cAMAA/s4AAAbAAOK8gnOYyZjNmc4AAJaVAAAAAQOY05nOAAAAAQEBmNgAACCHOWEDAmADwAD+G2ADwAD+G2ADwAD+GwAAYAPAAP4bAT4FTpkDmQcAAJfBYAPAAP4bARaZDi5hwAD+70mZGhyZIoGZHsBzflFIAQABkwDAAP8/PTCZKB6ZQ8AA0DgAAAAAP06ZWJleAACAlmADwAD+GwEcmWQuSwEAAZMAwAD+zkWZbQGZdpl4AABiYAPAAP4bAZQBHJl/g5l9wHN+smMBAAGBmYHAc35RAMAA/0kBi5mIwHN+shyZhoOZiMBzfrJkAQABlADAAP9BPgE9ipmTwHN+kRyZooCZm8BzfikgAgACgpmjwHN+kRyZri5LAQABg5mvwHN+sgDAAP7OAABKmb4BgpnFwHN+kQbAAOK9gnOZ05nVmqwAAINfAAAAAQOZ3JqsAAABAACCemADwAD/aAFbAgICmd8AAACWkV8DAAAAme8AAACHOWEDAl8DAABgA8AA/htfAwAAAABfAwAAAT4DTpofmiMAAJfBYAPAAP4bARaaKi5hwAD+70WaNgGaP5pBAABiYAPAAP4bAZMBHJpIg5pGwHN/rmMBAAGCmkrAc3+SAMAA/0kBi5pRwHN/rhyaT4OaUcBzf65kAQABlADAAP9BPgE9iJpcwHN/ZByacoGaa8Bzf3AgAgACgJpzwHN/ZByahS5LAQABg5qGwHN/rgDAAP7OAABKmpUBgJqcwHN/ZAbAAOK+gnOasZq9mvwAAICrAAAAAQOaw5r8AAABAACCemADwAD/aAFbAQEBmsYAAACBpmEDAWADwAD+G18DAAAAAF0DwAD+fQFfAwAAAUqa2QEemt3AAM8cAgJgA8AA/htfAwAAAi6AmvrAc4BgAAbAAOK/gnObAZsNm18AAISVAAAAAQObFptfAAABAACCemADwAD/aAFbAQEBmyMAAACBpmEDAWADwAD+G10DwAD+fQFfAwAAAABdA8AA/n0BXwMAAAFKmzwBH5tAwADPYQICYAPAAP4bXwMAAAIugJtdwHOAzwAGwADiwIJzm2SbaZwDAACWiwAAAAEDm26cAwAAAAEBAZt0AAAAgaZhAwFgA8AA/htgA8AA/FUAAGADwAD8VQE+A06bjpuSAACXwWADwAD+GwEWm5kuYcAA/u9Fm6UBm66bsAAAYmADwAD+GwGTARybt4KbtcBzgXdjAQABgZu5wHOBWwDAAP9JAYqbwMBzgXccm76Cm8DAc4F3ZAEAAZQAwAD/QT4BSZvLIRyb0YCb0MBzgTkgAQABHJvWLksBAAGCm9fAc4F3AMAA/s4AAEqb3AEqP0qb9AEpBsAA4sGCc5wInA2cpAAAgdYAAAABA5wQnKQAAAABAQGcFgAAAIGmYQMBYAPAAP4bYAPAAPxVAABgA8AA/FUBPgNOnDCcNAAAl8FgA8AA/hsBFpw7LmHAAP7vRZxHAZxQnFIAAGJgA8AA/hsBkwEcnFmCnFfAc4JQYwEAAYGcW8BzgjQAwAD/SQGKnGLAc4JQHJxggpxiwHOCUGQBAAGUAMAA/0E+AUmcbRyccoCcccBzghIgAQABHJx3LksBAAGCnHjAc4JQAMAA/s4AAEqcfQEpP0qclAEqBsAA4sKCc5ypnK2dxAAAlo8AAAABA5y3ncQAAAACAQGcvQAAAJdUYQMBYAPAAP4bYAPAAPxVAAGc1QAAIJaQYQMAYAPAAP4bAWoAYAPAAP8leWADwAD+GwE+BE6c6pzuAACXwWADwAD+GwEWnPUuYcAA/u9FnQEBnQqdDAAAYmADwAD+GwGTARydE4OdEcBzg0JjAQABgp0VwHODJgDAAP9JAYudHMBzg0IcnRqDnRzAc4NCZAEAAZQAwAD/QT4CTp0rnTMAAJZ7YAPAAP4bARydOS5LAQABg506wHODQgDAAP7OSZ1EHJ1MgJ1IwHOC6iABAAGEnU3Ac4OLAABKnVcBhJ1ewHODiz9JnXEhHJ18gZ11wHODAkgBAAErAMAA/3VKnYUBHJ2SgZ2MwHODAiAAAAAAAD89MJ2aHp21wADQOAAAAAAGwADiw4JzncmdzZ76AACWlAAAAAEDndae+gAAAAIBAZ3cAAAAl1RhAwFgA8AA/htgA8AA/FUAAZ30AAAglpBhAwBgA8AA/hsBagBgA8AA/yV5YAPAAP4bAT4ETp4Jng0AAJfBYAPAAP4bARaeFC5hwAD+70WeIAGeKZ4rAABiYAPAAP4bARyeMYKeLcBzhGyBjQEAAZQAwAD/QgEcnjiDnjbAc4SIgW0BAAGTAMAA/0wBi55AwHOEiByePoOeQMBzhIiBjQEAAZQAwAD/Qj4CTp5PnlcAAJZ7YAPAAP4bARyeXS5LAQABg55ewHOEiADAAP7OSZ5oHJ5wgJ5swHOEMCABAAGEnnHAc4ThAAA+AUqehQGEnozAc4ThP0mepyEcnrKBnqvAc4RISAEAASsAwAD/dUqeuwEcnsiBnsLAc4RIIAAAAAAAPz0wntAenuvAANA4AAAAAAbAAOLEgnOe/58DoQEAAJaXAAAAAQOfDqEBAAAAAgEBnxQAAACXVGEDAWADwAD+G2ADwAD8VQABnywAACCWkGEDAGADwAD+GwFqAGADwAD/JXlgA8AA/hsBPgdOn0GfSAAAgXZbAStOn1mfZwAAwABzJWADwAD8VQEqTp94n3wAAJfBYAPAAP4bARafgy5hwAD+70WfjwGfmJ+aAABiYAPAAP4bAZMBHJ+hhZ+fwHOF/2MBAAGEn6PAc4XjAMAA/0kBjZ+qwHOF/xyfqIWfqsBzhf9kAQABlADAAP9BPgJOn7mfwQAAlntgA8AA/hsBHJ/HLksBAAGFn8jAc4X/AMAA/s5Jn9Icn9qAn9bAc4WIIAEAAYaf28BzhkgAAD4DSZ/vg5/zwHOF0D4BPTCgDh6gKcAA0DkAAAAAPz2KoEbAc4XEhqBPwHOGSD2LoGDAc4XQKT9JoIiDoIzAc4XQSqCbASagmwGCoKLAc4XEYAPAAP4bP0mgriEcoLmBoLLAc4WgSAEAASsAwAD/dUqgwgEcoM+BoMnAc4WgIAAAAAAAPz0woNceoPLAANA4AAAAAAbAAOLFgnOhBqEKoTsAAJaOAAAAAQOhE6E7AAAAAQEBoRgAAAAnYAPAAP4bAABgA8AA/hsBPgFKoSUBHKEwLksBAAGAoTHAc4c4AMAA/s4GwADixoJzoUChRaGdAABWAAAAAQOhSKGdAAAAAQEBoU0AACCAlmADwAD+GwAAXAE+AT0woVofoWTAAP2tAQABJ8AAd8QABsAA4seCc6GioaeiDAAAgKUAAAABA6GtogwAAAABAQGhvAAAIICWXQPAAP59AWADwAD+GwAAXAE+AT0wockfodPAAP2tAQABJ8AAd8QABsAA4siCc6IRohaigQAAnzoAAAABA6IcooEAAAACAgKiIQAAACdgA8AA/hsAoiwAACCAlmADwAD+GwAAXAE+AT0wojkfokPAAP2tAQABJ8AAemcABsAA4smCc6KGooujBAAAoEcAAAABA6KUowQAAAACAgKimQAAACdgA8AA/hsAoq4AACApXQPAAP59AWADwAD+GwAAXAE+AT0worwfosbAAP2tAQABJ8AAemcABsAA4sqCc6MJow6jaAAAgK4AAAABA6MSo2gAAAABAAGjGAAAAJt3YQMCYAPAAP4bYAPAAP4bYAPAAP4bAWoAYAPAAP8leQBcAT4BPR6jO8AA0M4CAWADwAD+GwIuNQAAAAEAYQMCYAPAAP4bYAPAAP4bYAPAAP4bAYCjRsBziMkjHKNOgQDAc4kHSAEAASsAAGqjXGEDAl0DwAD8YQFbXQPAAPxhAVtgA8AA/hvAAYfagQDAc4kHAWEDAmADwAD+G2ADwAD+G2ADwAD+GwAGwADiy4Jzo22jcaRsAACAuwAAAAEDo3ikbAAAAAIBAqN9AAAglntgA8AA/hsAo4sAAABqYAPAAP4bAWqjk2ADwAD+GwkAYAPAAP4bAT4DSaOdHKOngaOhwHOJpYFtAQABFqOvLmHAAP7vAMAA/0w+AUqjvwEco8aUgcYAAAAAwAD+Pkmj1Ryj34Gj2cBziaVjAQABkwDAAP9JPgE9iaPswHOJpZM/RaQBAaQKpAwAAGJgA8AA/hsBgaQOwHOJpQEcpBeCpBXAc4ohYwEAARakHi5hwAD+7wDAAP9JAYqkJsBziiEcpCeCpCbAc4ohZAEAAZQAwAD/QT4BSaQzHKQ/HKQ7LksBAAGCpDzAc4ohAMAA/s5IAQABgKRCwHOJlwDAAP8/SqRLAYKkUsBziiE/SqRfARykZpSBxgAAAADAAP4+BsAA4syCc6RxpHWljQAAlrUAAAABA6SApY0AAAACAQKkhQAAIJZ7YAPAAP4bAKSTAAAAamADwAD+GwFqpJtgA8AA/yV5AGADwAD+GwE+A0mkqCIcpLKBpKzAc4rnSAEAASsAwAD/PwEcpMOBpL3Ac4rngW0BAAEWpMsuYcAA/u8AwAD/TD4BPYmk28BziuccpO8WpOguYcAA/u+BjQEAAZQAwAD/Qkmk/xylCYGlA8BziudjAQABkwDAAP9JPgFKpRYBHKUdlIHGAAAAAMAA/j4/RaUrAaU0pTYAAGJgA8AA/hsBgaU4wHOK5wEcpUGCpT/Ac4uPgW0BAAGTAMAA/0wBiqVHwHOLjxylSIKlR8Bzi4+BjQEAAZQAwAD/Qj4BSaVUHKVgHKVcLksBAAGCpV3Ac4uPAMAA/s5IAQABgKVjwHOK2QDAAP8/SqVsAYKlc8Bzi48/SqWAARylh5SBxgAAAADAAP4+BsAA4s2Cc6WSpZal8QAAhi4AAAABA6WgpfEAAAAAAAAAYAPAAP4bAT4BPTClqR+ls8AA/a0BAAEnwAB3xQAGwADizoJzpfal+qZcAACgRgAAAAEDpgKmXAAAAAEBAaYHAAAAJ2ADwAD+GwAAYAPAAP4bAT4BPTCmFB+mHsAA/a0BAAEnwAB3xQAGwADiz4JzpmGmZqbYAACXUwAAAAEDpnGm2AAAAAEBAaZ3AAAAl1RhAwFgA8AA/htgA8AA/FUAAFwBPgE9MKaQH6aawAD9rQEAASfAAHfFAAbAAOLQgnOm3abip1QAAJdWAAAAAQOm7adUAAAAAQEBpvMAAACXVGEDAWADwAD+G2ADwAD8VQAAXAE+AT0wpwwfpxbAAP2tAQABJ8AAd8UABsAA4tuCc6dZp2GnuwEAgx4AAAABA6dnp7sAAAAAAAAAYAPAAP4bAT4CSadtHKd4FqdxLmHAAP7vgJcBAAGTAMAA/0tKp30BHKeILksBAAGTAMAA/s4/PTCnkR6nrMAA0DgAAAAABsAA4tyCc6fAp8ioKgEAgeoAAAABA6fNqCoAAAAAAAAAYAPAAP4bAT4CSafTHKfeFqfXLmHAAP7vgJcBAAGTAMAA/0tKp+MBHKfuLksBAAEcp/YWp+8uYcAA/u+BjQEAAZQAwAD/QgDAAP7OPz0wqAAeqBvAANA4AAAAAAbAAOLdgnOoL6g3qM4BAIDDAAAAAQOoPqjOAAAAAAAAAGADwAD+GwE+A0moRByoTxaoSC5hwAD+70gBAAGUAMAA/z9KqFUBHKhgLksBAAGTAMAA/s4/SahpHKh0FqhtLmHAAP7vSAEAAZMAwAD/Pz0wqHoeqJXAANA4AAAAAD89MKimHqjBwADQOQAAAAAGwADi0YJzqNOo2KlTAACgSQAAAAEDqN6pUwAAAAICAqjjAAAAJ2ADwAD+GwCo+AAAIIPRXQPAAP59AWADwAD+GwAAXAE+Ak6pDqkSAAGCkGADwAD+GwEcqSQWqR2BqRTAc47nYcAA/qBkAQABgKkmwHOO2gDAAP9BPRypMS6DZAMAA4CpOsBzjtqCqUHAc48CgalGwHOO5wDAAP7kBsAA4tKCc6lYqV2qEgAAnAcAAAABA6lmqhIAAAADAgOpawAAAGpgA8AA/hsAqXYAAACCkGADwAD+GwCpgAAAIMAARHRgA8AA/hsBagBgA8AA/yV5AFwBPgI9HqmdwAD9XAMAA4CprcBzj3eBqbTAc4+EFqm+LmHAAP7vAEWpywGp1KnWAABiYAPAAP4bAYCp2MBzj3cBHKnhg6nfwHOP12MBAAGBqePAc4+EAMAA/0kBi6nqwHOP1xyp6IOp6sBzj9dkAQABlADAAP9BPgE9HKn5LoC/AgACg6n6wHOP14Kp/8Bzj5IAwAD+zwAAc3DNAHNxQABzcWoAc3GSAHNxugBzcgcAc3JoAHNyuwBzczAAc3O7AHN0zQBzdg0Ac3cnAHN3+QBzeUoAc3mtAHN6CABzemsAc3rGAHN7KQBze24Ac3u5AHN8VQBzfJkAc30BAHN9SABzfgkAc384AHOANABzgKMAc4EZAHOB8gBzgsoAc4QQAHOFaABzhxgAc4dnAHOHrQBzh/sAc4hPAHOIqQBziXcAc4q5AHOMIQBzjF8Ac4yqAHOM+gBzjUoAc42wAHOOLABzjroAc49XAHOQQgAAADQCwADi4YJzwAHMBMABzCTAAdCON8AAe6UAAAFgAcAA4qcAAV0BwADWHgFgA8AA5XAAAQXAAOLpAAAAAAQAAAMAAAAAAAAAAABgA8AA4uEBPwEJAADAAOLUAAAAAAQGwADi44JzwAHMJMABzCQAABCgPwDAANXfwADV3wEDAAAAAAADAwMAAAAAamADwAD+GwAAAAAAgpBgA8AA/hsAAAAAIIPRXQPAAP59AVsAAFwBSgABHQCgPwMAA4AAwHORn4EAwHORq4IAwHORuADAANXfBsAA4uWCc6p9qomqoAACwAB6asAA1bwAAAABA6qUqqAAAAABAQGqmQAAAGFgA8AA/hsAAGADwADlcAAGwADi5oJzqqWqqrNvAACDZAAAAAEDqrKzbwAAAAQDBKq3AAAAamADwAD+GwCqwgAAAIKQYAPAAP4bAKrVAAAgloNdA8AA/n0BYAPAAP4bAKrgAAAAoDxgA8AA/hsBaqrsYAPAAP4bCQBcAT4LSasLIiIcqxGTgJcBAAGAqxPAc5JGAMAA/0sBHKsigKscwHOSRoCXAQABgaskwHOSUwDAAP9LARyrL4GrK8BzklOAlwEAARarMS5hwAD+7wDAAP9LPgI9HqtMwAD9XAMAA4CrXMBzkkaBq2PAc5JTFqtoLmHAAP7vAEAqq5CrlQA/SauiHKuwg6umwHOSdmMBAAGTAMAA/0k+AT0wq70fq87AAP1lBAAEg6vUwHOSdpMrJ6A8AD9OrAesDQABgO5gA8AA/hsBHKwTgawPwHOSU4GNAQABgKwVwHOSRgDAAP9CSawgHKw+HKwxFqwqgqwlwHOSYWHAAP6ggY0BAAGDrDPAc5J2AMAA/0JjAQABhKxAwHOTSgDAAP9JPgE9MKxPHqxqwADQOgAAAAA/Sax/HKyJhKyDwHOTSkgBAAGTAMAA/z9KrI8AP0msnCWspYKsoMBzkmFgA8AA1dI+Ak6tLK08AAHAAHprYAPAANXSASatQwCCrT7Ac5JhYAPAANXSSa1cHK14Fq1lLsAAcCrAANXpSAEAARati4Wte8Bzk/HAAHAqwADV1QDAAP8/PgFJrakiHK20hK2uwHOTSmMBAAE3CgDAAP9JACEcrdUWrc6Frb7Ac5Pxgo/AANXXSAEAARat3S6Cj8AA1esAwADXIz4CPR6t+MAAzS4FAAUmrgIAgq39wHOSYV0DwAD+vwFgA8AA/huDrhDAc5J2LoCuIcBzkkaErijAc5NKAEquOgBJrlEcrmcWrmEWrlougo/AANXrt/fAANW8wADXG8AAcCnAANW8BgAGHK6ZHK6EgK5+wHOSRoONAQABFq6GLsAAcCrAANXpAMAA/0NkAQABFq6gLqocwADV6gDAAP9BHK7BhK67wHOTSoONAQABFq7DLsAAcCrAANXpAMAA/0MWrvoWrvOFruPAc5Pxgo/AANXXt/fAANW8wADXGxyvLByvF4OvDcBzknaDjQEAARavGS7AAHAqwADV6QDAAP9DZAEAARavPoWvLsBzk/GqHMAA1dYAwAD/QR6vYcAAzTsBAAEuAB6vgsAAzTsBAAGCr4jAc5JhAADAANXiPgFKr5wAP0mvuxyv1havz4Wvv8Bzk/GCj8AA1ddIAQABFq/eLoKPwADV6wDAANcjPgVOsLSwvwABwAB6bF0DwAD+vwFgA8AA/hsBJrDGAIKwwcBzkmFdA8AA/r8BYAPAAP4bTrDisO0AAcAAem1gA8AA5XABHLDvLsAAemrAANW8AQABhLD7wHOTSgDAANYhRbELAbEUsRYAAGJgA8AA/hsBkwEcsR0UsRvAc5ZRCABjAQABhLEfwHOTSgDAAP9JARWxJsBzllEIHLEnFLEmwHOWUQgAZAEAAZQAwAD/QT4BPRyxQYexN8BzliGAvwIAAhSxQsBzllEIAByxUYaxR8BzlfBLAQABHLFcg7FSwHOSdmQBAAEUsV7Ac5ZRCAAAwAD/QQDAAP7OAMAA/s9FsXQBsX2xfwAAYmADwAD+GwGAsYHAc5JGARyxihSxiMBzlu8IAGMBAAGBsYzAc5JTAMAA/0kBFbGRwHOW7wgcsZIUsZHAc5bvCABkAQABlADAAP9BPgE9HLGmLoC/AgACFLGnwHOW7wgAHLG2h7GswHOWIUsBAAEcsbkUsbfAc5bvCACBjQEAAYCxu8BzkkYAwAD/QgDAAP7OAMAA/s9KsdUAPz9OsfUAAACgPV0DwAD+vwFbAE6yCAAAAKA+YAPAAP4bAEmyGCWyIYKyHMBzkmFdA8AA/r8BYAPAAP4bPgI9jbI3wHOXkRSyQ8BzkmECAV0DwAD+vwFgA8AA/hs9jrJPwHOXooOyXMBzknY+Aj2NsnrAc5eRHLKbHLKLgrKGwHOSYZaEAQABg7KQwHOSdgDAAP6XgK0BAAABhXYqwAD+kz2OsrrAc5eik0my1Byy6xyy44ay2MBzl6JkAQABhLLlwHOTSgDAAP9BgJcBAAEWsveFsu3Ac5eRYcAA/u8AwAD/Sz4BPTCzBx6zIsAA0DoAAAAAPz0eszzAAM0uBQAFhbNBwHOXkYazTMBzl6IugLNewHOSRoSzZcBzk0oABsAA4ueCc7N0s4C0bQAAgVgAAAABA7OHtG0AAAACAQKzjAAAAGpgA8AA/hsAs5gAAACCkGADwAD+GwFqAGADwAD/JXkAYAPAAOVwAT4FPYmzpMBzmNges7XAAP1cAwADgLPFwHOYy4GzzMBzmNgWs9YuYcAA/u8ATrPns+4AAGFgA8AA/hsBHLP0gbPwwHOY2IGNAQABgLP2wHOYywDAAP9CTrQNtBQAAIF2YAPAAOVwARy0Fi7AAHpqwADVvAEAAYK0IsBzmSQAwADWIT0ctDaDtC/Ac5lOg2QEAASTgrRCwHOZJC6AtFDAc5jLAMAA/uRKtFwBg7RjwHOZTgAAc5F4AHOR6wBzkiYAc5irAHOZqAAAAAQCwADi6oJzwAHMBMABzCTAAdCOA8AAe6YBasABzAVgA8AA/BzAAYJAAAFgAcAA4uEAAWABwADlcAAABgbAAOLtgnPAAczjwAHM68ABzV4EBYC1wADVvAJqwAHMsWADwAD8HMABpadqAGADwADNTMABpcMAAAEDwAHM/MABzV4AAAADAwPAAc0IAAAAgo9gA8AA1zUAwAHNFAAAAKocYAPAAP4bAMABzScAAABhYAPAAP4bAABgA8AA4uoABsAA4u+Cc8ABzY/AAc26wAHOkQMASwFqwAHNkGADwAD8HMAAwPoAAAEDwAHNvMABzpEAAAABAQHAAc3BAAAAJ2ADwAD+GwAAYAPAAP4bAT4CScABzc4iHMABzdiAwAHN0sBzmrRjAQABkwDAAP9JARzAAc3lgMABzd/Ac5q0gW0BAAEWwAHN6C5hwADgeQDAAP9MPgE9MMABzfgfwAHOAsAA/XEDAAOAwAHOE8BzmrQuJycAP0rAAc40ARzAAc5PFsABzjsuwAB7g8AA1bzAAOB3wAB6ncAA1bwBAAEcwAHOZxbAAc5ZLqocwADV6mQBAAEcwAHOcIDAAc5qwHOatIONAQABasABznxgA8AA/huDXQDAAP9DAMAA/0EAwADXSgbAAOLwgnPAAc6WwAHOwsABz6UDAIC/AWrAAc6XYAPAAPwcwADA+gAAAQPAAc7FwAHPpQAAAAICAsABzsoAAAAnYAPAAP4bAMABztUAACCAlmADwAD+GwAAXAE+AknAAc7iIhzAAc7sgMABzubAc5vWYwEAAZMAwAD/SQEcwAHO+YDAAc7zwHOb1oFtAQABFsABzvwuYcAA4HkAwAD/TD4BPTDAAc8MH8ABzxbAAP1xAwADgMABzyfAc5vWLicnAD89HMABz1MWwAHPSC7AAHuDwADVvMAA4HfAAHqfwADVvAIAAhzAAc90FsABz2YuqhzAANXqZAEAARzAAc99gMABz3fAc5vWg40BAAFqwAHPiWADwAD+G4NdAMAA/0MAwAD/QYHAAc+bwHOb5QDAANdLBsAA4vWCc8ABz9vAAc/jwAHQIAEAwABwKgAAAAEDwAHP9sAB0CAAAAAAAAAAYAPAAP4bAT4BSsABz/wBasAB0A1gA8AA/huDXQbAAOLygnPAAdBEwAHQTsAB0IwAAMAAemrAANW8AAAAAQPAAdBZwAHQjAAAAAEBAcAB0F4AAABhYAPAAP4bAABgA8AA5XABPgFKwAHQbAEewAHQd8AA5XQBAAGAwAHQgcBznUcABsAA4vOCc8ABzCTAAcwkAAAQoD8AwADV38AA1d8BAwAAAAAAAwMDAAAAAGpgA8AA/hsAAAAAAIKQYAPAAP4bAAAAACCD0V0DwAD+fQFbAABcAUoAAR0AoD8DAAOAAMBznaOBAMBzna+CAMBznbwAwADV3wAAc5n8AHOafABzm50Ac5zOAHOdFwBznXwAc53vAAAABgLAAOL2gnPAAdCRwAHQscAB1Sg3wAB7qAAAAWABwADgcgABYAHAANXnAAEFwADjIwAAAAAEAAADAAAAAAAAAAAAYAPAAOL2AT8BCQAAwADgewAAAAA0BsAA4viCc8AB0LHAAdCxAAAQoD8AwADV38AA1d8BAwAAAAAAAwMDAAAAAGpgA8AA/hsAAAAAAIKQYAPAAP4bAAAAACCD0V0DwAD+fQFbAABcAUoAAR0AoD8DAAOAAMBzno2BAMBznpmCAMBznqYAwADV3wbAAOMlgnOOKo4yjkQBAsAAcCoAAAABA45EjkQAAAAAAAAAYAPAAP4bAAbAAOMmgnOOSI5Qjl0BAqocAAAAAQOOXY5dAAAAAAAAAGADwAD+GwAGwADjJ4JzjmGOcY53AQKCjwAAAAEDjneOdwAAAAAAAABgA8AA1xgABsAA4vmCc458joiOuAAAlpsAAAABA46UjrgAAAEAAIJ6YAPAAP9oAVsAAAAAXQPAAP59AV8DAAABSo6aAR+OnsAA0CsBAV8DAAABLgAGwADi+oJzjr2Oy48rAACWkgAAAAEDjtWPKwAAAAEBAY7kAAAgg9tdA8AA/n0BYAPAAP4bAABdA8AA/n0BYAPAAP4bAUqO9AEejvjAANADAgFgA8AA/hsCLoCPJcBzn8AABsAA4vuCc48wjziPYAAAlo0AAAABA48/j2AAAAEAAJdOYAPAAP9oAVsAAAAAXQPAAP6/AV8DAAABSo9FAR6PSsAA/soBAmADwAD+G18DAAABLgAGwADjLoJzj2SPbY/WAgCDHgAAAAEDj3KP1gAAAAEBAY93AAAggJZgA8AA/hsAAFwBPgJJj4Qcj5QWj40uYcAA/u9IAQABkwDAAP8/PTCPmh+PpMAA/XECAAKTLgA/PRyPxy6AvwIAApOAj83Ac6B0AMAA/s8GwADjL4Jzj9uP5JBaAgCB6gAAAAEDj+iQWgAAAAEBAY/tAAAggJZgA8AA/hsAAFwBPgJJj/ockAoWkAMuYcAA/u9IAQABkwDAAP8/PTCQEB+QGsAA/XECAAKTLgA/PRyQPS6AvwIAAhyQShaQQy5hwAD+74GNAQABlADAAP9CgJBRwHOg6QDAAP7PBsAA4vyCc5BfkGORHAAAoEQAAAABA5BtkRwAAAACAQKQcwAAAJdUYQMBYAPAAP4bYAPAAPxVAJCLAAAAamADwAD+GwFqkJNgA8AA/hsJAGADwAD+GwE+A0mQnRyQp4GQocBzoYtjAQABkwDAAP9JPYmQrMBzoYuTP0WQuwGQxJDGAABiYAPAAP4bAYGQyMBzoYsBHJDRgpDPwHOh0WMBAAEWkNMuYcAA/u8AwAD/SQGKkNvAc6HRHJDcgpDbwHOh0WQBAAGUAMAA/0E+AUmQ6ByQ8ICQ7MBzoXQgAQABHJD1LksBAAGCkPbAc6HRAMAA/s4AAEqQ+wGCkQLAc6HRP0qRDwEckRaUgcYAAAAAwAD+PgbAAOL9gnORIZElkgQAAKBFAAAAAQORM5IEAAAAAgECkTkAAACXVGEDAWADwAD+G2ADwAD8VQCRUQAAAGpgA8AA/hsBagBgA8AA/yV5AGADwAD+GwE+A0mRXyIckWmBkWPAc6KdSAEAASsAwAD/PwEckXqBkXTAc6KdgW0BAAEWkYIuYcAA/u8AwAD/TD2JkYrAc6KdHJGeFpGXLmHAAP7vgY0BAAGUAMAA/0I/RZGnAZGwkbIAAGJgA8AA/hsBgZG0wHOinQEckb2CkbvAc6MXgW0BAAGTAMAA/0wBipHDwHOjFxyRxIKRw8BzoxeBjQEAAZQAwAD/Qj4BSZHQHJHYgJHUwHOihiABAAEckd0uSwEAAYKR3sBzoxcAwAD+zgAASpHjAYKR6sBzoxc/SpH3ARyR/pSBxgAAAADAAP4+BsAA4v6Cc5IJkhyS7wMAZAAAAAEDkh2S7wAAAAEBAZIoAAAgg9tdA8AA/r8BYAPAAP4bAABdA8AA/r8BYAPAAP4bAT4CTpI5kkUAAINeYAPAAP4bARySUxaSTC5hwAD+72QBAAEWkluAklXAc6PFYcAA/u8AwAD/QUqSZwE1knMAAAEAXQPAAP6/AWADwAD+GwExknNgA8AA/hsANQAAAAEAWwEXkn6CknzAc6QkYYGSh8Bzo+zAAP7tNQAAAAEAWwEckpuCkpnAc6Qkg2QDAAOTFpKsLmHAAP7vLgDAAP7kNQAAAAEAWwEcksKCksDAc6Qkg2QDAAMWktAuYcAA/u+BktjAc6PsgJLlwHOjxQDAAP7kggDAc6QkBsAA4v+Cc5L0kvmTmAAAgxwAAAABA5MBk5gAAAABAQGTCQAAAJZ7YAPAAP9oAABgA8AA/FUBPgNOkxyTIAAAl8FgA8AA/hsBFpMnLmHAAP7vRZMzAZM8kz4AAGJgA8AA/hsBkwEck0WCk0PAc6UVYwEAAYGTR8BzpPkAwAD/SQGKk07Ac6UVHJNMgpNOwHOlFWQBAAGUAMAA/0E+AUmTWRyTZRyTYS5LAQABgpNiwHOlFQDAAP7OSAEAAYCTaMBzpOAAwAD/P0qTcQEpP0qTiAEqBsAA4wCCc5Odk6KUiwAAoDMAAAABA5OplIsAAAABAAGTsgAAAKA0YAPAANJ+AWoAYAPAAP8leQBcAT4DPSMck8iAk8HAc6WySAEAASsAwAD/dYiTwcBzpbIek9DAANKAAAAAACsBYAPAANJ+TpPik+QAAGJgA8AA/hsBFpPrLmHAAP7vQ5P3HJQAgZP+wHOl/4CXAQABlADAAP9LPgVOlBGUFQAAoDVgA8AA/hsBHJQegJQXwHOlsqA2AQABgZQmwHOl/wDAANKDPYmUMMBzpf8clDKBlDDAc6X/gY0BAAGUAMAA/0JOlEKURgAAoDdgA8AA/hsBHJRMLksBAAGBlE3Ac6X/AMAA/s49HJRbLoC/AgACgZRcwHOl/xyUZS5LAQABgpRmwHOmMQDAAP7OAMAA/s89HJR2LoC/AgACgpR3wHOmMYOUfsBzpnkAwAD+zwbAAOMBgnOUkJSelNsAAIGlAAAAAQOUo5TbAAAAAQEBlKkAAACBpmEDAWADwAD+G2ADwAD8VQAAXQPAAP59AWADwAD+GwFKlLwBH5TAwADPTQIBYAPAAP4bAi6AlNnAc6cDAAbAAOMCgnOU4JTulSEAAJaZAAAAAQOU8pUhAAAAAQEBlPcAAACDqGADwAD+GwAAXQPAAP59AWADwAD+GwFKlP0BH5UBwADPCAMBYAPAAP4bAy6TgJUfwHOnZgAGwADjA4JzlSaVNJWFAACWmgAAAAEDlT2VhQAAAAEBAZVDAAAAl1RhAwFgA8AA/htgA8AA/FUAAF0DwAD+fQFgA8AA/hsBSpVfAR+VY8AAz5MCAWADwAD+GwIugJWAwHOnwQAGwADjBIJzlYqVmJXOAACWhAAAAAEDlZyVzgAAAAEBAZWhAAAAg6hgA8AA/hsAAF0DwAD+fQFgA8AA/hsBSpWnAR+Vq8AAzwgDAWADwAD+GwMugJXGwHOoJCsABsAA4wWCc5XTleGWMgAAlpgAAAABA5XqljIAAAABAQGV8AAAAJdUYQMBYAPAAP4bYAPAAPxVAABdA8AA/n0BYAPAAP4bAUqWDAEflhDAAM/LAgFgA8AA/hsCLoCWLcBzqH8ABsAA4yiCc5Y3lkmWeAEAmOAAAAABA5ZSlngAAAAAAAAAXQPAAP59AWADwAD+GwFKllUBH5ZZwADQuQEBYAPAAP4bAS4ABsAA4waCc5Z9louWsAAAnMIAAAABA5aQlrAAAAAAAAAAXQPAAP7xAmADwAD+G2ADwAD+GwFKlpYBH5aawADQrwEBYAPAAP4bAS4ABsAA4weCc5a1lsOXVgAAoDkAAAABA5bLl1YAAAACAQKW0AAAAGpgA8AA/hsAltwAAACCkGADwAD+GwFqAGADwAD/JXkAXQPAAP59AWADwAD+GwE+Aj0elvPAAP1cAwADgJcDwHOpcoGXCsBzqX8WlxQuYcAA/u8ASpchAR+XLMAAzwgDAWADwAD+GwMugJdHwHOpcoGXTsBzqX8ABsAA4ymCc5dbl22XmgEAXAAAAAEDl3aXmgAAAAAAAABdA8AA/rgBYAPAAP4bAUqXeQEfl33AAOBxAQFgA8AA/hsBLgAGwADjCIJzl5+XqZgEAACArQAAAAEDl6+YBAAAAAEAAAGXtgAAAIV2YAPAAPxVAWqXwGADwAD8VXddA8AA/r8BYAPAAP4bAT4BSpfNAR6X2MAA/sUCAWADwAD+GwEuAYV2gJf3wHOqUwbAAOMJgnOYCZgSmEIAAJVxAAAAAQOYF5hCAAAAAAAAAF0DwAD/swFgA8AA/hsBPgFKmCABHpgrwADDIwEBYAPAAP4bAS4ABsAA4wqCc5hHmEyYxAAAg/0AAAABA5hTmMQAAAABAQGYWQAAAIGmYQMBYAPAAP4bXAAAXAE+Ak6Yc5h3AACXwWADwAD+GwEWmH4uYcAA/u9FmIoBmJOYlQAAYmADwAD+GwGTARyYnIKYmsBzqzVjAQABgZiewHOrGQDAAP9JAYqYo8BzqzUcmKSCmKPAc6s1ZAEAAZQAwAD/QT4BPRyYsYCYsMBzqwEgAQABHJi2LksBAAGCmLfAc6s1AMAA/s4AAAbAAOMLgnOYyZjNmc4AAJaVAAAAAQOY05nOAAAAAQEBmNgAACCHOWEDAmADwAD+G2ADwAD+G2ADwAD+GwAAYAPAAP4bAT4FTpkDmQcAAJfBYAPAAP4bARaZDi5hwAD+70mZGhyZIoGZHsBzq+pIAQABkwDAAP8/PTCZKB6ZQ8AA0DgAAAAAP06ZWJleAACAlmADwAD+GwEcmWQuSwEAAZMAwAD+zkWZbQGZdpl4AABiYAPAAP4bAZQBHJl/g5l9wHOsS2MBAAGBmYHAc6vqAMAA/0kBi5mIwHOsSxyZhoOZiMBzrEtkAQABlADAAP9BPgE9ipmTwHOsKhyZooCZm8Bzq8IgAgACgpmjwHOsKhyZri5LAQABg5mvwHOsSwDAAP7OAABKmb4BgpnFwHOsKgbAAOMMgnOZ05nVmqwAAINfAAAAAQOZ3JqsAAABAACCemADwAD/aAFbAgICmd8AAACWkV8DAAAAme8AAACHOWEDAl8DAABgA8AA/htfAwAAAABfAwAAAT4DTpofmiMAAJfBYAPAAP4bARaaKi5hwAD+70WaNgGaP5pBAABiYAPAAP4bAZMBHJpIg5pGwHOtR2MBAAGCmkrAc60rAMAA/0kBi5pRwHOtRxyaT4OaUcBzrUdkAQABlADAAP9BPgE9iJpcwHOs/RyacoGaa8BzrQkgAgACgJpzwHOs/RyahS5LAQABg5qGwHOtRwDAAP7OAABKmpUBgJqcwHOs/QbAAOMNgnOasZq9mvwAAICrAAAAAQOaw5r8AAABAACCemADwAD/aAFbAQEBmsYAAACBpmEDAWADwAD+G18DAAAAAF0DwAD+fQFfAwAAAUqa2QEemt3AAM8cAgJgA8AA/htfAwAAAi6AmvrAc635AAbAAOMOgnObAZsNm18AAISVAAAAAQObFptfAAABAACCemADwAD/aAFbAQEBmyMAAACBpmEDAWADwAD+G10DwAD+fQFfAwAAAABdA8AA/n0BXwMAAAFKmzwBH5tAwADPYQICYAPAAP4bXwMAAAIugJtdwHOuaAAGwADjD4Jzm2SbaZwDAACWiwAAAAEDm26cAwAAAAEBAZt0AAAAgaZhAwFgA8AA/htgA8AA/FUAAGADwAD8VQE+A06bjpuSAACXwWADwAD+GwEWm5kuYcAA/u9Fm6UBm66bsAAAYmADwAD+GwGTARybt4KbtcBzrxBjAQABgZu5wHOu9ADAAP9JAYqbwMBzrxAcm76Cm8DAc68QZAEAAZQAwAD/QT4BSZvLIRyb0YCb0MBzrtIgAQABHJvWLksBAAGCm9fAc68QAMAA/s4AAEqb3AEqP0qb9AEpBsAA4xCCc5wInA2cpAAAgdYAAAABA5wQnKQAAAABAQGcFgAAAIGmYQMBYAPAAP4bYAPAAPxVAABgA8AA/FUBPgNOnDCcNAAAl8FgA8AA/hsBFpw7LmHAAP7vRZxHAZxQnFIAAGJgA8AA/hsBkwEcnFmCnFfAc6/pYwEAAYGcW8Bzr80AwAD/SQGKnGLAc6/pHJxggpxiwHOv6WQBAAGUAMAA/0E+AUmcbRyccoCcccBzr6sgAQABHJx3LksBAAGCnHjAc6/pAMAA/s4AAEqcfQEpP0qclAEqBsAA4xGCc5ypnK2dxAAAlo8AAAABA5y3ncQAAAACAQGcvQAAAJdUYQMBYAPAAP4bYAPAAPxVAAGc1QAAIJaQYQMAYAPAAP4bAWoAYAPAAP8leWADwAD+GwE+BE6c6pzuAACXwWADwAD+GwEWnPUuYcAA/u9FnQEBnQqdDAAAYmADwAD+GwGTARydE4OdEcBzsNtjAQABgp0VwHOwvwDAAP9JAYudHMBzsNscnRqDnRzAc7DbZAEAAZQAwAD/QT4CTp0rnTMAAJZ7YAPAAP4bARydOS5LAQABg506wHOw2wDAAP7OSZ1EHJ1MgJ1IwHOwgyABAAGEnU3Ac7EkAABKnVcBhJ1ewHOxJD9JnXEhHJ18gZ11wHOwm0gBAAErAMAA/3VKnYUBHJ2SgZ2MwHOwmyAAAAAAAD89MJ2aHp21wADQOAAAAAAGwADjEoJzncmdzZ76AACWlAAAAAEDndae+gAAAAIBAZ3cAAAAl1RhAwFgA8AA/htgA8AA/FUAAZ30AAAglpBhAwBgA8AA/hsBagBgA8AA/yV5YAPAAP4bAT4ETp4Jng0AAJfBYAPAAP4bARaeFC5hwAD+70WeIAGeKZ4rAABiYAPAAP4bARyeMYKeLcBzsgWBjQEAAZQAwAD/QgEcnjiDnjbAc7IhgW0BAAGTAMAA/0wBi55AwHOyIRyePoOeQMBzsiGBjQEAAZQAwAD/Qj4CTp5PnlcAAJZ7YAPAAP4bARyeXS5LAQABg55ewHOyIQDAAP7OSZ5oHJ5wgJ5swHOxySABAAGEnnHAc7J6AAA+AUqehQGEnozAc7J6P0mepyEcnrKBnqvAc7HhSAEAASsAwAD/dUqeuwEcnsiBnsLAc7HhIAAAAAAAPz0wntAenuvAANA4AAAAAAbAAOMTgnOe/58DoQEAAJaXAAAAAQOfDqEBAAAAAgEBnxQAAACXVGEDAWADwAD+G2ADwAD8VQABnywAACCWkGEDAGADwAD+GwFqAGADwAD/JXlgA8AA/hsBPgdOn0GfSAAAgXZbAStOn1mfZwAAwABzJWADwAD8VQEqTp94n3wAAJfBYAPAAP4bARafgy5hwAD+70WfjwGfmJ+aAABiYAPAAP4bAZMBHJ+hhZ+fwHOzmGMBAAGEn6PAc7N8AMAA/0kBjZ+qwHOzmByfqIWfqsBzs5hkAQABlADAAP9BPgJOn7mfwQAAlntgA8AA/hsBHJ/HLksBAAGFn8jAc7OYAMAA/s5Jn9Icn9qAn9bAc7MhIAEAAYaf28Bzs+EAAD4DSZ/vg5/zwHOzaT4BPTCgDh6gKcAA0DkAAAAAPz2KoEbAc7NdhqBPwHOz4T2LoGDAc7NpKT9JoIiDoIzAc7NpSqCbASagmwGCoKLAc7NdYAPAAP4bP0mgriEcoLmBoLLAc7M5SAEAASsAwAD/dUqgwgEcoM+BoMnAc7M5IAAAAAAAPz0woNceoPLAANA4AAAAAAbAAOMUgnOhBqEKoTsAAJaOAAAAAQOhE6E7AAAAAQEBoRgAAAAnYAPAAP4bAABgA8AA/hsBPgFKoSUBHKEwLksBAAGAoTHAc7TRAMAA/s4GwADjFYJzoUChRaGdAABWAAAAAQOhSKGdAAAAAQEBoU0AACCAlmADwAD+GwAAXAE+AT0woVofoWTAAP2tAQABJ8AAd8QABsAA4xaCc6GioaeiDAAAgKUAAAABA6GtogwAAAABAQGhvAAAIICWXQPAAP59AWADwAD+GwAAXAE+AT0wockfodPAAP2tAQABJ8AAd8QABsAA4xeCc6IRohaigQAAnzoAAAABA6IcooEAAAACAgKiIQAAACdgA8AA/hsAoiwAACCAlmADwAD+GwAAXAE+AT0wojkfokPAAP2tAQABJ8AAemcABsAA4xiCc6KGooujBAAAoEcAAAABA6KUowQAAAACAgKimQAAACdgA8AA/hsAoq4AACApXQPAAP59AWADwAD+GwAAXAE+AT0worwfosbAAP2tAQABJ8AAemcABsAA4xmCc6MJow6jaAAAgK4AAAABA6MSo2gAAAABAAGjGAAAAJt3YQMCYAPAAP4bYAPAAP4bYAPAAP4bAWoAYAPAAP8leQBcAT4BPR6jO8AA0M4CAWADwAD+GwIuNQAAAAEAYQMCYAPAAP4bYAPAAP4bYAPAAP4bAYCjRsBztmIjHKNOgQDAc7agSAEAASsAAGqjXGEDAl0DwAD8YQFbXQPAAPxhAVtgA8AA/hvAAYfagQDAc7agAWEDAmADwAD+G2ADwAD+G2ADwAD+GwAGwADjGoJzo22jcaRsAACAuwAAAAEDo3ikbAAAAAIBAqN9AAAglntgA8AA/hsAo4sAAABqYAPAAP4bAWqjk2ADwAD+GwkAYAPAAP4bAT4DSaOdHKOngaOhwHO3PoFtAQABFqOvLmHAAP7vAMAA/0w+AUqjvwEco8aUgcYAAAAAwAD+Pkmj1Ryj34Gj2cBztz5jAQABkwDAAP9JPgE9iaPswHO3PpM/RaQBAaQKpAwAAGJgA8AA/hsBgaQOwHO3PgEcpBeCpBXAc7e6YwEAARakHi5hwAD+7wDAAP9JAYqkJsBzt7ocpCeCpCbAc7e6ZAEAAZQAwAD/QT4BSaQzHKQ/HKQ7LksBAAGCpDzAc7e6AMAA/s5IAQABgKRCwHO3MADAAP8/SqRLAYKkUsBzt7o/SqRfARykZpSBxgAAAADAAP4+BsAA4xuCc6RxpHWljQAAlrUAAAABA6SApY0AAAACAQKkhQAAIJZ7YAPAAP4bAKSTAAAAamADwAD+GwFqpJtgA8AA/yV5AGADwAD+GwE+A0mkqCIcpLKBpKzAc7iASAEAASsAwAD/PwEcpMOBpL3Ac7iAgW0BAAEWpMsuYcAA/u8AwAD/TD4BPYmk28BzuIAcpO8WpOguYcAA/u+BjQEAAZQAwAD/Qkmk/xylCYGlA8BzuIBjAQABkwDAAP9JPgFKpRYBHKUdlIHGAAAAAMAA/j4/RaUrAaU0pTYAAGJgA8AA/hsBgaU4wHO4gAEcpUGCpT/Ac7kogW0BAAGTAMAA/0wBiqVHwHO5KBylSIKlR8BzuSiBjQEAAZQAwAD/Qj4BSaVUHKVgHKVcLksBAAGCpV3Ac7koAMAA/s5IAQABgKVjwHO4cgDAAP8/SqVsAYKlc8BzuSg/SqWAARylh5SBxgAAAADAAP4+BsAA4xyCc6WSpZal8QAAhi4AAAABA6WgpfEAAAAAAAAAYAPAAP4bAT4BPTClqR+ls8AA/a0BAAEnwAB3xQAGwADjHYJzpfal+qZcAACgRgAAAAEDpgKmXAAAAAEBAaYHAAAAJ2ADwAD+GwAAYAPAAP4bAT4BPTCmFB+mHsAA/a0BAAEnwAB3xQAGwADjHoJzpmGmZqbYAACXUwAAAAEDpnGm2AAAAAEBAaZ3AAAAl1RhAwFgA8AA/htgA8AA/FUAAFwBPgE9MKaQH6aawAD9rQEAASfAAHfFAAbAAOMfgnOm3abip1QAAJdWAAAAAQOm7adUAAAAAQEBpvMAAACXVGEDAWADwAD+G2ADwAD8VQAAXAE+AT0wpwwfpxbAAP2tAQABJ8AAd8UABsAA4yqCc6dZp2GnuwEAgx4AAAABA6dnp7sAAAAAAAAAYAPAAP4bAT4CSadtHKd4FqdxLmHAAP7vgJcBAAGTAMAA/0tKp30BHKeILksBAAGTAMAA/s4/PTCnkR6nrMAA0DgAAAAABsAA4yuCc6fAp8ioKgEAgeoAAAABA6fNqCoAAAAAAAAAYAPAAP4bAT4CSafTHKfeFqfXLmHAAP7vgJcBAAGTAMAA/0tKp+MBHKfuLksBAAEcp/YWp+8uYcAA/u+BjQEAAZQAwAD/QgDAAP7OPz0wqAAeqBvAANA4AAAAAAbAAOMsgnOoL6g3qM4BAIDDAAAAAQOoPqjOAAAAAAAAAGADwAD+GwE+A0moRByoTxaoSC5hwAD+70gBAAGUAMAA/z9KqFUBHKhgLksBAAGTAMAA/s4/SahpHKh0FqhtLmHAAP7vSAEAAZMAwAD/Pz0wqHoeqJXAANA4AAAAAD89MKimHqjBwADQOQAAAAAGwADjIIJzqNOo2KlTAACgSQAAAAEDqN6pUwAAAAICAqjjAAAAJ2ADwAD+GwCo+AAAIIPRXQPAAP59AWADwAD+GwAAXAE+Ak6pDqkSAAGCkGADwAD+GwEcqSQWqR2BqRTAc7yAYcAA/qBkAQABgKkmwHO8cwDAAP9BPRypMS6DZAMAA4CpOsBzvHOCqUHAc7ybgalGwHO8gADAAP7kBsAA4yGCc6lYqV2qEgAAnAcAAAABA6lmqhIAAAADAgOpawAAAGpgA8AA/hsAqXYAAACCkGADwAD+GwCpgAAAIMAARHRgA8AA/hsBagBgA8AA/yV5AFwBPgI9HqmdwAD9XAMAA4CprcBzvRCBqbTAc70dFqm+LmHAAP7vAEWpywGp1KnWAABiYAPAAP4bAYCp2MBzvRABHKnhg6nfwHO9cGMBAAGBqePAc70dAMAA/0kBi6nqwHO9cByp6IOp6sBzvXBkAQABlADAAP9BPgE9HKn5LoC/AgACg6n6wHO9cIKp/8BzvSsAwAD+zwAAc55mAHOe2QBznwMAc58rAHOfUwBzn6AAc6ABAHOgVABzoMkAc6FUAHOiZgBzo6YAc6TAAHOlkgBzpuMAc6dGAHOnoQBzqAQAc6hfAHOowgBzqQcAc6lSAHOp7gBzqjIAc6qaAHOq4QBzq6IAc6zRAHOtzQBzrjwAc66yAHOviwBzsGMAc7GpAHOzAQBztLEAc7UAAHO1RgBztZQAc7XoAHO2QgBztxAAc7hSAHO5ugBzufgAc7pDAHO6kwBzuuMAc7tJAHO7xQBzvFMAc7zwAHO92wAAADQCwADjMIJzwAHQkcAB0LHAAdUoN8AAe6kAAAFgAcAA4vYAAV0BwADWHgFgA8AA5XkAAQXAAOM4AAAAAAQAAAMAAAAAAAAAAABgA8AA4zABPwEJAADAAOMjAAAAAAQGwADjMoJzwAHQscAB0LEAABCgPwDAANXfwADV3wEDAAAAAAADAwMAAAAAamADwAD+GwAAAAAAgpBgA8AA/hsAAAAAIIPRXQPAAP59AVsAAFwBSgABHQCgPwMAA4AAwHO/OIEAwHO/RIIAwHO/UQDAANXfBsAA4zSCc6p9qomqoAACwAB6asAA1bwAAAABA6qUqqAAAAABAQGqmQAAAGFgA8AA/hsAAGADwADleQAGwADjNYJzqqWqqrNvAACDZAAAAAEDqrKzbwAAAAQDBKq3AAAAamADwAD+GwCqwgAAAIKQYAPAAP4bAKrVAAAgloNdA8AA/n0BYAPAAP4bAKrgAAAAoDxgA8AA/hsBaqrsYAPAAP4bCQBcAT4LSasLIiIcqxGTgJcBAAGAqxPAc7/fAMAA/0sBHKsigKscwHO/34CXAQABgaskwHO/7ADAAP9LARyrL4GrK8Bzv+yAlwEAARarMS5hwAD+7wDAAP9LPgI9HqtMwAD9XAMAA4CrXMBzv9+Bq2PAc7/sFqtoLmHAAP7vAEAqq5CrlQA/SauiHKuwg6umwHPAD2MBAAGTAMAA/0k+AT0wq70fq87AAP1lBAAEg6vUwHPAD5MrJ6A8AD9OrAesDQABgO5gA8AA/hsBHKwTgawPwHO/7IGNAQABgKwVwHO/3wDAAP9CSawgHKw+HKwxFqwqgqwlwHO/+mHAAP6ggY0BAAGDrDPAc8APAMAA/0JjAQABhKxAwHPA4wDAAP9JPgE9MKxPHqxqwADQOgAAAAA/Sax/HKyJhKyDwHPA40gBAAGTAMAA/z9KrI8AP0msnCWspYKsoMBzv/pgA8AA1dI+Ak6tLK08AAHAAHprYAPAANXSASatQwCCrT7Ac7/6YAPAANXSSa1cHK14Fq1lLsAAcCrAANXpSAEAARati4Wte8BzwYrAAHAqwADV1QDAAP8/PgFJrakiHK20hK2uwHPA42MBAAE3CgDAAP9JACEcrdUWrc6Frb7Ac8GKgo/AANXXSAEAARat3S6Cj8AA1esAwADXIz4CPR6t+MAAzS4FAAUmrgIAgq39wHO/+l0DwAD+vwFgA8AA/huDrhDAc8APLoCuIcBzv9+ErijAc8DjAEquOgBJrlEcrmcWrmEWrlougo/AANXrt/fAANW8wADXG8AAcCnAANW8BgAGHK6ZHK6EgK5+wHO/34ONAQABFq6GLsAAcCrAANXpAMAA/0NkAQABFq6gLqocwADV6gDAAP9BHK7BhK67wHPA44ONAQABFq7DLsAAcCrAANXpAMAA/0MWrvoWrvOFruPAc8GKgo/AANXXt/fAANW8wADXGxyvLByvF4OvDcBzwA+DjQEAARavGS7AAHAqwADV6QDAAP9DZAEAARavPoWvLsBzwYqqHMAA1dYAwAD/QR6vYcAAzTsBAAEuAB6vgsAAzTsBAAGCr4jAc7/6AADAANXiPgFKr5wAP0mvuxyv1havz4Wvv8BzwYqCj8AA1ddIAQABFq/eLoKPwADV6wDAANcjPgVOsLSwvwABwAB6bF0DwAD+vwFgA8AA/hsBJrDGAIKwwcBzv/pdA8AA/r8BYAPAAP4bTrDisO0AAcAAem1gA8AA5XkBHLDvLsAAemrAANW8AQABhLD7wHPA4wDAANYhRbELAbEUsRYAAGJgA8AA/hsBkwEcsR0UsRvAc8PqCABjAQABhLEfwHPA4wDAAP9JARWxJsBzw+oIHLEnFLEmwHPD6ggAZAEAAZQAwAD/QT4BPRyxQYexN8Bzw7qAvwIAAhSxQsBzw+oIAByxUYaxR8Bzw4lLAQABHLFcg7FSwHPAD2QBAAEUsV7Ac8PqCAAAwAD/QQDAAP7OAMAA/s9FsXQBsX2xfwAAYmADwAD+GwGAsYHAc7/fARyxihSxiMBzxIgIAGMBAAGBsYzAc7/sAMAA/0kBFbGRwHPEiAgcsZIUsZHAc8SICABkAQABlADAAP9BPgE9HLGmLoC/AgACFLGnwHPEiAgAHLG2h7GswHPDuksBAAEcsbkUsbfAc8SICACBjQEAAYCxu8Bzv98AwAD/QgDAAP7OAMAA/s9KsdUAPz9OsfUAAACgPV0DwAD+vwFbAE6yCAAAAKA+YAPAAP4bAEmyGCWyIYKyHMBzv/pdA8AA/r8BYAPAAP4bPgI9jbI3wHPFKhSyQ8Bzv/oCAV0DwAD+vwFgA8AA/hs9jrJPwHPFO4OyXMBzwA8+Aj2NsnrAc8UqHLKbHLKLgrKGwHO/+paEAQABg7KQwHPADwDAAP6XgK0BAAABhXYqwAD+kz2OsrrAc8U7k0my1Byy6xyy44ay2MBzxTtkAQABhLLlwHPA4wDAAP9BgJcBAAEWsveFsu3Ac8UqYcAA/u8AwAD/Sz4BPTCzBx6zIsAA0DoAAAAAPz0eszzAAM0uBQAFhbNBwHPFKoazTMBzxTsugLNewHO/34SzZcBzwOMABsAA4zaCc7N0s4C0bQAAgVgAAAABA7OHtG0AAAACAQKzjAAAAGpgA8AA/hsAs5gAAACCkGADwAD+GwFqAGADwAD/JXkAYAPAAOV5AT4FPYmzpMBzxnEes7XAAP1cAwADgLPFwHPGZIGzzMBzxnEWs9YuYcAA/u8ATrPns+4AAGFgA8AA/hsBHLP0gbPwwHPGcYGNAQABgLP2wHPGZADAAP9CTrQNtBQAAIF2YAPAAOV5ARy0Fi7AAHpqwADVvAEAAYK0IsBzxr0AwADWIT0ctDaDtC/Ac8bng2QEAASTgrRCwHPGvS6AtFDAc8ZkAMAA/uRKtFwBg7RjwHPG5wAAc78RAHO/hABzv78Ac8ZEAHPHQQAAAAQCwADjOYJzwAHQkcAB0LHAAdUoA8AAe6oBasAB0JJgA8AA/BzAAYJAAAFgAcAA4zAAAWABwADleQAABgbAAOM8gnPAAdF0wAHRfMAB0fEEBYC1wADVvAJqwAHRQWADwAD8HMABpdlqAGADwADNTMABpfUAAAEDwAHRjsAB0fEAAAADAwPAAdGaAAAAgo9gA8AA1zUAwAHRpgAAAKocYAPAAP4bAMAB0bkAAABhYAPAAP4bAABgA8AA4zkABsAA4z6Cc8AB0iLAAdJNwAHTJgMASwFqwAHSI2ADwAD8HMAAwPoAAAEDwAHST8AB0yYAAAABAQHAAdJUAAAAJ2ADwAD+GwAAYAPAAP4bAT4CScAB0mEiHMAB0muAwAHSZcBzyE1jAQABkwDAAP9JARzAAdJ4gMAB0nLAc8hNgW0BAAEWwAHSey5hwADgeQDAAP9MPgE9MMAB0osfwAHSlcAA/XEDAAOAwAHSpsBzyE0uJycAP0rAAdLHARzAAdLiFsAB0s4uwAB7g8AA1bzAAOB3wAB6ocAA1bwBAAEcwAHS+xbAAdLtLqocwADV6mQBAAEcwAHTBIDAAdL+wHPITYONAQABasAB0xFgA8AA/huDXQDAAP9DAMAA/0EAwADXTAbAAOM/gnPAAdMrwAHTV8AB1DwDAIC/AWrAAdMsYAPAAPwcwADA+gAAAQPAAdNawAHUPAAAAAICAsAB018AAAAnYAPAAP4bAMAB02oAACCAlmADwAD+GwAAXAE+AknAAdN3IhzAAdOBgMAB03vAc8lvYwEAAZMAwAD/SQEcwAHTjoDAAdOIwHPJb4FtAQABFsAB05EuYcAA4HkAwAD/TD4BPTDAAdOhH8AB06vAAP1xAwADgMAB07zAc8lvLicnAD89HMAB0+gWwAHT3S7AAHuDwADVvMAA4HfAAHqjwADVvAIAAhzAAdQKFsAB0/wuqhzAANXqZAEAARzAAdQTgMAB1A3Ac8lvg40BAAFqwAHUIGADwAD+G4NdAMAA/0MAwAD/QYHAAdQywHPJfgDAANdNBsAA40SCc8AB1HLAAdR6wAHUuAEAwABwKgAAAAEDwAHUjcAB1LgAAAAAAAAAYAPAAP4bAT4BSsAB1JMBasAB1KVgA8AA/huDXQbAAONBgnPAAdTcwAHU58AB1SYAAMAAemrAANW8AAAAAQPAAdTywAHVJgAAAAEBAcAB1PcAAABhYAPAAP4bAABgA8AA5XkBPgFKwAHVBQEewAHVEMAA5X0BAAGAwAHVG8BzyuAABsAA40KCc8AB0LHAAdCxAAAQoD8AwADV38AA1d8BAwAAAAAAAwMDAAAAAGpgA8AA/hsAAAAAAIKQYAPAAP4bAAAAACCD0V0DwAD+fQFbAABcAUoAAR0AoD8DAAOAAMBzyzyBAMBzy0iCAMBzy1UAwADV3wAAc8eVAHPIFQBzyTYAc8pnAHPKsABzyxUAc8uIAAAABgLAAONFgnPAAdUrwAHVS8AB2ds3wAB7rAAAAWABwADgcgABYAHAANYkAAEFwADjcgAAAAAEAAADAAAAAAAAAAAAYAPAAONFAT8BCQAAwADgewAAAAA0BsAA40eCc8AB1UvAAdVLAAAQoD8AwADV38AA1d8BAwAAAAAAAwMDAAAAAGpgA8AA/hsAAAAAAIKQYAPAAP4bAAAAACCD0V0DwAD+fQFbAABcAUoAAR0AoD8DAAOAAMBzzCaBAMBzzDKCAMBzzD8AwADV3wbAAON0gnO0pbSttL8BAsAAcCoAAAABA7S/tL8AAAAAAAAAYAPAAP4bAAbAAON1gnO0w7TLtNgBAqocAAAAAQO02LTYAAAAAAAAAGADwAD+GwAGwADjdoJztNy07LTyAQKCjwAAAAEDtPK08gAAAAAAAABgA8AA1xgABsAA40iCc7T3tQO1MwAAlpsAAAABA7UPtTMAAAEAAIJ6YAPAAP9oAVsAAAAAXQPAAP59AV8DAAABSrUVAR+1GcAA0CsBAV8DAAABLgAGwADjSYJztTi1SbWvAACWkgAAAAEDtVO1rwAAAAEBAbVlAAAgg9tdA8AA/n0BYAPAAPzNAABdA8AA/n0BYAPAAPzNAUq1dQEetXnAANADAgFgA8AA/M0CLoC1qcBzzVkABsAA40qCc7W0tby15wAAlo0AAAABA7XDtecAAAEAAJdOYAPAAP9oAVsAAAAAXQPAAP6/AV8DAAABSrXJAR61zsAA/soBAmADwAD8zV8DAAABLgAGwADjfYJzteu19LZgAgCDHgAAAAEDtfm2YAAAAAEBAbYBAAAggJZgA8AA/M0AAFwBPgJJtg4cth4WthcuYcAA/u9IAQABkwDAAP8/PTC2JB+2LsAA/XECAAKTLgA/PRy2US6AvwIAApOAtlfAc84NAMAA/s8GwADjfoJztmW2brbnAgCB6gAAAAEDtnK25wAAAAEBAbZ6AAAggJZgA8AA/M0AAFwBPgJJtocctpcWtpAuYcAA/u9IAQABkwDAAP8/PTC2nR+2p8AA/XECAAKTLgA/PRy2yi6AvwIAAhy21xa20C5hwAD+74GNAQABlADAAP9CgLbewHPOggDAAP7PBsAA40uCc7bstvC3rAAAoEQAAAABA7b6t6wAAAACAQK3AAAAAJdUYQMBYAPAAPzNYAPAAPxVALcbAAAAamADwAD+GwFqtyNgA8AA/hsJAGADwAD+GwE+A0m3LRy3N4G3McBzzyRjAQABkwDAAP9JPYm3PMBzzySTP0W3SwG3VLdWAABiYAPAAP4bAYG3WMBzzyQBHLdhgrdfwHPPamMBAAEWt2MuYcAA/u8AwAD/SQGKt2vAc89qHLdsgrdrwHPPamQBAAGUAMAA/0E+AUm3eBy3gIC3fMBzzw0gAQABHLeFLksBAAGCt4bAc89qAMAA/s4AAEq3iwGCt5LAc89qP0q3nwEct6aUgcYAAAAAwAD+PgbAAONMgnO3sbe1uJcAAKBFAAAAAQO3w7iXAAAAAgECt8kAAACXVGEDAWADwAD8zWADwAD8VQC35AAAAGpgA8AA/hsBagBgA8AA/yV5AGADwAD+GwE+A0m38iIct/yBt/bAc9A2SAEAASsAwAD/PwEcuA2BuAfAc9A2gW0BAAEWuBUuYcAA/u8AwAD/TD2JuB3Ac9A2HLgxFrgqLmHAAP7vgY0BAAGUAMAA/0I/Rbg6AbhDuEUAAGJgA8AA/hsBgbhHwHPQNgEcuFCCuE7Ac9CwgW0BAAGTAMAA/0wBirhWwHPQsBy4V4K4VsBz0LCBjQEAAZQAwAD/Qj4BSbhjHLhrgLhnwHPQHyABAAEcuHAuSwEAAYK4ccBz0LAAwAD+zgAASrh2AYK4fcBz0LA/SriKARy4kZSBxgAAAADAAP4+BsAA402Cc7icuLK5iwMAZAAAAAEDuLO5iwAAAAEBAbjBAAAgg9tdA8AA/r8BYAPAAPzNAABdA8AA/r8BYAPAAPzNAT4CTrjSuN4AAINeYAPAAP4bARy47Ba45S5hwAD+72QBAAEWuPSAuO7Ac9FeYcAA/u8AwAD/QUq5AAE1uQ8AAAEAXQPAAP6/AWADwAD8zQExuQ9gA8AA/M0ANQAAAAEAWwEXuRqCuRjAc9G9YYG5I8Bz0YXAAP7tNQAAAAEAWwEcuTeCuTXAc9G9g2QDAAOTFrlILmHAAP7vLgDAAP7kNQAAAAEAWwEcuV6CuVzAc9G9g2QDAAMWuWwuYcAA/u+BuXTAc9GFgLmBwHPRXgDAAP7kggDAc9G9BsAA406Cc7mQuZW6NAAAgxwAAAABA7mdujQAAAABAQG5pQAAAJZ7YAPAAP9oAABgA8AA/FUBPgNOubi5vAAAl8FgA8AA/hsBFrnDLmHAAP7vRbnPAbnYudoAAGJgA8AA/hsBkwEcueGCud/Ac9KuYwEAAYG548Bz0pIAwAD/SQGKuerAc9KuHLnogrnqwHPSrmQBAAGUAMAA/0E+AUm59Ry6ARy5/S5LAQABgrn+wHPSrgDAAP7OSAEAAYC6BMBz0nkAwAD/P0q6DQEpP0q6JAEqBsAA40+Cc7o5uj67JwAAoDMAAAABA7pFuycAAAABAAG6TgAAAKA0YAPAANJ+AWoAYAPAAP8leQBcAT4DPSMcumSAul3Ac9NLSAEAASsAwAD/dYi6XcBz00seumzAANKAAAAAACsBYAPAANJ+Trp+uoAAAGJgA8AA/hsBFrqHLmHAAP7vQ7qTHLqcgbqawHPTmICXAQABlADAAP9LPgVOuq26sQAAoDVgA8AA/hsBHLq6gLqzwHPTS6A2AQABgbrCwHPTmADAANKDPYm6zMBz05gcus6BuszAc9OYgY0BAAGUAMAA/0JOut664gAAoDdgA8AA/M0BHLroLksBAAGBuunAc9OYAMAA/s49HLr3LoC/AgACgbr4wHPTmBy7AS5LAQABgrsCwHPTygDAAP7OAMAA/s89HLsSLoC/AgACgrsTwHPTyoO7GsBz1BIAwAD+zwbAAONQgnO7LLs9u4YAAIGlAAAAAQO7QruGAAAAAQEBu0gAAACBpmEDAWADwAD8zWADwAD8VQAAXQPAAP59AWADwAD8zQFKu2QBH7towADPTQIBYAPAAPzNAi6Au4TAc9ScAAbAAONRgnO7i7ucu9IAAJaZAAAAAQO7oLvSAAAAAQEBu6UAAACDqGADwAD+GwAAXQPAAP59AWADwAD8zQFKu6sBH7uvwADPCAMBYAPAAPzNAy6TgLvQwHPU/wAGwADjUoJzu9e76Lw/AACWmgAAAAEDu/G8PwAAAAEBAbv3AAAAl1RhAwFgA8AA/M1gA8AA/FUAAF0DwAD+fQFgA8AA/M0BSrwWAR+8GsAAz5MCAWADwAD8zQIugLw6wHPVWgAGwADjU4JzvES8VbyOAACWhAAAAAEDvFm8jgAAAAEBAbxeAAAAg6hgA8AA/hsAAF0DwAD+fQFgA8AA/M0BSrxkAR+8aMAAzwgDAWADwAD8zQMugLyGwHPVvSsABsAA41SCc7yTvKS8+wAAlpgAAAABA7ytvPsAAAABAQG8swAAAJdUYQMBYAPAAPzNYAPAAPxVAABdA8AA/n0BYAPAAPzNAUq80gEfvNbAAM/LAgFgA8AA/M0CLoC89sBz1hgABsAA43eCc70AvRW9RwEAmOAAAAABA70evUcAAAAAAAAAXQPAAP59AWADwAD8zQFKvSEBH70lwADQuQEBYAPAAPzNAS4ABsAA41WCc71MvV29hQAAnMIAAAABA71ivYUAAAAAAAAAXQPAAP7xAmADwAD+G2ADwAD8zQFKvWgBH71swADQrwEBYAPAAPzNAS4ABsAA41aCc72KvZu+MQAAoDkAAAABA72jvjEAAAACAQK9qAAAAGpgA8AA/hsAvbQAAACCkGADwAD+GwFqAGADwAD/JXkAXQPAAP59AWADwAD8zQE+Aj0evcvAAP1cAwADgL3bwHPXC4G94sBz1xgWvewuYcAA/u8ASr35AR++BMAAzwgDAWADwAD8zQMugL4iwHPXC4G+KcBz1xgABsAA43iCc742vku+ewEAXAAAAAEDvlS+ewAAAAAAAABdA8AA/rgBYAPAAPzNAUq+VwEfvlvAAOBxAQFgA8AA/M0BLgAGwADjV4JzvoC+jb7rAACArQAAAAEDvpO+6wAAAAEAAAG+mgAAAIV2YAPAAPxVAWq+pGADwAD8VXddA8AA/r8BYAPAAPzNAT4BSr6xAR6+vMAA/sUCAWADwAD8zQEuAYV2gL7ewHPX7AbAAONYgnO+8L78vy8AAJVxAAAAAQO/Ab8vAAAAAAAAAF0DwAD/swFgA8AA/M0BPgFKvwoBHr8VwADDIwEBYAPAAPzNAS4ABsAA41mCc780vzm/tAAAg/0AAAABA79Av7QAAAABAQG/RgAAAIGmYQMBYAPAAPzNXAAAXAE+Ak6/Y79nAACXwWADwAD+GwEWv24uYcAA/u9Fv3oBv4O/hQAAYmADwAD+GwGTARy/jIK/isBz2M5jAQABgb+OwHPYsgDAAP9JAYq/k8Bz2M4cv5SCv5PAc9jOZAEAAZQAwAD/QT4BPRy/oYC/oMBz2JogAQABHL+mLksBAAGCv6fAc9jOAMAA/s4AAAbAAONagnO/ub/AwABAygAAlpUAAAABA7/GwABAygAAAAEBAb/OAAAghzlhAwJgA8AA/M1gA8AA/M1gA8AA/M0AAGADwAD8zQE+BU6//8AAQAMAAJfBYAPAAP4bARbAAEAKLmHAAP7vScAAQBYcwABAHoHAAEAawHPZh0gBAAGTAMAA/z89MMAAQCQewABAP8AA0DgAAAAAP07AAEBUwABAWgAAgJZgA8AA/M0BHMAAQGAuSwEAAZMAwAD+zkXAAEBpAcAAQHLAAEB0AABiYAPAAP4bAZQBHMAAQHuDwABAecBz2f5jAQABgcAAQH3Ac9mHAMAA/0kBi8AAQITAc9n+HMAAQIKDwABAhMBz2f5kAQABlADAAP9BPgE9isAAQI/Ac9nVHMAAQJ6AwABAl8Bz2V8gAgACgsAAQJ/Ac9nVHMAAQKouSwEAAYPAAECrwHPZ/gDAAP7OAABKwABAugGCwABAwcBz2dUGwADjW4JzwABAz8AAQNHAAEGrAACDXwAAAAEDwABA2MAAQasAAAEAAIJ6YAPAAP9oAVsCAgLAAEDbAAAAlpFfAwAAAMAAQOsAAACHOWEDAl8DAABgA8AA/M1fAwAAAABfAwAAAT4DTsAAQR7AAEEiAACXwWADwAD+GwEWwABBKS5hwAD+70XAAEE1AcAAQT7AAEFAAABiYAPAAP4bAZMBHMAAQUeDwABBRcBz2zBjAQABgsAAQUnAc9sMAMAA/0kBi8AAQVDAc9swHMAAQU6DwABBUMBz2zBkAQABlADAAP9BPgE9iMAAQVvAc9raHMAAQXGBwABBasBz2uggAgACgMAAQXLAc9raHMAAQYQuSwEAAYPAAEGFwHPbMADAAP7OAABKwABBlAGAwABBm8Bz2toGwADjXIJzwABBsMAAQbzAAEIHAACAqwAAAAEDwABBwsAAQgcAAAEAAIJ6YAPAAP9oAVsBAQHAAEHFAAAAgaZhAwFgA8AA/M1fAwAAAABdA8AA/n0BXwMAAAFKwABB4QEewABB5cAAzxwCAmADwAD8zV8DAAACLoDAAEIFwHPcDAAGwADjXYJzwABCDMAAQhjAAEJwAACElQAAAAEDwABCIcAAQnAAAAEAAIJ6YAPAAP9oAVsBAQHAAEIuAAAAgaZhAwFgA8AA/M1dA8AA/n0BXwMAAAAAXQPAAP59AV8DAAABSsAAQkoBH8AAQk7AAM9hAgJgA8AA/M1fAwAAAi6AwABCbsBz3I0ABsAA416Cc8AAQnXAAEJ6wABDFwAAlosAAAABA8AAQn/AAEMXAAAAAQEBwABChQAAAIGmYQMBYAPAAPzNYAPAAPxVAABgA8AA/FUBPgNOwABCosAAQqYAAJfBYAPAAP4bARbAAEKtLmHAAP7vRcAAQrkBwABCwsAAQsQAAGJgA8AA/hsBkwEcwABCy4LAAELJwHPdUWMBAAGBwABCzcBz3S0AwAD/SQGKwABC1MBz3VEcwABC0oLAAELUwHPdUWQBAAGUAMAA/0E+AUnAAELfIRzAAELlgMAAQuTAc90JIAEAARzAAELqLksBAAGCwABC68Bz3VEAwAD+zgAASsAAQvABKj9KwABDCAEpBsAA41+Cc8AAQxzAAEMhwABDuwAAgdYAAAABA8AAQyTAAEO7AAAAAQEBwABDKgAAAIGmYQMBYAPAAPzNYAPAAPxVAABgA8AA/FUBPgNOwABDR8AAQ0sAAJfBYAPAAP4bARbAAENSLmHAAP7vRcAAQ14BwABDZ8AAQ2kAAGJgA8AA/hsBkwEcwABDcILAAENuwHPeXGMBAAGBwABDcsBz3jgAwAD/SQGKwABDecBz3lwcwABDd4LAAEN5wHPeXGQBAAGUAMAA/0E+AUnAAEOEHMAAQ4mAwABDiMBz3hQgAQABHMAAQ44uSwEAAYLAAEOPwHPeXADAAP7OAABKwABDlAEpP0rAAEOrASoGwADjYIJzwABDwMAAQ8fAAETkAACWjwAAAAEDwABD0cAAROQAAAACAQHAAEPXAAAAl1RhAwFgA8AA/M1gA8AA/FUAAcAAQ/UAACCWkGEDAGADwAD8zQFqAGADwAD/JXlgA8AA/M0BPgROwABECsAARA4AAJfBYAPAAP4bARbAAEQVLmHAAP7vRcAARCEBwABEKsAARCwAAGJgA8AA/hsBkwEcwABEM4PAAEQxwHPfgmMBAAGCwABENcBz314AwAD/SQGLwABEPMBz34IcwABEOoPAAEQ8wHPfgmQBAAGUAMAA/0E+Ak7AAERLwABEUwAAlntgA8AA/M0BHMAARFkuSwEAAYPAAERawHPfggDAAP7OScAARGQcwABEbIDAAERowHPfHiABAAGEwABEbcBz39sAAErAAER3AYTAAER+wHPf2z9JwABEkSEcwABEnIHAAESVwHPfOEgBAAErAMAA/3VKwABEpQEcwABEsoHAAESswHPfOCAAAAAAAD89MMAARLoewABE1cAA0DgAAAAABsAA42GCc8AAROnAAETwwABGIwAAlpQAAAABA8AARPnAAEYjAAAAAgEBwABE/wAAAJdUYQMBYAPAAPzNYAPAAPxVAAHAAEUdAAAglpBhAwBgA8AA/M0BagBgA8AA/yV5YAPAAPzNAT4ETsAARTLAAEU2AACXwWADwAD+GwEWwABFPS5hwAD+70XAAEVJAcAARVLAAEVUAABiYAPAAP4bARzAAEVagsAARVbAc+DugY0BAAGUAMAA/0IBHMAARWGDwABFX8Bz4RKBbQEAAZMAwAD/TAGLwABFacBz4RIcwABFZ4PAAEVpwHPhEoGNAQABlADAAP9CPgJOwABFeMAARYAAAJZ7YAPAAPzNARzAAEWGLksBAAGDwABFh8Bz4RIAwAD+zknAAEWRHMAARZmAwABFlcBz4K4gAQABhMAARZrAc+F9AAA+AUrAAEWuAYTAAEW1wHPhfT9JwABF0CEcwABF24HAAEXUwHPgyEgBAAErAMAA/3VKwABF5AEcwABF8YHAAEXrwHPgyCAAAAAAAD89MMAARfkewABGFMAA0DgAAAAABsAA42KCc8AARijAAEYvwABIMwAAlpcAAAABA8AARjrAAEgzAAAAAgEBwABGQAAAAJdUYQMBYAPAAPzNYAPAAPxVAAHAAEZeAAAglpBhAwBgA8AA/M0BagBgA8AA/yV5YAPAAPzNAT4HTsAARnPAAEZ6AACBdlsBK07AAEaLwABGmQAAwABzJWADwAD8VQEqTsAARqrAAEauAACXwWADwAD+GwEWwABGtS5hwAD+70XAAEbBAcAARsrAAEbMAABiYAPAAP4bAZMBHMAARtOFwABG0cBz4t1jAQABhMAARtXAc+K5AMAA/0kBjcAARtzAc+LdHMAARtqFwABG3MBz4t1kAQABlADAAP9BPgJOwABG68AARvMAAJZ7YAPAAPzNARzAAEb5LksBAAGFwABG+sBz4t0AwAD+zknAAEcEHMAARwyAwABHCMBz4lIgAQABhsAARw3Ac+M2AAA+A0nAAEchg8AARyXAc+KiPgE9MMAAR0AewABHW8AA0DkAAAAAPz2KwABHeMBz4pKGwABHgcBz4zY9i8AAR5LAc+KiKT9JwABHuoPAAEe+wHPiokrAAEfNASbAAEfNAYLAAEfUwHPikmADwAD8zT9JwABH4CEcwABH64HAAEfkwHPibEgBAAErAMAA/3VKwABH9AEcwABIAYHAAEf7wHPibCAAAAAAAD89MMAASAkewABIJMAA0DgAAAAABsAA42OCc8AASDjAAEg/wABIcAAAlo4AAAABA8AASEjAAEhwAAAAAQEBwABITQAAACdgA8AA/hsAAGADwAD8zQE+AUrAAEhaARzAAEhlLksBAAGAwABIZsBz5GgAwAD+zgbAAONkgnPAAEh1wABIesAASNUAAFYAAAABA8AASH3AAEjVAAAAAQEBwABIhQAAIICWYAPAAPzNAABcAT4BPTDAAEiSH8AASJzAAP2tAQABJ8AAd8QABsAA42WCc8AASNrAAEjfwABJRwAAgKUAAAABA8AASOXAAElHAAAAAQEBwABI9wAAIICWXQPAAP59AWADwAD8zQAAXAE+AT0wwABJBB/AAEkOwAD9rQEAASfAAHfEAAbAAONmgnPAAElMwABJUcAASb8AAJ86AAAAAQPAAElXwABJvwAAAAICAsAASVwAAAAnYAPAAP4bAMAASWoAACCAlmADwAD8zQAAXAE+AT0wwABJdx/AAEmBwAD9rQEAASfAAHpnAAbAAONngnPAAEnEwABJycAASkUAAKBHAAAAAQPAAEnSwABKRQAAAAICAsAASdcAAAAnYAPAAP4bAMAASe8AACApXQPAAP59AWADwAD8zQAAXAE+AT0wwABJ/R/AAEoHwAD9rQEAASfAAHpnAAbAAONognPAAEpKwABKT8AASq8AAICuAAAAAQPAAEpTwABKrwAAAAEAAcAASlkAAACbd2EDAmADwAD8zWADwAD8zWADwAD+GwFqAGADwAD/JXkAXAE+AT0ewABKgsAA0M4CAWADwAD8zQIuNQAAAAEAYQMCYAPAAPzNYAPAAPzNYAPAAP4bAYDAAEqNwHPmTyMcwABKlYEAwHPmkUgBAAErAABqwABKo2EDAl0DwAD8YQFbXQPAAPxhAVtgA8AA/hvAAYfagQDAc+aRAWEDAmADwAD8zWADwAD8zWADwAD+GwAGwADjaYJzwABKtMAASrjAAEu2AACAuwAAAAEDwABKv8AAS7YAAAACAQLAAErHAAAglntgA8AA/M0AwABK1QAAAGpgA8AA/hsBasAASt1gA8AA/hsJAGADwAD+GwE+A0nAAErnHMAASvGBwABK68Bz50GBbQEAARbAAEr5LmHAAP7vAMAA/0w+AUrAAEsJARzAAEsQlIHGAAAAAMAA/j5JwABLHxzAAEspgcAASyPAc+dBYwEAAZMAwAD/ST4BPYnAAEs2wHPnQZM/RcAAS0sBwABLVMAAS1YAAGJgA8AA/hsBgcAAS1jAc+dBARzAAEthgsAAS1/Ac+fXYwEAARbAAEtoLmHAAP7vAMAA/0kBisAAS3DAc+fXHMAAS3GCwABLcMBz59dkAQABlADAAP9BPgFJwABLfRzAAEuJHMAAS4UuSwEAAYLAAEuGwHPn1wDAAP7OSAEAAYDAAEuMwHPnMQDAAP8/SsAAS5UBgsAAS5zAc+fXP0rAAEupARzAAEuwlIHGAAAAAMAA/j4GwADjaoJzwABLu8AAS7/AAEzaAACWtQAAAAEDwABLysAATNoAAAACAQLAAEvSAAAglntgA8AA/M0AwABL4AAAAGpgA8AA/hsBasAAS+hgA8AA/yV5AGADwAD+GwE+A0nAAEv1IhzAAEv/gcAAS/nAc+jNSAEAASsAwAD/PwEcwABMEIHAAEwKwHPozYFtAQABFsAATBguYcAA/u8AwAD/TD4BPYnAAEwowHPozRzAAEw8FsAATDUuYcAA/u+BjQEAAZQAwAD/QknAAExMHMAATFaBwABMUMBz6M1jAQABkwDAAP9JPgFKwABMYwEcwABMapSBxgAAAADAAP4+P0XAAEx4AcAATIHAAEyDAABiYAPAAP4bAYHAAEyFwHPozQEcwABMjoLAAEyMwHPpl4FtAQABkwDAAP9MAYrAAEyUwHPplxzAAEyVgsAATJTAc+mXgY0BAAGUAMAA/0I+AUnAAEyhHMAATK0cwABMqS5LAQABgsAATKrAc+mXAMAA/s5IAQABgMAATLDAc+i9AMAA/z9KwABMuQGCwABMwMBz6Zc/SsAATM0BHMAATNSUgcYAAAAAwAD+PgbAAONrgnPAAEzfwABM5sAATUEAAIYuAAAAAQPAAEzwwABNQQAAAAAAAABgA8AA/M0BPgE9MMAATPkfwABNA8AA/a0BAAEnwAB3xQAGwADjbIJzwABNRsAATU3AAE2vAACgRgAAAAEDwABNVcAATa8AAAABAQHAAE1aAAAAJ2ADwAD+GwAAYAPAAPzNAT4BPTDAAE1nH8AATXHAAP2tAQABJ8AAd8UABsAA422Cc8AATbTAAE25wABOLgAAl1MAAAABA8AATcTAAE4uAAAAAQEBwABNygAAAJdUYQMBYAPAAPzNYAPAAPxVAABcAT4BPTDAAE3mH8AATfDAAP2tAQABJ8AAd8UABsAA426Cc8AATjPAAE44wABOrQAAl1YAAAABA8AATkPAAE6tAAAAAQEBwABOSQAAAJdUYQMBYAPAAPzNYAPAAPxVAABcAT4BPTDAAE5lH8AATm/AAP2tAQABJ8AAd8UABsAA43mCc8AATrLAAE69wABPFwEAgx4AAAABA8AATsPAAE8XAAAAAAAAAGADwAD8zQE+AknAAE7JHMAATtQWwABOzS5hwAD+74CXAQABkwDAAP9LSsAATtkBHMAATuQuSwEAAZMAwAD+zj89MMAATu0ewABPCMAA0DgAAAAABsAA43qCc8AATxzAAE8nwABPiQEAgeoAAAABA8AATyzAAE+JAAAAAAAAAGADwAD8zQE+AknAAE8yHMAATz0WwABPNi5hwAD+74CXAQABkwDAAP9LSsAAT0IBHMAAT00uSwEAARzAAE9VFsAAT04uYcAA/u+BjQEAAZQAwAD/QgDAAP7OPz0wwABPXx7AAE96wADQOAAAAAAGwADje4JzwABPjsAAT5nAAFAwAQCAwwAAAAEDwABPoMAAUDAAAAAAAAAAYAPAAPzNAT4DScAAT6YcwABPsRbAAE+qLmHAAP7vSAEAAZQAwAD/P0rAAE+3ARzAAE/CLksBAAGTAMAA/s4/ScAAT8scwABP1hbAAE/PLmHAAP7vSAEAAZMAwAD/Pz0wwABP3B7AAE/3wADQOAAAAAA/PTDAAFAIHsAAUCPAANA5AAAAAAbAAONvgnPAAFA1wABQOsAAULgAAKBJAAAAAQPAAFBAwABQuAAAAAICAsAAUEUAAAAnYAPAAP4bAMAAUF0AACCD0V0DwAD+fQFgA8AA/M0AAFwBPgJOwABQc8AAUHcAAYKQYAPAAP4bARzAAFCJFsAAUIKBwABQecBz7bFhwAD+oGQBAAGAwABQi8Bz7aIAwAD/QT0cwABQli6DZAMAA4DAAFCfwHPtooLAAFCmwHPtzoHAAFCrwHPtsQDAAP7kBsAA43CCc8AAUL3AAFDCwABRegAAnAcAAAABA8AAUMvAAFF6AAAAAwIDwABQ0AAAAGpgA8AA/hsAwABQ2wAAAIKQYAPAAP4bAMAAUOgAACDAAER0YAPAAPzNAWoAYAPAAP8leQBcAT4CPR7AAFEFwAD9XAMAA4DAAFEVwHPuYYHAAFEcwHPucBbAAFEmLmHAAP7vAEXAAFEzAcAAUTzAAFE+AABiYAPAAP4bAYDAAFFAwHPuYQEcwABRSYPAAFFHwHPu0WMBAAGBwABRS8Bz7nAAwAD/SQGLwABRUsBz7tEcwABRUIPAAFFSwHPu0WQBAAGUAMAA/0E+AT0cwABRYS6AvwIAAoPAAFFiwHPu0YLAAFFnwHPugADAAP7PAABzy/8Ac8xyAHPMnABzzMQAc8zsAHPNOQBzzZoAc83tAHPOYgBzzu0Ac8//AHPRPwBz0lkAc9MrAHPUfABz1N8Ac9U6AHPVnQBz1fgAc9ZbAHPWoABz1usAc9eHAHPXywBz2DMAc9h6AHPZOwBz2qQAc9vWAHPcVwBz3N8Ac93qAHPe9ABz4IQAc+IoAHPkPgBz5J8Ac+T1AHPlUwBz5bkAc+YlAHPnBwBz6JMAc+pLAHPqlwBz6vIAc+tSAHPrsgBz7DAAc+zIAHPteABz7jcAc+9UAAAANALAAON/gnPAAdUrwAHVS8AB2ds3wAB7rQAAAWABwADjRQABXQHAANZbAWADwADlggABBcAA44cAAAAABAAAAwAAAAAAAAAAAGADwADjfwE/AQkAAMAA43IAAAAABAbAAOOBgnPAAdVLwAHVSwAAEKA/AMAA1d/AANXfAQMAAAAAAAMDAwAAAABqYAPAAP4bAAAAAACCkGADwAD+GwAAAAAgg9FdA8AA/n0BWwAAXAFKAAEdAKA/AwADgADAc/CxgQDAc/C9ggDAc/DKAMAA1d8GwADjg4JzwABR8cAAUf3AAFIUAALAAHpqwADVvAAAAAEDwABSCMAAUhQAAAABAQHAAFINAAAAYWADwAD+GwAAYAPAAOWCAAbAAOOEgnPAAFIZwABSHsAAWvgAAINkAAAAAQPAAFImwABa+AAAAAQDBMAAUisAAABqYAPAAP4bAMAAUjYAAACCkGADwAD+GwDAAFJMAAAgloNdA8AA/n0BYAPAAPzNAMAAUl0AAACgPGADwAD+GwFqwABSaWADwAD+GwkAXAE+C0nAAFKIIiIcwABSjpOAlwEAAYDAAFKQwHPxbgDAAP9LARzAAFKfgMAAUpnAc/FugJcBAAGBwABSocBz8X0AwAD/SwEcwABSrIHAAFKowHPxfYCXAQABFsAAUq4uYcAA/u8AwAD/Sz4CPR7AAFLJwAD9XAMAA4DAAFLZwHPxboHAAFLgwHPxfRbAAFLlLmHAAP7vAEAqwABTDcAAUxIAP0nAAFMfHMAAUy2DwABTI8Bz8aRjAQABkwDAAP9JPgE9MMAAUzofwABTS8AA/WUEAASDwABTUcBz8aSTKyegPAA/TsAAU4TAAFOKAAGA7mADwAD+GwEcwABTkIHAAFOMwHPxfYGNAQABgMAAU5LAc/FuAMAA/0JJwABTnRzAAFO7HMAAU64WwABTp4LAAFOiwHPxjWHAAP6ggY0BAAGDwABTsMBz8aQAwAD/QmMBAAGEwABTvcBz8qYAwAD/ST4BPTDAAFPMHsAAU+fAANA6AAAAAD9JwABT/BzAAFQGhMAAVADAc/KmSAEAAZMAwAD/P0rAAFQMAD9JwABUGSXAAFQigsAAVB3Ac/GNYAPAANXSPgJOwABUrMAAVLwAAcAAemtgA8AA1dIBJsAAVMMAgsAAVL7Ac/GNYAPAANXSScAAVNwcwABU+BbAAFTlLsAAcCrAANYmSAEAARbAAFULhcAAVPvAc/N3wABwKsAA1dUAwAD/Pz4BScAAVSkiHMAAVTSEwABVLsBz8qZjAQABNwoAwAD/SQAhHMAAVVUWwABVToXAAFU+wHPzd4KPwADV10gBAAEWwABVXS6Cj8AA1igAwADXIz4CPR7AAFV4wADNLgUABSbAAFWCAILAAFV9wHPxjV0DwAD+vwFgA8AA/M2DwABVk8Bz8aQugMAAVaTAc/FuhMAAVavAc/KmAErAAFW9AEnAAFXUHMAAVeoWwABV5BbAAFXdLoKPwADWKLf3wADVvMAA1xvAAHApwADVvAYABhzAAFYcHMAAVgeAwABWAcBz8W6DjQEAARbAAFYJLsAAcCrAANYmAMAA/0NkAQABFsAAViMuqhzAANYnAMAA/0EcwABWRITAAFY+wHPypoONAQABFsAAVkYuwABwKsAA1iYAwAD/QxbAAFZ9FsAAVnaFwABWZsBz83eCj8AA1de398AA1bzAANcbHMAAVq8cwABWmoPAAFaQwHPxpIONAQABFsAAVpwuwABwKsAA1iYAwAD/Q2QBAAEWwABWwYXAAFaxwHPzd6ocwADV1gDAAP9BHsAAVuTAAM07AQABLgAewABXBcAAzTsBAAGCwABXC8Bz8Y0AAMAA1eI+AUrAAFcfAD9JwABXPhzAAFdZFsAAV1KFwABXQsBz83eCj8AA1ddIAQABFsAAV2Eugo/AANYoAMAA1yM+BU7AAFg3wABYQgABwAB6bF0DwAD+vwFgA8AA/M0BJsAAWEkAgsAAWETAc/GNXQPAAP6/AWADwAD8zU7AAFhowABYcwABwAB6bWADwADlggEcwABYdS7AAHpqwADVvAEAAYTAAFiBwHPypgDAANZeRcAAWJEBwABYmsAAWJwAAGJgA8AA/hsBkwEcwABYoxTAAFihwHP2UwgAYwEAAYTAAFilwHPypgDAAP9JARXAAFiswHP2UwgcwABYrRTAAFiswHP2UwgAZAEAAZQAwAD/QT4BPRzAAFjHh8AAWL3Ac/YZgL8CAAIUwABYyMBz9lMIABzAAFjXhsAAWM3Ac/XgSwEAARzAAFjig8AAWNjAc/GkZAEAARTAAFjkwHP2UwgAAMAA/0EAwAD+zgDAAP7PRcAAWPoBwABZA8AAWQUAAGJgA8AA/hsBgMAAWQfAc/FuARzAAFkQFMAAWQ7Ac/cTCABjAQABgcAAWRLAc/F9AMAA/0kBFcAAWRfAc/cTCBzAAFkYFMAAWRfAc/cTCABkAQABlADAAP9BPgE9HMAAWSwugL8CAAIUwABZLcBz9xMIABzAAFk8h8AAWTLAc/YZSwEAARzAAFk/FMAAWT3Ac/cTCACBjQEAAYDAAFlBwHPxbgDAAP9CAMAA/s4AwAD+z0rAAFlbAD8/TsAAWXsAAACgPV0DwAD+vwFbAE7AAFmOAAAAoD5gA8AA/hsAScAAWZ4lwABZp4LAAFmiwHPxjV0DwAD+vwFgA8AA/M0+Aj2NwABZwMBz99cUwABZzMBz8Y0CAV0DwAD+vwFgA8AA/M09jsAAWdjAc/fqg8AAWeXAc/GkPgI9jcAAWgPAc/fXHMAAWiQcwABaFILAAFoPwHPxjZaEAQABg8AAWhnAc/GkAMAA/peArQEAAAGFdirAAP6TPY7AAFpDwHP36pNJwABaXRzAAFp0HMAAWmyGwABaYcBz9+pkAQABhMAAWm7Ac/KmAMAA/0GAlwEAARbAAFqAhcAAWnbAc/fXYcAA/u8AwAD/Sz4BPTDAAFqQHsAAWqvAANA6AAAAAD89HsAAWsXAAM0uBQAFhcAAWsrAc/fXhsAAWtXAc/fqLoDAAFrnwHPxboTAAFruwHPypgAGwADjhYJzwABa/cAAWwnAAFv2AACBWAAAAAEDwABbEMAAW/YAAAACAQLAAFsVAAAAamADwAD+GwDAAFshAAAAgpBgA8AA/hsBagBgA8AA/yV5AGADwADlggE+BT2JwABbLcBz+WQewABbPsAA/VwDAAOAwABbTsBz+VWBwABbVcBz+WQWwABbXy5hwAD+7wBOwABbcMAAW3cAAGFgA8AA/hsBHMAAW32BwABbecBz+WSBjQEAAYDAAFt/wHP5VQDAAP9CTsAAW5bAAFudAACBdmADwADlggEcwABbny7AAHpqwADVvAEAAYLAAFurwHP5vADAANZePRzAAFu/g8AAW7jAc/nwg2QEAASTgsAAW8vAc/m8LoDAAFvZwHP5VQDAAP7kSsAAW+UBg8AAW+zAc/nwAABz8IoAc/D9AHPxRABz+SsAc/peAAAABALAAOOIgnPAAdUrwAHVS8AB2dsDwAB7rgFqwAHVLGADwAD8HMABgkAAAWABwADjfwABYAHAAOWCAAAGBsAA44uCc8AB1hjAAdYgwAHWlwQFgLXAANW8AmrAAdXkYAPAAPwcwAGmC2oAYAPAAM1MwAGmJwAAAQPAAdYzwAHWlwAAAAMDA8AB1j8AAACCj2ADwADXNQDAAdZLAAAAqhxgA8AA/hsAwAHWXgAAAGFgA8AA/hsAAGADwADjiAAGwADjjYJzwAHWyMAB1vbAAdfRAwBLAWrAAdbJYAPAAPwcwADA+gAAAQPAAdb4wAHX0QAAAAEBAcAB1v0AAAAnYAPAAP4bAABgA8AA/M0BPgJJwAHXCiIcwAHXFIDAAdcOwHP7amMBAAGTAMAA/0kBHMAB1yGAwAHXG8Bz+2qBbQEAARbAAdckLmHAAOB5AMAA/0w+AT0wwAHXNB/AAdc+wAD9cQMAA4DAAddPwHP7ai4nJwA/SsAB13ABHMAB14sWwAHXdy7AAHuDwADVvMAA4HfAAHqlwADVvAEAARzAAdelFsAB15cuqhzAANYnZAEAARzAAdeugMAB16jAc/tqg40BAAFqwAHXvGADwAD+G4FXAMAA/0MAwAD/QQDAANdOBsAA446Cc8AB19bAAdgCwAHY7AMAgL8BasAB19dgA8AA/BzAAMD6AAABA8AB2AXAAdjsAAAAAgICwAHYCgAAACdgA8AA/hsAwAHYGAAAIICWYAPAAPzNAABcAT4CScAB2CUiHMAB2C+AwAHYKcBz/IxjAQABkwDAAP9JARzAAdg8gMAB2DbAc/yMgW0BAAEWwAHYPy5hwADgeQDAAP9MPgE9MMAB2E8fwAHYWcAA/XEDAAOAwAHYasBz/IwuJycAPz0cwAHYlhbAAdiLLsAAe4PAANW8wADgd8AAeqfAANW8AgACHMAB2LkWwAHYqy6qHMAA1idkAQABHMAB2MKAwAHYvMBz/IyDjQEAAWrAAdjQYAPAAP4bgVcAwAD/QwDAAP9BgcAB2OLAc/ybAMAA108GwADjk4JzwAHZIsAB2SrAAdlpAQDAAHAqAAAAAQPAAdk9wAHZaQAAAAAAAABgA8AA/hsBPgFKwAHZQwFqwAHZVmADwAD+G4FXBsAA45CCc8AB2Y3AAdmZwAHZ2QAAwAB6asAA1bwAAAABA8AB2aTAAdnZAAAAAQEBwAHZqQAAAGFgA8AA/hsAAGADwADlggE+AUrAAdm3AR7AAdnCwADlhgEAAYDAAdnOwHP9/QAGwADjkYJzwAHVS8AB1UsAABCgPwDAANXfwADV3wEDAAAAAAADAwMAAAAAamADwAD+GwAAAAAAgpBgA8AA/hsAAAAAIIPRXQPAAP59AVsAAFwBSgABHQCgPwMAA4AAwHP+WYEAwHP+ZYIAwHP+cgDAANXfAABz+rIAc/syAHP8UwBz/YQAc/3NAHP+MgBz/qUAAAAGAsAA45SCc8AB2d7AAdn+wAHejjfAAHuwAAABYAHAAOByAAFgAcAA1iQAAQXAAOPBAAAAAAQAAAMAAAAAAAAAAABgA8AA45QBPwEJAADAAOB7AAAAADQGwADjloJzwAHZ/sAB2f4AABCgPwDAANXfwADV3wEDAAAAAAADAwMAAAAAamADwAD+GwAAAAAAgpBgA8AA/hsAAAAAIIPRXQPAAP59AVsAAFwBSgABHQCgPwMAA4AAwHP/Q4EAwHP/T4IAwHP/XADAANXfBsAA48OCc7SltK20vwECwABwKgAAAAEDtL+0vwAAAAAAAABgA8AA/hsABsAA48SCc7TDtMu02AECqhwAAAABA7TYtNgAAAAAAAAAYAPAAP4bAAbAAOPFgnO03LTstPIBAoKPAAAAAQO08rTyAAAAAAAAAGADwADXGAAGwADjl4JztPe1A7UzAACWmwAAAAEDtQ+1MwAAAQAAgnpgA8AA/2gBWwAAAABdA8AA/n0BXwMAAAFKtRUBH7UZwADQKwEBXwMAAAEuAAbAAOOYgnO1OLVJta8AAJaSAAAAAQO1U7WvAAAAAQEBtWUAACCD210DwAD+fQFgA8AA/M0AAF0DwAD+fQFgA8AA/M0BSrV1AR61ecAA0AMCAWADwAD8zQIugLWpwHQAdgAGwADjmYJztbS1vLXnAACWjQAAAAEDtcO15wAAAQAAl05gA8AA/2gBWwAAAABdA8AA/r8BXwMAAAFKtckBHrXOwAD+ygECYAPAAPzNXwMAAAEuAAbAAOPMgnO167X0tmACAIMeAAAAAQO1+bZgAAAAAQEBtgEAACCAlmADwAD8zQAAXAE+Akm2Dhy2Hha2Fy5hwAD+70gBAAGTAMAA/z89MLYkH7YuwAD9cQIAApMuAD89HLZRLoC/AgACk4C2V8B0ASoAwAD+zwbAAOPNgnO2ZbZutucCAIHqAAAAAQO2crbnAAAAAQEBtnoAACCAlmADwAD8zQAAXAE+Akm2hxy2lxa2kC5hwAD+70gBAAGTAMAA/z89MLadH7anwAD9cQIAApMuAD89HLbKLoC/AgACHLbXFrbQLmHAAP7vgY0BAAGUAMAA/0KAtt7AdAGfAMAA/s8GwADjmoJztuy28LesAACgRAAAAAEDtvq3rAAAAAIBArcAAAAAl1RhAwFgA8AA/M1gA8AA/FUAtxsAAABqYAPAAP4bAWq3I2ADwAD+GwkAYAPAAP4bAT4DSbctHLc3gbcxwHQCQWMBAAGTAMAA/0k9ibc8wHQCQZM/RbdLAbdUt1YAAGJgA8AA/hsBgbdYwHQCQQEct2GCt1/AdAKHYwEAARa3Yy5hwAD+7wDAAP9JAYq3a8B0Aocct2yCt2vAdAKHZAEAAZQAwAD/QT4BSbd4HLeAgLd8wHQCKiABAAEct4UuSwEAAYK3hsB0AocAwAD+zgAASreLAYK3ksB0Aoc/SrefARy3ppSBxgAAAADAAP4+BsAA45uCc7ext7W4lwAAoEUAAAABA7fDuJcAAAACAQK3yQAAAJdUYQMBYAPAAPzNYAPAAPxVALfkAAAAamADwAD+GwFqAGADwAD/JXkAYAPAAP4bAT4DSbfyIhy3/IG39sB0A1NIAQABKwDAAP8/ARy4DYG4B8B0A1OBbQEAARa4FS5hwAD+7wDAAP9MPYm4HcB0A1McuDEWuCouYcAA/u+BjQEAAZQAwAD/Qj9FuDoBuEO4RQAAYmADwAD+GwGBuEfAdANTARy4UIK4TsB0A82BbQEAAZMAwAD/TAGKuFbAdAPNHLhXgrhWwHQDzYGNAQABlADAAP9CPgFJuGMcuGuAuGfAdAM8IAEAARy4cC5LAQABgrhxwHQDzQDAAP7OAABKuHYBgrh9wHQDzT9KuIoBHLiRlIHGAAAAAMAA/j4GwADjnIJzuJy4srmLAwBkAAAAAQO4s7mLAAAAAQEBuMEAACCD210DwAD+vwFgA8AA/M0AAF0DwAD+vwFgA8AA/M0BPgJOuNK43gAAg15gA8AA/hsBHLjsFrjlLmHAAP7vZAEAARa49IC47sB0BHthwAD+7wDAAP9BSrkAATW5DwAAAQBdA8AA/r8BYAPAAPzNATG5D2ADwAD8zQA1AAAAAQBbARe5GoK5GMB0BNphgbkjwHQEosAA/u01AAAAAQBbARy5N4K5NcB0BNqDZAMAA5MWuUguYcAA/u8uAMAA/uQ1AAAAAQBbARy5XoK5XMB0BNqDZAMAAxa5bC5hwAD+74G5dMB0BKKAuYHAdAR7AMAA/uSCAMB0BNoGwADjnYJzuZC5lbo0AACDHAAAAAEDuZ26NAAAAAEBAbmlAAAAlntgA8AA/2gAAGADwAD8VQE+A065uLm8AACXwWADwAD+GwEWucMuYcAA/u9Fuc8Budi52gAAYmADwAD+GwGTARy54YK538B0BctjAQABgbnjwHQFrwDAAP9JAYq56sB0BcscueiCuerAdAXLZAEAAZQAwAD/QT4BSbn1HLoBHLn9LksBAAGCuf7AdAXLAMAA/s5IAQABgLoEwHQFlgDAAP8/SroNASk/SrokASoGwADjnoJzujm6PrsnAACgMwAAAAEDukW7JwAAAAEAAbpOAAAAoDRgA8AA0n4BagBgA8AA/yV5AFwBPgM9Ixy6ZIC6XcB0BmhIAQABKwDAAP91iLpdwHQGaB66bMAA0oAAAAAAKwFgA8AA0n5Oun66gAAAYmADwAD+GwEWuocuYcAA/u9DupMcupyBuprAdAa1gJcBAAGUAMAA/0s+BU66rbqxAACgNWADwAD+GwEcurqAurPAdAZooDYBAAGBusLAdAa1AMAA0oM9ibrMwHQGtRy6zoG6zMB0BrWBjQEAAZQAwAD/Qk663rriAACgN2ADwAD8zQEcuuguSwEAAYG66cB0BrUAwAD+zj0cuvcugL8CAAKBuvjAdAa1HLsBLksBAAGCuwLAdAbnAMAA/s4AwAD+zz0cuxIugL8CAAKCuxPAdAbng7sawHQHLwDAAP7PBsAA45+Cc7ssuz27hgAAgaUAAAABA7tCu4YAAAABAQG7SAAAAIGmYQMBYAPAAPzNYAPAAPxVAABdA8AA/n0BYAPAAPzNAUq7ZAEfu2jAAM9NAgFgA8AA/M0CLoC7hMB0B7kABsAA46CCc7uLu5y70gAAlpkAAAABA7ugu9IAAAABAQG7pQAAAIOoYAPAAP4bAABdA8AA/n0BYAPAAPzNAUq7qwEfu6/AAM8IAwFgA8AA/M0DLpOAu9DAdAgcAAbAAOOhgnO717vovD8AAJaaAAAAAQO78bw/AAAAAQEBu/cAAACXVGEDAWADwAD8zWADwAD8VQAAXQPAAP59AWADwAD8zQFKvBYBH7wawADPkwIBYAPAAPzNAi6AvDrAdAh3AAbAAOOignO8RLxVvI4AAJaEAAAAAQO8WbyOAAAAAQEBvF4AAACDqGADwAD+GwAAXQPAAP59AWADwAD8zQFKvGQBH7xowADPCAMBYAPAAPzNAy6AvIbAdAjaKwAGwADjo4JzvJO8pLz7AACWmAAAAAEDvK28+wAAAAEBAbyzAAAAl1RhAwFgA8AA/M1gA8AA/FUAAF0DwAD+fQFgA8AA/M0BSrzSAR+81sAAz8sCAWADwAD8zQIugLz2wHQJNQAGwADjxoJzvQC9Fb1HAQCY4AAAAAEDvR69RwAAAAAAAABdA8AA/n0BYAPAAPzNAUq9IQEfvSXAANC5AQFgA8AA/M0BLgAGwADjpIJzvUy9Xb2FAACcwgAAAAEDvWK9hQAAAAAAAABdA8AA/vECYAPAAP4bYAPAAPzNAUq9aAEfvWzAANCvAQFgA8AA/M0BLgAGwADjpYJzvYq9m74xAACgOQAAAAEDvaO+MQAAAAIBAr2oAAAAamADwAD+GwC9tAAAAIKQYAPAAP4bAWoAYAPAAP8leQBdA8AA/n0BYAPAAPzNAT4CPR69y8AA/VwDAAOAvdvAdAoogb3iwHQKNRa97C5hwAD+7wBKvfkBH74EwADPCAMBYAPAAPzNAy6AviLAdAoogb4pwHQKNQAGwADjx4Jzvja+S757AQBcAAAAAQO+VL57AAAAAAAAAF0DwAD+uAFgA8AA/M0BSr5XAR++W8AA4HEBAWADwAD8zQEuAAbAAOOmgnO+gL6NvusAAICtAAAAAQO+k77rAAAAAQAAAb6aAAAAhXZgA8AA/FUBar6kYAPAAPxVd10DwAD+vwFgA8AA/M0BPgFKvrEBHr68wAD+xQIBYAPAAPzNAS4BhXaAvt7AdAsJBsAA46eCc77wvvy/LwAAlXEAAAABA78Bvy8AAAAAAAAAXQPAAP+zAWADwAD8zQE+AUq/CgEevxXAAMMjAQFgA8AA/M0BLgAGwADjqIJzvzS/Ob+0AACD/QAAAAEDv0C/tAAAAAEBAb9GAAAAgaZhAwFgA8AA/M1cAABcAT4CTr9jv2cAAJfBYAPAAP4bARa/bi5hwAD+70W/egG/g7+FAABiYAPAAP4bAZMBHL+Mgr+KwHQL62MBAAGBv47AdAvPAMAA/0kBir+TwHQL6xy/lIK/k8B0C+tkAQABlADAAP9BPgE9HL+hgL+gwHQLtyABAAEcv6YuSwEAAYK/p8B0C+sAwAD+zgAABsAA46mCc7+5v8DAAEDKAACWlQAAAAEDv8bAAEDKAAAAAQEBv84AACCHOWEDAmADwAD8zWADwAD8zWADwAD8zQAAYAPAAPzNAT4FTr//wABAAwAAl8FgA8AA/hsBFsAAQAouYcAA/u9JwABAFhzAAEAegcAAQBrAdAykSAEAAZMAwAD/Pz0wwABAJB7AAEA/wADQOAAAAAA/TsAAQFTAAEBaAACAlmADwAD8zQEcwABAYC5LAQABkwDAAP7ORcAAQGkBwABAcsAAQHQAAGJgA8AA/hsBlAEcwABAe4PAAEB5wHQNG2MBAAGBwABAfcB0DKQAwAD/SQGLwABAhMB0DRscwABAgoPAAECEwHQNG2QBAAGUAMAA/0E+AT2KwABAj8B0DPIcwABAnoDAAECXwHQMfCACAAKCwABAn8B0DPIcwABAqi5LAQABg8AAQKvAdA0bAMAA/s4AAErAAEC6AYLAAEDBwHQM8gbAAOOqgnPAAEDPwABA0cAAQasAAINfAAAAAQPAAEDYwABBqwAAAQAAgnpgA8AA/2gBWwICAsAAQNsAAACWkV8DAAAAwABA6wAAAIc5YQMCXwMAAGADwAD8zV8DAAAAAF8DAAABPgNOwABBHsAAQSIAAJfBYAPAAP4bARbAAEEpLmHAAP7vRcAAQTUBwABBPsAAQUAAAGJgA8AA/hsBkwEcwABBR4PAAEFFwHQOTWMBAAGCwABBScB0DikAwAD/SQGLwABBUMB0Dk0cwABBToPAAEFQwHQOTWQBAAGUAMAA/0E+AT2IwABBW8B0DfccwABBcYHAAEFqwHQOBSACAAKAwABBcsB0DfccwABBhC5LAQABg8AAQYXAdA5NAMAA/s4AAErAAEGUAYDAAEGbwHQN9wbAAOOrgnPAAEGwwABBvMAAQgcAAICrAAAAAQPAAEHCwABCBwAAAQAAgnpgA8AA/2gBWwEBAcAAQcUAAACBpmEDAWADwAD8zV8DAAAAAF0DwAD+fQFfAwAAAUrAAEHhAR7AAEHlwADPHAICYAPAAPzNXwMAAAIugMAAQgXAdA8pAAbAAOOsgnPAAEIMwABCGMAAQnAAAISVAAAAAQPAAEIhwABCcAAAAQAAgnpgA8AA/2gBWwEBAcAAQi4AAACBpmEDAWADwAD8zV0DwAD+fQFfAwAAAABdA8AA/n0BXwMAAAFKwABCSgEfwABCTsAAz2ECAmADwAD8zV8DAAACLoDAAEJuwHQPqgAGwADjrYJzwABCdcAAQnrAAEMXAACWiwAAAAEDwABCf8AAQxcAAAABAQHAAEKFAAAAgaZhAwFgA8AA/M1gA8AA/FUAAGADwAD8VQE+A07AAEKiwABCpgAAl8FgA8AA/hsBFsAAQq0uYcAA/u9FwABCuQHAAELCwABCxAAAYmADwAD+GwGTARzAAELLgsAAQsnAdBBuYwEAAYHAAELNwHQQSgDAAP9JAYrAAELUwHQQbhzAAELSgsAAQtTAdBBuZAEAAZQAwAD/QT4BScAAQt8hHMAAQuWAwABC5MB0ECYgAQABHMAAQuouSwEAAYLAAELrwHQQbgDAAP7OAABKwABC8AEqP0rAAEMIASkGwADjroJzwABDHMAAQyHAAEO7AACB1gAAAAEDwABDJMAAQ7sAAAABAQHAAEMqAAAAgaZhAwFgA8AA/M1gA8AA/FUAAGADwAD8VQE+A07AAENHwABDSwAAl8FgA8AA/hsBFsAAQ1IuYcAA/u9FwABDXgHAAENnwABDaQAAYmADwAD+GwGTARzAAENwgsAAQ27AdBF5YwEAAYHAAENywHQRVQDAAP9JAYrAAEN5wHQReRzAAEN3gsAAQ3nAdBF5ZAEAAZQAwAD/QT4BScAAQ4QcwABDiYDAAEOIwHQRMSABAAEcwABDji5LAQABgsAAQ4/AdBF5AMAA/s4AAErAAEOUASk/SsAAQ6sBKgbAAOOvgnPAAEPAwABDx8AAROQAAJaPAAAAAQPAAEPRwABE5AAAAAIBAcAAQ9cAAACXVGEDAWADwAD8zWADwAD8VQABwABD9QAAIJaQYQMAYAPAAPzNAWoAYAPAAP8leWADwAD8zQE+BE7AAEQKwABEDgAAl8FgA8AA/hsBFsAARBUuYcAA/u9FwABEIQHAAEQqwABELAAAYmADwAD+GwGTARzAAEQzg8AARDHAdBKfYwEAAYLAAEQ1wHQSewDAAP9JAYvAAEQ8wHQSnxzAAEQ6g8AARDzAdBKfZAEAAZQAwAD/QT4CTsAAREvAAERTAACWe2ADwAD8zQEcwABEWS5LAQABg8AARFrAdBKfAMAA/s5JwABEZBzAAERsgMAARGjAdBI7IAEAAYTAAERtwHQS+AAASsAARHcBhMAARH7AdBL4P0nAAESRIRzAAEScgcAARJXAdBJVSAEAASsAwAD/dUrAAESlARzAAESygcAARKzAdBJVIAAAAAAAPz0wwABEuh7AAETVwADQOAAAAAAGwADjsIJzwABE6cAARPDAAEYjAACWlAAAAAEDwABE+cAARiMAAAACAQHAAET/AAAAl1RhAwFgA8AA/M1gA8AA/FUAAcAARR0AACCWkGEDAGADwAD8zQFqAGADwAD/JXlgA8AA/M0BPgROwABFMsAARTYAAJfBYAPAAP4bARbAAEU9LmHAAP7vRcAARUkBwABFUsAARVQAAGJgA8AA/hsBHMAARVqCwABFVsB0FAuBjQEAAZQAwAD/QgEcwABFYYPAAEVfwHQUL4FtAQABkwDAAP9MAYvAAEVpwHQULxzAAEVng8AARWnAdBQvgY0BAAGUAMAA/0I+Ak7AAEV4wABFgAAAlntgA8AA/M0BHMAARYYuSwEAAYPAAEWHwHQULwDAAP7OScAARZEcwABFmYDAAEWVwHQTyyABAAGEwABFmsB0FJoAAD4BSsAARa4BhMAARbXAdBSaP0nAAEXQIRzAAEXbgcAARdTAdBPlSAEAASsAwAD/dUrAAEXkARzAAEXxgcAARevAdBPlIAAAAAAAPz0wwABF+R7AAEYUwADQOAAAAAAGwADjsYJzwABGKMAARi/AAEgzAACWlwAAAAEDwABGOsAASDMAAAACAQHAAEZAAAAAl1RhAwFgA8AA/M1gA8AA/FUAAcAARl4AACCWkGEDAGADwAD8zQFqAGADwAD/JXlgA8AA/M0BPgdOwABGc8AARnoAAIF2WwErTsAARovAAEaZAADAAHMlYAPAAPxVASpOwABGqsAARq4AAJfBYAPAAP4bARbAAEa1LmHAAP7vRcAARsEBwABGysAARswAAGJgA8AA/hsBkwEcwABG04XAAEbRwHQV+mMBAAGEwABG1cB0FdYAwAD/SQGNwABG3MB0FfocwABG2oXAAEbcwHQV+mQBAAGUAMAA/0E+Ak7AAEbrwABG8wAAlntgA8AA/M0BHMAARvkuSwEAAYXAAEb6wHQV+gDAAP7OScAARwQcwABHDIDAAEcIwHQVbyABAAGGwABHDcB0FlMAAD4DScAARyGDwABHJcB0Fb8+AT0wwABHQB7AAEdbwADQOQAAAAA/PYrAAEd4wHQVr4bAAEeBwHQWUz2LwABHksB0Fb8pP0nAAEe6g8AAR77AdBW/SsAAR80BJsAAR80BgsAAR9TAdBWvYAPAAPzNP0nAAEfgIRzAAEfrgcAAR+TAdBWJSAEAASsAwAD/dUrAAEf0ARzAAEgBgcAAR/vAdBWJIAAAAAAAPz0wwABICR7AAEgkwADQOAAAAAAGwADjsoJzwABIOMAASD/AAEhwAACWjgAAAAEDwABISMAASHAAAAABAQHAAEhNAAAAJ2ADwAD+GwAAYAPAAPzNAT4BSsAASFoBHMAASGUuSwEAAYDAAEhmwHQXhQDAAP7OBsAA47OCc8AASHXAAEh6wABI1QAAVgAAAAEDwABIfcAASNUAAAABAQHAAEiFAAAggJZgA8AA/M0AAFwBPgE9MMAASJIfwABInMAA/a0BAAEnwAB3xAAGwADjtIJzwABI2sAASN/AAElHAACApQAAAAEDwABI5cAASUcAAAABAQHAAEj3AAAggJZdA8AA/n0BYAPAAPzNAABcAT4BPTDAAEkEH8AASQ7AAP2tAQABJ8AAd8QABsAA47WCc8AASUzAAElRwABJvwAAnzoAAAABA8AASVfAAEm/AAAAAgICwABJXAAAACdgA8AA/hsAwABJagAAIICWYAPAAPzNAABcAT4BPTDAAEl3H8AASYHAAP2tAQABJ8AAemcABsAA47aCc8AAScTAAEnJwABKRQAAoEcAAAABA8AASdLAAEpFAAAAAgICwABJ1wAAACdgA8AA/hsAwABJ7wAAICldA8AA/n0BYAPAAPzNAABcAT4BPTDAAEn9H8AASgfAAP2tAQABJ8AAemcABsAA47eCc8AASkrAAEpPwABKrwAAgK4AAAABA8AASlPAAEqvAAAAAQABwABKWQAAAJt3YQMCYAPAAPzNYAPAAPzNYAPAAP4bAWoAYAPAAP8leQBcAT4BPR7AAEqCwADQzgIBYAPAAPzNAi41AAAAAQBhAwJgA8AA/M1gA8AA/M1gA8AA/hsBgMAASo3AdBlsIxzAAEqVgQDAdBmuSAEAASsAAGrAAEqjYQMCXQPAAPxhAVtdA8AA/GEBW2ADwAD+G8ABh9qBAMB0Ga4BYQMCYAPAAPzNYAPAAPzNYAPAAP4bAAbAAOO4gnPAAEq0wABKuMAAS7YAAIC7AAAAAQPAAEq/wABLtgAAAAIBAsAASscAACCWe2ADwAD8zQDAAErVAAAAamADwAD+GwFqwABK3WADwAD+GwkAYAPAAP4bAT4DScAASuccwABK8YHAAErrwHQaXoFtAQABFsAASvkuYcAA/u8AwAD/TD4BSsAASwkBHMAASxCUgcYAAAAAwAD+PknAAEsfHMAASymBwABLI8B0Gl5jAQABkwDAAP9JPgE9icAASzbAdBpekz9FwABLSwHAAEtUwABLVgAAYmADwAD+GwGBwABLWMB0Gl4BHMAAS2GCwABLX8B0GvRjAQABFsAAS2guYcAA/u8AwAD/SQGKwABLcMB0GvQcwABLcYLAAEtwwHQa9GQBAAGUAMAA/0E+AUnAAEt9HMAAS4kcwABLhS5LAQABgsAAS4bAdBr0AMAA/s5IAQABgMAAS4zAdBpOAMAA/z9KwABLlQGCwABLnMB0GvQ/SsAAS6kBHMAAS7CUgcYAAAAAwAD+PgbAAOO5gnPAAEu7wABLv8AATNoAAJa1AAAAAQPAAEvKwABM2gAAAAIBAsAAS9IAACCWe2ADwAD8zQDAAEvgAAAAamADwAD+GwFqwABL6GADwAD/JXkAYAPAAP4bAT4DScAAS/UiHMAAS/+BwABL+cB0G+pIAQABKwDAAP8/ARzAAEwQgcAATArAdBvqgW0BAAEWwABMGC5hwAD+7wDAAP9MPgE9icAATCjAdBvqHMAATDwWwABMNS5hwAD+74GNAQABlADAAP9CScAATEwcwABMVoHAAExQwHQb6mMBAAGTAMAA/0k+AUrAAExjARzAAExqlIHGAAAAAMAA/j4/RcAATHgBwABMgcAATIMAAGJgA8AA/hsBgcAATIXAdBvqARzAAEyOgsAATIzAdBy0gW0BAAGTAMAA/0wBisAATJTAdBy0HMAATJWCwABMlMB0HLSBjQEAAZQAwAD/Qj4BScAATKEcwABMrRzAAEypLksBAAGCwABMqsB0HLQAwAD+zkgBAAGAwABMsMB0G9oAwAD/P0rAAEy5AYLAAEzAwHQctD9KwABMzQEcwABM1JSBxgAAAADAAP4+BsAA47qCc8AATN/AAEzmwABNQQAAhi4AAAABA8AATPDAAE1BAAAAAAAAAGADwAD8zQE+AT0wwABM+R/AAE0DwAD9rQEAASfAAHfFAAbAAOO7gnPAAE1GwABNTcAATa8AAKBGAAAAAQPAAE1VwABNrwAAAAEBAcAATVoAAAAnYAPAAP4bAABgA8AA/M0BPgE9MMAATWcfwABNccAA/a0BAAEnwAB3xQAGwADjvIJzwABNtMAATbnAAE4uAACXUwAAAAEDwABNxMAATi4AAAABAQHAAE3KAAAAl1RhAwFgA8AA/M1gA8AA/FUAAFwBPgE9MMAATeYfwABN8MAA/a0BAAEnwAB3xQAGwADjvYJzwABOM8AATjjAAE6tAACXVgAAAAEDwABOQ8AATq0AAAABAQHAAE5JAAAAl1RhAwFgA8AA/M1gA8AA/FUAAFwBPgE9MMAATmUfwABOb8AA/a0BAAEnwAB3xQAGwADjyIJzwABOssAATr3AAE8XAQCDHgAAAAEDwABOw8AATxcAAAAAAAAAYAPAAPzNAT4CScAATskcwABO1BbAAE7NLmHAAP7vgJcBAAGTAMAA/0tKwABO2QEcwABO5C5LAQABkwDAAP7OPz0wwABO7R7AAE8IwADQOAAAAAAGwADjyYJzwABPHMAATyfAAE+JAQCB6gAAAAEDwABPLMAAT4kAAAAAAAAAYAPAAPzNAT4CScAATzIcwABPPRbAAE82LmHAAP7vgJcBAAGTAMAA/0tKwABPQgEcwABPTS5LAQABHMAAT1UWwABPTi5hwAD+74GNAQABlADAAP9CAMAA/s4/PTDAAE9fHsAAT3rAANA4AAAAAAbAAOPKgnPAAE+OwABPmcAAUDABAIDDAAAAAQPAAE+gwABQMAAAAAAAAABgA8AA/M0BPgNJwABPphzAAE+xFsAAT6ouYcAA/u9IAQABlADAAP8/SsAAT7cBHMAAT8IuSwEAAZMAwAD+zj9JwABPyxzAAE/WFsAAT88uYcAA/u9IAQABkwDAAP8/PTDAAE/cHsAAT/fAANA4AAAAAD89MMAAUAgewABQI8AA0DkAAAAABsAA476Cc8AAUDXAAFA6wABQuAAAoEkAAAABA8AAUEDAAFC4AAAAAgICwABQRQAAACdgA8AA/hsAwABQXQAAIIPRXQPAAP59AWADwAD8zQAAXAE+Ak7AAFBzwABQdwABgpBgA8AA/hsBHMAAUIkWwABQgoHAAFB5wHQgzmHAAP6gZAEAAYDAAFCLwHQgvwDAAP9BPRzAAFCWLoNkAwADgMAAUJ/AdCC/gsAAUKbAdCDrgcAAUKvAdCDOAMAA/uQGwADjv4JzwABQvcAAUMLAAFF6AACcBwAAAAEDwABQy8AAUXoAAAADAgPAAFDQAAAAamADwAD+GwDAAFDbAAAAgpBgA8AA/hsAwABQ6AAAIMAARHRgA8AA/M0BagBgA8AA/yV5AFwBPgI9HsAAUQXAAP1cAwADgMAAURXAdCF+gcAAURzAdCGNFsAAUSYuYcAA/u8ARcAAUTMBwABRPMAAUT4AAGJgA8AA/hsBgMAAUUDAdCF+ARzAAFFJg8AAUUfAdCHuYwEAAYHAAFFLwHQhjQDAAP9JAYvAAFFSwHQh7hzAAFFQg8AAUVLAdCHuZAEAAZQAwAD/QT4BPRzAAFFhLoC/AgACg8AAUWLAdCHugsAAUWfAdCGdAMAA/s8AAHP/HABz/48Ac/+5AHP/4QB0AAkAdABWAHQAtwB0AQoAdAF/AHQCCgB0AxwAdARcAHQFdgB0BkgAdAeZAHQH/AB0CFcAdAi6AHQJFQB0CXgAdAm9AHQKCAB0CqQAdAroAHQLUAB0C5cAdAxYAHQNwQB0DvMAdA90AHQP/AB0EQcAdBIRAHQToQB0FUUAdBdbAHQXvAB0GBIAdBhwAHQY1gB0GUIAdBokAHQbsAB0HWgAdB20AHQeDwB0Hm8AdB7PAHQfTQB0H+UAdCCVAHQhVAB0InEAAAA0AsAA486Cc8AB2d7AAdn+wAHejjfAAHuxAAABYAHAAOOUAAFdAcAA1lsBYAPAAOWLAAEFwADj1gAAAAAEAAADAAAAAAAAAAAAYAPAAOPOAT8BCQAAwADjwQAAAAAEBsAA49CCc8AB2f7AAdn+AAAQoD8AwADV38AA1d8BAwAAAAAAAwMDAAAAAGpgA8AA/hsAAAAAAIKQYAPAAP4bAAAAACCD0V0DwAD+fQFbAABcAUoAAR0AoD8DAAOAAMB0I86BAMB0I9qCAMB0I+cAwADV3wbAAOPSgnPAAFHxwABR/cAAUhQAAsAAemrAANW8AAAAAQPAAFIIwABSFAAAAAEBAcAAUg0AAABhYAPAAP4bAABgA8AA5YsABsAA49OCc8AAUhnAAFIewABa+AAAg2QAAAABA8AAUibAAFr4AAAABAMEwABSKwAAAGpgA8AA/hsAwABSNgAAAIKQYAPAAP4bAMAAUkwAACCWg10DwAD+fQFgA8AA/M0AwABSXQAAAKA8YAPAAP4bAWrAAFJpYAPAAP4bCQBcAT4LScAAUogiIhzAAFKOk4CXAQABgMAAUpDAdCSLAMAA/0sBHMAAUp+AwABSmcB0JIuAlwEAAYHAAFKhwHQkmgDAAP9LARzAAFKsgcAAUqjAdCSagJcBAAEWwABSri5hwAD+7wDAAP9LPgI9HsAAUsnAAP1cAwADgMAAUtnAdCSLgcAAUuDAdCSaFsAAUuUuYcAA/u8AQCrAAFMNwABTEgA/ScAAUx8cwABTLYPAAFMjwHQkwWMBAAGTAMAA/0k+AT0wwABTOh/AAFNLwAD9ZQQABIPAAFNRwHQkwZMrJ6A8AD9OwABThMAAU4oAAYDuYAPAAP4bARzAAFOQgcAAU4zAdCSagY0BAAGAwABTksB0JIsAwAD/QknAAFOdHMAAU7scwABTrhbAAFOngsAAU6LAdCSqYcAA/qCBjQEAAYPAAFOwwHQkwQDAAP9CYwEAAYTAAFO9wHQlwwDAAP9JPgE9MMAAU8wewABT58AA0DoAAAAAP0nAAFP8HMAAVAaEwABUAMB0JcNIAQABkwDAAP8/SsAAVAwAP0nAAFQZJcAAVCKCwABUHcB0JKpgA8AA1dI+Ak7AAFSswABUvAABwAB6a2ADwADV0gEmwABUwwCCwABUvsB0JKpgA8AA1dJJwABU3BzAAFT4FsAAVOUuwABwKsAA1iZIAQABFsAAVQuFwABU+8B0JpTAAHAqwADV1QDAAP8/PgFJwABVKSIcwABVNITAAFUuwHQlw2MBAAE3CgDAAP9JACEcwABVVRbAAFVOhcAAVT7AdCaUgo/AANXXSAEAARbAAFVdLoKPwADWKADAANcjPgI9HsAAVXjAAM0uBQAFJsAAVYIAgsAAVX3AdCSqXQPAAP6/AWADwAD8zYPAAFWTwHQkwS6AwABVpMB0JIuEwABVq8B0JcMASsAAVb0AScAAVdQcwABV6hbAAFXkFsAAVd0ugo/AANYot/fAANW8wADXG8AAcCnAANW8BgAGHMAAVhwcwABWB4DAAFYBwHQki4ONAQABFsAAVgkuwABwKsAA1iYAwAD/Q2QBAAEWwABWIy6qHMAA1icAwAD/QRzAAFZEhMAAVj7AdCXDg40BAAEWwABWRi7AAHAqwADWJgDAAP9DFsAAVn0WwABWdoXAAFZmwHQmlIKPwADV17f3wADVvMAA1xscwABWrxzAAFaag8AAVpDAdCTBg40BAAEWwABWnC7AAHAqwADWJgDAAP9DZAEAARbAAFbBhcAAVrHAdCaUqhzAANXWAMAA/0EewABW5MAAzTsBAAEuAB7AAFcFwADNOwEAAYLAAFcLwHQkqgAAwADV4j4BSsAAVx8AP0nAAFc+HMAAV1kWwABXUoXAAFdCwHQmlIKPwADV10gBAAEWwABXYS6Cj8AA1igAwADXIz4FTsAAWDfAAFhCAAHAAHpsXQPAAP6/AWADwAD8zQEmwABYSQCCwABYRMB0JKpdA8AA/r8BYAPAAPzNTsAAWGjAAFhzAAHAAHptYAPAAOWLARzAAFh1LsAAemrAANW8AQABhMAAWIHAdCXDAMAA1l5FwABYkQHAAFiawABYnAAAYmADwAD+GwGTARzAAFijFMAAWKHAdClwCABjAQABhMAAWKXAdCXDAMAA/0kBFcAAWKzAdClwCBzAAFitFMAAWKzAdClwCABkAQABlADAAP9BPgE9HMAAWMeHwABYvcB0KTaAvwIAAhTAAFjIwHQpcAgAHMAAWNeGwABYzcB0KP1LAQABHMAAWOKDwABY2MB0JMFkAQABFMAAWOTAdClwCAAAwAD/QQDAAP7OAMAA/s9FwABY+gHAAFkDwABZBQAAYmADwAD+GwGAwABZB8B0JIsBHMAAWRAUwABZDsB0KjAIAGMBAAGBwABZEsB0JJoAwAD/SQEVwABZF8B0KjAIHMAAWRgUwABZF8B0KjAIAGQBAAGUAMAA/0E+AT0cwABZLC6AvwIAAhTAAFktwHQqMAgAHMAAWTyHwABZMsB0KTZLAQABHMAAWT8UwABZPcB0KjAIAIGNAQABgMAAWUHAdCSLAMAA/0IAwAD+zgDAAP7PSsAAWVsAPz9OwABZewAAAKA9XQPAAP6/AVsATsAAWY4AAACgPmADwAD+GwBJwABZniXAAFmngsAAWaLAdCSqXQPAAP6/AWADwAD8zT4CPY3AAFnAwHQq9BTAAFnMwHQkqgIBXQPAAP6/AWADwAD8zT2OwABZ2MB0KweDwABZ5cB0JME+Aj2NwABaA8B0KvQcwABaJBzAAFoUgsAAWg/AdCSqloQBAAGDwABaGcB0JMEAwAD+l4CtAQAAAYV2KsAA/pM9jsAAWkPAdCsHk0nAAFpdHMAAWnQcwABabIbAAFphwHQrB2QBAAGEwABabsB0JcMAwAD/QYCXAQABFsAAWoCFwABadsB0KvRhwAD+7wDAAP9LPgE9MMAAWpAewABaq8AA0DoAAAAAPz0ewABaxcAAzS4FAAWFwABaysB0KvSGwABa1cB0KwcugMAAWufAdCSLhMAAWu7AdCXDAAbAAOPUgnPAAFr9wABbCcAAW/YAAIFYAAAAAQPAAFsQwABb9gAAAAIBAsAAWxUAAABqYAPAAP4bAMAAWyEAAACCkGADwAD+GwFqAGADwAD/JXkAYAPAAOWLAT4FPYnAAFstwHQsgR7AAFs+wAD9XAMAA4DAAFtOwHQscoHAAFtVwHQsgRbAAFtfLmHAAP7vAE7AAFtwwABbdwAAYWADwAD+GwEcwABbfYHAAFt5wHQsgYGNAQABgMAAW3/AdCxyAMAA/0JOwABblsAAW50AAIF2YAPAAOWLARzAAFufLsAAemrAANW8AQABgsAAW6vAdCzZAMAA1l49HMAAW7+DwABbuMB0LQ2DZAQABJOCwABby8B0LNkugMAAW9nAdCxyAMAA/uRKwABb5QGDwABb7MB0LQ0AAHQjpwB0JBoAdCRhAHQsSAB0LXsAAAAEAsAA49eCc8AB2d7AAdn+wAHejgPAAHuyAWrAAdnfYAPAAPwcwAGCQAABYAHAAOPOAAFgAcAA5YsAAAYGwADj2oJzwAHay8AB2tPAAdtKBAWAtcAA1bwCasAB2pdgA8AA/BzAAaY9agBgA8AAzUzAAaZZAAABA8AB2ubAAdtKAAAAAwMDwAHa8gAAAIKPYAPAANc1AMAB2v4AAACqHGADwAD+GwDAAdsRAAAAYWADwAD+GwAAYAPAAOPXAAbAAOPcgnPAAdt7wAHbqcAB3IQDAEsBasAB23xgA8AA/BzAAMD6AAABA8AB26vAAdyEAAAAAQEBwAHbsAAAACdgA8AA/hsAAGADwAD8zQE+AknAAdu9IhzAAdvHgMAB28HAdC6HYwEAAZMAwAD/SQEcwAHb1IDAAdvOwHQuh4FtAQABFsAB29cuYcAA4HkAwAD/TD4BPTDAAdvnH8AB2/HAAP1xAwADgMAB3ALAdC6HLicnAD9KwAHcIwEcwAHcPhbAAdwqLsAAe4PAANW8wADgd8AAeqnAANW8AQABHMAB3FgWwAHcSi6qHMAA1idkAQABHMAB3GGAwAHcW8B0LoeDjQEAAWrAAdxvYAPAAP4bg10AwAD/QwDAAP9BAMAA11AGwADj3YJzwAHcicAB3LXAAd2fAwCAvwFqwAHcimADwAD8HMAAwPoAAAEDwAHcuMAB3Z8AAAACAgLAAdy9AAAAJ2ADwAD+GwDAAdzLAAAggJZgA8AA/M0AAFwBPgJJwAHc2CIcwAHc4oDAAdzcwHQvqWMBAAGTAMAA/0kBHMAB3O+AwAHc6cB0L6mBbQEAARbAAdzyLmHAAOB5AMAA/0w+AT0wwAHdAh/AAd0MwAD9cQMAA4DAAd0dwHQvqS4nJwA/PRzAAd1JFsAB3T4uwAB7g8AA1bzAAOB3wAB6q8AA1bwCAAIcwAHdbBbAAd1eLqocwADWJ2QBAAEcwAHddYDAAd1vwHQvqYONAQABasAB3YNgA8AA/huDXQDAAP9DAMAA/0GBwAHdlcB0L7gAwADXUQbAAOPignPAAd3VwAHd3cAB3hwBAMAAcCoAAAABA8AB3fDAAd4cAAAAAAAAAGADwAD+GwE+AUrAAd32AWrAAd4JYAPAAP4bg10GwADj34JzwAHeQMAB3kzAAd6MAADAAHpqwADVvAAAAAEDwAHeV8AB3owAAAABAQHAAd5cAAAAYWADwAD+GwAAYAPAAOWLAT4BSsAB3moBHsAB3nXAAOWPAQABgMAB3oHAdDEaAAbAAOPggnPAAdn+wAHZ/gAAEKA/AMAA1d/AANXfAQMAAAAAAAMDAwAAAABqYAPAAP4bAAAAAACCkGADwAD+GwAAAAAgg9FdA8AA/n0BWwAAXAFKAAEdAKA/AwADgADAdDF2gQDAdDGCggDAdDGPAMAA1d8AAHQtzwB0Lk8AdC9wAHQwoQB0MOoAdDFPAHQxwgAAAAYCwADj44JzwAHekcAB3rHAAeMCN8AAe7QAAAFgAcAA4HIAAWABwADWYQABBcAA5BQAAAAABAAAAwAAAAAAAAAAAGADwADj4wE/AQkAAMAA4HsAAAAANwbAAOPlgnPAAd6xwAHesQAAEKA/AMAA1d/AANXfAQMAAAAAAAMDAwAAAABqYAPAAP4bAAAAAACCkGADwAD+GwAAAAAgg9FdA8AA/n0BWwAAXAFKAAEdAKA/AwADgADAdDJggQDAdDJsggDAdDJ5AMAA1d8GwADkFoJzwABcPcAAXEXAAFxXAQLAAHAqAAAAAQPAAFxXwABcVwAAAAAAAABgA8AA/hsABsAA5BeCc8AAXFvAAFxjwABccAECqhwAAAABA8AAXHDAAFxwAAAAAAAAAGADwAD+GwAGwADkGIJzwABcdMAAXITAAFyKAQKCjwAAAAEDwABcisAAXIoAAAAAAAAAYAPAANcYAAbAAOPngnPAAFyPwABcncAAXLQAAsAAemrAANW8AAAAAQPAAFyowABctAAAAAEBAcAAXK0AAABhYAPAAP4bAABgA8AA5ZQABsAA4+iCc8AAXLnAAFzFwABc9QAAlpsAAAABA8AAXNHAAFz1AAABAACCemADwAD/aAFbAAAAAF0DwAD+fQFfAwAAAUrAAFzXAR/AAFzbwADQKwEBXwMAAAEuAAbAAOPpgnPAAFz6wABdDsAAXXoAAJaSAAAAAQPAAF0YwABdegAAAAEBAcAAXS0AACCD210DwAD+fQFgA8AA5bIAAF0DwAD+fQFgA8AA5bIBSsAAXT0BHsAAXUHAANADAgFgA8AA5bICLoDAAF10wHQ0EAAGwADj6oJzwABdf8AAXYfAAF21AACWjQAAAAEDwABdjsAAXbUAAAEAAJdOYAPAAP9oAVsAAAAAXQPAAP6/AV8DAAABSsAAXZQBHsAAXZnAAP7KAQJgA8AA5bJfAwAAAS4ABsAA5B+Cc8AAXbnAAF3CwABeMQIAgx4AAAABA8AAXcfAAF4xAAAAAQEBwABd0gAAIICWYAPAAOWyAABcAT4CScAAXd8cwABd7xbAAF3oLmHAAP7vSAEAAZMAwAD/Pz0wwABd9R/AAF3/wAD9cQIAApMuAD89HMAAXiIugL8CAAKTgMAAXijAdDTkAMAA/s8GwADkIIJzwABeNsAAXj/AAF67AgCB6gAAAAEDwABeQ8AAXrsAAAABAQHAAF5OAAAggJZgA8AA5bIAAFwBPgJJwABeWxzAAF5rFsAAXmQuYcAA/u9IAQABkwDAAP8/PTDAAF5xH8AAXnvAAP1xAgACky4APz0cwABeni6AvwIAAhzAAF6rFsAAXqQuYcAA/u+BjQEAAZQAwAD/QoDAAF6ywHQ1cwDAAP7PBsAA4+uCc8AAXsDAAF7EwABfgwAAoEQAAAABA8AAXs7AAF+DAAAAAgECwABe1AAAAJdUYQMBYAPAAOWyYAPAAPxVAMAAXvIAAABqYAPAAP4bAWrAAF76YAPAAP4bCQBgA8AA/hsBPgNJwABfBBzAAF8OgcAAXwjAdDY1YwEAAZMAwAD/ST2JwABfE8B0NjWTP0XAAF8iAcAAXyvAAF8tAABiYAPAAP4bAYHAAF8vwHQ2NQEcwABfOILAAF82wHQ2iWMBAAEWwABfOi5hwAD+7wDAAP9JAYrAAF9CwHQ2iRzAAF9DgsAAX0LAdDaJZAEAAZQAwAD/QT4BScAAX08cwABfV4DAAF9TwHQ2HCABAAEcwABfXC5LAQABgsAAX13AdDaJAMAA/s4AAErAAF9iAYLAAF9pwHQ2iT9KwABfdgEcwABffZSBxgAAAADAAP4+BsAA4+yCc8AAX4jAAF+MwABgcQAAoEUAAAABA8AAX5rAAGBxAAAAAgECwABfoAAAAJdUYQMBYAPAAOWyYAPAAPxVAMAAX74AAABqYAPAAP4bAWoAYAPAAP8leQBgA8AA/hsBPgNJwABfzCIcwABf1oHAAF/QwHQ3hUgBAAErAMAA/z8BHMAAX+eBwABf4cB0N4WBbQEAARbAAF/vLmHAAP7vAMAA/0w9icAAX/fAdDeFHMAAYAsWwABgBC5hwAD+74GNAQABlADAAP9CP0XAAGAUAcAAYB3AAGAfAABiYAPAAP4bAYHAAGAhwHQ3hQEcwABgKoLAAGAowHQ4FYFtAQABkwDAAP9MAYrAAGAwwHQ4FRzAAGAxgsAAYDDAdDgVgY0BAAGUAMAA/0I+AUnAAGA9HMAAYEWAwABgQcB0N2wgAQABHMAAYEouSwEAAYLAAGBLwHQ4FQDAAP7OAABKwABgUAGCwABgV8B0OBU/SsAAYGQBHMAAYGuUgcYAAAAAwAD+PgbAAOPtgnPAAGB2wABgj8AAYW4DAGQAAAABA8AAYJDAAGFuAAAAAQEBwABgoQAAIIPbXQPAAP6/AWADwADlsgAAXQPAAP6/AWADwADlsgE+Ak7AAGCywABgvgAAg15gA8AA/hsBHMAAYMwWwABgxS5hwAD+72QBAAEWwABg1IDAAGDOwHQ472HAAP7vAMAA/0FKwABg4AE1wABg8gAAAQBdA8AA/r8BYAPAAOWyATHAAGDyYAPAAOWyADUAAAABAFsBF8AAYP2CwABg+8B0OV5hgcAAYQbAdDkYwAD+7TUAAAABAFsBHMAAYRqCwABhGMB0OV6DZAMAA5MWwABhKy5hwAD+7y4AwAD+5DUAAAABAFsBHMAAYUGCwABhP8B0OV6DZAMAAxbAAGFPLmHAAP7vgcAAYVfAdDkYgMAAYWTAdDjvAMAA/uSCAMB0OV4GwADj7oJzwABhc8AAYXjAAGIXAACDHAAAAAEDwABhgMAAYhcAAAABAQHAAGGIAAAAlntgA8AA/2gAAGADwAD8VQE+A07AAGGbwABhnwAAl8FgA8AA/hsBFsAAYaYuYcAA/u9FwABhsgHAAGG7wABhvQAAYmADwAD+GwGTARzAAGHEgsAAYcLAdDp9YwEAAYHAAGHGwHQ6WQDAAP9JAYrAAGHNwHQ6fRzAAGHLgsAAYc3AdDp9ZAEAAZQAwAD/QT4BScAAYdgcwABh5BzAAGHgLksBAAGCwABh4cB0On0AwAD+zkgBAAGAwABh58B0Oj4AwAD/dUrAAGHwASk/SsAAYgcBKgbAAOPvgnPAAGIcwABiIcAAYwoAAKAzAAAAAQPAAGIowABjCgAAAAEAAcAAYjEAAACgNGADwADSfgFqAGADwAD/JXkAXAE+Az0jHMAAYkeAwABiQMB0O0JIAQABKwDAAP91iMAAYkDAdDtCHsAAYk/AANKAAAAAACsBYAPAANJ+TsAAYmHAAGJjAABiYAPAAP4bARbAAGJqLmHAAP7vQ8AAYnYcwABif4HAAGJ9wHQ7mYCXAQABlADAAP9LPgVOwABikMAAYpQAAKA1YAPAAP4bARzAAGKdgMAAYpbAdDtCoDYBAAGBwABipcB0O5kAwADSgz2JwABir8B0O5kcwABisYHAAGKvwHQ7mYGNAQABlADAAP9CTsAAYsHAAGLFAACgN2ADwADlsgEcwABiyy5LAQABgcAAYszAdDuZAMAA/s49HMAAYtougL8CAAKBwABi28B0O5kcwABi5C5LAQABgsAAYuXAdDvXAMAA/s4AwAD+zz0cwABi9S6AvwIAAoLAAGL2wHQ714PAAGL9wHQ8LwDAAP7PBsAA4/CCc8AAYw/AAGMUwABr/QAAg2QAAAABA8AAYxzAAGv9AAAABAMEwABjIQAAAGpgA8AA/hsAwABjLAAAAIKQYAPAAP4bAMAAY0UAACCWg10DwAD+fQFgA8AA5bIAwABjVgAAAKA8YAPAAP4bAWrAAGNiYAPAAP4bCQBcAT4LScAAY4EiIhzAAGOHk4CXAQABgMAAY4nAdDzZAMAA/0sBHMAAY5iAwABjksB0PNmAlwEAAYHAAGOawHQ86ADAAP9LARzAAGOlgcAAY6HAdDzogJcBAAEWwABjpy5hwAD+7wDAAP9LPgI9HsAAY8LAAP1cAwADgMAAY9LAdDzZgcAAY9nAdDzoFsAAY94uYcAA/u8AQCrAAGQGwABkCwA/ScAAZBgcwABkJoPAAGQcwHQ9D2MBAAGTAMAA/0k+AT0wwABkMx/AAGREwAD9ZQQABIPAAGRKwHQ9D5MrJ6A8AD9OwABkfcAAZIMAAYDuYAPAAP4bARzAAGSJgcAAZIXAdDzogY0BAAGAwABki8B0PNkAwAD/QknAAGSWHMAAZLQcwABkpxbAAGSggsAAZJvAdDz4YcAA/qCBjQEAAYPAAGSpwHQ9DwDAAP9CYwEAAYTAAGS2wHQ+EQDAAP9JPgE9MMAAZMUewABk4MAA0DoAAAAAP0nAAGT1HMAAZP+EwABk+cB0PhFIAQABkwDAAP8/SsAAZQUAP0nAAGUSJcAAZRuCwABlFsB0PPhgA8AA1dI+Ak7AAGWowABluAABwAB6a2ADwADV0gEmwABlvwCCwABlusB0PPhgA8AA1dJJwABl2BzAAGX0FsAAZeEuwABwKsAA1mNIAQABFsAAZgeFwABl98B0PuLAAHAqwADV1QDAAP8/PgFJwABmJSIcwABmMITAAGYqwHQ+EWMBAAE3CgDAAP9JACEcwABmURbAAGZKhcAAZjrAdD7igo/AANXXSAEAARbAAGZZLoKPwADWZQDAANcjPgI9HsAAZnTAAM0uBQAFJsAAZn4AgsAAZnnAdDz4XQPAAP6/AWADwADlsoPAAGaSwHQ9Dy6AwABmo8B0PNmEwABmqsB0PhEASsAAZrwAScAAZtMcwABm6RbAAGbjFsAAZtwugo/AANZlt/fAANW8wADXG8AAcCnAANW8BgAGHMAAZxscwABnBoDAAGcAwHQ82YONAQABFsAAZwguwABwKsAA1mMAwAD/Q2QBAAEWwABnIi6qHMAA1mQAwAD/QRzAAGdDhMAAZz3AdD4Rg40BAAEWwABnRS7AAHAqwADWYwDAAP9DFsAAZ3wWwABndYXAAGdlwHQ+4oKPwADV17f3wADVvMAA1xscwABnrhzAAGeZg8AAZ4/AdD0Pg40BAAEWwABnmy7AAHAqwADWYwDAAP9DZAEAARbAAGfAhcAAZ7DAdD7iqhzAANXWAMAA/0EewABn48AAzTsBAAEuAB7AAGgEwADNOwEAAYLAAGgKwHQ8+AAAwADV4j4BSsAAaB4AP0nAAGg9HMAAaFgWwABoUYXAAGhBwHQ+4oKPwADV10gBAAEWwABoYC6Cj8AA1mUAwADXIz4FTsAAaTbAAGlBAAHAAHpsXQPAAP6/AWADwADlsgEmwABpSACCwABpQ8B0PPhdA8AA/r8BYAPAAOWyTsAAaWrAAGl1AAHAAHptYAPAAOWUARzAAGl3LsAAemrAANW8AQABhMAAaYPAdD4RAMAA1m1FwABpkwHAAGmcwABpngAAYmADwAD+GwGTARzAAGmlFMAAaaPAdEG+CABjAQABhMAAaafAdD4RAMAA/0kBFcAAaa7AdEG+CBzAAGmvFMAAaa7AdEG+CABkAQABlADAAP9BPgE9HMAAacmHwABpv8B0QYSAvwIAAhTAAGnKwHRBvggAHMAAadmGwABpz8B0QUtLAQABHMAAaeSDwABp2sB0PQ9kAQABFMAAaebAdEG+CAAAwAD/QQDAAP7OAMAA/s9FwABp/AHAAGoFwABqBwAAYmADwAD+GwGAwABqCcB0PNkBHMAAahIUwABqEMB0Qn4IAGMBAAGBwABqFMB0POgAwAD/SQEVwABqGcB0Qn4IHMAAahoUwABqGcB0Qn4IAGQBAAGUAMAA/0E+AT0cwABqLi6AvwIAAhTAAGovwHRCfggAHMAAaj6HwABqNMB0QYRLAQABHMAAakEUwABqP8B0Qn4IAIGNAQABgMAAakPAdDzZAMAA/0IAwAD+zgDAAP7PSsAAal0APz9OwABqfQAAAKA9XQPAAP6/AVsATsAAapAAAACgPmADwAD+GwBJwABqoCXAAGqpgsAAaqTAdDz4XQPAAP6/AWADwADlsj4CPY3AAGrFwHRDQhTAAGrRwHQ8+AIBXQPAAP6/AWADwADlsj2OwABq3cB0Q1WDwABq6sB0PQ8+Aj2NwABrCMB0Q0IcwABrKRzAAGsZgsAAaxTAdDz4loQBAAGDwABrHsB0PQ8AwAD+l4CtAQAAAYV2KsAA/pM9jsAAa0jAdENVk0nAAGtiHMAAa3kcwABrcYbAAGtmwHRDVWQBAAGEwABrc8B0PhEAwAD/QYCXAQABFsAAa4WFwABre8B0Q0JhwAD+7wDAAP9LPgE9MMAAa5UewABrsMAA0DoAAAAAPz0ewABrysAAzS4FAAWFwABrz8B0Q0KGwABr2sB0Q1UugMAAa+zAdDzZhMAAa/PAdD4RAAbAAOPxgnPAAGwCwABsFsAAbGUAAIGlAAAAAQPAAGwbwABsZQAAAAEBAcAAbCEAAACBpmEDAWADwADlsmADwAD8VQAAXQPAAP59AWADwADlsgFKwABsQAEfwABsRMAAz00CAWADwADlsgIugMAAbGPAdETAAAbAAOPygnPAAGxqwABsfsAAbLcAAJaZAAAAAQPAAGyCwABstwAAAAEBAcAAbIcAAACDqGADwAD+GwAAXQPAAP59AWADwADlsgFKwABsjQEfwABskcAAzwgDAWADwADlsgMuk4DAAGy1wHRFNQAGwADj84JzwABsvMAAbNDAAG0tAACWmgAAAAEDwABs2cAAbS0AAAABAQHAAGzfAAAAl1RhAwFgA8AA5bJgA8AA/FUAAF0DwAD+fQFgA8AA5bIBSsAAbQEBH8AAbQXAAM+TAgFgA8AA5bICLoDAAG0owHRFogAGwADj9IJzwABtMsAAbUbAAG2IAACWhAAAAAEDwABtSsAAbYgAAAABAQHAAG1PAAAAg6hgA8AA/hsAAF0DwAD+fQFgA8AA5bIBSsAAbVsBH8AAbV/AAM8IAwFgA8AA5bIDLoDAAG2AwHRGFysABsAA4/WCc8AAbY3AAG2hwABt/gAAlpgAAAABA8AAbarAAG3+AAAAAQEBwABtsAAAAJdUYQMBYAPAAOWyYAPAAPxVAABdA8AA/n0BYAPAAOWyAUrAAG3SAR/AAG3WwADPywIBYAPAAOWyAi6AwABt+cB0RoQABsAA5BmCc8AAbgPAAG4bwABuUAEAmOAAAAABA8AAbiTAAG5QAAAAAAAAAF0DwAD+fQFgA8AA5bIBSsAAbicBH8AAbivAANC5AQFgA8AA5bIBLgAGwADj9oJzwABuVcAAbmnAAG6UAACcwgAAAAEDwABubsAAbpQAAAAAAAAAXQPAAP7xAmADwAD+G2ADwADlsgFKwABudAEfwABueMAA0K8BAWADwADlsgEuAAbAAOP3gnPAAG6ZwABurcAAb0YAAKA5AAAAAQPAAG61wABvRgAAAAIBAsAAbroAAABqYAPAAP4bAMAAbsYAAACCkGADwAD+GwFqAGADwAD/JXkAXQPAAP59AWADwADlsgE+Aj0ewABu3cAA/VwDAAOAwABu7cB0R6WBwABu9MB0R7QWwABu/i5hwAD+7wBKwABvCwEfwABvFsAAzwgDAWADwADlsgMugMAAbzfAdEelgcAAbz7AdEe0AAbAAOQagnPAAG9LwABvY8AAb5YBAFwAAAABA8AAb2zAAG+WAAAAAAAAAF0DwAD+uAFgA8AA5bIBSsAAb28BH8AAb3PAAOBxAQFgA8AA5bIBLgAGwADj+IJzwABvm8AAb6vAAHAMAACArQAAAAEDwABvscAAcAwAAAABAAABwABvuAAAAIV2YAPAAPxVAWrAAG/CYAPAAPxVd10DwAD+vwFgA8AA5bIBPgFKwABvzwEewABv2sAA/sUCAWADwADlsgEuAYV2gMAAb//AdEiyBsAA4/mCc8AAcBHAAHAgwABwVgAAlXEAAAABA8AAcCXAAHBWAAAAAAAAAF0DwAD/swFgA8AA5bIBPgFKwABwLgEewABwOcAAwyMBAWADwADlsgEuAAbAAOP6gnPAAHBbwABwYMAAcN4AAIP9AAAAAQPAAHBnwABw3gAAAAEBAcAAcG0AAACBpmEDAWADwADlslwAAFwBPgJOwABwjcAAcJEAAJfBYAPAAP4bARbAAHCYLmHAAP7vRcAAcKQBwABwrcAAcK8AAGJgA8AA/hsBkwEcwABwtoLAAHC0wHRJwGMBAAGBwABwuMB0SZwAwAD/SQGKwABwvcB0ScAcwABwvoLAAHC9wHRJwGQBAAGUAMAA/0E+AT0cwABwy4DAAHDKwHRJgiABAAEcwABw0C5LAQABgsAAcNHAdEnAAMAA/s4AAAbAAOP7gnPAAHDjwABw7cAAcgAAAJaVAAAAAQPAAHDzwAByAAAAAAEBAcAAcP4AACCHOWEDAmADwADlsmADwADlsmADwADlsgAAYAPAAOWyAT4FTsAAcTXAAHE5AACXwWADwAD+GwEWwABxQC5hwAD+70nAAHFMHMAAcVSBwABxUMB0SplIAQABkwDAAP8/PTDAAHFaHsAAcXXAANA4AAAAAD9OwABxisAAcZAAAICWYAPAAOWyARzAAHGWLksBAAGTAMAA/s5FwABxnwHAAHGowABxqgAAYmADwAD+GwGUARzAAHGxg8AAca/AdEsSYwEAAYHAAHGzwHRKmQDAAP9JAYvAAHG6wHRLEhzAAHG4g8AAcbrAdEsSZAEAAZQAwAD/QT4BPYrAAHHFwHRK6RzAAHHUgMAAcc3AdEpvIAIAAoLAAHHVwHRK6RzAAHHgLksBAAGDwABx4cB0SxIAwAD+zgAASsAAcfABgsAAcffAdErpBsAA4/yCc8AAcgXAAHIHwABy5AAAg18AAAABA8AAcg7AAHLkAAABAACCemADwAD/aAFbAgICwAByEQAAAJaRXwMAAADAAHIhAAAAhzlhAwJfAwAAYAPAAOWyXwMAAAAAXwMAAAE+A07AAHJXwAByWwAAl8FgA8AA/hsBFsAAcmIuYcAA/u9FwABybgHAAHJ3wAByeQAAYmADwAD+GwGTARzAAHKAg8AAcn7AdExEYwEAAYLAAHKCwHRMIADAAP9JAYvAAHKJwHRMRBzAAHKHg8AAconAdExEZAEAAZQAwAD/QT4BPYjAAHKUwHRL7hzAAHKqgcAAcqPAdEv8IAIAAoDAAHKrwHRL7hzAAHK9LksBAAGDwAByvsB0TEQAwAD+zgAASsAAcs0BgMAActTAdEvuBsAA4/2Cc8AAcunAAHL1wABzRgAAgKsAAAABA8AAcvvAAHNGAAABAACCemADwAD/aAFbAQEBwABy/gAAAIGmYQMBYAPAAOWyXwMAAAAAXQPAAP59AV8DAAABSsAAcx0BHsAAcyHAAM8cAgJgA8AA5bJfAwAAAi6AwABzRMB0TSAABsAA4/6Cc8AAc0vAAHNXwABztQAAhJUAAAABA8AAc2DAAHO1AAABAACCemADwAD/aAFbAQEBwABzbQAAAIGmYQMBYAPAAOWyXQPAAP59AV8DAAAAAF0DwAD+fQFfAwAAAUrAAHOMAR/AAHOQwADPYQICYAPAAOWyXwMAAAIugMAAc7PAdE2hAAbAAOP/gnPAAHO6wABzv8AAdF8AAJaLAAAAAQPAAHPEwAB0XwAAAAEBAcAAc8oAAACBpmEDAWADwADlsmADwAD8VQAAYAPAAPxVAT4DTsAAc+rAAHPuAACXwWADwAD+GwEWwABz9S5hwAD+70XAAHQBAcAAdArAAHQMAABiYAPAAP4bAZMBHMAAdBOCwAB0EcB0TmVjAQABgcAAdBXAdE5BAMAA/0kBisAAdBzAdE5lHMAAdBqCwAB0HMB0TmVkAQABlADAAP9BPgFJwAB0JyEcwAB0LYDAAHQswHROHSABAAEcwAB0Mi5LAQABgsAAdDPAdE5lAMAA/s4AAErAAHQ4ASo/SsAAdFABKQbAAOQAgnPAAHRkwAB0acAAdQYAAIHWAAAAAQPAAHRswAB1BgAAAAEBAcAAdHIAAACBpmEDAWADwADlsmADwAD8VQAAYAPAAPxVAT4DTsAAdJLAAHSWAACXwWADwAD+GwEWwAB0nS5hwAD+70XAAHSpAcAAdLLAAHS0AABiYAPAAP4bAZMBHMAAdLuCwAB0ucB0T3BjAQABgcAAdL3AdE9MAMAA/0kBisAAdMTAdE9wHMAAdMKCwAB0xMB0T3BkAQABlADAAP9BPgFJwAB0zxzAAHTUgMAAdNPAdE8oIAEAARzAAHTZLksBAAGCwAB02sB0T3AAwAD+zgAASsAAdN8BKT9KwAB09gEqBsAA5AGCc8AAdQvAAHUVwAB2OAAAlo8AAAABA8AAdR/AAHY4AAAAAgEBwAB1JQAAAJdUYQMBYAPAAOWyYAPAAPxVAAHAAHVJAAAglpBhAwBgA8AA5bIBagBgA8AA/yV5YAPAAOWyAT4ETsAAdV7AAHViAACXwWADwAD+GwEWwAB1aS5hwAD+70XAAHV1AcAAdX7AAHWAAABiYAPAAP4bAZMBHMAAdYeDwAB1hcB0UJZjAQABgsAAdYnAdFByAMAA/0kBi8AAdZDAdFCWHMAAdY6DwAB1kMB0UJZkAQABlADAAP9BPgJOwAB1n8AAdacAAJZ7YAPAAOWyARzAAHWtLksBAAGDwAB1rsB0UJYAwAD+zknAAHW4HMAAdcCAwAB1vMB0UDIgAQABhMAAdcHAdFDvAABKwAB1ywGEwAB10sB0UO8/ScAAdeUhHMAAdfCBwAB16cB0UExIAQABKwDAAP91SsAAdfkBHMAAdgaBwAB2AMB0UEwgAAAAAAA/PTDAAHYOHsAAdinAANA4AAAAAAbAAOQCgnPAAHY9wAB2R8AAd4AAAJaUAAAAAQPAAHZQwAB3gAAAAAIBAcAAdlYAAACXVGEDAWADwADlsmADwAD8VQABwAB2egAAIJaQYQMAYAPAAOWyAWoAYAPAAP8leWADwADlsgE+BE7AAHaPwAB2kwAAl8FgA8AA/hsBFsAAdpouYcAA/u9FwAB2pgHAAHavwAB2sQAAYmADwAD+GwEcwAB2t4LAAHazwHRSAoGNAQABlADAAP9CARzAAHa+g8AAdrzAdFImgW0BAAGTAMAA/0wBi8AAdsbAdFImHMAAdsSDwAB2xsB0UiaBjQEAAZQAwAD/Qj4CTsAAdtXAAHbdAACWe2ADwADlsgEcwAB24y5LAQABg8AAduTAdFImAMAA/s5JwAB27hzAAHb2gMAAdvLAdFHCIAEAAYTAAHb3wHRSkQAAPgFKwAB3CwGEwAB3EsB0UpE/ScAAdy0hHMAAdziBwAB3McB0UdxIAQABKwDAAP91SsAAd0EBHMAAd06BwAB3SMB0UdwgAAAAAAA/PTDAAHdWHsAAd3HAANA4AAAAAAbAAOQDgnPAAHeFwAB3j8AAeZkAAJaXAAAAAQPAAHeawAB5mQAAAAIBAcAAd6AAAACXVGEDAWADwADlsmADwAD8VQABwAB3xAAAIJaQYQMAYAPAAOWyAWoAYAPAAP8leWADwADlsgE+B07AAHfZwAB34AAAgXZbAStOwAB38cAAd/8AAMAAcyVgA8AA/FUBKk7AAHgQwAB4FAAAl8FgA8AA/hsBFsAAeBsuYcAA/u9FwAB4JwHAAHgwwAB4MgAAYmADwAD+GwGTARzAAHg5hcAAeDfAdFPxYwEAAYTAAHg7wHRTzQDAAP9JAY3AAHhCwHRT8RzAAHhAhcAAeELAdFPxZAEAAZQAwAD/QT4CTsAAeFHAAHhZAACWe2ADwADlsgEcwAB4Xy5LAQABhcAAeGDAdFPxAMAA/s5JwAB4ahzAAHhygMAAeG7AdFNmIAEAAYbAAHhzwHRUSgAAPgNJwAB4h4PAAHiLwHRTtj4BPTDAAHimHsAAeMHAANA5AAAAAD89isAAeN7AdFOmhsAAeOfAdFRKPYvAAHj4wHRTtik/ScAAeSCDwAB5JMB0U7ZKwAB5MwEmwAB5MwGCwAB5OsB0U6ZgA8AA5bI/ScAAeUYhHMAAeVGBwAB5SsB0U4BIAQABKwDAAP91SsAAeVoBHMAAeWeBwAB5YcB0U4AgAAAAAAA/PTDAAHlvHsAAeYrAANA4AAAAAAbAAOQEgnPAAHmewAB5qMAAedkAAJaOAAAAAQPAAHmxwAB52QAAAAEBAcAAebYAAAAnYAPAAP4bAABgA8AA5bIBPgFKwAB5wwEcwAB5zi5LAQABgMAAec/AdFV8AMAA/s4GwADkBYJzwAB53sAAeePAAHpBAABWAAAAAQPAAHnmwAB6QQAAAAEBAcAAefEAACCAlmADwADlsgAAXAE+AT0wwAB5/h/AAHoIwAD9rQEAASfAAHfEAAbAAOQGgnPAAHpGwAB6S8AAerYAAIClAAAAAQPAAHpRwAB6tgAAAAEBAcAAemYAACCAll0DwAD+fQFgA8AA5bIAAFwBPgE9MMAAenMfwAB6fcAA/a0BAAEnwAB3xAAGwADkB4JzwAB6u8AAesDAAHsxAACfOgAAAAEDwAB6xsAAezEAAAACAgLAAHrLAAAAJ2ADwAD+GwDAAHrcAAAggJZgA8AA5bIAAFwBPgE9MMAAeukfwAB688AA/a0BAAEnwAB6ZwAGwADkCIJzwAB7NsAAezvAAHu6AACgRwAAAAEDwAB7RMAAe7oAAAACAgLAAHtJAAAAJ2ADwAD+GwDAAHtkAAAgKV0DwAD+fQFgA8AA5bIAAFwBPgE9MMAAe3IfwAB7fMAA/a0BAAEnwAB6ZwAGwADkCYJzwAB7v8AAe8TAAHxlAACArgAAAAEDwAB7yMAAfGUAAAABAAHAAHvOAAAAm3dhAwJgA8AA5bJgA8AA5bJgA8AA/hsBagBgA8AA/yV5AFwBPgJJwAB7+BzAAHwEgMAAe/zAdFdjSAEAASsAwAD/dT4BPTDAAHwVJ8AAenE/PR7AAHxOwADQzgIBYAPAAOWyAi6AwAB8WcB0V2MABsAA5AqCc8AAfGrAAHxuwAB9bwAAgLsAAAABA8AAfHXAAH1vAAAAAgECwAB8gAAAIJZ7YAPAAOWyAMAAfI4AAABqYAPAAP4bAWrAAHyWYAPAAP4bCQBgA8AA/hsBPgNJwAB8oBzAAHyqgcAAfKTAdFgTgW0BAAEWwAB8si5hwAD+7wDAAP9MPgFKwAB8wgEcwAB8yZSBxgAAAADAAP4+ScAAfNgcwAB84oHAAHzcwHRYE2MBAAGTAMAA/0k+AT2JwAB878B0WBOTP0XAAH0EAcAAfQ3AAH0PAABiYAPAAP4bAYHAAH0RwHRYEwEcwAB9GoLAAH0YwHRYqWMBAAEWwAB9IS5hwAD+7wDAAP9JAYrAAH0pwHRYqRzAAH0qgsAAfSnAdFipZAEAAZQAwAD/QT4BScAAfTYcwAB9QhzAAH0+LksBAAGCwAB9P8B0WKkAwAD+zkgBAAGAwAB9RcB0WAMAwAD/dUrAAH1OAYLAAH1VwHRYqT9KwAB9YgEcwAB9aZSBxgAAAADAAP4+BsAA5AuCc8AAfXTAAH14wAB+lgAAlrUAAAABA8AAfYPAAH6WAAAAAgECwAB9jgAAIJZ7YAPAAOWyAMAAfZwAAABqYAPAAP4bAWrAAH2kYAPAAP8leQBgA8AA/hsBPgNJwAB9sSIcwAB9u4HAAH21wHRZn0gBAAErAMAA/z8BHMAAfcyBwAB9xsB0WZ+BbQEAARbAAH3ULmHAAP7vAMAA/0w+AT2JwAB95MB0WZ8cwAB9+BbAAH3xLmHAAP7vgY0BAAGUAMAA/0JJwAB+CBzAAH4SgcAAfgzAdFmfYwEAAZMAwAD/ST4BSsAAfh8BHMAAfiaUgcYAAAAAwAD+Pj9FwAB+NAHAAH49wAB+PwAAYmADwAD+GwGBwAB+QcB0WZ8BHMAAfkqCwAB+SMB0WmmBbQEAAZMAwAD/TAGKwAB+UMB0WmkcwAB+UYLAAH5QwHRaaYGNAQABlADAAP9CPgFJwAB+XRzAAH5pHMAAfmUuSwEAAYLAAH5mwHRaaQDAAP7OSAEAAYDAAH5swHRZjwDAAP91SsAAfnUBgsAAfnzAdFppP0rAAH6JARzAAH6QlIHGAAAAAMAA/j4GwADkDIJzwAB+m8AAfqXAAH8AAACGLgAAAAEDwAB+r8AAfwAAAAAAAAAAYAPAAOWyAT4BPTDAAH64H8AAfsLAAP2tAQABJ8AAd8UABsAA5A2Cc8AAfwXAAH8PwAB/cQAAoEYAAAABA8AAfxfAAH9xAAAAAQEBwAB/HAAAACdgA8AA/hsAAGADwADlsgE+AT0wwAB/KR/AAH8zwAD9rQEAASfAAHfFAAbAAOQOgnPAAH92wAB/e8AAf/MAAJdTAAAAAQPAAH+GwAB/8wAAAAEBAcAAf4wAAACXVGEDAWADwADlsmADwAD8VQAAXAE+AT0wwAB/qx/AAH+1wAD9rQEAASfAAHfFAAbAAOQPgnPAAH/4wAB//cAAgHUAAJdWAAAAAQPAAIAIwACAdQAAAAEBAcAAgA4AAACXVGEDAWADwADlsmADwAD8VQAAXAE+AT0wwACALR/AAIA3wAD9rQEAASfAAHfFAAbAAOQbgnPAAIB6wACAiMAAgOIBAIMeAAAAAQPAAICOwACA4gAAAAAAAABgA8AA5bIBPgJJwACAlBzAAICfFsAAgJguYcAA/u+AlwEAAZMAwAD/S0rAAICkARzAAICvLksBAAGTAMAA/s4/PTDAAIC4HsAAgNPAANA4AAAAAAbAAOQcgnPAAIDnwACA9cAAgVcBAIHqAAAAAQPAAID6wACBVwAAAAAAAABgA8AA5bIBPgJJwACBABzAAIELFsAAgQQuYcAA/u+AlwEAAZMAwAD/S0rAAIEQARzAAIEbLksBAAEcwACBIxbAAIEcLmHAAP7vgY0BAAGUAMAA/0IAwAD+zj89MMAAgS0ewACBSMAA0DgAAAAABsAA5B2Cc8AAgVzAAIFqwACCAQEAgMMAAAABA8AAgXHAAIIBAAAAAAAAAGADwADlsgE+A0nAAIF3HMAAgYIWwACBey5hwAD+70gBAAGUAMAA/z9KwACBiAEcwACBky5LAQABkwDAAP7OP0nAAIGcHMAAgacWwACBoC5hwAD+70gBAAGTAMAA/z89MMAAga0ewACByMAA0DgAAAAAPz0wwACB2R7AAIH0wADQOQAAAAAGwADkEIJzwACCBsAAghTAAIMDAACBWAAAAAEDwACCG8AAgwMAAAACAQLAAIIgAAAAamADwAD+GwDAAIIsAAAAgpBgA8AA/hsBagBgA8AA/yV5AGADwADllAE+BT2JwACCOMB0XoMewACCScAA/VwDAAOAwACCWcB0XnSBwACCYMB0XoMWwACCai5hwAD+7wBOwACCe8AAgoIAAGFgA8AA/hsBHMAAgoiBwACChMB0XoOBjQEAAYDAAIKKwHRedADAAP9CTsAAgqPAAIKqAACBdmADwADllAEcwACCrC7AAHpqwADVvAEAAYLAAIK4wHRe2wDAANZtPRzAAILMg8AAgsXAdF8Pg2QEAASTgsAAgtjAdF7bLoDAAILmwHRedADAAP7kSsAAgvIBg8AAgvnAdF8PBsAA5BGCc8AAgwjAAIMNwACDjgAAoEkAAAABA8AAgxPAAIOOAAAAAgICwACDGAAAACdgA8AA/hsAwACDMwAAIIPRXQPAAP59AWADwADlsgAAXAE+Ak7AAINJwACDTQABgpBgA8AA/hsBHMAAg18WwACDWIHAAINPwHRftmHAAP6gZAEAAYDAAINhwHRfpwDAAP9BPRzAAINsLoNkAwADgMAAg3XAdF+ngsAAg3zAdF/TgcAAg4HAdF+2AMAA1nYGwADkEoJzwACDk8AAg5jAAIRTAACcBwAAAAEDwACDocAAhFMAAAADAgPAAIOmAAAAamADwAD+GwDAAIOxAAAAgpBgA8AA/hsAwACDwQAAIMAARHRgA8AA5bIBagBgA8AA/yV5AFwBPgI9HsAAg97AAP1cAwADgMAAg+7AdGBmgcAAg/XAdGB1FsAAg/8uYcAA/u8ARcAAhAwBwACEFcAAhBcAAGJgA8AA/hsBgMAAhBnAdGBmARzAAIQig8AAhCDAdGDWYwEAAYHAAIQkwHRgdQDAAP9JAYvAAIQrwHRg1hzAAIQpg8AAhCvAdGDWZAEAAZQAwAD/QT4BPRzAAIQ6LoC/AgACg8AAhDvAdGDWgsAAhEDAdGCFAMAA/s8AAHQyOQB0MqwAdDLgAHQzEgB0M0QAdDOLAHQz5gB0NFkAdDS6AHQ1SQB0NfIAdDdCAHQ4xgB0OhQAdDsYAHQ8rwB0RJYAdEULAHRFeAB0Re0AdEZaAHRGzwB0RyIAdEd7AHRINQB0SIcAdEkDAHRJWAB0SkUAdEu4AHRM6gB0TWsAdE3zAHRO/gB0UAgAdFGYAHRTPAB0VVIAdFWzAHRWCQB0VmcAdFbNAHRXOQB0V9kAdFllAHRbHQB0W2kAdFvEAHRcJAB0XIQAdF0CAHRdmgB0XkoAdF99AHRgPAB0YVkAAAA3AsAA5CGCc8AB3pHAAd6xwAHjAgPAAHu1AWrAAd6SYAPAAPwcwAGCQAABYAHAAOPjAAFgAcAA5ZQAAAYGwADkJIJzwAHfY8AB32vAAd/mBAWAtcAA1bwCasAB3y1gA8AA/BzAAaZvagBgA8AAzUzAAaaLAAABA8AB34DAAd/mAAAAAwMDwAHfjAAAAIKPYAPAANc1AMAB35gAAACqHGADwAD+GwDAAd+xAAAAYWADwAD+GwAAYAPAAOQhAAbAAOQmgnPAAeAXwAHgKsAB4QkDAEsAAAABA8AB4CzAAeEJAAAAAQEBwAHgMQAAACdgA8AA/hsAAGADwADlsgE+AknAAeA+IhzAAeBIgMAB4ELAdGMiYwEAAZMAwAD/SQEcwAHgVYDAAeBPwHRjIoFtAQABFsAB4FguYcAA4HkAwAD/TD4BPTDAAeBoH8AB4HLAAP1xAwADgMAB4IPAdGMiLicnAD9KwAHgpAEcwAHgvxbAAeCrLsAAe4PAANW8wADgd8AAeq3AANW8AQABHMAB4NsWwAHgzS6qHMAA1mRkAQABHMAB4OSAwAHg3sB0YyKDjQEAAWrAAeD0YAPAAP4bg3AAwAD/QwDAAP9BAMAA11IGwADkJ4JzwAHhDsAB4RzAAeINAwCAvwAAAAEDwAHhH8AB4g0AAAACAgLAAeEkAAAAJ2ADwAD+GwDAAeE1AAAggJZgA8AA5bIAAFwBPgJJwAHhQiIcwAHhTIDAAeFGwHRkNWMBAAGTAMAA/0kBHMAB4VmAwAHhU8B0ZDWBbQEAARbAAeFcLmHAAOB5AMAA/0w+AT0wwAHhbB/AAeF2wAD9cQMAA4DAAeGHwHRkNS4nJwA/PRzAAeGzFsAB4aguwAB7g8AA1bzAAOB3wAB6r8AA1bwCAAIcwAHh2BbAAeHKLqocwADWZGQBAAEcwAHh4YDAAeHbwHRkNYONAQABasAB4fFgA8AA/huDcADAAP9DAMAA/0GBwAHiA8B0ZEQAwADXUwbAAOQsgnPAAeJDwAHiS8AB4owBAMAAcCoAAAABA8AB4l7AAeKMAAAAAAAAAGADwAD+GwE+AUrAAeJkAWrAAeJ5YAPAAP4bg3AGwADkKYJzwAHisMAB4r7AAeMAAADAAHpqwADVvAAAAAEDwAHiycAB4wAAAAABAQHAAeLOAAAAYWADwAD+GwAAYAPAAOWUAT4BSsAB4twBHsAB4ufAAOWYAQABgMAB4vXAdGWmAAbAAOQqgnPAAd6xwAHesQAAEKA/AMAA1d/AANXfAQMAAAAAAAMDAwAAAABqYAPAAP4bAAAAAACCkGADwAD+GwAAAAAgg9FdA8AA/n0BWwAAXAFKAAEdAKA/AwADgADAdGYCgQDAdGYOggDAdGYbAMAA1d8AAHRieQB0YvkAdGQLAHRlLQB0ZXYAdGXbAHRmTgAAAAYCwADkLYJzwAHjBcAB4yXAAedYN8AAe7cAAAFgAcAA4HIAAWABwADWngABBcAA5F4AAAAABAAAAwAAAAAAAAAAAGADwADkLQE/AQkAAMAA4HsAAAAANwbAAOQvgnPAAeMlwAHjJQAAEKA/AMAA1d/AANXfAQMAAAAAAAMDAwAAAABqYAPAAP4bAAAAAACCkGADwAD+GwAAAAAgg9FdA8AA/n0BWwAAXAFKAAEdAKA/AwADgADAdGbsgQDAdGb4ggDAdGcFAMAA1d8GwADkYIJzwACElsAAhJ7AAISwAQLAAHAqAAAAAQPAAISwwACEsAAAAAAAAABgA8AA/hsABsAA5GGCc8AAhLTAAIS8wACEyQECqhwAAAABA8AAhMnAAITJAAAAAAAAAGADwAD+GwAGwADkYoJzwACEzcAAhN3AAITjAQKCjwAAAAEDwACE48AAhOMAAAAAAAAAYAPAANcYAAbAAOQxgnPAAITowACE9MAAhQsAAsAAemrAANW8AAAAAQPAAIT/wACFCwAAAAEBAcAAhQQAAABhYAPAAP4bAABgA8AA5Z4ABsAA5DKCc8AAhRDAAIUcwACFTAAAlpsAAAABA8AAhSjAAIVMAAABAACCemADwAD/aAFbAAAAAF0DwAD+fQFfAwAAAUrAAIUuAR/AAIUywADQKwEBXwMAAAEuAAbAAOQzgnPAAIVRwACFY8AAhcsAAJaSAAAAAQPAAIVtwACFywAAAAEBAcAAhYAAACCD210DwAD+fQFgA8AA5toAAF0DwAD+fQFgA8AA5toBSsAAhZABHsAAhZTAANADAgFgA8AA5toCLoDAAIXFwHRonAAGwADkNIJzwACF0MAAhdjAAIYEAACWjQAAAAEDwACF38AAhgQAAAEAAJdOYAPAAP9oAVsAAAAAXQPAAP6/AV8DAAABSsAAheUBHsAAherAAP7KAQJgA8AA5tpfAwAAAS4ABsAA5GmCc8AAhgjAAIYRwACGfgIAgx4AAAABA8AAhhbAAIZ+AAAAAQEBwACGHwAAIICWYAPAAObaAABcAT4CScAAhiwcwACGPBbAAIY1LmHAAP7vSAEAAZMAwAD/Pz0wwACGQh/AAIZMwAD9cQIAApMuAD89HMAAhm8ugL8CAAKTgMAAhnXAdGlwAMAA/s8GwADkaoJzwACGg8AAhozAAIcGAgCB6gAAAAEDwACGkMAAhwYAAAABAQHAAIaZAAAggJZgA8AA5toAAFwBPgJJwACGphzAAIa2FsAAhq8uYcAA/u9IAQABkwDAAP8/PTDAAIa8H8AAhsbAAP1xAgACky4APz0cwACG6S6AvwIAAhzAAIb2FsAAhu8uYcAA/u+BjQEAAZQAwAD/QoDAAIb9wHRp/wDAAP7PBsAA5DWCc8AAhwvAAIcPwACHzAAAoEQAAAABA8AAhxnAAIfMAAAAAgECwACHHwAAAJdUYQMBYAPAAObaYAPAAPxVAMAAhzsAAABqYAPAAP4bAWrAAIdDYAPAAP4bCQBgA8AA/hsBPgNJwACHTRzAAIdXgcAAh1HAdGrBYwEAAZMAwAD/ST2JwACHXMB0asGTP0XAAIdrAcAAh3TAAId2AABiYAPAAP4bAYHAAId4wHRqwQEcwACHgYLAAId/wHRrFWMBAAEWwACHgy5hwAD+7wDAAP9JAYrAAIeLwHRrFRzAAIeMgsAAh4vAdGsVZAEAAZQAwAD/QT4BScAAh5gcwACHoIDAAIecwHRqqCABAAEcwACHpS5LAQABgsAAh6bAdGsVAMAA/s4AAErAAIerAYLAAIeywHRrFT9KwACHvwEcwACHxpSBxgAAAADAAP4+BsAA5DaCc8AAh9HAAIfVwACIuAAAoEUAAAABA8AAh+PAAIi4AAAAAgECwACH6QAAAJdUYQMBYAPAAObaYAPAAPxVAMAAiAUAAABqYAPAAP4bAWoAYAPAAP8leQBgA8AA/hsBPgNJwACIEyIcwACIHYHAAIgXwHRsEUgBAAErAMAA/z8BHMAAiC6BwACIKMB0bBGBbQEAARbAAIg2LmHAAP7vAMAA/0w9icAAiD7AdGwRHMAAiFIWwACISy5hwAD+74GNAQABlADAAP9CP0XAAIhbAcAAiGTAAIhmAABiYAPAAP4bAYHAAIhowHRsEQEcwACIcYLAAIhvwHRsoYFtAQABkwDAAP9MAYrAAIh3wHRsoRzAAIh4gsAAiHfAdGyhgY0BAAGUAMAA/0I+AUnAAIiEHMAAiIyAwACIiMB0a/ggAQABHMAAiJEuSwEAAYLAAIiSwHRsoQDAAP7OAABKwACIlwGCwACInsB0bKE/SsAAiKsBHMAAiLKUgcYAAAAAwAD+PgbAAOQ3gnPAAIi9wACI1MAAia8DAGQAAAABA8AAiNXAAImvAAAAAQEBwACI5AAAIIPbXQPAAP6/AWADwADm2gAAXQPAAP6/AWADwADm2gE+Ak7AAIj1wACJAQAAg15gA8AA/hsBHMAAiQ8WwACJCC5hwAD+72QBAAEWwACJF4DAAIkRwHRte2HAAP7vAMAA/0FKwACJIwE1wACJMwAAAQBdA8AA/r8BYAPAAObaATHAAIkzYAPAAObaADUAAAABAFsBF8AAiT6CwACJPMB0bephgcAAiUfAdG2kwAD+7TUAAAABAFsBHMAAiVuCwACJWcB0beqDZAMAA5MWwACJbC5hwAD+7y4AwAD+5DUAAAABAFsBHMAAiYKCwACJgMB0beqDZAMAAxbAAImQLmHAAP7vgcAAiZjAdG2kgMAAiaXAdG17AMAA/uSCAMB0beoGwADkOIJzwACJtMAAibnAAIpYAACDHAAAAAEDwACJwcAAilgAAAABAQHAAInJAAAAlntgA8AA/2gAAGADwAD8VQE+A07AAIncwACJ4AAAl8FgA8AA/hsBFsAAiecuYcAA/u9FwACJ8wHAAIn8wACJ/gAAYmADwAD+GwGTARzAAIoFgsAAigPAdG8JYwEAAYHAAIoHwHRu5QDAAP9JAYrAAIoOwHRvCRzAAIoMgsAAig7AdG8JZAEAAZQAwAD/QT4BScAAihkcwACKJRzAAIohLksBAAGCwACKIsB0bwkAwAD+zkgBAAGAwACKKMB0bsoAwAD/dUrAAIoxASk/SsAAikgBKgbAAOQ5gnPAAIpdwACKYsAAi0sAAKAzAAAAAQPAAIppwACLSwAAAAEAAcAAinIAAACgNGADwADSfgFqAGADwAD/JXkAXAE+Az0jHMAAioiAwACKgcB0b85IAQABKwDAAP91iMAAioHAdG/OHsAAipDAANKAAAAAACsBYAPAANJ+TsAAiqLAAIqkAABiYAPAAP4bARbAAIqrLmHAAP7vQ8AAirccwACKwIHAAIq+wHRwJYCXAQABlADAAP9LPgVOwACK0cAAitUAAKA1YAPAAP4bARzAAIregMAAitfAdG/OoDYBAAGBwACK5sB0cCUAwADSgz2JwACK8MB0cCUcwACK8oHAAIrwwHRwJYGNAQABlADAAP9CTsAAiwLAAIsGAACgN2ADwADm2gEcwACLDC5LAQABgcAAiw3AdHAlAMAA/s49HMAAixsugL8CAAKBwACLHMB0cCUcwACLJS5LAQABgsAAiybAdHBjAMAA/s4AwAD+zz0cwACLNi6AvwIAAoLAAIs3wHRwY4PAAIs+wHRwuwDAAP7PBsAA5DqCc8AAi1DAAItVwACUNAAAg2QAAAABA8AAi13AAJQ0AAAABAMEwACLYgAAAGpgA8AA/hsAwACLbQAAAIKQYAPAAP4bAMAAi4QAACCWg10DwAD+fQFgA8AA5toAwACLlQAAAKA8YAPAAP4bAWrAAIuhYAPAAP4bCQBcAT4LScAAi8AiIhzAAIvGk4CXAQABgMAAi8jAdHFlAMAA/0sBHMAAi9eAwACL0cB0cWWAlwEAAYHAAIvZwHRxdADAAP9LARzAAIvkgcAAi+DAdHF0gJcBAAEWwACL5i5hwAD+7wDAAP9LPgI9HsAAjAHAAP1cAwADgMAAjBHAdHFlgcAAjBjAdHF0FsAAjB0uYcAA/u8AQCrAAIxFwACMSgA/ScAAjFccwACMZYPAAIxbwHRxm2MBAAGTAMAA/0k+AT0wwACMch/AAIyDwAD9ZQQABIPAAIyJwHRxm5MrJ6A8AD9OwACMvMAAjMIAAYDuYAPAAP4bARzAAIzIgcAAjMTAdHF0gY0BAAGAwACMysB0cWUAwAD/QknAAIzVHMAAjPMcwACM5hbAAIzfgsAAjNrAdHGEYcAA/qCBjQEAAYPAAIzowHRxmwDAAP9CYwEAAYTAAIz1wHRynQDAAP9JPgE9MMAAjQQewACNH8AA0DoAAAAAP0nAAI00HMAAjT6EwACNOMB0cp1IAQABkwDAAP8/SsAAjUQAP0nAAI1RJcAAjVqCwACNVcB0cYRgA8AA1dI+Ak7AAI3lwACN9QABwAB6a2ADwADV0gEmwACN/ACCwACN98B0cYRgA8AA1dJJwACOFRzAAI4xFsAAjh4uwABwKsAA1qBIAQABFsAAjkSFwACONMB0c27AAHAqwADV1QDAAP8/PgFJwACOYiIcwACObYTAAI5nwHRynWMBAAE3CgDAAP9JACEcwACOjhbAAI6HhcAAjnfAdHNugo/AANXXSAEAARbAAI6WLoKPwADWogDAANcjPgI9HsAAjrHAAM0uBQAFJsAAjrsAgsAAjrbAdHGEXQPAAP6/AWADwADm2oPAAI7NwHRxmy6AwACO3sB0cWWEwACO5cB0cp0ASsAAjvcAScAAjw4cwACPJBbAAI8eFsAAjxcugo/AANait/fAANW8wADXG8AAcCnAANW8BgAGHMAAj1YcwACPQYDAAI87wHRxZYONAQABFsAAj0MuwABwKsAA1qAAwAD/Q2QBAAEWwACPXS6qHMAA1qEAwAD/QRzAAI9+hMAAj3jAdHKdg40BAAEWwACPgC7AAHAqwADWoADAAP9DFsAAj7cWwACPsIXAAI+gwHRzboKPwADV17f3wADVvMAA1xscwACP6RzAAI/Ug8AAj8rAdHGbg40BAAEWwACP1i7AAHAqwADWoADAAP9DZAEAARbAAI/7hcAAj+vAdHNuqhzAANXWAMAA/0EewACQHsAAzTsBAAEuAB7AAJA/wADNOwEAAYLAAJBFwHRxhAAAwADV4j4BSsAAkFkAP0nAAJB4HMAAkJMWwACQjIXAAJB8wHRzboKPwADV10gBAAEWwACQmy6Cj8AA1qIAwADXIz4FTsAAkXHAAJF8AAHAAHpsXQPAAP6/AWADwADm2gEmwACRgwCCwACRfsB0cYRdA8AA/r8BYAPAAObaTsAAkaPAAJGuAAHAAHptYAPAAOWeARzAAJGwLsAAemrAANW8AQABhMAAkbzAdHKdAMAA1qpFwACRzAHAAJHVwACR1wAAYmADwAD+GwGTARzAAJHeFMAAkdzAdHZKCABjAQABhMAAkeDAdHKdAMAA/0kBFcAAkefAdHZKCBzAAJHoFMAAkefAdHZKCABkAQABlADAAP9BPgE9HMAAkgKHwACR+MB0dhCAvwIAAhTAAJIDwHR2SggAHMAAkhKGwACSCMB0dddLAQABHMAAkh2DwACSE8B0cZtkAQABFMAAkh/AdHZKCAAAwAD/QQDAAP7OAMAA/s9FwACSNQHAAJI+wACSQAAAYmADwAD+GwGAwACSQsB0cWUBHMAAkksUwACSScB0dwoIAGMBAAGBwACSTcB0cXQAwAD/SQEVwACSUsB0dwoIHMAAklMUwACSUsB0dwoIAGQBAAGUAMAA/0E+AT0cwACSZy6AvwIAAhTAAJJowHR3CggAHMAAkneHwACSbcB0dhBLAQABHMAAknoUwACSeMB0dwoIAIGNAQABgMAAknzAdHFlAMAA/0IAwAD+zgDAAP7PSsAAkpYAPz9OwACStgAAAKA9XQPAAP6/AVsATsAAkskAAACgPmADwAD+GwBJwACS2SXAAJLigsAAkt3AdHGEXQPAAP6/AWADwADm2j4CPY3AAJL8wHR3zhTAAJMIwHRxhAIBXQPAAP6/AWADwADm2j2OwACTFMB0d+GDwACTIcB0cZs+Aj2NwACTP8B0d84cwACTYBzAAJNQgsAAk0vAdHGEloQBAAGDwACTVcB0cZsAwAD+l4CtAQAAAYV2KsAA/pM9jsAAk3/AdHfhk0nAAJOZHMAAk7AcwACTqIbAAJOdwHR34WQBAAGEwACTqsB0cp0AwAD/QYCXAQABFsAAk7yFwACTssB0d85hwAD+7wDAAP9LPgE9MMAAk8wewACT58AA0DoAAAAAPz0ewACUAcAAzS4FAAWFwACUBsB0d86GwACUEcB0d+EugMAAlCPAdHFlhMAAlCrAdHKdAAbAAOQ7gnPAAJQ5wACUS8AAlJYAAIGlAAAAAQPAAJRQwACUlgAAAAEBAcAAlFYAAACBpmEDAWADwADm2mADwAD8VQAAXQPAAP59AWADwADm2gFKwACUcwEfwACUd8AAz00CAWADwADm2gIugMAAlJTAdHlMAAbAAOQ8gnPAAJSbwACUrcAAlOQAAJaZAAAAAQPAAJSxwACU5AAAAAEBAcAAlLYAAACDqGADwAD+GwAAXQPAAP59AWADwADm2gFKwACUvAEfwACUwMAAzwgDAWADwADm2gMuk4DAAJTiwHR5wQAGwADkPYJzwACU6cAAlPvAAJVUAACWmgAAAAEDwACVBMAAlVQAAAABAQHAAJUKAAAAl1RhAwFgA8AA5tpgA8AA/FUAAF0DwAD+fQFgA8AA5toBSsAAlSoBH8AAlS7AAM+TAgFgA8AA5toCLoDAAJVPwHR6LgAGwADkPoJzwACVWcAAlWvAAJWlAACWhAAAAAEDwACVb8AAlaUAAAABAQHAAJV0AAAAg6hgA8AA/hsAAF0DwAD+fQFgA8AA5toBSsAAlXoBH8AAlX7AAM8IAwFgA8AA5toDLoDAAJWdwHR6oysABsAA5D+Cc8AAlarAAJW8wACWFQAAlpgAAAABA8AAlcXAAJYVAAAAAQEBwACVywAAAJdUYQMBYAPAAObaYAPAAPxVAABdA8AA/n0BYAPAAObaAUrAAJXrAR/AAJXvwADPywIBYAPAAObaAi6AwACWEMB0exAABsAA5GOCc8AAlhrAAJYwwACWYwEAmOAAAAABA8AAljnAAJZjAAAAAAAAAF0DwAD+fQFgA8AA5toBSsAAljwBH8AAlkDAANC5AQFgA8AA5toBLgAGwADkQIJzwACWaMAAlnrAAJajAACcwgAAAAEDwACWf8AAlqMAAAAAAAAAXQPAAP7xAmADwAD+G2ADwADm2gFKwACWhQEfwACWicAA0K8BAWADwADm2gEuAAbAAORBgnPAAJaowACWusAAl1EAAKA5AAAAAQPAAJbCwACXUQAAAAIBAsAAlscAAABqYAPAAP4bAMAAltMAAACCkGADwAD+GwFqAGADwAD/JXkAXQPAAP59AWADwADm2gE+Aj0ewACW6sAA/VwDAAOAwACW+sB0fDGBwACXAcB0fEAWwACXCy5hwAD+7wBKwACXGAEfwACXI8AAzwgDAWADwADm2gMugMAAl0LAdHwxgcAAl0nAdHxAAAbAAORkgnPAAJdWwACXbMAAl50BAFwAAAABA8AAl3XAAJedAAAAAAAAAF0DwAD+uAFgA8AA5toBSsAAl3gBH8AAl3zAAOBxAQFgA8AA5toBLgAGwADkQoJzwACXosAAl7DAAJgPAACArQAAAAEDwACXtsAAmA8AAAABAAABwACXvQAAAIV2YAPAAPxVAWrAAJfHYAPAAPxVd10DwAD+vwFgA8AA5toBPgFKwACX1AEewACX38AA/sUCAWADwADm2gEuAYV2gMAAmALAdH0+BsAA5EOCc8AAmBTAAJghwACYVQAAlXEAAAABA8AAmCbAAJhVAAAAAAAAAF0DwAD/swFgA8AA5toBPgFKwACYLwEewACYOsAAwyMBAWADwADm2gEuAAbAAOREgnPAAJhawACYX8AAmNsAAIP9AAAAAQPAAJhmwACY2wAAAAEBAcAAmGwAAACBpmEDAWADwADm2lwAAFwBPgJOwACYisAAmI4AAJfBYAPAAP4bARbAAJiVLmHAAP7vRcAAmKEBwACYqsAAmKwAAGJgA8AA/hsBkwEcwACYs4LAAJixwHR+TGMBAAGBwACYtcB0figAwAD/SQGKwACYusB0fkwcwACYu4LAAJi6wHR+TGQBAAGUAMAA/0E+AT0cwACYyIDAAJjHwHR+DiABAAEcwACYzS5LAQABgsAAmM7AdH5MAMAA/s4AAAbAAORFgnPAAJjgwACY6MAAmfUAAJaVAAAAAQPAAJjuwACZ9QAAAAEBAcAAmPcAACCHOWEDAmADwADm2mADwADm2mADwADm2gAAYAPAAObaAT4FTsAAmSrAAJkuAACXwWADwAD+GwEWwACZNS5hwAD+70nAAJlBHMAAmUmBwACZRcB0fyVIAQABkwDAAP8/PTDAAJlPHsAAmWrAANA4AAAAAD9OwACZf8AAmYUAAICWYAPAAObaARzAAJmLLksBAAGTAMAA/s5FwACZlAHAAJmdwACZnwAAYmADwAD+GwGUARzAAJmmg8AAmaTAdH+eYwEAAYHAAJmowHR/JQDAAP9JAYvAAJmvwHR/nhzAAJmtg8AAma/AdH+eZAEAAZQAwAD/QT4BPYrAAJm6wHR/dRzAAJnJgMAAmcLAdH77IAIAAoLAAJnKwHR/dRzAAJnVLksBAAGDwACZ1sB0f54AwAD+zgAASsAAmeUBgsAAmezAdH91BsAA5EaCc8AAmfrAAJn8wACa1wAAg18AAAABA8AAmgPAAJrXAAABAACCemADwAD/aAFbAgICwACaBgAAAJaRXwMAAADAAJoWAAAAhzlhAwJfAwAAYAPAAObaXwMAAAAAXwMAAAE+A07AAJpKwACaTgAAl8FgA8AA/hsBFsAAmlUuYcAA/u9FwACaYQHAAJpqwACabAAAYmADwAD+GwGTARzAAJpzg8AAmnHAdIDQYwEAAYLAAJp1wHSArADAAP9JAYvAAJp8wHSA0BzAAJp6g8AAmnzAdIDQZAEAAZQAwAD/QT4BPYjAAJqHwHSAehzAAJqdgcAAmpbAdICIIAIAAoDAAJqewHSAehzAAJqwLksBAAGDwACascB0gNAAwAD+zgAASsAAmsABgMAAmsfAdIB6BsAA5EeCc8AAmtzAAJrowACbNQAAgKsAAAABA8AAmu7AAJs1AAABAACCemADwAD/aAFbAQEBwACa8QAAAIGmYQMBYAPAAObaXwMAAAAAXQPAAP59AV8DAAABSsAAmw4BHsAAmxLAAM8cAgJgA8AA5tpfAwAAAi6AwACbM8B0gawABsAA5EiCc8AAmzrAAJtGwACboAAAhJUAAAABA8AAm0/AAJugAAABAACCemADwAD/aAFbAQEBwACbXAAAAIGmYQMBYAPAAObaXQPAAP59AV8DAAAAAF0DwAD+fQFfAwAAAUrAAJt5AR/AAJt9wADPYQICYAPAAObaXwMAAAIugMAAm57AdIItAAbAAORJgnPAAJulwACbqsAAnEgAAJaLAAAAAQPAAJuvwACcSAAAAAEBAcAAm7UAAACBpmEDAWADwADm2mADwAD8VQAAYAPAAPxVAT4DTsAAm9PAAJvXAACXwWADwAD+GwEWwACb3i5hwAD+70XAAJvqAcAAm/PAAJv1AABiYAPAAP4bAZMBHMAAm/yCwACb+sB0gvFjAQABgcAAm/7AdILNAMAA/0kBisAAnAXAdILxHMAAnAOCwACcBcB0gvFkAQABlADAAP9BPgFJwACcECEcwACcFoDAAJwVwHSCqSABAAEcwACcGy5LAQABgsAAnBzAdILxAMAA/s4AAErAAJwhASo/SsAAnDkBKQbAAORKgnPAAJxNwACcUsAAnO0AAIHWAAAAAQPAAJxVwACc7QAAAAEBAcAAnFsAAACBpmEDAWADwADm2mADwAD8VQAAYAPAAPxVAT4DTsAAnHnAAJx9AACXwWADwAD+GwEWwACchC5hwAD+70XAAJyQAcAAnJnAAJybAABiYAPAAP4bAZMBHMAAnKKCwACcoMB0g/xjAQABgcAAnKTAdIPYAMAA/0kBisAAnKvAdIP8HMAAnKmCwACcq8B0g/xkAQABlADAAP9BPgFJwACcthzAAJy7gMAAnLrAdIO0IAEAARzAAJzALksBAAGCwACcwcB0g/wAwAD+zgAASsAAnMYBKT9KwACc3QEqBsAA5EuCc8AAnPLAAJz6wACeGQAAlo8AAAABA8AAnQTAAJ4ZAAAAAgEBwACdCgAAAJdUYQMBYAPAAObaYAPAAPxVAAHAAJ0qAAAglpBhAwBgA8AA5toBagBgA8AA/yV5YAPAAObaAT4ETsAAnT/AAJ1DAACXwWADwAD+GwEWwACdSi5hwAD+70XAAJ1WAcAAnV/AAJ1hAABiYAPAAP4bAZMBHMAAnWiDwACdZsB0hSJjAQABgsAAnWrAdIT+AMAA/0kBi8AAnXHAdIUiHMAAnW+DwACdccB0hSJkAQABlADAAP9BPgJOwACdgMAAnYgAAJZ7YAPAAObaARzAAJ2OLksBAAGDwACdj8B0hSIAwAD+zknAAJ2ZHMAAnaGAwACdncB0hL4gAQABhMAAnaLAdIV7AABKwACdrAGEwACds8B0hXs/ScAAncYhHMAAndGBwACdysB0hNhIAQABKwDAAP91SsAAndoBHMAAneeBwACd4cB0hNggAAAAAAA/PTDAAJ3vHsAAngrAANA4AAAAAAbAAORMgnPAAJ4ewACeJsAAn1sAAJaUAAAAAQPAAJ4vwACfWwAAAAIBAcAAnjUAAACXVGEDAWADwADm2mADwAD8VQABwACeVQAAIJaQYQMAYAPAAObaAWoAYAPAAP8leWADwADm2gE+BE7AAJ5qwACebgAAl8FgA8AA/hsBFsAAnnUuYcAA/u9FwACegQHAAJ6KwACejAAAYmADwAD+GwEcwACekoLAAJ6OwHSGjoGNAQABlADAAP9CARzAAJ6Zg8AAnpfAdIaygW0BAAGTAMAA/0wBi8AAnqHAdIayHMAAnp+DwACeocB0hrKBjQEAAZQAwAD/Qj4CTsAAnrDAAJ64AACWe2ADwADm2gEcwACevi5LAQABg8AAnr/AdIayAMAA/s5JwACeyRzAAJ7RgMAAns3AdIZOIAEAAYTAAJ7SwHSHHQAAPgFKwACe5gGEwACe7cB0hx0/ScAAnwghHMAAnxOBwACfDMB0hmhIAQABKwDAAP91SsAAnxwBHMAAnymBwACfI8B0hmggAAAAAAA/PTDAAJ8xHsAAn0zAANA4AAAAAAbAAORNgnPAAJ9gwACfaMAAoW4AAJaXAAAAAQPAAJ9zwAChbgAAAAIBAcAAn3kAAACXVGEDAWADwADm2mADwAD8VQABwACfmQAAIJaQYQMAYAPAAObaAWoAYAPAAP8leWADwADm2gE+B07AAJ+uwACftQAAgXZbAStOwACfxsAAn9QAAMAAcyVgA8AA/FUBKk7AAJ/lwACf6QAAl8FgA8AA/hsBFsAAn/AuYcAA/u9FwACf/AHAAKAFwACgBwAAYmADwAD+GwGTARzAAKAOhcAAoAzAdIh9YwEAAYTAAKAQwHSIWQDAAP9JAY3AAKAXwHSIfRzAAKAVhcAAoBfAdIh9ZAEAAZQAwAD/QT4CTsAAoCbAAKAuAACWe2ADwADm2gEcwACgNC5LAQABhcAAoDXAdIh9AMAA/s5JwACgPxzAAKBHgMAAoEPAdIfyIAEAAYbAAKBIwHSI1gAAPgNJwACgXIPAAKBgwHSIQj4BPTDAAKB7HsAAoJbAANA5AAAAAD89isAAoLPAdIgyhsAAoLzAdIjWPYvAAKDNwHSIQik/ScAAoPWDwACg+cB0iEJKwAChCAEmwAChCAGCwAChD8B0iDJgA8AA5to/ScAAoRshHMAAoSaBwAChH8B0iAxIAQABKwDAAP91SsAAoS8BHMAAoTyBwAChNsB0iAwgAAAAAAA/PTDAAKFEHsAAoV/AANA4AAAAAAbAAOROgnPAAKFzwAChe8AAoawAAJaOAAAAAQPAAKGEwAChrAAAAAEBAcAAoYkAAAAnYAPAAP4bAABgA8AA5toBPgFKwAChlgEcwAChoS5LAQABgMAAoaLAdIoIAMAA/s4GwADkT4JzwAChscAAobbAAKISAABWAAAAAQPAAKG5wACiEgAAAAEBAcAAocIAACCAlmADwADm2gAAXAE+AT0wwAChzx/AAKHZwAD9rQEAASfAAHfEAAbAAORQgnPAAKIXwACiHMAAooUAAIClAAAAAQPAAKIiwACihQAAAAEBAcAAojUAACCAll0DwAD+fQFgA8AA5toAAFwBPgE9MMAAokIfwACiTMAA/a0BAAEnwAB3xAAGwADkUYJzwACiisAAoo/AAKL+AACfOgAAAAEDwACilcAAov4AAAACAgLAAKKaAAAAJ2ADwAD+GwDAAKKpAAAggJZgA8AA5toAAFwBPgE9MMAAorYfwACiwMAA/a0BAAEnwAB6ZwAGwADkUoJzwACjA8AAowjAAKOFAACgRwAAAAEDwACjEcAAo4UAAAACAgLAAKMWAAAAJ2ADwAD+GwDAAKMvAAAgKV0DwAD+fQFgA8AA5toAAFwBPgE9MMAAoz0fwACjR8AA/a0BAAEnwAB6ZwAGwADkU4JzwACjisAAo4/AAKQsAACArgAAAAEDwACjk8AApCwAAAABAAHAAKOZAAAAm3dhAwJgA8AA5tpgA8AA5tpgA8AA/hsBagBgA8AA/yV5AFwBPgJJwACjvxzAAKPLgMAAo8PAdIvvSAEAASsAwAD/dT4BPTDAAKPcJ8AAenE/PR7AAKQVwADQzgIBYAPAAObaAi6AwACkIMB0i+8ABsAA5FSCc8AApDHAAKQ1wAClNAAAgLsAAAABA8AApDzAAKU0AAAAAgECwACkRQAAIJZ7YAPAAObaAMAApFMAAABqYAPAAP4bAWrAAKRbYAPAAP4bCQBgA8AA/hsBPgNJwACkZRzAAKRvgcAApGnAdIyfgW0BAAEWwACkdy5hwAD+7wDAAP9MPgFKwACkhwEcwACkjpSBxgAAAADAAP4+ScAApJ0cwACkp4HAAKShwHSMn2MBAAGTAMAA/0k+AT2JwACktMB0jJ+TP0XAAKTJAcAApNLAAKTUAABiYAPAAP4bAYHAAKTWwHSMnwEcwACk34LAAKTdwHSNNWMBAAEWwACk5i5hwAD+7wDAAP9JAYrAAKTuwHSNNRzAAKTvgsAApO7AdI01ZAEAAZQAwAD/QT4BScAApPscwAClBxzAAKUDLksBAAGCwAClBMB0jTUAwAD+zkgBAAGAwAClCsB0jI8AwAD/dUrAAKUTAYLAAKUawHSNNT9KwAClJwEcwAClLpSBxgAAAADAAP4+BsAA5FWCc8AApTnAAKU9wACmWQAAlrUAAAABA8AApUjAAKZZAAAAAgECwAClUQAAIJZ7YAPAAObaAMAApV8AAABqYAPAAP4bAWrAAKVnYAPAAP8leQBgA8AA/hsBPgNJwACldCIcwAClfoHAAKV4wHSOK0gBAAErAMAA/z8BHMAApY+BwAClicB0jiuBbQEAARbAAKWXLmHAAP7vAMAA/0w+AT2JwAClp8B0jiscwACluxbAAKW0LmHAAP7vgY0BAAGUAMAA/0JJwAClyxzAAKXVgcAApc/AdI4rYwEAAZMAwAD/ST4BSsAApeIBHMAApemUgcYAAAAAwAD+Pj9FwACl9wHAAKYAwACmAgAAYmADwAD+GwGBwACmBMB0jisBHMAApg2CwACmC8B0jvWBbQEAAZMAwAD/TAGKwACmE8B0jvUcwACmFILAAKYTwHSO9YGNAQABlADAAP9CPgFJwACmIBzAAKYsHMAApiguSwEAAYLAAKYpwHSO9QDAAP7OSAEAAYDAAKYvwHSOGwDAAP91SsAApjgBgsAApj/AdI71P0rAAKZMARzAAKZTlIHGAAAAAMAA/j4GwADkVoJzwACmXsAApmbAAKbBAACGLgAAAAEDwACmcMAApsEAAAAAAAAAYAPAAObaAT4BPTDAAKZ5H8AApoPAAP2tAQABJ8AAd8UABsAA5FeCc8AApsbAAKbOwACnMAAAoEYAAAABA8AAptbAAKcwAAAAAQEBwACm2wAAACdgA8AA/hsAAGADwADm2gE+AT0wwACm6B/AAKbywAD9rQEAASfAAHfFAAbAAORYgnPAAKc1wACnOsAAp7AAAJdTAAAAAQPAAKdFwACnsAAAAAEBAcAAp0sAAACXVGEDAWADwADm2mADwAD8VQAAXAE+AT0wwACnaB/AAKdywAD9rQEAASfAAHfFAAbAAORZgnPAAKe1wACnusAAqDAAAJdWAAAAAQPAAKfFwACoMAAAAAEBAcAAp8sAAACXVGEDAWADwADm2mADwAD8VQAAXAE+AT0wwACn6B/AAKfywAD9rQEAASfAAHfFAAbAAORlgnPAAKg1wACoQcAAqJsBAIMeAAAAAQPAAKhHwAComwAAAAAAAABgA8AA5toBPgJJwACoTRzAAKhYFsAAqFEuYcAA/u+AlwEAAZMAwAD/S0rAAKhdARzAAKhoLksBAAGTAMAA/s4/PTDAAKhxHsAAqIzAANA4AAAAAAbAAORmgnPAAKigwACorMAAqQ4BAIHqAAAAAQPAAKixwACpDgAAAAAAAABgA8AA5toBPgJJwACotxzAAKjCFsAAqLsuYcAA/u+AlwEAAZMAwAD/S0rAAKjHARzAAKjSLksBAAEcwACo2hbAAKjTLmHAAP7vgY0BAAGUAMAA/0IAwAD+zj89MMAAqOQewACo/8AA0DgAAAAABsAA5GeCc8AAqRPAAKkfwACptgEAgMMAAAABA8AAqSbAAKm2AAAAAAAAAGADwADm2gE+A0nAAKksHMAAqTcWwACpMC5hwAD+70gBAAGUAMAA/z9KwACpPQEcwACpSC5LAQABkwDAAP7OP0nAAKlRHMAAqVwWwACpVS5hwAD+70gBAAGTAMAA/z89MMAAqWIewACpfcAA0DgAAAAAPz0wwACpjh7AAKmpwADQOQAAAAAGwADkWoJzwACpu8AAqcfAAKq0AACBWAAAAAEDwACpzsAAqrQAAAACAQLAAKnTAAAAamADwAD+GwDAAKnfAAAAgpBgA8AA/hsBagBgA8AA/yV5AGADwADlngE+BT2JwACp68B0kw8ewACp/MAA/VwDAAOAwACqDMB0kwCBwACqE8B0kw8WwACqHS5hwAD+7wBOwACqLsAAqjUAAGFgA8AA/hsBHMAAqjuBwACqN8B0kw+BjQEAAYDAAKo9wHSTAADAAP9CTsAAqlTAAKpbAACBdmADwADlngEcwACqXS7AAHpqwADVvAEAAYLAAKppwHSTZwDAANaqPRzAAKp9g8AAqnbAdJObg2QEAASTgsAAqonAdJNnLoDAAKqXwHSTAADAAP7kSsAAqqMBg8AAqqrAdJObBsAA5FuCc8AAqrnAAKq+wACrPQAAoEkAAAABA8AAqsTAAKs9AAAAAgICwACqyQAAACdgA8AA/hsAwACq4gAAIIPRXQPAAP59AWADwADm2gAAXAE+Ak7AAKr4wACq/AABgpBgA8AA/hsBHMAAqw4WwACrB4HAAKr+wHSUQmHAAP6gZAEAAYDAAKsQwHSUMwDAAP9BPRzAAKsbLoNkAwADgMAAqyTAdJQzgsAAqyvAdJRfgcAAqzDAdJRCAMAA1rMGwADkXIJzwACrQsAAq0fAAKwAAACcBwAAAAEDwACrUMAArAAAAAADAgPAAKtVAAAAamADwAD+GwDAAKtgAAAAgpBgA8AA/hsAwACrbgAAIMAARHRgA8AA5toBagBgA8AA/yV5AFwBPgI9HsAAq4vAAP1cAwADgMAAq5vAdJTygcAAq6LAdJUBFsAAq6wuYcAA/u8ARcAAq7kBwACrwsAAq8QAAGJgA8AA/hsBgMAAq8bAdJTyARzAAKvPg8AAq83AdJViYwEAAYHAAKvRwHSVAQDAAP9JAYvAAKvYwHSVYhzAAKvWg8AAq9jAdJViZAEAAZQAwAD/QT4BPRzAAKvnLoC/AgACg8AAq+jAdJVigsAAq+3AdJURAMAA/s8AAHRmxQB0ZzgAdGdsAHRnngB0Z9AAdGgXAHRocgB0aOUAdGlGAHRp1QB0an4AdGvOAHRtUgB0bqAAdG+kAHRxOwB0eSIAdHmXAHR6BAB0enkAdHrmAHR7WwB0e64AdHwHAHR8wQB0fRMAdH2PAHR95AB0ftEAdIBEAHSBdgB0gfcAdIJ/AHSDigB0hJQAdIYkAHSHyAB0id4AdIo/AHSKlQB0ivMAdItZAHSLxQB0jGUAdI3xAHSPqQB0j/UAdJBQAHSQsAB0kRAAdJGOAHSSJgB0ktYAdJQJAHSUyAB0leUAAAA3AsAA5GuCc8AB4wXAAeMlwAHnWAPAAHu4AWrAAeMGYAPAAPwcwAGCQAABYAHAAOQtAAFgAcAA5Z4AAAYGwADkboJzwAHjz8AB49fAAeROBAWAtcAA1bwCasAB45tgA8AA/BzAAaahagBgA8AAzUzAAaa9AAABA8AB4+rAAeROAAAAAwMDwAHj9gAAAIKPYAPAANc1AMAB5AIAAACqHGADwAD+GwDAAeQVAAAAYWADwAD+GwAAYAPAAORrAAbAAORwgnPAAeR/wAHkkMAB5WsDAEsAAAABA8AB5JLAAeVrAAAAAQEBwAHklwAAACdgA8AA/hsAAGADwADm2gE+AknAAeSkIhzAAeSugMAB5KjAdJeuYwEAAZMAwAD/SQEcwAHku4DAAeS1wHSXroFtAQABFsAB5L4uYcAA4HkAwAD/TD4BPTDAAeTOH8AB5NjAAP1xAwADgMAB5OnAdJeuLicnAD9KwAHlCgEcwAHlJRbAAeURLsAAe4PAANW8wADgd8AAerHAANW8AQABHMAB5T8WwAHlMS6qHMAA1qFkAQABHMAB5UiAwAHlQsB0l66DjQEAAWrAAeVWYAPAAP4bg3AAwAD/QwDAAP9BAMAA11QGwADkcYJzwAHlcMAB5X7AAeZpAwCAvwAAAAEDwAHlgcAB5mkAAAACAgLAAeWGAAAAJ2ADwAD+GwDAAeWVAAAggJZgA8AA5toAAFwBPgJJwAHloiIcwAHlrIDAAeWmwHSYwWMBAAGTAMAA/0kBHMAB5bmAwAHls8B0mMGBbQEAARbAAeW8LmHAAOB5AMAA/0w+AT0wwAHlzB/AAeXWwAD9cQMAA4DAAeXnwHSYwS4nJwA/PRzAAeYTFsAB5gguwAB7g8AA1bzAAOB3wAB6s8AA1bwCAAIcwAHmNhbAAeYoLqocwADWoWQBAAEcwAHmP4DAAeY5wHSYwYONAQABasAB5k1gA8AA/huDcADAAP9DAMAA/0GBwAHmX8B0mNAAwADXVQbAAOR2gnPAAeafwAHmp8AB5uYBAMAAcCoAAAABA8AB5rrAAebmAAAAAAAAAGADwAD+GwE+AUrAAebAAWrAAebTYAPAAP4bg3AGwADkc4JzwAHnCsAB5xbAAedWAADAAHpqwADVvAAAAAEDwAHnIcAB51YAAAABAQHAAecmAAAAYWADwAD+GwAAYAPAAOWeAT4BSsAB5zQBHsAB5z/AAOWiAQABgMAB50vAdJoyAAbAAOR0gnPAAeMlwAHjJQAAEKA/AMAA1d/AANXfAQMAAAAAAAMDAwAAAABqYAPAAP4bAAAAAACCkGADwAD+GwAAAAAgg9FdA8AA/n0BWwAAXAFKAAEdAKA/AwADgADAdJqOgQDAdJqaggDAdJqnAMAA1d8AAHSXBQB0l4UAdJiXAHSZuQB0mgIAdJpnAHSa2gAAAAYCwADkd4JzwAHnW8AB53vAAevMN8AAe7oAAAFgAcAA4HIAAWABwADW2wABBcAA5KgAAAAABAAAAwAAAAAAAAAAAGADwADkdwE/AQkAAMAA4HsAAAAANwbAAOR5gnPAAed7wAHnewAAEKA/AMAA1d/AANXfAQMAAAAAAAMDAwAAAABqYAPAAP4bAAAAAACCkGADwAD+GwAAAAAgg9FdA8AA/n0BWwAAXAFKAAEdAKA/AwADgADAdJt4gQDAdJuEggDAdJuRAMAA1d8GwADkqoJzwACsR8AArE/AAKxhAQLAAHAqAAAAAQPAAKxhwACsYQAAAAAAAABgA8AA/hsABsAA5KuCc8AArGXAAKxtwACsegECqhwAAAABA8AArHrAAKx6AAAAAAAAAGADwAD+GwAGwADkrIJzwACsfsAArI7AAKyUAQKCjwAAAAEDwACslMAArJQAAAAAAAAAYAPAANcYAAbAAOR7gnPAAKyZwACsp8AArL4AAsAAemrAANW8AAAAAQPAAKyywACsvgAAAAEBAcAArLcAAABhYAPAAP4bAABgA8AA5agABsAA5HyCc8AArMPAAKzPwACs/wAAlpsAAAABA8AArNvAAKz/AAABAACCemADwAD/aAFbAAAAAF0DwAD+fQFfAwAAAUrAAKzhAR/AAKzlwADQKwEBXwMAAAEuAAbAAOR9gnPAAK0EwACtGMAArYQAAJaSAAAAAQPAAK0iwACthAAAAAEBAcAArTcAACCD210DwAD+fQFgA8AA5/sAAF0DwAD+fQFgA8AA5/sBSsAArUcBHsAArUvAANADAgFgA8AA5/sCLoDAAK1+wHSdKAAGwADkfoJzwACticAArZHAAK2/AACWjQAAAAEDwACtmMAArb8AAAEAAJdOYAPAAP9oAVsAAAAAXQPAAP6/AV8DAAABSsAArZ4BHsAAraPAAP7KAQJgA8AA5/tfAwAAAS4ABsAA5LOCc8AArcPAAK3MwACuOwIAgx4AAAABA8AArdHAAK47AAAAAQEBwACt3AAAIICWYAPAAOf7AABcAT4CScAArekcwACt+RbAAK3yLmHAAP7vSAEAAZMAwAD/Pz0wwACt/x/AAK4JwAD9cQIAApMuAD89HMAAriwugL8CAAKTgMAArjLAdJ38AMAA/s8GwADktIJzwACuQMAArknAAK7FAgCB6gAAAAEDwACuTcAArsUAAAABAQHAAK5YAAAggJZgA8AA5/sAAFwBPgJJwACuZRzAAK51FsAArm4uYcAA/u9IAQABkwDAAP8/PTDAAK57H8AAroXAAP1xAgACky4APz0cwACuqC6AvwIAAhzAAK61FsAArq4uYcAA/u+BjQEAAZQAwAD/QoDAAK68wHSeiwDAAP7PBsAA5H+Cc8AArsrAAK7OwACvjQAAoEQAAAABA8AArtjAAK+NAAAAAgECwACu3gAAAJdUYQMBYAPAAOf7YAPAAPxVAMAArvwAAABqYAPAAP4bAWrAAK8EYAPAAP4bCQBgA8AA/hsBPgNJwACvDhzAAK8YgcAArxLAdJ9NYwEAAZMAwAD/ST2JwACvHcB0n02TP0XAAK8sAcAArzXAAK83AABiYAPAAP4bAYHAAK85wHSfTQEcwACvQoLAAK9AwHSfoWMBAAEWwACvRC5hwAD+7wDAAP9JAYrAAK9MwHSfoRzAAK9NgsAAr0zAdJ+hZAEAAZQAwAD/QT4BScAAr1kcwACvYYDAAK9dwHSfNCABAAEcwACvZi5LAQABgsAAr2fAdJ+hAMAA/s4AAErAAK9sAYLAAK9zwHSfoT9KwACvgAEcwACvh5SBxgAAAADAAP4+BsAA5ICCc8AAr5LAAK+WwACwewAAoEUAAAABA8AAr6TAALB7AAAAAgECwACvqgAAAJdUYQMBYAPAAOf7YAPAAPxVAMAAr8gAAABqYAPAAP4bAWoAYAPAAP8leQBgA8AA/hsBPgNJwACv1iIcwACv4IHAAK/awHSgnUgBAAErAMAA/z8BHMAAr/GBwACv68B0oJ2BbQEAARbAAK/5LmHAAP7vAMAA/0w9icAAsAHAdKCdHMAAsBUWwACwDi5hwAD+74GNAQABlADAAP9CP0XAALAeAcAAsCfAALApAABiYAPAAP4bAYHAALArwHSgnQEcwACwNILAALAywHShLYFtAQABkwDAAP9MAYrAALA6wHShLRzAALA7gsAAsDrAdKEtgY0BAAGUAMAA/0I+AUnAALBHHMAAsE+AwACwS8B0oIQgAQABHMAAsFQuSwEAAYLAALBVwHShLQDAAP7OAABKwACwWgGCwACwYcB0oS0/SsAAsG4BHMAAsHWUgcYAAAAAwAD+PgbAAOSBgnPAALCAwACwmcAAsXgDAGQAAAABA8AAsJrAALF4AAAAAQEBwACwqwAAIIPbXQPAAP6/AWADwADn+wAAXQPAAP6/AWADwADn+wE+Ak7AALC8wACwyAAAg15gA8AA/hsBHMAAsNYWwACwzy5hwAD+72QBAAEWwACw3oDAALDYwHSiB2HAAP7vAMAA/0FKwACw6gE1wACw/AAAAQBdA8AA/r8BYAPAAOf7ATHAALD8YAPAAOf7ADUAAAABAFsBF8AAsQeCwACxBcB0onZhgcAAsRDAdKIwwAD+7TUAAAABAFsBHMAAsSSCwACxIsB0onaDZAMAA5MWwACxNS5hwAD+7y4AwAD+5DUAAAABAFsBHMAAsUuCwACxScB0onaDZAMAAxbAALFZLmHAAP7vgcAAsWHAdKIwgMAAsW7AdKIHAMAA/uSCAMB0onYGwADkgoJzwACxfcAAsYLAALIhAACDHAAAAAEDwACxisAAsiEAAAABAQHAALGSAAAAlntgA8AA/2gAAGADwAD8VQE+A07AALGlwACxqQAAl8FgA8AA/hsBFsAAsbAuYcAA/u9FwACxvAHAALHFwACxxwAAYmADwAD+GwGTARzAALHOgsAAsczAdKOVYwEAAYHAALHQwHSjcQDAAP9JAYrAALHXwHSjlRzAALHVgsAAsdfAdKOVZAEAAZQAwAD/QT4BScAAseIcwACx7hzAALHqLksBAAGCwACx68B0o5UAwAD+zkgBAAGAwACx8cB0o1YAwAD/dUrAALH6ASk/SsAAshEBKgbAAOSDgnPAALImwACyK8AAsxQAAKAzAAAAAQPAALIywACzFAAAAAEAAcAAsjsAAACgNGADwADSfgFqAGADwAD/JXkAXAE+Az0jHMAAslGAwACySsB0pFpIAQABKwDAAP91iMAAskrAdKRaHsAAslnAANKAAAAAACsBYAPAANJ+TsAAsmvAALJtAABiYAPAAP4bARbAALJ0LmHAAP7vQ8AAsoAcwACyiYHAALKHwHSksYCXAQABlADAAP9LPgVOwACymsAAsp4AAKA1YAPAAP4bARzAALKngMAAsqDAdKRaoDYBAAGBwACyr8B0pLEAwADSgz2JwACyucB0pLEcwACyu4HAALK5wHSksYGNAQABlADAAP9CTsAAssvAALLPAACgN2ADwADn+wEcwACy1S5LAQABgcAAstbAdKSxAMAA/s49HMAAsuQugL8CAAKBwACy5cB0pLEcwACy7i5LAQABgsAAsu/AdKTvAMAA/s4AwAD+zz0cwACy/y6AvwIAAoLAALMAwHSk74PAALMHwHSlRwDAAP7PBsAA5ISCc8AAsxnAALMewAC8BwAAg2QAAAABA8AAsybAALwHAAAABAMEwACzKwAAAGpgA8AA/hsAwACzNgAAAIKQYAPAAP4bAMAAs08AACCWg10DwAD+fQFgA8AA5/sAwACzYAAAAKA8YAPAAP4bAWrAALNsYAPAAP4bCQBcAT4LScAAs4siIhzAALORk4CXAQABgMAAs5PAdKXxAMAA/0sBHMAAs6KAwACznMB0pfGAlwEAAYHAALOkwHSmAADAAP9LARzAALOvgcAAs6vAdKYAgJcBAAEWwACzsS5hwAD+7wDAAP9LPgI9HsAAs8zAAP1cAwADgMAAs9zAdKXxgcAAs+PAdKYAFsAAs+guYcAA/u8AQCrAALQQwAC0FQA/ScAAtCIcwAC0MIPAALQmwHSmJ2MBAAGTAMAA/0k+AT0wwAC0PR/AALROwAD9ZQQABIPAALRUwHSmJ5MrJ6A8AD9OwAC0h8AAtI0AAYDuYAPAAP4bARzAALSTgcAAtI/AdKYAgY0BAAGAwAC0lcB0pfEAwAD/QknAALSgHMAAtL4cwAC0sRbAALSqgsAAtKXAdKYQYcAA/qCBjQEAAYPAALSzwHSmJwDAAP9CYwEAAYTAALTAwHSnKQDAAP9JPgE9MMAAtM8ewAC06sAA0DoAAAAAP0nAALT/HMAAtQmEwAC1A8B0pylIAQABkwDAAP8/SsAAtQ8AP0nAALUcJcAAtSWCwAC1IMB0phBgA8AA1dI+Ak7AALWywAC1wgABwAB6a2ADwADV0gEmwAC1yQCCwAC1xMB0phBgA8AA1dJJwAC14hzAALX+FsAAtesuwABwKsAA1t1IAQABFsAAthGFwAC2AcB0p/rAAHAqwADV1QDAAP8/PgFJwAC2LyIcwAC2OoTAALY0wHSnKWMBAAE3CgDAAP9JACEcwAC2WxbAALZUhcAAtkTAdKf6go/AANXXSAEAARbAALZjLoKPwADW3wDAANcjPgI9HsAAtn7AAM0uBQAFJsAAtogAgsAAtoPAdKYQXQPAAP6/AWADwADn+4PAALacwHSmJy6AwAC2rcB0pfGEwAC2tMB0pykASsAAtsYAScAAtt0cwAC28xbAALbtFsAAtuYugo/AANbft/fAANW8wADXG8AAcCnAANW8BgAGHMAAtyUcwAC3EIDAALcKwHSl8YONAQABFsAAtxIuwABwKsAA1t0AwAD/Q2QBAAEWwAC3LC6qHMAA1t4AwAD/QRzAALdNhMAAt0fAdKcpg40BAAEWwAC3Ty7AAHAqwADW3QDAAP9DFsAAt4YWwAC3f4XAALdvwHSn+oKPwADV17f3wADVvMAA1xscwAC3uBzAALejg8AAt5nAdKYng40BAAEWwAC3pS7AAHAqwADW3QDAAP9DZAEAARbAALfKhcAAt7rAdKf6qhzAANXWAMAA/0EewAC37cAAzTsBAAEuAB7AALgOwADNOwEAAYLAALgUwHSmEAAAwADV4j4BSsAAuCgAP0nAALhHHMAAuGIWwAC4W4XAALhLwHSn+oKPwADV10gBAAEWwAC4ai6Cj8AA1t8AwADXIz4FTsAAuUDAALlLAAHAAHpsXQPAAP6/AWADwADn+wEmwAC5UgCCwAC5TcB0phBdA8AA/r8BYAPAAOf7TsAAuXTAALl/AAHAAHptYAPAAOWoARzAALmBLsAAemrAANW8AQABhMAAuY3AdKcpAMAA1udFwAC5nQHAALmmwAC5qAAAYmADwAD+GwGTARzAALmvFMAAua3AdKrWCABjAQABhMAAubHAdKcpAMAA/0kBFcAAubjAdKrWCBzAALm5FMAAubjAdKrWCABkAQABlADAAP9BPgE9HMAAudOHwAC5ycB0qpyAvwIAAhTAALnUwHSq1ggAHMAAueOGwAC52cB0qmNLAQABHMAAue6DwAC55MB0pidkAQABFMAAufDAdKrWCAAAwAD/QQDAAP7OAMAA/s9FwAC6BgHAALoPwAC6EQAAYmADwAD+GwGAwAC6E8B0pfEBHMAAuhwUwAC6GsB0q5YIAGMBAAGBwAC6HsB0pgAAwAD/SQEVwAC6I8B0q5YIHMAAuiQUwAC6I8B0q5YIAGQBAAGUAMAA/0E+AT0cwAC6OC6AvwIAAhTAALo5wHSrlggAHMAAukiHwAC6PsB0qpxLAQABHMAAuksUwAC6ScB0q5YIAIGNAQABgMAAuk3AdKXxAMAA/0IAwAD+zgDAAP7PSsAAumcAPz9OwAC6hwAAAKA9XQPAAP6/AVsATsAAupoAAACgPmADwAD+GwBJwAC6qiXAALqzgsAAuq7AdKYQXQPAAP6/AWADwADn+z4CPY3AALrPwHSsWhTAALrbwHSmEAIBXQPAAP6/AWADwADn+z2OwAC658B0rG2DwAC69MB0pic+Aj2NwAC7EsB0rFocwAC7MxzAALsjgsAAux7AdKYQloQBAAGDwAC7KMB0picAwAD+l4CtAQAAAYV2KsAA/pM9jsAAu1LAdKxtk0nAALtsHMAAu4McwAC7e4bAALtwwHSsbWQBAAGEwAC7fcB0pykAwAD/QYCXAQABFsAAu4+FwAC7hcB0rFphwAD+7wDAAP9LPgE9MMAAu58ewAC7usAA0DoAAAAAPz0ewAC71MAAzS4FAAWFwAC72cB0rFqGwAC75MB0rG0ugMAAu/bAdKXxhMAAu/3AdKcpAAbAAOSFgnPAALwMwAC8IMAAvG8AAIGlAAAAAQPAALwlwAC8bwAAAAEBAcAAvCsAAACBpmEDAWADwADn+2ADwAD8VQAAXQPAAP59AWADwADn+wFKwAC8SgEfwAC8TsAAz00CAWADwADn+wIugMAAvG3AdK3YAAbAAOSGgnPAALx0wAC8iMAAvMEAAJaZAAAAAQPAALyMwAC8wQAAAAEBAcAAvJEAAACDqGADwAD+GwAAXQPAAP59AWADwADn+wFKwAC8lwEfwAC8m8AAzwgDAWADwADn+wMuk4DAALy/wHSuTQAGwADkh4JzwAC8xsAAvNrAAL03AACWmgAAAAEDwAC848AAvTcAAAABAQHAALzpAAAAl1RhAwFgA8AA5/tgA8AA/FUAAF0DwAD+fQFgA8AA5/sBSsAAvQsBH8AAvQ/AAM+TAgFgA8AA5/sCLoDAAL0ywHSuugAGwADkiIJzwAC9PMAAvVDAAL2SAACWhAAAAAEDwAC9VMAAvZIAAAABAQHAAL1ZAAAAg6hgA8AA/hsAAF0DwAD+fQFgA8AA5/sBSsAAvWUBH8AAvWnAAM8IAwFgA8AA5/sDLoDAAL2KwHSvLysABsAA5ImCc8AAvZfAAL2rwAC+CAAAlpgAAAABA8AAvbTAAL4IAAAAAQEBwAC9ugAAAJdUYQMBYAPAAOf7YAPAAPxVAABdA8AA/n0BYAPAAOf7AUrAAL3cAR/AAL3gwADPywIBYAPAAOf7Ai6AwAC+A8B0r5wABsAA5K2Cc8AAvg3AAL4lwAC+WgEAmOAAAAABA8AAvi7AAL5aAAAAAAAAAF0DwAD+fQFgA8AA5/sBSsAAvjEBH8AAvjXAANC5AQFgA8AA5/sBLgAGwADkioJzwAC+X8AAvnPAAL6eAACcwgAAAAEDwAC+eMAAvp4AAAAAAAAAXQPAAP7xAmADwAD+G2ADwADn+wFKwAC+fgEfwAC+gsAA0K8BAWADwADn+wEuAAbAAOSLgnPAAL6jwAC+t8AAv1AAAKA5AAAAAQPAAL6/wAC/UAAAAAIBAsAAvsQAAABqYAPAAP4bAMAAvtAAAACCkGADwAD+GwFqAGADwAD/JXkAXQPAAP59AWADwADn+wE+Aj0ewAC+58AA/VwDAAOAwAC+98B0sL2BwAC+/sB0sMwWwAC/CC5hwAD+7wBKwAC/FQEfwAC/IMAAzwgDAWADwADn+wMugMAAv0HAdLC9gcAAv0jAdLDMAAbAAOSugnPAAL9VwAC/bcAAv6ABAFwAAAABA8AAv3bAAL+gAAAAAAAAAF0DwAD+uAFgA8AA5/sBSsAAv3kBH8AAv33AAOBxAQFgA8AA5/sBLgAGwADkjIJzwAC/pcAAv7XAAMAWAACArQAAAAEDwAC/u8AAwBYAAAABAAABwAC/wgAAAIV2YAPAAPxVAWrAAL/MYAPAAPxVd10DwAD+vwFgA8AA5/sBPgFKwAC/2QEewAC/5MAA/sUCAWADwADn+wEuAYV2gMAAwAnAdLHKBsAA5I2Cc8AAwBvAAMAqwADAYAAAlXEAAAABA8AAwC/AAMBgAAAAAAAAAF0DwAD/swFgA8AA5/sBPgFKwADAOAEewADAQ8AAwyMBAWADwADn+wEuAAbAAOSOgnPAAMBlwADAasAAwOgAAIP9AAAAAQPAAMBxwADA6AAAAAEBAcAAwHcAAACBpmEDAWADwADn+1wAAFwBPgJOwADAl8AAwJsAAJfBYAPAAP4bARbAAMCiLmHAAP7vRcAAwK4BwADAt8AAwLkAAGJgA8AA/hsBkwEcwADAwILAAMC+wHSy2GMBAAGBwADAwsB0srQAwAD/SQGKwADAx8B0stgcwADAyILAAMDHwHSy2GQBAAGUAMAA/0E+AT0cwADA1YDAAMDUwHSymiABAAEcwADA2i5LAQABgsAAwNvAdLLYAMAA/s4AAAbAAOSPgnPAAMDtwADA98AAwgoAAJaVAAAAAQPAAMD9wADCCgAAAAEBAcAAwQgAACCHOWEDAmADwADn+2ADwADn+2ADwADn+wAAYAPAAOf7AT4FTsAAwT/AAMFDAACXwWADwAD+GwEWwADBSi5hwAD+70nAAMFWHMAAwV6BwADBWsB0s7FIAQABkwDAAP8/PTDAAMFkHsAAwX/AANA4AAAAAD9OwADBlMAAwZoAAICWYAPAAOf7ARzAAMGgLksBAAGTAMAA/s5FwADBqQHAAMGywADBtAAAYmADwAD+GwGUARzAAMG7g8AAwbnAdLQqYwEAAYHAAMG9wHSzsQDAAP9JAYvAAMHEwHS0KhzAAMHCg8AAwcTAdLQqZAEAAZQAwAD/QT4BPYrAAMHPwHS0ARzAAMHegMAAwdfAdLOHIAIAAoLAAMHfwHS0ARzAAMHqLksBAAGDwADB68B0tCoAwAD+zgAASsAAwfoBgsAAwgHAdLQBBsAA5JCCc8AAwg/AAMIRwADC7gAAg18AAAABA8AAwhjAAMLuAAABAACCemADwAD/aAFbAgICwADCGwAAAJaRXwMAAADAAMIrAAAAhzlhAwJfAwAAYAPAAOf7XwMAAAAAXwMAAAE+A07AAMJhwADCZQAAl8FgA8AA/hsBFsAAwmwuYcAA/u9FwADCeAHAAMKBwADCgwAAYmADwAD+GwGTARzAAMKKg8AAwojAdLVcYwEAAYLAAMKMwHS1OADAAP9JAYvAAMKTwHS1XBzAAMKRg8AAwpPAdLVcZAEAAZQAwAD/QT4BPYjAAMKewHS1BhzAAMK0gcAAwq3AdLUUIAIAAoDAAMK1wHS1BhzAAMLHLksBAAGDwADCyMB0tVwAwAD+zgAASsAAwtcBgMAAwt7AdLUGBsAA5JGCc8AAwvPAAML/wADDUAAAgKsAAAABA8AAwwXAAMNQAAABAACCemADwAD/aAFbAQEBwADDCAAAAIGmYQMBYAPAAOf7XwMAAAAAXQPAAP59AV8DAAABSsAAwycBHsAAwyvAAM8cAgJgA8AA5/tfAwAAAi6AwADDTsB0tjgABsAA5JKCc8AAw1XAAMNhwADDvwAAhJUAAAABA8AAw2rAAMO/AAABAACCemADwAD/aAFbAQEBwADDdwAAAIGmYQMBYAPAAOf7XQPAAP59AV8DAAAAAF0DwAD+fQFfAwAAAUrAAMOWAR/AAMOawADPYQICYAPAAOf7XwMAAAIugMAAw73AdLa5AAbAAOSTgnPAAMPEwADDycAAxGkAAJaLAAAAAQPAAMPOwADEaQAAAAEBAcAAw9QAAACBpmEDAWADwADn+2ADwAD8VQAAYAPAAPxVAT4DTsAAw/TAAMP4AACXwWADwAD+GwEWwADD/y5hwAD+70XAAMQLAcAAxBTAAMQWAABiYAPAAP4bAZMBHMAAxB2CwADEG8B0t31jAQABgcAAxB/AdLdZAMAA/0kBisAAxCbAdLd9HMAAxCSCwADEJsB0t31kAQABlADAAP9BPgFJwADEMSEcwADEN4DAAMQ2wHS3NSABAAEcwADEPC5LAQABgsAAxD3AdLd9AMAA/s4AAErAAMRCASo/SsAAxFoBKQbAAOSUgnPAAMRuwADEc8AAxRAAAIHWAAAAAQPAAMR2wADFEAAAAAEBAcAAxHwAAACBpmEDAWADwADn+2ADwAD8VQAAYAPAAPxVAT4DTsAAxJzAAMSgAACXwWADwAD+GwEWwADEpy5hwAD+70XAAMSzAcAAxLzAAMS+AABiYAPAAP4bAZMBHMAAxMWCwADEw8B0uIhjAQABgcAAxMfAdLhkAMAA/0kBisAAxM7AdLiIHMAAxMyCwADEzsB0uIhkAQABlADAAP9BPgFJwADE2RzAAMTegMAAxN3AdLhAIAEAARzAAMTjLksBAAGCwADE5MB0uIgAwAD+zgAASsAAxOkBKT9KwADFAAEqBsAA5JWCc8AAxRXAAMUfwADGQgAAlo8AAAABA8AAxSnAAMZCAAAAAgEBwADFLwAAAJdUYQMBYAPAAOf7YAPAAPxVAAHAAMVTAAAglpBhAwBgA8AA5/sBagBgA8AA/yV5YAPAAOf7AT4ETsAAxWjAAMVsAACXwWADwAD+GwEWwADFcy5hwAD+70XAAMV/AcAAxYjAAMWKAABiYAPAAP4bAZMBHMAAxZGDwADFj8B0ua5jAQABgsAAxZPAdLmKAMAA/0kBi8AAxZrAdLmuHMAAxZiDwADFmsB0ua5kAQABlADAAP9BPgJOwADFqcAAxbEAAJZ7YAPAAOf7ARzAAMW3LksBAAGDwADFuMB0ua4AwAD+zknAAMXCHMAAxcqAwADFxsB0uUogAQABhMAAxcvAdLoHAABKwADF1QGEwADF3MB0ugc/ScAAxe8hHMAAxfqBwADF88B0uWRIAQABKwDAAP91SsAAxgMBHMAAxhCBwADGCsB0uWQgAAAAAAA/PTDAAMYYHsAAxjPAANA4AAAAAAbAAOSWgnPAAMZHwADGUcAAx4oAAJaUAAAAAQPAAMZawADHigAAAAIBAcAAxmAAAACXVGEDAWADwADn+2ADwAD8VQABwADGhAAAIJaQYQMAYAPAAOf7AWoAYAPAAP8leWADwADn+wE+BE7AAMaZwADGnQAAl8FgA8AA/hsBFsAAxqQuYcAA/u9FwADGsAHAAMa5wADGuwAAYmADwAD+GwEcwADGwYLAAMa9wHS7GoGNAQABlADAAP9CARzAAMbIg8AAxsbAdLs+gW0BAAGTAMAA/0wBi8AAxtDAdLs+HMAAxs6DwADG0MB0uz6BjQEAAZQAwAD/Qj4CTsAAxt/AAMbnAACWe2ADwADn+wEcwADG7S5LAQABg8AAxu7AdLs+AMAA/s5JwADG+BzAAMcAgMAAxvzAdLraIAEAAYTAAMcBwHS7qQAAPgFKwADHFQGEwADHHMB0u6k/ScAAxzchHMAAx0KBwADHO8B0uvRIAQABKwDAAP91SsAAx0sBHMAAx1iBwADHUsB0uvQgAAAAAAA/PTDAAMdgHsAAx3vAANA4AAAAAAbAAOSXgnPAAMePwADHmcAAyaMAAJaXAAAAAQPAAMekwADJowAAAAIBAcAAx6oAAACXVGEDAWADwADn+2ADwAD8VQABwADHzgAAIJaQYQMAYAPAAOf7AWoAYAPAAP8leWADwADn+wE+B07AAMfjwADH6gAAgXZbAStOwADH+8AAyAkAAMAAcyVgA8AA/FUBKk7AAMgawADIHgAAl8FgA8AA/hsBFsAAyCUuYcAA/u9FwADIMQHAAMg6wADIPAAAYmADwAD+GwGTARzAAMhDhcAAyEHAdL0JYwEAAYTAAMhFwHS85QDAAP9JAY3AAMhMwHS9CRzAAMhKhcAAyEzAdL0JZAEAAZQAwAD/QT4CTsAAyFvAAMhjAACWe2ADwADn+wEcwADIaS5LAQABhcAAyGrAdL0JAMAA/s5JwADIdBzAAMh8gMAAyHjAdLx+IAEAAYbAAMh9wHS9YgAAPgNJwADIkYPAAMiVwHS8zj4BPTDAAMiwHsAAyMvAANA5AAAAAD89isAAyOjAdLy+hsAAyPHAdL1iPYvAAMkCwHS8zik/ScAAySqDwADJLsB0vM5KwADJPQEmwADJPQGCwADJRMB0vL5gA8AA5/s/ScAAyVAhHMAAyVuBwADJVMB0vJhIAQABKwDAAP91SsAAyWQBHMAAyXGBwADJa8B0vJggAAAAAAA/PTDAAMl5HsAAyZTAANA4AAAAAAbAAOSYgnPAAMmowADJssAAyeMAAJaOAAAAAQPAAMm7wADJ4wAAAAEBAcAAycAAAAAnYAPAAP4bAABgA8AA5/sBPgFKwADJzQEcwADJ2C5LAQABgMAAydnAdL6UAMAA/s4GwADkmYJzwADJ6MAAye3AAMpLAABWAAAAAQPAAMnwwADKSwAAAAEBAcAAyfsAACCAlmADwADn+wAAXAE+AT0wwADKCB/AAMoSwAD9rQEAASfAAHfEAAbAAOSagnPAAMpQwADKVcAAysAAAIClAAAAAQPAAMpbwADKwAAAAAEBAcAAynAAACCAll0DwAD+fQFgA8AA5/sAAFwBPgE9MMAAyn0fwADKh8AA/a0BAAEnwAB3xAAGwADkm4JzwADKxcAAysrAAMs7AACfOgAAAAEDwADK0MAAyzsAAAACAgLAAMrVAAAAJ2ADwAD+GwDAAMrmAAAggJZgA8AA5/sAAFwBPgE9MMAAyvMfwADK/cAA/a0BAAEnwAB6ZwAGwADknIJzwADLQMAAy0XAAMvEAACgRwAAAAEDwADLTsAAy8QAAAACAgLAAMtTAAAAJ2ADwAD+GwDAAMtuAAAgKV0DwAD+fQFgA8AA5/sAAFwBPgE9MMAAy3wfwADLhsAA/a0BAAEnwAB6ZwAGwADknYJzwADLycAAy87AAMxvAACArgAAAAEDwADL0sAAzG8AAAABAAHAAMvYAAAAm3dhAwJgA8AA5/tgA8AA5/tgA8AA/hsBagBgA8AA/yV5AFwBPgJJwADMAhzAAMwOgMAAzAbAdMB7SAEAASsAwAD/dT4BPTDAAMwfJ8AAenE/PR7AAMxYwADQzgIBYAPAAOf7Ai6AwADMY8B0wHsABsAA5J6Cc8AAzHTAAMx4wADNeQAAgLsAAAABA8AAzH/AAM15AAAAAgECwADMigAAIJZ7YAPAAOf7AMAAzJgAAABqYAPAAP4bAWrAAMygYAPAAP4bCQBgA8AA/hsBPgNJwADMqhzAAMy0gcAAzK7AdMErgW0BAAEWwADMvC5hwAD+7wDAAP9MPgFKwADMzAEcwADM05SBxgAAAADAAP4+ScAAzOIcwADM7IHAAMzmwHTBK2MBAAGTAMAA/0k+AT2JwADM+cB0wSuTP0XAAM0OAcAAzRfAAM0ZAABiYAPAAP4bAYHAAM0bwHTBKwEcwADNJILAAM0iwHTBwWMBAAEWwADNKy5hwAD+7wDAAP9JAYrAAM0zwHTBwRzAAM00gsAAzTPAdMHBZAEAAZQAwAD/QT4BScAAzUAcwADNTBzAAM1ILksBAAGCwADNScB0wcEAwAD+zkgBAAGAwADNT8B0wRsAwAD/dUrAAM1YAYLAAM1fwHTBwT9KwADNbAEcwADNc5SBxgAAAADAAP4+BsAA5J+Cc8AAzX7AAM2CwADOoAAAlrUAAAABA8AAzY3AAM6gAAAAAgECwADNmAAAIJZ7YAPAAOf7AMAAzaYAAABqYAPAAP4bAWrAAM2uYAPAAP8leQBgA8AA/hsBPgNJwADNuyIcwADNxYHAAM2/wHTCt0gBAAErAMAA/z8BHMAAzdaBwADN0MB0wreBbQEAARbAAM3eLmHAAP7vAMAA/0w+AT2JwADN7sB0wrccwADOAhbAAM37LmHAAP7vgY0BAAGUAMAA/0JJwADOEhzAAM4cgcAAzhbAdMK3YwEAAZMAwAD/ST4BSsAAzikBHMAAzjCUgcYAAAAAwAD+Pj9FwADOPgHAAM5HwADOSQAAYmADwAD+GwGBwADOS8B0wrcBHMAAzlSCwADOUsB0w4GBbQEAAZMAwAD/TAGKwADOWsB0w4EcwADOW4LAAM5awHTDgYGNAQABlADAAP9CPgFJwADOZxzAAM5zHMAAzm8uSwEAAYLAAM5wwHTDgQDAAP7OSAEAAYDAAM52wHTCpwDAAP91SsAAzn8BgsAAzobAdMOBP0rAAM6TARzAAM6alIHGAAAAAMAA/j4GwADkoIJzwADOpcAAzq/AAM8KAACGLgAAAAEDwADOucAAzwoAAAAAAAAAYAPAAOf7AT4BPTDAAM7CH8AAzszAAP2tAQABJ8AAd8UABsAA5KGCc8AAzw/AAM8ZwADPewAAoEYAAAABA8AAzyHAAM97AAAAAQEBwADPJgAAACdgA8AA/hsAAGADwADn+wE+AT0wwADPMx/AAM89wAD9rQEAASfAAHfFAAbAAOSignPAAM+AwADPhcAAz/0AAJdTAAAAAQPAAM+QwADP/QAAAAEBAcAAz5YAAACXVGEDAWADwADn+2ADwAD8VQAAXAE+AT0wwADPtR/AAM+/wAD9rQEAASfAAHfFAAbAAOSjgnPAANACwADQB8AA0H8AAJdWAAAAAQPAANASwADQfwAAAAEBAcAA0BgAAACXVGEDAWADwADn+2ADwAD8VQAAXAE+AT0wwADQNx/AANBBwAD9rQEAASfAAHfFAAbAAOSvgnPAANCEwADQksAA0OwBAIMeAAAAAQPAANCYwADQ7AAAAAAAAABgA8AA5/sBPgJJwADQnhzAANCpFsAA0KIuYcAA/u+AlwEAAZMAwAD/S0rAANCuARzAANC5LksBAAGTAMAA/s4/PTDAANDCHsAA0N3AANA4AAAAAAbAAOSwgnPAANDxwADQ/8AA0WEBAIHqAAAAAQPAANEEwADRYQAAAAAAAABgA8AA5/sBPgJJwADRChzAANEVFsAA0Q4uYcAA/u+AlwEAAZMAwAD/S0rAANEaARzAANElLksBAAEcwADRLRbAANEmLmHAAP7vgY0BAAGUAMAA/0IAwAD+zj89MMAA0TcewADRUsAA0DgAAAAABsAA5LGCc8AA0WbAANF0wADSCwEAgMMAAAABA8AA0XvAANILAAAAAAAAAGADwADn+wE+A0nAANGBHMAA0YwWwADRhS5hwAD+70gBAAGUAMAA/z9KwADRkgEcwADRnS5LAQABkwDAAP7OP0nAANGmHMAA0bEWwADRqi5hwAD+70gBAAGTAMAA/z89MMAA0bcewADR0sAA0DgAAAAAPz0wwADR4x7AANH+wADQOQAAAAAGwADkpIJzwADSEMAA0h7AANMNAACBWAAAAAEDwADSJcAA0w0AAAACAQLAANIqAAAAamADwAD+GwDAANI2AAAAgpBgA8AA/hsBagBgA8AA/yV5AGADwADlqAE+BT2JwADSQsB0x5sewADSU8AA/VwDAAOAwADSY8B0x4yBwADSasB0x5sWwADSdC5hwAD+7wBOwADShcAA0owAAGFgA8AA/hsBHMAA0pKBwADSjsB0x5uBjQEAAYDAANKUwHTHjADAAP9CTsAA0q3AANK0AACBdmADwADlqAEcwADSti7AAHpqwADVvAEAAYLAANLCwHTH8wDAANbnPRzAANLWg8AA0s/AdMgng2QEAASTgsAA0uLAdMfzLoDAANLwwHTHjADAAP7kSsAA0vwBg8AA0wPAdMgnBsAA5KWCc8AA0xLAANMXwADTmAAAoEkAAAABA8AA0x3AANOYAAAAAgICwADTIgAAACdgA8AA/hsAwADTPQAAIIPRXQPAAP59AWADwADn+wAAXAE+Ak7AANNTwADTVwABgpBgA8AA/hsBHMAA02kWwADTYoHAANNZwHTIzmHAAP6gZAEAAYDAANNrwHTIvwDAAP9BPRzAANN2LoNkAwADgMAA03/AdMi/gsAA04bAdMjrgcAA04vAdMjOAMAA1vAGwADkpoJzwADTncAA06LAANRdAACcBwAAAAEDwADTq8AA1F0AAAADAgPAANOwAAAAamADwAD+GwDAANO7AAAAgpBgA8AA/hsAwADTywAAIMAARHRgA8AA5/sBagBgA8AA/yV5AFwBPgI9HsAA0+jAAP1cAwADgMAA0/jAdMl+gcAA0//AdMmNFsAA1AkuYcAA/u8ARcAA1BYBwADUH8AA1CEAAGJgA8AA/hsBgMAA1CPAdMl+ARzAANQsg8AA1CrAdMnuYwEAAYHAANQuwHTJjQDAAP9JAYvAANQ1wHTJ7hzAANQzg8AA1DXAdMnuZAEAAZQAwAD/QT4BPRzAANRELoC/AgACg8AA1EXAdMnugsAA1ErAdMmdAMAA/s8AAHSbUQB0m8QAdJv4AHScKgB0nFwAdJyjAHSc/gB0nXEAdJ3SAHSeYQB0nwoAdKBaAHSh3gB0oywAdKQwAHSlxwB0ra4AdK4jAHSukAB0rwUAdK9yAHSv5wB0sDoAdLCTAHSxTQB0sZ8AdLIbAHSycAB0s10AdLTQAHS2AgB0toMAdLcLAHS4FgB0uSAAdLqwAHS8VAB0vmoAdL7LAHS/IQB0v38AdL/lAHTAUQB0wPEAdMJ9AHTENQB0xIEAdMTcAHTFPAB0xZwAdMYaAHTGsgB0x2IAdMiVAHTJVAB0ynEAAAA3AsAA5LWCc8AB51vAAed7wAHrzAPAAHu7AWrAAedcYAPAAPwcwAGCQAABYAHAAOR3AAFgAcAA5agAAAYGwADkuIJzwAHoLcAB6DXAAeiwBAWAtcAA1bwCasAB5/dgA8AA/BzAAabTagBgA8AAzUzAAabvAAABA8AB6ErAAeiwAAAAAwMDwAHoVgAAAIKPYAPAANc1AMAB6GIAAACqHGADwAD+GwDAAeh7AAAAYWADwAD+GwAAYAPAAOS1AAbAAOS6gnPAAejhwAHo9MAB6dMDAEsAAAABA8AB6PbAAenTAAAAAQEBwAHo+wAAACdgA8AA/hsAAGADwADn+wE+AknAAekIIhzAAekSgMAB6QzAdMw6YwEAAZMAwAD/SQEcwAHpH4DAAekZwHTMOoFtAQABFsAB6SIuYcAA4HkAwAD/TD4BPTDAAekyH8AB6TzAAP1xAwADgMAB6U3AdMw6LicnAD9KwAHpbgEcwAHpiRbAAel1LsAAe4PAANW8wADgd8AAerXAANW8AQABHMAB6aUWwAHply6qHMAA1t5kAQABHMAB6a6AwAHpqMB0zDqDjQEAAWrAAem+YAPAAP4bg3AAwAD/QwDAAP9BAMAA11YGwADku4JzwAHp2MAB6ebAAerXAwCAvwAAAAEDwAHp6cAB6tcAAAACAgLAAenuAAAAJ2ADwAD+GwDAAen/AAAggJZgA8AA5/sAAFwBPgJJwAHqDCIcwAHqFoDAAeoQwHTNTWMBAAGTAMAA/0kBHMAB6iOAwAHqHcB0zU2BbQEAARbAAeomLmHAAOB5AMAA/0w+AT0wwAHqNh/AAepAwAD9cQMAA4DAAepRwHTNTS4nJwA/PRzAAep9FsAB6nIuwAB7g8AA1bzAAOB3wAB6t8AA1bwCAAIcwAHqohbAAeqULqocwADW3mQBAAEcwAHqq4DAAeqlwHTNTYONAQABasAB6rtgA8AA/huDcADAAP9DAMAA/0GBwAHqzcB0zVwAwADXVwbAAOTAgnPAAesNwAHrFcAB61YBAMAAcCoAAAABA8AB6yjAAetWAAAAAAAAAGADwAD+GwE+AUrAAesuAWrAAetDYAPAAP4bg3AGwADkvYJzwAHresAB64jAAevKAADAAHpqwADVvAAAAAEDwAHrk8AB68oAAAABAQHAAeuYAAAAYWADwAD+GwAAYAPAAOWoAT4BSsAB66YBHsAB67HAAOWsAQABgMAB67/AdM6+AAbAAOS+gnPAAed7wAHnewAAEKA/AMAA1d/AANXfAQMAAAAAAAMDAwAAAABqYAPAAP4bAAAAAACCkGADwAD+GwAAAAAgg9FdA8AA/n0BWwAAXAFKAAEdAKA/AwADgADAdM8agQDAdM8mggDAdM8zAMAA1d8AAHTLkQB0zBEAdM0jAHTORQB0zo4AdM7zAHTPZgAAAAYCwADkwYJzwAHrz8AB6+/AAg++A8AAe70BasAB69BgA8AA/BzAAYJAAAFgAcAA/2gAAWABwADlFQAAHQbAAOTEgnPAAexGwAHsTsAB7L0EBYC1wADVvAJqwAHsFmADwAD8HMABpwVqAGADwADNTMABpyEAAAEDwAHsXcAB7L0AAAADAwPAAexpAAAAgo9gA8AA1zUAwAHsdQAAAKocYAPAAP4bAMAB7IgAAABhYAPAAP4bAABgA8AA5MEABsAA5MaCc8AB7PPAAe0DwAHtLAEAgo8AAAABA8AB7QrAAe0sAAAAAAAAAGADwADXGAE+AUrAAe0QARbAAe0iFsAB7RcuwAB7g8AA1bzAAOTKgo/AANc6BsAA5MeCc8AB7THAAe05wAHtXgEAwABvzwAAAAEDwAHtR8AB7V4AAAAAAAAAYAPAAP4bAT4BSsAB7U0BFsAB7VQuYcAA5MwGwADkyIJzwAHtY8AB7WvAAe2QAQDAAHAqAAAAAQPAAe1+wAHtkAAAAAAAAABgA8AA/hsBPgFKwAHthAGUBsAA5M6Cc8AB7cbAAe3owAHuugAAwAB7vwFqwAHtx2ADwAD8HMAAwPoAAAEDwAHt78AB7roAAAABAQHAAe30AAAAmLVgA8AA/hsAAGADwAD+GwE+AknAAe4GIhzAAe4VgMAB7grAdNFYYwEAAZMAwAD/SQEcwAHuJ4DAAe4cwHTRWIFtAQABFsAB7iouYcAA5MwAwAD/TD4BPTDAAe46H8AB7kTAAP1xAwADgMAB7lXAdNFYLieYtQA/SsAB7oABHMAB7pIWwAHuhy7AAHuDwADVvMAA5MrAAHqFwADVvAEAARzAAe6pFsAB7psuqhzAAOTLZAEAAYDAAe6rwHTRWADAAP9BAMAA1z4GwADkz4JzwAHuv8AB7uLAAe+/AADAAHvAAWrAAe7AYAPAAPwcwADA+gAAAQPAAe7pwAHvvwAAAAICAsAB7u4AAACYtWADwAD+GwDAAe7+AAAAgJZgA8AA/hsAAFwBPgJJwAHvCyIcwAHvGoDAAe8PwHTSYmMBAAGTAMAA/0kBHMAB7yyAwAHvIcB00mKBbQEAARbAAe8vLmHAAOTMAMAA/0w+AT0wwAHvPx/AAe9JwAD9cQMAA4DAAe9awHTSYi4nmLUAPz0cwAHvkBbAAe+FLsAAe4PAANW8wADkysAAeofAANW8AgACHMAB76cWwAHvmS6qHMAA5MtkAQABgMAB76nAdNJiAMAA/0GBwAHvtcB00nIAwADXPwbAAOTQgnPAAe/EwAHv5sAB8LoAAMAAe8EBasAB78VgA8AA/BzAAMD6AAABA8AB7+7AAfC6AAAAAQEBwAHv8wAAAJi1YAPAAP4bAABgA8AA/hsBPgJJwAHwBSIcwAHwFIDAAfAJwHTTe2MBAAGTAMAA/0kBHMAB8CaAwAHwG8B003uBbQEAARbAAfApLmHAAOTMAMAA/0w+AT0wwAHwOR/AAfBDwAD9cQMAA4DAAfBUwHTTey4nmLUAP0rAAfB/ARzAAfCRFsAB8IYuwAB7g8AA1bzAAOTKwAB6icAA1bwBAAEcwAHwqRbAAfCbLqocwADky2QBAAGAwAHwq8B003sAwAD/QQDAANdABsAA5NGCc8AB8L/AAfDiwAHxwQAAwAB7wgFqwAHwwGADwAD8HMAAwPoAAAEDwAHw6sAB8cEAAAACAgLAAfDvAAAAmLVgA8AA/hsAwAHw/wAAAICWYAPAAP4bAABcAT4CScAB8QwiHMAB8RuAwAHxEMB01IVjAQABkwDAAP9JARzAAfEtgMAB8SLAdNSFgW0BAAEWwAHxMC5hwADkzADAAP9MPgE9MMAB8UAfwAHxSsAA/XEDAAOAwAHxW8B01IUuJ5i1AD89HMAB8ZEWwAHxhi7AAHuDwADVvMAA5MrAAHqLwADVvAIAAhzAAfGpFsAB8ZsuqhzAAOTLZAEAAYDAAfGrwHTUhQDAAP9BgcAB8bfAdNSVAMAA10EGwADk0oJzwAHxxsAB8ejAAfNfAADAAHvDAWrAAfHHYAPAAPwcwADA+gAAAQPAAfHwwAHzXwAAAAIBAsAB8fUAAACYtWADwAD+GwDAAfIJAAAAwABvOGADwADlCwFqwAHyGWADwADlC8ABggwAYAPAAP4bAT4EScAB8iUiHMAB8jSAwAHyKcB01Z5jAQABkwDAAP9JARzAAfJKHMAB8kaAwAHyO8B01Z5kAQABlADAAP9BgW0BAAEWwAHyTS5hwADkzADAAP9MPgE9MMAB8l0fwAHyZ8AA/WUEAASAwAHyeMB01Z6THMAB8o4WwAHyhy5hwADkzIGNAQABlQDAAP9CJ5i1AD9OwAHysMAB8rcAAIF2YAPAAP4bARzAAfLEFsAB8rkuwAB7g8AA1bzAAOTKwAB6jcAA1bwBAAEcwAHy3BbAAfLOLqocwADky2QBAAGAwAHy3sB01Z4AwAD/QQDAANdCScAB8u8ewAHy88AA9/wCAAKBwAHy/cB01a5qwAHzDGADwADlC8ABfAwAPgFKwAHzGwGCwAHzIsB01mk/SsAB8zQBHMAB808ewAHzO8AA1cUBAAGCwAHzR8B01mkAqwQBAAE3EADAAP49BsAA5NOCc8AB82TAAfOHwAH0zwAAwAB7xAFqwAHzZWADwAD8HMAAwPoAAAEDwAHzj8AB9M8AAAADAgPAAfOUAAAAmLVgA8AA/hsAwAHzpAAAAICWYAPAAP4bAMAB87MAAADAAG84YAPAAOULAWrAAfPDYAPAAOULwAGCDABcAT4CScAB888iHMAB896AwAHz08B012pjAQABkwDAAP9JARzAAfP0HMAB8/CAwAHz5cB012pkAQABlADAAP9BgW0BAAEWwAHz9y5hwADkzADAAP9MPgE9MMAB9AcfwAH0EcAA/WUEAASAwAH0IsB012qTHMAB9DgWwAH0MS5hwADkzIGNAQABlQDAAP9CJ5i1AD89HMAB9GEWwAH0Vi7AAHuDwADVvMAA5MrAAHqPwADVvAIAAhzAAfR5FsAB9GsuqhzAAOTLZAEAAYDAAfR7wHTXagDAAP9BIx7AAfSPwAD3/AIAAoLAAfSZwHTXimrAAfSoYAPAAOULwAF8DACBwAH0sMB013oewAH0uMAA1cUBAAGBwAH0xMB013oAAWADwAD+GwDAANdDBsAA5NSCc8AB9NTAAfT2wAH2YgAAwABF5wFqwAH01WADwAD8HMAAwPoAAAEDwAH0/8AB9mIAAAACAQLAAfUEAAAAmLVgA8AA/hsAwAH1GAAAAMAAbzhgA8AA5QsBasAB9ShgA8AA5QvAAYIMAGADwAD+GwE+BEnAAfU0IhzAAfVDgMAB9TjAdNkRYwEAAZMAwAD/SQEcwAH1WRzAAfVVgMAB9UrAdNkRZAEAAZQAwAD/QYFtAQABFsAB9VwuYcAA5MwAwAD/TD4BPTDAAfVsH8AB9XbAAP1lBAAEgMAB9YfAdNkRkxzAAfWdFsAB9ZYuYcAA5MyBjQEAAZUAwAD/QieYtQA/TsAB9b/AAfXGAACBdmADwAD+GwEcwAH10xbAAfXILsAAe4PAANW8wADkysAAepHAANW8AQABHMAB9ewWwAH13i6qHMAA5MtkAQABgMAB9e7AdNkRAMAA/0EAwADXREnAAfX/HsAB9gPAAPf8AgACgcAB9g3AdNkhasAB9hxgA8AA5QvAAXwMAD4BSsAB9isBgsAB9jLAdNncP0rAAfZEAR7AAfZLwADVxQEAAYLAAfZXwHTZ3AAGwADk1YJzwAH2Z8AB9orAAffUAADAAEZEAWrAAfZoYAPAAPwcwADA+gAAAQPAAfaTwAH31AAAAAMCA8AB9pgAAACYtWADwAD+GwDAAfaoAAAAgJZgA8AA/hsAwAH2twAAAMAAbzhgA8AA5QsBasAB9sdgA8AA5QvAAYIMAFwBPgJJwAH20yIcwAH24oDAAfbXwHTazGMBAAGTAMAA/0kBHMAB9vgcwAH29IDAAfbpwHTazGQBAAGUAMAA/0GBbQEAARbAAfb7LmHAAOTMAMAA/0w+AT0wwAH3Cx/AAfcVwAD9ZQQABIDAAfcmwHTazJMcwAH3PBbAAfc1LmHAAOTMgY0BAAGVAMAA/0InmLUAPz0cwAH3ZRbAAfdaLsAAe4PAANW8wADkysAAepPAANW8AgACHMAB934WwAH3cC6qHMAA5MtkAQABgMAB94DAdNrMAMAA/0EjHsAB95TAAPf8AgACgsAB957AdNrsasAB961gA8AA5QvAAXwMAIHAAfe1wHTa3B7AAfe9wADVxQEAAYHAAffJwHTa3AABYAPAAP4bAMAA10UGwADk1oJzwAH32cAB9/vAAflyAADAAHvFAWrAAffaYAPAAPwcwADA+gAAAQPAAfgDwAH5cgAAAAIBAsAB+AgAAACYtWADwAD+GwDAAfgcAAAAwABvOGADwADlCwFqwAH4LGADwADlC8ABggwAYAPAAP4bAT4EScAB+DgiHMAB+EeAwAH4PMB03HNjAQABkwDAAP9JARzAAfhdHMAB+FmAwAH4TsB03HNkAQABlgDAAP9BgW0BAAEWwAH4YC5hwADkzADAAP9MPgE9MMAB+HAfwAH4esAA/WUEAASAwAH4i8B03HOTHMAB+KEWwAH4mi5hwADkzIGNAQABlwDAAP9CJ5i1AD9OwAH4w8AB+MoAAIF2YAPAAP4bARzAAfjXFsAB+MwuwAB7g8AA1bzAAOTKwAB6lcAA1bwBAAEcwAH47xbAAfjhLqocwADky2QBAAGAwAH48cB03HMAwAD/QQDAANdGScAB+QIewAH5BsAA9/wCAAKBwAH5EMB03INqwAH5H2ADwADlC8ABfAwAPgFKwAH5LgGCwAH5NcB03T4/SsAB+UcBHMAB+WIewAH5TsAA1cYBAAGCwAH5WsB03T4AqwQBAAE3IADAAP49BsAA5NeCc8AB+XfAAfmawAH64gAAwAB7xgFqwAH5eGADwAD8HMAAwPoAAAEDwAH5osAB+uIAAAADAgPAAfmnAAAAmLVgA8AA/hsAwAH5twAAAICWYAPAAP4bAMAB+cYAAADAAG84YAPAAOULAWrAAfnWYAPAAOULwAGCDABcAT4CScAB+eIiHMAB+fGAwAH55sB03j9jAQABkwDAAP9JARzAAfoHHMAB+gOAwAH5+MB03j9kAQABlgDAAP9BgW0BAAEWwAH6Ci5hwADkzADAAP9MPgE9MMAB+hofwAH6JMAA/WUEAASAwAH6NcB03j+THMAB+ksWwAH6RC5hwADkzIGNAQABlwDAAP9CJ5i1AD89HMAB+nQWwAH6aS7AAHuDwADVvMAA5MrAAHqXwADVvAIAAhzAAfqMFsAB+n4uqhzAAOTLZAEAAYDAAfqOwHTePwDAAP9BIx7AAfqiwAD3/AIAAoLAAfqswHTeX2rAAfq7YAPAAOULwAF8DACBwAH6w8B03k8ewAH6y8AA1cYBAAGBwAH618B03k8AAWADwAD+GwDAANdHBsAA5NiCc8AB+ufAAfsJwAH8dQAAwABv1QFqwAH66GADwAD8HMAAwPoAAAEDwAH7EsAB/HUAAAACAQLAAfsXAAAAmLVgA8AA/hsAwAH7KwAAAMAAbzhgA8AA5QsBasAB+ztgA8AA5QvAAYIMAGADwAD+GwE+BEnAAftHIhzAAftWgMAB+0vAdN/mYwEAAZMAwAD/SQEcwAH7bBzAAftogMAB+13AdN/mZAEAAZYAwAD/QYFtAQABFsAB+28uYcAA5MwAwAD/TD4BPTDAAft/H8AB+4nAAP1lBAAEgMAB+5rAdN/mkxzAAfuwFsAB+6kuYcAA5MyBjQEAAZcAwAD/QieYtQA/TsAB+9LAAfvZAACBdmADwAD+GwEcwAH75hbAAfvbLsAAe4PAANW8wADkysAAepnAANW8AQABHMAB+/8WwAH78S6qHMAA5MtkAQABgMAB/AHAdN/mAMAA/0EAwADXSEnAAfwSHsAB/BbAAPf8AgACgcAB/CDAdN/2asAB/C9gA8AA5QvAAXwMAD4BSsAB/D4BgsAB/EXAdOCxP0rAAfxXAR7AAfxewADVxgEAAYLAAfxqwHTgsQAGwADk2YJzwAH8esAB/J3AAf3nAADAAG/SAWrAAfx7YAPAAPwcwADA+gAAAQPAAfymwAH95wAAAAMCA8AB/KsAAACYtWADwAD+GwDAAfy7AAAAgJZgA8AA/hsAwAH8ygAAAMAAbzhgA8AA5QsBasAB/NpgA8AA5QvAAYIMAFwBPgJJwAH85iIcwAH89YDAAfzqwHThoWMBAAGTAMAA/0kBHMAB/QscwAH9B4DAAfz8wHThoWQBAAGWAMAA/0GBbQEAARbAAf0OLmHAAOTMAMAA/0w+AT0wwAH9Hh/AAf0owAD9ZQQABIDAAf05wHThoZMcwAH9TxbAAf1ILmHAAOTMgY0BAAGXAMAA/0InmLUAPz0cwAH9eBbAAf1tLsAAe4PAANW8wADkysAAepvAANW8AgACHMAB/ZEWwAH9gy6qHMAA5MtkAQABgMAB/ZPAdOGhAMAA/0EjHsAB/afAAPf8AgACgsAB/bHAdOHBasAB/cBgA8AA5QvAAXwMAIHAAf3IwHThsR7AAf3QwADVxgEAAYHAAf3cwHThsQABYAPAAP4bAMAA10kGwADk2oJzwAH97MAB/g7AAf+FAADAAHvHAWrAAf3tYAPAAPwcwADA+gAAAQPAAf4WwAH/hQAAAAIBAsAB/hsAAACYtWADwAD+GwDAAf4vAAAAwABvOGADwADlCwFqwAH+P2ADwADlC8ABggwAYAPAAP4bAT4EScAB/ksiHMAB/lqAwAH+T8B040hjAQABkwDAAP9JARzAAf5wHMAB/myAwAH+YcB040hkAQABNwcAwAD/QYFtAQABFsAB/nMuYcAA5MwAwAD/TD4BPTDAAf6DH8AB/o3AAP1lBAAEgMAB/p7AdONIkxzAAf60FsAB/q0uYcAA5MyBjQEAATcIAMAA/0InmLUAP07AAf7WwAH+3QAAgXZgA8AA/hsBHMAB/uoWwAH+3y7AAHuDwADVvMAA5MrAAHqdwADVvAEAARzAAf8CFsAB/vQuqhzAAOTLZAEAAYDAAf8EwHTjSADAAP9BAMAA10pJwAH/FR7AAf8ZwAD3/AIAAoHAAf8jwHTjWGrAAf8yYAPAAOULwAF8DAA+AUrAAf9BAYLAAf9IwHTkFT9KwAH/WgEcwAH/dR7AAf9hwADVxwEAAYLAAf9twHTkFQCrBAEAATdAAMAA/j0GwADk24JzwAH/isAB/63AAgD1AADAAHvIAWrAAf+LYAPAAPwcwADA+gAAAQPAAf+1wAIA9QAAAAMCA8AB/7oAAACYtWADwAD+GwDAAf/KAAAAgJZgA8AA/hsAwAH/2QAAAMAAbzhgA8AA5QsBasAB/+lgA8AA5QvAAYIMAFwBPgJJwAH/9SIcwAIABIDAAf/5wHTlFmMBAAGTAMAA/0kBHMACABocwAIAFoDAAgALwHTlFmQBAAE3BwDAAP9BgW0BAAEWwAIAHS5hwADkzADAAP9MPgE9MMACAC0fwAIAN8AA/WUEAASAwAIASMB05RaTHMACAF4WwAIAVy5hwADkzIGNAQABNwgAwAD/QieYtQA/PRzAAgCHFsACAHwuwAB7g8AA1bzAAOTKwAB6n8AA1bwCAAIcwAIAnxbAAgCRLqocwADky2QBAAGAwAIAocB05RYAwAD/QSMewAIAtcAA9/wCAAKCwAIAv8B05TZqwAIAzmADwADlC8ABfAwAgcACANbAdOUmHsACAN7AANXHAQABgcACAOrAdOUmAAFgA8AA/hsAwADXSwbAAOTcgnPAAgD6wAIBHMACAogAAMAAe8kBasACAPtgA8AA/BzAAMD6AAABA8ACASXAAgKIAAAAAgECwAIBKgAAAJi1YAPAAP4bAMACAT4AAADAAG84YAPAAOULAWrAAgFOYAPAAOULwAGCDABgA8AA/hsBPgRJwAIBWiIcwAIBaYDAAgFewHTmv2MBAAGTAMAA/0kBHMACAX8cwAIBe4DAAgFwwHTmv2QBAAE3BwDAAP9BgW0BAAEWwAIBgi5hwADkzADAAP9MPgE9MMACAZIfwAIBnMAA/WUEAASAwAIBrcB05r+THMACAcMWwAIBvC5hwADkzIGNAQABNwgAwAD/QieYtQA/TsACAeXAAgHsAACBdmADwAD+GwEcwAIB+RbAAgHuLsAAe4PAANW8wADkysAAeqHAANW8AQABHMACAhIWwAICBC6qHMAA5MtkAQABgMACAhTAdOa/AMAA/0EAwADXTEnAAgIlHsACAinAAPf8AgACgcACAjPAdObPasACAkJgA8AA5QvAAXwMAD4BSsACAlEBgsACAljAdOeMP0rAAgJqAR7AAgJxwADVxwEAAYLAAgJ9wHTnjAAGwADk3YJzwAICjcACArDAAgP6AADAAHvKAWrAAgKOYAPAAPwcwADA+gAAAQPAAgK5wAID+gAAAAMCA8ACAr4AAACYtWADwAD+GwDAAgLOAAAAgJZgA8AA/hsAwAIC3QAAAMAAbzhgA8AA5QsBasACAu1gA8AA5QvAAYIMAFwBPgJJwAIC+SIcwAIDCIDAAgL9wHTofGMBAAGTAMAA/0kBHMACAx4cwAIDGoDAAgMPwHTofGQBAAE3BwDAAP9BgW0BAAEWwAIDIS5hwADkzADAAP9MPgE9MMACAzEfwAIDO8AA/WUEAASAwAIDTMB06HyTHMACA2IWwAIDWy5hwADkzIGNAQABNwgAwAD/QieYtQA/PRzAAgOLFsACA4AuwAB7g8AA1bzAAOTKwAB6o8AA1bwCAAIcwAIDpBbAAgOWLqocwADky2QBAAGAwAIDpsB06HwAwAD/QSMewAIDusAA9/wCAAKCwAIDxMB06JxqwAID02ADwADlC8ABfAwAgcACA9vAdOiMHsACA+PAANXHAQABgcACA+/AdOiMAAFgA8AA/hsAwADXTQbAAOTegnPAAgP/wAIEJMACBcsAAMAAe8sBasACBABgA8AA/BzAAMD6AAABA8ACBC7AAgXLAAAAAgECwAIEMwAAAJi1YAPAAP4bAMACBEcAAADAAG84YAPAAOULAWrAAgRXYAPAAOULwAGCDABgA8AA/M0BPgRJwAIEYyIcwAIEcoDAAgRnwHTqJWMBAAGTAMAA/0kBHMACBIgcwAIEhIDAAgR5wHTqJWQBAAGWAMAA/0GBbQEAARbAAgSLLmHAAOTMAMAA/0w+AT0wwAIEmx/AAgSlwAD9ZQQABIDAAgS2wHTqJZMcwAIEzBbAAgTFLmHAAOTMgY0BAAGXAMAA/0InmLUAP0nAAgTqHsACBO7AAPf8AgACgcACBPjAdOo1asACBQdgA8AA5QvAAXwMAD4BSsACBRYBHMACBSgWwAIFHS7AAHuDwADVvMAA5MrAAHqlwADVvAEAARzAAgVCFsACBTQuqhzAAOTLZAEAAYDAAgVEwHTqJQDAAP9BAMAA104/PRzAAgVjGsACBVvAANW/gL8CAAKTHsACBXHAANXGAQABHMACBYgWwAIFfS7AAHuDwADVvMAA5MrAAHqZwADVvAEAARzAAgWhFsACBZMuqhzAAOTLZAEAAYDAAgWjwHTqJQDAAP9BAMAA10gAAMAA/s9KwAIFtQEcwAIFxBrAAgW8wADVwUsBAAGTAMAA/s4GwADk34JzwAIF0MACBfPAAgeuAADAAHvMAWrAAgXRYAPAAPwcwADA+gAAAQPAAgX9wAIHrgAAAAMCA8ACBgIAAACYtWADwAD+GwDAAgYVAAAAgJZgA8AA/M0AwAIGJAAAAMAAbzhgA8AA5QsBasACBjRgA8AA5QvAAYIMAFwBPgRJwAIGQCIcwAIGT4DAAgZEwHTsNmMBAAGTAMAA/0kBHMACBmUcwAIGYYDAAgZWwHTsNmQBAAGWAMAA/0GBbQEAARbAAgZoLmHAAOTMAMAA/0w+AT0wwAIGeB/AAgaCwAD9ZQQABIDAAgaTwHTsNpMcwAIGqRbAAgaiLmHAAOTMgY0BAAGXAMAA/0InmLUAP0nAAgbHHsACBsvAAPf8AgACgsACBtXAdOxWasACBuRgA8AA5QvAAXwMAD4CPRzAAgb+FsACBvMuwAB7g8AA1bzAAOTKwAB6p8AA1bwCAAIcwAIHGBbAAgcKLqocwADky2QBAAGAwAIHGsB07DYAwAD/QYHAAgcmwHTsRgDAANdPSsACBzQAPz0cwAIHThrAAgdGwADVwYC/AgACk4HAAgdUwHTsRgDAAP7PPRzAAgdqFsACB18uwAB7g8AA1bzAAOTKwAB6m8AA1bwCAAIcwAIHgxbAAgd1LqocwADky2QBAAGAwAIHhcB07DYAwAD/QR7AAgeRwADVxgEAARzAAgelGsACB53AANW/SwEAAZMAwAD+zgAAwADXSQbAAOTggnPAAgezwAIH2MACCX8AAMAARkUBasACB7RgA8AA/BzAAMD6AAABA8ACB+LAAgl/AAAAAgECwAIH5wAAAJi1YAPAAP4bAMACB/sAAADAAG84YAPAAOULAWrAAggLYAPAAOULwAGCDABgA8AA/M0BPgRJwAIIFyIcwAIIJoDAAggbwHTuYGMBAAGTAMAA/0kBHMACCDwcwAIIOIDAAggtwHTuYGQBAAE3BwDAAP9BgW0BAAEWwAIIPy5hwADkzADAAP9MPgE9MMACCE8fwAIIWcAA/WUEAASAwAIIasB07mCTHMACCIAWwAIIeS5hwADkzIGNAQABNwgAwAD/QieYtQA/ScACCJ4ewAIIosAA9/wCAAKBwAIIrMB07nBqwAIIu2ADwADlC8ABfAwAPgFKwAIIygEcwAII3BbAAgjRLsAAe4PAANW8wADkysAAeqnAANW8AQABHMACCPYWwAII6C6qHMAA5MtkAQABgMACCPjAdO5gAMAA/0EAwADXUD89HMACCRcawAIJD8AA1cCAvwIAApMewAIJJcAA1ccBAAEcwAIJPBbAAgkxLsAAe4PAANW8wADkysAAeqHAANW8AQABHMACCVUWwAIJRy6qHMAA5MtkAQABgMACCVfAdO5gAMAA/0EAwADXTAAAwAD+z0rAAglpARzAAgl4GsACCXDAANXCSwEAAZMAwAD+zgbAAOThgnPAAgmEwAIJp8ACC2IAAMAAReYBasACCYVgA8AA/BzAAMD6AAABA8ACCbHAAgtiAAAAAwIDwAIJtgAAAJi1YAPAAP4bAMACCckAAACAlmADwAD8zQDAAgnYAAAAwABvOGADwADlCwFqwAIJ6GADwADlC8ABggwAXAE+BEnAAgn0IhzAAgoDgMACCfjAdPBzYwEAAZMAwAD/SQEcwAIKGRzAAgoVgMACCgrAdPBzZAEAATcHAMAA/0GBbQEAARbAAgocLmHAAOTMAMAA/0w+AT0wwAIKLB/AAgo2wAD9ZQQABIDAAgpHwHTwc5McwAIKXRbAAgpWLmHAAOTMgY0BAAE3CADAAP9CJ5i1AD9JwAIKex7AAgp/wAD3/AIAAoLAAgqJwHTwk2rAAgqYYAPAAOULwAF8DAA+Aj0cwAIKshbAAgqnLsAAe4PAANW8wADkysAAeqvAANW8AgACHMACCswWwAIKvi6qHMAA5MtkAQABgMACCs7AdPBzAMAA/0GBwAIK2sB08IMAwADXUUrAAgroAD89HMACCwIawAIK+sAA1cKAvwIAApOBwAILCMB08IMAwAD+zz0cwAILHhbAAgsTLsAAe4PAANW8wADkysAAeqPAANW8AgACHMACCzcWwAILKS6qHMAA5MtkAQABgMACCznAdPBzAMAA/0EewAILRcAA1ccBAAEcwAILWRrAAgtRwADVwEsBAAGTAMAA/s4AAMAA100GwADk4oJzwAILZ8ACC3HAAgy5AADAAHvNAAAAAQPAAgt9wAIMuQAAAAIBAsACC4IAAACYtWADwAD+GwDAAguWAAAAwABvOGADwADlCwFqwAILpmADwADlC8ABggwAYAPAAOWyAT4CScACC7IiHMACC8GAwAILtsB08pBjAQABkwDAAP9JARzAAgvXHMACC9OAwAILyMB08pBkAQABlgDAAP9BgW0BAAEWwAIL2i5hwADkzADAAP9MPgE9MMACC+ofwAIL9MAA/WUEAASAwAIMBcB08pCTHMACDBsWwAIMFC5hwADkzIGNAQABlwDAAP9CJ5i1AD9KwAIMegEcwAIMjBbAAgyBLsAAe4PAANW8wADkysAAeq3AANW8AQABHMACDKgWwAIMmi6qHMAA5MtkAQABgMACDKrAdPKQAMAA/0EAwADXUgbAAOTjgnPAAgy+wAIMw8ACDiIAAMAAe84AAAABA8ACDM/AAg4iAAAAAwIDwAIM1AAAAJi1YAPAAP4bAMACDOoAAACAlmADwADlsgDAAgz/AAAAwABvOGADwADlCwFqwAIND2ADwADlC8ABggwAXAE+AknAAg0bIhzAAg0qgMACDR/AdPPWYwEAAZMAwAD/SQEcwAINQBzAAg08gMACDTHAdPPWZAEAAZYAwAD/QYFtAQABFsACDUMuYcAA5MwAwAD/TD4BPTDAAg1TH8ACDV3AAP1lBAAEgMACDW7AdPPWkxzAAg2EFsACDX0uYcAA5MyBjQEAAZcAwAD/QieYtQA/PRzAAg3uFsACDeMuwAB7g8AA1bzAAOTKwAB6r8AA1bwCAAIcwAIOChbAAg38LqocwADky2QBAAGAwAIODMB089YAwAD/QYHAAg4YwHTz5gDAANdTBsAA5MqCc8ACDifAAg59wAIOqAEEwAB7g8AA1bwDasACDihgA8AA/BzAAaPyasACDlFgA8AA/BzAAMD6agBgA8AAzUzAAaQLAAABA8ACDojAAg6oAAAAAAAAAGADwADXNQAGwADky4JzwAIOrcACDwfAAg85AQSqHANqwAIOrmADwAD8HMABhuRqwAIO4mADwAD8HMAAwPpqAGADwADNTMABpB8AAAEDwAIPFcACDzkAAAAAAAAAYAPAAP4bAAbAAOTMgnPAAg8+wAIPmMACD7wBBGEDasACDz9gA8AA/BzAAYbkasACD3NgA8AA/BzAAMD6agBgA8AAzUzAAaQzAAABA8ACD5/AAg+8AAAAAAAAAGADwAD+GwAAAHTPwgB00EIAdNCZAHTQ4AB00R0AdNInAHTTQAB01EoAdNVjAHTXLwB02NYAdNqRAHTcOAB03gQAdN+rAHThZgB04w0AdOTbAHTmhAB06EEAdOnqAHTr+wB07iUAdPA4AHTyZAB086oAdPT/AHT1YQB09b0AdPYYAAAAHQLAAOTkgnKC2ILntwkHwAB4LQAAAWABwAD/aAAAAAEFwADk+AAAAAAEAAADAAAAAAAAAAAAYAPAAOTkAT8BCQEAwAD/fgAAAAAQBsAA5OaCcoM5g0GDTgECwABvzwAAAAEDg06DTgAAAAAAAABgA8AA/hsABsAA5OiCcoXNhdeGBwACmIIAAAABA4XihgcAAAACAAKF6AAAAKocYAPAAP4bAWqF+GADwAD+GwmF/wAAAGFgA8AA/hsBagBgA8AA/yV5AGADwADlOQAGwADk6YJyiISIjYi8AALAAHp2AAAAAQOIl4i8AAAAAgACiJ0AAACqHGADwAD+GwFqiK1gA8AA/hsJiLQAAABhYAPAAP4bAWoAYAPAAP8leQBgA8AA5TAABsAA5OqCcotJi1qLkQACwAB6dwAAAAEDi2yLkQAAAAIAAotyAAAAqhxgA8AA/hsBaouCYAPAAP4bCYuJAAAAYWADwAD+GwFqAGADwAD/JXkAYAPAAOVDAAbAAOTrgnKO9Y8AjzEAAsAAenkAAAABA48MjzEAAAACAAKPEgAAAKocYAPAAP4bAWqPImADwAD+GwmPKQAAAGFgA8AA/hsBagBgA8AA/yV5AGADwADlVQAGwADk7IJykpOSnZLNAALAAHp4AAAAAQOSqJLNAAAAAgACkq4AAACqHGADwAD+GwFqkr5gA8AA/hsJksUAAABhYAPAAP4bAWoAYAPAAP8leQBgA8AA5UwABsAA5O2CcpZFllCWgQACwAB6ewAAAAEDllyWgQAAAAIAApZiAAAAqhxgA8AA/hsBapZyYAPAAP4bCZZ5AAAAYWADwAD+GwFqAGADwAD/JXkAYAPAAOVnAAbAAOTugnKZ95oBmjEAAsAAenoAAAABA5oMmjEAAAACAAKaEgAAAKocYAPAAP4bAWqaImADwAD+GwmaKQAAAGFgA8AA/hsBagBgA8AA/yV5AGADwADlXgAGwADk74Jynaudtp3nAALAAHp9AAAAAQOdwp3nAAAAAgACncgAAACqHGADwAD+GwFqndhgA8AA/hsJnd8AAABhYAPAAP4bAWoAYAPAAP8leQBgA8AA5XkABsAA5PCCcqFfoWmhmQACwAB6fAAAAAEDoXShmQAAAAIAAqF6AAAAqhxgA8AA/hsBaqGKYAPAAP4bCaGRAAAAYWADwAD+GwFqAGADwAD/JXkAYAPAAOVwAAbAAOTxgnKlGKUkpVYAAsAAeoEAAAABA6UxpVYAAAACAAKlNwAAAKocYAPAAP4bAWqlR2ADwAD+GwmlTgAAAGFgA8AA/hsBagBgA8AA/yV5AGADwADlngAGwADk8oJyqNCo3KkOAALAAHp+AAAAAQOo6akOAAAAAgACqO8AAACqHGADwAD+GwFqqP9gA8AA/hsJqQYAAABhYAPAAP4bAWoAYAPAAP8leQBgA8AA5YIABsAA5POCcqyKrJasyAACwAB6fwAAAAEDrKOsyAAAAAIAAqypAAAAqhxgA8AA/hsBaqy5YAPAAP4bCazAAAAAYWADwAD+GwFqAGADwAD/JXkAYAPAAOWLAAbAAOT0gnKwS7BZsI0AAsAAeoAAAAABA7BosI0AAAACAAKwbgAAAKocYAPAAP4bAWqwfmADwAD+GwmwhQAAAGFgA8AA/hsBagBgA8AA/yV5AGADwADllAAGwADk9YJytBC0HrRSAALAAHqCAAAAAQO0LbRSAAAAAgACtDMAAACqHGADwAD+GwFqtENgA8AA/hsJtEoAAABhYAPAAP4bAWoAYAPAAP8leQBgA8AA5agABsAA5PaCcrbPtti3BwACwABv0QAAAAEDtuK3BwAAAAIAArboAAAAqhxgA8AA/hsBarb4YAPAAP4bCbb/AAAAYWADwAD+GwFqAGADwAD/JXkAYAPAAOUVAAAAdPbfAHT3CQB0918AdPe3AHT4DwB0+GcAdPi/AHT5FwB0+W8AdPnHAHT6HwB0+ncAdPrPAHT7JwB0+38AdPvXAHT8LwAAABACwADk+YJytzy3S7kGB8AAdoEAAAFgAcAA/2gAAAABBcAA5QAAAAAABAAAAwAAAAAAAAAAAGADwADk+QE/AQkBAMAA/34AAAAABAbAAOT7gnK3v7fHt9kBAsAAcCoAAAABA7fZt9kAAAAAAAAAYAPAAP4bAAbAAOT8gnK4ObhBuE4BAqocAAAAAQO4TrhOAAAAAAAAAGADwAD+GwAGwADk/YJyuI+4l7ikAQLAAG/PAAAAAQO4pLikAAAAAAAAAGADwAD+GwAGwADk/oJyuO+4/rkEAQKCjwAAAAEDuQS5BAAAAAAAAABgA8AA5OQAAAB0/MIAdPzsAHT9FAB0/T4AdP1mAAAABALAAOUBgnK5CbkYuqcHwAB7zwAAAWABwADk+QAAAAEFwADlBQAAAAAEAAADAAAAAAAAAAAAYAPAAOUBAT8BCQEAwADlAAAAAAABBsAA5QOCcrqAupO6pQMCZAAAAAEDupS6pQAAAAEBAbqfAAAAg9tdA8AA/r8BYAPAAP4bAABdA8AA/r8BYAPAAP4bAAAAdP3JAHT+DAAAAAECwADlBoJyuqq6ubxfB8AAe9AAAAFgAcAA5PkAAAABBcAA5QoAAAAABAAAAwAAAAAAAAAAAGADwADlBgE/AQkBAMAA5QAAAAAAAQbAAOUIgnK8MrxIvF0DAmQAAAABA7xJvF0AAAABAQG8VwAAAIPbXQPAAP6/AWADwAD8zQAAXQPAAP6/AWADwAD8zQAAAHT+YwB0/qYAAAABAsAA5QuCcrzAvMa+CgPAAHvRAAABYAHAAP9oAAAEBMAA5Q6CcrzcvOkJwAB70sAA1bwAYAPAAPxVAATAAOUPgnK9KL1DBsAAe9MAYAPAAOULAWq9NGADwADlC8ABggwEwADlEIJyvVu9eAbAAHvUAGADwADlCwFqvWpgA8AA5QvAAXwMBMAA5RGCcr2QvggHlrEAYAPAAOULAWoAYAPAAOULwAF8DAEFwADlFIJyvO28870PAYC1wADVvAADvPu9DwAAAAEBAb0BAAAEwAB70mADwAD8VQAAYAPAAOULAT8CCAHAAOUOgADAdP96CQG888AA/34AAAAAAAAAdP+tAAAAAALAAOUVgnLAAEHwwABB/8AAaxcHwAB71QFqwABB/2ADwADNPsABgmAAAWABwAD/aAABYAHAAOT5AAAXBsAA5RiCc4VZhWGGLAQBwAB71sAA1bwBaoU+YAPAAPwcwAGCQAAAAQOFb4YsAAAAAwMDhXsAAADAAHvXYAPAANc1AIWKAAAAqhxgA8AA/hsAhZ0AAABhYAPAAP4bAABgA8AA5RUBPgI9HoWrwADV0AMAAxaFwYCFt8B1ACTAAG/PwADXOYGF0MB1ADSChd/AdQBCAEqF7AEehffAAOTEAwADgIYHwHUAJIGGEsB1ADSChiHAdQBCAAbAAOUZgnOEXoRmhRYEAQADaoRmYAPAAM0+wAGCYGqEZmADwAD8HMABgkBqhGZgA8AA/BzAAYJAAAABA4RuhRYAAAABAQGEcwAAAGFgA8AA/hsAAGADwADlFQE+A06Eh4SMAAGDYWADwADXNQEmhKQAHoSSwADlPQEAAYCEnMB1AO8AYAPAANc1PR6Et8AA1dADAAMWhMiBhMPAdQEHwABvz8AA1zmTgITawHUA7wBKhOcBHoTywADkxAMAA4GFAsB1AQeTgIULwHUA7wAGwADlGoJywABFSsAARVLAAEXXBAHAAEqwAAAAAQPAAEVfwABF1wAAAAMBA8AARWsAAACCj2ADwADk5ADAAEV+AAAAqhxgA8AA/hsBasAARY5gA8AA/hsJwABFlQAAAGFgA8AA/hsBagBgA8AA/yV5AGADwADlFQE+AUrAAEWkARzAAEWygMAARavAdQGiwABv0QIAAoHAAEW9wHUBsoLAAEXMwHUBzgDAAOT2BsAA5RyCcsAAR0vAAEdPwABHZgACwAB7vwAAAAEDwABHVsAAR2YAAAABAQHAAEdbAAAAmLVgA8AA/hsAAGADwAD+GwAGwADlHYJywABI7MAASPHAAEkTAALAAHvAAAAAAQPAAEj4wABJEwAAAAICAsAASP0AAACYtWADwAD+GwDAAEkNAAAAgJZgA8AA/hsAAFwABsAA5R6CcsAASmLAAEpmwABKfgACwAB7wQAAAAEDwABKbsAASn4AAAABAQHAAEpzAAAAmLVgA8AA/hsAAGADwAD+GwAGwADlH4JywABL+cAAS/7AAEwhAALAAHvCAAAAAQPAAEwGwABMIQAAAAICAsAATAsAAACYtWADwAD+GwDAAEwbAAAAgJZgA8AA/hsAAFwABsAA5SCCcsAATbfAAE27wABN8QACwAB7wwAAAAEDwABNw8AATfEAAAACAQLAAE3IAAAAmLVgA8AA/hsAwABN3AAAAMAAbzhgA8AA5QsBasAATexgA8AA5QvAAYIMAGADwAD+GwAGwADlIYJywABPqcAAT67AAE/vAALAAHvEAAAAAQPAAE+2wABP7wAAAAMCA8AAT7sAAACYtWADwAD+GwDAAE/LAAAAgJZgA8AA/hsAwABP2gAAAMAAbzhgA8AA5QsBasAAT+pgA8AA5QvAAYIMAFwABsAA5SKCcsAAUWnAAFFtwABRpAACwABF5wAAAAEDwABRdsAAUaQAAAACAQLAAFF7AAAAmLVgA8AA/hsAwABRjwAAAMAAbzhgA8AA5QsBasAAUZ9gA8AA5QvAAYIMAGADwAD+GwAGwADlI4JywABTRcAAU0rAAFOMAALAAEZEAAAAAQPAAFNTwABTjAAAAAMCA8AAU1gAAACYtWADwAD+GwDAAFNoAAAAgJZgA8AA/hsAwABTdwAAAMAAbzhgA8AA5QsBasAAU4dgA8AA5QvAAYIMAFwABsAA5SSCcsAAVSPAAFUnwABVXQACwAB7xQAAAAEDwABVL8AAVV0AAAACAQLAAFU0AAAAmLVgA8AA/hsAwABVSAAAAMAAbzhgA8AA5QsBasAAVVhgA8AA5QvAAYIMAGADwAD+GwAGwADlJYJywABXF8AAVxzAAFddAALAAHvGAAAAAQPAAFckwABXXQAAAAMCA8AAVykAAACYtWADwAD+GwDAAFc5AAAAgJZgA8AA/hsAwABXSAAAAMAAbzhgA8AA5QsBasAAV1hgA8AA5QvAAYIMAFwABsAA5SaCcsAAWNjAAFjcwABZEwACwABv1QAAAAEDwABY5cAAWRMAAAACAQLAAFjqAAAAmLVgA8AA/hsAwABY/gAAAMAAbzhgA8AA5QsBasAAWQ5gA8AA5QvAAYIMAGADwAD+GwAGwADlJ4JywABatsAAWrvAAFr9AALAAG/SAAAAAQPAAFrEwABa/QAAAAMCA8AAWskAAACYtWADwAD+GwDAAFrZAAAAgJZgA8AA/hsAwABa6AAAAMAAbzhgA8AA5QsBasAAWvhgA8AA5QvAAYIMAFwABsAA5SiCcsAAXJXAAFyZwABczwACwAB7xwAAAAEDwABcocAAXM8AAAACAQLAAFymAAAAmLVgA8AA/hsAwABcugAAAMAAbzhgA8AA5QsBasAAXMpgA8AA5QvAAYIMAGADwAD+GwAGwADlKYJywABei8AAXpDAAF7RAALAAHvIAAAAAQPAAF6YwABe0QAAAAMCA8AAXp0AAACYtWADwAD+GwDAAF6tAAAAgJZgA8AA/hsAwABevAAAAMAAbzhgA8AA5QsBasAAXsxgA8AA5QvAAYIMAFwABsAA5SqCcsAAYE3AAGBRwABgiAACwAB7yQAAAAEDwABgWsAAYIgAAAACAQLAAGBfAAAAmLVgA8AA/hsAwABgcwAAAMAAbzhgA8AA5QsBasAAYINgA8AA5QvAAYIMAGADwAD+GwAGwADlK4JywABiLcAAYjLAAGJ0AALAAHvKAAAAAQPAAGI7wABidAAAAAMCA8AAYkAAAACYtWADwAD+GwDAAGJQAAAAgJZgA8AA/hsAwABiXwAAAMAAbzhgA8AA5QsBasAAYm9gA8AA5QvAAYIMAFwABsAA5SyCcsAAY8fAAGPOwABkBgACwAB7ywAAAAEDwABj2MAAZAYAAAACAQLAAGPdAAAAmLVgA8AA/hsAwABj8QAAAMAAbzhgA8AA5QsBasAAZAFgA8AA5QvAAYIMAGADwAD8zQAGwADlLYJywABnl8AAZ5zAAGfiAALAAHvMAAAAAQPAAGemwABn4gAAAAMCA8AAZ6sAAACYtWADwAD+GwDAAGe+AAAAgJZgA8AA/M0AwABnzQAAAMAAbzhgA8AA5QsBasAAZ91gA8AA5QvAAYIMAFwABsAA5S6CcsAAaTbAAGk9wABpdQACwABGRQAAAAEDwABpR8AAaXUAAAACAQLAAGlMAAAAmLVgA8AA/hsAwABpYAAAAMAAbzhgA8AA5QsBasAAaXBgA8AA5QvAAYIMAGADwAD8zQAGwADlL4JywABqysAAas/AAGsVAALAAEXmAAAAAQPAAGrZwABrFQAAAAMCA8AAat4AAACYtWADwAD+GwDAAGrxAAAAgJZgA8AA/M0AwABrAAAAAMAAbzhgA8AA5QsBasAAaxBgA8AA5QvAAYIMAFwAAAB0//EAdQCpAHUBdgB1AiIAdQJmAHUCtQB1AvkAdQNIAHUDrQB1BB0AdQSCAHUE8gB1BVcAdQXHAHUGLAB1BpwAdQcBAHUHcQB1B9YAdQhGAHUIqwB1CRsAdQmAAHUJ8AAAABcCwADlMIJywABsiMAAbJfAAHUDB8AAe9gBasAAbJdgA8AAzT7AAYJgAAFgAcAA/2gAAl0BwAD+vwFgA8AA/htgAcAA5QEBBMAA5TKCcsAAdO7AAHUBBsAAe9kAYAPAAP4bAWrAAHUAYAPAAP4bFQAEBsAA5TSCc8AA+mPAAPprwAD6oAQFAANqwAD6a2ADwADNPsABgmBqwAD6a2ADwAD8HMABpzdqwAD6a2ADwADNTMABp1MAAAEDwAD6c8AA+qAAAAABAQHAAPp4AAAAYWADwAD+GwAAYAPAAOUwAAbAAOU1gnPAAPquwAD6tsAA+zkEAcAAeNMBasAA+rZgA8AAzT7AAYJgAAABA8AA+sfAAPs5AAAAAQEBwAD60gAAAIh5XQPAAP6/AWADwAD+GwAAYAPAAOUwAT4BSsAA+uIBNcAA+u0AAAEAYAPAAOUwAR7AAPrtwADlNAEAARbAAPr/gMAA+vbAdQttYcAA/u8ANQAAAAEAWwEcwAD7D4HAAPsNwHULlYNkAwADkxbAAPskgMAA+xvAdQttYcAA/u+AwAD7LMB1C20AwAD+5IEAwHULlQbAAOU2gnLAAHECwABxCsAAcY8EAcAASrAAAAABA8AAcRfAAHGPAAAAAwEDwABxIwAAAIKPYAPAAOTkAMAAcTYAAACqHGADwAD+GwFqwABxRmADwAD+GwnAAHFNAAAAYWADwAD+GwFqAGADwAD/JXkAYAPAAOUwAT4BSsAAcVwBHMAAcWqAwABxY8B1DDPAAHp2AgACgcAAcXXAdQxDgsAAcYTAdQxfAMAA5OkGwADlOIJywAB0ssAAdLvAAHTYAAKBWAAAAAEDwAB0wsAAdNgAAAACAQLAAHTHAAAAamADwAD+GwDAAHTTAAAAgpBgA8AA/hsBagBgA8AA/yV5AGADwADlMAAAAHUKxQB1CzIAdQwHAHUMswB1DQ0AAAAEAsAA5TmCcsAAdmTAAHZzwACAOgeH/QFqwAB2c2ADwADNPsABgmAAAWABwAD/aAACXQHAAP6/AWADwAD+G2ABwADlAQEEwADlO4JywACAJcAAgDgGwAB72QBgA8AA/hsBasAAgDdgA8AA/hsVAAUGwADlPYJzwAD/CsAA/xLAAP9JBAUAA2rAAP8SYAPAAM0+wAGCYGrAAP8SYAPAAPwcwAGnaWrAAP8SYAPAAM1MwAGnhQAAAQPAAP8bwAD/SQAAAAEBAcAA/yAAAABhYAPAAP4bAABgA8AA5TkABsAA5T6Cc8AA/1fAAP9fwAD/5AQBwAB40wFqwAD/X2ADwADNPsABgmAAAAEDwAD/ccAA/+QAAAABAQHAAP98AAAAiHldA8AA/r8BYAPAAP4bAABgA8AA5TkBPgFKwAD/jAE1wAD/lwAAAQBgA8AA5TkBHsAA/5fAAOU9AQABFsAA/6qAwAD/ocB1DjxhwAD+7wA1AAAAAQBbARzAAP+6gcAA/7jAdQ5kg2QDAAOTFsAA/8+AwAD/xsB1DjxhwAD+74DAAP/XwHUOPADAAP7kgQDAdQ5kBsAA5T+CcsAAeuPAAHrrwAB7cgQBwABKsAAAAAEDwAB6+cAAe3IAAAADAQPAAHsFAAAAgo9gA8AA5OQAwAB7GAAAAKocYAPAAP4bAWrAAHsoYAPAAP4bCcAAey8AAABhYAPAAP4bAWoAYAPAAP8leQBgA8AA5TkBPgFKwAB7PgEcwAB7TIDAAHtFwHUPApiCAgACgcAAe1jAdQ8SgsAAe2fAdQ8uAMAA5OgGwADlQYJywAB8nsAAfLHAAHzDAwJkAAAAAQPAAHyywAB8wwAAAAEBAcAAfL0AACCD210DwAD+vwFgA8AA/hsAAF0DwAD+vwFgA8AA/hsABsAA5UKCcsAAf+jAAH/ywACADwACgVgAAAABA8AAf/nAAIAPAAAAAgECwAB//gAAAGpgA8AA/hsAwACACgAAAIKQYAPAAP4bAWoAYAPAAP8leQBgA8AA5TkAAAB1DZQAdQ4BAHUO1gB1D4AAdQ/PAHUQKQAAAAUCwADlQ4JywACBssAAgcHAAIqtB8AAe9wBasAAgcFgA8AAzT7AAYJgAAFgAcAA/2gAAl0BwAD+vwFgA8AA/htgAcAA5QEBBMAA5UWCcsAAipjAAIqrBsAAe9kAYAPAAP4bAWrAAIqqYAPAAP4bFQAEBsAA5UeCc8ABA8nAAQPRwAEEFgQFAANqwAED0WADwADNPsABgmBqwAED0WADwAD8HMABp5tqwAED0WADwADNTMABp7cAAAEDwAED4cABBBYAAAABAQHAAQPmAAAAYWADwAD+GwAAYAPAAOVDAAbAAOVIgnPAAQQkwAEELMABBL8EAcAAeNMBasABBCxgA8AAzT7AAYJgAAABA8ABBEXAAQS/AAAAAQEBwAEEUAAAAIh5XQPAAP6/AWADwAD+GwAAYAPAAOVDAT4BSsABBGABNcABBGsAAAEAYAPAAOVDAR7AAQRrwADlRwEAARbAAQSFgMABBHzAdRFeYcAA/u8ANQAAAAEAWwEcwAEElYHAAQSTwHURhoNkAwADkxbAAQSqgMABBKHAdRFeYcAA/u+AwAEEssB1EV4AwAD+5IEAwHURhgbAAOVJgnLAAIZ9wACGhcAAhxoEAcAASrAAAAABA8AAhprAAIcaAAAAAwEDwACGpgAAAIKPYAPAAOTkAMAAhrkAAACqHGADwAD+GwFqwACGyWADwAD+GwnAAIbQAAAAYWADwAD+GwFqAGADwAD/JXkAYAPAAOVDAT4BSsAAht8BHMAAhu2AwACG5sB1EiTAAHp3AgACgcAAhwDAdRI0gsAAhw/AdRJQAMAA5OoGwADlS4JywACKVMAAimXAAIqCAAKBWAAAAAEDwACKbMAAioIAAAACAQLAAIpxAAAAamADwAD+GwDAAIp9AAAAgpBgA8AA/hsBagBgA8AA/yV5AGADwADlQwAAAHUQtgB1ESMAdRH4AHUSpAB1Ev4AAAAEAsAA5UyCcsAAjEbAAIxVwACVLwfAAHveAWrAAIxVYAPAAM0+wAGCYAABYAHAAP9oAAJdAcAA/r8BYAPAAP4bYAHAAOUBAQTAAOVOgnLAAJUawACVLQbAAHvZAGADwAD+GwFqwACVLGADwAD+GyEABAbAAOVQgnPAAQjHwAEIz8ABCQYEBQADasABCM9gA8AAzT7AAYJgasABCM9gA8AA/BzAAafNasABCM9gA8AAzUzAAafpAAABA8ABCNjAAQkGAAAAAQEBwAEI3QAAAGFgA8AA/hsAAGADwADlTAAGwADlUYJzwAEJFMABCRzAAQmhBAHAAHjTAWrAAQkcYAPAAM0+wAGCYAAAAQPAAQkuwAEJoQAAAAEBAcABCTkAAACIeV0DwAD+vwFgA8AA/hsAAGADwADlTAE+AUrAAQlJATXAAQlUAAABAGADwADlTAEewAEJVMAA5VABAAEWwAEJZ4DAAQlewHUUL2HAAP7vADUAAAABAFsBHMABCXeBwAEJdcB1FFeDZAMAA5MWwAEJjIDAAQmDwHUUL2HAAP7vgMABCZTAdRQvAMAA/uSBAMB1FFcGwADlUoJywACRKMAAkTDAAJG3BAHAAEqwAAAAAQPAAJE+wACRtwAAAAMBA8AAkUoAAACCj2ADwADk5ADAAJFdAAAAqhxgA8AA/hsBasAAkW1gA8AA/hsJwACRdAAAAGFgA8AA/hsBagBgA8AA/yV5AGADwADlTAE+AUrAAJGDARzAAJGRgMAAkYrAdRT1wAB6eAIAAoHAAJGdwHUVBYLAAJGswHUVIQDAAOTsBsAA5VSCcsAAlN3AAJTnwACVBAACgVgAAAABA8AAlO7AAJUEAAAAAgECwACU8wAAAGpgA8AA/hsAwACU/wAAAIKQYAPAAP4bAWoAYAPAAP8leQBgA8AA5UwAAAB1E4cAdRP0AHUUyQB1FXUAdRXPAAAABALAAOVVgnLAAJa2wACWxcAAn78Hn6kBasAAlsVgA8AAzT7AAYJgAAFgAcAA/2gAAl0BwAD+vwFgA8AA/htgAcAA5QEBBMAA5VeCcsAAn6rAAJ+9BsAAe9kAYAPAAP4bAWrAAJ+8YAPAAP4bIQAEBsAA5VmCc8ABEAbAARAOwAEQRwQFAANqwAEQDmADwADNPsABgmBqwAEQDmADwAD8HMABp/9qwAEQDmADwADNTMABqBsAAAEDwAEQGMABEEcAAAABAQHAARAdAAAAYWADwAD+GwAAYAPAAOVVAAbAAOVagnPAARBVwAEQXcABEOQEAcAAeNMBasABEF1gA8AAzT7AAYJgAAABA8ABEHDAARDkAAAAAQEBwAEQewAAAIh5XQPAAP6/AWADwAD+GwAAYAPAAOVVAT4BSsABEIsBNcABEJYAAAEAYAPAAOVVAR7AARCWwADlWQEAARbAARCqgMABEKHAdRb+YcAA/u8ANQAAAAEAWwEcwAEQuoHAARC4wHUXJoNkAwADkxbAARDPgMABEMbAdRb+YcAA/u+AwAEQ18B1Fv4AwAD+5IEAwHUXJgbAAOVbgnLAAJuzwACbu8AAnEQEAcAASrAAAAABA8AAm8rAAJxEAAAAAwEDwACb1gAAAIKPYAPAAOTkAMAAm+kAAACqHGADwAD+GwFqwACb+WADwAD+GwnAAJwAAAAAYWADwAD+GwFqAGADwAD/JXkAYAPAAOVVAT4BSsAAnA8BHMAAnB2AwACcFsB1F8TAAHp5AgACgcAAnCrAdRfUgsAAnDnAdRfwAMAA5OsGwADlXYJywACfbMAAn3fAAJ+UAAKBWAAAAAEDwACffsAAn5QAAAACAQLAAJ+DAAAAamADwAD+GwDAAJ+PAAAAgpBgA8AA/hsBagBgA8AA/yV5AGADwADlVQAAAHUWVgB1FsMAdReYAHUYRAB1GJ4AAAAEAsAA5V6CcsAAoWHAAKFwwACqSgfAAHbLAWrAAKFwYAPAAM0+wAGCYAABYAHAAP9oAAJdAcAA/r8BYAPAAP4bYAHAAOUBAQTAAOVggnLAAKo1wACqSAbAAHvZAGADwAD+GwFqwACqR2ADwAD+G4FXAAQGwADlYoJzwAEXYMABF2jAARefBAUAA2rAARdoYAPAAM0+wAGCYGrAARdoYAPAAPwcwAGoMWrAARdoYAPAAM1MwAGoTQAAAQPAARdxwAEXnwAAAAEBAcABF3YAAABhYAPAAP4bAABgA8AA5V4ABsAA5WOCc8ABF63AARe1wAEYOgQBwAB40wFqwAEXtWADwADNPsABgmAAAAEDwAEXx8ABGDoAAAABAQHAARfSAAAAiHldA8AA/r8BYAPAAP4bAABgA8AA5V4BPgFKwAEX4gE1wAEX7QAAAQBgA8AA5V4BHsABF+3AAOViAQABFsABGACAwAEX98B1GdBhwAD+7wA1AAAAAQBbARzAARgQgcABGA7AdRn4g2QDAAOTFsABGCWAwAEYHMB1GdBhwAD+74DAARgtwHUZ0ADAAP7kgQDAdRn4BsAA5WSCcsAApkPAAKZLwACm0gQBwABKsAAAAAEDwACmWcAAptIAAAADAQPAAKZlAAAAgo9gA8AA5OQAwACmeAAAAKocYAPAAP4bAWrAAKaIYAPAAP4bCcAApo8AAABhYAPAAP4bAWoAYAPAAP8leQBgA8AA5V4BPgFKwACmngEcwACmrIDAAKalwHUalsAAenoCAAKBwACmuMB1GqaCwACmx8B1GsIAwADk7gbAAOVmgnLAAKn4wACqAsAAqh8AAoFYAAAAAQPAAKoJwACqHwAAAAIBAsAAqg4AAABqYAPAAP4bAMAAqhoAAACCkGADwAD+GwFqAGADwAD/JXkAYAPAAOVeAAAAdRkoAHUZlQB1GmoAdRsWAHUbcAAAAAQCwADlZ4JywACr1sAAq+XAALTfB5+qAWrAAKvlYAPAAM0+wAGCYAABYAHAAP9oAAJdAcAA/r8BYAPAAP4bYAHAAOUBAQTAAOVpgnLAALTKwAC03QbAAHvZAGADwAD+GwFqwAC03GADwAD+G4FXAAQGwADla4JzwAEcxcABHM3AAR0GBAUAA2rAARzNYAPAAM0+wAGCYGrAARzNYAPAAPwcwAGoY2rAARzNYAPAAM1MwAGofwAAAQPAARzXwAEdBgAAAAEBAcABHNwAAABhYAPAAP4bAABgA8AA5WcABsAA5WyCc8ABHRTAAR0cwAEdowQBwAB40wFqwAEdHGADwADNPsABgmAAAAEDwAEdL8ABHaMAAAABAQHAAR06AAAAiHldA8AA/r8BYAPAAP4bAABgA8AA5WcBPgFKwAEdSgE1wAEdVQAAAQBgA8AA5WcBHsABHVXAAOVrAQABFsABHWmAwAEdYMB1HKBhwAD+7wA1AAAAAQBbARzAAR15gcABHXfAdRzIg2QDAAOTFsABHY6AwAEdhcB1HKBhwAD+74DAAR2WwHUcoADAAP7kgQDAdRzIBsAA5W2CcsAAsNPAALDbwACxZAQBwABKsAAAAAEDwACw6sAAsWQAAAADAQPAALD2AAAAgo9gA8AA5OQAwACxCQAAAKocYAPAAP4bAWrAALEZYAPAAP4bCcAAsSAAAABhYAPAAP4bAWoAYAPAAP8leQBgA8AA5WcBPgFKwACxLwEcwACxPYDAALE2wHUdZsAAensCAAKBwACxSsB1HXaCwACxWcB1HZIAwADk7QbAAOVvgnLAALSMwAC0l8AAtLQAAoFYAAAAAQPAALSewAC0tAAAAAIBAsAAtKMAAABqYAPAAP4bAMAAtK8AAACCkGADwAD+GwFqAGADwAD/JXkAYAPAAOVnAAAAdRv4AHUcZQB1HToAdR3mAHUeQAAAAAQCwADlcIJywAC2lMAAtqPAAL99B8AAe+MBasAAtqNgA8AAzT7AAYJgAAFgAcAA/2gAAl0BwAD+vwFgA8AA/htgAcAA5QEBBMAA5XKCcsAAv2jAAL97BsAAe9kAYAPAAP4bAWrAAL96YAPAAP4bg10ABAbAAOV0gnPAASJAwAEiSMABIn8EBQADasABIkhgA8AAzT7AAYJgasABIkhgA8AA/BzAAaiVasABIkhgA8AAzUzAAaixAAABA8ABIlHAASJ/AAAAAQEBwAEiVgAAAGFgA8AA/hsAAGADwADlcAAGwADldYJzwAEijcABIpXAASMaBAHAAHjTAWrAASKVYAPAAM0+wAGCYAAAAQPAASKnwAEjGgAAAAEBAcABIrIAAACIeV0DwAD+vwFgA8AA/hsAAGADwADlcAE+AUrAASLCATXAASLNAAABAGADwADlcAEewAEizcAA5XQBAAEWwAEi4IDAASLXwHUfcmHAAP7vADUAAAABAFsBHMABIvCBwAEi7sB1H5qDZAMAA5MWwAEjBYDAASL8wHUfcmHAAP7vgMABIw3AdR9yAMAA/uSBAMB1H5oGwADldoJywAC7dsAAu37AALwFBAHAAEqwAAAAAQPAALuMwAC8BQAAAAMBA8AAu5gAAACCj2ADwADk5ADAALurAAAAqhxgA8AA/hsBasAAu7tgA8AA/hsJwAC7wgAAAGFgA8AA/hsBagBgA8AA/yV5AGADwADlcAE+AUrAALvRARzAALvfgMAAu9jAdSA4wAB6fAIAAoHAALvrwHUgSILAALv6wHUgZADAAOTwBsAA5XiCcsAAvyvAAL81wAC/UgACgVgAAAABA8AAvzzAAL9SAAAAAgECwAC/QQAAAGpgA8AA/hsAwAC/TQAAAIKQYAPAAP4bAWoAYAPAAP8leQBgA8AA5XAAAAB1HsoAdR83AHUgDAB1ILgAdSESAAAABALAAOV5gnLAAMETwADBIsAAyh0HwAB75QFqwADBImADwADNPsABgmAAAWABwAD/aAACXQHAAP6/AWADwAD+G2ABwADlAQEEwADle4JywADKCMAAyhsGwAB72QBgA8AA/hsBasAAyhpgA8AA/huDXQAEBsAA5X2Cc8ABJ5/AASenwAEn4AQFAANqwAEnp2ADwADNPsABgmBqwAEnp2ADwAD8HMABqMdqwAEnp2ADwADNTMABqOMAAAEDwAEnscABJ+AAAAABAQHAASe2AAAAYWADwAD+GwAAYAPAAOV5AAbAAOV+gnPAASfuwAEn9sABKH0EAcAAeNMBasABJ/ZgA8AAzT7AAYJgAAABA8ABKAnAASh9AAAAAQEBwAEoFAAAAIh5XQPAAP6/AWADwAD+GwAAYAPAAOV5AT4BSsABKCQBNcABKC8AAAEAYAPAAOV5AR7AASgvwADlfQEAARbAAShDgMABKDrAdSJEYcAA/u8ANQAAAAEAWwEcwAEoU4HAAShRwHUibINkAwADkxbAAShogMABKF/AdSJEYcAA/u+AwAEocMB1IkQAwAD+5IEAwHUibAbAAOV/gnLAAMYRwADGGcAAxqIEAcAASrAAAAABA8AAxijAAMaiAAAAAwEDwADGNAAAAIKPYAPAAOTkAMAAxkcAAACqHGADwAD+GwFqwADGV2ADwAD+GwnAAMZeAAAAYWADwAD+GwFqAGADwAD/JXkAYAPAAOV5AT4BSsAAxm0BHMAAxnuAwADGdMB1IwrAAHp9AgACgcAAxojAdSMagsAAxpfAdSM2AMAA5O8GwADlgYJywADJysAAydXAAMnyAAKBWAAAAAEDwADJ3MAAyfIAAAACAQLAAMnhAAAAamADwAD+GwDAAMntAAAAgpBgA8AA/hsBagBgA8AA/yV5AGADwADleQAAAHUhnAB1IgkAdSLeAHUjigB1I+QAAAAEAsAA5YKCcsAAy87AAMvdwADU1gfAAHvnAWrAAMvdYAPAAM0+wAGCYAABYAHAAP9oAAJdAcAA/r8BYAPAAPzNYAHAAOUGAQTAAOWEgnLAANTBwADU1AbAAHvZAGADwAD+GwFqwADU02ADwAD+G4FXAAQGwADlhoJzwAEtE8ABLRvAAS1WBAUAA2rAAS0bYAPAAM0+wAGCYGrAAS0bYAPAAPwcwAGo+WrAAS0bYAPAAM1MwAGpFQAAAQPAAS0mwAEtVgAAAAEBAcABLSsAAABhYAPAAP4bAABgA8AA5YIABsAA5YeCc8ABLWTAAS1swAEt+AQBwAB40wFqwAEtbGADwADNPsABgmAAAAEDwAEtgMABLfgAAAABAQHAAS2OAAAAiHldA8AA/r8BYAPAAPzNAABgA8AA5YIBPgFKwAEtngE1wAEtqQAAAQBgA8AA5YIBHsABLanAAOWGAQABFsABLb6AwAEttcB1JRZhwAD+7wA1AAAAAQBbARzAAS3OgcABLczAdSU+g2QDAAOTFsABLeOAwAEt2sB1JRZhwAD+74DAAS3rwHUlFgDAAP7kgQDAdSU+BsAA5YiCcsAA0MTAANDMwADRVwQBwABKsAAAAAEDwADQ3MAA0VcAAAADAQPAANDoAAAAgo9gA8AA5OQAwADQ+wAAAKocYAPAAP4bAWrAANELYAPAAP4bCcAA0RIAAABhYAPAAP4bAWoAYAPAAP8leQBgA8AA5YIBPgFKwADRIQEcwADRL4DAANEowHUl3MAAen4CAAKBwADRPcB1JeyCwADRTMB1JggAwADk8gbAAOWKgnLAANSCwADUjsAA1KsAAoFYAAAAAQPAANSVwADUqwAAAAIBAsAA1JoAAABqYAPAAP4bAMAA1KYAAACCkGADwAD+GwFqAGADwAD/JXkAYAPAAOWCAAAAdSRuAHUk2wB1JbAAdSZcAHUmtgAAAAQCwADli4JywADV5cAA1fTAAN50B8AAe+kBasAA1fRgA8AAzT7AAYJgAAFgAcAA/2gAAl0BwAD+vwFgA8AA/M1gAcAA5QYBBMAA5Y2CcsAA3l/AAN5yBsAAe9kAYAPAAP4bAWrAAN5xYAPAAP4bg10ABAbAAOWPgnPAATLmwAEy7sABMykEBQADasABMu5gA8AAzT7AAYJgasABMu5gA8AA/BzAAakrasABMu5gA8AAzUzAAalHAAABA8ABMvnAATMpAAAAAQEBwAEy/gAAAGFgA8AA/hsAAGADwADliwAGwADlkIJzwAEzN8ABMz/AATPLBAHAAHjTAWrAATM/YAPAAM0+wAGCYAAAAQPAATNTwAEzywAAAAEBAcABM2EAAACIeV0DwAD+vwFgA8AA/M0AAGADwADliwE+AUrAATNxATXAATN8AAABAGADwADliwEewAEzfMAA5Y8BAAEWwAEzkYDAATOIwHUn6GHAAP7vADUAAAABAFsBHMABM6GBwAEzn8B1KBCDZAMAA5MWwAEztoDAATOtwHUn6GHAAP7vgMABM77AdSfoAMAA/uSBAMB1KBAGwADlkYJywADaYsAA2mrAANr1BAHAAEqwAAAAAQPAANp6wADa9QAAAAMBA8AA2oYAAACCj2ADwADk5ADAANqZAAAAqhxgA8AA/hsBasAA2qlgA8AA/hsJwADasAAAAGFgA8AA/hsBagBgA8AA/yV5AGADwADliwE+AUrAANq/ARzAANrNgMAA2sbAdSiuwAB6fwIAAoHAANrbwHUovoLAANrqwHUo2gDAAOTzBsAA5ZOCcsAA3iDAAN4swADeSQACgVgAAAABA8AA3jPAAN5JAAAAAgECwADeOAAAAGpgA8AA/hsAwADeRAAAAIKQYAPAAP4bAWoAYAPAAP8leQBgA8AA5YsAAAB1J0AAdSetAHUoggB1KS4AdSmIAAAABALAAOWUgnLAAN9awADfacAA6RYHwAB76wFqwADfaWADwADNPsABgmAAAWABwAD/aAACXQHAAP6/AWADwADlsmABwADk+QEEwADlloJywADpAMAA6RQGwAB72QBgA8AA/hsBasAA6RJgA8AA/huDcAAFBsAA5ZiCc8ABOL3AATjFwAE5BAQFAANqwAE4xWADwADNPsABgmBqwAE4xWADwAD8HMABqV1qwAE4xWADwADNTMABqXkAAAEDwAE40sABOQQAAAABAQHAATjXAAAAYWADwAD+GwAAYAPAAOWUAAbAAOWZgnPAATkSwAE5GsABOa0EAcAAeNMBasABORpgA8AAzT7AAYJgAAABA8ABOTDAATmtAAAAAQEBwAE5QQAAAIh5XQPAAP6/AWADwADlsgAAYAPAAOWUAT4BSsABOVEBNcABOVwAAAEAYAPAAOWUAR7AATlcwADlmAEAARbAATlzgMABOWrAdSq6YcAA/u8ANQAAAAEAWwEcwAE5g4HAATmBwHUq4oNkAwADkxbAATmYgMABOY/AdSq6YcAA/u+AwAE5oMB1KroAwAD+5IEA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wACcewTAAObqgnLAATFKwAExVQbAAHwAAGADwAD+GwFqwAExUWADwAD+G8ABqfAEwADm64JywAExasABMXUGwAB8AQBgA8AA/hsBasABMXFgA8AA/hvAAan0BMAA5uyCcsABMYrAATGUBsAAfAIAYAPAAP4bAWrAATGRYAPAAP4bgVcEwADm7YJywAExqcABMbQGwAB8AwBgA8AA/hsBasABMbBgA8AA/humkwTAAObugnLAATHJwAEx1AbAAHwEAGADwAD+GwFqwAEx0GADwAD+G8AAvrYEwADm74JywAEx6cABMfQGwAB8BQBgA8AA/hsBasABMfBgA8AA/hvAAan4BMAA5vCCcsABMgnAATIUBsAAfAYAYAPAAP4bAWrAATIQYAPAAP4bwABy2ATAAObxgnLAATIpwAEyNAbAAHwHAGADwAD+GwFqwAEyMGADwAD+G5NKBMAA5vKCcsABMknAATJUBsAAfAgAYAPAAP4bAWrAATJQYAPAAP4bwAC0oQTAAObzgnLAATJpwAEydAbAAHwJAGADwAD+GwFqwAEycGADwAD+G8ABqfwEwADm9IJywAEyicABMpQGwAB8CgBgA8AA/hsBasABMpBgA8AA/huxUATAAOb1gnLAATKpwAEytAbAAHwLAGADwAD+GwFqwAEysGADwAD+G8AAnFcEwADm9oJywAEyycABMtQGwAB8DABgA8AA/hsBasABMtBgA8AA/hvAALxOBMAA5veCcsABMunAATL0BsAAfA0AYAPAAP4bAWrAATLwYAPAAP4bwAGqAATAAOb4gnLAATMJwAEzFAbAAHwOAGADwAD+GwFqwAEzEGADwAD+G45uBMAA5vmCcsABMynAATM0BsAAfA8AYAPAAP4bAWrAATMwYAPAAP4bwACchwTAAOb6gnLAATNJwAEzVAbAAHwQAGADwAD+GwFqwAEzUGADwAD+G8ABqgQEwADm+4JywAEzacABM3QGwAB8EQBgA8AA/hsBasABM3BgA8AA/hvAAaoIBMAA5vyCcsABM4nAATOTBsAAfBIAYAPAAP4bAWrAATOQYAPAAP4bg10EwADm/YJywAEzqMABM7MGwAB8EwBgA8AA/hsBasABM69gA8AA/hupBgTAAOb+gnLAATPIwAEz0wbAAHwUAGADwAD+GwFqwAEzz2ADwAD+G8AAnS4EwADm/4Jy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AAErAMAA0ew9jKISwHba9ytCAAA/TaI2AjUAAAAAAFsBHqI2wAC5+QQABByiYxqiU8AA6uQgAQABgqJkwHbarwAAhgDAdtsVhwDAdtseFADAdttFCwAAK06iMKI0AACArGADwAEAgwEUAMB221gMAD0coniBonXAdtqfofMBAAEUon3AdtwVDwAAwADR7EKiiwEBoqdqoqdgA8AA/huBVwA+BUmixxyi9Bqi4sAA6uNIAQABKwDAAP91PgM9HKMMgaMJwHban6HzAQABKwDAANHsPYyjIsB22vcrQgAAP02jRgI1AAAAAABbAR6jRsAAufkEAAQco3Qao2PAAOrjIAAAAAAAhgDAdtsVhwDAdtseFADAdttFCwAAK06jQKNEAACArGADwAEAgwEUAMB221gMAD0co4OBo4DAdtqfofMBAAEUo4jAdtzYDwAAwADR7EKjlgE9HgDAALn8AgACgwDAdtrRhADAdtr3AEqjpQADAQBbAQAAAACB1FsAAQAAAACB1VsAPgE9HACDAMB22tGB3QIAAhQAwHbdMQ8AFADAdt06EAAAwAC7DD2NAMB22wweAMAAuf0BAAEUAMB220ULAAA9jgDAdtsVHgDAALn3AQABFADAdttFCwAAPY8AwHbbHh4AwAC5+AEAARQAwHbbRQsAAD0coTuDAMB22tFqAQABFADAdttFCwAAAEoAARYAgwDAdtrRgd7AALsIBsAA6vuCeKOqo7en2AAAwAB+x8AA6okAAAABA6PLp9gAAgACAgKjzAAAACJbAKPeAAAAwAB2O2ADwADR6gAAXQPAALrjAWADwAD/JQE+D04AAAABgcpdA8AAuikBYAPAAP8lAR+j78AAujYAAWADwAD/JQAATgAAAACBy10DwAC63wFgA8AA/yUATgAAAACBzFsATgAAAACBzVsATgAAAACBzlsATgAAAACBz1sBk04AAAAAgdBbAE4AAAAAgdFbAE4AAAAAiFxbAE+jtwAAAACB0lsAA6PLp9gEAAADAAMAAAAAgdNbAAAAAACB1FsAAAAAAIHVWwAAWwFLPgNBPgVOpEkAAACDV2ADwADrwgBLPgJOpHKkdgABwAB9lmADwADriQEepHzAAOuYAgACKyakpgEcpKZqpKFgA8AAyeKJAYcsAQABHKSyaqStYAPAAMtngYmHLAEAASakwQCApLnAdt4B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JQAAkqlbARzAAEQ1FsAARC+AwABEJ8B3AZiD9MAA65FLAQABJ5KpAMAA/wVJwABERBzAAEROFMAAREjAdwJhDABIAQABKwDAAP91PgI9isAARF/AdwHhHsAARGbAAOrKAgACgMAARH7AdwGYJ5KpAEIAAD9JwABEmyElwABEpRTAAESfwHcCYQwAYAPAAQACPgI9isAARLnAdwHhHsAARMDAAOrLAgACgMAARNjAdwGYJ5KpAEIAAD9OwABE+cAARP0AAICsWwEcwABFDRbAAEUHgMAARP/AdwGYg/TAAOuRSwEAASeArADAAP8FScAARRocwABFIhTAAEUewHcDIg0ASAEAASsAwAD/dT4CPYrAAEUzwHcB4R7AAEU6wADqygIAAoDAAEVSwHcBmCeArABCAAA/ScAARW0hJcAARXUUwABFccB3AyINAGADwAEAAj4CPYrAAEWJwHcB4R7AAEWQwADqywIAAoDAAEWowHcBmCeArABCAAA/TsAARcfAAEXMAACB/VsBHMAARdwWwABF1oDAAEXOwHcBmIP0wADrkUsBAAEngf0AwAD/BU7AAEXuwABF+wAAwAB+4F0DwAD+vwFgA8ABAAIBHsAARgHAAPm5AQFgA8ABAAIBkwBJwABGFSEcwABGHhTAAEYZwHcD4w4ASAEAASsAwAD/dT4CScAARi8hJcAARjgUwABGM8B3A+MOAF0DwAD+vwFbPgI9isAARkzAdwHhHsAARlPAAOrLAgACgMAARmvAdwGYJ4H9AEIAAD9GwABGi8AARqHAAEaUAAAAhY5bACbAAEabARTAAEabwHcD4w4AXQPAAP59AVs+AknAAEarISXAAEazFMAARq/AdwS5EABgA8ABAAI+Aj2KwABGy8B3AeEewABG0sAA6ssCAAKAwABG6sB3AZgngf0AQgAAPz0cwABHGxTAAEcOwHcEFw8AVgEAASbAAEcfARTAAEcfwHcEuRAAYAPAAQACAMAA/tA/TsAARzvAAEc/AACDWVsBHMAAR08WwABHSYDAAEdBwHcBmIP0wADrkUsBAAEnIgDAAP8FPRzAAEfgHMAAR5UewABHacAA0dgDAAMewABHdsABALEBAAEmwABHfAEUwABHfMB3AyINAGADwAEAAgAUwABHgsB3BBcPABTAAEeQwHcFVxAAAIGvAQFbATTAAEeaA8AAR5rA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TBaIRS6D9MAA65GApQEAASaIVgEciFaBiFPAd28dSwEAASeD9ADAAP8FXQPAAP7xAltbAMAA/w0/BQgAwADrjYCHtcB3bw8IAMAA645qh9hgA8AA63zAAawaCADAAOuQJof1ARyH+oGH98B3bx1LAQABJ5acAMAA/wVgA8ABAAIIAMAA648rCQGHa8AA/34AAAAABcAA66qCf4iqiKqJcwDAAH9SwADqiQADiMSJcwAAAAICAojMAAAAg1RgA8AA6xwAiNgAAACAq10DwAD+8QJbWwAAYAPAAOuJAT4BPRyJWhaJUy6BdsAA65KApQEAASaJZAEciWSBiWHAd3AnSwEAASeBdgDAAP8FXQPAAP7xAltbAMAA/w0FCADAAOuNgIjuwHdwGQgAwADrjmqJEWADwADrfMABrDMIAMAA648ciS+BiSzAd3AnSwEAASe0tADAAP8FCADAAOuQKwkBiKrAAP9+AAAAAAXAAOurgn+JsomyingAwAB/U8AA6okAA4nLingAAAACAgKJ0wAAAINUYAPAAOscAInfAAAAgKtdA8AA/vECW1sAAGADwADriQE+AT0cimAWilougcfAAOuTgKUBAAEmimoBHIpqgYpnwHdw/UsBAAEngccAwAD/BV0DwAD+8QJbWwDAAP8NBQgAwADrjYCJ9cB3cO8IAMAA645qihhgA8AA63zAAawzCADAAOuPHIo2gYozwHdw/UsBAAEntLQAwAD/BQgAwADrkCsJAYmywAD/fgAAAAAFwADrrIJ/iz2LPYvFAMAAf1QAA4tOi8UAAAABAQGLVgAAAJacYAPAAQACAABgA8AA64kBPwUIAMAA640rCADAAOuQgIuGwHdxwQgAwADrjmqLqWADwADrfMABrAEIAMAA648nAAkBiz3AAP9+AAAAAAXAAOutgn+LyovKjH4Al0gAA4vZjH4AAAACAgKL3wAABINUYAPAAOscAIvrAAAAgKxgA8ABAIMAAGADwADriQE+AT0cjF8WjFgug/TAAOuRgKUBAAEWjGqBjGbAd3I+wAB92cABAJIAwAD/DQUIAcAA642AAMB3cjAIAMAA645qjAtgA8AA63zAAawBCADAAOuPJwAIAMAA65AejDrAAOubAQABgYxNwHdyPgAJAYvKwAD/fgAAAAAFwADrroJ/jIOMg41/AMAAf1UAA4yVjX8AAAAD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ALuXAWADwAD2gQABYAHAAPacBQTAAO41govAAKdTwACnWgnAAIF2wADsPwBgA8AA7YUABMAA7jaCi8AAp3/AAKeKGMAAcMLAAOw/AF0DwAC8HwFgA8AA9oEBKwTAAO43govAAKeTwACnrBjAAIF/wADsPwBgA8AA/FUBKQTAAO44govAAKe1wACnzxjAAIGAwADsPwBgA8AA/FUBKQTAAO45govAAKgQwACoLRjAAIGBwADsPwBgA8AA/FUBKgEFwADuXIKLwACq48AAquPAAK55AAAAA8AAqu3AAK55AAAAAQEBwACq8wAABMAAgXZgA8AA7YUAAGADwADuMgE+A07AAKsGwACrCwAApNZgA8AAvyABGsAAqxLAAL8mPRfAAKsfLsAAcMLAAOw/HsAAqzHAALwrBQFgA8AA9oEABZoLKcAAcI4WwACraS7AAIF7wADsP8AA7krAAHCQFsAAq5cuwACBe8AA7D/AAO5KwABwthbAAKvELsAAgXzAAOw/wADuScAAcI8WwACr6y7AAIF8wADsP8AA7knAAO42PRzAAKwNFsAArAUuwACBdsAA7D/AAO41wACBBgUAAAWe3DTAAKwoA8AArCjAAKxSAAAAAAAAAFwBSsAArC4BHMAArDoWwACsLi7AAHDCwADsP8AA7jZWAQABasAArE1gA8AA9oHAAbGBAMAAvDOCjjTAAKxjA8AArGPAAK04AAAAAAAAAGADwAD/JQE+Aj0XwACs4i7AAIGCKsAA7lg9HMAArRQWwACtCC7AAHDCwADsP8AA7jZWAQABasAArSdgA8AA9oHAAbTIAMAAvDPAAEgjNMAArUoDwACtSsAArXoAAAAAAAAAXAFKwACtUAEcwACtXBbAAK1QLsAAcMLAAOw/wADuNlYBAAFqwACtb2ADwAD2gcABtNQAwAC8M8AAgT80wACtjwPAAK2PwACt7gAAAAAAAABgA8AA/yUBPgI9HMAAraoWwACtni7AAHDCwADsP8AA7jZWAQABasAArb1gA8AA9oHAAbTgAMAAvDM9HMAArdwWwACt0C7AAHDCwADsP8AA7jaCjAAAAADAALw1gcccwACuBIHAAK3/wHipScAAcj0BAltbATTAAK4eA8AArh7AAK5zAAAAAgICwACuHwAAAINTWwDAAK4iAAAApFNbAABgA8AA/yUBPgI9HMAArj4W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govAANLFwADSysAA05YAAMAAgIgAAAABA8AA0tHAANOWAAAAAAAAAFwBPgVJwADTFhzAANMfFsAA0xouiBbAAOw/wADugEgBAAErAMAA/3VKwADTKAA/PRzAANM+FsAA0zQuwACBlsAA7D/AAO6EpMwAAAAAwADuej0cwADTSi7AAIGawADsPwAAAADAAO6nPRfAANNhLsAAgZXAAOw/KcAA7oM9HMAA04sWwADTfy7AAHDCwADsP8AA7oKCjAAAAADAALw1BsAA7qGCi8AA05vAANOgwADUIQAAwACBSwAAAAEDwADTqcAA1CEAAAACAgLAANO3AAAAgytgA8AA9ksAwADTxAAAAMAAgYpgA8AA/FUAAGADwAD8VQE+AknAANPTHMAA09wWwADT1y6IFsAA7D/AAO6ASAEAASsAwAD/dUrAANPlASo/SsAA0/cBHMAA1AMWwADT/i6IFsAA7D/AAO6AwACBSwIAAoDAANQNwHjW7oHAANQVwHjW/gDAAPaoBsAA7qKCi8AA1CbAANQwwADUogAAwACBTQAAAAEDwADUPMAA1KIAAAABAQHAANRNAAAAgytgA8AA9mkAAGADwADlOQE+AknAANRbHMAA1GQWwADUXy6IFsAA7D/AAO6ASAEAASsAwAD/dUrAANRtASs/SsAA1H4BHMAA1IoWwADUhS6IFsAA7D/AAO6AwACBTQEAAYDAANSXwHjXqwDAAPapBsAA7qOCi8AA1KfAANSswADU9QAAwACBUAAAAAEDwADUuMAA1PUAAAABAQHAANTJAAAAgytgA8AA9mkAAFwBPgE9NQAAAAEAYAPAAPacARbAANTXLogWwADsP8AA7oAjHMAA1N2BAMB42GRIAQABKwAAKxzAANTdgQDAeNhkwACBUAEAAYDAANTqwHjYTQDAAPaqAVwGwADukYKLwADU+sAA1QLAANVjAQCWsgAAAAEDwADVB8AA1WMAAAAAAAAAYAPAAP4bAT4DScAA1Q0cwADVFhbAANURLogWwADsP8AA7oBIAQABKwDAAP91PTDAANUfasAA1StgA8AA9uPAAbLEPz9KwADVTwEWwADVWxbAANVWLogWwADsP8AA7oCWssAA9qwGwADukoKLwADVaMAA1XzAANXjAQDAAHaPAAAAAQPAANWEwADV4wAAAAAAAABgA8AA9ggBPgNJwADVihzAANWTFsAA1Y4uiBbAAOw/wADugEgBAAErAMAA/3U9MMAA1ZxqwADVqGADwAD248ABssQ/P0rAANXMARbAANXYFsAA1dMuiBbAAOw/wADugMAAdo/AAPauBsAA7pOCi8AA1ejAANXwwADWXQEAnqkAAAABA8AA1fvAANZdAAAAAAAAAGADwAD+GwE+A0nAANYBHMAA1goWwADWBS6IFsAA7D/AAO6ASAEAASsAwAD/dT0wwADWE2rAANYfYAPAAPbjwAGyxD8/SsAA1kMBFsAA1k8WwADWSi6IFsAA7D/AAO6AnqnAAPatBsAA7pSCi8AA1mLAANZ2wADW6QEAnqgAAAABA8AA1oTAANbpAAAAAAAAAGADwAD2CAE+A0nAANaKHMAA1pMWwADWji6IFsAA7D/AAO6ASAEAASsAwAD/dT0wwADWnGrAANaoYAPAAPbjwAGyxD8/SsAA1swBFsAA1tgWwADW0y6IFsAA7D/AAO6AnqjAAPavBsAA7qWCi8AA1u7AANb1wADX4wAAwACBm8AA7D8AAAABA8AA1v/AANfjAAAAAAAAAF0DwAC64wFbAT4DPRfAANcILsAAgZfAAOw/HsAA1xvAALsFAAFbAADAAO6HPRzAANcyFsAA1ywul5HAAOw/wADuhYKMAAAAAMAA8vtKwADXPwEmwADXPwEcwADXWhbAANdTFsAA10YuwACBl8AA7D/AAO6Hgd4Aga8BAAE0wADXXwPAANdfwADX3gAAAAEBAcAA12AAAACAtVsAAF0DwAD+vwFbAT4EQBzAANeDFsAA13wWwADXci7AAIGWwADsP8AA7oSCj8AA7nJIAQABKwDAAP7pwADXcsAA14oATsAA15fAANebAACgFmADwAD2nAEWwADXnS6IFsAA7D/AAO6APRfAANepLogWwADsPyvAAO6ASsAA17wBMcAA18NbAoHAANfEwHjcCRbAANfJLpyowADsP8AA7oYAAF0DwAC64wFbBsAA7qaCi8AA2JPAANiYwADZYQAAwACBj8AA7D8AAAABA8AA2LTAANlhAAAAAAAAAFwBPgFJwADYvSIcwADYzxbAANjBLpyowADsP8AA7oZIAQABKwDAAP91ACEcwADY3xbAANjaLogWwADsP8AA7oBIAQABKwDAAP91PgE9F8AA2PAunKjAAOw/HMAA2QUWwADZAC6IFsAA7D/AAO6AgfoEAAEWwADZDC7AAHG2wADsP8AA7qoDgawWwADZKC7AAHETwADsP8AA7qyDjhbAANk6LsAAcbfAAOw/wADuq8AAcG0pwAC7p8AA7oY/BsAA7qeCi8AA2WbAANlmwADZxgAAwACBmsAA7D8AAAABA8AA2XXAANnGAAAAAAAAAFsBPgROwADZgsAA2YYAAKA3YAPAAPacARbAANmILogWwADsP8AA7oA9F8AA2ZIuiBbAAOw/K8AA7oA9F8AA2aMuvQHAAOw/KcAA7oE9HMAA2buAwADZt8B43ZGCjAAAAADAAPamBsAA7qiCi8AA2cvAANnQwADbSAAAwACBe8AA7D8AAAABA8AA2erAANtIAAAAAAAAAFwBPgFJwADZ8xbAANoDFsAA2fcuwABwwsAA7D/AAO6CwABwl8AAvCk+Aj0cwADaGC7AAIGPwADsPwAAAADAAO6mScAA2n4hHMAA2ocWwADagi6IFsAA7D/AAO6ASAEAASsAwAD/dT4BPRfAANqfFsAA2pouiBbAAOw/wADugMAAgYkpwAD2nj8+Aj0XwADa1C7AAIGVwADsPynAAO6DScAA2vQhHMAA2v0WwADa+C6IFsAA7D/AAO6ASAEAASsAwAD/dT4BPRzAANsVFsAA2xAuiBbAAOw/wADugMAAce8BAAFqwADbLmADwAD2PsABsuIAwAD2pz8GwADuqYKLwADbTcAA21LAANvAAADAAIF8wADsPwAAAAEDwADbZcAA28AAAAAAAAAAXAE+AUnAANtuIRzAANt3FsAA23IuiBbAAOw/wADugEgBAAErAMAA/3U+AT0XwADbjRbAANuILogWwADsP8AA7oDAAIGJIRbAANuuFsAA26IuwABwwsAA7D/AAO6CwABwlMAAvCjAAPaePwbAAO6qgovAANvFwADbysAA3V4AAMAAcbbAAOw/AAAAAQPAANvRwADdXgAAAAEBAcAA29IAAACcEFsAAFwBPgFBR8AA29+AwADb58B43+QDAcAA3ApqwADcCmADwAD2gcABsYEAPgRJwADcGBzAANwhFsAA3BwuiBbAAOw/wADugEgBAAErAMAA/3VCwADcKgA/TsAA3D3AANxEAACCj2ADwADlOQEcwADcSxbAANxGLogWwADsP8AA7oCe3AAAAADAAPakScAA3FshHMAA3GaBwADc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AEqbwHledoPAAEqiwHlehoTAAEquwHlemIXAAEq4wHleqobAAErCwHleuofAAErOwHle0QAAAAAAeV9PAAAAAALAAPAogpLAAErYwABK3sAAS84DwACCYwAAAWABwADwLAAAAAEFwADwK4KSwABLB8AASwfAAEvMAIC1wADsPwADwABLGcAAS8wAAAAEBATAAEs0AAAAhEBgA8AAySUAwABLPgAAAMAAgDNgA8AA/hsAwABLVAAAALd+XQPAAP6/AWADwAD+GwDAAEtlAAAAoBZgA8AA/FUAAGADwADwKAE/AQkAwABLcsAA8DgCAAKAwABLeMB5X6cewABLmMAA8BoDAAOBwABLr8B5X7eCwABLu8B5X8mDwABLx8B5X+AAAAAAAHlgOgAAAAACwADwLIKSwABL0cAAS9fAAFGWA8AAgmQAAAFgAcAAySUAAAQEwADwL4KSwABMFsAATB0JoC/AAOw/AGADwADwEQAEwADwMIKSwABMOsAATD8Jl5HAAOw/AGADwADJJQAEwADwMYKSwABMSMAATFcYvQHAAOw/AGADwAD8VQEqBMAA8DKCksAATGDAAExtGLOIwADsPwBgA8AA/FUBKQEFwADwOIKSwABMcsAATHLAAEyXAAAAA8AATH3AAEyXAAAAAgICwABMgwAABJeRYAPAAMklAMAATI8AAASgL2ADwADwEQAAYAPAAPAsAT8DCAHAAPAwgADAeWEHCAHAAPAvgQDAeWEXCQHAAExywADJLwAAAAADBsAA8DSCksAATJzAAEyhwABM5AAAVgAAAAEDwABMpMAATOQAAAABAQHAAEyvAAAgEl0DwAD+vwFgA8AA/hsAAFwBPgE9HMAATLsuwABvMQQABIDAAEzEwHlhgZMWwABM0oDAAEzNwHlhgWHAAP7vKgDAAPA1BsAA8DWCksAATOnAAEzuwABPggAAwABvMQAAAAEDwABM9sAAT4IAAAAEBATAAE0BAAAAEl0DwAD+vwFgA8AA/hsAwABNCwAAAGpgA8AA/hsAwABNFgAAAIKQYAPAAP4bAMAATSAAAADAAG8yYAPAAPxVAABcAT4FScAATS4WwABNMi69AcAA7D/AAPAxSsAATTsAP0nAAE1HHMAATU+CwABNS8B5Yh5IAQABKwDAAP8/PTDAAE1YH8AATWLAAP1QAQABJ4KQAD89HsAATY/A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wABIocB59bQ9HMAASK+DwABIqMB59dXAAILkAAAAAMAA8RU/PgE9HMAASNmDwABI0sB59dWBwwAAAADAAPD/BsAA8YiCmcAASPPAAEkAwABKFgAAwACC3QAAAAEDwABJDcAAShYAAAAEAQHAAEkVAAAAiGlgA8ABAAIAA8AASS8AAACBwWADwADwtQFqwABJPmADwADwtYFuwABJVAAAAMAAUu1gA8AAyaEBasAASV5gA8AAy2eBicAASW8AAACERmADwAD8VQFqwABJdmADwAD8VQBdA8AAuuMBYAPAAPDVAT4BSz4BSsAASZABHMAASZcuwAB9RQMAARzAAEmtgsAASaTAefbdlaIBAAGAwABJtMB59q8AwADJcAKBwYHAAEnFwHn2wIRGg8AASdLAefb8wADxhgABwABJ4FsBwABJ5wAAAYNTWwAAPgFKwABJ8gEewABJ/cAAuu0BAWADwADw1QGEwABKCsB594IABsAA8YmCmcAAShvAAEogwABK8QAAhEoAAAABA8AASjHAAErxAAAABAEBwABKOQAAAIhpYAPAAQACAAPAAEpTAAAAgcFgA8AA8LUBasAASmJgA8AA8LWBbsAASngAAADAAFLtYAPAAMmhAWrAAEqCYAPAAMtngYnAAEqTAAAAhEZgA8AA/FUBasAASppgA8AA/FUAXAE+AT0cwABKqC6vuwMAARzAAErCgsAASrnAefgKlaIBAAGAwABKycB599wAwADJcAKBwYHAAErawHn37YRGg8AASufAefgpwADxhwbAAPGKgpnAAEr2wABK/cAASxoAACMAAAABA8AASwXAAEsaAAAAAAAAAGADwAEAAgFKwABLCwEkwABLGgMnwACDMRbAAEsULk7AAPFQJ4NIBsAA8YuCmcAASx/AAEsmwABLugABwACDMgAAAAEDwABLMsAAS7oAAAADAwPAAEs6AAAAgXZgA8AA/2gAwABLSQAAAINZYAPAAQACAMAAS1UAAABOYAPAAQACAABbAT4BScAAS2ElwABLbIDAAEtlwHn5DWADwADvpT4BPTDAAEuAH8AAS4rAAPEnAwADgcAAS57AefkdgsAAS6PAefktFMAAS6nAefkNAAFgA8AA76UAPwAAecpyAHnKrQB5yuYAectzAHnMZgB5zMkAec1WAHnNnwB5zxgAec95AHnP6gB50E0AedEIAHnScgB50tUAedM4AHnUCwB51RgAedWLAHnV/gB51rMAede/AHnYMgB52OcAedroAHnb3QB53EAAedzNAHndwAB53iMAed69AHnfxgB54DkAeeEIAHnh/QB54mAAeeL6AHnkAQB55HQAeeVDAHnltAB551IAeeeqAHnoXQB56OoAeeowAHntNQB57ywAefAPAHnxWAB58eAAefKaAHnzNwB59VUAefaDAHn3sgB5+JEAefjhAHn5kwAAADoCwADxj4KZwABLv8AAS87AAE1dB8AAgzMBasAAS85gA8AAzT7AAYJgAAFgAcAA/2gAAAAADgbAAPGRgoaH2ofiiDIEAQABaofiYAPAAM0+wAGCYAAAAQOH9ogyAAAAAQEBh/sAAACdGGADwAD+GwAAYAPAAPGPAUqIDQEeiBHAAOyRAQABgIgqwHn65QAGwADxk4KZwABMHsAATCLAAEwuAALAAIANAAAAAQPAAEwswABMLgAAAAAAAABgA8AA/hsABsAA8ZSCmcAATDLAAEw2wABMPQACgowAAAABA8AATDvAAEw9AAAAAAAAAGADwAD+GwAGwADxlYKZwABMQcAATEHAAExLAAKHHAAAAAEDwABMScAATEsAAAAAAAAAWwAGwADxloKZwABMT8AATE/AAExeAAKe3AAAAAEDwABMU8AATF4AAAABAQHAAExYAAAAhDlgA8AA/hsAAFsABsAA8ZeCmcAATGLAAExiwABMkAACwACAFQAAAAEDwABMasAATJAAAAADAwPAAEx1AAAAgo9dA8AA/r8BYAPAAP4bAMAATIEAAABqYAPAAP4bAMAATIwAAACCkGADwAD+GwAAWwAGwADxmIKZwABMlMAATJTAAEyoAAKHCwAAAAEDwABMncAATKgAAAABAQHAAEyiAAAAgJZgA8AA/hsAAFsABsAA8ZmCmcAATKzAAEyswABM2wACwACAGAAAAAEDwABMtcAATNsAAAADAwPAAEzAAAAAgo9dA8AA/r8BYAPAAP4bAMAATMwAAABqYAPAAP4bAMAATNcAAACCkGADwAD+GwAAWwAGwADxmoKZwABM38AATN/AAEzpAAKBswAAAAEDwABM58AATOkAAAAAAAAAWwAGwADxm4KZwABM7cAATO3AAE0GAALAAIAbAAAAAQPAAEz4wABNBgAAAAEBAcAATP0AAACBs2AD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IIKawABIn8AASLjAAEjYAALAAIKUwADsPwAAAAEDwABIv8AASNgAAAABAAABwABIxgAAAMAAbodgA8AA/FUBasAASNFgA8AA/FUAXQPAALrjAWADwADyAgAGwADyIYKawABI3MAASOHAAEkFAALAAIKWwADsPwAAAAEDwABI7MAASQUAAAABAAABwABI8wAAAMAAbodgA8AA/FUBasAASP5gA8AA/FUAXAAGwADyIoKawABJCsAASR7AAEqCAAHAAIOCwADsPwAAAAEDwABJKMAASoIAAAACAgLAAEkwAAAAwACDg2ADwAEAAgDAAEk+AAAAwACDhGADwAEAAgAAXQPAALrjAWADwAD8VQE+AUrAAElLARzAAEmoHsAASVjAAPFVAgACasAASYNgA8AA/hvAAGtuMcAASZJbAyuAwABJmcB6R/qBwABJoMB6SAwAga8BAWADwAD8VQE0wABJrQPAAEmtwABKfQAAAAEBAcAASa4AAACDV1sAAF0DwAC63wFgA8AA/FUBPgJJwABJwB7AAEnEwADscgEAAYLAAEnVwHpIjwA+AT0wwABJ6h7AAEnwwADscwMAA4LAAEoHwHpIjyTAAEpSBSfAAIOFgMAASkPAekf6J4GLgcAASkvAekgMJ4MmJwAAP0rAAEpnASbAAEpnAYLAAEpuwHpIj10DwAC63wFgA8AA/FUAwAC69gbAAPIzgprAAEzJwABM3cAATbMAAZyLAAAAAQPAAEzmwABNswAAAAICAsAATO4AAADAAIODYAPAAQACAMAATPwAAADAAIOEYAPAAQACAABdA8AAuuMBYAPAAPxVAT4DTsAATRXAAE0fAADAAIJlYAPAAPOcARrAAE0twADzoUnAAE06HMAATUiCwABNPsB6SZFIAQABKwDAAP91PgFKwABNWQEewABNYMAA8iICAAKAwABNa8B6SVuBwABNcsB6SW0AP0rAAE2EARzAAE2VgsAATYvAekmRwACDhgIAAoDAAE2iwHpJW4HAAE2pwHpJbQDAAPOuBsAA8gyCmsAAT0DAAE9JwABP5wEAg0EAAAABA8AAT1TAAE/nAAAAAAAAAGADwAD8VQE+AUnAAE9aGsAAT2fAAPPrPgFKwABPegEcwABPhhbAAE+BLk7AAPIKgdgBAAEawABPkcAA8gcAwAEAFD4BSsAAT8IBHMAAT84WwABP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AGRnwHpYgGADwADlOSoASAEAAWrAAGSPYAPAAPHRwAG8hwDAAP91BsAA8juCmsAAZPnAAGUFwABlawABwACDmAAAAAEDwABlD8AAZWsAAAABAQHAAGUXAAAATmADwAEAAgAAYAPAAPxVAUrAAGUmARzAAGVOHsAAZSfAAPItAgACHsAAZTTAAPIkAQABgMAAZUHAelkHACkASAEAAWrAAGVmYAPAAPHRwAGtbgDAAP91BsAA8jyCmsAAZdXAAGXhwABmWwABwACDmQAAAAEDwABl8MAAZlsAAAABAQHAAGX4AAAATmADwAEAAgAAYAPAAPxVAUrAAGYHARzAAGYvHsAAZgjAAPItAgACHsAAZhXAAPIkAQABgMAAZiLAelmRACkASAEAAWrAAGZRYAPAAPHRwAG8ZwDAAP91BsAA8imCm4GLgZuCAAAFwACDmsAA7D8CaoGbYAPAAM0+wAGCYGqBm2ADwADNTMABvX0AAAEDgamCAAAAAAMDA4G1AAAAwAB+uGADwADzkgCBygAAAMAAgnRgA8AA5TkAgd4AAADAAIJxYAPAAPxVAABbAAbAAPIqgpuCBIIUgncABcAAg5zAAOw/AmqCFGADwADNPsABgmBqghRgA8AAzUzAAb2RAAABA4IkgncAAAADAwOCMAAAAMAAfrhgA8AA85IAgkIAAADAAIODYAPAAQACAIJQAAAAwACDhGADwAEAAgAAWwAGwADyK4KbgnuCi4LvAAXAAIOewADsPwJqgotgA8AAzT7AAYJgaoKLYAPAAM1MwAG9pQAAAQOCoILvAAAAAgICgqwAAADAAH64YAPAAPOSAILBAAAATmADwADlOQAAWwAGwADyPYKawABpccAAaX/AAGyXAAHAAIOgAAAAAQPAAGmHwABslwAAAAEBAcAAaY8AAABOYAPAAQACAABgA8ABAAIBPgROwABpn8AAaacAAMAAg6FgA8AA/hsBHMAAaamUgcYAAAAAwAD+PknAAGmxGsAAab7AAPPrPgFJwABp0RzAAGnagMAAadXAelthgdgBAAEawABp5cAA8gcAwAEAFD4CPYnAAGpSwHpbexzAAGphgMAAalzAelthgLsCAAIewABqbcAA/6sBAAEnwACDogCVAMABABVJwABqixzAAGqXgcAAao/Aelt7SAEAARzAAGqalIHGAAAAAMAA/j4AwAD/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wADz2oKhtUu1XLYhAADAAIONAWq1TGADwAD/aAIAAAEDtW62IQAAAAAAAABgA8AA/FUBPgNJtXchHLWPFrV7LsAAhHbAAOw/wADzyUgBAAErAMAA/3VKtZgBHLWfLsAAhHbAAOw/AAAAAMAA88k/SbW6IRy1yBa1vi7AAHCkwADsP8AA87xIAQABKwDAAP91SrXRARy14ha12C7AAHCkwADsP8AA87zAAIONAAAAAMAA87M/SrX8AR22CcAAg40AAAAAwADzswbAAPPbgqG2MLZBtvUAAMAAhFgBarYxYAPAAP9oAgAAAQO2S7b1AAAAAQEBtlMAAABOYAPAAQACAABgA8AA82MBPgNJtl8hHLZvFrZjLsAAgwTAAOw/wADzykgBAAErAMAA/3VKtngBHLZ/LsAAgwTAAOw/AQABgLaLwHr32wDAAPPKP0m2liEctqQWtpouwABwpMAA7D/AAPO8SAEAASsAwAD/dUq2rQEctr4WtrQuwABwpMAA7D/AAPO8wACEWAEAAYC2ycB699sAwADztD9KttQBHbbhwACEWAEAAYC27MB699sAwADztAbAAPPcgqG3BrchuOoAAMAAhGgBarcHYAPAAP9oAgAAAQO3LrjqAAAABAICty8AAACWsVsAtzkAAACWsmADwAD+GwACt0YAAADAAID+WwFqAGADwAD/JXm3XgAAAMAAcPVgA8AA/PEBagBgA8AA/yV5XQPAALrjAWADwAD2sgE+A0m3biEct4EWt3IuwACEd8AA7D/AAPPLSAEAASsAwAD/dT4BSreSARy3mS7AAIR3wADsPwQAAoC3qMB6+MWBt67AevjOAsAAgP6Ct83AevjdwABw9YO35cB6+PHAAPPLP0m3+SEcuAcWt/0uwABwpMAA7D/AAPO8SAEAASsAwAD/dT4BSrgYARy4KRa4Hy7AAHCkwADsP8AA87zAAIRoBAACgLg3wHr4xYG4PcB6+M4CwACA/oK4XMB6+N3AAHD1g7h0wHr48cAA87U/SriIAR24lcAAhGgEAAKAuKPAevjFgbipwHr4zgLAAID+grjGwHr43cAAcPWDuN7AevjxwADztQbAAPPdgqG477kauqIAAMAAhGkBarjwYAPAAP9oAgAAAQO5LLqiAAAAAwICuS0AAACWsVsAuTcAAACWsmADwAD+GwABuUQAAADAAID+WwFq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wABHncB8QToNAIKOAQABFMAAR6fAfEFFDgAAAErAAEe4ARTAAEe/wHxBOg0AAMAAu7GBrwEBWwE0wABH1APAAEfUwABH6QAAAAEBAcAAR9UAAACD6VsAAGADwAEAAgFKwABH3AEcwABH3xTAAEfcwHxBrA0AIwAAAADAAP92AMAAuvZOwABIBsAASA0AAIRCXQPAALrjAVsBHMAASBkUwABID8B8PywKACACAAIWwABIHBTAAEgawHw+swgAhELAAPRzhsAASCTAfD4DAABOwABIQMAASEcAAAtdA8AAuuMBWwEcwABIUxTAAEhJwHw/LAoAIAIAAhbAAEhWFMAASFTAfD6zCAALwAD0dIfAAEhewHw+FQAASsAASHQBHMAASKUewABIgsAAuvABAVsBMcAASIddA8AAuuMBWwMWwABIihTAAEiIwHw+swgAFMAA9HIUwABIlMB8QeQLABTAAEicwHxCLwwAAIGvAQFgA8AA9H8BNMAASKoDwABIqsAASQAAAAABAQHAAEirAAAAgXZdA8AA/r8BWwAAYAPAAPR/AT4BSsAASLsBH8AASMbAAPSGBAAEFMAASNTAfD7VCQAmwABI3wEcwABI3xTAAEjZwHxC6A0ASwEAAZMAwAD+zmADwAD+GxzAAEjqFMAASOTAfELoDQBLAQABlADAAP7OHMAASPUUwABI78B8QugNAEsBAAGVAMAA/s4AAMAAuvYAwAC69gbAAOxsgorAAEkMwABJGsAASyIAAcAAhm3AAOw/AAAAAQPAAEk3wABLIgAAAAgICMAASUQAAADAAHatYAPAAQACAMAASWEAAABbXQPAAP6/AWADwAEAAgDAAEl3AAAAwAB9YWADwAEAAgDAAEmhAAAAgIldA8AA/vECYAPAAQACYAPAAQACAMAASbcAAADAAIBlYAPAAPxVAMAASdoAAADAAIBmYAPAAPxVAMAASfMAAADAAICLYAPAAMmhAMAAShAAAADAAICMYAPAAMmhAABgA8AA9H8BPgJOwABKKMAASjAAAMAAR/hgA8AA7RsBH8AASjbAAO1EBwAHgMAASkrAfEO2gcAASlzAfEPIgsAASm3AfEPeg8AASoXAfEPwhMAASpjAfEQNhcAASrjAfEQfasAASttgA8AA9F3AAbHWAErAAErmARzAAEr1FMAASu3AfERgCADAAICKwADs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cBAAYAPAAOVnAD0VwAERjMB9X60UKT89HsABEcTAAPh3BAAEJsABEckBFMABEcnAfV9iDwBgA8AA5WcUwAER0sB9XtsNAJQmwAER3wEUwAER38B9X2IPAGADwADlZwBJwAER+BzAARINHMABEggcwAESBBTAARH9wH1fcBAASwEAAZMAAIN8AQABlAAASAEAAZQAwAD/dT4BScABEjMUwAESN8B9X60UAD4BPR7AARJSwAD4ewUABSbAARJaARTAARJawH1fcBAAYAPAAOVnFMABEmPAfV7bDQCDwAESbcB9V46HwAESdsB9WE4mwAESfwEUwAESf8B9X3AQAGADwADlZwBJwAESmiIhHMABErAcwAESphTAARKfwH1fcBAASwEAAYfAARKnwH1YTgAASAEAAZMAwAD/dQEcwAES+x7AARLIwAD4egQABCbAARLXARTAARLXwH1fcBAAYAPAAOVnh8ABEuDAfVhOg8ABEunAfVeOh8ABEvLAfVhOAICXAQABkwDAAP9LPgE9HsABEw/AAPh8BQAFJsABExcBFMABExfAfV9wEABgA8AA5WcUwAETIMB9XtsNAIPAARMqwH1XjofAARMzwH1YTibAARM8ARTAARM8wH1fcBAAYAPAAOVnAD4CPR7AARNlwAD4fAUABYPAARNtwH1XjofAARN2wH1YTibAARN/ARTAARN/wH1fcBAAYAPAAOVnh8ABE4jAfVhOJsABE5EBFMABE5HAfV9wEABgA8AA5WcAPRXAAROnwH1frRQpPz0ewAET2cAA+HcEAAQmwAET3gEUwAET3sB9X3AQAGADwADlZxTAARPnwH1e2w0AlCbAARP0ARTAARP0wH1fcBAAYAPAAOVnAEPAARQMHMABFCQcwAEUHxzAARQbFMABFBTAfV4+CwBLAQABkwDAAP7Og3wBAAGUAMAA/jNIAQABkwDAAP8/PgM9HsABFDTAAPh3BAAEFMABFDnAfV4+CwCHwAEUQsB9WE6UFMABFE7AfV4+CwAAScABFGAUwAEUZMB9Xo4MAD4CScABFHQiHMABFIocwAEUhRzAARSBFMABFHrAfV9+EQBLAQABkwAAg3wBAAGUAABIAQABlADAAP91ARzAARSlHMABFKAcwAEUnBTAARSVwH1fjBIASwEAAZMAAIN8AQABlAAASAEAAZQAwAD/dT4CScAB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3hzAASnqgcABKeLAfX1KSAEAARrAASntwAD4ZQDAAPibSsABKfIBGsABKfnAAPhkP07AASoHwAEqCwAAoDdgA8AA+EYBLknAASoXIhbAASofgsABKhvAfX36wACG4cAA977AAPhcARzAASpIHMABKjOCwAEqL8B9ffrAAIcgwAD3vgEAAYHAASo/wH19SgDAAPh5gW0BAAGTAMAA/0w+AT2KwAEqV8B9ffocwAEqW4LAASpXwH19+pYJAQABgcABKl7AfX1KAMAA+KM/SsABKnEBHsABKnjAAPiMAwADgcABKoPAfX1KgsABKozAfX36KQAGwAD4p4K4wAEsa8ABLHfAAS0oAADAAIeEAAAAAQPAASx6wAEtKAAAAAEBAcABLIIAAADAAIchYAPAAPwnAABgA8AA+EYBPgROwAEsnMABLKIAAIPbYAPAAPhGASbAASycAYDAASykwH1+5mADwAD4RknAASywFsABLLQuwACHAsAA977AAPiwSsABLL0BHMABLMqBwAEsxMB9fwOYJQAAAADAAPiQP0nAASzVFsABLN+BwAEs2cB9fwPAAIcCwAD3vsAA+LBKwAEs6AEcwAEs9C6YJQAAAADAAPiQP0rAASz/AR7AAS0GwAD4jAMAAy6BwAEtF8B9fwMqAAbAAPiogrjAATBywAEwfsABMMIAAKp/AAAAAQPAATCIwAEwwgAAAAEBAcABMI0AAACBtmADwAD+GwAAYAPAAPhGAT4BSsABMJoBHMABMKYug3wBAAEcwAEwuBzAATCuGsABMKrAAPhlg78BAAGAwAEwscB9f98AwAD4kYGNAQABGsABMLrAAPhlAMAA+JkAwAD4lAbAAPipgrjAATWtwAE1ucABN3cAAKsEAAAAAQPAATXBwAE3dwAAAAEBAcABNcYAAACBtmADwAD+GwAAYAPAAPhGAT4CTsABNxzAATclAADAAHs4YAPAAPhGARzAATcrGsABNyfAAPhlg78BAAEcwAE3NYDAATcvwH2AcoGNAQABlADAAP9CAMAA+JFKwAE3PwEcwAE3YBzAATdMLoN8AQABHMABN1iBwAE3T8B9gI2BjQEAARrAATdawAD4ZQDAAPiZAMAA+JSBjQEAARzAATdoLoN8AQABgcABN2rAfYCNAMAA+JQAwAD4mQbAAPi3grjAATd8wAE3hcABOFkBAMAAZWwA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AMABAGBKwABEMwEcwABEQYHAAEQ6wH7ZQCMAAAAAwAEAZQbAAPtsgsLAAERUwABEW8AARX0AAJKUAAAAAQPAAERiwABFfQAAAAIBAsAARGcAAACBtmADwAD+GwDAAER2AAAAlvNgA8ABAAIBasAARIBgA8ABAALAAJ18AGADwAEAAgE+Bk7AAESQwABElgAAm4ZgA8AA/hsBHMAARJ6AwABEmMB+2iCBjQEAARbAAESlLmHAAPuCAMAA/0JJwABEsRzAAES7gsAARLXAftpagWsBAAGTAMAA/0pKwABEwQEuP07AAETfwABE5gAAgo9gA8ABAEwBH8AAROzAAQBrAAAAAEXAAEUAAcAARQnAAEULAABiYAPAAP4bAZMBHMAARRKEwABFEMB+2t1jAQABgsAARRTAftpaAMAA/0kBjMAARRvAftrdHMAARRyEwABFG8B+2t1kAQABlADAAP9BPgE9HMAARS+DwABFKMB+2reCjgEAAYHAAEU1wH7aMADAAQBgPRzAAEVQg8AARUnAftq3go4BAAEuAMABAGBKwABFYQEcwABFb4PAAEVowH7atyMAAAAAwAEAZQbAAPttgsLAAEWCwABFicAARpgAAMAARAQAAAABA8AARZHAAEaYAAAAAgECwABFlgAAAIG2YAPAAP4bAMAARaUAAACW82ADwAEAAgFqwABFr2ADwAEAAsAAnXwAYAPAAQACAT4FTsAARb/AAEXFAACbhmADwAD+GwEcwABFzYDAAEXHwH7buoGNAQABFsAARdQuYcAA+4IAwAD/QknAAEXgHMAAReqCwABF5MB+2/SBawEAAZMAwAD/SkrAAEXwAS4/TsAARg7AAEYVAACCj2ADwAEATAEfwABGG8ABAGsBAAEuAEXAAEYzAcAARjzAAEY+AABiYAPAAP4bAZMBHMAARkWEwABGQ8B+3HhjAQABgsAARkfAftv0AMAA/0kBjMAARk7Aftx4HMAARk+EwABGTsB+3HhkAQABlADAAP9BPgE9HMAARmKDwABGW8B+3FGCjgEAAYHAAEZowH7bygDAAQBgSsAARnwBHMAARoqDwABGg8B+3FEjAAAAAMABAGUGwAD7boLCwABGncAARqLAAEfvAACDHAAAAAEDwABGqsAAR+8AAAACAQLAAEazAAAAG2ADwAD/fwDAAEbBAAAAwABEEGADwAD+GwFqwABGzmADwAD+GwkAYAPAAPxVAT4CScAARtglwABG5IDAAEbcwH7dOWADwAEAAj4CScAARvciHMAARwaBwABG+8B+3UhjAQABkwDAAP9JARzAAEcYgcAARw3Aft1IgJcBAAEWwABHHy5hwAD7ggDAAP9LPgE9MMAARzEfwABHO8AA/WUDAAOBwABHTMB+3UiTFsAAR2AuYcAA+4IAP0rAAEd3ARzAAEebHMAAR34ugLsCAAIUwABHhsB+3TkAAWADwAEAAoHAAEePwH7dSADAAPtlgW0BAAGTAMAA/0w/SsAAR6sBFsAAR+EcwABHuoDAAEeywH7dOcAAbtABAAEcwABHyi6AvgEAAYHAAEfUwH7dSADAAPtnAMAA/4GDt8AA/qIGwAD7b4LCwABH9MAAR/vAAErkAADAAEQ8AAAAAQPAAEgHwABK5AAAAAMCA8AASBAAAAAbYAPAAP9/AMAASCAAAACEXGADwAEAAgDAAEg4AAAAwABEEGADwAD+GwFqwABIRWADwAD+GwkAYAPAAQACAT4IScAASE8hJcAASFuAwABIU8B+3qlgA8AA/38+AT0wwABIcB/AAEh6wAD9TgEAASTAAEilAoDAAEiLwH7eqSfAAIm2AD9JwABIsiElwABIwoHAAEi2wH7euGADwAEAAj4BPTDAAEjWH8AASODAAP1OAQABJMAASQ4CgcAASPHAft64J8AAibcAP0nAAEkbISXAAEkqgsAASR/Aft7IYAPAAP4bPgE9MMAASTsfwABJRcAA/U4BAAEkwABJcAKCwABJVsB+3sgnwACJuAA/PR7AAEmIwAD9WgQABILAAEmdwH7eyJMWwABJsS5hwAD7gifAAEQQAE7AAEnVwABJ3gAAXF0DwAD+uAFbASMcwABJ64LAAEngwH7eyEgBAAGTAMAA/z8WwABKExzAAEoCgMAASfrAft6pwABu0AEAAS4AwAD/gVzAAP6fFsAASkscwABKLoDAAEomwH7eqcAAbtACAAIugsAASj/Aft7IAMAA/4FcwAD+nwFdA8AA/rgBYAPAAP+FScAASlkhHMAASmeDwABKXsB+3+VdAAAAAMAA/rpKwABKcwEuP07AAEqKwABKkAAAX2ADwAD/hQEmwABKigEWwABKm4PAAEqSwH7f5V7AAP68YAPAAP+FSsAASqgBHMAASq8uoD8DAAMWwABKwoTAAEq8wH7gmWrAAP+HFsAASs+EwABKycB+4JmCkMAA/4iBwABK1MB+3rgAwAD7cAbAAPtwgsLAAErpwABK8MAATrIAAKA/AAAAAQPAAEr8wABOsgAAAAMDA8AASwEAAABqYAPAAP4bAMAASwwAAACCkGADwAD+GwDAAEsYAAAAhFxgA8ABAAIAAGADwAEAAgE+DE7AAEsvwABLNgAAYWADwAD+GwEWwABLPS5hwAD7gj2JwABLScB+4UkewABLWsAA/VwDAAOAwABLasB+4TqBwABLccB+4UmDwABLdsB+4XQATsAAS4jAAEudAADAAIm5YAPAAPxVARbAAEurgsAAS5/AfuFZwACJmsAA977AAQAFScAAS7siHMAAS8WAwABLv8B+4TpIAQABkwDAAP8/ABzAAEvRgcAAS83AfuFJSAEAAYPAAEvUwH7hdADAAP8/SsAAS9wBgsAAS+PAfuFZP07AAEv4wABMCgAAwACJumADwAD+GwEWwABMGILAAEwMwH7hWWHAAQAGTsAATCjAAEw0AACDXmADwAD+GwEcwABMTRzAAEw8gMAATDbAfuE6ZAEAARzAAExGg8AATD/AfuF0gY0BAAGBwABMSMB+4UkAwAD/QgDAAP9BZAEAAYXAAExPwH7iQwDAAP9BScAATGYihMAATGrAfuHEABbAAEyHLsAAiZrAAPe+wAD7gT4GTsAATJ/AAEymAACBdmADwAD7hwEewABMt8AA+5gBAAGGwABMwcB+4mwATsAATNnAAEzfAAAnYAPAAP4bAZM9FcAATOrAfuMdCBzAAEz5h8AATPLAfuLzwABwKcAA974EAAQUwABNA8B+4x0IAC6TgMAATRPAfuE6AMAA+5s9FcAATSHAfuMdCBzAAE0wh8AATSnAfuLzwABwKcAA974EAASAwABNOsB+4TqCwABNQcB+4VmThcAATVHAfuJDAMAA+5s9HMAATXKHwABNa8B+4vPAAHApwAD3vgQABBTAAE18wH7jHQgALoHAAE2JwH7hSYPAAE2OwH7hdADAAPubSsAATZ0Bh8AATaTAfuLzP07AAE27wABNwgAAwACJu10DwAD+vwFbATHAAE3EWwA9HsAATczAAPtSAwADh8AATd3AfuQCk4DAAE3owH7hOgBJwABN9BzAAE4LFsAATgSCwABN+MB+4VlhwAEABoCX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AMAAiW0AAAABA8AAsHbAALEMAAAAAQEBwACwgQAAAMAAiW1dA8AA/r8BYAPAAP4bAABdA8AA/r8BYAPAAQACAT4DTsAAsJzAALCjAACBdl0DwAD+vwFgA8ABAAIBHsAAsKnAAPm5AQFgA8ABAAIBkwBGwACwvcAAsNPAALDGAAAAvytgA8AA/hsAgMAAsMvAfzxcPgE9HMAAsOKBwACw28B/PIdWAQABHMAAsOYuwABEogEAAYLAALDswH88vgDAAPvLAMAA/tBKwACw+wGBwACxAsB/PIcAAH86mgB/OwAAfztiAH87mgB/PDAAfz0bAAAABQLAAPvPgsLAALFTwACxWcAAs0UDwACJ7gAAAV0BwAD+fQFgA8AA/4UAAAMEwAD70oLCwACxnMAAsaIJwACJ78AA974AYAPAAQACAATAAPvTgsLAALGzwACxuwnAAInwwAD3vgBgA8ABAAIABMAA+9SCwsAAscnAALHPCZdxwAD3vgBgA8AA/hsAAQXAAPvZgsLAALHUwACx1MAAshYAAAADwACx7cAAshYAAAADAwPAALHzAAAEwACJ72ADwAEAAgDAALIAAAAEwACJ8GADwAEAAgDAALIPAAAEl3FgA8AA/hsAAGADwAD7zwE/BAgBwAD70oAAwH895wgBwAD704EAwH89+QgBwAD71IIAwH8+CwkBwACx1MAA/qcAAAAAAgbAAPvWgsLAALIbwACyL8AAsngBAFwAAAABA8AAsjjAALJ4AAAAAAAAAF0DwAD+uAFgA8AA/4UBSsAAskEBH8AAskXAAPvmAwADFsAAsl8uwACJ78AA977AAPvSFsAAsmcuwACJ8MAA977AAPvTFsAAsnEul3HAAPe+wAD71AAGwAD714LCwACyfcAAsofAALNDAQCDHgAAAAEDwACyjcAAs0MAAAAAAAAAYAPAAP+FAT4DTsAAspfAALKdAAAnYAPAAP4bARzAALKmFsAAsp8uwACJ78AA977AAPvSgLsCAAIWwACyri7AAInwwAD3vsAA+9MWwACyuC6XccAA977AAPvUAMABABVJwACyxRzAALLPgMAAssnAfz8MgW0BAAGTAMAA/0w+AUrAALLdAR/AALLowAD7zgMAA4DAALL1wH8/DBbAALL8LsAAie/AAPe+wAD70hbAALMELsAAifDAAPe+wAD70wA/PTDAALMZ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APyhAQABFsAARwMuwACKLsAA/LsATsAARxbAAEcYAACW8WADwAEAAgEewABHGsAA/KEBAAEWwABHJS7AAIovwAD8vABOwABHNsAARzgAAIDzYAPAAQACAR7AAEc6wAD8oQEAARbAAEdFLsAAijDAAPy9AE7AAEdXwABHWwAAnQtgA8ABAAIBHsAAR13AAPyhAQABFsAAR2guwACKMcAA/L4ATsAAR3zAAEeAAADAAIp/YAPAAQACAR7AAEeCwAD8oQEAARbAAEeNLprtwAD8vwBOwABHocAAR6QAAJbeYAPAAQACAR7AAEemwAD8oAEAARbAAEezLsAAijLAAPzAAE7AAEfMwABHzwAAwAB1JmADwAEAAgEjHMAAR90WwABH0S7AAIozwAD8wUgBAAGTAMAA/z8nAB7AAEfpwAD8oAEAARbAAEf2LsAAijPAAPzBAAFgA8ABAAJJwABICBbAAEgMLsAAgfHAAPyNPgFKwABIGwEkwABIQw+AwABIJMB/iVUngY2BwABIJ8B/iYQngY2CwABIKsB/ibIngNmDwABILcB/ieEnguqEwABIMMB/ihAnguqFwABINcB/ij8ngWqGwABIOsB/im6HwABIPsB/ip0nwABI/T4BSsAASFgBJMAASH0OgMAASGHAf4lVJ4GNgcAASGTAf4mEJ4GNgsAASGfAf4myJ4DZg8AASGrAf4nhJ4LqhMAASG3Af4oQJ4LqhcAASHLAf4o/J4FqhsAASHfAf4puh8AASHrAf4qdBsAA/K2CycAATEPAAExKwABOXwAAwABOVAAAAAEDwABMWcAATl8AAAAAAAAAYAPAAQACAT4JTsAATGnAAExrAAC9UGADwAEAAgEjIhzAAEx7FsAATHYuwACKLcAA/LqBbQEAARzAAEx+N6cPgcYAAAAAwAD+PgDAAP9MABzAAEyMFsAATIcuwACKLcAA/LqBawEAATenDwDAAP9KHsAATJfAAPyeAQABFsAATKMuwACKLcAA/LoAHsAATKvAAPyfAQABFsAATLYuwACKLcAA/LoAAWADwAEAAk7AAEzIwABMygAARWADwAEAAgEewABMzMAA/KEBAAEWwABM1y7AAIouwAD8uwBOwABM6sAATOwAAJbxYAPAAQACAR7AAEzuwAD8oQEAARbAAEz5LsAAii/AAPy8AE7AAE0KwABNDAAAgPNg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ANMBgMAA0vrAgT6JSAEAASeBvQDAAQARScAA0xEiHMAA0xqCwADTFcCBPrtIAQABKwDAAQARACIiFsAA0y+BwADTJsCBPqKDt8ABAAkBIRzAANNCg8AA0z3AgT7USAEAASsAwAD/PwEUwADTTcCBQPkJAD4BPYrAANNewIE+uycAP07AANN4wADThQAAnN1gA8AA/FUBIRzAANONgsAA04jAgT67SAEAASsAwAEAET2MwADTm8CBPu0ewADTosABARAGAAaEwADTtcCBPu2THsAA077AAPf7AQABhMAA09LAgT7tAIXAANPZwIE/BYDAANPnwIE+iRTAANPvwIFBkwoAAEnAANQCIiIWwADUDYDAANQGwIE+iYFVwAEACAAcwADUHYLAANQYwIE+u0gBAAErAMABABEAIRzAANQuhMAA1CnAgT7tgdgBAAEnUADAAQAUPgJOwADUTMAA1FgAAMAAjDNgA8AA/FUBIhbAANRhgMAA1FrAgT6Jg7fAAQAJASEcwADUdILAANRvwIE+u0gBAAErAMABABE9jMAA1IPAgT7tHsAA1IrAAQEdAgAChMAA1KHAgT7tFMAA1KfAgUJmCwAAPgE9jMAA1MjAgT7tHsAA1M/AAQEcAQABhMAA1OLAgT7tAEnAANTzIhzAANT8gsAA1PfAgT67SAEAASsAwAEAEQAcwADVDITAANUHwIE+7YHYAQABJ5nOAMABABQ+AT2KwADVJsCBPrsnAD9KwADVOwEfwADVR8ABATUHAAeAwADVUcCBPomBwADVWcCBPqKCwADVY8CBPruDwADVacCBPtSEwADVb8CBPu2GwADVdcCBPyUUwADVfMCBP2EIAAAGwAEA94LuwADVssAA1brAANZpBAGDRAAAAAEDwADVw8AA1mkAAAADAgPAANXLAAAAwACL4GADwAEAAgDAANXdAAAAwACL4WADwAEAAgDAANYHAAAAwAB92V0DwAD+8QJgA8ABAAJgA8ABAAIBagBgA8AA/yV5AGADwAEAvgE+AUrAANYfASbAANYfAR7AANYmwAEBAAQABCeDRIDAANY7wIFDvoHAANZGwIFD0ILAANZVwIFD4gBgA8ABAL4GwAEA+ILuwADWk8AA1pvAANdMBAGDRQAAAAEDwADWpcAA10wAAAADAgPAANatAAAAwACL4GADwAEAAgDAANa/AAAAwACL4WADwAEAAgDAANbpAAAAwAB92V0DwAD+8QJgA8ABAAJgA8ABAAIBagBgA8AA/yV5AGADwAEAvgE+AUrAANcBASbAANcBAR7AANcIwAEBAAQABCeDRYDAANcewIFEe4HAANcpwIFEjYLAANc4wIFEnwBgA8ABAL4GwAEA4ILuwADXUcAA11zAANfcAQDAAIvgAAAAAQPAANdmwADX3AAAAAAAAABgA8ABAAIBPgRJwADXbCEWwADXcS6c3cABAOtKwADXfwEnAD9OwADXksAA15UAAIPpYAPAAQBMAR/AANeXwAEAawAAAAA9HMAA16suwACMNMAA974BAAGAwADXu8CBRWAAwAEBIUrAANfEARzAANfOgMAA18vAgUVgIwAAAADAAQBlBsABAOGC7sAA1+HAANfswADYAQEAlrAAAAABA8AA1/XAANgBAAAAAAAAAGADwAEAAgFKwADX+AEWwADX+C7AAIwZwAD3vsABAMIGwAEA4oLuwADYBsAA2BHAANioAQCWsQAAAAEDwADYFsAA2KgAAAAAAAAAYAPAAQACAT4DScAA2BwcwADYJhbAANggLsAAgKDAAPe+wAEAw0gBAAErAMABABFKwADYLwEnAD9JwADYPhzAANhIFsAA2EIuwACAoMAA977AAQDDgdgBAAEnmfIAwAEAFD4BSsAA2GEBHMAA2G4WwADYaC7AAICgwAD3vsABAMOAvgIAApQcwADYiBbAANiBFsAA2HsuwACAoMAA977AAQDDYcABAAaBjQEAAZQAwAD/QgDAAQAYP0rAANiYARbAANifLsAAgKDAAPe+wAEAwwbAAQDjgu7AANitwADYtcAA2QQBAJayAAAAAQPAANi6wADZBAAAAAAAAABgA8AA/hsBPgJJwADYwBzAANjKFsAA2MQuwAB9r8AA977AAQDESAEAASsAwAD/P0rAANjTAR7AANjawAEA/QEAARbAANjnLoG8wAEA2QA/SsAA2PQBFsAA2PsuwAB9r8AA977AAQDEBsABAP2C7sAA2TvAANlGwADZwAABwACMNcAA974AAAABA8AA2VLAANnAAAAAAQEBwADZWgAAAIG8YAPAAQACAABgA8AA/hsBPgNJwADZaBzAANlzgMAA2WzAgUfESAEAASeDRADAAQARSsAA2X4BN1A/ScAA2Y0cwADZmIDAANmRwIFH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ARW7wAEVycABHsUAAcAAjGLAAPe+AAAAAQPAARXZwAEexQAAAAQDBMABFeEAAACWsWADwAEAAgDAARXrAAAAamADwAD+GwDAARX2AAAAgpBgA8AA/hsAwAEWCQAAAIMpYAPAAQACAWrAARYSYAPAAQAChCgAYAPAAQACAT4JTsABFioAAACCj2ADwAEATABJwAEWNiEcwAEWQYPAARY6wIF5p0gBAAEnAADAAQARPgE9jMABFlDAgXnPH8ABFlnAAQBrAQABg8ABFmbAgXmnAD9OwAEWfcABFooAAMAAjGNgA8AA/hsBgcABFozAgXmITsABFpvAARahAAAnYAPAAP4bAYHAARajwIF5iE7AARcAwAEXDQAAvE1gA8AA/FUBKUPAARcaHMABFyeGwAEXIcCBekFjAQABgsABFynAgXmXAMAA/0lBPgJOwAEXOsABFz8AAJzJYAPAAP4bARzAARdGgMABF0HAgXl4hBABAAGGwAEXUcCBekEAwAEAEEnAARdfHMABF2gUwAEXY8CBepoIAEgBAAFqwAEXa2ADwAD+G8AAY1EAwAD/Pz4LTsABF4bAAReSAACEXGADwAEAAgEewAEXlMABARQDAAOAwAEXpcCBeXiGwAEXq8CBekEpAEnAARfBIhzAARfRFMABF8XAgXr+CQBIAQABKwDAAQARAIfAARfcwIF6XT4CPY7AARf2wIF6QRzAARf8hsABF/bAgXpBZAEAAZYAwAD/QULAARgMAD89IxzAARgvhMABGCjAgXnPSAEAASsAwAD/dYzAARgowIF5zx/AARgzwAEAawAAAAArAWADwAEATE7AARhSwAEYWAAAwACLNWADwAEAAgEcwAEYX4DAARhawIF5eIC+AgAChcABGGnAgXoihsABGHfAgXpBAMABABg9HMABGI6EwAEYh8CBec+CjgEAARTAARiUwIF7vwoAAMABAGBOwAEYqMABGLUAAMAAhvFgA8AA/hsBlknAARjCHMABGNIUwAEYxsCBev4JAEgBAAErAMABABE+AT0VwAEY58CBev4JHMABGPqAwAEY9cCBeXiAvgIAAobAARkEwIF6QRzAARkRhsABGQvAgXpBZAEAAZYAwAD/QQDAAQAYScABGSYcwAEZNhTAARkqwIF6/gkASAEAASeWCQDAAQARPgE9HsABGUrAAQD/AwADgMABGVDA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/FUAAGADwAEAAgE+CU7AATCYwAEwnwAAwACDlWADwAD8VQEcwAEwqYTAATCiwIGRz0gBAAEngb0AwAEAEU7AATC+wAEw0QAAwACMb2ADwAD8VQEihsABMNPAgZH6AYXAATDdwIGR30nAATDvIhzAATD4gMABMPPAgZGKSAEAASsAwAEAEQAcwAExEIPAATEDwIGRuEgBAAErAMAA/3VKwAExGQEjhsABMSDAgZH6J1AnAAFgA8ABAAI/ScABMTciIRzAATFAgMABMTvAgZGKSAEAASsAwAEAEQAhHMABMViDwAExS8CBkbhIAQABKwDAAP91PgE9MMABMWkfwAExb8AA/U4BAAEnwACMcAA/TsABMbcAAACBdmADwAEAAgBJwAExwyEcwAExzIDAATHHwIGRikgBAAErAMABABE+AT0VwAEx3cCBkvsIHsABMebAAQEWBQAEgMABMfzAgZGKgcABMgLAgZGZgsABMgnAgZGoasABMg5dA8AA/r8BYAPAAP4bwAHnFAHAAIxxKT4BPRXAATJbwIGS+wgcwAEyvhzAATJ8g8ABMmTAgZG4gKsBAWADwAEAAgE0wAEygAPAATKAwAEysQAAAAEBAcABMoEAAACIe2ADwAEAAgAAYAPAAQACAUrAATKHAR7AATKHwAEBJQQABGrAATKSXQPAAP6/AWADwAD+G8AB5uwUwAEyosCBk7gJAGrAATKlYAPAAMtngYkqAADAAP6IWAEAASdQAMAA/pFJwAEy0xbAATLeFMABMtfAgZL7CACBVcABAAg+AUnAATLvhsABMvPAgZH6SsABMvsBJ1A/ScABMxIih8ABMxbAgZIqACEcwAEzNBTAATMtwIGS+wgAgdgBAAEnUADAAQAUPgE9FcABM03AgZL7CBzAATNaJ1BkAQABFMABM1zAgZL7CAAAwAEAFz89FcABM27AgZL7CB7AATN3wAEBEQMAAxTAATOGwIGS+wgAhMABM47AgZHPhcABM5bAgZHfAErAATOpARTAATOwwIGS+wgABsABARGC7sABNN7AATTswAE16wABwACMcsAA974AAAABA8ABNPrAATXrAAAAAwMDwAE1AgAAAE5gA8ABAAIAwAE1DwAAAIG8YAPAAQACAMABNRwAAACc3WADwAD8VQAAYAPAAQACAT4CScABNTAiIhbAATU7gcABNTTAgZUxgVXAAQAIACGCwAE1R8CBlUEAIRzAATVdgMABNVjAgZUigdgBAAEnUADAAQAUPgFKwAE1dgEewAE1fcABAR0CAAKAwAE1lMCBlSIiFsABNaGBwAE1msCBlTGDt8ABAAkBgsABNa/AgZVBAD9KwAE1yAEewAE1z8ABARwBAAGAwAE14sCBlSIABsABARKC7sABNfDAATX+wAE6PwABwACMc8AA974AAAABA8ABNgjAATo/AAAABAQEwAE2EAAAAJazYAPAAQACAMABNhsAAABqYAPAAP4bAMABNiYAAACCkGADwAD+GwDAATZjAAAAwAB92V0DwAD+8QJgA8ABAAJbAABgA8ABAAIBPgdJwAE2eiEcwAE2hIDAATZ+wIGWJ0gBAAErAMABABE+AknAATaVIRzAATapg8ABNpnAgZZWSAEAASsAwAD/dT4BPTDAATa8H8ABNsLAAP1OAQABJ8AAjHQAP0rAATcLAR7AATcSwAEBFgUABIDAATcowIGWJ4HAATcvwIGWN4LAATc2wIGWRmrAATc7XQPAAP6/AWADwAD+G8AB5zYBwACMcSk/ScABN3kcwAE3jYPAATd9wIGWVkgBAAErAMAA/3VKwAE3lgErP07AATeswAE3swAAgXZgA8ABAEwBH8ABN7XAAQBrAAAAAE7AATfNwAE31wAAgbFgA8ABAAIBJwBPwAE34sABN+cAAAHAAIx1YQMCYAPAAQACYAPAAQACXAADwAE39cABOQgAAAACAgLAATf9AAAAg9ZgA8ABAAIAwAE4CQAAAICWYAPAAQACAABcAT4EPRzAATgfhMABOBjAgZdDgo4BAAGFwAE4JcCBl2QAwAEAYD2NwAE4N8CBl2Qng3w9HMABOFWEwAE4TsCBl0OCjgEAAR7AAThfwAEAtAEAAYfAATh0wIGXqQAAwAEAYEnAATiBIiEcwAE4ixTAATiFwIGXuQgASAEAASsAwAEAEQAWwAE4nBTAATiWwIGXuQgAg7fAAQAJPgI9HMABOLmEwAE4ssCBl0OCjgEAASeAvADAAQBgPRzAATjUhMABOM3AgZdDgo4BAAEewAE43sABALQBAAEUwAE488CBl7kIAAAAwAEAYD89HMABOR+DwAE5D8CBllaD/QEAATTAATknA8ABOSfAATocAAAAAgICwAE5KAAAAIPWYAPAAQACAMABOS0AAACAllsAAGADwAD/JQE+AUnAATk8IhzAATlGFMABOUDAgZjsCABIAQABKwDAAP91ASXAATlXFMABOVHAgZjsCABgA8ABAAI+AT0cwAE5eobAATlswIGXfiACAAKHwAE5e8CBmNwmwAE5gAEUwAE5gMCBmOwIAGADwAEAAgAAPgJOwAE5qMABOa8AACldA8AA/n0BWwEmwAE5qAEUwAE5scCBmOwIAF0DwAD+fQFbRsABOcDAATndAAAAAQBbABTAATnVwIGZcgkAPgJOwAE5zAAAAICWYAPAAQACASbAATnAARTAATnMwIGZqAoAYAPAAQACPRzAATn3hsABOenAgZd+IAIAAofAATn4wIGY3BTAATn9wIGZvQsAAAAAwAD/EErAATojARzAAToxhMABOirAgZdDIwAAAADAAQBlBsABAROC7sABOkTAATpSwAE7GQABwACMdsAA974AAAABA8ABOl/AATsZAAAAAwMDwAE6ZwAAAJa0YAPAAQACAMABOnUAAABqYAPAAP4bAMABOoAAAACCkGADwAD+GwAAYAPAAQACAT4CScABOoscwAE6mIDAATqPwIGaX0gBAAErAMABABFKwAE6oQErP0rAATqyAR7AATq5wAEBFgUABIDAATrPwIGaX4HAATrZwIGab4LAATrgwIGafmrAATrlXQPAAP6/AWADwAD+G8AB5zYBwACMcSkGwAEBFILuwAE9c8ABPYHAAUHDAAHAAIx3wAD3vgAAAAEDwAE9kcABQcMAAAADAwPAAT2ZAAAAg0pgA8ABAAIAwAE9pQAAACdgA8AA/hsAwAE9sQAAAMAAjHhgA8AA/FUAAGADwAEAAgE+C0AcwAE94hzAAT3QgMABPcnAgZs2hBABAAGBwAE928CBm0YAwAEAEEgBAAFqwAE95WADwAD+G8AAY1EAwAD/P8ABPcnAAT3tAEnAAT30HMABPgIcwAE9/oHAAT34wIGbRmQBAAGVAMAA/0GBbQEAARbAAT4MgMABPgXAgZs2YcABAAYAwAD/TD4BSsABPhwBJ5YJP07AAT5WwAE+YQAAwABwCmADwAD+GwEcwAE+aoDAAT5jwIGbNoQQAQABHMABPnuBwAE+dcCBm0ZkAQABlADAAP9BAMABABBOwAE+icABPpUAAMAAcAtgA8AA/hsBHMABPp6AwAE+l8CBmzaEEAEAARzAAT6v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wAKJ1sCCRF7AAIzawAD3vsABAWFkAQABFMACiejAglVgCgAAwAD/QRzAAooKFsACifuBwAKJ98CCRF7AAIzbwAD3vsABAWJkAQABFMACigzAglVgCgAAwAD/QRbAAooggMACihvAgkROwACM3MAA977AAQFjAAbAAQGPgu7AAoo2wAKKPcACjHMAAIG/AAAAAQPAAopHwAKMcwAAAAEAAAHAAopOAAAAgf5gA8AA/FUBagBgA8AA/yV5YAPAAQACAT4EScACil4iHMACim0WwAKKYi7AAIzWwAD3vsABAV2BbQEAAZMAwAD/TAAhFsACinYuwACM3cAA977AAQFtPgE9MMACiocfwAKKjcAA/a0BAAEkwAKKzQMnwACMlxbAAorCLoG8wAEBdCfAAIyYAD9JwAKK2hzAAorqFsACit4uwACM2sAA977AAQFhYwEAARbAAorxFsACiuwuruLAAPe+wAEBXGHAAQAGAMAA/0k+AknAAosBHMACixEWwAKLBS7AAIzawAD3vsABAWFjAQABFsACixMuwACM28AA977AAQFiAMAA/0k+AT0wwAKLLR/AAoszwAD9rQEAASfAAIyZAD89MMACi6AfwAKLpsAA/a0BAAEnwACMmgA/PSMcwAKMGIDAAowQwIJXbUgBAAErAMAA/3WIwAKMEMCCV20awAKMIcABAN4rAWADwAD8VUrAAowxASOAwAKMOMCCV20ewAKMR8ABASABAAEuABzAAoxiLsAAjJvAAPe+AAAAAMABAYcBYAPAAQACBsABAYeC7sACjHjAAox/wAKNfQAAwACMm8AA974AAAABA8ACjIrAAo19AAAAAAAAAGADwAEAAgE+AknAAoyTHMACjKIWwAKMly7AAIzXwAD3vsABAV5jAQABFsACjKQuwACM2MAA977AAQFfAMAA/0k+AT0wwAKM4x/AAozpwAD9rQEAASQAAifAAIycJ8AAjJ0AP0rAAo1pARbAAo11Lk7AAQF5BsABAYCC7sACjYLAAo2OwAKNxgEAEgAAAAEDwAKNk8ACjcYAAAAAAAAAYAPAAQE2AT4CQCEcwAKNpxbAAo2gLoG8wAEBdEgBAAEnEgDAAQARwAKNoMACjbAASsACjbcBKwbAAQGBgu7AAo3LwAKN08ACjf8BAIPGAAAAAQPAAo3cwAKN/wAAAAAAAABgA8AA/hsB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AI0fYAPAAP4bARzAAlJnh8ACUmLAgpjkSwEAARTAAlJowIKZGAgAAMAA/s49i8ACUnPAgpfvHMACUoYUwAJSe8CCmY0JAIN8AQABNx8AwAD+Mz0cwAJSmYTAAlKSwIKX/4C/AgACHMACUqUUwAJSmsCCmY0JAIPBAQABNwUAwAD+OIbAAlKtwIKYgwDAAP7PSsACUrYBg8ACUr3AgpfvBsAA9/qC7sACkmvAApJvwAKT9gABwACNJsAA974AAAABA8ACkn7AApP2AAAAAgICwAKShgAAAIGyYAPAAQACAMACkpAAAABqYAPAAP4bAABgA8AA/hsBPgZOwAKS58ACku0AAJuGYAPAAP4bARzAApMVHMACkwscwAKS9YDAApLwwIKaZ4QQAQABHMACkwaBwAKTAMCCmndkAQABlwDAAP9BAMABABCDwAEAAWrAApMNYAPAAP4blw8AwAD+NYONAQABlgDAAP9DPYrAApMcwIKakRzAApMigsACkxzAgpqRgQYBAAEcwAKTPBzAApMqgMACkyXAgppnhBABAAGBwAKTNcCCmncAwAEAEIPAAQABN2QAwAD+NQDAAP40PYrAApNMwIKakRzAApNSgsACk0zAgpqRgQYBAAEcwAKTcBzAApNagMACk1XAgppnhBABAAEcwAKTa4HAApNlwIKad2QBAAGUAMAA/0EAwAEAEIPAAQABN2EAwAD+NQDAAP40PYrAApOAwIKakRzAApOGgsACk4DAgpqRgQYBAAEcwAKTpBzAApOOgMACk4nAgppnhBABAAEcwAKTn4HAApOZwIKad2QBAAGVAMAA/0EAwAEAEIPAAQABN3QAwAD+NQDAAP40PYrAApO0wIKakRzAApO6gsACk7TAgpqRgQYBAAEcwAKT2BzAApPCgMACk73AgppnhBABAAEcwAKT04HAApPNwIKad2QBAAGWAMAA/0EAwAEAEIPAAQABN2EAwAD+NQDAAP40SsACk+gBgsACk+/AgpqRBsAA9/uC7sAClELAApRGwAKUgQABwACNJ8AA974AAAABA8AClFnAApSBAAAAAQEBwAKUYQAAAIh7YAPAAQACAABgA8AA/hsBSsAClGcBIxzAApRqgMAClGjAgpy8SAEAASsAwAEAEZMWwAKUe4DAApR5wIKcvGHAAQAGAWADwAD+G0CCJ4KzgrSCtYK2greC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wABBe2ADwAD8CMAB6b9gA8ABAAIBasAAQcdgA8ABAALAAehqBMABAgiC8sAAQhjAAEI1BsAAjaQBasAAQd5gA8AA/AjAAenTYAPAAQACAWrAAEIlYAPAAQACwAHobwTAAQIJgvLAAEJ5wABCoQbAAI2mAWrAAEI6YAPAAPwIwAHp52ADwAEAAgFqwABCjGADwAEAAsAB6HQEwAECCoLywABC5cAAQw0GwACNqAFqwABCpmADwAD8CMAB6ftgA8ABAAIBasAAQvhgA8ABAALAAeh5BMABAguC8sAAQ0/AAENzBsAAjaoBasAAQxJgA8AA/AjAAeoPYAPAAQACAWrAAENgYAPAAQACwAHofgTAAQIMgvLAAEO3wABD3wbAAI2sAWrAAEN4YAPAAPwIwAHqI2ADwAEAAgFqwABDymADwAEAAsAB6IMEwAECDYLywABEHsAARDwGwACNrgFqwABD5GADwAD8CMAB6jdgA8ABAAIBasAARCxgA8ABAALAAeiIBMABAg6C8sAARH3AAESfBsAAjbABasAAREFgA8AA/AjAAepLYAPAAQACAWrAAESNYAPAAQACwAHojQTAAQIPgvLAAETfwABE/wbAAI2yAWrAAESkYAPAAPwIwAHqX2ADwAEAAgFqwABE7mADwAEAAsAB6JIEwAECEILywABFOMAARUkGwACNtAFqwABFBGADwAD8CMAB6nNgA8ABAAIBasAART9gA8ABAALAAeiXBMABAhGC8sAARYLAAEWTBsAAjbYBasAARU5gA8AA/AjAAeqHYAPAAQACAWrAAEWJYAPAAQACwAHonATAAQISgvLAAEXOwABF4wbAAI24AWrAAEWYYAPAAPwIwAHqm2ADwAEAAgFqwABF12ADwAEAAsAB6KEEwAECE4LywABGH8AARjYGwACNugFqwABF6GADwAD8CMAB6q9gA8ABAAIBasAARilgA8ABAALAAeimBMABAhSC8sAARm/AAEaABsAAjbwBasAARjtgA8AA/AjAAerDYAPAAQACAWrAAEZ2YAPAAQACwAHoqwTAAQIVgvLAAEa5wABGygbAAI2+AWrAAEaFYAPAAPwIwAHq12ADwAEAAgFqwABGwGADwAEAAsABNb0EwAECFoLywABHBsAARx4GwACNwAFqwABGz2ADwAD8CMAB6utgA8ABAAIBasAARxFgA8ABAALAAeiuBMABAheC8sAAR2LAAEeLBsAAjcIBasAARyNgA8AA/AjAAer/YAPAAQACAWrAAEd2YAPAAQACwAHoswTAAQIYgvLAAEfLwABH7AbAAI3EAWrAAEeQYAPAAPwIwAHrE2ADwAEAAgFqwABH22ADwAEAAsAB6LgEwAECGYLywABIKMAASEAGwACNxgFqwABH8WADwAD8CMAB6ydgA8ABAAIBasAASDNgA8ABAALAAei9BMABAhqC8sAASIbAAEizBsAAjcgBasAASEVgA8AA/AjAAes7YAPAAQACAWrAAEicYAPAAQACwAHowgTAAQIbgvLAAEj0wABJFgbAAI3KAWrAAEi4YAPAAPwIwAHrT2ADwAEAAgFqwABJBGADwAEAAsAB6McEwAECHILywABJU8AASWwGwACNzAFqwABJG2ADwAD8CMAB62NgA8ABAAIBasAASV5gA8ABAALAASZuBMABAh2C8sAASazAAEnMBsAAjc4BasAASXFgA8AA/AjAAet3YAPAAQACAWrAAEm7YAPAAQACwAHozATAAQIegvLAAEoHwABKHAbAAI3QAWrAAEnRYAPAAPwIwAHri2ADwAEAAgFqwABKEGADwAEAAsAB6NEEwAECH4LywABKYsAASo4GwACN0gFqwABKIWADwAD8CMAB659gA8ABAAIBasAASndgA8ABAALAAejUBMABAiCC8sAAStXAAEsDBsAAjdQBasAASpNgA8AA/AjAAeuzYAPAAQACAWrAAErrYAPAAQACwAHo2QTAAQIhgvLAAEs9wABLUAbAAI3WAWrAAEsIYAPAAPwIwAHrx2ADwAEAAgFqwABLRWADwAEAAsAB6N4EwAECIoLywABLjMAAS6MGwACN2AFqwABLVWADwAD8CMAB69tgA8ABAAIBasAAS5ZgA8ABAALAAejjBMABAiOC8sAAS+LAAEwABsAAjdoBasAAS6hgA8AA/AjAAevvYAPAAQACAWrAAEvwYAPAAQACwAHo6ATAAQIkgvLAAEw7wABMUAbAAI3cAWrAAEwFYAPAAPwIwAHsA2ADwAEAAgFqwABMRGADwAEAAsAB6O0EwAECJYLywABMh8AATJQGwACN3gFqwABMVWADwAD8CMAB7BdgA8ABAAIBasAATIxgA8ABAALAAejyBMABAiaC8sAATNDAAEznBsAAjeABasAATJlgA8AA/AjAAewrYAPAAQACAWrAAEzaYAPAAQACwAHo9wTAAQIngvLAAE0swABNVgbAAI3iAWrAAEzsYAPAAPwIwAHsP2ADwAEAAgFqwABNQGADwAEAAsAB6PwEwAECKILywABNksAATakGwACN5AFqwABNW2ADwAD8CMAB7FNgA8ABAAIBasAATZxgA8ABAALAAekBBMABAimC8sAATefAAE4DBsAAjeYBasAATa5gA8AA/AjAAexnYAPAAQACAWrAAE30YAPAAQACwAHpBgTAAQIqgvLAAE48wABOTQbAAI3oAWrAAE4IYAPAAPwIwAHse2ADwAEAAgFqwABOQ2ADwAEAAsAB6QsEwAECK4LywABOhcAATpQGwACN6gFqwABOUmADwAD8CMAB7I9gA8ABAAIBasAATotgA8ABAALAAekQBMABAiyC8sAATtDAAE7nBpVVAWrAAE6ZYAPAAPwIwAHso2ADwAEAAgFqwABO2mADwAEAAoODBMABAi2C8sAATyvAAE9TBsAAje0BasAATuxgA8AA/AjAAey3YAPAAQACAWrAAE8+YAPAAQACwAHpFQTAAQIugvLAAE+IwABPnwbAAI3vAGADwAEAAgFqwABPl2ADwAEAAsAB7MYEwAECL4LywABPsMAAT84GwACN8QBgA8ABAAIBasAAT8JgA8ABAALAAezLBMABAjCC8sAAUArAAFAfBsAAjfMBasAAT9RgA8AA/AjAAezVYAPAAQACAWrAAFATYAPAAQACwAHsxgTAAQIxgvLAAFBdwABQeQbAAI31AWrAAFAkYAPAAPwIwAHs6WADwAEAAgFqwABQamADwAEAAsAB7MsEwAECMoLywABQi8AAUVoGwACN9wBdA8AA/r8BYAPAAQACAWrAAFCcXQPAAP6/AWADwAEAAsAB7PgEwAECM4LywABRmMAAUbgGwACN+AFqwABRYGADwAD8CMAB7SddA8AA/r8BYAPAAQACAWrAAFGqXQPAAP6/AWADwAEAAsAB7PgEwAECNILywABRysAAUs8GwACN+gBdA8AA/r8BYAPAAQACAWrAAFHaXQPAAP6/AWADwAEAAsAB7TYEwAECNYLywABTDMAAUyoGwACN+wFqwABS1WADwAD8CMAB7WtdA8AA/r8BYAPAAQACAWrAAFMdXQPAAP6/AWADwAEAAsAB7TYEwAEC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A8ABAu4BPwMIAMABAvCAAMCC38gIAMABAvKBAMCC39cJAADAAP9+AAAAAAEGwAEC+ILywAESw8ABEsPAARhJAAAjAAAAAQPAARLDwAEYSQAAAAAAAABgA8ABAAIBSgABDwAuwAEC8gAAguAUAILgTwAAAAECwAEC+4LywAEYTMABGFvAARhyB8AAjkoAAAFgAcAA/2gAAAABBcABAv0AAAAABAAAAwAAAAAAAAAAAGADwAEC+wE/AQkBAMAA/34AAAAAAAAAguCsAAAAAALAAQL+gvLAARixwAEYwMABGYAHwACOSwAAAWABwAEC+wAAAAABBsABAwCC8sABGP3AARkFwAEZfgQBAAAAAAEDwAEZH8ABGX4AAAACAgLAARknAAAAwACOTGADwAEAAgDAARk4AAAAwACByWADwAEAAgAAYAPAAQL+AUrAARlLAR/AARlPwAEGogIAAoDAARlrwILhBIHAARl1wILhFgAAAILg2wCC4VUAAAABAsABAwGC8sABGlHAARpgwAEbIwfAAI5NAAABYAHAAQL7AAAAAAEGwAEDA4LywAEansABGqbAARshBAEAAAAAAQPAARrBwAEbIQAAAAICAsABGskAAADAAI5MYAPAAQACAMABGtoAAADAAIHJYAPAAQACAABgA8ABAwEBSsABGu0BH8ABGvHAAQauAgACgMABGw7AguGxgcABGxjAguHDAAAAguGIAILiAgAAAAECwAEDBILywAEbocABG7DAARwVB8AAjk4AAAFgAcAA/2gAAAABBcABAwoAAAAABAAAAwAAAAAAAAAAAGADwAEDBAE/AQkBAMAA/34AAAAAAwbAAQMGgvLAARvHwAEb28ABG+gBAp6oAAAAAQPAARvowAEb6AAAAAAAAABgA8AA9ggABsABAweC8sABG+zAARv0wAEb/gECnqkAAAABA8ABG/7AARv+AAAAAAAAAGADwAD+GwAGwAEDCILywAEcAsABHArAARwTAQLAAIDnAAAAAQPAARwTwAEcEwAAAAAAAABgA8AA/hsAAACC4l8AguKRAILiwwCC4vcAAAADAsABAwuC8sABHDnAARxIwAEdSwfAAI5PAAABYAHAAP9oAAAAAQXAAQMRAAAAAAQAAAMAAAAAAAAAAABgA8ABAwsBPwEJAQDAAP9+AAAAAAMGwAEDDYLywAEcmcABHKHA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A8AA/vECYAPAAQACYAPAAQACASsBBcABA8mC98AAQlbAAEJWwABDAQAAAAPAAEJiwABDAQAAAAIAAsAAQmkAAASXYWADwAEAAgFqwABCcmADwAEAAoQowABCigAAAJrqXQPAAP7xAmADwAEAAmADwAEAAgFqAGADwAD/JXkAYAPAAQO5AT4BScAAQp0hHMAAQqyBwABCocCDfnNIAQABKwDAAP91PgE9F8AAQr0uwAB5wsABAZwewABCz8AAwtABAmADwAEAAmADwAEAAgGBwABC7MCDfnMAwAEDvT8CCAHAAQO8gADAg35WCQHAAEJWwAD/fgAAAAAGBsABA8CC98AAQwbAAEMawABEMQABgwsAAAABA8AAQx/AAEQxAAAABAEBwABDJwAAAICWYAPAAQACAAPAAEM1AAAAwACOCFsBasAAQ0lgA8ABAALAALyEwABDVAAAAMAAjglbAWrAAENkYAPAAP8lecAAQ3AAAADAAI4KWwFqwABDg2ADwAD8VQBgA8ABA7kBPgNOwABDrsAAQ7UAAIF2YAPAAQO5AR/AAEO7wAEDyQAAAAA9HMAAQ9aEwABDz8CDf6jAAICrwAEBnAQABIDAAEPdwIN/PybAAEPkAYHAAEPkwIN/UGADwAEAAibAAEP4AYLAAEP4wIN/bGADwAEAAibAAEQIAYPAAEQIwIN/hWADwAD8VQDAAQPDSsAARCABhMAARCfAg3+oBsABA8aC98AARDbAAERBwABEUAEAgJYAAAABA8AAREfAAERQAAAAAAAAAGADwAEAAgFKwABESgEWwABESi6XYcABAZzAAQO8BsABA8KC98AARFXAAERawABEygAAwACO9cABAZwAAAABA8AARGvAAETKAAAAAAAAAFwBPgFJwABEdBzAAESEFsAARHguwAB5wsABAZzAAQO9SAEAASsAwAD/dT4BPRfAAESVLsAAecLAAQGcHsAARKfAAMLOAAJgA8ABAAJgA8ABAAIAAMABA70/BsABA8eC98AARM/AAETnwABFqgEAmuoAAAABA8AARPLAAEWqAAAAAAAAAF0DwAD+8QJgA8ABAAJgA8ABAAIBPgM9HMAARPguwACO9cABAZwAAAAAwAEDwknAAEURHMAARS0WwABFFS7AAI70wAEBnMABA75IAQABKwDAAP91PgE9F8AART4uwACO9MABAZwf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wAEEzj9HwABwAIDAAHAIwIQYdSkBwABwLGrAAHAsYAPAAP4bwACcVwA+AUrAAHA/ASetrwHAAHBoasAAcGhgA8AA/hvAAJxaAD4BSsAAcIQBJ8AAj2wBwABwuGrAAHC4YAPAAP4bg0YAPgFKwABwxAEnwAB3MgHAAHDnasAAcOdgA8AA/hvAAY63AD4BSsAAcPgBJ8AAj20BwABxIGrAAHEgYAPAAP4bwAGOuwA+AUrAAHEyASfAAI9uAcAAcVtqwABxW2ADwAD+G8ABjr8APgFKwABxgAEnwACPbwHAAHG+asAAcb5gA8AA/hvAAY7DAD4BSsAAcdEBJ8AAj3ABwABx/GrAAHH8YAPAAP4bwAGOxwA+AUrAAHISASfAAI9xAcAAckBqwAByQGADwAD+G8ABjssAPgFKwAByWAEnwACPcgHAAHKIasAAcohgA8AA/hvAAY7bAD4BSsAAcqEBJ8AAj3MBwABy0mrAAHLSYAPAAP4bwAGO3wA+AUrAAHLsASfAAI90AcAAcx5qwABzHmADwAD+G8ABjuMAPgFKwABzLQEnwACPdQHAAHNTasAAc1NgA8AA/hvAAY7nAD4BSsAAc2UBJ8AAj3YBwABzj2rAAHOPYAPAAP4bwAGO6wA+AUrAAHOkASfAAI93AcAAc9FqwABz0WADwAD+G8ABju8APgFKwABz4wEnwACPeAHAAHQNasAAdA1gA8AA/hvAAY7zAD4BSsAAdCgBJ8AAj3kBwAB0W2rAAHRbYAPAAP4bwAGO+wA+AUrAAHRvASfAAI96AcAAdJtqwAB0m2ADwAD+G8ABjv8APgFKwAB0sQEnwACPewHAAHTeasAAdN5gA8AA/hvAAY8DAD4BSsAAdPcBJ8AAj3wBwAB1KGrAAHUoYAPAAP4bwAGPBwA+AUrAAHU7ASfAAI99AcAAdWVqwAB1ZWADwAD+G8ABjwsAPgFKwAB1dwEnwACPfgHAAHWhasAAdaFgA8AA/hvAAY8PAD4BSsAAdbsBJ8AAj38BwAB17mrAAHXuYAPAAP4bwAGPEwA+AUrAAHYFASfAAI+AAcAAdjRqwAB2NGADwAD+G8ABjxcAPgFKwAB2WQEnwACPgQHAAHaXasAAdpdgA8AA/hvAAY8bAD4BSsAAdq8BJ8AAj4IBwAB24GrAAHbgYAPAAP4bwAGPHwA+AUrAAHbyASfAAI+D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88ABED7AARBZwAETtgAAwACPOMABAZwAAAABA8ABEGzAARO2AAAAAwMDwAEQewAAAJacYAPAAQACAMABEIcAAACArGADwAEAgwDAARCfAAAAnV5gA8ABBOcAAF0DwAC64wFgA8ABBOcBPgJOwAERKsABETMAAK5lYAPAAQCDARzAARFCFsABET6CwAERNcCEqTqArMABBOqDQgEAAYHAARFNwISpKgDAAQCvSsABEVcBHMABEXkcwAERXi7AAI/9wAEBnAIAAoDAARFnwISpGoPAARFvwISpXADAAQWkga8BAWADwAEE5wE0wAERfgPAARF+wAETsQAAAAEBAcABEZIAAACDVmADwAEE5wAAYAPAAQTnAT4DPTXAARGjAAABAGADwAEE5wGEwAERo8CEqe01AAAAAQBbARfAARHuhcABEezAhKoJwACOPBbAARIJgsABEgDAhKk6wACOPMABBPjAAQUDNQAAAAEAWwEXwAESToXAARJMwISqCcAAjj0WwAESZoLAARJdwISpOsAAjj3AAQT3wAEFAoUAwISqCUbAARKRwAESxMABEpoAAACZzGADwAEAAgAWwAESvhbAARK1FsABEq2CwAESpMCEqTqeqsABBLfAAI7GwAEBnMABA3mDaMAA/xM+AUnAARLOHMABEuocwAES4RbAARLahMABEtLAhKntnqrAAQS3SwEAAYXAARLiwISqmADAAQOESAEAASsAwAD+6T4BPRzAARMPFsABEweEwAES/8CEqe2eqsABBLeXeQIAAoXAARMTwISqmBzAARMrFsABEySCwAETG8CEqTqeqsABBLdLAQABhcABEyzAhKqYAMABA4QAwAEDnD9KwAETTgE1wAETVQAAAQBgA8ABBOcBhMABE1XAhKntNQAAAAEAWwEXwAETbxbAARNnhcABE2XAhKt7nqrAAQS3wACOBSrAAQOwNQAAAAEAWwEXwAETmYXAAROXwISre8AAjgSTwAEEwIUAwISrewDAALr2BsABBaaC88ABE+vAARPwwAEUiAAAwACP0cABAZwAAAABA8ABFAHAARSIAAAAAQEBwAEUGAAAAMAAhS9gA8ABBTcAAFwBPgI9HMABFE0cwAEUPBbAARQqLsAAj/jAAQGcwAEFe0sBAAEWwAEUSIDAARQ9wISsF4PWwAEFOQDAAP8FwACP6QEAAYDAARRe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hcABIeHAhLm0AMABABM+AUrAASH1ASfAAJALP0rAASIeAStPwAEiNsABIjYAAAHAAJAMYQMBYAPAAQACYAPAAQACAAPAASJAwAEk1AAAAAEBAcABIkgAAACDK2ADwAEAAgAAYAPAAQACAT4JScABIlgcwAEiY4TAASJcwIS61kgBAAErAMABABFKwAEibAErPz2MwAEif8CEutYcwAEij4TAASKIwIS61oHjAAAAAMABABlJwAEinRbAASKohMABIqHAhLrWgVXAAQAISsABIrEBKz9OwAEiyMABIswAAKA1YAPAAP4bARzAASLVhMABIs7AhLrWgLsBAAEnwACMlgDAAQAVScABIuscwAEi84XAASLvwIS7WYFtAQABkwDAAP9MPgE9jMABIwPAhLrWHMABIxOEwAEjDMCEutaAvgEAARzAASMhhcABIx3AhLtZZAEAAZYAwAD/QQDAAQAYPz2NwAEjNcCEu1kcwAEjQoTAASM7wIS61oC7AQABJ1AAwAEAFUnAASNWHMABI16FwAEjWsCEu1mBbQEAAZMAwAD/TD4BPYzAASNuwIS61hzAASN+hMABI3fAhLrWgL4CAAKThcABI4vAhLtZAMABABg/ScABI9AcwAEj6BzAASPbhMABI9TAhLrWgLsBAAEnmfIAwAEAFUgBAAGTAMAA/z8+Ak7AASP8wAEkAAAAoDVgA8AA/hsBHMABJAmEwAEkAsCEutaWtQEAASeC6gDAAQAWScABJCMcwAEkOxzAASQuhMABJCfAhLrWgLsBAAEnmfMAwAEAFYCXAQABhsABJD3AhLyHAMAA/0s9jMABJELAhLrWJMABJFkChMABJE3AhLrWJ8AAkA0/PgFJwAEkchzAASSKHMABJH2EwAEkdsCEutaAuwEAASeC6gDAAQAVSAEAARzAASSNlIHGAAAAAMAA/j4AwAD/Pz2MwAEkkcCEutYkwAEkqAKEwAEknMCEutYnwACQDT9KwAEkuAEkwAEkzgInwACQDoTAASTHwIS61knAASUUHMABJSSBwAElGMCEuGFIAQABKwDAAP91PYnAASUtwIS4YRrAASU7wAEFhD9OwAElYgAAAMAAkA9gA8ABAAIATsABJXjAASWAAADAAJAQYAPAAQACARzAASWNgcABJYLAhLhhSwEAASfAAJARAMAA/wVJwAElnxzAASWrhcAB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CcAAjx7AAQGcAGADwAEF9gAEwAEFzYLzwAEqHMABKicJwACPvsABAZwAYAPAAQcgAATAAQXOgvPAASovwAEqPRjAAGUZwAEBnABgA8AA/hsBasABKjhgA8AA/hsVBMABBc+C88ABKlTAASphGJyowAEBnABdA8AAu9ABWwErBMABBdCC88ABKmrAASp7GMAAkB7AAQGcAGADwAD8VQEqBMABBdGC88ABKobAASqTGMAAj8PAAQGcAF0DwAC64wFbASsBBcABBeOC88ABKpjAASqYwAEyWgAAAAPAASqnwAEyWgAAAAICAsABKq0AAATAAIF2WwDAASq7AAAEwACPHmADwAEF9gAAYAPAAQXDAT4DPRzAASsQGsABKwTAAQXKgL8CAAIWwAErES7AAICywAEBnMABA/ouAMAA/wY9HMABKzUWwAErKS7AAI++wAEBnMABBc3AAI/EAQABJsABK0QBFsABK0QuwACBdsABAZzAAQXLXQPAALuXAWADwADlOQDAAQdDPRfAAStSLpyowAEBnBzAAStuFsABK2IuwACPvsABAZzAAQXNgfoDAAE0wAErdQPAASt1wAExuAAAAAEBAcABK3YAAADAAI+aYAPAAQQaAABgA8AA/yUBPgs9HMABK5QWwAEriC7AAI8ewAEBnMABBczAAJAfwAEBnAEAAS4AwAEGDz0cwAEr+hbAASvxgsABK+jAhMbTwACPGMABBCqBrwEBWwE0wAEr/wPAASv/wAEsMgAAAAEBAcABLAAAAAC1hVsAAGADwAD/JQE+AUnAASwTJsABLBcBg8ABLBfAhMdOYAPAAPxVPRzAASwgLsAAgIgAAAAAwAEF1D8AwAC69j0cwAEswRbAASyzLpyowAEBnMABBc+B/AAAAADAALvWPRfAASzQLsAAZRnAAQGcasABLNlgA8AA/hsJwAEFzk7AASzswAEs9QAAwACPV2ADwAEFEAEfwAEs+8ABBTYBAAEmwAEtCQEWwAEtCS7AAIF2wAEBnMABBctgA8AA9rIATsABLR3AAS0mAACDV2ADwAEEygEfwAEtLMABBOYFAAUWwAEtToLAAS1FwITG04CswAEEJhbAAS1uFsABLWaCwAEtXcCExtOeqsABBCHAAI4fwAEDgoPAAS2JwITH1hbAAS2pFsABLZ0uwACPHsABAZzAAQXMwACNOcABBgMW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71MAhgDoAIYKXgCGIdMAhi9UAIYyOwCGXs4AAABgAIZhawCGYmUAAAABAAAC/AAAAAAmc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2Jpbi9kYXJ0MmpzLmRhcnSCky8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gRW50cnlwb2ludCB0byBydW4gdGhlIGNvbXBpbGVyLiBUaGlzIGVudHJ5cG9pbnQgaXMgY3VycmVudGx5IG9ubHkgdXNlZCBieQovLy8gZGFydDJqcyBkZXZlbG9wZXJzLiBUbyBydW4gdGhlIGNvbXBpbGVyIHlvdSBub3cgY2FuOgovLy8gICAqIGNhbGwgYHB1YiBnZXRgIGluIHRoZSBwa2cvY29tcGlsZXIgZm9sZGVyLgovLy8gICAqIHNpbXBseSBjYWxsIGBkYXJ0IHBhdGgtdG8tcGtnL2NvbXBpbGVyL2Jpbi9kYXJ0MmpzLmRhcnQgZm9vLmRhcnRgCi8vIFRPRE8oc2lnbXVuZCk6IG1vdmUgYG1haW5gIGhlcmUsIGFuZCBjaGFuZ2Ugb3VyIHNkayBidWlsZCB0b29scyB0byBqdXN0IHVzZQovLyB0aGlzIGVudHJ5cG9pbnQgaW5zdGVhZC4KbGlicmFyeSBjb21waWxlci5iaW4uZGFydDJqczsKCmV4cG9ydCAncGFja2FnZTpjb21waWxlci9zcmMvZGFydDJqcy5kYXJ0JzsKDwBOTjwBTjkzSk8cHgEsASZzZGtyb290Oi9wa2cvY29tcGlsZXIvYmluL2RhcnQyanMuZGFydCpzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9kYXJ0MmpzLmRhcnTAAKOaLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5jbWRsaW5lOwoKaW1wb3J0ICdkYXJ0OmFzeW5jJyBzaG93IEZ1dHVyZTsKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnIHNob3cgdXRmOCwgTGluZVNwbGl0dGVyOwppbXBvcnQgJ2RhcnQ6aW8nIHNob3cgZXhpdCwgRmlsZSwgRmlsZU1vZGUsIFBsYXRmb3JtLCBzdGRpbiwgc3RkZXJyOwppbXBvcnQgJ2RhcnQ6aXNvbGF0ZScgc2hvdyBJc29sYXRlOwoKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Vuc3RhYmxlL2RhcnQyanMuZGFydCcgYXMgZmU7CgppbXBvcnQgJy4uL2NvbXBpbGVyX25ldy5kYXJ0JyBhcyBhcGk7CmltcG9ydCAnY29tbWFuZGxpbmVfb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICdmaWxlbmFtZXMuZGFydCc7CmltcG9ydCAnb3B0aW9ucy5kYXJ0JyBzaG93IENvbXBpbGVyT3B0aW9uczsKaW1wb3J0ICdzb3VyY2VfZmlsZV9wcm92aWRlci5kYXJ0JzsKaW1wb3J0ICd1dGlsL2NvbW1hbmRfbGluZS5kYXJ0JzsKaW1wb3J0ICd1dGlsL3V0aWwuZGFydCcgc2hvdyBzdGFja1RyYWNlRmlsZVByZWZpeDsKCmNvbnN0IFN0cmluZyBfZGVmYXVsdFNwZWNpZmljYXRpb25VcmkgPSAnLi4vLi4vLi4vLi4vc2RrL2xpYi9saWJyYXJpZXMuanNvbic7CmNvbnN0IFN0cmluZyBPVVRQVVRfTEFOR1VBR0VfREFSVCA9ICdEYXJ0JzsKCi8vLyBBIHN0cmluZyB0byBpZGVudGlmeSB0aGUgcmV2aXNpb24gb3IgYnVpbGQuCi8vLwovLy8gVGhpcyBJRCBpcyBkaXNwbGF5ZWQgaWYgdGhlIGNvbXBpbGVyIGNyYXNoZXMgYW5kIGluIHZlcmJvc2UgbW9kZSwgYW5kIGlzCi8vLyBhbiBhaWQgaW4gcmVwcm9kdWNpbmcgYnVnIHJlcG9ydHMuCi8vLwovLy8gVGhlIGFjdHVhbCBzdHJpbmcgaXMgcmV3cml0dGVuIGJ5IGEgd3JhcHBlciBzY3JpcHQgd2hlbiBpbmNsdWRlZCBpbiB0aGUgc2RrLgpTdHJpbmcgQlVJTERfSUQgPSBudWxsOwoKLy8vIFRoZSBkYXRhIHBhc3NlZCB0byB0aGUgW0hhbmRsZU9wdGlvbl0gY2FsbGJhY2sgaXMgZWl0aGVyIGEgc2luZ2xlCi8vLyBzdHJpbmcgYXJndW1lbnQsIG9yIHRoZSBhcmd1bWVudHMgaXRlcmF0b3IgZm9yIG11bHRpcGxlIGFyZ3VtZW50cwovLy8gaGFuZGxlcnMuCnR5cGVkZWYgdm9pZCBIYW5kbGVPcHRpb24oTnVsbCBkYXRhKTsKCmNsYXNzIE9wdGlvbkhhbmRsZXIgewogIGZpbmFsIFN0cmluZyBwYXR0ZXJuOwogIGZpbmFsIEhhbmRsZU9wdGlvbiBfaGFuZGxlOwogIGZpbmFsIGJvb2wgbXVsdGlwbGVBcmd1bWVudHM7CgogIHZvaWQgaGFuZGxlKGFyZ3VtZW50KSB7CiAgICAoX2hhbmRsZSBhcyBkeW5hbWljKShhcmd1bWVudCk7CiAgfQoKICBPcHRpb25IYW5kbGVyKHRoaXMucGF0dGVybiwgdGhpcy5faGFuZGxlLCB7dGhpcy5tdWx0aXBsZUFyZ3VtZW50czogZmFsc2V9KTsKfQoKLy8vIEV4dHJhY3QgdGhlIHBhcmFtZXRlciBvZiBhbiBvcHRpb24uCi8vLwovLy8gRm9yIGV4YW1wbGUsIGluIFsnLS1vdXQ9Zmlzay5qcyddIGFuZCBbJy1vaGVzdC5qcyddLCB0aGUgcGFyYW1ldGVycwovLy8gYXJlIFsnZmlzay5qcyddIGFuZCBbJ2hlc3QuanMnXSwgcmVzcGVjdGl2ZWx5LgpTdHJpbmcgZXh0cmFjdFBhcmFtZXRlcihTdHJpbmcgYXJndW1lbnQsIHtib29sIGlzT3B0aW9uYWxBcmd1bWVudDogZmFsc2V9KSB7CiAgLy8gbVswXSBpcyB0aGUgZW50aXJlIG1hdGNoICh3aGljaCB3aWxsIGJlIGVxdWFsIHRvIGFyZ3VtZW50KS4gbVsxXQogIC8vIGlzIHNvbWV0aGluZyBsaWtlICItbyIgb3IgIi0tb3V0PSIsIGFuZCBtWzJdIGlzIHRoZSBwYXJhbWV0ZXIuCiAgTWF0Y2ggbSA9IG5ldyBSZWdFeHAoJ14oLVthLXpBLVpdfC0tLis9KSguKiknKS5maXJzdE1hdGNoKGFyZ3VtZW50KTsKICBpZiAobSA9PSBudWxsKSB7CiAgICBpZiAoaXNPcHRpb25hbEFyZ3VtZW50KSByZXR1cm4gbnVsbDsKICAgIGhlbHBBbmRGYWlsKCdVbmtub3duIG9wdGlvbiAiJGFyZ3VtZW50Ii4nKTsKICB9CiAgcmV0dXJuIG1bMl07Cn0KClN0cmluZyBleHRyYWN0UGF0aChTdHJpbmcgYXJndW1lbnQsIHtib29sIGlzRGlyZWN0b3J5OiB0cnVlfSkgewogIFN0cmluZyBwYXRoID0gbmF0aXZlVG9VcmlQYXRoKGV4dHJhY3RQYXJhbWV0ZXIoYXJndW1lbnQpKTsKICByZXR1cm4gIXBhdGguZW5kc1dpdGgoIi8iKSAmJiBpc0RpcmVjdG9yeSA/ICIkcGF0aC8iIDogcGF0aDsKfQoKdm9pZCBwYXJzZUNvbW1hbmRMaW5lKExpc3Q8T3B0aW9uSGFuZGxlcj4gaGFuZGxlcnMsIExpc3Q8U3RyaW5nPiBhcmd2KSB7CiAgLy8gVE9ETyhhaGUpOiBVc2UgLi4vLi4vYXJncy9hcmdzLmRhcnQgZm9yIHBhcnNpbmcgb3B0aW9ucyBpbnN0ZWFkLgogIHZhciBwYXR0ZXJucyA9IDxTdHJpbmc+W107CiAgZm9yIChPcHRpb25IYW5kbGVyIGhhbmRsZXIgaW4gaGFuZGxlcnMpIHsKICAgIHBhdHRlcm5zLmFkZChoYW5kbGVyLnBhdHRlcm4pOwogIH0KICB2YXIgcGF0dGVybiA9IG5ldyBSZWdFeHAoJ14oJHtwYXR0ZXJucy5qb2luKCIpXCR8XigiKX0pXCQnKTsKCiAgSXRlcmF0b3I8U3RyaW5nPiBhcmd1bWVudHMgPSBhcmd2Lml0ZXJhdG9yOwogIE9VVEVSOgogIHdoaWxlIChhcmd1bWVudHMubW92ZU5leHQoKSkgewogICAgU3RyaW5nIGFyZ3VtZW50ID0gYXJndW1lbnRzLmN1cnJlbnQ7CiAgICBNYXRjaCBtYXRjaCA9IHBhdHRlcm4uZmlyc3RNYXRjaChhcmd1bWVudCk7CiAgICBhc3NlcnQobWF0Y2guZ3JvdXBDb3VudCA9PSBoYW5kbGVycy5sZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoYW5kbGVycy5sZW5ndGg7IGkrKykgewogICAgICBpZiAobWF0Y2hbaSArIDFdICE9IG51bGwpIHsKICAgICAgICBPcHRpb25IYW5kbGVyIGhhbmRsZXIgPSBoYW5kbGVyc1tpXTsKICAgICAgICBpZiAoaGFuZGxlci5tdWx0aXBsZUFyZ3VtZW50cykgewogICAgICAgICAgaGFuZGxlci5oYW5kbGUoYXJndW1lbnRzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaGFuZGxlci5oYW5kbGUoYXJndW1lbnQpOwogICAgICAgIH0KICAgICAgICBjb250aW51ZSBPVVRFUjsKICAgICAgfQogICAgfQogICAgdGhyb3cgJ0ludGVybmFsIGVycm9yOiAiJGFyZ3VtZW50IiBkaWQgbm90IG1hdGNoJzsKICB9Cn0KCkZvcm1hdHRpbmdEaWFnbm9zdGljSGFuZGxlciBkaWFnbm9zdGljSGFuZGxlcjsKCkZ1dHVyZTxhcGkuQ29tcGlsYXRpb25SZXN1bHQ+IGNvbXBpbGUoTGlzdDxTdHJpbmc+IGFyZ3YsCiAgICB7ZmUuSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlIGtlcm5lbEluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZX0pIHsKICBTdG9wd2F0Y2ggd2FsbGNsb2NrID0gbmV3IFN0b3B3YXRjaCgpLi5zdGFydCgpOwogIHN0YWNrVHJhY2VGaWxlUHJlZml4ID0gJyRjdXJyZW50RGlyZWN0b3J5JzsKICBVcmkgbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaSA9CiAgICAgIGN1cnJlbnREaXJlY3RvcnkucmVzb2x2ZSgnbGliL2xpYnJhcmllcy5qc29uJyk7CiAgYm9vbCBvdXRwdXRTcGVjaWZpZWQgPSBmYWxzZTsKICBVcmkgb3V0OwogIFVyaSBzb3VyY2VNYXBPdXQ7CiAgVXJpIHJlYWREYXRhVXJpOwogIFVyaSB3cml0ZURhdGFVcmk7CiAgVXJpIHJlYWRDb2RlZ2VuVXJpOwogIFVyaSB3cml0ZUNvZGVnZW5Vcmk7CiAgaW50IGNvZGVnZW5TaGFyZDsKICBpbnQgY29kZWdlblNoYXJkczsKICBMaXN0PFN0cmluZz4gYmF6ZWxQYXRoczsKICBVcmkgcGFja2FnZUNvbmZpZyA9IG51bGw7CiAgVXJpIHBhY2thZ2VSb290ID0gbnVsbDsKICBMaXN0PFN0cmluZz4gb3B0aW9ucyA9IG5ldyBMaXN0PFN0cmluZz4oKTsKICBib29sIHdhbnRIZWxwID0gZmFsc2U7CiAgYm9vbCB3YW50VmVyc2lvbiA9IGZhbHNlOwogIGJvb2wgdHJ1c3RUeXBlQW5ub3RhdGlvbnMgPSBmYWxzZTsKICBib29sIGNoZWNrZWRNb2RlID0gZmFsc2U7CiAgYm9vbCBzdHJvbmdNb2RlID0gdHJ1ZTsKICBMaXN0PFN0cmluZz4gaGludHMgPSA8U3RyaW5nPltdOwogIGJvb2wgdmVyYm9zZTsKICBib29sIHRocm93T25FcnJvcjsKICBpbnQgdGhyb3dPbkVycm9yQ291bnQ7CiAgYm9vbCBzaG93V2FybmluZ3M7CiAgYm9vbCBzaG93SGludHM7CiAgYm9vbCBlbmFibGVDb2xvcnM7CiAgaW50IG9wdGltaXphdGlvbkxldmVsID0gbnVsbDsKICBVcmkgcGxhdGZvcm1CaW5hcmllczsKICBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50ID0gbmV3IE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKICBSZWFkU3RyYXRlZ3kgcmVhZFN0cmF0ZWd5ID0gUmVhZFN0cmF0ZWd5LmZyb21EYXJ0OwogIFdyaXRlU3RyYXRlZ3kgd3JpdGVTdHJhdGVneSA9IFdyaXRlU3RyYXRlZ3kudG9KczsKCiAgdm9pZCBwYXNzVGhyb3VnaChTdHJpbmcgYXJndW1lbnQpID0+IG9wdGlvbnMuYWRkKGFyZ3VtZW50KTsKICB2b2lkIGlnbm9yZU9wdGlvbihTdHJpbmcgYXJndW1lbnQpIHt9CgogIGlmIChCVUlMRF9JRCAhPSBudWxsKSB7CiAgICBwYXNzVGhyb3VnaCgiLS1idWlsZC1pZD0kQlVJTERfSUQiKTsKICB9CgogIHZvaWQgc2V0TGlicmFyeVNwZWNpZmljYXRpb25VcmkoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICBsaWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpID0KICAgICAgICBjdXJyZW50RGlyZWN0b3J5LnJlc29sdmUoZXh0cmFjdFBhdGgoYXJndW1lbnQsIGlzRGlyZWN0b3J5OiBmYWxzZSkpOwogIH0KCiAgdm9pZCBzZXRQYWNrYWdlUm9vdChTdHJpbmcgYXJndW1lbnQpIHsKICAgIHBhY2thZ2VSb290ID0gY3VycmVudERpcmVjdG9yeS5yZXNvbHZlKGV4dHJhY3RQYXRoKGFyZ3VtZW50KSk7CiAgfQoKICB2b2lkIHNldFBhY2thZ2VDb25maWcoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICBwYWNrYWdlQ29uZmlnID0KICAgICAgICBjdXJyZW50RGlyZWN0b3J5LnJlc29sdmUoZXh0cmFjdFBhdGgoYXJndW1lbnQsIGlzRGlyZWN0b3J5OiBmYWxzZSkpOwogIH0KCiAgdm9pZCBzZXRPdXRwdXQoSXRlcmF0b3I8U3RyaW5nPiBhcmd1bWVudHMpIHsKICAgIG91dHB1dFNwZWNpZmllZCA9IHRydWU7CiAgICBTdHJpbmcgcGF0aDsKICAgIGlmIChhcmd1bWVudHMuY3VycmVudCA9PSAnLW8nKSB7CiAgICAgIGlmICghYXJndW1lbnRzLm1vdmVOZXh0KCkpIHsKICAgICAgICBoZWxwQW5kRmFpbCgnRXJyb3I6IE1pc3NpbmcgZmlsZSBhZnRlciAtbyBvcHRpb24uJyk7CiAgICAgIH0KICAgICAgcGF0aCA9IGFyZ3VtZW50cy5jdXJyZW50OwogICAgfSBlbHNlIHsKICAgICAgcGF0aCA9IGV4dHJhY3RQYXJhbWV0ZXIoYXJndW1lbnRzLmN1cnJlbnQpOwogICAgfQogICAgb3V0ID0gY3VycmVudERpcmVjdG9yeS5yZXNvbHZlKG5hdGl2ZVRvVXJpUGF0aChwYXRoKSk7CiAgfQoKICB2b2lkIHNldE9wdGltaXphdGlvbkxldmVsKFN0cmluZyBhcmd1bWVudCkgewogICAgaW50IHZhbHVlID0gaW50LnRyeVBhcnNlKGV4dHJhY3RQYXJhbWV0ZXIoYXJndW1lbnQpKTsKICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlIDwgMCB8fCB2YWx1ZSA+IDQpIHsKICAgICAgaGVscEFuZEZhaWwoIkVycm9yOiBVbnN1cHBvcnRlZCBvcHRpbWl6YXRpb24gbGV2ZWwgJyRhcmd1bWVudCcsICIKICAgICAgICAgICJzdXBwb3J0ZWQgbGV2ZWxzIGFyZTogMCwgMSwgMiwgMywgNCIpOwogICAgICByZXR1cm47CiAgICB9CiAgICBvcHRpbWl6YXRpb25MZXZlbCA9IHZhbHVlOwogIH0KCiAgdm9pZCBzZXRPdXRwdXRUeXBlKFN0cmluZyBhcmd1bWVudCkgewogICAgaWYgKGFyZ3VtZW50ID09ICctLW91dHB1dC10eXBlPWRhcnQnIHx8CiAgICAgICAgYXJndW1lbnQgPT0gJy0tb3V0cHV0LXR5cGU9ZGFydC1tdWx0aScpIHsKICAgICAgaGVscEFuZEZhaWwoCiAgICAgICAgICAiLS1vdXRwdXQtdHlwZT1kYXJ0IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIEl0IHdhcyBkZXByZWNhdGVkICIKICAgICAgICAgICJzaW5jZSBEYXJ0IDEuMTEgYW5kIHJlbW92ZWQgaW4gRGFydCAxLjE5LiIpOwogICAgfQogIH0KCiAgc2V0U3RyaXAoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICBoZWxwQW5kRmFpbCgiT3B0aW9uICctLWZvcmNlLXN0cmlwJyBpcyBub3QgaW4gdXNlIG5vdyB0aGF0IgogICAgICAgICItLW91dHB1dC10eXBlPWRhcnQgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4iKTsKICB9CgogIHZvaWQgc2V0QmF6ZWxQYXRocyhTdHJpbmcgYXJndW1lbnQpIHsKICAgIFN0cmluZyBwYXRocyA9IGV4dHJhY3RQYXJhbWV0ZXIoYXJndW1lbnQpOwogICAgYmF6ZWxQYXRocyA9IDxTdHJpbmc+W10uLmFkZEFsbChwYXRocy5zcGxpdCgnLCcpKTsKICB9CgogIFN0cmluZyBnZXREZXBzT3V0cHV0KEl0ZXJhYmxlPFVyaT4gc291cmNlRmlsZXMpIHsKICAgIHZhciBmaWxlbmFtZXMgPSBzb3VyY2VGaWxlcy5tYXAoKHVyaSkgPT4gJyR1cmknKS50b0xpc3QoKTsKICAgIGZpbGVuYW1lcy5zb3J0KCk7CiAgICByZXR1cm4gZmlsZW5hbWVzLmpvaW4oIlxuIik7CiAgfQoKICB2b2lkIHNldEFsbG93TmF0aXZlRXh0ZW5zaW9ucyhTdHJpbmcgYXJndW1lbnQpIHsKICAgIGhlbHBBbmRGYWlsKCJPcHRpb24gJyR7RmxhZ3MuYWxsb3dOYXRpdmVFeHRlbnNpb25zfScgaXMgbm90IHN1cHBvcnRlZC4iKTsKICB9CgogIHZvaWQgc2V0VmVyYm9zZShfKSB7CiAgICB2ZXJib3NlID0gdHJ1ZTsKICAgIHBhc3NUaHJvdWdoKCctLXZlcmJvc2UnKTsKICB9CgogIHZvaWQgc2V0VHJ1c3RUeXBlQW5ub3RhdGlvbnMoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICB0cnVzdFR5cGVBbm5vdGF0aW9ucyA9IHRydWU7CiAgfQoKICB2b2lkIHNldENoZWNrZWRNb2RlKFN0cmluZyBhcmd1bWVudCkgewogICAgY2hlY2tlZE1vZGUgPSB0cnVlOwogICAgcGFzc1Rocm91Z2goYXJndW1lbnQpOwogIH0KCiAgdm9pZCBhZGRJbkVudmlyb25tZW50KFN0cmluZyBhcmd1bWVudCkgewogICAgaW50IGVxSW5kZXggPSBhcmd1bWVudC5pbmRleE9mKCc9Jyk7CiAgICBTdHJpbmcgbmFtZSA9IGFyZ3VtZW50LnN1YnN0cmluZygyLCBlcUluZGV4KTsKICAgIFN0cmluZyB2YWx1ZSA9IGFyZ3VtZW50LnN1YnN0cmluZyhlcUluZGV4ICsgMSk7CiAgICBlbnZpcm9ubWVudFtuYW1lXSA9IHZhbHVlOwogIH0KCiAgdm9pZCBzZXRDYXRlZ29yaWVzKFN0cmluZyBhcmd1bWVudCkgewogICAgTGlzdDxTdHJpbmc+IGNhdGVnb3JpZXMgPSBleHRyYWN0UGFyYW1ldGVyKGFyZ3VtZW50KS5zcGxpdCgnLCcpOwogICAgYm9vbCBpc1NlcnZlck1vZGUgPSBjYXRlZ29yaWVzLmxlbmd0aCA9PSAxICYmIGNhdGVnb3JpZXMuc2luZ2xlID09ICJTZXJ2ZXIiOwogICAgaWYgKGlzU2VydmVyTW9kZSkgewogICAgICBoaW50cy5hZGQoIlRoZSAtLWNhdGVnb3JpZXMgZmxhZyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIGRlbGV0ZWQgaW4gYSAiCiAgICAgICAgICAiZnV0dXJlIHJlbGVhc2UsIHBsZWFzZSB1c2UgJyR7RmxhZ3Muc2VydmVyTW9kZX0nIGluc3RlYWQgb2YgIgogICAgICAgICAgIictLWNhdGVnb3JpZXM9U2VydmVyJy4iKTsKICAgICAgcGFzc1Rocm91Z2goRmxhZ3Muc2VydmVyTW9kZSk7CiAgICB9IGVsc2UgewogICAgICBoaW50cy5hZGQoCiAgICAgICAgICAiVGhlIC0tY2F0ZWdvcmllcyBmbGFnIGlzIGRlcHJlY2F0ZWQsIHNlZSB0aGUgdXNhZ2UgZm9yIGRldGFpbHMuIik7CiAgICB9CiAgfQoKICB2b2lkIHNldFBsYXRmb3JtQmluYXJpZXMoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICBwbGF0Zm9ybUJpbmFyaWVzID0KICAgICAgICBjdXJyZW50RGlyZWN0b3J5LnJlc29sdmUoZXh0cmFjdFBhdGgoYXJndW1lbnQsIGlzRGlyZWN0b3J5OiB0cnVlKSk7CiAgfQoKICB2b2lkIHNldFJlYWREYXRhKFN0cmluZyBhcmd1bWVudCkgewogICAgaWYgKGFyZ3VtZW50ICE9IEZsYWdzLnJlYWREYXRhKSB7CiAgICAgIHJlYWREYXRhVXJpID0gbmF0aXZlVG9VcmkoZXh0cmFjdFBhdGgoYXJndW1lbnQsIGlzRGlyZWN0b3J5OiBmYWxzZSkpOwogICAgfQogICAgaWYgKHJlYWRTdHJhdGVneSAhPSBSZWFkU3RyYXRlZ3kuZnJvbUNvZGVnZW4pIHsKICAgICAgcmVhZFN0cmF0ZWd5ID0gUmVhZFN0cmF0ZWd5LmZyb21EYXRhOwogICAgfQogIH0KCiAgdm9pZCBzZXREaWxsRGVwZW5kZW5jaWVzKFN0cmluZyBhcmd1bWVudCkgewogICAgU3RyaW5nIGRlcGVuZGVuY2llcyA9IGV4dHJhY3RQYXJhbWV0ZXIoYXJndW1lbnQpOwogICAgU3RyaW5nIHVyaURlcGVuZGVuY2llcyA9IGRlcGVuZGVuY2llcy5zcGxpdE1hcEpvaW4oJywnLAogICAgICAgIG9uTWF0Y2g6IChfKSA9PiAnLCcsIG9uTm9uTWF0Y2g6IChwKSA9PiAnJHtuYXRpdmVUb1VyaShwKX0nKTsKICAgIG9wdGlvbnMuYWRkKCcke0ZsYWdzLmRpbGxEZXBlbmRlbmNpZXN9PSR7dXJpRGVwZW5kZW5jaWVzfScpOwogIH0KCiAgdm9pZCBzZXRDZmVPbmx5KFN0cmluZyBhcmd1bWVudCkgewogICAgaWYgKHdyaXRlU3RyYXRlZ3kgPT0gV3JpdGVTdHJhdGVneS50b0RhdGEpIHsKICAgICAgZmFpbCgiQ2Fubm90IHVzZSAke0ZsYWdzLmNmZU9ubHl9ICIKICAgICAgICAgICJhbmQgd3JpdGUgc2VyaWFsaXplZCBkYXRhIHNpbXVsdGFuZW91c2x5LiIpOwogICAgfQogICAgaWYgKHdyaXRlU3RyYXRlZ3kgPT0gV3JpdGVTdHJhdGVneS50b0NvZGVnZW4pIHsKICAgICAgZmFpbCgiQ2Fubm90IHVzZSAke0ZsYWdzLmNmZU9ubHl9ICIKICAgICAgICAgICJhbmQgd3JpdGUgc2VyaWFsaXplZCBjb2RlZ2VuIHNpbXVsdGFuZW91c2x5LiIpOwogICAgfQogICAgd3JpdGVTdHJhdGVneSA9IFdyaXRlU3RyYXRlZ3kudG9LZXJuZWw7CiAgfQoKICB2b2lkIHNldFJlYWRDb2RlZ2VuKFN0cmluZyBhcmd1bWVudCkgewogICAgaWYgKGFyZ3VtZW50ICE9IEZsYWdzLnJlYWRDb2RlZ2VuKSB7CiAgICAgIHJlYWRDb2RlZ2VuVXJpID0gbmF0aXZlVG9VcmkoZXh0cmFjdFBhdGgoYXJndW1lbnQsIGlzRGlyZWN0b3J5OiBmYWxzZSkpOwogICAgfQogICAgcmVhZFN0cmF0ZWd5ID0gUmVhZFN0cmF0ZWd5LmZyb21Db2RlZ2VuOwogIH0KCiAgdm9pZCBzZXRXcml0ZURhdGEoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICBpZiAod3JpdGVTdHJhdGVneSA9PSBXcml0ZVN0cmF0ZWd5LnRvS2VybmVsKSB7CiAgICAgIGZhaWwoIkNhbm5vdCB1c2UgJHtGbGFncy5jZmVPbmx5fSAiCiAgICAgICAgICAiYW5kIHdyaXRlIHNlcmlhbGl6ZWQgZGF0YSBzaW11bHRhbmVvdXNseS4iKTsKICAgIH0KICAgIGlmICh3cml0ZVN0cmF0ZWd5ID09IFdyaXRlU3RyYXRlZ3kudG9Db2RlZ2VuKSB7CiAgICAgIGZhaWwoIkNhbm5vdCB3cml0ZSBzZXJpYWxpemVkIGRhdGEgYW5kIGNvZGVnZW4gc2ltdWx0YW5lb3VzbHkuIik7CiAgICB9CiAgICBpZiAoYXJndW1lbnQgIT0gRmxhZ3Mud3JpdGVEYXRhKSB7CiAgICAgIHdyaXRlRGF0YVVyaSA9IG5hdGl2ZVRvVXJpKGV4dHJhY3RQYXRoKGFyZ3VtZW50LCBpc0RpcmVjdG9yeTogZmFsc2UpKTsKICAgIH0KICAgIHdyaXRlU3RyYXRlZ3kgPSBXcml0ZVN0cmF0ZWd5LnRvRGF0YTsKICB9CgogIHZvaWQgc2V0V3JpdGVDb2RlZ2VuKFN0cmluZyBhcmd1bWVudCkgewogICAgaWYgKHdyaXRlU3RyYXRlZ3kgPT0gV3JpdGVTdHJhdGVneS50b0tlcm5lbCkgewogICAgICBmYWlsKCJDYW5ub3QgdXNlICR7RmxhZ3MuY2ZlT25seX0gIgogICAgICAgICAgImFuZCB3cml0ZSBzZXJpYWxpemVkIGNvZGVnZW4gc2ltdWx0YW5lb3VzbHkuIik7CiAgICB9CiAgICBpZiAod3JpdGVTdHJhdGVneSA9PSBXcml0ZVN0cmF0ZWd5LnRvRGF0YSkgewogICAgICBmYWlsKCJDYW5ub3Qgd3JpdGUgc2VyaWFsaXplZCBkYXRhIGFuZCBjb2RlZ2VuIGRhdGEgc2ltdWx0YW5lb3VzbHkuIik7CiAgICB9CiAgICBpZiAoYXJndW1lbnQgIT0gRmxhZ3Mud3JpdGVDb2RlZ2VuKSB7CiAgICAgIHdyaXRlQ29kZWdlblVyaSA9IG5hdGl2ZVRvVXJpKGV4dHJhY3RQYXRoKGFyZ3VtZW50LCBpc0RpcmVjdG9yeTogZmFsc2UpKTsKICAgIH0KICAgIHdyaXRlU3RyYXRlZ3kgPSBXcml0ZVN0cmF0ZWd5LnRvQ29kZWdlbjsKICB9CgogIHZvaWQgc2V0Q29kZWdlblNoYXJkKFN0cmluZyBhcmd1bWVudCkgewogICAgY29kZWdlblNoYXJkID0gaW50LnBhcnNlKGV4dHJhY3RQYXJhbWV0ZXIoYXJndW1lbnQpKTsKICB9CgogIHZvaWQgc2V0Q29kZWdlblNoYXJkcyhTdHJpbmcgYXJndW1lbnQpIHsKICAgIGNvZGVnZW5TaGFyZHMgPSBpbnQucGFyc2UoZXh0cmFjdFBhcmFtZXRlcihhcmd1bWVudCkpOwogIH0KCiAgdm9pZCBzZXREdW1wSW5mbyhTdHJpbmcgYXJndW1lbnQpIHsKICAgIHBhc3NUaHJvdWdoKEZsYWdzLmR1bXBJbmZvKTsKICAgIGlmIChhcmd1bWVudCA9PSBGbGFncy5kdW1wSW5mbyB8fCBhcmd1bWVudCA9PSAiJHtGbGFncy5kdW1wSW5mb309anNvbiIpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGFyZ3VtZW50ID09ICIke0ZsYWdzLmR1bXBJbmZvfT1iaW5hcnkiKSB7CiAgICAgIHBhc3NUaHJvdWdoKGFyZ3VtZW50KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaGVscEFuZEZhaWwoIkVycm9yOiBVbnN1cHBvcnRlZCBkdW1wLWluZm8gZm9ybWF0ICckYXJndW1lbnQnLCAiCiAgICAgICAgInN1cHBvcnRlZCBmb3JtYXRzIGFyZToganNvbiBvciBiaW5hcnkiKTsKICB9CgogIHZvaWQgaGFuZGxlVGhyb3dPbkVycm9yKFN0cmluZyBhcmd1bWVudCkgewogICAgdGhyb3dPbkVycm9yID0gdHJ1ZTsKICAgIFN0cmluZyBwYXJhbWV0ZXIgPSBleHRyYWN0UGFyYW1ldGVyKGFyZ3VtZW50LCBpc09wdGlvbmFsQXJndW1lbnQ6IHRydWUpOwogICAgaWYgKHBhcmFtZXRlciAhPSBudWxsKSB7CiAgICAgIHZhciBjb3VudCA9IGludC5wYXJzZShwYXJhbWV0ZXIpOwogICAgICB0aHJvd09uRXJyb3JDb3VudCA9IGNvdW50OwogICAgfQogIH0KCiAgdm9pZCBoYW5kbGVTaG9ydE9wdGlvbnMoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICB2YXIgc2hvcnRPcHRpb25zID0gYXJndW1lbnQuc3Vic3RyaW5nKDEpLnNwbGl0KCIiKTsKICAgIGZvciAodmFyIHNob3J0T3B0aW9uIGluIHNob3J0T3B0aW9ucykgewogICAgICBzd2l0Y2ggKHNob3J0T3B0aW9uKSB7CiAgICAgICAgY2FzZSAndic6CiAgICAgICAgICBzZXRWZXJib3NlKG51bGwpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnaCc6CiAgICAgICAgY2FzZSAnPyc6CiAgICAgICAgICB3YW50SGVscCA9IHRydWU7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdjJzoKICAgICAgICAgIHNldENoZWNrZWRNb2RlKEZsYWdzLmVuYWJsZUNoZWNrZWRNb2RlKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ20nOgogICAgICAgICAgcGFzc1Rocm91Z2goRmxhZ3MubWluaWZ5KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICB0aHJvdyAnSW50ZXJuYWwgZXJyb3I6ICIkc2hvcnRPcHRpb24iIGRpZCBub3QgbWF0Y2gnOwogICAgICB9CiAgICB9CiAgfQoKICBMaXN0PFN0cmluZz4gYXJndW1lbnRzID0gPFN0cmluZz5bXTsKICBMaXN0PE9wdGlvbkhhbmRsZXI+IGhhbmRsZXJzID0gPE9wdGlvbkhhbmRsZXI+WwogICAgbmV3IE9wdGlvbkhhbmRsZXIoJy1bY2h2bT9dKycsIGhhbmRsZVNob3J0T3B0aW9ucyksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignLS10aHJvdy1vbi1lcnJvcig/Oj1bMC05XSspPycsIGhhbmRsZVRocm93T25FcnJvciksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5zdXBwcmVzc1dhcm5pbmdzLCAoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICAgIHNob3dXYXJuaW5ncyA9IGZhbHNlOwogICAgICBwYXNzVGhyb3VnaChhcmd1bWVudCk7CiAgICB9KSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmZhdGFsV2FybmluZ3MsIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLnN1cHByZXNzSGludHMsIChTdHJpbmcgYXJndW1lbnQpIHsKICAgICAgc2hvd0hpbnRzID0gZmFsc2U7CiAgICAgIHBhc3NUaHJvdWdoKGFyZ3VtZW50KTsKICAgIH0pLAogICAgLy8gVE9ETyhzaWdtdW5kKTogcmVtb3ZlIGVudGlyZWx5IGFmdGVyIERhcnQgMS4yMAogICAgbmV3IE9wdGlvbkhhbmRsZXIoCiAgICAgICAgJy0tb3V0cHV0LXR5cGU9ZGFydHwtLW91dHB1dC10eXBlPWRhcnQtbXVsdGl8LS1vdXRwdXQtdHlwZT1qcycsCiAgICAgICAgc2V0T3V0cHV0VHlwZSksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignLS11c2Uta2VybmVsJywgaWdub3JlT3B0aW9uKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLnBsYXRmb3JtQmluYXJpZXMsIHNldFBsYXRmb3JtQmluYXJpZXMpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3Mubm9GcmVxdWVuY3lCYXNlZE1pbmlmaWNhdGlvbiwgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MudmVyYm9zZSwgc2V0VmVyYm9zZSksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5wcm9ncmVzcywgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MudmVyc2lvbiwgKF8pID0+IHdhbnRWZXJzaW9uID0gdHJ1ZSksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignLS1saWJyYXJ5LXJvb3Q9LisnLCBpZ25vcmVPcHRpb24pLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoJy0tbGlicmFyaWVzLXNwZWM9LisnLCBzZXRMaWJyYXJ5U3BlY2lmaWNhdGlvblVyaSksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignJHtGbGFncy5kaWxsRGVwZW5kZW5jaWVzfT0uKycsIHNldERpbGxEZXBlbmRlbmNpZXMpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoJyR7RmxhZ3MucmVhZERhdGF9fCR7RmxhZ3MucmVhZERhdGF9PS4rJywgc2V0UmVhZERhdGEpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoJyR7RmxhZ3Mud3JpdGVEYXRhfXwke0ZsYWdzLndyaXRlRGF0YX09LisnLCBzZXRXcml0ZURhdGEpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoCiAgICAgICAgJyR7RmxhZ3MucmVhZENvZGVnZW59fCR7RmxhZ3MucmVhZENvZGVnZW59PS4rJywgc2V0UmVhZENvZGVnZW4pLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoCiAgICAgICAgJyR7RmxhZ3Mud3JpdGVDb2RlZ2VufXwke0ZsYWdzLndyaXRlQ29kZWdlbn09LisnLCBzZXRXcml0ZUNvZGVnZW4pLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoJyR7RmxhZ3MuY29kZWdlblNoYXJkfT0uKycsIHNldENvZGVnZW5TaGFyZCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignJHtGbGFncy5jb2RlZ2VuU2hhcmRzfT0uKycsIHNldENvZGVnZW5TaGFyZHMpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MuY2ZlT25seSwgc2V0Q2ZlT25seSksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5kZWJ1Z0dsb2JhbEluZmVyZW5jZSwgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoJy0tb3V0PS4rfC1vLionLCBzZXRPdXRwdXQsIG11bHRpcGxlQXJndW1lbnRzOiB0cnVlKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKCctTy4qJywgc2V0T3B0aW1pemF0aW9uTGV2ZWwpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MuYWxsb3dNb2NrQ29tcGlsYXRpb24sIGlnbm9yZU9wdGlvbiksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5mYXN0U3RhcnR1cCwgaWdub3JlT3B0aW9uKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmdlbmVyaWNNZXRob2RTeW50YXgsIGlnbm9yZU9wdGlvbiksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5pbml0aWFsaXppbmdGb3JtYWxBY2Nlc3MsIGlnbm9yZU9wdGlvbiksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5taW5pZnksIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLm5vTWluaWZ5LCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5wcmVzZXJ2ZVVyaXMsIGlnbm9yZU9wdGlvbiksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignLS1mb3JjZS1zdHJpcD0uKicsIHNldFN0cmlwKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmRpc2FibGVEaWFnbm9zdGljQ29sb3JzLCAoXykgewogICAgICBlbmFibGVDb2xvcnMgPSBmYWxzZTsKICAgIH0pLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MuZW5hYmxlRGlhZ25vc3RpY0NvbG9ycywgKF8pIHsKICAgICAgZW5hYmxlQ29sb3JzID0gdHJ1ZTsKICAgIH0pLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoJy0tZW5hYmxlW18tXWNoZWNrZWRbXy1dbW9kZXwtLWNoZWNrZWQnLAogICAgICAgIChfKSA9PiBzZXRDaGVja2VkTW9kZShGbGFncy5lbmFibGVDaGVja2VkTW9kZSkpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MuZW5hYmxlQXNzZXJ0cywgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MudHJ1c3RUeXBlQW5ub3RhdGlvbnMsIHNldFRydXN0VHlwZUFubm90YXRpb25zKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLnRydXN0UHJpbWl0aXZlcywgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MudHJ1c3RKU0ludGVyb3BUeXBlQW5ub3RhdGlvbnMsIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKHInLS1oZWxwfC9cP3wvaCcsIChfKSA9PiB3YW50SGVscCA9IHRydWUpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoJy0tcGFja2FnZXM9LisnLCBzZXRQYWNrYWdlQ29uZmlnKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKCctLXBhY2thZ2Utcm9vdD0uK3wtcC4rJywgc2V0UGFja2FnZVJvb3QpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3Mubm9Tb3VyY2VNYXBzLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihPcHRpb24ucmVzb2x1dGlvbklucHV0LCBpZ25vcmVPcHRpb24pLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoT3B0aW9uLmJhemVsUGF0aHMsIHNldEJhemVsUGF0aHMpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MucmVzb2x2ZU9ubHksIGlnbm9yZU9wdGlvbiksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5kaXNhYmxlTmF0aXZlTGl2ZVR5cGVBbmFseXNpcywgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoJy0tY2F0ZWdvcmllcz0uKicsIHNldENhdGVnb3JpZXMpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3Muc2VydmVyTW9kZSwgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MuZGlzYWJsZUlubGluaW5nLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5kaXNhYmxlUHJvZ3JhbVNwbGl0LCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5kaXNhYmxlVHlwZUluZmVyZW5jZSwgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MudXNlVHJpdmlhbEFic3RyYWN0VmFsdWVEb21haW4sIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmRpc2FibGVSdGlPcHRpbWl6YXRpb24sIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLnRlcnNlLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignLS1kZWZlcnJlZC1tYXA9LisnLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5uZXdEZWZlcnJlZFNwbGl0LCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5yZXBvcnRJbnZhbGlkSW5mZXJyZWREZWZlcnJlZFR5cGVzLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignJHtGbGFncy5kdW1wSW5mb318JHtGbGFncy5kdW1wSW5mb309LisnLCBzZXREdW1wSW5mbyksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignLS1kaXNhbGxvdy11bnNhZmUtZXZhbCcsIGlnbm9yZU9wdGlvbiksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihPcHRpb24uc2hvd1BhY2thZ2VXYXJuaW5ncywgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoT3B0aW9uLmVuYWJsZUxhbmd1YWdlRXhwZXJpbWVudHMsIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLnVzZUNvbnRlbnRTZWN1cml0eVBvbGljeSwgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoJy0tZW5hYmxlLWV4cGVyaW1lbnRhbC1taXJyb3JzJywgaWdub3JlT3B0aW9uKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmVuYWJsZUFzc2VydE1lc3NhZ2UsIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKCctLXN0cm9uZycsIGlnbm9yZU9wdGlvbiksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5wcmV2aWV3RGFydDIsIGlnbm9yZU9wdGlvbiksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5vbWl0SW1wbGljaXRDaGVja3MsIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLm9taXRBc0Nhc3RzLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5sYXhSdW50aW1lVHlwZVRvU3RyaW5nLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5iZW5jaG1hcmtpbmdQcm9kdWN0aW9uLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5iZW5jaG1hcmtpbmdFeHBlcmltZW50LCBwYXNzVGhyb3VnaCksCgogICAgLy8gVE9ETyhmbG9pdHNjaCk6IHJlbW92ZSBjb25kaXRpb25hbCBkaXJlY3RpdmVzIGZsYWcuCiAgICAvLyBXZSBkb24ndCBwcm92aWRlIHRoZSBpbmZvLW1lc3NhZ2UgeWV0LCBzaW5jZSB3ZSBoYXZlbid0IHB1YmxpY2x5CiAgICAvLyBsYXVuY2hlZCB0aGUgZmVhdHVyZSB5ZXQuCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5jb25kaXRpb25hbERpcmVjdGl2ZXMsIGlnbm9yZU9wdGlvbiksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignLS1lbmFibGUtYXN5bmMnLCBpZ25vcmVPcHRpb24pLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoJy0tZW5hYmxlLW51bGwtYXdhcmUtb3BlcmF0b3JzJywgaWdub3JlT3B0aW9uKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKCctLWVuYWJsZS1lbnVtJywgaWdub3JlT3B0aW9uKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmFsbG93TmF0aXZlRXh0ZW5zaW9ucywgc2V0QWxsb3dOYXRpdmVFeHRlbnNpb25zKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmdlbmVyYXRlQ29kZVdpdGhDb21waWxlVGltZUVycm9ycywgaWdub3JlT3B0aW9uKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLnVzZU11bHRpU291cmNlSW5mbywgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MudXNlTmV3U291cmNlSW5mbywgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MudGVzdE1vZGUsIHBhc3NUaHJvdWdoKSwKCiAgICAvLyBFeHBlcmltZW50YWwgZmVhdHVyZXMuCiAgICAvLyBXZSBkb24ndCBwcm92aWRlIGRvY3VtZW50YXRpb24gZm9yIHRoZXNlIHlldC4KICAgIC8vIFRPRE8oMjk1NzQpOiBwcm92aWRlIGRvY3VtZW50YXRpb24gd2hlbiB0aGlzIGZlYXR1cmUgaXMgc3VwcG9ydGVkLgogICAgLy8gVE9ETygyOTU3NCk6IHByb3ZpZGUgYSB3YXJuaW5nL2hpbnQvZXJyb3IsIHdoZW4gcHJvZmlsZS1iYXNlZCBkYXRhIGlzCiAgICAvLyB1c2VkIHdpdGhvdXQgYC0tZmFzdC1zdGFydHVwYC4KICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmV4cGVyaW1lbnRhbFRyYWNrQWxsb2NhdGlvbnMsIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKCIke0ZsYWdzLmV4cGVyaW1lbnRhbEFsbG9jYXRpb25zUGF0aH09LisiLCBwYXNzVGhyb3VnaCksCgogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MuZXhwZXJpbWVudExvY2FsTmFtZXMsIGlnbm9yZU9wdGlvbiksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5leHBlcmltZW50U3RhcnR1cEZ1bmN0aW9ucywgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MuZXhwZXJpbWVudFRvQm9vbGVhbiwgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MuZXhwZXJpbWVudENhbGxJbnN0cnVtZW50YXRpb24sIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmV4cGVyaW1lbnROZXdSdGksIHBhc3NUaHJvdWdoKSwKCiAgICAvLyBUaGUgZm9sbG93aW5nIHRocmVlIG9wdGlvbnMgbXVzdCBjb21lIGxhc3QuCiAgICBuZXcgT3B0aW9uSGFuZGxlcignLUQuKz0uKicsIGFkZEluRW52aXJvbm1lbnQpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoJy0uKicsIChTdHJpbmcgYXJndW1lbnQpIHsKICAgICAgaGVscEFuZEZhaWwoIlVua25vd24gb3B0aW9uICckYXJndW1lbnQnLiIpOwogICAgfSksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignLionLCAoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICAgIGFyZ3VtZW50cy5hZGQobmF0aXZlVG9VcmlQYXRoKGFyZ3VtZW50KSk7CiAgICB9KQogIF07CgogIHBhcnNlQ29tbWFuZExpbmUoaGFuZGxlcnMsIGFyZ3YpOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNZWFzdXJlIHRpbWUgZm9yIHJlYWRpbmcgZmlsZXMuCiAgU291cmNlRmlsZVByb3ZpZGVyIGlucHV0UHJvdmlkZXI7CiAgaWYgKGJhemVsUGF0aHMgIT0gbnVsbCkgewogICAgaW5wdXRQcm92aWRlciA9IG5ldyBCYXplbElucHV0UHJvdmlkZXIoYmF6ZWxQYXRocyk7CiAgfSBlbHNlIHsKICAgIGlucHV0UHJvdmlkZXIgPSBuZXcgQ29tcGlsZXJTb3VyY2VGaWxlUHJvdmlkZXIoKTsKICB9CgogIGRpYWdub3N0aWNIYW5kbGVyID0gbmV3IEZvcm1hdHRpbmdEaWFnbm9zdGljSGFuZGxlcihpbnB1dFByb3ZpZGVyKTsKICBpZiAodmVyYm9zZSAhPSBudWxsKSB7CiAgICBkaWFnbm9zdGljSGFuZGxlci52ZXJib3NlID0gdmVyYm9zZTsKICB9CiAgaWYgKHRocm93T25FcnJvciAhPSBudWxsKSB7CiAgICBkaWFnbm9zdGljSGFuZGxlci50aHJvd09uRXJyb3IgPSB0aHJvd09uRXJyb3I7CiAgfQogIGlmICh0aHJvd09uRXJyb3JDb3VudCAhPSBudWxsKSB7CiAgICBkaWFnbm9zdGljSGFuZGxlci50aHJvd09uRXJyb3JDb3VudCA9IHRocm93T25FcnJvckNvdW50OwogIH0KICBpZiAoc2hvd1dhcm5pbmdzICE9IG51bGwpIHsKICAgIGRpYWdub3N0aWNIYW5kbGVyLnNob3dXYXJuaW5ncyA9IHNob3dXYXJuaW5nczsKICB9CiAgaWYgKHNob3dIaW50cyAhPSBudWxsKSB7CiAgICBkaWFnbm9zdGljSGFuZGxlci5zaG93SGludHMgPSBzaG93SGludHM7CiAgfQogIGlmIChlbmFibGVDb2xvcnMgIT0gbnVsbCkgewogICAgZGlhZ25vc3RpY0hhbmRsZXIuZW5hYmxlQ29sb3JzID0gZW5hYmxlQ29sb3JzOwogIH0KCiAgaWYgKGNoZWNrZWRNb2RlICYmIHN0cm9uZ01vZGUpIHsKICAgIGNoZWNrZWRNb2RlID0gZmFsc2U7CiAgICBoaW50cy5hZGQoIk9wdGlvbiAnJHtGbGFncy5lbmFibGVDaGVja2VkTW9kZX0nIGlzIG5vdCBuZWVkZWQgaW4gRGFydCAyLjAuICIKICAgICAgICAiVG8gZW5hYmxlIGFzc2VydGlvbnMgdXNlICcke0ZsYWdzLmVuYWJsZUFzc2VydHN9JyBpbnN0ZWFkLiIpOwogIH0KCiAgaWYgKHRydXN0VHlwZUFubm90YXRpb25zICYmIHN0cm9uZ01vZGUpIHsKICAgIGhpbnRzLmFkZCgiT3B0aW9uICcke0ZsYWdzLnRydXN0VHlwZUFubm90YXRpb25zfScgaXMgbm90IGF2YWlsYWJsZSAiCiAgICAgICAgImluIERhcnQgMi4wLiBUcnkgdXNpbmcgJyR7RmxhZ3Mub21pdEltcGxpY2l0Q2hlY2tzfScgaW5zdGVhZC4iKTsKICB9CgogIGZvciAoU3RyaW5nIGhpbnQgaW4gaGludHMpIHsKICAgIGRpYWdub3N0aWNIYW5kbGVyLmluZm8oaGludCwgYXBpLkRpYWdub3N0aWMuSElOVCk7CiAgfQoKICBpZiAod2FudEhlbHAgfHwgd2FudFZlcnNpb24pIHsKICAgIGhlbHBBbmRFeGl0KHdhbnRIZWxwLCB3YW50VmVyc2lvbiwgZGlhZ25vc3RpY0hhbmRsZXIudmVyYm9zZSk7CiAgfQoKICBpZiAoYXJndW1lbnRzLmlzRW1wdHkpIHsKICAgIGhlbHBBbmRGYWlsKCdObyBEYXJ0IGZpbGUgc3BlY2lmaWVkLicpOwogIH0KICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKICAgIHZhciBleHRyYSA9IGFyZ3VtZW50cy5zdWJsaXN0KDEpOwogICAgaGVscEFuZEZhaWwoJ0V4dHJhIGFyZ3VtZW50czogJHtleHRyYS5qb2luKCIgIil9Jyk7CiAgfQoKICBpZiAodHJ1c3RUeXBlQW5ub3RhdGlvbnMgJiYgY2hlY2tlZE1vZGUpIHsKICAgIGhlbHBBbmRGYWlsKCJPcHRpb24gJyR7RmxhZ3MudHJ1c3RUeXBlQW5ub3RhdGlvbnN9JyBtYXkgbm90IGJlIHVzZWQgaW4gIgogICAgICAgICJjaGVja2VkIG1vZGUuIik7CiAgfQoKICBpZiAocGFja2FnZVJvb3QgIT0gbnVsbCAmJiBwYWNrYWdlQ29uZmlnICE9IG51bGwpIHsKICAgIGhlbHBBbmRGYWlsKCJDYW5ub3Qgc3BlY2lmeSBib3RoICctLXBhY2thZ2Utcm9vdCcgYW5kICctLXBhY2thZ2VzLiIpOwogIH0KCiAgU3RyaW5nIHNjcmlwdE5hbWUgPSBhcmd1bWVudHNbMF07CgogIHN3aXRjaCAod3JpdGVTdHJhdGVneSkgewogICAgY2FzZSBXcml0ZVN0cmF0ZWd5LnRvSnM6CiAgICAgIG91dCA/Pz0gY3VycmVudERpcmVjdG9yeS5yZXNvbHZlKCdvdXQuanMnKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIFdyaXRlU3RyYXRlZ3kudG9LZXJuZWw6CiAgICAgIG91dCA/Pz0gY3VycmVudERpcmVjdG9yeS5yZXNvbHZlKCdvdXQuZGlsbCcpOwogICAgICBvcHRpb25zLmFkZChGbGFncy5jZmVPbmx5KTsKICAgICAgaWYgKHJlYWRTdHJhdGVneSA9PSBSZWFkU3RyYXRlZ3kuZnJvbURhdGEpIHsKICAgICAgICBmYWlsKCJDYW5ub3QgdXNlICR7RmxhZ3MuY2ZlT25seX0gIgogICAgICAgICAgICAiYW5kIHJlYWQgc2VyaWFsaXplZCBkYXRhIHNpbXVsdGFuZW91c2x5LiIpOwogICAgICB9IGVsc2UgaWYgKHJlYWRTdHJhdGVneSA9PSBSZWFkU3RyYXRlZ3kuZnJvbUNvZGVnZW4pIHsKICAgICAgICBmYWlsKCJDYW5ub3QgdXNlICR7RmxhZ3MuY2ZlT25seX0gIgogICAgICAgICAgICAiYW5kIHJlYWQgc2VyaWFsaXplZCBjb2RlZ2VuIHNpbXVsdGFuZW91c2x5LiIpOwogICAgICB9CiAgICAgIGJyZWFrOwogICAgY2FzZSBXcml0ZVN0cmF0ZWd5LnRvRGF0YToKICAgICAgb3V0ID8/PSBjdXJyZW50RGlyZWN0b3J5LnJlc29sdmUoJ291dC5kaWxsJyk7CiAgICAgIHdyaXRlRGF0YVVyaSA/Pz0gY3VycmVudERpcmVjdG9yeS5yZXNvbHZlKCckb3V0LmRhdGEnKTsKICAgICAgb3B0aW9ucy5hZGQoJyR7RmxhZ3Mud3JpdGVEYXRhfT0ke3dyaXRlRGF0YVVyaX0nKTsKICAgICAgaWYgKHJlYWRTdHJhdGVneSA9PSBSZWFkU3RyYXRlZ3kuZnJvbURhdGEpIHsKICAgICAgICBmYWlsKCJDYW5ub3QgcmVhZCBhbmQgd3JpdGUgc2VyaWFsaXplZCBkYXRhIHNpbXVsdGFuZW91c2x5LiIpOwogICAgICB9IGVsc2UgaWYgKHJlYWRTdHJhdGVneSA9PSBSZWFkU3RyYXRlZ3kuZnJvbUNvZGVnZW4pIHsKICAgICAgICBmYWlsKCJDYW5ub3QgcmVhZCBzZXJpYWxpemVkIGNvZGVnZW4gYW5kICIKICAgICAgICAgICAgIndyaXRlIHNlcmlhbGl6ZWQgZGF0YSBzaW11bHRhbmVvdXNseS4iKTsKICAgICAgfQogICAgICBicmVhazsKICAgIGNhc2UgV3JpdGVTdHJhdGVneS50b0NvZGVnZW46CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEF2b2lkIHRoZSBuZWVkIGZvciBhbiBbb3V0XSB2YWx1ZSBpbiB0aGlzIGNhc2Ugb3IKICAgICAgLy8gdXNlIFtvdXRdIHRvIHBhc3MgW3dyaXRlQ29kZWdlblVyaV0uCiAgICAgIG91dCA/Pz0gY3VycmVudERpcmVjdG9yeS5yZXNvbHZlKCdvdXQnKTsKICAgICAgd3JpdGVDb2RlZ2VuVXJpID8/PSBjdXJyZW50RGlyZWN0b3J5LnJlc29sdmUoJyRvdXQuY29kZScpOwogICAgICBvcHRpb25zLmFkZCgnJHtGbGFncy53cml0ZUNvZGVnZW59PSR7d3JpdGVDb2RlZ2VuVXJpfScpOwogICAgICBpZiAocmVhZFN0cmF0ZWd5ID09IFJlYWRTdHJhdGVneS5mcm9tQ29kZWdlbikgewogICAgICAgIGZhaWwoIkNhbm5vdCByZWFkIGFuZCB3cml0ZSBzZXJpYWxpemVkIGNvZGVnZW4gc2ltdWx0YW5lb3VzbHkuIik7CiAgICAgIH0KICAgICAgaWYgKHJlYWRTdHJhdGVneSAhPSBSZWFkU3RyYXRlZ3kuZnJvbURhdGEpIHsKICAgICAgICBmYWlsKCJDYW4gb25seSB3cml0ZSBzZXJpYWxpemVkIGNvZGVnZW4gZnJvbSBzZXJpYWxpemVkIGRhdGEuIik7CiAgICAgIH0KICAgICAgaWYgKGNvZGVnZW5TaGFyZHMgPT0gbnVsbCkgewogICAgICAgIGZhaWwoIkNhbm5vdCB3cml0ZSBzZXJpYWxpemVkIGNvZGVnZW4gd2l0aG91dCBzZXR0aW5nICIKICAgICAgICAgICAgIiR7RmxhZ3MuY29kZWdlblNoYXJkc30uIik7CiAgICAgIH0gZWxzZSBpZiAoY29kZWdlblNoYXJkcyA8PSAwKSB7CiAgICAgICAgZmFpbCgiJHtGbGFncy5jb2RlZ2VuU2hhcmRzfSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlci4iKTsKICAgICAgfQogICAgICBpZiAoY29kZWdlblNoYXJkID09IG51bGwpIHsKICAgICAgICBmYWlsKCJDYW5ub3Qgd3JpdGUgc2VyaWFsaXplZCBjb2RlZ2VuIHdpdGhvdXQgc2V0dGluZyAiCiAgICAgICAgICAgICIke0ZsYWdzLmNvZGVnZW5TaGFyZH0uIik7CiAgICAgIH0gZWxzZSBpZiAoY29kZWdlblNoYXJkIDwgMCB8fCBjb2RlZ2VuU2hhcmQgPj0gY29kZWdlblNoYXJkcykgewogICAgICAgIGZhaWwoIiR7RmxhZ3MuY29kZWdlblNoYXJkfSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgIgogICAgICAgICAgICAiJHtGbGFncy5jb2RlZ2VuU2hhcmRzfS4iKTsKICAgICAgfQogICAgICBvcHRpb25zLmFkZCgnJHtGbGFncy5jb2RlZ2VuU2hhcmR9PSRjb2RlZ2VuU2hhcmQnKTsKICAgICAgb3B0aW9ucy5hZGQoJyR7RmxhZ3MuY29kZWdlblNoYXJkc309JGNvZGVnZW5TaGFyZHMnKTsKICAgICAgYnJlYWs7CiAgfQogIHN3aXRjaCAocmVhZFN0cmF0ZWd5KSB7CiAgICBjYXNlIFJlYWRTdHJhdGVneS5mcm9tRGFydDoKICAgICAgYnJlYWs7CiAgICBjYXNlIFJlYWRTdHJhdGVneS5mcm9tRGF0YToKICAgICAgcmVhZERhdGFVcmkgPz89IGN1cnJlbnREaXJlY3RvcnkucmVzb2x2ZSgnJHNjcmlwdE5hbWUuZGF0YScpOwogICAgICBvcHRpb25zLmFkZCgnJHtGbGFncy5yZWFkRGF0YX09JHtyZWFkRGF0YVVyaX0nKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIFJlYWRTdHJhdGVneS5mcm9tQ29kZWdlbjoKICAgICAgcmVhZERhdGFVcmkgPz89IGN1cnJlbnREaXJlY3RvcnkucmVzb2x2ZSgnJHNjcmlwdE5hbWUuZGF0YScpOwogICAgICBvcHRpb25zLmFkZCgnJHtGbGFncy5yZWFkRGF0YX09JHtyZWFkRGF0YVVyaX0nKTsKICAgICAgcmVhZENvZGVnZW5VcmkgPz89IGN1cnJlbnREaXJlY3RvcnkucmVzb2x2ZSgnJHNjcmlwdE5hbWUuY29kZScpOwogICAgICBvcHRpb25zLmFkZCgnJHtGbGFncy5yZWFkQ29kZWdlbn09JHtyZWFkQ29kZWdlblVyaX0nKTsKICAgICAgaWYgKGNvZGVnZW5TaGFyZHMgPT0gbnVsbCkgewogICAgICAgIGZhaWwoIkNhbm5vdCB3cml0ZSBzZXJpYWxpemVkIGNvZGVnZW4gd2l0aG91dCBzZXR0aW5nICIKICAgICAgICAgICAgIiR7RmxhZ3MuY29kZWdlblNoYXJkc30uIik7CiAgICAgIH0gZWxzZSBpZiAoY29kZWdlblNoYXJkcyA8PSAwKSB7CiAgICAgICAgZmFpbCgiJHtGbGFncy5jb2RlZ2VuU2hhcmRzfSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlci4iKTsKICAgICAgfQogICAgICBvcHRpb25zLmFkZCgnJHtGbGFncy5jb2RlZ2VuU2hhcmRzfT0kY29kZWdlblNoYXJkcycpOwogIH0KICBvcHRpb25zLmFkZCgnLS1vdXQ9JG91dCcpOwogIGlmICh3cml0ZVN0cmF0ZWd5ID09IFdyaXRlU3RyYXRlZ3kudG9KcykgewogICAgc291cmNlTWFwT3V0ID0gVXJpLnBhcnNlKCckb3V0Lm1hcCcpOwogICAgb3B0aW9ucy5hZGQoJy0tc291cmNlLW1hcD0ke3NvdXJjZU1hcE91dH0nKTsKICB9CgogIFJhbmRvbUFjY2Vzc0ZpbGVPdXRwdXRQcm92aWRlciBvdXRwdXRQcm92aWRlciA9CiAgICAgIG5ldyBSYW5kb21BY2Nlc3NGaWxlT3V0cHV0UHJvdmlkZXIob3V0LCBzb3VyY2VNYXBPdXQsCiAgICAgICAgICBvbkluZm86IGRpYWdub3N0aWNIYW5kbGVyLmluZm8sIG9uRmFpbHVyZTogZmFpbCk7CgogIGFwaS5Db21waWxhdGlvblJlc3VsdCBjb21waWxhdGlvbkRvbmUoYXBpLkNvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkgewogICAgaWYgKCFyZXN1bHQuaXNTdWNjZXNzKSB7CiAgICAgIGZhaWwoJ0NvbXBpbGF0aW9uIGZhaWxlZC4nKTsKICAgIH0KICAgIHdyaXRlU3RyaW5nKAogICAgICAgIFVyaS5wYXJzZSgnJG91dC5kZXBzJyksIGdldERlcHNPdXRwdXQoaW5wdXRQcm92aWRlci5nZXRTb3VyY2VVcmlzKCkpKTsKCiAgICBTdHJpbmcgaW5wdXQgPSB1cmlQYXRoVG9OYXRpdmUoc2NyaXB0TmFtZSk7CiAgICBpbnQgaW5wdXRTaXplOwogICAgU3RyaW5nIHByb2Nlc3NOYW1lOwogICAgU3RyaW5nIGlucHV0TmFtZTsKCiAgICBpbnQgb3V0cHV0U2l6ZTsKICAgIGludCBwcmltYXJ5T3V0cHV0U2l6ZTsKICAgIFN0cmluZyBvdXRwdXROYW1lOwoKICAgIFN0cmluZyBzdW1tYXJ5OwogICAgc3dpdGNoIChyZWFkU3RyYXRlZ3kpIHsKICAgICAgY2FzZSBSZWFkU3RyYXRlZ3kuZnJvbURhcnQ6CiAgICAgICAgaW5wdXROYW1lID0gJ2NoYXJhY3RlcnMgRGFydCc7CiAgICAgICAgaW5wdXRTaXplID0gaW5wdXRQcm92aWRlci5kYXJ0Q2hhcmFjdGVyc1JlYWQ7CiAgICAgICAgc3VtbWFyeSA9ICdEYXJ0IGZpbGUgJGlucHV0ICc7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgUmVhZFN0cmF0ZWd5LmZyb21EYXRhOgogICAgICAgIGlucHV0TmFtZSA9ICdieXRlcyBkYXRhJzsKICAgICAgICBpbnB1dFNpemUgPSBpbnB1dFByb3ZpZGVyLmRhcnRDaGFyYWN0ZXJzUmVhZDsKICAgICAgICBTdHJpbmcgZGF0YUlucHV0ID0KICAgICAgICAgICAgZmUucmVsYXRpdml6ZVVyaShjdXJyZW50RGlyZWN0b3J5LCByZWFkRGF0YVVyaSwgUGxhdGZvcm0uaXNXaW5kb3dzKTsKICAgICAgICBzdW1tYXJ5ID0gJ0RhdGEgZmlsZXMgJGlucHV0IGFuZCAkZGF0YUlucHV0ICc7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgUmVhZFN0cmF0ZWd5LmZyb21Db2RlZ2VuOgogICAgICAgIGlucHV0TmFtZSA9ICdieXRlcyBkYXRhJzsKICAgICAgICBpbnB1dFNpemUgPSBpbnB1dFByb3ZpZGVyLmRhcnRDaGFyYWN0ZXJzUmVhZDsKICAgICAgICBTdHJpbmcgZGF0YUlucHV0ID0KICAgICAgICAgICAgZmUucmVsYXRpdml6ZVVyaShjdXJyZW50RGlyZWN0b3J5LCByZWFkRGF0YVVyaSwgUGxhdGZvcm0uaXNXaW5kb3dzKTsKICAgICAgICBTdHJpbmcgY29kZUlucHV0ID0gZmUucmVsYXRpdml6ZVVyaSgKICAgICAgICAgICAgY3VycmVudERpcmVjdG9yeSwgcmVhZENvZGVnZW5VcmksIFBsYXRmb3JtLmlzV2luZG93cyk7CiAgICAgICAgc3VtbWFyeSA9ICdEYXRhIGZpbGVzICRpbnB1dCwgJGRhdGFJbnB1dCBhbmQgJwogICAgICAgICAgICAnJHtjb2RlSW5wdXR9WzAtJHtjb2RlZ2VuU2hhcmRzIC0gMX1dICc7CiAgICAgICAgYnJlYWs7CiAgICB9CgogICAgc3dpdGNoICh3cml0ZVN0cmF0ZWd5KSB7CiAgICAgIGNhc2UgV3JpdGVTdHJhdGVneS50b0pzOgogICAgICAgIHByb2Nlc3NOYW1lID0gJ0NvbXBpbGVkJzsKICAgICAgICBvdXRwdXROYW1lID0gJ2NoYXJhY3RlcnMgSmF2YVNjcmlwdCc7CiAgICAgICAgb3V0cHV0U2l6ZSA9IG91dHB1dFByb3ZpZGVyLnRvdGFsQ2hhcmFjdGVyc1dyaXR0ZW5KYXZhU2NyaXB0OwogICAgICAgIHByaW1hcnlPdXRwdXRTaXplID0gb3V0cHV0UHJvdmlkZXIudG90YWxDaGFyYWN0ZXJzV3JpdHRlblByaW1hcnk7CiAgICAgICAgU3RyaW5nIG91dHB1dCA9CiAgICAgICAgICAgIGZlLnJlbGF0aXZpemVVcmkoY3VycmVudERpcmVjdG9yeSwgb3V0LCBQbGF0Zm9ybS5pc1dpbmRvd3MpOwogICAgICAgIHN1bW1hcnkgKz0gJ2NvbXBpbGVkIHRvIEphdmFTY3JpcHQ6ICR7b3V0cHV0fSc7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgV3JpdGVTdHJhdGVneS50b0tlcm5lbDoKICAgICAgICBwcm9jZXNzTmFtZSA9ICdDb21waWxlZCc7CiAgICAgICAgb3V0cHV0TmFtZSA9ICdrZXJuZWwgYnl0ZXMnOwogICAgICAgIG91dHB1dFNpemUgPSBvdXRwdXRQcm92aWRlci50b3RhbERhdGFXcml0dGVuOwogICAgICAgIFN0cmluZyBvdXRwdXQgPQogICAgICAgICAgICBmZS5yZWxhdGl2aXplVXJpKGN1cnJlbnREaXJlY3RvcnksIG91dCwgUGxhdGZvcm0uaXNXaW5kb3dzKTsKICAgICAgICBzdW1tYXJ5ICs9ICdjb21waWxlZCB0byBkaWxsOiAke291dHB1dH0uJzsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBXcml0ZVN0cmF0ZWd5LnRvRGF0YToKICAgICAgICBwcm9jZXNzTmFtZSA9ICdTZXJpYWxpemVkJzsKICAgICAgICBvdXRwdXROYW1lID0gJ2J5dGVzIGRhdGEnOwogICAgICAgIG91dHB1dFNpemUgPSBvdXRwdXRQcm92aWRlci50b3RhbERhdGFXcml0dGVuOwogICAgICAgIFN0cmluZyBvdXRwdXQgPQogICAgICAgICAgICBmZS5yZWxhdGl2aXplVXJpKGN1cnJlbnREaXJlY3RvcnksIG91dCwgUGxhdGZvcm0uaXNXaW5kb3dzKTsKICAgICAgICBTdHJpbmcgZGF0YU91dHB1dCA9IGZlLnJlbGF0aXZpemVVcmkoCiAgICAgICAgICAgIGN1cnJlbnREaXJlY3RvcnksIHdyaXRlRGF0YVVyaSwgUGxhdGZvcm0uaXNXaW5kb3dzKTsKICAgICAgICBzdW1tYXJ5ICs9ICdzZXJpYWxpemVkIHRvIGRpbGwgYW5kIGRhdGE6ICR7b3V0cHV0fSBhbmQgJHtkYXRhT3V0cHV0fS4nOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFdyaXRlU3RyYXRlZ3kudG9Db2RlZ2VuOgogICAgICAgIHByb2Nlc3NOYW1lID0gJ1NlcmlhbGl6ZWQnOwogICAgICAgIG91dHB1dE5hbWUgPSAnYnl0ZXMgZGF0YSc7CiAgICAgICAgb3V0cHV0U2l6ZSA9IG91dHB1dFByb3ZpZGVyLnRvdGFsRGF0YVdyaXR0ZW47CiAgICAgICAgU3RyaW5nIGNvZGVPdXRwdXQgPSBmZS5yZWxhdGl2aXplVXJpKAogICAgICAgICAgICBjdXJyZW50RGlyZWN0b3J5LCB3cml0ZUNvZGVnZW5VcmksIFBsYXRmb3JtLmlzV2luZG93cyk7CiAgICAgICAgc3VtbWFyeSArPSAnc2VyaWFsaXplZCB0byBjb2RlZ2VuIGRhdGE6ICcKICAgICAgICAgICAgJyR7Y29kZU91dHB1dH0ke2NvZGVnZW5TaGFyZH0uJzsKICAgICAgICBicmVhazsKICAgIH0KCiAgICBwcmludCgnJHByb2Nlc3NOYW1lICcKICAgICAgICAnJHtfZm9ybWF0Q2hhcmFjdGVyQ291bnQoaW5wdXRTaXplKX0gJGlucHV0TmFtZSB0byAnCiAgICAgICAgJyR7X2Zvcm1hdENoYXJhY3RlckNvdW50KG91dHB1dFNpemUpfSAkb3V0cHV0TmFtZSBpbiAnCiAgICAgICAgJyR7X2Zvcm1hdER1cmF0aW9uQXNTZWNvbmRzKHdhbGxjbG9jay5lbGFwc2VkKX0gc2Vjb25kcycpOwogICAgaWYgKHByaW1hcnlPdXRwdXRTaXplICE9IG51bGwpIHsKICAgICAgZGlhZ25vc3RpY0hhbmRsZXIuaW5mbygKICAgICAgICAgICcke19mb3JtYXRDaGFyYWN0ZXJDb3VudChwcmltYXJ5T3V0cHV0U2l6ZSl9ICRvdXRwdXROYW1lICcKICAgICAgICAgICdpbiAke2ZlLnJlbGF0aXZpemVVcmkoY3VycmVudERpcmVjdG9yeSwgb3V0LCBQbGF0Zm9ybS5pc1dpbmRvd3MpfScpOwogICAgfQogICAgaWYgKHdyaXRlU3RyYXRlZ3kgPT0gV3JpdGVTdHJhdGVneS50b0pzKSB7CiAgICAgIGlmIChvdXRwdXRTcGVjaWZpZWQgfHwgZGlhZ25vc3RpY0hhbmRsZXIudmVyYm9zZSkgewogICAgICAgIHByaW50KHN1bW1hcnkpOwogICAgICAgIGlmIChkaWFnbm9zdGljSGFuZGxlci52ZXJib3NlKSB7CiAgICAgICAgICB2YXIgZmlsZXMgPSBvdXRwdXRQcm92aWRlci5hbGxPdXRwdXRGaWxlczsKICAgICAgICAgIGludCBqc0NvdW50ID0gZmlsZXMud2hlcmUoKGYpID0+IGYuZW5kc1dpdGgoJy5qcycpKS5sZW5ndGg7CiAgICAgICAgICBwcmludCgnRW1pdHRlZCBmaWxlICRqc0NvdW50IEphdmFTY3JpcHQgZmlsZXMuJyk7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICBwcmludChzdW1tYXJ5KTsKICAgIH0KCiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgVXJpIHNjcmlwdCA9IGN1cnJlbnREaXJlY3RvcnkucmVzb2x2ZShzY3JpcHROYW1lKTsKCiAgZGlhZ25vc3RpY0hhbmRsZXIuYXV0b1JlYWRGaWxlVXJpID0gdHJ1ZTsKICBDb21waWxlck9wdGlvbnMgY29tcGlsZXJPcHRpb25zID0gQ29tcGlsZXJPcHRpb25zLnBhcnNlKG9wdGlvbnMsCiAgICAgIGxpYnJhcmllc1NwZWNpZmljYXRpb25Vcmk6IGxpYnJhcmllc1NwZWNpZmljYXRpb25VcmksCiAgICAgIHBsYXRmb3JtQmluYXJpZXM6IHBsYXRmb3JtQmluYXJpZXMsCiAgICAgIG9uRXJyb3I6IChTdHJpbmcgbWVzc2FnZSkgPT4gZmFpbChtZXNzYWdlKSwKICAgICAgb25XYXJuaW5nOiAoU3RyaW5nIG1lc3NhZ2UpID0+IHByaW50KG1lc3NhZ2UpKQogICAgLi5lbnRyeVBvaW50ID0gc2NyaXB0CiAgICAuLnBhY2thZ2VSb290ID0gcGFja2FnZVJvb3QKICAgIC4ucGFja2FnZUNvbmZpZyA9IHBhY2thZ2VDb25maWcKICAgIC4uZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudAogICAgLi5rZXJuZWxJbml0aWFsaXplZENvbXBpbGVyU3RhdGUgPSBrZXJuZWxJbml0aWFsaXplZENvbXBpbGVyU3RhdGUKICAgIC4ub3B0aW1pemF0aW9uTGV2ZWwgPSBvcHRpbWl6YXRpb25MZXZlbDsKICByZXR1cm4gY29tcGlsZUZ1bmMoCiAgICAgICAgICBjb21waWxlck9wdGlvbnMsIGlucHV0UHJvdmlkZXIsIGRpYWdub3N0aWNIYW5kbGVyLCBvdXRwdXRQcm92aWRlcikKICAgICAgLnRoZW4oY29tcGlsYXRpb25Eb25lKTsKfQoKLy8vIFJldHVybnMgdGhlIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIGZvcm1hdHRlZCB3aXRoIGEgdGhvdXNhbmRzIHNlcGFyYXRvci4KU3RyaW5nIF9mb3JtYXRDaGFyYWN0ZXJDb3VudChpbnQgdmFsdWUsIFtTdHJpbmcgc2VwYXJhdG9yID0gJywnXSkgewogIFN0cmluZyB0ZXh0ID0gJyR2YWx1ZSc7CiAgLy8gJ0luc2VydCcgc2VwYXJhdG9ycyByaWdodC10by1sZWZ0LiBJbmVmZmljaWVudCwgYnV0IHVzZWQganVzdCBhIGZldyB0aW1lcy4KICBmb3IgKGludCBwb3NpdGlvbiA9IHRleHQubGVuZ3RoIC0gMzsgcG9zaXRpb24gPiAwOyBwb3NpdGlvbiAtPSAzKSB7CiAgICB0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgcG9zaXRpb24pICsgc2VwYXJhdG9yICsgdGV4dC5zdWJzdHJpbmcocG9zaXRpb24pOwogIH0KICByZXR1cm4gdGV4dDsKfQoKLy8vIEZvcm1hdHMgW2R1cmF0aW9uXSBpbiBzZWNvbmRzIGluIGZpeGVkLXBvaW50IGZvcm1hdCwgcHJlZmVycmluZyB0byBrZWVwIHRoZQovLy8gcmVzdWx0IGF0IHRvIGJlbG93IFt3aWR0aF0gY2hhcmFjdGVycy4KU3RyaW5nIF9mb3JtYXREdXJhdGlvbkFzU2Vjb25kcyhEdXJhdGlvbiBkdXJhdGlvbiwgW2ludCB3aWR0aCA9IDRdKSB7CiAgbnVtIHNlY29uZHMgPSBkdXJhdGlvbi5pbk1pbGxpc2Vjb25kcyAvIDEwMDAuMDsKICBTdHJpbmcgdGV4dDsKICBmb3IgKGludCBkaWdpdHMgPSAzOyBkaWdpdHMgPj0gMDsgZGlnaXRzLS0pIHsKICAgIHRleHQgPSBzZWNvbmRzLnRvU3RyaW5nQXNGaXhlZChkaWdpdHMpOwogICAgaWYgKHRleHQubGVuZ3RoIDw9IHdpZHRoKSByZXR1cm4gdGV4dDsKICB9CiAgcmV0dXJuIHRleHQ7Cn0KCmNsYXNzIEFib3J0TGVnIHsKICBmaW5hbCBtZXNzYWdlOwogIEFib3J0TGVnKHRoaXMubWVzc2FnZSk7CiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAnQWJvcnRlZCBkdWUgdG8gLS10aHJvdy1vbi1lcnJvcjogJG1lc3NhZ2UnOwp9Cgp2b2lkIHdyaXRlU3RyaW5nKFVyaSB1cmksIFN0cmluZyB0ZXh0KSB7CiAgaWYgKCFlbmFibGVXcml0ZVN0cmluZykgcmV0dXJuOwogIGlmICh1cmkuc2NoZW1lICE9ICdmaWxlJykgewogICAgZmFpbCgnVW5oYW5kbGVkIHNjaGVtZSAke3VyaS5zY2hlbWV9LicpOwogIH0KICB2YXIgZmlsZSA9IG5ldyBGaWxlKHVyaS50b0ZpbGVQYXRoKCkpLm9wZW5TeW5jKG1vZGU6IEZpbGVNb2RlLndyaXRlKTsKICBmaWxlLndyaXRlU3RyaW5nU3luYyh0ZXh0KTsKICBmaWxlLmNsb3NlU3luYygpOwp9Cgp2b2lkIGZhaWwoU3RyaW5nIG1lc3NhZ2UpIHsKICBpZiAoZGlhZ25vc3RpY0hhbmRsZXIgIT0gbnVsbCkgewogICAgZGlhZ25vc3RpY0hhbmRsZXIucmVwb3J0KG51bGwsIG51bGwsIC0xLCAtMSwgbWVzc2FnZSwgYXBpLkRpYWdub3N0aWMuRVJST1IpOwogIH0gZWxzZSB7CiAgICBwcmludCgnRXJyb3I6ICRtZXNzYWdlJyk7CiAgfQogIGV4aXRGdW5jKDEpOwp9CgpGdXR1cmU8YXBpLkNvbXBpbGF0aW9uUmVzdWx0PiBjb21waWxlck1haW4oTGlzdDxTdHJpbmc+IGFyZ3VtZW50cywKICAgIHtmZS5Jbml0aWFsaXplZENvbXBpbGVyU3RhdGUga2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlfSkgYXN5bmMgewogIGlmICghYXJndW1lbnRzLmFueSgoYSkgPT4gYS5zdGFydHNXaXRoKCctLWxpYnJhcmllcy1zcGVjPScpKSkgewogICAgVXJpIHNjcmlwdCA9IFBsYXRmb3JtLnNjcmlwdDsKICAgIGlmIChzY3JpcHQuaXNTY2hlbWUoInBhY2thZ2UiKSkgewogICAgICBzY3JpcHQgPSBhd2FpdCBJc29sYXRlLnJlc29sdmVQYWNrYWdlVXJpKHNjcmlwdCk7CiAgICB9CiAgICBVcmkgbGlicmFyaWVzSnNvbiA9IHNjcmlwdC5yZXNvbHZlKF9kZWZhdWx0U3BlY2lmaWNhdGlvblVyaSk7CiAgICBhcmd1bWVudHMgPSA8U3RyaW5nPlsnLS1saWJyYXJpZXMtc3BlYz0ke2xpYnJhcmllc0pzb24udG9GaWxlUGF0aCgpfSddCiAgICAgIC4uYWRkQWxsKGFyZ3VtZW50cyk7CiAgfQogIHJldHVybiBjb21waWxlKGFyZ3VtZW50cywKICAgICAga2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlOiBrZXJuZWxJbml0aWFsaXplZENvbXBpbGVyU3RhdGUpOwp9Cgp2b2lkIGhlbHAoKSB7CiAgLy8gVGhpcyBtZXNzYWdlIHNob3VsZCBiZSBubyBsb25nZXIgdGhhbiAyMCBsaW5lcy4gVGhlIGRlZmF1bHQKICAvLyB0ZXJtaW5hbCBzaXplIG5vcm1hbGx5IDgweDI0LiBUd28gbGluZXMgYXJlIHVzZWQgZm9yIHRoZSBwcm9tcHRzCiAgLy8gYmVmb3JlIGFuZCBhZnRlciBydW5uaW5nIHRoZSBjb21waWxlci4gQW5vdGhlciB0d28gbGluZXMgbWF5IGJlCiAgLy8gdXNlZCB0byBwcmludCBhbiBlcnJvciBtZXNzYWdlLgogIHByaW50KCcnJwpVc2FnZTogZGFydDJqcyBbb3B0aW9uc10gZGFydGZpbGUKCkNvbXBpbGVzIERhcnQgdG8gSmF2YVNjcmlwdC4KCkNvbW1vbiBvcHRpb25zOgogIC1vIDxmaWxlPiBHZW5lcmF0ZSB0aGUgb3V0cHV0IGludG8gPGZpbGU+LgogIC1tICAgICAgICBHZW5lcmF0ZSBtaW5pZmllZCBvdXRwdXQuCiAgLWggICAgICAgIERpc3BsYXkgdGhpcyBtZXNzYWdlIChhZGQgLXYgZm9yIGluZm9ybWF0aW9uIGFib3V0IGFsbCBvcHRpb25zKS4nJycpOwp9Cgp2b2lkIHZlcmJvc2VIZWxwKCkgewogIHByaW50KHInJycKVXNhZ2U6IGRhcnQyanMgW29wdGlvbnNdIGRhcnRmaWxlCgpDb21waWxlcyBEYXJ0IHRvIEphdmFTY3JpcHQuCgpTdXBwb3J0ZWQgb3B0aW9uczoKICAtaCwgL2gsIC8/LCAtLWhlbHAKICAgIERpc3BsYXkgdGhpcyBtZXNzYWdlIChhZGQgLXYgZm9yIGluZm9ybWF0aW9uIGFib3V0IGFsbCBvcHRpb25zKS4KCiAgLW8gPGZpbGU+LCAtLW91dD08ZmlsZT4KICAgIEdlbmVyYXRlIHRoZSBvdXRwdXQgaW50byA8ZmlsZT4uCgogIC1tLCAtLW1pbmlmeQogICAgR2VuZXJhdGUgbWluaWZpZWQgb3V0cHV0LgoKICAtLWVuYWJsZS1hc3NlcnRzCiAgICBFbmFibGUgYXNzZXJ0aW9ucy4KCiAgLXYsIC0tdmVyYm9zZQogICAgRGlzcGxheSB2ZXJib3NlIGluZm9ybWF0aW9uLgoKICAtRDxuYW1lPj08dmFsdWU+CiAgICBEZWZpbmUgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuCgogIC0tdmVyc2lvbgogICAgRGlzcGxheSB2ZXJzaW9uIGluZm9ybWF0aW9uLgoKICAtLXBhY2thZ2VzPTxwYXRoPgogICAgUGF0aCB0byB0aGUgcGFja2FnZSByZXNvbHV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZSwgd2hpY2ggc3VwcGxpZXMgYSBtYXBwaW5nCiAgICBvZiBwYWNrYWdlIG5hbWVzIHRvIHBhdGhzLgoKICAtLXN1cHByZXNzLXdhcm5pbmdzCiAgICBEbyBub3QgZGlzcGxheSBhbnkgd2FybmluZ3MuCgogIC0tZmF0YWwtd2FybmluZ3MKICAgIFRyZWF0IHdhcm5pbmdzIGFzIGNvbXBpbGF0aW9uIGVycm9ycy4KCiAgLS1zdXBwcmVzcy1oaW50cwogICAgRG8gbm90IGRpc3BsYXkgYW55IGhpbnRzLgoKICAtLWVuYWJsZS1kaWFnbm9zdGljLWNvbG9ycwogICAgQWRkIGNvbG9ycyB0byBkaWFnbm9zdGljIG1lc3NhZ2VzLgoKICAtLXRlcnNlCiAgICBFbWl0IGRpYWdub3N0aWNzIHdpdGhvdXQgc3VnZ2VzdGlvbnMgZm9yIGhvdyB0byBnZXQgcmlkIG9mIHRoZSBkaWFnbm9zZWQKICAgIHByb2JsZW1zLgoKICAtLXNob3ctcGFja2FnZS13YXJuaW5ncwogICAgU2hvdyB3YXJuaW5ncyBhbmQgaGludHMgZ2VuZXJhdGVkIGZyb20gcGFja2FnZXMuCgogIC0tY3NwCiAgICBEaXNhYmxlIGR5bmFtaWMgZ2VuZXJhdGlvbiBvZiBjb2RlIGluIHRoZSBnZW5lcmF0ZWQgb3V0cHV0LiBUaGlzIGlzCiAgICBuZWNlc3NhcnkgdG8gc2F0aXNmeSBDU1AgcmVzdHJpY3Rpb25zIChzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvQ1NQLykuCgogIC0tbm8tc291cmNlLW1hcHMKICAgIERvIG5vdCBnZW5lcmF0ZSBhIHNvdXJjZSBtYXAgZmlsZS4KCiAgLU88MCwxLDIsMyw0PgogICAgQ29udHJvbHMgb3B0aW1pemF0aW9ucyB0aGF0IGNhbiBoZWxwIHJlZHVjZSBjb2RlLXNpemUgYW5kIGltcHJvdmUKICAgIHBlcmZvcm1hbmNlIG9mIHRoZSBnZW5lcmF0ZWQgY29kZSBmb3IgZGVwbG95bWVudC4KCiAgICAtTzAKICAgICAgIERpc2FibGVzIGFsbCBvcHRpbWl6YXRpb25zLiBFcXVpdmFsZW50IHRvIGNhbGxpbmcgZGFydDJqcyB3aXRoIHRoZXNlCiAgICAgICBleHRyYSBmbGFnczoKICAgICAgICAtLWRpc2FibGUtaW5saW5pbmcKICAgICAgICAtLWRpc2FibGUtdHlwZS1pbmZlcmVuY2UKICAgICAgICAtLWRpc2FibGUtcnRpLW9wdGltaXphdGlvbnMKCgogICAgICAgU29tZSBvcHRpbWl6YXRpb25zIGNhbm5vdCBiZSBkaXNzYWJsZWQgYXQgdGhpcyB0aW1lLCBhcyB3ZSBhZGQgdGhlIG9wdGlvbgogICAgICAgdG8gZGlzYWJsZSB0aGVtLCB0aGV5IHdpbGwgYmUgYWRkZWQgaGVyZSBhcyB3ZWxsLgoKICAgIC1PMQogICAgICAgRW5hYmxlcyBkZWZhdWx0IG9wdGltaXphdGlvbnMuIEVxdWl2YWxlbnQgdG8gY2FsbGluZyBkYXJ0MmpzIHdpdGggbm8KICAgICAgIGV4dHJhIGZsYWdzLgoKICAgIC1PMgogICAgICAgRW5hYmxlcyBvcHRpbWl6YXRpb25zIHRoYXQgcmVzcGVjdCB0aGUgbGFuZ3VhZ2Ugc2VtYW50aWNzIGFuZCBhcmUgc2FmZQogICAgICAgZm9yIGFsbCBwcm9ncmFtcy4gSXQgaG93ZXZlciBjaGFuZ2VzIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdHlwZXMsCiAgICAgICB3aGljaCB3aWxsIG5vIGxvbmdlciBiZSBjb25zaXN0ZW50IHdpdGggdGhlIERhcnQgVk0gb3IgRERDLgoKICAgICAgIEVxdWl2YWxlbnQgdG8gY2FsbGluZyBkYXJ0MmpzIHdpdGggdGhlc2UgZXh0cmEgZmxhZ3M6CiAgICAgICAgLS1taW5pZnkKICAgICAgICAtLWxheC1ydW50aW1lLXR5cGUtdG8tc3RyaW5nCgogICAgLU8zCiAgICAgICBFbmFibGVzIG9wdGltaXphdGlvbnMgdGhhdCByZXNwZWN0IHRoZSBsYW5ndWFnZSBzZW1hbnRpY3Mgb25seSBvbgogICAgICAgcHJvZ3JhbXMgdGhhdCBkb24ndCBldmVyIHRocm93IGFueSBzdWJ0eXBlIG9mIGBFcnJvcmAuICBUaGVzZQogICAgICAgb3B0aW1pemF0aW9ucyBpbXByb3ZlIHRoZSBnZW5lcmF0ZWQgY29kZSwgYnV0IHRoZXkgbWF5IGNhdXNlIHByb2dyYW1zIHRvCiAgICAgICBiZWhhdmUgdW5leHBlY3RlZGx5IGlmIHRoaXMgYXNzdW1wdGlvbiBpcyBub3QgbWV0LiAgVG8gdXNlIHRoaXMKICAgICAgIG9wdGlvbiwgd2UgcmVjb21tZW5kIHRoYXQgeW91IHByb3Blcmx5IHRlc3QgeW91ciBhcHBsaWNhdGlvbiBmaXJzdAogICAgICAgd2l0aG91dCBpdCwgYW5kIGVuc3VyZSB0aGF0IG5vIHN1YnR5cGUgb2YgYEVycm9yYCAoc3VjaCBhcyBgVHlwZUVycm9yYCkKICAgICAgIGlzIGV2ZXIgdGhyb3duLgoKICAgICAgIEVxdWl2YWxlbnQgdG8gY2FsbGluZyBkYXJ0MmpzIHdpdGggdGhlc2UgZXh0cmEgZmxhZ3M6CiAgICAgICAgIC1PMgogICAgICAgICAtLW9taXQtaW1wbGljaXQtY2hlY2tzCgogICAgLU80CiAgICAgICBFbmFibGVzIG1vcmUgYWdncmVzc2l2ZSBvcHRpbWl6YXRpb25zIHRoYW4gLU8zLCBidXQgd2l0aCB0aGUgc2FtZQogICAgICAgYXNzdW1wdGlvbnMuIFRoZXNlIG9wdGltaXphdGlvbnMgYXJlIG9uIGEgc2VwYXJhdGUgZ3JvdXAgYmVjYXVzZSB0aGV5CiAgICAgICBhcmUgbW9yZSBzdXNjZXB0aWJsZSB0byB2YXJpYXRpb25zIGluIGlucHV0IGRhdGEuIFRvIHVzZSB0aGlzIG9wdGlvbiB3ZQogICAgICAgcmVjb21tZW5kIHRvIHBheSBzcGVjaWFsIGF0dGVudGlvbiB0byB0ZXN0IGVkZ2UgY2FzZXMgaW4gdXNlciBpbnB1dC4KCiAgICAgICBFcXVpdmFsZW50IHRvIGNhbGxpbmcgZGFydDJqcyB3aXRoIHRoZXNlIGV4dHJhIGZsYWdzOgogICAgICAgICAtTzMKICAgICAgICAgLS10cnVzdC1wcmltaXRpdmVzCgogICAgV2hpbGUgc29tZSBvZiB0aGUgaW5kaXZpZHVhbCBvcHRpbWl6YXRpb25zIGFuZCBmbGFncyBtYXkgY2hhbmdlIHdpdGggdGltZSwKICAgIHdlIGludGVuZCB0byBrZWVwIHRoZSAtTyogZmxhZ3Mgc3RhYmxlLiBOZXcgc2FmZSBvcHRpbWl6YXRpb25zIG1heSBiZSBhZGRlZAogICAgb24gYW55IGxldmVsLCBhbmQgb3B0aW1pemF0aW9ucyB0aGF0IG9ubHkgd29yayBvbiBzb21lIHByb2dyYW1zIG1heSBtb3ZlIHVwCiAgICBmcm9tIG9uZSBsZXZlbCB0byB0aGUgbmV4dCAoZm9yIGluc3RhbmNlLCBvbmNlIGFsdGVybmF0aXZlIHNhZmUKICAgIG9wdGltaXphdGlvbnMgYXJlIGltcGxlbWVudGVkLCBgb21pdC1pbXBsaWNpdC1jaGVja3NgIG1heSBiZSByZW1vdmVkIG9yIG1heQogICAgbW92ZSB0byB0aGUgTzQgbGV2ZWwpLgoKVGhlIGZvbGxvd2luZyBpbmRpdmlkdWFsIG9wdGlvbnMgYXJlIGluY2x1ZGVkIGluIHNvbWUgb2YgdGhlIC1PIG9wdGltaXphdGlvbgpsZXZlbHMgYWJvdmUuIFRoZXkgaGVscCByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGdlbmVyYXRlZCBjb2RlLCBidXQgdGhleSBtYXkKY2F1c2UgcHJvZ3JhbXMgdG8gYmVoYXZlIHVuZXhwZWN0ZWRseSBpZiBhc3N1bXB0aW9ucyBhcmUgbm90IG1ldC4gT25seSB0dXJuIG9uCnRoZXNlIGZsYWdzIGlmIHlvdSBoYXZlIGVub3VnaCB0ZXN0IGNvdmVyYWdlIHRvIGVuc3VyZSB0aGV5IGFyZSBzYWZlIHRvIHVzZToKCiAgLS1vbWl0LWltcGxpY2l0LWNoZWNrcwogICAgT21pdCBpbXBsaWNpdCBydW50aW1lIGNoZWNrcywgc3VjaCBhcyBwYXJhbWV0ZXIgY2hlY2tzIGFuZCBpbXBsaWNpdAogICAgZG93bmNhc3RzLiBUaGVzZSBjaGVja3MgYXJlIGluY2x1ZGVkIGJ5IGRlZmF1bHQgaW4gRGFydCAyLjAuIEJ5CiAgICB1c2luZyB0aGlzIGZsYWcgdGhlIGNoZWNrcyBhcmUgcmVtb3ZlZCwgaG93ZXZlciB0aGUgY29tcGlsZXIgd2lsbCBhc3N1bWUKICAgIHRoYXQgYWxsIHN1Y2ggY2hlY2tzIHdlcmUgdmFsaWQgYW5kIG1heSB1c2UgdGhpcyBpbmZvcm1hdGlvbiBmb3IKICAgIG9wdGltaXphdGlvbnMuIFVzZSB0aGlzIG9wdGlvbiBvbmx5IGlmIHlvdSBoYXZlIGVub3VnaCB0ZXN0aW5nIHRvIGVuc3VyZQogICAgdGhhdCB5b3VyIHByb2dyYW0gd29ya3Mgd2l0aCB0aGUgY2hlY2tzLgoKICAtLXRydXN0LXByaW1pdGl2ZXMKICAgIEFzc3VtZSB0aGF0IG9wZXJhdGlvbnMgb24gbnVtYmVycywgc3RyaW5ncywgYW5kIGxpc3RzIGhhdmUgdmFsaWQgaW5wdXRzLgogICAgVGhpcyBvcHRpb24gYWxsb3dzIHRoZSBjb21waWxlciB0byBkcm9wIHJ1bnRpbWUgY2hlY2tzIGZvciB0aG9zZSBvcGVyYXRpb25zLgogICAgTm90ZTogYSB3ZWxsLXR5cGVkIHByb2dyYW0gaXMgbm90IGd1YXJhbnRlZWQgdG8gaGF2ZSB2YWxpZCBpbnB1dHMuIEZvcgogICAgZXhhbXBsZSwgYW4gaW50IGluZGV4IGFyZ3VtZW50IG1heSBiZSBudWxsIG9yIG91dCBvZiByYW5nZS4KCiAgLS1sYXgtcnVudGltZS10eXBlLXRvLXN0cmluZwogICAgT21pdHMgcmVpZmllZCBjbGFzcyB0eXBlIGFyZ3VtZW50cyB3aGVuIHRoZXNlIGFyZSBvbmx5IG5lZWRlZCBmb3IgYHRvU3RyaW5nYAogICAgb24gYHJ1bnRpbWVUeXBlYC4gVGhpcyBpcyB1c2VmdWwgaWYgYHJ1bnRpbWVUeXBlLnRvU3RyaW5nKClgIGlzIG9ubHkgdXNlZAogICAgZm9yIGRlYnVnZ2luZy4gTm90ZSB0aGF0IHNlbWFudGljcyBvZiBvdGhlciB1c2VzIG9mIGAucnVudGltZVR5cGVgLCBmb3IKICAgIGluc3RhbmNlIGBhLnJ1bnRpbWVUeXBlID09IGIucnVudGltZVR5cGVgLCBpcyBub3QgYWZmZWN0ZWQgYnkgdGhpcyBmbGFnLgoKVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBvbmx5IHVzZWQgZm9yIGNvbXBpbGVyIGRldmVsb3BtZW50IGFuZCBtYXkKYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uOgoKICAtLXRocm93LW9uLWVycm9yCiAgICBUaHJvdyBhbiBleGNlcHRpb24gaWYgYSBjb21waWxlLXRpbWUgZXJyb3IgaXMgZGV0ZWN0ZWQuCgogIC0tbGlicmFyaWVzLXNwZWM9PGZpbGU+CiAgICBBIC5qc29uIGZpbGUgY29udGFpbmluZyB0aGUgbGlicmFyaWVzIHNwZWNpZmljYXRpb24gZm9yIGRhcnQyanMuCgogIC0tYWxsb3ctbW9jay1jb21waWxhdGlvbgogICAgRG8gbm90IGdlbmVyYXRlIGEgY2FsbCB0byBtYWluIGlmIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nCiAgICBsaWJyYXJpZXMgYXJlIHVzZWQ6IGRhcnQ6ZG9tLCBkYXJ0Omh0bWwgZGFydDppby4KCiAgLS1kaXNhYmxlLW5hdGl2ZS1saXZlLXR5cGUtYW5hbHlzaXMKICAgIERpc2FibGUgdGhlIG9wdGltaXphdGlvbiB0aGF0IHJlbW92ZXMgdW51c2VkIG5hdGl2ZSB0eXBlcyBmcm9tIGRhcnQ6aHRtbAogICAgYW5kIHJlbGF0ZWQgbGlicmFyaWVzLgoKICAtLXNlcnZlci1tb2RlCiAgICBDb21waWxlIHdpdGggc2VydmVyIHN1cHBvcnQuIFRoZSBjb21waWxlciB3aWxsIHVzZSBhIGxpYnJhcnkgc3BlY2lmaWNhdGlvbgogICAgdGhhdCBkaXNhYmxlcyBkYXJ0Omh0bWwgYnV0IHN1cHBvcnRzIGRhcnQ6anMgaW4gY29uZGl0aW9uYWwgaW1wb3J0cy4KCiAgLS1jYXRlZ29yaWVzPTxjYXRlZ29yaWVzPgogICAgKGRlcHJlY2F0ZWQpCiAgICBVc2UgJy0tc2VydmVyLW1vZGUnIGluc3RlYWQgb2YgJy0tY2F0ZWdvcmllcz1TZXJ2ZXInLiBBbGwgb3RoZXIgY2F0ZWdvcnkKICAgIHZhbHVlcyBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgY29tcGlsZXIgYmVoYXZpb3IuCgogIC0tZGVmZXJyZWQtbWFwPTxmaWxlPgogICAgR2VuZXJhdGVzIGEganNvbiBmaWxlIHdpdGggYSBtYXBwaW5nIGZyb20gZWFjaCBkZWZlcnJlZCBpbXBvcnQgdG8gYSBsaXN0IG9mCiAgICB0aGUgcGFydC5qcyBmaWxlcyB0aGF0IHdpbGwgYmUgbG9hZGVkLgoKICAtLWR1bXAtaW5mb1s9PGZvcm1hdD5dCiAgICBHZW5lcmF0ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGdlbmVyYXRlZCBjb2RlLiAnZm9ybWF0JyBjYW4gYmUgZWl0aGVyCiAgICAnanNvbicgb3IgJ2JpbmFyeScuCiAgICBZb3UgY2FuIGluc3BlY3QgdGhlIGdlbmVyYXRlZCBkYXRhIHVzaW5nIHRvb2xzIGZyb20gJ3BhY2thZ2U6ZGFydDJqc19pbmZvJy4KCiAgLS1nZW5lcmF0ZS1jb2RlLXdpdGgtY29tcGlsZS10aW1lLWVycm9ycwogICAgR2VuZXJhdGVzIG91dHB1dCBldmVuIGlmIHRoZSBwcm9ncmFtIGNvbnRhaW5zIGNvbXBpbGUtdGltZSBlcnJvcnMuIFVzZSB0aGUKICAgIGV4aXQgY29kZSB0byBkZXRlcm1pbmUgaWYgY29tcGlsYXRpb24gZmFpbGVkLgoKICAtLW5vLWZyZXF1ZW5jeS1iYXNlZC1taW5pZmljYXRpb24KICAgIEV4cGVyaW1lbnRhbC4gIERpc2FibGVkIHRoZSBuZXcgZnJlcXVlbmN5IGJhc2VkIG1pbmlmeWluZyBuYW1lciBhbmQgdXNlIHRoZQogICAgb2xkIG5hbWVyIGluc3RlYWQuCicnJwogICAgICAudHJpbSgpKTsKfQoKdm9pZCBoZWxwQW5kRXhpdChib29sIHdhbnRIZWxwLCBib29sIHdhbnRWZXJzaW9uLCBib29sIHZlcmJvc2UpIHsKICBpZiAod2FudFZlcnNpb24pIHsKICAgIHZhciB2ZXJzaW9uID0gKEJVSUxEX0lEID09IG51bGwpID8gJzxub24tU0RLIGJ1aWxkPicgOiBCVUlMRF9JRDsKICAgIHByaW50KCdEYXJ0LXRvLUphdmFTY3JpcHQgY29tcGlsZXIgKGRhcnQyanMpIHZlcnNpb246ICR2ZXJzaW9uJyk7CiAgfQogIGlmICh3YW50SGVscCkgewogICAgaWYgKHZlcmJvc2UpIHsKICAgICAgdmVyYm9zZUhlbHAoKTsKICAgIH0gZWxzZSB7CiAgICAgIGhlbHAoKTsKICAgIH0KICB9CiAgZXhpdEZ1bmMoMCk7Cn0KCnZvaWQgaGVscEFuZEZhaWwoU3RyaW5nIG1lc3NhZ2UpIHsKICBoZWxwKCk7CiAgcHJpbnQoJycpOwogIGZhaWwobWVzc2FnZSk7Cn0KCnZvaWQgbWFpbihMaXN0PFN0cmluZz4gYXJndW1lbnRzKSB7CiAgLy8gU2luY2UgdGhlIHNkay9iaW4vZGFydDJqcyBzY3JpcHQgYWRkcyBpdHMgb3duIGFyZ3VtZW50cyBpbiBmcm9udCBvZgogIC8vIHVzZXItc3VwcGxpZWQgYXJndW1lbnRzIHdlIHNlYXJjaCBmb3IgJy0tYmF0Y2gnIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QuCiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50cy5sYXN0ID09ICItLWJhdGNoIikgewogICAgYmF0Y2hNYWluKGFyZ3VtZW50cy5zdWJsaXN0KDAsIGFyZ3VtZW50cy5sZW5ndGggLSAxKSk7CiAgICByZXR1cm47CiAgfQogIGludGVybmFsTWFpbihhcmd1bWVudHMpOwp9Cgp0eXBlZGVmIHZvaWQgRXhpdEZ1bmMoaW50IGV4aXRDb2RlKTsKdHlwZWRlZiBGdXR1cmU8YXBpLkNvbXBpbGF0aW9uUmVzdWx0PiBDb21waWxlRnVuYygKICAgIENvbXBpbGVyT3B0aW9ucyBjb21waWxlck9wdGlvbnMsCiAgICBhcGkuQ29tcGlsZXJJbnB1dCBjb21waWxlcklucHV0LAogICAgYXBpLkNvbXBpbGVyRGlhZ25vc3RpY3MgY29tcGlsZXJEaWFnbm9zdGljcywKICAgIGFwaS5Db21waWxlck91dHB1dCBjb21waWxlck91dHB1dCk7CgpFeGl0RnVuYyBleGl0RnVuYyA9IGV4aXQ7CkNvbXBpbGVGdW5jIGNvbXBpbGVGdW5jID0gYXBpLmNvbXBpbGU7CgovLy8gSWYgYHRydWVgIGEgJy5kZXBzJyBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkIGFmdGVyIGNvbXBpbGF0aW9uLgovLy8KLy8vIFNldCB0aGlzIHRvIGBmYWxzZWAgaW4gZW5kLXRvLWVuZCB0ZXN0cyB0byBhdm9pZCBnZW5lcmF0aW5nICcuZGVwcycgZmlsZXMuCmJvb2wgZW5hYmxlV3JpdGVTdHJpbmcgPSB0cnVlOwoKRnV0dXJlPGFwaS5Db21waWxhdGlvblJlc3VsdD4gaW50ZXJuYWxNYWluKExpc3Q8U3RyaW5nPiBhcmd1bWVudHMsCiAgICB7ZmUuSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlIGtlcm5lbEluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZX0pIHsKICBGdXR1cmU8YXBpLkNvbXBpbGF0aW9uUmVzdWx0PiBvbkVycm9yKGV4Y2VwdGlvbiwgdHJhY2UpIHsKICAgIC8vIElmIHdlIGFyZSBhbHJlYWR5IHRyeWluZyB0byBleGl0LCBqdXN0IGNvbnRpbnVlIGV4aXRpbmcuCiAgICBpZiAoZXhjZXB0aW9uID09IF9FWElUX1NJR05BTCkgdGhyb3cgZXhjZXB0aW9uOwoKICAgIHRyeSB7CiAgICAgIHByaW50KCdUaGUgY29tcGlsZXIgY3Jhc2hlZDogJGV4Y2VwdGlvbicpOwogICAgfSBjYXRjaCAoaWdub3JlZCkgewogICAgICBwcmludCgnVGhlIGNvbXBpbGVyIGNyYXNoZWQ6IGVycm9yIHdoaWxlIHByaW50aW5nIGV4Y2VwdGlvbicpOwogICAgfQoKICAgIHRyeSB7CiAgICAgIGlmICh0cmFjZSAhPSBudWxsKSB7CiAgICAgICAgcHJpbnQodHJhY2UpOwogICAgICB9CiAgICB9IGZpbmFsbHkgewogICAgICBleGl0RnVuYygyNTMpOyAvLyAyNTMgaXMgcmVjb2duaXplZCBhcyBhIGNyYXNoIGJ5IG91ciB0ZXN0IHNjcmlwdHMuCiAgICB9CiAgICByZXR1cm4gbmV3IEZ1dHVyZS5lcnJvcihleGNlcHRpb24sIHRyYWNlKTsKICB9CgogIHRyeSB7CiAgICByZXR1cm4gY29tcGlsZXJNYWluKGFyZ3VtZW50cywKICAgICAgICAgICAga2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlOiBrZXJuZWxJbml0aWFsaXplZENvbXBpbGVyU3RhdGUpCiAgICAgICAgLmNhdGNoRXJyb3Iob25FcnJvcik7CiAgfSBjYXRjaCAoZXhjZXB0aW9uLCB0cmFjZSkgewogICAgcmV0dXJuIG9uRXJyb3IoZXhjZXB0aW9uLCB0cmFjZSk7CiAgfQp9CgpjbGFzcyBfRXhpdFNpZ25hbCB7CiAgY29uc3QgX0V4aXRTaWduYWwoKTsKfQoKY29uc3QgX0VYSVRfU0lHTkFMID0gY29uc3QgX0V4aXRTaWduYWwoKTsKCnZvaWQgYmF0Y2hNYWluKExpc3Q8U3RyaW5nPiBiYXRjaEFyZ3VtZW50cykgewogIGludCBleGl0Q29kZTsKICBleGl0RnVuYyA9IChlcnJvckNvZGUpIHsKICAgIC8vIFNpbmNlIHdlIG9ubHkgdGhyb3cgYW5vdGhlciBwYXJ0IG9mIHRoZSBjb21waWxlciBtaWdodCBpbnRlcmNlcHQgb3VyCiAgICAvLyBleGNlcHRpb24gYW5kIHRyeSB0byBleGl0IHdpdGggYSBkaWZmZXJlbnQgY29kZS4KICAgIGlmIChleGl0Q29kZSA9PSAwKSB7CiAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlOwogICAgfQogICAgdGhyb3cgX0VYSVRfU0lHTkFMOwogIH07CgogIHZhciBzdHJlYW0gPSBzdGRpbi50cmFuc2Zvcm0odXRmOC5kZWNvZGVyKS50cmFuc2Zvcm0obmV3IExpbmVTcGxpdHRlcigpKTsKICB2YXIgc3Vic2NyaXB0aW9uOwogIGZlLkluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZSBrZXJuZWxJbml0aWFsaXplZENvbXBpbGVyU3RhdGU7CiAgc3Vic2NyaXB0aW9uID0gc3RyZWFtLmxpc3RlbigobGluZSkgewogICAgbmV3IEZ1dHVyZS5zeW5jKCgpIHsKICAgICAgc3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgICAgIGV4aXRDb2RlID0gMDsKICAgICAgaWYgKGxpbmUgPT0gbnVsbCkgZXhpdCgwKTsKICAgICAgTGlzdDxTdHJpbmc+IGFyZ3MgPSA8U3RyaW5nPltdOwogICAgICBhcmdzLmFkZEFsbChiYXRjaEFyZ3VtZW50cyk7CiAgICAgIGFyZ3MuYWRkQWxsKHNwbGl0TGluZShsaW5lLCB3aW5kb3dzOiBQbGF0Zm9ybS5pc1dpbmRvd3MpKTsKICAgICAgcmV0dXJuIGludGVybmFsTWFpbihhcmdzLAogICAgICAgICAga2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlOiBrZXJuZWxJbml0aWFsaXplZENvbXBpbGVyU3RhdGUpOwogICAgfSkuY2F0Y2hFcnJvcigoZXhjZXB0aW9uLCB0cmFjZSkgewogICAgICBpZiAoIWlkZW50aWNhbChleGNlcHRpb24sIF9FWElUX1NJR05BTCkpIHsKICAgICAgICBleGl0Q29kZSA9IDI1MzsKICAgICAgfQogICAgfSkudGhlbigoYXBpLkNvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkgewogICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHsKICAgICAgICBrZXJuZWxJbml0aWFsaXplZENvbXBpbGVyU3RhdGUgPSByZXN1bHQua2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlOwogICAgICB9CiAgICB9KS53aGVuQ29tcGxldGUoKCkgewogICAgICAvLyBUaGUgdGVzdGluZyBmcmFtZXdvcmsgd2FpdHMgZm9yIGEgc3RhdHVzIGxpbmUgb24gc3Rkb3V0IGFuZAogICAgICAvLyBzdGRlcnIgYmVmb3JlIG1vdmluZyB0byB0aGUgbmV4dCB0ZXN0LgogICAgICBpZiAoZXhpdENvZGUgPT0gMCkgewogICAgICAgIHByaW50KCI+Pj4gVEVTVCBPSyIpOwogICAgICB9IGVsc2UgaWYgKGV4aXRDb2RlID09IDI1MykgewogICAgICAgIHByaW50KCI+Pj4gVEVTVCBDUkFTSCIpOwogICAgICB9IGVsc2UgewogICAgICAgIHByaW50KCI+Pj4gVEVTVCBGQUlMIik7CiAgICAgIH0KICAgICAgc3RkZXJyLndyaXRlbG4oIj4+PiBFT0YgU1RERVJSIik7CiAgICAgIHN1YnNjcmlwdGlvbi5yZXN1bWUoKTsKICAgIH0pOwogIH0pOwp9CgplbnVtIFJlYWRTdHJhdGVneSB7IGZyb21EYXJ0LCBmcm9tRGF0YSwgZnJvbUNvZGVnZW4gfQplbnVtIFdyaXRlU3RyYXRlZ3kgeyB0b0tlcm5lbCwgdG9EYXRhLCB0b0NvZGVnZW4sIHRvSnMgfQqElwBOTjwBGQEhL0UkAUABJiMZLCQhMwFOLAEwBE0nBFEYAUZGDiYBFhgeIAEaJAQBTgIBKARIM01GREcTKTAEDwIBQD0/AgFJRh0sIwQ/AS4JISkwMTAiLSklESQKGAgGNwQCAS8BOUQyLiI2IAsUExQWFxQVGxwaLRkcJRwaIxAVGRUSFSAYPzU0AT4oARopBAE1IE0EASlDBAErFE0EAS8cESUjPQggDTIGOwQBLzozSDIOBh8EASgsMhNKOAYEAR5ANwQBKC83BAE0PxYhBAEzTgQBFxQeBAEyIQQBKRgbBAErKTI0HwQBKEVRGFBJJSUNEU4GBAEuF0wEASYmTAY0LAYEAS42PEZBBAElMSo4BjQqOwYsBAEpKU8GLQQBJzMqOAY0SAYnTQYqBAEqMyo7BjFNBipQBi0EASo6BAErOwQBJiFODgYyHQ4GRDIEAS0ZTR0oIQYEAS04LB0SHBESEhsREjMREiUREUAIBgQBJzI4S0IcHQg5PxkdCDYXSBg1REgyNEE6SkxOURdJF0xERjJATDVBOEBFMjQ5NTscCDobCD85OUw7SUE6QTg9OThJOTY7P0BJQjE5PE5OP0BGREY/MTk+N0JCQgE7SCFCN0Y2Tk4+PDQBHjVKTSZITwFBRj9JPAEzNDEyCDAwBwUBJAE6JBw4CzYEAUYZKQQeMwQjPQQeMwQbLQQeMwQBIxlQRwQBLElKBAEfNwQBIUMEARssBB4mOAQBLU0aBAE2SgQBJAEbHTINITQiMyw5PSw8CA0fND45M0c9MzYIDSJQLi9BPzZKCDNJCCNAKCdECCJAJ0Y8KAg6PA0EGiANIEQ3DSNEN0c9I0AoJ0QIPAQdLSoxBAEyPDwBSB0jBhFPATATGBYBFBsXARQcIic2Jw8iIjYbUTcPJSI2G1EtQzc1DwYBHR8iLkZKGEk4DyMiJTYYSTMPISQjNhhJLkFQDyQkIzYuRDItDwYBGj0/QyUeRVAGLzoYKTVGPAoIDRYGARMEATUBLEM8KjI1GiAkIEYtFk0eAgFLRBpQRk8EDwIBUCtGMg8wLCsEDwIBEREaDD0CASkiHi0ESB4UAgEcI1ELHgQPAgFDSkIiJjgGQksbBBxHAgEOQUZFJQwiAR0BEC0mUgIBFQ0iAR0BExVFARolAQ8eARMXARAhARMkAQwhARRQHwEWIQETKgETHgEdJwEKTQ4BGjUBCEhLARMnARBGNgEITBQbISQBAVE5AQhMFAEITlBDAT0RJQEISUVQR0pPFwE9DSABCElNT0wBPQ0cAU9QUERQGwFNTE9NARlIRE1FTS0BFU1RS0ABH1FOTE0BRSABEzwBGkUBGz41ASZNGwEQT0kBHBFNNAEYUCsBGUsYUAErTzIBJFAXBBACAUIVRUYEEhMVDQ4GBA8CASMKDRECASRJTT07DAQbAgElMyUlMSgBGicBQgRPHwFDRDxANAEKMRhFBgEKGxYIEEoGLwQBCCNMHh8mBAIBFBcCASoBLhAbTDgZHAYYBQFMFD4oGRwUISYjQSBLJzEYCC0cUAgZRTAbHiQhDyAIKB0IBgIBNjkBIXBhY2thZ2U6Y29tcGlsZXIvc3JjL2RhcnQyanMuZGFydDhzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvYXBpX3Vuc3RhYmxlL2RhcnQyanMuZGFydJ3OLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDphc3luYycgc2hvdyBGdXR1cmU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2tlcm5lbC5kYXJ0JyBzaG93IENvbXBvbmVudCwgU3RhdGVtZW50OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3RhcmdldC90YXJnZXRzLmRhcnQnIHNob3cgVGFyZ2V0OwoKaW1wb3J0ICcuLi9hcGlfcHJvdG90eXBlL2NvbXBpbGVyX29wdGlvbnMuZGFydCcgc2hvdyBDb21waWxlck9wdGlvbnM7CgppbXBvcnQgJy4uL2FwaV9wcm90b3R5cGUvZGlhZ25vc3RpY19tZXNzYWdlLmRhcnQnIHNob3cgRGlhZ25vc3RpY01lc3NhZ2VIYW5kbGVyOwoKaW1wb3J0ICcuLi9hcGlfcHJvdG90eXBlL2V4cGVyaW1lbnRhbF9mbGFncy5kYXJ0JyBzaG93IEV4cGVyaW1lbnRhbEZsYWc7CgppbXBvcnQgJy4uL2FwaV9wcm90b3R5cGUvZmlsZV9zeXN0ZW0uZGFydCcgc2hvdyBGaWxlU3lzdGVtOwoKaW1wb3J0ICcuLi9hcGlfcHJvdG90eXBlL2tlcm5lbF9nZW5lcmF0b3IuZGFydCcgc2hvdyBDb21waWxlclJlc3VsdDsKCmltcG9ydCAnLi4vYmFzZS9wcm9jZXNzZWRfb3B0aW9ucy5kYXJ0JyBzaG93IFByb2Nlc3NlZE9wdGlvbnM7CgppbXBvcnQgJy4uL2Jhc2UvbGlicmFyaWVzX3NwZWNpZmljYXRpb24uZGFydCcgc2hvdyBMaWJyYXJpZXNTcGVjaWZpY2F0aW9uOwoKaW1wb3J0ICcuLi9mYXN0YS9jb21waWxlcl9jb250ZXh0LmRhcnQnIHNob3cgQ29tcGlsZXJDb250ZXh0OwoKaW1wb3J0ICcuLi9mYXN0YS9mYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IG1lc3NhZ2VNaXNzaW5nTWFpbjsKCmltcG9ydCAnLi4vZmFzdGEvc2V2ZXJpdHkuZGFydCcgc2hvdyBTZXZlcml0eTsKCmltcG9ydCAnLi4va2VybmVsX2dlbmVyYXRvcl9pbXBsLmRhcnQnIHNob3cgZ2VuZXJhdGVLZXJuZWxJbnRlcm5hbDsKCmltcG9ydCAnLi4vZmFzdGEvc2Nhbm5lci5kYXJ0JyBzaG93IEVycm9yVG9rZW4sIFN0cmluZ1Rva2VuLCBUb2tlbjsKCmltcG9ydCAnLi4vZmFzdGEva2VybmVsL3JlZGlyZWN0aW5nX2ZhY3RvcnlfYm9keS5kYXJ0JyBhcyByZWRpcmVjdGluZzsKCmltcG9ydCAnY29tcGlsZXJfc3RhdGUuZGFydCcgc2hvdyBJbml0aWFsaXplZENvbXBpbGVyU3RhdGU7CgppbXBvcnQgJ3V0aWwuZGFydCcgc2hvdyBlcXVhbExpc3RzLCBlcXVhbE1hcHM7CgpleHBvcnQgJy4uL2FwaV9wcm90b3R5cGUvY29tcGlsZXJfb3B0aW9ucy5kYXJ0JwogICAgc2hvdyBDb21waWxlck9wdGlvbnMsIHBhcnNlRXhwZXJpbWVudGFsRmxhZ3MsIHBhcnNlRXhwZXJpbWVudGFsQXJndW1lbnRzOwoKZXhwb3J0ICcuLi9hcGlfcHJvdG90eXBlL2RpYWdub3N0aWNfbWVzc2FnZS5kYXJ0JwogICAgc2hvdwogICAgICAgIERpYWdub3N0aWNNZXNzYWdlLAogICAgICAgIGdldE1lc3NhZ2VDaGFyT2Zmc2V0LAogICAgICAgIGdldE1lc3NhZ2VIZWFkZXJUZXh0LAogICAgICAgIGdldE1lc3NhZ2VMZW5ndGgsCiAgICAgICAgZ2V0TWVzc2FnZVJlbGF0ZWRJbmZvcm1hdGlvbiwKICAgICAgICBnZXRNZXNzYWdlVXJpOwoKZXhwb3J0ICcuLi9hcGlfcHJvdG90eXBlL2V4cGVyaW1lbnRhbF9mbGFncy5kYXJ0JwogICAgc2hvdyBkZWZhdWx0RXhwZXJpbWVudGFsRmxhZ3MsIEV4cGVyaW1lbnRhbEZsYWc7CgpleHBvcnQgJy4uL2FwaV9wcm90b3R5cGUvZmlsZV9zeXN0ZW0uZGFydCcKICAgIHNob3cgRmlsZVN5c3RlbSwgRmlsZVN5c3RlbUVudGl0eSwgRmlsZVN5c3RlbUV4Y2VwdGlvbjsKCmV4cG9ydCAnLi4vYXBpX3Byb3RvdHlwZS9rZXJuZWxfZ2VuZXJhdG9yLmRhcnQnIHNob3cga2VybmVsRm9yUHJvZ3JhbTsKCmV4cG9ydCAnLi4vYXBpX3Byb3RvdHlwZS9zdGFuZGFyZF9maWxlX3N5c3RlbS5kYXJ0JyBzaG93IERhdGFGaWxlU3lzdGVtRW50aXR5OwoKZXhwb3J0ICcuLi9jb21wdXRlX3BsYXRmb3JtX2JpbmFyaWVzX2xvY2F0aW9uLmRhcnQnCiAgICBzaG93IGNvbXB1dGVQbGF0Zm9ybUJpbmFyaWVzTG9jYXRpb247CgpleHBvcnQgJy4uL2Zhc3RhL2Zhc3RhX2NvZGVzLmRhcnQnIHNob3cgTG9jYXRlZE1lc3NhZ2U7CgpleHBvcnQgJy4uL2Zhc3RhL29wZXJhdG9yLmRhcnQnIHNob3cgb3BlcmF0b3JGcm9tU3RyaW5nOwoKZXhwb3J0ICcuLi9mYXN0YS9wYXJzZXIvYXN5bmNfbW9kaWZpZXIuZGFydCcgc2hvdyBBc3luY01vZGlmaWVyOwoKZXhwb3J0ICcuLi9mYXN0YS9zY2FubmVyLmRhcnQnIHNob3cgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3IsIGlzTWludXNPcGVyYXRvcjsKCmV4cG9ydCAnLi4vZmFzdGEvc2Nhbm5lci9jaGFyYWN0ZXJzLmRhcnQnCiAgICBzaG93CiAgICAgICAgJCQsCiAgICAgICAgJDAsCiAgICAgICAgJDksCiAgICAgICAgJEEsCiAgICAgICAgJEJBQ0tTTEFTSCwKICAgICAgICAkQ1IsCiAgICAgICAgJERFTCwKICAgICAgICAkRFEsCiAgICAgICAgJEhBU0gsCiAgICAgICAgJExGLAogICAgICAgICRMUywKICAgICAgICAkUFMsCiAgICAgICAgJFRBQiwKICAgICAgICAkWiwKICAgICAgICAkXywKICAgICAgICAkYSwKICAgICAgICAkZywKICAgICAgICAkcywKICAgICAgICAkejsKCmV4cG9ydCAnLi4vZmFzdGEvc2V2ZXJpdHkuZGFydCcgc2hvdyBTZXZlcml0eTsKCmV4cG9ydCAnLi4vZmFzdGEvdXRpbC9saW5rLmRhcnQnIHNob3cgTGluaywgTGlua0J1aWxkZXI7CgpleHBvcnQgJy4uL2Zhc3RhL3V0aWwvbGlua19pbXBsZW1lbnRhdGlvbi5kYXJ0JyBzaG93IExpbmtFbnRyeTsKCmV4cG9ydCAnLi4vZmFzdGEvdXRpbC9yZWxhdGl2aXplLmRhcnQnIHNob3cgcmVsYXRpdml6ZVVyaTsKCmV4cG9ydCAnY29tcGlsZXJfc3RhdGUuZGFydCcgc2hvdyBJbml0aWFsaXplZENvbXBpbGVyU3RhdGU7Cgp2b2lkIGNsZWFyU3RyaW5nVG9rZW5DYW5vbmljYWxpemVyKCkgewogIC8vIFRPRE8oYWhlKTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVtb3ZlIHRoaXMuIEZhc3RhIHNob3VsZCB0YWtlIGNhcmUgb2YKICAvLyBjbGVhcmluZyB0aGUgY2FjaGUgd2hlbi4KICBTdHJpbmdUb2tlbi5jYW5vbmljYWxpemVyLmNsZWFyKCk7Cn0KCkluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZSBpbml0aWFsaXplQ29tcGlsZXIoCiAgICBJbml0aWFsaXplZENvbXBpbGVyU3RhdGUgb2xkU3RhdGUsCiAgICBUYXJnZXQgdGFyZ2V0LAogICAgVXJpIGxpYnJhcmllc1NwZWNpZmljYXRpb25VcmksCiAgICBMaXN0PFVyaT4gbGlua2VkRGVwZW5kZW5jaWVzLAogICAgVXJpIHBhY2thZ2VzRmlsZVVyaSwKICAgIHtMaXN0PFVyaT4gZGVwZW5kZW5jaWVzLAogICAgTWFwPEV4cGVyaW1lbnRhbEZsYWcsIGJvb2w+IGV4cGVyaW1lbnRhbEZsYWdzLAogICAgYm9vbCB2ZXJpZnk6IGZhbHNlfSkgewogIGxpbmtlZERlcGVuZGVuY2llcy5zb3J0KChhLCBiKSA9PiBhLnRvU3RyaW5nKCkuY29tcGFyZVRvKGIudG9TdHJpbmcoKSkpOwoKICBpZiAob2xkU3RhdGUgIT0gbnVsbCAmJgogICAgICBvbGRTdGF0ZS5vcHRpb25zLnBhY2thZ2VzRmlsZVVyaSA9PSBwYWNrYWdlc0ZpbGVVcmkgJiYKICAgICAgb2xkU3RhdGUub3B0aW9ucy5saWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpID09IGxpYnJhcmllc1NwZWNpZmljYXRpb25VcmkgJiYKICAgICAgZXF1YWxMaXN0cyhvbGRTdGF0ZS5vcHRpb25zLmxpbmtlZERlcGVuZGVuY2llcywgbGlua2VkRGVwZW5kZW5jaWVzKSAmJgogICAgICBlcXVhbE1hcHMob2xkU3RhdGUub3B0aW9ucy5leHBlcmltZW50YWxGbGFncywgZXhwZXJpbWVudGFsRmxhZ3MpKSB7CiAgICByZXR1cm4gb2xkU3RhdGU7CiAgfQoKICBDb21waWxlck9wdGlvbnMgb3B0aW9ucyA9IG5ldyBDb21waWxlck9wdGlvbnMoKQogICAgLi50YXJnZXQgPSB0YXJnZXQKICAgIC4ubGVnYWN5TW9kZSA9IHRhcmdldC5sZWdhY3lNb2RlCiAgICAuLmxpbmtlZERlcGVuZGVuY2llcyA9IGxpbmtlZERlcGVuZGVuY2llcwogICAgLi5saWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpID0gbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaQogICAgLi5wYWNrYWdlc0ZpbGVVcmkgPSBwYWNrYWdlc0ZpbGVVcmkKICAgIC4uZXhwZXJpbWVudGFsRmxhZ3MgPSBleHBlcmltZW50YWxGbGFncwogICAgLi52ZXJpZnkgPSB2ZXJpZnk7CgogIFByb2Nlc3NlZE9wdGlvbnMgcHJvY2Vzc2VkT3B0cyA9IG5ldyBQcm9jZXNzZWRPcHRpb25zKG9wdGlvbnM6IG9wdGlvbnMpOwoKICByZXR1cm4gbmV3IEluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZShvcHRpb25zLCBwcm9jZXNzZWRPcHRzKTsKfQoKRnV0dXJlPENvbXBvbmVudD4gY29tcGlsZSgKICAgIEluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZSBzdGF0ZSwKICAgIGJvb2wgdmVyYm9zZSwKICAgIEZpbGVTeXN0ZW0gZmlsZVN5c3RlbSwKICAgIERpYWdub3N0aWNNZXNzYWdlSGFuZGxlciBvbkRpYWdub3N0aWMsCiAgICBVcmkgaW5wdXQpIGFzeW5jIHsKICBDb21waWxlck9wdGlvbnMgb3B0aW9ucyA9IHN0YXRlLm9wdGlvbnM7CiAgb3B0aW9ucwogICAgLi5vbkRpYWdub3N0aWMgPSBvbkRpYWdub3N0aWMKICAgIC4udmVyYm9zZSA9IHZlcmJvc2UKICAgIC4uZmlsZVN5c3RlbSA9IGZpbGVTeXN0ZW07CgogIFByb2Nlc3NlZE9wdGlvbnMgcHJvY2Vzc2VkT3B0cyA9IHN0YXRlLnByb2Nlc3NlZE9wdHM7CiAgcHJvY2Vzc2VkT3B0cy5pbnB1dHMuY2xlYXIoKTsKICBwcm9jZXNzZWRPcHRzLmlucHV0cy5hZGQoaW5wdXQpOwogIHByb2Nlc3NlZE9wdHMuY2xlYXJGaWxlU3lzdGVtQ2FjaGUoKTsKCiAgQ29tcGlsZXJSZXN1bHQgY29tcGlsZXJSZXN1bHQgPSBhd2FpdCBDb21waWxlckNvbnRleHQucnVuV2l0aE9wdGlvbnMoCiAgICAgIHByb2Nlc3NlZE9wdHMsIChDb21waWxlckNvbnRleHQgY29udGV4dCkgYXN5bmMgewogICAgQ29tcGlsZXJSZXN1bHQgY29tcGlsZXJSZXN1bHQgPSBhd2FpdCBnZW5lcmF0ZUtlcm5lbEludGVybmFsKCk7CiAgICBDb21wb25lbnQgY29tcG9uZW50ID0gY29tcGlsZXJSZXN1bHQ/LmNvbXBvbmVudDsKICAgIGlmIChjb21wb25lbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpZiAoY29tcG9uZW50Lm1haW5NZXRob2QgPT0gbnVsbCkgewogICAgICBjb250ZXh0Lm9wdGlvbnMucmVwb3J0KAogICAgICAgICAgbWVzc2FnZU1pc3NpbmdNYWluLndpdGhMb2NhdGlvbihpbnB1dCwgLTEsIDApLCBTZXZlcml0eS5lcnJvcik7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIGNvbXBpbGVyUmVzdWx0OwogIH0pOwoKICAvLyBSZW1vdmUgdGhlc2UgcGFyYW1ldGVycyBmcm9tIFtvcHRpb25zXSAtIHRoZXkgYXJlIG5vIGxvbmdlciBuZWVkZWQgYW5kCiAgLy8gcmV0YWluIHN0YXRlIGZyb20gdGhlIHByZXZpb3VzIGNvbXBpbGUuIChodHRwOi8vZGFydGJ1Zy5jb20vMzM3MDgpCiAgb3B0aW9ucy5vbkRpYWdub3N0aWMgPSBudWxsOwogIG9wdGlvbnMuZmlsZVN5c3RlbSA9IG51bGw7CiAgcmV0dXJuIGNvbXBpbGVyUmVzdWx0Py5jb21wb25lbnQ7Cn0KCk9iamVjdCB0b2tlblRvU3RyaW5nKE9iamVjdCB2YWx1ZSkgewogIC8vIFRPRE8oYWhlKTogVGhpcyBtZXRob2QgaXMgbW9zdCBsaWtlbHkgdW5uZWNlc3NhcnkuIERhcnQyanMgZG9lc24ndCBzZWUKICAvLyB0b2tlbnMgYW55bW9yZS4KICBpZiAodmFsdWUgaXMgRXJyb3JUb2tlbikgewogICAgLy8gU2hvdWxkbid0IGhhcHBlbi4KICAgIHJldHVybiB2YWx1ZS5hc3NlcnRpb25NZXNzYWdlLm1lc3NhZ2U7CiAgfSBlbHNlIGlmICh2YWx1ZSBpcyBUb2tlbikgewogICAgcmV0dXJuIHZhbHVlLmxleGVtZTsKICB9IGVsc2UgewogICAgcmV0dXJuIHZhbHVlOwogIH0KfQoKLy8vIFJldHJpZXZlIHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJpZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IFt0YXJnZXRdIGFjY29yZGluZwovLy8gdG8gdGhlIGxpYnJhcmllcyBzcGVjaWZpY2F0aW9uIFtqc29uXSBmaWxlLgovLy8KLy8vIERhcnQyanMgdXNlcyB0aGVzZSBuYW1lcyB0byBkZXRlcm1pbmUgdGhlIHZhbHVlIG9mIGxpYnJhcnkgZW52aXJvbm1lbnQKLy8vIGNvbnN0YW50cywgc3VjaCBhcyBgY29uc3QgYm9vbC5mcm9tRW52aXJvbm1lbnQoImRhcnQubGlicmFyeS5pbyIpYC4KLy8gVE9ETyhzaWdtdW5kKTogcmVmYWN0b3IgZGFydDJqcyBzbyB0aGF0IHdlIGNhbiByZXRyaWV2ZSB0aGlzIGRhdGEgbGF0ZXIgaW4KLy8gdGhlIGNvbXBpbGF0aW9uIHBpcGVsaW5lLiBBdCB0aGF0IHBvaW50IHdlIGNhbiBnZXQgaXQgZnJvbSB0aGUgQ0ZFCi8vIHJlc3VsdHMgZGlyZWN0bHkgYW5kIGNvbXBsZXRlbHkgaGlkZSB0aGUgbGlicmFyaWVzIHNwZWNpZmljYXRpb24gZmlsZSBmcm9tCi8vIGRhcnQyanMuCi8vIFRPRE8oc2lnbXVuZCk6IGRlbGV0ZSBhZnRlciBhbGwgY29uc3RhbnQgZXZhbHVhdGlvbiBpcyBkb25lIGluIHRoZSBDRkUsIGFzCi8vIHRoaXMgZGF0YSB3aWxsIG5vIGxvbmdlciBiZSBuZWVkZWQgb24gdGhlIGRhcnQyanMgc2lkZS4KSXRlcmFibGU8U3RyaW5nPiBnZXRTdXBwb3J0ZWRMaWJyYXJ5TmFtZXMoCiAgICBVcmkgbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaSwgU3RyaW5nIGpzb24sIFN0cmluZyB0YXJnZXQpIHsKICByZXR1cm4gTGlicmFyaWVzU3BlY2lmaWNhdGlvbi5wYXJzZShsaWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpLCBqc29uKQogICAgICAuc3BlY2lmaWNhdGlvbkZvcih0YXJnZXQpCiAgICAgIC5hbGxMaWJyYXJpZXMKICAgICAgLndoZXJlKChsKSA9PiBsLmlzU3VwcG9ydGVkKQogICAgICAubWFwKChsKSA9PiBsLm5hbWUpOwp9CgovLy8gRGVzdWdhciBBUEkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgW21lbWJlcl0gaXMgYSByZWRpcmVjdGluZyBmYWN0b3J5Ci8vLyBjb25zdHJ1Y3Rvci4KLy8gVE9ETyhzaWdtdW5kKTogRGVsZXRlIHRoaXMgQVBJIG9uY2UgYG1lbWJlci5pc1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yYAovLyBpcyBpbXBsZW1lbnRlZCBjb3JyZWN0bHkgZm9yIHBhdGNoIGZpbGVzIChJc3N1ZSAjMzM0OTUpLgpib29sIGlzUmVkaXJlY3RpbmdGYWN0b3J5KGlyLlByb2NlZHVyZSBtZW1iZXIpIHsKICBpZiAobWVtYmVyLmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5GYWN0b3J5KSB7CiAgICBTdGF0ZW1lbnQgYm9keSA9IG1lbWJlci5mdW5jdGlvbi5ib2R5OwogICAgaWYgKGJvZHkgaXMgcmVkaXJlY3RpbmcuUmVkaXJlY3RpbmdGYWN0b3J5Qm9keSkgcmV0dXJuIHRydWU7CiAgICBpZiAoYm9keSBpcyBpci5FeHByZXNzaW9uU3RhdGVtZW50KSB7CiAgICAgIGlyLkV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IGJvZHkuZXhwcmVzc2lvbjsKICAgICAgaWYgKGV4cHJlc3Npb24gaXMgaXIuTGV0KSB7CiAgICAgICAgaWYgKGV4cHJlc3Npb24udmFyaWFibGUubmFtZSA9PSByZWRpcmVjdGluZy5sZXROYW1lKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIGZhbHNlOwp9CoDtAE5OPAEhAT8BKAE5AUYBUQFJATwBRQE/AUsBPgE8AS8BRAFEAUcBPAEvATBOATIJGx4eGiYXATI1ASs8AUcBTwE0KgE4ATkBQQFOASoJDAwMDBQNDg0PDQ0NDgwMDAwMDAEvATkBQAE7ATwBJ0weJQIBLScTIyIZHTMbSwEaPVFNShUEATIWJS48KCwXAUsBPwIBGyQSGysXKwoiGB8BOCAjKAFIN0Q1KCgeShMGGwYBTEgfHSQCASVMFR0ZKx8ZCxIEAgFQMARLSE5GTgxOOytBRyAUIxsCAUcRUDwxMStBKjIiPxcKCAYEEAIBL3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0K3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvY29tcGlsZXJfbmV3LmRhcnSa4i8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gTmV3IENvbXBpbGVyIEFQSS4gVGhpcyBBUEkgaXMgdW5kZXIgY29uc3RydWN0aW9uLCB1c2Ugb25seSBpbnRlcm5hbGx5IG9yCi8vLyBpbiB1bml0dGVzdHMuCgpsaWJyYXJ5IGNvbXBpbGVyX25ldzsKCmltcG9ydCAnZGFydDphc3luYyc7CgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JyBhcyBmZTsKCmltcG9ydCAnY29tcGlsZXIuZGFydCcgc2hvdyBEaWFnbm9zdGljOwppbXBvcnQgJ3NyYy9hcGlpbXBsLmRhcnQnOwppbXBvcnQgJ3NyYy9vcHRpb25zLmRhcnQnIHNob3cgQ29tcGlsZXJPcHRpb25zOwoKZXhwb3J0ICdjb21waWxlci5kYXJ0JyBzaG93IERpYWdub3N0aWM7CgovLyBVbmxlc3MgZXhwbGljaXRseSBhbGxvd2VkLCBwYXNzaW5nIGBudWxsYCBmb3IgYW55IGFyZ3VtZW50IHRvIHRoZQovLyBtZXRob2RzIG9mIGxpYnJhcnkgd2lsbCByZXN1bHQgaW4gYW4gRXJyb3IgYmVpbmcgdGhyb3duLgoKLy8vIElucHV0IGtpbmRzIHVzZWQgYnkgW0NvbXBpbGVySW5wdXQucmVhZEZyb21VcmldLgplbnVtIElucHV0S2luZCB7CiAgLy8vIERhdGEgaXMgcmVhZCBhcyBVVEY4IGVpdGhlciBhcyBhIFtTdHJpbmddIG9yIGEgemVyby10ZXJtaW5hdGVkCiAgLy8vIGBMaXN0PGludD5gLgogIFVURjgsCgogIC8vLyBEYXRhIGlzIHJlYWQgYXMgYnl0ZXMgaW4gYSBgTGlzdDxpbnQ+YC4KICBiaW5hcnksCn0KCi8vLyBJbnRlcmZhY2UgZm9yIGRhdGEgcmVhZCB0aHJvdWdoIFtDb21waWxlcklucHV0LnJlYWRGcm9tVXJpXS4KYWJzdHJhY3QgY2xhc3MgSW5wdXQ8VD4gewogIC8vLyBUaGUgVVJJIGZyb20gd2hpY2ggZGF0YSB3YXMgcmVhZC4KICBVcmkgZ2V0IHVyaTsKCiAgLy8vIFRoZSBmb3JtYXQgb2YgdGhlIHJlYWQgW2RhdGFdLgogIElucHV0S2luZCBnZXQgaW5wdXRLaW5kOwoKICAvLy8gVGhlIHJhdyBkYXRhIHJlYWQgZnJvbSBbdXJpXS4KICBUIGdldCBkYXRhOwp9CgovLy8gSW50ZXJmYWNlIGZvciBwcm92aWRpbmcgdGhlIGNvbXBpbGVyIHdpdGggaW5wdXQuIFRoYXQgaXMsIERhcnQgc291cmNlIGZpbGVzLAovLy8gcGFja2FnZSBjb25maWcgZmlsZXMsIGV0Yy4KYWJzdHJhY3QgY2xhc3MgQ29tcGlsZXJJbnB1dCB7CiAgLy8vIFJldHVybnMgYSBmdXR1cmUgdGhhdCBjb21wbGV0ZXMgdG8gdGhlIHNvdXJjZSBjb3JyZXNwb25kaW5nIHRvIFt1cmldLgogIC8vLyBJZiBhbiBleGNlcHRpb24gb2NjdXJzLCB0aGUgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIHRoaXMgZXhjZXB0aW9uLgogIC8vLwogIC8vLyBJZiBbaW5wdXRLaW5kXSBpcyBgSW5wdXRLaW5kLlVURjhgIHRoZSBzb3VyY2UgY2FuIGJlIHJlcHJlc2VudGVkIGVpdGhlciBhcwogIC8vLyBhIHplcm8tdGVybWluYXRlZCBgTGlzdDxpbnQ+YCBvZiBVVEYtOCBieXRlcyBvciBhcyBhIFtTdHJpbmddLiBJZgogIC8vLyBbaW5wdXRLaW5kXSBpcyBgSW5wdXRLaW5kLmJpbmFyeWAgdGhlIHNvdXJjZSBpcyBhIHJlYWQgYSBgTGlzdDxpbnQ+YC4KICAvLy8KICAvLy8gVGhlIGZvbGxvd2luZyB0ZXh0IGlzIG5vbi1ub3JtYXRpdmU6CiAgLy8vCiAgLy8vIEl0IGlzIHJlY29tbWVuZGVkIHRvIHJldHVybiBhIFVURi04IGVuY29kZWQgbGlzdCBvZiBieXRlcyBiZWNhdXNlIHRoZQogIC8vLyBzY2FubmVyIGlzIG1vcmUgZWZmaWNpZW50IGluIHRoaXMgY2FzZS4gSW4gZWl0aGVyIGNhc2UsIHRoZSBkYXRhIHN0cnVjdHVyZQogIC8vLyBpcyBleHBlY3RlZCB0byBob2xkIGEgemVybyBlbGVtZW50IGF0IHRoZSBsYXN0IHBvc2l0aW9uLiBJZiB0aGlzIGlzIG5vdAogIC8vLyB0aGUgY2FzZSwgdGhlIGVudGlyZSBkYXRhIHN0cnVjdHVyZSBpcyBjb3BpZWQgYmVmb3JlIHNjYW5uaW5nLgogIEZ1dHVyZTxJbnB1dD4gcmVhZEZyb21VcmkoVXJpIHVyaSwge0lucHV0S2luZCBpbnB1dEtpbmQ6IElucHV0S2luZC5VVEY4fSk7Cn0KCi8vLyBPdXRwdXQgdHlwZXMgdXNlZCBpbiBgQ29tcGlsZXJPdXRwdXQuY3JlYXRlT3V0cHV0U2lua2AuCmVudW0gT3V0cHV0VHlwZSB7CiAgLy8vIFRoZSBtYWluIEphdmFTY3JpcHQgb3V0cHV0LgogIGpzLAoKICAvLy8gQSBkZWZlcnJlZCBKYXZhU2NyaXB0IG91dHB1dCBwYXJ0LgogIGpzUGFydCwKCiAgLy8vIEEgc291cmNlIG1hcCBmb3IgYSBKYXZhU2NyaXB0IG91dHB1dC4KICBzb3VyY2VNYXAsCgogIC8vLyBEdW1wIGluZm8gb3V0cHV0LgogIGR1bXBJbmZvLAoKICAvLy8gRGVmZXJyZWQgbWFwIG91dHB1dC4KICBkZWZlcnJlZE1hcCwKCiAgLy8vIEltcGxlbWVudGF0aW9uIHNwZWNpZmljIG91dHB1dCB1c2VkIGZvciBkZWJ1Z2dpbmcgdGhlIGNvbXBpbGVyLgogIGRlYnVnLAp9CgovLy8gU2luayBpbnRlcmZhY2UgdXNlZCBmb3IgZ2VuZXJhdGluZyBvdXRwdXQgZnJvbSB0aGUgY29tcGlsZXIuCmFic3RyYWN0IGNsYXNzIE91dHB1dFNpbmsgewogIC8vLyBBZGRzIFt0ZXh0XSB0byB0aGUgc2luay4KICB2b2lkIGFkZChTdHJpbmcgdGV4dCk7CgogIC8vLyBDbG9zZXMgdGhlIHNpbmsuCiAgdm9pZCBjbG9zZSgpOwp9CgovLy8gU2luayBpbnRlcmZhY2UgdXNlZCBmb3IgZ2VuZXJhdGluZyBiaW5hcnkgZGF0YSBmcm9tIHRoZSBjb21waWxlci4KYWJzdHJhY3QgY2xhc3MgQmluYXJ5T3V0cHV0U2luayB7CiAgLy8vIFdyaXRlcyBpbmRpY2VzIFtzdGFydF0gdG8gW2VuZF0gb2YgW2J1ZmZlcl0gdG8gdGhlIHNpbmsuCiAgdm9pZCB3cml0ZShMaXN0PGludD4gYnVmZmVyLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pOwoKICAvLy8gQ2xvc2VzIHRoZSBzaW5rLgogIHZvaWQgY2xvc2UoKTsKfQoKLy8vIEludGVyZmFjZSBmb3IgcHJvZHVjaW5nIG91dHB1dCBmcm9tIHRoZSBjb21waWxlci4gVGhhdCBpcywgSmF2YVNjcmlwdCB0YXJnZXQKLy8vIGZpbGVzLCBzb3VyY2UgbWFwIGZpbGVzLCBkdW1wIGluZm8gZmlsZXMsIGV0Yy4KYWJzdHJhY3QgY2xhc3MgQ29tcGlsZXJPdXRwdXQgewogIC8vLyBSZXR1cm5zIGFuIFtPdXRwdXRTaW5rXSB0aGF0IHdpbGwgc2VydmUgYXMgY29tcGlsZXIgb3V0cHV0IGZvciB0aGUgZ2l2ZW4KICAvLy8gY29tcG9uZW50LgogIC8vLwogIC8vLyBDb21wb25lbnRzIGFyZSBpZGVudGlmaWVkIGJ5IFtuYW1lXSwgW2V4dGVuc2lvbl0sIGFuZCBbdHlwZV0uIEJ5CiAgLy8vIGNvbnZlbnRpb24sIHRoZSBlbXB0eSBzdHJpbmcgYCIiYCB3aWxsIHJlcHJlc2VudCB0aGUgbWFpbiBvdXRwdXQgb2YgdGhlCiAgLy8vIHByb3ZpZGVkIFt0eXBlXS4gW25hbWVdIGFuZCBbZXh0ZW5zaW9uXSBhcmUgb3RoZXJ3aXNlIHN1Z2dlc3RpdmUuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVwbGFjZSBbbmFtZV0gYW5kIFtleHRlbnNpb25dIHdpdGggc29tZXRoaW5nIGxpa2UKICAvLyBbaWRdIGFuZCBbdXJpXS4KICBPdXRwdXRTaW5rIGNyZWF0ZU91dHB1dFNpbmsoU3RyaW5nIG5hbWUsIFN0cmluZyBleHRlbnNpb24sIE91dHB1dFR5cGUgdHlwZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtCaW5hcnlPdXRwdXRTaW5rXSB0aGF0IHdpbGwgc2VydmUgYXMgY29tcGlsZXIgb3V0cHV0IGZvciB0aGUKICAvLy8gZ2l2ZW4gVVJJLgogIEJpbmFyeU91dHB1dFNpbmsgY3JlYXRlQmluYXJ5U2luayhVcmkgdXJpKTsKfQoKLy8vIEludGVyZmFjZSBmb3IgcmVjZWl2aW5nIGRpYWdub3N0aWMgbWVzc2FnZSBmcm9tIHRoZSBjb21waWxlci4gVGhhdCBpcywKLy8vIGVycm9ycywgd2FybmluZ3MsIGhpbnRzLCBldGMuCmFic3RyYWN0IGNsYXNzIENvbXBpbGVyRGlhZ25vc3RpY3MgewogIC8vLyBJbnZva2VkIGJ5IHRoZSBjb21waWxlciB0byByZXBvcnQgZGlhZ25vc3RpY3MuIElmIFt1cmldIGlzIGBudWxsYCwgc28gYXJlCiAgLy8vIFtiZWdpbl0gYW5kIFtlbmRdLiBObyBvdGhlciBhcmd1bWVudHMgbWF5IGJlIGBudWxsYC4gSWYgW3VyaV0gaXMgbm90CiAgLy8vIGBudWxsYCwgbmVpdGhlciBhcmUgW2JlZ2luXSBhbmQgW2VuZF0uIFt1cmldIGluZGljYXRlcyB0aGUgY29tcGlsYXRpb24KICAvLy8gdW5pdCBmcm9tIHdoZXJlIHRoZSBkaWFnbm9zdGljIG9yaWdpbmF0ZXMuIFtiZWdpbl0gYW5kIFtlbmRdIGFyZQogIC8vLyB6ZXJvLWJhc2VkIGNoYXJhY3RlciBvZmZzZXRzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgY29tcGlsYXRpb24gdW5pdC4KICAvLy8gW21lc3NhZ2VdIGlzIHRoZSBkaWFnbm9zdGljIG1lc3NhZ2UsIGFuZCBba2luZF0gaW5kaWNhdGVzIGluZGljYXRlcyB3aGF0CiAgLy8vIGtpbmQgb2YgZGlhZ25vc3RpYyBpdCBpcy4KICAvLy8KICAvLy8gRXhwZXJpbWVudGFsOiBbY29kZV0gZ2l2ZXMgYWNjZXNzIHRvIGFuIGlkIGZvciB0aGUgbWVzc2FnZXMuIEN1cnJlbnRseSBpdAogIC8vLyBpcyB0aGUgW01lc3NhZ2VdIHVzZWQgdG8gY3JlYXRlIHRoZSBkaWFnbm9zdGljLCBpZiBhdmFpbGFibGUsIGZyb20gd2hpY2gKICAvLy8gdGhlIFtNZXNzYWdlS2luZF0gaXMgYWNjZXNzaWJsZS4KICB2b2lkIHJlcG9ydCgKICAgICAgdmFyIGNvZGUsIFVyaSB1cmksIGludCBiZWdpbiwgaW50IGVuZCwgU3RyaW5nIHRleHQsIERpYWdub3N0aWMga2luZCk7Cn0KCi8vLyBJbmZvcm1hdGlvbiByZXN1bHRpbmcgZnJvbSB0aGUgY29tcGlsYXRpb24uCmNsYXNzIENvbXBpbGF0aW9uUmVzdWx0IHsKICAvLy8gYHRydWVgIGlmIHRoZSBjb21waWxhdGlvbiBzdWNjZWVkZWQsIHRoYXQgaXMsIGNvbXBpbGF0aW9uIGRpZG4ndCBmYWlsIGR1ZQogIC8vLyB0byBjb21waWxlLXRpbWUgZXJyb3JzIGFuZC9vciBpbnRlcm5hbCBlcnJvcnMuCiAgZmluYWwgYm9vbCBpc1N1Y2Nlc3M7CgogIC8vLyBUaGUgY29tcGlsZXIgb2JqZWN0IHVzZWQgZm9yIHRoZSBjb21waWxhdGlvbi4KICAvLy8KICAvLy8gTm90ZTogVGhlIHR5cGUgb2YgW2NvbXBpbGVyXSBpcyBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQgYW5kIG1heSB2YXJ5LgogIC8vLyBVc2Ugb25seSBmb3IgZGVidWdnaW5nIGFuZCB0ZXN0aW5nLgogIGZpbmFsIGNvbXBpbGVyOwoKICAvLy8gU2hhcmVkIHN0YXRlIGJldHdlZW4gY29tcGlsYXRpb25zLgogIC8vLwogIC8vLyBUaGlzIGlzIHVzZWQgdG8gc3BlZWQgdXAgYmF0Y2ggbW9kZS4KICBmaW5hbCBmZS5Jbml0aWFsaXplZENvbXBpbGVyU3RhdGUga2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlOwoKICBDb21waWxhdGlvblJlc3VsdCh0aGlzLmNvbXBpbGVyLAogICAgICB7dGhpcy5pc1N1Y2Nlc3M6IHRydWUsIHRoaXMua2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlOiBudWxsfSk7Cn0KCi8vLyBSZXR1cm5zIGEgZnV0dXJlIHRoYXQgY29tcGxldGVzIHRvIGEgW0NvbXBpbGF0aW9uUmVzdWx0XSB3aGVuIHRoZSBEYXJ0Ci8vLyBzb3VyY2VzIGluIFtvcHRpb25zXSBoYXZlIGJlZW4gY29tcGlsZWQuCi8vLwovLy8gVGhlIGdlbmVyYXRlZCBjb21waWxlciBvdXRwdXQgaXMgb2J0YWluZWQgYnkgcHJvdmlkaW5nIGEgW2NvbXBpbGVyT3V0cHV0XS4KLy8vCi8vLyBJZiB0aGUgY29tcGlsYXRpb24gZmFpbHMsIHRoZSBmdXR1cmUncyBgQ29tcGlsYXRpb25SZXN1bHQuaXNTdWNjZXNzYCBpcwovLy8gYGZhbHNlYCBhbmQgW0NvbXBpbGVyRGlhZ25vc3RpY3MucmVwb3J0XSBvbiBbY29tcGlsZXJEaWFnbm9zdGljc10KLy8vIGlzIGludm9rZWQgYXQgbGVhc3Qgb25jZSB3aXRoIGBraW5kID09IERpYWdub3N0aWMuRVJST1JgIG9yCi8vLyBga2luZCA9PSBEaWFnbm9zdGljLkNSQVNIYC4KRnV0dXJlPENvbXBpbGF0aW9uUmVzdWx0PiBjb21waWxlKAogICAgQ29tcGlsZXJPcHRpb25zIGNvbXBpbGVyT3B0aW9ucywKICAgIENvbXBpbGVySW5wdXQgY29tcGlsZXJJbnB1dCwKICAgIENvbXBpbGVyRGlhZ25vc3RpY3MgY29tcGlsZXJEaWFnbm9zdGljcywKICAgIENvbXBpbGVyT3V0cHV0IGNvbXBpbGVyT3V0cHV0KSB7CiAgaWYgKGNvbXBpbGVyT3B0aW9ucyA9PSBudWxsKSB7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiY29tcGlsZXJPcHRpb25zIG11c3QgYmUgbm9uLW51bGwiKTsKICB9CiAgaWYgKGNvbXBpbGVySW5wdXQgPT0gbnVsbCkgewogICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoImNvbXBpbGVySW5wdXQgbXVzdCBiZSBub24tbnVsbCIpOwogIH0KICBpZiAoY29tcGlsZXJEaWFnbm9zdGljcyA9PSBudWxsKSB7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiY29tcGlsZXJEaWFnbm9zdGljcyBtdXN0IGJlIG5vbi1udWxsIik7CiAgfQogIGlmIChjb21waWxlck91dHB1dCA9PSBudWxsKSB7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiY29tcGlsZXJPdXRwdXQgbXVzdCBiZSBub24tbnVsbCIpOwogIH0KCiAgQ29tcGlsZXJJbXBsIGNvbXBpbGVyID0gbmV3IENvbXBpbGVySW1wbCgKICAgICAgY29tcGlsZXJJbnB1dCwgY29tcGlsZXJPdXRwdXQsIGNvbXBpbGVyRGlhZ25vc3RpY3MsIGNvbXBpbGVyT3B0aW9ucyk7CiAgcmV0dXJuIGNvbXBpbGVyLnJ1bihjb21waWxlck9wdGlvbnMuZW50cnlQb2ludCkudGhlbigoYm9vbCBzdWNjZXNzKSB7CiAgICByZXR1cm4gbmV3IENvbXBpbGF0aW9uUmVzdWx0KGNvbXBpbGVyLAogICAgICAgIGlzU3VjY2Vzczogc3VjY2VzcywKICAgICAgICBrZXJuZWxJbml0aWFsaXplZENvbXBpbGVyU3RhdGU6CiAgICAgICAgICAgIGNvbXBpbGVyLmtlcm5lbExvYWRlci5pbml0aWFsaXplZENvbXBpbGVyU3RhdGUpOwogIH0pOwp9CoDFAE5OPAFNEgEWARUBQAEoGzABKAFFPAE1EUUTCAEuCgIBQRooDwElGwEkDgIBUR8fTEgGUUhMBisGTFFORU0CATwSIgYBKQoBLA0BGAwBGw8BRgkCAUEcHxkBFxACAUYiPzoBFxACAVEzIE8RBkdOSE0VTwFPES4CAUsiJVBLTUdPTyAGUE8nD0wCATAaUDUYATQGTSoSASkGK0QBI0oCAUstBE8ETEZAICMlIS0lIUEEHz8EJUUEIEAEASxMSCscKD0GAgEicGFja2FnZTpjb21waWxlci9jb21waWxlcl9uZXcuZGFydDZzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9jb21tYW5kbGluZV9vcHRpb25zLmRhcnScWS8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuY21kbGluZS5vcHRpb25zOwoKLy8vIENvbW1hbmRsaW5lIGZsYWdzIHVzZWQgaW4gYGRhcnQyanMuZGFydGAgYW5kL29yIGBhcGlpbXBsLmRhcnRgLgpjbGFzcyBGbGFncyB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBhbGxvd01vY2tDb21waWxhdGlvbiA9ICctLWFsbG93LW1vY2stY29tcGlsYXRpb24nOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgYWxsb3dOYXRpdmVFeHRlbnNpb25zID0gJy0tYWxsb3ctbmF0aXZlLWV4dGVuc2lvbnMnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgZGlzYWJsZUlubGluaW5nID0gJy0tZGlzYWJsZS1pbmxpbmluZyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBkaXNhYmxlUHJvZ3JhbVNwbGl0ID0gJy0tZGlzYWJsZS1wcm9ncmFtLXNwbGl0JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGRpc2FibGVEaWFnbm9zdGljQ29sb3JzID0gJy0tZGlzYWJsZS1kaWFnbm9zdGljLWNvbG9ycyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBkaXNhYmxlTmF0aXZlTGl2ZVR5cGVBbmFseXNpcyA9CiAgICAgICctLWRpc2FibGUtbmF0aXZlLWxpdmUtdHlwZS1hbmFseXNpcyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB1c2VUcml2aWFsQWJzdHJhY3RWYWx1ZURvbWFpbiA9CiAgICAgICctLXVzZS10cml2aWFsLWFic3RyYWN0LXZhbHVlLWRvbWFpbic7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBkaXNhYmxlVHlwZUluZmVyZW5jZSA9ICctLWRpc2FibGUtdHlwZS1pbmZlcmVuY2UnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgZGlzYWJsZVJ0aU9wdGltaXphdGlvbiA9ICctLWRpc2FibGUtcnRpLW9wdGltaXphdGlvbic7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBkdW1wSW5mbyA9ICctLWR1bXAtaW5mbyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBlbmFibGVBc3NlcnRNZXNzYWdlID0gJy0tYXNzZXJ0LW1lc3NhZ2UnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgZW5hYmxlQ2hlY2tlZE1vZGUgPSAnLS1lbmFibGUtY2hlY2tlZC1tb2RlJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGVuYWJsZUFzc2VydHMgPSAnLS1lbmFibGUtYXNzZXJ0cyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBlbmFibGVEaWFnbm9zdGljQ29sb3JzID0gJy0tZW5hYmxlLWRpYWdub3N0aWMtY29sb3JzJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGV4cGVyaW1lbnRhbFRyYWNrQWxsb2NhdGlvbnMgPQogICAgICAnLS1leHBlcmltZW50YWwtdHJhY2stYWxsb2NhdGlvbnMnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgZXhwZXJpbWVudGFsQWxsb2NhdGlvbnNQYXRoID0KICAgICAgJy0tZXhwZXJpbWVudGFsLWFsbG9jYXRpb25zLXBhdGgnOwoKICAvLyBUZW1wb3JhcnkgZXhwZXJpbWVudCBmb3IgY29kZSBnZW5lcmF0aW9uIG9mIGxvY2FscyBmb3IgZnJlcXVlbnRseSB1c2VkCiAgLy8gJ3RoaXMnIGFuZCBjb25zdGFudHMuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBleHBlcmltZW50TG9jYWxOYW1lcyA9ICctLWV4cGVyaW1lbnQtY29kZS0xJzsKCiAgLy8gRXhwZXJpbWVudGFsbHkgdHJ5IHRvIGZvcmNlIHBhcnQtZmlsZSBmdW5jdGlvbnMgdG8gYmUgc2VlbiBhcyBJSUZFcy4KICBzdGF0aWMgY29uc3QgU3RyaW5nIGV4cGVyaW1lbnRTdGFydHVwRnVuY3Rpb25zID0gJy0tZXhwZXJpbWVudC1jb2RlLTInOwoKICAvLyBFeHBlcmltZW50YWxseSByZWx5IG9uIEphdmFTY3JpcHQgVG9Cb29sZWFuIGNvbnZlcnNpb25zLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgZXhwZXJpbWVudFRvQm9vbGVhbiA9ICctLWV4cGVyaW1lbnQtY29kZS0zJzsKCiAgLy8gQWRkIGluc3RydW1lbnRhdGlvbiB0byBsb2cgZXZlcnkgbWV0aG9kIGNhbGwuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBleHBlcmltZW50Q2FsbEluc3RydW1lbnRhdGlvbiA9CiAgICAgICctLWV4cGVyaW1lbnQtY2FsbC1pbnN0cnVtZW50YXRpb24nOwoKICBzdGF0aWMgY29uc3QgU3RyaW5nIGV4cGVyaW1lbnROZXdSdGkgPSAnLS1leHBlcmltZW50LW5ldy1ydGknOwoKICBzdGF0aWMgY29uc3QgU3RyaW5nIGVuYWJsZUxhbmd1YWdlRXhwZXJpbWVudHMgPSAnLS1lbmFibGUtZXhwZXJpbWVudCc7CgogIHN0YXRpYyBjb25zdCBTdHJpbmcgZmFzdFN0YXJ0dXAgPSAnLS1mYXN0LXN0YXJ0dXAnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgZmF0YWxXYXJuaW5ncyA9ICctLWZhdGFsLXdhcm5pbmdzJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGdlbmVyYXRlQ29kZVdpdGhDb21waWxlVGltZUVycm9ycyA9CiAgICAgICctLWdlbmVyYXRlLWNvZGUtd2l0aC1jb21waWxlLXRpbWUtZXJyb3JzJzsKCiAgc3RhdGljIGNvbnN0IFN0cmluZyBwcmV2aWV3RGFydDIgPSAnLS1wcmV2aWV3LWRhcnQtMic7CgogIHN0YXRpYyBjb25zdCBTdHJpbmcgb21pdEltcGxpY2l0Q2hlY2tzID0gJy0tb21pdC1pbXBsaWNpdC1jaGVja3MnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgb21pdEFzQ2FzdHMgPSAnLS1vbWl0LWFzLWNhc3RzJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGxheFJ1bnRpbWVUeXBlVG9TdHJpbmcgPSAnLS1sYXgtcnVudGltZS10eXBlLXRvLXN0cmluZyc7CgogIHN0YXRpYyBjb25zdCBTdHJpbmcgcGxhdGZvcm1CaW5hcmllcyA9ICctLXBsYXRmb3JtLWJpbmFyaWVzPS4rJzsKCiAgc3RhdGljIGNvbnN0IFN0cmluZyBtaW5pZnkgPSAnLS1taW5pZnknOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgbm9GcmVxdWVuY3lCYXNlZE1pbmlmaWNhdGlvbiA9CiAgICAgICctLW5vLWZyZXF1ZW5jeS1iYXNlZC1taW5pZmljYXRpb24nOwogIC8vIERpc2FibGVzIG1pbmlmaWNhdGlvbiBldmVuIGlmIGVuYWJsZWQgYnkgb3RoZXIgb3B0aW9ucywgZS5nLiAnLU8yJy4KICBzdGF0aWMgY29uc3QgU3RyaW5nIG5vTWluaWZ5ID0gJy0tbm8tbWluaWZ5JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIG5vU291cmNlTWFwcyA9ICctLW5vLXNvdXJjZS1tYXBzJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHByZXNlcnZlVXJpcyA9ICctLXByZXNlcnZlLXVyaXMnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgc2hvd1BhY2thZ2VXYXJuaW5ncyA9ICctLXNob3ctcGFja2FnZS13YXJuaW5ncyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBzdXBwcmVzc0hpbnRzID0gJy0tc3VwcHJlc3MtaGludHMnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgc3VwcHJlc3NXYXJuaW5ncyA9ICctLXN1cHByZXNzLXdhcm5pbmdzJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRlcnNlID0gJy0tdGVyc2UnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGVzdE1vZGUgPSAnLS10ZXN0LW1vZGUnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdHJ1c3RQcmltaXRpdmVzID0gJy0tdHJ1c3QtcHJpbWl0aXZlcyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0cnVzdFR5cGVBbm5vdGF0aW9ucyA9ICctLXRydXN0LXR5cGUtYW5ub3RhdGlvbnMnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdHJ1c3RKU0ludGVyb3BUeXBlQW5ub3RhdGlvbnMgPQogICAgICAnLS1leHBlcmltZW50YWwtdHJ1c3QtanMtaW50ZXJvcC10eXBlLWFubm90YXRpb25zJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHVzZUNvbnRlbnRTZWN1cml0eVBvbGljeSA9ICctLWNzcCc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB1c2VNdWx0aVNvdXJjZUluZm8gPSAnLS11c2UtbXVsdGktc291cmNlLWluZm8nOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdXNlTmV3U291cmNlSW5mbyA9ICctLXVzZS1uZXctc291cmNlLWluZm8nOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdmVyYm9zZSA9ICctLXZlcmJvc2UnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgcHJvZ3Jlc3MgPSAnLS1zaG93LWludGVybmFsLXByb2dyZXNzJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHZlcnNpb24gPSAnLS12ZXJzaW9uJzsKCiAgc3RhdGljIGNvbnN0IFN0cmluZyBkaWxsRGVwZW5kZW5jaWVzID0gJy0tZGlsbC1kZXBlbmRlbmNpZXMnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgcmVhZERhdGEgPSAnLS1yZWFkLWRhdGEnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgd3JpdGVEYXRhID0gJy0td3JpdGUtZGF0YSc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyByZWFkQ29kZWdlbiA9ICctLXJlYWQtY29kZWdlbic7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB3cml0ZUNvZGVnZW4gPSAnLS13cml0ZS1jb2RlZ2VuJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGNvZGVnZW5TaGFyZCA9ICctLWNvZGVnZW4tc2hhcmQnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgY29kZWdlblNoYXJkcyA9ICctLWNvZGVnZW4tc2hhcmRzJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGNmZU9ubHkgPSAnLS1jZmUtb25seSc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBkZWJ1Z0dsb2JhbEluZmVyZW5jZSA9ICctLWRlYnVnLWdsb2JhbC1pbmZlcmVuY2UnOwoKICBzdGF0aWMgY29uc3QgU3RyaW5nIHNlcnZlck1vZGUgPSAnLS1zZXJ2ZXItbW9kZSc7CgogIHN0YXRpYyBjb25zdCBTdHJpbmcgbmV3RGVmZXJyZWRTcGxpdCA9ICctLW5ldy1kZWZlcnJlZC1zcGxpdCc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyByZXBvcnRJbnZhbGlkSW5mZXJyZWREZWZlcnJlZFR5cGVzID0KICAgICAgJy0tcmVwb3J0LWludmFsaWQtZGVmZXJyZWQtdHlwZXMnOwoKICAvLy8gRmxhZyBmb3IgYSBjb21iaW5hdGlvbiBvZiBmbGFncyBmb3IgJ3Byb2R1Y3Rpb24nIG1vZGUuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBiZW5jaG1hcmtpbmdQcm9kdWN0aW9uID0gJy0tYmVuY2htYXJraW5nLXByb2R1Y3Rpb24nOwoKICAvLy8gRmxhZyBmb3IgYSBjb21iaW5hdGlvbiBvZiBmbGFncyBmb3IgYmVuY2htYXJraW5nICdleHBlcmltZW50JyBtb2RlLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgYmVuY2htYXJraW5nRXhwZXJpbWVudCA9ICctLWJlbmNobWFya2luZy14JzsKCiAgc3RhdGljIGNvbnN0IFN0cmluZyBjb25kaXRpb25hbERpcmVjdGl2ZXMgPSAnLS1jb25kaXRpb25hbC1kaXJlY3RpdmVzJzsKCiAgLy8gVGhlIHN5bnRheC1vbmx5IGxldmVsIG9mIHN1cHBvcnQgZm9yIGdlbmVyaWMgbWV0aG9kcyBpcyBpbmNsdWRlZCBpbiB0aGUKICAvLyAxLjUwIG1pbGVzdG9uZSBmb3IgRGFydC4gSXQgaXMgbm90IGV4cGVyaW1lbnRhbCwgYnV0IGFsc28gbm90IHBlcm1hbmVudDoKICAvLyBhIGZ1bGwgaW1wbGVtZW50YXRpb24gaXMgZXhwZWN0ZWQgaW4gdGhlIGZ1dHVyZS4gSGVuY2UsIHRoZQogIC8vICdHRU5FUklDX01FVEhPRFMnIGNvbW1lbnRzIHdoaWNoIHdlcmUgYWRkZWQgd2hlbiB0aGlzIGZlYXR1cmUgd2FzCiAgLy8gZXhwZXJpbWVudGFsIGhhdmUgYmVlbiBwcmVzZXJ2ZWQsIHN1Y2ggdGhhdCBpdCB3aWxsIGJlIGVhc3kgdG8gZmluZCB0aGUKICAvLyByZWxldmFudCBsb2NhdGlvbnMgdG8gdXBkYXRlIHdoZW4gZ2VuZXJpYyBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBmdWxseS4KICAvLwogIC8vIFRoZSBvcHRpb24gaXMgc3RpbGwgYWNjZXB0ZWQsIGJ1dCBpdCBoYXMgbm8gZWZmZWN0OiBUaGUgZmVhdHVyZSBpcyBlbmFibGVkCiAgLy8gYnkgZGVmYXVsdCBhbmQgaXQgY2Fubm90IGJlIGRpc2FibGVkLgogIC8vCiAgLy8gVGhlIGFwcHJvYWNoIHRha2VuIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyB0byBwYXJzZSBnZW5lcmljIG1ldGhvZHMsCiAgLy8gaW50cm9kdWNlIEFTVCBub2RlcyBmb3IgdGhlbSwgZ2VuZXJhdGUgY29ycmVzcG9uZGluZyB0eXBlcyAoc3VjaCB0aGF0CiAgLy8gZnJvbnQgZW5kIHRyZWF0bWVudCBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGNvZGUgdGhhdCBwcm9ncmFtbWVycyB3cm90ZSksCiAgLy8gYnV0IGNvbnNpZGVyaW5nIGFsbCBtZXRob2QgdHlwZSB2YXJpYWJsZXMgdG8gaGF2ZSBib3VuZCBgZHluYW1pY2Agbm8KICAvLyBtYXR0ZXIgd2hpY2ggYm91bmQgdGhleSBoYXZlIHN5bnRhY3RpY2FsbHkgKHN1Y2ggdGhhdCB0aGVpciB2YWx1ZSBhcyB0eXBlcwogIC8vIGlzIHVuY2hlY2tlZCksIGFuZCB0aGVuIHJlcGxhY2luZyBtZXRob2QgdHlwZSB2YXJpYWJsZXMgYnkgYSBgRHluYW1pY1R5cGVgCiAgLy8gKHN1Y2ggdGhhdCB0aGUgYmFja2VuZCBkb2VzIG5vdCBuZWVkIHRvIHRha2UgbWV0aG9kIHR5cGUgYXJndW1lbnRzIGludG8KICAvLyBhY2NvdW50KS4KICAvLwogIC8vIFRoZSBmZWF0dXJlIGhhcyBhbiBpbmZvcm1hbCBzcGVjaWZpY2F0aW9uIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAogIC8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2Vlcm5zdGcvNDM1M2Q3YjRmNjY5NzQ1YmVkM2E1NDIzZTA0YTQ1M2MuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBnZW5lcmljTWV0aG9kU3ludGF4ID0gJy0tZ2VuZXJpYy1tZXRob2Qtc3ludGF4JzsKCiAgLy8gSW5pdGlhbGl6aW5nLWZvcm1hbCBhY2Nlc3MgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGFuZCBjYW5ub3QgYmUgZGlzYWJsZWQuCiAgLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgdGhlIG9wdGlvbiBpcyBzdGlsbCBhY2NlcHRlZCwgYnV0IGl0IGlzIGlnbm9yZWQuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBpbml0aWFsaXppbmdGb3JtYWxBY2Nlc3MgPSAnLS1pbml0aWFsaXppbmctZm9ybWFsLWFjY2Vzcyc7CgogIC8vIEV4cGVyaW1lbnRhbCBmbGFncy4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHJlc29sdmVPbmx5ID0gJy0tcmVzb2x2ZS1vbmx5JzsKfQoKY2xhc3MgT3B0aW9uIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHNob3dQYWNrYWdlV2FybmluZ3MgPQogICAgICAnJHtGbGFncy5zaG93UGFja2FnZVdhcm5pbmdzfXwke0ZsYWdzLnNob3dQYWNrYWdlV2FybmluZ3N9PS4qJzsKCiAgc3RhdGljIGNvbnN0IFN0cmluZyBlbmFibGVMYW5ndWFnZUV4cGVyaW1lbnRzID0KICAgICAgJyR7RmxhZ3MuZW5hYmxlTGFuZ3VhZ2VFeHBlcmltZW50c318JwogICAgICAnJHtGbGFncy5lbmFibGVMYW5ndWFnZUV4cGVyaW1lbnRzfT0uKic7CgogIC8vIEV4cGVyaW1lbnRhbCBvcHRpb25zLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgcmVzb2x1dGlvbklucHV0ID0gJy0tcmVzb2x1dGlvbi1pbnB1dD0uKyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBiYXplbFBhdGhzID0gJy0tYmF6ZWwtcGF0aHM9LisnOwp9CoCYAE5OPAEhAUQOSUs+R082LTYtSU0wQEM6TTUqNCkBTBtEAUpKAT5DATM2KwFBAUkBNjo6MgE5AUU3TwFDASs1K0kwOThHOkApMD5JNjo6RkItPS0BQDAyNjg4Oi5JATQBQTspAT1MAUpDAUoBTU5BR01OBVArBUtLTkpQUE0PBUVHRwFOUVEBGTYCAQ8sRgEyLC8BG0E3AgEtcGFja2FnZTpjb21waWxlci9zcmMvY29tbWFuZGxpbmVfb3B0aW9ucy5kYXJ0LHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2ZpbGVuYW1lcy5kYXJ0hNIvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmaWxlbmFtZXM7CgppbXBvcnQgJ2RhcnQ6aW8nIHNob3cgUGxhdGZvcm07CgovLyBGb3IgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIGNvbnZlcnQgV2luZG93cyBmaWxlIG5hbWVzIHRvIFVSSXM6Ci8vIGh0dHA6Ly9ibG9ncy5tc2RuLmNvbS9iL2llL2FyY2hpdmUvMjAwNi8xMi8wNi9maWxlLXVyaXMtaW4td2luZG93cy5hc3B4CgpTdHJpbmcgbmF0aXZlVG9VcmlQYXRoKFN0cmluZyBmaWxlbmFtZSkgewogIC8vIFRPRE8oYWhlKTogSXQgd291bGQgYmUgbmljZSB0byB1c2UgYSBEYXJ0IGxpYnJhcnkgaW5zdGVhZC4KICBpZiAoIVBsYXRmb3JtLmlzV2luZG93cykgcmV0dXJuIGZpbGVuYW1lOwogIGZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFjZUFsbCgnXFwnLCAnLycpOwogIGlmIChmaWxlbmFtZS5sZW5ndGggPiAyICYmIGZpbGVuYW1lWzFdID09ICc6JykgewogICAgZmlsZW5hbWUgPSAiLyRmaWxlbmFtZSI7CiAgfQogIHJldHVybiBmaWxlbmFtZTsKfQoKU3RyaW5nIHVyaVBhdGhUb05hdGl2ZShTdHJpbmcgcGF0aCkgewogIC8vIFRPRE8oYWhlKTogSXQgd291bGQgYmUgbmljZSB0byB1c2UgYSBEYXJ0IGxpYnJhcnkgaW5zdGVhZC4KICBpZiAoIVBsYXRmb3JtLmlzV2luZG93cykgcmV0dXJuIHBhdGg7CiAgaWYgKHBhdGgubGVuZ3RoID4gMyAmJiBwYXRoWzBdID09ICcvJyAmJiBwYXRoWzJdID09ICc6JykgewogICAgcmV0dXJuIHBhdGguc3Vic3RyaW5nKDEpLnJlcGxhY2VBbGwoJy8nLCAnXFwnKTsKICB9IGVsc2UgewogICAgcmV0dXJuIHBhdGgucmVwbGFjZUFsbCgnLycsICdcXCcpOwogIH0KfQoKZmluYWwgVXJpIGN1cnJlbnREaXJlY3RvcnkgPSBVcmkuYmFzZTsKClVyaSBuYXRpdmVUb1VyaShTdHJpbmcgZmlsZW5hbWUpID0+CiAgICBjdXJyZW50RGlyZWN0b3J5LnJlc29sdmUobmF0aXZlVG9VcmlQYXRoKGZpbGVuYW1lKSk7CgpTdHJpbmcgYXBwZW5kU2xhc2goU3RyaW5nIHBhdGgpID0+IHBhdGguZW5kc1dpdGgoJy8nKSA/IHBhdGggOiAnJHBhdGgvJzsKJwBOTjwBEwEgAURLASpALC0zHQQTAgEmQCg9NAsnBAIBJwEkOQFJASNwYWNrYWdlOmNvbXBpbGVyL3NyYy9maWxlbmFtZXMuZGFydCpzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9vcHRpb25zLmRhcnTAAF5DLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5zcmMub3B0aW9uczsKCmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9kYXJ0MmpzLmRhcnQnIGFzIGZlOwoKaW1wb3J0ICdjb21tYW5kbGluZV9vcHRpb25zLmRhcnQnIHNob3cgRmxhZ3M7CmltcG9ydCAndXRpbC91dGlsLmRhcnQnOwoKLy8vIE9wdGlvbnMgdXNlZCBmb3IgY29udHJvbGxpbmcgZGlhZ25vc3RpYyBtZXNzYWdlcy4KYWJzdHJhY3QgY2xhc3MgRGlhZ25vc3RpY09wdGlvbnMgewogIGNvbnN0IERpYWdub3N0aWNPcHRpb25zKCk7CgogIC8vLyBJZiBgdHJ1ZWAsIHdhcm5pbmdzIGNhdXNlIHRoZSBjb21waWxhdGlvbiB0byBmYWlsLgogIGJvb2wgZ2V0IGZhdGFsV2FybmluZ3M7CgogIC8vLyBFbWl0IHRlcnNlIGRpYWdub3N0aWNzIHdpdGhvdXQgaG93VG9GaXguCiAgYm9vbCBnZXQgdGVyc2VEaWFnbm9zdGljczsKCiAgLy8vIElmIGB0cnVlYCwgd2FybmluZ3MgYXJlIG5vdCByZXBvcnRlZC4KICBib29sIGdldCBzdXBwcmVzc1dhcm5pbmdzOwoKICAvLy8gSWYgYHRydWVgLCBoaW50cyBhcmUgbm90IHJlcG9ydGVkLgogIGJvb2wgZ2V0IHN1cHByZXNzSGludHM7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB3YXJuaW5ncyBhbmQgaGludHMgYXJlIHNob3duIGZvciBhbGwgcGFja2FnZXMuCiAgYm9vbCBnZXQgc2hvd0FsbFBhY2thZ2VXYXJuaW5nczsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHdhcm5pbmdzIGFuZCBoaW50cyBhcmUgaGlkZGVuIGZvciBhbGwgcGFja2FnZXMuCiAgYm9vbCBnZXQgaGlkZVBhY2thZ2VXYXJuaW5nczsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHdhcm5pbmdzIHNob3VsZCBiZSBzaG91bGQgZm9yIFt1cmldLgogIGJvb2wgc2hvd1BhY2thZ2VXYXJuaW5nc0ZvcihVcmkgdXJpKTsKfQoKLy8vIE9iamVjdCBmb3IgcGFzc2luZyBvcHRpb25zIHRvIHRoZSBjb21waWxlci4gU3VwZXJjbGFzc2VzIGFyZSB1c2VkIHRvIHNlbGVjdAovLy8gc3Vic2V0cyBvZiB0aGVzZSBvcHRpb25zLCBlbmFibGluZyBlYWNoIHBhcnQgb2YgdGhlIGNvbXBpbGVyIHRvIGRlcGVuZCBvbgovLy8gYXMgZmV3IGFzIHBvc3NpYmxlLgpjbGFzcyBDb21waWxlck9wdGlvbnMgaW1wbGVtZW50cyBEaWFnbm9zdGljT3B0aW9ucyB7CiAgLy8vIFRoZSBlbnRyeSBwb2ludCBvZiB0aGUgYXBwbGljYXRpb24gdGhhdCBpcyBiZWluZyBjb21waWxlZC4KICBVcmkgZW50cnlQb2ludDsKCiAgLy8vIFBhY2thZ2Ugcm9vdCBsb2NhdGlvbi4KICAvLy8KICAvLy8gSWYgbm90IG51bGwgdGhlbiBbcGFja2FnZUNvbmZpZ10gc2hvdWxkIGJlIG51bGwuCiAgVXJpIHBhY2thZ2VSb290OwoKICAvLy8gTG9jYXRpb24gb2YgdGhlIHBhY2thZ2UgY29uZmlndXJhdGlvbiBmaWxlLgogIC8vLwogIC8vLyBJZiBub3QgbnVsbCB0aGVuIFtwYWNrYWdlUm9vdF0gc2hvdWxkIGJlIG51bGwuCiAgVXJpIHBhY2thZ2VDb25maWc7CgogIC8vLyBMaXN0IG9mIGtlcm5lbCBmaWxlcyB0byBsb2FkLgogIC8vLwogIC8vLyBXaGVuIGNvbXBpbGluZyBtb2R1bGFybHksIHRoaXMgY29udGFpbnMga2VybmVsIGZpbGVzIHRoYXQgYXJlIG5lZWRlZAogIC8vLyB0byBjb21waWxlIGEgc2luZ2xlIG1vZHVsZS4KICAvLy8KICAvLy8gV2hlbiBsaW5raW5nLCB0aGlzIGNvbnRhaW5zIGFsbCBrZXJuZWwgZmlsZXMgdGhhdCBmb3JtIHBhcnQgb2YgdGhlIGZpbmFsCiAgLy8vIHByb2dyYW0uCiAgLy8vCiAgLy8vIEF0IHRoaXMgdGltZSwgdGhpcyBsaXN0IHBvaW50cyB0byBmdWxsIGtlcm5lbCBmaWxlcy4gSW4gdGhlIGZ1dHVyZSwgd2UgbWF5CiAgLy8vIHVzZSBhIGxpc3Qgb2Ygb3V0bGluZSBmaWxlcyBmb3IgbW9kdWxhciBjb21waWxlcywgYW5kIG9ubHkgdXNlIGZ1bGwga2VybmVsCiAgLy8vIGZpbGVzIGZvciBsaW5raW5nLgogIExpc3Q8VXJpPiBkaWxsRGVwZW5kZW5jaWVzOwoKICAvLy8gTG9jYXRpb24gZnJvbSB3aGljaCBzZXJpYWxpemVkIGluZmVyZW5jZSBkYXRhIGlzIHJlYWQuCiAgLy8vCiAgLy8vIElmIHRoaXMgaXMgc2V0LCB0aGUgW2VudHJ5UG9pbnRdIGlzIGV4cGVjdGVkIHRvIGJlIGEgLmRpbGwgZmlsZSBhbmQgdGhlCiAgLy8vIGZyb250ZW5kIHdvcmsgaXMgc2tpcHBlZC4KICBVcmkgcmVhZERhdGFVcmk7CgogIC8vLyBMb2NhdGlvbiB0byB3aGljaCBpbmZlcmVuY2UgZGF0YSBpcyBzZXJpYWxpemVkLgogIC8vLwogIC8vLyBJZiB0aGlzIGlzIHNldCwgdGhlIGNvbXBpbGF0aW9uIHN0b3BzIGFmdGVyIHR5cGUgaW5mZXJlbmNlLgogIFVyaSB3cml0ZURhdGFVcmk7CgogIC8vLyBMb2NhdGlvbiBmcm9tIHdoaWNoIGNvZGVnZW4gZGF0YSBpcyByZWFkLgogIC8vLwogIC8vLyBJZiB0aGlzIGlzIHNldCwgdGhlIGNvbXBpbGF0aW9uIHN0YXJ0cyBhdCBjb2RlZ2VuIGVucXVldWVpbmcuCiAgVXJpIHJlYWRDb2RlZ2VuVXJpOwoKICAvLy8gTG9jYXRpb24gdG8gd2hpY2ggY29kZWdlbiBkYXRhIGlzIHNlcmlhbGl6ZWQuCiAgLy8vCiAgLy8vIElmIHRoaXMgaXMgc2V0LCB0aGUgY29tcGlsYXRpb24gc3RvcHMgYWZ0ZXIgY29kZSBnZW5lcmF0aW9uLgogIFVyaSB3cml0ZUNvZGVnZW5Vcmk7CgogIC8vLyBXaGV0aGVyIHRvIHJ1biBvbmx5IHRoZSBDRkUgYW5kIGVtaXQgdGhlIGdlbmVyYXRlZCBrZXJuZWwgZmlsZSBpbgogIC8vLyBbb3V0cHV0VXJpXS4KICBib29sIGNmZU9ubHkgPSBmYWxzZTsKCiAgLy8vIEZsYWcgb25seSBtZWFudCBmb3IgZGFydDJqcyBkZXZlbG9wZXJzIHRvIGl0ZXJhdGUgb24gZ2xvYmFsIGluZmVyZW5jZQogIC8vLyBjaGFuZ2VzLgogIC8vLwogIC8vLyBXaGVuIHdvcmtpbmcgb24gbGFyZ2UgYXBwcyB0aGlzIGZsYWcgYWxsb3dzIHRvIGxvYWQgc2VyaWFsaXplZCBkYXRhIGZvcgogIC8vLyB0aGUgYXBwICh2aWEgLS1yZWFkLWRhdGEpLCByZXVzZSBpdHMgY2xvc2VkIHdvcmxkLCBhbmQgcmVydW4gdGhlIGdsb2JhbAogIC8vLyBpbmZlcmVuY2UgcGhhc2UgKGV2ZW4gdGhvdWdoIHRoZSBzZXJpYWxpemVkIGRhdGEgYWxyZWFkeSBjb250YWlucyBhIGdsb2JhbAogIC8vLyBpbmZlcmVuY2UgcmVzdWx0KS4KICBib29sIGRlYnVnR2xvYmFsSW5mZXJlbmNlID0gZmFsc2U7CgogIC8vLyBSZXNvbHZlZCBjb25zdGFudCAiZW52aXJvbm1lbnQiIHZhbHVlcyBwYXNzZWQgdG8gdGhlIGNvbXBpbGVyIHZpYSB0aGUgYC1EYAogIC8vLyBmbGFncy4KICBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50ID0gY29uc3QgPFN0cmluZywgU3RyaW5nPnt9OwoKICAvLy8gRmxhZ3MgZW5hYmxpbmcgbGFuZ3VhZ2UgZXhwZXJpbWVudHMuCiAgTWFwPGZlLkV4cGVyaW1lbnRhbEZsYWcsIGJvb2w+IGxhbmd1YWdlRXhwZXJpbWVudHMgPSB7fTsKCiAgLy8vIGB0cnVlYCBpZiBDRkUgcGVyZm9ybXMgY29uc3RhbnQgZXZhbHVhdGlvbi4KICAvLy8gVE9ETyhqb2hubml3aW50aGVyLCBzaWdtdW5kKTogUmVtb3ZlIHRoaXMgYW5kIGFzc29jaWF0ZWQgZGVhZCBjb2RlLgogIGJvb2wgZ2V0IHVzZUNGRUNvbnN0YW50cyA9PgogICAgICBsYW5ndWFnZUV4cGVyaW1lbnRzW2ZlLkV4cGVyaW1lbnRhbEZsYWcuY29uc3RhbnRVcGRhdGUyMDE4XTsKCiAgLy8vIEEgcG9zc2libHkgbnVsbCBzdGF0ZSBvYmplY3QgZm9yIGtlcm5lbCBjb21waWxhdGlvbi4KICBmZS5Jbml0aWFsaXplZENvbXBpbGVyU3RhdGUga2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlOwoKICAvLy8gV2hldGhlciB3ZSBhbGxvdyBtb2NraW5nIGNvbXBpbGF0aW9uIG9mIGxpYnJhcmllcyBzdWNoIGFzIGRhcnQ6aW8gYW5kCiAgLy8vIGRhcnQ6aHRtbCBmb3IgdW5pdCB0ZXN0aW5nIHB1cnBvc2VzLgogIGJvb2wgYWxsb3dNb2NrQ29tcGlsYXRpb24gPSBmYWxzZTsKCiAgLy8vIFNldHMgYSBjb21iaW5hdGlvbiBvZiBmbGFncyBmb3IgYmVuY2htYXJraW5nICdwcm9kdWN0aW9uJyBtb2RlLgogIGJvb2wgYmVuY2htYXJraW5nUHJvZHVjdGlvbiA9IGZhbHNlOwoKICAvLy8gU2V0cyBhIGNvbWJpbmF0aW9uIG9mIGZsYWdzIGZvciBiZW5jaG1hcmtpbmcgJ2V4cGVyaW1lbnQnIG1vZGUuCiAgYm9vbCBiZW5jaG1hcmtpbmdFeHBlcmltZW50ID0gZmFsc2U7CgogIC8vLyBJRCBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZGsgYnVpbGQuCiAgU3RyaW5nIGJ1aWxkSWQgPSBfVU5ERVRFUk1JTkVEX0JVSUxEX0lEOwoKICAvLy8gV2hldGhlciB0aGVyZSBpcyBhIGJ1aWxkLWlkIGF2YWlsYWJsZSBzbyB3ZSBjYW4gdXNlIGl0IG9uIGVycm9yIG1lc3NhZ2VzCiAgLy8vIGFuZCBpbiB0aGUgZW1pdHRlZCBvdXRwdXQgb2YgdGhlIGNvbXBpbGVyLgogIGJvb2wgZ2V0IGhhc0J1aWxkSWQgPT4gYnVpbGRJZCAhPSBfVU5ERVRFUk1JTkVEX0JVSUxEX0lEOwoKICAvLy8gV2hldGhlciB0byBjb21waWxlIGZvciB0aGUgc2VydmVyIGNhdGVnb3J5LiBUaGlzIGlzIHVzZWQgdG8gY29tcGlsZSB0byBKUwogIC8vLyB0aGF0IGlzIGludGVuZGVkIHRvIGJlIHJ1biBvbiBzZXJ2ZXItc2lkZSBWTXMgbGlrZSBub2RlanMuCiAgYm9vbCBjb21waWxlRm9yU2VydmVyID0gZmFsc2U7CgogIC8vLyBMb2NhdGlvbiB3aGVyZSB0byBnZW5lcmF0ZSBhIG1hcCBjb250YWluaW5nIGRldGFpbHMgb2YgaG93IGRlZmVycmVkCiAgLy8vIGxpYnJhcmllcyBhcmUgc3ViZGl2aWRlZC4KICBVcmkgZGVmZXJyZWRNYXBVcmk7CgogIC8vLyBXaGV0aGVyIHRvIGFwcGx5IHRoZSBuZXcgZGVmZXJyZWQgc3BsaXQgZml4ZXMuIFRoZSBmaXhlcyBpbXByb3ZlIG9uCiAgLy8vIHBlcmZvcm1hbmNlIGFuZCBmaXggYSBzb3VuZG5lc3MgaXNzdWUgd2l0aCBpbmZlcnJlZCB0eXBlcy4gVGhlIGxhdHRlciB3aWxsCiAgLy8vIG1vdmUgbW9yZSBjb2RlIHRvIHRoZSBtYWluIG91dHB1dCB1bml0LCBiZWNhdXNlIG9mIHRoYXQgd2UgYXJlIG5vdAogIC8vLyBlbmFibGluZyB0aGUgZmVhdHVyZSBieSBkZWZhdWx0IHJpZ2h0IGF3YXkuCiAgLy8vCiAgLy8vIFdoZW4gW3JlcG9ydEludmFsaWRJbmZlcnJlZERlZmVycmVkVHlwZXNdIHNob3dzIG5vIGVycm9ycywgd2UgZXhwZWN0IHRoaXMKICAvLy8gZmxhZyB0byBwcm9kdWNlIHRoZSBzYW1lIG9yIGJldHRlciByZXN1bHRzIHRoYW4gdGhlIGN1cnJlbnQgdW5zb3VuZAogIC8vLyBpbXBsZW1lbnRhdGlvbi4KICBib29sIG5ld0RlZmVycmVkU3BsaXQgPSBmYWxzZTsKCiAgLy8vIFNob3cgZXJyb3JzIHdoZW4gYSBkZWZlcnJlZCB0eXBlIGlzIGluZmVycmVkIGFzIGEgcmV0dXJuIHR5cGUgb2YgYSBjbG9zdXJlCiAgLy8vIG9yIGluIGEgdHlwZSBwYXJhbWV0ZXIuIFRob3NlIGNhc2VzIGNhdXNlIHRoZSBjb21waWxlciB0b2RheSB0byBiZWhhdmUKICAvLy8gdW5zb3VuZGx5IGJ5IHB1dHRpbmcgdGhlIGNvZGUgaW4gYSBkZWZlcnJlZCBvdXRwdXQgdW5pdC4gSW4gdGhlIGZ1dHVyZQogIC8vLyB3aGVuIFtuZXdEZWZlcnJlZFNwbGl0XSBpcyBvbiBieSBkZWZhdWx0LCB0aG9zZSBjYXNlcyB3aWxsIGJlIHRyZWF0ZWQKICAvLy8gc291bmRseSBhbmQgd2lsbCBjYXVzZSBtb3JlIGNvZGUgdG8gYmUgbW92ZWQgdG8gdGhlIG1haW4gb3V0cHV0IHVuaXQuCiAgLy8vCiAgLy8vIFRoaXMgZmxhZyBpcyBwcmVzZW50ZWQgdG8gaGVscCBkZXZlbG9wZXJzIGZpbmQgYW5kIGZpeCB0aGUgYWZmZWN0ZWQgY29kZS4KICBib29sIHJlcG9ydEludmFsaWRJbmZlcnJlZERlZmVycmVkVHlwZXMgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdG8gZGlzYWJsZSBpbmxpbmluZyBkdXJpbmcgdGhlIGJhY2tlbmQgb3B0aW1pemF0aW9ucy4KICAvLyBUT0RPKHNpZ211bmQpOiBuZWdhdGUsIHNvIGFsbCBmbGFncyBhcmUgcG9zaXRpdmUKICBib29sIGRpc2FibGVJbmxpbmluZyA9IGZhbHNlOwoKICAvLy8gRGlzYWJsZSBkZWZlcnJlZCBsb2FkaW5nLCBpbnN0ZWFkIGdlbmVyYXRlIGV2ZXJ5dGhpbmcgaW4gb25lIG91dHB1dCB1bml0LgogIC8vLyBOb3RlOiB0aGUgcmVzdWx0aW5nIHByb2dyYW0gc3RpbGwgY29ycmVjdGx5IGNoZWNrcyB0aGF0IGxvYWRMaWJyYXJ5ICYKICAvLy8gY2hlY2tMaWJyYXJ5IGNhbGxzIGFyZSBjb3JyZWN0LgogIGJvb2wgZGlzYWJsZVByb2dyYW1TcGxpdCA9IGZhbHNlOwoKICAvLy8gRGlhZ25vc3RpYyBvcHRpb246IElmIGB0cnVlYCwgd2FybmluZ3MgY2F1c2UgdGhlIGNvbXBpbGF0aW9uIHRvIGZhaWwuCiAgQG92ZXJyaWRlCiAgYm9vbCBmYXRhbFdhcm5pbmdzID0gZmFsc2U7CgogIC8vLyBEaWFnbm9zdGljIG9wdGlvbjogRW1pdCB0ZXJzZSBkaWFnbm9zdGljcyB3aXRob3V0IGhvd1RvRml4LgogIEBvdmVycmlkZQogIGJvb2wgdGVyc2VEaWFnbm9zdGljcyA9IGZhbHNlOwoKICAvLy8gRGlhZ25vc3RpYyBvcHRpb246IElmIGB0cnVlYCwgd2FybmluZ3MgYXJlIG5vdCByZXBvcnRlZC4KICBAb3ZlcnJpZGUKICBib29sIHN1cHByZXNzV2FybmluZ3MgPSBmYWxzZTsKCiAgLy8vIERpYWdub3N0aWMgb3B0aW9uOiBJZiBgdHJ1ZWAsIGhpbnRzIGFyZSBub3QgcmVwb3J0ZWQuCiAgQG92ZXJyaWRlCiAgYm9vbCBzdXBwcmVzc0hpbnRzID0gZmFsc2U7CgogIC8vLyBEaWFnbm9zdGljIG9wdGlvbjogTGlzdCBvZiBwYWNrYWdlcyBmb3Igd2hpY2ggd2FybmluZ3MgYW5kIGhpbnRzIGFyZQogIC8vLyByZXBvcnRlZC4gSWYgYG51bGxgLCBubyBwYWNrYWdlIHdhcm5pbmdzIG9yIGhpbnRzIGFyZSByZXBvcnRlZC4gSWYKICAvLy8gZW1wdHksIGFsbCB3YXJuaW5ncyBhbmQgaGludHMgYXJlIHJlcG9ydGVkLgogIExpc3Q8U3RyaW5nPiBzaG93blBhY2thZ2VXYXJuaW5nczsgLy8gJiYmJiYKCiAgLy8vIFdoZXRoZXIgdG8gZGlzYWJsZSBnbG9iYWwgdHlwZSBpbmZlcmVuY2UuCiAgYm9vbCBkaXNhYmxlVHlwZUluZmVyZW5jZSA9IGZhbHNlOwoKICAvLy8gV2hldGhlciB0byB1c2UgdGhlIHRyaXZpYWwgYWJzdHJhY3QgdmFsdWUgZG9tYWluLgogIGJvb2wgdXNlVHJpdmlhbEFic3RyYWN0VmFsdWVEb21haW4gPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdG8gZGlzYWJsZSBvcHRpbWl6YXRpb24gZm9yIG5lZWQgcnVudGltZSB0eXBlIGluZm9ybWF0aW9uLgogIGJvb2wgZGlzYWJsZVJ0aU9wdGltaXphdGlvbiA9IGZhbHNlOwoKICAvLy8gV2hldGhlciB0byBlbWl0IGEgc3VtbWFyeSBvZiB0aGUgaW5mb3JtYXRpb24gdXNlZCBieSB0aGUgY29tcGlsZXIgZHVyaW5nCiAgLy8vIG9wdGltaXphdGlvbi4gVGhpcyBpbmNsdWRlcyByZXNvbHV0aW9uIGRldGFpbHMsIGRlcGVuZGVuY2llcyBiZXR3ZWVuCiAgLy8vIGVsZW1lbnRzLCByZXN1bHRzIG9mIHR5cGUgaW5mZXJlbmNlLCBhbmQgZGF0YSBhYm91dCBnZW5lcmF0ZWQgY29kZS4KICBib29sIGR1bXBJbmZvID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIHRvIHVzZSB0aGUgbmV3IGR1bXAtaW5mbyBiaW5hcnkgZm9ybWF0LiBUaGlzIHdpbGwgYmUgdGhlIGRlZmF1bHQKICAvLy8gYWZ0ZXIgYSB0cmFuc2l0aW9uYWwgcGVyaW9kLgogIGJvb2wgdXNlRHVtcEluZm9CaW5hcnlGb3JtYXQgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgd2UgYWxsb3cgcGFzc2luZyBhbiBleHRyYSBhcmd1bWVudCB0byBgYXNzZXJ0YCwgY29udGFpbmluZyBhCiAgLy8vIHJlYXNvbiBmb3Igd2h5IGFuIGFzc2VydGlvbiBmYWlscy4gKGV4cGVyaW1lbnRhbCkKICAvLy8KICAvLy8gVGhpcyBpcyBvbmx5IGluY2x1ZGVkIHNvIHRoYXQgdGVzdHMgY2FuIHBhc3MgdGhlIC0tYXNzZXJ0LW1lc3NhZ2UgZmxhZwogIC8vLyB3aXRob3V0IGNhdXNpbmcgZGFydDJqcyB0byBjcmFzaC4gVGhlIGZsYWcgaGFzIG5vIGVmZmVjdC4KICBib29sIGVuYWJsZUFzc2VydE1lc3NhZ2UgPSB0cnVlOwoKICAvLy8gV2hldGhlciB0byBlbmFibGUgbWluaWZpY2F0aW9uCiAgLy8gVE9ETyhzaWdtdW5kKTogcmVuYW1lIHRvIG1pbmlmeQogIGJvb2wgZW5hYmxlTWluaWZpY2F0aW9uID0gZmFsc2U7CgogIC8vLyBGbGFnIHRvIHR1cm4gb2ZmIG1pbmlmaWNhdGlvbiBldmVuIGlmIGVuYWJsZWQgZWxzZXdoZXJlLCBlLmcuIHZpYQogIC8vLyAtTzIuIEJvdGggW2VuYWJsZU1pbmlmaWNhdGlvbl0gYW5kIFtfZGlzYWJsZU1pbmlmaWNhdGlvbl0gY2FuIGJlIHRydWUsIGluCiAgLy8vIHdoaWNoIGNhc2UgW19kaXNhYmxlTWluaWZpY2F0aW9uXSB3aW5zLgogIGJvb2wgX2Rpc2FibGVNaW5pZmljYXRpb24gPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdG8gbW9kZWwgd2hpY2ggbmF0aXZlIGNsYXNzZXMgYXJlIGxpdmUgYmFzZWQgb24gYW5ub3RhdGlvbnMgb24gdGhlCiAgLy8vIGNvcmUgbGlicmFyaWVzLiBJZiBmYWxzZSwgYWxsIG5hdGl2ZSBjbGFzc2VzIHdpbGwgYmUgaW5jbHVkZWQgYnkgZGVmYXVsdC4KICBib29sIGVuYWJsZU5hdGl2ZUxpdmVUeXBlQW5hbHlzaXMgPSB0cnVlOwoKICAvLy8gV2hldGhlciB0byBnZW5lcmF0ZSBjb2RlIGNvbnRhaW5pbmcgdXNlcidzIGBhc3NlcnRgIHN0YXRlbWVudHMuCiAgYm9vbCBlbmFibGVVc2VyQXNzZXJ0aW9ucyA9IGZhbHNlOwoKICAvLy8gV2hldGhlciB0byBnZW5lcmF0ZSBhIHNvdXJjZS1tYXAgZmlsZSB0b2dldGhlciB3aXRoIHRoZSBvdXRwdXQgcHJvZ3JhbS4KICBib29sIGdlbmVyYXRlU291cmNlTWFwID0gdHJ1ZTsKCiAgLy8vIFVSSSBvZiB0aGUgbWFpbiBvdXRwdXQgb2YgdGhlIGNvbXBpbGVyLgogIFVyaSBvdXRwdXRVcmk7CgogIC8vLyBMb2NhdGlvbiBvZiB0aGUgbGlicmFyaWVzIHNwZWNpZmljYXRpb24gZmlsZS4KICBVcmkgbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaTsKCiAgLy8vIExvY2F0aW9uIG9mIHRoZSBrZXJuZWwgcGxhdGZvcm0gYC5kaWxsYCBmaWxlcy4KICBVcmkgcGxhdGZvcm1CaW5hcmllczsKCiAgLy8vIFVSSSB3aGVyZSB0aGUgY29tcGlsZXIgc2hvdWxkIGdlbmVyYXRlIHRoZSBvdXRwdXQgc291cmNlIG1hcCBmaWxlLgogIFVyaSBzb3VyY2VNYXBVcmk7CgogIC8vLyBUaGUgY29tcGlsZXIgaXMgcnVuIGZyb20gdGhlIGJ1aWxkIGJvdC4KICBib29sIHRlc3RNb2RlID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIHRvIHRydXN0IEpTLWludGVyb3AgYW5ub3RhdGlvbnMuIChleHBlcmltZW50YWwpCiAgYm9vbCB0cnVzdEpTSW50ZXJvcFR5cGVBbm5vdGF0aW9ucyA9IGZhbHNlOwoKICAvLy8gV2hldGhlciB0byB0cnVzdCBwcmltaXRpdmUgdHlwZXMgZHVyaW5nIGluZmVyZW5jZSBhbmQgb3B0aW1pemF0aW9ucy4KICBib29sIHRydXN0UHJpbWl0aXZlcyA9IGZhbHNlOwoKICAvLy8gV2hldGhlciB0byBvbWl0IGltcGxpY2l0IHN0cm9uZyBtb2RlIGNoZWNrcy4KICBib29sIG9taXRJbXBsaWNpdENoZWNrcyA9IGZhbHNlOwoKICAvLy8gV2hldGhlciB0byBvbWl0IGFzIGNhc3RzIGJ5IGRlZmF1bHQuCiAgYm9vbCBvbWl0QXNDYXN0cyA9IGZhbHNlOwoKICAvLy8gV2hldGhlciB0byBvbWl0IGNsYXNzIHR5cGUgYXJndW1lbnRzIG9ubHkgbmVlZGVkIGZvciBgdG9TdHJpbmdgIG9uCiAgLy8vIGBPYmplY3QucnVudGltZVR5cGVgLgogIGJvb2wgbGF4UnVudGltZVR5cGVUb1N0cmluZyA9IGZhbHNlOwoKICAvLy8gV2hhdCBzaG91bGQgdGhlIGNvbXBpbGVyIGRvIHdpdGggcGFyYW1ldGVyIHR5cGUgYXNzZXJ0aW9ucy4KICAvLy8KICAvLy8gVGhpcyBpcyBhbiBpbnRlcm5hbCBjb25maWd1cmF0aW9uIG9wdGlvbiBkZXJpdmVkIGZyb20gb3RoZXIgZmxhZ3MuCiAgQ2hlY2tQb2xpY3kgZGVmYXVsdFBhcmFtZXRlckNoZWNrUG9saWN5OwoKICAvLy8gV2hhdCBzaG91bGQgdGhlIGNvbXBpbGVyIGRvIHdpdGggaW1wbGljaXQgZG93bmNhc3RzLgogIC8vLwogIC8vLyBUaGlzIGlzIGFuIGludGVybmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGRlcml2ZWQgZnJvbSBvdGhlciBmbGFncy4KICBDaGVja1BvbGljeSBkZWZhdWx0SW1wbGljaXREb3duY2FzdENoZWNrUG9saWN5OwoKICAvLy8gV2hhdCB0aGUgY29tcGlsZXIgc2hvdWxkIGRvIHdpdGggYSBib29sZWFuIHZhbHVlIGluIGEgY29uZGl0aW9uIGNvbnRleHQKICAvLy8gd2hlbiB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWNhdGlvbiBzYXlzIGl0IGlzIGEgcnVudGltZSBlcnJvciBmb3IgaXQgdG8gYmUKICAvLy8gbnVsbC4KICAvLy8KICAvLy8gVGhpcyBpcyBhbiBpbnRlcm5hbCBjb25maWd1cmF0aW9uIG9wdGlvbiBkZXJpdmVkIGZyb20gb3RoZXIgZmxhZ3MuCiAgQ2hlY2tQb2xpY3kgZGVmYXVsdENvbmRpdGlvbkNoZWNrUG9saWN5OwoKICAvLy8gV2hhdCBzaG91bGQgdGhlIGNvbXBpbGVyIGRvIHdpdGggZXhwbGljaXQgY2FzdHMuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBvcHRpb24gZGVyaXZlZCBmcm9tIG90aGVyIGZsYWdzLgogIENoZWNrUG9saWN5IGRlZmF1bHRFeHBsaWNpdENhc3RDaGVja1BvbGljeTsKCiAgLy8vIFdoZXRoZXIgdG8gZ2VuZXJhdGUgY29kZSBjb21wbGlhbnQgd2l0aCBjb250ZW50IHNlY3VyaXR5IHBvbGljeSAoQ1NQKS4KICBib29sIHVzZUNvbnRlbnRTZWN1cml0eVBvbGljeSA9IGZhbHNlOwoKICAvLy8gV2hlbiBvYmZ1c2NhdGluZyBmb3IgbWluaWZpY2F0aW9uLCB3aGV0aGVyIHRvIHVzZSB0aGUgZnJlcXVlbmN5IG9mIGEgbmFtZQogIC8vLyBhcyBhbiBoZXVyaXN0aWMgdG8gcGljayBzaG9ydGVyIG5hbWVzLgogIGJvb2wgdXNlRnJlcXVlbmN5TmFtZXIgPSB0cnVlOwoKICAvLy8gV2hldGhlciB0byBnZW5lcmF0ZSBzb3VyY2UtaW5mb3JtYXRpb24gZnJvbSBib3RoIHRoZSBvbGQgYW5kIHRoZSBuZXcKICAvLy8gc291cmNlLWluZm9ybWF0aW9uIGVuZ2luZXMuIChleHBlcmltZW50YWwpCiAgYm9vbCB1c2VNdWx0aVNvdXJjZUluZm8gPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdG8gdXNlIHRoZSBuZXcgc291cmNlLWluZm9ybWF0aW9uIGltcGxlbWVudGF0aW9uIGZvciBzb3VyY2UtbWFwcy4KICAvLy8gKGV4cGVyaW1lbnRhbCkKICBib29sIHVzZU5ld1NvdXJjZUluZm8gPSBmYWxzZTsKCiAgLy8vIEVuYWJsZSB2ZXJib3NlIHByaW50aW5nIGR1cmluZyBjb21waWxhdGlvbi4gSW5jbHVkZXMgYSB0aW1lLWJyZWFrZG93bgogIC8vLyBiZXR3ZWVuIHBoYXNlcyBhdCB0aGUgZW5kLgogIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwoKICAvLy8gT24gdG9wIG9mIC0tdmVyYm9zZSwgZW5hYmxlIG1vcmUgdmVyYm9zZSBwcmludGluZywgbGlrZSBwcm9ncmVzcyBtZXNzYWdlcwogIC8vLyBkdXJpbmcgZWFjaCBwaGFzZSBvZiBjb21waWxhdGlvbi4KICBib29sIHNob3dJbnRlcm5hbFByb2dyZXNzID0gZmFsc2U7CgogIC8vLyBUcmFjayBhbGxvY2F0aW9ucyBpbiB0aGUgSlMgb3V0cHV0LgogIC8vLwogIC8vLyBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlLgogIGJvb2wgZXhwZXJpbWVudGFsVHJhY2tBbGxvY2F0aW9ucyA9IGZhbHNlOwoKICAvLy8gRXhwZXJpbWVudGFsIHBhcnQgZmlsZSBmdW5jdGlvbiBnZW5lcmF0aW9uLgogIGJvb2wgZXhwZXJpbWVudFN0YXJ0dXBGdW5jdGlvbnMgPSBmYWxzZTsKCiAgLy8vIEV4cGVyaW1lbnRhbCByZWxpYW5jZSBvbiBKYXZhU2NyaXB0IFRvQm9vbGVhbiBjb252ZXJzaW9ucy4KICBib29sIGV4cGVyaW1lbnRUb0Jvb2xlYW4gPSBmYWxzZTsKCiAgLy8vIEV4cGVyaW1lbnRhbCBpbnN0cnVtZW50YXRpb24gdG8gaW52ZXN0aWdhdGUgY29kZSBibG9hdC4KICAvLy8KICAvLy8gSWYgW3RydWVdLCB0aGUgY29tcGlsZXIgd2lsbCBlbWl0IGNvZGUgdGhhdCBsb2dzIHdoZW5ldmVyIGEgbWV0aG9kIGlzCiAgLy8vIGNhbGxlZC4KICBib29sIGV4cGVyaW1lbnRDYWxsSW5zdHJ1bWVudGF0aW9uID0gZmFsc2U7CgogIC8vLyBFeHBlcmltZW50YWwgdXNlIG9mIHRoZSBuZXcgKFEyIDIwMTkpIFJUSSBzeXN0ZW0uCiAgYm9vbCBleHBlcmltZW50TmV3UnRpID0gZmFsc2U7CgogIC8vLyBUaGUgcGF0aCB0byB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBwcm9maWxlZCBhbGxvY2F0aW9ucy4KICAvLy8KICAvLy8gVGhlIGZpbGUgbXVzdCBjb250YWluIHRoZSBNYXAgdGhhdCB3YXMgcHJvZHVjZWQgYnkgdXNpbmcKICAvLy8gW2V4cGVyaW1lbnRhbFRyYWNrQWxsb2NhdGlvbnNdIGVuY29kZWQgYXMgYSBKU09OIG1hcC4KICAvLy8KICAvLy8gVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZS4KICBTdHJpbmcgZXhwZXJpbWVudGFsQWxsb2NhdGlvbnNQYXRoOwoKICAvLy8gSWYgc3BlY2lmaWVkLCBhIGJ1bmRsZSBvZiBvcHRpbWl6YXRpb25zIHRvIGVuYWJsZSAob3IgZGlzYWJsZSkuCiAgaW50IG9wdGltaXphdGlvbkxldmVsID0gbnVsbDsKCiAgLy8vIFRoZSBzaGFyZCB0byBzZXJpYWxpemUgd2hlbiB1c2luZyBbd3JpdGVDb2RlZ2VuVXJpXS4KICBpbnQgY29kZWdlblNoYXJkOwoKICAvLy8gVGhlIG51bWJlciBvZiBzaGFyZHMgdG8gc2VyaWFsaXplIHdoZW4gdXNpbmcgW3dyaXRlQ29kZWdlblVyaV0gb3IgdG8KICAvLy8gZGVzZXJpYWxpemUgd2hlbiB1c2luZyBbcmVhZENvZGVnZW5VcmldLgogIGludCBjb2RlZ2VuU2hhcmRzOwoKICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgLy8gT3B0aW9ucyBmb3IgZGVwcmVjYXRlZCBmZWF0dXJlcwogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgLy8vIENyZWF0ZSBhbiBvcHRpb25zIG9iamVjdCBieSBwYXJzaW5nIGZsYWdzIGZyb20gW29wdGlvbnNdLgogIHN0YXRpYyBDb21waWxlck9wdGlvbnMgcGFyc2UoTGlzdDxTdHJpbmc+IG9wdGlvbnMsCiAgICAgIHtVcmkgbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaSwKICAgICAgVXJpIHBsYXRmb3JtQmluYXJpZXMsCiAgICAgIHZvaWQgRnVuY3Rpb24oU3RyaW5nKSBvbkVycm9yLAogICAgICB2b2lkIEZ1bmN0aW9uKFN0cmluZykgb25XYXJuaW5nfSkgewogICAgTWFwPGZlLkV4cGVyaW1lbnRhbEZsYWcsIGJvb2w+IGxhbmd1YWdlRXhwZXJpbWVudHMgPQogICAgICAgIF9leHRyYWN0RXhwZXJpbWVudHMob3B0aW9ucywgb25FcnJvcjogb25FcnJvciwgb25XYXJuaW5nOiBvbldhcm5pbmcpOwogICAgaWYgKGVxdWFsTWFwcyhsYW5ndWFnZUV4cGVyaW1lbnRzLCBmZS5kZWZhdWx0RXhwZXJpbWVudGFsRmxhZ3MpKSB7CiAgICAgIHBsYXRmb3JtQmluYXJpZXMgPz89IGZlLmNvbXB1dGVQbGF0Zm9ybUJpbmFyaWVzTG9jYXRpb24oKTsKICAgIH0KICAgIHJldHVybiBuZXcgQ29tcGlsZXJPcHRpb25zKCkKICAgICAgLi5saWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpID0gbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaQogICAgICAuLmFsbG93TW9ja0NvbXBpbGF0aW9uID0gX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5hbGxvd01vY2tDb21waWxhdGlvbikKICAgICAgLi5iZW5jaG1hcmtpbmdQcm9kdWN0aW9uID0KICAgICAgICAgIF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MuYmVuY2htYXJraW5nUHJvZHVjdGlvbikKICAgICAgLi5iZW5jaG1hcmtpbmdFeHBlcmltZW50ID0KICAgICAgICAgIF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MuYmVuY2htYXJraW5nRXhwZXJpbWVudCkKICAgICAgLi5idWlsZElkID0KICAgICAgICAgIF9leHRyYWN0U3RyaW5nT3B0aW9uKG9wdGlvbnMsICctLWJ1aWxkLWlkPScsIF9VTkRFVEVSTUlORURfQlVJTERfSUQpCiAgICAgIC4uY29tcGlsZUZvclNlcnZlciA9IF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3Muc2VydmVyTW9kZSkKICAgICAgLi5kZWZlcnJlZE1hcFVyaSA9IF9leHRyYWN0VXJpT3B0aW9uKG9wdGlvbnMsICctLWRlZmVycmVkLW1hcD0nKQogICAgICAuLm5ld0RlZmVycmVkU3BsaXQgPSBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLm5ld0RlZmVycmVkU3BsaXQpCiAgICAgIC4ucmVwb3J0SW52YWxpZEluZmVycmVkRGVmZXJyZWRUeXBlcyA9CiAgICAgICAgICBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLnJlcG9ydEludmFsaWRJbmZlcnJlZERlZmVycmVkVHlwZXMpCiAgICAgIC4uZmF0YWxXYXJuaW5ncyA9IF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MuZmF0YWxXYXJuaW5ncykKICAgICAgLi50ZXJzZURpYWdub3N0aWNzID0gX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy50ZXJzZSkKICAgICAgLi5zdXBwcmVzc1dhcm5pbmdzID0gX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5zdXBwcmVzc1dhcm5pbmdzKQogICAgICAuLnN1cHByZXNzSGludHMgPSBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLnN1cHByZXNzSGludHMpCiAgICAgIC4uc2hvd25QYWNrYWdlV2FybmluZ3MgPQogICAgICAgICAgX2V4dHJhY3RPcHRpb25hbENzdk9wdGlvbihvcHRpb25zLCBGbGFncy5zaG93UGFja2FnZVdhcm5pbmdzKQogICAgICAuLmxhbmd1YWdlRXhwZXJpbWVudHMgPSBsYW5ndWFnZUV4cGVyaW1lbnRzCiAgICAgIC4uZGlzYWJsZUlubGluaW5nID0gX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5kaXNhYmxlSW5saW5pbmcpCiAgICAgIC4uZGlzYWJsZVByb2dyYW1TcGxpdCA9IF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MuZGlzYWJsZVByb2dyYW1TcGxpdCkKICAgICAgLi5kaXNhYmxlVHlwZUluZmVyZW5jZSA9IF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MuZGlzYWJsZVR5cGVJbmZlcmVuY2UpCiAgICAgIC4udXNlVHJpdmlhbEFic3RyYWN0VmFsdWVEb21haW4gPQogICAgICAgICAgX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy51c2VUcml2aWFsQWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgLi5kaXNhYmxlUnRpT3B0aW1pemF0aW9uID0KICAgICAgICAgIF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MuZGlzYWJsZVJ0aU9wdGltaXphdGlvbikKICAgICAgLi5kdW1wSW5mbyA9IF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MuZHVtcEluZm8pCiAgICAgIC4udXNlRHVtcEluZm9CaW5hcnlGb3JtYXQgPQogICAgICAgICAgX2hhc09wdGlvbihvcHRpb25zLCAiJHtGbGFncy5kdW1wSW5mb309YmluYXJ5IikKICAgICAgLi5lbmFibGVNaW5pZmljYXRpb24gPSBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLm1pbmlmeSkKICAgICAgLi5fZGlzYWJsZU1pbmlmaWNhdGlvbiA9IF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3Mubm9NaW5pZnkpCiAgICAgIC4uZW5hYmxlTmF0aXZlTGl2ZVR5cGVBbmFseXNpcyA9CiAgICAgICAgICAhX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5kaXNhYmxlTmF0aXZlTGl2ZVR5cGVBbmFseXNpcykKICAgICAgLi5lbmFibGVVc2VyQXNzZXJ0aW9ucyA9IF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MuZW5hYmxlQ2hlY2tlZE1vZGUpIHx8CiAgICAgICAgICBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLmVuYWJsZUFzc2VydHMpCiAgICAgIC4uZXhwZXJpbWVudGFsVHJhY2tBbGxvY2F0aW9ucyA9CiAgICAgICAgICBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLmV4cGVyaW1lbnRhbFRyYWNrQWxsb2NhdGlvbnMpCiAgICAgIC4uZXhwZXJpbWVudGFsQWxsb2NhdGlvbnNQYXRoID0gX2V4dHJhY3RTdHJpbmdPcHRpb24oCiAgICAgICAgICBvcHRpb25zLCAiJHtGbGFncy5leHBlcmltZW50YWxBbGxvY2F0aW9uc1BhdGh9PSIsIG51bGwpCiAgICAgIC4uZXhwZXJpbWVudFN0YXJ0dXBGdW5jdGlvbnMgPQogICAgICAgICAgX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5leHBlcmltZW50U3RhcnR1cEZ1bmN0aW9ucykKICAgICAgLi5leHBlcmltZW50VG9Cb29sZWFuID0gX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5leHBlcmltZW50VG9Cb29sZWFuKQogICAgICAuLmV4cGVyaW1lbnRDYWxsSW5zdHJ1bWVudGF0aW9uID0KICAgICAgICAgIF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MuZXhwZXJpbWVudENhbGxJbnN0cnVtZW50YXRpb24pCiAgICAgIC4uZXhwZXJpbWVudE5ld1J0aSA9IF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MuZXhwZXJpbWVudE5ld1J0aSkKICAgICAgLi5nZW5lcmF0ZVNvdXJjZU1hcCA9ICFfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLm5vU291cmNlTWFwcykKICAgICAgLi5vdXRwdXRVcmkgPSBfZXh0cmFjdFVyaU9wdGlvbihvcHRpb25zLCAnLS1vdXQ9JykKICAgICAgLi5wbGF0Zm9ybUJpbmFyaWVzID0KICAgICAgICAgIHBsYXRmb3JtQmluYXJpZXMgPz8gX2V4dHJhY3RVcmlPcHRpb24ob3B0aW9ucywgJy0tcGxhdGZvcm0tYmluYXJpZXM9JykKICAgICAgLi5zb3VyY2VNYXBVcmkgPSBfZXh0cmFjdFVyaU9wdGlvbihvcHRpb25zLCAnLS1zb3VyY2UtbWFwPScpCiAgICAgIC4ub21pdEltcGxpY2l0Q2hlY2tzID0gX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5vbWl0SW1wbGljaXRDaGVja3MpCiAgICAgIC4ub21pdEFzQ2FzdHMgPSBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLm9taXRBc0Nhc3RzKQogICAgICAuLmxheFJ1bnRpbWVUeXBlVG9TdHJpbmcgPQogICAgICAgICAgX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5sYXhSdW50aW1lVHlwZVRvU3RyaW5nKQogICAgICAuLnRlc3RNb2RlID0gX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy50ZXN0TW9kZSkKICAgICAgLi50cnVzdEpTSW50ZXJvcFR5cGVBbm5vdGF0aW9ucyA9CiAgICAgICAgICBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLnRydXN0SlNJbnRlcm9wVHlwZUFubm90YXRpb25zKQogICAgICAuLnRydXN0UHJpbWl0aXZlcyA9IF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MudHJ1c3RQcmltaXRpdmVzKQogICAgICAuLnVzZUNvbnRlbnRTZWN1cml0eVBvbGljeSA9CiAgICAgICAgICBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLnVzZUNvbnRlbnRTZWN1cml0eVBvbGljeSkKICAgICAgLi51c2VGcmVxdWVuY3lOYW1lciA9CiAgICAgICAgICAhX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5ub0ZyZXF1ZW5jeUJhc2VkTWluaWZpY2F0aW9uKQogICAgICAuLnVzZU11bHRpU291cmNlSW5mbyA9IF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MudXNlTXVsdGlTb3VyY2VJbmZvKQogICAgICAuLnVzZU5ld1NvdXJjZUluZm8gPSBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLnVzZU5ld1NvdXJjZUluZm8pCiAgICAgIC4udmVyYm9zZSA9IF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MudmVyYm9zZSkKICAgICAgLi5zaG93SW50ZXJuYWxQcm9ncmVzcyA9IF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MucHJvZ3Jlc3MpCiAgICAgIC4uZGlsbERlcGVuZGVuY2llcyA9CiAgICAgICAgICBfZXh0cmFjdFVyaUxpc3RPcHRpb24ob3B0aW9ucywgJyR7RmxhZ3MuZGlsbERlcGVuZGVuY2llc30nKQogICAgICAuLnJlYWREYXRhVXJpID0gX2V4dHJhY3RVcmlPcHRpb24ob3B0aW9ucywgJyR7RmxhZ3MucmVhZERhdGF9PScpCiAgICAgIC4ud3JpdGVEYXRhVXJpID0gX2V4dHJhY3RVcmlPcHRpb24ob3B0aW9ucywgJyR7RmxhZ3Mud3JpdGVEYXRhfT0nKQogICAgICAuLnJlYWRDb2RlZ2VuVXJpID0gX2V4dHJhY3RVcmlPcHRpb24ob3B0aW9ucywgJyR7RmxhZ3MucmVhZENvZGVnZW59PScpCiAgICAgIC4ud3JpdGVDb2RlZ2VuVXJpID0gX2V4dHJhY3RVcmlPcHRpb24ob3B0aW9ucywgJyR7RmxhZ3Mud3JpdGVDb2RlZ2VufT0nKQogICAgICAuLmNvZGVnZW5TaGFyZCA9IF9leHRyYWN0SW50T3B0aW9uKG9wdGlvbnMsICcke0ZsYWdzLmNvZGVnZW5TaGFyZH09JykKICAgICAgLi5jb2RlZ2VuU2hhcmRzID0gX2V4dHJhY3RJbnRPcHRpb24ob3B0aW9ucywgJyR7RmxhZ3MuY29kZWdlblNoYXJkc309JykKICAgICAgLi5jZmVPbmx5ID0gX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5jZmVPbmx5KQogICAgICAuLmRlYnVnR2xvYmFsSW5mZXJlbmNlID0gX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5kZWJ1Z0dsb2JhbEluZmVyZW5jZSk7CiAgfQoKICB2b2lkIHZhbGlkYXRlKCkgewogICAgLy8gVE9ETyhzaWdtdW5kKTogc2hvdWxkIGVudHJ5cG9pbnQgYmUgaGVyZT8gc2hvdWxkIHdlIHZhbGlkYXRlIGl0IGlzIG5vdAogICAgLy8gbnVsbD8gSW4gdW5pdHRlc3RzIHdlIHVzZSB0aGUgc2FtZSBjb21waWxlciB0byBhbmFseXplIG9yIGJ1aWxkIG11bHRpcGxlCiAgICAvLyBlbnRyeXBvaW50cy4KICAgIGlmIChsaWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIltsaWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpXSBpcyBudWxsLiIpOwogICAgfQogICAgaWYgKGxpYnJhcmllc1NwZWNpZmljYXRpb25VcmkucGF0aC5lbmRzV2l0aCgnLycpKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKAogICAgICAgICAgIltsaWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpXSBzaG91bGQgYmUgYSBmaWxlOiAkbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaSIpOwogICAgfQogICAgaWYgKHBhY2thZ2VSb290ICE9IG51bGwgJiYgcGFja2FnZUNvbmZpZyAhPSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJPbmx5IG9uZSBvZiBbcGFja2FnZVJvb3RdIG9yIFtwYWNrYWdlQ29uZmlnXSAiCiAgICAgICAgICAibWF5IGJlIGdpdmVuLiIpOwogICAgfQogICAgaWYgKHBhY2thZ2VSb290ICE9IG51bGwgJiYgIXBhY2thZ2VSb290LnBhdGguZW5kc1dpdGgoIi8iKSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiW3BhY2thZ2VSb290XSBtdXN0IGVuZCB3aXRoIGEgLyIpOwogICAgfQogICAgaWYgKHBsYXRmb3JtQmluYXJpZXMgPT0gbnVsbCAmJgogICAgICAgIGVxdWFsTWFwcyhsYW5ndWFnZUV4cGVyaW1lbnRzLCBmZS5kZWZhdWx0RXhwZXJpbWVudGFsRmxhZ3MpKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJNaXNzaW5nIHJlcXVpcmVkICR7RmxhZ3MucGxhdGZvcm1CaW5hcmllc30iKTsKICAgIH0KICB9CgogIHZvaWQgZGVyaXZlT3B0aW9ucygpIHsKICAgIGlmIChiZW5jaG1hcmtpbmdQcm9kdWN0aW9uKSB7CiAgICAgIHRydXN0UHJpbWl0aXZlcyA9IHRydWU7CiAgICAgIG9taXRJbXBsaWNpdENoZWNrcyA9IHRydWU7CiAgICB9CgogICAgaWYgKGJlbmNobWFya2luZ0V4cGVyaW1lbnQpIHsKICAgICAgLy8gVE9ETyhzcmEpOiBTZXQgZmxhZ3MgaW1wbGllZCBieSAnLS1iZW5jaG1hcmtpbmcteCcuIEluaXRpYWxseSB0aGlzIHdpbGwKICAgICAgLy8gYmUgLS1leHBlcmltZW50LW5ldy1ydGksIGFuZCBsYXRlciBOTkJELgogICAgICBleHBlcmltZW50TmV3UnRpID0gdHJ1ZTsKICAgIH0KCiAgICBpZiAob3B0aW1pemF0aW9uTGV2ZWwgIT0gbnVsbCkgewogICAgICBpZiAob3B0aW1pemF0aW9uTGV2ZWwgPT0gMCkgewogICAgICAgIGRpc2FibGVJbmxpbmluZyA9IHRydWU7CiAgICAgICAgZGlzYWJsZVR5cGVJbmZlcmVuY2UgPSB0cnVlOwogICAgICAgIGRpc2FibGVSdGlPcHRpbWl6YXRpb24gPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChvcHRpbWl6YXRpb25MZXZlbCA+PSAyKSB7CiAgICAgICAgZW5hYmxlTWluaWZpY2F0aW9uID0gdHJ1ZTsKICAgICAgICBsYXhSdW50aW1lVHlwZVRvU3RyaW5nID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAob3B0aW1pemF0aW9uTGV2ZWwgPj0gMykgewogICAgICAgIG9taXRJbXBsaWNpdENoZWNrcyA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKG9wdGltaXphdGlvbkxldmVsID09IDQpIHsKICAgICAgICB0cnVzdFByaW1pdGl2ZXMgPSB0cnVlOwogICAgICB9CiAgICB9CgogICAgLy8gU3Ryb25nIG1vZGUgYWx3YXlzIHRydXN0cyB0eXBlIGFubm90YXRpb25zIChpbmZlcnJlZCBvciBleHBsaWNpdCksIHNvCiAgICAvLyBhc3NpZ25tZW50cyBjaGVja3Mgc2hvdWxkIGJlIHRydXN0ZWQuCiAgICBpZiAob21pdEltcGxpY2l0Q2hlY2tzKSB7CiAgICAgIGRlZmF1bHRQYXJhbWV0ZXJDaGVja1BvbGljeSA9IENoZWNrUG9saWN5LnRydXN0ZWQ7CiAgICAgIGRlZmF1bHRJbXBsaWNpdERvd25jYXN0Q2hlY2tQb2xpY3kgPSBDaGVja1BvbGljeS50cnVzdGVkOwogICAgICBkZWZhdWx0Q29uZGl0aW9uQ2hlY2tQb2xpY3kgPSBDaGVja1BvbGljeS50cnVzdGVkOwogICAgfSBlbHNlIHsKICAgICAgZGVmYXVsdFBhcmFtZXRlckNoZWNrUG9saWN5ID0gQ2hlY2tQb2xpY3kuY2hlY2tlZDsKICAgICAgZGVmYXVsdEltcGxpY2l0RG93bmNhc3RDaGVja1BvbGljeSA9IENoZWNrUG9saWN5LmNoZWNrZWQ7CiAgICAgIGRlZmF1bHRDb25kaXRpb25DaGVja1BvbGljeSA9IENoZWNrUG9saWN5LmNoZWNrZWQ7CiAgICB9CiAgICBpZiAob21pdEFzQ2FzdHMpIHsKICAgICAgZGVmYXVsdEV4cGxpY2l0Q2FzdENoZWNrUG9saWN5ID0gQ2hlY2tQb2xpY3kudHJ1c3RlZDsKICAgIH0gZWxzZSB7CiAgICAgIGRlZmF1bHRFeHBsaWNpdENhc3RDaGVja1BvbGljeSA9IENoZWNrUG9saWN5LmNoZWNrZWQ7CiAgICB9CgogICAgaWYgKF9kaXNhYmxlTWluaWZpY2F0aW9uKSB7CiAgICAgIGVuYWJsZU1pbmlmaWNhdGlvbiA9IGZhbHNlOwogICAgfQogIH0KCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHdhcm5pbmdzIGFuZCBoaW50cyBhcmUgc2hvd24gZm9yIGFsbCBwYWNrYWdlcy4KICBAb3ZlcnJpZGUKICBib29sIGdldCBzaG93QWxsUGFja2FnZVdhcm5pbmdzIHsKICAgIHJldHVybiBzaG93blBhY2thZ2VXYXJuaW5ncyAhPSBudWxsICYmIHNob3duUGFja2FnZVdhcm5pbmdzLmlzRW1wdHk7CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgd2FybmluZ3MgYW5kIGhpbnRzIGFyZSBoaWRkZW4gZm9yIGFsbCBwYWNrYWdlcy4KICBAb3ZlcnJpZGUKICBib29sIGdldCBoaWRlUGFja2FnZVdhcm5pbmdzID0+IHNob3duUGFja2FnZVdhcm5pbmdzID09IG51bGw7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB3YXJuaW5ncyBzaG91bGQgYmUgc2hvdWxkIGZvciBbdXJpXS4KICBAb3ZlcnJpZGUKICBib29sIHNob3dQYWNrYWdlV2FybmluZ3NGb3IoVXJpIHVyaSkgewogICAgaWYgKHNob3dBbGxQYWNrYWdlV2FybmluZ3MpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoc2hvd25QYWNrYWdlV2FybmluZ3MgIT0gbnVsbCkgewogICAgICByZXR1cm4gdXJpLnNjaGVtZSA9PSAncGFja2FnZScgJiYKICAgICAgICAgIHNob3duUGFja2FnZVdhcm5pbmdzLmNvbnRhaW5zKHVyaS5wYXRoU2VnbWVudHMuZmlyc3QpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKLy8vIFBvbGljeSBmb3Igd2hhdCB0byBkbyB3aXRoIGEgdHlwZSBhc3NlcnRpb24gY2hlY2suCi8vLwovLy8gVGhpcyBlbnVtLWxpa2UgY2xhc3MgaXMgdXNlZCB0byBjb25maWd1cmUgaG93IHRoZSBjb21waWxlciB0cmVhdHMgdHlwZQovLy8gYXNzZXJ0aW9ucyBkdXJpbmcgZ2xvYmFsIHR5cGUgaW5mZXJlbmNlIGFuZCBjb2RlZ2VuLgpjbGFzcyBDaGVja1BvbGljeSB7CiAgLy8vIFdoZXRoZXIgdGhlIHR5cGUgYXNzZXJ0aW9uIHNob3VsZCBiZSB0cnVzdGVkLgogIGZpbmFsIGJvb2wgaXNUcnVzdGVkOwoKICAvLy8gV2hldGhlciB0aGUgdHlwZSBhc3NlcnRpb24gc2hvdWxkIGJlIGVtaXR0ZWQgYW5kIGNoZWNrZWQuCiAgZmluYWwgYm9vbCBpc0VtaXR0ZWQ7CgogIGNvbnN0IENoZWNrUG9saWN5KHt0aGlzLmlzVHJ1c3RlZDogZmFsc2UsIHRoaXMuaXNFbWl0dGVkOiBmYWxzZX0pOwoKICBzdGF0aWMgY29uc3QgdHJ1c3RlZCA9IGNvbnN0IENoZWNrUG9saWN5KGlzVHJ1c3RlZDogdHJ1ZSk7CiAgc3RhdGljIGNvbnN0IGNoZWNrZWQgPSBjb25zdCBDaGVja1BvbGljeShpc0VtaXR0ZWQ6IHRydWUpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnQ2hlY2tQb2xpY3koaXNUcnVzdGVkPSRpc1RydXN0ZWQsJwogICAgICAnaXNFbWl0dGVkPSRpc0VtaXR0ZWQpJzsKfQoKU3RyaW5nIF9leHRyYWN0U3RyaW5nT3B0aW9uKAogICAgTGlzdDxTdHJpbmc+IG9wdGlvbnMsIFN0cmluZyBwcmVmaXgsIFN0cmluZyBkZWZhdWx0VmFsdWUpIHsKICBmb3IgKFN0cmluZyBvcHRpb24gaW4gb3B0aW9ucykgewogICAgaWYgKG9wdGlvbi5zdGFydHNXaXRoKHByZWZpeCkpIHsKICAgICAgcmV0dXJuIG9wdGlvbi5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCk7CiAgICB9CiAgfQogIHJldHVybiBkZWZhdWx0VmFsdWU7Cn0KClVyaSBfZXh0cmFjdFVyaU9wdGlvbihMaXN0PFN0cmluZz4gb3B0aW9ucywgU3RyaW5nIHByZWZpeCkgewogIFN0cmluZyBvcHRpb24gPSBfZXh0cmFjdFN0cmluZ09wdGlvbihvcHRpb25zLCBwcmVmaXgsIG51bGwpOwogIHJldHVybiAob3B0aW9uID09IG51bGwpID8gbnVsbCA6IFVyaS5wYXJzZShvcHRpb24pOwp9CgppbnQgX2V4dHJhY3RJbnRPcHRpb24oTGlzdDxTdHJpbmc+IG9wdGlvbnMsIFN0cmluZyBwcmVmaXgpIHsKICBTdHJpbmcgb3B0aW9uID0gX2V4dHJhY3RTdHJpbmdPcHRpb24ob3B0aW9ucywgcHJlZml4LCBudWxsKTsKICByZXR1cm4gKG9wdGlvbiA9PSBudWxsKSA/IG51bGwgOiBpbnQucGFyc2Uob3B0aW9uKTsKfQoKYm9vbCBfaGFzT3B0aW9uKExpc3Q8U3RyaW5nPiBvcHRpb25zLCBTdHJpbmcgb3B0aW9uKSB7CiAgcmV0dXJuIG9wdGlvbnMuaW5kZXhPZihvcHRpb24pID49IDA7Cn0KCi8vLyBFeHRyYWN0IGxpc3Qgb2YgY29tbWEgc2VwYXJhdGVkIHZhbHVlcyBwcm92aWRlZCBmb3IgW2ZsYWddLiBSZXR1cm5zIGFuCi8vLyBlbXB0eSBsaXN0IGlmIFtvcHRpb25dIGNvbnRhaW4gW2ZsYWddIHdpdGhvdXQgYXJndW1lbnRzLiBSZXR1cm5zIGBudWxsYCBpZgovLy8gW29wdGlvbl0gZG9lc24ndCBjb250YWluIFtmbGFnXSB3aXRoIG9yIHdpdGhvdXQgYXJndW1lbnRzLgpMaXN0PFN0cmluZz4gX2V4dHJhY3RPcHRpb25hbENzdk9wdGlvbihMaXN0PFN0cmluZz4gb3B0aW9ucywgU3RyaW5nIGZsYWcpIHsKICBTdHJpbmcgcHJlZml4ID0gJyRmbGFnPSc7CiAgZm9yIChTdHJpbmcgb3B0aW9uIGluIG9wdGlvbnMpIHsKICAgIGlmIChvcHRpb24gPT0gZmxhZykgewogICAgICByZXR1cm4gY29uc3QgPFN0cmluZz5bXTsKICAgIH0KICAgIGlmIChvcHRpb24uc3RhcnRzV2l0aChmbGFnKSkgewogICAgICByZXR1cm4gb3B0aW9uLnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKS5zcGxpdCgnLCcpOwogICAgfQogIH0KICByZXR1cm4gbnVsbDsKfQoKLy8vIEV4dHJhY3QgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgVXJpcyBwcm92aWRlZCBmb3IgW2ZsYWddLiBSZXR1cm5zIGFuCi8vLyBlbXB0eSBsaXN0IGlmIFtvcHRpb25dIGNvbnRhaW4gW2ZsYWddIHdpdGhvdXQgYXJndW1lbnRzLiBSZXR1cm5zIGBudWxsYCBpZgovLy8gW29wdGlvbl0gZG9lc24ndCBjb250YWluIFtmbGFnXSB3aXRoIG9yIHdpdGhvdXQgYXJndW1lbnRzLgpMaXN0PFVyaT4gX2V4dHJhY3RVcmlMaXN0T3B0aW9uKExpc3Q8U3RyaW5nPiBvcHRpb25zLCBTdHJpbmcgZmxhZykgewogIExpc3Q8U3RyaW5nPiBzdHJpbmdVcmlzID0gX2V4dHJhY3RPcHRpb25hbENzdk9wdGlvbihvcHRpb25zLCBmbGFnKTsKICBpZiAoc3RyaW5nVXJpcyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICByZXR1cm4gc3RyaW5nVXJpcy5tYXAoVXJpLnBhcnNlKS50b0xpc3QoKTsKfQoKTWFwPGZlLkV4cGVyaW1lbnRhbEZsYWcsIGJvb2w+IF9leHRyYWN0RXhwZXJpbWVudHMoTGlzdDxTdHJpbmc+IG9wdGlvbnMsCiAgICB7dm9pZCBGdW5jdGlvbihTdHJpbmcpIG9uRXJyb3IsIHZvaWQgRnVuY3Rpb24oU3RyaW5nKSBvbldhcm5pbmd9KSB7CiAgTGlzdDxTdHJpbmc+IGV4cGVyaW1lbnRzID0KICAgICAgX2V4dHJhY3RPcHRpb25hbENzdk9wdGlvbihvcHRpb25zLCBGbGFncy5lbmFibGVMYW5ndWFnZUV4cGVyaW1lbnRzKTsKICBvbkVycm9yID8/PSAoU3RyaW5nIGVycm9yKSA9PiB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihlcnJvcik7CiAgb25XYXJuaW5nID8/PSAoU3RyaW5nIHdhcm5pbmcpID0+IHByaW50KHdhcm5pbmcpOwogIHJldHVybiBmZS5wYXJzZUV4cGVyaW1lbnRhbEZsYWdzKGZlLnBhcnNlRXhwZXJpbWVudGFsQXJndW1lbnRzKGV4cGVyaW1lbnRzKSwKICAgICAgb25FcnJvcjogb25FcnJvciwgb25XYXJuaW5nOiBvbldhcm5pbmcpOwp9Cgpjb25zdCBTdHJpbmcgX1VOREVURVJNSU5FRF9CVUlMRF9JRCA9ICJidWlsZCBudW1iZXIgY291bGQgbm90IGJlIGRldGVybWluZWQiOwqCcgBOTjwBHQFAAS4ZATYjHQE5GgEvHQEsHQEpGgFHIwFIIAE9KAIBUE4YNUESAR0GNxMBMgY1FQEkBksiBk8PBlFRGR4BPQZOIBMBNgZCFAEwBkQWATQGQxcBSBMYAUwPBk5OURklAVENPgErOwEySh5DATs+AUwrJQFGJwFGJwEpKwFPMTwBUEEhAUogFgFKUUkyBlBKFiEBUU1NTEwGUDMBRDYgAVBMJiQBTAweAUIMIQE/DCEBPAweAUtJMi4BMCUBOC4BSScBT0tKGQFPIygBSzgGTUAjASUlIwFIUC4lAVFQLAFGJQFOIQEuEQE0IQE1GAFJFAEuGQE+LgFLIAEzIwErHAFJHCcBQgZJKwE7BkkyAU5ODAZJKwE3BkkuAU0pAVAtIQFLMSMBUBUhAUwhGAFQKCUBKgYnLQEyKwFBJAE+BkwOLgE4IQFDBj88BicmAUYgATsUAUsvFQE3JTcBQDUmHCUqOU5HQQYhPk8hPCE8Ek9BR0ctSEE8R0EfSDJFTU8oQyE8NyI6P0MnRE8zJ0I8QiVATShDR0U5G1FDSz0hPDcoQ0UjPhxDS0c1QxtGR0lNT0xONVAEARROUBQtRwY4H1cGOE4cBkJCBiRHTQYEARkiHiEGASJRMh8GASUkICUnCCQjJwgkIwgkIAgGAU0tHjlAOQ05QDkGFzwNPAYBICIGBAFHDCRJBAFIDEABPQwpIhMGKChBBhIEAgE3BEs5FDQYAUAYAUUBPT0BDDsfAgEdQCMlLgYEFwIBPT82AgE9PzYCATcnAgFLTz9MHCMaHwYjOQYEDwIBSU8/RUYnLQIBSUgdS0A0Ty8CAU4BIXBhY2thZ2U6Y29tcGlsZXIvc3JjL29wdGlvbnMuZGFydDdzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zb3VyY2VfZmlsZV9wcm92aWRlci5kYXJ0wABIbS8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IHNvdXJjZV9maWxlX3Byb3ZpZGVyOwoKaW1wb3J0ICdkYXJ0OmFzeW5jJzsKaW1wb3J0ICdkYXJ0OmlvJzsKaW1wb3J0ICdkYXJ0Om1hdGgnIGFzIG1hdGg7CmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJzsKCmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9kYXJ0MmpzLmRhcnQnIGFzIGZlOwoKaW1wb3J0ICcuLi9jb21waWxlci5kYXJ0JyBhcyBhcGkgc2hvdyBEaWFnbm9zdGljOwppbXBvcnQgJy4uL2NvbXBpbGVyX25ldy5kYXJ0JyBhcyBhcGk7CmltcG9ydCAnLi4vY29tcGlsZXJfbmV3LmRhcnQnOwppbXBvcnQgJ2NvbG9ycy5kYXJ0JyBhcyBjb2xvcnM7CmltcG9ydCAnZGFydDJqcy5kYXJ0JyBzaG93IEFib3J0TGVnOwppbXBvcnQgJ2ZpbGVuYW1lcy5kYXJ0JzsKaW1wb3J0ICdpby9zb3VyY2VfZmlsZS5kYXJ0JzsKCmFic3RyYWN0IGNsYXNzIFNvdXJjZUZpbGVQcm92aWRlciBpbXBsZW1lbnRzIENvbXBpbGVySW5wdXQgewogIGJvb2wgaXNXaW5kb3dzID0gKFBsYXRmb3JtLm9wZXJhdGluZ1N5c3RlbSA9PSAnd2luZG93cycpOwogIFVyaSBjd2QgPSBjdXJyZW50RGlyZWN0b3J5OwogIE1hcDxVcmksIGFwaS5JbnB1dD4gdXRmOFNvdXJjZUZpbGVzID0gPFVyaSwgYXBpLklucHV0Pnt9OwogIE1hcDxVcmksIGFwaS5JbnB1dD4gYmluYXJ5U291cmNlRmlsZXMgPSA8VXJpLCBhcGkuSW5wdXQ+e307CiAgaW50IGRhcnRDaGFyYWN0ZXJzUmVhZCA9IDA7CgogIEZ1dHVyZTxhcGkuSW5wdXQ8TGlzdDxpbnQ+Pj4gcmVhZEJ5dGVzRnJvbVVyaSgKICAgICAgVXJpIHJlc291cmNlVXJpLCBhcGkuSW5wdXRLaW5kIGlucHV0S2luZCkgewogICAgaWYgKCFyZXNvdXJjZVVyaS5pc0Fic29sdXRlKSB7CiAgICAgIHJlc291cmNlVXJpID0gY3dkLnJlc29sdmVVcmkocmVzb3VyY2VVcmkpOwogICAgfQogICAgYXBpLklucHV0PExpc3Q8aW50Pj4gaW5wdXQ7CiAgICBzd2l0Y2ggKGlucHV0S2luZCkgewogICAgICBjYXNlIGFwaS5JbnB1dEtpbmQuVVRGODoKICAgICAgICBpbnB1dCA9IHV0ZjhTb3VyY2VGaWxlc1tyZXNvdXJjZVVyaV07CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgYXBpLklucHV0S2luZC5iaW5hcnk6CiAgICAgICAgaW5wdXQgPSBiaW5hcnlTb3VyY2VGaWxlc1tyZXNvdXJjZVVyaV07CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBpZiAoaW5wdXQgIT0gbnVsbCkgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUoaW5wdXQpOwoKICAgIGlmIChyZXNvdXJjZVVyaS5zY2hlbWUgPT0gJ2ZpbGUnKSB7CiAgICAgIHJldHVybiBfcmVhZEZyb21GaWxlKHJlc291cmNlVXJpLCBpbnB1dEtpbmQpOwogICAgfSBlbHNlIGlmIChyZXNvdXJjZVVyaS5zY2hlbWUgPT0gJ2h0dHAnIHx8IHJlc291cmNlVXJpLnNjaGVtZSA9PSAnaHR0cHMnKSB7CiAgICAgIHJldHVybiBfcmVhZEZyb21IdHRwKHJlc291cmNlVXJpLCBpbnB1dEtpbmQpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIlVua25vd24gc2NoZW1lIGluIHVyaSAnJHJlc291cmNlVXJpJyIpOwogICAgfQogIH0KCiAgYXBpLklucHV0IF9yZWFkRnJvbUZpbGVTeW5jKFVyaSByZXNvdXJjZVVyaSwgYXBpLklucHV0S2luZCBpbnB1dEtpbmQpIHsKICAgIGFzc2VydChyZXNvdXJjZVVyaS5zY2hlbWUgPT0gJ2ZpbGUnKTsKICAgIExpc3Q8aW50PiBzb3VyY2U7CiAgICB0cnkgewogICAgICBzb3VyY2UgPSByZWFkQWxsKHJlc291cmNlVXJpLnRvRmlsZVBhdGgoKSwKICAgICAgICAgIHplcm9UZXJtaW5hdGVkOiBpbnB1dEtpbmQgPT0gYXBpLklucHV0S2luZC5VVEY4KTsKICAgIH0gb24gRmlsZVN5c3RlbUV4Y2VwdGlvbiBjYXRjaCAoZXgpIHsKICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBleC5vc0Vycm9yPy5tZXNzYWdlOwogICAgICBTdHJpbmcgZGV0YWlsID0gbWVzc2FnZSAhPSBudWxsID8gJyAoJG1lc3NhZ2UpJyA6ICcnOwogICAgICB0aHJvdyAiRXJyb3IgcmVhZGluZyAnJHtyZWxhdGl2aXplVXJpKHJlc291cmNlVXJpKX0nICRkZXRhaWwiOwogICAgfQogICAgZGFydENoYXJhY3RlcnNSZWFkICs9IHNvdXJjZS5sZW5ndGg7CiAgICBhcGkuSW5wdXQgaW5wdXQ7CiAgICBzd2l0Y2ggKGlucHV0S2luZCkgewogICAgICBjYXNlIGFwaS5JbnB1dEtpbmQuVVRGODoKICAgICAgICBpbnB1dCA9IHV0ZjhTb3VyY2VGaWxlc1tyZXNvdXJjZVVyaV0gPSBuZXcgQ2FjaGluZ1V0ZjhCeXRlc1NvdXJjZUZpbGUoCiAgICAgICAgICAgIHJlc291cmNlVXJpLCByZWxhdGl2aXplVXJpKHJlc291cmNlVXJpKSwgc291cmNlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBhcGkuSW5wdXRLaW5kLmJpbmFyeToKICAgICAgICBpbnB1dCA9CiAgICAgICAgICAgIGJpbmFyeVNvdXJjZUZpbGVzW3Jlc291cmNlVXJpXSA9IG5ldyBCaW5hcnkocmVzb3VyY2VVcmksIHNvdXJjZSk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICByZXR1cm4gaW5wdXQ7CiAgfQoKICAvLy8gUmVhZCBbcmVzb3VyY2VVcmldIGRpcmVjdGx5IGFzIGEgVVRGLTggZmlsZS4gSWYgcmVhZGluZyBmYWlscywgYG51bGxgIGlzCiAgLy8vIHJldHVybmVkLgogIGFwaS5JbnB1dCBhdXRvUmVhZEZyb21GaWxlKFVyaSByZXNvdXJjZVVyaSkgewogICAgdHJ5IHsKICAgICAgcmV0dXJuIF9yZWFkRnJvbUZpbGVTeW5jKHJlc291cmNlVXJpLCBJbnB1dEtpbmQuVVRGOCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIC8vIFNpbGVuY2UgdGhlIGVycm9yLiBUaGUgW3Jlc291cmNlVXJpXSB3YXMgbm90IHJlcXVlc3RlZCBieSB0aGUgdXNlciBhbmQKICAgICAgLy8gd2FzIG9ubHkgbmVlZGVkIHRvIGdpdmUgYmV0dGVyIGVycm9yIG1lc3NhZ2VzLgogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBGdXR1cmU8YXBpLklucHV0PExpc3Q8aW50Pj4+IF9yZWFkRnJvbUZpbGUoCiAgICAgIFVyaSByZXNvdXJjZVVyaSwgYXBpLklucHV0S2luZCBpbnB1dEtpbmQpIHsKICAgIGFwaS5JbnB1dDxMaXN0PGludD4+IGlucHV0OwogICAgdHJ5IHsKICAgICAgaW5wdXQgPSBfcmVhZEZyb21GaWxlU3luYyhyZXNvdXJjZVVyaSwgaW5wdXRLaW5kKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgcmV0dXJuIG5ldyBGdXR1cmUuZXJyb3IoZSk7CiAgICB9CiAgICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZShpbnB1dCk7CiAgfQoKICBGdXR1cmU8YXBpLklucHV0PExpc3Q8aW50Pj4+IF9yZWFkRnJvbUh0dHAoCiAgICAgIFVyaSByZXNvdXJjZVVyaSwgYXBpLklucHV0S2luZCBpbnB1dEtpbmQpIHsKICAgIGFzc2VydChyZXNvdXJjZVVyaS5zY2hlbWUgPT0gJ2h0dHAnKTsKICAgIEh0dHBDbGllbnQgY2xpZW50ID0gbmV3IEh0dHBDbGllbnQoKTsKICAgIHJldHVybiBjbGllbnQKICAgICAgICAuZ2V0VXJsKHJlc291cmNlVXJpKQogICAgICAgIC50aGVuKChIdHRwQ2xpZW50UmVxdWVzdCByZXF1ZXN0KSA9PiByZXF1ZXN0LmNsb3NlKCkpCiAgICAgICAgLnRoZW4oKEh0dHBDbGllbnRSZXNwb25zZSByZXNwb25zZSkgewogICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSAhPSBIdHRwU3RhdHVzLm9rKSB7CiAgICAgICAgU3RyaW5nIG1zZyA9ICdGYWlsdXJlIGdldHRpbmcgJHJlc291cmNlVXJpOiAnCiAgICAgICAgICAgICcke3Jlc3BvbnNlLnN0YXR1c0NvZGV9ICR7cmVzcG9uc2UucmVhc29uUGhyYXNlfSc7CiAgICAgICAgdGhyb3cgbXNnOwogICAgICB9CiAgICAgIHJldHVybiByZXNwb25zZS50b0xpc3QoKTsKICAgIH0pLnRoZW4oKExpc3Q8TGlzdDxpbnQ+PiBzcGxpdENvbnRlbnQpIHsKICAgICAgaW50IHRvdGFsTGVuZ3RoID0gc3BsaXRDb250ZW50LmZvbGQoMCwgKGludCBvbGQsIExpc3QgbGlzdCkgewogICAgICAgIHJldHVybiBvbGQgKyBsaXN0Lmxlbmd0aDsKICAgICAgfSk7CiAgICAgIFVpbnQ4TGlzdCByZXN1bHQgPSBuZXcgVWludDhMaXN0KHRvdGFsTGVuZ3RoKTsKICAgICAgaW50IG9mZnNldCA9IDA7CiAgICAgIGZvciAoTGlzdDxpbnQ+IGNvbnRlbnRQYXJ0IGluIHNwbGl0Q29udGVudCkgewogICAgICAgIHJlc3VsdC5zZXRSYW5nZShvZmZzZXQsIG9mZnNldCArIGNvbnRlbnRQYXJ0Lmxlbmd0aCwgY29udGVudFBhcnQpOwogICAgICAgIG9mZnNldCArPSBjb250ZW50UGFydC5sZW5ndGg7CiAgICAgIH0KICAgICAgZGFydENoYXJhY3RlcnNSZWFkICs9IHRvdGFsTGVuZ3RoOwogICAgICBhcGkuSW5wdXQ8TGlzdDxpbnQ+PiBpbnB1dDsKICAgICAgc3dpdGNoIChpbnB1dEtpbmQpIHsKICAgICAgICBjYXNlIGFwaS5JbnB1dEtpbmQuVVRGODoKICAgICAgICAgIGlucHV0ID0gdXRmOFNvdXJjZUZpbGVzW3Jlc291cmNlVXJpXSA9IG5ldyBDYWNoaW5nVXRmOEJ5dGVzU291cmNlRmlsZSgKICAgICAgICAgICAgICByZXNvdXJjZVVyaSwgcmVzb3VyY2VVcmkudG9TdHJpbmcoKSwgcmVzdWx0KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgYXBpLklucHV0S2luZC5iaW5hcnk6CiAgICAgICAgICBpbnB1dCA9CiAgICAgICAgICAgICAgYmluYXJ5U291cmNlRmlsZXNbcmVzb3VyY2VVcmldID0gbmV3IEJpbmFyeShyZXNvdXJjZVVyaSwgcmVzdWx0KTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHJldHVybiBpbnB1dDsKICAgIH0pOwogIH0KCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgd2hlbiBubyBsb25nZXIgbmVlZGVkIGZvciB0aGUgb2xkIGNvbXBpbGVyCiAgLy8gQVBJLgogIEZ1dHVyZSAvKiA8TGlzdDxpbnQ+IHwgU3RyaW5nPiAqLyBjYWxsKFVyaSByZXNvdXJjZVVyaSkgewogICAgdGhyb3cgInVuaW1wbGVtZW50ZWQiOwogIH0KCiAgcmVsYXRpdml6ZVVyaShVcmkgdXJpKSA9PiBmZS5yZWxhdGl2aXplVXJpKGN3ZCwgdXJpLCBpc1dpbmRvd3MpOwoKICBTb3VyY2VGaWxlPExpc3Q8aW50Pj4gZ2V0VXRmOFNvdXJjZUZpbGUoVXJpIHJlc291cmNlVXJpKSB7CiAgICByZXR1cm4gdXRmOFNvdXJjZUZpbGVzW3Jlc291cmNlVXJpXTsKICB9CgogIEl0ZXJhYmxlPFVyaT4gZ2V0U291cmNlVXJpcygpIHsKICAgIFNldDxVcmk+IHVyaXMgPSBuZXcgU2V0PFVyaT4oKTsKICAgIHVyaXMuYWRkQWxsKHV0ZjhTb3VyY2VGaWxlcy5rZXlzKTsKICAgIHVyaXMuYWRkQWxsKGJpbmFyeVNvdXJjZUZpbGVzLmtleXMpOwogICAgcmV0dXJuIHVyaXM7CiAgfQp9CgpMaXN0PGludD4gcmVhZEFsbChTdHJpbmcgZmlsZW5hbWUsIHtib29sIHplcm9UZXJtaW5hdGVkOiB0cnVlfSkgewogIFJhbmRvbUFjY2Vzc0ZpbGUgZmlsZSA9IChuZXcgRmlsZShmaWxlbmFtZSkpLm9wZW5TeW5jKCk7CiAgaW50IGxlbmd0aCA9IGZpbGUubGVuZ3RoU3luYygpOwogIGludCBidWZmZXJMZW5ndGggPSBsZW5ndGg7CiAgaWYgKHplcm9UZXJtaW5hdGVkKSB7CiAgICAvLyArMSB0byBoYXZlIGEgMCB0ZXJtaW5hdGVkIGxpc3QsIHNlZSBbU2Nhbm5lcl0uCiAgICBidWZmZXJMZW5ndGgrKzsKICB9CiAgdmFyIGJ1ZmZlciA9IG5ldyBVaW50OExpc3QoYnVmZmVyTGVuZ3RoKTsKICBmaWxlLnJlYWRJbnRvU3luYyhidWZmZXIsIDAsIGxlbmd0aCk7CiAgZmlsZS5jbG9zZVN5bmMoKTsKICByZXR1cm4gYnVmZmVyOwp9CgpjbGFzcyBDb21waWxlclNvdXJjZUZpbGVQcm92aWRlciBleHRlbmRzIFNvdXJjZUZpbGVQcm92aWRlciB7CiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgd2hlbiBubyBsb25nZXIgbmVlZGVkIGZvciB0aGUgb2xkIGNvbXBpbGVyCiAgLy8gQVBJLgogIEBvdmVycmlkZQogIEZ1dHVyZTxMaXN0PGludD4+IGNhbGwoVXJpIHJlc291cmNlVXJpKSA9PgogICAgICByZWFkRnJvbVVyaShyZXNvdXJjZVVyaSkudGhlbigoaW5wdXQpID0+IGlucHV0LmRhdGEpOwoKICBAb3ZlcnJpZGUKICBGdXR1cmU8YXBpLklucHV0PExpc3Q8aW50Pj4+IHJlYWRGcm9tVXJpKFVyaSB1cmksCiAgICAgICAgICB7SW5wdXRLaW5kIGlucHV0S2luZDogSW5wdXRLaW5kLlVURjh9KSA9PgogICAgICByZWFkQnl0ZXNGcm9tVXJpKHVyaSwgaW5wdXRLaW5kKTsKfQoKY2xhc3MgRm9ybWF0dGluZ0RpYWdub3N0aWNIYW5kbGVyIGltcGxlbWVudHMgQ29tcGlsZXJEaWFnbm9zdGljcyB7CiAgZmluYWwgU291cmNlRmlsZVByb3ZpZGVyIHByb3ZpZGVyOwogIGJvb2wgc2hvd1dhcm5pbmdzID0gdHJ1ZTsKICBib29sIHNob3dIaW50cyA9IHRydWU7CiAgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAgYm9vbCBpc0Fib3J0aW5nID0gZmFsc2U7CiAgYm9vbCBlbmFibGVDb2xvcnMgPSBmYWxzZTsKICBib29sIHRocm93T25FcnJvciA9IGZhbHNlOwogIGJvb2wgYXV0b1JlYWRGaWxlVXJpID0gZmFsc2U7CiAgaW50IHRocm93T25FcnJvckNvdW50ID0gMDsKICBhcGkuRGlhZ25vc3RpYyBsYXN0S2luZCA9IG51bGw7CiAgaW50IGZhdGFsQ291bnQgPSAwOwoKICBmaW5hbCBpbnQgRkFUQUwgPSBhcGkuRGlhZ25vc3RpYy5DUkFTSC5vcmRpbmFsIHwgYXBpLkRpYWdub3N0aWMuRVJST1Iub3JkaW5hbDsKICBmaW5hbCBpbnQgSU5GTyA9CiAgICAgIGFwaS5EaWFnbm9zdGljLklORk8ub3JkaW5hbCB8IGFwaS5EaWFnbm9zdGljLlZFUkJPU0VfSU5GTy5vcmRpbmFsOwoKICBGb3JtYXR0aW5nRGlhZ25vc3RpY0hhbmRsZXIoW1NvdXJjZUZpbGVQcm92aWRlciBwcm92aWRlcl0pCiAgICAgIDogdGhpcy5wcm92aWRlciA9CiAgICAgICAgICAgIChwcm92aWRlciA9PSBudWxsKSA/IG5ldyBDb21waWxlclNvdXJjZUZpbGVQcm92aWRlcigpIDogcHJvdmlkZXI7CgogIHZvaWQgaW5mbyh2YXIgbWVzc2FnZSwgW2FwaS5EaWFnbm9zdGljIGtpbmQgPSBhcGkuRGlhZ25vc3RpYy5WRVJCT1NFX0lORk9dKSB7CiAgICBpZiAoIXZlcmJvc2UgJiYga2luZCA9PSBhcGkuRGlhZ25vc3RpYy5WRVJCT1NFX0lORk8pIHJldHVybjsKICAgIGlmIChlbmFibGVDb2xvcnMpIHsKICAgICAgcHJpbnQoJyR7Y29sb3JzLmdyZWVuKCJJbmZvOiIpfSAkbWVzc2FnZScpOwogICAgfSBlbHNlIHsKICAgICAgcHJpbnQoJ0luZm86ICRtZXNzYWdlJyk7CiAgICB9CiAgfQoKICAvLy8gQWRkcyBba2luZF0gc3BlY2lmaWMgcHJlZml4IHRvIFttZXNzYWdlXS4KICBTdHJpbmcgcHJlZml4TWVzc2FnZShTdHJpbmcgbWVzc2FnZSwgYXBpLkRpYWdub3N0aWMga2luZCkgewogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgYXBpLkRpYWdub3N0aWMuRVJST1I6CiAgICAgICAgcmV0dXJuICdFcnJvcjogJG1lc3NhZ2UnOwogICAgICBjYXNlIGFwaS5EaWFnbm9zdGljLldBUk5JTkc6CiAgICAgICAgcmV0dXJuICdXYXJuaW5nOiAkbWVzc2FnZSc7CiAgICAgIGNhc2UgYXBpLkRpYWdub3N0aWMuSElOVDoKICAgICAgICByZXR1cm4gJ0hpbnQ6ICRtZXNzYWdlJzsKICAgICAgY2FzZSBhcGkuRGlhZ25vc3RpYy5DUkFTSDoKICAgICAgICByZXR1cm4gJ0ludGVybmFsIEVycm9yOiAkbWVzc2FnZSc7CiAgICAgIGNhc2UgYXBpLkRpYWdub3N0aWMuSU5GTzoKICAgICAgY2FzZSBhcGkuRGlhZ25vc3RpYy5WRVJCT1NFX0lORk86CiAgICAgICAgcmV0dXJuICdJbmZvOiAkbWVzc2FnZSc7CiAgICB9CiAgICB0aHJvdyAnVW5leHBlY3RlZCBkaWFnbm9zdGljIGtpbmQ6ICRraW5kICgke2tpbmQub3JkaW5hbH0pJzsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVwb3J0KHZhciBjb2RlLCBVcmkgdXJpLCBpbnQgYmVnaW4sIGludCBlbmQsIFN0cmluZyBtZXNzYWdlLAogICAgICBhcGkuRGlhZ25vc3RpYyBraW5kKSB7CiAgICBpZiAoaXNBYm9ydGluZykgcmV0dXJuOwogICAgaXNBYm9ydGluZyA9IChraW5kID09IGFwaS5EaWFnbm9zdGljLkNSQVNIKTsKCiAgICBib29sIGZhdGFsID0gKGtpbmQub3JkaW5hbCAmIEZBVEFMKSAhPSAwOwogICAgYm9vbCBpc0luZm8gPSAoa2luZC5vcmRpbmFsICYgSU5GTykgIT0gMDsKICAgIGlmIChpc0luZm8gJiYgdXJpID09IG51bGwgJiYga2luZCAhPSBhcGkuRGlhZ25vc3RpYy5JTkZPKSB7CiAgICAgIGluZm8obWVzc2FnZSwga2luZCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBtZXNzYWdlID0gcHJlZml4TWVzc2FnZShtZXNzYWdlLCBraW5kKTsKCiAgICAvLyBbbGFzdEtpbmRdIHJlY29yZHMgdGhlIHByZXZpb3VzIG5vbi1JTkZPIGtpbmQgd2Ugc2F3LgogICAgLy8gVGhpcyBpcyB1c2VkIHRvIHN1cHByZXNzIGluZm8gYWJvdXQgYSB3YXJuaW5nIHdoZW4gd2FybmluZ3MgYXJlCiAgICAvLyBzdXBwcmVzc2VkLCBhbmQgc2ltaWxhciBmb3IgaGludHMuCiAgICBpZiAoa2luZCAhPSBhcGkuRGlhZ25vc3RpYy5JTkZPKSB7CiAgICAgIGxhc3RLaW5kID0ga2luZDsKICAgIH0KICAgIHZhciBjb2xvcjsKICAgIGlmIChraW5kID09IGFwaS5EaWFnbm9zdGljLkVSUk9SKSB7CiAgICAgIGNvbG9yID0gY29sb3JzLnJlZDsKICAgIH0gZWxzZSBpZiAoa2luZCA9PSBhcGkuRGlhZ25vc3RpYy5XQVJOSU5HKSB7CiAgICAgIGlmICghc2hvd1dhcm5pbmdzKSByZXR1cm47CiAgICAgIGNvbG9yID0gY29sb3JzLm1hZ2VudGE7CiAgICB9IGVsc2UgaWYgKGtpbmQgPT0gYXBpLkRpYWdub3N0aWMuSElOVCkgewogICAgICBpZiAoIXNob3dIaW50cykgcmV0dXJuOwogICAgICBjb2xvciA9IGNvbG9ycy5jeWFuOwogICAgfSBlbHNlIGlmIChraW5kID09IGFwaS5EaWFnbm9zdGljLkNSQVNIKSB7CiAgICAgIGNvbG9yID0gY29sb3JzLnJlZDsKICAgIH0gZWxzZSBpZiAoa2luZCA9PSBhcGkuRGlhZ25vc3RpYy5JTkZPKSB7CiAgICAgIGlmIChsYXN0S2luZCA9PSBhcGkuRGlhZ25vc3RpYy5XQVJOSU5HICYmICFzaG93V2FybmluZ3MpIHJldHVybjsKICAgICAgaWYgKGxhc3RLaW5kID09IGFwaS5EaWFnbm9zdGljLkhJTlQgJiYgIXNob3dIaW50cykgcmV0dXJuOwogICAgICBjb2xvciA9IGNvbG9ycy5ncmVlbjsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93ICdVbmtub3duIGtpbmQ6ICRraW5kICgke2tpbmQub3JkaW5hbH0pJzsKICAgIH0KICAgIGlmICghZW5hYmxlQ29sb3JzKSB7CiAgICAgIGNvbG9yID0gKFN0cmluZyB4KSA9PiB4OwogICAgfQogICAgaWYgKHVyaSA9PSBudWxsKSB7CiAgICAgIHByaW50KCcke2NvbG9yKG1lc3NhZ2UpfScpOwogICAgfSBlbHNlIHsKICAgICAgYXBpLklucHV0IGZpbGUgPSBwcm92aWRlci5nZXRVdGY4U291cmNlRmlsZSh1cmkpOwogICAgICBpZiAoZmlsZSA9PSBudWxsICYmCiAgICAgICAgICBhdXRvUmVhZEZpbGVVcmkgJiYKICAgICAgICAgICh1cmkuc2NoZW1lID09ICdmaWxlJyB8fCAhdXJpLmlzQWJzb2x1dGUpICYmCiAgICAgICAgICB1cmkucGF0aC5lbmRzV2l0aCgnLmRhcnQnKSkgewogICAgICAgIGlmICghdXJpLmlzQWJzb2x1dGUpIHsKICAgICAgICAgIHVyaSA9IHByb3ZpZGVyLmN3ZC5yZXNvbHZlVXJpKHVyaSk7CiAgICAgICAgfQogICAgICAgIC8vIFdoZW4gcmVhZGluZyBmcm9tIC5kaWxsIGZpbGVzLCB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzIGhhdmVuJ3QgYmVlbgogICAgICAgIC8vIGxvYWRlZC4gTG9hZCB0aGUgZmlsZSBpZiBwb3NzaWJsZSB0byBwcm92aWRlIGEgYmV0dGVyIGVycm9yIG1lc3NhZ2UuCiAgICAgICAgZmlsZSA9IHByb3ZpZGVyLmF1dG9SZWFkRnJvbUZpbGUodXJpKTsKICAgICAgfQogICAgICBpZiAoZmlsZSBpcyBTb3VyY2VGaWxlKSB7CiAgICAgICAgcHJpbnQoZmlsZS5nZXRMb2NhdGlvbk1lc3NhZ2UoY29sb3IobWVzc2FnZSksIGJlZ2luLCBlbmQsCiAgICAgICAgICAgIGNvbG9yaXplOiBjb2xvcikpOwogICAgICB9IGVsc2UgewogICAgICAgIFN0cmluZyBwb3NpdGlvbiA9IGVuZCAtIGJlZ2luID4gMCA/ICdAJGJlZ2luKyR7ZW5kIC0gYmVnaW59JyA6ICcnOwogICAgICAgIHByaW50KCcke3Byb3ZpZGVyLnJlbGF0aXZpemVVcmkodXJpKX0kcG9zaXRpb246XG4nCiAgICAgICAgICAgICcke2NvbG9yKG1lc3NhZ2UpfScpOwogICAgICB9CiAgICB9CiAgICBpZiAoZmF0YWwgJiYgKytmYXRhbENvdW50ID49IHRocm93T25FcnJvckNvdW50ICYmIHRocm93T25FcnJvcikgewogICAgICBpc0Fib3J0aW5nID0gdHJ1ZTsKICAgICAgdGhyb3cgbmV3IEFib3J0TGVnKG1lc3NhZ2UpOwogICAgfQogIH0KCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgd2hlbiBubyBsb25nZXIgbmVlZGVkIGZvciB0aGUgb2xkIGNvbXBpbGVyCiAgLy8gQVBJLgogIHZvaWQgY2FsbChVcmkgdXJpLCBpbnQgYmVnaW4sIGludCBlbmQsIFN0cmluZyBtZXNzYWdlLCBhcGkuRGlhZ25vc3RpYyBraW5kKSB7CiAgICByZXR1cm4gcmVwb3J0KG51bGwsIHVyaSwgYmVnaW4sIGVuZCwgbWVzc2FnZSwga2luZCk7CiAgfQp9Cgp0eXBlZGVmIHZvaWQgTWVzc2FnZUNhbGxiYWNrKFN0cmluZyBtZXNzYWdlKTsKCmNsYXNzIFJhbmRvbUFjY2Vzc0ZpbGVPdXRwdXRQcm92aWRlciBpbXBsZW1lbnRzIENvbXBpbGVyT3V0cHV0IHsKICBmaW5hbCBVcmkgb3V0OwogIGZpbmFsIFVyaSBzb3VyY2VNYXBPdXQ7CiAgZmluYWwgTWVzc2FnZUNhbGxiYWNrIG9uSW5mbzsKICBmaW5hbCBNZXNzYWdlQ2FsbGJhY2sgb25GYWlsdXJlOwoKICBpbnQgdG90YWxDaGFyYWN0ZXJzV3JpdHRlbiA9IDA7CiAgaW50IHRvdGFsQ2hhcmFjdGVyc1dyaXR0ZW5QcmltYXJ5ID0gMDsKICBpbnQgdG90YWxDaGFyYWN0ZXJzV3JpdHRlbkphdmFTY3JpcHQgPSAwOwogIGludCB0b3RhbERhdGFXcml0dGVuID0gMDsKCiAgTGlzdDxTdHJpbmc+IGFsbE91dHB1dEZpbGVzID0gPFN0cmluZz5bXTsKCiAgUmFuZG9tQWNjZXNzRmlsZU91dHB1dFByb3ZpZGVyKHRoaXMub3V0LCB0aGlzLnNvdXJjZU1hcE91dCwKICAgICAge3RoaXMub25JbmZvLCB0aGlzLm9uRmFpbHVyZX0pOwoKICBVcmkgY3JlYXRlVXJpKFN0cmluZyBuYW1lLCBTdHJpbmcgZXh0ZW5zaW9uLCBPdXRwdXRUeXBlIHR5cGUpIHsKICAgIFVyaSB1cmk7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVbmlmeSBoYW5kbGUgb2YgW25hbWVdIGFuZCBbZXh0ZW5zaW9uXSB0byBwcmVwYXJlCiAgICAvLyBmb3IgdXNpbmcgYSBzaW5nbGUsIHBvc3NpYmx5IHJlbGF0aXZlLCBbdXJpXSBhcyBpbnB1dC4KICAgIHN3aXRjaCAodHlwZSkgewogICAgICBjYXNlIE91dHB1dFR5cGUuanM6CiAgICAgICAgaWYgKG5hbWUgPT0gJycpIHsKICAgICAgICAgIHVyaSA9IG91dDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdXJpID0gb3V0LnJlc29sdmUoJyRuYW1lLiRleHRlbnNpb24nKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgT3V0cHV0VHlwZS5zb3VyY2VNYXA6CiAgICAgICAgaWYgKG5hbWUgPT0gJycpIHsKICAgICAgICAgIHVyaSA9IHNvdXJjZU1hcE91dDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdXJpID0gb3V0LnJlc29sdmUoJyRuYW1lLiRleHRlbnNpb24nKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgT3V0cHV0VHlwZS5qc1BhcnQ6CiAgICAgICAgdXJpID0gb3V0LnJlc29sdmUoJyRuYW1lLiRleHRlbnNpb24nKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBPdXRwdXRUeXBlLmR1bXBJbmZvOgogICAgICBjYXNlIE91dHB1dFR5cGUuZGVmZXJyZWRNYXA6CiAgICAgICAgaWYgKG5hbWUgPT0gJycpIHsKICAgICAgICAgIG5hbWUgPSBvdXQucGF0aFNlZ21lbnRzLmxhc3Q7CiAgICAgICAgfQogICAgICAgIGlmIChleHRlbnNpb24gPT0gJycpIHsKICAgICAgICAgIHVyaSA9IG91dC5yZXNvbHZlKG5hbWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB1cmkgPSBvdXQucmVzb2x2ZSgnJG5hbWUuJGV4dGVuc2lvbicpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBPdXRwdXRUeXBlLmRlYnVnOgogICAgICAgIHVyaSA9IG91dC5yZXNvbHZlKCckbmFtZS4kZXh0ZW5zaW9uJyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgb25GYWlsdXJlKCdVbmtub3duIG91dHB1dCB0eXBlOiAkdHlwZScpOwogICAgfQogICAgcmV0dXJuIHVyaTsKICB9CgogIEBvdmVycmlkZQogIE91dHB1dFNpbmsgY3JlYXRlT3V0cHV0U2luayhTdHJpbmcgbmFtZSwgU3RyaW5nIGV4dGVuc2lvbiwgT3V0cHV0VHlwZSB0eXBlKSB7CiAgICBVcmkgdXJpID0gY3JlYXRlVXJpKG5hbWUsIGV4dGVuc2lvbiwgdHlwZSk7CiAgICBib29sIGlzUHJpbWFyeU91dHB1dCA9IHVyaSA9PSBvdXQ7CgogICAgaWYgKHVyaS5zY2hlbWUgIT0gJ2ZpbGUnKSB7CiAgICAgIG9uRmFpbHVyZSgnVW5oYW5kbGVkIHNjaGVtZSAke3VyaS5zY2hlbWV9IGluICR1cmkuJyk7CiAgICB9CgogICAgUmFuZG9tQWNjZXNzRmlsZSBvdXRwdXQ7CiAgICB0cnkgewogICAgICBvdXRwdXQgPSBuZXcgRmlsZSh1cmkudG9GaWxlUGF0aCgpKS5vcGVuU3luYyhtb2RlOiBGaWxlTW9kZS53cml0ZSk7CiAgICB9IG9uIEZpbGVTeXN0ZW1FeGNlcHRpb24gY2F0Y2ggKGUpIHsKICAgICAgb25GYWlsdXJlKCckZScpOwogICAgfQoKICAgIGFsbE91dHB1dEZpbGVzCiAgICAgICAgLmFkZChmZS5yZWxhdGl2aXplVXJpKGN1cnJlbnREaXJlY3RvcnksIHVyaSwgUGxhdGZvcm0uaXNXaW5kb3dzKSk7CgogICAgaW50IGNoYXJhY3RlcnNXcml0dGVuID0gMDsKCiAgICB2b2lkIHdyaXRlU3RyaW5nU3luYyhTdHJpbmcgZGF0YSkgewogICAgICAvLyBXcml0ZSB0aGUgZGF0YSBpbiBjaHVua3Mgb2YgOGtiLCBvdGhlcndpc2Ugd2UgcmlzayBydW5uaW5nIE9PTS4KICAgICAgaW50IGNodW5rU2l6ZSA9IDggKiAxMDI0OwoKICAgICAgaW50IG9mZnNldCA9IDA7CiAgICAgIHdoaWxlIChvZmZzZXQgPCBkYXRhLmxlbmd0aCkgewogICAgICAgIG91dHB1dC53cml0ZVN0cmluZ1N5bmMoCiAgICAgICAgICAgIGRhdGEuc3Vic3RyaW5nKG9mZnNldCwgbWF0aC5taW4ob2Zmc2V0ICsgY2h1bmtTaXplLCBkYXRhLmxlbmd0aCkpKTsKICAgICAgICBvZmZzZXQgKz0gY2h1bmtTaXplOwogICAgICB9CiAgICAgIGNoYXJhY3RlcnNXcml0dGVuICs9IGRhdGEubGVuZ3RoOwogICAgfQoKICAgIHZvaWQgb25Eb25lKCkgewogICAgICBvdXRwdXQuY2xvc2VTeW5jKCk7CiAgICAgIHRvdGFsQ2hhcmFjdGVyc1dyaXR0ZW4gKz0gY2hhcmFjdGVyc1dyaXR0ZW47CiAgICAgIGlmIChpc1ByaW1hcnlPdXRwdXQpIHsKICAgICAgICB0b3RhbENoYXJhY3RlcnNXcml0dGVuUHJpbWFyeSArPSBjaGFyYWN0ZXJzV3JpdHRlbjsKICAgICAgfQogICAgICBpZiAodHlwZSA9PSBPdXRwdXRUeXBlLmpzIHx8IHR5cGUgPT0gT3V0cHV0VHlwZS5qc1BhcnQpIHsKICAgICAgICB0b3RhbENoYXJhY3RlcnNXcml0dGVuSmF2YVNjcmlwdCArPSBjaGFyYWN0ZXJzV3JpdHRlbjsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBuZXcgX091dHB1dFNpbmtXcmFwcGVyKHdyaXRlU3RyaW5nU3luYywgb25Eb25lKTsKICB9CgogIEBvdmVycmlkZQogIEJpbmFyeU91dHB1dFNpbmsgY3JlYXRlQmluYXJ5U2luayhVcmkgdXJpKSB7CiAgICB1cmkgPSBjdXJyZW50RGlyZWN0b3J5LnJlc29sdmVVcmkodXJpKTsKCiAgICBhbGxPdXRwdXRGaWxlcwogICAgICAgIC5hZGQoZmUucmVsYXRpdml6ZVVyaShjdXJyZW50RGlyZWN0b3J5LCB1cmksIFBsYXRmb3JtLmlzV2luZG93cykpOwoKICAgIGlmICh1cmkuc2NoZW1lICE9ICdmaWxlJykgewogICAgICBvbkZhaWx1cmUoJ1VuaGFuZGxlZCBzY2hlbWUgJHt1cmkuc2NoZW1lfSBpbiAkdXJpLicpOwogICAgfQoKICAgIFJhbmRvbUFjY2Vzc0ZpbGUgb3V0cHV0OwogICAgdHJ5IHsKICAgICAgb3V0cHV0ID0gbmV3IEZpbGUodXJpLnRvRmlsZVBhdGgoKSkub3BlblN5bmMobW9kZTogRmlsZU1vZGUud3JpdGUpOwogICAgfSBvbiBGaWxlU3lzdGVtRXhjZXB0aW9uIGNhdGNoIChlKSB7CiAgICAgIG9uRmFpbHVyZSgnJGUnKTsKICAgIH0KCiAgICBpbnQgYnl0ZXNXcml0dGVuID0gMDsKCiAgICB2b2lkIHdyaXRlQnl0ZXNTeW5jKExpc3Q8aW50PiBkYXRhLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgICAgb3V0cHV0LndyaXRlRnJvbVN5bmMoZGF0YSwgc3RhcnQsIGVuZCk7CiAgICAgIGJ5dGVzV3JpdHRlbiArPSAoZW5kID8/IGRhdGEubGVuZ3RoKSAtIHN0YXJ0OwogICAgfQoKICAgIHZvaWQgb25Eb25lKCkgewogICAgICBvdXRwdXQuY2xvc2VTeW5jKCk7CiAgICAgIHRvdGFsRGF0YVdyaXR0ZW4gKz0gYnl0ZXNXcml0dGVuOwogICAgfQoKICAgIHJldHVybiBuZXcgX0JpbmFyeU91dHB1dFNpbmtXcmFwcGVyKHdyaXRlQnl0ZXNTeW5jLCBvbkRvbmUpOwogIH0KfQoKY2xhc3MgUmFuZG9tQWNjZXNzQmluYXJ5T3V0cHV0U2luayBpbXBsZW1lbnRzIGFwaS5CaW5hcnlPdXRwdXRTaW5rIHsKICBmaW5hbCBSYW5kb21BY2Nlc3NGaWxlIG91dHB1dDsKCiAgUmFuZG9tQWNjZXNzQmluYXJ5T3V0cHV0U2luayhVcmkgdXJpKQogICAgICA6IG91dHB1dCA9IG5ldyBGaWxlLmZyb21VcmkodXJpKS5vcGVuU3luYyhtb2RlOiBGaWxlTW9kZS53cml0ZSk7CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGUoTGlzdDxpbnQ+IGJ1ZmZlciwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSB7CiAgICBvdXRwdXQud3JpdGVGcm9tU3luYyhidWZmZXIsIHN0YXJ0LCBlbmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjbG9zZSgpIHsKICAgIG91dHB1dC5jbG9zZVN5bmMoKTsKICB9Cn0KCmNsYXNzIF9PdXRwdXRTaW5rV3JhcHBlciBleHRlbmRzIE91dHB1dFNpbmsgewogIHZvaWQgRnVuY3Rpb24oU3RyaW5nKSBvbkFkZDsKICB2b2lkIEZ1bmN0aW9uKCkgb25DbG9zZTsKCiAgX091dHB1dFNpbmtXcmFwcGVyKHRoaXMub25BZGQsIHRoaXMub25DbG9zZSk7CgogIEBvdmVycmlkZQogIHZvaWQgYWRkKFN0cmluZyBkYXRhKSA9PiBvbkFkZChkYXRhKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBjbG9zZSgpID0+IG9uQ2xvc2UoKTsKfQoKY2xhc3MgX0JpbmFyeU91dHB1dFNpbmtXcmFwcGVyIGV4dGVuZHMgQmluYXJ5T3V0cHV0U2luayB7CiAgdm9pZCBGdW5jdGlvbihMaXN0PGludD4sIFtpbnQsIGludF0pIG9uV3JpdGU7CiAgdm9pZCBGdW5jdGlvbigpIG9uQ2xvc2U7CgogIF9CaW5hcnlPdXRwdXRTaW5rV3JhcHBlcih0aGlzLm9uV3JpdGUsIHRoaXMub25DbG9zZSk7CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGUoTGlzdDxpbnQ+IGRhdGEsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgPT4KICAgICAgb25Xcml0ZShkYXRhLCBzdGFydCwgZW5kKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBjbG9zZSgpID0+IG9uQ2xvc2UoKTsKfQoKLy8vIEFkYXB0ZXIgdG8gaW50ZWdyYXRlIGRhcnQyanMgaW4gYmF6ZWwuCi8vLwovLy8gVG8gaGFuZGxlIGJhemVsJ3Mgc3BlY2lhbCBsYXlvdXQ6Ci8vLwovLy8gICogV2Ugc3BlY2lmeSBhIC5wYWNrYWdlcyBjb25maWd1cmF0aW9uIGZpbGUgdGhhdCBleHBhbmRzIHBhY2thZ2VzIHRvIHRoZWlyCi8vLyAgICBjb3JyZXNwb25kaW5nIGJhemVsIGxvY2F0aW9uLiBUaGlzIHdheSB0aGVyZSBpcyBubyBuZWVkIHRvIGNyZWF0ZSBhIHB1YgovLy8gICAgY2FjaGUgcHJpb3IgdG8gaW52b2tpbmcgZGFydDJqcy4KLy8vCi8vLyAgKiBXZSBwcm92aWRlIGFuIGltcGxpY2l0IG1hcHBpbmcgdGhhdCBjYW4gbWFrZSBhbGwgdXJscyByZWxhdGl2ZSB0byB0aGUKLy8vICBiYXplbCByb290LgovLy8gICAgVG8gdGhlIGNvbXBpbGVyLCBVUklzIGxvb2sgbGlrZToKLy8vICAgICAgZmlsZTovLy9iYXplbC1yb290L2EvYi9jLmRhcnQKLy8vCi8vLyAgICBldmVuIHRob3VnaCBpbiB0aGUgZmlsZSBzeXN0ZW0gdGhlIGZpbGUgaXMgbG9jYXRlZCBhdDoKLy8vICAgICAgZmlsZTovLy9wYXRoL3RvL3RoZS9hY3R1YWwvYmF6ZWwvcm9vdC9hL2IvYy5kYXJ0Ci8vLwovLy8gICAgVGhpcyBtYXBwaW5nIHNlcnZlcyB0d28gcHVycG9zZXM6Ci8vLyAgICAgIC0gSXQgbWFrZXMgY29tcGlsZXIgcmVzdWx0cyBpbmRlcGVuZGVudCBvZiB0aGUgbWFjaGluZSBsYXlvdXQsIHdoaWNoCi8vLyAgICAgICAgZW5hYmxlcyB1cyB0byBzaGFyZSByZXN1bHRzIGFjcm9zcyBiYXplbCBydW5zIGFuZCBhY3Jvc3MgbWFjaGluZXMuCi8vLwovLy8gICAgICAtIEl0IGhpZGVzIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGdlbmVyYXRlZCBhbmQgc291cmNlIGZpbGVzLiBUaGF0IHdheQovLy8gICAgICB3ZSBjYW4gdXNlIHRoZSBzdGFuZGFyZCBwYWNrYWdlLXJlc29sdXRpb24gbWVjaGFuaXNtIGFuZCBpZ25vcmUgdGhlCi8vLyAgICAgIGludGVybmFscyBvZiBob3cgZmlsZXMgYXJlIG9yZ2FuaXplZCB3aXRoaW4gYmF6ZWwuCi8vLwovLy8gV2hlbiBpbnZva2luZyB0aGUgY29tcGlsZXIsIGJhemVsIHdpbGwgdXNlIGBwYWNrYWdlOmAgYW5kCi8vLyBgZmlsZTovLy9iYXplbC1yb290L2AgVVJJcyB0byBzcGVjaWZ5IGVudHJ5cG9pbnRzLgovLy8KLy8vIFRoZSBtYXBwaW5nIGlzIHNwZWNpZmllZCB1c2luZyBzZWFyY2ggcGF0aHMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQKLy8vIGRpcmVjdG9yeS4gV2hlbiB0aGlzIHByb3ZpZGVyIGxvb2tzIHVwIGEgZmlsZSwgdGhlIGJhemVsLXJvb3QgZm9sZGVyIGlzCi8vLyByZXBsYWNlZCBieSB0aGUgZmlyc3QgZGlyZWN0b3J5IGluIHRoZSBzZWFyY2ggcGF0aCBjb250YWluaW5nIHRoZSBmaWxlLCBpZgovLy8gYW55LiBGb3IgZXhhbXBsZSwgZ2l2ZW4gdGhlIHNlYXJjaCBwYXRoICIuLGJhemVsLWJpbi8iLCBhbmQgYSBVUkwKLy8vIG9mIHRoZSBmb3JtIGBmaWxlOi8vL2JhemVsLXJvb3QvYS9iLmRhcnRgLCB0aGlzIHByb3ZpZGVyIHdpbGwgY2hlY2sgaWYgdGhlCi8vLyBmaWxlIGV4aXN0cyB1bmRlciAiLi9hL2IuZGFydCIsIHRoZW4gY2hlY2sgdW5kZXIgImJhemVsLWJpbi9hL2IuZGFydCIuICBJZgovLy8gbm9uZSBvZiB0aGUgcGF0aHMgbWF0Y2hlcywgaXQgd2lsbCBhdHRlbXB0IHRvIGxvYWQgdGhlIGZpbGUgZnJvbQovLy8gYC9iYXplbC1yb290L2EvYi5kYXJ0YCB3aGljaCB3aWxsIGxpa2VseSBmYWlsLgpjbGFzcyBCYXplbElucHV0UHJvdmlkZXIgZXh0ZW5kcyBTb3VyY2VGaWxlUHJvdmlkZXIgewogIGZpbmFsIExpc3Q8VXJpPiBkaXJzOwoKICBCYXplbElucHV0UHJvdmlkZXIoTGlzdDxTdHJpbmc+IHNlYXJjaFBhdGhzKQogICAgICA6IGRpcnMgPSBzZWFyY2hQYXRocy5tYXAoX3Jlc29sdmUpLnRvTGlzdCgpOwoKICBzdGF0aWMgVXJpIF9yZXNvbHZlKFN0cmluZyBwYXRoKSA9PiBjdXJyZW50RGlyZWN0b3J5LnJlc29sdmUocGF0aCk7CgogIEBvdmVycmlkZQogIEZ1dHVyZTxhcGkuSW5wdXQ8TGlzdDxpbnQ+Pj4gcmVhZEZyb21VcmkoVXJpIHVyaSwKICAgICAge0lucHV0S2luZCBpbnB1dEtpbmQ6IElucHV0S2luZC5VVEY4fSkgYXN5bmMgewogICAgdmFyIHJlc29sdmVkVXJpID0gdXJpOwogICAgdmFyIHBhdGggPSB1cmkucGF0aDsKICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoJy9iYXplbC1yb290JykpIHsKICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKCcvYmF6ZWwtcm9vdC8nLmxlbmd0aCk7CiAgICAgIGZvciAodmFyIGRpciBpbiBkaXJzKSB7CiAgICAgICAgdmFyIGZpbGUgPSBkaXIucmVzb2x2ZShwYXRoKTsKICAgICAgICBpZiAoYXdhaXQgbmV3IEZpbGUuZnJvbVVyaShmaWxlKS5leGlzdHMoKSkgewogICAgICAgICAgcmVzb2x2ZWRVcmkgPSBmaWxlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBhcGkuSW5wdXQ8TGlzdDxpbnQ+PiByZXN1bHQgPQogICAgICAgIGF3YWl0IHJlYWRCeXRlc0Zyb21V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Zz4gRVNDQVBFX01BUFBJTkcgPSBjb25zdCB7CiAgIm4iOiAiXG4iLAogICJyIjogIlxyIiwKICAidCI6ICJcdCIsCiAgImIiOiAiXGIiLAogICJmIjogIlxmIiwKICAidiI6ICJcdiIsCiAgIlxcIjogIlxcIiwKfTsKCi8vLyBTcGxpdHMgdGhlIGxpbmUgc2ltaWxhciB0byBob3cgYSBzaGVsbCB3b3VsZCBzcGxpdCBhcmd1bWVudHMuIElmIFt3aW5kb3dzXQovLy8gaXMgYHRydWVgIGVzY2FwZXMgd2lsbCBiZSBoYW5kbGVkIGxpa2Ugb24gdGhlIFdpbmRvd3MgY29tbWFuZC1saW5lLgovLy8KLy8vIEV4YW1wbGU6Ci8vLwovLy8gICAgIHNwbGl0bGluZSgiIiItLWFyZ3MgImFiImMgJ3dpdGggIiBcJ3NwYWNlcyciIiIpLmZvckVhY2gocHJpbnQpOwovLy8gICAgIC8vIC0tYXJncwovLy8gICAgIC8vIGFiYwovLy8gICAgIC8vIHdpdGggIiAnc3BhY2VzCkxpc3Q8U3RyaW5nPiBzcGxpdExpbmUoU3RyaW5nIGxpbmUsIHtib29sIHdpbmRvd3M6IGZhbHNlfSkgewogIExpc3Q8U3RyaW5nPiByZXN1bHQgPSA8U3RyaW5nPltdOwogIGJvb2wgaW5RdW90ZXMgPSBmYWxzZTsKICBTdHJpbmcgb3BlbmluZ1F1b3RlOwogIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaW5lLmxlbmd0aDsgaSsrKSB7CiAgICBTdHJpbmcgYyA9IGxpbmVbaV07CiAgICBpZiAoaW5RdW90ZXMgJiYgYyA9PSBvcGVuaW5nUXVvdGUpIHsKICAgICAgaW5RdW90ZXMgPSBmYWxzZTsKICAgICAgY29udGludWU7CiAgICB9CiAgICBpZiAoIWluUXVvdGVzICYmIChjID09ICciJyB8fCAoYyA9PSAiJyIgJiYgIXdpbmRvd3MpKSkgewogICAgICBpblF1b3RlcyA9IHRydWU7CiAgICAgIG9wZW5pbmdRdW90ZSA9IGM7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgaWYgKGMgPT0gJ1xcJykgewogICAgICBpZiAoaSA9PSBsaW5lLmxlbmd0aCAtIDEpIHsKICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKCJVbmZpbmlzaGVkIGVzY2FwZTogJGxpbmUiKTsKICAgICAgfQogICAgICBpZiAod2luZG93cykgewogICAgICAgIFN0cmluZyBuZXh0ID0gbGluZVtpICsgMV07CiAgICAgICAgaWYgKG5leHQgPT0gJyInIHx8IG5leHQgPT0gcidcJykgewogICAgICAgICAgYnVmZmVyLndyaXRlKG5leHQpOwogICAgICAgICAgaSsrOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGkrKzsKCiAgICAgICAgYyA9IGxpbmVbaV07CiAgICAgICAgU3RyaW5nIG1hcHBlZCA9IEVTQ0FQRV9NQVBQSU5HW2NdOwogICAgICAgIGlmIChtYXBwZWQgPT0gbnVsbCkgbWFwcGVkID0gYzsKICAgICAgICBidWZmZXIud3JpdGUobWFwcGVkKTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgfQogICAgaWYgKCFpblF1b3RlcyAmJiBjID09ICIgIikgewogICAgICBpZiAoYnVmZmVyLmlzTm90RW1wdHkpIHJlc3VsdC5hZGQoYnVmZmVyLnRvU3RyaW5nKCkpOwogICAgICBidWZmZXIuY2xlYXIoKTsKICAgICAgY29udGludWU7CiAgICB9CiAgICBidWZmZXIud3JpdGUoYyk7CiAgfQogIGlmIChpblF1b3RlcykgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigiVW5jbG9zZWQgcXVvdGVzOiAkbGluZSIpOwogIGlmIChidWZmZXIuaXNOb3RFbXB0eSkgcmVzdWx0LmFkZChidWZmZXIudG9TdHJpbmcoKSk7CiAgcmV0dXJuIHJlc3VsdDsKfQpOAE5OPAEjAUAESS0NDQ0NDQ0OAwFPSAQNBEgSDxo9JBkXLCoYKRgQBj0XGBAGFSI/CBUjKx4PFAoPDQEVKygeEggGITwWEAYVBEU4EQIBK3BhY2thZ2U6Y29tcGlsZXIvc3JjL3V0aWwvY29tbWFuZF9saW5lLmRhcnQsc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvdXRpbC91dGlsLmRhcnSjUS8vIENvcHlyaWdodCAoYykgMjAxMSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMudXRpbDsKCmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9kYXJ0MmpzLmRhcnQnCiAgICBzaG93ICRCQUNLU0xBU0gsICRDUiwgJERFTCwgJERRLCAkTEYsICRMUywgJFBTLCAkVEFCLCBMaW5rLCBMaW5rQnVpbGRlcjsKCmV4cG9ydCAnZW1wdHlzZXQuZGFydCc7CmV4cG9ydCAnbWFwbGV0LmRhcnQnOwpleHBvcnQgJ3NldGxldC5kYXJ0JzsKCnBhcnQgJ2luZGVudGF0aW9uLmRhcnQnOwoKLy8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIGNyZWF0aW5nIGhhc2ggY29kZXMuCmNsYXNzIEhhc2hpbmcgewogIC8vLyBJZiBhbiBpbnRlZ2VyIGlzIG1hc2tlZCBieSB0aGlzIGNvbnN0YW50LCB0aGUgcmVzdWx0IGlzIGd1YXJhbnRlZWQgdG8gYmUKICAvLy8gaW4gU21pIHJhbmdlLgogIHN0YXRpYyBjb25zdCBpbnQgU01JX01BU0sgPSAweDNmZmZmZmZmOwoKICAvLy8gTWl4IHRoZSBiaXRzIG9mIFt2YWx1ZV0gYW5kIG1lcmdlIHRoZW0gd2l0aCBbZXhpc3RpbmddLgogIHN0YXRpYyBpbnQgbWl4SGFzaENvZGVCaXRzKGludCBleGlzdGluZywgaW50IHZhbHVlKSB7CiAgICAvLyBTcHJlYWQgdGhlIGJpdHMgb2YgdmFsdWUuIFRyeSB0byBzdGF5IGluIHRoZSAzMC1iaXQgcmFuZ2UgdG8KICAgIC8vIGF2b2lkIG92ZXJmbG93aW5nIGludG8gYSBtb3JlIGV4cGVuc2l2ZSBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uLgogICAgaW50IGggPSB2YWx1ZSAmIDB4MWZmZmZmZmY7CiAgICBoICs9ICgoaCAmIDB4M2ZmZikgPDwgMTUpIF4gMHgxZmZmY2Q3ZDsKICAgIGggXj0gKGggPj4gMTApOwogICAgaCArPSAoKGggJiAweDNmZmZmZmYpIDw8IDMpOwogICAgaCBePSAoaCA+PiA2KTsKICAgIGggKz0gKChoICYgMHg3ZmZmZmZmKSA8PCAyKSArICgoaCAmIDB4N2ZmZikgPDwgMTQpOwogICAgaCBePSAoaCA+PiAxNik7CiAgICAvLyBDb21iaW5lIHRoZSB0d28gaGFzaCB2YWx1ZXMuCiAgICBpbnQgaGlnaCA9IGV4aXN0aW5nID4+IDE1OwogICAgaW50IGxvdyA9IGV4aXN0aW5nICYgMHg3ZmZmOwogICAgcmV0dXJuICgoaGlnaCAqIDEzKSBeIChsb3cgKiA5OTcpIF4gaCkgJiBTTUlfTUFTSzsKICB9CgogIC8vLyBNaXggdGhlIGJpdHMgb2YgYG9iamVjdC5oYXNoQ29kZWAgd2l0aCBbZXhpc3RpbmddLgogIHN0YXRpYyBpbnQgb2JqZWN0SGFzaChPYmplY3Qgb2JqZWN0LCBbaW50IGV4aXN0aW5nID0gMF0pIHsKICAgIHJldHVybiBtaXhIYXNoQ29kZUJpdHMoZXhpc3RpbmcsIG9iamVjdC5oYXNoQ29kZSk7CiAgfQoKICAvLy8gTWl4IHRoZSBiaXRzIG9mIGAuaGFzaENvZGVgIGFsbCBub24tbnVsbCBvYmplY3RzLgogIHN0YXRpYyBpbnQgb2JqZWN0c0hhc2goT2JqZWN0IG9iajEsCiAgICAgIFtPYmplY3Qgb2JqMiwgT2JqZWN0IG9iajMsIE9iamVjdCBvYmo0LCBPYmplY3Qgb2JqNV0pIHsKICAgIGludCBoYXNoID0gMDsKICAgIGlmIChvYmo1ICE9IG51bGwpIGhhc2ggPSBvYmplY3RIYXNoKG9iajUsIGhhc2gpOwogICAgaWYgKG9iajQgIT0gbnVsbCkgaGFzaCA9IG9iamVjdEhhc2gob2JqNCwgaGFzaCk7CiAgICBpZiAob2JqMyAhPSBudWxsKSBoYXNoID0gb2JqZWN0SGFzaChvYmozLCBoYXNoKTsKICAgIGlmIChvYmoyICE9IG51bGwpIGhhc2ggPSBvYmplY3RIYXNoKG9iajIsIGhhc2gpOwogICAgcmV0dXJuIG9iamVjdEhhc2gob2JqMSwgaGFzaCk7CiAgfQoKICAvLy8gTWl4IHRoZSBiaXRzIG9mIHRoZSBlbGVtZW50IGhhc2ggY29kZXMgb2YgW2xpc3RdIHdpdGggW2V4aXN0aW5nXS4KICBzdGF0aWMgaW50IGxpc3RIYXNoKExpc3QgbGlzdCwgW2ludCBleGlzdGluZyA9IDBdKSB7CiAgICBpbnQgaCA9IGV4aXN0aW5nOwogICAgaWYgKGxpc3QgIT0gbnVsbCkgewogICAgICBpbnQgbGVuZ3RoID0gbGlzdC5sZW5ndGg7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICBoID0gbWl4SGFzaENvZGVCaXRzKGgsIGxpc3RbaV0uaGFzaENvZGUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gaDsKICB9CgogIC8vLyBNaXggdGhlIGJpdHMgb2YgdGhlIGVsZW1lbnQgaGFzaCBjb2RlcyBvZiBbaXRlcmFibGVdIHdpdGggW2V4aXN0aW5nXS4KICBzdGF0aWMgaW50IHNldEhhc2g8RT4oSXRlcmFibGU8RT4gaXRlcmFibGUsIFtpbnQgZXhpc3RpbmcgPSAwXSkgewogICAgaW50IGggPSBleGlzdGluZzsKICAgIGlmIChpdGVyYWJsZSAhPSBudWxsKSB7CiAgICAgIGZvciAoRSBlIGluIGl0ZXJhYmxlKSB7CiAgICAgICAgaCArPSBvYmplY3RzSGFzaChlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGggJiBTTUlfTUFTSzsKICB9CgogIC8vLyBNaXggdGhlIGJpdHMgb2YgdGhlIGhhc2ggY29kZXMgb2YgdGhlIHVub3JkZXJlZCBrZXkvdmFsdWUgZnJvbSBbbWFwXSB3aXRoCiAgLy8vIFtleGlzdGluZ10uCiAgc3RhdGljIGludCB1bm9yZGVyZWRNYXBIYXNoKE1hcCBtYXAsIFtpbnQgZXhpc3RpbmcgPSAwXSkgewogICAgaWYgKG1hcC5sZW5ndGggPT0gMCkgcmV0dXJuIGV4aXN0aW5nOwogICAgTGlzdDxpbnQ+IGhhc2hDb2RlcyA9IExpc3QobWFwLmxlbmd0aCk7CiAgICBpbnQgaSA9IDA7CiAgICBmb3IgKHZhciBlbnRyeSBpbiBtYXAuZW50cmllcykgewogICAgICBoYXNoQ29kZXNbaSsrXSA9IG9iamVjdEhhc2goZW50cnkua2V5LCBvYmplY3RIYXNoKGVudHJ5LnZhbHVlKSk7CiAgICB9CiAgICBoYXNoQ29kZXMuc29ydCgpOwogICAgaW50IGggPSBleGlzdGluZzsKICAgIGZvciAoaW50IGhhc2hDb2RlIGluIGhhc2hDb2RlcykgewogICAgICBoID0gbWl4SGFzaENvZGVCaXRzKGgsIGhhc2hDb2RlKTsKICAgIH0KICAgIHJldHVybiBoOwogIH0KCiAgLy8vIE1peCB0aGUgYml0cyBvZiB0aGUga2V5L3ZhbHVlIGhhc2ggY29kZXMgZnJvbSBbbWFwXSB3aXRoIFtleGlzdGluZ10uCiAgc3RhdGljIGludCBtYXBIYXNoKE1hcCBtYXAsIFtpbnQgZXhpc3RpbmcgPSAwXSkgewogICAgaW50IGggPSBleGlzdGluZzsKICAgIGZvciAodmFyIGtleSBpbiBtYXAua2V5cykgewogICAgICBoID0gbWl4SGFzaENvZGVCaXRzKGgsIGtleS5oYXNoQ29kZSk7CiAgICAgIGggPSBtaXhIYXNoQ29kZUJpdHMoaCwgbWFwW2tleV0uaGFzaENvZGUpOwogICAgfQogICAgcmV0dXJuIGg7CiAgfQp9Cgpib29sIGVxdWFsRWxlbWVudHM8RT4oTGlzdDxFPiBhLCBMaXN0PEU+IGIpIHsKICBpZiAoaWRlbnRpY2FsKGEsIGIpKSByZXR1cm4gdHJ1ZTsKICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhLmxlbmd0aDsgaW5kZXgrKykgewogICAgaWYgKGFbaW5kZXhdICE9IGJbaW5kZXhdKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CiAgcmV0dXJuIHRydWU7Cn0KCmJvb2wgZXF1YWxTZXRzPEU+KFNldDxFPiBhLCBTZXQ8RT4gYikgewogIGlmIChpZGVudGljYWwoYSwgYikpIHJldHVybiB0cnVlOwogIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIGEubGVuZ3RoID09IGIubGVuZ3RoICYmIGEuY29udGFpbnNBbGwoYikgJiYgYi5jb250YWluc0FsbChhKTsKfQoKYm9vbCBlcXVhbE1hcHM8SywgVj4oTWFwPEssIFY+IGEsIE1hcDxLLCBWPiBiKSB7CiAgaWYgKGlkZW50aWNhbChhLCBiKSkgcmV0dXJuIHRydWU7CiAgaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpIHJldHVybiBmYWxzZTsKICBpZiAoYS5sZW5ndGggIT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTsKICBmb3IgKEsga2V5IGluIGEua2V5cykgewogICAgaWYgKGFba2V5XSAhPSBiW2tleV0pIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIHRydWU7Cn0KCi8vLyBGaWxlIG5hbWUgcHJlZml4IHVzZWQgdG8gc2hvcnRlbiB0aGUgZmlsZSBuYW1lIGluIHN0YWNrIHRyYWNlcyBwcmludGVkIGJ5Ci8vLyBbdHJhY2VdLgpTdHJpbmcgc3RhY2tUcmFjZUZpbGVQcmVmaXggPSBudWxsOwoKLy8vIFdyaXRlcyB0aGUgY2hhcmFjdGVycyBvZiBbc3RyaW5nXSBvbiBbYnVmZmVyXS4gIFRoZSBjaGFyYWN0ZXJzCi8vLyBhcmUgZXNjYXBlZCBhcyBzdWl0YWJsZSBmb3IgSmF2YVNjcmlwdCBhbmQgSlNPTi4gIFtidWZmZXJdIGlzCi8vLyBhbnl0aGluZyB3aGljaCBzdXBwb3J0cyBbOndyaXRlOl0gYW5kIFs6d3JpdGVDaGFyQ29kZTpdLCBmb3IgZXhhbXBsZSwKLy8vIFtTdHJpbmdCdWZmZXJdLiAgTm90ZSB0aGF0IEpTIHN1cHBvcnRzIFx4bm4gYW5kIFx1bm5ubiB3aGVyZWFzIEpTT04gb25seQovLy8gc3VwcG9ydHMgdGhlIFx1bm5ubiBub3RhdGlvbi4gIFRoZXJlZm9yZSB3ZSB1c2UgdGhlIFx1bm5ubiBub3RhdGlvbi4Kdm9pZCB3cml0ZUpzb25Fc2NhcGVkQ2hhcnNPbihTdHJpbmcgc3RyaW5nLCBidWZmZXIpIHsKICB2b2lkIGFkZENvZGVVbml0RXNjYXBlZCh2YXIgYnVmZmVyLCBpbnQgY29kZSkgewogICAgYXNzZXJ0KGNvZGUgPCAweDEwMDAwKTsKICAgIGJ1ZmZlci53cml0ZShyJ1x1Jyk7CiAgICBpZiAoY29kZSA8IDB4MTAwMCkgewogICAgICBidWZmZXIud3JpdGUoJzAnKTsKICAgICAgaWYgKGNvZGUgPCAweDEwMCkgewogICAgICAgIGJ1ZmZlci53cml0ZSgnMCcpOwogICAgICAgIGlmIChjb2RlIDwgMHgxMCkgewogICAgICAgICAgYnVmZmVyLndyaXRlKCcwJyk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBidWZmZXIud3JpdGUoY29kZS50b1JhZGl4U3RyaW5nKDE2KSk7CiAgfQoKICB2b2lkIHdyaXRlRXNjYXBlZE9uKFN0cmluZyBzdHJpbmcsIHZhciBidWZmZXIpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7CiAgICAgIGludCBjb2RlID0gc3RyaW5nLmNvZGVVbml0QXQoaSk7CiAgICAgIGlmIChjb2RlID09ICREUSkgewogICAgICAgIGJ1ZmZlci53cml0ZShyJ1wiJyk7CiAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSAkVEFCKSB7CiAgICAgICAgYnVmZmVyLndyaXRlKHInXHQnKTsKICAgICAgfSBlbHNlIGlmIChjb2RlID09ICRMRikgewogICAgICAgIGJ1ZmZlci53cml0ZShyJ1xuJyk7CiAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSAkQ1IpIHsKICAgICAgICBidWZmZXIud3JpdGUocidccicpOwogICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gJERFTCkgewogICAgICAgIGFkZENvZGVVbml0RXNjYXBlZChidWZmZXIsICRERUwpOwogICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gJExTKSB7CiAgICAgICAgLy8gVGhpcyBVbmljb2RlIGxpbmUgdGVybWluYXRvciBhbmQgJFBTIGFyZSBpbnZhbGlkIGluIEpTIHN0cmluZwogICAgICAgIC8vIGxpdGVyYWxzLgogICAgICAgIGFkZENvZGVVbml0RXNjYXBlZChidWZmZXIsICRMUyk7IC8vIDB4MjAyOC4KICAgICAgfSBlbHNlIGlmIChjb2RlID09ICRQUykgewogICAgICAgIGFkZENvZGVVbml0RXNjYXBlZChidWZmZXIsICRQUyk7IC8vIDB4MjAyOS4KICAgICAgfSBlbHNlIGlmIChjb2RlID09ICRCQUNLU0xBU0gpIHsKICAgICAgICBidWZmZXIud3JpdGUocidcXCcpOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChjb2RlIDwgMHgyMCkgewogICAgICAgICAgYWRkQ29kZVVuaXRFc2NhcGVkKGJ1ZmZlciwgY29kZSk7CiAgICAgICAgICAvLyBXZSBlbWl0IERFTCAoQVNDSUkgMHg3ZikgYXMgYW4gZXNjYXBlIGJlY2F1c2UgaXQgd291bGQgYmUgY29uZnVzaW5nCiAgICAgICAgICAvLyB0byBoYXZlIGl0IHVuZXNjYXBlZCBpbiBhIHN0cmluZyBsaXRlcmFsLiAgV2UgYWxzbyBlc2NhcGUKICAgICAgICAgIC8vIGV2ZXJ5dGhpbmcgYWJvdmUgMHg3ZiBiZWNhdXNlIHRoYXQgbWVhbnMgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeQogICAgICAgICAgLy8gYWJvdXQgd2hldGhlciB0aGUgd2ViIHNlcnZlciBzZXJ2ZXMgaXQgdXAgYXMgTGF0aW4xIG9yIFVURi04LgogICAgICAgIH0gZWxzZSBpZiAoY29kZSA8IDB4N2YpIHsKICAgICAgICAgIGJ1ZmZlci53cml0ZUNoYXJDb2RlKGNvZGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBUaGlzIHdpbGwgb3V0cHV0IHN1cnJvZ2F0ZSBwYWlycyBpbiB0aGUgZm9ybSBcdWR4eHhcdWR5eXksIHJhdGhlcgogICAgICAgICAgLy8gdGhhbiB0aGUgbW9yZSBsb2dpY2FsIFx1e3p6enp6en0uICBUaGlzIHNob3VsZCB3b3JrIGluIEphdmFTY3JpcHQKICAgICAgICAgIC8vIChlc3BlY2lhbGx5IG9sZCBVQ1MtMiBiYXNlZCBpbXBsZW1lbnRhdGlvbnMpIGFuZCBpcyB0aGUgb25seQogICAgICAgICAgLy8gZm9ybWF0IHRoYXQgaXMgYWxsb3dlZCBpbiBKU09OLgogICAgICAgICAgYWRkQ29kZVVuaXRFc2NhcGVkKGJ1ZmZlciwgY29kZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBmb3IgKGludCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykgewogICAgaW50IGNvZGUgPSBzdHJpbmcuY29kZVVuaXRBdChpKTsKICAgIGlmIChjb2RlIDwgMHgyMCB8fAogICAgICAgIGNvZGUgPT0gJERFTCB8fAogICAgICAgIGNvZGUgPT0gJERRIHx8CiAgICAgICAgY29kZSA9PSAkTFMgfHwKICAgICAgICBjb2RlID09ICRQUyB8fAogICAgICAgIGNvZGUgPT0gJEJBQ0tTTEFTSCB8fAogICAgICAgIGNvZGUgPj0gMHg4MCkgewogICAgICB3cml0ZUVzY2FwZWRPbihzdHJpbmcsIGJ1ZmZlcik7CiAgICAgIHJldHVybjsKICAgIH0KICB9CiAgYnVmZmVyLndyaXRlKHN0cmluZyk7Cn0KCmludCBjb21wdXRlSGFzaENvZGUocGFydDEsIFtwYXJ0MiwgcGFydDMsIHBhcnQ0LCBwYXJ0NV0pIHsKICByZXR1cm4gKHBhcnQxLmhhc2hDb2RlIF4KICAgICAgICAgIHBhcnQyLmhhc2hDb2RlIF4KICAgICAgICAgIHBhcnQzLmhhc2hDb2RlIF4KICAgICAgICAgIHBhcnQ0Lmhhc2hDb2RlIF4KICAgICAgICAgIHBhcnQ1Lmhhc2hDb2RlKSAmCiAgICAgIDB4M2ZmZmZmZmY7Cn0KClN0cmluZyBtb2RpZmllcnNUb1N0cmluZygKICAgIHtib29sIGlzU3RhdGljOiBmYWxzZSwKICAgIGJvb2wgaXNBYnN0cmFjdDogZmFsc2UsCiAgICBib29sIGlzRmluYWw6IGZhbHNlLAogICAgYm9vbCBpc1ZhcjogZmFsc2UsCiAgICBib29sIGlzQ29uc3Q6IGZhbHNlLAogICAgYm9vbCBpc0ZhY3Rvcnk6IGZhbHNlLAogICAgYm9vbCBpc0V4dGVybmFsOiBmYWxzZSwKICAgIGJvb2wgaXNDb3ZhcmlhbnQ6IGZhbHNlfSkgewogIExpbmtCdWlsZGVyPFN0cmluZz4gYnVpbGRlciA9IG5ldyBMaW5rQnVpbGRlcjxTdHJpbmc+KCk7CiAgaWYgKGlzU3RhdGljKSBidWlsZGVyLmFkZExhc3QoJ3N0YXRpYycpOwogIGlmIChpc0Fic3RyYWN0KSBidWlsZGVyLmFkZExhc3QoJ2Fic3RyYWN0Jyk7CiAgaWYgKGlzRmluYWwpIGJ1aWxkZXIuYWRkTGFzdCgnZmluYWwnKTsKICBpZiAoaXNWYXIpIGJ1aWxkZXIuYWRkTGFzdCgndmFyJyk7CiAgaWYgKGlzQ29uc3QpIGJ1aWxkZXIuYWRkTGFzdCgnY29uc3QnKTsKICBpZiAoaXNGYWN0b3J5KSBidWlsZGVyLmFkZExhc3QoJ2ZhY3RvcnknKTsKICBpZiAoaXNFeHRlcm5hbCkgYnVpbGRlci5hZGRMYXN0KCdleHRlcm5hbCcpOwogIGlmIChpc0NvdmFyaWFudCkgYnVpbGRlci5hZGRMYXN0KCdjb3ZhcmlhbnQnKTsKICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogIGJ1aWxkZXIudG9MaW5rKGNvbnN0IExpbms8U3RyaW5nPigpKS5wcmludE9uKGJ1ZmZlciwgJywgJyk7CiAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwp9CgpjbGFzcyBQYWlyPEEsIEI+IHsKICBmaW5hbCBBIGE7CiAgZmluYWwgQiBiOwoKICBQYWlyKHRoaXMuYSwgdGhpcy5iKTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiAxMyAqIGEuaGFzaENvZGUgKyAxNyAqIGIuaGFzaENvZGU7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0odmFyIG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIFBhaXIpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBhID09IG90aGVyLmEgJiYgYiA9PSBvdGhlci5iOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJygkYSwkYiknOwp9CgppbnQgbG9uZ2VzdENvbW1vblByZWZpeExlbmd0aChMaXN0IGEsIExpc3QgYikgewogIGludCBpbmRleCA9IDA7CiAgZm9yICg7IGluZGV4IDwgYS5sZW5ndGggJiYgaW5kZXggPCBiLmxlbmd0aDsgaW5kZXgrKykgewogICAgaWYgKGFbaW5kZXhdICE9IGJbaW5kZXhdKSB7CiAgICAgIGJyZWFrOwogICAgfQogIH0KICByZXR1cm4gaW5kZXg7Cn0KCi8vLyBSZXR1cm5zIFtzdWdnZXN0ZWROYW1lXSBpZiBpdCBpcyBub3QgaW4gW3VzZWROYW1lc10uIE90aGVyd2lzZSBjb25jYXRlbmF0ZXMKLy8vIHRoZSBzbWFsbGVzdCBudW1iZXIgdGhhdCBtYWtlcyBpdCBub3QgYXBwZWFyIGluIFt1c2VkTmFtZXNdLgovLy8KLy8vIEFkZHMgdGhlIHJlc3VsdCB0byBbdXNlZE5hbWVzXS4KU3RyaW5nIG1ha2VVbmlxdWUoU3RyaW5nIHN1Z2dlc3RlZE5hbWUsIFNldDxTdHJpbmc+IHVzZWROYW1lcywKICAgIFtTdHJpbmcgc2VwYXJhdG9yID0gJyddKSB7CiAgU3RyaW5nIHJlc3VsdCA9IHN1Z2dlc3RlZE5hbWU7CiAgaWYgKHVzZWROYW1lcy5jb250YWlucyhzdWdnZXN0ZWROYW1lKSkgewogICAgaW50IGNvdW50ZXIgPSAwOwogICAgd2hpbGUgKHVzZWROYW1lcy5jb250YWlucyhyZXN1bHQpKSB7CiAgICAgIGNvdW50ZXIrKzsKICAgICAgcmVzdWx0ID0gIiRzdWdnZXN0ZWROYW1lJHNlcGFyYXRvciRjb3VudGVyIjsKICAgIH0KICB9CiAgdXNlZE5hbWVzLmFkZChyZXN1bHQpOwogIHJldHVybiByZXN1bHQ7Cn0KgSgATk48ARYBOU0BGBYWARkBLhBPFCoBPjhERyAsFCETOBQkHyE3BAE5PTcEATgmPhI1NTU1IwQBSDcWGCApMggGDgQBTEQWHB4dCAYZBAFQEj0qLA8lRwYWFiYoBg4EAUs0FiAsMQYOBAIBLiQsKjMgFAYEDwIBKCQsRwIBMSQsKhooBA8CAU4NJAFDQkpNSTYyHBkZGRobGx0KCAYqBAEzLicZHSEdIB0gHSEqIEkVNCA0Jx0PGyxRR01LIiYRT09KLSwKCAYEASwlFxgXFxceGCYOBgQYAgE7GxsbGxwSAgEaGxwZFxkbHCA7Ky8pJSktLzEsPhwCARMNDQEYAQw5AQwgLSYpBAEMIgIBMBE6IA0GBBACAVBBBCQ/HyErFSkRMwYEGRECASNwYWNrYWdlOmNvbXBpbGVyL3NyYy91dGlsL3V0aWwuZGFydDNzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy91dGlsL2luZGVudGF0aW9uLmRhcnSOdC8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQyanMudXRpbDsKCi8vLyBJbmRlbnRhdGlvbiB1dGlsaXR5IGNsYXNzLiBTaG91bGQgYmUgdXNlZCBhcyBhIG1peGluIGluIG1vc3QgY2FzZXMuCmNsYXNzIEluZGVudGF0aW9uIHsKICAvLy8gVGhlIGN1cnJlbnQgaW5kZW50YXRpb24gc3RyaW5nLgogIFN0cmluZyBnZXQgaW5kZW50YXRpb24gewogICAgLy8gTGF6aWx5IGFkZCBuZXcgaW5kZW50YXRpb24gc3RyaW5ncyBhcyByZXF1aXJlZC4KICAgIGZvciAoaW50IGkgPSBfaW5kZW50TGlzdC5sZW5ndGg7IGkgPD0gX2luZGVudExldmVsOyBpKyspIHsKICAgICAgX2luZGVudExpc3QuYWRkKF9pbmRlbnRMaXN0W2kgLSAxXSArIGluZGVudGF0aW9uVW5pdCk7CiAgICB9CiAgICByZXR1cm4gX2luZGVudExpc3RbX2luZGVudExldmVsXTsKICB9CgogIC8vLyBUaGUgY3VycmVudCBpbmRlbnRhdGlvbiBsZXZlbC4KICBpbnQgX2luZGVudExldmVsID0gMDsKCiAgLy8vIEEgY2FjaGUgb2YgYWxsIGluZGVudGF0aW9uIHN0cmluZ3MgdXNlZCBzbyBmYXIuCiAgLy8vIEFsd2F5cyBhdCBsZWFzdCBvZiBsZW5ndGggMS4KICBMaXN0PFN0cmluZz4gX2luZGVudExpc3QgPSA8U3RyaW5nPlsiIl07CgogIC8vLyBUaGUgaW5kZW50YXRpb24gdW5pdCwgZGVmYXVsdGluZyB0byB0d28gc3BhY2VzLiBNYXkgYmUgb3ZlcndyaXR0ZW4uCiAgU3RyaW5nIF9pbmRlbnRhdGlvblVuaXQgPSAiICAiOwogIFN0cmluZyBnZXQgaW5kZW50YXRpb25Vbml0ID0+IF9pbmRlbnRhdGlvblVuaXQ7CiAgc2V0IGluZGVudGF0aW9uVW5pdChTdHJpbmcgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSAhPSBfaW5kZW50YXRpb25Vbml0KSB7CiAgICAgIF9pbmRlbnRhdGlvblVuaXQgPSB2YWx1ZTsKICAgICAgX2luZGVudExpc3QgPSA8U3RyaW5nPlsiIl07CiAgICB9CiAgfQoKICAvLy8gSW5jcmVhc2VzIHRoZSBjdXJyZW50IGxldmVsIG9mIGluZGVudGF0aW9uLgogIHZvaWQgaW5kZW50TW9yZSgpIHsKICAgIF9pbmRlbnRMZXZlbCsrOwogIH0KCiAgLy8vIERlY3JlYXNlcyB0aGUgY3VycmVudCBsZXZlbCBvZiBpbmRlbnRhdGlvbi4KICB2b2lkIGluZGVudExlc3MoKSB7CiAgICBfaW5kZW50TGV2ZWwtLTsKICB9CgogIC8vLyBDYWxscyBbZl0gd2l0aCBvbmUgbW9yZSBpbmRlbnRhdGlvbiBsZXZlbCwgcmVzdG9yaW5nIGluZGVudGF0aW9uIGNvbnRleHQKICAvLy8gdXBvbiByZXR1cm4gb2YgW2ZdIGFuZCByZXR1cm5pbmcgaXRzIHJlc3VsdC4KICBpbmRlbnRCbG9jayhGdW5jdGlvbiBmKSB7CiAgICBpbmRlbnRNb3JlKCk7CiAgICB2YXIgcmVzdWx0ID0gZigpOwogICAgaW5kZW50TGVzcygpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIFRhZ2dpbmc8Tj4gaW1wbGVtZW50cyBJbmRlbnRhdGlvbiB7CiAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogIExpbms8U3RyaW5nPiB0YWdTdGFjayA9IGNvbnN0IExpbms8U3RyaW5nPigpOwoKICB2b2lkIHB1c2hUYWcoU3RyaW5nIHRhZykgewogICAgdGFnU3RhY2sgPSB0YWdTdGFjay5wcmVwZW5kKHRhZyk7CiAgICBpbmRlbnRNb3JlKCk7CiAgfQoKICBTdHJpbmcgcG9wVGFnKCkgewogICAgYXNzZXJ0KCF0YWdTdGFjay5pc0VtcHR5KTsKICAgIFN0cmluZyB0YWcgPSB0YWdTdGFjay5oZWFkOwogICAgdGFnU3RhY2sgPSB0YWdTdGFjay50YWlsOwogICAgaW5kZW50TGVzcygpOwogICAgcmV0dXJuIHRhZzsKICB9CgogIC8vLyBBZGRzIGdpdmVuIHN0cmluZyB0byByZXN1bHQgc3RyaW5nLgogIHZvaWQgYWRkKFN0cmluZyBzdHJpbmcpIHsKICAgIHNiLndyaXRlKHN0cmluZyk7CiAgfQoKICAvLy8gQWRkcyBkZWZhdWx0IHBhcmFtZXRlcnMgZm9yIFtub2RlXSBpbnRvIFtwYXJhbXNdLgogIHZvaWQgYWRkRGVmYXVsdFBhcmFtZXRlcnMoTiBub2RlLCBNYXAgcGFyYW1zKSB7fQoKICAvLy8gQWRkcyBnaXZlbiBub2RlIHR5cGUgdG8gcmVzdWx0IHN0cmluZy4KICAvLy8gVGhlIG1ldGhvZCAib3BlbnMiIHRoZSBub2RlLCBtZWFuaW5nIHRoYXQgYWxsIG91dHB1dCBhZnRlciBjYWxsaW5nCiAgLy8vIHRoaXMgbWV0aG9kIGFuZCBiZWZvcmUgY2FsbGluZyBjbG9zZU5vZGUoKSB3aWxsIHJlcHJlc2VudCBjb250ZW50cwogIC8vLyBvZiBnaXZlbiBub2RlLgogIHZvaWQgb3Blbk5vZGUoTiBub2RlLCBTdHJpbmcgdHlwZSwgW01hcCBwYXJhbXNdKSB7CiAgICBpZiAocGFyYW1zID09IG51bGwpIHBhcmFtcyA9IG5ldyBNYXAoKTsKICAgIGFkZEN1cnJlbnRJbmRlbnQoKTsKICAgIHNiLndyaXRlKCI8Iik7CiAgICBhZGREZWZhdWx0UGFyYW1ldGVycyhub2RlLCBwYXJhbXMpOwogICAgYWRkVHlwZVdpdGhQYXJhbXModHlwZSwgcGFyYW1zKTsKICAgIHNiLndyaXRlKCI+XG4iKTsKICAgIHB1c2hUYWcodHlwZSk7CiAgfQoKICAvLy8gQWRkcyBnaXZlbiBub2RlIHRvIHJlc3VsdCBzdHJpbmcuCiAgdm9pZCBvcGVuQW5kQ2xvc2VOb2RlKE4gbm9kZSwgU3RyaW5nIHR5cGUsIFtNYXAgcGFyYW1zXSkgewogICAgaWYgKHBhcmFtcyA9PSBudWxsKSBwYXJhbXMgPSB7fTsKICAgIGFkZEN1cnJlbnRJbmRlbnQoKTsKICAgIHNiLndyaXRlKCI8Iik7CiAgICBhZGREZWZhdWx0UGFyYW1ldGVycyhub2RlLCBwYXJhbXMpOwogICAgYWRkVHlwZVdpdGhQYXJhbXModHlwZSwgcGFyYW1zKTsKICAgIHNiLndyaXRlKCIvPlxuIik7CiAgfQoKICAvLy8gQ2xvc2VzIGN1cnJlbnQgbm9kZSB0eXBlLgogIHZvaWQgY2xvc2VOb2RlKCkgewogICAgU3RyaW5nIHRhZyA9IHBvcFRhZygpOwogICAgYWRkQ3VycmVudEluZGVudCgpOwogICAgc2Iud3JpdGUoIjwvIik7CiAgICBhZGRUeXBlV2l0aFBhcmFtcyh0YWcpOwogICAgc2Iud3JpdGUoIj5cbiIpOwogIH0KCiAgdm9pZCBhZGRUeXBlV2l0aFBhcmFtcyhTdHJpbmcgdHlwZSwgW01hcCBwYXJhbXNdKSB7CiAgICBpZiAocGFyYW1zID09IG51bGwpIHBhcmFtcyA9IG5ldyBNYXAoKTsKICAgIHNiLndyaXRlKCIke3R5cGV9Iik7CiAgICBwYXJhbXMuZm9yRWFjaCgoaywgdikgewogICAgICBTdHJpbmcgdmFsdWU7CiAgICAgIGlmICh2ICE9IG51bGwpIHsKICAgICAgICBTdHJpbmcgc3RyID0gdmFsdWVUb1N0cmluZyh2KTsKICAgICAgICB2YWx1ZSA9IHN0cgogICAgICAgICAgICAucmVwbGFjZUFsbCgiPCIsICImbHQ7IikKICAgICAgICAgICAgLnJlcGxhY2VBbGwoIj4iLCAiJmd0OyIpCiAgICAgICAgICAgIC5yZXBsYWNlQWxsKCciJywgIiciKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YWx1ZSA9ICJbbnVsbF0iOwogICAgICB9CiAgICAgIHNiLndyaXRlKCcgJGs9IiR2YWx1ZSInKTsKICAgIH0pOwogIH0KCiAgdm9pZCBhZGRDdXJyZW50SW5kZW50KCkgewogICAgc2Iud3JpdGUoaW5kZW50YXRpb24pOwogIH0KCiAgLy8vIENvbnZlcnRzIGEgcGFyYW1ldGVyIHZhbHVlIGludG8gYSBzdHJpbmcuCiAgU3RyaW5nIHZhbHVlVG9TdHJpbmcodmFyIHZhbHVlKSA9PiB2YWx1ZTsKfQqAiwBOTjwBFgFIFCYbNz89BiYEASUYATYjKwFKIjImJSAiBgQBMhYUBAEyFhQEAU8zHBIWEhMEAgEzKDABHSYSBAEUHyAeEhAEASocFgQBODMBLUlJFTUsGBMoJRUTBAEoPSUYEyglFgQBIBUbGBQcFQQBNiwZHBQXJxQlJSMPGgggCAQBHBsEATAsAgEqcGFja2FnZTpjb21waWxlci9zcmMvdXRpbC9pbmRlbnRhdGlvbi5kYXJ0I3Nka3Jvb3Q6L3BrZy9rZXJuZWwvbGliL2tlcm5lbC5kYXJ0ikAvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIENvbnZlbnRpb25zIGZvciBwYXRoczoKLy8vCi8vLyAtIFVzZSB0aGUgW1VyaV0gY2xhc3MgZm9yIHBhdGhzIHRoYXQgbWF5IGhhdmUgdGhlIGBmaWxlYCwgYGRhcnRgIG9yCi8vLyAgIGBwYWNrYWdlYCBzY2hlbWUuICBOZXZlciB1c2UgW1VyaV0gZm9yIHJlbGF0aXZlIHBhdGhzLgovLy8gLSBVc2UgW1N0cmluZ11zIGZvciBhbGwgZmlsZW5hbWVzIGFuZCBwYXRocyB0aGF0IGhhdmUgbm8gc2NoZW1lIHByZWZpeC4KLy8vIC0gTmV2ZXIgdHJhbnNsYXRlIGEgYGRhcnQ6YCBvciBgcGFja2FnZTpgIFVSSSBpbnRvIGEgYGZpbGU6YCBVUkksIGluc3RlYWQKLy8vICAgdHJhbnNsYXRlIGl0IHRvIGEgW1N0cmluZ10gaWYgdGhlIGZpbGUgc3lzdGVtIHBhdGggaXMgbmVlZGVkLgovLy8gLSBPbmx5IHVzZSBbRmlsZV0gZnJvbSBkYXJ0OmlvIGF0IHRoZSBsYXN0IG1vbWVudCB3aGVuIGl0IGlzIG5lZWRlZC4KLy8vCmxpYnJhcnkga2VybmVsOwoKaW1wb3J0ICdhc3QuZGFydCc7CmltcG9ydCAnYmluYXJ5L2FzdF90b19iaW5hcnkuZGFydCc7CmltcG9ydCAnYmluYXJ5L2FzdF9mcm9tX2JpbmFyeS5kYXJ0JzsKaW1wb3J0ICdkYXJ0OmFzeW5jJzsKaW1wb3J0ICdkYXJ0OmlvJzsKaW1wb3J0ICd0ZXh0L2FzdF90b190ZXh0LmRhcnQnOwoKZXhwb3J0ICdhc3QuZGFydCc7CgpDb21wb25lbnQgbG9hZENvbXBvbmVudEZyb21CaW5hcnkoU3RyaW5nIHBhdGgsIFtDb21wb25lbnQgY29tcG9uZW50XSkgewogIExpc3Q8aW50PiBieXRlcyA9IG5ldyBGaWxlKHBhdGgpLnJlYWRBc0J5dGVzU3luYygpOwogIHJldHVybiBsb2FkQ29tcG9uZW50RnJvbUJ5dGVzKGJ5dGVzLCBjb21wb25lbnQpOwp9CgpDb21wb25lbnQgbG9hZENvbXBvbmVudEZyb21CeXRlcyhMaXN0PGludD4gYnl0ZXMsIFtDb21wb25lbnQgY29tcG9uZW50XSkgewogIGNvbXBvbmVudCA/Pz0gbmV3IENvbXBvbmVudCgpOwogIG5ldyBCaW5hcnlCdWlsZGVyKGJ5dGVzKS5yZWFkQ29tcG9uZW50KGNvbXBvbmVudCk7CiAgcmV0dXJuIGNvbXBvbmVudDsKfQoKQ29tcG9uZW50IGxvYWRDb21wb25lbnRTb3VyY2VGcm9tQnl0ZXMoTGlzdDxpbnQ+IGJ5dGVzLCBbQ29tcG9uZW50IGNvbXBvbmVudF0pIHsKICBjb21wb25lbnQgPz89IG5ldyBDb21wb25lbnQoKTsKICBuZXcgQmluYXJ5QnVpbGRlcihieXRlcykucmVhZENvbXBvbmVudFNvdXJjZShjb21wb25lbnQpOwogIHJldHVybiBjb21wb25lbnQ7Cn0KCkZ1dHVyZSB3cml0ZUNvbXBvbmVudFRvQmluYXJ5KENvbXBvbmVudCBjb21wb25lbnQsIFN0cmluZyBwYXRoKSB7CiAgdmFyIHNpbms7CiAgaWYgKHBhdGggPT0gJ251bGwnIHx8IHBhdGggPT0gJ3N0ZG91dCcpIHsKICAgIHNpbmsgPSBzdGRvdXQubm9uQmxvY2tpbmc7CiAgfSBlbHNlIHsKICAgIHNpbmsgPSBuZXcgRmlsZShwYXRoKS5vcGVuV3JpdGUoKTsKICB9CgogIHZhciBmdXR1cmU7CiAgdHJ5IHsKICAgIG5ldyBCaW5hcnlQcmludGVyKHNpbmspLndyaXRlQ29tcG9uZW50RmlsZShjb21wb25lbnQpOwogIH0gZmluYWxseSB7CiAgICBpZiAoc2luayA9PSBzdGRvdXQubm9uQmxvY2tpbmcpIHsKICAgICAgZnV0dXJlID0gc2luay5mbHVzaCgpOwogICAgfSBlbHNlIHsKICAgICAgZnV0dXJlID0gc2luay5jbG9zZSgpOwogICAgfQogIH0KCiAgcmV0dXJuIGZ1dHVyZTsKfQoKdm9pZCB3cml0ZUxpYnJhcnlUb1RleHQoTGlicmFyeSBsaWJyYXJ5LCB7U3RyaW5nIHBhdGh9KSB7CiAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICBuZXcgUHJpbnRlcihidWZmZXIpLndyaXRlTGlicmFyeUZpbGUobGlicmFyeSk7CiAgaWYgKHBhdGggPT0gbnVsbCkgewogICAgcHJpbnQoYnVmZmVyKTsKICB9IGVsc2UgewogICAgbmV3IEZpbGUocGF0aCkud3JpdGVBc1N0cmluZ1N5bmMoJyRidWZmZXInKTsKICB9Cn0KCnZvaWQgd3JpdGVDb21wb25lbnRUb1RleHQoQ29tcG9uZW50IGNvbXBvbmVudCwKICAgIHtTdHJpbmcgcGF0aCwKICAgIGJvb2wgc2hvd0V4dGVybmFsOiBmYWxzZSwKICAgIGJvb2wgc2hvd09mZnNldHM6IGZhbHNlLAogICAgYm9vbCBzaG93TWV0YWRhdGE6IGZhbHNlfSkgewogIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgbmV3IFByaW50ZXIoYnVmZmVyLAogICAgICAgICAgc2hvd0V4dGVybmFsOiBzaG93RXh0ZXJuYWwsCiAgICAgICAgICBzaG93T2Zmc2V0czogc2hvd09mZnNldHMsCiAgICAgICAgICBzaG93TWV0YWRhdGE6IHNob3dNZXRhZGF0YSkKICAgICAgLndyaXRlQ29tcG9uZW50RmlsZShjb21wb25lbnQpOwogIGlmIChwYXRoID09IG51bGwpIHsKICAgIHByaW50KGJ1ZmZlcik7CiAgfSBlbHNlIHsKICAgIG5ldyBGaWxlKHBhdGgpLndyaXRlQXNTdHJpbmdTeW5jKCckYnVmZmVyJyk7CiAgfQp9ClwATk48ARsESD1MTkRJBBABEyQmFRIgARMBSDYzAgFLITUUAgFRITsUAgFCDCwfCycEAQ4IOw4mHQ0dBgQBEQIBOiwxFhMLMQQCAS8SHh0hLBYmJCYmFhMLMQQCARpwYWNrYWdlOmtlcm5lbC9rZXJuZWwuZGFydCBzZGtyb290Oi9wa2cva2VybmVsL2xpYi9hc3QuZGFydMADIn0vLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgV0hFTiBDSEFOR0lORyBUSElTIEZJTEU6Ci8vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLy8KLy8vIElmIHlvdSBhcmUgYWRkaW5nL3JlbW92aW5nL21vZGlmeWluZyBmaWVsZHMvY2xhc3NlcyBvZiB0aGUgQVNULCB5b3UgbXVzdAovLy8gYWxzbyB1cGRhdGUgdGhlIGZvbGxvd2luZyBmaWxlczoKLy8vCi8vLyAgIC0gYmluYXJ5L2FzdF90b19iaW5hcnkuZGFydAovLy8gICAtIGJpbmFyeS9hc3RfZnJvbV9iaW5hcnkuZGFydAovLy8gICAtIHRleHQvYXN0X3RvX3RleHQuZGFydAovLy8gICAtIGNsb25lLmRhcnQKLy8vICAgLSBiaW5hcnkubWQKLy8vICAgLSB0eXBlX2NoZWNrZXIuZGFydCAoaWYgcmVsZXZhbnQpCi8vLwovLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgRVJST1IgSEFORExJTkcKLy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vLwovLy8gQXMgYSBydWxlIG9mIHRodW1iLCBlcnJvcnMgdGhhdCBjYW4gYmUgZGV0ZWN0ZWQgc3RhdGljYWxseSBhcmUgaGFuZGxlZCBieQovLy8gdGhlIGZyb250ZW5kLCB0eXBpY2FsbHkgYnkgdHJhbnNsYXRpbmcgdGhlIGVycm9uZW91cyBjb2RlIGludG8gYSAndGhyb3cnIG9yCi8vLyBhIGNhbGwgdG8gJ25vU3VjaE1ldGhvZCcuCi8vLwovLy8gRm9yIGV4YW1wbGUsIHRoZXJlIGFyZSBubyBhcml0eSBtaXNtYXRjaGVzIGluIHN0YXRpYyBpbnZvY2F0aW9ucywgYW5kCi8vLyB0aGVyZSBhcmUgbm8gZGlyZWN0IGludm9jYXRpb25zIG9mIGEgY29uc3RydWN0b3Igb24gYSBhYnN0cmFjdCBjbGFzcy4KLy8vCi8vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBTVEFUSUMgdnMgVE9QLUxFVkVMCi8vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLy8KLy8vIFRoZSB0ZXJtIGBzdGF0aWNgIGluY2x1ZGVzIGJvdGggc3RhdGljIGNsYXNzIG1lbWJlcnMgYW5kIHRvcC1sZXZlbCBtZW1iZXJzLgovLy8KLy8vICJTdGF0aWMgY2xhc3MgbWVtYmVyIiBpcyB0aGUgcHJlZmVycmVkIHRlcm0gZm9yIG5vbi10b3AgbGV2ZWwgc3RhdGljcy4KLy8vCi8vLyBTdGF0aWMgY2xhc3MgbWVtYmVycyBhcmUgbm90IGxpZnRlZCB0byB0aGUgbGlicmFyeSBsZXZlbCBiZWNhdXNlIG1pcnJvcnMKLy8vIGFuZCBzdGFjayB0cmFjZXMgY2FuIG9ic2VydmUgdGhhdCB0aGV5IGFyZSBjbGFzcyBtZW1iZXJzLgovLy8KLy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST0NFRFVSRVMKLy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vLwovLy8gIlByb2NlZHVyZSIgaXMgYW4gdW1icmVsbGEgdGVybSBmb3IgbWV0aG9kLCBnZXR0ZXIsIHNldHRlciwgaW5kZXgtZ2V0dGVyLAovLy8gaW5kZXgtc2V0dGVyLCBvcGVyYXRvciBvdmVybG9hZGVyLCBhbmQgZmFjdG9yeSBjb25zdHJ1Y3Rvci4KLy8vCi8vLyBHZW5lcmF0aXZlIGNvbnN0cnVjdG9ycywgZmllbGQgaW5pdGlhbGl6ZXJzLCBsb2NhbCBmdW5jdGlvbnMgYXJlIE5PVAovLy8gcHJvY2VkdXJlcy4KLy8vCi8vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBTlNGT1JNQVRJT05TCi8vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLy8KLy8vIEFTVCB0cmFuc2Zvcm1hdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCB1c2luZyBbVHJlZU5vZGUucmVwbGFjZVdpdGhdIG9yIHRoZQovLy8gW1RyYW5zZm9ybWVyXSB2aXNpdG9yIGNsYXNzLgovLy8KLy8vIFVzZSBbVHJhbnNmb3JtZXJdIGZvciBidWxrIHRyYW5zZm9ybWF0aW9ucyB0aGF0IGFyZSBsaWtlbHkgdG8gdHJhbnNmb3JtIGxvdHMKLy8vIG9mIG5vZGVzLCBhbmQgW1RyZWVOb2RlLnJlcGxhY2VXaXRoXSBmb3Igc3BhcnNlIHRyYW5zZm9ybWF0aW9ucyB0aGF0IG11dGF0ZQovLy8gcmVsYXRpdmVseSBmZXcgbm9kZXMuICBPciB1c2Ugd2hpY2hldmVyIGlzIG1vcmUgY29udmVuaWVudC4KLy8vCi8vLyBUaGUgQVNUIGNhbiBhbHNvIGJlIG11dGF0ZWQgYnkgZGlyZWN0IGZpZWxkIG1hbmlwdWxhdGlvbiwgYnV0IHRoZSB1c2VyIHRoZW4KLy8vIGhhcyB0byB1cGRhdGUgcGFyZW50IHBvaW50ZXJzIG1hbnVhbGx5LgovLy8KbGlicmFyeSBrZXJuZWwuYXN0OwoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnIHNob3cgdXRmODsKCmltcG9ydCAndmlzaXRvci5kYXJ0JzsKZXhwb3J0ICd2aXNpdG9yLmRhcnQnOwoKaW1wb3J0ICdjYW5vbmljYWxfbmFtZS5kYXJ0JyBzaG93IENhbm9uaWNhbE5hbWU7CmV4cG9ydCAnY2Fub25pY2FsX25hbWUuZGFydCcgc2hvdyBDYW5vbmljYWxOYW1lOwoKaW1wb3J0ICd0cmFuc2Zvcm1hdGlvbnMvZmxhZ3MuZGFydCc7CmltcG9ydCAndGV4dC9hc3RfdG9fdGV4dC5kYXJ0JzsKaW1wb3J0ICd0eXBlX2FsZ2VicmEuZGFydCc7CmltcG9ydCAndHlwZV9lbnZpcm9ubWVudC5kYXJ0JzsKCi8vLyBBbnkgdHlwZSBvZiBub2RlIGluIHRoZSBJUi4KYWJzdHJhY3QgY2xhc3MgTm9kZSB7CiAgY29uc3QgTm9kZSgpOwoKICBhY2NlcHQoVmlzaXRvciB2KTsKICB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KTsKCiAgLy8vIFJldHVybnMgdGhlIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBub2RlIGZvciB1c2UgaW4gZGVidWdnaW5nLgogIC8vLwogIC8vLyBbdG9TdHJpbmddIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGRlYnVnZ2luZyBhbmQgc2hvcnQtcnVubmluZyB0ZXN0IHRvb2xzCiAgLy8vIGFzIGl0IGNhbiBjYXVzZSBzZXJpb3VzIG1lbW9yeSBsZWFrcy4KICAvLy8KICAvLy8gU3ludGhldGljIG5hbWVzIGFyZSBjYWNoZWQgZ2xvYmFsbHkgdG8gcmV0YWluIGNvbnNpc3RlbmN5IGFjcm9zcyBkaWZmZXJlbnQKICAvLy8gW3RvU3RyaW5nXSBjYWxscyAoaGVuY2UgdGhlIG1lbW9yeSBsZWFrKS4KICAvLy8KICAvLy8gTm9kZXMgdGhhdCBhcmUgbmFtZWQsIHN1Y2ggYXMgW0NsYXNzXSBhbmQgW01lbWJlcl0sIHJldHVybiB0aGVpcgogIC8vLyAocG9zc2libHkgc3ludGhlc2l6ZWQpIG5hbWUsIHdoZXJlYXMgb3RoZXIgQVNUIG5vZGVzIHJldHVybiB0aGUgY29tcGxldGUKICAvLy8gdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGVpciBzdWJ0cmVlLgogIFN0cmluZyB0b1N0cmluZygpID0+IGRlYnVnTm9kZVRvU3RyaW5nKHRoaXMpOwp9CgovLy8gQSBtdXRhYmxlIEFTVCBub2RlIHdpdGggYSBwYXJlbnQgcG9pbnRlci4KLy8vCi8vLyBUaGlzIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gW05hbWVdIGFuZCBbRGFydFR5cGVdIG5vZGVzLgphYnN0cmFjdCBjbGFzcyBUcmVlTm9kZSBleHRlbmRzIE5vZGUgewogIHN0YXRpYyBpbnQgX2hhc2hDb3VudGVyID0gMDsKICBmaW5hbCBpbnQgaGFzaENvZGUgPSBfaGFzaENvdW50ZXIgPSAoX2hhc2hDb3VudGVyICsgMSkgJiAweDNmZmZmZmZmOwogIHN0YXRpYyBjb25zdCBpbnQgbm9PZmZzZXQgPSAtMTsKCiAgVHJlZU5vZGUgcGFyZW50OwoKICAvLy8gT2Zmc2V0IGluIHRoZSBzb3VyY2UgZmlsZSBpdCBjb21lcyBmcm9tLgogIC8vLwogIC8vLyBWYWxpZCB2YWx1ZXMgYXJlIGZyb20gMCBhbmQgdXAsIG9yIC0xIChbbm9PZmZzZXRdKSBpZiB0aGUgZmlsZSBvZmZzZXQgaXMKICAvLy8gbm90IGF2YWlsYWJsZSAodGhpcyBpcyB0aGUgZGVmYXVsdCBpZiBub25lIGlzIHNwZWNpZmljYWxseSBzZXQpLgogIGludCBmaWxlT2Zmc2V0ID0gbm9PZmZzZXQ7CgogIGFjY2VwdChUcmVlVmlzaXRvciB2KTsKICB2aXNpdENoaWxkcmVuKFZpc2l0b3Igdik7CiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdik7CgogIC8vLyBSZXBsYWNlcyBbY2hpbGRdIHdpdGggW3JlcGxhY2VtZW50XS4KICAvLy8KICAvLy8gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgQVNUIHJlbWFpbnMgYSB0cmVlLiAgSW4KICAvLy8gcGFydGljdWxhciwgW3JlcGxhY2VtZW50XSBzaG91bGQgYmUgYW4gb3JwaGFuIG9yIGJlIHBhcnQgb2YgYW4gb3JwaGFuZWQKICAvLy8gc3VidHJlZS4KICAvLy8KICAvLy8gSGFzIG5vIGVmZmVjdCBpZiBbY2hpbGRdIGlzIG5vdCBhY3R1YWxseSBhIGNoaWxkIG9mIHRoaXMgbm9kZS4KICAvLy8KICAvLy8gSWYgW3JlcGxhY2VtZW50XSBpcyBgbnVsbGAsIHRoaXMgd2lsbCBbcmVtb3ZlXSB0aGUgW2NoaWxkXSBub2RlLgogIHZvaWQgcmVwbGFjZUNoaWxkKFRyZWVOb2RlIGNoaWxkLCBUcmVlTm9kZSByZXBsYWNlbWVudCkgewogICAgdHJhbnNmb3JtQ2hpbGRyZW4obmV3IF9DaGlsZFJlcGxhY2VyKGNoaWxkLCByZXBsYWNlbWVudCkpOwogIH0KCiAgLy8vIEluc2VydHMgYW5vdGhlciBub2RlIGluIHBsYWNlIG9mIHRoaXMgb25lLgogIC8vLwogIC8vLyBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBBU1QgcmVtYWlucyBhIHRyZWUuICBJbgogIC8vLyBwYXJ0aWN1bGFyLCBbcmVwbGFjZW1lbnRdIHNob3VsZCBiZSBhbiBvcnBoYW4gb3IgYmUgcGFydCBvZiBhbiBvcnBoYW5lZAogIC8vLyBzdWJ0cmVlLgogIC8vLwogIC8vLyBJZiBbcmVwbGFjZW1lbnRdIGlzIGBudWxsYCwgdGhpcyB3aWxsIFtyZW1vdmVdIHRoZSBub2RlLgogIHZvaWQgcmVwbGFjZVdpdGgoVHJlZU5vZGUgcmVwbGFjZW1lbnQpIHsKICAgIHBhcmVudC5yZXBsYWNlQ2hpbGQodGhpcywgcmVwbGFjZW1lbnQpOwogICAgcGFyZW50ID0gbnVsbDsKICB9CgogIC8vLyBSZW1vdmVzIHRoaXMgbm9kZSBmcm9tIHRoZSBbTGlzdF0gaXQgaXMgY3VycmVudGx5IHN0b3JlZCBpbiwgb3IgYXNzaWducwogIC8vLyBgbnVsbGAgdG8gdGhlIGZpZWxkIG9uIHRoZSBwYXJlbnQgY3VycmVudGx5IHBvaW50aW5nIHRvIHRoZSBub2RlLgogIC8vLwogIC8vLyBIYXMgbm8gZWZmZWN0IGlmIHRoZSBub2RlIGlzIG9ycGhhbmVkIG9yIGlmIHRoZSBwYXJlbnQgcG9pbnRlciBpcyBzdGFsZS4KICB2b2lkIHJlbW92ZSgpIHsKICAgIHBhcmVudD8ucmVwbGFjZUNoaWxkKHRoaXMsIG51bGwpOwogICAgcGFyZW50ID0gbnVsbDsKICB9CgogIENvbXBvbmVudCBnZXQgZW5jbG9zaW5nQ29tcG9uZW50ID0+IHBhcmVudD8uZW5jbG9zaW5nQ29tcG9uZW50OwoKICAvLy8gUmV0dXJucyB0aGUgYmVzdCBrbm93biBzb3VyY2UgbG9jYXRpb24gb2YgdGhlIGdpdmVuIEFTVCBub2RlLCBvciBgbnVsbGAgaWYKICAvLy8gdGhlIG5vZGUgaXMgb3JwaGFuZWQuCiAgLy8vCiAgLy8vIFRoaXMgZ2V0dGVyIGlzIGludGVuZGVkIGZvciBkaWFnbm9zdGljcyBhbmQgZGVidWdnaW5nLCBhbmQgc2hvdWxkIGJlCiAgLy8vIGF2b2lkZWQgaW4gcHJvZHVjdGlvbiBjb2RlLgogIExvY2F0aW9uIGdldCBsb2NhdGlvbiB7CiAgICBpZiAoZmlsZU9mZnNldCA9PSBub09mZnNldCkgcmV0dXJuIHBhcmVudD8ubG9jYXRpb247CiAgICByZXR1cm4gX2dldExvY2F0aW9uSW5FbmNsb3NpbmdGaWxlKGZpbGVPZmZzZXQpOwogIH0KCiAgTG9jYXRpb24gX2dldExvY2F0aW9uSW5FbmNsb3NpbmdGaWxlKGludCBvZmZzZXQpIHsKICAgIHJldHVybiBwYXJlbnQ/Ll9nZXRMb2NhdGlvbkluRW5jbG9zaW5nRmlsZShvZmZzZXQpOwogIH0KfQoKLy8vIEFuIEFTVCBub2RlIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgYnkgb3RoZXIgbm9kZXMuCi8vLwovLy8gVGhlcmUgaXMgYSBzaW5nbGUgW3JlZmVyZW5jZV0gYmVsb25naW5nIHRvIHRoaXMgbm9kZSwgcHJvdmlkaW5nIGEgbGV2ZWwgb2YKLy8vIGluZGlyZWN0aW9uIHRoYXQgaXMgbmVlZGVkIGR1cmluZyBzZXJpYWxpemF0aW9uLgphYnN0cmFjdCBjbGFzcyBOYW1lZE5vZGUgZXh0ZW5kcyBUcmVlTm9kZSB7CiAgZmluYWwgUmVmZXJlbmNlIHJlZmVyZW5jZTsKCiAgTmFtZWROb2RlKFJlZmVyZW5jZSByZWZlcmVuY2UpCiAgICAgIDogdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2UgPz8gbmV3IFJlZmVyZW5jZSgpIHsKICAgIHRoaXMucmVmZXJlbmNlLm5vZGUgPSB0aGlzOwogIH0KCiAgQ2Fub25pY2FsTmFtZSBnZXQgY2Fub25pY2FsTmFtZSA9PiByZWZlcmVuY2U/LmNhbm9uaWNhbE5hbWU7Cn0KCmFic3RyYWN0IGNsYXNzIEZpbGVVcmlOb2RlIGV4dGVuZHMgVHJlZU5vZGUgewogIC8vLyBUaGUgVVJJIG9mIHRoZSBzb3VyY2UgZmlsZSB0aGlzIG5vZGUgd2FzIGxvYWRlZCBmcm9tLgogIFVyaSBnZXQgZmlsZVVyaTsKfQoKYWJzdHJhY3QgY2xhc3MgQW5ub3RhdGFibGUgewogIExpc3Q8RXhwcmVzc2lvbj4gZ2V0IGFubm90YXRpb25zOwogIHZvaWQgYWRkQW5ub3RhdGlvbihFeHByZXNzaW9uIG5vZGUpOwp9CgovLy8gSW5kaXJlY3Rpb24gYmV0d2VlbiBhIHJlZmVyZW5jZSBhbmQgaXRzIGRlZmluaXRpb24uCi8vLwovLy8gVGhlcmUgaXMgb25seSBvbmUgcmVmZXJlbmNlIG9iamVjdCBwZXIgW05hbWVkTm9kZV0uCmNsYXNzIFJlZmVyZW5jZSB7CiAgQ2Fub25pY2FsTmFtZSBjYW5vbmljYWxOYW1lOwoKICBOYW1lZE5vZGUgbm9kZTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgaWYgKGNhbm9uaWNhbE5hbWUgIT0gbnVsbCkgewogICAgICByZXR1cm4gJ1JlZmVyZW5jZSB0byAkY2Fub25pY2FsTmFtZSc7CiAgICB9CiAgICBpZiAobm9kZSAhPSBudWxsKSB7CiAgICAgIHJldHVybiAnUmVmZXJlbmNlIHRvICRub2RlJzsKICAgIH0KICAgIHJldHVybiAnVW5ib3VuZCByZWZlcmVuY2UnOwogIH0KCiAgTGlicmFyeSBnZXQgYXNMaWJyYXJ5IHsKICAgIGlmIChub2RlID09IG51bGwpIHsKICAgICAgdGhyb3cgJyR0aGlzIGlzIG5vdCBib3VuZCB0byBhbiBBU1Qgbm9kZS4gQSBsaWJyYXJ5IHdhcyBleHBlY3RlZCc7CiAgICB9CiAgICByZXR1cm4gbm9kZSBhcyBMaWJyYXJ5OwogIH0KCiAgQ2xhc3MgZ2V0IGFzQ2xhc3MgewogICAgaWYgKG5vZGUgPT0gbnVsbCkgewogICAgICB0aHJvdyAnJHRoaXMgaXMgbm90IGJvdW5kIHRvIGFuIEFTVCBub2RlLiBBIGNsYXNzIHdhcyBleHBlY3RlZCc7CiAgICB9CiAgICByZXR1cm4gbm9kZSBhcyBDbGFzczsKICB9CgogIE1lbWJlciBnZXQgYXNNZW1iZXIgewogICAgaWYgKG5vZGUgPT0gbnVsbCkgewogICAgICB0aHJvdyAnJHRoaXMgaXMgbm90IGJvdW5kIHRvIGFuIEFTVCBub2RlLiBBIG1lbWJlciB3YXMgZXhwZWN0ZWQnOwogICAgfQogICAgcmV0dXJuIG5vZGUgYXMgTWVtYmVyOwogIH0KCiAgRmllbGQgZ2V0IGFzRmllbGQgewogICAgaWYgKG5vZGUgPT0gbnVsbCkgewogICAgICB0aHJvdyAnJHRoaXMgaXMgbm90IGJvdW5kIHRvIGFuIEFTVCBub2RlLiBBIGZpZWxkIHdhcyBleHBlY3RlZCc7CiAgICB9CiAgICByZXR1cm4gbm9kZSBhcyBGaWVsZDsKICB9CgogIENvbnN0cnVjdG9yIGdldCBhc0NvbnN0cnVjdG9yIHsKICAgIGlmIChub2RlID09IG51bGwpIHsKICAgICAgdGhyb3cgJyR0aGlzIGlzIG5vdCBib3VuZCB0byBhbiBBU1Qgbm9kZS4gQSBjb25zdHJ1Y3RvciB3YXMgZXhwZWN0ZWQnOwogICAgfQogICAgcmV0dXJuIG5vZGUgYXMgQ29uc3RydWN0b3I7CiAgfQoKICBQcm9jZWR1cmUgZ2V0IGFzUHJvY2VkdXJlIHsKICAgIGlmIChub2RlID09IG51bGwpIHsKICAgICAgdGhyb3cgJyR0aGlzIGlzIG5vdCBib3VuZCB0byBhbiBBU1Qgbm9kZS4gQSBwcm9jZWR1cmUgd2FzIGV4cGVjdGVkJzsKICAgIH0KICAgIHJldHVybiBub2RlIGFzIFByb2NlZHVyZTsKICB9CgogIFR5cGVkZWYgZ2V0IGFzVHlwZWRlZiB7CiAgICBpZiAobm9kZSA9PSBudWxsKSB7CiAgICAgIHRocm93ICckdGhpcyBpcyBub3QgYm91bmQgdG8gYW4gQVNUIG5vZGUuIEEgdHlwZWRlZiB3YXMgZXhwZWN0ZWQnOwogICAgfQogICAgcmV0dXJuIG5vZGUgYXMgVHlwZWRlZjsKICB9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyAgICAgICAgICAgICAgICAgICAgICBMSUJSQVJJRVMgYW5kIENMQVNTRVMKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpjbGFzcyBMaWJyYXJ5IGV4dGVuZHMgTmFtZWROb2RlCiAgICBpbXBsZW1lbnRzIEFubm90YXRhYmxlLCBDb21wYXJhYmxlPExpYnJhcnk+LCBGaWxlVXJpTm9kZSB7CiAgLy8vIEFuIGltcG9ydCBwYXRoIHRvIHRoaXMgbGlicmFyeS4KICAvLy8KICAvLy8gVGhlIFtVcmldIHNob3VsZCBoYXZlIHRoZSBgZGFydGAsIGBwYWNrYWdlYCwgYGFwcGAsIG9yIGBmaWxlYCBzY2hlbWUuCiAgLy8vCiAgLy8vIElmIHRoZSBVUkkgaGFzIHRoZSBgYXBwYCBzY2hlbWUsIGl0IGlzIHJlbGF0aXZlIHRvIHRoZSBhcHBsaWNhdGlvbiByb290LgogIFVyaSBpbXBvcnRVcmk7CgogIC8vLyBUaGUgVVJJIG9mIHRoZSBzb3VyY2UgZmlsZSB0aGlzIGxpYnJhcnkgd2FzIGxvYWRlZCBmcm9tLgogIFVyaSBmaWxlVXJpOwoKICAvLyBUT0RPKGplbnNqKTogRG8gd2UgaGF2ZSBhIGJldHRlciBvcHRpb24gdGhhbiB0aGlzPwogIHN0YXRpYyBpbnQgZGVmYXVsdExhbmd1YWdlVmVyc2lvbk1ham9yID0gMjsKICBzdGF0aWMgaW50IGRlZmF1bHRMYW5ndWFnZVZlcnNpb25NaW5vciA9IDY7CgogIGludCBfbGFuZ3VhZ2VWZXJzaW9uTWFqb3I7CiAgaW50IF9sYW5ndWFnZVZlcnNpb25NaW5vcjsKICBpbnQgZ2V0IGxhbmd1YWdlVmVyc2lvbk1ham9yID0+CiAgICAgIF9sYW5ndWFnZVZlcnNpb25NYWpvciA/PyBkZWZhdWx0TGFuZ3VhZ2VWZXJzaW9uTWFqb3I7CiAgaW50IGdldCBsYW5ndWFnZVZlcnNpb25NaW5vciA9PgogICAgICBfbGFuZ3VhZ2VWZXJzaW9uTWlub3IgPz8gZGVmYXVsdExhbmd1YWdlVmVyc2lvbk1pbm9yOwogIHZvaWQgc2V0TGFuZ3VhZ2VWZXJzaW9uKGludCBsYW5ndWFnZVZlcnNpb25NYWpvciwgaW50IGxhbmd1YWdlVmVyc2lvbk1pbm9yKSB7CiAgICBpZiAobGFuZ3VhZ2VWZXJzaW9uTWFqb3IgPT0gbnVsbCB8fCBsYW5ndWFnZVZlcnNpb25NaW5vciA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJUcnlpbmcgdG8gc2V0IGxhbmdhdWdlIHZlcnNpb24gJ251bGwnIik7CiAgICB9CiAgICBfbGFuZ3VhZ2VWZXJzaW9uTWFqb3IgPSBsYW5ndWFnZVZlcnNpb25NYWpvcjsKICAgIF9sYW5ndWFnZVZlcnNpb25NaW5vciA9IGxhbmd1YWdlVmVyc2lvbk1pbm9yOwogIH0KCiAgc3RhdGljIGNvbnN0IGludCBFeHRlcm5hbEZsYWcgPSAxIDw8IDA7CiAgc3RhdGljIGNvbnN0IGludCBTeW50aGV0aWNGbGFnID0gMSA8PCAxOwoKICBpbnQgZmxhZ3MgPSAwOwoKICAvLy8gSWYgdHJ1ZSwgdGhlIGxpYnJhcnkgaXMgcGFydCBvZiBhbm90aGVyIGJ1aWxkIHVuaXQgYW5kIGl0cyBjb250ZW50cwogIC8vLyBhcmUgb25seSBwYXJ0aWFsbHkgbG9hZGVkLgogIC8vLwogIC8vLyBDbGFzc2VzIG9mIGFuIGV4dGVybmFsIGxpYnJhcnkgYXJlIGxvYWRlZCBhdCBvbmUgb2YgdGhlIFtDbGFzc0xldmVsXXMKICAvLy8gb3RoZXIgdGhhbiBbQ2xhc3NMZXZlbC5Cb2R5XS4gIE1lbWJlcnMgaW4gYW4gZXh0ZXJuYWwgbGlicmFyeSBoYXZlIG5vCiAgLy8vIGJvZHksIGJ1dCBoYXZlIHRoZWlyIHR5cGVkIGludGVyZmFjZSBwcmVzZW50LgogIC8vLwogIC8vLyBJZiB0aGUgbGlicmFyeSBpcyBub24tZXh0ZXJuYWwsIHRoZW4gaXRzIGNsYXNzZXMgYXJlIGF0IFtDbGFzc0xldmVsLkJvZHldCiAgLy8vIGFuZCBhbGwgbWVtYmVycyBhcmUgbG9hZGVkLgogIGJvb2wgZ2V0IGlzRXh0ZXJuYWwgPT4gKGZsYWdzICYgRXh0ZXJuYWxGbGFnKSAhPSAwOwogIHZvaWQgc2V0IGlzRXh0ZXJuYWwoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEV4dGVybmFsRmxhZykgOiAoZmxhZ3MgJiB+RXh0ZXJuYWxGbGFnKTsKICB9CgogIC8vLyBJZiB0cnVlLCB0aGUgbGlicmFyeSBpcyBzeW50aGV0aWMsIGZvciBpbnN0YW5jZSBsaWJyYXJ5IHRoYXQgZG9lc24ndAogIC8vLyByZXByZXNlbnRzIGFuIGFjdHVhbCBmaWxlIGFuZCBpcyBjcmVhdGVkIGFzIHRoZSByZXN1bHQgb2YgZXJyb3IgcmVjb3ZlcnkuCiAgYm9vbCBnZXQgaXNTeW50aGV0aWMgPT4gZmxhZ3MgJiBTeW50aGV0aWNGbGFnICE9IDA7CiAgdm9pZCBzZXQgaXNTeW50aGV0aWMoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IFN5bnRoZXRpY0ZsYWcpIDogKGZsYWdzICYgflN5bnRoZXRpY0ZsYWcpOwogIH0KCiAgU3RyaW5nIG5hbWU7CgogIC8vLyBQcm9ibGVtcyBpbiB0aGlzIFtMaWJyYXJ5XSBlbmNvZGVkIGFzIGpzb24gb2JqZWN0cy4KICAvLy8KICAvLy8gTm90ZSB0aGF0IHRoaXMgZmllbGQgY2FuIGJlIG51bGwsIGFuZCBieSBjb252ZW50aW9uIHNob3VsZCBiZSBudWxsIGlmIHRoZQogIC8vLyBsaXN0IGlzIGVtcHR5LgogIExpc3Q8U3RyaW5nPiBwcm9ibGVtc0FzSnNvbjsKCiAgZmluYWwgTGlzdDxFeHByZXNzaW9uPiBhbm5vdGF0aW9uczsKCiAgZmluYWwgTGlzdDxMaWJyYXJ5RGVwZW5kZW5jeT4gZGVwZW5kZW5jaWVzOwoKICAvLy8gUmVmZXJlbmNlcyB0byBub2RlcyBleHBvcnRlZCBieSBgZXhwb3J0YCBkZWNsYXJhdGlvbnMgdGhhdDoKICAvLy8gLSBhcmVuJ3QgYW1iaWd1b3VzLCBvcgogIC8vLyAtIGFyZW4ndCBoaWRkZW4gYnkgbG9jYWwgZGVjbGFyYXRpb25zLgogIGZpbmFsIExpc3Q8UmVmZXJlbmNlPiBhZGRpdGlvbmFsRXhwb3J0cyA9IDxSZWZlcmVuY2U+W107CgogIEBpbmZvcm1hdGl2ZQogIGZpbmFsIExpc3Q8TGlicmFyeVBhcnQ+IHBhcnRzOwoKICBmaW5hbCBMaXN0PFR5cGVkZWY+IHR5cGVkZWZzOwogIGZpbmFsIExpc3Q8Q2xhc3M+IGNsYXNzZXM7CiAgZmluYWwgTGlzdDxFeHRlbnNpb24+IGV4dGVuc2lvbnM7CiAgZmluYWwgTGlzdDxQcm9jZWR1cmU+IHByb2NlZHVyZXM7CiAgZmluYWwgTGlzdDxGaWVsZD4gZmllbGRzOwoKICBMaWJyYXJ5KHRoaXMuaW1wb3J0VXJpLAogICAgICB7dGhpcy5uYW1lLAogICAgICBib29sIGlzRXh0ZXJuYWw6IGZhbHNlLAogICAgICBMaXN0PEV4cHJlc3Npb24+IGFubm90YXRpb25zLAogICAgICBMaXN0PExpYnJhcnlEZXBlbmRlbmN5PiBkZXBlbmRlbmNpZXMsCiAgICAgIExpc3Q8TGlicmFyeVBhcnQ+IHBhcnRzLAogICAgICBMaXN0PFR5cGVkZWY+IHR5cGVkZWZzLAogICAgICBMaXN0PENsYXNzPiBjbGFzc2VzLAogICAgICBMaXN0PEV4dGVuc2lvbj4gZXh0ZW5zaW9ucywKICAgICAgTGlzdDxQcm9jZWR1cmU+IHByb2NlZHVyZXMsCiAgICAgIExpc3Q8RmllbGQ+IGZpZWxkcywKICAgICAgdGhpcy5maWxlVXJpLAogICAgICBSZWZlcmVuY2UgcmVmZXJlbmNlfSkKICAgICAgOiB0aGlzLmFubm90YXRpb25zID0gYW5ub3RhdGlvbnMgPz8gPEV4cHJlc3Npb24+W10sCiAgICAgICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBkZXBlbmRlbmNpZXMgPz8gPExpYnJhcnlEZXBlbmRlbmN5PltdLAogICAgICAgIHRoaXMucGFydHMgPSBwYXJ0cyA/PyA8TGlicmFyeVBhcnQ+W10sCiAgICAgICAgdGhpcy50eXBlZGVmcyA9IHR5cGVkZWZzID8/IDxUeXBlZGVmPltdLAogICAgICAgIHRoaXMuY2xhc3NlcyA9IGNsYXNzZXMgPz8gPENsYXNzPltdLAogICAgICAgIHRoaXMuZXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnMgPz8gPEV4dGVuc2lvbj5bXSwKICAgICAgICB0aGlzLnByb2NlZHVyZXMgPSBwcm9jZWR1cmVzID8/IDxQcm9jZWR1cmU+W10sCiAgICAgICAgdGhpcy5maWVsZHMgPSBmaWVsZHMgPz8gPEZpZWxkPltdLAogICAgICAgIHN1cGVyKHJlZmVyZW5jZSkgewogICAgdGhpcy5pc0V4dGVybmFsID0gaXNFeHRlcm5hbDsKICAgIHNldFBhcmVudHModGhpcy5kZXBlbmRlbmNpZXMsIHRoaXMpOwogICAgc2V0UGFyZW50cyh0aGlzLnBhcnRzLCB0aGlzKTsKICAgIHNldFBhcmVudHModGhpcy50eXBlZGVmcywgdGhpcyk7CiAgICBzZXRQYXJlbnRzKHRoaXMuY2xhc3NlcywgdGhpcyk7CiAgICBzZXRQYXJlbnRzKHRoaXMuZXh0ZW5zaW9ucywgdGhpcyk7CiAgICBzZXRQYXJlbnRzKHRoaXMucHJvY2VkdXJlcywgdGhpcyk7CiAgICBzZXRQYXJlbnRzKHRoaXMuZmllbGRzLCB0aGlzKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSB0b3AtbGV2ZWwgZmllbGRzIGFuZCBwcm9jZWR1cmVzIGRlZmluZWQgaW4gdGhpcyBsaWJyYXJ5LgogIC8vLwogIC8vLyBUaGlzIGdldHRlciBpcyBmb3IgY29udmVuaWVuY2UsIG5vdCBlZmZpY2llbmN5LiAgQ29uc2lkZXIgbWFudWFsbHkKICAvLy8gaXRlcmF0aW5nIHRoZSBtZW1iZXJzIHRvIHNwZWVkIHVwIGNvZGUgaW4gcHJvZHVjdGlvbi4KICBJdGVyYWJsZTxNZW1iZXI+IGdldCBtZW1iZXJzID0+CiAgICAgIDxJdGVyYWJsZTxNZW1iZXI+PltmaWVsZHMsIHByb2NlZHVyZXNdLmV4cGFuZCgoeCkgPT4geCk7CgogIHZvaWQgYWRkTWVtYmVyKE1lbWJlciBtZW1iZXIpIHsKICAgIG1lbWJlci5wYXJlbnQgPSB0aGlzOwogICAgaWYgKG1lbWJlciBpcyBQcm9jZWR1cmUpIHsKICAgICAgcHJvY2VkdXJlcy5hZGQobWVtYmVyKTsKICAgIH0gZWxzZSBpZiAobWVtYmVyIGlzIEZpZWxkKSB7CiAgICAgIGZpZWxkcy5hZGQobWVtYmVyKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKG1lbWJlcik7CiAgICB9CiAgfQoKICB2b2lkIGFkZEFubm90YXRpb24oRXhwcmVzc2lvbiBub2RlKSB7CiAgICBub2RlLnBhcmVudCA9IHRoaXM7CiAgICBhbm5vdGF0aW9ucy5hZGQobm9kZSk7CiAgfQoKICB2b2lkIGFkZENsYXNzKENsYXNzIGNsYXNzXykgewogICAgY2xhc3NfLnBhcmVudCA9IHRoaXM7CiAgICBjbGFzc2VzLmFkZChjbGFzc18pOwogIH0KCiAgdm9pZCBhZGRFeHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbikgewogICAgZXh0ZW5zaW9uLnBhcmVudCA9IHRoaXM7CiAgICBleHRlbnNpb25zLmFkZChleHRlbnNpb24pOwogIH0KCiAgdm9pZCBhZGRGaWVsZChGaWVsZCBmaWVsZCkgewogICAgZmllbGQucGFyZW50ID0gdGhpczsKICAgIGZpZWxkcy5hZGQoZmllbGQpOwogIH0KCiAgdm9pZCBhZGRQcm9jZWR1cmUoUHJvY2VkdXJlIHByb2NlZHVyZSkgewogICAgcHJvY2VkdXJlLnBhcmVudCA9IHRoaXM7CiAgICBwcm9jZWR1cmVzLmFkZChwcm9jZWR1cmUpOwogIH0KCiAgdm9pZCBhZGRUeXBlZGVmKFR5cGVkZWYgdHlwZWRlZl8pIHsKICAgIHR5cGVkZWZfLnBhcmVudCA9IHRoaXM7CiAgICB0eXBlZGVmcy5hZGQodHlwZWRlZl8pOwogIH0KCiAgdm9pZCBjb21wdXRlQ2Fub25pY2FsTmFtZXMoKSB7CiAgICBhc3NlcnQoY2Fub25pY2FsTmFtZSAhPSBudWxsKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZWRlZnMubGVuZ3RoOyArK2kpIHsKICAgICAgVHlwZWRlZiB0eXBlZGVmXyA9IHR5cGVkZWZzW2ldOwogICAgICBjYW5vbmljYWxOYW1lLmdldENoaWxkRnJvbVR5cGVkZWYodHlwZWRlZl8pLmJpbmRUbyh0eXBlZGVmXy5yZWZlcmVuY2UpOwogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyArK2kpIHsKICAgICAgRmllbGQgZmllbGQgPSBmaWVsZHNbaV07CiAgICAgIGNhbm9uaWNhbE5hbWUuZ2V0Q2hpbGRGcm9tTWVtYmVyKGZpZWxkKS5iaW5kVG8oZmllbGQucmVmZXJlbmNlKTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvY2VkdXJlcy5sZW5ndGg7ICsraSkgewogICAgICBQcm9jZWR1cmUgbWVtYmVyID0gcHJvY2VkdXJlc1tpXTsKICAgICAgY2Fub25pY2FsTmFtZS5nZXRDaGlsZEZyb21NZW1iZXIobWVtYmVyKS5iaW5kVG8obWVtYmVyLnJlZmVyZW5jZSk7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyArK2kpIHsKICAgICAgQ2xhc3MgY2xhc3NfID0gY2xhc3Nlc1tpXTsKICAgICAgY2Fub25pY2FsTmFtZS5nZXRDaGlsZChjbGFzc18ubmFtZSkuYmluZFRvKGNsYXNzXy5yZWZlcmVuY2UpOwogICAgICBjbGFzc18uY29tcHV0ZUNhbm9uaWNhbE5hbWVzKCk7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4dGVuc2lvbnMubGVuZ3RoOyArK2kpIHsKICAgICAgRXh0ZW5zaW9uIGV4dGVuc2lvbiA9IGV4dGVuc2lvbnNbaV07CiAgICAgIGNhbm9uaWNhbE5hbWUuZ2V0Q2hpbGQoZXh0ZW5zaW9uLm5hbWUpLmJpbmRUbyhleHRlbnNpb24ucmVmZXJlbmNlKTsKICAgIH0KICB9CgogIHZvaWQgYWRkRGVwZW5kZW5jeShMaWJyYXJ5RGVwZW5kZW5jeSBub2RlKSB7CiAgICBkZXBlbmRlbmNpZXMuYWRkKG5vZGUuLnBhcmVudCA9IHRoaXMpOwogIH0KCiAgdm9pZCBhZGRQYXJ0KExpYnJhcnlQYXJ0IG5vZGUpIHsKICAgIHBhcnRzLmFkZChub2RlLi5wYXJlbnQgPSB0aGlzKTsKICB9CgogIGFjY2VwdChUcmVlVmlzaXRvciB2KSA9PiB2LnZpc2l0TGlicmFyeSh0aGlzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZpc2l0TGlzdChhbm5vdGF0aW9ucywgdik7CiAgICB2aXNpdExpc3QoZGVwZW5kZW5jaWVzLCB2KTsKICAgIHZpc2l0TGlzdChwYXJ0cywgdik7CiAgICB2aXNpdExpc3QodHlwZWRlZnMsIHYpOwogICAgdmlzaXRMaXN0KGNsYXNzZXMsIHYpOwogICAgdmlzaXRMaXN0KHByb2NlZHVyZXMsIHYpOwogICAgdmlzaXRMaXN0KGZpZWxkcywgdik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KGFubm90YXRpb25zLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybUxpc3QoZGVwZW5kZW5jaWVzLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybUxpc3QocGFydHMsIHYsIHRoaXMpOwogICAgdHJhbnNmb3JtTGlzdCh0eXBlZGVmcywgdiwgdGhpcyk7CiAgICB0cmFuc2Zvcm1MaXN0KGNsYXNzZXMsIHYsIHRoaXMpOwogICAgdHJhbnNmb3JtTGlzdChwcm9jZWR1cmVzLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybUxpc3QoZmllbGRzLCB2LCB0aGlzKTsKICB9CgogIHN0YXRpYyBpbnQgX2xpYnJhcnlJZENvdW50ZXIgPSAwOwogIGludCBfbGlicmFyeUlkID0gKytfbGlicmFyeUlkQ291bnRlcjsKCiAgaW50IGNvbXBhcmVUbyhMaWJyYXJ5IG90aGVyKSA9PiBfbGlicmFyeUlkIC0gb3RoZXIuX2xpYnJhcnlJZDsKCiAgLy8vIFJldHVybnMgYSBwb3NzaWJseSBzeW50aGVzaXplZCBuYW1lIGZvciB0aGlzIGxpYnJhcnksIGNvbnNpc3RlbnQgd2l0aAogIC8vLyB0aGUgbmFtZXMgYWNyb3NzIGFsbCBbdG9TdHJpbmddIGNhbGxzLgogIFN0cmluZyB0b1N0cmluZygpID0+IGRlYnVnTGlicmFyeU5hbWUodGhpcyk7CgogIExvY2F0aW9uIF9nZXRMb2NhdGlvbkluRW5jbG9zaW5nRmlsZShpbnQgb2Zmc2V0KSB7CiAgICByZXR1cm4gX2dldExvY2F0aW9uSW5Db21wb25lbnQoZW5jbG9zaW5nQ29tcG9uZW50LCBmaWxlVXJpLCBvZmZzZXQpOwogIH0KfQoKLy8vIEFuIGltcG9ydCBvciBleHBvcnQgZGVjbGFyYXRpb24gaW4gYSBsaWJyYXJ5LgovLy8KLy8vIEl0IGNhbiByZXByZXNlbnQgYW55IG9mIHRoZSBmb2xsb3dpbmcgZm9ybXMsCi8vLwovLy8gICAgIGltcG9ydCA8dXJsPjsKLy8vICAgICBpbXBvcnQgPHVybD4gYXMgPG5hbWU+OwovLy8gICAgIGltcG9ydCA8dXJsPiBkZWZlcnJlZCBhcyA8bmFtZT47Ci8vLyAgICAgZXhwb3J0IDx1cmw+OwovLy8KLy8vIG9wdGlvbmFsbHkgd2l0aCBtZXRhZGF0YSBhbmQgW0NvbWJpbmF0b3JzXS4KY2xhc3MgTGlicmFyeURlcGVuZGVuY3kgZXh0ZW5kcyBUcmVlTm9kZSB7CiAgaW50IGZsYWdzOwoKICBmaW5hbCBMaXN0PEV4cHJlc3Npb24+IGFubm90YXRpb25zOwoKICBSZWZlcmVuY2UgaW1wb3J0ZWRMaWJyYXJ5UmVmZXJlbmNlOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlIGltcG9ydCBwcmVmaXgsIGlmIGFueSwgb3IgYG51bGxgIGlmIHRoaXMgaXMgbm90IGFuIGltcG9ydAogIC8vLyB3aXRoIGEgcHJlZml4LgogIC8vLwogIC8vLyBNdXN0IGJlIG5vbi1udWxsIGZvciBkZWZlcnJlZCBpbXBvcnRzLCBhbmQgbXVzdCBiZSBudWxsIGZvciBleHBvcnRzLgogIFN0cmluZyBuYW1lOwoKICBmaW5hbCBMaXN0PENvbWJpbmF0b3I+IGNvbWJpbmF0b3JzOwoKICBMaWJyYXJ5RGVwZW5kZW5jeShpbnQgZmxhZ3MsIExpc3Q8RXhwcmVzc2lvbj4gYW5ub3RhdGlvbnMsCiAgICAgIExpYnJhcnkgaW1wb3J0ZWRMaWJyYXJ5LCBTdHJpbmcgbmFtZSwgTGlzdDxDb21iaW5hdG9yPiBjb21iaW5hdG9ycykKICAgICAgOiB0aGlzLmJ5UmVmZXJlbmNlKAogICAgICAgICAgICBmbGFncywgYW5ub3RhdGlvbnMsIGltcG9ydGVkTGlicmFyeS5yZWZlcmVuY2UsIG5hbWUsIGNvbWJpbmF0b3JzKTsKCiAgTGlicmFyeURlcGVuZGVuY3kuZGVmZXJyZWRJbXBvcnQoTGlicmFyeSBpbXBvcnRlZExpYnJhcnksIFN0cmluZyBuYW1lLAogICAgICB7TGlzdDxDb21iaW5hdG9yPiBjb21iaW5hdG9ycywgTGlzdDxFeHByZXNzaW9uPiBhbm5vdGF0aW9uc30pCiAgICAgIDogdGhpcy5ieVJlZmVyZW5jZShEZWZlcnJlZEZsYWcsIGFubm90YXRpb25zID8/IDxFeHByZXNzaW9uPltdLAogICAgICAgICAgICBpbXBvcnRlZExpYnJhcnkucmVmZXJlbmNlLCBuYW1lLCBjb21iaW5hdG9ycyA/PyA8Q29tYmluYXRvcj5bXSk7CgogIExpYnJhcnlEZXBlbmRlbmN5LmltcG9ydChMaWJyYXJ5IGltcG9ydGVkTGlicmFyeSwKICAgICAge1N0cmluZyBuYW1lLCBMaXN0PENvbWJpbmF0b3I+IGNvbWJpbmF0b3JzLCBMaXN0PEV4cHJlc3Npb24+IGFubm90YXRpb25zfSkKICAgICAgOiB0aGlzLmJ5UmVmZXJlbmNlKDAsIGFubm90YXRpb25zID8/IDxFeHByZXNzaW9uPltdLAogICAgICAgICAgICBpbXBvcnRlZExpYnJhcnkucmVmZXJlbmNlLCBuYW1lLCBjb21iaW5hdG9ycyA/PyA8Q29tYmluYXRvcj5bXSk7CgogIExpYnJhcnlEZXBlbmRlbmN5LmV4cG9ydChMaWJyYXJ5IGltcG9ydGVkTGlicmFyeSwKICAgICAge0xpc3Q8Q29tYmluYXRvcj4gY29tYmluYXRvcnMsIExpc3Q8RXhwcmVzc2lvbj4gYW5ub3RhdGlvbnN9KQogICAgICA6IHRoaXMuYnlSZWZlcmVuY2UoRXhwb3J0RmxhZywgYW5ub3RhdGlvbnMgPz8gPEV4cHJlc3Npb24+W10sCiAgICAgICAgICAgIGltcG9ydGVkTGlicmFyeS5yZWZlcmVuY2UsIG51bGwsIGNvbWJpbmF0b3JzID8/IDxDb21iaW5hdG9yPltdKTsKCiAgTGlicmFyeURlcGVuZGVuY3kuYnlSZWZlcmVuY2UodGhpcy5mbGFncywgdGhpcy5hbm5vdGF0aW9ucywKICAgICAgdGhpcy5pbXBvcnRlZExpYnJhcnlSZWZlcmVuY2UsIHRoaXMubmFtZSwgdGhpcy5jb21iaW5hdG9ycykgewogICAgc2V0UGFyZW50cyhhbm5vdGF0aW9ucywgdGhpcyk7CiAgICBzZXRQYXJlbnRzKGNvbWJpbmF0b3JzLCB0aGlzKTsKICB9CgogIExpYnJhcnkgZ2V0IGVuY2xvc2luZ0xpYnJhcnkgPT4gcGFyZW50OwogIExpYnJhcnkgZ2V0IHRhcmdldExpYnJhcnkgPT4gaW1wb3J0ZWRMaWJyYXJ5UmVmZXJlbmNlLmFzTGlicmFyeTsKCiAgc3RhdGljIGNvbnN0IGludCBFeHBvcnRGbGFnID0gMSA8PCAwOwogIHN0YXRpYyBjb25zdCBpbnQgRGVmZXJyZWRGbGFnID0gMSA8PCAxOwoKICBib29sIGdldCBpc0V4cG9ydCA9PiBmbGFncyAmIEV4cG9ydEZsYWcgIT0gMDsKICBib29sIGdldCBpc0ltcG9ydCA9PiAhaXNFeHBvcnQ7CiAgYm9vbCBnZXQgaXNEZWZlcnJlZCA9PiBmbGFncyAmIERlZmVycmVkRmxhZyAhPSAwOwoKICB2b2lkIGFkZEFubm90YXRpb24oRXhwcmVzc2lvbiBhbm5vdGF0aW9uKSB7CiAgICBhbm5vdGF0aW9ucy5hZGQoYW5ub3RhdGlvbi4ucGFyZW50ID0gdGhpcyk7CiAgfQoKICBhY2NlcHQoVHJlZVZpc2l0b3IgdikgPT4gdi52aXNpdExpYnJhcnlEZXBlbmRlbmN5KHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdmlzaXRMaXN0KGFubm90YXRpb25zLCB2KTsKICAgIHZpc2l0TGlzdChjb21iaW5hdG9ycywgdik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KGFubm90YXRpb25zLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybUxpc3QoY29tYmluYXRvcnMsIHYsIHRoaXMpOwogIH0KfQoKLy8vIEEgcGFydCBkZWNsYXJhdGlvbiBpbiBhIGxpYnJhcnkuCi8vLwovLy8gICAgIHBhcnQgPHVybD47Ci8vLwovLy8gb3B0aW9uYWxseSB3aXRoIG1ldGFkYXRhLgpjbGFzcyBMaWJyYXJ5UGFydCBleHRlbmRzIFRyZWVOb2RlIHsKICBmaW5hbCBMaXN0PEV4cHJlc3Npb24+IGFubm90YXRpb25zOwogIGZpbmFsIFN0cmluZyBwYXJ0VXJpOwoKICBMaWJyYXJ5UGFydCh0aGlzLmFubm90YXRpb25zLCB0aGlzLnBhcnRVcmkpIHsKICAgIHNldFBhcmVudHMoYW5ub3RhdGlvbnMsIHRoaXMpOwogIH0KCiAgdm9pZCBhZGRBbm5vdGF0aW9uKEV4cHJlc3Npb24gYW5ub3RhdGlvbikgewogICAgYW5ub3RhdGlvbnMuYWRkKGFubm90YXRpb24uLnBhcmVudCA9IHRoaXMpOwogIH0KCiAgYWNjZXB0KFRyZWVWaXNpdG9yIHYpID0+IHYudmlzaXRMaWJyYXJ5UGFydCh0aGlzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZpc2l0TGlzdChhbm5vdGF0aW9ucywgdik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KGFubm90YXRpb25zLCB2LCB0aGlzKTsKICB9Cn0KCi8vLyBBIGBzaG93YCBvciBgaGlkZWAgY2xhdXNlIGZvciBhbiBpbXBvcnQgb3IgZXhwb3J0LgpjbGFzcyBDb21iaW5hdG9yIGV4dGVuZHMgVHJlZU5vZGUgewogIGJvb2wgaXNTaG93OwoKICBmaW5hbCBMaXN0PFN0cmluZz4gbmFtZXM7CgogIExpYnJhcnlEZXBlbmRlbmN5IGdldCBkZXBlbmRlbmN5ID0+IHBhcmVudDsKCiAgQ29tYmluYXRvcih0aGlzLmlzU2hvdywgdGhpcy5uYW1lcyk7CiAgQ29tYmluYXRvci5zaG93KHRoaXMubmFtZXMpIDogaXNTaG93ID0gdHJ1ZTsKICBDb21iaW5hdG9yLmhpZGUodGhpcy5uYW1lcykgOiBpc1Nob3cgPSBmYWxzZTsKCiAgYm9vbCBnZXQgaXNIaWRlID0+ICFpc1Nob3c7CgogIEBvdmVycmlkZQogIGFjY2VwdChUcmVlVmlzaXRvciB2KSA9PiB2LnZpc2l0Q29tYmluYXRvcih0aGlzKTsKCiAgQG92ZXJyaWRlCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHt9CgogIEBvdmVycmlkZQogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHt9Cn0KCi8vLyBEZWNsYXJhdGlvbiBvZiBhIHR5cGUgYWxpYXMuCmNsYXNzIFR5cGVkZWYgZXh0ZW5kcyBOYW1lZE5vZGUgaW1wbGVtZW50cyBGaWxlVXJpTm9kZSB7CiAgLy8vIFRoZSBVUkkgb2YgdGhlIHNvdXJjZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGRlY2xhcmF0aW9uIG9mIHRoaXMgdHlwZWRlZi4KICBVcmkgZmlsZVVyaTsKICBMaXN0PEV4cHJlc3Npb24+IGFubm90YXRpb25zID0gY29uc3QgPEV4cHJlc3Npb24+W107CiAgU3RyaW5nIG5hbWU7CiAgZmluYWwgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVyczsKICBEYXJ0VHlwZSB0eXBlOwoKICAvLyBUaGUgZm9sbG93aW5nIHR3byBmaWVsZHMgZGVzY3JpYmUgcGFyYW1ldGVycyBvZiB0aGUgdW5kZXJseWluZyBmdW5jdGlvbgogIC8vIHR5cGUuICBUaGV5IGFyZSBuZWVkZWQgdG8ga2VlcCBzdWNoIGF0dHJpYnV0ZXMgYXMgbmFtZXMgYW5kIGFubm90YXRpb25zLgogIGZpbmFsIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnNPZkZ1bmN0aW9uVHlwZTsKICBmaW5hbCBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHBvc2l0aW9uYWxQYXJhbWV0ZXJzOwogIGZpbmFsIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gbmFtZWRQYXJhbWV0ZXJzOwoKICBUeXBlZGVmKHRoaXMubmFtZSwgdGhpcy50eXBlLAogICAgICB7UmVmZXJlbmNlIHJlZmVyZW5jZSwKICAgICAgdGhpcy5maWxlVXJpLAogICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzLAogICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzT2ZGdW5jdGlvblR5cGUsCiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gcG9zaXRpb25hbFBhcmFtZXRlcnMsCiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gbmFtZWRQYXJhbWV0ZXJzfSkKICAgICAgOiB0aGlzLnR5cGVQYXJhbWV0ZXJzID0gdHlwZVBhcmFtZXRlcnMgPz8gPFR5cGVQYXJhbWV0ZXI+W10sCiAgICAgICAgdGhpcy50eXBlUGFyYW1ldGVyc09mRnVuY3Rpb25UeXBlID0KICAgICAgICAgICAgdHlwZVBhcmFtZXRlcnNPZkZ1bmN0aW9uVHlwZSA/PyA8VHlwZVBhcmFtZXRlcj5bXSwKICAgICAgICB0aGlzLnBvc2l0aW9uYWxQYXJhbWV0ZXJzID0KICAgICAgICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnMgPz8gPFZhcmlhYmxlRGVjbGFyYXRpb24+W10sCiAgICAgICAgdGhpcy5uYW1lZFBhcmFtZXRlcnMgPSBuYW1lZFBhcmFtZXRlcnMgPz8gPFZhcmlhYmxlRGVjbGFyYXRpb24+W10sCiAgICAgICAgc3VwZXIocmVmZXJlbmNlKSB7CiAgICBzZXRQYXJlbnRzKHRoaXMudHlwZVBhcmFtZXRlcnMsIHRoaXMpOwogIH0KCiAgTGlicmFyeSBnZXQgZW5jbG9zaW5nTGlicmFyeSA9PiBwYXJlbnQ7CgogIFR5cGVkZWZUeXBlIGdldCB0aGlzVHlwZSB7CiAgICByZXR1cm4gbmV3IFR5cGVkZWZUeXBlKHRoaXMsIF9nZXRBc1R5cGVBcmd1bWVudHModHlwZVBhcmFtZXRlcnMpKTsKICB9CgogIGFjY2VwdChUcmVlVmlzaXRvciB2KSB7CiAgICByZXR1cm4gdi52aXNpdFR5cGVkZWYodGhpcyk7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KGFubm90YXRpb25zLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybUxpc3QodHlwZVBhcmFtZXRlcnMsIHYsIHRoaXMpOwogICAgaWYgKHR5cGUgIT0gbnVsbCkgewogICAgICB0eXBlID0gdi52aXNpdERhcnRUeXBlKHR5cGUpOwogICAgfQogIH0KCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZpc2l0TGlzdChhbm5vdGF0aW9ucywgdik7CiAgICB2aXNpdExpc3QodHlwZVBhcmFtZXRlcnMsIHYpOwogICAgdHlwZT8uYWNjZXB0KHYpOwogIH0KCiAgdm9pZCBhZGRBbm5vdGF0aW9uKEV4cHJlc3Npb24gbm9kZSkgewogICAgaWYgKGFubm90YXRpb25zLmlzRW1wdHkpIHsKICAgICAgYW5ub3RhdGlvbnMgPSA8RXhwcmVzc2lvbj5bXTsKICAgIH0KICAgIGFubm90YXRpb25zLmFkZChub2RlKTsKICAgIG5vZGUucGFyZW50ID0gdGhpczsKICB9CgogIExvY2F0aW9uIF9nZXRMb2NhdGlvbkluRW5jbG9zaW5nRmlsZShpbnQgb2Zmc2V0KSB7CiAgICByZXR1cm4gX2dldExvY2F0aW9uSW5Db21wb25lbnQoZW5jbG9zaW5nQ29tcG9uZW50LCBmaWxlVXJpLCBvZmZzZXQpOwogIH0KfQoKLy8vIFRoZSBkZWdyZWUgdG8gd2hpY2ggdGhlIGNvbnRlbnRzIG9mIGEgY2xhc3MgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIG1lbW9yeS4KLy8vCi8vLyBFYWNoIGxldmVsIGltcGx5IHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIHByZXZpb3VzIG9uZXMuCmVudW0gQ2xhc3NMZXZlbCB7CiAgLy8vIFRlbXBvcmFyeSBsb2FkaW5nIGxldmVsIGZvciBpbnRlcm5hbCB1c2UgYnkgSVIgcHJvZHVjZXJzLiAgQ29uc3VtZXJzIG9mCiAgLy8vIGtlcm5lbCBjb2RlIHNob3VsZCBub3QgZXhwZWN0IHRvIHNlZSBjbGFzc2VzIGF0IHRoaXMgbGV2ZWwuCiAgVGVtcG9yYXJ5LAoKICAvLy8gVGhlIGNsYXNzIG1heSBiZSB1c2VkIGFzIGEgdHlwZSwgYW5kIGl0IG1heSBjb250YWluIG1lbWJlcnMgdGhhdCBhcmUKICAvLy8gcmVmZXJlbmNlZCBmcm9tIHRoaXMgYnVpbGQgdW5pdC4KICAvLy8KICAvLy8gVGhlIHR5cGUgcGFyYW1ldGVycyBhbmQgdGhlaXIgYm91bmRzIGFyZSBwcmVzZW50LgogIC8vLwogIC8vLyBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBhbGwgbWVtYmVycyBhcmUgcHJlc2VudC4KICAvLy8KICAvLy8gQWxsIHN1cGVydHlwZXMgb2YgdGhpcyBjbGFzcyBhcmUgYXQgW1R5cGVdIGxldmVsIG9yIGhpZ2hlci4KICBUeXBlLAoKICAvLy8gQWxsIGluc3RhbmNlIG1lbWJlcnMgb2YgdGhlIGNsYXNzIGFyZSBwcmVzZW50LgogIC8vLwogIC8vLyBBbGwgc3VwZXJ0eXBlcyBvZiB0aGlzIGNsYXNzIGFyZSBhdCBbSGllcmFyY2h5XSBsZXZlbCBvciBoaWdoZXIuCiAgLy8vCiAgLy8vIFRoaXMgbGV2ZWwgZXhpc3RzIHNvIHN1cGVydHlwZXMgb2YgYSBmdWxseSBsb2FkZWQgY2xhc3MgY29udGFpbiBhbGwgdGhlCiAgLy8vIG1lbWJlcnMgbmVlZGVkIHRvIGRldGVjdCBvdmVycmlkZSBjb25zdHJhaW50cy4KICBIaWVyYXJjaHksCgogIC8vLyBBbGwgaW5zdGFuY2UgbWVtYmVycyBvZiB0aGUgY2xhc3MgaGF2ZSB0aGVpciBib2R5IGxvYWRlZCwgYW5kIHRoZWlyCiAgLy8vIGFubm90YXRpb25zIGFyZSBwcmVzZW50LgogIC8vLwogIC8vLyBBbGwgc3VwZXJ0eXBlcyBvZiB0aGlzIGNsYXNzIGFyZSBhdCBbSGllcmFyY2h5XSBsZXZlbCBvciBoaWdoZXIuCiAgLy8vCiAgLy8vIElmIHRoaXMgY2xhc3MgaXMgYSBtaXhpbiBhcHBsaWNhdGlvbiwgdGhlbiBpdHMgbWl4aW4gaXMgbG9hZGVkIGF0IFtNaXhpbl0KICAvLy8gbGV2ZWwgb3IgaGlnaGVyLgogIC8vLwogIC8vLyBUaGlzIGxldmVsIGV4aXN0cyBzbyB0aGUgY29udGVudHMgb2YgYSBtaXhpbiBjYW4gYmUgY2xvbmVkIGludG8gYQogIC8vLyBtaXhpbiBhcHBsaWNhdGlvbi4KICBNaXhpbiwKCiAgLy8vIEFsbCBtZW1iZXJzIG9mIHRoZSBjbGFzcyBhcmUgZnVsbHkgbG9hZGVkIGFuZCBhcmUgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuCiAgLy8vCiAgLy8vIEFubm90YXRpb25zIGFyZSBwcmVzZW50IG9uIGNsYXNzZXMgYW5kIG1lbWJlcnMuCiAgLy8vCiAgLy8vIEFsbCBzdXBlcnR5cGVzIG9mIHRoaXMgY2xhc3MgYXJlIGF0IFtIaWVyYXJjaHldIGxldmVsIG9yIGhpZ2hlciwKICAvLy8gbm90IG5lY2Vzc2FyaWx5IGF0IFtCb2R5XSBsZXZlbC4KICBCb2R5LAp9CgovLy8gRGVjbGFyYXRpb24gb2YgYSByZWd1bGFyIGNsYXNzIG9yIGEgbWl4aW4gYXBwbGljYXRpb24uCi8vLwovLy8gTWl4aW4gYXBwbGljYXRpb25zIG1heSBub3QgY29udGFpbiBmaWVsZHMgb3IgcHJvY2VkdXJlcywgYXMgdGhleSBpbXBsaWNpdGx5Ci8vLyB1c2UgdGhvc2UgZnJvbSBpdHMgbWl4ZWQtaW4gdHlwZS4gIEhvd2V2ZXIsIHRoZSBJUiBkb2VzIG5vdCBlbmZvcmNlIHRoaXMKLy8vIHJ1bGUgZGlyZWN0bHksIGFzIGRvaW5nIHNvIGNhbiBvYnN0cnVjdCB0cmFuc2Zvcm1hdGlvbnMuICBJdCBpcyBwb3NzaWJsZSB0bwovLy8gdHJhbnNmb3JtIGEgbWl4aW4gYXBwbGljYXRpb24gdG8gYmVjb21lIGEgcmVndWxhciBjbGFzcywgYW5kIHZpY2UgdmVyc2EuCmNsYXNzIENsYXNzIGV4dGVuZHMgTmFtZWROb2RlIGltcGxlbWVudHMgQW5ub3RhdGFibGUsIEZpbGVVcmlOb2RlIHsKICAvLy8gU3RhcnQgb2Zmc2V0IG9mIHRoZSBjbGFzcyBpbiB0aGUgc291cmNlIGZpbGUgaXQgY29tZXMgZnJvbS4KICAvLy8KICAvLy8gTm90ZSB0aGF0IHRoaXMgaW5jbHVkZXMgYW5ub3RhdGlvbnMgaWYgYW55LgogIC8vLwogIC8vLyBWYWxpZCB2YWx1ZXMgYXJlIGZyb20gMCBhbmQgdXAsIG9yIC0xIChbVHJlZU5vZGUubm9PZmZzZXRdKSBpZiB0aGUgZmlsZQogIC8vLyBzdGFydCBvZmZzZXQgaXMgbm90IGF2YWlsYWJsZSAodGhpcyBpcyB0aGUgZGVmYXVsdCBpZiBub25lIGlzIHNwZWNpZmljYWxseQogIC8vLyBzZXQpLgogIGludCBzdGFydEZpbGVPZmZzZXQgPSBUcmVlTm9kZS5ub09mZnNldDsKCiAgLy8vIEVuZCBvZmZzZXQgaW4gdGhlIHNvdXJjZSBmaWxlIGl0IGNvbWVzIGZyb20uIFZhbGlkIHZhbHVlcyBhcmUgZnJvbSAwIGFuZAogIC8vLyB1cCwgb3IgLTEgKFtUcmVlTm9kZS5ub09mZnNldF0pIGlmIHRoZSBmaWxlIGVuZCBvZmZzZXQgaXMgbm90IGF2YWlsYWJsZQogIC8vLyAodGhpcyBpcyB0aGUgZGVmYXVsdCBpZiBub25lIGlzIHNwZWNpZmljYWxseSBzZXQpLgogIGludCBmaWxlRW5kT2Zmc2V0ID0gVHJlZU5vZGUubm9PZmZzZXQ7CgogIC8vLyBUaGUgZGVncmVlIHRvIHdoaWNoIHRoZSBjb250ZW50cyBvZiB0aGUgY2xhc3MgaGF2ZSBiZWVuIGxvYWRlZC4KICBDbGFzc0xldmVsIGxldmVsID0gQ2xhc3NMZXZlbC5Cb2R5OwoKICAvLy8gTGlzdCBvZiBtZXRhZGF0YSBhbm5vdGF0aW9ucyBvbiB0aGUgY2xhc3MuCiAgLy8vCiAgLy8vIFRoaXMgZGVmYXVsdHMgdG8gYW4gaW1tdXRhYmxlIGVtcHR5IGxpc3QuIFVzZSBbYWRkQW5ub3RhdGlvbl0gdG8gYWRkCiAgLy8vIGFubm90YXRpb25zIGlmIG5lZWRlZC4KICBMaXN0PEV4cHJlc3Npb24+IGFubm90YXRpb25zID0gY29uc3QgPEV4cHJlc3Npb24+W107CgogIC8vLyBOYW1lIG9mIHRoZSBjbGFzcy4KICAvLy8KICAvLy8gTXVzdCBiZSBub24tbnVsbCBhbmQgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBsaWJyYXJ5LgogIC8vLwogIC8vLyBUaGUgbmFtZSBtYXkgY29udGFpbiBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCB2YWxpZCBpbiBhIERhcnQgaWRlbnRpZmllciwKICAvLy8gaW4gcGFydGljdWxhciwgdGhlIHN5bWJvbCAnJicgaXMgdXNlZCBpbiBjbGFzcyBuYW1lcyBnZW5lcmF0ZWQgZm9yIG1peGluCiAgLy8vIGFwcGxpY2F0aW9ucy4KICBTdHJpbmcgbmFtZTsKCiAgLy8gTXVzdCBtYXRjaCBzZXJpYWxpemVkIGJpdCBwb3NpdGlvbnMuCiAgc3RhdGljIGNvbnN0IGludCBMZXZlbE1hc2sgPSAweDM7IC8vIEJpdHMgMCBhbmQgMS4KICBzdGF0aWMgY29uc3QgaW50IEZsYWdBYnN0cmFjdCA9IDEgPDwgMjsKICBzdGF0aWMgY29uc3QgaW50IEZsYWdFbnVtID0gMSA8PCAzOwogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ0Fub255bW91c01peGluID0gMSA8PCA0OwogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ0VsaW1pbmF0ZWRNaXhpbiA9IDEgPDwgNTsKICBzdGF0aWMgY29uc3QgaW50IEZsYWdNaXhpbkRlY2xhcmF0aW9uID0gMSA8PCA2OwoKICBpbnQgZmxhZ3MgPSAwOwoKICBib29sIGdldCBpc0Fic3RyYWN0ID0+IGZsYWdzICYgRmxhZ0Fic3RyYWN0ICE9IDA7CgogIHZvaWQgc2V0IGlzQWJzdHJhY3QoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdBYnN0cmFjdCkgOiAoZmxhZ3MgJiB+RmxhZ0Fic3RyYWN0KTsKICB9CgogIC8vLyBXaGV0aGVyIHRoaXMgY2xhc3MgaXMgYW4gZW51bS4KICBib29sIGdldCBpc0VudW0gPT4gZmxhZ3MgJiBGbGFnRW51bSAhPSAwOwoKICB2b2lkIHNldCBpc0VudW0oYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdFbnVtKSA6IChmbGFncyAmIH5GbGFnRW51bSk7CiAgfQoKICAvLy8gV2hldGhlciB0aGlzIGNsYXNzIGlzIGEgc3ludGhldGljIGltcGxlbWVudGF0aW9uIGNyZWF0ZWQgZm9yIGVhY2gKICAvLy8gbWl4ZWQtaW4gY2xhc3MuIEZvciBleGFtcGxlIHRoZSBmb2xsb3dpbmcgY29kZToKICAvLy8gY2xhc3MgWiBleHRlbmRzIEEgd2l0aCBCLCBDLCBEIHt9CiAgLy8vIGNsYXNzIEEge30KICAvLy8gY2xhc3MgQiB7fQogIC8vLyBjbGFzcyBDIHt9CiAgLy8vIGNsYXNzIEQge30KICAvLy8gLi4uY3JlYXRlczoKICAvLy8gYWJzdHJhY3QgY2xhc3MgX1omQSZCIGV4dGVuZHMgQSBtaXhlZEluIEIge30KICAvLy8gYWJzdHJhY3QgY2xhc3MgX1omQSZCJkMgZXh0ZW5kcyBBJkIgbWl4ZWRJbiBDIHt9CiAgLy8vIGFic3RyYWN0IGNsYXNzIF9aJkEmQiZDJkQgZXh0ZW5kcyBBJkImQyBtaXhlZEluIEQge30KICAvLy8gY2xhc3MgWiBleHRlbmRzIF9aJkEmQiZDJkQge30KICAvLy8gQWxsIFgmWSBjbGFzc2VzIGFyZSBtYXJrZWQgYXMgc3ludGhldGljLgogIGJvb2wgZ2V0IGlzQW5vbnltb3VzTWl4aW4gPT4gZmxhZ3MgJiBGbGFnQW5vbnltb3VzTWl4aW4gIT0gMDsKCiAgdm9pZCBzZXQgaXNBbm9ueW1vdXNNaXhpbihib29sIHZhbHVlKSB7CiAgICBmbGFncyA9CiAgICAgICAgdmFsdWUgPyAoZmxhZ3MgfCBGbGFnQW5vbnltb3VzTWl4aW4pIDogKGZsYWdzICYgfkZsYWdBbm9ueW1vdXNNaXhpbik7CiAgfQoKICAvLy8gV2hldGhlciB0aGlzIGNsYXNzIHdhcyB0cmFuc2Zvcm1lZCBmcm9tIGEgbWl4aW4gYXBwbGljYXRpb24uCiAgLy8vIEluIHN1Y2ggY2FzZSwgaXRzIG1peGVkLWluIHR5cGUgd2FzIHB1bGxlZCBpbnRvIHRoZSBlbmQgb2YgaW1wbGVtZW50ZWQKICAvLy8gdHlwZXMgbGlzdC4KICBib29sIGdldCBpc0VsaW1pbmF0ZWRNaXhpbiA9PiBmbGFncyAmIEZsYWdFbGltaW5hdGVkTWl4aW4gIT0gMDsKCiAgdm9pZCBzZXQgaXNFbGltaW5hdGVkTWl4aW4oYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPQogICAgICAgIHZhbHVlID8gKGZsYWdzIHwgRmxhZ0VsaW1pbmF0ZWRNaXhpbikgOiAoZmxhZ3MgJiB+RmxhZ0VsaW1pbmF0ZWRNaXhpbik7CiAgfQoKICAvLy8gVHJ1ZSBpZiB0aGlzIGNsYXNzIHdhcyBhIG1peGluIGRlY2xhcmF0aW9uIGluIERhcnQuCiAgLy8vCiAgLy8vIE1peGlucyBhcmUgZGVjbGFyZWQgaW4gRGFydCB3aXRoIHRoZSBgbWl4aW5gIGtleXdvcmQuICBUaGV5IGFyZSBjb21waWxlZAogIC8vLyB0byBLZXJuZWwgY2xhc3Nlcy4KICBib29sIGdldCBpc01peGluRGVjbGFyYXRpb24gPT4gZmxhZ3MgJiBGbGFnTWl4aW5EZWNsYXJhdGlvbiAhPSAwOwoKICB2b2lkIHNldCBpc01peGluRGVjbGFyYXRpb24oYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZQogICAgICAgID8gKGZsYWdzIHwgRmxhZ01peGluRGVjbGFyYXRpb24pCiAgICAgICAgOiAoZmxhZ3MgJiB+RmxhZ01peGluRGVjbGFyYXRpb24pOwogIH0KCiAgTGlzdDxTdXBlcnR5cGU+IHN1cGVyY2xhc3NDb25zdHJhaW50cygpIHsKICAgIHZhciBjb25zdHJhaW50cyA9IDxTdXBlcnR5cGU+W107CgogICAgLy8gTm90IGEgbWl4aW4gZGVjbGFyYXRpb24uCiAgICBpZiAoIWlzTWl4aW5EZWNsYXJhdGlvbikgcmV0dXJuIGNvbnN0cmFpbnRzOwoKICAgIC8vIE90aGVyd2lzZSB3ZSBoYXZlIGEgbGVmdC1saW5lYXIgYmluYXJ5IHRyZWUgKHN1YnRyZWVzIGFyZSBzdXBlcnR5cGUgYW5kCiAgICAvLyBtaXhlZEluVHlwZSkgb2YgY29uc3RyYWludHMsIHdoZXJlIGFsbCB0aGUgaW50ZXJpb3Igbm9kZXMgYXJlIGFub255bW91cwogICAgLy8gbWl4aW4gYXBwbGljYXRpb25zLgogICAgU3VwZXJ0eXBlIGN1cnJlbnQgPSBzdXBlcnR5cGU7CiAgICB3aGlsZSAoY3VycmVudCAhPSBudWxsICYmIGN1cnJlbnQuY2xhc3NOb2RlLmlzQW5vbnltb3VzTWl4aW4pIHsKICAgICAgQ2xhc3MgY3VycmVudENsYXNzID0gY3VycmVudC5jbGFzc05vZGU7CiAgICAgIGFzc2VydChjdXJyZW50Q2xhc3MuaW1wbGVtZW50ZWRUeXBlcy5sZW5ndGggPT0gMik7CiAgICAgIFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZnJvbVN1cGVydHlwZShjdXJyZW50KTsKICAgICAgY29uc3RyYWludHMuYWRkKAogICAgICAgICAgc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVTdXBlcnR5cGUoY3VycmVudENsYXNzLmltcGxlbWVudGVkVHlwZXNbMV0pKTsKICAgICAgY3VycmVudCA9CiAgICAgICAgICBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVN1cGVydHlwZShjdXJyZW50Q2xhc3MuaW1wbGVtZW50ZWRUeXBlc1swXSk7CiAgICB9CiAgICByZXR1cm4gY29uc3RyYWludHMuLmFkZChjdXJyZW50KTsKICB9CgogIC8vLyBUaGUgVVJJIG9mIHRoZSBzb3VyY2UgZmlsZSB0aGlzIGNsYXNzIHdhcyBsb2FkZWQgZnJvbS4KICBVcmkgZmlsZVVyaTsKCiAgZmluYWwgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVyczsKCiAgLy8vIFRoZSBpbW1lZGlhdGUgc3VwZXIgdHlwZSwgb3IgYG51bGxgIGlmIHRoaXMgaXMgdGhlIHJvb3QgY2xhc3MuCiAgU3VwZXJ0eXBlIHN1cGVydHlwZTsKCiAgLy8vIFRoZSBtaXhlZC1pbiB0eXBlIGlmIHRoaXMgaXMgYSBtaXhpbiBhcHBsaWNhdGlvbiwgb3RoZXJ3aXNlIGBudWxsYC4KICBTdXBlcnR5cGUgbWl4ZWRJblR5cGU7CgogIC8vLyBUaGUgdHlwZXMgZnJvbSB0aGUgYGltcGxlbWVudHNgIGNsYXVzZS4KICBmaW5hbCBMaXN0PFN1cGVydHlwZT4gaW1wbGVtZW50ZWRUeXBlczsKCiAgLy8vIEZpZWxkcyBkZWNsYXJlZCBpbiB0aGUgY2xhc3MuCiAgLy8vCiAgLy8vIEZvciBtaXhpbiBhcHBsaWNhdGlvbnMgdGhpcyBzaG91bGQgYmUgZW1wdHkuCiAgZmluYWwgTGlzdDxGaWVsZD4gZmllbGRzOwoKICAvLy8gQ29uc3RydWN0b3JzIGRlY2xhcmVkIGluIHRoZSBjbGFzcy4KICBmaW5hbCBMaXN0PENvbnN0cnVjdG9yPiBjb25zdHJ1Y3RvcnM7CgogIC8vLyBQcm9jZWR1cmVzIGRlY2xhcmVkIGluIHRoZSBjbGFzcy4KICAvLy8KICAvLy8gRm9yIG1peGluIGFwcGxpY2F0aW9ucyB0aGlzIHNob3VsZCBvbmx5IGNvbnRhaW4gZm9yd2FyZGluZyBzdHVicy4KICBmaW5hbCBMaXN0PFByb2NlZHVyZT4gcHJvY2VkdXJlczsKCiAgLy8vIFJlZGlyZWN0aW5nIGZhY3RvcnkgY29uc3RydWN0b3JzIGRlY2xhcmVkIGluIHRoZSBjbGFzcy4KICAvLy8KICAvLy8gRm9yIG1peGluIGFwcGxpY2F0aW9ucyB0aGlzIHNob3VsZCBiZSBlbXB0eS4KICBmaW5hbCBMaXN0PFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yPiByZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnM7CgogIENsYXNzKAogICAgICB7dGhpcy5uYW1lLAogICAgICBib29sIGlzQWJzdHJhY3Q6IGZhbHNlLAogICAgICBib29sIGlzQW5vbnltb3VzTWl4aW46IGZhbHNlLAogICAgICB0aGlzLnN1cGVydHlwZSwKICAgICAgdGhpcy5taXhlZEluVHlwZSwKICAgICAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycywKICAgICAgTGlzdDxTdXBlcnR5cGU+IGltcGxlbWVudGVkVHlwZXMsCiAgICAgIExpc3Q8Q29uc3RydWN0b3I+IGNvbnN0cnVjdG9ycywKICAgICAgTGlzdDxQcm9jZWR1cmU+IHByb2NlZHVyZXMsCiAgICAgIExpc3Q8RmllbGQ+IGZpZWxkcywKICAgICAgTGlzdDxSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvcj4gcmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzLAogICAgICB0aGlzLmZpbGVVcmksCiAgICAgIFJlZmVyZW5jZSByZWZlcmVuY2V9KQogICAgICA6IHRoaXMudHlwZVBhcmFtZXRlcnMgPSB0eXBlUGFyYW1ldGVycyA/PyA8VHlwZVBhcmFtZXRlcj5bXSwKICAgICAgICB0aGlzLmltcGxlbWVudGVkVHlwZXMgPSBpbXBsZW1lbnRlZFR5cGVzID8/IDxTdXBlcnR5cGU+W10sCiAgICAgICAgdGhpcy5maWVsZHMgPSBmaWVsZHMgPz8gPEZpZWxkPltdLAogICAgICAgIHRoaXMuY29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzID8/IDxDb25zdHJ1Y3Rvcj5bXSwKICAgICAgICB0aGlzLnByb2NlZHVyZXMgPSBwcm9jZWR1cmVzID8/IDxQcm9jZWR1cmU+W10sCiAgICAgICAgdGhpcy5yZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnMgPQogICAgICAgICAgICByZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnMgPz8gPFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yPltdLAogICAgICAgIHN1cGVyKHJlZmVyZW5jZSkgewogICAgc2V0UGFyZW50cyh0aGlzLnR5cGVQYXJhbWV0ZXJzLCB0aGlzKTsKICAgIHNldFBhcmVudHModGhpcy5jb25zdHJ1Y3RvcnMsIHRoaXMpOwogICAgc2V0UGFyZW50cyh0aGlzLnByb2NlZHVyZXMsIHRoaXMpOwogICAgc2V0UGFyZW50cyh0aGlzLmZpZWxkcywgdGhpcyk7CiAgICBzZXRQYXJlbnRzKHRoaXMucmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzLCB0aGlzKTsKICAgIHRoaXMuaXNBYnN0cmFjdCA9IGlzQWJzdHJhY3Q7CiAgICB0aGlzLmlzQW5vbnltb3VzTWl4aW4gPSBpc0Fub255bW91c01peGluOwogIH0KCiAgdm9pZCBjb21wdXRlQ2Fub25pY2FsTmFtZXMoKSB7CiAgICBhc3NlcnQoY2Fub25pY2FsTmFtZSAhPSBudWxsKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgKytpKSB7CiAgICAgIEZpZWxkIG1lbWJlciA9IGZpZWxkc1tpXTsKICAgICAgY2Fub25pY2FsTmFtZS5nZXRDaGlsZEZyb21NZW1iZXIobWVtYmVyKS5iaW5kVG8obWVtYmVyLnJlZmVyZW5jZSk7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb2NlZHVyZXMubGVuZ3RoOyArK2kpIHsKICAgICAgUHJvY2VkdXJlIG1lbWJlciA9IHByb2NlZHVyZXNbaV07CiAgICAgIGNhbm9uaWNhbE5hbWUuZ2V0Q2hpbGRGcm9tTWVtYmVyKG1lbWJlcikuYmluZFRvKG1lbWJlci5yZWZlcmVuY2UpOwogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb25zdHJ1Y3RvcnMubGVuZ3RoOyArK2kpIHsKICAgICAgQ29uc3RydWN0b3IgbWVtYmVyID0gY29uc3RydWN0b3JzW2ldOwogICAgICBjYW5vbmljYWxOYW1lLmdldENoaWxkRnJvbU1lbWJlcihtZW1iZXIpLmJpbmRUbyhtZW1iZXIucmVmZXJlbmNlKTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzLmxlbmd0aDsgKytpKSB7CiAgICAgIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yIG1lbWJlciA9IHJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yc1tpXTsKICAgICAgY2Fub25pY2FsTmFtZS5nZXRDaGlsZEZyb21NZW1iZXIobWVtYmVyKS5iaW5kVG8obWVtYmVyLnJlZmVyZW5jZSk7CiAgICB9CiAgfQoKICAvLy8gVGhlIGltbWVkaWF0ZSBzdXBlciBjbGFzcywgb3IgYG51bGxgIGlmIHRoaXMgaXMgdGhlIHJvb3QgY2xhc3MuCiAgQ2xhc3MgZ2V0IHN1cGVyY2xhc3MgPT4gc3VwZXJ0eXBlPy5jbGFzc05vZGU7CgogIC8vLyBUaGUgbWl4ZWQtaW4gY2xhc3MgaWYgdGhpcyBpcyBhIG1peGluIGFwcGxpY2F0aW9uLCBvdGhlcndpc2UgYG51bGxgLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgdGhpcyBtYXkgaXRzZWxmIGJlIGEgbWl4aW4gYXBwbGljYXRpb24uICBVc2UgW21peGluXSB0byBnZXQgdGhlCiAgLy8vIGNsYXNzIHRoYXQgaGFzIHRoZSBmaWVsZHMgYW5kIHByb2NlZHVyZXMuCiAgQ2xhc3MgZ2V0IG1peGVkSW5DbGFzcyA9PiBtaXhlZEluVHlwZT8uY2xhc3NOb2RlOwoKICAvLy8gVGhlIGNsYXNzIHRoYXQgZGVjbGFyZXMgdGhlIGZpZWxkIGFuZCBwcm9jZWR1cmVzIG9mIHRoaXMgY2xhc3MuCiAgQ2xhc3MgZ2V0IG1peGluID0+IG1peGVkSW5DbGFzcz8ubWl4aW4gPz8gdGhpczsKCiAgYm9vbCBnZXQgaXNNaXhpbkFwcGxpY2F0aW9uID0+IG1peGVkSW5UeXBlICE9IG51bGw7CgogIFN0cmluZyBnZXQgZGVtYW5nbGVkTmFtZSB7CiAgICBpZiAoaXNBbm9ueW1vdXNNaXhpbikgcmV0dXJuIG5hbWVBc01peGluQXBwbGljYXRpb247CiAgICBhc3NlcnQoIW5hbWUuY29udGFpbnMoJyYnKSk7CiAgICByZXR1cm4gbmFtZTsKICB9CgogIFN0cmluZyBnZXQgbmFtZUFzTWl4aW5BcHBsaWNhdGlvbiB7CiAgICBhc3NlcnQoaXNBbm9ueW1vdXNNaXhpbik7CiAgICByZXR1cm4gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICB9CgogIFN0cmluZyBnZXQgbmFtZUFzTWl4aW5BcHBsaWNhdGlvblN1YmNsYXNzIHsKICAgIGFzc2VydChpc0Fub255bW91c01peGluKTsKICAgIHJldHVybiBkZW1hbmdsZU1peGluQXBwbGljYXRpb25TdWJjbGFzc05hbWUobmFtZSk7CiAgfQoKICAvLy8gTWVtYmVycyBkZWNsYXJlZCBpbiB0aGlzIGNsYXNzLgogIC8vLwogIC8vLyBUaGlzIGdldHRlciBpcyBmb3IgY29udmVuaWVuY2UsIG5vdCBlZmZpY2llbmN5LiAgQ29uc2lkZXIgbWFudWFsbHkKICAvLy8gaXRlcmF0aW5nIHRoZSBtZW1iZXJzIHRvIHNwZWVkIHVwIGNvZGUgaW4gcHJvZHVjdGlvbi4KICBJdGVyYWJsZTxNZW1iZXI+IGdldCBtZW1iZXJzID0+IDxJdGVyYWJsZTxNZW1iZXI+PlsKICAgICAgICBmaWVsZHMsCiAgICAgICAgY29uc3RydWN0b3JzLAogICAgICAgIHByb2NlZHVyZXMsCiAgICAgICAgcmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzCiAgICAgIF0uZXhwYW5kKCh4KSA9PiB4KTsKCiAgLy8vIFRoZSBpbW1lZGlhdGVseSBleHRlbmRlZCwgbWl4ZWQtaW4sIGFuZCBpbXBsZW1lbnRlZCB0eXBlcy4KICAvLy8KICAvLy8gVGhpcyBnZXR0ZXIgaXMgZm9yIGNvbnZlbmllbmNlLCBub3QgZWZmaWNpZW5jeS4gIENvbnNpZGVyIG1hbnVhbGx5CiAgLy8vIGl0ZXJhdGluZyB0aGUgc3VwZXIgdHlwZXMgdG8gc3BlZWQgdXAgY29kZSBpbiBwcm9kdWN0aW9uLgogIEl0ZXJhYmxlPFN1cGVydHlwZT4gZ2V0IHN1cGVycyA9PiA8SXRlcmFibGU8U3VwZXJ0eXBlPj5bCiAgICAgICAgc3VwZXJ0eXBlID09IG51bGwgPyBjb25zdCBbXSA6IFtzdXBlcnR5cGVdLAogICAgICAgIG1peGVkSW5UeXBlID09IG51bGwgPyBjb25zdCBbXSA6IFttaXhlZEluVHlwZV0sCiAgICAgICAgaW1wbGVtZW50ZWRUeXBlcwogICAgICBdLmV4cGFuZCgoeCkgPT4geCk7CgogIC8vLyBUaGUgbGlicmFyeSBjb250YWluaW5nIHRoaXMgY2xhc3MuCiAgTGlicmFyeSBnZXQgZW5jbG9zaW5nTGlicmFyeSA9PiBwYXJlbnQ7CgogIC8vLyBBZGRzIGEgbWVtYmVyIHRvIHRoaXMgY2xhc3MuCiAgLy8vCiAgLy8vIFRocm93cyBhbiBlcnJvciBpZiBhdHRlbXB0aW5nIHRvIGFkZCBhIGZpZWxkIG9yIHByb2NlZHVyZSB0byBhIG1peGluCiAgLy8vIGFwcGxpY2F0aW9uLgogIHZvaWQgYWRkTWVtYmVyKE1lbWJlciBtZW1iZXIpIHsKICAgIG1lbWJlci5wYXJlbnQgPSB0aGlzOwogICAgaWYgKG1lbWJlciBpcyBDb25zdHJ1Y3RvcikgewogICAgICBjb25zdHJ1Y3RvcnMuYWRkKG1lbWJlcik7CiAgICB9IGVsc2UgaWYgKG1lbWJlciBpcyBQcm9jZWR1cmUpIHsKICAgICAgcHJvY2VkdXJlcy5hZGQobWVtYmVyKTsKICAgIH0gZWxzZSBpZiAobWVtYmVyIGlzIEZpZWxkKSB7CiAgICAgIGZpZWxkcy5hZGQobWVtYmVyKTsKICAgIH0gZWxzZSBpZiAobWVtYmVyIGlzIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKSB7CiAgICAgIHJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9ycy5hZGQobWVtYmVyKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKG1lbWJlcik7CiAgICB9CiAgfQoKICB2b2lkIGFkZEFubm90YXRpb24oRXhwcmVzc2lvbiBub2RlKSB7CiAgICBpZiAoYW5ub3RhdGlvbnMuaXNFbXB0eSkgewogICAgICBhbm5vdGF0aW9ucyA9IDxFeHByZXNzaW9uPltdOwogICAgfQogICAgYW5ub3RhdGlvbnMuYWRkKG5vZGUpOwogICAgbm9kZS5wYXJlbnQgPSB0aGlzOwogIH0KCiAgYWNjZXB0KFRyZWVWaXNpdG9yIHYpID0+IHYudmlzaXRDbGFzcyh0aGlzKTsKICBhY2NlcHRSZWZlcmVuY2UoVmlzaXRvciB2KSA9PiB2LnZpc2l0Q2xhc3NSZWZlcmVuY2UodGhpcyk7CgogIC8vLyBJZiB0cnVlLCB0aGUgY2xhc3MgaXMgcGFydCBvZiBhbiBleHRlcm5hbCBsaWJyYXJ5LCB0aGF0IGlzLCBpdCBpcyBkZWZpbmVkCiAgLy8vIGluIGFub3RoZXIgYnVpbGQgdW5pdC4gIE9ubHkgYSBzdWJzZXQgb2YgaXRzIG1lbWJlcnMgYXJlIHByZXNlbnQuCiAgLy8vCiAgLy8vIFRoZXNlIGNsYXNzZXMgc2hvdWxkIGJlIGxvYWRlZCBhdCBlaXRoZXIgW0NsYXNzTGV2ZWwuVHlwZV0gb3IKICAvLy8gW0NsYXNzTGV2ZWwuSGllcmFyY2h5XSBsZXZlbC4KICBib29sIGdldCBpc0luRXh0ZXJuYWxMaWJyYXJ5ID0+IGVuY2xvc2luZ0xpYnJhcnkuaXNFeHRlcm5hbDsKCiAgU3VwZXJ0eXBlIGdldCBhc1Jhd1N1cGVydHlwZSB7CiAgICByZXR1cm4gbmV3IFN1cGVydHlwZSh0aGlzLAogICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQodHlwZVBhcmFtZXRlcnMubGVuZ3RoLCBjb25zdCBEeW5hbWljVHlwZSgpKSk7CiAgfQoKICBTdXBlcnR5cGUgZ2V0IGFzVGhpc1N1cGVydHlwZSB7CiAgICByZXR1cm4gbmV3IFN1cGVydHlwZSh0aGlzLCBfZ2V0QXNUeXBlQXJndW1lbnRzKHR5cGVQYXJhbWV0ZXJzKSk7CiAgfQoKICBJbnRlcmZhY2VUeXBlIF9yYXdUeXBlOwogIEludGVyZmFjZVR5cGUgZ2V0IHJhd1R5cGUgPT4gX3Jhd1R5cGUgPz89IG5ldyBJbnRlcmZhY2VUeXBlKHRoaXMpOwoKICBJbnRlcmZhY2VUeXBlIF90aGlzVHlwZTsKICBJbnRlcmZhY2VUeXBlIGdldCB0aGlzVHlwZSB7CiAgICByZXR1cm4gX3RoaXNUeXBlID8/PQogICAgICAgIG5ldyBJbnRlcmZhY2VUeXBlKHRoaXMsIF9nZXRBc1R5cGVBcmd1bWVudHModHlwZVBhcmFtZXRlcnMpKTsKICB9CgogIEludGVyZmFjZVR5cGUgX2JvdHRvbVR5cGU7CiAgSW50ZXJmYWNlVHlwZSBnZXQgYm90dG9tVHlwZSB7CiAgICByZXR1cm4gX2JvdHRvbVR5cGUgPz89IG5ldyBJbnRlcmZhY2VUeXBlKHRoaXMsCiAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+LmZpbGxlZCh0eXBlUGFyYW1ldGVycy5sZW5ndGgsIGNvbnN0IEJvdHRvbVR5cGUoKSkpOwogIH0KCiAgLy8vIFJldHVybnMgYSBwb3NzaWJseSBzeW50aGVzaXplZCBuYW1lIGZvciB0aGlzIGNsYXNzLCBjb25zaXN0ZW50IHdpdGgKICAvLy8gdGhlIG5hbWVzIHVzZWQgYWNyb3NzIGFsbCBbdG9TdHJpbmddIGNhbGxzLgogIFN0cmluZyB0b1N0cmluZygpID0+IGRlYnVnUXVhbGlmaWVkQ2xhc3NOYW1lKHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdmlzaXRMaXN0KGFubm90YXRpb25zLCB2KTsKICAgIHZpc2l0TGlzdCh0eXBlUGFyYW1ldGVycywgdik7CiAgICBzdXBlcnR5cGU/LmFjY2VwdCh2KTsKICAgIG1peGVkSW5UeXBlPy5hY2NlcHQodik7CiAgICB2aXNpdExpc3QoaW1wbGVtZW50ZWRUeXBlcywgdik7CiAgICB2aXNpdExpc3QoY29uc3RydWN0b3JzLCB2KTsKICAgIHZpc2l0TGlzdChwcm9jZWR1cmVzLCB2KTsKICAgIHZpc2l0TGlzdChmaWVsZHMsIHYpOwogICAgdmlzaXRMaXN0KHJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9ycywgdik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KGFubm90YXRpb25zLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybUxpc3QodHlwZVBhcmFtZXRlcnMsIHYsIHRoaXMpOwogICAgaWYgKHN1cGVydHlwZSAhPSBudWxsKSB7CiAgICAgIHN1cGVydHlwZSA9IHYudmlzaXRTdXBlcnR5cGUoc3VwZXJ0eXBlKTsKICAgIH0KICAgIGlmIChtaXhlZEluVHlwZSAhPSBudWxsKSB7CiAgICAgIG1peGVkSW5UeXBlID0gdi52aXNpdFN1cGVydHlwZShtaXhlZEluVHlwZSk7CiAgICB9CiAgICB0cmFuc2Zvcm1TdXBlcnR5cGVMaXN0KGltcGxlbWVudGVkVHlwZXMsIHYpOwogICAgdHJhbnNmb3JtTGlzdChjb25zdHJ1Y3RvcnMsIHYsIHRoaXMpOwogICAgdHJhbnNmb3JtTGlzdChwcm9jZWR1cmVzLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybUxpc3QoZmllbGRzLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybUxpc3QocmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzLCB2LCB0aGlzKTsKICB9CgogIExvY2F0aW9uIF9nZXRMb2NhdGlvbkluRW5jbG9zaW5nRmlsZShpbnQgb2Zmc2V0KSB7CiAgICByZXR1cm4gX2dldExvY2F0aW9uSW5Db21wb25lbnQoZW5jbG9zaW5nQ29tcG9uZW50LCBmaWxlVXJpLCBvZmZzZXQpOwogIH0KfQoKLy8vIERlY2xhcmF0aW9uIG9mIGFuIGV4dGVuc2lvbi4KLy8vCi8vLyBUaGUgbWVtYmVycyBhcmUgY29udmVydGVkIGludG8gdG9wLWxldmVsIHByb2NlZHVyZXMgYW5kIG9ubHkgYWNjZXNzaWJsZQovLy8gYnkgcmVmZXJlbmNlIGluIHRoZSBbRXh0ZW5zaW9uXSBub2RlLgpjbGFzcyBFeHRlbnNpb24gZXh0ZW5kcyBOYW1lZE5vZGUgaW1wbGVtZW50cyBGaWxlVXJpTm9kZSB7CiAgLy8vIE5hbWUgb2YgdGhlIGV4dGVuc2lvbi4KICAvLy8KICAvLy8gSWYgdW5uYW1lZCwgdGhlIGV4dGVuc2lvbiB3aWxsIGJlIGdpdmVuIGEgc3ludGhlc2l6ZWQgbmFtZSBieSB0aGUKICAvLy8gZnJvbnQgZW5kLgogIFN0cmluZyBuYW1lOwoKICAvLy8gVGhlIFVSSSBvZiB0aGUgc291cmNlIGZpbGUgdGhpcyBjbGFzcyB3YXMgbG9hZGVkIGZyb20uCiAgVXJpIGZpbGVVcmk7CgogIC8vLyBUeXBlIHBhcmFtZXRlcnMgZGVjbGFyZWQgb24gdGhlIGV4dGVuc2lvbi4KICBmaW5hbCBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzOwoKICAvLy8gVGhlIHR5cGUgaW4gdGhlICdvbiBjbGF1c2UnIG9mIHRoZSBleHRlbnNpb24gZGVjbGFyYXRpb24uCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBBIGluOgogIC8vLwogIC8vLyAgIGNsYXNzIEEge30KICAvLy8gICBleHRlbnNpb24gQiBvbiBBIHt9CiAgLy8vCiAgRGFydFR5cGUgb25UeXBlOwoKICAvLy8gVGhlIG1lbWJlcnMgZGVjbGFyZWQgYnkgdGhlIGV4dGVuc2lvbi4KICAvLy8KICAvLy8gVGhlIG1lbWJlcnMgYXJlIGNvbnZlcnRlZCBpbnRvIHRvcC1sZXZlbCBtZW1iZXJzIGFuZCBvbmx5IGFjY2Vzc2libGUKICAvLy8gYnkgcmVmZXJlbmNlIHRocm91Z2ggW0V4dGVuc2lvbk1lbWJlckRlc2NyaXB0b3JdLgogIGZpbmFsIExpc3Q8RXh0ZW5zaW9uTWVtYmVyRGVzY3JpcHRvcj4gbWVtYmVyczsKCiAgRXh0ZW5zaW9uKAogICAgICB7dGhpcy5uYW1lLAogICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzLAogICAgICB0aGlzLm9uVHlwZSwKICAgICAgTGlzdDxSZWZlcmVuY2U+IG1lbWJlcnMsCiAgICAgIHRoaXMuZmlsZVVyaSwKICAgICAgUmVmZXJlbmNlIHJlZmVyZW5jZX0pCiAgICAgIDogdGhpcy50eXBlUGFyYW1ldGVycyA9IHR5cGVQYXJhbWV0ZXJzID8/IDxUeXBlUGFyYW1ldGVyPltdLAogICAgICAgIHRoaXMubWVtYmVycyA9IG1lbWJlcnMgPz8gPEV4dGVuc2lvbk1lbWJlckRlc2NyaXB0b3I+W10sCiAgICAgICAgc3VwZXIocmVmZXJlbmNlKTsKCiAgTGlicmFyeSBnZXQgZW5jbG9zaW5nTGlicmFyeSA9PiBwYXJlbnQ7CgogIEBvdmVycmlkZQogIGFjY2VwdChUcmVlVmlzaXRvciB2KSA9PiB2LnZpc2l0RXh0ZW5zaW9uKHRoaXMpOwoKICBAb3ZlcnJpZGUKICB2aXNpdENoaWxkcmVuKFZpc2l0b3Igdikge30KCiAgQG92ZXJyaWRlCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgPT4gdi52aXNpdEV4dGVuc2lvbih0aGlzKTsKfQoKZW51bSBFeHRlbnNpb25NZW1iZXJLaW5kIHsKICBGaWVsZCwKICBNZXRob2QsCiAgR2V0dGVyLAogIFNldHRlciwKICBPcGVyYXRvciwKICBUZWFyT2ZmLAp9CgovLy8gSW5mb3JtYXRpb24gYWJvdXQgYW4gbWVtYmVyIGRlY2xhcmF0aW9uIGluIGFuIGV4dGVuc2lvbi4KY2xhc3MgRXh0ZW5zaW9uTWVtYmVyRGVzY3JpcHRvciB7CiAgc3RhdGljIGNvbnN0IGludCBGbGFnU3RhdGljID0gMSA8PCAwOyAvLyBNdXN0IG1hdGNoIHNlcmlhbGl6ZWQgYml0IHBvc2l0aW9ucy4KICBzdGF0aWMgY29uc3QgaW50IEZsYWdFeHRlcm5hbCA9IDEgPDwgMTsKCiAgLy8vIFRoZSBuYW1lIG9mIHRoZSBleHRlbnNpb24gbWVtYmVyLgogIC8vLwogIC8vLyBUaGUgbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIHRvcC1sZXZlbCBtZW1iZXIgaXMgbWFuZ2xlZCB0byBlbnN1cmUKICAvLy8gdW5pcXVlbmVzcy4gVGhpcyBuYW1lIGlzIHVzZWQgdG8gbG9va3VwIGFuIGV4dGVuc2lvbiBtZXRob2QgdGhlCiAgLy8vIGV4dGVuc2lvbiBpdHNlbGYuCiAgTmFtZSBuYW1lOwoKICAvLy8gW0V4dGVuc2lvbk1lbWJlcktpbmRdIGtpbmQgb2YgdGhlIG9yaWdpbmFsIG1lbWJlci4KICAvLy8KICAvLy8gQW4gZXh0ZW5zaW9uIG1ldGhvZCBpcyBjb252ZXJ0ZWQgaW50byBhIHJlZ3VsYXIgdG9wLWxldmVsIG1ldGhvZC4gRm9yCiAgLy8vIGluc3RhbmNlOgogIC8vLwogIC8vLyAgICAgY2xhc3MgQSB7CiAgLy8vICAgICAgIHZhciBmb287CiAgLy8vICAgICB9CiAgLy8vICAgICBleHRlbnNpb24gQiBvbiBBIHsKICAvLy8gICAgICAgZ2V0IGJhciA9PiB0aGlzLmZvbzsKICAvLy8gICAgIH0KICAvLy8KICAvLy8gd2lsbCBiZSBjb252ZXJ0ZWQgaW50bwogIC8vLwogIC8vLyAgICAgY2xhc3MgQSB7fQogIC8vLyAgICAgQnxnZXQjYmFyKEEgI3RoaXMpID0+ICN0aGlzLmZvbzsKICAvLy8KICAvLy8gd2hlcmUgYEJ8Z2V0I2JhcmAgaXMgdGhlIHN5bnRoZXNpemVkIG5hbWUgb2YgdGhlIHRvcC1sZXZlbCBtZXRob2QgYW5kCiAgLy8vIGAjdGhpc2AgaXMgdGhlIHN5bnRoZXNpemVkIHBhcmFtZXRlciB0aGF0IGhvbGRzIHJlcHJlc2VudHMgYHRoaXNgLgogIC8vLwogIEV4dGVuc2lvbk1lbWJlcktpbmQga2luZDsKCiAgaW50IGZsYWdzID0gMDsKCiAgLy8vIFJlZmVyZW5jZSB0byB0aGUgdG9wLWxldmVsIG1lbWJlciBjcmVhdGVkIGZvciB0aGUgZXh0ZW5zaW9uIG1ldGhvZC4KICBSZWZlcmVuY2UgbWVtYmVyOwoKICBFeHRlbnNpb25NZW1iZXJEZXNjcmlwdG9yKAogICAgICB7dGhpcy5uYW1lLAogICAgICB0aGlzLmtpbmQsCiAgICAgIGJvb2wgaXNTdGF0aWM6IGZhbHNlLAogICAgICBib29sIGlzRXh0ZXJuYWw6IGZhbHNlLAogICAgICB0aGlzLm1lbWJlcn0pIHsKICAgIHRoaXMuaXNTdGF0aWMgPSBpc1N0YXRpYzsKICAgIHRoaXMuaXNFeHRlcm5hbCA9IGlzRXh0ZXJuYWw7CiAgfQoKICAvLy8gUmV0dXJuIGB0cnVlYCBpZiB0aGUgZXh0ZW5zaW9uIG1ldGhvZCB3YXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuCiAgYm9vbCBnZXQgaXNTdGF0aWMgPT4gZmxhZ3MgJiBGbGFnU3RhdGljICE9IDA7CgogIC8vLyBSZXR1cm4gYHRydWVgIGlmIHRoZSBleHRlbnNpb24gbWV0aG9kIHdhcyBkZWNsYXJlZCBhcyBgZXh0ZXJuYWxgLgogIGJvb2wgZ2V0IGlzRXh0ZXJuYWwgPT4gZmxhZ3MgJiBGbGFnRXh0ZXJuYWwgIT0gMDsKCiAgdm9pZCBzZXQgaXNTdGF0aWMoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdTdGF0aWMpIDogKGZsYWdzICYgfkZsYWdTdGF0aWMpOwogIH0KCiAgdm9pZCBzZXQgaXNFeHRlcm5hbChib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlID8gKGZsYWdzIHwgRmxhZ0V4dGVybmFsKSA6IChmbGFncyAmIH5GbGFnRXh0ZXJuYWwpOwogIH0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FTUJFUlMKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgphYnN0cmFjdCBjbGFzcyBNZW1iZXIgZXh0ZW5kcyBOYW1lZE5vZGUgaW1wbGVtZW50cyBBbm5vdGF0YWJsZSwgRmlsZVVyaU5vZGUgewogIC8vLyBFbmQgb2Zmc2V0IGluIHRoZSBzb3VyY2UgZmlsZSBpdCBjb21lcyBmcm9tLgogIC8vLwogIC8vLyBWYWxpZCB2YWx1ZXMgYXJlIGZyb20gMCBhbmQgdXAsIG9yIC0xIChbVHJlZU5vZGUubm9PZmZzZXRdKSBpZiB0aGUgZmlsZQogIC8vLyBlbmQgb2Zmc2V0IGlzIG5vdCBhdmFpbGFibGUgKHRoaXMgaXMgdGhlIGRlZmF1bHQgaWYgbm9uZSBpcyBzcGVjaWZpY2FsbHkKICAvLy8gc2V0KS4KICBpbnQgZmlsZUVuZE9mZnNldCA9IFRyZWVOb2RlLm5vT2Zmc2V0OwoKICAvLy8gTGlzdCBvZiBtZXRhZGF0YSBhbm5vdGF0aW9ucyBvbiB0aGUgbWVtYmVyLgogIC8vLwogIC8vLyBUaGlzIGRlZmF1bHRzIHRvIGFuIGltbXV0YWJsZSBlbXB0eSBsaXN0LiBVc2UgW2FkZEFubm90YXRpb25dIHRvIGFkZAogIC8vLyBhbm5vdGF0aW9ucyBpZiBuZWVkZWQuCiAgTGlzdDxFeHByZXNzaW9uPiBhbm5vdGF0aW9ucyA9IGNvbnN0IDxFeHByZXNzaW9uPltdOwoKICBOYW1lIG5hbWU7CgogIC8vLyBUaGUgVVJJIG9mIHRoZSBzb3VyY2UgZmlsZSB0aGlzIG1lbWJlciB3YXMgbG9hZGVkIGZyb20uCiAgVXJpIGZpbGVVcmk7CgogIC8vLyBGbGFncyBzdW1tYXJpemluZyB0aGUga2luZHMgb2YgQVNUIG5vZGVzIGNvbnRhaW5lZCBpbiB0aGlzIG1lbWJlciwgZm9yCiAgLy8vIHNwZWVkaW5nIHVwIHRyYW5zZm9ybWF0aW9ucyB0aGF0IG9ubHkgYWZmZWN0IGNlcnRhaW4gdHlwZXMgb2Ygbm9kZXMuCiAgLy8vCiAgLy8vIFNlZSBbVHJhbnNmb3JtZXJGbGFnXSBmb3IgdGhlIG1lYW5pbmcgb2YgZWFjaCBiaXQuCiAgLy8vCiAgLy8vIFRoZXNlIHNob3VsZCBub3QgYmUgdXNlZCBmb3IgYW55IHB1cnBvc2Ugb3RoZXIgdGhhbiBza2lwcGluZyBjZXJ0YWluCiAgLy8vIG1lbWJlcnMgaWYgaXQgY2FuIGJlIGRldGVybWluZWQgdGhhdCBubyB3b3JrIGlzIG5lZWRlZCBpbiB0aGVyZS4KICAvLy8KICAvLy8gSXQgaXMgdmFsaWQgZm9yIHRoZXNlIGZsYWdzIHRvIGJlIGZhbHNlIHBvc2l0aXZlcyBpbiByYXJlIGNhc2VzLCBzbwogIC8vLyB0cmFuc2Zvcm1lcnMgbXVzdCB0b2xlcmF0ZSB0aGUgY2FzZSB3aGVyZSBhIGZsYWcgaXMgc3B1cmlvdXNseSBzZXQuCiAgLy8vCiAgLy8vIFRoaXMgdmFsdWUgaXMgbm90IHNlcmlhbGl6ZWQ7IGl0IGlzIHBvcHVsYXRlZCBieSB0aGUgZnJvbnRlbmQgYW5kIHRoZQogIC8vLyBkZXNlcmlhbGl6ZXIuCiAgLy8KICAvLyBUT0RPKGFzZ2VyZik6IEl0IG1pZ2h0IGJlIHdvcnRod2hpbGUgdG8gcHV0IHRoaXMgb24gY2xhc3NlcyBhcyB3ZWxsLgogIGludCB0cmFuc2Zvcm1lckZsYWdzID0gMDsKCiAgTWVtYmVyKHRoaXMubmFtZSwgdGhpcy5maWxlVXJpLCBSZWZlcmVuY2UgcmVmZXJlbmNlKSA6IHN1cGVyKHJlZmVyZW5jZSk7CgogIENsYXNzIGdldCBlbmNsb3NpbmdDbGFzcyA9PiBwYXJlbnQgaXMgQ2xhc3MgPyBwYXJlbnQgOiBudWxsOwogIExpYnJhcnkgZ2V0IGVuY2xvc2luZ0xpYnJhcnkgPT4gcGFyZW50IGlzIENsYXNzID8gcGFyZW50LnBhcmVudCA6IHBhcmVudDsKCiAgYWNjZXB0KE1lbWJlclZpc2l0b3Igdik7CiAgYWNjZXB0UmVmZXJlbmNlKE1lbWJlclJlZmVyZW5jZVZpc2l0b3Igdik7CgogIC8vLyBJZiB0cnVlLCB0aGUgbWVtYmVyIGlzIHBhcnQgb2YgYW4gZXh0ZXJuYWwgbGlicmFyeSwgdGhhdCBpcywgaXQgaXMgZGVmaW5lZAogIC8vLyBpbiBhbm90aGVyIGJ1aWxkIHVuaXQuICBTdWNoIG1lbWJlcnMgaGF2ZSBubyBib2R5IG9yIGluaXRpYWxpemVyIHByZXNlbnQKICAvLy8gaW4gdGhlIElSLgogIGJvb2wgZ2V0IGlzSW5FeHRlcm5hbExpYnJhcnkgPT4gZW5jbG9zaW5nTGlicmFyeS5pc0V4dGVybmFsOwoKICAvLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgaXMgYW4gYWJzdHJhY3QgcHJvY2VkdXJlLgogIGJvb2wgZ2V0IGlzQWJzdHJhY3QgPT4gZmFsc2U7CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIG1lbWJlciBoYXMgdGhlICdjb25zdCcgbW9kaWZpZXIuCiAgYm9vbCBnZXQgaXNDb25zdDsKCiAgLy8vIFRydWUgaWYgdGhpcyBpcyBhIGZpZWxkIG9yIG5vbi1zZXR0ZXIgcHJvY2VkdXJlLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgb3BlcmF0b3JzIGFuZCBmYWN0b3JpZXMgcmV0dXJuIGB0cnVlYCwgZXZlbiB0aG91Z2ggdGhlcmUgYXJlCiAgLy8vIG5vcm1hbGx5IG5vIGNhbGxzIHRvIHRoZWlyIGdldHRlci4KICBib29sIGdldCBoYXNHZXR0ZXI7CgogIC8vLyBUcnVlIGlmIHRoaXMgaXMgYSBzZXR0ZXIgb3IgYSBtdXRhYmxlIGZpZWxkLgogIGJvb2wgZ2V0IGhhc1NldHRlcjsKCiAgLy8vIFRydWUgaWYgdGhpcyBpcyBhIG5vbi1zdGF0aWMgZmllbGQgb3IgcHJvY2VkdXJlLgogIGJvb2wgZ2V0IGlzSW5zdGFuY2VNZW1iZXI7CgogIC8vLyBUcnVlIGlmIHRoZSBtZW1iZXIgaGFzIHRoZSBgZXh0ZXJuYWxgIG1vZGlmaWVyLCBpbXBseWluZyB0aGF0IHRoZQogIC8vLyBpbXBsZW1lbnRhdGlvbiBpcyBwcm92aWRlZCBieSB0aGUgYmFja2VuZCwgYW5kIGlzIG5vdCBuZWNlc3NhcmlseSB3cml0dGVuCiAgLy8vIGluIERhcnQuCiAgLy8vCiAgLy8vIE1lbWJlcnMgY2FuIGhhdmUgdGhpcyBtb2RpZmllciBpbmRlcGVuZGVudGx5IG9mIHdoZXRoZXIgdGhlIGVuY2xvc2luZwogIC8vLyBsaWJyYXJ5IGlzIGV4dGVybmFsLgogIGJvb2wgZ2V0IGlzRXh0ZXJuYWw7CiAgdm9pZCBzZXQgaXNFeHRlcm5hbChib29sIHZhbHVlKTsKCiAgLy8vIElmIGB0cnVlYCB0aGlzIG1lbWJlciBpcyBjb21waWxlZCBmcm9tIGEgbWVtYmVyIGRlY2xhcmVkIGluIGFuIGV4dGVuc2lvbgogIC8vLyBkZWNsYXJhdGlvbi4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGBmaWVsZGAsIGBtZXRob2QxYCBhbmQgYG1ldGhvZDJgIGluOgogIC8vLwogIC8vLyAgICAgZXh0ZW5zaW9uIEEgb24gQiB7CiAgLy8vICAgICAgIHN0YXRpYyB2YXIgZmllbGQ7CiAgLy8vICAgICAgIEIgbWV0aG9kMSgpID0+IHRoaXM7CiAgLy8vICAgICAgIHN0YXRpYyBCIG1ldGhvZDIoKSA9PiBuZXcgQigpOwogIC8vLyAgICAgfQogIC8vLwogIGJvb2wgZ2V0IGlzRXh0ZW5zaW9uTWVtYmVyOwoKICAvLy8gVGhlIGJvZHkgb2YgdGhlIHByb2NlZHVyZSBvciBjb25zdHJ1Y3Rvciwgb3IgYG51bGxgIGlmIHRoaXMgaXMgYSBmaWVsZC4KICBGdW5jdGlvbk5vZGUgZ2V0IGZ1bmN0aW9uID0+IG51bGw7CgogIC8vLyBSZXR1cm5zIGEgcG9zc2libHkgc3ludGhlc2l6ZWQgbmFtZSBmb3IgdGhpcyBtZW1iZXIsIGNvbnNpc3RlbnQgd2l0aAogIC8vLyB0aGUgbmFtZXMgdXNlZCBhY3Jvc3MgYWxsIFt0b1N0cmluZ10gY2FsbHMuCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gZGVidWdRdWFsaWZpZWRNZW1iZXJOYW1lKHRoaXMpOwoKICB2b2lkIGFkZEFubm90YXRpb24oRXhwcmVzc2lvbiBub2RlKSB7CiAgICBpZiAoYW5ub3RhdGlvbnMuaXNFbXB0eSkgewogICAgICBhbm5vdGF0aW9ucyA9IDxFeHByZXNzaW9uPltdOwogICAgfQogICAgYW5ub3RhdGlvbnMuYWRkKG5vZGUpOwogICAgbm9kZS5wYXJlbnQgPSB0aGlzOwogIH0KCiAgRGFydFR5cGUgZ2V0IGdldHRlclR5cGU7CiAgRGFydFR5cGUgZ2V0IHNldHRlclR5cGU7CgogIGJvb2wgZ2V0IGNvbnRhaW5zU3VwZXJDYWxscyB7CiAgICByZXR1cm4gdHJhbnNmb3JtZXJGbGFncyAmIFRyYW5zZm9ybWVyRmxhZy5zdXBlckNhbGxzICE9IDA7CiAgfQp9CgovLy8gQSBmaWVsZCBkZWNsYXJhdGlvbi4KLy8vCi8vLyBUaGUgaW1wbGllZCBnZXR0ZXIgYW5kIHNldHRlciBmb3IgdGhlIGZpZWxkIGFyZSBub3QgcmVwcmVzZW50ZWQgZXhwbGljaXRseSwKLy8vIGJ1dCBjYW4gYmUgbWFkZSBleHBsaWNpdCBpZiBuZWVkZWQuCmNsYXNzIEZpZWxkIGV4dGVuZHMgTWVtYmVyIHsKICBEYXJ0VHlwZSB0eXBlOyAvLyBOb3QgbnVsbC4gRGVmYXVsdHMgdG8gRHluYW1pY1R5cGUuCiAgaW50IGZsYWdzID0gMDsKICBFeHByZXNzaW9uIGluaXRpYWxpemVyOyAvLyBNYXkgYmUgbnVsbC4KCiAgRmllbGQoTmFtZSBuYW1lLAogICAgICB7dGhpcy50eXBlOiBjb25zdCBEeW5hbWljVHlwZSgpLAogICAgICB0aGlzLmluaXRpYWxpemVyLAogICAgICBib29sIGlzQ292YXJpYW50OiBmYWxzZSwKICAgICAgYm9vbCBpc0ZpbmFsOiBmYWxzZSwKICAgICAgYm9vbCBpc0NvbnN0OiBmYWxzZSwKICAgICAgYm9vbCBpc1N0YXRpYzogZmFsc2UsCiAgICAgIGJvb2wgaGFzSW1wbGljaXRHZXR0ZXIsCiAgICAgIGJvb2wgaGFzSW1wbGljaXRTZXR0ZXIsCiAgICAgIGJvb2wgaXNMYXRlOiBmYWxzZSwKICAgICAgaW50IHRyYW5zZm9ybWVyRmxhZ3M6IDAsCiAgICAgIFVyaSBmaWxlVXJpLAogICAgICBSZWZlcmVuY2UgcmVmZXJlbmNlfSkKICAgICAgOiBzdXBlcihuYW1lLCBmaWxlVXJpLCByZWZlcmVuY2UpIHsKICAgIGFzc2VydCh0eXBlICE9IG51bGwpOwogICAgaW5pdGlhbGl6ZXI/LnBhcmVudCA9IHRoaXM7CiAgICB0aGlzLmlzQ292YXJpYW50ID0gaXNDb3ZhcmlhbnQ7CiAgICB0aGlzLmlzRmluYWwgPSBpc0ZpbmFsOwogICAgdGhpcy5pc0NvbnN0ID0gaXNDb25zdDsKICAgIHRoaXMuaXNTdGF0aWMgPSBpc1N0YXRpYzsKICAgIHRoaXMuaXNMYXRlID0gaXNMYXRlOwogICAgdGhpcy5oYXNJbXBsaWNpdEdldHRlciA9IGhhc0ltcGxpY2l0R2V0dGVyID8/ICFpc1N0YXRpYzsKICAgIHRoaXMuaGFzSW1wbGljaXRTZXR0ZXIgPSBoYXNJbXBsaWNpdFNldHRlciA/PyAoIWlzU3RhdGljICYmICFpc0ZpbmFsKTsKICAgIHRoaXMudHJhbnNmb3JtZXJGbGFncyA9IHRyYW5zZm9ybWVyRmxhZ3M7CiAgfQoKICBzdGF0aWMgY29uc3QgaW50IEZsYWdGaW5hbCA9IDEgPDwgMDsgLy8gTXVzdCBtYXRjaCBzZXJpYWxpemVkIGJpdCBwb3NpdGlvbnMuCiAgc3RhdGljIGNvbnN0IGludCBGbGFnQ29uc3QgPSAxIDw8IDE7CiAgc3RhdGljIGNvbnN0IGludCBGbGFnU3RhdGljID0gMSA8PCAyOwogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ0hhc0ltcGxpY2l0R2V0dGVyID0gMSA8PCAzOwogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ0hhc0ltcGxpY2l0U2V0dGVyID0gMSA8PCA0OwogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ0NvdmFyaWFudCA9IDEgPDwgNTsKICBzdGF0aWMgY29uc3QgaW50IEZsYWdHZW5lcmljQ292YXJpYW50SW1wbCA9IDEgPDwgNjsKICBzdGF0aWMgY29uc3QgaW50IEZsYWdMYXRlID0gMSA8PCA3OwogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ0V4dGVuc2lvbk1lbWJlciA9IDEgPDwgODsKCiAgLy8vIFdoZXRoZXIgdGhlIGZpZWxkIGlzIGRlY2xhcmVkIHdpdGggdGhlIGBjb3ZhcmlhbnRgIGtleXdvcmQuCiAgYm9vbCBnZXQgaXNDb3ZhcmlhbnQgPT4gZmxhZ3MgJiBGbGFnQ292YXJpYW50ICE9IDA7CgogIGJvb2wgZ2V0IGlzRmluYWwgPT4gZmxhZ3MgJiBGbGFnRmluYWwgIT0gMDsKICBib29sIGdldCBpc0NvbnN0ID0+IGZsYWdzICYgRmxhZ0NvbnN0ICE9IDA7CiAgYm9vbCBnZXQgaXNTdGF0aWMgPT4gZmxhZ3MgJiBGbGFnU3RhdGljICE9IDA7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRXh0ZW5zaW9uTWVtYmVyID0+IGZsYWdzICYgRmxhZ0V4dGVuc2lvbk1lbWJlciAhPSAwOwoKICAvLy8gSWYgdHJ1ZSwgYSBnZXR0ZXIgc2hvdWxkIGJlIGdlbmVyYXRlZCBmb3IgdGhpcyBmaWVsZC4KICAvLy8KICAvLy8gSWYgZmFsc2UsIHRoZXJlIG1heSBvciBtYXkgbm90IGV4aXN0IGFuIGV4cGxpY2l0IGdldHRlciBpbiB0aGUgc2FtZSBjbGFzcwogIC8vLyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGZpZWxkLgogIC8vLwogIC8vLyBCeSBkZWZhdWx0LCBhbGwgbm9uLXN0YXRpYyBmaWVsZHMgaGF2ZSBpbXBsaWNpdCBnZXR0ZXJzLgogIGJvb2wgZ2V0IGhhc0ltcGxpY2l0R2V0dGVyID0+IGZsYWdzICYgRmxhZ0hhc0ltcGxpY2l0R2V0dGVyICE9IDA7CgogIC8vLyBJZiB0cnVlLCBhIHNldHRlciBzaG91bGQgYmUgZ2VuZXJhdGVkIGZvciB0aGlzIGZpZWxkLgogIC8vLwogIC8vLyBJZiBmYWxzZSwgdGhlcmUgbWF5IG9yIG1heSBub3QgZXhpc3QgYW4gZXhwbGljaXQgc2V0dGVyIGluIHRoZSBzYW1lIGNsYXNzCiAgLy8vIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZmllbGQuCiAgLy8vCiAgLy8vIEZpbmFsIGZpZWxkcyBuZXZlciBoYXZlIGltcGxpY2l0IHNldHRlcnMsIGJ1dCBhIGZpZWxkIHdpdGhvdXQgYW4gaW1wbGljaXQKICAvLy8gc2V0dGVyIGlzIG5vdCBuZWNlc3NhcmlseSBmaW5hbCwgYXMgaXQgbWF5IGJlIG11dGF0ZWQgYnkgZGlyZWN0IGZpZWxkCiAgLy8vIGFjY2Vzcy4KICAvLy8KICAvLy8gQnkgZGVmYXVsdCwgYWxsIG5vbi1zdGF0aWMsIG5vbi1maW5hbCBmaWVsZHMgaGF2ZSBpbXBsaWNpdCBzZXR0ZXJzLgogIGJvb2wgZ2V0IGhhc0ltcGxpY2l0U2V0dGVyID0+IGZsYWdzICYgRmxhZ0hhc0ltcGxpY2l0U2V0dGVyICE9IDA7CgogIC8vLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgaW1wbGljaXQgc2V0dGVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZpZWxkIG5lZWRzIHRvCiAgLy8vIGNvbnRhaW4gYSBydW50aW1lIHR5cGUgY2hlY2sgdG8gZGVhbCB3aXRoIGdlbmVyaWMgY292YXJpYW5jZS4KICAvLy8KICAvLy8gV2hlbiBgdHJ1ZWAsIHJ1bnRpbWUgY2hlY2tzIG1heSBuZWVkIHRvIGJlIHBlcmZvcm1lZDsgc2VlCiAgLy8vIFtEaXNwYXRjaENhdGVnb3J5XSBmb3IgZGV0YWlscy4KICBib29sIGdldCBpc0dlbmVyaWNDb3ZhcmlhbnRJbXBsID0+IGZsYWdzICYgRmxhZ0dlbmVyaWNDb3ZhcmlhbnRJbXBsICE9IDA7CgogIC8vLyBXaGV0aGVyIHRoZSBmaWVsZCBpcyBkZWNsYXJlZCB3aXRoIHRoZSBgbGF0ZWAga2V5d29yZC4KICBib29sIGdldCBpc0xhdGUgPT4gZmxhZ3MgJiBGbGFnTGF0ZSAhPSAwOwoKICB2b2lkIHNldCBpc0NvdmFyaWFudChib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlID8gKGZsYWdzIHwgRmxhZ0NvdmFyaWFudCkgOiAoZmxhZ3MgJiB+RmxhZ0NvdmFyaWFudCk7CiAgfQoKICB2b2lkIHNldCBpc0ZpbmFsKGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUgPyAoZmxhZ3MgfCBGbGFnRmluYWwpIDogKGZsYWdzICYgfkZsYWdGaW5hbCk7CiAgfQoKICB2b2lkIHNldCBpc0NvbnN0KGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUgPyAoZmxhZ3MgfCBGbGFnQ29uc3QpIDogKGZsYWdzICYgfkZsYWdDb25zdCk7CiAgfQoKICB2b2lkIHNldCBpc1N0YXRpYyhib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlID8gKGZsYWdzIHwgRmxhZ1N0YXRpYykgOiAoZmxhZ3MgJiB+RmxhZ1N0YXRpYyk7CiAgfQoKICB2b2lkIHNldCBpc0V4dGVuc2lvbk1lbWJlcihib29sIHZhbHVlKSB7CiAgICBmbGFncyA9CiAgICAgICAgdmFsdWUgPyAoZmxhZ3MgfCBGbGFnRXh0ZW5zaW9uTWVtYmVyKSA6IChmbGFncyAmIH5GbGFnRXh0ZW5zaW9uTWVtYmVyKTsKICB9CgogIHZvaWQgc2V0IGhhc0ltcGxpY2l0R2V0dGVyKGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUKICAgICAgICA/IChmbGFncyB8IEZsYWdIYXNJbXBsaWNpdEdldHRlcikKICAgICAgICA6IChmbGFncyAmIH5GbGFnSGFzSW1wbGljaXRHZXR0ZXIpOwogIH0KCiAgdm9pZCBzZXQgaGFzSW1wbGljaXRTZXR0ZXIoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZQogICAgICAgID8gKGZsYWdzIHwgRmxhZ0hhc0ltcGxpY2l0U2V0dGVyKQogICAgICAgIDogKGZsYWdzICYgfkZsYWdIYXNJbXBsaWNpdFNldHRlcik7CiAgfQoKICB2b2lkIHNldCBpc0dlbmVyaWNDb3ZhcmlhbnRJbXBsKGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUKICAgICAgICA/IChmbGFncyB8IEZsYWdHZW5lcmljQ292YXJpYW50SW1wbCkKICAgICAgICA6IChmbGFncyAmIH5GbGFnR2VuZXJpY0NvdmFyaWFudEltcGwpOwogIH0KCiAgdm9pZCBzZXQgaXNMYXRlKGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUgPyAoZmxhZ3MgfCBGbGFnTGF0ZSkgOiAoZmxhZ3MgJiB+RmxhZ0xhdGUpOwogIH0KCiAgLy8vIFRydWUgaWYgdGhlIGZpZWxkIGlzIG5laXRoZXIgZmluYWwgbm9yIGNvbnN0LgogIGJvb2wgZ2V0IGlzTXV0YWJsZSA9PiBmbGFncyAmIChGbGFnRmluYWwgfCBGbGFnQ29uc3QpID09IDA7CiAgYm9vbCBnZXQgaXNJbnN0YW5jZU1lbWJlciA9PiAhaXNTdGF0aWM7CiAgYm9vbCBnZXQgaGFzR2V0dGVyID0+IHRydWU7CiAgYm9vbCBnZXQgaGFzU2V0dGVyID0+IGlzTXV0YWJsZTsKCiAgYm9vbCBnZXQgaXNFeHRlcm5hbCA9PiBmYWxzZTsKICB2b2lkIHNldCBpc0V4dGVybmFsKGJvb2wgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSkgdGhyb3cgJ0ZpZWxkcyBjYW5ub3QgYmUgZXh0ZXJuYWwnOwogIH0KCiAgYWNjZXB0KE1lbWJlclZpc2l0b3IgdikgPT4gdi52aXNpdEZpZWxkKHRoaXMpOwoKICBhY2NlcHRSZWZlcmVuY2UoTWVtYmVyUmVmZXJlbmNlVmlzaXRvciB2KSA9PiB2LnZpc2l0RmllbGRSZWZlcmVuY2UodGhpcyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB2aXNpdExpc3QoYW5ub3RhdGlvbnMsIHYpOwogICAgdHlwZT8uYWNjZXB0KHYpOwogICAgbmFtZT8uYWNjZXB0KHYpOwogICAgaW5pdGlhbGl6ZXI/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIHR5cGUgPSB2LnZpc2l0RGFydFR5cGUodHlwZSk7CiAgICB0cmFuc2Zvcm1MaXN0KGFubm90YXRpb25zLCB2LCB0aGlzKTsKICAgIGlmIChpbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgIGluaXRpYWxpemVyID0gaW5pdGlhbGl6ZXIuYWNjZXB0KHYpOwogICAgICBpbml0aWFsaXplcj8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9CgogIERhcnRUeXBlIGdldCBnZXR0ZXJUeXBlID0+IHR5cGU7CiAgRGFydFR5cGUgZ2V0IHNldHRlclR5cGUgPT4gaXNNdXRhYmxlID8gdHlwZSA6IGNvbnN0IEJvdHRvbVR5cGUoKTsKCiAgTG9jYXRpb24gX2dldExvY2F0aW9uSW5FbmNsb3NpbmdGaWxlKGludCBvZmZzZXQpIHsKICAgIHJldHVybiBfZ2V0TG9jYXRpb25JbkNvbXBvbmVudChlbmNsb3NpbmdDb21wb25lbnQsIGZpbGVVcmksIG9mZnNldCk7CiAgfQp9CgovLy8gQSBnZW5lcmF0aXZlIGNvbnN0cnVjdG9yLCBwb3NzaWJseSByZWRpcmVjdGluZy4KLy8vCi8vLyBOb3RlIHRoYXQgZmFjdG9yeSBjb25zdHJ1Y3RvcnMgYXJlIHRyZWF0ZWQgYXMgW1Byb2NlZHVyZV1zLgovLy8KLy8vIENvbnN0cnVjdG9ycyBkbyBub3QgdGFrZSB0eXBlIHBhcmFtZXRlcnMuICBUeXBlIGFyZ3VtZW50cyBmcm9tIGEgY29uc3RydWN0b3IKLy8vIGludm9jYXRpb24gc2hvdWxkIGJlIG1hdGNoZWQgd2l0aCB0aGUgdHlwZSBwYXJhbWV0ZXJzIGRlY2xhcmVkIGluIHRoZSBjbGFzcy4KLy8vCi8vLyBGb3IgdW5uYW1lZCBjb25zdHJ1Y3RvcnMsIHRoZSBuYW1lIGlzIGFuIGVtcHR5IHN0cmluZyAoaW4gYSBbTmFtZV0pLgpjbGFzcyBDb25zdHJ1Y3RvciBleHRlbmRzIE1lbWJlciB7CiAgLy8vIFN0YXJ0IG9mZnNldCBvZiB0aGUgY29uc3RydWN0b3IgaW4gdGhlIHNvdXJjZSBmaWxlIGl0IGNvbWVzIGZyb20uCiAgLy8vCiAgLy8vIE5vdGUgdGhhdCB0aGlzIGluY2x1ZGVzIGFubm90YXRpb25zIGlmIGFueS4KICAvLy8KICAvLy8gVmFsaWQgdmFsdWVzIGFyZSBmcm9tIDAgYW5kIHVwLCBvciAtMSAoW1RyZWVOb2RlLm5vT2Zmc2V0XSkgaWYgdGhlIGZpbGUKICAvLy8gc3RhcnQgb2Zmc2V0IGlzIG5vdCBhdmFpbGFibGUgKHRoaXMgaXMgdGhlIGRlZmF1bHQgaWYgbm9uZSBpcyBzcGVjaWZpY2FsbHkKICAvLy8gc2V0KS4KICBpbnQgc3RhcnRGaWxlT2Zmc2V0ID0gVHJlZU5vZGUubm9PZmZzZXQ7CgogIGludCBmbGFncyA9IDA7CiAgRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uOwogIExpc3Q8SW5pdGlhbGl6ZXI+IGluaXRpYWxpemVyczsKCiAgQ29uc3RydWN0b3IodGhpcy5mdW5jdGlvbiwKICAgICAge05hbWUgbmFtZSwKICAgICAgYm9vbCBpc0NvbnN0OiBmYWxzZSwKICAgICAgYm9vbCBpc0V4dGVybmFsOiBmYWxzZSwKICAgICAgYm9vbCBpc1N5bnRoZXRpYzogZmFsc2UsCiAgICAgIExpc3Q8SW5pdGlhbGl6ZXI+IGluaXRpYWxpemVycywKICAgICAgaW50IHRyYW5zZm9ybWVyRmxhZ3M6IDAsCiAgICAgIFVyaSBmaWxlVXJpLAogICAgICBSZWZlcmVuY2UgcmVmZXJlbmNlfSkKICAgICAgOiB0aGlzLmluaXRpYWxpemVycyA9IGluaXRpYWxpemVycyA/PyA8SW5pdGlhbGl6ZXI+W10sCiAgICAgICAgc3VwZXIobmFtZSwgZmlsZVVyaSwgcmVmZXJlbmNlKSB7CiAgICBmdW5jdGlvbj8ucGFyZW50ID0gdGhpczsKICAgIHNldFBhcmVudHModGhpcy5pbml0aWFsaXplcnMsIHRoaXMpOwogICAgdGhpcy5pc0NvbnN0ID0gaXNDb25zdDsKICAgIHRoaXMuaXNFeHRlcm5hbCA9IGlzRXh0ZXJuYWw7CiAgICB0aGlzLmlzU3ludGhldGljID0gaXNTeW50aGV0aWM7CiAgICB0aGlzLnRyYW5zZm9ybWVyRmxhZ3MgPSB0cmFuc2Zvcm1lckZsYWdzOwogIH0KCiAgc3RhdGljIGNvbnN0IGludCBGbGFnQ29uc3QgPSAxIDw8IDA7IC8vIE11c3QgbWF0Y2ggc2VyaWFsaXplZCBiaXQgcG9zaXRpb25zLgogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ0V4dGVybmFsID0gMSA8PCAxOwogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ1N5bnRoZXRpYyA9IDEgPDwgMjsKCiAgYm9vbCBnZXQgaXNDb25zdCA9PiBmbGFncyAmIEZsYWdDb25zdCAhPSAwOwogIGJvb2wgZ2V0IGlzRXh0ZXJuYWwgPT4gZmxhZ3MgJiBGbGFnRXh0ZXJuYWwgIT0gMDsKCiAgLy8vIFRydWUgaWYgdGhpcyBpcyBhIHN5bnRoZXRpYyBjb25zdHJ1Y3RvciBpbnNlcnRlZCBpbiBhIGNsYXNzIHRoYXQKICAvLy8gZG9lcyBub3Qgb3RoZXJ3aXNlIGRlY2xhcmUgYW55IGNvbnN0cnVjdG9ycy4KICBib29sIGdldCBpc1N5bnRoZXRpYyA9PiBmbGFncyAmIEZsYWdTeW50aGV0aWMgIT0gMDsKCiAgdm9pZCBzZXQgaXNDb25zdChib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlID8gKGZsYWdzIHwgRmxhZ0NvbnN0KSA6IChmbGFncyAmIH5GbGFnQ29uc3QpOwogIH0KCiAgdm9pZCBzZXQgaXNFeHRlcm5hbChib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlID8gKGZsYWdzIHwgRmxhZ0V4dGVybmFsKSA6IChmbGFncyAmIH5GbGFnRXh0ZXJuYWwpOwogIH0KCiAgdm9pZCBzZXQgaXNTeW50aGV0aWMoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdTeW50aGV0aWMpIDogKGZsYWdzICYgfkZsYWdTeW50aGV0aWMpOwogIH0KCiAgYm9vbCBnZXQgaXNJbnN0YW5jZU1lbWJlciA9PiBmYWxzZTsKICBib29sIGdldCBoYXNHZXR0ZXIgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaGFzU2V0dGVyID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0V4dGVuc2lvbk1lbWJlciA9PiBmYWxzZTsKCiAgYWNjZXB0KE1lbWJlclZpc2l0b3IgdikgPT4gdi52aXNpdENvbnN0cnVjdG9yKHRoaXMpOwoKICBhY2NlcHRSZWZlcmVuY2UoTWVtYmVyUmVmZXJlbmNlVmlzaXRvciB2KSA9PgogICAgICB2LnZpc2l0Q29uc3RydWN0b3JSZWZlcmVuY2UodGhpcyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB2aXNpdExpc3QoYW5ub3RhdGlvbnMsIHYpOwogICAgbmFtZT8uYWNjZXB0KHYpOwogICAgdmlzaXRMaXN0KGluaXRpYWxpemVycywgdik7CiAgICBmdW5jdGlvbj8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgdHJhbnNmb3JtTGlzdChhbm5vdGF0aW9ucywgdiwgdGhpcyk7CiAgICB0cmFuc2Zvcm1MaXN0KGluaXRpYWxpemVycywgdiwgdGhpcyk7CiAgICBpZiAoZnVuY3Rpb24gIT0gbnVsbCkgewogICAgICBmdW5jdGlvbiA9IGZ1bmN0aW9uLmFjY2VwdCh2KTsKICAgICAgZnVuY3Rpb24/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQoKICBEYXJ0VHlwZSBnZXQgZ2V0dGVyVHlwZSA9PiBjb25zdCBCb3R0b21UeXBlKCk7CiAgRGFydFR5cGUgZ2V0IHNldHRlclR5cGUgPT4gY29uc3QgQm90dG9tVHlwZSgpOwoKICBMb2NhdGlvbiBfZ2V0TG9jYXRpb25JbkVuY2xvc2luZ0ZpbGUoaW50IG9mZnNldCkgewogICAgcmV0dXJuIF9nZXRMb2NhdGlvbkluQ29tcG9uZW50KGVuY2xvc2luZ0NvbXBvbmVudCwgZmlsZVVyaSwgb2Zmc2V0KTsKICB9Cn0KCi8vLyBSZXNpZHVlIG9mIGEgcmVkaXJlY3RpbmcgZmFjdG9yeSBjb25zdHJ1Y3RvciBmb3IgdGhlIGxpbmtpbmcgcGhhc2UuCi8vLwovLy8gSW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCBgYmFyYCBpcyBhIHJlZGlyZWN0aW5nIGZhY3RvcnkgY29uc3RydWN0b3IuCi8vLwovLy8gICAgIGNsYXNzIEEgewovLy8gICAgICAgQS5mb28oKTsKLy8vICAgICAgIGZhY3RvcnkgQS5iYXIoKSA9IEEuZm9vOwovLy8gICAgIH0KLy8vCi8vLyBBbiBpbnZvY2F0aW9uIG9mIGBuZXcgQS5iYXIoKWAgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBhbiBpbnZvY2F0aW9uIG9mCi8vLyBgbmV3IEEuZm9vKClgLiAgSW4gS2VybmVsLCB0aGUgaW52b2NhdGlvbnMgb2YgYGJhcmAgYXJlIHJlcGxhY2VkIHdpdGgKLy8vIGludm9jYXRpb25zIG9mIGBmb29gLCBhbmQgYWZ0ZXIgaXQgaXMgZG9uZSwgdGhlIHJlZGlyZWN0aW5nIGNvbnN0cnVjdG9yIGNhbgovLy8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBjbGFzcy4gIEhvd2V2ZXIsIGl0IGlzIG5lZWRlZCBkdXJpbmcgdGhlIGxpbmtpbmcgcGhhc2UsCi8vLyBiZWNhdXNlIG90aGVyIG1vZHVsZXMgY2FuIHJlZmVyIHRvIHRoYXQgY29uc3RydWN0b3IuCi8vLwovLy8gW1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yXXMgY29udGFpbiB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZvcgovLy8gbGlua2luZyBhbmQgYXJlIHRyZWF0ZWQgYXMgbm9uLXJ1bm5hYmxlIG1lbWJlcnMgb2YgY2xhc3NlcyB0aGF0IG1lcmVseSBzZXJ2ZQovLy8gYXMgY29udGFpbmVycyBmb3IgdGhhdCBpbmZvcm1hdGlvbi4KLy8vCi8vLyBSZWRpcmVjdGluZyBmYWN0b3J5IGNvbnN0cnVjdG9ycyBjYW4gYmUgdW5uYW1lZC4gIEluIHRoaXMgY2FzZSwgdGhlIG5hbWUgaXMKLy8vIGFuIGVtcHR5IHN0cmluZyAoaW4gYSBbTmFtZV0pLgpjbGFzcyBSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvciBleHRlbmRzIE1lbWJlciB7CiAgaW50IGZsYWdzID0gMDsKCiAgLy8vIFtSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvcl1zIG1heSByZWRpcmVjdCB0byBjb25zdHJ1Y3RvcnMgb3IgZmFjdG9yaWVzCiAgLy8vIG9mIGluc3RhbnRpYXRlZCBnZW5lcmljIHR5cGVzLCB0aGF0IGlzLCBnZW5lcmljIHR5cGVzIHdpdGggc3VwcGxpZWQgdHlwZQogIC8vLyBhcmd1bWVudHMuICBUaGUgc3VwcGxpZWQgdHlwZSBhcmd1bWVudHMgYXJlIHN0b3JlZCBpbiB0aGlzIGZpZWxkLgogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CgogIC8vLyBSZWZlcmVuY2UgdG8gdGhlIGNvbnN0cnVjdG9yIG9yIHRoZSBmYWN0b3J5IHRoYXQgdGhpcwogIC8vLyBbUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JdIHJlZGlyZWN0cyB0by4KICBSZWZlcmVuY2UgdGFyZ2V0UmVmZXJlbmNlOwoKICAvLy8gW3R5cGVQYXJhbWV0ZXJzXSBhcmUgZHVwbGljYXRlcyBvZiB0aGUgdHlwZSBwYXJhbWV0ZXJzIG9mIHRoZSBlbmNsb3NpbmcKICAvLy8gY2xhc3MuICBCZWNhdXNlIFtSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvcl1zIGFyZW4ndCBpbnN0YW5jZSBtZW1iZXJzLAogIC8vLyByZWZlcmVuY2VzIHRvIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgdGhlIGVuY2xvc2luZyBjbGFzcyBpbiB0aGUKICAvLy8gcmVkaXJlY3Rpb24gdGFyZ2V0IGRlc2NyaXB0aW9uIGFyZSBlbmNvZGVkIHdpdGggcmVmZXJlbmNlcyB0byB0aGUgZWxlbWVudHMKICAvLy8gb2YgW3R5cGVQYXJhbWV0ZXJzXS4KICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzOwoKICAvLy8gUG9zaXRpb25hbCBwYXJhbWV0ZXJzIG9mIFtSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvcl1zIHNob3VsZCBiZQogIC8vLyBjb21wYXRpYmxlIHdpdGggdGhhdCBvZiB0aGUgdGFyZ2V0IGNvbnN0cnVjdG9yLgogIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gcG9zaXRpb25hbFBhcmFtZXRlcnM7CiAgaW50IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ7CgogIC8vLyBOYW1lZCBwYXJhbWV0ZXJzIG9mIFtSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvcl1zIHNob3VsZCBiZSBjb21wYXRpYmxlCiAgLy8vIHdpdGggdGhhdCBvZiB0aGUgdGFyZ2V0IGNvbnN0cnVjdG9yLgogIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gbmFtZWRQYXJhbWV0ZXJzOwoKICBSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvcih0aGlzLnRhcmdldFJlZmVyZW5jZSwKICAgICAge05hbWUgbmFtZSwKICAgICAgYm9vbCBpc0NvbnN0OiBmYWxzZSwKICAgICAgYm9vbCBpc0V4dGVybmFsOiBmYWxzZSwKICAgICAgaW50IHRyYW5zZm9ybWVyRmxhZ3M6IDAsCiAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMsCiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gcG9zaXRpb25hbFBhcmFtZXRlcnMsCiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gbmFtZWRQYXJhbWV0ZXJzLAogICAgICBpbnQgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgVXJpIGZpbGVVcmksCiAgICAgIFJlZmVyZW5jZSByZWZlcmVuY2V9KQogICAgICA6IHRoaXMudHlwZUFyZ3VtZW50cyA9IHR5cGVBcmd1bWVudHMgPz8gPERhcnRUeXBlPltdLAogICAgICAgIHRoaXMudHlwZVBhcmFtZXRlcnMgPSB0eXBlUGFyYW1ldGVycyA/PyA8VHlwZVBhcmFtZXRlcj5bXSwKICAgICAgICB0aGlzLnBvc2l0aW9uYWxQYXJhbWV0ZXJzID0KICAgICAgICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnMgPz8gPFZhcmlhYmxlRGVjbGFyYXRpb24+W10sCiAgICAgICAgdGhpcy5uYW1lZFBhcmFtZXRlcnMgPSBuYW1lZFBhcmFtZXRlcnMgPz8gPFZhcmlhYmxlRGVjbGFyYXRpb24+W10sCiAgICAgICAgdGhpcy5yZXF1aXJlZFBhcmFtZXRlckNvdW50ID0KICAgICAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA/PyBwb3NpdGlvbmFsUGFyYW1ldGVycz8ubGVuZ3RoID8/IDAsCiAgICAgICAgc3VwZXIobmFtZSwgZmlsZVVyaSwgcmVmZXJlbmNlKSB7CiAgICBzZXRQYXJlbnRzKHRoaXMudHlwZVBhcmFtZXRlcnMsIHRoaXMpOwogICAgc2V0UGFyZW50cyh0aGlzLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLCB0aGlzKTsKICAgIHNldFBhcmVudHModGhpcy5uYW1lZFBhcmFtZXRlcnMsIHRoaXMpOwogICAgdGhpcy5pc0NvbnN0ID0gaXNDb25zdDsKICAgIHRoaXMuaXNFeHRlcm5hbCA9IGlzRXh0ZXJuYWw7CiAgICB0aGlzLnRyYW5zZm9ybWVyRmxhZ3MgPSB0cmFuc2Zvcm1lckZsYWdzOwogIH0KCiAgc3RhdGljIGNvbnN0IGludCBGbGFnQ29uc3QgPSAxIDw8IDA7IC8vIE11c3QgbWF0Y2ggc2VyaWFsaXplZCBiaXQgcG9zaXRpb25zLgogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ0V4dGVybmFsID0gMSA8PCAxOwoKICBib29sIGdldCBpc0NvbnN0ID0+IGZsYWdzICYgRmxhZ0NvbnN0ICE9IDA7CiAgYm9vbCBnZXQgaXNFeHRlcm5hbCA9PiBmbGFncyAmIEZsYWdFeHRlcm5hbCAhPSAwOwoKICB2b2lkIHNldCBpc0NvbnN0KGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUgPyAoZmxhZ3MgfCBGbGFnQ29uc3QpIDogKGZsYWdzICYgfkZsYWdDb25zdCk7CiAgfQoKICB2b2lkIHNldCBpc0V4dGVybmFsKGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUgPyAoZmxhZ3MgfCBGbGFnRXh0ZXJuYWwpIDogKGZsYWdzICYgfkZsYWdFeHRlcm5hbCk7CiAgfQoKICBib29sIGdldCBpc0luc3RhbmNlTWVtYmVyID0+IGZhbHNlOwogIGJvb2wgZ2V0IGhhc0dldHRlciA9PiBmYWxzZTsKICBib29sIGdldCBoYXNTZXR0ZXIgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRXh0ZW5zaW9uTWVtYmVyID0+IGZhbHNlOwoKICBib29sIGdldCBpc1VucmVzb2x2ZWQgPT4gdGFyZ2V0UmVmZXJlbmNlID09IG51bGw7CgogIE1lbWJlciBnZXQgdGFyZ2V0ID0+IHRhcmdldFJlZmVyZW5jZT8uYXNNZW1iZXI7CgogIHZvaWQgc2V0IHRhcmdldChNZW1iZXIgbWVtYmVyKSB7CiAgICBhc3NlcnQobWVtYmVyIGlzIENvbnN0cnVjdG9yIHx8CiAgICAgICAgKG1lbWJlciBpcyBQcm9jZWR1cmUgJiYgbWVtYmVyLmtpbmQgPT0gUHJvY2VkdXJlS2luZC5GYWN0b3J5KSk7CiAgICB0YXJnZXRSZWZlcmVuY2UgPSBnZXRNZW1iZXJSZWZlcmVuY2UobWVtYmVyKTsKICB9CgogIGFjY2VwdChNZW1iZXJWaXNpdG9yIHYpID0+IHYudmlzaXRSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvcih0aGlzKTsKCiAgYWNjZXB0UmVmZXJlbmNlKE1lbWJlclJlZmVyZW5jZVZpc2l0b3IgdikgPT4KICAgICAgdi52aXNpdFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yUmVmZXJlbmNlKHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdmlzaXRMaXN0KGFubm90YXRpb25zLCB2KTsKICAgIHRhcmdldD8uYWNjZXB0UmVmZXJlbmNlKHYpOwogICAgdmlzaXRMaXN0KHR5cGVBcmd1bWVudHMsIHYpOwogICAgbmFtZT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgdHJhbnNmb3JtTGlzdChhbm5vdGF0aW9ucywgdiwgdGhpcyk7CiAgICB0cmFuc2Zvcm1UeXBlTGlzdCh0eXBlQXJndW1lbnRzLCB2KTsKICB9CgogIERhcnRUeXBlIGdldCBnZXR0ZXJUeXBlID0+IGNvbnN0IEJvdHRvbVR5cGUoKTsKICBEYXJ0VHlwZSBnZXQgc2V0dGVyVHlwZSA9PiBjb25zdCBCb3R0b21UeXBlKCk7CgogIExvY2F0aW9uIF9nZXRMb2NhdGlvbkluRW5jbG9zaW5nRmlsZShpbnQgb2Zmc2V0KSB7CiAgICByZXR1cm4gX2dldExvY2F0aW9uSW5Db21wb25lbnQoZW5jbG9zaW5nQ29tcG9uZW50LCBmaWxlVXJpLCBvZmZzZXQpOwogIH0KfQoKLy8vIEEgbWV0aG9kLCBnZXR0ZXIsIHNldHRlciwgaW5kZXgtZ2V0dGVyLCBpbmRleC1zZXR0ZXIsIG9wZXJhdG9yIG92ZXJsb2FkZXIsCi8vLyBvciBmYWN0b3J5LgovLy8KLy8vIFByb2NlZHVyZXMgY2FuIGhhdmUgdGhlIHN0YXRpYywgYWJzdHJhY3QsIGFuZC9vciBleHRlcm5hbCBtb2RpZmllciwgYWx0aG91Z2gKLy8vIG9ubHkgdGhlIHN0YXRpYyBhbmQgZXh0ZXJuYWwgbW9kaWZpZXJzIG1heSBiZSB1c2VkIHRvZ2V0aGVyLgovLy8KLy8vIEZvciBub24tc3RhdGljIHByb2NlZHVyZXMgdGhlIG5hbWUgaXMgcmVxdWlyZWQgZm9yIGR5bmFtaWMgZGlzcGF0Y2guCi8vLyBGb3IgZXh0ZXJuYWwgcHJvY2VkdXJlcyB0aGUgbmFtZSBpcyByZXF1aXJlZCBmb3IgaWRlbnRpZnlpbmcgdGhlIGV4dGVybmFsCi8vLyBpbXBsZW1lbnRhdGlvbi4KLy8vCi8vLyBGb3IgbWV0aG9kcywgZ2V0dGVycywgYW5kIHNldHRlcnMgdGhlIG5hbWUgaXMganVzdCBhcyBpdCB3YXMgZGVjbGFyZWQuCi8vLyBGb3Igc2V0dGVycyB0aGlzIGRvZXMgbm90IGluY2x1ZGUgYSB0cmFpbGluZyBgPWAuCi8vLyBGb3IgaW5kZXgtZ2V0dGVycy9zZXR0ZXJzLCB0aGlzIGlzIGBbXWAgYW5kIGBbXT1gLgovLy8gRm9yIG9wZXJhdG9ycywgdGhpcyBpcyB0aGUgdG9rZW4gZm9yIHRoZSBvcGVyYXRvciwgZS5nLiBgK2Agb3IgYD09YCwKLy8vIGV4Y2VwdCBmb3IgdGhlIHVuYXJ5IG1pbnVzIG9wZXJhdG9yLCB3aG9zZSBuYW1lIGlzIGB1bmFyeS1gLgpjbGFzcyBQcm9jZWR1cmUgZXh0ZW5kcyBNZW1iZXIgewogIC8vLyBTdGFydCBvZmZzZXQgb2YgdGhlIGZ1bmN0aW9uIGluIHRoZSBzb3VyY2UgZmlsZSBpdCBjb21lcyBmcm9tLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgdGhpcyBpbmNsdWRlcyBhbm5vdGF0aW9ucyBpZiBhbnkuCiAgLy8vCiAgLy8vIFZhbGlkIHZhbHVlcyBhcmUgZnJvbSAwIGFuZCB1cCwgb3IgLTEgKFtUcmVlTm9kZS5ub09mZnNldF0pIGlmIHRoZSBmaWxlCiAgLy8vIHN0YXJ0IG9mZnNldCBpcyBub3QgYXZhaWxhYmxlICh0aGlzIGlzIHRoZSBkZWZhdWx0IGlmIG5vbmUgaXMgc3BlY2lmaWNhbGx5CiAgLy8vIHNldCkuCiAgaW50IHN0YXJ0RmlsZU9mZnNldCA9IFRyZWVOb2RlLm5vT2Zmc2V0OwoKICBQcm9jZWR1cmVLaW5kIGtpbmQ7CiAgaW50IGZsYWdzID0gMDsKICAvLyBmdW5jdGlvbiBpcyBudWxsIGlmIGFuZCBvbmx5IGlmIGFic3RyYWN0LCBleHRlcm5hbC4KICBGdW5jdGlvbk5vZGUgZnVuY3Rpb247CgogIC8vIFRoZSBmdW5jdGlvbiBub2RlJ3MgYm9keSBtaWdodCBiZSBsYXppbHkgbG9hZGVkLCBtZWFuaW5nIHRoYXQgdGhpcyB2YWx1ZQogIC8vIG1pZ2h0IG5vdCBiZSBzZXQgY29ycmVjdGx5IHlldC4gTWFrZSBzdXJlIHRoZSBib2R5IGlzIGxvYWRlZCBiZWZvcmUKICAvLyByZXR1cm5pbmcgYW55dGhpbmcuCiAgaW50IGdldCB0cmFuc2Zvcm1lckZsYWdzIHsKICAgIGZ1bmN0aW9uPy5ib2R5OwogICAgcmV0dXJuIHN1cGVyLnRyYW5zZm9ybWVyRmxhZ3M7CiAgfQoKICAvLyBUaGUgZnVuY3Rpb24gbm9kZSdzIGJvZHkgbWlnaHQgYmUgbGF6aWx5IGxvYWRlZCwgbWVhbmluZyB0aGF0IHRoaXMgdmFsdWUKICAvLyBtaWdodCBnZXQgb3ZlcndyaXR0ZW4gbGF0ZXIgKHdoZW4gdGhlIGJvZHkgaXMgcmVhZCkuIFRvIGF2b2lkIHRoYXQgcmVhZCB0aGUKICAvLyBib2R5IG5vdyBhbmQgb25seSBzZXQgdGhlIHZhbHVlIGFmdGVyd2FyZHMuCiAgdm9pZCBzZXQgdHJhbnNmb3JtZXJGbGFncyhpbnQgbmV3VmFsdWUpIHsKICAgIGZ1bmN0aW9uPy5ib2R5OwogICAgc3VwZXIudHJhbnNmb3JtZXJGbGFncyA9IG5ld1ZhbHVlOwogIH0KCiAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgdHJhbnNmb3JtZXIgZmxhZ3Mgd2l0aG91dCBsb2FkaW5nIHRoZSBib2R5LgogIC8vIFVzZWQgd2hlbiByZWFkaW5nIHRoZSBiaW5hcnkuIEZvciBvdGhlciBjYXNlcyBvbmUgc2hvdWxkIHByb2JhYmx5IHVzZQogIC8vIGB0cmFuc2Zvcm1lckZsYWdzID0gdmFsdWU7YC4KICB2b2lkIHNldFRyYW5zZm9ybWVyRmxhZ3NXaXRob3V0TGF6eUxvYWRpbmcoaW50IG5ld1ZhbHVlKSB7CiAgICBzdXBlci50cmFuc2Zvcm1lckZsYWdzID0gbmV3VmFsdWU7CiAgfQoKICBSZWZlcmVuY2UgZm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldFJlZmVyZW5jZTsKICBSZWZlcmVuY2UgZm9yd2FyZGluZ1N0dWJJbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2U7CgogIFByb2NlZHVyZShOYW1lIG5hbWUsIFByb2NlZHVyZUtpbmQga2luZCwgRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uLAogICAgICB7Ym9vbCBpc0Fic3RyYWN0OiBmYWxzZSwKICAgICAgYm9vbCBpc1N0YXRpYzogZmFsc2UsCiAgICAgIGJvb2wgaXNFeHRlcm5hbDogZmFsc2UsCiAgICAgIGJvb2wgaXNDb25zdDogZmFsc2UsCiAgICAgIGJvb2wgaXNGb3J3YXJkaW5nU3R1YjogZmFsc2UsCiAgICAgIGJvb2wgaXNGb3J3YXJkaW5nU2VtaVN0dWI6IGZhbHNlLAogICAgICBib29sIGlzRXh0ZW5zaW9uTWVtYmVyOiBmYWxzZSwKICAgICAgaW50IHRyYW5zZm9ybWVyRmxhZ3M6IDAsCiAgICAgIFVyaSBmaWxlVXJpLAogICAgICBSZWZlcmVuY2UgcmVmZXJlbmNlLAogICAgICBNZW1iZXIgZm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldCwKICAgICAgTWVtYmVyIGZvcndhcmRpbmdTdHViSW50ZXJmYWNlVGFyZ2V0fSkKICAgICAgOiB0aGlzLmJ5UmVmZXJlbmNlKG5hbWUsIGtpbmQsIGZ1bmN0aW9uLAogICAgICAgICAgICBpc0Fic3RyYWN0OiBpc0Fic3RyYWN0LAogICAgICAgICAgICBpc1N0YXRpYzogaXNTdGF0aWMsCiAgICAgICAgICAgIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwsCiAgICAgICAgICAgIGlzQ29uc3Q6IGlzQ29uc3QsCiAgICAgICAgICAgIGlzRm9yd2FyZGluZ1N0dWI6IGlzRm9yd2FyZGluZ1N0dWIsCiAgICAgICAgICAgIGlzRm9yd2FyZGluZ1NlbWlTdHViOiBpc0ZvcndhcmRpbmdTZW1pU3R1YiwKICAgICAgICAgICAgaXNFeHRlbnNpb25NZW1iZXI6IGlzRXh0ZW5zaW9uTWVtYmVyLAogICAgICAgICAgICB0cmFuc2Zvcm1lckZsYWdzOiB0cmFuc2Zvcm1lckZsYWdzLAogICAgICAgICAgICBmaWxlVXJpOiBmaWxlVXJpLAogICAgICAgICAgICByZWZlcmVuY2U6IHJlZmVyZW5jZSwKICAgICAgICAgICAgZm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldFJlZmVyZW5jZToKICAgICAgICAgICAgICAgIGdldE1lbWJlclJlZmVyZW5jZShmb3J3YXJkaW5nU3R1YlN1cGVyVGFyZ2V0KSwKICAgICAgICAgICAgZm9yd2FyZGluZ1N0dWJJbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2U6CiAgICAgICAgICAgICAgICBnZXRNZW1iZXJSZWZlcmVuY2UoZm9yd2FyZGluZ1N0dWJJbnRlcmZhY2VUYXJnZXQpKTsKCiAgUHJvY2VkdXJlLmJ5UmVmZXJlbmNlKE5hbWUgbmFtZSwgdGhpcy5raW5kLCB0aGlzLmZ1bmN0aW9uLAogICAgICB7Ym9vbCBpc0Fic3RyYWN0OiBmYWxzZSwKICAgICAgYm9vbCBpc1N0YXRpYzogZmFsc2UsCiAgICAgIGJvb2wgaXNFeHRlcm5hbDogZmFsc2UsCiAgICAgIGJvb2wgaXNDb25zdDogZmFsc2UsCiAgICAgIGJvb2wgaXNGb3J3YXJkaW5nU3R1YjogZmFsc2UsCiAgICAgIGJvb2wgaXNGb3J3YXJkaW5nU2VtaVN0dWI6IGZhbHNlLAogICAgICBib29sIGlzRXh0ZW5zaW9uTWVtYmVyOiBmYWxzZSwKICAgICAgaW50IHRyYW5zZm9ybWVyRmxhZ3M6IDAsCiAgICAgIFVyaSBmaWxlVXJpLAogICAgICBSZWZlcmVuY2UgcmVmZXJlbmNlLAogICAgICB0aGlzLmZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXRSZWZlcmVuY2UsCiAgICAgIHRoaXMuZm9yd2FyZGluZ1N0dWJJbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2V9KQogICAgICA6IHN1cGVyKG5hbWUsIGZpbGVVcmksIHJlZmVyZW5jZSkgewogICAgZnVuY3Rpb24/LnBhcmVudCA9IHRoaXM7CiAgICB0aGlzLmlzQWJzdHJhY3QgPSBpc0Fic3RyYWN0OwogICAgdGhpcy5pc1N0YXRpYyA9IGlzU3RhdGljOwogICAgdGhpcy5pc0V4dGVybmFsID0gaXNFeHRlcm5hbDsKICAgIHRoaXMuaXNDb25zdCA9IGlzQ29uc3Q7CiAgICB0aGlzLmlzRm9yd2FyZGluZ1N0dWIgPSBpc0ZvcndhcmRpbmdTdHViOwogICAgdGhpcy5pc0ZvcndhcmRpbmdTZW1pU3R1YiA9IGlzRm9yd2FyZGluZ1NlbWlTdHViOwogICAgdGhpcy5pc0V4dGVuc2lvbk1lbWJlciA9IGlzRXh0ZW5zaW9uTWVtYmVyOwogICAgdGhpcy50cmFuc2Zvcm1lckZsYWdzID0gdHJhbnNmb3JtZXJGbGFnczsKICB9CgogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ1N0YXRpYyA9IDEgPDwgMDsgLy8gTXVzdCBtYXRjaCBzZXJpYWxpemVkIGJpdCBwb3NpdGlvbnMuCiAgc3RhdGljIGNvbnN0IGludCBGbGFnQWJzdHJhY3QgPSAxIDw8IDE7CiAgc3RhdGljIGNvbnN0IGludCBGbGFnRXh0ZXJuYWwgPSAxIDw8IDI7CiAgc3RhdGljIGNvbnN0IGludCBGbGFnQ29uc3QgPSAxIDw8IDM7IC8vIE9ubHkgZm9yIGV4dGVybmFsIGNvbnN0IGZhY3Rvcmllcy4KICBzdGF0aWMgY29uc3QgaW50IEZsYWdGb3J3YXJkaW5nU3R1YiA9IDEgPDwgNDsKICBzdGF0aWMgY29uc3QgaW50IEZsYWdGb3J3YXJkaW5nU2VtaVN0dWIgPSAxIDw8IDU7CiAgLy8gVE9ETygyOTg0MSk6IFJlbW92ZSB0aGlzIGZsYWcgYWZ0ZXIgdGhlIGlzc3VlIGlzIHJlc29sdmVkLgogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yID0gMSA8PCA2OwogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ05vU3VjaE1ldGhvZEZvcndhcmRlciA9IDEgPDwgNzsKICBzdGF0aWMgY29uc3QgaW50IEZsYWdFeHRlbnNpb25NZW1iZXIgPSAxIDw8IDg7CgogIGJvb2wgZ2V0IGlzU3RhdGljID0+IGZsYWdzICYgRmxhZ1N0YXRpYyAhPSAwOwogIGJvb2wgZ2V0IGlzQWJzdHJhY3QgPT4gZmxhZ3MgJiBGbGFnQWJzdHJhY3QgIT0gMDsKICBib29sIGdldCBpc0V4dGVybmFsID0+IGZsYWdzICYgRmxhZ0V4dGVybmFsICE9IDA7CgogIC8vLyBUcnVlIGlmIHRoaXMgaGFzIHRoZSBgY29uc3RgIG1vZGlmaWVyLiAgVGhpcyBpcyBvbmx5IHBvc3NpYmxlIGZvciBleHRlcm5hbAogIC8vLyBjb25zdGFudCBmYWN0b3JpZXMsIHN1Y2ggYXMgYFN0cmluZy5mcm9tRW52aXJvbm1lbnRgLgogIGJvb2wgZ2V0IGlzQ29uc3QgPT4gZmxhZ3MgJiBGbGFnQ29uc3QgIT0gMDsKCiAgLy8vIElmIHNldCwgdGhpcyBmbGFnIGluZGljYXRlcyB0aGF0IHRoaXMgZnVuY3Rpb24ncyBpbXBsZW1lbnRhdGlvbiBleGlzdHMKICAvLy8gc29sZWx5IGZvciB0aGUgcHVycG9zZSBvZiB0eXBlIGNoZWNraW5nIGFyZ3VtZW50cyBhbmQgZm9yd2FyZGluZyB0bwogIC8vLyBbZm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldF0uCiAgLy8vCiAgLy8vIE5vdGUgdGhhdCBqdXN0IGJlY2F1c2UgdGhpcyBiaXQgaXMgc2V0IGRvZXNuJ3QgbWVhbiB0aGF0IHRoZSBmdW5jdGlvbiB3YXMKICAvLy8gbm90IGRlY2xhcmVkIGluIHRoZSBzb3VyY2U7IGl0J3MgcG9zc2libGUgdGhhdCB0aGlzIGlzIGEgZm9yd2FyZGluZwogIC8vLyBzZW1pLXN0dWIgKHNlZSBpc0ZvcndhcmRpbmdTZW1pU3R1YikuICBUbyBkZXRlcm1pbmUgd2hldGhlciB0aGlzIGZ1bmN0aW9uCiAgLy8vIHdhcyBwcmVzZW50IGluIHRoZSBzb3VyY2UsIGNvbnN1bHQgW2lzU3ludGhldGljRm9yd2FyZGVyXS4KICBib29sIGdldCBpc0ZvcndhcmRpbmdTdHViID0+IGZsYWdzICYgRmxhZ0ZvcndhcmRpbmdTdHViICE9IDA7CgogIC8vLyBJZiBzZXQsIHRoaXMgZmxhZyBpbmRpY2F0ZXMgdGhhdCBhbHRob3VnaCB0aGlzIGZ1bmN0aW9uIGlzIGEgZm9yd2FyZGluZwogIC8vLyBzdHViLCBpdCB3YXMgcHJlc2VudCBpbiB0aGUgb3JpZ2luYWwgc291cmNlIGFzIGFuIGFic3RyYWN0IG1ldGhvZC4KICBib29sIGdldCBpc0ZvcndhcmRpbmdTZW1pU3R1YiA9PiBmbGFncyAmIEZsYWdGb3J3YXJkaW5nU2VtaVN0dWIgIT0gMDsKCiAgLy8gSW5kaWNhdGVzIGlmIHRoaXMgW1Byb2NlZHVyZV0gcmVwcmVzZW50cyBhIHJlZGlyZWN0aW5nIGZhY3RvcnkgY29uc3RydWN0b3IKICAvLyBhbmQgZG9lc24ndCBoYXZlIGEgcnVubmFibGUgYm9keS4KICBib29sIGdldCBpc1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yIHsKICAgIHJldHVybiBmbGFncyAmIEZsYWdSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvciAhPSAwOwogIH0KCiAgLy8vIElmIHNldCwgdGhpcyBmbGFnIGluZGljYXRlcyB0aGF0IHRoaXMgZnVuY3Rpb24gd2FzIG5vdCBwcmVzZW50IGluIHRoZQogIC8vLyBzb3VyY2UsIGFuZCBpdCBleGlzdHMgc29sZWx5IGZvciB0aGUgcHVycG9zZSBvZiB0eXBlIGNoZWNraW5nIGFyZ3VtZW50cwogIC8vLyBhbmQgZm9yd2FyZGluZyB0byBbZm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldF0uCiAgYm9vbCBnZXQgaXNTeW50aGV0aWNGb3J3YXJkZXIgPT4gaXNGb3J3YXJkaW5nU3R1YiAmJiAhaXNGb3J3YXJkaW5nU2VtaVN0dWI7CgogIGJvb2wgZ2V0IGlzTm9TdWNoTWV0aG9kRm9yd2FyZGVyID0+IGZsYWdzICYgRmxhZ05vU3VjaE1ldGhvZEZvcndhcmRlciAhPSAwOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0V4dGVuc2lvbk1lbWJlciA9PiBmbGFncyAmIEZsYWdFeHRlbnNpb25NZW1iZXIgIT0gMDsKCiAgdm9pZCBzZXQgaXNTdGF0aWMoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdTdGF0aWMpIDogKGZsYWdzICYgfkZsYWdTdGF0aWMpOwogIH0KCiAgdm9pZCBzZXQgaXNBYnN0cmFjdChib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlID8gKGZsYWdzIHwgRmxhZ0Fic3RyYWN0KSA6IChmbGFncyAmIH5GbGFnQWJzdHJhY3QpOwogIH0KCiAgdm9pZCBzZXQgaXNFeHRlcm5hbChib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlID8gKGZsYWdzIHwgRmxhZ0V4dGVybmFsKSA6IChmbGFncyAmIH5GbGFnRXh0ZXJuYWwpOwogIH0KCiAgdm9pZCBzZXQgaXNDb25zdChib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlID8gKGZsYWdzIHwgRmxhZ0NvbnN0KSA6IChmbGFncyAmIH5GbGFnQ29uc3QpOwogIH0KCiAgdm9pZCBzZXQgaXNGb3J3YXJkaW5nU3R1Yihib29sIHZhbHVlKSB7CiAgICBmbGFncyA9CiAgICAgICAgdmFsdWUgPyAoZmxhZ3MgfCBGbGFnRm9yd2FyZGluZ1N0dWIpIDogKGZsYWdzICYgfkZsYWdGb3J3YXJkaW5nU3R1Yik7CiAgfQoKICB2b2lkIHNldCBpc0ZvcndhcmRpbmdTZW1pU3R1Yihib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlCiAgICAgICAgPyAoZmxhZ3MgfCBGbGFnRm9yd2FyZGluZ1NlbWlTdHViKQogICAgICAgIDogKGZsYWdzICYgfkZsYWdGb3J3YXJkaW5nU2VtaVN0dWIpOwogIH0KCiAgdm9pZCBzZXQgaXNSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvcihib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlCiAgICAgICAgPyAoZmxhZ3MgfCBGbGFnUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IpCiAgICAgICAgOiAoZmxhZ3MgJiB+RmxhZ1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKTsKICB9CgogIHZvaWQgc2V0IGlzTm9TdWNoTWV0aG9kRm9yd2FyZGVyKGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUKICAgICAgICA/IChmbGFncyB8IEZsYWdOb1N1Y2hNZXRob2RGb3J3YXJkZXIpCiAgICAgICAgOiAoZmxhZ3MgJiB+RmxhZ05vU3VjaE1ldGhvZEZvcndhcmRlcik7CiAgfQoKICB2b2lkIHNldCBpc0V4dGVuc2lvbk1lbWJlcihib29sIHZhbHVlKSB7CiAgICBmbGFncyA9CiAgICAgICAgdmFsdWUgPyAoZmxhZ3MgfCBGbGFnRXh0ZW5zaW9uTWVtYmVyKSA6IChmbGFncyAmIH5GbGFnRXh0ZW5zaW9uTWVtYmVyKTsKICB9CgogIGJvb2wgZ2V0IGlzSW5zdGFuY2VNZW1iZXIgPT4gIWlzU3RhdGljOwogIGJvb2wgZ2V0IGlzR2V0dGVyID0+IGtpbmQgPT0gUHJvY2VkdXJlS2luZC5HZXR0ZXI7CiAgYm9vbCBnZXQgaXNTZXR0ZXIgPT4ga2luZCA9PSBQcm9jZWR1cmVLaW5kLlNldHRlcjsKICBib29sIGdldCBpc0FjY2Vzc29yID0+IGlzR2V0dGVyIHx8IGlzU2V0dGVyOwogIGJvb2wgZ2V0IGhhc0dldHRlciA9PiBraW5kICE9IFByb2NlZHVyZUtpbmQuU2V0dGVyOwogIGJvb2wgZ2V0IGhhc1NldHRlciA9PiBraW5kID09IFByb2NlZHVyZUtpbmQuU2V0dGVyOwogIGJvb2wgZ2V0IGlzRmFjdG9yeSA9PiBraW5kID09IFByb2NlZHVyZUtpbmQuRmFjdG9yeTsKCiAgTWVtYmVyIGdldCBmb3J3YXJkaW5nU3R1YlN1cGVyVGFyZ2V0ID0+CiAgICAgIGZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXRSZWZlcmVuY2U/LmFzTWVtYmVyOwoKICB2b2lkIHNldCBmb3J3YXJkaW5nU3R1YlN1cGVyVGFyZ2V0KE1lbWJlciB0YXJnZXQpIHsKICAgIGZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXRSZWZlcmVuY2UgPSBnZXRNZW1iZXJSZWZlcmVuY2UodGFyZ2V0KTsKICB9CgogIE1lbWJlciBnZXQgZm9yd2FyZGluZ1N0dWJJbnRlcmZhY2VUYXJnZXQgPT4KICAgICAgZm9yd2FyZGluZ1N0dWJJbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2U/LmFzTWVtYmVyOwoKICB2b2lkIHNldCBmb3J3YXJkaW5nU3R1YkludGVyZmFjZVRhcmdldChNZW1iZXIgdGFyZ2V0KSB7CiAgICBmb3J3YXJkaW5nU3R1YkludGVyZmFjZVRhcmdldFJlZmVyZW5jZSA9IGdldE1lbWJlclJlZmVyZW5jZSh0YXJnZXQpOwogIH0KCiAgYWNjZXB0KE1lbWJlclZpc2l0b3IgdikgPT4gdi52aXNpdFByb2NlZHVyZSh0aGlzKTsKCiAgYWNjZXB0UmVmZXJlbmNlKE1lbWJlclJlZmVyZW5jZVZpc2l0b3IgdikgPT4gdi52aXNpdFByb2NlZHVyZVJlZmVyZW5jZSh0aGlzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZpc2l0TGlzdChhbm5vdGF0aW9ucywgdik7CiAgICBuYW1lPy5hY2NlcHQodik7CiAgICBmdW5jdGlvbj8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgdHJhbnNmb3JtTGlzdChhbm5vdGF0aW9ucywgdiwgdGhpcyk7CiAgICBpZiAoZnVuY3Rpb24gIT0gbnVsbCkgewogICAgICBmdW5jdGlvbiA9IGZ1bmN0aW9uLmFjY2VwdCh2KTsKICAgICAgZnVuY3Rpb24/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQoKICBEYXJ0VHlwZSBnZXQgZ2V0dGVyVHlwZSB7CiAgICByZXR1cm4gaXNHZXR0ZXIgPyBmdW5jdGlvbi5yZXR1cm5UeXBlIDogZnVuY3Rpb24uZnVuY3Rpb25UeXBlOwogIH0KCiAgRGFydFR5cGUgZ2V0IHNldHRlclR5cGUgewogICAgcmV0dXJuIGlzU2V0dGVyCiAgICAgICAgPyBmdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVyc1swXS50eXBlCiAgICAgICAgOiBjb25zdCBCb3R0b21UeXBlKCk7CiAgfQoKICBMb2NhdGlvbiBfZ2V0TG9jYXRpb25JbkVuY2xvc2luZ0ZpbGUoaW50IG9mZnNldCkgewogICAgcmV0dXJuIF9nZXRMb2NhdGlvbkluQ29tcG9uZW50KGVuY2xvc2luZ0NvbXBvbmVudCwgZmlsZVVyaSwgb2Zmc2V0KTsKICB9Cn0KCmVudW0gUHJvY2VkdXJlS2luZCB7CiAgTWV0aG9kLAogIEdldHRlciwKICBTZXR0ZXIsCiAgT3BlcmF0b3IsCiAgRmFjdG9yeSwKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vICAgICAgICAgICAgICAgICAgICAgQ09OU1RSVUNUT1IgSU5JVElBTElaRVJTCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8vIFBhcnQgb2YgYW4gaW5pdGlhbGl6ZXIgbGlzdCBpbiBhIGNvbnN0cnVjdG9yLgphYnN0cmFjdCBjbGFzcyBJbml0aWFsaXplciBleHRlbmRzIFRyZWVOb2RlIHsKICAvLy8gVHJ1ZSBpZiB0aGlzIGlzIGEgc3ludGhldGljIGNvbnN0cnVjdG9yIGluaXRpYWxpemVyLgogIEBpbmZvcm1hdGl2ZQogIGJvb2wgaXNTeW50aGV0aWMgPSBmYWxzZTsKCiAgYWNjZXB0KEluaXRpYWxpemVyVmlzaXRvciB2KTsKfQoKLy8vIEFuIGluaXRpYWxpemVyIHdpdGggYSBjb21waWxlLXRpbWUgZXJyb3IuCi8vLwovLy8gU2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbiBhdCBydW50aW1lLgovLwovLyBERVNJR04gVE9ETzogVGhlIGZyb250ZW5kIHNob3VsZCB1c2UgdGhpcyBpbiBhIGxvdCBtb3JlIGNhc2VzIHRvIGNhdGNoCi8vIGludmFsaWQgY2FzZXMuCmNsYXNzIEludmFsaWRJbml0aWFsaXplciBleHRlbmRzIEluaXRpYWxpemVyIHsKICBhY2NlcHQoSW5pdGlhbGl6ZXJWaXNpdG9yIHYpID0+IHYudmlzaXRJbnZhbGlkSW5pdGlhbGl6ZXIodGhpcyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7fQogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHt9Cn0KCi8vLyBBIGZpZWxkIGFzc2lnbm1lbnQgYGZpZWxkID0gdmFsdWVgIG9jY3VycmluZyBpbiB0aGUgaW5pdGlhbGl6ZXIgbGlzdCBvZgovLy8gYSBjb25zdHJ1Y3Rvci4KLy8vCi8vLyBUaGlzIG5vZGUgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBkZWNsYXJhdGlvbi1zaXRlIGZpZWxkIGluaXRpYWxpemVyczsgdGhvc2UKLy8vIGFyZSBbRXhwcmVzc2lvbl1zIHN0b3JlZCBpbiBbRmllbGQuaW5pdGlhbGl6ZXJdLgovLwovLyBUT0RPOiBUaGUgZnJvbnRlbmQgc2hvdWxkIGNoZWNrIHRoYXQgYWxsIGZpbmFsIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQKLy8gIGV4YWN0bHkgb25jZSwgYW5kIHRoYXQgbm8gZmllbGRzIGFyZSBhc3NpZ25lZCB0d2ljZSBpbiB0aGUgaW5pdGlhbGl6ZXIgbGlzdC4KY2xhc3MgRmllbGRJbml0aWFsaXplciBleHRlbmRzIEluaXRpYWxpemVyIHsKICAvLy8gUmVmZXJlbmNlIHRvIHRoZSBmaWVsZCBiZWluZyBpbml0aWFsaXplZC4gIE5vdCBudWxsLgogIFJlZmVyZW5jZSBmaWVsZFJlZmVyZW5jZTsKICBFeHByZXNzaW9uIHZhbHVlOwoKICBGaWVsZEluaXRpYWxpemVyKEZpZWxkIGZpZWxkLCBFeHByZXNzaW9uIHZhbHVlKQogICAgICA6IHRoaXMuYnlSZWZlcmVuY2UoZmllbGQ/LnJlZmVyZW5jZSwgdmFsdWUpOwoKICBGaWVsZEluaXRpYWxpemVyLmJ5UmVmZXJlbmNlKHRoaXMuZmllbGRSZWZlcmVuY2UsIHRoaXMudmFsdWUpIHsKICAgIHZhbHVlPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgRmllbGQgZ2V0IGZpZWxkID0+IGZpZWxkUmVmZXJlbmNlPy5ub2RlOwoKICB2b2lkIHNldCBmaWVsZChGaWVsZCBmaWVsZCkgewogICAgZmllbGRSZWZlcmVuY2UgPSBmaWVsZD8ucmVmZXJlbmNlOwogIH0KCiAgYWNjZXB0KEluaXRpYWxpemVyVmlzaXRvciB2KSA9PiB2LnZpc2l0RmllbGRJbml0aWFsaXplcih0aGlzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGZpZWxkPy5hY2NlcHRSZWZlcmVuY2Uodik7CiAgICB2YWx1ZT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgdmFsdWUgPSB2YWx1ZS5hY2NlcHQodik7CiAgICAgIHZhbHVlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIEEgc3VwZXIgY2FsbCBgc3VwZXIoeCx5KWAgb2NjdXJyaW5nIGluIHRoZSBpbml0aWFsaXplciBsaXN0IG9mIGEKLy8vIGNvbnN0cnVjdG9yLgovLy8KLy8vIFRoZXJlIGFyZSBubyB0eXBlIGFyZ3VtZW50cyBvbiB0aGlzIGNhbGwuCi8vCi8vIFRPRE86IFRoZSBmcm9udGVuZCBzaG91bGQgY2hlY2sgdGhhdCB0aGVyZSBpcyBubyBtb3JlIHRoYW4gb25lIHN1cGVyIGNhbGwuCi8vCi8vIERFU0lHTiBUT0RPOiBDb25zaWRlciBpZiB0aGUgZnJvbnRlbmQgc2hvdWxkIGluc2VydCB0eXBlIGFyZ3VtZW50cyBkZXJpdmVkCi8vIGZyb20gdGhlIGV4dGVuZHMgY2xhdXNlLgpjbGFzcyBTdXBlckluaXRpYWxpemVyIGV4dGVuZHMgSW5pdGlhbGl6ZXIgewogIC8vLyBSZWZlcmVuY2UgdG8gdGhlIGNvbnN0cnVjdG9yIGJlaW5nIGludm9rZWQgaW4gdGhlIHN1cGVyIGNsYXNzLiBOb3QgbnVsbC4KICBSZWZlcmVuY2UgdGFyZ2V0UmVmZXJlbmNlOwogIEFyZ3VtZW50cyBhcmd1bWVudHM7CgogIFN1cGVySW5pdGlhbGl6ZXIoQ29uc3RydWN0b3IgdGFyZ2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKQogICAgICA6IHRoaXMuYnlSZWZlcmVuY2UoZ2V0TWVtYmVyUmVmZXJlbmNlKHRhcmdldCksIGFyZ3VtZW50cyk7CgogIFN1cGVySW5pdGlhbGl6ZXIuYnlSZWZlcmVuY2UodGhpcy50YXJnZXRSZWZlcmVuY2UsIHRoaXMuYXJndW1lbnRzKSB7CiAgICBhcmd1bWVudHM/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBDb25zdHJ1Y3RvciBnZXQgdGFyZ2V0ID0+IHRhcmdldFJlZmVyZW5jZT8uYXNDb25zdHJ1Y3RvcjsKCiAgdm9pZCBzZXQgdGFyZ2V0KENvbnN0cnVjdG9yIHRhcmdldCkgewogICAgdGFyZ2V0UmVmZXJlbmNlID0gZ2V0TWVtYmVyUmVmZXJlbmNlKHRhcmdldCk7CiAgfQoKICBhY2NlcHQoSW5pdGlhbGl6ZXJWaXNpdG9yIHYpID0+IHYudmlzaXRTdXBlckluaXRpYWxpemVyKHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdGFyZ2V0Py5hY2NlcHRSZWZlcmVuY2Uodik7CiAgICBhcmd1bWVudHM/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChhcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBhcmd1bWVudHMgPSBhcmd1bWVudHMuYWNjZXB0KHYpOwogICAgICBhcmd1bWVudHM/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gQSByZWRpcmVjdGluZyBjYWxsIGB0aGlzKHgseSlgIG9jY3VycmluZyBpbiB0aGUgaW5pdGlhbGl6ZXIgbGlzdCBvZgovLy8gYSBjb25zdHJ1Y3Rvci4KLy8KLy8gVE9ETzogVGhlIGZyb250ZW5kIHNob3VsZCBjaGVjayB0aGF0IHRoaXMgaXMgdGhlIG9ubHkgaW5pdGlhbGl6ZXIgYW5kIGlmIHRoZQovLyBjb25zdHJ1Y3RvciBoYXMgYSBib2R5IG9yIGlmIHRoZXJlIGlzIGEgY3ljbGUgaW4gdGhlIGluaXRpYWxpemVyIGNhbGxzLgpjbGFzcyBSZWRpcmVjdGluZ0luaXRpYWxpemVyIGV4dGVuZHMgSW5pdGlhbGl6ZXIgewogIC8vLyBSZWZlcmVuY2UgdG8gdGhlIGNvbnN0cnVjdG9yIGJlaW5nIGludm9rZWQgaW4gdGhlIHNhbWUgY2xhc3MuIE5vdCBudWxsLgogIFJlZmVyZW5jZSB0YXJnZXRSZWZlcmVuY2U7CiAgQXJndW1lbnRzIGFyZ3VtZW50czsKCiAgUmVkaXJlY3RpbmdJbml0aWFsaXplcihDb25zdHJ1Y3RvciB0YXJnZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpCiAgICAgIDogdGhpcy5ieVJlZmVyZW5jZShnZXRNZW1iZXJSZWZlcmVuY2UodGFyZ2V0KSwgYXJndW1lbnRzKTsKCiAgUmVkaXJlY3RpbmdJbml0aWFsaXplci5ieVJlZmVyZW5jZSh0aGlzLnRhcmdldFJlZmVyZW5jZSwgdGhpcy5hcmd1bWVudHMpIHsKICAgIGFyZ3VtZW50cz8ucGFyZW50ID0gdGhpczsKICB9CgogIENvbnN0cnVjdG9yIGdldCB0YXJnZXQgPT4gdGFyZ2V0UmVmZXJlbmNlPy5hc0NvbnN0cnVjdG9yOwoKICB2b2lkIHNldCB0YXJnZXQoQ29uc3RydWN0b3IgdGFyZ2V0KSB7CiAgICB0YXJnZXRSZWZlcmVuY2UgPSBnZXRNZW1iZXJSZWZlcmVuY2UodGFyZ2V0KTsKICB9CgogIGFjY2VwdChJbml0aWFsaXplclZpc2l0b3IgdikgPT4gdi52aXNpdFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIodGhpcyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB0YXJnZXQ/LmFjY2VwdFJlZmVyZW5jZSh2KTsKICAgIGFyZ3VtZW50cz8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGFyZ3VtZW50cyA9IGFyZ3VtZW50cy5hY2NlcHQodik7CiAgICAgIGFyZ3VtZW50cz8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBCaW5kaW5nIG9mIGEgdGVtcG9yYXJ5IHZhcmlhYmxlIGluIHRoZSBpbml0aWFsaXplciBsaXN0IG9mIGEgY29uc3RydWN0b3IuCi8vLwovLy8gVGhlIHZhcmlhYmxlIGlzIGluIHNjb3BlIGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSBpbml0aWFsaXplciBsaXN0LCBidXQgaXMKLy8vIG5vdCBpbiBzY29wZSBpbiB0aGUgY29uc3RydWN0b3IgYm9keS4KY2xhc3MgTG9jYWxJbml0aWFsaXplciBleHRlbmRzIEluaXRpYWxpemVyIHsKICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlOwoKICBMb2NhbEluaXRpYWxpemVyKHRoaXMudmFyaWFibGUpIHsKICAgIHZhcmlhYmxlPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgYWNjZXB0KEluaXRpYWxpemVyVmlzaXRvciB2KSA9PiB2LnZpc2l0TG9jYWxJbml0aWFsaXplcih0aGlzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZhcmlhYmxlPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAodmFyaWFibGUgIT0gbnVsbCkgewogICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlLmFjY2VwdCh2KTsKICAgICAgdmFyaWFibGU/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgpjbGFzcyBBc3NlcnRJbml0aWFsaXplciBleHRlbmRzIEluaXRpYWxpemVyIHsKICBBc3NlcnRTdGF0ZW1lbnQgc3RhdGVtZW50OwoKICBBc3NlcnRJbml0aWFsaXplcih0aGlzLnN0YXRlbWVudCkgewogICAgc3RhdGVtZW50LnBhcmVudCA9IHRoaXM7CiAgfQoKICBhY2NlcHQoSW5pdGlhbGl6ZXJWaXNpdG9yIHYpID0+IHYudmlzaXRBc3NlcnRJbml0aWFsaXplcih0aGlzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHN0YXRlbWVudC5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnQuYWNjZXB0KHYpOwogICAgc3RhdGVtZW50LnBhcmVudCA9IHRoaXM7CiAgfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgRlVOQ1RJT05TCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8vIEEgZnVuY3Rpb24gZGVjbGFyZXMgcGFyYW1ldGVycyBhbmQgaGFzIGEgYm9keS4KLy8vCi8vLyBUaGlzIG1heSBvY2N1ciBpbiBhIHByb2NlZHVyZSwgY29uc3RydWN0b3IsIGZ1bmN0aW9uIGV4cHJlc3Npb24sIG9yIGxvY2FsCi8vLyBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KY2xhc3MgRnVuY3Rpb25Ob2RlIGV4dGVuZHMgVHJlZU5vZGUgewogIC8vLyBFbmQgb2Zmc2V0IGluIHRoZSBzb3VyY2UgZmlsZSBpdCBjb21lcyBmcm9tLiBWYWxpZCB2YWx1ZXMgYXJlIGZyb20gMCBhbmQKICAvLy8gdXAsIG9yIC0xIChbVHJlZU5vZGUubm9PZmZzZXRdKSBpZiB0aGUgZmlsZSBlbmQgb2Zmc2V0IGlzIG5vdCBhdmFpbGFibGUKICAvLy8gKHRoaXMgaXMgdGhlIGRlZmF1bHQgaWYgbm9uZSBpcyBzcGVjaWZpY2FsbHkgc2V0KS4KICBpbnQgZmlsZUVuZE9mZnNldCA9IFRyZWVOb2RlLm5vT2Zmc2V0OwoKICAvLy8gS2VybmVsIGFzeW5jIG1hcmtlciBmb3IgdGhlIGZ1bmN0aW9uLgogIC8vLwogIC8vLyBTZWUgYWxzbyBbZGFydEFzeW5jTWFya2VyXS4KICBBc3luY01hcmtlciBhc3luY01hcmtlcjsKCiAgLy8vIERhcnQgYXN5bmMgbWFya2VyIGZvciB0aGUgZnVuY3Rpb24uCiAgLy8vCiAgLy8vIFNlZSBhbHNvIFthc3luY01hcmtlcl0uCiAgLy8vCiAgLy8vIEEgS2VybmVsIGZ1bmN0aW9uIGNhbiByZXByZXNlbnQgYSBEYXJ0IGZ1bmN0aW9uIHdpdGggYSBkaWZmZXJlbnQgYXN5bmMKICAvLy8gbWFya2VyLgogIC8vLwogIC8vLyBGb3IgZXhhbXBsZSwgd2hlbiBhc3luYy9hd2FpdCBpcyB0cmFuc2xhdGVkIGF3YXksCiAgLy8vIGEgRGFydCBhc3luYyBmdW5jdGlvbiBtaWdodCBiZSByZXByZXNlbnRlZCBieSBhIEtlcm5lbCBzeW5jIGZ1bmN0aW9uLgogIEFzeW5jTWFya2VyIGRhcnRBc3luY01hcmtlcjsKCiAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVyczsKICBpbnQgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDsKICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHBvc2l0aW9uYWxQYXJhbWV0ZXJzOwogIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gbmFtZWRQYXJhbWV0ZXJzOwogIERhcnRUeXBlIHJldHVyblR5cGU7IC8vIE5vdCBudWxsLgogIFN0YXRlbWVudCBfYm9keTsKCiAgdm9pZCBGdW5jdGlvbigpIGxhenlCdWlsZGVyOwoKICB2b2lkIF9idWlsZExhenkoKSB7CiAgICBpZiAobGF6eUJ1aWxkZXIgIT0gbnVsbCkgewogICAgICB2YXIgbGF6eUJ1aWxkZXJMb2NhbCA9IGxhenlCdWlsZGVyOwogICAgICBsYXp5QnVpbGRlciA9IG51bGw7CiAgICAgIGxhenlCdWlsZGVyTG9jYWwoKTsKICAgIH0KICB9CgogIFN0YXRlbWVudCBnZXQgYm9keSB7CiAgICBfYnVpbGRMYXp5KCk7CiAgICByZXR1cm4gX2JvZHk7CiAgfQoKICB2b2lkIHNldCBib2R5KFN0YXRlbWVudCBib2R5KSB7CiAgICBfYnVpbGRMYXp5KCk7CiAgICBfYm9keSA9IGJvZHk7CiAgfQoKICBGdW5jdGlvbk5vZGUodGhpcy5fYm9keSwKICAgICAge0xpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMsCiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gcG9zaXRpb25hbFBhcmFtZXRlcnMsCiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gbmFtZWRQYXJhbWV0ZXJzLAogICAgICBpbnQgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgdGhpcy5yZXR1cm5UeXBlOiBjb25zdCBEeW5hbWljVHlwZSgpLAogICAgICB0aGlzLmFzeW5jTWFya2VyOiBBc3luY01hcmtlci5TeW5jLAogICAgICB0aGlzLmRhcnRBc3luY01hcmtlcn0pCiAgICAgIDogdGhpcy5wb3NpdGlvbmFsUGFyYW1ldGVycyA9CiAgICAgICAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzID8/IDxWYXJpYWJsZURlY2xhcmF0aW9uPltdLAogICAgICAgIHRoaXMucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA9CiAgICAgICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPz8gcG9zaXRpb25hbFBhcmFtZXRlcnM/Lmxlbmd0aCA/PyAwLAogICAgICAgIHRoaXMubmFtZWRQYXJhbWV0ZXJzID0gbmFtZWRQYXJhbWV0ZXJzID8/IDxWYXJpYWJsZURlY2xhcmF0aW9uPltdLAogICAgICAgIHRoaXMudHlwZVBhcmFtZXRlcnMgPSB0eXBlUGFyYW1ldGVycyA/PyA8VHlwZVBhcmFtZXRlcj5bXSB7CiAgICBhc3NlcnQocmV0dXJuVHlwZSAhPSBudWxsKTsKICAgIHNldFBhcmVudHModGhpcy50eXBlUGFyYW1ldGVycywgdGhpcyk7CiAgICBzZXRQYXJlbnRzKHRoaXMucG9zaXRpb25hbFBhcmFtZXRlcnMsIHRoaXMpOwogICAgc2V0UGFyZW50cyh0aGlzLm5hbWVkUGFyYW1ldGVycywgdGhpcyk7CiAgICBfYm9keT8ucGFyZW50ID0gdGhpczsKICAgIGRhcnRBc3luY01hcmtlciA/Pz0gYXN5bmNNYXJrZXI7CiAgfQoKICBzdGF0aWMgRGFydFR5cGUgX2dldFR5cGVPZlZhcmlhYmxlKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgPT4gbm9kZS50eXBlOwoKICBzdGF0aWMgTmFtZWRUeXBlIF9nZXROYW1lZFR5cGVPZlZhcmlhYmxlKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgcmV0dXJuIG5ldyBOYW1lZFR5cGUobm9kZS5uYW1lLCBub2RlLnR5cGUsIGlzUmVxdWlyZWQ6IG5vZGUuaXNSZXF1aXJlZCk7CiAgfQoKICBGdW5jdGlvblR5cGUgZ2V0IGZ1bmN0aW9uVHlwZSB7CiAgICBUcmVlTm9kZSBwYXJlbnQgPSB0aGlzLnBhcmVudDsKICAgIExpc3Q8TmFtZWRUeXBlPiBuYW1lZCA9CiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzLm1hcChfZ2V0TmFtZWRUeXBlT2ZWYXJpYWJsZSkudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgICBuYW1lZC5zb3J0KCk7CiAgICAvLyBXZSBuZWVkIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGxpc3Qgb2YgdHlwZSBwYXJhbWV0ZXJzLCBvdGhlcndpc2UKICAgIC8vIHRyYW5zZm9ybWF0aW9ucyBsaWtlIGVyYXN1cmUgZG9uJ3Qgd29yay4KICAgIHZhciB0eXBlUGFyYW1ldGVyc0NvcHkgPSBuZXcgTGlzdDxUeXBlUGFyYW1ldGVyPi5mcm9tKHBhcmVudCBpcyBDb25zdHJ1Y3RvcgogICAgICAgID8gcGFyZW50LmVuY2xvc2luZ0NsYXNzLnR5cGVQYXJhbWV0ZXJzCiAgICAgICAgOiB0eXBlUGFyYW1ldGVycyk7CiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uVHlwZSgKICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVycy5tYXAoX2dldFR5cGVPZlZhcmlhYmxlKS50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKSwKICAgICAgICByZXR1cm5UeXBlLAogICAgICAgIG5hbWVkUGFyYW1ldGVyczogbmFtZWQsCiAgICAgICAgdHlwZVBhcmFtZXRlcnM6IHR5cGVQYXJhbWV0ZXJzQ29weSwKICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50OiByZXF1aXJlZFBhcmFtZXRlckNvdW50KTsKICB9CgogIGFjY2VwdChUcmVlVmlzaXRvciB2KSA9PiB2LnZpc2l0RnVuY3Rpb25Ob2RlKHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdmlzaXRMaXN0KHR5cGVQYXJhbWV0ZXJzLCB2KTsKICAgIHZpc2l0TGlzdChwb3NpdGlvbmFsUGFyYW1ldGVycywgdik7CiAgICB2aXNpdExpc3QobmFtZWRQYXJhbWV0ZXJzLCB2KTsKICAgIHJldHVyblR5cGU/LmFjY2VwdCh2KTsKICAgIGJvZHk/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIHRyYW5zZm9ybUxpc3QodHlwZVBhcmFtZXRlcnMsIHYsIHRoaXMpOwogICAgdHJhbnNmb3JtTGlzdChwb3NpdGlvbmFsUGFyYW1ldGVycywgdiwgdGhpcyk7CiAgICB0cmFuc2Zvcm1MaXN0KG5hbWVkUGFyYW1ldGVycywgdiwgdGhpcyk7CiAgICByZXR1cm5UeXBlID0gdi52aXNpdERhcnRUeXBlKHJldHVyblR5cGUpOwogICAgaWYgKGJvZHkgIT0gbnVsbCkgewogICAgICBib2R5ID0gYm9keS5hY2NlcHQodik7CiAgICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgplbnVtIEFzeW5jTWFya2VyIHsKICAvLyBEbyBub3QgY2hhbmdlIHRoZSBvcmRlciBvZiB0aGVzZSwgdGhlIGZyb250ZW5kcyBkZXBlbmQgb24gaXQuCiAgU3luYywKICBTeW5jU3RhciwKICBBc3luYywKICBBc3luY1N0YXIsCgogIC8vIGBTeW5jWWllbGRpbmdgIGlzIGEgbWFya2VyIHRoYXQgdGVsbHMgRGFydCBWTSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgYW4KICAvLyBhcnRpZmljaWFsIGNsb3N1cmUgaW50cm9kdWNlZCBieSBhbiBhc3luYyB0cmFuc2Zvcm1lciB3aGljaCBkZXN1Z2FyZWQgYWxsCiAgLy8gYXN5bmMgc3ludGF4IGludG8gYSBjb21iaW5hdGlvbiBvZiBuYXRpdmUgeWllbGRzIGFuZCBoZWxwZXIgbWV0aG9kIGNhbGxzLgogIC8vCiAgLy8gTmF0aXZlIHlpZWxkcyAoZm9ybWF0dGVkIGFzIGBbeWllbGRdYCkgYXJlIHNlbWFudGljYWxseSBjbG9zZSB0bwogIC8vIGB5aWVsZCB4YCBzdGF0ZW1lbnQ6IHRoZXkgZGVub3RlIGEgeWllbGQvcmVzdW1lIHBvaW50IHdpdGhpbiBhIGZ1bmN0aW9uCiAgLy8gYnV0IGFyZSBjb21wbGV0ZWx5IGRlY291cGxlZCBmcm9tIHRoZSBub3Rpb24gb2YgaXRlcmF0b3JzLiBXaGVuCiAgLy8gZXhlY3V0aW9uIG9mIHRoZSBjbG9zdXJlIHJlYWNoZXMgYFt5aWVsZF0geGAgaXQgc3RvcHMgYW5kIHJldHVybiB0aGUKICAvLyB2YWx1ZSBvZiBgeGAgdG8gdGhlIGNhbGxlci4gSWYgY2xvc3VyZSBpcyBjYWxsZWQgYWdhaW4gaXQgY29udGludWVzCiAgLy8gdG8gdGhlIG5leHQgc3RhdGVtZW50IGFmdGVyIHRoaXMgeWllbGQgYXMgaWYgaXQgd2FzIHN1c3BlbmRlZCBhbmQgcmVzdW1lZC4KICAvLwogIC8vIENvbnNpZGVyIHRoaXMgZXhhbXBsZToKICAvLwogIC8vICAgZygpIHsKICAvLyAgICAgdmFyIDphd2FpdF9qdW1wX3ZhciA9IDA7CiAgLy8gICAgIHZhciA6YXdhaXRfY3R4X3ZhcjsKICAvLwogIC8vICAgICBmKHgpIHlpZWxkaW5nIHsKICAvLyAgICAgICBbeWllbGRdICcke3h9OjAnOwogIC8vICAgICAgIFt5aWVsZF0gJyR7eH06MSc7CiAgLy8gICAgICAgW3lpZWxkXSAnJHt4fToyJzsKICAvLyAgICAgfQogIC8vCiAgLy8gICAgIHJldHVybiBmOwogIC8vICAgfQogIC8vCiAgLy8gICBwcmludChmKCdhJykpOyAgLyogcHJpbnRzICdhOjAnLCA6YXdhaXRfanVtcF92YXIgPSAxICAqLwogIC8vICAgcHJpbnQoZignYicpKTsgIC8qIHByaW50cyAnYjoxJywgOmF3YWl0X2p1bXBfdmFyID0gMiAgKi8KICAvLyAgIHByaW50KGYoJ2MnKSk7ICAvKiBwcmludHMgJ2M6MicsIDphd2FpdF9qdW1wX3ZhciA9IDMgICovCiAgLy8KICAvLyBOb3RlOiBjdXJyZW50bHkgRGFydCBWTSBpbXBsaWNpdGx5IHJlbGllcyBvbiBhc3luYyB0cmFuc2Zvcm1lciB0bwogIC8vIGluamVjdCBjZXJ0YWluIGFydGlmaWNpYWwgdmFyaWFibGVzIGludG8gZyAobGlrZSBgOmF3YWl0X2p1bXBfdmFyYCkuCiAgLy8gQXMgc3VjaCBTeW5jWWllbGRpbmcgYW5kIG5hdGl2ZSB5aWVsZCBhcmUgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgb24gdGhlaXIKICAvLyBvd24sIGJ1dCBhcmUgcmF0aGVyIGFuIGltcGxlbWVudGF0aW9uIGFydGlmYWN0IG9mIHRoZSBhc3luYyB0cmFuc2Zvcm1lcgogIC8vIGl0c2VsZi4KICBTeW5jWWllbGRpbmcsCn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhQUkVTU0lPTlMKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgphYnN0cmFjdCBjbGFzcyBFeHByZXNzaW9uIGV4dGVuZHMgVHJlZU5vZGUgewogIC8vLyBSZXR1cm5zIHRoZSBzdGF0aWMgdHlwZSBvZiB0aGUgZXhwcmVzc2lvbi4KICAvLy8KICAvLy8gU2hvdWxkbid0IGJlIHVzZWQgb24gY29kZSBjb21waWxlZCBpbiBsZWdhY3kgbW9kZSwgYXMgdGhpcyBtZXRob2QgYXNzdW1lcwogIC8vLyB0aGUgSVIgaXMgc3Ryb25nbHkgdHlwZWQuCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpOwoKICAvLy8gUmV0dXJucyB0aGUgc3RhdGljIHR5cGUgb2YgdGhlIGV4cHJlc3Npb24gYXMgYW4gaW5zdGFudGlhdGlvbiBvZgogIC8vLyBbc3VwZXJjbGFzc10uCiAgLy8vCiAgLy8vIFNob3VsZG4ndCBiZSB1c2VkIG9uIGNvZGUgY29tcGlsZWQgaW4gbGVnYWN5IG1vZGUsIGFzIHRoaXMgbWV0aG9kIGFzc3VtZXMKICAvLy8gdGhlIElSIGlzIHN0cm9uZ2x5IHR5cGVkLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBmdXJ0aGVybW9yZSBhc3N1bWVzIHRoYXQgdGhlIHR5cGUgb2YgdGhlIGV4cHJlc3Npb24gYWN0dWFsbHkKICAvLy8gaXMgYSBzdWJ0eXBlIG9mIChzb21lIGluc3RhbnRpYXRpb24gb2YpIHRoZSBnaXZlbiBbc3VwZXJjbGFzc10uCiAgLy8vIElmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCBlaXRoZXIgYW4gZXhjZXB0aW9uIGlzIHRocm93biBvciB0aGUgcmF3IHR5cGUgb2YKICAvLy8gW3N1cGVyY2xhc3NdIGlzIHJldHVybmVkLgogIEludGVyZmFjZVR5cGUgZ2V0U3RhdGljVHlwZUFzSW5zdGFuY2VPZigKICAgICAgQ2xhc3Mgc3VwZXJjbGFzcywgVHlwZUVudmlyb25tZW50IHR5cGVzKSB7CiAgICAvLyBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoZSBwcm9ncmFtIGlzIGNvcnJlY3RseSB0eXBlZCwgc28gaWYgdGhlIHN1cGVyY2xhc3MKICAgIC8vIGlzIG5vdCBnZW5lcmljLCB3ZSBjYW4ganVzdCByZXR1cm4gaXRzIHJhdyB0eXBlIHdpdGhvdXQgY29tcHV0aW5nIHRoZQogICAgLy8gdHlwZSBvZiB0aGlzIGV4cHJlc3Npb24uICBJdCBhbHNvIGVuc3VyZXMgdGhhdCBhbGwgdHlwZXMgYXJlIGNvbnNpZGVyZWQKICAgIC8vIHN1YnR5cGVzIG9mIE9iamVjdCAobm90IGp1c3QgaW50ZXJmYWNlIHR5cGVzKSwgYW5kIGZ1bmN0aW9uIHR5cGVzIGFyZQogICAgLy8gY29uc2lkZXJlZCBzdWJ0eXBlcyBvZiBGdW5jdGlvbi4KICAgIGlmIChzdXBlcmNsYXNzLnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkpIHsKICAgICAgcmV0dXJuIHN1cGVyY2xhc3MucmF3VHlwZTsKICAgIH0KICAgIHZhciB0eXBlID0gZ2V0U3RhdGljVHlwZSh0eXBlcyk7CiAgICB3aGlsZSAodHlwZSBpcyBUeXBlUGFyYW1ldGVyVHlwZSkgewogICAgICB0eXBlID0gKHR5cGUgYXMgVHlwZVBhcmFtZXRlclR5cGUpLnBhcmFtZXRlci5ib3VuZDsKICAgIH0KICAgIGlmICh0eXBlID09IHR5cGVzLm51bGxUeXBlKSB7CiAgICAgIHJldHVybiBzdXBlcmNsYXNzLmJvdHRvbVR5cGU7CiAgICB9CiAgICBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgIHZhciB1cGNhc3RUeXBlID0gdHlwZXMuZ2V0VHlwZUFzSW5zdGFuY2VPZih0eXBlLCBzdXBlcmNsYXNzKTsKICAgICAgaWYgKHVwY2FzdFR5cGUgIT0gbnVsbCkgcmV0dXJuIHVwY2FzdFR5cGU7CiAgICB9IGVsc2UgaWYgKHR5cGUgaXMgQm90dG9tVHlwZSkgewogICAgICByZXR1cm4gc3VwZXJjbGFzcy5ib3R0b21UeXBlOwogICAgfQogICAgdHlwZXMudHlwZUVycm9yKHRoaXMsICckdHlwZSBpcyBub3QgYSBzdWJ0eXBlIG9mICRzdXBlcmNsYXNzJyk7CiAgICByZXR1cm4gc3VwZXJjbGFzcy5yYXdUeXBlOwogIH0KCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZyk7Cn0KCi8vLyBBbiBleHByZXNzaW9uIGNvbnRhaW5pbmcgY29tcGlsZS10aW1lIGVycm9ycy4KLy8vCi8vLyBTaG91bGQgdGhyb3cgYSBydW50aW1lIGVycm9yIHdoZW4gZXZhbHVhdGVkLgpjbGFzcyBJbnZhbGlkRXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24gewogIFN0cmluZyBtZXNzYWdlOwoKICBJbnZhbGlkRXhwcmVzc2lvbih0aGlzLm1lc3NhZ2UpOwoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gY29uc3QgQm90dG9tVHlwZSgpOwoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdEludmFsaWRFeHByZXNzaW9uKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdEludmFsaWRFeHByZXNzaW9uKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7fQogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHt9Cn0KCi8vLyBSZWFkIGEgbG9jYWwgdmFyaWFibGUsIGEgbG9jYWwgZnVuY3Rpb24sIG9yIGEgZnVuY3Rpb24gcGFyYW1ldGVyLgpjbGFzcyBWYXJpYWJsZUdldCBleHRlbmRzIEV4cHJlc3Npb24gewogIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGU7CiAgRGFydFR5cGUgcHJvbW90ZWRUeXBlOyAvLyBOdWxsIGlmIG5vdCBwcm9tb3RlZC4KCiAgVmFyaWFibGVHZXQodGhpcy52YXJpYWJsZSwgW3RoaXMucHJvbW90ZWRUeXBlXSk7CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSB7CiAgICByZXR1cm4gcHJvbW90ZWRUeXBlID8/IHZhcmlhYmxlLnR5cGU7CiAgfQoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdFZhcmlhYmxlR2V0KHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFZhcmlhYmxlR2V0KHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBwcm9tb3RlZFR5cGU/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChwcm9tb3RlZFR5cGUgIT0gbnVsbCkgewogICAgICBwcm9tb3RlZFR5cGUgPSB2LnZpc2l0RGFydFR5cGUocHJvbW90ZWRUeXBlKTsKICAgIH0KICB9Cn0KCi8vLyBBc3NpZ24gYSBsb2NhbCB2YXJpYWJsZSBvciBmdW5jdGlvbiBwYXJhbWV0ZXIuCi8vLwovLy8gRXZhbHVhdGVzIHRvIHRoZSB2YWx1ZSBvZiBbdmFsdWVdLgpjbGFzcyBWYXJpYWJsZVNldCBleHRlbmRzIEV4cHJlc3Npb24gewogIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGU7CiAgRXhwcmVzc2lvbiB2YWx1ZTsKCiAgVmFyaWFibGVTZXQodGhpcy52YXJpYWJsZSwgdGhpcy52YWx1ZSkgewogICAgdmFsdWU/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdmFsdWUuZ2V0U3RhdGljVHlwZSh0eXBlcyk7CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0VmFyaWFibGVTZXQodGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0VmFyaWFibGVTZXQodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZhbHVlPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICB2YWx1ZSA9IHZhbHVlLmFjY2VwdCh2KTsKICAgICAgdmFsdWU/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gRXhwcmVzc2lvbiBvZiBmb3JtIGB4LmZpZWxkYC4KLy8vCi8vLyBUaGlzIG1heSBpbnZva2UgYSBnZXR0ZXIsIHJlYWQgYSBmaWVsZCwgb3IgdGVhciBvZmYgYSBtZXRob2QuCmNsYXNzIFByb3BlcnR5R2V0IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgRXhwcmVzc2lvbiByZWNlaXZlcjsKICBOYW1lIG5hbWU7CgogIFJlZmVyZW5jZSBpbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2U7CgogIFByb3BlcnR5R2V0KEV4cHJlc3Npb24gcmVjZWl2ZXIsIE5hbWUgbmFtZSwgW01lbWJlciBpbnRlcmZhY2VUYXJnZXRdKQogICAgICA6IHRoaXMuYnlSZWZlcmVuY2UocmVjZWl2ZXIsIG5hbWUsIGdldE1lbWJlclJlZmVyZW5jZShpbnRlcmZhY2VUYXJnZXQpKTsKCiAgUHJvcGVydHlHZXQuYnlSZWZlcmVuY2UoCiAgICAgIHRoaXMucmVjZWl2ZXIsIHRoaXMubmFtZSwgdGhpcy5pbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UpIHsKICAgIHJlY2VpdmVyPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgTWVtYmVyIGdldCBpbnRlcmZhY2VUYXJnZXQgPT4gaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlPy5hc01lbWJlcjsKCiAgdm9pZCBzZXQgaW50ZXJmYWNlVGFyZ2V0KE1lbWJlciBtZW1iZXIpIHsKICAgIGludGVyZmFjZVRhcmdldFJlZmVyZW5jZSA9IGdldE1lbWJlclJlZmVyZW5jZShtZW1iZXIpOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpIHsKICAgIHZhciBpbnRlcmZhY2VUYXJnZXQgPSB0aGlzLmludGVyZmFjZVRhcmdldDsKICAgIGlmIChpbnRlcmZhY2VUYXJnZXQgIT0gbnVsbCkgewogICAgICBDbGFzcyBzdXBlcmNsYXNzID0gaW50ZXJmYWNlVGFyZ2V0LmVuY2xvc2luZ0NsYXNzOwogICAgICB2YXIgcmVjZWl2ZXJUeXBlID0gcmVjZWl2ZXIuZ2V0U3RhdGljVHlwZUFzSW5zdGFuY2VPZihzdXBlcmNsYXNzLCB0eXBlcyk7CiAgICAgIHJldHVybiBTdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUocmVjZWl2ZXJUeXBlKQogICAgICAgICAgLnN1YnN0aXR1dGVUeXBlKGludGVyZmFjZVRhcmdldC5nZXR0ZXJUeXBlKTsKICAgIH0KICAgIC8vIFRyZWF0IHRoZSBwcm9wZXJ0aWVzIG9mIE9iamVjdCBzcGVjaWFsbHkuCiAgICBTdHJpbmcgbmFtZVN0cmluZyA9IG5hbWUubmFtZTsKICAgIGlmIChuYW1lU3RyaW5nID09ICdoYXNoQ29kZScpIHsKICAgICAgcmV0dXJuIHR5cGVzLmludFR5cGU7CiAgICB9IGVsc2UgaWYgKG5hbWVTdHJpbmcgPT0gJ3J1bnRpbWVUeXBlJykgewogICAgICByZXR1cm4gdHlwZXMudHlwZVR5cGU7CiAgICB9CiAgICByZXR1cm4gY29uc3QgRHluYW1pY1R5cGUoKTsKICB9CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0UHJvcGVydHlHZXQodGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0UHJvcGVydHlHZXQodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHJlY2VpdmVyPy5hY2NlcHQodik7CiAgICBuYW1lPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAocmVjZWl2ZXIgIT0gbnVsbCkgewogICAgICByZWNlaXZlciA9IHJlY2VpdmVyLmFjY2VwdCh2KTsKICAgICAgcmVjZWl2ZXI/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gRXhwcmVzc2lvbiBvZiBmb3JtIGB4LmZpZWxkID0gdmFsdWVgLgovLy8KLy8vIFRoaXMgbWF5IGludm9rZSBhIHNldHRlciBvciBhc3NpZ24gYSBmaWVsZC4KLy8vCi8vLyBFdmFsdWF0ZXMgdG8gdGhlIHZhbHVlIG9mIFt2YWx1ZV0uCmNsYXNzIFByb3BlcnR5U2V0IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgRXhwcmVzc2lvbiByZWNlaXZlcjsKICBOYW1lIG5hbWU7CiAgRXhwcmVzc2lvbiB2YWx1ZTsKCiAgUmVmZXJlbmNlIGludGVyZmFjZVRhcmdldFJlZmVyZW5jZTsKCiAgUHJvcGVydHlTZXQoRXhwcmVzc2lvbiByZWNlaXZlciwgTmFtZSBuYW1lLCBFeHByZXNzaW9uIHZhbHVlLAogICAgICBbTWVtYmVyIGludGVyZmFjZVRhcmdldF0pCiAgICAgIDogdGhpcy5ieVJlZmVyZW5jZSgKICAgICAgICAgICAgcmVjZWl2ZXIsIG5hbWUsIHZhbHVlLCBnZXRNZW1iZXJSZWZlcmVuY2UoaW50ZXJmYWNlVGFyZ2V0KSk7CgogIFByb3BlcnR5U2V0LmJ5UmVmZXJlbmNlKAogICAgICB0aGlzLnJlY2VpdmVyLCB0aGlzLm5hbWUsIHRoaXMudmFsdWUsIHRoaXMuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKSB7CiAgICByZWNlaXZlcj8ucGFyZW50ID0gdGhpczsKICAgIHZhbHVlPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgTWVtYmVyIGdldCBpbnRlcmZhY2VUYXJnZXQgPT4gaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlPy5hc01lbWJlcjsKCiAgdm9pZCBzZXQgaW50ZXJmYWNlVGFyZ2V0KE1lbWJlciBtZW1iZXIpIHsKICAgIGludGVyZmFjZVRhcmdldFJlZmVyZW5jZSA9IGdldE1lbWJlclJlZmVyZW5jZShtZW1iZXIpOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHZhbHVlLmdldFN0YXRpY1R5cGUodHlwZXMpOwoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdFByb3BlcnR5U2V0KHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFByb3BlcnR5U2V0KHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICByZWNlaXZlcj8uYWNjZXB0KHYpOwogICAgbmFtZT8uYWNjZXB0KHYpOwogICAgdmFsdWU/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChyZWNlaXZlciAhPSBudWxsKSB7CiAgICAgIHJlY2VpdmVyID0gcmVjZWl2ZXIuYWNjZXB0KHYpOwogICAgICByZWNlaXZlcj8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIHZhbHVlID0gdmFsdWUuYWNjZXB0KHYpOwogICAgICB2YWx1ZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBEaXJlY3RseSByZWFkIGEgZmllbGQsIGNhbGwgYSBnZXR0ZXIsIG9yIHRlYXIgb2ZmIGEgbWV0aG9kLgpjbGFzcyBEaXJlY3RQcm9wZXJ0eUdldCBleHRlbmRzIEV4cHJlc3Npb24gewogIEV4cHJlc3Npb24gcmVjZWl2ZXI7CiAgUmVmZXJlbmNlIHRhcmdldFJlZmVyZW5jZTsKCiAgRGlyZWN0UHJvcGVydHlHZXQoRXhwcmVzc2lvbiByZWNlaXZlciwgTWVtYmVyIHRhcmdldCkKICAgICAgOiB0aGlzLmJ5UmVmZXJlbmNlKHJlY2VpdmVyLCBnZXRNZW1iZXJSZWZlcmVuY2UodGFyZ2V0KSk7CgogIERpcmVjdFByb3BlcnR5R2V0LmJ5UmVmZXJlbmNlKHRoaXMucmVjZWl2ZXIsIHRoaXMudGFyZ2V0UmVmZXJlbmNlKSB7CiAgICByZWNlaXZlcj8ucGFyZW50ID0gdGhpczsKICB9CgogIE1lbWJlciBnZXQgdGFyZ2V0ID0+IHRhcmdldFJlZmVyZW5jZT8uYXNNZW1iZXI7CgogIHZvaWQgc2V0IHRhcmdldChNZW1iZXIgdGFyZ2V0KSB7CiAgICB0YXJnZXRSZWZlcmVuY2UgPSBnZXRNZW1iZXJSZWZlcmVuY2UodGFyZ2V0KTsKICB9CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICByZWNlaXZlcj8uYWNjZXB0KHYpOwogICAgdGFyZ2V0Py5hY2NlcHRSZWZlcmVuY2Uodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAocmVjZWl2ZXIgIT0gbnVsbCkgewogICAgICByZWNlaXZlciA9IHJlY2VpdmVyLmFjY2VwdCh2KTsKICAgICAgcmVjZWl2ZXI/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdERpcmVjdFByb3BlcnR5R2V0KHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdERpcmVjdFByb3BlcnR5R2V0KHRoaXMsIGFyZyk7CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSB7CiAgICBDbGFzcyBzdXBlcmNsYXNzID0gdGFyZ2V0LmVuY2xvc2luZ0NsYXNzOwogICAgdmFyIHJlY2VpdmVyVHlwZSA9IHJlY2VpdmVyLmdldFN0YXRpY1R5cGVBc0luc3RhbmNlT2Yoc3VwZXJjbGFzcywgdHlwZXMpOwogICAgcmV0dXJuIFN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZShyZWNlaXZlclR5cGUpCiAgICAgICAgLnN1YnN0aXR1dGVUeXBlKHRhcmdldC5nZXR0ZXJUeXBlKTsKICB9Cn0KCi8vLyBEaXJlY3RseSBhc3NpZ24gYSBmaWVsZCwgb3IgY2FsbCBhIHNldHRlci4KLy8vCi8vLyBFdmFsdWF0ZXMgdG8gdGhlIHZhbHVlIG9mIFt2YWx1ZV0uCmNsYXNzIERpcmVjdFByb3BlcnR5U2V0IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgRXhwcmVzc2lvbiByZWNlaXZlcjsKICBSZWZlcmVuY2UgdGFyZ2V0UmVmZXJlbmNlOwogIEV4cHJlc3Npb24gdmFsdWU7CgogIERpcmVjdFByb3BlcnR5U2V0KEV4cHJlc3Npb24gcmVjZWl2ZXIsIE1lbWJlciB0YXJnZXQsIEV4cHJlc3Npb24gdmFsdWUpCiAgICAgIDogdGhpcy5ieVJlZmVyZW5jZShyZWNlaXZlciwgZ2V0TWVtYmVyUmVmZXJlbmNlKHRhcmdldCksIHZhbHVlKTsKCiAgRGlyZWN0UHJvcGVydHlTZXQuYnlSZWZlcmVuY2UoCiAgICAgIHRoaXMucmVjZWl2ZXIsIHRoaXMudGFyZ2V0UmVmZXJlbmNlLCB0aGlzLnZhbHVlKSB7CiAgICByZWNlaXZlcj8ucGFyZW50ID0gdGhpczsKICAgIHZhbHVlPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgTWVtYmVyIGdldCB0YXJnZXQgPT4gdGFyZ2V0UmVmZXJlbmNlPy5hc01lbWJlcjsKCiAgdm9pZCBzZXQgdGFyZ2V0KE1lbWJlciB0YXJnZXQpIHsKICAgIHRhcmdldFJlZmVyZW5jZSA9IGdldE1lbWJlclJlZmVyZW5jZSh0YXJnZXQpOwogIH0KCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHJlY2VpdmVyPy5hY2NlcHQodik7CiAgICB0YXJnZXQ/LmFjY2VwdFJlZmVyZW5jZSh2KTsKICAgIHZhbHVlPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAocmVjZWl2ZXIgIT0gbnVsbCkgewogICAgICByZWNlaXZlciA9IHJlY2VpdmVyLmFjY2VwdCh2KTsKICAgICAgcmVjZWl2ZXI/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICB2YWx1ZSA9IHZhbHVlLmFjY2VwdCh2KTsKICAgICAgdmFsdWU/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdERpcmVjdFByb3BlcnR5U2V0KHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdERpcmVjdFByb3BlcnR5U2V0KHRoaXMsIGFyZyk7CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiB2YWx1ZS5nZXRTdGF0aWNUeXBlKHR5cGVzKTsKfQoKLy8vIERpcmVjdGx5IGNhbGwgYW4gaW5zdGFuY2UgbWV0aG9kLCBieXBhc3Npbmcgb3JkaW5hcnkgZGlzcGF0Y2guCmNsYXNzIERpcmVjdE1ldGhvZEludm9jYXRpb24gZXh0ZW5kcyBJbnZvY2F0aW9uRXhwcmVzc2lvbiB7CiAgRXhwcmVzc2lvbiByZWNlaXZlcjsKICBSZWZlcmVuY2UgdGFyZ2V0UmVmZXJlbmNlOwogIEFyZ3VtZW50cyBhcmd1bWVudHM7CgogIERpcmVjdE1ldGhvZEludm9jYXRpb24oCiAgICAgIEV4cHJlc3Npb24gcmVjZWl2ZXIsIFByb2NlZHVyZSB0YXJnZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpCiAgICAgIDogdGhpcy5ieVJlZmVyZW5jZShyZWNlaXZlciwgZ2V0TWVtYmVyUmVmZXJlbmNlKHRhcmdldCksIGFyZ3VtZW50cyk7CgogIERpcmVjdE1ldGhvZEludm9jYXRpb24uYnlSZWZlcmVuY2UoCiAgICAgIHRoaXMucmVjZWl2ZXIsIHRoaXMudGFyZ2V0UmVmZXJlbmNlLCB0aGlzLmFyZ3VtZW50cykgewogICAgcmVjZWl2ZXI/LnBhcmVudCA9IHRoaXM7CiAgICBhcmd1bWVudHM/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBQcm9jZWR1cmUgZ2V0IHRhcmdldCA9PiB0YXJnZXRSZWZlcmVuY2U/LmFzUHJvY2VkdXJlOwoKICB2b2lkIHNldCB0YXJnZXQoUHJvY2VkdXJlIHRhcmdldCkgewogICAgdGFyZ2V0UmVmZXJlbmNlID0gZ2V0TWVtYmVyUmVmZXJlbmNlKHRhcmdldCk7CiAgfQoKICBOYW1lIGdldCBuYW1lID0+IHRhcmdldD8ubmFtZTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHJlY2VpdmVyPy5hY2NlcHQodik7CiAgICB0YXJnZXQ/LmFjY2VwdFJlZmVyZW5jZSh2KTsKICAgIGFyZ3VtZW50cz8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKHJlY2VpdmVyICE9IG51bGwpIHsKICAgICAgcmVjZWl2ZXIgPSByZWNlaXZlci5hY2NlcHQodik7CiAgICAgIHJlY2VpdmVyPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGFyZ3VtZW50cyA9IGFyZ3VtZW50cy5hY2NlcHQodik7CiAgICAgIGFyZ3VtZW50cz8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0RGlyZWN0TWV0aG9kSW52b2NhdGlvbih0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+CiAgICAgIHYudmlzaXREaXJlY3RNZXRob2RJbnZvY2F0aW9uKHRoaXMsIGFyZyk7CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSB7CiAgICBpZiAodHlwZXMuaXNPdmVybG9hZGVkQXJpdGhtZXRpY09wZXJhdG9yKHRhcmdldCkpIHsKICAgICAgcmV0dXJuIHR5cGVzLmdldFR5cGVPZk92ZXJsb2FkZWRBcml0aG1ldGljKHJlY2VpdmVyLmdldFN0YXRpY1R5cGUodHlwZXMpLAogICAgICAgICAgYXJndW1lbnRzLnBvc2l0aW9uYWxbMF0uZ2V0U3RhdGljVHlwZSh0eXBlcykpOwogICAgfQogICAgQ2xhc3Mgc3VwZXJjbGFzcyA9IHRhcmdldC5lbmNsb3NpbmdDbGFzczsKICAgIHZhciByZWNlaXZlclR5cGUgPSByZWNlaXZlci5nZXRTdGF0aWNUeXBlQXNJbnN0YW5jZU9mKHN1cGVyY2xhc3MsIHR5cGVzKTsKICAgIHZhciByZXR1cm5UeXBlID0gU3Vic3RpdHV0aW9uLmZyb21JbnRlcmZhY2VUeXBlKHJlY2VpdmVyVHlwZSkKICAgICAgICAuc3Vic3RpdHV0ZVR5cGUodGFyZ2V0LmZ1bmN0aW9uLnJldHVyblR5cGUpOwogICAgcmV0dXJuIFN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoCiAgICAgICAgICAgIHRhcmdldC5mdW5jdGlvbi50eXBlUGFyYW1ldGVycywgYXJndW1lbnRzLnR5cGVzKQogICAgICAgIC5zdWJzdGl0dXRlVHlwZShyZXR1cm5UeXBlKTsKICB9Cn0KCi8vLyBFeHByZXNzaW9uIG9mIGZvcm0gYHN1cGVyLmZpZWxkYC4KLy8vCi8vLyBUaGlzIG1heSBpbnZva2UgYSBnZXR0ZXIsIHJlYWQgYSBmaWVsZCwgb3IgdGVhciBvZmYgYSBtZXRob2QuCmNsYXNzIFN1cGVyUHJvcGVydHlHZXQgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBOYW1lIG5hbWU7CgogIFJlZmVyZW5jZSBpbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2U7CgogIFN1cGVyUHJvcGVydHlHZXQoTmFtZSBuYW1lLCBbTWVtYmVyIGludGVyZmFjZVRhcmdldF0pCiAgICAgIDogdGhpcy5ieVJlZmVyZW5jZShuYW1lLCBnZXRNZW1iZXJSZWZlcmVuY2UoaW50ZXJmYWNlVGFyZ2V0KSk7CgogIFN1cGVyUHJvcGVydHlHZXQuYnlSZWZlcmVuY2UodGhpcy5uYW1lLCB0aGlzLmludGVyZmFjZVRhcmdldFJlZmVyZW5jZSk7CgogIE1lbWJlciBnZXQgaW50ZXJmYWNlVGFyZ2V0ID0+IGludGVyZmFjZVRhcmdldFJlZmVyZW5jZT8uYXNNZW1iZXI7CgogIHZvaWQgc2V0IGludGVyZmFjZVRhcmdldChNZW1iZXIgbWVtYmVyKSB7CiAgICBpbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UgPSBnZXRNZW1iZXJSZWZlcmVuY2UobWVtYmVyKTsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSB7CiAgICBDbGFzcyBkZWNsYXJpbmdDbGFzcyA9IGludGVyZmFjZVRhcmdldC5lbmNsb3NpbmdDbGFzczsKICAgIGlmIChkZWNsYXJpbmdDbGFzcy50eXBlUGFyYW1ldGVycy5pc0VtcHR5KSB7CiAgICAgIHJldHVybiBpbnRlcmZhY2VUYXJnZXQuZ2V0dGVyVHlwZTsKICAgIH0KICAgIHZhciByZWNlaXZlciA9IHR5cGVzLmdldFR5cGVBc0luc3RhbmNlT2YodHlwZXMudGhpc1R5cGUsIGRlY2xhcmluZ0NsYXNzKTsKICAgIHJldHVybiBTdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUocmVjZWl2ZXIpCiAgICAgICAgLnN1YnN0aXR1dGVUeXBlKGludGVyZmFjZVRhcmdldC5nZXR0ZXJUeXBlKTsKICB9CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0U3VwZXJQcm9wZXJ0eUdldCh0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRTdXBlclByb3BlcnR5R2V0KHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBuYW1lPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7fQp9CgovLy8gRXhwcmVzc2lvbiBvZiBmb3JtIGBzdXBlci5maWVsZCA9IHZhbHVlYC4KLy8vCi8vLyBUaGlzIG1heSBpbnZva2UgYSBzZXR0ZXIgb3IgYXNzaWduIGEgZmllbGQuCi8vLwovLy8gRXZhbHVhdGVzIHRvIHRoZSB2YWx1ZSBvZiBbdmFsdWVdLgpjbGFzcyBTdXBlclByb3BlcnR5U2V0IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgTmFtZSBuYW1lOwogIEV4cHJlc3Npb24gdmFsdWU7CgogIFJlZmVyZW5jZSBpbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2U7CgogIFN1cGVyUHJvcGVydHlTZXQoTmFtZSBuYW1lLCBFeHByZXNzaW9uIHZhbHVlLCBNZW1iZXIgaW50ZXJmYWNlVGFyZ2V0KQogICAgICA6IHRoaXMuYnlSZWZlcmVuY2UobmFtZSwgdmFsdWUsIGdldE1lbWJlclJlZmVyZW5jZShpbnRlcmZhY2VUYXJnZXQpKTsKCiAgU3VwZXJQcm9wZXJ0eVNldC5ieVJlZmVyZW5jZSgKICAgICAgdGhpcy5uYW1lLCB0aGlzLnZhbHVlLCB0aGlzLmludGVyZmFjZVRhcmdldFJlZmVyZW5jZSkgewogICAgdmFsdWU/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBNZW1iZXIgZ2V0IGludGVyZmFjZVRhcmdldCA9PiBpbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2U/LmFzTWVtYmVyOwoKICB2b2lkIHNldCBpbnRlcmZhY2VUYXJnZXQoTWVtYmVyIG1lbWJlcikgewogICAgaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlID0gZ2V0TWVtYmVyUmVmZXJlbmNlKG1lbWJlcik7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdmFsdWUuZ2V0U3RhdGljVHlwZSh0eXBlcyk7CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0U3VwZXJQcm9wZXJ0eVNldCh0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRTdXBlclByb3BlcnR5U2V0KHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBuYW1lPy5hY2NlcHQodik7CiAgICB2YWx1ZT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgdmFsdWUgPSB2YWx1ZS5hY2NlcHQodik7CiAgICAgIHZhbHVlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIFJlYWQgYSBzdGF0aWMgZmllbGQsIGNhbGwgYSBzdGF0aWMgZ2V0dGVyLCBvciB0ZWFyIG9mZiBhIHN0YXRpYyBtZXRob2QuCmNsYXNzIFN0YXRpY0dldCBleHRlbmRzIEV4cHJlc3Npb24gewogIC8vLyBBIHN0YXRpYyBmaWVsZCwgZ2V0dGVyLCBvciBtZXRob2QgKGZvciB0ZWFyLW9mZikuCiAgUmVmZXJlbmNlIHRhcmdldFJlZmVyZW5jZTsKCiAgU3RhdGljR2V0KE1lbWJlciB0YXJnZXQpIDogdGhpcy5ieVJlZmVyZW5jZShnZXRNZW1iZXJSZWZlcmVuY2UodGFyZ2V0KSk7CgogIFN0YXRpY0dldC5ieVJlZmVyZW5jZSh0aGlzLnRhcmdldFJlZmVyZW5jZSk7CgogIE1lbWJlciBnZXQgdGFyZ2V0ID0+IHRhcmdldFJlZmVyZW5jZT8uYXNNZW1iZXI7CgogIHZvaWQgc2V0IHRhcmdldChNZW1iZXIgdGFyZ2V0KSB7CiAgICB0YXJnZXRSZWZlcmVuY2UgPSBnZXRNZW1iZXJSZWZlcmVuY2UodGFyZ2V0KTsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiB0YXJnZXQuZ2V0dGVyVHlwZTsKCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRTdGF0aWNHZXQodGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0U3RhdGljR2V0KHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB0YXJnZXQ/LmFjY2VwdFJlZmVyZW5jZSh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHt9Cn0KCi8vLyBBc3NpZ24gYSBzdGF0aWMgZmllbGQgb3IgY2FsbCBhIHN0YXRpYyBzZXR0ZXIuCi8vLwovLy8gRXZhbHVhdGVzIHRvIHRoZSB2YWx1ZSBvZiBbdmFsdWVdLgpjbGFzcyBTdGF0aWNTZXQgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICAvLy8gQSBtdXRhYmxlIHN0YXRpYyBmaWVsZCBvciBhIHN0YXRpYyBzZXR0ZXIuCiAgUmVmZXJlbmNlIHRhcmdldFJlZmVyZW5jZTsKICBFeHByZXNzaW9uIHZhbHVlOwoKICBTdGF0aWNTZXQoTWVtYmVyIHRhcmdldCwgRXhwcmVzc2lvbiB2YWx1ZSkKICAgICAgOiB0aGlzLmJ5UmVmZXJlbmNlKGdldE1lbWJlclJlZmVyZW5jZSh0YXJnZXQpLCB2YWx1ZSk7CgogIFN0YXRpY1NldC5ieVJlZmVyZW5jZSh0aGlzLnRhcmdldFJlZmVyZW5jZSwgdGhpcy52YWx1ZSkgewogICAgdmFsdWU/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBNZW1iZXIgZ2V0IHRhcmdldCA9PiB0YXJnZXRSZWZlcmVuY2U/LmFzTWVtYmVyOwoKICB2b2lkIHNldCB0YXJnZXQoTWVtYmVyIHRhcmdldCkgewogICAgdGFyZ2V0UmVmZXJlbmNlID0gZ2V0TWVtYmVyUmVmZXJlbmNlKHRhcmdldCk7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdmFsdWUuZ2V0U3RhdGljVHlwZSh0eXBlcyk7CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0U3RhdGljU2V0KHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFN0YXRpY1NldCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdGFyZ2V0Py5hY2NlcHRSZWZlcmVuY2Uodik7CiAgICB2YWx1ZT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgdmFsdWUgPSB2YWx1ZS5hY2NlcHQodik7CiAgICAgIHZhbHVlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIFRoZSBhcmd1bWVudHMgdG8gYSBmdW5jdGlvbiBjYWxsLCBkaXZpZGVkIGludG8gdHlwZSBhcmd1bWVudHMsCi8vLyBwb3NpdGlvbmFsIGFyZ3VtZW50cywgYW5kIG5hbWVkIGFyZ3VtZW50cy4KY2xhc3MgQXJndW1lbnRzIGV4dGVuZHMgVHJlZU5vZGUgewogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVzOwogIGZpbmFsIExpc3Q8RXhwcmVzc2lvbj4gcG9zaXRpb25hbDsKICBMaXN0PE5hbWVkRXhwcmVzc2lvbj4gbmFtZWQ7CgogIEFyZ3VtZW50cyh0aGlzLnBvc2l0aW9uYWwsCiAgICAgIHtMaXN0PERhcnRUeXBlPiB0eXBlcywgTGlzdDxOYW1lZEV4cHJlc3Npb24+IG5hbWVkfSkKICAgICAgOiB0aGlzLnR5cGVzID0gdHlwZXMgPz8gPERhcnRUeXBlPltdLAogICAgICAgIHRoaXMubmFtZWQgPSBuYW1lZCA/PyA8TmFtZWRFeHByZXNzaW9uPltdIHsKICAgIHNldFBhcmVudHModGhpcy5wb3NpdGlvbmFsLCB0aGlzKTsKICAgIHNldFBhcmVudHModGhpcy5uYW1lZCwgdGhpcyk7CiAgfQoKICBBcmd1bWVudHMuZW1wdHkoKQogICAgICA6IHR5cGVzID0gPERhcnRUeXBlPltdLAogICAgICAgIHBvc2l0aW9uYWwgPSA8RXhwcmVzc2lvbj5bXSwKICAgICAgICBuYW1lZCA9IDxOYW1lZEV4cHJlc3Npb24+W107CgogIGZhY3RvcnkgQXJndW1lbnRzLmZvcndhcmRlZChGdW5jdGlvbk5vZGUgZnVuY3Rpb24pIHsKICAgIHJldHVybiBuZXcgQXJndW1lbnRzKAogICAgICAgIGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLm1hcCgocCkgPT4gbmV3IFZhcmlhYmxlR2V0KHApKS50b0xpc3QoKSwKICAgICAgICBuYW1lZDogZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzCiAgICAgICAgICAgIC5tYXAoKHApID0+IG5ldyBOYW1lZEV4cHJlc3Npb24ocC5uYW1lLCBuZXcgVmFyaWFibGVHZXQocCkpKQogICAgICAgICAgICAudG9MaXN0KCksCiAgICAgICAgdHlwZXM6IGZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzCiAgICAgICAgICAgIC5tYXAoKHApID0+IG5ldyBUeXBlUGFyYW1ldGVyVHlwZShwKSkKICAgICAgICAgICAgLnRvTGlzdCgpKTsKICB9CgogIGFjY2VwdChUcmVlVmlzaXRvciB2KSA9PiB2LnZpc2l0QXJndW1lbnRzKHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdmlzaXRMaXN0KHR5cGVzLCB2KTsKICAgIHZpc2l0TGlzdChwb3NpdGlvbmFsLCB2KTsKICAgIHZpc2l0TGlzdChuYW1lZCwgdik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1UeXBlTGlzdCh0eXBlcywgdik7CiAgICB0cmFuc2Zvcm1MaXN0KHBvc2l0aW9uYWwsIHYsIHRoaXMpOwogICAgdHJhbnNmb3JtTGlzdChuYW1lZCwgdiwgdGhpcyk7CiAgfQp9CgovLy8gQSBuYW1lZCBhcmd1bWVudCwgYG5hbWU6IHZhbHVlYC4KY2xhc3MgTmFtZWRFeHByZXNzaW9uIGV4dGVuZHMgVHJlZU5vZGUgewogIFN0cmluZyBuYW1lOwogIEV4cHJlc3Npb24gdmFsdWU7CgogIE5hbWVkRXhwcmVzc2lvbih0aGlzLm5hbWUsIHRoaXMudmFsdWUpIHsKICAgIHZhbHVlPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgYWNjZXB0KFRyZWVWaXNpdG9yIHYpID0+IHYudmlzaXROYW1lZEV4cHJlc3Npb24odGhpcyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB2YWx1ZT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgdmFsdWUgPSB2YWx1ZS5hY2NlcHQodik7CiAgICAgIHZhbHVlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIENvbW1vbiBzdXBlciBjbGFzcyBmb3IgW0RpcmVjdE1ldGhvZEludm9jYXRpb25dLCBbTWV0aG9kSW52b2NhdGlvbl0sCi8vLyBbU3VwZXJNZXRob2RJbnZvY2F0aW9uXSwgW1N0YXRpY0ludm9jYXRpb25dLCBhbmQgW0NvbnN0cnVjdG9ySW52b2NhdGlvbl0uCmFic3RyYWN0IGNsYXNzIEludm9jYXRpb25FeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgQXJndW1lbnRzIGdldCBhcmd1bWVudHM7CiAgc2V0IGFyZ3VtZW50cyhBcmd1bWVudHMgdmFsdWUpOwoKICAvLy8gTmFtZSBvZiB0aGUgaW52b2tlZCBtZXRob2QuCiAgLy8vCiAgLy8vIE1heSBiZSBgbnVsbGAgaWYgdGhlIHRhcmdldCBpcyBhIHN5bnRoZXRpYyBzdGF0aWMgbWVtYmVyIHdpdGhvdXQgYSBuYW1lLgogIE5hbWUgZ2V0IG5hbWU7Cn0KCi8vLyBFeHByZXNzaW9uIG9mIGZvcm0gYHguZm9vKHkpYC4KY2xhc3MgTWV0aG9kSW52b2NhdGlvbiBleHRlbmRzIEludm9jYXRpb25FeHByZXNzaW9uIHsKICBFeHByZXNzaW9uIHJlY2VpdmVyOwogIE5hbWUgbmFtZTsKICBBcmd1bWVudHMgYXJndW1lbnRzOwoKICBSZWZlcmVuY2UgaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlOwoKICBNZXRob2RJbnZvY2F0aW9uKEV4cHJlc3Npb24gcmVjZWl2ZXIsIE5hbWUgbmFtZSwgQXJndW1lbnRzIGFyZ3VtZW50cywKICAgICAgW01lbWJlciBpbnRlcmZhY2VUYXJnZXRdKQogICAgICA6IHRoaXMuYnlSZWZlcmVuY2UoCiAgICAgICAgICAgIHJlY2VpdmVyLCBuYW1lLCBhcmd1bWVudHMsIGdldE1lbWJlclJlZmVyZW5jZShpbnRlcmZhY2VUYXJnZXQpKTsKCiAgTWV0aG9kSW52b2NhdGlvbi5ieVJlZmVyZW5jZSgKICAgICAgdGhpcy5yZWNlaXZlciwgdGhpcy5uYW1lLCB0aGlzLmFyZ3VtZW50cywgdGhpcy5pbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UpIHsKICAgIHJlY2VpdmVyPy5wYXJlbnQgPSB0aGlzOwogICAgYXJndW1lbnRzPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgTWVtYmVyIGdldCBpbnRlcmZhY2VUYXJnZXQgPT4gaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlPy5hc01lbWJlcjsKCiAgdm9pZCBzZXQgaW50ZXJmYWNlVGFyZ2V0KE1lbWJlciB0YXJnZXQpIHsKICAgIGludGVyZmFjZVRhcmdldFJlZmVyZW5jZSA9IGdldE1lbWJlclJlZmVyZW5jZSh0YXJnZXQpOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpIHsKICAgIHZhciBpbnRlcmZhY2VUYXJnZXQgPSB0aGlzLmludGVyZmFjZVRhcmdldDsKICAgIGlmIChpbnRlcmZhY2VUYXJnZXQgIT0gbnVsbCkgewogICAgICBpZiAoaW50ZXJmYWNlVGFyZ2V0IGlzIFByb2NlZHVyZSAmJgogICAgICAgICAgdHlwZXMuaXNPdmVybG9hZGVkQXJpdGhtZXRpY09wZXJhdG9yKGludGVyZmFjZVRhcmdldCkpIHsKICAgICAgICByZXR1cm4gdHlwZXMuZ2V0VHlwZU9mT3ZlcmxvYWRlZEFyaXRobWV0aWMoCiAgICAgICAgICAgIHJlY2VpdmVyLmdldFN0YXRpY1R5cGUodHlwZXMpLAogICAgICAgICAgICBhcmd1bWVudHMucG9zaXRpb25hbFswXS5nZXRTdGF0aWNUeXBlKHR5cGVzKSk7CiAgICAgIH0KICAgICAgQ2xhc3Mgc3VwZXJjbGFzcyA9IGludGVyZmFjZVRhcmdldC5lbmNsb3NpbmdDbGFzczsKICAgICAgdmFyIHJlY2VpdmVyVHlwZSA9IHJlY2VpdmVyLmdldFN0YXRpY1R5cGVBc0luc3RhbmNlT2Yoc3VwZXJjbGFzcywgdHlwZXMpOwogICAgICB2YXIgZ2V0dGVyVHlwZSA9IFN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZShyZWNlaXZlclR5cGUpCiAgICAgICAgICAuc3Vic3RpdHV0ZVR5cGUoaW50ZXJmYWNlVGFyZ2V0LmdldHRlclR5cGUpOwogICAgICBpZiAoZ2V0dGVyVHlwZSBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgICByZXR1cm4gU3Vic3RpdHV0aW9uLmZyb21QYWlycygKICAgICAgICAgICAgICAgIGdldHRlclR5cGUudHlwZVBhcmFtZXRlcnMsIGFyZ3VtZW50cy50eXBlcykKICAgICAgICAgICAgLnN1YnN0aXR1dGVUeXBlKGdldHRlclR5cGUucmV0dXJuVHlwZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICAgIH0KICAgIH0KICAgIGlmIChuYW1lLm5hbWUgPT0gJ2NhbGwnKSB7CiAgICAgIHZhciByZWNlaXZlclR5cGUgPSByZWNlaXZlci5nZXRTdGF0aWNUeXBlKHR5cGVzKTsKICAgICAgaWYgKHJlY2VpdmVyVHlwZSBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgICBpZiAocmVjZWl2ZXJUeXBlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCAhPSBhcmd1bWVudHMudHlwZXMubGVuZ3RoKSB7CiAgICAgICAgICByZXR1cm4gY29uc3QgQm90dG9tVHlwZSgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gU3Vic3RpdHV0aW9uLmZyb21QYWlycygKICAgICAgICAgICAgICAgIHJlY2VpdmVyVHlwZS50eXBlUGFyYW1ldGVycywgYXJndW1lbnRzLnR5cGVzKQogICAgICAgICAgICAuc3Vic3RpdHV0ZVR5cGUocmVjZWl2ZXJUeXBlLnJldHVyblR5cGUpOwogICAgICB9CiAgICB9CiAgICBpZiAobmFtZS5uYW1lID09ICc9PScpIHsKICAgICAgLy8gV2UgdXNlIHRoaXMgc3BlY2lhbCBjYXNlIHRvIHNpbXBsaWZ5IGdlbmVyYXRpb24gb2YgJz09JyBjaGVja3MuCiAgICAgIHJldHVybiB0eXBlcy5ib29sVHlwZTsKICAgIH0KICAgIHJldHVybiBjb25zdCBEeW5hbWljVHlwZSgpOwogIH0KCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRNZXRob2RJbnZvY2F0aW9uKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdE1ldGhvZEludm9jYXRpb24odGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHJlY2VpdmVyPy5hY2NlcHQodik7CiAgICBuYW1lPy5hY2NlcHQodik7CiAgICBhcmd1bWVudHM/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChyZWNlaXZlciAhPSBudWxsKSB7CiAgICAgIHJlY2VpdmVyID0gcmVjZWl2ZXIuYWNjZXB0KHYpOwogICAgICByZWNlaXZlcj8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmIChhcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBhcmd1bWVudHMgPSBhcmd1bWVudHMuYWNjZXB0KHYpOwogICAgICBhcmd1bWVudHM/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gRXhwcmVzc2lvbiBvZiBmb3JtIGBzdXBlci5mb28oeClgLgovLy8KLy8vIFRoZSBwcm92aWRlZCBhcmd1bWVudHMgbWlnaHQgbm90IG1hdGNoIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSB0YXJnZXQuCmNsYXNzIFN1cGVyTWV0aG9kSW52b2NhdGlvbiBleHRlbmRzIEludm9jYXRpb25FeHByZXNzaW9uIHsKICBOYW1lIG5hbWU7CiAgQXJndW1lbnRzIGFyZ3VtZW50czsKCiAgUmVmZXJlbmNlIGludGVyZmFjZVRhcmdldFJlZmVyZW5jZTsKCiAgU3VwZXJNZXRob2RJbnZvY2F0aW9uKE5hbWUgbmFtZSwgQXJndW1lbnRzIGFyZ3VtZW50cywKICAgICAgW1Byb2NlZHVyZSBpbnRlcmZhY2VUYXJnZXRdKQogICAgICA6IHRoaXMuYnlSZWZlcmVuY2UobmFtZSwgYXJndW1lbnRzLCBnZXRNZW1iZXJSZWZlcmVuY2UoaW50ZXJmYWNlVGFyZ2V0KSk7CgogIFN1cGVyTWV0aG9kSW52b2NhdGlvbi5ieVJlZmVyZW5jZSgKICAgICAgdGhpcy5uYW1lLCB0aGlzLmFyZ3VtZW50cywgdGhpcy5pbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UpIHsKICAgIGFyZ3VtZW50cz8ucGFyZW50ID0gdGhpczsKICB9CgogIFByb2NlZHVyZSBnZXQgaW50ZXJmYWNlVGFyZ2V0ID0+IGludGVyZmFjZVRhcmdldFJlZmVyZW5jZT8uYXNQcm9jZWR1cmU7CgogIHZvaWQgc2V0IGludGVyZmFjZVRhcmdldChQcm9jZWR1cmUgdGFyZ2V0KSB7CiAgICBpbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UgPSBnZXRNZW1iZXJSZWZlcmVuY2UodGFyZ2V0KTsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSB7CiAgICBpZiAoaW50ZXJmYWNlVGFyZ2V0ID09IG51bGwpIHJldHVybiBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgQ2xhc3Mgc3VwZXJjbGFzcyA9IGludGVyZmFjZVRhcmdldC5lbmNsb3NpbmdDbGFzczsKICAgIHZhciByZWNlaXZlclR5cGUgPSB0eXBlcy5nZXRUeXBlQXNJbnN0YW5jZU9mKHR5cGVzLnRoaXNUeXBlLCBzdXBlcmNsYXNzKTsKICAgIHZhciByZXR1cm5UeXBlID0gU3Vic3RpdHV0aW9uLmZyb21JbnRlcmZhY2VUeXBlKHJlY2VpdmVyVHlwZSkKICAgICAgICAuc3Vic3RpdHV0ZVR5cGUoaW50ZXJmYWNlVGFyZ2V0LmZ1bmN0aW9uLnJldHVyblR5cGUpOwogICAgcmV0dXJuIFN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoCiAgICAgICAgICAgIGludGVyZmFjZVRhcmdldC5mdW5jdGlvbi50eXBlUGFyYW1ldGVycywgYXJndW1lbnRzLnR5cGVzKQogICAgICAgIC5zdWJzdGl0dXRlVHlwZShyZXR1cm5UeXBlKTsKICB9CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0U3VwZXJNZXRob2RJbnZvY2F0aW9uKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFN1cGVyTWV0aG9kSW52b2NhdGlvbih0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgbmFtZT8uYWNjZXB0KHYpOwogICAgYXJndW1lbnRzPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgYXJndW1lbnRzID0gYXJndW1lbnRzLmFjY2VwdCh2KTsKICAgICAgYXJndW1lbnRzPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIEV4cHJlc3Npb24gb2YgZm9ybSBgZm9vKHgpYCwgb3IgYGNvbnN0IGZvbyh4KWAgaWYgdGhlIHRhcmdldCBpcyBhbgovLy8gZXh0ZXJuYWwgY29uc3RhbnQgZmFjdG9yeS4KLy8vCi8vLyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzIG1pZ2h0IG5vdCBtYXRjaCB0aGUgcGFyYW1ldGVycyBvZiB0aGUgdGFyZ2V0LgpjbGFzcyBTdGF0aWNJbnZvY2F0aW9uIGV4dGVuZHMgSW52b2NhdGlvbkV4cHJlc3Npb24gewogIFJlZmVyZW5jZSB0YXJnZXRSZWZlcmVuY2U7CiAgQXJndW1lbnRzIGFyZ3VtZW50czsKCiAgLy8vIFRydWUgaWYgdGhpcyBpcyBhIGNvbnN0YW50IGNhbGwgdG8gYW4gZXh0ZXJuYWwgY29uc3RhbnQgZmFjdG9yeS4KICBib29sIGlzQ29uc3Q7CgogIE5hbWUgZ2V0IG5hbWUgPT4gdGFyZ2V0Py5uYW1lOwoKICBTdGF0aWNJbnZvY2F0aW9uKFByb2NlZHVyZSB0YXJnZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMsIHtib29sIGlzQ29uc3Q6IGZhbHNlfSkKICAgICAgOiB0aGlzLmJ5UmVmZXJlbmNlKGdldE1lbWJlclJlZmVyZW5jZSh0YXJnZXQpLCBhcmd1bWVudHMsCiAgICAgICAgICAgIGlzQ29uc3Q6IGlzQ29uc3QpOwoKICBTdGF0aWNJbnZvY2F0aW9uLmJ5UmVmZXJlbmNlKHRoaXMudGFyZ2V0UmVmZXJlbmNlLCB0aGlzLmFyZ3VtZW50cywKICAgICAge3RoaXMuaXNDb25zdDogZmFsc2V9KSB7CiAgICBhcmd1bWVudHM/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBQcm9jZWR1cmUgZ2V0IHRhcmdldCA9PiB0YXJnZXRSZWZlcmVuY2U/LmFzUHJvY2VkdXJlOwoKICB2b2lkIHNldCB0YXJnZXQoUHJvY2VkdXJlIHRhcmdldCkgewogICAgdGFyZ2V0UmVmZXJlbmNlID0gZ2V0TWVtYmVyUmVmZXJlbmNlKHRhcmdldCk7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgewogICAgcmV0dXJuIFN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoCiAgICAgICAgICAgIHRhcmdldC5mdW5jdGlvbi50eXBlUGFyYW1ldGVycywgYXJndW1lbnRzLnR5cGVzKQogICAgICAgIC5zdWJzdGl0dXRlVHlwZSh0YXJnZXQuZnVuY3Rpb24ucmV0dXJuVHlwZSk7CiAgfQoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdFN0YXRpY0ludm9jYXRpb24odGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0U3RhdGljSW52b2NhdGlvbih0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdGFyZ2V0Py5hY2NlcHRSZWZlcmVuY2Uodik7CiAgICBhcmd1bWVudHM/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChhcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBhcmd1bWVudHMgPSBhcmd1bWVudHMuYWNjZXB0KHYpOwogICAgICBhcmd1bWVudHM/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gRXhwcmVzc2lvbiBvZiBmb3JtIGBuZXcgRm9vKHgpYCBvciBgY29uc3QgRm9vKHgpYC4KLy8vCi8vLyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzIG1pZ2h0IG5vdCBtYXRjaCB0aGUgcGFyYW1ldGVycyBvZiB0aGUgdGFyZ2V0LgovLwovLyBERVNJR04gVE9ETzogU2hvdWxkIHdlIHBhc3MgdHlwZSBhcmd1bWVudHMgaW4gYSBzZXBhcmF0ZSBmaWVsZAovLyBgY2xhc3NUeXBlQXJndW1lbnRzYD8gVGhleSBhcmUgcXVpdGUgZGlmZmVyZW50IGZyb20gdHlwZSBhcmd1bWVudHMgdG8KLy8gZ2VuZXJpYyBmdW5jdGlvbnMuCmNsYXNzIENvbnN0cnVjdG9ySW52b2NhdGlvbiBleHRlbmRzIEludm9jYXRpb25FeHByZXNzaW9uIHsKICBSZWZlcmVuY2UgdGFyZ2V0UmVmZXJlbmNlOwogIEFyZ3VtZW50cyBhcmd1bWVudHM7CiAgYm9vbCBpc0NvbnN0OwoKICBOYW1lIGdldCBuYW1lID0+IHRhcmdldD8ubmFtZTsKCiAgQ29uc3RydWN0b3JJbnZvY2F0aW9uKENvbnN0cnVjdG9yIHRhcmdldCwgQXJndW1lbnRzIGFyZ3VtZW50cywKICAgICAge2Jvb2wgaXNDb25zdDogZmFsc2V9KQogICAgICA6IHRoaXMuYnlSZWZlcmVuY2UoZ2V0TWVtYmVyUmVmZXJlbmNlKHRhcmdldCksIGFyZ3VtZW50cywKICAgICAgICAgICAgaXNDb25zdDogaXNDb25zdCk7CgogIENvbnN0cnVjdG9ySW52b2NhdGlvbi5ieVJlZmVyZW5jZSh0aGlzLnRhcmdldFJlZmVyZW5jZSwgdGhpcy5hcmd1bWVudHMsCiAgICAgIHt0aGlzLmlzQ29uc3Q6IGZhbHNlfSkgewogICAgYXJndW1lbnRzPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgQ29uc3RydWN0b3IgZ2V0IHRhcmdldCA9PiB0YXJnZXRSZWZlcmVuY2U/LmFzQ29uc3RydWN0b3I7CgogIHZvaWQgc2V0IHRhcmdldChDb25zdHJ1Y3RvciB0YXJnZXQpIHsKICAgIHRhcmdldFJlZmVyZW5jZSA9IGdldE1lbWJlclJlZmVyZW5jZSh0YXJnZXQpOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpIHsKICAgIHJldHVybiBhcmd1bWVudHMudHlwZXMuaXNFbXB0eQogICAgICAgID8gdGFyZ2V0LmVuY2xvc2luZ0NsYXNzLnJhd1R5cGUKICAgICAgICA6IG5ldyBJbnRlcmZhY2VUeXBlKHRhcmdldC5lbmNsb3NpbmdDbGFzcywgYXJndW1lbnRzLnR5cGVzKTsKICB9CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdENvbnN0cnVjdG9ySW52b2NhdGlvbih0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdGFyZ2V0Py5hY2NlcHRSZWZlcmVuY2Uodik7CiAgICBhcmd1bWVudHM/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChhcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBhcmd1bWVudHMgPSBhcmd1bWVudHMuYWNjZXB0KHYpOwogICAgICBhcmd1bWVudHM/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQoKICBJbnRlcmZhY2VUeXBlIGdldCBjb25zdHJ1Y3RlZFR5cGUgewogICAgcmV0dXJuIGFyZ3VtZW50cy50eXBlcy5pc0VtcHR5CiAgICAgICAgPyB0YXJnZXQuZW5jbG9zaW5nQ2xhc3MucmF3VHlwZQogICAgICAgIDogbmV3IEludGVyZmFjZVR5cGUodGFyZ2V0LmVuY2xvc2luZ0NsYXNzLCBhcmd1bWVudHMudHlwZXMpOwogIH0KfQoKLy8vIEFuIGV4cGxpY2l0IHR5cGUgaW5zdGFudGlhdGlvbiBvZiBhIGdlbmVyaWMgZnVuY3Rpb24uCmNsYXNzIEluc3RhbnRpYXRpb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBFeHByZXNzaW9uIGV4cHJlc3Npb247CiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50czsKCiAgSW5zdGFudGlhdGlvbih0aGlzLmV4cHJlc3Npb24sIHRoaXMudHlwZUFyZ3VtZW50cykgewogICAgZXhwcmVzc2lvbj8ucGFyZW50ID0gdGhpczsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSB7CiAgICBGdW5jdGlvblR5cGUgdHlwZSA9IGV4cHJlc3Npb24uZ2V0U3RhdGljVHlwZSh0eXBlcyk7CiAgICByZXR1cm4gU3Vic3RpdHV0aW9uLmZyb21QYWlycyh0eXBlLnR5cGVQYXJhbWV0ZXJzLCB0eXBlQXJndW1lbnRzKQogICAgICAgIC5zdWJzdGl0dXRlVHlwZSh0eXBlLndpdGhvdXRUeXBlUGFyYW1ldGVycyk7CiAgfQoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdEluc3RhbnRpYXRpb24odGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0SW5zdGFudGlhdGlvbih0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgZXhwcmVzc2lvbj8uYWNjZXB0KHYpOwogICAgdmlzaXRMaXN0KHR5cGVBcmd1bWVudHMsIHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGV4cHJlc3Npb24gIT0gbnVsbCkgewogICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi5hY2NlcHQodik7CiAgICAgIGV4cHJlc3Npb24/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICB0cmFuc2Zvcm1UeXBlTGlzdCh0eXBlQXJndW1lbnRzLCB2KTsKICB9Cn0KCi8vLyBFeHByZXNzaW9uIG9mIGZvcm0gYCF4YC4KLy8vCi8vLyBUaGUgYGlzIWAgYW5kIGAhPWAgb3BlcmF0b3JzIGFyZSBkZXN1Z2FyZWQgaW50byBbTm90XSBub2RlcyB3aXRoIGBpc2AgYW5kCi8vLyBgPT1gIGV4cHJlc3Npb25zIGluc2lkZSwgcmVzcGVjdGl2ZWx5LgpjbGFzcyBOb3QgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBFeHByZXNzaW9uIG9wZXJhbmQ7CgogIE5vdCh0aGlzLm9wZXJhbmQpIHsKICAgIG9wZXJhbmQ/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdHlwZXMuYm9vbFR5cGU7CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0Tm90KHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdE5vdCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgb3BlcmFuZD8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKG9wZXJhbmQgIT0gbnVsbCkgewogICAgICBvcGVyYW5kID0gb3BlcmFuZC5hY2NlcHQodik7CiAgICAgIG9wZXJhbmQ/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gRXhwcmVzc2lvbiBvZiBmb3JtIGB4ICYmIHlgIG9yIGB4IHx8IHlgCmNsYXNzIExvZ2ljYWxFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgRXhwcmVzc2lvbiBsZWZ0OwogIFN0cmluZyBvcGVyYXRvcjsgLy8gJiYgb3IgfHwgb3IgPz8KICBFeHByZXNzaW9uIHJpZ2h0OwoKICBMb2dpY2FsRXhwcmVzc2lvbih0aGlzLmxlZnQsIHRoaXMub3BlcmF0b3IsIHRoaXMucmlnaHQpIHsKICAgIGxlZnQ/LnBhcmVudCA9IHRoaXM7CiAgICByaWdodD8ucGFyZW50ID0gdGhpczsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiB0eXBlcy5ib29sVHlwZTsKCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRMb2dpY2FsRXhwcmVzc2lvbih0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRMb2dpY2FsRXhwcmVzc2lvbih0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgbGVmdD8uYWNjZXB0KHYpOwogICAgcmlnaHQ/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChsZWZ0ICE9IG51bGwpIHsKICAgICAgbGVmdCA9IGxlZnQuYWNjZXB0KHYpOwogICAgICBsZWZ0Py5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKHJpZ2h0ICE9IG51bGwpIHsKICAgICAgcmlnaHQgPSByaWdodC5hY2NlcHQodik7CiAgICAgIHJpZ2h0Py5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIEV4cHJlc3Npb24gb2YgZm9ybSBgeCA/IHkgOiB6YC4KY2xhc3MgQ29uZGl0aW9uYWxFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgRXhwcmVzc2lvbiBjb25kaXRpb247CiAgRXhwcmVzc2lvbiB0aGVuOwogIEV4cHJlc3Npb24gb3RoZXJ3aXNlOwoKICAvLy8gVGhlIHN0YXRpYyB0eXBlIG9mIHRoZSBleHByZXNzaW9uLiBTaG91bGQgbm90IGJlIGBudWxsYC4KICBEYXJ0VHlwZSBzdGF0aWNUeXBlOwoKICBDb25kaXRpb25hbEV4cHJlc3Npb24oCiAgICAgIHRoaXMuY29uZGl0aW9uLCB0aGlzLnRoZW4sIHRoaXMub3RoZXJ3aXNlLCB0aGlzLnN0YXRpY1R5cGUpIHsKICAgIGNvbmRpdGlvbj8ucGFyZW50ID0gdGhpczsKICAgIHRoZW4/LnBhcmVudCA9IHRoaXM7CiAgICBvdGhlcndpc2U/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gc3RhdGljVHlwZTsKCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRDb25kaXRpb25hbEV4cHJlc3Npb24odGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0Q29uZGl0aW9uYWxFeHByZXNzaW9uKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBjb25kaXRpb24/LmFjY2VwdCh2KTsKICAgIHRoZW4/LmFjY2VwdCh2KTsKICAgIG90aGVyd2lzZT8uYWNjZXB0KHYpOwogICAgc3RhdGljVHlwZT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGNvbmRpdGlvbiAhPSBudWxsKSB7CiAgICAgIGNvbmRpdGlvbiA9IGNvbmRpdGlvbi5hY2NlcHQodik7CiAgICAgIGNvbmRpdGlvbj8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmICh0aGVuICE9IG51bGwpIHsKICAgICAgdGhlbiA9IHRoZW4uYWNjZXB0KHYpOwogICAgICB0aGVuPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKG90aGVyd2lzZSAhPSBudWxsKSB7CiAgICAgIG90aGVyd2lzZSA9IG90aGVyd2lzZS5hY2NlcHQodik7CiAgICAgIG90aGVyd2lzZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmIChzdGF0aWNUeXBlICE9IG51bGwpIHsKICAgICAgc3RhdGljVHlwZSA9IHYudmlzaXREYXJ0VHlwZShzdGF0aWNUeXBlKTsKICAgIH0KICB9Cn0KCi8vLyBDb252ZXJ0IGV4cHJlc3Npb25zIHRvIHN0cmluZ3MgYW5kIGNvbmNhdGVuYXRlIHRoZW0uICBTZW1hbnRpY2FsbHksIGNhbGxzCi8vLyBgdG9TdHJpbmdgIG9uIGV2ZXJ5IGFyZ3VtZW50LCBjaGVja3MgdGhhdCBhIHN0cmluZyBpcyByZXR1cm5lZCwgYW5kIHJldHVybnMKLy8vIHRoZSBjb25jYXRlbmF0aW9uIG9mIGFsbCB0aGUgc3RyaW5ncy4KLy8vCi8vLyBJZiBbZXhwcmVzc2lvbnNdIGlzIGVtcHR5IHRoZW4gYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLgovLy8KLy8vIFRoZXNlIGFyaXNlIGZyb20gc3RyaW5nIGludGVycG9sYXRpb25zIGFuZCBhZGphY2VudCBzdHJpbmcgbGl0ZXJhbHMuCmNsYXNzIFN0cmluZ0NvbmNhdGVuYXRpb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBmaW5hbCBMaXN0PEV4cHJlc3Npb24+IGV4cHJlc3Npb25zOwoKICBTdHJpbmdDb25jYXRlbmF0aW9uKHRoaXMuZXhwcmVzc2lvbnMpIHsKICAgIHNldFBhcmVudHMoZXhwcmVzc2lvbnMsIHRoaXMpOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHR5cGVzLnN0cmluZ1R5cGU7CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbih0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB2aXNpdExpc3QoZXhwcmVzc2lvbnMsIHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgdHJhbnNmb3JtTGlzdChleHByZXNzaW9ucywgdiwgdGhpcyk7CiAgfQp9CgovLy8gQ29uY2F0ZW5hdGUgbGlzdHMgaW50byBhIHNpbmdsZSBsaXN0LgovLy8KLy8vIElmIFtsaXN0c10gaXMgZW1wdHkgdGhlbiBhbiBlbXB0eSBsaXN0IGlzIHJldHVybmVkLgovLy8KLy8vIFRoZXNlIGFyaXNlIGZyb20gc3ByZWFkIGFuZCBjb250cm9sLWZsb3cgZWxlbWVudHMgaW4gY29uc3QgbGlzdCBsaXRlcmFscy4KLy8vIFRoZXkgYXJlIG9ubHkgcHJlc2VudCBiZWZvcmUgY29uc3RhbnQgZXZhbHVhdGlvbiwgb3Igd2l0aGluIHVuZXZhbHVhdGVkCi8vLyBjb25zdGFudHMgaW4gY29uc3RhbnQgZXhwcmVzc2lvbnMuCmNsYXNzIExpc3RDb25jYXRlbmF0aW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgRGFydFR5cGUgdHlwZUFyZ3VtZW50OwogIGZpbmFsIExpc3Q8RXhwcmVzc2lvbj4gbGlzdHM7CgogIExpc3RDb25jYXRlbmF0aW9uKHRoaXMubGlzdHMsIHt0aGlzLnR5cGVBcmd1bWVudDogY29uc3QgRHluYW1pY1R5cGUoKX0pIHsKICAgIHNldFBhcmVudHMobGlzdHMsIHRoaXMpOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpIHsKICAgIHJldHVybiB0eXBlcy5saXRlcmFsTGlzdFR5cGUodHlwZUFyZ3VtZW50KTsKICB9CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0TGlzdENvbmNhdGVuYXRpb24odGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0TGlzdENvbmNhdGVuYXRpb24odGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHR5cGVBcmd1bWVudD8uYWNjZXB0KHYpOwogICAgdmlzaXRMaXN0KGxpc3RzLCB2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIHR5cGVBcmd1bWVudCA9IHYudmlzaXREYXJ0VHlwZSh0eXBlQXJndW1lbnQpOwogICAgdHJhbnNmb3JtTGlzdChsaXN0cywgdiwgdGhpcyk7CiAgfQp9CgovLy8gQ29uY2F0ZW5hdGUgc2V0cyBpbnRvIGEgc2luZ2xlIHNldC4KLy8vCi8vLyBJZiBbc2V0c10gaXMgZW1wdHkgdGhlbiBhbiBlbXB0eSBzZXQgaXMgcmV0dXJuZWQuCi8vLwovLy8gVGhlc2UgYXJpc2UgZnJvbSBzcHJlYWQgYW5kIGNvbnRyb2wtZmxvdyBlbGVtZW50cyBpbiBjb25zdCBzZXQgbGl0ZXJhbHMuCi8vLyBUaGV5IGFyZSBvbmx5IHByZXNlbnQgYmVmb3JlIGNvbnN0YW50IGV2YWx1YXRpb24sIG9yIHdpdGhpbiB1bmV2YWx1YXRlZAovLy8gY29uc3RhbnRzIGluIGNvbnN0YW50IGV4cHJlc3Npb25zLgovLy8KLy8vIER1cGxpY2F0ZWQgdmFsdWVzIGluIG9yIGFjcm9zcyB0aGUgc2V0cyB3aWxsIHJlc3VsdCBpbiBhIGNvbXBpbGUtdGltZSBlcnJvcgovLy8gZHVyaW5nIGNvbnN0YW50IGV2YWx1YXRpb24uCmNsYXNzIFNldENvbmNhdGVuYXRpb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBEYXJ0VHlwZSB0eXBlQXJndW1lbnQ7CiAgZmluYWwgTGlzdDxFeHByZXNzaW9uPiBzZXRzOwoKICBTZXRDb25jYXRlbmF0aW9uKHRoaXMuc2V0cywge3RoaXMudHlwZUFyZ3VtZW50OiBjb25zdCBEeW5hbWljVHlwZSgpfSkgewogICAgc2V0UGFyZW50cyhzZXRzLCB0aGlzKTsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSB7CiAgICByZXR1cm4gdHlwZXMubGl0ZXJhbFNldFR5cGUodHlwZUFyZ3VtZW50KTsKICB9CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0U2V0Q29uY2F0ZW5hdGlvbih0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRTZXRDb25jYXRlbmF0aW9uKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB0eXBlQXJndW1lbnQ/LmFjY2VwdCh2KTsKICAgIHZpc2l0TGlzdChzZXRzLCB2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIHR5cGVBcmd1bWVudCA9IHYudmlzaXREYXJ0VHlwZSh0eXBlQXJndW1lbnQpOwogICAgdHJhbnNmb3JtTGlzdChzZXRzLCB2LCB0aGlzKTsKICB9Cn0KCi8vLyBDb25jYXRlbmF0ZSBtYXBzIGludG8gYSBzaW5nbGUgbWFwLgovLy8KLy8vIElmIFttYXBzXSBpcyBlbXB0eSB0aGVuIGFuIGVtcHR5IG1hcCBpcyByZXR1cm5lZC4KLy8vCi8vLyBUaGVzZSBhcmlzZSBmcm9tIHNwcmVhZCBhbmQgY29udHJvbC1mbG93IGVsZW1lbnRzIGluIGNvbnN0IG1hcCBsaXRlcmFscy4KLy8vIFRoZXkgYXJlIG9ubHkgcHJlc2VudCBiZWZvcmUgY29uc3RhbnQgZXZhbHVhdGlvbiwgb3Igd2l0aGluIHVuZXZhbHVhdGVkCi8vLyBjb25zdGFudHMgaW4gY29uc3RhbnQgZXhwcmVzc2lvbnMuCi8vLwovLy8gRHVwbGljYXRlZCBrZXlzIGluIG9yIGFjcm9zcyB0aGUgbWFwcyB3aWxsIHJlc3VsdCBpbiBhIGNvbXBpbGUtdGltZSBlcnJvcgovLy8gZHVyaW5nIGNvbnN0YW50IGV2YWx1YXRpb24uCmNsYXNzIE1hcENvbmNhdGVuYXRpb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBEYXJ0VHlwZSBrZXlUeXBlOwogIERhcnRUeXBlIHZhbHVlVHlwZTsKICBmaW5hbCBMaXN0PEV4cHJlc3Npb24+IG1hcHM7CgogIE1hcENvbmNhdGVuYXRpb24odGhpcy5tYXBzLAogICAgICB7dGhpcy5rZXlUeXBlOiBjb25zdCBEeW5hbWljVHlwZSgpLAogICAgICB0aGlzLnZhbHVlVHlwZTogY29uc3QgRHluYW1pY1R5cGUoKX0pIHsKICAgIHNldFBhcmVudHMobWFwcywgdGhpcyk7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgewogICAgcmV0dXJuIHR5cGVzLmxpdGVyYWxNYXBUeXBlKGtleVR5cGUsIHZhbHVlVHlwZSk7CiAgfQoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdE1hcENvbmNhdGVuYXRpb24odGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0TWFwQ29uY2F0ZW5hdGlvbih0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAga2V5VHlwZT8uYWNjZXB0KHYpOwogICAgdmFsdWVUeXBlPy5hY2NlcHQodik7CiAgICB2aXNpdExpc3QobWFwcywgdik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBrZXlUeXBlID0gdi52aXNpdERhcnRUeXBlKGtleVR5cGUpOwogICAgdmFsdWVUeXBlID0gdi52aXNpdERhcnRUeXBlKHZhbHVlVHlwZSk7CiAgICB0cmFuc2Zvcm1MaXN0KG1hcHMsIHYsIHRoaXMpOwogIH0KfQoKLy8vIENyZWF0ZSBhbiBpbnN0YW5jZSBkaXJlY3RseSBmcm9tIHRoZSBmaWVsZCB2YWx1ZXMuCi8vLwovLy8gVGhpcyBleHByZXNzaW9uIGFyaXNlcyBmcm9tIGNvbnN0IGNvbnN0cnVjdG9yIGNhbGxzIHdoZW4gb25lIG9yIG1vcmUgZmllbGQKLy8vIGluaXRpYWxpemluZyBleHByZXNzaW9ucywgZmllbGQgaW5pdGlhbGl6ZXJzLCBhc3NlcnQgaW5pdGlhbGl6ZXJzIG9yIHVudXNlZAovLy8gYXJndW1lbnRzIGNvbnRhaW4gdW5ldmFsdWF0ZWQgZXhwcmVzc2lvbnMuIFRoZXkgb25seSBldmVyIG9jY3VyIHdpdGhpbgovLy8gdW5ldmFsdWF0ZWQgY29uc3RhbnRzIGluIGNvbnN0YW50IGV4cHJlc3Npb25zLgpjbGFzcyBJbnN0YW5jZUNyZWF0aW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgZmluYWwgUmVmZXJlbmNlIGNsYXNzUmVmZXJlbmNlOwogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CiAgZmluYWwgTWFwPFJlZmVyZW5jZSwgRXhwcmVzc2lvbj4gZmllbGRWYWx1ZXM7CiAgZmluYWwgTGlzdDxBc3NlcnRTdGF0ZW1lbnQ+IGFzc2VydHM7CiAgZmluYWwgTGlzdDxFeHByZXNzaW9uPiB1bnVzZWRBcmd1bWVudHM7CgogIEluc3RhbmNlQ3JlYXRpb24odGhpcy5jbGFzc1JlZmVyZW5jZSwgdGhpcy50eXBlQXJndW1lbnRzLCB0aGlzLmZpZWxkVmFsdWVzLAogICAgICB0aGlzLmFzc2VydHMsIHRoaXMudW51c2VkQXJndW1lbnRzKTsKCiAgQ2xhc3MgZ2V0IGNsYXNzTm9kZSA9PiBjbGFzc1JlZmVyZW5jZS5hc0NsYXNzOwoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgewogICAgcmV0dXJuIHR5cGVBcmd1bWVudHMuaXNFbXB0eQogICAgICAgID8gY2xhc3NOb2RlLnJhd1R5cGUKICAgICAgICA6IG5ldyBJbnRlcmZhY2VUeXBlKGNsYXNzTm9kZSwgdHlwZUFyZ3VtZW50cyk7CiAgfQoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdEluc3RhbmNlQ3JlYXRpb24odGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0SW5zdGFuY2VDcmVhdGlvbih0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgY2xhc3NSZWZlcmVuY2UuYXNDbGFzcy5hY2NlcHRSZWZlcmVuY2Uodik7CiAgICB2aXNpdExpc3QodHlwZUFyZ3VtZW50cywgdik7CiAgICBmb3IgKGZpbmFsIFJlZmVyZW5jZSByZWZlcmVuY2UgaW4gZmllbGRWYWx1ZXMua2V5cykgewogICAgICByZWZlcmVuY2UuYXNGaWVsZC5hY2NlcHRSZWZlcmVuY2Uodik7CiAgICB9CiAgICBmb3IgKGZpbmFsIEV4cHJlc3Npb24gdmFsdWUgaW4gZmllbGRWYWx1ZXMudmFsdWVzKSB7CiAgICAgIHZhbHVlLmFjY2VwdCh2KTsKICAgIH0KICAgIHZpc2l0TGlzdChhc3NlcnRzLCB2KTsKICAgIHZpc2l0TGlzdCh1bnVzZWRBcmd1bWVudHMsIHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgZmllbGRWYWx1ZXMuZm9yRWFjaCgoUmVmZXJlbmNlIGZpZWxkUmVmLCBFeHByZXNzaW9uIHZhbHVlKSB7CiAgICAgIEV4cHJlc3Npb24gdHJhbnNmb3JtZWQgPSB2YWx1ZS5hY2NlcHQodik7CiAgICAgIGlmICh0cmFuc2Zvcm1lZCAhPSBudWxsICYmICFpZGVudGljYWwodmFsdWUsIHRyYW5zZm9ybWVkKSkgewogICAgICAgIGZpZWxkVmFsdWVzW2ZpZWxkUmVmXSA9IHRyYW5zZm9ybWVkOwogICAgICAgIHRyYW5zZm9ybWVkLnBhcmVudCA9IHRoaXM7CiAgICAgIH0KICAgIH0pOwogICAgdHJhbnNmb3JtTGlzdChhc3NlcnRzLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybUxpc3QodW51c2VkQXJndW1lbnRzLCB2LCB0aGlzKTsKICB9Cn0KCi8vLyBFeHByZXNzaW9uIG9mIGZvcm0gYHggaXMgVGAuCmNsYXNzIElzRXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24gewogIEV4cHJlc3Npb24gb3BlcmFuZDsKICBEYXJ0VHlwZSB0eXBlOwoKICBJc0V4cHJlc3Npb24odGhpcy5vcGVyYW5kLCB0aGlzLnR5cGUpIHsKICAgIG9wZXJhbmQ/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdHlwZXMuYm9vbFR5cGU7CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0SXNFeHByZXNzaW9uKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdElzRXhwcmVzc2lvbih0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgb3BlcmFuZD8uYWNjZXB0KHYpOwogICAgdHlwZT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKG9wZXJhbmQgIT0gbnVsbCkgewogICAgICBvcGVyYW5kID0gb3BlcmFuZC5hY2NlcHQodik7CiAgICAgIG9wZXJhbmQ/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICB0eXBlID0gdi52aXNpdERhcnRUeXBlKHR5cGUpOwogIH0KfQoKLy8vIEV4cHJlc3Npb24gb2YgZm9ybSBgeCBhcyBUYC4KY2xhc3MgQXNFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgaW50IGZsYWdzID0gMDsKICBFeHByZXNzaW9uIG9wZXJhbmQ7CiAgRGFydFR5cGUgdHlwZTsKCiAgQXNFeHByZXNzaW9uKHRoaXMub3BlcmFuZCwgdGhpcy50eXBlKSB7CiAgICBvcGVyYW5kPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgLy8gTXVzdCBtYXRjaCBzZXJpYWxpemVkIGJpdCBwb3NpdGlvbnMuCiAgc3RhdGljIGNvbnN0IGludCBGbGFnVHlwZUVycm9yID0gMSA8PCAwOwoKICAvLy8gSW5kaWNhdGVzIHRoZSB0eXBlIG9mIGVycm9yIHRoYXQgc2hvdWxkIGJlIHRocm93biBpZiB0aGUgY2hlY2sgZmFpbHMuCiAgLy8vCiAgLy8vIGB0cnVlYCBtZWFucyB0aGF0IGEgVHlwZUVycm9yIHNob3VsZCBiZSB0aHJvd24uICBgZmFsc2VgIG1lYW5zIHRoYXQgYQogIC8vLyBDYXN0RXJyb3Igc2hvdWxkIGJlIHRocm93bi4KICBib29sIGdldCBpc1R5cGVFcnJvciA9PiBmbGFncyAmIEZsYWdUeXBlRXJyb3IgIT0gMDsKCiAgdm9pZCBzZXQgaXNUeXBlRXJyb3IoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdUeXBlRXJyb3IpIDogKGZsYWdzICYgfkZsYWdUeXBlRXJyb3IpOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHR5cGU7CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0QXNFeHByZXNzaW9uKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdEFzRXhwcmVzc2lvbih0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgb3BlcmFuZD8uYWNjZXB0KHYpOwogICAgdHlwZT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKG9wZXJhbmQgIT0gbnVsbCkgewogICAgICBvcGVyYW5kID0gb3BlcmFuZC5hY2NlcHQodik7CiAgICAgIG9wZXJhbmQ/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICB0eXBlID0gdi52aXNpdERhcnRUeXBlKHR5cGUpOwogIH0KfQoKLy8vIEFuIGludGVnZXIsIGRvdWJsZSwgYm9vbGVhbiwgc3RyaW5nLCBvciBudWxsIGNvbnN0YW50LgphYnN0cmFjdCBjbGFzcyBCYXNpY0xpdGVyYWwgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBPYmplY3QgZ2V0IHZhbHVlOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3Igdikge30KICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7fQp9CgpjbGFzcyBTdHJpbmdMaXRlcmFsIGV4dGVuZHMgQmFzaWNMaXRlcmFsIHsKICBTdHJpbmcgdmFsdWU7CgogIFN0cmluZ0xpdGVyYWwodGhpcy52YWx1ZSk7CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiB0eXBlcy5zdHJpbmdUeXBlOwoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdFN0cmluZ0xpdGVyYWwodGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0U3RyaW5nTGl0ZXJhbCh0aGlzLCBhcmcpOwp9CgpjbGFzcyBJbnRMaXRlcmFsIGV4dGVuZHMgQmFzaWNMaXRlcmFsIHsKICAvLy8gTm90ZSB0aGF0IHRoaXMgdmFsdWUgaG9sZHMgYSB1aW50NjQgdmFsdWUuCiAgLy8vIEUuZy4gIjB4ODAwMDAwMDAwMDAwMDAwMCIgd2lsbCBiZSBzYXZlZCBhcyAiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiIGRlc3BpdGUKICAvLy8gdGVjaG5pY2FsbHkgKG9uIHNvbWUgcGxhdGZvcm1zLCBwYXJ0aWN1bGFybHkgSmF2YXNjcmlwdCkgYmVpbmcgcG9zaXRpdmUuCiAgLy8vIElmIHRoZSBudW1iZXIgaXMgbWVhbnQgdG8gYmUgbmVnYXRpdmUgaXQgd2lsbCBiZSB3cmFwcGVkIGluIGEgInVuYXJ5LSIuCiAgaW50IHZhbHVlOwoKICBJbnRMaXRlcmFsKHRoaXMudmFsdWUpOwoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdHlwZXMuaW50VHlwZTsKCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRJbnRMaXRlcmFsKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdEludExpdGVyYWwodGhpcywgYXJnKTsKfQoKY2xhc3MgRG91YmxlTGl0ZXJhbCBleHRlbmRzIEJhc2ljTGl0ZXJhbCB7CiAgZG91YmxlIHZhbHVlOwoKICBEb3VibGVMaXRlcmFsKHRoaXMudmFsdWUpOwoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdHlwZXMuZG91YmxlVHlwZTsKCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXREb3VibGVMaXRlcmFsKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdERvdWJsZUxpdGVyYWwodGhpcywgYXJnKTsKfQoKY2xhc3MgQm9vbExpdGVyYWwgZXh0ZW5kcyBCYXNpY0xpdGVyYWwgewogIGJvb2wgdmFsdWU7CgogIEJvb2xMaXRlcmFsKHRoaXMudmFsdWUpOwoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdHlwZXMuYm9vbFR5cGU7CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0Qm9vbExpdGVyYWwodGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0Qm9vbExpdGVyYWwodGhpcywgYXJnKTsKfQoKY2xhc3MgTnVsbExpdGVyYWwgZXh0ZW5kcyBCYXNpY0xpdGVyYWwgewogIE9iamVjdCBnZXQgdmFsdWUgPT4gbnVsbDsKCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHR5cGVzLm51bGxUeXBlOwoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdE51bGxMaXRlcmFsKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdE51bGxMaXRlcmFsKHRoaXMsIGFyZyk7Cn0KCmNsYXNzIFN5bWJvbExpdGVyYWwgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBTdHJpbmcgdmFsdWU7IC8vIEV2ZXJ5dGhpbmcgc3RyaWN0bHkgYWZ0ZXIgdGhlICcjJy4KCiAgU3ltYm9sTGl0ZXJhbCh0aGlzLnZhbHVlKTsKCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHR5cGVzLnN5bWJvbFR5cGU7CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0U3ltYm9sTGl0ZXJhbCh0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRTeW1ib2xMaXRlcmFsKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7fQogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHt9Cn0KCmNsYXNzIFR5cGVMaXRlcmFsIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgRGFydFR5cGUgdHlwZTsKCiAgVHlwZUxpdGVyYWwodGhpcy50eXBlKTsKCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHR5cGVzLnR5cGVUeXBlOwoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdFR5cGVMaXRlcmFsKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFR5cGVMaXRlcmFsKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB0eXBlPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0eXBlID0gdi52aXNpdERhcnRUeXBlKHR5cGUpOwogIH0KfQoKY2xhc3MgVGhpc0V4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdHlwZXMudGhpc1R5cGU7CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0VGhpc0V4cHJlc3Npb24odGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0VGhpc0V4cHJlc3Npb24odGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHt9CiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikge30KfQoKY2xhc3MgUmV0aHJvdyBleHRlbmRzIEV4cHJlc3Npb24gewogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiBjb25zdCBCb3R0b21UeXBlKCk7CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0UmV0aHJvdyh0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRSZXRocm93KHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7fQogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHt9Cn0KCmNsYXNzIFRocm93IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgRXhwcmVzc2lvbiBleHByZXNzaW9uOwoKICBUaHJvdyh0aGlzLmV4cHJlc3Npb24pIHsKICAgIGV4cHJlc3Npb24/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gY29uc3QgQm90dG9tVHlwZSgpOwoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdFRocm93KHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFRocm93KHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBleHByZXNzaW9uPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAoZXhwcmVzc2lvbiAhPSBudWxsKSB7CiAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLmFjY2VwdCh2KTsKICAgICAgZXhwcmVzc2lvbj8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCmNsYXNzIExpc3RMaXRlcmFsIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgYm9vbCBpc0NvbnN0OwogIERhcnRUeXBlIHR5cGVBcmd1bWVudDsgLy8gTm90IG51bGwsIGRlZmF1bHRzIHRvIER5bmFtaWNUeXBlLgogIGZpbmFsIExpc3Q8RXhwcmVzc2lvbj4gZXhwcmVzc2lvbnM7CgogIExpc3RMaXRlcmFsKHRoaXMuZXhwcmVzc2lvbnMsCiAgICAgIHt0aGlzLnR5cGVBcmd1bWVudDogY29uc3QgRHluYW1pY1R5cGUoKSwgdGhpcy5pc0NvbnN0OiBmYWxzZX0pIHsKICAgIGFzc2VydCh0eXBlQXJndW1lbnQgIT0gbnVsbCk7CiAgICBzZXRQYXJlbnRzKGV4cHJlc3Npb25zLCB0aGlzKTsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSB7CiAgICByZXR1cm4gdHlwZXMubGl0ZXJhbExpc3RUeXBlKHR5cGVBcmd1bWVudCk7CiAgfQoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdExpc3RMaXRlcmFsKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdExpc3RMaXRlcmFsKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB0eXBlQXJndW1lbnQ/LmFjY2VwdCh2KTsKICAgIHZpc2l0TGlzdChleHByZXNzaW9ucywgdik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0eXBlQXJndW1lbnQgPSB2LnZpc2l0RGFydFR5cGUodHlwZUFyZ3VtZW50KTsKICAgIHRyYW5zZm9ybUxpc3QoZXhwcmVzc2lvbnMsIHYsIHRoaXMpOwogIH0KfQoKY2xhc3MgU2V0TGl0ZXJhbCBleHRlbmRzIEV4cHJlc3Npb24gewogIGJvb2wgaXNDb25zdDsKICBEYXJ0VHlwZSB0eXBlQXJndW1lbnQ7IC8vIE5vdCBudWxsLCBkZWZhdWx0cyB0byBEeW5hbWljVHlwZS4KICBmaW5hbCBMaXN0PEV4cHJlc3Npb24+IGV4cHJlc3Npb25zOwoKICBTZXRMaXRlcmFsKHRoaXMuZXhwcmVzc2lvbnMsCiAgICAgIHt0aGlzLnR5cGVBcmd1bWVudDogY29uc3QgRHluYW1pY1R5cGUoKSwgdGhpcy5pc0NvbnN0OiBmYWxzZX0pIHsKICAgIGFzc2VydCh0eXBlQXJndW1lbnQgIT0gbnVsbCk7CiAgICBzZXRQYXJlbnRzKGV4cHJlc3Npb25zLCB0aGlzKTsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSB7CiAgICByZXR1cm4gdHlwZXMubGl0ZXJhbFNldFR5cGUodHlwZUFyZ3VtZW50KTsKICB9CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0U2V0TGl0ZXJhbCh0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRTZXRMaXRlcmFsKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB0eXBlQXJndW1lbnQ/LmFjY2VwdCh2KTsKICAgIHZpc2l0TGlzdChleHByZXNzaW9ucywgdik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0eXBlQXJndW1lbnQgPSB2LnZpc2l0RGFydFR5cGUodHlwZUFyZ3VtZW50KTsKICAgIHRyYW5zZm9ybUxpc3QoZXhwcmVzc2lvbnMsIHYsIHRoaXMpOwogIH0KfQoKY2xhc3MgTWFwTGl0ZXJhbCBleHRlbmRzIEV4cHJlc3Npb24gewogIGJvb2wgaXNDb25zdDsKICBEYXJ0VHlwZSBrZXlUeXBlOyAvLyBOb3QgbnVsbCwgZGVmYXVsdHMgdG8gRHluYW1pY1R5cGUuCiAgRGFydFR5cGUgdmFsdWVUeXBlOyAvLyBOb3QgbnVsbCwgZGVmYXVsdHMgdG8gRHluYW1pY1R5cGUuCiAgZmluYWwgTGlzdDxNYXBFbnRyeT4gZW50cmllczsKCiAgTWFwTGl0ZXJhbCh0aGlzLmVudHJpZXMsCiAgICAgIHt0aGlzLmtleVR5cGU6IGNvbnN0IER5bmFtaWNUeXBlKCksCiAgICAgIHRoaXMudmFsdWVUeXBlOiBjb25zdCBEeW5hbWljVHlwZSgpLAogICAgICB0aGlzLmlzQ29uc3Q6IGZhbHNlfSkgewogICAgYXNzZXJ0KGtleVR5cGUgIT0gbnVsbCk7CiAgICBhc3NlcnQodmFsdWVUeXBlICE9IG51bGwpOwogICAgc2V0UGFyZW50cyhlbnRyaWVzLCB0aGlzKTsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSB7CiAgICByZXR1cm4gdHlwZXMubGl0ZXJhbE1hcFR5cGUoa2V5VHlwZSwgdmFsdWVUeXBlKTsKICB9CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0TWFwTGl0ZXJhbCh0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRNYXBMaXRlcmFsKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBrZXlUeXBlPy5hY2NlcHQodik7CiAgICB2YWx1ZVR5cGU/LmFjY2VwdCh2KTsKICAgIHZpc2l0TGlzdChlbnRyaWVzLCB2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGtleVR5cGUgPSB2LnZpc2l0RGFydFR5cGUoa2V5VHlwZSk7CiAgICB2YWx1ZVR5cGUgPSB2LnZpc2l0RGFydFR5cGUodmFsdWVUeXBlKTsKICAgIHRyYW5zZm9ybUxpc3QoZW50cmllcywgdiwgdGhpcyk7CiAgfQp9CgpjbGFzcyBNYXBFbnRyeSBleHRlbmRzIFRyZWVOb2RlIHsKICBFeHByZXNzaW9uIGtleTsKICBFeHByZXNzaW9uIHZhbHVlOwoKICBNYXBFbnRyeSh0aGlzLmtleSwgdGhpcy52YWx1ZSkgewogICAga2V5Py5wYXJlbnQgPSB0aGlzOwogICAgdmFsdWU/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBhY2NlcHQoVHJlZVZpc2l0b3IgdikgPT4gdi52aXNpdE1hcEVudHJ5KHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAga2V5Py5hY2NlcHQodik7CiAgICB2YWx1ZT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGtleSAhPSBudWxsKSB7CiAgICAgIGtleSA9IGtleS5hY2NlcHQodik7CiAgICAgIGtleT8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIHZhbHVlID0gdmFsdWUuYWNjZXB0KHYpOwogICAgICB2YWx1ZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBFeHByZXNzaW9uIG9mIGZvcm0gYGF3YWl0IHhgLgpjbGFzcyBBd2FpdEV4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBFeHByZXNzaW9uIG9wZXJhbmQ7CgogIEF3YWl0RXhwcmVzc2lvbih0aGlzLm9wZXJhbmQpIHsKICAgIG9wZXJhbmQ/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgewogICAgcmV0dXJuIHR5cGVzLnVuZnV0dXJlVHlwZShvcGVyYW5kLmdldFN0YXRpY1R5cGUodHlwZXMpKTsKICB9CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0QXdhaXRFeHByZXNzaW9uKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdEF3YWl0RXhwcmVzc2lvbih0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgb3BlcmFuZD8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKG9wZXJhbmQgIT0gbnVsbCkgewogICAgICBvcGVyYW5kID0gb3BlcmFuZC5hY2NlcHQodik7CiAgICAgIG9wZXJhbmQ/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gQ29tbW9uIHN1cGVyLWludGVyZmFjZSBmb3IgW0Z1bmN0aW9uRXhwcmVzc2lvbl0gYW5kIFtGdW5jdGlvbkRlY2xhcmF0aW9uXS4KYWJzdHJhY3QgY2xhc3MgTG9jYWxGdW5jdGlvbiBpbXBsZW1lbnRzIFRyZWVOb2RlIHsKICBGdW5jdGlvbk5vZGUgZ2V0IGZ1bmN0aW9uOwp9CgovLy8gRXhwcmVzc2lvbiBvZiBmb3JtIGAoeCx5KSA9PiAuLi5gIG9yIGAoeCx5KSB7IC4uLiB9YAovLy8KLy8vIFRoZSBhcnJvdy1ib2R5IGZvcm0gYD0+IGVgIGlzIGRlc3VnYXJlZCBpbnRvIGByZXR1cm4gZTtgLgpjbGFzcyBGdW5jdGlvbkV4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9uIGltcGxlbWVudHMgTG9jYWxGdW5jdGlvbiB7CiAgRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uOwoKICBGdW5jdGlvbkV4cHJlc3Npb24odGhpcy5mdW5jdGlvbikgewogICAgZnVuY3Rpb24/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gZnVuY3Rpb24uZnVuY3Rpb25UeXBlOwoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbih0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRGdW5jdGlvbkV4cHJlc3Npb24odGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGZ1bmN0aW9uPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAoZnVuY3Rpb24gIT0gbnVsbCkgewogICAgICBmdW5jdGlvbiA9IGZ1bmN0aW9uLmFjY2VwdCh2KTsKICAgICAgZnVuY3Rpb24/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgpjbGFzcyBDb25zdGFudEV4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBDb25zdGFudCBjb25zdGFudDsKICBEYXJ0VHlwZSB0eXBlOwoKICBDb25zdGFudEV4cHJlc3Npb24odGhpcy5jb25zdGFudCwgW3RoaXMudHlwZSA9IGNvbnN0IER5bmFtaWNUeXBlKCldKSB7CiAgICBhc3NlcnQoY29uc3RhbnQgIT0gbnVsbCk7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdHlwZTsKCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRDb25zdGFudEV4cHJlc3Npb24odGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0Q29uc3RhbnRFeHByZXNzaW9uKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBjb25zdGFudD8uYWNjZXB0UmVmZXJlbmNlKHYpOwogICAgdHlwZT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgY29uc3RhbnQgPSB2LnZpc2l0Q29uc3RhbnQoY29uc3RhbnQpOwogICAgdHlwZSA9IHYudmlzaXREYXJ0VHlwZSh0eXBlKTsKICB9Cn0KCi8vLyBTeW50aGV0aWMgZXhwcmVzc2lvbiBvZiBmb3JtIGBsZXQgdiA9IHggaW4geWAKY2xhc3MgTGV0IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZTsgLy8gTXVzdCBoYXZlIGFuIGluaXRpYWxpemVyLgogIEV4cHJlc3Npb24gYm9keTsKCiAgTGV0KHRoaXMudmFyaWFibGUsIHRoaXMuYm9keSkgewogICAgdmFyaWFibGU/LnBhcmVudCA9IHRoaXM7CiAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IGJvZHkuZ2V0U3RhdGljVHlwZSh0eXBlcyk7CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0TGV0KHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdExldCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdmFyaWFibGU/LmFjY2VwdCh2KTsKICAgIGJvZHk/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmICh2YXJpYWJsZSAhPSBudWxsKSB7CiAgICAgIHZhcmlhYmxlID0gdmFyaWFibGUuYWNjZXB0KHYpOwogICAgICB2YXJpYWJsZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmIChib2R5ICE9IG51bGwpIHsKICAgICAgYm9keSA9IGJvZHkuYWNjZXB0KHYpOwogICAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKY2xhc3MgQmxvY2tFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgQmxvY2sgYm9keTsKICBFeHByZXNzaW9uIHZhbHVlOwoKICBCbG9ja0V4cHJlc3Npb24odGhpcy5ib2R5LCB0aGlzLnZhbHVlKSB7CiAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogICAgdmFsdWU/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdmFsdWUuZ2V0U3RhdGljVHlwZSh0eXBlcyk7CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0QmxvY2tFeHByZXNzaW9uKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdEJsb2NrRXhwcmVzc2lvbih0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgYm9keT8uYWNjZXB0KHYpOwogICAgdmFsdWU/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChib2R5ICE9IG51bGwpIHsKICAgICAgYm9keSA9IGJvZHkuYWNjZXB0KHYpOwogICAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgdmFsdWUgPSB2YWx1ZS5hY2NlcHQodik7CiAgICAgIHZhbHVlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIEF0dGVtcHQgdG8gbG9hZCB0aGUgbGlicmFyeSByZWZlcnJlZCB0byBieSBhIGRlZmVycmVkIGltcG9ydC4KLy8vCi8vLyBUaGlzIGluc3RydWN0aW9uIGlzIGNvbmNlcm5lZCB3aXRoOgovLy8gLSBrZWVwaW5nIHRyYWNrIHdoZXRoZXIgdGhlIGRlZmVycmVkIGltcG9ydCBpcyBtYXJrZWQgYXMgJ2xvYWRlZCcKLy8vIC0ga2VlcGluZyB0cmFjayBvZiB3aGV0aGVyIHRoZSBsaWJyYXJ5IGNvZGUgaGFzIGFscmVhZHkgYmVlbiBkb3dubG9hZGVkCi8vLyAtIGFjdHVhbGx5IGRvd25sb2FkaW5nIGFuZCBsaW5raW5nIHRoZSBsaWJyYXJ5Ci8vLwovLy8gU2hvdWxkIHJldHVybiBhIGZ1dHVyZS4gIFRoZSB2YWx1ZSBpbiB0aGlzIGZ1dHVyZSB3aWxsIGJlIHRoZSBzYW1lIHZhbHVlCi8vLyBzZWVuIGJ5IGNhbGxlcnMgb2YgYGxvYWRMaWJyYXJ5YCBmdW5jdGlvbnMuCi8vLwovLy8gT24gYmFja2VuZHMgdGhhdCBsaW5rIHRoZSBlbnRpcmUgcHJvZ3JhbSBlYWdlcmx5LCB0aGlzIGluc3RydWN0aW9uIG5lZWRzCi8vLyB0byBtYXJrIHRoZSBkZWZlcnJlZCBpbXBvcnQgYXMgJ2xvYWRlZCcgYW5kIHJldHVybiBhIGZ1dHVyZS4KY2xhc3MgTG9hZExpYnJhcnkgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICAvLy8gUmVmZXJlbmNlIHRvIGEgZGVmZXJyZWQgaW1wb3J0IGluIHRoZSBlbmNsb3NpbmcgbGlicmFyeS4KICBMaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQ7CgogIExvYWRMaWJyYXJ5KHRoaXMuaW1wb3J0KTsKCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpIHsKICAgIHJldHVybiB0eXBlcy5mdXR1cmVUeXBlKGNvbnN0IER5bmFtaWNUeXBlKCkpOwogIH0KCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRMb2FkTGlicmFyeSh0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRMb2FkTGlicmFyeSh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3Igdikge30KICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7fQp9CgovLy8gQ2hlY2tzIHRoYXQgdGhlIGdpdmVuIGRlZmVycmVkIGltcG9ydCBoYXMgYmVlbiBtYXJrZWQgYXMgJ2xvYWRlZCcuCmNsYXNzIENoZWNrTGlicmFyeUlzTG9hZGVkIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgLy8vIFJlZmVyZW5jZSB0byBhIGRlZmVycmVkIGltcG9ydCBpbiB0aGUgZW5jbG9zaW5nIGxpYnJhcnkuCiAgTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0OwoKICBDaGVja0xpYnJhcnlJc0xvYWRlZCh0aGlzLmltcG9ydCk7CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSB7CiAgICByZXR1cm4gdHlwZXMub2JqZWN0VHlwZTsKICB9CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0Q2hlY2tMaWJyYXJ5SXNMb2FkZWQodGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0Q2hlY2tMaWJyYXJ5SXNMb2FkZWQodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHt9CiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikge30KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RBVEVNRU5UUwovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmFic3RyYWN0IGNsYXNzIFN0YXRlbWVudCBleHRlbmRzIFRyZWVOb2RlIHsKICBhY2NlcHQoU3RhdGVtZW50VmlzaXRvciB2KTsKICBhY2NlcHQxKFN0YXRlbWVudFZpc2l0b3IxIHYsIGFyZyk7Cn0KCmNsYXNzIEV4cHJlc3Npb25TdGF0ZW1lbnQgZXh0ZW5kcyBTdGF0ZW1lbnQgewogIEV4cHJlc3Npb24gZXhwcmVzc2lvbjsKCiAgRXhwcmVzc2lvblN0YXRlbWVudCh0aGlzLmV4cHJlc3Npb24pIHsKICAgIGV4cHJlc3Npb24/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBhY2NlcHQoU3RhdGVtZW50VmlzaXRvciB2KSA9PiB2LnZpc2l0RXhwcmVzc2lvblN0YXRlbWVudCh0aGlzKTsKICBhY2NlcHQxKFN0YXRlbWVudFZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnQodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGV4cHJlc3Npb24/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChleHByZXNzaW9uICE9IG51bGwpIHsKICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24uYWNjZXB0KHYpOwogICAgICBleHByZXNzaW9uPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKY2xhc3MgQmxvY2sgZXh0ZW5kcyBTdGF0ZW1lbnQgewogIGZpbmFsIExpc3Q8U3RhdGVtZW50PiBzdGF0ZW1lbnRzOwoKICBCbG9jayh0aGlzLnN0YXRlbWVudHMpIHsKICAgIC8vIEVuc3VyZSBzdGF0ZW1lbnRzIGlzIG11dGFibGUuCiAgICBhc3NlcnQoKHN0YXRlbWVudHMKICAgICAgICAgIC4uYWRkKG51bGwpCiAgICAgICAgICAuLnJlbW92ZUxhc3QoKSkgIT0KICAgICAgICBudWxsKTsKICAgIHNldFBhcmVudHMoc3RhdGVtZW50cywgdGhpcyk7CiAgfQoKICBhY2NlcHQoU3RhdGVtZW50VmlzaXRvciB2KSA9PiB2LnZpc2l0QmxvY2sodGhpcyk7CiAgYWNjZXB0MShTdGF0ZW1lbnRWaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRCbG9jayh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdmlzaXRMaXN0KHN0YXRlbWVudHMsIHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgdHJhbnNmb3JtTGlzdChzdGF0ZW1lbnRzLCB2LCB0aGlzKTsKICB9CgogIHZvaWQgYWRkU3RhdGVtZW50KFN0YXRlbWVudCBub2RlKSB7CiAgICBzdGF0ZW1lbnRzLmFkZChub2RlKTsKICAgIG5vZGUucGFyZW50ID0gdGhpczsKICB9Cn0KCi8vLyBBIGJsb2NrIHRoYXQgaXMgb25seSBleGVjdXRlZCB3aGVuIGFzc2VydHMgYXJlIGVuYWJsZWQuCi8vLwovLy8gU29tZXRpbWVzIGFyYml0cmFyeSBzdGF0ZW1lbnRzIG11c3QgYmUgZ3VhcmRlZCBieSB3aGV0aGVyIGFzc2VydHMgYXJlCi8vLyBlbmFibGVkLiAgRm9yIGV4YW1wbGUsIHdoZW4gYSBzdWJleHByZXNzaW9uIG9mIGFuIGFzc2VydCBpbiBhc3luYyBjb2RlIGlzCi8vLyBsaW5lYXJpemVkIGFuZCBuYW1lZCwgaXQgY2FuIHByb2R1Y2Ugc3VjaCBhIGJsb2NrIG9mIHN0YXRlbWVudHMuCmNsYXNzIEFzc2VydEJsb2NrIGV4dGVuZHMgU3RhdGVtZW50IHsKICBmaW5hbCBMaXN0PFN0YXRlbWVudD4gc3RhdGVtZW50czsKCiAgQXNzZXJ0QmxvY2sodGhpcy5zdGF0ZW1lbnRzKSB7CiAgICAvLyBFbnN1cmUgc3RhdGVtZW50cyBpcyBtdXRhYmxlLgogICAgYXNzZXJ0KChzdGF0ZW1lbnRzCiAgICAgICAgICAuLmFkZChudWxsKQogICAgICAgICAgLi5yZW1vdmVMYXN0KCkpICE9CiAgICAgICAgbnVsbCk7CiAgICBzZXRQYXJlbnRzKHN0YXRlbWVudHMsIHRoaXMpOwogIH0KCiAgYWNjZXB0KFN0YXRlbWVudFZpc2l0b3IgdikgPT4gdi52aXNpdEFzc2VydEJsb2NrKHRoaXMpOwogIGFjY2VwdDEoU3RhdGVtZW50VmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0QXNzZXJ0QmxvY2sodGhpcywgYXJnKTsKCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgdHJhbnNmb3JtTGlzdChzdGF0ZW1lbnRzLCB2LCB0aGlzKTsKICB9CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB2aXNpdExpc3Qoc3RhdGVtZW50cywgdik7CiAgfQoKICB2b2lkIGFkZFN0YXRlbWVudChTdGF0ZW1lbnQgbm9kZSkgewogICAgc3RhdGVtZW50cy5hZGQobm9kZSk7CiAgICBub2RlLnBhcmVudCA9IHRoaXM7CiAgfQp9CgpjbGFzcyBFbXB0eVN0YXRlbWVudCBleHRlbmRzIFN0YXRlbWVudCB7CiAgYWNjZXB0KFN0YXRlbWVudFZpc2l0b3IgdikgPT4gdi52aXNpdEVtcHR5U3RhdGVtZW50KHRoaXMpOwogIGFjY2VwdDEoU3RhdGVtZW50VmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0RW1wdHlTdGF0ZW1lbnQodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHt9CiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikge30KfQoKY2xhc3MgQXNzZXJ0U3RhdGVtZW50IGV4dGVuZHMgU3RhdGVtZW50IHsKICBFeHByZXNzaW9uIGNvbmRpdGlvbjsKICBFeHByZXNzaW9uIG1lc3NhZ2U7IC8vIE1heSBiZSBudWxsLgogIGludCBjb25kaXRpb25TdGFydE9mZnNldDsKICBpbnQgY29uZGl0aW9uRW5kT2Zmc2V0OwoKICBBc3NlcnRTdGF0ZW1lbnQodGhpcy5jb25kaXRpb24sCiAgICAgIHt0aGlzLm1lc3NhZ2UsIHRoaXMuY29uZGl0aW9uU3RhcnRPZmZzZXQsIHRoaXMuY29uZGl0aW9uRW5kT2Zmc2V0fSkgewogICAgY29uZGl0aW9uPy5wYXJlbnQgPSB0aGlzOwogICAgbWVzc2FnZT8ucGFyZW50ID0gdGhpczsKICB9CgogIGFjY2VwdChTdGF0ZW1lbnRWaXNpdG9yIHYpID0+IHYudmlzaXRBc3NlcnRTdGF0ZW1lbnQodGhpcyk7CiAgYWNjZXB0MShTdGF0ZW1lbnRWaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRBc3NlcnRTdGF0ZW1lbnQodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGNvbmRpdGlvbj8uYWNjZXB0KHYpOwogICAgbWVzc2FnZT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGNvbmRpdGlvbiAhPSBudWxsKSB7CiAgICAgIGNvbmRpdGlvbiA9IGNvbmRpdGlvbi5hY2NlcHQodik7CiAgICAgIGNvbmRpdGlvbj8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmIChtZXNzYWdlICE9IG51bGwpIHsKICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UuYWNjZXB0KHYpOwogICAgICBtZXNzYWdlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIEEgdGFyZ2V0IG9mIGEgW0JyZWFrXSBzdGF0ZW1lbnQuCi8vLwovLy8gVGhlIGxhYmVsIGl0c2VsZiBoYXMgbm8gbmFtZTsgYnJlYWtzIHJlZmVyZW5jZSB0aGUgc3RhdGVtZW50IGRpcmVjdGx5LgovLy8KLy8vIFRoZSBmcm9udGVuZCBkb2VzIG5vdCBnZW5lcmF0ZSBsYWJlbGVkIHN0YXRlbWVudHMgd2l0aG91dCB1c2VzLgpjbGFzcyBMYWJlbGVkU3RhdGVtZW50IGV4dGVuZHMgU3RhdGVtZW50IHsKICBTdGF0ZW1lbnQgYm9keTsKCiAgTGFiZWxlZFN0YXRlbWVudCh0aGlzLmJvZHkpIHsKICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBhY2NlcHQoU3RhdGVtZW50VmlzaXRvciB2KSA9PiB2LnZpc2l0TGFiZWxlZFN0YXRlbWVudCh0aGlzKTsKICBhY2NlcHQxKFN0YXRlbWVudFZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdExhYmVsZWRTdGF0ZW1lbnQodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGJvZHk/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChib2R5ICE9IG51bGwpIHsKICAgICAgYm9keSA9IGJvZHkuYWNjZXB0KHYpOwogICAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIEJyZWFrcyBvdXQgb2YgYW4gZW5jbG9zaW5nIFtMYWJlbGVkU3RhdGVtZW50XS4KLy8vCi8vLyBCb3RoIGBicmVha2AgYW5kIGxvb3AgYGNvbnRpbnVlYCBzdGF0ZW1lbnRzIGFyZSB0cmFuc2xhdGVkIGludG8gdGhpcyBub2RlLgovLy8KLy8vIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGxvb3Agd2l0aCBhIGBjb250aW51ZWAgd2lsbCBiZSBkZXN1Z2FyZWQ6Ci8vLwovLy8gICAgIHdoaWxlKHgpIHsKLy8vICAgICAgIGlmICh5KSBjb250aW51ZTsKLy8vICAgICAgIEJPRFknCi8vLyAgICAgfQovLy8KLy8vICAgICA9PT4KLy8vCi8vLyAgICAgd2hpbGUoeCkgewovLy8gICAgICAgTDogewovLy8gICAgICAgICBpZiAoeSkgYnJlYWsgTDsKLy8vICAgICAgICAgQk9EWScKLy8vICAgICAgIH0KLy8vICAgICB9Ci8vCmNsYXNzIEJyZWFrU3RhdGVtZW50IGV4dGVuZHMgU3RhdGVtZW50IHsKICBMYWJlbGVkU3RhdGVtZW50IHRhcmdldDsKCiAgQnJlYWtTdGF0ZW1lbnQodGhpcy50YXJnZXQpOwoKICBhY2NlcHQoU3RhdGVtZW50VmlzaXRvciB2KSA9PiB2LnZpc2l0QnJlYWtTdGF0ZW1lbnQodGhpcyk7CiAgYWNjZXB0MShTdGF0ZW1lbnRWaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRCcmVha1N0YXRlbWVudCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3Igdikge30KICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7fQp9CgpjbGFzcyBXaGlsZVN0YXRlbWVudCBleHRlbmRzIFN0YXRlbWVudCB7CiAgRXhwcmVzc2lvbiBjb25kaXRpb247CiAgU3RhdGVtZW50IGJvZHk7CgogIFdoaWxlU3RhdGVtZW50KHRoaXMuY29uZGl0aW9uLCB0aGlzLmJvZHkpIHsKICAgIGNvbmRpdGlvbj8ucGFyZW50ID0gdGhpczsKICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBhY2NlcHQoU3RhdGVtZW50VmlzaXRvciB2KSA9PiB2LnZpc2l0V2hpbGVTdGF0ZW1lbnQodGhpcyk7CiAgYWNjZXB0MShTdGF0ZW1lbnRWaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRXaGlsZVN0YXRlbWVudCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgY29uZGl0aW9uPy5hY2NlcHQodik7CiAgICBib2R5Py5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAoY29uZGl0aW9uICE9IG51bGwpIHsKICAgICAgY29uZGl0aW9uID0gY29uZGl0aW9uLmFjY2VwdCh2KTsKICAgICAgY29uZGl0aW9uPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKGJvZHkgIT0gbnVsbCkgewogICAgICBib2R5ID0gYm9keS5hY2NlcHQodik7CiAgICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgpjbGFzcyBEb1N0YXRlbWVudCBleHRlbmRzIFN0YXRlbWVudCB7CiAgU3RhdGVtZW50IGJvZHk7CiAgRXhwcmVzc2lvbiBjb25kaXRpb247CgogIERvU3RhdGVtZW50KHRoaXMuYm9keSwgdGhpcy5jb25kaXRpb24pIHsKICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgICBjb25kaXRpb24/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBhY2NlcHQoU3RhdGVtZW50VmlzaXRvciB2KSA9PiB2LnZpc2l0RG9TdGF0ZW1lbnQodGhpcyk7CiAgYWNjZXB0MShTdGF0ZW1lbnRWaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXREb1N0YXRlbWVudCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgYm9keT8uYWNjZXB0KHYpOwogICAgY29uZGl0aW9uPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAoYm9keSAhPSBudWxsKSB7CiAgICAgIGJvZHkgPSBib2R5LmFjY2VwdCh2KTsKICAgICAgYm9keT8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmIChjb25kaXRpb24gIT0gbnVsbCkgewogICAgICBjb25kaXRpb24gPSBjb25kaXRpb24uYWNjZXB0KHYpOwogICAgICBjb25kaXRpb24/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgpjbGFzcyBGb3JTdGF0ZW1lbnQgZXh0ZW5kcyBTdGF0ZW1lbnQgewogIGZpbmFsIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gdmFyaWFibGVzOyAvLyBNYXkgYmUgZW1wdHksIGJ1dCBub3QgbnVsbC4KICBFeHByZXNzaW9uIGNvbmRpdGlvbjsgLy8gTWF5IGJlIG51bGwuCiAgZmluYWwgTGlzdDxFeHByZXNzaW9uPiB1cGRhdGVzOyAvLyBNYXkgYmUgZW1wdHksIGJ1dCBub3QgbnVsbC4KICBTdGF0ZW1lbnQgYm9keTsKCiAgRm9yU3RhdGVtZW50KHRoaXMudmFyaWFibGVzLCB0aGlzLmNvbmRpdGlvbiwgdGhpcy51cGRhdGVzLCB0aGlzLmJvZHkpIHsKICAgIHNldFBhcmVudHModmFyaWFibGVzLCB0aGlzKTsKICAgIGNvbmRpdGlvbj8ucGFyZW50ID0gdGhpczsKICAgIHNldFBhcmVudHModXBkYXRlcywgdGhpcyk7CiAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogIH0KCiAgYWNjZXB0KFN0YXRlbWVudFZpc2l0b3IgdikgPT4gdi52aXNpdEZvclN0YXRlbWVudCh0aGlzKTsKICBhY2NlcHQxKFN0YXRlbWVudFZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdEZvclN0YXRlbWVudCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdmlzaXRMaXN0KHZhcmlhYmxlcywgdik7CiAgICBjb25kaXRpb24/LmFjY2VwdCh2KTsKICAgIHZpc2l0TGlzdCh1cGRhdGVzLCB2KTsKICAgIGJvZHk/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIHRyYW5zZm9ybUxpc3QodmFyaWFibGVzLCB2LCB0aGlzKTsKICAgIGlmIChjb25kaXRpb24gIT0gbnVsbCkgewogICAgICBjb25kaXRpb24gPSBjb25kaXRpb24uYWNjZXB0KHYpOwogICAgICBjb25kaXRpb24/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICB0cmFuc2Zvcm1MaXN0KHVwZGF0ZXMsIHYsIHRoaXMpOwogICAgaWYgKGJvZHkgIT0gbnVsbCkgewogICAgICBib2R5ID0gYm9keS5hY2NlcHQodik7CiAgICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgpjbGFzcyBGb3JJblN0YXRlbWVudCBleHRlbmRzIFN0YXRlbWVudCB7CiAgLy8vIE9mZnNldCBpbiB0aGUgc291cmNlIGZpbGUgaXQgY29tZXMgZnJvbS4KICAvLy8KICAvLy8gVmFsaWQgdmFsdWVzIGFyZSBmcm9tIDAgYW5kIHVwLCBvciAtMSAoW1RyZWVOb2RlLm5vT2Zmc2V0XSkgaWYgdGhlIGZpbGUKICAvLy8gb2Zmc2V0IGlzIG5vdCBhdmFpbGFibGUgKHRoaXMgaXMgdGhlIGRlZmF1bHQgaWYgbm9uZSBpcyBzcGVjaWZpY2FsbHkgc2V0KS4KICBpbnQgYm9keU9mZnNldCA9IFRyZWVOb2RlLm5vT2Zmc2V0OwoKICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlOyAvLyBIYXMgbm8gaW5pdGlhbGl6ZXIuCiAgRXhwcmVzc2lvbiBpdGVyYWJsZTsKICBTdGF0ZW1lbnQgYm9keTsKICBib29sIGlzQXN5bmM7IC8vIFRydWUgaWYgdGhpcyBpcyBhbiAnYXdhaXQgZm9yJyBsb29wLgoKICBGb3JJblN0YXRlbWVudCh0aGlzLnZhcmlhYmxlLCB0aGlzLml0ZXJhYmxlLCB0aGlzLmJvZHksCiAgICAgIHt0aGlzLmlzQXN5bmM6IGZhbHNlfSkgewogICAgdmFyaWFibGU/LnBhcmVudCA9IHRoaXM7CiAgICBpdGVyYWJsZT8ucGFyZW50ID0gdGhpczsKICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBhY2NlcHQoU3RhdGVtZW50VmlzaXRvciB2KSA9PiB2LnZpc2l0Rm9ySW5TdGF0ZW1lbnQodGhpcyk7CiAgYWNjZXB0MShTdGF0ZW1lbnRWaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRGb3JJblN0YXRlbWVudCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdmFyaWFibGU/LmFjY2VwdCh2KTsKICAgIGl0ZXJhYmxlPy5hY2NlcHQodik7CiAgICBib2R5Py5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAodmFyaWFibGUgIT0gbnVsbCkgewogICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlLmFjY2VwdCh2KTsKICAgICAgdmFyaWFibGU/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAoaXRlcmFibGUgIT0gbnVsbCkgewogICAgICBpdGVyYWJsZSA9IGl0ZXJhYmxlLmFjY2VwdCh2KTsKICAgICAgaXRlcmFibGU/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAoYm9keSAhPSBudWxsKSB7CiAgICAgIGJvZHkgPSBib2R5LmFjY2VwdCh2KTsKICAgICAgYm9keT8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBTdGF0ZW1lbnQgb2YgZm9ybSBgc3dpdGNoIChlKSB7IGNhc2UgeDogLi4uIH1gLgovLy8KLy8vIEFkamFjZW50IGNhc2UgY2xhdXNlcyBoYXZlIGJlZW4gbWVyZ2VkIGludG8gYSBzaW5nbGUgW1N3aXRjaENhc2VdLiBBIHJ1bnRpbWUKLy8vIGV4Y2VwdGlvbiBtdXN0IGJlIHRocm93biBpZiBvbmUgW1N3aXRjaENhc2VdIGZhbGxzIHRocm91Z2ggdG8gYW5vdGhlciBjYXNlLgpjbGFzcyBTd2l0Y2hTdGF0ZW1lbnQgZXh0ZW5kcyBTdGF0ZW1lbnQgewogIEV4cHJlc3Npb24gZXhwcmVzc2lvbjsKICBmaW5hbCBMaXN0PFN3aXRjaENhc2U+IGNhc2VzOwoKICBTd2l0Y2hTdGF0ZW1lbnQodGhpcy5leHByZXNzaW9uLCB0aGlzLmNhc2VzKSB7CiAgICBleHByZXNzaW9uPy5wYXJlbnQgPSB0aGlzOwogICAgc2V0UGFyZW50cyhjYXNlcywgdGhpcyk7CiAgfQoKICBhY2NlcHQoU3RhdGVtZW50VmlzaXRvciB2KSA9PiB2LnZpc2l0U3dpdGNoU3RhdGVtZW50KHRoaXMpOwogIGFjY2VwdDEoU3RhdGVtZW50VmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0U3dpdGNoU3RhdGVtZW50KHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBleHByZXNzaW9uPy5hY2NlcHQodik7CiAgICB2aXNpdExpc3QoY2FzZXMsIHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGV4cHJlc3Npb24gIT0gbnVsbCkgewogICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi5hY2NlcHQodik7CiAgICAgIGV4cHJlc3Npb24/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICB0cmFuc2Zvcm1MaXN0KGNhc2VzLCB2LCB0aGlzKTsKICB9Cn0KCi8vLyBBIGdyb3VwIG9mIGBjYXNlYCBjbGF1c2VzIGFuZC9vciBhIGBkZWZhdWx0YCBjbGF1c2UuCi8vLwovLy8gVGhpcyBpcyBhIHBvdGVudGlhbCB0YXJnZXQgb2YgW0NvbnRpbnVlU3dpdGNoU3RhdGVtZW50XS4KY2xhc3MgU3dpdGNoQ2FzZSBleHRlbmRzIFRyZWVOb2RlIHsKICBmaW5hbCBMaXN0PEV4cHJlc3Npb24+IGV4cHJlc3Npb25zOwogIGZpbmFsIExpc3Q8aW50PiBleHByZXNzaW9uT2Zmc2V0czsKICBTdGF0ZW1lbnQgYm9keTsKICBib29sIGlzRGVmYXVsdDsKCiAgU3dpdGNoQ2FzZSh0aGlzLmV4cHJlc3Npb25zLCB0aGlzLmV4cHJlc3Npb25PZmZzZXRzLCB0aGlzLmJvZHksCiAgICAgIHt0aGlzLmlzRGVmYXVsdDogZmFsc2V9KSB7CiAgICBzZXRQYXJlbnRzKGV4cHJlc3Npb25zLCB0aGlzKTsKICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBTd2l0Y2hDYXNlLmRlZmF1bHRDYXNlKHRoaXMuYm9keSkKICAgICAgOiBpc0RlZmF1bHQgPSB0cnVlLAogICAgICAgIGV4cHJlc3Npb25zID0gPEV4cHJlc3Npb24+W10sCiAgICAgICAgZXhwcmVzc2lvbk9mZnNldHMgPSA8aW50PltdIHsKICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBTd2l0Y2hDYXNlLmVtcHR5KCkKICAgICAgOiBleHByZXNzaW9ucyA9IDxFeHByZXNzaW9uPltdLAogICAgICAgIGV4cHJlc3Npb25PZmZzZXRzID0gPGludD5bXSwKICAgICAgICBib2R5ID0gbnVsbCwKICAgICAgICBpc0RlZmF1bHQgPSBmYWxzZTsKCiAgYWNjZXB0KFRyZWVWaXNpdG9yIHYpID0+IHYudmlzaXRTd2l0Y2hDYXNlKHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdmlzaXRMaXN0KGV4cHJlc3Npb25zLCB2KTsKICAgIGJvZHk/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIHRyYW5zZm9ybUxpc3QoZXhwcmVzc2lvbnMsIHYsIHRoaXMpOwogICAgaWYgKGJvZHkgIT0gbnVsbCkgewogICAgICBib2R5ID0gYm9keS5hY2NlcHQodik7CiAgICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gSnVtcCB0byBhIGNhc2UgaW4gYW4gZW5jbG9zaW5nIHN3aXRjaC4KY2xhc3MgQ29udGludWVTd2l0Y2hTdGF0ZW1lbnQgZXh0ZW5kcyBTdGF0ZW1lbnQgewogIFN3aXRjaENhc2UgdGFyZ2V0OwoKICBDb250aW51ZVN3aXRjaFN0YXRlbWVudCh0aGlzLnRhcmdldCk7CgogIGFjY2VwdChTdGF0ZW1lbnRWaXNpdG9yIHYpID0+IHYudmlzaXRDb250aW51ZVN3aXRjaFN0YXRlbWVudCh0aGlzKTsKICBhY2NlcHQxKFN0YXRlbWVudFZpc2l0b3IxIHYsIGFyZykgPT4KICAgICAgdi52aXNpdENvbnRpbnVlU3dpdGNoU3RhdGVtZW50KHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7fQogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHt9Cn0KCmNsYXNzIElmU3RhdGVtZW50IGV4dGVuZHMgU3RhdGVtZW50IHsKICBFeHByZXNzaW9uIGNvbmRpdGlvbjsKICBTdGF0ZW1lbnQgdGhlbjsKICBTdGF0ZW1lbnQgb3RoZXJ3aXNlOwoKICBJZlN0YXRlbWVudCh0aGlzLmNvbmRpdGlvbiwgdGhpcy50aGVuLCB0aGlzLm90aGVyd2lzZSkgewogICAgY29uZGl0aW9uPy5wYXJlbnQgPSB0aGlzOwogICAgdGhlbj8ucGFyZW50ID0gdGhpczsKICAgIG90aGVyd2lzZT8ucGFyZW50ID0gdGhpczsKICB9CgogIGFjY2VwdChTdGF0ZW1lbnRWaXNpdG9yIHYpID0+IHYudmlzaXRJZlN0YXRlbWVudCh0aGlzKTsKICBhY2NlcHQxKFN0YXRlbWVudFZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdElmU3RhdGVtZW50KHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBjb25kaXRpb24/LmFjY2VwdCh2KTsKICAgIHRoZW4/LmFjY2VwdCh2KTsKICAgIG90aGVyd2lzZT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGNvbmRpdGlvbiAhPSBudWxsKSB7CiAgICAgIGNvbmRpdGlvbiA9IGNvbmRpdGlvbi5hY2NlcHQodik7CiAgICAgIGNvbmRpdGlvbj8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmICh0aGVuICE9IG51bGwpIHsKICAgICAgdGhlbiA9IHRoZW4uYWNjZXB0KHYpOwogICAgICB0aGVuPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKG90aGVyd2lzZSAhPSBudWxsKSB7CiAgICAgIG90aGVyd2lzZSA9IG90aGVyd2lzZS5hY2NlcHQodik7CiAgICAgIG90aGVyd2lzZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCmNsYXNzIFJldHVyblN0YXRlbWVudCBleHRlbmRzIFN0YXRlbWVudCB7CiAgRXhwcmVzc2lvbiBleHByZXNzaW9uOyAvLyBNYXkgYmUgbnVsbC4KCiAgUmV0dXJuU3RhdGVtZW50KFt0aGlzLmV4cHJlc3Npb25dKSB7CiAgICBleHByZXNzaW9uPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgYWNjZXB0KFN0YXRlbWVudFZpc2l0b3IgdikgPT4gdi52aXNpdFJldHVyblN0YXRlbWVudCh0aGlzKTsKICBhY2NlcHQxKFN0YXRlbWVudFZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFJldHVyblN0YXRlbWVudCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgZXhwcmVzc2lvbj8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGV4cHJlc3Npb24gIT0gbnVsbCkgewogICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi5hY2NlcHQodik7CiAgICAgIGV4cHJlc3Npb24/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgpjbGFzcyBUcnlDYXRjaCBleHRlbmRzIFN0YXRlbWVudCB7CiAgU3RhdGVtZW50IGJvZHk7CiAgTGlzdDxDYXRjaD4gY2F0Y2hlczsKICBib29sIGlzU3ludGhldGljOwoKICBUcnlDYXRjaCh0aGlzLmJvZHksIHRoaXMuY2F0Y2hlcywge3RoaXMuaXNTeW50aGV0aWM6IGZhbHNlfSkgewogICAgYm9keT8ucGFyZW50ID0gdGhpczsKICAgIHNldFBhcmVudHMoY2F0Y2hlcywgdGhpcyk7CiAgfQoKICBhY2NlcHQoU3RhdGVtZW50VmlzaXRvciB2KSA9PiB2LnZpc2l0VHJ5Q2F0Y2godGhpcyk7CiAgYWNjZXB0MShTdGF0ZW1lbnRWaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRUcnlDYXRjaCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgYm9keT8uYWNjZXB0KHYpOwogICAgdmlzaXRMaXN0KGNhdGNoZXMsIHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGJvZHkgIT0gbnVsbCkgewogICAgICBib2R5ID0gYm9keS5hY2NlcHQodik7CiAgICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICB0cmFuc2Zvcm1MaXN0KGNhdGNoZXMsIHYsIHRoaXMpOwogIH0KfQoKY2xhc3MgQ2F0Y2ggZXh0ZW5kcyBUcmVlTm9kZSB7CiAgRGFydFR5cGUgZ3VhcmQ7IC8vIE5vdCBudWxsLCBkZWZhdWx0cyB0byBkeW5hbWljLgogIFZhcmlhYmxlRGVjbGFyYXRpb24gZXhjZXB0aW9uOyAvLyBNYXkgYmUgbnVsbC4KICBWYXJpYWJsZURlY2xhcmF0aW9uIHN0YWNrVHJhY2U7IC8vIE1heSBiZSBudWxsLgogIFN0YXRlbWVudCBib2R5OwoKICBDYXRjaCh0aGlzLmV4Y2VwdGlvbiwgdGhpcy5ib2R5LAogICAgICB7dGhpcy5ndWFyZDogY29uc3QgRHluYW1pY1R5cGUoKSwgdGhpcy5zdGFja1RyYWNlfSkgewogICAgYXNzZXJ0KGd1YXJkICE9IG51bGwpOwogICAgZXhjZXB0aW9uPy5wYXJlbnQgPSB0aGlzOwogICAgc3RhY2tUcmFjZT8ucGFyZW50ID0gdGhpczsKICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBhY2NlcHQoVHJlZVZpc2l0b3IgdikgPT4gdi52aXNpdENhdGNoKHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgZ3VhcmQ/LmFjY2VwdCh2KTsKICAgIGV4Y2VwdGlvbj8uYWNjZXB0KHYpOwogICAgc3RhY2tUcmFjZT8uYWNjZXB0KHYpOwogICAgYm9keT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgZ3VhcmQgPSB2LnZpc2l0RGFydFR5cGUoZ3VhcmQpOwogICAgaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CiAgICAgIGV4Y2VwdGlvbiA9IGV4Y2VwdGlvbi5hY2NlcHQodik7CiAgICAgIGV4Y2VwdGlvbj8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmIChzdGFja1RyYWNlICE9IG51bGwpIHsKICAgICAgc3RhY2tUcmFjZSA9IHN0YWNrVHJhY2UuYWNjZXB0KHYpOwogICAgICBzdGFja1RyYWNlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKGJvZHkgIT0gbnVsbCkgewogICAgICBib2R5ID0gYm9keS5hY2NlcHQodik7CiAgICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgpjbGFzcyBUcnlGaW5hbGx5IGV4dGVuZHMgU3RhdGVtZW50IHsKICBTdGF0ZW1lbnQgYm9keTsKICBTdGF0ZW1lbnQgZmluYWxpemVyOwoKICBUcnlGaW5hbGx5KHRoaXMuYm9keSwgdGhpcy5maW5hbGl6ZXIpIHsKICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgICBmaW5hbGl6ZXI/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBhY2NlcHQoU3RhdGVtZW50VmlzaXRvciB2KSA9PiB2LnZpc2l0VHJ5RmluYWxseSh0aGlzKTsKICBhY2NlcHQxKFN0YXRlbWVudFZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFRyeUZpbmFsbHkodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGJvZHk/LmFjY2VwdCh2KTsKICAgIGZpbmFsaXplcj8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGJvZHkgIT0gbnVsbCkgewogICAgICBib2R5ID0gYm9keS5hY2NlcHQodik7CiAgICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAoZmluYWxpemVyICE9IG51bGwpIHsKICAgICAgZmluYWxpemVyID0gZmluYWxpemVyLmFjY2VwdCh2KTsKICAgICAgZmluYWxpemVyPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIFN0YXRlbWVudCBvZiBmb3JtIGB5aWVsZCB4YCBvciBgeWllbGQqIHhgLgovLy8KLy8vIEZvciBuYXRpdmUgeWllbGQgc2VtYW50aWNzIHNlZSBgQXN5bmNNYXJrZXIuU3luY1lpZWxkaW5nYC4KY2xhc3MgWWllbGRTdGF0ZW1lbnQgZXh0ZW5kcyBTdGF0ZW1lbnQgewogIEV4cHJlc3Npb24gZXhwcmVzc2lvbjsKICBpbnQgZmxhZ3MgPSAwOwoKICBZaWVsZFN0YXRlbWVudCh0aGlzLmV4cHJlc3Npb24sCiAgICAgIHtib29sIGlzWWllbGRTdGFyOiBmYWxzZSwgYm9vbCBpc05hdGl2ZTogZmFsc2V9KSB7CiAgICBleHByZXNzaW9uPy5wYXJlbnQgPSB0aGlzOwogICAgdGhpcy5pc1lpZWxkU3RhciA9IGlzWWllbGRTdGFyOwogICAgdGhpcy5pc05hdGl2ZSA9IGlzTmF0aXZlOwogIH0KCiAgc3RhdGljIGNvbnN0IGludCBGbGFnWWllbGRTdGFyID0gMSA8PCAwOwogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ05hdGl2ZSA9IDEgPDwgMTsKCiAgYm9vbCBnZXQgaXNZaWVsZFN0YXIgPT4gZmxhZ3MgJiBGbGFnWWllbGRTdGFyICE9IDA7CiAgYm9vbCBnZXQgaXNOYXRpdmUgPT4gZmxhZ3MgJiBGbGFnTmF0aXZlICE9IDA7CgogIHZvaWQgc2V0IGlzWWllbGRTdGFyKGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUgPyAoZmxhZ3MgfCBGbGFnWWllbGRTdGFyKSA6IChmbGFncyAmIH5GbGFnWWllbGRTdGFyKTsKICB9CgogIHZvaWQgc2V0IGlzTmF0aXZlKGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUgPyAoZmxhZ3MgfCBGbGFnTmF0aXZlKSA6IChmbGFncyAmIH5GbGFnTmF0aXZlKTsKICB9CgogIGFjY2VwdChTdGF0ZW1lbnRWaXNpdG9yIHYpID0+IHYudmlzaXRZaWVsZFN0YXRlbWVudCh0aGlzKTsKICBhY2NlcHQxKFN0YXRlbWVudFZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFlpZWxkU3RhdGVtZW50KHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBleHByZXNzaW9uPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAoZXhwcmVzc2lvbiAhPSBudWxsKSB7CiAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLmFjY2VwdCh2KTsKICAgICAgZXhwcmVzc2lvbj8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBEZWNsYXJhdGlvbiBvZiBhIGxvY2FsIHZhcmlhYmxlLgovLy8KLy8vIFRoaXMgbWF5IG9jY3VyIGFzIGEgc3RhdGVtZW50LCBidXQgaXMgYWxzbyB1c2VkIGluIHNldmVyYWwgbm9uLXN0YXRlbWVudAovLy8gY29udGV4dHMsIHN1Y2ggYXMgaW4gW0ZvclN0YXRlbWVudF0sIFtDYXRjaF0sIGFuZCBbRnVuY3Rpb25Ob2RlXS4KLy8vCi8vLyBXaGVuIHRoaXMgb2NjdXJzIGFzIGEgc3RhdGVtZW50LCBpdCBtdXN0IGJlIGEgZGlyZWN0IGNoaWxkIG9mIGEgW0Jsb2NrXS4KLy8KLy8gREVTSUdOIFRPRE86IFNob3VsZCB3ZSByZW1vdmUgdGhlICdmaW5hbCcgbW9kaWZpZXIgZnJvbSB2YXJpYWJsZXM/CmNsYXNzIFZhcmlhYmxlRGVjbGFyYXRpb24gZXh0ZW5kcyBTdGF0ZW1lbnQgewogIC8vLyBPZmZzZXQgb2YgdGhlIGVxdWFscyBzaWduIGluIHRoZSBzb3VyY2UgZmlsZSBpdCBjb21lcyBmcm9tLgogIC8vLwogIC8vLyBWYWxpZCB2YWx1ZXMgYXJlIGZyb20gMCBhbmQgdXAsIG9yIC0xIChbVHJlZU5vZGUubm9PZmZzZXRdKQogIC8vLyBpZiB0aGUgZXF1YWxzIHNpZ24gb2Zmc2V0IGlzIG5vdCBhdmFpbGFibGUgKGUuZy4gaWYgbm90IGluaXRpYWxpemVkKQogIC8vLyAodGhpcyBpcyB0aGUgZGVmYXVsdCBpZiBub25lIGlzIHNwZWNpZmljYWxseSBzZXQpLgogIGludCBmaWxlRXF1YWxzT2Zmc2V0ID0gVHJlZU5vZGUubm9PZmZzZXQ7CgogIC8vLyBMaXN0IG9mIG1ldGFkYXRhIGFubm90YXRpb25zIG9uIHRoZSB2YXJpYWJsZSBkZWNsYXJhdGlvbi4KICAvLy8KICAvLy8gVGhpcyBkZWZhdWx0cyB0byBhbiBpbW11dGFibGUgZW1wdHkgbGlzdC4gVXNlIFthZGRBbm5vdGF0aW9uXSB0byBhZGQKICAvLy8gYW5ub3RhdGlvbnMgaWYgbmVlZGVkLgogIExpc3Q8RXhwcmVzc2lvbj4gYW5ub3RhdGlvbnMgPSBjb25zdCA8RXhwcmVzc2lvbj5bXTsKCiAgLy8vIEZvciBuYW1lZCBwYXJhbWV0ZXJzLCB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIuIE5vIHR3byBuYW1lZAogIC8vLyBwYXJhbWV0ZXJzIChpbiB0aGUgc2FtZSBwYXJhbWV0ZXIgbGlzdCkgY2FuIGhhdmUgdGhlIHNhbWUgbmFtZS4KICAvLy8KICAvLy8gSW4gYWxsIG90aGVyIGNhc2VzLCB0aGUgbmFtZSBpcyBjb3NtZXRpYywgbWF5IGJlIGVtcHR5IG9yIG51bGwsCiAgLy8vIGFuZCBpcyBub3QgbmVjZXNzYXJpbHkgdW5pcXVlLgogIFN0cmluZyBuYW1lOwogIGludCBmbGFncyA9IDA7CiAgRGFydFR5cGUgdHlwZTsgLy8gTm90IG51bGwsIGRlZmF1bHRzIHRvIGR5bmFtaWMuCgogIC8vLyBPZmZzZXQgb2YgdGhlIGRlY2xhcmF0aW9uLCBzZXQgYW5kIHVzZWQgd2hlbiB3cml0aW5nIHRoZSBiaW5hcnkuCiAgaW50IGJpbmFyeU9mZnNldE5vVGFnID0gLTE7CgogIC8vLyBGb3IgbG9jYWxzLCB0aGlzIGlzIHRoZSBpbml0aWFsIHZhbHVlLgogIC8vLyBGb3IgcGFyYW1ldGVycywgdGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZS4KICAvLy8KICAvLy8gU2hvdWxkIGJlIG51bGwgaW4gb3RoZXIgY2FzZXMuCiAgRXhwcmVzc2lvbiBpbml0aWFsaXplcjsgLy8gTWF5IGJlIG51bGwuCgogIFZhcmlhYmxlRGVjbGFyYXRpb24odGhpcy5uYW1lLAogICAgICB7dGhpcy5pbml0aWFsaXplciwKICAgICAgdGhpcy50eXBlOiBjb25zdCBEeW5hbWljVHlwZSgpLAogICAgICBpbnQgZmxhZ3M6IC0xLAogICAgICBib29sIGlzRmluYWw6IGZhbHNlLAogICAgICBib29sIGlzQ29uc3Q6IGZhbHNlLAogICAgICBib29sIGlzRmllbGRGb3JtYWw6IGZhbHNlLAogICAgICBib29sIGlzQ292YXJpYW50OiBmYWxzZSwKICAgICAgYm9vbCBpc0xhdGU6IGZhbHNlLAogICAgICBib29sIGlzUmVxdWlyZWQ6IGZhbHNlfSkgewogICAgYXNzZXJ0KHR5cGUgIT0gbnVsbCk7CiAgICBpbml0aWFsaXplcj8ucGFyZW50ID0gdGhpczsKICAgIGlmIChmbGFncyAhPSAtMSkgewogICAgICB0aGlzLmZsYWdzID0gZmxhZ3M7CiAgICB9IGVsc2UgewogICAgICB0aGlzLmlzRmluYWwgPSBpc0ZpbmFsOwogICAgICB0aGlzLmlzQ29uc3QgPSBpc0NvbnN0OwogICAgICB0aGlzLmlzRmllbGRGb3JtYWwgPSBpc0ZpZWxkRm9ybWFsOwogICAgICB0aGlzLmlzQ292YXJpYW50ID0gaXNDb3ZhcmlhbnQ7CiAgICAgIHRoaXMuaXNMYXRlID0gaXNMYXRlOwogICAgICB0aGlzLmlzUmVxdWlyZWQgPSBpc1JlcXVpcmVkOwogICAgfQogIH0KCiAgLy8vIENyZWF0ZXMgYSBzeW50aGV0aWMgdmFyaWFibGUgd2l0aCB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiBhcyBpbml0aWFsaXplci4KICBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKHRoaXMuaW5pdGlhbGl6ZXIsCiAgICAgIHtib29sIGlzRmluYWw6IHRydWUsCiAgICAgIGJvb2wgaXNDb25zdDogZmFsc2UsCiAgICAgIGJvb2wgaXNGaWVsZEZvcm1hbDogZmFsc2UsCiAgICAgIGJvb2wgaXNMYXRlOiBmYWxzZSwKICAgICAgYm9vbCBpc1JlcXVpcmVkOiBmYWxzZSwKICAgICAgdGhpcy50eXBlOiBjb25zdCBEeW5hbWljVHlwZSgpfSkgewogICAgYXNzZXJ0KHR5cGUgIT0gbnVsbCk7CiAgICBpbml0aWFsaXplcj8ucGFyZW50ID0gdGhpczsKICAgIHRoaXMuaXNGaW5hbCA9IGlzRmluYWw7CiAgICB0aGlzLmlzQ29uc3QgPSBpc0NvbnN0OwogICAgdGhpcy5pc0ZpZWxkRm9ybWFsID0gaXNGaWVsZEZvcm1hbDsKICAgIHRoaXMuaXNMYXRlID0gaXNMYXRlOwogICAgdGhpcy5pc1JlcXVpcmVkID0gaXNSZXF1aXJlZDsKICB9CgogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ0ZpbmFsID0gMSA8PCAwOyAvLyBNdXN0IG1hdGNoIHNlcmlhbGl6ZWQgYml0IHBvc2l0aW9ucy4KICBzdGF0aWMgY29uc3QgaW50IEZsYWdDb25zdCA9IDEgPDwgMTsKICBzdGF0aWMgY29uc3QgaW50IEZsYWdGaWVsZEZvcm1hbCA9IDEgPDwgMjsKICBzdGF0aWMgY29uc3QgaW50IEZsYWdDb3ZhcmlhbnQgPSAxIDw8IDM7CiAgc3RhdGljIGNvbnN0IGludCBGbGFnSW5TY29wZSA9IDEgPDwgNDsgLy8gVGVtcG9yYXJ5IGZsYWcgdXNlZCBieSB2ZXJpZmllci4KICBzdGF0aWMgY29uc3QgaW50IEZsYWdHZW5lcmljQ292YXJpYW50SW1wbCA9IDEgPDwgNTsKICBzdGF0aWMgY29uc3QgaW50IEZsYWdMYXRlID0gMSA8PCA2OwogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ1JlcXVpcmVkID0gMSA8PCA3OwoKICBib29sIGdldCBpc0ZpbmFsID0+IGZsYWdzICYgRmxhZ0ZpbmFsICE9IDA7CiAgYm9vbCBnZXQgaXNDb25zdCA9PiBmbGFncyAmIEZsYWdDb25zdCAhPSAwOwoKICAvLy8gV2hldGhlciB0aGUgcGFyYW1ldGVyIGlzIGRlY2xhcmVkIHdpdGggdGhlIGBjb3ZhcmlhbnRgIGtleXdvcmQuCiAgYm9vbCBnZXQgaXNDb3ZhcmlhbnQgPT4gZmxhZ3MgJiBGbGFnQ292YXJpYW50ICE9IDA7CgogIC8vLyBXaGV0aGVyIHRoZSB2YXJpYWJsZSBpcyBkZWNsYXJlZCBhcyBhIGZpZWxkIGZvcm1hbCBwYXJhbWV0ZXIgb2YKICAvLy8gYSBjb25zdHJ1Y3Rvci4KICBAaW5mb3JtYXRpdmUKICBib29sIGdldCBpc0ZpZWxkRm9ybWFsID0+IGZsYWdzICYgRmxhZ0ZpZWxkRm9ybWFsICE9IDA7CgogIC8vLyBJZiB0aGlzIFtWYXJpYWJsZURlY2xhcmF0aW9uXSBpcyBhIHBhcmFtZXRlciBvZiBhIG1ldGhvZCwgaW5kaWNhdGVzCiAgLy8vIHdoZXRoZXIgdGhlIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBuZWVkcyB0byBjb250YWluIGEgcnVudGltZSB0eXBlIGNoZWNrIHRvCiAgLy8vIGRlYWwgd2l0aCBnZW5lcmljIGNvdmFyaWFuY2UuCiAgLy8vCiAgLy8vIFdoZW4gYHRydWVgLCBydW50aW1lIGNoZWNrcyBtYXkgbmVlZCB0byBiZSBwZXJmb3JtZWQ7IHNlZQogIC8vLyBbRGlzcGF0Y2hDYXRlZ29yeV0gZm9yIGRldGFpbHMuCiAgYm9vbCBnZXQgaXNHZW5lcmljQ292YXJpYW50SW1wbCA9PiBmbGFncyAmIEZsYWdHZW5lcmljQ292YXJpYW50SW1wbCAhPSAwOwoKICAvLy8gV2hldGhlciB0aGUgdmFyaWFibGUgaXMgZGVjbGFyZWQgd2l0aCB0aGUgYGxhdGVgIGtleXdvcmQuCiAgLy8vCiAgLy8vIFRoZSBgbGF0ZWAgbW9kaWZpZXIgaXMgb25seSBzdXBwb3J0ZWQgb24gbG9jYWwgdmFyaWFibGVzIGFuZCBub3Qgb24KICAvLy8gcGFyYW1ldGVycy4KICBib29sIGdldCBpc0xhdGUgPT4gZmxhZ3MgJiBGbGFnTGF0ZSAhPSAwOwoKICAvLy8gV2hldGhlciB0aGUgcGFyYW1ldGVyIGlzIGRlY2xhcmVkIHdpdGggdGhlIGByZXF1aXJlZGAga2V5d29yZC4KICAvLy8KICAvLy8gVGhlIGByZXF1aXJlZGAgbW9kaWZpZXIgaXMgb25seSBzdXBwb3J0ZWQgb24gbmFtZWQgcGFyYW1ldGVycyBhbmQgbm90IG9uCiAgLy8vIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBhbmQgbG9jYWwgdmFyaWFibGVzLgogIGJvb2wgZ2V0IGlzUmVxdWlyZWQgPT4gZmxhZ3MgJiBGbGFnUmVxdWlyZWQgIT0gMDsKCiAgdm9pZCBzZXQgaXNGaW5hbChib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlID8gKGZsYWdzIHwgRmxhZ0ZpbmFsKSA6IChmbGFncyAmIH5GbGFnRmluYWwpOwogIH0KCiAgdm9pZCBzZXQgaXNDb25zdChib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlID8gKGZsYWdzIHwgRmxhZ0NvbnN0KSA6IChmbGFncyAmIH5GbGFnQ29uc3QpOwogIH0KCiAgdm9pZCBzZXQgaXNDb3ZhcmlhbnQoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdDb3ZhcmlhbnQpIDogKGZsYWdzICYgfkZsYWdDb3ZhcmlhbnQpOwogIH0KCiAgQGluZm9ybWF0aXZlCiAgdm9pZCBzZXQgaXNGaWVsZEZvcm1hbChib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlID8gKGZsYWdzIHwgRmxhZ0ZpZWxkRm9ybWFsKSA6IChmbGFncyAmIH5GbGFnRmllbGRGb3JtYWwpOwogIH0KCiAgdm9pZCBzZXQgaXNHZW5lcmljQ292YXJpYW50SW1wbChib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlCiAgICAgICAgPyAoZmxhZ3MgfCBGbGFnR2VuZXJpY0NvdmFyaWFudEltcGwpCiAgICAgICAgOiAoZmxhZ3MgJiB+RmxhZ0dlbmVyaWNDb3ZhcmlhbnRJbXBsKTsKICB9CgogIHZvaWQgc2V0IGlzTGF0ZShib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlID8gKGZsYWdzIHwgRmxhZ0xhdGUpIDogKGZsYWdzICYgfkZsYWdMYXRlKTsKICB9CgogIHZvaWQgc2V0IGlzUmVxdWlyZWQoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdSZXF1aXJlZCkgOiAoZmxhZ3MgJiB+RmxhZ1JlcXVpcmVkKTsKICB9CgogIHZvaWQgYWRkQW5ub3RhdGlvbihFeHByZXNzaW9uIGFubm90YXRpb24pIHsKICAgIGlmIChhbm5vdGF0aW9ucy5pc0VtcHR5KSB7CiAgICAgIGFubm90YXRpb25zID0gPEV4cHJlc3Npb24+W107CiAgICB9CiAgICBhbm5vdGF0aW9ucy5hZGQoYW5ub3RhdGlvbi4ucGFyZW50ID0gdGhpcyk7CiAgfQoKICBhY2NlcHQoU3RhdGVtZW50VmlzaXRvciB2KSA9PiB2LnZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbih0aGlzKTsKICBhY2NlcHQxKFN0YXRlbWVudFZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24odGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZpc2l0TGlzdChhbm5vdGF0aW9ucywgdik7CiAgICB0eXBlPy5hY2NlcHQodik7CiAgICBpbml0aWFsaXplcj8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgdHJhbnNmb3JtTGlzdChhbm5vdGF0aW9ucywgdiwgdGhpcyk7CiAgICB0eXBlID0gdi52aXNpdERhcnRUeXBlKHR5cGUpOwogICAgaWYgKGluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgaW5pdGlhbGl6ZXIgPSBpbml0aWFsaXplci5hY2NlcHQodik7CiAgICAgIGluaXRpYWxpemVyPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KCiAgLy8vIFJldHVybnMgYSBwb3NzaWJseSBzeW50aGVzaXplZCBuYW1lIGZvciB0aGlzIHZhcmlhYmxlLCBjb25zaXN0ZW50IHdpdGgKICAvLy8gdGhlIG5hbWVzIHVzZWQgYWNyb3NzIGFsbCBbdG9TdHJpbmddIGNhbGxzLgogIFN0cmluZyB0b1N0cmluZygpID0+IGRlYnVnVmFyaWFibGVEZWNsYXJhdGlvbk5hbWUodGhpcyk7Cn0KCi8vLyBEZWNsYXJhdGlvbiBhIGxvY2FsIGZ1bmN0aW9uLgovLy8KLy8vIFRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbiBtYXkgdXNlIFt2YXJpYWJsZV0gYXMgaXRzIHNlbGYtcmVmZXJlbmNlLgpjbGFzcyBGdW5jdGlvbkRlY2xhcmF0aW9uIGV4dGVuZHMgU3RhdGVtZW50IGltcGxlbWVudHMgTG9jYWxGdW5jdGlvbiB7CiAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZTsgLy8gSXMgZmluYWwgYW5kIGhhcyBubyBpbml0aWFsaXplci4KICBGdW5jdGlvbk5vZGUgZnVuY3Rpb247CgogIEZ1bmN0aW9uRGVjbGFyYXRpb24odGhpcy52YXJpYWJsZSwgdGhpcy5mdW5jdGlvbikgewogICAgdmFyaWFibGU/LnBhcmVudCA9IHRoaXM7CiAgICBmdW5jdGlvbj8ucGFyZW50ID0gdGhpczsKICB9CgogIGFjY2VwdChTdGF0ZW1lbnRWaXNpdG9yIHYpID0+IHYudmlzaXRGdW5jdGlvbkRlY2xhcmF0aW9uKHRoaXMpOwogIGFjY2VwdDEoU3RhdGVtZW50VmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbih0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdmFyaWFibGU/LmFjY2VwdCh2KTsKICAgIGZ1bmN0aW9uPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAodmFyaWFibGUgIT0gbnVsbCkgewogICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlLmFjY2VwdCh2KTsKICAgICAgdmFyaWFibGU/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAoZnVuY3Rpb24gIT0gbnVsbCkgewogICAgICBmdW5jdGlvbiA9IGZ1bmN0aW9uLmFjY2VwdCh2KTsKICAgICAgZnVuY3Rpb24/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVTCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8vIEEgcHVibGljIG5hbWUsIG9yIGEgcHJpdmF0ZSBuYW1lIHF1YWxpZmllZCBieSBhIGxpYnJhcnkuCi8vLwovLy8gTmFtZXMgYXJlIG9ubHkgdXNlZCBmb3IgZXhwcmVzc2lvbnMgd2l0aCBkeW5hbWljIGRpc3BhdGNoLCBhcyBhbGwKLy8vIHN0YXRpY2FsbHkgcmVzb2x2ZWQgcmVmZXJlbmNlcyBhcmUgcmVwcmVzZW50ZWQgaW4gbmFtZWxlc3MgZm9ybS4KLy8vCi8vLyBbTmFtZV1zIGFyZSBpbW11dGFibGUgYW5kIGNvbXBhcmUgYmFzZWQgb24gc3RydWN0dXJhbCBlcXVhbGl0eSwgYW5kIHRoZXkKLy8vIGFyZSBub3QgQVNUIG5vZGVzLgovLy8KLy8vIFRoZSBbdG9TdHJpbmddIG1ldGhvZCByZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIHRoYXQgaW5jbHVkZXMgdGhlCi8vLyBsaWJyYXJ5IG5hbWUgZm9yIHByaXZhdGUgbmFtZXM7IHVuaXF1ZW5lc3MgaXMgbm90IGd1YXJhbnRlZWQuCmFic3RyYWN0IGNsYXNzIE5hbWUgaW1wbGVtZW50cyBOb2RlIHsKICBmaW5hbCBpbnQgaGFzaENvZGU7CiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgUmVmZXJlbmNlIGdldCBsaWJyYXJ5TmFtZTsKICBMaWJyYXJ5IGdldCBsaWJyYXJ5OwogIGJvb2wgZ2V0IGlzUHJpdmF0ZTsKCiAgTmFtZS5faW50ZXJuYWwodGhpcy5oYXNoQ29kZSwgdGhpcy5uYW1lKTsKCiAgZmFjdG9yeSBOYW1lKFN0cmluZyBuYW1lLCBbTGlicmFyeSBsaWJyYXJ5XSkgPT4KICAgICAgbmV3IE5hbWUuYnlSZWZlcmVuY2UobmFtZSwgbGlicmFyeT8ucmVmZXJlbmNlKTsKCiAgZmFjdG9yeSBOYW1lLmJ5UmVmZXJlbmNlKFN0cmluZyBuYW1lLCBSZWZlcmVuY2UgbGlicmFyeU5hbWUpIHsKICAgIC8vLyBVc2Ugc2VwYXJhdGUgc3ViY2xhc3NlcyBmb3IgdGhlIHB1YmxpYyBhbmQgcHJpdmF0ZSBjYXNlIHRvIHNhdmUgbWVtb3J5CiAgICAvLy8gZm9yIHB1YmxpYyBuYW1lcy4KICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoJ18nKSkgewogICAgICBhc3NlcnQobGlicmFyeU5hbWUgIT0gbnVsbCk7CiAgICAgIHJldHVybiBuZXcgX1ByaXZhdGVOYW1lKG5hbWUsIGxpYnJhcnlOYW1lKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgX1B1YmxpY05hbWUobmFtZSk7CiAgICB9CiAgfQoKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIgaXMgTmFtZSAmJiBuYW1lID09IG90aGVyLm5hbWUgJiYgbGlicmFyeSA9PSBvdGhlci5saWJyYXJ5OwogIH0KCiAgYWNjZXB0KFZpc2l0b3IgdikgPT4gdi52aXNpdE5hbWUodGhpcyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICAvLyBERVNJR04gVE9ETzogU2hvdWxkIHdlIHZpc2l0IHRoZSBsaWJyYXJ5IGFzIGEgbGlicmFyeSByZWZlcmVuY2U/CiAgfQp9CgpjbGFzcyBfUHJpdmF0ZU5hbWUgZXh0ZW5kcyBOYW1lIHsKICBmaW5hbCBSZWZlcmVuY2UgbGlicmFyeU5hbWU7CiAgYm9vbCBnZXQgaXNQcml2YXRlID0+IHRydWU7CgogIF9Qcml2YXRlTmFtZShTdHJpbmcgbmFtZSwgUmVmZXJlbmNlIGxpYnJhcnlOYW1lKQogICAgICA6IHRoaXMubGlicmFyeU5hbWUgPSBsaWJyYXJ5TmFtZSwKICAgICAgICBzdXBlci5faW50ZXJuYWwoX2NvbXB1dGVIYXNoQ29kZShuYW1lLCBsaWJyYXJ5TmFtZSksIG5hbWUpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBsaWJyYXJ5ICE9IG51bGwgPyAnJGxpYnJhcnk6OiRuYW1lJyA6IG5hbWU7CgogIExpYnJhcnkgZ2V0IGxpYnJhcnkgPT4gbGlicmFyeU5hbWUuYXNMaWJyYXJ5OwoKICBzdGF0aWMgaW50IF9jb21wdXRlSGFzaENvZGUoU3RyaW5nIG5hbWUsIFJlZmVyZW5jZSBsaWJyYXJ5TmFtZSkgewogICAgLy8gVE9ETyhkbWl0cnlhcyk6IEZhY3RvciBpbiBbbGlicmFyeU5hbWVdIGluIGEgbm9uLWRldGVybWluaXN0aWMgd2F5IGludG8KICAgIC8vIHRoZSByZXN1bHQuICBOb3RlLCB0aGUgcHJldmlvdXMgY29kZSBoZXJlIHdhcyB0aGUgZm9sbG93aW5nOgogICAgLy8gICAgIHJldHVybiAxMzEgKiBuYW1lLmhhc2hDb2RlICsgMTcgKiBsaWJyYXJ5TmFtZS5hc0xpYnJhcnkuX2xpYnJhcnlJZDsKICAgIHJldHVybiBuYW1lLmhhc2hDb2RlOwogIH0KfQoKY2xhc3MgX1B1YmxpY05hbWUgZXh0ZW5kcyBOYW1lIHsKICBSZWZlcmVuY2UgZ2V0IGxpYnJhcnlOYW1lID0+IG51bGw7CiAgTGlicmFyeSBnZXQgbGlicmFyeSA9PiBudWxsOwogIGJvb2wgZ2V0IGlzUHJpdmF0ZSA9PiBmYWxzZTsKCiAgX1B1YmxpY05hbWUoU3RyaW5nIG5hbWUpIDogc3VwZXIuX2ludGVybmFsKG5hbWUuaGFzaENvZGUsIG5hbWUpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBuYW1lOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRZUEVTCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8vIFJlcHJlc2VudHMgbnVsbGFiaWxpdHkgb2YgYSB0eXBlLgplbnVtIE51bGxhYmlsaXR5IHsKICAvLy8gTnVsbGFibGUgdHlwZXMgYXJlIG1hcmtlZCB3aXRoIHRoZSAnPycgbW9kaWZpZXIuCiAgLy8vCiAgLy8vIE51bGwsIGR5bmFtaWMsIGFuZCB2b2lkIGFyZSBudWxsYWJsZSBieSBkZWZhdWx0LgogIG51bGxhYmxlLAoKICAvLy8gTm9uLW51bGxhYmxlIHR5cGVzIGFyZSB0eXBlcyB0aGF0IGFyZW4ndCBtYXJrZWQgd2l0aCB0aGUgJz8nIG1vZGlmaWVyLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgTnVsbCwgZHluYW1pYywgYW5kIHZvaWQgdGhhdCBhcmUgbnVsbGFibGUgYnkgZGVmYXVsdC4gIE5vdGUgYWxzbwogIC8vLyB0aGF0IHNvbWUgdHlwZXMgZGVub3RlZCBieSBhIHR5cGUgcGFyYW1ldGVyIHdpdGhvdXQgdGhlICc/JyBtb2RpZmllciBjYW4KICAvLy8gYmUgc29tZXRoaW5nIGVsc2UgcmF0aGVyIHRoYW4gbm9uLW51bGxhYmxlLgogIG5vbk51bGxhYmxlLAoKICAvLy8gTm9uLWxlZ2FjeSB0eXBlcyB0aGF0IGFyZSBuZWl0aGVyIG51bGxhYmxlLCBub3Igbm9uLW51bGxhYmxlLgogIC8vLwogIC8vLyBBbiBleGFtcGxlIG9mIHN1Y2ggdHlwZSBpcyB0eXBlIFQgaW4gdGhlIGV4YW1wbGUgYmVsb3cuICBOb3RlIHRoYXQgYm90aAogIC8vLyBpbnQgYW5kIGludD8gY2FuIGJlIHBhc3NlZCBpbiBmb3IgVCwgc28gYW4gYXR0ZW1wdCB0byBhc3NpZ24gbnVsbCB0byB4IGlzCiAgLy8vIGEgY29tcGlsZS10aW1lIGVycm9yIGFzIHdlbGwgYXMgYXNzaWduaW5nIHggdG8geS4KICAvLy8KICAvLy8gICBjbGFzcyBBPFQgZXh0ZW5kcyBPYmplY3Q/PiB7CiAgLy8vICAgICBmb28oVCB4KSB7CiAgLy8vICAgICAgIHggPSBudWxsOyAgICAgIC8vIENvbXBpbGUtdGltZSBlcnJvci4KICAvLy8gICAgICAgT2JqZWN0IHkgPSB4OyAgLy8gQ29tcGlsZS10aW1lIGVycm9yLgogIC8vLyAgICAgfQogIC8vLyAgIH0KICBuZWl0aGVyLAoKICAvLy8gVHlwZXMgaW4gb3B0LW91dCBsaWJyYXJpZXMgYXJlICdsZWdhY3knIHR5cGVzLgogIC8vLwogIC8vLyBUaGV5IGFyZSBib3RoIHN1YnR5cGVzIGFuZCBzdXBlcnR5cGVzIG9mIHRoZSBudWxsYWJsZSBhbmQgbm9uLW51bGxhYmxlCiAgLy8vIHZlcnNpb25zIG9mIHRoZSB0eXBlLgogIGxlZ2FjeQp9CgovLy8gQSBzeW50YXgtaW5kZXBlbmRlbnQgbm90aW9uIG9mIGEgdHlwZS4KLy8vCi8vLyBbRGFydFR5cGVdcyBhcmUgbm90IEFTVCBub2RlcyBhbmQgbWF5IGJlIHNoYXJlZCBiZXR3ZWVuIGRpZmZlcmVudCBwYXJlbnRzLgovLy8KLy8vIFtEYXJ0VHlwZV0gb2JqZWN0cyBzaG91bGQgYmUgdHJlYXRlZCBhcyB1bm1vZGlmaWFibGUgb2JqZWN0cywgYWx0aG91Z2gKLy8vIGltbXV0YWJpbGl0eSBpcyBub3QgZW5mb3JjZWQgZm9yIExpc3QgZmllbGRzLCBhbmQgW1R5cGVQYXJhbWV0ZXJdcyBhcmUKLy8vIGN5Y2xpYyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvbnN0cnVjdGVkIGJ5IG11dGF0aW9uLgovLy8KLy8vIFRoZSBgPT1gIG9wZXJhdG9yIG9uIFtEYXJ0VHlwZV1zIGNvbXBhcmUgYmFzZWQgb24gdHlwZSBlcXVhbGl0eSwgbm90Ci8vLyBvYmplY3QgaWRlbnRpdHkuCmFic3RyYWN0IGNsYXNzIERhcnRUeXBlIGV4dGVuZHMgTm9kZSB7CiAgY29uc3QgRGFydFR5cGUoKTsKCiAgYWNjZXB0KERhcnRUeXBlVmlzaXRvciB2KTsKICBhY2NlcHQxKERhcnRUeXBlVmlzaXRvcjEgdiwgYXJnKTsKCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpOwoKICBOdWxsYWJpbGl0eSBnZXQgbnVsbGFiaWxpdHk7CgogIC8vLyBJZiB0aGlzIGlzIGEgdHlwZWRlZiB0eXBlLCByZXBlYXRlZGx5IHVuZm9sZHMgaXRzIHR5cGUgZGVmaW5pdGlvbiB1bnRpbAogIC8vLyB0aGUgcm9vdCB0ZXJtIGlzIG5vdCBhIHR5cGVkZWYgdHlwZSwgb3RoZXJ3aXNlIHJldHVybnMgdGhlIHR5cGUgaXRzZWxmLgogIC8vLwogIC8vLyBXaWxsIG5ldmVyIHJldHVybiBhIHR5cGVkZWYgdHlwZS4KICBEYXJ0VHlwZSBnZXQgdW5hbGlhcyA9PiB0aGlzOwoKICAvLy8gSWYgdGhpcyBpcyBhIHR5cGVkZWYgdHlwZSwgdW5mb2xkcyBpdHMgdHlwZSBkZWZpbml0aW9uIG9uY2UsIG90aGVyd2lzZQogIC8vLyByZXR1cm5zIHRoZSB0eXBlIGl0c2VsZi4KICBEYXJ0VHlwZSBnZXQgdW5hbGlhc09uY2UgPT4gdGhpczsKfQoKLy8vIFRoZSB0eXBlIGFyaXNpbmcgZnJvbSBpbnZhbGlkIHR5cGUgYW5ub3RhdGlvbnMuCi8vLwovLy8gQ2FuIHVzdWFsbHkgYmUgdHJlYXRlZCBhcyAnZHluYW1pYycsIGJ1dCBzaG91bGQgb2NjYXNpb25hbGx5IGJlIGhhbmRsZWQKLy8vIGRpZmZlcmVudGx5LCBlLmcuIGB4IGlzIEVSUk9SYCBzaG91bGQgZXZhbHVhdGUgdG8gZmFsc2UuCmNsYXNzIEludmFsaWRUeXBlIGV4dGVuZHMgRGFydFR5cGUgewogIGZpbmFsIGludCBoYXNoQ29kZSA9IDEyMzQ1OwoKICBjb25zdCBJbnZhbGlkVHlwZSgpOwoKICBhY2NlcHQoRGFydFR5cGVWaXNpdG9yIHYpID0+IHYudmlzaXRJbnZhbGlkVHlwZSh0aGlzKTsKICBhY2NlcHQxKERhcnRUeXBlVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0SW52YWxpZFR5cGUodGhpcywgYXJnKTsKICB2aXNpdENoaWxkcmVuKFZpc2l0b3Igdikge30KCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpID0+IG90aGVyIGlzIEludmFsaWRUeXBlOwoKICBOdWxsYWJpbGl0eSBnZXQgbnVsbGFiaWxpdHkgPT4gdGhyb3cgIkludmFsaWRUeXBlIGRvZXNuJ3QgaGF2ZSBudWxsYWJpbGl0eSI7Cn0KCmNsYXNzIER5bmFtaWNUeXBlIGV4dGVuZHMgRGFydFR5cGUgewogIGZpbmFsIGludCBoYXNoQ29kZSA9IDU0MzIxOwoKICBjb25zdCBEeW5hbWljVHlwZSgpOwoKICBhY2NlcHQoRGFydFR5cGVWaXNpdG9yIHYpID0+IHYudmlzaXREeW5hbWljVHlwZSh0aGlzKTsKICBhY2NlcHQxKERhcnRUeXBlVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0RHluYW1pY1R5cGUodGhpcywgYXJnKTsKICB2aXNpdENoaWxkcmVuKFZpc2l0b3Igdikge30KCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpID0+IG90aGVyIGlzIER5bmFtaWNUeXBlOwoKICBOdWxsYWJpbGl0eSBnZXQgbnVsbGFiaWxpdHkgPT4gTnVsbGFiaWxpdHkubnVsbGFibGU7Cn0KCmNsYXNzIFZvaWRUeXBlIGV4dGVuZHMgRGFydFR5cGUgewogIGZpbmFsIGludCBoYXNoQ29kZSA9IDEyMzEyMTsKCiAgY29uc3QgVm9pZFR5cGUoKTsKCiAgYWNjZXB0KERhcnRUeXBlVmlzaXRvciB2KSA9PiB2LnZpc2l0Vm9pZFR5cGUodGhpcyk7CiAgYWNjZXB0MShEYXJ0VHlwZVZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFZvaWRUeXBlKHRoaXMsIGFyZyk7CiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHt9CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSA9PiBvdGhlciBpcyBWb2lkVHlwZTsKCiAgTnVsbGFiaWxpdHkgZ2V0IG51bGxhYmlsaXR5ID0+IE51bGxhYmlsaXR5Lm51bGxhYmxlOwp9CgpjbGFzcyBCb3R0b21UeXBlIGV4dGVuZHMgRGFydFR5cGUgewogIGZpbmFsIGludCBoYXNoQ29kZSA9IDUxNDIxMzsKCiAgY29uc3QgQm90dG9tVHlwZSgpOwoKICBhY2NlcHQoRGFydFR5cGVWaXNpdG9yIHYpID0+IHYudmlzaXRCb3R0b21UeXBlKHRoaXMpOwogIGFjY2VwdDEoRGFydFR5cGVWaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRCb3R0b21UeXBlKHRoaXMsIGFyZyk7CiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHt9CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSA9PiBvdGhlciBpcyBCb3R0b21UeXBlOwoKICBOdWxsYWJpbGl0eSBnZXQgbnVsbGFiaWxpdHkgPT4gTnVsbGFiaWxpdHkubm9uTnVsbGFibGU7Cn0KCmNsYXNzIEludGVyZmFjZVR5cGUgZXh0ZW5kcyBEYXJ0VHlwZSB7CiAgUmVmZXJlbmNlIGNsYXNzTmFtZTsKCiAgZmluYWwgTnVsbGFiaWxpdHkgbnVsbGFiaWxpdHk7CgogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CgogIC8vLyBUaGUgW3R5cGVBcmd1bWVudHNdIGxpc3QgbXVzdCBub3QgYmUgbW9kaWZpZWQgYWZ0ZXIgdGhpcyBjYWxsLiBJZiB0aGUKICAvLy8gbGlzdCBpcyBvbWl0dGVkLCAnZHluYW1pYycgdHlwZSBhcmd1bWVudHMgYXJlIGZpbGxlZCBpbi4KICBJbnRlcmZhY2VUeXBlKENsYXNzIGNsYXNzTm9kZSwKICAgICAgW0xpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIE51bGxhYmlsaXR5IG51bGxhYmlsaXR5ID0gTnVsbGFiaWxpdHkubGVnYWN5XSkKICAgICAgOiB0aGlzLmJ5UmVmZXJlbmNlKGdldENsYXNzUmVmZXJlbmNlKGNsYXNzTm9kZSksCiAgICAgICAgICAgIHR5cGVBcmd1bWVudHMgPz8gX2RlZmF1bHRUeXBlQXJndW1lbnRzKGNsYXNzTm9kZSksIG51bGxhYmlsaXR5KTsKCiAgSW50ZXJmYWNlVHlwZS5ieVJlZmVyZW5jZSh0aGlzLmNsYXNzTmFtZSwgdGhpcy50eXBlQXJndW1lbnRzLAogICAgICBbdGhpcy5udWxsYWJpbGl0eSA9IE51bGxhYmlsaXR5LmxlZ2FjeV0pOwoKICBDbGFzcyBnZXQgY2xhc3NOb2RlID0+IGNsYXNzTmFtZS5hc0NsYXNzOwoKICBzdGF0aWMgTGlzdDxEYXJ0VHlwZT4gX2RlZmF1bHRUeXBlQXJndW1lbnRzKENsYXNzIGNsYXNzTm9kZSkgewogICAgaWYgKGNsYXNzTm9kZS50eXBlUGFyYW1ldGVycy5sZW5ndGggPT0gMCkgewogICAgICAvLyBBdm9pZCBhbGxvY2F0aW5nIGEgbGlzdCBpbiB0aGlzIHZlcnkgY29tbW9uIGNhc2UuCiAgICAgIHJldHVybiBjb25zdCA8RGFydFR5cGU+W107CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IExpc3Q8RGFydFR5cGU+LmZpbGxlZCgKICAgICAgICAgIGNsYXNzTm9kZS50eXBlUGFyYW1ldGVycy5sZW5ndGgsIGNvbnN0IER5bmFtaWNUeXBlKCkpOwogICAgfQogIH0KCiAgYWNjZXB0KERhcnRUeXBlVmlzaXRvciB2KSA9PiB2LnZpc2l0SW50ZXJmYWNlVHlwZSh0aGlzKTsKICBhY2NlcHQxKERhcnRUeXBlVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0SW50ZXJmYWNlVHlwZSh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgY2xhc3NOb2RlLmFjY2VwdFJlZmVyZW5jZSh2KTsKICAgIHZpc2l0TGlzdCh0eXBlQXJndW1lbnRzLCB2KTsKICB9CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICBpZiAoY2xhc3NOYW1lICE9IG90aGVyLmNsYXNzTmFtZSkgcmV0dXJuIGZhbHNlOwogICAgICBpZiAodHlwZUFyZ3VtZW50cy5sZW5ndGggIT0gb3RoZXIudHlwZUFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlQXJndW1lbnRzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgaWYgKHR5cGVBcmd1bWVudHNbaV0gIT0gb3RoZXIudHlwZUFyZ3VtZW50c1tpXSkgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICBpbnQgaGFzaCA9IDB4M2ZmZmZmZmYgJiBjbGFzc05hbWUuaGFzaENvZGU7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgaGFzaCA9IDB4M2ZmZmZmZmYgJiAoaGFzaCAqIDMxICsgKGhhc2ggXiB0eXBlQXJndW1lbnRzW2ldLmhhc2hDb2RlKSk7CiAgICB9CiAgICByZXR1cm4gaGFzaDsKICB9Cn0KCi8vLyBBIHBvc3NpYmx5IGdlbmVyaWMgZnVuY3Rpb24gdHlwZS4KY2xhc3MgRnVuY3Rpb25UeXBlIGV4dGVuZHMgRGFydFR5cGUgewogIGZpbmFsIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnM7CiAgZmluYWwgaW50IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ7CiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gcG9zaXRpb25hbFBhcmFtZXRlcnM7CiAgZmluYWwgTGlzdDxOYW1lZFR5cGU+IG5hbWVkUGFyYW1ldGVyczsgLy8gTXVzdCBiZSBzb3J0ZWQuCiAgZmluYWwgTnVsbGFiaWxpdHkgbnVsbGFiaWxpdHk7CgogIC8vLyBUaGUgW1R5cGVkZWZdIHRoaXMgZnVuY3Rpb24gdHlwZSBpcyBjcmVhdGVkIGZvci4KICBmaW5hbCBUeXBlZGVmVHlwZSB0eXBlZGVmVHlwZTsKCiAgZmluYWwgRGFydFR5cGUgcmV0dXJuVHlwZTsKICBpbnQgX2hhc2hDb2RlOwoKICBGdW5jdGlvblR5cGUoTGlzdDxEYXJ0VHlwZT4gcG9zaXRpb25hbFBhcmFtZXRlcnMsIHRoaXMucmV0dXJuVHlwZSwKICAgICAge3RoaXMubmFtZWRQYXJhbWV0ZXJzOiBjb25zdCA8TmFtZWRUeXBlPltdLAogICAgICB0aGlzLnR5cGVQYXJhbWV0ZXJzOiBjb25zdCA8VHlwZVBhcmFtZXRlcj5bXSwKICAgICAgdGhpcy5udWxsYWJpbGl0eTogTnVsbGFiaWxpdHkubGVnYWN5LAogICAgICBpbnQgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgdGhpcy50eXBlZGVmVHlwZX0pCiAgICAgIDogdGhpcy5wb3NpdGlvbmFsUGFyYW1ldGVycyA9IHBvc2l0aW9uYWxQYXJhbWV0ZXJzLAogICAgICAgIHRoaXMucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA9CiAgICAgICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPz8gcG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoOwoKICBSZWZlcmVuY2UgZ2V0IHR5cGVkZWZSZWZlcmVuY2UgPT4gdHlwZWRlZlR5cGU/LnR5cGVkZWZSZWZlcmVuY2U7CgogIFR5cGVkZWYgZ2V0IHR5cGVkZWYgPT4gdHlwZWRlZlJlZmVyZW5jZT8uYXNUeXBlZGVmOwoKICBhY2NlcHQoRGFydFR5cGVWaXNpdG9yIHYpID0+IHYudmlzaXRGdW5jdGlvblR5cGUodGhpcyk7CiAgYWNjZXB0MShEYXJ0VHlwZVZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdEZ1bmN0aW9uVHlwZSh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdmlzaXRMaXN0KHR5cGVQYXJhbWV0ZXJzLCB2KTsKICAgIHZpc2l0TGlzdChwb3NpdGlvbmFsUGFyYW1ldGVycywgdik7CiAgICB2aXNpdExpc3QobmFtZWRQYXJhbWV0ZXJzLCB2KTsKICAgIHR5cGVkZWZUeXBlPy5hY2NlcHQodik7CiAgICByZXR1cm5UeXBlLmFjY2VwdCh2KTsKICB9CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICAgIGlmICh0eXBlUGFyYW1ldGVycy5sZW5ndGggIT0gb3RoZXIudHlwZVBhcmFtZXRlcnMubGVuZ3RoIHx8CiAgICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50ICE9IG90aGVyLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQgfHwKICAgICAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCAhPSBvdGhlci5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGggfHwKICAgICAgICAgIG5hbWVkUGFyYW1ldGVycy5sZW5ndGggIT0gb3RoZXIubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBpZiAodHlwZVBhcmFtZXRlcnMuaXNFbXB0eSkgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgIGlmIChwb3NpdGlvbmFsUGFyYW1ldGVyc1tpXSAhPSBvdGhlci5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZWRQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICBpZiAobmFtZWRQYXJhbWV0ZXJzW2ldICE9IG90aGVyLm5hbWVkUGFyYW1ldGVyc1tpXSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXR1cm5UeXBlID09IG90aGVyLnJldHVyblR5cGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gU3RydWN0dXJhbCBlcXVhbGl0eSBkb2VzIG5vdCB0ZWxsIHVzIGlmIHR3byBnZW5lcmljIGZ1bmN0aW9uIHR5cGVzCiAgICAgICAgLy8gYXJlIHRoZSBzYW1lIHR5cGUuICBJZiB0aGV5IGFyZSB1bmlmaWFibGUgd2l0aG91dCBzdWJzdGl0dXRpbmcgYW55CiAgICAgICAgLy8gdHlwZSB2YXJpYWJsZXMsIHRoZXkgYXJlIGVxdWFsLgogICAgICAgIHJldHVybiB1bmlmeVR5cGVzKHRoaXMsIG90aGVyLCBuZXcgU2V0PFR5cGVQYXJhbWV0ZXI+KCkpICE9IG51bGw7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIGEgdmFyaWFudCBvZiB0aGlzIGZ1bmN0aW9uIHR5cGUgdGhhdCBkb2VzIG5vdCBkZWNsYXJlIGFueSB0eXBlCiAgLy8vIHBhcmFtZXRlcnMuCiAgLy8vCiAgLy8vIEFueSB1c2VzIG9mIGl0cyB0eXBlIHBhcmFtZXRlcnMgYmVjb21lIGZyZWUgdmFyaWFibGVzIGluIHRoZSByZXR1cm5lZAogIC8vLyB0eXBlLgogIEZ1bmN0aW9uVHlwZSBnZXQgd2l0aG91dFR5cGVQYXJhbWV0ZXJzIHsKICAgIGlmICh0eXBlUGFyYW1ldGVycy5pc0VtcHR5KSByZXR1cm4gdGhpczsKICAgIHJldHVybiBuZXcgRnVuY3Rpb25UeXBlKHBvc2l0aW9uYWxQYXJhbWV0ZXJzLCByZXR1cm5UeXBlLAogICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ6IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzOiBuYW1lZFBhcmFtZXRlcnMsCiAgICAgICAgdHlwZWRlZlR5cGU6IHR5cGVkZWZUeXBlKTsKICB9CgogIC8vLyBMb29rcyB1cCB0aGUgdHlwZSBvZiB0aGUgbmFtZWQgcGFyYW1ldGVyIHdpdGggdGhlIGdpdmVuIG5hbWUuCiAgLy8vCiAgLy8vIFJldHVybnMgYG51bGxgIGlmIHRoZXJlIGlzIG5vIG5hbWVkIHBhcmFtZXRlciB3aXRoIHRoZSBnaXZlbiBuYW1lLgogIERhcnRUeXBlIGdldE5hbWVkUGFyYW1ldGVyKFN0cmluZyBuYW1lKSB7CiAgICBpbnQgbG93ZXIgPSAwOwogICAgaW50IHVwcGVyID0gbmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCAtIDE7CiAgICB3aGlsZSAobG93ZXIgPD0gdXBwZXIpIHsKICAgICAgaW50IHBpdm90ID0gKGxvd2VyICsgdXBwZXIpIH4vIDI7CiAgICAgIHZhciBuYW1lZFBhcmFtZXRlciA9IG5hbWVkUGFyYW1ldGVyc1twaXZvdF07CiAgICAgIGludCBjb21wYXJpc29uID0gbmFtZS5jb21wYXJlVG8obmFtZWRQYXJhbWV0ZXIubmFtZSk7CiAgICAgIGlmIChjb21wYXJpc29uID09IDApIHsKICAgICAgICByZXR1cm4gbmFtZWRQYXJhbWV0ZXIudHlwZTsKICAgICAgfSBlbHNlIGlmIChjb21wYXJpc29uIDwgMCkgewogICAgICAgIHVwcGVyID0gcGl2b3QgLSAxOwogICAgICB9IGVsc2UgewogICAgICAgIGxvd2VyID0gcGl2b3QgKyAxOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIGludCBnZXQgaGFzaENvZGUgPT4gX2hhc2hDb2RlID8/PSBfY29tcHV0ZUhhc2hDb2RlKCk7CgogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgewogICAgaW50IGhhc2ggPSAxMjM3OwogICAgaGFzaCA9IDB4M2ZmZmZmZmYgJiAoaGFzaCAqIDMxICsgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgIFR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyID0gdHlwZVBhcmFtZXRlcnNbaV07CiAgICAgIF90ZW1wb3JhcnlIYXNoQ29kZVRhYmxlW3BhcmFtZXRlcl0gPSBfdGVtcG9yYXJ5SGFzaENvZGVUYWJsZS5sZW5ndGg7CiAgICAgIGhhc2ggPSAweDNmZmZmZmZmICYgKGhhc2ggKiAzMSArIHBhcmFtZXRlci5ib3VuZC5oYXNoQ29kZSk7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgIGhhc2ggPSAweDNmZmZmZmZmICYgKGhhc2ggKiAzMSArIHBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldLmhhc2hDb2RlKTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZWRQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgIGhhc2ggPSAweDNmZmZmZmZmICYgKGhhc2ggKiAzMSArIG5hbWVkUGFyYW1ldGVyc1tpXS5oYXNoQ29kZSk7CiAgICB9CiAgICBoYXNoID0gMHgzZmZmZmZmZiAmIChoYXNoICogMzEgKyByZXR1cm5UeXBlLmhhc2hDb2RlKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKICAgICAgLy8gUmVtb3ZlIHRoZSB0eXBlIHBhcmFtZXRlcnMgZnJvbSB0aGUgc2NvcGUgYWdhaW4uCiAgICAgIF90ZW1wb3JhcnlIYXNoQ29kZVRhYmxlLnJlbW92ZSh0eXBlUGFyYW1ldGVyc1tpXSk7CiAgICB9CiAgICByZXR1cm4gaGFzaDsKICB9Cn0KCi8vLyBBIHVzZSBvZiBhIFtUeXBlZGVmXSBhcyBhIHR5cGUuCi8vLwovLy8gVGhlIHVuZGVybHlpbmcgdHlwZSBjYW4gYmUgZXh0cmFjdGVkIHVzaW5nIFt1bmFsaWFzXS4KY2xhc3MgVHlwZWRlZlR5cGUgZXh0ZW5kcyBEYXJ0VHlwZSB7CiAgZmluYWwgTnVsbGFiaWxpdHkgbnVsbGFiaWxpdHk7CiAgZmluYWwgUmVmZXJlbmNlIHR5cGVkZWZSZWZlcmVuY2U7CiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50czsKCiAgVHlwZWRlZlR5cGUoVHlwZWRlZiB0eXBlZGVmTm9kZSwKICAgICAgW0xpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIE51bGxhYmlsaXR5IG51bGxhYmlsaXR5ID0gTnVsbGFiaWxpdHkubGVnYWN5XSkKICAgICAgOiB0aGlzLmJ5UmVmZXJlbmNlKHR5cGVkZWZOb2RlLnJlZmVyZW5jZSwKICAgICAgICAgICAgdHlwZUFyZ3VtZW50cyA/PyBjb25zdCA8RGFydFR5cGU+W10sIG51bGxhYmlsaXR5KTsKCiAgVHlwZWRlZlR5cGUuYnlSZWZlcmVuY2UodGhpcy50eXBlZGVmUmVmZXJlbmNlLCB0aGlzLnR5cGVBcmd1bWVudHMsCiAgICAgIFt0aGlzLm51bGxhYmlsaXR5ID0gTnVsbGFiaWxpdHkubGVnYWN5XSk7CgogIFR5cGVkZWYgZ2V0IHR5cGVkZWZOb2RlID0+IHR5cGVkZWZSZWZlcmVuY2UuYXNUeXBlZGVmOwoKICBhY2NlcHQoRGFydFR5cGVWaXNpdG9yIHYpID0+IHYudmlzaXRUeXBlZGVmVHlwZSh0aGlzKTsKICBhY2NlcHQxKERhcnRUeXBlVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0VHlwZWRlZlR5cGUodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZpc2l0TGlzdCh0eXBlQXJndW1lbnRzLCB2KTsKICAgIHYudmlzaXRUeXBlZGVmUmVmZXJlbmNlKHR5cGVkZWZOb2RlKTsKICB9CgogIERhcnRUeXBlIGdldCB1bmFsaWFzT25jZSB7CiAgICByZXR1cm4gU3Vic3RpdHV0aW9uLmZyb21UeXBlZGVmVHlwZSh0aGlzKS5zdWJzdGl0dXRlVHlwZSh0eXBlZGVmTm9kZS50eXBlKTsKICB9CgogIERhcnRUeXBlIGdldCB1bmFsaWFzIHsKICAgIHJldHVybiB1bmFsaWFzT25jZS51bmFsaWFzOwogIH0KCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyBUeXBlZGVmVHlwZSkgewogICAgICBpZiAodHlwZWRlZlJlZmVyZW5jZSAhPSBvdGhlci50eXBlZGVmUmVmZXJlbmNlIHx8CiAgICAgICAgICB0eXBlQXJndW1lbnRzLmxlbmd0aCAhPSBvdGhlci50eXBlQXJndW1lbnRzLmxlbmd0aCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgICBpZiAodHlwZUFyZ3VtZW50c1tpXSAhPSBvdGhlci50eXBlQXJndW1lbnRzW2ldKSByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIGludCBoYXNoID0gMHgzZmZmZmZmZiAmIHR5cGVkZWZOb2RlLmhhc2hDb2RlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlQXJndW1lbnRzLmxlbmd0aDsgKytpKSB7CiAgICAgIGhhc2ggPSAweDNmZmZmZmZmICYgKGhhc2ggKiAzMSArIChoYXNoIF4gdHlwZUFyZ3VtZW50c1tpXS5oYXNoQ29kZSkpOwogICAgfQogICAgcmV0dXJuIGhhc2g7CiAgfQp9CgovLy8gQSBuYW1lZCBwYXJhbWV0ZXIgaW4gW0Z1bmN0aW9uVHlwZV0uCmNsYXNzIE5hbWVkVHlwZSBleHRlbmRzIE5vZGUgaW1wbGVtZW50cyBDb21wYXJhYmxlPE5hbWVkVHlwZT4gewogIC8vIEZsYWcgdXNlZCBmb3Igc2VyaWFsaXphdGlvbiBpZiBbaXNSZXF1aXJlZF0uCiAgc3RhdGljIGNvbnN0IGludCBGbGFnUmVxdWlyZWROYW1lZFR5cGUgPSAxIDw8IDA7CgogIGZpbmFsIFN0cmluZyBuYW1lOwogIGZpbmFsIERhcnRUeXBlIHR5cGU7CiAgZmluYWwgYm9vbCBpc1JlcXVpcmVkOwoKICBOYW1lZFR5cGUodGhpcy5uYW1lLCB0aGlzLnR5cGUsIHt0aGlzLmlzUmVxdWlyZWQ6IGZhbHNlfSk7CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIgaXMgTmFtZWRUeXBlICYmCiAgICAgICAgbmFtZSA9PSBvdGhlci5uYW1lICYmCiAgICAgICAgdHlwZSA9PSBvdGhlci50eXBlICYmCiAgICAgICAgaXNSZXF1aXJlZCA9PSBvdGhlci5pc1JlcXVpcmVkOwogIH0KCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gbmFtZS5oYXNoQ29kZSAqIDMxICsgdHlwZS5oYXNoQ29kZSAqIDM3ICsgaXNSZXF1aXJlZC5oYXNoQ29kZSAqIDQxOwogIH0KCiAgaW50IGNvbXBhcmVUbyhOYW1lZFR5cGUgb3RoZXIpID0+IG5hbWUuY29tcGFyZVRvKG90aGVyLm5hbWUpOwoKICBhY2NlcHQoVmlzaXRvciB2KSA9PiB2LnZpc2l0TmFtZWRUeXBlKHRoaXMpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB0eXBlLmFjY2VwdCh2KTsKICB9Cn0KCi8vLyBTdG9yZXMgdGhlIGhhc2ggY29kZSBvZiBmdW5jdGlvbiB0eXBlIHBhcmFtZXRlcnMgd2hpbGUgY29tcHV0aW5nIHRoZSBoYXNoCi8vLyBjb2RlIG9mIGEgW0Z1bmN0aW9uVHlwZV0gb2JqZWN0LgovLy8KLy8vIFRoaXMgZW5zdXJlcyB0aGF0IGRpc3RpbmN0IFtGdW5jdGlvblR5cGVdIG9iamVjdHMgZ2V0IHRoZSBzYW1lIGhhc2ggY29kZQovLy8gaWYgdGhleSByZXByZXNlbnQgdGhlIHNhbWUgdHlwZSwgZXZlbiB0aG91Z2ggdGhlaXIgdHlwZSBwYXJhbWV0ZXJzIGFyZQovLy8gcmVwcmVzZW50ZWQgYnkgZGlmZmVyZW50IG9iamVjdHMuCmZpbmFsIE1hcDxUeXBlUGFyYW1ldGVyLCBpbnQ+IF90ZW1wb3JhcnlIYXNoQ29kZVRhYmxlID0gPFR5cGVQYXJhbWV0ZXIsIGludD57fTsKCi8vLyBSZWZlcmVuY2UgdG8gYSB0eXBlIHZhcmlhYmxlLgovLy8KLy8vIEEgdHlwZSB2YXJpYWJsZSBoYXMgYW4gb3B0aW9uYWwgYm91bmQgYmVjYXVzZSB0eXBlIHByb21vdGlvbiBjYW4gY2hhbmdlIHRoZQovLy8gYm91bmQuICBBIGJvdW5kIG9mIGBudWxsYCBpbmRpY2F0ZXMgdGhhdCB0aGUgYm91bmQgaGFzIG5vdCBiZWVuIHByb21vdGVkIGFuZAovLy8gaXMgdGhlIHNhbWUgYXMgdGhlIFtUeXBlUGFyYW1ldGVyXSdzIGJvdW5kLiAgVGhpcyBhbGxvd3Mgb25lIHRvIGRldGVjdAovLy8gd2hldGhlciB0aGUgYm91bmQgaGFzIGJlZW4gcHJvbW90ZWQuCmNsYXNzIFR5cGVQYXJhbWV0ZXJUeXBlIGV4dGVuZHMgRGFydFR5cGUgewogIC8vLyBUaGUgbnVsbGFiaWxpdHkgZGVjbGFyZWQgb24gdGhlIHR5cGUuCiAgLy8vCiAgLy8vIERlY2xhcmF0aW9ucyBvZiB0eXBlLXBhcmFtZXRlciB0eXBlcyBjYW4gc2V0IGl0IHRvIFtOdWxsYWJpbGl0eS5udWxsYWJsZV0KICAvLy8gb3IgW051bGxhYmlsaXR5LmxlZ2FjeV0uICBPdGhlcndpc2UsIGl0J3MgY29tcHV0ZWQgZnJvbSB0aGUgbnVsbGFiaWxpdHkKICAvLy8gb2YgdGhlIHR5cGUgcGFyYW1ldGVyIGJvdW5kLgogIE51bGxhYmlsaXR5IGRlY2xhcmVkTnVsbGFiaWxpdHk7CgogIFR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyOwoKICAvLy8gQW4gb3B0aW9uYWwgcHJvbW90ZWQgYm91bmQgb24gdGhlIHR5cGUgcGFyYW1ldGVyLgogIC8vLwogIC8vLyAnbnVsbCcgaW5kaWNhdGVzIHRoYXQgdGhlIHR5cGUgcGFyYW1ldGVyJ3MgYm91bmQgaGFzIG5vdCBiZWVuIHByb21vdGVkIGFuZAogIC8vLyBpcyB0aGVyZWZvcmUgdGhlIHNhbWUgYXMgdGhlIGJvdW5kIG9mIFtwYXJhbWV0ZXJdLgogIERhcnRUeXBlIHByb21vdGVkQm91bmQ7CgogIFR5cGVQYXJhbWV0ZXJUeXBlKHRoaXMucGFyYW1ldGVyLAogICAgICBbdGhpcy5wcm9tb3RlZEJvdW5kLCB0aGlzLmRlY2xhcmVkTnVsbGFiaWxpdHkgPSBOdWxsYWJpbGl0eS5sZWdhY3ldKTsKCiAgYWNjZXB0KERhcnRUeXBlVmlzaXRvciB2KSA9PiB2LnZpc2l0VHlwZVBhcmFtZXRlclR5cGUodGhpcyk7CiAgYWNjZXB0MShEYXJ0VHlwZVZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFR5cGVQYXJhbWV0ZXJUeXBlKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7fQoKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgewogICAgcmV0dXJuIG90aGVyIGlzIFR5cGVQYXJhbWV0ZXJUeXBlICYmIHBhcmFtZXRlciA9PSBvdGhlci5wYXJhbWV0ZXI7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IF90ZW1wb3JhcnlIYXNoQ29kZVRhYmxlW3BhcmFtZXRlcl0gPz8gcGFyYW1ldGVyLmhhc2hDb2RlOwoKICAvLy8gUmV0dXJucyB0aGUgYm91bmQgb2YgdGhlIHR5cGUgcGFyYW1ldGVyLCBhY2NvdW50aW5nIGZvciBwcm9tb3Rpb25zLgogIERhcnRUeXBlIGdldCBib3VuZCA9PiBwcm9tb3RlZEJvdW5kID8/IHBhcmFtZXRlci5ib3VuZDsKCiAgLy8vIEFjdHVhbCBudWxsYWJpbGl0eSBvZiB0aGUgdHlwZSwgY2FsY3VsYXRlZCBmcm9tIGl0cyBwYXJ0cy4KICAvLy8KICAvLy8gW251bGxhYmlsaXR5XSBpcyBjYWxjdWxhdGVkIGZyb20gW2RlY2xhcmVkTnVsbGFiaWxpdHldIGFuZCB0aGUKICAvLy8gbnVsbGFiaWxpdGllcyBvZiBbcHJvbW90ZWRCb3VuZF0gYW5kIHRoZSBib3VuZCBvZiBbcGFyYW1ldGVyXS4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGUsIGluIHRoZSBmb2xsb3dpbmcgcHJvZ3JhbSBbZGVjbGFyZWROdWxsYWJpbGl0eV0gYm90aCBgeGAgYW5kCiAgLy8vIGB5YCBpcyBbTnVsbGFiaWxpdHkubnVsbGFibGVdLCBiZWNhdXNlIGl0J3MgY29waWVkIGZyb20gdGhhdCBvZiBgYmFyYC4KICAvLy8gSG93ZXZlciwgZGVzcGl0ZSBbbnVsbGFiaWxpdHldIG9mIGB4YCBpcyBbTnVsbGFiaWxpdHkubnVsbGFibGVdLAogIC8vLyBbbnVsbGFiaWxpdHldIG9mIGB5YCBpcyBbTnVsbGFiaWxpdHkubm9uTnVsbGFibGVdIGJlY2F1c2Ugb2YgaXRzCiAgLy8vIFtwcm9tb3RlZEJvdW5kXS4KICAvLy8KICAvLy8gICAgIGNsYXNzIEE8VCBleHRlbmRzIE9iamVjdD8+IHsKICAvLy8gICAgICAgZm9vKFQ/IGJhcikgewogIC8vLyAgICAgICAgIHZhciB4ID0gYmFyOwogIC8vLyAgICAgICAgIGlmIChiYXIgaXMgaW50KSB7CiAgLy8vICAgICAgICAgICB2YXIgeSA9IGJhcjsKICAvLy8gICAgICAgICB9CiAgLy8vICAgICAgIH0KICAvLy8gICAgIH0KICBOdWxsYWJpbGl0eSBnZXQgbnVsbGFiaWxpdHkgPT4KICAgICAgZ2V0TnVsbGFiaWxpdHkocGFyYW1ldGVyLCBwcm9tb3RlZEJvdW5kLCBkZWNsYXJlZE51bGxhYmlsaXR5KTsKCiAgc3RhdGljIE51bGxhYmlsaXR5IGNvbXB1dGVOdWxsYWJpbGl0eUZyb21Cb3VuZChUeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIpIHsKICAgIC8vIElmIHRoZSBib3VuZCBpcyBudWxsYWJsZSwgYm90aCBudWxsYWJsZSBhbmQgbm9uLW51bGxhYmxlIHR5cGVzIGNhbiBiZQogICAgLy8gcGFzc2VkIGluIGZvciB0aGUgdHlwZSBwYXJhbWV0ZXIsIG1ha2luZyB0aGUgY29ycmVzcG9uZGluZyB0eXBlCiAgICAvLyBwYXJhbWV0ZXIgdHlwZXMgJ25laXRoZXIuJyAgT3RoZXJ3aXNlLCB0aGUgbnVsbGFiaWxpdHkgbWF0Y2hlcyB0aGF0IG9mCiAgICAvLyB0aGUgYm91bmQuCiAgICBEYXJ0VHlwZSBib3VuZCA9IHR5cGVQYXJhbWV0ZXIuYm91bmQ7CiAgICBpZiAoYm91bmQgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiQ2FuJ3QgY29tcHV0ZSBudWxsYWJpbGl0eSBmcm9tIGFic2VudCBib3VuZC4iKTsKICAgIH0KICAgIE51bGxhYmlsaXR5IGJvdW5kTnVsbGFiaWxpdHkgPQogICAgICAgIGJvdW5kIGlzIEludmFsaWRUeXBlID8gTnVsbGFiaWxpdHkubmVpdGhlciA6IGJvdW5kLm51bGxhYmlsaXR5OwogICAgcmV0dXJuIGJvdW5kTnVsbGFiaWxpdHkgPT0gTnVsbGFiaWxpdHkubnVsbGFibGUKICAgICAgICA/IE51bGxhYmlsaXR5Lm5laXRoZXIKICAgICAgICA6IGJvdW5kTnVsbGFiaWxpdHk7CiAgfQoKICAvLy8gR2V0IG51bGxhYmlsaXR5IG9mIFtUeXBlUGFyYW1ldGVyVHlwZV0gZnJvbSBhcmd1bWVudHMgdG8gaXRzIGNvbnN0cnVjdG9yLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIG9ubHkgaW4gdGhlIGNvbnN0cnVjdG9yIG9mCiAgLy8vIFtUeXBlUGFyYW1ldGVyVHlwZV0gdG8gY29tcHV0ZSB0aGUgdmFsdWUgb2YKICAvLy8gW1R5cGVQYXJhbWV0ZXJUeXBlLm51bGxhYmlsaXR5XSBmcm9tIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KICBzdGF0aWMgTnVsbGFiaWxpdHkgZ2V0TnVsbGFiaWxpdHkoVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIsCiAgICAgIERhcnRUeXBlIHByb21vdGVkQm91bmQsIE51bGxhYmlsaXR5IGRlY2xhcmVkTnVsbGFiaWxpdHkpIHsKICAgIC8vIElmIHByb21vdGVkQm91bmQgaXMgbnVsbCwgZ2V0TnVsbGFiaWxpdHkgcmV0dXJucyB0aGUgbnVsbGFiaWxpdHkgb2YKICAgIC8vIGVpdGhlciBUIG9yIFQ/IHdoZXJlIFQgaXMgcGFyYW1ldGVyIGFuZCB0aGUgcHJlc2VuY2Ugb2YgJz8nIGlzIGRldGVybWluZWQKICAgIC8vIGJ5IG51bGxhYmlsaXR5LgoKICAgIC8vIElmIHByb21vdGVkQm91bmQgaXNuJ3QgbnVsbCwgZ2V0TnVsbGFiaWxpdHkgcmV0dXJucyB0aGUgbnVsbGFiaWxpdHkgb2YgYW4KICAgIC8vIGludGVyc2VjdGlvbiBvZiB0aGUgbGVmdC1oYW5kIHNpZGUgKHJlZmVycmVkIHRvIGFzIExIUyBiZWxvdykgYW5kIHRoZQogICAgLy8gcmlnaHQtaGFuZCBzaWRlIChyZWZlcnJlZCB0byBhcyBSSFMgYmVsb3cpLiAgTEhTIGlzIHBhcmFtZXRlciBmb2xsb3dlZCBieQogICAgLy8gbnVsbGFiaWxpdHksIGFuZCBSSFMgaXMgcHJvbW90ZWRCb3VuZC4gIFRoYXQgaXMsIGdldE51bGxhYmlsaXR5IHJldHVybnMKICAgIC8vIHRoZSBudWxsYWJpbGl0eSBvZiBlaXRoZXIgVCAmIFAgb3IgVD8gJiBQIHdoZXJlIFQgaXMgcGFyYW1ldGVyLCBQIGlzCiAgICAvLyBwcm9tb3RlZEJvdW5kLCBhbmQgdGhlIHByZXNlbmNlIG9mICc/JyBpcyBkZXRlcm1pbmVkIGJ5IG51bGxhYmlsaXR5LgogICAgLy8gTm90ZSB0aGF0IFJIUyBpcyBhbHdheXMgYSBzdWJ0eXBlIG9mIHRoZSBib3VuZCBvZiB0aGUgdHlwZSBwYXJhbWV0ZXIuCgogICAgTnVsbGFiaWxpdHkgbGhzTnVsbGFiaWxpdHk7CgogICAgLy8gSWYgdGhlIG51bGxhYmlsaXR5IGlzIGRlY2xhcmVkIGV4cGxpY2l0bHksIHVzZSBpdCBhcyB0aGUgbnVsbGFiaWxpdHkgb2YKICAgIC8vIHRoZSBMSFMgb2YgdGhlIGludGVyc2VjdGlvbi4gIE90aGVyd2lzZSwgY29tcHV0ZSBpdCBmcm9tIHRoZSBib3VuZC4KICAgIGlmIChkZWNsYXJlZE51bGxhYmlsaXR5ICE9IG51bGwpIHsKICAgICAgbGhzTnVsbGFiaWxpdHkgPSBkZWNsYXJlZE51bGxhYmlsaXR5OwogICAgfSBlbHNlIHsKICAgICAgbGhzTnVsbGFiaWxpdHkgPSBjb21wdXRlTnVsbGFiaWxpdHlGcm9tQm91bmQocGFyYW1ldGVyKTsKICAgIH0KICAgIGlmIChwcm9tb3RlZEJvdW5kID09IG51bGwpIHsKICAgICAgcmV0dXJuIGxoc051bGxhYmlsaXR5OwogICAgfQoKICAgIC8vIEluIHByYWN0aWNlIGEgdHlwZSBwYXJhbWV0ZXIgb2YgbGVnYWN5IHR5cGUgY2FuIG9ubHkgYmUgdXNlZCBpbiB0eXBlCiAgICAvLyBhbm5vdGF0aW9ucyB3aXRoaW4gdGhlIGNvcnJlc3BvbmRpbmcgY2xhc3MgZGVjbGFyYXRpb24uICBJZiBpdCdzIGxlZ2FjeSwKICAgIC8vIHRoZW4gdGhlIGVudGlyZSBsaWJyYXJ5IGNvbnRhaW5pbmcgdGhlIGNsYXNzIGlzIG9wdC1vdXQsIGFuZCBhbnkgUkhTIGlzCiAgICAvLyBkZWVtZWQgdG8gYmUgbGVnYWN5IHRvby4gIFNvLCBpdCdzIG5lY2Vzc2FyeSB0byBvbmx5IGNoZWNrIExIUyBmb3IgYmVpbmcKICAgIC8vIGxlZ2FjeS4KICAgIGlmIChsaHNOdWxsYWJpbGl0eSA9PSBOdWxsYWJpbGl0eS5sZWdhY3kpIHsKICAgICAgcmV0dXJuIE51bGxhYmlsaXR5LmxlZ2FjeTsKICAgIH0KCiAgICAvLyBJbnRlcnNlY3Rpb24gaXMgbm9uLW51bGxhYmxlIGlmIGFuZCBvbmx5IGlmIFJIUyBpcyBub24tbnVsbGFibGUuCiAgICAvLwogICAgLy8gVGhlIHByb29mIGlzIGFzIGZvbGxvd3MuICBJbnRlcnNlY3Rpb24gaXMgbm9uLW51bGxhYmxlIGlmIGF0IGxlYXN0IG9uZSBvZgogICAgLy8gTEhTIG9yIFJIUyBpcyBub24tbnVsbGFibGUuICBUaGUgY2FzZSBvZiBub24tbnVsbGFibGUgUkhTIGlzIHRyaXZpYWwuICBJbgogICAgLy8gdGhlIGNhc2Ugb2Ygbm9uLW51bGxhYmxlIExIUywgaXRzIGJvdW5kIHNob3VsZCBiZSBub24tbnVsbGFibGUuICBSSFMgaXMKICAgIC8vIGtub3duIHRvIGFsd2F5cyBiZSBhIHN1YnR5cGUgb2YgdGhlIGJvdW5kIG9mIExIUzsgdGhlcmVmb3JlLCBSSFMgaXMKICAgIC8vIG5vbi1udWxsYWJsZS4KICAgIC8vCiAgICAvLyBOb3RlIHRoYXQgaXQgYWxzbyBmb2xsb3dzIGZyb20gdGhlIGFib3ZlIHRoYXQgbm9uLW51bGxhYmxlIFJIUyBpbXBsaWVzCiAgICAvLyBub24tbnVsbGFibGUgTEhTLCBzbyB0aGUgY2hlY2sgYmVsb3cgY292ZXJzIHRoZSBjYXNlIGxoc051bGxhYmlsaXR5ID09CiAgICAvLyBOdWxsYWJpbGl0eS5ub25OdWxsYWJsZS4KICAgIGlmIChwcm9tb3RlZEJvdW5kLm51bGxhYmlsaXR5ID09IE51bGxhYmlsaXR5Lm5vbk51bGxhYmxlKSB7CiAgICAgIHJldHVybiBOdWxsYWJpbGl0eS5ub25OdWxsYWJsZTsKICAgIH0KCiAgICAvLyBJZiB0aGUgbnVsbGFiaWxpdHkgb2YgTEhTIGlzICduZWl0aGVyLCcgdGhlIG51bGxhYmlsaXR5IG9mIHRoZQogICAgLy8gaW50ZXJzZWN0aW9uIGlzIGFsc28gJ25laXRoZXInIGlmIFJIUyBpcyAnbmVpdGhlcicgb3IgbnVsbGFibGUuCiAgICAvLwogICAgLy8gQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlOgogICAgLy8KICAgIC8vICAgICBjbGFzcyBBPFggZXh0ZW5kcyBPYmplY3Q/LCBZIGV4dGVuZHMgWD4gewogICAgLy8gICAgICAgZm9vKFggeCkgewogICAgLy8gICAgICAgICBpZiAoeCBpcyBZKSB7CiAgICAvLyAgICAgICAgICAgeCA9IG51bGw7ICAgICAvLyBDb21waWxlLXRpbWUgZXJyb3IuICBDb25zaWRlciBYID0gWSA9IGludC4KICAgIC8vICAgICAgICAgICBPYmplY3QgYSA9IHg7IC8vIENvbXBpbGUtdGltZSBlcnJvci4gIENvbnNpZGVyIFggPSBZID0gaW50Py4KICAgIC8vICAgICAgICAgfQogICAgLy8gICAgICAgICBpZiAoeCBpcyBpbnQ/KSB7CiAgICAvLyAgICAgICAgICAgeCA9IG51bGw7ICAgICAvLyBDb21waWxlLXRpbWUgZXJyb3IuICBDb25zaWRlciBYID0gaW50LgogICAgLy8gICAgICAgICAgIE9iamVjdCBiID0geDsgLy8gQ29tcGlsZS10aW1lIGVycm9yLiAgQ29uc2lkZXIgWCA9IGludD8uCiAgICAvLyAgICAgICAgIH0KICAgIC8vICAgICAgIH0KICAgIC8vICAgICB9CiAgICAvLwogICAgLy8gTm90ZSB0aGF0IFJIUyBjYW4ndCBiZSAnbGVnYWN5JyBvciBub24tbnVsbGFibGUgYXQgdGhpcyBwb2ludCBkdWUgdG8gdGhlCiAgICAvLyBjaGVja3MgYWJvdmUuCiAgICBpZiAobGhzTnVsbGFiaWxpdHkgPT0gTnVsbGFiaWxpdHkubmVpdGhlcikgewogICAgICByZXR1cm4gTnVsbGFiaWxpdHkubmVpdGhlcjsKICAgIH0KCiAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBvbmx5IHBvc3NpYmlsaXR5IGZvciBMSFMgaXMgdG8gYmUgbnVsbGFibGUsIGFuZCBmb3IgUkhTCiAgICAvLyBpcyB0byBiZSBlaXRoZXIgbnVsbGFibGUgb3IgbGVnYWN5LiAgQm90aCBjb21iaW5hdGlvbnMgZm9yIExIUyBhbmQgUkhTCiAgICAvLyBzaG91bGQgeWllbGQgdGhlIG51bGxhYmlsaXR5IG9mIFJIUyBhcyB0aGUgbnVsbGFiaWxpdHkgZm9yIHRoZQogICAgLy8gaW50ZXJzZWN0aW9uLiAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBjb2RlIGZvciBjbGFyaWZpY2F0aW9uOgogICAgLy8KICAgIC8vICAgY2xhc3MgQTxYIGV4dGVuZHMgT2JqZWN0PywgWSBleHRlbmRzIFg+IHsKICAgIC8vICAgICBmb28oWD8geCkgewogICAgLy8gICAgICAgaWYgKHggaXMgWSkgewogICAgLy8gICAgICAgICB4ID0gbnVsbDsgICAgIC8vIENvbXBpbGUtdGltZSBlcnJvci4gIENvbnNpZGVyIFggPSBZID0gaW50LgogICAgLy8gICAgICAgICBPYmplY3QgYSA9IHg7IC8vIENvbXBpbGUtdGltZSBlcnJvci4gIENvbnNpZGVyIFggPSBZID0gaW50Py4KICAgIC8vICAgICAgIH0KICAgIC8vICAgICAgIGlmICh4IGlzIGludD8pIHsKICAgIC8vICAgICAgICAgeCA9IG51bGw7ICAgICAvLyBPay4gIEJvdGggWD8gYW5kIGludD8gYXJlIG51bGxhYmxlLgogICAgLy8gICAgICAgfQogICAgLy8gICAgIH0KICAgIC8vICAgfQogICAgcmV0dXJuIHByb21vdGVkQm91bmQubnVsbGFiaWxpdHk7CiAgfQp9CgovLy8gRGVjbGFyYXRpb24gb2YgYSB0eXBlIHZhcmlhYmxlLgovLy8KLy8vIFR5cGUgcGFyYW1ldGVycyBkZWNsYXJlZCBpbiBhIFtDbGFzc10gb3IgW0Z1bmN0aW9uTm9kZV0gYXJlIHBhcnQgb2YgdGhlIEFTVCwKLy8vIGhhdmUgYSBwYXJlbnQgcG9pbnRlciB0byBpdHMgZGVjbGFyaW5nIGNsYXNzIG9yIGZ1bmN0aW9uLCBhbmQgd2lsbCBiZSBzZWVuCi8vLyBieSB0cmVlIHZpc2l0b3JzLgovLy8KLy8vIFR5cGUgcGFyYW1ldGVycyBkZWNsYXJlZCBieSBhIFtGdW5jdGlvblR5cGVdIGFyZSBvcnBoYW5zIGFuZCBoYXZlIGEgYG51bGxgCi8vLyBwYXJlbnQgcG9pbnRlci4gIFtUeXBlUGFyYW1ldGVyXSBvYmplY3RzIHNob3VsZCBub3QgYmUgc2hhcmVkIGJldHdlZW4KLy8vIGRpZmZlcmVudCBbRnVuY3Rpb25UeXBlXSBvYmplY3RzLgpjbGFzcyBUeXBlUGFyYW1ldGVyIGV4dGVuZHMgVHJlZU5vZGUgewogIGludCBmbGFncyA9IDA7CgogIC8vLyBMaXN0IG9mIG1ldGFkYXRhIGFubm90YXRpb25zIG9uIHRoZSB0eXBlIHBhcmFtZXRlci4KICAvLy8KICAvLy8gVGhpcyBkZWZhdWx0cyB0byBhbiBpbW11dGFibGUgZW1wdHkgbGlzdC4gVXNlIFthZGRBbm5vdGF0aW9uXSB0byBhZGQKICAvLy8gYW5ub3RhdGlvbnMgaWYgbmVlZGVkLgogIExpc3Q8RXhwcmVzc2lvbj4gYW5ub3RhdGlvbnMgPSBjb25zdCA8RXhwcmVzc2lvbj5bXTsKCiAgU3RyaW5nIG5hbWU7IC8vIENvc21ldGljIG5hbWUuCgogIC8vLyBUaGUgYm91bmQgb24gdGhlIHR5cGUgdmFyaWFibGUuCiAgLy8vCiAgLy8vIFNob3VsZCBub3QgYmUgbnVsbCBleGNlcHQgdGVtcG9yYXJpbHkgZHVyaW5nIElSIGNvbnN0cnVjdGlvbi4gIFNob3VsZAogIC8vLyBiZSBzZXQgdG8gdGhlIHJvb3QgY2xhc3MgZm9yIHR5cGUgcGFyYW1ldGVycyB3aXRob3V0IGFuIGV4cGxpY2l0IGJvdW5kLgogIERhcnRUeXBlIGJvdW5kOwoKICAvLy8gVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHR5cGUgdmFyaWFibGUuIEl0IGlzIHVzZWQgdG8gcHJvdmlkZSB0aGUKICAvLy8gY29ycmVzcG9uZGluZyBtaXNzaW5nIHR5cGUgYXJndW1lbnQgaW4gdHlwZSBhbm5vdGF0aW9ucyBhbmQgYXMgdGhlCiAgLy8vIGZhbGwtYmFjayB0eXBlIHZhbHVlIGluIHR5cGUgaW5mZXJlbmNlIGF0IGNvbXBpbGUgdGltZS4gQXQgcnVuIHRpbWUsCiAgLy8vIFtkZWZhdWx0VHlwZV0gaXMgdXNlZCBieSB0aGUgYmFja2VuZHMgaW4gcGxhY2Ugb2YgdGhlIG1pc3NpbmcgdHlwZQogIC8vLyBhcmd1bWVudCBvZiBhIGR5bmFtaWMgaW52b2NhdGlvbiBvZiBhIGdlbmVyaWMgZnVuY3Rpb24uCiAgRGFydFR5cGUgZGVmYXVsdFR5cGU7CgogIFR5cGVQYXJhbWV0ZXIoW3RoaXMubmFtZSwgdGhpcy5ib3VuZCwgdGhpcy5kZWZhdWx0VHlwZV0pOwoKICAvLyBNdXN0IG1hdGNoIHNlcmlhbGl6ZWQgYml0IHBvc2l0aW9ucy4KICBzdGF0aWMgY29uc3QgaW50IEZsYWdHZW5lcmljQ292YXJpYW50SW1wbCA9IDEgPDwgMDsKCiAgLy8vIElmIHRoaXMgW1R5cGVQYXJhbWV0ZXJdIGlzIGEgdHlwZSBwYXJhbWV0ZXIgb2YgYSBnZW5lcmljIG1ldGhvZCwgaW5kaWNhdGVzCiAgLy8vIHdoZXRoZXIgdGhlIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBuZWVkcyB0byBjb250YWluIGEgcnVudGltZSB0eXBlIGNoZWNrIHRvCiAgLy8vIGRlYWwgd2l0aCBnZW5lcmljIGNvdmFyaWFuY2UuCiAgLy8vCiAgLy8vIFdoZW4gYHRydWVgLCBydW50aW1lIGNoZWNrcyBtYXkgbmVlZCB0byBiZSBwZXJmb3JtZWQ7IHNlZQogIC8vLyBbRGlzcGF0Y2hDYXRlZ29yeV0gZm9yIGRldGFpbHMuCiAgYm9vbCBnZXQgaXNHZW5lcmljQ292YXJpYW50SW1wbCA9PiBmbGFncyAmIEZsYWdHZW5lcmljQ292YXJpYW50SW1wbCAhPSAwOwoKICB2b2lkIHNldCBpc0dlbmVyaWNDb3ZhcmlhbnRJbXBsKGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUKICAgICAgICA/IChmbGFncyB8IEZsYWdHZW5lcmljQ292YXJpYW50SW1wbCkKICAgICAgICA6IChmbGFncyAmIH5GbGFnR2VuZXJpY0NvdmFyaWFudEltcGwpOwogIH0KCiAgdm9pZCBhZGRBbm5vdGF0aW9uKEV4cHJlc3Npb24gYW5ub3RhdGlvbikgewogICAgaWYgKGFubm90YXRpb25zLmlzRW1wdHkpIHsKICAgICAgYW5ub3RhdGlvbnMgPSA8RXhwcmVzc2lvbj5bXTsKICAgIH0KICAgIGFubm90YXRpb25zLmFkZChhbm5vdGF0aW9uLi5wYXJlbnQgPSB0aGlzKTsKICB9CgogIGFjY2VwdChUcmVlVmlzaXRvciB2KSA9PiB2LnZpc2l0VHlwZVBhcmFtZXRlcih0aGlzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZpc2l0TGlzdChhbm5vdGF0aW9ucywgdik7CiAgICBib3VuZC5hY2NlcHQodik7CiAgICBkZWZhdWx0VHlwZT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgdHJhbnNmb3JtTGlzdChhbm5vdGF0aW9ucywgdiwgdGhpcyk7CiAgICBib3VuZCA9IHYudmlzaXREYXJ0VHlwZShib3VuZCk7CiAgICBpZiAoZGVmYXVsdFR5cGUgIT0gbnVsbCkgewogICAgICBkZWZhdWx0VHlwZSA9IHYudmlzaXREYXJ0VHlwZShkZWZhdWx0VHlwZSk7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyBhIHBvc3NpYmx5IHN5bnRoZXNpemVkIG5hbWUgZm9yIHRoaXMgdHlwZSBwYXJhbWV0ZXIsIGNvbnNpc3RlbnQKICAvLy8gd2l0aCB0aGUgbmFtZXMgdXNlZCBhY3Jvc3MgYWxsIFt0b1N0cmluZ10gY2FsbHMuCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gZGVidWdRdWFsaWZpZWRUeXBlUGFyYW1ldGVyTmFtZSh0aGlzKTsKCiAgYm9vbCBnZXQgaXNGdW5jdGlvblR5cGVUeXBlUGFyYW1ldGVyID0+IHBhcmVudCA9PSBudWxsOwp9CgpjbGFzcyBTdXBlcnR5cGUgZXh0ZW5kcyBOb2RlIHsKICBSZWZlcmVuY2UgY2xhc3NOYW1lOwogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CgogIFN1cGVydHlwZShDbGFzcyBjbGFzc05vZGUsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMpCiAgICAgIDogdGhpcy5ieVJlZmVyZW5jZShnZXRDbGFzc1JlZmVyZW5jZShjbGFzc05vZGUpLCB0eXBlQXJndW1lbnRzKTsKCiAgU3VwZXJ0eXBlLmJ5UmVmZXJlbmNlKHRoaXMuY2xhc3NOYW1lLCB0aGlzLnR5cGVBcmd1bWVudHMpOwoKICBDbGFzcyBnZXQgY2xhc3NOb2RlID0+IGNsYXNzTmFtZS5hc0NsYXNzOwoKICBhY2NlcHQoVmlzaXRvciB2KSA9PiB2LnZpc2l0U3VwZXJ0eXBlKHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgY2xhc3NOb2RlLmFjY2VwdFJlZmVyZW5jZSh2KTsKICAgIHZpc2l0TGlzdCh0eXBlQXJndW1lbnRzLCB2KTsKICB9CgogIEludGVyZmFjZVR5cGUgZ2V0IGFzSW50ZXJmYWNlVHlwZSB7CiAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUoY2xhc3NOb2RlLCB0eXBlQXJndW1lbnRzKTsKICB9CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMgU3VwZXJ0eXBlKSB7CiAgICAgIGlmIChjbGFzc05hbWUgIT0gb3RoZXIuY2xhc3NOYW1lKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmICh0eXBlQXJndW1lbnRzLmxlbmd0aCAhPSBvdGhlci50eXBlQXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgICBpZiAodHlwZUFyZ3VtZW50c1tpXSAhPSBvdGhlci50eXBlQXJndW1lbnRzW2ldKSByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIGludCBoYXNoID0gMHgzZmZmZmZmZiAmIGNsYXNzTmFtZS5oYXNoQ29kZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZUFyZ3VtZW50cy5sZW5ndGg7ICsraSkgewogICAgICBoYXNoID0gMHgzZmZmZmZmZiAmIChoYXNoICogMzEgKyAoaGFzaCBeIHR5cGVBcmd1bWVudHNbaV0uaGFzaENvZGUpKTsKICAgIH0KICAgIHJldHVybiBoYXNoOwogIH0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVEFOVFMKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgphYnN0cmFjdCBjbGFzcyBDb25zdGFudCBleHRlbmRzIE5vZGUgewogIC8vLyBDYWxscyB0aGUgYHZpc2l0KkNvbnN0YW50UmVmZXJlbmNlKClgIG1ldGhvZCBvbiB2aXNpdG9yIFt2XSBmb3IgYWxsCiAgLy8vIGNvbnN0YW50cyByZWZlcmVuY2VkIGluIHRoaXMgY29uc3RhbnQuCiAgLy8vCiAgLy8vIChOb3RlIHRoYXQgYSBjb25zdGFudCBjYW4gYmUgc2VlbiBhcyBhIERBRyAoZGlyZWN0ZWQgYWN5Y2xpYyBncmFwaCkgYW5kCiAgLy8vICBub3QgYSB0cmVlISkKICB2aXNpdENoaWxkcmVuKFZpc2l0b3Igdik7CgogIC8vLyBDYWxscyB0aGUgYHZpc2l0KkNvbnN0YW50KClgIG1ldGhvZCBvbiB0aGUgdmlzaXRvciBbdl0uCiAgYWNjZXB0KENvbnN0YW50VmlzaXRvciB2KTsKCiAgLy8vIENhbGxzIHRoZSBgdmlzaXQqQ29uc3RhbnRSZWZlcmVuY2UoKWAgbWV0aG9kIG9uIHRoZSB2aXNpdG9yIFt2XS4KICBhY2NlcHRSZWZlcmVuY2UoVmlzaXRvciB2KTsKCiAgLy8vIFRoZSBLZXJuZWwgQVNUIHdpbGwgcmVmZXJlbmNlIFtDb25zdGFudF1zIHZpYSBbQ29uc3RhbnRFeHByZXNzaW9uXXMuICBUaGUKICAvLy8gY29uc3RhbnRzIGFyZSBub3QgcmVxdWlyZWQgdG8gYmUgY2Fub25pY2FsaXplZCwgYnV0IHRoZXkgaGF2ZSB0byBiZSBkZWVwbHkKICAvLy8gY29tcGFyYWJsZSB2aWEgaGFzaENvZGUvPT0hCiAgaW50IGdldCBoYXNoQ29kZTsKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcik7CgogIC8vLyBHZXRzIHRoZSB0eXBlIG9mIHRoaXMgY29uc3RhbnQuCiAgRGFydFR5cGUgZ2V0VHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpOwoKICBFeHByZXNzaW9uIGFzRXhwcmVzc2lvbigpIHsKICAgIHJldHVybiBuZXcgQ29uc3RhbnRFeHByZXNzaW9uKHRoaXMpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgUHJpbWl0aXZlQ29uc3RhbnQ8VD4gZXh0ZW5kcyBDb25zdGFudCB7CiAgZmluYWwgVCB2YWx1ZTsKCiAgUHJpbWl0aXZlQ29uc3RhbnQodGhpcy52YWx1ZSk7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICckdmFsdWUnOwoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHZhbHVlLmhhc2hDb2RlOwoKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgPT4KICAgICAgb3RoZXIgaXMgUHJpbWl0aXZlQ29uc3RhbnQ8VD4gJiYgb3RoZXIudmFsdWUgPT0gdmFsdWU7Cn0KCmNsYXNzIE51bGxDb25zdGFudCBleHRlbmRzIFByaW1pdGl2ZUNvbnN0YW50PE51bGw+IHsKICBOdWxsQ29uc3RhbnQoKSA6IHN1cGVyKG51bGwpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3Igdikge30KICBhY2NlcHQoQ29uc3RhbnRWaXNpdG9yIHYpID0+IHYudmlzaXROdWxsQ29uc3RhbnQodGhpcyk7CiAgYWNjZXB0UmVmZXJlbmNlKFZpc2l0b3IgdikgPT4gdi52aXNpdE51bGxDb25zdGFudFJlZmVyZW5jZSh0aGlzKTsKCiAgRGFydFR5cGUgZ2V0VHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHR5cGVzLm51bGxUeXBlOwp9CgpjbGFzcyBCb29sQ29uc3RhbnQgZXh0ZW5kcyBQcmltaXRpdmVDb25zdGFudDxib29sPiB7CiAgQm9vbENvbnN0YW50KGJvb2wgdmFsdWUpIDogc3VwZXIodmFsdWUpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3Igdikge30KICBhY2NlcHQoQ29uc3RhbnRWaXNpdG9yIHYpID0+IHYudmlzaXRCb29sQ29uc3RhbnQodGhpcyk7CiAgYWNjZXB0UmVmZXJlbmNlKFZpc2l0b3IgdikgPT4gdi52aXNpdEJvb2xDb25zdGFudFJlZmVyZW5jZSh0aGlzKTsKCiAgRGFydFR5cGUgZ2V0VHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHR5cGVzLmJvb2xUeXBlOwp9CgpjbGFzcyBJbnRDb25zdGFudCBleHRlbmRzIFByaW1pdGl2ZUNvbnN0YW50PGludD4gewogIEludENvbnN0YW50KGludCB2YWx1ZSkgOiBzdXBlcih2YWx1ZSk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7fQogIGFjY2VwdChDb25zdGFudFZpc2l0b3IgdikgPT4gdi52aXNpdEludENvbnN0YW50KHRoaXMpOwogIGFjY2VwdFJlZmVyZW5jZShWaXNpdG9yIHYpID0+IHYudmlzaXRJbnRDb25zdGFudFJlZmVyZW5jZSh0aGlzKTsKCiAgRGFydFR5cGUgZ2V0VHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHR5cGVzLmludFR5cGU7Cn0KCmNsYXNzIERvdWJsZUNvbnN0YW50IGV4dGVuZHMgUHJpbWl0aXZlQ29uc3RhbnQ8ZG91YmxlPiB7CiAgRG91YmxlQ29uc3RhbnQoZG91YmxlIHZhbHVlKSA6IHN1cGVyKHZhbHVlKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHt9CiAgYWNjZXB0KENvbnN0YW50VmlzaXRvciB2KSA9PiB2LnZpc2l0RG91YmxlQ29uc3RhbnQodGhpcyk7CiAgYWNjZXB0UmVmZXJlbmNlKFZpc2l0b3IgdikgPT4gdi52aXNpdERvdWJsZUNvbnN0YW50UmVmZXJlbmNlKHRoaXMpOwoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHZhbHVlLmlzTmFOID8gMTk5IDogc3VwZXIuaGFzaENvZGU7CiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpID0+CiAgICAgIG90aGVyIGlzIERvdWJsZUNvbnN0YW50ICYmIGlkZW50aWNhbCh2YWx1ZSwgb3RoZXIudmFsdWUpOwoKICBEYXJ0VHlwZSBnZXRUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdHlwZXMuZG91YmxlVHlwZTsKfQoKY2xhc3MgU3RyaW5nQ29uc3RhbnQgZXh0ZW5kcyBQcmltaXRpdmVDb25zdGFudDxTdHJpbmc+IHsKICBTdHJpbmdDb25zdGFudChTdHJpbmcgdmFsdWUpIDogc3VwZXIodmFsdWUpIHsKICAgIGFzc2VydCh2YWx1ZSAhPSBudWxsKTsKICB9CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7fQogIGFjY2VwdChDb25zdGFudFZpc2l0b3IgdikgPT4gdi52aXNpdFN0cmluZ0NvbnN0YW50KHRoaXMpOwogIGFjY2VwdFJlZmVyZW5jZShWaXNpdG9yIHYpID0+IHYudmlzaXRTdHJpbmdDb25zdGFudFJlZmVyZW5jZSh0aGlzKTsKCiAgRGFydFR5cGUgZ2V0VHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHR5cGVzLnN0cmluZ1R5cGU7Cn0KCmNsYXNzIFN5bWJvbENvbnN0YW50IGV4dGVuZHMgQ29uc3RhbnQgewogIGZpbmFsIFN0cmluZyBuYW1lOwogIGZpbmFsIFJlZmVyZW5jZSBsaWJyYXJ5UmVmZXJlbmNlOwoKICBTeW1ib2xDb25zdGFudCh0aGlzLm5hbWUsIHRoaXMubGlicmFyeVJlZmVyZW5jZSk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7fQoKICBhY2NlcHQoQ29uc3RhbnRWaXNpdG9yIHYpID0+IHYudmlzaXRTeW1ib2xDb25zdGFudCh0aGlzKTsKICBhY2NlcHRSZWZlcmVuY2UoVmlzaXRvciB2KSA9PiB2LnZpc2l0U3ltYm9sQ29uc3RhbnRSZWZlcmVuY2UodGhpcyk7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiBsaWJyYXJ5UmVmZXJlbmNlICE9IG51bGwKICAgICAgICA/ICcjJHtsaWJyYXJ5UmVmZXJlbmNlLmFzTGlicmFyeS5pbXBvcnRVcml9OjokbmFtZScKICAgICAgICA6ICcjJG5hbWUnOwogIH0KCiAgaW50IGdldCBoYXNoQ29kZSA9PiBfSGFzaC5oYXNoMihuYW1lLCBsaWJyYXJ5UmVmZXJlbmNlKTsKCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpID0+CiAgICAgIGlkZW50aWNhbCh0aGlzLCBvdGhlcikgfHwKICAgICAgKG90aGVyIGlzIFN5bWJvbENvbnN0YW50ICYmCiAgICAgICAgICBvdGhlci5uYW1lID09IG5hbWUgJiYKICAgICAgICAgIG90aGVyLmxpYnJhcnlSZWZlcmVuY2UgPT0gbGlicmFyeVJlZmVyZW5jZSk7CgogIERhcnRUeXBlIGdldFR5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiB0eXBlcy5zeW1ib2xUeXBlOwp9CgpjbGFzcyBNYXBDb25zdGFudCBleHRlbmRzIENvbnN0YW50IHsKICBmaW5hbCBEYXJ0VHlwZSBrZXlUeXBlOwogIGZpbmFsIERhcnRUeXBlIHZhbHVlVHlwZTsKICBmaW5hbCBMaXN0PENvbnN0YW50TWFwRW50cnk+IGVudHJpZXM7CgogIE1hcENvbnN0YW50KHRoaXMua2V5VHlwZSwgdGhpcy52YWx1ZVR5cGUsIHRoaXMuZW50cmllcyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBrZXlUeXBlLmFjY2VwdCh2KTsKICAgIHZhbHVlVHlwZS5hY2NlcHQodik7CiAgICBmb3IgKGZpbmFsIENvbnN0YW50TWFwRW50cnkgZW50cnkgaW4gZW50cmllcykgewogICAgICBlbnRyeS5rZXkuYWNjZXB0UmVmZXJlbmNlKHYpOwogICAgICBlbnRyeS52YWx1ZS5hY2NlcHRSZWZlcmVuY2Uodik7CiAgICB9CiAgfQoKICBhY2NlcHQoQ29uc3RhbnRWaXNpdG9yIHYpID0+IHYudmlzaXRNYXBDb25zdGFudCh0aGlzKTsKICBhY2NlcHRSZWZlcmVuY2UoVmlzaXRvciB2KSA9PiB2LnZpc2l0TWFwQ29uc3RhbnRSZWZlcmVuY2UodGhpcyk7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICcke3RoaXMucnVudGltZVR5cGV9PCRrZXlUeXBlLCAkdmFsdWVUeXBlPigkZW50cmllcyknOwoKICBpbnQgX2NhY2hlZEhhc2hDb2RlOwogIGludCBnZXQgaGFzaENvZGUgewogICAgcmV0dXJuIF9jYWNoZWRIYXNoQ29kZSA/Pz0gX0hhc2guY29tYmluZTJGaW5pc2goCiAgICAgICAga2V5VHlwZS5oYXNoQ29kZSwgdmFsdWVUeXBlLmhhc2hDb2RlLCBfSGFzaC5jb21iaW5lTGlzdEhhc2goZW50cmllcykpOwogIH0KCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpID0+CiAgICAgIGlkZW50aWNhbCh0aGlzLCBvdGhlcikgfHwKICAgICAgKG90aGVyIGlzIE1hcENvbnN0YW50ICYmCiAgICAgICAgICBvdGhlci5rZXlUeXBlID09IGtleVR5cGUgJiYKICAgICAgICAgIG90aGVyLnZhbHVlVHlwZSA9PSB2YWx1ZVR5cGUgJiYKICAgICAgICAgIGxpc3RFcXVhbHMob3RoZXIuZW50cmllcywgZW50cmllcykpOwoKICBEYXJ0VHlwZSBnZXRUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4KICAgICAgdHlwZXMubGl0ZXJhbE1hcFR5cGUoa2V5VHlwZSwgdmFsdWVUeXBlKTsKfQoKY2xhc3MgQ29uc3RhbnRNYXBFbnRyeSB7CiAgZmluYWwgQ29uc3RhbnQga2V5OwogIGZpbmFsIENvbnN0YW50IHZhbHVlOwogIENvbnN0YW50TWFwRW50cnkodGhpcy5rZXksIHRoaXMudmFsdWUpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJGtleTogJHZhbHVlJzsKCiAgaW50IGdldCBoYXNoQ29kZSA9PiBfSGFzaC5oYXNoMihrZXksIHZhbHVlKTsKCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpID0+CiAgICAgIG90aGVyIGlzIENvbnN0YW50TWFwRW50cnkgJiYgb3RoZXIua2V5ID09IGtleSAmJiBvdGhlci52YWx1ZSA9PSB2YWx1ZTsKfQoKY2xhc3MgTGlzdENvbnN0YW50IGV4dGVuZHMgQ29uc3RhbnQgewogIGZpbmFsIERhcnRUeXBlIHR5cGVBcmd1bWVudDsKICBmaW5hbCBMaXN0PENvbnN0YW50PiBlbnRyaWVzOwoKICBMaXN0Q29uc3RhbnQodGhpcy50eXBlQXJndW1lbnQsIHRoaXMuZW50cmllcyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB0eXBlQXJndW1lbnQuYWNjZXB0KHYpOwogICAgZm9yIChmaW5hbCBDb25zdGFudCBjb25zdGFudCBpbiBlbnRyaWVzKSB7CiAgICAgIGNvbnN0YW50LmFjY2VwdFJlZmVyZW5jZSh2KTsKICAgIH0KICB9CgogIGFjY2VwdChDb25zdGFudFZpc2l0b3IgdikgPT4gdi52aXNpdExpc3RDb25zdGFudCh0aGlzKTsKICBhY2NlcHRSZWZlcmVuY2UoVmlzaXRvciB2KSA9PiB2LnZpc2l0TGlzdENvbnN0YW50UmVmZXJlbmNlKHRoaXMpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJHt0aGlzLnJ1bnRpbWVUeXBlfTwkdHlwZUFyZ3VtZW50PigkZW50cmllcyknOwoKICBpbnQgX2NhY2hlZEhhc2hDb2RlOwogIGludCBnZXQgaGFzaENvZGUgewogICAgcmV0dXJuIF9jYWNoZWRIYXNoQ29kZSA/Pz0gX0hhc2guY29tYmluZUZpbmlzaCgKICAgICAgICB0eXBlQXJndW1lbnQuaGFzaENvZGUsIF9IYXNoLmNvbWJpbmVMaXN0SGFzaChlbnRyaWVzKSk7CiAgfQoKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgPT4KICAgICAgaWRlbnRpY2FsKHRoaXMsIG90aGVyKSB8fAogICAgICAob3RoZXIgaXMgTGlzdENvbnN0YW50ICYmCiAgICAgICAgICBvdGhlci50eXBlQXJndW1lbnQgPT0gdHlwZUFyZ3VtZW50ICYmCiAgICAgICAgICBsaXN0RXF1YWxzKG90aGVyLmVudHJpZXMsIGVudHJpZXMpKTsKCiAgRGFydFR5cGUgZ2V0VHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+CiAgICAgIHR5cGVzLmxpdGVyYWxMaXN0VHlwZSh0eXBlQXJndW1lbnQpOwp9CgpjbGFzcyBTZXRDb25zdGFudCBleHRlbmRzIENvbnN0YW50IHsKICBmaW5hbCBEYXJ0VHlwZSB0eXBlQXJndW1lbnQ7CiAgZmluYWwgTGlzdDxDb25zdGFudD4gZW50cmllczsKCiAgU2V0Q29uc3RhbnQodGhpcy50eXBlQXJndW1lbnQsIHRoaXMuZW50cmllcyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB0eXBlQXJndW1lbnQuYWNjZXB0KHYpOwogICAgZm9yIChmaW5hbCBDb25zdGFudCBjb25zdGFudCBpbiBlbnRyaWVzKSB7CiAgICAgIGNvbnN0YW50LmFjY2VwdFJlZmVyZW5jZSh2KTsKICAgIH0KICB9CgogIGFjY2VwdChDb25zdGFudFZpc2l0b3IgdikgPT4gdi52aXNpdFNldENvbnN0YW50KHRoaXMpOwogIGFjY2VwdFJlZmVyZW5jZShWaXNpdG9yIHYpID0+IHYudmlzaXRTZXRDb25zdGFudFJlZmVyZW5jZSh0aGlzKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyR7dGhpcy5ydW50aW1lVHlwZX08JHR5cGVBcmd1bWVudD4oJGVudHJpZXMpJzsKCiAgaW50IF9jYWNoZWRIYXNoQ29kZTsKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiBfY2FjaGVkSGFzaENvZGUgPz89IF9IYXNoLmNvbWJpbmVGaW5pc2goCiAgICAgICAgdHlwZUFyZ3VtZW50Lmhhc2hDb2RlLCBfSGFzaC5jb21iaW5lTGlzdEhhc2goZW50cmllcykpOwogIH0KCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpID0+CiAgICAgIGlkZW50aWNhbCh0aGlzLCBvdGhlcikgfHwKICAgICAgKG90aGVyIGlzIFNldENvbnN0YW50ICYmCiAgICAgICAgICBvdGhlci50eXBlQXJndW1lbnQgPT0gdHlwZUFyZ3VtZW50ICYmCiAgICAgICAgICBsaXN0RXF1YWxzKG90aGVyLmVudHJpZXMsIGVudHJpZXMpKTsKCiAgRGFydFR5cGUgZ2V0VHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHR5cGVzLmxpdGVyYWxTZXRUeXBlKHR5cGVBcmd1bWVudCk7Cn0KCmNsYXNzIEluc3RhbmNlQ29uc3RhbnQgZXh0ZW5kcyBDb25zdGFudCB7CiAgZmluYWwgUmVmZXJlbmNlIGNsYXNzUmVmZXJlbmNlOwogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CiAgZmluYWwgTWFwPFJlZmVyZW5jZSwgQ29uc3RhbnQ+IGZpZWxkVmFsdWVzOwoKICBJbnN0YW5jZUNvbnN0YW50KHRoaXMuY2xhc3NSZWZlcmVuY2UsIHRoaXMudHlwZUFyZ3VtZW50cywgdGhpcy5maWVsZFZhbHVlcyk7CgogIENsYXNzIGdldCBjbGFzc05vZGUgPT4gY2xhc3NSZWZlcmVuY2UuYXNDbGFzczsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGNsYXNzUmVmZXJlbmNlLmFzQ2xhc3MuYWNjZXB0UmVmZXJlbmNlKHYpOwogICAgdmlzaXRMaXN0KHR5cGVBcmd1bWVudHMsIHYpOwogICAgZm9yIChmaW5hbCBSZWZlcmVuY2UgcmVmZXJlbmNlIGluIGZpZWxkVmFsdWVzLmtleXMpIHsKICAgICAgcmVmZXJlbmNlLmFzRmllbGQuYWNjZXB0UmVmZXJlbmNlKHYpOwogICAgfQogICAgZm9yIChmaW5hbCBDb25zdGFudCBjb25zdGFudCBpbiBmaWVsZFZhbHVlcy52YWx1ZXMpIHsKICAgICAgY29uc3RhbnQuYWNjZXB0UmVmZXJlbmNlKHYpOwogICAgfQogIH0KCiAgYWNjZXB0KENvbnN0YW50VmlzaXRvciB2KSA9PiB2LnZpc2l0SW5zdGFuY2VDb25zdGFudCh0aGlzKTsKICBhY2NlcHRSZWZlcmVuY2UoVmlzaXRvciB2KSA9PiB2LnZpc2l0SW5zdGFuY2VDb25zdGFudFJlZmVyZW5jZSh0aGlzKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgZmluYWwgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnJHtjbGFzc1JlZmVyZW5jZS5hc0NsYXNzfScpOwogICAgaWYgKCFjbGFzc1JlZmVyZW5jZS5hc0NsYXNzLnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkpIHsKICAgICAgc2Iud3JpdGUoJzwnKTsKICAgICAgc2Iud3JpdGUodHlwZUFyZ3VtZW50cy5tYXAoKHR5cGUpID0+IHR5cGUudG9TdHJpbmcoKSkuam9pbignLCAnKSk7CiAgICAgIHNiLndyaXRlKCc+Jyk7CiAgICB9CiAgICBzYi53cml0ZSgnIHsnKTsKICAgIGZpZWxkVmFsdWVzLmZvckVhY2goKFJlZmVyZW5jZSBmaWVsZFJlZiwgQ29uc3RhbnQgY29uc3RhbnQpIHsKICAgICAgc2Iud3JpdGUoJyR7ZmllbGRSZWYuYXNGaWVsZC5uYW1lfTogJGNvbnN0YW50LCAnKTsKICAgIH0pOwogICAgc2Iud3JpdGUoJ30nKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgaW50IF9jYWNoZWRIYXNoQ29kZTsKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiBfY2FjaGVkSGFzaENvZGUgPz89IF9IYXNoLmNvbWJpbmUyRmluaXNoKAogICAgICAgIGNsYXNzUmVmZXJlbmNlLmhhc2hDb2RlLAogICAgICAgIGxpc3RIYXNoQ29kZSh0eXBlQXJndW1lbnRzKSwKICAgICAgICBfSGFzaC5jb21iaW5lTWFwSGFzaFVub3JkZXJlZChmaWVsZFZhbHVlcykpOwogIH0KCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpIHsKICAgIHJldHVybiBpZGVudGljYWwodGhpcywgb3RoZXIpIHx8CiAgICAgICAgKG90aGVyIGlzIEluc3RhbmNlQ29uc3RhbnQgJiYKICAgICAgICAgICAgb3RoZXIuY2xhc3NSZWZlcmVuY2UgPT0gY2xhc3NSZWZlcmVuY2UgJiYKICAgICAgICAgICAgbGlzdEVxdWFscyhvdGhlci50eXBlQXJndW1lbnRzLCB0eXBlQXJndW1lbnRzKSAmJgogICAgICAgICAgICBtYXBFcXVhbHMob3RoZXIuZmllbGRWYWx1ZXMsIGZpZWxkVmFsdWVzKSk7CiAgfQoKICBEYXJ0VHlwZSBnZXRUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4KICAgICAgbmV3IEludGVyZmFjZVR5cGUoY2xhc3NOb2RlLCB0eXBlQXJndW1lbnRzKTsKfQoKY2xhc3MgUGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCBleHRlbmRzIENvbnN0YW50IHsKICBmaW5hbCBUZWFyT2ZmQ29uc3RhbnQgdGVhck9mZkNvbnN0YW50OwogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVzOwoKICBQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50KHRoaXMudGVhck9mZkNvbnN0YW50LCB0aGlzLnR5cGVzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHRlYXJPZmZDb25zdGFudC5hY2NlcHRSZWZlcmVuY2Uodik7CiAgICB2aXNpdExpc3QodHlwZXMsIHYpOwogIH0KCiAgYWNjZXB0KENvbnN0YW50VmlzaXRvciB2KSA9PiB2LnZpc2l0UGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCh0aGlzKTsKICBhY2NlcHRSZWZlcmVuY2UoVmlzaXRvciB2KSA9PgogICAgICB2LnZpc2l0UGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudFJlZmVyZW5jZSh0aGlzKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICcke3J1bnRpbWVUeXBlfSgke3RlYXJPZmZDb25zdGFudC5wcm9jZWR1cmV9PCR7dHlwZXMuam9pbignLCAnKX0+KSc7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IF9IYXNoLmNvbWJpbmVGaW5pc2goCiAgICAgIHRlYXJPZmZDb25zdGFudC5oYXNoQ29kZSwgX0hhc2guY29tYmluZUxpc3RIYXNoKHR5cGVzKSk7CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIgaXMgUGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCAmJgogICAgICAgIG90aGVyLnRlYXJPZmZDb25zdGFudCA9PSB0ZWFyT2ZmQ29uc3RhbnQgJiYKICAgICAgICBsaXN0RXF1YWxzKG90aGVyLnR5cGVzLCB0eXBlcyk7CiAgfQoKICBEYXJ0VHlwZSBnZXRUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQpIHsKICAgIGZpbmFsIEZ1bmN0aW9uVHlwZSB0eXBlID0gdGVhck9mZkNvbnN0YW50LmdldFR5cGUodHlwZUVudmlyb25tZW50KTsKICAgIGZpbmFsIG1hcHBpbmcgPSA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+e307CiAgICBmb3IgKGZpbmFsIHBhcmFtZXRlciBpbiB0eXBlLnR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgIG1hcHBpbmdbcGFyYW1ldGVyXSA9IHR5cGVzW21hcHBpbmcubGVuZ3RoXTsKICAgIH0KICAgIHJldHVybiBzdWJzdGl0dXRlKHR5cGUud2l0aG91dFR5cGVQYXJhbWV0ZXJzLCBtYXBwaW5nKTsKICB9Cn0KCmNsYXNzIFRlYXJPZmZDb25zdGFudCBleHRlbmRzIENvbnN0YW50IHsKICBmaW5hbCBSZWZlcmVuY2UgcHJvY2VkdXJlUmVmZXJlbmNlOwoKICBUZWFyT2ZmQ29uc3RhbnQoUHJvY2VkdXJlIHByb2NlZHVyZSkKICAgICAgOiBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmUucmVmZXJlbmNlIHsKICAgIGFzc2VydChwcm9jZWR1cmUuaXNTdGF0aWMpOwogIH0KCiAgVGVhck9mZkNvbnN0YW50LmJ5UmVmZXJlbmNlKHRoaXMucHJvY2VkdXJlUmVmZXJlbmNlKTsKCiAgUHJvY2VkdXJlIGdldCBwcm9jZWR1cmUgPT4gcHJvY2VkdXJlUmVmZXJlbmNlPy5hc1Byb2NlZHVyZTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHByb2NlZHVyZVJlZmVyZW5jZS5hc1Byb2NlZHVyZS5hY2NlcHRSZWZlcmVuY2Uodik7CiAgfQoKICBhY2NlcHQoQ29uc3RhbnRWaXNpdG9yIHYpID0+IHYudmlzaXRUZWFyT2ZmQ29uc3RhbnQodGhpcyk7CiAgYWNjZXB0UmVmZXJlbmNlKFZpc2l0b3IgdikgPT4gdi52aXNpdFRlYXJPZmZDb25zdGFudFJlZmVyZW5jZSh0aGlzKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICcke3J1bnRpbWVUeXBlfSgke3Byb2NlZHVyZX0pJzsKICB9CgogIGludCBnZXQgaGFzaENvZGUgPT4gcHJvY2VkdXJlUmVmZXJlbmNlLmhhc2hDb2RlOwoKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgewogICAgcmV0dXJuIG90aGVyIGlzIFRlYXJPZmZDb25zdGFudCAmJgogICAgICAgIG90aGVyLnByb2NlZHVyZVJlZmVyZW5jZSA9PSBwcm9jZWR1cmVSZWZlcmVuY2U7CiAgfQoKICBGdW5jdGlvblR5cGUgZ2V0VHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+CiAgICAgIHByb2NlZHVyZS5mdW5jdGlvbi5mdW5jdGlvblR5cGU7Cn0KCmNsYXNzIFR5cGVMaXRlcmFsQ29uc3RhbnQgZXh0ZW5kcyBDb25zdGFudCB7CiAgZmluYWwgRGFydFR5cGUgdHlwZTsKCiAgVHlwZUxpdGVyYWxDb25zdGFudCh0aGlzLnR5cGUpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdHlwZS5hY2NlcHQodik7CiAgfQoKICBhY2NlcHQoQ29uc3RhbnRWaXNpdG9yIHYpID0+IHYudmlzaXRUeXBlTGl0ZXJhbENvbnN0YW50KHRoaXMpOwogIGFjY2VwdFJlZmVyZW5jZShWaXNpdG9yIHYpID0+IHYudmlzaXRUeXBlTGl0ZXJhbENvbnN0YW50UmVmZXJlbmNlKHRoaXMpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJHtydW50aW1lVHlwZX0oJHt0eXBlfSknOwoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHR5cGUuaGFzaENvZGU7CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIgaXMgVHlwZUxpdGVyYWxDb25zdGFudCAmJiBvdGhlci50eXBlID09IHR5cGU7CiAgfQoKICBEYXJ0VHlwZSBnZXRUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdHlwZXMudHlwZVR5cGU7Cn0KCmNsYXNzIFVuZXZhbHVhdGVkQ29uc3RhbnQgZXh0ZW5kcyBDb25zdGFudCB7CiAgZmluYWwgRXhwcmVzc2lvbiBleHByZXNzaW9uOwoKICBVbmV2YWx1YXRlZENvbnN0YW50KHRoaXMuZXhwcmVzc2lvbikgewogICAgZXhwcmVzc2lvbj8ucGFyZW50ID0gbnVsbDsKICB9CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBleHByZXNzaW9uLmFjY2VwdCh2KTsKICB9CgogIGFjY2VwdChDb25zdGFudFZpc2l0b3IgdikgPT4gdi52aXNpdFVuZXZhbHVhdGVkQ29uc3RhbnQodGhpcyk7CiAgYWNjZXB0UmVmZXJlbmNlKFZpc2l0b3IgdikgPT4gdi52aXNpdFVuZXZhbHVhdGVkQ29uc3RhbnRSZWZlcmVuY2UodGhpcyk7CgogIERhcnRUeXBlIGdldFR5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiBleHByZXNzaW9uLmdldFN0YXRpY1R5cGUodHlwZXMpOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGFzRXhwcmVzc2lvbigpID0+IGV4cHJlc3Npb247Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09NUE9ORU5UCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8vIEEgd2F5IHRvIGJ1bmRsZSB1cCBsaWJyYXJpZXMgaW4gYSBjb21wb25lbnQuCmNsYXNzIENvbXBvbmVudCBleHRlbmRzIFRyZWVOb2RlIHsKICBmaW5hbCBDYW5vbmljYWxOYW1lIHJvb3Q7CgogIC8vLyBQcm9ibGVtcyBpbiB0aGlzIFtDb21wb25lbnRdIGVuY29kZWQgYXMganNvbiBvYmplY3RzLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgdGhpcyBmaWVsZCBjYW4gYmUgbnVsbCwgYW5kIGJ5IGNvbnZlbnRpb24gc2hvdWxkIGJlIG51bGwgaWYgdGhlCiAgLy8vIGxpc3QgaXMgZW1wdHkuCiAgTGlzdDxTdHJpbmc+IHByb2JsZW1zQXNKc29uOwoKICBmaW5hbCBMaXN0PExpYnJhcnk+IGxpYnJhcmllczsKCiAgLy8vIE1hcCBmcm9tIGEgc291cmNlIGZpbGUgVVJJIHRvIGEgbGluZS1zdGFydHMgdGFibGUgYW5kIHNvdXJjZSBjb2RlLgogIC8vLyBHaXZlbiBhIHNvdXJjZSBmaWxlIFVSSSBhbmQgYSBvZmZzZXQgaW4gdGhhdCBmaWxlIG9uZSBjYW4gdHJhbnNsYXRlCiAgLy8vIGl0IHRvIGEgbGluZTpjb2x1bW4gcG9zaXRpb24gaW4gdGhhdCBmaWxlLgogIGZpbmFsIE1hcDxVcmksIFNvdXJjZT4gdXJpVG9Tb3VyY2U7CgogIC8vLyBNYXBwaW5nIGJldHdlZW4gc3RyaW5nIHRhZ3MgYW5kIFtNZXRhZGF0YVJlcG9zaXRvcnldIGNvcnJlc3BvbmRpbmcgdG8KICAvLy8gdGhvc2UgdGFncy4KICBmaW5hbCBNYXA8U3RyaW5nLCBNZXRhZGF0YVJlcG9zaXRvcnk8ZHluYW1pYz4+IG1ldGFkYXRhID0KICAgICAgPFN0cmluZywgTWV0YWRhdGFSZXBvc2l0b3J5PGR5bmFtaWM+Pnt9OwoKICAvLy8gUmVmZXJlbmNlIHRvIHRoZSBtYWluIG1ldGhvZCBpbiBvbmUgb2YgdGhlIGxpYnJhcmllcy4KICBSZWZlcmVuY2UgbWFpbk1ldGhvZE5hbWU7CgogIENvbXBvbmVudCgKICAgICAge0Nhbm9uaWNhbE5hbWUgbmFtZVJvb3QsCiAgICAgIExpc3Q8TGlicmFyeT4gbGlicmFyaWVzLAogICAgICBNYXA8VXJpLCBTb3VyY2U+IHVyaVRvU291cmNlfSkKICAgICAgOiByb290ID0gbmFtZVJvb3QgPz8gbmV3IENhbm9uaWNhbE5hbWUucm9vdCgpLAogICAgICAgIGxpYnJhcmllcyA9IGxpYnJhcmllcyA/PyA8TGlicmFyeT5bXSwKICAgICAgICB1cmlUb1NvdXJjZSA9IHVyaVRvU291cmNlID8/IDxVcmksIFNvdXJjZT57fSB7CiAgICBhZG9wdENoaWxkcmVuKCk7CiAgfQoKICB2b2lkIGFkb3B0Q2hpbGRyZW4oKSB7CiAgICBpZiAobGlicmFyaWVzICE9IG51bGwpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaWJyYXJpZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICAvLyBUaGUgbGlicmFyaWVzIGFyZSBvd25lZCBieSB0aGlzIGNvbXBvbmVudCwgYW5kIHNvIGFyZSB0aGVpciBjYW5vbmljYWwKICAgICAgICAvLyBuYW1lcyBpZiB0aGV5IGV4aXN0LgogICAgICAgIExpYnJhcnkgbGlicmFyeSA9IGxpYnJhcmllc1tpXTsKICAgICAgICBsaWJyYXJ5LnBhcmVudCA9IHRoaXM7CiAgICAgICAgQ2Fub25pY2FsTmFtZSBuYW1lID0gbGlicmFyeS5yZWZlcmVuY2UuY2Fub25pY2FsTmFtZTsKICAgICAgICBpZiAobmFtZSAhPSBudWxsICYmIG5hbWUucGFyZW50ICE9IHJvb3QpIHsKICAgICAgICAgIHJvb3QuYWRvcHRDaGlsZChuYW1lKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgY29tcHV0ZUNhbm9uaWNhbE5hbWVzKCkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaWJyYXJpZXMubGVuZ3RoOyArK2kpIHsKICAgICAgY29tcHV0ZUNhbm9uaWNhbE5hbWVzRm9yTGlicmFyeShsaWJyYXJpZXNbaV0pOwogICAgfQogIH0KCiAgdm9pZCBjb21wdXRlQ2Fub25pY2FsTmFtZXNGb3JMaWJyYXJ5KExpYnJhcnkgbGlicmFyeSkgewogICAgcm9vdC5nZXRDaGlsZEZyb21VcmkobGlicmFyeS5pbXBvcnRVcmkpLmJpbmRUbyhsaWJyYXJ5LnJlZmVyZW5jZSk7CiAgICBsaWJyYXJ5LmNvbXB1dGVDYW5vbmljYWxOYW1lcygpOwogIH0KCiAgdm9pZCB1bmJpbmRDYW5vbmljYWxOYW1lcygpIHsKICAgIHJvb3QudW5iaW5kQWxsKCk7CiAgfQoKICBQcm9jZWR1cmUgZ2V0IG1haW5NZXRob2QgPT4gbWFpbk1ldGhvZE5hbWU/LmFzUHJvY2VkdXJlOwoKICB2b2lkIHNldCBtYWluTWV0aG9kKFByb2NlZHVyZSBtYWluKSB7CiAgICBtYWluTWV0aG9kTmFtZSA9IGdldE1lbWJlclJlZmVyZW5jZShtYWluKTsKICB9CgogIGFjY2VwdChUcmVlVmlzaXRvciB2KSA9PiB2LnZpc2l0Q29tcG9uZW50KHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdmlzaXRMaXN0KGxpYnJhcmllcywgdik7CiAgICBtYWluTWV0aG9kPy5hY2NlcHRSZWZlcmVuY2Uodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KGxpYnJhcmllcywgdiwgdGhpcyk7CiAgfQoKICBDb21wb25lbnQgZ2V0IGVuY2xvc2luZ0NvbXBvbmVudCA9PiB0aGlzOwoKICAvLy8gVHJhbnNsYXRlcyBhbiBvZmZzZXQgdG8gbGluZSBhbmQgY29sdW1uIG51bWJlcnMgaW4gdGhlIGdpdmVuIGZpbGUuCiAgTG9jYXRpb24gZ2V0TG9jYXRpb24oVXJpIGZpbGUsIGludCBvZmZzZXQpIHsKICAgIHJldHVybiB1cmlUb1NvdXJjZVtmaWxlXT8uZ2V0TG9jYXRpb24oZmlsZSwgb2Zmc2V0KTsKICB9CgogIHZvaWQgYWRkTWV0YWRhdGFSZXBvc2l0b3J5KE1ldGFkYXRhUmVwb3NpdG9yeSByZXBvc2l0b3J5KSB7CiAgICBtZXRhZGF0YVtyZXBvc2l0b3J5LnRhZ10gPSByZXBvc2l0b3J5OwogIH0KfQoKLy8vIEEgdHVwbGUgd2l0aCBmaWxlLCBsaW5lLCBhbmQgY29sdW1uIG51bWJlciwgZm9yIGRpc3BsYXlpbmcgaHVtYW4tcmVhZGFibGUKLy8vIGxvY2F0aW9ucy4KY2xhc3MgTG9jYXRpb24gewogIGZpbmFsIFVyaSBmaWxlOwogIGZpbmFsIGludCBsaW5lOyAvLyAxLWJhc2VkLgogIGZpbmFsIGludCBjb2x1bW47IC8vIDEtYmFzZWQuCgogIExvY2F0aW9uKHRoaXMuZmlsZSwgdGhpcy5saW5lLCB0aGlzLmNvbHVtbik7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICckZmlsZTokbGluZTokY29sdW1uJzsKfQoKYWJzdHJhY3QgY2xhc3MgTWV0YWRhdGFSZXBvc2l0b3J5PFQ+IHsKICAvLy8gVW5pcXVlIHN0cmluZyB0YWcgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVwb3NpdG9yeS4KICBTdHJpbmcgZ2V0IHRhZzsKCiAgLy8vIE11dGFibGUgbWFwcGluZyBiZXR3ZWVuIG5vZGVzIGFuZCB0aGVpciBtZXRhZGF0YS4KICBNYXA8VHJlZU5vZGUsIFQ+IGdldCBtYXBwaW5nOwoKICAvLy8gV3JpdGUgW21ldGFkYXRhXSBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gW05vZGVdIGludG8KICAvLy8gdGhlIGdpdmVuIFtCaW5hcnlTaW5rXS4KICAvLy8KICAvLy8gTWV0YWRhdGEgaXMgc2VyaWFsaXplZCBpbW1lZGlhdGVseSBiZWZvcmUgc2VyaWFsaXppbmcgW25vZGVdLAogIC8vLyBzbyBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCBjYW4gdXNlIHNlcmlhbGl6YXRpb24gY29udGV4dCBvZgogIC8vLyBbbm9kZV0ncyBwYXJlbnRzIChzdWNoIGFzIGRlY2xhcmVkIHR5cGUgcGFyYW1ldGVycyBhbmQgdmFyaWFibGVzKS4KICAvLy8gSW4gb3JkZXIgdG8gdXNlIHNjb3BlIGRlY2xhcmVkIGJ5IHRoZSBbbm9kZV0gaXRzZWxmLCBpbXBsZW1lbnRhdGlvbiBvZgogIC8vLyB0aGlzIG1ldGhvZCBjYW4gdXNlIFtCaW5hcnlTaW5rLmVudGVyU2NvcGVdIGFuZCBbQmluYXJ5U2luay5sZWF2ZVNjb3BlXQogIC8vLyBtZXRob2RzLgogIC8vLwogIC8vLyBbbWV0YWRhdGFdIG11c3QgYmUgYW4gb2JqZWN0IG93bmVkIGJ5IHRoaXMgcmVwb3NpdG9yeS4KICB2b2lkIHdyaXRlVG9CaW5hcnkoVCBtZXRhZGF0YSwgTm9kZSBub2RlLCBCaW5hcnlTaW5rIHNpbmspOwoKICAvLy8gQ29uc3RydWN0IGEgbWV0YWRhdGEgb2JqZWN0IGZyb20gaXRzIGJpbmFyeSBwYXlsb2FkIHJlYWQgZnJvbSB0aGUKICAvLy8gZ2l2ZW4gW0JpbmFyeVNvdXJjZV0uCiAgLy8vCiAgLy8vIE1ldGFkYXRhIGlzIGRlc2VyaWFsaXplZCBpbW1lZGlhdGVseSBhZnRlciBkZXNlcmlhbGl6aW5nIFtub2RlXSwKICAvLy8gc28gaXQgY2FuIHVzZSBkZXNlcmlhbGl6YXRpb24gY29udGV4dCBvZiBbbm9kZV0ncyBwYXJlbnRzLgogIC8vLyBJbiBvcmRlciB0byB1c2Ugc2NvcGUgZGVjbGFyZWQgYnkgdGhlIFtub2RlXSBpdHNlbGYsIGltcGxlbWVudGF0aW9uIG9mCiAgLy8vIHRoaXMgbWV0aG9kIGNhbiB1c2UgW0JpbmFyeVNvdXJjZS5lbnRlclNjb3BlXSBhbmQKICAvLy8gW0JpbmFyeVNvdXJjZS5sZWF2ZVNjb3BlXSBtZXRob2RzLgogIFQgcmVhZEZyb21CaW5hcnkoTm9kZSBub2RlLCBCaW5hcnlTb3VyY2Ugc291cmNlKTsKCiAgLy8vIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGEgbm9kZSBjYW4gaGF2ZSBtZXRhZGF0YSBhdHRhY2hlZCB0byBpdAogIC8vLyBvciByZWZlcmVuY2VkIGZyb20gdGhlIG1ldGFkYXRhIHBheWxvYWQuCiAgLy8vCiAgLy8vIEN1cnJlbnRseSBkdWUgdG8gYmluYXJ5IGZvcm1hdCBzcGVjaWZpY3MgQ2F0Y2ggYW5kIE1hcEVudHJ5IG5vZGVzCiAgLy8vIGNhbid0IGhhdmUgbWV0YWRhdGEgYXR0YWNoZWQgdG8gdGhlbS4KICBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZChUcmVlTm9kZSBub2RlKSB7CiAgICByZXR1cm4gIShub2RlIGlzIE1hcEVudHJ5IHx8IG5vZGUgaXMgQ2F0Y2gpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgQmluYXJ5U2luayB7CiAgaW50IGdldEJ1ZmZlck9mZnNldCgpOwoKICB2b2lkIHdyaXRlQnl0ZShpbnQgYnl0ZSk7CiAgdm9pZCB3cml0ZUJ5dGVzKExpc3Q8aW50PiBieXRlcyk7CiAgdm9pZCB3cml0ZVVJbnQzMihpbnQgdmFsdWUpOwogIHZvaWQgd3JpdGVVSW50MzAoaW50IHZhbHVlKTsKCiAgLy8vIFdyaXRlIExpc3Q8Qnl0ZT4gaW50byB0aGUgc2luay4KICB2b2lkIHdyaXRlQnl0ZUxpc3QoTGlzdDxpbnQ+IGJ5dGVzKTsKCiAgdm9pZCB3cml0ZU51bGxBbGxvd2VkQ2Fub25pY2FsTmFtZVJlZmVyZW5jZShDYW5vbmljYWxOYW1lIG5hbWUpOwogIHZvaWQgd3JpdGVTdHJpbmdSZWZlcmVuY2UoU3RyaW5nIHN0cik7CiAgdm9pZCB3cml0ZU5hbWUoTmFtZSBub2RlKTsKICB2b2lkIHdyaXRlRGFydFR5cGUoRGFydFR5cGUgdHlwZSk7CiAgdm9pZCB3cml0ZU5vZGUoTm9kZSBub2RlKTsKCiAgdm9pZCBlbnRlclNjb3BlKAogICAgICB7TGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycywKICAgICAgYm9vbCBtZW1iZXJTY29wZTogZmFsc2UsCiAgICAgIGJvb2wgdmFyaWFibGVTY29wZTogZmFsc2V9KTsKICB2b2lkIGxlYXZlU2NvcGUoCiAgICAgIHtMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzLAogICAgICBib29sIG1lbWJlclNjb3BlOiBmYWxzZSwKICAgICAgYm9vbCB2YXJpYWJsZVNjb3BlOiBmYWxzZX0pOwp9CgphYnN0cmFjdCBjbGFzcyBCaW5hcnlTb3VyY2UgewogIGludCBnZXQgY3VycmVudE9mZnNldDsKICBMaXN0PGludD4gZ2V0IGJ5dGVzOwoKICBpbnQgcmVhZEJ5dGUoKTsKICBMaXN0PGludD4gcmVhZEJ5dGVzKGludCBsZW5ndGgpOwogIGludCByZWFkVUludCgpOwogIGludCByZWFkVWludDMyKCk7CgogIC8vLyBSZWFkIExpc3Q8Qnl0ZT4gZnJvbSB0aGUgc291cmNlLgogIExpc3Q8aW50PiByZWFkQnl0ZUxpc3QoKTsKCiAgQ2Fub25pY2FsTmFtZSByZWFkQ2Fub25pY2FsTmFtZVJlZmVyZW5jZSgpOwogIFN0cmluZyByZWFkU3RyaW5nUmVmZXJlbmNlKCk7CiAgTmFtZSByZWFkTmFtZSgpOwogIERhcnRUeXBlIHJlYWREYXJ0VHlwZSgpOwogIEZ1bmN0aW9uTm9kZSByZWFkRnVuY3Rpb25Ob2RlKCk7CgogIHZvaWQgZW50ZXJTY29wZSh7TGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVyc30pOwogIHZvaWQgbGVhdmVTY29wZSh7TGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVyc30pOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVEVSTkFMIEZVTkNUSU9OUwovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCnZvaWQgc2V0UGFyZW50cyhMaXN0PFRyZWVOb2RlPiBub2RlcywgVHJlZU5vZGUgcGFyZW50KSB7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7ICsraSkgewogICAgbm9kZXNbaV0ucGFyZW50ID0gcGFyZW50OwogIH0KfQoKdm9pZCB2aXNpdExpc3QoTGlzdDxOb2RlPiBub2RlcywgVmlzaXRvciB2aXNpdG9yKSB7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7ICsraSkgewogICAgbm9kZXNbaV0uYWNjZXB0KHZpc2l0b3IpOwogIH0KfQoKdm9pZCB2aXNpdEl0ZXJhYmxlKEl0ZXJhYmxlPE5vZGU+IG5vZGVzLCBWaXNpdG9yIHZpc2l0b3IpIHsKICBmb3IgKHZhciBub2RlIGluIG5vZGVzKSB7CiAgICBub2RlLmFjY2VwdCh2aXNpdG9yKTsKICB9Cn0KCnZvaWQgdHJhbnNmb3JtVHlwZUxpc3QoTGlzdDxEYXJ0VHlwZT4gbm9kZXMsIFRyYW5zZm9ybWVyIHZpc2l0b3IpIHsKICBpbnQgc3RvcmVJbmRleCA9IDA7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7ICsraSkgewogICAgdmFyIHJlc3VsdCA9IHZpc2l0b3IudmlzaXREYXJ0VHlwZShub2Rlc1tpXSk7CiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHsKICAgICAgbm9kZXNbc3RvcmVJbmRleF0gPSByZXN1bHQ7CiAgICAgICsrc3RvcmVJbmRleDsKICAgIH0KICB9CiAgaWYgKHN0b3JlSW5kZXggPCBub2Rlcy5sZW5ndGgpIHsKICAgIG5vZGVzLmxlbmd0aCA9IHN0b3JlSW5kZXg7CiAgfQp9Cgp2b2lkIHRyYW5zZm9ybVN1cGVydHlwZUxpc3QoTGlzdDxTdXBlcnR5cGU+IG5vZGVzLCBUcmFuc2Zvcm1lciB2aXNpdG9yKSB7CiAgaW50IHN0b3JlSW5kZXggPSAwOwogIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyArK2kpIHsKICAgIHZhciByZXN1bHQgPSB2aXNpdG9yLnZpc2l0U3VwZXJ0eXBlKG5vZGVzW2ldKTsKICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgewogICAgICBub2Rlc1tzdG9yZUluZGV4XSA9IHJlc3VsdDsKICAgICAgKytzdG9yZUluZGV4OwogICAgfQogIH0KICBpZiAoc3RvcmVJbmRleCA8IG5vZGVzLmxlbmd0aCkgewogICAgbm9kZXMubGVuZ3RoID0gc3RvcmVJbmRleDsKICB9Cn0KCnZvaWQgdHJhbnNmb3JtTGlzdChMaXN0PFRyZWVOb2RlPiBub2RlcywgVHJhbnNmb3JtZXIgdmlzaXRvciwgVHJlZU5vZGUgcGFyZW50KSB7CiAgaW50IHN0b3JlSW5kZXggPSAwOwogIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyArK2kpIHsKICAgIHZhciByZXN1bHQgPSBub2Rlc1tpXS5hY2NlcHQodmlzaXRvcik7CiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHsKICAgICAgbm9kZXNbc3RvcmVJbmRleF0gPSByZXN1bHQ7CiAgICAgIHJlc3VsdC5wYXJlbnQgPSBwYXJlbnQ7CiAgICAgICsrc3RvcmVJbmRleDsKICAgIH0KICB9CiAgaWYgKHN0b3JlSW5kZXggPCBub2Rlcy5sZW5ndGgpIHsKICAgIG5vZGVzLmxlbmd0aCA9IHN0b3JlSW5kZXg7CiAgfQp9CgpMaXN0PERhcnRUeXBlPiBfZ2V0QXNUeXBlQXJndW1lbnRzKExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMpIHsKICBpZiAodHlwZVBhcmFtZXRlcnMuaXNFbXB0eSkgcmV0dXJuIGNvbnN0IDxEYXJ0VHlwZT5bXTsKICByZXR1cm4gbmV3IExpc3Q8RGFydFR5cGU+LmdlbmVyYXRlKAogICAgICB0eXBlUGFyYW1ldGVycy5sZW5ndGgsIChpKSA9PiBuZXcgVHlwZVBhcmFtZXRlclR5cGUodHlwZVBhcmFtZXRlcnNbaV0pLAogICAgICBncm93YWJsZTogZmFsc2UpOwp9CgpjbGFzcyBfQ2hpbGRSZXBsYWNlciBleHRlbmRzIFRyYW5zZm9ybWVyIHsKICBmaW5hbCBUcmVlTm9kZSBjaGlsZDsKICBmaW5hbCBUcmVlTm9kZSByZXBsYWNlbWVudDsKCiAgX0NoaWxkUmVwbGFjZXIodGhpcy5jaGlsZCwgdGhpcy5yZXBsYWNlbWVudCk7CgogIEBvdmVycmlkZQogIGRlZmF1bHRUcmVlTm9kZShUcmVlTm9kZSBub2RlKSB7CiAgICBpZiAobm9kZSA9PSBjaGlsZCkgewogICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbm9kZTsKICAgIH0KICB9Cn0KCmNsYXNzIFNvdXJjZSB7CiAgZmluYWwgTGlzdDxpbnQ+IGxpbmVTdGFydHM7CgogIGZpbmFsIExpc3Q8aW50PiBzb3VyY2U7CgogIGZpbmFsIFVyaSBpbXBvcnRVcmk7CgogIGZpbmFsIFVyaSBmaWxlVXJpOwoKICBTdHJpbmcgY2FjaGVkVGV4dDsKCiAgU291cmNlKHRoaXMubGluZVN0YXJ0cywgdGhpcy5zb3VyY2UsIHRoaXMuaW1wb3J0VXJpLCB0aGlzLmZpbGVVcmkpOwoKICAvLy8gUmV0dXJuIHRoZSB0ZXh0IGNvcnJlc3BvbmRpbmcgdG8gW2xpbmVdIHdoaWNoIGlzIGEgMS1iYXNlZCBsaW5lCiAgLy8vIG51bWJlci4gVGhlIHJldHVybmVkIGxpbmUgY29udGFpbnMgbm8gbGluZSBzZXBhcmF0b3JzLgogIFN0cmluZyBnZXRUZXh0TGluZShpbnQgbGluZSkgewogICAgaWYgKHNvdXJjZSA9PSBudWxsIHx8CiAgICAgICAgc291cmNlLmlzRW1wdHkgfHwKICAgICAgICBsaW5lU3RhcnRzID09IG51bGwgfHwKICAgICAgICBsaW5lU3RhcnRzLmlzRW1wdHkpIHJldHVybiBudWxsOwogICAgUmFuZ2VFcnJvci5jaGVja1ZhbHVlSW5JbnRlcnZhbChsaW5lLCAxLCBsaW5lU3RhcnRzLmxlbmd0aCwgJ2xpbmUnKTsKCiAgICBjYWNoZWRUZXh0ID8/PSB1dGY4LmRlY29kZShzb3VyY2UsIGFsbG93TWFsZm9ybWVkOiB0cnVlKTsKICAgIC8vIC0xIGFzIGxpbmUgbnVtYmVycyBzdGFydCBhdCAxLgogICAgaW50IGluZGV4ID0gbGluZSAtIDE7CiAgICBpZiAoaW5kZXggKyAxID09IGxpbmVTdGFydHMubGVuZ3RoKSB7CiAgICAgIC8vIExhc3QgbGluZS4KICAgICAgcmV0dXJuIGNhY2hlZFRleHQuc3Vic3RyaW5nKGxpbmVTdGFydHNbaW5kZXhdKTsKICAgIH0gZWxzZSBpZiAoaW5kZXggPCBsaW5lU3RhcnRzLmxlbmd0aCkgewogICAgICAvLyBXZSBzdWJ0cmFjdCAxIGZyb20gdGhlIG5leHQgbGluZSBmb3IgdHdvIHJlYXNvbnM6CiAgICAgIC8vIDEuIElmIHRoZSBmaWxlIGlzbid0IHRlcm1pbmF0ZWQgYnkgYSBuZXdsaW5lLCB0aGF0IGluZGV4IGlzIGludmFsaWQuCiAgICAgIC8vIDIuIFRvIHJlbW92ZSB0aGUgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLgogICAgICBpbnQgZW5kT2ZMaW5lID0gbGluZVN0YXJ0c1tpbmRleCArIDFdIC0gMTsKICAgICAgaWYgKGVuZE9mTGluZSA+IGluZGV4ICYmIGNhY2hlZFRleHRbZW5kT2ZMaW5lIC0gMV0gPT0gIlxyIikgewogICAgICAgIC0tZW5kT2ZMaW5lOyAvLyBXaW5kb3dzIGxpbmUgZW5kaW5ncy4KICAgICAgfQogICAgICByZXR1cm4gY2FjaGVkVGV4dC5zdWJzdHJpbmcobGluZVN0YXJ0c1tpbmRleF0sIGVuZE9mTGluZSk7CiAgICB9CiAgICAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW46IHNob3VsZCBoYXZlIGJlZW4gY2F1Z2h0IGJ5IHRoZSByYW5nZSBjaGVjayBhYm92ZS4KICAgIHRocm93ICJJbnRlcm5hbCBlcnJvciI7CiAgfQoKICAvLy8gVHJhbnNsYXRlcyBhbiBvZmZzZXQgdG8gbGluZSBhbmQgY29sdW1uIG51bWJlcnMgaW4gdGhlIGdpdmVuIGZpbGUuCiAgTG9jYXRpb24gZ2V0TG9jYXRpb24oVXJpIGZpbGUsIGludCBvZmZzZXQpIHsKICAgIGlmIChsaW5lU3RhcnRzID09IG51bGwgfHwgbGluZVN0YXJ0cy5pc0VtcHR5KSB7CiAgICAgIHJldHVybiBuZXcgTG9jYXRpb24oZmlsZSwgVHJlZU5vZGUubm9PZmZzZXQsIFRyZWVOb2RlLm5vT2Zmc2V0KTsKICAgIH0KICAgIFJhbmdlRXJyb3IuY2hlY2tWYWx1ZUluSW50ZXJ2YWwob2Zmc2V0LCAwLCBsaW5lU3RhcnRzLmxhc3QsICdvZmZzZXQnKTsKICAgIGludCBsb3cgPSAwLCBoaWdoID0gbGluZVN0YXJ0cy5sZW5ndGggLSAxOwogICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHsKICAgICAgaW50IG1pZCA9IGhpZ2ggLSAoKGhpZ2ggLSBsb3cpID4+IDEpOyAvLyBHZXQgbWlkZGxlLCByb3VuZGluZyB1cC4KICAgICAgaW50IHBpdm90ID0gbGluZVN0YXJ0c1ttaWRdOwogICAgICBpZiAocGl2b3QgPD0gb2Zmc2V0KSB7CiAgICAgICAgbG93ID0gbWlkOwogICAgICB9IGVsc2UgewogICAgICAgIGhpZ2ggPSBtaWQgLSAxOwogICAgICB9CiAgICB9CiAgICBpbnQgbGluZUluZGV4ID0gbG93OwogICAgaW50IGxpbmVTdGFydCA9IGxpbmVTdGFydHNbbGluZUluZGV4XTsKICAgIGludCBsaW5lTnVtYmVyID0gMSArIGxpbmVJbmRleDsKICAgIGludCBjb2x1bW5OdW1iZXIgPSAxICsgb2Zmc2V0IC0gbGluZVN0YXJ0OwogICAgcmV0dXJuIG5ldyBMb2NhdGlvbihmaWxlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpOwogIH0KfQoKLy8vIFJldHVybnMgdGhlIFtSZWZlcmVuY2VdIG9iamVjdCBmb3IgdGhlIGdpdmVuIG1lbWJlci4KLy8vCi8vLyBSZXR1cm5zIGBudWxsYCBpZiB0aGUgbWVtYmVyIGlzIGBudWxsYC4KUmVmZXJlbmNlIGdldE1lbWJlclJlZmVyZW5jZShNZW1iZXIgbWVtYmVyKSB7CiAgcmV0dXJuIG1lbWJlcj8ucmVmZXJlbmNlOwp9CgovLy8gUmV0dXJucyB0aGUgW1JlZmVyZW5jZV0gb2JqZWN0IGZvciB0aGUgZ2l2ZW4gY2xhc3MuCi8vLwovLy8gUmV0dXJucyBgbnVsbGAgaWYgdGhlIGNsYXNzIGlzIGBudWxsYC4KUmVmZXJlbmNlIGdldENsYXNzUmVmZXJlbmNlKENsYXNzIGNsYXNzXykgewogIHJldHVybiBjbGFzc18/LnJlZmVyZW5jZTsKfQoKLy8vIFJldHVybnMgdGhlIGNhbm9uaWNhbCBuYW1lIG9mIFttZW1iZXJdLCBvciB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZQovLy8gbWVtYmVyIGhhcyBub3QgYmVlbiBhc3NpZ25lZCBhIGNhbm9uaWNhbCBuYW1lIHlldC4KLy8vCi8vLyBSZXR1cm5zIGBudWxsYCBpZiB0aGUgbWVtYmVyIGlzIGBudWxsYC4KQ2Fub25pY2FsTmFtZSBnZXRDYW5vbmljYWxOYW1lT2ZNZW1iZXIoTWVtYmVyIG1lbWJlcikgewogIGlmIChtZW1iZXIgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgaWYgKG1lbWJlci5jYW5vbmljYWxOYW1lID09IG51bGwpIHsKICAgIHRocm93ICckbWVtYmVyIGhhcyBubyBjYW5vbmljYWwgbmFtZSc7CiAgfQogIHJldHVybiBtZW1iZXIuY2Fub25pY2FsTmFtZTsKfQoKLy8vIFJldHVybnMgdGhlIGNhbm9uaWNhbCBuYW1lIG9mIFtjbGFzc19dLCBvciB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZQovLy8gY2xhc3MgaGFzIG5vdCBiZWVuIGFzc2lnbmVkIGEgY2Fub25pY2FsIG5hbWUgeWV0LgovLy8KLy8vIFJldHVybnMgYG51bGxgIGlmIHRoZSBjbGFzcyBpcyBgbnVsbGAuCkNhbm9uaWNhbE5hbWUgZ2V0Q2Fub25pY2FsTmFtZU9mQ2xhc3MoQ2xhc3MgY2xhc3NfKSB7CiAgaWYgKGNsYXNzXyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICBpZiAoY2xhc3NfLmNhbm9uaWNhbE5hbWUgPT0gbnVsbCkgewogICAgdGhyb3cgJyRjbGFzc18gaGFzIG5vIGNhbm9uaWNhbCBuYW1lJzsKICB9CiAgcmV0dXJuIGNsYXNzXy5jYW5vbmljYWxOYW1lOwp9CgovLy8gUmV0dXJucyB0aGUgY2Fub25pY2FsIG5hbWUgb2YgW2V4dGVuc2lvbl0sIG9yIHRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlCi8vLyBjbGFzcyBoYXMgbm90IGJlZW4gYXNzaWduZWQgYSBjYW5vbmljYWwgbmFtZSB5ZXQuCi8vLwovLy8gUmV0dXJucyBgbnVsbGAgaWYgdGhlIGV4dGVuc2lvbiBpcyBgbnVsbGAuCkNhbm9uaWNhbE5hbWUgZ2V0Q2Fub25pY2FsTmFtZU9mRXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRlbnNpb24pIHsKICBpZiAoZXh0ZW5zaW9uID09IG51bGwpIHJldHVybiBudWxsOwogIGlmIChleHRlbnNpb24uY2Fub25pY2FsTmFtZSA9PSBudWxsKSB7CiAgICB0aHJvdyAnJGV4dGVuc2lvbiBoYXMgbm8gY2Fub25pY2FsIG5hbWUnOwogIH0KICByZXR1cm4gZXh0ZW5zaW9uLmNhbm9uaWNhbE5hbWU7Cn0KCi8vLyBSZXR1cm5zIHRoZSBjYW5vbmljYWwgbmFtZSBvZiBbbGlicmFyeV0sIG9yIHRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlCi8vLyBsaWJyYXJ5IGhhcyBub3QgYmVlbiBhc3NpZ25lZCBhIGNhbm9uaWNhbCBuYW1lIHlldC4KLy8vCi8vLyBSZXR1cm5zIGBudWxsYCBpZiB0aGUgbGlicmFyeSBpcyBgbnVsbGAuCkNhbm9uaWNhbE5hbWUgZ2V0Q2Fub25pY2FsTmFtZU9mTGlicmFyeShMaWJyYXJ5IGxpYnJhcnkpIHsKICBpZiAobGlicmFyeSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICBpZiAobGlicmFyeS5jYW5vbmljYWxOYW1lID09IG51bGwpIHsKICAgIHRocm93ICckbGlicmFyeSBoYXMgbm8gY2Fub25pY2FsIG5hbWUnOwogIH0KICByZXR1cm4gbGlicmFyeS5jYW5vbmljYWxOYW1lOwp9CgovLy8gTXVybXVyLWluc3BpcmVkIGhhc2hpbmcsIHdpdGggYSBmYWxsLWJhY2sgdG8gSmVua2lucy1pbnNwaXJlZCBoYXNoaW5nIHdoZW4KLy8vIGNvbXBpbGVkIHRvIEphdmFTY3JpcHQuCi8vLwovLy8gQSBoYXNoIGZ1bmN0aW9uIHNob3VsZCBiZSBjb25zdHJ1Y3RlZCBvZiBzZXZlcmFsIFtjb21iaW5lXSBjYWxscyBmb2xsb3dlZCBieQovLy8gYSBbZmluaXNoXSBjYWxsLgpjbGFzcyBfSGFzaCB7CiAgc3RhdGljIGNvbnN0IGludCBNID0gMHg5ZGRmZWEwOGViMzgyMDAwICsgMHhkNjk7CiAgc3RhdGljIGNvbnN0IGJvb2wgaW50SXM2NEJpdCA9ICgxIDw8IDYzKSAhPSAwOwoKICAvLy8gUHJpbWl0aXZlIGhhc2ggY29tYmluaW5nIHN0ZXAuCiAgc3RhdGljIGludCBjb21iaW5lKGludCB2YWx1ZSwgaW50IGhhc2gpIHsKICAgIGlmIChpbnRJczY0Qml0KSB7CiAgICAgIHZhbHVlICo9IE07CiAgICAgIHZhbHVlIF49IF9zaHJ1KHZhbHVlLCA0Nyk7CiAgICAgIHZhbHVlICo9IE07CiAgICAgIGhhc2ggXj0gdmFsdWU7CiAgICAgIGhhc2ggKj0gTTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIEZhbGwgYmFjayB0byBKZW5raW5zLWluc3BpcmVkIGhhc2hpbmcgb24gSmF2YVNjcmlwdCBwbGF0Zm9ybXMuCiAgICAgIGhhc2ggPSAweDFmZmZmZmZmICYgKGhhc2ggKyB2YWx1ZSk7CiAgICAgIGhhc2ggPSAweDFmZmZmZmZmICYgKGhhc2ggKyAoKDB4MDAwN2ZmZmYgJiBoYXNoKSA8PCAxMCkpOwogICAgICBoYXNoID0gaGFzaCBeIChoYXNoID4+IDYpOwogICAgfQogICAgcmV0dXJuIGhhc2g7CiAgfQoKICAvLy8gUHJpbWl0aXZlIGhhc2ggZmluYWxpemF0aW9uIHN0ZXAuCiAgc3RhdGljIGludCBmaW5pc2goaW50IGhhc2gpIHsKICAgIGlmIChpbnRJczY0Qml0KSB7CiAgICAgIGhhc2ggXj0gX3NocnUoaGFzaCwgNDQpOwogICAgICBoYXNoICo9IE07CiAgICAgIGhhc2ggXj0gX3NocnUoaGFzaCwgNDEpOwogICAgfSBlbHNlIHsKICAgICAgLy8gRmFsbCBiYWNrIHRvIEplbmtpbnMtaW5zcGlyZWQgaGFzaGluZyBvbiBKYXZhU2NyaXB0IHBsYXRmb3Jtcy4KICAgICAgaGFzaCA9IDB4MWZmZmZmZmYgJiAoaGFzaCArICgoMHgwM2ZmZmZmZiAmIGhhc2gpIDw8IDMpKTsKICAgICAgaGFzaCA9IGhhc2ggXiAoaGFzaCA+PiAxMSk7CiAgICAgIGhhc2ggPSAweDFmZmZmZmZmICYgKGhhc2ggKyAoKDB4MDAwMDNmZmYgJiBoYXNoKSA8PCAxNSkpOwogICAgfQogICAgcmV0dXJuIGhhc2g7CiAgfQoKICBzdGF0aWMgaW50IGNvbWJpbmVGaW5pc2goaW50IHZhbHVlLCBpbnQgaGFzaCkgewogICAgcmV0dXJuIGZpbmlzaChjb21iaW5lKHZhbHVlLCBoYXNoKSk7CiAgfQoKICBzdGF0aWMgaW50IGNvbWJpbmUyKGludCB2YWx1ZTEsIGludCB2YWx1ZTIsIGludCBoYXNoKSB7CiAgICByZXR1cm4gY29tYmluZSh2YWx1ZTIsIGNvbWJpbmUodmFsdWUxLCBoYXNoKSk7CiAgfQoKICBzdGF0aWMgaW50IGNvbWJpbmUyRmluaXNoKGludCB2YWx1ZTEsIGludCB2YWx1ZTIsIGludCBoYXNoKSB7CiAgICByZXR1cm4gZmluaXNoKGNvbWJpbmUyKHZhbHVlMSwgdmFsdWUyLCBoYXNoKSk7CiAgfQoKICBzdGF0aWMgaW50IGhhc2gyKE9iamVjdCBvYmplY3QxLCBPYmplY3Qgb2JqZWN0MikgewogICAgcmV0dXJuIGNvbWJpbmUyRmluaXNoKG9iamVjdDIuaGFzaENvZGUsIG9iamVjdDIuaGFzaENvZGUsIDApOwogIH0KCiAgc3RhdGljIGludCBjb21iaW5lTGlzdEhhc2goTGlzdCBsaXN0LCBbaW50IGhhc2ggPSAxXSkgewogICAgZm9yICh2YXIgaXRlbSBpbiBsaXN0KSB7CiAgICAgIGhhc2ggPSBfSGFzaC5jb21iaW5lKGl0ZW0uaGFzaENvZGUsIGhhc2gpOwogICAgfQogICAgcmV0dXJuIGhhc2g7CiAgfQoKICBzdGF0aWMgaW50IGNvbWJpbmVMaXN0KExpc3Q8aW50PiBoYXNoZXMsIGludCBoYXNoKSB7CiAgICBmb3IgKHZhciBpdGVtIGluIGhhc2hlcykgewogICAgICBoYXNoID0gY29tYmluZShpdGVtLCBoYXNoKTsKICAgIH0KICAgIHJldHVybiBoYXNoOwogIH0KCiAgc3RhdGljIGludCBjb21iaW5lTWFwSGFzaFVub3JkZXJlZChNYXAgbWFwLCBbaW50IGhhc2ggPSAyXSkgewogICAgaWYgKG1hcCA9PSBudWxsIHx8IG1hcC5pc0VtcHR5KSByZXR1cm4gaGFzaDsKICAgIExpc3Q8aW50PiBlbnRyeUhhc2hlcyA9IExpc3QobWFwLmxlbmd0aCk7CiAgICBpbnQgaSA9IDA7CiAgICBmb3IgKHZhciBlbnRyeSBpbiBtYXAuZW50cmllcykgewogICAgICBlbnRyeUhhc2hlc1tpKytdID0gY29tYmluZShlbnRyeS5rZXkuaGFzaENvZGUsIGVudHJ5LnZhbHVlLmhhc2hDb2RlKTsKICAgIH0KICAgIGVudHJ5SGFzaGVzLnNvcnQoKTsKICAgIHJldHVybiBjb21iaW5lTGlzdChlbnRyeUhhc2hlcywgaGFzaCk7CiAgfQoKICAvLyBUT0RPKHNyYSk6IFJlcGxhY2Ugd2l0aCAnPj4+Jy4KICBzdGF0aWMgaW50IF9zaHJ1KGludCB2LCBpbnQgbikgewogICAgYXNzZXJ0KG4gPj0gMSk7CiAgICBhc3NlcnQoaW50SXM2NEJpdCk7CiAgICByZXR1cm4gKCh2ID4+IDEpICYgKDB4N2ZmZkZGRkZmZmZmRjAwMCArIDB4RkZGKSkgPj4gKG4gLSAxKTsKICB9Cn0KCmludCBsaXN0SGFzaENvZGUoTGlzdCBsaXN0KSB7CiAgcmV0dXJuIF9IYXNoLmZpbmlzaChfSGFzaC5jb21iaW5lTGlzdEhhc2gobGlzdCkpOwp9CgppbnQgbWFwSGFzaENvZGUoTWFwIG1hcCkgewogIHJldHVybiBtYXBIYXNoQ29kZVVub3JkZXJlZChtYXApOwp9CgppbnQgbWFwSGFzaENvZGVPcmRlcmVkKE1hcCBtYXAsIFtpbnQgaGFzaCA9IDJdKSB7CiAgZm9yIChmaW5hbCBPYmplY3QgeCBpbiBtYXAua2V5cykgaGFzaCA9IF9IYXNoLmNvbWJpbmUoeC5oYXNoQ29kZSwgaGFzaCk7CiAgZm9yIChmaW5hbCBPYmplY3QgeCBpbiBtYXAudmFsdWVzKSBoYXNoID0gX0hhc2guY29tYmluZSh4Lmhhc2hDb2RlLCBoYXNoKTsKICByZXR1cm4gX0hhc2guZmluaXNoKGhhc2gpOwp9CgppbnQgbWFwSGFzaENvZGVVbm9yZGVyZWQoTWFwIG1hcCkgewogIHJldHVybiBfSGFzaC5maW5pc2goX0hhc2guY29tYmluZU1hcEhhc2hVbm9yZGVyZWQobWFwKSk7Cn0KCmJvb2wgbGlzdEVxdWFscyhMaXN0IGEsIExpc3QgYikgewogIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogIGZvciAoaW50IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewogICAgaWYgKGFbaV0gIT0gYltpXSkgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gdHJ1ZTsKfQoKYm9vbCBtYXBFcXVhbHMoTWFwIGEsIE1hcCBiKSB7CiAgaWYgKGEubGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgZm9yIChmaW5hbCBPYmplY3Qga2V5IGluIGEua2V5cykgewogICAgaWYgKCFiLmNvbnRhaW5zS2V5KGtleSkgfHwgYVtrZXldICE9IGJba2V5XSkgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gdHJ1ZTsKfQoKLy8vIFJldHVybnMgdGhlIGNhbm9uaWNhbCBuYW1lIG9mIFt0eXBlZGVmX10sIG9yIHRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlCi8vLyB0eXBlZGVmIGhhcyBub3QgYmVlbiBhc3NpZ25lZCBhIGNhbm9uaWNhbCBuYW1lIHlldC4KLy8vCi8vLyBSZXR1cm5zIGBudWxsYCBpZiB0aGUgdHlwZWRlZiBpcyBgbnVsbGAuCkNhbm9uaWNhbE5hbWUgZ2V0Q2Fub25pY2FsTmFtZU9mVHlwZWRlZihUeXBlZGVmIHR5cGVkZWZfKSB7CiAgaWYgKHR5cGVkZWZfID09IG51bGwpIHJldHVybiBudWxsOwogIGlmICh0eXBlZGVmXy5jYW5vbmljYWxOYW1lID09IG51bGwpIHsKICAgIHRocm93ICckdHlwZWRlZl8gaGFzIG5vIGNhbm9uaWNhbCBuYW1lJzsKICB9CiAgcmV0dXJuIHR5cGVkZWZfLmNhbm9uaWNhbE5hbWU7Cn0KCi8vLyBBbm5vdGF0aW9uIGRlc2NyaWJpbmcgaW5mb3JtYXRpb24gd2hpY2ggaXMgbm90IHBhcnQgb2YgRGFydCBzZW1hbnRpY3M7IGluCi8vLyBvdGhlciB3b3JkcywgaWYgdGhpcyBpbmZvcm1hdGlvbiAob3IgYW55IGluZm9ybWF0aW9uIGl0IHJlZmVycyB0bykgY2hhbmdlcywKLy8vIHN0YXRpYyBhbmFseXNpcyBhbmQgcnVudGltZSBiZWhhdmlvciBvZiB0aGUgbGlicmFyeSBhcmUgdW5hZmZlY3RlZC4KY29uc3QgaW5mb3JtYXRpdmUgPSBudWxsOwoKTG9jYXRpb24gX2dldExvY2F0aW9uSW5Db21wb25lbnQoQ29tcG9uZW50IGNvbXBvbmVudCwgVXJpIGZpbGVVcmksIGludCBvZmZzZXQpIHsKICBpZiAoY29tcG9uZW50ICE9IG51bGwpIHsKICAgIHJldHVybiBjb21wb25lbnQuZ2V0TG9jYXRpb24oZmlsZVVyaSwgb2Zmc2V0KTsKICB9IGVsc2UgewogICAgcmV0dXJuIG5ldyBMb2NhdGlvbihmaWxlVXJpLCBUcmVlTm9kZS5ub09mZnNldCwgVHJlZU5vZGUubm9PZmZzZXQpOwogIH0KfQoKLy8vIENvbnZlcnQgdGhlIHN5bnRoZXRpYyBuYW1lIG9mIGFuIGltcGxpY2l0IG1peGluIGFwcGxpY2F0aW9uIGNsYXNzCi8vLyBpbnRvIGEgbmFtZSBzdWl0YWJsZSBmb3IgdXNlci1mYWNlZCBzdHJpbmdzLgovLy8KLy8vIEZvciBleGFtcGxlLCB3aGVuIGNvbXBpbGluZyAiY2xhc3MgQSBleHRlbmRzIFMgd2l0aCBNMSwgTTIiLCB0aGUKLy8vIHR3byBzeW50aGV0aWMgY2xhc3NlcyB3aWxsIGJlIG5hbWVkICJfQSZTJk0xIiBhbmQgIl9BJlMmTTEmTTIiLgovLy8gVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiAiUyB3aXRoIE0xIiBhbmQgIlMgd2l0aCBNMSwgTTIiLCByZXNwZWN0aXZlbHkuClN0cmluZyBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKFN0cmluZyBuYW1lKSB7CiAgTGlzdDxTdHJpbmc+IG5hbWVQYXJ0cyA9IG5hbWUuc3BsaXQoJyYnKTsKICBpZiAobmFtZVBhcnRzLmxlbmd0aCA8IDIgfHwgbmFtZSA9PSAiJiIpIHJldHVybiBuYW1lOwogIFN0cmluZyBkZW1hbmdsZWROYW1lID0gbmFtZVBhcnRzWzFdOwogIGZvciAoaW50IGkgPSAyOyBpIDwgbmFtZVBhcnRzLmxlbmd0aDsgaSsrKSB7CiAgICBkZW1hbmdsZWROYW1lICs9IChpID09IDIgPyAiIHdpdGggIiA6ICIsICIpICsgbmFtZVBhcnRzW2ldOwogIH0KICByZXR1cm4gZGVtYW5nbGVkTmFtZTsKfQoKLy8vIEV4dHJhY3QgZnJvbSB0aGUgc3ludGhldGljIG5hbWUgb2YgYW4gaW1wbGljaXQgbWl4aW4gYXBwbGljYXRpb24gY2xhc3MKLy8vIHRoZSBuYW1lIG9mIHRoZSBmaW5hbCBzdWJjbGFzcyBvZiB0aGUgbWl4aW4gYXBwbGljYXRpb24uCi8vLwovLy8gRm9yIGV4YW1wbGUsIHdoZW4gY29tcGlsaW5nICJjbGFzcyBBIGV4dGVuZHMgUyB3aXRoIE0xLCBNMiIsIHRoZQovLy8gdHdvIHN5bnRoZXRpYyBjbGFzc2VzIHdpbGwgYmUgbmFtZWQgIl9BJlMmTTEiIGFuZCAiX0EmUyZNMSZNMiIuCi8vLyBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuICJBIiBm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LyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgpsaWJyYXJ5IGtlcm5lbC50YXJnZXQudGFyZ2V0czsKCmltcG9ydCAnLi4vYXN0LmRhcnQnOwppbXBvcnQgJy4uL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JzsKaW1wb3J0ICcuLi9jb3JlX3R5cGVzLmRhcnQnOwoKZmluYWwgTGlzdDxTdHJpbmc+IHRhcmdldE5hbWVzID0gdGFyZ2V0cy5rZXlzLnRvTGlzdCgpOwoKY2xhc3MgVGFyZ2V0RmxhZ3MgewogIGZpbmFsIGJvb2wgbGVnYWN5TW9kZTsKICBmaW5hbCBib29sIHRyYWNrV2lkZ2V0Q3JlYXRpb247CgogIFRhcmdldEZsYWdzKHt0aGlzLmxlZ2FjeU1vZGUgPSBmYWxzZSwgdGhpcy50cmFja1dpZGdldENyZWF0aW9uID0gZmFsc2V9KTsKfQoKdHlwZWRlZiBUYXJnZXQgX1RhcmdldEJ1aWxkZXIoVGFyZ2V0RmxhZ3MgZmxhZ3MpOwoKZmluYWwgTWFwPFN0cmluZywgX1RhcmdldEJ1aWxkZXI+IHRhcmdldHMgPSA8U3RyaW5nLCBfVGFyZ2V0QnVpbGRlcj57CiAgJ25vbmUnOiAoVGFyZ2V0RmxhZ3MgZmxhZ3MpID0+IG5ldyBOb25lVGFyZ2V0KGZsYWdzKSwKfTsKClRhcmdldCBnZXRUYXJnZXQoU3RyaW5nIG5hbWUsIFRhcmdldEZsYWdzIGZsYWdzKSB7CiAgdmFyIGJ1aWxkZXIgPSB0YXJnZXRzW25hbWVdOwogIGlmIChidWlsZGVyID09IG51bGwpIHJldHVybiBudWxsOwogIHJldHVybiBidWlsZGVyKGZsYWdzKTsKfQoKYWJzdHJhY3QgY2xhc3MgRGlhZ25vc3RpY1JlcG9ydGVyPE0sIEM+IHsKICB2b2lkIHJlcG9ydChNIG1lc3NhZ2UsIGludCBjaGFyT2Zmc2V0LCBpbnQgbGVuZ3RoLCBVcmkgZmlsZVVyaSwKICAgICAge0xpc3Q8Qz4gY29udGV4dH0pOwp9CgovLy8gVGhlIGRpZmZlcmVudCBraW5kcyBvZiBudW1iZXIgc2VtYW50aWNzIHN1cHBvcnRlZCBieSB0aGUgY29uc3RhbnQgZXZhbHVhdG9yLgplbnVtIE51bWJlclNlbWFudGljcyB7CiAgLy8vIERhcnQgVk0gbnVtYmVyIHNlbWFudGljcy4KICB2bSwKCiAgLy8vIEphdmFTY3JpcHQgKERhcnQyanMgYW5kIEREQykgbnVtYmVyIHNlbWFudGljcy4KICBqcywKfQoKLy8gQmFja2VuZCBzcGVjaWZpYyBjb25zdGFudCBldmFsdWF0aW9uIGJlaGF2aW9yCmNsYXNzIENvbnN0YW50c0JhY2tlbmQgewogIGNvbnN0IENvbnN0YW50c0JhY2tlbmQoKTsKCiAgLy8vIExvd2VyaW5nIG9mIGEgbGlzdCBjb25zdGFudCB0byBhIGJhY2tlbmQtc3BlY2lmaWMgcmVwcmVzZW50YXRpb24uCiAgQ29uc3RhbnQgbG93ZXJMaXN0Q29uc3RhbnQoTGlzdENvbnN0YW50IGNvbnN0YW50KSA9PiBjb25zdGFudDsKCiAgLy8vIExvd2VyaW5nIG9mIGEgc2V0IGNvbnN0YW50IHRvIGEgYmFja2VuZC1zcGVjaWZpYyByZXByZXNlbnRhdGlvbi4KICBDb25zdGFudCBsb3dlclNldENvbnN0YW50KFNldENvbnN0YW50IGNvbnN0YW50KSA9PiBjb25zdGFudDsKCiAgLy8vIExvd2VyaW5nIG9mIGEgbWFwIGNvbnN0YW50IHRvIGEgYmFja2VuZC1zcGVjaWZpYyByZXByZXNlbnRhdGlvbi4KICBDb25zdGFudCBsb3dlck1hcENvbnN0YW50KE1hcENvbnN0YW50IGNvbnN0YW50KSA9PiBjb25zdGFudDsKCiAgLy8vIE51bWJlciBzZW1hbnRpY3MgdG8gdXNlIGZvciB0aGlzIGJhY2tlbmQuCiAgTnVtYmVyU2VtYW50aWNzIGdldCBudW1iZXJTZW1hbnRpY3MgPT4gTnVtYmVyU2VtYW50aWNzLnZtOwoKICAvLy8gSW5saW5lIGNvbnRyb2wgb2YgY29uc3RhbnQgdmFyaWFibGVzLiBUaGUgZ2l2ZW4gY29uc3RhbnQgZXhwcmVzc2lvbgogIC8vLyBpcyB0aGUgaW5pdGlhbGl6ZXIgb2YgYSBbRmllbGRdIG9yIFtWYXJpYWJsZURlY2xhcmF0aW9uXSBub2RlLgogIC8vLyBJZiB0aGlzIG1ldGhvZCByZXR1cm5zIGB0cnVlYCwgdGhlIHZhcmlhYmxlIHdpbGwgYmUgaW5saW5lZCBhdCBhbGwKICAvLy8gcG9pbnRzIG9mIHJlZmVyZW5jZSBhbmQgdGhlIHZhcmlhYmxlIGl0c2VsZiByZW1vdmVkICh1bmxlc3Mgb3ZlcnJpZGRlbgogIC8vLyBieSB0aGUgYGtlZXBGaWVsZHNgIG9yIGBrZWVwVmFyaWFibGVzYCBmbGFnIHRvIHRoZSBjb25zdGFudCB0cmFuc2Zvcm1lcikuCiAgLy8vIFRoaXMgbWV0aG9kIG11c3QgYmUgZGV0ZXJtaW5pc3RpYywgaS5lLiBpdCBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUKICAvLy8gdmFsdWUgZm9yIHRoZSBzYW1lIGNvbnN0YW50IHZhbHVlIGFuZCBwbGFjZSBpbiB0aGUgQVNULgogIGJvb2wgc2hvdWxkSW5saW5lQ29uc3RhbnQoQ29uc3RhbnRFeHByZXNzaW9uIGluaXRpYWxpemVyKSA9PiB0cnVlOwoKICAvLy8gV2hldGhlciB0aGlzIHRhcmdldCBzdXBwb3J0cyB1bmV2YWx1YXRlZCBjb25zdGFudHMuCiAgLy8vCiAgLy8vIElmIG5vdCwgdGhlbiB0cnlpbmcgdG8gcGVyZm9ybSBjb25zdGFudCBldmFsdWF0aW9uIHdpdGhvdXQgYW4gZW52aXJvbm1lbnQKICAvLy8gcmFpc2VzIGFuIGV4Y2VwdGlvbi4KICAvLy8KICAvLy8gVGhpcyBkZWZhdWx0cyB0byBgZmFsc2VgIHNpbmNlIGl0IHJlcXVpcmVzIGFkZGl0aW9uYWwgd29yayBmb3IgYSBiYWNrZW5kCiAgLy8vIHRvIHN1cHBvcnQgdW5ldmFsdWF0ZWQgY29uc3RhbnRzLgogIGJvb2wgZ2V0IHN1cHBvcnRzVW5ldmFsdWF0ZWRDb25zdGFudHMgPT4gZmFsc2U7Cn0KCi8vLyBBIHRhcmdldCBwcm92aWRlcyBiYWNrZW5kLXNwZWNpZmljIG9wdGlvbnMgZm9yIGdlbmVyYXRpbmcga2VybmVsIElSLgphYnN0cmFjdCBjbGFzcyBUYXJnZXQgewogIFN0cmluZyBnZXQgbmFtZTsKCiAgLy8vIEEgbGlzdCBvZiBVUklzIG9mIHJlcXVpcmVkIGxpYnJhcmllcywgbm90IGluY2x1ZGluZyBkYXJ0OmNvcmUuCiAgLy8vCiAgLy8vIExpYnJhcmllcyB3aWxsIGJlIGxvYWRlZCBpbiBvcmRlci4KICBMaXN0PFN0cmluZz4gZ2V0IGV4dHJhUmVxdWlyZWRMaWJyYXJpZXMgPT4gY29uc3QgPFN0cmluZz5bXTsKCiAgLy8vIEEgbGlzdCBvZiBVUklzIG9mIGxpYnJhcmllcyB0byBiZSBpbmRleGVkIGluIHRoZSBDb3JlVHlwZXMgaW5kZXgsIG5vdAogIC8vLyBpbmNsdWRpbmcgZGFydDpfaW50ZXJuYWwsIGRhcnQ6YXN5bmMsIGRhcnQ6Y29yZSBhbmQgZGFydDptaXJyb3JzLgogIExpc3Q8U3RyaW5nPiBnZXQgZXh0cmFJbmRleGVkTGlicmFyaWVzID0+IGNvbnN0IDxTdHJpbmc+W107CgogIC8vLyBBZGRpdGlvbmFsIGRlY2xhcmVkIHZhcmlhYmxlcyBpbXBsaWVkIGJ5IHRoaXMgdGFyZ2V0LgogIC8vLwogIC8vLyBUaGVzZSBjYW4gYWxzbyBiZSBwYXNzZWQgb24gdGhlIGNvbW1hbmQtbGluZSBvZiBmb3JtIGAtRDxuYW1lPj08dmFsdWU+YCwKICAvLy8gYW5kIHRob3NlIHByb3ZpZGVkIG9uIHRoZSBjb21tYW5kLWxpbmUgdGFrZSBwcmVjZWRlbmNlIG92ZXIgdGhvc2UgZGVmaW5lZAogIC8vLyBieSB0aGUgdGFyZ2V0LgogIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0IGV4dHJhRGVjbGFyZWRWYXJpYWJsZXMgPT4gY29uc3QgPFN0cmluZywgU3RyaW5nPnt9OwoKICAvLy8gQ2xhc3NlcyBmcm9tIHRoZSBTREsgd2hvc2UgaW50ZXJmYWNlIGlzIHJlcXVpcmVkIGZvciB0aGUgbW9kdWxhcgogIC8vLyB0cmFuc2Zvcm1hdGlvbnMuCiAgTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBnZXQgcmVxdWlyZWRTZGtDbGFzc2VzID0+IENvcmVUeXBlcy5yZXF1aXJlZENsYXNzZXM7CgogIGJvb2wgZ2V0IGxlZ2FjeU1vZGU7CgogIC8vLyBBIGRlcml2ZWQgY2xhc3MgbWF5IGNoYW5nZSB0aGlzIHRvIGB0cnVlYCB0byBlbmFibGUgZm9yd2FyZGVycyB0bwogIC8vLyB1c2VyLWRlZmluZWQgYG5vU3VjaE1ldGhvZGAgdGhhdCBhcmUgZ2VuZXJhdGVkIGZvciBlYWNoIGFic3RyYWN0IG1lbWJlcgogIC8vLyBpZiBzdWNoIGBub1N1Y2hNZXRob2RgIGlzIHByZXNlbnQuCiAgLy8vCiAgLy8vIFRoZSBmb3J3YXJkZXJzIGFyZSBhYnN0cmFjdCBbUHJvY2VkdXJlXXMgd2l0aCBbaXNOb1N1Y2hNZXRob2RGb3J3YXJkZXJdCiAgLy8vIGJpdCBzZXQuICBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGJlaGF2aW9yIG9mIHN1Y2ggZm9yd2FyZGVycyBpcyB1cAogIC8vLyBmb3IgdGhlIHRhcmdldCBiYWNrZW5kLgogIGJvb2wgZ2V0IGVuYWJsZU5vU3VjaE1ldGhvZEZvcndhcmRlcnMgPT4gZmFsc2U7CgogIC8vLyBBIGRlcml2ZWQgY2xhc3MgbWF5IGNoYW5nZSB0aGlzIHRvIGB0cnVlYCB0byBlbmFibGUgRmx1dHRlciBzcGVjaWZpYwogIC8vLyAic3VwZXItbWl4aW5zIiBzZW1hbnRpY3MuCiAgLy8vCiAgLy8vIFRoaXMgc2VtYW50aWNzIHJlbGF4ZXMgYSBudW1iZXIgb2YgY29uc3RyYWludCBwcmV2aW91c2x5IGltcG9zZWQgb24KICAvLy8gbWl4aW5zLiBJbXBvcnRhbnRseSBpdCBpbXBvc2VzIHRoZSBmb2xsb3dpbmcgY2hhbmdlOgogIC8vLwogIC8vLyAgICAgQW4gYWJzdHJhY3QgY2xhc3MgbWF5IGNvbnRhaW4gYSBtZW1iZXIgd2l0aCBhIHN1cGVyLWludm9jYXRpb24gdGhhdAogIC8vLyAgICAgY29ycmVzcG9uZHMgdG8gYSBtZW1iZXIgb2YgdGhlIHN1cGVyY2xhc3MgaW50ZXJmYWNlLCBidXQgd2hlcmUgdGhlCiAgLy8vICAgICBhY3R1YWwgc3VwZXJjbGFzcyBkb2VzIG5vdCBkZWNsYXJlIG9yIGluaGVyaXQgYSBtYXRjaGluZyBtZXRob2QuCiAgLy8vICAgICBTaW5jZSBubyBhbW91bnQgb2Ygb3ZlcnJpZGluZyBjYW4gY2hhbmdlIHRoaXMgcHJvcGVydHksIHN1Y2ggYSBjbGFzcwogIC8vLyAgICAgY2Fubm90IGJlIGV4dGVuZGVkIHRvIGEgY2xhc3MgdGhhdCBpcyBub3QgYWJzdHJhY3QsIGl0IGNhbiBvbmx5IGJlCiAgLy8vICAgICB1c2VkIHRvIGRlcml2ZSBhIG1peGluIGZyb20uCiAgLy8vCiAgLy8vIFNlZSBkYXJ0YnVnLmNvbS8zMTU0MiBmb3IgZGV0YWlscyBvZiB0aGUgc2VtYW50aWNzLgogIGJvb2wgZ2V0IGVuYWJsZVN1cGVyTWl4aW5zID0+IGZhbHNlOwoKICAvLy8gUGVyZm9ybSB0YXJnZXQtc3BlY2lmaWMgdHJhbnNmb3JtYXRpb25zIG9uIHRoZSBvdXRsaW5lcyBzdG9yZWQgaW4KICAvLy8gW0NvbXBvbmVudF0gd2hlbiBnZW5lcmF0aW5nIHN1bW1hcmllcy4KICAvLy8KICAvLy8gVGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyB1c2VkIHRvIGFkZCBtZXRhZGF0YSBvbiBvdXRsaW5lcyBhbmQgdG8gZmlsdGVyCiAgLy8vIHVubmVjZXNzYXJ5IGluZm9ybWF0aW9uIGJlZm9yZSBnZW5lcmF0aW5nIHByb2dyYW0gc3VtbWFyaWVzLiBUaGlzCiAgLy8vIHRyYW5zZm9ybWF0aW9uIGlzIG5vdCBhcHBsaWVkIHdoZW4gY29tcGlsaW5nIGZ1bGwga2VybmVsIHByb2dyYW1zIHRvCiAgLy8vIHByZXZlbnQgYWZmZWN0aW5nIHRoZSBpbnRlcm5hbCBpbnZhcmlhbnRzIG9mIHRoZSBjb21waWxlciBhbmQgYWNjaWRlbnRhbGx5CiAgLy8vIHNsb3dpbmcgZG93biBjb21waWxhdGlvbi4KICB2b2lkIHBlcmZvcm1PdXRsaW5lVHJhbnNmb3JtYXRpb25zKENvbXBvbmVudCBjb21wb25lbnQpIHt9CgogIC8vLyBQZXJmb3JtIHRhcmdldC1zcGVjaWZpYyB0cmFuc2Zvcm1hdGlvbnMgb24gdGhlIGdpdmVuIGxpYnJhcmllcyB0aGF0IG11c3QKICAvLy8gcnVuIGJlZm9yZSBjb25zdGFudCBldmFsdWF0aW9uLgogIHZvaWQgcGVyZm9ybVByZUNvbnN0YW50RXZhbHVhdGlvblRyYW5zZm9ybWF0aW9ucygKICAgICAgQ29tcG9uZW50IGNvbXBvbmVudCwKICAgICAgQ29yZVR5cGVzIGNvcmVUeXBlcywKICAgICAgTGlzdDxMaWJyYXJ5PiBsaWJyYXJpZXMsCiAgICAgIERpYWdub3N0aWNSZXBvcnRlciBkaWFnbm9zdGljUmVwb3J0ZXIsCiAgICAgIHt2b2lkIGxvZ2dlcihTdHJpbmcgbXNnKX0pIHt9CgogIC8vLyBQZXJmb3JtIHRhcmdldC1zcGVjaWZpYyBtb2R1bGFyIHRyYW5zZm9ybWF0aW9ucyBvbiB0aGUgZ2l2ZW4gbGlicmFyaWVzLgogIHZvaWQgcGVyZm9ybU1vZHVsYXJUcmFuc2Zvcm1hdGlvbnNPbkxpYnJhcmllcygKICAgICAgQ29tcG9uZW50IGNvbXBvbmVudCwKICAgICAgQ29yZVR5cGVzIGNvcmVUeXBlcywKICAgICAgQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5LAogICAgICBMaXN0PExpYnJhcnk+IGxpYnJhcmllcywKICAgICAgLy8gVE9ETyhhc2tlc2MpOiBDb25zaWRlciBob3cgdG8gZ2VuZXJhbGx5IHBhc3MgY29tcGlsZXIgb3B0aW9ucyB0bwogICAgICAvLyB0cmFuc2Zvcm1hdGlvbnMuCiAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnREZWZpbmVzLAogICAgICBEaWFnbm9zdGljUmVwb3J0ZXIgZGlhZ25vc3RpY1JlcG9ydGVyLAogICAgICB7dm9pZCBsb2dnZXIoU3RyaW5nIG1zZyl9KTsKCiAgLy8vIFBlcmZvcm0gdGFyZ2V0LXNwZWNpZmljIG1vZHVsYXIgdHJhbnNmb3JtYXRpb25zIG9uIHRoZSBnaXZlbiBwcm9ncmFtLgogIC8vLwogIC8vLyBUaGlzIGlzIHVzZWQgd2hlbiBhbiBpbmRpdmlkdWFsIGV4cHJlc3Npb24gaXMgY29tcGlsZWQsIGUuZy4gZm9yIGRlYnVnZ2luZwogIC8vLyBwdXJwb3Nlcy4gSXQgaXMgaWxsZWdhbCB0byBtb2RpZnkgYW55IG9mIHRoZSBlbmNsb3Npbmcgbm9kZXMgb2YgdGhlCiAgLy8vIHByb2NlZHVyZS4KICB2b2lkIHBlcmZvcm1UcmFuc2Zvcm1hdGlvbnNPblByb2NlZHVyZSgKICAgICAgQ29yZVR5cGVzIGNvcmVUeXBlcywgQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5LCBQcm9jZWR1cmUgcHJvY2VkdXJlLAogICAgICB7dm9pZCBsb2dnZXIoU3RyaW5nIG1zZyl9KSB7fQoKICAvLy8gV2hldGhlciBhIHBsYXRmb3JtIGxpYnJhcnkgbWF5IGRlZmluZSBhIHJlc3RyaWN0ZWQgdHlwZSwgc3VjaCBhcyBgYm9vbGAsCiAgLy8vIGBpbnRgLCBgZG91YmxlYCwgYG51bWAsIGFuZCBgU3RyaW5nYC4KICAvLy8KICAvLy8gQnkgZGVmYXVsdCBvbmx5IGBkYXJ0OmNvcmVgIG1heSBkZWZpbmUgcmVzdHJpY3RlZCB0eXBlcywgYnV0IHNvbWUgdGFyZ2V0CiAgLy8vIGltcGxlbWVudGF0aW9ucyBvdmVycmlkZSB0aGlzLgogIGJvb2wgbWF5RGVmaW5lUmVzdHJpY3RlZFR5cGUoVXJpIHVyaSkgPT4KICAgICAgdXJpLnNjaGVtZSA9PSAnZGFydCcgJiYgdXJpLnBhdGggPT0gJ2NvcmUnOwoKICAvLy8gV2hldGhlciBhIGxpYnJhcnkgaXMgYWxsb3dlZCB0byBpbXBvcnQgYSBwbGF0Zm9ybSBwcml2YXRlIGxpYnJhcnkuCiAgLy8vCiAgLy8vIEJ5IGRlZmF1bHQgb25seSBgZGFydDoqYCBsaWJyYXJpZXMgYXJlIGFsbG93ZWQuIE1heSBiZSBvdmVycmlkZGVuIGZvcgogIC8vLyB0ZXN0aW5nIHB1cnBvc2VzLgogIGJvb2wgYWxsb3dQbGF0Zm9ybVByaXZhdGVMaWJyYXJ5QWNjZXNzKFVyaSBpbXBvcnRlciwgVXJpIGltcG9ydGVkKSA9PgogICAgICBpbXBvcnRlZC5zY2hlbWUgIT0gImRhcnQiIHx8CiAgICAgICFpbXBvcnRlZC5wYXRoLnN0YXJ0c1dpdGgoIl8iKSB8fAogICAgICBpbXBvcnRlci5zY2hlbWUgPT0gImRhcnQiIHx8CiAgICAgIChpbXBvcnRlci5zY2hlbWUgPT0gInBhY2thZ2UiICYmCiAgICAgICAgICBpbXBvcnRlci5wYXRoLnN0YXJ0c1dpdGgoImRhcnRfaW50ZXJuYWwvIikpOwoKICAvLy8gV2hldGhlciB0aGUgYG5hdGl2ZWAgbGFuZ3VhZ2UgZXh0ZW5zaW9uIGlzIHN1cHBvcnRlZCB3aXRoaW4gW2xpYnJhcnldLgogIC8vLwogIC8vLyBUaGUgYG5hdGl2ZWAgbGFuZ3VhZ2UgZXh0ZW5zaW9uIGlzIG5vdCBwYXJ0IG9mIHRoZSBsYW5ndWFnZSBzcGVjaWZpY2F0aW9uLAogIC8vLyBpdCBtZWFucyBzb21ldGhpbmcgZWxzZSB0byBlYWNoIHRhcmdldCwgYW5kIGl0IGlzIGVuYWJsZWQgdW5kZXIgZGlmZmVyZW50CiAgLy8vIGNpcmN1bXN0YW5jZXMgZm9yIGVhY2ggdGFyZ2V0IGltcGxlbWVudGF0aW9uLiBGb3IgZXhhbXBsZSwgdGhlIFZNIHRhcmdldAogIC8vLyBlbmFibGVzIGl0IGV2ZXJ5d2hlcmUgYmVjYXVzZSBvZiBleGlzdGluZyBzdXBwb3J0IGZvciAiZGFydC1leHQ6IiBuYXRpdmUKICAvLy8gZXh0ZW5zaW9ucywgYnV0IHRhcmdldHMgbGlrZSBkYXJ0MmpzIG9ubHkgZW5hYmxlIGl0IG9uIHRoZSBjb3JlIGxpYnJhcmllcy4KICBib29sIGVuYWJsZU5hdGl2ZShVcmkgdXJpKSA9PiBmYWxzZTsKCiAgLy8vIFRoZXJlIGFyZSB0d28gdmFyaWFudHMgb2YgdGhlIGBuYXRpdmVgIGxhbmd1YWdlIGV4dGVuc2lvbi4gVGhlIFZNIGV4cGVjdHMKICAvLy8gdGhlIG5hdGl2ZSB0b2tlbiB0byBiZSBmb2xsb3dlZCBieSBzdHJpbmcsIHdoZXJlYXMgZGFydDJqcyBhbmQgRERDIGRvIG5vdC4KICAvLyBUT0RPKHNpZ211bmQsIGFoZSk6IGlkZWFsbHkgd2Ugc2hvdWxkIHJlbW92ZSB0aGUgYG5hdGl2ZWAgc3ludGF4LCBpZiBub3QsCiAgLy8gd2Ugc2hvdWxkIGF0IGxlYXN0IHVuaWZ5IHRoZSBWTSBhbmQgbm9uLVZNIHZhcmlhbnRzLgogIGJvb2wgZ2V0IG5hdGl2ZUV4dGVuc2lvbkV4cGVjdHNTdHJpbmcgPT4gZmFsc2U7CgogIC8vLyBXaGV0aGVyIGludGVnZXIgbGl0ZXJhbHMgdGhhdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgZXhhY3RseSBvbiB0aGUgd2ViCiAgLy8vIChpLmUuIGluIEphdmFzY3JpcHQpIHNob3VsZCBjYXVzZSBhbiBlcnJvciB0byBiZSBpc3N1ZWQuCiAgLy8vIEFuIGV4YW1wbGUgb2Ygc3VjaCBhIG51bWJlciBpcyBgMl41MyArIDFgIHdoZXJlIGluIEphdmFzY3JpcHQgLSBiZWNhdXNlCiAgLy8vIGludGVnZXJzIGFyZSByZXByZXNlbnRlZCBhcyBkb3VibGVzCiAgLy8vIGBNYXRoLnBvdygyLCA1MykgPSBNYXRoLnBvdygyLCA1MykgKyAxYC4KICBib29sIGdldCBlcnJvck9uVW5leGFjdFdlYkludExpdGVyYWxzID0+IGZhbHNlOwoKICAvLy8gV2hldGhlciBzZXQgbGl0ZXJhbHMgYXJlIG5hdGl2ZWx5IHN1cHBvcnRlZCBieSB0aGlzIHRhcmdldC4gSWYgc2V0CiAgLy8vIGxpdGVyYWxzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB0YXJnZXQsIHRoZXkgd2lsbCBiZSBkZXN1Z2FyZWQgaW50bwogIC8vLyBleHBsaWNpdCBgU2V0YCBjcmVhdGlvbiAoZm9yIG5vbi1jb25zdCBzZXQgbGl0ZXJhbHMpIG9yIHdyYXBwZWQgbWFwCiAgLy8vIGxpdGVyYWxzIChmb3IgY29uc3Qgc2V0IGxpdGVyYWxzKS4KICBib29sIGdldCBzdXBwb3J0c1NldExpdGVyYWxzID0+IHRydWU7CgogIC8vLyBCdWlsZHMgYW4gZXhwcmVzc2lvbiB0aGF0IGluc3RhbnRpYXRlcyBhbiBbSW52b2NhdGlvbl0gdGhhdCBjYW4gYmUgcGFzc2VkCiAgLy8vIHRvIFtub1N1Y2hNZXRob2RdLgogIEV4cHJlc3Npb24gaW5zdGFudGlhdGVJbnZvY2F0aW9uKENvcmVUeXBlcyBjb3JlVHlwZXMsIEV4cHJlc3Npb24gcmVjZWl2ZXIsCiAgICAgIFN0cmluZyBuYW1lLCBBcmd1bWVudHMgYXJndW1lbnRzLCBpbnQgb2Zmc2V0LCBib29sIGlzU3VwZXIpOwoKICBFeHByZXNzaW9uIGluc3RhbnRpYXRlTm9TdWNoTWV0aG9kRXJyb3IoQ29yZVR5cGVzIGNvcmVUeXBlcywKICAgICAgRXhwcmVzc2lvbiByZWNlaXZlciwgU3RyaW5nIG5hbWUsIEFyZ3VtZW50cyBhcmd1bWVudHMsIGludCBvZmZzZXQsCiAgICAgIHtib29sIGlzTWV0aG9kOiBmYWxzZSwKICAgICAgYm9vbCBpc0dldHRlcjogZmFsc2UsCiAgICAgIGJvb2wgaXNTZXR0ZXI6IGZhbHNlLAogICAgICBib29sIGlzRmllbGQ6IGZhbHNlLAogICAgICBib29sIGlzTG9jYWxWYXJpYWJsZTogZmFsc2UsCiAgICAgIGJvb2wgaXNEeW5hbWljOiBmYWxzZSwKICAgICAgYm9vbCBpc1N1cGVyOiBmYWxzZSwKICAgICAgYm9vbCBpc1N0YXRpYzogZmFsc2UsCiAgICAgIGJvb2wgaXNDb25zdHJ1Y3RvcjogZmFsc2UsCiAgICAgIGJvb2wgaXNUb3BMZXZlbDogZmFsc2V9KTsKCiAgLy8vIENvbmZpZ3VyZSB0aGUgZ2l2ZW4gW0NvbXBvbmVudF0gaW4gYSB0YXJnZXQgc3BlY2lmaWMgd2F5LgogIC8vLyBSZXR1cm5zIHRoZSBjb25maWd1cmVkIGNvbXBvbmVudC4KICBDb21wb25lbnQgY29uZmlndXJlQ29tcG9uZW50KENvbXBvbmVudCBjb21wb25lbnQpID0+IGNvbXBvbmVudDsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1RhcmdldCgkbmFtZSknOwoKICBDbGFzcyBjb25jcmV0ZUxpc3RMaXRlcmFsQ2xhc3MoQ29yZVR5cGVzIGNvcmVUeXBlcykgPT4gbnVsbDsKICBDbGFzcyBjb25jcmV0ZUNvbnN0TGlzdExpdGVyYWxDbGFzcyhDb3JlVHlwZXMgY29yZVR5cGVzKSA9PiBudWxsOwoKICBDbGFzcyBjb25jcmV0ZU1hcExpdGVyYWxDbGFzcyhDb3JlVHlwZXMgY29yZVR5cGVzKSA9PiBudWxsOwogIENsYXNzIGNvbmNyZXRlQ29uc3RNYXBMaXRlcmFsQ2xhc3MoQ29yZVR5cGVzIGNvcmVUeXBlcykgPT4gbnVsbDsKCiAgQ2xhc3MgY29uY3JldGVJbnRMaXRlcmFsQ2xhc3MoQ29yZVR5cGVzIGNvcmVUeXBlcywgaW50IHZhbHVlKSA9PiBudWxsOwogIENsYXNzIGNvbmNyZXRlU3RyaW5nTGl0ZXJhbENsYXNzKENvcmVUeXBlcyBjb3JlVHlwZXMsIFN0cmluZyB2YWx1ZSkgPT4gbnVsbDsKCiAgQ29uc3RhbnRzQmFja2VuZCBjb25zdGFudHNCYWNrZW5kKENvcmVUeXBlcyBjb3JlVHlwZXMpOwp9CgpjbGFzcyBOb25lQ29uc3RhbnRzQmFja2VuZCBleHRlbmRzIENvbnN0YW50c0JhY2tlbmQgewogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgc3VwcG9ydHNVbmV2YWx1YXRlZENvbnN0YW50czsKCiAgY29uc3QgTm9uZUNvbnN0YW50c0JhY2tlbmQoe3RoaXMuc3VwcG9ydHNVbmV2YWx1YXRlZENvbnN0YW50c30pOwp9CgpjbGFzcyBOb25lVGFyZ2V0IGV4dGVuZHMgVGFyZ2V0IHsKICBmaW5hbCBUYXJnZXRGbGFncyBmbGFnczsKCiAgTm9uZVRhcmdldCh0aGlzLmZsYWdzKTsKCiAgYm9vbCBnZXQgbGVnYWN5TW9kZSA9PiBmbGFncy5sZWdhY3lNb2RlOwogIFN0cmluZyBnZXQgbmFtZSA9PiAnbm9uZSc7CiAgTGlzdDxTdHJpbmc+IGdldCBleHRyYVJlcXVpcmVkTGlicmFyaWVzID0+IDxTdHJpbmc+W107CiAgdm9pZCBwZXJmb3JtTW9kdWxhclRyYW5zZm9ybWF0aW9uc09uTGlicmFyaWVzKAogICAgICBDb21wb25lbnQgY29tcG9uZW50LAogICAgICBDb3JlVHlwZXMgY29yZVR5cGVzLAogICAgICBDbGFzc0hpZXJhcmNoeSBoaWVyYXJjaHksCiAgICAgIExpc3Q8TGlicmFyeT4gbGlicmFyaWVzLAogICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50RGVmaW5lcywKICAgICAgRGlhZ25vc3RpY1JlcG9ydGVyIGRpYWdub3N0aWNSZXBvcnRlciwKICAgICAge3ZvaWQgbG9nZ2VyKFN0cmluZyBtc2cpfSkge30KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBpbnN0YW50aWF0ZUludm9jYXRpb24oQ29yZVR5cGVzIGNvcmVUeXBlcywgRXhwcmVzc2lvbiByZWNlaXZlciwKICAgICAgU3RyaW5nIG5hbWUsIEFyZ3VtZW50cyBhcmd1bWVudHMsIGludCBvZmZzZXQsIGJvb2wgaXNTdXBlcikgewogICAgcmV0dXJuIG5ldyBJbnZhbGlkRXhwcmVzc2lvbihudWxsKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gaW5zdGFudGlhdGVOb1N1Y2hNZXRob2RFcnJvcihDb3JlVHlwZXMgY29yZVR5cGVzLAogICAgICBFeHByZXNzaW9uIHJlY2VpdmVyLCBTdHJpbmcgbmFtZSwgQXJndW1lbnRzIGFyZ3VtZW50cywgaW50IG9mZnNldCwKICAgICAge2Jvb2wgaXNNZXRob2Q6IGZhbHNlLAogICAgICBib29sIGlzR2V0dGVyOiBmYWxzZSwKICAgICAgYm9vbCBpc1NldHRlcjogZmFsc2UsCiAgICAgIGJvb2wgaXNGaWVsZDogZmFsc2UsCiAgICAgIGJvb2wgaXNMb2NhbFZhcmlhYmxlOiBmYWxzZSwKICAgICAgYm9vbCBpc0R5bmFtaWM6IGZhbHNlLAogICAgICBib29sIGlzU3VwZXI6IGZhbHNlLAogICAgICBib29sIGlzU3RhdGljOiBmYWxzZSwKICAgICAgYm9vbCBpc0NvbnN0cnVjdG9yOiBmYWxzZSwKICAgICAgYm9vbCBpc1RvcExldmVsOiBmYWxzZX0pIHsKICAgIHJldHVybiBuZXcgSW52YWxpZEV4cHJlc3Npb24obnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudHNCYWNrZW5kIGNvbnN0YW50c0JhY2tlbmQoQ29yZVR5cGVzIGNvcmVUeXBlcykgPT4KICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU2hvdWxkIHRoaXMgdmFyeSB3aXRoIHRoZSB1c2UgY2FzZT8KICAgICAgY29uc3QgTm9uZUNvbnN0YW50c0JhY2tlbmQoc3VwcG9ydHNVbmV2YWx1YXRlZENvbnN0YW50czogdHJ1ZSk7Cn0KgTIATk48HwEWIh0BOAEUGSIBTAIBMgFGOAMBMx8kGQIBKkIaAgFRFyAGATUGAgExGRwBSEEBRz8BRz8BMD0BSkVJTVBNPkUBOgZQGwZPKDICAUkYEwFFBik/AUxIPgE8Bk9QFU4BRxdRARcBSE4pBk5MHjIBSyAGSjsGTk1LT00nBjonAUgtBkxIS1EgPQFPJjQbGx8tJAFOMRsbIB9KGi4tIgFMBlFKESpKJAFPLAZPJSsyAUkGTBhIIygjJzcBTQZRUE9PUScBUFFPOjIBTT9OKi8yAUlMSikoAVAZTUMBP0kdHBwbIx0bHCEgAUAoQgEoAT9EAT5DAUlPAToCATYMKwFDAgEiGwEaASsdOTEbGyAfLi0kAQxNRCgEAQw/SR0cHBsjHRscISEoBAEMPEJGAgEicGFja2FnZTprZXJuZWwvdGFyZ2V0L3RhcmdldHMuZGFydEJzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvYXBpX3Byb3RvdHlwZS9jb21waWxlcl9vcHRpb25zLmRhcnSvjy8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZyb250X2VuZC5jb21waWxlcl9vcHRpb25zOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMga2VybmVsIHNob3cgTGlicmFyeTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdGFyZ2V0L3RhcmdldHMuZGFydCcgc2hvdyBUYXJnZXQ7CgppbXBvcnQgJ2RpYWdub3N0aWNfbWVzc2FnZS5kYXJ0JyBzaG93IERpYWdub3N0aWNNZXNzYWdlSGFuZGxlcjsKCmltcG9ydCAnZXhwZXJpbWVudGFsX2ZsYWdzLmRhcnQnCiAgICBzaG93CiAgICAgICAgZGVmYXVsdEV4cGVyaW1lbnRhbEZsYWdzLAogICAgICAgIEV4cGVyaW1lbnRhbEZsYWcsCiAgICAgICAgZXhwaXJlZEV4cGVyaW1lbnRhbEZsYWdzLAogICAgICAgIHBhcnNlRXhwZXJpbWVudGFsRmxhZzsKCmltcG9ydCAnZmlsZV9zeXN0ZW0uZGFydCcgc2hvdyBGaWxlU3lzdGVtOwoKaW1wb3J0ICdzdGFuZGFyZF9maWxlX3N5c3RlbS5kYXJ0JyBzaG93IFN0YW5kYXJkRmlsZVN5c3RlbTsKCmV4cG9ydCAnZGlhZ25vc3RpY19tZXNzYWdlLmRhcnQnIHNob3cgRGlhZ25vc3RpY01lc3NhZ2U7CgovLy8gRnJvbnQtZW5kIG9wdGlvbnMgcmVsZXZhbnQgdG8gY29tcGlsZXIgYmFjayBlbmRzLgovLy8KLy8vIE5vdCBpbnRlbmRlZCB0byBiZSBpbXBsZW1lbnRlZCBvciBleHRlbmRlZCBieSBjbGllbnRzLgpjbGFzcyBDb21waWxlck9wdGlvbnMgewogIC8vLyBUaGUgVVJJIG9mIHRoZSByb290IG9mIHRoZSBEYXJ0IFNESyAodHlwaWNhbGx5IGEgImZpbGU6IiBVUkkpLgogIC8vLwogIC8vLyBJZiBgbnVsbGAsIHRoZSBTREsgd2lsbCBiZSBzZWFyY2hlZCBmb3IgdXNpbmcKICAvLy8gW1BsYXRmb3JtLnJlc29sdmVkRXhlY3V0YWJsZV0gYXMgYSBzdGFydGluZyBwb2ludC4KICBVcmkgc2RrUm9vdDsKCiAgLy8vIFVyaSB0byBhIHBsYXRmb3JtIGxpYnJhcmllcyBzcGVjaWZpY2F0aW9uIGZpbGUuCiAgLy8vCiAgLy8vIEEgbGlicmFyaWVzIHNwZWNpZmljYXRpb24gZmlsZSBpcyBhIEpTT04gZmlsZSB0aGF0IGRlc2NyaWJlcyBob3cgdG8gbWFwCiAgLy8vIGBkYXJ0OipgIGxpYnJhcmllcyB0byBVUklzIGluIHRoZSB1bmRlcmx5aW5nIFtmaWxlU3lzdGVtXS4gIFNlZQogIC8vLyBgcGFja2FnZTpmcm9udF9lbmQvc3JjL2Jhc2UvbGlicmFyaWVzX3NwZWNpZmljYXRpb24uZGFydGAgZm9yIGRldGFpbHMgb24KICAvLy8gdGhlIGZvcm1hdC4KICAvLy8KICAvLy8gSWYgYSB2YWx1ZSBpcyBub3Qgc3BlY2lmaWVkIGFuZCBgY29tcGlsZVNkayA9IHRydWVgLCB0aGUgY29tcGlsZXIgd2lsbAogIC8vLyBpbmZlciBhdCBhIGRlZmF1bHQgbG9jYXRpb24gdW5kZXIgW3Nka1Jvb3RdLCB0eXBpY2FsbHkgdW5kZXIKICAvLy8gYGxpYi9saWJyYXJpZXMuanNvbmAuCiAgVXJpIGxpYnJhcmllc1NwZWNpZmljYXRpb25Vcmk7CgogIERpYWdub3N0aWNNZXNzYWdlSGFuZGxlciBvbkRpYWdub3N0aWM7CgogIC8vLyBVUkkgb2YgdGhlICIucGFja2FnZXMiIGZpbGUgKHR5cGljYWxseSBhICJmaWxlOiIgVVJJKS4KICAvLy8KICAvLy8gSWYgYG51bGxgLCB0aGUgIi5wYWNrYWdlcyIgZmlsZSB3aWxsIGJlIGZvdW5kIHZpYSB0aGUgc3RhbmRhcmQKICAvLy8gcGFja2FnZV9jb25maWcgc2VhcmNoIGFsZ29yaXRobS4KICAvLy8KICAvLy8gSWYgdGhlIFVSSSdzIHBhdGggY29tcG9uZW50IGlzIGVtcHR5IChlLmcuIGBuZXcgVXJpKClgKSwgbm8gcGFja2FnZXMgZmlsZQogIC8vLyB3aWxsIGJlIHVzZWQuCiAgVXJpIHBhY2thZ2VzRmlsZVVyaTsKCiAgLy8vIFVSSXMgb2YgaW5wdXQgc3VtbWFyeSBmaWxlcyAoZXhjbHVkaW5nIHRoZSBTREsgc3VtbWFyeTsgdHlwaWNhbGx5IHRoZXNlCiAgLy8vIHdpbGwgYmUgImZpbGU6IiBVUklzKS4KICAvLy8KICAvLy8gVGhlc2UgZmlsZXMgc2hvdWxkIGJlIHN1bW1hcnkgZmlsZXMgZ2VuZXJhdGVkIGJ5IHRoaXMgcGFja2FnZSAoYW5kIG5vdCB0aGUKICAvLy8gc2ltaWxhcmx5IG5hbWVkIHN1bW1hcnkgZmlsZXMgZnJvbSBgcGFja2FnZTphbmFseXplcmAuKQogIC8vLwogIC8vLyBTdW1tYXJpZXMgbWF5IGJlIHByb3ZpZGVkIGluIGFueSBvcmRlciwgYnV0IHRoZXkgc2hvdWxkIGJlIGFjeWNsaWMgYW5kCiAgLy8vIGNsb3NlZDogYW55IGxpYnJhcmllcyB0aGF0IHRoZXkgcmVmZXJlbmNlIHNob3VsZCBiZSBkZWZpbmVkIGluIGVpdGhlciBvbmUKICAvLy8gb2YgW2lucHV0U3VtbWFyaWVzXSBvciBbc2RrU3VtbWFyeV0uCiAgTGlzdDxVcmk+IGlucHV0U3VtbWFyaWVzID0gW107CgogIC8vLyBVUklzIG9mIG90aGVyIGtlcm5lbCBjb21wb25lbnRzIHRvIGxpbmsuCiAgLy8vCiAgLy8vIENvbW1vbmx5IHVzZWQgdG8gbGluayB0aGUgY29kZSBmb3IgdGhlIFNESyBsaWJyYXJpZXMgdGhhdCB3YXMgY29tcGlsZWQKICAvLy8gc2VwYXJhdGVseS4gRm9yIGV4YW1wbGUsIGRhcnQyanMgbmVlZHMgdG8gbGluayB0aGUgU0RLIHNvIGl0IGNhbgogIC8vLyBvcHRpbWl6ZSBhbmQgdHJlZS1zaGFrZSB0aGUgY29kZSBmb3IgdGhlIGFwcGxpY2F0aW9uLCB3aGVyZWFzIHRoZSBWTQogIC8vLyBhbHdheXMgZW1iZWRzIHRoZSBTREsgaW50ZXJuYWxseSBhbmQgZG9lc24ndCBuZWVkIGl0IGFzIHBhcnQgb2YgdGhlCiAgLy8vIHByb2dyYW0uCiAgLy8vCiAgLy8vIFRoZSBjb21wb25lbnRzIHByb3ZpZGVkIGhlcmUgc2hvdWxkIGJlIGNsb3NlZCBhbmQgYWN5Y2xpYzogYW55IGxpYnJhcmllcwogIC8vLyB0aGF0IHRoZXkgcmVmZXJlbmNlIHNob3VsZCBiZSBkZWZpbmVkIGluIGEgY29tcG9uZW50IGluCiAgLy8vIFtsaW5rZWREZXBlbmRlbmNpZXNdIG9yIGFueSBvZiB0aGUgW2lucHV0U3VtbWFyaWVzXSBvciBbc2RrU3VtbWFyeV0uCiAgTGlzdDxVcmk+IGxpbmtlZERlcGVuZGVuY2llcyA9IFtdOwoKICAvLy8gVVJJIG9mIHRoZSBTREsgc3VtbWFyeSBmaWxlICh0eXBpY2FsbHkgYSAiZmlsZToiIFVSSSkuCiAgLy8vCiAgLy8vIFRoaXMgc2hvdWxkIHNob3VsZCBiZSBhIHN1bW1hcnkgcHJldmlvdXNseSBnZW5lcmF0ZWQgYnkgdGhpcyBwYWNrYWdlIChhbmQKICAvLy8gbm90IHRoZSBzaW1pbGFybHkgbmFtZWQgc3VtbWFyeSBmaWxlcyBmcm9tIGBwYWNrYWdlOmFuYWx5emVyYC4pCiAgLy8vCiAgLy8vIElmIGBudWxsYCBhbmQgW2NvbXBpbGVTZGtdIGlzIGZhbHNlLCB0aGUgU0RLIHN1bW1hcnkgd2lsbCBiZSBzZWFyY2hlZCBmb3IKICAvLy8gYXQgYSBkZWZhdWx0IGxvY2F0aW9uIHdpdGhpbiBbc2RrUm9vdF0uCiAgVXJpIHNka1N1bW1hcnk7CgogIC8vLyBUaGUgZGVjbGFyZWQgdmFyaWFibGVzIGZvciB1c2UgYnkgY29uZmlndXJhYmxlIGltcG9ydHMgYW5kIGNvbnN0YW50CiAgLy8vIGV2YWx1YXRpb24uCiAgTWFwPFN0cmluZywgU3RyaW5nPiBkZWNsYXJlZFZhcmlhYmxlczsKCiAgLy8vIFRoZSBbRmlsZVN5c3RlbV0gd2hpY2ggc2hvdWxkIGJlIHVzZWQgYnkgdGhlIGZyb250IGVuZCB0byBhY2Nlc3MgZmlsZXMuCiAgLy8vCiAgLy8vIEFsbCBmaWxlIHN5c3RlbSBhY2Nlc3MgcGVyZm9ybWVkIGJ5IHRoZSBmcm9udCBlbmQgZ29lcyB0aHJvdWdoIHRoaXMKICAvLy8gbWVjaGFuaXNtLCB3aXRoIG9uZSBleGNlcHRpb246IGlmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCBmb3IKICAvLy8gW3BhY2thZ2VzRmlsZVVyaV0sIHRoZSBwYWNrYWdlcyBmaWxlIGlzIGxvY2F0ZWQgdXNpbmcgdGhlIGFjdHVhbCBwaHlzaWNhbAogIC8vLyBmaWxlIHN5c3RlbS4gIFRPRE8ocGF1bGJlcnJ5KTogZml4IHRoaXMuCiAgRmlsZVN5c3RlbSBmaWxlU3lzdGVtID0gU3RhbmRhcmRGaWxlU3lzdGVtLmluc3RhbmNlOwoKICAvLy8gV2hldGhlciB0byBnZW5lcmF0ZSBjb2RlIGZvciB0aGUgU0RLLgogIC8vLwogIC8vLyBCeSBkZWZhdWx0IHRoZSBmcm9udCBlbmQgcmVzb2x2ZXMgY29tcG9uZW50cyB1c2luZyBhIHByZWJ1aWx0IFNESyBzdW1tYXJ5LgogIC8vLyBXaGVuIHRoaXMgb3B0aW9uIGlzIGB0cnVlYCwgW3Nka1N1bW1hcnldIG11c3QgYmUgbnVsbC4KICBib29sIGNvbXBpbGVTZGsgPSBmYWxzZTsKCiAgQGRlcHJlY2F0ZWQKICBib29sIGNoYXNlRGVwZW5kZW5jaWVzOwoKICAvLy8gVHJ1ZSBpZiBlbmFibGluZyBsZWdhY3kgbW9kZSAoRGFydCAxIGNvbXBhdGliaWxpdHkpLgogIGJvb2wgbGVnYWN5TW9kZSA9IGZhbHNlOwoKICAvLy8gUGF0Y2ggZmlsZXMgdG8gYXBwbHkgb24gdGhlIGNvcmUgbGlicmFyaWVzIGZvciBhIHNwZWNpZmljIHRhcmdldCBwbGF0Zm9ybS4KICAvLy8KICAvLy8gS2V5cyBpbiB0aGUgbWFwIGFyZSB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSB3aXRoIG5vIGBkYXJ0OmAgcHJlZml4LCBmb3IKICAvLy8gZXhhbXBsZToKICAvLy8KICAvLy8gICAgICB7J2NvcmUnOiBbCiAgLy8vICAgICAgICAgJ2ZpbGU6Ly8vbG9jYXRpb24vb2YvY29yZS9wYXRjaF9maWxlMS5kYXJ0JywKICAvLy8gICAgICAgICAnZmlsZTovLy9sb2NhdGlvbi9vZi9jb3JlL3BhdGNoX2ZpbGUyLmRhcnQnLAogIC8vLyAgICAgICAgIF19CiAgLy8vCiAgLy8vIFRoZSB2YWx1ZXMgY2FuIGJlIGVpdGhlciBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUklzLiBBYnNvbHV0ZSBVUklzIGFyZSByZWFkCiAgLy8vIGRpcmVjdGx5LCB3aGlsZSByZWxhdGl2ZSBVUklzIGFyZSByZXNvbHZlZCBmcm9tIHRoZSBbc2RrUm9vdF0uCiAgLy8gVE9ETyhzaWdtdW5kKTogcHJvdmlkZSBhbHNvIGEgZmxhZyB0byBsb2FkIHRoaXMgZGF0YSBmcm9tIGEgZmlsZSAobGlrZQogIC8vIGxpYnJhcmllcy5qc29uKQogIE1hcDxTdHJpbmcsIExpc3Q8VXJpPj4gdGFyZ2V0UGF0Y2hlcyA9IDxTdHJpbmcsIExpc3Q8VXJpPj57fTsKCiAgLy8vIEVuYWJsZSBvciBkaXNhYmxlIGV4cGVyaW1lbnRhbCBmZWF0dXJlcy4gRmVhdHVyZXMgbWFwcGluZyB0byBgdHJ1ZWAgYXJlCiAgLy8vIGV4cGxpY2l0bHkgZW5hYmxlZC4gRmVhdHVyZXMgbWFwcGluZyB0byBgZmFsc2VgIGFyZSBleHBsaWNpdGx5IGRpc2FibGVkLgogIC8vLyBGZWF0dXJlcyBub3QgbWVudGlvbmVkIGluIHRoZSBtYXAgd2lsbCBoYXZlIHRoZWlyIGRlZmF1bHQgdmFsdWUuCiAgTWFwPEV4cGVyaW1lbnRhbEZsYWcsIGJvb2w+IGV4cGVyaW1lbnRhbEZsYWdzID0gPEV4cGVyaW1lbnRhbEZsYWcsIGJvb2w+e307CgogIC8vLyBFbnZpcm9ubWVudCBtYXAgdXNlZCB3aGVuIGV2YWx1YXRpbmcgYGJvb2wuZnJvbUVudmlyb25tZW50YCwKICAvLy8gYGludC5mcm9tRW52aXJvbm1lbnRgIGFuZCBgU3RyaW5nLmZyb21FbnZpcm9ubWVudGAgZHVyaW5nIGNvbnN0YW50CiAgLy8vIGV2YWx1YXRpb24uIElmIHRoZSBtYXAgaXMgYG51bGxgLCBhbGwgZW52aXJvbm1lbnQgY29uc3RhbnRzIHdpbGwgYmUgbGVmdAogIC8vLyB1bmV2YWx1YXRlZCBhbmQgY2FuIGJlIGV2YWx1YXRlZCBieSBhIGNvbnN0YW50IGV2YWx1YXRvciBsYXRlci4KICBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50RGVmaW5lcyA9IG51bGw7CgogIC8vLyBSZXBvcnQgYW4gZXJyb3IgaWYgYSBjb25zdGFudCBjb3VsZCBub3QgYmUgZXZhbHVhdGVkIChlaXRoZXIgYmVjYXVzZSBpdAogIC8vLyBpcyBhbiBlbnZpcm9ubWVudCBjb25zdGFudCBhbmQgbm8gZW52aXJvbm1lbnQgd2FzIHNwZWNpZmllZCwgb3IgYmVjYXVzZQogIC8vLyBpdCByZWZlcnMgdG8gYSBjb25zdHJ1Y3RvciBvciB2YXJpYWJsZSBpbml0aWFsaXplciB0aGF0IGlzIG5vdCBhdmFpbGFibGUpLgogIGJvb2wgZXJyb3JPblVuZXZhbHVhdGVkQ29uc3RhbnQgPSBmYWxzZTsKCiAgLy8vIFRoZSB0YXJnZXQgcGxhdGZvcm0gdGhhdCB3aWxsIGNvbnN1bWUgdGhlIGNvbXBpbGVkIGNvZGUuCiAgLy8vCiAgLy8vIFVzZWQgdG8gcHJvdmlkZSBwbGF0Zm9ybS1zcGVjaWZpYyBkZXRhaWxzIHRvIHRoZSBjb21waWxlciBsaWtlOgogIC8vLyAgICogdGhlIHNldCBvZiBsaWJyYXJpZXMgYXJlIHBhcnQgb2YgYSBwbGF0Zm9ybSdzIFNESyAoZS5nLiBkYXJ0Omh0bWwgZm9yCiAgLy8vICAgICBkYXJ0MmpzLCBkYXJ0OnVpIGZvciBmbHV0dGVyKS4KICAvLy8KICAvLy8gICAqIHdoYXQga2VybmVsIHRyYW5zZm9ybWF0aW9ucyBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgY29tcG9uZW50CiAgLy8vICAgICAoYXN5bmMvYXdhaXQsIG1peGluIGlubGluaW5nLCBldGMpLgogIC8vLwogIC8vLyAgICogaG93IHRvIGRlYWwgd2l0aCBub24tc3RhbmRhcmQgZmVhdHVyZXMgbGlrZSBgbmF0aXZlYCBleHRlbnNpb25zLgogIC8vLwogIC8vLyBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB0YXJnZXQgaXMgdGhlIFZNLgogIFRhcmdldCB0YXJnZXQ7CgogIC8vLyBEZXByZWNhdGVkLiBIYXMgbm8gYWZmZWN0IG9uIGZyb250LWVuZC4KICAvLyBUT0RPKGRhcnRidWcuY29tLzM3NTE0KSBSZW1vdmUgdGhpcyBmaWVsZCBvbmNlIERESyByZW1vdmVzIGl0cyB1c2VzIG9mIGl0LgogIGJvb2wgZW5hYmxlQXNzZXJ0cyA9IGZhbHNlOwoKICAvLy8gV2hldGhlciB0byBzaG93IHZlcmJvc2UgbWVzc2FnZXMgKG1haW5seSBmb3IgZGVidWdnaW5nIGFuZCBwZXJmb3JtYW5jZQogIC8vLyB0cmFja2luZykuCiAgLy8vCiAgLy8vIE1lc3NhZ2VzIGFyZSBwcmludGVkIG9uIHN0ZG91dC4KICAvLyBUT0RPKHNpZ211bmQpOiBpbXByb3ZlIHRoZSBkaWFnbm9zdGljcyBBUEkgdG8gcHJvdmlkZSBtZWNoYW5pc20gdG8KICAvLyBpbnRlcmNlcHQgdmVyYm9zZSBkYXRhIChJc3N1ZSAjMzAwNTYpCiAgYm9vbCB2ZXJib3NlID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIHRvIHJ1biBleHRyYSB2ZXJpZmljYXRpb24gc3RlcHMgdG8gdmFsaWRhdGUgdGhhdCBjb21waWxlZAogIC8vLyBjb21wb25lbnRzIGFyZSB3ZWxsIGZvcm1lZC4KICAvLy8KICAvLy8gRXJyb3JzIGFyZSByZXBvcnRlZCB2aWEgdGhlIFtvbkRpYWdub3N0aWNdIGNhbGxiYWNrLgogIGJvb2wgdmVyaWZ5ID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIHRvIGR1bXAgZ2VuZXJhdGVkIGNvbXBvbmVudHMgaW4gYSB0ZXh0IGZvcm1hdCAoYWxzbyBtYWlubHkgZm9yCiAgLy8vIGRlYnVnZ2luZykuCiAgLy8vCiAgLy8vIER1bXBlZCBkYXRhIGlzIHByaW50ZWQgaW4gc3Rkb3V0LgogIGJvb2wgZGVidWdEdW1wID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIHRvIG9taXQgdGhlIHBsYXRmb3JtIHdoZW4gc2VyaWFsaXppbmcgdGhlIHJlc3VsdCBmcm9tIGEgYGZhc3RhCiAgLy8vIGNvbXBpbGVgIHJ1bi4KICBib29sIG9taXRQbGF0Zm9ybSA9IGZhbHNlOwoKICAvLy8gV2hldGhlciB0byBzZXQgdGhlIGV4aXQgY29kZSB0byBub24temVybyBpZiBhbnkgcHJvYmxlbSAoaW5jbHVkaW5nCiAgLy8vIHdhcm5pbmcsIGV0Yy4pIGlzIGVuY291bnRlcmVkIGR1cmluZyBjb21waWxhdGlvbi4KICBib29sIHNldEV4aXRDb2RlT25Qcm9ibGVtID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIHRvIGVtYmVkIHRoZSBpbnB1dCBzb3VyY2VzIGluIGdlbmVyYXRlZCBrZXJuZWwgY29tcG9uZW50cy4KICAvLy8KICAvLy8gVGhlIGtlcm5lbCBgQ29tcG9uZW50YCBBUEkgaW5jbHVkZXMgYSBgdXJpVG9Tb3VyY2VgIG1hcCBmaWVsZCB0aGF0IGlzIHVzZWQKICAvLy8gdG8gZW1iZWQgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgc291cmNlIGZpbGVzLiBUaGlzIHBhcnQgb2YgdGhlIGtlcm5lbAogIC8vLyBBUEkgaXMgaW4gZmx1eCBhbmQgaXQgaXMgbm90IG5lY2Vzc2FyeSBmb3Igc29tZSB0b29scy4gVG9kYXkgaXQgaXMgdXNlZAogIC8vLyBmb3IgdHJhbnNsYXRpbmcgZXJyb3IgbG9jYXRpb25zIGFuZCBzdGFjayB0cmFjZXMgaW4gdGhlIFZNLgogIC8vIFRPRE8oc2lnbXVuZCk6IGNoYW5nZSB0aGUgZGVmYXVsdC4KICBib29sIGVtYmVkU291cmNlVGV4dCA9IHRydWU7CgogIC8vLyBXaGV0aGVyIHRoZSBjb21waWxlciBzaG91bGQgdGhyb3cgYXMgc29vbiBhcyBpdCBlbmNvdW50ZXJzIGEKICAvLy8gY29tcGlsYXRpb24gZXJyb3IuCiAgLy8vCiAgLy8vIFR5cGljYWxseSB1c2VkIGJ5IGRldmVsb3BlcnMgdG8gZGVidWcgaW50ZXJuYWxzIG9mIHRoZSBjb21waWxlci4KICBib29sIHRocm93T25FcnJvcnNGb3JEZWJ1Z2dpbmcgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdGhlIGNvbXBpbGVyIHNob3VsZCB0aHJvdyBhcyBzb29uIGFzIGl0IGVuY291bnRlcnMgYQogIC8vLyBjb21waWxhdGlvbiB3YXJuaW5nLgogIC8vLwogIC8vLyBUeXBpY2FsbHkgdXNlZCBieSBkZXZlbG9wZXJzIHRvIGRlYnVnIGludGVybmFscyBvZiB0aGUgY29tcGlsZXIuCiAgYm9vbCB0aHJvd09uV2FybmluZ3NGb3JEZWJ1Z2dpbmcgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdG8gZ2VuZXJhdGUgYnl0ZWNvZGUuCiAgYm9vbCBieXRlY29kZSA9IGZhbHNlOwoKICAvLy8gV2hldGhlciB0byB3cml0ZSBhIGZpbGUgKGUuZy4gYSBkaWxsIGZpbGUpIHdoZW4gcmVwb3J0aW5nIGEgY3Jhc2guCiAgYm9vbCB3cml0ZUZpbGVPbkNyYXNoUmVwb3J0ID0gdHJ1ZTsKCiAgLy8vIFRoZSBjdXJyZW50IHNkayB2ZXJzaW9uIHN0cmluZywgZS5nLiAiMi42LjAtZWRnZS5zaGExaGFzaCIuCiAgLy8vIEZvciBpbnN0YW5jZSB1c2VkIGZvciBsYW5ndWFnZSB2ZXJzaW9uaW5nIChzcGVjaWZ5aW5nIHRoZSBtYXhpbXVtCiAgLy8vIHZlcnNpb24pLgogIFN0cmluZyBjdXJyZW50U2RrVmVyc2lvbiA9ICIke2tlcm5lbC5MaWJyYXJ5LmRlZmF1bHRMYW5ndWFnZVZlcnNpb25NYWpvcn0iCiAgICAgICIuIgogICAgICAiJHtrZXJuZWwuTGlicmFyeS5kZWZhdWx0TGFuZ3VhZ2VWZXJzaW9uTWlub3J9IjsKfQoKLy8vIFBhcnNlIGV4cGVyaW1lbnRhbCBmbGFnIGFyZ3VtZW50cyBvZiB0aGUgZm9ybSAnZmxhZycgb3IgJ25vLWZsYWcnIGludG8gYSBtYXAKLy8vIGZyb20gJ2ZsYWcnIHRvIGB0cnVlYCBvciBgZmFsc2VgLCByZXNwZWN0aXZlbHkuCk1hcDxTdHJpbmcsIGJvb2w+IHBhcnNlRXhwZXJpbWVudGFsQXJndW1lbnRzKExpc3Q8U3RyaW5nPiBhcmd1bWVudHMpIHsKICBNYXA8U3RyaW5nLCBib29sPiByZXN1bHQgPSB7fTsKICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgIGZvciAoU3RyaW5nIGFyZ3VtZW50IGluIGFyZ3VtZW50cykgewogICAgICBmb3IgKFN0cmluZyBmZWF0dXJlIGluIGFyZ3VtZW50LnNwbGl0KCcsJykpIHsKICAgICAgICBpZiAoZmVhdHVyZS5zdGFydHNXaXRoKCduby0nKSkgewogICAgICAgICAgcmVzdWx0W2ZlYXR1cmUuc3Vic3RyaW5nKDMpXSA9IGZhbHNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXN1bHRbZmVhdHVyZV0gPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICByZXR1cm4gcmVzdWx0Owp9CgovLy8gUGFyc2UgYSBtYXAgb2YgZXhwZXJpbWVudGFsIGZsYWdzIHRvIHZhbHVlcyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8KLy8vIFtDb21waWxlck9wdGlvbnMuZXhwZXJpbWVudGFsRmxhZ3NdLgovLy8gVGhlIHJldHVybmVkIG1hcCBpcyBub3JtYWxpemVkIHRvIGNvbnRhaW4gZGVmYXVsdCB2YWx1ZXMgZm9yIHVubWVudGlvbmVkCi8vLyBmbGFncy4KLy8vCi8vLyBJZiBhbiB1bmtub3duIGZsYWcgaXMgbWVudGlvbmVkLCBvciBhIGZsYWcgaXMgbWVudGlvbmVkIG1vcmUgdGhhbiBvbmNlLAovLy8gdGhlIHN1cHBsaWVkIGVycm9yIGhhbmRsZXIgaXMgY2FsbGVkIHdpdGggYW4gZXJyb3IgbWVzc2FnZS4KLy8vCi8vLyBJZiBhbiBleHBpcmVkIGZsYWcgaXMgc2V0IHRvIGl0cyBub24tZGVmYXVsdCB2YWx1ZSB0aGUgc3VwcGxpZWQgZXJyb3IKLy8vIGhhbmRsZXIgaXMgY2FsbGVkIHdpdGggYW4gZXJyb3IgbWVzc2FnZS4KLy8vCi8vLyBJZiBhbiBleHBpcmVkIGZsYWcgaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlIHRoZSBzdXBwbGllZCB3YXJuaW5nCi8vLyBoYW5kbGVyIGlzIGNhbGxlZCB3aXRoIGEgd2FybmluZyBtZXNzYWdlLgpNYXA8RXhwZXJpbWVudGFsRmxhZywgYm9vbD4gcGFyc2VFeHBlcmltZW50YWxGbGFncygKICAgIE1hcDxTdHJpbmcsIGJvb2w+IGV4cGVyaW1lbnRzLAogICAge3ZvaWQgb25FcnJvcihTdHJpbmcgbWVzc2FnZSksCiAgICB2b2lkIG9uV2FybmluZyhTdHJpbmcgbWVzc2FnZSl9KSB7CiAgTWFwPEV4cGVyaW1lbnRhbEZsYWcsIGJvb2w+IGZsYWdzID0gPEV4cGVyaW1lbnRhbEZsYWcsIGJvb2w+e307CiAgaWYgKGV4cGVyaW1lbnRzICE9IG51bGwpIHsKICAgIGZvciAoU3RyaW5nIGV4cGVyaW1lbnQgaW4gZXhwZXJpbWVudHMua2V5cykgewogICAgICBib29sIHZhbHVlID0gZXhwZXJpbWVudHNbZXhwZXJpbWVudF07CiAgICAgIEV4cGVyaW1lbnRhbEZsYWcgZmxhZyA9IHBhcnNlRXhwZXJpbWVudGFsRmxhZyhleHBlcmltZW50KTsKICAgICAgaWYgKGZsYWcgPT0gbnVsbCkgewogICAgICAgIG9uRXJyb3IoIlVua25vd24gZXhwZXJpbWVudDogIiArIGV4cGVyaW1lbnQpOwogICAgICB9IGVsc2UgaWYgKGZsYWdzLmNvbnRhaW5zS2V5KGZsYWcpKSB7CiAgICAgICAgaWYgKGZsYWdzW2ZsYWddICE9IHZhbHVlKSB7CiAgICAgICAgICBvbkVycm9yKAogICAgICAgICAgICAgICJFeHBlcmltZW50IHNwZWNpZmllZCB3aXRoIGNvbmZsaWN0aW5nIHZhbHVlczogIiArIGV4cGVyaW1lbnQpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoZXhwaXJlZEV4cGVyaW1lbnRhbEZsYWdzW2ZsYWddKSB7CiAgICAgICAgICBpZiAodmFsdWUgIT0gZGVmYXVsdEV4cGVyaW1lbnRhbEZsYWdzW2ZsYWddKSB7CiAgICAgICAgICAgIC8vLyBQcm9kdWNlIGFuIGVycm9yIHdoZW4gdGhlIHZhbHVlIGlzIG5vdCB0aGUgZGVmYXVsdCB2YWx1ZS4KICAgICAgICAgICAgaWYgKHZhbHVlKSB7CiAgICAgICAgICAgICAgb25FcnJvcigiRW5hYmxpbmcgZXhwZXJpbWVudCAiICsKICAgICAgICAgICAgICAgICAgZXhwZXJpbWVudCArCiAgICAgICAgICAgICAgICAgICIgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4iKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBvbkVycm9yKCJEaXNhYmxpbmcgZXhwZXJpbWVudCAiICsKICAgICAgICAgICAgICAgICAgZXhwZXJpbWVudCArCiAgICAgICAgICAgICAgICAgICIgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4iKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YWx1ZSA9IGRlZmF1bHRFeHBlcmltZW50YWxGbGFnc1tmbGFnXTsKICAgICAgICAgIH0gZWxzZSBpZiAob25XYXJuaW5nICE9IG51bGwpIHsKICAgICAgICAgICAgLy8vIFByb2R1Y2UgYSB3YXJuaW5nIHdoZW4gdGhlIHZhbHVlIGlzIHRoZSBkZWZhdWx0IHZhbHVlLgogICAgICAgICAgICBpZiAodmFsdWUpIHsKICAgICAgICAgICAgICBvbldhcm5pbmcoIkV4cGVyaW1lbnQgIiArCiAgICAgICAgICAgICAgICAgIGV4cGVyaW1lbnQgKwogICAgICAgICAgICAgICAgICAiIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gIgogICAgICAgICAgICAgICAgICAgICAgIlRoZSB1c2Ugb2YgdGhlIGZsYWcgaXMgZGVwcmVjYXRlZC4iKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBvbldhcm5pbmcoIkV4cGVyaW1lbnQgIiArCiAgICAgICAgICAgICAgICAgIGV4cGVyaW1lbnQgKwogICAgICAgICAgICAgICAgICAiIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuICIKICAgICAgICAgICAgICAgICAgICAgICJUaGUgdXNlIG9mIHRoZSBmbGFnIGlzIGRlcHJlY2F0ZWQuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGZsYWdzW2ZsYWddID0gdmFsdWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZsYWdzW2ZsYWddID0gdmFsdWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIGZvciAoRXhwZXJpbWVudGFsRmxhZyBmbGFnIGluIEV4cGVyaW1lbnRhbEZsYWcudmFsdWVzKSB7CiAgICBhc3NlcnQoZGVmYXVsdEV4cGVyaW1lbnRhbEZsYWdzLmNvbnRhaW5zS2V5KGZsYWcpLAogICAgICAgICJObyBkZWZhdWx0IHZhbHVlIGZvciAkZmxhZy4iKTsKICAgIGZsYWdzW2ZsYWddID8/PSBkZWZhdWx0RXhwZXJpbWVudGFsRmxhZ3NbZmxhZ107CiAgfQogIHJldHVybiBmbGFnczsKfQqBPwBOTjwBJAE5ATkBQAEhCSIaIh8BKwE8ATkBNgQ7GEUGNDkPATYGTkZPEgZNQxwhASkBPQZFJwZQFBcBTh0GUT4GTVArIQEvBk1HS0oPBk8+SyUBPQZQRgZQLhIBShIpAU4GSkJQLzcBLAZRPRsBDhoBOxsBUQZODwYWOzsRBlFFTBVAAU5PR04BQ0lPRjEBTk5RKwE/BkZQKQZJLgZLBjYRAS5QHgFNEQYmSCsYAUgiBjsXAU0SBigaAU0UHQFJOCUBSQZRUE5CKB8BQxkGRyoBQxsGRywBJBkBSSYBQkgQTQo3AgFRNEchGyk0KTARIgoIBgQRAgFGKU0LBExABEotBEguNCMjJ0IdMixBGjYsJBNOCg8uOUoZLx8vFTAfLw40KkcZKB8tPRUoHy49DgwfER8KCAYEOzcoNAQQAgE5cGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV9wcm90b3R5cGUvY29tcGlsZXJfb3B0aW9ucy5kYXJ0RHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9hcGlfcHJvdG90eXBlL2RpYWdub3N0aWNfbWVzc2FnZS5kYXJ0itwvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmcm9udF9lbmQuZGlhZ25vc3RpY19tZXNzYWdlOwoKaW1wb3J0ICcuLi9mYXN0YS9mYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdyBDb2RlLCBEaWFnbm9zdGljTWVzc2FnZUZyb21Kc29uLCBGb3JtYXR0ZWRNZXNzYWdlOwoKaW1wb3J0ICcuLi9mYXN0YS9zZXZlcml0eS5kYXJ0JyBzaG93IFNldmVyaXR5OwoKLy8vIFRoZSB0eXBlIG9mIGEgZGlhZ25vc3RpYyBtZXNzYWdlIGNhbGxiYWNrLiBGb3IgZXhhbXBsZToKLy8vCi8vLyAgICB2b2lkIGhhbmRsZXIoRGlhZ25vc3RpY01lc3NhZ2UgbWVzc2FnZSkgewovLy8gICAgICBpZiAoZW5hYmxlVGVybWluYWxDb2xvcnMpIHsgLy8gU2VlIFt0ZXJtaW5hbF9jb2xvcl9zdXBwb3J0LmRhcnRdLgovLy8gICAgICAgIG1lc3NhZ2UuYW5zaUZvcm1hdHRlZC5mb3JFYWNoKHN0ZGVyci53cml0ZWxuKTsKLy8vICAgICAgfSBlbHNlIHsKLy8vICAgICAgICBtZXNzYWdlLnBsYWluVGV4dEZvcm1hdHRlZC5mb3JFYWNoKHN0ZGVyci53cml0ZWxuKTsKLy8vICAgICAgfQovLy8gICAgfQp0eXBlZGVmIERpYWdub3N0aWNNZXNzYWdlSGFuZGxlciA9IHZvaWQgRnVuY3Rpb24oRGlhZ25vc3RpY01lc3NhZ2UpOwoKLy8vIFJlcHJlc2VudHMgYSBkaWFnbm9zdGljIG1lc3NhZ2UgdGhhdCBjYW4gYmUgcmVwb3J0ZWQgZnJvbSBhIHRvb2wsIGZvcgovLy8gZXhhbXBsZSwgYSBjb21waWxlci4KLy8vCi8vLyBUaGUgd29yZCAqZGlhZ25vc3RpYyogaXMgdXNlZCBsb29zZWx5IGhlcmUsIGFzIGEgdG9vbCBtYXkgYWxzbyB1c2UgdGhpcyBmb3IKLy8vIHJlcG9ydGluZyBhbnkga2luZCBvZiBtZXNzYWdlLCBpbmNsdWRpbmcgbm9uLWRpYWdub3N0aWMgbWVzc2FnZXMgc3VjaCBhcwovLy8gbGljZW5zaW5nLCBpbmZvcm1hbCwgb3IgbG9nZ2luZyBpbmZvcm1hdGlvbi4gVGhpcyBhbGxvd3MgYSB3ZWxsLWJlaGF2ZWQKLy8vIHRvb2wgdG8gbmV2ZXIgZGlyZWN0bHkgd3JpdGUgdG8gc3Rkb3V0IG9yIHN0ZGVyci4KYWJzdHJhY3QgY2xhc3MgRGlhZ25vc3RpY01lc3NhZ2UgewogIERpYWdub3N0aWNNZXNzYWdlLl8oKTsgLy8gUHJldmVudCBzdWJjbGFzc2luZy4KCiAgSXRlcmFibGU8U3RyaW5nPiBnZXQgYW5zaUZvcm1hdHRlZDsKCiAgSXRlcmFibGU8U3RyaW5nPiBnZXQgcGxhaW5UZXh0Rm9ybWF0dGVkOwoKICBTZXZlcml0eSBnZXQgc2V2ZXJpdHk7Cn0KCi8vLyBUaGlzIG1ldGhvZCBpcyBzdWJqZWN0IHRvIGNoYW5nZS4KVXJpIGdldE1lc3NhZ2VVcmkoRGlhZ25vc3RpY01lc3NhZ2UgbWVzc2FnZSkgewogIHJldHVybiBtZXNzYWdlIGlzIEZvcm1hdHRlZE1lc3NhZ2UKICAgICAgPyBtZXNzYWdlLnVyaQogICAgICA6IG1lc3NhZ2UgaXMgRGlhZ25vc3RpY01lc3NhZ2VGcm9tSnNvbiA/IG1lc3NhZ2UudXJpIDogbnVsbDsKfQoKLy8vIFRoaXMgbWV0aG9kIGlzIHN1YmplY3QgdG8gY2hhbmdlLgppbnQgZ2V0TWVzc2FnZUNoYXJPZmZzZXQoRGlhZ25vc3RpY01lc3NhZ2UgbWVzc2FnZSkgewogIHJldHVybiBtZXNzYWdlIGlzIEZvcm1hdHRlZE1lc3NhZ2UgPyBtZXNzYWdlLmNoYXJPZmZzZXQgOiBudWxsOwp9CgovLy8gVGhpcyBtZXRob2QgaXMgc3ViamVjdCB0byBjaGFuZ2UuCmludCBnZXRNZXNzYWdlTGVuZ3RoKERpYWdub3N0aWNNZXNzYWdlIG1lc3NhZ2UpIHsKICByZXR1cm4gbWVzc2FnZSBpcyBGb3JtYXR0ZWRNZXNzYWdlID8gbWVzc2FnZS5sZW5ndGggOiBudWxsOwp9CgovLy8gVGhpcyBtZXRob2QgaXMgc3ViamVjdCB0byBjaGFuZ2UuCkNvZGUgZ2V0TWVzc2FnZUNvZGVPYmplY3QoRGlhZ25vc3RpY01lc3NhZ2UgbWVzc2FnZSkgewogIHJldHVybiBtZXNzYWdlIGlzIEZvcm1hdHRlZE1lc3NhZ2UgPyBtZXNzYWdlLmNvZGUgOiBudWxsOwp9CgovLy8gVGhpcyBtZXRob2QgaXMgc3ViamVjdCB0byBjaGFuZ2UuClN0cmluZyBnZXRNZXNzYWdlSGVhZGVyVGV4dChEaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlKSB7CiAgcmV0dXJuIG1lc3NhZ2UgaXMgRm9ybWF0dGVkTWVzc2FnZSA/IG1lc3NhZ2UubWVzc2FnZSA6IG51bGw7Cn0KCi8vLyBUaGlzIG1ldGhvZCBpcyBzdWJqZWN0IHRvIGNoYW5nZS4KaW50IGdldE1lc3NhZ2VDb2RlKERpYWdub3N0aWNNZXNzYWdlIG1lc3NhZ2UpIHsKICByZXR1cm4gbWVzc2FnZSBpcyBGb3JtYXR0ZWRNZXNzYWdlID8gbWVzc2FnZS5jb2RlLmluZGV4IDogLTE7Cn0KCi8vLyBUaGlzIG1ldGhvZCBpcyBzdWJqZWN0IHRvIGNoYW5nZS4KTWFwPFN0cmluZywgZHluYW1pYz4gZ2V0TWVzc2FnZUFyZ3VtZW50cyhEaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlKSB7CiAgcmV0dXJuIG1lc3NhZ2UgaXMgRm9ybWF0dGVkTWVzc2FnZSA/IG1lc3NhZ2UuYXJndW1lbnRzIDogbnVsbDsKfQoKLy8vIFRoaXMgbWV0aG9kIGlzIHN1YmplY3QgdG8gY2hhbmdlLgpJdGVyYWJsZTxEaWFnbm9zdGljTWVzc2FnZT4gZ2V0TWVzc2FnZVJlbGF0ZWRJbmZvcm1hdGlvbigKICAgIERpYWdub3N0aWNNZXNzYWdlIG1lc3NhZ2UpIHsKICByZXR1cm4gbWVzc2FnZSBpcyBGb3JtYXR0ZWRNZXNzYWdlID8gbWVzc2FnZS5yZWxhdGVkSW5mb3JtYXRpb24gOiBudWxsOwp9ClMATk48ASYBIzwBLwE8BDFLOhI/CwlFAUoZBFBNTDYjMQEmASsBGQIBJi8lFEMCASY2QgIBJjI+AgEmNzwCASY5PwIBJjBAAgEmRkECASY6IUoCATtwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9kaWFnbm9zdGljX21lc3NhZ2UuZGFydERzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvYXBpX3Byb3RvdHlwZS9leHBlcmltZW50YWxfZmxhZ3MuZGFydId9Ly8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIE5PVEU6IFRISVMgRklMRSBJUyBHRU5FUkFURUQuIERPIE5PVCBFRElULgovLwovLyBJbnN0ZWFkIG1vZGlmeSAndG9vbHMvZXhwZXJpbWVudGFsX2ZlYXR1cmVzLnlhbWwnIGFuZCBydW4KLy8gJ3BrZy9mcm9udF9lbmQvdG9vbC9mYXN0YSBnZW5lcmF0ZS1leHBlcmltZW50YWwtZmxhZ3MnIHRvIHVwZGF0ZS4KCmVudW0gRXhwZXJpbWVudGFsRmxhZyB7CiAgY29uc3RhbnRVcGRhdGUyMDE4LAogIGNvbnRyb2xGbG93Q29sbGVjdGlvbnMsCiAgZXh0ZW5zaW9uTWV0aG9kcywKICBub25OdWxsYWJsZSwKICBzZXRMaXRlcmFscywKICBzcHJlYWRDb2xsZWN0aW9ucywKICB0cmlwbGVTaGlmdCwKfQoKRXhwZXJpbWVudGFsRmxhZyBwYXJzZUV4cGVyaW1lbnRhbEZsYWcoU3RyaW5nIGZsYWcpIHsKICBzd2l0Y2ggKGZsYWcpIHsKICAgIGNhc2UgImNvbnN0YW50LXVwZGF0ZS0yMDE4IjoKICAgICAgcmV0dXJuIEV4cGVyaW1lbnRhbEZsYWcuY29uc3RhbnRVcGRhdGUyMDE4OwogICAgY2FzZSAiY29udHJvbC1mbG93LWNvbGxlY3Rpb25zIjoKICAgICAgcmV0dXJuIEV4cGVyaW1lbnRhbEZsYWcuY29udHJvbEZsb3dDb2xsZWN0aW9uczsKICAgIGNhc2UgImV4dGVuc2lvbi1tZXRob2RzIjoKICAgICAgcmV0dXJuIEV4cGVyaW1lbnRhbEZsYWcuZXh0ZW5zaW9uTWV0aG9kczsKICAgIGNhc2UgIm5vbi1udWxsYWJsZSI6CiAgICAgIHJldHVybiBFeHBlcmltZW50YWxGbGFnLm5vbk51bGxhYmxlOwogICAgY2FzZSAic2V0LWxpdGVyYWxzIjoKICAgICAgcmV0dXJuIEV4cGVyaW1lbnRhbEZsYWcuc2V0TGl0ZXJhbHM7CiAgICBjYXNlICJzcHJlYWQtY29sbGVjdGlvbnMiOgogICAgICByZXR1cm4gRXhwZXJpbWVudGFsRmxhZy5zcHJlYWRDb2xsZWN0aW9uczsKICAgIGNhc2UgInRyaXBsZS1zaGlmdCI6CiAgICAgIHJldHVybiBFeHBlcmltZW50YWxGbGFnLnRyaXBsZVNoaWZ0OwogIH0KICByZXR1cm4gbnVsbDsKfQoKY29uc3QgTWFwPEV4cGVyaW1lbnRhbEZsYWcsIGJvb2w+IGRlZmF1bHRFeHBlcmltZW50YWxGbGFncyA9IHsKICBFeHBlcmltZW50YWxGbGFnLmNvbnN0YW50VXBkYXRlMjAxODogdHJ1ZSwKICBFeHBlcmltZW50YWxGbGFnLmNvbnRyb2xGbG93Q29sbGVjdGlvbnM6IHRydWUsCiAgRXhwZXJpbWVudGFsRmxhZy5leHRlbnNpb25NZXRob2RzOiBmYWxzZSwKICBFeHBlcmltZW50YWxGbGFnLm5vbk51bGxhYmxlOiBmYWxzZSwKICBFeHBlcmltZW50YWxGbGFnLnNldExpdGVyYWxzOiB0cnVlLAogIEV4cGVyaW1lbnRhbEZsYWcuc3ByZWFkQ29sbGVjdGlvbnM6IHRydWUsCiAgRXhwZXJpbWVudGFsRmxhZy50cmlwbGVTaGlmdDogZmFsc2UsCn07Cgpjb25zdCBNYXA8RXhwZXJpbWVudGFsRmxhZywgYm9vbD4gZXhwaXJlZEV4cGVyaW1lbnRhbEZsYWdzID0gewogIEV4cGVyaW1lbnRhbEZsYWcuY29uc3RhbnRVcGRhdGUyMDE4OiB0cnVlLAogIEV4cGVyaW1lbnRhbEZsYWcuY29udHJvbEZsb3dDb2xsZWN0aW9uczogdHJ1ZSwKICBFeHBlcmltZW50YWxGbGFnLmV4dGVuc2lvbk1ldGhvZHM6IGZhbHNlLAogIEV4cGVyaW1lbnRhbEZsYWcubm9uTnVsbGFibGU6IGZhbHNlLAogIEV4cGVyaW1lbnRhbEZsYWcuc2V0TGl0ZXJhbHM6IHRydWUsCiAgRXhwZXJpbWVudGFsRmxhZy5zcHJlYWRDb2xsZWN0aW9uczogdHJ1ZSwKICBFeHBlcmltZW50YWxGbGFnLnRyaXBsZVNoaWZ0OiBmYWxzZSwKfTsKPABOTjwBLgM9RQEYFhoUDw8VDwIBNhIhMiU2HjAZKxkrHzEZKwQPAgE/LTEsJyYsJwMBPy0xLCcmLCcDATtwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9leHBlcmltZW50YWxfZmxhZ3MuZGFydD1zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvYXBpX3Byb3RvdHlwZS9maWxlX3N5c3RlbS5kYXJ0imMvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmcm9udF9lbmQuZmlsZV9zeXN0ZW07CgppbXBvcnQgJ2RhcnQ6YXN5bmMnOwoKLy8vIEFic3RyYWN0IGludGVyZmFjZSB0byBmaWxlIHN5c3RlbSBvcGVyYXRpb25zLgovLy8KLy8vIEFsbCBmcm9udCBlbmQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZmlsZSBzeXN0ZW0gZ29lcyB0aHJvdWdoIHRoaXMgaW50ZXJmYWNlOwovLy8gdGhpcyBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgY2xpZW50cyB0byB1c2UgdGhlIGZyb250IGVuZCBpbiBhIHdheSB0aGF0Ci8vLyBkb2Vzbid0IHJlcXVpcmUgZmlsZSBzeXN0ZW0gYWNjZXNzIChlLmcuIHRvIHJ1biB1bml0IHRlc3RzLCBvciB0byBydW4KLy8vIGluc2lkZSBhIGJyb3dzZXIpLgovLy8KLy8vIE5vdCBpbnRlbmRlZCB0byBiZSBpbXBsZW1lbnRlZCBvciBleHRlbmRlZCBieSBjbGllbnRzLgphYnN0cmFjdCBjbGFzcyBGaWxlU3lzdGVtIHsKICAvLy8gUmV0dXJucyBhIFtGaWxlU3lzdGVtRW50aXR5XSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBbdXJpXS4KICAvLy8KICAvLy8gVXNlcyBvZiBgLi5gIGFuZCBgLmAgaW4gdGhlIFVSSSBhcmUgbm9ybWFsaXplZCBiZWZvcmUgcmV0dXJuaW5nLgogIC8vLwogIC8vLyBJZiB0aGUgVVJJIHNjaGVtZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZmlsZSBzeXN0ZW0sIGFuIFtFcnJvcl0gd2lsbCBiZQogIC8vLyB0aHJvd24uCiAgLy8vCiAgLy8vIERvZXMgbm90IGNoZWNrIHdoZXRoZXIgYSBmaWxlIG9yIGZvbGRlciBleGlzdHMgYXQgdGhlIGdpdmVuIGxvY2F0aW9uLgogIEZpbGVTeXN0ZW1FbnRpdHkgZW50aXR5Rm9yVXJpKFVyaSB1cmkpOwp9CgovLy8gQWJzdHJhY3QgcmVwcmVzZW50YXRpb24gb2YgYSBmaWxlIHN5c3RlbSBlbnRpdHkgdGhhdCBtYXkgb3IgbWF5IG5vdCBleGlzdC4KLy8vCi8vLyBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBoYXZlIHN1aXRhYmxlIGltcGxlbWVudGF0aW9ucyBvZiBlcXVhbGl0eSB0ZXN0cyBhbmQKLy8vIGhhc2hDb2RlLgovLy8KLy8vIE5vdCBpbnRlbmRlZCB0byBiZSBpbXBsZW1lbnRlZCBvciBleHRlbmRlZCBieSBjbGllbnRzLgphYnN0cmFjdCBjbGFzcyBGaWxlU3lzdGVtRW50aXR5IHsKICAvLy8gVGhlIGFic29sdXRlIG5vcm1hbGl6ZWQgVVJJIHJlcHJlc2VudGVkIGJ5IHRoaXMgZmlsZSBzeXN0ZW0gZW50aXR5LgogIC8vLwogIC8vLyBOb3RlOiB0aGlzIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUgVVJJIHRoYXQgd2FzIHBhc3NlZCB0bwogIC8vLyBbRmlsZVN5c3RlbS5lbnRpdHlGb3JVcmldLCBzaW5jZSB0aGUgVVJJIG1pZ2h0IGhhdmUgYmVlbiBub3JtYWxpemVkLgogIFVyaSBnZXQgdXJpOwoKICAvLy8gV2hldGhlciB0aGlzIGZpbGUgc3lzdGVtIGVudGl0eSBleGlzdHMuCiAgRnV0dXJlPGJvb2w+IGV4aXN0cygpOwoKICAvLy8gQXR0ZW1wdHMgdG8gYWNjZXNzIHRoaXMgZmlsZSBzeXN0ZW0gZW50aXR5IGFzIGEgZmlsZSBhbmQgcmVhZCBpdHMgY29udGVudHMKICAvLy8gYXMgcmF3IGJ5dGVzLgogIC8vLwogIC8vLyBJZiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgYXR0ZW1wdGluZyB0byByZWFkIHRoZSBmaWxlIChlLmcuIGJlY2F1c2Ugbm8gc3VjaAogIC8vLyBmaWxlIGV4aXN0cywgb3IgdGhlIGVudGl0eSBpcyBhIGRpcmVjdG9yeSksIHRoZSBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGgKICAvLy8gW0ZpbGVTeXN0ZW1FeGNlcHRpb25dLgogIEZ1dHVyZTxMaXN0PGludD4+IHJlYWRBc0J5dGVzKCk7CgogIC8vLyBBdHRlbXB0cyB0byBhY2Nlc3MgdGhpcyBmaWxlIHN5c3RlbSBlbnRpdHkgYXMgYSBmaWxlIGFuZCByZWFkIGl0cyBjb250ZW50cwogIC8vLyBhcyBhIHN0cmluZy4KICAvLy8KICAvLy8gVGhlIGZpbGUgaXMgYXNzdW1lZCB0byBiZSBVVEYtOCBlbmNvZGVkLgogIC8vLwogIC8vLyBJZiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgYXR0ZW1wdGluZyB0byByZWFkIHRoZSBmaWxlIChlLmcuIGJlY2F1c2Ugbm8gc3VjaAogIC8vLyBmaWxlIGV4aXN0cywgdGhlIGVudGl0eSBpcyBhIGRpcmVjdG9yeSwgb3IgdGhlIGZpbGUgaXMgbm90IHZhbGlkIFVURi04KSwKICAvLy8gdGhlIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0uCiAgRnV0dXJlPFN0cmluZz4gcmVhZEFzU3RyaW5nKCk7Cn0KCi8qKgogKiBCYXNlIGNsYXNzIGZvciBhbGwgZmlsZSBzeXN0ZW0gZXhjZXB0aW9ucy4KICovCmNsYXNzIEZpbGVTeXN0ZW1FeGNlcHRpb24gaW1wbGVtZW50cyBFeGNlcHRpb24gewogIGZpbmFsIFVyaSB1cmk7CiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CgogIEZpbGVTeXN0ZW1FeGNlcHRpb24odGhpcy51cmksIHRoaXMubWVzc2FnZSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdGaWxlU3lzdGVtRXhjZXB0aW9uKHVyaT0kdXJpOyBtZXNzYWdlPSRtZXNzYWdlKSc7Cn0KTQBOTjwBHwEVATIEUEpKFwQ7HEUGRwZRDgZMKgIBTwRQDgQ7IkoGS0sPAS4ZAVEUBlFPHSMBURMGLwZRTzohAgEELgQxERgBLwEMSgIBNHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfcHJvdG90eXBlL2ZpbGVfc3lzdGVtLmRhcnRCc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2FwaV9wcm90b3R5cGUva2VybmVsX2dlbmVyYXRvci5kYXJ0kw4vLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIERlZmluZXMgdGhlIGZyb250LWVuZCBBUEkgZm9yIGNvbnZlcnRpbmcgc291cmNlIGNvZGUgdG8gRGFydCBLZXJuZWwgb2JqZWN0cy4KbGlicmFyeSBmcm9udF9lbmQua2VybmVsX2dlbmVyYXRvcjsKCmltcG9ydCAnZGFydDphc3luYycgc2hvdyBGdXR1cmU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IENvbXBvbmVudDsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnIHNob3cgQ2xhc3NIaWVyYXJjaHk7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NvcmVfdHlwZXMuZGFydCcgc2hvdyBDb3JlVHlwZXM7CgppbXBvcnQgJy4uL2Jhc2UvcHJvY2Vzc2VkX29wdGlvbnMuZGFydCcgc2hvdyBQcm9jZXNzZWRPcHRpb25zOwoKaW1wb3J0ICcuLi9mYXN0YS9jb21waWxlcl9jb250ZXh0LmRhcnQnIHNob3cgQ29tcGlsZXJDb250ZXh0OwoKaW1wb3J0ICcuLi9mYXN0YS9mYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IG1lc3NhZ2VNaXNzaW5nTWFpbiwgbm9MZW5ndGg7CgppbXBvcnQgJy4uL2Zhc3RhL3NldmVyaXR5LmRhcnQnIHNob3cgU2V2ZXJpdHk7CgppbXBvcnQgJy4uL2tlcm5lbF9nZW5lcmF0b3JfaW1wbC5kYXJ0JwogICAgc2hvdyBnZW5lcmF0ZUtlcm5lbCwgZ2VuZXJhdGVLZXJuZWxJbnRlcm5hbDsKCmltcG9ydCAnY29tcGlsZXJfb3B0aW9ucy5kYXJ0JyBzaG93IENvbXBpbGVyT3B0aW9uczsKCi8vLyBHZW5lcmF0ZXMgYSBrZXJuZWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHByb2dyYW0gd2hvc2UgbWFpbiBsaWJyYXJ5IGlzIGluCi8vLyB0aGUgZ2l2ZW4gW3NvdXJjZV0uCi8vLwovLy8gSW50ZW5kZWQgZm9yIHdob2xlLXByb2dyYW0gKG5vbi1tb2R1bGFyKSBjb21waWxhdGlvbi4KLy8vCi8vLyBHaXZlbiB0aGUgVXJpIG9mIGEgZmlsZSBjb250YWluaW5nIGEgcHJvZ3JhbSdzIGBtYWluYCBtZXRob2QsIHRoaXMgZnVuY3Rpb24KLy8vIGZvbGxvd3MgYGltcG9ydGAsIGBleHBvcnRgLCBhbmQgYHBhcnRgIGRlY2xhcmF0aW9ucyB0byBkaXNjb3ZlciB0aGUgd2hvbGUKLy8vIHByb2dyYW0sIGFuZCBjb252ZXJ0cyB0aGUgcmVzdWx0IHRvIERhcnQgS2VybmVsIGZvcm1hdC4KLy8vCi8vLyBJZiBgY29tcGlsZVNka2AgaW4gW29wdGlvbnNdIGlzIHRydWUsIHRoZSBnZW5lcmF0ZWQgW0NvbXBpbGVyUmVzdWx0XSB3aWxsCi8vLyBpbmNsdWRlIGNvZGUgZm9yIHRoZSBTREsuCi8vLwovLy8gSWYgc3VtbWFyaWVzIGFyZSBwcm92aWRlZCBpbiBbb3B0aW9uc10sIHRoZSBjb21waWxlciB3aWxsIHVzZSB0aGVtIGluc3RlYWQKLy8vIG9mIGNvbXBpbGluZyB0aGUgbGlicmFyaWVzIGNvbnRhaW5lZCBpbiB0aG9zZSBzdW1tYXJpZXMuIFRoaXMgaXMgdXNlZnVsLCBmb3IKLy8vIGV4YW1wbGUsIHdoZW4gY29tcGlsaW5nIGZvciBwbGF0Zm9ybXMgdGhhdCBhbHJlYWR5IGVtYmVkIHRob3NlIHNvdXJjZXMgKGxpa2UKLy8vIHRoZSBzZGsgaW4gdGhlIHN0YW5kYWxvbmUgVk0pLgovLy8KLy8vIFRoZSBpbnB1dCBbc291cmNlXSBpcyBleHBlY3RlZCB0byBiZSBhIHNjcmlwdCB3aXRoIGEgbWFpbiBtZXRob2QsIG90aGVyd2lzZQovLy8gYW4gZXJyb3IgaXMgcmVwb3J0ZWQuCi8vIFRPRE8oc2lnbXVuZCk6IHJlbmFtZSB0byBrZXJuZWxGb3JTY3JpcHQ/CkZ1dHVyZTxDb21waWxlclJlc3VsdD4ga2VybmVsRm9yUHJvZ3JhbSgKICAgIFVyaSBzb3VyY2UsIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zKSBhc3luYyB7CiAgcmV0dXJuIChhd2FpdCBrZXJuZWxGb3JQcm9ncmFtSW50ZXJuYWwoc291cmNlLCBvcHRpb25zKSk7Cn0KCkZ1dHVyZTxDb21waWxlclJlc3VsdD4ga2VybmVsRm9yUHJvZ3JhbUludGVybmFsKAogICAgVXJpIHNvdXJjZSwgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMsCiAgICB7Ym9vbCByZXRhaW5EYXRhRm9yVGVzdGluZzogZmFsc2V9KSBhc3luYyB7CiAgUHJvY2Vzc2VkT3B0aW9ucyBwT3B0aW9ucyA9CiAgICAgIG5ldyBQcm9jZXNzZWRPcHRpb25zKG9wdGlvbnM6IG9wdGlvbnMsIGlucHV0czogW3NvdXJjZV0pOwogIHJldHVybiBhd2FpdCBDb21waWxlckNvbnRleHQucnVuV2l0aE9wdGlvbnMocE9wdGlvbnMsIChjb250ZXh0KSBhc3luYyB7CiAgICBDb21waWxlclJlc3VsdCByZXN1bHQgPSBhd2FpdCBnZW5lcmF0ZUtlcm5lbEludGVybmFsKAogICAgICAgIGluY2x1ZGVIaWVyYXJjaHlBbmRDb3JlVHlwZXM6IHRydWUsCiAgICAgICAgcmV0YWluRGF0YUZvclRlc3Rpbmc6IHJldGFpbkRhdGFGb3JUZXN0aW5nKTsKICAgIENvbXBvbmVudCBjb21wb25lbnQgPSByZXN1bHQ/LmNvbXBvbmVudDsKICAgIGlmIChjb21wb25lbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CgogICAgaWYgKGNvbXBvbmVudC5tYWluTWV0aG9kID09IG51bGwpIHsKICAgICAgY29udGV4dC5vcHRpb25zLnJlcG9ydCgKICAgICAgICAgIG1lc3NhZ2VNaXNzaW5nTWFpbi53aXRoTG9jYXRpb24oc291cmNlLCAtMSwgbm9MZW5ndGgpLAogICAgICAgICAgU2V2ZXJpdHkuZXJyb3IpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfSk7Cn0KCi8vLyBHZW5lcmF0ZXMgYSBrZXJuZWwgcmVwcmVzZW50YXRpb24gZm9yIGEgbW9kdWxlIGNvbnRhaW5pbmcgW3NvdXJjZXNdLgovLy8KLy8vIEEgbW9kdWxlIGlzIGEgY29sbGVjdGlvbiBvZiBsaWJyYXJpZXMgdGhhdCBhcmUgY29tcGlsZWQgdG9nZXRoZXIuIExpYnJhcmllcwovLy8gaW4gdGhlIG1vZHVsZSBtYXkgZGVwZW5kIG9uIGVhY2ggb3RoZXIgYW5kIG1heSBoYXZlIGRlcGVuZGVuY2llcyB0bwovLy8gbGlicmFyaWVzIGluIG90aGVyIG1vZHVsZXMuIFVubGlrZSBsaWJyYXJ5IGRlcGVuZGVuY2llcywgbW9kdWxlIGRlcGVuZGVuY2llcwovLy8gbXVzdCBiZSBhY3ljbGljLgovLy8KLy8vIFRoaXMgQVBJIGlzIGludGVuZGVkIGZvciBtb2R1bGFyIGNvbXBpbGF0aW9uLiBEZXBlbmRlbmNpZXMgdG8gb3RoZXIgbW9kdWxlcwovLy8gYXJlIHNwZWNpZmllZCB1c2luZyBbQ29tcGlsZXJPcHRpb25zLmlucHV0U3VtbWFyaWVzXS4gQW55IGRlcGVuZGVuY3kKLy8vIG9mIFtzb3VyY2VzXSB0aGF0IGlzIG5vdCBsaXN0ZWQgaW4gW0NvbXBpbGVyT3B0aW9ucy5pbnB1dFN1bW1hcmllc10gYW5kCi8vLyBbQ29tcGlsZXJPcHRpb25zLnNka1N1bW1hcnldIGlzIHRyZWF0ZWQgYXMgYW4gYWRkaXRpb25hbCBzb3VyY2UgZmlsZSBmb3IgdGhlCi8vLyBtb2R1bGUuCi8vLwovLy8gQW55IGBwYXJ0YCBkZWNsYXJhdGlvbnMgZm91bmQgaW4gW3NvdXJjZXNdIG11c3QgcmVmZXIgdG8gcGFydCBmaWxlcyB3aGljaAovLy8gYXJlIGFsc28gbGlzdGVkIGluIHRoZSBtb2R1bGUgc291cmNlcywgb3RoZXJ3aXNlIGFuIGVycm9yIHJlc3VsdHMuICAoSXQKLy8vIGlzIG5vdCBwZXJtaXR0ZWQgdG8gcmVmZXIgdG8gYSBwYXJ0IGZpbGUgZGVjbGFyZWQgaW4gYW5vdGhlciBtb2R1bGUpLgovLy8KLy8vIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBbQ29tcGlsZXJSZXN1bHRdIG9iamVjdCB3aXRoIG5vIG1haW4gbWV0aG9kIHNldCBpbgovLy8gdGhlIFtDb21wb25lbnRdIG9mIGl0cyBgY29tcG9uZW50YCBwcm9wZXJ0eS4gVGhlIFtDb21wb25lbnRdIGluY2x1ZGVzCi8vLyBleHRlcm5hbCBsaWJyYXJpZXMgZm9yIHRob3NlIGxpYnJhcmllcyBsb2FkZWQgdGhyb3VnaCBzdW1tYXJpZXMuCkZ1dHVyZTxDb21waWxlclJlc3VsdD4ga2VybmVsRm9yTW9kdWxlKAogICAgTGlzdDxVcmk+IHNvdXJjZXMsIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zKSBhc3luYyB7CiAgcmV0dXJuIChhd2FpdCBnZW5lcmF0ZUtlcm5lbCgKICAgICAgbmV3IFByb2Nlc3NlZE9wdGlvbnMob3B0aW9uczogb3B0aW9ucywgaW5wdXRzOiBzb3VyY2VzKSwKICAgICAgaW5jbHVkZUhpZXJhcmNoeUFuZENvcmVUeXBlczogdHJ1ZSkpOwp9CgovLy8gUmVzdWx0IG9iamVjdCBmb3IgW2tlcm5lbEZvclByb2dyYW1dIGFuZCBba2VybmVsRm9yTW9kdWxlXS4KYWJzdHJhY3QgY2xhc3MgQ29tcGlsZXJSZXN1bHQgewogIC8vLyBUaGUgZ2VuZXJhdGVkIHN1bW1hcnkgYnl0ZXMsIGlmIGl0IHdhcyByZXF1ZXN0ZWQuCiAgTGlzdDxpbnQ+IGdldCBzdW1tYXJ5OwoKICAvLy8gVGhlIGdlbmVyYXRlZCBjb21wb25lbnQsIGlmIGl0IHdhcyByZXF1ZXN0ZWQuCiAgQ29tcG9uZW50IGdldCBjb21wb25lbnQ7CgogIC8vLyBEZXBlbmRlbmNpZXMgdHJhdmVyc2VkIGJ5IHRoZSBjb21waWxlci4gVXNlZCBvbmx5IGZvciBnZW5lcmF0aW5nCiAgLy8vIGRlcGVuZGVuY3kgLkdOIGZpbGVzIGluIHRoZSBkYXJ0LXNkayBidWlsZCBzeXN0ZW0uCiAgLy8vIE5vdGUgdGhpcyBtaWdodCBiZSByZW1vdmVkIHdoZW4gd2Ugc3dpdGNoIHRvIGNvbXB1dGUgZGVwZW5kZW5jaWVzIHdpdGhvdXQKICAvLy8gdXNpbmcgdGhlIGNvbXBpbGVyIGl0c2VsZi4KICBMaXN0PFVyaT4gZ2V0IGRlcHM7CgogIC8vLyBUaGUgW0NsYXNzSGllcmFyY2h5XSBmb3IgdGhlIGNvbXBpbGVkIFtjb21wb25lbnRdLCBpZiBpdCB3YXMgcmVxdWVzdGVkLgogIENsYXNzSGllcmFyY2h5IGdldCBjbGFzc0hpZXJhcmNoeTsKCiAgLy8vIFRoZSBbQ29yZVR5cGVzXSBvYmplY3QgZm9yIHRoZSBjb21waWxlZCBbY29tcG9uZW50XSwgaWYgaXQgd2FzIHJlcXVlc3RlZC4KICBDb3JlVHlwZXMgZ2V0IGNvcmVUeXBlczsKfQp8AE5OPAFRJAEhATEBQgE4AT8BPgFGAS8BJzEBNQFOGAQ6BFBOPAROHgRPUVEjBFAaLSkxPAIBMSkwHkBKOiw1LSgBKB5BGxMGEwYCAUkEUEhRFQRQSUxRDAROTEoETUpFKDggPywCAUAgOBkBNBsBRzlQIRYBTiUBUBsCATlwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9rZXJuZWxfZ2VuZXJhdG9yLmRhcnQ6c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Jhc2UvcHJvY2Vzc2VkX29wdGlvbnMuZGFydMAAYiUvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OmlvJyBzaG93IGV4aXRDb2RlOwoKaW1wb3J0ICdkYXJ0OmFzeW5jJyBzaG93IEZ1dHVyZTsKCmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJyBzaG93IFVpbnQ4TGlzdDsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYmluYXJ5L2FzdF9mcm9tX2JpbmFyeS5kYXJ0JyBzaG93IEJpbmFyeUJ1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2tlcm5lbC5kYXJ0JyBzaG93IENhbm9uaWNhbE5hbWUsIENvbXBvbmVudCwgTG9jYXRpb247CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3RhcmdldC90YXJnZXRzLmRhcnQnCiAgICBzaG93IE5vbmVUYXJnZXQsIFRhcmdldCwgVGFyZ2V0RmxhZ3M7CgppbXBvcnQgJ3BhY2thZ2U6cGFja2FnZV9jb25maWcvcGFja2FnZXMuZGFydCcgc2hvdyBQYWNrYWdlczsKCmltcG9ydCAncGFja2FnZTpwYWNrYWdlX2NvbmZpZy9wYWNrYWdlc19maWxlLmRhcnQnIGFzIHBhY2thZ2VfY29uZmlnOwoKaW1wb3J0ICdwYWNrYWdlOnBhY2thZ2VfY29uZmlnL3NyYy9wYWNrYWdlc19pbXBsLmRhcnQnIHNob3cgTWFwUGFja2FnZXM7CgppbXBvcnQgJy4uL2FwaV9wcm90b3R5cGUvY29tcGlsZXJfb3B0aW9ucy5kYXJ0JwogICAgc2hvdyBDb21waWxlck9wdGlvbnMsIERpYWdub3N0aWNNZXNzYWdlOwoKaW1wb3J0ICcuLi9hcGlfcHJvdG90eXBlL2V4cGVyaW1lbnRhbF9mbGFncy5kYXJ0JwogICAgc2hvdyBkZWZhdWx0RXhwZXJpbWVudGFsRmxhZ3MsIEV4cGVyaW1lbnRhbEZsYWcsIGV4cGlyZWRFeHBlcmltZW50YWxGbGFnczsKCmltcG9ydCAnLi4vYXBpX3Byb3RvdHlwZS9maWxlX3N5c3RlbS5kYXJ0JwogICAgc2hvdyBGaWxlU3lzdGVtLCBGaWxlU3lzdGVtRW50aXR5LCBGaWxlU3lzdGVtRXhjZXB0aW9uOwoKaW1wb3J0ICcuLi9hcGlfcHJvdG90eXBlL3Rlcm1pbmFsX2NvbG9yX3N1cHBvcnQuZGFydCcKICAgIHNob3cgcHJpbnREaWFnbm9zdGljTWVzc2FnZTsKCmltcG9ydCAnLi4vZmFzdGEvY29tbWFuZF9saW5lX3JlcG9ydGluZy5kYXJ0JyBhcyBjb21tYW5kX2xpbmVfcmVwb3J0aW5nOwoKaW1wb3J0ICcuLi9mYXN0YS9jb21waWxlcl9jb250ZXh0LmRhcnQnIHNob3cgQ29tcGlsZXJDb250ZXh0OwoKaW1wb3J0ICcuLi9mYXN0YS9mYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdwogICAgICAgIEZvcm1hdHRlZE1lc3NhZ2UsCiAgICAgICAgTG9jYXRlZE1lc3NhZ2UsCiAgICAgICAgTWVzc2FnZSwKICAgICAgICBtZXNzYWdlQ2FudEluZmVyUGFja2FnZXNGcm9tTWFueUlucHV0cywKICAgICAgICBtZXNzYWdlQ2FudEluZmVyUGFja2FnZXNGcm9tUGFja2FnZVVyaSwKICAgICAgICBtZXNzYWdlSW50ZXJuYWxQcm9ibGVtUHJvdmlkZWRCb3RoQ29tcGlsZVNka0FuZFNka1N1bW1hcnksCiAgICAgICAgbWVzc2FnZU1pc3NpbmdJbnB1dCwKICAgICAgICBub0xlbmd0aCwKICAgICAgICB0ZW1wbGF0ZUNhbm5vdFJlYWRTZGtTcGVjaWZpY2F0aW9uLAogICAgICAgIHRlbXBsYXRlQ2FudFJlYWRGaWxlLAogICAgICAgIHRlbXBsYXRlSW5wdXRGaWxlTm90Rm91bmQsCiAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VbnN1cHBvcnRlZCwKICAgICAgICB0ZW1wbGF0ZVBhY2thZ2VzRmlsZUZvcm1hdCwKICAgICAgICB0ZW1wbGF0ZVNka1Jvb3ROb3RGb3VuZCwKICAgICAgICB0ZW1wbGF0ZVNka1NwZWNpZmljYXRpb25Ob3RGb3VuZCwKICAgICAgICB0ZW1wbGF0ZVNka1N1bW1hcnlOb3RGb3VuZDsKCmltcG9ydCAnLi4vZmFzdGEvbWVzc2FnZXMuZGFydCcgc2hvdyBnZXRMb2NhdGlvbjsKCmltcG9ydCAnLi4vZmFzdGEvcHJvYmxlbXMuZGFydCcgc2hvdyBEZWJ1Z0Fib3J0LCB1bmltcGxlbWVudGVkOwoKaW1wb3J0ICcuLi9mYXN0YS9zZXZlcml0eS5kYXJ0JyBzaG93IFNldmVyaXR5OwoKaW1wb3J0ICcuLi9mYXN0YS90aWNrZXIuZGFydCcgc2hvdyBUaWNrZXI7CgppbXBvcnQgJy4uL2Zhc3RhL3VyaV90cmFuc2xhdG9yLmRhcnQnIHNob3cgVXJpVHJhbnNsYXRvcjsKCmltcG9ydCAnbGlicmFyaWVzX3NwZWNpZmljYXRpb24uZGFydCcKICAgIHNob3cKICAgICAgICBMaWJyYXJpZXNTcGVjaWZpY2F0aW9uLAogICAgICAgIExpYnJhcmllc1NwZWNpZmljYXRpb25FeGNlcHRpb24sCiAgICAgICAgVGFyZ2V0TGlicmFyaWVzU3BlY2lmaWNhdGlvbjsKCi8vLyBBbGwgb3B0aW9ucyBuZWVkZWQgZm9yIHRoZSBmcm9udCBlbmQgaW1wbGVtZW50YXRpb24uCi8vLwovLy8gVGhpcyBpbmNsdWRlczogYWxsIG9mIFtDb21waWxlck9wdGlvbnNdIGluIGEgZm9ybSB1c2VmdWwgdG8gdGhlCi8vLyBpbXBsZW1lbnRhdGlvbiwgZGVmYXVsdCB2YWx1ZXMgZm9yIG9wdGlvbnMgdGhhdCB3ZXJlIG5vdCBwcm92aWRlZCwKLy8vIGFuZCBpbmZvcm1hdGlvbiBkZXJpdmVkIGZyb20gaG93IHRoZSBjb21waWxlciB3YXMgaW52b2tlZCAobGlrZSB0aGUKLy8vIGVudHJ5LXBvaW50cyBnaXZlbiB0byB0aGUgY29tcGlsZXIgYW5kIHdoZXRoZXIgYSBtb2R1bGFyIG9yIHdob2xlLXByb2dyYW0KLy8vIEFQSSB3YXMgdXNlZCkuCi8vLwovLy8gVGhlIGludGVudCBpcyB0aGF0IHRoZSBmcm9udCBlbmQgc2hvdWxkIGltbWVkaWF0ZWx5IHdyYXAgYW55IGluY29taW5nCi8vLyBbQ29tcGlsZXJPcHRpb25zXSBvYmplY3QgaW4gdGhpcyBjbGFzcyBiZWZvcmUgZG9pbmcgZnVydGhlciBwcm9jZXNzaW5nLCBhbmQKLy8vIHNob3VsZCB0aGVyZWFmdGVyIGFjY2VzcyBhbGwgb3B0aW9ucyB2aWEgdGhlIHdyYXBwZXIuICBUaGlzIGVuc3VyZXMgdGhhdAovLy8gb3B0aW9ucyBhcmUgaW50ZXJwcmV0ZWQgaW4gYSBjb25zaXN0ZW50IHdheSBhbmQgdGhhdCBkYXRhIGRlcml2ZWQgZnJvbQovLy8gb3B0aW9ucyBpcyBub3QgdW5uZWNlc3NhcmlseSByZWNvbXB1dGVkLgpjbGFzcyBQcm9jZXNzZWRPcHRpb25zIHsKICAvLy8gVGhlIHJhdyBbQ29tcGlsZXJPcHRpb25zXSB3aGljaCB0aGlzIGNsYXNzIHdyYXBzLgogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBfcmF3OwoKICAvLy8gVGhlIHBhY2thZ2UgbWFwIGRlcml2ZWQgZnJvbSB0aGUgb3B0aW9ucywgb3IgYG51bGxgIGlmIHRoZSBwYWNrYWdlIG1hcCBoYXMKICAvLy8gbm90IGJlZW4gY29tcHV0ZWQgeWV0LgogIFBhY2thZ2VzIF9wYWNrYWdlczsKCiAgLy8vIFRoZSB1cmkgZm9yIC5wYWNrYWdlcyBkZXJpdmVkIGZyb20gdGhlIG9wdGlvbnMsIG9yIGBudWxsYCBpZiB0aGUgcGFja2FnZQogIC8vLyBtYXAgaGFzIG5vdCBiZWVuIGNvbXB1dGVkIHlldCBvciB0aGVyZSBpcyBubyAucGFja2FnZXMgaW4gZWZmZWN0LgogIFVyaSBfcGFja2FnZXNVcmk7CiAgVXJpIGdldCBwYWNrYWdlc1VyaSA9PiBfcGFja2FnZXNVcmk7CgogIC8vLyBUaGUgb2JqZWN0IHRoYXQga25vd3MgaG93IHRvIHJlc29sdmUgInBhY2thZ2U6IiBhbmQgImRhcnQ6IiBVUklzLAogIC8vLyBvciBgbnVsbGAgaWYgaXQgaGFzIG5vdCBiZWVuIGNvbXB1dGVkIHlldC4KICBVcmlUcmFuc2xhdG9yIF91cmlUcmFuc2xhdG9yOwoKICAvLy8gVGhlIFNESyBzdW1tYXJ5LCBvciBgbnVsbGAgaWYgaXQgaGFzIG5vdCBiZWVuIHJlYWQgeWV0LgogIC8vLwogIC8vLyBBIHN1bW1hcnksIGFsc28gcmVmZXJyZWQgdG8gYXMgIm91dGxpbmUiIGludGVybmFsbHksIGlzIGEgW0NvbXBvbmVudF0KICAvLy8gd2hlcmUgYWxsIG1ldGhvZCBib2RpZXMgYXJlIGxlZnQgb3V0LiBJbiBlc3NlbmNlLCBpdCBjb250YWlucyBqdXN0IEFQSQogIC8vLyBzaWduYXR1cmVzIGFuZCBjb25zdGFudHMuIFRoZSBzdW1tYXJ5IHNob3VsZCBpbmNsdWRlIGluZmVycmVkIHRvcC1sZXZlbAogIC8vLyB0eXBlcyB1bmxlc3MgbGVnYWN5IG1vZGUgaXMgZW5hYmxlZC4KICBDb21wb25lbnQgX3Nka1N1bW1hcnlDb21wb25lbnQ7CgogIC8vLyBUaGUgc3VtbWFyeSBmb3IgZWFjaCB1cmkgaW4gYG9wdGlvbnMuaW5wdXRTdW1tYXJpZXNgLgogIC8vLwogIC8vLyBBIHN1bW1hcnksIGFsc28gcmVmZXJyZWQgdG8gYXMgIm91dGxpbmUiIGludGVybmFsbHksIGlzIGEgW0NvbXBvbmVudF0KICAvLy8gd2hlcmUgYWxsIG1ldGhvZCBib2RpZXMgYXJlIGxlZnQgb3V0LiBJbiBlc3NlbmNlLCBpdCBjb250YWlucyBqdXN0IEFQSQogIC8vLyBzaWduYXR1cmVzIGFuZCBjb25zdGFudHMuIFRoZSBzdW1tYXJpZXMgc2hvdWxkIGluY2x1ZGUgaW5mZXJyZWQgdG9wLWxldmVsCiAgLy8vIHR5cGVzIHVubGVzcyBsZWdhY3kgbW9kZSBpcyBlbmFibGVkLgogIExpc3Q8Q29tcG9uZW50PiBfaW5wdXRTdW1tYXJpZXNDb21wb25lbnRzOwoKICAvLy8gT3RoZXIgY29tcG9uZW50cyB0aGF0IGFyZSBtZWFudCB0byBiZSBsaW5rZWQgYW5kIGNvbXBpbGVkIHdpdGggdGhlIGlucHV0CiAgLy8vIHNvdXJjZXMuCiAgTGlzdDxDb21wb25lbnQ+IF9saW5rZWREZXBlbmRlbmNpZXM7CgogIC8vLyBUaGUgbG9jYXRpb24gb2YgdGhlIFNESywgb3IgYG51bGxgIGlmIHRoZSBsb2NhdGlvbiBoYXNuJ3QgYmVlbiBkZXRlcm1pbmVkCiAgLy8vIHlldC4KICBVcmkgX3Nka1Jvb3Q7CiAgVXJpIGdldCBzZGtSb290IHsKICAgIF9lbnN1cmVTZGtEZWZhdWx0cygpOwogICAgcmV0dXJuIF9zZGtSb290OwogIH0KCiAgVXJpIF9zZGtTdW1tYXJ5OwogIFVyaSBnZXQgc2RrU3VtbWFyeSB7CiAgICBfZW5zdXJlU2RrRGVmYXVsdHMoKTsKICAgIHJldHVybiBfc2RrU3VtbWFyeTsKICB9CgogIExpc3Q8aW50PiBfc2RrU3VtbWFyeUJ5dGVzOwoKICAvLy8gR2V0IHRoZSBieXRlcyBvZiB0aGUgU0RLIG91dGxpbmUsIGlmIGFueS4KICBGdXR1cmU8TGlzdDxpbnQ+PiBsb2FkU2RrU3VtbWFyeUJ5dGVzKCkgYXN5bmMgewogICAgaWYgKF9zZGtTdW1tYXJ5Qnl0ZXMgPT0gbnVsbCkgewogICAgICBpZiAoc2RrU3VtbWFyeSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgRmlsZVN5c3RlbUVudGl0eSBlbnRyeSA9IGZpbGVTeXN0ZW0uZW50aXR5Rm9yVXJpKHNka1N1bW1hcnkpOwogICAgICBfc2RrU3VtbWFyeUJ5dGVzID0gYXdhaXQgX3JlYWRBc0J5dGVzKGVudHJ5KTsKICAgIH0KICAgIHJldHVybiBfc2RrU3VtbWFyeUJ5dGVzOwogIH0KCiAgVXJpIF9saWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpOwogIFVyaSBnZXQgbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaSB7CiAgICBfZW5zdXJlU2RrRGVmYXVsdHMoKTsKICAgIHJldHVybiBfbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaTsKICB9CgogIFRpY2tlciB0aWNrZXI7CgogIFVyaSBnZXQgcGFja2FnZXNVcmlSYXcgPT4gX3Jhdy5wYWNrYWdlc0ZpbGVVcmk7CgogIGJvb2wgZ2V0IHZlcmJvc2UgPT4gX3Jhdy52ZXJib3NlOwoKICBib29sIGdldCB2ZXJpZnkgPT4gX3Jhdy52ZXJpZnk7CgogIGJvb2wgZ2V0IGRlYnVnRHVtcCA9PiBfcmF3LmRlYnVnRHVtcDsKCiAgYm9vbCBnZXQgb21pdFBsYXRmb3JtID0+IF9yYXcub21pdFBsYXRmb3JtOwoKICBib29sIGdldCBzZXRFeGl0Q29kZU9uUHJvYmxlbSA9PiBfcmF3LnNldEV4aXRDb2RlT25Qcm9ibGVtOwoKICBib29sIGdldCBlbWJlZFNvdXJjZVRleHQgPT4gX3Jhdy5lbWJlZFNvdXJjZVRleHQ7CgogIGJvb2wgZ2V0IHRocm93T25FcnJvcnNGb3JEZWJ1Z2dpbmcgPT4gX3Jhdy50aHJvd09uRXJyb3JzRm9yRGVidWdnaW5nOwoKICBib29sIGdldCB0aHJvd09uV2FybmluZ3NGb3JEZWJ1Z2dpbmcgPT4gX3Jhdy50aHJvd09uV2FybmluZ3NGb3JEZWJ1Z2dpbmc7CgogIC8vLyBUaGUgZW50cnktcG9pbnRzIHByb3ZpZGVkIHRvIHRoZSBjb21waWxlci4KICBmaW5hbCBMaXN0PFVyaT4gaW5wdXRzOwoKICAvLy8gVGhlIFVyaSB3aGVyZSBvdXRwdXQgaXMgZ2VuZXJhdGVkLCBtYXkgYmUgbnVsbC4KICBmaW5hbCBVcmkgb3V0cHV0OwoKICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50RGVmaW5lczsKCiAgYm9vbCBnZXQgZXJyb3JPblVuZXZhbHVhdGVkQ29uc3RhbnQgPT4gX3Jhdy5lcnJvck9uVW5ldmFsdWF0ZWRDb25zdGFudDsKCiAgLy8vIEluaXRpYWxpemVzIGEgW1Byb2Nlc3NlZE9wdGlvbnNdIG9iamVjdCB3cmFwcGluZyB0aGUgZ2l2ZW4gW3Jhd09wdGlvbnNdLgogIFByb2Nlc3NlZE9wdGlvbnMoe0NvbXBpbGVyT3B0aW9ucyBvcHRpb25zLCBMaXN0PFVyaT4gaW5wdXRzLCB0aGlzLm91dHB1dH0pCiAgICAgIDogdGhpcy5fcmF3ID0gb3B0aW9ucyA/PyBuZXcgQ29tcGlsZXJPcHRpb25zKCksCiAgICAgICAgdGhpcy5pbnB1dHMgPSBpbnB1dHMgPz8gPFVyaT5bXSwKICAgICAgICAvLyBUT0RPKGFza2VzYyk6IENvcHkgdGhlIG1hcCB3aGVuIGtlcm5lbF9zZXJ2aWNlIHN1cHBvcnRzIHRoYXQuCiAgICAgICAgdGhpcy5lbnZpcm9ubWVudERlZmluZXMgPSBvcHRpb25zPy5lbnZpcm9ubWVudERlZmluZXMsCiAgICAgICAgLy8gVE9ETyhzaWdtdW5kLCBhaGUpOiBjcmVhdGUgdGlja2VyIGV2ZW4gZWFybGllciBvciBwYXNzIGluIGEgc3RvcHdhdGNoCiAgICAgICAgLy8gY29sbGVjdGluZyB0aW1lIHNpbmNlIHRoZSBzdGFydCBvZiB0aGUgVk0uCiAgICAgICAgdGhpcy50aWNrZXIgPSBuZXcgVGlja2VyKGlzVmVyYm9zZTogb3B0aW9ucz8udmVyYm9zZSA/PyBmYWxzZSk7CgogIEZvcm1hdHRlZE1lc3NhZ2UgZm9ybWF0KAogICAgICBMb2NhdGVkTWVzc2FnZSBtZXNzYWdlLCBTZXZlcml0eSBzZXZlcml0eSwgTGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dCkgewogICAgaW50IG9mZnNldCA9IG1lc3NhZ2UuY2hhck9mZnNldDsKICAgIFVyaSB1cmkgPSBtZXNzYWdlLnVyaTsKICAgIExvY2F0aW9uIGxvY2F0aW9uID0gb2Zmc2V0ID09IC0xID8gbnVsbCA6IGdldExvY2F0aW9uKHVyaSwgb2Zmc2V0KTsKICAgIFN0cmluZyBmb3JtYXR0ZWQgPQogICAgICAgIGNvbW1hbmRfbGluZV9yZXBvcnRpbmcuZm9ybWF0KG1lc3NhZ2UsIHNldmVyaXR5LCBsb2NhdGlvbjogbG9jYXRpb24pOwogICAgTGlzdDxGb3JtYXR0ZWRNZXNzYWdlPiBmb3JtYXR0ZWRDb250ZXh0OwogICAgaWYgKGNvbnRleHQgIT0gbnVsbCAmJiBjb250ZXh0LmlzTm90RW1wdHkpIHsKICAgICAgZm9ybWF0dGVkQ29udGV4dCA9IG5ldyBMaXN0PEZvcm1hdHRlZE1lc3NhZ2U+KGNvbnRleHQubGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZXh0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgZm9ybWF0dGVkQ29udGV4dFtpXSA9IGZvcm1hdChjb250ZXh0W2ldLCBTZXZlcml0eS5jb250ZXh0LCBudWxsKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG1lc3NhZ2Uud2l0aEZvcm1hdHRpbmcoZm9ybWF0dGVkLCBsb2NhdGlvbj8ubGluZSA/PyAtMSwKICAgICAgICBsb2NhdGlvbj8uY29sdW1uID8/IC0xLCBzZXZlcml0eSwgZm9ybWF0dGVkQ29udGV4dCk7CiAgfQoKICB2b2lkIHJlcG9ydChMb2NhdGVkTWVzc2FnZSBtZXNzYWdlLCBTZXZlcml0eSBzZXZlcml0eSwKICAgICAge0xpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHR9KSB7CiAgICBpZiAoY29tbWFuZF9saW5lX3JlcG9ydGluZy5pc0hpZGRlbihzZXZlcml0eSkpIHJldHVybjsKICAgIGlmIChjb21tYW5kX2xpbmVfcmVwb3J0aW5nLmlzQ29tcGlsZVRpbWVFcnJvcihzZXZlcml0eSkpIHsKICAgICAgQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQubG9nRXJyb3IobWVzc2FnZSwgc2V2ZXJpdHkpOwogICAgfQogICAgaWYgKENvbXBpbGVyQ29udGV4dC5jdXJyZW50Lm9wdGlvbnMuc2V0RXhpdENvZGVPblByb2JsZW0pIHsKICAgICAgZXhpdENvZGUgPSAxOwogICAgfQogICAgcmVwb3J0RGlhZ25vc3RpY01lc3NhZ2UoZm9ybWF0KG1lc3NhZ2UsIHNldmVyaXR5LCBjb250ZXh0KSk7CiAgICBpZiAoY29tbWFuZF9saW5lX3JlcG9ydGluZy5zaG91bGRUaHJvd09uKHNldmVyaXR5KSkgewogICAgICB0aHJvdyBuZXcgRGVidWdBYm9ydCgKICAgICAgICAgIG1lc3NhZ2UudXJpLCBtZXNzYWdlLmNoYXJPZmZzZXQsIHNldmVyaXR5LCBTdGFja1RyYWNlLmN1cnJlbnQpOwogICAgfQogIH0KCiAgdm9pZCByZXBvcnREaWFnbm9zdGljTWVzc2FnZShEaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAoX3Jhdy5vbkRpYWdub3N0aWMgPz8gX2RlZmF1bHREaWFnbm9zdGljTWVzc2FnZUhhbmRsZXIpKG1lc3NhZ2UpOwogIH0KCiAgdm9pZCBfZGVmYXVsdERpYWdub3N0aWNNZXNzYWdlSGFuZGxlcihEaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlKSB7CiAgICBwcmludERpYWdub3N0aWNNZXNzYWdlKG1lc3NhZ2UsIHByaW50KTsKICB9CgogIC8vIFRPRE8oYXNrZXNjKTogUmVtb3ZlIHRoaXMgYW5kIGRpcmVjdCBjYWxsZXJzIGRpcmVjdGx5IHRvIHJlcG9ydC4KICB2b2lkIHJlcG9ydFdpdGhvdXRMb2NhdGlvbihNZXNzYWdlIG1lc3NhZ2UsIFNldmVyaXR5IHNldmVyaXR5KSB7CiAgICByZXBvcnQobWVzc2FnZS53aXRob3V0TG9jYXRpb24oKSwgc2V2ZXJpdHkpOwogIH0KCiAgLy8vIFJ1bnMgdmFyaW91cyB2YWxpZGF0aW9ucyBjaGVja3Mgb24gdGhlIGlucHV0IG9wdGlvbnMuIEZvciBpbnN0YW5jZSwKICAvLy8gaWYgYW4gb3B0aW9uIGlzIGEgcGF0aCB0byBhIGZpbGUsIGl0IGNoZWNrcyB0aGF0IHRoZSBmaWxlIGV4aXN0cy4KICBGdXR1cmU8Ym9vbD4gdmFsaWRhdGVPcHRpb25zKHtib29sIGVycm9yT25NaXNzaW5nSW5wdXQ6IHRydWV9KSBhc3luYyB7CiAgICBpZiAodmVyYm9zZSkgcHJpbnQoZGVidWdTdHJpbmcoKSk7CgogICAgaWYgKGVycm9yT25NaXNzaW5nSW5wdXQgJiYgaW5wdXRzLmlzRW1wdHkpIHsKICAgICAgcmVwb3J0V2l0aG91dExvY2F0aW9uKG1lc3NhZ2VNaXNzaW5nSW5wdXQsIFNldmVyaXR5LmVycm9yKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChfcmF3LnNka1Jvb3QgIT0gbnVsbCAmJgogICAgICAgICFhd2FpdCBmaWxlU3lzdGVtLmVudGl0eUZvclVyaShzZGtSb290KS5leGlzdHMoKSkgewogICAgICByZXBvcnRXaXRob3V0TG9jYXRpb24oCiAgICAgICAgICB0ZW1wbGF0ZVNka1Jvb3ROb3RGb3VuZC53aXRoQXJndW1lbnRzKHNka1Jvb3QpLCBTZXZlcml0eS5lcnJvcik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBVcmkgc3VtbWFyeSA9IHNka1N1bW1hcnk7CiAgICBpZiAoc3VtbWFyeSAhPSBudWxsICYmICFhd2FpdCBmaWxlU3lzdGVtLmVudGl0eUZvclVyaShzdW1tYXJ5KS5leGlzdHMoKSkgewogICAgICByZXBvcnRXaXRob3V0TG9jYXRpb24oCiAgICAgICAgICB0ZW1wbGF0ZVNka1N1bW1hcnlOb3RGb3VuZC53aXRoQXJndW1lbnRzKHN1bW1hcnkpLCBTZXZlcml0eS5lcnJvcik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAoY29tcGlsZVNkayAmJiBzdW1tYXJ5ICE9IG51bGwpIHsKICAgICAgcmVwb3J0V2l0aG91dExvY2F0aW9uKAogICAgICAgICAgbWVzc2FnZUludGVybmFsUHJvYmxlbVByb3ZpZGVkQm90aENvbXBpbGVTZGtBbmRTZGtTdW1tYXJ5LAogICAgICAgICAgU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGZvciAoVXJpIHNvdXJjZSBpbiBfcmF3LmxpbmtlZERlcGVuZGVuY2llcykgewogICAgICAvLyBUT0RPKGFoZSk6IFJlbW92ZSB0aGlzIGNoZWNrLCB0aGUgY29tcGlsZXIgaXRzZWxmIHNob3VsZCBoYW5kbGUgYW5kCiAgICAgIC8vIHJlY292ZXIgZnJvbSB0aGlzLgogICAgICBpZiAoIWF3YWl0IGZpbGVTeXN0ZW0uZW50aXR5Rm9yVXJpKHNvdXJjZSkuZXhpc3RzKCkpIHsKICAgICAgICByZXBvcnRXaXRob3V0TG9jYXRpb24oCiAgICAgICAgICAgIHRlbXBsYXRlSW5wdXRGaWxlTm90Rm91bmQud2l0aEFyZ3VtZW50cyhzb3VyY2UpLCBTZXZlcml0eS5lcnJvcik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8vLyBEZXRlcm1pbmUgd2hldGhlciB0byBnZW5lcmF0ZSBjb2RlIGZvciB0aGUgU0RLIHdoZW4gY29tcGlsaW5nIGEKICAvLy8gd2hvbGUtcHJvZ3JhbS4KICBib29sIGdldCBjb21waWxlU2RrID0+IF9yYXcuY29tcGlsZVNkazsKCiAgRmlsZVN5c3RlbSBfZmlsZVN5c3RlbTsKCiAgLy8vIEdldCB0aGUgW0ZpbGVTeXN0ZW1dIHdoaWNoIHNob3VsZCBiZSB1c2VkIGJ5IHRoZSBmcm9udCBlbmQgdG8gYWNjZXNzCiAgLy8vIGZpbGVzLgogIEZpbGVTeXN0ZW0gZ2V0IGZpbGVTeXN0ZW0gPT4gX2ZpbGVTeXN0ZW0gPz89IF9jcmVhdGVGaWxlU3lzdGVtKCk7CgogIC8vLyBDbGVhciB0aGUgZmlsZSBzeXN0ZW0gc28gYW55IENvbXBpbGVyT3B0aW9ucyBmaWxlU3lzdGVtIGNoYW5nZSB3aWxsIGhhdmUKICAvLy8gZWZmZWN0LgogIHZvaWQgY2xlYXJGaWxlU3lzdGVtQ2FjaGUoKSA9PiBfZmlsZVN5c3RlbSA9IG51bGw7CgogIGJvb2wgZ2V0IGxlZ2FjeU1vZGUgPT4gX3Jhdy5sZWdhY3lNb2RlOwoKICAvLy8gV2hldGhlciB0byBnZW5lcmF0ZSBieXRlY29kZS4KICBib29sIGdldCBieXRlY29kZSA9PiBfcmF3LmJ5dGVjb2RlOwoKICAvLy8gV2hldGhlciB0byB3cml0ZSBhIGZpbGUgKGUuZy4gYSBkaWxsIGZpbGUpIHdoZW4gcmVwb3J0aW5nIGEgY3Jhc2guCiAgYm9vbCBnZXQgd3JpdGVGaWxlT25DcmFzaFJlcG9ydCA9PiBfcmF3LndyaXRlRmlsZU9uQ3Jhc2hSZXBvcnQ7CgogIC8vLyBUaGUgY3VycmVudCBzZGsgdmVyc2lvbiBzdHJpbmcsIGUuZy4gIjIuNi4wLWVkZ2Uuc2hhMWhhc2giLgogIC8vLyBGb3IgaW5zdGFuY2UgdXNlZCBmb3IgbGFuZ3VhZ2UgdmVyc2lvbmluZyAoc3BlY2lmeWluZyB0aGUgbWF4aW11bQogIC8vLyB2ZXJzaW9uKS4KICBTdHJpbmcgZ2V0IGN1cnJlbnRTZGtWZXJzaW9uID0+IF9yYXcuY3VycmVudFNka1ZlcnNpb247CgogIFRhcmdldCBfdGFyZ2V0OwogIFRhcmdldCBnZXQgdGFyZ2V0ID0+IF90YXJnZXQgPz89CiAgICAgIF9yYXcudGFyZ2V0ID8/IG5ldyBOb25lVGFyZ2V0KG5ldyBUYXJnZXRGbGFncyhsZWdhY3lNb2RlOiBsZWdhY3lNb2RlKSk7CgogIGJvb2wgaXNFeHBlcmltZW50RW5hYmxlZChFeHBlcmltZW50YWxGbGFnIGZsYWcpIHsKICAgIGFzc2VydChkZWZhdWx0RXhwZXJpbWVudGFsRmxhZ3MuY29udGFpbnNLZXkoZmxhZyksCiAgICAgICAgIk5vIGRlZmF1bHQgdmFsdWUgZm9yICRmbGFnLiIpOwogICAgYXNzZXJ0KGV4cGlyZWRFeHBlcmltZW50YWxGbGFncy5jb250YWluc0tleShmbGFnKSwKICAgICAgICAiTm8gZXhwaXJlZCB2YWx1ZSBmb3IgJGZsYWcuIik7CiAgICBpZiAoZXhwaXJlZEV4cGVyaW1lbnRhbEZsYWdzW2ZsYWddKSB7CiAgICAgIHJldHVybiBkZWZhdWx0RXhwZXJpbWVudGFsRmxhZ3NbZmxhZ107CiAgICB9CiAgICByZXR1cm4gX3Jhdy5leHBlcmltZW50YWxGbGFnc1tmbGFnXSA/PyBkZWZhdWx0RXhwZXJpbWVudGFsRmxhZ3NbZmxhZ107CiAgfQoKICAvLy8gR2V0IGFuIG91dGxpbmUgY29tcG9uZW50IHRoYXQgc3VtbWFyaXplcyB0aGUgU0RLLCBpZiBhbnkuCiAgLy8gVE9ETyhzaWdtdW5kKTogbW92ZSwgdGhpcyBkb2Vzbid0IGZlZWwgbGlrZSBhbiAib3B0aW9uIi4KICBGdXR1cmU8Q29tcG9uZW50PiBsb2FkU2RrU3VtbWFyeShDYW5vbmljYWxOYW1lIG5hbWVSb290KSBhc3luYyB7CiAgICBpZiAoX3Nka1N1bW1hcnlDb21wb25lbnQgPT0gbnVsbCkgewogICAgICBpZiAoc2RrU3VtbWFyeSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgTGlzdDxpbnQ+IGJ5dGVzID0gYXdhaXQgbG9hZFNka1N1bW1hcnlCeXRlcygpOwogICAgICBpZiAoYnl0ZXMgIT0gbnVsbCAmJiBieXRlcy5pc05vdEVtcHR5KSB7CiAgICAgICAgX3Nka1N1bW1hcnlDb21wb25lbnQgPSBsb2FkQ29tcG9uZW50KGJ5dGVzLCBuYW1lUm9vdCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfc2RrU3VtbWFyeUNvbXBvbmVudDsKICB9CgogIHZvaWQgc2V0IHNka1N1bW1hcnlDb21wb25lbnQoQ29tcG9uZW50IHBsYXRmb3JtKSB7CiAgICBpZiAoX3Nka1N1bW1hcnlDb21wb25lbnQgIT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigic2RrU3VtbWFyeSBhbHJlYWR5IGxvYWRlZC4iKTsKICAgIH0KICAgIF9zZGtTdW1tYXJ5Q29tcG9uZW50ID0gcGxhdGZvcm07CiAgfQoKICAvLy8gR2V0IHRoZSBzdW1tYXJ5IHByb2dyYW1zIGZvciBlYWNoIG9mIHRoZSB1bmRlcmx5aW5nIGBpbnB1dFN1bW1hcmllc2AKICAvLy8gcHJvdmlkZWQgdmlhIFtDb21waWxlck9wdGlvbnNdLgogIC8vIFRPRE8oc2lnbXVuZCk6IG1vdmUsIHRoaXMgZG9lc24ndCBmZWVsIGxpa2UgYW4gIm9wdGlvbiIuCiAgRnV0dXJlPExpc3Q8Q29tcG9uZW50Pj4gbG9hZElucHV0U3VtbWFyaWVzKENhbm9uaWNhbE5hbWUgbmFtZVJvb3QpIGFzeW5jIHsKICAgIGlmIChfaW5wdXRTdW1tYXJpZXNDb21wb25lbnRzID09IG51bGwpIHsKICAgICAgTGlzdDxVcmk+IHVyaXMgPSBfcmF3LmlucHV0U3VtbWFyaWVzOwogICAgICBpZiAodXJpcyA9PSBudWxsIHx8IHVyaXMuaXNFbXB0eSkgcmV0dXJuIGNvbnN0IDxDb21wb25lbnQ+W107CiAgICAgIC8vIFRPRE8oc2lnbXVuZCk6IHRocm90dGxlICMgb2YgY29uY3VycmVudCBvcGVyYXRpb25zLgogICAgICBMaXN0PExpc3Q8aW50Pj4gYWxsQnl0ZXMgPSBhd2FpdCBGdXR1cmUud2FpdCgKICAgICAgICAgIHVyaXMubWFwKCh1cmkpID0+IF9yZWFkQXNCeXRlcyhmaWxlU3lzdGVtLmVudGl0eUZvclVyaSh1cmkpKSkpOwogICAgICBfaW5wdXRTdW1tYXJpZXNDb21wb25lbnRzID0KICAgICAgICAgIGFsbEJ5dGVzLm1hcCgoYnl0ZXMpID0+IGxvYWRDb21wb25lbnQoYnl0ZXMsIG5hbWVSb290KSkudG9MaXN0KCk7CiAgICB9CiAgICByZXR1cm4gX2lucHV0U3VtbWFyaWVzQ29tcG9uZW50czsKICB9CgogIHZvaWQgc2V0IGlucHV0U3VtbWFyaWVzQ29tcG9uZW50cyhMaXN0PENvbXBvbmVudD4gY29tcG9uZW50cykgewogICAgaWYgKF9pbnB1dFN1bW1hcmllc0NvbXBvbmVudHMgIT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiaW5wdXRTdW1tYXJpZXNDb21wb25lbnRzIGFscmVhZHkgbG9hZGVkLiIpOwogICAgfQogICAgX2lucHV0U3VtbWFyaWVzQ29tcG9uZW50cyA9IGNvbXBvbmVudHM7CiAgfQoKICAvLy8gTG9hZCBlYWNoIG9mIHRoZSBbQ29tcGlsZXJPcHRpb25zLmxpbmtlZERlcGVuZGVuY2llc10gY29tcG9uZW50cy4KICAvLyBUT0RPKHNpZ211bmQpOiBtb3ZlLCB0aGlzIGRvZXNuJ3QgZmVlbCBsaWtlIGFuICJvcHRpb24iLgogIEZ1dHVyZTxMaXN0PENvbXBvbmVudD4+IGxvYWRMaW5rRGVwZW5kZW5jaWVzKENhbm9uaWNhbE5hbWUgbmFtZVJvb3QpIGFzeW5jIHsKICAgIGlmIChfbGlua2VkRGVwZW5kZW5jaWVzID09IG51bGwpIHsKICAgICAgTGlzdDxVcmk+IHVyaXMgPSBfcmF3LmxpbmtlZERlcGVuZGVuY2llczsKICAgICAgaWYgKHVyaXMgPT0gbnVsbCB8fCB1cmlzLmlzRW1wdHkpIHJldHVybiBjb25zdCA8Q29tcG9uZW50PltdOwogICAgICAvLyBUT0RPKHNpZ211bmQpOiB0aHJvdHRsZSAjIG9mIGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4KICAgICAgTGlzdDxMaXN0PGludD4+IGFsbEJ5dGVzID0gYXdhaXQgRnV0dXJlLndhaXQoCiAgICAgICAgICB1cmlzLm1hcCgodXJpKSA9PiBfcmVhZEFzQnl0ZXMoZmlsZVN5c3RlbS5lbnRpdHlGb3JVcmkodXJpKSkpKTsKICAgICAgX2xpbmtlZERlcGVuZGVuY2llcyA9CiAgICAgICAgICBhbGxCeXRlcy5tYXAoKGJ5dGVzKSA9PiBsb2FkQ29tcG9uZW50KGJ5dGVzLCBuYW1lUm9vdCkpLnRvTGlzdCgpOwogICAgfQogICAgcmV0dXJuIF9saW5rZWREZXBlbmRlbmNpZXM7CiAgfQoKICAvLy8gSGVscGVyIHRvIGxvYWQgYSAuZGlsbCBmaWxlIGZyb20gW3VyaV0gdXNpbmcgdGhlIGV4aXN0aW5nIFtuYW1lUm9vdF0uCiAgQ29tcG9uZW50IGxvYWRDb21wb25lbnQoTGlzdDxpbnQ+IGJ5dGVzLCBDYW5vbmljYWxOYW1lIG5hbWVSb290LAogICAgICB7Ym9vbCBhbHdheXNDcmVhdGVOZXdOYW1lZE5vZGVzfSkgewogICAgQ29tcG9uZW50IGNvbXBvbmVudCA9CiAgICAgICAgdGFyZ2V0LmNvbmZpZ3VyZUNvbXBvbmVudChuZXcgQ29tcG9uZW50KG5hbWVSb290OiBuYW1lUm9vdCkpOwogICAgLy8gVE9ETyhhaGUpOiBQYXNzIGZpbGUgbmFtZSB0byBCaW5hcnlCdWlsZGVyLgogICAgLy8gVE9ETyhhaGUpOiBDb250cm9sIGxhenkgbG9hZGluZyB2aWEgYW4gb3B0aW9uLgogICAgbmV3IEJpbmFyeUJ1aWxkZXIoYnl0ZXMsCiAgICAgICAgICAgIGZpbGVuYW1lOiBudWxsLAogICAgICAgICAgICBkaXNhYmxlTGF6eVJlYWRpbmc6IGZhbHNlLAogICAgICAgICAgICBhbHdheXNDcmVhdGVOZXdOYW1lZE5vZGVzOiBhbHdheXNDcmVhdGVOZXdOYW1lZE5vZGVzKQogICAgICAgIC5yZWFkQ29tcG9uZW50KGNvbXBvbmVudCk7CiAgICByZXR1cm4gY29tcG9uZW50OwogIH0KCiAgLy8vIEdldCB0aGUgW1VyaVRyYW5zbGF0b3JdIHdoaWNoIHJlc29sdmVzICJwYWNrYWdlOiIgYW5kICJkYXJ0OiIgVVJJcy4KICAvLy8KICAvLy8gVGhpcyBpcyBhbiBhc3luY2hyb25vdXMgbWV0aG9kIHNpbmNlIGZpbGUgc3lzdGVtIG9wZXJhdGlvbnMgbWF5IGJlCiAgLy8vIHJlcXVpcmVkIHRvIGxvY2F0ZS9yZWFkIHRoZSBwYWNrYWdlcyBmaWxlIGFzIHdlbGwgYXMgU0RLIG1ldGFkYXRhLgogIEZ1dHVyZTxVcmlUcmFuc2xhdG9yPiBnZXRVcmlUcmFuc2xhdG9yKHtib29sIGJ5cGFzc0NhY2hlOiBmYWxzZX0pIGFzeW5jIHsKICAgIGlmIChieXBhc3NDYWNoZSkgewogICAgICBfdXJpVHJhbnNsYXRvciA9IG51bGw7CiAgICAgIF9wYWNrYWdlcyA9IG51bGw7CiAgICB9CiAgICBpZiAoX3VyaVRyYW5zbGF0b3IgPT0gbnVsbCkgewogICAgICB0aWNrZXIubG9nTXMoIlN0YXJ0ZWQgYnVpbGRpbmcgVXJpVHJhbnNsYXRvciIpOwogICAgICBUYXJnZXRMaWJyYXJpZXNTcGVjaWZpY2F0aW9uIGxpYnJhcmllcyA9CiAgICAgICAgICBhd2FpdCBfY29tcHV0ZUxpYnJhcnlTcGVjaWZpY2F0aW9uKCk7CiAgICAgIHRpY2tlci5sb2dNcygiUmVhZCBsaWJyYXJpZXMgZmlsZSIpOwogICAgICBQYWNrYWdlcyBwYWNrYWdlcyA9IGF3YWl0IF9nZXRQYWNrYWdlcygpOwogICAgICB0aWNrZXIubG9nTXMoIlJlYWQgcGFja2FnZXMgZmlsZSIpOwogICAgICBfdXJpVHJhbnNsYXRvciA9IG5ldyBVcmlUcmFuc2xhdG9yKGxpYnJhcmllcywgcGFja2FnZXMpOwogICAgfQogICAgcmV0dXJuIF91cmlUcmFuc2xhdG9yOwogIH0KCiAgRnV0dXJlPFRhcmdldExpYnJhcmllc1NwZWNpZmljYXRpb24+IF9jb21wdXRlTGlicmFyeVNwZWNpZmljYXRpb24oKSBhc3luYyB7CiAgICBTdHJpbmcgbmFtZSA9IHRhcmdldC5uYW1lOwogICAgLy8gVE9ETyhzaWdtdW5kKTogRWVrISBXZSBzaG91bGQgZ2V0IHRvIHRoZSBwb2ludCB3aGVyZSB0aGVyZSBpcyBubwogICAgLy8gZmFzdGEtc3BlY2lmaWMgdGFyZ2V0cyBhbmQgdGhlIHRhcmdldCBuYW1lcyBhcmUgbWVhbmluZ2Z1bC4KICAgIGlmIChuYW1lLmVuZHNXaXRoKCdfZmFzdGEnKSkgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKDAsIG5hbWUubGVuZ3RoIC0gNik7CgogICAgaWYgKGxpYnJhcmllc1NwZWNpZmljYXRpb25VcmkgPT0gbnVsbCB8fAogICAgICAgICFhd2FpdCBmaWxlU3lzdGVtLmVudGl0eUZvclVyaShsaWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpKS5leGlzdHMoKSkgewogICAgICBpZiAoY29tcGlsZVNkaykgewogICAgICAgIHJlcG9ydFdpdGhvdXRMb2NhdGlvbigKICAgICAgICAgICAgdGVtcGxhdGVTZGtTcGVjaWZpY2F0aW9uTm90Rm91bmQKICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGxpYnJhcmllc1NwZWNpZmljYXRpb25VcmkpLAogICAgICAgICAgICBTZXZlcml0eS5lcnJvcik7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBUYXJnZXRMaWJyYXJpZXNTcGVjaWZpY2F0aW9uKG5hbWUpOwogICAgfQoKICAgIFN0cmluZyBqc29uID0KICAgICAgICBhd2FpdCBmaWxlU3lzdGVtLmVudGl0eUZvclVyaShsaWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpKS5yZWFkQXNTdHJpbmcoKTsKICAgIHRyeSB7CiAgICAgIExpYnJhcmllc1NwZWNpZmljYXRpb24gc3BlYyA9CiAgICAgICAgICBhd2FpdCBMaWJyYXJpZXNTcGVjaWZpY2F0aW9uLnBhcnNlKGxpYnJhcmllc1NwZWNpZmljYXRpb25VcmksIGpzb24pOwogICAgICByZXR1cm4gc3BlYy5zcGVjaWZpY2F0aW9uRm9yKG5hbWUpOwogICAgfSBvbiBMaWJyYXJpZXNTcGVjaWZpY2F0aW9uRXhjZXB0aW9uIGNhdGNoIChlKSB7CiAgICAgIHJlcG9ydFdpdGhvdXRMb2NhdGlvbigKICAgICAgICAgIHRlbXBsYXRlQ2Fubm90UmVhZFNka1NwZWNpZmljYXRpb24ud2l0aEFyZ3VtZW50cygnJHtlLmVycm9yfScpLAogICAgICAgICAgU2V2ZXJpdHkuZXJyb3IpOwogICAgICByZXR1cm4gbmV3IFRhcmdldExpYnJhcmllc1NwZWNpZmljYXRpb24obmFtZSk7CiAgICB9CiAgfQoKICAvLy8gR2V0IHRoZSBwYWNrYWdlIG1hcCB3aGljaCBtYXBzIHBhY2thZ2UgbmFtZXMgdG8gVVJJcy4KICAvLy8KICAvLy8gVGhpcyBpcyBhbiBhc3luY2hyb25vdXMgZ2V0dGVyIHNpbmNlIGZpbGUgc3lzdGVtIG9wZXJhdGlvbnMgbWF5IGJlCiAgLy8vIHJlcXVpcmVkIHRvIGxvY2F0ZS9yZWFkIHRoZSBwYWNrYWdlcyBmaWxlLgogIEZ1dHVyZTxQYWNrYWdlcz4gX2dldFBhY2thZ2VzKCkgYXN5bmMgewogICAgaWYgKF9wYWNrYWdlcyAhPSBudWxsKSByZXR1cm4gX3BhY2thZ2VzOwogICAgX3BhY2thZ2VzVXJpID0gbnVsbDsKICAgIGlmIChfcmF3LnBhY2thZ2VzRmlsZVVyaSAhPSBudWxsKSB7CiAgICAgIHJldHVybiBfcGFja2FnZXMgPSBhd2FpdCBjcmVhdGVQYWNrYWdlc0Zyb21GaWxlKF9yYXcucGFja2FnZXNGaWxlVXJpKTsKICAgIH0KCiAgICBpZiAoaW5wdXRzLmxlbmd0aCA+IDEpIHsKICAgICAgLy8gVE9ETyhzaWdtdW5kKTogY29uc2lkZXIgbm90IHJlcG9ydGluZyBhbiBlcnJvciBpZiB3ZSB3b3VsZCBpbmZlcgogICAgICAvLyB0aGUgc2FtZSAucGFja2FnZXMgZmlsZSBmcm9tIGFsbCBvZiB0aGUgaW5wdXRzLgogICAgICByZXBvcnRXaXRob3V0TG9jYXRpb24oCiAgICAgICAgICBtZXNzYWdlQ2FudEluZmVyUGFja2FnZXNGcm9tTWFueUlucHV0cywgU2V2ZXJpdHkuZXJyb3IpOwogICAgICByZXR1cm4gX3BhY2thZ2VzID0gUGFja2FnZXMubm9QYWNrYWdlczsKICAgIH0KCiAgICBVcmkgaW5wdXQgPSBpbnB1dHMuZmlyc3Q7CgogICAgLy8gV2hlbiBjb21waWxpbmcgdGhlIFNESyB0aGUgaW5wdXQgZmlsZXMgYXJlIG5vcm1hbGx5IGBkYXJ0OmAgVVJJcy4KICAgIGlmIChpbnB1dC5zY2hlbWUgPT0gJ2RhcnQnKSByZXR1cm4gX3BhY2thZ2VzID0gUGFja2FnZXMubm9QYWNrYWdlczsKCiAgICBpZiAoaW5wdXQuc2NoZW1lID09ICdwYWNrYWdlcycpIHsKICAgICAgcmVwb3J0KAogICAgICAgICAgbWVzc2FnZUNhbnRJbmZlclBhY2thZ2VzRnJvbVBhY2thZ2VVcmkud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgIGlucHV0LCAtMSwgbm9MZW5ndGgpLAogICAgICAgICAgU2V2ZXJpdHkuZXJyb3IpOwogICAgICByZXR1cm4gX3BhY2thZ2VzID0gUGFja2FnZXMubm9QYWNrYWdlczsKICAgIH0KCiAgICByZXR1cm4gX3BhY2thZ2VzID0gYXdhaXQgX2ZpbmRQYWNrYWdlcyhpbnB1dHMuZmlyc3QpOwogIH0KCiAgLy8vIENyZWF0ZSBhIFtQYWNrYWdlc10gZ2l2ZW4gdGhlIFVyaSB0byBhIGAucGFja2FnZXNgIGZpbGUuCiAgRnV0dXJlPFBhY2thZ2VzPiBjcmVhdGVQYWNrYWdlc0Zyb21GaWxlKFVyaSBmaWxlKSBhc3luYyB7CiAgICBMaXN0PGludD4gY29udGVudHM7CiAgICB0cnkgewogICAgICAvLyBUT0RPKGFoZSk6IFdlIG5lZWQgdG8gY29tcHV0ZSBsaW5lIGVuZGluZ3MgZm9yIHRoaXMgZmlsZS4KICAgICAgY29udGVudHMgPSBhd2FpdCBmaWxlU3lzdGVtLmVudGl0eUZvclVyaShmaWxlKS5yZWFkQXNCeXRlcygpOwogICAgfSBvbiBGaWxlU3lzdGVtRXhjZXB0aW9uIGNhdGNoIChlKSB7CiAgICAgIHJlcG9ydFdpdGhvdXRMb2NhdGlvbigKICAgICAgICAgIHRlbXBsYXRlQ2FudFJlYWRGaWxlLndpdGhBcmd1bWVudHMoZmlsZSwgZS5tZXNzYWdlKSwgU2V2ZXJpdHkuZXJyb3IpOwogICAgfQogICAgaWYgKGNvbnRlbnRzICE9IG51bGwpIHsKICAgICAgX3BhY2thZ2VzVXJpID0gZmlsZTsKICAgICAgdHJ5IHsKICAgICAgICBNYXA8U3RyaW5nLCBVcmk+IG1hcCA9CiAgICAgICAgICAgIHBhY2thZ2VfY29uZmlnLnBhcnNlKGNvbnRlbnRzLCBmaWxlLCBhbGxvd0RlZmF1bHRQYWNrYWdlOiB0cnVlKTsKICAgICAgICByZXR1cm4gbmV3IE1hcFBhY2thZ2VzKG1hcCk7CiAgICAgIH0gb24gRm9ybWF0RXhjZXB0aW9uIGNhdGNoIChlKSB7CiAgICAgICAgcmVwb3J0KAogICAgICAgICAgICB0ZW1wbGF0ZVBhY2thZ2VzRmlsZUZvcm1hdAogICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoZS5tZXNzYWdlKQogICAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbihmaWxlLCBlLm9mZnNldCwgbm9MZW5ndGgpLAogICAgICAgICAgICBTZXZlcml0eS5lcnJvcik7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICByZXBvcnRXaXRob3V0TG9jYXRpb24oCiAgICAgICAgICAgIHRlbXBsYXRlQ2FudFJlYWRGaWxlLndpdGhBcmd1bWVudHMoZmlsZSwgIiRlIiksIFNldmVyaXR5LmVycm9yKTsKICAgICAgfQogICAgfQogICAgX3BhY2thZ2VzVXJpID0gbnVsbDsKICAgIHJldHVybiBQYWNrYWdlcy5ub1BhY2thZ2VzOwogIH0KCiAgLy8vIEZpbmRzIGEgcGFja2FnZSByZXNvbHV0aW9uIHN0cmF0ZWd5IHVzaW5nIGEgW0ZpbGVTeXN0ZW1dLgogIC8vLwogIC8vLyBUaGUgW3NjcmlwdFVyaV0gcG9pbnRzIHRvIGEgRGFydCBzY3JpcHQgd2l0aCBhIHZhbGlkIHNjaGVtZSBhY2NlcHRlZCBieQogIC8vLyB0aGUgW0ZpbGVTeXN0ZW1dLgogIC8vLwogIC8vLyBUaGlzIGZ1bmN0aW9uIGZpcnN0IHRyaWVzIHRvIGxvY2F0ZSBhIGAucGFja2FnZXNgIGZpbGUgaW4gdGhlIGBzY3JpcHRVcmlgCiAgLy8vIGRpcmVjdG9yeS4gSWYgdGhhdCBpcyBub3QgZm91bmQsIGl0IHN0YXJ0cyBjaGVja2luZyBwYXJlbnQgZGlyZWN0b3JpZXMgZm9yCiAgLy8vIGEgYC5wYWNrYWdlc2AgZmlsZSwgYW5kIHN0b3BzIGlmIGl0IGZpbmRzIGl0LiBPdGhlcndpc2UgaXQgZ2l2ZXMgdXAgYW5kCiAgLy8vIHJldHVybnMgW1BhY2thZ2VzLm5vUGFja2FnZXNdLgogIC8vLwogIC8vLyBOb3RlOiB0aGlzIGlzIGEgZm9yayBmcm9tIGBwYWNrYWdlOnBhY2thZ2VfY29uZmlnL2Rpc2NvdmVyeS5kYXJ0YCB0byBhZGFwdAogIC8vLyBpdCB0byB1c2UgW0ZpbGVTeXN0ZW1dLiBUaGUgbG9naWMgaGVyZSBpcyBhIG1peCBvZiB0aGUgbG9naWMgaW4gdGhlCiAgLy8vIGBmaW5kUGFja2FnZXNGcm9tRmlsZWAgYW5kIGBmaW5kUGFja2FnZXNGcm9tTm9uRmlsZWA6CiAgLy8vCiAgLy8vICAgICogTGlrZSBgZmluZFBhY2thZ2VzRnJvbUZpbGVgIHJlc29sdXRpb24gc2VhcmNoZXMgZm9yIHBhcmVudAogIC8vLyAgICBkaXJlY3RvcmllcwogIC8vLwogIC8vLyAgICAqIFVubGlrZSBwYWNrYWdlOnBhY2thZ2VfY29uZmlnLCBpdCBkb2VzIG5vdCBsb29rIGZvciBhIGBwYWNrYWdlcy9gCiAgLy8vICAgIGRpcmVjdG9yeSwgYXMgdGhhdCB3b24ndCBiZSBzdXBwb3J0ZWQgaW4gRGFydCAyLgogIEZ1dHVyZTxQYWNrYWdlcz4gX2ZpbmRQYWNrYWdlcyhVcmkgc2NyaXB0VXJpKSBhc3luYyB7CiAgICBVcmkgZGlyID0gc2NyaXB0VXJpLnJlc29sdmUoJy4nKTsKICAgIGlmICghZGlyLmlzQWJzb2x1dGUpIHsKICAgICAgcmVwb3J0V2l0aG91dExvY2F0aW9uKAogICAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VbnN1cHBvcnRlZAogICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKCJFeHBlY3RlZCBpbnB1dCBVcmkgdG8gYmUgYWJzb2x1dGU6ICRzY3JpcHRVcmkuIiksCiAgICAgICAgICBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW0pOwogICAgICByZXR1cm4gUGFja2FnZXMubm9QYWNrYWdlczsKICAgIH0KCiAgICBGdXR1cmU8VXJpPiBjaGVja0luRGlyKFVyaSBkaXIpIGFzeW5jIHsKICAgICAgVXJpIGNhbmRpZGF0ZSA9IGRpci5yZXNvbHZlKCcucGFja2FnZXMnKTsKICAgICAgaWYgKGF3YWl0IGZpbGVTeXN0ZW0uZW50aXR5Rm9yVXJpKGNhbmRpZGF0ZSkuZXhpc3RzKCkpIHJldHVybiBjYW5kaWRhdGU7CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIC8vIENoZWNrIGZvciAkY3dkLy5wYWNrYWdlcwogICAgVXJpIGNhbmRpZGF0ZSA9IGF3YWl0IGNoZWNrSW5EaXIoZGlyKTsKICAgIGlmIChjYW5kaWRhdGUgIT0gbnVsbCkgcmV0dXJuIGNyZWF0ZVBhY2thZ2VzRnJvbUZpbGUoY2FuZGlkYXRlKTsKCiAgICAvLyBDaGVjayBmb3IgY3dkKC8uLikrLy5wYWNrYWdlcwogICAgVXJpIHBhcmVudERpciA9IGRpci5yZXNvbHZlKCcuLicpOwogICAgd2hpbGUgKHBhcmVudERpci5wYXRoICE9IGRpci5wYXRoKSB7CiAgICAgIGNhbmRpZGF0ZSA9IGF3YWl0IGNoZWNrSW5EaXIocGFyZW50RGlyKTsKICAgICAgaWYgKGNhbmRpZGF0ZSAhPSBudWxsKSBicmVhazsKICAgICAgZGlyID0gcGFyZW50RGlyOwogICAgICBwYXJlbnREaXIgPSBkaXIucmVzb2x2ZSgnLi4nKTsKICAgIH0KCiAgICBpZiAoY2FuZGlkYXRlICE9IG51bGwpIHJldHVybiBjcmVhdGVQYWNrYWdlc0Zyb21GaWxlKGNhbmRpZGF0ZSk7CiAgICByZXR1cm4gUGFja2FnZXMubm9QYWNrYWdlczsKICB9CgogIGJvb2wgX2NvbXB1dGVkU2RrRGVmYXVsdHMgPSBmYWxzZTsKCiAgLy8vIEVuc3VyZSBbX3Nka1Jvb3RdLCBbX3Nka1N1bW1hcnldIGFuZCBbX2xpYnJhcnlTcGVjVXJpXSBhcmUgaW5pdGlhbGl6ZWQuCiAgLy8vCiAgLy8vIElmIHRoZXkgYXJlIG5vdCBzZXQgZXhwbGljaXRseSwgdGhleSBhcmUgaW5mZXJyZWQgYmFzZWQgb24gdGhlIGRlZmF1bHQKICAvLy8gYmVoYXZpb3IgZGVzY3JpYmVkIGluIFtDb21waWxlck9wdGlvbnNdLgogIHZvaWQgX2Vuc3VyZVNka0RlZmF1bHRzKCkgewogICAgaWYgKF9jb21wdXRlZFNka0RlZmF1bHRzKSByZXR1cm47CiAgICBfY29tcHV0ZWRTZGtEZWZhdWx0cyA9IHRydWU7CiAgICBVcmkgcm9vdCA9IF9yYXcuc2RrUm9vdDsKICAgIGlmIChyb290ICE9IG51bGwpIHsKICAgICAgLy8gTm9ybWFsaXplIHRvIGFsd2F5cyBlbmQgaW4gJy8nCiAgICAgIGlmICghcm9vdC5wYXRoLmVuZHNXaXRoKCcvJykpIHsKICAgICAgICByb290ID0gcm9vdC5yZXBsYWNlKHBhdGg6IHJvb3QucGF0aCArICcvJyk7CiAgICAgIH0KICAgICAgX3Nka1Jvb3QgPSByb290OwogICAgfSBlbHNlIGlmIChjb21waWxlU2RrKSB7CiAgICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogaW1wbGVtZW50IHRoZSBhbGdvcml0aG0gZm9yIGZpbmRpbmcgdGhlIFNESwogICAgICAvLyBhdXRvbWFnaWNhbGx5LgogICAgICB1bmltcGxlbWVudGVkKCdpbmZlciB0aGUgZGVmYXVsdCBzZGsgbG9jYXRpb24nLCAtMSwgbnVsbCk7CiAgICB9CgogICAgaWYgKF9yYXcuc2RrU3VtbWFyeSAhPSBudWxsKSB7CiAgICAgIF9zZGtTdW1tYXJ5ID0gX3Jhdy5zZGtTdW1tYXJ5OwogICAgfSBlbHNlIGlmICghY29tcGlsZVNkaykgewogICAgICAvLyBJbmZlciBiYXNlZCBvbiB0aGUgc2RrUm9vdCwgYnV0IG9ubHkgd2hlbiBgY29tcGlsZVNka2AgaXMgZmFsc2UsCiAgICAgIC8vIG90aGVyd2lzZSB0aGUgZGVmYXVsdCBpbnRlbnQgd2FzIHRvIGNvbXBpbGUgdGhlIHNkayBmcm9tIHNvdXJjZXMgYW5kCiAgICAgIC8vIG5vdCB0byBsb2FkIGFuIHNkayBzdW1tYXJ5IGZpbGUuCiAgICAgIF9zZGtTdW1tYXJ5ID0gcm9vdD8ucmVzb2x2ZSgidm1fcGxhdGZvcm1fc3Ryb25nLmRpbGwiKTsKICAgIH0KCiAgICBpZiAoX3Jhdy5saWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpICE9IG51bGwpIHsKICAgICAgX2xpYnJhcmllc1NwZWNpZmljYXRpb25VcmkgPSBfcmF3LmxpYnJhcmllc1NwZWNpZmljYXRpb25Vcmk7CiAgICB9IGVsc2UgaWYgKGNvbXBpbGVTZGspIHsKICAgICAgX2xpYnJhcmllc1NwZWNpZmljYXRpb25VcmkgPSBzZGtSb290LnJlc29sdmUoJ2xpYi9saWJyYXJpZXMuanNvbicpOwogICAgfQogIH0KCiAgLy8vIENyZWF0ZSBhIFtGaWxlU3lzdGVtXSBzcGVjaWZpYyB0byB0aGUgY3VycmVudCBvcHRpb25zLgogIEZpbGVTeXN0ZW0gX2NyZWF0ZUZpbGVTeXN0ZW0oKSB7CiAgICByZXR1cm4gX3Jhdy5maWxlU3lzdGVtOwogIH0KCiAgU3RyaW5nIGRlYnVnU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgd3JpdGVMaXN0KFN0cmluZyBuYW1lLCBMaXN0IGVsZW1lbnRzKSB7CiAgICAgIGlmIChlbGVtZW50cy5pc0VtcHR5KSB7CiAgICAgICAgc2Iud3JpdGVsbignJG5hbWU6IDxlbXB0eT4nKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgc2Iud3JpdGVsbignJG5hbWU6Jyk7CiAgICAgIGVsZW1lbnRzLmZvckVhY2goKHMpIHsKICAgICAgICBzYi53cml0ZWxuKCcgIC0gJHMnKTsKICAgICAgfSk7CiAgICB9CgogICAgc2Iud3JpdGVsbignSW5wdXRzOiAke2lucHV0c30nKTsKICAgIHNiLndyaXRlbG4oJ091dHB1dDogJHtvdXRwdXR9Jyk7CgogICAgc2Iud3JpdGVsbignV2FzIGRpYWdub3N0aWMgbWVzc2FnZSBoYW5kbGVyIHByb3ZpZGVkOiAnCiAgICAgICAgJyR7X3Jhdy5vbkRpYWdub3N0aWMgPT0gbnVsbCA/ICJubyIgOiAieWVzIn0nKTsKCiAgICBzYi53cml0ZWxuKCdGaWxlU3lzdGVtOiAke19maWxlU3lzdGVtLnJ1bnRpbWVUeXBlfSAnCiAgICAgICAgJyhwcm92aWRlZDogJHtfcmF3LmZpbGVTeXN0ZW0ucnVudGltZVR5cGV9KScpOwoKICAgIHdyaXRlTGlzdCgnSW5wdXQgU3VtbWFyaWVzJywgX3Jhdy5pbnB1dFN1bW1hcmllcyk7CiAgICB3cml0ZUxpc3QoJ0xpbmtlZCBEZXBlbmRlbmNpZXMnLCBfcmF3LmxpbmtlZERlcGVuZGVuY2llcyk7CgogICAgc2Iud3JpdGVsbignUGFja2FnZXMgdXJpOiAke19yYXcucGFja2FnZXNGaWxlVXJpfScpOwogICAgc2Iud3JpdGVsbignUGFja2FnZXM6ICR7X3BhY2thZ2VzfScpOwoKICAgIHNiLndyaXRlbG4oJ0NvbXBpbGUgU0RLOiAke2NvbXBpbGVTZGt9Jyk7CiAgICBzYi53cml0ZWxuKCdTREsgcm9vdDogJHtfc2RrUm9vdH0gKHByb3ZpZGVkOiAke19yYXcuc2RrUm9vdH0pJyk7CiAgICBzYi53cml0ZWxuKCdTREsgc3BlY2lmaWNhdGlvbjogJHtfbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaX0gJwogICAgICAgICcocHJvdmlkZWQ6ICR7X3Jhdy5saWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpfSknKTsKICAgIHNiLndyaXRlbG4oJ1NESyBzdW1tYXJ5OiAke19zZGtTdW1tYXJ5fSAocHJvdmlkZWQ6ICR7X3Jhdy5zZGtTdW1tYXJ5fSknKTsKCiAgICBzYi53cml0ZWxuKCdMZWdhY3kgbW9kZTogJHtsZWdhY3lNb2RlfScpOwogICAgc2Iud3JpdGVsbignVGFyZ2V0OiAke190YXJnZXQ/Lm5hbWV9IChwcm92aWRlZDogJHtfcmF3LnRhcmdldD8ubmFtZX0pJyk7CgogICAgc2Iud3JpdGVsbigndGhyb3dPbkVycm9yc0ZvckRlYnVnZ2luZzogJHt0aHJvd09uRXJyb3JzRm9yRGVidWdnaW5nfScpOwogICAgc2Iud3JpdGVsbigndGhyb3dPbldhcm5pbmdzRm9yRGVidWdnaW5nOiAke3Rocm93T25XYXJuaW5nc0ZvckRlYnVnZ2luZ30nKTsKICAgIHNiLndyaXRlbG4oJ2V4aXQgb24gcHJvYmxlbTogJHtzZXRFeGl0Q29kZU9uUHJvYmxlbX0nKTsKICAgIHNiLndyaXRlbG4oJ0VtYmVkIHNvdXJjZXM6ICR7ZW1iZWRTb3VyY2VUZXh0fScpOwogICAgc2Iud3JpdGVsbignZGVidWdEdW1wOiAke2RlYnVnRHVtcH0nKTsKICAgIHNiLndyaXRlbG4oJ3ZlcmJvc2U6ICR7dmVyYm9zZX0nKTsKICAgIHNiLndyaXRlbG4oJ3ZlcmlmeTogJHt2ZXJpZnl9Jyk7CiAgICByZXR1cm4gJyRzYic7CiAgfQoKICBGdXR1cmU8TGlzdDxpbnQ+PiBfcmVhZEFzQnl0ZXMoRmlsZVN5c3RlbUVudGl0eSBmaWxlKSBhc3luYyB7CiAgICB0cnkgewogICAgICByZXR1cm4gYXdhaXQgZmlsZS5yZWFkQXNCeXRlcygpOwogICAgfSBvbiBGaWxlU3lzdGVtRXhjZXB0aW9uIGNhdGNoIChlcnJvcikgewogICAgICByZXBvcnQoCiAgICAgICAgICB0ZW1wbGF0ZUNhbnRSZWFkRmlsZQogICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGVycm9yLnVyaSwgZXJyb3IubWVzc2FnZSkKICAgICAgICAgICAgICAud2l0aG91dExvY2F0aW9uKCksCiAgICAgICAgICBTZXZlcml0eS5lcnJvcik7CiAgICAgIHJldHVybiBuZXcgVWludDhMaXN0KDApOwogICAgfQogIH0KfQoKLy8vIEEgW0ZpbGVTeXN0ZW1dIHRoYXQgb25seSBhbGxvd3MgYWNjZXNzIHRvIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGV4cGxpY2l0bHkKLy8vIHdoaXRlbGlzdGVkLgpjbGFzcyBIZXJtZXRpY0ZpbGVTeXN0ZW0gaW1wbGVtZW50cyBGaWxlU3lzdGVtIHsKICBmaW5hbCBTZXQ8VXJpPiBpbmNsdWRlZEZpbGVzOwogIGZpbmFsIEZpbGVTeXN0ZW0gX3JlYWxGaWxlU3lzdGVtOwoKICBIZXJtZXRpY0ZpbGVTeXN0ZW0odGhpcy5pbmNsdWRlZEZpbGVzLCB0aGlzLl9yZWFsRmlsZVN5c3RlbSk7CgogIEZpbGVTeXN0ZW1FbnRpdHkgZW50aXR5Rm9yVXJpKFVyaSB1cmkpIHsKICAgIGlmIChpbmNsdWRlZEZpbGVzLmNvbnRhaW5zKHVyaSkpIHJldHVybiBfcmVhbEZpbGVTeXN0ZW0uZW50aXR5Rm9yVXJpKHVyaSk7CiAgICB0aHJvdyBuZXcgSGVybWV0aWNBY2Nlc3NFeGNlcHRpb24odXJpKTsKICB9Cn0KCmNsYXNzIEhlcm1ldGljQWNjZXNzRXhjZXB0aW9uIGV4dGVuZHMgRmlsZVN5c3RlbUV4Y2VwdGlvbiB7CiAgSGVybWV0aWNBY2Nlc3NFeGNlcHRpb24oVXJpIHVyaSkKICAgICAgOiBzdXBlcigKICAgICAgICAgICAgdXJpLAogICAgICAgICAgICAnSW52YWxpZCBhY2Nlc3MgdG8gJHVyaTogJwogICAgICAgICAgICAndGhlIGZpbGUgaXMgYWNjZXNzZWQgaW4gYSBtb2R1bGFyIGhlcm1ldGljIGJ1aWxkLCAnCiAgICAgICAgICAgICdidXQgaXQgd2FzIG5vdCBleHBsaWNpdGx5IGxpc3RlZCBhcyBhbiBpbnB1dC4nKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gbWVzc2FnZTsKfQqCvgBOTjwBIAEhASkBSAFNASwqAT0BRgFJATAtATJPASs8ATYhAUkBPgEjCRoYETAwQx0SLB4jLCQhKiQBMgFAAS8BKwE6ASYJICkmATkEREdIThMESlBNSy0ZOB4BUR0WAU9IFCcBSDEgAT4GTE1OKyIBPAZMTVArLQFPDycBUAsQFBoVBAETFxoYBAEeATAyJCtENAYdBAEiJhonBAERATIBJAEiASgBLgE+ATQBSAFMATEaATYUATABSgFPTTYpST9RNkgBG1ElG0gXTi0xRTFKCAZDPQQBOSg7PzsGQBQGQTocSgYEATxGBAFFLAQBRkMxBAFKSEknATFCFAYBIDwdSxQGAR5PHU4UBgEpHUUlFAYBMk0cPR9OFggGEQQBRhUqARoBSw1EAU8ONQEqASQmAUlCAUJIEDoBEiNOATQ3KDcoKi0GSwQBQD5DKCs1Lz8IBiEEATUoOgYlBAFLJj5NLSxEPTRKIkwGJgQBQi1IBiwEAUg+TycwRD00ShxMBiAEAUxDKhpGMzYdHCdCIxYEAUoGSUlMFx0YBiI2LzArMCo/BhsEAU4fSENMAS1OGB8tOx0INQYBElEKJE8qNR1KGzUGBAE8BkkxKi0ZKE0GAR1KOR1DLgYBHgFJSAEmDj8kGy4GAToEAT88GApDRCkdUAYcGwwfTSUnECcqOR0UH00IBhkgBAFABk4YBlBRTiUGUUo8BkYVBk06OCYbHS1QJSIGASwwTxMGASArRQElJykvJBclBgFFIAQBJQFOBk0vHiYhHRgoJjQIFx1GGEEGASMlHkpOKj4GATJDHUoGBAE9IxwEARkqLB4mEAgcHR4KBgElJQE7OAE5NwE3PwE5KgEuRUM6TgEuTQFLTzw1KyclEgQBQAonLQ4fNyIbHwYEAgFOETEgJAFAAStPLAQCATwjDxEnQT4BDCACATFwYWNrYWdlOmZyb250X2VuZC9zcmMvYmFzZS9wcm9jZXNzZWRfb3B0aW9ucy5kYXJ0QHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9iYXNlL2xpYnJhcmllc19zcGVjaWZpY2F0aW9uLmRhcnSoAy8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gTGlicmFyeSBzcGVjaWZpY2F0aW9uIGluLW1lbW9yeSByZXByZXNlbnRhdGlvbi4KLy8vCi8vLyBNYW55IGRhcnQgdG9vbHMgYXJlIGNvbmZpZ3VyYWJsZSB0byBzdXBwb3J0IGRpZmZlcmVudCB0YXJnZXQgcGxhdGZvcm1zLiAgRm9yCi8vLyBhIGdpdmVuIHRhcmdldCwgdGhleSBuZWVkIHRvIGtub3cgd2hhdCBsaWJyYXJpZXMgYXJlIGF2YWlsYWJsZSBhbmQgd2hlcmUgYXJlCi8vLyB0aGUgc291cmNlcyBhbmQgdGFyZ2V0LXNwZWNpZmljIHBhdGNoZXMuCi8vLwovLy8gSGVyZSB3ZSBkZWZpbmUgQVBJcyB0byByZXByZXNlbnQgdGhpcyBzcGVjaWZpY2F0aW9uIGFuZCBpbXBsZW1lbnQKLy8vIHNlcmlhbGl6YXRpb24gdG8gKGFuZCBkZXNlcmlhbGl6YXRpb24gZnJvbSkgYSBKU09OIGZpbGUuCi8vLwovLy8gSGVyZSBpcyBhbiBleGFtcGxlIHNwZWNpZmljYXRpb24gSlNPTiBmaWxlOgovLy8KLy8vICAgICB7Ci8vLyAgICAgICAidm0iOiB7Ci8vLyAgICAgICAgICJsaWJyYXJpZXMiOiB7Ci8vLyAgICAgICAgICAgICAiY29yZSI6IHsKLy8vICAgICAgICAgICAgICAgICJ1cmkiOiAiYXN5bmMvY29yZS5kYXJ0IiwKLy8vICAgICAgICAgICAgICAgICJwYXRjaGVzIjogWwovLy8gICAgICAgICAgICAgICAgICAgICJwYXRoL3RvL2NvcmVfcGF0Y2guZGFydCIsCi8vLyAgICAgICAgICAgICAgICAgICAgInBhdGgvdG8vbGlzdF9wYXRjaC5kYXJ0IgovLy8gICAgICAgICAgICAgICAgXQovLy8gICAgICAgICAgICAgfQovLy8gICAgICAgICAgICAgImFzeW5jIjogewovLy8gICAgICAgICAgICAgICAgInVyaSI6ICJhc3luYy9hc3luYy5kYXJ0IiwKLy8vICAgICAgICAgICAgICAgICJwYXRjaGVzIjogInBhdGgvdG8vYXN5bmNfcGF0Y2guZGFydCIKLy8vICAgICAgICAgICAgIH0KLy8vICAgICAgICAgICAgICJjb252ZXJ0IjogewovLy8gICAgICAgICAgICAgICAgInVyaSI6ICJjb252ZXJ0L2NvbnZlcnQuZGFydCIsCi8vLyAgICAgICAgICAgICB9Ci8vLyAgICAgICAgICAgICAibWlycm9ycyI6IHsKLy8vICAgICAgICAgICAgICAgICJ1cmkiOiAibWlycm9ycy9taXJyb3JzLmRhcnQiLAovLy8gICAgICAgICAgICAgICAgInN1cHBvcnRlZCI6IGZhbHNlCi8vLyAgICAgICAgICAgICB9Ci8vLyAgICAgICAgIH0KLy8vICAgICAgIH0KLy8vICAgICB9Ci8vLwovLy8gVGhlIGZvcm1hdCBjb250YWluczoKLy8vICAgLSBhIHRvcCBsZXZlbCBlbnRyeSBmb3IgZWFjaCB0YXJnZXQuIEtleXMgYXJlIHRhcmdldCBuYW1lcyAoZS5nLiAidm0iCi8vLyAgICAgYWJvdmUpLCBhbmQgdmFsdWVzIGNvbnRhaW4gdGhlIGVudGlyZSBzcGVjaWZpY2F0aW9uIG9mIGEgdGFyZ2V0LgovLy8KLy8vICAgLSBlYWNoIHRhcmdldCBzcGVjaWZpY2F0aW9uIGlzIGEgbWFwLiBUb2RheSwgb25seSBvbmUga2V5IGlzIHN1cHBvcnRlZCBvbgovLy8gICAgIHRoaXMgbWFwOiAibGlicmFyaWVzIi4KLy8vCi8vLyAgIC0gVGhlICJsaWJyYXJpZXMiIGVudHJ5IGNvbnRhaW5zIGRldGFpbHMgZm9yIGhvdyBlYWNoIHBsYXRmb3JtIGxpYnJhcnkgaXMKLy8vICAgICBpbXBsZW1lbnRlZC4gVGhlIGVudHJ5IGlzIGEgbWFwLCB3aGVyZSBrZXlzIGFyZSB0aGUgbmFtZSBvZiB0aGUgcGxhdGZvcm0KLy8vICAgICBsaWJyYXJ5IGFuZCB2YWx1ZXMgY29udGFpbiBkZXRhaWxzIGZvciB3aGVyZSB0byBmaW5kIHRoZSBpbXBsZW1lbnRhdGlvbgovLy8gICAgIGZvIHRoYXQgbGlicmFyeS4KLy8vCi8vLyAgIC0gVGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgaXMgYSBzaW5nbGUgdG9rZW4gKGUuZy4gImNvcmUiKSB0aGF0IG1hdGNoZXMgdGhlCi8vLyAgICAgVXJpIHBhdGggdXNlZCBhZnRlciBgZGFydDpgIChlLmcuICJkYXJ0OmNvcmUiKS4KLy8vCi8vLyAgIC0gVGhlICJ1cmkiIGVudHJ5IG9uIHRoZSBsaWJyYXJ5IGluZm9ybWF0aW9uIGlzIG1hbmRhdG9yeS4gVGhlIHZhbHVlIGlzIGEKLy8vICAgICBzdHJpbmcgVVJJIHJlZmVyZW5jZS4gVGhlICJwYXRjaGVzIiBlbnRyeSBpcyBvcHRpb25hbCBhbmQgbWF5IGhhdmUgYXMgYQovLy8gICAgIHZhbHVlIGEgc3RyaW5nIFVSSSByZWZlcmVuY2Ugb3IgYSBsaXN0IG9mIFVSSSByZWZlcmVuY2VzLgovLy8KLy8vICAgICBBbGwgVVJJIHJlZmVyZW5jZXMgY2FuIGVpdGhlciBiZSBhIGZpbGUgVVJJIG9yIGEgcmVsYXRpdmUgVVJJIHBhdGgsCi8vLyAgICAgd2hpY2ggd2lsbCBiZSByZXNvbHZlZCByZWxhdGl2ZSB0byB0aGUgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkKLy8vICAgICBzcGVjaWZpY2F0aW9uIGZpbGUuCi8vLwovLy8gICAtIFRoZSAic3VwcG9ydGVkIiBlbnRyeSBvbiB0aGUgbGlicmFyeSBpbmZvcm1hdGlvbiBpcyBvcHRpb25hbC4gVGhlIHZhbHVlCi8vLyAgICAgaXMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbGlicmFyeSBpcyBzdXBwb3J0ZWQgaW4gdGhlCi8vLyAgICAgdW5kZXJseWluZyB0YXJnZXQuICBIb3dldmVyLCBzaW5jZSB0aGUgbGlicmFyaWVzIGFyZSBhc3N1bWVkIHRvIGJlCi8vLyAgICAgc3VwcG9ydGVkIGJ5IGRlZmF1bHQsIHdlIG9ubHkgZXhwZWN0IHVzZXJzIHRvIHVzZSBgZmFsc2VgLgovLy8KLy8vICAgICBUaGUgcHVycG9zZSBvZiB0aGlzIHZhbHVlIGlzIHRvIGNvbmZpZ3VyZSBjb25kaXRpb25hbCBpbXBvcnRzIGFuZAovLy8gICAgIGVudmlyb25tZW50IGNvbnN0YW50cy4gQnkgZGVmYXVsdCBldmVyeSBwbGF0Zm9ybSBsaWJyYXJ5IHRoYXQgaXMKLy8vICAgICBhdmFpbGFibGUgaW4gdGhlICJsaWJyYXJpZXMiIHNlY3Rpb24gaW1wbGljaXRseSBkZWZpbmVzIGFuIGVudmlyb25tZW50Ci8vLyAgICAgdmFyaWFibGUgYGRhcnQubGlicmFyeS5uYW1lYCBhcyBgInRydWUiYCwgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbGlicmFyeQovLy8gICAgIGlzIHN1cHBvcnRlZC4gIFNvbWUgYmFja2VuZHMgYWxsb3cgaW1wb3J0cyB0byBhbiB1bnN1cHBvcnRlZCBwbGF0Zm9ybQovLy8gICAgIGxpYnJhcnkgKHR1cm5pbmcgYSBzdGF0aWMgZXJyb3IgaW50byBhIHJ1bnRpbWUgZXJyb3Igd2hlbiB0aGUgbGlicmFyeSBpcwovLy8gICAgIGV2ZW50dWFsbHkgYWNjZXNzZWQpLiBUaGVzZSBiYWNrZW5kcyBjYW4gdXNlIGBzdXBwb3J0ZWQ6IGZhbHNlYCB0bwovLy8gICAgIHJlcG9ydCB0aGF0IHN1Y2ggbGlicmFyeSBpcyBzdGlsbCBub3Qgc3VwcG9ydGVkIGluIGNvbmRpdGlvbmFsIGltcG9ydHMKLy8vICAgICBhbmQgY29uc3QgYGZyb21FbnZpcm9ubWVudGAgZXhwcmVzc2lvbnMuCi8vLwovLy8KLy8vIE5vdGU6IHdlIGN1cnJlbnRseSBoYXZlIHNldmVyYWwgZGlmZmVyZW50IGZpbGVzIHRoYXQgbmVlZCB0byBiZSB1cGRhdGVkCi8vLyB3aGVuIGNoYW5naW5nIGxpYnJhcmllcywgc291cmNlcywgYW5kIHBhdGNoIGZpbGVzOgovLy8gICAgKiAucGxhdGZvcm0gZmlsZXMgKGZvciBkYXJ0MmpzKQovLy8gICAgKiAuZ3lwaSBmaWxlcyAoZm9yIHZtKQovLy8gICAgKiBzZGtfbGlicmFyeV9tZXRhZGF0YS9saWIvbGlicmFyaWVzLmRhcnQgKGZvciBhbmFseXplciwgZGRjKQovLy8KLy8vIHdlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiB1bmlmeWluZyB0aGVtIGFsbCB1bmRlciB0aGlzIGZvcm1hdCAoc2VlCi8vLyBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMjg4MzYpLCBidXQgZm9yIG5vdyB3ZSBuZWVkIHRvIHBheQovLy8gY2xvc2UgYXR0ZW50aW9uIHRvIGNoYW5nZSB0aGVtIGNvbnNpc3RlbnRseS4KCi8vIFRPRE8oc2lnbXVuZCk6IG1vdmUgdGhpcyBmaWxlIHRvIGEgc2hhcmVkIHBhY2thZ2UuCmltcG9ydCAnZGFydDpjb252ZXJ0JyBzaG93IGpzb25EZWNvZGUsIGpzb25FbmNvZGU7CgppbXBvcnQgJy4uL2Zhc3RhL3V0aWwvcmVsYXRpdml6ZS5kYXJ0JyBzaG93IHJlbGF0aXZpemVVcmk7CmltcG9ydCAnLi4vZmFzdGEvcmVzb2x2ZV9pbnB1dF91cmkuZGFydCcgc2hvdyBpc1dpbmRvd3M7CgovLy8gQ29udGVudHMgZnJvbSBhIHNpbmdsZSBsaWJyYXJ5IHNwZWNpZmljYXRpb24gZmlsZS4KLy8vCi8vLyBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhbGwgbGlicmFyaWVzIG9uIGFsbCB0YXJnZXQgcGxhdGZvcm1zIGRlZmluZWQgaW4KLy8vIHRoYXQgZmlsZS4KY2xhc3MgTGlicmFyaWVzU3BlY2lmaWNhdGlvbiB7CiAgZmluYWwgTWFwPFN0cmluZywgVGFyZ2V0TGlicmFyaWVzU3BlY2lmaWNhdGlvbj4gX3RhcmdldHM7CgogIGNvbnN0IExpYnJhcmllc1NwZWNpZmljYXRpb24oCiAgICAgIFt0aGlzLl90YXJnZXRzID0gY29uc3QgPFN0cmluZywgVGFyZ2V0TGlicmFyaWVzU3BlY2lmaWNhdGlvbj57fV0pOwoKICAvLy8gVGhlIGxpYnJhcnkgc3BlY2lmaWNhdGlvbiBmb3IgYSBnaXZlbiBbdGFyZ2V0XSwgb3IgdGhyb3dzIGlmIG5vbmUgaXMKICAvLy8gYXZhaWxhYmxlLgogIFRhcmdldExpYnJhcmllc1NwZWNpZmljYXRpb24gc3BlY2lmaWNhdGlvbkZvcihTdHJpbmcgdGFyZ2V0KSB7CiAgICBUYXJnZXRMaWJyYXJpZXNTcGVjaWZpY2F0aW9uIHRhcmdldFNwZWMgPSBfdGFyZ2V0c1t0YXJnZXRdOwogICAgaWYgKHRhcmdldFNwZWMgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgTGlicmFyaWVzU3BlY2lmaWNhdGlvbkV4Y2VwdGlvbigKICAgICAgICAgICdObyBsaWJyYXJ5IHNwZWNpZmljYXRpb24gZm9yIHRhcmdldCAiJHRhcmdldCInKTsKICAgIH0KICAgIHJldHVybiB0YXJnZXRTcGVjOwogIH0KCiAgLy8vIFBhcnNlIHRoZSBnaXZlbiBbanNvbl0gYXMgYSBsaWJyYXJ5IHNwZWNpZmljYXRpb24sIHJlc29sdmluZyBhbnkgcmVsYXRpdmUKICAvLy8gcGF0aHMgZnJvbSBbYmFzZVVyaV0uCiAgLy8vCiAgLy8vIE1heSB0aHJvdyBhbiBleGNlcHRpb24gaWYgW2pzb25dIGlzIG5vdCBwcm9wZXJseSBmb3JtYXR0ZWQgb3IgY29udGFpbnMKICAvLy8gaW52YWxpZCB2YWx1ZXMuCiAgc3RhdGljIExpYnJhcmllc1NwZWNpZmljYXRpb24gcGFyc2UoVXJpIGJhc2VVcmksIFN0cmluZyBqc29uKSB7CiAgICBpZiAoanNvbiA9PSBudWxsKSByZXR1cm4gY29uc3QgTGlicmFyaWVzU3BlY2lmaWNhdGlvbigpOwogICAgTWFwPFN0cmluZywgZHluYW1pYz4ganNvbkRhdGE7CiAgICB0cnkgewogICAgICBkeW5hbWljIGRhdGEgPSBqc29uRGVjb2RlKGpzb24pOwogICAgICBpZiAoZGF0YSBpcyEgTWFwKSB7CiAgICAgICAgcmV0dXJuIF9yZXBvcnRFcnJvcigndG9wLWxldmVsIHNwZWNpZmljYXRpb24gaXMgbm90IGEgbWFwJyk7CiAgICAgIH0KICAgICAganNvbkRhdGEgPSBkYXRhIGFzIE1hcDsKICAgIH0gb24gRm9ybWF0RXhjZXB0aW9uIGNhdGNoIChlKSB7CiAgICAgIHRocm93IG5ldyBMaWJyYXJpZXNTcGVjaWZpY2F0aW9uRXhjZXB0aW9uKGUpOwogICAgfQogICAgTWFwPFN0cmluZywgVGFyZ2V0TGlicmFyaWVzU3BlY2lmaWNhdGlvbj4gdGFyZ2V0cyA9CiAgICAgICAgPFN0cmluZywgVGFyZ2V0TGlicmFyaWVzU3BlY2lmaWNhdGlvbj57fTsKICAgIGpzb25EYXRhLmZvckVhY2goKFN0cmluZyB0YXJnZXROYW1lLCB0YXJnZXREYXRhKSB7CiAgICAgIGlmICh0YXJnZXROYW1lLnN0YXJ0c1dpdGgoImNvbW1lbnQ6IikpIHJldHVybiBudWxsOwogICAgICBNYXA8U3RyaW5nLCBMaWJyYXJ5SW5mbz4gbGlicmFyaWVzID0gPFN0cmluZywgTGlicmFyeUluZm8+e307CiAgICAgIGlmICh0YXJnZXREYXRhIGlzISBNYXApIHsKICAgICAgICByZXR1cm4gX3JlcG9ydEVycm9yKAogICAgICAgICAgICAidGFyZ2V0IHNwZWNpZmljYXRpb24gZm9yICckdGFyZ2V0TmFtZScgaXMgbm90IGEgbWFwIik7CiAgICAgIH0KICAgICAgaWYgKCF0YXJnZXREYXRhLmNvbnRhaW5zS2V5KCJsaWJyYXJpZXMiKSkgewogICAgICAgIHJldHVybiBfcmVwb3J0RXJyb3IoInRhcmdldCBzcGVjaWZpY2F0aW9uICIKICAgICAgICAgICAgImZvciAnJHRhcmdldE5hbWUnIGRvZXNuJ3QgaGF2ZSBhIGxpYnJhcmllcyBlbnRyeSIpOwogICAgICB9CiAgICAgIGR5bmFtaWMgbGlicmFyaWVzRGF0YSA9IHRhcmdldERhdGFbImxpYnJhcmllcyJdOwogICAgICBpZiAobGlicmFyaWVzRGF0YSBpcyEgTWFwKSB7CiAgICAgICAgcmV0dXJuIF9yZXBvcnRFcnJvcigibGlicmFyaWVzIGVudHJ5IGZvciAnJHRhcmdldE5hbWUnIGlzIG5vdCBhIG1hcCIpOwogICAgICB9CiAgICAgIGxpYnJhcmllc0RhdGEuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIGRhdGEpIHsKICAgICAgICBpZiAoZGF0YSBpcyEgTWFwKSB7CiAgICAgICAgICByZXR1cm4gX3JlcG9ydEVycm9yKAogICAgICAgICAgICAgICJsaWJyYXJ5IGRhdGEgZm9yICckbmFtZScgaW4gdGFyZ2V0ICckdGFyZ2V0TmFtZScgaXMgbm90IGEgbWFwIik7CiAgICAgICAgfQogICAgICAgIFVyaSBjaGVja0FuZFJlc29sdmUodXJpU3RyaW5nKSB7CiAgICAgICAgICBpZiAodXJpU3RyaW5nIGlzISBTdHJpbmcpIHsKICAgICAgICAgICAgcmV0dXJuIF9yZXBvcnRFcnJvcigidXJpIHZhbHVlICckdXJpU3RyaW5nJyBpcyBub3QgYSBzdHJpbmciCiAgICAgICAgICAgICAgICAiKGZyb20gbGlicmFyeSAnJG5hbWUnIGluIHRhcmdldCAnJHRhcmdldE5hbWUnKSIpOwogICAgICAgICAgfQogICAgICAgICAgVXJpIHVyaSA9IFVyaS5wYXJzZSh1cmlTdHJpbmcpOwogICAgICAgICAgaWYgKHVyaS5zY2hlbWUgIT0gJycgJiYgdXJpLnNjaGVtZSAhPSAnZmlsZScpIHsKICAgICAgICAgICAgcmV0dXJuIF9yZXBvcnRFcnJvcigidXJpIHNjaGVtZSBpbiAnJHVyaVN0cmluZycgaXMgbm90IHN1cHBvcnRlZC4iKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBiYXNlVXJpLnJlc29sdmVVcmkodXJpKTsKICAgICAgICB9CgogICAgICAgIFVyaSB1cmkgPSBjaGVja0FuZFJlc29sdmUoZGF0YVsndXJpJ10pOwogICAgICAgIExpc3Q8VXJpPiBwYXRjaGVzOwogICAgICAgIGlmIChkYXRhWydwYXRjaGVzJ10gaXMgTGlzdCkgewogICAgICAgICAgcGF0Y2hlcyA9CiAgICAgICAgICAgICAgZGF0YVsncGF0Y2hlcyddLm1hcDxVcmk+KChzKSA9PiBiYXNlVXJpLnJlc29sdmUocykpLnRvTGlzdCgpOwogICAgICAgIH0gZWxzZSBpZiAoZGF0YVsncGF0Y2hlcyddIGlzIFN0cmluZykgewogICAgICAgICAgcGF0Y2hlcyA9IFtjaGVja0FuZFJlc29sdmUoZGF0YVsncGF0Y2hlcyddKV07CiAgICAgICAgfSBlbHNlIGlmIChkYXRhWydwYXRjaGVzJ10gPT0gbnVsbCkgewogICAgICAgICAgcGF0Y2hlcyA9IGNvbnN0IFtdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gX3JlcG9ydEVycm9yKAogICAgICAgICAgICAgICJwYXRjaGVzIGVudHJ5IGZvciAnJG5hbWUnIGlzIG5vdCBhIGxpc3Qgb3IgYSBzdHJpbmciKTsKICAgICAgICB9CgogICAgICAgIGR5bmFtaWMgc3VwcG9ydGVkID0gZGF0YVsnc3VwcG9ydGVkJ10gPz8gdHJ1ZTsKICAgICAgICBpZiAoc3VwcG9ydGVkIGlzISBib29sKSB7CiAgICAgICAgICByZXR1cm4gX3JlcG9ydEVycm9yKCJcInN1cHBvcnRlZFwiIGVudHJ5OiBleHBlY3RlZCBhICdib29sJyBidXQgIgogICAgICAgICAgICAgICJnb3QgYSAnJHtzdXBwb3J0ZWQucnVudGltZVR5cGV9JyAoJyRzdXBwb3J0ZWQnKSIpOwogICAgICAgIH0KICAgICAgICBsaWJyYXJpZXNbbmFtZV0gPQogICAgICAgICAgICBuZXcgTGlicmFyeUluZm8obmFtZSwgdXJpLCBwYXRjaGVzLCBpc1N1cHBvcnRlZDogc3VwcG9ydGVkKTsKICAgICAgfSk7CiAgICAgIHRhcmdldHNbdGFyZ2V0TmFtZV0gPQogICAgICAgICAgbmV3IFRhcmdldExpYnJhcmllc1NwZWNpZmljYXRpb24odGFyZ2V0TmFtZSwgbGlicmFyaWVzKTsKICAgIH0pOwogICAgcmV0dXJuIG5ldyBMaWJyYXJpZXNTcGVjaWZpY2F0aW9uKHRhcmdldHMpOwogIH0KCiAgc3RhdGljIF9yZXBvcnRFcnJvcihTdHJpbmcgZXJyb3IpID0+CiAgICAgIHRocm93IG5ldyBMaWJyYXJpZXNTcGVjaWZpY2F0aW9uRXhjZXB0aW9uKGVycm9yKTsKCiAgLy8vIFNlcmlhbGl6ZSB0aGlzIHNwZWNpZmljYXRpb24gdG8ganNvbi4KICAvLy8KICAvLy8gSWYgcG9zc2libGUgc2VyaWFsaXplcyBwYXRocyByZWxhdGl2ZSB0byBbb3V0cHV0VXJpXS4KICBTdHJpbmcgdG9Kc29uU3RyaW5nKFVyaSBvdXRwdXRVcmkpID0+IGpzb25FbmNvZGUodG9Kc29uTWFwKG91dHB1dFVyaSkpOwoKICBNYXAgdG9Kc29uTWFwKFVyaSBvdXRwdXRVcmkpIHsKICAgIE1hcCByZXN1bHQgPSB7fTsKICAgIFVyaSBkaXIgPSBvdXRwdXRVcmkucmVzb2x2ZSgnLicpOwogICAgU3RyaW5nIHBhdGhGb3IoVXJpIHVyaSkgPT4gcmVsYXRpdml6ZVVyaShkaXIsIHVyaSwgaXNXaW5kb3dzKTsKICAgIF90YXJnZXRzLmZvckVhY2goKHRhcmdldE5hbWUsIHRhcmdldCkgewogICAgICBNYXAgbGlicmFyaWVzID0ge307CiAgICAgIHRhcmdldC5fbGlicmFyaWVzLmZvckVhY2goKG5hbWUsIGxpYikgewogICAgICAgIGxpYnJhcmllc1tuYW1lXSA9IHsKICAgICAgICAgICd1cmknOiBwYXRoRm9yKGxpYi51cmkpLAogICAgICAgICAgJ3BhdGNoZXMnOiBsaWIucGF0Y2hlcy5tYXAocGF0aEZvcikudG9MaXN0KCksCiAgICAgICAgfTsKICAgICAgICBpZiAoIWxpYi5pc1N1cHBvcnRlZCkgewogICAgICAgICAgbGlicmFyaWVzW25hbWVdWydzdXBwb3J0ZWQnXSA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHJlc3VsdFt0YXJnZXROYW1lXSA9IHsnbGlicmFyaWVzJzogbGlicmFyaWVzfTsKICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KCi8vLyBTcGVjaWZpZXMgaW5mb3JtYXRpb24gYWJvdXQgYWxsIGxpYnJhcmllcyBzdXBwb3J0ZWQgYnkgYSBnaXZlbiB0YXJnZXQuCmNsYXNzIFRhcmdldExpYnJhcmllc1NwZWNpZmljYXRpb24gewogIC8vLyBOYW1lIG9mIHRoZSB0YXJnZXQgcGxhdGZvcm0uCiAgZmluYWwgU3RyaW5nIHRhcmdldE5hbWU7CgogIGZpbmFsIE1hcDxTdHJpbmcsIExpYnJhcnlJbmZvPiBfbGlicmFyaWVzOwoKICBjb25zdCBUYXJnZXRMaWJyYXJpZXNTcGVjaWZpY2F0aW9uKHRoaXMudGFyZ2V0TmFtZSwKICAgICAgW3RoaXMuX2xpYnJhcmllcyA9IGNvbnN0IDxTdHJpbmcsIExpYnJhcnlJbmZvPnt9XSk7CgogIC8vLyBEZXRhaWxzIGFib3V0IGEgbGlicmFyeSB3aG9zZSBpbXBvcnQgaXMgYGRhcnQ6JG5hbWVgLgogIExpYnJhcnlJbmZvIGxpYnJhcnlJbmZvRm9yKFN0cmluZyBuYW1lKSA9PiBfbGlicmFyaWVzW25hbWVdOwoKICBJdGVyYWJsZTxMaWJyYXJ5SW5mbz4gZ2V0IGFsbExpYnJhcmllcyA9PiBfbGlicmFyaWVzLnZhbHVlczsKfQoKLy8vIEluZm9ybWF0aW9uIGFib3V0IGEgYGRhcnQ6YCBsaWJyYXJ5IGluIGEgc3BlY2lmaWMgdGFyZ2V0IHBsYXRmb3JtLgpjbGFzcyBMaWJyYXJ5SW5mbyB7CiAgLy8vIFRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCBpcyB0aGUgcGF0aCBkZXZlbG9wZXJzIHVzZSB0byBpbXBvcnQgdGhpcwogIC8vLyBsaWJyYXJ5IChhcyBgZGFydDokbmFtZWApLgogIGZpbmFsIFN0cmluZyBuYW1lOwoKICAvLy8gVGhlIGZpbGUgZGVmaW5pbmcgdGhlIG1haW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIGxpYnJhcnkuCiAgZmluYWwgVXJpIHVyaTsKCiAgLy8vIFBhdGNoIGZpbGVzIHVzZWQgZm9yIHRoaXMgbGlicmFyeSBpbiB0aGUgdGFyZ2V0IHBsYXRmb3JtLCBpZiBhbnkuCiAgZmluYWwgTGlzdDxVcmk+IHBhdGNoZXM7CgogIC8vLyBXaGV0aGVyIHRoZSBsaWJyYXJ5IGlzIHN1cHBvcnRlZCBhbmQgdGh1cyBgZGFydC5saWJyYXJ5Lm5hbWVgIGlzICJ0cnVlIgogIC8vLyBmb3IgY29uZGl0aW9uYWwgaW1wb3J0cyBhbmQgZnJvbUVudmlyb25tZW50IGNvbnN0YW50cy4KICBmaW5hbCBib29sIGlzU3VwcG9ydGVkOwoKICBjb25zdCBMaWJyYXJ5SW5mbyh0aGlzLm5hbWUsIHRoaXMudXJpLCB0aGlzLnBhdGNoZXMsCiAgICAgIHt0aGlzLmlzU3VwcG9ydGVkOiB0cnVlfSk7Cn0KCmNsYXNzIExpYnJhcmllc1NwZWNpZmljYXRpb25FeGNlcHRpb24gewogIE9iamVjdCBlcnJvcjsKICBMaWJyYXJpZXNTcGVjaWZpY2F0aW9uRXhjZXB0aW9uKHRoaXMuZXJyb3IpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJGVycm9yJzsKfQqBDABOTjwBNARRUS0ERj0EMAQKEhsaLSAyMRUSGy45Eh0yEh0yJhIODAoEGUxJBFAfBFBRUBkEUTgEUFBCBExHHARQSEtDBEpJT09OUUtPMQQETDcnHkUERk8xATYzATs5ATcEUA8fPAEgSQFLEUFAHjE8BhcEAVAcBk0WQj0jCicaRQgeJTQGODI3OkQgHUQIMjRBCDcjTwgyHB9QCikmSUMMKjpRDCoKATAbJxRMMDguHhEfRgoBNyJMQgoaSQocQwgwBAEnOAEsBjxKASEVJkMsGi4cIzgLIDAKCjUIEwQCAUslIxsBLQE2OgE8PwE/AgFHFE8hFQFAEQFIGwFOPRoBNyECASgQLwEhAgE3cGFja2FnZTpmcm9udF9lbmQvc3JjL2Jhc2UvbGlicmFyaWVzX3NwZWNpZmljYXRpb24uZGFydDpzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvY29tcGlsZXJfY29udGV4dC5kYXJ0lC0vLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5jb21waWxlcl9jb250ZXh0OwoKaW1wb3J0ICdkYXJ0OmFzeW5jJyBzaG93IEZ1dHVyZSwgWm9uZSwgcnVuWm9uZWQ7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IFNvdXJjZTsKCmltcG9ydCAnLi4vYXBpX3Byb3RvdHlwZS9maWxlX3N5c3RlbS5kYXJ0JyBzaG93IEZpbGVTeXN0ZW07CgppbXBvcnQgJy4uL2Jhc2UvcHJvY2Vzc2VkX29wdGlvbnMuZGFydCcgc2hvdyBQcm9jZXNzZWRPcHRpb25zOwoKaW1wb3J0ICdzY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgU3RyaW5nVG9rZW47CgppbXBvcnQgJ2NvbW1hbmRfbGluZV9yZXBvcnRpbmcuZGFydCcgYXMgY29tbWFuZF9saW5lX3JlcG9ydGluZzsKCmltcG9ydCAnY29sb3JzLmRhcnQnIHNob3cgY29tcHV0ZUVuYWJsZUNvbG9yczsKCmltcG9ydCAnZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cgTG9jYXRlZE1lc3NhZ2UsIE1lc3NhZ2UsIG1lc3NhZ2VJbnRlcm5hbFByb2JsZW1NaXNzaW5nQ29udGV4dDsKCmltcG9ydCAnc2V2ZXJpdHkuZGFydCcgc2hvdyBTZXZlcml0eTsKCmZpbmFsIE9iamVjdCBjb21waWxlckNvbnRleHRLZXkgPSBuZXcgT2JqZWN0KCk7CgovLy8gU2hhcmVkIGNvbnRleHQgdXNlZCB0aHJvdWdob3V0IHRoZSBjb21waWxlci4KLy8vCi8vLyBUaGUgY29tcGlsZXIgd29ya3Mgd2l0aCBhIHNpbmdsZSBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLiBUbyBhdm9pZAovLy8gcGFzc2luZyBpdCBhcm91bmQgYXMgYW4gYXJndW1lbnQgZXZlcnl3aGVyZSwgaXQgaXMgc3RvcmVkIGFzIGEgem9uZS12YWx1ZS4KLy8vCi8vLyBGb3IgY29udmVuaWVuY2UgdGhlIHN0YXRpYyBnZXR0ZXIgW0NvbXBpbGVyQ29udGV4dC5jdXJyZW50XSByZXRyaWV2ZXMgdGhlCi8vLyBjb250ZXh0IHN0b3JlZCBpbiB0aGUgY3VycmVudCB6b25lLgpjbGFzcyBDb21waWxlckNvbnRleHQgewogIC8vIFRPRE8oc2lnbXVuZCk6IE1vdmUgaGVyZSBhbnkgbWV0aG9kIGluIFByb2Nlc3NlZE9wdGlvbnMgdGhhdCBkb2Vzbid0IHNlZW0KICAvLyBhcHByb3ByaWF0ZSBhcyBhbiAib3B0aW9uIiwgb3IgY29uc2lkZXIgbWVyZ2luZyBQcm9jZXNzZWRPcHRpb25zIGVudGlyZWx5CiAgLy8gd2l0aGluIHRoaXMgY2xhc3MsIGFuZCBkZXBlbmQgb25seSBvbiB0aGUgcmF3IG9wdGlvbnMgaGVyZS4KICBmaW5hbCBQcm9jZXNzZWRPcHRpb25zIG9wdGlvbnM7CgogIC8vLyBTb3VyY2VzIHNlZW4gYnkgdGhlIGNvbXBpbGVyLgogIC8vLwogIC8vLyBUaGlzIGlzIHBvcHVsYXRlZCBhcyB0aGUgY29tcGlsZXIgcmVhZHMgZmlsZXMsIGFuZCBpdCBpcyB1c2VkIGZvciBlcnJvcgogIC8vLyByZXBvcnRpbmcgYW5kIHRvIGdlbmVyYXRlIHNvdXJjZSBsb2NhdGlvbiBpbmZvcm1hdGlvbiBpbiB0aGUgY29tcGlsZWQKICAvLy8gcHJvZ3JhbXMuCiAgZmluYWwgTWFwPFVyaSwgU291cmNlPiB1cmlUb1NvdXJjZSA9IDxVcmksIFNvdXJjZT57fTsKCiAgLy8gVE9ETyhhaGUpOiBSZW1vdmUgdGhpcy4KICBmaW5hbCBMaXN0PE9iamVjdD4gZXJyb3JzID0gPE9iamVjdD5bXTsKCiAgZmluYWwgTGlzdDxVcmk+IGRlcGVuZGVuY2llcyA9IDxVcmk+W107CgogIEZpbGVTeXN0ZW0gZ2V0IGZpbGVTeXN0ZW0gPT4gb3B0aW9ucy5maWxlU3lzdGVtOwoKICBib29sIGVuYWJsZUNvbG9yc0NhY2hlZCA9IG51bGw7CgogIFVyaSBjYWNoZWRTZGtSb290ID0gbnVsbDsKCiAgQ29tcGlsZXJDb250ZXh0KHRoaXMub3B0aW9ucyk7CgogIHZvaWQgZGlzYWJsZUNvbG9ycygpIHsKICAgIGVuYWJsZUNvbG9yc0NhY2hlZCA9IGZhbHNlOwogIH0KCiAgLy8vIFJlcG9ydCBbbWVzc2FnZV0sIGZvciBleGFtcGxlLCBieSBwcmludGluZyBpdC4KICB2b2lkIHJlcG9ydChMb2NhdGVkTWVzc2FnZSBtZXNzYWdlLCBTZXZlcml0eSBzZXZlcml0eSwKICAgICAge0xpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHR9KSB7CiAgICBvcHRpb25zLnJlcG9ydChtZXNzYWdlLCBzZXZlcml0eSwgY29udGV4dDogY29udGV4dCk7CiAgfQoKICAvLy8gUmVwb3J0IFttZXNzYWdlXSwgZm9yIGV4YW1wbGUsIGJ5IHByaW50aW5nIGl0LgogIC8vIFRPRE8oYXNrZXNjKTogUmVtb3ZlIHRoaXMgYW5kIGRpcmVjdCBjYWxsZXJzIGRpcmVjdGx5IHRvIHJlcG9ydC4KICB2b2lkIHJlcG9ydFdpdGhvdXRMb2NhdGlvbihNZXNzYWdlIG1lc3NhZ2UsIFNldmVyaXR5IHNldmVyaXR5KSB7CiAgICBvcHRpb25zLnJlcG9ydFdpdGhvdXRMb2NhdGlvbihtZXNzYWdlLCBzZXZlcml0eSk7CiAgfQoKICAvLy8gRm9ybWF0IFttZXNzYWdlXSBhcyBhIHRleHQgc3RyaW5nIHRoYXQgY2FuIGJlIGluY2x1ZGVkIGluIGdlbmVyYXRlZCBjb2RlLgogIFN0cmluZyBmb3JtYXQoTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZSwgU2V2ZXJpdHkgc2V2ZXJpdHkpIHsKICAgIHJldHVybiBjb21tYW5kX2xpbmVfcmVwb3J0aW5nLmZvcm1hdChtZXNzYWdlLCBzZXZlcml0eSk7CiAgfQoKICAvLy8gRm9ybWF0IFttZXNzYWdlXSBhcyBhIHRleHQgc3RyaW5nIHRoYXQgY2FuIGJlIGluY2x1ZGVkIGluIGdlbmVyYXRlZCBjb2RlLgogIC8vIFRPRE8oYXNrZXNjKTogUmVtb3ZlIHRoaXMgYW5kIGRpcmVjdCBjYWxsZXJzIGRpcmVjdGx5IHRvIGZvcm1hdC4KICBTdHJpbmcgZm9ybWF0V2l0aG91dExvY2F0aW9uKE1lc3NhZ2UgbWVzc2FnZSwgU2V2ZXJpdHkgc2V2ZXJpdHkpIHsKICAgIHJldHVybiBjb21tYW5kX2xpbmVfcmVwb3J0aW5nLmZvcm1hdChtZXNzYWdlLndpdGhvdXRMb2NhdGlvbigpLCBzZXZlcml0eSk7CiAgfQoKICAvLyBUT0RPKGFoZSk6IFJlbW92ZSB0aGlzLgogIHZvaWQgbG9nRXJyb3IoT2JqZWN0IG1lc3NhZ2UsIFNldmVyaXR5IHNldmVyaXR5KSB7CiAgICBlcnJvcnMuYWRkKG1lc3NhZ2UpOwogICAgZXJyb3JzLmFkZChzZXZlcml0eSk7CiAgfQoKICBzdGF0aWMgdm9pZCByZWNvcmREZXBlbmRlbmN5KFVyaSB1cmkpIHsKICAgIGlmICh1cmkuc2NoZW1lICE9ICJmaWxlIikgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiRXhwZWN0ZWQgYSBmaWxlLVVSSSwgYnV0IGdvdDogJyR1cmknLiIpOwogICAgfQogICAgQ29tcGlsZXJDb250ZXh0IGNvbnRleHQgPSBab25lLmN1cnJlbnRbY29tcGlsZXJDb250ZXh0S2V5XTsKICAgIGlmIChjb250ZXh0ICE9IG51bGwpIHsKICAgICAgY29udGV4dC5kZXBlbmRlbmNpZXMuYWRkKHVyaSk7CiAgICB9CiAgfQoKICBzdGF0aWMgQ29tcGlsZXJDb250ZXh0IGdldCBjdXJyZW50IHsKICAgIENvbXBpbGVyQ29udGV4dCBjb250ZXh0ID0gWm9uZS5jdXJyZW50W2NvbXBpbGVyQ29udGV4dEtleV07CiAgICBpZiAoY29udGV4dCA9PSBudWxsKSB7CiAgICAgIC8vIE5vdGU6IHdlIHRocm93IGRpcmVjdGx5IGFuZCBkb24ndCB1c2UgaW50ZXJuYWxQcm9ibGVtLCBiZWNhdXNlCiAgICAgIC8vIGludGVybmFsUHJvYmxlbSBkZXBlbmRzIG9uIGhhdmluZyBhIGNvbXBpbGVyIGNvbnRleHQgYXZhaWxhYmxlLgogICAgICBTdHJpbmcgbWVzc2FnZSA9IG1lc3NhZ2VJbnRlcm5hbFByb2JsZW1NaXNzaW5nQ29udGV4dC5tZXNzYWdlOwogICAgICBTdHJpbmcgdGlwID0gbWVzc2FnZUludGVybmFsUHJvYmxlbU1pc3NpbmdDb250ZXh0LnRpcDsKICAgICAgdGhyb3cgIkludGVybmFsIHByb2JsZW06ICRtZXNzYWdlXG5UaXA6ICR0aXAiOwogICAgfQogICAgcmV0dXJuIGNvbnRleHQ7CiAgfQoKICBzdGF0aWMgYm9vbCBnZXQgaXNBY3RpdmUgPT4gWm9uZS5jdXJyZW50W2NvbXBpbGVyQ29udGV4dEtleV0gIT0gbnVsbDsKCiAgLy8vIFBlcmZvcm0gW2FjdGlvbl0gaW4gYSBbWm9uZV0gd2hlcmUgW3RoaXNdIHdpbGwgYmUgYXZhaWxhYmxlIGFzCiAgLy8vIGBDb21waWxlckNvbnRleHQuY3VycmVudGAuCiAgRnV0dXJlPFQ+IHJ1bkluQ29udGV4dDxUPihGdXR1cmU8VD4gYWN0aW9uKENvbXBpbGVyQ29udGV4dCBjKSkgewogICAgcmV0dXJuIHJ1blpvbmVkKAogICAgICAgICgpID0+IG5ldyBGdXR1cmU8VD4uc3luYygoKSA9PiBhY3Rpb24odGhpcykpLndoZW5Db21wbGV0ZShjbGVhciksCiAgICAgICAgem9uZVZhbHVlczoge2NvbXBpbGVyQ29udGV4dEtleTogdGhpc30pOwogIH0KCiAgLy8vIFBlcmZvcm0gW2FjdGlvbl0gaW4gYSBbWm9uZV0gd2hlcmUgW29wdGlvbnNdIHdpbGwgYmUgYXZhaWxhYmxlIGFzCiAgLy8vIGBDb21waWxlckNvbnRleHQuY3VycmVudC5vcHRpb25zYC4KICBzdGF0aWMgRnV0dXJlPFQ+IHJ1bldpdGhPcHRpb25zPFQ+KAogICAgICBQcm9jZXNzZWRPcHRpb25zIG9wdGlvbnMsIEZ1dHVyZTxUPiBhY3Rpb24oQ29tcGlsZXJDb250ZXh0IGMpLAogICAgICB7Ym9vbCBlcnJvck9uTWlzc2luZ0lucHV0OiB0cnVlfSkgewogICAgcmV0dXJuIG5ldyBDb21waWxlckNvbnRleHQob3B0aW9ucykKICAgICAgICAucnVuSW5Db250ZXh0PFQ+KChDb21waWxlckNvbnRleHQgYykgYXN5bmMgewogICAgICBhd2FpdCBvcHRpb25zLnZhbGlkYXRlT3B0aW9ucyhlcnJvck9uTWlzc2luZ0lucHV0OiBlcnJvck9uTWlzc2luZ0lucHV0KTsKICAgICAgcmV0dXJuIGFjdGlvbihjKTsKICAgIH0pOwogIH0KCiAgc3RhdGljIEZ1dHVyZTxUPiBydW5XaXRoRGVmYXVsdE9wdGlvbnM8VD4oCiAgICAgIEZ1dHVyZTxUPiBhY3Rpb24oQ29tcGlsZXJDb250ZXh0IGMpKSB7CiAgICByZXR1cm4gbmV3IENvbXBpbGVyQ29udGV4dChuZXcgUHJvY2Vzc2VkT3B0aW9ucygpKS5ydW5JbkNvbnRleHQ8VD4oYWN0aW9uKTsKICB9CgogIHN0YXRpYyBib29sIGdldCBlbmFibGVDb2xvcnMgewogICAgcmV0dXJuIGN1cnJlbnQuZW5hYmxlQ29sb3JzQ2FjaGVkID8/PSBjb21wdXRlRW5hYmxlQ29sb3JzKGN1cnJlbnQpOwogIH0KCiAgdm9pZCBjbGVhcigpIHsKICAgIFN0cmluZ1Rva2VuLmNhbm9uaWNhbGl6ZXIuY2xlYXIoKTsKICAgIGVycm9ycy5jbGVhcigpOwogICAgZGVwZW5kZW5jaWVzLmNsZWFyKCk7CiAgfQp9CoCaAE5OPAEgATEBLgE8AT8BLgFAAS8BGkgBJgEwATEERk8ETigYT09BIgEkBk5MEDgBHSoBKgEzASIBHAEhARkgBAE1OSg5BAE1RkM2BAFQPT0EAVBGRU8EAR01GRoEASogSAZAGyUGBAEnQBtISUU9NQYUBAFIAUUhQxVKMQQBSCkmRSooNU8YCAQBLS1QBAEhSAQBEScUGgQCATFwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvY29tcGlsZXJfY29udGV4dC5kYXJ0NXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9mYXN0YV9jb2Rlcy5kYXJ0m5svLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5jb2RlczsKCmltcG9ydCAnZGFydDpjb252ZXJ0JyBzaG93IEpzb25FbmNvZGVyLCBqc29uOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cgQ29uc3RhbnQsIERhcnRUeXBlLCBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lOwoKaW1wb3J0ICcuLi9hcGlfcHJvdG90eXBlL2RpYWdub3N0aWNfbWVzc2FnZS5kYXJ0JyBzaG93IERpYWdub3N0aWNNZXNzYWdlOwoKaW1wb3J0ICcuLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJ2tlcm5lbC90eXBlX2xhYmVsZXIuZGFydCc7CgppbXBvcnQgJ3NldmVyaXR5LmRhcnQnIHNob3cgU2V2ZXJpdHk7CgppbXBvcnQgJ3Jlc29sdmVfaW5wdXRfdXJpLmRhcnQnIHNob3cgaXNXaW5kb3dzOwoKaW1wb3J0ICd1dGlsL3JlbGF0aXZpemUuZGFydCcgYXMgdXRpbCBzaG93IHJlbGF0aXZpemVVcmk7CgpwYXJ0ICdmYXN0YV9jb2Rlc19nZW5lcmF0ZWQuZGFydCc7Cgpjb25zdCBpbnQgbm9MZW5ndGggPSAxOwoKY2xhc3MgQ29kZTxUPiB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIC8vLyBUaGUgdW5pcXVlIHBvc2l0aXZlIGludGVnZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29kZSwKICAvLy8gb3IgYC0xYCBpZiBub25lLiBUaGlzIGluZGV4IGlzIHVzZWQgd2hlbiB0cmFuc2xhdGluZwogIC8vLyB0aGlzIGVycm9yIHRvIGl0cyBjb3JyZXNwb25kaW5nIEFuYWx5emVyIGVycm9yLgogIGZpbmFsIGludCBpbmRleDsKCiAgZmluYWwgVGVtcGxhdGU8VD4gdGVtcGxhdGU7CgogIGZpbmFsIExpc3Q8U3RyaW5nPiBhbmFseXplckNvZGVzOwoKICBmaW5hbCBTZXZlcml0eSBzZXZlcml0eTsKCiAgY29uc3QgQ29kZSh0aGlzLm5hbWUsIHRoaXMudGVtcGxhdGUsCiAgICAgIHtpbnQgaW5kZXgsIHRoaXMuYW5hbHl6ZXJDb2RlcywgdGhpcy5zZXZlcml0eTogU2V2ZXJpdHkuZXJyb3J9KQogICAgICA6IHRoaXMuaW5kZXggPSBpbmRleCA/PyAtMTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gbmFtZTsKfQoKY2xhc3MgTWVzc2FnZSB7CiAgZmluYWwgQ29kZTxkeW5hbWljPiBjb2RlOwoKICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKCiAgZmluYWwgU3RyaW5nIHRpcDsKCiAgZmluYWwgTWFwPFN0cmluZywgZHluYW1pYz4gYXJndW1lbnRzOwoKICBjb25zdCBNZXNzYWdlKHRoaXMuY29kZSwge3RoaXMubWVzc2FnZSwgdGhpcy50aXAsIHRoaXMuYXJndW1lbnRzfSk7CgogIExvY2F0ZWRNZXNzYWdlIHdpdGhMb2NhdGlvbihVcmkgdXJpLCBpbnQgY2hhck9mZnNldCwgaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBMb2NhdGVkTWVzc2FnZSh1cmksIGNoYXJPZmZzZXQsIGxlbmd0aCwgdGhpcyk7CiAgfQoKICBMb2NhdGVkTWVzc2FnZSB3aXRob3V0TG9jYXRpb24oKSB7CiAgICByZXR1cm4gbmV3IExvY2F0ZWRNZXNzYWdlKG51bGwsIC0xLCBub0xlbmd0aCwgdGhpcyk7CiAgfQp9CgpjbGFzcyBNZXNzYWdlQ29kZSBleHRlbmRzIENvZGU8TnVsbD4gaW1wbGVtZW50cyBNZXNzYWdlIHsKICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKCiAgZmluYWwgU3RyaW5nIHRpcDsKCiAgY29uc3QgTWVzc2FnZUNvZGUoU3RyaW5nIG5hbWUsCiAgICAgIHtpbnQgaW5kZXgsCiAgICAgIExpc3Q8U3RyaW5nPiBhbmFseXplckNvZGVzLAogICAgICBTZXZlcml0eSBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3IsCiAgICAgIHRoaXMubWVzc2FnZSwKICAgICAgdGhpcy50aXB9KQogICAgICA6IHN1cGVyKG5hbWUsIG51bGwsCiAgICAgICAgICAgIGluZGV4OiBpbmRleCwgYW5hbHl6ZXJDb2RlczogYW5hbHl6ZXJDb2Rlcywgc2V2ZXJpdHk6IHNldmVyaXR5KTsKCiAgTWFwPFN0cmluZywgZHluYW1pYz4gZ2V0IGFyZ3VtZW50cyA9PiBjb25zdCA8U3RyaW5nLCBkeW5hbWljPnt9OwoKICBDb2RlPGR5bmFtaWM+IGdldCBjb2RlID0+IHRoaXM7CgogIEBvdmVycmlkZQogIExvY2F0ZWRNZXNzYWdlIHdpdGhMb2NhdGlvbihVcmkgdXJpLCBpbnQgY2hhck9mZnNldCwgaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBMb2NhdGVkTWVzc2FnZSh1cmksIGNoYXJPZmZzZXQsIGxlbmd0aCwgdGhpcyk7CiAgfQoKICBMb2NhdGVkTWVzc2FnZSB3aXRob3V0TG9jYXRpb24oKSB7CiAgICByZXR1cm4gbmV3IExvY2F0ZWRNZXNzYWdlKG51bGwsIC0xLCBub0xlbmd0aCwgdGhpcyk7CiAgfQp9CgpjbGFzcyBUZW1wbGF0ZTxUPiB7CiAgZmluYWwgU3RyaW5nIG1lc3NhZ2VUZW1wbGF0ZTsKCiAgZmluYWwgU3RyaW5nIHRpcFRlbXBsYXRlOwoKICBmaW5hbCBUIHdpdGhBcmd1bWVudHM7CgogIGNvbnN0IFRlbXBsYXRlKHt0aGlzLm1lc3NhZ2VUZW1wbGF0ZSwgdGhpcy50aXBUZW1wbGF0ZSwgdGhpcy53aXRoQXJndW1lbnRzfSk7Cn0KCmNsYXNzIExvY2F0ZWRNZXNzYWdlIGltcGxlbWVudHMgQ29tcGFyYWJsZTxMb2NhdGVkTWVzc2FnZT4gewogIGZpbmFsIFVyaSB1cmk7CgogIGZpbmFsIGludCBjaGFyT2Zmc2V0OwoKICBmaW5hbCBpbnQgbGVuZ3RoOwoKICBmaW5hbCBNZXNzYWdlIG1lc3NhZ2VPYmplY3Q7CgogIGNvbnN0IExvY2F0ZWRNZXNzYWdlKAogICAgICB0aGlzLnVyaSwgdGhpcy5jaGFyT2Zmc2V0LCB0aGlzLmxlbmd0aCwgdGhpcy5tZXNzYWdlT2JqZWN0KTsKCiAgQ29kZTxkeW5hbWljPiBnZXQgY29kZSA9PiBtZXNzYWdlT2JqZWN0LmNvZGU7CgogIFN0cmluZyBnZXQgbWVzc2FnZSA9PiBtZXNzYWdlT2JqZWN0Lm1lc3NhZ2U7CgogIFN0cmluZyBnZXQgdGlwID0+IG1lc3NhZ2VPYmplY3QudGlwOwoKICBNYXA8U3RyaW5nLCBkeW5hbWljPiBnZXQgYXJndW1lbnRzID0+IG1lc3NhZ2VPYmplY3QuYXJndW1lbnRzOwoKICBpbnQgY29tcGFyZVRvKExvY2F0ZWRNZXNzYWdlIG90aGVyKSB7CiAgICBpbnQgcmVzdWx0ID0gIiR7dXJpfSIuY29tcGFyZVRvKCIke290aGVyLnVyaX0iKTsKICAgIGlmIChyZXN1bHQgIT0gMCkgcmV0dXJuIHJlc3VsdDsKICAgIHJlc3VsdCA9IGNoYXJPZmZzZXQuY29tcGFyZVRvKG90aGVyLmNoYXJPZmZzZXQpOwogICAgaWYgKHJlc3VsdCAhPSAwKSByZXR1cm4gcmVzdWx0OwogICAgcmV0dXJuIG1lc3NhZ2UuY29tcGFyZVRvKG1lc3NhZ2UpOwogIH0KCiAgRm9ybWF0dGVkTWVzc2FnZSB3aXRoRm9ybWF0dGluZyhTdHJpbmcgZm9ybWF0dGVkLCBpbnQgbGluZSwgaW50IGNvbHVtbiwKICAgICAgU2V2ZXJpdHkgc2V2ZXJpdHksIExpc3Q8Rm9ybWF0dGVkTWVzc2FnZT4gcmVsYXRlZEluZm9ybWF0aW9uKSB7CiAgICByZXR1cm4gbmV3IEZvcm1hdHRlZE1lc3NhZ2UoCiAgICAgICAgdGhpcywgZm9ybWF0dGVkLCBsaW5lLCBjb2x1bW4sIHNldmVyaXR5LCByZWxhdGVkSW5mb3JtYXRpb24pOwogIH0KfQoKY2xhc3MgRm9ybWF0dGVkTWVzc2FnZSBpbXBsZW1lbnRzIERpYWdub3N0aWNNZXNzYWdlIHsKICBmaW5hbCBMb2NhdGVkTWVzc2FnZSBsb2NhdGVkTWVzc2FnZTsKCiAgZmluYWwgU3RyaW5nIGZvcm1hdHRlZDsKCiAgZmluYWwgaW50IGxpbmU7CgogIGZpbmFsIGludCBjb2x1bW47CgogIEBvdmVycmlkZQogIGZpbmFsIFNldmVyaXR5IHNldmVyaXR5OwoKICBmaW5hbCBMaXN0PEZvcm1hdHRlZE1lc3NhZ2U+IHJlbGF0ZWRJbmZvcm1hdGlvbjsKCiAgY29uc3QgRm9ybWF0dGVkTWVzc2FnZSh0aGlzLmxvY2F0ZWRNZXNzYWdlLCB0aGlzLmZvcm1hdHRlZCwgdGhpcy5saW5lLAogICAgICB0aGlzLmNvbHVtbiwgdGhpcy5zZXZlcml0eSwgdGhpcy5yZWxhdGVkSW5mb3JtYXRpb24pOwoKICBDb2RlPGR5bmFtaWM+IGdldCBjb2RlID0+IGxvY2F0ZWRNZXNzYWdlLmNvZGU7CgogIFN0cmluZyBnZXQgbWVzc2FnZSA9PiBsb2NhdGVkTWVzc2FnZS5tZXNzYWdlOwoKICBTdHJpbmcgZ2V0IHRpcCA9PiBsb2NhdGVkTWVzc2FnZS50aXA7CgogIE1hcDxTdHJpbmcsIGR5bmFtaWM+IGdldCBhcmd1bWVudHMgPT4gbG9jYXRlZE1lc3NhZ2UuYXJndW1lbnRzOwoKICBVcmkgZ2V0IHVyaSA9PiBsb2NhdGVkTWVzc2FnZS51cmk7CgogIGludCBnZXQgY2hhck9mZnNldCA9PiBsb2NhdGVkTWVzc2FnZS5jaGFyT2Zmc2V0OwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBsb2NhdGVkTWVzc2FnZS5sZW5ndGg7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPFN0cmluZz4gZ2V0IGFuc2lGb3JtYXR0ZWQgc3luYyogewogICAgeWllbGQgZm9ybWF0dGVkOwogICAgaWYgKHJlbGF0ZWRJbmZvcm1hdGlvbiAhPSBudWxsKSB7CiAgICAgIGZvciAoRm9ybWF0dGVkTWVzc2FnZSBtIGluIHJlbGF0ZWRJbmZvcm1hdGlvbikgewogICAgICAgIHlpZWxkIG0uZm9ybWF0dGVkOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxTdHJpbmc+IGdldCBwbGFpblRleHRGb3JtYXR0ZWQgewogICAgLy8gVE9ETyhhaGUpOiBJbXBsZW1lbnQgdGhpcyBjb3JyZWN0bHkuCiAgICByZXR1cm4gYW5zaUZvcm1hdHRlZDsKICB9CgogIE1hcDxTdHJpbmcsIE9iamVjdD4gdG9Kc29uKCkgewogICAgLy8gVGhpcyBzaG91bGQgYmUga2VwdCBpbiBzeW5jIHdpdGggcGFja2FnZTprZXJuZWwvcHJvYmxlbXMubWQKICAgIHJldHVybiA8U3RyaW5nLCBPYmplY3Q+ewogICAgICAiYW5zaUZvcm1hdHRlZCI6IGFuc2lGb3JtYXR0ZWQudG9MaXN0KCksCiAgICAgICJwbGFpblRleHRGb3JtYXR0ZWQiOiBwbGFpblRleHRGb3JtYXR0ZWQudG9MaXN0KCksCiAgICAgICJzZXZlcml0eSI6IHNldmVyaXR5LmluZGV4LAogICAgICAidXJpIjogdXJpLnRvU3RyaW5nKCksCiAgICB9OwogIH0KCiAgU3RyaW5nIHRvSnNvblN0cmluZygpIHsKICAgIEpzb25FbmNvZGVyIGVuY29kZXIgPSBuZXcgSnNvbkVuY29kZXIud2l0aEluZGVudCgiICAiKTsKICAgIHJldHVybiBlbmNvZGVyLmNvbnZlcnQodGhpcyk7CiAgfQp9CgpjbGFzcyBEaWFnbm9zdGljTWVzc2FnZUZyb21Kc29uIGltcGxlbWVudHMgRGlhZ25vc3RpY01lc3NhZ2UgewogIEBvdmVycmlkZQogIGZpbmFsIEl0ZXJhYmxlPFN0cmluZz4gYW5zaUZvcm1hdHRlZDsKCiAgQG92ZXJyaWRlCiAgZmluYWwgSXRlcmFibGU8U3RyaW5nPiBwbGFpblRleHRGb3JtYXR0ZWQ7CgogIEBvdmVycmlkZQogIGZpbmFsIFNldmVyaXR5IHNldmVyaXR5OwoKICBmaW5hbCBVcmkgdXJpOwoKICBEaWFnbm9zdGljTWVzc2FnZUZyb21Kc29uKAogICAgICB0aGlzLmFuc2lGb3JtYXR0ZWQsIHRoaXMucGxhaW5UZXh0Rm9ybWF0dGVkLCB0aGlzLnNldmVyaXR5LCB0aGlzLnVyaSk7CgogIGZhY3RvcnkgRGlhZ25vc3RpY01lc3NhZ2VGcm9tSnNvbi5mcm9tSnNvbihTdHJpbmcganNvblN0cmluZykgewogICAgTWFwPFN0cmluZywgT2JqZWN0PiBkZWNvZGVkID0ganNvbi5kZWNvZGUoanNvblN0cmluZyk7CiAgICBMaXN0PFN0cmluZz4gYW5zaUZvcm1hdHRlZCA9CiAgICAgICAgbmV3IExpc3Q8U3RyaW5nPi5mcm9tKGRlY29kZWRbImFuc2lGb3JtYXR0ZWQiXSk7CiAgICBMaXN0PFN0cmluZz4gcGxhaW5UZXh0Rm9ybWF0dGVkID0KICAgICAgICBuZXcgTGlzdDxTdHJpbmc+LmZyb20oZGVjb2RlZFsicGxhaW5UZXh0Rm9ybWF0dGVkIl0pOwogICAgU2V2ZXJpdHkgc2V2ZXJpdHkgPSBTZXZlcml0eS52YWx1ZXNbZGVjb2RlZFsic2V2ZXJpdHkiXV07CiAgICBVcmkgdXJpID0gVXJpLnBhcnNlKGRlY29kZWRbInVyaSJdKTsKCiAgICByZXR1cm4gbmV3IERpYWdub3N0aWNNZXNzYWdlRnJvbUpzb24oCiAgICAgICAgYW5zaUZvcm1hdHRlZCwgcGxhaW5UZXh0Rm9ybWF0dGVkLCBzZXZlcml0eSwgdXJpKTsKICB9CgogIE1hcDxTdHJpbmcsIE9iamVjdD4gdG9Kc29uKCkgewogICAgLy8gVGhpcyBzaG91bGQgYmUga2VwdCBpbiBzeW5jIHdpdGggcGFja2FnZTprZXJuZWwvcHJvYmxlbXMubWQKICAgIHJldHVybiA8U3RyaW5nLCBPYmplY3Q+ewogICAgICAiYW5zaUZvcm1hdHRlZCI6IGFuc2lGb3JtYXR0ZWQudG9MaXN0KCksCiAgICAgICJwbGFpblRleHRGb3JtYXR0ZWQiOiBwbGFpblRleHRGb3JtYXR0ZWQudG9MaXN0KCksCiAgICAgICJzZXZlcml0eSI6IHNldmVyaXR5LmluZGV4LAogICAgICAidXJpIjogdXJpLnRvU3RyaW5nKCksCiAgICB9OwogIH0KCiAgU3RyaW5nIHRvSnNvblN0cmluZygpIHsKICAgIEpzb25FbmNvZGVyIGVuY29kZXIgPSBuZXcgSnNvbkVuY29kZXIud2l0aEluZGVudCgiICAiKTsKICAgIHJldHVybiBlbmNvZGVyLmNvbnZlcnQodGhpcyk7CiAgfQp9CgpTdHJpbmcgcmVsYXRpdml6ZVVyaShVcmkgdXJpKSB7CiAgLy8gV2UgaGF2ZSB0aGlzIG1ldGhvZCBoZXJlIGZvciB0d28gcmVhc29uczoKICAvLwogIC8vIDEuIEl0IGFsbG93cyB1cyB0byBpbXBsZW1lbnQgI3VyaSBtZXNzYWdlIGFyZ3VtZW50IHdpdGhvdXQgdXNpbmcgaXQKICAvLyAob3RoZXJ3aXNlLCB3ZSBtaWdodCBnZXQgYW4gYFVOVVNFRF9JTVBPUlRgIHdhcm5pbmcpLgogIC8vCiAgLy8gMi4gV2UgY2FuIGNoYW5nZSBgYmFzZWAgYXJndW1lbnQgaGVyZSBpZiBuZWVkZWQuCiAgcmV0dXJuIHVyaSA9PSBudWxsID8gbnVsbCA6IHV0aWwucmVsYXRpdml6ZVVyaShVcmkuYmFzZSwgdXJpLCBpc1dpbmRvd3MpOwp9Cgp0eXBlZGVmIFN1bW1hcnlUZW1wbGF0ZSA9IE1lc3NhZ2UgRnVuY3Rpb24oaW50LCBpbnQsIG51bSwgbnVtLCBudW0pOwoKU3RyaW5nIGl0ZW1pemVOYW1lcyhMaXN0PFN0cmluZz4gbmFtZXMpIHsKICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoIC0gMTsgaSsrKSB7CiAgICBidWZmZXIud3JpdGUoIiAtICIpOwogICAgYnVmZmVyLndyaXRlbG4obmFtZXNbaV0pOwogIH0KICBidWZmZXIud3JpdGUoIiAtICIpOwogIGJ1ZmZlci53cml0ZShuYW1lcy5sYXN0KTsKICByZXR1cm4gIiRidWZmZXIiOwp9CoEQAE5OPAEVAS4BITsBSgErASMBJgEwAToBIwEYARAVAT07NhMBHgEkARsBJ0YiAR0CARAcARgBFAEoAUYBRT4EASU5BAIBOhgBFAEhEiIpFBEaTQFDASIBDEU+BAElOQQCARQgARwBGQFQAgE9EQEYARQBHwEYQwEwAS8BJwFBASg1JDUkJwQBSkYhRgQCATYnARoBEgEUAQwbATMBSTwBMQEwASgBQgElATMBKwEMLRUmNxsIBgQBDCwsGgQBIUMdLzkiHQcEARo8IgQCAT8MKAEMLQEMGwERAR1NAUI7ITkmPj4pASo7BAEhQx0vOSIdBwQBGjwiBAIBIC8FSTsFNkwCAUUBKiwvGR4EFxwUAgEscGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2Zhc3RhX2NvZGVzLmRhcnQ/c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2Zhc3RhX2NvZGVzX2dlbmVyYXRlZC5kYXJ0wAbX9S8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBOT1RFOiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBETyBOT1QgRURJVC4KLy8KLy8gSW5zdGVhZCBtb2RpZnkgJ3BrZy9mcm9udF9lbmQvbWVzc2FnZXMueWFtbCcgYW5kIHJ1bgovLyAncGtnL2Zyb250X2VuZC90b29sL2Zhc3RhIGdlbmVyYXRlLW1lc3NhZ2VzJyB0byB1cGRhdGUuCgovLyBpZ25vcmVfZm9yX2ZpbGU6IGxpbmVzX2xvbmdlcl90aGFuXzgwX2NoYXJzCgpwYXJ0IG9mIGZhc3RhLmNvZGVzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJUaGUgY2xhc3MgJyNuYW1lJyBpcyBhYnN0cmFjdCBhbmQgY2FuJ3QgYmUgaW5zdGFudGlhdGVkLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0Fic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbiA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb24iLCB0ZW1wbGF0ZUFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJORVdfV0lUSF9BQlNUUkFDVF9DTEFTUyJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0Fic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb24sCiAgICAgIG1lc3NhZ2U6ICIiIlRoZSBjbGFzcyAnJHtuYW1lfScgaXMgYWJzdHJhY3QgYW5kIGNhbid0IGJlIGluc3RhbnRpYXRlZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVBYnN0cmFjdENsYXNzTWVtYmVyID0gbWVzc2FnZUFic3RyYWN0Q2xhc3NNZW1iZXI7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQWJzdHJhY3RDbGFzc01lbWJlciA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkFic3RyYWN0Q2xhc3NNZW1iZXIiLAogICAgaW5kZXg6IDUxLAogICAgbWVzc2FnZTogciIiIk1lbWJlcnMgb2YgY2xhc3NlcyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSAnYWJzdHJhY3QnLiIiIiwKICAgIHRpcDoKICAgICAgICByIiIiVHJ5IHJlbW92aW5nIHRoZSAnYWJzdHJhY3QnIGtleXdvcmQuIFlvdSBjYW4gYWRkIHRoZSAnYWJzdHJhY3QnIGtleXdvcmQgYmVmb3JlIHRoZSBjbGFzcyBkZWNsYXJhdGlvbi4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQWJzdHJhY3ROb3RTeW5jID0gbWVzc2FnZUFic3RyYWN0Tm90U3luYzsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VBYnN0cmFjdE5vdFN5bmMgPSBjb25zdCBNZXNzYWdlQ29kZSgiQWJzdHJhY3ROb3RTeW5jIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJOT05fU1lOQ19BQlNUUkFDVF9NRVRIT0QiXSwKICAgIG1lc3NhZ2U6IHIiIiJBYnN0cmFjdCBtZXRob2RzIGNhbid0IHVzZSAnYXN5bmMnLCAnYXN5bmMqJywgb3IgJ3N5bmMqJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVBYnN0cmFjdFJlZGlyZWN0ZWRDbGFzc0luc3RhbnRpYXRpb24gPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkZhY3RvcnkgcmVkaXJlY3RzIHRvIGNsYXNzICcjbmFtZScsIHdoaWNoIGlzIGFic3RyYWN0IGFuZCBjYW4ndCBiZSBpbnN0YW50aWF0ZWQuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNBYnN0cmFjdFJlZGlyZWN0ZWRDbGFzc0luc3RhbnRpYXRpb24pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIGNvZGVBYnN0cmFjdFJlZGlyZWN0ZWRDbGFzc0luc3RhbnRpYXRpb24gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkFic3RyYWN0UmVkaXJlY3RlZENsYXNzSW5zdGFudGlhdGlvbiIsCiAgICAgICAgdGVtcGxhdGVBYnN0cmFjdFJlZGlyZWN0ZWRDbGFzc0luc3RhbnRpYXRpb24sCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkZBQ1RPUllfUkVESVJFQ1RTX1RPX0FCU1RSQUNUX0NMQVNTIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQWJzdHJhY3RSZWRpcmVjdGVkQ2xhc3NJbnN0YW50aWF0aW9uKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQWJzdHJhY3RSZWRpcmVjdGVkQ2xhc3NJbnN0YW50aWF0aW9uLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiRmFjdG9yeSByZWRpcmVjdHMgdG8gY2xhc3MgJyR7bmFtZX0nLCB3aGljaCBpcyBhYnN0cmFjdCBhbmQgY2FuJ3QgYmUgaW5zdGFudGlhdGVkLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUFjY2Vzc0Vycm9yID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJBY2Nlc3MgZXJyb3I6ICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQWNjZXNzRXJyb3IpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUFjY2Vzc0Vycm9yID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICJBY2Nlc3NFcnJvciIsCiAgdGVtcGxhdGVBY2Nlc3NFcnJvciwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNBY2Nlc3NFcnJvcihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUFjY2Vzc0Vycm9yLAogICAgICBtZXNzYWdlOiAiIiJBY2Nlc3MgZXJyb3I6ICcke25hbWV9Jy4iIiIsIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIHRlbXBsYXRlQW1iaWd1b3VzU3VwZXJ0eXBlcyA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiJyNuYW1lJyBjYW4ndCBpbXBsZW1lbnQgYm90aCAnI3R5cGUnIGFuZCAnI3R5cGUyJyIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0FtYmlndW91c1N1cGVydHlwZXMpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVBbWJpZ3VvdXNTdXBlcnR5cGVzID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgICAgICJBbWJpZ3VvdXNTdXBlcnR5cGVzIiwgdGVtcGxhdGVBbWJpZ3VvdXNTdXBlcnR5cGVzLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJBTUJJR1VPVVNfU1VQRVJUWVBFUyJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNBbWJpZ3VvdXNTdXBlcnR5cGVzKAogICAgU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUFtYmlndW91c1N1cGVydHlwZXMsCiAgICAgIG1lc3NhZ2U6ICIiIicke25hbWV9JyBjYW4ndCBpbXBsZW1lbnQgYm90aCAnJHt0eXBlfScgYW5kICcke3R5cGUyfSciIiIgKwogICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQW5vbnltb3VzQnJlYWtUYXJnZXRPdXRzaWRlRnVuY3Rpb24gPQogICAgbWVzc2FnZUFub255bW91c0JyZWFrVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUFub255bW91c0JyZWFrVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uID0KICAgIGNvbnN0IE1lc3NhZ2VDb2RlKCJBbm9ueW1vdXNCcmVha1RhcmdldE91dHNpZGVGdW5jdGlvbiIsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkxBQkVMX0lOX09VVEVSX1NDT1BFIl0sCiAgICAgICAgbWVzc2FnZTogciIiIkNhbid0IGJyZWFrIHRvIGEgdGFyZ2V0IGluIGEgZGlmZmVyZW50IGZ1bmN0aW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVBbm9ueW1vdXNDb250aW51ZVRhcmdldE91dHNpZGVGdW5jdGlvbiA9CiAgICBtZXNzYWdlQW5vbnltb3VzQ29udGludWVUYXJnZXRPdXRzaWRlRnVuY3Rpb247CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQW5vbnltb3VzQ29udGludWVUYXJnZXRPdXRzaWRlRnVuY3Rpb24gPQogICAgY29uc3QgTWVzc2FnZUNvZGUoIkFub255bW91c0NvbnRpbnVlVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uIiwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTEFCRUxfSU5fT1VURVJfU0NPUEUiXSwKICAgICAgICBtZXNzYWdlOiByIiIiQ2FuJ3QgY29udGludWUgYXQgYSB0YXJnZXQgaW4gYSBkaWZmZXJlbnQgZnVuY3Rpb24uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBEYXJ0VHlwZSBfdHlwZSwKICAgICAgICBEYXJ0VHlwZQogICAgICAgICAgICBfdHlwZTIpPiB0ZW1wbGF0ZUFyZ3VtZW50VHlwZU5vdEFzc2lnbmFibGUgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLAogICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIGFyZ3VtZW50IHR5cGUgJyN0eXBlJyBjYW4ndCBiZSBhc3NpZ25lZCB0byB0aGUgcGFyYW1ldGVyIHR5cGUgJyN0eXBlMicuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBjaGFuZ2luZyB0aGUgdHlwZSBvZiB0aGUgcGFyYW1ldGVyLCBvciBjYXN0aW5nIHRoZSBhcmd1bWVudCB0byAnI3R5cGUyJy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0FyZ3VtZW50VHlwZU5vdEFzc2lnbmFibGUpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPgogICAgY29kZUFyZ3VtZW50VHlwZU5vdEFzc2lnbmFibGUgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgICAgICAiQXJndW1lbnRUeXBlTm90QXNzaWduYWJsZSIsIHRlbXBsYXRlQXJndW1lbnRUeXBlTm90QXNzaWduYWJsZSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQVJHVU1FTlRfVFlQRV9OT1RfQVNTSUdOQUJMRSJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNBcmd1bWVudFR5cGVOb3RBc3NpZ25hYmxlKAogICAgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVBcmd1bWVudFR5cGVOb3RBc3NpZ25hYmxlLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIGFyZ3VtZW50IHR5cGUgJyR7dHlwZX0nIGNhbid0IGJlIGFzc2lnbmVkIHRvIHRoZSBwYXJhbWV0ZXIgdHlwZSAnJHt0eXBlMn0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgdGlwOiAiIiJUcnkgY2hhbmdpbmcgdGhlIHR5cGUgb2YgdGhlIHBhcmFtZXRlciwgb3IgY2FzdGluZyB0aGUgYXJndW1lbnQgdG8gJyR7dHlwZTJ9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGUsICd0eXBlMic6IF90eXBlMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgaW50CiAgICAgICAgICAgIGNvZGVQb2ludCk+IHRlbXBsYXRlQXNjaWlDb250cm9sQ2hhcmFjdGVyID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihpbnQgY29kZVBvaW50KT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBjb250cm9sIGNoYXJhY3RlciAjdW5pY29kZSBjYW4gb25seSBiZSB1c2VkIGluIHN0cmluZ3MgYW5kIGNvbW1lbnRzLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQXNjaWlDb250cm9sQ2hhcmFjdGVyKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihpbnQgY29kZVBvaW50KT4gY29kZUFzY2lpQ29udHJvbENoYXJhY3RlciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvZGVQb2ludCk+KAogICAgICAgICJBc2NpaUNvbnRyb2xDaGFyYWN0ZXIiLCB0ZW1wbGF0ZUFzY2lpQ29udHJvbENoYXJhY3RlciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSUxMRUdBTF9DSEFSQUNURVIiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQXNjaWlDb250cm9sQ2hhcmFjdGVyKGludCBjb2RlUG9pbnQpIHsKICBTdHJpbmcgdW5pY29kZSA9CiAgICAgICJVKyR7Y29kZVBvaW50LnRvUmFkaXhTdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkucGFkTGVmdCg0LCAnMCcpfSI7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVBc2NpaUNvbnRyb2xDaGFyYWN0ZXIsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgY29udHJvbCBjaGFyYWN0ZXIgJHt1bmljb2RlfSBjYW4gb25seSBiZSB1c2VkIGluIHN0cmluZ3MgYW5kIGNvbW1lbnRzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J2NvZGVQb2ludCc6IGNvZGVQb2ludH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVBc3NlcnRBc0V4cHJlc3Npb24gPSBtZXNzYWdlQXNzZXJ0QXNFeHByZXNzaW9uOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUFzc2VydEFzRXhwcmVzc2lvbiA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkFzc2VydEFzRXhwcmVzc2lvbiIsCiAgICBtZXNzYWdlOiByIiIiYGFzc2VydGAgY2FuJ3QgYmUgdXNlZCBhcyBhbiBleHByZXNzaW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVBc3NlcnRFeHRyYW5lb3VzQXJndW1lbnQgPSBtZXNzYWdlQXNzZXJ0RXh0cmFuZW91c0FyZ3VtZW50OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUFzc2VydEV4dHJhbmVvdXNBcmd1bWVudCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkFzc2VydEV4dHJhbmVvdXNBcmd1bWVudCIsCiAgICBtZXNzYWdlOiByIiIiYGFzc2VydGAgY2FuJ3QgaGF2ZSBtb3JlIHRoYW4gdHdvIGFyZ3VtZW50cy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQXdhaXRBc0lkZW50aWZpZXIgPSBtZXNzYWdlQXdhaXRBc0lkZW50aWZpZXI7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQXdhaXRBc0lkZW50aWZpZXIgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJBd2FpdEFzSWRlbnRpZmllciIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQVNZTkNfS0VZV09SRF9VU0VEX0FTX0lERU5USUZJRVIiXSwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIidhd2FpdCcgY2FuJ3QgYmUgdXNlZCBhcyBhbiBpZGVudGlmaWVyIGluICdhc3luYycsICdhc3luYyonLCBvciAnc3luYyonIG1ldGhvZHMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUF3YWl0Rm9yTm90QXN5bmMgPSBtZXNzYWdlQXdhaXRGb3JOb3RBc3luYzsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VBd2FpdEZvck5vdEFzeW5jID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQXdhaXRGb3JOb3RBc3luYyIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQVNZTkNfRk9SX0lOX1dST05HX0NPTlRFWFQiXSwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIlRoZSBhc3luY2hyb25vdXMgZm9yLWluIGNhbiBvbmx5IGJlIHVzZWQgaW4gZnVuY3Rpb25zIG1hcmtlZCB3aXRoICdhc3luYycgb3IgJ2FzeW5jKicuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgbWFya2luZyB0aGUgZnVuY3Rpb24gYm9keSB3aXRoIGVpdGhlciAnYXN5bmMnIG9yICdhc3luYyonLCBvciByZW1vdmluZyB0aGUgJ2F3YWl0JyBiZWZvcmUgdGhlIGZvciBsb29wLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVBd2FpdE5vdEFzeW5jID0gbWVzc2FnZUF3YWl0Tm90QXN5bmM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQXdhaXROb3RBc3luYyA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJBd2FpdE5vdEFzeW5jIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJBV0FJVF9JTl9XUk9OR19DT05URVhUIl0sCiAgICBtZXNzYWdlOiByIiIiJ2F3YWl0JyBjYW4gb25seSBiZSB1c2VkIGluICdhc3luYycgb3IgJ2FzeW5jKicgbWV0aG9kcy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4KICAgIHRlbXBsYXRlQmFkVHlwZVZhcmlhYmxlSW5TdXBlcnR5cGUgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiRm91bmQgdW5zdXBwb3J0ZWQgdXNlcyBvZiAnI25hbWUnIGluIHN1cGVydHlwZSAnI25hbWUyJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNCYWRUeXBlVmFyaWFibGVJblN1cGVydHlwZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+CiAgICBjb2RlQmFkVHlwZVZhcmlhYmxlSW5TdXBlcnR5cGUgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPigKICAiQmFkVHlwZVZhcmlhYmxlSW5TdXBlcnR5cGUiLAogIHRlbXBsYXRlQmFkVHlwZVZhcmlhYmxlSW5TdXBlcnR5cGUsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQmFkVHlwZVZhcmlhYmxlSW5TdXBlcnR5cGUoU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMikgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBpZiAobmFtZTIuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUyID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMik7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVCYWRUeXBlVmFyaWFibGVJblN1cGVydHlwZSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkZvdW5kIHVuc3VwcG9ydGVkIHVzZXMgb2YgJyR7bmFtZX0nIGluIHN1cGVydHlwZSAnJHtuYW1lMn0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAnbmFtZTInOiBuYW1lMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUyKT4gdGVtcGxhdGVCb3VuZElzc3VlVmlhQ3ljbGVOb25TaW1wbGljaXR5ID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwKICAgICAgICAgICAgU3RyaW5nIG5hbWUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkdlbmVyaWMgdHlwZSAnI25hbWUnIGNhbid0IGJlIHVzZWQgd2l0aG91dCB0eXBlIGFyZ3VtZW50cyBpbiB0aGUgYm91bmRzIG9mIGl0cyBvd24gdHlwZSB2YXJpYWJsZXMuIEl0IGlzIHJlZmVyZW5jZWQgaW5kaXJlY3RseSB0aHJvdWdoICcjbmFtZTInLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgcHJvdmlkaW5nIHR5cGUgYXJndW1lbnRzIHRvICcjbmFtZTInIGhlcmUgb3IgdG8gc29tZSBvdGhlciByYXcgdHlwZXMgaW4gdGhlIGJvdW5kcyBhbG9uZyB0aGUgcmVmZXJlbmNlIGNoYWluLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQm91bmRJc3N1ZVZpYUN5Y2xlTm9uU2ltcGxpY2l0eSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+CiAgICBjb2RlQm91bmRJc3N1ZVZpYUN5Y2xlTm9uU2ltcGxpY2l0eSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgICAgICJCb3VuZElzc3VlVmlhQ3ljbGVOb25TaW1wbGljaXR5IiwKICAgICAgICB0ZW1wbGF0ZUJvdW5kSXNzdWVWaWFDeWNsZU5vblNpbXBsaWNpdHksCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk5PVF9JTlNUQU5USUFURURfQk9VTkQiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQm91bmRJc3N1ZVZpYUN5Y2xlTm9uU2ltcGxpY2l0eSgKICAgIFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKG5hbWUyLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lMiA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZTIpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQm91bmRJc3N1ZVZpYUN5Y2xlTm9uU2ltcGxpY2l0eSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkdlbmVyaWMgdHlwZSAnJHtuYW1lfScgY2FuJ3QgYmUgdXNlZCB3aXRob3V0IHR5cGUgYXJndW1lbnRzIGluIHRoZSBib3VuZHMgb2YgaXRzIG93biB0eXBlIHZhcmlhYmxlcy4gSXQgaXMgcmVmZXJlbmNlZCBpbmRpcmVjdGx5IHRocm91Z2ggJyR7bmFtZTJ9Jy4iIiIsCiAgICAgIHRpcDogIiIiVHJ5IHByb3ZpZGluZyB0eXBlIGFyZ3VtZW50cyB0byAnJHtuYW1lMn0nIGhlcmUgb3IgdG8gc29tZSBvdGhlciByYXcgdHlwZXMgaW4gdGhlIGJvdW5kcyBhbG9uZyB0aGUgcmVmZXJlbmNlIGNoYWluLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAnbmFtZTInOiBuYW1lMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUpPiB0ZW1wbGF0ZUJvdW5kSXNzdWVWaWFMb29wTm9uU2ltcGxpY2l0eSA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiR2VuZXJpYyB0eXBlICcjbmFtZScgY2FuJ3QgYmUgdXNlZCB3aXRob3V0IHR5cGUgYXJndW1lbnRzIGluIHRoZSBib3VuZHMgb2YgaXRzIG93biB0eXBlIHZhcmlhYmxlcy4iIiIsCiAgICB0aXBUZW1wbGF0ZTogciIiIlRyeSBwcm92aWRpbmcgdHlwZSBhcmd1bWVudHMgdG8gJyNuYW1lJyBoZXJlLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQm91bmRJc3N1ZVZpYUxvb3BOb25TaW1wbGljaXR5KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVCb3VuZElzc3VlVmlhTG9vcE5vblNpbXBsaWNpdHkgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oIkJvdW5kSXNzdWVWaWFMb29wTm9uU2ltcGxpY2l0eSIsCiAgICAgICAgdGVtcGxhdGVCb3VuZElzc3VlVmlhTG9vcE5vblNpbXBsaWNpdHksCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk5PVF9JTlNUQU5USUFURURfQk9VTkQiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQm91bmRJc3N1ZVZpYUxvb3BOb25TaW1wbGljaXR5KFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQm91bmRJc3N1ZVZpYUxvb3BOb25TaW1wbGljaXR5LAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiR2VuZXJpYyB0eXBlICcke25hbWV9JyBjYW4ndCBiZSB1c2VkIHdpdGhvdXQgdHlwZSBhcmd1bWVudHMgaW4gdGhlIGJvdW5kcyBvZiBpdHMgb3duIHR5cGUgdmFyaWFibGVzLiIiIiwKICAgICAgdGlwOiAiIiJUcnkgcHJvdmlkaW5nIHR5cGUgYXJndW1lbnRzIHRvICcke25hbWV9JyBoZXJlLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVCb3VuZElzc3VlVmlhUmF3VHlwZVdpdGhOb25TaW1wbGVCb3VuZHMgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkdlbmVyaWMgdHlwZSAnI25hbWUnIGNhbid0IGJlIHVzZWQgd2l0aG91dCB0eXBlIGFyZ3VtZW50cyBpbiBhIHR5cGUgdmFyaWFibGUgYm91bmQuIiIiLAogICAgICAgIHRpcFRlbXBsYXRlOiByIiIiVHJ5IHByb3ZpZGluZyB0eXBlIGFyZ3VtZW50cyB0byAnI25hbWUnIGhlcmUuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQm91bmRJc3N1ZVZpYVJhd1R5cGVXaXRoTm9uU2ltcGxlQm91bmRzKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICBjb2RlQm91bmRJc3N1ZVZpYVJhd1R5cGVXaXRoTm9uU2ltcGxlQm91bmRzID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJCb3VuZElzc3VlVmlhUmF3VHlwZVdpdGhOb25TaW1wbGVCb3VuZHMiLAogICAgICAgIHRlbXBsYXRlQm91bmRJc3N1ZVZpYVJhd1R5cGVXaXRoTm9uU2ltcGxlQm91bmRzLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJOT1RfSU5TVEFOVElBVEVEX0JPVU5EIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0JvdW5kSXNzdWVWaWFSYXdUeXBlV2l0aE5vblNpbXBsZUJvdW5kcyhTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUJvdW5kSXNzdWVWaWFSYXdUeXBlV2l0aE5vblNpbXBsZUJvdW5kcywKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkdlbmVyaWMgdHlwZSAnJHtuYW1lfScgY2FuJ3QgYmUgdXNlZCB3aXRob3V0IHR5cGUgYXJndW1lbnRzIGluIGEgdHlwZSB2YXJpYWJsZSBib3VuZC4iIiIsCiAgICAgIHRpcDogIiIiVHJ5IHByb3ZpZGluZyB0eXBlIGFyZ3VtZW50cyB0byAnJHtuYW1lfScgaGVyZS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVCcmVha091dHNpZGVPZkxvb3AgPSBtZXNzYWdlQnJlYWtPdXRzaWRlT2ZMb29wOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUJyZWFrT3V0c2lkZU9mTG9vcCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkJyZWFrT3V0c2lkZU9mTG9vcCIsCiAgICBpbmRleDogNTIsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJBIGJyZWFrIHN0YXRlbWVudCBjYW4ndCBiZSB1c2VkIG91dHNpZGUgb2YgYSBsb29wIG9yIHN3aXRjaCBzdGF0ZW1lbnQuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nIHRoZSBicmVhayBzdGF0ZW1lbnQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVCcmVha1RhcmdldE91dHNpZGVGdW5jdGlvbiA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ2FuJ3QgYnJlYWsgdG8gJyNuYW1lJyBpbiBhIGRpZmZlcmVudCBmdW5jdGlvbi4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNCcmVha1RhcmdldE91dHNpZGVGdW5jdGlvbik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlQnJlYWtUYXJnZXRPdXRzaWRlRnVuY3Rpb24gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkJyZWFrVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uIiwgdGVtcGxhdGVCcmVha1RhcmdldE91dHNpZGVGdW5jdGlvbiwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTEFCRUxfSU5fT1VURVJfU0NPUEUiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQnJlYWtUYXJnZXRPdXRzaWRlRnVuY3Rpb24oU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVCcmVha1RhcmdldE91dHNpZGVGdW5jdGlvbiwKICAgICAgbWVzc2FnZTogIiIiQ2FuJ3QgYnJlYWsgdG8gJyR7bmFtZX0nIGluIGEgZGlmZmVyZW50IGZ1bmN0aW9uLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiB0ZW1wbGF0ZUJ1aWx0SW5JZGVudGlmaWVyQXNUeXBlID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJUaGUgYnVpbHQtaW4gaWRlbnRpZmllciAnI2xleGVtZScgY2FuJ3QgYmUgdXNlZCBhcyBhIHR5cGUuIiIiLAogICAgICAgIHRpcFRlbXBsYXRlOiByIiIiVHJ5IGNvcnJlY3RpbmcgdGhlIG5hbWUgdG8gbWF0Y2ggYW4gZXhpc3RpbmcgdHlwZS4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNCdWlsdEluSWRlbnRpZmllckFzVHlwZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiBjb2RlQnVpbHRJbklkZW50aWZpZXJBc1R5cGUgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgIkJ1aWx0SW5JZGVudGlmaWVyQXNUeXBlIiwgdGVtcGxhdGVCdWlsdEluSWRlbnRpZmllckFzVHlwZSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQlVJTFRfSU5fSURFTlRJRklFUl9BU19UWVBFIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0J1aWx0SW5JZGVudGlmaWVyQXNUeXBlKFRva2VuIHRva2VuKSB7CiAgU3RyaW5nIGxleGVtZSA9IHRva2VuLmxleGVtZTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUJ1aWx0SW5JZGVudGlmaWVyQXNUeXBlLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIGJ1aWx0LWluIGlkZW50aWZpZXIgJyR7bGV4ZW1lfScgY2FuJ3QgYmUgdXNlZCBhcyBhIHR5cGUuIiIiLAogICAgICB0aXA6ICIiIlRyeSBjb3JyZWN0aW5nIHRoZSBuYW1lIHRvIG1hdGNoIGFuIGV4aXN0aW5nIHR5cGUuIiIiLAogICAgICBhcmd1bWVudHM6IHsndG9rZW4nOiB0b2tlbn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4KICAgIHRlbXBsYXRlQnVpbHRJbklkZW50aWZpZXJJbkRlY2xhcmF0aW9uID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJDYW4ndCB1c2UgJyNsZXhlbWUnIGFzIGEgbmFtZSBoZXJlLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0J1aWx0SW5JZGVudGlmaWVySW5EZWNsYXJhdGlvbik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiBjb2RlQnVpbHRJbklkZW50aWZpZXJJbkRlY2xhcmF0aW9uID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KCJCdWlsdEluSWRlbnRpZmllckluRGVjbGFyYXRpb24iLAogICAgICAgIHRlbXBsYXRlQnVpbHRJbklkZW50aWZpZXJJbkRlY2xhcmF0aW9uLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJCVUlMVF9JTl9JREVOVElGSUVSX0lOX0RFQ0xBUkFUSU9OIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0J1aWx0SW5JZGVudGlmaWVySW5EZWNsYXJhdGlvbihUb2tlbiB0b2tlbikgewogIFN0cmluZyBsZXhlbWUgPSB0b2tlbi5sZXhlbWU7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVCdWlsdEluSWRlbnRpZmllckluRGVjbGFyYXRpb24sCiAgICAgIG1lc3NhZ2U6ICIiIkNhbid0IHVzZSAnJHtsZXhlbWV9JyBhcyBhIG5hbWUgaGVyZS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0b2tlbic6IHRva2VufSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUJ5dGVjb2RlTGltaXRFeGNlZWRlZFRvb01hbnlBcmd1bWVudHMgPQogICAgbWVzc2FnZUJ5dGVjb2RlTGltaXRFeGNlZWRlZFRvb01hbnlBcmd1bWVudHM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQnl0ZWNvZGVMaW1pdEV4Y2VlZGVkVG9vTWFueUFyZ3VtZW50cyA9CiAgICBjb25zdCBNZXNzYWdlQ29kZSgiQnl0ZWNvZGVMaW1pdEV4Y2VlZGVkVG9vTWFueUFyZ3VtZW50cyIsCiAgICAgICAgbWVzc2FnZTogciIiIkRhcnQgYnl0ZWNvZGUgbGltaXQgZXhjZWVkZWQ6IHRvbyBtYW55IGFyZ3VtZW50cy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ2FuZGlkYXRlRm91bmQgPSBtZXNzYWdlQ2FuZGlkYXRlRm91bmQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ2FuZGlkYXRlRm91bmQgPSBjb25zdCBNZXNzYWdlQ29kZSgiQ2FuZGlkYXRlRm91bmQiLAogICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQsCiAgICBtZXNzYWdlOiByIiIiRm91bmQgdGhpcyBjYW5kaWRhdGUsIGJ1dCB0aGUgYXJndW1lbnRzIGRvbid0IG1hdGNoLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlQ2FuZGlkYXRlRm91bmRJc0RlZmF1bHRDb25zdHJ1Y3RvciA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiVGhlIGNsYXNzICcjbmFtZScgaGFzIGEgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBubyBhcmd1bWVudHMuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ2FuZGlkYXRlRm91bmRJc0RlZmF1bHRDb25zdHJ1Y3Rvcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgY29kZUNhbmRpZGF0ZUZvdW5kSXNEZWZhdWx0Q29uc3RydWN0b3IgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkNhbmRpZGF0ZUZvdW5kSXNEZWZhdWx0Q29uc3RydWN0b3IiLAogICAgICAgIHRlbXBsYXRlQ2FuZGlkYXRlRm91bmRJc0RlZmF1bHRDb25zdHJ1Y3RvciwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ2FuZGlkYXRlRm91bmRJc0RlZmF1bHRDb25zdHJ1Y3RvcihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNhbmRpZGF0ZUZvdW5kSXNEZWZhdWx0Q29uc3RydWN0b3IsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgY2xhc3MgJyR7bmFtZX0nIGhhcyBhIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgbm8gYXJndW1lbnRzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNhbm5vdEFzc2lnblRvUGFyZW50aGVzaXplZEV4cHJlc3Npb24gPQogICAgbWVzc2FnZUNhbm5vdEFzc2lnblRvUGFyZW50aGVzaXplZEV4cHJlc3Npb247CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ2Fubm90QXNzaWduVG9QYXJlbnRoZXNpemVkRXhwcmVzc2lvbiA9CiAgICBjb25zdCBNZXNzYWdlQ29kZSgiQ2Fubm90QXNzaWduVG9QYXJlbnRoZXNpemVkRXhwcmVzc2lvbiIsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkFTU0lHTk1FTlRfVE9fUEFSRU5USEVTSVpFRF9FWFBSRVNTSU9OIl0sCiAgICAgICAgbWVzc2FnZTogciIiIkNhbid0IGFzc2lnbiB0byBhIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbi4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ2Fubm90QXNzaWduVG9TdXBlciA9IG1lc3NhZ2VDYW5ub3RBc3NpZ25Ub1N1cGVyOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNhbm5vdEFzc2lnblRvU3VwZXIgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDYW5ub3RBc3NpZ25Ub1N1cGVyIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJOT1RfQU5fTFZBTFVFIl0sCiAgICBtZXNzYWdlOiByIiIiQ2FuJ3QgYXNzaWduIHRvIHN1cGVyLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPgogICAgdGVtcGxhdGVDYW5ub3RSZWFkU2RrU3BlY2lmaWNhdGlvbiA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJVbmFibGUgdG8gcmVhZCB0aGUgJ2xpYnJhcmllcy5qc29uJyBzcGVjaWZpY2F0aW9uIGZpbGU6CiAgI3N0cmluZy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDYW5ub3RSZWFkU2RrU3BlY2lmaWNhdGlvbik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+IGNvZGVDYW5ub3RSZWFkU2RrU3BlY2lmaWNhdGlvbiA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICJDYW5ub3RSZWFkU2RrU3BlY2lmaWNhdGlvbiIsCiAgdGVtcGxhdGVDYW5ub3RSZWFkU2RrU3BlY2lmaWNhdGlvbiwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDYW5ub3RSZWFkU2RrU3BlY2lmaWNhdGlvbihTdHJpbmcgc3RyaW5nKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNhbm5vdFJlYWRTZGtTcGVjaWZpY2F0aW9uLAogICAgICBtZXNzYWdlOiAiIiJVbmFibGUgdG8gcmVhZCB0aGUgJ2xpYnJhcmllcy5qc29uJyBzcGVjaWZpY2F0aW9uIGZpbGU6CiAgJHtzdHJpbmd9LiIiIiwgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZ30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDYW50RGlzYW1iaWd1YXRlQW1iaWd1b3VzSW5mb3JtYXRpb24gPQogICAgbWVzc2FnZUNhbnREaXNhbWJpZ3VhdGVBbWJpZ3VvdXNJbmZvcm1hdGlvbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDYW50RGlzYW1iaWd1YXRlQW1iaWd1b3VzSW5mb3JtYXRpb24gPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDYW50RGlzYW1iaWd1YXRlQW1iaWd1b3VzSW5mb3JtYXRpb24iLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQm90aCBJdGVyYWJsZSBhbmQgTWFwIHNwcmVhZCBlbGVtZW50cyBlbmNvdW50ZXJlZCBpbiBhbWJpZ3VvdXMgbGl0ZXJhbC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ2FudERpc2FtYmlndWF0ZU5vdEVub3VnaEluZm9ybWF0aW9uID0KICAgIG1lc3NhZ2VDYW50RGlzYW1iaWd1YXRlTm90RW5vdWdoSW5mb3JtYXRpb247CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ2FudERpc2FtYmlndWF0ZU5vdEVub3VnaEluZm9ybWF0aW9uID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ2FudERpc2FtYmlndWF0ZU5vdEVub3VnaEluZm9ybWF0aW9uIiwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIk5vdCBlbm91Z2ggdHlwZSBpbmZvcm1hdGlvbiB0byBkaXNhbWJpZ3VhdGUgYmV0d2VlbiBsaXRlcmFsIHNldCBhbmQgbGl0ZXJhbCBtYXAuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgcHJvdmlkaW5nIHR5cGUgYXJndW1lbnRzIGZvciB0aGUgbGl0ZXJhbCBleHBsaWNpdGx5IHRvIGRpc2FtYmlndWF0ZSBpdC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ2FudEluZmVyUGFja2FnZXNGcm9tTWFueUlucHV0cyA9CiAgICBtZXNzYWdlQ2FudEluZmVyUGFja2FnZXNGcm9tTWFueUlucHV0czsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDYW50SW5mZXJQYWNrYWdlc0Zyb21NYW55SW5wdXRzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ2FudEluZmVyUGFja2FnZXNGcm9tTWFueUlucHV0cyIsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJDYW4ndCBpbmZlciBhIC5wYWNrYWdlcyBmaWxlIHdoZW4gY29tcGlsaW5nIG11bHRpcGxlIGlucHV0cy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgc3BlY2lmeWluZyB0aGUgZmlsZSBleHBsaWNpdGx5IHdpdGggdGhlIC0tcGFja2FnZXMgb3B0aW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDYW50SW5mZXJQYWNrYWdlc0Zyb21QYWNrYWdlVXJpID0KICAgIG1lc3NhZ2VDYW50SW5mZXJQYWNrYWdlc0Zyb21QYWNrYWdlVXJpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNhbnRJbmZlclBhY2thZ2VzRnJvbVBhY2thZ2VVcmkgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDYW50SW5mZXJQYWNrYWdlc0Zyb21QYWNrYWdlVXJpIiwKICAgIG1lc3NhZ2U6IHIiIiJDYW4ndCBpbmZlciBhIC5wYWNrYWdlcyBmaWxlIGZyb20gYW4gaW5wdXQgJ3BhY2thZ2U6KicgVVJJLiIiIiwKICAgIHRpcDogciIiIlRyeSBzcGVjaWZ5aW5nIHRoZSBmaWxlIGV4cGxpY2l0bHkgd2l0aCB0aGUgLS1wYWNrYWdlcyBvcHRpb24uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVDYW50SW5mZXJSZXR1cm5UeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXMgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkNhbid0IGluZmVyIGEgcmV0dXJuIHR5cGUgZm9yICcjbmFtZScgYXMgc29tZSBvZiB0aGUgaW5oZXJpdGVkIG1lbWJlcnMgaGF2ZSBkaWZmZXJlbnQgdHlwZXMuIiIiLAogICAgICAgIHRpcFRlbXBsYXRlOiByIiIiVHJ5IGFkZGluZyBhbiBleHBsaWNpdCB0eXBlLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOgogICAgICAgICAgICBfd2l0aEFyZ3VtZW50c0NhbnRJbmZlclJldHVyblR5cGVEdWVUb0luY29uc2lzdGVudE92ZXJyaWRlcyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgY29kZUNhbnRJbmZlclJldHVyblR5cGVEdWVUb0luY29uc2lzdGVudE92ZXJyaWRlcyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiQ2FudEluZmVyUmV0dXJuVHlwZUR1ZVRvSW5jb25zaXN0ZW50T3ZlcnJpZGVzIiwKICAgICAgICB0ZW1wbGF0ZUNhbnRJbmZlclJldHVyblR5cGVEdWVUb0luY29uc2lzdGVudE92ZXJyaWRlcywKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9NRVRIT0RfT1ZFUlJJREUiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ2FudEluZmVyUmV0dXJuVHlwZUR1ZVRvSW5jb25zaXN0ZW50T3ZlcnJpZGVzKAogICAgU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDYW50SW5mZXJSZXR1cm5UeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXMsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJDYW4ndCBpbmZlciBhIHJldHVybiB0eXBlIGZvciAnJHtuYW1lfScgYXMgc29tZSBvZiB0aGUgaW5oZXJpdGVkIG1lbWJlcnMgaGF2ZSBkaWZmZXJlbnQgdHlwZXMuIiIiLAogICAgICB0aXA6ICIiIlRyeSBhZGRpbmcgYW4gZXhwbGljaXQgdHlwZS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIHN0cmluZyk+IHRlbXBsYXRlQ2FudEluZmVyVHlwZUR1ZVRvQ2lyY3VsYXJpdHkgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiQ2FuJ3QgaW5mZXIgdGhlIHR5cGUgb2YgJyNzdHJpbmcnOiBjaXJjdWxhcml0eSBmb3VuZCBkdXJpbmcgdHlwZSBpbmZlcmVuY2UuIiIiLAogICAgdGlwVGVtcGxhdGU6IHIiIiJTcGVjaWZ5IHRoZSB0eXBlIGV4cGxpY2l0bHkuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDYW50SW5mZXJUeXBlRHVlVG9DaXJjdWxhcml0eSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+IGNvZGVDYW50SW5mZXJUeXBlRHVlVG9DaXJjdWxhcml0eSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgICAgICJDYW50SW5mZXJUeXBlRHVlVG9DaXJjdWxhcml0eSIsIHRlbXBsYXRlQ2FudEluZmVyVHlwZUR1ZVRvQ2lyY3VsYXJpdHksCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlJFQ1VSU0lWRV9DT01QSUxFX1RJTUVfQ09OU1RBTlQiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ2FudEluZmVyVHlwZUR1ZVRvQ2lyY3VsYXJpdHkoU3RyaW5nIHN0cmluZykgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDYW50SW5mZXJUeXBlRHVlVG9DaXJjdWxhcml0eSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkNhbid0IGluZmVyIHRoZSB0eXBlIG9mICcke3N0cmluZ30nOiBjaXJjdWxhcml0eSBmb3VuZCBkdXJpbmcgdHlwZSBpbmZlcmVuY2UuIiIiLAogICAgICB0aXA6ICIiIlNwZWNpZnkgdGhlIHR5cGUgZXhwbGljaXRseS4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmd9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUNhbnRJbmZlclR5cGVEdWVUb0luY29uc2lzdGVudE92ZXJyaWRlcyA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiQ2FuJ3QgaW5mZXIgYSB0eXBlIGZvciAnI25hbWUnIGFzIHNvbWUgb2YgdGhlIGluaGVyaXRlZCBtZW1iZXJzIGhhdmUgZGlmZmVyZW50IHR5cGVzLiIiIiwKICAgICAgICB0aXBUZW1wbGF0ZTogciIiIlRyeSBhZGRpbmcgYW4gZXhwbGljaXQgdHlwZS4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDYW50SW5mZXJUeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXMpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIGNvZGVDYW50SW5mZXJUeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXMgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkNhbnRJbmZlclR5cGVEdWVUb0luY29uc2lzdGVudE92ZXJyaWRlcyIsCiAgICAgICAgdGVtcGxhdGVDYW50SW5mZXJUeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXMsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfTUVUSE9EX09WRVJSSURFIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NhbnRJbmZlclR5cGVEdWVUb0luY29uc2lzdGVudE92ZXJyaWRlcyhTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNhbnRJbmZlclR5cGVEdWVUb0luY29uc2lzdGVudE92ZXJyaWRlcywKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkNhbid0IGluZmVyIGEgdHlwZSBmb3IgJyR7bmFtZX0nIGFzIHNvbWUgb2YgdGhlIGluaGVyaXRlZCBtZW1iZXJzIGhhdmUgZGlmZmVyZW50IHR5cGVzLiIiIiwKICAgICAgdGlwOiAiIiJUcnkgYWRkaW5nIGFuIGV4cGxpY2l0IHR5cGUuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXywgU3RyaW5nIHN0cmluZyk+IHRlbXBsYXRlQ2FudFJlYWRGaWxlID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8sIFN0cmluZyBzdHJpbmcpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJFcnJvciB3aGVuIHJlYWRpbmcgJyN1cmknOiAjc3RyaW5nIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ2FudFJlYWRGaWxlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXywgU3RyaW5nIHN0cmluZyk+IGNvZGVDYW50UmVhZEZpbGUgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfLCBTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgIkNhbnRSZWFkRmlsZSIsIHRlbXBsYXRlQ2FudFJlYWRGaWxlLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJVUklfRE9FU19OT1RfRVhJU1QiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ2FudFJlYWRGaWxlKFVyaSB1cmlfLCBTdHJpbmcgc3RyaW5nKSB7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNhbnRSZWFkRmlsZSwKICAgICAgbWVzc2FnZTogIiIiRXJyb3Igd2hlbiByZWFkaW5nICcke3VyaX0nOiAke3N0cmluZ30iIiIsCiAgICAgIGFyZ3VtZW50czogeyd1cmknOiB1cmlfLCAnc3RyaW5nJzogc3RyaW5nfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPgogICAgdGVtcGxhdGVDYW50VXNlQ29udHJvbEZsb3dPclNwcmVhZEFzQ29uc3RhbnQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIicjbGV4ZW1lJyBpcyBub3Qgc3VwcG9ydGVkIGluIGNvbnN0YW50IGV4cHJlc3Npb25zLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NhbnRVc2VDb250cm9sRmxvd09yU3ByZWFkQXNDb25zdGFudCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPgogICAgY29kZUNhbnRVc2VDb250cm9sRmxvd09yU3ByZWFkQXNDb25zdGFudCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAgICAgICAiQ2FudFVzZUNvbnRyb2xGbG93T3JTcHJlYWRBc0NvbnN0YW50IiwKICAgICAgICB0ZW1wbGF0ZUNhbnRVc2VDb250cm9sRmxvd09yU3ByZWFkQXNDb25zdGFudCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTk9UX0NPTlNUQU5UX0VYUFJFU1NJT04iXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ2FudFVzZUNvbnRyb2xGbG93T3JTcHJlYWRBc0NvbnN0YW50KFRva2VuIHRva2VuKSB7CiAgU3RyaW5nIGxleGVtZSA9IHRva2VuLmxleGVtZTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNhbnRVc2VDb250cm9sRmxvd09yU3ByZWFkQXNDb25zdGFudCwKICAgICAgbWVzc2FnZTogIiIiJyR7bGV4ZW1lfScgaXMgbm90IHN1cHBvcnRlZCBpbiBjb25zdGFudCBleHByZXNzaW9ucy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0b2tlbic6IHRva2VufSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBUb2tlbgogICAgICAgICAgICB0b2tlbik+IHRlbXBsYXRlQ2FudFVzZURlZmVycmVkUHJlZml4QXNDb25zdGFudCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiJyNsZXhlbWUnIGNhbid0IGJlIHVzZWQgaW4gYSBjb25zdGFudCBleHByZXNzaW9uIGJlY2F1c2UgaXQncyBtYXJrZWQgYXMgJ2RlZmVycmVkJyB3aGljaCBtZWFucyBpdCBpc24ndCBhdmFpbGFibGUgdW50aWwgbG9hZGVkLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgbW92aW5nIHRoZSBjb25zdGFudCBmcm9tIHRoZSBkZWZlcnJlZCBsaWJyYXJ5LCBvciByZW1vdmluZyAnZGVmZXJyZWQnIGZyb20gdGhlIGltcG9ydC4KIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDYW50VXNlRGVmZXJyZWRQcmVmaXhBc0NvbnN0YW50KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+IGNvZGVDYW50VXNlRGVmZXJyZWRQcmVmaXhBc0NvbnN0YW50ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KCJDYW50VXNlRGVmZXJyZWRQcmVmaXhBc0NvbnN0YW50IiwKICAgICAgICB0ZW1wbGF0ZUNhbnRVc2VEZWZlcnJlZFByZWZpeEFzQ29uc3RhbnQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTlNUX0RFRkVSUkVEX0NMQVNTIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NhbnRVc2VEZWZlcnJlZFByZWZpeEFzQ29uc3RhbnQoVG9rZW4gdG9rZW4pIHsKICBTdHJpbmcgbGV4ZW1lID0gdG9rZW4ubGV4ZW1lOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ2FudFVzZURlZmVycmVkUHJlZml4QXNDb25zdGFudCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIicke2xleGVtZX0nIGNhbid0IGJlIHVzZWQgaW4gYSBjb25zdGFudCBleHByZXNzaW9uIGJlY2F1c2UgaXQncyBtYXJrZWQgYXMgJ2RlZmVycmVkJyB3aGljaCBtZWFucyBpdCBpc24ndCBhdmFpbGFibGUgdW50aWwgbG9hZGVkLiIiIiwKICAgICAgdGlwOiAiIiJUcnkgbW92aW5nIHRoZSBjb25zdGFudCBmcm9tIHRoZSBkZWZlcnJlZCBsaWJyYXJ5LCBvciByZW1vdmluZyAnZGVmZXJyZWQnIGZyb20gdGhlIGltcG9ydC4KIiIiLAogICAgICBhcmd1bWVudHM6IHsndG9rZW4nOiB0b2tlbn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDYW50VXNlUHJlZml4QXNFeHByZXNzaW9uID0KICAgIG1lc3NhZ2VDYW50VXNlUHJlZml4QXNFeHByZXNzaW9uOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNhbnRVc2VQcmVmaXhBc0V4cHJlc3Npb24gPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDYW50VXNlUHJlZml4QXNFeHByZXNzaW9uIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJQUkVGSVhfSURFTlRJRklFUl9OT1RfRk9MTE9XRURfQllfRE9UIl0sCiAgICBtZXNzYWdlOiByIiIiQSBwcmVmaXggY2FuJ3QgYmUgdXNlZCBhcyBhbiBleHByZXNzaW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDYW50VXNlUHJlZml4V2l0aE51bGxBd2FyZSA9CiAgICBtZXNzYWdlQ2FudFVzZVByZWZpeFdpdGhOdWxsQXdhcmU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ2FudFVzZVByZWZpeFdpdGhOdWxsQXdhcmUgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDYW50VXNlUHJlZml4V2l0aE51bGxBd2FyZSIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiUFJFRklYX0lERU5USUZJRVJfTk9UX0ZPTExPV0VEX0JZX0RPVCJdLAogICAgbWVzc2FnZTogciIiIkEgcHJlZml4IGNhbid0IGJlIHVzZWQgd2l0aCBudWxsLWF3YXJlIG9wZXJhdG9ycy4iIiIsCiAgICB0aXA6IHIiIiJJdCBzaG91bGQgYmUgc2FmZSB0byByZW1vdmUgdGhlICc/JyBhcyBhIHByZWZpeCBpcyBuZXZlciBudWxsLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDYXRjaFN5bnRheCA9IG1lc3NhZ2VDYXRjaFN5bnRheDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDYXRjaFN5bnRheCA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJDYXRjaFN5bnRheCIsCiAgICBpbmRleDogODQsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiInY2F0Y2gnIG11c3QgYmUgZm9sbG93ZWQgYnkgJyhpZGVudGlmaWVyKScgb3IgJyhpZGVudGlmaWVyLCBpZGVudGlmaWVyKScuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJObyB0eXBlcyBhcmUgbmVlZGVkLCB0aGUgZmlyc3QgaXMgZ2l2ZW4gYnkgJ29uJywgdGhlIHNlY29uZCBpcyBhbHdheXMgJ1N0YWNrVHJhY2UnLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDYXRjaFN5bnRheEV4dHJhUGFyYW1ldGVycyA9CiAgICBtZXNzYWdlQ2F0Y2hTeW50YXhFeHRyYVBhcmFtZXRlcnM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ2F0Y2hTeW50YXhFeHRyYVBhcmFtZXRlcnMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDYXRjaFN5bnRheEV4dHJhUGFyYW1ldGVycyIsCiAgICBpbmRleDogODMsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiInY2F0Y2gnIG11c3QgYmUgZm9sbG93ZWQgYnkgJyhpZGVudGlmaWVyKScgb3IgJyhpZGVudGlmaWVyLCBpZGVudGlmaWVyKScuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJObyB0eXBlcyBhcmUgbmVlZGVkLCB0aGUgZmlyc3QgaXMgZ2l2ZW4gYnkgJ29uJywgdGhlIHNlY29uZCBpcyBhbHdheXMgJ1N0YWNrVHJhY2UnLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDbGFzc0luQ2xhc3MgPSBtZXNzYWdlQ2xhc3NJbkNsYXNzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNsYXNzSW5DbGFzcyA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJDbGFzc0luQ2xhc3MiLAogICAgaW5kZXg6IDUzLAogICAgbWVzc2FnZTogciIiIkNsYXNzZXMgY2FuJ3QgYmUgZGVjbGFyZWQgaW5zaWRlIG90aGVyIGNsYXNzZXMuIiIiLAogICAgdGlwOiByIiIiVHJ5IG1vdmluZyB0aGUgY2xhc3MgdG8gdGhlIHRvcC1sZXZlbC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29sb25JblBsYWNlT2ZJbiA9IG1lc3NhZ2VDb2xvbkluUGxhY2VPZkluOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvbG9uSW5QbGFjZU9mSW4gPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDb2xvbkluUGxhY2VPZkluIiwKICAgIGluZGV4OiA1NCwKICAgIG1lc3NhZ2U6IHIiIiJGb3ItaW4gbG9vcHMgdXNlICdpbicgcmF0aGVyIHRoYW4gYSBjb2xvbi4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVwbGFjaW5nIHRoZSBjb2xvbiB3aXRoIHRoZSBrZXl3b3JkICdpbicuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZTIpPiB0ZW1wbGF0ZUNvbWJpbmVkTWVtYmVyU2lnbmF0dXJlRmFpbGVkID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkNsYXNzICcjbmFtZScgaW5oZXJpdHMgbXVsdGlwbGUgbWVtYmVycyBuYW1lZCAnI25hbWUyJyB3aXRoIGluY29tcGF0aWJsZSBzaWduYXR1cmVzLiIiIiwKICAgIHRpcFRlbXBsYXRlOiByIiIiVHJ5IGFkZGluZyBhIGRlY2xhcmF0aW9uIG9mICcjbmFtZTInIHRvICcjbmFtZScuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb21iaW5lZE1lbWJlclNpZ25hdHVyZUZhaWxlZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+CiAgICBjb2RlQ29tYmluZWRNZW1iZXJTaWduYXR1cmVGYWlsZWQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPigKICAgICAgICAiQ29tYmluZWRNZW1iZXJTaWduYXR1cmVGYWlsZWQiLCB0ZW1wbGF0ZUNvbWJpbmVkTWVtYmVyU2lnbmF0dXJlRmFpbGVkLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTkNPTlNJU1RFTlRfSU5IRVJJVEFOQ0UiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ29tYmluZWRNZW1iZXJTaWduYXR1cmVGYWlsZWQoU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMikgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBpZiAobmFtZTIuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUyID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMik7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb21iaW5lZE1lbWJlclNpZ25hdHVyZUZhaWxlZCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkNsYXNzICcke25hbWV9JyBpbmhlcml0cyBtdWx0aXBsZSBtZW1iZXJzIG5hbWVkICcke25hbWUyfScgd2l0aCBpbmNvbXBhdGlibGUgc2lnbmF0dXJlcy4iIiIsCiAgICAgIHRpcDogIiIiVHJ5IGFkZGluZyBhIGRlY2xhcmF0aW9uIG9mICcke25hbWUyfScgdG8gJyR7bmFtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAnbmFtZTInOiBuYW1lMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIHN0cmluZywKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgc3RyaW5nMik+IHRlbXBsYXRlQ29uZmxpY3RpbmdNb2RpZmllcnMgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIk1lbWJlcnMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgYm90aCAnI3N0cmluZycgYW5kICcjc3RyaW5nMicuIiIiLAogICAgdGlwVGVtcGxhdGU6IHIiIiJUcnkgcmVtb3Zpbmcgb25lIG9mIHRoZSBrZXl3b3Jkcy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NvbmZsaWN0aW5nTW9kaWZpZXJzKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+CiAgICBjb2RlQ29uZmxpY3RpbmdNb2RpZmllcnMgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKT4oCiAgICAgICAgIkNvbmZsaWN0aW5nTW9kaWZpZXJzIiwgdGVtcGxhdGVDb25mbGljdGluZ01vZGlmaWVycywKICAgICAgICBpbmRleDogNTkpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbmZsaWN0aW5nTW9kaWZpZXJzKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICBpZiAoc3RyaW5nMi5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbmZsaWN0aW5nTW9kaWZpZXJzLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiTWVtYmVycyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSBib3RoICcke3N0cmluZ30nIGFuZCAnJHtzdHJpbmcyfScuIiIiLAogICAgICB0aXA6ICIiIlRyeSByZW1vdmluZyBvbmUgb2YgdGhlIGtleXdvcmRzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZywgJ3N0cmluZzInOiBzdHJpbmcyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhDb25zdHJ1Y3RvciA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ29uZmxpY3RzIHdpdGggY29uc3RydWN0b3IgJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25mbGljdHNXaXRoQ29uc3RydWN0b3IpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUNvbmZsaWN0c1dpdGhDb25zdHJ1Y3RvciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiQ29uZmxpY3RzV2l0aENvbnN0cnVjdG9yIiwgdGVtcGxhdGVDb25mbGljdHNXaXRoQ29uc3RydWN0b3IsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTkZMSUNUU19XSVRIX0NPTlNUUlVDVE9SIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbmZsaWN0c1dpdGhDb25zdHJ1Y3RvcihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbmZsaWN0c1dpdGhDb25zdHJ1Y3RvciwKICAgICAgbWVzc2FnZTogIiIiQ29uZmxpY3RzIHdpdGggY29uc3RydWN0b3IgJyR7bmFtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhGYWN0b3J5ID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJDb25mbGljdHMgd2l0aCBmYWN0b3J5ICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uZmxpY3RzV2l0aEZhY3RvcnkpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUNvbmZsaWN0c1dpdGhGYWN0b3J5ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICJDb25mbGljdHNXaXRoRmFjdG9yeSIsCiAgdGVtcGxhdGVDb25mbGljdHNXaXRoRmFjdG9yeSwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25mbGljdHNXaXRoRmFjdG9yeShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbmZsaWN0c1dpdGhGYWN0b3J5LAogICAgICBtZXNzYWdlOiAiIiJDb25mbGljdHMgd2l0aCBmYWN0b3J5ICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVDb25mbGljdHNXaXRoTWVtYmVyID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJDb25mbGljdHMgd2l0aCBtZW1iZXIgJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25mbGljdHNXaXRoTWVtYmVyKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVDb25mbGljdHNXaXRoTWVtYmVyID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJDb25mbGljdHNXaXRoTWVtYmVyIiwgdGVtcGxhdGVDb25mbGljdHNXaXRoTWVtYmVyLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05GTElDVFNfV0lUSF9NRU1CRVIiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ29uZmxpY3RzV2l0aE1lbWJlcihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbmZsaWN0c1dpdGhNZW1iZXIsCiAgICAgIG1lc3NhZ2U6ICIiIkNvbmZsaWN0cyB3aXRoIG1lbWJlciAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhNZW1iZXJXYXJuaW5nID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJDb25mbGljdHMgd2l0aCBtZW1iZXIgJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25mbGljdHNXaXRoTWVtYmVyV2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlQ29uZmxpY3RzV2l0aE1lbWJlcldhcm5pbmcgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkNvbmZsaWN0c1dpdGhNZW1iZXJXYXJuaW5nIiwgdGVtcGxhdGVDb25mbGljdHNXaXRoTWVtYmVyV2FybmluZywKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQ09ORkxJQ1RTX1dJVEhfTUVNQkVSIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ29uZmxpY3RzV2l0aE1lbWJlcldhcm5pbmcoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25mbGljdHNXaXRoTWVtYmVyV2FybmluZywKICAgICAgbWVzc2FnZTogIiIiQ29uZmxpY3RzIHdpdGggbWVtYmVyICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVDb25mbGljdHNXaXRoU2V0dGVyID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJDb25mbGljdHMgd2l0aCBzZXR0ZXIgJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25mbGljdHNXaXRoU2V0dGVyKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVDb25mbGljdHNXaXRoU2V0dGVyID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJDb25mbGljdHNXaXRoU2V0dGVyIiwgdGVtcGxhdGVDb25mbGljdHNXaXRoU2V0dGVyLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05GTElDVFNfV0lUSF9NRU1CRVIiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ29uZmxpY3RzV2l0aFNldHRlcihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbmZsaWN0c1dpdGhTZXR0ZXIsCiAgICAgIG1lc3NhZ2U6ICIiIkNvbmZsaWN0cyB3aXRoIHNldHRlciAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhTZXR0ZXJXYXJuaW5nID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJDb25mbGljdHMgd2l0aCBzZXR0ZXIgJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25mbGljdHNXaXRoU2V0dGVyV2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlQ29uZmxpY3RzV2l0aFNldHRlcldhcm5pbmcgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkNvbmZsaWN0c1dpdGhTZXR0ZXJXYXJuaW5nIiwgdGVtcGxhdGVDb25mbGljdHNXaXRoU2V0dGVyV2FybmluZywKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQ09ORkxJQ1RTX1dJVEhfTUVNQkVSIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ29uZmxpY3RzV2l0aFNldHRlcldhcm5pbmcoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25mbGljdHNXaXRoU2V0dGVyV2FybmluZywKICAgICAgbWVzc2FnZTogIiIiQ29uZmxpY3RzIHdpdGggc2V0dGVyICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlQ29uZmxpY3RzV2l0aFR5cGVWYXJpYWJsZSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ29uZmxpY3RzIHdpdGggdHlwZSB2YXJpYWJsZSAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGUpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUNvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGUgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkNvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGUiLCB0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGUsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTkZMSUNUSU5HX1RZUEVfVkFSSUFCTEVfQU5EX01FTUJFUiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25mbGljdHNXaXRoVHlwZVZhcmlhYmxlKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29uZmxpY3RzV2l0aFR5cGVWYXJpYWJsZSwKICAgICAgbWVzc2FnZTogIiIiQ29uZmxpY3RzIHdpdGggdHlwZSB2YXJpYWJsZSAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29uZmxpY3RzV2l0aFR5cGVWYXJpYWJsZUNhdXNlID0KICAgIG1lc3NhZ2VDb25mbGljdHNXaXRoVHlwZVZhcmlhYmxlQ2F1c2U7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29uZmxpY3RzV2l0aFR5cGVWYXJpYWJsZUNhdXNlID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ29uZmxpY3RzV2l0aFR5cGVWYXJpYWJsZUNhdXNlIiwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0LAogICAgbWVzc2FnZTogciIiIlRoaXMgaXMgdGhlIHR5cGUgdmFyaWFibGUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbnN0QW5kRmluYWwgPSBtZXNzYWdlQ29uc3RBbmRGaW5hbDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdEFuZEZpbmFsID0gY29uc3QgTWVzc2FnZUNvZGUoIkNvbnN0QW5kRmluYWwiLAogICAgaW5kZXg6IDU4LAogICAgbWVzc2FnZTogciIiIk1lbWJlcnMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgYm90aCAnY29uc3QnIGFuZCAnZmluYWwnLiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyBlaXRoZXIgdGhlICdjb25zdCcgb3IgJ2ZpbmFsJyBrZXl3b3JkLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb25zdENsYXNzID0gbWVzc2FnZUNvbnN0Q2xhc3M7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29uc3RDbGFzcyA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJDb25zdENsYXNzIiwKICAgIGluZGV4OiA2MCwKICAgIG1lc3NhZ2U6IHIiIiJDbGFzc2VzIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlICdjb25zdCcuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgcmVtb3ZpbmcgdGhlICdjb25zdCcga2V5d29yZC4gSWYgeW91J3JlIHRyeWluZyB0byBpbmRpY2F0ZSB0aGF0IGluc3RhbmNlcyBvZiB0aGUgY2xhc3MgY2FuIGJlIGNvbnN0YW50cywgcGxhY2UgdGhlICdjb25zdCcga2V5d29yZCBvbiAgdGhlIGNsYXNzJyBjb25zdHJ1Y3RvcihzKS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29uc3RDb25zdHJ1Y3Rvck5vbkZpbmFsRmllbGQgPQogICAgbWVzc2FnZUNvbnN0Q29uc3RydWN0b3JOb25GaW5hbEZpZWxkOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvbnN0Q29uc3RydWN0b3JOb25GaW5hbEZpZWxkID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ29uc3RDb25zdHJ1Y3Rvck5vbkZpbmFsRmllbGQiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTlNUX0NPTlNUUlVDVE9SX1dJVEhfTk9OX0ZJTkFMX0ZJRUxEIl0sCiAgICBtZXNzYWdlOiByIiIiQ29uc3RydWN0b3IgaXMgbWFya2VkICdjb25zdCcgc28gYWxsIGZpZWxkcyBtdXN0IGJlIGZpbmFsLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb25zdENvbnN0cnVjdG9yTm9uRmluYWxGaWVsZENhdXNlID0KICAgIG1lc3NhZ2VDb25zdENvbnN0cnVjdG9yTm9uRmluYWxGaWVsZENhdXNlOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvbnN0Q29uc3RydWN0b3JOb25GaW5hbEZpZWxkQ2F1c2UgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDb25zdENvbnN0cnVjdG9yTm9uRmluYWxGaWVsZENhdXNlIiwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0LAogICAgbWVzc2FnZTogciIiIkZpZWxkIGlzbid0IGZpbmFsLCBidXQgY29uc3RydWN0b3IgaXMgJ2NvbnN0Jy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29uc3RDb25zdHJ1Y3RvclJlZGlyZWN0aW9uVG9Ob25Db25zdCA9CiAgICBtZXNzYWdlQ29uc3RDb25zdHJ1Y3RvclJlZGlyZWN0aW9uVG9Ob25Db25zdDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdENvbnN0cnVjdG9yUmVkaXJlY3Rpb25Ub05vbkNvbnN0ID0KICAgIGNvbnN0IE1lc3NhZ2VDb2RlKCJDb25zdENvbnN0cnVjdG9yUmVkaXJlY3Rpb25Ub05vbkNvbnN0IiwKICAgICAgICBtZXNzYWdlOgogICAgICAgICAgICByIiIiQSBjb25zdGFudCBjb25zdHJ1Y3RvciBjYW4ndCBjYWxsIGEgbm9uLWNvbnN0YW50IGNvbnN0cnVjdG9yLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb25zdENvbnN0cnVjdG9yV2l0aEJvZHkgPSBtZXNzYWdlQ29uc3RDb25zdHJ1Y3RvcldpdGhCb2R5OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvbnN0Q29uc3RydWN0b3JXaXRoQm9keSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkNvbnN0Q29uc3RydWN0b3JXaXRoQm9keSIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQ09OU1RfQ09OU1RSVUNUT1JfV0lUSF9CT0RZIl0sCiAgICBtZXNzYWdlOiByIiIiQSBjb25zdCBjb25zdHJ1Y3RvciBjYW4ndCBoYXZlIGEgYm9keS4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgZWl0aGVyIHRoZSAnY29uc3QnIGtleXdvcmQgb3IgdGhlIGJvZHkuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbnN0Q29uc3RydWN0b3JXaXRoTm9uQ29uc3RTdXBlciA9CiAgICBtZXNzYWdlQ29uc3RDb25zdHJ1Y3RvcldpdGhOb25Db25zdFN1cGVyOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvbnN0Q29uc3RydWN0b3JXaXRoTm9uQ29uc3RTdXBlciA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkNvbnN0Q29uc3RydWN0b3JXaXRoTm9uQ29uc3RTdXBlciIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQ09OU1RfQ09OU1RSVUNUT1JfV0lUSF9OT05fQ09OU1RfU1VQRVIiXSwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIkNvbnN0YW50IGNvbnN0cnVjdG9yIGNhbid0IGNhbGwgbm9uLWNvbnN0YW50IHN1cGVyIGNvbnN0cnVjdG9ycy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29uc3RFdmFsQ2lyY3VsYXJpdHkgPSBtZXNzYWdlQ29uc3RFdmFsQ2lyY3VsYXJpdHk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29uc3RFdmFsQ2lyY3VsYXJpdHkgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDb25zdEV2YWxDaXJjdWxhcml0eSIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiUkVDVVJTSVZFX0NPTVBJTEVfVElNRV9DT05TVEFOVCJdLAogICAgbWVzc2FnZTogciIiIkNvbnN0YW50IGV4cHJlc3Npb24gZGVwZW5kcyBvbiBpdHNlbGYuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbnN0RXZhbENvbnRleHQgPSBtZXNzYWdlQ29uc3RFdmFsQ29udGV4dDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdEV2YWxDb250ZXh0ID0KICAgIGNvbnN0IE1lc3NhZ2VDb2RlKCJDb25zdEV2YWxDb250ZXh0IiwgbWVzc2FnZTogciIiIldoaWxlIGFuYWx5emluZzoiIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVDb25zdEV2YWxEZWZlcnJlZExpYnJhcnkgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIicjbmFtZScgY2FuJ3QgYmUgdXNlZCBpbiBhIGNvbnN0YW50IGV4cHJlc3Npb24gYmVjYXVzZSBpdCdzIG1hcmtlZCBhcyAnZGVmZXJyZWQnIHdoaWNoIG1lYW5zIGl0IGlzbid0IGF2YWlsYWJsZSB1bnRpbCBsb2FkZWQuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBtb3ZpbmcgdGhlIGNvbnN0YW50IGZyb20gdGhlIGRlZmVycmVkIGxpYnJhcnksIG9yIHJlbW92aW5nICdkZWZlcnJlZCcgZnJvbSB0aGUgaW1wb3J0LgoiIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbERlZmVycmVkTGlicmFyeSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlQ29uc3RFdmFsRGVmZXJyZWRMaWJyYXJ5ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJDb25zdEV2YWxEZWZlcnJlZExpYnJhcnkiLCB0ZW1wbGF0ZUNvbnN0RXZhbERlZmVycmVkTGlicmFyeSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsKICAgICAgIk5PTl9DT05TVEFOVF9ERUZBVUxUX1ZBTFVFX0ZST01fREVGRVJSRURfTElCUkFSWSIKICAgIF0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbERlZmVycmVkTGlicmFyeShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbnN0RXZhbERlZmVycmVkTGlicmFyeSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIicke25hbWV9JyBjYW4ndCBiZSB1c2VkIGluIGEgY29uc3RhbnQgZXhwcmVzc2lvbiBiZWNhdXNlIGl0J3MgbWFya2VkIGFzICdkZWZlcnJlZCcgd2hpY2ggbWVhbnMgaXQgaXNuJ3QgYXZhaWxhYmxlIHVudGlsIGxvYWRlZC4iIiIsCiAgICAgIHRpcDogIiIiVHJ5IG1vdmluZyB0aGUgY29uc3RhbnQgZnJvbSB0aGUgZGVmZXJyZWQgbGlicmFyeSwgb3IgcmVtb3ZpbmcgJ2RlZmVycmVkJyBmcm9tIHRoZSBpbXBvcnQuCiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBDb25zdGFudAogICAgICAgICAgICBfY29uc3RhbnQpPiB0ZW1wbGF0ZUNvbnN0RXZhbER1cGxpY2F0ZUVsZW1lbnQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgZWxlbWVudCAnI2NvbnN0YW50JyBjb25mbGljdHMgd2l0aCBhbm90aGVyIGV4aXN0aW5nIGVsZW1lbnQgaW4gdGhlIHNldC4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbER1cGxpY2F0ZUVsZW1lbnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCk+IGNvZGVDb25zdEV2YWxEdXBsaWNhdGVFbGVtZW50ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPigKICAgICAgICAiQ29uc3RFdmFsRHVwbGljYXRlRWxlbWVudCIsIHRlbXBsYXRlQ29uc3RFdmFsRHVwbGljYXRlRWxlbWVudCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRVFVQUxfRUxFTUVOVFNfSU5fQ09OU1RfU0VUIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbER1cGxpY2F0ZUVsZW1lbnQoQ29uc3RhbnQgX2NvbnN0YW50KSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiBjb25zdGFudFBhcnRzID0gbGFiZWxlci5sYWJlbENvbnN0YW50KF9jb25zdGFudCk7CiAgU3RyaW5nIGNvbnN0YW50ID0gY29uc3RhbnRQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25zdEV2YWxEdXBsaWNhdGVFbGVtZW50LAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIGVsZW1lbnQgJyR7Y29uc3RhbnR9JyBjb25mbGljdHMgd2l0aCBhbm90aGVyIGV4aXN0aW5nIGVsZW1lbnQgaW4gdGhlIHNldC4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIGFyZ3VtZW50czogeydjb25zdGFudCc6IF9jb25zdGFudH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgQ29uc3RhbnQKICAgICAgICAgICAgX2NvbnN0YW50KT4gdGVtcGxhdGVDb25zdEV2YWxEdXBsaWNhdGVLZXkgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUga2V5ICcjY29uc3RhbnQnIGNvbmZsaWN0cyB3aXRoIGFub3RoZXIgZXhpc3Rpbmcga2V5IGluIHRoZSBtYXAuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25zdEV2YWxEdXBsaWNhdGVLZXkpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCk+IGNvZGVDb25zdEV2YWxEdXBsaWNhdGVLZXkgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCk+KAogICAgICAgICJDb25zdEV2YWxEdXBsaWNhdGVLZXkiLCB0ZW1wbGF0ZUNvbnN0RXZhbER1cGxpY2F0ZUtleSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRVFVQUxfS0VZU19JTl9DT05TVF9NQVAiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ29uc3RFdmFsRHVwbGljYXRlS2V5KENvbnN0YW50IF9jb25zdGFudCkgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gY29uc3RhbnRQYXJ0cyA9IGxhYmVsZXIubGFiZWxDb25zdGFudChfY29uc3RhbnQpOwogIFN0cmluZyBjb25zdGFudCA9IGNvbnN0YW50UGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29uc3RFdmFsRHVwbGljYXRlS2V5LAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIGtleSAnJHtjb25zdGFudH0nIGNvbmZsaWN0cyB3aXRoIGFub3RoZXIgZXhpc3Rpbmcga2V5IGluIHRoZSBtYXAuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsnY29uc3RhbnQnOiBfY29uc3RhbnR9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIENvbnN0YW50CiAgICAgICAgICAgIF9jb25zdGFudCk+IHRlbXBsYXRlQ29uc3RFdmFsRWxlbWVudEltcGxlbWVudHNFcXVhbCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oQ29uc3RhbnQgX2NvbnN0YW50KT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBlbGVtZW50ICcjY29uc3RhbnQnIGRvZXMgbm90IGhhdmUgYSBwcmltaXRpdmUgb3BlcmF0b3IgJz09Jy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEVsZW1lbnRJbXBsZW1lbnRzRXF1YWwpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCk+CiAgICBjb2RlQ29uc3RFdmFsRWxlbWVudEltcGxlbWVudHNFcXVhbCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oQ29uc3RhbnQgX2NvbnN0YW50KT4oCiAgICAgICAgIkNvbnN0RXZhbEVsZW1lbnRJbXBsZW1lbnRzRXF1YWwiLAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsRWxlbWVudEltcGxlbWVudHNFcXVhbCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQ09OU1RfU0VUX0VMRU1FTlRfVFlQRV9JTVBMRU1FTlRTX0VRVUFMUyJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25zdEV2YWxFbGVtZW50SW1wbGVtZW50c0VxdWFsKENvbnN0YW50IF9jb25zdGFudCkgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gY29uc3RhbnRQYXJ0cyA9IGxhYmVsZXIubGFiZWxDb25zdGFudChfY29uc3RhbnQpOwogIFN0cmluZyBjb25zdGFudCA9IGNvbnN0YW50UGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29uc3RFdmFsRWxlbWVudEltcGxlbWVudHNFcXVhbCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBlbGVtZW50ICcke2NvbnN0YW50fScgZG9lcyBub3QgaGF2ZSBhIHByaW1pdGl2ZSBvcGVyYXRvciAnPT0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J2NvbnN0YW50JzogX2NvbnN0YW50fSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbnN0RXZhbEZhaWxlZEFzc2VydGlvbiA9IG1lc3NhZ2VDb25zdEV2YWxGYWlsZWRBc3NlcnRpb247CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29uc3RFdmFsRmFpbGVkQXNzZXJ0aW9uID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ29uc3RFdmFsRmFpbGVkQXNzZXJ0aW9uIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05TVF9FVkFMX1RIUk9XU19FWENFUFRJT04iXSwKICAgIG1lc3NhZ2U6IHIiIiJUaGlzIGFzc2VydGlvbiBmYWlsZWQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+CiAgICB0ZW1wbGF0ZUNvbnN0RXZhbEZhaWxlZEFzc2VydGlvbldpdGhNZXNzYWdlID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlRoaXMgYXNzZXJ0aW9uIGZhaWxlZCB3aXRoIG1lc3NhZ2U6ICNzdHJpbmciIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25zdEV2YWxGYWlsZWRBc3NlcnRpb25XaXRoTWVzc2FnZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+CiAgICBjb2RlQ29uc3RFdmFsRmFpbGVkQXNzZXJ0aW9uV2l0aE1lc3NhZ2UgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICAiQ29uc3RFdmFsRmFpbGVkQXNzZXJ0aW9uV2l0aE1lc3NhZ2UiLAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsRmFpbGVkQXNzZXJ0aW9uV2l0aE1lc3NhZ2UsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTlNUX0VWQUxfVEhST1dTX0VYQ0VQVElPTiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25zdEV2YWxGYWlsZWRBc3NlcnRpb25XaXRoTWVzc2FnZShTdHJpbmcgc3RyaW5nKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbnN0RXZhbEZhaWxlZEFzc2VydGlvbldpdGhNZXNzYWdlLAogICAgICBtZXNzYWdlOiAiIiJUaGlzIGFzc2VydGlvbiBmYWlsZWQgd2l0aCBtZXNzYWdlOiAke3N0cmluZ30iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmd9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlKT4gdGVtcGxhdGVDb25zdEV2YWxGcmVlVHlwZVBhcmFtZXRlciA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIHR5cGUgJyN0eXBlJyBpcyBub3QgYSBjb25zdGFudCBiZWNhdXNlIGl0IGRlcGVuZHMgb24gYSB0eXBlIHBhcmFtZXRlciwgb25seSBpbnN0YW50aWF0ZWQgdHlwZXMgYXJlIGFsbG93ZWQuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25zdEV2YWxGcmVlVHlwZVBhcmFtZXRlcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUpPiBjb2RlQ29uc3RFdmFsRnJlZVR5cGVQYXJhbWV0ZXIgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4oCiAgIkNvbnN0RXZhbEZyZWVUeXBlUGFyYW1ldGVyIiwKICB0ZW1wbGF0ZUNvbnN0RXZhbEZyZWVUeXBlUGFyYW1ldGVyLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEZyZWVUeXBlUGFyYW1ldGVyKERhcnRUeXBlIF90eXBlKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29uc3RFdmFsRnJlZVR5cGVQYXJhbWV0ZXIsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgdHlwZSAnJHt0eXBlfScgaXMgbm90IGEgY29uc3RhbnQgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIGEgdHlwZSBwYXJhbWV0ZXIsIG9ubHkgaW5zdGFudGlhdGVkIHR5cGVzIGFyZSBhbGxvd2VkLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIHN0cmluZywKICAgICAgICBDb25zdGFudCBfY29uc3RhbnQsCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkQmluYXJ5T3BlcmFuZFR5cGUgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIENvbnN0YW50IF9jb25zdGFudCwgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgICAgIERhcnRUeXBlIF90eXBlMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJCaW5hcnkgb3BlcmF0b3IgJyNzdHJpbmcnIG9uICcjY29uc3RhbnQnIHJlcXVpcmVzIG9wZXJhbmQgb2YgdHlwZSAnI3R5cGUnLCBidXQgd2FzIG9mIHR5cGUgJyN0eXBlMicuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkQmluYXJ5T3BlcmFuZFR5cGUpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgQ29uc3RhbnQgX2NvbnN0YW50LCBEYXJ0VHlwZSBfdHlwZSwKICAgICAgICBEYXJ0VHlwZSBfdHlwZTIpPiBjb2RlQ29uc3RFdmFsSW52YWxpZEJpbmFyeU9wZXJhbmRUeXBlID0gY29uc3QgQ29kZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIHN0cmluZywgQ29uc3RhbnQgX2NvbnN0YW50LCBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgIkNvbnN0RXZhbEludmFsaWRCaW5hcnlPcGVyYW5kVHlwZSIsCiAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkQmluYXJ5T3BlcmFuZFR5cGUsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ29uc3RFdmFsSW52YWxpZEJpbmFyeU9wZXJhbmRUeXBlKAogICAgU3RyaW5nIHN0cmluZywgQ29uc3RhbnQgX2NvbnN0YW50LCBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IGNvbnN0YW50UGFydHMgPSBsYWJlbGVyLmxhYmVsQ29uc3RhbnQoX2NvbnN0YW50KTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgY29uc3RhbnQgPSBjb25zdGFudFBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25zdEV2YWxJbnZhbGlkQmluYXJ5T3BlcmFuZFR5cGUsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJCaW5hcnkgb3BlcmF0b3IgJyR7c3RyaW5nfScgb24gJyR7Y29uc3RhbnR9JyByZXF1aXJlcyBvcGVyYW5kIG9mIHR5cGUgJyR7dHlwZX0nLCBidXQgd2FzIG9mIHR5cGUgJyR7dHlwZTJ9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIGFyZ3VtZW50czogewogICAgICAgICdzdHJpbmcnOiBzdHJpbmcsCiAgICAgICAgJ2NvbnN0YW50JzogX2NvbnN0YW50LAogICAgICAgICd0eXBlJzogX3R5cGUsCiAgICAgICAgJ3R5cGUyJzogX3R5cGUyCiAgICAgIH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgQ29uc3RhbnQgX2NvbnN0YW50LAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlKT4gdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkRXF1YWxzT3BlcmFuZFR5cGUgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCwgRGFydFR5cGUgX3R5cGUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiQmluYXJ5IG9wZXJhdG9yICc9PScgcmVxdWlyZXMgcmVjZWl2ZXIgY29uc3RhbnQgJyNjb25zdGFudCcgb2YgdHlwZSAnTnVsbCcsICdib29sJywgJ2ludCcsICdkb3VibGUnLCBvciAnU3RyaW5nJywgYnV0IHdhcyBvZiB0eXBlICcjdHlwZScuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkRXF1YWxzT3BlcmFuZFR5cGUpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCwgRGFydFR5cGUgX3R5cGUpPgogICAgY29kZUNvbnN0RXZhbEludmFsaWRFcXVhbHNPcGVyYW5kVHlwZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oQ29uc3RhbnQgX2NvbnN0YW50LCBEYXJ0VHlwZSBfdHlwZSk+KAogICJDb25zdEV2YWxJbnZhbGlkRXF1YWxzT3BlcmFuZFR5cGUiLAogIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZEVxdWFsc09wZXJhbmRUeXBlLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEludmFsaWRFcXVhbHNPcGVyYW5kVHlwZSgKICAgIENvbnN0YW50IF9jb25zdGFudCwgRGFydFR5cGUgX3R5cGUpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IGNvbnN0YW50UGFydHMgPSBsYWJlbGVyLmxhYmVsQ29uc3RhbnQoX2NvbnN0YW50KTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIFN0cmluZyBjb25zdGFudCA9IGNvbnN0YW50UGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbnN0RXZhbEludmFsaWRFcXVhbHNPcGVyYW5kVHlwZSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkJpbmFyeSBvcGVyYXRvciAnPT0nIHJlcXVpcmVzIHJlY2VpdmVyIGNvbnN0YW50ICcke2NvbnN0YW50fScgb2YgdHlwZSAnTnVsbCcsICdib29sJywgJ2ludCcsICdkb3VibGUnLCBvciAnU3RyaW5nJywgYnV0IHdhcyBvZiB0eXBlICcke3R5cGV9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIGFyZ3VtZW50czogeydjb25zdGFudCc6IF9jb25zdGFudCwgJ3R5cGUnOiBfdHlwZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIHN0cmluZywKICAgICAgICBDb25zdGFudAogICAgICAgICAgICBfY29uc3RhbnQpPiB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRNZXRob2RJbnZvY2F0aW9uID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBDb25zdGFudCBfY29uc3RhbnQpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIG1ldGhvZCAnI3N0cmluZycgY2FuJ3QgYmUgaW52b2tlZCBvbiAnI2NvbnN0YW50JyB3aXRoaW4gYSBjb25zdCBjb250ZXh0LiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uc3RFdmFsSW52YWxpZE1ldGhvZEludm9jYXRpb24pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIENvbnN0YW50IF9jb25zdGFudCk+CiAgICBjb2RlQ29uc3RFdmFsSW52YWxpZE1ldGhvZEludm9jYXRpb24gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIENvbnN0YW50IF9jb25zdGFudCk+KAogICAgICAgICJDb25zdEV2YWxJbnZhbGlkTWV0aG9kSW52b2NhdGlvbiIsCiAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkTWV0aG9kSW52b2NhdGlvbiwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVU5ERUZJTkVEX09QRVJBVE9SIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEludmFsaWRNZXRob2RJbnZvY2F0aW9uKAogICAgU3RyaW5nIHN0cmluZywgQ29uc3RhbnQgX2NvbnN0YW50KSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IGNvbnN0YW50UGFydHMgPSBsYWJlbGVyLmxhYmVsQ29uc3RhbnQoX2NvbnN0YW50KTsKICBTdHJpbmcgY29uc3RhbnQgPSBjb25zdGFudFBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbnN0RXZhbEludmFsaWRNZXRob2RJbnZvY2F0aW9uLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIG1ldGhvZCAnJHtzdHJpbmd9JyBjYW4ndCBiZSBpbnZva2VkIG9uICcke2NvbnN0YW50fScgd2l0aGluIGEgY29uc3QgY29udGV4dC4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmcsICdjb25zdGFudCc6IF9jb25zdGFudH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIHN0cmluZywKICAgICAgICBDb25zdGFudAogICAgICAgICAgICBfY29uc3RhbnQpPiB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRQcm9wZXJ0eUdldCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgQ29uc3RhbnQgX2NvbnN0YW50KT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBwcm9wZXJ0eSAnI3N0cmluZycgY2FuJ3QgYmUgYWNjZXNzZWQgb24gJyNjb25zdGFudCcgd2l0aGluIGEgY29uc3QgY29udGV4dC4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEludmFsaWRQcm9wZXJ0eUdldCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgQ29uc3RhbnQgX2NvbnN0YW50KT4KICAgIGNvZGVDb25zdEV2YWxJbnZhbGlkUHJvcGVydHlHZXQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIENvbnN0YW50IF9jb25zdGFudCk+KAogICAgICAgICJDb25zdEV2YWxJbnZhbGlkUHJvcGVydHlHZXQiLCB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRQcm9wZXJ0eUdldCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQ09OU1RfRVZBTF9USFJPV1NfRVhDRVBUSU9OIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEludmFsaWRQcm9wZXJ0eUdldCgKICAgIFN0cmluZyBzdHJpbmcsIENvbnN0YW50IF9jb25zdGFudCkgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiBjb25zdGFudFBhcnRzID0gbGFiZWxlci5sYWJlbENvbnN0YW50KF9jb25zdGFudCk7CiAgU3RyaW5nIGNvbnN0YW50ID0gY29uc3RhbnRQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25zdEV2YWxJbnZhbGlkUHJvcGVydHlHZXQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgcHJvcGVydHkgJyR7c3RyaW5nfScgY2FuJ3QgYmUgYWNjZXNzZWQgb24gJyR7Y29uc3RhbnR9JyB3aXRoaW4gYSBjb25zdCBjb250ZXh0LiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZywgJ2NvbnN0YW50JzogX2NvbnN0YW50fSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZSk+IHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFN0YXRpY0ludm9jYXRpb24gPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBpbnZvY2F0aW9uIG9mICcjbmFtZScgaXMgbm90IGFsbG93ZWQgd2l0aGluIGEgY29uc3QgY29udGV4dC4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEludmFsaWRTdGF0aWNJbnZvY2F0aW9uKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVDb25zdEV2YWxJbnZhbGlkU3RhdGljSW52b2NhdGlvbiA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiQ29uc3RFdmFsSW52YWxpZFN0YXRpY0ludm9jYXRpb24iLAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFN0YXRpY0ludm9jYXRpb24sCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTlNUX0lOSVRJQUxJWkVEX1dJVEhfTk9OX0NPTlNUQU5UX1ZBTFVFIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEludmFsaWRTdGF0aWNJbnZvY2F0aW9uKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29uc3RFdmFsSW52YWxpZFN0YXRpY0ludm9jYXRpb24sCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgaW52b2NhdGlvbiBvZiAnJHtuYW1lfScgaXMgbm90IGFsbG93ZWQgd2l0aGluIGEgY29uc3QgY29udGV4dC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCk+CiAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRTdHJpbmdJbnRlcnBvbGF0aW9uT3BlcmFuZCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIlRoZSAnI2NvbnN0YW50JyBjYW4ndCBiZSB1c2VkIGFzIHBhcnQgb2YgYSBzdHJpbmcgaW50ZXJwb2xhdGlvbiB3aXRoaW4gYSBjb25zdCBjb250ZXh0LCBvbmx5IHZhbHVlcyBvZiB0eXBlICdudWxsJywgJ2Jvb2wnLCAnaW50JywgJ2RvdWJsZScsIG9yICdTdHJpbmcnIGNhbiBiZSB1c2VkLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOgogICAgICAgICAgICBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEludmFsaWRTdHJpbmdJbnRlcnBvbGF0aW9uT3BlcmFuZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oQ29uc3RhbnQgX2NvbnN0YW50KT4KICAgIGNvZGVDb25zdEV2YWxJbnZhbGlkU3RyaW5nSW50ZXJwb2xhdGlvbk9wZXJhbmQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCk+KAogICAgICAgICJDb25zdEV2YWxJbnZhbGlkU3RyaW5nSW50ZXJwb2xhdGlvbk9wZXJhbmQiLAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFN0cmluZ0ludGVycG9sYXRpb25PcGVyYW5kLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05TVF9FVkFMX1RZUEVfQk9PTF9OVU1fU1RSSU5HIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEludmFsaWRTdHJpbmdJbnRlcnBvbGF0aW9uT3BlcmFuZCgKICAgIENvbnN0YW50IF9jb25zdGFudCkgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gY29uc3RhbnRQYXJ0cyA9IGxhYmVsZXIubGFiZWxDb25zdGFudChfY29uc3RhbnQpOwogIFN0cmluZyBjb25zdGFudCA9IGNvbnN0YW50UGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29uc3RFdmFsSW52YWxpZFN0cmluZ0ludGVycG9sYXRpb25PcGVyYW5kLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlICcke2NvbnN0YW50fScgY2FuJ3QgYmUgdXNlZCBhcyBwYXJ0IG9mIGEgc3RyaW5nIGludGVycG9sYXRpb24gd2l0aGluIGEgY29uc3QgY29udGV4dCwgb25seSB2YWx1ZXMgb2YgdHlwZSAnbnVsbCcsICdib29sJywgJ2ludCcsICdkb3VibGUnLCBvciAnU3RyaW5nJyBjYW4gYmUgdXNlZC4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIGFyZ3VtZW50czogeydjb25zdGFudCc6IF9jb25zdGFudH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgQ29uc3RhbnQKICAgICAgICAgICAgX2NvbnN0YW50KT4gdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkU3ltYm9sTmFtZSA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oQ29uc3RhbnQgX2NvbnN0YW50KT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBzeW1ib2wgbmFtZSBtdXN0IGJlIGEgdmFsaWQgcHVibGljIERhcnQgbWVtYmVyIG5hbWUsIHB1YmxpYyBjb25zdHJ1Y3RvciBuYW1lLCBvciBsaWJyYXJ5IG5hbWUsIG9wdGlvbmFsbHkgcXVhbGlmaWVkLCBidXQgd2FzICcjY29uc3RhbnQnLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uc3RFdmFsSW52YWxpZFN5bWJvbE5hbWUpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCk+CiAgICBjb2RlQ29uc3RFdmFsSW52YWxpZFN5bWJvbE5hbWUgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCk+KAogICAgICAgICJDb25zdEV2YWxJbnZhbGlkU3ltYm9sTmFtZSIsIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFN5bWJvbE5hbWUsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTlNUX0VWQUxfVEhST1dTX0VYQ0VQVElPTiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkU3ltYm9sTmFtZShDb25zdGFudCBfY29uc3RhbnQpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IGNvbnN0YW50UGFydHMgPSBsYWJlbGVyLmxhYmVsQ29uc3RhbnQoX2NvbnN0YW50KTsKICBTdHJpbmcgY29uc3RhbnQgPSBjb25zdGFudFBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbnN0RXZhbEludmFsaWRTeW1ib2xOYW1lLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIHN5bWJvbCBuYW1lIG11c3QgYmUgYSB2YWxpZCBwdWJsaWMgRGFydCBtZW1iZXIgbmFtZSwgcHVibGljIGNvbnN0cnVjdG9yIG5hbWUsIG9yIGxpYnJhcnkgbmFtZSwgb3B0aW9uYWxseSBxdWFsaWZpZWQsIGJ1dCB3YXMgJyR7Y29uc3RhbnR9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIGFyZ3VtZW50czogeydjb25zdGFudCc6IF9jb25zdGFudH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgQ29uc3RhbnQgX2NvbnN0YW50LAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlMik+IHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFR5cGUgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJFeHBlY3RlZCBjb25zdGFudCAnI2NvbnN0YW50JyB0byBiZSBvZiB0eXBlICcjdHlwZScsIGJ1dCB3YXMgb2YgdHlwZSAnI3R5cGUyJy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEludmFsaWRUeXBlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQsIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPgogICAgY29kZUNvbnN0RXZhbEludmFsaWRUeXBlID0gY29uc3QgQ29kZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICJDb25zdEV2YWxJbnZhbGlkVHlwZSIsCiAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkVHlwZSwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkVHlwZSgKICAgIENvbnN0YW50IF9jb25zdGFudCwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gY29uc3RhbnRQYXJ0cyA9IGxhYmVsZXIubGFiZWxDb25zdGFudChfY29uc3RhbnQpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIFN0cmluZyBjb25zdGFudCA9IGNvbnN0YW50UGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbnN0RXZhbEludmFsaWRUeXBlLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiRXhwZWN0ZWQgY29uc3RhbnQgJyR7Y29uc3RhbnR9JyB0byBiZSBvZiB0eXBlICcke3R5cGV9JywgYnV0IHdhcyBvZiB0eXBlICcke3R5cGUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsnY29uc3RhbnQnOiBfY29uc3RhbnQsICd0eXBlJzogX3R5cGUsICd0eXBlMic6IF90eXBlMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCk+CiAgICB0ZW1wbGF0ZUNvbnN0RXZhbEtleUltcGxlbWVudHNFcXVhbCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIlRoZSBrZXkgJyNjb25zdGFudCcgZG9lcyBub3QgaGF2ZSBhIHByaW1pdGl2ZSBvcGVyYXRvciAnPT0nLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEtleUltcGxlbWVudHNFcXVhbCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oQ29uc3RhbnQgX2NvbnN0YW50KT4KICAgIGNvZGVDb25zdEV2YWxLZXlJbXBsZW1lbnRzRXF1YWwgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCk+KAogICAgICAgICJDb25zdEV2YWxLZXlJbXBsZW1lbnRzRXF1YWwiLCB0ZW1wbGF0ZUNvbnN0RXZhbEtleUltcGxlbWVudHNFcXVhbCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsKICAgICAgIkNPTlNUX01BUF9LRVlfRVhQUkVTU0lPTl9UWVBFX0lNUExFTUVOVFNfRVFVQUxTIgogICAgXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ29uc3RFdmFsS2V5SW1wbGVtZW50c0VxdWFsKENvbnN0YW50IF9jb25zdGFudCkgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gY29uc3RhbnRQYXJ0cyA9IGxhYmVsZXIubGFiZWxDb25zdGFudChfY29uc3RhbnQpOwogIFN0cmluZyBjb25zdGFudCA9IGNvbnN0YW50UGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29uc3RFdmFsS2V5SW1wbGVtZW50c0VxdWFsLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIGtleSAnJHtjb25zdGFudH0nIGRvZXMgbm90IGhhdmUgYSBwcmltaXRpdmUgb3BlcmF0b3IgJz09Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIGFyZ3VtZW50czogeydjb25zdGFudCc6IF9jb25zdGFudH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIHN0cmluZywKICAgICAgICBTdHJpbmcgc3RyaW5nMiwKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgc3RyaW5nMyk+IHRlbXBsYXRlQ29uc3RFdmFsTmVnYXRpdmVTaGlmdCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIsIFN0cmluZyBzdHJpbmczKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkJpbmFyeSBvcGVyYXRvciAnI3N0cmluZycgb24gJyNzdHJpbmcyJyByZXF1aXJlcyBub24tbmVnYXRpdmUgb3BlcmFuZCwgYnV0IHdhcyAnI3N0cmluZzMnLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uc3RFdmFsTmVnYXRpdmVTaGlmdCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIsIFN0cmluZyBzdHJpbmczKT4KICAgIGNvZGVDb25zdEV2YWxOZWdhdGl2ZVNoaWZ0ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMiwgU3RyaW5nIHN0cmluZzMpPigKICAiQ29uc3RFdmFsTmVnYXRpdmVTaGlmdCIsCiAgdGVtcGxhdGVDb25zdEV2YWxOZWdhdGl2ZVNoaWZ0LAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbE5lZ2F0aXZlU2hpZnQoCiAgICBTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMiwgU3RyaW5nIHN0cmluZzMpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIGlmIChzdHJpbmcyLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIGlmIChzdHJpbmczLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29uc3RFdmFsTmVnYXRpdmVTaGlmdCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkJpbmFyeSBvcGVyYXRvciAnJHtzdHJpbmd9JyBvbiAnJHtzdHJpbmcyfScgcmVxdWlyZXMgbm9uLW5lZ2F0aXZlIG9wZXJhbmQsIGJ1dCB3YXMgJyR7c3RyaW5nM30nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZywgJ3N0cmluZzInOiBzdHJpbmcyLCAnc3RyaW5nMyc6IHN0cmluZzN9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBzdHJpbmcpPiB0ZW1wbGF0ZUNvbnN0RXZhbE5vbkNvbnN0YW50TGl0ZXJhbCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJDYW4ndCBoYXZlIGEgbm9uLWNvbnN0YW50ICNzdHJpbmcgbGl0ZXJhbCB3aXRoaW4gYSBjb25zdCBjb250ZXh0LiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uc3RFdmFsTm9uQ29uc3RhbnRMaXRlcmFsKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4gY29kZUNvbnN0RXZhbE5vbkNvbnN0YW50TGl0ZXJhbCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgICAgICJDb25zdEV2YWxOb25Db25zdGFudExpdGVyYWwiLCB0ZW1wbGF0ZUNvbnN0RXZhbE5vbkNvbnN0YW50TGl0ZXJhbCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTk9OX0NPTlNUQU5UX0RFRkFVTFRfVkFMVUUiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ29uc3RFdmFsTm9uQ29uc3RhbnRMaXRlcmFsKFN0cmluZyBzdHJpbmcpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29uc3RFdmFsTm9uQ29uc3RhbnRMaXRlcmFsLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiQ2FuJ3QgaGF2ZSBhIG5vbi1jb25zdGFudCAke3N0cmluZ30gbGl0ZXJhbCB3aXRoaW4gYSBjb25zdCBjb250ZXh0LiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZ30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIHN0cmluZyk+IHRlbXBsYXRlQ29uc3RFdmFsTm9uQ29uc3RhbnRWYXJpYWJsZUdldCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgdmFyaWFibGUgJyNzdHJpbmcnIGlzIG5vdCBhIGNvbnN0YW50LCBvbmx5IGNvbnN0YW50IGV4cHJlc3Npb25zIGFyZSBhbGxvd2VkLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uc3RFdmFsTm9uQ29uc3RhbnRWYXJpYWJsZUdldCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+CiAgICBjb2RlQ29uc3RFdmFsTm9uQ29uc3RhbnRWYXJpYWJsZUdldCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgICAgICJDb25zdEV2YWxOb25Db25zdGFudFZhcmlhYmxlR2V0IiwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbE5vbkNvbnN0YW50VmFyaWFibGVHZXQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk5PTl9DT05TVEFOVF9WQUxVRV9JTl9JTklUSUFMSVpFUiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25zdEV2YWxOb25Db25zdGFudFZhcmlhYmxlR2V0KFN0cmluZyBzdHJpbmcpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29uc3RFdmFsTm9uQ29uc3RhbnRWYXJpYWJsZUdldCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSB2YXJpYWJsZSAnJHtzdHJpbmd9JyBpcyBub3QgYSBjb25zdGFudCwgb25seSBjb25zdGFudCBleHByZXNzaW9ucyBhcmUgYWxsb3dlZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmd9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29uc3RFdmFsTm90TGlzdE9yU2V0SW5TcHJlYWQgPQogICAgbWVzc2FnZUNvbnN0RXZhbE5vdExpc3RPclNldEluU3ByZWFkOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvbnN0RXZhbE5vdExpc3RPclNldEluU3ByZWFkID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ29uc3RFdmFsTm90TGlzdE9yU2V0SW5TcHJlYWQiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTlNUX1NQUkVBRF9FWFBFQ1RFRF9MSVNUX09SX1NFVCJdLAogICAgbWVzc2FnZToKICAgICAgICByIiIiT25seSBsaXN0cyBhbmQgc2V0cyBjYW4gYmUgdXNlZCBpbiBzcHJlYWRzIGluIGNvbnN0YW50IGxpc3RzIGFuZCBzZXRzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb25zdEV2YWxOb3RNYXBJblNwcmVhZCA9IG1lc3NhZ2VDb25zdEV2YWxOb3RNYXBJblNwcmVhZDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdEV2YWxOb3RNYXBJblNwcmVhZCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkNvbnN0RXZhbE5vdE1hcEluU3ByZWFkIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05TVF9TUFJFQURfRVhQRUNURURfTUFQIl0sCiAgICBtZXNzYWdlOiByIiIiT25seSBtYXBzIGNhbiBiZSB1c2VkIGluIHNwcmVhZHMgaW4gY29uc3RhbnQgbWFwcy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29uc3RFdmFsTnVsbFZhbHVlID0gbWVzc2FnZUNvbnN0RXZhbE51bGxWYWx1ZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdEV2YWxOdWxsVmFsdWUgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDb25zdEV2YWxOdWxsVmFsdWUiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTlNUX0VWQUxfVEhST1dTX0VYQ0VQVElPTiJdLAogICAgbWVzc2FnZTogciIiIk51bGwgdmFsdWUgZHVyaW5nIGNvbnN0YW50IGV2YWx1YXRpb24uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbnN0RXZhbFN0YXJ0aW5nUG9pbnQgPSBtZXNzYWdlQ29uc3RFdmFsU3RhcnRpbmdQb2ludDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdEV2YWxTdGFydGluZ1BvaW50ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ29uc3RFdmFsU3RhcnRpbmdQb2ludCIsCiAgICBtZXNzYWdlOiByIiIiQ29uc3RhbnQgZXZhbHVhdGlvbiBlcnJvcjoiIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29uc3RFdmFsVW5ldmFsdWF0ZWQgPSBtZXNzYWdlQ29uc3RFdmFsVW5ldmFsdWF0ZWQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29uc3RFdmFsVW5ldmFsdWF0ZWQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDb25zdEV2YWxVbmV2YWx1YXRlZCIsCiAgICBtZXNzYWdlOiByIiIiQ291bGQgbm90IGV2YWx1YXRlIGNvbnN0YW50IGV4cHJlc3Npb24uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcgc3RyaW5nLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBzdHJpbmcyKT4gdGVtcGxhdGVDb25zdEV2YWxaZXJvRGl2aXNvciA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiQmluYXJ5IG9wZXJhdG9yICcjc3RyaW5nJyBvbiAnI3N0cmluZzInIHJlcXVpcmVzIG5vbi16ZXJvIGRpdmlzb3IsIGJ1dCBkaXZpc29yIHdhcyAnMCcuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25zdEV2YWxaZXJvRGl2aXNvcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPgogICAgY29kZUNvbnN0RXZhbFplcm9EaXZpc29yID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+KAogICAgICAgICJDb25zdEV2YWxaZXJvRGl2aXNvciIsIHRlbXBsYXRlQ29uc3RFdmFsWmVyb0Rpdmlzb3IsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTlNUX0VWQUxfVEhST1dTX0lEQlpFIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbFplcm9EaXZpc29yKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICBpZiAoc3RyaW5nMi5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbnN0RXZhbFplcm9EaXZpc29yLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiQmluYXJ5IG9wZXJhdG9yICcke3N0cmluZ30nIG9uICcke3N0cmluZzJ9JyByZXF1aXJlcyBub24temVybyBkaXZpc29yLCBidXQgZGl2aXNvciB3YXMgJzAnLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZywgJ3N0cmluZzInOiBzdHJpbmcyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbnN0RmFjdG9yeSA9IG1lc3NhZ2VDb25zdEZhY3Rvcnk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29uc3RGYWN0b3J5ID0gY29uc3QgTWVzc2FnZUNvZGUoIkNvbnN0RmFjdG9yeSIsCiAgICBpbmRleDogNjIsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJPbmx5IHJlZGlyZWN0aW5nIGZhY3RvcnkgY29uc3RydWN0b3JzIGNhbiBiZSBkZWNsYXJlZCB0byBiZSAnY29uc3QnLiIiIiwKICAgIHRpcDoKICAgICAgICByIiIiVHJ5IHJlbW92aW5nIHRoZSAnY29uc3QnIGtleXdvcmQsIG9yIHJlcGxhY2luZyB0aGUgYm9keSB3aXRoICc9JyBmb2xsb3dlZCBieSBhIHZhbGlkIHRhcmdldC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29uc3RGYWN0b3J5UmVkaXJlY3Rpb25Ub05vbkNvbnN0ID0KICAgIG1lc3NhZ2VDb25zdEZhY3RvcnlSZWRpcmVjdGlvblRvTm9uQ29uc3Q7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29uc3RGYWN0b3J5UmVkaXJlY3Rpb25Ub05vbkNvbnN0ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ29uc3RGYWN0b3J5UmVkaXJlY3Rpb25Ub05vbkNvbnN0IiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJSRURJUkVDVF9UT19OT05fQ09OU1RfQ09OU1RSVUNUT1IiXSwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIkNvbnN0YW50IGZhY3RvcnkgY29uc3RydWN0b3IgY2FuJ3QgZGVsZWdhdGUgdG8gYSBub24tY29uc3RhbnQgY29uc3RydWN0b3IuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgcmVkaXJlY3RpbmcgdG8gYSBkaWZmZXJlbnQgY29uc3RydWN0b3Igb3IgbWFya2luZyB0aGUgdGFyZ2V0IGNvbnN0cnVjdG9yICdjb25zdCcuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZSk+IHRlbXBsYXRlQ29uc3RGaWVsZFdpdGhvdXRJbml0aWFsaXplciA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlRoZSBjb25zdCB2YXJpYWJsZSAnI25hbWUnIG11c3QgYmUgaW5pdGlhbGl6ZWQuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBhZGRpbmcgYW4gaW5pdGlhbGl6ZXIgKCc9IDxleHByZXNzaW9uPicpIHRvIHRoZSBkZWNsYXJhdGlvbi4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NvbnN0RmllbGRXaXRob3V0SW5pdGlhbGl6ZXIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUNvbnN0RmllbGRXaXRob3V0SW5pdGlhbGl6ZXIgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkNvbnN0RmllbGRXaXRob3V0SW5pdGlhbGl6ZXIiLCB0ZW1wbGF0ZUNvbnN0RmllbGRXaXRob3V0SW5pdGlhbGl6ZXIsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTlNUX05PVF9JTklUSUFMSVpFRCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25zdEZpZWxkV2l0aG91dEluaXRpYWxpemVyKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29uc3RGaWVsZFdpdGhvdXRJbml0aWFsaXplciwKICAgICAgbWVzc2FnZTogIiIiVGhlIGNvbnN0IHZhcmlhYmxlICcke25hbWV9JyBtdXN0IGJlIGluaXRpYWxpemVkLiIiIiwKICAgICAgdGlwOgogICAgICAgICAgIiIiVHJ5IGFkZGluZyBhbiBpbml0aWFsaXplciAoJz0gPGV4cHJlc3Npb24+JykgdG8gdGhlIGRlY2xhcmF0aW9uLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbnN0SW5zdGFuY2VGaWVsZCA9IG1lc3NhZ2VDb25zdEluc3RhbmNlRmllbGQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29uc3RJbnN0YW5jZUZpZWxkID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ29uc3RJbnN0YW5jZUZpZWxkIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05TVF9JTlNUQU5DRV9GSUVMRCJdLAogICAgbWVzc2FnZTogciIiIk9ubHkgc3RhdGljIGZpZWxkcyBjYW4gYmUgZGVjbGFyZWQgYXMgY29uc3QuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgdXNpbmcgJ2ZpbmFsJyBpbnN0ZWFkIG9mICdjb25zdCcsIG9yIGFkZGluZyB0aGUga2V5d29yZCAnc3RhdGljJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29uc3RNZXRob2QgPSBtZXNzYWdlQ29uc3RNZXRob2Q7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29uc3RNZXRob2QgPSBjb25zdCBNZXNzYWdlQ29kZSgiQ29uc3RNZXRob2QiLAogICAgaW5kZXg6IDYzLAogICAgbWVzc2FnZToKICAgICAgICByIiIiR2V0dGVycywgc2V0dGVycyBhbmQgbWV0aG9kcyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSAnY29uc3QnLiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyB0aGUgJ2NvbnN0JyBrZXl3b3JkLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb25zdHJ1Y3RvckN5Y2xpYyA9IG1lc3NhZ2VDb25zdHJ1Y3RvckN5Y2xpYzsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdHJ1Y3RvckN5Y2xpYyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkNvbnN0cnVjdG9yQ3ljbGljIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJSRUNVUlNJVkVfQ09OU1RSVUNUT1JfUkVESVJFQ1QiXSwKICAgIG1lc3NhZ2U6IHIiIiJSZWRpcmVjdGluZyBjb25zdHJ1Y3RvcnMgY2FuJ3QgYmUgY3ljbGljLiIiIiwKICAgIHRpcDoKICAgICAgICByIiIiVHJ5IHRvIGhhdmUgYWxsIGNvbnN0cnVjdG9ycyBldmVudHVhbGx5IHJlZGlyZWN0IHRvIGEgbm9uLXJlZGlyZWN0aW5nIGNvbnN0cnVjdG9yLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVDb25zdHJ1Y3Rvck5vdEZvdW5kID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJDb3VsZG4ndCBmaW5kIGNvbnN0cnVjdG9yICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uc3RydWN0b3JOb3RGb3VuZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlQ29uc3RydWN0b3JOb3RGb3VuZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiQ29uc3RydWN0b3JOb3RGb3VuZCIsIHRlbXBsYXRlQ29uc3RydWN0b3JOb3RGb3VuZCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQ09OU1RSVUNUT1JfTk9UX0ZPVU5EIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ29uc3RydWN0b3JOb3RGb3VuZChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbnN0cnVjdG9yTm90Rm91bmQsCiAgICAgIG1lc3NhZ2U6ICIiIkNvdWxkbid0IGZpbmQgY29uc3RydWN0b3IgJyR7bmFtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbnN0cnVjdG9yTm90U3luYyA9IG1lc3NhZ2VDb25zdHJ1Y3Rvck5vdFN5bmM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29uc3RydWN0b3JOb3RTeW5jID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ29uc3RydWN0b3JOb3RTeW5jIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJOT05fU1lOQ19DT05TVFJVQ1RPUiJdLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQ29uc3RydWN0b3IgYm9kaWVzIGNhbid0IHVzZSAnYXN5bmMnLCAnYXN5bmMqJywgb3IgJ3N5bmMqJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29uc3RydWN0b3JXaXRoUmV0dXJuVHlwZSA9CiAgICBtZXNzYWdlQ29uc3RydWN0b3JXaXRoUmV0dXJuVHlwZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdHJ1Y3RvcldpdGhSZXR1cm5UeXBlID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ29uc3RydWN0b3JXaXRoUmV0dXJuVHlwZSIsCiAgICBpbmRleDogNTUsCiAgICBtZXNzYWdlOiByIiIiQ29uc3RydWN0b3JzIGNhbid0IGhhdmUgYSByZXR1cm4gdHlwZS4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgdGhlIHJldHVybiB0eXBlLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb25zdHJ1Y3RvcldpdGhUeXBlQXJndW1lbnRzID0KICAgIG1lc3NhZ2VDb25zdHJ1Y3RvcldpdGhUeXBlQXJndW1lbnRzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvbnN0cnVjdG9yV2l0aFR5cGVBcmd1bWVudHMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDb25zdHJ1Y3RvcldpdGhUeXBlQXJndW1lbnRzIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJXUk9OR19OVU1CRVJfT0ZfVFlQRV9BUkdVTUVOVFNfQ09OU1RSVUNUT1IiXSwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIkEgY29uc3RydWN0b3IgaW52b2NhdGlvbiBjYW4ndCBoYXZlIHR5cGUgYXJndW1lbnRzIG9uIHRoZSBjb25zdHJ1Y3RvciBuYW1lLiIiIiwKICAgIHRpcDogciIiIlRyeSB0byBwbGFjZSB0aGUgdHlwZSBhcmd1bWVudHMgb24gdGhlIGNsYXNzIG5hbWUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbnN0cnVjdG9yV2l0aFR5cGVQYXJhbWV0ZXJzID0KICAgIG1lc3NhZ2VDb25zdHJ1Y3RvcldpdGhUeXBlUGFyYW1ldGVyczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdHJ1Y3RvcldpdGhUeXBlUGFyYW1ldGVycyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkNvbnN0cnVjdG9yV2l0aFR5cGVQYXJhbWV0ZXJzIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJUWVBFX1BBUkFNRVRFUl9PTl9DT05TVFJVQ1RPUiJdLAogICAgbWVzc2FnZTogciIiIkNvbnN0cnVjdG9ycyBjYW4ndCBoYXZlIHR5cGUgcGFyYW1ldGVycy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29uc3RydWN0b3JXaXRoV3JvbmdOYW1lID0gbWVzc2FnZUNvbnN0cnVjdG9yV2l0aFdyb25nTmFtZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdHJ1Y3RvcldpdGhXcm9uZ05hbWUgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDb25zdHJ1Y3RvcldpdGhXcm9uZ05hbWUiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfQ09OU1RSVUNUT1JfTkFNRSJdLAogICAgbWVzc2FnZToKICAgICAgICByIiIiVGhlIG5hbWUgb2YgYSBjb25zdHJ1Y3RvciBtdXN0IG1hdGNoIHRoZSBuYW1lIG9mIHRoZSBlbmNsb3NpbmcgY2xhc3MuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVDb25zdHJ1Y3RvcldpdGhXcm9uZ05hbWVDb250ZXh0ID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJUaGUgbmFtZSBvZiB0aGUgZW5jbG9zaW5nIGNsYXNzIGlzICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uc3RydWN0b3JXaXRoV3JvbmdOYW1lQ29udGV4dCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlQ29uc3RydWN0b3JXaXRoV3JvbmdOYW1lQ29udGV4dCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigiQ29uc3RydWN0b3JXaXRoV3JvbmdOYW1lQ29udGV4dCIsCiAgICAgICAgdGVtcGxhdGVDb25zdHJ1Y3RvcldpdGhXcm9uZ05hbWVDb250ZXh0LAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25zdHJ1Y3RvcldpdGhXcm9uZ05hbWVDb250ZXh0KFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29uc3RydWN0b3JXaXRoV3JvbmdOYW1lQ29udGV4dCwKICAgICAgbWVzc2FnZTogIiIiVGhlIG5hbWUgb2YgdGhlIGVuY2xvc2luZyBjbGFzcyBpcyAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29udGludWVMYWJlbE5vdFRhcmdldCA9IG1lc3NhZ2VDb250aW51ZUxhYmVsTm90VGFyZ2V0OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvbnRpbnVlTGFiZWxOb3RUYXJnZXQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDb250aW51ZUxhYmVsTm90VGFyZ2V0IiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJMQUJFTF9VTkRFRklORUQiXSwKICAgIG1lc3NhZ2U6IHIiIiJUYXJnZXQgb2YgY29udGludWUgbXVzdCBiZSBhIGxhYmVsLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb250aW51ZU91dHNpZGVPZkxvb3AgPSBtZXNzYWdlQ29udGludWVPdXRzaWRlT2ZMb29wOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvbnRpbnVlT3V0c2lkZU9mTG9vcCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkNvbnRpbnVlT3V0c2lkZU9mTG9vcCIsCiAgICBpbmRleDogMiwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIkEgY29udGludWUgc3RhdGVtZW50IGNhbid0IGJlIHVzZWQgb3V0c2lkZSBvZiBhIGxvb3Agb3Igc3dpdGNoIHN0YXRlbWVudC4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgdGhlIGNvbnRpbnVlIHN0YXRlbWVudC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUNvbnRpbnVlVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJDYW4ndCBjb250aW51ZSBhdCAnI25hbWUnIGluIGEgZGlmZmVyZW50IGZ1bmN0aW9uLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NvbnRpbnVlVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVDb250aW51ZVRhcmdldE91dHNpZGVGdW5jdGlvbiA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiQ29udGludWVUYXJnZXRPdXRzaWRlRnVuY3Rpb24iLCB0ZW1wbGF0ZUNvbnRpbnVlVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJMQUJFTF9JTl9PVVRFUl9TQ09QRSJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb250aW51ZVRhcmdldE91dHNpZGVGdW5jdGlvbihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbnRpbnVlVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uLAogICAgICBtZXNzYWdlOiAiIiJDYW4ndCBjb250aW51ZSBhdCAnJHtuYW1lfScgaW4gYSBkaWZmZXJlbnQgZnVuY3Rpb24uIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29udGludWVXaXRob3V0TGFiZWxJbkNhc2UgPQogICAgbWVzc2FnZUNvbnRpbnVlV2l0aG91dExhYmVsSW5DYXNlOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvbnRpbnVlV2l0aG91dExhYmVsSW5DYXNlID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ29udGludWVXaXRob3V0TGFiZWxJbkNhc2UiLAogICAgaW5kZXg6IDY0LAogICAgbWVzc2FnZToKICAgICAgICByIiIiQSBjb250aW51ZSBzdGF0ZW1lbnQgaW4gYSBzd2l0Y2ggc3RhdGVtZW50IG11c3QgaGF2ZSBhIGxhYmVsIGFzIGEgdGFyZ2V0LiIiIiwKICAgIHRpcDoKICAgICAgICByIiIiVHJ5IGFkZGluZyBhIGxhYmVsIGFzc29jaWF0ZWQgd2l0aCBvbmUgb2YgdGhlIGNhc2UgY2xhdXNlcyB0byB0aGUgY29udGludWUgc3RhdGVtZW50LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKT4KICAgIHRlbXBsYXRlQ291bGROb3RQYXJzZVVyaSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ291bGRuJ3QgcGFyc2UgVVJJICcjc3RyaW5nJzoKICAjc3RyaW5nMi4iIiIsIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ291bGROb3RQYXJzZVVyaSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPgogICAgY29kZUNvdWxkTm90UGFyc2VVcmkgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKT4oCiAgIkNvdWxkTm90UGFyc2VVcmkiLAogIHRlbXBsYXRlQ291bGROb3RQYXJzZVVyaSwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb3VsZE5vdFBhcnNlVXJpKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICBpZiAoc3RyaW5nMi5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvdWxkTm90UGFyc2VVcmksCiAgICAgIG1lc3NhZ2U6ICIiIkNvdWxkbid0IHBhcnNlIFVSSSAnJHtzdHJpbmd9JzoKICAke3N0cmluZzJ9LiIiIiwgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZywgJ3N0cmluZzInOiBzdHJpbmcyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvdmFyaWFudEFuZFN0YXRpYyA9IG1lc3NhZ2VDb3ZhcmlhbnRBbmRTdGF0aWM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ292YXJpYW50QW5kU3RhdGljID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ292YXJpYW50QW5kU3RhdGljIiwKICAgIGluZGV4OiA2NiwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIk1lbWJlcnMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgYm90aCAnY292YXJpYW50JyBhbmQgJ3N0YXRpYycuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nIGVpdGhlciB0aGUgJ2NvdmFyaWFudCcgb3IgJ3N0YXRpYycga2V5d29yZC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ292YXJpYW50TWVtYmVyID0gbWVzc2FnZUNvdmFyaWFudE1lbWJlcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb3ZhcmlhbnRNZW1iZXIgPSBjb25zdCBNZXNzYWdlQ29kZSgiQ292YXJpYW50TWVtYmVyIiwKICAgIGluZGV4OiA2NywKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIkdldHRlcnMsIHNldHRlcnMgYW5kIG1ldGhvZHMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgJ2NvdmFyaWFudCcuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nIHRoZSAnY292YXJpYW50JyBrZXl3b3JkLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIHN0cmluZyk+IHRlbXBsYXRlQ3ljbGVJblR5cGVWYXJpYWJsZXMgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgc3RyaW5nKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJUeXBlICcjbmFtZScgaXMgYSBib3VuZCBvZiBpdHNlbGYgdmlhICcjc3RyaW5nJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IGJyZWFraW5nIHRoZSBjeWNsZSBieSByZW1vdmluZyBhdCBsZWFzdCBvbiBvZiB0aGUgJ2V4dGVuZHMnIGNsYXVzZXMgaW4gdGhlIGN5Y2xlLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ3ljbGVJblR5cGVWYXJpYWJsZXMpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgc3RyaW5nKT4KICAgIGNvZGVDeWNsZUluVHlwZVZhcmlhYmxlcyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBzdHJpbmcpPigKICAgICAgICAiQ3ljbGVJblR5cGVWYXJpYWJsZXMiLCB0ZW1wbGF0ZUN5Y2xlSW5UeXBlVmFyaWFibGVzLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJUWVBFX1BBUkFNRVRFUl9TVVBFUlRZUEVfT0ZfSVRTX0JPVU5EIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0N5Y2xlSW5UeXBlVmFyaWFibGVzKFN0cmluZyBuYW1lLCBTdHJpbmcgc3RyaW5nKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDeWNsZUluVHlwZVZhcmlhYmxlcywKICAgICAgbWVzc2FnZTogIiIiVHlwZSAnJHtuYW1lfScgaXMgYSBib3VuZCBvZiBpdHNlbGYgdmlhICcke3N0cmluZ30nLiIiIiwKICAgICAgdGlwOgogICAgICAgICAgIiIiVHJ5IGJyZWFraW5nIHRoZSBjeWNsZSBieSByZW1vdmluZyBhdCBsZWFzdCBvbiBvZiB0aGUgJ2V4dGVuZHMnIGNsYXVzZXMgaW4gdGhlIGN5Y2xlLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAnc3RyaW5nJzogc3RyaW5nfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUN5Y2xpY0NsYXNzSGllcmFyY2h5ID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiInI25hbWUnIGlzIGEgc3VwZXJ0eXBlIG9mIGl0c2VsZi4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDeWNsaWNDbGFzc0hpZXJhcmNoeSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlQ3ljbGljQ2xhc3NIaWVyYXJjaHkgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkN5Y2xpY0NsYXNzSGllcmFyY2h5IiwgdGVtcGxhdGVDeWNsaWNDbGFzc0hpZXJhcmNoeSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiUkVDVVJTSVZFX0lOVEVSRkFDRV9JTkhFUklUQU5DRSJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDeWNsaWNDbGFzc0hpZXJhcmNoeShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUN5Y2xpY0NsYXNzSGllcmFyY2h5LAogICAgICBtZXNzYWdlOiAiIiInJHtuYW1lfScgaXMgYSBzdXBlcnR5cGUgb2YgaXRzZWxmLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVDeWNsaWNSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnMgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkN5Y2xpYyBkZWZpbml0aW9uIG9mIGZhY3RvcnkgJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDeWNsaWNSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnMpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIGNvZGVDeWNsaWNSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnMgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkN5Y2xpY1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9ycyIsCiAgICAgICAgdGVtcGxhdGVDeWNsaWNSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnMsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlJFQ1VSU0lWRV9GQUNUT1JZX1JFRElSRUNUIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0N5Y2xpY1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9ycyhTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUN5Y2xpY1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9ycywKICAgICAgbWVzc2FnZTogIiIiQ3ljbGljIGRlZmluaXRpb24gb2YgZmFjdG9yeSAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlQ3ljbGljVHlwZWRlZiA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiVGhlIHR5cGVkZWYgJyNuYW1lJyBoYXMgYSByZWZlcmVuY2UgdG8gaXRzZWxmLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0N5Y2xpY1R5cGVkZWYpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUN5Y2xpY1R5cGVkZWYgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkN5Y2xpY1R5cGVkZWYiLCB0ZW1wbGF0ZUN5Y2xpY1R5cGVkZWYsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlRZUEVfQUxJQVNfQ0FOTk9UX1JFRkVSRU5DRV9JVFNFTEYiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ3ljbGljVHlwZWRlZihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUN5Y2xpY1R5cGVkZWYsCiAgICAgIG1lc3NhZ2U6ICIiIlRoZSB0eXBlZGVmICcke25hbWV9JyBoYXMgYSByZWZlcmVuY2UgdG8gaXRzZWxmLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZURlY2xhcmVkTWVtYmVyQ29uZmxpY3RzV2l0aEluaGVyaXRlZE1lbWJlciA9CiAgICBtZXNzYWdlRGVjbGFyZWRNZW1iZXJDb25mbGljdHNXaXRoSW5oZXJpdGVkTWVtYmVyOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZURlY2xhcmVkTWVtYmVyQ29uZmxpY3RzV2l0aEluaGVyaXRlZE1lbWJlciA9CiAgICBjb25zdCBNZXNzYWdlQ29kZSgiRGVjbGFyZWRNZW1iZXJDb25mbGljdHNXaXRoSW5oZXJpdGVkTWVtYmVyIiwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiREVDTEFSRURfTUVNQkVSX0NPTkZMSUNUU19XSVRIX0lOSEVSSVRFRCJdLAogICAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAgIHIiIiJDYW4ndCBkZWNsYXJlIGEgbWVtYmVyIHRoYXQgY29uZmxpY3RzIHdpdGggYW4gaW5oZXJpdGVkIG9uZS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRGVjbGFyZWRNZW1iZXJDb25mbGljdHNXaXRoSW5oZXJpdGVkTWVtYmVyQ2F1c2UgPQogICAgbWVzc2FnZURlY2xhcmVkTWVtYmVyQ29uZmxpY3RzV2l0aEluaGVyaXRlZE1lbWJlckNhdXNlOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZURlY2xhcmVkTWVtYmVyQ29uZmxpY3RzV2l0aEluaGVyaXRlZE1lbWJlckNhdXNlID0KICAgIGNvbnN0IE1lc3NhZ2VDb2RlKCJEZWNsYXJlZE1lbWJlckNvbmZsaWN0c1dpdGhJbmhlcml0ZWRNZW1iZXJDYXVzZSIsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQsCiAgICAgICAgbWVzc2FnZTogciIiIlRoaXMgaXMgdGhlIGluaGVyaXRlZCBtZW1iZXIuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVEZWZhdWx0VmFsdWVJblJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJDYW4ndCBoYXZlIGEgZGVmYXVsdCB2YWx1ZSBoZXJlIGJlY2F1c2UgYW55IGRlZmF1bHQgdmFsdWVzIG9mICcjbmFtZScgd291bGQgYmUgdXNlZCBpbnN0ZWFkLiIiIiwKICAgICAgICB0aXBUZW1wbGF0ZTogciIiIlRyeSByZW1vdmluZyB0aGUgZGVmYXVsdCB2YWx1ZS4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czoKICAgICAgICAgICAgX3dpdGhBcmd1bWVudHNEZWZhdWx0VmFsdWVJblJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICBjb2RlRGVmYXVsdFZhbHVlSW5SZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiRGVmYXVsdFZhbHVlSW5SZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvciIsCiAgICAgICAgdGVtcGxhdGVEZWZhdWx0VmFsdWVJblJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WwogICAgICAiREVGQVVMVF9WQUxVRV9JTl9SRURJUkVDVElOR19GQUNUT1JZX0NPTlNUUlVDVE9SIgogICAgXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRGVmYXVsdFZhbHVlSW5SZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZURlZmF1bHRWYWx1ZUluUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJDYW4ndCBoYXZlIGEgZGVmYXVsdCB2YWx1ZSBoZXJlIGJlY2F1c2UgYW55IGRlZmF1bHQgdmFsdWVzIG9mICcke25hbWV9JyB3b3VsZCBiZSB1c2VkIGluc3RlYWQuIiIiLAogICAgICB0aXA6ICIiIlRyeSByZW1vdmluZyB0aGUgZGVmYXVsdCB2YWx1ZS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVEZWZlcnJlZEFmdGVyUHJlZml4ID0gbWVzc2FnZURlZmVycmVkQWZ0ZXJQcmVmaXg7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRGVmZXJyZWRBZnRlclByZWZpeCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkRlZmVycmVkQWZ0ZXJQcmVmaXgiLAogICAgaW5kZXg6IDY4LAogICAgbWVzc2FnZToKICAgICAgICByIiIiVGhlIGRlZmVycmVkIGtleXdvcmQgc2hvdWxkIGNvbWUgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBwcmVmaXggKCdhcycgY2xhdXNlKS4iIiIsCiAgICB0aXA6IHIiIiJUcnkgbW92aW5nIHRoZSBkZWZlcnJlZCBrZXl3b3JkIGJlZm9yZSB0aGUgcHJlZml4LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUpPiB0ZW1wbGF0ZURlZmVycmVkUHJlZml4RHVwbGljYXRlZCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiQ2FuJ3QgdXNlIHRoZSBuYW1lICcjbmFtZScgZm9yIGEgZGVmZXJyZWQgbGlicmFyeSwgYXMgdGhlIG5hbWUgaXMgdXNlZCBlbHNld2hlcmUuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNEZWZlcnJlZFByZWZpeER1cGxpY2F0ZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZURlZmVycmVkUHJlZml4RHVwbGljYXRlZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiRGVmZXJyZWRQcmVmaXhEdXBsaWNhdGVkIiwgdGVtcGxhdGVEZWZlcnJlZFByZWZpeER1cGxpY2F0ZWQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlNIQVJFRF9ERUZFUlJFRF9QUkVGSVgiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRGVmZXJyZWRQcmVmaXhEdXBsaWNhdGVkKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRGVmZXJyZWRQcmVmaXhEdXBsaWNhdGVkLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiQ2FuJ3QgdXNlIHRoZSBuYW1lICcke25hbWV9JyBmb3IgYSBkZWZlcnJlZCBsaWJyYXJ5LCBhcyB0aGUgbmFtZSBpcyB1c2VkIGVsc2V3aGVyZS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlRGVmZXJyZWRQcmVmaXhEdXBsaWNhdGVkQ2F1c2UgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIicjbmFtZScgaXMgdXNlZCBoZXJlLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0RlZmVycmVkUHJlZml4RHVwbGljYXRlZENhdXNlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVEZWZlcnJlZFByZWZpeER1cGxpY2F0ZWRDYXVzZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiRGVmZXJyZWRQcmVmaXhEdXBsaWNhdGVkQ2F1c2UiLCB0ZW1wbGF0ZURlZmVycmVkUHJlZml4RHVwbGljYXRlZENhdXNlLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEZWZlcnJlZFByZWZpeER1cGxpY2F0ZWRDYXVzZShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZURlZmVycmVkUHJlZml4RHVwbGljYXRlZENhdXNlLAogICAgICBtZXNzYWdlOiAiIiInJHtuYW1lfScgaXMgdXNlZCBoZXJlLiIiIiwgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBEYXJ0VHlwZSBfdHlwZSwKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZSk+IHRlbXBsYXRlRGVmZXJyZWRUeXBlQW5ub3RhdGlvbiA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIFN0cmluZyBuYW1lKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSB0eXBlICcjdHlwZScgaXMgZGVmZXJyZWQgbG9hZGVkIHZpYSBwcmVmaXggJyNuYW1lJyBhbmQgY2FuJ3QgYmUgdXNlZCBhcyBhIHR5cGUgYW5ub3RhdGlvbi4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IHJlbW92aW5nICdkZWZlcnJlZCcgZnJvbSB0aGUgaW1wb3J0IG9mICcjbmFtZScgb3IgdXNlIGEgc3VwZXJ0eXBlIG9mICcjdHlwZScgdGhhdCBpc24ndCBkZWZlcnJlZC4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0RlZmVycmVkVHlwZUFubm90YXRpb24pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBTdHJpbmcgbmFtZSk+CiAgICBjb2RlRGVmZXJyZWRUeXBlQW5ub3RhdGlvbiA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkRlZmVycmVkVHlwZUFubm90YXRpb24iLCB0ZW1wbGF0ZURlZmVycmVkVHlwZUFubm90YXRpb24sCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlRZUEVfQU5OT1RBVElPTl9ERUZFUlJFRF9DTEFTUyJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0RlZmVycmVkVHlwZUFubm90YXRpb24oRGFydFR5cGUgX3R5cGUsIFN0cmluZyBuYW1lKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZURlZmVycmVkVHlwZUFubm90YXRpb24sCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgdHlwZSAnJHt0eXBlfScgaXMgZGVmZXJyZWQgbG9hZGVkIHZpYSBwcmVmaXggJyR7bmFtZX0nIGFuZCBjYW4ndCBiZSB1c2VkIGFzIGEgdHlwZSBhbm5vdGF0aW9uLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgdGlwOiAiIiJUcnkgcmVtb3ZpbmcgJ2RlZmVycmVkJyBmcm9tIHRoZSBpbXBvcnQgb2YgJyR7bmFtZX0nIG9yIHVzZSBhIHN1cGVydHlwZSBvZiAnJHt0eXBlfScgdGhhdCBpc24ndCBkZWZlcnJlZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGUsICduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICBpbnQgY291bnQsIGludCBjb3VudDIsIG51bSBfbnVtMSwgbnVtIF9udW0yLCBudW0gX251bTMpPgogICAgdGVtcGxhdGVEaWxsT3V0bGluZVN1bW1hcnkgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICAgICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICAgICAgICAgIGludCBjb3VudCwgaW50IGNvdW50MiwgbnVtIF9udW0xLCBudW0gX251bTIsIG51bSBfbnVtMyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkluZGV4ZWQgI2NvdW50IGxpYnJhcmllcyAoI2NvdW50MiBieXRlcykgaW4gI251bTElLjNtcywgdGhhdCBpcywKI251bTIlMTIuMyBieXRlcy9tcywgYW5kCiNudW0zJTEyLjMgbXMvbGlicmFyaWVzLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0RpbGxPdXRsaW5lU3VtbWFyeSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPAogICAgTWVzc2FnZSBGdW5jdGlvbihpbnQgY291bnQsIGludCBjb3VudDIsIG51bSBfbnVtMSwgbnVtIF9udW0yLAogICAgICAgIG51bSBfbnVtMyk+IGNvZGVEaWxsT3V0bGluZVN1bW1hcnkgPSBjb25zdCBDb2RlPAogICAgTWVzc2FnZSBGdW5jdGlvbihpbnQgY291bnQsIGludCBjb3VudDIsIG51bSBfbnVtMSwgbnVtIF9udW0yLCBudW0gX251bTMpPigKICAiRGlsbE91dGxpbmVTdW1tYXJ5IiwKICB0ZW1wbGF0ZURpbGxPdXRsaW5lU3VtbWFyeSwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEaWxsT3V0bGluZVN1bW1hcnkoCiAgICBpbnQgY291bnQsIGludCBjb3VudDIsIG51bSBfbnVtMSwgbnVtIF9udW0yLCBudW0gX251bTMpIHsKICBpZiAoY291bnQgPT0gbnVsbCkgdGhyb3cgJ05vIGNvdW50IHByb3ZpZGVkJzsKICBpZiAoY291bnQyID09IG51bGwpIHRocm93ICdObyBjb3VudCBwcm92aWRlZCc7CiAgaWYgKF9udW0xID09IG51bGwpIHRocm93ICdObyBudW1iZXIgcHJvdmlkZWQnOwogIFN0cmluZyBudW0xID0gX251bTEudG9TdHJpbmdBc0ZpeGVkKDMpOwogIGlmIChfbnVtMiA9PSBudWxsKSB0aHJvdyAnTm8gbnVtYmVyIHByb3ZpZGVkJzsKICBTdHJpbmcgbnVtMiA9IF9udW0yLnRvU3RyaW5nQXNGaXhlZCgzKS5wYWRMZWZ0KDEyKTsKICBpZiAoX251bTMgPT0gbnVsbCkgdGhyb3cgJ05vIG51bWJlciBwcm92aWRlZCc7CiAgU3RyaW5nIG51bTMgPSBfbnVtMy50b1N0cmluZ0FzRml4ZWQoMykucGFkTGVmdCgxMik7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVEaWxsT3V0bGluZVN1bW1hcnksCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJJbmRleGVkICR7Y291bnR9IGxpYnJhcmllcyAoJHtjb3VudDJ9IGJ5dGVzKSBpbiAke251bTF9bXMsIHRoYXQgaXMsCiR7bnVtMn0gYnl0ZXMvbXMsIGFuZAoke251bTN9IG1zL2xpYnJhcmllcy4iIiIsCiAgICAgIGFyZ3VtZW50czogewogICAgICAgICdjb3VudCc6IGNvdW50LAogICAgICAgICdjb3VudDInOiBjb3VudDIsCiAgICAgICAgJ251bTEnOiBfbnVtMSwKICAgICAgICAnbnVtMic6IF9udW0yLAogICAgICAgICdudW0zJzogX251bTMKICAgICAgfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZSk+IHRlbXBsYXRlRGlyZWN0Q3ljbGVJblR5cGVWYXJpYWJsZXMgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJUeXBlICcjbmFtZScgY2FuJ3QgdXNlIGl0c2VsZiBhcyBhIGJvdW5kLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgYnJlYWtpbmcgdGhlIGN5Y2xlIGJ5IHJlbW92aW5nIGF0IGxlYXN0IG9uIG9mIHRoZSAnZXh0ZW5kcycgY2xhdXNlcyBpbiB0aGUgY3ljbGUuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNEaXJlY3RDeWNsZUluVHlwZVZhcmlhYmxlcyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlRGlyZWN0Q3ljbGVJblR5cGVWYXJpYWJsZXMgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkRpcmVjdEN5Y2xlSW5UeXBlVmFyaWFibGVzIiwgdGVtcGxhdGVEaXJlY3RDeWNsZUluVHlwZVZhcmlhYmxlcywKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVFlQRV9QQVJBTUVURVJfU1VQRVJUWVBFX09GX0lUU19CT1VORCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEaXJlY3RDeWNsZUluVHlwZVZhcmlhYmxlcyhTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZURpcmVjdEN5Y2xlSW5UeXBlVmFyaWFibGVzLAogICAgICBtZXNzYWdlOiAiIiJUeXBlICcke25hbWV9JyBjYW4ndCB1c2UgaXRzZWxmIGFzIGEgYm91bmQuIiIiLAogICAgICB0aXA6CiAgICAgICAgICAiIiJUcnkgYnJlYWtpbmcgdGhlIGN5Y2xlIGJ5IHJlbW92aW5nIGF0IGxlYXN0IG9uIG9mIHRoZSAnZXh0ZW5kcycgY2xhdXNlcyBpbiB0aGUgY3ljbGUuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRGlyZWN0aXZlQWZ0ZXJEZWNsYXJhdGlvbiA9CiAgICBtZXNzYWdlRGlyZWN0aXZlQWZ0ZXJEZWNsYXJhdGlvbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VEaXJlY3RpdmVBZnRlckRlY2xhcmF0aW9uID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiRGlyZWN0aXZlQWZ0ZXJEZWNsYXJhdGlvbiIsCiAgICBpbmRleDogNjksCiAgICBtZXNzYWdlOiByIiIiRGlyZWN0aXZlcyBtdXN0IGFwcGVhciBiZWZvcmUgYW55IGRlY2xhcmF0aW9ucy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgbW92aW5nIHRoZSBkaXJlY3RpdmUgYmVmb3JlIGFueSBkZWNsYXJhdGlvbnMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUR1cGxpY2F0ZURlZmVycmVkID0gbWVzc2FnZUR1cGxpY2F0ZURlZmVycmVkOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUR1cGxpY2F0ZURlZmVycmVkID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiRHVwbGljYXRlRGVmZXJyZWQiLAogICAgaW5kZXg6IDcxLAogICAgbWVzc2FnZTogciIiIkFuIGltcG9ydCBkaXJlY3RpdmUgY2FuIG9ubHkgaGF2ZSBvbmUgJ2RlZmVycmVkJyBrZXl3b3JkLiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyBhbGwgYnV0IG9uZSAnZGVmZXJyZWQnIGtleXdvcmQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVEdXBsaWNhdGVMYWJlbEluU3dpdGNoU3RhdGVtZW50ID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJUaGUgbGFiZWwgJyNuYW1lJyB3YXMgYWxyZWFkeSB1c2VkIGluIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4iIiIsCiAgICAgICAgdGlwVGVtcGxhdGU6IHIiIiJUcnkgY2hvb3NpbmcgYSBkaWZmZXJlbnQgbmFtZSBmb3IgdGhpcyBsYWJlbC4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVMYWJlbEluU3dpdGNoU3RhdGVtZW50KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVEdXBsaWNhdGVMYWJlbEluU3dpdGNoU3RhdGVtZW50ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KCJEdXBsaWNhdGVMYWJlbEluU3dpdGNoU3RhdGVtZW50IiwKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZUxhYmVsSW5Td2l0Y2hTdGF0ZW1lbnQsCiAgICAgICAgaW5kZXg6IDcyKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVMYWJlbEluU3dpdGNoU3RhdGVtZW50KFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRHVwbGljYXRlTGFiZWxJblN3aXRjaFN0YXRlbWVudCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBsYWJlbCAnJHtuYW1lfScgd2FzIGFscmVhZHkgdXNlZCBpbiB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuIiIiLAogICAgICB0aXA6ICIiIlRyeSBjaG9vc2luZyBhIGRpZmZlcmVudCBuYW1lIGZvciB0aGlzIGxhYmVsLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUR1cGxpY2F0ZVByZWZpeCA9IG1lc3NhZ2VEdXBsaWNhdGVQcmVmaXg7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRHVwbGljYXRlUHJlZml4ID0gY29uc3QgTWVzc2FnZUNvZGUoIkR1cGxpY2F0ZVByZWZpeCIsCiAgICBpbmRleDogNzMsCiAgICBtZXNzYWdlOiByIiIiQW4gaW1wb3J0IGRpcmVjdGl2ZSBjYW4gb25seSBoYXZlIG9uZSBwcmVmaXggKCdhcycgY2xhdXNlKS4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgYWxsIGJ1dCBvbmUgcHJlZml4LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb24gPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIicjbmFtZScgaXMgYWxyZWFkeSBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWREZWNsYXJhdGlvbik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlRHVwbGljYXRlZERlY2xhcmF0aW9uID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJEdXBsaWNhdGVkRGVjbGFyYXRpb24iLCB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvbiwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRFVQTElDQVRFX0RFRklOSVRJT04iXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRHVwbGljYXRlZERlY2xhcmF0aW9uKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRHVwbGljYXRlZERlY2xhcmF0aW9uLAogICAgICBtZXNzYWdlOiAiIiInJHtuYW1lfScgaXMgYWxyZWFkeSBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25DYXVzZSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiUHJldmlvdXMgZGVjbGFyYXRpb24gb2YgJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkRGVjbGFyYXRpb25DYXVzZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlRHVwbGljYXRlZERlY2xhcmF0aW9uQ2F1c2UgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkR1cGxpY2F0ZWREZWNsYXJhdGlvbkNhdXNlIiwgdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25DYXVzZSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRHVwbGljYXRlZERlY2xhcmF0aW9uQ2F1c2UoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVEdXBsaWNhdGVkRGVjbGFyYXRpb25DYXVzZSwKICAgICAgbWVzc2FnZTogIiIiUHJldmlvdXMgZGVjbGFyYXRpb24gb2YgJyR7bmFtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZSk+IHRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uU3ludGhldGljQ2F1c2UgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlByZXZpb3VzIGRlY2xhcmF0aW9uIG9mICcjbmFtZScgaXMgaW1wbGllZCBieSB0aGlzIGRlZmluaXRpb24uIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkRGVjbGFyYXRpb25TeW50aGV0aWNDYXVzZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgY29kZUR1cGxpY2F0ZWREZWNsYXJhdGlvblN5bnRoZXRpY0NhdXNlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJEdXBsaWNhdGVkRGVjbGFyYXRpb25TeW50aGV0aWNDYXVzZSIsCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25TeW50aGV0aWNDYXVzZSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRHVwbGljYXRlZERlY2xhcmF0aW9uU3ludGhldGljQ2F1c2UoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVEdXBsaWNhdGVkRGVjbGFyYXRpb25TeW50aGV0aWNDYXVzZSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlByZXZpb3VzIGRlY2xhcmF0aW9uIG9mICcke25hbWV9JyBpcyBpbXBsaWVkIGJ5IHRoaXMgZGVmaW5pdGlvbi4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25Vc2UgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkNhbid0IHVzZSAnI25hbWUnIGJlY2F1c2UgaXQgaXMgZGVjbGFyZWQgbW9yZSB0aGFuIG9uY2UuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRHVwbGljYXRlZERlY2xhcmF0aW9uVXNlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVEdXBsaWNhdGVkRGVjbGFyYXRpb25Vc2UgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgIkR1cGxpY2F0ZWREZWNsYXJhdGlvblVzZSIsCiAgdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25Vc2UsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRHVwbGljYXRlZERlY2xhcmF0aW9uVXNlKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRHVwbGljYXRlZERlY2xhcmF0aW9uVXNlLAogICAgICBtZXNzYWdlOiAiIiJDYW4ndCB1c2UgJyR7bmFtZX0nIGJlY2F1c2UgaXQgaXMgZGVjbGFyZWQgbW9yZSB0aGFuIG9uY2UuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+CiAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWRFeHBvcnQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIicjbmFtZScgaXMgZXhwb3J0ZWQgZnJvbSBib3RoICcjdXJpJyBhbmQgJyN1cmkyJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkRXhwb3J0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+CiAgICBjb2RlRHVwbGljYXRlZEV4cG9ydCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pPigKICAgICAgICAiRHVwbGljYXRlZEV4cG9ydCIsIHRlbXBsYXRlRHVwbGljYXRlZEV4cG9ydCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQU1CSUdVT1VTX0VYUE9SVCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkRXhwb3J0KFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIFN0cmluZyB1cmkyID0gcmVsYXRpdml6ZVVyaSh1cmkyXyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVEdXBsaWNhdGVkRXhwb3J0LAogICAgICBtZXNzYWdlOiAiIiInJHtuYW1lfScgaXMgZXhwb3J0ZWQgZnJvbSBib3RoICcke3VyaX0nIGFuZCAnJHt1cmkyfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICd1cmknOiB1cmlfLCAndXJpMic6IHVyaTJffSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pPgogICAgdGVtcGxhdGVEdXBsaWNhdGVkRXhwb3J0SW5UeXBlID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiInI25hbWUnIGlzIGV4cG9ydGVkIGZyb20gYm90aCAnI3VyaScgYW5kICcjdXJpMicuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRHVwbGljYXRlZEV4cG9ydEluVHlwZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pPgogICAgY29kZUR1cGxpY2F0ZWRFeHBvcnRJblR5cGUgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKT4oCiAgICAgICAgIkR1cGxpY2F0ZWRFeHBvcnRJblR5cGUiLCB0ZW1wbGF0ZUR1cGxpY2F0ZWRFeHBvcnRJblR5cGUsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRHVwbGljYXRlZEV4cG9ydEluVHlwZShTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXykgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBTdHJpbmcgdXJpID0gcmVsYXRpdml6ZVVyaSh1cmlfKTsKICBTdHJpbmcgdXJpMiA9IHJlbGF0aXZpemVVcmkodXJpMl8pOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRHVwbGljYXRlZEV4cG9ydEluVHlwZSwKICAgICAgbWVzc2FnZTogIiIiJyR7bmFtZX0nIGlzIGV4cG9ydGVkIGZyb20gYm90aCAnJHt1cml9JyBhbmQgJyR7dXJpMn0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAndXJpJzogdXJpXywgJ3VyaTInOiB1cmkyX30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKT4KICAgIHRlbXBsYXRlRHVwbGljYXRlZEltcG9ydCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiJyNuYW1lJyBpcyBpbXBvcnRlZCBmcm9tIGJvdGggJyN1cmknIGFuZCAnI3VyaTInLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRJbXBvcnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKT4KICAgIGNvZGVEdXBsaWNhdGVkSW1wb3J0ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+KAogICAgICAgICJEdXBsaWNhdGVkSW1wb3J0IiwgdGVtcGxhdGVEdXBsaWNhdGVkSW1wb3J0LAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pZ25vcmVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkSW1wb3J0KFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIFN0cmluZyB1cmkyID0gcmVsYXRpdml6ZVVyaSh1cmkyXyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVEdXBsaWNhdGVkSW1wb3J0LAogICAgICBtZXNzYWdlOiAiIiInJHtuYW1lfScgaXMgaW1wb3J0ZWQgZnJvbSBib3RoICcke3VyaX0nIGFuZCAnJHt1cmkyfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICd1cmknOiB1cmlfLCAndXJpMic6IHVyaTJffSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pPgogICAgdGVtcGxhdGVEdXBsaWNhdGVkSW1wb3J0SW5UeXBlID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiInI25hbWUnIGlzIGltcG9ydGVkIGZyb20gYm90aCAnI3VyaScgYW5kICcjdXJpMicuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRHVwbGljYXRlZEltcG9ydEluVHlwZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pPgogICAgY29kZUR1cGxpY2F0ZWRJbXBvcnRJblR5cGUgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKT4oCiAgICAgICAgIkR1cGxpY2F0ZWRJbXBvcnRJblR5cGUiLCB0ZW1wbGF0ZUR1cGxpY2F0ZWRJbXBvcnRJblR5cGUsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkFNQklHVU9VU19JTVBPUlQiXSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkSW1wb3J0SW5UeXBlKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIFN0cmluZyB1cmkyID0gcmVsYXRpdml6ZVVyaSh1cmkyXyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVEdXBsaWNhdGVkSW1wb3J0SW5UeXBlLAogICAgICBtZXNzYWdlOiAiIiInJHtuYW1lfScgaXMgaW1wb3J0ZWQgZnJvbSBib3RoICcke3VyaX0nIGFuZCAnJHt1cmkyfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICd1cmknOiB1cmlfLCAndXJpMic6IHVyaTJffSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUR1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0ID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJBIGxpYnJhcnkgd2l0aCBuYW1lICcjbmFtZScgaXMgZXhwb3J0ZWQgbW9yZSB0aGFuIG9uY2UuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRHVwbGljYXRlZExpYnJhcnlFeHBvcnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUR1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJEdXBsaWNhdGVkTGlicmFyeUV4cG9ydCIsIHRlbXBsYXRlRHVwbGljYXRlZExpYnJhcnlFeHBvcnQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkVYUE9SVF9EVVBMSUNBVEVEX0xJQlJBUllfTkFNRUQiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRHVwbGljYXRlZExpYnJhcnlFeHBvcnQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVEdXBsaWNhdGVkTGlicmFyeUV4cG9ydCwKICAgICAgbWVzc2FnZTogIiIiQSBsaWJyYXJ5IHdpdGggbmFtZSAnJHtuYW1lfScgaXMgZXhwb3J0ZWQgbW9yZSB0aGFuIG9uY2UuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0Q29udGV4dCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiJyNuYW1lJyBpcyBhbHNvIGV4cG9ydGVkIGhlcmUuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRHVwbGljYXRlZExpYnJhcnlFeHBvcnRDb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVEdXBsaWNhdGVkTGlicmFyeUV4cG9ydENvbnRleHQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oIkR1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0Q29udGV4dCIsCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkTGlicmFyeUV4cG9ydENvbnRleHQsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0Q29udGV4dChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUR1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0Q29udGV4dCwKICAgICAgbWVzc2FnZTogIiIiJyR7bmFtZX0nIGlzIGFsc28gZXhwb3J0ZWQgaGVyZS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVEdXBsaWNhdGVkTGlicmFyeUltcG9ydCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiQSBsaWJyYXJ5IHdpdGggbmFtZSAnI25hbWUnIGlzIGltcG9ydGVkIG1vcmUgdGhhbiBvbmNlLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRMaWJyYXJ5SW1wb3J0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVEdXBsaWNhdGVkTGlicmFyeUltcG9ydCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiRHVwbGljYXRlZExpYnJhcnlJbXBvcnQiLCB0ZW1wbGF0ZUR1cGxpY2F0ZWRMaWJyYXJ5SW1wb3J0LAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTVBPUlRfRFVQTElDQVRFRF9MSUJSQVJZX05BTUVEIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5Lndhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRMaWJyYXJ5SW1wb3J0KFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRHVwbGljYXRlZExpYnJhcnlJbXBvcnQsCiAgICAgIG1lc3NhZ2U6ICIiIkEgbGlicmFyeSB3aXRoIG5hbWUgJyR7bmFtZX0nIGlzIGltcG9ydGVkIG1vcmUgdGhhbiBvbmNlLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVEdXBsaWNhdGVkTGlicmFyeUltcG9ydENvbnRleHQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIicjbmFtZScgaXMgYWxzbyBpbXBvcnRlZCBoZXJlLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRMaWJyYXJ5SW1wb3J0Q29udGV4dCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlRHVwbGljYXRlZExpYnJhcnlJbXBvcnRDb250ZXh0ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KCJEdXBsaWNhdGVkTGlicmFyeUltcG9ydENvbnRleHQiLAogICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZExpYnJhcnlJbXBvcnRDb250ZXh0LAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkTGlicmFyeUltcG9ydENvbnRleHQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVEdXBsaWNhdGVkTGlicmFyeUltcG9ydENvbnRleHQsCiAgICAgIG1lc3NhZ2U6ICIiIicke25hbWV9JyBpcyBhbHNvIGltcG9ydGVkIGhlcmUuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+IHRlbXBsYXRlRHVwbGljYXRlZE1vZGlmaWVyID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJUaGUgbW9kaWZpZXIgJyNsZXhlbWUnIHdhcyBhbHJlYWR5IHNwZWNpZmllZC4iIiIsCiAgICAgICAgdGlwVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJUcnkgcmVtb3ZpbmcgYWxsIGJ1dCBvbmUgb2NjdXJyZW5jZSBvZiB0aGUgbW9kaWZpZXIuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRHVwbGljYXRlZE1vZGlmaWVyKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+IGNvZGVEdXBsaWNhdGVkTW9kaWZpZXIgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgIkR1cGxpY2F0ZWRNb2RpZmllciIsIHRlbXBsYXRlRHVwbGljYXRlZE1vZGlmaWVyLAogICAgICAgIGluZGV4OiA3MCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRHVwbGljYXRlZE1vZGlmaWVyKFRva2VuIHRva2VuKSB7CiAgU3RyaW5nIGxleGVtZSA9IHRva2VuLmxleGVtZTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUR1cGxpY2F0ZWRNb2RpZmllciwKICAgICAgbWVzc2FnZTogIiIiVGhlIG1vZGlmaWVyICcke2xleGVtZX0nIHdhcyBhbHJlYWR5IHNwZWNpZmllZC4iIiIsCiAgICAgIHRpcDogIiIiVHJ5IHJlbW92aW5nIGFsbCBidXQgb25lIG9jY3VycmVuY2Ugb2YgdGhlIG1vZGlmaWVyLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3Rva2VuJzogdG9rZW59KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVEdXBsaWNhdGVkTmFtZVByZXZpb3VzbHlVc2VkID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJDYW4ndCBkZWNsYXJlICcjbmFtZScgYmVjYXVzZSBpdCB3YXMgYWxyZWFkeSB1c2VkIGluIHRoaXMgc2NvcGUuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkTmFtZVByZXZpb3VzbHlVc2VkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVEdXBsaWNhdGVkTmFtZVByZXZpb3VzbHlVc2VkID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJEdXBsaWNhdGVkTmFtZVByZXZpb3VzbHlVc2VkIiwgdGVtcGxhdGVEdXBsaWNhdGVkTmFtZVByZXZpb3VzbHlVc2VkLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJSRUZFUkVOQ0VEX0JFRk9SRV9ERUNMQVJBVElPTiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkTmFtZVByZXZpb3VzbHlVc2VkKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRHVwbGljYXRlZE5hbWVQcmV2aW91c2x5VXNlZCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkNhbid0IGRlY2xhcmUgJyR7bmFtZX0nIGJlY2F1c2UgaXQgd2FzIGFscmVhZHkgdXNlZCBpbiB0aGlzIHNjb3BlLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVEdXBsaWNhdGVkTmFtZVByZXZpb3VzbHlVc2VkQ2F1c2UgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlByZXZpb3VzIHVzZSBvZiAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWROYW1lUHJldmlvdXNseVVzZWRDYXVzZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgY29kZUR1cGxpY2F0ZWROYW1lUHJldmlvdXNseVVzZWRDYXVzZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiRHVwbGljYXRlZE5hbWVQcmV2aW91c2x5VXNlZENhdXNlIiwKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWROYW1lUHJldmlvdXNseVVzZWRDYXVzZSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRHVwbGljYXRlZE5hbWVQcmV2aW91c2x5VXNlZENhdXNlKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRHVwbGljYXRlZE5hbWVQcmV2aW91c2x5VXNlZENhdXNlLAogICAgICBtZXNzYWdlOiAiIiJQcmV2aW91cyB1c2Ugb2YgJyR7bmFtZX0nLiIiIiwgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUR1cGxpY2F0ZWROYW1lZEFyZ3VtZW50ID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJEdXBsaWNhdGVkIG5hbWVkIGFyZ3VtZW50ICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRHVwbGljYXRlZE5hbWVkQXJndW1lbnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUR1cGxpY2F0ZWROYW1lZEFyZ3VtZW50ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJEdXBsaWNhdGVkTmFtZWRBcmd1bWVudCIsIHRlbXBsYXRlRHVwbGljYXRlZE5hbWVkQXJndW1lbnQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkRVUExJQ0FURV9OQU1FRF9BUkdVTUVOVCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkTmFtZWRBcmd1bWVudChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUR1cGxpY2F0ZWROYW1lZEFyZ3VtZW50LAogICAgICBtZXNzYWdlOiAiIiJEdXBsaWNhdGVkIG5hbWVkIGFyZ3VtZW50ICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiRHVwbGljYXRlZCBwYXJhbWV0ZXIgbmFtZSAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRQYXJhbWV0ZXJOYW1lKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiRHVwbGljYXRlZFBhcmFtZXRlck5hbWUiLCB0ZW1wbGF0ZUR1cGxpY2F0ZWRQYXJhbWV0ZXJOYW1lLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJEVVBMSUNBVEVfREVGSU5JVElPTiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUR1cGxpY2F0ZWRQYXJhbWV0ZXJOYW1lLAogICAgICBtZXNzYWdlOiAiIiJEdXBsaWNhdGVkIHBhcmFtZXRlciBuYW1lICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlRHVwbGljYXRlZFBhcmFtZXRlck5hbWVDYXVzZSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiT3RoZXIgcGFyYW1ldGVyIG5hbWVkICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRHVwbGljYXRlZFBhcmFtZXRlck5hbWVDYXVzZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlRHVwbGljYXRlZFBhcmFtZXRlck5hbWVDYXVzZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiRHVwbGljYXRlZFBhcmFtZXRlck5hbWVDYXVzZSIsIHRlbXBsYXRlRHVwbGljYXRlZFBhcmFtZXRlck5hbWVDYXVzZSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRHVwbGljYXRlZFBhcmFtZXRlck5hbWVDYXVzZShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUR1cGxpY2F0ZWRQYXJhbWV0ZXJOYW1lQ2F1c2UsCiAgICAgIG1lc3NhZ2U6ICIiIk90aGVyIHBhcmFtZXRlciBuYW1lZCAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRW1wdHlOYW1lZFBhcmFtZXRlckxpc3QgPSBtZXNzYWdlRW1wdHlOYW1lZFBhcmFtZXRlckxpc3Q7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRW1wdHlOYW1lZFBhcmFtZXRlckxpc3QgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJFbXB0eU5hbWVkUGFyYW1ldGVyTGlzdCIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTUlTU0lOR19JREVOVElGSUVSIl0sCiAgICBtZXNzYWdlOiByIiIiTmFtZWQgcGFyYW1ldGVyIGxpc3RzIGNhbm5vdCBiZSBlbXB0eS4iIiIsCiAgICB0aXA6IHIiIiJUcnkgYWRkaW5nIGEgbmFtZWQgcGFyYW1ldGVyIHRvIHRoZSBsaXN0LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFbXB0eU9wdGlvbmFsUGFyYW1ldGVyTGlzdCA9CiAgICBtZXNzYWdlRW1wdHlPcHRpb25hbFBhcmFtZXRlckxpc3Q7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRW1wdHlPcHRpb25hbFBhcmFtZXRlckxpc3QgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJFbXB0eU9wdGlvbmFsUGFyYW1ldGVyTGlzdCIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTUlTU0lOR19JREVOVElGSUVSIl0sCiAgICBtZXNzYWdlOiByIiIiT3B0aW9uYWwgcGFyYW1ldGVyIGxpc3RzIGNhbm5vdCBiZSBlbXB0eS4iIiIsCiAgICB0aXA6IHIiIiJUcnkgYWRkaW5nIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0byB0aGUgbGlzdC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRW5jb2RpbmcgPSBtZXNzYWdlRW5jb2Rpbmc7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRW5jb2RpbmcgPSBjb25zdCBNZXNzYWdlQ29kZSgiRW5jb2RpbmciLAogICAgbWVzc2FnZTogciIiIlVuYWJsZSB0byBkZWNvZGUgYnl0ZXMgYXMgVVRGLTguIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZSk+IHRlbXBsYXRlRW51bUNvbnN0YW50U2FtZU5hbWVBc0VuY2xvc2luZyA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiTmFtZSBvZiBlbnVtIGNvbnN0YW50ICcjbmFtZScgY2FuJ3QgYmUgdGhlIHNhbWUgYXMgdGhlIGVudW0ncyBvd24gbmFtZS4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0VudW1Db25zdGFudFNhbWVOYW1lQXNFbmNsb3NpbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUVudW1Db25zdGFudFNhbWVOYW1lQXNFbmNsb3NpbmcgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oIkVudW1Db25zdGFudFNhbWVOYW1lQXNFbmNsb3NpbmciLAogICAgICAgIHRlbXBsYXRlRW51bUNvbnN0YW50U2FtZU5hbWVBc0VuY2xvc2luZywKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRU5VTV9DT05TVEFOVF9XSVRIX0VOVU1fTkFNRSJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNFbnVtQ29uc3RhbnRTYW1lTmFtZUFzRW5jbG9zaW5nKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRW51bUNvbnN0YW50U2FtZU5hbWVBc0VuY2xvc2luZywKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIk5hbWUgb2YgZW51bSBjb25zdGFudCAnJHtuYW1lfScgY2FuJ3QgYmUgdGhlIHNhbWUgYXMgdGhlIGVudW0ncyBvd24gbmFtZS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFbnVtRGVjbGFyYXRpb25FbXB0eSA9IG1lc3NhZ2VFbnVtRGVjbGFyYXRpb25FbXB0eTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VFbnVtRGVjbGFyYXRpb25FbXB0eSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkVudW1EZWNsYXJhdGlvbkVtcHR5IiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJFTVBUWV9FTlVNX0JPRFkiXSwKICAgIG1lc3NhZ2U6IHIiIiJBbiBlbnVtIGRlY2xhcmF0aW9uIGNhbid0IGJlIGVtcHR5LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFbnVtSW5DbGFzcyA9IG1lc3NhZ2VFbnVtSW5DbGFzczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VFbnVtSW5DbGFzcyA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJFbnVtSW5DbGFzcyIsCiAgICBpbmRleDogNzQsCiAgICBtZXNzYWdlOiByIiIiRW51bXMgY2FuJ3QgYmUgZGVjbGFyZWQgaW5zaWRlIGNsYXNzZXMuIiIiLAogICAgdGlwOiByIiIiVHJ5IG1vdmluZyB0aGUgZW51bSB0byB0aGUgdG9wLWxldmVsLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFbnVtSW5zdGFudGlhdGlvbiA9IG1lc3NhZ2VFbnVtSW5zdGFudGlhdGlvbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VFbnVtSW5zdGFudGlhdGlvbiA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkVudW1JbnN0YW50aWF0aW9uIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlNUQU5USUFURV9FTlVNIl0sCiAgICBtZXNzYWdlOiByIiIiRW51bXMgY2FuJ3QgYmUgaW5zdGFudGlhdGVkLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFcXVhbGl0eUNhbm5vdEJlRXF1YWxpdHlPcGVyYW5kID0KICAgIG1lc3NhZ2VFcXVhbGl0eUNhbm5vdEJlRXF1YWxpdHlPcGVyYW5kOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUVxdWFsaXR5Q2Fubm90QmVFcXVhbGl0eU9wZXJhbmQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJFcXVhbGl0eUNhbm5vdEJlRXF1YWxpdHlPcGVyYW5kIiwKICAgIGluZGV4OiAxLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQW4gZXF1YWxpdHkgZXhwcmVzc2lvbiBjYW4ndCBiZSBhbiBvcGVyYW5kIG9mIGFub3RoZXIgZXF1YWxpdHkgZXhwcmVzc2lvbi4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmUtd3JpdGluZyB0aGUgZXhwcmVzc2lvbi4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4gdGVtcGxhdGVFeHBlY3RlZEFmdGVyQnV0R290ID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkV4cGVjdGVkICcjc3RyaW5nJyBhZnRlciB0aGlzLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0V4cGVjdGVkQWZ0ZXJCdXRHb3QpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPiBjb2RlRXhwZWN0ZWRBZnRlckJ1dEdvdCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgICAgICJFeHBlY3RlZEFmdGVyQnV0R290IiwgdGVtcGxhdGVFeHBlY3RlZEFmdGVyQnV0R290LAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJFWFBFQ1RFRF9UT0tFTiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNFeHBlY3RlZEFmdGVyQnV0R290KFN0cmluZyBzdHJpbmcpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRXhwZWN0ZWRBZnRlckJ1dEdvdCwKICAgICAgbWVzc2FnZTogIiIiRXhwZWN0ZWQgJyR7c3RyaW5nfScgYWZ0ZXIgdGhpcy4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmd9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRXhwZWN0ZWRBbkluaXRpYWxpemVyID0gbWVzc2FnZUV4cGVjdGVkQW5Jbml0aWFsaXplcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VFeHBlY3RlZEFuSW5pdGlhbGl6ZXIgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJFeHBlY3RlZEFuSW5pdGlhbGl6ZXIiLAogICAgaW5kZXg6IDM2LAogICAgbWVzc2FnZTogciIiIkV4cGVjdGVkIGFuIGluaXRpYWxpemVyLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFeHBlY3RlZEJsb2NrID0gbWVzc2FnZUV4cGVjdGVkQmxvY2s7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRXhwZWN0ZWRCbG9jayA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJFeHBlY3RlZEJsb2NrIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJFWFBFQ1RFRF9UT0tFTiJdLAogICAgbWVzc2FnZTogciIiIkV4cGVjdGVkIGEgYmxvY2suIiIiLAogICAgdGlwOiByIiIiVHJ5IGFkZGluZyB7fS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRXhwZWN0ZWRCbG9ja1RvU2tpcCA9IG1lc3NhZ2VFeHBlY3RlZEJsb2NrVG9Ta2lwOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUV4cGVjdGVkQmxvY2tUb1NraXAgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJFeHBlY3RlZEJsb2NrVG9Ta2lwIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJNSVNTSU5HX0ZVTkNUSU9OX0JPRFkiXSwKICAgIG1lc3NhZ2U6IHIiIiJFeHBlY3RlZCBhIGZ1bmN0aW9uIGJvZHkgb3IgJz0+Jy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgYWRkaW5nIHt9LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFeHBlY3RlZEJvZHkgPSBtZXNzYWdlRXhwZWN0ZWRCb2R5OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUV4cGVjdGVkQm9keSA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJFeHBlY3RlZEJvZHkiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk1JU1NJTkdfRlVOQ1RJT05fQk9EWSJdLAogICAgbWVzc2FnZTogciIiIkV4cGVjdGVkIGEgZnVuY3Rpb24gYm9keSBvciAnPT4nLiIiIiwKICAgIHRpcDogciIiIlRyeSBhZGRpbmcge30uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+IHRlbXBsYXRlRXhwZWN0ZWRCdXRHb3QgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiRXhwZWN0ZWQgJyNzdHJpbmcnIGJlZm9yZSB0aGlzLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0V4cGVjdGVkQnV0R290KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4gY29kZUV4cGVjdGVkQnV0R290ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgIkV4cGVjdGVkQnV0R290IiwgdGVtcGxhdGVFeHBlY3RlZEJ1dEdvdCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRVhQRUNURURfVE9LRU4iXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRXhwZWN0ZWRCdXRHb3QoU3RyaW5nIHN0cmluZykgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVFeHBlY3RlZEJ1dEdvdCwKICAgICAgbWVzc2FnZTogIiIiRXhwZWN0ZWQgJyR7c3RyaW5nfScgYmVmb3JlIHRoaXMuIiIiLAogICAgICBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiB0ZW1wbGF0ZUV4cGVjdGVkQ2xhc3NNZW1iZXIgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkV4cGVjdGVkIGEgY2xhc3MgbWVtYmVyLCBidXQgZ290ICcjbGV4ZW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNFeHBlY3RlZENsYXNzTWVtYmVyKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+IGNvZGVFeHBlY3RlZENsYXNzTWVtYmVyID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KAogICAgICAgICJFeHBlY3RlZENsYXNzTWVtYmVyIiwgdGVtcGxhdGVFeHBlY3RlZENsYXNzTWVtYmVyLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJFWFBFQ1RFRF9DTEFTU19NRU1CRVIiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRXhwZWN0ZWRDbGFzc01lbWJlcihUb2tlbiB0b2tlbikgewogIFN0cmluZyBsZXhlbWUgPSB0b2tlbi5sZXhlbWU7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVFeHBlY3RlZENsYXNzTWVtYmVyLAogICAgICBtZXNzYWdlOiAiIiJFeHBlY3RlZCBhIGNsYXNzIG1lbWJlciwgYnV0IGdvdCAnJHtsZXhlbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0b2tlbic6IHRva2VufSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+CiAgICB0ZW1wbGF0ZUV4cGVjdGVkQ2xhc3NPck1peGluQm9keSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJBICNzdHJpbmcgbXVzdCBoYXZlIGEgYm9keSwgZXZlbiBpZiBpdCBpcyBlbXB0eS4iIiIsCiAgICAgICAgdGlwVGVtcGxhdGU6IHIiIiJUcnkgYWRkaW5nIGFuIGVtcHR5IGJvZHkuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRXhwZWN0ZWRDbGFzc09yTWl4aW5Cb2R5KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4gY29kZUV4cGVjdGVkQ2xhc3NPck1peGluQm9keSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgICAgICJFeHBlY3RlZENsYXNzT3JNaXhpbkJvZHkiLCB0ZW1wbGF0ZUV4cGVjdGVkQ2xhc3NPck1peGluQm9keSwKICAgICAgICBpbmRleDogOCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRXhwZWN0ZWRDbGFzc09yTWl4aW5Cb2R5KFN0cmluZyBzdHJpbmcpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRXhwZWN0ZWRDbGFzc09yTWl4aW5Cb2R5LAogICAgICBtZXNzYWdlOiAiIiJBICR7c3RyaW5nfSBtdXN0IGhhdmUgYSBib2R5LCBldmVuIGlmIGl0IGlzIGVtcHR5LiIiIiwKICAgICAgdGlwOiAiIiJUcnkgYWRkaW5nIGFuIGVtcHR5IGJvZHkuIiIiLAogICAgICBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiB0ZW1wbGF0ZUV4cGVjdGVkRGVjbGFyYXRpb24gPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkV4cGVjdGVkIGEgZGVjbGFyYXRpb24sIGJ1dCBnb3QgJyNsZXhlbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0V4cGVjdGVkRGVjbGFyYXRpb24pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gY29kZUV4cGVjdGVkRGVjbGFyYXRpb24gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgIkV4cGVjdGVkRGVjbGFyYXRpb24iLCB0ZW1wbGF0ZUV4cGVjdGVkRGVjbGFyYXRpb24sCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkVYUEVDVEVEX0VYRUNVVEFCTEUiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRXhwZWN0ZWREZWNsYXJhdGlvbihUb2tlbiB0b2tlbikgewogIFN0cmluZyBsZXhlbWUgPSB0b2tlbi5sZXhlbWU7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVFeHBlY3RlZERlY2xhcmF0aW9uLAogICAgICBtZXNzYWdlOiAiIiJFeHBlY3RlZCBhIGRlY2xhcmF0aW9uLCBidXQgZ290ICcke2xleGVtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3Rva2VuJzogdG9rZW59KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRXhwZWN0ZWRFbHNlT3JDb21tYSA9IG1lc3NhZ2VFeHBlY3RlZEVsc2VPckNvbW1hOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUV4cGVjdGVkRWxzZU9yQ29tbWEgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJFeHBlY3RlZEVsc2VPckNvbW1hIiwKICAgIGluZGV4OiA0NiwKICAgIG1lc3NhZ2U6IHIiIiJFeHBlY3RlZCAnZWxzZScgb3IgY29tbWEuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+IHRlbXBsYXRlRXhwZWN0ZWRFbnVtQm9keSA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkV4cGVjdGVkIGEgZW51bSBib2R5LCBidXQgZ290ICcjbGV4ZW1lJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiQW4gZW51bSBkZWZpbml0aW9uIG11c3QgaGF2ZSBhIGJvZHkgd2l0aCBhdCBsZWFzdCBvbmUgY29uc3RhbnQgbmFtZS4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0V4cGVjdGVkRW51bUJvZHkpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gY29kZUV4cGVjdGVkRW51bUJvZHkgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgIkV4cGVjdGVkRW51bUJvZHkiLCB0ZW1wbGF0ZUV4cGVjdGVkRW51bUJvZHksCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk1JU1NJTkdfRU5VTV9CT0RZIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0V4cGVjdGVkRW51bUJvZHkoVG9rZW4gdG9rZW4pIHsKICBTdHJpbmcgbGV4ZW1lID0gdG9rZW4ubGV4ZW1lOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRXhwZWN0ZWRFbnVtQm9keSwKICAgICAgbWVzc2FnZTogIiIiRXhwZWN0ZWQgYSBlbnVtIGJvZHksIGJ1dCBnb3QgJyR7bGV4ZW1lfScuIiIiLAogICAgICB0aXA6CiAgICAgICAgICAiIiJBbiBlbnVtIGRlZmluaXRpb24gbXVzdCBoYXZlIGEgYm9keSB3aXRoIGF0IGxlYXN0IG9uZSBjb25zdGFudCBuYW1lLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3Rva2VuJzogdG9rZW59KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+IHRlbXBsYXRlRXhwZWN0ZWRGdW5jdGlvbkJvZHkgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkV4cGVjdGVkIGEgZnVuY3Rpb24gYm9keSwgYnV0IGdvdCAnI2xleGVtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRXhwZWN0ZWRGdW5jdGlvbkJvZHkpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gY29kZUV4cGVjdGVkRnVuY3Rpb25Cb2R5ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KAogICAgICAgICJFeHBlY3RlZEZ1bmN0aW9uQm9keSIsIHRlbXBsYXRlRXhwZWN0ZWRGdW5jdGlvbkJvZHksCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk1JU1NJTkdfRlVOQ1RJT05fQk9EWSJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNFeHBlY3RlZEZ1bmN0aW9uQm9keShUb2tlbiB0b2tlbikgewogIFN0cmluZyBsZXhlbWUgPSB0b2tlbi5sZXhlbWU7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVFeHBlY3RlZEZ1bmN0aW9uQm9keSwKICAgICAgbWVzc2FnZTogIiIiRXhwZWN0ZWQgYSBmdW5jdGlvbiBib2R5LCBidXQgZ290ICcke2xleGVtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3Rva2VuJzogdG9rZW59KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRXhwZWN0ZWRIZXhEaWdpdCA9IG1lc3NhZ2VFeHBlY3RlZEhleERpZ2l0OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUV4cGVjdGVkSGV4RGlnaXQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJFeHBlY3RlZEhleERpZ2l0IiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJNSVNTSU5HX0hFWF9ESUdJVCJdLAogICAgbWVzc2FnZTogciIiIkEgaGV4IGRpZ2l0ICgwLTkgb3IgQS1GKSBtdXN0IGZvbGxvdyAnMHgnLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gdGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkV4cGVjdGVkIGFuIGlkZW50aWZpZXIsIGJ1dCBnb3QgJyNsZXhlbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0V4cGVjdGVkSWRlbnRpZmllcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiBjb2RlRXhwZWN0ZWRJZGVudGlmaWVyID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KAogICAgICAgICJFeHBlY3RlZElkZW50aWZpZXIiLCB0ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTUlTU0lOR19JREVOVElGSUVSIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0V4cGVjdGVkSWRlbnRpZmllcihUb2tlbiB0b2tlbikgewogIFN0cmluZyBsZXhlbWUgPSB0b2tlbi5sZXhlbWU7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVFeHBlY3RlZElkZW50aWZpZXIsCiAgICAgIG1lc3NhZ2U6ICIiIkV4cGVjdGVkIGFuIGlkZW50aWZpZXIsIGJ1dCBnb3QgJyR7bGV4ZW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsndG9rZW4nOiB0b2tlbn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPiB0ZW1wbGF0ZUV4cGVjdGVkSW5zdGVhZCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJFeHBlY3RlZCAnI3N0cmluZycgaW5zdGVhZCBvZiB0aGlzLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0V4cGVjdGVkSW5zdGVhZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+IGNvZGVFeHBlY3RlZEluc3RlYWQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICAiRXhwZWN0ZWRJbnN0ZWFkIiwgdGVtcGxhdGVFeHBlY3RlZEluc3RlYWQsCiAgICAgICAgaW5kZXg6IDQxKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNFeHBlY3RlZEluc3RlYWQoU3RyaW5nIHN0cmluZykgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVFeHBlY3RlZEluc3RlYWQsCiAgICAgIG1lc3NhZ2U6ICIiIkV4cGVjdGVkICcke3N0cmluZ30nIGluc3RlYWQgb2YgdGhpcy4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmd9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRXhwZWN0ZWROYW1lZEFyZ3VtZW50ID0gbWVzc2FnZUV4cGVjdGVkTmFtZWRBcmd1bWVudDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VFeHBlY3RlZE5hbWVkQXJndW1lbnQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJFeHBlY3RlZE5hbWVkQXJndW1lbnQiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkVYVFJBX1BPU0lUSU9OQUxfQVJHVU1FTlRTIl0sCiAgICBtZXNzYWdlOiByIiIiRXhwZWN0ZWQgbmFtZWQgYXJndW1lbnQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUV4cGVjdGVkT25lRXhwcmVzc2lvbiA9IG1lc3NhZ2VFeHBlY3RlZE9uZUV4cHJlc3Npb247CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRXhwZWN0ZWRPbmVFeHByZXNzaW9uID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiRXhwZWN0ZWRPbmVFeHByZXNzaW9uIiwKICAgIG1lc3NhZ2U6IHIiIiJFeHBlY3RlZCBvbmUgZXhwcmVzc2lvbiwgYnV0IGZvdW5kIGFkZGl0aW9uYWwgaW5wdXQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUV4cGVjdGVkT3BlblBhcmVucyA9IG1lc3NhZ2VFeHBlY3RlZE9wZW5QYXJlbnM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRXhwZWN0ZWRPcGVuUGFyZW5zID0KICAgIGNvbnN0IE1lc3NhZ2VDb2RlKCJFeHBlY3RlZE9wZW5QYXJlbnMiLCBtZXNzYWdlOiByIiIiRXhwZWN0ZWQgJygnLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFeHBlY3RlZFN0YXRlbWVudCA9IG1lc3NhZ2VFeHBlY3RlZFN0YXRlbWVudDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VFeHBlY3RlZFN0YXRlbWVudCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkV4cGVjdGVkU3RhdGVtZW50IiwKICAgIGluZGV4OiAyOSwKICAgIG1lc3NhZ2U6IHIiIiJFeHBlY3RlZCBhIHN0YXRlbWVudC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+IHRlbXBsYXRlRXhwZWN0ZWRTdHJpbmcgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkV4cGVjdGVkIGEgU3RyaW5nLCBidXQgZ290ICcjbGV4ZW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNFeHBlY3RlZFN0cmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiBjb2RlRXhwZWN0ZWRTdHJpbmcgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgIkV4cGVjdGVkU3RyaW5nIiwgdGVtcGxhdGVFeHBlY3RlZFN0cmluZywKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRVhQRUNURURfU1RSSU5HX0xJVEVSQUwiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRXhwZWN0ZWRTdHJpbmcoVG9rZW4gdG9rZW4pIHsKICBTdHJpbmcgbGV4ZW1lID0gdG9rZW4ubGV4ZW1lOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRXhwZWN0ZWRTdHJpbmcsCiAgICAgIG1lc3NhZ2U6ICIiIkV4cGVjdGVkIGEgU3RyaW5nLCBidXQgZ290ICcke2xleGVtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3Rva2VuJzogdG9rZW59KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4gdGVtcGxhdGVFeHBlY3RlZFRva2VuID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkV4cGVjdGVkIHRvIGZpbmQgJyNzdHJpbmcnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0V4cGVjdGVkVG9rZW4pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPiBjb2RlRXhwZWN0ZWRUb2tlbiA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgICAgICJFeHBlY3RlZFRva2VuIiwgdGVtcGxhdGVFeHBlY3RlZFRva2VuLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJFWFBFQ1RFRF9UT0tFTiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNFeHBlY3RlZFRva2VuKFN0cmluZyBzdHJpbmcpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRXhwZWN0ZWRUb2tlbiwKICAgICAgbWVzc2FnZTogIiIiRXhwZWN0ZWQgdG8gZmluZCAnJHtzdHJpbmd9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmd9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+IHRlbXBsYXRlRXhwZWN0ZWRUeXBlID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJFeHBlY3RlZCBhIHR5cGUsIGJ1dCBnb3QgJyNsZXhlbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0V4cGVjdGVkVHlwZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiBjb2RlRXhwZWN0ZWRUeXBlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KAogICAgICAgICJFeHBlY3RlZFR5cGUiLCB0ZW1wbGF0ZUV4cGVjdGVkVHlwZSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRVhQRUNURURfVFlQRV9OQU1FIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0V4cGVjdGVkVHlwZShUb2tlbiB0b2tlbikgewogIFN0cmluZyBsZXhlbWUgPSB0b2tlbi5sZXhlbWU7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVFeHBlY3RlZFR5cGUsCiAgICAgIG1lc3NhZ2U6ICIiIkV4cGVjdGVkIGEgdHlwZSwgYnV0IGdvdCAnJHtsZXhlbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0b2tlbic6IHRva2VufSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUV4cGVjdGVkVXJpID0gbWVzc2FnZUV4cGVjdGVkVXJpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUV4cGVjdGVkVXJpID0KICAgIGNvbnN0IE1lc3NhZ2VDb2RlKCJFeHBlY3RlZFVyaSIsIG1lc3NhZ2U6IHIiIiJFeHBlY3RlZCBhIFVSSS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBzdHJpbmcpPiB0ZW1wbGF0ZUV4cGVyaW1lbnROb3RFbmFibGVkID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoaXMgcmVxdWlyZXMgdGhlICcjc3RyaW5nJyBleHBlcmltZW50IHRvIGJlIGVuYWJsZWQuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBlbmFibGluZyB0aGlzIGV4cGVyaW1lbnQgYnkgYWRkaW5nIGl0IHRvIHRoZSBjb21tYW5kIGxpbmUgd2hlbiBjb21waWxpbmcgYW5kIHJ1bm5pbmcuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNFeHBlcmltZW50Tm90RW5hYmxlZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+IGNvZGVFeHBlcmltZW50Tm90RW5hYmxlZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgICAgICJFeHBlcmltZW50Tm90RW5hYmxlZCIsIHRlbXBsYXRlRXhwZXJpbWVudE5vdEVuYWJsZWQsCiAgICAgICAgaW5kZXg6IDQ4KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNFeHBlcmltZW50Tm90RW5hYmxlZChTdHJpbmcgc3RyaW5nKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUV4cGVyaW1lbnROb3RFbmFibGVkLAogICAgICBtZXNzYWdlOiAiIiJUaGlzIHJlcXVpcmVzIHRoZSAnJHtzdHJpbmd9JyBleHBlcmltZW50IHRvIGJlIGVuYWJsZWQuIiIiLAogICAgICB0aXA6CiAgICAgICAgICAiIiJUcnkgZW5hYmxpbmcgdGhpcyBleHBlcmltZW50IGJ5IGFkZGluZyBpdCB0byB0aGUgY29tbWFuZCBsaW5lIHdoZW4gY29tcGlsaW5nIGFuZCBydW5uaW5nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZ30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFeHBsaWNpdEV4dGVuc2lvbkFyZ3VtZW50TWlzbWF0Y2ggPQogICAgbWVzc2FnZUV4cGxpY2l0RXh0ZW5zaW9uQXJndW1lbnRNaXNtYXRjaDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VFeHBsaWNpdEV4dGVuc2lvbkFyZ3VtZW50TWlzbWF0Y2ggPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJFeHBsaWNpdEV4dGVuc2lvbkFyZ3VtZW50TWlzbWF0Y2giLAogICAgbWVzc2FnZToKICAgICAgICByIiIiRXhwbGljaXQgZXh0ZW5zaW9uIGFwcGxpY2F0aW9uIHJlcXVpcmVzIGV4YWN0bHkgMSBwb3NpdGlvbmFsIGFyZ3VtZW50LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgaW50CiAgICAgICAgICAgIGNvdW50KT4gdGVtcGxhdGVFeHBsaWNpdEV4dGVuc2lvblR5cGVBcmd1bWVudE1pc21hdGNoID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgaW50IGNvdW50KT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkV4cGxpY2l0IGV4dGVuc2lvbiBhcHBsaWNhdGlvbiBvZiBleHRlbnNpb24gJyNuYW1lJyB0YWtlcyAnI2NvdW50JyB0eXBlIGFyZ3VtZW50KHMpLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRXhwbGljaXRFeHRlbnNpb25UeXBlQXJndW1lbnRNaXNtYXRjaCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIGludCBjb3VudCk+CiAgICBjb2RlRXhwbGljaXRFeHRlbnNpb25UeXBlQXJndW1lbnRNaXNtYXRjaCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIGludCBjb3VudCk+KAogICJFeHBsaWNpdEV4dGVuc2lvblR5cGVBcmd1bWVudE1pc21hdGNoIiwKICB0ZW1wbGF0ZUV4cGxpY2l0RXh0ZW5zaW9uVHlwZUFyZ3VtZW50TWlzbWF0Y2gsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRXhwbGljaXRFeHRlbnNpb25UeXBlQXJndW1lbnRNaXNtYXRjaCgKICAgIFN0cmluZyBuYW1lLCBpbnQgY291bnQpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKGNvdW50ID09IG51bGwpIHRocm93ICdObyBjb3VudCBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVFeHBsaWNpdEV4dGVuc2lvblR5cGVBcmd1bWVudE1pc21hdGNoLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiRXhwbGljaXQgZXh0ZW5zaW9uIGFwcGxpY2F0aW9uIG9mIGV4dGVuc2lvbiAnJHtuYW1lfScgdGFrZXMgJyR7Y291bnR9JyB0eXBlIGFyZ3VtZW50KHMpLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAnY291bnQnOiBjb3VudH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFeHBvcnRBZnRlclBhcnQgPSBtZXNzYWdlRXhwb3J0QWZ0ZXJQYXJ0OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUV4cG9ydEFmdGVyUGFydCA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJFeHBvcnRBZnRlclBhcnQiLAogICAgaW5kZXg6IDc1LAogICAgbWVzc2FnZTogciIiIkV4cG9ydCBkaXJlY3RpdmVzIG11c3QgcHJlY2VkZSBwYXJ0IGRpcmVjdGl2ZXMuIiIiLAogICAgdGlwOiByIiIiVHJ5IG1vdmluZyB0aGUgZXhwb3J0IGRpcmVjdGl2ZXMgYmVmb3JlIHRoZSBwYXJ0IGRpcmVjdGl2ZXMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pPgogICAgdGVtcGxhdGVFeHBvcnRIaWRlc0V4cG9ydCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiRXhwb3J0IG9mICcjbmFtZScgKGZyb20gJyN1cmknKSBoaWRlcyBleHBvcnQgZnJvbSAnI3VyaTInLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0V4cG9ydEhpZGVzRXhwb3J0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+CiAgICBjb2RlRXhwb3J0SGlkZXNFeHBvcnQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKT4oCiAgICAgICAgIkV4cG9ydEhpZGVzRXhwb3J0IiwgdGVtcGxhdGVFeHBvcnRIaWRlc0V4cG9ydCwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuaWdub3JlZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRXhwb3J0SGlkZXNFeHBvcnQoU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgU3RyaW5nIHVyaTIgPSByZWxhdGl2aXplVXJpKHVyaTJfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUV4cG9ydEhpZGVzRXhwb3J0LAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiRXhwb3J0IG9mICcke25hbWV9JyAoZnJvbSAnJHt1cml9JykgaGlkZXMgZXhwb3J0IGZyb20gJyR7dXJpMn0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAndXJpJzogdXJpXywgJ3VyaTInOiB1cmkyX30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFeHByZXNzaW9uTm90TWV0YWRhdGEgPSBtZXNzYWdlRXhwcmVzc2lvbk5vdE1ldGFkYXRhOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUV4cHJlc3Npb25Ob3RNZXRhZGF0YSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkV4cHJlc3Npb25Ob3RNZXRhZGF0YSIsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJUaGlzIGNhbid0IGJlIHVzZWQgYXMgbWV0YWRhdGE7IG1ldGFkYXRhIHNob3VsZCBiZSBhIHJlZmVyZW5jZSB0byBhIGNvbXBpbGUtdGltZSBjb25zdGFudCB2YXJpYWJsZSwgb3IgYSBjYWxsIHRvIGEgY29uc3RhbnQgY29uc3RydWN0b3IuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUV4dGVuZGluZ0VudW0gPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIicjbmFtZScgaXMgYW4gZW51bSBhbmQgY2FuJ3QgYmUgZXh0ZW5kZWQgb3IgaW1wbGVtZW50ZWQuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRXh0ZW5kaW5nRW51bSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlRXh0ZW5kaW5nRW51bSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiRXh0ZW5kaW5nRW51bSIsIHRlbXBsYXRlRXh0ZW5kaW5nRW51bSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRVhURU5EU19FTlVNIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0V4dGVuZGluZ0VudW0oU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVFeHRlbmRpbmdFbnVtLAogICAgICBtZXNzYWdlOiAiIiInJHtuYW1lfScgaXMgYW4gZW51bSBhbmQgY2FuJ3QgYmUgZXh0ZW5kZWQgb3IgaW1wbGVtZW50ZWQuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlRXh0ZW5kaW5nUmVzdHJpY3RlZCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiJyNuYW1lJyBpcyByZXN0cmljdGVkIGFuZCBjYW4ndCBiZSBleHRlbmRlZCBvciBpbXBsZW1lbnRlZC4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNFeHRlbmRpbmdSZXN0cmljdGVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVFeHRlbmRpbmdSZXN0cmljdGVkID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJFeHRlbmRpbmdSZXN0cmljdGVkIiwgdGVtcGxhdGVFeHRlbmRpbmdSZXN0cmljdGVkLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJFWFRFTkRTX0RJU0FMTE9XRURfQ0xBU1MiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRXh0ZW5kaW5nUmVzdHJpY3RlZChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUV4dGVuZGluZ1Jlc3RyaWN0ZWQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiInJHtuYW1lfScgaXMgcmVzdHJpY3RlZCBhbmQgY2FuJ3QgYmUgZXh0ZW5kZWQgb3IgaW1wbGVtZW50ZWQuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRXh0ZW5zaW9uRGVjbGFyZXNDb25zdHJ1Y3RvciA9CiAgICBtZXNzYWdlRXh0ZW5zaW9uRGVjbGFyZXNDb25zdHJ1Y3RvcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VFeHRlbnNpb25EZWNsYXJlc0NvbnN0cnVjdG9yID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiRXh0ZW5zaW9uRGVjbGFyZXNDb25zdHJ1Y3RvciIsCiAgICBpbmRleDogOTIsCiAgICBtZXNzYWdlOiByIiIiRXh0ZW5zaW9ucyBjYW4ndCBkZWNsYXJlIGNvbnN0cnVjdG9ycy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgdGhlIGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFeHRlbnNpb25EZWNsYXJlc0luc3RhbmNlRmllbGQgPQogICAgbWVzc2FnZUV4dGVuc2lvbkRlY2xhcmVzSW5zdGFuY2VGaWVsZDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VFeHRlbnNpb25EZWNsYXJlc0luc3RhbmNlRmllbGQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJFeHRlbnNpb25EZWNsYXJlc0luc3RhbmNlRmllbGQiLAogICAgaW5kZXg6IDkzLAogICAgbWVzc2FnZTogciIiIkV4dGVuc2lvbnMgY2FuJ3QgZGVjbGFyZSBpbnN0YW5jZSBmaWVsZHMiIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgdGhlIGZpZWxkIGRlY2xhcmF0aW9uIG9yIG1ha2luZyBpdCBhIHN0YXRpYyBmaWVsZCIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFeHRlcm5hbENsYXNzID0gbWVzc2FnZUV4dGVybmFsQ2xhc3M7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRXh0ZXJuYWxDbGFzcyA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJFeHRlcm5hbENsYXNzIiwKICAgIGluZGV4OiAzLAogICAgbWVzc2FnZTogciIiIkNsYXNzZXMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgJ2V4dGVybmFsJy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgdGhlIGtleXdvcmQgJ2V4dGVybmFsJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRXh0ZXJuYWxDb25zdHJ1Y3RvcldpdGhCb2R5ID0KICAgIG1lc3NhZ2VFeHRlcm5hbENvbnN0cnVjdG9yV2l0aEJvZHk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRXh0ZXJuYWxDb25zdHJ1Y3RvcldpdGhCb2R5ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiRXh0ZXJuYWxDb25zdHJ1Y3RvcldpdGhCb2R5IiwKICAgIGluZGV4OiA4NywKICAgIG1lc3NhZ2U6IHIiIiJFeHRlcm5hbCBjb25zdHJ1Y3RvcnMgY2FuJ3QgaGF2ZSBhIGJvZHkuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgcmVtb3ZpbmcgdGhlIGJvZHkgb2YgdGhlIGNvbnN0cnVjdG9yLCBvciByZW1vdmluZyB0aGUga2V5d29yZCAnZXh0ZXJuYWwnLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFeHRlcm5hbENvbnN0cnVjdG9yV2l0aEZpZWxkSW5pdGlhbGl6ZXJzID0KICAgIG1lc3NhZ2VFeHRlcm5hbENvbnN0cnVjdG9yV2l0aEZpZWxkSW5pdGlhbGl6ZXJzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUV4dGVybmFsQ29uc3RydWN0b3JXaXRoRmllbGRJbml0aWFsaXplcnMgPQogICAgY29uc3QgTWVzc2FnZUNvZGUoIkV4dGVybmFsQ29uc3RydWN0b3JXaXRoRmllbGRJbml0aWFsaXplcnMiLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJFWFRFUk5BTF9DT05TVFJVQ1RPUl9XSVRIX0ZJRUxEX0lOSVRJQUxJWkVSUyJdLAogICAgICAgIG1lc3NhZ2U6IHIiIiJBbiBleHRlcm5hbCBjb25zdHJ1Y3RvciBjYW4ndCBpbml0aWFsaXplIGZpZWxkcy4iIiIsCiAgICAgICAgdGlwOgogICAgICAgICAgICByIiIiVHJ5IHJlbW92aW5nIHRoZSBmaWVsZCBpbml0aWFsaXplcnMsIG9yIHJlbW92aW5nIHRoZSBrZXl3b3JkICdleHRlcm5hbCcuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUV4dGVybmFsRW51bSA9IG1lc3NhZ2VFeHRlcm5hbEVudW07CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRXh0ZXJuYWxFbnVtID0gY29uc3QgTWVzc2FnZUNvZGUoIkV4dGVybmFsRW51bSIsCiAgICBpbmRleDogNSwKICAgIG1lc3NhZ2U6IHIiIiJFbnVtcyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSAnZXh0ZXJuYWwnLiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyB0aGUga2V5d29yZCAnZXh0ZXJuYWwnLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFeHRlcm5hbEZhY3RvcnlSZWRpcmVjdGlvbiA9CiAgICBtZXNzYWdlRXh0ZXJuYWxGYWN0b3J5UmVkaXJlY3Rpb247CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRXh0ZXJuYWxGYWN0b3J5UmVkaXJlY3Rpb24gPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJFeHRlcm5hbEZhY3RvcnlSZWRpcmVjdGlvbiIsCiAgICBpbmRleDogODUsCiAgICBtZXNzYWdlOiByIiIiQSByZWRpcmVjdGluZyBmYWN0b3J5IGNhbid0IGJlIGV4dGVybmFsLiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyB0aGUgJ2V4dGVybmFsJyBtb2RpZmllci4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRXh0ZXJuYWxGYWN0b3J5V2l0aEJvZHkgPSBtZXNzYWdlRXh0ZXJuYWxGYWN0b3J5V2l0aEJvZHk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRXh0ZXJuYWxGYWN0b3J5V2l0aEJvZHkgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJFeHRlcm5hbEZhY3RvcnlXaXRoQm9keSIsCiAgICBpbmRleDogODYsCiAgICBtZXNzYWdlOiByIiIiRXh0ZXJuYWwgZmFjdG9yaWVzIGNhbid0IGhhdmUgYSBib2R5LiIiIiwKICAgIHRpcDoKICAgICAgICByIiIiVHJ5IHJlbW92aW5nIHRoZSBib2R5IG9mIHRoZSBmYWN0b3J5LCBvciByZW1vdmluZyB0aGUga2V5d29yZCAnZXh0ZXJuYWwnLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFeHRlcm5hbEZpZWxkID0gbWVzc2FnZUV4dGVybmFsRmllbGQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRXh0ZXJuYWxGaWVsZCA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJFeHRlcm5hbEZpZWxkIiwKICAgIGluZGV4OiA1MCwKICAgIG1lc3NhZ2U6IHIiIiJGaWVsZHMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgJ2V4dGVybmFsJy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgdGhlIGtleXdvcmQgJ2V4dGVybmFsJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRXh0ZXJuYWxNZXRob2RXaXRoQm9keSA9IG1lc3NhZ2VFeHRlcm5hbE1ldGhvZFdpdGhCb2R5OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUV4dGVybmFsTWV0aG9kV2l0aEJvZHkgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJFeHRlcm5hbE1ldGhvZFdpdGhCb2R5IiwKICAgIGluZGV4OiA0OSwKICAgIG1lc3NhZ2U6IHIiIiJBbiBleHRlcm5hbCBvciBuYXRpdmUgbWV0aG9kIGNhbid0IGhhdmUgYSBib2R5LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFeHRlcm5hbFR5cGVkZWYgPSBtZXNzYWdlRXh0ZXJuYWxUeXBlZGVmOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUV4dGVybmFsVHlwZWRlZiA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJFeHRlcm5hbFR5cGVkZWYiLAogICAgaW5kZXg6IDc2LAogICAgbWVzc2FnZTogciIiIlR5cGVkZWZzIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlICdleHRlcm5hbCcuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nIHRoZSBrZXl3b3JkICdleHRlcm5hbCcuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiB0ZW1wbGF0ZUV4dHJhbmVvdXNNb2RpZmllciA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ2FuJ3QgaGF2ZSBtb2RpZmllciAnI2xleGVtZScgaGVyZS4iIiIsCiAgICAgICAgdGlwVGVtcGxhdGU6IHIiIiJUcnkgcmVtb3ZpbmcgJyNsZXhlbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0V4dHJhbmVvdXNNb2RpZmllcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiBjb2RlRXh0cmFuZW91c01vZGlmaWVyID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KAogICAgICAgICJFeHRyYW5lb3VzTW9kaWZpZXIiLCB0ZW1wbGF0ZUV4dHJhbmVvdXNNb2RpZmllciwKICAgICAgICBpbmRleDogNzcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0V4dHJhbmVvdXNNb2RpZmllcihUb2tlbiB0b2tlbikgewogIFN0cmluZyBsZXhlbWUgPSB0b2tlbi5sZXhlbWU7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVFeHRyYW5lb3VzTW9kaWZpZXIsCiAgICAgIG1lc3NhZ2U6ICIiIkNhbid0IGhhdmUgbW9kaWZpZXIgJyR7bGV4ZW1lfScgaGVyZS4iIiIsCiAgICAgIHRpcDogIiIiVHJ5IHJlbW92aW5nICcke2xleGVtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3Rva2VuJzogdG9rZW59KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRmFjdG9yeU5vdFN5bmMgPSBtZXNzYWdlRmFjdG9yeU5vdFN5bmM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRmFjdG9yeU5vdFN5bmMgPSBjb25zdCBNZXNzYWdlQ29kZSgiRmFjdG9yeU5vdFN5bmMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk5PTl9TWU5DX0ZBQ1RPUlkiXSwKICAgIG1lc3NhZ2U6IHIiIiJGYWN0b3J5IGJvZGllcyBjYW4ndCB1c2UgJ2FzeW5jJywgJ2FzeW5jKicsIG9yICdzeW5jKicuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUZhY3RvcnlUb3BMZXZlbERlY2xhcmF0aW9uID0KICAgIG1lc3NhZ2VGYWN0b3J5VG9wTGV2ZWxEZWNsYXJhdGlvbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VGYWN0b3J5VG9wTGV2ZWxEZWNsYXJhdGlvbiA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkZhY3RvcnlUb3BMZXZlbERlY2xhcmF0aW9uIiwKICAgIGluZGV4OiA3OCwKICAgIG1lc3NhZ2U6IHIiIiJUb3AtbGV2ZWwgZGVjbGFyYXRpb25zIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlICdmYWN0b3J5Jy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgdGhlIGtleXdvcmQgJ2ZhY3RvcnknLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVGYXN0YUNMSUFyZ3VtZW50UmVxdWlyZWQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkV4cGVjdGVkIHZhbHVlIGFmdGVyICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRmFzdGFDTElBcmd1bWVudFJlcXVpcmVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVGYXN0YUNMSUFyZ3VtZW50UmVxdWlyZWQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgIkZhc3RhQ0xJQXJndW1lbnRSZXF1aXJlZCIsCiAgdGVtcGxhdGVGYXN0YUNMSUFyZ3VtZW50UmVxdWlyZWQsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRmFzdGFDTElBcmd1bWVudFJlcXVpcmVkKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRmFzdGFDTElBcmd1bWVudFJlcXVpcmVkLAogICAgICBtZXNzYWdlOiAiIiJFeHBlY3RlZCB2YWx1ZSBhZnRlciAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRmFzdGFVc2FnZUxvbmcgPSBtZXNzYWdlRmFzdGFVc2FnZUxvbmc7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRmFzdGFVc2FnZUxvbmcgPQogICAgY29uc3QgTWVzc2FnZUNvZGUoIkZhc3RhVXNhZ2VMb25nIiwgbWVzc2FnZTogciIiIlN1cHBvcnRlZCBvcHRpb25zOgoKICAtbyA8ZmlsZT4sIC0tb3V0cHV0PTxmaWxlPgogICAgR2VuZXJhdGUgdGhlIG91dHB1dCBpbnRvIDxmaWxlPi4KCiAgLWgsIC9oLCAvPywgLS1oZWxwCiAgICBEaXNwbGF5IHRoaXMgbWVzc2FnZSAoYWRkIC12IGZvciBpbmZvcm1hdGlvbiBhYm91dCBhbGwgb3B0aW9ucykuCgogIC12LCAtLXZlcmJvc2UKICAgIERpc3BsYXkgdmVyYm9zZSBpbmZvcm1hdGlvbi4KCiAgLURuYW1lCiAgLURuYW1lPXZhbHVlCiAgICBEZWZpbmUgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgaW4gdGhlIGNvbXBpbGUtdGltZSBlbnZpcm9ubWVudC4KCiAgLS1uby1kZWZpbmVzCiAgICBJZ25vcmUgYWxsIC1EIG9wdGlvbnMgYW5kIGxlYXZlIGVudmlyb25tZW50IGNvbnN0YW50cyB1bmV2YWx1YXRlZC4KCiAgLS0KICAgIFN0b3Agb3B0aW9uIHBhcnNpbmcsIHRoZSByZXN0IG9mIHRoZSBjb21tYW5kIGxpbmUgaXMgYXNzdW1lZCB0byBiZQogICAgZmlsZSBuYW1lcyBvciBhcmd1bWVudHMgdG8gdGhlIERhcnQgcHJvZ3JhbS4KCiAgLS1wYWNrYWdlcz08ZmlsZT4KICAgIFVzZSBwYWNrYWdlIHJlc29sdXRpb24gY29uZmlndXJhdGlvbiA8ZmlsZT4sIHdoaWNoIHNob3VsZCBjb250YWluIGEgbWFwcGluZwogICAgb2YgcGFja2FnZSBuYW1lcyB0byBwYXRocy4KCiAgLS1wbGF0Zm9ybT08ZmlsZT4KICAgIFJlYWQgdGhlIFNESyBwbGF0Zm9ybSBmcm9tIDxmaWxlPiwgd2hpY2ggc2hvdWxkIGJlIGluIERpbGwvS2VybmVsIElSIGZvcm1hdAogICAgYW5kIGNvbnRhaW4gdGhlIERhcnQgU0RLLgoKICAtLXRhcmdldD1kYXJ0MmpzfGRhcnQyanNfc2VydmVyfGRhcnRfcnVubmVyfGRhcnRkZXZjfGZsdXR0ZXJ8Zmx1dHRlcl9ydW5uZXJ8bm9uZXx2bQogICAgU3BlY2lmeSB0aGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24uCgogIC0tZW5hYmxlLWFzc2VydHMKICAgIENoZWNrIGFzc2VydHMgaW4gaW5pdGlhbGl6ZXJzIGR1cmluZyBjb25zdGFudCBldmFsdWF0aW9uLgoKICAtLXZlcmlmeQogICAgQ2hlY2sgdGhhdCB0aGUgZ2VuZXJhdGVkIG91dHB1dCBpcyBmcmVlIG9mIHZhcmlvdXMgcHJvYmxlbXMuIFRoaXMgaXMgbW9zdGx5CiAgICB1c2VmdWwgZm9yIGRldmVsb3BlcnMgb2YgdGhpcyBjb21waWxlciBvciBLZXJuZWwgdHJhbnNmb3JtYXRpb25zLgoKICAtLWR1bXAtaXIKICAgIFByaW50IGNvbXBpbGVkIGxpYnJhcmllcyBpbiBLZXJuZWwgc291cmNlIG5vdGF0aW9uLgoKICAtLW9taXQtcGxhdGZvcm0KICAgIEV4Y2x1ZGUgdGhlIHBsYXRmb3JtIGZyb20gdGhlIHNlcmlhbGl6ZWQgZGlsbCBmaWxlLgoKICAtLWJ5dGVjb2RlCiAgICBHZW5lcmF0ZSBieXRlY29kZS4gU3VwcG9ydGVkIG9ubHkgZm9yIFNESyBwbGF0Zm9ybSBjb21waWxhdGlvbi4KCiAgLS1leGNsdWRlLXNvdXJjZQogICAgRG8gbm90IGluY2x1ZGUgc291cmNlIGNvZGUgaW4gdGhlIGRpbGwgZmlsZS4KCiAgLS1jb21waWxlLXNkaz08c2RrPgogICAgQ29tcGlsZSB0aGUgU0RLIGZyb20gc2NyYXRjaCBpbnN0ZWFkIG9mIHJlYWRpbmcgaXQgZnJvbSBhIC5kaWxsIGZpbGUKICAgIChzZWUgLS1wbGF0Zm9ybSkuCgogIC0tc2RrPTxzZGs+CiAgICBMb2NhdGlvbiBvZiB0aGUgU0RLIHNvdXJjZXMgZm9yIHVzZSB3aGVuIGNvbXBpbGluZyBhZGRpdGlvbmFsIHBsYXRmb3JtCiAgICBsaWJyYXJpZXMuCgogIC0tc3VwZXJtaXhpbgogICAgSWdub3JlZCBmb3Igbm93LgoKICAtLXNpbmdsZS1yb290LXNjaGVtZT1TdHJpbmcKICAtLXNpbmdsZS1yb290LWJhc2U9PGRpcj4KICAgIFNwZWNpZnkgYSBjdXN0b20gVVJJIHNjaGVtZSBhbmQgYSBsb2NhdGlvbiBvbiBkaXNrIHdoZXJlIHN1Y2ggVVJJcyBhcmUKICAgIG1hcHBlZCB0by4KCiAgICBXaGVuIHNwZWNpZmllZCwgdGhlIGNvbXBpbGVyIGNhbiBiZSBpbnZva2VkIHdpdGggaW5wdXRzIHVzaW5nIHRoZSBjdXN0b20KICAgIFVSSSBzY2hlbWUuIFRoZSBjb21waWxlciBjYW4gaWdub3JlIHRoZSBleGFjdCBsb2NhdGlvbiBvZiBmaWxlcyBvbiBkaXNrCiAgICBhbmQgYXMgYSByZXN1bHQgdG8gcHJvZHVjZSBvdXRwdXQgdGhhdCBpcyBpbmRlcGVuZGVudCBvZiB0aGUgYWJzb2x1dGUKICAgIGxvY2F0aW9uIG9mIGZpbGVzIG9uIGRpc2suIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBmb3IgaW50ZWdyYXRpbmcgd2l0aAogICAgYnVpbGQgc3lzdGVtcy4KCiAgLS1mYXRhbD1lcnJvcnMKICAtLWZhdGFsPXdhcm5pbmdzCiAgICBNYWtlcyBtZXNzYWdlcyBvZiB0aGUgZ2l2ZW4ga2luZHMgZmF0YWwsIHRoYXQgaXMsIGltbWVkaWF0ZWx5IHN0b3AgdGhlCiAgICBjb21waWxlciB3aXRoIGEgbm9uLXplcm8gZXhpdC1jb2RlLiBJbiAtLXZlcmJvc2UgbW9kZSwgYWxzbyBkaXNwbGF5IGFuCiAgICBpbnRlcm5hbCBzdGFjayB0cmFjZSBmcm9tIHRoZSBjb21waWxlci4gTXVsdGlwbGUga2luZHMgY2FuIGJlIHNlcGFyYXRlZCBieQogICAgY29tbWFzLCBmb3IgZXhhbXBsZSwgLS1mYXRhbD1lcnJvcnMsd2FybmluZ3MuCgogIC0tZW5hYmxlLWV4cGVyaW1lbnQ9PGZsYWc+CiAgICBFbmFibGUgb3IgZGlzYWJsZSBhbiBleHBlcmltZW50YWwgZmxhZywgdXNlZCB0byBndWFyZCBmZWF0dXJlcyBjdXJyZW50bHkKICAgIGluIGRldmVsb3BtZW50LiBQcmVmaXggYW4gZXhwZXJpbWVudCBuYW1lIHdpdGggJ25vLScgdG8gZGlzYWJsZSBpdC4KICAgIE11bHRpcGxlIGV4cGVyaW1lbnRzIGNhbiBiZSBzZXBhcmF0ZWQgYnkgY29tbWFzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVGYXN0YVVzYWdlU2hvcnQgPSBtZXNzYWdlRmFzdGFVc2FnZVNob3J0OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUZhc3RhVXNhZ2VTaG9ydCA9CiAgICBjb25zdCBNZXNzYWdlQ29kZSgiRmFzdGFVc2FnZVNob3J0IiwgbWVzc2FnZTogciIiIkZyZXF1ZW50bHkgdXNlZCBvcHRpb25zOgoKICAtbyA8ZmlsZT4gR2VuZXJhdGUgdGhlIG91dHB1dCBpbnRvIDxmaWxlPi4KICAtaCAgICAgICAgRGlzcGxheSB0aGlzIG1lc3NhZ2UgKGFkZCAtdiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgYWxsIG9wdGlvbnMpLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPgogICAgdGVtcGxhdGVGZmlEYXJ0VHlwZU1pc21hdGNoID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkV4cGVjdGVkICcjdHlwZScgdG8gYmUgYSBzdWJ0eXBlIG9mICcjdHlwZTInLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ZmaURhcnRUeXBlTWlzbWF0Y2gpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPgogICAgY29kZUZmaURhcnRUeXBlTWlzbWF0Y2ggPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAiRmZpRGFydFR5cGVNaXNtYXRjaCIsCiAgdGVtcGxhdGVGZmlEYXJ0VHlwZU1pc21hdGNoLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ZmaURhcnRUeXBlTWlzbWF0Y2goRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVGZmlEYXJ0VHlwZU1pc21hdGNoLAogICAgICBtZXNzYWdlOiAiIiJFeHBlY3RlZCAnJHt0eXBlfScgdG8gYmUgYSBzdWJ0eXBlIG9mICcke3R5cGUyfScuIiIiICsKICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGUsICd0eXBlMic6IF90eXBlMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlRmZpRXh0ZW5kc09ySW1wbGVtZW50c1NlYWxlZENsYXNzID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJDbGFzcyAnI25hbWUnIGNhbm5vdCBiZSBleHRlbmRlZCBvciBpbXBsZW1lbnRlZC4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNGZmlFeHRlbmRzT3JJbXBsZW1lbnRzU2VhbGVkQ2xhc3MpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIGNvZGVGZmlFeHRlbmRzT3JJbXBsZW1lbnRzU2VhbGVkQ2xhc3MgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgIkZmaUV4dGVuZHNPckltcGxlbWVudHNTZWFsZWRDbGFzcyIsCiAgdGVtcGxhdGVGZmlFeHRlbmRzT3JJbXBsZW1lbnRzU2VhbGVkQ2xhc3MsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRmZpRXh0ZW5kc09ySW1wbGVtZW50c1NlYWxlZENsYXNzKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRmZpRXh0ZW5kc09ySW1wbGVtZW50c1NlYWxlZENsYXNzLAogICAgICBtZXNzYWdlOiAiIiJDbGFzcyAnJHtuYW1lfScgY2Fubm90IGJlIGV4dGVuZGVkIG9yIGltcGxlbWVudGVkLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlRmZpRmllbGRBbm5vdGF0aW9uID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJGaWVsZCAnI25hbWUnIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFubm90YXRpb24gdG8gZGVjbGFyZSBpdHMgQysrIHR5cGUsIHdoaWNoIGNhbm5vdCBiZSBWb2lkLiBkYXJ0OmZmaSBTdHJ1Y3RzIGNhbm5vdCBoYXZlIHJlZ3VsYXIgRGFydCBmaWVsZHMuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNGZmlGaWVsZEFubm90YXRpb24pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUZmaUZpZWxkQW5ub3RhdGlvbiA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAiRmZpRmllbGRBbm5vdGF0aW9uIiwKICB0ZW1wbGF0ZUZmaUZpZWxkQW5ub3RhdGlvbiwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNGZmlGaWVsZEFubm90YXRpb24oU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVGZmlGaWVsZEFubm90YXRpb24sCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJGaWVsZCAnJHtuYW1lfScgcmVxdWlyZXMgZXhhY3RseSBvbmUgYW5ub3RhdGlvbiB0byBkZWNsYXJlIGl0cyBDKysgdHlwZSwgd2hpY2ggY2Fubm90IGJlIFZvaWQuIGRhcnQ6ZmZpIFN0cnVjdHMgY2Fubm90IGhhdmUgcmVndWxhciBEYXJ0IGZpZWxkcy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUZmaUZpZWxkSW5pdGlhbGl6ZXIgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkZpZWxkICcjbmFtZScgaXMgYSBkYXJ0OmZmaSBQb2ludGVyIHRvIGEgc3RydWN0IGZpZWxkIGFuZCB0aGVyZWZvcmUgY2Fubm90IGJlIGluaXRpYWxpemVkIGJlZm9yZSBjb25zdHJ1Y3RvciBleGVjdXRpb24uIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNGZmlGaWVsZEluaXRpYWxpemVyKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVGZmlGaWVsZEluaXRpYWxpemVyID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICJGZmlGaWVsZEluaXRpYWxpemVyIiwKICB0ZW1wbGF0ZUZmaUZpZWxkSW5pdGlhbGl6ZXIsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRmZpRmllbGRJbml0aWFsaXplcihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUZmaUZpZWxkSW5pdGlhbGl6ZXIsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJGaWVsZCAnJHtuYW1lfScgaXMgYSBkYXJ0OmZmaSBQb2ludGVyIHRvIGEgc3RydWN0IGZpZWxkIGFuZCB0aGVyZWZvcmUgY2Fubm90IGJlIGluaXRpYWxpemVkIGJlZm9yZSBjb25zdHJ1Y3RvciBleGVjdXRpb24uIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVGZmlGaWVsZE5vQW5ub3RhdGlvbiA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiRmllbGQgJyNuYW1lJyByZXF1aXJlcyBubyBhbm5vdGF0aW9uIHRvIGRlY2xhcmUgaXRzIEMrKyB0eXBlLCBpdCBpcyBhIFBvaW50ZXIgd2hpY2ggaXMgcmVwcmVzZW50ZWQgYnkgdGhlIHNhbWUgdHlwZSBpbiBEYXJ0IGFuZCBDKysuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNGZmlGaWVsZE5vQW5ub3RhdGlvbik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlRmZpRmllbGROb0Fubm90YXRpb24gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgIkZmaUZpZWxkTm9Bbm5vdGF0aW9uIiwKICB0ZW1wbGF0ZUZmaUZpZWxkTm9Bbm5vdGF0aW9uLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ZmaUZpZWxkTm9Bbm5vdGF0aW9uKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRmZpRmllbGROb0Fubm90YXRpb24sCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJGaWVsZCAnJHtuYW1lfScgcmVxdWlyZXMgbm8gYW5ub3RhdGlvbiB0byBkZWNsYXJlIGl0cyBDKysgdHlwZSwgaXQgaXMgYSBQb2ludGVyIHdoaWNoIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBzYW1lIHR5cGUgaW4gRGFydCBhbmQgQysrLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlRmZpTm90U3RhdGljID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiIjbmFtZSBleHBlY3RzIGEgc3RhdGljIGZ1bmN0aW9uIGFzIHBhcmFtZXRlci4gZGFydDpmZmkgb25seSBzdXBwb3J0cyBjYWxsaW5nIHN0YXRpYyBEYXJ0IGZ1bmN0aW9ucyBmcm9tIGMuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNGZmlOb3RTdGF0aWMpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUZmaU5vdFN0YXRpYyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAiRmZpTm90U3RhdGljIiwKICB0ZW1wbGF0ZUZmaU5vdFN0YXRpYywKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNGZmlOb3RTdGF0aWMoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVGZmlOb3RTdGF0aWMsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiIke25hbWV9IGV4cGVjdHMgYSBzdGF0aWMgZnVuY3Rpb24gYXMgcGFyYW1ldGVyLiBkYXJ0OmZmaSBvbmx5IHN1cHBvcnRzIGNhbGxpbmcgc3RhdGljIERhcnQgZnVuY3Rpb25zIGZyb20gYy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVGZmlTdHJ1Y3RHZW5lcmljID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJTdHJ1Y3QgJyNuYW1lJyBzaG91bGQgbm90IGJlIGdlbmVyaWMuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRmZpU3RydWN0R2VuZXJpYyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlRmZpU3RydWN0R2VuZXJpYyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAiRmZpU3RydWN0R2VuZXJpYyIsCiAgdGVtcGxhdGVGZmlTdHJ1Y3RHZW5lcmljLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ZmaVN0cnVjdEdlbmVyaWMoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVGZmlTdHJ1Y3RHZW5lcmljLAogICAgICBtZXNzYWdlOiAiIiJTdHJ1Y3QgJyR7bmFtZX0nIHNob3VsZCBub3QgYmUgZ2VuZXJpYy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUpPiB0ZW1wbGF0ZUZmaVR5cGVJbnZhbGlkID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJFeHBlY3RlZCB0eXBlICcjdHlwZScgdG8gYmUgYSB2YWxpZCBhbmQgaW5zdGFudGlhdGVkIHN1YnR5cGUgb2YgJ05hdGl2ZVR5cGUnLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRmZpVHlwZUludmFsaWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4gY29kZUZmaVR5cGVJbnZhbGlkID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSk+KAogICJGZmlUeXBlSW52YWxpZCIsCiAgdGVtcGxhdGVGZmlUeXBlSW52YWxpZCwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNGZmlUeXBlSW52YWxpZChEYXJ0VHlwZSBfdHlwZSkgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUZmaVR5cGVJbnZhbGlkLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiRXhwZWN0ZWQgdHlwZSAnJHt0eXBlfScgdG8gYmUgYSB2YWxpZCBhbmQgaW5zdGFudGlhdGVkIHN1YnR5cGUgb2YgJ05hdGl2ZVR5cGUnLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUgX3R5cGUyLAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlMyk+IHRlbXBsYXRlRmZpVHlwZU1pc21hdGNoID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBEYXJ0VHlwZSBfdHlwZTMpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiRXhwZWN0ZWQgdHlwZSAnI3R5cGUnIHRvIGJlICcjdHlwZTInLCB3aGljaCBpcyB0aGUgRGFydCB0eXBlIGNvcnJlc3BvbmRpbmcgdG8gJyN0eXBlMycuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNGZmlUeXBlTWlzbWF0Y2gpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIERhcnRUeXBlIF90eXBlMyk+CiAgICBjb2RlRmZpVHlwZU1pc21hdGNoID0gY29uc3QgQ29kZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIERhcnRUeXBlIF90eXBlMyk+KAogICJGZmlUeXBlTWlzbWF0Y2giLAogIHRlbXBsYXRlRmZpVHlwZU1pc21hdGNoLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ZmaVR5cGVNaXNtYXRjaCgKICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIERhcnRUeXBlIF90eXBlMykgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBMaXN0PE9iamVjdD4gdHlwZTNQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMyk7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMyA9IHR5cGUzUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRmZpVHlwZU1pc21hdGNoLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiRXhwZWN0ZWQgdHlwZSAnJHt0eXBlfScgdG8gYmUgJyR7dHlwZTJ9Jywgd2hpY2ggaXMgdGhlIERhcnQgdHlwZSBjb3JyZXNwb25kaW5nIHRvICcke3R5cGUzfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTIsICd0eXBlMyc6IF90eXBlM30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUpPiB0ZW1wbGF0ZUZmaVR5cGVVbnNpemVkID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiTWV0aG9kICcjbmFtZScgY2Fubm90IGJlIGNhbGxlZCBvbiBzb21ldGhpbmcgb2YgdHlwZSAnI3R5cGUnIGFzIHRoaXMgdHlwZSBpcyB1bnNpemVkLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRmZpVHlwZVVuc2l6ZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSk+IGNvZGVGZmlUeXBlVW5zaXplZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlKT4oCiAgIkZmaVR5cGVVbnNpemVkIiwKICB0ZW1wbGF0ZUZmaVR5cGVVbnNpemVkLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ZmaVR5cGVVbnNpemVkKFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVGZmlUeXBlVW5zaXplZCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIk1ldGhvZCAnJHtuYW1lfScgY2Fubm90IGJlIGNhbGxlZCBvbiBzb21ldGhpbmcgb2YgdHlwZSAnJHt0eXBlfScgYXMgdGhpcyB0eXBlIGlzIHVuc2l6ZWQuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICd0eXBlJzogX3R5cGV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUZmaVdyb25nU3RydWN0SW5oZXJpdGFuY2UgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIlN0cnVjdCAnI25hbWUnIG11c3QgaW5oZXJpdCBmcm9tICdTdHJ1Y3Q8I25hbWU+Jy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNGZmlXcm9uZ1N0cnVjdEluaGVyaXRhbmNlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVGZmlXcm9uZ1N0cnVjdEluaGVyaXRhbmNlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICJGZmlXcm9uZ1N0cnVjdEluaGVyaXRhbmNlIiwKICB0ZW1wbGF0ZUZmaVdyb25nU3RydWN0SW5oZXJpdGFuY2UsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRmZpV3JvbmdTdHJ1Y3RJbmhlcml0YW5jZShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUZmaVdyb25nU3RydWN0SW5oZXJpdGFuY2UsCiAgICAgIG1lc3NhZ2U6ICIiIlN0cnVjdCAnJHtuYW1lfScgbXVzdCBpbmhlcml0IGZyb20gJ1N0cnVjdDwke25hbWV9PicuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRmllbGRJbml0aWFsaXplZE91dHNpZGVEZWNsYXJpbmdDbGFzcyA9CiAgICBtZXNzYWdlRmllbGRJbml0aWFsaXplZE91dHNpZGVEZWNsYXJpbmdDbGFzczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VGaWVsZEluaXRpYWxpemVkT3V0c2lkZURlY2xhcmluZ0NsYXNzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiRmllbGRJbml0aWFsaXplZE91dHNpZGVEZWNsYXJpbmdDbGFzcyIsCiAgICBpbmRleDogODgsCiAgICBtZXNzYWdlOiByIiIiQSBmaWVsZCBjYW4gb25seSBiZSBpbml0aWFsaXplZCBpbiBpdCdzIGRlY2xhcmluZyBjbGFzcyIiIiwKICAgIHRpcDoKICAgICAgICByIiIiVHJ5IHBhc3NpbmcgYSB2YWx1ZSBpbnRvIHRoZSBzdXBlcmNsYXNzIGNvbnN0cnVjdG9yLCBvciBtb3ZpbmcgdGhlIGluaXRpYWxpemF0aW9uIGludG8gdGhlIGNvbnN0cnVjdG9yIGJvZHkuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUZpZWxkSW5pdGlhbGl6ZXJPdXRzaWRlQ29uc3RydWN0b3IgPQogICAgbWVzc2FnZUZpZWxkSW5pdGlhbGl6ZXJPdXRzaWRlQ29uc3RydWN0b3I7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRmllbGRJbml0aWFsaXplck91dHNpZGVDb25zdHJ1Y3RvciA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkZpZWxkSW5pdGlhbGl6ZXJPdXRzaWRlQ29uc3RydWN0b3IiLAogICAgaW5kZXg6IDc5LAogICAgbWVzc2FnZTogciIiIkZpZWxkIGZvcm1hbCBwYXJhbWV0ZXJzIGNhbiBvbmx5IGJlIHVzZWQgaW4gYSBjb25zdHJ1Y3Rvci4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgJ3RoaXMuJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRmluYWxBbmRDb3ZhcmlhbnQgPSBtZXNzYWdlRmluYWxBbmRDb3ZhcmlhbnQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRmluYWxBbmRDb3ZhcmlhbnQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJGaW5hbEFuZENvdmFyaWFudCIsCiAgICBpbmRleDogODAsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJNZW1iZXJzIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlIGJvdGggJ2ZpbmFsJyBhbmQgJ2NvdmFyaWFudCcuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nIGVpdGhlciB0aGUgJ2ZpbmFsJyBvciAnY292YXJpYW50JyBrZXl3b3JkLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVGaW5hbEFuZFZhciA9IG1lc3NhZ2VGaW5hbEFuZFZhcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VGaW5hbEFuZFZhciA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJGaW5hbEFuZFZhciIsCiAgICBpbmRleDogODEsCiAgICBtZXNzYWdlOiByIiIiTWVtYmVycyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSBib3RoICdmaW5hbCcgYW5kICd2YXInLiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyB0aGUga2V5d29yZCAndmFyJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVGaW5hbEZpZWxkTm90SW5pdGlhbGl6ZWQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJGaW5hbCBmaWVsZCAnI25hbWUnIGlzIG5vdCBpbml0aWFsaXplZC4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IHRvIGluaXRpYWxpemUgdGhlIGZpZWxkIGluIHRoZSBkZWNsYXJhdGlvbiBvciBpbiBldmVyeSBjb25zdHJ1Y3Rvci4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ZpbmFsRmllbGROb3RJbml0aWFsaXplZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlRmluYWxGaWVsZE5vdEluaXRpYWxpemVkID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJGaW5hbEZpZWxkTm90SW5pdGlhbGl6ZWQiLCB0ZW1wbGF0ZUZpbmFsRmllbGROb3RJbml0aWFsaXplZCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRklOQUxfTk9UX0lOSVRJQUxJWkVEIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ZpbmFsRmllbGROb3RJbml0aWFsaXplZChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUZpbmFsRmllbGROb3RJbml0aWFsaXplZCwKICAgICAgbWVzc2FnZTogIiIiRmluYWwgZmllbGQgJyR7bmFtZX0nIGlzIG5vdCBpbml0aWFsaXplZC4iIiIsCiAgICAgIHRpcDoKICAgICAgICAgICIiIlRyeSB0byBpbml0aWFsaXplIHRoZSBmaWVsZCBpbiB0aGUgZGVjbGFyYXRpb24gb3IgaW4gZXZlcnkgY29uc3RydWN0b3IuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVGaW5hbEZpZWxkTm90SW5pdGlhbGl6ZWRCeUNvbnN0cnVjdG9yID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJGaW5hbCBmaWVsZCAnI25hbWUnIGlzIG5vdCBpbml0aWFsaXplZCBieSB0aGlzIGNvbnN0cnVjdG9yLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgdG8gaW5pdGlhbGl6ZSB0aGUgZmllbGQgdXNpbmcgYW4gaW5pdGlhbGl6aW5nIGZvcm1hbCBvciBhIGZpZWxkIGluaXRpYWxpemVyLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRmluYWxGaWVsZE5vdEluaXRpYWxpemVkQnlDb25zdHJ1Y3Rvcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgY29kZUZpbmFsRmllbGROb3RJbml0aWFsaXplZEJ5Q29uc3RydWN0b3IgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkZpbmFsRmllbGROb3RJbml0aWFsaXplZEJ5Q29uc3RydWN0b3IiLAogICAgICAgIHRlbXBsYXRlRmluYWxGaWVsZE5vdEluaXRpYWxpemVkQnlDb25zdHJ1Y3RvciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRklOQUxfTk9UX0lOSVRJQUxJWkVEX0NPTlNUUlVDVE9SXzEiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRmluYWxGaWVsZE5vdEluaXRpYWxpemVkQnlDb25zdHJ1Y3RvcihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUZpbmFsRmllbGROb3RJbml0aWFsaXplZEJ5Q29uc3RydWN0b3IsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJGaW5hbCBmaWVsZCAnJHtuYW1lfScgaXMgbm90IGluaXRpYWxpemVkIGJ5IHRoaXMgY29uc3RydWN0b3IuIiIiLAogICAgICB0aXA6CiAgICAgICAgICAiIiJUcnkgdG8gaW5pdGlhbGl6ZSB0aGUgZmllbGQgdXNpbmcgYW4gaW5pdGlhbGl6aW5nIGZvcm1hbCBvciBhIGZpZWxkIGluaXRpYWxpemVyLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZSk+IHRlbXBsYXRlRmluYWxGaWVsZFdpdGhvdXRJbml0aWFsaXplciA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlRoZSBmaW5hbCB2YXJpYWJsZSAnI25hbWUnIG11c3QgYmUgaW5pdGlhbGl6ZWQuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBhZGRpbmcgYW4gaW5pdGlhbGl6ZXIgKCc9IDxleHByZXNzaW9uPicpIHRvIHRoZSBkZWNsYXJhdGlvbi4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ZpbmFsRmllbGRXaXRob3V0SW5pdGlhbGl6ZXIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUZpbmFsRmllbGRXaXRob3V0SW5pdGlhbGl6ZXIgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkZpbmFsRmllbGRXaXRob3V0SW5pdGlhbGl6ZXIiLCB0ZW1wbGF0ZUZpbmFsRmllbGRXaXRob3V0SW5pdGlhbGl6ZXIsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkZJTkFMX05PVF9JTklUSUFMSVpFRCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNGaW5hbEZpZWxkV2l0aG91dEluaXRpYWxpemVyKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRmluYWxGaWVsZFdpdGhvdXRJbml0aWFsaXplciwKICAgICAgbWVzc2FnZTogIiIiVGhlIGZpbmFsIHZhcmlhYmxlICcke25hbWV9JyBtdXN0IGJlIGluaXRpYWxpemVkLiIiIiwKICAgICAgdGlwOgogICAgICAgICAgIiIiVHJ5IGFkZGluZyBhbiBpbml0aWFsaXplciAoJz0gPGV4cHJlc3Npb24+JykgdG8gdGhlIGRlY2xhcmF0aW9uLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVGaW5hbEluc3RhbmNlVmFyaWFibGVBbHJlYWR5SW5pdGlhbGl6ZWQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIicjbmFtZScgaXMgYSBmaW5hbCBpbnN0YW5jZSB2YXJpYWJsZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICBjb2RlRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJGaW5hbEluc3RhbmNlVmFyaWFibGVBbHJlYWR5SW5pdGlhbGl6ZWQiLAogICAgICAgIHRlbXBsYXRlRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJGSU5BTF9JTklUSUFMSVpFRF9NVUxUSVBMRV9USU1FUyJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ZpbmFsSW5zdGFuY2VWYXJpYWJsZUFscmVhZHlJbml0aWFsaXplZChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUZpbmFsSW5zdGFuY2VWYXJpYWJsZUFscmVhZHlJbml0aWFsaXplZCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIicke25hbWV9JyBpcyBhIGZpbmFsIGluc3RhbmNlIHZhcmlhYmxlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkQ2F1c2UgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIicjbmFtZScgd2FzIGluaXRpYWxpemVkIGhlcmUuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6CiAgICAgICAgICAgIF93aXRoQXJndW1lbnRzRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkQ2F1c2UpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIGNvZGVGaW5hbEluc3RhbmNlVmFyaWFibGVBbHJlYWR5SW5pdGlhbGl6ZWRDYXVzZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkQ2F1c2UiLAogICAgICAgIHRlbXBsYXRlRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkQ2F1c2UsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ZpbmFsSW5zdGFuY2VWYXJpYWJsZUFscmVhZHlJbml0aWFsaXplZENhdXNlKAogICAgU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVGaW5hbEluc3RhbmNlVmFyaWFibGVBbHJlYWR5SW5pdGlhbGl6ZWRDYXVzZSwKICAgICAgbWVzc2FnZTogIiIiJyR7bmFtZX0nIHdhcyBpbml0aWFsaXplZCBoZXJlLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBEYXJ0VHlwZSBfdHlwZSwKICAgICAgICBEYXJ0VHlwZQogICAgICAgICAgICBfdHlwZTIpPiB0ZW1wbGF0ZUZvckluTG9vcEVsZW1lbnRUeXBlTm90QXNzaWduYWJsZSA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJBIHZhbHVlIG9mIHR5cGUgJyN0eXBlJyBjYW4ndCBiZSBhc3NpZ25lZCB0byBhIHZhcmlhYmxlIG9mIHR5cGUgJyN0eXBlMicuIiIiLAogICAgdGlwVGVtcGxhdGU6IHIiIiJUcnkgY2hhbmdpbmcgdGhlIHR5cGUgb2YgdGhlIHZhcmlhYmxlLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRm9ySW5Mb29wRWxlbWVudFR5cGVOb3RBc3NpZ25hYmxlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVGb3JJbkxvb3BFbGVtZW50VHlwZU5vdEFzc2lnbmFibGUgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgICAgICAiRm9ySW5Mb29wRWxlbWVudFR5cGVOb3RBc3NpZ25hYmxlIiwKICAgICAgICB0ZW1wbGF0ZUZvckluTG9vcEVsZW1lbnRUeXBlTm90QXNzaWduYWJsZSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRk9SX0lOX09GX0lOVkFMSURfRUxFTUVOVF9UWVBFIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ZvckluTG9vcEVsZW1lbnRUeXBlTm90QXNzaWduYWJsZSgKICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRm9ySW5Mb29wRWxlbWVudFR5cGVOb3RBc3NpZ25hYmxlLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiQSB2YWx1ZSBvZiB0eXBlICcke3R5cGV9JyBjYW4ndCBiZSBhc3NpZ25lZCB0byBhIHZhcmlhYmxlIG9mIHR5cGUgJyR7dHlwZTJ9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIHRpcDogIiIiVHJ5IGNoYW5naW5nIHRoZSB0eXBlIG9mIHRoZSB2YXJpYWJsZS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGUsICd0eXBlMic6IF90eXBlMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVGb3JJbkxvb3BFeGFjdGx5T25lVmFyaWFibGUgPQogICAgbWVzc2FnZUZvckluTG9vcEV4YWN0bHlPbmVWYXJpYWJsZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VGb3JJbkxvb3BFeGFjdGx5T25lVmFyaWFibGUgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJGb3JJbkxvb3BFeGFjdGx5T25lVmFyaWFibGUiLAogICAgbWVzc2FnZTogciIiIkEgZm9yLWluIGxvb3AgY2FuJ3QgaGF2ZSBtb3JlIHRoYW4gb25lIGxvb3AgdmFyaWFibGUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUZvckluTG9vcE5vdEFzc2lnbmFibGUgPSBtZXNzYWdlRm9ySW5Mb29wTm90QXNzaWduYWJsZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VGb3JJbkxvb3BOb3RBc3NpZ25hYmxlID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiRm9ySW5Mb29wTm90QXNzaWduYWJsZSIsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJDYW4ndCBhc3NpZ24gdG8gdGhpcywgc28gaXQgY2FuJ3QgYmUgdXNlZCBpbiBhIGZvci1pbiBsb29wLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVGb3JJbkxvb3BUeXBlTm90SXRlcmFibGUgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIHR5cGUgJyN0eXBlJyB1c2VkIGluIHRoZSAnZm9yJyBsb29wIG11c3QgaW1wbGVtZW50ICcjdHlwZTInLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRm9ySW5Mb29wVHlwZU5vdEl0ZXJhYmxlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVGb3JJbkxvb3BUeXBlTm90SXRlcmFibGUgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgICAgICAiRm9ySW5Mb29wVHlwZU5vdEl0ZXJhYmxlIiwgdGVtcGxhdGVGb3JJbkxvb3BUeXBlTm90SXRlcmFibGUsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkZPUl9JTl9PRl9JTlZBTElEX1RZUEUiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRm9ySW5Mb29wVHlwZU5vdEl0ZXJhYmxlKAogICAgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVGb3JJbkxvb3BUeXBlTm90SXRlcmFibGUsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgdHlwZSAnJHt0eXBlfScgdXNlZCBpbiB0aGUgJ2ZvcicgbG9vcCBtdXN0IGltcGxlbWVudCAnJHt0eXBlMn0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZSwgJ3R5cGUyJzogX3R5cGUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUZvckluTG9vcFdpdGhDb25zdFZhcmlhYmxlID0KICAgIG1lc3NhZ2VGb3JJbkxvb3BXaXRoQ29uc3RWYXJpYWJsZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VGb3JJbkxvb3BXaXRoQ29uc3RWYXJpYWJsZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkZvckluTG9vcFdpdGhDb25zdFZhcmlhYmxlIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJGT1JfSU5fV0lUSF9DT05TVF9WQVJJQUJMRSJdLAogICAgbWVzc2FnZTogciIiIkEgZm9yLWluIGxvb3AtdmFyaWFibGUgY2FuJ3QgYmUgJ2NvbnN0Jy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgdGhlICdjb25zdCcgbW9kaWZpZXIuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUZ1bmN0aW9uVHlwZURlZmF1bHRWYWx1ZSA9IG1lc3NhZ2VGdW5jdGlvblR5cGVEZWZhdWx0VmFsdWU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRnVuY3Rpb25UeXBlRGVmYXVsdFZhbHVlID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiRnVuY3Rpb25UeXBlRGVmYXVsdFZhbHVlIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJERUZBVUxUX1ZBTFVFX0lOX0ZVTkNUSU9OX1RZUEUiXSwKICAgIG1lc3NhZ2U6IHIiIiJDYW4ndCBoYXZlIGEgZGVmYXVsdCB2YWx1ZSBpbiBhIGZ1bmN0aW9uIHR5cGUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUZ1bmN0aW9uVHlwZWRQYXJhbWV0ZXJWYXIgPQogICAgbWVzc2FnZUZ1bmN0aW9uVHlwZWRQYXJhbWV0ZXJWYXI7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRnVuY3Rpb25UeXBlZFBhcmFtZXRlclZhciA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkZ1bmN0aW9uVHlwZWRQYXJhbWV0ZXJWYXIiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkZVTkNUSU9OX1RZUEVEX1BBUkFNRVRFUl9WQVIiXSwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIkZ1bmN0aW9uLXR5cGVkIHBhcmFtZXRlcnMgY2FuJ3Qgc3BlY2lmeSAnY29uc3QnLCAnZmluYWwnIG9yICd2YXInIGluIHBsYWNlIG9mIGEgcmV0dXJuIHR5cGUuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlcGxhY2luZyB0aGUga2V5d29yZCB3aXRoIGEgcmV0dXJuIHR5cGUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUdlbmVyYXRvclJldHVybnNWYWx1ZSA9IG1lc3NhZ2VHZW5lcmF0b3JSZXR1cm5zVmFsdWU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlR2VuZXJhdG9yUmV0dXJuc1ZhbHVlID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiR2VuZXJhdG9yUmV0dXJuc1ZhbHVlIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJSRVRVUk5fSU5fR0VORVJBVE9SIl0sCiAgICBtZXNzYWdlOiByIiIiJ3N5bmMqJyBhbmQgJ2FzeW5jKicgY2FuJ3QgcmV0dXJuIGEgdmFsdWUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUdlbmVyaWNGdW5jdGlvblR5cGVJbkJvdW5kID0KICAgIG1lc3NhZ2VHZW5lcmljRnVuY3Rpb25UeXBlSW5Cb3VuZDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VHZW5lcmljRnVuY3Rpb25UeXBlSW5Cb3VuZCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkdlbmVyaWNGdW5jdGlvblR5cGVJbkJvdW5kIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJHRU5FUklDX0ZVTkNUSU9OX1RZUEVfQ0FOTk9UX0JFX0JPVU5EIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJUeXBlIHZhcmlhYmxlcyBjYW4ndCBoYXZlIGdlbmVyaWMgZnVuY3Rpb24gdHlwZXMgaW4gdGhlaXIgYm91bmRzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4KICAgIHRlbXBsYXRlR2VuZXJpY0Z1bmN0aW9uVHlwZUluZmVycmVkQXNBY3R1YWxUeXBlQXJndW1lbnQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIlVuZXhwZWN0ZWQgZ2VuZXJpYyBmdW5jdGlvbiB0eXBlICcjdHlwZScgaW5mZXJyZWQgYXMgYSB0eXBlIGFyZ3VtZW50LiIiIiwKICAgICAgICB0aXBUZW1wbGF0ZToKICAgICAgICAgICAgciIiIlRyeSBwcm92aWRpbmcgYSBub24tZ2VuZXJpYyBmdW5jdGlvbiB0eXBlIGV4cGxpY2l0bHkuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6CiAgICAgICAgICAgIF93aXRoQXJndW1lbnRzR2VuZXJpY0Z1bmN0aW9uVHlwZUluZmVycmVkQXNBY3R1YWxUeXBlQXJndW1lbnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4KICAgIGNvZGVHZW5lcmljRnVuY3Rpb25UeXBlSW5mZXJyZWRBc0FjdHVhbFR5cGVBcmd1bWVudCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUpPigKICAgICAgICAiR2VuZXJpY0Z1bmN0aW9uVHlwZUluZmVycmVkQXNBY3R1YWxUeXBlQXJndW1lbnQiLAogICAgICAgIHRlbXBsYXRlR2VuZXJpY0Z1bmN0aW9uVHlwZUluZmVycmVkQXNBY3R1YWxUeXBlQXJndW1lbnQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkdFTkVSSUNfRlVOQ1RJT05fQ0FOTk9UX0JFX1RZUEVfQVJHVU1FTlQiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzR2VuZXJpY0Z1bmN0aW9uVHlwZUluZmVycmVkQXNBY3R1YWxUeXBlQXJndW1lbnQoCiAgICBEYXJ0VHlwZSBfdHlwZSkgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUdlbmVyaWNGdW5jdGlvblR5cGVJbmZlcnJlZEFzQWN0dWFsVHlwZUFyZ3VtZW50LAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVW5leHBlY3RlZCBnZW5lcmljIGZ1bmN0aW9uIHR5cGUgJyR7dHlwZX0nIGluZmVycmVkIGFzIGEgdHlwZSBhcmd1bWVudC4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIHRpcDogIiIiVHJ5IHByb3ZpZGluZyBhIG5vbi1nZW5lcmljIGZ1bmN0aW9uIHR5cGUgZXhwbGljaXRseS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlR2VuZXJpY0Z1bmN0aW9uVHlwZVVzZWRBc0FjdHVhbFR5cGVBcmd1bWVudCA9CiAgICBtZXNzYWdlR2VuZXJpY0Z1bmN0aW9uVHlwZVVzZWRBc0FjdHVhbFR5cGVBcmd1bWVudDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VHZW5lcmljRnVuY3Rpb25UeXBlVXNlZEFzQWN0dWFsVHlwZUFyZ3VtZW50ID0KICAgIGNvbnN0IE1lc3NhZ2VDb2RlKCJHZW5lcmljRnVuY3Rpb25UeXBlVXNlZEFzQWN0dWFsVHlwZUFyZ3VtZW50IiwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiR0VORVJJQ19GVU5DVElPTl9DQU5OT1RfQkVfVFlQRV9BUkdVTUVOVCJdLAogICAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAgIHIiIiJVbmV4cGVjdGVkIGdlbmVyaWMgZnVuY3Rpb24gdHlwZSBmb3VuZCBpbiBhIHR5cGUgYXJndW1lbnQuIiIiLAogICAgICAgIHRpcDogciIiIlRyeSB1c2luZyBhIG5vbi1nZW5lcmljIGZ1bmN0aW9uIHR5cGUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUdldHRlck5vdEZvdW5kID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJHZXR0ZXIgbm90IGZvdW5kOiAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0dldHRlck5vdEZvdW5kKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVHZXR0ZXJOb3RGb3VuZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiR2V0dGVyTm90Rm91bmQiLCB0ZW1wbGF0ZUdldHRlck5vdEZvdW5kLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJVTkRFRklORURfR0VUVEVSIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzR2V0dGVyTm90Rm91bmQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVHZXR0ZXJOb3RGb3VuZCwKICAgICAgbWVzc2FnZTogIiIiR2V0dGVyIG5vdCBmb3VuZDogJyR7bmFtZX0nLiIiIiwgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUdldHRlcldpdGhGb3JtYWxzID0gbWVzc2FnZUdldHRlcldpdGhGb3JtYWxzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUdldHRlcldpdGhGb3JtYWxzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiR2V0dGVyV2l0aEZvcm1hbHMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkdFVFRFUl9XSVRIX1BBUkFNRVRFUlMiXSwKICAgIG1lc3NhZ2U6IHIiIiJBIGdldHRlciBjYW4ndCBoYXZlIGZvcm1hbCBwYXJhbWV0ZXJzLiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyAnKC4uLiknLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbGxlZ2FsQXNzaWdubWVudFRvTm9uQXNzaWduYWJsZSA9CiAgICBtZXNzYWdlSWxsZWdhbEFzc2lnbm1lbnRUb05vbkFzc2lnbmFibGU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSWxsZWdhbEFzc2lnbm1lbnRUb05vbkFzc2lnbmFibGUgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbGxlZ2FsQXNzaWdubWVudFRvTm9uQXNzaWduYWJsZSIsCiAgICBpbmRleDogNDUsCiAgICBtZXNzYWdlOiByIiIiSWxsZWdhbCBhc3NpZ25tZW50IHRvIG5vbi1hc3NpZ25hYmxlIGV4cHJlc3Npb24uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUlsbGVnYWxBc3luY0dlbmVyYXRvclJldHVyblR5cGUgPQogICAgbWVzc2FnZUlsbGVnYWxBc3luY0dlbmVyYXRvclJldHVyblR5cGU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSWxsZWdhbEFzeW5jR2VuZXJhdG9yUmV0dXJuVHlwZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIklsbGVnYWxBc3luY0dlbmVyYXRvclJldHVyblR5cGUiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklMTEVHQUxfQVNZTkNfR0VORVJBVE9SX1JFVFVSTl9UWVBFIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJGdW5jdGlvbnMgbWFya2VkICdhc3luYyonIG11c3QgaGF2ZSBhIHJldHVybiB0eXBlIGFzc2lnbmFibGUgdG8gJ1N0cmVhbScuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUlsbGVnYWxBc3luY0dlbmVyYXRvclZvaWRSZXR1cm5UeXBlID0KICAgIG1lc3NhZ2VJbGxlZ2FsQXN5bmNHZW5lcmF0b3JWb2lkUmV0dXJuVHlwZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbGxlZ2FsQXN5bmNHZW5lcmF0b3JWb2lkUmV0dXJuVHlwZSA9CiAgICBjb25zdCBNZXNzYWdlQ29kZSgiSWxsZWdhbEFzeW5jR2VuZXJhdG9yVm9pZFJldHVyblR5cGUiLAogICAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAgIHIiIiJGdW5jdGlvbnMgbWFya2VkICdhc3luYyonIGNhbid0IGhhdmUgcmV0dXJuIHR5cGUgJ3ZvaWQnLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbGxlZ2FsQXN5bmNSZXR1cm5UeXBlID0gbWVzc2FnZUlsbGVnYWxBc3luY1JldHVyblR5cGU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSWxsZWdhbEFzeW5jUmV0dXJuVHlwZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIklsbGVnYWxBc3luY1JldHVyblR5cGUiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklMTEVHQUxfQVNZTkNfUkVUVVJOX1RZUEUiXSwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIkZ1bmN0aW9ucyBtYXJrZWQgJ2FzeW5jJyBtdXN0IGhhdmUgYSByZXR1cm4gdHlwZSBhc3NpZ25hYmxlIHRvICdGdXR1cmUnLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVJbGxlZ2FsTWl4aW4gPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlRoZSB0eXBlICcjbmFtZScgY2FuJ3QgYmUgbWl4ZWQgaW4uIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSWxsZWdhbE1peGluKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVJbGxlZ2FsTWl4aW4gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIklsbGVnYWxNaXhpbiIsIHRlbXBsYXRlSWxsZWdhbE1peGluLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTExFR0FMX01JWElOIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0lsbGVnYWxNaXhpbihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUlsbGVnYWxNaXhpbiwKICAgICAgbWVzc2FnZTogIiIiVGhlIHR5cGUgJyR7bmFtZX0nIGNhbid0IGJlIG1peGVkIGluLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9ycyA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiQ2FuJ3QgdXNlICcjbmFtZScgYXMgYSBtaXhpbiBiZWNhdXNlIGl0IGhhcyBjb25zdHJ1Y3RvcnMuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnMpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUlsbGVnYWxNaXhpbkR1ZVRvQ29uc3RydWN0b3JzID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9ycyIsIHRlbXBsYXRlSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnMsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk1JWElOX0RFQ0xBUkVTX0NPTlNUUlVDVE9SIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0lsbGVnYWxNaXhpbkR1ZVRvQ29uc3RydWN0b3JzKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnMsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJDYW4ndCB1c2UgJyR7bmFtZX0nIGFzIGEgbWl4aW4gYmVjYXVzZSBpdCBoYXMgY29uc3RydWN0b3JzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9yc0NhdXNlID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJUaGlzIGNvbnN0cnVjdG9yIHByZXZlbnRzIHVzaW5nICcjbmFtZScgYXMgYSBtaXhpbi4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9yc0NhdXNlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICBjb2RlSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnNDYXVzZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnNDYXVzZSIsCiAgICAgICAgdGVtcGxhdGVJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9yc0NhdXNlLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9yc0NhdXNlKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnNDYXVzZSwKICAgICAgbWVzc2FnZTogIiIiVGhpcyBjb25zdHJ1Y3RvciBwcmV2ZW50cyB1c2luZyAnJHtuYW1lfScgYXMgYSBtaXhpbi4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4gdGVtcGxhdGVJbGxlZ2FsUmVjdXJzaXZlVHlwZSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiSWxsZWdhbCByZWN1cnNpdmUgdHlwZSAnI3R5cGUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0lsbGVnYWxSZWN1cnNpdmVUeXBlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSk+IGNvZGVJbGxlZ2FsUmVjdXJzaXZlVHlwZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUpPigKICAiSWxsZWdhbFJlY3Vyc2l2ZVR5cGUiLAogIHRlbXBsYXRlSWxsZWdhbFJlY3Vyc2l2ZVR5cGUsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSWxsZWdhbFJlY3Vyc2l2ZVR5cGUoRGFydFR5cGUgX3R5cGUpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbGxlZ2FsUmVjdXJzaXZlVHlwZSwKICAgICAgbWVzc2FnZTogIiIiSWxsZWdhbCByZWN1cnNpdmUgdHlwZSAnJHt0eXBlfScuIiIiICsgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbGxlZ2FsU3luY0dlbmVyYXRvclJldHVyblR5cGUgPQogICAgbWVzc2FnZUlsbGVnYWxTeW5jR2VuZXJhdG9yUmV0dXJuVHlwZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbGxlZ2FsU3luY0dlbmVyYXRvclJldHVyblR5cGUgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbGxlZ2FsU3luY0dlbmVyYXRvclJldHVyblR5cGUiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklMTEVHQUxfU1lOQ19HRU5FUkFUT1JfUkVUVVJOX1RZUEUiXSwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIkZ1bmN0aW9ucyBtYXJrZWQgJ3N5bmMqJyBtdXN0IGhhdmUgYSByZXR1cm4gdHlwZSBhc3NpZ25hYmxlIHRvICdJdGVyYWJsZScuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUlsbGVnYWxTeW5jR2VuZXJhdG9yVm9pZFJldHVyblR5cGUgPQogICAgbWVzc2FnZUlsbGVnYWxTeW5jR2VuZXJhdG9yVm9pZFJldHVyblR5cGU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSWxsZWdhbFN5bmNHZW5lcmF0b3JWb2lkUmV0dXJuVHlwZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIklsbGVnYWxTeW5jR2VuZXJhdG9yVm9pZFJldHVyblR5cGUiLAogICAgbWVzc2FnZTogciIiIkZ1bmN0aW9ucyBtYXJrZWQgJ3N5bmMqJyBjYW4ndCBoYXZlIHJldHVybiB0eXBlICd2b2lkJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW1wbGVtZW50c0JlZm9yZUV4dGVuZHMgPSBtZXNzYWdlSW1wbGVtZW50c0JlZm9yZUV4dGVuZHM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW1wbGVtZW50c0JlZm9yZUV4dGVuZHMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbXBsZW1lbnRzQmVmb3JlRXh0ZW5kcyIsCiAgICBpbmRleDogNDQsCiAgICBtZXNzYWdlOiByIiIiVGhlIGV4dGVuZHMgY2xhdXNlIG11c3QgYmUgYmVmb3JlIHRoZSBpbXBsZW1lbnRzIGNsYXVzZS4iIiIsCiAgICB0aXA6IHIiIiJUcnkgbW92aW5nIHRoZSBleHRlbmRzIGNsYXVzZSBiZWZvcmUgdGhlIGltcGxlbWVudHMgY2xhdXNlLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbXBsZW1lbnRzQmVmb3JlT24gPSBtZXNzYWdlSW1wbGVtZW50c0JlZm9yZU9uOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUltcGxlbWVudHNCZWZvcmVPbiA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkltcGxlbWVudHNCZWZvcmVPbiIsCiAgICBpbmRleDogNDMsCiAgICBtZXNzYWdlOiByIiIiVGhlIG9uIGNsYXVzZSBtdXN0IGJlIGJlZm9yZSB0aGUgaW1wbGVtZW50cyBjbGF1c2UuIiIiLAogICAgdGlwOiByIiIiVHJ5IG1vdmluZyB0aGUgb24gY2xhdXNlIGJlZm9yZSB0aGUgaW1wbGVtZW50cyBjbGF1c2UuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUltcGxlbWVudHNCZWZvcmVXaXRoID0gbWVzc2FnZUltcGxlbWVudHNCZWZvcmVXaXRoOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUltcGxlbWVudHNCZWZvcmVXaXRoID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiSW1wbGVtZW50c0JlZm9yZVdpdGgiLAogICAgaW5kZXg6IDQyLAogICAgbWVzc2FnZTogciIiIlRoZSB3aXRoIGNsYXVzZSBtdXN0IGJlIGJlZm9yZSB0aGUgaW1wbGVtZW50cyBjbGF1c2UuIiIiLAogICAgdGlwOiByIiIiVHJ5IG1vdmluZyB0aGUgd2l0aCBjbGF1c2UgYmVmb3JlIHRoZSBpbXBsZW1lbnRzIGNsYXVzZS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW1wbGVtZW50c0Z1dHVyZU9yID0gbWVzc2FnZUltcGxlbWVudHNGdXR1cmVPcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbXBsZW1lbnRzRnV0dXJlT3IgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbXBsZW1lbnRzRnV0dXJlT3IiLAogICAgbWVzc2FnZTogciIiIidGdXR1cmVPcicgY2FuJ3QgYmUgdXNlZCBpbiBhbiAnaW1wbGVtZW50cycgY2xhdXNlLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBpbnQgY291bnQpPgogICAgdGVtcGxhdGVJbXBsZW1lbnRzUmVwZWF0ZWQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgaW50IGNvdW50KT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiJyNuYW1lJyBjYW4gb25seSBiZSBpbXBsZW1lbnRlZCBvbmNlLiIiIiwKICAgICAgICB0aXBUZW1wbGF0ZTogciIiIlRyeSByZW1vdmluZyAjY291bnQgb2YgdGhlIG9jY3VycmVuY2VzLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ltcGxlbWVudHNSZXBlYXRlZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIGludCBjb3VudCk+IGNvZGVJbXBsZW1lbnRzUmVwZWF0ZWQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBpbnQgY291bnQpPigKICAgICAgICAiSW1wbGVtZW50c1JlcGVhdGVkIiwgdGVtcGxhdGVJbXBsZW1lbnRzUmVwZWF0ZWQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklNUExFTUVOVFNfUkVQRUFURUQiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW1wbGVtZW50c1JlcGVhdGVkKFN0cmluZyBuYW1lLCBpbnQgY291bnQpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKGNvdW50ID09IG51bGwpIHRocm93ICdObyBjb3VudCBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbXBsZW1lbnRzUmVwZWF0ZWQsCiAgICAgIG1lc3NhZ2U6ICIiIicke25hbWV9JyBjYW4gb25seSBiZSBpbXBsZW1lbnRlZCBvbmNlLiIiIiwKICAgICAgdGlwOiAiIiJUcnkgcmVtb3ZpbmcgJHtjb3VudH0gb2YgdGhlIG9jY3VycmVuY2VzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAnY291bnQnOiBjb3VudH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUpPiB0ZW1wbGF0ZUltcGxlbWVudHNTdXBlckNsYXNzID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiInI25hbWUnIGNhbid0IGJlIHVzZWQgaW4gYm90aCAnZXh0ZW5kcycgYW5kICdpbXBsZW1lbnRzJyBjbGF1c2VzLiIiIiwKICAgIHRpcFRlbXBsYXRlOiByIiIiVHJ5IHJlbW92aW5nIG9uZSBvZiB0aGUgb2NjdXJyZW5jZXMuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbXBsZW1lbnRzU3VwZXJDbGFzcyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlSW1wbGVtZW50c1N1cGVyQ2xhc3MgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkltcGxlbWVudHNTdXBlckNsYXNzIiwgdGVtcGxhdGVJbXBsZW1lbnRzU3VwZXJDbGFzcywKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU1QTEVNRU5UU19TVVBFUl9DTEFTUyJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbXBsZW1lbnRzU3VwZXJDbGFzcyhTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUltcGxlbWVudHNTdXBlckNsYXNzLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiJyR7bmFtZX0nIGNhbid0IGJlIHVzZWQgaW4gYm90aCAnZXh0ZW5kcycgYW5kICdpbXBsZW1lbnRzJyBjbGF1c2VzLiIiIiwKICAgICAgdGlwOiAiIiJUcnkgcmVtb3Zpbmcgb25lIG9mIHRoZSBvY2N1cnJlbmNlcy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUpPiB0ZW1wbGF0ZUltcGxpY2l0Q2FsbE9mTm9uTWV0aG9kID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJDYW5ub3QgaW52b2tlIGFuIGluc3RhbmNlIG9mICcjdHlwZScgYmVjYXVzZSBpdCBkZWNsYXJlcyAnY2FsbCcgdG8gYmUgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBtZXRob2QuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBjaGFuZ2luZyAnY2FsbCcgdG8gYSBtZXRob2Qgb3IgZXhwbGljaXRseSBpbnZva2UgJ2NhbGwnLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW1wbGljaXRDYWxsT2ZOb25NZXRob2QpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4gY29kZUltcGxpY2l0Q2FsbE9mTm9uTWV0aG9kID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSk+KAogICAgICAgICJJbXBsaWNpdENhbGxPZk5vbk1ldGhvZCIsIHRlbXBsYXRlSW1wbGljaXRDYWxsT2ZOb25NZXRob2QsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklNUExJQ0lUX0NBTExfT0ZfTk9OX01FVEhPRCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbXBsaWNpdENhbGxPZk5vbk1ldGhvZChEYXJ0VHlwZSBfdHlwZSkgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUltcGxpY2l0Q2FsbE9mTm9uTWV0aG9kLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiQ2Fubm90IGludm9rZSBhbiBpbnN0YW5jZSBvZiAnJHt0eXBlfScgYmVjYXVzZSBpdCBkZWNsYXJlcyAnY2FsbCcgdG8gYmUgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBtZXRob2QuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIlRyeSBjaGFuZ2luZyAnY2FsbCcgdG8gYSBtZXRob2Qgb3IgZXhwbGljaXRseSBpbnZva2UgJ2NhbGwnLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUyKT4gdGVtcGxhdGVJbXBsaWNpdE1peGluT3ZlcnJpZGVDb250ZXh0ID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIk92ZXJyaWRlIHdhcyBpbnRyb2R1Y2VkIHdoZW4gdGhlIG1peGluICcjbmFtZScgd2FzIGFwcGxpZWQgdG8gJyNuYW1lMicuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbXBsaWNpdE1peGluT3ZlcnJpZGVDb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4KICAgIGNvZGVJbXBsaWNpdE1peGluT3ZlcnJpZGVDb250ZXh0ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICAgICAgIkltcGxpY2l0TWl4aW5PdmVycmlkZUNvbnRleHQiLCB0ZW1wbGF0ZUltcGxpY2l0TWl4aW5PdmVycmlkZUNvbnRleHQsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ltcGxpY2l0TWl4aW5PdmVycmlkZUNvbnRleHQoU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMikgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBpZiAobmFtZTIuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUyID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMik7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbXBsaWNpdE1peGluT3ZlcnJpZGVDb250ZXh0LAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiT3ZlcnJpZGUgd2FzIGludHJvZHVjZWQgd2hlbiB0aGUgbWl4aW4gJyR7bmFtZX0nIHdhcyBhcHBsaWVkIHRvICcke25hbWUyfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICduYW1lMic6IG5hbWUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUltcG9ydEFmdGVyUGFydCA9IG1lc3NhZ2VJbXBvcnRBZnRlclBhcnQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW1wb3J0QWZ0ZXJQYXJ0ID0gY29uc3QgTWVzc2FnZUNvZGUoIkltcG9ydEFmdGVyUGFydCIsCiAgICBpbmRleDogMTAsCiAgICBtZXNzYWdlOiByIiIiSW1wb3J0IGRpcmVjdGl2ZXMgbXVzdCBwcmVjZWRlIHBhcnQgZGlyZWN0aXZlcy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgbW92aW5nIHRoZSBpbXBvcnQgZGlyZWN0aXZlcyBiZWZvcmUgdGhlIHBhcnQgZGlyZWN0aXZlcy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+CiAgICB0ZW1wbGF0ZUltcG9ydEhpZGVzSW1wb3J0ID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJJbXBvcnQgb2YgJyNuYW1lJyAoZnJvbSAnI3VyaScpIGhpZGVzIGltcG9ydCBmcm9tICcjdXJpMicuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW1wb3J0SGlkZXNJbXBvcnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKT4KICAgIGNvZGVJbXBvcnRIaWRlc0ltcG9ydCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pPigKICAgICAgICAiSW1wb3J0SGlkZXNJbXBvcnQiLCB0ZW1wbGF0ZUltcG9ydEhpZGVzSW1wb3J0LAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pZ25vcmVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbXBvcnRIaWRlc0ltcG9ydChTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXykgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBTdHJpbmcgdXJpID0gcmVsYXRpdml6ZVVyaSh1cmlfKTsKICBTdHJpbmcgdXJpMiA9IHJlbGF0aXZpemVVcmkodXJpMl8pOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW1wb3J0SGlkZXNJbXBvcnQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJJbXBvcnQgb2YgJyR7bmFtZX0nIChmcm9tICcke3VyaX0nKSBoaWRlcyBpbXBvcnQgZnJvbSAnJHt1cmkyfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICd1cmknOiB1cmlfLCAndXJpMic6IHVyaTJffSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBEYXJ0VHlwZSBfdHlwZSwKICAgICAgICBEYXJ0VHlwZQogICAgICAgICAgICBfdHlwZTIpPiB0ZW1wbGF0ZUluY29tcGF0aWJsZVJlZGlyZWN0ZWVGdW5jdGlvblR5cGUgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHR5cGUgJyN0eXBlJyBpc24ndCBhIHN1YnR5cGUgb2YgJyN0eXBlMicuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbmNvbXBhdGlibGVSZWRpcmVjdGVlRnVuY3Rpb25UeXBlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVJbmNvbXBhdGlibGVSZWRpcmVjdGVlRnVuY3Rpb25UeXBlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICAgICAgIkluY29tcGF0aWJsZVJlZGlyZWN0ZWVGdW5jdGlvblR5cGUiLAogICAgICAgIHRlbXBsYXRlSW5jb21wYXRpYmxlUmVkaXJlY3RlZUZ1bmN0aW9uVHlwZSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiUkVESVJFQ1RfVE9fSU5WQUxJRF9UWVBFIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0luY29tcGF0aWJsZVJlZGlyZWN0ZWVGdW5jdGlvblR5cGUoCiAgICBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUluY29tcGF0aWJsZVJlZGlyZWN0ZWVGdW5jdGlvblR5cGUsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gdHlwZSAnJHt0eXBlfScgaXNuJ3QgYSBzdWJ0eXBlIG9mICcke3R5cGUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlIF90eXBlMiwKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZTIpPiB0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVHlwZSBhcmd1bWVudCAnI3R5cGUnIGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgYm91bmQgJyN0eXBlMicgb2YgdGhlIHR5cGUgdmFyaWFibGUgJyNuYW1lJyBvbiAnI25hbWUyJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IGNoYW5naW5nIHR5cGUgYXJndW1lbnRzIHNvIHRoYXQgdGhleSBjb25mb3JtIHRvIHRoZSBib3VuZHMuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbmNvcnJlY3RUeXBlQXJndW1lbnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4KICAgIGNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnQgPSBjb25zdCBDb2RlPAogICAgICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICAgICAgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgICAgICJJbmNvcnJlY3RUeXBlQXJndW1lbnQiLCB0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVFlQRV9BUkdVTUVOVF9OT1RfTUFUQ0hJTkdfQk9VTkRTIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0luY29ycmVjdFR5cGVBcmd1bWVudCgKICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIGlmIChuYW1lMi5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTIgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUeXBlIGFyZ3VtZW50ICcke3R5cGV9JyBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIGJvdW5kICcke3R5cGUyfScgb2YgdGhlIHR5cGUgdmFyaWFibGUgJyR7bmFtZX0nIG9uICcke25hbWUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIlRyeSBjaGFuZ2luZyB0eXBlIGFyZ3VtZW50cyBzbyB0aGF0IHRoZXkgY29uZm9ybSB0byB0aGUgYm91bmRzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgJ3R5cGUnOiBfdHlwZSwKICAgICAgICAndHlwZTInOiBfdHlwZTIsCiAgICAgICAgJ25hbWUnOiBuYW1lLAogICAgICAgICduYW1lMic6IG5hbWUyCiAgICAgIH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUgX3R5cGUyLAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lMik+IHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5SZXR1cm5UeXBlID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICAgICAgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUeXBlIGFyZ3VtZW50ICcjdHlwZScgZG9lc24ndCBjb25mb3JtIHRvIHRoZSBib3VuZCAnI3R5cGUyJyBvZiB0aGUgdHlwZSB2YXJpYWJsZSAnI25hbWUnIG9uICcjbmFtZTInIGluIHRoZSByZXR1cm4gdHlwZS4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IGNoYW5naW5nIHR5cGUgYXJndW1lbnRzIHNvIHRoYXQgdGhleSBjb25mb3JtIHRvIHRoZSBib3VuZHMuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbmNvcnJlY3RUeXBlQXJndW1lbnRJblJldHVyblR5cGUpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4KICAgIGNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJblJldHVyblR5cGUgPSBjb25zdCBDb2RlPAogICAgICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICAgICAgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgICAgICJJbmNvcnJlY3RUeXBlQXJndW1lbnRJblJldHVyblR5cGUiLAogICAgICAgIHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5SZXR1cm5UeXBlLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJUWVBFX0FSR1VNRU5UX05PVF9NQVRDSElOR19CT1VORFMiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5SZXR1cm5UeXBlKAogICAgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKG5hbWUyLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lMiA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZTIpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUluY29ycmVjdFR5cGVBcmd1bWVudEluUmV0dXJuVHlwZSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlR5cGUgYXJndW1lbnQgJyR7dHlwZX0nIGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgYm91bmQgJyR7dHlwZTJ9JyBvZiB0aGUgdHlwZSB2YXJpYWJsZSAnJHtuYW1lfScgb24gJyR7bmFtZTJ9JyBpbiB0aGUgcmV0dXJuIHR5cGUuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIlRyeSBjaGFuZ2luZyB0eXBlIGFyZ3VtZW50cyBzbyB0aGF0IHRoZXkgY29uZm9ybSB0byB0aGUgYm91bmRzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgJ3R5cGUnOiBfdHlwZSwKICAgICAgICAndHlwZTInOiBfdHlwZTIsCiAgICAgICAgJ25hbWUnOiBuYW1lLAogICAgICAgICduYW1lMic6IG5hbWUyCiAgICAgIH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUgX3R5cGUyLAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIFN0cmluZyBuYW1lMiwKICAgICAgICBTdHJpbmcgbmFtZTMsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWU0KT4gdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJblN1cGVydHlwZSA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsCiAgICAgICAgICAgIFN0cmluZyBuYW1lMiwgU3RyaW5nIG5hbWUzLCBTdHJpbmcgbmFtZTQpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVHlwZSBhcmd1bWVudCAnI3R5cGUnIGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgYm91bmQgJyN0eXBlMicgb2YgdGhlIHR5cGUgdmFyaWFibGUgJyNuYW1lJyBvbiAnI25hbWUyJyBpbiB0aGUgc3VwZXJ0eXBlICcjbmFtZTMnIG9mIGNsYXNzICcjbmFtZTQnLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgY2hhbmdpbmcgdHlwZSBhcmd1bWVudHMgc28gdGhhdCB0aGV5IGNvbmZvcm0gdG8gdGhlIGJvdW5kcy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0luY29ycmVjdFR5cGVBcmd1bWVudEluU3VwZXJ0eXBlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZSwKICAgICAgICAgICAgU3RyaW5nIG5hbWUyLCBTdHJpbmcgbmFtZTMsIFN0cmluZyBuYW1lNCk+CiAgICBjb2RlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGUgPSBjb25zdCBDb2RlPAogICAgICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lLAogICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUyLCBTdHJpbmcgbmFtZTMsIFN0cmluZyBuYW1lNCk+KAogICAgICAgICJJbmNvcnJlY3RUeXBlQXJndW1lbnRJblN1cGVydHlwZSIsCiAgICAgICAgdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJblN1cGVydHlwZSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVFlQRV9BUkdVTUVOVF9OT1RfTUFUQ0hJTkdfQk9VTkRTIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0luY29ycmVjdFR5cGVBcmd1bWVudEluU3VwZXJ0eXBlKERhcnRUeXBlIF90eXBlLAogICAgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyLCBTdHJpbmcgbmFtZTMsIFN0cmluZyBuYW1lNCkgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKG5hbWUyLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lMiA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZTIpOwogIGlmIChuYW1lMy5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTMgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUzKTsKICBpZiAobmFtZTQuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWU0ID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lNCk7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGUsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUeXBlIGFyZ3VtZW50ICcke3R5cGV9JyBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIGJvdW5kICcke3R5cGUyfScgb2YgdGhlIHR5cGUgdmFyaWFibGUgJyR7bmFtZX0nIG9uICcke25hbWUyfScgaW4gdGhlIHN1cGVydHlwZSAnJHtuYW1lM30nIG9mIGNsYXNzICcke25hbWU0fScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6CiAgICAgICAgICAiIiJUcnkgY2hhbmdpbmcgdHlwZSBhcmd1bWVudHMgc28gdGhhdCB0aGV5IGNvbmZvcm0gdG8gdGhlIGJvdW5kcy4iIiIsCiAgICAgIGFyZ3VtZW50czogewogICAgICAgICd0eXBlJzogX3R5cGUsCiAgICAgICAgJ3R5cGUyJzogX3R5cGUyLAogICAgICAgICduYW1lJzogbmFtZSwKICAgICAgICAnbmFtZTInOiBuYW1lMiwKICAgICAgICAnbmFtZTMnOiBuYW1lMywKICAgICAgICAnbmFtZTQnOiBuYW1lNAogICAgICB9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlIF90eXBlMiwKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBTdHJpbmcgbmFtZTIsCiAgICAgICAgU3RyaW5nIG5hbWUzLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lNCk+IHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGVJbmZlcnJlZCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZTIsCiAgICAgICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgICAgICBTdHJpbmcgbmFtZTIsCiAgICAgICAgICAgIFN0cmluZyBuYW1lMywKICAgICAgICAgICAgU3RyaW5nCiAgICAgICAgICAgICAgICBuYW1lNCk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJJbmZlcnJlZCB0eXBlIGFyZ3VtZW50ICcjdHlwZScgZG9lc24ndCBjb25mb3JtIHRvIHRoZSBib3VuZCAnI3R5cGUyJyBvZiB0aGUgdHlwZSB2YXJpYWJsZSAnI25hbWUnIG9uICcjbmFtZTInIGluIHRoZSBzdXBlcnR5cGUgJyNuYW1lMycgb2YgY2xhc3MgJyNuYW1lNCcuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBzcGVjaWZ5aW5nIHR5cGUgYXJndW1lbnRzIGV4cGxpY2l0bHkgc28gdGhhdCB0aGV5IGNvbmZvcm0gdG8gdGhlIGJvdW5kcy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0luY29ycmVjdFR5cGVBcmd1bWVudEluU3VwZXJ0eXBlSW5mZXJyZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lLAogICAgICAgICAgICBTdHJpbmcgbmFtZTIsIFN0cmluZyBuYW1lMywgU3RyaW5nIG5hbWU0KT4KICAgIGNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJblN1cGVydHlwZUluZmVycmVkID0gY29uc3QgQ29kZTwKICAgICAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZSwKICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lMiwgU3RyaW5nIG5hbWUzLCBTdHJpbmcgbmFtZTQpPigKICAgICAgICAiSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGVJbmZlcnJlZCIsCiAgICAgICAgdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJblN1cGVydHlwZUluZmVycmVkLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJUWVBFX0FSR1VNRU5UX05PVF9NQVRDSElOR19CT1VORFMiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGVJbmZlcnJlZChEYXJ0VHlwZSBfdHlwZSwKICAgIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMiwgU3RyaW5nIG5hbWUzLCBTdHJpbmcgbmFtZTQpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIGlmIChuYW1lMi5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTIgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUyKTsKICBpZiAobmFtZTMuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUzID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMyk7CiAgaWYgKG5hbWU0LmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lNCA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZTQpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUluY29ycmVjdFR5cGVBcmd1bWVudEluU3VwZXJ0eXBlSW5mZXJyZWQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJJbmZlcnJlZCB0eXBlIGFyZ3VtZW50ICcke3R5cGV9JyBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIGJvdW5kICcke3R5cGUyfScgb2YgdGhlIHR5cGUgdmFyaWFibGUgJyR7bmFtZX0nIG9uICcke25hbWUyfScgaW4gdGhlIHN1cGVydHlwZSAnJHtuYW1lM30nIG9mIGNsYXNzICcke25hbWU0fScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6CiAgICAgICAgICAiIiJUcnkgc3BlY2lmeWluZyB0eXBlIGFyZ3VtZW50cyBleHBsaWNpdGx5IHNvIHRoYXQgdGhleSBjb25mb3JtIHRvIHRoZSBib3VuZHMuIiIiLAogICAgICBhcmd1bWVudHM6IHsKICAgICAgICAndHlwZSc6IF90eXBlLAogICAgICAgICd0eXBlMic6IF90eXBlMiwKICAgICAgICAnbmFtZSc6IG5hbWUsCiAgICAgICAgJ25hbWUyJzogbmFtZTIsCiAgICAgICAgJ25hbWUzJzogbmFtZTMsCiAgICAgICAgJ25hbWU0JzogbmFtZTQKICAgICAgfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBEYXJ0VHlwZSBfdHlwZSwKICAgICAgICBEYXJ0VHlwZSBfdHlwZTIsCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUyKT4gdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJbmZlcnJlZCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiSW5mZXJyZWQgdHlwZSBhcmd1bWVudCAnI3R5cGUnIGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgYm91bmQgJyN0eXBlMicgb2YgdGhlIHR5cGUgdmFyaWFibGUgJyNuYW1lJyBvbiAnI25hbWUyJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IHNwZWNpZnlpbmcgdHlwZSBhcmd1bWVudHMgZXhwbGljaXRseSBzbyB0aGF0IHRoZXkgY29uZm9ybSB0byB0aGUgYm91bmRzLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5mZXJyZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4KICAgIGNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJbmZlcnJlZCA9IGNvbnN0IENvZGU8CiAgICAgICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICAgICAgIkluY29ycmVjdFR5cGVBcmd1bWVudEluZmVycmVkIiwgdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJbmZlcnJlZCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVFlQRV9BUkdVTUVOVF9OT1RfTUFUQ0hJTkdfQk9VTkRTIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0luY29ycmVjdFR5cGVBcmd1bWVudEluZmVycmVkKAogICAgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKG5hbWUyLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lMiA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZTIpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUluY29ycmVjdFR5cGVBcmd1bWVudEluZmVycmVkLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiSW5mZXJyZWQgdHlwZSBhcmd1bWVudCAnJHt0eXBlfScgZG9lc24ndCBjb25mb3JtIHRvIHRoZSBib3VuZCAnJHt0eXBlMn0nIG9mIHRoZSB0eXBlIHZhcmlhYmxlICcke25hbWV9JyBvbiAnJHtuYW1lMn0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgdGlwOiAiIiJUcnkgc3BlY2lmeWluZyB0eXBlIGFyZ3VtZW50cyBleHBsaWNpdGx5IHNvIHRoYXQgdGhleSBjb25mb3JtIHRvIHRoZSBib3VuZHMuIiIiLAogICAgICBhcmd1bWVudHM6IHsKICAgICAgICAndHlwZSc6IF90eXBlLAogICAgICAgICd0eXBlMic6IF90eXBlMiwKICAgICAgICAnbmFtZSc6IG5hbWUsCiAgICAgICAgJ25hbWUyJzogbmFtZTIKICAgICAgfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBEYXJ0VHlwZSBfdHlwZSwKICAgICAgICBEYXJ0VHlwZSBfdHlwZTIsCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgRGFydFR5cGUgX3R5cGUzLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lMik+IHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50UXVhbGlmaWVkID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgICAgIERhcnRUeXBlIF90eXBlMiwKICAgICAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgICAgIERhcnRUeXBlIF90eXBlMywKICAgICAgICAgICAgU3RyaW5nCiAgICAgICAgICAgICAgICBuYW1lMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUeXBlIGFyZ3VtZW50ICcjdHlwZScgZG9lc24ndCBjb25mb3JtIHRvIHRoZSBib3VuZCAnI3R5cGUyJyBvZiB0aGUgdHlwZSB2YXJpYWJsZSAnI25hbWUnIG9uICcjdHlwZTMuI25hbWUyJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IGNoYW5naW5nIHR5cGUgYXJndW1lbnRzIHNvIHRoYXQgdGhleSBjb25mb3JtIHRvIHRoZSBib3VuZHMuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lLAogICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZTMsIFN0cmluZyBuYW1lMik+IGNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWQgPQogICAgY29uc3QgQ29kZTwKICAgICAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZSwKICAgICAgICAgICAgICAgIERhcnRUeXBlIF90eXBlMywgU3RyaW5nIG5hbWUyKT4oCiAgICAgICAgIkluY29ycmVjdFR5cGVBcmd1bWVudFF1YWxpZmllZCIsCiAgICAgICAgdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlRZUEVfQVJHVU1FTlRfTk9UX01BVENISU5HX0JPVU5EUyJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWQoRGFydFR5cGUgX3R5cGUsCiAgICBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZTMsIFN0cmluZyBuYW1lMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUzUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTMpOwogIGlmIChuYW1lMi5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTIgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUzID0gdHlwZTNQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUeXBlIGFyZ3VtZW50ICcke3R5cGV9JyBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIGJvdW5kICcke3R5cGUyfScgb2YgdGhlIHR5cGUgdmFyaWFibGUgJyR7bmFtZX0nIG9uICcke3R5cGUzfS4ke25hbWUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIlRyeSBjaGFuZ2luZyB0eXBlIGFyZ3VtZW50cyBzbyB0aGF0IHRoZXkgY29uZm9ybSB0byB0aGUgYm91bmRzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgJ3R5cGUnOiBfdHlwZSwKICAgICAgICAndHlwZTInOiBfdHlwZTIsCiAgICAgICAgJ25hbWUnOiBuYW1lLAogICAgICAgICd0eXBlMyc6IF90eXBlMywKICAgICAgICAnbmFtZTInOiBuYW1lMgogICAgICB9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlIF90eXBlMiwKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBEYXJ0VHlwZSBfdHlwZTMsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUyKT4gdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWRJbmZlcnJlZCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsCiAgICAgICAgICAgIERhcnRUeXBlIF90eXBlMywgU3RyaW5nIG5hbWUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkluZmVycmVkIHR5cGUgYXJndW1lbnQgJyN0eXBlJyBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIGJvdW5kICcjdHlwZTInIG9mIHRoZSB0eXBlIHZhcmlhYmxlICcjbmFtZScgb24gJyN0eXBlMy4jbmFtZTInLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgc3BlY2lmeWluZyB0eXBlIGFyZ3VtZW50cyBleHBsaWNpdGx5IHNvIHRoYXQgdGhleSBjb25mb3JtIHRvIHRoZSBib3VuZHMuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWRJbmZlcnJlZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsCiAgICAgICAgICAgIERhcnRUeXBlIF90eXBlMywgU3RyaW5nIG5hbWUyKT4KICAgIGNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWRJbmZlcnJlZCA9IGNvbnN0IENvZGU8CiAgICAgICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsCiAgICAgICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZTMsIFN0cmluZyBuYW1lMik+KAogICAgICAgICJJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWRJbmZlcnJlZCIsCiAgICAgICAgdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWRJbmZlcnJlZCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVFlQRV9BUkdVTUVOVF9OT1RfTUFUQ0hJTkdfQk9VTkRTIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0luY29ycmVjdFR5cGVBcmd1bWVudFF1YWxpZmllZEluZmVycmVkKERhcnRUeXBlIF90eXBlLAogICAgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUzLCBTdHJpbmcgbmFtZTIpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIExpc3Q8T2JqZWN0PiB0eXBlM1BhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUzKTsKICBpZiAobmFtZTIuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUyID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMik7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMyA9IHR5cGUzUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW5jb3JyZWN0VHlwZUFyZ3VtZW50UXVhbGlmaWVkSW5mZXJyZWQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJJbmZlcnJlZCB0eXBlIGFyZ3VtZW50ICcke3R5cGV9JyBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIGJvdW5kICcke3R5cGUyfScgb2YgdGhlIHR5cGUgdmFyaWFibGUgJyR7bmFtZX0nIG9uICcke3R5cGUzfS4ke25hbWUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIlRyeSBzcGVjaWZ5aW5nIHR5cGUgYXJndW1lbnRzIGV4cGxpY2l0bHkgc28gdGhhdCB0aGV5IGNvbmZvcm0gdG8gdGhlIGJvdW5kcy4iIiIsCiAgICAgIGFyZ3VtZW50czogewogICAgICAgICd0eXBlJzogX3R5cGUsCiAgICAgICAgJ3R5cGUyJzogX3R5cGUyLAogICAgICAgICduYW1lJzogbmFtZSwKICAgICAgICAndHlwZTMnOiBfdHlwZTMsCiAgICAgICAgJ25hbWUyJzogbmFtZTIKICAgICAgfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUluY29ycmVjdFR5cGVBcmd1bWVudFZhcmlhYmxlID0KICAgIG1lc3NhZ2VJbmNvcnJlY3RUeXBlQXJndW1lbnRWYXJpYWJsZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbmNvcnJlY3RUeXBlQXJndW1lbnRWYXJpYWJsZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkluY29ycmVjdFR5cGVBcmd1bWVudFZhcmlhYmxlIiwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0LAogICAgbWVzc2FnZTogciIiIlRoaXMgaXMgdGhlIHR5cGUgdmFyaWFibGUgd2hvc2UgYm91bmQgaXNuJ3QgY29uZm9ybWVkIHRvLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4gdGVtcGxhdGVJbmZlcnJlZFBhY2thZ2VVcmkgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkludGVycHJldGluZyB0aGlzIGFzIHBhY2thZ2UgVVJJLCAnI3VyaScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW5mZXJyZWRQYWNrYWdlVXJpKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+IGNvZGVJbmZlcnJlZFBhY2thZ2VVcmkgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4oCiAgICAgICAgIkluZmVycmVkUGFja2FnZVVyaSIsIHRlbXBsYXRlSW5mZXJyZWRQYWNrYWdlVXJpLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS53YXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbmZlcnJlZFBhY2thZ2VVcmkoVXJpIHVyaV8pIHsKICBTdHJpbmcgdXJpID0gcmVsYXRpdml6ZVVyaSh1cmlfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUluZmVycmVkUGFja2FnZVVyaSwKICAgICAgbWVzc2FnZTogIiIiSW50ZXJwcmV0aW5nIHRoaXMgYXMgcGFja2FnZSBVUkksICcke3VyaX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3VyaSc6IHVyaV99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW5oZXJpdGVkTWVtYmVyc0NvbmZsaWN0ID0gbWVzc2FnZUluaGVyaXRlZE1lbWJlcnNDb25mbGljdDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3QgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3QiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTkZMSUNUU19XSVRIX0lOSEVSSVRFRF9NRU1CRVIiXSwKICAgIG1lc3NhZ2U6IHIiIiJDYW4ndCBpbmhlcml0IG1lbWJlcnMgdGhhdCBjb25mbGljdCB3aXRoIGVhY2ggb3RoZXIuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUluaGVyaXRlZE1lbWJlcnNDb25mbGljdENhdXNlMSA9CiAgICBtZXNzYWdlSW5oZXJpdGVkTWVtYmVyc0NvbmZsaWN0Q2F1c2UxOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUluaGVyaXRlZE1lbWJlcnNDb25mbGljdENhdXNlMSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkluaGVyaXRlZE1lbWJlcnNDb25mbGljdENhdXNlMSIsCiAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCwKICAgIG1lc3NhZ2U6IHIiIiJUaGlzIGlzIG9uZSBpbmhlcml0ZWQgbWVtYmVyLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3RDYXVzZTIgPQogICAgbWVzc2FnZUluaGVyaXRlZE1lbWJlcnNDb25mbGljdENhdXNlMjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3RDYXVzZTIgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3RDYXVzZTIiLAogICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQsCiAgICBtZXNzYWdlOiByIiIiVGhpcyBpcyB0aGUgb3RoZXIgaW5oZXJpdGVkIG1lbWJlci4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBzdHJpbmcsCiAgICAgICAgVXJpCiAgICAgICAgICAgIHVyaV8pPiB0ZW1wbGF0ZUluaXRpYWxpemVGcm9tRGlsbE5vdFNlbGZDb250YWluZWQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFVyaSB1cmlfKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRyaWVkIHRvIGluaXRpYWxpemUgZnJvbSBhIHByZXZpb3VzIGNvbXBpbGF0aW9uICgjc3RyaW5nKSwgYnV0IHRoZSBmaWxlIHdhcyBub3Qgc2VsZi1jb250YWluZWQuIFRoaXMgbWlnaHQgYmUgYSBidWcuCgpUaGUgRGFydCB0ZWFtIHdvdWxkIGdyZWF0bHkgYXBwcmVjaWF0ZSBpdCBpZiB5b3Ugd291bGQgdGFrZSBhIG1vbWVudCB0byByZXBvcnQgdGhpcyBwcm9ibGVtIGF0IGh0dHA6Ly9kYXJ0YnVnLmNvbS9uZXcuCklmIHlvdSBhcmUgY29tZm9ydGFibGUgd2l0aCBpdCwgaXQgd291bGQgaW1wcm92ZSB0aGUgY2hhbmNlcyBvZiBmaXhpbmcgYW55IGJ1ZyBpZiB5b3UgaW5jbHVkZWQgdGhlIGZpbGUgI3VyaSBpbiB5b3VyIGVycm9yIHJlcG9ydCwgYnV0IGJlIGF3YXJlIHRoYXQgdGhpcyBmaWxlIGluY2x1ZGVzIHlvdXIgc291cmNlIGNvZGUuCkVpdGhlciB3YXksIHlvdSBzaG91bGQgcHJvYmFibHkgZGVsZXRlIHRoZSBmaWxlIHNvIGl0IGRvZXNuJ3QgdXNlIHVubmVjZXNzYXJ5IGRpc2sgc3BhY2UuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbml0aWFsaXplRnJvbURpbGxOb3RTZWxmQ29udGFpbmVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBVcmkgdXJpXyk+CiAgICBjb2RlSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgVXJpIHVyaV8pPigKICAgICAgICAiSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZCIsCiAgICAgICAgdGVtcGxhdGVJbml0aWFsaXplRnJvbURpbGxOb3RTZWxmQ29udGFpbmVkLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS53YXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbml0aWFsaXplRnJvbURpbGxOb3RTZWxmQ29udGFpbmVkKAogICAgU3RyaW5nIHN0cmluZywgVXJpIHVyaV8pIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRyaWVkIHRvIGluaXRpYWxpemUgZnJvbSBhIHByZXZpb3VzIGNvbXBpbGF0aW9uICgke3N0cmluZ30pLCBidXQgdGhlIGZpbGUgd2FzIG5vdCBzZWxmLWNvbnRhaW5lZC4gVGhpcyBtaWdodCBiZSBhIGJ1Zy4KClRoZSBEYXJ0IHRlYW0gd291bGQgZ3JlYXRseSBhcHByZWNpYXRlIGl0IGlmIHlvdSB3b3VsZCB0YWtlIGEgbW9tZW50IHRvIHJlcG9ydCB0aGlzIHByb2JsZW0gYXQgaHR0cDovL2RhcnRidWcuY29tL25ldy4KSWYgeW91IGFyZSBjb21mb3J0YWJsZSB3aXRoIGl0LCBpdCB3b3VsZCBpbXByb3ZlIHRoZSBjaGFuY2VzIG9mIGZpeGluZyBhbnkgYnVnIGlmIHlvdSBpbmNsdWRlZCB0aGUgZmlsZSAke3VyaX0gaW4geW91ciBlcnJvciByZXBvcnQsIGJ1dCBiZSBhd2FyZSB0aGF0IHRoaXMgZmlsZSBpbmNsdWRlcyB5b3VyIHNvdXJjZSBjb2RlLgpFaXRoZXIgd2F5LCB5b3Ugc2hvdWxkIHByb2JhYmx5IGRlbGV0ZSB0aGUgZmlsZSBzbyBpdCBkb2Vzbid0IHVzZSB1bm5lY2Vzc2FyeSBkaXNrIHNwYWNlLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZywgJ3VyaSc6IHVyaV99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4KICAgIHRlbXBsYXRlSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZE5vRHVtcCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJUcmllZCB0byBpbml0aWFsaXplIGZyb20gYSBwcmV2aW91cyBjb21waWxhdGlvbiAoI3N0cmluZyksIGJ1dCB0aGUgZmlsZSB3YXMgbm90IHNlbGYtY29udGFpbmVkLiBUaGlzIG1pZ2h0IGJlIGEgYnVnLgoKVGhlIERhcnQgdGVhbSB3b3VsZCBncmVhdGx5IGFwcHJlY2lhdGUgaXQgaWYgeW91IHdvdWxkIHRha2UgYSBtb21lbnQgdG8gcmVwb3J0IHRoaXMgcHJvYmxlbSBhdCBodHRwOi8vZGFydGJ1Zy5jb20vbmV3LiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0luaXRpYWxpemVGcm9tRGlsbE5vdFNlbGZDb250YWluZWROb0R1bXApOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPgogICAgY29kZUluaXRpYWxpemVGcm9tRGlsbE5vdFNlbGZDb250YWluZWROb0R1bXAgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICAiSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZE5vRHVtcCIsCiAgICAgICAgdGVtcGxhdGVJbml0aWFsaXplRnJvbURpbGxOb3RTZWxmQ29udGFpbmVkTm9EdW1wLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS53YXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbml0aWFsaXplRnJvbURpbGxOb3RTZWxmQ29udGFpbmVkTm9EdW1wKFN0cmluZyBzdHJpbmcpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZE5vRHVtcCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRyaWVkIHRvIGluaXRpYWxpemUgZnJvbSBhIHByZXZpb3VzIGNvbXBpbGF0aW9uICgke3N0cmluZ30pLCBidXQgdGhlIGZpbGUgd2FzIG5vdCBzZWxmLWNvbnRhaW5lZC4gVGhpcyBtaWdodCBiZSBhIGJ1Zy4KClRoZSBEYXJ0IHRlYW0gd291bGQgZ3JlYXRseSBhcHByZWNpYXRlIGl0IGlmIHlvdSB3b3VsZCB0YWtlIGEgbW9tZW50IHRvIHJlcG9ydCB0aGlzIHByb2JsZW0gYXQgaHR0cDovL2RhcnRidWcuY29tL25ldy4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmd9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBzdHJpbmcsCiAgICAgICAgU3RyaW5nIHN0cmluZzIsCiAgICAgICAgU3RyaW5nIHN0cmluZzMsCiAgICAgICAgVXJpCiAgICAgICAgICAgIHVyaV8pPiB0ZW1wbGF0ZUluaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICAgICAgU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIsIFN0cmluZyBzdHJpbmczLCBVcmkgdXJpXyk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUcmllZCB0byBpbml0aWFsaXplIGZyb20gYSBwcmV2aW91cyBjb21waWxhdGlvbiAoI3N0cmluZyksIGJ1dCBjb3VsZG4ndC4KRXJyb3IgbWVzc2FnZSB3YXMgJyNzdHJpbmcyJy4KU3RhY2t0cmFjZSBpbmNsdWRlZCAnI3N0cmluZzMnLgpUaGlzIG1pZ2h0IGJlIGEgYnVnLgoKVGhlIERhcnQgdGVhbSB3b3VsZCBncmVhdGx5IGFwcHJlY2lhdGUgaXQgaWYgeW91IHdvdWxkIHRha2UgYSBtb21lbnQgdG8gcmVwb3J0IHRoaXMgcHJvYmxlbSBhdCBodHRwOi8vZGFydGJ1Zy5jb20vbmV3LgpJZiB5b3UgYXJlIGNvbWZvcnRhYmxlIHdpdGggaXQsIGl0IHdvdWxkIGltcHJvdmUgdGhlIGNoYW5jZXMgb2YgZml4aW5nIGFueSBidWcgaWYgeW91IGluY2x1ZGVkIHRoZSBmaWxlICN1cmkgaW4geW91ciBlcnJvciByZXBvcnQsIGJ1dCBiZSBhd2FyZSB0aGF0IHRoaXMgZmlsZSBpbmNsdWRlcyB5b3VyIHNvdXJjZSBjb2RlLgpFaXRoZXIgd2F5LCB5b3Ugc2hvdWxkIHByb2JhYmx5IGRlbGV0ZSB0aGUgZmlsZSBzbyBpdCBkb2Vzbid0IHVzZSB1bm5lY2Vzc2FyeSBkaXNrIHNwYWNlLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW5pdGlhbGl6ZUZyb21EaWxsVW5rbm93blByb2JsZW0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICBTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMiwgU3RyaW5nIHN0cmluZzMsIFVyaSB1cmlfKT4KICAgIGNvZGVJbml0aWFsaXplRnJvbURpbGxVbmtub3duUHJvYmxlbSA9IGNvbnN0IENvZGU8CiAgICAgICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgICAgICAgICBTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMiwgU3RyaW5nIHN0cmluZzMsIFVyaSB1cmlfKT4oCiAgICAgICAgIkluaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtIiwKICAgICAgICB0ZW1wbGF0ZUluaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS53YXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbml0aWFsaXplRnJvbURpbGxVbmtub3duUHJvYmxlbSgKICAgIFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyLCBTdHJpbmcgc3RyaW5nMywgVXJpIHVyaV8pIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIGlmIChzdHJpbmcyLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIGlmIChzdHJpbmczLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW5pdGlhbGl6ZUZyb21EaWxsVW5rbm93blByb2JsZW0sCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUcmllZCB0byBpbml0aWFsaXplIGZyb20gYSBwcmV2aW91cyBjb21waWxhdGlvbiAoJHtzdHJpbmd9KSwgYnV0IGNvdWxkbid0LgpFcnJvciBtZXNzYWdlIHdhcyAnJHtzdHJpbmcyfScuClN0YWNrdHJhY2UgaW5jbHVkZWQgJyR7c3RyaW5nM30nLgpUaGlzIG1pZ2h0IGJlIGEgYnVnLgoKVGhlIERhcnQgdGVhbSB3b3VsZCBncmVhdGx5IGFwcHJlY2lhdGUgaXQgaWYgeW91IHdvdWxkIHRha2UgYSBtb21lbnQgdG8gcmVwb3J0IHRoaXMgcHJvYmxlbSBhdCBodHRwOi8vZGFydGJ1Zy5jb20vbmV3LgpJZiB5b3UgYXJlIGNvbWZvcnRhYmxlIHdpdGggaXQsIGl0IHdvdWxkIGltcHJvdmUgdGhlIGNoYW5jZXMgb2YgZml4aW5nIGFueSBidWcgaWYgeW91IGluY2x1ZGVkIHRoZSBmaWxlICR7dXJpfSBpbiB5b3VyIGVycm9yIHJlcG9ydCwgYnV0IGJlIGF3YXJlIHRoYXQgdGhpcyBmaWxlIGluY2x1ZGVzIHlvdXIgc291cmNlIGNvZGUuCkVpdGhlciB3YXksIHlvdSBzaG91bGQgcHJvYmFibHkgZGVsZXRlIHRoZSBmaWxlIHNvIGl0IGRvZXNuJ3QgdXNlIHVubmVjZXNzYXJ5IGRpc2sgc3BhY2UuIiIiLAogICAgICBhcmd1bWVudHM6IHsKICAgICAgICAnc3RyaW5nJzogc3RyaW5nLAogICAgICAgICdzdHJpbmcyJzogc3RyaW5nMiwKICAgICAgICAnc3RyaW5nMyc6IHN0cmluZzMsCiAgICAgICAgJ3VyaSc6IHVyaV8KICAgICAgfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIsIFN0cmluZyBzdHJpbmczKT4KICAgIHRlbXBsYXRlSW5pdGlhbGl6ZUZyb21EaWxsVW5rbm93blByb2JsZW1Ob0R1bXAgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMiwgU3RyaW5nIHN0cmluZzMpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJUcmllZCB0byBpbml0aWFsaXplIGZyb20gYSBwcmV2aW91cyBjb21waWxhdGlvbiAoI3N0cmluZyksIGJ1dCBjb3VsZG4ndC4KRXJyb3IgbWVzc2FnZSB3YXMgJyNzdHJpbmcyJy4KU3RhY2t0cmFjZSBpbmNsdWRlZCAnI3N0cmluZzMnLgpUaGlzIG1pZ2h0IGJlIGEgYnVnLgoKVGhlIERhcnQgdGVhbSB3b3VsZCBncmVhdGx5IGFwcHJlY2lhdGUgaXQgaWYgeW91IHdvdWxkIHRha2UgYSBtb21lbnQgdG8gcmVwb3J0IHRoaXMgcHJvYmxlbSBhdCBodHRwOi8vZGFydGJ1Zy5jb20vbmV3LiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0luaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtTm9EdW1wKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMiwgU3RyaW5nIHN0cmluZzMpPgogICAgY29kZUluaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtTm9EdW1wID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMiwgU3RyaW5nIHN0cmluZzMpPigKICAgICAgICAiSW5pdGlhbGl6ZUZyb21EaWxsVW5rbm93blByb2JsZW1Ob0R1bXAiLAogICAgICAgIHRlbXBsYXRlSW5pdGlhbGl6ZUZyb21EaWxsVW5rbm93blByb2JsZW1Ob0R1bXAsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5Lndhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0luaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtTm9EdW1wKAogICAgU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIsIFN0cmluZyBzdHJpbmczKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICBpZiAoc3RyaW5nMi5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICBpZiAoc3RyaW5nMy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUluaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtTm9EdW1wLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVHJpZWQgdG8gaW5pdGlhbGl6ZSBmcm9tIGEgcHJldmlvdXMgY29tcGlsYXRpb24gKCR7c3RyaW5nfSksIGJ1dCBjb3VsZG4ndC4KRXJyb3IgbWVzc2FnZSB3YXMgJyR7c3RyaW5nMn0nLgpTdGFja3RyYWNlIGluY2x1ZGVkICcke3N0cmluZzN9Jy4KVGhpcyBtaWdodCBiZSBhIGJ1Zy4KClRoZSBEYXJ0IHRlYW0gd291bGQgZ3JlYXRseSBhcHByZWNpYXRlIGl0IGlmIHlvdSB3b3VsZCB0YWtlIGEgbW9tZW50IHRvIHJlcG9ydCB0aGlzIHByb2JsZW0gYXQgaHR0cDovL2RhcnRidWcuY29tL25ldy4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmcsICdzdHJpbmcyJzogc3RyaW5nMiwgJ3N0cmluZzMnOiBzdHJpbmczfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUluaXRpYWxpemVkVmFyaWFibGVJbkZvckVhY2ggPQogICAgbWVzc2FnZUluaXRpYWxpemVkVmFyaWFibGVJbkZvckVhY2g7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW5pdGlhbGl6ZWRWYXJpYWJsZUluRm9yRWFjaCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkluaXRpYWxpemVkVmFyaWFibGVJbkZvckVhY2giLAogICAgaW5kZXg6IDgyLAogICAgbWVzc2FnZTogciIiIlRoZSBsb29wIHZhcmlhYmxlIGluIGEgZm9yLWVhY2ggbG9vcCBjYW4ndCBiZSBpbml0aWFsaXplZC4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSByZW1vdmluZyB0aGUgaW5pdGlhbGl6ZXIsIG9yIHVzaW5nIGEgZGlmZmVyZW50IGtpbmQgb2YgbG9vcC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUluaXRpYWxpemVyRm9yU3RhdGljRmllbGQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIicjbmFtZScgaXNuJ3QgYW4gaW5zdGFuY2UgZmllbGQgb2YgdGhpcyBjbGFzcy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbml0aWFsaXplckZvclN0YXRpY0ZpZWxkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVJbml0aWFsaXplckZvclN0YXRpY0ZpZWxkID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJJbml0aWFsaXplckZvclN0YXRpY0ZpZWxkIiwgdGVtcGxhdGVJbml0aWFsaXplckZvclN0YXRpY0ZpZWxkLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTklUSUFMSVpFUl9GT1JfU1RBVElDX0ZJRUxEIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0luaXRpYWxpemVyRm9yU3RhdGljRmllbGQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbml0aWFsaXplckZvclN0YXRpY0ZpZWxkLAogICAgICBtZXNzYWdlOiAiIiInJHtuYW1lfScgaXNuJ3QgYW4gaW5zdGFuY2UgZmllbGQgb2YgdGhpcyBjbGFzcy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUpPiB0ZW1wbGF0ZUluaXRpYWxpemVyT3V0c2lkZUNvbnN0cnVjdG9yID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJPbmx5IGNvbnN0cnVjdG9ycyBjYW4gaGF2ZSBpbml0aWFsaXplcnMsIGFuZCAnI25hbWUnIGlzIG5vdCBhIGNvbnN0cnVjdG9yLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW5pdGlhbGl6ZXJPdXRzaWRlQ29uc3RydWN0b3IpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUluaXRpYWxpemVyT3V0c2lkZUNvbnN0cnVjdG9yID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJJbml0aWFsaXplck91dHNpZGVDb25zdHJ1Y3RvciIsIHRlbXBsYXRlSW5pdGlhbGl6ZXJPdXRzaWRlQ29uc3RydWN0b3IsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOSVRJQUxJWkVSX09VVFNJREVfQ09OU1RSVUNUT1IiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW5pdGlhbGl6ZXJPdXRzaWRlQ29uc3RydWN0b3IoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbml0aWFsaXplck91dHNpZGVDb25zdHJ1Y3RvciwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIk9ubHkgY29uc3RydWN0b3JzIGNhbiBoYXZlIGluaXRpYWxpemVycywgYW5kICcke25hbWV9JyBpcyBub3QgYSBjb25zdHJ1Y3Rvci4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVJbml0aWFsaXppbmdGb3JtYWxUeXBlTWlzbWF0Y2ggPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSB0eXBlIG9mIHBhcmFtZXRlciAnI25hbWUnLCAnI3R5cGUnIGlzIG5vdCBhIHN1YnR5cGUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQncyB0eXBlLCAnI3R5cGUyJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IGNoYW5naW5nIHRoZSB0eXBlIG9mIHBhcmFtZXRlciAnI25hbWUnIHRvIGEgc3VidHlwZSBvZiAnI3R5cGUyJy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0luaXRpYWxpemluZ0Zvcm1hbFR5cGVNaXNtYXRjaCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPgogICAgY29kZUluaXRpYWxpemluZ0Zvcm1hbFR5cGVNaXNtYXRjaCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgICAgICAiSW5pdGlhbGl6aW5nRm9ybWFsVHlwZU1pc21hdGNoIiwKICAgICAgICB0ZW1wbGF0ZUluaXRpYWxpemluZ0Zvcm1hbFR5cGVNaXNtYXRjaCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9QQVJBTUVURVJfREVDTEFSQVRJT04iXSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbml0aWFsaXppbmdGb3JtYWxUeXBlTWlzbWF0Y2goCiAgICBTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW5pdGlhbGl6aW5nRm9ybWFsVHlwZU1pc21hdGNoLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIHR5cGUgb2YgcGFyYW1ldGVyICcke25hbWV9JywgJyR7dHlwZX0nIGlzIG5vdCBhIHN1YnR5cGUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQncyB0eXBlLCAnJHt0eXBlMn0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgdGlwOiAiIiJUcnkgY2hhbmdpbmcgdGhlIHR5cGUgb2YgcGFyYW1ldGVyICcke25hbWV9JyB0byBhIHN1YnR5cGUgb2YgJyR7dHlwZTJ9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ3R5cGUnOiBfdHlwZSwgJ3R5cGUyJzogX3R5cGUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUluaXRpYWxpemluZ0Zvcm1hbFR5cGVNaXNtYXRjaEZpZWxkID0KICAgIG1lc3NhZ2VJbml0aWFsaXppbmdGb3JtYWxUeXBlTWlzbWF0Y2hGaWVsZDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbml0aWFsaXppbmdGb3JtYWxUeXBlTWlzbWF0Y2hGaWVsZCA9CiAgICBjb25zdCBNZXNzYWdlQ29kZSgiSW5pdGlhbGl6aW5nRm9ybWFsVHlwZU1pc21hdGNoRmllbGQiLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0LAogICAgICAgIG1lc3NhZ2U6IHIiIiJUaGUgZmllbGQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgcGFyYW1ldGVyLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4gdGVtcGxhdGVJbnB1dEZpbGVOb3RGb3VuZCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiSW5wdXQgZmlsZSBub3QgZm91bmQ6ICN1cmkuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW5wdXRGaWxlTm90Rm91bmQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4gY29kZUlucHV0RmlsZU5vdEZvdW5kID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+KAogICJJbnB1dEZpbGVOb3RGb3VuZCIsCiAgdGVtcGxhdGVJbnB1dEZpbGVOb3RGb3VuZCwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnB1dEZpbGVOb3RGb3VuZChVcmkgdXJpXykgewogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW5wdXRGaWxlTm90Rm91bmQsCiAgICAgIG1lc3NhZ2U6ICIiIklucHV0IGZpbGUgbm90IGZvdW5kOiAke3VyaX0uIiIiLCBhcmd1bWVudHM6IHsndXJpJzogdXJpX30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIHN0cmluZyk+IHRlbXBsYXRlSW50ZWdlckxpdGVyYWxJc091dE9mUmFuZ2UgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIGludGVnZXIgbGl0ZXJhbCAjc3RyaW5nIGNhbid0IGJlIHJlcHJlc2VudGVkIGluIDY0IGJpdHMuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSB1c2luZyB0aGUgQmlnSW50IGNsYXNzIGlmIHlvdSBuZWVkIGFuIGludGVnZXIgbGFyZ2VyIHRoYW4gOSwyMjMsMzcyLDAzNiw4NTQsNzc1LDgwNyBvciBsZXNzIHRoYW4gLTksMjIzLDM3MiwwMzYsODU0LDc3NSw4MDguIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnRlZ2VyTGl0ZXJhbElzT3V0T2ZSYW5nZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+IGNvZGVJbnRlZ2VyTGl0ZXJhbElzT3V0T2ZSYW5nZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgICAgICJJbnRlZ2VyTGl0ZXJhbElzT3V0T2ZSYW5nZSIsIHRlbXBsYXRlSW50ZWdlckxpdGVyYWxJc091dE9mUmFuZ2UsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVEVHRVJfTElURVJBTF9PVVRfT0ZfUkFOR0UiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW50ZWdlckxpdGVyYWxJc091dE9mUmFuZ2UoU3RyaW5nIHN0cmluZykgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnRlZ2VyTGl0ZXJhbElzT3V0T2ZSYW5nZSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBpbnRlZ2VyIGxpdGVyYWwgJHtzdHJpbmd9IGNhbid0IGJlIHJlcHJlc2VudGVkIGluIDY0IGJpdHMuIiIiLAogICAgICB0aXA6CiAgICAgICAgICAiIiJUcnkgdXNpbmcgdGhlIEJpZ0ludCBjbGFzcyBpZiB5b3UgbmVlZCBhbiBpbnRlZ2VyIGxhcmdlciB0aGFuIDksMjIzLDM3MiwwMzYsODU0LDc3NSw4MDcgb3IgbGVzcyB0aGFuIC05LDIyMywzNzIsMDM2LDg1NCw3NzUsODA4LiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZ30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUpPiB0ZW1wbGF0ZUludGVyZmFjZUNoZWNrQ29udGV4dCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiQm90aCBtZW1iZXJzIGFyZSBpbmhlcml0ZWQgYnkgdGhlIG5vbi1hYnN0cmFjdCBjbGFzcyAnI25hbWUnLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW50ZXJmYWNlQ2hlY2tDb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVJbnRlcmZhY2VDaGVja0NvbnRleHQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkludGVyZmFjZUNoZWNrQ29udGV4dCIsIHRlbXBsYXRlSW50ZXJmYWNlQ2hlY2tDb250ZXh0LAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnRlcmZhY2VDaGVja0NvbnRleHQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnRlcmZhY2VDaGVja0NvbnRleHQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJCb3RoIG1lbWJlcnMgYXJlIGluaGVyaXRlZCBieSB0aGUgbm9uLWFic3RyYWN0IGNsYXNzICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbnRlcm5hbFByb2JsZW1BbHJlYWR5SW5pdGlhbGl6ZWQgPQogICAgbWVzc2FnZUludGVybmFsUHJvYmxlbUFscmVhZHlJbml0aWFsaXplZDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbnRlcm5hbFByb2JsZW1BbHJlYWR5SW5pdGlhbGl6ZWQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbnRlcm5hbFByb2JsZW1BbHJlYWR5SW5pdGlhbGl6ZWQiLAogICAgc2V2ZXJpdHk6IFNldmVyaXR5LmludGVybmFsUHJvYmxlbSwKICAgIG1lc3NhZ2U6IHIiIiJBdHRlbXB0IHRvIHNldCBpbml0aWFsaXplciBvbiBmaWVsZCB3aXRob3V0IGluaXRpYWxpemVyLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbnRlcm5hbFByb2JsZW1Cb2R5T25BYnN0cmFjdE1ldGhvZCA9CiAgICBtZXNzYWdlSW50ZXJuYWxQcm9ibGVtQm9keU9uQWJzdHJhY3RNZXRob2Q7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW50ZXJuYWxQcm9ibGVtQm9keU9uQWJzdHJhY3RNZXRob2QgPQogICAgY29uc3QgTWVzc2FnZUNvZGUoIkludGVybmFsUHJvYmxlbUJvZHlPbkFic3RyYWN0TWV0aG9kIiwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtLAogICAgICAgIG1lc3NhZ2U6IHIiIiJBdHRlbXB0aW5nIHRvIHNldCBib2R5IG9uIGFic3RyYWN0IG1ldGhvZC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8pPgogICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Db25zdHJ1Y3Rvck5vdEZvdW5kID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiTm8gY29uc3RydWN0b3IgbmFtZWQgJyNuYW1lJyBpbiAnI3VyaScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtQ29uc3RydWN0b3JOb3RGb3VuZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfKT4KICAgIGNvZGVJbnRlcm5hbFByb2JsZW1Db25zdHJ1Y3Rvck5vdEZvdW5kID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8pPigKICAgICAgICAiSW50ZXJuYWxQcm9ibGVtQ29uc3RydWN0b3JOb3RGb3VuZCIsCiAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Db25zdHJ1Y3Rvck5vdEZvdW5kLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbUNvbnN0cnVjdG9yTm90Rm91bmQoCiAgICBTdHJpbmcgbmFtZSwgVXJpIHVyaV8pIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnRlcm5hbFByb2JsZW1Db25zdHJ1Y3Rvck5vdEZvdW5kLAogICAgICBtZXNzYWdlOiAiIiJObyBjb25zdHJ1Y3RvciBuYW1lZCAnJHtuYW1lfScgaW4gJyR7dXJpfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICd1cmknOiB1cmlffSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+CiAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbUNvbnRleHRTZXZlcml0eSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJOb24tY29udGV4dCBtZXNzYWdlIGhhcyBjb250ZXh0IHNldmVyaXR5OiAjc3RyaW5nIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtQ29udGV4dFNldmVyaXR5KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4gY29kZUludGVybmFsUHJvYmxlbUNvbnRleHRTZXZlcml0eSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgICAgICJJbnRlcm5hbFByb2JsZW1Db250ZXh0U2V2ZXJpdHkiLAogICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtQ29udGV4dFNldmVyaXR5LAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbUNvbnRleHRTZXZlcml0eShTdHJpbmcgc3RyaW5nKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludGVybmFsUHJvYmxlbUNvbnRleHRTZXZlcml0eSwKICAgICAgbWVzc2FnZTogIiIiTm9uLWNvbnRleHQgbWVzc2FnZSBoYXMgY29udGV4dCBzZXZlcml0eTogJHtzdHJpbmd9IiIiLAogICAgICBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBzdHJpbmcpPgogICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1EZWJ1Z0Fib3J0ID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBzdHJpbmcpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJDb21waWxhdGlvbiBhYm9ydGVkIGR1ZSB0byBmYXRhbCAnI25hbWUnIGF0Ogojc3RyaW5nIiIiLCB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbURlYnVnQWJvcnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgc3RyaW5nKT4KICAgIGNvZGVJbnRlcm5hbFByb2JsZW1EZWJ1Z0Fib3J0ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIHN0cmluZyk+KAogICAgICAgICJJbnRlcm5hbFByb2JsZW1EZWJ1Z0Fib3J0IiwgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1EZWJ1Z0Fib3J0LAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbURlYnVnQWJvcnQoU3RyaW5nIG5hbWUsIFN0cmluZyBzdHJpbmcpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludGVybmFsUHJvYmxlbURlYnVnQWJvcnQsCiAgICAgIG1lc3NhZ2U6ICIiIkNvbXBpbGF0aW9uIGFib3J0ZWQgZHVlIHRvIGZhdGFsICcke25hbWV9JyBhdDoKJHtzdHJpbmd9IiIiLCBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICdzdHJpbmcnOiBzdHJpbmd9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW50ZXJuYWxQcm9ibGVtRXh0ZW5kaW5nVW5tb2RpZmlhYmxlU2NvcGUgPQogICAgbWVzc2FnZUludGVybmFsUHJvYmxlbUV4dGVuZGluZ1VubW9kaWZpYWJsZVNjb3BlOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUludGVybmFsUHJvYmxlbUV4dGVuZGluZ1VubW9kaWZpYWJsZVNjb3BlID0KICAgIGNvbnN0IE1lc3NhZ2VDb2RlKCJJbnRlcm5hbFByb2JsZW1FeHRlbmRpbmdVbm1vZGlmaWFibGVTY29wZSIsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmludGVybmFsUHJvYmxlbSwKICAgICAgICBtZXNzYWdlOiByIiIiQ2FuJ3QgZXh0ZW5kIGFuIHVubW9kaWZpYWJsZSBzY29wZS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW50ZXJuYWxQcm9ibGVtTGFiZWxVc2FnZUluVmFyaWFibGVzRGVjbGFyYXRpb24gPQogICAgbWVzc2FnZUludGVybmFsUHJvYmxlbUxhYmVsVXNhZ2VJblZhcmlhYmxlc0RlY2xhcmF0aW9uOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUludGVybmFsUHJvYmxlbUxhYmVsVXNhZ2VJblZhcmlhYmxlc0RlY2xhcmF0aW9uID0KICAgIGNvbnN0IE1lc3NhZ2VDb2RlKCJJbnRlcm5hbFByb2JsZW1MYWJlbFVzYWdlSW5WYXJpYWJsZXNEZWNsYXJhdGlvbiIsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmludGVybmFsUHJvYmxlbSwKICAgICAgICBtZXNzYWdlOgogICAgICAgICAgICByIiIiVW5leHBlY3RlZCB1c2FnZSBvZiBsYWJlbCBpbnNpZGUgZGVjbGFyYXRpb24gb2YgdmFyaWFibGVzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbnRlcm5hbFByb2JsZW1NaXNzaW5nQ29udGV4dCA9CiAgICBtZXNzYWdlSW50ZXJuYWxQcm9ibGVtTWlzc2luZ0NvbnRleHQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW50ZXJuYWxQcm9ibGVtTWlzc2luZ0NvbnRleHQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbnRlcm5hbFByb2JsZW1NaXNzaW5nQ29udGV4dCIsCiAgICBzZXZlcml0eTogU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtLAogICAgbWVzc2FnZTogciIiIkNvbXBpbGVyIGNhbm5vdCBydW4gd2l0aG91dCBhIGNvbXBpbGVyIGNvbnRleHQuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJBcmUgY2FsbHMgdG8gdGhlIGNvbXBpbGVyIHdyYXBwZWQgaW4gQ29tcGlsZXJDb250ZXh0LnJ1bkluQ29udGV4dD8iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbU5vSW5mZXJyZWRUeXBlU3RvcmVkID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJUaGVyZSdzIG5vIGluZmVycmVkIHR5cGUgZm9yICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtTm9JbmZlcnJlZFR5cGVTdG9yZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIGNvZGVJbnRlcm5hbFByb2JsZW1Ob0luZmVycmVkVHlwZVN0b3JlZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiSW50ZXJuYWxQcm9ibGVtTm9JbmZlcnJlZFR5cGVTdG9yZWQiLAogICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtTm9JbmZlcnJlZFR5cGVTdG9yZWQsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmludGVybmFsUHJvYmxlbSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtTm9JbmZlcnJlZFR5cGVTdG9yZWQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnRlcm5hbFByb2JsZW1Ob0luZmVycmVkVHlwZVN0b3JlZCwKICAgICAgbWVzc2FnZTogIiIiVGhlcmUncyBubyBpbmZlcnJlZCB0eXBlIGZvciAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtTm90Rm91bmQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkNvdWxkbid0IGZpbmQgJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1Ob3RGb3VuZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlSW50ZXJuYWxQcm9ibGVtTm90Rm91bmQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkludGVybmFsUHJvYmxlbU5vdEZvdW5kIiwgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Ob3RGb3VuZCwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1Ob3RGb3VuZChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludGVybmFsUHJvYmxlbU5vdEZvdW5kLAogICAgICBtZXNzYWdlOiAiIiJDb3VsZG4ndCBmaW5kICcke25hbWV9Jy4iIiIsIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPgogICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Ob3RGb3VuZEluID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkNvdWxkbid0IGZpbmQgJyNuYW1lJyBpbiAnI25hbWUyJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1Ob3RGb3VuZEluKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4KICAgIGNvZGVJbnRlcm5hbFByb2JsZW1Ob3RGb3VuZEluID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICAgICAgIkludGVybmFsUHJvYmxlbU5vdEZvdW5kSW4iLCB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbU5vdEZvdW5kSW4sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmludGVybmFsUHJvYmxlbSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtTm90Rm91bmRJbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIGlmIChuYW1lMi5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTIgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUyKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludGVybmFsUHJvYmxlbU5vdEZvdW5kSW4sCiAgICAgIG1lc3NhZ2U6ICIiIkNvdWxkbid0IGZpbmQgJyR7bmFtZX0nIGluICcke25hbWUyfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICduYW1lMic6IG5hbWUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUludGVybmFsUHJvYmxlbVByZXZpb3VzVG9rZW5Ob3RGb3VuZCA9CiAgICBtZXNzYWdlSW50ZXJuYWxQcm9ibGVtUHJldmlvdXNUb2tlbk5vdEZvdW5kOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUludGVybmFsUHJvYmxlbVByZXZpb3VzVG9rZW5Ob3RGb3VuZCA9CiAgICBjb25zdCBNZXNzYWdlQ29kZSgiSW50ZXJuYWxQcm9ibGVtUHJldmlvdXNUb2tlbk5vdEZvdW5kIiwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtLAogICAgICAgIG1lc3NhZ2U6IHIiIiJDb3VsZG4ndCBmaW5kIHByZXZpb3VzIHRva2VuLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtUHJpdmF0ZUNvbnN0cnVjdG9yQWNjZXNzID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJDYW4ndCBhY2Nlc3MgcHJpdmF0ZSBjb25zdHJ1Y3RvciAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVByaXZhdGVDb25zdHJ1Y3RvckFjY2Vzcyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgY29kZUludGVybmFsUHJvYmxlbVByaXZhdGVDb25zdHJ1Y3RvckFjY2VzcyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiSW50ZXJuYWxQcm9ibGVtUHJpdmF0ZUNvbnN0cnVjdG9yQWNjZXNzIiwKICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVByaXZhdGVDb25zdHJ1Y3RvckFjY2VzcywKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1Qcml2YXRlQ29uc3RydWN0b3JBY2Nlc3MoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnRlcm5hbFByb2JsZW1Qcml2YXRlQ29uc3RydWN0b3JBY2Nlc3MsCiAgICAgIG1lc3NhZ2U6ICIiIkNhbid0IGFjY2VzcyBwcml2YXRlIGNvbnN0cnVjdG9yICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbnRlcm5hbFByb2JsZW1Qcm92aWRlZEJvdGhDb21waWxlU2RrQW5kU2RrU3VtbWFyeSA9CiAgICBtZXNzYWdlSW50ZXJuYWxQcm9ibGVtUHJvdmlkZWRCb3RoQ29tcGlsZVNka0FuZFNka1N1bW1hcnk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW50ZXJuYWxQcm9ibGVtUHJvdmlkZWRCb3RoQ29tcGlsZVNka0FuZFNka1N1bW1hcnkgPQogICAgY29uc3QgTWVzc2FnZUNvZGUoIkludGVybmFsUHJvYmxlbVByb3ZpZGVkQm90aENvbXBpbGVTZGtBbmRTZGtTdW1tYXJ5IiwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtLAogICAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAgIHIiIiJUaGUgY29tcGlsZVNkayBhbmQgc2RrU3VtbWFyeSBvcHRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIHN0cmluZyk+CiAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVN0YWNrTm90RW1wdHkgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIHN0cmluZyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIiNuYW1lLnN0YWNrIGlzbid0IGVtcHR5OgogICNzdHJpbmciIiIsIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtU3RhY2tOb3RFbXB0eSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBzdHJpbmcpPgogICAgY29kZUludGVybmFsUHJvYmxlbVN0YWNrTm90RW1wdHkgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgIkludGVybmFsUHJvYmxlbVN0YWNrTm90RW1wdHkiLCB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVN0YWNrTm90RW1wdHksCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmludGVybmFsUHJvYmxlbSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtU3RhY2tOb3RFbXB0eShTdHJpbmcgbmFtZSwgU3RyaW5nIHN0cmluZykgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW50ZXJuYWxQcm9ibGVtU3RhY2tOb3RFbXB0eSwKICAgICAgbWVzc2FnZTogIiIiJHtuYW1lfS5zdGFjayBpc24ndCBlbXB0eToKICAke3N0cmluZ30iIiIsIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ3N0cmluZyc6IHN0cmluZ30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVN0b3JpbmdNdWx0aXBsZUluZmVycmVkVHlwZXMgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJUaGVyZSdzIGFscmVhZHkgYW4gaW5mZXJyZWQgdHlwZSwgJyN0eXBlJywgZm9yICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6CiAgICAgICAgICAgIF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtU3RvcmluZ011bHRpcGxlSW5mZXJyZWRUeXBlcyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIFN0cmluZyBuYW1lKT4KICAgIGNvZGVJbnRlcm5hbFByb2JsZW1TdG9yaW5nTXVsdGlwbGVJbmZlcnJlZFR5cGVzID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgU3RyaW5nIG5hbWUpPigKICAgICAgICAiSW50ZXJuYWxQcm9ibGVtU3RvcmluZ011bHRpcGxlSW5mZXJyZWRUeXBlcyIsCiAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1TdG9yaW5nTXVsdGlwbGVJbmZlcnJlZFR5cGVzLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVN0b3JpbmdNdWx0aXBsZUluZmVycmVkVHlwZXMoCiAgICBEYXJ0VHlwZSBfdHlwZSwgU3RyaW5nIG5hbWUpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW50ZXJuYWxQcm9ibGVtU3RvcmluZ011bHRpcGxlSW5mZXJyZWRUeXBlcywKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZXJlJ3MgYWxyZWFkeSBhbiBpbmZlcnJlZCB0eXBlLCAnJHt0eXBlfScsIGZvciAnJHtuYW1lfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsndHlwZSc6IF90eXBlLCAnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+CiAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVVuZXhwZWN0ZWQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkV4cGVjdGVkICcjc3RyaW5nJywgYnV0IGdvdCAnI3N0cmluZzInLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVVuZXhwZWN0ZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKT4KICAgIGNvZGVJbnRlcm5hbFByb2JsZW1VbmV4cGVjdGVkID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+KAogICAgICAgICJJbnRlcm5hbFByb2JsZW1VbmV4cGVjdGVkIiwgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VbmV4cGVjdGVkLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVVuZXhwZWN0ZWQoU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIGlmIChzdHJpbmcyLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW50ZXJuYWxQcm9ibGVtVW5leHBlY3RlZCwKICAgICAgbWVzc2FnZTogIiIiRXhwZWN0ZWQgJyR7c3RyaW5nfScsIGJ1dCBnb3QgJyR7c3RyaW5nMn0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZywgJ3N0cmluZzInOiBzdHJpbmcyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPgogICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VbmhhbmRsZWQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlVuaGFuZGxlZCAjc3RyaW5nIGluICNzdHJpbmcyLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVVuaGFuZGxlZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPgogICAgY29kZUludGVybmFsUHJvYmxlbVVuaGFuZGxlZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPigKICAgICAgICAiSW50ZXJuYWxQcm9ibGVtVW5oYW5kbGVkIiwgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VbmhhbmRsZWQsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmludGVybmFsUHJvYmxlbSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtVW5oYW5kbGVkKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICBpZiAoc3RyaW5nMi5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludGVybmFsUHJvYmxlbVVuaGFuZGxlZCwKICAgICAgbWVzc2FnZTogIiIiVW5oYW5kbGVkICR7c3RyaW5nfSBpbiAke3N0cmluZzJ9LiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZywgJ3N0cmluZzInOiBzdHJpbmcyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+CiAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVVuaW1wbGVtZW50ZWQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiVW5pbXBsZW1lbnRlZCAjc3RyaW5nLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVVuaW1wbGVtZW50ZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPiBjb2RlSW50ZXJuYWxQcm9ibGVtVW5pbXBsZW1lbnRlZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgICAgICJJbnRlcm5hbFByb2JsZW1VbmltcGxlbWVudGVkIiwgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VbmltcGxlbWVudGVkLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVVuaW1wbGVtZW50ZWQoU3RyaW5nIHN0cmluZykgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnRlcm5hbFByb2JsZW1VbmltcGxlbWVudGVkLAogICAgICBtZXNzYWdlOiAiIiJVbmltcGxlbWVudGVkICR7c3RyaW5nfS4iIiIsIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmd9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVVuc3VwcG9ydGVkID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJVbnN1cHBvcnRlZCBvcGVyYXRpb246ICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtVW5zdXBwb3J0ZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUludGVybmFsUHJvYmxlbVVuc3VwcG9ydGVkID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJJbnRlcm5hbFByb2JsZW1VbnN1cHBvcnRlZCIsIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtVW5zdXBwb3J0ZWQsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmludGVybmFsUHJvYmxlbSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtVW5zdXBwb3J0ZWQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnRlcm5hbFByb2JsZW1VbnN1cHBvcnRlZCwKICAgICAgbWVzc2FnZTogIiIiVW5zdXBwb3J0ZWQgb3BlcmF0aW9uOiAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+CiAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVVyaU1pc3NpbmdTY2hlbWUgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlRoZSBVUkkgJyN1cmknIGhhcyBubyBzY2hlbWUuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtVXJpTWlzc2luZ1NjaGVtZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPiBjb2RlSW50ZXJuYWxQcm9ibGVtVXJpTWlzc2luZ1NjaGVtZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPigiSW50ZXJuYWxQcm9ibGVtVXJpTWlzc2luZ1NjaGVtZSIsCiAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VcmlNaXNzaW5nU2NoZW1lLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVVyaU1pc3NpbmdTY2hlbWUoVXJpIHVyaV8pIHsKICBTdHJpbmcgdXJpID0gcmVsYXRpdml6ZVVyaSh1cmlfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludGVybmFsUHJvYmxlbVVyaU1pc3NpbmdTY2hlbWUsCiAgICAgIG1lc3NhZ2U6ICIiIlRoZSBVUkkgJyR7dXJpfScgaGFzIG5vIHNjaGVtZS4iIiIsIGFyZ3VtZW50czogeyd1cmknOiB1cmlffSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+CiAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVZlcmlmaWNhdGlvbkVycm9yID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlZlcmlmaWNhdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIHByb2dyYW0gZmFpbGVkOgojc3RyaW5nIiIiLCB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVZlcmlmaWNhdGlvbkVycm9yKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4KICAgIGNvZGVJbnRlcm5hbFByb2JsZW1WZXJpZmljYXRpb25FcnJvciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgICAgICJJbnRlcm5hbFByb2JsZW1WZXJpZmljYXRpb25FcnJvciIsCiAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1WZXJpZmljYXRpb25FcnJvciwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1WZXJpZmljYXRpb25FcnJvcihTdHJpbmcgc3RyaW5nKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludGVybmFsUHJvYmxlbVZlcmlmaWNhdGlvbkVycm9yLAogICAgICBtZXNzYWdlOiAiIiJWZXJpZmljYXRpb24gb2YgdGhlIGdlbmVyYXRlZCBwcm9ncmFtIGZhaWxlZDoKJHtzdHJpbmd9IiIiLCBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUludGVycG9sYXRpb25JblVyaSA9IG1lc3NhZ2VJbnRlcnBvbGF0aW9uSW5Vcmk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW50ZXJwb2xhdGlvbkluVXJpID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiSW50ZXJwb2xhdGlvbkluVXJpIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlZBTElEX0xJVEVSQUxfSU5fQ09ORklHVVJBVElPTiJdLAogICAgbWVzc2FnZTogciIiIkNhbid0IHVzZSBzdHJpbmcgaW50ZXJwb2xhdGlvbiBpbiBhIFVSSS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlMik+IHRlbXBsYXRlSW50ZXJzZWN0aW9uVHlwZUFzVHlwZUFyZ3VtZW50ID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJDYW4ndCBpbmZlciBhIHR5cGUgZm9yICcjbmFtZScsIGl0IGNhbiBiZSBlaXRoZXIgJyN0eXBlJyBvciAnI3R5cGUyJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IGFkZGluZyBhIHR5cGUgYXJndW1lbnQgc2VsZWN0aW5nIG9uZSBvZiB0aGUgb3B0aW9ucy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludGVyc2VjdGlvblR5cGVBc1R5cGVBcmd1bWVudCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPgogICAgY29kZUludGVyc2VjdGlvblR5cGVBc1R5cGVBcmd1bWVudCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAiSW50ZXJzZWN0aW9uVHlwZUFzVHlwZUFyZ3VtZW50IiwKICB0ZW1wbGF0ZUludGVyc2VjdGlvblR5cGVBc1R5cGVBcmd1bWVudCwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnRlcnNlY3Rpb25UeXBlQXNUeXBlQXJndW1lbnQoCiAgICBTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW50ZXJzZWN0aW9uVHlwZUFzVHlwZUFyZ3VtZW50LAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiQ2FuJ3QgaW5mZXIgYSB0eXBlIGZvciAnJHtuYW1lfScsIGl0IGNhbiBiZSBlaXRoZXIgJyR7dHlwZX0nIG9yICcke3R5cGUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIlRyeSBhZGRpbmcgYSB0eXBlIGFyZ3VtZW50IHNlbGVjdGluZyBvbmUgb2YgdGhlIG9wdGlvbnMuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICd0eXBlJzogX3R5cGUsICd0eXBlMic6IF90eXBlMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVJbnZhbGlkQXNzaWdubWVudCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJBIHZhbHVlIG9mIHR5cGUgJyN0eXBlJyBjYW4ndCBiZSBhc3NpZ25lZCB0byBhIHZhcmlhYmxlIG9mIHR5cGUgJyN0eXBlMicuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBjaGFuZ2luZyB0aGUgdHlwZSBvZiB0aGUgbGVmdCBoYW5kIHNpZGUsIG9yIGNhc3RpbmcgdGhlIHJpZ2h0IGhhbmQgc2lkZSB0byAnI3R5cGUyJy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludmFsaWRBc3NpZ25tZW50KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVJbnZhbGlkQXNzaWdubWVudCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgICAgICJJbnZhbGlkQXNzaWdubWVudCIsIHRlbXBsYXRlSW52YWxpZEFzc2lnbm1lbnQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfQVNTSUdOTUVOVCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnZhbGlkQXNzaWdubWVudChEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludmFsaWRBc3NpZ25tZW50LAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiQSB2YWx1ZSBvZiB0eXBlICcke3R5cGV9JyBjYW4ndCBiZSBhc3NpZ25lZCB0byBhIHZhcmlhYmxlIG9mIHR5cGUgJyR7dHlwZTJ9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIHRpcDogIiIiVHJ5IGNoYW5naW5nIHRoZSB0eXBlIG9mIHRoZSBsZWZ0IGhhbmQgc2lkZSwgb3IgY2FzdGluZyB0aGUgcmlnaHQgaGFuZCBzaWRlIHRvICcke3R5cGUyfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW52YWxpZEF3YWl0Rm9yID0gbWVzc2FnZUludmFsaWRBd2FpdEZvcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbnZhbGlkQXdhaXRGb3IgPSBjb25zdCBNZXNzYWdlQ29kZSgiSW52YWxpZEF3YWl0Rm9yIiwKICAgIGluZGV4OiA5LAogICAgbWVzc2FnZToKICAgICAgICByIiIiVGhlIGtleXdvcmQgJ2F3YWl0JyBpc24ndCBhbGxvd2VkIGZvciBhIG5vcm1hbCAnZm9yJyBzdGF0ZW1lbnQuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nIHRoZSBrZXl3b3JkLCBvciB1c2UgYSBmb3ItZWFjaCBzdGF0ZW1lbnQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUludmFsaWRCcmVha1RhcmdldCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ2FuJ3QgYnJlYWsgdG8gJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnZhbGlkQnJlYWtUYXJnZXQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUludmFsaWRCcmVha1RhcmdldCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAiSW52YWxpZEJyZWFrVGFyZ2V0IiwKICB0ZW1wbGF0ZUludmFsaWRCcmVha1RhcmdldCwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnZhbGlkQnJlYWtUYXJnZXQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnZhbGlkQnJlYWtUYXJnZXQsCiAgICAgIG1lc3NhZ2U6ICIiIkNhbid0IGJyZWFrIHRvICcke25hbWV9Jy4iIiIsIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVJbnZhbGlkQ2FzdEZ1bmN0aW9uRXhwciA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgZnVuY3Rpb24gZXhwcmVzc2lvbiB0eXBlICcjdHlwZScgaXNuJ3Qgb2YgZXhwZWN0ZWQgdHlwZSAnI3R5cGUyJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBmdW5jdGlvbiBleHByZXNzaW9uIG9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIHVzZWQuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdEZ1bmN0aW9uRXhwcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+CiAgICBjb2RlSW52YWxpZENhc3RGdW5jdGlvbkV4cHIgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgICAgICAiSW52YWxpZENhc3RGdW5jdGlvbkV4cHIiLCB0ZW1wbGF0ZUludmFsaWRDYXN0RnVuY3Rpb25FeHByLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlZBTElEX0NBU1RfRlVOQ1RJT05fRVhQUiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdEZ1bmN0aW9uRXhwcihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludmFsaWRDYXN0RnVuY3Rpb25FeHByLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIGZ1bmN0aW9uIGV4cHJlc3Npb24gdHlwZSAnJHt0eXBlfScgaXNuJ3Qgb2YgZXhwZWN0ZWQgdHlwZSAnJHt0eXBlMn0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgdGlwOiAiIiJDaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIGV4cHJlc3Npb24gb3IgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgdXNlZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGUsICd0eXBlMic6IF90eXBlMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVJbnZhbGlkQ2FzdExpdGVyYWxMaXN0ID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBsaXN0IGxpdGVyYWwgdHlwZSAnI3R5cGUnIGlzbid0IG9mIGV4cGVjdGVkIHR5cGUgJyN0eXBlMicuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIkNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgbGlzdCBsaXRlcmFsIG9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIHVzZWQuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdExpdGVyYWxMaXN0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVJbnZhbGlkQ2FzdExpdGVyYWxMaXN0ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICAgICAgIkludmFsaWRDYXN0TGl0ZXJhbExpc3QiLCB0ZW1wbGF0ZUludmFsaWRDYXN0TGl0ZXJhbExpc3QsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfQ0FTVF9MSVRFUkFMX0xJU1QiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW52YWxpZENhc3RMaXRlcmFsTGlzdChEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludmFsaWRDYXN0TGl0ZXJhbExpc3QsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgbGlzdCBsaXRlcmFsIHR5cGUgJyR7dHlwZX0nIGlzbid0IG9mIGV4cGVjdGVkIHR5cGUgJyR7dHlwZTJ9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIHRpcDogIiIiQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBsaXN0IGxpdGVyYWwgb3IgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgdXNlZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGUsICd0eXBlMic6IF90eXBlMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVJbnZhbGlkQ2FzdExpdGVyYWxNYXAgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIG1hcCBsaXRlcmFsIHR5cGUgJyN0eXBlJyBpc24ndCBvZiBleHBlY3RlZCB0eXBlICcjdHlwZTInLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJDaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIG1hcCBsaXRlcmFsIG9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIHVzZWQuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdExpdGVyYWxNYXApOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPgogICAgY29kZUludmFsaWRDYXN0TGl0ZXJhbE1hcCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgICAgICJJbnZhbGlkQ2FzdExpdGVyYWxNYXAiLCB0ZW1wbGF0ZUludmFsaWRDYXN0TGl0ZXJhbE1hcCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9DQVNUX0xJVEVSQUxfTUFQIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludmFsaWRDYXN0TGl0ZXJhbE1hcChEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludmFsaWRDYXN0TGl0ZXJhbE1hcCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBtYXAgbGl0ZXJhbCB0eXBlICcke3R5cGV9JyBpc24ndCBvZiBleHBlY3RlZCB0eXBlICcke3R5cGUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIkNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgbWFwIGxpdGVyYWwgb3IgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgdXNlZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGUsICd0eXBlMic6IF90eXBlMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVJbnZhbGlkQ2FzdExpdGVyYWxTZXQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIHNldCBsaXRlcmFsIHR5cGUgJyN0eXBlJyBpc24ndCBvZiBleHBlY3RlZCB0eXBlICcjdHlwZTInLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJDaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIHNldCBsaXRlcmFsIG9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIHVzZWQuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdExpdGVyYWxTZXQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPgogICAgY29kZUludmFsaWRDYXN0TGl0ZXJhbFNldCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgICAgICJJbnZhbGlkQ2FzdExpdGVyYWxTZXQiLCB0ZW1wbGF0ZUludmFsaWRDYXN0TGl0ZXJhbFNldCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9DQVNUX0xJVEVSQUxfU0VUIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludmFsaWRDYXN0TGl0ZXJhbFNldChEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludmFsaWRDYXN0TGl0ZXJhbFNldCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBzZXQgbGl0ZXJhbCB0eXBlICcke3R5cGV9JyBpc24ndCBvZiBleHBlY3RlZCB0eXBlICcke3R5cGUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIkNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgc2V0IGxpdGVyYWwgb3IgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgdXNlZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGUsICd0eXBlMic6IF90eXBlMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVJbnZhbGlkQ2FzdExvY2FsRnVuY3Rpb24gPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIGxvY2FsIGZ1bmN0aW9uIGhhcyB0eXBlICcjdHlwZScgdGhhdCBpc24ndCBvZiBleHBlY3RlZCB0eXBlICcjdHlwZTInLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJDaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIG9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIHVzZWQuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdExvY2FsRnVuY3Rpb24pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPgogICAgY29kZUludmFsaWRDYXN0TG9jYWxGdW5jdGlvbiA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgICAgICJJbnZhbGlkQ2FzdExvY2FsRnVuY3Rpb24iLCB0ZW1wbGF0ZUludmFsaWRDYXN0TG9jYWxGdW5jdGlvbiwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9DQVNUX0ZVTkNUSU9OIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludmFsaWRDYXN0TG9jYWxGdW5jdGlvbigKICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW52YWxpZENhc3RMb2NhbEZ1bmN0aW9uLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIGxvY2FsIGZ1bmN0aW9uIGhhcyB0eXBlICcke3R5cGV9JyB0aGF0IGlzbid0IG9mIGV4cGVjdGVkIHR5cGUgJyR7dHlwZTJ9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIHRpcDogIiIiQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBmdW5jdGlvbiBvciB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBpcyB1c2VkLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZSwgJ3R5cGUyJzogX3R5cGUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBEYXJ0VHlwZSBfdHlwZSwKICAgICAgICBEYXJ0VHlwZQogICAgICAgICAgICBfdHlwZTIpPiB0ZW1wbGF0ZUludmFsaWRDYXN0TmV3RXhwciA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgY29uc3RydWN0b3IgcmV0dXJucyB0eXBlICcjdHlwZScgdGhhdCBpc24ndCBvZiBleHBlY3RlZCB0eXBlICcjdHlwZTInLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJDaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIG9iamVjdCBiZWluZyBjb25zdHJ1Y3RlZCBvciB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBpcyB1c2VkLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW52YWxpZENhc3ROZXdFeHByKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVJbnZhbGlkQ2FzdE5ld0V4cHIgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgICAgICAiSW52YWxpZENhc3ROZXdFeHByIiwgdGVtcGxhdGVJbnZhbGlkQ2FzdE5ld0V4cHIsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfQ0FTVF9ORVdfRVhQUiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdE5ld0V4cHIoRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnZhbGlkQ2FzdE5ld0V4cHIsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgY29uc3RydWN0b3IgcmV0dXJucyB0eXBlICcke3R5cGV9JyB0aGF0IGlzbid0IG9mIGV4cGVjdGVkIHR5cGUgJyR7dHlwZTJ9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIHRpcDogIiIiQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QgYmVpbmcgY29uc3RydWN0ZWQgb3IgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgdXNlZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGUsICd0eXBlMic6IF90eXBlMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVJbnZhbGlkQ2FzdFN0YXRpY01ldGhvZCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgc3RhdGljIG1ldGhvZCBoYXMgdHlwZSAnI3R5cGUnIHRoYXQgaXNuJ3Qgb2YgZXhwZWN0ZWQgdHlwZSAnI3R5cGUyJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBtZXRob2Qgb3IgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgdXNlZC4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludmFsaWRDYXN0U3RhdGljTWV0aG9kKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVJbnZhbGlkQ2FzdFN0YXRpY01ldGhvZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgICAgICJJbnZhbGlkQ2FzdFN0YXRpY01ldGhvZCIsIHRlbXBsYXRlSW52YWxpZENhc3RTdGF0aWNNZXRob2QsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfQ0FTVF9NRVRIT0QiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW52YWxpZENhc3RTdGF0aWNNZXRob2QoRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnZhbGlkQ2FzdFN0YXRpY01ldGhvZCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBzdGF0aWMgbWV0aG9kIGhhcyB0eXBlICcke3R5cGV9JyB0aGF0IGlzbid0IG9mIGV4cGVjdGVkIHR5cGUgJyR7dHlwZTJ9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIHRpcDogIiIiQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBtZXRob2Qgb3IgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgdXNlZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGUsICd0eXBlMic6IF90eXBlMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVJbnZhbGlkQ2FzdFRvcExldmVsRnVuY3Rpb24gPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIHRvcCBsZXZlbCBmdW5jdGlvbiBoYXMgdHlwZSAnI3R5cGUnIHRoYXQgaXNuJ3Qgb2YgZXhwZWN0ZWQgdHlwZSAnI3R5cGUyJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBmdW5jdGlvbiBvciB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBpcyB1c2VkLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW52YWxpZENhc3RUb3BMZXZlbEZ1bmN0aW9uKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVJbnZhbGlkQ2FzdFRvcExldmVsRnVuY3Rpb24gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgICAgICAiSW52YWxpZENhc3RUb3BMZXZlbEZ1bmN0aW9uIiwgdGVtcGxhdGVJbnZhbGlkQ2FzdFRvcExldmVsRnVuY3Rpb24sCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfQ0FTVF9GVU5DVElPTiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdFRvcExldmVsRnVuY3Rpb24oCiAgICBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludmFsaWRDYXN0VG9wTGV2ZWxGdW5jdGlvbiwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSB0b3AgbGV2ZWwgZnVuY3Rpb24gaGFzIHR5cGUgJyR7dHlwZX0nIHRoYXQgaXNuJ3Qgb2YgZXhwZWN0ZWQgdHlwZSAnJHt0eXBlMn0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgdGlwOiAiIiJDaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIG9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIHVzZWQuIiIiLAogICAgICBhcmd1bWVudHM6IHsndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW52YWxpZENhdGNoQXJndW1lbnRzID0gbWVzc2FnZUludmFsaWRDYXRjaEFyZ3VtZW50czsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbnZhbGlkQ2F0Y2hBcmd1bWVudHMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbnZhbGlkQ2F0Y2hBcmd1bWVudHMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfQ0FUQ0hfQVJHVU1FTlRTIl0sCiAgICBtZXNzYWdlOiByIiIiSW52YWxpZCBjYXRjaCBhcmd1bWVudHMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUludmFsaWRDb2RlUG9pbnQgPSBtZXNzYWdlSW52YWxpZENvZGVQb2ludDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbnZhbGlkQ29kZVBvaW50ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiSW52YWxpZENvZGVQb2ludCIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9DT0RFX1BPSU5UIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJUaGUgZXNjYXBlIHNlcXVlbmNlIHN0YXJ0aW5nIHdpdGggJ1x1JyBpc24ndCBhIHZhbGlkIGNvZGUgcG9pbnQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUludmFsaWRDb250aW51ZVRhcmdldCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ2FuJ3QgY29udGludWUgYXQgJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnZhbGlkQ29udGludWVUYXJnZXQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUludmFsaWRDb250aW51ZVRhcmdldCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAiSW52YWxpZENvbnRpbnVlVGFyZ2V0IiwKICB0ZW1wbGF0ZUludmFsaWRDb250aW51ZVRhcmdldCwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnZhbGlkQ29udGludWVUYXJnZXQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnZhbGlkQ29udGludWVUYXJnZXQsCiAgICAgIG1lc3NhZ2U6ICIiIkNhbid0IGNvbnRpbnVlIGF0ICcke25hbWV9Jy4iIiIsIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbnZhbGlkSGV4RXNjYXBlID0gbWVzc2FnZUludmFsaWRIZXhFc2NhcGU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW52YWxpZEhleEVzY2FwZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkludmFsaWRIZXhFc2NhcGUiLAogICAgaW5kZXg6IDQwLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQW4gZXNjYXBlIHNlcXVlbmNlIHN0YXJ0aW5nIHdpdGggJ1x4JyBtdXN0IGJlIGZvbGxvd2VkIGJ5IDIgaGV4YWRlY2ltYWwgZGlnaXRzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbnZhbGlkSW5pdGlhbGl6ZXIgPSBtZXNzYWdlSW52YWxpZEluaXRpYWxpemVyOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUludmFsaWRJbml0aWFsaXplciA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkludmFsaWRJbml0aWFsaXplciIsCiAgICBpbmRleDogOTAsCiAgICBtZXNzYWdlOiByIiIiTm90IGEgdmFsaWQgaW5pdGlhbGl6ZXIuIiIiLAogICAgdGlwOiByIiIiVG8gaW5pdGlhbGl6ZSBhIGZpZWxkLCB1c2UgdGhlIHN5bnRheCAnbmFtZSA9IHZhbHVlJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW52YWxpZElubGluZUZ1bmN0aW9uVHlwZSA9CiAgICBtZXNzYWdlSW52YWxpZElubGluZUZ1bmN0aW9uVHlwZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbnZhbGlkSW5saW5lRnVuY3Rpb25UeXBlID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiSW52YWxpZElubGluZUZ1bmN0aW9uVHlwZSIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9JTkxJTkVfRlVOQ1RJT05fVFlQRSJdLAogICAgbWVzc2FnZToKICAgICAgICByIiIiSW5saW5lIGZ1bmN0aW9uIHR5cGVzIGNhbm5vdCBiZSB1c2VkIGZvciBwYXJhbWV0ZXJzIGluIGEgZ2VuZXJpYyBmdW5jdGlvbiB0eXBlLiIiIiwKICAgIHRpcDoKICAgICAgICByIiIiVHJ5IGNoYW5naW5nIHRoZSBpbmxpbmUgZnVuY3Rpb24gdHlwZSAoYXMgaW4gJ2ludCBmKCknKSB0byBhIHByZWZpeGVkIGZ1bmN0aW9uIHR5cGUgdXNpbmcgdGhlIGBGdW5jdGlvbmAga2V5d29yZCAoYXMgaW4gJ2ludCBGdW5jdGlvbigpIGYnKS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+IHRlbXBsYXRlSW52YWxpZE9wZXJhdG9yID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJUaGUgc3RyaW5nICcjbGV4ZW1lJyBpc24ndCBhIHVzZXItZGVmaW5hYmxlIG9wZXJhdG9yLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludmFsaWRPcGVyYXRvcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiBjb2RlSW52YWxpZE9wZXJhdG9yID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KAogICAgICAgICJJbnZhbGlkT3BlcmF0b3IiLCB0ZW1wbGF0ZUludmFsaWRPcGVyYXRvciwKICAgICAgICBpbmRleDogMzkpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludmFsaWRPcGVyYXRvcihUb2tlbiB0b2tlbikgewogIFN0cmluZyBsZXhlbWUgPSB0b2tlbi5sZXhlbWU7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnZhbGlkT3BlcmF0b3IsCiAgICAgIG1lc3NhZ2U6ICIiIlRoZSBzdHJpbmcgJyR7bGV4ZW1lfScgaXNuJ3QgYSB1c2VyLWRlZmluYWJsZSBvcGVyYXRvci4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0b2tlbic6IHRva2VufSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8sIFN0cmluZyBzdHJpbmcpPgogICAgdGVtcGxhdGVJbnZhbGlkUGFja2FnZVVyaSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfLCBTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiSW52YWxpZCBwYWNrYWdlIFVSSSAnI3VyaSc6CiAgI3N0cmluZy4iIiIsIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW52YWxpZFBhY2thZ2VVcmkpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfLCBTdHJpbmcgc3RyaW5nKT4gY29kZUludmFsaWRQYWNrYWdlVXJpID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXywgU3RyaW5nIHN0cmluZyk+KAogICJJbnZhbGlkUGFja2FnZVVyaSIsCiAgdGVtcGxhdGVJbnZhbGlkUGFja2FnZVVyaSwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnZhbGlkUGFja2FnZVVyaShVcmkgdXJpXywgU3RyaW5nIHN0cmluZykgewogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnZhbGlkUGFja2FnZVVyaSwKICAgICAgbWVzc2FnZTogIiIiSW52YWxpZCBwYWNrYWdlIFVSSSAnJHt1cml9JzoKICAke3N0cmluZ30uIiIiLCBhcmd1bWVudHM6IHsndXJpJzogdXJpXywgJ3N0cmluZyc6IHN0cmluZ30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbnZhbGlkU3VwZXJJbkluaXRpYWxpemVyID0KICAgIG1lc3NhZ2VJbnZhbGlkU3VwZXJJbkluaXRpYWxpemVyOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUludmFsaWRTdXBlckluSW5pdGlhbGl6ZXIgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbnZhbGlkU3VwZXJJbkluaXRpYWxpemVyIiwKICAgIGluZGV4OiA0NywKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIkNhbiBvbmx5IHVzZSAnc3VwZXInIGluIGFuIGluaXRpYWxpemVyIGZvciBjYWxsaW5nIHRoZSBzdXBlcmNsYXNzIGNvbnN0cnVjdG9yIChlLmcuICdzdXBlcigpJyBvciAnc3VwZXIubmFtZWRDb25zdHJ1Y3RvcigpJykiIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW52YWxpZFN5bmNNb2RpZmllciA9IG1lc3NhZ2VJbnZhbGlkU3luY01vZGlmaWVyOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUludmFsaWRTeW5jTW9kaWZpZXIgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbnZhbGlkU3luY01vZGlmaWVyIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJNSVNTSU5HX1NUQVJfQUZURVJfU1lOQyJdLAogICAgbWVzc2FnZTogciIiIkludmFsaWQgbW9kaWZpZXIgJ3N5bmMnLiIiIiwKICAgIHRpcDogciIiIlRyeSByZXBsYWNpbmcgJ3N5bmMnIHdpdGggJ3N5bmMqJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW52YWxpZFRoaXNJbkluaXRpYWxpemVyID0gbWVzc2FnZUludmFsaWRUaGlzSW5Jbml0aWFsaXplcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbnZhbGlkVGhpc0luSW5pdGlhbGl6ZXIgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbnZhbGlkVGhpc0luSW5pdGlhbGl6ZXIiLAogICAgaW5kZXg6IDY1LAogICAgbWVzc2FnZToKICAgICAgICByIiIiQ2FuIG9ubHkgdXNlICd0aGlzJyBpbiBhbiBpbml0aWFsaXplciBmb3IgZmllbGQgaW5pdGlhbGl6YXRpb24gKGUuZy4gJ3RoaXMueCA9IHNvbWV0aGluZycpIGFuZCBjb25zdHJ1Y3RvciByZWRpcmVjdGlvbiAoZS5nLiAndGhpcygpJyBvciAndGhpcy5uYW1lZENvbnN0cnVjdG9yKCkpIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUludmFsaWRVbmljb2RlRXNjYXBlID0gbWVzc2FnZUludmFsaWRVbmljb2RlRXNjYXBlOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUludmFsaWRVbmljb2RlRXNjYXBlID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiSW52YWxpZFVuaWNvZGVFc2NhcGUiLAogICAgaW5kZXg6IDM4LAogICAgbWVzc2FnZToKICAgICAgICByIiIiQW4gZXNjYXBlIHNlcXVlbmNlIHN0YXJ0aW5nIHdpdGggJ1x1JyBtdXN0IGJlIGZvbGxvd2VkIGJ5IDQgaGV4YWRlY2ltYWwgZGlnaXRzIG9yIGZyb20gMSB0byA2IGRpZ2l0cyBiZXR3ZWVuICd7JyBhbmQgJ30nLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbnZhbGlkVXNlT2ZOdWxsQXdhcmVBY2Nlc3MgPQogICAgbWVzc2FnZUludmFsaWRVc2VPZk51bGxBd2FyZUFjY2VzczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbnZhbGlkVXNlT2ZOdWxsQXdhcmVBY2Nlc3MgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbnZhbGlkVXNlT2ZOdWxsQXdhcmVBY2Nlc3MiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfVVNFX09GX05VTExfQVdBUkVfQUNDRVNTIl0sCiAgICBtZXNzYWdlOiByIiIiQ2Fubm90IHVzZSAnPy4nIGhlcmUuIiIiLAogICAgdGlwOiByIiIiVHJ5IHVzaW5nICcuJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW52YWxpZFZvaWQgPSBtZXNzYWdlSW52YWxpZFZvaWQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW52YWxpZFZvaWQgPSBjb25zdCBNZXNzYWdlQ29kZSgiSW52YWxpZFZvaWQiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkVYUEVDVEVEX1RZUEVfTkFNRSJdLAogICAgbWVzc2FnZToKICAgICAgICByIiIiVHlwZSAndm9pZCcgY2FuJ3QgYmUgdXNlZCBoZXJlIGJlY2F1c2UgaXQgaXNuJ3QgYSByZXR1cm4gdHlwZS4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSByZW1vdmluZyAndm9pZCcga2V5d29yZCBvciByZXBsYWNlIGl0IHdpdGggJ3ZhcicsICdmaW5hbCcsIG9yIGEgdHlwZS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlSW52b2tlTm9uRnVuY3Rpb24gPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIicjbmFtZScgaXNuJ3QgYSBmdW5jdGlvbiBvciBtZXRob2QgYW5kIGNhbid0IGJlIGludm9rZWQuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW52b2tlTm9uRnVuY3Rpb24pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUludm9rZU5vbkZ1bmN0aW9uID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJJbnZva2VOb25GdW5jdGlvbiIsIHRlbXBsYXRlSW52b2tlTm9uRnVuY3Rpb24sCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVk9DQVRJT05fT0ZfTk9OX0ZVTkNUSU9OIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludm9rZU5vbkZ1bmN0aW9uKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW52b2tlTm9uRnVuY3Rpb24sCiAgICAgIG1lc3NhZ2U6ICIiIicke25hbWV9JyBpc24ndCBhIGZ1bmN0aW9uIG9yIG1ldGhvZCBhbmQgY2FuJ3QgYmUgaW52b2tlZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUxhYmVsTm90Rm91bmQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJDYW4ndCBmaW5kIGxhYmVsICcjbmFtZScuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBkZWZpbmluZyB0aGUgbGFiZWwsIG9yIGNvcnJlY3RpbmcgdGhlIG5hbWUgdG8gbWF0Y2ggYW4gZXhpc3RpbmcgbGFiZWwuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNMYWJlbE5vdEZvdW5kKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVMYWJlbE5vdEZvdW5kID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJMYWJlbE5vdEZvdW5kIiwgdGVtcGxhdGVMYWJlbE5vdEZvdW5kLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJMQUJFTF9VTkRFRklORUQiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzTGFiZWxOb3RGb3VuZChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUxhYmVsTm90Rm91bmQsCiAgICAgIG1lc3NhZ2U6ICIiIkNhbid0IGZpbmQgbGFiZWwgJyR7bmFtZX0nLiIiIiwKICAgICAgdGlwOgogICAgICAgICAgIiIiVHJ5IGRlZmluaW5nIHRoZSBsYWJlbCwgb3IgY29ycmVjdGluZyB0aGUgbmFtZSB0byBtYXRjaCBhbiBleGlzdGluZyBsYWJlbC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVMYW5ndWFnZVZlcnNpb25JbnZhbGlkSW5Eb3RQYWNrYWdlcyA9CiAgICBtZXNzYWdlTGFuZ3VhZ2VWZXJzaW9uSW52YWxpZEluRG90UGFja2FnZXM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTGFuZ3VhZ2VWZXJzaW9uSW52YWxpZEluRG90UGFja2FnZXMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJMYW5ndWFnZVZlcnNpb25JbnZhbGlkSW5Eb3RQYWNrYWdlcyIsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJUaGUgbGFuZ3VhZ2UgdmVyc2lvbiBpcyBub3Qgc3BlY2lmaWVkIGNvcnJlY3RseSBpbiB0aGUgLnBhY2thZ2VzIGZpbGUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUxhbmd1YWdlVmVyc2lvbk1pc21hdGNoSW5QYXJ0ID0KICAgIG1lc3NhZ2VMYW5ndWFnZVZlcnNpb25NaXNtYXRjaEluUGFydDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VMYW5ndWFnZVZlcnNpb25NaXNtYXRjaEluUGFydCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkxhbmd1YWdlVmVyc2lvbk1pc21hdGNoSW5QYXJ0IiwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIlRoZSBsYW5ndWFnZSB2ZXJzaW9uIG92ZXJyaWRlIGhhcyB0byBiZSB0aGUgc2FtZSBpbiB0aGUgbGlicmFyeSBhbmQgaXRzIHBhcnQocykuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBpbnQgY291bnQsCiAgICAgICAgaW50CiAgICAgICAgICAgIGNvdW50Mik+IHRlbXBsYXRlTGFuZ3VhZ2VWZXJzaW9uVG9vSGlnaCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvdW50LCBpbnQgY291bnQyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBzcGVjaWZpZWQgbGFuZ3VhZ2UgdmVyc2lvbiBpcyB0b28gaGlnaC4gVGhlIGhpZ2hlc3Qgc3VwcG9ydGVkIGxhbmd1YWdlIHZlcnNpb24gaXMgI2NvdW50LiNjb3VudDIuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNMYW5ndWFnZVZlcnNpb25Ub29IaWdoKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihpbnQgY291bnQsIGludCBjb3VudDIpPiBjb2RlTGFuZ3VhZ2VWZXJzaW9uVG9vSGlnaCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvdW50LCBpbnQgY291bnQyKT4oCiAgIkxhbmd1YWdlVmVyc2lvblRvb0hpZ2giLAogIHRlbXBsYXRlTGFuZ3VhZ2VWZXJzaW9uVG9vSGlnaCwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNMYW5ndWFnZVZlcnNpb25Ub29IaWdoKGludCBjb3VudCwgaW50IGNvdW50MikgewogIGlmIChjb3VudCA9PSBudWxsKSB0aHJvdyAnTm8gY291bnQgcHJvdmlkZWQnOwogIGlmIChjb3VudDIgPT0gbnVsbCkgdGhyb3cgJ05vIGNvdW50IHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUxhbmd1YWdlVmVyc2lvblRvb0hpZ2gsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgc3BlY2lmaWVkIGxhbmd1YWdlIHZlcnNpb24gaXMgdG9vIGhpZ2guIFRoZSBoaWdoZXN0IHN1cHBvcnRlZCBsYW5ndWFnZSB2ZXJzaW9uIGlzICR7Y291bnR9LiR7Y291bnQyfS4iIiIsCiAgICAgIGFyZ3VtZW50czogeydjb3VudCc6IGNvdW50LCAnY291bnQyJzogY291bnQyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUxpYnJhcnlEaXJlY3RpdmVOb3RGaXJzdCA9IG1lc3NhZ2VMaWJyYXJ5RGlyZWN0aXZlTm90Rmlyc3Q7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTGlicmFyeURpcmVjdGl2ZU5vdEZpcnN0ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiTGlicmFyeURpcmVjdGl2ZU5vdEZpcnN0IiwKICAgIGluZGV4OiAzNywKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIlRoZSBsaWJyYXJ5IGRpcmVjdGl2ZSBtdXN0IGFwcGVhciBiZWZvcmUgYWxsIG90aGVyIGRpcmVjdGl2ZXMuIiIiLAogICAgdGlwOiByIiIiVHJ5IG1vdmluZyB0aGUgbGlicmFyeSBkaXJlY3RpdmUgYmVmb3JlIGFueSBvdGhlciBkaXJlY3RpdmVzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVMaXN0TGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzID0KICAgIG1lc3NhZ2VMaXN0TGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUxpc3RMaXRlcmFsVG9vTWFueVR5cGVBcmd1bWVudHMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJMaXN0TGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJFWFBFQ1RFRF9PTkVfTElTVF9UWVBFX0FSR1VNRU5UUyJdLAogICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZywKICAgIG1lc3NhZ2U6IHIiIiJMaXN0IGxpdGVyYWwgcmVxdWlyZXMgZXhhY3RseSBvbmUgdHlwZSBhcmd1bWVudC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4gdGVtcGxhdGVMb2FkTGlicmFyeUhpZGVzTWVtYmVyID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgbGlicmFyeSAnI3VyaScgZGVmaW5lcyBhIHRvcC1sZXZlbCBtZW1iZXIgbmFtZWQgJ2xvYWRMaWJyYXJ5Jy4gVGhpcyBtZW1iZXIgaXMgaGlkZGVuIGJ5IHRoZSBzcGVjaWFsIG1lbWJlciAnbG9hZExpYnJhcnknIHRoYXQgdGhlIGxhbmd1YWdlIGFkZHMgdG8gc3VwcG9ydCBkZWZlcnJlZCBsb2FkaW5nLiIiIiwKICAgIHRpcFRlbXBsYXRlOiByIiIiVHJ5IHRvIHJlbmFtZSBvciBoaWRlIHRoZSBtZW1iZXIuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNMb2FkTGlicmFyeUhpZGVzTWVtYmVyKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+IGNvZGVMb2FkTGlicmFyeUhpZGVzTWVtYmVyID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+KAogICAgICAgICJMb2FkTGlicmFyeUhpZGVzTWVtYmVyIiwgdGVtcGxhdGVMb2FkTGlicmFyeUhpZGVzTWVtYmVyLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pZ25vcmVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNMb2FkTGlicmFyeUhpZGVzTWVtYmVyKFVyaSB1cmlfKSB7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVMb2FkTGlicmFyeUhpZGVzTWVtYmVyLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIGxpYnJhcnkgJyR7dXJpfScgZGVmaW5lcyBhIHRvcC1sZXZlbCBtZW1iZXIgbmFtZWQgJ2xvYWRMaWJyYXJ5Jy4gVGhpcyBtZW1iZXIgaXMgaGlkZGVuIGJ5IHRoZSBzcGVjaWFsIG1lbWJlciAnbG9hZExpYnJhcnknIHRoYXQgdGhlIGxhbmd1YWdlIGFkZHMgdG8gc3VwcG9ydCBkZWZlcnJlZCBsb2FkaW5nLiIiIiwKICAgICAgdGlwOiAiIiJUcnkgdG8gcmVuYW1lIG9yIGhpZGUgdGhlIG1lbWJlci4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd1cmknOiB1cmlffSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUxvYWRMaWJyYXJ5VGFrZXNOb0FyZ3VtZW50cyA9CiAgICBtZXNzYWdlTG9hZExpYnJhcnlUYWtlc05vQXJndW1lbnRzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUxvYWRMaWJyYXJ5VGFrZXNOb0FyZ3VtZW50cyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkxvYWRMaWJyYXJ5VGFrZXNOb0FyZ3VtZW50cyIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTE9BRF9MSUJSQVJZX1RBS0VTX05PX0FSR1VNRU5UUyJdLAogICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZywKICAgIG1lc3NhZ2U6IHIiIiInbG9hZExpYnJhcnknIHRha2VzIG5vIGFyZ3VtZW50cy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8pPgogICAgdGVtcGxhdGVMb2NhbERlZmluaXRpb25IaWRlc0V4cG9ydCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkxvY2FsIGRlZmluaXRpb24gb2YgJyNuYW1lJyBoaWRlcyBleHBvcnQgZnJvbSAnI3VyaScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzTG9jYWxEZWZpbml0aW9uSGlkZXNFeHBvcnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+CiAgICBjb2RlTG9jYWxEZWZpbml0aW9uSGlkZXNFeHBvcnQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+KAogICAgICAgICJMb2NhbERlZmluaXRpb25IaWRlc0V4cG9ydCIsIHRlbXBsYXRlTG9jYWxEZWZpbml0aW9uSGlkZXNFeHBvcnQsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5Lmlnbm9yZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0xvY2FsRGVmaW5pdGlvbkhpZGVzRXhwb3J0KFN0cmluZyBuYW1lLCBVcmkgdXJpXykgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBTdHJpbmcgdXJpID0gcmVsYXRpdml6ZVVyaSh1cmlfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUxvY2FsRGVmaW5pdGlvbkhpZGVzRXhwb3J0LAogICAgICBtZXNzYWdlOiAiIiJMb2NhbCBkZWZpbml0aW9uIG9mICcke25hbWV9JyBoaWRlcyBleHBvcnQgZnJvbSAnJHt1cml9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ3VyaSc6IHVyaV99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8pPgogICAgdGVtcGxhdGVMb2NhbERlZmluaXRpb25IaWRlc0ltcG9ydCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkxvY2FsIGRlZmluaXRpb24gb2YgJyNuYW1lJyBoaWRlcyBpbXBvcnQgZnJvbSAnI3VyaScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzTG9jYWxEZWZpbml0aW9uSGlkZXNJbXBvcnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+CiAgICBjb2RlTG9jYWxEZWZpbml0aW9uSGlkZXNJbXBvcnQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+KAogICAgICAgICJMb2NhbERlZmluaXRpb25IaWRlc0ltcG9ydCIsIHRlbXBsYXRlTG9jYWxEZWZpbml0aW9uSGlkZXNJbXBvcnQsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5Lmlnbm9yZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0xvY2FsRGVmaW5pdGlvbkhpZGVzSW1wb3J0KFN0cmluZyBuYW1lLCBVcmkgdXJpXykgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBTdHJpbmcgdXJpID0gcmVsYXRpdml6ZVVyaSh1cmlfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUxvY2FsRGVmaW5pdGlvbkhpZGVzSW1wb3J0LAogICAgICBtZXNzYWdlOiAiIiJMb2NhbCBkZWZpbml0aW9uIG9mICcke25hbWV9JyBoaWRlcyBpbXBvcnQgZnJvbSAnJHt1cml9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ3VyaSc6IHVyaV99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTWFwTGl0ZXJhbFR5cGVBcmd1bWVudE1pc21hdGNoID0KICAgIG1lc3NhZ2VNYXBMaXRlcmFsVHlwZUFyZ3VtZW50TWlzbWF0Y2g7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTWFwTGl0ZXJhbFR5cGVBcmd1bWVudE1pc21hdGNoID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiTWFwTGl0ZXJhbFR5cGVBcmd1bWVudE1pc21hdGNoIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJFWFBFQ1RFRF9UV09fTUFQX1RZUEVfQVJHVU1FTlRTIl0sCiAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nLAogICAgbWVzc2FnZTogciIiIkEgbWFwIGxpdGVyYWwgcmVxdWlyZXMgZXhhY3RseSB0d28gdHlwZSBhcmd1bWVudHMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU1lbWJlcldpdGhTYW1lTmFtZUFzQ2xhc3MgPQogICAgbWVzc2FnZU1lbWJlcldpdGhTYW1lTmFtZUFzQ2xhc3M7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTWVtYmVyV2l0aFNhbWVOYW1lQXNDbGFzcyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk1lbWJlcldpdGhTYW1lTmFtZUFzQ2xhc3MiLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQSBjbGFzcyBtZW1iZXIgY2FuJ3QgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIHRoZSBlbmNsb3NpbmcgY2xhc3MuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU1ldGFkYXRhVHlwZUFyZ3VtZW50cyA9IG1lc3NhZ2VNZXRhZGF0YVR5cGVBcmd1bWVudHM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTWV0YWRhdGFUeXBlQXJndW1lbnRzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiTWV0YWRhdGFUeXBlQXJndW1lbnRzIiwKICAgIGluZGV4OiA5MSwKICAgIG1lc3NhZ2U6IHIiIiJBbiBhbm5vdGF0aW9uIChtZXRhZGF0YSkgY2FuJ3QgdXNlIHR5cGUgYXJndW1lbnRzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVNZXRob2ROb3RGb3VuZCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiTWV0aG9kIG5vdCBmb3VuZDogJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNNZXRob2ROb3RGb3VuZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlTWV0aG9kTm90Rm91bmQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIk1ldGhvZE5vdEZvdW5kIiwgdGVtcGxhdGVNZXRob2ROb3RGb3VuZCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVU5ERUZJTkVEX01FVEhPRCJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c01ldGhvZE5vdEZvdW5kKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTWV0aG9kTm90Rm91bmQsCiAgICAgIG1lc3NhZ2U6ICIiIk1ldGhvZCBub3QgZm91bmQ6ICcke25hbWV9Jy4iIiIsIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVNaXNzaW5nQXJndW1lbnRMaXN0ID0gbWVzc2FnZU1pc3NpbmdBcmd1bWVudExpc3Q7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTWlzc2luZ0FyZ3VtZW50TGlzdCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk1pc3NpbmdBcmd1bWVudExpc3QiLAogICAgbWVzc2FnZTogciIiIkNvbnN0cnVjdG9yIGludm9jYXRpb25zIG11c3QgaGF2ZSBhbiBhcmd1bWVudCBsaXN0LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVNaXNzaW5nQXNzaWduYWJsZVNlbGVjdG9yID0KICAgIG1lc3NhZ2VNaXNzaW5nQXNzaWduYWJsZVNlbGVjdG9yOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU1pc3NpbmdBc3NpZ25hYmxlU2VsZWN0b3IgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJNaXNzaW5nQXNzaWduYWJsZVNlbGVjdG9yIiwKICAgIGluZGV4OiAzNSwKICAgIG1lc3NhZ2U6IHIiIiJNaXNzaW5nIHNlbGVjdG9yIHN1Y2ggYXMgJy48aWRlbnRpZmllcj4nIG9yICdbMF0nLiIiIiwKICAgIHRpcDogciIiIlRyeSBhZGRpbmcgYSBzZWxlY3Rvci4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTWlzc2luZ0Fzc2lnbm1lbnRJbkluaXRpYWxpemVyID0KICAgIG1lc3NhZ2VNaXNzaW5nQXNzaWdubWVudEluSW5pdGlhbGl6ZXI7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTWlzc2luZ0Fzc2lnbm1lbnRJbkluaXRpYWxpemVyID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiTWlzc2luZ0Fzc2lnbm1lbnRJbkluaXRpYWxpemVyIiwKICAgIGluZGV4OiAzNCwKICAgIG1lc3NhZ2U6IHIiIiJFeHBlY3RlZCBhbiBhc3NpZ25tZW50IGFmdGVyIHRoZSBmaWVsZCBuYW1lLiIiIiwKICAgIHRpcDogciIiIlRvIGluaXRpYWxpemUgYSBmaWVsZCwgdXNlIHRoZSBzeW50YXggJ25hbWUgPSB2YWx1ZScuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU1pc3NpbmdDb25zdEZpbmFsVmFyT3JUeXBlID0KICAgIG1lc3NhZ2VNaXNzaW5nQ29uc3RGaW5hbFZhck9yVHlwZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VNaXNzaW5nQ29uc3RGaW5hbFZhck9yVHlwZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk1pc3NpbmdDb25zdEZpbmFsVmFyT3JUeXBlIiwKICAgIGluZGV4OiAzMywKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIlZhcmlhYmxlcyBtdXN0IGJlIGRlY2xhcmVkIHVzaW5nIHRoZSBrZXl3b3JkcyAnY29uc3QnLCAnZmluYWwnLCAndmFyJyBvciBhIHR5cGUgbmFtZS4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSBhZGRpbmcgdGhlIG5hbWUgb2YgdGhlIHR5cGUgb2YgdGhlIHZhcmlhYmxlIG9yIHRoZSBrZXl3b3JkICd2YXInLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKGludCBjb3VudCk+CiAgICB0ZW1wbGF0ZU1pc3NpbmdFeHBsaWNpdFR5cGVBcmd1bWVudHMgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihpbnQgY291bnQpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJObyB0eXBlIGFyZ3VtZW50cyBwcm92aWRlZCwgI2NvdW50IHBvc3NpYmxlLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c01pc3NpbmdFeHBsaWNpdFR5cGVBcmd1bWVudHMpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKGludCBjb3VudCk+IGNvZGVNaXNzaW5nRXhwbGljaXRUeXBlQXJndW1lbnRzID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihpbnQgY291bnQpPigKICAgICAgICAiTWlzc2luZ0V4cGxpY2l0VHlwZUFyZ3VtZW50cyIsIHRlbXBsYXRlTWlzc2luZ0V4cGxpY2l0VHlwZUFyZ3VtZW50cywKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuaWdub3JlZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzTWlzc2luZ0V4cGxpY2l0VHlwZUFyZ3VtZW50cyhpbnQgY291bnQpIHsKICBpZiAoY291bnQgPT0gbnVsbCkgdGhyb3cgJ05vIGNvdW50IHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZU1pc3NpbmdFeHBsaWNpdFR5cGVBcmd1bWVudHMsCiAgICAgIG1lc3NhZ2U6ICIiIk5vIHR5cGUgYXJndW1lbnRzIHByb3ZpZGVkLCAke2NvdW50fSBwb3NzaWJsZS4iIiIsCiAgICAgIGFyZ3VtZW50czogeydjb3VudCc6IGNvdW50fSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU1pc3NpbmdFeHBvbmVudCA9IG1lc3NhZ2VNaXNzaW5nRXhwb25lbnQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTWlzc2luZ0V4cG9uZW50ID0gY29uc3QgTWVzc2FnZUNvZGUoIk1pc3NpbmdFeHBvbmVudCIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTUlTU0lOR19ESUdJVCJdLAogICAgbWVzc2FnZToKICAgICAgICByIiIiTnVtYmVycyBpbiBleHBvbmVudGlhbCBub3RhdGlvbiBzaG91bGQgYWx3YXlzIGNvbnRhaW4gYW4gZXhwb25lbnQgKGFuIGludGVnZXIgbnVtYmVyIHdpdGggYW4gb3B0aW9uYWwgc2lnbikuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJNYWtlIHN1cmUgdGhlcmUgaXMgYW4gZXhwb25lbnQsIGFuZCByZW1vdmUgYW55IHdoaXRlc3BhY2UgYmVmb3JlIGl0LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVNaXNzaW5nRXhwcmVzc2lvbkluVGhyb3cgPSBtZXNzYWdlTWlzc2luZ0V4cHJlc3Npb25JblRocm93OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU1pc3NpbmdFeHByZXNzaW9uSW5UaHJvdyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk1pc3NpbmdFeHByZXNzaW9uSW5UaHJvdyIsCiAgICBpbmRleDogMzIsCiAgICBtZXNzYWdlOiByIiIiTWlzc2luZyBleHByZXNzaW9uIGFmdGVyICd0aHJvdycuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJBZGQgYW4gZXhwcmVzc2lvbiBhZnRlciAndGhyb3cnIG9yIHVzZSAncmV0aHJvdycgdG8gdGhyb3cgYSBjYXVnaHQgZXhjZXB0aW9uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU1pc3NpbmdGdW5jdGlvblBhcmFtZXRlcnMgPQogICAgbWVzc2FnZU1pc3NpbmdGdW5jdGlvblBhcmFtZXRlcnM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTWlzc2luZ0Z1bmN0aW9uUGFyYW1ldGVycyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk1pc3NpbmdGdW5jdGlvblBhcmFtZXRlcnMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk1JU1NJTkdfRlVOQ1RJT05fUEFSQU1FVEVSUyJdLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBuZWVkcyBhbiBleHBsaWNpdCBsaXN0IG9mIHBhcmFtZXRlcnMuIiIiLAogICAgdGlwOiByIiIiVHJ5IGFkZGluZyBhIHBhcmFtZXRlciBsaXN0IHRvIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbi4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZU1pc3NpbmdJbXBsZW1lbnRhdGlvbkNhdXNlID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiInI25hbWUnIGlzIGRlZmluZWQgaGVyZS4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNNaXNzaW5nSW1wbGVtZW50YXRpb25DYXVzZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlTWlzc2luZ0ltcGxlbWVudGF0aW9uQ2F1c2UgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIk1pc3NpbmdJbXBsZW1lbnRhdGlvbkNhdXNlIiwgdGVtcGxhdGVNaXNzaW5nSW1wbGVtZW50YXRpb25DYXVzZSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzTWlzc2luZ0ltcGxlbWVudGF0aW9uQ2F1c2UoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVNaXNzaW5nSW1wbGVtZW50YXRpb25DYXVzZSwKICAgICAgbWVzc2FnZTogIiIiJyR7bmFtZX0nIGlzIGRlZmluZWQgaGVyZS4iIiIsIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgTGlzdDxTdHJpbmc+CiAgICAgICAgICAgIF9uYW1lcyk+IHRlbXBsYXRlTWlzc2luZ0ltcGxlbWVudGF0aW9uTm90QWJzdHJhY3QgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBMaXN0PFN0cmluZz4gX25hbWVzKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBub24tYWJzdHJhY3QgY2xhc3MgJyNuYW1lJyBpcyBtaXNzaW5nIGltcGxlbWVudGF0aW9ucyBmb3IgdGhlc2UgbWVtYmVyczoKI25hbWVzIiIiLAogICAgdGlwVGVtcGxhdGU6IHIiIiJUcnkgdG8gZWl0aGVyCiAtIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24sCiAtIGluaGVyaXQgYW4gaW1wbGVtZW50YXRpb24gZnJvbSBhIHN1cGVyY2xhc3Mgb3IgbWl4aW4sCiAtIG1hcmsgdGhlIGNsYXNzIGFzIGFic3RyYWN0LCBvcgogLSBwcm92aWRlIGEgJ25vU3VjaE1ldGhvZCcgaW1wbGVtZW50YXRpb24uCiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzTWlzc2luZ0ltcGxlbWVudGF0aW9uTm90QWJzdHJhY3QpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBMaXN0PFN0cmluZz4gX25hbWVzKT4KICAgIGNvZGVNaXNzaW5nSW1wbGVtZW50YXRpb25Ob3RBYnN0cmFjdCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIExpc3Q8U3RyaW5nPiBfbmFtZXMpPigKICAgICAgICAiTWlzc2luZ0ltcGxlbWVudGF0aW9uTm90QWJzdHJhY3QiLAogICAgICAgIHRlbXBsYXRlTWlzc2luZ0ltcGxlbWVudGF0aW9uTm90QWJzdHJhY3QsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTkNSRVRFX0NMQVNTX1dJVEhfQUJTVFJBQ1RfTUVNQkVSIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c01pc3NpbmdJbXBsZW1lbnRhdGlvbk5vdEFic3RyYWN0KAogICAgU3RyaW5nIG5hbWUsIExpc3Q8U3RyaW5nPiBfbmFtZXMpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKF9uYW1lcy5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZXMgcHJvdmlkZWQnOwogIFN0cmluZyBuYW1lcyA9IGl0ZW1pemVOYW1lcyhfbmFtZXMpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTWlzc2luZ0ltcGxlbWVudGF0aW9uTm90QWJzdHJhY3QsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgbm9uLWFic3RyYWN0IGNsYXNzICcke25hbWV9JyBpcyBtaXNzaW5nIGltcGxlbWVudGF0aW9ucyBmb3IgdGhlc2UgbWVtYmVyczoKJHtuYW1lc30iIiIsCiAgICAgIHRpcDogIiIiVHJ5IHRvIGVpdGhlcgogLSBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uLAogLSBpbmhlcml0IGFuIGltcGxlbWVudGF0aW9uIGZyb20gYSBzdXBlcmNsYXNzIG9yIG1peGluLAogLSBtYXJrIHRoZSBjbGFzcyBhcyBhYnN0cmFjdCwgb3IKIC0gcHJvdmlkZSBhICdub1N1Y2hNZXRob2QnIGltcGxlbWVudGF0aW9uLgoiIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ25hbWVzJzogX25hbWVzfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU1pc3NpbmdJbnB1dCA9IG1lc3NhZ2VNaXNzaW5nSW5wdXQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTWlzc2luZ0lucHV0ID0gY29uc3QgTWVzc2FnZUNvZGUoIk1pc3NpbmdJbnB1dCIsCiAgICBtZXNzYWdlOiByIiIiTm8gaW5wdXQgZmlsZSBwcm92aWRlZCB0byB0aGUgY29tcGlsZXIuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU1pc3NpbmdNYWluID0gbWVzc2FnZU1pc3NpbmdNYWluOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU1pc3NpbmdNYWluID0gY29uc3QgTWVzc2FnZUNvZGUoIk1pc3NpbmdNYWluIiwKICAgIG1lc3NhZ2U6IHIiIiJObyAnbWFpbicgbWV0aG9kIGZvdW5kLiIiIiwKICAgIHRpcDogciIiIlRyeSBhZGRpbmcgYSBtZXRob2QgbmFtZWQgJ21haW4nIHRvIHlvdXIgcHJvZ3JhbS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTWlzc2luZ01ldGhvZFBhcmFtZXRlcnMgPSBtZXNzYWdlTWlzc2luZ01ldGhvZFBhcmFtZXRlcnM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTWlzc2luZ01ldGhvZFBhcmFtZXRlcnMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJNaXNzaW5nTWV0aG9kUGFyYW1ldGVycyIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTUlTU0lOR19NRVRIT0RfUEFSQU1FVEVSUyJdLAogICAgbWVzc2FnZTogciIiIkEgbWV0aG9kIGRlY2xhcmF0aW9uIG5lZWRzIGFuIGV4cGxpY2l0IGxpc3Qgb2YgcGFyYW1ldGVycy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgYWRkaW5nIGEgcGFyYW1ldGVyIGxpc3QgdG8gdGhlIG1ldGhvZCBkZWNsYXJhdGlvbi4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTWlzc2luZ09wZXJhdG9yS2V5d29yZCA9IG1lc3NhZ2VNaXNzaW5nT3BlcmF0b3JLZXl3b3JkOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU1pc3NpbmdPcGVyYXRvcktleXdvcmQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJNaXNzaW5nT3BlcmF0b3JLZXl3b3JkIiwKICAgIGluZGV4OiAzMSwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIk9wZXJhdG9yIGRlY2xhcmF0aW9ucyBtdXN0IGJlIHByZWNlZGVkIGJ5IHRoZSBrZXl3b3JkICdvcGVyYXRvcicuIiIiLAogICAgdGlwOiByIiIiVHJ5IGFkZGluZyB0aGUga2V5d29yZCAnb3BlcmF0b3InLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPiB0ZW1wbGF0ZU1pc3NpbmdQYXJ0T2YgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkNhbid0IHVzZSAnI3VyaScgYXMgYSBwYXJ0LCBiZWNhdXNlIGl0IGhhcyBubyAncGFydCBvZicgZGVjbGFyYXRpb24uIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNNaXNzaW5nUGFydE9mKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+IGNvZGVNaXNzaW5nUGFydE9mID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+KAogICAgICAgICJNaXNzaW5nUGFydE9mIiwgdGVtcGxhdGVNaXNzaW5nUGFydE9mLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJQQVJUX09GX05PTl9QQVJUIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c01pc3NpbmdQYXJ0T2YoVXJpIHVyaV8pIHsKICBTdHJpbmcgdXJpID0gcmVsYXRpdml6ZVVyaSh1cmlfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZU1pc3NpbmdQYXJ0T2YsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJDYW4ndCB1c2UgJyR7dXJpfScgYXMgYSBwYXJ0LCBiZWNhdXNlIGl0IGhhcyBubyAncGFydCBvZicgZGVjbGFyYXRpb24uIiIiLAogICAgICBhcmd1bWVudHM6IHsndXJpJzogdXJpX30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVNaXNzaW5nUHJlZml4SW5EZWZlcnJlZEltcG9ydCA9CiAgICBtZXNzYWdlTWlzc2luZ1ByZWZpeEluRGVmZXJyZWRJbXBvcnQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTWlzc2luZ1ByZWZpeEluRGVmZXJyZWRJbXBvcnQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJNaXNzaW5nUHJlZml4SW5EZWZlcnJlZEltcG9ydCIsCiAgICBpbmRleDogMzAsCiAgICBtZXNzYWdlOiByIiIiRGVmZXJyZWQgaW1wb3J0cyBzaG91bGQgaGF2ZSBhIHByZWZpeC4iIiIsCiAgICB0aXA6IHIiIiJUcnkgYWRkaW5nIGEgcHJlZml4IHRvIHRoZSBpbXBvcnQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU1pc3NpbmdUeXBlZGVmUGFyYW1ldGVycyA9IG1lc3NhZ2VNaXNzaW5nVHlwZWRlZlBhcmFtZXRlcnM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTWlzc2luZ1R5cGVkZWZQYXJhbWV0ZXJzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiTWlzc2luZ1R5cGVkZWZQYXJhbWV0ZXJzIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJNSVNTSU5HX1RZUEVERUZfUEFSQU1FVEVSUyJdLAogICAgbWVzc2FnZTogciIiIkEgdHlwZWRlZiBuZWVkcyBhbiBleHBsaWNpdCBsaXN0IG9mIHBhcmFtZXRlcnMuIiIiLAogICAgdGlwOiByIiIiVHJ5IGFkZGluZyBhIHBhcmFtZXRlciBsaXN0IHRvIHRoZSB0eXBlZGVmLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIERhcnRUeXBlIF90eXBlMyk+CiAgICB0ZW1wbGF0ZU1peGluQXBwbGljYXRpb25JbmNvbXBhdGlibGVTdXBlcnR5cGUgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBEYXJ0VHlwZSBfdHlwZTMpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiInI3R5cGUnIGRvZXNuJ3QgaW1wbGVtZW50ICcjdHlwZTInIHNvIGl0IGNhbid0IGJlIHVzZWQgd2l0aCAnI3R5cGUzJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNNaXhpbkFwcGxpY2F0aW9uSW5jb21wYXRpYmxlU3VwZXJ0eXBlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBEYXJ0VHlwZSBfdHlwZTMpPgogICAgY29kZU1peGluQXBwbGljYXRpb25JbmNvbXBhdGlibGVTdXBlcnR5cGUgPSBjb25zdCBDb2RlPAogICAgICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIERhcnRUeXBlIF90eXBlMyk+KAogICAgICAgICJNaXhpbkFwcGxpY2F0aW9uSW5jb21wYXRpYmxlU3VwZXJ0eXBlIiwKICAgICAgICB0ZW1wbGF0ZU1peGluQXBwbGljYXRpb25JbmNvbXBhdGlibGVTdXBlcnR5cGUsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk1JWElOX0FQUExJQ0FUSU9OX05PVF9JTVBMRU1FTlRFRF9JTlRFUkZBQ0UiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzTWl4aW5BcHBsaWNhdGlvbkluY29tcGF0aWJsZVN1cGVydHlwZSgKICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIERhcnRUeXBlIF90eXBlMykgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBMaXN0PE9iamVjdD4gdHlwZTNQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMyk7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMyA9IHR5cGUzUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTWl4aW5BcHBsaWNhdGlvbkluY29tcGF0aWJsZVN1cGVydHlwZSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIicke3R5cGV9JyBkb2Vzbid0IGltcGxlbWVudCAnJHt0eXBlMn0nIHNvIGl0IGNhbid0IGJlIHVzZWQgd2l0aCAnJHt0eXBlM30nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZSwgJ3R5cGUyJzogX3R5cGUyLCAndHlwZTMnOiBfdHlwZTN9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIFN0cmluZyBuYW1lMiwKICAgICAgICBEYXJ0VHlwZQogICAgICAgICAgICBfdHlwZSk+IHRlbXBsYXRlTWl4aW5JbmZlcmVuY2VOb01hdGNoaW5nQ2xhc3MgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIsIERhcnRUeXBlIF90eXBlKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlR5cGUgcGFyYW1ldGVycyBjb3VsZCBub3QgYmUgaW5mZXJyZWQgZm9yIHRoZSBtaXhpbiAnI25hbWUnIGJlY2F1c2UgJyNuYW1lMicgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBtaXhpbidzIHN1cGVydHlwZSBjb25zdHJhaW50ICcjdHlwZScuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNNaXhpbkluZmVyZW5jZU5vTWF0Y2hpbmdDbGFzcyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMiwgRGFydFR5cGUgX3R5cGUpPgogICAgY29kZU1peGluSW5mZXJlbmNlTm9NYXRjaGluZ0NsYXNzID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyLCBEYXJ0VHlwZSBfdHlwZSk+KAogICAgICAgICJNaXhpbkluZmVyZW5jZU5vTWF0Y2hpbmdDbGFzcyIsIHRlbXBsYXRlTWl4aW5JbmZlcmVuY2VOb01hdGNoaW5nQ2xhc3MsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk1JWElOX0lORkVSRU5DRV9OT19QT1NTSUJMRV9TVUJTVElUVVRJT04iXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzTWl4aW5JbmZlcmVuY2VOb01hdGNoaW5nQ2xhc3MoCiAgICBTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyLCBEYXJ0VHlwZSBfdHlwZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBpZiAobmFtZTIuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUyID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMik7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTWl4aW5JbmZlcmVuY2VOb01hdGNoaW5nQ2xhc3MsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUeXBlIHBhcmFtZXRlcnMgY291bGQgbm90IGJlIGluZmVycmVkIGZvciB0aGUgbWl4aW4gJyR7bmFtZX0nIGJlY2F1c2UgJyR7bmFtZTJ9JyBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIG1peGluJ3Mgc3VwZXJ0eXBlIGNvbnN0cmFpbnQgJyR7dHlwZX0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAnbmFtZTInOiBuYW1lMiwgJ3R5cGUnOiBfdHlwZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIHN0cmluZywKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgc3RyaW5nMik+IHRlbXBsYXRlTW9kaWZpZXJPdXRPZk9yZGVyID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgbW9kaWZpZXIgJyNzdHJpbmcnIHNob3VsZCBiZSBiZWZvcmUgdGhlIG1vZGlmaWVyICcjc3RyaW5nMicuIiIiLAogICAgdGlwVGVtcGxhdGU6IHIiIiJUcnkgcmUtb3JkZXJpbmcgdGhlIG1vZGlmaWVycy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c01vZGlmaWVyT3V0T2ZPcmRlcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPgogICAgY29kZU1vZGlmaWVyT3V0T2ZPcmRlciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPigKICAgICAgICAiTW9kaWZpZXJPdXRPZk9yZGVyIiwgdGVtcGxhdGVNb2RpZmllck91dE9mT3JkZXIsCiAgICAgICAgaW5kZXg6IDU2KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNNb2RpZmllck91dE9mT3JkZXIoU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIGlmIChzdHJpbmcyLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTW9kaWZpZXJPdXRPZk9yZGVyLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIG1vZGlmaWVyICcke3N0cmluZ30nIHNob3VsZCBiZSBiZWZvcmUgdGhlIG1vZGlmaWVyICcke3N0cmluZzJ9Jy4iIiIsCiAgICAgIHRpcDogIiIiVHJ5IHJlLW9yZGVyaW5nIHRoZSBtb2RpZmllcnMuIiIiLAogICAgICBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nLCAnc3RyaW5nMic6IHN0cmluZzJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTW9yZVRoYW5PbmVTdXBlck9yVGhpc0luaXRpYWxpemVyID0KICAgIG1lc3NhZ2VNb3JlVGhhbk9uZVN1cGVyT3JUaGlzSW5pdGlhbGl6ZXI7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTW9yZVRoYW5PbmVTdXBlck9yVGhpc0luaXRpYWxpemVyID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiTW9yZVRoYW5PbmVTdXBlck9yVGhpc0luaXRpYWxpemVyIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJTVVBFUl9JTl9SRURJUkVDVElOR19DT05TVFJVQ1RPUiJdLAogICAgbWVzc2FnZTogciIiIkNhbid0IGhhdmUgbW9yZSB0aGFuIG9uZSAnc3VwZXInIG9yICd0aGlzJyBpbml0aWFsaXplci4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTXVsdGlwbGVFeHRlbmRzID0gbWVzc2FnZU11bHRpcGxlRXh0ZW5kczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VNdWx0aXBsZUV4dGVuZHMgPSBjb25zdCBNZXNzYWdlQ29kZSgiTXVsdGlwbGVFeHRlbmRzIiwKICAgIGluZGV4OiAyOCwKICAgIG1lc3NhZ2U6IHIiIiJFYWNoIGNsYXNzIGRlZmluaXRpb24gY2FuIGhhdmUgYXQgbW9zdCBvbmUgZXh0ZW5kcyBjbGF1c2UuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgY2hvb3Npbmcgb25lIHN1cGVyY2xhc3MgYW5kIGRlZmluZSB5b3VyIGNsYXNzIHRvIGltcGxlbWVudCAob3IgbWl4IGluKSB0aGUgb3RoZXJzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVNdWx0aXBsZUltcGxlbWVudHMgPSBtZXNzYWdlTXVsdGlwbGVJbXBsZW1lbnRzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU11bHRpcGxlSW1wbGVtZW50cyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk11bHRpcGxlSW1wbGVtZW50cyIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTVVMVElQTEVfSU1QTEVNRU5UU19DTEFVU0VTIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJFYWNoIGNsYXNzIGRlZmluaXRpb24gY2FuIGhhdmUgYXQgbW9zdCBvbmUgaW1wbGVtZW50cyBjbGF1c2UuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgY29tYmluaW5nIGFsbCBvZiB0aGUgaW1wbGVtZW50cyBjbGF1c2VzIGludG8gYSBzaW5nbGUgY2xhdXNlLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVNdWx0aXBsZUxpYnJhcnlEaXJlY3RpdmVzID0KICAgIG1lc3NhZ2VNdWx0aXBsZUxpYnJhcnlEaXJlY3RpdmVzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU11bHRpcGxlTGlicmFyeURpcmVjdGl2ZXMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJNdWx0aXBsZUxpYnJhcnlEaXJlY3RpdmVzIiwKICAgIGluZGV4OiAyNywKICAgIG1lc3NhZ2U6IHIiIiJPbmx5IG9uZSBsaWJyYXJ5IGRpcmVjdGl2ZSBtYXkgYmUgZGVjbGFyZWQgaW4gYSBmaWxlLiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyBhbGwgYnV0IG9uZSBvZiB0aGUgbGlicmFyeSBkaXJlY3RpdmVzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVNdWx0aXBsZU9uQ2xhdXNlcyA9IG1lc3NhZ2VNdWx0aXBsZU9uQ2xhdXNlczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VNdWx0aXBsZU9uQ2xhdXNlcyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk11bHRpcGxlT25DbGF1c2VzIiwKICAgIGluZGV4OiAyNiwKICAgIG1lc3NhZ2U6IHIiIiJFYWNoIG1peGluIGRlZmluaXRpb24gY2FuIGhhdmUgYXQgbW9zdCBvbmUgb24gY2xhdXNlLiIiIiwKICAgIHRpcDogciIiIlRyeSBjb21iaW5pbmcgYWxsIG9mIHRoZSBvbiBjbGF1c2VzIGludG8gYSBzaW5nbGUgY2xhdXNlLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVNdWx0aXBsZVdpdGggPSBtZXNzYWdlTXVsdGlwbGVXaXRoOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU11bHRpcGxlV2l0aCA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJNdWx0aXBsZVdpdGgiLAogICAgaW5kZXg6IDI0LAogICAgbWVzc2FnZTogciIiIkVhY2ggY2xhc3MgZGVmaW5pdGlvbiBjYW4gaGF2ZSBhdCBtb3N0IG9uZSB3aXRoIGNsYXVzZS4iIiIsCiAgICB0aXA6IHIiIiJUcnkgY29tYmluaW5nIGFsbCBvZiB0aGUgd2l0aCBjbGF1c2VzIGludG8gYSBzaW5nbGUgY2xhdXNlLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVOYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbiA9IG1lc3NhZ2VOYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VOYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbiA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk5hbWVkRnVuY3Rpb25FeHByZXNzaW9uIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJOQU1FRF9GVU5DVElPTl9FWFBSRVNTSU9OIl0sCiAgICBtZXNzYWdlOiByIiIiQSBmdW5jdGlvbiBleHByZXNzaW9uIGNhbid0IGhhdmUgYSBuYW1lLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUpPiB0ZW1wbGF0ZU5hbWVkTWl4aW5PdmVycmlkZUNvbnRleHQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIk92ZXJyaWRlIHdhcyBpbnRyb2R1Y2VkIGluIHRoZSBtaXhpbiBhcHBsaWNhdGlvbiBjbGFzcyAnI25hbWUnLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzTmFtZWRNaXhpbk92ZXJyaWRlQ29udGV4dCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlTmFtZWRNaXhpbk92ZXJyaWRlQ29udGV4dCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiTmFtZWRNaXhpbk92ZXJyaWRlQ29udGV4dCIsIHRlbXBsYXRlTmFtZWRNaXhpbk92ZXJyaWRlQ29udGV4dCwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzTmFtZWRNaXhpbk92ZXJyaWRlQ29udGV4dChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZU5hbWVkTWl4aW5PdmVycmlkZUNvbnRleHQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJPdmVycmlkZSB3YXMgaW50cm9kdWNlZCBpbiB0aGUgbWl4aW4gYXBwbGljYXRpb24gY2xhc3MgJyR7bmFtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU5hdGl2ZUNsYXVzZVNob3VsZEJlQW5ub3RhdGlvbiA9CiAgICBtZXNzYWdlTmF0aXZlQ2xhdXNlU2hvdWxkQmVBbm5vdGF0aW9uOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU5hdGl2ZUNsYXVzZVNob3VsZEJlQW5ub3RhdGlvbiA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk5hdGl2ZUNsYXVzZVNob3VsZEJlQW5ub3RhdGlvbiIsCiAgICBpbmRleDogMjMsCiAgICBtZXNzYWdlOiByIiIiTmF0aXZlIGNsYXVzZSBpbiB0aGlzIGZvcm0gaXMgZGVwcmVjYXRlZC4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSByZW1vdmluZyB0aGlzIG5hdGl2ZSBjbGF1c2UgYW5kIGFkZGluZyBAbmF0aXZlKCkgb3IgQG5hdGl2ZSgnbmF0aXZlLW5hbWUnKSBiZWZvcmUgdGhlIGRlY2xhcmF0aW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiB0ZW1wbGF0ZU5vRm9ybWFscyA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkEgZnVuY3Rpb24gc2hvdWxkIGhhdmUgZm9ybWFsIHBhcmFtZXRlcnMuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBhZGRpbmcgJygpJyBhZnRlciAnI2xleGVtZScsIG9yIGFkZCAnZ2V0JyBiZWZvcmUgJyNsZXhlbWUnIHRvIGRlY2xhcmUgYSBnZXR0ZXIuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNOb0Zvcm1hbHMpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gY29kZU5vRm9ybWFscyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigiTm9Gb3JtYWxzIiwgdGVtcGxhdGVOb0Zvcm1hbHMsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk1JU1NJTkdfRlVOQ1RJT05fUEFSQU1FVEVSUyJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNOb0Zvcm1hbHMoVG9rZW4gdG9rZW4pIHsKICBTdHJpbmcgbGV4ZW1lID0gdG9rZW4ubGV4ZW1lOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTm9Gb3JtYWxzLAogICAgICBtZXNzYWdlOiAiIiJBIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGZvcm1hbCBwYXJhbWV0ZXJzLiIiIiwKICAgICAgdGlwOgogICAgICAgICAgIiIiVHJ5IGFkZGluZyAnKCknIGFmdGVyICcke2xleGVtZX0nLCBvciBhZGQgJ2dldCcgYmVmb3JlICcke2xleGVtZX0nIHRvIGRlY2xhcmUgYSBnZXR0ZXIuIiIiLAogICAgICBhcmd1bWVudHM6IHsndG9rZW4nOiB0b2tlbn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVOb1N1Y2hOYW1lZFBhcmFtZXRlciA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiTm8gbmFtZWQgcGFyYW1ldGVyIHdpdGggdGhlIG5hbWUgJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNOb1N1Y2hOYW1lZFBhcmFtZXRlcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlTm9TdWNoTmFtZWRQYXJhbWV0ZXIgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIk5vU3VjaE5hbWVkUGFyYW1ldGVyIiwgdGVtcGxhdGVOb1N1Y2hOYW1lZFBhcmFtZXRlciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVU5ERUZJTkVEX05BTUVEX1BBUkFNRVRFUiJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c05vU3VjaE5hbWVkUGFyYW1ldGVyKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTm9TdWNoTmFtZWRQYXJhbWV0ZXIsCiAgICAgIG1lc3NhZ2U6ICIiIk5vIG5hbWVkIHBhcmFtZXRlciB3aXRoIHRoZSBuYW1lICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVOb1VubmFtZWRDb25zdHJ1Y3RvckluT2JqZWN0ID0KICAgIG1lc3NhZ2VOb1VubmFtZWRDb25zdHJ1Y3RvckluT2JqZWN0OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU5vVW5uYW1lZENvbnN0cnVjdG9ySW5PYmplY3QgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJOb1VubmFtZWRDb25zdHJ1Y3RvckluT2JqZWN0IiwKICAgIG1lc3NhZ2U6IHIiIiInT2JqZWN0JyBoYXMgbm8gdW5uYW1lZCBjb25zdHJ1Y3Rvci4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBjaGFyYWN0ZXIsCiAgICAgICAgaW50CiAgICAgICAgICAgIGNvZGVQb2ludCk+IHRlbXBsYXRlTm9uQXNjaWlJZGVudGlmaWVyID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgY2hhcmFjdGVyLCBpbnQgY29kZVBvaW50KT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBub24tQVNDSUkgY2hhcmFjdGVyICcjY2hhcmFjdGVyJyAoI3VuaWNvZGUpIGNhbid0IGJlIHVzZWQgaW4gaWRlbnRpZmllcnMsIG9ubHkgaW4gc3RyaW5ncyBhbmQgY29tbWVudHMuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSB1c2luZyBhbiBVUy1BU0NJSSBsZXR0ZXIsIGEgZGlnaXQsICdfJyAoYW4gdW5kZXJzY29yZSksIG9yICckJyAoYSBkb2xsYXIgc2lnbikuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNOb25Bc2NpaUlkZW50aWZpZXIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBjaGFyYWN0ZXIsIGludCBjb2RlUG9pbnQpPgogICAgY29kZU5vbkFzY2lpSWRlbnRpZmllciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIGNoYXJhY3RlciwgaW50IGNvZGVQb2ludCk+KAogICAgICAgICJOb25Bc2NpaUlkZW50aWZpZXIiLCB0ZW1wbGF0ZU5vbkFzY2lpSWRlbnRpZmllciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSUxMRUdBTF9DSEFSQUNURVIiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzTm9uQXNjaWlJZGVudGlmaWVyKFN0cmluZyBjaGFyYWN0ZXIsIGludCBjb2RlUG9pbnQpIHsKICBpZiAoY2hhcmFjdGVyLnJ1bmVzLmxlbmd0aCAhPSAxKSB0aHJvdyAiTm90IGEgY2hhcmFjdGVyICcke2NoYXJhY3Rlcn0nIjsKICBTdHJpbmcgdW5pY29kZSA9CiAgICAgICJVKyR7Y29kZVBvaW50LnRvUmFkaXhTdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkucGFkTGVmdCg0LCAnMCcpfSI7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVOb25Bc2NpaUlkZW50aWZpZXIsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgbm9uLUFTQ0lJIGNoYXJhY3RlciAnJHtjaGFyYWN0ZXJ9JyAoJHt1bmljb2RlfSkgY2FuJ3QgYmUgdXNlZCBpbiBpZGVudGlmaWVycywgb25seSBpbiBzdHJpbmdzIGFuZCBjb21tZW50cy4iIiIsCiAgICAgIHRpcDogIiIiVHJ5IHVzaW5nIGFuIFVTLUFTQ0lJIGxldHRlciwgYSBkaWdpdCwgJ18nIChhbiB1bmRlcnNjb3JlKSwgb3IgJ1wkJyAoYSBkb2xsYXIgc2lnbikuIiIiLAogICAgICBhcmd1bWVudHM6IHsnY2hhcmFjdGVyJzogY2hhcmFjdGVyLCAnY29kZVBvaW50JzogY29kZVBvaW50fSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBpbnQKICAgICAgICAgICAgY29kZVBvaW50KT4gdGVtcGxhdGVOb25Bc2NpaVdoaXRlc3BhY2UgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKGludCBjb2RlUG9pbnQpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIG5vbi1BU0NJSSBzcGFjZSBjaGFyYWN0ZXIgI3VuaWNvZGUgY2FuIG9ubHkgYmUgdXNlZCBpbiBzdHJpbmdzIGFuZCBjb21tZW50cy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c05vbkFzY2lpV2hpdGVzcGFjZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvZGVQb2ludCk+IGNvZGVOb25Bc2NpaVdoaXRlc3BhY2UgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKGludCBjb2RlUG9pbnQpPigKICAgICAgICAiTm9uQXNjaWlXaGl0ZXNwYWNlIiwgdGVtcGxhdGVOb25Bc2NpaVdoaXRlc3BhY2UsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklMTEVHQUxfQ0hBUkFDVEVSIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c05vbkFzY2lpV2hpdGVzcGFjZShpbnQgY29kZVBvaW50KSB7CiAgU3RyaW5nIHVuaWNvZGUgPQogICAgICAiVSske2NvZGVQb2ludC50b1JhZGl4U3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnBhZExlZnQoNCwgJzAnKX0iOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTm9uQXNjaWlXaGl0ZXNwYWNlLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIG5vbi1BU0NJSSBzcGFjZSBjaGFyYWN0ZXIgJHt1bmljb2RlfSBjYW4gb25seSBiZSB1c2VkIGluIHN0cmluZ3MgYW5kIGNvbW1lbnRzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J2NvZGVQb2ludCc6IGNvZGVQb2ludH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVOb25Db25zdENvbnN0cnVjdG9yID0gbWVzc2FnZU5vbkNvbnN0Q29uc3RydWN0b3I7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTm9uQ29uc3RDb25zdHJ1Y3RvciA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk5vbkNvbnN0Q29uc3RydWN0b3IiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk5PVF9DT05TVEFOVF9FWFBSRVNTSU9OIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJDYW5ub3QgaW52b2tlIGEgbm9uLSdjb25zdCcgY29uc3RydWN0b3Igd2hlcmUgYSBjb25zdCBleHByZXNzaW9uIGlzIGV4cGVjdGVkLiIiIiwKICAgIHRpcDogciIiIlRyeSB1c2luZyBhIGNvbnN0cnVjdG9yIG9yIGZhY3RvcnkgdGhhdCBpcyAnY29uc3QnLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVOb25Db25zdEZhY3RvcnkgPSBtZXNzYWdlTm9uQ29uc3RGYWN0b3J5OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU5vbkNvbnN0RmFjdG9yeSA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJOb25Db25zdEZhY3RvcnkiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk5PVF9DT05TVEFOVF9FWFBSRVNTSU9OIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJDYW5ub3QgaW52b2tlIGEgbm9uLSdjb25zdCcgZmFjdG9yeSB3aGVyZSBhIGNvbnN0IGV4cHJlc3Npb24gaXMgZXhwZWN0ZWQuIiIiLAogICAgdGlwOiByIiIiVHJ5IHVzaW5nIGEgY29uc3RydWN0b3Igb3IgZmFjdG9yeSB0aGF0IGlzICdjb25zdCcuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU5vbkluc3RhbmNlVHlwZVZhcmlhYmxlVXNlID0KICAgIG1lc3NhZ2VOb25JbnN0YW5jZVR5cGVWYXJpYWJsZVVzZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VOb25JbnN0YW5jZVR5cGVWYXJpYWJsZVVzZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk5vbkluc3RhbmNlVHlwZVZhcmlhYmxlVXNlIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJUWVBFX1BBUkFNRVRFUl9SRUZFUkVOQ0VEX0JZX1NUQVRJQyJdLAogICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZywKICAgIG1lc3NhZ2U6IHIiIiJDYW4gb25seSB1c2UgdHlwZSB2YXJpYWJsZXMgaW4gaW5zdGFuY2UgbWV0aG9kcy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTm9uTnVsbEF3YXJlU3ByZWFkSXNOdWxsID0gbWVzc2FnZU5vbk51bGxBd2FyZVNwcmVhZElzTnVsbDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VOb25OdWxsQXdhcmVTcHJlYWRJc051bGwgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJOb25OdWxsQXdhcmVTcHJlYWRJc051bGwiLAogICAgbWVzc2FnZTogciIiIkNhbid0IHNwcmVhZCBhIHZhbHVlIHdpdGggc3RhdGljIHR5cGUgTnVsbC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTm9uUGFydE9mRGlyZWN0aXZlSW5QYXJ0ID0gbWVzc2FnZU5vblBhcnRPZkRpcmVjdGl2ZUluUGFydDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VOb25QYXJ0T2ZEaXJlY3RpdmVJblBhcnQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJOb25QYXJ0T2ZEaXJlY3RpdmVJblBhcnQiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk5PTl9QQVJUX09GX0RJUkVDVElWRV9JTl9QQVJUIl0sCiAgICBtZXNzYWdlOiByIiIiVGhlIHBhcnQtb2YgZGlyZWN0aXZlIG11c3QgYmUgdGhlIG9ubHkgZGlyZWN0aXZlIGluIGEgcGFydC4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSByZW1vdmluZyB0aGUgb3RoZXIgZGlyZWN0aXZlcywgb3IgbW92aW5nIHRoZW0gdG8gdGhlIGxpYnJhcnkgZm9yIHdoaWNoIHRoaXMgaXMgYSBwYXJ0LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlTm9uU2ltcGxlQm91bmRWaWFSZWZlcmVuY2UgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkJvdW5kIG9mIHRoaXMgdmFyaWFibGUgcmVmZXJlbmNlcyByYXcgdHlwZSAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c05vblNpbXBsZUJvdW5kVmlhUmVmZXJlbmNlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVOb25TaW1wbGVCb3VuZFZpYVJlZmVyZW5jZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiTm9uU2ltcGxlQm91bmRWaWFSZWZlcmVuY2UiLCB0ZW1wbGF0ZU5vblNpbXBsZUJvdW5kVmlhUmVmZXJlbmNlLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNOb25TaW1wbGVCb3VuZFZpYVJlZmVyZW5jZShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZU5vblNpbXBsZUJvdW5kVmlhUmVmZXJlbmNlLAogICAgICBtZXNzYWdlOiAiIiJCb3VuZCBvZiB0aGlzIHZhcmlhYmxlIHJlZmVyZW5jZXMgcmF3IHR5cGUgJyR7bmFtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZSk+IHRlbXBsYXRlTm9uU2ltcGxlQm91bmRWaWFWYXJpYWJsZSA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiQm91bmQgb2YgdGhpcyB2YXJpYWJsZSByZWZlcmVuY2VzIHZhcmlhYmxlICcjbmFtZScgZnJvbSB0aGUgc2FtZSBkZWNsYXJhdGlvbi4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c05vblNpbXBsZUJvdW5kVmlhVmFyaWFibGUpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZU5vblNpbXBsZUJvdW5kVmlhVmFyaWFibGUgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIk5vblNpbXBsZUJvdW5kVmlhVmFyaWFibGUiLCB0ZW1wbGF0ZU5vblNpbXBsZUJvdW5kVmlhVmFyaWFibGUsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c05vblNpbXBsZUJvdW5kVmlhVmFyaWFibGUoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVOb25TaW1wbGVCb3VuZFZpYVZhcmlhYmxlLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiQm91bmQgb2YgdGhpcyB2YXJpYWJsZSByZWZlcmVuY2VzIHZhcmlhYmxlICcke25hbWV9JyBmcm9tIHRoZSBzYW1lIGRlY2xhcmF0aW9uLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU5vdEFDb25zdGFudEV4cHJlc3Npb24gPSBtZXNzYWdlTm90QUNvbnN0YW50RXhwcmVzc2lvbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VOb3RBQ29uc3RhbnRFeHByZXNzaW9uID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiTm90QUNvbnN0YW50RXhwcmVzc2lvbiIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTk9UX0NPTlNUQU5UX0VYUFJFU1NJT04iXSwKICAgIG1lc3NhZ2U6IHIiIiJOb3QgYSBjb25zdGFudCBleHByZXNzaW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUyKT4gdGVtcGxhdGVOb3RBUHJlZml4SW5UeXBlQW5ub3RhdGlvbiA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiInI25hbWUuI25hbWUyJyBjYW4ndCBiZSB1c2VkIGFzIGEgdHlwZSBiZWNhdXNlICcjbmFtZScgZG9lc24ndCByZWZlciB0byBhbiBpbXBvcnQgcHJlZml4LiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzTm90QVByZWZpeEluVHlwZUFubm90YXRpb24pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPgogICAgY29kZU5vdEFQcmVmaXhJblR5cGVBbm5vdGF0aW9uID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICAgICAgIk5vdEFQcmVmaXhJblR5cGVBbm5vdGF0aW9uIiwgdGVtcGxhdGVOb3RBUHJlZml4SW5UeXBlQW5ub3RhdGlvbiwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTk9UX0FfVFlQRSJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c05vdEFQcmVmaXhJblR5cGVBbm5vdGF0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKG5hbWUyLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lMiA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZTIpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTm90QVByZWZpeEluVHlwZUFubm90YXRpb24sCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiInJHtuYW1lfS4ke25hbWUyfScgY2FuJ3QgYmUgdXNlZCBhcyBhIHR5cGUgYmVjYXVzZSAnJHtuYW1lfScgZG9lc24ndCByZWZlciB0byBhbiBpbXBvcnQgcHJlZml4LiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAnbmFtZTInOiBuYW1lMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVOb3RBVHlwZSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiJyNuYW1lJyBpc24ndCBhIHR5cGUuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzTm90QVR5cGUpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZU5vdEFUeXBlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KCJOb3RBVHlwZSIsIHRlbXBsYXRlTm90QVR5cGUsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk5PVF9BX1RZUEUiXSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNOb3RBVHlwZShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZU5vdEFUeXBlLAogICAgICBtZXNzYWdlOiAiIiInJHtuYW1lfScgaXNuJ3QgYSB0eXBlLiIiIiwgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU5vdEFUeXBlQ29udGV4dCA9IG1lc3NhZ2VOb3RBVHlwZUNvbnRleHQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTm90QVR5cGVDb250ZXh0ID0gY29uc3QgTWVzc2FnZUNvZGUoIk5vdEFUeXBlQ29udGV4dCIsCiAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCwgbWVzc2FnZTogciIiIlRoaXMgaXNuJ3QgYSB0eXBlLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVOb3RBbkx2YWx1ZSA9IG1lc3NhZ2VOb3RBbkx2YWx1ZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VOb3RBbkx2YWx1ZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJOb3RBbkx2YWx1ZSIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTk9UX0FOX0xWQUxVRSJdLAogICAgbWVzc2FnZTogciIiIkNhbid0IGFzc2lnbiB0byB0aGlzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gdGVtcGxhdGVOb3RCaW5hcnlPcGVyYXRvciA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiJyNsZXhlbWUnIGlzbid0IGEgYmluYXJ5IG9wZXJhdG9yLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c05vdEJpbmFyeU9wZXJhdG9yKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+IGNvZGVOb3RCaW5hcnlPcGVyYXRvciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAiTm90QmluYXJ5T3BlcmF0b3IiLAogIHRlbXBsYXRlTm90QmluYXJ5T3BlcmF0b3IsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzTm90QmluYXJ5T3BlcmF0b3IoVG9rZW4gdG9rZW4pIHsKICBTdHJpbmcgbGV4ZW1lID0gdG9rZW4ubGV4ZW1lOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTm90QmluYXJ5T3BlcmF0b3IsCiAgICAgIG1lc3NhZ2U6ICIiIicke2xleGVtZX0nIGlzbid0IGEgYmluYXJ5IG9wZXJhdG9yLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3Rva2VuJzogdG9rZW59KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4gdGVtcGxhdGVOb3RDb25zdGFudEV4cHJlc3Npb24gPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiI3N0cmluZyBpcyBub3QgYSBjb25zdGFudCBleHByZXNzaW9uLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c05vdENvbnN0YW50RXhwcmVzc2lvbik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+IGNvZGVOb3RDb25zdGFudEV4cHJlc3Npb24gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICAiTm90Q29uc3RhbnRFeHByZXNzaW9uIiwgdGVtcGxhdGVOb3RDb25zdGFudEV4cHJlc3Npb24sCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk5PVF9DT05TVEFOVF9FWFBSRVNTSU9OIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c05vdENvbnN0YW50RXhwcmVzc2lvbihTdHJpbmcgc3RyaW5nKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZU5vdENvbnN0YW50RXhwcmVzc2lvbiwKICAgICAgbWVzc2FnZTogIiIiJHtzdHJpbmd9IGlzIG5vdCBhIGNvbnN0YW50IGV4cHJlc3Npb24uIiIiLAogICAgICBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU9iamVjdEV4dGVuZHMgPSBtZXNzYWdlT2JqZWN0RXh0ZW5kczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VPYmplY3RFeHRlbmRzID0gY29uc3QgTWVzc2FnZUNvZGUoIk9iamVjdEV4dGVuZHMiLAogICAgbWVzc2FnZTogciIiIlRoZSBjbGFzcyAnT2JqZWN0JyBjYW4ndCBoYXZlIGEgc3VwZXJjbGFzcy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlT2JqZWN0SW1wbGVtZW50cyA9IG1lc3NhZ2VPYmplY3RJbXBsZW1lbnRzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU9iamVjdEltcGxlbWVudHMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJPYmplY3RJbXBsZW1lbnRzIiwKICAgIG1lc3NhZ2U6IHIiIiJUaGUgY2xhc3MgJ09iamVjdCcgY2FuJ3QgaW1wbGVtZW50IGFueXRoaW5nLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVPYmplY3RNaXhlc0luID0gbWVzc2FnZU9iamVjdE1peGVzSW47CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlT2JqZWN0TWl4ZXNJbiA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJPYmplY3RNaXhlc0luIiwKICAgIG1lc3NhZ2U6IHIiIiJUaGUgY2xhc3MgJ09iamVjdCcgY2FuJ3QgdXNlIG1peGlucy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlT25seVRyeSA9IG1lc3NhZ2VPbmx5VHJ5OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU9ubHlUcnkgPSBjb25zdCBNZXNzYWdlQ29kZSgiT25seVRyeSIsCiAgICBpbmRleDogMjAsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJBIHRyeSBibG9jayBtdXN0IGJlIGZvbGxvd2VkIGJ5IGFuICdvbicsICdjYXRjaCcsIG9yICdmaW5hbGx5JyBjbGF1c2UuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgYWRkaW5nIGVpdGhlciBhIGNhdGNoIG9yIGZpbmFsbHkgY2xhdXNlLCBvciByZW1vdmUgdGhlIHRyeSBzdGF0ZW1lbnQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZSk+IHRlbXBsYXRlT3BlcmF0b3JNaW51c1BhcmFtZXRlck1pc21hdGNoID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiT3BlcmF0b3IgJyNuYW1lJyBzaG91bGQgaGF2ZSB6ZXJvIG9yIG9uZSBwYXJhbWV0ZXIuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIldpdGggemVybyBwYXJhbWV0ZXJzLCBpdCBoYXMgdGhlIHN5bnRhY3RpYyBmb3JtICctYScsIGZvcm1hbGx5IGtub3duIGFzICd1bmFyeS0nLiBXaXRoIG9uZSBwYXJhbWV0ZXIsIGl0IGhhcyB0aGUgc3ludGFjdGljIGZvcm0gJ2EgLSBiJywgZm9ybWFsbHkga25vd24gYXMgJy0nLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzT3BlcmF0b3JNaW51c1BhcmFtZXRlck1pc21hdGNoKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVPcGVyYXRvck1pbnVzUGFyYW1ldGVyTWlzbWF0Y2ggPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oIk9wZXJhdG9yTWludXNQYXJhbWV0ZXJNaXNtYXRjaCIsCiAgICAgICAgdGVtcGxhdGVPcGVyYXRvck1pbnVzUGFyYW1ldGVyTWlzbWF0Y2gsIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WwogICJXUk9OR19OVU1CRVJfT0ZfUEFSQU1FVEVSU19GT1JfT1BFUkFUT1JfTUlOVVMiCl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c09wZXJhdG9yTWludXNQYXJhbWV0ZXJNaXNtYXRjaChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZU9wZXJhdG9yTWludXNQYXJhbWV0ZXJNaXNtYXRjaCwKICAgICAgbWVzc2FnZTogIiIiT3BlcmF0b3IgJyR7bmFtZX0nIHNob3VsZCBoYXZlIHplcm8gb3Igb25lIHBhcmFtZXRlci4iIiIsCiAgICAgIHRpcDoKICAgICAgICAgICIiIldpdGggemVybyBwYXJhbWV0ZXJzLCBpdCBoYXMgdGhlIHN5bnRhY3RpYyBmb3JtICctYScsIGZvcm1hbGx5IGtub3duIGFzICd1bmFyeS0nLiBXaXRoIG9uZSBwYXJhbWV0ZXIsIGl0IGhhcyB0aGUgc3ludGFjdGljIGZvcm0gJ2EgLSBiJywgZm9ybWFsbHkga25vd24gYXMgJy0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiT3BlcmF0b3IgJyNuYW1lJyBzaG91bGRuJ3QgaGF2ZSBhbnkgcGFyYW1ldGVycy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDAgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgIk9wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gwIiwKICB0ZW1wbGF0ZU9wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gwLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c09wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gwKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDAsCiAgICAgIG1lc3NhZ2U6ICIiIk9wZXJhdG9yICcke25hbWV9JyBzaG91bGRuJ3QgaGF2ZSBhbnkgcGFyYW1ldGVycy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDEgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIk9wZXJhdG9yICcjbmFtZScgc2hvdWxkIGhhdmUgZXhhY3RseSBvbmUgcGFyYW1ldGVyLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c09wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gxKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDEiLCB0ZW1wbGF0ZU9wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gxLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJXUk9OR19OVU1CRVJfT0ZfUEFSQU1FVEVSU19GT1JfT1BFUkFUT1IiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDEoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMSwKICAgICAgbWVzc2FnZTogIiIiT3BlcmF0b3IgJyR7bmFtZX0nIHNob3VsZCBoYXZlIGV4YWN0bHkgb25lIHBhcmFtZXRlci4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDIgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIk9wZXJhdG9yICcjbmFtZScgc2hvdWxkIGhhdmUgZXhhY3RseSB0d28gcGFyYW1ldGVycy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDIgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIk9wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gyIiwgdGVtcGxhdGVPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMiwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiV1JPTkdfTlVNQkVSX09GX1BBUkFNRVRFUlNfRk9SX09QRVJBVE9SIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c09wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gyKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDIsCiAgICAgIG1lc3NhZ2U6ICIiIk9wZXJhdG9yICcke25hbWV9JyBzaG91bGQgaGF2ZSBleGFjdGx5IHR3byBwYXJhbWV0ZXJzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU9wZXJhdG9yV2l0aE9wdGlvbmFsRm9ybWFscyA9CiAgICBtZXNzYWdlT3BlcmF0b3JXaXRoT3B0aW9uYWxGb3JtYWxzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU9wZXJhdG9yV2l0aE9wdGlvbmFsRm9ybWFscyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk9wZXJhdG9yV2l0aE9wdGlvbmFsRm9ybWFscyIsCiAgICBtZXNzYWdlOiByIiIiQW4gb3BlcmF0b3IgY2FuJ3QgaGF2ZSBvcHRpb25hbCBwYXJhbWV0ZXJzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVPdmVycmlkZGVuTWV0aG9kQ2F1c2UgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlRoaXMgaXMgdGhlIG92ZXJyaWRkZW4gbWV0aG9kICgnI25hbWUnKS4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNPdmVycmlkZGVuTWV0aG9kQ2F1c2UpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZU92ZXJyaWRkZW5NZXRob2RDYXVzZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiT3ZlcnJpZGRlbk1ldGhvZENhdXNlIiwgdGVtcGxhdGVPdmVycmlkZGVuTWV0aG9kQ2F1c2UsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c092ZXJyaWRkZW5NZXRob2RDYXVzZShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZU92ZXJyaWRkZW5NZXRob2RDYXVzZSwKICAgICAgbWVzc2FnZTogIiIiVGhpcyBpcyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QgKCcke25hbWV9JykuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lMik+IHRlbXBsYXRlT3ZlcnJpZGVGZXdlck5hbWVkQXJndW1lbnRzID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBtZXRob2QgJyNuYW1lJyBoYXMgZmV3ZXIgbmFtZWQgYXJndW1lbnRzIHRoYW4gdGhvc2Ugb2Ygb3ZlcnJpZGRlbiBtZXRob2QgJyNuYW1lMicuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNPdmVycmlkZUZld2VyTmFtZWRBcmd1bWVudHMpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPgogICAgY29kZU92ZXJyaWRlRmV3ZXJOYW1lZEFyZ3VtZW50cyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgICAgICJPdmVycmlkZUZld2VyTmFtZWRBcmd1bWVudHMiLCB0ZW1wbGF0ZU92ZXJyaWRlRmV3ZXJOYW1lZEFyZ3VtZW50cywKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9PVkVSUklERV9OQU1FRCJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c092ZXJyaWRlRmV3ZXJOYW1lZEFyZ3VtZW50cyhTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIGlmIChuYW1lMi5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTIgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUyKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZU92ZXJyaWRlRmV3ZXJOYW1lZEFyZ3VtZW50cywKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBtZXRob2QgJyR7bmFtZX0nIGhhcyBmZXdlciBuYW1lZCBhcmd1bWVudHMgdGhhbiB0aG9zZSBvZiBvdmVycmlkZGVuIG1ldGhvZCAnJHtuYW1lMn0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAnbmFtZTInOiBuYW1lMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUyKT4gdGVtcGxhdGVPdmVycmlkZUZld2VyUG9zaXRpb25hbEFyZ3VtZW50cyA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgbWV0aG9kICcjbmFtZScgaGFzIGZld2VyIHBvc2l0aW9uYWwgYXJndW1lbnRzIHRoYW4gdGhvc2Ugb2Ygb3ZlcnJpZGRlbiBtZXRob2QgJyNuYW1lMicuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNPdmVycmlkZUZld2VyUG9zaXRpb25hbEFyZ3VtZW50cyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+CiAgICBjb2RlT3ZlcnJpZGVGZXdlclBvc2l0aW9uYWxBcmd1bWVudHMgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPigKICAgICAgICAiT3ZlcnJpZGVGZXdlclBvc2l0aW9uYWxBcmd1bWVudHMiLAogICAgICAgIHRlbXBsYXRlT3ZlcnJpZGVGZXdlclBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfT1ZFUlJJREVfUE9TSVRJT05BTCJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c092ZXJyaWRlRmV3ZXJQb3NpdGlvbmFsQXJndW1lbnRzKAogICAgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMikgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBpZiAobmFtZTIuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUyID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMik7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVPdmVycmlkZUZld2VyUG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBtZXRob2QgJyR7bmFtZX0nIGhhcyBmZXdlciBwb3NpdGlvbmFsIGFyZ3VtZW50cyB0aGFuIHRob3NlIG9mIG92ZXJyaWRkZW4gbWV0aG9kICcke25hbWUyfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICduYW1lMic6IG5hbWUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBTdHJpbmcgbmFtZTIsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUzKT4gdGVtcGxhdGVPdmVycmlkZU1pc21hdGNoTmFtZWRQYXJhbWV0ZXIgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIsIFN0cmluZyBuYW1lMyk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgbWV0aG9kICcjbmFtZScgZG9lc24ndCBoYXZlIHRoZSBuYW1lZCBwYXJhbWV0ZXIgJyNuYW1lMicgb2Ygb3ZlcnJpZGRlbiBtZXRob2QgJyNuYW1lMycuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNPdmVycmlkZU1pc21hdGNoTmFtZWRQYXJhbWV0ZXIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIsIFN0cmluZyBuYW1lMyk+CiAgICBjb2RlT3ZlcnJpZGVNaXNtYXRjaE5hbWVkUGFyYW1ldGVyID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyLCBTdHJpbmcgbmFtZTMpPigKICAgICAgICAiT3ZlcnJpZGVNaXNtYXRjaE5hbWVkUGFyYW1ldGVyIiwKICAgICAgICB0ZW1wbGF0ZU92ZXJyaWRlTWlzbWF0Y2hOYW1lZFBhcmFtZXRlciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9PVkVSUklERV9OQU1FRCJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c092ZXJyaWRlTWlzbWF0Y2hOYW1lZFBhcmFtZXRlcigKICAgIFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIsIFN0cmluZyBuYW1lMykgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBpZiAobmFtZTIuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUyID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMik7CiAgaWYgKG5hbWUzLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lMyA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZTMpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlT3ZlcnJpZGVNaXNtYXRjaE5hbWVkUGFyYW1ldGVyLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIG1ldGhvZCAnJHtuYW1lfScgZG9lc24ndCBoYXZlIHRoZSBuYW1lZCBwYXJhbWV0ZXIgJyR7bmFtZTJ9JyBvZiBvdmVycmlkZGVuIG1ldGhvZCAnJHtuYW1lM30nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAnbmFtZTInOiBuYW1lMiwgJ25hbWUzJzogbmFtZTN9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lMik+IHRlbXBsYXRlT3ZlcnJpZGVNb3JlUmVxdWlyZWRBcmd1bWVudHMgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIG1ldGhvZCAnI25hbWUnIGhhcyBtb3JlIHJlcXVpcmVkIGFyZ3VtZW50cyB0aGFuIHRob3NlIG9mIG92ZXJyaWRkZW4gbWV0aG9kICcjbmFtZTInLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzT3ZlcnJpZGVNb3JlUmVxdWlyZWRBcmd1bWVudHMpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPgogICAgY29kZU92ZXJyaWRlTW9yZVJlcXVpcmVkQXJndW1lbnRzID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICAgICAgIk92ZXJyaWRlTW9yZVJlcXVpcmVkQXJndW1lbnRzIiwgdGVtcGxhdGVPdmVycmlkZU1vcmVSZXF1aXJlZEFyZ3VtZW50cywKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9PVkVSUklERV9SRVFVSVJFRCJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c092ZXJyaWRlTW9yZVJlcXVpcmVkQXJndW1lbnRzKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKG5hbWUyLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lMiA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZTIpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlT3ZlcnJpZGVNb3JlUmVxdWlyZWRBcmd1bWVudHMsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgbWV0aG9kICcke25hbWV9JyBoYXMgbW9yZSByZXF1aXJlZCBhcmd1bWVudHMgdGhhbiB0aG9zZSBvZiBvdmVycmlkZGVuIG1ldGhvZCAnJHtuYW1lMn0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAnbmFtZTInOiBuYW1lMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgU3RyaW5nIG5hbWUyLAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlIF90eXBlMiwKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZTMpPiB0ZW1wbGF0ZU92ZXJyaWRlVHlwZU1pc21hdGNoUGFyYW1ldGVyID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgICAgIFN0cmluZyBuYW1lMiwKICAgICAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgICAgIERhcnRUeXBlIF90eXBlMiwKICAgICAgICAgICAgU3RyaW5nCiAgICAgICAgICAgICAgICBuYW1lMyk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgcGFyYW1ldGVyICcjbmFtZScgb2YgdGhlIG1ldGhvZCAnI25hbWUyJyBoYXMgdHlwZSAnI3R5cGUnLCB3aGljaCBkb2VzIG5vdCBtYXRjaCB0aGUgY29ycmVzcG9uZGluZyB0eXBlLCAnI3R5cGUyJywgaW4gdGhlIG92ZXJyaWRkZW4gbWV0aG9kLCAnI25hbWUzJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiQ2hhbmdlIHRvIGEgc3VwZXJ0eXBlIG9mICcjdHlwZTInLCBvciwgZm9yIGEgY292YXJpYW50IHBhcmFtZXRlciwgYSBzdWJ0eXBlLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzT3ZlcnJpZGVUeXBlTWlzbWF0Y2hQYXJhbWV0ZXIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIsIERhcnRUeXBlIF90eXBlLAogICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lMyk+IGNvZGVPdmVycmlkZVR5cGVNaXNtYXRjaFBhcmFtZXRlciA9CiAgICBjb25zdCBDb2RlPAogICAgICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIsIERhcnRUeXBlIF90eXBlLAogICAgICAgICAgICAgICAgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZTMpPigKICAgICAgICAiT3ZlcnJpZGVUeXBlTWlzbWF0Y2hQYXJhbWV0ZXIiLCB0ZW1wbGF0ZU92ZXJyaWRlVHlwZU1pc21hdGNoUGFyYW1ldGVyLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlZBTElEX01FVEhPRF9PVkVSUklERSJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNPdmVycmlkZVR5cGVNaXNtYXRjaFBhcmFtZXRlcigKICAgIFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIsIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lMykgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBpZiAobmFtZTIuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUyID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMik7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIGlmIChuYW1lMy5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTMgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUzKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVPdmVycmlkZVR5cGVNaXNtYXRjaFBhcmFtZXRlciwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBwYXJhbWV0ZXIgJyR7bmFtZX0nIG9mIHRoZSBtZXRob2QgJyR7bmFtZTJ9JyBoYXMgdHlwZSAnJHt0eXBlfScsIHdoaWNoIGRvZXMgbm90IG1hdGNoIHRoZSBjb3JyZXNwb25kaW5nIHR5cGUsICcke3R5cGUyfScsIGluIHRoZSBvdmVycmlkZGVuIG1ldGhvZCwgJyR7bmFtZTN9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIHRpcDogIiIiQ2hhbmdlIHRvIGEgc3VwZXJ0eXBlIG9mICcke3R5cGUyfScsIG9yLCBmb3IgYSBjb3ZhcmlhbnQgcGFyYW1ldGVyLCBhIHN1YnR5cGUuIiIiLAogICAgICBhcmd1bWVudHM6IHsKICAgICAgICAnbmFtZSc6IG5hbWUsCiAgICAgICAgJ25hbWUyJzogbmFtZTIsCiAgICAgICAgJ3R5cGUnOiBfdHlwZSwKICAgICAgICAndHlwZTInOiBfdHlwZTIsCiAgICAgICAgJ25hbWUzJzogbmFtZTMKICAgICAgfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBEYXJ0VHlwZSBfdHlwZSwKICAgICAgICBEYXJ0VHlwZSBfdHlwZTIsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUyKT4gdGVtcGxhdGVPdmVycmlkZVR5cGVNaXNtYXRjaFJldHVyblR5cGUgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICBTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSByZXR1cm4gdHlwZSBvZiB0aGUgbWV0aG9kICcjbmFtZScgaXMgJyN0eXBlJywgd2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlIHJldHVybiB0eXBlLCAnI3R5cGUyJywgb2YgdGhlIG92ZXJyaWRkZW4gbWV0aG9kLCAnI25hbWUyJy4iIiIsCiAgICB0aXBUZW1wbGF0ZTogciIiIkNoYW5nZSB0byBhIHN1YnR5cGUgb2YgJyN0eXBlMicuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNPdmVycmlkZVR5cGVNaXNtYXRjaFJldHVyblR5cGUpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICBTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUyKT4KICAgIGNvZGVPdmVycmlkZVR5cGVNaXNtYXRjaFJldHVyblR5cGUgPSBjb25zdCBDb2RlPAogICAgICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lMik+KAogICAgICAgICJPdmVycmlkZVR5cGVNaXNtYXRjaFJldHVyblR5cGUiLAogICAgICAgIHRlbXBsYXRlT3ZlcnJpZGVUeXBlTWlzbWF0Y2hSZXR1cm5UeXBlLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlZBTElEX01FVEhPRF9PVkVSUklERSJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNPdmVycmlkZVR5cGVNaXNtYXRjaFJldHVyblR5cGUoCiAgICBTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUyKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBpZiAobmFtZTIuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUyID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMik7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlT3ZlcnJpZGVUeXBlTWlzbWF0Y2hSZXR1cm5UeXBlLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIHJldHVybiB0eXBlIG9mIHRoZSBtZXRob2QgJyR7bmFtZX0nIGlzICcke3R5cGV9Jywgd2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlIHJldHVybiB0eXBlLCAnJHt0eXBlMn0nLCBvZiB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsICcke25hbWUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIkNoYW5nZSB0byBhIHN1YnR5cGUgb2YgJyR7dHlwZTJ9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogewogICAgICAgICduYW1lJzogbmFtZSwKICAgICAgICAndHlwZSc6IF90eXBlLAogICAgICAgICd0eXBlMic6IF90eXBlMiwKICAgICAgICAnbmFtZTInOiBuYW1lMgogICAgICB9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lMik+IHRlbXBsYXRlT3ZlcnJpZGVUeXBlVmFyaWFibGVzTWlzbWF0Y2ggPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiRGVjbGFyZWQgdHlwZSB2YXJpYWJsZXMgb2YgJyNuYW1lJyBkb2Vzbid0IG1hdGNoIHRob3NlIG9uIG92ZXJyaWRkZW4gbWV0aG9kICcjbmFtZTInLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzT3ZlcnJpZGVUeXBlVmFyaWFibGVzTWlzbWF0Y2gpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPgogICAgY29kZU92ZXJyaWRlVHlwZVZhcmlhYmxlc01pc21hdGNoID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICAgICAgIk92ZXJyaWRlVHlwZVZhcmlhYmxlc01pc21hdGNoIiwgdGVtcGxhdGVPdmVycmlkZVR5cGVWYXJpYWJsZXNNaXNtYXRjaCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9NRVRIT0RfT1ZFUlJJREVfVFlQRV9QQVJBTUVURVJTIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzT3ZlcnJpZGVUeXBlVmFyaWFibGVzTWlzbWF0Y2goU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMikgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBpZiAobmFtZTIuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUyID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMik7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVPdmVycmlkZVR5cGVWYXJpYWJsZXNNaXNtYXRjaCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkRlY2xhcmVkIHR5cGUgdmFyaWFibGVzIG9mICcke25hbWV9JyBkb2Vzbid0IG1hdGNoIHRob3NlIG9uIG92ZXJyaWRkZW4gbWV0aG9kICcke25hbWUyfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICduYW1lMic6IG5hbWUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfKT4gdGVtcGxhdGVQYWNrYWdlTm90Rm91bmQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJDb3VsZCBub3QgcmVzb2x2ZSB0aGUgcGFja2FnZSAnI25hbWUnIGluICcjdXJpJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNQYWNrYWdlTm90Rm91bmQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+IGNvZGVQYWNrYWdlTm90Rm91bmQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+KAogICJQYWNrYWdlTm90Rm91bmQiLAogIHRlbXBsYXRlUGFja2FnZU5vdEZvdW5kLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1BhY2thZ2VOb3RGb3VuZChTdHJpbmcgbmFtZSwgVXJpIHVyaV8pIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVQYWNrYWdlTm90Rm91bmQsCiAgICAgIG1lc3NhZ2U6ICIiIkNvdWxkIG5vdCByZXNvbHZlIHRoZSBwYWNrYWdlICcke25hbWV9JyBpbiAnJHt1cml9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ3VyaSc6IHVyaV99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4gdGVtcGxhdGVQYWNrYWdlc0ZpbGVGb3JtYXQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiUHJvYmxlbSBpbiBwYWNrYWdlcyBjb25maWd1cmF0aW9uIGZpbGU6ICNzdHJpbmciIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNQYWNrYWdlc0ZpbGVGb3JtYXQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPiBjb2RlUGFja2FnZXNGaWxlRm9ybWF0ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgIlBhY2thZ2VzRmlsZUZvcm1hdCIsCiAgdGVtcGxhdGVQYWNrYWdlc0ZpbGVGb3JtYXQsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzUGFja2FnZXNGaWxlRm9ybWF0KFN0cmluZyBzdHJpbmcpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlUGFja2FnZXNGaWxlRm9ybWF0LAogICAgICBtZXNzYWdlOiAiIiJQcm9ibGVtIGluIHBhY2thZ2VzIGNvbmZpZ3VyYXRpb24gZmlsZTogJHtzdHJpbmd9IiIiLAogICAgICBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVBhcnRFeHBvcnQgPSBtZXNzYWdlUGFydEV4cG9ydDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VQYXJ0RXhwb3J0ID0gY29uc3QgTWVzc2FnZUNvZGUoIlBhcnRFeHBvcnQiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkVYUE9SVF9PRl9OT05fTElCUkFSWSJdLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQ2FuJ3QgZXhwb3J0IHRoaXMgZmlsZSBiZWNhdXNlIGl0IGNvbnRhaW5zIGEgJ3BhcnQgb2YnIGRlY2xhcmF0aW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVQYXJ0RXhwb3J0Q29udGV4dCA9IG1lc3NhZ2VQYXJ0RXhwb3J0Q29udGV4dDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VQYXJ0RXhwb3J0Q29udGV4dCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlBhcnRFeHBvcnRDb250ZXh0IiwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0LAogICAgbWVzc2FnZTogciIiIlRoaXMgaXMgdGhlIGZpbGUgdGhhdCBjYW4ndCBiZSBleHBvcnRlZC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUGFydEluUGFydCA9IG1lc3NhZ2VQYXJ0SW5QYXJ0OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVBhcnRJblBhcnQgPSBjb25zdCBNZXNzYWdlQ29kZSgiUGFydEluUGFydCIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTk9OX1BBUlRfT0ZfRElSRUNUSVZFX0lOX1BBUlQiXSwKICAgIG1lc3NhZ2U6IHIiIiJBIGZpbGUgdGhhdCdzIGEgcGFydCBvZiBhIGxpYnJhcnkgY2FuJ3QgaGF2ZSBwYXJ0cyBpdHNlbGYuIiIiLAogICAgdGlwOiByIiIiVHJ5IG1vdmluZyB0aGUgJ3BhcnQnIGRlY2xhcmF0aW9uIHRvIHRoZSBjb250YWluaW5nIGxpYnJhcnkuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVBhcnRJblBhcnRMaWJyYXJ5Q29udGV4dCA9IG1lc3NhZ2VQYXJ0SW5QYXJ0TGlicmFyeUNvbnRleHQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlUGFydEluUGFydExpYnJhcnlDb250ZXh0ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiUGFydEluUGFydExpYnJhcnlDb250ZXh0IiwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0LAogICAgbWVzc2FnZTogciIiIlRoaXMgaXMgdGhlIGNvbnRhaW5pbmcgbGlicmFyeS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4gdGVtcGxhdGVQYXJ0T2ZJbkxpYnJhcnkgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkNhbid0IGltcG9ydCAnI3VyaScsIGJlY2F1c2UgaXQgaGFzIGEgJ3BhcnQgb2YnIGRlY2xhcmF0aW9uLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgcmVtb3ZpbmcgdGhlICdwYXJ0IG9mJyBkZWNsYXJhdGlvbiwgb3IgdXNpbmcgJyN1cmknIGFzIGEgcGFydC4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1BhcnRPZkluTGlicmFyeSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPiBjb2RlUGFydE9mSW5MaWJyYXJ5ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+KAogICAgICAgICJQYXJ0T2ZJbkxpYnJhcnkiLCB0ZW1wbGF0ZVBhcnRPZkluTGlicmFyeSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU1QT1JUX09GX05PTl9MSUJSQVJZIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1BhcnRPZkluTGlicmFyeShVcmkgdXJpXykgewogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlUGFydE9mSW5MaWJyYXJ5LAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiQ2FuJ3QgaW1wb3J0ICcke3VyaX0nLCBiZWNhdXNlIGl0IGhhcyBhICdwYXJ0IG9mJyBkZWNsYXJhdGlvbi4iIiIsCiAgICAgIHRpcDoKICAgICAgICAgICIiIlRyeSByZW1vdmluZyB0aGUgJ3BhcnQgb2YnIGRlY2xhcmF0aW9uLCBvciB1c2luZyAnJHt1cml9JyBhcyBhIHBhcnQuIiIiLAogICAgICBhcmd1bWVudHM6IHsndXJpJzogdXJpX30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgVXJpIHVyaV8sCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUyKT4gdGVtcGxhdGVQYXJ0T2ZMaWJyYXJ5TmFtZU1pc21hdGNoID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXywgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJVc2luZyAnI3VyaScgYXMgcGFydCBvZiAnI25hbWUnIGJ1dCBpdHMgJ3BhcnQgb2YnIGRlY2xhcmF0aW9uIHNheXMgJyNuYW1lMicuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNQYXJ0T2ZMaWJyYXJ5TmFtZU1pc21hdGNoKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXywgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+CiAgICBjb2RlUGFydE9mTGlicmFyeU5hbWVNaXNtYXRjaCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8sIFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPigKICAgICAgICAiUGFydE9mTGlicmFyeU5hbWVNaXNtYXRjaCIsIHRlbXBsYXRlUGFydE9mTGlicmFyeU5hbWVNaXNtYXRjaCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiUEFSVF9PRl9ESUZGRVJFTlRfTElCUkFSWSJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1BhcnRPZkxpYnJhcnlOYW1lTWlzbWF0Y2goCiAgICBVcmkgdXJpXywgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMikgewogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBpZiAobmFtZTIuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUyID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMik7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVQYXJ0T2ZMaWJyYXJ5TmFtZU1pc21hdGNoLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVXNpbmcgJyR7dXJpfScgYXMgcGFydCBvZiAnJHtuYW1lfScgYnV0IGl0cyAncGFydCBvZicgZGVjbGFyYXRpb24gc2F5cyAnJHtuYW1lMn0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3VyaSc6IHVyaV8sICduYW1lJzogbmFtZSwgJ25hbWUyJzogbmFtZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUGFydE9mU2VsZiA9IG1lc3NhZ2VQYXJ0T2ZTZWxmOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVBhcnRPZlNlbGYgPSBjb25zdCBNZXNzYWdlQ29kZSgiUGFydE9mU2VsZiIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiUEFSVF9PRl9OT05fUEFSVCJdLAogICAgbWVzc2FnZTogciIiIkEgZmlsZSBjYW4ndCBiZSBhIHBhcnQgb2YgaXRzZWxmLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVQYXJ0T2ZUd2ljZSA9IG1lc3NhZ2VQYXJ0T2ZUd2ljZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VQYXJ0T2ZUd2ljZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJQYXJ0T2ZUd2ljZSIsCiAgICBpbmRleDogMjUsCiAgICBtZXNzYWdlOiByIiIiT25seSBvbmUgcGFydC1vZiBkaXJlY3RpdmUgbWF5IGJlIGRlY2xhcmVkIGluIGEgZmlsZS4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgYWxsIGJ1dCBvbmUgb2YgdGhlIHBhcnQtb2YgZGlyZWN0aXZlcy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUGFydE9mVHdvTGlicmFyaWVzID0gbWVzc2FnZVBhcnRPZlR3b0xpYnJhcmllczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VQYXJ0T2ZUd29MaWJyYXJpZXMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJQYXJ0T2ZUd29MaWJyYXJpZXMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlBBUlRfT0ZfRElGRkVSRU5UX0xJQlJBUlkiXSwKICAgIG1lc3NhZ2U6IHIiIiJBIGZpbGUgY2FuJ3QgYmUgcGFydCBvZiBtb3JlIHRoYW4gb25lIGxpYnJhcnkuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgbW92aW5nIHRoZSBzaGFyZWQgZGVjbGFyYXRpb25zIGludG8gdGhlIGxpYnJhcmllcywgb3IgaW50byBhIG5ldyBsaWJyYXJ5LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVQYXJ0T2ZUd29MaWJyYXJpZXNDb250ZXh0ID0KICAgIG1lc3NhZ2VQYXJ0T2ZUd29MaWJyYXJpZXNDb250ZXh0OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVBhcnRPZlR3b0xpYnJhcmllc0NvbnRleHQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJQYXJ0T2ZUd29MaWJyYXJpZXNDb250ZXh0IiwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0LAogICAgbWVzc2FnZTogciIiIlVzZWQgYXMgYSBwYXJ0IGluIHRoaXMgbGlicmFyeS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFVyaSB1cmlfLAogICAgICAgIFVyaSB1cmkyXywKICAgICAgICBVcmkKICAgICAgICAgICAgdXJpM18pPiB0ZW1wbGF0ZVBhcnRPZlVyaU1pc21hdGNoID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXywgVXJpIHVyaTJfLCBVcmkgdXJpM18pPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVXNpbmcgJyN1cmknIGFzIHBhcnQgb2YgJyN1cmkyJyBidXQgaXRzICdwYXJ0IG9mJyBkZWNsYXJhdGlvbiBzYXlzICcjdXJpMycuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNQYXJ0T2ZVcmlNaXNtYXRjaCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8sIFVyaSB1cmkyXywgVXJpIHVyaTNfKT4KICAgIGNvZGVQYXJ0T2ZVcmlNaXNtYXRjaCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8sIFVyaSB1cmkyXywgVXJpIHVyaTNfKT4oCiAgICAgICAgIlBhcnRPZlVyaU1pc21hdGNoIiwgdGVtcGxhdGVQYXJ0T2ZVcmlNaXNtYXRjaCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiUEFSVF9PRl9ESUZGRVJFTlRfTElCUkFSWSJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1BhcnRPZlVyaU1pc21hdGNoKFVyaSB1cmlfLCBVcmkgdXJpMl8sIFVyaSB1cmkzXykgewogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIFN0cmluZyB1cmkyID0gcmVsYXRpdml6ZVVyaSh1cmkyXyk7CiAgU3RyaW5nIHVyaTMgPSByZWxhdGl2aXplVXJpKHVyaTNfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVBhcnRPZlVyaU1pc21hdGNoLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVXNpbmcgJyR7dXJpfScgYXMgcGFydCBvZiAnJHt1cmkyfScgYnV0IGl0cyAncGFydCBvZicgZGVjbGFyYXRpb24gc2F5cyAnJHt1cmkzfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsndXJpJzogdXJpXywgJ3VyaTInOiB1cmkyXywgJ3VyaTMnOiB1cmkzX30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgVXJpIHVyaV8sCiAgICAgICAgVXJpIHVyaTJfLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVQYXJ0T2ZVc2VVcmkgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfLCBVcmkgdXJpMl8sIFN0cmluZyBuYW1lKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlVzaW5nICcjdXJpJyBhcyBwYXJ0IG9mICcjdXJpMicgYnV0IGl0cyAncGFydCBvZicgZGVjbGFyYXRpb24gc2F5cyAnI25hbWUnLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgY2hhbmdpbmcgdGhlICdwYXJ0IG9mJyBkZWNsYXJhdGlvbiB0byB1c2UgYSByZWxhdGl2ZSBmaWxlIG5hbWUuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNQYXJ0T2ZVc2VVcmkpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfLCBVcmkgdXJpMl8sIFN0cmluZyBuYW1lKT4KICAgIGNvZGVQYXJ0T2ZVc2VVcmkgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfLCBVcmkgdXJpMl8sIFN0cmluZyBuYW1lKT4oCiAgICAgICAgIlBhcnRPZlVzZVVyaSIsIHRlbXBsYXRlUGFydE9mVXNlVXJpLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJQQVJUX09GX1VOTkFNRURfTElCUkFSWSJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1BhcnRPZlVzZVVyaShVcmkgdXJpXywgVXJpIHVyaTJfLCBTdHJpbmcgbmFtZSkgewogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIFN0cmluZyB1cmkyID0gcmVsYXRpdml6ZVVyaSh1cmkyXyk7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlUGFydE9mVXNlVXJpLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVXNpbmcgJyR7dXJpfScgYXMgcGFydCBvZiAnJHt1cmkyfScgYnV0IGl0cyAncGFydCBvZicgZGVjbGFyYXRpb24gc2F5cyAnJHtuYW1lfScuIiIiLAogICAgICB0aXA6ICIiIlRyeSBjaGFuZ2luZyB0aGUgJ3BhcnQgb2YnIGRlY2xhcmF0aW9uIHRvIHVzZSBhIHJlbGF0aXZlIGZpbGUgbmFtZS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd1cmknOiB1cmlfLCAndXJpMic6IHVyaTJfLCAnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUGFydE9ycGhhbiA9IG1lc3NhZ2VQYXJ0T3JwaGFuOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVBhcnRPcnBoYW4gPSBjb25zdCBNZXNzYWdlQ29kZSgiUGFydE9ycGhhbiIsCiAgICBtZXNzYWdlOiByIiIiVGhpcyBwYXJ0IGRvZXNuJ3QgaGF2ZSBhIGNvbnRhaW5pbmcgbGlicmFyeS4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgdGhlICdwYXJ0IG9mJyBkZWNsYXJhdGlvbi4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+IHRlbXBsYXRlUGFydFR3aWNlID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJDYW4ndCB1c2UgJyN1cmknIGFzIGEgcGFydCBtb3JlIHRoYW4gb25jZS4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNQYXJ0VHdpY2UpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4gY29kZVBhcnRUd2ljZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPigiUGFydFR3aWNlIiwgdGVtcGxhdGVQYXJ0VHdpY2UsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkRVUExJQ0FURV9QQVJUIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1BhcnRUd2ljZShVcmkgdXJpXykgewogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlUGFydFR3aWNlLAogICAgICBtZXNzYWdlOiAiIiJDYW4ndCB1c2UgJyR7dXJpfScgYXMgYSBwYXJ0IG1vcmUgdGhhbiBvbmNlLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3VyaSc6IHVyaV99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUGF0Y2hDbGFzc09yaWdpbiA9IG1lc3NhZ2VQYXRjaENsYXNzT3JpZ2luOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVBhdGNoQ2xhc3NPcmlnaW4gPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJQYXRjaENsYXNzT3JpZ2luIiwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0LAogICAgbWVzc2FnZTogciIiIlRoaXMgaXMgdGhlIG9yaWdpbiBjbGFzcy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUGF0Y2hDbGFzc1R5cGVWYXJpYWJsZXNNaXNtYXRjaCA9CiAgICBtZXNzYWdlUGF0Y2hDbGFzc1R5cGVWYXJpYWJsZXNNaXNtYXRjaDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VQYXRjaENsYXNzVHlwZVZhcmlhYmxlc01pc21hdGNoID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiUGF0Y2hDbGFzc1R5cGVWYXJpYWJsZXNNaXNtYXRjaCIsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJBIHBhdGNoIGNsYXNzIG11c3QgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgdHlwZSB2YXJpYWJsZXMgYXMgaXRzIG9yaWdpbiBjbGFzcy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUGF0Y2hEZWNsYXJhdGlvbk1pc21hdGNoID0gbWVzc2FnZVBhdGNoRGVjbGFyYXRpb25NaXNtYXRjaDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VQYXRjaERlY2xhcmF0aW9uTWlzbWF0Y2ggPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJQYXRjaERlY2xhcmF0aW9uTWlzbWF0Y2giLAogICAgbWVzc2FnZTogciIiIlRoaXMgcGF0Y2ggZG9lc24ndCBtYXRjaCBvcmlnaW4gZGVjbGFyYXRpb24uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVBhdGNoRGVjbGFyYXRpb25PcmlnaW4gPSBtZXNzYWdlUGF0Y2hEZWNsYXJhdGlvbk9yaWdpbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VQYXRjaERlY2xhcmF0aW9uT3JpZ2luID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiUGF0Y2hEZWNsYXJhdGlvbk9yaWdpbiIsCiAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCwKICAgIG1lc3NhZ2U6IHIiIiJUaGlzIGlzIHRoZSBvcmlnaW4gZGVjbGFyYXRpb24uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfKT4KICAgIHRlbXBsYXRlUGF0Y2hJbmplY3Rpb25GYWlsZWQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJDYW4ndCBpbmplY3QgJyNuYW1lJyBpbnRvICcjdXJpJy4iIiIsCiAgICAgICAgdGlwVGVtcGxhdGU6IHIiIiJUcnkgYWRkaW5nICdAcGF0Y2gnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1BhdGNoSW5qZWN0aW9uRmFpbGVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8pPiBjb2RlUGF0Y2hJbmplY3Rpb25GYWlsZWQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+KAogICJQYXRjaEluamVjdGlvbkZhaWxlZCIsCiAgdGVtcGxhdGVQYXRjaEluamVjdGlvbkZhaWxlZCwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNQYXRjaEluamVjdGlvbkZhaWxlZChTdHJpbmcgbmFtZSwgVXJpIHVyaV8pIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVQYXRjaEluamVjdGlvbkZhaWxlZCwKICAgICAgbWVzc2FnZTogIiIiQ2FuJ3QgaW5qZWN0ICcke25hbWV9JyBpbnRvICcke3VyaX0nLiIiIiwKICAgICAgdGlwOiAiIiJUcnkgYWRkaW5nICdAcGF0Y2gnLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAndXJpJzogdXJpX30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVQYXRjaE5vbkV4dGVybmFsID0gbWVzc2FnZVBhdGNoTm9uRXh0ZXJuYWw7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlUGF0Y2hOb25FeHRlcm5hbCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlBhdGNoTm9uRXh0ZXJuYWwiLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQ2FuJ3QgYXBwbHkgdGhpcyBwYXRjaCBhcyBpdHMgb3JpZ2luIGRlY2xhcmF0aW9uIGlzbid0IGV4dGVybmFsLiIiIiwKICAgIHRpcDogciIiIlRyeSBhZGRpbmcgJ2V4dGVybmFsJyB0byB0aGUgb3JpZ2luIGRlY2xhcmF0aW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVQbGF0Zm9ybVByaXZhdGVMaWJyYXJ5QWNjZXNzID0KICAgIG1lc3NhZ2VQbGF0Zm9ybVByaXZhdGVMaWJyYXJ5QWNjZXNzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVBsYXRmb3JtUHJpdmF0ZUxpYnJhcnlBY2Nlc3MgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJQbGF0Zm9ybVByaXZhdGVMaWJyYXJ5QWNjZXNzIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTVBPUlRfSU5URVJOQUxfTElCUkFSWSJdLAogICAgbWVzc2FnZTogciIiIkNhbid0IGFjY2VzcyBwbGF0Zm9ybSBwcml2YXRlIGxpYnJhcnkuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVBvc2l0aW9uYWxBZnRlck5hbWVkQXJndW1lbnQgPQogICAgbWVzc2FnZVBvc2l0aW9uYWxBZnRlck5hbWVkQXJndW1lbnQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlUG9zaXRpb25hbEFmdGVyTmFtZWRBcmd1bWVudCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlBvc2l0aW9uYWxBZnRlck5hbWVkQXJndW1lbnQiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlBPU0lUSU9OQUxfQUZURVJfTkFNRURfQVJHVU1FTlQiXSwKICAgIG1lc3NhZ2U6IHIiIiJQbGFjZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBiZWZvcmUgbmFtZWQgYXJndW1lbnRzLiIiIiwKICAgIHRpcDoKICAgICAgICByIiIiVHJ5IG1vdmluZyB0aGUgcG9zaXRpb25hbCBhcmd1bWVudCBiZWZvcmUgdGhlIG5hbWVkIGFyZ3VtZW50cywgb3IgYWRkIGEgbmFtZSB0byB0aGUgYXJndW1lbnQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVBvc2l0aW9uYWxQYXJhbWV0ZXJXaXRoRXF1YWxzID0KICAgIG1lc3NhZ2VQb3NpdGlvbmFsUGFyYW1ldGVyV2l0aEVxdWFsczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VQb3NpdGlvbmFsUGFyYW1ldGVyV2l0aEVxdWFscyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlBvc2l0aW9uYWxQYXJhbWV0ZXJXaXRoRXF1YWxzIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJXUk9OR19TRVBBUkFUT1JfRk9SX1BPU0lUSU9OQUxfUEFSQU1FVEVSIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJQb3NpdGlvbmFsIG9wdGlvbmFsIHBhcmFtZXRlcnMgY2FuJ3QgdXNlICc6JyB0byBzcGVjaWZ5IGEgZGVmYXVsdCB2YWx1ZS4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVwbGFjaW5nICc6JyB3aXRoICc9Jy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUHJlZml4QWZ0ZXJDb21iaW5hdG9yID0gbWVzc2FnZVByZWZpeEFmdGVyQ29tYmluYXRvcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VQcmVmaXhBZnRlckNvbWJpbmF0b3IgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJQcmVmaXhBZnRlckNvbWJpbmF0b3IiLAogICAgaW5kZXg6IDYsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJUaGUgcHJlZml4ICgnYXMnIGNsYXVzZSkgc2hvdWxkIGNvbWUgYmVmb3JlIGFueSBzaG93L2hpZGUgY29tYmluYXRvcnMuIiIiLAogICAgdGlwOiByIiIiVHJ5IG1vdmluZyB0aGUgcHJlZml4IGJlZm9yZSB0aGUgY29tYmluYXRvcnMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVByaXZhdGVOYW1lZFBhcmFtZXRlciA9IG1lc3NhZ2VQcml2YXRlTmFtZWRQYXJhbWV0ZXI7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlUHJpdmF0ZU5hbWVkUGFyYW1ldGVyID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiUHJpdmF0ZU5hbWVkUGFyYW1ldGVyIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJQUklWQVRFX09QVElPTkFMX1BBUkFNRVRFUiJdLAogICAgbWVzc2FnZTogciIiIkFuIG9wdGlvbmFsIG5hbWVkIHBhcmFtZXRlciBjYW4ndCBzdGFydCB3aXRoICdfJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUmVkaXJlY3RpbmdDb25zdHJ1Y3RvcldpdGhCb2R5ID0KICAgIG1lc3NhZ2VSZWRpcmVjdGluZ0NvbnN0cnVjdG9yV2l0aEJvZHk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlUmVkaXJlY3RpbmdDb25zdHJ1Y3RvcldpdGhCb2R5ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiUmVkaXJlY3RpbmdDb25zdHJ1Y3RvcldpdGhCb2R5IiwKICAgIGluZGV4OiAyMiwKICAgIG1lc3NhZ2U6IHIiIiJSZWRpcmVjdGluZyBjb25zdHJ1Y3RvcnMgY2FuJ3QgaGF2ZSBhIGJvZHkuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgcmVtb3ZpbmcgdGhlIGJvZHksIG9yIG5vdCBtYWtpbmcgdGhpcyBhIHJlZGlyZWN0aW5nIGNvbnN0cnVjdG9yLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPgogICAgdGVtcGxhdGVSZWRpcmVjdGluZ0ZhY3RvcnlJbmNvbXBhdGlibGVUeXBlQXJndW1lbnQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiVGhlIHR5cGUgJyN0eXBlJyBkb2Vzbid0IGV4dGVuZCAnI3R5cGUyJy4iIiIsCiAgICAgICAgdGlwVGVtcGxhdGU6IHIiIiJUcnkgdXNpbmcgYSBkaWZmZXJlbnQgdHlwZSBhcyBhcmd1bWVudC4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czoKICAgICAgICAgICAgX3dpdGhBcmd1bWVudHNSZWRpcmVjdGluZ0ZhY3RvcnlJbmNvbXBhdGlibGVUeXBlQXJndW1lbnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPgogICAgY29kZVJlZGlyZWN0aW5nRmFjdG9yeUluY29tcGF0aWJsZVR5cGVBcmd1bWVudCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgICAgICJSZWRpcmVjdGluZ0ZhY3RvcnlJbmNvbXBhdGlibGVUeXBlQXJndW1lbnQiLAogICAgICAgIHRlbXBsYXRlUmVkaXJlY3RpbmdGYWN0b3J5SW5jb21wYXRpYmxlVHlwZUFyZ3VtZW50LAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJUWVBFX0FSR1VNRU5UX05PVF9NQVRDSElOR19CT1VORFMiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzUmVkaXJlY3RpbmdGYWN0b3J5SW5jb21wYXRpYmxlVHlwZUFyZ3VtZW50KAogICAgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVSZWRpcmVjdGluZ0ZhY3RvcnlJbmNvbXBhdGlibGVUeXBlQXJndW1lbnQsCiAgICAgIG1lc3NhZ2U6ICIiIlRoZSB0eXBlICcke3R5cGV9JyBkb2Vzbid0IGV4dGVuZCAnJHt0eXBlMn0nLiIiIiArCiAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIlRyeSB1c2luZyBhIGRpZmZlcmVudCB0eXBlIGFzIGFyZ3VtZW50LiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZSwgJ3R5cGUyJzogX3R5cGUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVJlZGlyZWN0aW9uSW5Ob25GYWN0b3J5ID0gbWVzc2FnZVJlZGlyZWN0aW9uSW5Ob25GYWN0b3J5OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVJlZGlyZWN0aW9uSW5Ob25GYWN0b3J5ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiUmVkaXJlY3Rpb25Jbk5vbkZhY3RvcnkiLAogICAgaW5kZXg6IDIxLAogICAgbWVzc2FnZTogciIiIk9ubHkgZmFjdG9yeSBjb25zdHJ1Y3RvciBjYW4gc3BlY2lmeSAnPScgcmVkaXJlY3Rpb24uIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgbWFraW5nIHRoaXMgYSBmYWN0b3J5IGNvbnN0cnVjdG9yLCBvciByZW1vdmUgdGhlIHJlZGlyZWN0aW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlUmVkaXJlY3Rpb25UYXJnZXROb3RGb3VuZCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiUmVkaXJlY3Rpb24gY29uc3RydWN0b3IgdGFyZ2V0IG5vdCBmb3VuZDogJyNuYW1lJyIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1JlZGlyZWN0aW9uVGFyZ2V0Tm90Rm91bmQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZVJlZGlyZWN0aW9uVGFyZ2V0Tm90Rm91bmQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIlJlZGlyZWN0aW9uVGFyZ2V0Tm90Rm91bmQiLCB0ZW1wbGF0ZVJlZGlyZWN0aW9uVGFyZ2V0Tm90Rm91bmQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlJFRElSRUNUX1RPX01JU1NJTkdfQ09OU1RSVUNUT1IiXSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNSZWRpcmVjdGlvblRhcmdldE5vdEZvdW5kKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlUmVkaXJlY3Rpb25UYXJnZXROb3RGb3VuZCwKICAgICAgbWVzc2FnZTogIiIiUmVkaXJlY3Rpb24gY29uc3RydWN0b3IgdGFyZ2V0IG5vdCBmb3VuZDogJyR7bmFtZX0nIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUmVxdWlyZWRQYXJhbWV0ZXJXaXRoRGVmYXVsdCA9CiAgICBtZXNzYWdlUmVxdWlyZWRQYXJhbWV0ZXJXaXRoRGVmYXVsdDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VSZXF1aXJlZFBhcmFtZXRlcldpdGhEZWZhdWx0ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiUmVxdWlyZWRQYXJhbWV0ZXJXaXRoRGVmYXVsdCIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTkFNRURfUEFSQU1FVEVSX09VVFNJREVfR1JPVVAiXSwKICAgIG1lc3NhZ2U6IHIiIiJOb24tb3B0aW9uYWwgcGFyYW1ldGVycyBjYW4ndCBoYXZlIGEgZGVmYXVsdCB2YWx1ZS4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSByZW1vdmluZyB0aGUgZGVmYXVsdCB2YWx1ZSBvciBtYWtpbmcgdGhlIHBhcmFtZXRlciBvcHRpb25hbC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUmV0aHJvd05vdENhdGNoID0gbWVzc2FnZVJldGhyb3dOb3RDYXRjaDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VSZXRocm93Tm90Q2F0Y2ggPSBjb25zdCBNZXNzYWdlQ29kZSgiUmV0aHJvd05vdENhdGNoIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJSRVRIUk9XX09VVFNJREVfQ0FUQ0giXSwKICAgIG1lc3NhZ2U6IHIiIiIncmV0aHJvdycgY2FuIG9ubHkgYmUgdXNlZCBpbiBjYXRjaCBjbGF1c2VzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVSZXR1cm5Gcm9tVm9pZEZ1bmN0aW9uID0gbWVzc2FnZVJldHVybkZyb21Wb2lkRnVuY3Rpb247CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlUmV0dXJuRnJvbVZvaWRGdW5jdGlvbiA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlJldHVybkZyb21Wb2lkRnVuY3Rpb24iLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlJFVFVSTl9PRl9JTlZBTElEX1RZUEUiXSwKICAgIG1lc3NhZ2U6IHIiIiJDYW4ndCByZXR1cm4gYSB2YWx1ZSBmcm9tIGEgdm9pZCBmdW5jdGlvbi4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUmV0dXJuVHlwZUZ1bmN0aW9uRXhwcmVzc2lvbiA9CiAgICBtZXNzYWdlUmV0dXJuVHlwZUZ1bmN0aW9uRXhwcmVzc2lvbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VSZXR1cm5UeXBlRnVuY3Rpb25FeHByZXNzaW9uID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiUmV0dXJuVHlwZUZ1bmN0aW9uRXhwcmVzc2lvbiIsCiAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nLAogICAgbWVzc2FnZTogciIiIkEgZnVuY3Rpb24gZXhwcmVzc2lvbiBjYW4ndCBoYXZlIGEgcmV0dXJuIHR5cGUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVJldHVybldpdGhvdXRFeHByZXNzaW9uID0gbWVzc2FnZVJldHVybldpdGhvdXRFeHByZXNzaW9uOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVJldHVybldpdGhvdXRFeHByZXNzaW9uID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiUmV0dXJuV2l0aG91dEV4cHJlc3Npb24iLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlJFVFVSTl9XSVRIT1VUX1ZBTFVFIl0sCiAgICBzZXZlcml0eTogU2V2ZXJpdHkud2FybmluZywKICAgIG1lc3NhZ2U6IHIiIiJNdXN0IGV4cGxpY2l0bHkgcmV0dXJuIGEgdmFsdWUgZnJvbSBhIG5vbi12b2lkIGZ1bmN0aW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4gdGVtcGxhdGVTZGtSb290Tm90Rm91bmQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlNESyByb290IGRpcmVjdG9yeSBub3QgZm91bmQ6ICN1cmkuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzU2RrUm9vdE5vdEZvdW5kKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+IGNvZGVTZGtSb290Tm90Rm91bmQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4oCiAgIlNka1Jvb3ROb3RGb3VuZCIsCiAgdGVtcGxhdGVTZGtSb290Tm90Rm91bmQsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzU2RrUm9vdE5vdEZvdW5kKFVyaSB1cmlfKSB7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVTZGtSb290Tm90Rm91bmQsCiAgICAgIG1lc3NhZ2U6ICIiIlNESyByb290IGRpcmVjdG9yeSBub3QgZm91bmQ6ICR7dXJpfS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd1cmknOiB1cmlffSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBVcmkKICAgICAgICAgICAgdXJpXyk+IHRlbXBsYXRlU2RrU3BlY2lmaWNhdGlvbk5vdEZvdW5kID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+KAogICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiU0RLIGxpYnJhcmllcyBzcGVjaWZpY2F0aW9uIG5vdCBmb3VuZDogI3VyaS4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiTm9ybWFsbHksIHRoZSBzcGVjaWZpY2F0aW9uIGlzIGEgZmlsZSBuYW1lZCAnbGlicmFyaWVzLmpzb24nIGluIHRoZSBEYXJ0IFNESyBpbnN0YWxsIGxvY2F0aW9uLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzU2RrU3BlY2lmaWNhdGlvbk5vdEZvdW5kKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+IGNvZGVTZGtTcGVjaWZpY2F0aW9uTm90Rm91bmQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4oCiAgIlNka1NwZWNpZmljYXRpb25Ob3RGb3VuZCIsCiAgdGVtcGxhdGVTZGtTcGVjaWZpY2F0aW9uTm90Rm91bmQsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzU2RrU3BlY2lmaWNhdGlvbk5vdEZvdW5kKFVyaSB1cmlfKSB7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVTZGtTcGVjaWZpY2F0aW9uTm90Rm91bmQsCiAgICAgIG1lc3NhZ2U6ICIiIlNESyBsaWJyYXJpZXMgc3BlY2lmaWNhdGlvbiBub3QgZm91bmQ6ICR7dXJpfS4iIiIsCiAgICAgIHRpcDoKICAgICAgICAgICIiIk5vcm1hbGx5LCB0aGUgc3BlY2lmaWNhdGlvbiBpcyBhIGZpbGUgbmFtZWQgJ2xpYnJhcmllcy5qc29uJyBpbiB0aGUgRGFydCBTREsgaW5zdGFsbCBsb2NhdGlvbi4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd1cmknOiB1cmlffSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPiB0ZW1wbGF0ZVNka1N1bW1hcnlOb3RGb3VuZCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiU0RLIHN1bW1hcnkgbm90IGZvdW5kOiAjdXJpLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1Nka1N1bW1hcnlOb3RGb3VuZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPiBjb2RlU2RrU3VtbWFyeU5vdEZvdW5kID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+KAogICJTZGtTdW1tYXJ5Tm90Rm91bmQiLAogIHRlbXBsYXRlU2RrU3VtbWFyeU5vdEZvdW5kLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1Nka1N1bW1hcnlOb3RGb3VuZChVcmkgdXJpXykgewogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlU2RrU3VtbWFyeU5vdEZvdW5kLAogICAgICBtZXNzYWdlOiAiIiJTREsgc3VtbWFyeSBub3QgZm91bmQ6ICR7dXJpfS4iIiIsIGFyZ3VtZW50czogeyd1cmknOiB1cmlffSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVNldExpdGVyYWxUb29NYW55VHlwZUFyZ3VtZW50cyA9CiAgICBtZXNzYWdlU2V0TGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVNldExpdGVyYWxUb29NYW55VHlwZUFyZ3VtZW50cyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlNldExpdGVyYWxUb29NYW55VHlwZUFyZ3VtZW50cyIsCiAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nLAogICAgbWVzc2FnZTogciIiIkEgc2V0IGxpdGVyYWwgcmVxdWlyZXMgZXhhY3RseSBvbmUgdHlwZSBhcmd1bWVudC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlU2V0T3JNYXBMaXRlcmFsVG9vTWFueVR5cGVBcmd1bWVudHMgPQogICAgbWVzc2FnZVNldE9yTWFwTGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVNldE9yTWFwTGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiU2V0T3JNYXBMaXRlcmFsVG9vTWFueVR5cGVBcmd1bWVudHMiLAogICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZywKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIkEgc2V0IG9yIG1hcCBsaXRlcmFsIHJlcXVpcmVzIGV4YWN0bHkgb25lIG9yIHR3byB0eXBlIGFyZ3VtZW50cywgcmVzcGVjdGl2ZWx5LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVTZXR0ZXJOb3RGb3VuZCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiU2V0dGVyIG5vdCBmb3VuZDogJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNTZXR0ZXJOb3RGb3VuZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlU2V0dGVyTm90Rm91bmQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIlNldHRlck5vdEZvdW5kIiwgdGVtcGxhdGVTZXR0ZXJOb3RGb3VuZCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVU5ERUZJTkVEX1NFVFRFUiJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1NldHRlck5vdEZvdW5kKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlU2V0dGVyTm90Rm91bmQsCiAgICAgIG1lc3NhZ2U6ICIiIlNldHRlciBub3QgZm91bmQ6ICcke25hbWV9Jy4iIiIsIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVTZXR0ZXJOb3RTeW5jID0gbWVzc2FnZVNldHRlck5vdFN5bmM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlU2V0dGVyTm90U3luYyA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJTZXR0ZXJOb3RTeW5jIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlZBTElEX01PRElGSUVSX09OX1NFVFRFUiJdLAogICAgbWVzc2FnZTogciIiIlNldHRlcnMgY2FuJ3QgdXNlICdhc3luYycsICdhc3luYyonLCBvciAnc3luYyonLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVTZXR0ZXJXaXRoV3JvbmdOdW1iZXJPZkZvcm1hbHMgPQogICAgbWVzc2FnZVNldHRlcldpdGhXcm9uZ051bWJlck9mRm9ybWFsczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VTZXR0ZXJXaXRoV3JvbmdOdW1iZXJPZkZvcm1hbHMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJTZXR0ZXJXaXRoV3JvbmdOdW1iZXJPZkZvcm1hbHMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIldST05HX05VTUJFUl9PRl9QQVJBTUVURVJTX0ZPUl9TRVRURVIiXSwKICAgIG1lc3NhZ2U6IHIiIiJBIHNldHRlciBzaG91bGQgaGF2ZSBleGFjdGx5IG9uZSBmb3JtYWwgcGFyYW1ldGVyLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgaW50IGNvdW50LAogICAgICAgIGludCBjb3VudDIsCiAgICAgICAgbnVtIF9udW0xLAogICAgICAgIG51bSBfbnVtMiwKICAgICAgICBudW0KICAgICAgICAgICAgX251bTMpPiB0ZW1wbGF0ZVNvdXJjZUJvZHlTdW1tYXJ5ID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICAgICAgaW50IGNvdW50LCBpbnQgY291bnQyLCBudW0gX251bTEsIG51bSBfbnVtMiwgbnVtIF9udW0zKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkJ1aWx0IGJvZGllcyBmb3IgI2NvdW50IGNvbXBpbGF0aW9uIHVuaXRzICgjY291bnQyIGJ5dGVzKSBpbiAjbnVtMSUuM21zLCB0aGF0IGlzLAojbnVtMiUxMi4zIGJ5dGVzL21zLCBhbmQKI251bTMlMTIuMyBtcy9jb21waWxhdGlvbiB1bml0LiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzU291cmNlQm9keVN1bW1hcnkpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvdW50LCBpbnQgY291bnQyLCBudW0gX251bTEsIG51bSBfbnVtMiwKICAgICAgICBudW0gX251bTMpPiBjb2RlU291cmNlQm9keVN1bW1hcnkgPSBjb25zdCBDb2RlPAogICAgTWVzc2FnZSBGdW5jdGlvbihpbnQgY291bnQsIGludCBjb3VudDIsIG51bSBfbnVtMSwgbnVtIF9udW0yLCBudW0gX251bTMpPigKICAiU291cmNlQm9keVN1bW1hcnkiLAogIHRlbXBsYXRlU291cmNlQm9keVN1bW1hcnksCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzU291cmNlQm9keVN1bW1hcnkoCiAgICBpbnQgY291bnQsIGludCBjb3VudDIsIG51bSBfbnVtMSwgbnVtIF9udW0yLCBudW0gX251bTMpIHsKICBpZiAoY291bnQgPT0gbnVsbCkgdGhyb3cgJ05vIGNvdW50IHByb3ZpZGVkJzsKICBpZiAoY291bnQyID09IG51bGwpIHRocm93ICdObyBjb3VudCBwcm92aWRlZCc7CiAgaWYgKF9udW0xID09IG51bGwpIHRocm93ICdObyBudW1iZXIgcHJvdmlkZWQnOwogIFN0cmluZyBudW0xID0gX251bTEudG9TdHJpbmdBc0ZpeGVkKDMpOwogIGlmIChfbnVtMiA9PSBudWxsKSB0aHJvdyAnTm8gbnVtYmVyIHByb3ZpZGVkJzsKICBTdHJpbmcgbnVtMiA9IF9udW0yLnRvU3RyaW5nQXNGaXhlZCgzKS5wYWRMZWZ0KDEyKTsKICBpZiAoX251bTMgPT0gbnVsbCkgdGhyb3cgJ05vIG51bWJlciBwcm92aWRlZCc7CiAgU3RyaW5nIG51bTMgPSBfbnVtMy50b1N0cmluZ0FzRml4ZWQoMykucGFkTGVmdCgxMik7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVTb3VyY2VCb2R5U3VtbWFyeSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkJ1aWx0IGJvZGllcyBmb3IgJHtjb3VudH0gY29tcGlsYXRpb24gdW5pdHMgKCR7Y291bnQyfSBieXRlcykgaW4gJHtudW0xfW1zLCB0aGF0IGlzLAoke251bTJ9IGJ5dGVzL21zLCBhbmQKJHtudW0zfSBtcy9jb21waWxhdGlvbiB1bml0LiIiIiwKICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgJ2NvdW50JzogY291bnQsCiAgICAgICAgJ2NvdW50Mic6IGNvdW50MiwKICAgICAgICAnbnVtMSc6IF9udW0xLAogICAgICAgICdudW0yJzogX251bTIsCiAgICAgICAgJ251bTMnOiBfbnVtMwogICAgICB9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIGludCBjb3VudCwKICAgICAgICBpbnQgY291bnQyLAogICAgICAgIG51bSBfbnVtMSwKICAgICAgICBudW0gX251bTIsCiAgICAgICAgbnVtCiAgICAgICAgICAgIF9udW0zKT4gdGVtcGxhdGVTb3VyY2VPdXRsaW5lU3VtbWFyeSA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgICAgIGludCBjb3VudCwgaW50IGNvdW50MiwgbnVtIF9udW0xLCBudW0gX251bTIsIG51bSBfbnVtMyk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJCdWlsdCBvdXRsaW5lcyBmb3IgI2NvdW50IGNvbXBpbGF0aW9uIHVuaXRzICgjY291bnQyIGJ5dGVzKSBpbiAjbnVtMSUuM21zLCB0aGF0IGlzLAojbnVtMiUxMi4zIGJ5dGVzL21zLCBhbmQKI251bTMlMTIuMyBtcy9jb21waWxhdGlvbiB1bml0LiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzU291cmNlT3V0bGluZVN1bW1hcnkpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvdW50LCBpbnQgY291bnQyLCBudW0gX251bTEsIG51bSBfbnVtMiwKICAgICAgICBudW0gX251bTMpPiBjb2RlU291cmNlT3V0bGluZVN1bW1hcnkgPSBjb25zdCBDb2RlPAogICAgTWVzc2FnZSBGdW5jdGlvbihpbnQgY291bnQsIGludCBjb3VudDIsIG51bSBfbnVtMSwgbnVtIF9udW0yLCBudW0gX251bTMpPigKICAiU291cmNlT3V0bGluZVN1bW1hcnkiLAogIHRlbXBsYXRlU291cmNlT3V0bGluZVN1bW1hcnksCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzU291cmNlT3V0bGluZVN1bW1hcnkoCiAgICBpbnQgY291bnQsIGludCBjb3VudDIsIG51bSBfbnVtMSwgbnVtIF9udW0yLCBudW0gX251bTMpIHsKICBpZiAoY291bnQgPT0gbnVsbCkgdGhyb3cgJ05vIGNvdW50IHByb3ZpZGVkJzsKICBpZiAoY291bnQyID09IG51bGwpIHRocm93ICdObyBjb3VudCBwcm92aWRlZCc7CiAgaWYgKF9udW0xID09IG51bGwpIHRocm93ICdObyBudW1iZXIgcHJvdmlkZWQnOwogIFN0cmluZyBudW0xID0gX251bTEudG9TdHJpbmdBc0ZpeGVkKDMpOwogIGlmIChfbnVtMiA9PSBudWxsKSB0aHJvdyAnTm8gbnVtYmVyIHByb3ZpZGVkJzsKICBTdHJpbmcgbnVtMiA9IF9udW0yLnRvU3RyaW5nQXNGaXhlZCgzKS5wYWRMZWZ0KDEyKTsKICBpZiAoX251bTMgPT0gbnVsbCkgdGhyb3cgJ05vIG51bWJlciBwcm92aWRlZCc7CiAgU3RyaW5nIG51bTMgPSBfbnVtMy50b1N0cmluZ0FzRml4ZWQoMykucGFkTGVmdCgxMik7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVTb3VyY2VPdXRsaW5lU3VtbWFyeSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkJ1aWx0IG91dGxpbmVzIGZvciAke2NvdW50fSBjb21waWxhdGlvbiB1bml0cyAoJHtjb3VudDJ9IGJ5dGVzKSBpbiAke251bTF9bXMsIHRoYXQgaXMsCiR7bnVtMn0gYnl0ZXMvbXMsIGFuZAoke251bTN9IG1zL2NvbXBpbGF0aW9uIHVuaXQuIiIiLAogICAgICBhcmd1bWVudHM6IHsKICAgICAgICAnY291bnQnOiBjb3VudCwKICAgICAgICAnY291bnQyJzogY291bnQyLAogICAgICAgICdudW0xJzogX251bTEsCiAgICAgICAgJ251bTInOiBfbnVtMiwKICAgICAgICAnbnVtMyc6IF9udW0zCiAgICAgIH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVTcHJlYWRFbGVtZW50ID0gbWVzc2FnZVNwcmVhZEVsZW1lbnQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlU3ByZWFkRWxlbWVudCA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJTcHJlYWRFbGVtZW50IiwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0LCBtZXNzYWdlOiByIiIiSXRlcmFibGUgc3ByZWFkLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVTcHJlYWRFbGVtZW50VHlwZU1pc21hdGNoID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkNhbid0IGFzc2lnbiBzcHJlYWQgZWxlbWVudHMgb2YgdHlwZSAnI3R5cGUnIHRvIGNvbGxlY3Rpb24gZWxlbWVudHMgb2YgdHlwZSAnI3R5cGUyJy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1NwcmVhZEVsZW1lbnRUeXBlTWlzbWF0Y2gpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPgogICAgY29kZVNwcmVhZEVsZW1lbnRUeXBlTWlzbWF0Y2ggPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgICAgICAiU3ByZWFkRWxlbWVudFR5cGVNaXNtYXRjaCIsIHRlbXBsYXRlU3ByZWFkRWxlbWVudFR5cGVNaXNtYXRjaCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTElTVF9FTEVNRU5UX1RZUEVfTk9UX0FTU0lHTkFCTEUiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzU3ByZWFkRWxlbWVudFR5cGVNaXNtYXRjaCgKICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlU3ByZWFkRWxlbWVudFR5cGVNaXNtYXRjaCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkNhbid0IGFzc2lnbiBzcHJlYWQgZWxlbWVudHMgb2YgdHlwZSAnJHt0eXBlfScgdG8gY29sbGVjdGlvbiBlbGVtZW50cyBvZiB0eXBlICcke3R5cGUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlU3ByZWFkTWFwRWxlbWVudCA9IG1lc3NhZ2VTcHJlYWRNYXBFbGVtZW50OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVNwcmVhZE1hcEVsZW1lbnQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJTcHJlYWRNYXBFbGVtZW50IiwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0LAogICAgbWVzc2FnZTogciIiIk1hcCBzcHJlYWQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBEYXJ0VHlwZSBfdHlwZSwKICAgICAgICBEYXJ0VHlwZQogICAgICAgICAgICBfdHlwZTIpPiB0ZW1wbGF0ZVNwcmVhZE1hcEVudHJ5RWxlbWVudEtleVR5cGVNaXNtYXRjaCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJDYW4ndCBhc3NpZ24gc3ByZWFkIGVudHJ5IGtleXMgb2YgdHlwZSAnI3R5cGUnIHRvIG1hcCBlbnRyeSBrZXlzIG9mIHR5cGUgJyN0eXBlMicuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNTcHJlYWRNYXBFbnRyeUVsZW1lbnRLZXlUeXBlTWlzbWF0Y2gpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPgogICAgY29kZVNwcmVhZE1hcEVudHJ5RWxlbWVudEtleVR5cGVNaXNtYXRjaCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgICAgICJTcHJlYWRNYXBFbnRyeUVsZW1lbnRLZXlUeXBlTWlzbWF0Y2giLAogICAgICAgIHRlbXBsYXRlU3ByZWFkTWFwRW50cnlFbGVtZW50S2V5VHlwZU1pc21hdGNoLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJNQVBfS0VZX1RZUEVfTk9UX0FTU0lHTkFCTEUiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzU3ByZWFkTWFwRW50cnlFbGVtZW50S2V5VHlwZU1pc21hdGNoKAogICAgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVTcHJlYWRNYXBFbnRyeUVsZW1lbnRLZXlUeXBlTWlzbWF0Y2gsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJDYW4ndCBhc3NpZ24gc3ByZWFkIGVudHJ5IGtleXMgb2YgdHlwZSAnJHt0eXBlfScgdG8gbWFwIGVudHJ5IGtleXMgb2YgdHlwZSAnJHt0eXBlMn0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZSwgJ3R5cGUyJzogX3R5cGUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+CiAgICB0ZW1wbGF0ZVNwcmVhZE1hcEVudHJ5RWxlbWVudFZhbHVlVHlwZU1pc21hdGNoID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkNhbid0IGFzc2lnbiBzcHJlYWQgZW50cnkgdmFsdWVzIG9mIHR5cGUgJyN0eXBlJyB0byBtYXAgZW50cnkgdmFsdWVzIG9mIHR5cGUgJyN0eXBlMicuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzU3ByZWFkTWFwRW50cnlFbGVtZW50VmFsdWVUeXBlTWlzbWF0Y2gpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPgogICAgY29kZVNwcmVhZE1hcEVudHJ5RWxlbWVudFZhbHVlVHlwZU1pc21hdGNoID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICAgICAgIlNwcmVhZE1hcEVudHJ5RWxlbWVudFZhbHVlVHlwZU1pc21hdGNoIiwKICAgICAgICB0ZW1wbGF0ZVNwcmVhZE1hcEVudHJ5RWxlbWVudFZhbHVlVHlwZU1pc21hdGNoLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJNQVBfVkFMVUVfVFlQRV9OT1RfQVNTSUdOQUJMRSJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNTcHJlYWRNYXBFbnRyeUVsZW1lbnRWYWx1ZVR5cGVNaXNtYXRjaCgKICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlU3ByZWFkTWFwRW50cnlFbGVtZW50VmFsdWVUeXBlTWlzbWF0Y2gsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJDYW4ndCBhc3NpZ24gc3ByZWFkIGVudHJ5IHZhbHVlcyBvZiB0eXBlICcke3R5cGV9JyB0byBtYXAgZW50cnkgdmFsdWVzIG9mIHR5cGUgJyR7dHlwZTJ9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGUsICd0eXBlMic6IF90eXBlMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUpPiB0ZW1wbGF0ZVNwcmVhZE1hcEVudHJ5VHlwZU1pc21hdGNoID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJVbmV4cGVjdGVkIHR5cGUgJyN0eXBlJyBvZiBhIG1hcCBzcHJlYWQgZW50cnkuICBFeHBlY3RlZCAnZHluYW1pYycgb3IgYSBNYXAuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNTcHJlYWRNYXBFbnRyeVR5cGVNaXNtYXRjaCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUpPiBjb2RlU3ByZWFkTWFwRW50cnlUeXBlTWlzbWF0Y2ggPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4oCiAgIlNwcmVhZE1hcEVudHJ5VHlwZU1pc21hdGNoIiwKICB0ZW1wbGF0ZVNwcmVhZE1hcEVudHJ5VHlwZU1pc21hdGNoLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1NwcmVhZE1hcEVudHJ5VHlwZU1pc21hdGNoKERhcnRUeXBlIF90eXBlKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlU3ByZWFkTWFwRW50cnlUeXBlTWlzbWF0Y2gsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJVbmV4cGVjdGVkIHR5cGUgJyR7dHlwZX0nIG9mIGEgbWFwIHNwcmVhZCBlbnRyeS4gIEV4cGVjdGVkICdkeW5hbWljJyBvciBhIE1hcC4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlKT4gdGVtcGxhdGVTcHJlYWRUeXBlTWlzbWF0Y2ggPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlVuZXhwZWN0ZWQgdHlwZSAnI3R5cGUnIG9mIGEgc3ByZWFkLiAgRXhwZWN0ZWQgJ2R5bmFtaWMnIG9yIGFuIEl0ZXJhYmxlLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzU3ByZWFkVHlwZU1pc21hdGNoKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSk+IGNvZGVTcHJlYWRUeXBlTWlzbWF0Y2ggPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4oCiAgIlNwcmVhZFR5cGVNaXNtYXRjaCIsCiAgdGVtcGxhdGVTcHJlYWRUeXBlTWlzbWF0Y2gsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzU3ByZWFkVHlwZU1pc21hdGNoKERhcnRUeXBlIF90eXBlKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlU3ByZWFkVHlwZU1pc21hdGNoLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVW5leHBlY3RlZCB0eXBlICcke3R5cGV9JyBvZiBhIHNwcmVhZC4gIEV4cGVjdGVkICdkeW5hbWljJyBvciBhbiBJdGVyYWJsZS4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlU3RhY2tPdmVyZmxvdyA9IG1lc3NhZ2VTdGFja092ZXJmbG93OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVN0YWNrT3ZlcmZsb3cgPSBjb25zdCBNZXNzYWdlQ29kZSgiU3RhY2tPdmVyZmxvdyIsCiAgICBpbmRleDogMTksCiAgICBtZXNzYWdlOiByIiIiVGhlIGZpbGUgaGFzIHRvbyBtYW55IG5lc3RlZCBleHByZXNzaW9ucyBvciBzdGF0ZW1lbnRzLiIiIiwKICAgIHRpcDogciIiIlRyeSBzaW1wbGlmeWluZyB0aGUgY29kZS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlU3RhdGljQW5kSW5zdGFuY2VDb25mbGljdCA9CiAgICBtZXNzYWdlU3RhdGljQW5kSW5zdGFuY2VDb25mbGljdDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VTdGF0aWNBbmRJbnN0YW5jZUNvbmZsaWN0ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiU3RhdGljQW5kSW5zdGFuY2VDb25mbGljdCIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQ09ORkxJQ1RJTkdfU1RBVElDX0FORF9JTlNUQU5DRSJdLAogICAgbWVzc2FnZTogciIiIlRoaXMgc3RhdGljIG1lbWJlciBjb25mbGljdHMgd2l0aCBhbiBpbnN0YW5jZSBtZW1iZXIuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVN0YXRpY0FuZEluc3RhbmNlQ29uZmxpY3RDYXVzZSA9CiAgICBtZXNzYWdlU3RhdGljQW5kSW5zdGFuY2VDb25mbGljdENhdXNlOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVN0YXRpY0FuZEluc3RhbmNlQ29uZmxpY3RDYXVzZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlN0YXRpY0FuZEluc3RhbmNlQ29uZmxpY3RDYXVzZSIsCiAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCwKICAgIG1lc3NhZ2U6IHIiIiJUaGlzIGlzIHRoZSBpbnN0YW5jZSBtZW1iZXIuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVN0YXRpY0NvbnN0cnVjdG9yID0gbWVzc2FnZVN0YXRpY0NvbnN0cnVjdG9yOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVN0YXRpY0NvbnN0cnVjdG9yID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiU3RhdGljQ29uc3RydWN0b3IiLAogICAgaW5kZXg6IDQsCiAgICBtZXNzYWdlOiByIiIiQ29uc3RydWN0b3JzIGNhbid0IGJlIHN0YXRpYy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgdGhlIGtleXdvcmQgJ3N0YXRpYycuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVN0YXRpY09wZXJhdG9yID0gbWVzc2FnZVN0YXRpY09wZXJhdG9yOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVN0YXRpY09wZXJhdG9yID0gY29uc3QgTWVzc2FnZUNvZGUoIlN0YXRpY09wZXJhdG9yIiwKICAgIGluZGV4OiAxNywKICAgIG1lc3NhZ2U6IHIiIiJPcGVyYXRvcnMgY2FuJ3QgYmUgc3RhdGljLiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyB0aGUga2V5d29yZCAnc3RhdGljJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlU3VwZXJBc0V4cHJlc3Npb24gPSBtZXNzYWdlU3VwZXJBc0V4cHJlc3Npb247CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlU3VwZXJBc0V4cHJlc3Npb24gPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJTdXBlckFzRXhwcmVzc2lvbiIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiU1VQRVJfQVNfRVhQUkVTU0lPTiJdLAogICAgbWVzc2FnZTogciIiIkNhbid0IHVzZSAnc3VwZXInIGFzIGFuIGV4cHJlc3Npb24uIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUbyBkZWxlZ2F0ZSBhIGNvbnN0cnVjdG9yIHRvIGEgc3VwZXIgY29uc3RydWN0b3IsIHB1dCB0aGUgc3VwZXIgY2FsbCBhcyBhbiBpbml0aWFsaXplci4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlU3VwZXJBc0lkZW50aWZpZXIgPSBtZXNzYWdlU3VwZXJBc0lkZW50aWZpZXI7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlU3VwZXJBc0lkZW50aWZpZXIgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJTdXBlckFzSWRlbnRpZmllciIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiU1VQRVJfQVNfRVhQUkVTU0lPTiJdLAogICAgbWVzc2FnZTogciIiIkV4cGVjdGVkIGlkZW50aWZpZXIsIGJ1dCBnb3QgJ3N1cGVyJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlU3VwZXJJbml0aWFsaXplck5vdExhc3QgPSBtZXNzYWdlU3VwZXJJbml0aWFsaXplck5vdExhc3Q7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlU3VwZXJJbml0aWFsaXplck5vdExhc3QgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJTdXBlckluaXRpYWxpemVyTm90TGFzdCIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9TVVBFUl9JTlZPQ0FUSU9OIl0sCiAgICBtZXNzYWdlOiByIiIiQ2FuJ3QgaGF2ZSBpbml0aWFsaXplcnMgYWZ0ZXIgJ3N1cGVyJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlU3VwZXJOdWxsQXdhcmUgPSBtZXNzYWdlU3VwZXJOdWxsQXdhcmU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlU3VwZXJOdWxsQXdhcmUgPSBjb25zdCBNZXNzYWdlQ29kZSgiU3VwZXJOdWxsQXdhcmUiLAogICAgaW5kZXg6IDE4LAogICAgbWVzc2FnZToKICAgICAgICByIiIiVGhlIG9wZXJhdG9yICc/LicgY2Fubm90IGJlIHVzZWQgd2l0aCAnc3VwZXInIGJlY2F1c2UgJ3N1cGVyJyBjYW5ub3QgYmUgbnVsbC4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVwbGFjaW5nICc/Licgd2l0aCAnLiciIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb0NvbnN0cnVjdG9yID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJTdXBlcmNsYXNzIGhhcyBubyBjb25zdHJ1Y3RvciBuYW1lZCAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1N1cGVyY2xhc3NIYXNOb0NvbnN0cnVjdG9yKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVTdXBlcmNsYXNzSGFzTm9Db25zdHJ1Y3RvciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiU3VwZXJjbGFzc0hhc05vQ29uc3RydWN0b3IiLCB0ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb0NvbnN0cnVjdG9yLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WwogICAgICAgICAgIlVOREVGSU5FRF9DT05TVFJVQ1RPUl9JTl9JTklUSUFMSVpFUiIsCiAgICAgICAgICAiVU5ERUZJTkVEX0NPTlNUUlVDVE9SX0lOX0lOSVRJQUxJWkVSX0RFRkFVTFQiCiAgICAgICAgXSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNTdXBlcmNsYXNzSGFzTm9Db25zdHJ1Y3RvcihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVN1cGVyY2xhc3NIYXNOb0NvbnN0cnVjdG9yLAogICAgICBtZXNzYWdlOiAiIiJTdXBlcmNsYXNzIGhhcyBubyBjb25zdHJ1Y3RvciBuYW1lZCAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVTdXBlcmNsYXNzSGFzTm9EZWZhdWx0Q29uc3RydWN0b3IgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBzdXBlcmNsYXNzLCAnI25hbWUnLCBoYXMgbm8gdW5uYW1lZCBjb25zdHJ1Y3RvciB0aGF0IHRha2VzIG5vIGFyZ3VtZW50cy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1N1cGVyY2xhc3NIYXNOb0RlZmF1bHRDb25zdHJ1Y3Rvcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgY29kZVN1cGVyY2xhc3NIYXNOb0RlZmF1bHRDb25zdHJ1Y3RvciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiU3VwZXJjbGFzc0hhc05vRGVmYXVsdENvbnN0cnVjdG9yIiwKICAgICAgICB0ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb0RlZmF1bHRDb25zdHJ1Y3RvciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTk9fREVGQVVMVF9TVVBFUl9DT05TVFJVQ1RPUl9JTVBMSUNJVCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNTdXBlcmNsYXNzSGFzTm9EZWZhdWx0Q29uc3RydWN0b3IoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVTdXBlcmNsYXNzSGFzTm9EZWZhdWx0Q29uc3RydWN0b3IsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgc3VwZXJjbGFzcywgJyR7bmFtZX0nLCBoYXMgbm8gdW5uYW1lZCBjb25zdHJ1Y3RvciB0aGF0IHRha2VzIG5vIGFyZ3VtZW50cy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVTdXBlcmNsYXNzSGFzTm9HZXR0ZXIgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlN1cGVyY2xhc3MgaGFzIG5vIGdldHRlciBuYW1lZCAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1N1cGVyY2xhc3NIYXNOb0dldHRlcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlU3VwZXJjbGFzc0hhc05vR2V0dGVyID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJTdXBlcmNsYXNzSGFzTm9HZXR0ZXIiLCB0ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb0dldHRlciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVU5ERUZJTkVEX1NVUEVSX0dFVFRFUiJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1N1cGVyY2xhc3NIYXNOb0dldHRlcihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVN1cGVyY2xhc3NIYXNOb0dldHRlciwKICAgICAgbWVzc2FnZTogIiIiU3VwZXJjbGFzcyBoYXMgbm8gZ2V0dGVyIG5hbWVkICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVTdXBlcmNsYXNzSGFzTm9NZXRob2QgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlN1cGVyY2xhc3MgaGFzIG5vIG1ldGhvZCBuYW1lZCAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1N1cGVyY2xhc3NIYXNOb01ldGhvZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlU3VwZXJjbGFzc0hhc05vTWV0aG9kID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJTdXBlcmNsYXNzSGFzTm9NZXRob2QiLCB0ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb01ldGhvZCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVU5ERUZJTkVEX1NVUEVSX01FVEhPRCJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1N1cGVyY2xhc3NIYXNOb01ldGhvZChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVN1cGVyY2xhc3NIYXNOb01ldGhvZCwKICAgICAgbWVzc2FnZTogIiIiU3VwZXJjbGFzcyBoYXMgbm8gbWV0aG9kIG5hbWVkICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVTdXBlcmNsYXNzSGFzTm9TZXR0ZXIgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlN1cGVyY2xhc3MgaGFzIG5vIHNldHRlciBuYW1lZCAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1N1cGVyY2xhc3NIYXNOb1NldHRlcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlU3VwZXJjbGFzc0hhc05vU2V0dGVyID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJTdXBlcmNsYXNzSGFzTm9TZXR0ZXIiLCB0ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb1NldHRlciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVU5ERUZJTkVEX1NVUEVSX1NFVFRFUiJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1N1cGVyY2xhc3NIYXNOb1NldHRlcihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVN1cGVyY2xhc3NIYXNOb1NldHRlciwKICAgICAgbWVzc2FnZTogIiIiU3VwZXJjbGFzcyBoYXMgbm8gc2V0dGVyIG5hbWVkICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUpPiB0ZW1wbGF0ZVN1cGVyY2xhc3NNZXRob2RBcmd1bWVudE1pc21hdGNoID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJTdXBlcmNsYXNzIGRvZXNuJ3QgaGF2ZSBhIG1ldGhvZCBuYW1lZCAnI25hbWUnIHdpdGggbWF0Y2hpbmcgYXJndW1lbnRzLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzU3VwZXJjbGFzc01ldGhvZEFyZ3VtZW50TWlzbWF0Y2gpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZVN1cGVyY2xhc3NNZXRob2RBcmd1bWVudE1pc21hdGNoID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJTdXBlcmNsYXNzTWV0aG9kQXJndW1lbnRNaXNtYXRjaCIsCiAgICAgICAgdGVtcGxhdGVTdXBlcmNsYXNzTWV0aG9kQXJndW1lbnRNaXNtYXRjaCwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNTdXBlcmNsYXNzTWV0aG9kQXJndW1lbnRNaXNtYXRjaChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVN1cGVyY2xhc3NNZXRob2RBcmd1bWVudE1pc21hdGNoLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiU3VwZXJjbGFzcyBkb2Vzbid0IGhhdmUgYSBtZXRob2QgbmFtZWQgJyR7bmFtZX0nIHdpdGggbWF0Y2hpbmcgYXJndW1lbnRzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVN1cGVydHlwZUlzRnVuY3Rpb24gPSBtZXNzYWdlU3VwZXJ0eXBlSXNGdW5jdGlvbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VTdXBlcnR5cGVJc0Z1bmN0aW9uID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiU3VwZXJ0eXBlSXNGdW5jdGlvbiIsCiAgICBtZXNzYWdlOiByIiIiQ2FuJ3QgdXNlIGEgZnVuY3Rpb24gdHlwZSBhcyBzdXBlcnR5cGUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZVN1cGVydHlwZUlzSWxsZWdhbCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiVGhlIHR5cGUgJyNuYW1lJyBjYW4ndCBiZSB1c2VkIGFzIHN1cGVydHlwZS4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNTdXBlcnR5cGVJc0lsbGVnYWwpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZVN1cGVydHlwZUlzSWxsZWdhbCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiU3VwZXJ0eXBlSXNJbGxlZ2FsIiwgdGVtcGxhdGVTdXBlcnR5cGVJc0lsbGVnYWwsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkVYVEVORFNfTk9OX0NMQVNTIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1N1cGVydHlwZUlzSWxsZWdhbChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVN1cGVydHlwZUlzSWxsZWdhbCwKICAgICAgbWVzc2FnZTogIiIiVGhlIHR5cGUgJyR7bmFtZX0nIGNhbid0IGJlIHVzZWQgYXMgc3VwZXJ0eXBlLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZVN1cGVydHlwZUlzVHlwZVZhcmlhYmxlID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJUaGUgdHlwZSB2YXJpYWJsZSAnI25hbWUnIGNhbid0IGJlIHVzZWQgYXMgc3VwZXJ0eXBlLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1N1cGVydHlwZUlzVHlwZVZhcmlhYmxlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVTdXBlcnR5cGVJc1R5cGVWYXJpYWJsZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiU3VwZXJ0eXBlSXNUeXBlVmFyaWFibGUiLCB0ZW1wbGF0ZVN1cGVydHlwZUlzVHlwZVZhcmlhYmxlLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJFWFRFTkRTX05PTl9DTEFTUyJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNTdXBlcnR5cGVJc1R5cGVWYXJpYWJsZShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVN1cGVydHlwZUlzVHlwZVZhcmlhYmxlLAogICAgICBtZXNzYWdlOiAiIiJUaGUgdHlwZSB2YXJpYWJsZSAnJHtuYW1lfScgY2FuJ3QgYmUgdXNlZCBhcyBzdXBlcnR5cGUuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlU3dpdGNoQ2FzZUZhbGxUaHJvdWdoID0gbWVzc2FnZVN3aXRjaENhc2VGYWxsVGhyb3VnaDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VTd2l0Y2hDYXNlRmFsbFRocm91Z2ggPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJTd2l0Y2hDYXNlRmFsbFRocm91Z2giLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNBU0VfQkxPQ0tfTk9UX1RFUk1JTkFURUQiXSwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcsCiAgICBtZXNzYWdlOiByIiIiU3dpdGNoIGNhc2UgbWF5IGZhbGwgdGhyb3VnaCB0byB0aGUgbmV4dCBjYXNlLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVTd2l0Y2hFeHByZXNzaW9uTm90QXNzaWduYWJsZSA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUeXBlICcjdHlwZScgb2YgdGhlIHN3aXRjaCBleHByZXNzaW9uIGlzbid0IGFzc2lnbmFibGUgdG8gdGhlIHR5cGUgJyN0eXBlMicgb2YgdGhpcyBjYXNlIGV4cHJlc3Npb24uIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNTd2l0Y2hFeHByZXNzaW9uTm90QXNzaWduYWJsZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+CiAgICBjb2RlU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGUgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgICAgICAiU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGUiLCB0ZW1wbGF0ZVN3aXRjaEV4cHJlc3Npb25Ob3RBc3NpZ25hYmxlLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJTV0lUQ0hfRVhQUkVTU0lPTl9OT1RfQVNTSUdOQUJMRSJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNTd2l0Y2hFeHByZXNzaW9uTm90QXNzaWduYWJsZSgKICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGUsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUeXBlICcke3R5cGV9JyBvZiB0aGUgc3dpdGNoIGV4cHJlc3Npb24gaXNuJ3QgYXNzaWduYWJsZSB0byB0aGUgdHlwZSAnJHt0eXBlMn0nIG9mIHRoaXMgY2FzZSBleHByZXNzaW9uLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZSwgJ3R5cGUyJzogX3R5cGUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVN3aXRjaEV4cHJlc3Npb25Ob3RBc3NpZ25hYmxlQ2F1c2UgPQogICAgbWVzc2FnZVN3aXRjaEV4cHJlc3Npb25Ob3RBc3NpZ25hYmxlQ2F1c2U7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGVDYXVzZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlN3aXRjaEV4cHJlc3Npb25Ob3RBc3NpZ25hYmxlQ2F1c2UiLAogICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQsCiAgICBtZXNzYWdlOiByIiIiVGhlIHN3aXRjaCBleHByZXNzaW9uIGlzIGhlcmUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVN3aXRjaEhhc0Nhc2VBZnRlckRlZmF1bHQgPQogICAgbWVzc2FnZVN3aXRjaEhhc0Nhc2VBZnRlckRlZmF1bHQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlU3dpdGNoSGFzQ2FzZUFmdGVyRGVmYXVsdCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlN3aXRjaEhhc0Nhc2VBZnRlckRlZmF1bHQiLAogICAgaW5kZXg6IDE2LAogICAgbWVzc2FnZToKICAgICAgICByIiIiVGhlIGRlZmF1bHQgY2FzZSBzaG91bGQgYmUgdGhlIGxhc3QgY2FzZSBpbiBhIHN3aXRjaCBzdGF0ZW1lbnQuIiIiLAogICAgdGlwOiByIiIiVHJ5IG1vdmluZyB0aGUgZGVmYXVsdCBjYXNlIGFmdGVyIHRoZSBvdGhlciBjYXNlIGNsYXVzZXMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVN3aXRjaEhhc011bHRpcGxlRGVmYXVsdHMgPQogICAgbWVzc2FnZVN3aXRjaEhhc011bHRpcGxlRGVmYXVsdHM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlU3dpdGNoSGFzTXVsdGlwbGVEZWZhdWx0cyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlN3aXRjaEhhc011bHRpcGxlRGVmYXVsdHMiLAogICAgaW5kZXg6IDE1LAogICAgbWVzc2FnZTogciIiIlRoZSAnZGVmYXVsdCcgY2FzZSBjYW4gb25seSBiZSBkZWNsYXJlZCBvbmNlLiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyBhbGwgYnV0IG9uZSBkZWZhdWx0IGNhc2UuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVN5bnRoZXRpY1Rva2VuID0gbWVzc2FnZVN5bnRoZXRpY1Rva2VuOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVN5bnRoZXRpY1Rva2VuID0gY29uc3QgTWVzc2FnZUNvZGUoIlN5bnRoZXRpY1Rva2VuIiwKICAgIG1lc3NhZ2U6IHIiIiJUaGlzIGNvdWxkbid0IGJlIHBhcnNlZC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZVRoaXNBY2Nlc3NJbkZpZWxkSW5pdGlhbGl6ZXIgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkNhbid0IGFjY2VzcyAndGhpcycgaW4gYSBmaWVsZCBpbml0aWFsaXplciB0byByZWFkICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzVGhpc0FjY2Vzc0luRmllbGRJbml0aWFsaXplcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlVGhpc0FjY2Vzc0luRmllbGRJbml0aWFsaXplciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiVGhpc0FjY2Vzc0luRmllbGRJbml0aWFsaXplciIsIHRlbXBsYXRlVGhpc0FjY2Vzc0luRmllbGRJbml0aWFsaXplciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVEhJU19BQ0NFU1NfRlJPTV9GSUVMRF9JTklUSUFMSVpFUiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNUaGlzQWNjZXNzSW5GaWVsZEluaXRpYWxpemVyKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlVGhpc0FjY2Vzc0luRmllbGRJbml0aWFsaXplciwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkNhbid0IGFjY2VzcyAndGhpcycgaW4gYSBmaWVsZCBpbml0aWFsaXplciB0byByZWFkICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVUaGlzQXNJZGVudGlmaWVyID0gbWVzc2FnZVRoaXNBc0lkZW50aWZpZXI7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlVGhpc0FzSWRlbnRpZmllciA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlRoaXNBc0lkZW50aWZpZXIiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfUkVGRVJFTkNFX1RPX1RISVMiXSwKICAgIG1lc3NhZ2U6IHIiIiJFeHBlY3RlZCBpZGVudGlmaWVyLCBidXQgZ290ICd0aGlzJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlVGhpc0luaXRpYWxpemVyTm90QWxvbmUgPSBtZXNzYWdlVGhpc0luaXRpYWxpemVyTm90QWxvbmU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlVGhpc0luaXRpYWxpemVyTm90QWxvbmUgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJUaGlzSW5pdGlhbGl6ZXJOb3RBbG9uZSIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRklFTERfSU5JVElBTElaRVJfUkVESVJFQ1RJTkdfQ09OU1RSVUNUT1IiXSwKICAgIG1lc3NhZ2U6IHIiIiJDYW4ndCBoYXZlIG90aGVyIGluaXRpYWxpemVycyB0b2dldGhlciB3aXRoICd0aGlzJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4KICAgIHRlbXBsYXRlVGhpc09yU3VwZXJBY2Nlc3NJbkZpZWxkSW5pdGlhbGl6ZXIgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ2FuJ3QgYWNjZXNzICcjc3RyaW5nJyBpbiBhIGZpZWxkIGluaXRpYWxpemVyLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1RoaXNPclN1cGVyQWNjZXNzSW5GaWVsZEluaXRpYWxpemVyKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4KICAgIGNvZGVUaGlzT3JTdXBlckFjY2Vzc0luRmllbGRJbml0aWFsaXplciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgICAgICJUaGlzT3JTdXBlckFjY2Vzc0luRmllbGRJbml0aWFsaXplciIsCiAgICAgICAgdGVtcGxhdGVUaGlzT3JTdXBlckFjY2Vzc0luRmllbGRJbml0aWFsaXplciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVEhJU19BQ0NFU1NfRlJPTV9JTklUSUFMSVpFUiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNUaGlzT3JTdXBlckFjY2Vzc0luRmllbGRJbml0aWFsaXplcihTdHJpbmcgc3RyaW5nKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVRoaXNPclN1cGVyQWNjZXNzSW5GaWVsZEluaXRpYWxpemVyLAogICAgICBtZXNzYWdlOiAiIiJDYW4ndCBhY2Nlc3MgJyR7c3RyaW5nfScgaW4gYSBmaWVsZCBpbml0aWFsaXplci4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmd9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIGludCBjb3VudCwKICAgICAgICBpbnQKICAgICAgICAgICAgY291bnQyKT4gdGVtcGxhdGVUb29GZXdBcmd1bWVudHMgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKGludCBjb3VudCwgaW50IGNvdW50Mik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUb28gZmV3IHBvc2l0aW9uYWwgYXJndW1lbnRzOiAjY291bnQgcmVxdWlyZWQsICNjb3VudDIgZ2l2ZW4uIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNUb29GZXdBcmd1bWVudHMpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKGludCBjb3VudCwgaW50IGNvdW50Mik+IGNvZGVUb29GZXdBcmd1bWVudHMgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKGludCBjb3VudCwgaW50IGNvdW50Mik+KAogICAgICAgICJUb29GZXdBcmd1bWVudHMiLCB0ZW1wbGF0ZVRvb0Zld0FyZ3VtZW50cywKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTk9UX0VOT1VHSF9SRVFVSVJFRF9BUkdVTUVOVFMiXSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNUb29GZXdBcmd1bWVudHMoaW50IGNvdW50LCBpbnQgY291bnQyKSB7CiAgaWYgKGNvdW50ID09IG51bGwpIHRocm93ICdObyBjb3VudCBwcm92aWRlZCc7CiAgaWYgKGNvdW50MiA9PSBudWxsKSB0aHJvdyAnTm8gY291bnQgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlVG9vRmV3QXJndW1lbnRzLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVG9vIGZldyBwb3NpdGlvbmFsIGFyZ3VtZW50czogJHtjb3VudH0gcmVxdWlyZWQsICR7Y291bnQyfSBnaXZlbi4iIiIsCiAgICAgIGFyZ3VtZW50czogeydjb3VudCc6IGNvdW50LCAnY291bnQyJzogY291bnQyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBpbnQgY291bnQsCiAgICAgICAgaW50CiAgICAgICAgICAgIGNvdW50Mik+IHRlbXBsYXRlVG9vTWFueUFyZ3VtZW50cyA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvdW50LCBpbnQgY291bnQyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRvbyBtYW55IHBvc2l0aW9uYWwgYXJndW1lbnRzOiAjY291bnQgYWxsb3dlZCwgYnV0ICNjb3VudDIgZm91bmQuIiIiLAogICAgdGlwVGVtcGxhdGU6IHIiIiJUcnkgcmVtb3ZpbmcgdGhlIGV4dHJhIHBvc2l0aW9uYWwgYXJndW1lbnRzLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzVG9vTWFueUFyZ3VtZW50cyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvdW50LCBpbnQgY291bnQyKT4gY29kZVRvb01hbnlBcmd1bWVudHMgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKGludCBjb3VudCwgaW50IGNvdW50Mik+KAogICAgICAgICJUb29NYW55QXJndW1lbnRzIiwgdGVtcGxhdGVUb29NYW55QXJndW1lbnRzLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJFWFRSQV9QT1NJVElPTkFMX0FSR1VNRU5UUyJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1Rvb01hbnlBcmd1bWVudHMoaW50IGNvdW50LCBpbnQgY291bnQyKSB7CiAgaWYgKGNvdW50ID09IG51bGwpIHRocm93ICdObyBjb3VudCBwcm92aWRlZCc7CiAgaWYgKGNvdW50MiA9PSBudWxsKSB0aHJvdyAnTm8gY291bnQgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlVG9vTWFueUFyZ3VtZW50cywKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRvbyBtYW55IHBvc2l0aW9uYWwgYXJndW1lbnRzOiAke2NvdW50fSBhbGxvd2VkLCBidXQgJHtjb3VudDJ9IGZvdW5kLiIiIiwKICAgICAgdGlwOiAiIiJUcnkgcmVtb3ZpbmcgdGhlIGV4dHJhIHBvc2l0aW9uYWwgYXJndW1lbnRzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J2NvdW50JzogY291bnQsICdjb3VudDInOiBjb3VudDJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlVG9wTGV2ZWxPcGVyYXRvciA9IG1lc3NhZ2VUb3BMZXZlbE9wZXJhdG9yOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVRvcExldmVsT3BlcmF0b3IgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJUb3BMZXZlbE9wZXJhdG9yIiwKICAgIGluZGV4OiAxNCwKICAgIG1lc3NhZ2U6IHIiIiJPcGVyYXRvcnMgbXVzdCBiZSBkZWNsYXJlZCB3aXRoaW4gYSBjbGFzcy4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSByZW1vdmluZyB0aGUgb3BlcmF0b3IsIG1vdmluZyBpdCB0byBhIGNsYXNzLCBvciBjb252ZXJ0aW5nIGl0IHRvIGJlIGEgZnVuY3Rpb24uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVR5cGVBZnRlclZhciA9IG1lc3NhZ2VUeXBlQWZ0ZXJWYXI7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlVHlwZUFmdGVyVmFyID0gY29uc3QgTWVzc2FnZUNvZGUoIlR5cGVBZnRlclZhciIsCiAgICBpbmRleDogODksCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJWYXJpYWJsZXMgY2FuJ3QgYmUgZGVjbGFyZWQgdXNpbmcgYm90aCAndmFyJyBhbmQgYSB0eXBlIG5hbWUuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nICd2YXIuJyIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKGludCBjb3VudCk+IHRlbXBsYXRlVHlwZUFyZ3VtZW50TWlzbWF0Y2ggPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihpbnQgY291bnQpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJFeHBlY3RlZCAjY291bnQgdHlwZSBhcmd1bWVudHMuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzVHlwZUFyZ3VtZW50TWlzbWF0Y2gpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKGludCBjb3VudCk+IGNvZGVUeXBlQXJndW1lbnRNaXNtYXRjaCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvdW50KT4oCiAgICAgICAgIlR5cGVBcmd1bWVudE1pc21hdGNoIiwgdGVtcGxhdGVUeXBlQXJndW1lbnRNaXNtYXRjaCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiV1JPTkdfTlVNQkVSX09GX1RZUEVfQVJHVU1FTlRTIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzVHlwZUFyZ3VtZW50TWlzbWF0Y2goaW50IGNvdW50KSB7CiAgaWYgKGNvdW50ID09IG51bGwpIHRocm93ICdObyBjb3VudCBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVUeXBlQXJndW1lbnRNaXNtYXRjaCwKICAgICAgbWVzc2FnZTogIiIiRXhwZWN0ZWQgJHtjb3VudH0gdHlwZSBhcmd1bWVudHMuIiIiLAogICAgICBhcmd1bWVudHM6IHsnY291bnQnOiBjb3VudH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlVHlwZUFyZ3VtZW50c09uVHlwZVZhcmlhYmxlID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJDYW4ndCB1c2UgdHlwZSBhcmd1bWVudHMgd2l0aCB0eXBlIHZhcmlhYmxlICcjbmFtZScuIiIiLAogICAgICAgIHRpcFRlbXBsYXRlOiByIiIiVHJ5IHJlbW92aW5nIHRoZSB0eXBlIGFyZ3VtZW50cy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNUeXBlQXJndW1lbnRzT25UeXBlVmFyaWFibGUpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZVR5cGVBcmd1bWVudHNPblR5cGVWYXJpYWJsZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiVHlwZUFyZ3VtZW50c09uVHlwZVZhcmlhYmxlIiwgdGVtcGxhdGVUeXBlQXJndW1lbnRzT25UeXBlVmFyaWFibGUsCiAgICAgICAgaW5kZXg6IDEzLCBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNUeXBlQXJndW1lbnRzT25UeXBlVmFyaWFibGUoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVUeXBlQXJndW1lbnRzT25UeXBlVmFyaWFibGUsCiAgICAgIG1lc3NhZ2U6ICIiIkNhbid0IHVzZSB0eXBlIGFyZ3VtZW50cyB3aXRoIHR5cGUgdmFyaWFibGUgJyR7bmFtZX0nLiIiIiwKICAgICAgdGlwOiAiIiJUcnkgcmVtb3ZpbmcgdGhlIHR5cGUgYXJndW1lbnRzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVR5cGVCZWZvcmVGYWN0b3J5ID0gbWVzc2FnZVR5cGVCZWZvcmVGYWN0b3J5OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVR5cGVCZWZvcmVGYWN0b3J5ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiVHlwZUJlZm9yZUZhY3RvcnkiLAogICAgaW5kZXg6IDU3LAogICAgbWVzc2FnZTogciIiIkZhY3RvcnkgY29uc3RydWN0b3JzIGNhbm5vdCBoYXZlIGEgcmV0dXJuIHR5cGUuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nIHRoZSB0eXBlIGFwcGVhcmluZyBiZWZvcmUgJ2ZhY3RvcnknLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVUeXBlTm90Rm91bmQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlR5cGUgJyNuYW1lJyBub3QgZm91bmQuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzVHlwZU5vdEZvdW5kKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVUeXBlTm90Rm91bmQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIlR5cGVOb3RGb3VuZCIsIHRlbXBsYXRlVHlwZU5vdEZvdW5kLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJVTkRFRklORURfQ0xBU1MiXSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNUeXBlTm90Rm91bmQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVUeXBlTm90Rm91bmQsCiAgICAgIG1lc3NhZ2U6ICIiIlR5cGUgJyR7bmFtZX0nIG5vdCBmb3VuZC4iIiIsIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+IHRlbXBsYXRlVHlwZU9yaWdpbiA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIicjbmFtZScgaXMgZnJvbSAnI3VyaScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzVHlwZU9yaWdpbik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfKT4gY29kZVR5cGVPcmlnaW4gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+KAogICJUeXBlT3JpZ2luIiwKICB0ZW1wbGF0ZVR5cGVPcmlnaW4sCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzVHlwZU9yaWdpbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8pIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVUeXBlT3JpZ2luLAogICAgICBtZXNzYWdlOiAiIiInJHtuYW1lfScgaXMgZnJvbSAnJHt1cml9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ3VyaSc6IHVyaV99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+CiAgICB0ZW1wbGF0ZVR5cGVPcmlnaW5XaXRoRmlsZVVyaSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiJyNuYW1lJyBpcyBmcm9tICcjdXJpJyAoJyN1cmkyJykuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzVHlwZU9yaWdpbldpdGhGaWxlVXJpKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+CiAgICBjb2RlVHlwZU9yaWdpbldpdGhGaWxlVXJpID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+KAogICJUeXBlT3JpZ2luV2l0aEZpbGVVcmkiLAogIHRlbXBsYXRlVHlwZU9yaWdpbldpdGhGaWxlVXJpLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1R5cGVPcmlnaW5XaXRoRmlsZVVyaShTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXykgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBTdHJpbmcgdXJpID0gcmVsYXRpdml6ZVVyaSh1cmlfKTsKICBTdHJpbmcgdXJpMiA9IHJlbGF0aXZpemVVcmkodXJpMl8pOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlVHlwZU9yaWdpbldpdGhGaWxlVXJpLAogICAgICBtZXNzYWdlOiAiIiInJHtuYW1lfScgaXMgZnJvbSAnJHt1cml9JyAoJyR7dXJpMn0nKS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ3VyaSc6IHVyaV8sICd1cmkyJzogdXJpMl99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlVHlwZVZhcmlhYmxlRHVwbGljYXRlZE5hbWUgPQogICAgbWVzc2FnZVR5cGVWYXJpYWJsZUR1cGxpY2F0ZWROYW1lOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVR5cGVWYXJpYWJsZUR1cGxpY2F0ZWROYW1lID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiVHlwZVZhcmlhYmxlRHVwbGljYXRlZE5hbWUiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkRVUExJQ0FURV9ERUZJTklUSU9OIl0sCiAgICBtZXNzYWdlOiByIiIiQSB0eXBlIHZhcmlhYmxlIGNhbid0IGhhdmUgdGhlIHNhbWUgbmFtZSBhcyBhbm90aGVyLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlVHlwZVZhcmlhYmxlRHVwbGljYXRlZE5hbWVDYXVzZSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiVGhlIG90aGVyIHR5cGUgdmFyaWFibGUgbmFtZWQgJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNUeXBlVmFyaWFibGVEdXBsaWNhdGVkTmFtZUNhdXNlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVUeXBlVmFyaWFibGVEdXBsaWNhdGVkTmFtZUNhdXNlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KCJUeXBlVmFyaWFibGVEdXBsaWNhdGVkTmFtZUNhdXNlIiwKICAgICAgICB0ZW1wbGF0ZVR5cGVWYXJpYWJsZUR1cGxpY2F0ZWROYW1lQ2F1c2UsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1R5cGVWYXJpYWJsZUR1cGxpY2F0ZWROYW1lQ2F1c2UoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVUeXBlVmFyaWFibGVEdXBsaWNhdGVkTmFtZUNhdXNlLAogICAgICBtZXNzYWdlOiAiIiJUaGUgb3RoZXIgdHlwZSB2YXJpYWJsZSBuYW1lZCAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlVHlwZVZhcmlhYmxlSW5Db25zdGFudENvbnRleHQgPQogICAgbWVzc2FnZVR5cGVWYXJpYWJsZUluQ29uc3RhbnRDb250ZXh0OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVR5cGVWYXJpYWJsZUluQ29uc3RhbnRDb250ZXh0ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiVHlwZVZhcmlhYmxlSW5Db25zdGFudENvbnRleHQiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlRZUEVfUEFSQU1FVEVSX0lOX0NPTlNUX0VYUFJFU1NJT04iXSwKICAgIG1lc3NhZ2U6IHIiIiJUeXBlIHZhcmlhYmxlcyBjYW4ndCBiZSB1c2VkIGFzIGNvbnN0YW50cy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlVHlwZVZhcmlhYmxlSW5TdGF0aWNDb250ZXh0ID0KICAgIG1lc3NhZ2VUeXBlVmFyaWFibGVJblN0YXRpY0NvbnRleHQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlVHlwZVZhcmlhYmxlSW5TdGF0aWNDb250ZXh0ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiVHlwZVZhcmlhYmxlSW5TdGF0aWNDb250ZXh0IiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJUWVBFX1BBUkFNRVRFUl9SRUZFUkVOQ0VEX0JZX1NUQVRJQyJdLAogICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZywKICAgIG1lc3NhZ2U6IHIiIiJUeXBlIHZhcmlhYmxlcyBjYW4ndCBiZSB1c2VkIGluIHN0YXRpYyBtZW1iZXJzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVUeXBlVmFyaWFibGVTYW1lTmFtZUFzRW5jbG9zaW5nID0KICAgIG1lc3NhZ2VUeXBlVmFyaWFibGVTYW1lTmFtZUFzRW5jbG9zaW5nOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVR5cGVWYXJpYWJsZVNhbWVOYW1lQXNFbmNsb3NpbmcgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJUeXBlVmFyaWFibGVTYW1lTmFtZUFzRW5jbG9zaW5nIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05GTElDVElOR19UWVBFX1ZBUklBQkxFX0FORF9DTEFTUyJdLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQSB0eXBlIHZhcmlhYmxlIGNhbid0IGhhdmUgdGhlIHNhbWUgbmFtZSBhcyBpdHMgZW5jbG9zaW5nIGRlY2xhcmF0aW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVUeXBlZGVmSW5DbGFzcyA9IG1lc3NhZ2VUeXBlZGVmSW5DbGFzczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VUeXBlZGVmSW5DbGFzcyA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJUeXBlZGVmSW5DbGFzcyIsCiAgICBpbmRleDogNywKICAgIG1lc3NhZ2U6IHIiIiJUeXBlZGVmcyBjYW4ndCBiZSBkZWNsYXJlZCBpbnNpZGUgY2xhc3Nlcy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgbW92aW5nIHRoZSB0eXBlZGVmIHRvIHRoZSB0b3AtbGV2ZWwuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVR5cGVkZWZOb3RGdW5jdGlvbiA9IG1lc3NhZ2VUeXBlZGVmTm90RnVuY3Rpb247CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlVHlwZWRlZk5vdEZ1bmN0aW9uID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiVHlwZWRlZk5vdEZ1bmN0aW9uIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlZBTElEX0dFTkVSSUNfRlVOQ1RJT05fVFlQRSJdLAogICAgbWVzc2FnZTogciIiIkNhbid0IGNyZWF0ZSB0eXBlZGVmIGZyb20gbm9uLWZ1bmN0aW9uIHR5cGUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBEYXJ0VHlwZQogICAgICAgICAgICBfdHlwZSk+IHRlbXBsYXRlVW5kZWZpbmVkR2V0dGVyID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIGdldHRlciAnI25hbWUnIGlzbid0IGRlZmluZWQgZm9yIHRoZSBjbGFzcyAnI3R5cGUnLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgY29ycmVjdGluZyB0aGUgbmFtZSB0byB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBnZXR0ZXIsIG9yIGRlZmluaW5nIGEgZ2V0dGVyIG9yIGZpZWxkIG5hbWVkICcjbmFtZScuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNVbmRlZmluZWRHZXR0ZXIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSk+IGNvZGVVbmRlZmluZWRHZXR0ZXIgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSk+KAogICAgICAgICJVbmRlZmluZWRHZXR0ZXIiLCB0ZW1wbGF0ZVVuZGVmaW5lZEdldHRlciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVU5ERUZJTkVEX0dFVFRFUiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNVbmRlZmluZWRHZXR0ZXIoU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVVuZGVmaW5lZEdldHRlciwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBnZXR0ZXIgJyR7bmFtZX0nIGlzbid0IGRlZmluZWQgZm9yIHRoZSBjbGFzcyAnJHt0eXBlfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6CiAgICAgICAgICAiIiJUcnkgY29ycmVjdGluZyB0aGUgbmFtZSB0byB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBnZXR0ZXIsIG9yIGRlZmluaW5nIGEgZ2V0dGVyIG9yIGZpZWxkIG5hbWVkICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ3R5cGUnOiBfdHlwZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUpPiB0ZW1wbGF0ZVVuZGVmaW5lZE1ldGhvZCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBtZXRob2QgJyNuYW1lJyBpc24ndCBkZWZpbmVkIGZvciB0aGUgY2xhc3MgJyN0eXBlJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IGNvcnJlY3RpbmcgdGhlIG5hbWUgdG8gdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgbWV0aG9kLCBvciBkZWZpbmluZyBhIG1ldGhvZCBuYW1lZCAnI25hbWUnLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzVW5kZWZpbmVkTWV0aG9kKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUpPiBjb2RlVW5kZWZpbmVkTWV0aG9kID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUpPigKICAgICAgICAiVW5kZWZpbmVkTWV0aG9kIiwgdGVtcGxhdGVVbmRlZmluZWRNZXRob2QsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlVOREVGSU5FRF9NRVRIT0QiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzVW5kZWZpbmVkTWV0aG9kKFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVVbmRlZmluZWRNZXRob2QsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgbWV0aG9kICcke25hbWV9JyBpc24ndCBkZWZpbmVkIGZvciB0aGUgY2xhc3MgJyR7dHlwZX0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgdGlwOgogICAgICAgICAgIiIiVHJ5IGNvcnJlY3RpbmcgdGhlIG5hbWUgdG8gdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgbWV0aG9kLCBvciBkZWZpbmluZyBhIG1ldGhvZCBuYW1lZCAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICd0eXBlJzogX3R5cGV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlKT4gdGVtcGxhdGVVbmRlZmluZWRTZXR0ZXIgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgc2V0dGVyICcjbmFtZScgaXNuJ3QgZGVmaW5lZCBmb3IgdGhlIGNsYXNzICcjdHlwZScuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBjb3JyZWN0aW5nIHRoZSBuYW1lIHRvIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIHNldHRlciwgb3IgZGVmaW5pbmcgYSBzZXR0ZXIgb3IgZmllbGQgbmFtZWQgJyNuYW1lJy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1VuZGVmaW5lZFNldHRlcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlKT4gY29kZVVuZGVmaW5lZFNldHRlciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlKT4oCiAgICAgICAgIlVuZGVmaW5lZFNldHRlciIsIHRlbXBsYXRlVW5kZWZpbmVkU2V0dGVyLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJVTkRFRklORURfU0VUVEVSIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1VuZGVmaW5lZFNldHRlcihTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlVW5kZWZpbmVkU2V0dGVyLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIHNldHRlciAnJHtuYW1lfScgaXNuJ3QgZGVmaW5lZCBmb3IgdGhlIGNsYXNzICcke3R5cGV9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIHRpcDoKICAgICAgICAgICIiIlRyeSBjb3JyZWN0aW5nIHRoZSBuYW1lIHRvIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIHNldHRlciwgb3IgZGVmaW5pbmcgYSBzZXR0ZXIgb3IgZmllbGQgbmFtZWQgJyR7bmFtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAndHlwZSc6IF90eXBlfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVVuZXhwZWN0ZWREb2xsYXJJblN0cmluZyA9IG1lc3NhZ2VVbmV4cGVjdGVkRG9sbGFySW5TdHJpbmc7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlVW5leHBlY3RlZERvbGxhckluU3RyaW5nID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiVW5leHBlY3RlZERvbGxhckluU3RyaW5nIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJVTkVYUEVDVEVEX0RPTExBUl9JTl9TVFJJTkciXSwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIkEgJyQnIGhhcyBzcGVjaWFsIG1lYW5pbmcgaW5zaWRlIGEgc3RyaW5nLCBhbmQgbXVzdCBiZSBmb2xsb3dlZCBieSBhbiBpZGVudGlmaWVyIG9yIGFuIGV4cHJlc3Npb24gaW4gY3VybHkgYnJhY2VzICh7fSkuIiIiLAogICAgdGlwOiByIiIiVHJ5IGFkZGluZyBhIGJhY2tzbGFzaCAoXCkgdG8gZXNjYXBlIHRoZSAnJCcuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiB0ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbiA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiVW5leHBlY3RlZCB0b2tlbiAnI2xleGVtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzVW5leHBlY3RlZFRva2VuKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+IGNvZGVVbmV4cGVjdGVkVG9rZW4gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgIlVuZXhwZWN0ZWRUb2tlbiIsIHRlbXBsYXRlVW5leHBlY3RlZFRva2VuLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJVTkVYUEVDVEVEX1RPS0VOIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1VuZXhwZWN0ZWRUb2tlbihUb2tlbiB0b2tlbikgewogIFN0cmluZyBsZXhlbWUgPSB0b2tlbi5sZXhlbWU7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVVbmV4cGVjdGVkVG9rZW4sCiAgICAgIG1lc3NhZ2U6ICIiIlVuZXhwZWN0ZWQgdG9rZW4gJyR7bGV4ZW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsndG9rZW4nOiB0b2tlbn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFRva2VuIHRva2VuKT4KICAgIHRlbXBsYXRlVW5tYXRjaGVkVG9rZW4gPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBUb2tlbiB0b2tlbik+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkNhbid0IGZpbmQgJyNzdHJpbmcnIHRvIG1hdGNoICcjbGV4ZW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNVbm1hdGNoZWRUb2tlbik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgVG9rZW4gdG9rZW4pPiBjb2RlVW5tYXRjaGVkVG9rZW4gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFRva2VuIHRva2VuKT4oCiAgICAgICAgIlVubWF0Y2hlZFRva2VuIiwgdGVtcGxhdGVVbm1hdGNoZWRUb2tlbiwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRVhQRUNURURfVE9LRU4iXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzVW5tYXRjaGVkVG9rZW4oU3RyaW5nIHN0cmluZywgVG9rZW4gdG9rZW4pIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIFN0cmluZyBsZXhlbWUgPSB0b2tlbi5sZXhlbWU7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVVbm1hdGNoZWRUb2tlbiwKICAgICAgbWVzc2FnZTogIiIiQ2FuJ3QgZmluZCAnJHtzdHJpbmd9JyB0byBtYXRjaCAnJHtsZXhlbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmcsICd0b2tlbic6IHRva2VufSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZTIpPiB0ZW1wbGF0ZVVucmVzb2x2ZWRQcmVmaXhJblR5cGVBbm5vdGF0aW9uID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIicjbmFtZS4jbmFtZTInIGNhbid0IGJlIHVzZWQgYXMgYSB0eXBlIGJlY2F1c2UgJyNuYW1lJyBpc24ndCBkZWZpbmVkLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzVW5yZXNvbHZlZFByZWZpeEluVHlwZUFubm90YXRpb24pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPgogICAgY29kZVVucmVzb2x2ZWRQcmVmaXhJblR5cGVBbm5vdGF0aW9uID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICAgICAgIlVucmVzb2x2ZWRQcmVmaXhJblR5cGVBbm5vdGF0aW9uIiwKICAgICAgICB0ZW1wbGF0ZVVucmVzb2x2ZWRQcmVmaXhJblR5cGVBbm5vdGF0aW9uLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJOT1RfQV9UWVBFIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzVW5yZXNvbHZlZFByZWZpeEluVHlwZUFubm90YXRpb24oCiAgICBTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIGlmIChuYW1lMi5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTIgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUyKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVVucmVzb2x2ZWRQcmVmaXhJblR5cGVBbm5vdGF0aW9uLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiJyR7bmFtZX0uJHtuYW1lMn0nIGNhbid0IGJlIHVzZWQgYXMgYSB0eXBlIGJlY2F1c2UgJyR7bmFtZX0nIGlzbid0IGRlZmluZWQuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICduYW1lMic6IG5hbWUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+IHRlbXBsYXRlVW5zcGVjaWZpZWQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiI3N0cmluZyIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1Vuc3BlY2lmaWVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4gY29kZVVuc3BlY2lmaWVkID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgIlVuc3BlY2lmaWVkIiwKICB0ZW1wbGF0ZVVuc3BlY2lmaWVkLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1Vuc3BlY2lmaWVkKFN0cmluZyBzdHJpbmcpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlVW5zcGVjaWZpZWQsCiAgICAgIG1lc3NhZ2U6ICIiIiR7c3RyaW5nfSIiIiwgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZ30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gdGVtcGxhdGVVbnN1cHBvcnRlZE9wZXJhdG9yID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJUaGUgJyNsZXhlbWUnIG9wZXJhdG9yIGlzIG5vdCBzdXBwb3J0ZWQuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzVW5zdXBwb3J0ZWRPcGVyYXRvcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiBjb2RlVW5zdXBwb3J0ZWRPcGVyYXRvciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAgICAgICAiVW5zdXBwb3J0ZWRPcGVyYXRvciIsIHRlbXBsYXRlVW5zdXBwb3J0ZWRPcGVyYXRvciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVU5TVVBQT1JURURfT1BFUkFUT1IiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzVW5zdXBwb3J0ZWRPcGVyYXRvcihUb2tlbiB0b2tlbikgewogIFN0cmluZyBsZXhlbWUgPSB0b2tlbi5sZXhlbWU7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVVbnN1cHBvcnRlZE9wZXJhdG9yLAogICAgICBtZXNzYWdlOiAiIiJUaGUgJyR7bGV4ZW1lfScgb3BlcmF0b3IgaXMgbm90IHN1cHBvcnRlZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0b2tlbic6IHRva2VufSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVVuc3VwcG9ydGVkUHJlZml4UGx1cyA9IG1lc3NhZ2VVbnN1cHBvcnRlZFByZWZpeFBsdXM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlVW5zdXBwb3J0ZWRQcmVmaXhQbHVzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiVW5zdXBwb3J0ZWRQcmVmaXhQbHVzIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJNSVNTSU5HX0lERU5USUZJRVIiXSwKICAgIG1lc3NhZ2U6IHIiIiInKycgaXMgbm90IGEgcHJlZml4IG9wZXJhdG9yLiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyAnKycuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVVudGVybWluYXRlZENvbW1lbnQgPSBtZXNzYWdlVW50ZXJtaW5hdGVkQ29tbWVudDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VVbnRlcm1pbmF0ZWRDb21tZW50ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiVW50ZXJtaW5hdGVkQ29tbWVudCIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVU5URVJNSU5BVEVEX01VTFRJX0xJTkVfQ09NTUVOVCJdLAogICAgbWVzc2FnZTogciIiIkNvbW1lbnQgc3RhcnRpbmcgd2l0aCAnLyonIG11c3QgZW5kIHdpdGggJyovJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+CiAgICB0ZW1wbGF0ZVVudGVybWluYXRlZFN0cmluZyA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiU3RyaW5nIHN0YXJ0aW5nIHdpdGggI3N0cmluZyBtdXN0IGVuZCB3aXRoICNzdHJpbmcyLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1VudGVybWluYXRlZFN0cmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPgogICAgY29kZVVudGVybWluYXRlZFN0cmluZyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPigKICAgICAgICAiVW50ZXJtaW5hdGVkU3RyaW5nIiwgdGVtcGxhdGVVbnRlcm1pbmF0ZWRTdHJpbmcsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlVOVEVSTUlOQVRFRF9TVFJJTkdfTElURVJBTCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNVbnRlcm1pbmF0ZWRTdHJpbmcoU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIGlmIChzdHJpbmcyLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlVW50ZXJtaW5hdGVkU3RyaW5nLAogICAgICBtZXNzYWdlOiAiIiJTdHJpbmcgc3RhcnRpbmcgd2l0aCAke3N0cmluZ30gbXVzdCBlbmQgd2l0aCAke3N0cmluZzJ9LiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZywgJ3N0cmluZzInOiBzdHJpbmcyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVVudGVybWluYXRlZFRva2VuID0gbWVzc2FnZVVudGVybWluYXRlZFRva2VuOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVVudGVybWluYXRlZFRva2VuID0KICAgIGNvbnN0IE1lc3NhZ2VDb2RlKCJVbnRlcm1pbmF0ZWRUb2tlbiIsIG1lc3NhZ2U6IHIiIiJJbmNvbXBsZXRlIHRva2VuLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4gdGVtcGxhdGVVbnRyYW5zbGF0YWJsZVVyaSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiTm90IGZvdW5kOiAnI3VyaSciIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNVbnRyYW5zbGF0YWJsZVVyaSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPiBjb2RlVW50cmFuc2xhdGFibGVVcmkgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4oCiAgICAgICAgIlVudHJhbnNsYXRhYmxlVXJpIiwgdGVtcGxhdGVVbnRyYW5zbGF0YWJsZVVyaSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVVJJX0RPRVNfTk9UX0VYSVNUIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1VudHJhbnNsYXRhYmxlVXJpKFVyaSB1cmlfKSB7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVVbnRyYW5zbGF0YWJsZVVyaSwKICAgICAgbWVzc2FnZTogIiIiTm90IGZvdW5kOiAnJHt1cml9JyIiIiwgYXJndW1lbnRzOiB7J3VyaSc6IHVyaV99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZVVzZU9mRGVwcmVjYXRlZElkZW50aWZpZXIgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIicjbmFtZScgaXMgZGVwcmVjYXRlZC4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNVc2VPZkRlcHJlY2F0ZWRJZGVudGlmaWVyKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVVc2VPZkRlcHJlY2F0ZWRJZGVudGlmaWVyID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJVc2VPZkRlcHJlY2F0ZWRJZGVudGlmaWVyIiwgdGVtcGxhdGVVc2VPZkRlcHJlY2F0ZWRJZGVudGlmaWVyLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pZ25vcmVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNVc2VPZkRlcHJlY2F0ZWRJZGVudGlmaWVyKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlVXNlT2ZEZXByZWNhdGVkSWRlbnRpZmllciwKICAgICAgbWVzc2FnZTogIiIiJyR7bmFtZX0nIGlzIGRlcHJlY2F0ZWQuIiIiLCBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlVmFyQXNUeXBlTmFtZSA9IG1lc3NhZ2VWYXJBc1R5cGVOYW1lOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVZhckFzVHlwZU5hbWUgPSBjb25zdCBNZXNzYWdlQ29kZSgiVmFyQXNUeXBlTmFtZSIsCiAgICBpbmRleDogNjEsIG1lc3NhZ2U6IHIiIiJUaGUga2V5d29yZCAndmFyJyBjYW4ndCBiZSB1c2VkIGFzIGEgdHlwZSBuYW1lLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVWYXJSZXR1cm5UeXBlID0gbWVzc2FnZVZhclJldHVyblR5cGU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlVmFyUmV0dXJuVHlwZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJWYXJSZXR1cm5UeXBlIiwKICAgIGluZGV4OiAxMiwKICAgIG1lc3NhZ2U6IHIiIiJUaGUgcmV0dXJuIHR5cGUgY2FuJ3QgYmUgJ3ZhcicuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgcmVtb3ZpbmcgdGhlIGtleXdvcmQgJ3ZhcicsIG9yIHJlcGxhY2luZyBpdCB3aXRoIHRoZSBuYW1lIG9mIHRoZSByZXR1cm4gdHlwZS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlVm9pZEV4cHJlc3Npb24gPSBtZXNzYWdlVm9pZEV4cHJlc3Npb247CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlVm9pZEV4cHJlc3Npb24gPSBjb25zdCBNZXNzYWdlQ29kZSgiVm9pZEV4cHJlc3Npb24iLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlVTRV9PRl9WT0lEX1JFU1VMVCJdLAogICAgbWVzc2FnZTogciIiIlRoaXMgZXhwcmVzc2lvbiBoYXMgdHlwZSAndm9pZCcgYW5kIGNhbid0IGJlIHVzZWQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcgc3RyaW5nLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBzdHJpbmcyKT4gdGVtcGxhdGVXZWJMaXRlcmFsQ2Fubm90QmVSZXByZXNlbnRlZEV4YWN0bHkgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBpbnRlZ2VyIGxpdGVyYWwgI3N0cmluZyBjYW4ndCBiZSByZXByZXNlbnRlZCBleGFjdGx5IGluIEphdmFTY3JpcHQuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBjaGFuZ2luZyB0aGUgbGl0ZXJhbCB0byBzb21ldGhpbmcgdGhhdCBjYW4gYmUgcmVwcmVzZW50ZWQgaW4gSmF2YXNjcmlwdC4gSW4gSmF2YXNjcmlwdCAjc3RyaW5nMiBpcyB0aGUgbmVhcmVzdCB2YWx1ZSB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBleGFjdGx5LiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzV2ViTGl0ZXJhbENhbm5vdEJlUmVwcmVzZW50ZWRFeGFjdGx5KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+CiAgICBjb2RlV2ViTGl0ZXJhbENhbm5vdEJlUmVwcmVzZW50ZWRFeGFjdGx5ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+KAogICJXZWJMaXRlcmFsQ2Fubm90QmVSZXByZXNlbnRlZEV4YWN0bHkiLAogIHRlbXBsYXRlV2ViTGl0ZXJhbENhbm5vdEJlUmVwcmVzZW50ZWRFeGFjdGx5LAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1dlYkxpdGVyYWxDYW5ub3RCZVJlcHJlc2VudGVkRXhhY3RseSgKICAgIFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICBpZiAoc3RyaW5nMi5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVdlYkxpdGVyYWxDYW5ub3RCZVJlcHJlc2VudGVkRXhhY3RseSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBpbnRlZ2VyIGxpdGVyYWwgJHtzdHJpbmd9IGNhbid0IGJlIHJlcHJlc2VudGVkIGV4YWN0bHkgaW4gSmF2YVNjcmlwdC4iIiIsCiAgICAgIHRpcDogIiIiVHJ5IGNoYW5naW5nIHRoZSBsaXRlcmFsIHRvIHNvbWV0aGluZyB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBpbiBKYXZhc2NyaXB0LiBJbiBKYXZhc2NyaXB0ICR7c3RyaW5nMn0gaXMgdGhlIG5lYXJlc3QgdmFsdWUgdGhhdCBjYW4gYmUgcmVwcmVzZW50ZWQgZXhhY3RseS4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmcsICdzdHJpbmcyJzogc3RyaW5nMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVXaXRoQmVmb3JlRXh0ZW5kcyA9IG1lc3NhZ2VXaXRoQmVmb3JlRXh0ZW5kczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VXaXRoQmVmb3JlRXh0ZW5kcyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIldpdGhCZWZvcmVFeHRlbmRzIiwKICAgIGluZGV4OiAxMSwKICAgIG1lc3NhZ2U6IHIiIiJUaGUgZXh0ZW5kcyBjbGF1c2UgbXVzdCBiZSBiZWZvcmUgdGhlIHdpdGggY2xhdXNlLiIiIiwKICAgIHRpcDogciIiIlRyeSBtb3ZpbmcgdGhlIGV4dGVuZHMgY2xhdXNlIGJlZm9yZSB0aGUgd2l0aCBjbGF1c2UuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVlpZWxkQXNJZGVudGlmaWVyID0gbWVzc2FnZVlpZWxkQXNJZGVudGlmaWVyOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVlpZWxkQXNJZGVudGlmaWVyID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiWWllbGRBc0lkZW50aWZpZXIiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkFTWU5DX0tFWVdPUkRfVVNFRF9BU19JREVOVElGSUVSIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiIneWllbGQnIGNhbid0IGJlIHVzZWQgYXMgYW4g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cHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnNldmVyaXR5OwoKZW51bSBTZXZlcml0eSB7CiAgY29udGV4dCwKICBlcnJvciwKICBlcnJvckxlZ2FjeVdhcm5pbmcsCiAgaWdub3JlZCwKICBpbnRlcm5hbFByb2JsZW0sCiAgd2FybmluZywKfQoKY29uc3QgTWFwPFN0cmluZywgU3RyaW5nPiBzZXZlcml0eUVudW1OYW1lcyA9IGNvbnN0IDxTdHJpbmcsIFN0cmluZz57CiAgJ0NPTlRFWFQnOiAnY29udGV4dCcsCiAgJ0VSUk9SJzogJ2Vycm9yJywKICAnRVJST1JfTEVHQUNZX1dBUk5JTkcnOiAnZXJyb3JMZWdhY3lXYXJuaW5nJywKICAnSUdOT1JFRCc6ICdpZ25vcmVkJywKICAnSU5URVJOQUxfUFJPQkxFTSc6ICdpbnRlcm5hbFByb2JsZW0nLAogICdXQVJOSU5HJzogJ3dhcm5pbmcnLAp9OwoKY29uc3QgTWFwPFN0cmluZywgU2V2ZXJpdHk+IHNldmVyaXR5RW51bVZhbHVlcyA9IGNvbnN0IDxTdHJpbmcsIFNldmVyaXR5PnsKICAnQ09OVEVYVCc6IFNldmVyaXR5LmNvbnRleHQsCiAgJ0VSUk9SJzogU2V2ZXJpdHkuZXJyb3IsCiAgJ0VSUk9SX0xFR0FDWV9XQVJOSU5HJzogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nLAogICdJR05PUkVEJzogU2V2ZXJpdHkuaWdub3JlZCwKICAnSU5URVJOQUxfUFJPQkxFTSc6IFNldmVyaXR5LmludGVybmFsUHJvYmxlbSwKICAnV0FSTklORyc6IFNldmVyaXR5Lndhcm5pbmcsCn07Cgpjb25zdCBNYXA8U2V2ZXJpdHksIFN0cmluZz4gc2V2ZXJpdHlQcmVmaXhlcyA9IGNvbnN0IDxTZXZlcml0eSwgU3RyaW5nPnsKICBTZXZlcml0eS5lcnJvcjogIkVycm9yIiwKICBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW06ICJJbnRlcm5hbCBwcm9ibGVtIiwKICBTZXZlcml0eS53YXJuaW5nOiAiV2FybmluZyIsCiAgU2V2ZXJpdHkuY29udGV4dDogIkNvbnRleHQiLAp9OwoKY29uc3QgTWFwPFNldmVyaXR5LCBTdHJpbmc+IHNldmVyaXR5VGV4dHMgPSBjb25zdCA8U2V2ZXJpdHksIFN0cmluZz57CiAgU2V2ZXJpdHkuZXJyb3I6ICJlcnJvciIsCiAgU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtOiAiaW50ZXJuYWwgcHJvYmxlbSIsCiAgU2V2ZXJpdHkud2FybmluZzogIndhcm5pbmciLAogIFNldmVyaXR5LmNvbnRleHQ6ICJjb250ZXh0IiwKfTsKMABOTjwBGAEQCwkWCxMLAgFGGBQwGCkYAwFLHxs3HzAfAwFJGzAfHwMBRhswHx8DASlwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2V2ZXJpdHkuZGFydDlzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMva2VybmVsX2dlbmVyYXRvcl9pbXBsLmRhcnSfbC8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gRGVmaW5lcyB0aGUgZnJvbnQtZW5kIEFQSSBmb3IgY29udmVydGluZyBzb3VyY2UgY29kZSB0byBEYXJ0IEtlcm5lbCBvYmplY3RzLgpsaWJyYXJ5IGZyb250X2VuZC5rZXJuZWxfZ2VuZXJhdG9yX2ltcGw7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnIHNob3cgRnV0dXJlOwoKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF9hcGkuZGFydCc7CmltcG9ydCAncGFja2FnZTprZXJuZWwva2VybmVsLmRhcnQnIHNob3cgQ29tcG9uZW50LCBDYW5vbmljYWxOYW1lOwoKaW1wb3J0ICdiYXNlL3Byb2Nlc3NlZF9vcHRpb25zLmRhcnQnIHNob3cgUHJvY2Vzc2VkT3B0aW9uczsKCmltcG9ydCAnZmFzdGEvY29tcGlsZXJfY29udGV4dC5kYXJ0JyBzaG93IENvbXBpbGVyQ29udGV4dDsKCmltcG9ydCAnZmFzdGEvY3Jhc2guZGFydCcgc2hvdyB3aXRoQ3Jhc2hSZXBvcnRpbmc7CgppbXBvcnQgJ2Zhc3RhL2RpbGwvZGlsbF90YXJnZXQuZGFydCcgc2hvdyBEaWxsVGFyZ2V0OwoKaW1wb3J0ICdmYXN0YS9mYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IExvY2F0ZWRNZXNzYWdlOwoKaW1wb3J0ICdmYXN0YS9rZXJuZWwva2VybmVsX3RhcmdldC5kYXJ0JyBzaG93IEtlcm5lbFRhcmdldDsKCmltcG9ydCAnZmFzdGEva2VybmVsL3V0aWxzLmRhcnQnIHNob3cgcHJpbnRDb21wb25lbnRUZXh0LCBzZXJpYWxpemVDb21wb25lbnQ7CgppbXBvcnQgJ2Zhc3RhL2tlcm5lbC92ZXJpZmllci5kYXJ0JyBzaG93IHZlcmlmeUNvbXBvbmVudDsKCmltcG9ydCAnZmFzdGEvbG9hZGVyLmRhcnQnIHNob3cgTG9hZGVyOwoKaW1wb3J0ICdmYXN0YS9zZXZlcml0eS5kYXJ0JyBzaG93IFNldmVyaXR5OwoKaW1wb3J0ICdmYXN0YS91cmlfdHJhbnNsYXRvci5kYXJ0JyBzaG93IFVyaVRyYW5zbGF0b3I7CgppbXBvcnQgJ2FwaV9wcm90b3R5cGUvZnJvbnRfZW5kLmRhcnQnIHNob3cgQ29tcGlsZXJSZXN1bHQ7CgppbXBvcnQgJ2FwaV9wcm90b3R5cGUvZmlsZV9zeXN0ZW0uZGFydCcgc2hvdyBGaWxlU3lzdGVtOwoKLy8vIEltcGxlbWVudGF0aW9uIGZvciB0aGUKLy8vIGBwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9rZXJuZWxfZ2VuZXJhdG9yLmRhcnRgIGFuZAovLy8gYHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfcHJvdG90eXBlL3N1bW1hcnlfZ2VuZXJhdG9yLmRhcnRgIEFQSXMuCkZ1dHVyZTxDb21waWxlclJlc3VsdD4gZ2VuZXJhdGVLZXJuZWwoUHJvY2Vzc2VkT3B0aW9ucyBvcHRpb25zLAogICAge2Jvb2wgYnVpbGRTdW1tYXJ5OiBmYWxzZSwKICAgIGJvb2wgYnVpbGRDb21wb25lbnQ6IHRydWUsCiAgICBib29sIHRydW5jYXRlU3VtbWFyeTogZmFsc2UsCiAgICBib29sIGluY2x1ZGVPZmZzZXRzOiB0cnVlLAogICAgYm9vbCBpbmNsdWRlSGllcmFyY2h5QW5kQ29yZVR5cGVzOiBmYWxzZX0pIGFzeW5jIHsKICByZXR1cm4gYXdhaXQgQ29tcGlsZXJDb250ZXh0LnJ1bldpdGhPcHRpb25zKG9wdGlvbnMsIChfKSBhc3luYyB7CiAgICByZXR1cm4gYXdhaXQgZ2VuZXJhdGVLZXJuZWxJbnRlcm5hbCgKICAgICAgICBidWlsZFN1bW1hcnk6IGJ1aWxkU3VtbWFyeSwKICAgICAgICBidWlsZENvbXBvbmVudDogYnVpbGRDb21wb25lbnQsCiAgICAgICAgdHJ1bmNhdGVTdW1tYXJ5OiB0cnVuY2F0ZVN1bW1hcnksCiAgICAgICAgaW5jbHVkZU9mZnNldHM6IGluY2x1ZGVPZmZzZXRzLAogICAgICAgIGluY2x1ZGVIaWVyYXJjaHlBbmRDb3JlVHlwZXM6IGluY2x1ZGVIaWVyYXJjaHlBbmRDb3JlVHlwZXMpOwogIH0pOwp9CgpGdXR1cmU8Q29tcGlsZXJSZXN1bHQ+IGdlbmVyYXRlS2VybmVsSW50ZXJuYWwoCiAgICB7Ym9vbCBidWlsZFN1bW1hcnk6IGZhbHNlLAogICAgYm9vbCBidWlsZENvbXBvbmVudDogdHJ1ZSwKICAgIGJvb2wgdHJ1bmNhdGVTdW1tYXJ5OiBmYWxzZSwKICAgIGJvb2wgaW5jbHVkZU9mZnNldHM6IHRydWUsCiAgICBib29sIHJldGFpbkRhdGFGb3JUZXN0aW5nOiBmYWxzZSwKICAgIGJvb2wgaW5jbHVkZUhpZXJhcmNoeUFuZENvcmVUeXBlczogZmFsc2V9KSBhc3luYyB7CiAgUHJvY2Vzc2VkT3B0aW9ucyBvcHRpb25zID0gQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQub3B0aW9uczsKICBGaWxlU3lzdGVtIGZzID0gb3B0aW9ucy5maWxlU3lzdGVtOwoKICBMb2FkZXIgc291cmNlTG9hZGVyOwogIHJldHVybiB3aXRoQ3Jhc2hSZXBvcnRpbmc8Q29tcGlsZXJSZXN1bHQ+KCgpIGFzeW5jIHsKICAgIFVyaVRyYW5zbGF0b3IgdXJpVHJhbnNsYXRvciA9IGF3YWl0IG9wdGlvbnMuZ2V0VXJpVHJhbnNsYXRvcigpOwoKICAgIERpbGxUYXJnZXQgZGlsbFRhcmdldCA9CiAgICAgICAgbmV3IERpbGxUYXJnZXQob3B0aW9ucy50aWNrZXIsIHVyaVRyYW5zbGF0b3IsIG9wdGlvbnMudGFyZ2V0KTsKCiAgICBTZXQ8VXJpPiBleHRlcm5hbExpYnMoQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgICByZXR1cm4gY29tcG9uZW50LmxpYnJhcmllcwogICAgICAgICAgLndoZXJlKChsaWIpID0+IGxpYi5pc0V4dGVybmFsKQogICAgICAgICAgLm1hcCgobGliKSA9PiBsaWIuaW1wb3J0VXJpKQogICAgICAgICAgLnRvU2V0KCk7CiAgICB9CgogICAgQ29tcG9uZW50IHNka1N1bW1hcnkgPSBhd2FpdCBvcHRpb25zLmxvYWRTZGtTdW1tYXJ5KG51bGwpOwogICAgLy8gQnkgdXNpbmcgdGhlIG5hbWVSb290IG9mIHRoZSB0aGUgc3VtbWFyeSwgd2UgZW5hYmxlIHNoYXJpbmcgdGhlCiAgICAvLyBzZGtTdW1tYXJ5IGJldHdlZW4gbXVsdGlwbGUgaW52b2NhdGlvbnMuCiAgICBDYW5vbmljYWxOYW1lIG5hbWVSb290ID0gc2RrU3VtbWFyeT8ucm9vdCA/PyBuZXcgQ2Fub25pY2FsTmFtZS5yb290KCk7CiAgICBpZiAoc2RrU3VtbWFyeSAhPSBudWxsKSB7CiAgICAgIFNldDxVcmk+IGV4Y2x1ZGVkID0gZXh0ZXJuYWxMaWJzKHNka1N1bW1hcnkpOwogICAgICBkaWxsVGFyZ2V0LmxvYWRlci5hcHBlbmRMaWJyYXJpZXMoc2RrU3VtbWFyeSwKICAgICAgICAgIGZpbHRlcjogKHVyaSkgPT4gIWV4Y2x1ZGVkLmNvbnRhaW5zKHVyaSkpOwogICAgfQoKICAgIC8vIFRPRE8oc2lnbXVuZCk6IHByb3ZpZGUgYmV0dGVyIGVycm9yIHJlcG9ydGluZyBpZiBpbnB1dCBzdW1tYXJpZXMgb3IKICAgIC8vIGxpbmtlZCBkZXBlbmRlbmNpZXMgd2VyZSBsaXN0ZWQgb3V0IG9mIG9yZGVyIChvciBwcm92aWRlIG1lY2hhbmlzbSB0bwogICAgLy8gc29ydCB0aGVtKS4KICAgIGZvciAoQ29tcG9uZW50IGlucHV0U3VtbWFyeSBpbiBhd2FpdCBvcHRpb25zLmxvYWRJbnB1dFN1bW1hcmllcyhuYW1lUm9vdCkpIHsKICAgICAgU2V0PFVyaT4gZXhjbHVkZWQgPSBleHRlcm5hbExpYnMoaW5wdXRTdW1tYXJ5KTsKICAgICAgZGlsbFRhcmdldC5sb2FkZXIuYXBwZW5kTGlicmFyaWVzKGlucHV0U3VtbWFyeSwKICAgICAgICAgIGZpbHRlcjogKHVyaSkgPT4gIWV4Y2x1ZGVkLmNvbnRhaW5zKHVyaSkpOwogICAgfQoKICAgIC8vIEFsbCBzdW1tYXJpZXMgYXJlIGNvbnNpZGVyZWQgZXh0ZXJuYWwgYW5kIHNob3VsZG4ndCBpbmNsdWRlIHNvdXJjZS1pbmZvLgogICAgZGlsbFRhcmdldC5sb2FkZXIubGlicmFyaWVzLmZvckVhY2goKGxpYikgewogICAgICAvLyBUT0RPKGFoZSk6IERvbid0IGRvIHRoaXMsIGFuZCByZW1vdmUgW2V4dGVybmFsX3N0YXRlX3NuYXBzaG90LmRhcnRdLgogICAgICBsaWIuaXNFeHRlcm5hbCA9IHRydWU7CiAgICB9KTsKCiAgICAvLyBMaW5rZWQgZGVwZW5kZW5jaWVzIGFyZSBtZWFudCB0byBiZSBwYXJ0IG9mIHRoZSBjb21wb25lbnQgc28gdGhleSBhcmUgbm90CiAgICAvLyBtYXJrZWQgZXh0ZXJuYWwuCiAgICBmb3IgKENvbXBvbmVudCBkZXBlbmRlbmN5IGluIGF3YWl0IG9wdGlvbnMubG9hZExpbmtEZXBlbmRlbmNpZXMobmFtZVJvb3QpKSB7CiAgICAgIFNldDxVcmk+IGV4Y2x1ZGVkID0gZXh0ZXJuYWxMaWJzKGRlcGVuZGVuY3kpOwogICAgICBkaWxsVGFyZ2V0LmxvYWRlci5hcHBlbmRMaWJyYXJpZXMoZGVwZW5kZW5jeSwKICAgICAgICAgIGZpbHRlcjogKHVyaSkgPT4gIWV4Y2x1ZGVkLmNvbnRhaW5zKHVyaSkpOwogICAgfQoKICAgIGF3YWl0IGRpbGxUYXJnZXQuYnVpbGRPdXRsaW5lcygpOwoKICAgIEtlcm5lbFRhcmdldCBrZXJuZWxUYXJnZXQgPQogICAgICAgIG5ldyBLZXJuZWxUYXJnZXQoZnMsIGZhbHNlLCBkaWxsVGFyZ2V0LCB1cmlUcmFuc2xhdG9yKTsKICAgIHNvdXJjZUxvYWRlciA9IGtlcm5lbFRhcmdldC5sb2FkZXI7CiAgICBrZXJuZWxUYXJnZXQuc2V0RW50cnlQb2ludHMob3B0aW9ucy5pbnB1dHMpOwogICAgQ29tcG9uZW50IHN1bW1hcnlDb21wb25lbnQgPQogICAgICAgIGF3YWl0IGtlcm5lbFRhcmdldC5idWlsZE91dGxpbmVzKG5hbWVSb290OiBuYW1lUm9vdCk7CiAgICBMaXN0PGludD4gc3VtbWFyeSA9IG51bGw7CiAgICBpZiAoYnVpbGRTdW1tYXJ5KSB7CiAgICAgIGlmIChvcHRpb25zLnZlcmlmeSkgewogICAgICAgIGZvciAoTG9jYXRlZE1lc3NhZ2UgZXJyb3IgaW4gdmVyaWZ5Q29tcG9uZW50KHN1bW1hcnlDb21wb25lbnQpKSB7CiAgICAgICAgICBvcHRpb25zLnJlcG9ydChlcnJvciwgU2V2ZXJpdHkuZXJyb3IpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAob3B0aW9ucy5kZWJ1Z0R1bXApIHsKICAgICAgICBwcmludENvbXBvbmVudFRleHQoc3VtbWFyeUNvbXBvbmVudCwKICAgICAgICAgICAgbGlicmFyeUZpbHRlcjoga2VybmVsVGFyZ2V0LmlzU291cmNlTGlicmFyeSk7CiAgICAgIH0KCiAgICAgIC8vIENyZWF0ZSB0aGUgcmVxdWVzdGVkIGNvbXBvbmVudCAoInRydW5jYXRpbmciIG9yIG5vdCkuCiAgICAgIC8vCiAgICAgIC8vIE5vdGU6IHdlIGRvbid0IHBhc3MgdGhlIGxpYnJhcnkgYXJndW1lbnQgdG8gdGhlIGNvbnN0cnVjdG9yIHRvCiAgICAgIC8vIHByZXNlcnZlIHRoZSB0aGUgbGlicmFyaWVzIHBhcmVudCBwb2ludGVyIChpdCBzaG91bGQgY29udGludWUgdG8gcG9pbnQKICAgICAgLy8gdG8gdGhlIGNvbXBvbmVudCB3aXRoaW4gS2VybmVsVGFyZ2V0KS4KICAgICAgQ29tcG9uZW50IHRyaW1tZWRTdW1tYXJ5Q29tcG9uZW50ID0KICAgICAgICAgIG5ldyBDb21wb25lbnQobmFtZVJvb3Q6IHN1bW1hcnlDb21wb25lbnQucm9vdCkKICAgICAgICAgICAgLi5saWJyYXJpZXMuYWRkQWxsKHRydW5jYXRlU3VtbWFyeQogICAgICAgICAgICAgICAgPyBrZXJuZWxUYXJnZXQubG9hZGVyLmxpYnJhcmllcwogICAgICAgICAgICAgICAgOiBzdW1tYXJ5Q29tcG9uZW50LmxpYnJhcmllcyk7CiAgICAgIHRyaW1tZWRTdW1tYXJ5Q29tcG9uZW50Lm1ldGFkYXRhLmFkZEFsbChzdW1tYXJ5Q29tcG9uZW50Lm1ldGFkYXRhKTsKICAgICAgdHJpbW1lZFN1bW1hcnlDb21wb25lbnQudXJpVG9Tb3VyY2UuYWRkQWxsKHN1bW1hcnlDb21wb25lbnQudXJpVG9Tb3VyY2UpOwoKICAgICAgLy8gQXMgZG9jdW1lbnRlZCwgd2Ugb25seSBydW4gb3V0bGluZSB0cmFuc2Zvcm1hdGlvbnMgd2hlbiB3ZSBhcmUgYnVpbGRpbmcKICAgICAgLy8gc3VtbWFyaWVzIHdpdGhvdXQgYnVpbGRpbmcgYSBmdWxsIGNvbXBvbmVudCAoYXQgdGhpcyB0aW1lLCB0aGF0J3MKICAgICAgLy8gdGhlIG9ubHkgbmVlZCB3ZSBoYXZlIGZvciB0aGVzZSB0cmFuc2Zvcm1hdGlvbnMpLgogICAgICBpZiAoIWJ1aWxkQ29tcG9uZW50KSB7CiAgICAgICAgb3B0aW9ucy50YXJnZXQucGVyZm9ybU91dGxpbmVUcmFuc2Zvcm1hdGlvbnModHJpbW1lZFN1bW1hcnlDb21wb25lbnQpOwogICAgICAgIG9wdGlvbnMudGlja2VyLmxvZ01zKCJUcmFuc2Zvcm1lZCBvdXRsaW5lIik7CiAgICAgIH0KICAgICAgLy8gRG9uJ3QgaW5jbHVkZSBzb3VyY2UgKGJ1dCBkbyBhZGQgaXQgYWJvdmUgdG8gaW5jbHVkZSBpbXBvcnRVcmlzKS4KICAgICAgc3VtbWFyeSA9IHNlcmlhbGl6ZUNvbXBvbmVudCh0cmltbWVkU3VtbWFyeUNvbXBvbmVudCwKICAgICAgICAgIGluY2x1ZGVTb3VyY2VzOiBmYWxzZSwgaW5jbHVkZU9mZnNldHM6IGluY2x1ZGVPZmZzZXRzKTsKICAgICAgb3B0aW9ucy50aWNrZXIubG9nTXMoIkdlbmVyYXRlZCBvdXRsaW5lIik7CiAgICB9CgogICAgQ29tcG9uZW50IGNvbXBvbmVudDsKICAgIGlmIChidWlsZENvbXBvbmVudCkgewogICAgICBjb21wb25lbnQgPSBhd2FpdCBrZXJuZWxUYXJnZXQuYnVpbGRDb21wb25lbnQodmVyaWZ5OiBvcHRpb25zLnZlcmlmeSk7CiAgICAgIGlmIChvcHRpb25zLmRlYnVnRHVtcCkgewogICAgICAgIHByaW50Q29tcG9uZW50VGV4dChjb21wb25lbnQsCiAgICAgICAgICAgIGxpYnJhcnlGaWx0ZXI6IGtlcm5lbFRhcmdldC5pc1NvdXJjZUxpYnJhcnkpOwogICAgICB9CiAgICAgIG9wdGlvbnMudGlja2VyLmxvZ01zKCJHZW5lcmF0ZWQgY29tcG9uZW50Iik7CiAgICB9CgogICAgcmV0dXJuIG5ldyBJbnRlcm5hbENvbXBpbGVyUmVzdWx0KAogICAgICAgIHN1bW1hcnk6IHN1bW1hcnksCiAgICAgICAgY29tcG9uZW50OiBjb21wb25lbnQsCiAgICAgICAgY2xhc3NIaWVyYXJjaHk6CiAgICAgICAgICAgIGluY2x1ZGVIaWVyYXJjaHlBbmRDb3JlVHlwZXMgPyBrZXJuZWxUYXJnZXQubG9hZGVyLmhpZXJhcmNoeSA6IG51bGwsCiAgICAgICAgY29yZVR5cGVzOgogICAgICAgICAgICBpbmNsdWRlSGllcmFyY2h5QW5kQ29yZVR5cGVzID8ga2VybmVsVGFyZ2V0LmxvYWRlci5jb3JlVHlwZXMgOiBudWxsLAogICAgICAgIGRlcHM6IG5ldyBMaXN0PFVyaT4uZnJvbShDb21waWxlckNvbnRleHQuY3VycmVudC5kZXBlbmRlbmNpZXMpLAogICAgICAgIGtlcm5lbFRhcmdldEZvclRlc3Rpbmc6IHJldGFpbkRhdGFGb3JUZXN0aW5nID8ga2VybmVsVGFyZ2V0IDogbnVsbCk7CiAgfSwgKCkgPT4gc291cmNlTG9hZGVyPy5jdXJyZW50VXJpRm9yQ3Jhc2hSZXBvcnRpbmcgPz8gb3B0aW9ucy5pbnB1dHMuZmlyc3QpOwp9CgovLy8gUmVzdWx0IG9iamVjdCBvZiBbZ2VuZXJhdGVLZXJuZWxdLgpjbGFzcyBJbnRlcm5hbENvbXBpbGVyUmVzdWx0IGltcGxlbWVudHMgQ29tcGlsZXJSZXN1bHQgewogIC8vLyBUaGUgZ2VuZXJhdGVkIHN1bW1hcnkgYnl0ZXMsIGlmIGl0IHdhcyByZXF1ZXN0ZWQuCiAgZmluYWwgTGlzdDxpbnQ+IHN1bW1hcnk7CgogIC8vLyBUaGUgZ2VuZXJhdGVkIGNvbXBvbmVudCwgaWYgaXQgd2FzIHJlcXVlc3RlZC4KICBmaW5hbCBDb21wb25lbnQgY29tcG9uZW50OwoKICAvLy8gRGVwZW5kZW5jaWVzIHRyYXZlcnNlZCBieSB0aGUgY29tcGlsZXIuIFVzZWQgb25seSBmb3IgZ2VuZXJhdGluZwogIC8vLyBkZXBlbmRlbmN5IC5HTiBmaWxlcyBpbiB0aGUgZGFydC1zZGsgYnVpbGQgc3lzdGVtLgogIC8vLyBOb3RlIHRoaXMgbWlnaHQgYmUgcmVtb3ZlZCB3aGVuIHdlIHN3aXRjaCB0byBjb21wdXRlIGRlcGVuZGVuY2llcyB3aXRob3V0CiAgLy8vIHVzaW5nIHRoZSBjb21waWxlciBpdHNlbGYuCiAgZmluYWwgTGlzdDxVcmk+IGRlcHM7CgogIGZpbmFsIENsYXNzSGllcmFyY2h5IGNsYXNzSGllcmFyY2h5OwoKICBmaW5hbCBDb3JlVHlwZXMgY29yZVR5cGVzOwoKICAvLy8gVGhlIFtLZXJuZWxUYXJnZXRdIHVzZWQgdG8gZ2VuZXJhdGVkIHRoZSBjb21wb25lbnQuCiAgLy8vCiAgLy8vIFRoaXMgaXMgb25seSBwcm92aWRlZCBmb3IgdXNlIGluIHRlc3RpbmcuCiAgZmluYWwgS2VybmVsVGFyZ2V0IGtlcm5lbFRhcmdldEZvclRlc3Rpbmc7CgogIEludGVybmFsQ29tcGlsZXJSZXN1bHQoCiAgICAgIHt0aGlzLnN1bW1hcnksCiAgICAgIHRoaXMuY29tcG9uZW50LAogICAgICB0aGlzLmRlcHMsCiAgICAgIHRoaXMuY2xhc3NIaWVyYXJjaHksCiAgICAgIHRoaXMuY29yZVR5cGVzLAogICAgICB0aGlzLmtlcm5lbFRhcmdldEZvclRlc3Rpbmd9KTsKfQqA1wBOTjwBUSkBIQE9QwE8ATsBMwE2ATUBPAFOAToBKAEsATcBOwE5ARtER0AfHyEfN0MpJCgqKEUGAgEvHx8hHyY3PiYBFzdEARxHATEhKicUBgE/RzBLHjQ0NQYBS00TUTY2NQYBUDBOHQgBURhRNDQ1BgEmASBAKDEhPh4YHEoxCggfLToIAT8JSFAwKjkvMC9KUAFRSzsdTzUISzxCMQYBGRpNHyY6CDMGAScaHhhRE1FITU8CASc5OBsBNB0BRzlQIRgBJwEdAToGMC0BGhUWERsWJQIBMHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9rZXJuZWxfZ2VuZXJhdG9yX2ltcGwuZGFydDFzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvc2Nhbm5lci5kYXJ0jNAvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLm1kIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnNjYW5uZXI7CgppbXBvcnQgJ2RhcnQ6Y29udmVydCcgc2hvdyB1bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXJSdW5lLCB1dGY4OwoKaW1wb3J0ICcuLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJ3NjYW5uZXIvYWJzdHJhY3Rfc2Nhbm5lci5kYXJ0JwogICAgc2hvdyBMYW5ndWFnZVZlcnNpb25DaGFuZ2VkLCBTY2FubmVyQ29uZmlndXJhdGlvbjsKCmltcG9ydCAnc2Nhbm5lci9zdHJpbmdfc2Nhbm5lci5kYXJ0JyBzaG93IFN0cmluZ1NjYW5uZXI7CgppbXBvcnQgJ3NjYW5uZXIvdXRmOF9ieXRlc19zY2FubmVyLmRhcnQnIHNob3cgVXRmOEJ5dGVzU2Nhbm5lcjsKCmltcG9ydCAnc2Nhbm5lci9yZWNvdmVyLmRhcnQnIHNob3cgc2Nhbm5lclJlY292ZXJ5OwoKZXhwb3J0ICdzY2FubmVyL2Fic3RyYWN0X3NjYW5uZXIuZGFydCcKICAgIHNob3cgTGFuZ3VhZ2VWZXJzaW9uQ2hhbmdlZCwgU2Nhbm5lckNvbmZpZ3VyYXRpb247CgpleHBvcnQgJ3NjYW5uZXIvdG9rZW4uZGFydCcKICAgIHNob3cKICAgICAgICBMYW5ndWFnZVZlcnNpb25Ub2tlbiwKICAgICAgICBTdHJpbmdUb2tlbiwKICAgICAgICBpc0JpbmFyeU9wZXJhdG9yLAogICAgICAgIGlzTWludXNPcGVyYXRvciwKICAgICAgICBpc1Rlcm5hcnlPcGVyYXRvciwKICAgICAgICBpc1VuYXJ5T3BlcmF0b3IsCiAgICAgICAgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I7CgpleHBvcnQgJ3NjYW5uZXIvZXJyb3JfdG9rZW4uZGFydCcKICAgIHNob3cgRXJyb3JUb2tlbiwgYnVpbGRVbmV4cGVjdGVkQ2hhcmFjdGVyVG9rZW47CgpleHBvcnQgJ3NjYW5uZXIvdG9rZW4uZGFydCcgc2hvdyBMYW5ndWFnZVZlcnNpb25Ub2tlbjsKCmV4cG9ydCAnc2Nhbm5lci90b2tlbl9jb25zdGFudHMuZGFydCcgc2hvdyBFT0ZfVE9LRU47CgpleHBvcnQgJ3NjYW5uZXIvdXRmOF9ieXRlc19zY2FubmVyLmRhcnQnIHNob3cgVXRmOEJ5dGVzU2Nhbm5lcjsKCmV4cG9ydCAnc2Nhbm5lci9zdHJpbmdfc2Nhbm5lci5kYXJ0JyBzaG93IFN0cmluZ1NjYW5uZXI7CgpleHBvcnQgJy4uL3NjYW5uZXIvdG9rZW4uZGFydCcgc2hvdyBLZXl3b3JkLCBUb2tlbjsKCmNvbnN0IGludCB1bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXIgPSB1bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXJSdW5lOwoKdHlwZWRlZiBUb2tlbiBSZWNvdmVyKExpc3Q8aW50PiBieXRlcywgVG9rZW4gdG9rZW5zLCBMaXN0PGludD4gbGluZVN0YXJ0cyk7CgphYnN0cmFjdCBjbGFzcyBTY2FubmVyIHsKICAvLy8gUmV0dXJucyB0cnVlIGlmIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBbdG9rZW5pemVdLgogIGJvb2wgZ2V0IGhhc0Vycm9yczsKCiAgTGlzdDxpbnQ+IGdldCBsaW5lU3RhcnRzOwoKICAvLy8gQ29uZmlndXJlIHdoaWNoIHRva2VucyBhcmUgcHJvZHVjZWQuCiAgc2V0IGNvbmZpZ3VyYXRpb24oU2Nhbm5lckNvbmZpZ3VyYXRpb24gY29uZmlnKTsKCiAgVG9rZW4gdG9rZW5pemUoKTsKfQoKY2xhc3MgU2Nhbm5lclJlc3VsdCB7CiAgZmluYWwgVG9rZW4gdG9rZW5zOwogIGZpbmFsIExpc3Q8aW50PiBsaW5lU3RhcnRzOwogIGZpbmFsIGJvb2wgaGFzRXJyb3JzOwoKICBTY2FubmVyUmVzdWx0KHRoaXMudG9rZW5zLCB0aGlzLmxpbmVTdGFydHMsIHRoaXMuaGFzRXJyb3JzKTsKfQoKLy8vIFNjYW4vdG9rZW5pemUgdGhlIGdpdmVuIFVURjggW2J5dGVzXS4KU2Nhbm5lclJlc3VsdCBzY2FuKExpc3Q8aW50PiBieXRlcywKICAgIHtTY2FubmVyQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uLAogICAgYm9vbCBpbmNsdWRlQ29tbWVudHM6IGZhbHNlLAogICAgTGFuZ3VhZ2VWZXJzaW9uQ2hhbmdlZCBsYW5ndWFnZVZlcnNpb25DaGFuZ2VkfSkgewogIGlmIChieXRlcy5sYXN0ICE9IDApIHsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJbYnl0ZXNdOiB0aGUgbGFzdCBieXRlIG11c3QgYmUgbnVsbC4iKTsKICB9CiAgU2Nhbm5lciBzY2FubmVyID0gbmV3IFV0ZjhCeXRlc1NjYW5uZXIoYnl0ZXMsCiAgICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZ3VyYXRpb24sCiAgICAgIGluY2x1ZGVDb21tZW50czogaW5jbHVkZUNvbW1lbnRzLAogICAgICBsYW5ndWFnZVZlcnNpb25DaGFuZ2VkOiBsYW5ndWFnZVZlcnNpb25DaGFuZ2VkKTsKICByZXR1cm4gX3Rva2VuaXplQW5kUmVjb3ZlcihzY2FubmVyLCBieXRlczogYnl0ZXMpOwp9CgovLy8gU2Nhbi90b2tlbml6ZSB0aGUgZ2l2ZW4gW3NvdXJjZV0uClNjYW5uZXJSZXN1bHQgc2NhblN0cmluZyhTdHJpbmcgc291cmNlLAogICAge1NjYW5uZXJDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24sCiAgICBib29sIGluY2x1ZGVDb21tZW50czogZmFsc2UsCiAgICBMYW5ndWFnZVZlcnNpb25DaGFuZ2VkIGxhbmd1YWdlVmVyc2lvbkNoYW5nZWR9KSB7CiAgYXNzZXJ0KHNvdXJjZSAhPSBudWxsLCAnc291cmNlIG11c3Qgbm90IGJlIG51bGwnKTsKICBTdHJpbmdTY2FubmVyIHNjYW5uZXIgPSBuZXcgU3RyaW5nU2Nhbm5lcihzb3VyY2UsCiAgICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZ3VyYXRpb24sCiAgICAgIGluY2x1ZGVDb21tZW50czogaW5jbHVkZUNvbW1lbnRzLAogICAgICBsYW5ndWFnZVZlcnNpb25DaGFuZ2VkOiBsYW5ndWFnZVZlcnNpb25DaGFuZ2VkKTsKICByZXR1cm4gX3Rva2VuaXplQW5kUmVjb3ZlcihzY2FubmVyLCBzb3VyY2U6IHNvdXJjZSk7Cn0KClNjYW5uZXJSZXN1bHQgX3Rva2VuaXplQW5kUmVjb3ZlcihTY2FubmVyIHNjYW5uZXIsCiAgICB7TGlzdDxpbnQ+IGJ5dGVzLCBTdHJpbmcgc291cmNlfSkgewogIFRva2VuIHRva2VucyA9IHNjYW5uZXIudG9rZW5pemUoKTsKICBpZiAoc2Nhbm5lci5oYXNFcnJvcnMpIHsKICAgIGlmIChieXRlcyA9PSBudWxsKSBieXRlcyA9IHV0ZjguZW5jb2RlKHNvdXJjZSk7CiAgICB0b2tlbnMgPSBzY2FubmVyUmVjb3ZlcnkoYnl0ZXMsIHRva2Vucywgc2Nhbm5lci5saW5lU3RhcnRzKTsKICB9CiAgcmV0dXJuIG5ldyBTY2FubmVyUmVzdWx0KHRva2Vucywgc2Nhbm5lci5saW5lU3RhcnRzLCBzY2FubmVyLmhhc0Vycm9ycyk7Cn0KbABNTj8BFwFCASsBJzcBOQFAATQBJzcBHAkeFRoZGxkhASI0ATcBNgFAATkBNAFJAUwBGTsWARwBKzIBFAIBFhYeGAE/AgEqJCkhNhlFBDAkKDc1AgEmKCkhNjU0JCg3NwIBMyglGzRBBEsCAShwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2Nhbm5lci5kYXJ0SXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwvcmVkaXJlY3RpbmdfZmFjdG9yeV9ib2R5LmRhcnSYjC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnJlZGlyZWN0aW5nX2ZhY3RvcnlfYm9keTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRHluYW1pY1R5cGUsCiAgICAgICAgRXhwcmVzc2lvbiwKICAgICAgICBFeHByZXNzaW9uU3RhdGVtZW50LAogICAgICAgIEZ1bmN0aW9uTm9kZSwKICAgICAgICBJbnZhbGlkRXhwcmVzc2lvbiwKICAgICAgICBMZXQsCiAgICAgICAgTWVtYmVyLAogICAgICAgIE51bGxMaXRlcmFsLAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBTdGF0aWNHZXQsCiAgICAgICAgU3RyaW5nTGl0ZXJhbCwKICAgICAgICBUeXBlUGFyYW1ldGVyVHlwZSwKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2FsZ2VicmEuZGFydCcgc2hvdyBTdWJzdGl0dXRpb247CgppbXBvcnQgJ2JvZHlfYnVpbGRlci5kYXJ0JyBzaG93IEVuc3VyZUxvYWRlZDsKCmNvbnN0IFN0cmluZyBsZXROYW1lID0gIiNyZWRpcmVjdGluZ19mYWN0b3J5IjsKCmNsYXNzIFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkgZXh0ZW5kcyBFeHByZXNzaW9uU3RhdGVtZW50IHsKICBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5LmludGVybmFsKEV4cHJlc3Npb24gdmFsdWUsCiAgICAgIFtMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzXSkKICAgICAgOiBzdXBlcihuZXcgTGV0KG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKGxldE5hbWUsIGluaXRpYWxpemVyOiB2YWx1ZSksCiAgICAgICAgICAgIGVuY29kZVR5cGVBcmd1bWVudHModHlwZUFyZ3VtZW50cykpKTsKCiAgUmVkaXJlY3RpbmdGYWN0b3J5Qm9keShNZW1iZXIgdGFyZ2V0LCBbTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50c10pCiAgICAgIDogdGhpcy5pbnRlcm5hbChuZXcgU3RhdGljR2V0KHRhcmdldCksIHR5cGVBcmd1bWVudHMpOwoKICBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5LnVucmVzb2x2ZWQoU3RyaW5nIG5hbWUpCiAgICAgIDogdGhpcy5pbnRlcm5hbChuZXcgU3RyaW5nTGl0ZXJhbChuYW1lKSk7CgogIE1lbWJlciBnZXQgdGFyZ2V0IHsKICAgIGR5bmFtaWMgdmFsdWUgPSBnZXRWYWx1ZShleHByZXNzaW9uKTsKICAgIHJldHVybiB2YWx1ZSBpcyBTdGF0aWNHZXQgPyB2YWx1ZS50YXJnZXQgOiBudWxsOwogIH0KCiAgU3RyaW5nIGdldCB1bnJlc29sdmVkTmFtZSB7CiAgICBkeW5hbWljIHZhbHVlID0gZ2V0VmFsdWUoZXhwcmVzc2lvbik7CiAgICByZXR1cm4gdmFsdWUgaXMgU3RyaW5nTGl0ZXJhbCA/IHZhbHVlLnZhbHVlIDogbnVsbDsKICB9CgogIGJvb2wgZ2V0IGlzVW5yZXNvbHZlZCA9PiB1bnJlc29sdmVkTmFtZSAhPSBudWxsOwoKICBMaXN0PERhcnRUeXBlPiBnZXQgdHlwZUFyZ3VtZW50cyB7CiAgICBpZiAoZXhwcmVzc2lvbiBpcyBMZXQpIHsKICAgICAgTGV0IGJvZHlFeHByZXNzaW9uID0gZXhwcmVzc2lvbjsKICAgICAgaWYgKGJvZHlFeHByZXNzaW9uLnZhcmlhYmxlLm5hbWUgPT0gbGV0TmFtZSkgewogICAgICAgIHJldHVybiBkZWNvZGVUeXBlQXJndW1lbnRzKGJvZHlFeHByZXNzaW9uLmJvZHkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHN0YXRpYyBnZXRWYWx1ZShFeHByZXNzaW9uIGV4cHJlc3Npb24pIHsKICAgIGlmIChleHByZXNzaW9uIGlzIExldCkgewogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlID0gZXhwcmVzc2lvbi52YXJpYWJsZTsKICAgICAgaWYgKHZhcmlhYmxlLm5hbWUgPT0gbGV0TmFtZSkgewogICAgICAgIHJldHVybiB2YXJpYWJsZS5pbml0aWFsaXplcjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBzdGF0aWMgdm9pZCByZXN0b3JlRnJvbURpbGwoUHJvY2VkdXJlIGZhY3RvcnkpIHsKICAgIC8vIFRoaXMgaXMgYSBoYWNrIC8gd29yayBhcm91bmQgZm9yIHN0b3JpbmcgcmVkaXJlY3RpbmcgY29uc3RydWN0b3JzIGluCiAgICAvLyBkaWxsIGZpbGVzLiBTZWUgYENsYXNzQnVpbGRlci5hZGRSZWRpcmVjdGluZ0NvbnN0cnVjdG9yYCBpbgogICAgLy8gW2tlcm5lbF9jbGFzc19idWlsZGVyLmRhcnRdKGtlcm5lbF9jbGFzc19idWlsZGVyLmRhcnQpLgogICAgRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uID0gZmFjdG9yeS5mdW5jdGlvbjsKICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQgc3RhdGVtZW50ID0gZnVuY3Rpb24uYm9keTsKICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CiAgICBpZiAoc3RhdGVtZW50LmV4cHJlc3Npb24gaXMgTGV0KSB7CiAgICAgIExldCBleHByZXNzaW9uID0gc3RhdGVtZW50LmV4cHJlc3Npb247CiAgICAgIHR5cGVBcmd1bWVudHMgPSBkZWNvZGVUeXBlQXJndW1lbnRzKGV4cHJlc3Npb24uYm9keSk7CiAgICB9CiAgICBmdW5jdGlvbi5ib2R5ID0gbmV3IFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkuaW50ZXJuYWwoCiAgICAgICAgZ2V0VmFsdWUoc3RhdGVtZW50LmV4cHJlc3Npb24pLCB0eXBlQXJndW1lbnRzKQogICAgICAuLnBhcmVudCA9IGZ1bmN0aW9uOwogIH0KCiAgc3RhdGljIEV4cHJlc3Npb24gZW5jb2RlVHlwZUFyZ3VtZW50cyhMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICBTdHJpbmcgdmFyTmFtZVByZWZpeCA9ICIjdHlwZUFyZyI7CiAgICBFeHByZXNzaW9uIHJlc3VsdCA9IG5ldyBJbnZhbGlkRXhwcmVzc2lvbihudWxsKTsKICAgIGlmICh0eXBlQXJndW1lbnRzID09IG51bGwpIHsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZvciAoaW50IGkgPSB0eXBlQXJndW1lbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIHJlc3VsdCA9IG5ldyBMZXQoCiAgICAgICAgICBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbigiJHZhck5hbWVQcmVmaXgkaSIsCiAgICAgICAgICAgICAgdHlwZTogdHlwZUFyZ3VtZW50c1tpXSwgaW5pdGlhbGl6ZXI6IG5ldyBOdWxsTGl0ZXJhbCgpKSwKICAgICAgICAgIHJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIExpc3Q8RGFydFR5cGU+IGRlY29kZVR5cGVBcmd1bWVudHMoRXhwcmVzc2lvbiBlbmNvZGVkKSB7CiAgICBpZiAoZW5jb2RlZCBpcyBJbnZhbGlkRXhwcmVzc2lvbikgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIExpc3Q8RGFydFR5cGU+IHJlc3VsdCA9IDxEYXJ0VHlwZT5bXTsKICAgIHdoaWxlIChlbmNvZGVkIGlzIExldCkgewogICAgICBMZXQgaGVhZCA9IGVuY29kZWQ7CiAgICAgIHJlc3VsdC5hZGQoaGVhZC52YXJpYWJsZS50eXBlKTsKICAgICAgZW5jb2RlZCA9IGhlYWQuYm9keTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQp9Cgpib29sIGlzUmVkaXJlY3RpbmdGYWN0b3J5KE1lbWJlciBtZW1iZXIsIHtFbnN1cmVMb2FkZWQgaGVscGVyfSkgewogIGFzc2VydChoZWxwZXIgPT0gbnVsbCB8fCBoZWxwZXIuaXNMb2FkZWQobWVtYmVyKSk7CiAgcmV0dXJuIG1lbWJlciBpcyBQcm9jZWR1cmUgJiYgbWVtYmVyLmZ1bmN0aW9uLmJvZHkgaXMgUmVkaXJlY3RpbmdGYWN0b3J5Qm9keTsKfQoKUmVkaXJlY3RpbmdGYWN0b3J5Qm9keSBnZXRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KE1lbWJlciBtZW1iZXIpIHsKICByZXR1cm4gaXNSZWRpcmVjdGluZ0ZhY3RvcnkobWVtYmVyKSA/IG1lbWJlci5mdW5jdGlvbi5ib2R5IDogbnVsbDsKfQoKY2xhc3MgUmVkaXJlY3Rpb25UYXJnZXQgewogIGZpbmFsIE1lbWJlciB0YXJnZXQ7CiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50czsKCiAgUmVkaXJlY3Rpb25UYXJnZXQodGhpcy50YXJnZXQsIHRoaXMudHlwZUFyZ3VtZW50cyk7Cn0KClJlZGlyZWN0aW9uVGFyZ2V0IGdldFJlZGlyZWN0aW9uVGFyZ2V0KFByb2NlZHVyZSBtZW1iZXIsIEVuc3VyZUxvYWRlZCBoZWxwZXIsCiAgICB7Ym9vbCBsZWdhY3lNb2RlfSkgewogIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPSA8RGFydFR5cGU+W10uLmxlbmd0aCA9CiAgICAgIG1lbWJlci5mdW5jdGlvbi50eXBlUGFyYW1ldGVycy5sZW5ndGg7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlQXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICB0eXBlQXJndW1lbnRzW2ldID0gbmV3IFR5cGVQYXJhbWV0ZXJUeXBlKG1lbWJlci5mdW5jdGlvbi50eXBlUGFyYW1ldGVyc1tpXSk7CiAgfQoKICAvLyBXZSB1c2UgdGhlIFt0b3J0b2lzZSBhbmQgaGFyZSBhbGdvcml0aG1dCiAgLy8gKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0N5Y2xlX2RldGVjdGlvbiNUb3J0b2lzZV9hbmRfaGFyZSkgdG8KICAvLyBoYW5kbGUgY3ljbGVzLgogIE1lbWJlciB0b3J0b2lzZSA9IG1lbWJlcjsKICBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5IHRvcnRvaXNlQm9keSA9IGdldFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkodG9ydG9pc2UpOwogIE1lbWJlciBoYXJlID0gdG9ydG9pc2VCb2R5Py50YXJnZXQ7CiAgaGVscGVyLmVuc3VyZUxvYWRlZChoYXJlKTsKICBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5IGhhcmVCb2R5ID0gZ2V0UmVkaXJlY3RpbmdGYWN0b3J5Qm9keShoYXJlKTsKICB3aGlsZSAodG9ydG9pc2UgIT0gaGFyZSkgewogICAgaWYgKHRvcnRvaXNlQm9keT8uaXNVbnJlc29sdmVkID8/IHRydWUpIHsKICAgICAgcmV0dXJuIG5ldyBSZWRpcmVjdGlvblRhcmdldCh0b3J0b2lzZSwgdHlwZUFyZ3VtZW50cyk7CiAgICB9CiAgICBNZW1iZXIgbmV4dFRvcnRvaXNlID0gdG9ydG9pc2VCb2R5LnRhcmdldDsKICAgIGhlbHBlci5lbnN1cmVMb2FkZWQobmV4dFRvcnRvaXNlKTsKICAgIExpc3Q8RGFydFR5cGU+IG5leHRUeXBlQXJndW1lbnRzID0gdG9ydG9pc2VCb2R5LnR5cGVBcmd1bWVudHM7CiAgICBpZiAoIWxlZ2FjeU1vZGUgJiYgbmV4dFR5cGVBcmd1bWVudHMgPT0gbnVsbCkgewogICAgICBuZXh0VHlwZUFyZ3VtZW50cyA9IDxEYXJ0VHlwZT5bXTsKICAgIH0KCiAgICBpZiAoIWxlZ2FjeU1vZGUgfHwgbmV4dFR5cGVBcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBTdWJzdGl0dXRpb24gc3ViID0gU3Vic3RpdHV0aW9uLmZyb21QYWlycygKICAgICAgICAgIHRvcnRvaXNlLmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzLCB0eXBlQXJndW1lbnRzKTsKICAgICAgdHlwZUFyZ3VtZW50cyA9IDxEYXJ0VHlwZT5bXS4ubGVuZ3RoID0gbmV4dFR5cGVBcmd1bWVudHMubGVuZ3RoOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgICB0eXBlQXJndW1lbnRzW2ldID0gc3ViLnN1YnN0aXR1dGVUeXBlKG5leHRUeXBlQXJndW1lbnRzW2ldKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgLy8gSW4gRGFydCAxLCB3ZSBuZWVkIHRvIHRocm93IGF3YXkgdGhlIGV4dHJhIHR5cGUgYXJndW1lbnRzIGFuZCB1c2UKICAgICAgLy8gYGR5bmFtaWNgIGluIHBsYWNlIG9mIHRoZSBtaXNzaW5nIG9uZXMuCiAgICAgIGludCB0eXBlQXJndW1lbnRDb3VudCA9IHR5cGVBcmd1bWVudHMubGVuZ3RoOwogICAgICBpbnQgbmV4dFR5cGVBcmd1bWVudENvdW50ID0KICAgICAgICAgIG5leHRUb3J0b2lzZS5lbmNsb3NpbmdDbGFzcy50eXBlUGFyYW1ldGVycy5sZW5ndGg7CiAgICAgIHR5cGVBcmd1bWVudHMubGVuZ3RoID0gbmV4dFR5cGVBcmd1bWVudENvdW50OwogICAgICBmb3IgKGludCBpID0gdHlwZUFyZ3VtZW50Q291bnQ7IGkgPCBuZXh0VHlwZUFyZ3VtZW50Q291bnQ7IGkrKykgewogICAgICAgIHR5cGVBcmd1bWVudHNbaV0gPSBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgICB9CiAgICB9CgogICAgdG9ydG9pc2UgPSBuZXh0VG9ydG9pc2U7CiAgICB0b3J0b2lzZUJvZHkgPSBnZXRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KHRvcnRvaXNlKTsKICAgIGhlbHBlci5lbnN1cmVMb2FkZWQoaGFyZUJvZHk/LnRhcmdldCk7CiAgICBoYXJlID0gZ2V0UmVkaXJlY3RpbmdGYWN0b3J5Qm9keShoYXJlQm9keT8udGFyZ2V0KT8udGFyZ2V0OwogICAgaGVscGVyLmVuc3VyZUxvYWRlZChoYXJlKTsKICAgIGhhcmVCb2R5ID0gZ2V0UmVkaXJlY3RpbmdGYWN0b3J5Qm9keShoYXJlKTsKICB9CiAgcmV0dXJuIG51bGw7Cn0KgL8ATk48ASgBIQkSFRQdFhsNEBUTExcbHQE9AS4BLwE7NCZMMgFIPQExMAEWKjUEAR4qOAQBMwElHSc1OQgGEQQBKx06JiUIBhEEATNMQz8uMyInLTwGOTcbBAFIJzUhFQY6GDZHEwYTBAFCKBMGKh0aJhsGEwQCAUI1UAIBQkUCARoXJgE2AgFOGTgtM1EEAS5KFBxNJh1FHS49Bi8nQzQoBgE0MTxHN0UIDUsxNCI9NEgwCAYBHTgrQB8wBA8CAUBwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL3JlZGlyZWN0aW5nX2ZhY3RvcnlfYm9keS5kYXJ0P3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9hcGlfdW5zdGFibGUvY29tcGlsZXJfc3RhdGUuZGFydIaYLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vYXBpX3Byb3RvdHlwZS9jb21waWxlcl9vcHRpb25zLmRhcnQnIHNob3cgQ29tcGlsZXJPcHRpb25zOwoKaW1wb3J0ICcuLi9iYXNlL3Byb2Nlc3NlZF9vcHRpb25zLmRhcnQnIHNob3cgUHJvY2Vzc2VkT3B0aW9uczsKCmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2luY3JlbWVudGFsX2NvbXBpbGVyLmRhcnQnCiAgICBzaG93IEluY3JlbWVudGFsQ29tcGlsZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2tlcm5lbC5kYXJ0JyBzaG93IENvbXBvbmVudDsKCmNsYXNzIEluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZSB7CiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnM7CiAgZmluYWwgUHJvY2Vzc2VkT3B0aW9ucyBwcm9jZXNzZWRPcHRzOwogIGZpbmFsIE1hcDxVcmksIFdvcmtlcklucHV0Q29tcG9uZW50PiB3b3JrZXJJbnB1dENhY2hlOwogIGZpbmFsIEluY3JlbWVudGFsQ29tcGlsZXIgaW5jcmVtZW50YWxDb21waWxlcjsKICBmaW5hbCBTZXQ8U3RyaW5nPiB0YWdzOwogIGZpbmFsIE1hcDxVcmksIFVyaT4gbGlicmFyeVRvSW5wdXREaWxsOwoKICBJbml0aWFsaXplZENvbXBpbGVyU3RhdGUodGhpcy5vcHRpb25zLCB0aGlzLnByb2Nlc3NlZE9wdHMsCiAgICAgIHt0aGlzLndvcmtlcklucHV0Q2FjaGUsCiAgICAgIHRoaXMuaW5jcmVtZW50YWxDb21waWxlciwKICAgICAgdGhpcy50YWdzLAogICAgICB0aGlzLmxpYnJhcnlUb0lucHV0RGlsbH0pOwp9CgovLy8gQSBjYWNoZWQgW0NvbXBvbmVudF0gZm9yIGEgc3VtbWFyeSBpbnB1dCBmaWxlLgovLy8KLy8vIFRyYWNrcyB0aGUgb3JpZ2luYWxseSBtYXJrZWQgImV4dGVybmFsIiBsaWJzIHNvIHRoYXQgdGhleSBjYW4gYmUgcmVzdG9yZWQsCi8vLyBzaW5jZSB0aGUga2VybmVsIGdlbmVyYXRvciBtdXRhdGVzIHRoZSBzdGF0ZS4KY2xhc3MgV29ya2VySW5wdXRDb21wb25lbnQgewogIGZpbmFsIExpc3Q8aW50PiBkaWdlc3Q7CiAgZmluYWwgQ29tcG9uZW50IGNvbXBvbmVudDsKICBmaW5hbCBTZXQ8VXJpPiBleHRlcm5hbExpYnM7CiAgV29ya2VySW5wdXRDb21wb25lbnQodGhpcy5kaWdlc3QsIHRoaXMuY29tcG9uZW50KQogICAgICA6IGV4dGVybmFsTGlicyA9IGNvbXBvbmVudC5saWJyYXJpZXMKICAgICAgICAgICAgLndoZXJlKChsaWIpID0+IGxpYi5pc0V4dGVybmFsKQogICAgICAgICAgICAubWFwKChsaWIpID0+IGxpYi5pbXBvcnRVcmkpCiAgICAgICAgICAgIC50b1NldCgpOwp9Cgpib29sIGRpZ2VzdHNFcXVhbChMaXN0PGludD4gYSwgTGlzdDxpbnQ+IGIpIHsKICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogIGZvciAoaW50IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewogICAgaWYgKGFbaV0gIT0gYltpXSkgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gdHJ1ZTsKfQo1AE5OPAFGAT8BPx4BNAEhISg5MRoqAT0eIBEhAgEzBE8yHRodHzQrLCkWAgEuLConJAQPAgE2cGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9jb21waWxlcl9zdGF0ZS5kYXJ0NXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9hcGlfdW5zdGFibGUvdXRpbC5kYXJ0g/EvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKYm9vbCBlcXVhbExpc3RzPFQ+KExpc3Q8VD4gYSwgTGlzdDxUPiBiKSB7CiAgaWYgKGlkZW50aWNhbChhLCBiKSkgcmV0dXJuIHRydWU7CiAgaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpIHJldHVybiBmYWxzZTsKICBpZiAoYS5sZW5ndGggIT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTsKICBmb3IgKGludCBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpIHsKICAgIGlmIChhW2ldICE9IGJbaV0pIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIHRydWU7Cn0KCmJvb2wgZXF1YWxTZXRzPEs+KFNldDxLPiBhLCBTZXQ8Sz4gYikgewogIGlmIChpZGVudGljYWwoYSwgYikpIHJldHVybiB0cnVlOwogIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgaWYgKGEubGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgZm9yIChLIGVudHJ5IGluIGEpIHsKICAgIGlmICghYi5jb250YWlucyhlbnRyeSkpIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIHRydWU7Cn0KCmJvb2wgZXF1YWxNYXBzPEssIFY+KE1hcDxLLCBWPiBhLCBNYXA8SywgVj4gYikgewogIGlmIChpZGVudGljYWwoYSwgYikpIHJldHVybiB0cnVlOwogIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgaWYgKGEubGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgZm9yIChLIGtleSBpbiBhLmtleXMpIHsKICAgIGlmICghYi5jb250YWluc0tleShrZXkpIHx8IGFba2V5XSAhPSBiW2tleV0pIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIHRydWU7Cn0KIwBOTjwBKyQsKickBA8CASgkLCoXKgQPAgExJCwqGj8EDwIBLHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvdXRpbC5kYXJ0RnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9hcGlfcHJvdG90eXBlL3N0YW5kYXJkX2ZpbGVfc3lzdGVtLmRhcnSNFy8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZyb250X2VuZC5zdGFuZGFyZF9maWxlX3N5c3RlbTsKCmltcG9ydCAnZGFydDphc3luYyc7CmltcG9ydCAnZGFydDppbycgYXMgaW87CgppbXBvcnQgJ2ZpbGVfc3lzdGVtLmRhcnQnOwoKaW1wb3J0ICcuLi9mYXN0YS9jb21waWxlcl9jb250ZXh0LmRhcnQnIHNob3cgQ29tcGlsZXJDb250ZXh0OwoKLy8vIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIFtGaWxlU3lzdGVtXSBoYW5kbGluZyBzdGFuZGFyZCBVUkkgc2NoZW1lcy4KLy8vCi8vLyBmaWxlOiBVUklzIGFyZSBoYW5kbGVkIHVzaW5nIGZpbGUgSS9PLgovLy8gZGF0YTogVVJJcyByZXR1cm4gdGhlaXIgZGF0YSBjb250ZW50cy4KLy8vCi8vLyBOb3QgaW50ZW5kZWQgdG8gYmUgaW1wbGVtZW50ZWQgb3IgZXh0ZW5kZWQgYnkgY2xpZW50cy4KY2xhc3MgU3RhbmRhcmRGaWxlU3lzdGVtIGltcGxlbWVudHMgRmlsZVN5c3RlbSB7CiAgc3RhdGljIGZpbmFsIFN0YW5kYXJkRmlsZVN5c3RlbSBpbnN0YW5jZSA9IG5ldyBTdGFuZGFyZEZpbGVTeXN0ZW0uXygpOwoKICBTdGFuZGFyZEZpbGVTeXN0ZW0uXygpOwoKICBAb3ZlcnJpZGUKICBGaWxlU3lzdGVtRW50aXR5IGVudGl0eUZvclVyaShVcmkgdXJpKSB7CiAgICBpZiAodXJpLnNjaGVtZSA9PSAnZmlsZScgfHwgdXJpLnNjaGVtZSA9PSAnJykgewogICAgICAvLyBUT0RPKGFza2VzYyk6IEVtcHR5IHNjaGVtZXMgc2hvdWxkIGhhdmUgYmVlbiBoYW5kbGVkIGVsc2V3aGVyZS4KICAgICAgcmV0dXJuIG5ldyBfSW9GaWxlU3lzdGVtRW50aXR5KFVyaS5iYXNlLnJlc29sdmVVcmkodXJpKSk7CiAgICB9IGVsc2UgaWYgKHVyaS5zY2hlbWUgPT0gJ2RhdGEnKSB7CiAgICAgIHJldHVybiBuZXcgRGF0YUZpbGVTeXN0ZW1FbnRpdHkoVXJpLmJhc2UucmVzb2x2ZVVyaSh1cmkpKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKAogICAgICAgICAgdXJpLCAnU3RhbmRhcmRGaWxlU3lzdGVtIG9ubHkgc3VwcG9ydHMgZmlsZToqIGFuZCBkYXRhOiogVVJJcycpOwogICAgfQogIH0KfQoKLy8vIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIFtGaWxlU3lzdGVtRW50aXR5XSBmb3IgZmlsZTogVVJJcy4KY2xhc3MgX0lvRmlsZVN5c3RlbUVudGl0eSBpbXBsZW1lbnRzIEZpbGVTeXN0ZW1FbnRpdHkgewogIEBvdmVycmlkZQogIGZpbmFsIFVyaSB1cmk7CgogIF9Jb0ZpbGVTeXN0ZW1FbnRpdHkodGhpcy51cmkpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHVyaS5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpID0+CiAgICAgIG90aGVyIGlzIF9Jb0ZpbGVTeXN0ZW1FbnRpdHkgJiYgb3RoZXIudXJpID09IHVyaTsKCiAgQG92ZXJyaWRlCiAgRnV0dXJlPGJvb2w+IGV4aXN0cygpIGFzeW5jIHsKICAgIGlmIChhd2FpdCBpby5GaWxlU3lzdGVtRW50aXR5LmlzRGlyZWN0b3J5KHVyaS50b0ZpbGVQYXRoKCkpKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBpby5GaWxlLmZyb21VcmkodXJpKS5leGlzdHMoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEZ1dHVyZTxMaXN0PGludD4+IHJlYWRBc0J5dGVzKCkgYXN5bmMgewogICAgdHJ5IHsKICAgICAgQ29tcGlsZXJDb250ZXh0LnJlY29yZERlcGVuZGVuY3kodXJpKTsKICAgICAgcmV0dXJuIG5ldyBpby5GaWxlLmZyb21VcmkodXJpKS5yZWFkQXNCeXRlc1N5bmMoKTsKICAgIH0gb24gaW8uRmlsZVN5c3RlbUV4Y2VwdGlvbiBjYXRjaCAoZXhjZXB0aW9uKSB7CiAgICAgIHRocm93IF90b0ZpbGVTeXN0ZW1FeGNlcHRpb24oZXhjZXB0aW9uKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEZ1dHVyZTxTdHJpbmc+IHJlYWRBc1N0cmluZygpIGFzeW5jIHsKICAgIHRyeSB7CiAgICAgIENvbXBpbGVyQ29udGV4dC5yZWNvcmREZXBlbmRlbmN5KHVyaSk7CiAgICAgIHJldHVybiBhd2FpdCBuZXcgaW8uRmlsZS5mcm9tVXJpKHVyaSkucmVhZEFzU3RyaW5nKCk7CiAgICB9IG9uIGlvLkZpbGVTeXN0ZW1FeGNlcHRpb24gY2F0Y2ggKGV4Y2VwdGlvbikgewogICAgICB0aHJvdyBfdG9GaWxlU3lzdGVtRXhjZXB0aW9uKGV4Y2VwdGlvbik7CiAgICB9CiAgfQoKICAvKioKICAgKiBSZXR1cm4gdGhlIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBmb3IgdGhlIGdpdmVuIEkvTyBleGNlcHRpb24uCiAgICovCiAgRmlsZVN5c3RlbUV4Y2VwdGlvbiBfdG9GaWxlU3lzdGVtRXhjZXB0aW9uKGlvLkZpbGVTeXN0ZW1FeGNlcHRpb24gZXhjZXB0aW9uKSB7CiAgICBTdHJpbmcgbWVzc2FnZSA9IGV4Y2VwdGlvbi5tZXNzYWdlOwogICAgU3RyaW5nIG9zTWVzc2FnZSA9IGV4Y2VwdGlvbi5vc0Vycm9yPy5tZXNzYWdlOwogICAgaWYgKG9zTWVzc2FnZSAhPSBudWxsICYmIG9zTWVzc2FnZS5pc05vdEVtcHR5KSB7CiAgICAgIG1lc3NhZ2UgPSBvc01lc3NhZ2U7CiAgICB9CiAgICByZXR1cm4gbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24odXJpLCBtZXNzYWdlKTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBbRmlsZVN5c3RlbUVudGl0eV0gZm9yIGRhdGE6IFVSSXMuCmNsYXNzIERhdGFGaWxlU3lzdGVtRW50aXR5IGltcGxlbWVudHMgRmlsZVN5c3RlbUVudGl0eSB7CiAgQG92ZXJyaWRlCiAgZmluYWwgVXJpIHVyaTsKCiAgRGF0YUZpbGVTeXN0ZW1FbnRpdHkodGhpcy51cmkpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHVyaS5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpID0+CiAgICAgIG90aGVyIGlzIERhdGFGaWxlU3lzdGVtRW50aXR5ICYmIG90aGVyLnVyaSA9PSB1cmk7CgogIEBvdmVycmlkZQogIEZ1dHVyZTxib29sPiBleGlzdHMoKSBhc3luYyB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIEZ1dHVyZTxMaXN0PGludD4+IHJlYWRBc0J5dGVzKCkgYXN5bmMgewogICAgcmV0dXJuIHVyaS5kYXRhLmNvbnRlbnRBc0J5dGVzKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBGdXR1cmU8U3RyaW5nPiByZWFkQXNTdHJpbmcoKSBhc3luYyB7CiAgICByZXR1cm4gdXJpLmRhdGEuY29udGVudEFzU3RyaW5nKCk7CiAgfQp9Cn0ATk48ASgBFRgBGwE+AUsEKysEOzFJARoBDCs0SUAnQQ0lSwYEAgFCOAwRASEBDCQBDCQ4AQwgQxMNMAYEAQwqCi05NC8GBAEMKAotPDQvBgQBBkMGUSgzNRsGMgQCAUI5DBEBIgEMJAEMJDkBDCARBAEMKiYEAQwoJwQCAT1wYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9zdGFuZGFyZF9maWxlX3N5c3RlbS5kYXJ0RnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9jb21wdXRlX3BsYXRmb3JtX2JpbmFyaWVzX2xvY2F0aW9uLmRhcnSM0i8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgImRhcnQ6aW8iIHNob3cgRmlsZSwgUGxhdGZvcm07CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IFNvdXJjZTsKCmltcG9ydCAnYmFzZS9wcm9jZXNzZWRfb3B0aW9ucy5kYXJ0JyBzaG93IFByb2Nlc3NlZE9wdGlvbnM7CgppbXBvcnQgJ2Zhc3RhL2NvbXBpbGVyX2NvbnRleHQuZGFydCcgc2hvdyBDb21waWxlckNvbnRleHQ7CgovLy8gQ29tcHV0ZXMgdGhlIGxvY2F0aW9uIG9mIHBsYXRmb3JtIGJpbmFyaWVzLCB0aGF0IGlzLCBjb21waWxlZCBgLmRpbGxgIGZpbGVzCi8vLyBvZiB0aGUgcGxhdGZvcm0gbGlicmFyaWVzIHRoYXQgYXJlIHVzZWQgdG8gYXZvaWQgcmVjb21waWxpbmcgdGhvc2UKLy8vIGxpYnJhcmllcy4KVXJpIGNvbXB1dGVQbGF0Zm9ybUJpbmFyaWVzTG9jYXRpb24oe2Jvb2wgZm9yY2VCdWlsZERpcjogZmFsc2V9KSB7CiAgLy8gVGhlIGRpcmVjdG9yeSBvZiB0aGUgRGFydCBWTSBleGVjdXRhYmxlLgogIFVyaSB2bURpcmVjdG9yeSA9IFVyaS5iYXNlCiAgICAgIC5yZXNvbHZlVXJpKG5ldyBVcmkuZmlsZShQbGF0Zm9ybS5yZXNvbHZlZEV4ZWN1dGFibGUpKQogICAgICAucmVzb2x2ZSgiLiIpOwogIGlmICh2bURpcmVjdG9yeS5wYXRoLmVuZHNXaXRoKCIvYmluLyIpKSB7CiAgICAvLyBMb29rcyBsaWtlIHRoZSBWTSBpcyBpbiBhIGAvYmluL2AgZGlyZWN0b3J5LCBzbyB0aGlzIGlzIHJ1bm5pbmcgZnJvbSBhCiAgICAvLyBidWlsdCBTREsuCiAgICByZXR1cm4gdm1EaXJlY3RvcnkucmVzb2x2ZShmb3JjZUJ1aWxkRGlyID8gIi4uLy4uLyIgOiAiLi4vbGliL19pbnRlcm5hbC8iKTsKICB9IGVsc2UgewogICAgLy8gV2UgYXNzdW1lIHRoaXMgaXMgcnVubmluZyBmcm9tIGEgYnVpbGQgZGlyZWN0b3J5IChmb3IgZXhhbXBsZSwKICAgIC8vIGBvdXQvUmVsZWFzZVg2NGAgb3IgYHhjb2RlYnVpbGQvUmVsZWFzZVg2NGApLgogICAgcmV0dXJuIHZtRGlyZWN0b3J5OwogIH0KfQoKLy8vIFRyYW5zbGF0ZXMgYW4gU0RLIFVSSSAoIm9yZy1kYXJ0bGFuZy1zZGs6Ly8vLi4uIikgdG8gYSBmaWxlIFVSSS4KVXJpIHRyYW5zbGF0ZVNkayhVcmkgdXJpKSB7CiAgaWYgKENvbXBpbGVyQ29udGV4dC5pc0FjdGl2ZSkgewogICAgaWYgKHVyaS5zY2hlbWUgPT0gIm9yZy1kYXJ0bGFuZy1zZGsiKSB7CiAgICAgIFN0cmluZyBwYXRoID0gdXJpLnBhdGg7CiAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoIi9zZGsvIikpIHsKICAgICAgICBDb21waWxlckNvbnRleHQgY29udGV4dCA9IENvbXBpbGVyQ29udGV4dC5jdXJyZW50OwogICAgICAgIFVyaSBzZGtSb290ID0gY29udGV4dC5jYWNoZWRTZGtSb290OwogICAgICAgIGlmIChzZGtSb290ID09IG51bGwpIHsKICAgICAgICAgIFByb2Nlc3NlZE9wdGlvbnMgb3B0aW9ucyA9IGNvbnRleHQub3B0aW9uczsKICAgICAgICAgIHNka1Jvb3QgPSBvcHRpb25zLnNka1Jvb3Q7CiAgICAgICAgICBpZiAoc2RrUm9vdCA9PSBudWxsKSB7CiAgICAgICAgICAgIHNka1Jvb3QgPSBvcHRpb25zLmxpYnJhcmllc1NwZWNpZmljYXRpb25Vcmk/LnJlc29sdmUoIi4uLyIpOwogICAgICAgICAgICBpZiAoc2RrUm9vdCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgaWYgKCFpc0V4aXN0aW5nRmlsZShzZGtSb290LnJlc29sdmUoImxpYi9saWJyYXJpZXMuanNvbiIpKSkgewogICAgICAgICAgICAgICAgc2RrUm9vdCA9IG51bGw7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoc2RrUm9vdCA9PSBudWxsKSB7CiAgICAgICAgICAgIHNka1Jvb3QgPSAob3B0aW9ucy5zZGtTdW1tYXJ5ID8/IGNvbXB1dGVQbGF0Zm9ybUJpbmFyaWVzTG9jYXRpb24oKSkKICAgICAgICAgICAgICAgIC5yZXNvbHZlKCIuLi8uLi8iKTsKICAgICAgICAgICAgaWYgKHNka1Jvb3QgIT0gbnVsbCkgewogICAgICAgICAgICAgIGlmICghaXNFeGlzdGluZ0ZpbGUoc2RrUm9vdC5yZXNvbHZlKCJsaWIvbGlicmFyaWVzLmpzb24iKSkpIHsKICAgICAgICAgICAgICAgIGlmIChpc0V4aXN0aW5nRmlsZShzZGtSb290LnJlc29sdmUoInNkay9saWIvbGlicmFyaWVzLmpzb24iKSkpIHsKICAgICAgICAgICAgICAgICAgc2RrUm9vdCA9IHNka1Jvb3QucmVzb2x2ZSgic2RrLyIpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgc2RrUm9vdCA9IG51bGw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBzZGtSb290ID8/PSBVcmkucGFyc2UoIm9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrLyIpOwogICAgICAgICAgY29udGV4dC5jYWNoZWRTZGtSb290ID0gc2RrUm9vdDsKICAgICAgICB9CiAgICAgICAgVXJpIGNhbmRpZGF0ZSA9IHNka1Jvb3QucmVzb2x2ZShwYXRoLnN1YnN0cmluZyg1KSk7CiAgICAgICAgaWYgKGlzRXhpc3RpbmdGaWxlKGNhbmRpZGF0ZSkpIHsKICAgICAgICAgIE1hcDxVcmksIFNvdXJjZT4gdXJpVG9Tb3VyY2UgPSBDb21waWxlckNvbnRleHQuY3VycmVudC51cmlUb1NvdXJjZTsKICAgICAgICAgIFNvdXJjZSBzb3VyY2UgPSB1cmlUb1NvdXJjZVt1cmldOwogICAgICAgICAgaWYgKHNvdXJjZS5zb3VyY2UuaXNFbXB0eSkgewogICAgICAgICAgICB1cmlUb1NvdXJjZVt1cmldID0gbmV3IFNvdXJjZSgKICAgICAgICAgICAgICAgIHNvdXJjZS5saW5lU3RhcnRzLAogICAgICAgICAgICAgICAgbmV3IEZpbGUuZnJvbVVyaShjYW5kaWRhdGUpLnJlYWRBc0J5dGVzU3luYygpLAogICAgICAgICAgICAgICAgc291cmNlLmltcG9ydFVyaSwKICAgICAgICAgICAgICAgIHNvdXJjZS5maWxlVXJpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsKICAgICAgfQogICAgfQogIH0KICByZXR1cm4gdXJpOwp9Cgpib29sIGlzRXhpc3RpbmdGaWxlKFVyaSB1cmkpIHsKICBpZiAodXJpLnNjaGVtZSA9PSAiZmlsZSIpIHsKICAgIHJldHVybiBuZXcgRmlsZS5mcm9tVXJpKHVyaSkuZXhpc3RzU3luYygpOwogIH0gZWxzZSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9Cl4ATk48ASYBLgE8ATsBUEcPQy4dPRUsThJQC0Y1GAQCAUUcIiweJjstHzYlIUkjTCAQDgwhUCQjTFE1GSISEA4MPSsKPClOLCcrIz8iIQwKGggGBA4CAR8eLwsSBAIBPXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9jb21wdXRlX3BsYXRmb3JtX2JpbmFyaWVzX2xvY2F0aW9uLmRhcnQyc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL29wZXJhdG9yLmRhcnSO5y8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLm9wZXJhdG9yczsKCi8vLyBUaGUgdXNlci1kZWZpbmFibGUgb3BlcmF0b3JzIGluIERhcnQuCi8vLwovLy8gVGhlIG5hbWVzIGhhdmUgYmVlbiBjaG9zZW4gdG8gcmVwcmVzZW50IHRoZWlyIG5vcm1hbCBzZW1hbnRpYyBtZWFuaW5nLgplbnVtIE9wZXJhdG9yIHsKICBhZGQsCiAgYml0d2lzZUFuZCwKICBiaXR3aXNlTm90LAogIGJpdHdpc2VPciwKICBiaXR3aXNlWG9yLAogIGRpdmlkZSwKICBlcXVhbHMsCiAgZ3JlYXRlclRoYW4sCiAgZ3JlYXRlclRoYW5FcXVhbHMsCiAgaW5kZXhHZXQsCiAgaW5kZXhTZXQsCiAgbGVmdFNoaWZ0LAogIGxlc3NUaGFuLAogIGxlc3NUaGFuRXF1YWxzLAogIG1vZHVsbywKICBtdWx0aXBseSwKICByaWdodFNoaWZ0LAogIHRyaXBsZVNoaWZ0LAogIHN1YnRyYWN0LAogIHRydW5jYXRpbmdEaXZpZGUsCiAgdW5hcnlNaW51cywKfQoKT3BlcmF0b3Igb3BlcmF0b3JGcm9tU3RyaW5nKFN0cmluZyBzdHJpbmcpIHsKICBpZiAoaWRlbnRpY2FsKCIrIiwgc3RyaW5nKSkgcmV0dXJuIE9wZXJhdG9yLmFkZDsKICBpZiAoaWRlbnRpY2FsKCImIiwgc3RyaW5nKSkgcmV0dXJuIE9wZXJhdG9yLmJpdHdpc2VBbmQ7CiAgaWYgKGlkZW50aWNhbCgifiIsIHN0cmluZykpIHJldHVybiBPcGVyYXRvci5iaXR3aXNlTm90OwogIGlmIChpZGVudGljYWwoInwiLCBzdHJpbmcpKSByZXR1cm4gT3BlcmF0b3IuYml0d2lzZU9yOwogIGlmIChpZGVudGljYWwoIl4iLCBzdHJpbmcpKSByZXR1cm4gT3BlcmF0b3IuYml0d2lzZVhvcjsKICBpZiAoaWRlbnRpY2FsKCIvIiwgc3RyaW5nKSkgcmV0dXJuIE9wZXJhdG9yLmRpdmlkZTsKICBpZiAoaWRlbnRpY2FsKCI9PSIsIHN0cmluZykpIHJldHVybiBPcGVyYXRvci5lcXVhbHM7CiAgaWYgKGlkZW50aWNhbCgiPiIsIHN0cmluZykpIHJldHVybiBPcGVyYXRvci5ncmVhdGVyVGhhbjsKICBpZiAoaWRlbnRpY2FsKCI+PSIsIHN0cmluZykpIHJldHVybiBPcGVyYXRvci5ncmVhdGVyVGhhbkVxdWFsczsKICBpZiAoaWRlbnRpY2FsKCJbXSIsIHN0cmluZykpIHJldHVybiBPcGVyYXRvci5pbmRleEdldDsKICBpZiAoaWRlbnRpY2FsKCJbXT0iLCBzdHJpbmcpKSByZXR1cm4gT3BlcmF0b3IuaW5kZXhTZXQ7CiAgaWYgKGlkZW50aWNhbCgiPDwiLCBzdHJpbmcpKSByZXR1cm4gT3BlcmF0b3IubGVmdFNoaWZ0OwogIGlmIChpZGVudGljYWwoIjwiLCBzdHJpbmcpKSByZXR1cm4gT3BlcmF0b3IubGVzc1RoYW47CiAgaWYgKGlkZW50aWNhbCgiPD0iLCBzdHJpbmcpKSByZXR1cm4gT3BlcmF0b3IubGVzc1RoYW5FcXVhbHM7CiAgaWYgKGlkZW50aWNhbCgiJSIsIHN0cmluZykpIHJldHVybiBPcGVyYXRvci5tb2R1bG87CiAgaWYgKGlkZW50aWNhbCgiKiIsIHN0cmluZykpIHJldHVybiBPcGVyYXRvci5tdWx0aXBseTsKICBpZiAoaWRlbnRpY2FsKCI+PiIsIHN0cmluZykpIHJldHVybiBPcGVyYXRvci5yaWdodFNoaWZ0OwogIGlmIChpZGVudGljYWwoIj4+PiIsIHN0cmluZykpIHJldHVybiBPcGVyYXRvci50cmlwbGVTaGlmdDsKICBpZiAoaWRlbnRpY2FsKCItIiwgc3RyaW5nKSkgcmV0dXJuIE9wZXJhdG9yLnN1YnRyYWN0OwogIGlmIChpZGVudGljYWwoIn4vIiwgc3RyaW5nKSkgcmV0dXJuIE9wZXJhdG9yLnRydW5jYXRpbmdEaXZpZGU7CiAgaWYgKGlkZW50aWNhbCgidW5hcnktIiwgc3RyaW5nKSkgcmV0dXJuIE9wZXJhdG9yLnVuYXJ5TWludXM7CiAgcmV0dXJuIG51bGw7Cn0KClN0cmluZyBvcGVyYXRvclRvU3RyaW5nKE9wZXJhdG9yIG9wZXJhdG9yKSB7CiAgc3dpdGNoIChvcGVyYXRvcikgewogICAgY2FzZSBPcGVyYXRvci5hZGQ6CiAgICAgIHJldHVybiAiKyI7CiAgICBjYXNlIE9wZXJhdG9yLmJpdHdpc2VBbmQ6CiAgICAgIHJldHVybiAiJiI7CiAgICBjYXNlIE9wZXJhdG9yLmJpdHdpc2VOb3Q6CiAgICAgIHJldHVybiAifiI7CiAgICBjYXNlIE9wZXJhdG9yLmJpdHdpc2VPcjoKICAgICAgcmV0dXJuICJ8IjsKICAgIGNhc2UgT3BlcmF0b3IuYml0d2lzZVhvcjoKICAgICAgcmV0dXJuICJeIjsKICAgIGNhc2UgT3BlcmF0b3IuZGl2aWRlOgogICAgICByZXR1cm4gIi8iOwogICAgY2FzZSBPcGVyYXRvci5lcXVhbHM6CiAgICAgIHJldHVybiAiPT0iOwogICAgY2FzZSBPcGVyYXRvci5ncmVhdGVyVGhhbjoKICAgICAgcmV0dXJuICI+IjsKICAgIGNhc2UgT3BlcmF0b3IuZ3JlYXRlclRoYW5FcXVhbHM6CiAgICAgIHJldHVybiAiPj0iOwogICAgY2FzZSBPcGVyYXRvci5pbmRleEdldDoKICAgICAgcmV0dXJuICJbXSI7CiAgICBjYXNlIE9wZXJhdG9yLmluZGV4U2V0OgogICAgICByZXR1cm4gIltdPSI7CiAgICBjYXNlIE9wZXJhdG9yLmxlZnRTaGlmdDoKICAgICAgcmV0dXJuICI8PCI7CiAgICBjYXNlIE9wZXJhdG9yLmxlc3NUaGFuOgogICAgICByZXR1cm4gIjwiOwogICAgY2FzZSBPcGVyYXRvci5sZXNzVGhhbkVxdWFsczoKICAgICAgcmV0dXJuICI8PSI7CiAgICBjYXNlIE9wZXJhdG9yLm1vZHVsbzoKICAgICAgcmV0dXJuICIlIjsKICAgIGNhc2UgT3BlcmF0b3IubXVsdGlwbHk6CiAgICAgIHJldHVybiAiKiI7CiAgICBjYXNlIE9wZXJhdG9yLnJpZ2h0U2hpZnQ6CiAgICAgIHJldHVybiAiPj4iOwogICAgY2FzZSBPcGVyYXRvci50cmlwbGVTaGlmdDoKICAgICAgcmV0dXJuICI+Pj4iOwogICAgY2FzZSBPcGVyYXRvci5zdWJ0cmFjdDoKICAgICAgcmV0dXJuICItIjsKICAgIGNhc2UgT3BlcmF0b3IudHJ1bmNhdGluZ0RpdmlkZToKICAgICAgcmV0dXJuICJ+LyI7CiAgICBjYXNlIE9wZXJhdG9yLnVuYXJ5TWludXM6CiAgICAgIHJldHVybiAidW5hcnktIjsKICB9CiAgcmV0dXJuIG51bGw7Cn0KCmludCBvcGVyYXRvclJlcXVpcmVkQXJndW1lbnRDb3VudChPcGVyYXRvciBvcGVyYXRvcikgewogIHN3aXRjaCAob3BlcmF0b3IpIHsKICAgIGNhc2UgT3BlcmF0b3IuYml0d2lzZU5vdDoKICAgIGNhc2UgT3BlcmF0b3IudW5hcnlNaW51czoKICAgICAgcmV0dXJuIDA7CgogICAgY2FzZSBPcGVyYXRvci5hZGQ6CiAgICBjYXNlIE9wZXJhdG9yLmJpdHdpc2VBbmQ6CiAgICBjYXNlIE9wZXJhdG9yLmJpdHdpc2VPcjoKICAgIGNhc2UgT3BlcmF0b3IuYml0d2lzZVhvcjoKICAgIGNhc2UgT3BlcmF0b3IuZGl2aWRlOgogICAgY2FzZSBPcGVyYXRvci5lcXVhbHM6CiAgICBjYXNlIE9wZXJhdG9yLmdyZWF0ZXJUaGFuOgogICAgY2FzZSBPcGVyYXRvci5ncmVhdGVyVGhhbkVxdWFsczoKICAgIGNhc2UgT3BlcmF0b3IuaW5kZXhHZXQ6CiAgICBjYXNlIE9wZXJhdG9yLmxlZnRTaGlmdDoKICAgIGNhc2UgT3BlcmF0b3IubGVzc1RoYW46CiAgICBjYXNlIE9wZXJhdG9yLmxlc3NUaGFuRXF1YWxzOgogICAgY2FzZSBPcGVyYXRvci5tb2R1bG86CiAgICBjYXNlIE9wZXJhdG9yLm11bHRpcGx5OgogICAgY2FzZSBPcGVyYXRvci5yaWdodFNoaWZ0OgogICAgY2FzZSBPcGVyYXRvci50cmlwbGVTaGlmdDoKICAgIGNhc2UgT3BlcmF0b3Iuc3VidHJhY3Q6CiAgICBjYXNlIE9wZXJhdG9yLnRydW5jYXRpbmdEaXZpZGU6CiAgICAgIHJldHVybiAxOwoKICAgIGNhc2UgT3BlcmF0b3IuaW5kZXhTZXQ6CiAgICAgIHJldHVybiAyOwogIH0KICByZXR1cm4gLTE7Cn0KgIsATk48ARkBKgRLEAcODg0OCgoPFQwMDQwSCgwODwwUDgIBLTM6Ojk6Njc7Qjk6Ojg/Njg7PThBPw8CAS0WFxIeEh4SHRIeEhoSGhMfEiUTHBMcFB0THBIiExoSHBIeEx8UHBIkEx4XBA8CATcWHh4QARceHR4aGh8lHB0cIhocHh8cJBABHBAEDQIBKXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9vcGVyYXRvci5kYXJ0P3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9wYXJzZXIvYXN5bmNfbW9kaWZpZXIuZGFydIFALy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEucGFyc2VyLmFzeW5jX21vZGlmaWVyOwoKZW51bSBBc3luY01vZGlmaWVyIHsKICBTeW5jLAogIFN5bmNTdGFyLAogIEFzeW5jLAogIEFzeW5jU3RhciwKfQoOAE5OPAElARUIDAkNAgE2cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9hc3luY19tb2RpZmllci5kYXJ0PHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9zY2FubmVyL2NoYXJhY3RlcnMuZGFydI1uLy8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuc2Nhbm5lci5jaGFyYWN0ZXJzOwoKY29uc3QgaW50ICRFT0YgPSAwOwpjb25zdCBpbnQgJFNUWCA9IDI7CmNvbnN0IGludCAkQlMgPSA4Owpjb25zdCBpbnQgJFRBQiA9IDk7CmNvbnN0IGludCAkTEYgPSAxMDsKY29uc3QgaW50ICRWVEFCID0gMTE7CmNvbnN0IGludCAkRkYgPSAxMjsKY29uc3QgaW50ICRDUiA9IDEzOwpjb25zdCBpbnQgJFNQQUNFID0gMzI7CmNvbnN0IGludCAkQkFORyA9IDMzOwpjb25zdCBpbnQgJERRID0gMzQ7CmNvbnN0IGludCAkSEFTSCA9IDM1Owpjb25zdCBpbnQgJCQgPSAzNjsKY29uc3QgaW50ICRQRVJDRU5UID0gMzc7CmNvbnN0IGludCAkQU1QRVJTQU5EID0gMzg7CmNvbnN0IGludCAkU1EgPSAzOTsKY29uc3QgaW50ICRPUEVOX1BBUkVOID0gNDA7CmNvbnN0IGludCAkQ0xPU0VfUEFSRU4gPSA0MTsKY29uc3QgaW50ICRTVEFSID0gNDI7CmNvbnN0IGludCAkUExVUyA9IDQzOwpjb25zdCBpbnQgJENPTU1BID0gNDQ7CmNvbnN0IGludCAkTUlOVVMgPSA0NTsKY29uc3QgaW50ICRQRVJJT0QgPSA0NjsKY29uc3QgaW50ICRTTEFTSCA9IDQ3Owpjb25zdCBpbnQgJDAgPSA0ODsKY29uc3QgaW50ICQxID0gNDk7CmNvbnN0IGludCAkMiA9IDUwOwpjb25zdCBpbnQgJDMgPSA1MTsKY29uc3QgaW50ICQ0ID0gNTI7CmNvbnN0IGludCAkNSA9IDUzOwpjb25zdCBpbnQgJDYgPSA1NDsKY29uc3QgaW50ICQ3ID0gNTU7CmNvbnN0IGludCAkOCA9IDU2Owpjb25zdCBpbnQgJDkgPSA1NzsKY29uc3QgaW50ICRDT0xPTiA9IDU4Owpjb25zdCBpbnQgJFNFTUlDT0xPTiA9IDU5Owpjb25zdCBpbnQgJExUID0gNjA7CmNvbnN0IGludCAkRVEgPSA2MTsKY29uc3QgaW50ICRHVCA9IDYyOwpjb25zdCBpbnQgJFFVRVNUSU9OID0gNjM7CmNvbnN0IGludCAkQVQgPSA2NDsKY29uc3QgaW50ICRBID0gNjU7CmNvbnN0IGludCAkQiA9IDY2Owpjb25zdCBpbnQgJEMgPSA2NzsKY29uc3QgaW50ICREID0gNjg7CmNvbnN0IGludCAkRSA9IDY5Owpjb25zdCBpbnQgJEYgPSA3MDsKY29uc3QgaW50ICRHID0gNzE7CmNvbnN0IGludCAkSCA9IDcyOwpjb25zdCBpbnQgJEkgPSA3MzsKY29uc3QgaW50ICRKID0gNzQ7CmNvbnN0IGludCAkSyA9IDc1Owpjb25zdCBpbnQgJEwgPSA3NjsKY29uc3QgaW50ICRNID0gNzc7CmNvbnN0IGludCAkTiA9IDc4Owpjb25zdCBpbnQgJE8gPSA3OTsKY29uc3QgaW50ICRQID0gODA7CmNvbnN0IGludCAkUSA9IDgxOwpjb25zdCBpbnQgJFIgPSA4MjsKY29uc3QgaW50ICRTID0gODM7CmNvbnN0IGludCAkVCA9IDg0Owpjb25zdCBpbnQgJFUgPSA4NTsKY29uc3QgaW50ICRWID0gODY7CmNvbnN0IGludCAkVyA9IDg3Owpjb25zdCBpbnQgJFggPSA4ODsKY29uc3QgaW50ICRZID0gODk7CmNvbnN0IGludCAkWiA9IDkwOwpjb25zdCBpbnQgJE9QRU5fU1FVQVJFX0JSQUNLRVQgPSA5MTsKY29uc3QgaW50ICRCQUNLU0xBU0ggPSA5MjsKY29uc3QgaW50ICRDTE9TRV9TUVVBUkVfQlJBQ0tFVCA9IDkzOwpjb25zdCBpbnQgJENBUkVUID0gOTQ7CmNvbnN0IGludCAkXyA9IDk1Owpjb25zdCBpbnQgJEJBQ0tQSU5HID0gOTY7CmNvbnN0IGludCAkYSA9IDk3Owpjb25zdCBpbnQgJGIgPSA5ODsKY29uc3QgaW50ICRjID0gOTk7CmNvbnN0IGludCAkZCA9IDEwMDsKY29uc3QgaW50ICRlID0gMTAxOwpjb25zdCBpbnQgJGYgPSAxMDI7CmNvbnN0IGludCAkZyA9IDEwMzsKY29uc3QgaW50ICRoID0gMTA0Owpjb25zdCBpbnQgJGkgPSAxMDU7CmNvbnN0IGludCAkaiA9IDEwNjsKY29uc3QgaW50ICRrID0gMTA3Owpjb25zdCBpbnQgJGwgPSAxMDg7CmNvbnN0IGludCAkbSA9IDEwOTsKY29uc3QgaW50ICRuID0gMTEwOwpjb25zdCBpbnQgJG8gPSAxMTE7CmNvbnN0IGludCAkcCA9IDExMjsKY29uc3QgaW50ICRxID0gMTEzOwpjb25zdCBpbnQgJHIgPSAxMTQ7CmNvbnN0IGludCAkcyA9IDExNTsKY29uc3QgaW50ICR0ID0gMTE2Owpjb25zdCBpbnQgJHUgPSAxMTc7CmNvbnN0IGludCAkdiA9IDExODsKY29uc3QgaW50ICR3ID0gMTE5Owpjb25zdCBpbnQgJHggPSAxMjA7CmNvbnN0IGludCAkeSA9IDEyMTsKY29uc3QgaW50ICR6ID0gMTIyOwpjb25zdCBpbnQgJE9QRU5fQ1VSTFlfQlJBQ0tFVCA9IDEyMzsKY29uc3QgaW50ICRCQVIgPSAxMjQ7CmNvbnN0IGludCAkQ0xPU0VfQ1VSTFlfQlJBQ0tFVCA9IDEyNTsKY29uc3QgaW50ICRUSUxERSA9IDEyNjsKY29uc3QgaW50ICRERUwgPSAxMjc7CmNvbnN0IGludCAkTkJTUCA9IDE2MDsKY29uc3QgaW50ICRMUyA9IDB4MjAyODsKY29uc3QgaW50ICRQUyA9IDB4MjAyOTsKCmNvbnN0IGludCAkRklSU1RfU1VSUk9HQVRFID0gMHhkODAwOwpjb25zdCBpbnQgJExBU1RfU1VSUk9HQVRFID0gMHhkZmZmOwpjb25zdCBpbnQgJExBU1RfQ09ERV9QT0lOVCA9IDB4MTBmZmZmOwoKYm9vbCBpc0RpZ2l0KGludCBjaGFyYWN0ZXJDb2RlKSB7CiAgcmV0dXJuICQwIDw9IGNoYXJhY3RlckNvZGUgJiYgY2hhcmFjdGVyQ29kZSA8PSAkOTsKfQoKYm9vbCBpc0hleERpZ2l0KGludCBjaGFyYWN0ZXJDb2RlKSB7CiAgaWYgKGNoYXJhY3RlckNvZGUgPD0gJDkpIHJldHVybiAkMCA8PSBjaGFyYWN0ZXJDb2RlOwogIGNoYXJhY3RlckNvZGUgfD0gJGEgXiAkQTsKICByZXR1cm4gKCRhIDw9IGNoYXJhY3RlckNvZGUgJiYgY2hhcmFjdGVyQ29kZSA8PSAkZik7Cn0KCmludCBoZXhEaWdpdFZhbHVlKGludCBoZXhEaWdpdCkgewogIGFzc2VydChpc0hleERpZ2l0KGhleERpZ2l0KSk7CiAgLy8gaGV4RGlnaXQgaXMgb25lIG9mICcwJy4uJzknLCAnQScuLidGJyBhbmQgJ2EnLi4nZicuCiAgaWYgKGhleERpZ2l0IDw9ICQ5KSByZXR1cm4gaGV4RGlnaXQgLSAkMDsKICByZXR1cm4gKGhleERpZ2l0IHwgKCRhIF4gJEEpKSAtICgkYSAtIDEwKTsKfQoKYm9vbCBpc1VuaWNvZGVTY2FsYXJWYWx1ZShpbnQgdmFsdWUpIHsKICByZXR1cm4gdmFsdWUgPCAkRklSU1RfU1VSUk9HQVRFIHx8CiAgICAgICh2YWx1ZSA+ICRMQVNUX1NVUlJPR0FURSAmJiB2YWx1ZSA8PSAkTEFTVF9DT0RFX1BPSU5UKTsKfQoKYm9vbCBpc1V0ZjE2TGVhZFN1cnJvZ2F0ZShpbnQgdmFsdWUpIHsKICByZXR1cm4gdmFsdWUgPj0gMHhkODAwICYmIHZhbHVlIDw9IDB4ZGJmZjsKfQoKYm9vbCBpc1V0ZjE2VHJhaWxTdXJyb2dhdGUoaW50IHZhbHVlKSB7CiAgcmV0dXJuIHZhbHVlID49IDB4ZGMwMCAmJiB2YWx1ZSA8PSAweGRmZmY7Cn0KgJUATk48ASIBFBQTFBQWFBQXFhQWExkbFBwdFhYXFxgXExMTExMTExMTExcbFBQUGhQTExMTExMTExMTExMTExMTExMTExMTExMTEyUbJhcTGhMTExQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJRYmGBYXGBgBJSQnASI1AgElNxw3AgEiIDksLQIBJyU+AgEnLQIBKC0CATNwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2Nhbm5lci9jaGFyYWN0ZXJzLmRhcnQzc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3V0aWwvbGluay5kYXJ0lOMvLyBDb3B5cmlnaHQgKGMpIDIwMTEsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS51dGlsLmxpbms7CgppbXBvcnQgJ2xpbmtfaW1wbGVtZW50YXRpb24uZGFydCcKICAgIHNob3cgTGlua0J1aWxkZXJJbXBsZW1lbnRhdGlvbiwgTGlua0VudHJ5LCBMaW5rSXRlcmF0b3IsIE1hcHBlZExpbmtJdGVyYWJsZTsKCmNsYXNzIExpbms8VD4gaW1wbGVtZW50cyBJdGVyYWJsZTxUPiB7CiAgVCBnZXQgaGVhZCA9PiB0aHJvdyBuZXcgU3RhdGVFcnJvcigibm8gZWxlbWVudHMiKTsKICBMaW5rPFQ+IGdldCB0YWlsID0+IG51bGw7CgogIGNvbnN0IExpbmsoKTsKCiAgTGluazxUPiBwcmVwZW5kKFQgZWxlbWVudCkgewogICAgcmV0dXJuIG5ldyBMaW5rRW50cnk8VD4oZWxlbWVudCwgdGhpcyk7CiAgfQoKICBJdGVyYXRvcjxUPiBnZXQgaXRlcmF0b3IgPT4gbmV3IExpbmtJdGVyYXRvcjxUPih0aGlzKTsKCiAgdm9pZCBwcmludE9uKFN0cmluZ0J1ZmZlciBidWZmZXIsIFtzZXBhcmF0ZWRCeV0pIHt9CgogIExpc3Q8VD4gdG9MaXN0KHtib29sIGdyb3dhYmxlOiB0cnVlfSkgewogICAgTGlzdDxUPiByZXN1bHQ7CiAgICBpZiAoIWdyb3dhYmxlKSB7CiAgICAgIHJlc3VsdCA9IG5ldyBMaXN0PFQ+KHNsb3dMZW5ndGgoKSk7CiAgICB9IGVsc2UgewogICAgICByZXN1bHQgPSBuZXcgTGlzdDxUPigpOwogICAgICByZXN1bHQubGVuZ3RoID0gc2xvd0xlbmd0aCgpOwogICAgfQogICAgaW50IGkgPSAwOwogICAgZm9yIChMaW5rPFQ+IGxpbmsgPSB0aGlzOyAhbGluay5pc0VtcHR5OyBsaW5rID0gbGluay50YWlsKSB7CiAgICAgIHJlc3VsdFtpKytdID0gbGluay5oZWFkOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBMYXppbHkgbWFwcyBvdmVyIHRoaXMgbGlua2VkIGxpc3QsIHJldHVybmluZyBhbiBbSXRlcmFibGVdLgogIEl0ZXJhYmxlPEs+IG1hcDxLPihLIGZuKFQgaXRlbSkpIHsKICAgIHJldHVybiBuZXcgTWFwcGVkTGlua0l0ZXJhYmxlPFQsIEs+KHRoaXMsIGZuKTsKICB9CgogIC8vLyBJbnZva2VzIGBmbmAgZm9yIGV2ZXJ5IGl0ZW0gaW4gdGhlIGxpbmtlZCBsaXN0IGFuZCByZXR1cm5zIHRoZSByZXN1bHRzCiAgLy8vIGluIGEgW0xpc3RdLgogIExpc3Q8RT4gbWFwVG9MaXN0PEU+KEUgZm4oVCBpdGVtKSwge2Jvb2wgZ3Jvd2FibGU6IHRydWV9KSB7CiAgICBMaXN0PEU+IHJlc3VsdDsKICAgIGlmICghZ3Jvd2FibGUpIHsKICAgICAgcmVzdWx0ID0gbmV3IExpc3Q8RT4oc2xvd0xlbmd0aCgpKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlc3VsdCA9IG5ldyBMaXN0PEU+KCk7CiAgICAgIHJlc3VsdC5sZW5ndGggPSBzbG93TGVuZ3RoKCk7CiAgICB9CiAgICBpbnQgaSA9IDA7CiAgICBmb3IgKExpbms8VD4gbGluayA9IHRoaXM7ICFsaW5rLmlzRW1wdHk7IGxpbmsgPSBsaW5rLnRhaWwpIHsKICAgICAgcmVzdWx0W2krK10gPSBmbihsaW5rLmhlYWQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gdHJ1ZTsKICBib29sIGdldCBpc05vdEVtcHR5ID0+IGZhbHNlOwoKICBMaW5rPFQ+IHJldmVyc2UoTGluazxUPiB0YWlsKSA9PiB0aGlzOwoKICBMaW5rPFQ+IHJldmVyc2VQcmVwZW5kQWxsKExpbms8VD4gZnJvbSkgewogICAgaWYgKGZyb20uaXNFbXB0eSkgcmV0dXJuIHRoaXM7CiAgICByZXR1cm4gdGhpcy5wcmVwZW5kKGZyb20uaGVhZCkucmV2ZXJzZVByZXBlbmRBbGwoZnJvbS50YWlsKTsKICB9CgogIExpbms8VD4gc2tpcChpbnQgbikgewogICAgaWYgKG4gPT0gMCkgcmV0dXJuIHRoaXM7CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggJG4gb3V0IG9mIHJhbmdlJyk7CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBmKFQgZWxlbWVudCkpIHt9CgogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyEgTGluazxUPikgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIG90aGVyLmlzRW1wdHk7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdMaW5rLmhhc2hDb2RlJyk7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJbXSI7CgogIGdldCBsZW5ndGggewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ2dldDpsZW5ndGgnKTsKICB9CgogIGludCBzbG93TGVuZ3RoKCkgPT4gMDsKCiAgLy8gVE9ETyhhaGUpOiBSZW1vdmUgdGhpcyBtZXRob2Q/CiAgYm9vbCBjb250YWlucyhPYmplY3QgZWxlbWVudCkgewogICAgZm9yIChMaW5rPFQ+IGxpbmsgPSB0aGlzOyAhbGluay5pc0VtcHR5OyBsaW5rID0gbGluay50YWlsKSB7CiAgICAgIGlmIChsaW5rLmhlYWQgPT0gZWxlbWVudCkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLyBUT0RPKGFoZSk6IFJlbW92ZSB0aGlzIG1ldGhvZD8KICBUIGdldCBzaW5nbGUgewogICAgaWYgKGlzRW1wdHkpIHRocm93IG5ldyBTdGF0ZUVycm9yKCdObyBlbGVtZW50cycpOwogICAgaWYgKCF0YWlsLmlzRW1wdHkpIHRocm93IG5ldyBTdGF0ZUVycm9yKCdNb3JlIHRoYW4gb25lIGVsZW1lbnQnKTsKICAgIHJldHVybiBoZWFkOwogIH0KCiAgLy8gVE9ETyhhaGUpOiBSZW1vdmUgdGhpcyBtZXRob2Q/CiAgVCBnZXQgZmlyc3QgewogICAgaWYgKGlzRW1wdHkpIHRocm93IG5ldyBTdGF0ZUVycm9yKCdObyBlbGVtZW50cycpOwogICAgcmV0dXJuIGhlYWQ7CiAgfQoKICAvLy8gUmV0dXJucyB0cnVlIGlmIGYgcmV0dXJucyB0cnVlIGZvciBhbGwgZWxlbWVudHMgb2YgdGhpcyBsaXN0LgogIC8vLwogIC8vLyBSZXR1cm5zIHRydWUgZm9yIHRoZSBlbXB0eSBsaXN0LgogIGJvb2wgZXZlcnkoYm9vbCBmKFQgZSkpIHsKICAgIGZvciAoTGluazxUPiBsaW5rID0gdGhpczsgIWxpbmsuaXNFbXB0eTsgbGluayA9IGxpbmsudGFpbCkgewogICAgICBpZiAoIWYobGluay5oZWFkKSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLwogIC8vIFVuc3VwcG9ydGVkIEl0ZXJhYmxlPFQ+IG1ldGhvZHMuCiAgLy8KICBib29sIGFueShib29sIGYoVCBlKSkgPT4gX3Vuc3VwcG9ydGVkKCdhbnknKTsKICBJdGVyYWJsZTxUPiBjYXN0PFQ+KCkgPT4gX3Vuc3VwcG9ydGVkKCdjYXN0Jyk7CiAgVCBlbGVtZW50QXQoaW50IGkpID0+IF91bnN1cHBvcnRlZCgnZWxlbWVudEF0Jyk7CiAgSXRlcmFibGU8Sz4gZXhwYW5kPEs+KEl0ZXJhYmxlPEs+IGYoVCBlKSkgPT4gX3Vuc3VwcG9ydGVkKCdleHBhbmQnKTsKICBUIGZpcnN0V2hlcmUoYm9vbCBmKFQgZSksIHtUIG9yRWxzZSgpfSkgPT4gX3Vuc3VwcG9ydGVkKCdmaXJzdFdoZXJlJyk7CiAgSyBmb2xkPEs+KEsgaW5pdGlhbFZhbHVlLCBLIGNvbWJpbmUoSyB2YWx1ZSwgVCBlbGVtZW50KSkgewogICAgcmV0dXJuIF91bnN1cHBvcnRlZCgnZm9sZCcpOwogIH0KCiAgSXRlcmFibGU8VD4gZm9sbG93ZWRCeShJdGVyYWJsZTxUPiBvdGhlcikgPT4gX3Vuc3VwcG9ydGVkKCdmb2xsb3dlZEJ5Jyk7CiAgVCBnZXQgbGFzdCA9PiBfdW5zdXBwb3J0ZWQoJ2dldDpsYXN0Jyk7CiAgVCBsYXN0V2hlcmUoYm9vbCBmKFQgZSksIHtUIG9yRWxzZSgpfSkgPT4gX3Vuc3VwcG9ydGVkKCdsYXN0V2hlcmUnKTsKICBTdHJpbmcgam9pbihbc2VwYXJhdG9yID0gJyddKSA9PiBfdW5zdXBwb3J0ZWQoJ2pvaW4nKTsKICBUIHJlZHVjZShUIGNvbWJpbmUoVCBhLCBUIGIpKSA9PiBfdW5zdXBwb3J0ZWQoJ3JlZHVjZScpOwogIEl0ZXJhYmxlPFQ+IHJldHlwZTxUPigpID0+IF91bnN1cHBvcnRlZCgncmV0eXBlJyk7CiAgVCBzaW5nbGVXaGVyZShib29sIGYoVCBlKSwge1Qgb3JFbHNlKCl9KSA9PiBfdW5zdXBwb3J0ZWQoJ3NpbmdsZVdoZXJlJyk7CiAgSXRlcmFibGU8VD4gc2tpcFdoaWxlKGJvb2wgZihUIGUpKSA9PiBfdW5zdXBwb3J0ZWQoJ3NraXBXaGlsZScpOwogIEl0ZXJhYmxlPFQ+IHRha2UoaW50IG4pID0+IF91bnN1cHBvcnRlZCgndGFrZScpOwogIEl0ZXJhYmxlPFQ+IHRha2VXaGlsZShib29sIGYoVCBlKSkgPT4gX3Vuc3VwcG9ydGVkKCd0YWtlV2hpbGUnKTsKICBTZXQ8VD4gdG9TZXQoKSA9PiBfdW5zdXBwb3J0ZWQoJ3RvU2V0Jyk7CiAgSXRlcmFibGU8VD4gd2hlcmVUeXBlPFQ+KCkgPT4gX3Vuc3VwcG9ydGVkKCd3aGVyZVR5cGUnKTsKICBJdGVyYWJsZTxUPiB3aGVyZShib29sIGYoVCBlKSkgPT4gX3Vuc3VwcG9ydGVkKCd3aGVyZScpOwoKICBfdW5zdXBwb3J0ZWQoU3RyaW5nIG1ldGhvZCkgPT4gdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IobWV0aG9kKTsKfQoKLy8vIEJ1aWxkZXIgb2JqZWN0IGZvciBjcmVhdGluZyBsaW5rZWQgbGlzdHMgdXNpbmcgW0xpbmtdIG9yIGZpeGVkLWxlbmd0aCBbTGlzdF0KLy8vIG9iamVjdHMuCmFic3RyYWN0IGNsYXNzIExpbmtCdWlsZGVyPFQ+IHsKICBmYWN0b3J5IExpbmtCdWlsZGVyKCkgPSBMaW5rQnVpbGRlckltcGxlbWVudGF0aW9uPFQ+OwoKICAvLy8gUHJlcGVuZHMgYWxsIGVsZW1lbnRzIGFkZGVkIHRvIHRoZSBidWlsZGVyIHRvIFt0YWlsXS4gVGhlIHJlc3VsdGluZyBsaXN0CiAgLy8vIGlzIHJldHVybmVkIGFuZCB0aGUgYnVpbGRlciBpcyBjbGVhcmVkLgogIExpbms8VD4gdG9MaW5rKExpbms8VD4gdGFpbCk7CgogIC8vLyBDcmVhdGVzIGEgbmV3IGZpeGVkIGxlbmd0aCBjb250YWluaW5nIGFsbCBhZGRlZCBlbGVtZW50cy4gVGhlCiAgLy8vIHJlc3VsdGluZyBsaXN0IGlzIHJldHVybmVkIGFuZCB0aGUgYnVpbGRlciBpcyBjbGVhcmVkLgogIExpc3Q8VD4gdG9MaXN0KCk7CgogIC8vLyBBZGRzIHRoZSBlbGVtZW50IFt0XSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0IGJlaW5nIGJ1aWx0LgogIExpbms8VD4gYWRkTGFzdChUIHQpOwoKICAvLy8gUmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgbGlzdCBiZWluZyBidWlsdC4KICBUIGdldCBmaXJzdDsKCiAgLy8vIFJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgbGlzdCBiZWluZyBidWlsdC4KICBmaW5hbCBpbnQgbGVuZ3RoOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGxpc3QgYmVpbmcgYnVpbHQgaXMgZW1wdHkuCiAgZmluYWwgYm9vbCBpc0VtcHR5OwoKICAvLy8gUmVtb3ZlcyBhbGwgYWRkZWQgZWxlbWVudHMgYW5kIHJlc2V0cyB0aGUgYnVpbGRlci4KICB2b2lkIGNsZWFyKCk7Cn0KgLYATk48ARkBIlEBJzUcARABHywEATkBNgEqFBUqDR4kBg9BHwYTBAFCJTMEAU0TPhQVKg0eJAYPQSMGEwQBHCABKQEsI0EEARgdMwQBJQEcKRoEAUMBHQEPLgQBGQEkIkEtBhIEASQRNkYRBAEkEDYRBAFEBiccQScGEQQBBSYFMDEzR0k9IQQBSypHOTs1S0MzQys7OwFFAgFRDSA4AU8uIAFEPRQBPxgBOQ8BPhQBNxYBORACASpwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdXRpbC9saW5rLmRhcnRCc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3V0aWwvbGlua19pbXBsZW1lbnRhdGlvbi5kYXJ0klkvLyBDb3B5cmlnaHQgKGMpIDIwMTEsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS51dGlsLmxpbmtfaW1wbGVtZW50YXRpb247CgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbicgc2hvdyBJdGVyYWJsZUJhc2U7CgppbXBvcnQgJ2xpbmsuZGFydCcgc2hvdyBMaW5rLCBMaW5rQnVpbGRlcjsKCmNsYXNzIExpbmtJdGVyYXRvcjxUPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPFQ+IHsKICBUIF9jdXJyZW50OwogIExpbms8VD4gX2xpbms7CgogIExpbmtJdGVyYXRvcih0aGlzLl9saW5rKTsKCiAgVCBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChfbGluay5pc0VtcHR5KSB7CiAgICAgIF9jdXJyZW50ID0gbnVsbDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgX2N1cnJlbnQgPSBfbGluay5oZWFkOwogICAgX2xpbmsgPSBfbGluay50YWlsOwogICAgcmV0dXJuIHRydWU7CiAgfQp9Cgp0eXBlZGVmIFQgVHJhbnNmb3JtYXRpb248UywgVD4oUyBpbnB1dCk7CgpjbGFzcyBNYXBwZWRMaW5rSXRlcmF0b3I8UywgVD4gZXh0ZW5kcyBJdGVyYXRvcjxUPiB7CiAgVHJhbnNmb3JtYXRpb248UywgVD4gX3RyYW5zZm9ybWF0aW9uOwogIExpbms8Uz4gX2xpbms7CiAgVCBfY3VycmVudDsKCiAgTWFwcGVkTGlua0l0ZXJhdG9yKHRoaXMuX2xpbmssIHRoaXMuX3RyYW5zZm9ybWF0aW9uKTsKCiAgVCBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChfbGluay5pc0VtcHR5KSB7CiAgICAgIF9jdXJyZW50ID0gbnVsbDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgX2N1cnJlbnQgPSBfdHJhbnNmb3JtYXRpb24oX2xpbmsuaGVhZCk7CiAgICBfbGluayA9IF9saW5rLnRhaWw7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCmNsYXNzIE1hcHBlZExpbmtJdGVyYWJsZTxTLCBUPiBleHRlbmRzIEl0ZXJhYmxlQmFzZTxUPiB7CiAgVHJhbnNmb3JtYXRpb248UywgVD4gX3RyYW5zZm9ybWF0aW9uOwogIExpbms8Uz4gX2xpbms7CgogIE1hcHBlZExpbmtJdGVyYWJsZSh0aGlzLl9saW5rLCB0aGlzLl90cmFuc2Zvcm1hdGlvbik7CgogIEl0ZXJhdG9yPFQ+IGdldCBpdGVyYXRvciB7CiAgICByZXR1cm4gbmV3IE1hcHBlZExpbmtJdGVyYXRvcjxTLCBUPihfbGluaywgX3RyYW5zZm9ybWF0aW9uKTsKICB9Cn0KCmNsYXNzIExpbmtFbnRyeTxUPiBleHRlbmRzIExpbms8VD4gewogIGZpbmFsIFQgaGVhZDsKICBMaW5rPFQ+IHRhaWw7CgogIExpbmtFbnRyeSh0aGlzLmhlYWQsIFtMaW5rPFQ+IHRhaWxdKSA6IHRhaWwgPSB0YWlsID8/IGNvbnN0IExpbms8TnVsbD4oKTsKCiAgTGluazxUPiBwcmVwZW5kKFQgZWxlbWVudCkgewogICAgLy8gVE9ETyhhaGUpOiBVc2UgbmV3IExpbms8VD4sIGJ1dCB0aGlzIGNvc3QgOCUgcGVyZm9ybWFuY2Ugb24gVk0uCiAgICByZXR1cm4gbmV3IExpbmtFbnRyeTxUPihlbGVtZW50LCB0aGlzKTsKICB9CgogIHZvaWQgcHJpbnRPbihTdHJpbmdCdWZmZXIgYnVmZmVyLCBbc2VwYXJhdGVkQnldKSB7CiAgICBidWZmZXIud3JpdGUoaGVhZCk7CiAgICBpZiAoc2VwYXJhdGVkQnkgPT0gbnVsbCkgc2VwYXJhdGVkQnkgPSAnJzsKICAgIGZvciAoTGluazxUPiBsaW5rID0gdGFpbDsgbGluay5pc05vdEVtcHR5OyBsaW5rID0gbGluay50YWlsKSB7CiAgICAgIGJ1ZmZlci53cml0ZShzZXBhcmF0ZWRCeSk7CiAgICAgIGJ1ZmZlci53cml0ZShsaW5rLmhlYWQpOwogICAgfQogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGJ1ZmZlci53cml0ZSgnWyAnKTsKICAgIHByaW50T24oYnVmZmVyLCAnLCAnKTsKICAgIGJ1ZmZlci53cml0ZSgnIF0nKTsKICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIEBvdmVycmlkZQogIExpbms8VD4gcmV2ZXJzZShMaW5rPFQ+IHRhaWwpIHsKICAgIExpbms8VD4gcmVzdWx0ID0gdGFpbDsKICAgIGZvciAoTGluazxUPiBsaW5rID0gdGhpczsgbGluay5pc05vdEVtcHR5OyBsaW5rID0gbGluay50YWlsKSB7CiAgICAgIHJlc3VsdCA9IHJlc3VsdC5wcmVwZW5kKGxpbmsuaGVhZCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgTGluazxUPiByZXZlcnNlUHJlcGVuZEFsbChMaW5rPFQ+IGZyb20pIHsKICAgIExpbms8VD4gcmVzdWx0OwogICAgZm9yIChyZXN1bHQgPSB0aGlzOyBmcm9tLmlzTm90RW1wdHk7IGZyb20gPSBmcm9tLnRhaWwpIHsKICAgICAgcmVzdWx0ID0gcmVzdWx0LnByZXBlbmQoZnJvbS5oZWFkKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBMaW5rPFQ+IHNraXAoaW50IG4pIHsKICAgIExpbms8VD4gbGluayA9IHRoaXM7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICBpZiAobGluay5pc0VtcHR5KSB7CiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4ICRuIG91dCBvZiByYW5nZScpOwogICAgICB9CiAgICAgIGxpbmsgPSBsaW5rLnRhaWw7CiAgICB9CiAgICByZXR1cm4gbGluazsKICB9CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiB0cnVlOwoKICB2b2lkIGZvckVhY2godm9pZCBmKFQgZWxlbWVudCkpIHsKICAgIGZvciAoTGluazxUPiBsaW5rID0gdGhpczsgbGluay5pc05vdEVtcHR5OyBsaW5rID0gbGluay50YWlsKSB7CiAgICAgIGYobGluay5oZWFkKTsKICAgIH0KICB9CgogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyEgTGluazxUPikgcmV0dXJuIGZhbHNlOwogICAgTGluazxUPiBteUVsZW1lbnRzID0gdGhpczsKICAgIHdoaWxlIChteUVsZW1lbnRzLmlzTm90RW1wdHkgJiYgb3RoZXIuaXNOb3RFbXB0eSkgewogICAgICBpZiAobXlFbGVtZW50cy5oZWFkICE9IG90aGVyLmhlYWQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgbXlFbGVtZW50cyA9IG15RWxlbWVudHMudGFpbDsKICAgICAgb3RoZXIgPSBvdGhlci50YWlsOwogICAgfQogICAgcmV0dXJuIG15RWxlbWVudHMuaXNFbXB0eSAmJiBvdGhlci5pc0VtcHR5OwogIH0KCiAgaW50IGdldCBoYXNoQ29kZSA9PiB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignTGlua0VudHJ5Lmhhc2hDb2RlJyk7CgogIGludCBzbG93TGVuZ3RoKCkgewogICAgaW50IGxlbmd0aCA9IDA7CiAgICBmb3IgKExpbms8VD4gY3VycmVudCA9IHRoaXM7IGN1cnJlbnQuaXNOb3RFbXB0eTsgY3VycmVudCA9IGN1cnJlbnQudGFpbCkgewogICAgICArK2xlbmd0aDsKICAgIH0KICAgIHJldHVybiBsZW5ndGg7CiAgfQp9CgpjbGFzcyBMaW5rQnVpbGRlckltcGxlbWVudGF0aW9uPFQ+IGltcGxlbWVudHMgTGlua0J1aWxkZXI8VD4gewogIExpbmtFbnRyeTxUPiBoZWFkID0gbnVsbDsKICBMaW5rRW50cnk8VD4gbGFzdExpbmsgPSBudWxsOwogIGludCBsZW5ndGggPSAwOwoKICBMaW5rQnVpbGRlckltcGxlbWVudGF0aW9uKCk7CgogIEBvdmVycmlkZQogIExpbms8VD4gdG9MaW5rKExpbms8VD4gdGFpbCkgewogICAgaWYgKGhlYWQgPT0gbnVsbCkgcmV0dXJuIHRhaWw7CiAgICBsYXN0TGluay50YWlsID0gdGFpbDsKICAgIExpbms8VD4gbGluayA9IGhlYWQ7CiAgICBsYXN0TGluayA9IG51bGw7CiAgICBoZWFkID0gbnVsbDsKICAgIGxlbmd0aCA9IDA7CiAgICByZXR1cm4gbGluazsKICB9CgogIExpc3Q8VD4gdG9MaXN0KCkgewogICAgaWYgKGxlbmd0aCA9PSAwKSByZXR1cm4gbmV3IExpc3Q8VD4oMCk7CiAgICBMaXN0PFQ+IGxpc3QgPSBuZXcgTGlzdDxUPihsZW5ndGgpOwogICAgaW50IGluZGV4ID0gMDsKICAgIExpbms8VD4gbGluayA9IGhlYWQ7CiAgICB3aGlsZSAobGluay5pc05vdEVtcHR5KSB7CiAgICAgIGxpc3RbaW5kZXhdID0gbGluay5oZWFkOwogICAgICBsaW5rID0gbGluay50YWlsOwogICAgICBpbmRleCsrOwogICAgfQogICAgbGFzdExpbmsgPSBudWxsOwogICAgaGVhZCA9IG51bGw7CiAgICBsZW5ndGggPSAwOwogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBMaW5rPFQ+IGFkZExhc3QoVCB0KSB7CiAgICBsZW5ndGgrKzsKICAgIExpbmtFbnRyeTxUPiBlbnRyeSA9IG5ldyBMaW5rRW50cnk8VD4odCwgbnVsbCk7CiAgICBpZiAoaGVhZCA9PSBudWxsKSB7CiAgICAgIGhlYWQgPSBlbnRyeTsKICAgIH0gZWxzZSB7CiAgICAgIGxhc3RMaW5rLnRhaWwgPSBlbnRyeTsKICAgIH0KICAgIGxhc3RMaW5rID0gZW50cnk7CiAgICByZXR1cm4gZW50cnk7CiAgfQoKICBib29sIGdldCBpc0VtcHR5ID0+IGxlbmd0aCA9PSAwOwoKICBUIGdldCBmaXJzdCB7CiAgICBpZiAoaGVhZCAhPSBudWxsKSB7CiAgICAgIHJldHVybiBoZWFkLmhlYWQ7CiAgICB9CiAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigibm8gZWxlbWVudHMiKTsKICB9CgogIHZvaWQgY2xlYXIoKSB7CiAgICBoZWFkID0gbnVsbDsKICAgIGxhc3RMaW5rID0gbnVsbDsKICAgIGxlbmd0aCA9IDA7CiAgfQp9CoDWAE5OPAEoASwBKwEvDhEBHAEdARQZFxQGGxgRBAIBKQE1KBEOATgBHQEUGRcUBiwYEQQCATkoEQE4AR1BBAIBJRAQAUwBH0csBAE1GC9DIR8GBAEWLhgbGB4EAQwiG0MqBhMEASwUPSoGEwQBGBkiGjcIGAYRBAEdHwEkQxQGBAEcKR84KxYIJBoGMAQBSAEVFE8QBhMEAgE/HCASAR8BDCEjGhkVERARBAEVLCgTGR4fGA8GFREQEQQBGQ40GBQNHQYWEgQBIwEQGBgGKQQBEREVEAQCATlwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdXRpbC9saW5rX2ltcGxlbWVudGF0aW9uLmRhcnQ5c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3V0aWwvcmVsYXRpdml6ZS5kYXJ0iIEvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS51dGlsLnJlbGF0aXZpemU7CgppbXBvcnQgJ2RhcnQ6bWF0aCc7CgpTdHJpbmcgcmVsYXRpdml6ZVVyaShVcmkgYmFzZSwgVXJpIHVyaSwgYm9vbCBpc1dpbmRvd3MpIHsKICBib29sIGVxdWFsc05DUyhTdHJpbmcgYSwgU3RyaW5nIGIpIHsKICAgIHJldHVybiBhLnRvTG93ZXJDYXNlKCkgPT0gYi50b0xvd2VyQ2FzZSgpOwogIH0KCiAgaWYgKCFlcXVhbHNOQ1MoYmFzZS5zY2hlbWUsIHVyaS5zY2hlbWUpIHx8CiAgICAgIGVxdWFsc05DUyhiYXNlLnNjaGVtZSwgJ2RhcnQnKSB8fAogICAgICBlcXVhbHNOQ1MoYmFzZS5zY2hlbWUsICdwYWNrYWdlJykpIHsKICAgIHJldHVybiB1cmkudG9TdHJpbmcoKTsKICB9CgogIGlmICghZXF1YWxzTkNTKGJhc2Uuc2NoZW1lLCAnZmlsZScpKSB7CiAgICBpc1dpbmRvd3MgPSBmYWxzZTsKICB9CgogIFN0cmluZyBub3JtYWxpemUoU3RyaW5nIHBhdGgpIHsKICAgIGlmIChpc1dpbmRvd3MpIHsKICAgICAgcmV0dXJuIHBhdGgudG9Mb3dlckNhc2UoKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBwYXRoOwogICAgfQogIH0KCiAgaWYgKGJhc2UudXNlckluZm8gPT0gdXJpLnVzZXJJbmZvICYmCiAgICAgIGVxdWFsc05DUyhiYXNlLmhvc3QsIHVyaS5ob3N0KSAmJgogICAgICBiYXNlLnBvcnQgPT0gdXJpLnBvcnQgJiYKICAgICAgdXJpLnF1ZXJ5ID09ICIiICYmCiAgICAgIHVyaS5mcmFnbWVudCA9PSAiIikgewogICAgaWYgKG5vcm1hbGl6ZSh1cmkucGF0aCkuc3RhcnRzV2l0aChub3JtYWxpemUoYmFzZS5wYXRoKSkpIHsKICAgICAgcmV0dXJuIHVyaS5wYXRoLnN1YnN0cmluZyhiYXNlLnBhdGgubGFzdEluZGV4T2YoJy8nKSArIDEpOwogICAgfQoKICAgIGlmICghYmFzZS5wYXRoLnN0YXJ0c1dpdGgoJy8nKSB8fCAhdXJpLnBhdGguc3RhcnRzV2l0aCgnLycpKSB7CiAgICAgIHJldHVybiB1cmkudG9TdHJpbmcoKTsKICAgIH0KCiAgICBMaXN0PFN0cmluZz4gdXJpUGFydHMgPSB1cmkucGF0aC5zcGxpdCgnLycpOwogICAgTGlzdDxTdHJpbmc+IGJhc2VQYXJ0cyA9IGJhc2UucGF0aC5zcGxpdCgnLycpOwogICAgaW50IGNvbW1vbiA9IDA7CiAgICBpbnQgbGVuZ3RoID0gbWluKHVyaVBhcnRzLmxlbmd0aCwgYmFzZVBhcnRzLmxlbmd0aCk7CiAgICB3aGlsZSAoY29tbW9uIDwgbGVuZ3RoICYmCiAgICAgICAgbm9ybWFsaXplKHVyaVBhcnRzW2NvbW1vbl0pID09IG5vcm1hbGl6ZShiYXNlUGFydHNbY29tbW9uXSkpIHsKICAgICAgY29tbW9uKys7CiAgICB9CiAgICBpZiAoY29tbW9uID09IDEgfHwgKGlzV2luZG93cyAmJiBjb21tb24gPT0gMikpIHsKICAgICAgLy8gVGhlIGZpcnN0IHBhcnQgd2lsbCBhbHdheXMgYmUgYW4gZW1wdHkgc3RyaW5nIGJlY2F1c2UgdGhlCiAgICAgIC8vIHBhdGhzIGFyZSBhYnNvbHV0ZS4gT24gV2luZG93cywgd2UgbXVzdCBhbHNvIGNvbnNpZGVyIGRyaXZlCiAgICAgIC8vIGxldHRlcnMgb3IgaG9zdG5hbWVzLgogICAgICBpZiAoYmFzZVBhcnRzLmxlbmd0aCA+IGNvbW1vbiArIDEpIHsKICAgICAgICAvLyBBdm9pZCB1c2luZyAnLi4nIHRvIGdvIHRvIHRoZSByb290LCB1bmxlc3Mgd2UgYXJlIGFscmVhZHkgdGhlcmUuCiAgICAgICAgcmV0dXJuIHVyaS5wYXRoOwogICAgICB9CiAgICB9CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBmb3IgKGludCBpID0gY29tbW9uICsgMTsgaSA8IGJhc2VQYXJ0cy5sZW5ndGg7IGkrKykgewogICAgICBzYi53cml0ZSgnLi4vJyk7CiAgICB9CiAgICBmb3IgKGludCBpID0gY29tbW9uOyBpIDwgdXJpUGFydHMubGVuZ3RoIC0gMTsgaSsrKSB7CiAgICAgIHNiLndyaXRlKCcke3VyaVBhcnRzW2ldfS8nKTsKICAgIH0KICAgIHNiLndyaXRlKCcke3VyaVBhcnRzLmxhc3R9Jyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CiAgcmV0dXJuIHVyaS50b1N0cmluZygpOwp9CksATk48AR8BFAE6Jy8EAS0oKxsEASkXBAEiFSENEwYEAScoHxkcQEEGAUMdBgExMxQ5HkcQBjVDRR8rTBkIBio6FwY5IwYiGgQZAgEwcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3V0aWwvcmVsYXRpdml6ZS5kYXJ0J3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvY29tcGlsZXIuZGFydJsTLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgY29tcGlsZXI7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnOwoKaW1wb3J0ICdjb21waWxlcl9uZXcuZGFydCcgYXMgbmV3X2FwaTsKaW1wb3J0ICdzcmMvb2xkX3RvX25ld19hcGkuZGFydCc7CmltcG9ydCAnc3JjL29wdGlvbnMuZGFydCcgc2hvdyBDb21waWxlck9wdGlvbnM7CgovLyBVbmxlc3MgZXhwbGljaXRseSBhbGxvd2VkLCBwYXNzaW5nIFs6bnVsbDpdIGZvciBhbnkgYXJndW1lbnQgdG8gdGhlCi8vIG1ldGhvZHMgb2YgbGlicmFyeSB3aWxsIHJlc3VsdCBpbiBhbiBFcnJvciBiZWluZyB0aHJvd24uCgovLy8gUmV0dXJucyBhIGZ1dHVyZSB0aGF0IGNvbXBsZXRlcyB0byB0aGUgc291cmNlIGNvcnJlc3BvbmRpbmcgdG8gW3VyaV0uCi8vLyBJZiBhbiBleGNlcHRpb24gb2NjdXJzLCB0aGUgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIHRoaXMgZXhjZXB0aW9uLgovLy8KLy8vIFRoZSBzb3VyY2UgY2FuIGJlIHJlcHJlc2VudGVkIGVpdGhlciBhcyBhIFs6TGlzdDxpbnQ+Ol0gb2YgVVRGLTggYnl0ZXMgb3IgYXMKLy8vIGEgW1N0cmluZ10uCi8vLwovLy8gVGhlIGZvbGxvd2luZyB0ZXh0IGlzIG5vbi1ub3JtYXRpdmU6Ci8vLwovLy8gSXQgaXMgcmVjb21tZW5kZWQgdG8gcmV0dXJuIGEgVVRGLTggZW5jb2RlZCBsaXN0IG9mIGJ5dGVzIGJlY2F1c2UgdGhlCi8vLyBzY2FubmVyIGlzIG1vcmUgZWZmaWNpZW50IGluIHRoaXMgY2FzZS4gSW4gZWl0aGVyIGNhc2UsIHRoZSBkYXRhIHN0cnVjdHVyZQovLy8gaXMgZXhwZWN0ZWQgdG8gaG9sZCBhIHplcm8gZWxlbWVudCBhdCB0aGUgbGFzdCBwb3NpdGlvbi4gSWYgdGhpcyBpcyBub3QgdGhlCi8vLyBjYXNlLCB0aGUgZW50aXJlIGRhdGEgc3RydWN0dXJlIGlzIGNvcGllZCBiZWZvcmUgc2Nhbm5pbmcuCnR5cGVkZWYgRnV0dXJlIC8qIDxTdHJpbmcgfCBMaXN0PGludD4+ICovIENvbXBpbGVySW5wdXRQcm92aWRlcihVcmkgdXJpKTsKCi8vLyBEZXByZWNhdGVkLCBwbGVhc2UgdXNlIFtDb21waWxlcklucHV0UHJvdmlkZXJdIGluc3RlYWQuCnR5cGVkZWYgRnV0dXJlPFN0cmluZz4gUmVhZFN0cmluZ0Zyb21VcmkoVXJpIHVyaSk7CgovLy8gUmV0dXJucyBhbiBbRXZlbnRTaW5rXSB0aGF0IHdpbGwgc2VydmUgYXMgY29tcGlsZXIgb3V0cHV0IGZvciB0aGUgZ2l2ZW4KLy8vIGNvbXBvbmVudC4KLy8vCi8vLyBDb21wb25lbnRzIGFyZSBpZGVudGlmaWVkIGJ5IFtuYW1lXSBhbmQgW2V4dGVuc2lvbl0uIEJ5IGNvbnZlbnRpb24sCi8vLyB0aGUgZW1wdHkgc3RyaW5nIFs6IiI6XSB3aWxsIHJlcHJlc2VudCB0aGUgbWFpbiBzY3JpcHQKLy8vIChjb3JyZXNwb25kaW5nIHRvIHRoZSBzY3JpcHQgcGFyYW1ldGVyIG9mIFtjb21waWxlXSkgZXZlbiBpZiB0aGUKLy8vIG1haW4gc2NyaXB0IGlzIGEgbGlicmFyeS4gRm9yIGxpYnJhcmllcyB0aGF0IGFyZSBjb21waWxlZAovLy8gc2VwYXJhdGVseSwgdGhlIGxpYnJhcnkgbmFtZSBpcyB1c2VkLgovLy8KLy8vIEF0IGxlYXN0IHRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9ucyBjYW4gYmUgZXhwZWN0ZWQ6Ci8vLwovLy8gKiAianMiIGZvciBKYXZhU2NyaXB0IG91dHB1dC4KLy8vICogImpzLm1hcCIgZm9yIHNvdXJjZSBtYXBzLgovLy8gKiAiZGFydCIgZm9yIERhcnQgb3V0cHV0LgovLy8gKiAiZGFydC5tYXAiIGZvciBzb3VyY2UgbWFwcy4KLy8vCi8vLyBBcyBtb3JlIGZlYXR1cmVzIGFyZSBhZGRlZCB0byB0aGUgY29tcGlsZXIsIG5ldyBuYW1lcyBhbmQKLy8vIGV4dGVuc2lvbnMgbWF5IGJlIGludHJvZHVjZWQuCnR5cGVkZWYgRXZlbnRTaW5rPFN0cmluZz4gQ29tcGlsZXJPdXRwdXRQcm92aWRlcihTdHJpbmcgbmFtZSwgU3RyaW5nIGV4dGVuc2lvbik7CgovLy8gSW52b2tlZCBieSB0aGUgY29tcGlsZXIgdG8gcmVwb3J0IGRpYWdub3N0aWNzLiBJZiBbdXJpXSBpcwovLy8gWzpudWxsOl0sIHNvIGFyZSBbYmVnaW5dIGFuZCBbZW5kXS4gTm8gb3RoZXIgYXJndW1lbnRzIG1heSBiZQovLy8gWzpudWxsOl0uIElmIFt1cmldIGlzIG5vdCBbOm51bGw6XSwgbmVpdGhlciBhcmUgW2JlZ2luXSBhbmQKLy8vIFtlbmRdLiBbdXJpXSBpbmRpY2F0ZXMgdGhlIGNvbXBpbGF0aW9uIHVuaXQgZnJvbSB3aGVyZSB0aGUKLy8vIGRpYWdub3N0aWMgb3JpZ2luYXRlcy4gW2JlZ2luXSBhbmQgW2VuZF0gYXJlIHplcm8tYmFzZWQgY2hhcmFjdGVyCi8vLyBvZmZzZXRzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgY29tcGlsYXRpb24gdW5pdC4gW21lc3NhZ2VdIGlzIHRoZQovLy8gZGlhZ25vc3RpYyBtZXNzYWdlLCBhbmQgW2tpbmRdIGluZGljYXRlcyBpbmRpY2F0ZXMgd2hhdCBraW5kIG9mCi8vLyBkaWFnbm9zdGljIGl0IGlzLgp0eXBlZGVmIHZvaWQgRGlhZ25vc3RpY0hhbmRsZXIoCiAgICBVcmkgdXJpLCBpbnQgYmVnaW4sIGludCBlbmQsIFN0cmluZyBtZXNzYWdlLCBEaWFnbm9zdGljIGtpbmQpOwoKLy8vIEluZm9ybWF0aW9uIHJlc3VsdGluZyBmcm9tIHRoZSBjb21waWxhdGlvbi4KY2xhc3MgQ29tcGlsYXRpb25SZXN1bHQgewogIC8vLyBgdHJ1ZWAgaWYgdGhlIGNvbXBpbGF0aW9uIHN1Y2NlZWRlZCwgdGhhdCBpcywgY29tcGlsYXRpb24gZGlkbid0IGZhaWwgZHVlCiAgLy8vIHRvIGNvbXBpbGUtdGltZSBlcnJvcnMgYW5kL29yIGludGVybmFsIGVycm9ycy4KICBmaW5hbCBib29sIGlzU3VjY2VzczsKCiAgLy8vIFRoZSBjb21waWxlciBvYmplY3QgdXNlZCBmb3IgdGhlIGNvbXBpbGF0aW9uLgogIC8vLwogIC8vLyBOb3RlOiBUaGUgdHlwZSBvZiBbY29tcGlsZXJdIGlzIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudCBhbmQgbWF5IHZhcnkuCiAgLy8vIFVzZSBvbmx5IGZvciBkZWJ1Z2dpbmcgYW5kIHRlc3RpbmcuCiAgZmluYWwgY29tcGlsZXI7CgogIENvbXBpbGF0aW9uUmVzdWx0KHRoaXMuY29tcGlsZXIsIHt0aGlzLmlzU3VjY2VzczogdHJ1ZX0pOwp9CgovLy8gUmV0dXJucyBhIGZ1dHVyZSB0aGF0IGNvbXBsZXRlcyB0byBhIG5vbi1udWxsIFN0cmluZyB3aGVuIFtzY3JpcHRdCi8vLyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY29tcGlsZWQuCi8vLwovLy8gVGhlIGNvbXBpbGVyIG91dHB1dCBpcyBvYnRhaW5lZCBieSBwcm92aWRpbmcgYW4gW291dHB1dFByb3ZpZGVyXS4KLy8vCi8vLyBJZiB0aGUgY29tcGlsYXRpb24gZmFpbHMsIHRoZSBmdXR1cmUncyB2YWx1ZSB3aWxsIGJlIFs6bnVsbDpdIGFuZAovLy8gW2hhbmRsZXJdIHdpbGwgaGF2ZSBiZWVuIGludm9rZWQgYXQgbGVhc3Qgb25jZSB3aXRoIFs6a2luZCA9PQovLy8gRGlhZ25vc3RpYy5FUlJPUjpdIG9yIFs6a2luZCA9PSBEaWFnbm9zdGljLkNSQVNIOl0uCi8vLwovLy8gRGVwcmVjYXRlZDogaWYgbm8gW291dHB1dFByb3ZpZGVyXSBpcyBnaXZlbiwgdGhlIGZ1dHVyZSBjb21wbGV0ZXMKLy8vIHRvIHRoZSBjb21waWxlZCBzY3JpcHQuIFRoaXMgYmVoYXZpb3Igd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUKLy8vIGFzIHRoZSBjb21waWxlciBtYXkgY3JlYXRlIG11bHRpcGxlIGZpbGVzIHRvIHN1cHBvcnQgbGF6eSBsb2FkaW5nCi8vLyBvZiBsaWJyYXJpZXMuCkZ1dHVyZTxDb21waWxhdGlvblJlc3VsdD4gY29tcGlsZSgKICAgIFVyaSBzY3JpcHQsCiAgICBVcmkgbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaSwKICAgIFVyaSBwYWNrYWdlUm9vdCwKICAgIENvbXBpbGVySW5wdXRQcm92aWRlciBpbnB1dFByb3ZpZGVyLAogICAgRGlhZ25vc3RpY0hhbmRsZXIgaGFuZGxlciwKICAgIFtMaXN0PFN0cmluZz4gb3B0aW9ucyA9IGNvbnN0IFtdLAogICAgQ29tcGlsZXJPdXRwdXRQcm92aWRlciBvdXRwdXRQcm92aWRlciwKICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQgPSBjb25zdCB7fSwKICAgIFVyaSBwYWNrYWdlQ29uZmlnXSkgewogIENvbXBpbGVyT3B0aW9ucyBjb21waWxlck9wdGlvbnMgPSBDb21waWxlck9wdGlvbnMucGFyc2Uob3B0aW9ucywKICAgICAgbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaTogbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaSkKICAgIC4uZW50cnlQb2ludCA9IHNjcmlwdAogICAgLi5wYWNrYWdlUm9vdCA9IHBhY2thZ2VSb290CiAgICAuLnBhY2thZ2VDb25maWcgPSBwYWNrYWdlQ29uZmlnCiAgICAuLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7CgogIG5ld19hcGkuQ29tcGlsZXJJbnB1dCBjb21waWxlcklucHV0ID0gbmV3IExlZ2FjeUNvbXBpbGVySW5wdXQoaW5wdXRQcm92aWRlcik7CiAgbmV3X2FwaS5Db21waWxlckRpYWdub3N0aWNzIGNvbXBpbGVyRGlhZ25vc3RpY3MgPQogICAgICBuZXcgTGVnYWN5Q29tcGlsZXJEaWFnbm9zdGljcyhoYW5kbGVyKTsKICBuZXdfYXBpLkNvbXBpbGVyT3V0cHV0IGNvbXBpbGVyT3V0cHV0ID0KICAgICAgbmV3IExlZ2FjeUNvbXBpbGVyT3V0cHV0KG91dHB1dFByb3ZpZGVyKTsKCiAgcmV0dXJuIG5ld19hcGkKICAgICAgLmNvbXBpbGUoCiAgICAgICAgICBjb21waWxlck9wdGlvbnMsIGNvbXBpbGVySW5wdXQsIGNvbXBpbGVyRGlhZ25vc3RpY3MsIGNvbXBpbGVyT3V0cHV0KQogICAgICAudGhlbigobmV3X2FwaS5Db21waWxhdGlvblJlc3VsdCByZXN1bHQpIHsKICAgIHJldHVybiBuZXcgQ29tcGlsYXRpb25SZXN1bHQocmVzdWx0LmNvbXBpbGVyLCBpc1N1Y2Nlc3M6IHJlc3VsdC5pc1N1Y2Nlc3MpOwogIH0pOwp9CgovLy8gS2luZCBvZiBkaWFnbm9zdGljcyB0aGF0IHRoZSBjb21waWxlciBjYW4gcmVwb3J0LgpjbGFzcyBEaWFnbm9zdGljIHsKICAvLy8gQW4gZXJyb3IgYXMgaWRlbnRpZmllZCBieSB0aGUgIkRhcnQgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UKICAvLy8gU3BlY2lmaWNhdGlvbiIgW2h0dHA6Ly93d3cuZGFydGxhbmcub3JnL2RvY3Mvc3BlYy9dLgogIC8vLwogIC8vLyBOb3RlOiB0aGUgY29tcGlsZXIgbWF5IHN0aWxsIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSByZXN1bHQgYWZ0ZXIKICAvLy8gcmVwb3J0aW5nIGEgY29tcGlsYXRpb24gZXJyb3IuIFRoZSBzcGVjaWZpY2F0aW9uIHNheXM6CiAgLy8vCiAgLy8vICJBIGNvbXBpbGUtdGltZSBlcnJvciBtdXN0IGJlIHJlcG9ydGVkIGJ5IGEgRGFydCBjb21waWxlciBiZWZvcmUKICAvLy8gdGhlIGVycm9uZW91cyBjb2RlIGlzIGV4ZWN1dGVkLiIgYW5kICJJZiBhIGNvbXBpbGUtdGltZSBlcnJvcgogIC8vLyBvY2N1cnMgd2l0aGluIHRoZSBjb2RlIG9mIGEgcnVubmluZyBpc29sYXRlIEEsIEEgaXMgaW1tZWRpYXRlbHkKICAvLy8gc3VzcGVuZGVkLiIKICAvLy8KICAvLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBjb21waWxlciBjYW4gZ2VuZXJhdGUgY29kZSB0aGF0IHdoZW4gZXhlY3V0ZWQKICAvLy8gdGVybWluYXRlcyBleGVjdXRpb24uCiAgc3RhdGljIGNvbnN0IERpYWdub3N0aWMgRVJST1IgPSBjb25zdCBEaWFnbm9zdGljKDEsICdlcnJvcicpOwoKICAvLy8gQSB3YXJuaW5nIGFzIGlkZW50aWZpZWQgYnkgdGhlICJEYXJ0IFByb2dyYW1taW5nIExhbmd1YWdlCiAgLy8vIFNwZWNpZmljYXRpb24iIFtodHRwOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL3NwZWMvXS4KICBzdGF0aWMgY29uc3QgRGlhZ25vc3RpYyBXQVJOSU5HID0gY29uc3QgRGlhZ25vc3RpYygyLCAnd2FybmluZycpOwoKICAvLy8gQW55IG90aGVyIHdhcm5pbmcgdGhhdCBpcyBub3QgY292ZXJlZCBieSBbV0FSTklOR10uCiAgc3RhdGljIGNvbnN0IERpYWdub3N0aWMgSElOVCA9IGNvbnN0IERpYWdub3N0aWMoNCwgJ2hpbnQnKTsKCiAgLy8vIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByZWNlZGluZyBub24taW5mbyBkaWFnbm9zdGljIGZyb20gdGhlCiAgLy8vIGNvbXBpbGVyLgogIC8vLwogIC8vLyBGb3IgZXhhbXBsZSwgY29uc2lkZXIgYSBkdXBsaWNhdGVkIGRlZmluaXRpb24uIFRoZSBjb21waWxlciBmaXJzdCBlbWl0cyBhCiAgLy8vIG1lc3NhZ2UgYWJvdXQgdGhlIGR1cGxpY2F0ZWQgZGVmaW5pdGlvbiwgdGhlbiBlbWl0cyBhbiBpbmZvIG1lc3NhZ2UgYWJvdXQKICAvLy8gdGhlIGxvY2F0aW9uIG9mIHRoZSBleGlzdGluZyBkZWZpbml0aW9uLgogIHN0YXRpYyBjb25zdCBEaWFnbm9zdGljIElORk8gPSBjb25zdCBEaWFnbm9zdGljKDgsICdpbmZvJyk7CgogIC8vLyBJbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIHRoYXQgc2hvdWxkbid0IGJlIHByaW50ZWQgdW5sZXNzCiAgLy8vIGV4cGxpY2l0bHkgcmVxdWVzdGVkIGJ5IHRoZSB1c2VyIG9mIGEgY29tcGlsZXIuCiAgc3RhdGljIGNvbnN0IERpYWdub3N0aWMgVkVSQk9TRV9JTkZPID0gY29uc3QgRGlhZ25vc3RpYygxNiwgJ3ZlcmJvc2UgaW5mbycpOwoKICAvLy8gQW4gaW50ZXJuYWwgZXJyb3IgaW4gdGhlIGNvbXBpbGVyLgogIHN0YXRpYyBjb25zdCBEaWFnbm9zdGljIENSQVNIID0gY29uc3QgRGlhZ25vc3RpYygzMiwgJ2NyYXNoJyk7CgogIC8vLyBBbiBbaW50XSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGtpbmQuIFRoZSBvcmRpbmFscyBhcmUgZGVzaWduZWQKICAvLy8gdG8gYmUgdXNlZCBhcyBiaXRzZXRzLgogIGZpbmFsIGludCBvcmRpbmFsOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhpcyBraW5kLgogIGZpbmFsIFN0cmluZyBuYW1lOwoKICAvLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyBub3QgcHJpdmF0ZSB0byBzdXBwb3J0IHVzZXItZGVmaW5lZAogIC8vLyBkaWFnbm9zdGljIGtpbmRzLgogIGNvbnN0IERpYWdub3N0aWModGhpcy5vcmRpbmFsLCB0aGlzLm5hbWUpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBuYW1lOwp9CoCxAE5OPAESARUBJyIwAUc8AUpGBFEQBCkESk9QP0oBPDMBTA8ESDtFPioENwQiIB4iBD4iUQE/QkA/RklEFiBDATAaUDUYATQGTSoSATwCAUckBEYERkI4BEZIRhIjECMVKR8mKzAaQzwaICQhAVA0LiowAREQTzFQBgIBNhM/OwZGPQZHREYSBkgcQAFAO0QBOj4BThAGUFAvPgE+Nk8BKUEBRh0VAR0VAT4YLQEMHQIBHnBhY2thZ2U6Y29tcGlsZXIvY29tcGlsZXIuZGFydCpzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9hcGlpbXBsLmRhcnSi3y8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGxlZ19hcGlpbXBsOwoKaW1wb3J0ICdkYXJ0OmFzeW5jJzsKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnIHNob3cgdXRmODsKCmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9kYXJ0MmpzLmRhcnQnCiAgICBzaG93IGdldFN1cHBvcnRlZExpYnJhcnlOYW1lczsKCmltcG9ydCAnLi4vY29tcGlsZXJfbmV3LmRhcnQnIGFzIGFwaTsKaW1wb3J0ICdjb21tb24vdGFza3MuZGFydCcgc2hvdyBHZW5lcmljVGFzaywgTWVhc3VyZXI7CmltcG9ydCAnY29tbW9uLmRhcnQnOwppbXBvcnQgJ2NvbXBpbGVyLmRhcnQnOwppbXBvcnQgJ2RpYWdub3N0aWNzL21lc3NhZ2VzLmRhcnQnIHNob3cgTWVzc2FnZTsKaW1wb3J0ICdlbnZpcm9ubWVudC5kYXJ0JzsKaW1wb3J0ICdpby9zb3VyY2VfZmlsZS5kYXJ0JzsKaW1wb3J0ICdvcHRpb25zLmRhcnQnIHNob3cgQ29tcGlsZXJPcHRpb25zOwoKLy8vIEltcGxlbWVudHMgdGhlIFtDb21waWxlcl0gdXNpbmcgYSBbYXBpLkNvbXBpbGVySW5wdXRdIGZvciBzdXBwbHlpbmcgdGhlCi8vLyBzb3VyY2VzLgpjbGFzcyBDb21waWxlckltcGwgZXh0ZW5kcyBDb21waWxlciB7CiAgQG92ZXJyaWRlCiAgZmluYWwgTWVhc3VyZXIgbWVhc3VyZXI7CiAgQG92ZXJyaWRlCiAgYXBpLkNvbXBpbGVySW5wdXQgcHJvdmlkZXI7CiAgYXBpLkNvbXBpbGVyRGlhZ25vc3RpY3MgaGFuZGxlcjsKCiAgR2VuZXJpY1Rhc2sgdXNlckhhbmRsZXJUYXNrOwogIEdlbmVyaWNUYXNrIHVzZXJQcm92aWRlclRhc2s7CgogIENvbXBpbGVySW1wbCh0aGlzLnByb3ZpZGVyLCBhcGkuQ29tcGlsZXJPdXRwdXQgb3V0cHV0UHJvdmlkZXIsIHRoaXMuaGFuZGxlciwKICAgICAgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMsCiAgICAgIHtNYWtlUmVwb3J0ZXJGdW5jdGlvbiBtYWtlUmVwb3J0ZXJ9KQogICAgICAvLyBOT1RFOiBhbGxvY2F0aW5nIG1lYXN1cmVyIGlzIGRvbmUgdXBmcm9udCB0byBlbnN1cmUgdGhlIHdhbGxjbG9jayBpcwogICAgICAvLyBzdGFydGVkIGJlZm9yZSBvdGhlciBjb21wdXRhdGlvbnMuCiAgICAgIDogbWVhc3VyZXIgPSBuZXcgTWVhc3VyZXIoZW5hYmxlVGFza01lYXN1cmVtZW50czogb3B0aW9ucy52ZXJib3NlKSwKICAgICAgICBzdXBlcigKICAgICAgICAgICAgb3B0aW9uczogb3B0aW9ucywKICAgICAgICAgICAgb3V0cHV0UHJvdmlkZXI6IG91dHB1dFByb3ZpZGVyLAogICAgICAgICAgICBlbnZpcm9ubWVudDogbmV3IF9FbnZpcm9ubWVudChvcHRpb25zLmVudmlyb25tZW50KSwKICAgICAgICAgICAgbWFrZVJlcG9ydGVyOiBtYWtlUmVwb3J0ZXIpIHsKICAgIHRhc2tzLmFkZEFsbChbCiAgICAgIHVzZXJIYW5kbGVyVGFzayA9IG5ldyBHZW5lcmljVGFzaygnRGlhZ25vc3RpYyBoYW5kbGVyJywgbWVhc3VyZXIpLAogICAgICB1c2VyUHJvdmlkZXJUYXNrID0gbmV3IEdlbmVyaWNUYXNrKCdJbnB1dCBwcm92aWRlcicsIG1lYXN1cmVyKSwKICAgIF0pOwogIH0KCiAgdm9pZCBsb2cobWVzc2FnZSkgewogICAgY2FsbFVzZXJIYW5kbGVyKAogICAgICAgIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG1lc3NhZ2UsIGFwaS5EaWFnbm9zdGljLlZFUkJPU0VfSU5GTyk7CiAgfQoKICBGdXR1cmUgc2V0dXBTZGsoKSB7CiAgICB2YXIgZnV0dXJlID0gbmV3IEZ1dHVyZS52YWx1ZShudWxsKTsKICAgIF9FbnZpcm9ubWVudCBlbnYgPSBlbnZpcm9ubWVudDsKICAgIGlmIChlbnYuc3VwcG9ydGVkTGlicmFyaWVzID09IG51bGwpIHsKICAgICAgZnV0dXJlID0gZnV0dXJlLnRoZW4oKF8pIHsKICAgICAgICBVcmkgc3BlY2lmaWNhdGlvblVyaSA9IG9wdGlvbnMubGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaTsKICAgICAgICByZXR1cm4gcHJvdmlkZXIucmVhZEZyb21Vcmkoc3BlY2lmaWNhdGlvblVyaSkudGhlbigoYXBpLklucHV0IHNwZWMpIHsKICAgICAgICAgIFN0cmluZyBqc29uID0gbnVsbDsKICAgICAgICAgIC8vIFRPRE8oc2lnbXVuZCk6IHNpbXBsaWZ5IHRoaXMsIHdlIGhhdmUgc29tZSBBUEkgaW5jb25zaXN0ZW5jaWVzIHdoZW4KICAgICAgICAgIC8vIG91ciBpbnRlcm5hbCBpbnB1dCBhZGRzIGEgdGVybWluYXRpbmcgemVyby4KICAgICAgICAgIGlmIChzcGVjIGlzIFNvdXJjZUZpbGUpIHsKICAgICAgICAgICAganNvbiA9IHNwZWMuc2xvd1RleHQoKTsKICAgICAgICAgIH0gZWxzZSBpZiAoc3BlYyBpcyBCaW5hcnkpIHsKICAgICAgICAgICAganNvbiA9IHV0ZjguZGVjb2RlKHNwZWMuZGF0YSk7CiAgICAgICAgICB9CgogICAgICAgICAgLy8gVE9ETyhzaWdtdW5kKTogd291bGQgYmUgbmljZSB0byBmcm9udC1sb2FkIHNvbWUgb2YgdGhlIENGRSBvcHRpb24KICAgICAgICAgIC8vIHByb2Nlc3NpbmcgYW5kIHBhcnNlIHRoaXMgLmpzb24gZmlsZSBvbmx5IG9uY2UuCiAgICAgICAgICBlbnYuc3VwcG9ydGVkTGlicmFyaWVzID0gZ2V0U3VwcG9ydGVkTGlicmFyeU5hbWVzKHNwZWNpZmljYXRpb25VcmksCiAgICAgICAgICAgICAgICAgIGpzb24sIG9wdGlvbnMuY29tcGlsZUZvclNlcnZlciA/ICJkYXJ0MmpzX3NlcnZlciIgOiAiZGFydDJqcyIpCiAgICAgICAgICAgICAgLnRvU2V0KCk7CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfQogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVGhpcyBkb2VzIG5vdCBhcHBseSBhbnltb3JlLgogICAgLy8gVGhlIGluY3JlbWVudGFsIGNvbXBpbGVyIHNldHMgdXAgdGhlIHNkayBiZWZvcmUgcnVuLgogICAgLy8gVGhlcmVmb3JlIHRoaXMgd2lsbCBiZSBjYWxsZWQgYSBzZWNvbmQgdGltZS4KICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICBAb3ZlcnJpZGUKICBGdXR1cmU8Ym9vbD4gcnVuKFVyaSB1cmkpIHsKICAgIER1cmF0aW9uIHNldHVwRHVyYXRpb24gPSBtZWFzdXJlci5lbGFwc2VkV2FsbENsb2NrOwogICAgcmV0dXJuIHNlbGZUYXNrLm1lYXN1cmVTdWJ0YXNrKCJpbXBsLnJ1biIsICgpIHsKICAgICAgcmV0dXJuIHNldHVwU2RrKCkudGhlbigoXykgewogICAgICAgIHJldHVybiBzdXBlci5ydW4odXJpKTsKICAgICAgfSkudGhlbigoYm9vbCBzdWNjZXNzKSB7CiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkgewogICAgICAgICAgU3RyaW5nQnVmZmVyIHRpbWluZ3MgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgICBjb21wdXRlVGltaW5ncyhzZXR1cER1cmF0aW9uLCB0aW1pbmdzKTsKICAgICAgICAgIGxvZygiJHRpbWluZ3MiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICBTdHJpbmcgX2Zvcm1hdE1zKGludCBtcykgewogICAgcmV0dXJuIChtcyAvIDEwMDApLnRvU3RyaW5nQXNGaXhlZCgzKSArICdzJzsKICB9CgogIHZvaWQgY29tcHV0ZVRpbWluZ3MoRHVyYXRpb24gc2V0dXBEdXJhdGlvbiwgU3RyaW5nQnVmZmVyIHRpbWluZ3MpIHsKICAgIHRpbWluZ3Mud3JpdGVsbigiVGltaW5nczoiKTsKICAgIER1cmF0aW9uIHRvdGFsRHVyYXRpb24gPSBtZWFzdXJlci5lbGFwc2VkV2FsbENsb2NrOwogICAgRHVyYXRpb24gYXN5bmNEdXJhdGlvbiA9IG1lYXN1cmVyLmVsYXBzZWRBc3luY1dhbGxDbG9jazsKICAgIER1cmF0aW9uIGN1bXVsYXRlZER1cmF0aW9uID0gRHVyYXRpb24uemVybzsKICAgIExpc3Q8X1RpbWluZ0RhdGE+IHRpbWluZ0RhdGEgPSBbXTsKICAgIGZvciAoZmluYWwgdGFzayBpbiB0YXNrcykgewogICAgICBTdHJpbmcgcnVubmluZyA9IHRhc2suaXNSdW5uaW5nID8gIioiIDogIiAiOwogICAgICBEdXJhdGlvbiBkdXJhdGlvbiA9IHRhc2suZHVyYXRpb247CiAgICAgIGlmIChkdXJhdGlvbiAhPSBEdXJhdGlvbi56ZXJvKSB7CiAgICAgICAgY3VtdWxhdGVkRHVyYXRpb24gKz0gZHVyYXRpb247CiAgICAgICAgaW50IG1pbGxpc2Vjb25kcyA9IGR1cmF0aW9uLmluTWlsbGlzZWNvbmRzOwogICAgICAgIHRpbWluZ0RhdGEuYWRkKF9UaW1pbmdEYXRhKCcgICAkcnVubmluZyR7dGFzay5uYW1lfTonLCBtaWxsaXNlY29uZHMsCiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyAqIDEwMCAvIHRvdGFsRHVyYXRpb24uaW5NaWxsaXNlY29uZHMpKTsKICAgICAgICBmb3IgKFN0cmluZyBzdWJ0YXNrIGluIHRhc2suc3VidGFza3MpIHsKICAgICAgICAgIGludCBzdWJ0aW1lID0gdGFzay5nZXRTdWJ0YXNrVGltZShzdWJ0YXNrKTsKICAgICAgICAgIFN0cmluZyBydW5uaW5nID0gdGFzay5nZXRTdWJ0YXNrSXNSdW5uaW5nKHN1YnRhc2spID8gIioiIDogIiAiOwogICAgICAgICAgdGltaW5nRGF0YS5hZGQoX1RpbWluZ0RhdGEoJyAgICRydW5uaW5nJHt0YXNrLm5hbWV9ID4gJHN1YnRhc2s6JywKICAgICAgICAgICAgICBzdWJ0aW1lLCBzdWJ0aW1lICogMTAwIC8gdG90YWxEdXJhdGlvbi5pbk1pbGxpc2Vjb25kcykpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaW50IGxvbmdlc3REZXNjcmlwdGlvbiA9IHRpbWluZ0RhdGEKICAgICAgICAubWFwKChkKSA9PiBkLmRlc2NyaXB0aW9uLmxlbmd0aCkKICAgICAgICAuZm9sZCgwLCAoYSwgYikgPT4gYSA8IGIgPyBiIDogYSk7CiAgICBmb3IgKHZhciBkYXRhIGluIHRpbWluZ0RhdGEpIHsKICAgICAgdmFyIG1zID0gX2Zvcm1hdE1zKGRhdGEubWlsbGlzZWNvbmRzKTsKICAgICAgdmFyIHBhZGRpbmcgPQogICAgICAgICAgIiAiICogKGxvbmdlc3REZXNjcmlwdGlvbiArIDEwIC0gZGF0YS5kZXNjcmlwdGlvbi5sZW5ndGggLSBtcy5sZW5ndGgpOwogICAgICB2YXIgcGVyY2VudFBhZGRpbmcgPSBkYXRhLnBlcmNlbnQgPCAxMCA/ICIgIiA6ICIiOwogICAgICB0aW1pbmdzLndyaXRlbG4oJyR7ZGF0YS5kZXNjcmlwdGlvbn0kcGFkZGluZyAkbXMgJwogICAgICAgICAgJyRwZXJjZW50UGFkZGluZygke2RhdGEucGVyY2VudC50b1N0cmluZ0FzRml4ZWQoMSl9JSknKTsKICAgIH0KICAgIER1cmF0aW9uIHVuYWNjb3VudGVkRHVyYXRpb24gPQogICAgICAgIHRvdGFsRHVyYXRpb24gLSBjdW11bGF0ZWREdXJhdGlvbiAtIHNldHVwRHVyYXRpb24gLSBhc3luY0R1cmF0aW9uOwogICAgZG91YmxlIHBlcmNlbnQgPQogICAgICAgIHVuYWNjb3VudGVkRHVyYXRpb24uaW5NaWxsaXNlY29uZHMgKiAxMDAgLyB0b3RhbER1cmF0aW9uLmluTWlsbGlzZWNvbmRzOwogICAgdGltaW5ncy53cml0ZSgKICAgICAgICAnICAgIFRvdGFsIGNvbXBpbGUtdGltZSAke19mb3JtYXRNcyh0b3RhbER1cmF0aW9uLmluTWlsbGlzZWNvbmRzKX07JwogICAgICAgICcgc2V0dXAgJHtfZm9ybWF0TXMoc2V0dXBEdXJhdGlvbi5pbk1pbGxpc2Vjb25kcyl9OycKICAgICAgICAnIGFzeW5jICR7X2Zvcm1hdE1zKGFzeW5jRHVyYXRpb24uaW5NaWxsaXNlY29uZHMpfTsnCiAgICAgICAgJyB1bmFjY291bnRlZCAke19mb3JtYXRNcyh1bmFjY291bnRlZER1cmF0aW9uLmluTWlsbGlzZWNvbmRzKX0nCiAgICAgICAgJyAoJHtwZXJjZW50LnRvU3RyaW5nQXNGaXhlZCgyKX0lKScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZXBvcnREaWFnbm9zdGljKERpYWdub3N0aWNNZXNzYWdlIG1lc3NhZ2UsCiAgICAgIExpc3Q8RGlhZ25vc3RpY01lc3NhZ2U+IGluZm9zLCBhcGkuRGlhZ25vc3RpYyBraW5kKSB7CiAgICBfcmVwb3J0RGlhZ25vc3RpY01lc3NhZ2UobWVzc2FnZSwga2luZCk7CiAgICBmb3IgKERpYWdub3N0aWNNZXNzYWdlIGluZm8gaW4gaW5mb3MpIHsKICAgICAgX3JlcG9ydERpYWdub3N0aWNNZXNzYWdlKGluZm8sIGFwaS5EaWFnbm9zdGljLklORk8pOwogICAgfQogIH0KCiAgdm9pZCBfcmVwb3J0RGlhZ25vc3RpY01lc3NhZ2UoCiAgICAgIERpYWdub3N0aWNNZXNzYWdlIGRpYWdub3N0aWNNZXNzYWdlLCBhcGkuRGlhZ25vc3RpYyBraW5kKSB7CiAgICAvLyBbOnNwYW4udXJpOl0gbWlnaHQgYmUgWzpudWxsOl0gaW4gY2FzZSBvZiBhIFtTY3JpcHRdIHdpdGggbm8gW3VyaV0uIEZvcgogICAgLy8gaW5zdGFuY2UgaW4gdGhlIFtUeXBlc10gY29uc3RydWN0b3IgaW4gdHlwZWNoZWNrZXIuZGFydC4KICAgIFNvdXJjZVNwYW4gc3BhbiA9IGRpYWdub3N0aWNNZXNzYWdlLnNvdXJjZVNwYW47CiAgICBNZXNzYWdlIG1lc3NhZ2UgPSBkaWFnbm9zdGljTWVzc2FnZS5tZXNzYWdlOwogICAgaWYgKHNwYW4gPT0gbnVsbCB8fCBzcGFuLnVyaSA9PSBudWxsKSB7CiAgICAgIGNhbGxVc2VySGFuZGxlcihtZXNzYWdlLCBudWxsLCBudWxsLCBudWxsLCAnJG1lc3NhZ2UnLCBraW5kKTsKICAgIH0gZWxzZSB7CiAgICAgIGNhbGxVc2VySGFuZGxlcigKICAgICAgICAgIG1lc3NhZ2UsIHNwYW4udXJpLCBzcGFuLmJlZ2luLCBzcGFuLmVuZCwgJyRtZXNzYWdlJywga2luZCk7CiAgICB9CiAgfQoKICB2b2lkIGNhbGxVc2VySGFuZGxlcihNZXNzYWdlIG1lc3NhZ2UsIFVyaSB1cmksIGludCBiZWdpbiwgaW50IGVuZCwKICAgICAgU3RyaW5nIHRleHQsIGFwaS5EaWFnbm9zdGljIGtpbmQpIHsKICAgIHRyeSB7CiAgICAgIHVzZXJIYW5kbGVyVGFzay5tZWFzdXJlKCgpIHsKICAgICAgICBoYW5kbGVyLnJlcG9ydChtZXNzYWdlLCB1cmksIGJlZ2luLCBlbmQsIHRleHQsIGtpbmQpOwogICAgICB9KTsKICAgIH0gY2F0Y2ggKGV4LCBzKSB7CiAgICAgIHJlcG9ydENyYXNoSW5Vc2VyQ29kZSgnVW5jYXVnaHQgZXhjZXB0aW9uIGluIGRpYWdub3N0aWMgaGFuZGxlcicsIGV4LCBzKTsKICAgICAgcmV0aHJvdzsKICAgIH0KICB9CgogIEZ1dHVyZTxhcGkuSW5wdXQ+IGNhbGxVc2VyUHJvdmlkZXIoVXJpIHVyaSwgYXBpLklucHV0S2luZCBpbnB1dEtpbmQpIHsKICAgIHRyeSB7CiAgICAgIHJldHVybiB1c2VyUHJvdmlkZXJUYXNrCiAgICAgICAgICAubWVhc3VyZUlvKCgpID0+IHByb3ZpZGVyLnJlYWRGcm9tVXJpKHVyaSwgaW5wdXRLaW5kOiBpbnB1dEtpbmQpKTsKICAgIH0gY2F0Y2ggKGV4LCBzKSB7CiAgICAgIHJlcG9ydENyYXNoSW5Vc2VyQ29kZSgnVW5jYXVnaHQgZXhjZXB0aW9uIGluIGlucHV0IHByb3ZpZGVyJywgZXgsIHMpOwogICAgICByZXRocm93OwogICAgfQogIH0KfQoKY2xhc3MgX0Vudmlyb25tZW50IGltcGxlbWVudHMgRW52aXJvbm1lbnQgewogIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gZGVmaW5pdGlvbnM7CiAgTWFwPFN0cmluZywgU3RyaW5nPiBfY29tcGxldGVNYXA7CiAgU2V0PFN0cmluZz4gc3VwcG9ydGVkTGlicmFyaWVzOwoKICBfRW52aXJvbm1lbnQodGhpcy5kZWZpbml0aW9ucyk7CgogIEBvdmVycmlkZQogIFN0cmluZyB2YWx1ZU9mKFN0cmluZyBuYW1lKSB7CiAgICBpZiAoX2NvbXBsZXRlTWFwICE9IG51bGwpIHJldHVybiBfY29tcGxldGVNYXBbbmFtZV07CiAgICB2YXIgcmVzdWx0ID0gZGVmaW5pdGlvbnNbbmFtZV07CiAgICBpZiAocmVzdWx0ICE9IG51bGwgfHwgZGVmaW5pdGlvbnMuY29udGFpbnNLZXkobmFtZSkpIHJldHVybiByZXN1bHQ7CiAgICBpZiAoIW5hbWUuc3RhcnRzV2l0aChfZGFydExpYnJhcnlFbnZpcm9ubWVudFByZWZpeCkpIHJldHVybiBudWxsOwoKICAgIFN0cmluZyBsaWJyYXJ5TmFtZSA9IG5hbWUuc3Vic3RyaW5nKF9kYXJ0TGlicmFyeUVudmlyb25tZW50UHJlZml4Lmxlbmd0aCk7CgogICAgLy8gUHJpdmF0ZSBsaWJyYXJpZXMgYXJlIG5vdCBleHBvc2VkIHRvIHRoZSB1c2Vycy4KICAgIGlmIChsaWJyYXJ5TmFtZS5zdGFydHNXaXRoKCJfIikpIHJldHVybiBudWxsOwogICAgaWYgKHN1cHBvcnRlZExpYnJhcmllcy5jb250YWlucyhsaWJyYXJ5TmFtZSkpIHJldHVybiAidHJ1ZSI7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIE1hcDxTdHJpbmcsIFN0cmluZz4gdG9NYXAoKSB7CiAgICBpZiAoX2NvbXBsZXRlTWFwID09IG51bGwpIHsKICAgICAgX2NvbXBsZXRlTWFwID0gbmV3IE1hcDxTdHJpbmcsIFN0cmluZz4uZnJvbShkZWZpbml0aW9ucyk7CiAgICAgIGZvciAoU3RyaW5nIGxpYnJhcnlOYW1lIGluIHN1cHBvcnRlZExpYnJhcmllcykgewogICAgICAgIGlmICghbGlicmFyeU5hbWUuc3RhcnRzV2l0aCgiXyIpKSB7CiAgICAgICAgICBTdHJpbmcga2V5ID0gJyR7X2RhcnRMaWJyYXJ5RW52aXJvbm1lbnRQcmVmaXh9JHtsaWJyYXJ5TmFtZX0nOwogICAgICAgICAgaWYgKCFkZWZpbml0aW9ucy5jb250YWluc0tleShrZXkpKSB7CiAgICAgICAgICAgIF9jb21wbGV0ZU1hcFtrZXldID0gInRydWUiOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIF9jb21wbGV0ZU1hcDsKICB9Cn0KCi8vLyBGb3IgZXZlcnkgJ2RhcnQ6JyBsaWJyYXJ5LCBhIGNvcnJlc3BvbmRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0Ci8vLyB0byAidHJ1ZSIuIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSdzIG5hbWUgaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YKLy8vIHRoaXMgcHJlZml4IGFuZCB0aGUgbmFtZSAod2l0aG91dCB0aGUgJ2RhcnQ6Jy4KLy8vCi8vLyBGb3IgZXhhbXBsZSAnZGFydDpodG1sJyBoYXMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlICdkYXJ0LmxpYnJhcnkuaHRtbCcgc2V0Ci8vLyB0byAidHJ1ZSIuCmNvbnN0IFN0cmluZyBfZGFydExpYnJhcnlFbnZpcm9ubWVudFByZWZpeCA9ICdkYXJ0LmxpYnJhcnkuJzsKCmNsYXNzIF9UaW1pbmdEYXRhIHsKICBmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb247CiAgZmluYWwgaW50IG1pbGxpc2Vjb25kczsKICBmaW5hbCBkb3VibGUgcGVyY2VudDsKCiAgX1RpbWluZ0RhdGEodGhpcy5kZXNjcmlwdGlvbiwgdGhpcy5taWxsaXNlY29uZHMsIHRoaXMucGVyY2VudCk7Cn0KgP0ATk48ARUBFSEBOSMBJjcWGDEbHiwBTA0mDBsMHiMBHyABTx8rTixKDx4sQCoTSUYIBAEWFUcEARYpJCohQk4eUTkkJCcrDAFPPU5RGAwKBjk8NBMEAQweODQjHx8fNTIbChgKCAQBHTEEAUYhOD0wJyAzKScnNE1BMDZKTEcKCAYoKisjLRRROTlDBiNLFVETTT09SC4EAQwzPC0sOwYEASFCT0A0MSxEDRdGBgQBRSoKIz4KFlAPBgQBSQoeTRZMDwYEAgEsKSQiASIBDCA5JEhGAU8BNzJBEQQBDCAgQDcsSS8oDAoIBhkEAgFLRzMEUQ8+ARQcGhgBQgIBIXBhY2thZ2U6Y29tcGlsZXIvc3JjL2FwaWltcGwuZGFydClzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9jb2xvcnMuZGFydITuLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5jb2xvcnM7CgovLyBTZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BTlNJX2VzY2FwZV9jb2RlI0NTSV9jb2Rlcwpjb25zdCBTdHJpbmcgUkVTRVQgPSAnXHUwMDFiWzBtJzsKCi8vIFNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FOU0lfZXNjYXBlX2NvZGUjQ29sb3JzCmNvbnN0IFN0cmluZyBCTEFDS19DT0xPUiA9ICdcdTAwMWJbMzBtJzsKY29uc3QgU3RyaW5nIFJFRF9DT0xPUiA9ICdcdTAwMWJbMzFtJzsKY29uc3QgU3RyaW5nIEdSRUVOX0NPTE9SID0gJ1x1MDAxYlszMm0nOwpjb25zdCBTdHJpbmcgWUVMTE9XX0NPTE9SID0gJ1x1MDAxYlszM20nOwpjb25zdCBTdHJpbmcgQkxVRV9DT0xPUiA9ICdcdTAwMWJbMzRtJzsKY29uc3QgU3RyaW5nIE1BR0VOVEFfQ09MT1IgPSAnXHUwMDFiWzM1bSc7CmNvbnN0IFN0cmluZyBDWUFOX0NPTE9SID0gJ1x1MDAxYlszNm0nOwpjb25zdCBTdHJpbmcgV0hJVEVfQ09MT1IgPSAnXHUwMDFiWzM3bSc7CgpTdHJpbmcgd3JhcChTdHJpbmcgc3RyaW5nLCBTdHJpbmcgY29sb3IpID0+ICIke2NvbG9yfSRzdHJpbmcke1JFU0VUfSI7CgpTdHJpbmcgYmxhY2soU3RyaW5nIHN0cmluZykgPT4gd3JhcChzdHJpbmcsIEJMQUNLX0NPTE9SKTsKU3RyaW5nIHJlZChTdHJpbmcgc3RyaW5nKSA9PiB3cmFwKHN0cmluZywgUkVEX0NPTE9SKTsKU3RyaW5nIGdyZWVuKFN0cmluZyBzdHJpbmcpID0+IHdyYXAoc3RyaW5nLCBHUkVFTl9DT0xPUik7ClN0cmluZyB5ZWxsb3coU3RyaW5nIHN0cmluZykgPT4gd3JhcChzdHJpbmcsIFlFTExPV19DT0xPUik7ClN0cmluZyBibHVlKFN0cmluZyBzdHJpbmcpID0+IHdyYXAoc3RyaW5nLCBCTFVFX0NPTE9SKTsKU3RyaW5nIG1hZ2VudGEoU3RyaW5nIHN0cmluZykgPT4gd3JhcChzdHJpbmcsIE1BR0VOVEFfQ09MT1IpOwpTdHJpbmcgY3lhbihTdHJpbmcgc3RyaW5nKSA9PiB3cmFwKHN0cmluZywgQ1lBTl9DT0xPUik7ClN0cmluZyB3aGl0ZShTdHJpbmcgc3RyaW5nKSA9PiB3cmFwKHN0cmluZywgV0hJVEVfQ09MT1IpOwofAE5OPAEYAT8iATwpJykqKCsoKQFHATo2Ojw4Pjg6ASBwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb2xvcnMuZGFydDFzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pby9zb3VyY2VfZmlsZS5kYXJ0oscvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmlvLnNvdXJjZV9maWxlOwoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnIHNob3cgdXRmODsKaW1wb3J0ICdkYXJ0Om1hdGgnOwppbXBvcnQgJ2RhcnQ6dHlwZWRfZGF0YScgc2hvdyBVaW50OExpc3Q7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBrZXJuZWwgc2hvdyBMb2NhdGlvbiwgU291cmNlOwoKaW1wb3J0ICdsb2NhdGlvbl9wcm92aWRlci5kYXJ0JyBzaG93IExvY2F0aW9uUHJvdmlkZXI7CmltcG9ydCAnLi4vLi4vY29tcGlsZXJfbmV3LmRhcnQnOwoKLy8vIFJlcHJlc2VudHMgYSBmaWxlIG9mIHNvdXJjZSBjb2RlLiBUaGUgY29udGVudCBjYW4gYmUgZWl0aGVyIGEgW1N0cmluZ10gb3IKLy8vIGEgVVRGLTggZW5jb2RlZCBbTGlzdDxpbnQ+XSBvZiBieXRlcy4KYWJzdHJhY3QgY2xhc3MgU291cmNlRmlsZTxUPiBpbXBsZW1lbnRzIElucHV0PFQ+LCBMb2NhdGlvblByb3ZpZGVyIHsKICAvLy8gVGhlIGFic29sdXRlIFVSSSBvZiB0aGUgc291cmNlIGZpbGUuCiAgQG92ZXJyaWRlCiAgVXJpIGdldCB1cmk7CgogIEBvdmVycmlkZQogIElucHV0S2luZCBnZXQgaW5wdXRLaW5kID0+IElucHV0S2luZC5VVEY4OwoKICBrZXJuZWwuU291cmNlIGNhY2hlZEtlcm5lbFNvdXJjZTsKCiAga2VybmVsLlNvdXJjZSBnZXQga2VybmVsU291cmNlIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEluc3RlYWQgb2YgY3JlYXRpbmcgYSBuZXcgU291cmNlIG9iamVjdCwKICAgIC8vIHdlIHNob3VsZCB1c2UgdGhlIG9uZSBwcm92aWRlZCBieSB0aGUgZnJvbnQtZW5kLgogICAgcmV0dXJuIGNhY2hlZEtlcm5lbFNvdXJjZSA/Pz0gbmV3IGtlcm5lbC5Tb3VyY2UoCiAgICAgICAgbGluZVN0YXJ0cywKICAgICAgICBzbG93VXRmOFplcm9UZXJtaW5hdGVkQnl0ZXMoKSwKICAgICAgICB1cmkgLyogVE9ETyhqZW5zaik6IFdoYXQgaXMgdGhlIGltcG9ydCBVUkk/ICovLAogICAgICAgIHVyaSkKICAgICAgLi5jYWNoZWRUZXh0ID0gc2xvd1RleHQoKTsKICB9CgogIC8vLyBUaGUgbmFtZSBvZiB0aGUgZmlsZS4KICAvLy8KICAvLy8gVGhpcyBpcyBbdXJpXSwgbWF5YmUgcmVsYXRpdml6ZWQgdG8gYSBtb3JlIGh1bWFuLXJlYWRhYmxlIGZvcm0uCiAgU3RyaW5nIGdldCBmaWxlbmFtZSA9PiB1cmkudG9TdHJpbmcoKTsKCiAgLy8vIFRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIGZpbGUgcmVwcmVzZW50ZWQgYXMgYSBTdHJpbmcKICBTdHJpbmcgc2xvd1RleHQoKTsKCiAgLy8vIFRoZSBjb250ZW50IG9mIHRoZSBmaWxlIHJlcHJlc2VudGVkIGFzIGEgVVRGLTggZW5jb2RlZCBbTGlzdDxpbnQ+XSwKICAvLy8gdGVybWluYXRlZCB3aXRoIGEgdHJhaWxpbmcgMCBieXRlLgogIExpc3Q8aW50PiBzbG93VXRmOFplcm9UZXJtaW5hdGVkQnl0ZXMoKTsKCiAgLy8vIFRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNvdXJjZSBmaWxlLCBpLmUuLAogIC8vLyBlcXVpdmFsZW50IHRvIFs6c2xvd1RleHQoKS5sZW5ndGg6XSwgYnV0IGZhc3Rlci4KICBpbnQgZ2V0IGxlbmd0aDsKCiAgLy8vIFNldHMgdGhlIHN0cmluZyBsZW5ndGggb2YgdGhpcyBzb3VyY2UgZmlsZS4gRm9yIHNvdXJjZSBmaWxlcyBiYXNlZCBvbgogIC8vLyBVVEYtOCBieXRlIGFycmF5cywgdGhlIHN0cmluZyBsZW5ndGggaXMgY29tcHV0ZWQgYW5kIGFzc2lnbmVkIGJ5IHRoZQogIC8vLyBzY2FubmVyLgogIHNldCBsZW5ndGgoaW50IHYpOwoKICAvLy8gQSBtYXAgZnJvbSBsaW5lIG51bWJlcnMgdG8gb2Zmc2V0cyBpbiB0aGUgc3RyaW5nIHRleHQgcmVwcmVzZW50YXRpb24gb2YKICAvLy8gdGhpcyBzb3VyY2UgZmlsZS4KICBMaXN0PGludD4gZ2V0IGxpbmVTdGFydHMgewogICAgaWYgKGxpbmVTdGFydHNDYWNoZSA9PSBudWxsKSB7CiAgICAgIC8vIFdoZW4gcmVwb3J0aW5nIGVycm9ycyBkdXJpbmcgc2Nhbm5pbmcsIHRoZSBsaW5lIG51bWJlcnMgYXJlIG5vdCB5ZXQKICAgICAgLy8gYXZhaWxhYmxlIGFuZCBuZWVkIHRvIGJlIGNvbXB1dGVkIHVzaW5nIHRoaXMgc2xvdyBwYXRoLgogICAgICBsaW5lU3RhcnRzQ2FjaGUgPSBsaW5lU3RhcnRzRnJvbVN0cmluZyhzbG93VGV4dCgpKTsKICAgIH0KICAgIHJldHVybiBsaW5lU3RhcnRzQ2FjaGU7CiAgfQoKICAvLy8gU2V0cyB0aGUgbGluZSBudW1iZXJzIG1hcCBmb3IgdGhpcyBzb3VyY2UgZmlsZS4gVGhpcyBtYXAgaXMgY29tcHV0ZWQgYW5kCiAgLy8vIGFzc2lnbmVkIGJ5IHRoZSBzY2FubmVyLCBhdm9pZGluZyBhIHNlcGFyYXRlIHRyYXZlcnNhbCBvZiB0aGUgc291cmNlIGZpbGUuCiAgLy8vCiAgLy8vIFRoZSBtYXAgY29udGFpbnMgb25lIGFkZGl0aW9uYWwgZW50cnkgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSwgYXMgaWYgdGhlCiAgLy8vIHNvdXJjZSBmaWxlIGhhZCBvbmUgbW9yZSBlbXB0eSBsaW5lIGF0IHRoZSBlbmQuIFRoaXMgc2ltcGxpZmllcyB0aGUgYmluYXJ5CiAgLy8vIHNlYXJjaCBpbiBbZ2V0TG9jYXRpb25dLgogIHNldCBsaW5lU3RhcnRzKExpc3Q8aW50PiB2KSA9PiBsaW5lU3RhcnRzQ2FjaGUgPSB2OwoKICBMaXN0PGludD4gbGluZVN0YXJ0c0NhY2hlOwoKICBMaXN0PGludD4gbGluZVN0YXJ0c0Zyb21TdHJpbmcoU3RyaW5nIHRleHQpIHsKICAgIHZhciBzdGFydHMgPSBbMF07CiAgICB2YXIgaW5kZXggPSAwOwogICAgd2hpbGUgKGluZGV4IDwgdGV4dC5sZW5ndGgpIHsKICAgICAgaW5kZXggPSB0ZXh0LmluZGV4T2YoJ1xuJywgaW5kZXgpICsgMTsKICAgICAgaWYgKGluZGV4IDw9IDApIGJyZWFrOwogICAgICBzdGFydHMuYWRkKGluZGV4KTsKICAgIH0KICAgIHN0YXJ0cy5hZGQodGV4dC5sZW5ndGggKyAxKTsgLy8gT25lIGFkZGl0aW9uYWwgbGluZSBzdGFydCBhdCB0aGUgZW5kLgogICAgcmV0dXJuIHN0YXJ0czsKICB9CgogIEBvdmVycmlkZQogIGtlcm5lbC5Mb2NhdGlvbiBnZXRMb2NhdGlvbihpbnQgb2Zmc2V0KSB7CiAgICByZXR1cm4ga2VybmVsU291cmNlLmdldExvY2F0aW9uKG51bGwsIG9mZnNldCk7CiAgfQoKICBTdHJpbmcgc2xvd1N1YnN0cmluZyhpbnQgc3RhcnQsIGludCBlbmQpOwoKICAvLy8gQ3JlYXRlIGEgcHJldHR5IHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgW21lc3NhZ2VdIGZyb20gYSBjaGFyYWN0ZXIKICAvLy8gcmFuZ2UgYFtzdGFydCwgZW5kXWAgaW4gdGhpcyBmaWxlLgogIC8vLwogIC8vLyBJZiBbaW5jbHVkZVNvdXJjZUxpbmVdIGlzIGB0cnVlYCB0aGUgZmlyc3Qgc291cmNlIGxpbmUgY29kZSBsaW5lIHRoYXQKICAvLy8gY29udGFpbnMgdGhlIHJhbmdlIHdpbGwgYmUgaW5jbHVkZWQgYXMgd2VsbCBhcyBtYXJrZXIgY2hhcmFjdGVycyAoJ14nKQogIC8vLyB1bmRlcmxpbmluZyB0aGUgcmFuZ2UuCiAgLy8vCiAgLy8vIFVzZSBbY29sb3JpemVdIHRvIHdyYXAgc291cmNlIGNvZGUgdGV4dCBhbmQgbWFya2VyIGNoYXJhY3RlcnMgaW4gY29sb3IKICAvLy8gZXNjYXBlIGNvZGVzLgogIFN0cmluZyBnZXRMb2NhdGlvbk1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UsIGludCBzdGFydCwgaW50IGVuZCwKICAgICAge2Jvb2wgaW5jbHVkZVNvdXJjZUxpbmU6IHRydWUsIFN0cmluZyBjb2xvcml6ZShTdHJpbmcgdGV4dCl9KSB7CiAgICBpZiAoY29sb3JpemUgPT0gbnVsbCkgewogICAgICBjb2xvcml6ZSA9ICh0ZXh0KSA9PiB0ZXh0OwogICAgfQoKICAgIGtlcm5lbC5Mb2NhdGlvbiBzdGFydExvY2F0aW9uID0ga2VybmVsU291cmNlLmdldExvY2F0aW9uKG51bGwsIHN0YXJ0KTsKICAgIGtlcm5lbC5Mb2NhdGlvbiBlbmRMb2NhdGlvbiA9IGtlcm5lbFNvdXJjZS5nZXRMb2NhdGlvbihudWxsLCBlbmQpOwogICAgaW50IGxpbmVTdGFydCA9IHN0YXJ0TG9jYXRpb24ubGluZSAtIDE7CiAgICBpbnQgY29sdW1uU3RhcnQgPSBzdGFydExvY2F0aW9uLmNvbHVtbiAtIDE7CiAgICBpbnQgbGluZUVuZCA9IGVuZExvY2F0aW9uLmxpbmUgLSAxOwogICAgaW50IGNvbHVtbkVuZCA9IGVuZExvY2F0aW9uLmNvbHVtbiAtIDE7CgogICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoJyR7ZmlsZW5hbWV9OicpOwogICAgaWYgKHN0YXJ0ICE9IGVuZCB8fCBzdGFydCAhPSAwKSB7CiAgICAgIC8vIExpbmUvY29sdW1uIGluZm8gaXMgcmVsZXZhbnQuCiAgICAgIGJ1Zi53cml0ZSgnJHtsaW5lU3RhcnQgKyAxfToke2NvbHVtblN0YXJ0ICsgMX06Jyk7CiAgICB9CiAgICBidWYud3JpdGUoJ1xuJG1lc3NhZ2VcbicpOwoKICAgIGlmIChzdGFydCAhPSBlbmQgJiYgaW5jbHVkZVNvdXJjZUxpbmUpIHsKICAgICAgaWYgKGxpbmVTdGFydCA9PSBsaW5lRW5kKSB7CiAgICAgICAgU3RyaW5nIHRleHRMaW5lID0ga2VybmVsU291cmNlLmdldFRleHRMaW5lKHN0YXJ0TG9jYXRpb24ubGluZSk7CgogICAgICAgIGludCB0b0NvbHVtbiA9IG1pbihjb2x1bW5TdGFydCArIChlbmQgLSBzdGFydCksIHRleHRMaW5lLmxlbmd0aCk7CiAgICAgICAgYnVmLndyaXRlKHRleHRMaW5lLnN1YnN0cmluZygwLCBjb2x1bW5TdGFydCkpOwogICAgICAgIGJ1Zi53cml0ZShjb2xvcml6ZSh0ZXh0TGluZS5zdWJzdHJpbmcoY29sdW1uU3RhcnQsIHRvQ29sdW1uKSkpOwogICAgICAgIGJ1Zi53cml0ZWxuKHRleHRMaW5lLnN1YnN0cmluZyh0b0NvbHVtbikpOwoKICAgICAgICBpbnQgaSA9IDA7CiAgICAgICAgZm9yICg7IGkgPCBjb2x1bW5TdGFydDsgaSsrKSB7CiAgICAgICAgICBidWYud3JpdGUoJyAnKTsKICAgICAgICB9CgogICAgICAgIGZvciAoOyBpIDwgdG9Db2x1bW47IGkrKykgewogICAgICAgICAgYnVmLndyaXRlKGNvbG9yaXplKCdeJykpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBmb3IgKGludCBsaW5lID0gbGluZVN0YXJ0OyBsaW5lIDw9IGxpbmVFbmQ7IGxpbmUrKykgewogICAgICAgICAgU3RyaW5nIHRleHRMaW5lID0ga2VybmVsU291cmNlLmdldFRleHRMaW5lKGxpbmUgKyAxKTsKICAgICAgICAgIGlmIChsaW5lID09IGxpbmVTdGFydCkgewogICAgICAgICAgICBpZiAoY29sdW1uU3RhcnQgPiB0ZXh0TGluZS5sZW5ndGgpIHsKICAgICAgICAgICAgICBjb2x1bW5TdGFydCA9IHRleHRMaW5lLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgICAgICBidWYud3JpdGUodGV4dExpbmUuc3Vic3RyaW5nKDAsIGNvbHVtblN0YXJ0KSk7CiAgICAgICAgICAgIGJ1Zi53cml0ZWxuKGNvbG9yaXplKHRleHRMaW5lLnN1YnN0cmluZyhjb2x1bW5TdGFydCkpKTsKICAgICAgICAgIH0gZWxzZSBpZiAobGluZSA9PSBsaW5lRW5kKSB7CiAgICAgICAgICAgIGlmIChjb2x1bW5FbmQgPiB0ZXh0TGluZS5sZW5ndGgpIHsKICAgICAgICAgICAgICBjb2x1bW5FbmQgPSB0ZXh0TGluZS5sZW5ndGg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnVmLndyaXRlKGNvbG9yaXplKHRleHRMaW5lLnN1YnN0cmluZygwLCBjb2x1bW5FbmQpKSk7CiAgICAgICAgICAgIGJ1Zi53cml0ZWxuKHRleHRMaW5lLnN1YnN0cmluZyhjb2x1bW5FbmQpKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJ1Zi53cml0ZWxuKGNvbG9yaXplKHRleHRMaW5lKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGJ1Zi50b1N0cmluZygpOwogIH0KCiAgaW50IGdldCBsaW5lcyA9PiBsaW5lU3RhcnRzLmxlbmd0aCAtIDE7Cn0KCkxpc3Q8aW50PiBfemVyb1Rlcm1pbmF0ZUlmTmVjZXNzYXJ5KExpc3Q8aW50PiBieXRlcykgewogIGlmIChieXRlcy5sZW5ndGggPiAwICYmIGJ5dGVzLmxhc3QgPT0gMCkgcmV0dXJuIGJ5dGVzOwogIExpc3Q8aW50PiByZXN1bHQgPSBuZXcgVWludDhMaXN0KGJ5dGVzLmxlbmd0aCArIDEpOwogIHJlc3VsdC5zZXRSYW5nZSgwLCBieXRlcy5sZW5ndGgsIGJ5dGVzKTsKICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdID0gMDsKICByZXR1cm4gcmVzdWx0Owp9CgpjbGFzcyBVdGY4Qnl0ZXNTb3VyY2VGaWxlIGV4dGVuZHMgU291cmNlRmlsZTxMaXN0PGludD4+IHsKICBAb3ZlcnJpZGUKICBmaW5hbCBVcmkgdXJpOwoKICAvLy8gVGhlIFVURi04IGVuY29kZWQgY29udGVudCBvZiB0aGUgc291cmNlIGZpbGUuCiAgZmluYWwgTGlzdDxpbnQ+IHplcm9UZXJtaW5hdGVkQ29udGVudDsKCiAgLy8vIENyZWF0ZXMgYSBVdGY4Qnl0ZXNTb3VyY2VGaWxlLgogIC8vLwogIC8vLyBJZiBwb3NzaWJsZSwgdGhlIGdpdmVuIFtjb250ZW50XSBzaG91bGQgYmUgemVyby10ZXJtaW5hdGVkLiBJZiBpdCBpc24ndCwKICAvLy8gdGhlIGNvbnN0cnVjdG9yIGNsb25lcyB0aGUgY29udGVudCBhbmQgYWRkcyBhIHRyYWlsaW5nIDAuCiAgVXRmOEJ5dGVzU291cmNlRmlsZSh0aGlzLnVyaSwgTGlzdDxpbnQ+IGNvbnRlbnQpCiAgICAgIDogdGhpcy56ZXJvVGVybWluYXRlZENvbnRlbnQgPSBfemVyb1Rlcm1pbmF0ZUlmTmVjZXNzYXJ5KGNvbnRlbnQpOwoKICBAb3ZlcnJpZGUKICBMaXN0PGludD4gZ2V0IGRhdGEgPT4gemVyb1Rlcm1pbmF0ZWRDb250ZW50OwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgc2xvd1RleHQoKSB7CiAgICAvLyBEb24ndCBjb252ZXJ0IHRoZSB0cmFpbGluZyB6ZXJvIGJ5dGUuCiAgICByZXR1cm4gdXRmOC5kZWNvZGVyCiAgICAgICAgLmNvbnZlcnQoemVyb1Rlcm1pbmF0ZWRDb250ZW50LCAwLCB6ZXJvVGVybWluYXRlZENvbnRlbnQubGVuZ3RoIC0gMSk7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PGludD4gc2xvd1V0ZjhaZXJvVGVybWluYXRlZEJ5dGVzKCkgPT4gemVyb1Rlcm1pbmF0ZWRDb250ZW50OwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgc2xvd1N1YnN0cmluZyhpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIC8vIFRPRE8obHJ5KTogdG8gbWFrZSB0aGlzIGZhc3RlciwgdGhlIHNjYW5uZXIgY291bGQgcmVjb3JkIHRoZSBVVEYtOCBzbGFjawogICAgLy8gZm9yIGFsbCBwb3NpdGlvbnMgb2YgdGhlIHNvdXJjZSB0ZXh0LiBXZSBjb3VsZCB1c2UgWzpjb250ZW50LnN1Ymxpc3Q6XS4KICAgIHJldHVybiBzbG93VGV4dCgpLnN1YnN0cmluZyhzdGFydCwgZW5kKTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoIHsKICAgIGlmIChsZW5ndGhDYWNoZSA9PSAtMSkgewogICAgICAvLyBEdXJpbmcgc2Nhbm5pbmcgdGhlIGxlbmd0aCBpcyBub3QgeWV0IGFzc2lnbmVkLCBzbyB3ZSB1c2UgYSBzbG93IHBhdGguCiAgICAgIGxlbmd0aENhY2hlID0gc2xvd1RleHQoKS5sZW5ndGg7CiAgICB9CiAgICByZXR1cm4gbGVuZ3RoQ2FjaGU7CiAgfQoKICBAb3ZlcnJpZGUKICBzZXQgbGVuZ3RoKGludCB2KSA9PiBsZW5ndGhDYWNoZSA9IHY7CiAgaW50IGxlbmd0aENhY2hlID0gLTE7Cn0KCmNsYXNzIENhY2hpbmdVdGY4Qnl0ZXNTb3VyY2VGaWxlIGV4dGVuZHMgVXRmOEJ5dGVzU291cmNlRmlsZSB7CiAgU3RyaW5nIGNhY2hlZFRleHQ7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIGZpbGVuYW1lOwoKICBDYWNoaW5nVXRmOEJ5dGVzU291cmNlRmlsZShVcmkgdXJpLCB0aGlzLmZpbGVuYW1lLCBMaXN0PGludD4gY29udGVudCkKICAgICAgOiBzdXBlcih1cmksIGNvbnRlbnQpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgc2xvd1RleHQoKSB7CiAgICBpZiAoY2FjaGVkVGV4dCA9PSBudWxsKSB7CiAgICAgIGNhY2hlZFRleHQgPSBzdXBlci5zbG93VGV4dCgpOwogICAgfQogICAgcmV0dXJuIGNhY2hlZFRleHQ7CiAgfQp9CgpjbGFzcyBTdHJpbmdTb3VyY2VGaWxlIGV4dGVuZHMgU291cmNlRmlsZTxMaXN0PGludD4+IHsKICBAb3ZlcnJpZGUKICBmaW5hbCBVcmkgdXJpOwogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBmaWxlbmFtZTsKICBmaW5hbCBTdHJpbmcgdGV4dDsKCiAgU3RyaW5nU291cmNlRmlsZSh0aGlzLnVyaSwgdGhpcy5maWxlbmFtZSwgdGhpcy50ZXh0KTsKCiAgU3RyaW5nU291cmNlRmlsZS5mcm9tVXJpKFVyaSB1cmksIFN0cmluZyB0ZXh0KQogICAgICA6IHRoaXModXJpLCB1cmkudG9TdHJpbmcoKSwgdGV4dCk7CgogIFN0cmluZ1NvdXJjZUZpbGUuZnJvbU5hbWUoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgdGV4dCkKICAgICAgOiB0aGlzKG5ldyBVcmkocGF0aDogZmlsZW5hbWUpLCBmaWxlbmFtZSwgdGV4dCk7CgogIEBvdmVycmlkZQogIExpc3Q8aW50PiBnZXQgZGF0YSA9PiB1dGY4LmVuY29kZSh0ZXh0KTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBsZW5ndGggPT4gdGV4dC5sZW5ndGg7CiAgQG92ZXJyaWRlCiAgc2V0IGxlbmd0aChpbnQgdikge30KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHNsb3dUZXh0KCkgPT4gdGV4dDsKCiAgQG92ZXJyaWRlCiAgTGlzdDxpbnQ+IHNsb3dVdGY4WmVyb1Rlcm1pbmF0ZWRCeXRlcygpIHsKICAgIHJldHVybiBfemVyb1Rlcm1pbmF0ZUlmTmVjZXNzYXJ5KHV0ZjguZW5jb2RlKHRleHQpKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBzbG93U3Vic3RyaW5nKGludCBzdGFydCwgaW50IGVuZCkgPT4gdGV4dC5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7Cn0KCi8vLyBCaW5hcnkgaW5wdXQgZGF0YS4KY2xhc3MgQmluYXJ5IGltcGxlbWVudHMgSW5wdXQ8TGlzdDxpbnQ+PiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgVXJpIHVyaTsKICBAb3ZlcnJpZGUKICBmaW5hbCBMaXN0PGludD4gZGF0YTsKCiAgQmluYXJ5KHRoaXMudXJpLCB0aGlzLmRhdGEpOwoKICBAb3ZlcnJpZGUKICBJbnB1dEtpbmQgZ2V0IGlucHV0S2luZCA9PiBJbnB1dEtpbmQuYmluYXJ5Owp9CoEnAE5OPAEgASEUKQFCATciAU4qRSsMDwEMLQEkASNFODUUJzgNIQQBHAZGKQE7FQFKKSsBSTcSAUxLDxUBThgdI01BOgYcBAFPUQZOUR82AR0BMBYTIi0dGQZKEwQBDCwzBAEsAUspBkxNHQZNFEBGHCEGAUtHLDAoLAE5Jic5Bh8BLSJIAUo3SDMBEycaCgEkJAoPPkAjMS0OO0QoLysOQzgTLQwKCAYBGwQBKgIBNzk2KyERAgE6DBEBNCkBJQZPQDNJAQwvAQwWLRhOBAEMRAEMLVBPLQQBDBMdUCcGGAQBDCgYAgE/FQwZAUgdAQwWHiUGFwQCATcMEQwZFQE4ATEpATo3AQwrAQwhDBcBDB0BDCw5BAEMSgIBFysMEQwYAR8BDC8CAShwYWNrYWdlOmNvbXBpbGVyL3NyYy9pby9zb3VyY2VfZmlsZS5kYXJ0MHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3V0aWwvZW1wdHlzZXQuZGFydIbHLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy51dGlsLmVtcHR5c2V0OwoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nIHNob3cgSXRlcmFibGVCYXNlOwoKY2xhc3MgSW1tdXRhYmxlRW1wdHlTZXQ8RT4gZXh0ZW5kcyBJdGVyYWJsZUJhc2U8RT4gaW1wbGVtZW50cyBTZXQ8RT4gewogIGNvbnN0IEltbXV0YWJsZUVtcHR5U2V0KCk7CgogIEBvdmVycmlkZQogIFNldDxSPiBjYXN0PFI+KCkgPT4gbmV3IEltbXV0YWJsZUVtcHR5U2V0PFI+KCk7CiAgQG92ZXJyaWRlCiAgZ2V0IGl0ZXJhdG9yID0+IGNvbnN0IF9FbXB0eVNldEl0ZXJhdG9yKCk7CiAgQG92ZXJyaWRlCiAgaW50IGdldCBsZW5ndGggPT4gMDsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0VtcHR5ID0+IHRydWU7CgogIGdldCBfaW1tdXRhYmxlRXJyb3IgPT4gdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkVtcHR5U2V0IGlzIGltbXV0YWJsZSIpOwoKICBAb3ZlcnJpZGUKICBib29sIGFkZChFIGVsZW1lbnQpID0+IF9pbW11dGFibGVFcnJvcjsKICBAb3ZlcnJpZGUKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBlbGVtZW50cykgPT4gX2ltbXV0YWJsZUVycm9yOwoKICBAb3ZlcnJpZGUKICBFIGxvb2t1cChPYmplY3QgZWxlbWVudCkgPT4gbnVsbDsKICBAb3ZlcnJpZGUKICBib29sIHJlbW92ZShPYmplY3QgZWxlbWVudCkgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgdm9pZCByZW1vdmVBbGwoSXRlcmFibGU8T2JqZWN0PiBlbGVtZW50cykge30KICBAb3ZlcnJpZGUKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7fQogIEBvdmVycmlkZQogIHZvaWQgcmV0YWluQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpIHt9CiAgQG92ZXJyaWRlCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkge30KICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2godm9pZCBhY3Rpb24oRSBlbGVtZW50KSkge30KICBAb3ZlcnJpZGUKICB2b2lkIGNsZWFyKCkge30KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWlucyhPYmplY3QgZWxlbWVudCkgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc0FsbChJdGVyYWJsZTxPYmplY3Q+IG90aGVyKSA9PiBvdGhlci5pc0VtcHR5OwoKICBAb3ZlcnJpZGUKICBTZXQ8RT4gdW5pb24oU2V0PEU+IG90aGVyKSA9PiBuZXcgU2V0LmZyb20ob3RoZXIpOwogIEBvdmVycmlkZQogIFNldDxFPiBpbnRlcnNlY3Rpb24oU2V0PE9iamVjdD4gb3RoZXIpID0+IHRoaXM7CiAgQG92ZXJyaWRlCiAgU2V0PEU+IGRpZmZlcmVuY2UoU2V0PE9iamVjdD4gb3RoZXIpID0+IHRoaXM7CiAgQG92ZXJyaWRlCiAgU2V0PEU+IHRvU2V0KCkgPT4gbmV3IFNldDxFPigpOwp9CgpjbGFzcyBfRW1wdHlTZXRJdGVyYXRvciBpbXBsZW1lbnRzIEl0ZXJhdG9yPE51bGw+IHsKICBjb25zdCBfRW1wdHlTZXRJdGVyYXRvcigpOwoKICBAb3ZlcnJpZGUKICBOdWxsIGdldCBjdXJyZW50ID0+IG51bGw7CiAgQG92ZXJyaWRlCiAgYm9vbCBtb3ZlTmV4dCgpID0+IGZhbHNlOwp9CkUATk48AR8BLAFHHQEMMgwtDBcMHAFOAQwqDDgBDCQMKAwvDCwMLwwsDCoMEgEMKgw9AQw1DDIMMAwiAgE0HQEMHAwcAgEncGFja2FnZTpjb21waWxlci9zcmMvdXRpbC9lbXB0eXNldC5kYXJ0LnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3V0aWwvbWFwbGV0LmRhcnSeHS8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMudXRpbC5tYXBsZXQ7CgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbicgc2hvdyBNYXBCYXNlLCBJdGVyYWJsZUJhc2U7CgpjbGFzcyBNYXBsZXQ8SywgVj4gZXh0ZW5kcyBNYXBCYXNlPEssIFY+IHsKICBzdGF0aWMgY29uc3QgX01hcGxldE1hcmtlciBfTUFSS0VSID0gY29uc3QgX01hcGxldE1hcmtlcigpOwogIHN0YXRpYyBjb25zdCBpbnQgQ0FQQUNJVFkgPSA4OwoKLy8gVGhlIG1hcGxldCBjYW4gYmUgaW4gb25lIG9mIGZvdXIgc3RhdGVzOgogIC8vCiAgLy8gICAqIEVtcHR5ICAgICAgICAgIChleHRyYTogbnVsbCwgICBrZXk6IG1hcmtlciwgdmFsdWU6IG51bGwpCiAgLy8gICAqIFNpbmdsZSBlbGVtZW50IChleHRyYTogbnVsbCwgICBrZXk6IGtleSwgICAgdmFsdWU6IHZhbHVlKQogIC8vICAgKiBMaXN0LWJhY2tlZCAgICAoZXh0cmE6IGxlbmd0aCwga2V5OiBsaXN0LCAgIHZhbHVlOiBudWxsKQogIC8vICAgKiBNYXAtYmFja2VkICAgICAoZXh0cmE6IG1hcmtlciwga2V5OiBtYXAsICAgIHZhbHVlOiBudWxsKQogIC8vCiAgLy8gV2hlbiB0aGUgbWFwbGV0IGlzIGxpc3QtYmFja2VkLCB0aGUgbGlzdCBoYXMgdHdvIHNlY3Rpb25zOiBPbmUKICAvLyBmb3Iga2V5cyBhbmQgb25lIGZvciB2YWx1ZXMuIFRoZSBmaXJzdCBbQ0FQQUNJVFldIGVudHJpZXMgYXJlCiAgLy8gdGhlIGtleXMgYW5kIHRoZXkgbWF5IGNvbnRhaW4gbWFya2VycyBmb3IgZGVsZXRlZCBlbGVtZW50cy4gQWZ0ZXIKICAvLyB0aGUga2V5cyB0aGVyZSBhcmUgW0NBUEFDSVRZXSBlbnRyaWVzIGZvciB0aGUgdmFsdWVzLgoKICBkeW5hbWljIF9rZXkgPSBfTUFSS0VSOwogIHZhciBfdmFsdWU7CiAgdmFyIF9leHRyYTsKCiAgTWFwbGV0KCk7CgogIE1hcGxldC5mcm9tKE1hcGxldDxLLCBWPiBvdGhlcikgewogICAgb3RoZXIuZm9yRWFjaCgoSyBrZXksIFYgdmFsdWUpIHsKICAgICAgdGhpc1trZXldID0gdmFsdWU7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRW1wdHkgewogICAgaWYgKF9leHRyYSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfTUFSS0VSID09IF9rZXk7CiAgICB9IGVsc2UgaWYgKF9NQVJLRVIgPT0gX2V4dHJhKSB7CiAgICAgIHJldHVybiBfa2V5LmlzRW1wdHk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX2V4dHJhID09IDA7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGxlbmd0aCB7CiAgICBpZiAoX2V4dHJhID09IG51bGwpIHsKICAgICAgcmV0dXJuIChfTUFSS0VSID09IF9rZXkpID8gMCA6IDE7CiAgICB9IGVsc2UgaWYgKF9NQVJLRVIgPT0gX2V4dHJhKSB7CiAgICAgIHJldHVybiBfa2V5Lmxlbmd0aDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfZXh0cmE7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zS2V5KE9iamVjdCBrZXkpIHsKICAgIGlmIChfZXh0cmEgPT0gbnVsbCkgewogICAgICByZXR1cm4gX2tleSA9PSBrZXk7CiAgICB9IGVsc2UgaWYgKF9NQVJLRVIgPT0gX2V4dHJhKSB7CiAgICAgIHJldHVybiBfa2V5LmNvbnRhaW5zS2V5KGtleSk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKGludCByZW1haW5pbmcgPSBfZXh0cmEsIGkgPSAwOyByZW1haW5pbmcgPiAwICYmIGkgPCBDQVBBQ0lUWTsgaSsrKSB7CiAgICAgICAgdmFyIGNhbmRpZGF0ZSA9IF9rZXlbaV07CiAgICAgICAgaWYgKF9NQVJLRVIgPT0gY2FuZGlkYXRlKSBjb250aW51ZTsKICAgICAgICBpZiAoY2FuZGlkYXRlID09IGtleSkgcmV0dXJuIHRydWU7CiAgICAgICAgcmVtYWluaW5nLS07CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgViBvcGVyYXRvciBbXShPYmplY3Qga2V5KSB7CiAgICBpZiAoX2V4dHJhID09IG51bGwpIHsKICAgICAgcmV0dXJuIChfa2V5ID09IGtleSkgPyBfdmFsdWUgOiBudWxsOwogICAgfSBlbHNlIGlmIChfTUFSS0VSID09IF9leHRyYSkgewogICAgICByZXR1cm4gX2tleVtrZXldOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChpbnQgcmVtYWluaW5nID0gX2V4dHJhLCBpID0gMDsgcmVtYWluaW5nID4gMCAmJiBpIDwgQ0FQQUNJVFk7IGkrKykgewogICAgICAgIHZhciBjYW5kaWRhdGUgPSBfa2V5W2ldOwogICAgICAgIGlmIChfTUFSS0VSID09IGNhbmRpZGF0ZSkgY29udGludWU7CiAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PSBrZXkpIHJldHVybiBfa2V5W2kgKyBDQVBBQ0lUWV07CiAgICAgICAgcmVtYWluaW5nLS07CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIG9wZXJhdG9yIFtdPShLIGtleSwgViB2YWx1ZSkgewogICAgaWYgKF9leHRyYSA9PSBudWxsKSB7CiAgICAgIGlmIChfTUFSS0VSID09IF9rZXkpIHsKICAgICAgICBfa2V5ID0ga2V5OwogICAgICAgIF92YWx1ZSA9IHZhbHVlOwogICAgICB9IGVsc2UgaWYgKF9rZXkgPT0ga2V5KSB7CiAgICAgICAgX3ZhbHVlID0gdmFsdWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgTGlzdCBsaXN0ID0gbmV3IExpc3QoQ0FQQUNJVFkgKiAyKTsKICAgICAgICBsaXN0WzBdID0gX2tleTsKICAgICAgICBsaXN0WzFdID0ga2V5OwogICAgICAgIGxpc3RbQ0FQQUNJVFldID0gX3ZhbHVlOwogICAgICAgIGxpc3RbQ0FQQUNJVFkgKyAxXSA9IHZhbHVlOwogICAgICAgIF9rZXkgPSBsaXN0OwogICAgICAgIF92YWx1ZSA9IG51bGw7CiAgICAgICAgX2V4dHJhID0gMjsgLy8gVHdvIGVsZW1lbnRzLgogICAgICB9CiAgICB9IGVsc2UgaWYgKF9NQVJLRVIgPT0gX2V4dHJhKSB7CiAgICAgIF9rZXlba2V5XSA9IHZhbHVlOwogICAgfSBlbHNlIHsKICAgICAgaW50IHJlbWFpbmluZyA9IF9leHRyYTsKICAgICAgaW50IGluZGV4ID0gMDsKICAgICAgaW50IGNvcHlUbywgY29weUZyb207CiAgICAgIHdoaWxlIChyZW1haW5pbmcgPiAwICYmIGluZGV4IDwgQ0FQQUNJVFkpIHsKICAgICAgICB2YXIgY2FuZGlkYXRlID0gX2tleVtpbmRleF07CiAgICAgICAgaWYgKF9NQVJLRVIgPT0gY2FuZGlkYXRlKSB7CiAgICAgICAgICAvLyBLZWVwIHRyYWNrIG9mIHRoZSBsYXN0IHJhbmdlIG9mIGVtcHR5IHNsb3RzIGluIHRoZQogICAgICAgICAgLy8gbGlzdC4gV2hlbiB3ZSdyZSBkb25lIHdlJ2xsIG1vdmUgYWxsIHRoZSBlbGVtZW50cwogICAgICAgICAgLy8gYWZ0ZXIgdGhvc2UgZW1wdHkgc2xvdHMgZG93biwgc28gdGhhdCBhZGRpbmcgYW4gZWxlbWVudAogICAgICAgICAgLy8gYWZ0ZXIgdGhhdCB3aWxsIHByZXNlcnZlIHRoZSBpbnNlcnRpb24gb3JkZXIuCiAgICAgICAgICBpZiAoY29weUZyb20gPT0gaW5kZXgpIHsKICAgICAgICAgICAgY29weUZyb20rKzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvcHlUbyA9IGluZGV4OwogICAgICAgICAgICBjb3B5RnJvbSA9IGluZGV4ICsgMTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGNhbmRpZGF0ZSA9PSBrZXkpIHsKICAgICAgICAgIF9rZXlbQ0FQQUNJVFkgKyBpbmRleF0gPSB2YWx1ZTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gU2tpcHBlZCBhbiBlbGVtZW50IHRoYXQgZGlkbid0IG1hdGNoLgogICAgICAgICAgcmVtYWluaW5nLS07CiAgICAgICAgfQogICAgICAgIGluZGV4Kys7CiAgICAgIH0KICAgICAgaWYgKGluZGV4IDwgQ0FQQUNJVFkpIHsKICAgICAgICBfa2V5W2luZGV4XSA9IGtleTsKICAgICAgICBfa2V5W0NBUEFDSVRZICsgaW5kZXhdID0gdmFsdWU7CiAgICAgICAgX2V4dHJhKys7CiAgICAgIH0gZWxzZSBpZiAoX2V4dHJhIDwgQ0FQQUNJVFkpIHsKICAgICAgICAvLyBNb3ZlIHRoZSBsYXN0IGVsZW1lbnRzIGRvd24gaW50byB0aGUgbGFzdCBlbXB0eSBzbG90cwogICAgICAgIC8vIHNvIHRoYXQgd2UgaGF2ZSBlbXB0eSBzbG90cyBhZnRlciB0aGUgbGFzdCBlbGVtZW50LgogICAgICAgIHdoaWxlIChjb3B5RnJvbSA8IENBUEFDSVRZKSB7CiAgICAgICAgICBfa2V5W2NvcHlUb10gPSBfa2V5W2NvcHlGcm9tXTsKICAgICAgICAgIF9rZXlbQ0FQQUNJVFkgKyBjb3B5VG9dID0gX2tleVtDQVBBQ0lUWSArIGNvcHlGcm9tXTsKICAgICAgICAgIGNvcHlUbysrOwogICAgICAgICAgY29weUZyb20rKzsKICAgICAgICB9CiAgICAgICAgLy8gSW5zZXJ0IHRoZSBuZXcgZWxlbWVudCBhcyB0aGUgbGFzdCBlbGVtZW50LgogICAgICAgIF9rZXlbY29weVRvXSA9IGtleTsKICAgICAgICBfa2V5W0NBUEFDSVRZICsgY29weVRvXSA9IHZhbHVlOwogICAgICAgIGNvcHlUbysrOwogICAgICAgIC8vIEFkZCBvbmUgdG8gdGhlIGxlbmd0aCBlbmNvZGVkIGluIHRoZSBleHRyYSBmaWVsZC4KICAgICAgICBfZXh0cmErKzsKICAgICAgICAvLyBDbGVhciBhbGwgZWxlbWVudHMgYWZ0ZXIgdGhlIG5ldyBsYXN0IGVsZW1lbnRzIHRvCiAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IGtlZXAgZXh0cmEgc3R1ZmYgYWxpdmUuCiAgICAgICAgd2hpbGUgKGNvcHlUbyA8IENBUEFDSVRZKSB7CiAgICAgICAgICBfa2V5W2NvcHlUb10gPSBfa2V5W0NBUEFDSVRZICsgY29weVRvXSA9IG51bGw7CiAgICAgICAgICBjb3B5VG8rKzsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIG1hcCA9IG5ldyBNYXA8SywgVj4oKTsKICAgICAgICBmb3JFYWNoKChlYWNoS2V5LCBlYWNoVmFsdWUpID0+IG1hcFtlYWNoS2V5XSA9IGVhY2hWYWx1ZSk7CiAgICAgICAgbWFwW2tleV0gPSB2YWx1ZTsKICAgICAgICBfa2V5ID0gbWFwOwogICAgICAgIF9leHRyYSA9IF9NQVJLRVI7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIFYgcmVtb3ZlKE9iamVjdCBrZXkpIHsKICAgIGlmIChfZXh0cmEgPT0gbnVsbCkgewogICAgICBpZiAoX2tleSAhPSBrZXkpIHJldHVybiBudWxsOwogICAgICBfa2V5ID0gX01BUktFUjsKICAgICAgViByZXN1bHQgPSBfdmFsdWU7CiAgICAgIF92YWx1ZSA9IG51bGw7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9IGVsc2UgaWYgKF9NQVJLRVIgPT0gX2V4dHJhKSB7CiAgICAgIHJldHVybiBfa2V5LnJlbW92ZShrZXkpOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChpbnQgcmVtYWluaW5nID0gX2V4dHJhLCBpID0gMDsgcmVtYWluaW5nID4gMCAmJiBpIDwgQ0FQQUNJVFk7IGkrKykgewogICAgICAgIHZhciBjYW5kaWRhdGUgPSBfa2V5W2ldOwogICAgICAgIGlmIChfTUFSS0VSID09IGNhbmRpZGF0ZSkgY29udGludWU7CiAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PSBrZXkpIHsKICAgICAgICAgIGludCB2YWx1ZUluZGV4ID0gQ0FQQUNJVFkgKyBpOwogICAgICAgICAgdmFyIHJlc3VsdCA9IF9rZXlbdmFsdWVJbmRleF07CiAgICAgICAgICBfa2V5W2ldID0gX01BUktFUjsKICAgICAgICAgIF9rZXlbdmFsdWVJbmRleF0gPSBudWxsOwogICAgICAgICAgX2V4dHJhLS07CiAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0KICAgICAgICByZW1haW5pbmctLTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaCh2b2lkIGFjdGlvbihLIGtleSwgViB2YWx1ZSkpIHsKICAgIGlmIChfZXh0cmEgPT0gbnVsbCkgewogICAgICBpZiAoX01BUktFUiAhPSBfa2V5KSBhY3Rpb24oX2tleSwgX3ZhbHVlKTsKICAgIH0gZWxzZSBpZiAoX01BUktFUiA9PSBfZXh0cmEpIHsKICAgICAgX2tleS5mb3JFYWNoKGFjdGlvbik7CiAgICB9IGVsc2UgewogICAgICBmb3IgKGludCByZW1haW5pbmcgPSBfZXh0cmEsIGkgPSAwOyByZW1haW5pbmcgPiAwICYmIGkgPCBDQVBBQ0lUWTsgaSsrKSB7CiAgICAgICAgdmFyIGNhbmRpZGF0ZSA9IF9rZXlbaV07CiAgICAgICAgaWYgKF9NQVJLRVIgPT0gY2FuZGlkYXRlKSBjb250aW51ZTsKICAgICAgICBhY3Rpb24oY2FuZGlkYXRlLCBfa2V5W0NBUEFDSVRZICsgaV0pOwogICAgICAgIHJlbWFpbmluZy0tOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsZWFyKCkgewogICAgX2tleSA9IF9NQVJLRVI7CiAgICBfdmFsdWUgPSBfZXh0cmEgPSBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Sz4gZ2V0IGtleXMgPT4gbmV3IF9NYXBsZXRLZXlJdGVyYWJsZTxLPih0aGlzKTsKfQoKY2xhc3MgX01hcGxldE1hcmtlciB7CiAgY29uc3QgX01hcGxldE1hcmtlcigpOwp9CgpjbGFzcyBfTWFwbGV0S2V5SXRlcmFibGU8Sz4gZXh0ZW5kcyBJdGVyYWJsZUJhc2U8Sz4gewogIGZpbmFsIE1hcGxldDxLLCBkeW5hbWljPiBtYXBsZXQ7CgogIF9NYXBsZXRLZXlJdGVyYWJsZSh0aGlzLm1hcGxldCk7CgogIEBvdmVycmlkZQogIEl0ZXJhdG9yPEs+IGdldCBpdGVyYXRvciB7CiAgICBpZiAobWFwbGV0Ll9leHRyYSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBuZXcgX01hcGxldFNpbmdsZUl0ZXJhdG9yPEs+KG1hcGxldC5fa2V5KTsKICAgIH0gZWxzZSBpZiAoTWFwbGV0Ll9NQVJLRVIgPT0gbWFwbGV0Ll9leHRyYSkgewogICAgICByZXR1cm4gbWFwbGV0Ll9rZXkua2V5cy5pdGVyYXRvcjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgX01hcGxldExpc3RJdGVyYXRvcjxLPihtYXBsZXQuX2tleSwgbWFwbGV0Ll9leHRyYSk7CiAgICB9CiAgfQp9CgpjbGFzcyBfTWFwbGV0U2luZ2xlSXRlcmF0b3I8Sz4gaW1wbGVtZW50cyBJdGVyYXRvcjxLPiB7CiAgdmFyIF9lbGVtZW50OwogIEsgX2N1cnJlbnQ7CgogIF9NYXBsZXRTaW5nbGVJdGVyYXRvcih0aGlzLl9lbGVtZW50KTsKCiAgQG92ZXJyaWRlCiAgSyBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChNYXBsZXQuX01BUktFUiA9PSBfZWxlbWVudCkgewogICAgICBfY3VycmVudCA9IG51bGw7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIF9jdXJyZW50ID0gX2VsZW1lbnQ7CiAgICBfZWxlbWVudCA9IE1hcGxldC5fTUFSS0VSOwogICAgcmV0dXJuIHRydWU7CiAgfQp9CgpjbGFzcyBfTWFwbGV0TGlzdEl0ZXJhdG9yPEs+IGltcGxlbWVudHMgSXRlcmF0b3I8Sz4gewogIGZpbmFsIExpc3QgX2xpc3Q7CiAgaW50IF9yZW1haW5pbmc7CiAgaW50IF9pbmRleCA9IDA7CiAgSyBfY3VycmVudDsKCiAgX01hcGxldExpc3RJdGVyYXRvcih0aGlzLl9saXN0LCB0aGlzLl9yZW1haW5pbmcpOwoKICBAb3ZlcnJpZGUKICBLIGdldCBjdXJyZW50ID0+IF9jdXJyZW50OwoKICBAb3ZlcnJpZGUKICBib29sIG1vdmVOZXh0KCkgewogICAgd2hpbGUgKF9yZW1haW5pbmcgPiAwKSB7CiAgICAgIHZhciBjYW5kaWRhdGUgPSBfbGlzdFtfaW5kZXgrK107CiAgICAgIGlmIChNYXBsZXQuX01BUktFUiAhPSBjYW5kaWRhdGUpIHsKICAgICAgICBfY3VycmVudCA9IGNhbmRpZGF0ZTsKICAgICAgICBfcmVtYWluaW5nLS07CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIF9jdXJyZW50ID0gbnVsbDsKICAgIHJldHVybiBmYWxzZTsKICB9Cn0KgSgATk48AR0BNQErPiEBLAVCQ0JCBURDRzsBGg4OAQwBJCUZCAQBDBUaHiQbDRoGBAEMExooJBoNFQYEAQwhGhokJA1QISwrFQgUBgQBDB4aLCQYDVAhLDkVCBMGBAEMJhodFBggGA8sGBchJBUXJQgkGQ0eFRwyJSRAP0U7IxgTHCIMJyoSETMXChEIHhsoEiZBPyYpPxQWCjccKRI9Ej02JDkUCg8jQxoUGggGBAEMGRokFhkVFSQfDVAhLCApKR0jFBkKFQgTBgQBDC4aMSQcDVAhLC8VCAYEAQwRFBwEAQw7AgEWGQIBNiMBIwEMHSE4MigNRQYEAgE4EA4BKAEMHQEMFCYXFAYZHxEEAgE2FBISDgE0AQwdAQwUHScpHhYVCAYVEgQCASVwYWNrYWdlOmNvbXBpbGVyL3NyYy91dGlsL21hcGxldC5kYXJ0LnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3V0aWwvc2V0bGV0LmRhcnSiOC8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMudXRpbC5zZXRsZXQ7CgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbicgc2hvdyBTZXRCYXNlOwoKY2xhc3MgU2V0bGV0PEU+IGV4dGVuZHMgU2V0QmFzZTxFPiB7CiAgc3RhdGljIGNvbnN0IF9TZXRsZXRNYXJrZXIgX01BUktFUiA9IGNvbnN0IF9TZXRsZXRNYXJrZXIoKTsKICBzdGF0aWMgY29uc3QgaW50IENBUEFDSVRZID0gODsKCiAgLy8gVGhlIHNldGxldCBjYW4gYmUgaW4gb25lIG9mIGZvdXIgc3RhdGVzOgogIC8vCiAgLy8gICAqIEVtcHR5ICAgICAgICAgIChleHRyYTogbnVsbCwgICBjb250ZW50czogbWFya2VyKQogIC8vICAgKiBTaW5nbGUgZWxlbWVudCAoZXh0cmE6IG51bGwsICAgY29udGVudHM6IGVsZW1lbnQpCiAgLy8gICAqIExpc3QtYmFja2VkICAgIChleHRyYTogbGVuZ3RoLCBjb250ZW50czogbGlzdCkKICAvLyAgICogU2V0LWJhY2tlZCAgICAgKGV4dHJhOiBtYXJrZXIsIGNvbnRlbnRzOiBzZXQpCiAgLy8KICAvLyBXaGVuIHRoZSBzZXRsZXQgaXMgbGlzdC1iYWNrZWQsIHRoZSBsaXN0IGluIHRoZSBjb250ZW50cyBmaWVsZAogIC8vIG1heSBoYXZlIGVtcHR5IHNsb3RzIGZpbGxlZCB3aXRoIHRoZSBtYXJrZXIgdmFsdWUuCiAgZHluYW1pYyBfY29udGVudHMgPSBfTUFSS0VSOwogIHZhciBfZXh0cmE7CgogIFNldGxldCgpOwogIFNldGxldC5mcm9tKEl0ZXJhYmxlPEU+IGVsZW1lbnRzKSB7CiAgICBhZGRBbGwoZWxlbWVudHMpOwogIH0KCiAgc3RhdGljIFNldDxSPiBfbmV3U2V0PFI+KCkgPT4gbmV3IFNldGxldDxSPigpOwoKICBAb3ZlcnJpZGUKICBTZXQ8Uj4gY2FzdDxSPigpID0+IFNldC5jYXN0RnJvbTxFLCBSPih0aGlzLCBuZXdTZXQ6IF9uZXdTZXQpOwogIEBvdmVycmlkZQogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciB7CiAgICBpZiAoX2V4dHJhID09IG51bGwpIHsKICAgICAgcmV0dXJuIG5ldyBfU2V0bGV0U2luZ2xlSXRlcmF0b3I8RT4oX2NvbnRlbnRzKTsKICAgIH0gZWxzZSBpZiAoX01BUktFUiA9PSBfZXh0cmEpIHsKICAgICAgcmV0dXJuIF9jb250ZW50cy5pdGVyYXRvcjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgX1NldGxldExpc3RJdGVyYXRvcjxFPihfY29udGVudHMsIF9leHRyYSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGxlbmd0aCB7CiAgICBpZiAoX2V4dHJhID09IG51bGwpIHsKICAgICAgcmV0dXJuIChfTUFSS0VSID09IF9jb250ZW50cykgPyAwIDogMTsKICAgIH0gZWxzZSBpZiAoX01BUktFUiA9PSBfZXh0cmEpIHsKICAgICAgcmV0dXJuIF9jb250ZW50cy5sZW5ndGg7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX2V4dHJhOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFbXB0eSB7CiAgICBpZiAoX2V4dHJhID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9NQVJLRVIgPT0gX2NvbnRlbnRzOwogICAgfSBlbHNlIGlmIChfTUFSS0VSID09IF9leHRyYSkgewogICAgICByZXR1cm4gX2NvbnRlbnRzLmlzRW1wdHk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX2V4dHJhID09IDA7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zKE9iamVjdCBlbGVtZW50KSB7CiAgICBpZiAoX2V4dHJhID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9jb250ZW50cyA9PSBlbGVtZW50OwogICAgfSBlbHNlIGlmIChfTUFSS0VSID09IF9leHRyYSkgewogICAgICByZXR1cm4gX2NvbnRlbnRzLmNvbnRhaW5zKGVsZW1lbnQpOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChpbnQgcmVtYWluaW5nID0gX2V4dHJhLCBpID0gMDsgcmVtYWluaW5nID4gMCAmJiBpIDwgQ0FQQUNJVFk7IGkrKykgewogICAgICAgIHZhciBjYW5kaWRhdGUgPSBfY29udGVudHNbaV07CiAgICAgICAgaWYgKF9NQVJLRVIgPT0gY2FuZGlkYXRlKSBjb250aW51ZTsKICAgICAgICBpZiAoY2FuZGlkYXRlID09IGVsZW1lbnQpIHJldHVybiB0cnVlOwogICAgICAgIHJlbWFpbmluZy0tOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGJvb2wgYWRkKEUgZWxlbWVudCkgewogICAgaWYgKF9leHRyYSA9PSBudWxsKSB7CiAgICAgIGlmIChfTUFSS0VSID09IF9jb250ZW50cykgewogICAgICAgIF9jb250ZW50cyA9IGVsZW1lbnQ7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0gZWxzZSBpZiAoX2NvbnRlbnRzID09IGVsZW1lbnQpIHsKICAgICAgICAvLyBEbyBub3RoaW5nLgogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBMaXN0IGxpc3QgPSBuZXcgTGlzdChDQVBBQ0lUWSk7CiAgICAgICAgbGlzdFswXSA9IF9jb250ZW50czsKICAgICAgICBsaXN0WzFdID0gZWxlbWVudDsKICAgICAgICBfY29udGVudHMgPSBsaXN0OwogICAgICAgIF9leHRyYSA9IDI7IC8vIFR3byBlbGVtZW50cy4KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfSBlbHNlIGlmIChfTUFSS0VSID09IF9leHRyYSkgewogICAgICByZXR1cm4gX2NvbnRlbnRzLmFkZChlbGVtZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIGludCByZW1haW5pbmcgPSBfZXh0cmE7CiAgICAgIGludCBpbmRleCA9IDA7CiAgICAgIGludCBjb3B5VG8sIGNvcHlGcm9tOwogICAgICB3aGlsZSAocmVtYWluaW5nID4gMCAmJiBpbmRleCA8IENBUEFDSVRZKSB7CiAgICAgICAgdmFyIGNhbmRpZGF0ZSA9IF9jb250ZW50c1tpbmRleCsrXTsKICAgICAgICBpZiAoX01BUktFUiA9PSBjYW5kaWRhdGUpIHsKICAgICAgICAgIC8vIEtlZXAgdHJhY2sgb2YgdGhlIGxhc3QgcmFuZ2Ugb2YgZW1wdHkgc2xvdHMgaW4gdGhlCiAgICAgICAgICAvLyBsaXN0LiBXaGVuIHdlJ3JlIGRvbmUgd2UnbGwgbW92ZSBhbGwgdGhlIGVsZW1lbnRzCiAgICAgICAgICAvLyBhZnRlciB0aG9zZSBlbXB0eSBzbG90cyBkb3duLCBzbyB0aGF0IGFkZGluZyBhbiBlbGVtZW50CiAgICAgICAgICAvLyBhZnRlciB0aGF0IHdpbGwgcHJlc2VydmUgdGhlIGluc2VydGlvbiBvcmRlci4KICAgICAgICAgIGlmIChjb3B5RnJvbSA9PSBpbmRleCAtIDEpIHsKICAgICAgICAgICAgY29weUZyb20rKzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvcHlUbyA9IGluZGV4IC0gMTsKICAgICAgICAgICAgY29weUZyb20gPSBpbmRleDsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0gZWxzZSBpZiAoY2FuZGlkYXRlID09IGVsZW1lbnQpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgcmVtYWluaW5nLS07CiAgICAgIH0KICAgICAgaWYgKGluZGV4IDwgQ0FQQUNJVFkpIHsKICAgICAgICBfY29udGVudHNbaW5kZXhdID0gZWxlbWVudDsKICAgICAgICBfZXh0cmErKzsKICAgICAgfSBlbHNlIGlmIChfZXh0cmEgPCBDQVBBQ0lUWSkgewogICAgICAgIC8vIE1vdmUgdGhlIGxhc3QgZWxlbWVudHMgZG93biBpbnRvIHRoZSBsYXN0IGVtcHR5IHNsb3RzCiAgICAgICAgLy8gc28gdGhhdCB3ZSBoYXZlIGVtcHR5IHNsb3RzIGFmdGVyIHRoZSBsYXN0IGVsZW1lbnQuCiAgICAgICAgd2hpbGUgKGNvcHlGcm9tIDwgQ0FQQUNJVFkpIHsKICAgICAgICAgIF9jb250ZW50c1tjb3B5VG8rK10gPSBfY29udGVudHNbY29weUZyb20rK107CiAgICAgICAgfQogICAgICAgIC8vIEluc2VydCB0aGUgbmV3IGVsZW1lbnQgYXMgdGhlIGxhc3QgZWxlbWVudC4KICAgICAgICBfY29udGVudHNbY29weVRvKytdID0gZWxlbWVudDsKICAgICAgICBfZXh0cmErKzsKICAgICAgICAvLyBDbGVhciBhbGwgZWxlbWVudHMgYWZ0ZXIgdGhlIG5ldyBsYXN0IGVsZW1lbnRzIHRvCiAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IGtlZXAgZXh0cmEgc3R1ZmYgYWxpdmUuCiAgICAgICAgd2hpbGUgKGNvcHlUbyA8IENBUEFDSVRZKSBfY29udGVudHNbY29weVRvKytdID0gbnVsbDsKICAgICAgfSBlbHNlIHsKICAgICAgICBfY29udGVudHMgPSBuZXcgU2V0PEU+KCkKICAgICAgICAgIC4uYWRkQWxsKChfY29udGVudHMgYXMgTGlzdCkuY2FzdDxFPigpKQogICAgICAgICAgLi5hZGQoZWxlbWVudCk7CiAgICAgICAgX2V4dHJhID0gX01BUktFUjsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IGVsZW1lbnRzKSB7CiAgICBlbGVtZW50cy5mb3JFYWNoKChlYWNoKSA9PiBhZGQoZWFjaCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgRSBsb29rdXAoT2JqZWN0IGVsZW1lbnQpIHsKICAgIGlmIChfZXh0cmEgPT0gbnVsbCkgewogICAgICByZXR1cm4gX2NvbnRlbnRzID09IGVsZW1lbnQgPyBfY29udGVudHMgOiBudWxsOwogICAgfSBlbHNlIGlmIChfTUFSS0VSID09IF9leHRyYSkgewogICAgICByZXR1cm4gX2NvbnRlbnRzLmxvb2t1cChlbGVtZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAoaW50IHJlbWFpbmluZyA9IF9leHRyYSwgaSA9IDA7IHJlbWFpbmluZyA+IDAgJiYgaSA8IENBUEFDSVRZOyBpKyspIHsKICAgICAgICB2YXIgY2FuZGlkYXRlID0gX2NvbnRlbnRzW2ldOwogICAgICAgIGlmIChfTUFSS0VSID09IGNhbmRpZGF0ZSkgY29udGludWU7CiAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PSBlbGVtZW50KSByZXR1cm4gY2FuZGlkYXRlOwogICAgICAgIHJlbWFpbmluZy0tOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCByZW1vdmUoT2JqZWN0IGVsZW1lbnQpIHsKICAgIGlmIChfZXh0cmEgPT0gbnVsbCkgewogICAgICBpZiAoX2NvbnRlbnRzID09IGVsZW1lbnQpIHsKICAgICAgICBfY29udGVudHMgPSBfTUFSS0VSOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfSBlbHNlIGlmIChfTUFSS0VSID09IF9leHRyYSkgewogICAgICByZXR1cm4gX2NvbnRlbnRzLnJlbW92ZShlbGVtZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAoaW50IHJlbWFpbmluZyA9IF9leHRyYSwgaSA9IDA7IHJlbWFpbmluZyA+IDAgJiYgaSA8IENBUEFDSVRZOyBpKyspIHsKICAgICAgICB2YXIgY2FuZGlkYXRlID0gX2NvbnRlbnRzW2ldOwogICAgICAgIGlmIChfTUFSS0VSID09IGNhbmRpZGF0ZSkgY29udGludWU7CiAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PSBlbGVtZW50KSB7CiAgICAgICAgICBfY29udGVudHNbaV0gPSBfTUFSS0VSOwogICAgICAgICAgX2V4dHJhLS07CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmVtYWluaW5nLS07CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZW1vdmVBbGwoSXRlcmFibGU8T2JqZWN0PiBvdGhlcikgewogICAgb3RoZXIuZm9yRWFjaChyZW1vdmUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgaWYgKF9leHRyYSA9PSBudWxsKSB7CiAgICAgIGlmICh0ZXN0KF9jb250ZW50cykpIHsKICAgICAgICBfY29udGVudHMgPSBfTUFSS0VSOwogICAgICB9CiAgICB9IGVsc2UgaWYgKF9NQVJLRVIgPT0gX2V4dHJhKSB7CiAgICAgIF9jb250ZW50cy5yZW1vdmVXaGVyZSh0ZXN0KTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAoaW50IHJlbWFpbmluZyA9IF9leHRyYSwgaSA9IDA7IHJlbWFpbmluZyA+IDAgJiYgaSA8IENBUEFDSVRZOyBpKyspIHsKICAgICAgICB2YXIgY2FuZGlkYXRlID0gX2NvbnRlbnRzW2ldOwogICAgICAgIGlmIChfTUFSS0VSID09IGNhbmRpZGF0ZSkgY29udGludWU7CiAgICAgICAgaWYgKHRlc3QoY2FuZGlkYXRlKSkgewogICAgICAgICAgX2NvbnRlbnRzW2ldID0gX01BUktFUjsKICAgICAgICAgIF9leHRyYS0tOwogICAgICAgIH0KICAgICAgICByZW1haW5pbmctLTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgcmVtb3ZlV2hlcmUoKEUgZWxlbWVudCkgPT4gIXRlc3QoZWxlbWVudCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZXRhaW5BbGwoSXRlcmFibGU8T2JqZWN0PiBlbGVtZW50cykgewogICAgU2V0IHNldCA9IGVsZW1lbnRzIGlzIFNldCA/IGVsZW1lbnRzIDogZWxlbWVudHMudG9TZXQoKTsKICAgIHJlbW92ZVdoZXJlKChFIGVsZW1lbnQpID0+ICFzZXQuY29udGFpbnMoZWxlbWVudCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoKHZvaWQgYWN0aW9uKEUgZWxlbWVudCkpIHsKICAgIGlmIChfZXh0cmEgPT0gbnVsbCkgewogICAgICBpZiAoX01BUktFUiAhPSBfY29udGVudHMpIGFjdGlvbihfY29udGVudHMpOwogICAgfSBlbHNlIGlmIChfTUFSS0VSID09IF9leHRyYSkgewogICAgICBfY29udGVudHMuZm9yRWFjaChhY3Rpb24pOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChpbnQgcmVtYWluaW5nID0gX2V4dHJhLCBpID0gMDsgcmVtYWluaW5nID4gMCAmJiBpIDwgQ0FQQUNJVFk7IGkrKykgewogICAgICAgIHZhciBlbGVtZW50ID0gX2NvbnRlbnRzW2ldOwogICAgICAgIGlmIChfTUFSS0VSID09IGVsZW1lbnQpIGNvbnRpbnVlOwogICAgICAgIGFjdGlvbihlbGVtZW50KTsKICAgICAgICByZW1haW5pbmctLTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc0FsbChJdGVyYWJsZTxPYmplY3Q+IG90aGVyKSB7CiAgICBmb3IgKEUgZSBpbiBvdGhlcikgewogICAgICBpZiAoIXRoaXMuY29udGFpbnMoZSkpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgY2xlYXIoKSB7CiAgICBfY29udGVudHMgPSBfTUFSS0VSOwogICAgX2V4dHJhID0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIFNldDxFPiB1bmlvbihTZXQ8RT4gb3RoZXIpID0+IG5ldyBTZXQ8RT4uZnJvbSh0aGlzKS4uYWRkQWxsKG90aGVyKTsKCiAgQG92ZXJyaWRlCiAgU2V0bGV0PEU+IGludGVyc2VjdGlvbihTZXQ8T2JqZWN0PiBvdGhlcikgPT4KICAgICAgbmV3IFNldGxldDxFPi5mcm9tKHRoaXMud2hlcmUoKGUpID0+IG90aGVyLmNvbnRhaW5zKGUpKSk7CgogIEBvdmVycmlkZQogIFNldGxldDxFPiBkaWZmZXJlbmNlKFNldDxPYmplY3Q+IG90aGVyKSA9PgogICAgICBuZXcgU2V0bGV0PEU+LmZyb20odGhpcy53aGVyZSgoZSkgPT4gIW90aGVyLmNvbnRhaW5zKGUpKSk7CgogIEBvdmVycmlkZQogIFNldGxldDxFPiB0b1NldCgpIHsKICAgIFNldGxldDxFPiByZXN1bHQgPSBuZXcgU2V0bGV0PEU+KCk7CiAgICBpZiAoX2V4dHJhID09IG51bGwpIHsKICAgICAgcmVzdWx0Ll9jb250ZW50cyA9IF9jb250ZW50czsKICAgIH0gZWxzZSBpZiAoX2V4dHJhID09IF9NQVJLRVIpIHsKICAgICAgcmVzdWx0Ll9leHRyYSA9IF9NQVJLRVI7CiAgICAgIHJlc3VsdC5fY29udGVudHMgPSBfY29udGVudHMudG9TZXQoKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlc3VsdC5fZXh0cmEgPSBfZXh0cmE7CiAgICAgIHJlc3VsdC5fY29udGVudHMgPSBfY29udGVudHMudG9MaXN0KCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQoKY2xhc3MgX1NldGxldE1hcmtlciB7CiAgY29uc3QgX1NldGxldE1hcmtlcigpOwogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gIi0iOwp9CgpjbGFzcyBfU2V0bGV0U2luZ2xlSXRlcmF0b3I8RT4gaW1wbGVtZW50cyBJdGVyYXRvcjxFPiB7CiAgdmFyIF9lbGVtZW50OwogIEUgX2N1cnJlbnQ7CiAgX1NldGxldFNpbmdsZUl0ZXJhdG9yKHRoaXMuX2VsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICBFIGdldCBjdXJyZW50ID0+IF9jdXJyZW50OwoKICBAb3ZlcnJpZGUKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKFNldGxldC5fTUFSS0VSID09IF9lbGVtZW50KSB7CiAgICAgIF9jdXJyZW50ID0gbnVsbDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgX2N1cnJlbnQgPSBfZWxlbWVudDsKICAgIF9lbGVtZW50ID0gU2V0bGV0Ll9NQVJLRVI7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCmNsYXNzIF9TZXRsZXRMaXN0SXRlcmF0b3I8RT4gaW1wbGVtZW50cyBJdGVyYXRvcjxFPiB7CiAgZmluYWwgTGlzdCBfbGlzdDsKICBpbnQgX3JlbWFpbmluZzsKICBpbnQgX2luZGV4ID0gMDsKICBFIF9jdXJyZW50OwogIF9TZXRsZXRMaXN0SXRlcmF0b3IodGhpcy5fbGlzdCwgdGhpcy5fcmVtYWluaW5nKTsKCiAgQG92ZXJyaWRlCiAgRSBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIHdoaWxlIChfcmVtYWluaW5nID4gMCkgewogICAgICB2YXIgY2FuZGlkYXRlID0gX2xpc3RbX2luZGV4KytdOwogICAgICBpZiAoU2V0bGV0Ll9NQVJLRVIgIT0gY2FuZGlkYXRlKSB7CiAgICAgICAgX2N1cnJlbnQgPSBjYW5kaWRhdGU7CiAgICAgICAgX3JlbWFpbmluZy0tOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICBfY3VycmVudCA9IG51bGw7CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CoFYAE5OPAEdAScBJT4hAS4FOjs4NwVEOB8OAQwmFgQBMQEMQQwdGjYkIQ08BgQBDBMaLSQfDRUGBAEMFRojJCANGgYEAQwiGiMkKg1QJiwvFQgUBgQBDBgaIh0VKRcWDygdGxolFQgkJQ0eFRwyLCRAP0U7JxgTIB4MFCsYChUIHiQSJkE/JjcKNycSPTY+DyEyGhoIEwYEAQwmKwQBDB0aNiQoDVAmLDQVCBMGBAEMIBoiHRUPFggkKA1QJiwkIhQXChUIFAYEAQwrGwQBDCsaHR0IJCMNUCYsHyIUChUIBgQBDCswBAEMLj04BAEMKRozJCENUCQqGRUIBgQBDC0ZKwYRBAEMDBkTBAEMRgEML0ABDC1BAQwWKBokJB8sDR4tBhMEAgEWGQwVAgE4EA4oAQwdAQwUJhcUBhkfEQQCATYUEhIONAEMHQEMFB0nKR4WFQgGFRIEAgElcGFja2FnZTpjb21waWxlci9zcmMvdXRpbC9zZXRsZXQuZGFydDFzZGtyb290Oi9wa2cva2VybmVsL2xpYi9iaW5hcnkvYXN0X3RvX2JpbmFyeS5kYXJ0wAE+fC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCmxpYnJhcnkga2VybmVsLmFzdF90b19iaW5hcnk7CgppbXBvcnQgJ2RhcnQ6Y29yZScgaGlkZSBNYXBFbnRyeTsKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnIHNob3cgdXRmODsKCmltcG9ydCAnLi4vYXN0LmRhcnQnOwppbXBvcnQgJ3RhZy5kYXJ0JzsKaW1wb3J0ICdkYXJ0OmlvJyBzaG93IEJ5dGVzQnVpbGRlcjsKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwoKLy8vIFdyaXRlcyB0byBhIGJpbmFyeSBmaWxlLgovLy8KLy8vIEEgW0JpbmFyeVByaW50ZXJdIGNhbiBiZSB1c2VkIHRvIHdyaXRlIG9uZSBmaWxlIGFuZCBtdXN0IHRoZW4gYmUKLy8vIGRpc2NhcmRlZC4KY2xhc3MgQmluYXJ5UHJpbnRlciBpbXBsZW1lbnRzIFZpc2l0b3I8dm9pZD4sIEJpbmFyeVNpbmsgewogIFZhcmlhYmxlSW5kZXhlciBfdmFyaWFibGVJbmRleGVyOwogIExhYmVsSW5kZXhlciBfbGFiZWxJbmRleGVyOwogIFN3aXRjaENhc2VJbmRleGVyIF9zd2l0Y2hDYXNlSW5kZXhlcjsKICBmaW5hbCBUeXBlUGFyYW1ldGVySW5kZXhlciBfdHlwZVBhcmFtZXRlckluZGV4ZXIgPSBuZXcgVHlwZVBhcmFtZXRlckluZGV4ZXIoKTsKICBmaW5hbCBTdHJpbmdJbmRleGVyIHN0cmluZ0luZGV4ZXI7CiAgQ29uc3RhbnRJbmRleGVyIF9jb25zdGFudEluZGV4ZXI7CiAgZmluYWwgVXJpSW5kZXhlciBfc291cmNlVXJpSW5kZXhlciA9IG5ldyBVcmlJbmRleGVyKCk7CiAgYm9vbCBfY3VycmVudGx5SW5Ob25pbXBsZW1lbnRhdGlvbiA9IGZhbHNlOwogIGZpbmFsIExpc3Q8Ym9vbD4gX3NvdXJjZXNGcm9tUmVhbEltcGxlbWVudGF0aW9uID0gbmV3IExpc3Q8Ym9vbD4oKTsKICBmaW5hbCBMaXN0PGJvb2w+IF9zb3VyY2VzRnJvbVJlYWxJbXBsZW1lbnRhdGlvbkluTGlicmFyeSA9IG5ldyBMaXN0PGJvb2w+KCk7CiAgTWFwPExpYnJhcnlEZXBlbmRlbmN5LCBpbnQ+IF9saWJyYXJ5RGVwZW5kZW5jeUluZGV4ID0KICAgICAgPExpYnJhcnlEZXBlbmRlbmN5LCBpbnQ+e307CgogIExpc3Q8X01ldGFkYXRhU3Vic2VjdGlvbj4gX21ldGFkYXRhU3Vic2VjdGlvbnM7CgogIGZpbmFsIEJ1ZmZlcmVkU2luayBfbWFpblNpbms7CiAgZmluYWwgQnVmZmVyZWRTaW5rIF9tZXRhZGF0YVNpbms7CiAgZmluYWwgQnl0ZXNTaW5rIF9jb25zdGFudHNCeXRlc1Npbms7CiAgQnVmZmVyZWRTaW5rIF9jb25zdGFudHNTaW5rOwogIEJ1ZmZlcmVkU2luayBfc2luazsKICBib29sIGluY2x1ZGVTb3VyY2VzOwogIGJvb2wgaW5jbHVkZU9mZnNldHM7CgogIExpc3Q8aW50PiBsaWJyYXJ5T2Zmc2V0czsKICBMaXN0PGludD4gY2xhc3NPZmZzZXRzOwogIExpc3Q8aW50PiBwcm9jZWR1cmVPZmZzZXRzOwogIGludCBfYmluYXJ5T2Zmc2V0Rm9yU291cmNlVGFibGUgPSAtMTsKICBpbnQgX2JpbmFyeU9mZnNldEZvckxpbmtUYWJsZSA9IC0xOwogIGludCBfYmluYXJ5T2Zmc2V0Rm9yTWV0YWRhdGFQYXlsb2FkcyA9IC0xOwogIGludCBfYmluYXJ5T2Zmc2V0Rm9yTWV0YWRhdGFNYXBwaW5ncyA9IC0xOwogIGludCBfYmluYXJ5T2Zmc2V0Rm9yU3RyaW5nVGFibGUgPSAtMTsKICBpbnQgX2JpbmFyeU9mZnNldEZvckNvbnN0YW50VGFibGUgPSAtMTsKCiAgTGlzdDxDYW5vbmljYWxOYW1lPiBfY2Fub25pY2FsTmFtZUxpc3Q7CiAgU2V0PENhbm9uaWNhbE5hbWU+IF9rbm93bkNhbm9uaWNhbE5hbWVOb25Sb290VG9wcyA9IG5ldyBTZXQ8Q2Fub25pY2FsTmFtZT4oKTsKICBTZXQ8Q2Fub25pY2FsTmFtZT4gX3JlaW5kZXhlZENhbm9uaWNhbE5hbWVzID0gbmV3IFNldDxDYW5vbmljYWxOYW1lPigpOwoKICAvLy8gQ3JlYXRlIGEgcHJpbnRlciB0aGF0IHdyaXRlcyB0byB0aGUgZ2l2ZW4gW3NpbmtdLgogIC8vLwogIC8vLyBUaGUgQmluYXJ5UHJpbnRlciB3aWxsIHVzZSBpdHMgb3duIGJ1ZmZlciwgc28gdGhlIFtzaW5rXSBkb2VzIG5vdCBuZWVkCiAgLy8vIG9uZS4KICBCaW5hcnlQcmludGVyKFNpbms8TGlzdDxpbnQ+PiBzaW5rLAogICAgICB7U3RyaW5nSW5kZXhlciBzdHJpbmdJbmRleGVyLAogICAgICB0aGlzLmluY2x1ZGVTb3VyY2VzID0gdHJ1ZSwKICAgICAgdGhpcy5pbmNsdWRlT2Zmc2V0cyA9IHRydWV9KQogICAgICA6IF9tYWluU2luayA9IG5ldyBCdWZmZXJlZFNpbmsoc2luayksCiAgICAgICAgX21ldGFkYXRhU2luayA9IG5ldyBCdWZmZXJlZFNpbmsobmV3IEJ5dGVzU2luaygpKSwKICAgICAgICBfY29uc3RhbnRzQnl0ZXNTaW5rID0gbmV3IEJ5dGVzU2luaygpLAogICAgICAgIHN0cmluZ0luZGV4ZXIgPSBzdHJpbmdJbmRleGVyID8/IG5ldyBTdHJpbmdJbmRleGVyKCkgewogICAgX2NvbnN0YW50c1NpbmsgPSBuZXcgQnVmZmVyZWRTaW5rKF9jb25zdGFudHNCeXRlc1NpbmspOwogICAgX2NvbnN0YW50SW5kZXhlciA9IG5ldyBDb25zdGFudEluZGV4ZXIodGhpcy5zdHJpbmdJbmRleGVyLCB0aGlzKTsKICAgIF9zaW5rID0gX21haW5TaW5rOwogIH0KCiAgdm9pZCBfZmx1c2goKSB7CiAgICBfc2luay5mbHVzaEFuZERlc3Ryb3koKTsKICB9CgogIHZvaWQgd3JpdGVCeXRlKGludCBieXRlKSB7CiAgICBhc3NlcnQoKGJ5dGUgJiAweEZGKSA9PSBieXRlKTsKICAgIF9zaW5rLmFkZEJ5dGUoYnl0ZSk7CiAgfQoKICB2b2lkIHdyaXRlQnl0ZXMoTGlzdDxpbnQ+IGJ5dGVzKSB7CiAgICBfc2luay5hZGRCeXRlcyhieXRlcyk7CiAgfQoKICB2b2lkIHdyaXRlVUludDMwKGludCB2YWx1ZSkgewogICAgYXNzZXJ0KHZhbHVlID49IDAgJiYgdmFsdWUgPj4gMzAgPT0gMCk7CiAgICBpZiAodmFsdWUgPCAweDgwKSB7CiAgICAgIF9zaW5rLmFkZEJ5dGUodmFsdWUpOwogICAgfSBlbHNlIGlmICh2YWx1ZSA8IDB4NDAwMCkgewogICAgICBfc2luay5hZGRCeXRlMigodmFsdWUgPj4gOCkgfCAweDgwLCB2YWx1ZSAmIDB4RkYpOwogICAgfSBlbHNlIHsKICAgICAgX3NpbmsuYWRkQnl0ZTQoKHZhbHVlID4+IDI0KSB8IDB4QzAsICh2YWx1ZSA+PiAxNikgJiAweEZGLAogICAgICAgICAgKHZhbHVlID4+IDgpICYgMHhGRiwgdmFsdWUgJiAweEZGKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVVSW50MzIoaW50IHZhbHVlKSB7CiAgICBfc2luay5hZGRCeXRlNCgodmFsdWUgPj4gMjQpICYgMHhGRiwgKHZhbHVlID4+IDE2KSAmIDB4RkYsCiAgICAgICAgKHZhbHVlID4+IDgpICYgMHhGRiwgdmFsdWUgJiAweEZGKTsKICB9CgogIHZvaWQgd3JpdGVCeXRlTGlzdChMaXN0PGludD4gdXRmOEJ5dGVzKSB7CiAgICB3cml0ZVVJbnQzMCh1dGY4Qnl0ZXMubGVuZ3RoKTsKICAgIHdyaXRlQnl0ZXModXRmOEJ5dGVzKTsKICB9CgogIGludCBnZXRCdWZmZXJPZmZzZXQoKSB7CiAgICByZXR1cm4gX3Npbmsub2Zmc2V0OwogIH0KCiAgdm9pZCB3cml0ZVN0cmluZ1RhYmxlKFN0cmluZ0luZGV4ZXIgaW5kZXhlcikgewogICAgX2JpbmFyeU9mZnNldEZvclN0cmluZ1RhYmxlID0gZ2V0QnVmZmVyT2Zmc2V0KCk7CgogICAgLy8gQ29udGFpbmVycyBmb3IgdGhlIHV0ZjggZW5jb2RlZCBzdHJpbmdzLgogICAgZmluYWwgTGlzdDxVaW50OExpc3Q+IGRhdGEgPSBuZXcgTGlzdDxVaW50OExpc3Q+KCk7CiAgICBpbnQgdG90YWxMZW5ndGggPSAwOwogICAgY29uc3QgaW50IG1pbkxlbmd0aCA9IDEgPDwgMTY7CiAgICBVaW50OExpc3QgYnVmZmVyOwogICAgaW50IGluZGV4ID0gMDsKCiAgICAvLyBXcml0ZSB0aGUgZW5kIG9mZnNldHMuCiAgICB3cml0ZVVJbnQzMChpbmRleGVyLmluZGV4Lmxlbmd0aCk7CiAgICBmb3IgKFN0cmluZyBrZXkgaW4gaW5kZXhlci5pbmRleC5rZXlzKSB7CiAgICAgIGlmIChrZXkuaXNOb3RFbXB0eSkgewogICAgICAgIGludCByZXF1aXJlZE1pbkxlbmd0aCA9IGtleS5sZW5ndGg7CiAgICAgICAgaW50IGFsbG9jYXRlTWluTGVuZ3RoID0gcmVxdWlyZWRNaW5MZW5ndGggKiAzOwogICAgICAgIGludCBuZXdJbmRleDsKICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgaWYgKGJ1ZmZlciA9PSBudWxsIHx8IGluZGV4ICsgcmVxdWlyZWRNaW5MZW5ndGggPj0gYnVmZmVyLmxlbmd0aCkgewogICAgICAgICAgICBpbnQgbmV3TGVuZ3RoID0gbWluTGVuZ3RoOwogICAgICAgICAgICBpZiAoYWxsb2NhdGVNaW5MZW5ndGggPiBuZXdMZW5ndGgpIG5ld0xlbmd0aCA9IGFsbG9jYXRlTWluTGVuZ3RoOwogICAgICAgICAgICBpZiAoYnVmZmVyICE9IG51bGwgJiYgaW5kZXggPiAwKSB7CiAgICAgICAgICAgICAgZGF0YS5hZGQobmV3IFVpbnQ4TGlzdC52aWV3KGJ1ZmZlci5idWZmZXIsIDAsIGluZGV4KSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW5kZXggPSAwOwogICAgICAgICAgICBidWZmZXIgPSBuZXcgVWludDhMaXN0KG5ld0xlbmd0aCk7CiAgICAgICAgICB9CiAgICAgICAgICBuZXdJbmRleCA9IE5vdFF1aXRlU3RyaW5nLndyaXRlVXRmOChidWZmZXIsIGluZGV4LCBrZXkpOwogICAgICAgICAgaWYgKG5ld0luZGV4ICE9IC0xKSBicmVhazsKICAgICAgICAgIHJlcXVpcmVkTWluTGVuZ3RoID0gYWxsb2NhdGVNaW5MZW5ndGg7CiAgICAgICAgfQogICAgICAgIGlmIChuZXdJbmRleCA8IDApIHsKICAgICAgICAgIC8vIFV0ZjggZW5jb2RpbmcgZmFpbGVkLgogICAgICAgICAgaWYgKGJ1ZmZlciAhPSBudWxsICYmIGluZGV4ID4gMCkgewogICAgICAgICAgICBkYXRhLmFkZChuZXcgVWludDhMaXN0LnZpZXcoYnVmZmVyLmJ1ZmZlciwgMCwgaW5kZXgpKTsKICAgICAgICAgICAgYnVmZmVyID0gbnVsbDsKICAgICAgICAgICAgaW5kZXggPSAwOwogICAgICAgICAgfQogICAgICAgICAgTGlzdDxpbnQ+IGNvbnZlcnRlZCA9IHV0ZjguZW5jb2Rlci5jb252ZXJ0KGtleSk7CiAgICAgICAgICBkYXRhLmFkZChjb252ZXJ0ZWQpOwogICAgICAgICAgdG90YWxMZW5ndGggKz0gY29udmVydGVkLmxlbmd0aDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdG90YWxMZW5ndGggKz0gbmV3SW5kZXggLSBpbmRleDsKICAgICAgICAgIGluZGV4ID0gbmV3SW5kZXg7CiAgICAgICAgfQogICAgICB9CiAgICAgIHdyaXRlVUludDMwKHRvdGFsTGVuZ3RoKTsKICAgIH0KICAgIGlmIChidWZmZXIgIT0gbnVsbCAmJiBpbmRleCA+IDApIHsKICAgICAgZGF0YS5hZGQoVWludDhMaXN0LnZpZXcoYnVmZmVyLmJ1ZmZlciwgMCwgaW5kZXgpKTsKICAgIH0KCiAgICAvLyBXcml0ZSB0aGUgVVRGLTggZW5jb2RlZCBzdHJpbmdzLgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgKytpKSB7CiAgICAgIHdyaXRlQnl0ZXMoZGF0YVtpXSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlU3RyaW5nUmVmZXJlbmNlKFN0cmluZyBzdHJpbmcpIHsKICAgIHdyaXRlVUludDMwKHN0cmluZ0luZGV4ZXIucHV0KHN0cmluZykpOwogIH0KCiAgdm9pZCB3cml0ZVN0cmluZ1JlZmVyZW5jZUxpc3QoTGlzdDxTdHJpbmc+IHN0cmluZ3MpIHsKICAgIHdyaXRlTGlzdChzdHJpbmdzLCB3cml0ZVN0cmluZ1JlZmVyZW5jZSk7CiAgfQoKICB2b2lkIHdyaXRlQ29uc3RhbnRSZWZlcmVuY2UoQ29uc3RhbnQgY29uc3RhbnQpIHsKICAgIHdyaXRlVUludDMwKF9jb25zdGFudEluZGV4ZXIucHV0KGNvbnN0YW50KSk7CiAgfQoKICB2b2lkIHdyaXRlQ29uc3RhbnRUYWJsZShDb25zdGFudEluZGV4ZXIgaW5kZXhlcikgewogICAgX2JpbmFyeU9mZnNldEZvckNvbnN0YW50VGFibGUgPSBnZXRCdWZmZXJPZmZzZXQoKTsKCiAgICB3cml0ZVVJbnQzMChpbmRleGVyLmVudHJpZXMubGVuZ3RoKTsKICAgIGFzc2VydChpZGVudGljYWwoX3NpbmssIF9tYWluU2luaykpOwogICAgX2NvbnN0YW50c1NpbmsuZmx1c2hBbmREZXN0cm95KCk7CiAgICB3cml0ZUJ5dGVzKF9jb25zdGFudHNCeXRlc1NpbmsuYnVpbGRlci50YWtlQnl0ZXMoKSk7CiAgfQoKICBpbnQgd3JpdGVDb25zdGFudFRhYmxlRW50cnkoQ29uc3RhbnQgY29uc3RhbnQpIHsKICAgIEJ1ZmZlcmVkU2luayBvbGRTaW5rID0gX3Npbms7CiAgICBfc2luayA9IF9jb25zdGFudHNTaW5rOwogICAgaW50IGluaXRpYWxPZmZzZXQgPSBfc2luay5vZmZzZXQ7CiAgICBpZiAoY29uc3RhbnQgaXMgTnVsbENvbnN0YW50KSB7CiAgICAgIHdyaXRlQnl0ZShDb25zdGFudFRhZy5OdWxsQ29uc3RhbnQpOwogICAgfSBlbHNlIGlmIChjb25zdGFudCBpcyBCb29sQ29uc3RhbnQpIHsKICAgICAgd3JpdGVCeXRlKENvbnN0YW50VGFnLkJvb2xDb25zdGFudCk7CiAgICAgIHdyaXRlQnl0ZShjb25zdGFudC52YWx1ZSA/IDEgOiAwKTsKICAgIH0gZWxzZSBpZiAoY29uc3RhbnQgaXMgSW50Q29uc3RhbnQpIHsKICAgICAgd3JpdGVCeXRlKENvbnN0YW50VGFnLkludENvbnN0YW50KTsKICAgICAgd3JpdGVJbnRlZ2VyKGNvbnN0YW50LnZhbHVlKTsKICAgIH0gZWxzZSBpZiAoY29uc3RhbnQgaXMgRG91YmxlQ29uc3RhbnQpIHsKICAgICAgd3JpdGVCeXRlKENvbnN0YW50VGFnLkRvdWJsZUNvbnN0YW50KTsKICAgICAgd3JpdGVEb3VibGUoY29uc3RhbnQudmFsdWUpOwogICAgfSBlbHNlIGlmIChjb25zdGFudCBpcyBTdHJpbmdDb25zdGFudCkgewogICAgICB3cml0ZUJ5dGUoQ29uc3RhbnRUYWcuU3RyaW5nQ29uc3RhbnQpOwogICAgICB3cml0ZVN0cmluZ1JlZmVyZW5jZShjb25zdGFudC52YWx1ZSk7CiAgICB9IGVsc2UgaWYgKGNvbnN0YW50IGlzIFN5bWJvbENvbnN0YW50KSB7CiAgICAgIHdyaXRlQnl0ZShDb25zdGFudFRhZy5TeW1ib2xDb25zdGFudCk7CiAgICAgIHdyaXRlTnVsbEFsbG93ZWRSZWZlcmVuY2UoY29uc3RhbnQubGlicmFyeVJlZmVyZW5jZSk7CiAgICAgIHdyaXRlU3RyaW5nUmVmZXJlbmNlKGNvbnN0YW50Lm5hbWUpOwogICAgfSBlbHNlIGlmIChjb25zdGFudCBpcyBNYXBDb25zdGFudCkgewogICAgICB3cml0ZUJ5dGUoQ29uc3RhbnRUYWcuTWFwQ29uc3RhbnQpOwogICAgICB3cml0ZURhcnRUeXBlKGNvbnN0YW50LmtleVR5cGUpOwogICAgICB3cml0ZURhcnRUeXBlKGNvbnN0YW50LnZhbHVlVHlwZSk7CiAgICAgIHdyaXRlVUludDMwKGNvbnN0YW50LmVudHJpZXMubGVuZ3RoKTsKICAgICAgZm9yIChmaW5hbCBDb25zdGFudE1hcEVudHJ5IGVudHJ5IGluIGNvbnN0YW50LmVudHJpZXMpIHsKICAgICAgICB3cml0ZUNvbnN0YW50UmVmZXJlbmNlKGVudHJ5LmtleSk7CiAgICAgICAgd3JpdGVDb25zdGFudFJlZmVyZW5jZShlbnRyeS52YWx1ZSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoY29uc3RhbnQgaXMgTGlzdENvbnN0YW50KSB7CiAgICAgIHdyaXRlQnl0ZShDb25zdGFudFRhZy5MaXN0Q29uc3RhbnQpOwogICAgICB3cml0ZURhcnRUeXBlKGNvbnN0YW50LnR5cGVBcmd1bWVudCk7CiAgICAgIHdyaXRlVUludDMwKGNvbnN0YW50LmVudHJpZXMubGVuZ3RoKTsKICAgICAgY29uc3RhbnQuZW50cmllcy5mb3JFYWNoKHdyaXRlQ29uc3RhbnRSZWZlcmVuY2UpOwogICAgfSBlbHNlIGlmIChjb25zdGFudCBpcyBTZXRDb25zdGFudCkgewogICAgICB3cml0ZUJ5dGUoQ29uc3RhbnRUYWcuU2V0Q29uc3RhbnQpOwogICAgICB3cml0ZURhcnRUeXBlKGNvbnN0YW50LnR5cGVBcmd1bWVudCk7CiAgICAgIHdyaXRlVUludDMwKGNvbnN0YW50LmVudHJpZXMubGVuZ3RoKTsKICAgICAgY29uc3RhbnQuZW50cmllcy5mb3JFYWNoKHdyaXRlQ29uc3RhbnRSZWZlcmVuY2UpOwogICAgfSBlbHNlIGlmIChjb25zdGFudCBpcyBJbnN0YW5jZUNvbnN0YW50KSB7CiAgICAgIHdyaXRlQnl0ZShDb25zdGFudFRhZy5JbnN0YW5jZUNvbnN0YW50KTsKICAgICAgd3JpdGVDbGFzc1JlZmVyZW5jZShjb25zdGFudC5jbGFzc05vZGUpOwogICAgICB3cml0ZVVJbnQzMChjb25zdGFudC50eXBlQXJndW1lbnRzLmxlbmd0aCk7CiAgICAgIGNvbnN0YW50LnR5cGVBcmd1bWVudHMuZm9yRWFjaCh3cml0ZURhcnRUeXBlKTsKICAgICAgd3JpdGVVSW50MzAoY29uc3RhbnQuZmllbGRWYWx1ZXMubGVuZ3RoKTsKICAgICAgY29uc3RhbnQuZmllbGRWYWx1ZXMuZm9yRWFjaCgoUmVmZXJlbmNlIGZpZWxkUmVmLCBDb25zdGFudCB2YWx1ZSkgewogICAgICAgIHdyaXRlTm9uTnVsbENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoZmllbGRSZWYuY2Fub25pY2FsTmFtZSk7CiAgICAgICAgd3JpdGVDb25zdGFudFJlZmVyZW5jZSh2YWx1ZSk7CiAgICAgIH0pOwogICAgfSBlbHNlIGlmIChjb25zdGFudCBpcyBQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50KSB7CiAgICAgIHdyaXRlQnl0ZShDb25zdGFudFRhZy5QYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50KTsKICAgICAgd3JpdGVDb25zdGFudFJlZmVyZW5jZShjb25zdGFudC50ZWFyT2ZmQ29uc3RhbnQpOwogICAgICBmaW5hbCBpbnQgbGVuZ3RoID0gY29uc3RhbnQudHlwZXMubGVuZ3RoOwogICAgICB3cml0ZVVJbnQzMChsZW5ndGgpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgd3JpdGVEYXJ0VHlwZShjb25zdGFudC50eXBlc1tpXSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoY29uc3RhbnQgaXMgVGVhck9mZkNvbnN0YW50KSB7CiAgICAgIHdyaXRlQnl0ZShDb25zdGFudFRhZy5UZWFyT2ZmQ29uc3RhbnQpOwogICAgICB3cml0ZU5vbk51bGxDYW5vbmljYWxOYW1lUmVmZXJlbmNlKGNvbnN0YW50LnByb2NlZHVyZS5jYW5vbmljYWxOYW1lKTsKICAgIH0gZWxzZSBpZiAoY29uc3RhbnQgaXMgVHlwZUxpdGVyYWxDb25zdGFudCkgewogICAgICB3cml0ZUJ5dGUoQ29uc3RhbnRUYWcuVHlwZUxpdGVyYWxDb25zdGFudCk7CiAgICAgIHdyaXRlRGFydFR5cGUoY29uc3RhbnQudHlwZSk7CiAgICB9IGVsc2UgaWYgKGNvbnN0YW50IGlzIFVuZXZhbHVhdGVkQ29uc3RhbnQpIHsKICAgICAgd3JpdGVCeXRlKENvbnN0YW50VGFnLlVuZXZhbHVhdGVkQ29uc3RhbnQpOwogICAgICB3cml0ZU5vZGUoY29uc3RhbnQuZXhwcmVzc2lvbik7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignVW5zdXBwb3J0ZWQgY29uc3RhbnQgJGNvbnN0YW50Jyk7CiAgICB9CiAgICBfc2luayA9IG9sZFNpbms7CiAgICByZXR1cm4gX2NvbnN0YW50c1Npbmsub2Zmc2V0IC0gaW5pdGlhbE9mZnNldDsKICB9CgogIHZvaWQgd3JpdGVEYXJ0VHlwZShEYXJ0VHlwZSB0eXBlKSB7CiAgICB0eXBlLmFjY2VwdCh0aGlzKTsKICB9CgogIC8vIFJldHVybnMgdGhlIG5ldyBhY3RpdmUgZmlsZSB1cmkuCiAgdm9pZCB3cml0ZVVyaVJlZmVyZW5jZShVcmkgdXJpKSB7CiAgICBmaW5hbCBpbnQgaW5kZXggPSBfc291cmNlVXJpSW5kZXhlci5wdXQodXJpKTsKICAgIHdyaXRlVUludDMwKGluZGV4KTsKICAgIGlmICghX2N1cnJlbnRseUluTm9uaW1wbGVtZW50YXRpb24pIHsKICAgICAgaWYgKF9zb3VyY2VzRnJvbVJlYWxJbXBsZW1lbnRhdGlvbkluTGlicmFyeS5sZW5ndGggPD0gaW5kZXgpIHsKICAgICAgICBfc291cmNlc0Zyb21SZWFsSW1wbGVtZW50YXRpb25JbkxpYnJhcnkubGVuZ3RoID0gaW5kZXggKyAxOwogICAgICB9CiAgICAgIF9zb3VyY2VzRnJvbVJlYWxJbXBsZW1lbnRhdGlvbkluTGlicmFyeVtpbmRleF0gPSB0cnVlOwogICAgICBpZiAoX3NvdXJjZXNGcm9tUmVhbEltcGxlbWVudGF0aW9uLmxlbmd0aCA8PSBpbmRleCkgewogICAgICAgIF9zb3VyY2VzRnJvbVJlYWxJbXBsZW1lbnRhdGlvbi5sZW5ndGggPSBpbmRleCArIDE7CiAgICAgIH0KICAgICAgX3NvdXJjZXNGcm9tUmVhbEltcGxlbWVudGF0aW9uW2luZGV4XSA9IHRydWU7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlTGlzdDxUPihMaXN0PFQ+IGl0ZW1zLCB2b2lkIHdyaXRlSXRlbShUIHgpKSB7CiAgICB3cml0ZVVJbnQzMChpdGVtcy5sZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7ICsraSkgewogICAgICB3cml0ZUl0ZW0oaXRlbXNbaV0pOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZU5vZGVMaXN0KExpc3Q8Tm9kZT4gbm9kZXMpIHsKICAgIGZpbmFsIGxlbiA9IG5vZGVzLmxlbmd0aDsKICAgIHdyaXRlVUludDMwKGxlbik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIGZpbmFsIG5vZGUgPSBub2Rlc1tpXTsKICAgICAgd3JpdGVOb2RlKG5vZGUpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZVByb2NlZHVyZU5vZGVMaXN0KExpc3Q8UHJvY2VkdXJlPiBub2RlcykgewogICAgZmluYWwgbGVuID0gbm9kZXMubGVuZ3RoOwogICAgd3JpdGVVSW50MzAobGVuKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgZmluYWwgbm9kZSA9IG5vZGVzW2ldOwogICAgICB3cml0ZVByb2NlZHVyZU5vZGUobm9kZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlRmllbGROb2RlTGlzdChMaXN0PEZpZWxkPiBub2RlcykgewogICAgZmluYWwgbGVuID0gbm9kZXMubGVuZ3RoOwogICAgd3JpdGVVSW50MzAobGVuKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgZmluYWwgbm9kZSA9IG5vZGVzW2ldOwogICAgICB3cml0ZUZpZWxkTm9kZShub2RlKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVDbGFzc05vZGVMaXN0KExpc3Q8Q2xhc3M+IG5vZGVzKSB7CiAgICBmaW5hbCBsZW4gPSBub2Rlcy5sZW5ndGg7CiAgICB3cml0ZVVJbnQzMChsZW4pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICBmaW5hbCBub2RlID0gbm9kZXNbaV07CiAgICAgIHdyaXRlQ2xhc3NOb2RlKG5vZGUpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZUV4dGVuc2lvbk5vZGVMaXN0KExpc3Q8RXh0ZW5zaW9uPiBub2RlcykgewogICAgZmluYWwgbGVuID0gbm9kZXMubGVuZ3RoOwogICAgd3JpdGVVSW50MzAobGVuKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgZmluYWwgbm9kZSA9IG5vZGVzW2ldOwogICAgICB3cml0ZUV4dGVuc2lvbk5vZGUobm9kZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlQ29uc3RydWN0b3JOb2RlTGlzdChMaXN0PENvbnN0cnVjdG9yPiBub2RlcykgewogICAgZmluYWwgbGVuID0gbm9kZXMubGVuZ3RoOwogICAgd3JpdGVVSW50MzAobGVuKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgZmluYWwgbm9kZSA9IG5vZGVzW2ldOwogICAgICB3cml0ZUNvbnN0cnVjdG9yTm9kZShub2RlKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvck5vZGVMaXN0KAogICAgICBMaXN0PFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yPiBub2RlcykgewogICAgZmluYWwgbGVuID0gbm9kZXMubGVuZ3RoOwogICAgd3JpdGVVSW50MzAobGVuKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgZmluYWwgbm9kZSA9IG5vZGVzW2ldOwogICAgICB3cml0ZVJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yTm9kZShub2RlKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVTd2l0Y2hDYXNlTm9kZUxpc3QoTGlzdDxTd2l0Y2hDYXNlPiBub2RlcykgewogICAgZmluYWwgbGVuID0gbm9kZXMubGVuZ3RoOwogICAgd3JpdGVVSW50MzAobGVuKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgZmluYWwgbm9kZSA9IG5vZGVzW2ldOwogICAgICB3cml0ZVN3aXRjaENhc2VOb2RlKG5vZGUpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZUNhdGNoTm9kZUxpc3QoTGlzdDxDYXRjaD4gbm9kZXMpIHsKICAgIGZpbmFsIGxlbiA9IG5vZGVzLmxlbmd0aDsKICAgIHdyaXRlVUludDMwKGxlbik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIGZpbmFsIG5vZGUgPSBub2Rlc1tpXTsKICAgICAgd3JpdGVDYXRjaE5vZGUobm9kZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlVHlwZWRlZk5vZGVMaXN0KExpc3Q8VHlwZWRlZj4gbm9kZXMpIHsKICAgIGZpbmFsIGxlbiA9IG5vZGVzLmxlbmd0aDsKICAgIHdyaXRlVUludDMwKGxlbik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIGZpbmFsIG5vZGUgPSBub2Rlc1tpXTsKICAgICAgd3JpdGVUeXBlZGVmTm9kZShub2RlKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVOb2RlKE5vZGUgbm9kZSkgewogICAgaWYgKF9tZXRhZGF0YVN1YnNlY3Rpb25zICE9IG51bGwpIHsKICAgICAgX3dyaXRlTm9kZU1ldGFkYXRhKG5vZGUpOwogICAgfQogICAgbm9kZS5hY2NlcHQodGhpcyk7CiAgfQoKICB2b2lkIHdyaXRlRnVuY3Rpb25Ob2RlKEZ1bmN0aW9uTm9kZSBub2RlKSB7CiAgICBpZiAoX21ldGFkYXRhU3Vic2VjdGlvbnMgIT0gbnVsbCkgewogICAgICBfd3JpdGVOb2RlTWV0YWRhdGEobm9kZSk7CiAgICB9CiAgICBub2RlLmFjY2VwdCh0aGlzKTsKICB9CgogIHZvaWQgd3JpdGVBcmd1bWVudHNOb2RlKEFyZ3VtZW50cyBub2RlKSB7CiAgICBpZiAoX21ldGFkYXRhU3Vic2VjdGlvbnMgIT0gbnVsbCkgewogICAgICBfd3JpdGVOb2RlTWV0YWRhdGEobm9kZSk7CiAgICB9CiAgICBub2RlLmFjY2VwdCh0aGlzKTsKICB9CgogIHZvaWQgd3JpdGVMaWJyYXJ5Tm9kZShMaWJyYXJ5IG5vZGUpIHsKICAgIGlmIChfbWV0YWRhdGFTdWJzZWN0aW9ucyAhPSBudWxsKSB7CiAgICAgIF93cml0ZU5vZGVNZXRhZGF0YShub2RlKTsKICAgIH0KICAgIG5vZGUuYWNjZXB0KHRoaXMpOwogIH0KCiAgdm9pZCB3cml0ZVByb2NlZHVyZU5vZGUoUHJvY2VkdXJlIG5vZGUpIHsKICAgIGlmIChfbWV0YWRhdGFTdWJzZWN0aW9ucyAhPSBudWxsKSB7CiAgICAgIF93cml0ZU5vZGVNZXRhZGF0YShub2RlKTsKICAgIH0KICAgIG5vZGUuYWNjZXB0KHRoaXMpOwogIH0KCiAgdm9pZCB3cml0ZUZpZWxkTm9kZShGaWVsZCBub2RlKSB7CiAgICBpZiAoX21ldGFkYXRhU3Vic2VjdGlvbnMgIT0gbnVsbCkgewogICAgICBfd3JpdGVOb2RlTWV0YWRhdGEobm9kZSk7CiAgICB9CiAgICBub2RlLmFjY2VwdCh0aGlzKTsKICB9CgogIHZvaWQgd3JpdGVDbGFzc05vZGUoQ2xhc3Mgbm9kZSkgewogICAgaWYgKF9tZXRhZGF0YVN1YnNlY3Rpb25zICE9IG51bGwpIHsKICAgICAgX3dyaXRlTm9kZU1ldGFkYXRhKG5vZGUpOwogICAgfQogICAgbm9kZS5hY2NlcHQodGhpcyk7CiAgfQoKICB2b2lkIHdyaXRlRXh0ZW5zaW9uTm9kZShFeHRlbnNpb24gbm9kZSkgewogICAgaWYgKF9tZXRhZGF0YVN1YnNlY3Rpb25zICE9IG51bGwpIHsKICAgICAgX3dyaXRlTm9kZU1ldGFkYXRhKG5vZGUpOwogICAgfQogICAgbm9kZS5hY2NlcHQodGhpcyk7CiAgfQoKICB2b2lkIHdyaXRlQ29uc3RydWN0b3JOb2RlKENvbnN0cnVjdG9yIG5vZGUpIHsKICAgIGlmIChfbWV0YWRhdGFTdWJzZWN0aW9ucyAhPSBudWxsKSB7CiAgICAgIF93cml0ZU5vZGVNZXRhZGF0YShub2RlKTsKICAgIH0KICAgIG5vZGUuYWNjZXB0KHRoaXMpOwogIH0KCiAgdm9pZCB3cml0ZVJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yTm9kZSgKICAgICAgUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3Igbm9kZSkgewogICAgaWYgKF9tZXRhZGF0YVN1YnNlY3Rpb25zICE9IG51bGwpIHsKICAgICAgX3dyaXRlTm9kZU1ldGFkYXRhKG5vZGUpOwogICAgfQogICAgbm9kZS5hY2NlcHQodGhpcyk7CiAgfQoKICB2b2lkIHdyaXRlU3dpdGNoQ2FzZU5vZGUoU3dpdGNoQ2FzZSBub2RlKSB7CiAgICBpZiAoX21ldGFkYXRhU3Vic2VjdGlvbnMgIT0gbnVsbCkgewogICAgICBfd3JpdGVOb2RlTWV0YWRhdGEobm9kZSk7CiAgICB9CiAgICBub2RlLmFjY2VwdCh0aGlzKTsKICB9CgogIHZvaWQgd3JpdGVDYXRjaE5vZGUoQ2F0Y2ggbm9kZSkgewogICAgaWYgKF9tZXRhZGF0YVN1YnNlY3Rpb25zICE9IG51bGwpIHsKICAgICAgX3dyaXRlTm9kZU1ldGFkYXRhKG5vZGUpOwogICAgfQogICAgbm9kZS5hY2NlcHQodGhpcyk7CiAgfQoKICB2b2lkIHdyaXRlVHlwZWRlZk5vZGUoVHlwZWRlZiBub2RlKSB7CiAgICBpZiAoX21ldGFkYXRhU3Vic2VjdGlvbnMgIT0gbnVsbCkgewogICAgICBfd3JpdGVOb2RlTWV0YWRhdGEobm9kZSk7CiAgICB9CiAgICBub2RlLmFjY2VwdCh0aGlzKTsKICB9CgogIHZvaWQgd3JpdGVPcHRpb25hbE5vZGUoTm9kZSBub2RlKSB7CiAgICBpZiAobm9kZSA9PSBudWxsKSB7CiAgICAgIHdyaXRlQnl0ZShUYWcuTm90aGluZyk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUJ5dGUoVGFnLlNvbWV0aGluZyk7CiAgICAgIHdyaXRlTm9kZShub2RlKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVPcHRpb25hbEZ1bmN0aW9uTm9kZShGdW5jdGlvbk5vZGUgbm9kZSkgewogICAgaWYgKG5vZGUgPT0gbnVsbCkgewogICAgICB3cml0ZUJ5dGUoVGFnLk5vdGhpbmcpOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVCeXRlKFRhZy5Tb21ldGhpbmcpOwogICAgICB3cml0ZUZ1bmN0aW9uTm9kZShub2RlKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVMaW5rVGFibGUoQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgX2JpbmFyeU9mZnNldEZvckxpbmtUYWJsZSA9IGdldEJ1ZmZlck9mZnNldCgpOwogICAgd3JpdGVMaXN0KF9jYW5vbmljYWxOYW1lTGlzdCwgd3JpdGVDYW5vbmljYWxOYW1lRW50cnkpOwogIH0KCiAgdm9pZCBpbmRleExpbmtUYWJsZShDb21wb25lbnQgY29tcG9uZW50KSB7CiAgICBfY2Fub25pY2FsTmFtZUxpc3QgPSA8Q2Fub25pY2FsTmFtZT5bXTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29tcG9uZW50LmxpYnJhcmllcy5sZW5ndGg7ICsraSkgewogICAgICBMaWJyYXJ5IGxpYnJhcnkgPSBjb21wb25lbnQubGlicmFyaWVzW2ldOwogICAgICBpZiAoIXNob3VsZFdyaXRlTGlicmFyeUNhbm9uaWNhbE5hbWVzKGxpYnJhcnkpKSBjb250aW51ZTsKICAgICAgX2luZGV4TGlua1RhYmxlSW50ZXJuYWwobGlicmFyeS5jYW5vbmljYWxOYW1lKTsKICAgICAgX2tub3duQ2Fub25pY2FsTmFtZU5vblJvb3RUb3BzLmFkZChsaWJyYXJ5LmNhbm9uaWNhbE5hbWUpOwogICAgfQogIH0KCiAgdm9pZCBfaW5kZXhMaW5rVGFibGVJbnRlcm5hbChDYW5vbmljYWxOYW1lIG5vZGUpIHsKICAgIG5vZGUuaW5kZXggPSBfY2Fub25pY2FsTmFtZUxpc3QubGVuZ3RoOwogICAgX2Nhbm9uaWNhbE5hbWVMaXN0LmFkZChub2RlKTsKICAgIEl0ZXJhYmxlPENhbm9uaWNhbE5hbWU+IGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbk9yTnVsbDsKICAgIGlmIChjaGlsZHJlbiAhPSBudWxsKSB7CiAgICAgIGZvciAoQ2Fub25pY2FsTmFtZSBjaGlsZCBpbiBjaGlsZHJlbikgewogICAgICAgIF9pbmRleExpbmtUYWJsZUludGVybmFsKGNoaWxkKTsKICAgICAgfQogICAgfQogIH0KCiAgLy8vIENvbXB1dGUgY2Fub25pY2FsIG5hbWVzIGZvciB0aGUgd2hvbGUgY29tcG9uZW50IG9yIHBhcnRzIG9mIGl0LgogIHZvaWQgY29tcHV0ZUNhbm9uaWNhbE5hbWVzKENvbXBvbmVudCBjb21wb25lbnQpIHsKICAgIGNvbXBvbmVudC5jb21wdXRlQ2Fub25pY2FsTmFtZXMoKTsKICB9CgogIC8vLyBSZXR1cm4gYHRydWVgIGlmIGFsbCBjYW5vbmljYWwgbmFtZXMgb2YgdGhlIFtsaWJyYXJ5XSBzaG91bGQgYmUgd3JpdHRlbgogIC8vLyBpbnRvIHRoZSBsaW5rIHRhYmxlLiAgSWYgc29tZSBsaWJyYXJpZXMgb2YgdGhlIGNvbXBvbmVudCBhcmUgc2tpcHBlZCwKICAvLy8gdGhlbiBhbGwgdGhlIGFkZGl0aW9uYWwgbmFtZXMgcmVmZXJlbmNlZCBieSB0aGUgbGlicmFyaWVzIHRoYXQgYXJlIHdyaXR0ZW4KICAvLy8gYnkgW3dyaXRlTGlicmFyaWVzXSBhcmUgYXV0b21hdGljYWxseSBhZGRlZC4KICBib29sIHNob3VsZFdyaXRlTGlicmFyeUNhbm9uaWNhbE5hbWVzKExpYnJhcnkgbGlicmFyeSkgPT4gdHJ1ZTsKCiAgdm9pZCB3cml0ZUNhbm9uaWNhbE5hbWVFbnRyeShDYW5vbmljYWxOYW1lIG5vZGUpIHsKICAgIENhbm9uaWNhbE5hbWUgcGFyZW50ID0gbm9kZS5wYXJlbnQ7CiAgICBpZiAocGFyZW50LmlzUm9vdCkgewogICAgICB3cml0ZVVJbnQzMCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlVUludDMwKHBhcmVudC5pbmRleCArIDEpOwogICAgfQogICAgd3JpdGVTdHJpbmdSZWZlcmVuY2Uobm9kZS5uYW1lKTsKICB9CgogIHZvaWQgd3JpdGVDb21wb25lbnRGaWxlKENvbXBvbmVudCBjb21wb25lbnQpIHsKICAgIGNvbXB1dGVDYW5vbmljYWxOYW1lcyhjb21wb25lbnQpOwogICAgZmluYWwgY29tcG9uZW50T2Zmc2V0ID0gZ2V0QnVmZmVyT2Zmc2V0KCk7CiAgICB3cml0ZVVJbnQzMihUYWcuQ29tcG9uZW50RmlsZSk7CiAgICB3cml0ZVVJbnQzMihUYWcuQmluYXJ5Rm9ybWF0VmVyc2lvbik7CiAgICB3cml0ZUxpc3RPZlN0cmluZ3MoY29tcG9uZW50LnByb2JsZW1zQXNKc29uKTsKICAgIGluZGV4TGlua1RhYmxlKGNvbXBvbmVudCk7CiAgICBfY29sbGVjdE1ldGFkYXRhKGNvbXBvbmVudCk7CiAgICBpZiAoX21ldGFkYXRhU3Vic2VjdGlvbnMgIT0gbnVsbCkgewogICAgICBfd3JpdGVOb2RlTWV0YWRhdGFJbXBsKGNvbXBvbmVudCwgY29tcG9uZW50T2Zmc2V0KTsKICAgIH0KICAgIGxpYnJhcnlPZmZzZXRzID0gPGludD5bXTsKICAgIENhbm9uaWNhbE5hbWUgbWFpbiA9IGdldENhbm9uaWNhbE5hbWVPZk1lbWJlcihjb21wb25lbnQubWFpbk1ldGhvZCk7CiAgICBpZiAobWFpbiAhPSBudWxsKSB7CiAgICAgIGNoZWNrQ2Fub25pY2FsTmFtZShtYWluKTsKICAgIH0KICAgIHdyaXRlTGlicmFyaWVzKGNvbXBvbmVudCk7CiAgICB3cml0ZVVyaVRvU291cmNlKGNvbXBvbmVudC51cmlUb1NvdXJjZSk7CiAgICB3cml0ZUxpbmtUYWJsZShjb21wb25lbnQpOwogICAgX3dyaXRlTWV0YWRhdGFTZWN0aW9uKGNvbXBvbmVudCk7CiAgICB3cml0ZVN0cmluZ1RhYmxlKHN0cmluZ0luZGV4ZXIpOwogICAgd3JpdGVDb25zdGFudFRhYmxlKF9jb25zdGFudEluZGV4ZXIpOwogICAgd3JpdGVDb21wb25lbnRJbmRleChjb21wb25lbnQsIGNvbXBvbmVudC5saWJyYXJpZXMpOwoKICAgIF9mbHVzaCgpOwogIH0KCiAgdm9pZCB3cml0ZUxpc3RPZlN0cmluZ3MoTGlzdDxTdHJpbmc+IHN0cmluZ3MpIHsKICAgIHdyaXRlVUludDMwKHN0cmluZ3M/Lmxlbmd0aCA/PyAwKTsKICAgIGlmIChzdHJpbmdzICE9IG51bGwpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdHJpbmdzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgU3RyaW5nIHMgPSBzdHJpbmdzW2ldOwogICAgICAgIC8vIFRoaXMgaXMgc2xvdywgYnV0IHdlIGV4cGVjdCB0aGVyZSB0byBpbiBnZW5lcmFsIGJlIG5vIHByb2JsZW1zLiBJZiB0aGlzCiAgICAgICAgLy8gdHVybnMgb3V0IHRvIGJlIHdyb25nIHdlIGNhbiBvcHRpbWl6ZSBpdCBhcyB3ZSBkbyBVUkxzIGZvciBpbnN0YW5jZS4KICAgICAgICB3cml0ZUJ5dGVMaXN0KHV0ZjguZW5jb2Rlci5jb252ZXJ0KHMpKTsKICAgICAgfQogICAgfQogIH0KCiAgLy8vIENvbGxlY3Qgbm9uLWVtcHR5IG1ldGFkYXRhIHJlcG9zaXRvcmllcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbXBvbmVudC4KICB2b2lkIF9jb2xsZWN0TWV0YWRhdGEoQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgY29tcG9uZW50Lm1ldGFkYXRhLmZvckVhY2goKHRhZywgcmVwb3NpdG9yeSkgewogICAgICBpZiAocmVwb3NpdG9yeS5tYXBwaW5nLmlzRW1wdHkpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIF9tZXRhZGF0YVN1YnNlY3Rpb25zID8/PSA8X01ldGFkYXRhU3Vic2VjdGlvbj5bXTsKICAgICAgX21ldGFkYXRhU3Vic2VjdGlvbnMuYWRkKG5ldyBfTWV0YWRhdGFTdWJzZWN0aW9uKHJlcG9zaXRvcnkpKTsKICAgIH0pOwogIH0KCiAgLy8vIFdyaXRlcyBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIFtOb2RlXS4KICB2b2lkIF93cml0ZU5vZGVNZXRhZGF0YShOb2RlIG5vZGUpIHsKICAgIF93cml0ZU5vZGVNZXRhZGF0YUltcGwobm9kZSwgZ2V0QnVmZmVyT2Zmc2V0KCkpOwogIH0KCiAgdm9pZCBfd3JpdGVOb2RlTWV0YWRhdGFJbXBsKE5vZGUgbm9kZSwgaW50IG5vZGVPZmZzZXQpIHsKICAgIGZvciAoX01ldGFkYXRhU3Vic2VjdGlvbiBzdWJzZWN0aW9uIGluIF9tZXRhZGF0YVN1YnNlY3Rpb25zKSB7CiAgICAgIGZpbmFsIHJlcG9zaXRvcnkgPSBzdWJzZWN0aW9uLnJlcG9zaXRvcnk7CiAgICAgIGZpbmFsIHZhbHVlID0gcmVwb3NpdG9yeS5tYXBwaW5nW25vZGVdOwogICAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CgogICAgICBpZiAoIU1ldGFkYXRhUmVwb3NpdG9yeS5pc1N1cHBvcnRlZChub2RlKSkgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKAogICAgICAgICAgICAiTm9kZXMgb2YgdHlwZSAke25vZGUucnVudGltZVR5cGV9IGNhbid0IGhhdmUgbWV0YWRhdGEuIik7CiAgICAgIH0KCiAgICAgIGlmICghaWRlbnRpY2FsKF9zaW5rLCBfbWFpblNpbmspKSB7CiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAgICJOb2RlIHdyaXR0ZW4gaW50byBtZXRhZGF0YSBjYW4ndCBoYXZlIG1ldGFkYXRhICIKICAgICAgICAgICAgIihtZXRhZGF0YTogJHtyZXBvc2l0b3J5LnRhZ30sIG5vZGU6ICR7bm9kZS5ydW50aW1lVHlwZX0gJG5vZGUpIik7CiAgICAgIH0KCiAgICAgIF9zaW5rID0gX21ldGFkYXRhU2luazsKICAgICAgc3Vic2VjdGlvbi5tZXRhZGF0YU1hcHBpbmcuYWRkKG5vZGVPZmZzZXQpOwogICAgICBzdWJzZWN0aW9uLm1ldGFkYXRhTWFwcGluZy5hZGQoZ2V0QnVmZmVyT2Zmc2V0KCkpOwogICAgICByZXBvc2l0b3J5LndyaXRlVG9CaW5hcnkodmFsdWUsIG5vZGUsIHRoaXMpOwogICAgICBfc2luayA9IF9tYWluU2luazsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW50ZXJTY29wZSgKICAgICAge0xpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMsCiAgICAgIGJvb2wgbWVtYmVyU2NvcGU6IGZhbHNlLAogICAgICBib29sIHZhcmlhYmxlU2NvcGU6IGZhbHNlfSkgewogICAgaWYgKHR5cGVQYXJhbWV0ZXJzICE9IG51bGwpIHsKICAgICAgX3R5cGVQYXJhbWV0ZXJJbmRleGVyLmVudGVyKHR5cGVQYXJhbWV0ZXJzKTsKICAgIH0KICAgIGlmIChtZW1iZXJTY29wZSkgewogICAgICBfdmFyaWFibGVJbmRleGVyID0gbnVsbDsKICAgIH0KICAgIGlmICh2YXJpYWJsZVNjb3BlKSB7CiAgICAgIF92YXJpYWJsZUluZGV4ZXIgPz89IG5ldyBWYXJpYWJsZUluZGV4ZXIoKTsKICAgICAgX3ZhcmlhYmxlSW5kZXhlci5wdXNoU2NvcGUoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgbGVhdmVTY29wZSgKICAgICAge0xpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMsCiAgICAgIGJvb2wgbWVtYmVyU2NvcGU6IGZhbHNlLAogICAgICBib29sIHZhcmlhYmxlU2NvcGU6IGZhbHNlfSkgewogICAgaWYgKHZhcmlhYmxlU2NvcGUpIHsKICAgICAgX3ZhcmlhYmxlSW5kZXhlci5wb3BTY29wZSgpOwogICAgfQogICAgaWYgKG1lbWJlclNjb3BlKSB7CiAgICAgIF92YXJpYWJsZUluZGV4ZXIgPSBudWxsOwogICAgfQogICAgaWYgKHR5cGVQYXJhbWV0ZXJzICE9IG51bGwpIHsKICAgICAgX3R5cGVQYXJhbWV0ZXJJbmRleGVyLmV4aXQodHlwZVBhcmFtZXRlcnMpOwogICAgfQogIH0KCiAgdm9pZCBfd3JpdGVNZXRhZGF0YVNlY3Rpb24oQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgLy8gTWFrZSBzdXJlIG1ldGFkYXRhIHBheWxvYWRzIHNlY3Rpb24gaXMgOC1ieXRlIGFsaWduZWQsCiAgICAvLyBzbyBjZXJ0YWluIGtpbmRzIG9mIG1ldGFkYXRhIGNhbiBjb250YWluIGFsaWduZWQgZGF0YS4KICAgIGNvbnN0IGludCBtZXRhZGF0YVBheWxvYWRzQWxpZ25tZW50ID0gODsKICAgIGludCBwYWRkaW5nID0gKChnZXRCdWZmZXJPZmZzZXQoKSArIG1ldGFkYXRhUGF5bG9hZHNBbGlnbm1lbnQgLSAxKSAmCiAgICAgICAgICAgIC1tZXRhZGF0YVBheWxvYWRzQWxpZ25tZW50KSAtCiAgICAgICAgZ2V0QnVmZmVyT2Zmc2V0KCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhZGRpbmc7ICsraSkgewogICAgICB3cml0ZUJ5dGUoMCk7CiAgICB9CgogICAgX2JpbmFyeU9mZnNldEZvck1ldGFkYXRhUGF5bG9hZHMgPSBnZXRCdWZmZXJPZmZzZXQoKTsKCiAgICBpZiAoX21ldGFkYXRhU3Vic2VjdGlvbnMgPT0gbnVsbCkgewogICAgICBfYmluYXJ5T2Zmc2V0Rm9yTWV0YWRhdGFNYXBwaW5ncyA9IGdldEJ1ZmZlck9mZnNldCgpOwogICAgICB3cml0ZVVJbnQzMigwKTsgLy8gRW1wdHkgc2VjdGlvbi4KICAgICAgcmV0dXJuOwogICAgfQoKICAgIGFzc2VydChpZGVudGljYWwoX3NpbmssIF9tYWluU2luaykpOwogICAgX21ldGFkYXRhU2luay5mbHVzaEFuZERlc3Ryb3koKTsKICAgIHdyaXRlQnl0ZXMoKF9tZXRhZGF0YVNpbmsuX3NpbmsgYXMgQnl0ZXNTaW5rKS5idWlsZGVyLnRha2VCeXRlcygpKTsKCiAgICAvLyBSTGlzdDxNZXRhZGF0YU1hcHBpbmc+IG1ldGFkYXRhTWFwcGluZ3MKICAgIF9iaW5hcnlPZmZzZXRGb3JNZXRhZGF0YU1hcHBpbmdzID0gZ2V0QnVmZmVyT2Zmc2V0KCk7CiAgICBmb3IgKF9NZXRhZGF0YVN1YnNlY3Rpb24gc3Vic2VjdGlvbiBpbiBfbWV0YWRhdGFTdWJzZWN0aW9ucykgewogICAgICAvLyBVSW50MzIgdGFnCiAgICAgIHdyaXRlVUludDMyKHN0cmluZ0luZGV4ZXIucHV0KHN1YnNlY3Rpb24ucmVwb3NpdG9yeS50YWcpKTsKCiAgICAgIC8vIFJMaXN0PFBhaXI8VUludDMyLCBVSW50MzI+PiBub2RlT2Zmc2V0VG9NZXRhZGF0YU9mZnNldAogICAgICBmaW5hbCBtYXBwaW5nTGVuZ3RoID0gc3Vic2VjdGlvbi5tZXRhZGF0YU1hcHBpbmcubGVuZ3RoOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1hcHBpbmdMZW5ndGg7IGkgKz0gMikgewogICAgICAgIHdyaXRlVUludDMyKHN1YnNlY3Rpb24ubWV0YWRhdGFNYXBwaW5nW2ldKTsgLy8gbm9kZSBvZmZzZXQKICAgICAgICB3cml0ZVVJbnQzMihzdWJzZWN0aW9uLm1ldGFkYXRhTWFwcGluZ1tpICsgMV0pOyAvLyBtZXRhZGF0YSBvZmZzZXQKICAgICAgfQogICAgICB3cml0ZVVJbnQzMihtYXBwaW5nTGVuZ3RoIH4vIDIpOwogICAgfQogICAgd3JpdGVVSW50MzIoX21ldGFkYXRhU3Vic2VjdGlvbnMubGVuZ3RoKTsKICB9CgogIC8vLyBXcml0ZSBhbGwgb2Ygc29tZSBvZiB0aGUgbGlicmFyaWVzIG9mIHRoZSBbY29tcG9uZW50XS4KICB2b2lkIHdyaXRlTGlicmFyaWVzKENvbXBvbmVudCBjb21wb25lbnQpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29tcG9uZW50LmxpYnJhcmllcy5sZW5ndGg7ICsraSkgewogICAgICB3cml0ZUxpYnJhcnlOb2RlKGNvbXBvbmVudC5saWJyYXJpZXNbaV0pOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZUNvbXBvbmVudEluZGV4KENvbXBvbmVudCBjb21wb25lbnQsIExpc3Q8TGlicmFyeT4gbGlicmFyaWVzKSB7CiAgICAvLyBJdCBpcyBhbGxvd2VkIHRvIGNvbmNhdGVuYXRlIHNldmVyYWwga2VybmVsIGJpbmFyaWVzIHRvIGNyZWF0ZSBhCiAgICAvLyBtdWx0aS1jb21wb25lbnQga2VybmVsIGZpbGUuIEluIG9yZGVyIHRvIG1haW50YWluIGFsaWdubWVudCBvZgogICAgLy8gbWV0YWRhdGEgc2VjdGlvbnMgd2l0aGluIGtlcm5lbCBiaW5hcmllcyBhZnRlciBjb25jYXRlbmF0aW9uLAogICAgLy8gc2l6ZSBvZiBlYWNoIGtlcm5lbCBiaW5hcnkgc2hvdWxkIGJlIGFsaWduZWQuCiAgICAvLyBDb21wb25lbnQgaW5kZXggaXMgbG9jYXRlZCBhdCB0aGUgZW5kIG9mIGEga2VybmVsIGJpbmFyeSwgc28gcGFkZGluZwogICAgLy8gaXMgYWRkZWQgYmVmb3JlIGNvbXBvbmVudCBpbmRleC4KICAgIGNvbnN0IGludCBrZXJuZWxGaWxlQWxpZ25tZW50ID0gODsKCiAgICAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIG51bWJlciBvZiB3cml0ZVVJbnQzMiBiZWxvdy4KICAgIGludCBudW1Db21wb25lbnRJbmRleEVudHJpZXMgPSA3ICsgbGlicmFyeU9mZnNldHMubGVuZ3RoICsgMzsKCiAgICBpbnQgdW5hbGlnbmVkU2l6ZSA9IGdldEJ1ZmZlck9mZnNldCgpICsgbnVtQ29tcG9uZW50SW5kZXhFbnRyaWVzICogNDsKICAgIGludCBwYWRkaW5nID0KICAgICAgICAoKHVuYWxpZ25lZFNpemUgKyBrZXJuZWxGaWxlQWxpZ25tZW50IC0gMSkgJiAta2VybmVsRmlsZUFsaWdubWVudCkgLQogICAgICAgICAgICB1bmFsaWduZWRTaXplOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYWRkaW5nOyArK2kpIHsKICAgICAgd3JpdGVCeXRlKDApOwogICAgfQoKICAgIC8vIEZpeGVkLXNpemUgaW50cyBhdCB0aGUgZW5kIHVzZWQgYXMgYW4gaW5kZXguCiAgICBhc3NlcnQoX2JpbmFyeU9mZnNldEZvclNvdXJjZVRhYmxlID49IDApOwogICAgd3JpdGVVSW50MzIoX2JpbmFyeU9mZnNldEZvclNvdXJjZVRhYmxlKTsKICAgIGFzc2VydChfYmluYXJ5T2Zmc2V0Rm9yTGlua1RhYmxlID49IDApOwogICAgd3JpdGVVSW50MzIoX2JpbmFyeU9mZnNldEZvckxpbmtUYWJsZSk7CiAgICBhc3NlcnQoX2JpbmFyeU9mZnNldEZvck1ldGFkYXRhUGF5bG9hZHMgPj0gMCk7CiAgICB3cml0ZVVJbnQzMihfYmluYXJ5T2Zmc2V0Rm9yTWV0YWRhdGFQYXlsb2Fkcyk7CiAgICBhc3NlcnQoX2JpbmFyeU9mZnNldEZvck1ldGFkYXRhTWFwcGluZ3MgPj0gMCk7CiAgICB3cml0ZVVJbnQzMihfYmluYXJ5T2Zmc2V0Rm9yTWV0YWRhdGFNYXBwaW5ncyk7CiAgICBhc3NlcnQoX2JpbmFyeU9mZnNldEZvclN0cmluZ1RhYmxlID49IDApOwogICAgd3JpdGVVSW50MzIoX2JpbmFyeU9mZnNldEZvclN0cmluZ1RhYmxlKTsKICAgIGFzc2VydChfYmluYXJ5T2Zmc2V0Rm9yQ29uc3RhbnRUYWJsZSA+PSAwKTsKICAgIHdyaXRlVUludDMyKF9iaW5hcnlPZmZzZXRGb3JDb25zdGFudFRhYmxlKTsKCiAgICBDYW5vbmljYWxOYW1lIG1haW4gPSBnZXRDYW5vbmljYWxOYW1lT2ZNZW1iZXIoY29tcG9uZW50Lm1haW5NZXRob2QpOwogICAgaWYgKG1haW4gPT0gbnVsbCkgewogICAgICB3cml0ZVVJbnQzMigwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlVUludDMyKG1haW4uaW5kZXggKyAxKTsKICAgIH0KCiAgICBhc3NlcnQobGlicmFyeU9mZnNldHMubGVuZ3RoID09IGxpYnJhcmllcy5sZW5ndGgpOwogICAgZm9yIChpbnQgb2Zmc2V0IGluIGxpYnJhcnlPZmZzZXRzKSB7CiAgICAgIHdyaXRlVUludDMyKG9mZnNldCk7CiAgICB9CiAgICB3cml0ZVVJbnQzMihfYmluYXJ5T2Zmc2V0Rm9yU291cmNlVGFibGUpOyAvLyBlbmQgb2YgbGFzdCBsaWJyYXJ5LgogICAgd3JpdGVVSW50MzIobGlicmFyaWVzLmxlbmd0aCk7CgogICAgd3JpdGVVSW50MzIoZ2V0QnVmZmVyT2Zmc2V0KCkgKyA0KTsgLy8gdG90YWwgc2l6ZS4KICB9CgogIHZvaWQgd3JpdGVVcmlUb1NvdXJjZShNYXA8VXJpLCBTb3VyY2U+IHVyaVRvU291cmNlKSB7CiAgICBfYmluYXJ5T2Zmc2V0Rm9yU291cmNlVGFibGUgPSBnZXRCdWZmZXJPZmZzZXQoKTsKCiAgICBpbnQgbGVuZ3RoID0gX3NvdXJjZVVyaUluZGV4ZXIuaW5kZXgubGVuZ3RoOwogICAgd3JpdGVVSW50MzIobGVuZ3RoKTsKICAgIExpc3Q8aW50PiBpbmRleCA9IG5ldyBMaXN0PGludD4obGVuZ3RoKTsKCiAgICAvLyBXcml0ZSBkYXRhLgogICAgaW50IGkgPSAwOwogICAgVWludDhMaXN0IGJ1ZmZlciA9IG5ldyBVaW50OExpc3QoMSA8PCAxNik7CiAgICBmb3IgKFVyaSB1cmkgaW4gX3NvdXJjZVVyaUluZGV4ZXIuaW5kZXgua2V5cykgewogICAgICBpbmRleFtpXSA9IGdldEJ1ZmZlck9mZnNldCgpOwogICAgICBTb3VyY2Ugc291cmNlID0gdXJpVG9Tb3VyY2VbdXJpXTsKICAgICAgaWYgKHNvdXJjZSA9PSBudWxsIHx8CiAgICAgICAgICAhKGluY2x1ZGVTb3VyY2VzICYmCiAgICAgICAgICAgICAgX3NvdXJjZXNGcm9tUmVhbEltcGxlbWVudGF0aW9uLmxlbmd0aCA+IGkgJiYKICAgICAgICAgICAgICBfc291cmNlc0Zyb21SZWFsSW1wbGVtZW50YXRpb25baV0gPT0gdHJ1ZSkpIHsKICAgICAgICBzb3VyY2UgPSBuZXcgU291cmNlKAogICAgICAgICAgICA8aW50PltdLCBjb25zdCA8aW50PltdLCBzb3VyY2U/LmltcG9ydFVyaSwgc291cmNlPy5maWxlVXJpKTsKICAgICAgfQoKICAgICAgU3RyaW5nIHVyaUFzU3RyaW5nID0gdXJpID09IG51bGwgPyAiIiA6ICIkdXJpIjsKICAgICAgb3V0cHV0U3RyaW5nVmlhQnVmZmVyKHVyaUFzU3RyaW5nLCBidWZmZXIpOwoKICAgICAgd3JpdGVCeXRlTGlzdChzb3VyY2Uuc291cmNlKTsKCiAgICAgIExpc3Q8aW50PiBsaW5lU3RhcnRzID0gc291cmNlLmxpbmVTdGFydHM7CiAgICAgIHdyaXRlVUludDMwKGxpbmVTdGFydHMubGVuZ3RoKTsKICAgICAgaW50IHByZXZpb3VzTGluZVN0YXJ0ID0gMDsKICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBsaW5lU3RhcnRzLmxlbmd0aDsgKytqKSB7CiAgICAgICAgaW50IGxpbmVTdGFydCA9IGxpbmVTdGFydHNbal07CiAgICAgICAgd3JpdGVVSW50MzAobGluZVN0YXJ0IC0gcHJldmlvdXNMaW5lU3RhcnQpOwogICAgICAgIHByZXZpb3VzTGluZVN0YXJ0ID0gbGluZVN0YXJ0OwogICAgICB9CgogICAgICBTdHJpbmcgaW1wb3J0VXJpQXNTdHJpbmcgPQogICAgICAgICAgc291cmNlLmltcG9ydFVyaSA9PSBudWxsID8gIiIgOiAiJHtzb3VyY2UuaW1wb3J0VXJpfSI7CiAgICAgIG91dHB1dFN0cmluZ1ZpYUJ1ZmZlcihpbXBvcnRVcmlBc1N0cmluZywgYnVmZmVyKTsKCiAgICAgIGkrKzsKICAgIH0KCiAgICAvLyBXcml0ZSBpbmRleCBmb3IgcmFuZG9tIGFjY2Vzcy4KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5kZXgubGVuZ3RoOyArK2kpIHsKICAgICAgd3JpdGVVSW50MzIoaW5kZXhbaV0pOwogICAgfQogIH0KCiAgdm9pZCBvdXRwdXRTdHJpbmdWaWFCdWZmZXIoU3RyaW5nIHVyaUFzU3RyaW5nLCBVaW50OExpc3QgYnVmZmVyKSB7CiAgICBpZiAodXJpQXNTdHJpbmcubGVuZ3RoICogMyA8IGJ1ZmZlci5sZW5ndGgpIHsKICAgICAgaW50IGxlbmd0aCA9IE5vdFF1aXRlU3RyaW5nLndyaXRlVXRmOChidWZmZXIsIDAsIHVyaUFzU3RyaW5nKTsKICAgICAgaWYgKGxlbmd0aCA8IDApIHsKICAgICAgICAvLyBVdGY4IGVuY29kaW5nIGZhaWxlZC4KICAgICAgICB3cml0ZUJ5dGVMaXN0KHV0ZjguZW5jb2Rlci5jb252ZXJ0KHVyaUFzU3RyaW5nKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgd3JpdGVVSW50MzAobGVuZ3RoKTsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGxlbmd0aDsgaisrKSB7CiAgICAgICAgICB3cml0ZUJ5dGUoYnVmZmVyW2pdKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIFVuY29tbW9uIGNhc2Ugd2l0aCB2ZXJ5IGxvbmcgdXJsLgogICAgICB3cml0ZUJ5dGVMaXN0KHV0ZjguZW5jb2Rlci5jb252ZXJ0KHVyaUFzU3RyaW5nKSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlTGlicmFyeURlcGVuZGVuY3lSZWZlcmVuY2UoTGlicmFyeURlcGVuZGVuY3kgbm9kZSkgewogICAgaW50IGluZGV4ID0gX2xpYnJhcnlEZXBlbmRlbmN5SW5kZXhbbm9kZV07CiAgICBpZiAoaW5kZXggPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigKICAgICAgICAgICdSZWZlcmVuY2UgdG8gbGlicmFyeSBkZXBlbmRlbmN5ICRub2RlIG91dCBvZiBzY29wZScpOwogICAgfQogICAgd3JpdGVVSW50MzAoaW5kZXgpOwogIH0KCiAgdm9pZCB3cml0ZU51bGxBbGxvd2VkUmVmZXJlbmNlKFJlZmVyZW5jZSByZWZlcmVuY2UpIHsKICAgIGlmIChyZWZlcmVuY2UgPT0gbnVsbCkgewogICAgICB3cml0ZVVJbnQzMCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIENhbm9uaWNhbE5hbWUgbmFtZSA9IHJlZmVyZW5jZS5jYW5vbmljYWxOYW1lOwogICAgICBpZiAobmFtZSA9PSBudWxsKSB7CiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJ01pc3NpbmcgY2Fub25pY2FsIG5hbWUgZm9yICRyZWZlcmVuY2UnKTsKICAgICAgfQogICAgICBjaGVja0Nhbm9uaWNhbE5hbWUobmFtZSk7CiAgICAgIHdyaXRlVUludDMwKG5hbWUuaW5kZXggKyAxKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVOb25OdWxsUmVmZXJlbmNlKFJlZmVyZW5jZSByZWZlcmVuY2UpIHsKICAgIGlmIChyZWZlcmVuY2UgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignR290IG51bGwgcmVmZXJlbmNlJyk7CiAgICB9IGVsc2UgewogICAgICBDYW5vbmljYWxOYW1lIG5hbWUgPSByZWZlcmVuY2UuY2Fub25pY2FsTmFtZTsKICAgICAgaWYgKG5hbWUgPT0gbnVsbCkgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCdNaXNzaW5nIGNhbm9uaWNhbCBuYW1lIGZvciAkcmVmZXJlbmNlJyk7CiAgICAgIH0KICAgICAgY2hlY2tDYW5vbmljYWxOYW1lKG5hbWUpOwogICAgICB3cml0ZVVJbnQzMChuYW1lLmluZGV4ICsgMSk7CiAgICB9CiAgfQoKICB2b2lkIGNoZWNrQ2Fub25pY2FsTmFtZShDYW5vbmljYWxOYW1lIG5vZGUpIHsKICAgIGlmIChfa25vd25DYW5vbmljYWxOYW1lTm9uUm9vdFRvcHMuY29udGFpbnMobm9kZS5ub25Sb290VG9wKSkgcmV0dXJuOwogICAgaWYgKG5vZGUgPT0gbnVsbCB8fCBub2RlLmlzUm9vdCkgcmV0dXJuOwogICAgaWYgKF9yZWluZGV4ZWRDYW5vbmljYWxOYW1lcy5jb250YWlucyhub2RlKSkgcmV0dXJuOwoKICAgIGNoZWNrQ2Fub25pY2FsTmFtZShub2RlLnBhcmVudCk7CiAgICBub2RlLmluZGV4ID0gX2Nhbm9uaWNhbE5hbWVMaXN0Lmxlbmd0aDsKICAgIF9jYW5vbmljYWxOYW1lTGlzdC5hZGQobm9kZSk7CiAgICBfcmVpbmRleGVkQ2Fub25pY2FsTmFtZXMuYWRkKG5vZGUpOwogIH0KCiAgdm9pZCB3cml0ZU51bGxBbGxvd2VkQ2Fub25pY2FsTmFtZVJlZmVyZW5jZShDYW5vbmljYWxOYW1lIG5hbWUpIHsKICAgIGlmIChuYW1lID09IG51bGwpIHsKICAgICAgd3JpdGVVSW50MzAoMCk7CiAgICB9IGVsc2UgewogICAgICBjaGVja0Nhbm9uaWNhbE5hbWUobmFtZSk7CiAgICAgIHdyaXRlVUludDMwKG5hbWUuaW5kZXggKyAxKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVOb25OdWxsQ2Fub25pY2FsTmFtZVJlZmVyZW5jZShDYW5vbmljYWxOYW1lIG5hbWUpIHsKICAgIGlmIChuYW1lID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAnRXhwZWN0ZWQgYSBjYW5vbmljYWwgbmFtZSB0byBiZSB2YWxpZCBidXQgd2FzIGBudWxsYC4nKTsKICAgIH0gZWxzZSB7CiAgICAgIGNoZWNrQ2Fub25pY2FsTmFtZShuYW1lKTsKICAgICAgd3JpdGVVSW50MzAobmFtZS5pbmRleCArIDEpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZUxpYnJhcnlSZWZlcmVuY2UoTGlicmFyeSBub2RlLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKG5vZGUuY2Fub25pY2FsTmFtZSA9PSBudWxsICYmICFhbGxvd051bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAnRXhwZWN0ZWQgYSBsaWJyYXJ5IHJlZmVyZW5jZSB0byBiZSB2YWxpZCBidXQgd2FzIGBudWxsYC4nKTsKICAgIH0KICAgIHdyaXRlTnVsbEFsbG93ZWRDYW5vbmljYWxOYW1lUmVmZXJlbmNlKG5vZGUuY2Fub25pY2FsTmFtZSk7CiAgfQoKICB3cml0ZU9mZnNldChpbnQgb2Zmc2V0KSB7CiAgICAvLyBUT0RPKGplbnNqKTogRGVsdGEtZW5jb2RpbmcuCiAgICAvLyBGaWxlIG9mZnNldCByYW5nZXMgZnJvbSAtMSBhbmQgdXAsCiAgICAvLyBidXQgaXMgaGVyZSBzYXZlZCBhcyB1bnNpZ25lZCAodGh1cyB0aGUgKzEpCiAgICBpZiAoIWluY2x1ZGVPZmZzZXRzKSB7CiAgICAgIHdyaXRlVUludDMwKDApOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVVSW50MzAob2Zmc2V0ICsgMSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlQ2xhc3NSZWZlcmVuY2UoQ2xhc3MgY2xhc3NfKSB7CiAgICBpZiAoY2xhc3NfID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAnRXhwZWN0ZWQgYSBjbGFzcyByZWZlcmVuY2UgdG8gYmUgdmFsaWQgYnV0IHdhcyBgbnVsbGAuJyk7CiAgICB9CiAgICB3cml0ZU5vbk51bGxDYW5vbmljYWxOYW1lUmVmZXJlbmNlKGdldENhbm9uaWNhbE5hbWVPZkNsYXNzKGNsYXNzXykpOwogIH0KCiAgdm9pZCB3cml0ZU5hbWUoTmFtZSBub2RlKSB7CiAgICBpZiAoX21ldGFkYXRhU3Vic2VjdGlvbnMgIT0gbnVsbCkgewogICAgICBfd3JpdGVOb2RlTWV0YWRhdGEobm9kZSk7CiAgICB9CiAgICB3cml0ZVN0cmluZ1JlZmVyZW5jZShub2RlLm5hbWUpOwogICAgLy8gVE9ETzogQ29uc2lkZXIgYSBtb3JlIGNvbXByZXNzZWQgZm9ybWF0IGZvciBwcml2YXRlIG5hbWVzIHdpdGhpbiB0aGUKICAgIC8vIGVuY2xvc2luZyBsaWJyYXJ5LgogICAgaWYgKG5vZGUuaXNQcml2YXRlKSB7CiAgICAgIHdyaXRlTGlicmFyeVJlZmVyZW5jZShub2RlLmxpYnJhcnkpOwogICAgfQogIH0KCiAgYm9vbCBpbnNpZGVFeHRlcm5hbExpYnJhcnkgPSBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpYnJhcnkoTGlicmFyeSBub2RlKSB7CiAgICBpbnNpZGVFeHRlcm5hbExpYnJhcnkgPSBub2RlLmlzRXh0ZXJuYWw7CiAgICBsaWJyYXJ5T2Zmc2V0cy5hZGQoZ2V0QnVmZmVyT2Zmc2V0KCkpOwogICAgd3JpdGVCeXRlKG5vZGUuZmxhZ3MpOwoKICAgIHdyaXRlVUludDMwKG5vZGUubGFuZ3VhZ2VWZXJzaW9uTWFqb3IpOwogICAgd3JpdGVVSW50MzAobm9kZS5sYW5ndWFnZVZlcnNpb25NaW5vcik7CgogICAgd3JpdGVOb25OdWxsQ2Fub25pY2FsTmFtZVJlZmVyZW5jZShnZXRDYW5vbmljYWxOYW1lT2ZMaWJyYXJ5KG5vZGUpKTsKICAgIHdyaXRlU3RyaW5nUmVmZXJlbmNlKG5vZGUubmFtZSA/PyAnJyk7CiAgICB3cml0ZVVyaVJlZmVyZW5jZShub2RlLmZpbGVVcmkpOwogICAgd3JpdGVMaXN0T2ZTdHJpbmdzKG5vZGUucHJvYmxlbXNBc0pzb24pOwogICAgZW50ZXJTY29wZShtZW1iZXJTY29wZTogdHJ1ZSk7CiAgICB3cml0ZUFubm90YXRpb25MaXN0KG5vZGUuYW5ub3RhdGlvbnMpOwogICAgd3JpdGVMaWJyYXJ5RGVwZW5kZW5jaWVzKG5vZGUpOwogICAgd3JpdGVBZGRpdGlvbmFsRXhwb3J0cyhub2RlLmFkZGl0aW9uYWxFeHBvcnRzKTsKICAgIHdyaXRlTGlicmFyeVBhcnRzKG5vZGUpOwogICAgbGVhdmVTY29wZShtZW1iZXJTY29wZTogdHJ1ZSk7CgogICAgd3JpdGVUeXBlZGVmTm9kZUxpc3Qobm9kZS50eXBlZGVmcyk7CiAgICBjbGFzc09mZnNldHMgPSBuZXcgTGlzdDxpbnQ+KCk7CiAgICB3cml0ZUNsYXNzTm9kZUxpc3Qobm9kZS5jbGFzc2VzKTsKICAgIGNsYXNzT2Zmc2V0cy5hZGQoZ2V0QnVmZmVyT2Zmc2V0KCkpOwogICAgd3JpdGVFeHRlbnNpb25Ob2RlTGlzdChub2RlLmV4dGVuc2lvbnMpOwogICAgd3JpdGVGaWVsZE5vZGVMaXN0KG5vZGUuZmllbGRzKTsKICAgIHByb2NlZHVyZU9mZnNldHMgPSBuZXcgTGlzdDxpbnQ+KCk7CiAgICB3cml0ZVByb2NlZHVyZU5vZGVMaXN0KG5vZGUucHJvY2VkdXJlcyk7CiAgICBwcm9jZWR1cmVPZmZzZXRzLmFkZChnZXRCdWZmZXJPZmZzZXQoKSk7CgogICAgLy8gRHVtcCBhbGwgc291cmNlLXJlZmVyZW5jZXMgdXNlZCBpbiB0aGlzIGxpYnJhcnk7IHVzZWQgYnkgdGhlIFZNLgogICAgaW50IHNvdXJjZVJlZmVyZW5jZXNPZmZzZXQgPSBnZXRCdWZmZXJPZmZzZXQoKTsKICAgIGludCBzb3VyY2VSZWZlcmVuY2VzQ291bnQgPSAwOwogICAgLy8gTm90ZTogV2Ugc3RhcnQgYXQgMSBiZWNhdXNlIDAgaXMgdGhlIG51bGwtZW50cnkgYW5kIHdlIGRvbid0IHdhbnQgdG8KICAgIC8vIGluY2x1ZGUgdGhhdC4KICAgIGZvciAoaW50IGkgPSAxOyBpIDwgX3NvdXJjZXNGcm9tUmVhbEltcGxlbWVudGF0aW9uSW5MaWJyYXJ5Lmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChfc291cmNlc0Zyb21SZWFsSW1wbGVtZW50YXRpb25JbkxpYnJhcnlbaV0gPT0gdHJ1ZSkgewogICAgICAgIHNvdXJjZVJlZmVyZW5jZXNDb3VudCsrOwogICAgICB9CiAgICB9CiAgICB3cml0ZVVJbnQzMChzb3VyY2VSZWZlcmVuY2VzQ291bnQpOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBfc291cmNlc0Zyb21SZWFsSW1wbGVtZW50YXRpb25JbkxpYnJhcnkubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKF9zb3VyY2VzRnJvbVJlYWxJbXBsZW1lbnRhdGlvbkluTGlicmFyeVtpXSA9PSB0cnVlKSB7CiAgICAgICAgd3JpdGVVSW50MzAoaSk7CiAgICAgICAgX3NvdXJjZXNGcm9tUmVhbEltcGxlbWVudGF0aW9uSW5MaWJyYXJ5W2ldID0gZmFsc2U7CiAgICAgIH0KICAgIH0KCiAgICAvLyBGaXhlZC1zaXplIGludHMgYXQgdGhlIGVuZCB1c2VkIGFzIGFuIGluZGV4LgogICAgd3JpdGVVSW50MzIoc291cmNlUmVmZXJlbmNlc09mZnNldCk7CiAgICBhc3NlcnQoY2xhc3NPZmZzZXRzLmxlbmd0aCA+IDApOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbGFzc09mZnNldHMubGVuZ3RoOyArK2kpIHsKICAgICAgaW50IG9mZnNldCA9IGNsYXNzT2Zmc2V0c1tpXTsKICAgICAgd3JpdGVVSW50MzIob2Zmc2V0KTsKICAgIH0KICAgIHdyaXRlVUludDMyKGNsYXNzT2Zmc2V0cy5sZW5ndGggLSAxKTsKCiAgICBhc3NlcnQocHJvY2VkdXJlT2Zmc2V0cy5sZW5ndGggPiAwKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvY2VkdXJlT2Zmc2V0cy5sZW5ndGg7ICsraSkgewogICAgICBpbnQgb2Zmc2V0ID0gcHJvY2VkdXJlT2Zmc2V0c1tpXTsKICAgICAgd3JpdGVVSW50MzIob2Zmc2V0KTsKICAgIH0KICAgIHdyaXRlVUludDMyKHByb2NlZHVyZU9mZnNldHMubGVuZ3RoIC0gMSk7CiAgfQoKICB2b2lkIHdyaXRlTGlicmFyeURlcGVuZGVuY2llcyhMaWJyYXJ5IGxpYnJhcnkpIHsKICAgIF9saWJyYXJ5RGVwZW5kZW5jeUluZGV4ID0gbGlicmFyeS5kZXBlbmRlbmNpZXMuaXNFbXB0eQogICAgICAgID8gY29uc3QgPExpYnJhcnlEZXBlbmRlbmN5LCBpbnQ+e30KICAgICAgICA6IDxMaWJyYXJ5RGVwZW5kZW5jeSwgaW50Pnt9OwogICAgd3JpdGVVSW50MzAobGlicmFyeS5kZXBlbmRlbmNpZXMubGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlicmFyeS5kZXBlbmRlbmNpZXMubGVuZ3RoOyArK2kpIHsKICAgICAgTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0Tm9kZSA9IGxpYnJhcnkuZGVwZW5kZW5jaWVzW2ldOwogICAgICBfbGlicmFyeURlcGVuZGVuY3lJbmRleFtpbXBvcnROb2RlXSA9IGk7CiAgICAgIHdyaXRlTGlicmFyeURlcGVuZGVuY3koaW1wb3J0Tm9kZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlQWRkaXRpb25hbEV4cG9ydHMoTGlzdDxSZWZlcmVuY2U+IGFkZGl0aW9uYWxFeHBvcnRzKSB7CiAgICB3cml0ZVVJbnQzMChhZGRpdGlvbmFsRXhwb3J0cy5sZW5ndGgpOwogICAgZm9yIChSZWZlcmVuY2UgcmVmIGluIGFkZGl0aW9uYWxFeHBvcnRzKSB7CiAgICAgIHdyaXRlTm9uTnVsbFJlZmVyZW5jZShyZWYpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZUxpYnJhcnlEZXBlbmRlbmN5KExpYnJhcnlEZXBlbmRlbmN5IG5vZGUpIHsKICAgIGlmIChfbWV0YWRhdGFTdWJzZWN0aW9ucyAhPSBudWxsKSB7CiAgICAgIF93cml0ZU5vZGVNZXRhZGF0YShub2RlKTsKICAgIH0KICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZUJ5dGUobm9kZS5mbGFncyk7CiAgICB3cml0ZUFubm90YXRpb25MaXN0KG5vZGUuYW5ub3RhdGlvbnMpOwogICAgd3JpdGVMaWJyYXJ5UmVmZXJlbmNlKG5vZGUudGFyZ2V0TGlicmFyeSwgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHdyaXRlU3RyaW5nUmVmZXJlbmNlKG5vZGUubmFtZSA/PyAnJyk7CiAgICB3cml0ZU5vZGVMaXN0KG5vZGUuY29tYmluYXRvcnMpOwogIH0KCiAgdm9pZCB2aXNpdENvbWJpbmF0b3IoQ29tYmluYXRvciBub2RlKSB7CiAgICB3cml0ZUJ5dGUobm9kZS5pc1Nob3cgPyAxIDogMCk7CiAgICB3cml0ZVN0cmluZ1JlZmVyZW5jZUxpc3Qobm9kZS5uYW1lcyk7CiAgfQoKICB2b2lkIHdyaXRlTGlicmFyeVBhcnRzKExpYnJhcnkgbGlicmFyeSkgewogICAgd3JpdGVVSW50MzAobGlicmFyeS5wYXJ0cy5sZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaWJyYXJ5LnBhcnRzLmxlbmd0aDsgKytpKSB7CiAgICAgIExpYnJhcnlQYXJ0IHBhcnROb2RlID0gbGlicmFyeS5wYXJ0c1tpXTsKICAgICAgd3JpdGVMaWJyYXJ5UGFydChwYXJ0Tm9kZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlTGlicmFyeVBhcnQoTGlicmFyeVBhcnQgbm9kZSkgewogICAgaWYgKF9tZXRhZGF0YVN1YnNlY3Rpb25zICE9IG51bGwpIHsKICAgICAgX3dyaXRlTm9kZU1ldGFkYXRhKG5vZGUpOwogICAgfQogICAgd3JpdGVBbm5vdGF0aW9uTGlzdChub2RlLmFubm90YXRpb25zKTsKICAgIHdyaXRlU3RyaW5nUmVmZXJlbmNlKG5vZGUucGFydFVyaSk7CiAgfQoKICB2b2lkIHZpc2l0VHlwZWRlZihUeXBlZGVmIG5vZGUpIHsKICAgIGVudGVyU2NvcGUobWVtYmVyU2NvcGU6IHRydWUpOwogICAgd3JpdGVOb25OdWxsQ2Fub25pY2FsTmFtZVJlZmVyZW5jZShnZXRDYW5vbmljYWxOYW1lT2ZUeXBlZGVmKG5vZGUpKTsKICAgIHdyaXRlVXJpUmVmZXJlbmNlKG5vZGUuZmlsZVVyaSk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVTdHJpbmdSZWZlcmVuY2Uobm9kZS5uYW1lKTsKICAgIHdyaXRlQW5ub3RhdGlvbkxpc3Qobm9kZS5hbm5vdGF0aW9ucyk7CgogICAgZW50ZXJTY29wZSh0eXBlUGFyYW1ldGVyczogbm9kZS50eXBlUGFyYW1ldGVycywgdmFyaWFibGVTY29wZTogdHJ1ZSk7CiAgICB3cml0ZU5vZGVMaXN0KG5vZGUudHlwZVBhcmFtZXRlcnMpOwogICAgd3JpdGVOb2RlKG5vZGUudHlwZSk7CgogICAgZW50ZXJTY29wZSh0eXBlUGFyYW1ldGVyczogbm9kZS50eXBlUGFyYW1ldGVyc09mRnVuY3Rpb25UeXBlKTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS50eXBlUGFyYW1ldGVyc09mRnVuY3Rpb25UeXBlKTsKICAgIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qobm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycyk7CiAgICB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KG5vZGUubmFtZWRQYXJhbWV0ZXJzKTsKCiAgICBsZWF2ZVNjb3BlKHR5cGVQYXJhbWV0ZXJzOiBub2RlLnR5cGVQYXJhbWV0ZXJzT2ZGdW5jdGlvblR5cGUpOwogICAgbGVhdmVTY29wZSh0eXBlUGFyYW1ldGVyczogbm9kZS50eXBlUGFyYW1ldGVycywgdmFyaWFibGVTY29wZTogdHJ1ZSk7CiAgICBsZWF2ZVNjb3BlKG1lbWJlclNjb3BlOiB0cnVlKTsKICB9CgogIHZvaWQgd3JpdGVBbm5vdGF0aW9uKEV4cHJlc3Npb24gYW5ub3RhdGlvbikgewogICAgd3JpdGVOb2RlKGFubm90YXRpb24pOwogIH0KCiAgdm9pZCB3cml0ZUFubm90YXRpb25MaXN0KExpc3Q8RXhwcmVzc2lvbj4gYW5ub3RhdGlvbnMpIHsKICAgIGZpbmFsIGxlbiA9IGFubm90YXRpb25zLmxlbmd0aDsKICAgIHdyaXRlVUludDMwKGxlbik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIGZpbmFsIGFubm90YXRpb24gPSBhbm5vdGF0aW9uc1tpXTsKICAgICAgd3JpdGVBbm5vdGF0aW9uKGFubm90YXRpb24pOwogICAgfQogIH0KCiAgaW50IF9lbmNvZGVDbGFzc0ZsYWdzKGludCBmbGFncywgQ2xhc3NMZXZlbCBsZXZlbCkgewogICAgYXNzZXJ0KChmbGFncyAmIENsYXNzLkxldmVsTWFzaykgPT0gMCk7CiAgICBmaW5hbCBsZXZlbEluZGV4ID0gbGV2ZWwuaW5kZXggLSAxOwogICAgYXNzZXJ0KChsZXZlbEluZGV4ICYgQ2xhc3MuTGV2ZWxNYXNrKSA9PSBsZXZlbEluZGV4KTsKICAgIHJldHVybiBmbGFncyB8IGxldmVsSW5kZXg7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q2xhc3MoQ2xhc3Mgbm9kZSkgewogICAgY2xhc3NPZmZzZXRzLmFkZChnZXRCdWZmZXJPZmZzZXQoKSk7CgogICAgaWYgKG5vZGUuaXNBbm9ueW1vdXNNaXhpbikgX2N1cnJlbnRseUluTm9uaW1wbGVtZW50YXRpb24gPSB0cnVlOwoKICAgIGludCBmbGFncyA9IF9lbmNvZGVDbGFzc0ZsYWdzKG5vZGUuZmxhZ3MsIG5vZGUubGV2ZWwpOwogICAgaWYgKG5vZGUuY2Fub25pY2FsTmFtZSA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCdNaXNzaW5nIGNhbm9uaWNhbCBuYW1lIGZvciAkbm9kZScpOwogICAgfQogICAgd3JpdGVCeXRlKFRhZy5DbGFzcyk7CiAgICB3cml0ZU5vbk51bGxDYW5vbmljYWxOYW1lUmVmZXJlbmNlKGdldENhbm9uaWNhbE5hbWVPZkNsYXNzKG5vZGUpKTsKICAgIHdyaXRlVXJpUmVmZXJlbmNlKG5vZGUuZmlsZVVyaSk7CiAgICB3cml0ZU9mZnNldChub2RlLnN0YXJ0RmlsZU9mZnNldCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlRW5kT2Zmc2V0KTsKCiAgICB3cml0ZUJ5dGUoZmxhZ3MpOwogICAgd3JpdGVTdHJpbmdSZWZlcmVuY2Uobm9kZS5uYW1lID8/ICcnKTsKCiAgICBlbnRlclNjb3BlKG1lbWJlclNjb3BlOiB0cnVlKTsKICAgIHdyaXRlQW5ub3RhdGlvbkxpc3Qobm9kZS5hbm5vdGF0aW9ucyk7CiAgICBsZWF2ZVNjb3BlKG1lbWJlclNjb3BlOiB0cnVlKTsKICAgIGVudGVyU2NvcGUodHlwZVBhcmFtZXRlcnM6IG5vZGUudHlwZVBhcmFtZXRlcnMpOwogICAgd3JpdGVOb2RlTGlzdChub2RlLnR5cGVQYXJhbWV0ZXJzKTsKICAgIHdyaXRlT3B0aW9uYWxOb2RlKG5vZGUuc3VwZXJ0eXBlKTsKICAgIHdyaXRlT3B0aW9uYWxOb2RlKG5vZGUubWl4ZWRJblR5cGUpOwogICAgd3JpdGVOb2RlTGlzdChub2RlLmltcGxlbWVudGVkVHlwZXMpOwogICAgd3JpdGVGaWVsZE5vZGVMaXN0KG5vZGUuZmllbGRzKTsKICAgIHdyaXRlQ29uc3RydWN0b3JOb2RlTGlzdChub2RlLmNvbnN0cnVjdG9ycyk7CiAgICBwcm9jZWR1cmVPZmZzZXRzID0gPGludD5bXTsKICAgIHdyaXRlUHJvY2VkdXJlTm9kZUxpc3Qobm9kZS5wcm9jZWR1cmVzKTsKICAgIHByb2NlZHVyZU9mZnNldHMuYWRkKGdldEJ1ZmZlck9mZnNldCgpKTsKICAgIHdyaXRlUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JOb2RlTGlzdCgKICAgICAgICBub2RlLnJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9ycyk7CiAgICBsZWF2ZVNjb3BlKHR5cGVQYXJhbWV0ZXJzOiBub2RlLnR5cGVQYXJhbWV0ZXJzKTsKCiAgICBhc3NlcnQocHJvY2VkdXJlT2Zmc2V0cy5sZW5ndGggPiAwKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvY2VkdXJlT2Zmc2V0cy5sZW5ndGg7ICsraSkgewogICAgICBpbnQgb2Zmc2V0ID0gcHJvY2VkdXJlT2Zmc2V0c1tpXTsKICAgICAgd3JpdGVVSW50MzIob2Zmc2V0KTsKICAgIH0KICAgIHdyaXRlVUludDMyKHByb2NlZHVyZU9mZnNldHMubGVuZ3RoIC0gMSk7CiAgICBfY3VycmVudGx5SW5Ob25pbXBsZW1lbnRhdGlvbiA9IGZhbHNlOwogIH0KCiAgc3RhdGljIGZpbmFsIE5hbWUgX2VtcHR5TmFtZSA9IG5ldyBOYW1lKCcnKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnN0cnVjdG9yKENvbnN0cnVjdG9yIG5vZGUpIHsKICAgIGlmIChub2RlLmNhbm9uaWNhbE5hbWUgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignTWlzc2luZyBjYW5vbmljYWwgbmFtZSBmb3IgJG5vZGUnKTsKICAgIH0KICAgIGVudGVyU2NvcGUobWVtYmVyU2NvcGU6IHRydWUpOwogICAgd3JpdGVCeXRlKFRhZy5Db25zdHJ1Y3Rvcik7CiAgICB3cml0ZU5vbk51bGxDYW5vbmljYWxOYW1lUmVmZXJlbmNlKGdldENhbm9uaWNhbE5hbWVPZk1lbWJlcihub2RlKSk7CiAgICB3cml0ZVVyaVJlZmVyZW5jZShub2RlLmZpbGVVcmkpOwogICAgd3JpdGVPZmZzZXQobm9kZS5zdGFydEZpbGVPZmZzZXQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZUVuZE9mZnNldCk7CgogICAgd3JpdGVCeXRlKG5vZGUuZmxhZ3MpOwogICAgd3JpdGVOYW1lKG5vZGUubmFtZSA/PyBfZW1wdHlOYW1lKTsKCiAgICB3cml0ZUFubm90YXRpb25MaXN0KG5vZGUuYW5ub3RhdGlvbnMpOwogICAgYXNzZXJ0KG5vZGUuZnVuY3Rpb24udHlwZVBhcmFtZXRlcnMuaXNFbXB0eSk7CiAgICB3cml0ZUZ1bmN0aW9uTm9kZShub2RlLmZ1bmN0aW9uKTsKICAgIC8vIFBhcmFtZXRlcnMgYXJlIGluIHNjb3BlIGluIHRoZSBpbml0aWFsaXplcnMuCiAgICBfdmFyaWFibGVJbmRleGVyID8/PSBuZXcgVmFyaWFibGVJbmRleGVyKCk7CiAgICBfdmFyaWFibGVJbmRleGVyLnJlc3RvcmVTY29wZShub2RlLmZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCArCiAgICAgICAgbm9kZS5mdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMubGVuZ3RoKTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS5pbml0aWFsaXplcnMpOwoKICAgIGxlYXZlU2NvcGUobWVtYmVyU2NvcGU6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFByb2NlZHVyZShQcm9jZWR1cmUgbm9kZSkgewogICAgcHJvY2VkdXJlT2Zmc2V0cy5hZGQoZ2V0QnVmZmVyT2Zmc2V0KCkpOwoKICAgIGlmIChub2RlLmNhbm9uaWNhbE5hbWUgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignTWlzc2luZyBjYW5vbmljYWwgbmFtZSBmb3IgJG5vZGUnKTsKICAgIH0KCiAgICBmaW5hbCBib29sIGN1cnJlbnRseUluTm9uaW1wbGVtZW50YXRpb25TYXZlZCA9CiAgICAgICAgX2N1cnJlbnRseUluTm9uaW1wbGVtZW50YXRpb247CiAgICBpZiAobm9kZS5pc05vU3VjaE1ldGhvZEZvcndhcmRlciB8fCBub2RlLmlzU3ludGhldGljRm9yd2FyZGVyKSB7CiAgICAgIF9jdXJyZW50bHlJbk5vbmltcGxlbWVudGF0aW9uID0gdHJ1ZTsKICAgIH0KCiAgICBlbnRlclNjb3BlKG1lbWJlclNjb3BlOiB0cnVlKTsKICAgIHdyaXRlQnl0ZShUYWcuUHJvY2VkdXJlKTsKICAgIHdyaXRlTm9uTnVsbENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoZ2V0Q2Fub25pY2FsTmFtZU9mTWVtYmVyKG5vZGUpKTsKICAgIHdyaXRlVXJpUmVmZXJlbmNlKG5vZGUuZmlsZVVyaSk7CiAgICB3cml0ZU9mZnNldChub2RlLnN0YXJ0RmlsZU9mZnNldCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlRW5kT2Zmc2V0KTsKICAgIHdyaXRlQnl0ZShub2RlLmtpbmQuaW5kZXgpOwogICAgd3JpdGVVSW50MzAobm9kZS5mbGFncyk7CiAgICB3cml0ZU5hbWUobm9kZS5uYW1lID8/IF9lbXB0eU5hbWUpOwogICAgd3JpdGVBbm5vdGF0aW9uTGlzdChub2RlLmFubm90YXRpb25zKTsKICAgIHdyaXRlTnVsbEFsbG93ZWRSZWZlcmVuY2Uobm9kZS5mb3J3YXJkaW5nU3R1YlN1cGVyVGFyZ2V0UmVmZXJlbmNlKTsKICAgIHdyaXRlTnVsbEFsbG93ZWRSZWZlcmVuY2Uobm9kZS5mb3J3YXJkaW5nU3R1YkludGVyZmFjZVRhcmdldFJlZmVyZW5jZSk7CiAgICB3cml0ZU9wdGlvbmFsRnVuY3Rpb25Ob2RlKG5vZGUuZnVuY3Rpb24pOwogICAgbGVhdmVTY29wZShtZW1iZXJTY29wZTogdHJ1ZSk7CgogICAgX2N1cnJlbnRseUluTm9uaW1wbGVtZW50YXRpb24gPSBjdXJyZW50bHlJbk5vbmltcGxlbWVudGF0aW9uU2F2ZWQ7CiAgICBhc3NlcnQoKG5vZGUuZm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldCAhPSBudWxsKSB8fAogICAgICAgICEobm9kZS5pc0ZvcndhcmRpbmdTdHViICYmIG5vZGUuZnVuY3Rpb24uYm9keSAhPSBudWxsKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RmllbGQoRmllbGQgbm9kZSkgewogICAgaWYgKG5vZGUuY2Fub25pY2FsTmFtZSA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCdNaXNzaW5nIGNhbm9uaWNhbCBuYW1lIGZvciAkbm9kZScpOwogICAgfQogICAgZW50ZXJTY29wZShtZW1iZXJTY29wZTogdHJ1ZSk7CiAgICB3cml0ZUJ5dGUoVGFnLkZpZWxkKTsKICAgIHdyaXRlTm9uTnVsbENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoZ2V0Q2Fub25pY2FsTmFtZU9mTWVtYmVyKG5vZGUpKTsKICAgIHdyaXRlVXJpUmVmZXJlbmNlKG5vZGUuZmlsZVVyaSk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlRW5kT2Zmc2V0KTsKICAgIHdyaXRlVUludDMwKG5vZGUuZmxhZ3MpOwogICAgd3JpdGVOYW1lKG5vZGUubmFtZSk7CiAgICB3cml0ZUFubm90YXRpb25MaXN0KG5vZGUuYW5ub3RhdGlvbnMpOwogICAgd3JpdGVOb2RlKG5vZGUudHlwZSk7CiAgICB3cml0ZU9wdGlvbmFsTm9kZShub2RlLmluaXRpYWxpemVyKTsKICAgIGxlYXZlU2NvcGUobWVtYmVyU2NvcGU6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yIG5vZGUpIHsKICAgIGlmIChub2RlLmNhbm9uaWNhbE5hbWUgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignTWlzc2luZyBjYW5vbmljYWwgbmFtZSBmb3IgJG5vZGUnKTsKICAgIH0KICAgIHdyaXRlQnl0ZShUYWcuUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IpOwogICAgZW50ZXJTY29wZSgKICAgICAgICB0eXBlUGFyYW1ldGVyczogbm9kZS50eXBlUGFyYW1ldGVycywKICAgICAgICBtZW1iZXJTY29wZTogdHJ1ZSwKICAgICAgICB2YXJpYWJsZVNjb3BlOiB0cnVlKTsKICAgIHdyaXRlTm9uTnVsbENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoZ2V0Q2Fub25pY2FsTmFtZU9mTWVtYmVyKG5vZGUpKTsKICAgIHdyaXRlVXJpUmVmZXJlbmNlKG5vZGUuZmlsZVVyaSk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlRW5kT2Zmc2V0KTsKICAgIHdyaXRlQnl0ZShub2RlLmZsYWdzKTsKICAgIHdyaXRlTmFtZShub2RlLm5hbWUpOwoKICAgIHdyaXRlQW5ub3RhdGlvbkxpc3Qobm9kZS5hbm5vdGF0aW9ucyk7CiAgICB3cml0ZU5vbk51bGxSZWZlcmVuY2Uobm9kZS50YXJnZXRSZWZlcmVuY2UpOwogICAgd3JpdGVOb2RlTGlzdChub2RlLnR5cGVBcmd1bWVudHMpOwogICAgd3JpdGVOb2RlTGlzdChub2RlLnR5cGVQYXJhbWV0ZXJzKTsKICAgIHdyaXRlVUludDMwKG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoICsgbm9kZS5uYW1lZFBhcmFtZXRlcnMubGVuZ3RoKTsKICAgIHdyaXRlVUludDMwKG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCk7CiAgICB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMpOwogICAgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChub2RlLm5hbWVkUGFyYW1ldGVycyk7CgogICAgbGVhdmVTY29wZSgKICAgICAgICB0eXBlUGFyYW1ldGVyczogbm9kZS50eXBlUGFyYW1ldGVycywKICAgICAgICBtZW1iZXJTY29wZTogdHJ1ZSwKICAgICAgICB2YXJpYWJsZVNjb3BlOiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnZhbGlkSW5pdGlhbGl6ZXIoSW52YWxpZEluaXRpYWxpemVyIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuSW52YWxpZEluaXRpYWxpemVyKTsKICAgIHdyaXRlQnl0ZShub2RlLmlzU3ludGhldGljID8gMSA6IDApOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZpZWxkSW5pdGlhbGl6ZXIoRmllbGRJbml0aWFsaXplciBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkZpZWxkSW5pdGlhbGl6ZXIpOwogICAgd3JpdGVCeXRlKG5vZGUuaXNTeW50aGV0aWMgPyAxIDogMCk7CiAgICB3cml0ZU5vbk51bGxSZWZlcmVuY2Uobm9kZS5maWVsZFJlZmVyZW5jZSk7CiAgICB3cml0ZU5vZGUobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3VwZXJJbml0aWFsaXplcihTdXBlckluaXRpYWxpemVyIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuU3VwZXJJbml0aWFsaXplcik7CiAgICB3cml0ZUJ5dGUobm9kZS5pc1N5bnRoZXRpYyA/IDEgOiAwKTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5vbk51bGxSZWZlcmVuY2Uobm9kZS50YXJnZXRSZWZlcmVuY2UpOwogICAgd3JpdGVBcmd1bWVudHNOb2RlKG5vZGUuYXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRSZWRpcmVjdGluZ0luaXRpYWxpemVyKFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5SZWRpcmVjdGluZ0luaXRpYWxpemVyKTsKICAgIHdyaXRlQnl0ZShub2RlLmlzU3ludGhldGljID8gMSA6IDApOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTm9uTnVsbFJlZmVyZW5jZShub2RlLnRhcmdldFJlZmVyZW5jZSk7CiAgICB3cml0ZUFyZ3VtZW50c05vZGUobm9kZS5hcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExvY2FsSW5pdGlhbGl6ZXIoTG9jYWxJbml0aWFsaXplciBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkxvY2FsSW5pdGlhbGl6ZXIpOwogICAgd3JpdGVCeXRlKG5vZGUuaXNTeW50aGV0aWMgPyAxIDogMCk7CiAgICB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb24obm9kZS52YXJpYWJsZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QXNzZXJ0SW5pdGlhbGl6ZXIoQXNzZXJ0SW5pdGlhbGl6ZXIgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5Bc3NlcnRJbml0aWFsaXplcik7CiAgICB3cml0ZUJ5dGUobm9kZS5pc1N5bnRoZXRpYyA/IDEgOiAwKTsKICAgIHdyaXRlTm9kZShub2RlLnN0YXRlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RnVuY3Rpb25Ob2RlKEZ1bmN0aW9uTm9kZSBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkZ1bmN0aW9uTm9kZSk7CiAgICBlbnRlclNjb3BlKHR5cGVQYXJhbWV0ZXJzOiBub2RlLnR5cGVQYXJhbWV0ZXJzLCB2YXJpYWJsZVNjb3BlOiB0cnVlKTsKICAgIExhYmVsSW5kZXhlciBvbGRMYWJlbHMgPSBfbGFiZWxJbmRleGVyOwogICAgX2xhYmVsSW5kZXhlciA9IG51bGw7CiAgICBTd2l0Y2hDYXNlSW5kZXhlciBvbGRDYXNlcyA9IF9zd2l0Y2hDYXNlSW5kZXhlcjsKICAgIF9zd2l0Y2hDYXNlSW5kZXhlciA9IG51bGw7CiAgICAvLyBOb3RlOiBGdW5jdGlvbk5vZGUgaGFzIG5vIHRhZy4KICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVFbmRPZmZzZXQpOwogICAgd3JpdGVCeXRlKG5vZGUuYXN5bmNNYXJrZXIuaW5kZXgpOwogICAgd3JpdGVCeXRlKG5vZGUuZGFydEFzeW5jTWFya2VyLmluZGV4KTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS50eXBlUGFyYW1ldGVycyk7CiAgICB3cml0ZVVJbnQzMChub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCArIG5vZGUubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCk7CiAgICB3cml0ZVVJbnQzMChub2RlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpOwogICAgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzKTsKICAgIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qobm9kZS5uYW1lZFBhcmFtZXRlcnMpOwogICAgd3JpdGVOb2RlKG5vZGUucmV0dXJuVHlwZSk7CiAgICB3cml0ZU9wdGlvbmFsTm9kZShub2RlLmJvZHkpOwogICAgX2xhYmVsSW5kZXhlciA9IG9sZExhYmVsczsKICAgIF9zd2l0Y2hDYXNlSW5kZXhlciA9IG9sZENhc2VzOwogICAgbGVhdmVTY29wZSh0eXBlUGFyYW1ldGVyczogbm9kZS50eXBlUGFyYW1ldGVycywgdmFyaWFibGVTY29wZTogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW52YWxpZEV4cHJlc3Npb24oSW52YWxpZEV4cHJlc3Npb24gbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5JbnZhbGlkRXhwcmVzc2lvbik7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVTdHJpbmdSZWZlcmVuY2Uobm9kZS5tZXNzYWdlID8/ICcnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRWYXJpYWJsZUdldChWYXJpYWJsZUdldCBub2RlKSB7CiAgICBfdmFyaWFibGVJbmRleGVyID8/PSBuZXcgVmFyaWFibGVJbmRleGVyKCk7CiAgICBpbnQgaW5kZXggPSBfdmFyaWFibGVJbmRleGVyW25vZGUudmFyaWFibGVdOwogICAgYXNzZXJ0KGluZGV4ICE9IG51bGwpOwogICAgaWYgKGluZGV4ICYgVGFnLlNwZWNpYWxpemVkUGF5bG9hZE1hc2sgPT0gaW5kZXggJiYKICAgICAgICBub2RlLnByb21vdGVkVHlwZSA9PSBudWxsKSB7CiAgICAgIHdyaXRlQnl0ZShUYWcuU3BlY2lhbGl6ZWRWYXJpYWJsZUdldCArIGluZGV4KTsKICAgICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgICAgd3JpdGVVSW50MzAobm9kZS52YXJpYWJsZS5iaW5hcnlPZmZzZXROb1RhZyk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUJ5dGUoVGFnLlZhcmlhYmxlR2V0KTsKICAgICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgICAgd3JpdGVVSW50MzAobm9kZS52YXJpYWJsZS5iaW5hcnlPZmZzZXROb1RhZyk7CiAgICAgIHdyaXRlVUludDMwKGluZGV4KTsKICAgICAgd3JpdGVPcHRpb25hbE5vZGUobm9kZS5wcm9tb3RlZFR5cGUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFZhcmlhYmxlU2V0KFZhcmlhYmxlU2V0IG5vZGUpIHsKICAgIF92YXJpYWJsZUluZGV4ZXIgPz89IG5ldyBWYXJpYWJsZUluZGV4ZXIoKTsKICAgIGludCBpbmRleCA9IF92YXJpYWJsZUluZGV4ZXJbbm9kZS52YXJpYWJsZV07CiAgICBhc3NlcnQoaW5kZXggIT0gbnVsbCk7CiAgICBpZiAoaW5kZXggJiBUYWcuU3BlY2lhbGl6ZWRQYXlsb2FkTWFzayA9PSBpbmRleCkgewogICAgICB3cml0ZUJ5dGUoVGFnLlNwZWNpYWxpemVkVmFyaWFibGVTZXQgKyBpbmRleCk7CiAgICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICAgIHdyaXRlVUludDMwKG5vZGUudmFyaWFibGUuYmluYXJ5T2Zmc2V0Tm9UYWcpOwogICAgICB3cml0ZU5vZGUobm9kZS52YWx1ZSk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUJ5dGUoVGFnLlZhcmlhYmxlU2V0KTsKICAgICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgICAgd3JpdGVVSW50MzAobm9kZS52YXJpYWJsZS5iaW5hcnlPZmZzZXROb1RhZyk7CiAgICAgIHdyaXRlVUludDMwKGluZGV4KTsKICAgICAgd3JpdGVOb2RlKG5vZGUudmFsdWUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFByb3BlcnR5R2V0KFByb3BlcnR5R2V0IG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuUHJvcGVydHlHZXQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTm9kZShub2RlLnJlY2VpdmVyKTsKICAgIHdyaXRlTmFtZShub2RlLm5hbWUpOwogICAgd3JpdGVOdWxsQWxsb3dlZFJlZmVyZW5jZShub2RlLmludGVyZmFjZVRhcmdldFJlZmVyZW5jZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UHJvcGVydHlTZXQoUHJvcGVydHlTZXQgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5Qcm9wZXJ0eVNldCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOb2RlKG5vZGUucmVjZWl2ZXIpOwogICAgd3JpdGVOYW1lKG5vZGUubmFtZSk7CiAgICB3cml0ZU5vZGUobm9kZS52YWx1ZSk7CiAgICB3cml0ZU51bGxBbGxvd2VkUmVmZXJlbmNlKG5vZGUuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdXBlclByb3BlcnR5R2V0KFN1cGVyUHJvcGVydHlHZXQgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5TdXBlclByb3BlcnR5R2V0KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5hbWUobm9kZS5uYW1lKTsKICAgIHdyaXRlTnVsbEFsbG93ZWRSZWZlcmVuY2Uobm9kZS5pbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN1cGVyUHJvcGVydHlTZXQoU3VwZXJQcm9wZXJ0eVNldCBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLlN1cGVyUHJvcGVydHlTZXQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTmFtZShub2RlLm5hbWUpOwogICAgd3JpdGVOb2RlKG5vZGUudmFsdWUpOwogICAgd3JpdGVOdWxsQWxsb3dlZFJlZmVyZW5jZShub2RlLmludGVyZmFjZVRhcmdldFJlZmVyZW5jZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RGlyZWN0UHJvcGVydHlHZXQoRGlyZWN0UHJvcGVydHlHZXQgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5EaXJlY3RQcm9wZXJ0eUdldCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOb2RlKG5vZGUucmVjZWl2ZXIpOwogICAgd3JpdGVOb25OdWxsUmVmZXJlbmNlKG5vZGUudGFyZ2V0UmVmZXJlbmNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREaXJlY3RQcm9wZXJ0eVNldChEaXJlY3RQcm9wZXJ0eVNldCBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkRpcmVjdFByb3BlcnR5U2V0KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5vZGUobm9kZS5yZWNlaXZlcik7CiAgICB3cml0ZU5vbk51bGxSZWZlcmVuY2Uobm9kZS50YXJnZXRSZWZlcmVuY2UpOwogICAgd3JpdGVOb2RlKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0YXRpY0dldChTdGF0aWNHZXQgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5TdGF0aWNHZXQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTm9uTnVsbFJlZmVyZW5jZShub2RlLnRhcmdldFJlZmVyZW5jZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RhdGljU2V0KFN0YXRpY1NldCBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLlN0YXRpY1NldCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOb25OdWxsUmVmZXJlbmNlKG5vZGUudGFyZ2V0UmVmZXJlbmNlKTsKICAgIHdyaXRlTm9kZShub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRNZXRob2RJbnZvY2F0aW9uKE1ldGhvZEludm9jYXRpb24gbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5NZXRob2RJbnZvY2F0aW9uKTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5vZGUobm9kZS5yZWNlaXZlcik7CiAgICB3cml0ZU5hbWUobm9kZS5uYW1lKTsKICAgIHdyaXRlQXJndW1lbnRzTm9kZShub2RlLmFyZ3VtZW50cyk7CiAgICB3cml0ZU51bGxBbGxvd2VkUmVmZXJlbmNlKG5vZGUuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdXBlck1ldGhvZEludm9jYXRpb24oU3VwZXJNZXRob2RJbnZvY2F0aW9uIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuU3VwZXJNZXRob2RJbnZvY2F0aW9uKTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5hbWUobm9kZS5uYW1lKTsKICAgIHdyaXRlQXJndW1lbnRzTm9kZShub2RlLmFyZ3VtZW50cyk7CiAgICB3cml0ZU51bGxBbGxvd2VkUmVmZXJlbmNlKG5vZGUuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREaXJlY3RNZXRob2RJbnZvY2F0aW9uKERpcmVjdE1ldGhvZEludm9jYXRpb24gbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5EaXJlY3RNZXRob2RJbnZvY2F0aW9uKTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5vZGUobm9kZS5yZWNlaXZlcik7CiAgICB3cml0ZU5vbk51bGxSZWZlcmVuY2Uobm9kZS50YXJnZXRSZWZlcmVuY2UpOwogICAgd3JpdGVBcmd1bWVudHNOb2RlKG5vZGUuYXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdGF0aWNJbnZvY2F0aW9uKFN0YXRpY0ludm9jYXRpb24gbm9kZSkgewogICAgd3JpdGVCeXRlKG5vZGUuaXNDb25zdCA/IFRhZy5Db25zdFN0YXRpY0ludm9jYXRpb24gOiBUYWcuU3RhdGljSW52b2NhdGlvbik7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOb25OdWxsUmVmZXJlbmNlKG5vZGUudGFyZ2V0UmVmZXJlbmNlKTsKICAgIHdyaXRlQXJndW1lbnRzTm9kZShub2RlLmFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKENvbnN0cnVjdG9ySW52b2NhdGlvbiBub2RlKSB7CiAgICB3cml0ZUJ5dGUobm9kZS5pc0NvbnN0CiAgICAgICAgPyBUYWcuQ29uc3RDb25zdHJ1Y3Rvckludm9jYXRpb24KICAgICAgICA6IFRhZy5Db25zdHJ1Y3Rvckludm9jYXRpb24pOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTm9uTnVsbFJlZmVyZW5jZShub2RlLnRhcmdldFJlZmVyZW5jZSk7CiAgICB3cml0ZUFyZ3VtZW50c05vZGUobm9kZS5hcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEFyZ3VtZW50cyhBcmd1bWVudHMgbm9kZSkgewogICAgd3JpdGVVSW50MzAobm9kZS5wb3NpdGlvbmFsLmxlbmd0aCArIG5vZGUubmFtZWQubGVuZ3RoKTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS50eXBlcyk7CiAgICB3cml0ZU5vZGVMaXN0KG5vZGUucG9zaXRpb25hbCk7CiAgICB3cml0ZU5vZGVMaXN0KG5vZGUubmFtZWQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE5hbWVkRXhwcmVzc2lvbihOYW1lZEV4cHJlc3Npb24gbm9kZSkgewogICAgd3JpdGVTdHJpbmdSZWZlcmVuY2Uobm9kZS5uYW1lKTsKICAgIHdyaXRlTm9kZShub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXROb3QoTm90IG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuTm90KTsKICAgIHdyaXRlTm9kZShub2RlLm9wZXJhbmQpOwogIH0KCiAgaW50IGxvZ2ljYWxPcGVyYXRvckluZGV4KFN0cmluZyBvcGVyYXRvcikgewogICAgc3dpdGNoIChvcGVyYXRvcikgewogICAgICBjYXNlICcmJic6CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIGNhc2UgJ3x8JzoKICAgICAgICByZXR1cm4gMTsKICAgIH0KICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCdOb3QgYSBsb2dpY2FsIG9wZXJhdG9yOiAkb3BlcmF0b3InKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMb2dpY2FsRXhwcmVzc2lvbihMb2dpY2FsRXhwcmVzc2lvbiBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkxvZ2ljYWxFeHByZXNzaW9uKTsKICAgIHdyaXRlTm9kZShub2RlLmxlZnQpOwogICAgd3JpdGVCeXRlKGxvZ2ljYWxPcGVyYXRvckluZGV4KG5vZGUub3BlcmF0b3IpKTsKICAgIHdyaXRlTm9kZShub2RlLnJpZ2h0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb25kaXRpb25hbEV4cHJlc3Npb24oQ29uZGl0aW9uYWxFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuQ29uZGl0aW9uYWxFeHByZXNzaW9uKTsKICAgIHdyaXRlTm9kZShub2RlLmNvbmRpdGlvbik7CiAgICB3cml0ZU5vZGUobm9kZS50aGVuKTsKICAgIHdyaXRlTm9kZShub2RlLm90aGVyd2lzZSk7CiAgICB3cml0ZU9wdGlvbmFsTm9kZShub2RlLnN0YXRpY1R5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0cmluZ0NvbmNhdGVuYXRpb24oU3RyaW5nQ29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLlN0cmluZ0NvbmNhdGVuYXRpb24pOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS5leHByZXNzaW9ucyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGlzdENvbmNhdGVuYXRpb24oTGlzdENvbmNhdGVuYXRpb24gbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5MaXN0Q29uY2F0ZW5hdGlvbik7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOb2RlKG5vZGUudHlwZUFyZ3VtZW50KTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS5saXN0cyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U2V0Q29uY2F0ZW5hdGlvbihTZXRDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuU2V0Q29uY2F0ZW5hdGlvbik7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOb2RlKG5vZGUudHlwZUFyZ3VtZW50KTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS5zZXRzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRNYXBDb25jYXRlbmF0aW9uKE1hcENvbmNhdGVuYXRpb24gbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5NYXBDb25jYXRlbmF0aW9uKTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5vZGUobm9kZS5rZXlUeXBlKTsKICAgIHdyaXRlTm9kZShub2RlLnZhbHVlVHlwZSk7CiAgICB3cml0ZU5vZGVMaXN0KG5vZGUubWFwcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW5zdGFuY2VDcmVhdGlvbihJbnN0YW5jZUNyZWF0aW9uIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuSW5zdGFuY2VDcmVhdGlvbik7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOb25OdWxsUmVmZXJlbmNlKG5vZGUuY2xhc3NSZWZlcmVuY2UpOwogICAgd3JpdGVOb2RlTGlzdChub2RlLnR5cGVBcmd1bWVudHMpOwogICAgd3JpdGVVSW50MzAobm9kZS5maWVsZFZhbHVlcy5sZW5ndGgpOwogICAgbm9kZS5maWVsZFZhbHVlcy5mb3JFYWNoKChSZWZlcmVuY2UgZmllbGRSZWYsIEV4cHJlc3Npb24gdmFsdWUpIHsKICAgICAgd3JpdGVOb25OdWxsUmVmZXJlbmNlKGZpZWxkUmVmKTsKICAgICAgd3JpdGVOb2RlKHZhbHVlKTsKICAgIH0pOwogICAgd3JpdGVOb2RlTGlzdChub2RlLmFzc2VydHMpOwogICAgd3JpdGVOb2RlTGlzdChub2RlLnVudXNlZEFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SXNFeHByZXNzaW9uKElzRXhwcmVzc2lvbiBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLklzRXhwcmVzc2lvbik7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOb2RlKG5vZGUub3BlcmFuZCk7CiAgICB3cml0ZU5vZGUobm9kZS50eXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBc0V4cHJlc3Npb24oQXNFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuQXNFeHByZXNzaW9uKTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZUJ5dGUobm9kZS5mbGFncyk7CiAgICB3cml0ZU5vZGUobm9kZS5vcGVyYW5kKTsKICAgIHdyaXRlTm9kZShub2RlLnR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0cmluZ0xpdGVyYWwoU3RyaW5nTGl0ZXJhbCBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLlN0cmluZ0xpdGVyYWwpOwogICAgd3JpdGVTdHJpbmdSZWZlcmVuY2Uobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50TGl0ZXJhbChJbnRMaXRlcmFsIG5vZGUpIHsKICAgIHdyaXRlSW50ZWdlcihub2RlLnZhbHVlKTsKICB9CgogIHdyaXRlSW50ZWdlcihpbnQgdmFsdWUpIHsKICAgIGludCBiaWFzZWRWYWx1ZSA9IHZhbHVlICsgVGFnLlNwZWNpYWxpemVkSW50TGl0ZXJhbEJpYXM7CiAgICBpZiAoYmlhc2VkVmFsdWUgPj0gMCAmJgogICAgICAgIGJpYXNlZFZhbHVlICYgVGFnLlNwZWNpYWxpemVkUGF5bG9hZE1hc2sgPT0gYmlhc2VkVmFsdWUpIHsKICAgICAgd3JpdGVCeXRlKFRhZy5TcGVjaWFsaXplZEludExpdGVyYWwgKyBiaWFzZWRWYWx1ZSk7CiAgICB9IGVsc2UgaWYgKHZhbHVlLmFicygpID4+IDMwID09IDApIHsKICAgICAgaWYgKHZhbHVlIDwgMCkgewogICAgICAgIHdyaXRlQnl0ZShUYWcuTmVnYXRpdmVJbnRMaXRlcmFsKTsKICAgICAgICB3cml0ZVVJbnQzMCgtdmFsdWUpOwogICAgICB9IGVsc2UgewogICAgICAgIHdyaXRlQnl0ZShUYWcuUG9zaXRpdmVJbnRMaXRlcmFsKTsKICAgICAgICB3cml0ZVVJbnQzMCh2YWx1ZSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIFRPRE86IFBpY2sgYSBiZXR0ZXIgZm9ybWF0IGZvciBiaWcgaW50IGxpdGVyYWxzLgogICAgICB3cml0ZUJ5dGUoVGFnLkJpZ0ludExpdGVyYWwpOwogICAgICB3cml0ZVN0cmluZ1JlZmVyZW5jZSgnJHZhbHVlJyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RG91YmxlTGl0ZXJhbChEb3VibGVMaXRlcmFsIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuRG91YmxlTGl0ZXJhbCk7CiAgICB3cml0ZURvdWJsZShub2RlLnZhbHVlKTsKICB9CgogIHdyaXRlRG91YmxlKGRvdWJsZSB2YWx1ZSkgewogICAgX3NpbmsuYWRkRG91YmxlKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCb29sTGl0ZXJhbChCb29sTGl0ZXJhbCBub2RlKSB7CiAgICB3cml0ZUJ5dGUobm9kZS52YWx1ZSA/IFRhZy5UcnVlTGl0ZXJhbCA6IFRhZy5GYWxzZUxpdGVyYWwpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE51bGxMaXRlcmFsKE51bGxMaXRlcmFsIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuTnVsbExpdGVyYWwpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN5bWJvbExpdGVyYWwoU3ltYm9sTGl0ZXJhbCBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLlN5bWJvbExpdGVyYWwpOwogICAgd3JpdGVTdHJpbmdSZWZlcmVuY2Uobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZUxpdGVyYWwoVHlwZUxpdGVyYWwgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5UeXBlTGl0ZXJhbCk7CiAgICB3cml0ZU5vZGUobm9kZS50eXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUaGlzRXhwcmVzc2lvbihUaGlzRXhwcmVzc2lvbiBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLlRoaXNFeHByZXNzaW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRSZXRocm93KFJldGhyb3cgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5SZXRocm93KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VGhyb3coVGhyb3cgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5UaHJvdyk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOb2RlKG5vZGUuZXhwcmVzc2lvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGlzdExpdGVyYWwoTGlzdExpdGVyYWwgbm9kZSkgewogICAgd3JpdGVCeXRlKG5vZGUuaXNDb25zdCA/IFRhZy5Db25zdExpc3RMaXRlcmFsIDogVGFnLkxpc3RMaXRlcmFsKTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5vZGUobm9kZS50eXBlQXJndW1lbnQpOwogICAgd3JpdGVOb2RlTGlzdChub2RlLmV4cHJlc3Npb25zKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTZXRMaXRlcmFsKFNldExpdGVyYWwgbm9kZSkgewogICAgd3JpdGVCeXRlKG5vZGUuaXNDb25zdCA/IFRhZy5Db25zdFNldExpdGVyYWwgOiBUYWcuU2V0TGl0ZXJhbCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOb2RlKG5vZGUudHlwZUFyZ3VtZW50KTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS5leHByZXNzaW9ucyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TWFwTGl0ZXJhbChNYXBMaXRlcmFsIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShub2RlLmlzQ29uc3QgPyBUYWcuQ29uc3RNYXBMaXRlcmFsIDogVGFnLk1hcExpdGVyYWwpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTm9kZShub2RlLmtleVR5cGUpOwogICAgd3JpdGVOb2RlKG5vZGUudmFsdWVUeXBlKTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS5lbnRyaWVzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRNYXBFbnRyeShNYXBFbnRyeSBub2RlKSB7CiAgICAvLyBOb3RlOiB0aGVyZSBpcyBubyB0YWcgb24gTWFwRW50cnkKICAgIHdyaXRlTm9kZShub2RlLmtleSk7CiAgICB3cml0ZU5vZGUobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QXdhaXRFeHByZXNzaW9uKEF3YWl0RXhwcmVzc2lvbiBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkF3YWl0RXhwcmVzc2lvbik7CiAgICB3cml0ZU5vZGUobm9kZS5vcGVyYW5kKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGdW5jdGlvbkV4cHJlc3Npb24oRnVuY3Rpb25FeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuRnVuY3Rpb25FeHByZXNzaW9uKTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZUZ1bmN0aW9uTm9kZShub2RlLmZ1bmN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMZXQoTGV0IG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuTGV0KTsKICAgIF92YXJpYWJsZUluZGV4ZXIgPz89IG5ldyBWYXJpYWJsZUluZGV4ZXIoKTsKICAgIF92YXJpYWJsZUluZGV4ZXIucHVzaFNjb3BlKCk7CiAgICB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb24obm9kZS52YXJpYWJsZSk7CiAgICB3cml0ZU5vZGUobm9kZS5ib2R5KTsKICAgIF92YXJpYWJsZUluZGV4ZXIucG9wU2NvcGUoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCbG9ja0V4cHJlc3Npb24oQmxvY2tFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuQmxvY2tFeHByZXNzaW9uKTsKICAgIF92YXJpYWJsZUluZGV4ZXIgPz89IG5ldyBWYXJpYWJsZUluZGV4ZXIoKTsKICAgIF92YXJpYWJsZUluZGV4ZXIucHVzaFNjb3BlKCk7CiAgICB3cml0ZU5vZGVMaXN0KG5vZGUuYm9keS5zdGF0ZW1lbnRzKTsKICAgIHdyaXRlTm9kZShub2RlLnZhbHVlKTsKICAgIF92YXJpYWJsZUluZGV4ZXIucG9wU2NvcGUoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnN0YW50aWF0aW9uKEluc3RhbnRpYXRpb24gbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5JbnN0YW50aWF0aW9uKTsKICAgIHdyaXRlTm9kZShub2RlLmV4cHJlc3Npb24pOwogICAgd3JpdGVOb2RlTGlzdChub2RlLnR5cGVBcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExvYWRMaWJyYXJ5KExvYWRMaWJyYXJ5IG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuTG9hZExpYnJhcnkpOwogICAgd3JpdGVMaWJyYXJ5RGVwZW5kZW5jeVJlZmVyZW5jZShub2RlLmltcG9ydCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q2hlY2tMaWJyYXJ5SXNMb2FkZWQoQ2hlY2tMaWJyYXJ5SXNMb2FkZWQgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5DaGVja0xpYnJhcnlJc0xvYWRlZCk7CiAgICB3cml0ZUxpYnJhcnlEZXBlbmRlbmN5UmVmZXJlbmNlKG5vZGUuaW1wb3J0KTsKICB9CgogIHdyaXRlU3RhdGVtZW50T3JFbXB0eShTdGF0ZW1lbnQgbm9kZSkgewogICAgaWYgKG5vZGUgPT0gbnVsbCkgewogICAgICB3cml0ZUJ5dGUoVGFnLkVtcHR5U3RhdGVtZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlTm9kZShub2RlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRFeHByZXNzaW9uU3RhdGVtZW50KEV4cHJlc3Npb25TdGF0ZW1lbnQgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5FeHByZXNzaW9uU3RhdGVtZW50KTsKICAgIHdyaXRlTm9kZShub2RlLmV4cHJlc3Npb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJsb2NrKEJsb2NrIG5vZGUpIHsKICAgIF92YXJpYWJsZUluZGV4ZXIgPz89IG5ldyBWYXJpYWJsZUluZGV4ZXIoKTsKICAgIF92YXJpYWJsZUluZGV4ZXIucHVzaFNjb3BlKCk7CiAgICB3cml0ZUJ5dGUoVGFnLkJsb2NrKTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS5zdGF0ZW1lbnRzKTsKICAgIF92YXJpYWJsZUluZGV4ZXIucG9wU2NvcGUoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBc3NlcnRCbG9jayhBc3NlcnRCbG9jayBub2RlKSB7CiAgICBfdmFyaWFibGVJbmRleGVyID8/PSBuZXcgVmFyaWFibGVJbmRleGVyKCk7CiAgICBfdmFyaWFibGVJbmRleGVyLnB1c2hTY29wZSgpOwogICAgd3JpdGVCeXRlKFRhZy5Bc3NlcnRCbG9jayk7CiAgICB3cml0ZU5vZGVMaXN0KG5vZGUuc3RhdGVtZW50cyk7CiAgICBfdmFyaWFibGVJbmRleGVyLnBvcFNjb3BlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RW1wdHlTdGF0ZW1lbnQoRW1wdHlTdGF0ZW1lbnQgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5FbXB0eVN0YXRlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QXNzZXJ0U3RhdGVtZW50KEFzc2VydFN0YXRlbWVudCBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkFzc2VydFN0YXRlbWVudCk7CiAgICB3cml0ZU5vZGUobm9kZS5jb25kaXRpb24pOwogICAgd3JpdGVPZmZzZXQobm9kZS5jb25kaXRpb25TdGFydE9mZnNldCk7CiAgICB3cml0ZU9mZnNldChub2RlLmNvbmRpdGlvbkVuZE9mZnNldCk7CiAgICB3cml0ZU9wdGlvbmFsTm9kZShub2RlLm1lc3NhZ2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExhYmVsZWRTdGF0ZW1lbnQoTGFiZWxlZFN0YXRlbWVudCBub2RlKSB7CiAgICBpZiAoX2xhYmVsSW5kZXhlciA9PSBudWxsKSB7CiAgICAgIF9sYWJlbEluZGV4ZXIgPSBuZXcgTGFiZWxJbmRleGVyKCk7CiAgICB9CiAgICBfbGFiZWxJbmRleGVyLmVudGVyKG5vZGUpOwogICAgd3JpdGVCeXRlKFRhZy5MYWJlbGVkU3RhdGVtZW50KTsKICAgIHdyaXRlTm9kZShub2RlLmJvZHkpOwogICAgX2xhYmVsSW5kZXhlci5leGl0KCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29uc3RhbnRFeHByZXNzaW9uKENvbnN0YW50RXhwcmVzc2lvbiBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkNvbnN0YW50RXhwcmVzc2lvbik7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVEYXJ0VHlwZShub2RlLnR5cGUpOwogICAgd3JpdGVDb25zdGFudFJlZmVyZW5jZShub2RlLmNvbnN0YW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCcmVha1N0YXRlbWVudChCcmVha1N0YXRlbWVudCBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkJyZWFrU3RhdGVtZW50KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZVVJbnQzMChfbGFiZWxJbmRleGVyW25vZGUudGFyZ2V0XSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0V2hpbGVTdGF0ZW1lbnQoV2hpbGVTdGF0ZW1lbnQgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5XaGlsZVN0YXRlbWVudCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOb2RlKG5vZGUuY29uZGl0aW9uKTsKICAgIHdyaXRlTm9kZShub2RlLmJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERvU3RhdGVtZW50KERvU3RhdGVtZW50IG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuRG9TdGF0ZW1lbnQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTm9kZShub2RlLmJvZHkpOwogICAgd3JpdGVOb2RlKG5vZGUuY29uZGl0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGb3JTdGF0ZW1lbnQoRm9yU3RhdGVtZW50IG5vZGUpIHsKICAgIF92YXJpYWJsZUluZGV4ZXIgPz89IG5ldyBWYXJpYWJsZUluZGV4ZXIoKTsKICAgIF92YXJpYWJsZUluZGV4ZXIucHVzaFNjb3BlKCk7CiAgICB3cml0ZUJ5dGUoVGFnLkZvclN0YXRlbWVudCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChub2RlLnZhcmlhYmxlcyk7CiAgICB3cml0ZU9wdGlvbmFsTm9kZShub2RlLmNvbmRpdGlvbik7CiAgICB3cml0ZU5vZGVMaXN0KG5vZGUudXBkYXRlcyk7CiAgICB3cml0ZU5vZGUobm9kZS5ib2R5KTsKICAgIF92YXJpYWJsZUluZGV4ZXIucG9wU2NvcGUoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGb3JJblN0YXRlbWVudChGb3JJblN0YXRlbWVudCBub2RlKSB7CiAgICBfdmFyaWFibGVJbmRleGVyID8/PSBuZXcgVmFyaWFibGVJbmRleGVyKCk7CiAgICBfdmFyaWFibGVJbmRleGVyLnB1c2hTY29wZSgpOwogICAgd3JpdGVCeXRlKG5vZGUuaXNBc3luYyA/IFRhZy5Bc3luY0ZvckluU3RhdGVtZW50IDogVGFnLkZvckluU3RhdGVtZW50KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU9mZnNldChub2RlLmJvZHlPZmZzZXQpOwogICAgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUudmFyaWFibGUpOwogICAgd3JpdGVOb2RlKG5vZGUuaXRlcmFibGUpOwogICAgd3JpdGVOb2RlKG5vZGUuYm9keSk7CiAgICBfdmFyaWFibGVJbmRleGVyLnBvcFNjb3BlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3dpdGNoU3RhdGVtZW50KFN3aXRjaFN0YXRlbWVudCBub2RlKSB7CiAgICBpZiAoX3N3aXRjaENhc2VJbmRleGVyID09IG51bGwpIHsKICAgICAgX3N3aXRjaENhc2VJbmRleGVyID0gbmV3IFN3aXRjaENhc2VJbmRleGVyKCk7CiAgICB9CiAgICBfc3dpdGNoQ2FzZUluZGV4ZXIuZW50ZXIobm9kZSk7CiAgICB3cml0ZUJ5dGUoVGFnLlN3aXRjaFN0YXRlbWVudCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOb2RlKG5vZGUuZXhwcmVzc2lvbik7CiAgICB3cml0ZVN3aXRjaENhc2VOb2RlTGlzdChub2RlLmNhc2VzKTsKICAgIF9zd2l0Y2hDYXNlSW5kZXhlci5leGl0KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN3aXRjaENhc2UoU3dpdGNoQ2FzZSBub2RlKSB7CiAgICAvLyBOb3RlOiB0aGVyZSBpcyBubyB0YWcgb24gU3dpdGNoQ2FzZS4KICAgIGludCBsZW5ndGggPSBub2RlLmV4cHJlc3Npb25zLmxlbmd0aDsKICAgIHdyaXRlVUludDMwKGxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIHdyaXRlT2Zmc2V0KG5vZGUuZXhwcmVzc2lvbk9mZnNldHNbaV0pOwogICAgICB3cml0ZU5vZGUobm9kZS5leHByZXNzaW9uc1tpXSk7CiAgICB9CiAgICB3cml0ZUJ5dGUobm9kZS5pc0RlZmF1bHQgPyAxIDogMCk7CiAgICB3cml0ZU5vZGUobm9kZS5ib2R5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb250aW51ZVN3aXRjaFN0YXRlbWVudChDb250aW51ZVN3aXRjaFN0YXRlbWVudCBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkNvbnRpbnVlU3dpdGNoU3RhdGVtZW50KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZVVJbnQzMChfc3dpdGNoQ2FzZUluZGV4ZXJbbm9kZS50YXJnZXRdKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJZlN0YXRlbWVudChJZlN0YXRlbWVudCBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLklmU3RhdGVtZW50KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5vZGUobm9kZS5jb25kaXRpb24pOwogICAgd3JpdGVOb2RlKG5vZGUudGhlbik7CiAgICB3cml0ZVN0YXRlbWVudE9yRW1wdHkobm9kZS5vdGhlcndpc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFJldHVyblN0YXRlbWVudChSZXR1cm5TdGF0ZW1lbnQgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5SZXR1cm5TdGF0ZW1lbnQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlT3B0aW9uYWxOb2RlKG5vZGUuZXhwcmVzc2lvbik7CiAgfQoKICBpbnQgX2VuY29kZVRyeUNhdGNoRmxhZ3MoYm9vbCBuZWVkc1N0YWNrVHJhY2UsIGJvb2wgaXNTeW50aGV0aWMpIHsKICAgIHJldHVybiAobmVlZHNTdGFja1RyYWNlID8gMSA6IDApIHwgKGlzU3ludGhldGljID8gMiA6IDApOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFRyeUNhdGNoKFRyeUNhdGNoIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuVHJ5Q2F0Y2gpOwogICAgd3JpdGVOb2RlKG5vZGUuYm9keSk7CiAgICBib29sIG5lZWRzU3RhY2tUcmFjZSA9IG5vZGUuY2F0Y2hlcy5hbnkoKENhdGNoIGMpID0+IGMuc3RhY2tUcmFjZSAhPSBudWxsKTsKICAgIHdyaXRlQnl0ZShfZW5jb2RlVHJ5Q2F0Y2hGbGFncyhuZWVkc1N0YWNrVHJhY2UsIG5vZGUuaXNTeW50aGV0aWMpKTsKICAgIHdyaXRlQ2F0Y2hOb2RlTGlzdChub2RlLmNhdGNoZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENhdGNoKENhdGNoIG5vZGUpIHsKICAgIC8vIE5vdGU6IHRoZXJlIGlzIG5vIHRhZyBvbiBDYXRjaC4KICAgIF92YXJpYWJsZUluZGV4ZXIgPz89IG5ldyBWYXJpYWJsZUluZGV4ZXIoKTsKICAgIF92YXJpYWJsZUluZGV4ZXIucHVzaFNjb3BlKCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOb2RlKG5vZGUuZ3VhcmQpOwogICAgd3JpdGVPcHRpb25hbFZhcmlhYmxlRGVjbGFyYXRpb24obm9kZS5leGNlcHRpb24pOwogICAgd3JpdGVPcHRpb25hbFZhcmlhYmxlRGVjbGFyYXRpb24obm9kZS5zdGFja1RyYWNlKTsKICAgIHdyaXRlTm9kZShub2RlLmJvZHkpOwogICAgX3ZhcmlhYmxlSW5kZXhlci5wb3BTY29wZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFRyeUZpbmFsbHkoVHJ5RmluYWxseSBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLlRyeUZpbmFsbHkpOwogICAgd3JpdGVOb2RlKG5vZGUuYm9keSk7CiAgICB3cml0ZU5vZGUobm9kZS5maW5hbGl6ZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFlpZWxkU3RhdGVtZW50KFlpZWxkU3RhdGVtZW50IG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuWWllbGRTdGF0ZW1lbnQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlQnl0ZShub2RlLmZsYWdzKTsKICAgIHdyaXRlTm9kZShub2RlLmV4cHJlc3Npb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24oVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLlZhcmlhYmxlRGVjbGFyYXRpb24pOwogICAgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUpOwogIH0KCiAgdm9pZCB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb24oVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICBpZiAoX21ldGFkYXRhU3Vic2VjdGlvbnMgIT0gbnVsbCkgewogICAgICBfd3JpdGVOb2RlTWV0YWRhdGEobm9kZSk7CiAgICB9CiAgICBub2RlLmJpbmFyeU9mZnNldE5vVGFnID0gZ2V0QnVmZmVyT2Zmc2V0KCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlRXF1YWxzT2Zmc2V0KTsKICAgIHdyaXRlQW5ub3RhdGlvbkxpc3Qobm9kZS5hbm5vdGF0aW9ucyk7CiAgICB3cml0ZUJ5dGUobm9kZS5mbGFncyk7CiAgICB3cml0ZVN0cmluZ1JlZmVyZW5jZShub2RlLm5hbWUgPz8gJycpOwogICAgd3JpdGVOb2RlKG5vZGUudHlwZSk7CiAgICB3cml0ZU9wdGlvbmFsTm9kZShub2RlLmluaXRpYWxpemVyKTsKICAgIC8vIERlY2xhcmUgdGhlIHZhcmlhYmxlIGFmdGVyIGl0cyBpbml0aWFsaXplci4gSXQgaXMgbm90IGluIHNjb3BlIGluIGl0cwogICAgLy8gb3duIGluaXRpYWxpemVyLgogICAgX3ZhcmlhYmxlSW5kZXhlciA/Pz0gbmV3IFZhcmlhYmxlSW5kZXhlcigpOwogICAgX3ZhcmlhYmxlSW5kZXhlci5kZWNsYXJlKG5vZGUpOwogIH0KCiAgdm9pZCB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gbm9kZXMpIHsKICAgIHdyaXRlTGlzdChub2Rlcywgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uKTsKICB9CgogIHZvaWQgd3JpdGVPcHRpb25hbFZhcmlhYmxlRGVjbGFyYXRpb24oVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICBpZiAobm9kZSA9PSBudWxsKSB7CiAgICAgIHdyaXRlQnl0ZShUYWcuTm90aGluZyk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUJ5dGUoVGFnLlNvbWV0aGluZyk7CiAgICAgIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbihub2RlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGdW5jdGlvbkRlY2xhcmF0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24gbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5GdW5jdGlvbkRlY2xhcmF0aW9uKTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb24obm9kZS52YXJpYWJsZSk7CiAgICB3cml0ZUZ1bmN0aW9uTm9kZShub2RlLmZ1bmN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCb3R0b21UeXBlKEJvdHRvbVR5cGUgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5Cb3R0b21UeXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnZhbGlkVHlwZShJbnZhbGlkVHlwZSBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkludmFsaWRUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREeW5hbWljVHlwZShEeW5hbWljVHlwZSBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkR5bmFtaWNUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRWb2lkVHlwZShWb2lkVHlwZSBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLlZvaWRUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgbm9kZSkgewogICAgaWYgKG5vZGUudHlwZUFyZ3VtZW50cy5pc0VtcHR5KSB7CiAgICAgIHdyaXRlQnl0ZShUYWcuU2ltcGxlSW50ZXJmYWNlVHlwZSk7CiAgICAgIHdyaXRlQnl0ZShub2RlLm51bGxhYmlsaXR5LmluZGV4KTsKICAgICAgd3JpdGVOb25OdWxsUmVmZXJlbmNlKG5vZGUuY2xhc3NOYW1lKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlQnl0ZShUYWcuSW50ZXJmYWNlVHlwZSk7CiAgICAgIHdyaXRlQnl0ZShub2RlLm51bGxhYmlsaXR5LmluZGV4KTsKICAgICAgd3JpdGVOb25OdWxsUmVmZXJlbmNlKG5vZGUuY2xhc3NOYW1lKTsKICAgICAgd3JpdGVOb2RlTGlzdChub2RlLnR5cGVBcmd1bWVudHMpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN1cGVydHlwZShTdXBlcnR5cGUgbm9kZSkgewogICAgLy8gV3JpdGluZyBudWxsYWJpbGl0eSBiZWxvdyBpcyBvbmx5IG5lY2Vzc2FyeSBiZWNhdXNlCiAgICAvLyBCaW5hcnlCdWlsZGVyLnJlYWRTdXBlcnR5cGUgcmVhZHMgdGhlIHN1cGVydHlwZSBhcyBhbiBJbnRlcmZhY2VUeXBlIGFuZAogICAgLy8gYnJlYWtzIGl0IGludG8gY29tcG9uZW50cyBhZnRlcndhcmRzLCBhbmQgcmVhZGluZyBhbiBJbnRlcmZhY2VUeXBlCiAgICAvLyByZXF1aXJlcyB0aGUgbnVsbGFiaWxpdHkgYnl0ZS4KICAgIGlmIChub2RlLnR5cGVBcmd1bWVudHMuaXNFbXB0eSkgewogICAgICB3cml0ZUJ5dGUoVGFnLlNpbXBsZUludGVyZmFjZVR5cGUpOwogICAgICB3cml0ZUJ5dGUoTnVsbGFiaWxpdHkubm9uTnVsbGFibGUuaW5kZXgpOwogICAgICB3cml0ZU5vbk51bGxSZWZlcmVuY2Uobm9kZS5jbGFzc05hbWUpOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVCeXRlKFRhZy5JbnRlcmZhY2VUeXBlKTsKICAgICAgd3JpdGVCeXRlKE51bGxhYmlsaXR5Lm5vbk51bGxhYmxlLmluZGV4KTsKICAgICAgd3JpdGVOb25OdWxsUmVmZXJlbmNlKG5vZGUuY2xhc3NOYW1lKTsKICAgICAgd3JpdGVOb2RlTGlzdChub2RlLnR5cGVBcmd1bWVudHMpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZ1bmN0aW9uVHlwZShGdW5jdGlvblR5cGUgbm9kZSkgewogICAgaWYgKG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA9PSBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCAmJgogICAgICAgIG5vZGUudHlwZVBhcmFtZXRlcnMuaXNFbXB0eSAmJgogICAgICAgIG5vZGUubmFtZWRQYXJhbWV0ZXJzLmlzRW1wdHkgJiYKICAgICAgICBub2RlLnR5cGVkZWZUeXBlID09IG51bGwpIHsKICAgICAgd3JpdGVCeXRlKFRhZy5TaW1wbGVGdW5jdGlvblR5cGUpOwogICAgICB3cml0ZUJ5dGUobm9kZS5udWxsYWJpbGl0eS5pbmRleCk7CiAgICAgIHdyaXRlTm9kZUxpc3Qobm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycyk7CiAgICAgIHdyaXRlTm9kZShub2RlLnJldHVyblR5cGUpOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVCeXRlKFRhZy5GdW5jdGlvblR5cGUpOwogICAgICB3cml0ZUJ5dGUobm9kZS5udWxsYWJpbGl0eS5pbmRleCk7CiAgICAgIGVudGVyU2NvcGUodHlwZVBhcmFtZXRlcnM6IG5vZGUudHlwZVBhcmFtZXRlcnMpOwogICAgICB3cml0ZU5vZGVMaXN0KG5vZGUudHlwZVBhcmFtZXRlcnMpOwogICAgICB3cml0ZVVJbnQzMChub2RlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpOwogICAgICB3cml0ZVVJbnQzMCgKICAgICAgICAgIG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoICsgbm9kZS5uYW1lZFBhcmFtZXRlcnMubGVuZ3RoKTsKICAgICAgd3JpdGVOb2RlTGlzdChub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzKTsKICAgICAgd3JpdGVOb2RlTGlzdChub2RlLm5hbWVkUGFyYW1ldGVycyk7CiAgICAgIHdyaXRlT3B0aW9uYWxOb2RlKG5vZGUudHlwZWRlZlR5cGUpOwogICAgICB3cml0ZU5vZGUobm9kZS5yZXR1cm5UeXBlKTsKICAgICAgbGVhdmVTY29wZSh0eXBlUGFyYW1ldGVyczogbm9kZS50eXBlUGFyYW1ldGVycyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TmFtZWRUeXBlKE5hbWVkVHlwZSBub2RlKSB7CiAgICB3cml0ZVN0cmluZ1JlZmVyZW5jZShub2RlLm5hbWUpOwogICAgd3JpdGVOb2RlKG5vZGUudHlwZSk7CiAgICBpbnQgZmxhZ3MgPSAobm9kZS5pc1JlcXVpcmVkID8gTmFtZWRUeXBlLkZsYWdSZXF1aXJlZE5hbWVkVHlwZSA6IDApOwogICAgd3JpdGVCeXRlKGZsYWdzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlUGFyYW1ldGVyVHlwZShUeXBlUGFyYW1ldGVyVHlwZSBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLlR5cGVQYXJhbWV0ZXJUeXBlKTsKICAgIHdyaXRlQnl0ZShub2RlLmRlY2xhcmVkTnVsbGFiaWxpdHkuaW5kZXgpOwogICAgd3JpdGVVSW50MzAoX3R5cGVQYXJhbWV0ZXJJbmRleGVyW25vZGUucGFyYW1ldGVyXSk7CiAgICB3cml0ZU9wdGlvbmFsTm9kZShub2RlLnByb21vdGVkQm91bmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVkZWZUeXBlKFR5cGVkZWZUeXBlIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuVHlwZWRlZlR5cGUpOwogICAgd3JpdGVCeXRlKG5vZGUubnVsbGFiaWxpdHkuaW5kZXgpOwogICAgd3JpdGVOdWxsQWxsb3dlZFJlZmVyZW5jZShub2RlLnR5cGVkZWZSZWZlcmVuY2UpOwogICAgd3JpdGVOb2RlTGlzdChub2RlLnR5cGVBcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVQYXJhbWV0ZXIoVHlwZVBhcmFtZXRlciBub2RlKSB7CiAgICB3cml0ZUJ5dGUobm9kZS5mbGFncyk7CiAgICB3cml0ZUFubm90YXRpb25MaXN0KG5vZGUuYW5ub3RhdGlvbnMpOwogICAgd3JpdGVTdHJpbmdSZWZlcmVuY2Uobm9kZS5uYW1lID8/ICcnKTsKICAgIHdyaXRlTm9kZShub2RlLmJvdW5kKTsKICAgIHdyaXRlT3B0aW9uYWxOb2RlKG5vZGUuZGVmYXVsdFR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEV4dGVuc2lvbihFeHRlbnNpb24gbm9kZSkgewogICAgaWYgKG5vZGUuY2Fub25pY2FsTmFtZSA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCdNaXNzaW5nIGNhbm9uaWNhbCBuYW1lIGZvciAkbm9kZScpOwogICAgfQogICAgd3JpdGVCeXRlKFRhZy5FeHRlbnNpb24pOwogICAgd3JpdGVOb25OdWxsQ2Fub25pY2FsTmFtZVJlZmVyZW5jZShnZXRDYW5vbmljYWxOYW1lT2ZFeHRlbnNpb24obm9kZSkpOwogICAgd3JpdGVTdHJpbmdSZWZlcmVuY2Uobm9kZS5uYW1lID8/ICcnKTsKICAgIHdyaXRlVXJpUmVmZXJlbmNlKG5vZGUuZmlsZVVyaSk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwoKICAgIGVudGVyU2NvcGUodHlwZVBhcmFtZXRlcnM6IG5vZGUudHlwZVBhcmFtZXRlcnMpOwogICAgd3JpdGVOb2RlTGlzdChub2RlLnR5cGVQYXJhbWV0ZXJzKTsKICAgIHdyaXRlRGFydFR5cGUobm9kZS5vblR5cGUpOwogICAgbGVhdmVTY29wZSh0eXBlUGFyYW1ldGVyczogbm9kZS50eXBlUGFyYW1ldGVycyk7CgogICAgZmluYWwgaW50IGxlbiA9IG5vZGUubWVtYmVycy5sZW5ndGg7CiAgICB3cml0ZVVJbnQzMChsZW4pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICBmaW5hbCBFeHRlbnNpb25NZW1iZXJEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBub2RlLm1lbWJlcnNbaV07CiAgICAgIHdyaXRlTmFtZShkZXNjcmlwdG9yLm5hbWUpOwogICAgICB3cml0ZUJ5dGUoZGVzY3JpcHRvci5raW5kLmluZGV4KTsKICAgICAgd3JpdGVCeXRlKGRlc2NyaXB0b3IuZmxhZ3MpOwogICAgICB3cml0ZU5vbk51bGxDYW5vbmljYWxOYW1lUmVmZXJlbmNlKGRlc2NyaXB0b3IubWVtYmVyLmNhbm9uaWNhbE5hbWUpOwogICAgfQogIH0KCiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIC8vIFRoZXNlIGFyZSBub2RlcyB0aGF0IGFyZSBuZXZlciBzZXJpYWxpemVkIGRpcmVjdGx5LiAgUmVhY2hpbmcgb25lCiAgLy8gZHVyaW5nIHNlcmlhbGl6YXRpb24gaXMgYW4gZXJyb3IuCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWZhdWx0Tm9kZShOb2RlIG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIGdlbmVyaWMgTm9kZXMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZGVmYXVsdENvbnN0YW50KENvbnN0YW50IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIGdlbmVyaWMgQ29uc3RhbnRzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGRlZmF1bHRCYXNpY0xpdGVyYWwoQmFzaWNMaXRlcmFsIG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIGdlbmVyaWMgQmFzaWNMaXRlcmFscycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWZhdWx0Q29uc3RhbnRSZWZlcmVuY2UoQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgZ2VuZXJpYyBDb25zdGFudCByZWZlcmVuY2VzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGRlZmF1bHREYXJ0VHlwZShEYXJ0VHlwZSBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBnZW5lcmljIERhcnRUeXBlcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWZhdWx0RXhwcmVzc2lvbihFeHByZXNzaW9uIG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIGdlbmVyaWMgRXhwcmVzc2lvbnMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZGVmYXVsdEluaXRpYWxpemVyKEluaXRpYWxpemVyIG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIGdlbmVyaWMgSW5pdGlhbGl6ZXJzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGRlZmF1bHRNZW1iZXIoTWVtYmVyIG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIGdlbmVyaWMgTWVtYmVycycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWZhdWx0TWVtYmVyUmVmZXJlbmNlKE1lbWJlciBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBnZW5lcmljIE1lbWJlciByZWZlcmVuY2VzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGRlZmF1bHRTdGF0ZW1lbnQoU3RhdGVtZW50IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIGdlbmVyaWMgU3RhdGVtZW50cycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWZhdWx0VHJlZU5vZGUoVHJlZU5vZGUgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgZ2VuZXJpYyBUcmVlTm9kZXMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCb29sQ29uc3RhbnQoQm9vbENvbnN0YW50IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIEJvb2xDb25zdGFudHMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCb29sQ29uc3RhbnRSZWZlcmVuY2UoQm9vbENvbnN0YW50IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIEJvb2xDb25zdGFudCByZWZlcmVuY2VzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q2xhc3NSZWZlcmVuY2UoQ2xhc3Mgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgQ2xhc3MgcmVmZXJlbmNlcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnN0cnVjdG9yUmVmZXJlbmNlKENvbnN0cnVjdG9yIG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIENvbnN0cnVjdG9yIHJlZmVyZW5jZXMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREb3VibGVDb25zdGFudChEb3VibGVDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBEb3VibGVDb25zdGFudHMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREb3VibGVDb25zdGFudFJlZmVyZW5jZShEb3VibGVDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBEb3VibGVDb25zdGFudCByZWZlcmVuY2VzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RmllbGRSZWZlcmVuY2UoRmllbGQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgRmllbGQgcmVmZXJlbmNlcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEluc3RhbmNlQ29uc3RhbnQoSW5zdGFuY2VDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBJbnN0YW5jZUNvbnN0YW50cycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEluc3RhbmNlQ29uc3RhbnRSZWZlcmVuY2UoSW5zdGFuY2VDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBJbnN0YW5jZUNvbnN0YW50IHJlZmVyZW5jZXMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRDb25zdGFudChJbnRDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBJbnRDb25zdGFudHMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRDb25zdGFudFJlZmVyZW5jZShJbnRDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBJbnRDb25zdGFudCByZWZlcmVuY2VzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGlicmFyeURlcGVuZGVuY3koTGlicmFyeURlcGVuZGVuY3kgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgTGlicmFyeURlcGVuZGVuY2llcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpYnJhcnlQYXJ0KExpYnJhcnlQYXJ0IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIExpYnJhcnlQYXJ0cycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpc3RDb25zdGFudChMaXN0Q29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgTGlzdENvbnN0YW50cycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpc3RDb25zdGFudFJlZmVyZW5jZShMaXN0Q29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgTGlzdENvbnN0YW50IHJlZmVyZW5jZXMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTZXRDb25zdGFudChTZXRDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBTZXRDb25zdGFudHMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTZXRDb25zdGFudFJlZmVyZW5jZShTZXRDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBTZXRDb25zdGFudCByZWZlcmVuY2VzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TWFwQ29uc3RhbnQoTWFwQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgTWFwQ29uc3RhbnRzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TWFwQ29uc3RhbnRSZWZlcmVuY2UoTWFwQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgTWFwQ29uc3RhbnQgcmVmZXJlbmNlcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE5hbWUoTmFtZSBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBOYW1lcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE51bGxDb25zdGFudChOdWxsQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgTnVsbENvbnN0YW50cycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE51bGxDb25zdGFudFJlZmVyZW5jZShOdWxsQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgTnVsbENvbnN0YW50IHJlZmVyZW5jZXMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQcm9jZWR1cmVSZWZlcmVuY2UoUHJvY2VkdXJlIG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIFByb2NlZHVyZSByZWZlcmVuY2VzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29tcG9uZW50KENvbXBvbmVudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBDb21wb25lbnRzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JSZWZlcmVuY2UoCiAgICAgIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yIG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICdzZXJpYWxpemF0aW9uIG9mIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yIHJlZmVyZW5jZXMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdHJpbmdDb25zdGFudChTdHJpbmdDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBTdHJpbmdDb25zdGFudHMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdHJpbmdDb25zdGFudFJlZmVyZW5jZShTdHJpbmdDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBTdHJpbmdDb25zdGFudCByZWZlcmVuY2VzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3ltYm9sQ29uc3RhbnQoU3ltYm9sQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgU3ltYm9sQ29uc3RhbnRzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3ltYm9sQ29uc3RhbnRSZWZlcmVuY2UoU3ltYm9sQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgU3ltYm9sQ29uc3RhbnQgcmVmZXJlbmNlcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQoUGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAnc2VyaWFsaXphdGlvbiBvZiBQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50cyAnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50UmVmZXJlbmNlKAogICAgICBQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICdzZXJpYWxpemF0aW9uIG9mIFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQgcmVmZXJlbmNlcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFRlYXJPZmZDb25zdGFudChUZWFyT2ZmQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgVGVhck9mZkNvbnN0YW50cyAnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUZWFyT2ZmQ29uc3RhbnRSZWZlcmVuY2UoVGVhck9mZkNvbnN0YW50IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIFRlYXJPZmZDb25zdGFudCByZWZlcmVuY2VzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZUxpdGVyYWxDb25zdGFudChUeXBlTGl0ZXJhbENvbnN0YW50IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIFR5cGVMaXRlcmFsQ29uc3RhbnRzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZUxpdGVyYWxDb25zdGFudFJlZmVyZW5jZShUeXBlTGl0ZXJhbENvbnN0YW50IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICdzZXJpYWxpemF0aW9uIG9mIFR5cGVMaXRlcmFsQ29uc3RhbnQgcmVmZXJlbmNlcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVkZWZSZWZlcmVuY2UoVHlwZWRlZiBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBUeXBlZGVmIHJlZmVyZW5jZXMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRVbmV2YWx1YXRlZENvbnN0YW50KFVuZXZhbHVhdGVkQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgVW5ldmFsdWF0ZWRDb25zdGFudHMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRVbmV2YWx1YXRlZENvbnN0YW50UmVmZXJlbmNlKFVuZXZhbHVhdGVkQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgJ3NlcmlhbGl6YXRpb24gb2YgVW5ldmFsdWF0ZWRDb25zdGFudCByZWZlcmVuY2VzJyk7CiAgfQp9Cgp0eXBlZGVmIGJvb2wgTGlicmFyeUZpbHRlcihMaWJyYXJ5IF8pOwoKY2xhc3MgVmFyaWFibGVJbmRleGVyIHsKICBNYXA8VmFyaWFibGVEZWNsYXJhdGlvbiwgaW50PiBpbmRleDsKICBMaXN0PGludD4gc2NvcGVzOwogIGludCBzdGFja0hlaWdodCA9IDA7CgogIHZvaWQgZGVjbGFyZShWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIGluZGV4ID8/PSA8VmFyaWFibGVEZWNsYXJhdGlvbiwgaW50Pnt9OwogICAgaW5kZXhbbm9kZV0gPSBzdGFja0hlaWdodCsrOwogIH0KCiAgdm9pZCBwdXNoU2NvcGUoKSB7CiAgICBzY29wZXMgPz89IG5ldyBMaXN0PGludD4oKTsKICAgIHNjb3Blcy5hZGQoc3RhY2tIZWlnaHQpOwogIH0KCiAgdm9pZCBwb3BTY29wZSgpIHsKICAgIHN0YWNrSGVpZ2h0ID0gc2NvcGVzLnJlbW92ZUxhc3QoKTsKICB9CgogIHZvaWQgcmVzdG9yZVNjb3BlKGludCBudW1iZXJPZlZhcmlhYmxlcykgewogICAgc3RhY2tIZWlnaHQgKz0gbnVtYmVyT2ZWYXJpYWJsZXM7CiAgfQoKICBpbnQgb3BlcmF0b3IgW10oVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICByZXR1cm4gaW5kZXggPT0gbnVsbCA/IG51bGwgOiBpbmRleFtub2RlXTsKICB9Cn0KCmNsYXNzIExhYmVsSW5kZXhlciB7CiAgZmluYWwgTWFwPExhYmVsZWRTdGF0ZW1lbnQsIGludD4gaW5kZXggPSA8TGFiZWxlZFN0YXRlbWVudCwgaW50Pnt9OwogIGludCBzdGFja0hlaWdodCA9IDA7CgogIHZvaWQgZW50ZXIoTGFiZWxlZFN0YXRlbWVudCBub2RlKSB7CiAgICBpbmRleFtub2RlXSA9IHN0YWNrSGVpZ2h0Kys7CiAgfQoKICB2b2lkIGV4aXQoKSB7CiAgICAtLXN0YWNrSGVpZ2h0OwogIH0KCiAgaW50IG9wZXJhdG9yIFtdKExhYmVsZWRTdGF0ZW1lbnQgbm9kZSkgPT4gaW5kZXhbbm9kZV07Cn0KCmNsYXNzIFN3aXRjaENhc2VJbmRleGVyIHsKICBmaW5hbCBNYXA8U3dpdGNoQ2FzZSwgaW50PiBpbmRleCA9IDxTd2l0Y2hDYXNlLCBpbnQ+e307CiAgaW50IHN0YWNrSGVpZ2h0ID0gMDsKCiAgdm9pZCBlbnRlcihTd2l0Y2hTdGF0ZW1lbnQgbm9kZSkgewogICAgZm9yIChTd2l0Y2hDYXNlIGNhc2VOb2RlIGluIG5vZGUuY2FzZXMpIHsKICAgICAgaW5kZXhbY2FzZU5vZGVdID0gc3RhY2tIZWlnaHQrKzsKICAgIH0KICB9CgogIHZvaWQgZXhpdChTd2l0Y2hTdGF0ZW1lbnQgbm9kZSkgewogICAgc3RhY2tIZWlnaHQgLT0gbm9kZS5jYXNlcy5sZW5ndGg7CiAgfQoKICBpbnQgb3BlcmF0b3IgW10oU3dpdGNoQ2FzZSBub2RlKSA9PiBpbmRleFtub2RlXTsKfQoKY2xhc3MgQ29uc3RhbnRJbmRleGVyIGV4dGVuZHMgUmVjdXJzaXZlVmlzaXRvciB7CiAgZmluYWwgU3RyaW5nSW5kZXhlciBzdHJpbmdJbmRleGVyOwoKICBmaW5hbCBMaXN0PENvbnN0YW50PiBlbnRyaWVzID0gPENvbnN0YW50PltdOwogIGZpbmFsIE1hcDxDb25zdGFudCwgaW50PiBvZmZzZXRzID0gPENvbnN0YW50LCBpbnQ+e307CiAgaW50IG5leHRPZmZzZXQgPSAwOwoKICBmaW5hbCBCaW5hcnlQcmludGVyIF9wcmludGVyOwoKICBDb25zdGFudEluZGV4ZXIodGhpcy5zdHJpbmdJbmRleGVyLCB0aGlzLl9wcmludGVyKTsKCiAgaW50IHB1dChDb25zdGFudCBjb25zdGFudCkgewogICAgZmluYWwgaW50IG9sZE9mZnNldCA9IG9mZnNldHNbY29uc3RhbnRdOwogICAgaWYgKG9sZE9mZnNldCAhPSBudWxsKSByZXR1cm4gb2xkT2Zmc2V0OwoKICAgIC8vIFRyYXZlcnNlIERBRyBpbiBwb3N0LW9yZGVyIHRvIGVuc3VyZSBjaGlsZHJlbiBoYXZlIHRoZWlyIG9mZnNldHMgYXNzaWduZWQKICAgIC8vIGJlZm9yZSB0aGUgcGFyZW50LgogICAgY29uc3RhbnQudmlzaXRDaGlsZHJlbih0aGlzKTsKCiAgICBpZiAoY29uc3RhbnQgaXMgU3RyaW5nQ29uc3RhbnQpIHsKICAgICAgc3RyaW5nSW5kZXhlci5wdXQoY29uc3RhbnQudmFsdWUpOwogICAgfSBlbHNlIGlmIChjb25zdGFudCBpcyBTeW1ib2xDb25zdGFudCkgewogICAgICBzdHJpbmdJbmRleGVyLnB1dChjb25zdGFudC5uYW1lKTsKICAgIH0gZWxzZSBpZiAoY29uc3RhbnQgaXMgRG91YmxlQ29uc3RhbnQpIHsKICAgICAgc3RyaW5nSW5kZXhlci5wdXQoJyR7Y29uc3RhbnQudmFsdWV9Jyk7CiAgICB9IGVsc2UgaWYgKGNvbnN0YW50IGlzIEludENvbnN0YW50KSB7CiAgICAgIGZpbmFsIGludCB2YWx1ZSA9IGNvbnN0YW50LnZhbHVlOwogICAgICBpZiAoKHZhbHVlLmFicygpID4+IDMwKSAhPSAwKSB7CiAgICAgICAgc3RyaW5nSW5kZXhlci5wdXQoJyR2YWx1ZScpOwogICAgICB9CiAgICB9CgogICAgZmluYWwgaW50IG5ld09mZnNldCA9IG5leHRPZmZzZXQ7CiAgICBlbnRyaWVzLmFkZChjb25zdGFudCk7CiAgICBuZXh0T2Zmc2V0ICs9IF9wcmludGVyLndyaXRlQ29uc3RhbnRUYWJsZUVudHJ5KGNvbnN0YW50KTsKICAgIHJldHVybiBvZmZzZXRzW2NvbnN0YW50XSA9IG5ld09mZnNldDsKICB9CgogIGRlZmF1bHRDb25zdGFudFJlZmVyZW5jZShDb25zdGFudCBub2RlKSB7CiAgICBwdXQobm9kZSk7CiAgfQoKICBpbnQgb3BlcmF0b3IgW10oQ29uc3RhbnQgbm9kZSkgPT4gb2Zmc2V0c1tub2RlXTsKfQoKY2xhc3MgVHlwZVBhcmFtZXRlckluZGV4ZXIgewogIGZpbmFsIE1hcDxUeXBlUGFyYW1ldGVyLCBpbnQ+IGluZGV4ID0gPFR5cGVQYXJhbWV0ZXIsIGludD57fTsKICBpbnQgc3RhY2tIZWlnaHQgPSAwOwoKICB2b2lkIGVudGVyKExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKICAgICAgVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIgPSB0eXBlUGFyYW1ldGVyc1tpXTsKICAgICAgaW5kZXhbcGFyYW1ldGVyXSA9IHN0YWNrSGVpZ2h0OwogICAgICArK3N0YWNrSGVpZ2h0OwogICAgfQogIH0KCiAgdm9pZCBleGl0KExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMpIHsKICAgIHN0YWNrSGVpZ2h0IC09IHR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKICAgICAgaW5kZXgucmVtb3ZlKHR5cGVQYXJhbWV0ZXJzW2ldKTsKICAgIH0KICB9CgogIGludCBvcGVyYXRvciBbXShUeXBlUGFyYW1ldGVyIHBhcmFtZXRlcikgPT4KICAgICAgaW5kZXhbcGFyYW1ldGVyXSA/PwogICAgICAodGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJ1R5cGUgcGFyYW1ldGVyICRwYXJhbWV0ZXIgaXMgbm90IGluZGV4ZWQnKSk7Cn0KCmNsYXNzIFN0cmluZ0luZGV4ZXIgewogIC8vIE5vdGUgdGhhdCB0aGUgaXRlcmF0aW9uIG9yZGVyIGlzIGltcG9ydGFudC4KICBmaW5hbCBNYXA8U3RyaW5nLCBpbnQ+IGluZGV4ID0gbmV3IE1hcDxTdHJpbmcsIGludD4oKTsKCiAgU3RyaW5nSW5kZXhlcigpIHsKICAgIHB1dCgnJyk7CiAgfQoKICBpbnQgcHV0KFN0cmluZyBzdHJpbmcpIHsKICAgIGludCByZXN1bHQgPSBpbmRleFtzdHJpbmddOwogICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CiAgICAgIHJlc3VsdCA9IGluZGV4Lmxlbmd0aDsKICAgICAgaW5kZXhbc3RyaW5nXSA9IHJlc3VsdDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBpbnQgb3BlcmF0b3IgW10oU3RyaW5nIHN0cmluZykgPT4gaW5kZXhbc3RyaW5nXTsKfQoKY2xhc3MgVXJpSW5kZXhlciB7CiAgLy8gTm90ZSB0aGF0IHRoZSBpdGVyYXRpb24gb3JkZXIgaXMgaW1wb3J0YW50LgogIGZpbmFsIE1hcDxVcmksIGludD4gaW5kZXggPSBuZXcgTWFwPFVyaSwgaW50PigpOwoKICBVcmlJbmRleGVyKCkgewogICAgcHV0KG51bGwpOwogIH0KCiAgaW50IHB1dChVcmkgdXJpKSB7CiAgICBpbnQgcmVzdWx0ID0gaW5kZXhbdXJpXTsKICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgewogICAgICByZXN1bHQgPSBpbmRleC5sZW5ndGg7CiAgICAgIGluZGV4W3VyaV0gPSByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQoKLy8vIFB1dHMgYSBidWZmZXIgaW4gZnJvbnQgb2YgYSBbU2luazxMaXN0PGludD4+XS4KY2xhc3MgQnVmZmVyZWRTaW5rIHsKICBzdGF0aWMgY29uc3QgaW50IFNJWkUgPSAxMDAwMDA7CiAgc3RhdGljIGNvbnN0IGludCBTQUZFX1NJWkUgPSBTSVpFIC0gNTsKICBzdGF0aWMgY29uc3QgaW50IFNNQUxMID0gMTAwMDA7CiAgZmluYWwgU2luazxMaXN0PGludD4+IF9zaW5rOwogIFVpbnQ4TGlzdCBfYnVmZmVyID0gbmV3IFVpbnQ4TGlzdChTSVpFKTsKICBpbnQgbGVuZ3RoID0gMDsKICBpbnQgZmx1c2hlZExlbmd0aCA9IDA7CgogIEZsb2F0NjRMaXN0IF9kb3VibGVCdWZmZXIgPSBuZXcgRmxvYXQ2NExpc3QoMSk7CiAgVWludDhMaXN0IF9kb3VibGVCdWZmZXJVaW50ODsKCiAgaW50IGdldCBvZmZzZXQgPT4gbGVuZ3RoICsgZmx1c2hlZExlbmd0aDsKCiAgQnVmZmVyZWRTaW5rKHRoaXMuX3NpbmspOwoKICB2b2lkIGFkZERvdWJsZShkb3VibGUgZCkgewogICAgX2RvdWJsZUJ1ZmZlclVpbnQ4ID8/PSBfZG91YmxlQnVmZmVyLmJ1ZmZlci5hc1VpbnQ4TGlzdCgpOwogICAgX2RvdWJsZUJ1ZmZlclswXSA9IGQ7CiAgICBhZGRCeXRlNChfZG91YmxlQnVmZmVyVWludDhbMF0sIF9kb3VibGVCdWZmZXJVaW50OFsxXSwKICAgICAgICBfZG91YmxlQnVmZmVyVWludDhbMl0sIF9kb3VibGVCdWZmZXJVaW50OFszXSk7CiAgICBhZGRCeXRlNChfZG91YmxlQnVmZmVyVWludDhbNF0sIF9kb3VibGVCdWZmZXJVaW50OFs1XSwKICAgICAgICBfZG91YmxlQnVmZmVyVWludDhbNl0sIF9kb3VibGVCdWZmZXJVaW50OFs3XSk7CiAgfQoKICB2b2lkIGFkZEJ5dGUoaW50IGJ5dGUpIHsKICAgIF9idWZmZXJbbGVuZ3RoKytdID0gYnl0ZTsKICAgIGlmIChsZW5ndGggPT0gU0laRSkgewogICAgICBfc2luay5hZGQoX2J1ZmZlcik7CiAgICAgIF9idWZmZXIgPSBuZXcgVWludDhMaXN0KFNJWkUpOwogICAgICBsZW5ndGggPSAwOwogICAgICBmbHVzaGVkTGVuZ3RoICs9IFNJWkU7CiAgICB9CiAgfQoKICB2b2lkIGFkZEJ5dGUyKGludCBieXRlMSwgaW50IGJ5dGUyKSB7CiAgICBpZiAobGVuZ3RoIDwgU0FGRV9TSVpFKSB7CiAgICAgIF9idWZmZXJbbGVuZ3RoKytdID0gYnl0ZTE7CiAgICAgIF9idWZmZXJbbGVuZ3RoKytdID0gYnl0ZTI7CiAgICB9IGVsc2UgewogICAgICBhZGRCeXRlKGJ5dGUxKTsKICAgICAgYWRkQnl0ZShieXRlMik7CiAgICB9CiAgfQoKICB2b2lkIGFkZEJ5dGU0KGludCBieXRlMSwgaW50IGJ5dGUyLCBpbnQgYnl0ZTMsIGludCBieXRlNCkgewogICAgaWYgKGxlbmd0aCA8IFNBRkVfU0laRSkgewogICAgICBfYnVmZmVyW2xlbmd0aCsrXSA9IGJ5dGUxOwogICAgICBfYnVmZmVyW2xlbmd0aCsrXSA9IGJ5dGUyOwogICAgICBfYnVmZmVyW2xlbmd0aCsrXSA9IGJ5dGUzOwogICAgICBfYnVmZmVyW2xlbmd0aCsrXSA9IGJ5dGU0OwogICAgfSBlbHNlIHsKICAgICAgYWRkQnl0ZShieXRlMSk7CiAgICAgIGFkZEJ5dGUoYnl0ZTIpOwogICAgICBhZGRCeXRlKGJ5dGUzKTsKICAgICAgYWRkQnl0ZShieXRlNCk7CiAgICB9CiAgfQoKICB2b2lkIGFkZEJ5dGVzKExpc3Q8aW50PiBieXRlcykgewogICAgLy8gQXZvaWQgY29weWluZyBhIGxhcmdlIGJ1ZmZlciBpbnRvIHRoZSBhbm90aGVyIGxhcmdlIGJ1ZmZlci4gQWxzbywgaWYKICAgIC8vIHRoZSBieXRlcyBidWZmZXIgaXMgdG9vIGxhcmdlIHRvIGZpdCBpbiBvdXIgb3duIGJ1ZmZlciwganVzdCBlbWl0IGJvdGguCiAgICBpZiAobGVuZ3RoICsgYnl0ZXMubGVuZ3RoIDwgU0laRSAmJgogICAgICAgIChieXRlcy5sZW5ndGggPCBTTUFMTCB8fCBsZW5ndGggPCBTTUFMTCkpIHsKICAgICAgX2J1ZmZlci5zZXRSYW5nZShsZW5ndGgsIGxlbmd0aCArIGJ5dGVzLmxlbmd0aCwgYnl0ZXMpOwogICAgICBsZW5ndGggKz0gYnl0ZXMubGVuZ3RoOwogICAgfSBlbHNlIGlmIChieXRlcy5sZW5ndGggPCBTTUFMTCkgewogICAgICAvLyBGbHVzaCBhcyBtdWNoIGFzIHdlIGNhbiBpbiB0aGUgY3VycmVudCBidWZmZXIuCiAgICAgIF9idWZmZXIuc2V0UmFuZ2UobGVuZ3RoLCBTSVpFLCBieXRlcyk7CiAgICAgIF9zaW5rLmFkZChfYnVmZmVyKTsKICAgICAgLy8gQ29weSBvdmVyIHRoZSByZW1haW5kZXIgaW50byBhIG5ldyBidWZmZXIuIEl0IGlzIGd1YXJhbnRlZWQgdG8gZml0CiAgICAgIC8vIGJlY2F1c2UgdGhlIGlucHV0IGJ5dGUgYXJyYXkgaXMgc21hbGwuCiAgICAgIGludCBhbHJlYWR5RW1pdHRlZCA9IFNJWkUgLSBsZW5ndGg7CiAgICAgIGludCByZW1haW5kZXIgPSBieXRlcy5sZW5ndGggLSBhbHJlYWR5RW1pdHRlZDsKICAgICAgX2J1ZmZlciA9IG5ldyBVaW50OExpc3QoU0laRSk7CiAgICAgIF9idWZmZXIuc2V0UmFuZ2UoMCwgcmVtYWluZGVyLCBieXRlcywgYWxyZWFkeUVtaXR0ZWQpOwogICAgICBsZW5ndGggPSByZW1haW5kZXI7CiAgICAgIGZsdXNoZWRMZW5ndGggKz0gU0laRTsKICAgIH0gZWxzZSB7CiAgICAgIGZsdXNoKCk7CiAgICAgIF9zaW5rLmFkZChieXRlcyk7CiAgICAgIGZsdXNoZWRMZW5ndGggKz0gYnl0ZXMubGVuZ3RoOwogICAgfQogIH0KCiAgdm9pZCBmbHVzaCgpIHsKICAgIF9zaW5rLmFkZChfYnVmZmVyLnN1Ymxpc3QoMCwgbGVuZ3RoKSk7CiAgICBfYnVmZmVyID0gbmV3IFVpbnQ4TGlzdChTSVpFKTsKICAgIGZsdXNoZWRMZW5ndGggKz0gbGVuZ3RoOwogICAgbGVuZ3RoID0gMDsKICB9CgogIHZvaWQgZmx1c2hBbmREZXN0cm95KCkgewogICAgX3NpbmsuYWRkKF9idWZmZXIuc3VibGlzdCgwLCBsZW5ndGgpKTsKICB9Cn0KCi8vLyBOb24tZW1wdHkgbWV0YWRhdGEgc3Vic2VjdGlvbi4KY2xhc3MgX01ldGFkYXRhU3Vic2VjdGlvbiB7CiAgZmluYWwgTWV0YWRhdGFSZXBvc2l0b3J5PE9iamVjdD4gcmVwb3NpdG9yeTsKCiAgLy8vIExpc3Qgb2YgKG5vZGVPZmZzZXQsIG1ldGFkYXRhT2Zmc2V0KSBwYWlycy4KICAvLy8gR3JhZHVhbGx5IGZpbGxlZCBieSB0aGUgd3JpdGVyIGFzIHdyaXRpbmcgcHJvZ3Jlc3Nlcywgd2hpY2ggYnkKICAvLy8gY29uc3RydWN0aW9uIGd1YXJhbnRlZXMgdGhhdCBwYWlycyBhcmUgc29ydGVkIGJ5IGZpcnN0IGNvbXBvbmVudAogIC8vLyAobm9kZU9mZnNldCkgaW4gYXNjZW5kaW5nIG9yZGVyLgogIGZpbmFsIExpc3Q8aW50PiBtZXRhZGF0YU1hcHBpbmcgPSA8aW50PltdOwoKICBfTWV0YWRhdGFTdWJzZWN0aW9uKHRoaXMucmVwb3NpdG9yeSk7Cn0KCi8vLyBBIFtTaW5rXSB0aGF0IGRpcmVjdGx5IHdyaXRlcyBkYXRhIGludG8gYSBieXRlIGJ1aWxkZXIuCi8vIFRPRE8oZGFydGJ1Zy5jb20vMjgzMTYpOiBSZW1vdmUgdGhpcyB3cmFwcGVyIGNsYXNzLgpjbGFzcyBCeXRlc1NpbmsgaW1wbGVtZW50cyBTaW5rPExpc3Q8aW50Pj4gewogIGZpbmFsIEJ5dGVzQnVpbGRlciBidWlsZGVyID0gbmV3IEJ5dGVzQnVpbGRlcigpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZChMaXN0PGludD4gZGF0YSkgewogICAgYnVpbGRlci5hZGQoZGF0YSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsb3NlKCkgewogICAgLy8gTm90aGluZyB0byBkby4KICB9Cn0KCmNsYXNzIE5vdFF1aXRlU3RyaW5nIHsKICAvKioKICAgKiBXcml0ZSBbc291cmNlXSBzdHJpbmcgaW50byBbdGFyZ2V0XSBzdGFydGluZyBhdCBpbmRleCBbaW5kZXhdLgogICAqCiAgICogT3B0aW9uYWxseSBvbmx5IHdyaXRlIHBhcnQgb2YgdGhlIGlucHV0IFtzb3VyY2VdIHN0YXJ0aW5nIGF0IFtzdGFydF0gYW5kCiAgICogZW5kaW5nIGF0IFtlbmRdLgogICAqCiAgICogVGhlIG91dHB1dCBzcGFjZSBuZWVkZWQgaXMgYXQgbW9zdCBbc291cmNlLmxlbmd0aF0gKiAzLgogICAqCiAgICogUmV0dXJucwogICAqICAqIE5vbi1uZWdhdGl2ZSBvbiBzdWNjZXNzICh0aGUgbmV3IGluZGV4IGluIFt0YXJnZXRdKS4KICAgKiAgKiAtMSB3aGVuIFt0YXJnZXRdIGRvZXNuJ3QgaGF2ZSBlbm91Z2ggc3BhY2UuIE5vdGUgdGhhdCBbdGFyZ2V0XSBjYW4gYmUKICAgKiAgICBwb2xsdXRlZCBzdGFydGluZyBhdCBbaW5kZXhdLgogICAqICAqIC0yIG9uIGlucHV0IGVycm9yLCBpLmUuIGFuIHVucGFpcmVkIGxlYWQgb3IgdGFpbCBzdXJyb2dhdGUuCiAgICovCiAgc3RhdGljIGludCB3cml0ZVV0ZjgoTGlzdDxpbnQ+IHRhcmdldCwgaW50IGluZGV4LCBTdHJpbmcgc291cmNlLAogICAgICBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZEluZGV4KGluZGV4LCB0YXJnZXQsIG51bGwsIHRhcmdldC5sZW5ndGgpOwogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgc291cmNlLmxlbmd0aCk7CiAgICBpZiAoc3RhcnQgPT0gZW5kKSByZXR1cm4gaW5kZXg7CiAgICBpbnQgaSA9IHN0YXJ0OwogICAgaW50IGxlbmd0aCA9IHRhcmdldC5sZW5ndGg7CiAgICBkbyB7CiAgICAgIGludCBjb2RlVW5pdCA9IHNvdXJjZS5jb2RlVW5pdEF0KGkrKyk7CiAgICAgIHdoaWxlIChjb2RlVW5pdCA8IDEyOCkgewogICAgICAgIGlmIChpbmRleCA+PSBsZW5ndGgpIHJldHVybiAtMTsKICAgICAgICB0YXJnZXRbaW5kZXgrK10gPSBjb2RlVW5pdDsKICAgICAgICBpZiAoaSA+PSBlbmQpIHJldHVybiBpbmRleDsKICAgICAgICBjb2RlVW5pdCA9IHNvdXJjZS5jb2RlVW5pdEF0KGkrKyk7CiAgICAgIH0KICAgICAgaWYgKGNvZGVVbml0IDwgMHg4MDApIHsKICAgICAgICBpbmRleCArPSAyOwogICAgICAgIGlmIChpbmRleCA+IGxlbmd0aCkgcmV0dXJuIC0xOwogICAgICAgIHRhcmdldFtpbmRleCAtIDJdID0gMHhDMCB8IChjb2RlVW5pdCA+PiA2KTsKICAgICAgICB0YXJnZXRbaW5kZXggLSAxXSA9IDB4ODAgfCAoY29kZVVuaXQgJiAweDNmKTsKICAgICAgfSBlbHNlIGlmIChjb2RlVW5pdCAmIDB4RjgwMCAhPSAweEQ4MDApIHsKICAgICAgICAvLyBOb3QgYSBzdXJyb2dhdGUuCiAgICAgICAgaW5kZXggKz0gMzsKICAgICAgICBpZiAoaW5kZXggPiBsZW5ndGgpIHJldHVybiAtMTsKICAgICAgICB0YXJnZXRbaW5kZXggLSAzXSA9IDB4RTAgfCAoY29kZVVuaXQgPj4gMTIpOwogICAgICAgIHRhcmdldFtpbmRleCAtIDJdID0gMHg4MCB8ICgoY29kZVVuaXQgPj4gNikgJiAweDNmKTsKICAgICAgICB0YXJnZXRbaW5kZXggLSAxXSA9IDB4ODAgfCAoY29kZVVuaXQgJiAweDNmKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoY29kZVVuaXQgPj0gMHhEQzAwKSByZXR1cm4gLTI7IC8vIFVucGFpcmVkIHRhaWwgc3Vycm9nYXRlLgogICAgICAgIGlmIChpID49IGVuZCkgcmV0dXJuIC0yOyAvLyBVbnBhaXJlZCBsZWFkIHN1cnJvZ2F0ZS4KICAgICAgICBpbnQgbmV4dENoYXIgPSBzb3VyY2UuY29kZVVuaXRBdChpKyspOwogICAgICAgIGlmIChuZXh0Q2hhciAmIDB4RkMwMCAhPSAweERDMDApIHJldHVybiAtMjsgLy8gVW5wYWlyZWQgbGVhZCBzdXJyb2dhdGUuCiAgICAgICAgaW5kZXggKz0gNDsKICAgICAgICBpZiAoaW5kZXggPiBsZW5ndGgpIHJldHVybiAtMTsKICAgICAgICBjb2RlVW5pdCA9IChjb2RlVW5pdCAmIDB4M0ZGKSArIDB4NDA7CiAgICAgICAgdGFyZ2V0W2luZGV4IC0gNF0gPSAweEYwIHwgKGNvZGVVbml0ID4+IDgpOwogICAgICAgIHRhcmdldFtpbmRleCAtIDNdID0gMHg4MCB8ICgoY29kZVVuaXQgPj4gMikgJiAweDNGKTsKICAgICAgICB0YXJnZXRbaW5kZXggLSAyXSA9CiAgICAgICAgICAgIDB4ODAgfCAoKChjb2RlVW5pdCAmIDMpIDw8IDQpIHwgKChuZXh0Q2hhciAmIDB4M0ZGKSA+PiA2KSk7CiAgICAgICAgdGFyZ2V0W2luZGV4IC0gMV0gPSAweDgwIHwgKG5leHRDaGFyICYgMHgzZik7CiAgICAgIH0KICAgIH0gd2hpbGUgKGkgPCBlbmQpOwogICAgcmV0dXJuIGluZGV4Owog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FwZEBU4WBT0FDT1OJkQGQyJEQSQTIAktHygkJCsIHhQnNDYwHBQnNT02D0c9L1AUJy40PRxINggXEgQCAShwYWNrYWdlOmtlcm5lbC9iaW5hcnkvYXN0X3RvX2JpbmFyeS5kYXJ0M3Nka3Jvb3Q6L3BrZy9rZXJuZWwvbGliL2JpbmFyeS9hc3RfZnJvbV9iaW5hcnkuZGFydMABS8gvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgpsaWJyYXJ5IGtlcm5lbC5hc3RfZnJvbV9iaW5hcnk7CgppbXBvcnQgJ2RhcnQ6Y29yZScgaGlkZSBNYXBFbnRyeTsKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwppbXBvcnQgJ2RhcnQ6dHlwZWRfZGF0YSc7CgppbXBvcnQgJy4uL2FzdC5kYXJ0JzsKaW1wb3J0ICcuLi90cmFuc2Zvcm1hdGlvbnMvZmxhZ3MuZGFydCc7CmltcG9ydCAndGFnLmRhcnQnOwoKY2xhc3MgUGFyc2VFcnJvciB7CiAgU3RyaW5nIGZpbGVuYW1lOwogIGludCBieXRlSW5kZXg7CiAgU3RyaW5nIG1lc3NhZ2U7CiAgU3RyaW5nIHBhdGg7CgogIFBhcnNlRXJyb3IodGhpcy5tZXNzYWdlLCB7dGhpcy5maWxlbmFtZSwgdGhpcy5ieXRlSW5kZXgsIHRoaXMucGF0aH0pOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJGZpbGVuYW1lOiRieXRlSW5kZXg6ICRtZXNzYWdlIGF0ICRwYXRoJzsKfQoKY2xhc3MgSW52YWxpZEtlcm5lbFZlcnNpb25FcnJvciB7CiAgZmluYWwgaW50IHZlcnNpb247CgogIEludmFsaWRLZXJuZWxWZXJzaW9uRXJyb3IodGhpcy52ZXJzaW9uKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdVbmV4cGVjdGVkIEtlcm5lbCB2ZXJzaW9uICR7dmVyc2lvbn0gJwogICAgICAgICcoZXhwZWN0ZWQgJHtUYWcuQmluYXJ5Rm9ybWF0VmVyc2lvbn0pLic7CiAgfQp9CgpjbGFzcyBDYW5vbmljYWxOYW1lRXJyb3IgewogIGZpbmFsIFN0cmluZyBtZXNzYWdlOwoKICBDYW5vbmljYWxOYW1lRXJyb3IodGhpcy5tZXNzYWdlKTsKfQoKY2xhc3MgQ2Fub25pY2FsTmFtZVNka0Vycm9yIGV4dGVuZHMgQ2Fub25pY2FsTmFtZUVycm9yIHsKICBDYW5vbmljYWxOYW1lU2RrRXJyb3IoU3RyaW5nIG1lc3NhZ2UpIDogc3VwZXIobWVzc2FnZSk7Cn0KCmNsYXNzIF9Db21wb25lbnRJbmRleCB7CiAgc3RhdGljIGNvbnN0IG51bWJlck9mRml4ZWRGaWVsZHMgPSA5OwoKICBpbnQgYmluYXJ5T2Zmc2V0Rm9yU291cmNlVGFibGU7CiAgaW50IGJpbmFyeU9mZnNldEZvckNhbm9uaWNhbE5hbWVzOwogIGludCBiaW5hcnlPZmZzZXRGb3JNZXRhZGF0YVBheWxvYWRzOwogIGludCBiaW5hcnlPZmZzZXRGb3JNZXRhZGF0YU1hcHBpbmdzOwogIGludCBiaW5hcnlPZmZzZXRGb3JTdHJpbmdUYWJsZTsKICBpbnQgYmluYXJ5T2Zmc2V0Rm9yQ29uc3RhbnRUYWJsZTsKICBpbnQgbWFpbk1ldGhvZFJlZmVyZW5jZTsKICBMaXN0PGludD4gbGlicmFyeU9mZnNldHM7CiAgaW50IGxpYnJhcnlDb3VudDsKICBpbnQgY29tcG9uZW50RmlsZVNpemVJbkJ5dGVzOwp9CgpjbGFzcyBCaW5hcnlCdWlsZGVyIHsKICBmaW5hbCBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHZhcmlhYmxlU3RhY2sgPSA8VmFyaWFibGVEZWNsYXJhdGlvbj5bXTsKICBmaW5hbCBMaXN0PExhYmVsZWRTdGF0ZW1lbnQ+IGxhYmVsU3RhY2sgPSA8TGFiZWxlZFN0YXRlbWVudD5bXTsKICBpbnQgbGFiZWxTdGFja0Jhc2UgPSAwOwogIGZpbmFsIExpc3Q8U3dpdGNoQ2FzZT4gc3dpdGNoQ2FzZVN0YWNrID0gPFN3aXRjaENhc2U+W107CiAgZmluYWwgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVyU3RhY2sgPSA8VHlwZVBhcmFtZXRlcj5bXTsKICBmaW5hbCBTdHJpbmcgZmlsZW5hbWU7CiAgZmluYWwgTGlzdDxpbnQ+IF9ieXRlczsKICBpbnQgX2J5dGVPZmZzZXQgPSAwOwogIGZpbmFsIExpc3Q8U3RyaW5nPiBfc3RyaW5nVGFibGUgPSA8U3RyaW5nPltdOwogIGZpbmFsIExpc3Q8VXJpPiBfc291cmNlVXJpVGFibGUgPSA8VXJpPltdOwogIE1hcDxpbnQsIENvbnN0YW50PiBfY29uc3RhbnRUYWJsZSA9IDxpbnQsIENvbnN0YW50Pnt9OwogIExpc3Q8Q2Fub25pY2FsTmFtZT4gX2xpbmtUYWJsZTsKICBpbnQgX3RyYW5zZm9ybWVyRmxhZ3MgPSAwOwogIExpYnJhcnkgX2N1cnJlbnRMaWJyYXJ5OwogIGludCBfY29tcG9uZW50U3RhcnRPZmZzZXQgPSAwOwoKICAvLyBJZiBzb21ldGhpbmcgZ29lcyB3cm9uZywgdGhpcyBsaXN0IHNob3VsZCBpbmRpY2F0ZSB3aGF0IGxpYnJhcnksCiAgLy8gY2xhc3MsIGFuZCBtZW1iZXIgd2FzIGJlaW5nIGJ1aWx0LgogIExpc3Q8U3RyaW5nPiBkZWJ1Z1BhdGggPSA8U3RyaW5nPltdOwoKICBib29sIF9pc1JlYWRpbmdMaWJyYXJ5SW1wbGVtZW50YXRpb24gPSBmYWxzZTsKICBmaW5hbCBib29sIGFsd2F5c0NyZWF0ZU5ld05hbWVkTm9kZXM7CgogIC8vLyBJZiBiaW5hcnkgY29udGFpbnMgbWV0YWRhdGEgc2VjdGlvbiB3aXRoIHBheWxvYWRzIHJlZmVyZW5jaW5nIG90aGVyIG5vZGVzCiAgLy8vIHN1Y2ggS2VybmVsIGJpbmFyeSBjYW4ndCBiZSByZWFkIGxhemlseSBiZWNhdXNlIG1ldGFkYXRhIGNyb3NzIHJlZmVyZW5jZXMKICAvLy8gd2lsbCBub3QgYmUgcmVzb2x2ZWQgY29ycmVjdGx5LgogIGJvb2wgX2Rpc2FibGVMYXp5UmVhZGluZyA9IGZhbHNlOwoKICBCaW5hcnlCdWlsZGVyKHRoaXMuX2J5dGVzLAogICAgICB7dGhpcy5maWxlbmFtZSwKICAgICAgYm9vbCBkaXNhYmxlTGF6eVJlYWRpbmcgPSBmYWxzZSwKICAgICAgYm9vbCBhbHdheXNDcmVhdGVOZXdOYW1lZE5vZGVzfSkKICAgICAgOiBfZGlzYWJsZUxhenlSZWFkaW5nID0gZGlzYWJsZUxhenlSZWFkaW5nLAogICAgICAgIHRoaXMuYWx3YXlzQ3JlYXRlTmV3TmFtZWROb2RlcyA9IGFsd2F5c0NyZWF0ZU5ld05hbWVkTm9kZXMgPz8gZmFsc2U7CgogIGZhaWwoU3RyaW5nIG1lc3NhZ2UpIHsKICAgIHRocm93IFBhcnNlRXJyb3IobWVzc2FnZSwKICAgICAgICBieXRlSW5kZXg6IF9ieXRlT2Zmc2V0LCBmaWxlbmFtZTogZmlsZW5hbWUsIHBhdGg6IGRlYnVnUGF0aC5qb2luKCc6OicpKTsKICB9CgogIGludCBnZXQgYnl0ZU9mZnNldCA9PiBfYnl0ZU9mZnNldDsKCiAgaW50IHJlYWRCeXRlKCkgPT4gX2J5dGVzW19ieXRlT2Zmc2V0KytdOwoKICBpbnQgcmVhZFVJbnQoKSB7CiAgICB2YXIgYnl0ZSA9IHJlYWRCeXRlKCk7CiAgICBpZiAoYnl0ZSAmIDB4ODAgPT0gMCkgewogICAgICAvLyAweHh4eHh4eAogICAgICByZXR1cm4gYnl0ZTsKICAgIH0gZWxzZSBpZiAoYnl0ZSAmIDB4NDAgPT0gMCkgewogICAgICAvLyAxMHh4eHh4eAogICAgICByZXR1cm4gKChieXRlICYgMHgzRikgPDwgOCkgfCByZWFkQnl0ZSgpOwogICAgfSBlbHNlIHsKICAgICAgLy8gMTF4eHh4eHgKICAgICAgcmV0dXJuICgoYnl0ZSAmIDB4M0YpIDw8IDI0KSB8CiAgICAgICAgICAocmVhZEJ5dGUoKSA8PCAxNikgfAogICAgICAgICAgKHJlYWRCeXRlKCkgPDwgOCkgfAogICAgICAgICAgcmVhZEJ5dGUoKTsKICAgIH0KICB9CgogIGludCByZWFkVWludDMyKCkgewogICAgcmV0dXJuIChyZWFkQnl0ZSgpIDw8IDI0KSB8CiAgICAgICAgKHJlYWRCeXRlKCkgPDwgMTYpIHwKICAgICAgICAocmVhZEJ5dGUoKSA8PCA4KSB8CiAgICAgICAgcmVhZEJ5dGUoKTsKICB9CgogIGZpbmFsIEZsb2F0NjRMaXN0IF9kb3VibGVCdWZmZXIgPSBuZXcgRmxvYXQ2NExpc3QoMSk7CiAgVWludDhMaXN0IF9kb3VibGVCdWZmZXJVaW50ODsKCiAgZG91YmxlIHJlYWREb3VibGUoKSB7CiAgICBfZG91YmxlQnVmZmVyVWludDggPz89IF9kb3VibGVCdWZmZXIuYnVmZmVyLmFzVWludDhMaXN0KCk7CiAgICBfZG91YmxlQnVmZmVyVWludDhbMF0gPSByZWFkQnl0ZSgpOwogICAgX2RvdWJsZUJ1ZmZlclVpbnQ4WzFdID0gcmVhZEJ5dGUoKTsKICAgIF9kb3VibGVCdWZmZXJVaW50OFsyXSA9IHJlYWRCeXRlKCk7CiAgICBfZG91YmxlQnVmZmVyVWludDhbM10gPSByZWFkQnl0ZSgpOwogICAgX2RvdWJsZUJ1ZmZlclVpbnQ4WzRdID0gcmVhZEJ5dGUoKTsKICAgIF9kb3VibGVCdWZmZXJVaW50OFs1XSA9IHJlYWRCeXRlKCk7CiAgICBfZG91YmxlQnVmZmVyVWludDhbNl0gPSByZWFkQnl0ZSgpOwogICAgX2RvdWJsZUJ1ZmZlclVpbnQ4WzddID0gcmVhZEJ5dGUoKTsKICAgIHJldHVybiBfZG91YmxlQnVmZmVyWzBdOwogIH0KCiAgTGlzdDxpbnQ+IHJlYWRCeXRlcyhpbnQgbGVuZ3RoKSB7CiAgICBMaXN0PGludD4gYnl0ZXMgPSBuZXcgVWludDhMaXN0KGxlbmd0aCk7CiAgICBieXRlcy5zZXRSYW5nZSgwLCBieXRlcy5sZW5ndGgsIF9ieXRlcywgX2J5dGVPZmZzZXQpOwogICAgX2J5dGVPZmZzZXQgKz0gYnl0ZXMubGVuZ3RoOwogICAgcmV0dXJuIGJ5dGVzOwogIH0KCiAgTGlzdDxpbnQ+IHJlYWRCeXRlTGlzdCgpIHsKICAgIHJldHVybiByZWFkQnl0ZXMocmVhZFVJbnQoKSk7CiAgfQoKICBTdHJpbmcgcmVhZFN0cmluZ0VudHJ5KGludCBudW1CeXRlcykgewogICAgLy8gVXRmOERlY29kZXIgd2lsbCBza2lwIGxlYWRpbmcgQk9NIGNoYXJhY3RlcnMsIGJ1dCB3ZSBtdXN0IHByZXNlcnZlIHRoZW0uCiAgICAvLyBDb2xsZWN0IGxlYWRpbmcgQk9NcyBiZWZvcmUgcGFzc2luZyB0aGUgYnl0ZXMgb250byBVdGY4RGVjb2Rlci4KICAgIGludCBudW1CeXRlT3JkZXJNYXJrcyA9IDA7CiAgICB3aGlsZSAoX2J5dGVPZmZzZXQgKyAyIDwgX2J5dGVzLmxlbmd0aCAmJgogICAgICAgIF9ieXRlc1tfYnl0ZU9mZnNldF0gPT0gMHhlZiAmJgogICAgICAgIF9ieXRlc1tfYnl0ZU9mZnNldCArIDFdID09IDB4YmIgJiYKICAgICAgICBfYnl0ZXNbX2J5dGVPZmZzZXQgKyAyXSA9PSAweGJmKSB7CiAgICAgICsrbnVtQnl0ZU9yZGVyTWFya3M7CiAgICAgIF9ieXRlT2Zmc2V0ICs9IDM7CiAgICAgIG51bUJ5dGVzIC09IDM7CiAgICB9CiAgICBTdHJpbmcgc3RyaW5nID0gY29uc3QgVXRmOERlY29kZXIoKQogICAgICAgIC5jb252ZXJ0KF9ieXRlcywgX2J5dGVPZmZzZXQsIF9ieXRlT2Zmc2V0ICsgbnVtQnl0ZXMpOwogICAgX2J5dGVPZmZzZXQgKz0gbnVtQnl0ZXM7CiAgICBpZiAobnVtQnl0ZU9yZGVyTWFya3MgPiAwKSB7CiAgICAgIHJldHVybiAnXHVmZWZmJyAqIG51bUJ5dGVPcmRlck1hcmtzICsgc3RyaW5nOwogICAgfQogICAgcmV0dXJuIHN0cmluZzsKICB9CgogIC8vLyBSZWFkIG1ldGFkYXRhTWFwcGluZ3Mgc2VjdGlvbiBmcm9tIHRoZSBiaW5hcnkuCiAgdm9pZCBfcmVhZE1ldGFkYXRhTWFwcGluZ3MoCiAgICAgIENvbXBvbmVudCBjb21wb25lbnQsIGludCBiaW5hcnlPZmZzZXRGb3JNZXRhZGF0YVBheWxvYWRzKSB7CiAgICAvLyBEZWZhdWx0IHJlYWRlciBpZ25vcmVzIG1ldGFkYXRhIHNlY3Rpb24gZW50aXJlbHkuCiAgfQoKICAvLy8gUmVhZHMgbWV0YWRhdGEgZm9yIHRoZSBnaXZlbiBbbm9kZV0uCiAgTm9kZSBfYXNzb2NpYXRlTWV0YWRhdGEoTm9kZSBub2RlLCBpbnQgbm9kZU9mZnNldCkgewogICAgLy8gRGVmYXVsdCByZWFkZXIgaWdub3JlcyBtZXRhZGF0YSBzZWN0aW9uIGVudGlyZWx5LgogICAgcmV0dXJuIG5vZGU7CiAgfQoKICB2b2lkIHJlYWRTdHJpbmdUYWJsZShMaXN0PFN0cmluZz4gdGFibGUpIHsKICAgIC8vIFJlYWQgdGhlIHRhYmxlIG9mIGVuZCBvZmZzZXRzLgogICAgaW50IGxlbmd0aCA9IHJlYWRVSW50KCk7CiAgICBMaXN0PGludD4gZW5kT2Zmc2V0cyA9IG5ldyBMaXN0PGludD4obGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgZW5kT2Zmc2V0c1tpXSA9IHJlYWRVSW50KCk7CiAgICB9CiAgICAvLyBSZWFkIHRoZSBVVEYtOCBlbmNvZGVkIHN0cmluZ3MuCiAgICB0YWJsZS5sZW5ndGggPSBsZW5ndGg7CiAgICBpbnQgc3RhcnRPZmZzZXQgPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICB0YWJsZVtpXSA9IHJlYWRTdHJpbmdFbnRyeShlbmRPZmZzZXRzW2ldIC0gc3RhcnRPZmZzZXQpOwogICAgICBzdGFydE9mZnNldCA9IGVuZE9mZnNldHNbaV07CiAgICB9CiAgfQoKICB2b2lkIHJlYWRDb25zdGFudFRhYmxlKCkgewogICAgZmluYWwgaW50IGxlbmd0aCA9IHJlYWRVSW50KCk7CiAgICBmaW5hbCBpbnQgc3RhcnRPZmZzZXQgPSBieXRlT2Zmc2V0OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBfY29uc3RhbnRUYWJsZVtieXRlT2Zmc2V0IC0gc3RhcnRPZmZzZXRdID0gcmVhZENvbnN0YW50VGFibGVFbnRyeSgpOwogICAgfQogIH0KCiAgQ29uc3RhbnQgcmVhZENvbnN0YW50VGFibGVFbnRyeSgpIHsKICAgIGZpbmFsIGludCBjb25zdGFudFRhZyA9IHJlYWRCeXRlKCk7CiAgICBzd2l0Y2ggKGNvbnN0YW50VGFnKSB7CiAgICAgIGNhc2UgQ29uc3RhbnRUYWcuTnVsbENvbnN0YW50OgogICAgICAgIHJldHVybiBuZXcgTnVsbENvbnN0YW50KCk7CiAgICAgIGNhc2UgQ29uc3RhbnRUYWcuQm9vbENvbnN0YW50OgogICAgICAgIHJldHVybiBuZXcgQm9vbENvbnN0YW50KHJlYWRCeXRlKCkgPT0gMSk7CiAgICAgIGNhc2UgQ29uc3RhbnRUYWcuSW50Q29uc3RhbnQ6CiAgICAgICAgcmV0dXJuIG5ldyBJbnRDb25zdGFudCgocmVhZEV4cHJlc3Npb24oKSBhcyBJbnRMaXRlcmFsKS52YWx1ZSk7CiAgICAgIGNhc2UgQ29uc3RhbnRUYWcuRG91YmxlQ29uc3RhbnQ6CiAgICAgICAgcmV0dXJuIG5ldyBEb3VibGVDb25zdGFudChyZWFkRG91YmxlKCkpOwogICAgICBjYXNlIENvbnN0YW50VGFnLlN0cmluZ0NvbnN0YW50OgogICAgICAgIHJldHVybiBuZXcgU3RyaW5nQ29uc3RhbnQocmVhZFN0cmluZ1JlZmVyZW5jZSgpKTsKICAgICAgY2FzZSBDb25zdGFudFRhZy5TeW1ib2xDb25zdGFudDoKICAgICAgICBSZWZlcmVuY2UgbGlicmFyeVJlZmVyZW5jZSA9IHJlYWRMaWJyYXJ5UmVmZXJlbmNlKGFsbG93TnVsbDogdHJ1ZSk7CiAgICAgICAgcmV0dXJuIG5ldyBTeW1ib2xDb25zdGFudChyZWFkU3RyaW5nUmVmZXJlbmNlKCksIGxpYnJhcnlSZWZlcmVuY2UpOwogICAgICBjYXNlIENvbnN0YW50VGFnLk1hcENvbnN0YW50OgogICAgICAgIGZpbmFsIERhcnRUeXBlIGtleVR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICBmaW5hbCBEYXJ0VHlwZSB2YWx1ZVR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICBmaW5hbCBpbnQgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgICAgICBmaW5hbCBMaXN0PENvbnN0YW50TWFwRW50cnk+IGVudHJpZXMgPQogICAgICAgICAgICBuZXcgTGlzdDxDb25zdGFudE1hcEVudHJ5Pi5maWxsZWQobGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgZmluYWwgQ29uc3RhbnQga2V5ID0gcmVhZENvbnN0YW50UmVmZXJlbmNlKCk7CiAgICAgICAgICBmaW5hbCBDb25zdGFudCB2YWx1ZSA9IHJlYWRDb25zdGFudFJlZmVyZW5jZSgpOwogICAgICAgICAgZW50cmllc1tpXSA9IG5ldyBDb25zdGFudE1hcEVudHJ5KGtleSwgdmFsdWUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IE1hcENvbnN0YW50KGtleVR5cGUsIHZhbHVlVHlwZSwgZW50cmllcyk7CiAgICAgIGNhc2UgQ29uc3RhbnRUYWcuTGlzdENvbnN0YW50OgogICAgICAgIGZpbmFsIERhcnRUeXBlIHR5cGVBcmd1bWVudCA9IHJlYWREYXJ0VHlwZSgpOwogICAgICAgIGZpbmFsIGludCBsZW5ndGggPSByZWFkVUludCgpOwogICAgICAgIGZpbmFsIExpc3Q8Q29uc3RhbnQ+IGVudHJpZXMgPQogICAgICAgICAgICBuZXcgTGlzdDxDb25zdGFudD4uZmlsbGVkKGxlbmd0aCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGVudHJpZXNbaV0gPSByZWFkQ29uc3RhbnRSZWZlcmVuY2UoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBMaXN0Q29uc3RhbnQodHlwZUFyZ3VtZW50LCBlbnRyaWVzKTsKICAgICAgY2FzZSBDb25zdGFudFRhZy5TZXRDb25zdGFudDoKICAgICAgICBmaW5hbCBEYXJ0VHlwZSB0eXBlQXJndW1lbnQgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICBmaW5hbCBpbnQgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgICAgICBmaW5hbCBMaXN0PENvbnN0YW50PiBlbnRyaWVzID0KICAgICAgICAgICAgbmV3IExpc3Q8Q29uc3RhbnQ+LmZpbGxlZChsZW5ndGgsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBlbnRyaWVzW2ldID0gcmVhZENvbnN0YW50UmVmZXJlbmNlKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgU2V0Q29uc3RhbnQodHlwZUFyZ3VtZW50LCBlbnRyaWVzKTsKICAgICAgY2FzZSBDb25zdGFudFRhZy5JbnN0YW5jZUNvbnN0YW50OgogICAgICAgIGZpbmFsIFJlZmVyZW5jZSBjbGFzc1JlZmVyZW5jZSA9IHJlYWRDbGFzc1JlZmVyZW5jZSgpOwogICAgICAgIGZpbmFsIGludCB0eXBlQXJndW1lbnRDb3VudCA9IHJlYWRVSW50KCk7CiAgICAgICAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9CiAgICAgICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQodHlwZUFyZ3VtZW50Q291bnQsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudENvdW50OyBpKyspIHsKICAgICAgICAgIHR5cGVBcmd1bWVudHNbaV0gPSByZWFkRGFydFR5cGUoKTsKICAgICAgICB9CiAgICAgICAgZmluYWwgaW50IGZpZWxkVmFsdWVDb3VudCA9IHJlYWRVSW50KCk7CiAgICAgICAgZmluYWwgTWFwPFJlZmVyZW5jZSwgQ29uc3RhbnQ+IGZpZWxkVmFsdWVzID0gPFJlZmVyZW5jZSwgQ29uc3RhbnQ+e307CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZFZhbHVlQ291bnQ7IGkrKykgewogICAgICAgICAgZmluYWwgUmVmZXJlbmNlIGZpZWxkUmVmID0KICAgICAgICAgICAgICByZWFkQ2Fub25pY2FsTmFtZVJlZmVyZW5jZSgpLmdldFJlZmVyZW5jZSgpOwogICAgICAgICAgZmluYWwgQ29uc3RhbnQgY29uc3RhbnQgPSByZWFkQ29uc3RhbnRSZWZlcmVuY2UoKTsKICAgICAgICAgIGZpZWxkVmFsdWVzW2ZpZWxkUmVmXSA9IGNvbnN0YW50OwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IEluc3RhbmNlQ29uc3RhbnQoY2xhc3NSZWZlcmVuY2UsIHR5cGVBcmd1bWVudHMsIGZpZWxkVmFsdWVzKTsKICAgICAgY2FzZSBDb25zdGFudFRhZy5QYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50OgogICAgICAgIGZpbmFsIHRlYXJPZmZDb25zdGFudCA9IHJlYWRDb25zdGFudFJlZmVyZW5jZSgpIGFzIFRlYXJPZmZDb25zdGFudDsKICAgICAgICBmaW5hbCBpbnQgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgICAgICBmaW5hbCBMaXN0PERhcnRUeXBlPiB0eXBlcyA9IG5ldyBMaXN0PERhcnRUeXBlPihsZW5ndGgpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHR5cGVzW2ldID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgUGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCh0ZWFyT2ZmQ29uc3RhbnQsIHR5cGVzKTsKICAgICAgY2FzZSBDb25zdGFudFRhZy5UZWFyT2ZmQ29uc3RhbnQ6CiAgICAgICAgZmluYWwgUmVmZXJlbmNlIHJlZmVyZW5jZSA9IHJlYWRDYW5vbmljYWxOYW1lUmVmZXJlbmNlKCkuZ2V0UmVmZXJlbmNlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBUZWFyT2ZmQ29uc3RhbnQuYnlSZWZlcmVuY2UocmVmZXJlbmNlKTsKICAgICAgY2FzZSBDb25zdGFudFRhZy5UeXBlTGl0ZXJhbENvbnN0YW50OgogICAgICAgIGZpbmFsIERhcnRUeXBlIHR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICByZXR1cm4gbmV3IFR5cGVMaXRlcmFsQ29uc3RhbnQodHlwZSk7CiAgICAgIGNhc2UgQ29uc3RhbnRUYWcuVW5ldmFsdWF0ZWRDb25zdGFudDoKICAgICAgICBmaW5hbCBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSByZWFkRXhwcmVzc2lvbigpOwogICAgICAgIHJldHVybiBuZXcgVW5ldmFsdWF0ZWRDb25zdGFudChleHByZXNzaW9uKTsKICAgIH0KCiAgICB0aHJvdyBmYWlsKCd1bmV4cGVjdGVkIGNvbnN0YW50IHRhZzogJGNvbnN0YW50VGFnJyk7CiAgfQoKICBDb25zdGFudCByZWFkQ29uc3RhbnRSZWZlcmVuY2UoKSB7CiAgICBmaW5hbCBpbnQgb2Zmc2V0ID0gcmVhZFVJbnQoKTsKICAgIENvbnN0YW50IGNvbnN0YW50ID0gX2NvbnN0YW50VGFibGVbb2Zmc2V0XTsKICAgIGFzc2VydChjb25zdGFudCAhPSBudWxsKTsKICAgIHJldHVybiBjb25zdGFudDsKICB9CgogIFVyaSByZWFkVXJpUmVmZXJlbmNlKCkgewogICAgcmV0dXJuIF9zb3VyY2VVcmlUYWJsZVtyZWFkVUludCgpXTsKICB9CgogIFN0cmluZyByZWFkU3RyaW5nUmVmZXJlbmNlKCkgewogICAgcmV0dXJuIF9zdHJpbmdUYWJsZVtyZWFkVUludCgpXTsKICB9CgogIExpc3Q8U3RyaW5nPiByZWFkU3RyaW5nUmVmZXJlbmNlTGlzdCgpIHsKICAgIGludCBsZW5ndGggPSByZWFkVUludCgpOwogICAgTGlzdDxTdHJpbmc+IHJlc3VsdCA9IG5ldyBMaXN0PFN0cmluZz4uZmlsbGVkKGxlbmd0aCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICByZXN1bHRbaV0gPSByZWFkU3RyaW5nUmVmZXJlbmNlKCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgU3RyaW5nIHJlYWRTdHJpbmdPck51bGxJZkVtcHR5KCkgewogICAgdmFyIHN0cmluZyA9IHJlYWRTdHJpbmdSZWZlcmVuY2UoKTsKICAgIHJldHVybiBzdHJpbmcuaXNFbXB0eSA/IG51bGwgOiBzdHJpbmc7CiAgfQoKICBib29sIHJlYWRBbmRDaGVja09wdGlvblRhZygpIHsKICAgIGludCB0YWcgPSByZWFkQnl0ZSgpOwogICAgaWYgKHRhZyA9PSBUYWcuTm90aGluZykgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9IGVsc2UgaWYgKHRhZyA9PSBUYWcuU29tZXRoaW5nKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgZmFpbCgndW5leHBlY3RlZCBvcHRpb24gdGFnOiAkdGFnJyk7CiAgICB9CiAgfQoKICBMaXN0PEV4cHJlc3Npb24+IHJlYWRBbm5vdGF0aW9uTGlzdChUcmVlTm9kZSBwYXJlbnQpIHsKICAgIGludCBsZW5ndGggPSByZWFkVUludCgpOwogICAgaWYgKGxlbmd0aCA9PSAwKSByZXR1cm4gY29uc3QgPEV4cHJlc3Npb24+W107CiAgICBMaXN0PEV4cHJlc3Npb24+IGxpc3QgPQogICAgICAgIG5ldyBMaXN0PEV4cHJlc3Npb24+LmZpbGxlZChsZW5ndGgsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgbGlzdFtpXSA9IHJlYWRFeHByZXNzaW9uKCkuLnBhcmVudCA9IHBhcmVudDsKICAgIH0KICAgIHJldHVybiBsaXN0OwogIH0KCiAgdm9pZCBfZmlsbFRyZWVOb2RlTGlzdCgKICAgICAgTGlzdDxUcmVlTm9kZT4gbGlzdCwgVHJlZU5vZGUgYnVpbGRPYmplY3QoaW50IGluZGV4KSwgVHJlZU5vZGUgcGFyZW50KSB7CiAgICB2YXIgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgIGxpc3QubGVuZ3RoID0gbGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICBUcmVlTm9kZSBvYmplY3QgPSBidWlsZE9iamVjdChpKTsKICAgICAgbGlzdFtpXSA9IG9iamVjdC4ucGFyZW50ID0gcGFyZW50OwogICAgfQogIH0KCiAgdm9pZCBfZmlsbE5vblRyZWVOb2RlTGlzdChMaXN0PE5vZGU+IGxpc3QsIE5vZGUgYnVpbGRPYmplY3QoKSkgewogICAgdmFyIGxlbmd0aCA9IHJlYWRVSW50KCk7CiAgICBsaXN0Lmxlbmd0aCA9IGxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgTm9kZSBvYmplY3QgPSBidWlsZE9iamVjdCgpOwogICAgICBsaXN0W2ldID0gb2JqZWN0OwogICAgfQogIH0KCiAgdm9pZCBfc2tpcE5vZGVMaXN0KE5vZGUgc2tpcE9iamVjdCgpKSB7CiAgICB2YXIgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgc2tpcE9iamVjdCgpOwogICAgfQogIH0KCiAgLy8vIFJlYWRzIGEgbGlzdCBvZiBuYW1lZCBub2RlcywgcmV1c2luZyBhbnkgZXhpc3Rpbmcgb2JqZWN0cyBhbHJlYWR5IGluIHRoZQogIC8vLyBsaW5raW5nIHRyZWUuIFRoZSBub2RlcyBhcmUgbWVyZ2VkIGludG8gW2xpc3RdLCBhbmQgaWYgcmVhZGluZyB0aGUgbGlicmFyeQogIC8vLyBpbXBsZW1lbnRhdGlvbiwgdGhlIG9yZGVyIGlzIGNvcnJlY3RlZC4KICAvLy8KICAvLy8gW3JlYWRPYmplY3RdIHNob3VsZCByZWFkIHRoZSBvYmplY3QgZGVmaW5pdGlvbiBhbmQgaXRzIGNhbm9uaWNhbCBuYW1lLgogIC8vLyBJZiBhbiBleGlzdGluZyBvYmplY3QgaXMgYm91bmQgdG8gdGhlIGNhbm9uaWNhbCBuYW1lLCB0aGUgZXhpc3Rpbmcgb2JqZWN0CiAgLy8vIG11c3QgYmUgcmV1c2VkIGFuZCByZXR1cm5lZC4KICB2b2lkIF9tZXJnZU5hbWVkTm9kZUxpc3QoCiAgICAgIExpc3Q8TmFtZWROb2RlPiBsaXN0LCBOYW1lZE5vZGUgcmVhZE9iamVjdChpbnQgaW5kZXgpLCBUcmVlTm9kZSBwYXJlbnQpIHsKICAgIGlmIChfaXNSZWFkaW5nTGlicmFyeUltcGxlbWVudGF0aW9uKSB7CiAgICAgIC8vIFdoZW4gcmVhZGluZyB0aGUgbGlicmFyeSBpbXBsZW1lbnRhdGlvbiwgb3ZlcndyaXRlIHRoZSB3aG9sZSBsaXN0CiAgICAgIC8vIHdpdGggdGhlIG5ldyBvbmUuCiAgICAgIF9maWxsVHJlZU5vZGVMaXN0KGxpc3QsIHJlYWRPYmplY3QsIHBhcmVudCk7CiAgICB9IGVsc2UgewogICAgICAvLyBXaGVuIHJlYWRpbmcgYW4gZXh0ZXJuYWwgbGlicmFyeSwgdGhlIHJlc3VsdHMgc2hvdWxkIGVpdGhlciBiZToKICAgICAgLy8gLSBtZXJnZWQgd2l0aCB0aGUgZXhpc3RpbmcgZXh0ZXJuYWwgbGlicmFyeSBkZWZpbml0aW9uIChpZiBhbnkpCiAgICAgIC8vIC0gaWdub3JlZCBpZiB0aGUgbGlicmFyeSBpbXBsZW1lbnRhdGlvbiBpcyBhbHJlYWR5IGluIG1lbW9yeQogICAgICBpbnQgbnVtYmVyT2ZOb2RlcyA9IHJlYWRVSW50KCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyT2ZOb2RlczsgKytpKSB7CiAgICAgICAgdmFyIHZhbHVlID0gcmVhZE9iamVjdChpKTsKICAgICAgICAvLyBXZSB1c2UgdGhlIHBhcmVudCBwb2ludGVyIG9mIGEgbm9kZSB0byBkZXRlcm1pbmUgaWYgaXQgYWxyZWFkeSBpcyBpbgogICAgICAgIC8vIHRoZSBBU1QgYW5kIGhlbmNlIHNob3VsZCBub3QgYmUgYWRkZWQgYWdhaW4uCiAgICAgICAgaWYgKHZhbHVlLnBhcmVudCA9PSBudWxsKSB7CiAgICAgICAgICBsaXN0LmFkZCh2YWx1ZS4ucGFyZW50ID0gcGFyZW50KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgcmVhZExpbmtUYWJsZShDYW5vbmljYWxOYW1lIGxpbmtSb290KSB7CiAgICBpbnQgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgIF9saW5rVGFibGUgPSBuZXcgTGlzdDxDYW5vbmljYWxOYW1lPihsZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICBpbnQgYmlhc2VkUGFyZW50SW5kZXggPSByZWFkVUludCgpOwogICAgICBTdHJpbmcgbmFtZSA9IHJlYWRTdHJpbmdSZWZlcmVuY2UoKTsKICAgICAgdmFyIHBhcmVudCA9CiAgICAgICAgICBiaWFzZWRQYXJlbnRJbmRleCA9PSAwID8gbGlua1Jvb3QgOiBfbGlua1RhYmxlW2JpYXNlZFBhcmVudEluZGV4IC0gMV07CiAgICAgIF9saW5rVGFibGVbaV0gPSBwYXJlbnQuZ2V0Q2hpbGQobmFtZSk7CiAgICB9CiAgfQoKICBMaXN0PGludD4gX2luZGV4Q29tcG9uZW50cygpIHsKICAgIGludCBzYXZlZEJ5dGVPZmZzZXQgPSBfYnl0ZU9mZnNldDsKICAgIF9ieXRlT2Zmc2V0ID0gX2J5dGVzLmxlbmd0aCAtIDQ7CiAgICBMaXN0PGludD4gaW5kZXggPSA8aW50PltdOwogICAgd2hpbGUgKF9ieXRlT2Zmc2V0ID4gMCkgewogICAgICBpbnQgc2l6ZSA9IHJlYWRVaW50MzIoKTsKICAgICAgaW50IHN0YXJ0ID0gX2J5dGVPZmZzZXQgLSBzaXplOwogICAgICBpZiAoc3RhcnQgPCAwKSB7CiAgICAgICAgdGhyb3cgZmFpbCgiaW5kaWNhdGVkIHNpemUgZG9lcyBub3QgbWF0Y2ggZmlsZSBzaXplIik7CiAgICAgIH0KICAgICAgaW5kZXguYWRkKHNpemUpOwogICAgICBfYnl0ZU9mZnNldCA9IHN0YXJ0IC0gNDsKICAgIH0KICAgIF9ieXRlT2Zmc2V0ID0gc2F2ZWRCeXRlT2Zmc2V0OwogICAgcmV0dXJuIG5ldyBMaXN0LmZyb20oaW5kZXgucmV2ZXJzZWQpOwogIH0KCiAgLy8vIERlc2VyaWFsaXplcyBhIGtlcm5lbCBjb21wb25lbnQgYW5kIHN0b3JlcyBpdCBpbiBbY29tcG9uZW50XS4KICAvLy8KICAvLy8gV2hlbiBsaW5raW5nIHdpdGggYSBub24tZW1wdHkgY29tcG9uZW50LCBjYW5vbmljYWwgbmFtZXMgbXVzdCBoYXZlIGJlZW4KICAvLy8gY29tcHV0ZWQgYWhlYWQgb2YgdGltZS4KICAvLy8KICAvLy8gVGhlIGlucHV0IGJ5dGVzIG1heSBjb250YWluIG11bHRpcGxlIGZpbGVzIGNvbmNhdGVuYXRlZC4KICB2b2lkIHJlYWRDb21wb25lbnQoQ29tcG9uZW50IGNvbXBvbmVudCwge2Jvb2wgY2hlY2tDYW5vbmljYWxOYW1lczogZmFsc2V9KSB7CiAgICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgYSAuZGlsbCBmaWxlIGFuZCBpdCBoYXMgdGhlIGNvcnJlY3QgdmVyc2lvbiBiZWZvcmUgd2UKICAgIC8vIHN0YXJ0IGRlY29kaW5nIGl0LiAgT3RoZXJ3aXNlIHdlIHdpbGwgZmFpbCBmb3IgY3J5cHRpYyByZWFzb25zLgogICAgaW50IG9mZnNldCA9IF9ieXRlT2Zmc2V0OwogICAgaW50IG1hZ2ljID0gcmVhZFVpbnQzMigpOwogICAgaWYgKG1hZ2ljICE9IFRhZy5Db21wb25lbnRGaWxlKSB7CiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoJ05vdCBhIC5kaWxsIGZpbGUgKHdyb25nIG1hZ2ljIG51bWJlcikuJyk7CiAgICB9CiAgICBpbnQgdmVyc2lvbiA9IHJlYWRVaW50MzIoKTsKICAgIGlmICh2ZXJzaW9uICE9IFRhZy5CaW5hcnlGb3JtYXRWZXJzaW9uKSB7CiAgICAgIHRocm93IEludmFsaWRLZXJuZWxWZXJzaW9uRXJyb3IodmVyc2lvbik7CiAgICB9CiAgICBfYnl0ZU9mZnNldCA9IG9mZnNldDsKICAgIExpc3Q8aW50PiBjb21wb25lbnRGaWxlU2l6ZXMgPSBfaW5kZXhDb21wb25lbnRzKCk7CiAgICBpZiAoY29tcG9uZW50RmlsZVNpemVzLmxlbmd0aCA+IDEpIHsKICAgICAgX2Rpc2FibGVMYXp5UmVhZGluZyA9IHRydWU7CiAgICB9CiAgICBpbnQgY29tcG9uZW50RmlsZUluZGV4ID0gMDsKICAgIHdoaWxlIChfYnl0ZU9mZnNldCA8IF9ieXRlcy5sZW5ndGgpIHsKICAgICAgX3JlYWRPbmVDb21wb25lbnQoY29tcG9uZW50LCBjb21wb25lbnRGaWxlU2l6ZXNbY29tcG9uZW50RmlsZUluZGV4XSk7CiAgICAgICsrY29tcG9uZW50RmlsZUluZGV4OwogICAgfQoKICAgIGlmIChjaGVja0Nhbm9uaWNhbE5hbWVzKSB7CiAgICAgIF9jaGVja0Nhbm9uaWNhbE5hbWVDaGlsZHJlbihjb21wb25lbnQucm9vdCk7CiAgICB9CiAgfQoKICAvLy8gRGVzZXJpYWxpemVzIHRoZSBzb3VyY2UgYW5kIHN0b3JlcyBpdCBpbiBbY29tcG9uZW50XS4KICAvLy8KICAvLy8gVGhlIGlucHV0IGJ5dGVzIG1heSBjb250YWluIG11bHRpcGxlIGZpbGVzIGNvbmNhdGVuYXRlZC4KICB2b2lkIHJlYWRDb21wb25lbnRTb3VyY2UoQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgTGlzdDxpbnQ+IGNvbXBvbmVudEZpbGVTaXplcyA9IF9pbmRleENvbXBvbmVudHMoKTsKICAgIGlmIChjb21wb25lbnRGaWxlU2l6ZXMubGVuZ3RoID4gMSkgewogICAgICBfZGlzYWJsZUxhenlSZWFkaW5nID0gdHJ1ZTsKICAgIH0KICAgIGludCBjb21wb25lbnRGaWxlSW5kZXggPSAwOwogICAgd2hpbGUgKF9ieXRlT2Zmc2V0IDwgX2J5dGVzLmxlbmd0aCkgewogICAgICBfcmVhZE9uZUNvbXBvbmVudFNvdXJjZSgKICAgICAgICAgIGNvbXBvbmVudCwgY29tcG9uZW50RmlsZVNpemVzW2NvbXBvbmVudEZpbGVJbmRleF0pOwogICAgICArK2NvbXBvbmVudEZpbGVJbmRleDsKICAgIH0KICB9CgogIC8vLyBSZWFkcyBhIHNpbmdsZSBjb21wb25lbnQgZmlsZSBmcm9tIHRoZSBpbnB1dCBhbmQgbG9hZHMgaXQgaW50byBbY29tcG9uZW50XSwKICAvLy8gb3ZlcndyaXRpbmcgYW5kIHJldXNpbmcgYW55IGV4aXN0aW5nIGRhdGEgaW4gdGhlIGNvbXBvbmVudC4KICAvLy8KICAvLy8gV2hlbiBsaW5raW5nIHdpdGggYSBub24tZW1wdHkgY29tcG9uZW50LCBjYW5vbmljYWwgbmFtZXMgbXVzdCBoYXZlIGJlZW4KICAvLy8gY29tcHV0ZWQgYWhlYWQgb2YgdGltZS4KICAvLy8KICAvLy8gVGhpcyBzaG91bGQgKm9ubHkqIGJlIHVzZWQgd2hlbiB0aGVyZSBpcyBhIHJlYXNvbiB0byBub3QgYWxsb3cKICAvLy8gY29uY2F0ZW5hdGVkIGZpbGVzLgogIHZvaWQgcmVhZFNpbmdsZUZpbGVDb21wb25lbnQoQ29tcG9uZW50IGNvbXBvbmVudCwKICAgICAge2Jvb2wgY2hlY2tDYW5vbmljYWxOYW1lczogZmFsc2V9KSB7CiAgICBMaXN0PGludD4gY29tcG9uZW50RmlsZVNpemVzID0gX2luZGV4Q29tcG9uZW50cygpOwogICAgaWYgKGNvbXBvbmVudEZpbGVTaXplcy5pc0VtcHR5KSB0aHJvdyBmYWlsKCJpbnZhbGlkIGNvbXBvbmVudCBkYXRhIik7CiAgICBfcmVhZE9uZUNvbXBvbmVudChjb21wb25lbnQsIGNvbXBvbmVudEZpbGVTaXplc1swXSk7CiAgICBpZiAoX2J5dGVPZmZzZXQgPCBfYnl0ZXMubGVuZ3RoKSB7CiAgICAgIGlmIChfYnl0ZU9mZnNldCArIDMgPCBfYnl0ZXMubGVuZ3RoKSB7CiAgICAgICAgaW50IG1hZ2ljID0gcmVhZFVpbnQzMigpOwogICAgICAgIGlmIChtYWdpYyA9PSBUYWcuQ29tcG9uZW50RmlsZSkgewogICAgICAgICAgdGhyb3cgJ0NvbmNhdGVuYXRlZCBjb21wb25lbnQgZmlsZSBnaXZlbiB3aGVuIGEgc2luZ2xlIGNvbXBvbmVudCAnCiAgICAgICAgICAgICAgJ3dhcyBleHBlY3RlZC4nOwogICAgICAgIH0KICAgICAgfQogICAgICB0aHJvdyAnVW5yZWNvZ25pemVkIGJ5dGVzIGZvbGxvd2luZyBjb21wb25lbnQgZGF0YSc7CiAgICB9CgogICAgaWYgKGNoZWNrQ2Fub25pY2FsTmFtZXMpIHsKICAgICAgX2NoZWNrQ2Fub25pY2FsTmFtZUNoaWxkcmVuKGNvbXBvbmVudC5yb290KTsKICAgIH0KICB9CgogIHZvaWQgX2NoZWNrQ2Fub25pY2FsTmFtZUNoaWxkcmVuKENhbm9uaWNhbE5hbWUgcGFyZW50KSB7CiAgICBJdGVyYWJsZTxDYW5vbmljYWxOYW1lPiBwYXJlbnRDaGlsZHJlbiA9IHBhcmVudC5jaGlsZHJlbk9yTnVsbDsKICAgIGlmIChwYXJlbnRDaGlsZHJlbiAhPSBudWxsKSB7CiAgICAgIGZvciAoQ2Fub25pY2FsTmFtZSBjaGlsZCBpbiBwYXJlbnRDaGlsZHJlbikgewogICAgICAgIGlmIChjaGlsZC5uYW1lICE9ICdAbWV0aG9kcycgJiYKICAgICAgICAgICAgY2hpbGQubmFtZSAhPSAnQHR5cGVkZWZzJyAmJgogICAgICAgICAgICBjaGlsZC5uYW1lICE9ICdAZmllbGRzJyAmJgogICAgICAgICAgICBjaGlsZC5uYW1lICE9ICdAZ2V0dGVycycgJiYKICAgICAgICAgICAgY2hpbGQubmFtZSAhPSAnQHNldHRlcnMnICYmCiAgICAgICAgICAgIGNoaWxkLm5hbWUgIT0gJ0BmYWN0b3JpZXMnICYmCiAgICAgICAgICAgIGNoaWxkLm5hbWUgIT0gJ0Bjb25zdHJ1Y3RvcnMnKSB7CiAgICAgICAgICBib29sIGNoZWNrUmVmZXJlbmNlTm9kZSA9IHRydWU7CiAgICAgICAgICBpZiAoY2hpbGQucmVmZXJlbmNlID09IG51bGwpIHsKICAgICAgICAgICAgLy8gT0sgZm9yICJpZiBwcml2YXRlOiBVUkkgb2YgbGlicmFyeSIgcGFydCBvZiAiUXVhbGlmaWVkIG5hbWUiLi4uCiAgICAgICAgICAgIEl0ZXJhYmxlPENhbm9uaWNhbE5hbWU+IGNoaWxkcmVuID0gY2hpbGQuY2hpbGRyZW5Pck51bGw7CiAgICAgICAgICAgIGlmIChwYXJlbnQucGFyZW50ICE9IG51bGwgJiYKICAgICAgICAgICAgICAgIGNoaWxkcmVuICE9IG51bGwgJiYKICAgICAgICAgICAgICAgIGNoaWxkcmVuLmlzTm90RW1wdHkgJiYKICAgICAgICAgICAgICAgIGNoaWxkcmVuLmZpcnN0Lm5hbWUuc3RhcnRzV2l0aCgiXyIpKSB7CiAgICAgICAgICAgICAgLy8gT0sgdGhlbi4KICAgICAgICAgICAgICBjaGVja1JlZmVyZW5jZU5vZGUgPSBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aHJvdyBidWlsZENhbm9uaWNhbE5hbWVFcnJvcigKICAgICAgICAgICAgICAgICAgIk51bGwgcmVmZXJlbmNlICgke2NoaWxkLm5hbWV9KSAoJGNoaWxkKS4iLCBjaGlsZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChjaGVja1JlZmVyZW5jZU5vZGUpIHsKICAgICAgICAgICAgaWYgKGNoaWxkLnJlZmVyZW5jZS5jYW5vbmljYWxOYW1lICE9IGNoaWxkKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IENhbm9uaWNhbE5hbWVFcnJvcigKICAgICAgICAgICAgICAgICAgIkNhbm9uaWNhbCBuYW1lIGFuZCByZWZlcmVuY2UgZG9lc24ndCBhZ3JlZS4iKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY2hpbGQucmVmZXJlbmNlLm5vZGUgPT0gbnVsbCkgewogICAgICAgICAgICAgIHRocm93IGJ1aWxkQ2Fub25pY2FsTmFtZUVycm9yKAogICAgICAgICAgICAgICAgICAiUmVmZXJlbmNlIGlzIG51bGwgKCR7Y2hpbGQubmFtZX0pICgkY2hpbGQpLiIsIGNoaWxkKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBfY2hlY2tDYW5vbmljYWxOYW1lQ2hpbGRyZW4oY2hpbGQpOwogICAgICB9CiAgICB9CiAgfQoKICBDYW5vbmljYWxOYW1lRXJyb3IgYnVpbGRDYW5vbmljYWxOYW1lRXJyb3IoCiAgICAgIFN0cmluZyBtZXNzYWdlLCBDYW5vbmljYWxOYW1lIHByb2JsZW1Ob2RlKSB7CiAgICAvLyBTcGVjaWFsLWNhc2UgbWlzc2luZyBzZGsgZW50cmllcyBhcyB0aGF0IGlzIHByb2JhYmx5IGEgY2hhbmdlIHRvIHRoZQogICAgLy8gcGxhdGZvcm0gLSB0aGF0J3Mgc29tZXRoaW5nIHdlIG1pZ2h0IHdhbnQgdG8gcmVhY3QgZGlmZmVyZW50bHkgdG8uCiAgICBTdHJpbmcgbGlicmFyeVVyaSA9IHByb2JsZW1Ob2RlPy5ub25Sb290VG9wPy5uYW1lID8/ICIiOwogICAgaWYgKGxpYnJhcnlVcmkuc3RhcnRzV2l0aCgiZGFydDoiKSkgewogICAgICByZXR1cm4gbmV3IENhbm9uaWNhbE5hbWVTZGtFcnJvcihtZXNzYWdlKTsKICAgIH0KICAgIHJldHVybiBuZXcgQ2Fub25pY2FsTmFtZUVycm9yKG1lc3NhZ2UpOwogIH0KCiAgX0NvbXBvbmVudEluZGV4IF9yZWFkQ29tcG9uZW50SW5kZXgoaW50IGNvbXBvbmVudEZpbGVTaXplKSB7CiAgICBpbnQgc2F2ZWRCeXRlSW5kZXggPSBfYnl0ZU9mZnNldDsKCiAgICBfQ29tcG9uZW50SW5kZXggcmVzdWx0ID0gbmV3IF9Db21wb25lbnRJbmRleCgpOwoKICAgIC8vIFRoZXJlIGFyZSB0d28gZmllbGRzOiBmaWxlIHNpemUgYW5kIGxpYnJhcnkgY291bnQuCiAgICBfYnl0ZU9mZnNldCA9IF9jb21wb25lbnRTdGFydE9mZnNldCArIGNvbXBvbmVudEZpbGVTaXplIC0gKDIpICogNDsKICAgIHJlc3VsdC5saWJyYXJ5Q291bnQgPSByZWFkVWludDMyKCk7CiAgICAvLyBMaWJyYXJ5IG9mZnNldHMgYXJlIHVzZWQgZm9yIHN0YXJ0IGFuZCBlbmQgb2Zmc2V0cywgc28gdGhlcmUgaXMgb25lIGV4dHJhCiAgICAvLyBlbGVtZW50IHRoYXQgdGhpcyB0aGUgZW5kIG9mZnNldCBvZiB0aGUgbGFzdCBsaWJyYXJ5CiAgICByZXN1bHQubGlicmFyeU9mZnNldHMgPSBuZXcgTGlzdDxpbnQ+KHJlc3VsdC5saWJyYXJ5Q291bnQgKyAxKTsKICAgIHJlc3VsdC5jb21wb25lbnRGaWxlU2l6ZUluQnl0ZXMgPSByZWFkVWludDMyKCk7CiAgICBpZiAocmVzdWx0LmNvbXBvbmVudEZpbGVTaXplSW5CeXRlcyAhPSBjb21wb25lbnRGaWxlU2l6ZSkgewogICAgICB0aHJvdyAiTWFsZm9ybWVkIGJpbmFyeTogVGhpcyBjb21wb25lbnQgZmlsZSdzIGNvbXBvbmVudCBpbmRleCBpbmRpY2F0ZXMgdGhhdCIKICAgICAgICAgICIgdGhlIGZpbGUgc2l6ZSBzaG91bGQgYmUgJGNvbXBvbmVudEZpbGVTaXplIGJ1dCBvdGhlciBjb21wb25lbnQgaW5kZXhlcyIKICAgICAgICAgICIgaGFzIGluZGljYXRlZCB0aGF0IHRoZSBzaXplIHNob3VsZCBiZSAiCiAgICAgICAgICAiJHtyZXN1bHQuY29tcG9uZW50RmlsZVNpemVJbkJ5dGVzfS4iOwogICAgfQoKICAgIC8vIFNraXAgdG8gdGhlIHN0YXJ0IG9mIHRoZSBpbmRleC4KICAgIF9ieXRlT2Zmc2V0IC09CiAgICAgICAgKChyZXN1bHQubGlicmFyeUNvdW50ICsgMSkgKyBfQ29tcG9uZW50SW5kZXgubnVtYmVyT2ZGaXhlZEZpZWxkcykgKiA0OwoKICAgIC8vIE5vdyByZWFkIHRoZSBjb21wb25lbnQgaW5kZXguCiAgICByZXN1bHQuYmluYXJ5T2Zmc2V0Rm9yU291cmNlVGFibGUgPSBfY29tcG9uZW50U3RhcnRPZmZzZXQgKyByZWFkVWludDMyKCk7CiAgICByZXN1bHQuYmluYXJ5T2Zmc2V0Rm9yQ2Fub25pY2FsTmFtZXMgPSBfY29tcG9uZW50U3RhcnRPZmZzZXQgKyByZWFkVWludDMyKCk7CiAgICByZXN1bHQuYmluYXJ5T2Zmc2V0Rm9yTWV0YWRhdGFQYXlsb2FkcyA9CiAgICAgICAgX2NvbXBvbmVudFN0YXJ0T2Zmc2V0ICsgcmVhZFVpbnQzMigpOwogICAgcmVzdWx0LmJpbmFyeU9mZnNldEZvck1ldGFkYXRhTWFwcGluZ3MgPQogICAgICAgIF9jb21wb25lbnRTdGFydE9mZnNldCArIHJlYWRVaW50MzIoKTsKICAgIHJlc3VsdC5iaW5hcnlPZmZzZXRGb3JTdHJpbmdUYWJsZSA9IF9jb21wb25lbnRTdGFydE9mZnNldCArIHJlYWRVaW50MzIoKTsKICAgIHJlc3VsdC5iaW5hcnlPZmZzZXRGb3JDb25zdGFudFRhYmxlID0gX2NvbXBvbmVudFN0YXJ0T2Zmc2V0ICsgcmVhZFVpbnQzMigpOwogICAgcmVzdWx0Lm1haW5NZXRob2RSZWZlcmVuY2UgPSByZWFkVWludDMyKCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlc3VsdC5saWJyYXJ5Q291bnQgKyAxOyArK2kpIHsKICAgICAgcmVzdWx0LmxpYnJhcnlPZmZzZXRzW2ldID0gX2NvbXBvbmVudFN0YXJ0T2Zmc2V0ICsgcmVhZFVpbnQzMigpOwogICAgfQoKICAgIF9ieXRlT2Zmc2V0ID0gc2F2ZWRCeXRlSW5kZXg7CgogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgX3JlYWRPbmVDb21wb25lbnRTb3VyY2UoQ29tcG9uZW50IGNvbXBvbmVudCwgaW50IGNvbXBvbmVudEZpbGVTaXplKSB7CiAgICBfY29tcG9uZW50U3RhcnRPZmZzZXQgPSBfYnl0ZU9mZnNldDsKCiAgICBmaW5hbCBpbnQgbWFnaWMgPSByZWFkVWludDMyKCk7CiAgICBpZiAobWFnaWMgIT0gVGFnLkNvbXBvbmVudEZpbGUpIHsKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcignTm90IGEgLmRpbGwgZmlsZSAod3JvbmcgbWFnaWMgbnVtYmVyKS4nKTsKICAgIH0KCiAgICBmaW5hbCBpbnQgZm9ybWF0VmVyc2lvbiA9IHJlYWRVaW50MzIoKTsKICAgIGlmIChmb3JtYXRWZXJzaW9uICE9IFRhZy5CaW5hcnlGb3JtYXRWZXJzaW9uKSB7CiAgICAgIHRocm93IEludmFsaWRLZXJuZWxWZXJzaW9uRXJyb3IoZm9ybWF0VmVyc2lvbik7CiAgICB9CgogICAgLy8gUmVhZCBjb21wb25lbnQgaW5kZXggZnJvbSB0aGUgZW5kIG9mIHRoaXMgQ29tcG9uZW50RmlsZXMgc2VyaWFsaXplZCBkYXRhLgogICAgX0NvbXBvbmVudEluZGV4IGluZGV4ID0gX3JlYWRDb21wb25lbnRJbmRleChjb21wb25lbnRGaWxlU2l6ZSk7CgogICAgX2J5dGVPZmZzZXQgPSBpbmRleC5iaW5hcnlPZmZzZXRGb3JTb3VyY2VUYWJsZTsKICAgIE1hcDxVcmksIFNvdXJjZT4gdXJpVG9Tb3VyY2UgPSByZWFkVXJpVG9Tb3VyY2UoKTsKICAgIGNvbXBvbmVudC51cmlUb1NvdXJjZS5hZGRBbGwodXJpVG9Tb3VyY2UpOwoKICAgIF9ieXRlT2Zmc2V0ID0gX2NvbXBvbmVudFN0YXJ0T2Zmc2V0ICsgY29tcG9uZW50RmlsZVNpemU7CiAgfQoKICB2b2lkIF9yZWFkT25lQ29tcG9uZW50KENvbXBvbmVudCBjb21wb25lbnQsIGludCBjb21wb25lbnRGaWxlU2l6ZSkgewogICAgX2NvbXBvbmVudFN0YXJ0T2Zmc2V0ID0gX2J5dGVPZmZzZXQ7CgogICAgZmluYWwgaW50IG1hZ2ljID0gcmVhZFVpbnQzMigpOwogICAgaWYgKG1hZ2ljICE9IFRhZy5Db21wb25lbnRGaWxlKSB7CiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoJ05vdCBhIC5kaWxsIGZpbGUgKHdyb25nIG1hZ2ljIG51bWJlcikuJyk7CiAgICB9CgogICAgZmluYWwgaW50IGZvcm1hdFZlcnNpb24gPSByZWFkVWludDMyKCk7CiAgICBpZiAoZm9ybWF0VmVyc2lvbiAhPSBUYWcuQmluYXJ5Rm9ybWF0VmVyc2lvbikgewogICAgICB0aHJvdyBJbnZhbGlkS2VybmVsVmVyc2lvbkVycm9yKGZvcm1hdFZlcnNpb24pOwogICAgfQoKICAgIExpc3Q8U3RyaW5nPiBwcm9ibGVtc0FzSnNvbiA9IHJlYWRMaXN0T2ZTdHJpbmdzKCk7CiAgICBpZiAocHJvYmxlbXNBc0pzb24gIT0gbnVsbCkgewogICAgICBjb21wb25lbnQucHJvYmxlbXNBc0pzb24gPz89IDxTdHJpbmc+W107CiAgICAgIGNvbXBvbmVudC5wcm9ibGVtc0FzSnNvbi5hZGRBbGwocHJvYmxlbXNBc0pzb24pOwogICAgfQoKICAgIC8vIFJlYWQgY29tcG9uZW50IGluZGV4IGZyb20gdGhlIGVuZCBvZiB0aGlzIENvbXBvbmVudEZpbGVzIHNlcmlhbGl6ZWQgZGF0YS4KICAgIF9Db21wb25lbnRJbmRleCBpbmRleCA9IF9yZWFkQ29tcG9uZW50SW5kZXgoY29tcG9uZW50RmlsZVNpemUpOwoKICAgIF9ieXRlT2Zmc2V0ID0gaW5kZXguYmluYXJ5T2Zmc2V0Rm9yU3RyaW5nVGFibGU7CiAgICByZWFkU3RyaW5nVGFibGUoX3N0cmluZ1RhYmxlKTsKCiAgICBfYnl0ZU9mZnNldCA9IGluZGV4LmJpbmFyeU9mZnNldEZvckNhbm9uaWNhbE5hbWVzOwogICAgcmVhZExpbmtUYWJsZShjb21wb25lbnQucm9vdCk7CgogICAgLy8gVE9ETyhhbGV4bWFya292KTogcmV2ZXJzZSBtZXRhZGF0YSBtYXBwaW5ncyBhbmQgcmVhZCBmb3J3YXJkcwogICAgX2J5dGVPZmZzZXQgPSBpbmRleC5iaW5hcnlPZmZzZXRGb3JTdHJpbmdUYWJsZTsgLy8gUmVhZCBiYWNrd2FyZHMuCiAgICBfcmVhZE1ldGFkYXRhTWFwcGluZ3MoY29tcG9uZW50LCBpbmRleC5iaW5hcnlPZmZzZXRGb3JNZXRhZGF0YVBheWxvYWRzKTsKCiAgICBfYXNzb2NpYXRlTWV0YWRhdGEoY29tcG9uZW50LCBfY29tcG9uZW50U3RhcnRPZmZzZXQpOwoKICAgIF9ieXRlT2Zmc2V0ID0gaW5kZXguYmluYXJ5T2Zmc2V0Rm9yU291cmNlVGFibGU7CiAgICBNYXA8VXJpLCBTb3VyY2U+IHVyaVRvU291cmNlID0gcmVhZFVyaVRvU291cmNlKCk7CiAgICBjb21wb25lbnQudXJpVG9Tb3VyY2UuYWRkQWxsKHVyaVRvU291cmNlKTsKCiAgICBfYnl0ZU9mZnNldCA9IGluZGV4LmJpbmFyeU9mZnNldEZvckNvbnN0YW50VGFibGU7CiAgICByZWFkQ29uc3RhbnRUYWJsZSgpOwoKICAgIGludCBudW1iZXJPZkxpYnJhcmllcyA9IGluZGV4LmxpYnJhcnlDb3VudDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyT2ZMaWJyYXJpZXM7ICsraSkgewogICAgICBfYnl0ZU9mZnNldCA9IGluZGV4LmxpYnJhcnlPZmZzZXRzW2ldOwogICAgICByZWFkTGlicmFyeShjb21wb25lbnQsIGluZGV4LmxpYnJhcnlPZmZzZXRzW2kgKyAxXSk7CiAgICB9CgogICAgdmFyIG1haW5NZXRob2QgPQogICAgICAgIGdldE1lbWJlclJlZmVyZW5jZUZyb21JbnQoaW5kZXgubWFpbk1ldGhvZFJlZmVyZW5jZSwgYWxsb3dOdWxsOiB0cnVlKTsKICAgIGNvbXBvbmVudC5tYWluTWV0aG9kTmFtZSA/Pz0gbWFpbk1ldGhvZDsKCiAgICBfYnl0ZU9mZnNldCA9IF9jb21wb25lbnRTdGFydE9mZnNldCArIGNvbXBvbmVudEZpbGVTaXplOwogIH0KCiAgLy8vIFJlYWQgYSBsaXN0IG9mIHN0cmluZ3MuIElmIHRoZSBsaXN0IGlzIGVtcHR5LCBbbnVsbF0gaXMgcmV0dXJuZWQuCiAgTGlzdDxTdHJpbmc+IHJlYWRMaXN0T2ZTdHJpbmdzKCkgewogICAgaW50IGxlbmd0aCA9IHJlYWRVSW50KCk7CiAgICBpZiAobGVuZ3RoID09IDApIHJldHVybiBudWxsOwogICAgTGlzdDxTdHJpbmc+IHN0cmluZ3MgPQogICAgICAgIG5ldyBMaXN0PFN0cmluZz4uZmlsbGVkKGxlbmd0aCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBTdHJpbmcgcyA9IGNvbnN0IFV0ZjhEZWNvZGVyKCkuY29udmVydChyZWFkQnl0ZUxpc3QoKSk7CiAgICAgIHN0cmluZ3NbaV0gPSBzOwogICAgfQogICAgcmV0dXJuIHN0cmluZ3M7CiAgfQoKICBNYXA8VXJpLCBTb3VyY2U+IHJlYWRVcmlUb1NvdXJjZSgpIHsKICAgIGludCBsZW5ndGggPSByZWFkVWludDMyKCk7CgogICAgLy8gUmVhZCBkYXRhLgogICAgX3NvdXJjZVVyaVRhYmxlLmxlbmd0aCA9IGxlbmd0aDsKICAgIE1hcDxVcmksIFNvdXJjZT4gdXJpVG9Tb3VyY2UgPSA8VXJpLCBTb3VyY2U+e307CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIExpc3Q8aW50PiB1cmlCeXRlcyA9IHJlYWRCeXRlTGlzdCgpOwogICAgICBVcmkgdXJpID0gdXJpQnl0ZXMuaXNFbXB0eQogICAgICAgICAgPyBudWxsCiAgICAgICAgICA6IFVyaS5wYXJzZShjb25zdCBVdGY4RGVjb2RlcigpLmNvbnZlcnQodXJpQnl0ZXMpKTsKICAgICAgX3NvdXJjZVVyaVRhYmxlW2ldID0gdXJpOwogICAgICBMaXN0PGludD4gc291cmNlQ29kZSA9IHJlYWRCeXRlTGlzdCgpOwogICAgICBpbnQgbGluZUNvdW50ID0gcmVhZFVJbnQoKTsKICAgICAgTGlzdDxpbnQ+IGxpbmVTdGFydHMgPSBuZXcgTGlzdDxpbnQ+KGxpbmVDb3VudCk7CiAgICAgIGludCBwcmV2aW91c0xpbmVTdGFydCA9IDA7CiAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbGluZUNvdW50OyArK2opIHsKICAgICAgICBpbnQgbGluZVN0YXJ0ID0gcmVhZFVJbnQoKSArIHByZXZpb3VzTGluZVN0YXJ0OwogICAgICAgIGxpbmVTdGFydHNbal0gPSBsaW5lU3RhcnQ7CiAgICAgICAgcHJldmlvdXNMaW5lU3RhcnQgPSBsaW5lU3RhcnQ7CiAgICAgIH0KICAgICAgTGlzdDxpbnQ+IGltcG9ydFVyaUJ5dGVzID0gcmVhZEJ5dGVMaXN0KCk7CiAgICAgIFVyaSBpbXBvcnRVcmkgPSBpbXBvcnRVcmlCeXRlcy5pc0VtcHR5CiAgICAgICAgICA/IG51bGwKICAgICAgICAgIDogVXJpLnBhcnNlKGNvbnN0IFV0ZjhEZWNvZGVyKCkuY29udmVydChpbXBvcnRVcmlCeXRlcykpOwogICAgICB1cmlUb1NvdXJjZVt1cmldID0gbmV3IFNvdXJjZShsaW5lU3RhcnRzLCBzb3VyY2VDb2RlLCBpbXBvcnRVcmksIHVyaSk7CiAgICB9CgogICAgLy8gUmVhZCBpbmRleC4KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgcmVhZFVpbnQzMigpOwogICAgfQogICAgcmV0dXJuIHVyaVRvU291cmNlOwogIH0KCiAgQ2Fub25pY2FsTmFtZSByZWFkQ2Fub25pY2FsTmFtZVJlZmVyZW5jZSgpIHsKICAgIHZhciBpbmRleCA9IHJlYWRVSW50KCk7CiAgICBpZiAoaW5kZXggPT0gMCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX2xpbmtUYWJsZVtpbmRleCAtIDFdOwogIH0KCiAgQ2Fub25pY2FsTmFtZSBnZXRDYW5vbmljYWxOYW1lUmVmZXJlbmNlRnJvbUludChpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA9PSAwKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfbGlua1RhYmxlW2luZGV4IC0gMV07CiAgfQoKICBSZWZlcmVuY2UgcmVhZExpYnJhcnlSZWZlcmVuY2Uoe2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIENhbm9uaWNhbE5hbWUgY2Fub25pY2FsTmFtZSA9IHJlYWRDYW5vbmljYWxOYW1lUmVmZXJlbmNlKCk7CiAgICBpZiAoY2Fub25pY2FsTmFtZSAhPSBudWxsKSByZXR1cm4gY2Fub25pY2FsTmFtZS5nZXRSZWZlcmVuY2UoKTsKICAgIGlmIChhbGxvd051bGwpIHJldHVybiBudWxsOwogICAgdGhyb3cgJ0V4cGVjdGVkIGEgbGlicmFyeSByZWZlcmVuY2UgdG8gYmUgdmFsaWQgYnV0IHdhcyBgbnVsbGAuJzsKICB9CgogIExpYnJhcnlEZXBlbmRlbmN5IHJlYWRMaWJyYXJ5RGVwZW5kZW5jeVJlZmVyZW5jZSgpIHsKICAgIGludCBpbmRleCA9IHJlYWRVSW50KCk7CiAgICByZXR1cm4gX2N1cnJlbnRMaWJyYXJ5LmRlcGVuZGVuY2llc1tpbmRleF07CiAgfQoKICBSZWZlcmVuY2UgcmVhZENsYXNzUmVmZXJlbmNlKHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICB2YXIgbmFtZSA9IHJlYWRDYW5vbmljYWxOYW1lUmVmZXJlbmNlKCk7CiAgICBpZiAobmFtZSA9PSBudWxsICYmICFhbGxvd051bGwpIHsKICAgICAgdGhyb3cgJ0V4cGVjdGVkIGEgY2xhc3MgcmVmZXJlbmNlIHRvIGJlIHZhbGlkIGJ1dCB3YXMgYG51bGxgLic7CiAgICB9CiAgICByZXR1cm4gbmFtZT8uZ2V0UmVmZXJlbmNlKCk7CiAgfQoKICBSZWZlcmVuY2UgcmVhZE1lbWJlclJlZmVyZW5jZSh7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgdmFyIG5hbWUgPSByZWFkQ2Fub25pY2FsTmFtZVJlZmVyZW5jZSgpOwogICAgaWYgKG5hbWUgPT0gbnVsbCAmJiAhYWxsb3dOdWxsKSB7CiAgICAgIHRocm93ICdFeHBlY3RlZCBhIG1lbWJlciByZWZlcmVuY2UgdG8gYmUgdmFsaWQgYnV0IHdhcyBgbnVsbGAuJzsKICAgIH0KICAgIHJldHVybiBuYW1lPy5nZXRSZWZlcmVuY2UoKTsKICB9CgogIFJlZmVyZW5jZSBnZXRNZW1iZXJSZWZlcmVuY2VGcm9tSW50KGludCBpbmRleCwge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIHZhciBuYW1lID0gZ2V0Q2Fub25pY2FsTmFtZVJlZmVyZW5jZUZyb21JbnQoaW5kZXgpOwogICAgaWYgKG5hbWUgPT0gbnVsbCAmJiAhYWxsb3dOdWxsKSB7CiAgICAgIHRocm93ICdFeHBlY3RlZCBhIG1lbWJlciByZWZlcmVuY2UgdG8gYmUgdmFsaWQgYnV0IHdhcyBgbnVsbGAuJzsKICAgIH0KICAgIHJldHVybiBuYW1lPy5nZXRSZWZlcmVuY2UoKTsKICB9CgogIFJlZmVyZW5jZSByZWFkVHlwZWRlZlJlZmVyZW5jZSgpIHsKICAgIHJldHVybiByZWFkQ2Fub25pY2FsTmFtZVJlZmVyZW5jZSgpPy5nZXRSZWZlcmVuY2UoKTsKICB9CgogIE5hbWUgcmVhZE5hbWUoKSB7CiAgICBTdHJpbmcgdGV4dCA9IHJlYWRTdHJpbmdSZWZlcmVuY2UoKTsKICAgIGlmICh0ZXh0LmlzTm90RW1wdHkgJiYgdGV4dFswXSA9PSAnXycpIHsKICAgICAgcmV0dXJuIG5ldyBOYW1lLmJ5UmVmZXJlbmNlKHRleHQsIHJlYWRMaWJyYXJ5UmVmZXJlbmNlKCkpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBOYW1lKHRleHQpOwogICAgfQogIH0KCiAgTGlicmFyeSByZWFkTGlicmFyeShDb21wb25lbnQgY29tcG9uZW50LCBpbnQgZW5kT2Zmc2V0KSB7CiAgICAvLyBSZWFkIGluZGV4LgogICAgaW50IHNhdmVkQnl0ZU9mZnNldCA9IF9ieXRlT2Zmc2V0OwoKICAgIC8vIFRoZXJlIGlzIGEgZmllbGQgZm9yIHRoZSBwcm9jZWR1cmUgY291bnQuCiAgICBfYnl0ZU9mZnNldCA9IGVuZE9mZnNldCAtICgxKSAqIDQ7CiAgICBpbnQgcHJvY2VkdXJlQ291bnQgPSByZWFkVWludDMyKCk7CiAgICBMaXN0PGludD4gcHJvY2VkdXJlT2Zmc2V0cyA9IG5ldyBMaXN0PGludD4ocHJvY2VkdXJlQ291bnQgKyAxKTsKCiAgICAvLyBUaGVyZSBpcyBhIGZpZWxkIGZvciB0aGUgcHJvY2VkdXJlIGNvdW50LCB0aGF0IG51bWJlciArIDEgKGZvciB0aGUgZW5kKQogICAgLy8gb2Zmc2V0cywgYW5kIHRoZW4gdGhlIGNsYXNzIGNvdW50IChpLmUuIHByb2NlZHVyZSBjb3VudCArIDMgZmllbGRzKS4KICAgIF9ieXRlT2Zmc2V0ID0gZW5kT2Zmc2V0IC0gKHByb2NlZHVyZUNvdW50ICsgMykgKiA0OwogICAgaW50IGNsYXNzQ291bnQgPSByZWFkVWludDMyKCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb2NlZHVyZUNvdW50ICsgMTsgaSsrKSB7CiAgICAgIHByb2NlZHVyZU9mZnNldHNbaV0gPSBfY29tcG9uZW50U3RhcnRPZmZzZXQgKyByZWFkVWludDMyKCk7CiAgICB9CiAgICBMaXN0PGludD4gY2xhc3NPZmZzZXRzID0gbmV3IExpc3Q8aW50PihjbGFzc0NvdW50ICsgMSk7CgogICAgLy8gVGhlcmUgaXMgYSBmaWVsZCBmb3IgdGhlIHByb2NlZHVyZSBjb3VudCwgdGhhdCBudW1iZXIgKyAxIChmb3IgdGhlIGVuZCkKICAgIC8vIG9mZnNldHMsIHRoZW4gdGhlIGNsYXNzIGNvdW50IGFuZCB0aGF0IG51bWJlciArIDEgKGZvciB0aGUgZW5kKSBvZmZzZXRzLgogICAgLy8gKGkuZS4gcHJvY2VkdXJlIGNvdW50ICsgY2xhc3MgY291bnQgKyA0IGZpZWxkcykuCiAgICBfYnl0ZU9mZnNldCA9IGVuZE9mZnNldCAtIChwcm9jZWR1cmVDb3VudCArIGNsYXNzQ291bnQgKyA0KSAqIDQ7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNsYXNzQ291bnQgKyAxOyBpKyspIHsKICAgICAgY2xhc3NPZmZzZXRzW2ldID0gX2NvbXBvbmVudFN0YXJ0T2Zmc2V0ICsgcmVhZFVpbnQzMigpOwogICAgfQogICAgX2J5dGVPZmZzZXQgPSBzYXZlZEJ5dGVPZmZzZXQ7CgogICAgaW50IGZsYWdzID0gcmVhZEJ5dGUoKTsKICAgIGJvb2wgaXNFeHRlcm5hbCA9IChmbGFncyAmIExpYnJhcnkuRXh0ZXJuYWxGbGFnKSAhPSAwOwogICAgX2lzUmVhZGluZ0xpYnJhcnlJbXBsZW1lbnRhdGlvbiA9ICFpc0V4dGVybmFsOwoKICAgIGludCBsYW5ndWFnZVZlcnNpb25NYWpvciA9IHJlYWRVSW50KCk7CiAgICBpbnQgbGFuZ3VhZ2VWZXJzaW9uTWlub3IgPSByZWFkVUludCgpOwoKICAgIHZhciBjYW5vbmljYWxOYW1lID0gcmVhZENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoKTsKICAgIFJlZmVyZW5jZSByZWZlcmVuY2UgPSBjYW5vbmljYWxOYW1lLmdldFJlZmVyZW5jZSgpOwogICAgTGlicmFyeSBsaWJyYXJ5ID0gcmVmZXJlbmNlLm5vZGU7CiAgICBpZiAoYWx3YXlzQ3JlYXRlTmV3TmFtZWROb2RlcykgewogICAgICBsaWJyYXJ5ID0gbnVsbDsKICAgIH0KICAgIGJvb2wgc2hvdWxkV3JpdGVEYXRhID0gbGlicmFyeSA9PSBudWxsIHx8IF9pc1JlYWRpbmdMaWJyYXJ5SW1wbGVtZW50YXRpb247CiAgICBpZiAobGlicmFyeSA9PSBudWxsKSB7CiAgICAgIGxpYnJhcnkgPQogICAgICAgICAgbmV3IExpYnJhcnkoVXJpLnBhcnNlKGNhbm9uaWNhbE5hbWUubmFtZSksIHJlZmVyZW5jZTogcmVmZXJlbmNlKTsKICAgICAgY29tcG9uZW50LmxpYnJhcmllcy5hZGQobGlicmFyeS4ucGFyZW50ID0gY29tcG9uZW50KTsKICAgIH0KICAgIF9jdXJyZW50TGlicmFyeSA9IGxpYnJhcnk7CiAgICBTdHJpbmcgbmFtZSA9IHJlYWRTdHJpbmdPck51bGxJZkVtcHR5KCk7CgogICAgLy8gVE9ETyhqZW5zaik6IFdlIGN1cnJlbnRseSBzYXZlIChhbG1vc3QgdGhlIHNhbWUpIHVyaSB0d2ljZS4KICAgIFVyaSBmaWxlVXJpID0gcmVhZFVyaVJlZmVyZW5jZSgpOwoKICAgIExpc3Q8U3RyaW5nPiBwcm9ibGVtc0FzSnNvbiA9IHJlYWRMaXN0T2ZTdHJpbmdzKCk7CgogICAgaWYgKHNob3VsZFdyaXRlRGF0YSkgewogICAgICBsaWJyYXJ5LmZsYWdzID0gZmxhZ3M7CiAgICAgIGxpYnJhcnkuc2V0TGFuZ3VhZ2VWZXJzaW9uKGxhbmd1YWdlVmVyc2lvbk1ham9yLCBsYW5ndWFnZVZlcnNpb25NaW5vcik7CiAgICAgIGxpYnJhcnkubmFtZSA9IG5hbWU7CiAgICAgIGxpYnJhcnkuZmlsZVVyaSA9IGZpbGVVcmk7CiAgICAgIGxpYnJhcnkucHJvYmxlbXNBc0pzb24gPSBwcm9ibGVtc0FzSnNvbjsKICAgIH0KCiAgICBhc3NlcnQoKCkgewogICAgICBkZWJ1Z1BhdGguYWRkKGxpYnJhcnkubmFtZSA/PyBsaWJyYXJ5LmltcG9ydFVyaT8udG9TdHJpbmcoKSA/PyAnbGlicmFyeScpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0oKSk7CgogICAgaWYgKHNob3VsZFdyaXRlRGF0YSkgewogICAgICBfZmlsbFRyZWVOb2RlTGlzdCgKICAgICAgICAgIGxpYnJhcnkuYW5ub3RhdGlvbnMsIChpbmRleCkgPT4gcmVhZEV4cHJlc3Npb24oKSwgbGlicmFyeSk7CiAgICB9IGVsc2UgewogICAgICBfc2tpcE5vZGVMaXN0KHJlYWRFeHByZXNzaW9uKTsKICAgIH0KICAgIF9yZWFkTGlicmFyeURlcGVuZGVuY2llcyhsaWJyYXJ5KTsKICAgIF9yZWFkQWRkaXRpb25hbEV4cG9ydHMobGlicmFyeSk7CiAgICBfcmVhZExpYnJhcnlQYXJ0cyhsaWJyYXJ5KTsKICAgIF9tZXJnZU5hbWVkTm9kZUxpc3QobGlicmFyeS50eXBlZGVmcywgKGluZGV4KSA9PiByZWFkVHlwZWRlZigpLCBsaWJyYXJ5KTsKCiAgICBfbWVyZ2VOYW1lZE5vZGVMaXN0KGxpYnJhcnkuY2xhc3NlcywgKGluZGV4KSB7CiAgICAgIF9ieXRlT2Zmc2V0ID0gY2xhc3NPZmZzZXRzW2luZGV4XTsKICAgICAgcmV0dXJuIHJlYWRDbGFzcyhjbGFzc09mZnNldHNbaW5kZXggKyAxXSk7CiAgICB9LCBsaWJyYXJ5KTsKICAgIF9ieXRlT2Zmc2V0ID0gY2xhc3NPZmZzZXRzLmxhc3Q7CgogICAgX21lcmdlTmFtZWROb2RlTGlzdChsaWJyYXJ5LmV4dGVuc2lvbnMsIChpbmRleCkgewogICAgICByZXR1cm4gcmVhZEV4dGVuc2lvbigpOwogICAgfSwgbGlicmFyeSk7CgogICAgX21lcmdlTmFtZWROb2RlTGlzdChsaWJyYXJ5LmZpZWxkcywgKGluZGV4KSA9PiByZWFkRmllbGQoKSwgbGlicmFyeSk7CiAgICBfbWVyZ2VOYW1lZE5vZGVMaXN0KGxpYnJhcnkucHJvY2VkdXJlcywgKGluZGV4KSB7CiAgICAgIF9ieXRlT2Zmc2V0ID0gcHJvY2VkdXJlT2Zmc2V0c1tpbmRleF07CiAgICAgIHJldHVybiByZWFkUHJvY2VkdXJlKHByb2NlZHVyZU9mZnNldHNbaW5kZXggKyAxXSk7CiAgICB9LCBsaWJyYXJ5KTsKICAgIF9ieXRlT2Zmc2V0ID0gcHJvY2VkdXJlT2Zmc2V0cy5sYXN0OwoKICAgIGFzc2VydCgoKF8pID0+IHRydWUpKGRlYnVnUGF0aC5yZW1vdmVMYXN0KCkpKTsKICAgIF9jdXJyZW50TGlicmFyeSA9IG51bGw7CiAgICByZXR1cm4gbGlicmFyeTsKICB9CgogIHZvaWQgX3JlYWRMaWJyYXJ5RGVwZW5kZW5jaWVzKExpYnJhcnkgbGlicmFyeSkgewogICAgaW50IGxlbmd0aCA9IHJlYWRVSW50KCk7CiAgICBsaWJyYXJ5LmRlcGVuZGVuY2llcy5sZW5ndGggPSBsZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIGxpYnJhcnkuZGVwZW5kZW5jaWVzW2ldID0gcmVhZExpYnJhcnlEZXBlbmRlbmN5KGxpYnJhcnkpOwogICAgfQogIH0KCiAgTGlicmFyeURlcGVuZGVuY3kgcmVhZExpYnJhcnlEZXBlbmRlbmN5KExpYnJhcnkgbGlicmFyeSkgewogICAgdmFyIGZpbGVPZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICB2YXIgZmxhZ3MgPSByZWFkQnl0ZSgpOwogICAgdmFyIGFubm90YXRpb25zID0gcmVhZEV4cHJlc3Npb25MaXN0KCk7CiAgICB2YXIgdGFyZ2V0TGlicmFyeSA9IHJlYWRMaWJyYXJ5UmVmZXJlbmNlKGFsbG93TnVsbDogdHJ1ZSk7CiAgICB2YXIgcHJlZml4TmFtZSA9IHJlYWRTdHJpbmdPck51bGxJZkVtcHR5KCk7CiAgICB2YXIgbmFtZXMgPSByZWFkQ29tYmluYXRvckxpc3QoKTsKICAgIHJldHVybiBuZXcgTGlicmFyeURlcGVuZGVuY3kuYnlSZWZlcmVuY2UoCiAgICAgICAgZmxhZ3MsIGFubm90YXRpb25zLCB0YXJnZXRMaWJyYXJ5LCBwcmVmaXhOYW1lLCBuYW1lcykKICAgICAgLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldAogICAgICAuLnBhcmVudCA9IGxpYnJhcnk7CiAgfQoKICB2b2lkIF9yZWFkQWRkaXRpb25hbEV4cG9ydHMoTGlicmFyeSBsaWJyYXJ5KSB7CiAgICBpbnQgbnVtRXhwb3J0ZWRSZWZlcmVuY2UgPSByZWFkVUludCgpOwogICAgaWYgKG51bUV4cG9ydGVkUmVmZXJlbmNlICE9IDApIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1FeHBvcnRlZFJlZmVyZW5jZTsgaSsrKSB7CiAgICAgICAgQ2Fub25pY2FsTmFtZSBleHBvcnRlZE5hbWUgPSByZWFkQ2Fub25pY2FsTmFtZVJlZmVyZW5jZSgpOwogICAgICAgIFJlZmVyZW5jZSByZWZlcmVuY2UgPSBleHBvcnRlZE5hbWUuZ2V0UmVmZXJlbmNlKCk7CiAgICAgICAgbGlicmFyeS5hZGRpdGlvbmFsRXhwb3J0cy5hZGQocmVmZXJlbmNlKTsKICAgICAgfQogICAgfQogIH0KCiAgQ29tYmluYXRvciByZWFkQ29tYmluYXRvcigpIHsKICAgIHZhciBpc1Nob3cgPSByZWFkQnl0ZSgpID09IDE7CiAgICB2YXIgbmFtZXMgPSByZWFkU3RyaW5nUmVmZXJlbmNlTGlzdCgpOwogICAgcmV0dXJuIG5ldyBDb21iaW5hdG9yKGlzU2hvdywgbmFtZXMpOwogIH0KCiAgTGlzdDxDb21iaW5hdG9yPiByZWFkQ29tYmluYXRvckxpc3QoKSB7CiAgICBpbnQgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgIExpc3Q8Q29tYmluYXRvcj4gcmVzdWx0ID0KICAgICAgICBuZXcgTGlzdDxDb21iaW5hdG9yPi5maWxsZWQobGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIHJlc3VsdFtpXSA9IHJlYWRDb21iaW5hdG9yKCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgdm9pZCBfcmVhZExpYnJhcnlQYXJ0cyhMaWJyYXJ5IGxpYnJhcnkpIHsKICAgIGludCBsZW5ndGggPSByZWFkVUludCgpOwogICAgbGlicmFyeS5wYXJ0cy5sZW5ndGggPSBsZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIGxpYnJhcnkucGFydHNbaV0gPSByZWFkTGlicmFyeVBhcnQobGlicmFyeSk7CiAgICB9CiAgfQoKICBMaWJyYXJ5UGFydCByZWFkTGlicmFyeVBhcnQoTGlicmFyeSBsaWJyYXJ5KSB7CiAgICBMaXN0PEV4cHJlc3Npb24+IGFubm90YXRpb25zID0gcmVhZEV4cHJlc3Npb25MaXN0KCk7CiAgICBTdHJpbmcgcGFydFVyaSA9IHJlYWRTdHJpbmdSZWZlcmVuY2UoKTsKICAgIHJldHVybiBuZXcgTGlicmFyeVBhcnQoYW5ub3RhdGlvbnMsIHBhcnRVcmkpLi5wYXJlbnQgPSBsaWJyYXJ5OwogIH0KCiAgVHlwZWRlZiByZWFkVHlwZWRlZigpIHsKICAgIHZhciBjYW5vbmljYWxOYW1lID0gcmVhZENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoKTsKICAgIHZhciByZWZlcmVuY2UgPSBjYW5vbmljYWxOYW1lLmdldFJlZmVyZW5jZSgpOwogICAgVHlwZWRlZiBub2RlID0gcmVmZXJlbmNlLm5vZGU7CiAgICBpZiAoYWx3YXlzQ3JlYXRlTmV3TmFtZWROb2RlcykgewogICAgICBub2RlID0gbnVsbDsKICAgIH0KICAgIGJvb2wgc2hvdWxkV3JpdGVEYXRhID0gbm9kZSA9PSBudWxsIHx8IF9pc1JlYWRpbmdMaWJyYXJ5SW1wbGVtZW50YXRpb247CiAgICBpZiAobm9kZSA9PSBudWxsKSB7CiAgICAgIG5vZGUgPSBuZXcgVHlwZWRlZihudWxsLCBudWxsLCByZWZlcmVuY2U6IHJlZmVyZW5jZSk7CiAgICB9CiAgICBVcmkgZmlsZVVyaSA9IHJlYWRVcmlSZWZlcmVuY2UoKTsKICAgIGludCBmaWxlT2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgU3RyaW5nIG5hbWUgPSByZWFkU3RyaW5nUmVmZXJlbmNlKCk7CiAgICBub2RlLmFubm90YXRpb25zID0gcmVhZEFubm90YXRpb25MaXN0KG5vZGUpOwogICAgcmVhZEFuZFB1c2hUeXBlUGFyYW1ldGVyTGlzdChub2RlLnR5cGVQYXJhbWV0ZXJzLCBub2RlKTsKICAgIHZhciB0eXBlID0gcmVhZERhcnRUeXBlKCk7CiAgICByZWFkQW5kUHVzaFR5cGVQYXJhbWV0ZXJMaXN0KG5vZGUudHlwZVBhcmFtZXRlcnNPZkZ1bmN0aW9uVHlwZSwgbm9kZSk7CiAgICBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmFkZEFsbChyZWFkQW5kUHVzaFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KCkpOwogICAgbm9kZS5uYW1lZFBhcmFtZXRlcnMuYWRkQWxsKHJlYWRBbmRQdXNoVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoKSk7CiAgICB0eXBlUGFyYW1ldGVyU3RhY2subGVuZ3RoID0gMDsKICAgIHZhcmlhYmxlU3RhY2subGVuZ3RoID0gMDsKICAgIGlmIChzaG91bGRXcml0ZURhdGEpIHsKICAgICAgbm9kZS5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKICAgICAgbm9kZS5uYW1lID0gbmFtZTsKICAgICAgbm9kZS5maWxlVXJpID0gZmlsZVVyaTsKICAgICAgbm9kZS50eXBlID0gdHlwZTsKICAgIH0KICAgIHJldHVybiBub2RlOwogIH0KCiAgQ2xhc3MgcmVhZENsYXNzKGludCBlbmRPZmZzZXQpIHsKICAgIGludCB0YWcgPSByZWFkQnl0ZSgpOwogICAgYXNzZXJ0KHRhZyA9PSBUYWcuQ2xhc3MpOwoKICAgIC8vIFJlYWQgaW5kZXguCiAgICBpbnQgc2F2ZWRCeXRlT2Zmc2V0ID0gX2J5dGVPZmZzZXQ7CiAgICAvLyBUaGVyZSBpcyBhIGZpZWxkIGZvciB0aGUgcHJvY2VkdXJlIGNvdW50LgogICAgX2J5dGVPZmZzZXQgPSBlbmRPZmZzZXQgLSAoMSkgKiA0OwogICAgaW50IHByb2NlZHVyZUNvdW50ID0gcmVhZFVpbnQzMigpOwogICAgTGlzdDxpbnQ+IHByb2NlZHVyZU9mZnNldHMgPSBuZXcgTGlzdDxpbnQ+KHByb2NlZHVyZUNvdW50ICsgMSk7CiAgICAvLyBUaGVyZSBpcyBhIGZpZWxkIGZvciB0aGUgcHJvY2VkdXJlIGNvdW50LCB0aGF0IG51bWJlciArIDEgKGZvciB0aGUgZW5kKQogICAgLy8gb2Zmc2V0cyAoaS5lLiBwcm9jZWR1cmUgY291bnQgKyAyIGZpZWxkcykuCiAgICBfYnl0ZU9mZnNldCA9IGVuZE9mZnNldCAtIChwcm9jZWR1cmVDb3VudCArIDIpICogNDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvY2VkdXJlQ291bnQgKyAxOyBpKyspIHsKICAgICAgcHJvY2VkdXJlT2Zmc2V0c1tpXSA9IF9jb21wb25lbnRTdGFydE9mZnNldCArIHJlYWRVaW50MzIoKTsKICAgIH0KICAgIF9ieXRlT2Zmc2V0ID0gc2F2ZWRCeXRlT2Zmc2V0OwoKICAgIHZhciBjYW5vbmljYWxOYW1lID0gcmVhZENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoKTsKICAgIHZhciByZWZlcmVuY2UgPSBjYW5vbmljYWxOYW1lLmdldFJlZmVyZW5jZSgpOwogICAgQ2xhc3Mgbm9kZSA9IHJlZmVyZW5jZS5ub2RlOwogICAgaWYgKGFsd2F5c0NyZWF0ZU5ld05hbWVkTm9kZXMpIHsKICAgICAgbm9kZSA9IG51bGw7CiAgICB9CiAgICBib29sIHNob3VsZFdyaXRlRGF0YSA9IG5vZGUgPT0gbnVsbCB8fCBfaXNSZWFkaW5nTGlicmFyeUltcGxlbWVudGF0aW9uOwogICAgaWYgKG5vZGUgPT0gbnVsbCkgewogICAgICBub2RlID0gbmV3IENsYXNzKHJlZmVyZW5jZTogcmVmZXJlbmNlKS4ubGV2ZWwgPSBDbGFzc0xldmVsLlRlbXBvcmFyeTsKICAgIH0KCiAgICB2YXIgZmlsZVVyaSA9IHJlYWRVcmlSZWZlcmVuY2UoKTsKICAgIG5vZGUuc3RhcnRGaWxlT2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgbm9kZS5maWxlT2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgbm9kZS5maWxlRW5kT2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgaW50IGZsYWdzID0gcmVhZEJ5dGUoKTsKICAgIG5vZGUuZmxhZ3MgPSBmbGFncyAmIH5DbGFzcy5MZXZlbE1hc2s7CiAgICBpbnQgbGV2ZWxJbmRleCA9IGZsYWdzICYgQ2xhc3MuTGV2ZWxNYXNrOwogICAgdmFyIGxldmVsID0gQ2xhc3NMZXZlbC52YWx1ZXNbbGV2ZWxJbmRleCArIDFdOwogICAgaWYgKGxldmVsLmluZGV4ID49IG5vZGUubGV2ZWwuaW5kZXgpIHsKICAgICAgbm9kZS5sZXZlbCA9IGxldmVsOwogICAgfQogICAgdmFyIG5hbWUgPSByZWFkU3RyaW5nT3JOdWxsSWZFbXB0eSgpOwogICAgdmFyIGFubm90YXRpb25zID0gcmVhZEFubm90YXRpb25MaXN0KG5vZGUpOwogICAgYXNzZXJ0KCgpIHsKICAgICAgZGVidWdQYXRoLmFkZChub2RlLm5hbWUgPz8gJ25vcm1hbC1jbGFzcycpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0oKSk7CiAgICByZWFkQW5kUHVzaFR5cGVQYXJhbWV0ZXJMaXN0KG5vZGUudHlwZVBhcmFtZXRlcnMsIG5vZGUpOwogICAgdmFyIHN1cGVydHlwZSA9IHJlYWRTdXBlcnR5cGVPcHRpb24oKTsKICAgIHZhciBtaXhlZEluVHlwZSA9IHJlYWRTdXBlcnR5cGVPcHRpb24oKTsKICAgIGlmIChzaG91bGRXcml0ZURhdGEpIHsKICAgICAgX2ZpbGxOb25UcmVlTm9kZUxpc3Qobm9kZS5pbXBsZW1lbnRlZFR5cGVzLCByZWFkU3VwZXJ0eXBlKTsKICAgIH0gZWxzZSB7CiAgICAgIF9za2lwTm9kZUxpc3QocmVhZFN1cGVydHlwZSk7CiAgICB9CiAgICBfbWVyZ2VOYW1lZE5vZGVMaXN0KG5vZGUuZmllbGRzLCAoaW5kZXgpID0+IHJlYWRGaWVsZCgpLCBub2RlKTsKICAgIF9tZXJnZU5hbWVkTm9kZUxpc3Qobm9kZS5jb25zdHJ1Y3RvcnMsIChpbmRleCkgPT4gcmVhZENvbnN0cnVjdG9yKCksIG5vZGUpOwoKICAgIF9tZXJnZU5hbWVkTm9kZUxpc3Qobm9kZS5wcm9jZWR1cmVzLCAoaW5kZXgpIHsKICAgICAgX2J5dGVPZmZzZXQgPSBwcm9jZWR1cmVPZmZzZXRzW2luZGV4XTsKICAgICAgcmV0dXJuIHJlYWRQcm9jZWR1cmUocHJvY2VkdXJlT2Zmc2V0c1tpbmRleCArIDFdKTsKICAgIH0sIG5vZGUpOwogICAgX2J5dGVPZmZzZXQgPSBwcm9jZWR1cmVPZmZzZXRzLmxhc3Q7CiAgICBfbWVyZ2VOYW1lZE5vZGVMaXN0KG5vZGUucmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzLAogICAgICAgIChpbmRleCkgPT4gcmVhZFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKCksIG5vZGUpOwogICAgdHlwZVBhcmFtZXRlclN0YWNrLmxlbmd0aCA9IDA7CiAgICBhc3NlcnQoZGVidWdQYXRoLnJlbW92ZUxhc3QoKSAhPSBudWxsKTsKICAgIGlmIChzaG91bGRXcml0ZURhdGEpIHsKICAgICAgbm9kZS5uYW1lID0gbmFtZTsKICAgICAgbm9kZS5maWxlVXJpID0gZmlsZVVyaTsKICAgICAgbm9kZS5hbm5vdGF0aW9ucyA9IGFubm90YXRpb25zOwogICAgICBub2RlLnN1cGVydHlwZSA9IHN1cGVydHlwZTsKICAgICAgbm9kZS5taXhlZEluVHlwZSA9IG1peGVkSW5UeXBlOwogICAgfQoKICAgIF9ieXRlT2Zmc2V0ID0gZW5kT2Zmc2V0OwoKICAgIHJldHVybiBub2RlOwogIH0KCiAgRXh0ZW5zaW9uIHJlYWRFeHRlbnNpb24oKSB7CiAgICBpbnQgdGFnID0gcmVhZEJ5dGUoKTsKICAgIGFzc2VydCh0YWcgPT0gVGFnLkV4dGVuc2lvbik7CgogICAgQ2Fub25pY2FsTmFtZSBjYW5vbmljYWxOYW1lID0gcmVhZENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoKTsKICAgIFJlZmVyZW5jZSByZWZlcmVuY2UgPSBjYW5vbmljYWxOYW1lLmdldFJlZmVyZW5jZSgpOwogICAgRXh0ZW5zaW9uIG5vZGUgPSByZWZlcmVuY2Uubm9kZTsKICAgIGlmIChhbHdheXNDcmVhdGVOZXdOYW1lZE5vZGVzKSB7CiAgICAgIG5vZGUgPSBudWxsOwogICAgfQogICAgYm9vbCBzaG91bGRXcml0ZURhdGEgPSBub2RlID09IG51bGwgfHwgX2lzUmVhZGluZ0xpYnJhcnlJbXBsZW1lbnRhdGlvbjsKICAgIGlmIChub2RlID09IG51bGwpIHsKICAgICAgbm9kZSA9IG5ldyBFeHRlbnNpb24ocmVmZXJlbmNlOiByZWZlcmVuY2UpOwogICAgfQoKICAgIFN0cmluZyBuYW1lID0gcmVhZFN0cmluZ09yTnVsbElmRW1wdHkoKTsKICAgIGFzc2VydCgoKSB7CiAgICAgIGRlYnVnUGF0aC5hZGQobm9kZS5uYW1lID8/ICdleHRlbnNpb24nKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9KCkpOwoKICAgIFVyaSBmaWxlVXJpID0gcmVhZFVyaVJlZmVyZW5jZSgpOwogICAgbm9kZS5maWxlT2Zmc2V0ID0gcmVhZE9mZnNldCgpOwoKICAgIHJlYWRBbmRQdXNoVHlwZVBhcmFtZXRlckxpc3Qobm9kZS50eXBlUGFyYW1ldGVycywgbm9kZSk7CiAgICBEYXJ0VHlwZSBvblR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgIHR5cGVQYXJhbWV0ZXJTdGFjay5sZW5ndGggPSAwOwoKICAgIGlmIChzaG91bGRXcml0ZURhdGEpIHsKICAgICAgbm9kZS5uYW1lID0gbmFtZTsKICAgICAgbm9kZS5maWxlVXJpID0gZmlsZVVyaTsKICAgICAgbm9kZS5vblR5cGUgPSBvblR5cGU7CiAgICB9CgogICAgaW50IGxlbmd0aCA9IHJlYWRVSW50KCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIE5hbWUgbmFtZSA9IHJlYWROYW1lKCk7CiAgICAgIGludCBraW5kID0gcmVhZEJ5dGUoKTsKICAgICAgaW50IGZsYWdzID0gcmVhZEJ5dGUoKTsKICAgICAgQ2Fub25pY2FsTmFtZSBjYW5vbmljYWxOYW1lID0gcmVhZENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoKTsKICAgICAgaWYgKHNob3VsZFdyaXRlRGF0YSkgewogICAgICAgIG5vZGUubWVtYmVycy5hZGQobmV3IEV4dGVuc2lvbk1lbWJlckRlc2NyaXB0b3IoCiAgICAgICAgICAgIG5hbWU6IG5hbWUsCiAgICAgICAgICAgIGtpbmQ6IEV4dGVuc2lvbk1lbWJlcktpbmQudmFsdWVzW2tpbmRdLAogICAgICAgICAgICBtZW1iZXI6IGNhbm9uaWNhbE5hbWUuZ2V0UmVmZXJlbmNlKCkpCiAgICAgICAgICAuLmZsYWdzID0gZmxhZ3MpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbm9kZTsKICB9CgogIGludCBnZXRBbmRSZXNldFRyYW5zZm9ybWVyRmxhZ3MoKSB7CiAgICBpbnQgZmxhZ3MgPSBfdHJhbnNmb3JtZXJGbGFnczsKICAgIF90cmFuc2Zvcm1lckZsYWdzID0gMDsKICAgIHJldHVybiBmbGFnczsKICB9CgogIC8vLyBBZGRzIHRoZSBnaXZlbiBmbGFnIHRvIHRoZSBjdXJyZW50IFtNZW1iZXIudHJhbnNmb3JtZXJGbGFnc10uCiAgdm9pZCBhZGRUcmFuc2Zvcm1lckZsYWcoaW50IGZsYWdzKSB7CiAgICBfdHJhbnNmb3JtZXJGbGFncyB8PSBmbGFnczsKICB9CgogIEZpZWxkIHJlYWRGaWVsZCgpIHsKICAgIGludCB0YWcgPSByZWFkQnl0ZSgpOwogICAgYXNzZXJ0KHRhZyA9PSBUYWcuRmllbGQpOwogICAgdmFyIGNhbm9uaWNhbE5hbWUgPSByZWFkQ2Fub25pY2FsTmFtZVJlZmVyZW5jZSgpOwogICAgdmFyIHJlZmVyZW5jZSA9IGNhbm9uaWNhbE5hbWUuZ2V0UmVmZXJlbmNlKCk7CiAgICBGaWVsZCBub2RlID0gcmVmZXJlbmNlLm5vZGU7CiAgICBpZiAoYWx3YXlzQ3JlYXRlTmV3TmFtZWROb2RlcykgewogICAgICBub2RlID0gbnVsbDsKICAgIH0KICAgIGJvb2wgc2hvdWxkV3JpdGVEYXRhID0gbm9kZSA9PSBudWxsIHx8IF9pc1JlYWRpbmdMaWJyYXJ5SW1wbGVtZW50YXRpb247CiAgICBpZiAobm9kZSA9PSBudWxsKSB7CiAgICAgIG5vZGUgPSBuZXcgRmllbGQobnVsbCwgcmVmZXJlbmNlOiByZWZlcmVuY2UpOwogICAgfQogICAgdmFyIGZpbGVVcmkgPSByZWFkVXJpUmVmZXJlbmNlKCk7CiAgICBpbnQgZmlsZU9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgIGludCBmaWxlRW5kT2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgaW50IGZsYWdzID0gcmVhZFVJbnQoKTsKICAgIHZhciBuYW1lID0gcmVhZE5hbWUoKTsKICAgIHZhciBhbm5vdGF0aW9ucyA9IHJlYWRBbm5vdGF0aW9uTGlzdChub2RlKTsKICAgIGFzc2VydCgoKSB7CiAgICAgIGRlYnVnUGF0aC5hZGQobm9kZS5uYW1lPy5uYW1lID8/ICdmaWVsZCcpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0oKSk7CiAgICB2YXIgdHlwZSA9IHJlYWREYXJ0VHlwZSgpOwogICAgdmFyIGluaXRpYWxpemVyID0gcmVhZEV4cHJlc3Npb25PcHRpb24oKTsKICAgIGludCB0cmFuc2Zvcm1lckZsYWdzID0gZ2V0QW5kUmVzZXRUcmFuc2Zvcm1lckZsYWdzKCk7CiAgICBhc3NlcnQoKChfKSA9PiB0cnVlKShkZWJ1Z1BhdGgucmVtb3ZlTGFzdCgpKSk7CiAgICBpZiAoc2hvdWxkV3JpdGVEYXRhKSB7CiAgICAgIG5vZGUuZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICAgIG5vZGUuZmlsZUVuZE9mZnNldCA9IGZpbGVFbmRPZmZzZXQ7CiAgICAgIG5vZGUuZmxhZ3MgPSBmbGFnczsKICAgICAgbm9kZS5uYW1lID0gbmFtZTsKICAgICAgbm9kZS5maWxlVXJpID0gZmlsZVVyaTsKICAgICAgbm9kZS5hbm5vdGF0aW9ucyA9IGFubm90YXRpb25zOwogICAgICBub2RlLnR5cGUgPSB0eXBlOwogICAgICBub2RlLmluaXRpYWxpemVyID0gaW5pdGlhbGl6ZXI7CiAgICAgIG5vZGUuaW5pdGlhbGl6ZXI/LnBhcmVudCA9IG5vZGU7CiAgICAgIG5vZGUudHJhbnNmb3JtZXJGbGFncyA9IHRyYW5zZm9ybWVyRmxhZ3M7CiAgICB9CiAgICByZXR1cm4gbm9kZTsKICB9CgogIENvbnN0cnVjdG9yIHJlYWRDb25zdHJ1Y3RvcigpIHsKICAgIGludCB0YWcgPSByZWFkQnl0ZSgpOwogICAgYXNzZXJ0KHRhZyA9PSBUYWcuQ29uc3RydWN0b3IpOwogICAgdmFyIGNhbm9uaWNhbE5hbWUgPSByZWFkQ2Fub25pY2FsTmFtZVJlZmVyZW5jZSgpOwogICAgdmFyIHJlZmVyZW5jZSA9IGNhbm9uaWNhbE5hbWUuZ2V0UmVmZXJlbmNlKCk7CiAgICBDb25zdHJ1Y3RvciBub2RlID0gcmVmZXJlbmNlLm5vZGU7CiAgICBpZiAoYWx3YXlzQ3JlYXRlTmV3TmFtZWROb2RlcykgewogICAgICBub2RlID0gbnVsbDsKICAgIH0KICAgIGJvb2wgc2hvdWxkV3JpdGVEYXRhID0gbm9kZSA9PSBudWxsIHx8IF9pc1JlYWRpbmdMaWJyYXJ5SW1wbGVtZW50YXRpb247CiAgICBpZiAobm9kZSA9PSBudWxsKSB7CiAgICAgIG5vZGUgPSBuZXcgQ29uc3RydWN0b3IobnVsbCwgcmVmZXJlbmNlOiByZWZlcmVuY2UpOwogICAgfQogICAgdmFyIGZpbGVVcmkgPSByZWFkVXJpUmVmZXJlbmNlKCk7CiAgICB2YXIgc3RhcnRGaWxlT2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgdmFyIGZpbGVPZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICB2YXIgZmlsZUVuZE9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgIHZhciBmbGFncyA9IHJlYWRCeXRlKCk7CiAgICB2YXIgbmFtZSA9IHJlYWROYW1lKCk7CiAgICB2YXIgYW5ub3RhdGlvbnMgPSByZWFkQW5ub3RhdGlvbkxpc3Qobm9kZSk7CiAgICBhc3NlcnQoKCkgewogICAgICBkZWJ1Z1BhdGguYWRkKG5vZGUubmFtZT8ubmFtZSA/PyAnY29uc3RydWN0b3InKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9KCkpOwogICAgdmFyIGZ1bmN0aW9uID0gcmVhZEZ1bmN0aW9uTm9kZSgpOwogICAgcHVzaFZhcmlhYmxlRGVjbGFyYXRpb25zKGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzKTsKICAgIHB1c2hWYXJpYWJsZURlY2xhcmF0aW9ucyhmdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMpOwogICAgaWYgKHNob3VsZFdyaXRlRGF0YSkgewogICAgICBfZmlsbFRyZWVOb2RlTGlzdChub2RlLmluaXRpYWxpemVycywgKGluZGV4KSA9PiByZWFkSW5pdGlhbGl6ZXIoKSwgbm9kZSk7CiAgICB9IGVsc2UgewogICAgICBfc2tpcE5vZGVMaXN0KHJlYWRJbml0aWFsaXplcik7CiAgICB9CiAgICB2YXJpYWJsZVN0YWNrLmxlbmd0aCA9IDA7CiAgICB2YXIgdHJhbnNmb3JtZXJGbGFncyA9IGdldEFuZFJlc2V0VHJhbnNmb3JtZXJGbGFncygpOwogICAgYXNzZXJ0KCgoXykgPT4gdHJ1ZSkoZGVidWdQYXRoLnJlbW92ZUxhc3QoKSkpOwogICAgaWYgKHNob3VsZFdyaXRlRGF0YSkgewogICAgICBub2RlLnN0YXJ0RmlsZU9mZnNldCA9IHN0YXJ0RmlsZU9mZnNldDsKICAgICAgbm9kZS5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKICAgICAgbm9kZS5maWxlRW5kT2Zmc2V0ID0gZmlsZUVuZE9mZnNldDsKICAgICAgbm9kZS5mbGFncyA9IGZsYWdzOwogICAgICBub2RlLm5hbWUgPSBuYW1lOwogICAgICBub2RlLmZpbGVVcmkgPSBmaWxlVXJpOwogICAgICBub2RlLmFubm90YXRpb25zID0gYW5ub3RhdGlvbnM7CiAgICAgIG5vZGUuZnVuY3Rpb24gPSBmdW5jdGlvbi4ucGFyZW50ID0gbm9kZTsKICAgICAgbm9kZS50cmFuc2Zvcm1lckZsYWdzID0gdHJhbnNmb3JtZXJGbGFnczsKICAgIH0KICAgIHJldHVybiBub2RlOwogIH0KCiAgUHJvY2VkdXJlIHJlYWRQcm9jZWR1cmUoaW50IGVuZE9mZnNldCkgewogICAgaW50IHRhZyA9IHJlYWRCeXRlKCk7CiAgICBhc3NlcnQodGFnID09IFRhZy5Qcm9jZWR1cmUpOwogICAgdmFyIGNhbm9uaWNhbE5hbWUgPSByZWFkQ2Fub25pY2FsTmFtZVJlZmVyZW5jZSgpOwogICAgdmFyIHJlZmVyZW5jZSA9IGNhbm9uaWNhbE5hbWUuZ2V0UmVmZXJlbmNlKCk7CiAgICBQcm9jZWR1cmUgbm9kZSA9IHJlZmVyZW5jZS5ub2RlOwogICAgaWYgKGFsd2F5c0NyZWF0ZU5ld05hbWVkTm9kZXMpIHsKICAgICAgbm9kZSA9IG51bGw7CiAgICB9CiAgICBib29sIHNob3VsZFdyaXRlRGF0YSA9IG5vZGUgPT0gbnVsbCB8fCBfaXNSZWFkaW5nTGlicmFyeUltcGxlbWVudGF0aW9uOwogICAgaWYgKG5vZGUgPT0gbnVsbCkgewogICAgICBub2RlID0gbmV3IFByb2NlZHVyZShudWxsLCBudWxsLCBudWxsLCByZWZlcmVuY2U6IHJlZmVyZW5jZSk7CiAgICB9CiAgICB2YXIgZmlsZVVyaSA9IHJlYWRVcmlSZWZlcmVuY2UoKTsKICAgIHZhciBzdGFydEZpbGVPZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICB2YXIgZmlsZU9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgIHZhciBmaWxlRW5kT2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgaW50IGtpbmRJbmRleCA9IHJlYWRCeXRlKCk7CiAgICB2YXIga2luZCA9IFByb2NlZHVyZUtpbmQudmFsdWVzW2tpbmRJbmRleF07CiAgICB2YXIgZmxhZ3MgPSByZWFkVUludCgpOwogICAgdmFyIG5hbWUgPSByZWFkTmFtZSgpOwogICAgdmFyIGFubm90YXRpb25zID0gcmVhZEFubm90YXRpb25MaXN0KG5vZGUpOwogICAgYXNzZXJ0KCgpIHsKICAgICAgZGVidWdQYXRoLmFkZChub2RlLm5hbWU/Lm5hbWUgPz8gJ3Byb2NlZHVyZScpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0oKSk7CiAgICBpbnQgZnVuY3Rpb25Ob2RlU2l6ZSA9IGVuZE9mZnNldCAtIF9ieXRlT2Zmc2V0OwogICAgLy8gUmVhZCBzbWFsbCBmYWN0b3JpZXMgdXAgZnJvbnQuIFBvc3Rwb25lIGV2ZXJ5dGhpbmcgZWxzZS4KICAgIGJvb2wgcmVhZEZ1bmN0aW9uTm9kZU5vdyA9CiAgICAgICAgKGtpbmQgPT0gUHJvY2VkdXJlS2luZC5GYWN0b3J5ICYmIGZ1bmN0aW9uTm9kZVNpemUgPD0gNTApIHx8CiAgICAgICAgICAgIF9kaXNhYmxlTGF6eVJlYWRpbmc7CiAgICB2YXIgZm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldFJlZmVyZW5jZSA9CiAgICAgICAgcmVhZE1lbWJlclJlZmVyZW5jZShhbGxvd051bGw6IHRydWUpOwogICAgdmFyIGZvcndhcmRpbmdTdHViSW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlID0KICAgICAgICByZWFkTWVtYmVyUmVmZXJlbmNlKGFsbG93TnVsbDogdHJ1ZSk7CiAgICB2YXIgZnVuY3Rpb24gPSByZWFkRnVuY3Rpb25Ob2RlT3B0aW9uKCFyZWFkRnVuY3Rpb25Ob2RlTm93LCBlbmRPZmZzZXQpOwogICAgdmFyIHRyYW5zZm9ybWVyRmxhZ3MgPSBnZXRBbmRSZXNldFRyYW5zZm9ybWVyRmxhZ3MoKTsKICAgIGFzc2VydCgoKF8pID0+IHRydWUpKGRlYnVnUGF0aC5yZW1vdmVMYXN0KCkpKTsKICAgIGlmIChzaG91bGRXcml0ZURhdGEpIHsKICAgICAgbm9kZS5zdGFydEZpbGVPZmZzZXQgPSBzdGFydEZpbGVPZmZzZXQ7CiAgICAgIG5vZGUuZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICAgIG5vZGUuZmlsZUVuZE9mZnNldCA9IGZpbGVFbmRPZmZzZXQ7CiAgICAgIG5vZGUua2luZCA9IGtpbmQ7CiAgICAgIG5vZGUuZmxhZ3MgPSBmbGFnczsKICAgICAgbm9kZS5uYW1lID0gbmFtZTsKICAgICAgbm9kZS5maWxlVXJpID0gZmlsZVVyaTsKICAgICAgbm9kZS5hbm5vdGF0aW9ucyA9IGFubm90YXRpb25zOwogICAgICBub2RlLmZ1bmN0aW9uID0gZnVuY3Rpb247CiAgICAgIGZ1bmN0aW9uPy5wYXJlbnQgPSBub2RlOwogICAgICBub2RlLnNldFRyYW5zZm9ybWVyRmxhZ3NXaXRob3V0TGF6eUxvYWRpbmcodHJhbnNmb3JtZXJGbGFncyk7CiAgICAgIG5vZGUuZm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldFJlZmVyZW5jZSA9CiAgICAgICAgICBmb3J3YXJkaW5nU3R1YlN1cGVyVGFyZ2V0UmVmZXJlbmNlOwogICAgICBub2RlLmZvcndhcmRpbmdTdHViSW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlID0KICAgICAgICAgIGZvcndhcmRpbmdTdHViSW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlOwoKICAgICAgYXNzZXJ0KChub2RlLmZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXRSZWZlcmVuY2UgIT0gbnVsbCkgfHwKICAgICAgICAgICEobm9kZS5pc0ZvcndhcmRpbmdTdHViICYmIG5vZGUuZnVuY3Rpb24uYm9keSAhPSBudWxsKSk7CiAgICB9CiAgICBfYnl0ZU9mZnNldCA9IGVuZE9mZnNldDsKICAgIHJldHVybiBub2RlOwogIH0KCiAgUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IgcmVhZFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKCkgewogICAgaW50IHRhZyA9IHJlYWRCeXRlKCk7CiAgICBhc3NlcnQodGFnID09IFRhZy5SZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvcik7CiAgICB2YXIgY2Fub25pY2FsTmFtZSA9IHJlYWRDYW5vbmljYWxOYW1lUmVmZXJlbmNlKCk7CiAgICB2YXIgcmVmZXJlbmNlID0gY2Fub25pY2FsTmFtZS5nZXRSZWZlcmVuY2UoKTsKICAgIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yIG5vZGUgPSByZWZlcmVuY2Uubm9kZTsKICAgIGlmIChhbHdheXNDcmVhdGVOZXdOYW1lZE5vZGVzKSB7CiAgICAgIG5vZGUgPSBudWxsOwogICAgfQogICAgYm9vbCBzaG91bGRXcml0ZURhdGEgPSBub2RlID09IG51bGwgfHwgX2lzUmVhZGluZ0xpYnJhcnlJbXBsZW1lbnRhdGlvbjsKICAgIGlmIChub2RlID09IG51bGwpIHsKICAgICAgbm9kZSA9IG5ldyBSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcihudWxsLCByZWZlcmVuY2U6IHJlZmVyZW5jZSk7CiAgICB9CiAgICB2YXIgZmlsZVVyaSA9IHJlYWRVcmlSZWZlcmVuY2UoKTsKICAgIHZhciBmaWxlT2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgdmFyIGZpbGVFbmRPZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICB2YXIgZmxhZ3MgPSByZWFkQnl0ZSgpOwogICAgdmFyIG5hbWUgPSByZWFkTmFtZSgpOwogICAgdmFyIGFubm90YXRpb25zID0gcmVhZEFubm90YXRpb25MaXN0KG5vZGUpOwogICAgYXNzZXJ0KCgpIHsKICAgICAgZGVidWdQYXRoLmFkZChub2RlLm5hbWU/Lm5hbWUgPz8gJ3JlZGlyZWN0aW5nLWZhY3RvcnktY29uc3RydWN0b3InKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9KCkpOwogICAgdmFyIHRhcmdldFJlZmVyZW5jZSA9IHJlYWRNZW1iZXJSZWZlcmVuY2UoKTsKICAgIHZhciB0eXBlQXJndW1lbnRzID0gcmVhZERhcnRUeXBlTGlzdCgpOwogICAgaW50IHR5cGVQYXJhbWV0ZXJTdGFja0hlaWdodCA9IHR5cGVQYXJhbWV0ZXJTdGFjay5sZW5ndGg7CiAgICB2YXIgdHlwZVBhcmFtZXRlcnMgPSByZWFkQW5kUHVzaFR5cGVQYXJhbWV0ZXJMaXN0KCk7CiAgICByZWFkVUludCgpOyAvLyBUb3RhbCBwYXJhbWV0ZXIgY291bnQuCiAgICB2YXIgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA9IHJlYWRVSW50KCk7CiAgICBpbnQgdmFyaWFibGVTdGFja0hlaWdodCA9IHZhcmlhYmxlU3RhY2subGVuZ3RoOwogICAgdmFyIHBvc2l0aW9uYWwgPSByZWFkQW5kUHVzaFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KCk7CiAgICB2YXIgbmFtZWQgPSByZWFkQW5kUHVzaFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KCk7CiAgICB2YXJpYWJsZVN0YWNrLmxlbmd0aCA9IHZhcmlhYmxlU3RhY2tIZWlnaHQ7CiAgICB0eXBlUGFyYW1ldGVyU3RhY2subGVuZ3RoID0gdHlwZVBhcmFtZXRlclN0YWNrSGVpZ2h0OwogICAgZGVidWdQYXRoLnJlbW92ZUxhc3QoKTsKICAgIGlmIChzaG91bGRXcml0ZURhdGEpIHsKICAgICAgbm9kZS5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKICAgICAgbm9kZS5maWxlRW5kT2Zmc2V0ID0gZmlsZUVuZE9mZnNldDsKICAgICAgbm9kZS5mbGFncyA9IGZsYWdzOwogICAgICBub2RlLm5hbWUgPSBuYW1lOwogICAgICBub2RlLmZpbGVVcmkgPSBmaWxlVXJpOwogICAgICBub2RlLmFubm90YXRpb25zID0gYW5ub3RhdGlvbnM7CiAgICAgIG5vZGUudGFyZ2V0UmVmZXJlbmNlID0gdGFyZ2V0UmVmZXJlbmNlOwogICAgICBub2RlLnR5cGVBcmd1bWVudHMuYWRkQWxsKHR5cGVBcmd1bWVudHMpOwogICAgICBub2RlLnR5cGVQYXJhbWV0ZXJzID0gdHlwZVBhcmFtZXRlcnM7CiAgICAgIG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA9IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ7CiAgICAgIG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMgPSBwb3NpdGlvbmFsOwogICAgICBub2RlLm5hbWVkUGFyYW1ldGVycyA9IG5hbWVkOwogICAgfQogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBJbml0aWFsaXplciByZWFkSW5pdGlhbGl6ZXIoKSB7CiAgICBpbnQgdGFnID0gcmVhZEJ5dGUoKTsKICAgIGJvb2wgaXNTeW50aGV0aWMgPSByZWFkQnl0ZSgpID09IDE7CiAgICBzd2l0Y2ggKHRhZykgewogICAgICBjYXNlIFRhZy5JbnZhbGlkSW5pdGlhbGl6ZXI6CiAgICAgICAgcmV0dXJuIG5ldyBJbnZhbGlkSW5pdGlhbGl6ZXIoKTsKICAgICAgY2FzZSBUYWcuRmllbGRJbml0aWFsaXplcjoKICAgICAgICB2YXIgcmVmZXJlbmNlID0gcmVhZE1lbWJlclJlZmVyZW5jZSgpOwogICAgICAgIHZhciB2YWx1ZSA9IHJlYWRFeHByZXNzaW9uKCk7CiAgICAgICAgcmV0dXJuIG5ldyBGaWVsZEluaXRpYWxpemVyLmJ5UmVmZXJlbmNlKHJlZmVyZW5jZSwgdmFsdWUpCiAgICAgICAgICAuLmlzU3ludGhldGljID0gaXNTeW50aGV0aWM7CiAgICAgIGNhc2UgVGFnLlN1cGVySW5pdGlhbGl6ZXI6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICB2YXIgcmVmZXJlbmNlID0gcmVhZE1lbWJlclJlZmVyZW5jZSgpOwogICAgICAgIHZhciBhcmd1bWVudHMgPSByZWFkQXJndW1lbnRzKCk7CiAgICAgICAgcmV0dXJuIG5ldyBTdXBlckluaXRpYWxpemVyLmJ5UmVmZXJlbmNlKHJlZmVyZW5jZSwgYXJndW1lbnRzKQogICAgICAgICAgLi5pc1N5bnRoZXRpYyA9IGlzU3ludGhldGljCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLlJlZGlyZWN0aW5nSW5pdGlhbGl6ZXI6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZXR1cm4gbmV3IFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIuYnlSZWZlcmVuY2UoCiAgICAgICAgICAgIHJlYWRNZW1iZXJSZWZlcmVuY2UoKSwgcmVhZEFyZ3VtZW50cygpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5Mb2NhbEluaXRpYWxpemVyOgogICAgICAgIHJldHVybiBuZXcgTG9jYWxJbml0aWFsaXplcihyZWFkQW5kUHVzaFZhcmlhYmxlRGVjbGFyYXRpb24oKSk7CiAgICAgIGNhc2UgVGFnLkFzc2VydEluaXRpYWxpemVyOgogICAgICAgIHJldHVybiBuZXcgQXNzZXJ0SW5pdGlhbGl6ZXIocmVhZFN0YXRlbWVudCgpKTsKICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBmYWlsKCd1bmV4cGVjdGVkIGluaXRpYWxpemVyIHRhZzogJHRhZycpOwogICAgfQogIH0KCiAgRnVuY3Rpb25Ob2RlIHJlYWRGdW5jdGlvbk5vZGVPcHRpb24oYm9vbCBsYXp5TG9hZEJvZHksIGludCBvdXRlckVuZE9mZnNldCkgewogICAgcmV0dXJuIHJlYWRBbmRDaGVja09wdGlvblRhZygpCiAgICAgICAgPyByZWFkRnVuY3Rpb25Ob2RlKAogICAgICAgICAgICBsYXp5TG9hZEJvZHk6IGxhenlMb2FkQm9keSwgb3V0ZXJFbmRPZmZzZXQ6IG91dGVyRW5kT2Zmc2V0KQogICAgICAgIDogbnVsbDsKICB9CgogIEZ1bmN0aW9uTm9kZSByZWFkRnVuY3Rpb25Ob2RlKAogICAgICB7Ym9vbCBsYXp5TG9hZEJvZHk6IGZhbHNlLCBpbnQgb3V0ZXJFbmRPZmZzZXQ6IC0xfSkgewogICAgaW50IHRhZyA9IHJlYWRCeXRlKCk7CiAgICBhc3NlcnQodGFnID09IFRhZy5GdW5jdGlvbk5vZGUpOwogICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgIGludCBlbmRPZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICBBc3luY01hcmtlciBhc3luY01hcmtlciA9IEFzeW5jTWFya2VyLnZhbHVlc1tyZWFkQnl0ZSgpXTsKICAgIEFzeW5jTWFya2VyIGRhcnRBc3luY01hcmtlciA9IEFzeW5jTWFya2VyLnZhbHVlc1tyZWFkQnl0ZSgpXTsKICAgIGludCB0eXBlUGFyYW1ldGVyU3RhY2tIZWlnaHQgPSB0eXBlUGFyYW1ldGVyU3RhY2subGVuZ3RoOwogICAgdmFyIHR5cGVQYXJhbWV0ZXJzID0gcmVhZEFuZFB1c2hUeXBlUGFyYW1ldGVyTGlzdCgpOwogICAgcmVhZFVJbnQoKTsgLy8gdG90YWwgcGFyYW1ldGVyIGNvdW50LgogICAgdmFyIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPSByZWFkVUludCgpOwogICAgaW50IHZhcmlhYmxlU3RhY2tIZWlnaHQgPSB2YXJpYWJsZVN0YWNrLmxlbmd0aDsKICAgIHZhciBwb3NpdGlvbmFsID0gcmVhZEFuZFB1c2hWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpOwogICAgdmFyIG5hbWVkID0gcmVhZEFuZFB1c2hWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpOwogICAgdmFyIHJldHVyblR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgIGludCBvbGRMYWJlbFN0YWNrQmFzZSA9IGxhYmVsU3RhY2tCYXNlOwoKICAgIGlmIChsYXp5TG9hZEJvZHkgJiYgb3V0ZXJFbmRPZmZzZXQgPiAwKSB7CiAgICAgIGxhenlMb2FkQm9keSA9IG91dGVyRW5kT2Zmc2V0IC0gX2J5dGVPZmZzZXQgPgogICAgICAgICAgMjsgLy8gZS5nLiBvdXRsaW5lIGhhcyBUYWcuU29tZXRoaW5nIGFuZCBUYWcuRW1wdHlTdGF0ZW1lbnQKICAgIH0KCiAgICB2YXIgYm9keTsKICAgIGlmICghbGF6eUxvYWRCb2R5KSB7CiAgICAgIGxhYmVsU3RhY2tCYXNlID0gbGFiZWxTdGFjay5sZW5ndGg7CiAgICAgIGJvZHkgPSByZWFkU3RhdGVtZW50T3B0aW9uKCk7CiAgICB9CgogICAgRnVuY3Rpb25Ob2RlIHJlc3VsdCA9IG5ldyBGdW5jdGlvbk5vZGUoYm9keSwKICAgICAgICB0eXBlUGFyYW1ldGVyczogdHlwZVBhcmFtZXRlcnMsCiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVyczogcG9zaXRpb25hbCwKICAgICAgICBuYW1lZFBhcmFtZXRlcnM6IG5hbWVkLAogICAgICAgIHJldHVyblR5cGU6IHJldHVyblR5cGUsCiAgICAgICAgYXN5bmNNYXJrZXI6IGFzeW5jTWFya2VyLAogICAgICAgIGRhcnRBc3luY01hcmtlcjogZGFydEFzeW5jTWFya2VyKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQKICAgICAgLi5maWxlRW5kT2Zmc2V0ID0gZW5kT2Zmc2V0OwoKICAgIGlmIChsYXp5TG9hZEJvZHkpIHsKICAgICAgX3NldExhenlMb2FkRnVuY3Rpb24ocmVzdWx0LCBvbGRMYWJlbFN0YWNrQmFzZSwgdmFyaWFibGVTdGFja0hlaWdodCwKICAgICAgICAgIHR5cGVQYXJhbWV0ZXJTdGFja0hlaWdodCk7CiAgICB9CgogICAgbGFiZWxTdGFja0Jhc2UgPSBvbGRMYWJlbFN0YWNrQmFzZTsKICAgIHZhcmlhYmxlU3RhY2subGVuZ3RoID0gdmFyaWFibGVTdGFja0hlaWdodDsKICAgIHR5cGVQYXJhbWV0ZXJTdGFjay5sZW5ndGggPSB0eXBlUGFyYW1ldGVyU3RhY2tIZWlnaHQ7CgogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgX3NldExhenlMb2FkRnVuY3Rpb24oRnVuY3Rpb25Ob2RlIHJlc3VsdCwgaW50IG9sZExhYmVsU3RhY2tCYXNlLAogICAgICBpbnQgdmFyaWFibGVTdGFja0hlaWdodCwgaW50IHR5cGVQYXJhbWV0ZXJTdGFja0hlaWdodCkgewogICAgZmluYWwgaW50IHNhdmVkQnl0ZU9mZnNldCA9IF9ieXRlT2Zmc2V0OwogICAgZmluYWwgaW50IGNvbXBvbmVudFN0YXJ0T2Zmc2V0ID0gX2NvbXBvbmVudFN0YXJ0T2Zmc2V0OwogICAgZmluYWwgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycyA9IHR5cGVQYXJhbWV0ZXJTdGFjay50b0xpc3QoKTsKICAgIGZpbmFsIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gdmFyaWFibGVzID0gdmFyaWFibGVTdGFjay50b0xpc3QoKTsKICAgIGZpbmFsIExpYnJhcnkgY3VycmVudExpYnJhcnkgPSBfY3VycmVudExpYnJhcnk7CiAgICByZXN1bHQubGF6eUJ1aWxkZXIgPSAoKSB7CiAgICAgIF9ieXRlT2Zmc2V0ID0gc2F2ZWRCeXRlT2Zmc2V0OwogICAgICBfY3VycmVudExpYnJhcnkgPSBjdXJyZW50TGlicmFyeTsKICAgICAgdHlwZVBhcmFtZXRlclN0YWNrLmNsZWFyKCk7CiAgICAgIHR5cGVQYXJhbWV0ZXJTdGFjay5hZGRBbGwodHlwZVBhcmFtZXRlcnMpOwogICAgICB2YXJpYWJsZVN0YWNrLmNsZWFyKCk7CiAgICAgIHZhcmlhYmxlU3RhY2suYWRkQWxsKHZhcmlhYmxlcyk7CiAgICAgIF9jb21wb25lbnRTdGFydE9mZnNldCA9IGNvbXBvbmVudFN0YXJ0T2Zmc2V0OwoKICAgICAgcmVzdWx0LmJvZHkgPSByZWFkU3RhdGVtZW50T3B0aW9uKCk7CiAgICAgIHJlc3VsdC5ib2R5Py5wYXJlbnQgPSByZXN1bHQ7CiAgICAgIGxhYmVsU3RhY2tCYXNlID0gb2xkTGFiZWxTdGFja0Jhc2U7CiAgICAgIHZhcmlhYmxlU3RhY2subGVuZ3RoID0gdmFyaWFibGVTdGFja0hlaWdodDsKICAgICAgdHlwZVBhcmFtZXRlclN0YWNrLmxlbmd0aCA9IHR5cGVQYXJhbWV0ZXJTdGFja0hlaWdodDsKICAgICAgaWYgKHJlc3VsdC5wYXJlbnQgaXMgUHJvY2VkdXJlKSB7CiAgICAgICAgUHJvY2VkdXJlIHBhcmVudCA9IHJlc3VsdC5wYXJlbnQ7CiAgICAgICAgcGFyZW50LnRyYW5zZm9ybWVyRmxhZ3MgfD0gZ2V0QW5kUmVzZXRUcmFuc2Zvcm1lckZsYWdzKCk7CiAgICAgIH0KICAgIH07CiAgfQoKICB2b2lkIHB1c2hWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUpIHsKICAgIHZhcmlhYmxlU3RhY2suYWRkKHZhcmlhYmxlKTsKICB9CgogIHZvaWQgcHVzaFZhcmlhYmxlRGVjbGFyYXRpb25zKExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gdmFyaWFibGVzKSB7CiAgICB2YXJpYWJsZVN0YWNrLmFkZEFsbCh2YXJpYWJsZXMpOwogIH0KCiAgVmFyaWFibGVEZWNsYXJhdGlvbiByZWFkVmFyaWFibGVSZWZlcmVuY2UoKSB7CiAgICBpbnQgaW5kZXggPSByZWFkVUludCgpOwogICAgaWYgKGluZGV4ID49IHZhcmlhYmxlU3RhY2subGVuZ3RoKSB7CiAgICAgIHRocm93IGZhaWwoJ3VuZXhwZWN0ZWQgdmFyaWFibGUgaW5kZXg6ICRpbmRleCcpOwogICAgfQogICAgcmV0dXJuIHZhcmlhYmxlU3RhY2tbaW5kZXhdOwogIH0KCiAgU3RyaW5nIGxvZ2ljYWxPcGVyYXRvclRvU3RyaW5nKGludCBpbmRleCkgewogICAgc3dpdGNoIChpbmRleCkgewogICAgICBjYXNlIDA6CiAgICAgICAgcmV0dXJuICcmJic7CiAgICAgIGNhc2UgMToKICAgICAgICByZXR1cm4gJ3x8JzsKICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBmYWlsKCd1bmV4cGVjdGVkIGxvZ2ljYWwgb3BlcmF0b3IgaW5kZXg6ICRpbmRleCcpOwogICAgfQogIH0KCiAgTGlzdDxFeHByZXNzaW9uPiByZWFkRXhwcmVzc2lvbkxpc3QoKSB7CiAgICBpbnQgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgIExpc3Q8RXhwcmVzc2lvbj4gcmVzdWx0ID0KICAgICAgICBuZXcgTGlzdDxFeHByZXNzaW9uPi5maWxsZWQobGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIHJlc3VsdFtpXSA9IHJlYWRFeHByZXNzaW9uKCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRXhwcmVzc2lvbiByZWFkRXhwcmVzc2lvbk9wdGlvbigpIHsKICAgIHJldHVybiByZWFkQW5kQ2hlY2tPcHRpb25UYWcoKSA/IHJlYWRFeHByZXNzaW9uKCkgOiBudWxsOwogIH0KCiAgRXhwcmVzc2lvbiByZWFkRXhwcmVzc2lvbigpIHsKICAgIGludCB0YWdCeXRlID0gcmVhZEJ5dGUoKTsKICAgIGludCB0YWcgPSB0YWdCeXRlICYgVGFnLlNwZWNpYWxpemVkVGFnSGlnaEJpdCA9PSAwCiAgICAgICAgPyB0YWdCeXRlCiAgICAgICAgOiAodGFnQnl0ZSAmIFRhZy5TcGVjaWFsaXplZFRhZ01hc2spOwogICAgc3dpdGNoICh0YWcpIHsKICAgICAgY2FzZSBUYWcuTG9hZExpYnJhcnk6CiAgICAgICAgcmV0dXJuIG5ldyBMb2FkTGlicmFyeShyZWFkTGlicmFyeURlcGVuZGVuY3lSZWZlcmVuY2UoKSk7CiAgICAgIGNhc2UgVGFnLkNoZWNrTGlicmFyeUlzTG9hZGVkOgogICAgICAgIHJldHVybiBuZXcgQ2hlY2tMaWJyYXJ5SXNMb2FkZWQocmVhZExpYnJhcnlEZXBlbmRlbmN5UmVmZXJlbmNlKCkpOwogICAgICBjYXNlIFRhZy5JbnZhbGlkRXhwcmVzc2lvbjoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJldHVybiBuZXcgSW52YWxpZEV4cHJlc3Npb24ocmVhZFN0cmluZ09yTnVsbElmRW1wdHkoKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuVmFyaWFibGVHZXQ6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZWFkVUludCgpOyAvLyBvZmZzZXQgb2YgdGhlIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGluIHRoZSBiaW5hcnkuCiAgICAgICAgcmV0dXJuIG5ldyBWYXJpYWJsZUdldChyZWFkVmFyaWFibGVSZWZlcmVuY2UoKSwgcmVhZERhcnRUeXBlT3B0aW9uKCkpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLlNwZWNpYWxpemVkVmFyaWFibGVHZXQ6CiAgICAgICAgaW50IGluZGV4ID0gdGFnQnl0ZSAmIFRhZy5TcGVjaWFsaXplZFBheWxvYWRNYXNrOwogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgcmVhZFVJbnQoKTsgLy8gb2Zmc2V0IG9mIHRoZSB2YXJpYWJsZSBkZWNsYXJhdGlvbiBpbiB0aGUgYmluYXJ5LgogICAgICAgIHJldHVybiBuZXcgVmFyaWFibGVHZXQodmFyaWFibGVTdGFja1tpbmRleF0pLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5WYXJpYWJsZVNldDoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJlYWRVSW50KCk7IC8vIG9mZnNldCBvZiB0aGUgdmFyaWFibGUgZGVjbGFyYXRpb24gaW4gdGhlIGJpbmFyeS4KICAgICAgICByZXR1cm4gbmV3IFZhcmlhYmxlU2V0KHJlYWRWYXJpYWJsZVJlZmVyZW5jZSgpLCByZWFkRXhwcmVzc2lvbigpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5TcGVjaWFsaXplZFZhcmlhYmxlU2V0OgogICAgICAgIGludCBpbmRleCA9IHRhZ0J5dGUgJiBUYWcuU3BlY2lhbGl6ZWRQYXlsb2FkTWFzazsKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJlYWRVSW50KCk7IC8vIG9mZnNldCBvZiB0aGUgdmFyaWFibGUgZGVjbGFyYXRpb24gaW4gdGhlIGJpbmFyeS4KICAgICAgICByZXR1cm4gbmV3IFZhcmlhYmxlU2V0KHZhcmlhYmxlU3RhY2tbaW5kZXhdLCByZWFkRXhwcmVzc2lvbigpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5Qcm9wZXJ0eUdldDoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJldHVybiBuZXcgUHJvcGVydHlHZXQuYnlSZWZlcmVuY2UoCiAgICAgICAgICAgIHJlYWRFeHByZXNzaW9uKCksIHJlYWROYW1lKCksIHJlYWRNZW1iZXJSZWZlcmVuY2UoYWxsb3dOdWxsOiB0cnVlKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuUHJvcGVydHlTZXQ6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZXR1cm4gbmV3IFByb3BlcnR5U2V0LmJ5UmVmZXJlbmNlKHJlYWRFeHByZXNzaW9uKCksIHJlYWROYW1lKCksCiAgICAgICAgICAgIHJlYWRFeHByZXNzaW9uKCksIHJlYWRNZW1iZXJSZWZlcmVuY2UoYWxsb3dOdWxsOiB0cnVlKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuU3VwZXJQcm9wZXJ0eUdldDoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIGFkZFRyYW5zZm9ybWVyRmxhZyhUcmFuc2Zvcm1lckZsYWcuc3VwZXJDYWxscyk7CiAgICAgICAgcmV0dXJuIG5ldyBTdXBlclByb3BlcnR5R2V0LmJ5UmVmZXJlbmNlKAogICAgICAgICAgICByZWFkTmFtZSgpLCByZWFkTWVtYmVyUmVmZXJlbmNlKGFsbG93TnVsbDogdHJ1ZSkpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLlN1cGVyUHJvcGVydHlTZXQ6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICBhZGRUcmFuc2Zvcm1lckZsYWcoVHJhbnNmb3JtZXJGbGFnLnN1cGVyQ2FsbHMpOwogICAgICAgIHJldHVybiBuZXcgU3VwZXJQcm9wZXJ0eVNldC5ieVJlZmVyZW5jZSgKICAgICAgICAgICAgcmVhZE5hbWUoKSwgcmVhZEV4cHJlc3Npb24oKSwgcmVhZE1lbWJlclJlZmVyZW5jZShhbGxvd051bGw6IHRydWUpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5EaXJlY3RQcm9wZXJ0eUdldDoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJldHVybiBuZXcgRGlyZWN0UHJvcGVydHlHZXQuYnlSZWZlcmVuY2UoCiAgICAgICAgICAgIHJlYWRFeHByZXNzaW9uKCksIHJlYWRNZW1iZXJSZWZlcmVuY2UoKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuRGlyZWN0UHJvcGVydHlTZXQ6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZXR1cm4gbmV3IERpcmVjdFByb3BlcnR5U2V0LmJ5UmVmZXJlbmNlKAogICAgICAgICAgICByZWFkRXhwcmVzc2lvbigpLCByZWFkTWVtYmVyUmVmZXJlbmNlKCksIHJlYWRFeHByZXNzaW9uKCkpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLlN0YXRpY0dldDoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJldHVybiBuZXcgU3RhdGljR2V0LmJ5UmVmZXJlbmNlKHJlYWRNZW1iZXJSZWZlcmVuY2UoKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuU3RhdGljU2V0OgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBTdGF0aWNTZXQuYnlSZWZlcmVuY2UoCiAgICAgICAgICAgIHJlYWRNZW1iZXJSZWZlcmVuY2UoKSwgcmVhZEV4cHJlc3Npb24oKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuTWV0aG9kSW52b2NhdGlvbjoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJldHVybiBuZXcgTWV0aG9kSW52b2NhdGlvbi5ieVJlZmVyZW5jZShyZWFkRXhwcmVzc2lvbigpLCByZWFkTmFtZSgpLAogICAgICAgICAgICByZWFkQXJndW1lbnRzKCksIHJlYWRNZW1iZXJSZWZlcmVuY2UoYWxsb3dOdWxsOiB0cnVlKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuU3VwZXJNZXRob2RJbnZvY2F0aW9uOgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgYWRkVHJhbnNmb3JtZXJGbGFnKFRyYW5zZm9ybWVyRmxhZy5zdXBlckNhbGxzKTsKICAgICAgICByZXR1cm4gbmV3IFN1cGVyTWV0aG9kSW52b2NhdGlvbi5ieVJlZmVyZW5jZSgKICAgICAgICAgICAgcmVhZE5hbWUoKSwgcmVhZEFyZ3VtZW50cygpLCByZWFkTWVtYmVyUmVmZXJlbmNlKGFsbG93TnVsbDogdHJ1ZSkpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLkRpcmVjdE1ldGhvZEludm9jYXRpb246CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZXR1cm4gbmV3IERpcmVjdE1ldGhvZEludm9jYXRpb24uYnlSZWZlcmVuY2UoCiAgICAgICAgICAgIHJlYWRFeHByZXNzaW9uKCksIHJlYWRNZW1iZXJSZWZlcmVuY2UoKSwgcmVhZEFyZ3VtZW50cygpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5TdGF0aWNJbnZvY2F0aW9uOgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBTdGF0aWNJbnZvY2F0aW9uLmJ5UmVmZXJlbmNlKAogICAgICAgICAgICByZWFkTWVtYmVyUmVmZXJlbmNlKCksIHJlYWRBcmd1bWVudHMoKSwKICAgICAgICAgICAgaXNDb25zdDogZmFsc2UpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLkNvbnN0U3RhdGljSW52b2NhdGlvbjoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJldHVybiBuZXcgU3RhdGljSW52b2NhdGlvbi5ieVJlZmVyZW5jZSgKICAgICAgICAgICAgcmVhZE1lbWJlclJlZmVyZW5jZSgpLCByZWFkQXJndW1lbnRzKCksCiAgICAgICAgICAgIGlzQ29uc3Q6IHRydWUpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLkNvbnN0cnVjdG9ySW52b2NhdGlvbjoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJldHVybiBuZXcgQ29uc3RydWN0b3JJbnZvY2F0aW9uLmJ5UmVmZXJlbmNlKAogICAgICAgICAgICByZWFkTWVtYmVyUmVmZXJlbmNlKCksIHJlYWRBcmd1bWVudHMoKSwKICAgICAgICAgICAgaXNDb25zdDogZmFsc2UpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLkNvbnN0Q29uc3RydWN0b3JJbnZvY2F0aW9uOgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvckludm9jYXRpb24uYnlSZWZlcmVuY2UoCiAgICAgICAgICAgIHJlYWRNZW1iZXJSZWZlcmVuY2UoKSwgcmVhZEFyZ3VtZW50cygpLAogICAgICAgICAgICBpc0NvbnN0OiB0cnVlKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5Ob3Q6CiAgICAgICAgcmV0dXJuIG5ldyBOb3QocmVhZEV4cHJlc3Npb24oKSk7CiAgICAgIGNhc2UgVGFnLkxvZ2ljYWxFeHByZXNzaW9uOgogICAgICAgIHJldHVybiBuZXcgTG9naWNhbEV4cHJlc3Npb24ocmVhZEV4cHJlc3Npb24oKSwKICAgICAgICAgICAgbG9naWNhbE9wZXJhdG9yVG9TdHJpbmcocmVhZEJ5dGUoKSksIHJlYWRFeHByZXNzaW9uKCkpOwogICAgICBjYXNlIFRhZy5Db25kaXRpb25hbEV4cHJlc3Npb246CiAgICAgICAgcmV0dXJuIG5ldyBDb25kaXRpb25hbEV4cHJlc3Npb24ocmVhZEV4cHJlc3Npb24oKSwgcmVhZEV4cHJlc3Npb24oKSwKICAgICAgICAgICAgcmVhZEV4cHJlc3Npb24oKSwgcmVhZERhcnRUeXBlT3B0aW9uKCkpOwogICAgICBjYXNlIFRhZy5TdHJpbmdDb25jYXRlbmF0aW9uOgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdDb25jYXRlbmF0aW9uKHJlYWRFeHByZXNzaW9uTGlzdCgpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5MaXN0Q29uY2F0ZW5hdGlvbjoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHZhciB0eXBlQXJndW1lbnQgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICByZXR1cm4gbmV3IExpc3RDb25jYXRlbmF0aW9uKHJlYWRFeHByZXNzaW9uTGlzdCgpLAogICAgICAgICAgICB0eXBlQXJndW1lbnQ6IHR5cGVBcmd1bWVudCkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuU2V0Q29uY2F0ZW5hdGlvbjoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHZhciB0eXBlQXJndW1lbnQgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICByZXR1cm4gbmV3IFNldENvbmNhdGVuYXRpb24ocmVhZEV4cHJlc3Npb25MaXN0KCksCiAgICAgICAgICAgIHR5cGVBcmd1bWVudDogdHlwZUFyZ3VtZW50KQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5NYXBDb25jYXRlbmF0aW9uOgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgdmFyIGtleVR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICB2YXIgdmFsdWVUeXBlID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBNYXBDb25jYXRlbmF0aW9uKHJlYWRFeHByZXNzaW9uTGlzdCgpLAogICAgICAgICAgICBrZXlUeXBlOiBrZXlUeXBlLCB2YWx1ZVR5cGU6IHZhbHVlVHlwZSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuSW5zdGFuY2VDcmVhdGlvbjoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIFJlZmVyZW5jZSBjbGFzc1JlZmVyZW5jZSA9IHJlYWRDbGFzc1JlZmVyZW5jZSgpOwogICAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPSByZWFkRGFydFR5cGVMaXN0KCk7CiAgICAgICAgaW50IGZpZWxkVmFsdWVDb3VudCA9IHJlYWRVSW50KCk7CiAgICAgICAgTWFwPFJlZmVyZW5jZSwgRXhwcmVzc2lvbj4gZmllbGRWYWx1ZXMgPSA8UmVmZXJlbmNlLCBFeHByZXNzaW9uPnt9OwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRWYWx1ZUNvdW50OyBpKyspIHsKICAgICAgICAgIGZpbmFsIFJlZmVyZW5jZSBmaWVsZFJlZiA9CiAgICAgICAgICAgICAgcmVhZENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoKS5nZXRSZWZlcmVuY2UoKTsKICAgICAgICAgIGZpbmFsIEV4cHJlc3Npb24gdmFsdWUgPSByZWFkRXhwcmVzc2lvbigpOwogICAgICAgICAgZmllbGRWYWx1ZXNbZmllbGRSZWZdID0gdmFsdWU7CiAgICAgICAgfQogICAgICAgIGludCBhc3NlcnRDb3VudCA9IHJlYWRVSW50KCk7CiAgICAgICAgTGlzdDxBc3NlcnRTdGF0ZW1lbnQ+IGFzc2VydHMgPSBuZXcgTGlzdDxBc3NlcnRTdGF0ZW1lbnQ+KGFzc2VydENvdW50KTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFzc2VydENvdW50OyBpKyspIHsKICAgICAgICAgIGFzc2VydHNbaV0gPSByZWFkU3RhdGVtZW50KCk7CiAgICAgICAgfQogICAgICAgIExpc3Q8RXhwcmVzc2lvbj4gdW51c2VkQXJndW1lbnRzID0gcmVhZEV4cHJlc3Npb25MaXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBJbnN0YW5jZUNyZWF0aW9uKGNsYXNzUmVmZXJlbmNlLCB0eXBlQXJndW1lbnRzLCBmaWVsZFZhbHVlcywKICAgICAgICAgICAgYXNzZXJ0cywgdW51c2VkQXJndW1lbnRzKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5Jc0V4cHJlc3Npb246CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZXR1cm4gbmV3IElzRXhwcmVzc2lvbihyZWFkRXhwcmVzc2lvbigpLCByZWFkRGFydFR5cGUoKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuQXNFeHByZXNzaW9uOgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgaW50IGZsYWdzID0gcmVhZEJ5dGUoKTsKICAgICAgICByZXR1cm4gbmV3IEFzRXhwcmVzc2lvbihyZWFkRXhwcmVzc2lvbigpLCByZWFkRGFydFR5cGUoKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldAogICAgICAgICAgLi5mbGFncyA9IGZsYWdzOwogICAgICBjYXNlIFRhZy5TdHJpbmdMaXRlcmFsOgogICAgICAgIHJldHVybiBuZXcgU3RyaW5nTGl0ZXJhbChyZWFkU3RyaW5nUmVmZXJlbmNlKCkpOwogICAgICBjYXNlIFRhZy5TcGVjaWFsaXplZEludExpdGVyYWw6CiAgICAgICAgaW50IGJpYXNlZFZhbHVlID0gdGFnQnl0ZSAmIFRhZy5TcGVjaWFsaXplZFBheWxvYWRNYXNrOwogICAgICAgIHJldHVybiBuZXcgSW50TGl0ZXJhbChiaWFzZWRWYWx1ZSAtIFRhZy5TcGVjaWFsaXplZEludExpdGVyYWxCaWFzKTsKICAgICAgY2FzZSBUYWcuUG9zaXRpdmVJbnRMaXRlcmFsOgogICAgICAgIHJldHVybiBuZXcgSW50TGl0ZXJhbChyZWFkVUludCgpKTsKICAgICAgY2FzZSBUYWcuTmVnYXRpdmVJbnRMaXRlcmFsOgogICAgICAgIHJldHVybiBuZXcgSW50TGl0ZXJhbCgtcmVhZFVJbnQoKSk7CiAgICAgIGNhc2UgVGFnLkJpZ0ludExpdGVyYWw6CiAgICAgICAgcmV0dXJuIG5ldyBJbnRMaXRlcmFsKGludC5wYXJzZShyZWFkU3RyaW5nUmVmZXJlbmNlKCkpKTsKICAgICAgY2FzZSBUYWcuRG91YmxlTGl0ZXJhbDoKICAgICAgICByZXR1cm4gbmV3IERvdWJsZUxpdGVyYWwocmVhZERvdWJsZSgpKTsKICAgICAgY2FzZSBUYWcuVHJ1ZUxpdGVyYWw6CiAgICAgICAgcmV0dXJuIG5ldyBCb29sTGl0ZXJhbCh0cnVlKTsKICAgICAgY2FzZSBUYWcuRmFsc2VMaXRlcmFsOgogICAgICAgIHJldHVybiBuZXcgQm9vbExpdGVyYWwoZmFsc2UpOwogICAgICBjYXNlIFRhZy5OdWxsTGl0ZXJhbDoKICAgICAgICByZXR1cm4gbmV3IE51bGxMaXRlcmFsKCk7CiAgICAgIGNhc2UgVGFnLlN5bWJvbExpdGVyYWw6CiAgICAgICAgcmV0dXJuIG5ldyBTeW1ib2xMaXRlcmFsKHJlYWRTdHJpbmdSZWZlcmVuY2UoKSk7CiAgICAgIGNhc2UgVGFnLlR5cGVMaXRlcmFsOgogICAgICAgIHJldHVybiBuZXcgVHlwZUxpdGVyYWwocmVhZERhcnRUeXBlKCkpOwogICAgICBjYXNlIFRhZy5UaGlzRXhwcmVzc2lvbjoKICAgICAgICByZXR1cm4gbmV3IFRoaXNFeHByZXNzaW9uKCk7CiAgICAgIGNhc2UgVGFnLlJldGhyb3c6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZXR1cm4gbmV3IFJldGhyb3coKS4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuVGhyb3c6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZXR1cm4gbmV3IFRocm93KHJlYWRFeHByZXNzaW9uKCkpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5MaXN0TGl0ZXJhbDoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHZhciB0eXBlQXJndW1lbnQgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICByZXR1cm4gbmV3IExpc3RMaXRlcmFsKHJlYWRFeHByZXNzaW9uTGlzdCgpLAogICAgICAgICAgICB0eXBlQXJndW1lbnQ6IHR5cGVBcmd1bWVudCwgaXNDb25zdDogZmFsc2UpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLkNvbnN0TGlzdExpdGVyYWw6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICB2YXIgdHlwZUFyZ3VtZW50ID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBMaXN0TGl0ZXJhbChyZWFkRXhwcmVzc2lvbkxpc3QoKSwKICAgICAgICAgICAgdHlwZUFyZ3VtZW50OiB0eXBlQXJndW1lbnQsIGlzQ29uc3Q6IHRydWUpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLlNldExpdGVyYWw6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICB2YXIgdHlwZUFyZ3VtZW50ID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBTZXRMaXRlcmFsKHJlYWRFeHByZXNzaW9uTGlzdCgpLAogICAgICAgICAgICB0eXBlQXJndW1lbnQ6IHR5cGVBcmd1bWVudCwgaXNDb25zdDogZmFsc2UpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLkNvbnN0U2V0TGl0ZXJhbDoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHZhciB0eXBlQXJndW1lbnQgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICByZXR1cm4gbmV3IFNldExpdGVyYWwocmVhZEV4cHJlc3Npb25MaXN0KCksCiAgICAgICAgICAgIHR5cGVBcmd1bWVudDogdHlwZUFyZ3VtZW50LCBpc0NvbnN0OiB0cnVlKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5NYXBMaXRlcmFsOgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgdmFyIGtleVR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICB2YXIgdmFsdWVUeXBlID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBNYXBMaXRlcmFsKHJlYWRNYXBFbnRyeUxpc3QoKSwKICAgICAgICAgICAga2V5VHlwZToga2V5VHlwZSwgdmFsdWVUeXBlOiB2YWx1ZVR5cGUsIGlzQ29uc3Q6IGZhbHNlKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5Db25zdE1hcExpdGVyYWw6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICB2YXIga2V5VHlwZSA9IHJlYWREYXJ0VHlwZSgpOwogICAgICAgIHZhciB2YWx1ZVR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICByZXR1cm4gbmV3IE1hcExpdGVyYWwocmVhZE1hcEVudHJ5TGlzdCgpLAogICAgICAgICAgICBrZXlUeXBlOiBrZXlUeXBlLCB2YWx1ZVR5cGU6IHZhbHVlVHlwZSwgaXNDb25zdDogdHJ1ZSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuQXdhaXRFeHByZXNzaW9uOgogICAgICAgIHJldHVybiBuZXcgQXdhaXRFeHByZXNzaW9uKHJlYWRFeHByZXNzaW9uKCkpOwogICAgICBjYXNlIFRhZy5GdW5jdGlvbkV4cHJlc3Npb246CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uRXhwcmVzc2lvbihyZWFkRnVuY3Rpb25Ob2RlKCkpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5MZXQ6CiAgICAgICAgdmFyIHZhcmlhYmxlID0gcmVhZFZhcmlhYmxlRGVjbGFyYXRpb24oKTsKICAgICAgICBpbnQgc3RhY2tIZWlnaHQgPSB2YXJpYWJsZVN0YWNrLmxlbmd0aDsKICAgICAgICBwdXNoVmFyaWFibGVEZWNsYXJhdGlvbih2YXJpYWJsZSk7CiAgICAgICAgdmFyIGJvZHkgPSByZWFkRXhwcmVzc2lvbigpOwogICAgICAgIHZhcmlhYmxlU3RhY2subGVuZ3RoID0gc3RhY2tIZWlnaHQ7CiAgICAgICAgcmV0dXJuIG5ldyBMZXQodmFyaWFibGUsIGJvZHkpOwogICAgICBjYXNlIFRhZy5CbG9ja0V4cHJlc3Npb246CiAgICAgICAgaW50IHN0YWNrSGVpZ2h0ID0gdmFyaWFibGVTdGFjay5sZW5ndGg7CiAgICAgICAgdmFyIHN0YXRlbWVudHMgPSByZWFkU3RhdGVtZW50TGlzdCgpOwogICAgICAgIHZhciB2YWx1ZSA9IHJlYWRFeHByZXNzaW9uKCk7CiAgICAgICAgdmFyaWFibGVTdGFjay5sZW5ndGggPSBzdGFja0hlaWdodDsKICAgICAgICByZXR1cm4gbmV3IEJsb2NrRXhwcmVzc2lvbihuZXcgQmxvY2soc3RhdGVtZW50cyksIHZhbHVlKTsKICAgICAgY2FzZSBUYWcuSW5zdGFudGlhdGlvbjoKICAgICAgICB2YXIgZXhwcmVzc2lvbiA9IHJlYWRFeHByZXNzaW9uKCk7CiAgICAgICAgdmFyIHR5cGVBcmd1bWVudHMgPSByZWFkRGFydFR5cGVMaXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBJbnN0YW50aWF0aW9uKGV4cHJlc3Npb24sIHR5cGVBcmd1bWVudHMpOwogICAgICBjYXNlIFRhZy5Db25zdGFudEV4cHJlc3Npb246CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICBEYXJ0VHlwZSB0eXBlID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgQ29uc3RhbnQgY29uc3RhbnQgPSByZWFkQ29uc3RhbnRSZWZlcmVuY2UoKTsKICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50RXhwcmVzc2lvbihjb25zdGFudCwgdHlwZSkuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgZmFpbCgndW5leHBlY3RlZCBleHByZXNzaW9uIHRhZzogJHRhZycpOwogICAgfQogIH0KCiAgTGlzdDxNYXBFbnRyeT4gcmVhZE1hcEVudHJ5TGlzdCgpIHsKICAgIGludCBsZW5ndGggPSByZWFkVUludCgpOwogICAgTGlzdDxNYXBFbnRyeT4gcmVzdWx0ID0KICAgICAgICBuZXcgTGlzdDxNYXBFbnRyeT4uZmlsbGVkKGxlbmd0aCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICByZXN1bHRbaV0gPSByZWFkTWFwRW50cnkoKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBNYXBFbnRyeSByZWFkTWFwRW50cnkoKSB7CiAgICByZXR1cm4gbmV3IE1hcEVudHJ5KHJlYWRFeHByZXNzaW9uKCksIHJlYWRFeHByZXNzaW9uKCkpOwogIH0KCiAgTGlzdDxTdGF0ZW1lbnQ+IHJlYWRTdGF0ZW1lbnRMaXN0KCkgewogICAgaW50IGxlbmd0aCA9IHJlYWRVSW50KCk7CiAgICBMaXN0PFN0YXRlbWVudD4gcmVzdWx0ID0KICAgICAgICBuZXcgTGlzdDxTdGF0ZW1lbnQ+LmZpbGxlZChsZW5ndGgsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgcmVzdWx0W2ldID0gcmVhZFN0YXRlbWVudCgpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFN0YXRlbWVudCByZWFkU3RhdGVtZW50T3JOdWxsSWZFbXB0eSgpIHsKICAgIHZhciBub2RlID0gcmVhZFN0YXRlbWVudCgpOwogICAgaWYgKG5vZGUgaXMgRW1wdHlTdGF0ZW1lbnQpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbm9kZTsKICAgIH0KICB9CgogIFN0YXRlbWVudCByZWFkU3RhdGVtZW50T3B0aW9uKCkgewogICAgcmV0dXJuIHJlYWRBbmRDaGVja09wdGlvblRhZygpID8gcmVhZFN0YXRlbWVudCgpIDogbnVsbDsKICB9CgogIFN0YXRlbWVudCByZWFkU3RhdGVtZW50KCkgewogICAgaW50IHRhZyA9IHJlYWRCeXRlKCk7CiAgICBzd2l0Y2ggKHRhZykgewogICAgICBjYXNlIFRhZy5FeHByZXNzaW9uU3RhdGVtZW50OgogICAgICAgIHJldHVybiBuZXcgRXhwcmVzc2lvblN0YXRlbWVudChyZWFkRXhwcmVzc2lvbigpKTsKICAgICAgY2FzZSBUYWcuQmxvY2s6CiAgICAgICAgcmV0dXJuIHJlYWRCbG9jaygpOwogICAgICBjYXNlIFRhZy5Bc3NlcnRCbG9jazoKICAgICAgICByZXR1cm4gcmVhZEFzc2VydEJsb2NrKCk7CiAgICAgIGNhc2UgVGFnLkVtcHR5U3RhdGVtZW50OgogICAgICAgIHJldHVybiBuZXcgRW1wdHlTdGF0ZW1lbnQoKTsKICAgICAgY2FzZSBUYWcuQXNzZXJ0U3RhdGVtZW50OgogICAgICAgIHJldHVybiBuZXcgQXNzZXJ0U3RhdGVtZW50KHJlYWRFeHByZXNzaW9uKCksCiAgICAgICAgICAgIGNvbmRpdGlvblN0YXJ0T2Zmc2V0OiByZWFkT2Zmc2V0KCksCiAgICAgICAgICAgIGNvbmRpdGlvbkVuZE9mZnNldDogcmVhZE9mZnNldCgpLAogICAgICAgICAgICBtZXNzYWdlOiByZWFkRXhwcmVzc2lvbk9wdGlvbigpKTsKICAgICAgY2FzZSBUYWcuTGFiZWxlZFN0YXRlbWVudDoKICAgICAgICB2YXIgbGFiZWwgPSBuZXcgTGFiZWxlZFN0YXRlbWVudChudWxsKTsKICAgICAgICBsYWJlbFN0YWNrLmFkZChsYWJlbCk7CiAgICAgICAgbGFiZWwuYm9keSA9IHJlYWRTdGF0ZW1lbnQoKS4ucGFyZW50ID0gbGFiZWw7CiAgICAgICAgbGFiZWxTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgcmV0dXJuIGxhYmVsOwogICAgICBjYXNlIFRhZy5CcmVha1N0YXRlbWVudDoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIGludCBpbmRleCA9IHJlYWRVSW50KCk7CiAgICAgICAgcmV0dXJuIG5ldyBCcmVha1N0YXRlbWVudChsYWJlbFN0YWNrW2xhYmVsU3RhY2tCYXNlICsgaW5kZXhdKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5XaGlsZVN0YXRlbWVudDoKICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJldHVybiBuZXcgV2hpbGVTdGF0ZW1lbnQocmVhZEV4cHJlc3Npb24oKSwgcmVhZFN0YXRlbWVudCgpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5Eb1N0YXRlbWVudDoKICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJldHVybiBuZXcgRG9TdGF0ZW1lbnQocmVhZFN0YXRlbWVudCgpLCByZWFkRXhwcmVzc2lvbigpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5Gb3JTdGF0ZW1lbnQ6CiAgICAgICAgaW50IHZhcmlhYmxlU3RhY2tIZWlnaHQgPSB2YXJpYWJsZVN0YWNrLmxlbmd0aDsKICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHZhciB2YXJpYWJsZXMgPSByZWFkQW5kUHVzaFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KCk7CiAgICAgICAgdmFyIGNvbmRpdGlvbiA9IHJlYWRFeHByZXNzaW9uT3B0aW9uKCk7CiAgICAgICAgdmFyIHVwZGF0ZXMgPSByZWFkRXhwcmVzc2lvbkxpc3QoKTsKICAgICAgICB2YXIgYm9keSA9IHJlYWRTdGF0ZW1lbnQoKTsKICAgICAgICB2YXJpYWJsZVN0YWNrLmxlbmd0aCA9IHZhcmlhYmxlU3RhY2tIZWlnaHQ7CiAgICAgICAgcmV0dXJuIG5ldyBGb3JTdGF0ZW1lbnQodmFyaWFibGVzLCBjb25kaXRpb24sIHVwZGF0ZXMsIGJvZHkpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLkZvckluU3RhdGVtZW50OgogICAgICBjYXNlIFRhZy5Bc3luY0ZvckluU3RhdGVtZW50OgogICAgICAgIGJvb2wgaXNBc3luYyA9IHRhZyA9PSBUYWcuQXN5bmNGb3JJblN0YXRlbWVudDsKICAgICAgICBpbnQgdmFyaWFibGVTdGFja0hlaWdodCA9IHZhcmlhYmxlU3RhY2subGVuZ3RoOwogICAgICAgIHZhciBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgdmFyIGJvZHlPZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgdmFyIHZhcmlhYmxlID0gcmVhZEFuZFB1c2hWYXJpYWJsZURlY2xhcmF0aW9uKCk7CiAgICAgICAgdmFyIGl0ZXJhYmxlID0gcmVhZEV4cHJlc3Npb24oKTsKICAgICAgICB2YXIgYm9keSA9IHJlYWRTdGF0ZW1lbnQoKTsKICAgICAgICB2YXJpYWJsZVN0YWNrLmxlbmd0aCA9IHZhcmlhYmxlU3RhY2tIZWlnaHQ7CiAgICAgICAgcmV0dXJuIG5ldyBGb3JJblN0YXRlbWVudCh2YXJpYWJsZSwgaXRlcmFibGUsIGJvZHksIGlzQXN5bmM6IGlzQXN5bmMpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQKICAgICAgICAgIC4uYm9keU9mZnNldCA9IGJvZHlPZmZzZXQ7CiAgICAgIGNhc2UgVGFnLlN3aXRjaFN0YXRlbWVudDoKICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHZhciBleHByZXNzaW9uID0gcmVhZEV4cHJlc3Npb24oKTsKICAgICAgICBpbnQgY291bnQgPSByZWFkVUludCgpOwogICAgICAgIExpc3Q8U3dpdGNoQ2FzZT4gY2FzZXMgPQogICAgICAgICAgICBuZXcgTGlzdDxTd2l0Y2hDYXNlPi5maWxsZWQoY291bnQsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgIGNhc2VzW2ldID0gbmV3IFN3aXRjaENhc2UuZW1wdHkoKTsKICAgICAgICB9CiAgICAgICAgc3dpdGNoQ2FzZVN0YWNrLmFkZEFsbChjYXNlcyk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjYXNlcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgcmVhZFN3aXRjaENhc2VJbnRvKGNhc2VzW2ldKTsKICAgICAgICB9CiAgICAgICAgc3dpdGNoQ2FzZVN0YWNrLmxlbmd0aCAtPSBjb3VudDsKICAgICAgICByZXR1cm4gbmV3IFN3aXRjaFN0YXRlbWVudChleHByZXNzaW9uLCBjYXNlcykuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLkNvbnRpbnVlU3dpdGNoU3RhdGVtZW50OgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgaW50IGluZGV4ID0gcmVhZFVJbnQoKTsKICAgICAgICByZXR1cm4gbmV3IENvbnRpbnVlU3dpdGNoU3RhdGVtZW50KHN3aXRjaENhc2VTdGFja1tpbmRleF0pCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLklmU3RhdGVtZW50OgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBJZlN0YXRlbWVudCgKICAgICAgICAgICAgcmVhZEV4cHJlc3Npb24oKSwgcmVhZFN0YXRlbWVudCgpLCByZWFkU3RhdGVtZW50T3JOdWxsSWZFbXB0eSgpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5SZXR1cm5TdGF0ZW1lbnQ6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZXR1cm4gbmV3IFJldHVyblN0YXRlbWVudChyZWFkRXhwcmVzc2lvbk9wdGlvbigpKS4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuVHJ5Q2F0Y2g6CiAgICAgICAgU3RhdGVtZW50IGJvZHkgPSByZWFkU3RhdGVtZW50KCk7CiAgICAgICAgaW50IGZsYWdzID0gcmVhZEJ5dGUoKTsKICAgICAgICByZXR1cm4gbmV3IFRyeUNhdGNoKGJvZHksIHJlYWRDYXRjaExpc3QoKSwgaXNTeW50aGV0aWM6IGZsYWdzICYgMiA9PSAyKTsKICAgICAgY2FzZSBUYWcuVHJ5RmluYWxseToKICAgICAgICByZXR1cm4gbmV3IFRyeUZpbmFsbHkocmVhZFN0YXRlbWVudCgpLCByZWFkU3RhdGVtZW50KCkpOwogICAgICBjYXNlIFRhZy5ZaWVsZFN0YXRlbWVudDoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIGludCBmbGFncyA9IHJlYWRCeXRlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBZaWVsZFN0YXRlbWVudChyZWFkRXhwcmVzc2lvbigpLAogICAgICAgICAgICBpc1lpZWxkU3RhcjogZmxhZ3MgJiBZaWVsZFN0YXRlbWVudC5GbGFnWWllbGRTdGFyICE9IDAsCiAgICAgICAgICAgIGlzTmF0aXZlOiBmbGFncyAmIFlpZWxkU3RhdGVtZW50LkZsYWdOYXRpdmUgIT0gMCkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuVmFyaWFibGVEZWNsYXJhdGlvbjoKICAgICAgICB2YXIgdmFyaWFibGUgPSByZWFkVmFyaWFibGVEZWNsYXJhdGlvbigpOwogICAgICAgIHZhcmlhYmxlU3RhY2suYWRkKHZhcmlhYmxlKTsgLy8gV2lsbCBiZSBwb3BwZWQgYnkgdGhlIGVuY2xvc2luZyBzY29wZS4KICAgICAgICByZXR1cm4gdmFyaWFibGU7CiAgICAgIGNhc2UgVGFnLkZ1bmN0aW9uRGVjbGFyYXRpb246CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICB2YXIgdmFyaWFibGUgPSByZWFkVmFyaWFibGVEZWNsYXJhdGlvbigpOwogICAgICAgIHZhcmlhYmxlU3RhY2suYWRkKHZhcmlhYmxlKTsgLy8gV2lsbCBiZSBwb3BwZWQgYnkgdGhlIGVuY2xvc2luZyBzY29wZS4KICAgICAgICB2YXIgZnVuY3Rpb24gPSByZWFkRnVuY3Rpb25Ob2RlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbkRlY2xhcmF0aW9uKHZhcmlhYmxlLCBmdW5jdGlvbikuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgZmFpbCgndW5leHBlY3RlZCBzdGF0ZW1lbnQgdGFnOiAkdGFnJyk7CiAgICB9CiAgfQoKICB2b2lkIHJlYWRTd2l0Y2hDYXNlSW50byhTd2l0Y2hDYXNlIGNhc2VOb2RlKSB7CiAgICBpbnQgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgIGNhc2VOb2RlLmV4cHJlc3Npb25zLmxlbmd0aCA9IGxlbmd0aDsKICAgIGNhc2VOb2RlLmV4cHJlc3Npb25PZmZzZXRzLmxlbmd0aCA9IGxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgY2FzZU5vZGUuZXhwcmVzc2lvbk9mZnNldHNbaV0gPSByZWFkT2Zmc2V0KCk7CiAgICAgIGNhc2VOb2RlLmV4cHJlc3Npb25zW2ldID0gcmVhZEV4cHJlc3Npb24oKS4ucGFyZW50ID0gY2FzZU5vZGU7CiAgICB9CiAgICBjYXNlTm9kZS5pc0RlZmF1bHQgPSByZWFkQnl0ZSgpID09IDE7CiAgICBjYXNlTm9kZS5ib2R5ID0gcmVhZFN0YXRlbWVudCgpLi5wYXJlbnQgPSBjYXNlTm9kZTsKICB9CgogIExpc3Q8Q2F0Y2g+IHJlYWRDYXRjaExpc3QoKSB7CiAgICBpbnQgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgIExpc3Q8Q2F0Y2g+IHJlc3VsdCA9IG5ldyBMaXN0PENhdGNoPi5maWxsZWQobGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIHJlc3VsdFtpXSA9IHJlYWRDYXRjaCgpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIENhdGNoIHJlYWRDYXRjaCgpIHsKICAgIGludCB2YXJpYWJsZVN0YWNrSGVpZ2h0ID0gdmFyaWFibGVTdGFjay5sZW5ndGg7CiAgICB2YXIgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgdmFyIGd1YXJkID0gcmVhZERhcnRUeXBlKCk7CiAgICB2YXIgZXhjZXB0aW9uID0gcmVhZEFuZFB1c2hWYXJpYWJsZURlY2xhcmF0aW9uT3B0aW9uKCk7CiAgICB2YXIgc3RhY2tUcmFjZSA9IHJlYWRBbmRQdXNoVmFyaWFibGVEZWNsYXJhdGlvbk9wdGlvbigpOwogICAgdmFyIGJvZHkgPSByZWFkU3RhdGVtZW50KCk7CiAgICB2YXJpYWJsZVN0YWNrLmxlbmd0aCA9IHZhcmlhYmxlU3RhY2tIZWlnaHQ7CiAgICByZXR1cm4gbmV3IENhdGNoKGV4Y2VwdGlvbiwgYm9keSwgZ3VhcmQ6IGd1YXJkLCBzdGFja1RyYWNlOiBzdGFja1RyYWNlKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgfQoKICBCbG9jayByZWFkQmxvY2soKSB7CiAgICBpbnQgc3RhY2tIZWlnaHQgPSB2YXJpYWJsZVN0YWNrLmxlbmd0aDsKICAgIHZhciBib2R5ID0gcmVhZFN0YXRlbWVudExpc3QoKTsKICAgIHZhcmlhYmxlU3RhY2subGVuZ3RoID0gc3RhY2tIZWlnaHQ7CiAgICByZXR1cm4gbmV3IEJsb2NrKGJvZHkpOwogIH0KCiAgQXNzZXJ0QmxvY2sgcmVhZEFzc2VydEJsb2NrKCkgewogICAgaW50IHN0YWNrSGVpZ2h0ID0gdmFyaWFibGVTdGFjay5sZW5ndGg7CiAgICB2YXIgYm9keSA9IHJlYWRTdGF0ZW1lbnRMaXN0KCk7CiAgICB2YXJpYWJsZVN0YWNrLmxlbmd0aCA9IHN0YWNrSGVpZ2h0OwogICAgcmV0dXJuIG5ldyBBc3NlcnRCbG9jayhib2R5KTsKICB9CgogIFN1cGVydHlwZSByZWFkU3VwZXJ0eXBlKCkgewogICAgSW50ZXJmYWNlVHlwZSB0eXBlID0gcmVhZERhcnRUeXBlKCk7CiAgICByZXR1cm4gbmV3IFN1cGVydHlwZS5ieVJlZmVyZW5jZSh0eXBlLmNsYXNzTmFtZSwgdHlwZS50eXBlQXJndW1lbnRzKTsKICB9CgogIFN1cGVydHlwZSByZWFkU3VwZXJ0eXBlT3B0aW9uKCkgewogICAgcmV0dXJuIHJlYWRBbmRDaGVja09wdGlvblRhZygpID8gcmVhZFN1cGVydHlwZSgpIDogbnVsbDsKICB9CgogIExpc3Q8U3VwZXJ0eXBlPiByZWFkU3VwZXJ0eXBlTGlzdCgpIHsKICAgIGludCBsZW5ndGggPSByZWFkVUludCgpOwogICAgTGlzdDxTdXBlcnR5cGU+IHJlc3VsdCA9CiAgICAgICAgbmV3IExpc3Q8U3VwZXJ0eXBlPi5maWxsZWQobGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIHJlc3VsdFtpXSA9IHJlYWRTdXBlcnR5cGUoKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBMaXN0PERhcnRUeXBlPiByZWFkRGFydFR5cGVMaXN0KCkgewogICAgaW50IGxlbmd0aCA9IHJlYWRVSW50KCk7CiAgICBMaXN0PERhcnRUeXBlPiByZXN1bHQgPQogICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQobGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIHJlc3VsdFtpXSA9IHJlYWREYXJ0VHlwZSgpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIExpc3Q8TmFtZWRUeXBlPiByZWFkTmFtZWRUeXBlTGlzdCgpIHsKICAgIGludCBsZW5ndGggPSByZWFkVUludCgpOwogICAgTGlzdDxOYW1lZFR5cGU+IHJlc3VsdCA9CiAgICAgICAgbmV3IExpc3Q8TmFtZWRUeXBlPi5maWxsZWQobGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIHJlc3VsdFtpXSA9IHJlYWROYW1lZFR5cGUoKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBOYW1lZFR5cGUgcmVhZE5hbWVkVHlwZSgpIHsKICAgIFN0cmluZyBuYW1lID0gcmVhZFN0cmluZ1JlZmVyZW5jZSgpOwogICAgRGFydFR5cGUgdHlwZSA9IHJlYWREYXJ0VHlwZSgpOwogICAgaW50IGZsYWdzID0gcmVhZEJ5dGUoKTsKICAgIHJldHVybiBuZXcgTmFtZWRUeXBlKG5hbWUsIHR5cGUsCiAgICAgICAgaXNSZXF1aXJlZDogKGZsYWdzICYgTmFtZWRUeXBlLkZsYWdSZXF1aXJlZE5hbWVkVHlwZSkgIT0gMCk7CiAgfQoKICBEYXJ0VHlwZSByZWFkRGFydFR5cGVPcHRpb24oKSB7CiAgICByZXR1cm4gcmVhZEFuZENoZWNrT3B0aW9uVGFnKCkgPyByZWFkRGFydFR5cGUoKSA6IG51bGw7CiAgfQoKICBEYXJ0VHlwZSByZWFkRGFydFR5cGUoKSB7CiAgICBpbnQgdGFnID0gcmVhZEJ5dGUoKTsKICAgIHN3aXRjaCAodGFnKSB7CiAgICAgIGNhc2UgVGFnLlR5cGVkZWZUeXBlOgogICAgICAgIGludCBudWxsYWJpbGl0eUluZGV4ID0gcmVhZEJ5dGUoKTsKICAgICAgICByZXR1cm4gbmV3IFR5cGVkZWZUeXBlLmJ5UmVmZXJlbmNlKHJlYWRUeXBlZGVmUmVmZXJlbmNlKCksCiAgICAgICAgICAgIHJlYWREYXJ0VHlwZUxpc3QoKSwgTnVsbGFiaWxpdHkudmFsdWVzW251bGxhYmlsaXR5SW5kZXhdKTsKICAgICAgY2FzZSBUYWcuQm90dG9tVHlwZToKICAgICAgICByZXR1cm4gY29uc3QgQm90dG9tVHlwZSgpOwogICAgICBjYXNlIFRhZy5JbnZhbGlkVHlwZToKICAgICAgICByZXR1cm4gY29uc3QgSW52YWxpZFR5cGUoKTsKICAgICAgY2FzZSBUYWcuRHluYW1pY1R5cGU6CiAgICAgICAgcmV0dXJuIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICAgIGNhc2UgVGFnLlZvaWRUeXBlOgogICAgICAgIHJldHVybiBjb25zdCBWb2lkVHlwZSgpOwogICAgICBjYXNlIFRhZy5JbnRlcmZhY2VUeXBlOgogICAgICAgIGludCBudWxsYWJpbGl0eUluZGV4ID0gcmVhZEJ5dGUoKTsKICAgICAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUuYnlSZWZlcmVuY2UocmVhZENsYXNzUmVmZXJlbmNlKCksCiAgICAgICAgICAgIHJlYWREYXJ0VHlwZUxpc3QoKSwgTnVsbGFiaWxpdHkudmFsdWVzW251bGxhYmlsaXR5SW5kZXhdKTsKICAgICAgY2FzZSBUYWcuU2ltcGxlSW50ZXJmYWNlVHlwZToKICAgICAgICBpbnQgbnVsbGFiaWxpdHlJbmRleCA9IHJlYWRCeXRlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlLmJ5UmVmZXJlbmNlKHJlYWRDbGFzc1JlZmVyZW5jZSgpLAogICAgICAgICAgICBjb25zdCA8RGFydFR5cGU+W10sIE51bGxhYmlsaXR5LnZhbHVlc1tudWxsYWJpbGl0eUluZGV4XSk7CiAgICAgIGNhc2UgVGFnLkZ1bmN0aW9uVHlwZToKICAgICAgICBpbnQgdHlwZVBhcmFtZXRlclN0YWNrSGVpZ2h0ID0gdHlwZVBhcmFtZXRlclN0YWNrLmxlbmd0aDsKICAgICAgICBpbnQgbnVsbGFiaWxpdHlJbmRleCA9IHJlYWRCeXRlKCk7CiAgICAgICAgdmFyIHR5cGVQYXJhbWV0ZXJzID0gcmVhZEFuZFB1c2hUeXBlUGFyYW1ldGVyTGlzdCgpOwogICAgICAgIHZhciByZXF1aXJlZFBhcmFtZXRlckNvdW50ID0gcmVhZFVJbnQoKTsKICAgICAgICB2YXIgdG90YWxQYXJhbWV0ZXJDb3VudCA9IHJlYWRVSW50KCk7CiAgICAgICAgdmFyIHBvc2l0aW9uYWwgPSByZWFkRGFydFR5cGVMaXN0KCk7CiAgICAgICAgdmFyIG5hbWVkID0gcmVhZE5hbWVkVHlwZUxpc3QoKTsKICAgICAgICB2YXIgdHlwZWRlZlR5cGUgPSByZWFkRGFydFR5cGVPcHRpb24oKTsKICAgICAgICBhc3NlcnQocG9zaXRpb25hbC5sZW5ndGggKyBuYW1lZC5sZW5ndGggPT0gdG90YWxQYXJhbWV0ZXJDb3VudCk7CiAgICAgICAgdmFyIHJldHVyblR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICB0eXBlUGFyYW1ldGVyU3RhY2subGVuZ3RoID0gdHlwZVBhcmFtZXRlclN0YWNrSGVpZ2h0OwogICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb25UeXBlKHBvc2l0aW9uYWwsIHJldHVyblR5cGUsCiAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzOiB0eXBlUGFyYW1ldGVycywKICAgICAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICAgICAgbmFtZWRQYXJhbWV0ZXJzOiBuYW1lZCwKICAgICAgICAgICAgdHlwZWRlZlR5cGU6IHR5cGVkZWZUeXBlLAogICAgICAgICAgICBudWxsYWJpbGl0eTogTnVsbGFiaWxpdHkudmFsdWVzW251bGxhYmlsaXR5SW5kZXhdKTsKICAgICAgY2FzZSBUYWcuU2ltcGxlRnVuY3Rpb25UeXBlOgogICAgICAgIGludCBudWxsYWJpbGl0eUluZGV4ID0gcmVhZEJ5dGUoKTsKICAgICAgICB2YXIgcG9zaXRpb25hbCA9IHJlYWREYXJ0VHlwZUxpc3QoKTsKICAgICAgICB2YXIgcmV0dXJuVHlwZSA9IHJlYWREYXJ0VHlwZSgpOwogICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb25UeXBlKHBvc2l0aW9uYWwsIHJldHVyblR5cGUsCiAgICAgICAgICAgIG51bGxhYmlsaXR5OiBOdWxsYWJpbGl0eS52YWx1ZXNbbnVsbGFiaWxpdHlJbmRleF0pOwogICAgICBjYXNlIFRhZy5UeXBlUGFyYW1ldGVyVHlwZToKICAgICAgICBpbnQgZGVjbGFyZWROdWxsYWJpbGl0eUluZGV4ID0gcmVhZEJ5dGUoKTsKICAgICAgICBpbnQgaW5kZXggPSByZWFkVUludCgpOwogICAgICAgIHZhciBib3VuZCA9IHJlYWREYXJ0VHlwZU9wdGlvbigpOwogICAgICAgIHJldHVybiBuZXcgVHlwZVBhcmFtZXRlclR5cGUodHlwZVBhcmFtZXRlclN0YWNrW2luZGV4XSwgYm91bmQsCiAgICAgICAgICAgIE51bGxhYmlsaXR5LnZhbHVlc1tkZWNsYXJlZE51bGxhYmlsaXR5SW5kZXhdKTsKICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBmYWlsKCd1bmV4cGVjdGVkIGRhcnQgdHlwZSB0YWc6ICR0YWcnKTsKICAgIH0KICB9CgogIExpc3Q8VHlwZVBhcmFtZXRlcj4gcmVhZEFuZFB1c2hUeXBlUGFyYW1ldGVyTGlzdCgKICAgICAgW0xpc3Q8VHlwZVBhcmFtZXRlcj4gbGlzdCwgVHJlZU5vZGUgcGFyZW50XSkgewogICAgaW50IGxlbmd0aCA9IHJlYWRVSW50KCk7CiAgICBpZiAobGVuZ3RoID09IDApIHJldHVybiBsaXN0ID8/IDxUeXBlUGFyYW1ldGVyPltdOwogICAgaWYgKGxpc3QgPT0gbnVsbCkgewogICAgICBsaXN0ID0gbmV3IExpc3Q8VHlwZVBhcmFtZXRlcj4uZmlsbGVkKGxlbmd0aCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgbGlzdFtpXSA9IG5ldyBUeXBlUGFyYW1ldGVyKG51bGwsIG51bGwpLi5wYXJlbnQgPSBwYXJlbnQ7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAobGlzdC5sZW5ndGggIT0gbGVuZ3RoKSB7CiAgICAgIGxpc3QubGVuZ3RoID0gbGVuZ3RoOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgbGlzdFtpXSA9IG5ldyBUeXBlUGFyYW1ldGVyKG51bGwsIG51bGwpLi5wYXJlbnQgPSBwYXJlbnQ7CiAgICAgIH0KICAgIH0KICAgIHR5cGVQYXJhbWV0ZXJTdGFjay5hZGRBbGwobGlzdCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHsKICAgICAgcmVhZFR5cGVQYXJhbWV0ZXIobGlzdFtpXSk7CiAgICB9CiAgICByZXR1cm4gbGlzdDsKICB9CgogIHZvaWQgcmVhZFR5cGVQYXJhbWV0ZXIoVHlwZVBhcmFtZXRlciBub2RlKSB7CiAgICBub2RlLmZsYWdzID0gcmVhZEJ5dGUoKTsKICAgIG5vZGUuYW5ub3RhdGlvbnMgPSByZWFkQW5ub3RhdGlvbkxpc3Qobm9kZSk7CiAgICBub2RlLm5hbWUgPSByZWFkU3RyaW5nT3JOdWxsSWZFbXB0eSgpOwogICAgbm9kZS5ib3VuZCA9IHJlYWREYXJ0VHlwZSgpOwogICAgbm9kZS5kZWZhdWx0VHlwZSA9IHJlYWREYXJ0VHlwZU9wdGlvbigpOwogIH0KCiAgQXJndW1lbnRzIHJlYWRBcmd1bWVudHMoKSB7CiAgICB2YXIgbnVtQXJndW1lbnRzID0gcmVhZFVJbnQoKTsKICAgIHZhciB0eXBlQXJndW1lbnRzID0gcmVhZERhcnRUeXBlTGlzdCgpOwogICAgdmFyIHBvc2l0aW9uYWwgPSByZWFkRXhwcmVzc2lvbkxpc3QoKTsKICAgIHZhciBuYW1lZCA9IHJlYWROYW1lZEV4cHJlc3Npb25MaXN0KCk7CiAgICBhc3NlcnQobnVtQXJndW1lbnRzID09IHBvc2l0aW9uYWwubGVuZ3RoICsgbmFtZWQubGVuZ3RoKTsKICAgIHJldHVybiBuZXcgQXJndW1lbnRzKHBvc2l0aW9uYWwsIHR5cGVzOiB0eXBlQXJndW1lbnRzLCBuYW1lZDogbmFtZWQpOwogIH0KCiAgTGlzdDxOYW1lZEV4cHJlc3Npb24+IHJlYWROYW1lZEV4cHJlc3Npb25MaXN0KCkgewogICAgaW50IGxlbmd0aCA9IHJlYWRVSW50KCk7CiAgICBMaXN0PE5hbWVkRXhwcmVzc2lvbj4gcmVzdWx0ID0KICAgICAgICBuZXcgTGlzdDxOYW1lZEV4cHJlc3Npb24+LmZpbGxlZChsZW5ndGgsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgcmVzdWx0W2ldID0gcmVhZE5hbWVkRXhwcmVzc2lvbigpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIE5hbWVkRXhwcmVzc2lvbiByZWFkTmFtZWRFeHByZXNzaW9uKCkgewogICAgcmV0dXJuIG5ldyBOYW1lZEV4cHJlc3Npb24ocmVhZFN0cmluZ1JlZmVyZW5jZSgpLCByZWFkRXhwcmVzc2lvbigpKTsKICB9CgogIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gcmVhZEFuZFB1c2hWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpIHsKICAgIGludCBsZW5ndGggPSByZWFkVUludCgpOwogICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiByZXN1bHQgPQogICAgICAgIG5ldyBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+LmZpbGxlZChsZW5ndGgsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgcmVzdWx0W2ldID0gcmVhZEFuZFB1c2hWYXJpYWJsZURlY2xhcmF0aW9uKCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgVmFyaWFibGVEZWNsYXJhdGlvbiByZWFkQW5kUHVzaFZhcmlhYmxlRGVjbGFyYXRpb25PcHRpb24oKSB7CiAgICByZXR1cm4gcmVhZEFuZENoZWNrT3B0aW9uVGFnKCkgPyByZWFkQW5kUHVzaFZhcmlhYmxlRGVjbGFyYXRpb24oKSA6IG51bGw7CiAgfQoKICBWYXJpYWJsZURlY2xhcmF0aW9uIHJlYWRBbmRQdXNoVmFyaWFibGVEZWNsYXJhdGlvbigpIHsKICAgIHZhciB2YXJpYWJsZSA9IHJlYWRWYXJpYWJsZURlY2xhcmF0aW9uKCk7CiAgICB2YXJpYWJsZVN0YWNrLmFkZCh2YXJpYWJsZSk7CiAgICByZXR1cm4gdmFyaWFibGU7CiAgfQoKICBWYXJpYWJsZURlY2xhcmF0aW9uIHJlYWRWYXJpYWJsZURlY2xhcmF0aW9uKCkgewogICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgIGludCBmaWxlRXF1YWxzT2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgLy8gVGhlIFtWYXJpYWJsZURlY2xhcmF0aW9uXSBpbnN0YW5jZSBpcyBub3QgY3JlYXRlZCBhdCB0aGlzIHBvaW50IHlldCwKICAgIC8vIHNvIGBudWxsYCBpcyB0ZW1wb3JhcmlseSBzZXQgYXMgdGhlIHBhcmVudCBvZiB0aGUgYW5ub3RhdGlvbiBub2Rlcy4KICAgIHZhciBhbm5vdGF0aW9ucyA9IHJlYWRBbm5vdGF0aW9uTGlzdChudWxsKTsKICAgIGludCBmbGFncyA9IHJlYWRCeXRlKCk7CiAgICB2YXIgbm9kZSA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKHJlYWRTdHJpbmdPck51bGxJZkVtcHR5KCksCiAgICAgICAgdHlwZTogcmVhZERhcnRUeXBlKCksIGluaXRpYWxpemVyOiByZWFkRXhwcmVzc2lvbk9wdGlvbigpLCBmbGFnczogZmxhZ3MpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldAogICAgICAuLmZpbGVFcXVhbHNPZmZzZXQgPSBmaWxlRXF1YWxzT2Zmc2V0OwogICAgaWYgKGFubm90YXRpb25zLmlzTm90RW1wdHkpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhbm5vdGF0aW9ucy5sZW5ndGg7ICsraSkgewogICAgICAgIHZhciBhbm5vdGF0aW9uID0gYW5ub3RhdGlvbnNbaV07CiAgICAgICAgYW5ub3RhdGlvbi5wYXJlbnQgPSBub2RlOwogICAgICB9CiAgICAgIG5vZGUuYW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9uczsKICAgIH0KICAgIHJldHVybiBub2RlOwogIH0KCiAgaW50IHJlYWRPZmZzZXQoKSB7CiAgICAvLyBPZmZzZXQgaXMgc2F2ZWQgYXMgdW5zaWduZWQsCiAgICAvLyBidXQgYWN0dWFsbHkgcmFuZ2VzIGZyb20gLTEgYW5kIHVwICh0aHVzIHRoZSAtMSkKICAgIHJldHVybiByZWFkVUludCgpIC0gMTsKICB9Cn0KCmNsYXNzIEJpbmFyeUJ1aWxkZXJXaXRoTWV0YWRhdGEgZXh0ZW5kcyBCaW5hcnlCdWlsZGVyIGltcGxlbWVudHMgQmluYXJ5U291cmNlIHsKICAvLy8gTGlzdCBvZiBtZXRhZGF0YSBzdWJzZWN0aW9ucyB0aGF0IGhhdmUgY29ycmVzcG9uZGluZyBbTWV0YWRhdGFSZXBvc2l0b3J5XQogIC8vLyBhbmQgYXJlIGF3YWl0aW5nIHRvIGJlIHBhcnNlZCBhbmQgYXR0YWNoZWQgdG8gbm9kZXMuCiAgTGlzdDxfTWV0YWRhdGFTdWJzZWN0aW9uPiBfc3Vic2VjdGlvbnM7CgogIEJpbmFyeUJ1aWxkZXJXaXRoTWV0YWRhdGEoYnl0ZXMsIFtmaWxlbmFtZV0pCiAgICAgIDogc3VwZXIoYnl0ZXMsIGZpbGVuYW1lOiBmaWxlbmFtZSk7CgogIEBvdmVycmlkZQogIHZvaWQgX3JlYWRNZXRhZGF0YU1hcHBpbmdzKAogICAgICBDb21wb25lbnQgY29tcG9uZW50LCBpbnQgYmluYXJ5T2Zmc2V0Rm9yTWV0YWRhdGFQYXlsb2FkcykgewogICAgLy8gQXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIGZ1bmN0aW9uIF9ieXRlT2Zmc2V0IHBvaW50cyByaWdodCBwYXN0CiAgICAvLyBtZXRhZGF0YU1hcHBpbmdzIHRvIHN0cmluZyB0YWJsZS4KCiAgICAvLyBSZWFkIHRoZSBsZW5ndGggb2YgbWV0YWRhdGFNYXBwaW5ncy4KICAgIF9ieXRlT2Zmc2V0IC09IDQ7CiAgICBmaW5hbCBzdWJTZWN0aW9uQ291bnQgPSByZWFkVWludDMyKCk7CgogICAgaW50IGVuZE9mZnNldCA9IF9ieXRlT2Zmc2V0IC0gNDsgLy8gRW5kIG9mZnNldCBvZiB0aGUgY3VycmVudCBzdWJzZWN0aW9uLgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdWJTZWN0aW9uQ291bnQ7IGkrKykgewogICAgICAvLyBSTGlzdDxQYWlyPFVJbnQzMiwgVUludDMyPj4gbm9kZU9mZnNldFRvTWV0YWRhdGFPZmZzZXQKICAgICAgX2J5dGVPZmZzZXQgPSBlbmRPZmZzZXQgLSA0OwogICAgICBmaW5hbCBtYXBwaW5nTGVuZ3RoID0gcmVhZFVpbnQzMigpOwogICAgICBmaW5hbCBtYXBwaW5nU3RhcnQgPSAoZW5kT2Zmc2V0IC0gNCkgLSA0ICogMiAqIG1hcHBpbmdMZW5ndGg7CiAgICAgIF9ieXRlT2Zmc2V0ID0gbWFwcGluZ1N0YXJ0IC0gNDsKCiAgICAgIC8vIFVJbnQzMiB0YWcgKGZpeGVkIHNpemUgU3RyaW5nUmVmZXJlbmNlKQogICAgICBmaW5hbCB0YWcgPSBfc3RyaW5nVGFibGVbcmVhZFVpbnQzMigpXTsKCiAgICAgIGZpbmFsIHJlcG9zaXRvcnkgPSBjb21wb25lbnQubWV0YWRhdGFbdGFnXTsKICAgICAgaWYgKHJlcG9zaXRvcnkgIT0gbnVsbCkgewogICAgICAgIC8vIFJlYWQgbm9kZU9mZnNldFRvTWV0YWRhdGFPZmZzZXQgbWFwcGluZy4KICAgICAgICBmaW5hbCBtYXBwaW5nID0gPGludCwgaW50Pnt9OwogICAgICAgIF9ieXRlT2Zmc2V0ID0gbWFwcGluZ1N0YXJ0OwogICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWFwcGluZ0xlbmd0aDsgaisrKSB7CiAgICAgICAgICBmaW5hbCBub2RlT2Zmc2V0ID0gcmVhZFVpbnQzMigpOwogICAgICAgICAgZmluYWwgbWV0YWRhdGFPZmZzZXQgPSBiaW5hcnlPZmZzZXRGb3JNZXRhZGF0YVBheWxvYWRzICsgcmVhZFVpbnQzMigpOwogICAgICAgICAgbWFwcGluZ1tub2RlT2Zmc2V0XSA9IG1ldGFkYXRhT2Zmc2V0OwogICAgICAgIH0KCiAgICAgICAgX3N1YnNlY3Rpb25zID8/PSA8X01ldGFkYXRhU3Vic2VjdGlvbj5bXTsKICAgICAgICBfc3Vic2VjdGlvbnMuYWRkKG5ldyBfTWV0YWRhdGFTdWJzZWN0aW9uKHJlcG9zaXRvcnksIG1hcHBpbmcpKTsKICAgICAgfQoKICAgICAgLy8gU3RhcnQgb2YgdGhlIHN1YnNlY3Rpb24gYW5kIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIG9uZS4KICAgICAgZW5kT2Zmc2V0ID0gbWFwcGluZ1N0YXJ0IC0gNDsKICAgIH0KICB9CgogIE9iamVjdCBfcmVhZE1ldGFkYXRhKE5vZGUgbm9kZSwgTWV0YWRhdGFSZXBvc2l0b3J5IHJlcG9zaXRvcnksIGludCBvZmZzZXQpIHsKICAgIGZpbmFsIGludCBzYXZlZE9mZnNldCA9IF9ieXRlT2Zmc2V0OwogICAgX2J5dGVPZmZzZXQgPSBvZmZzZXQ7CgogICAgZmluYWwgbWV0YWRhdGEgPSByZXBvc2l0b3J5LnJlYWRGcm9tQmluYXJ5KG5vZGUsIHRoaXMpOwoKICAgIF9ieXRlT2Zmc2V0ID0gc2F2ZWRPZmZzZXQ7CiAgICByZXR1cm4gbWV0YWRhdGE7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVudGVyU2NvcGUoe0xpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnN9KSB7CiAgICBpZiAodHlwZVBhcmFtZXRlcnMgIT0gbnVsbCkgewogICAgICB0eXBlUGFyYW1ldGVyU3RhY2suYWRkQWxsKHR5cGVQYXJhbWV0ZXJzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgbGVhdmVTY29wZSh7TGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVyc30pIHsKICAgIGlmICh0eXBlUGFyYW1ldGVycyAhPSBudWxsKSB7CiAgICAgIHR5cGVQYXJhbWV0ZXJTdGFjay5sZW5ndGggLT0gdHlwZVBhcmFtZXRlcnMubGVuZ3RoOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgTm9kZSBfYXNzb2NpYXRlTWV0YWRhdGEoTm9kZSBub2RlLCBpbnQgbm9kZU9mZnNldCkgewogICAgaWYgKF9zdWJzZWN0aW9ucyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBub2RlOwogICAgfQoKICAgIGZvciAodmFyIHN1YnNlY3Rpb24gaW4gX3N1YnNlY3Rpb25zKSB7CiAgICAgIC8vIEZpcnN0IGNoZWNrIGlmIHRoZXJlIGlzIGFueSBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhpcyBub2RlLgogICAgICBmaW5hbCBtZXRhZGF0YU9mZnNldCA9IHN1YnNlY3Rpb24ubWFwcGluZ1tub2RlT2Zmc2V0XTsKICAgICAgaWYgKG1ldGFkYXRhT2Zmc2V0ICE9IG51bGwpIHsKICAgICAgICBzdWJzZWN0aW9uLnJlcG9zaXRvcnkubWFwcGluZ1tub2RlXSA9CiAgICAgICAgICAgIF9yZWFkTWV0YWRhdGEobm9kZSwgc3Vic2VjdGlvbi5yZXBvc2l0b3J5LCBtZXRhZGF0YU9mZnNldCk7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHJlYWREYXJ0VHlwZSgpIHsKICAgIGZpbmFsIG5vZGVPZmZzZXQgPSBfYnl0ZU9mZnNldDsKICAgIGZpbmFsIHJlc3VsdCA9IHN1cGVyLnJlYWREYXJ0VHlwZSgpOwogICAgcmV0dXJuIF9hc3NvY2lhdGVNZXRhZGF0YShyZXN1bHQsIG5vZGVPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlicmFyeSByZWFkTGlicmFyeShDb21wb25lbnQgY29tcG9uZW50LCBpbnQgZW5kT2Zmc2V0KSB7CiAgICBmaW5hbCBub2RlT2Zmc2V0ID0gX2J5dGVPZmZzZXQ7CiAgICBmaW5hbCByZXN1bHQgPSBzdXBlci5yZWFkTGlicmFyeShjb21wb25lbnQsIGVuZE9mZnNldCk7CiAgICByZXR1cm4gX2Fzc29jaWF0ZU1ldGFkYXRhKHJlc3VsdCwgbm9kZU9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlZGVmIHJlYWRUeXBlZGVmKCkgewogICAgZmluYWwgbm9kZU9mZnNldCA9IF9ieXRlT2Zmc2V0OwogICAgZmluYWwgcmVzdWx0ID0gc3VwZXIucmVhZFR5cGVkZWYoKTsKICAgIHJldHVybiBfYXNzb2NpYXRlTWV0YWRhdGEocmVzdWx0LCBub2RlT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIENsYXNzIHJlYWRDbGFzcyhpbnQgZW5kT2Zmc2V0KSB7CiAgICBmaW5hbCBub2RlT2Zmc2V0ID0gX2J5dGVPZmZzZXQ7CiAgICBmaW5hbCByZXN1bHQgPSBzdXBlci5yZWFkQ2xhc3MoZW5kT2Zmc2V0KTsKICAgIHJldHVybiBfYXNzb2NpYXRlTWV0YWRhdGEocmVzdWx0LCBub2RlT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIEZpZWxkIHJlYWRGaWVsZCgpIHsKICAgIGZpbmFsIG5vZGVPZmZzZXQgPSBfYnl0ZU9mZnNldDsKICAgIGZpbmFsIHJlc3VsdCA9IHN1cGVyLnJlYWRGaWVsZCgpOwogICAgcmV0dXJuIF9hc3NvY2lhdGVNZXRhZGF0YShyZXN1bHQsIG5vZGVPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RydWN0b3IgcmVhZENvbnN0cnVjdG9yKCkgewogICAgZmluYWwgbm9kZU9mZnNldCA9IF9ieXRlT2Zmc2V0OwogICAgZmluYWwgcmVzdWx0ID0gc3VwZXIucmVhZENvbnN0cnVjdG9yKCk7CiAgICByZXR1cm4gX2Fzc29jaWF0ZU1ldGFkYXRhKHJlc3VsdCwgbm9kZU9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBQcm9jZWR1cmUgcmVhZFByb2NlZHVyZShpbnQgZW5kT2Zmc2V0KSB7CiAgICBmaW5hbCBub2RlT2Zmc2V0ID0gX2J5dGVPZmZzZXQ7CiAgICBmaW5hbCByZXN1bHQgPSBzdXBlci5yZWFkUHJvY2VkdXJlKGVuZE9mZnNldCk7CiAgICByZXR1cm4gX2Fzc29jaWF0ZU1ldGFkYXRhKHJlc3VsdCwgbm9kZU9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvciByZWFkUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IoKSB7CiAgICBmaW5hbCBub2RlT2Zmc2V0ID0gX2J5dGVPZmZzZXQ7CiAgICBmaW5hbCByZXN1bHQgPSBzdXBlci5yZWFkUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IoKTsKICAgIHJldHVybiBfYXNzb2NpYXRlTWV0YWRhdGEocmVzdWx0LCBub2RlT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyIHJlYWRJbml0aWFsaXplcigpIHsKICAgIGZpbmFsIG5vZGVPZmZzZXQgPSBfYnl0ZU9mZnNldDsKICAgIGZpbmFsIHJlc3VsdCA9IHN1cGVyLnJlYWRJbml0aWFsaXplcigpOwogICAgcmV0dXJuIF9hc3NvY2lhdGVNZXRhZGF0YShyZXN1bHQsIG5vZGVPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25Ob2RlIHJlYWRGdW5jdGlvbk5vZGUoCiAgICAgIHtib29sIGxhenlMb2FkQm9keTogZmFsc2UsIGludCBvdXRlckVuZE9mZnNldDogLTF9KSB7CiAgICBmaW5hbCBub2RlT2Zmc2V0ID0gX2J5dGVPZmZzZXQ7CiAgICBmaW5hbCByZXN1bHQgPSBzdXBlci5yZWFkRnVuY3Rpb25Ob2RlKAogICAgICAgIGxhenlMb2FkQm9keTogbGF6eUxvYWRCb2R5LCBvdXRlckVuZE9mZnNldDogb3V0ZXJFbmRPZmZzZXQpOwogICAgcmV0dXJuIF9hc3NvY2lhdGVNZXRhZGF0YShyZXN1bHQsIG5vZGVPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiByZWFkRXhwcmVzc2lvbigpIHsKICAgIGZpbmFsIG5vZGVPZmZzZXQgPSBfYnl0ZU9mZnNldDsKICAgIGZpbmFsIHJlc3VsdCA9IHN1cGVyLnJlYWRFeHByZXNzaW9uKCk7CiAgICByZXR1cm4gX2Fzc29jaWF0ZU1ldGFkYXRhKHJlc3VsdCwgbm9kZU9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBBcmd1bWVudHMgcmVhZEFyZ3VtZW50cygpIHsKICAgIGZpbmFsIG5vZGVPZmZzZXQgPSBfYnl0ZU9mZnNldDsKICAgIGZpbmFsIHJlc3VsdCA9IHN1cGVyLnJlYWRBcmd1bWVudHMoKTsKICAgIHJldHVybiBfYXNzb2NpYXRlTWV0YWRhdGEocmVzdWx0LCBub2RlT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIE5hbWVkRXhwcmVzc2lvbiByZWFkTmFtZWRFeHByZXNzaW9uKCkgewogICAgZmluYWwgbm9kZU9mZnNldCA9IF9ieXRlT2Zmc2V0OwogICAgZmluYWwgcmVzdWx0ID0gc3VwZXIucmVhZE5hbWVkRXhwcmVzc2lvbigpOwogICAgcmV0dXJuIF9hc3NvY2lhdGVNZXRhZGF0YShyZXN1bHQsIG5vZGVPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgVmFyaWFibGVEZWNsYXJhdGlvbiByZWFkVmFyaWFibGVEZWNsYXJhdGlvbigpIHsKICAgIGZpbmFsIG5vZGVPZmZzZXQgPSBfYnl0ZU9mZnNldDsKICAgIGZpbmFsIHJlc3VsdCA9IHN1cGVyLnJlYWRWYXJpYWJsZURlY2xhcmF0aW9uKCk7CiAgICByZXR1cm4gX2Fzc29jaWF0ZU1ldGFkYXRhKHJlc3VsdCwgbm9kZU9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdGF0ZW1lbnQgcmVhZFN0YXRlbWVudCgpIHsKICAgIGZpbmFsIG5vZGVPZmZzZXQgPSBfYnl0ZU9mZnNldDsKICAgIGZpbmFsIHJlc3VsdCA9IHN1cGVyLnJlYWRTdGF0ZW1lbnQoKTsKICAgIHJldHVybiBfYXNzb2NpYXRlTWV0YWRhdGEocmVzdWx0LCBub2RlT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIENvbWJpbmF0b3IgcmVhZENvbWJpbmF0b3IoKSB7CiAgICBmaW5hbCBub2RlT2Zmc2V0ID0gX2J5dGVPZmZzZXQ7CiAgICBmaW5hbCByZXN1bHQgPSBzdXBlci5yZWFkQ29tYmluYXRvcigpOwogICAgcmV0dXJuIF9hc3NvY2lhdGVNZXRhZGF0YShyZXN1bHQsIG5vZGVPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlicmFyeURlcGVuZGVuY3kgcmVhZExpYnJhcnlEZXBlbmRlbmN5KExpYnJhcnkgbGlicmFyeSkgewogICAgZmluYWwgbm9kZU9mZnNldCA9IF9ieXRlT2Zmc2V0OwogICAgZmluYWwgcmVzdWx0ID0gc3VwZXIucmVhZExpYnJhcnlEZXBlbmRlbmN5KGxpYnJhcnkpOwogICAgcmV0dXJuIF9hc3NvY2lhdGVNZXRhZGF0YShyZXN1bHQsIG5vZGVPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlicmFyeVBhcnQgcmVhZExpYnJhcnlQYXJ0KExpYnJhcnkgbGlicmFyeSkgewogICAgZmluYWwgbm9kZU9mZnNldCA9IF9ieXRlT2Zmc2V0OwogICAgZmluYWwgcmVzdWx0ID0gc3VwZXIucmVhZExpYnJhcnlQYXJ0KGxpYnJhcnkpOwogICAgcmV0dXJuIF9hc3NvY2lhdGVNZXRhZGF0YShyZXN1bHQsIG5vZGVPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWFkU3dpdGNoQ2FzZUludG8oU3dpdGNoQ2FzZSBjYXNlTm9kZSkgewogICAgX2Fzc29jaWF0ZU1ldGFkYXRhKGNhc2VOb2RlLCBfYnl0ZU9mZnNldCk7CiAgICBzdXBlci5yZWFkU3dpdGNoQ2FzZUludG8oY2FzZU5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWFkVHlwZVBhcmFtZXRlcihUeXBlUGFyYW1ldGVyIHBhcmFtKSB7CiAgICBfYXNzb2NpYXRlTWV0YWRhdGEocGFyYW0sIF9ieXRlT2Zmc2V0KTsKICAgIHN1cGVyLnJlYWRUeXBlUGFyYW1ldGVyKHBhcmFtKTsKICB9CgogIEBvdmVycmlkZQogIFN1cGVydHlwZSByZWFkU3VwZXJ0eXBlKCkgewogICAgZmluYWwgbm9kZU9mZnNldCA9IF9ieXRlT2Zmc2V0OwogICAgSW50ZXJmYWNlVHlwZSB0eXBlID0gc3VwZXIucmVhZERhcnRUeXBlKCk7CiAgICByZXR1cm4gX2Fzc29jaWF0ZU1ldGFkYXRhKAogICAgICAgIG5ldyBTdXBlcnR5cGUuYnlSZWZlcmVuY2UodHlwZS5jbGFzc05hbWUsIHR5cGUudHlwZUFyZ3VtZW50cyksCiAgICAgICAgbm9kZU9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBOYW1lIHJlYWROYW1lKCkgewogICAgZmluYWwgbm9kZU9mZnNldCA9IF9ieXRlT2Zmc2V0OwogICAgZmluYWwgcmVzdWx0ID0gc3VwZXIucmVhZE5hbWUoKTsKICAgIHJldHVybiBfYXNzb2NpYXRlTWV0YWRhdGEocmVzdWx0LCBub2RlT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgY3VycmVudE9mZnNldCA9PiBfYnl0ZU9mZnNldDsKCiAgQG92ZXJyaWRlCiAgTGlzdDxpbnQ+IGdldCBieXRlcyA9PiBfYnl0ZXM7Cn0KCi8vLyBEZXNlcmlhbGl6ZWQgTWV0YWRhdGFNYXBwaW5nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIG1ldGFkYXRhIHJlcG9zaXRvcnkuCmNsYXNzIF9NZXRhZGF0YVN1YnNlY3Rpb24gewogIC8vLyBbTWV0YWRhdGFSZXBvc2l0b3J5XSB0aGF0IGNhbiByZWFkIHRoaXMgc3Vic2VjdGlvbi4KICBmaW5hbCBNZXRhZGF0YVJlcG9zaXRvcnkgcmVwb3NpdG9yeTsKCiAgLy8vIERlc2VyaWFsaXplZCBtYXBwaW5nIGZyb20gbm9kZSBvZmZzZXRzIHRvIG1ldGFkYXRhIG9mZnNldHMuCiAgZmluYWwgTWFwPGludCwgaW50PiBtYXBwaW5nOwoKICBfTWV0YWRhdGFTdWJzZWN0aW9uKHRoaXMucmVwb3NpdG9yeSwgdGhpcy5tYXBwaW5nKTsKfQqJjABOTjwgASIXGgEWKBMBExMREg8BSAFCAgEiFQErARYzMgQCARsYASQCATk6AgEYKAEiJScnIiQbHBQgAgEWS0IaO0QZGhcwLTkiHRshAUYoJwEwKAFQUCYkAR0WJycyTQEZHlEEASUBKwETGxwSEyMSMA0SJR8eFgYEARUgHRwUBAE4IAEYPygoKCgoKCgoHQQBJC06IRIEAR0iBAEpUEcfLicrKxsYFQYoPx0hNAYTBAE1HkI5BAErNzkRBAEtJh0yJyIGJxsZJz8jBgQBHSMoJ0sGBAEmKBslIyUyJEgnMSc6J0xMJDEzJy9NKzg6OQo9JTYnJ0UrMAo4JDYnJ0UrMAo3KT8yLVA2LQowTjQlOz0sClE1TCdBKyUKSShROywuLiw4NAYBOQQBJSMwHhUEARsoBAEhJQQBKx1RJykGEwQBJSgrBAEhGh4UJxMNMQYEATkdMhxDJzMGEQQBGk8dGicoKQYEAUMdGicjGAYEASodJxQGBAFPUS4GTVAjHFArSxszDUlJRiYwI1A4JCwKCAYEAS8dMicqKxNRLQYEASEnJR8eHyYXPwgXHwYjKgQBRAZOHgY/T1BHHh4mRQYgLjAGGjcpIgYgKkwcBgEfMwYEATwGPzI3KSIGICofPhwGBAFSQgZOHgZFGjQrN0o5Jy0iKk0fCgg7BgEfMwYEATtEIjQoKScoKCotKilPRSkkJzcaKhUtRg4MJDosQg4wLUkODAosCAYEAS4zTEo9KjEGLAQBPyYBNAE6RyhRPEQ0QFVUNDEGAScTTwElTlEtLi0uTlAvOEcGASIBEwQBTSkBJCZFBgEsNDYGAVFEATQ2LwE9BAFHKQEkJkUGASw0NgYBNyIvNwYBUUQBNCMBNyMBRUdNAToBNDYvATYZATAyLTsGARVPLQE9BAFIJR0iGz8nPhYGFAQBJx8BEiU0JyshET4gLSI3ISw4IycIMS0RRE0GARMnFAYYBAEvHCEiBAE+ISIEATxARCBGBAE3HDAEATotJkYGIQQBOy0mRwYhBAFMOCZHBiEEASU5BAEUKS1BDR0GBAE8EycBMScnRAFPTDgjM0IGPAFPUDhFLz4GIwEcOzMBKysBNjgmJRYGTxsQTDwGHy0BQyYBNwEbHU4bIS8GARBREwoBGxlGDSUGJyUgTgEzKTERJQE2HhEBSjYtOREpATMcFAQBMx0qJ0AGBAE9IxwsPzAmLj4gGgQBMSslN0M7MggGBAEgIisqBAEqHR5DJyQGEwQBLB0jJzMGBAExOSxEBAEaNjIjJRMGTBg8BiYjKTE9H0tMRyMeGyQYHhgGEQQBIxoeARMnMScnRE8yODNCBiMBNjIhJRMGTBhMBgEmKSQnHCsuMysaBiowEDITCj0rLRtCDSQGRFABMy05Dik9PyMsGxgeJiImBgEdAREEAR4aIgFAOCUlEwZMGDIGAS0QLxMKASYkAT0mIwEbGB4cBgEdJx4dHkIdOBg0MhwIBhEEASYjGxIEAUQnIAQBFhoeNjIhJRMGTBg0BiYjJhwbMBAxEwofLjozGyQqGhgeJhgmJzAGEQQBIhokNjInJRMGTBg6BiYoIyYcGzAQNxMKJz04G1ANJgYeOjMbLiQqGhgeJi8wBhEEASsaIjYyJSUTBkwYRAYmKCMmIDAcGzAQNRMKNEAfRSEtLjEuTDozGy4kKhgaGB4mIB9EMC40MgFCQwYdEQQBRho2NjI5JRMGTBhMBiYjJhwbMBBLEwoxLD45Ki00OzYwOhwbJCoaGB4mLjAsPC4kBhEEASIaKBMjKSEvJkInISMvKUYmIScjNzQhIUciNw84BgQBTyMcSBAEASE8GiUfIj5CPjkqLTQ7NiUsAS40RgYBDhkqJAYBMSg4KiAgIiocIwEYSyUGASgwOgETBAFIPy08TEg0HiUoIjEdJzQBKyQqMjwoKkIIBwQBPyEEAUclBAEwHCk3BiEEAS4VDhUOFQ9BBgQBKh0eQyckBhMEASY+BAEgHjcSLhMcQiVLIiNAIRwjSU4hJzojSUscI0lKISc6I0lHIRwjLFAhHCNJRCEhIzgxPiEhIzgxUCEiIzI1ISIjMkchGiNAIRojKjUhISNOQyEmIzg2TyEnIzdGISEjMTQcISYjMTQbISYjNjQcISsjNjQbIRQqIjdEJk01JCM9ISIjKzsoISEjKzooISEjJig6NCEhIzk7Kkw0JTs1KQomUDAoCkFQJiEdI0IhHSMgQiAbHjkmQEwjKyMsHkEeMBwmHSccIh45HDAfJRgjMxYjQRwjKzU4ISEjKzU3IRsjKzQ4ISAjKzQ3IRsjJigyRCEgIyYoMkMhIDYjI1AUMjArJSwoIDAuJixCHiswPSMjKDVMDzcGBAEmHRxBJyIGEwQBHD0EASgdHUInIwYTBAErICITDRMGBAEkPQQBHhoTJDoWHBwiHyUgNTAuLiEwHzYhFh8jIEYhHyNFIRwjQiEdOCM+MCwkNEUhHyQ3OCMnOSkkNE4gJSAjKyAhRiotCicxKAopTCgjIEMhHCMgTSEgI1EZKiBRG0EfIyA0RD4hJDJPGSQjMk8rUQ82BgQBMR0qMCc0RQYqOAQBIB1PJx8GEwQBFjQfIDw9IDBMHQQBFiwkKBwEASIsJCgiBAEeKUoEASQ9BAEoHR1CJyMGEwQBJh0cQSciBhMEASgdHUInIwYTBAEeKSQcJUUEASI8BAEcGhMcK0NHGyMcJBwkGSEeK0NHJCtDRx1CKz0xLi0pMEkpPjgsPCQmQCMrLSk4QCIzICpHOw82BgQBNDUdNxhLKUIIKBwpQggGJSwiBhEEAS8dMSshLQQBHiMsKys+SgQBNB0jSCcpBhMEASpJBAFDHSdMJzQGEwQBP04EATkuIRUEATIfKUxLMBxCURwtIjUpIggmBhEEARUkOBsEAgFQUDsqAS8qAQweQkcpASwWKgFOMEAjKkQmATEuATIgNCYkMitRMAoBMkgIAUIkBgQBTykaATwBHxUEAQw6IjEGBAEMOiI6BgQBDDcgEwYBK0k9JC5ICAYBEQQBDBwkKTMEAQw8JDwzBAEMGiQoMwQBDCMkLzMEAQwWJCYzBAEMIiQsMwQBDCskMzMEAQxGJD4zBAEMIiQsMwQBDCE8JCtFMwQBDCAkKzMEAQweJCozBAEMKiQwMwQBDDIkNDMEAQweJCozBAEMICQrMwQBDD0kOTMEAQwxJDMzBAEMMS8oBAEMMCwkBAEMHiQvH0cVBAEMFCQlMwQBDCgBDCECAVEcOicBQh8BNgIBKnBhY2thZ2U6a2VybmVsL2JpbmFyeS9hc3RfZnJvbV9iaW5hcnkuZGFydC1zZGtyb290Oi9wa2cva2VybmVsL2xpYi90ZXh0L2FzdF90b190ZXh0LmRhcnTAAQWPLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KbGlicmFyeSBrZXJuZWwuYXN0X3RvX3RleHQ7CgppbXBvcnQgJ2RhcnQ6Y29yZScgaGlkZSBNYXBFbnRyeTsKaW1wb3J0ICdkYXJ0OmNvcmUnIGFzIGNvcmUgc2hvdyBNYXBFbnRyeTsKCmltcG9ydCAnZGFydDpjb252ZXJ0JyBzaG93IGpzb247CgppbXBvcnQgJy4uL2FzdC5kYXJ0JzsKaW1wb3J0ICcuLi9pbXBvcnRfdGFibGUuZGFydCc7CgphYnN0cmFjdCBjbGFzcyBOYW1lcjxUPiB7CiAgaW50IGluZGV4ID0gMDsKICBmaW5hbCBNYXA8VCwgU3RyaW5nPiBtYXAgPSA8VCwgU3RyaW5nPnt9OwoKICBTdHJpbmcgZ2V0TmFtZShUIGtleSkgPT4gbWFwLnB1dElmQWJzZW50KGtleSwgKCkgPT4gJyRwcmVmaXgkeysraW5kZXh9Jyk7CgogIFN0cmluZyBnZXQgcHJlZml4Owp9CgpjbGFzcyBOb3JtYWxOYW1lcjxUPiBleHRlbmRzIE5hbWVyPFQ+IHsKICBmaW5hbCBTdHJpbmcgcHJlZml4OwogIE5vcm1hbE5hbWVyKHRoaXMucHJlZml4KTsKfQoKY2xhc3MgQ29uc3RhbnROYW1lciBleHRlbmRzIFJlY3Vyc2l2ZVZpc2l0b3I8TnVsbD4gd2l0aCBOYW1lcjxDb25zdGFudD4gewogIGZpbmFsIFN0cmluZyBwcmVmaXg7CiAgQ29uc3RhbnROYW1lcih0aGlzLnByZWZpeCk7CgogIFN0cmluZyBnZXROYW1lKENvbnN0YW50IGNvbnN0YW50KSB7CiAgICBpZiAoIW1hcC5jb250YWluc0tleShjb25zdGFudCkpIHsKICAgICAgLy8gV2hlbiBwcmludGluZyBhIG5vbi1mdWxseSBsaW5rZWQga2VybmVsIEFTVCAoaS5lLiBzb21lIFtSZWZlcmVuY2VdcwogICAgICAvLyBhcmUgbm90IGJvdW5kKSB0byB0ZXh0LCB3ZSBuZWVkIHRvIGF2b2lkIGRlcmVmZXJlbmNpbmcgYW55CiAgICAgIC8vIHJlZmVyZW5jZXMuCiAgICAgIC8vCiAgICAgIC8vIFRoZSBub3JtYWwgdmlzaXRvciBBUEkgY2F1c2VzIHJlZmVyZW5jZXMgdG8gYmUgZGVyZWZlcmVuY2VkIGluIG9yZGVyCiAgICAgIC8vIHRvIGNhbGwgdGhlIGB2aXNpdDxuYW1lPig8bmFtZT4pYCAvIGB2aXNpdDxuYW1lPlJlZmVyZW5jZSg8bmFtZT4pYC4KICAgICAgLy8KICAgICAgLy8gV2UgdGhlcmVmb3JlIGhhbmRsZSBhbnkgc3ViY2xhc3Mgb2YgW0NvbnN0YW50XSB3aGljaCBoYXMgW1JlZmVyZW5jZV1zCiAgICAgIC8vIHNwZWNpYWxseSBoZXJlLgogICAgICAvLwogICAgICBpZiAoY29uc3RhbnQgaXMgSW5zdGFuY2VDb25zdGFudCkgewogICAgICAgIC8vIEF2b2lkIHZpc2l0aW5nIGBJbnN0YW5jZUNvbnN0YW50LmNsYXNzUmVmZXJlbmNlYC4KICAgICAgICBmb3IgKGZpbmFsIHZhbHVlIGluIGNvbnN0YW50LmZpZWxkVmFsdWVzLnZhbHVlcykgewogICAgICAgICAgLy8gTmFtZSBldmVyeXRoaW5nIGluIHBvc3Qtb3JkZXIgdmlzaXQgb2YgREFHLgogICAgICAgICAgZ2V0TmFtZSh2YWx1ZSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGNvbnN0YW50IGlzIFRlYXJPZmZDb25zdGFudCkgewogICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBuYW1pbmcgdGhlIGNvbnN0YW50cyB0aGVtc2VsdmVzLiBbVGVhck9mZkNvbnN0YW50XQogICAgICAgIC8vIGhhcyBubyBDb25zdGFudCBjaGlsZHJlbi4KICAgICAgICAvLyBBdm9pZCB2aXNpdGluZyBgVGVhck9mZkNvbnN0YW50LnByb2NlZHVyZVJlZmVyZW5jZWAuCiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gTmFtZSBldmVyeXRoaW5nIGluIHBvc3Qtb3JkZXIgdmlzaXQgb2YgREFHLgogICAgICAgIGNvbnN0YW50LnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBzdXBlci5nZXROYW1lKGNvbnN0YW50KTsKICB9CgogIGRlZmF1bHRDb25zdGFudFJlZmVyZW5jZShDb25zdGFudCBjb25zdGFudCkgewogICAgZ2V0TmFtZShjb25zdGFudCk7CiAgfQoKICBkZWZhdWx0RGFydFR5cGUoRGFydFR5cGUgdHlwZSkgewogICAgLy8gTm8gbmVlZCB0byByZWN1cnNlIGludG8gZGFydCB0eXBlcywgd2Ugb25seSBjYXJlIGFib3V0IG5hbWluZyB0aGUKICAgIC8vIGNvbnN0YW50cyB0aGVtc2VsdmVzLgogIH0KfQoKY2xhc3MgRGlzYW1iaWd1YXRvcjxULCBVPiB7CiAgZmluYWwgTWFwPFQsIFN0cmluZz4gbmFtZXNUID0gPFQsIFN0cmluZz57fTsKICBmaW5hbCBNYXA8VSwgU3RyaW5nPiBuYW1lc1UgPSA8VSwgU3RyaW5nPnt9OwogIGZpbmFsIFNldDxTdHJpbmc+IHVzZWROYW1lcyA9IG5ldyBTZXQ8U3RyaW5nPigpOwoKICBTdHJpbmcgZGlzYW1iaWd1YXRlKFQga2V5MSwgVSBrZXkyLCBTdHJpbmcgcHJvcG9zZU5hbWUoKSkgewogICAgZ2V0TmV3TmFtZSgpIHsKICAgICAgdmFyIHByb3Bvc2VkTmFtZSA9IHByb3Bvc2VOYW1lKCk7CiAgICAgIGlmICh1c2VkTmFtZXMuYWRkKHByb3Bvc2VkTmFtZSkpIHJldHVybiBwcm9wb3NlZE5hbWU7CiAgICAgIGludCBpID0gMjsKICAgICAgd2hpbGUgKCF1c2VkTmFtZXMuYWRkKCckcHJvcG9zZWROYW1lJGknKSkgewogICAgICAgICsraTsKICAgICAgfQogICAgICByZXR1cm4gJyRwcm9wb3NlZE5hbWUkaSc7CiAgICB9CgogICAgaWYgKGtleTEgIT0gbnVsbCkgewogICAgICBTdHJpbmcgcmVzdWx0ID0gbmFtZXNUW2tleTFdOwogICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHJldHVybiByZXN1bHQ7CiAgICAgIHJldHVybiBuYW1lc1Rba2V5MV0gPSBnZXROZXdOYW1lKCk7CiAgICB9CiAgICBpZiAoa2V5MiAhPSBudWxsKSB7CiAgICAgIFN0cmluZyByZXN1bHQgPSBuYW1lc1Vba2V5Ml07CiAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgcmV0dXJuIHJlc3VsdDsKICAgICAgcmV0dXJuIG5hbWVzVVtrZXkyXSA9IGdldE5ld05hbWUoKTsKICAgIH0KICAgIHRocm93ICJDYW5ub3QgZGlzYW1iaWd1YXRlIjsKICB9Cn0KCk5hbWVTeXN0ZW0gZ2xvYmFsRGVidWdnaW5nTmFtZXMgPSBuZXcgTmFtZVN5c3RlbSgpOwoKU3RyaW5nIGRlYnVnTGlicmFyeU5hbWUoTGlicmFyeSBub2RlKSB7CiAgcmV0dXJuIG5vZGUgPT0gbnVsbAogICAgICA/ICdudWxsJwogICAgICA6IG5vZGUubmFtZSA/PyBnbG9iYWxEZWJ1Z2dpbmdOYW1lcy5uYW1lTGlicmFyeShub2RlKTsKfQoKU3RyaW5nIGRlYnVnQ2xhc3NOYW1lKENsYXNzIG5vZGUpIHsKICByZXR1cm4gbm9kZSA9PSBudWxsCiAgICAgID8gJ251bGwnCiAgICAgIDogbm9kZS5uYW1lID8/IGdsb2JhbERlYnVnZ2luZ05hbWVzLm5hbWVDbGFzcyhub2RlKTsKfQoKU3RyaW5nIGRlYnVnUXVhbGlmaWVkQ2xhc3NOYW1lKENsYXNzIG5vZGUpIHsKICByZXR1cm4gZGVidWdMaWJyYXJ5TmFtZShub2RlLmVuY2xvc2luZ0xpYnJhcnkpICsgJzo6JyArIGRlYnVnQ2xhc3NOYW1lKG5vZGUpOwp9CgpTdHJpbmcgZGVidWdNZW1iZXJOYW1lKE1lbWJlciBub2RlKSB7CiAgcmV0dXJuIG5vZGUubmFtZT8ubmFtZSA/PyBnbG9iYWxEZWJ1Z2dpbmdOYW1lcy5uYW1lTWVtYmVyKG5vZGUpOwp9CgpTdHJpbmcgZGVidWdRdWFsaWZpZWRNZW1iZXJOYW1lKE1lbWJlciBub2RlKSB7CiAgaWYgKG5vZGUuZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCkgewogICAgcmV0dXJuIGRlYnVnUXVhbGlmaWVkQ2xhc3NOYW1lKG5vZGUuZW5jbG9zaW5nQ2xhc3MpICsKICAgICAgICAnOjonICsKICAgICAgICBkZWJ1Z01lbWJlck5hbWUobm9kZSk7CiAgfSBlbHNlIHsKICAgIHJldHVybiBkZWJ1Z0xpYnJhcnlOYW1lKG5vZGUuZW5jbG9zaW5nTGlicmFyeSkgKwogICAgICAgICc6OicgKwogICAgICAgIGRlYnVnTWVtYmVyTmFtZShub2RlKTsKICB9Cn0KClN0cmluZyBkZWJ1Z1R5cGVQYXJhbWV0ZXJOYW1lKFR5cGVQYXJhbWV0ZXIgbm9kZSkgewogIHJldHVybiBub2RlLm5hbWUgPz8gZ2xvYmFsRGVidWdnaW5nTmFtZXMubmFtZVR5cGVQYXJhbWV0ZXIobm9kZSk7Cn0KClN0cmluZyBkZWJ1Z1F1YWxpZmllZFR5cGVQYXJhbWV0ZXJOYW1lKFR5cGVQYXJhbWV0ZXIgbm9kZSkgewogIGlmIChub2RlLnBhcmVudCBpcyBDbGFzcykgewogICAgcmV0dXJuIGRlYnVnUXVhbGlmaWVkQ2xhc3NOYW1lKG5vZGUucGFyZW50KSArCiAgICAgICAgJzo6JyArCiAgICAgICAgZGVidWdUeXBlUGFyYW1ldGVyTmFtZShub2RlKTsKICB9CiAgaWYgKG5vZGUucGFyZW50IGlzIE1lbWJlcikgewogICAgcmV0dXJuIGRlYnVnUXVhbGlmaWVkTWVtYmVyTmFtZShub2RlLnBhcmVudCkgKwogICAgICAgICc6OicgKwogICAgICAgIGRlYnVnVHlwZVBhcmFtZXRlck5hbWUobm9kZSk7CiAgfQogIHJldHVybiBkZWJ1Z1R5cGVQYXJhbWV0ZXJOYW1lKG5vZGUpOwp9CgpTdHJpbmcgZGVidWdWYXJpYWJsZURlY2xhcmF0aW9uTmFtZShWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICByZXR1cm4gbm9kZS5uYW1lID8/IGdsb2JhbERlYnVnZ2luZ05hbWVzLm5hbWVWYXJpYWJsZShub2RlKTsKfQoKU3RyaW5nIGRlYnVnTm9kZVRvU3RyaW5nKE5vZGUgbm9kZSkgewogIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgbmV3IFByaW50ZXIoYnVmZmVyLCBzeW50aGV0aWNOYW1lczogZ2xvYmFsRGVidWdnaW5nTmFtZXMpLndyaXRlTm9kZShub2RlKTsKICByZXR1cm4gJyRidWZmZXInOwp9CgpTdHJpbmcgY29tcG9uZW50VG9TdHJpbmcoQ29tcG9uZW50IG5vZGUpIHsKICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogIG5ldyBQcmludGVyKGJ1ZmZlciwgc3ludGhldGljTmFtZXM6IG5ldyBOYW1lU3lzdGVtKCkpCiAgICAgIC53cml0ZUNvbXBvbmVudEZpbGUobm9kZSk7CiAgcmV0dXJuICckYnVmZmVyJzsKfQoKY2xhc3MgTmFtZVN5c3RlbSB7CiAgZmluYWwgTmFtZXI8VmFyaWFibGVEZWNsYXJhdGlvbj4gdmFyaWFibGVzID0KICAgICAgbmV3IE5vcm1hbE5hbWVyPFZhcmlhYmxlRGVjbGFyYXRpb24+KCcjdCcpOwogIGZpbmFsIE5hbWVyPE1lbWJlcj4gbWVtYmVycyA9IG5ldyBOb3JtYWxOYW1lcjxNZW1iZXI+KCcjbScpOwogIGZpbmFsIE5hbWVyPENsYXNzPiBjbGFzc2VzID0gbmV3IE5vcm1hbE5hbWVyPENsYXNzPignI2NsYXNzJyk7CiAgZmluYWwgTmFtZXI8RXh0ZW5zaW9uPiBleHRlbnNpb25zID0gbmV3IE5vcm1hbE5hbWVyPEV4dGVuc2lvbj4oJyNleHRlbnNpb24nKTsKICBmaW5hbCBOYW1lcjxMaWJyYXJ5PiBsaWJyYXJpZXMgPSBuZXcgTm9ybWFsTmFtZXI8TGlicmFyeT4oJyNsaWInKTsKICBmaW5hbCBOYW1lcjxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycyA9CiAgICAgIG5ldyBOb3JtYWxOYW1lcjxUeXBlUGFyYW1ldGVyPignI1QnKTsKICBmaW5hbCBOYW1lcjxUcmVlTm9kZT4gbGFiZWxzID0gbmV3IE5vcm1hbE5hbWVyPFRyZWVOb2RlPignI0wnKTsKICBmaW5hbCBOYW1lcjxDb25zdGFudD4gY29uc3RhbnRzID0gbmV3IENvbnN0YW50TmFtZXIoJyNDJyk7CiAgZmluYWwgRGlzYW1iaWd1YXRvcjxSZWZlcmVuY2UsIENhbm9uaWNhbE5hbWU+IHByZWZpeGVzID0KICAgICAgbmV3IERpc2FtYmlndWF0b3I8UmVmZXJlbmNlLCBDYW5vbmljYWxOYW1lPigpOwoKICBuYW1lVmFyaWFibGUoVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSA9PiB2YXJpYWJsZXMuZ2V0TmFtZShub2RlKTsKICBuYW1lTWVtYmVyKE1lbWJlciBub2RlKSA9PiBtZW1iZXJzLmdldE5hbWUobm9kZSk7CiAgbmFtZUNsYXNzKENsYXNzIG5vZGUpID0+IGNsYXNzZXMuZ2V0TmFtZShub2RlKTsKICBuYW1lRXh0ZW5zaW9uKEV4dGVuc2lvbiBub2RlKSA9PiBleHRlbnNpb25zLmdldE5hbWUobm9kZSk7CiAgbmFtZUxpYnJhcnkoTGlicmFyeSBub2RlKSA9PiBsaWJyYXJpZXMuZ2V0TmFtZShub2RlKTsKICBuYW1lVHlwZVBhcmFtZXRlcihUeXBlUGFyYW1ldGVyIG5vZGUpID0+IHR5cGVQYXJhbWV0ZXJzLmdldE5hbWUobm9kZSk7CiAgbmFtZVN3aXRjaENhc2UoU3dpdGNoQ2FzZSBub2RlKSA9PiBsYWJlbHMuZ2V0TmFtZShub2RlKTsKICBuYW1lTGFiZWxlZFN0YXRlbWVudChMYWJlbGVkU3RhdGVtZW50IG5vZGUpID0+IGxhYmVscy5nZXROYW1lKG5vZGUpOwogIG5hbWVDb25zdGFudChDb25zdGFudCBub2RlKSA9PiBjb25zdGFudHMuZ2V0TmFtZShub2RlKTsKCiAgZmluYWwgUmVnRXhwIHBhdGhTZXBhcmF0b3IgPSBuZXcgUmVnRXhwKCdbXFwvXScpOwoKICBuYW1lTGlicmFyeVByZWZpeChMaWJyYXJ5IG5vZGUsIHtTdHJpbmcgcHJvcG9zZWROYW1lfSkgewogICAgcmV0dXJuIHByZWZpeGVzLmRpc2FtYmlndWF0ZShub2RlLnJlZmVyZW5jZSwgbm9kZS5yZWZlcmVuY2UuY2Fub25pY2FsTmFtZSwKICAgICAgICAoKSB7CiAgICAgIGlmIChwcm9wb3NlZE5hbWUgIT0gbnVsbCkgcmV0dXJuIHByb3Bvc2VkTmFtZTsKICAgICAgaWYgKG5vZGUubmFtZSAhPSBudWxsKSByZXR1cm4gYWJicmV2aWF0ZU5hbWUobm9kZS5uYW1lKTsKICAgICAgaWYgKG5vZGUuaW1wb3J0VXJpICE9IG51bGwpIHsKICAgICAgICB2YXIgcGF0aCA9IG5vZGUuaW1wb3J0VXJpLmhhc0VtcHR5UGF0aAogICAgICAgICAgICA/ICcke25vZGUuaW1wb3J0VXJpfScKICAgICAgICAgICAgOiBub2RlLmltcG9ydFVyaS5wYXRoU2VnbWVudHMubGFzdDsKICAgICAgICBpZiAocGF0aC5lbmRzV2l0aCgnLmRhcnQnKSkgewogICAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGVuZ3RoIC0gJy5kYXJ0Jy5sZW5ndGgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWJicmV2aWF0ZU5hbWUocGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuICdMJzsKICAgIH0pOwogIH0KCiAgbmFtZUNhbm9uaWNhbE5hbWVBc0xpYnJhcnlQcmVmaXgoUmVmZXJlbmNlIG5vZGUsIENhbm9uaWNhbE5hbWUgbmFtZSwKICAgICAge1N0cmluZyBwcm9wb3NlZE5hbWV9KSB7CiAgICByZXR1cm4gcHJlZml4ZXMuZGlzYW1iaWd1YXRlKG5vZGUsIG5hbWUsICgpIHsKICAgICAgaWYgKHByb3Bvc2VkTmFtZSAhPSBudWxsKSByZXR1cm4gcHJvcG9zZWROYW1lOwogICAgICBDYW5vbmljYWxOYW1lIGNhbm9uaWNhbE5hbWUgPSBuYW1lID8/IG5vZGUuY2Fub25pY2FsTmFtZTsKICAgICAgaWYgKGNhbm9uaWNhbE5hbWU/Lm5hbWUgIT0gbnVsbCkgewogICAgICAgIHZhciBwYXRoID0gY2Fub25pY2FsTmFtZS5uYW1lOwogICAgICAgIGludCBzbGFzaCA9IHBhdGgubGFzdEluZGV4T2YocGF0aFNlcGFyYXRvcik7CiAgICAgICAgaWYgKHNsYXNoID49IDApIHsKICAgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZyhzbGFzaCArIDEpOwogICAgICAgIH0KICAgICAgICBpZiAocGF0aC5lbmRzV2l0aCgnLmRhcnQnKSkgewogICAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGVuZ3RoIC0gJy5kYXJ0Jy5sZW5ndGgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWJicmV2aWF0ZU5hbWUocGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuICdMJzsKICAgIH0pOwogIH0KCiAgZmluYWwgUmVnRXhwIHB1bmN0dWF0aW9uID0gbmV3IFJlZ0V4cCgnWy46XScpOwoKICBTdHJpbmcgYWJicmV2aWF0ZU5hbWUoU3RyaW5nIG5hbWUpIHsKICAgIGludCBkb3QgPSBuYW1lLmxhc3RJbmRleE9mKHB1bmN0dWF0aW9uKTsKICAgIGlmIChkb3QgIT0gLTEpIHsKICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKGRvdCArIDEpOwogICAgfQogICAgaWYgKG5hbWUubGVuZ3RoID4gNCkgewogICAgICByZXR1cm4gbmFtZS5zdWJzdHJpbmcoMCwgMyk7CiAgICB9CiAgICByZXR1cm4gbmFtZTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIEFubm90YXRvciB7CiAgU3RyaW5nIGFubm90YXRlVmFyaWFibGUoUHJpbnRlciBwcmludGVyLCBWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpOwogIFN0cmluZyBhbm5vdGF0ZVJldHVybihQcmludGVyIHByaW50ZXIsIEZ1bmN0aW9uTm9kZSBub2RlKTsKICBTdHJpbmcgYW5ub3RhdGVGaWVsZChQcmludGVyIHByaW50ZXIsIEZpZWxkIG5vZGUpOwp9CgovLy8gQSBxdWljayBhbmQgZGlydHkgYW1iaWd1b3VzIHRleHQgcHJpbnRlci4KY2xhc3MgUHJpbnRlciBleHRlbmRzIFZpc2l0b3I8TnVsbD4gewogIGZpbmFsIE5hbWVTeXN0ZW0gc3ludGhldGljTmFtZXM7CiAgZmluYWwgU3RyaW5nU2luayBzaW5rOwogIGZpbmFsIEFubm90YXRvciBhbm5vdGF0b3I7CiAgZmluYWwgTWFwPFN0cmluZywgTWV0YWRhdGFSZXBvc2l0b3J5PE9iamVjdD4+IG1ldGFkYXRhOwogIEltcG9ydFRhYmxlIGltcG9ydFRhYmxlOwogIGludCBpbmRlbnRhdGlvbiA9IDA7CiAgaW50IGNvbHVtbiA9IDA7CiAgYm9vbCBzaG93RXh0ZXJuYWw7CiAgYm9vbCBzaG93T2Zmc2V0czsKICBib29sIHNob3dNZXRhZGF0YTsKCiAgc3RhdGljIGludCBTUEFDRSA9IDA7CiAgc3RhdGljIGludCBXT1JEID0gMTsKICBzdGF0aWMgaW50IFNZTUJPTCA9IDI7CiAgaW50IHN0YXRlID0gU1BBQ0U7CgogIFByaW50ZXIodGhpcy5zaW5rLAogICAgICB7TmFtZVN5c3RlbSBzeW50aGV0aWNOYW1lcywKICAgICAgdGhpcy5zaG93RXh0ZXJuYWwsCiAgICAgIHRoaXMuc2hvd09mZnNldHM6IGZhbHNlLAogICAgICB0aGlzLnNob3dNZXRhZGF0YTogZmFsc2UsCiAgICAgIHRoaXMuaW1wb3J0VGFibGUsCiAgICAgIHRoaXMuYW5ub3RhdG9yLAogICAgICB0aGlzLm1ldGFkYXRhfSkKICAgICAgOiB0aGlzLnN5bnRoZXRpY05hbWVzID0gc3ludGhldGljTmFtZXMgPz8gbmV3IE5hbWVTeXN0ZW0oKTsKCiAgUHJpbnRlciBjcmVhdGVJbm5lcihJbXBvcnRUYWJsZSBpbXBvcnRUYWJsZSwKICAgICAgTWFwPFN0cmluZywgTWV0YWRhdGFSZXBvc2l0b3J5PE9iamVjdD4+IG1ldGFkYXRhKSB7CiAgICByZXR1cm4gbmV3IFByaW50ZXIoc2luaywKICAgICAgICBpbXBvcnRUYWJsZTogaW1wb3J0VGFibGUsCiAgICAgICAgbWV0YWRhdGE6IG1ldGFkYXRhLAogICAgICAgIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcywKICAgICAgICBhbm5vdGF0b3I6IGFubm90YXRvciwKICAgICAgICBzaG93RXh0ZXJuYWw6IHNob3dFeHRlcm5hbCwKICAgICAgICBzaG93T2Zmc2V0czogc2hvd09mZnNldHMsCiAgICAgICAgc2hvd01ldGFkYXRhOiBzaG93TWV0YWRhdGEpOwogIH0KCiAgYm9vbCBzaG91bGRIaWdobGlnaHQoTm9kZSBub2RlKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB2b2lkIHN0YXJ0SGlnaGxpZ2h0KE5vZGUgbm9kZSkge30KICB2b2lkIGVuZEhpZ2hsaWdodChOb2RlIG5vZGUpIHt9CgogIFN0cmluZyBnZXRMaWJyYXJ5TmFtZShMaWJyYXJ5IG5vZGUpIHsKICAgIHJldHVybiBub2RlLm5hbWUgPz8gc3ludGhldGljTmFtZXMubmFtZUxpYnJhcnkobm9kZSk7CiAgfQoKICBTdHJpbmcgZ2V0TGlicmFyeVJlZmVyZW5jZShMaWJyYXJ5IG5vZGUpIHsKICAgIGlmIChub2RlID09IG51bGwpIHJldHVybiAnPE5vIExpYnJhcnk+JzsKICAgIGlmIChpbXBvcnRUYWJsZSAhPSBudWxsICYmIGltcG9ydFRhYmxlLmdldEltcG9ydEluZGV4KG5vZGUpICE9IC0xKSB7CiAgICAgIHJldHVybiBzeW50aGV0aWNOYW1lcy5uYW1lTGlicmFyeVByZWZpeChub2RlKTsKICAgIH0KICAgIHJldHVybiBnZXRMaWJyYXJ5TmFtZShub2RlKTsKICB9CgogIFN0cmluZyBnZXRDbGFzc05hbWUoQ2xhc3Mgbm9kZSkgewogICAgcmV0dXJuIG5vZGUubmFtZSA/PyBzeW50aGV0aWNOYW1lcy5uYW1lQ2xhc3Mobm9kZSk7CiAgfQoKICBTdHJpbmcgZ2V0RXh0ZW5zaW9uTmFtZShFeHRlbnNpb24gbm9kZSkgewogICAgcmV0dXJuIG5vZGUubmFtZSA/PyBzeW50aGV0aWNOYW1lcy5uYW1lRXh0ZW5zaW9uKG5vZGUpOwogIH0KCiAgU3RyaW5nIGdldENsYXNzUmVmZXJlbmNlKENsYXNzIG5vZGUpIHsKICAgIGlmIChub2RlID09IG51bGwpIHJldHVybiAnPE5vIENsYXNzPic7CiAgICBTdHJpbmcgbmFtZSA9IGdldENsYXNzTmFtZShub2RlKTsKICAgIFN0cmluZyBsaWJyYXJ5ID0gZ2V0TGlicmFyeVJlZmVyZW5jZShub2RlLmVuY2xvc2luZ0xpYnJhcnkpOwogICAgcmV0dXJuICckbGlicmFyeTo6JG5hbWUnOwogIH0KCiAgU3RyaW5nIGdldFR5cGVkZWZSZWZlcmVuY2UoVHlwZWRlZiBub2RlKSB7CiAgICBpZiAobm9kZSA9PSBudWxsKSByZXR1cm4gJzxObyBUeXBlZGVmPic7CiAgICBTdHJpbmcgbGlicmFyeSA9IGdldExpYnJhcnlSZWZlcmVuY2Uobm9kZS5lbmNsb3NpbmdMaWJyYXJ5KTsKICAgIHJldHVybiAnJGxpYnJhcnk6OiR7bm9kZS5uYW1lfSc7CiAgfQoKICBzdGF0aWMgZmluYWwgU3RyaW5nIGVtcHR5TmFtZVN0cmluZyA9ICfigKInOwogIHN0YXRpYyBmaW5hbCBOYW1lIGVtcHR5TmFtZSA9IG5ldyBOYW1lKGVtcHR5TmFtZVN0cmluZyk7CgogIE5hbWUgZ2V0TWVtYmVyTmFtZShNZW1iZXIgbm9kZSkgewogICAgaWYgKG5vZGUubmFtZT8ubmFtZSA9PSAnJykgcmV0dXJuIGVtcHR5TmFtZTsKICAgIGlmIChub2RlLm5hbWUgIT0gbnVsbCkgcmV0dXJuIG5vZGUubmFtZTsKICAgIHJldHVybiBuZXcgTmFtZShzeW50aGV0aWNOYW1lcy5uYW1lTWVtYmVyKG5vZGUpKTsKICB9CgogIFN0cmluZyBnZXRNZW1iZXJSZWZlcmVuY2UoTWVtYmVyIG5vZGUpIHsKICAgIGlmIChub2RlID09IG51bGwpIHJldHVybiAnPE5vIE1lbWJlcj4nOwogICAgU3RyaW5nIG5hbWUgPSBnZXRNZW1iZXJOYW1lKG5vZGUpLm5hbWU7CiAgICBpZiAobm9kZS5wYXJlbnQgaXMgQ2xhc3MpIHsKICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IGdldENsYXNzUmVmZXJlbmNlKG5vZGUucGFyZW50KTsKICAgICAgcmV0dXJuICckY2xhc3NOYW1lOjokbmFtZSc7CiAgICB9IGVsc2UgewogICAgICBTdHJpbmcgbGlicmFyeSA9IGdldExpYnJhcnlSZWZlcmVuY2Uobm9kZS5lbmNsb3NpbmdMaWJyYXJ5KTsKICAgICAgcmV0dXJuICckbGlicmFyeTo6JG5hbWUnOwogICAgfQogIH0KCiAgU3RyaW5nIGdldFZhcmlhYmxlTmFtZShWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIHJldHVybiBub2RlLm5hbWUgPz8gc3ludGhldGljTmFtZXMubmFtZVZhcmlhYmxlKG5vZGUpOwogIH0KCiAgU3RyaW5nIGdldFZhcmlhYmxlUmVmZXJlbmNlKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuICc8Tm8gVmFyaWFibGVEZWNsYXJhdGlvbj4nOwogICAgcmV0dXJuIGdldFZhcmlhYmxlTmFtZShub2RlKTsKICB9CgogIFN0cmluZyBnZXRUeXBlUGFyYW1ldGVyTmFtZShUeXBlUGFyYW1ldGVyIG5vZGUpIHsKICAgIHJldHVybiBub2RlLm5hbWUgPz8gc3ludGhldGljTmFtZXMubmFtZVR5cGVQYXJhbWV0ZXIobm9kZSk7CiAgfQoKICBTdHJpbmcgZ2V0VHlwZVBhcmFtZXRlclJlZmVyZW5jZShUeXBlUGFyYW1ldGVyIG5vZGUpIHsKICAgIGlmIChub2RlID09IG51bGwpIHJldHVybiAnPE5vIFR5cGVQYXJhbWV0ZXI+JzsKICAgIFN0cmluZyBuYW1lID0gZ2V0VHlwZVBhcmFtZXRlck5hbWUobm9kZSk7CiAgICBpZiAobm9kZS5wYXJlbnQgaXMgRnVuY3Rpb25Ob2RlICYmIG5vZGUucGFyZW50LnBhcmVudCBpcyBNZW1iZXIpIHsKICAgICAgU3RyaW5nIG1lbWJlciA9IGdldE1lbWJlclJlZmVyZW5jZShub2RlLnBhcmVudC5wYXJlbnQpOwogICAgICByZXR1cm4gJyRtZW1iZXI6OiRuYW1lJzsKICAgIH0gZWxzZSBpZiAobm9kZS5wYXJlbnQgaXMgQ2xhc3MpIHsKICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IGdldENsYXNzUmVmZXJlbmNlKG5vZGUucGFyZW50KTsKICAgICAgcmV0dXJuICckY2xhc3NOYW1lOjokbmFtZSc7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmFtZTsgLy8gQm91bmQgaW5zaWRlIGEgZnVuY3Rpb24gdHlwZS4KICAgIH0KICB9CgogIHZvaWQgd3JpdGVDb21wb25lbnRQcm9ibGVtcyhDb21wb25lbnQgY29tcG9uZW50KSB7CiAgICB3cml0ZVByb2JsZW1zQXNKc29uKCJQcm9ibGVtcyBpbiBjb21wb25lbnQiLCBjb21wb25lbnQucHJvYmxlbXNBc0pzb24pOwogIH0KCiAgdm9pZCB3cml0ZVByb2JsZW1zQXNKc29uKFN0cmluZyBoZWFkZXIsIExpc3Q8U3RyaW5nPiBwcm9ibGVtc0FzSnNvbikgewogICAgaWYgKHByb2JsZW1zQXNKc29uPy5pc0VtcHR5ID09IGZhbHNlKSB7CiAgICAgIGVuZExpbmUoIi8vIik7CiAgICAgIHdyaXRlKCIvLyAiKTsKICAgICAgd3JpdGUoaGVhZGVyKTsKICAgICAgZW5kTGluZSgiOiIpOwogICAgICBlbmRMaW5lKCIvLyIpOwogICAgICBmb3IgKFN0cmluZyBzIGluIHByb2JsZW1zQXNKc29uKSB7CiAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBkZWNvZGVkID0ganNvbi5kZWNvZGUocyk7CiAgICAgICAgTGlzdDxPYmplY3Q+IHBsYWluVGV4dEZvcm1hdHRlZCA9IGRlY29kZWRbInBsYWluVGV4dEZvcm1hdHRlZCJdOwogICAgICAgIExpc3Q8U3RyaW5nPiBsaW5lcyA9IHBsYWluVGV4dEZvcm1hdHRlZC5qb2luKCJcbiIpLnNwbGl0KCJcbiIpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHdyaXRlKCIvLyIpOwogICAgICAgICAgU3RyaW5nIHRyaW1tZWQgPSBsaW5lc1tpXS50cmltUmlnaHQoKTsKICAgICAgICAgIGlmICh0cmltbWVkLmlzTm90RW1wdHkpIHdyaXRlKCIgIik7CiAgICAgICAgICBlbmRMaW5lKHRyaW1tZWQpOwogICAgICAgIH0KICAgICAgICBpZiAobGluZXMuaXNOb3RFbXB0eSkgZW5kTGluZSgiLy8iKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCB3cml0ZUxpYnJhcnlGaWxlKExpYnJhcnkgbGlicmFyeSkgewogICAgd3JpdGVBbm5vdGF0aW9uTGlzdChsaWJyYXJ5LmFubm90YXRpb25zKTsKICAgIHdyaXRlV29yZCgnbGlicmFyeScpOwogICAgaWYgKGxpYnJhcnkubmFtZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlV29yZChsaWJyYXJ5Lm5hbWUpOwogICAgfQogICAgZW5kTGluZSgnOycpOwoKICAgIExpYnJhcnlJbXBvcnRUYWJsZSBpbXBvcnRzID0gbmV3IExpYnJhcnlJbXBvcnRUYWJsZShsaWJyYXJ5KTsKICAgIFByaW50ZXIgaW5uZXIgPSBjcmVhdGVJbm5lcihpbXBvcnRzLCBsaWJyYXJ5LmVuY2xvc2luZ0NvbXBvbmVudD8ubWV0YWRhdGEpOwogICAgaW5uZXIud3JpdGVTdGFuZGFyZExpYnJhcnlDb250ZW50KGxpYnJhcnksCiAgICAgICAgb3V0ZXJQcmludGVyOiB0aGlzLCBpbXBvcnRzVG9QcmludDogaW1wb3J0cyk7CiAgfQoKICB2b2lkIHByaW50TGlicmFyeUltcG9ydFRhYmxlKExpYnJhcnlJbXBvcnRUYWJsZSBpbXBvcnRzKSB7CiAgICBmb3IgKHZhciBsaWJyYXJ5IGluIGltcG9ydHMuaW1wb3J0ZWRMaWJyYXJpZXMpIHsKICAgICAgdmFyIGltcG9ydFBhdGggPSBpbXBvcnRzLmdldEltcG9ydFBhdGgobGlicmFyeSk7CiAgICAgIGlmIChpbXBvcnRQYXRoID09ICIiKSB7CiAgICAgICAgdmFyIHByZWZpeCA9CiAgICAgICAgICAgIHN5bnRoZXRpY05hbWVzLm5hbWVMaWJyYXJ5UHJlZml4KGxpYnJhcnksIHByb3Bvc2VkTmFtZTogJ3NlbGYnKTsKICAgICAgICBlbmRMaW5lKCdpbXBvcnQgc2VsZiBhcyAkcHJlZml4OycpOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBwcmVmaXggPSBzeW50aGV0aWNOYW1lcy5uYW1lTGlicmFyeVByZWZpeChsaWJyYXJ5KTsKICAgICAgICBlbmRMaW5lKCdpbXBvcnQgIiRpbXBvcnRQYXRoIiBhcyAkcHJlZml4OycpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlU3RhbmRhcmRMaWJyYXJ5Q29udGVudChMaWJyYXJ5IGxpYnJhcnksCiAgICAgIHtQcmludGVyIG91dGVyUHJpbnRlciwgTGlicmFyeUltcG9ydFRhYmxlIGltcG9ydHNUb1ByaW50fSkgewogICAgb3V0ZXJQcmludGVyID8/PSB0aGlzOwogICAgb3V0ZXJQcmludGVyLndyaXRlUHJvYmxlbXNBc0pzb24oCiAgICAgICAgIlByb2JsZW1zIGluIGxpYnJhcnkiLCBsaWJyYXJ5LnByb2JsZW1zQXNKc29uKTsKCiAgICBpZiAoaW1wb3J0c1RvUHJpbnQgIT0gbnVsbCkgewogICAgICBvdXRlclByaW50ZXIucHJpbnRMaWJyYXJ5SW1wb3J0VGFibGUoaW1wb3J0c1RvUHJpbnQpOwogICAgfQoKICAgIHdyaXRlQWRkaXRpb25hbEV4cG9ydHMobGlicmFyeS5hZGRpdGlvbmFsRXhwb3J0cyk7CiAgICBlbmRMaW5lKCk7CiAgICBsaWJyYXJ5LmRlcGVuZGVuY2llcy5mb3JFYWNoKHdyaXRlTm9kZSk7CiAgICBpZiAobGlicmFyeS5kZXBlbmRlbmNpZXMuaXNOb3RFbXB0eSkgZW5kTGluZSgpOwogICAgbGlicmFyeS5wYXJ0cy5mb3JFYWNoKHdyaXRlTm9kZSk7CiAgICBsaWJyYXJ5LnR5cGVkZWZzLmZvckVhY2god3JpdGVOb2RlKTsKICAgIGxpYnJhcnkuY2xhc3Nlcy5mb3JFYWNoKHdyaXRlTm9kZSk7CiAgICBsaWJyYXJ5LmV4dGVuc2lvbnMuZm9yRWFjaCh3cml0ZU5vZGUpOwogICAgbGlicmFyeS5maWVsZHMuZm9yRWFjaCh3cml0ZU5vZGUpOwogICAgbGlicmFyeS5wcm9jZWR1cmVzLmZvckVhY2god3JpdGVOb2RlKTsKICB9CgogIHZvaWQgd3JpdGVBZGRpdGlvbmFsRXhwb3J0cyhMaXN0PFJlZmVyZW5jZT4gYWRkaXRpb25hbEV4cG9ydHMpIHsKICAgIGlmIChhZGRpdGlvbmFsRXhwb3J0cy5pc0VtcHR5KSByZXR1cm47CiAgICB3cml0ZSgnYWRkaXRpb25hbEV4cG9ydHMgPSAoJyk7CiAgICBib29sIGlzRmlyc3QgPSB0cnVlOwogICAgZm9yIChSZWZlcmVuY2UgcmVmZXJlbmNlIGluIGFkZGl0aW9uYWxFeHBvcnRzKSB7CiAgICAgIGlmIChpc0ZpcnN0KSB7CiAgICAgICAgaXNGaXJzdCA9IGZhbHNlOwogICAgICB9IGVsc2UgewogICAgICAgIHdyaXRlKCcsICcpOwogICAgICB9CiAgICAgIHZhciBub2RlID0gcmVmZXJlbmNlLm5vZGU7CiAgICAgIGlmIChub2RlIGlzIENsYXNzKSB7CiAgICAgICAgTGlicmFyeSBub2RlTGlicmFyeSA9IG5vZGUuZW5jbG9zaW5nTGlicmFyeTsKICAgICAgICBTdHJpbmcgcHJlZml4ID0gc3ludGhldGljTmFtZXMubmFtZUxpYnJhcnlQcmVmaXgobm9kZUxpYnJhcnkpOwogICAgICAgIHdyaXRlKHByZWZpeCArICc6OicgKyBub2RlLm5hbWUpOwogICAgICB9IGVsc2UgaWYgKG5vZGUgaXMgRmllbGQpIHsKICAgICAgICBMaWJyYXJ5IG5vZGVMaWJyYXJ5ID0gbm9kZS5lbmNsb3NpbmdMaWJyYXJ5OwogICAgICAgIFN0cmluZyBwcmVmaXggPSBzeW50aGV0aWNOYW1lcy5uYW1lTGlicmFyeVByZWZpeChub2RlTGlicmFyeSk7CiAgICAgICAgd3JpdGUocHJlZml4ICsgJzo6JyArIG5vZGUubmFtZS5uYW1lKTsKICAgICAgfSBlbHNlIGlmIChub2RlIGlzIFByb2NlZHVyZSkgewogICAgICAgIExpYnJhcnkgbm9kZUxpYnJhcnkgPSBub2RlLmVuY2xvc2luZ0xpYnJhcnk7CiAgICAgICAgU3RyaW5nIHByZWZpeCA9IHN5bnRoZXRpY05hbWVzLm5hbWVMaWJyYXJ5UHJlZml4KG5vZGVMaWJyYXJ5KTsKICAgICAgICB3cml0ZShwcmVmaXggKyAnOjonICsgbm9kZS5uYW1lLm5hbWUpOwogICAgICB9IGVsc2UgaWYgKG5vZGUgaXMgVHlwZWRlZikgewogICAgICAgIExpYnJhcnkgbm9kZUxpYnJhcnkgPSBub2RlLmVuY2xvc2luZ0xpYnJhcnk7CiAgICAgICAgU3RyaW5nIHByZWZpeCA9IHN5bnRoZXRpY05hbWVzLm5hbWVMaWJyYXJ5UHJlZml4KG5vZGVMaWJyYXJ5KTsKICAgICAgICB3cml0ZShwcmVmaXggKyAnOjonICsgbm9kZS5uYW1lKTsKICAgICAgfSBlbHNlIGlmIChyZWZlcmVuY2UuY2Fub25pY2FsTmFtZSAhPSBudWxsKSB7CiAgICAgICAgd3JpdGUocmVmZXJlbmNlLmNhbm9uaWNhbE5hbWUudG9TdHJpbmcoKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IFVuaW1wbGVtZW50ZWRFcnJvcignJHtub2RlLnJ1bnRpbWVUeXBlfScpOwogICAgICB9CiAgICAgIGVuZExpbmUoJyknKTsKICAgIH0KCiAgICBlbmRMaW5lKCk7CiAgfQoKICB2b2lkIHdyaXRlQ29tcG9uZW50RmlsZShDb21wb25lbnQgY29tcG9uZW50KSB7CiAgICBJbXBvcnRUYWJsZSBpbXBvcnRzID0gbmV3IENvbXBvbmVudEltcG9ydFRhYmxlKGNvbXBvbmVudCk7CiAgICB2YXIgaW5uZXIgPSBjcmVhdGVJbm5lcihpbXBvcnRzLCBjb21wb25lbnQubWV0YWRhdGEpOwogICAgd3JpdGVXb3JkKCdtYWluJyk7CiAgICB3cml0ZVNwYWNlZCgnPScpOwogICAgaW5uZXIud3JpdGVNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKGNvbXBvbmVudC5tYWluTWV0aG9kTmFtZSk7CiAgICBlbmRMaW5lKCc7Jyk7CiAgICBpZiAoc2hvd01ldGFkYXRhKSB7CiAgICAgIGlubmVyLndyaXRlTWV0YWRhdGEoY29tcG9uZW50KTsKICAgIH0KICAgIHdyaXRlQ29tcG9uZW50UHJvYmxlbXMoY29tcG9uZW50KTsKICAgIGZvciAodmFyIGxpYnJhcnkgaW4gY29tcG9uZW50LmxpYnJhcmllcykgewogICAgICBpZiAobGlicmFyeS5pc0V4dGVybmFsKSB7CiAgICAgICAgaWYgKCFzaG93RXh0ZXJuYWwpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICB3cml0ZVdvcmQoJ2V4dGVybmFsJyk7CiAgICAgIH0KICAgICAgaWYgKHNob3dNZXRhZGF0YSkgewogICAgICAgIGlubmVyLndyaXRlTWV0YWRhdGEobGlicmFyeSk7CiAgICAgIH0KICAgICAgd3JpdGVBbm5vdGF0aW9uTGlzdChsaWJyYXJ5LmFubm90YXRpb25zKTsKICAgICAgd3JpdGVXb3JkKCdsaWJyYXJ5Jyk7CiAgICAgIGlmIChsaWJyYXJ5Lm5hbWUgIT0gbnVsbCkgewogICAgICAgIHdyaXRlV29yZChsaWJyYXJ5Lm5hbWUpOwogICAgICB9CiAgICAgIGlmIChsaWJyYXJ5LmltcG9ydFVyaSAhPSBudWxsKSB7CiAgICAgICAgd3JpdGVTcGFjZWQoJ2Zyb20nKTsKICAgICAgICB3cml0ZVdvcmQoJyIke2xpYnJhcnkuaW1wb3J0VXJpfSInKTsKICAgICAgfQogICAgICB2YXIgcHJlZml4ID0gc3ludGhldGljTmFtZXMubmFtZUxpYnJhcnlQcmVmaXgobGlicmFyeSk7CiAgICAgIHdyaXRlU3BhY2VkKCdhcycpOwogICAgICB3cml0ZVdvcmQocHJlZml4KTsKICAgICAgZW5kTGluZSgnIHsnKTsKICAgICAgKytpbm5lci5pbmRlbnRhdGlvbjsKCiAgICAgIGlubmVyLndyaXRlU3RhbmRhcmRMaWJyYXJ5Q29udGVudChsaWJyYXJ5KTsKICAgICAgLS1pbm5lci5pbmRlbnRhdGlvbjsKICAgICAgZW5kTGluZSgnfScpOwogICAgfQogICAgd3JpdGVDb25zdGFudFRhYmxlKGNvbXBvbmVudCk7CiAgfQoKICB2b2lkIHdyaXRlQ29uc3RhbnRUYWJsZShDb21wb25lbnQgY29tcG9uZW50KSB7CiAgICBpZiAoc3ludGhldGljTmFtZXMuY29uc3RhbnRzLm1hcC5pc0VtcHR5KSByZXR1cm47CiAgICBJbXBvcnRUYWJsZSBpbXBvcnRzID0gbmV3IENvbXBvbmVudEltcG9ydFRhYmxlKGNvbXBvbmVudCk7CiAgICB2YXIgaW5uZXIgPSBjcmVhdGVJbm5lcihpbXBvcnRzLCBjb21wb25lbnQubWV0YWRhdGEpOwogICAgd3JpdGVXb3JkKCdjb25zdGFudHMgJyk7CiAgICBlbmRMaW5lKCcgeycpOwogICAgKytpbm5lci5pbmRlbnRhdGlvbjsKICAgIGZvciAoZmluYWwgQ29uc3RhbnQgY29uc3RhbnQKICAgICAgICBpbiBzeW50aGV0aWNOYW1lcy5jb25zdGFudHMubWFwLmtleXMudG9MaXN0KCkpIHsKICAgICAgaW5uZXIud3JpdGVOb2RlKGNvbnN0YW50KTsKICAgIH0KICAgIC0taW5uZXIuaW5kZW50YXRpb247CiAgICBlbmRMaW5lKCd9Jyk7CiAgfQoKICBpbnQgZ2V0UHJlY2VkZW5jZShUcmVlTm9kZSBub2RlKSB7CiAgICByZXR1cm4gUHJlY2VkZW5jZS5vZihub2RlKTsKICB9CgogIHZvaWQgd3JpdGUoU3RyaW5nIHN0cmluZykgewogICAgc2luay53cml0ZShzdHJpbmcpOwogICAgY29sdW1uICs9IHN0cmluZy5sZW5ndGg7CiAgfQoKICB2b2lkIHdyaXRlU3BhY2UoW1N0cmluZyBzdHJpbmcgPSAnICddKSB7CiAgICB3cml0ZShzdHJpbmcpOwogICAgc3RhdGUgPSBTUEFDRTsKICB9CgogIHZvaWQgZW5zdXJlU3BhY2UoKSB7CiAgICBpZiAoc3RhdGUgIT0gU1BBQ0UpIHdyaXRlU3BhY2UoKTsKICB9CgogIHZvaWQgd3JpdGVTeW1ib2woU3RyaW5nIHN0cmluZykgewogICAgd3JpdGUoc3RyaW5nKTsKICAgIHN0YXRlID0gU1lNQk9MOwogIH0KCiAgdm9pZCB3cml0ZVNwYWNlZChTdHJpbmcgc3RyaW5nKSB7CiAgICBlbnN1cmVTcGFjZSgpOwogICAgd3JpdGUoc3RyaW5nKTsKICAgIHdyaXRlU3BhY2UoKTsKICB9CgogIHZvaWQgd3JpdGVDb21tYShbU3RyaW5nIHN0cmluZyA9ICcsJ10pIHsKICAgIHdyaXRlKHN0cmluZyk7CiAgICB3cml0ZVNwYWNlKCk7CiAgfQoKICB2b2lkIHdyaXRlV29yZChTdHJpbmcgc3RyaW5nKSB7CiAgICBpZiAoc3RyaW5nLmlzRW1wdHkpIHJldHVybjsKICAgIGVuc3VyZVdvcmRCb3VuZGFyeSgpOwogICAgd3JpdGUoc3RyaW5nKTsKICAgIHN0YXRlID0gV09SRDsKICB9CgogIHZvaWQgZW5zdXJlV29yZEJvdW5kYXJ5KCkgewogICAgaWYgKHN0YXRlID09IFdPUkQpIHsKICAgICAgd3JpdGVTcGFjZSgpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZUluZGVudGF0aW9uKCkgewogICAgd3JpdGVTcGFjZSgnICAnICogaW5kZW50YXRpb24pOwogIH0KCiAgdm9pZCB3cml0ZU5vZGUoTm9kZSBub2RlKSB7CiAgICBpZiAobm9kZSA9PSBudWxsKSB7CiAgICAgIHdyaXRlU3ltYm9sKCI8TnVsbD4iKTsKICAgIH0gZWxzZSB7CiAgICAgIGZpbmFsIGhpZ2hsaWdodCA9IHNob3VsZEhpZ2hsaWdodChub2RlKTsKICAgICAgaWYgKGhpZ2hsaWdodCkgewogICAgICAgIHN0YXJ0SGlnaGxpZ2h0KG5vZGUpOwogICAgICB9CgogICAgICBpZiAoc2hvd09mZnNldHMgJiYgbm9kZSBpcyBUcmVlTm9kZSkgewogICAgICAgIHdyaXRlV29yZCgiWyR7bm9kZS5maWxlT2Zmc2V0fV0iKTsKICAgICAgfQogICAgICBpZiAoc2hvd01ldGFkYXRhICYmIG5vZGUgaXMgVHJlZU5vZGUpIHsKICAgICAgICB3cml0ZU1ldGFkYXRhKG5vZGUpOwogICAgICB9CgogICAgICBub2RlLmFjY2VwdCh0aGlzKTsKCiAgICAgIGlmIChoaWdobGlnaHQpIHsKICAgICAgICBlbmRIaWdobGlnaHQobm9kZSk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgd3JpdGVPcHRpb25hbE5vZGUoTm9kZSBub2RlKSB7CiAgICBpZiAobm9kZSAhPSBudWxsKSB7CiAgICAgIG5vZGUuYWNjZXB0KHRoaXMpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZU1ldGFkYXRhKFRyZWVOb2RlIG5vZGUpIHsKICAgIGlmIChtZXRhZGF0YSAhPSBudWxsKSB7CiAgICAgIGZvciAodmFyIG1kIGluIG1ldGFkYXRhLnZhbHVlcykgewogICAgICAgIGZpbmFsIG5vZGVNZXRhZGF0YSA9IG1kLm1hcHBpbmdbbm9kZV07CiAgICAgICAgaWYgKG5vZGVNZXRhZGF0YSAhPSBudWxsKSB7CiAgICAgICAgICB3cml0ZVdvcmQoIltAJHttZC50YWd9PSR7bm9kZU1ldGFkYXRhfV0iKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgd3JpdGVBbm5vdGF0ZWRUeXBlKERhcnRUeXBlIHR5cGUsIFN0cmluZyBhbm5vdGF0aW9uKSB7CiAgICB3cml0ZVR5cGUodHlwZSk7CiAgICBpZiAoYW5ub3RhdGlvbiAhPSBudWxsKSB7CiAgICAgIHdyaXRlKCcvJyk7CiAgICAgIHdyaXRlKGFubm90YXRpb24pOwogICAgICBzdGF0ZSA9IFdPUkQ7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlVHlwZShEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSA9PSBudWxsKSB7CiAgICAgIHdyaXRlKCc8Tm8gRGFydFR5cGU+Jyk7CiAgICB9IGVsc2UgewogICAgICB0eXBlLmFjY2VwdCh0aGlzKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVPcHRpb25hbFR5cGUoRGFydFR5cGUgdHlwZSkgewogICAgaWYgKHR5cGUgIT0gbnVsbCkgewogICAgICB0eXBlLmFjY2VwdCh0aGlzKTsKICAgIH0KICB9CgogIHZpc2l0U3VwZXJ0eXBlKFN1cGVydHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSA9PSBudWxsKSB7CiAgICAgIHdyaXRlKCc8Tm8gU3VwZXJ0eXBlPicpOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVDbGFzc1JlZmVyZW5jZUZyb21SZWZlcmVuY2UodHlwZS5jbGFzc05hbWUpOwogICAgICBpZiAodHlwZS50eXBlQXJndW1lbnRzLmlzTm90RW1wdHkpIHsKICAgICAgICB3cml0ZVN5bWJvbCgnPCcpOwogICAgICAgIHdyaXRlTGlzdCh0eXBlLnR5cGVBcmd1bWVudHMsIHdyaXRlVHlwZSk7CiAgICAgICAgd3JpdGVTeW1ib2woJz4nKTsKICAgICAgfQogICAgfQogIH0KCiAgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSB0eXBlKSB7CiAgICB3cml0ZVR5cGVkZWZSZWZlcmVuY2UodHlwZS50eXBlZGVmTm9kZSk7CiAgICBpZiAodHlwZS50eXBlQXJndW1lbnRzLmlzTm90RW1wdHkpIHsKICAgICAgd3JpdGVTeW1ib2woJzwnKTsKICAgICAgd3JpdGVMaXN0KHR5cGUudHlwZUFyZ3VtZW50cywgd3JpdGVUeXBlKTsKICAgICAgd3JpdGVTeW1ib2woJz4nKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVNb2RpZmllcihib29sIGlzVGhlcmUsIFN0cmluZyBuYW1lKSB7CiAgICBpZiAoaXNUaGVyZSkgewogICAgICB3cml0ZVdvcmQobmFtZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlTmFtZShOYW1lIG5hbWUpIHsKICAgIGlmIChuYW1lPy5uYW1lID09ICcnKSB7CiAgICAgIHdyaXRlV29yZChlbXB0eU5hbWVTdHJpbmcpOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVXb3JkKG5hbWU/Lm5hbWUgPz8gJzxhbm9ueW1vdXM+Jyk7IC8vIFRPRE86IHdyaXRlIGxpYnJhcnkgbmFtZQogICAgfQogIH0KCiAgdm9pZCBlbmRMaW5lKFtTdHJpbmcgc3RyaW5nXSkgewogICAgaWYgKHN0cmluZyAhPSBudWxsKSB7CiAgICAgIHdyaXRlKHN0cmluZyk7CiAgICB9CiAgICB3cml0ZSgnXG4nKTsKICAgIHN0YXRlID0gU1BBQ0U7CiAgICBjb2x1bW4gPSAwOwogIH0KCiAgdm9pZCB3cml0ZUZ1bmN0aW9uKEZ1bmN0aW9uTm9kZSBmdW5jdGlvbiwKICAgICAge25hbWUsIExpc3Q8SW5pdGlhbGl6ZXI+IGluaXRpYWxpemVycywgYm9vbCB0ZXJtaW5hdGVMaW5lOiB0cnVlfSkgewogICAgaWYgKG5hbWUgaXMgU3RyaW5nKSB7CiAgICAgIHdyaXRlV29yZChuYW1lKTsKICAgIH0gZWxzZSBpZiAobmFtZSBpcyBOYW1lKSB7CiAgICAgIHdyaXRlTmFtZShuYW1lKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChuYW1lID09IG51bGwpOwogICAgfQogICAgd3JpdGVUeXBlUGFyYW1ldGVyTGlzdChmdW5jdGlvbi50eXBlUGFyYW1ldGVycyk7CiAgICB3cml0ZVBhcmFtZXRlckxpc3QoZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMsIGZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycywKICAgICAgICBmdW5jdGlvbi5yZXF1aXJlZFBhcmFtZXRlckNvdW50KTsKICAgIHdyaXRlUmV0dXJuVHlwZSgKICAgICAgICBmdW5jdGlvbi5yZXR1cm5UeXBlLCBhbm5vdGF0b3I/LmFubm90YXRlUmV0dXJuKHRoaXMsIGZ1bmN0aW9uKSk7CiAgICBpZiAoaW5pdGlhbGl6ZXJzICE9IG51bGwgJiYgaW5pdGlhbGl6ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgZW5kTGluZSgpOwogICAgICArK2luZGVudGF0aW9uOwogICAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICAgIHdyaXRlQ29tbWEoJzonKTsKICAgICAgd3JpdGVMaXN0KGluaXRpYWxpemVycywgd3JpdGVOb2RlKTsKICAgICAgLS1pbmRlbnRhdGlvbjsKICAgIH0KICAgIGlmIChmdW5jdGlvbi5hc3luY01hcmtlciAhPSBBc3luY01hcmtlci5TeW5jKSB7CiAgICAgIHdyaXRlU3BhY2VkKGdldEFzeW5jTWFya2VyS2V5d29yZChmdW5jdGlvbi5hc3luY01hcmtlcikpOwogICAgfQogICAgaWYgKGZ1bmN0aW9uLmRhcnRBc3luY01hcmtlciAhPSBBc3luY01hcmtlci5TeW5jICYmCiAgICAgICAgZnVuY3Rpb24uZGFydEFzeW5jTWFya2VyICE9IGZ1bmN0aW9uLmFzeW5jTWFya2VyKSB7CiAgICAgIHdyaXRlU3BhY2VkKCIvKiBvcmlnaW5hbGx5Iik7CiAgICAgIHdyaXRlU3BhY2VkKGdldEFzeW5jTWFya2VyS2V5d29yZChmdW5jdGlvbi5kYXJ0QXN5bmNNYXJrZXIpKTsKICAgICAgd3JpdGVTcGFjZWQoIiovIik7CiAgICB9CiAgICBpZiAoZnVuY3Rpb24uYm9keSAhPSBudWxsKSB7CiAgICAgIHdyaXRlRnVuY3Rpb25Cb2R5KGZ1bmN0aW9uLmJvZHksIHRlcm1pbmF0ZUxpbmU6IHRlcm1pbmF0ZUxpbmUpOwogICAgfSBlbHNlIGlmICh0ZXJtaW5hdGVMaW5lKSB7CiAgICAgIGVuZExpbmUoJzsnKTsKICAgIH0KICB9CgogIFN0cmluZyBnZXRBc3luY01hcmtlcktleXdvcmQoQXN5bmNNYXJrZXIgbWFya2VyKSB7CiAgICBzd2l0Y2ggKG1hcmtlcikgewogICAgICBjYXNlIEFzeW5jTWFya2VyLlN5bmM6CiAgICAgICAgcmV0dXJuICdzeW5jJzsKICAgICAgY2FzZSBBc3luY01hcmtlci5TeW5jU3RhcjoKICAgICAgICByZXR1cm4gJ3N5bmMqJzsKICAgICAgY2FzZSBBc3luY01hcmtlci5Bc3luYzoKICAgICAgICByZXR1cm4gJ2FzeW5jJzsKICAgICAgY2FzZSBBc3luY01hcmtlci5Bc3luY1N0YXI6CiAgICAgICAgcmV0dXJuICdhc3luYyonOwogICAgICBjYXNlIEFzeW5jTWFya2VyLlN5bmNZaWVsZGluZzoKICAgICAgICByZXR1cm4gJ3lpZWxkaW5nJzsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gJzxJbnZhbGlkIGFzeW5jIG1hcmtlcjogJG1hcmtlcj4nOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZUZ1bmN0aW9uQm9keShTdGF0ZW1lbnQgYm9keSwge2Jvb2wgdGVybWluYXRlTGluZTogdHJ1ZX0pIHsKICAgIGlmIChib2R5IGlzIEJsb2NrICYmIGJvZHkuc3RhdGVtZW50cy5pc0VtcHR5KSB7CiAgICAgIGVuc3VyZVNwYWNlKCk7CiAgICAgIHdyaXRlU3ltYm9sKCd7fScpOwogICAgICBzdGF0ZSA9IFdPUkQ7CiAgICAgIGlmICh0ZXJtaW5hdGVMaW5lKSB7CiAgICAgICAgZW5kTGluZSgpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGJvZHkgaXMgQmxvY2spIHsKICAgICAgZW5zdXJlU3BhY2UoKTsKICAgICAgZW5kTGluZSgneycpOwogICAgICArK2luZGVudGF0aW9uOwogICAgICBib2R5LnN0YXRlbWVudHMuZm9yRWFjaCh3cml0ZU5vZGUpOwogICAgICAtLWluZGVudGF0aW9uOwogICAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICAgIHdyaXRlU3ltYm9sKCd9Jyk7CiAgICAgIHN0YXRlID0gV09SRDsKICAgICAgaWYgKHRlcm1pbmF0ZUxpbmUpIHsKICAgICAgICBlbmRMaW5lKCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoYm9keSBpcyBSZXR1cm5TdGF0ZW1lbnQgJiYgIXRlcm1pbmF0ZUxpbmUpIHsKICAgICAgd3JpdGVTcGFjZWQoJz0+Jyk7CiAgICAgIHdyaXRlRXhwcmVzc2lvbihib2R5LmV4cHJlc3Npb24pOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVCb2R5KGJvZHkpOwogICAgfQogIH0KCiAgd3JpdGVGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIG5vZGUsCiAgICAgIHtMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHR5cGVkZWZQb3NpdGlvbmFsLAogICAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHR5cGVkZWZOYW1lZH0pIHsKICAgIGlmIChzdGF0ZSA9PSBXT1JEKSB7CiAgICAgIGVuc3VyZVNwYWNlKCk7CiAgICB9CiAgICB3cml0ZVR5cGVQYXJhbWV0ZXJMaXN0KG5vZGUudHlwZVBhcmFtZXRlcnMpOwogICAgd3JpdGVTeW1ib2woJygnKTsKICAgIExpc3Q8RGFydFR5cGU+IHBvc2l0aW9uYWwgPSBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzOwoKICAgIGJvb2wgcGFyYW1ldGVyc0Fubm90YXRlZCA9IGZhbHNlOwogICAgaWYgKHR5cGVkZWZQb3NpdGlvbmFsICE9IG51bGwpIHsKICAgICAgZm9yIChWYXJpYWJsZURlY2xhcmF0aW9uIGZvcm1hbCBpbiB0eXBlZGVmUG9zaXRpb25hbCkgewogICAgICAgIHBhcmFtZXRlcnNBbm5vdGF0ZWQgPQogICAgICAgICAgICBwYXJhbWV0ZXJzQW5ub3RhdGVkIHx8IGZvcm1hbC5hbm5vdGF0aW9ucy5sZW5ndGggPiAwOwogICAgICB9CiAgICB9CiAgICBpZiAodHlwZWRlZk5hbWVkICE9IG51bGwpIHsKICAgICAgZm9yIChWYXJpYWJsZURlY2xhcmF0aW9uIGZvcm1hbCBpbiB0eXBlZGVmTmFtZWQpIHsKICAgICAgICBwYXJhbWV0ZXJzQW5ub3RhdGVkID0KICAgICAgICAgICAgcGFyYW1ldGVyc0Fubm90YXRlZCB8fCBmb3JtYWwuYW5ub3RhdGlvbnMubGVuZ3RoID4gMDsKICAgICAgfQogICAgfQoKICAgIGlmIChwYXJhbWV0ZXJzQW5ub3RhdGVkICYmIHR5cGVkZWZQb3NpdGlvbmFsICE9IG51bGwpIHsKICAgICAgd3JpdGVMaXN0KHR5cGVkZWZQb3NpdGlvbmFsLnRha2Uobm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50KSwKICAgICAgICAgIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbik7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUxpc3QocG9zaXRpb25hbC50YWtlKG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCksIHdyaXRlVHlwZSk7CiAgICB9CgogICAgaWYgKG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA8IHBvc2l0aW9uYWwubGVuZ3RoKSB7CiAgICAgIGlmIChub2RlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPiAwKSB7CiAgICAgICAgd3JpdGVDb21tYSgpOwogICAgICB9CiAgICAgIHdyaXRlU3ltYm9sKCdbJyk7CiAgICAgIGlmIChwYXJhbWV0ZXJzQW5ub3RhdGVkICYmIHR5cGVkZWZQb3NpdGlvbmFsICE9IG51bGwpIHsKICAgICAgICB3cml0ZUxpc3QodHlwZWRlZlBvc2l0aW9uYWwuc2tpcChub2RlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpLAogICAgICAgICAgICB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb24pOwogICAgICB9IGVsc2UgewogICAgICAgIHdyaXRlTGlzdChwb3NpdGlvbmFsLnNraXAobm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50KSwgd3JpdGVUeXBlKTsKICAgICAgfQogICAgICB3cml0ZVN5bWJvbCgnXScpOwogICAgfQogICAgaWYgKG5vZGUubmFtZWRQYXJhbWV0ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgaWYgKG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgewogICAgICAgIHdyaXRlQ29tbWEoKTsKICAgICAgfQogICAgICB3cml0ZVN5bWJvbCgneycpOwogICAgICBpZiAocGFyYW1ldGVyc0Fubm90YXRlZCAmJiB0eXBlZGVmTmFtZWQgIT0gbnVsbCkgewogICAgICAgIHdyaXRlTGlzdCh0eXBlZGVmTmFtZWQsIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgd3JpdGVMaXN0KG5vZGUubmFtZWRQYXJhbWV0ZXJzLCB2aXNpdE5hbWVkVHlwZSk7CiAgICAgIH0KICAgICAgd3JpdGVTeW1ib2woJ30nKTsKICAgIH0KICAgIHdyaXRlU3ltYm9sKCcpJyk7CiAgICBlbnN1cmVTcGFjZSgpOwogICAgd3JpdGUoJ+KGkicpOwogICAgd3JpdGVOdWxsYWJpbGl0eShub2RlLm51bGxhYmlsaXR5KTsKICAgIHdyaXRlU3BhY2UoKTsKICAgIHdyaXRlVHlwZShub2RlLnJldHVyblR5cGUpOwogIH0KCiAgdm9pZCB3cml0ZUJvZHkoU3RhdGVtZW50IGJvZHkpIHsKICAgIGlmIChib2R5IGlzIEJsb2NrKSB7CiAgICAgIGVuZExpbmUoJyB7Jyk7CiAgICAgICsraW5kZW50YXRpb247CiAgICAgIGJvZHkuc3RhdGVtZW50cy5mb3JFYWNoKHdyaXRlTm9kZSk7CiAgICAgIC0taW5kZW50YXRpb247CiAgICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgICAgZW5kTGluZSgnfScpOwogICAgfSBlbHNlIHsKICAgICAgZW5kTGluZSgpOwogICAgICArK2luZGVudGF0aW9uOwogICAgICB3cml0ZU5vZGUoYm9keSk7CiAgICAgIC0taW5kZW50YXRpb247CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlUmV0dXJuVHlwZShEYXJ0VHlwZSB0eXBlLCBTdHJpbmcgYW5ub3RhdGlvbikgewogICAgaWYgKHR5cGUgPT0gbnVsbCkgcmV0dXJuOwogICAgd3JpdGVTcGFjZWQoJ+KGkicpOwogICAgd3JpdGVBbm5vdGF0ZWRUeXBlKHR5cGUsIGFubm90YXRpb24pOwogIH0KCiAgdm9pZCB3cml0ZVR5cGVQYXJhbWV0ZXJMaXN0KExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMpIHsKICAgIGlmICh0eXBlUGFyYW1ldGVycy5pc0VtcHR5KSByZXR1cm47CiAgICB3cml0ZVN5bWJvbCgnPCcpOwogICAgd3JpdGVMaXN0KHR5cGVQYXJhbWV0ZXJzLCB3cml0ZU5vZGUpOwogICAgd3JpdGVTeW1ib2woJz4nKTsKICAgIHN0YXRlID0gV09SRDsgLy8gRW5zdXJlIHNwYWNlIGlmIG5vdCBmb2xsb3dlZCBieSBhbm90aGVyIHN5bWJvbC4KICB9CgogIHZvaWQgd3JpdGVQYXJhbWV0ZXJMaXN0KExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gcG9zaXRpb25hbCwKICAgICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBuYW1lZCwgaW50IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQpIHsKICAgIHdyaXRlU3ltYm9sKCcoJyk7CiAgICB3cml0ZUxpc3QoCiAgICAgICAgcG9zaXRpb25hbC50YWtlKHJlcXVpcmVkUGFyYW1ldGVyQ291bnQpLCB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb24pOwogICAgaWYgKHJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPCBwb3NpdGlvbmFsLmxlbmd0aCkgewogICAgICBpZiAocmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA+IDApIHsKICAgICAgICB3cml0ZUNvbW1hKCk7CiAgICAgIH0KICAgICAgd3JpdGVTeW1ib2woJ1snKTsKICAgICAgd3JpdGVMaXN0KAogICAgICAgICAgcG9zaXRpb25hbC5za2lwKHJlcXVpcmVkUGFyYW1ldGVyQ291bnQpLCB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb24pOwogICAgICB3cml0ZVN5bWJvbCgnXScpOwogICAgfQogICAgaWYgKG5hbWVkLmlzTm90RW1wdHkpIHsKICAgICAgaWYgKHBvc2l0aW9uYWwuaXNOb3RFbXB0eSkgewogICAgICAgIHdyaXRlQ29tbWEoKTsKICAgICAgfQogICAgICB3cml0ZVN5bWJvbCgneycpOwogICAgICB3cml0ZUxpc3QobmFtZWQsIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbik7CiAgICAgIHdyaXRlU3ltYm9sKCd9Jyk7CiAgICB9CiAgICB3cml0ZVN5bWJvbCgnKScpOwogIH0KCiAgdm9pZCB3cml0ZUxpc3Q8VD4oSXRlcmFibGU8VD4gbm9kZXMsIHZvaWQgY2FsbGJhY2soVCB4KSwKICAgICAge1N0cmluZyBzZXBhcmF0b3I6ICcsJ30pIHsKICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgZm9yICh2YXIgbm9kZSBpbiBub2RlcykgewogICAgICBpZiAoZmlyc3QpIHsKICAgICAgICBmaXJzdCA9IGZhbHNlOwogICAgICB9IGVsc2UgewogICAgICAgIHdyaXRlQ29tbWEoc2VwYXJhdG9yKTsKICAgICAgfQogICAgICBjYWxsYmFjayhub2RlKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVDbGFzc1JlZmVyZW5jZUZyb21SZWZlcmVuY2UoUmVmZXJlbmNlIHJlZmVyZW5jZSkgewogICAgd3JpdGVXb3JkKGdldENsYXNzUmVmZXJlbmNlRnJvbVJlZmVyZW5jZShyZWZlcmVuY2UpKTsKICB9CgogIFN0cmluZyBnZXRDbGFzc1JlZmVyZW5jZUZyb21SZWZlcmVuY2UoUmVmZXJlbmNlIHJlZmVyZW5jZSkgewogICAgaWYgKHJlZmVyZW5jZSA9PSBudWxsKSByZXR1cm4gJzxObyBDbGFzcz4nOwogICAgaWYgKHJlZmVyZW5jZS5ub2RlICE9IG51bGwpIHJldHVybiBnZXRDbGFzc1JlZmVyZW5jZShyZWZlcmVuY2UuYXNDbGFzcyk7CiAgICBpZiAocmVmZXJlbmNlLmNhbm9uaWNhbE5hbWUgIT0gbnVsbCkKICAgICAgcmV0dXJuIGdldENhbm9uaWNhbE5hbWVTdHJpbmcocmVmZXJlbmNlLmNhbm9uaWNhbE5hbWUpOwogICAgdGhyb3cgIk5laXRoZXIgbm9kZSBub3IgY2Fub25pY2FsIG5hbWUgZm91bmQiOwogIH0KCiAgdm9pZCB3cml0ZU1lbWJlclJlZmVyZW5jZUZyb21SZWZlcmVuY2UoUmVmZXJlbmNlIHJlZmVyZW5jZSkgewogICAgd3JpdGVXb3JkKGdldE1lbWJlclJlZmVyZW5jZUZyb21SZWZlcmVuY2UocmVmZXJlbmNlKSk7CiAgfQoKICBTdHJpbmcgZ2V0TWVtYmVyUmVmZXJlbmNlRnJvbVJlZmVyZW5jZShSZWZlcmVuY2UgcmVmZXJlbmNlKSB7CiAgICBpZiAocmVmZXJlbmNlID09IG51bGwpIHJldHVybiAnPE5vIE1lbWJlcj4nOwogICAgaWYgKHJlZmVyZW5jZS5ub2RlICE9IG51bGwpIHJldHVybiBnZXRNZW1iZXJSZWZlcmVuY2UocmVmZXJlbmNlLmFzTWVtYmVyKTsKICAgIGlmIChyZWZlcmVuY2UuY2Fub25pY2FsTmFtZSAhPSBudWxsKQogICAgICByZXR1cm4gZ2V0Q2Fub25pY2FsTmFtZVN0cmluZyhyZWZlcmVuY2UuY2Fub25pY2FsTmFtZSk7CiAgICB0aHJvdyAiTmVpdGhlciBub2RlIG5vciBjYW5vbmljYWwgbmFtZSBmb3VuZCI7CiAgfQoKICBTdHJpbmcgZ2V0Q2Fub25pY2FsTmFtZVN0cmluZyhDYW5vbmljYWxOYW1lIG5hbWUpIHsKICAgIGlmIChuYW1lLmlzUm9vdCkgdGhyb3cgJ3VuZXhwZWN0ZWQgcm9vdCc7CiAgICBpZiAobmFtZS5uYW1lLnN0YXJ0c1dpdGgoJ0AnKSkgdGhyb3cgJ3VuZXhwZWN0ZWQgQCc7CgogICAgbGlicmFyeVN0cmluZyhDYW5vbmljYWxOYW1lIGxpYikgewogICAgICBpZiAobGliLnJlZmVyZW5jZT8ubm9kZSAhPSBudWxsKQogICAgICAgIHJldHVybiBnZXRMaWJyYXJ5UmVmZXJlbmNlKGxpYi5yZWZlcmVuY2UuYXNMaWJyYXJ5KTsKICAgICAgcmV0dXJuIHN5bnRoZXRpY05hbWVzLm5hbWVDYW5vbmljYWxOYW1lQXNMaWJyYXJ5UHJlZml4KAogICAgICAgICAgbGliLnJlZmVyZW5jZSwgbGliKTsKICAgIH0KCiAgICBjbGFzc1N0cmluZyhDYW5vbmljYWxOYW1lIGNscykgPT4KICAgICAgICBsaWJyYXJ5U3RyaW5nKGNscy5wYXJlbnQpICsgJzo6JyArIGNscy5uYW1lOwoKICAgIGlmIChuYW1lLnBhcmVudC5pc1Jvb3QpIHJldHVybiBsaWJyYXJ5U3RyaW5nKG5hbWUpOwogICAgaWYgKG5hbWUucGFyZW50LnBhcmVudC5pc1Jvb3QpIHJldHVybiBjbGFzc1N0cmluZyhuYW1lKTsKCiAgICBDYW5vbmljYWxOYW1lIGF0Tm9kZSA9IG5hbWUucGFyZW50OwogICAgd2hpbGUgKCFhdE5vZGUubmFtZS5zdGFydHNXaXRoKCdAJykpIGF0Tm9kZSA9IGF0Tm9kZS5wYXJlbnQ7CgogICAgU3RyaW5nIHBhcmVudCA9ICIiOwogICAgaWYgKGF0Tm9kZS5wYXJlbnQucGFyZW50LmlzUm9vdCkgewogICAgICBwYXJlbnQgPSBsaWJyYXJ5U3RyaW5nKGF0Tm9kZS5wYXJlbnQpOwogICAgfSBlbHNlIHsKICAgICAgcGFyZW50ID0gY2xhc3NTdHJpbmcoYXROb2RlLnBhcmVudCk7CiAgICB9CgogICAgaWYgKG5hbWUubmFtZSA9PSAnJykgcmV0dXJuICIkcGFyZW50OjokZW1wdHlOYW1lU3RyaW5nIjsKICAgIHJldHVybiAiJHBhcmVudDo6JHtuYW1lLm5hbWV9IjsKICB9CgogIHZvaWQgd3JpdGVUeXBlZGVmUmVmZXJlbmNlKFR5cGVkZWYgdHlwZWRlZk5vZGUpIHsKICAgIHdyaXRlV29yZChnZXRUeXBlZGVmUmVmZXJlbmNlKHR5cGVkZWZOb2RlKSk7CiAgfQoKICB2b2lkIHdyaXRlVmFyaWFibGVSZWZlcmVuY2UoVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSkgewogICAgZmluYWwgaGlnaGxpZ2h0ID0gc2hvdWxkSGlnaGxpZ2h0KHZhcmlhYmxlKTsKICAgIGlmIChoaWdobGlnaHQpIHsKICAgICAgc3RhcnRIaWdobGlnaHQodmFyaWFibGUpOwogICAgfQogICAgd3JpdGVXb3JkKGdldFZhcmlhYmxlUmVmZXJlbmNlKHZhcmlhYmxlKSk7CiAgICBpZiAoaGlnaGxpZ2h0KSB7CiAgICAgIGVuZEhpZ2hsaWdodCh2YXJpYWJsZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlVHlwZVBhcmFtZXRlclJlZmVyZW5jZShUeXBlUGFyYW1ldGVyIG5vZGUpIHsKICAgIHdyaXRlV29yZChnZXRUeXBlUGFyYW1ldGVyUmVmZXJlbmNlKG5vZGUpKTsKICB9CgogIHZvaWQgd3JpdGVFeHByZXNzaW9uKEV4cHJlc3Npb24gbm9kZSwgW2ludCBtaW5pbXVtUHJlY2VkZW5jZV0pIHsKICAgIGZpbmFsIGhpZ2hsaWdodCA9IHNob3VsZEhpZ2hsaWdodChub2RlKTsKICAgIGlmIChoaWdobGlnaHQpIHsKICAgICAgc3RhcnRIaWdobGlnaHQobm9kZSk7CiAgICB9CiAgICBpZiAoc2hvd09mZnNldHMpIHdyaXRlV29yZCgiWyR7bm9kZS5maWxlT2Zmc2V0fV0iKTsKICAgIGJvb2wgbmVlZHNQYXJlbnRlc2VzID0gZmFsc2U7CiAgICBpZiAobWluaW11bVByZWNlZGVuY2UgIT0gbnVsbCAmJiBnZXRQcmVjZWRlbmNlKG5vZGUpIDwgbWluaW11bVByZWNlZGVuY2UpIHsKICAgICAgbmVlZHNQYXJlbnRlc2VzID0gdHJ1ZTsKICAgICAgd3JpdGVTeW1ib2woJygnKTsKICAgIH0KICAgIHdyaXRlTm9kZShub2RlKTsKICAgIGlmIChuZWVkc1BhcmVudGVzZXMpIHsKICAgICAgd3JpdGVTeW1ib2woJyknKTsKICAgIH0KICAgIGlmIChoaWdobGlnaHQpIHsKICAgICAgZW5kSGlnaGxpZ2h0KG5vZGUpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZUFubm90YXRpb24oRXhwcmVzc2lvbiBub2RlKSB7CiAgICB3cml0ZVN5bWJvbCgnQCcpOwogICAgaWYgKG5vZGUgaXMgQ29uc3RydWN0b3JJbnZvY2F0aW9uKSB7CiAgICAgIHdyaXRlTWVtYmVyUmVmZXJlbmNlRnJvbVJlZmVyZW5jZShub2RlLnRhcmdldFJlZmVyZW5jZSk7CiAgICAgIHZpc2l0QXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlRXhwcmVzc2lvbihub2RlKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVBbm5vdGF0aW9uTGlzdChMaXN0PEV4cHJlc3Npb24+IG5vZGVzLCB7Ym9vbCBzZXBhcmF0ZUxpbmVzOiB0cnVlfSkgewogICAgZm9yIChFeHByZXNzaW9uIG5vZGUgaW4gbm9kZXMpIHsKICAgICAgaWYgKHNlcGFyYXRlTGluZXMpIHsKICAgICAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICAgIH0KICAgICAgd3JpdGVBbm5vdGF0aW9uKG5vZGUpOwogICAgICBpZiAoc2VwYXJhdGVMaW5lcykgewogICAgICAgIGVuZExpbmUoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB3cml0ZVNwYWNlKCk7CiAgICAgIH0KICAgIH0KICB9CgogIHZpc2l0TGlicmFyeShMaWJyYXJ5IG5vZGUpIHt9CgogIHZpc2l0RmllbGQoRmllbGQgbm9kZSkgewogICAgd3JpdGVBbm5vdGF0aW9uTGlzdChub2RlLmFubm90YXRpb25zKTsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlTW9kaWZpZXIobm9kZS5pc0xhdGUsICdsYXRlJyk7CiAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaXNTdGF0aWMsICdzdGF0aWMnKTsKICAgIHdyaXRlTW9kaWZpZXIobm9kZS5pc0NvdmFyaWFudCwgJ2NvdmFyaWFudCcpOwogICAgd3JpdGVNb2RpZmllcihub2RlLmlzR2VuZXJpY0NvdmFyaWFudEltcGwsICdnZW5lcmljLWNvdmFyaWFudC1pbXBsJyk7CiAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaXNGaW5hbCwgJ2ZpbmFsJyk7CiAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaXNDb25zdCwgJ2NvbnN0Jyk7CiAgICAvLyBPbmx5IHNob3cgaW1wbGljaXQgZ2V0dGVyL3NldHRlciBtb2RpZmllcnMgaW4gY2FzZXMgd2hlcmUgdGhleSBhcmUKICAgIC8vIG91dCBvZiB0aGUgb3JkaW5hcnkuCiAgICBpZiAobm9kZS5pc1N0YXRpYykgewogICAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaGFzSW1wbGljaXRHZXR0ZXIsICdbZ2V0dGVyXScpOwogICAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaGFzSW1wbGljaXRTZXR0ZXIsICdbc2V0dGVyXScpOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVNb2RpZmllcighbm9kZS5oYXNJbXBsaWNpdEdldHRlciwgJ1tuby1nZXR0ZXJdJyk7CiAgICAgIGlmIChub2RlLmlzRmluYWwpIHsKICAgICAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaGFzSW1wbGljaXRTZXR0ZXIsICdbc2V0dGVyXScpOwogICAgICB9IGVsc2UgewogICAgICAgIHdyaXRlTW9kaWZpZXIoIW5vZGUuaGFzSW1wbGljaXRTZXR0ZXIsICdbbm8tc2V0dGVyXScpOwogICAgICB9CiAgICB9CiAgICB3cml0ZVdvcmQoJ2ZpZWxkJyk7CiAgICB3cml0ZVNwYWNlKCk7CiAgICB3cml0ZUFubm90YXRlZFR5cGUobm9kZS50eXBlLCBhbm5vdGF0b3I/LmFubm90YXRlRmllbGQodGhpcywgbm9kZSkpOwogICAgd3JpdGVOYW1lKGdldE1lbWJlck5hbWUobm9kZSkpOwogICAgaWYgKG5vZGUuaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICB3cml0ZVNwYWNlZCgnPScpOwogICAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5pbml0aWFsaXplcik7CiAgICB9CiAgICBpZiAoKG5vZGUuZW5jbG9zaW5nQ2xhc3MgPT0gbnVsbCAmJgogICAgICAgICAgICBub2RlLmVuY2xvc2luZ0xpYnJhcnkuZmlsZVVyaSAhPSBub2RlLmZpbGVVcmkpIHx8CiAgICAgICAgKG5vZGUuZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCAmJgogICAgICAgICAgICBub2RlLmVuY2xvc2luZ0NsYXNzLmZpbGVVcmkgIT0gbm9kZS5maWxlVXJpKSkgewogICAgICB3cml0ZVdvcmQoIi8qIGZyb20gJHtub2RlLmZpbGVVcml9ICovIik7CiAgICB9CiAgICBlbmRMaW5lKCc7Jyk7CiAgfQoKICB2aXNpdFByb2NlZHVyZShQcm9jZWR1cmUgbm9kZSkgewogICAgd3JpdGVBbm5vdGF0aW9uTGlzdChub2RlLmFubm90YXRpb25zKTsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlTW9kaWZpZXIobm9kZS5pc0V4dGVybmFsLCAnZXh0ZXJuYWwnKTsKICAgIHdyaXRlTW9kaWZpZXIobm9kZS5pc1N0YXRpYywgJ3N0YXRpYycpOwogICAgd3JpdGVNb2RpZmllcihub2RlLmlzQWJzdHJhY3QsICdhYnN0cmFjdCcpOwogICAgd3JpdGVNb2RpZmllcihub2RlLmlzRm9yd2FyZGluZ1N0dWIsICdmb3J3YXJkaW5nLXN0dWInKTsKICAgIHdyaXRlTW9kaWZpZXIobm9kZS5pc0ZvcndhcmRpbmdTZW1pU3R1YiwgJ2ZvcndhcmRpbmctc2VtaS1zdHViJyk7CiAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaXNOb1N1Y2hNZXRob2RGb3J3YXJkZXIsICduby1zdWNoLW1ldGhvZC1mb3J3YXJkZXInKTsKICAgIHdyaXRlV29yZChwcm9jZWR1cmVLaW5kVG9TdHJpbmcobm9kZS5raW5kKSk7CiAgICBpZiAoKG5vZGUuZW5jbG9zaW5nQ2xhc3MgPT0gbnVsbCAmJgogICAgICAgICAgICBub2RlLmVuY2xvc2luZ0xpYnJhcnkuZmlsZVVyaSAhPSBub2RlLmZpbGVVcmkpIHx8CiAgICAgICAgKG5vZGUuZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCAmJgogICAgICAgICAgICBub2RlLmVuY2xvc2luZ0NsYXNzLmZpbGVVcmkgIT0gbm9kZS5maWxlVXJpKSkgewogICAgICB3cml0ZVdvcmQoIi8qIGZyb20gJHtub2RlLmZpbGVVcml9ICovIik7CiAgICB9CiAgICB3cml0ZUZ1bmN0aW9uKG5vZGUuZnVuY3Rpb24sIG5hbWU6IGdldE1lbWJlck5hbWUobm9kZSkpOwogIH0KCiAgdmlzaXRDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvciBub2RlKSB7CiAgICB3cml0ZUFubm90YXRpb25MaXN0KG5vZGUuYW5ub3RhdGlvbnMpOwogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVNb2RpZmllcihub2RlLmlzRXh0ZXJuYWwsICdleHRlcm5hbCcpOwogICAgd3JpdGVNb2RpZmllcihub2RlLmlzQ29uc3QsICdjb25zdCcpOwogICAgd3JpdGVNb2RpZmllcihub2RlLmlzU3ludGhldGljLCAnc3ludGhldGljJyk7CiAgICB3cml0ZVdvcmQoJ2NvbnN0cnVjdG9yJyk7CiAgICB3cml0ZUZ1bmN0aW9uKG5vZGUuZnVuY3Rpb24sCiAgICAgICAgbmFtZTogbm9kZS5uYW1lLCBpbml0aWFsaXplcnM6IG5vZGUuaW5pdGlhbGl6ZXJzKTsKICB9CgogIHZpc2l0UmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IoUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3Igbm9kZSkgewogICAgd3JpdGVBbm5vdGF0aW9uTGlzdChub2RlLmFubm90YXRpb25zKTsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlTW9kaWZpZXIobm9kZS5pc0V4dGVybmFsLCAnZXh0ZXJuYWwnKTsKICAgIHdyaXRlTW9kaWZpZXIobm9kZS5pc0NvbnN0LCAnY29uc3QnKTsKICAgIHdyaXRlV29yZCgncmVkaXJlY3RpbmdfZmFjdG9yeScpOwoKICAgIGlmIChub2RlLm5hbWUgIT0gbnVsbCkgewogICAgICB3cml0ZU5hbWUobm9kZS5uYW1lKTsKICAgIH0KICAgIHdyaXRlVHlwZVBhcmFtZXRlckxpc3Qobm9kZS50eXBlUGFyYW1ldGVycyk7CiAgICB3cml0ZVBhcmFtZXRlckxpc3Qobm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycywgbm9kZS5uYW1lZFBhcmFtZXRlcnMsCiAgICAgICAgbm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50KTsKICAgIHdyaXRlU3BhY2VkKCc9Jyk7CiAgICB3cml0ZU1lbWJlclJlZmVyZW5jZUZyb21SZWZlcmVuY2Uobm9kZS50YXJnZXRSZWZlcmVuY2UpOwogICAgaWYgKG5vZGUudHlwZUFyZ3VtZW50cy5pc05vdEVtcHR5KSB7CiAgICAgIHdyaXRlU3ltYm9sKCc8Jyk7CiAgICAgIHdyaXRlTGlzdChub2RlLnR5cGVBcmd1bWVudHMsIHdyaXRlVHlwZSk7CiAgICAgIHdyaXRlU3ltYm9sKCc+Jyk7CiAgICB9CiAgICBlbmRMaW5lKCc7Jyk7CiAgfQoKICB2aXNpdENsYXNzKENsYXNzIG5vZGUpIHsKICAgIHdyaXRlQW5ub3RhdGlvbkxpc3Qobm9kZS5hbm5vdGF0aW9ucyk7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaXNBYnN0cmFjdCwgJ2Fic3RyYWN0Jyk7CiAgICB3cml0ZVdvcmQoJ2NsYXNzJyk7CiAgICB3cml0ZVdvcmQoZ2V0Q2xhc3NOYW1lKG5vZGUpKTsKICAgIHdyaXRlVHlwZVBhcmFtZXRlckxpc3Qobm9kZS50eXBlUGFyYW1ldGVycyk7CiAgICBpZiAobm9kZS5pc01peGluQXBwbGljYXRpb24pIHsKICAgICAgd3JpdGVTcGFjZWQoJz0nKTsKICAgICAgdmlzaXRTdXBlcnR5cGUobm9kZS5zdXBlcnR5cGUpOwogICAgICB3cml0ZVNwYWNlZCgnd2l0aCcpOwogICAgICB2aXNpdFN1cGVydHlwZShub2RlLm1peGVkSW5UeXBlKTsKICAgIH0gZWxzZSBpZiAobm9kZS5zdXBlcnR5cGUgIT0gbnVsbCkgewogICAgICB3cml0ZVNwYWNlZCgnZXh0ZW5kcycpOwogICAgICB2aXNpdFN1cGVydHlwZShub2RlLnN1cGVydHlwZSk7CiAgICB9CiAgICBpZiAobm9kZS5pbXBsZW1lbnRlZFR5cGVzLmlzTm90RW1wdHkpIHsKICAgICAgd3JpdGVTcGFjZWQoJ2ltcGxlbWVudHMnKTsKICAgICAgd3JpdGVMaXN0KG5vZGUuaW1wbGVtZW50ZWRUeXBlcywgdmlzaXRTdXBlcnR5cGUpOwogICAgfQogICAgdmFyIGVuZExpbmVTdHJpbmcgPSAnIHsnOwogICAgaWYgKG5vZGUuZW5jbG9zaW5nTGlicmFyeS5maWxlVXJpICE9IG5vZGUuZmlsZVVyaSkgewogICAgICBlbmRMaW5lU3RyaW5nICs9ICcgLy8gZnJvbSAke25vZGUuZmlsZVVyaX0nOwogICAgfQogICAgZW5kTGluZShlbmRMaW5lU3RyaW5nKTsKICAgICsraW5kZW50YXRpb247CiAgICBub2RlLmZpZWxkcy5mb3JFYWNoKHdyaXRlTm9kZSk7CiAgICBub2RlLmNvbnN0cnVjdG9ycy5mb3JFYWNoKHdyaXRlTm9kZSk7CiAgICBub2RlLnByb2NlZHVyZXMuZm9yRWFjaCh3cml0ZU5vZGUpOwogICAgbm9kZS5yZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnMuZm9yRWFjaCh3cml0ZU5vZGUpOwogICAgLS1pbmRlbnRhdGlvbjsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIGVuZExpbmUoJ30nKTsKICB9CgogIHZpc2l0RXh0ZW5zaW9uKEV4dGVuc2lvbiBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVdvcmQoJ2V4dGVuc2lvbicpOwogICAgd3JpdGVXb3JkKGdldEV4dGVuc2lvbk5hbWUobm9kZSkpOwogICAgd3JpdGVUeXBlUGFyYW1ldGVyTGlzdChub2RlLnR5cGVQYXJhbWV0ZXJzKTsKICAgIHdyaXRlU3BhY2VkKCdvbicpOwogICAgd3JpdGVUeXBlKG5vZGUub25UeXBlKTsKICAgIHZhciBlbmRMaW5lU3RyaW5nID0gJyB7JzsKICAgIGlmIChub2RlLmVuY2xvc2luZ0xpYnJhcnkuZmlsZVVyaSAhPSBub2RlLmZpbGVVcmkpIHsKICAgICAgZW5kTGluZVN0cmluZyArPSAnIC8vIGZyb20gJHtub2RlLmZpbGVVcml9JzsKICAgIH0KICAgIGVuZExpbmUoZW5kTGluZVN0cmluZyk7CiAgICArK2luZGVudGF0aW9uOwogICAgbm9kZS5tZW1iZXJzLmZvckVhY2goKEV4dGVuc2lvbk1lbWJlckRlc2NyaXB0b3IgZGVzY3JpcHRvcikgewogICAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICAgIHdyaXRlTW9kaWZpZXIoZGVzY3JpcHRvci5pc0V4dGVybmFsLCAnZXh0ZXJuYWwnKTsKICAgICAgd3JpdGVNb2RpZmllcihkZXNjcmlwdG9yLmlzU3RhdGljLCAnc3RhdGljJyk7CiAgICAgIHN3aXRjaCAoZGVzY3JpcHRvci5raW5kKSB7CiAgICAgICAgY2FzZSBFeHRlbnNpb25NZW1iZXJLaW5kLk1ldGhvZDoKICAgICAgICAgIHdyaXRlV29yZCgnbWV0aG9kJyk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEV4dGVuc2lvbk1lbWJlcktpbmQuR2V0dGVyOgogICAgICAgICAgd3JpdGVXb3JkKCdnZXQnKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRXh0ZW5zaW9uTWVtYmVyS2luZC5TZXR0ZXI6CiAgICAgICAgICB3cml0ZVdvcmQoJ3NldCcpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBFeHRlbnNpb25NZW1iZXJLaW5kLk9wZXJhdG9yOgogICAgICAgICAgd3JpdGVXb3JkKCdvcGVyYXRvcicpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBFeHRlbnNpb25NZW1iZXJLaW5kLkZpZWxkOgogICAgICAgICAgd3JpdGVXb3JkKCdmaWVsZCcpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBFeHRlbnNpb25NZW1iZXJLaW5kLlRlYXJPZmY6CiAgICAgICAgICB3cml0ZVdvcmQoJ3RlYXJvZmYnKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHdyaXRlTmFtZShkZXNjcmlwdG9yLm5hbWUpOwogICAgICB3cml0ZVNwYWNlZCgnPScpOwogICAgICBNZW1iZXIgbWVtYmVyID0gZGVzY3JpcHRvci5tZW1iZXIuYXNNZW1iZXI7CiAgICAgIGlmIChtZW1iZXIgaXMgUHJvY2VkdXJlKSB7CiAgICAgICAgaWYgKG1lbWJlci5pc0dldHRlcikgewogICAgICAgICAgd3JpdGVXb3JkKCdnZXQnKTsKICAgICAgICB9IGVsc2UgaWYgKG1lbWJlci5pc1NldHRlcikgewogICAgICAgICAgd3JpdGVXb3JkKCdzZXQnKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgd3JpdGVNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKGRlc2NyaXB0b3IubWVtYmVyKTsKICAgICAgZW5kTGluZSgnOycpOwogICAgfSk7CiAgICAtLWluZGVudGF0aW9uOwogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgZW5kTGluZSgnfScpOwogIH0KCiAgdmlzaXRUeXBlZGVmKFR5cGVkZWYgbm9kZSkgewogICAgd3JpdGVBbm5vdGF0aW9uTGlzdChub2RlLmFubm90YXRpb25zKTsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlV29yZCgndHlwZWRlZicpOwogICAgd3JpdGVXb3JkKG5vZGUubmFtZSk7CiAgICB3cml0ZVR5cGVQYXJhbWV0ZXJMaXN0KG5vZGUudHlwZVBhcmFtZXRlcnMpOwogICAgd3JpdGVTcGFjZWQoJz0nKTsKICAgIGlmIChub2RlLnR5cGUgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICAgIHdyaXRlRnVuY3Rpb25UeXBlKG5vZGUudHlwZSwKICAgICAgICAgIHR5cGVkZWZQb3NpdGlvbmFsOiBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLAogICAgICAgICAgdHlwZWRlZk5hbWVkOiBub2RlLm5hbWVkUGFyYW1ldGVycyk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZU5vZGUobm9kZS50eXBlKTsKICAgIH0KICAgIGVuZExpbmUoJzsnKTsKICB9CgogIHZpc2l0SW52YWxpZEV4cHJlc3Npb24oSW52YWxpZEV4cHJlc3Npb24gbm9kZSkgewogICAgd3JpdGVXb3JkKCdpbnZhbGlkLWV4cHJlc3Npb24nKTsKICAgIGlmIChub2RlLm1lc3NhZ2UgIT0gbnVsbCkgewogICAgICB3cml0ZVdvcmQoJyIke2VzY2FwZVN0cmluZyhub2RlLm1lc3NhZ2UpfSInKTsKICAgIH0KICB9CgogIHZpc2l0TWV0aG9kSW52b2NhdGlvbihNZXRob2RJbnZvY2F0aW9uIG5vZGUpIHsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLnJlY2VpdmVyLCBQcmVjZWRlbmNlLlBSSU1BUlkpOwogICAgd3JpdGVTeW1ib2woJy4nKTsKICAgIHdyaXRlSW50ZXJmYWNlVGFyZ2V0KG5vZGUubmFtZSwgbm9kZS5pbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UpOwogICAgd3JpdGVOb2RlKG5vZGUuYXJndW1lbnRzKTsKICB9CgogIHZpc2l0RGlyZWN0TWV0aG9kSW52b2NhdGlvbihEaXJlY3RNZXRob2RJbnZvY2F0aW9uIG5vZGUpIHsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLnJlY2VpdmVyLCBQcmVjZWRlbmNlLlBSSU1BUlkpOwogICAgd3JpdGVTeW1ib2woJy57PScpOwogICAgd3JpdGVNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKG5vZGUudGFyZ2V0UmVmZXJlbmNlKTsKICAgIHdyaXRlU3ltYm9sKCd9Jyk7CiAgICB3cml0ZU5vZGUobm9kZS5hcmd1bWVudHMpOwogIH0KCiAgdmlzaXRTdXBlck1ldGhvZEludm9jYXRpb24oU3VwZXJNZXRob2RJbnZvY2F0aW9uIG5vZGUpIHsKICAgIHdyaXRlV29yZCgnc3VwZXInKTsKICAgIHdyaXRlU3ltYm9sKCcuJyk7CiAgICB3cml0ZUludGVyZmFjZVRhcmdldChub2RlLm5hbWUsIG5vZGUuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKTsKICAgIHdyaXRlTm9kZShub2RlLmFyZ3VtZW50cyk7CiAgfQoKICB2aXNpdFN0YXRpY0ludm9jYXRpb24oU3RhdGljSW52b2NhdGlvbiBub2RlKSB7CiAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaXNDb25zdCwgJ2NvbnN0Jyk7CiAgICB3cml0ZU1lbWJlclJlZmVyZW5jZUZyb21SZWZlcmVuY2Uobm9kZS50YXJnZXRSZWZlcmVuY2UpOwogICAgd3JpdGVOb2RlKG5vZGUuYXJndW1lbnRzKTsKICB9CgogIHZpc2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKENvbnN0cnVjdG9ySW52b2NhdGlvbiBub2RlKSB7CiAgICB3cml0ZVdvcmQobm9kZS5pc0NvbnN0ID8gJ2NvbnN0JyA6ICduZXcnKTsKICAgIHdyaXRlTWVtYmVyUmVmZXJlbmNlRnJvbVJlZmVyZW5jZShub2RlLnRhcmdldFJlZmVyZW5jZSk7CiAgICB3cml0ZU5vZGUobm9kZS5hcmd1bWVudHMpOwogIH0KCiAgdmlzaXROb3QoTm90IG5vZGUpIHsKICAgIHdyaXRlU3ltYm9sKCchJyk7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5vcGVyYW5kLCBQcmVjZWRlbmNlLlBSRUZJWCk7CiAgfQoKICB2aXNpdExvZ2ljYWxFeHByZXNzaW9uKExvZ2ljYWxFeHByZXNzaW9uIG5vZGUpIHsKICAgIGludCBwcmVjZWRlbmNlID0gUHJlY2VkZW5jZS5iaW5hcnlQcmVjZWRlbmNlW25vZGUub3BlcmF0b3JdOwogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUubGVmdCwgcHJlY2VkZW5jZSk7CiAgICB3cml0ZVNwYWNlZChub2RlLm9wZXJhdG9yKTsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLnJpZ2h0LCBwcmVjZWRlbmNlICsgMSk7CiAgfQoKICB2aXNpdENvbmRpdGlvbmFsRXhwcmVzc2lvbihDb25kaXRpb25hbEV4cHJlc3Npb24gbm9kZSkgewogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUuY29uZGl0aW9uLCBQcmVjZWRlbmNlLkxPR0lDQUxfT1IpOwogICAgZW5zdXJlU3BhY2UoKTsKICAgIHdyaXRlKCc/Jyk7CiAgICB3cml0ZVN0YXRpY1R5cGUobm9kZS5zdGF0aWNUeXBlKTsKICAgIHdyaXRlU3BhY2UoKTsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLnRoZW4pOwogICAgd3JpdGVTcGFjZWQoJzonKTsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLm90aGVyd2lzZSk7CiAgfQoKICBTdHJpbmcgZ2V0RXNjYXBlZENoYXJhY3RlcihpbnQgY29kZVVuaXQpIHsKICAgIHN3aXRjaCAoY29kZVVuaXQpIHsKICAgICAgY2FzZSA5OgogICAgICAgIHJldHVybiByJ1x0JzsKICAgICAgY2FzZSAxMDoKICAgICAgICByZXR1cm4gcidcbic7CiAgICAgIGNhc2UgMTE6CiAgICAgICAgcmV0dXJuIHInXHYnOwogICAgICBjYXNlIDEyOgogICAgICAgIHJldHVybiByJ1xmJzsKICAgICAgY2FzZSAxMzoKICAgICAgICByZXR1cm4gcidccic7CiAgICAgIGNhc2UgMzQ6CiAgICAgICAgcmV0dXJuIHInXCInOwogICAgICBjYXNlIDM2OgogICAgICAgIHJldHVybiByJ1wkJzsKICAgICAgY2FzZSA5MjoKICAgICAgICByZXR1cm4gcidcXCc7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgaWYgKGNvZGVVbml0IDwgMzIgfHwgY29kZVVuaXQgPiAxMjYpIHsKICAgICAgICAgIHJldHVybiByJ1x1JyArICckY29kZVVuaXQnLnBhZExlZnQoNCwgJzAnKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgfQogIH0KCiAgU3RyaW5nIGVzY2FwZVN0cmluZyhTdHJpbmcgc3RyaW5nKSB7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyArK2kpIHsKICAgICAgU3RyaW5nIGNoYXJhY3RlciA9IGdldEVzY2FwZWRDaGFyYWN0ZXIoc3RyaW5nLmNvZGVVbml0QXQoaSkpOwogICAgICBpZiAoY2hhcmFjdGVyICE9IG51bGwpIHsKICAgICAgICBidWZmZXIgPz89IG5ldyBTdHJpbmdCdWZmZXIoc3RyaW5nLnN1YnN0cmluZygwLCBpKSk7CiAgICAgICAgYnVmZmVyLndyaXRlKGNoYXJhY3Rlcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYnVmZmVyPy53cml0ZShzdHJpbmdbaV0pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYnVmZmVyID09IG51bGwgPyBzdHJpbmcgOiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIHZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbihTdHJpbmdDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIGlmIChzdGF0ZSA9PSBXT1JEKSB7CiAgICAgIHdyaXRlU3BhY2UoKTsKICAgIH0KICAgIHdyaXRlKCciJyk7CiAgICBmb3IgKHZhciBwYXJ0IGluIG5vZGUuZXhwcmVzc2lvbnMpIHsKICAgICAgaWYgKHBhcnQgaXMgU3RyaW5nTGl0ZXJhbCkgewogICAgICAgIHdyaXRlU3ltYm9sKGVzY2FwZVN0cmluZyhwYXJ0LnZhbHVlKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgd3JpdGVTeW1ib2wocickeycpOwogICAgICAgIHdyaXRlRXhwcmVzc2lvbihwYXJ0KTsKICAgICAgICB3cml0ZVN5bWJvbCgnfScpOwogICAgICB9CiAgICB9CiAgICB3cml0ZSgnIicpOwogICAgc3RhdGUgPSBXT1JEOwogIH0KCiAgdmlzaXRMaXN0Q29uY2F0ZW5hdGlvbihMaXN0Q29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgIGZvciAoRXhwcmVzc2lvbiBwYXJ0IGluIG5vZGUubGlzdHMpIHsKICAgICAgaWYgKCFmaXJzdCkgd3JpdGVTcGFjZWQoJysnKTsKICAgICAgd3JpdGVFeHByZXNzaW9uKHBhcnQpOwogICAgICBmaXJzdCA9IGZhbHNlOwogICAgfQogIH0KCiAgdmlzaXRTZXRDb25jYXRlbmF0aW9uKFNldENvbmNhdGVuYXRpb24gbm9kZSkgewogICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICBmb3IgKEV4cHJlc3Npb24gcGFydCBpbiBub2RlLnNldHMpIHsKICAgICAgaWYgKCFmaXJzdCkgd3JpdGVTcGFjZWQoJysnKTsKICAgICAgd3JpdGVFeHByZXNzaW9uKHBhcnQpOwogICAgICBmaXJzdCA9IGZhbHNlOwogICAgfQogIH0KCiAgdmlzaXRNYXBDb25jYXRlbmF0aW9uKE1hcENvbmNhdGVuYXRpb24gbm9kZSkgewogICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICBmb3IgKEV4cHJlc3Npb24gcGFydCBpbiBub2RlLm1hcHMpIHsKICAgICAgaWYgKCFmaXJzdCkgd3JpdGVTcGFjZWQoJysnKTsKICAgICAgd3JpdGVFeHByZXNzaW9uKHBhcnQpOwogICAgICBmaXJzdCA9IGZhbHNlOwogICAgfQogIH0KCiAgdmlzaXRJbnN0YW5jZUNyZWF0aW9uKEluc3RhbmNlQ3JlYXRpb24gbm9kZSkgewogICAgd3JpdGVDbGFzc1JlZmVyZW5jZUZyb21SZWZlcmVuY2Uobm9kZS5jbGFzc1JlZmVyZW5jZSk7CiAgICBpZiAobm9kZS50eXBlQXJndW1lbnRzLmlzTm90RW1wdHkpIHsKICAgICAgd3JpdGVTeW1ib2woJzwnKTsKICAgICAgd3JpdGVMaXN0KG5vZGUudHlwZUFyZ3VtZW50cywgd3JpdGVUeXBlKTsKICAgICAgd3JpdGVTeW1ib2woJz4nKTsKICAgIH0KICAgIHdyaXRlU3ltYm9sKCd7Jyk7CiAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgIG5vZGUuZmllbGRWYWx1ZXMuZm9yRWFjaCgoUmVmZXJlbmNlIGZpZWxkUmVmLCBFeHByZXNzaW9uIHZhbHVlKSB7CiAgICAgIGlmICghZmlyc3QpIHsKICAgICAgICB3cml0ZUNvbW1hKCk7CiAgICAgIH0KICAgICAgd3JpdGVXb3JkKCcke2ZpZWxkUmVmLmFzRmllbGQubmFtZS5uYW1lfScpOwogICAgICB3cml0ZVN5bWJvbCgnOicpOwogICAgICB3cml0ZUV4cHJlc3Npb24odmFsdWUpOwogICAgICBmaXJzdCA9IGZhbHNlOwogICAgfSk7CiAgICBmb3IgKEFzc2VydFN0YXRlbWVudCBhc3NlcnRfIGluIG5vZGUuYXNzZXJ0cykgewogICAgICBpZiAoIWZpcnN0KSB7CiAgICAgICAgd3JpdGVDb21tYSgpOwogICAgICB9CiAgICAgIHdyaXRlKCdhc3NlcnQoJyk7CiAgICAgIHdyaXRlRXhwcmVzc2lvbihhc3NlcnRfLmNvbmRpdGlvbik7CiAgICAgIGlmIChhc3NlcnRfLm1lc3NhZ2UgIT0gbnVsbCkgewogICAgICAgIHdyaXRlQ29tbWEoKTsKICAgICAgICB3cml0ZUV4cHJlc3Npb24oYXNzZXJ0Xy5tZXNzYWdlKTsKICAgICAgfQogICAgICB3cml0ZSgnKScpOwogICAgICBmaXJzdCA9IGZhbHNlOwogICAgfQogICAgZm9yIChFeHByZXNzaW9uIHVudXNlZEFyZ3VtZW50IGluIG5vZGUudW51c2VkQXJndW1lbnRzKSB7CiAgICAgIGlmICghZmlyc3QpIHsKICAgICAgICB3cml0ZUNvbW1hKCk7CiAgICAgIH0KICAgICAgd3JpdGVFeHByZXNzaW9uKHVudXNlZEFyZ3VtZW50KTsKICAgICAgZmlyc3QgPSBmYWxzZTsKICAgIH0KICAgIHdyaXRlU3ltYm9sKCd9Jyk7CiAgfQoKICB2aXNpdElzRXhwcmVzc2lvbihJc0V4cHJlc3Npb24gbm9kZSkgewogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUub3BlcmFuZCwgUHJlY2VkZW5jZS5CSVRXSVNFX09SKTsKICAgIHdyaXRlU3BhY2VkKCdpcycpOwogICAgd3JpdGVUeXBlKG5vZGUudHlwZSk7CiAgfQoKICB2aXNpdEFzRXhwcmVzc2lvbihBc0V4cHJlc3Npb24gbm9kZSkgewogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUub3BlcmFuZCwgUHJlY2VkZW5jZS5CSVRXSVNFX09SKTsKICAgIHdyaXRlU3BhY2VkKG5vZGUuaXNUeXBlRXJyb3IgPyAnYXN7VHlwZUVycm9yfScgOiAnYXMnKTsKICAgIHdyaXRlVHlwZShub2RlLnR5cGUpOwogIH0KCiAgdmlzaXRTeW1ib2xMaXRlcmFsKFN5bWJvbExpdGVyYWwgbm9kZSkgewogICAgd3JpdGVTeW1ib2woJyMnKTsKICAgIHdyaXRlV29yZChub2RlLnZhbHVlKTsKICB9CgogIHZpc2l0VHlwZUxpdGVyYWwoVHlwZUxpdGVyYWwgbm9kZSkgewogICAgd3JpdGVUeXBlKG5vZGUudHlwZSk7CiAgfQoKICB2aXNpdFRoaXNFeHByZXNzaW9uKFRoaXNFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlV29yZCgndGhpcycpOwogIH0KCiAgdmlzaXRSZXRocm93KFJldGhyb3cgbm9kZSkgewogICAgd3JpdGVXb3JkKCdyZXRocm93Jyk7CiAgfQoKICB2aXNpdFRocm93KFRocm93IG5vZGUpIHsKICAgIHdyaXRlV29yZCgndGhyb3cnKTsKICAgIHdyaXRlU3BhY2UoKTsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24pOwogIH0KCiAgdmlzaXRMaXN0TGl0ZXJhbChMaXN0TGl0ZXJhbCBub2RlKSB7CiAgICBpZiAobm9kZS5pc0NvbnN0KSB7CiAgICAgIHdyaXRlV29yZCgnY29uc3QnKTsKICAgICAgd3JpdGVTcGFjZSgpOwogICAgfQogICAgaWYgKG5vZGUudHlwZUFyZ3VtZW50ICE9IG51bGwpIHsKICAgICAgd3JpdGVTeW1ib2woJzwnKTsKICAgICAgd3JpdGVUeXBlKG5vZGUudHlwZUFyZ3VtZW50KTsKICAgICAgd3JpdGVTeW1ib2woJz4nKTsKICAgIH0KICAgIHdyaXRlU3ltYm9sKCdbJyk7CiAgICB3cml0ZUxpc3Qobm9kZS5leHByZXNzaW9ucywgd3JpdGVOb2RlKTsKICAgIHdyaXRlU3ltYm9sKCddJyk7CiAgfQoKICB2aXNpdFNldExpdGVyYWwoU2V0TGl0ZXJhbCBub2RlKSB7CiAgICBpZiAobm9kZS5pc0NvbnN0KSB7CiAgICAgIHdyaXRlV29yZCgnY29uc3QnKTsKICAgICAgd3JpdGVTcGFjZSgpOwogICAgfQogICAgaWYgKG5vZGUudHlwZUFyZ3VtZW50ICE9IG51bGwpIHsKICAgICAgd3JpdGVTeW1ib2woJzwnKTsKICAgICAgd3JpdGVUeXBlKG5vZGUudHlwZUFyZ3VtZW50KTsKICAgICAgd3JpdGVTeW1ib2woJz4nKTsKICAgIH0KICAgIHdyaXRlU3ltYm9sKCd7Jyk7CiAgICB3cml0ZUxpc3Qobm9kZS5leHByZXNzaW9ucywgd3JpdGVOb2RlKTsKICAgIHdyaXRlU3ltYm9sKCd9Jyk7CiAgfQoKICB2aXNpdE1hcExpdGVyYWwoTWFwTGl0ZXJhbCBub2RlKSB7CiAgICBpZiAobm9kZS5pc0NvbnN0KSB7CiAgICAgIHdyaXRlV29yZCgnY29uc3QnKTsKICAgICAgd3JpdGVTcGFjZSgpOwogICAgfQogICAgaWYgKG5vZGUua2V5VHlwZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlU3ltYm9sKCc8Jyk7CiAgICAgIHdyaXRlTGlzdChbbm9kZS5rZXlUeXBlLCBub2RlLnZhbHVlVHlwZV0sIHdyaXRlVHlwZSk7CiAgICAgIHdyaXRlU3ltYm9sKCc+Jyk7CiAgICB9CiAgICB3cml0ZVN5bWJvbCgneycpOwogICAgd3JpdGVMaXN0KG5vZGUuZW50cmllcywgd3JpdGVOb2RlKTsKICAgIHdyaXRlU3ltYm9sKCd9Jyk7CiAgfQoKICB2aXNpdE1hcEVudHJ5KE1hcEVudHJ5IG5vZGUpIHsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLmtleSk7CiAgICB3cml0ZUNvbW1hKCc6Jyk7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS52YWx1ZSk7CiAgfQoKICB2aXNpdEF3YWl0RXhwcmVzc2lvbihBd2FpdEV4cHJlc3Npb24gbm9kZSkgewogICAgd3JpdGVXb3JkKCdhd2FpdCcpOwogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUub3BlcmFuZCk7CiAgfQoKICB2aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbihGdW5jdGlvbkV4cHJlc3Npb24gbm9kZSkgewogICAgd3JpdGVGdW5jdGlvbihub2RlLmZ1bmN0aW9uLCB0ZXJtaW5hdGVMaW5lOiBmYWxzZSk7CiAgfQoKICB2aXNpdFN0cmluZ0xpdGVyYWwoU3RyaW5nTGl0ZXJhbCBub2RlKSB7CiAgICB3cml0ZVdvcmQoJyIke2VzY2FwZVN0cmluZyhub2RlLnZhbHVlKX0iJyk7CiAgfQoKICB2aXNpdEludExpdGVyYWwoSW50TGl0ZXJhbCBub2RlKSB7CiAgICB3cml0ZVdvcmQoJyR7bm9kZS52YWx1ZX0nKTsKICB9CgogIHZpc2l0RG91YmxlTGl0ZXJhbChEb3VibGVMaXRlcmFsIG5vZGUpIHsKICAgIHdyaXRlV29yZCgnJHtub2RlLnZhbHVlfScpOwogIH0KCiAgdmlzaXRCb29sTGl0ZXJhbChCb29sTGl0ZXJhbCBub2RlKSB7CiAgICB3cml0ZVdvcmQoJyR7bm9kZS52YWx1ZX0nKTsKICB9CgogIHZpc2l0TnVsbExpdGVyYWwoTnVsbExpdGVyYWwgbm9kZSkgewogICAgd3JpdGVXb3JkKCdudWxsJyk7CiAgfQoKICB2aXNpdExldChMZXQgbm9kZSkgewogICAgd3JpdGVXb3JkKCdsZXQnKTsKICAgIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbihub2RlLnZhcmlhYmxlKTsKICAgIHdyaXRlU3BhY2VkKCdpbicpOwogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUuYm9keSk7CiAgfQoKICB2aXNpdEJsb2NrRXhwcmVzc2lvbihCbG9ja0V4cHJlc3Npb24gbm9kZSkgewogICAgd3JpdGVTcGFjZWQoJ2Jsb2NrJyk7CiAgICB3cml0ZUJsb2NrQm9keShub2RlLmJvZHkuc3RhdGVtZW50cywgYXNFeHByZXNzaW9uOiB0cnVlKTsKICAgIHdyaXRlU3ltYm9sKCcgPT4nKTsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLnZhbHVlKTsKICB9CgogIHZpc2l0SW5zdGFudGlhdGlvbihJbnN0YW50aWF0aW9uIG5vZGUpIHsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24pOwogICAgd3JpdGVTeW1ib2woJzwnKTsKICAgIHdyaXRlTGlzdChub2RlLnR5cGVBcmd1bWVudHMsIHdyaXRlVHlwZSk7CiAgICB3cml0ZVN5bWJvbCgnPicpOwogIH0KCiAgdmlzaXRMb2FkTGlicmFyeShMb2FkTGlicmFyeSBub2RlKSB7CiAgICB3cml0ZVdvcmQoJ0xvYWRMaWJyYXJ5Jyk7CiAgICB3cml0ZVN5bWJvbCgnKCcpOwogICAgd3JpdGVXb3JkKG5vZGUuaW1wb3J0Lm5hbWUpOwogICAgd3JpdGVTeW1ib2woJyknKTsKICAgIHN0YXRlID0gV09SRDsKICB9CgogIHZpc2l0Q2hlY2tMaWJyYXJ5SXNMb2FkZWQoQ2hlY2tMaWJyYXJ5SXNMb2FkZWQgbm9kZSkgewogICAgd3JpdGVXb3JkKCdDaGVja0xpYnJhcnlJc0xvYWRlZCcpOwogICAgd3JpdGVTeW1ib2woJygnKTsKICAgIHdyaXRlV29yZChub2RlLmltcG9ydC5uYW1lKTsKICAgIHdyaXRlU3ltYm9sKCcpJyk7CiAgICBzdGF0ZSA9IFdPUkQ7CiAgfQoKICB2aXNpdExpYnJhcnlQYXJ0KExpYnJhcnlQYXJ0IG5vZGUpIHsKICAgIHdyaXRlQW5ub3RhdGlvbkxpc3Qobm9kZS5hbm5vdGF0aW9ucyk7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVdvcmQoJ3BhcnQnKTsKICAgIHdyaXRlV29yZChub2RlLnBhcnRVcmkpOwogICAgZW5kTGluZSgiOyIpOwogIH0KCiAgdmlzaXRMaWJyYXJ5RGVwZW5kZW5jeShMaWJyYXJ5RGVwZW5kZW5jeSBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVdvcmQobm9kZS5pc0ltcG9ydCA/ICdpbXBvcnQnIDogJ2V4cG9ydCcpOwogICAgdmFyIHVyaVN0cmluZzsKICAgIGlmIChub2RlLmltcG9ydGVkTGlicmFyeVJlZmVyZW5jZT8ubm9kZSAhPSBudWxsKSB7CiAgICAgIHVyaVN0cmluZyA9ICcke25vZGUudGFyZ2V0TGlicmFyeS5pbXBvcnRVcml9JzsKICAgIH0gZWxzZSB7CiAgICAgIHVyaVN0cmluZyA9ICcke25vZGUuaW1wb3J0ZWRMaWJyYXJ5UmVmZXJlbmNlPy5jYW5vbmljYWxOYW1lPy5uYW1lfSc7CiAgICB9CiAgICB3cml0ZVdvcmQoJyIkdXJpU3RyaW5nIicpOwogICAgaWYgKG5vZGUuaXNEZWZlcnJlZCkgewogICAgICB3cml0ZVdvcmQoJ2RlZmVycmVkJyk7CiAgICB9CiAgICBpZiAobm9kZS5uYW1lICE9IG51bGwpIHsKICAgICAgd3JpdGVXb3JkKCdhcycpOwogICAgICB3cml0ZVdvcmQobm9kZS5uYW1lKTsKICAgIH0KICAgIGVuZExpbmUoJzsnKTsKICB9CgogIGRlZmF1bHRFeHByZXNzaW9uKEV4cHJlc3Npb24gbm9kZSkgewogICAgd3JpdGVXb3JkKCcke25vZGUucnVudGltZVR5cGV9Jyk7CiAgfQoKICB2aXNpdFZhcmlhYmxlR2V0KFZhcmlhYmxlR2V0IG5vZGUpIHsKICAgIHdyaXRlVmFyaWFibGVSZWZlcmVuY2Uobm9kZS52YXJpYWJsZSk7CiAgICBpZiAobm9kZS5wcm9tb3RlZFR5cGUgIT0gbnVsbCkgewogICAgICB3cml0ZVN5bWJvbCgneycpOwogICAgICB3cml0ZU5vZGUobm9kZS5wcm9tb3RlZFR5cGUpOwogICAgICB3cml0ZVN5bWJvbCgnfScpOwogICAgICBzdGF0ZSA9IFdPUkQ7CiAgICB9CiAgfQoKICB2aXNpdFZhcmlhYmxlU2V0KFZhcmlhYmxlU2V0IG5vZGUpIHsKICAgIHdyaXRlVmFyaWFibGVSZWZlcmVuY2Uobm9kZS52YXJpYWJsZSk7CiAgICB3cml0ZVNwYWNlZCgnPScpOwogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUudmFsdWUpOwogIH0KCiAgdm9pZCB3cml0ZUludGVyZmFjZVRhcmdldChOYW1lIG5hbWUsIFJlZmVyZW5jZSB0YXJnZXQpIHsKICAgIGlmICh0YXJnZXQgIT0gbnVsbCkgewogICAgICB3cml0ZVN5bWJvbCgneycpOwogICAgICB3cml0ZU1lbWJlclJlZmVyZW5jZUZyb21SZWZlcmVuY2UodGFyZ2V0KTsKICAgICAgd3JpdGVTeW1ib2woJ30nKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlTmFtZShuYW1lKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVTdGF0aWNUeXBlKERhcnRUeXBlIHR5cGUpIHsKICAgIGlmICh0eXBlICE9IG51bGwpIHsKICAgICAgd3JpdGVTeW1ib2woJ3snKTsKICAgICAgd3JpdGVUeXBlKHR5cGUpOwogICAgICB3cml0ZVN5bWJvbCgnfScpOwogICAgfQogIH0KCiAgdmlzaXRQcm9wZXJ0eUdldChQcm9wZXJ0eUdldCBub2RlKSB7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5yZWNlaXZlciwgUHJlY2VkZW5jZS5QUklNQVJZKTsKICAgIHdyaXRlU3ltYm9sKCcuJyk7CiAgICB3cml0ZUludGVyZmFjZVRhcmdldChub2RlLm5hbWUsIG5vZGUuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKTsKICB9CgogIHZpc2l0UHJvcGVydHlTZXQoUHJvcGVydHlTZXQgbm9kZSkgewogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIFByZWNlZGVuY2UuUFJJTUFSWSk7CiAgICB3cml0ZVN5bWJvbCgnLicpOwogICAgd3JpdGVJbnRlcmZhY2VUYXJnZXQobm9kZS5uYW1lLCBub2RlLmludGVyZmFjZVRhcmdldFJlZmVyZW5jZSk7CiAgICB3cml0ZVNwYWNlZCgnPScpOwogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUudmFsdWUpOwogIH0KCiAgdmlzaXRTdXBlclByb3BlcnR5R2V0KFN1cGVyUHJvcGVydHlHZXQgbm9kZSkgewogICAgd3JpdGVXb3JkKCdzdXBlcicpOwogICAgd3JpdGVTeW1ib2woJy4nKTsKICAgIHdyaXRlSW50ZXJmYWNlVGFyZ2V0KG5vZGUubmFtZSwgbm9kZS5pbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UpOwogIH0KCiAgdmlzaXRTdXBlclByb3BlcnR5U2V0KFN1cGVyUHJvcGVydHlTZXQgbm9kZSkgewogICAgd3JpdGVXb3JkKCdzdXBlcicpOwogICAgd3JpdGVTeW1ib2woJy4nKTsKICAgIHdyaXRlSW50ZXJmYWNlVGFyZ2V0KG5vZGUubmFtZSwgbm9kZS5pbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UpOwogICAgd3JpdGVTcGFjZWQoJz0nKTsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLnZhbHVlKTsKICB9CgogIHZpc2l0RGlyZWN0UHJvcGVydHlHZXQoRGlyZWN0UHJvcGVydHlHZXQgbm9kZSkgewogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIFByZWNlZGVuY2UuUFJJTUFSWSk7CiAgICB3cml0ZVN5bWJvbCgnLns9Jyk7CiAgICB3cml0ZU1lbWJlclJlZmVyZW5jZUZyb21SZWZlcmVuY2Uobm9kZS50YXJnZXRSZWZlcmVuY2UpOwogICAgd3JpdGVTeW1ib2woJ30nKTsKICB9CgogIHZpc2l0RGlyZWN0UHJvcGVydHlTZXQoRGlyZWN0UHJvcGVydHlTZXQgbm9kZSkgewogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIFByZWNlZGVuY2UuUFJJTUFSWSk7CiAgICB3cml0ZVN5bWJvbCgnLns9Jyk7CiAgICB3cml0ZU1lbWJlclJlZmVyZW5jZUZyb21SZWZlcmVuY2Uobm9kZS50YXJnZXRSZWZlcmVuY2UpOwogICAgd3JpdGVTeW1ib2woJ30nKTsKICAgIHdyaXRlU3BhY2VkKCc9Jyk7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS52YWx1ZSk7CiAgfQoKICB2aXNpdFN0YXRpY0dldChTdGF0aWNHZXQgbm9kZSkgewogICAgd3JpdGVNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKG5vZGUudGFyZ2V0UmVmZXJlbmNlKTsKICB9CgogIHZpc2l0U3RhdGljU2V0KFN0YXRpY1NldCBub2RlKSB7CiAgICB3cml0ZU1lbWJlclJlZmVyZW5jZUZyb21SZWZlcmVuY2Uobm9kZS50YXJnZXRSZWZlcmVuY2UpOwogICAgd3JpdGVTcGFjZWQoJz0nKTsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLnZhbHVlKTsKICB9CgogIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChFeHByZXNzaW9uU3RhdGVtZW50IG5vZGUpIHsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24pOwogICAgZW5kTGluZSgnOycpOwogIH0KCiAgdm9pZCB3cml0ZUJsb2NrQm9keShMaXN0PFN0YXRlbWVudD4gc3RhdGVtZW50cywge2Jvb2wgYXNFeHByZXNzaW9uID0gZmFsc2V9KSB7CiAgICBpZiAoc3RhdGVtZW50cy5pc0VtcHR5KSB7CiAgICAgIGFzRXhwcmVzc2lvbiA/IHdyaXRlU3ltYm9sKCd7fScpIDogZW5kTGluZSgne30nKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgZW5kTGluZSgneycpOwogICAgKytpbmRlbnRhdGlvbjsKICAgIHN0YXRlbWVudHMuZm9yRWFjaCh3cml0ZU5vZGUpOwogICAgLS1pbmRlbnRhdGlvbjsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIGFzRXhwcmVzc2lvbiA/IHdyaXRlU3ltYm9sKCd9JykgOiBlbmRMaW5lKCd9Jyk7CiAgfQoKICB2aXNpdEJsb2NrKEJsb2NrIG5vZGUpIHsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlQmxvY2tCb2R5KG5vZGUuc3RhdGVtZW50cyk7CiAgfQoKICB2aXNpdEFzc2VydEJsb2NrKEFzc2VydEJsb2NrIG5vZGUpIHsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlU3BhY2VkKCdhc3NlcnQnKTsKICAgIHdyaXRlQmxvY2tCb2R5KG5vZGUuc3RhdGVtZW50cyk7CiAgfQoKICB2aXNpdEVtcHR5U3RhdGVtZW50KEVtcHR5U3RhdGVtZW50IG5vZGUpIHsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIGVuZExpbmUoJzsnKTsKICB9CgogIHZpc2l0QXNzZXJ0U3RhdGVtZW50KEFzc2VydFN0YXRlbWVudCBub2RlLCB7Ym9vbCBhc0V4cHJlc3Npb24gPSBmYWxzZX0pIHsKICAgIGlmICghYXNFeHByZXNzaW9uKSB7CiAgICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIH0KICAgIHdyaXRlV29yZCgnYXNzZXJ0Jyk7CiAgICB3cml0ZVN5bWJvbCgnKCcpOwogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUuY29uZGl0aW9uKTsKICAgIGlmIChub2RlLm1lc3NhZ2UgIT0gbnVsbCkgewogICAgICB3cml0ZUNvbW1hKCk7CiAgICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLm1lc3NhZ2UpOwogICAgfQogICAgaWYgKCFhc0V4cHJlc3Npb24pIHsKICAgICAgZW5kTGluZSgnKTsnKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlU3ltYm9sKCcpJyk7CiAgICB9CiAgfQoKICB2aXNpdExhYmVsZWRTdGF0ZW1lbnQoTGFiZWxlZFN0YXRlbWVudCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVdvcmQoc3ludGhldGljTmFtZXMubmFtZUxhYmVsZWRTdGF0ZW1lbnQobm9kZSkpOwogICAgZW5kTGluZSgnOicpOwogICAgd3JpdGVOb2RlKG5vZGUuYm9keSk7CiAgfQoKICB2aXNpdEJyZWFrU3RhdGVtZW50KEJyZWFrU3RhdGVtZW50IG5vZGUpIHsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlV29yZCgnYnJlYWsnKTsKICAgIHdyaXRlV29yZChzeW50aGV0aWNOYW1lcy5uYW1lTGFiZWxlZFN0YXRlbWVudChub2RlLnRhcmdldCkpOwogICAgZW5kTGluZSgnOycpOwogIH0KCiAgdmlzaXRXaGlsZVN0YXRlbWVudChXaGlsZVN0YXRlbWVudCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVNwYWNlZCgnd2hpbGUnKTsKICAgIHdyaXRlU3ltYm9sKCcoJyk7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5jb25kaXRpb24pOwogICAgd3JpdGVTeW1ib2woJyknKTsKICAgIHdyaXRlQm9keShub2RlLmJvZHkpOwogIH0KCiAgdmlzaXREb1N0YXRlbWVudChEb1N0YXRlbWVudCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVdvcmQoJ2RvJyk7CiAgICB3cml0ZUJvZHkobm9kZS5ib2R5KTsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlU3BhY2VkKCd3aGlsZScpOwogICAgd3JpdGVTeW1ib2woJygnKTsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLmNvbmRpdGlvbik7CiAgICBlbmRMaW5lKCcpJyk7CiAgfQoKICB2aXNpdEZvclN0YXRlbWVudChGb3JTdGF0ZW1lbnQgbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVTcGFjZWQoJ2ZvcicpOwogICAgd3JpdGVTeW1ib2woJygnKTsKICAgIHdyaXRlTGlzdChub2RlLnZhcmlhYmxlcywgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uKTsKICAgIHdyaXRlQ29tbWEoJzsnKTsKICAgIGlmIChub2RlLmNvbmRpdGlvbiAhPSBudWxsKSB7CiAgICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLmNvbmRpdGlvbik7CiAgICB9CiAgICB3cml0ZUNvbW1hKCc7Jyk7CiAgICB3cml0ZUxpc3Qobm9kZS51cGRhdGVzLCB3cml0ZUV4cHJlc3Npb24pOwogICAgd3JpdGVTeW1ib2woJyknKTsKICAgIHdyaXRlQm9keShub2RlLmJvZHkpOwogIH0KCiAgdmlzaXRGb3JJblN0YXRlbWVudChGb3JJblN0YXRlbWVudCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICBpZiAobm9kZS5pc0FzeW5jKSB7CiAgICAgIHdyaXRlU3BhY2VkKCdhd2FpdCcpOwogICAgfQogICAgd3JpdGVTcGFjZWQoJ2ZvcicpOwogICAgd3JpdGVTeW1ib2woJygnKTsKICAgIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbihub2RlLnZhcmlhYmxlLCB1c2VWYXJLZXl3b3JkOiB0cnVlKTsKICAgIHdyaXRlU3BhY2VkKCdpbicpOwogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUuaXRlcmFibGUpOwogICAgd3JpdGVTeW1ib2woJyknKTsKICAgIHdyaXRlQm9keShub2RlLmJvZHkpOwogIH0KCiAgdmlzaXRTd2l0Y2hTdGF0ZW1lbnQoU3dpdGNoU3RhdGVtZW50IG5vZGUpIHsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlV29yZCgnc3dpdGNoJyk7CiAgICB3cml0ZVN5bWJvbCgnKCcpOwogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUuZXhwcmVzc2lvbik7CiAgICBlbmRMaW5lKCcpIHsnKTsKICAgICsraW5kZW50YXRpb247CiAgICBub2RlLmNhc2VzLmZvckVhY2god3JpdGVOb2RlKTsKICAgIC0taW5kZW50YXRpb247CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICBlbmRMaW5lKCd9Jyk7CiAgfQoKICB2aXNpdFN3aXRjaENhc2UoU3dpdGNoQ2FzZSBub2RlKSB7CiAgICBTdHJpbmcgbGFiZWwgPSBzeW50aGV0aWNOYW1lcy5uYW1lU3dpdGNoQ2FzZShub2RlKTsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlV29yZChsYWJlbCk7CiAgICBlbmRMaW5lKCc6Jyk7CiAgICBmb3IgKHZhciBleHByZXNzaW9uIGluIG5vZGUuZXhwcmVzc2lvbnMpIHsKICAgICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgICB3cml0ZVdvcmQoJ2Nhc2UnKTsKICAgICAgd3JpdGVFeHByZXNzaW9uKGV4cHJlc3Npb24pOwogICAgICBlbmRMaW5lKCc6Jyk7CiAgICB9CiAgICBpZiAobm9kZS5pc0RlZmF1bHQpIHsKICAgICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgICB3cml0ZVdvcmQoJ2RlZmF1bHQnKTsKICAgICAgZW5kTGluZSgnOicpOwogICAgfQogICAgKytpbmRlbnRhdGlvbjsKICAgIHdyaXRlTm9kZShub2RlLmJvZHkpOwogICAgLS1pbmRlbnRhdGlvbjsKICB9CgogIHZpc2l0Q29udGludWVTd2l0Y2hTdGF0ZW1lbnQoQ29udGludWVTd2l0Y2hTdGF0ZW1lbnQgbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVXb3JkKCdjb250aW51ZScpOwogICAgd3JpdGVXb3JkKHN5bnRoZXRpY05hbWVzLm5hbWVTd2l0Y2hDYXNlKG5vZGUudGFyZ2V0KSk7CiAgICBlbmRMaW5lKCc7Jyk7CiAgfQoKICB2aXNpdElmU3RhdGVtZW50KElmU3RhdGVtZW50IG5vZGUpIHsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlV29yZCgnaWYnKTsKICAgIHdyaXRlU3ltYm9sKCcoJyk7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5jb25kaXRpb24pOwogICAgd3JpdGVTeW1ib2woJyknKTsKICAgIHdyaXRlQm9keShub2RlLnRoZW4pOwogICAgaWYgKG5vZGUub3RoZXJ3aXNlICE9IG51bGwpIHsKICAgICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgICB3cml0ZVdvcmQoJ2Vsc2UnKTsKICAgICAgd3JpdGVCb2R5KG5vZGUub3RoZXJ3aXNlKTsKICAgIH0KICB9CgogIHZpc2l0UmV0dXJuU3RhdGVtZW50KFJldHVyblN0YXRlbWVudCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVdvcmQoJ3JldHVybicpOwogICAgaWYgKG5vZGUuZXhwcmVzc2lvbiAhPSBudWxsKSB7CiAgICAgIHdyaXRlU3BhY2UoKTsKICAgICAgd3JpdGVFeHByZXNzaW9uKG5vZGUuZXhwcmVzc2lvbik7CiAgICB9CiAgICBlbmRMaW5lKCc7Jyk7CiAgfQoKICB2aXNpdFRyeUNhdGNoKFRyeUNhdGNoIG5vZGUpIHsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlV29yZCgndHJ5Jyk7CiAgICB3cml0ZUJvZHkobm9kZS5ib2R5KTsKICAgIG5vZGUuY2F0Y2hlcy5mb3JFYWNoKHdyaXRlTm9kZSk7CiAgfQoKICB2aXNpdENhdGNoKENhdGNoIG5vZGUpIHsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIGlmIChub2RlLmd1YXJkICE9IG51bGwpIHsKICAgICAgd3JpdGVXb3JkKCdvbicpOwogICAgICB3cml0ZVR5cGUobm9kZS5ndWFyZCk7CiAgICAgIHdyaXRlU3BhY2UoKTsKICAgIH0KICAgIHdyaXRlV29yZCgnY2F0Y2gnKTsKICAgIHdyaXRlU3ltYm9sKCcoJyk7CiAgICBpZiAobm9kZS5leGNlcHRpb24gIT0gbnVsbCkgewogICAgICB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb24obm9kZS5leGNlcHRpb24pOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVXb3JkKCduby1leGNlcHRpb24tdmFyJyk7CiAgICB9CiAgICBpZiAobm9kZS5zdGFja1RyYWNlICE9IG51bGwpIHsKICAgICAgd3JpdGVDb21tYSgpOwogICAgICB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb24obm9kZS5zdGFja1RyYWNlKTsKICAgIH0KICAgIHdyaXRlU3ltYm9sKCcpJyk7CiAgICB3cml0ZUJvZHkobm9kZS5ib2R5KTsKICB9CgogIHZpc2l0VHJ5RmluYWxseShUcnlGaW5hbGx5IG5vZGUpIHsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlV29yZCgndHJ5Jyk7CiAgICB3cml0ZUJvZHkobm9kZS5ib2R5KTsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlV29yZCgnZmluYWxseScpOwogICAgd3JpdGVCb2R5KG5vZGUuZmluYWxpemVyKTsKICB9CgogIHZpc2l0WWllbGRTdGF0ZW1lbnQoWWllbGRTdGF0ZW1lbnQgbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgaWYgKG5vZGUuaXNZaWVsZFN0YXIpIHsKICAgICAgd3JpdGVXb3JkKCd5aWVsZConKTsKICAgIH0gZWxzZSBpZiAobm9kZS5pc05hdGl2ZSkgewogICAgICB3cml0ZVdvcmQoJ1t5aWVsZF0nKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlV29yZCgneWllbGQnKTsKICAgIH0KICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24pOwogICAgZW5kTGluZSgnOycpOwogIH0KCiAgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUsIHVzZVZhcktleXdvcmQ6IHRydWUpOwogICAgZW5kTGluZSgnOycpOwogIH0KCiAgdmlzaXRGdW5jdGlvbkRlY2xhcmF0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24gbm9kZSkgewogICAgd3JpdGVBbm5vdGF0aW9uTGlzdChub2RlLnZhcmlhYmxlLmFubm90YXRpb25zKTsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlV29yZCgnZnVuY3Rpb24nKTsKICAgIGlmIChub2RlLmZ1bmN0aW9uICE9IG51bGwpIHsKICAgICAgd3JpdGVGdW5jdGlvbihub2RlLmZ1bmN0aW9uLCBuYW1lOiBnZXRWYXJpYWJsZU5hbWUobm9kZS52YXJpYWJsZSkpOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVXb3JkKGdldFZhcmlhYmxlTmFtZShub2RlLnZhcmlhYmxlKSk7CiAgICAgIGVuZExpbmUoJy4uLjsnKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSwKICAgICAge2Jvb2wgdXNlVmFyS2V5d29yZDogZmFsc2V9KSB7CiAgICBpZiAoc2hvd09mZnNldHMpIHdyaXRlV29yZCgiWyR7bm9kZS5maWxlT2Zmc2V0fV0iKTsKICAgIGlmIChzaG93TWV0YWRhdGEpIHdyaXRlTWV0YWRhdGEobm9kZSk7CiAgICB3cml0ZUFubm90YXRpb25MaXN0KG5vZGUuYW5ub3RhdGlvbnMsIHNlcGFyYXRlTGluZXM6IGZhbHNlKTsKICAgIHdyaXRlTW9kaWZpZXIobm9kZS5pc0xhdGUsICdsYXRlJyk7CiAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaXNSZXF1aXJlZCwgJ3JlcXVpcmVkJyk7CiAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaXNDb3ZhcmlhbnQsICdjb3ZhcmlhbnQnKTsKICAgIHdyaXRlTW9kaWZpZXIobm9kZS5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsLCAnZ2VuZXJpYy1jb3ZhcmlhbnQtaW1wbCcpOwogICAgd3JpdGVNb2RpZmllcihub2RlLmlzRmluYWwsICdmaW5hbCcpOwogICAgd3JpdGVNb2RpZmllcihub2RlLmlzQ29uc3QsICdjb25zdCcpOwogICAgaWYgKG5vZGUudHlwZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlQW5ub3RhdGVkVHlwZShub2RlLnR5cGUsIGFubm90YXRvcj8uYW5ub3RhdGVWYXJpYWJsZSh0aGlzLCBub2RlKSk7CiAgICB9CiAgICBpZiAodXNlVmFyS2V5d29yZCAmJiAhbm9kZS5pc0ZpbmFsICYmICFub2RlLmlzQ29uc3QgJiYgbm9kZS50eXBlID09IG51bGwpIHsKICAgICAgd3JpdGVXb3JkKCd2YXInKTsKICAgIH0KICAgIHdyaXRlV29yZChnZXRWYXJpYWJsZU5hbWUobm9kZSkpOwogICAgaWYgKG5vZGUuaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICB3cml0ZVNwYWNlZCgnPScpOwogICAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5pbml0aWFsaXplcik7CiAgICB9CiAgfQoKICB2aXNpdEFyZ3VtZW50cyhBcmd1bWVudHMgbm9kZSkgewogICAgaWYgKG5vZGUudHlwZXMuaXNOb3RFbXB0eSkgewogICAgICB3cml0ZVN5bWJvbCgnPCcpOwogICAgICB3cml0ZUxpc3Qobm9kZS50eXBlcywgd3JpdGVUeXBlKTsKICAgICAgd3JpdGVTeW1ib2woJz4nKTsKICAgIH0KICAgIHdyaXRlU3ltYm9sKCcoJyk7CiAgICB2YXIgYWxsQXJncyA9CiAgICAgICAgPExpc3Q8VHJlZU5vZGU+Pltub2RlLnBvc2l0aW9uYWwsIG5vZGUubmFtZWRdLmV4cGFuZCgoeCkgPT4geCk7CiAgICB3cml0ZUxpc3QoYWxsQXJncywgd3JpdGVOb2RlKTsKICAgIHdyaXRlU3ltYm9sKCcpJyk7CiAgfQoKICB2aXNpdE5hbWVkRXhwcmVzc2lvbihOYW1lZEV4cHJlc3Npb24gbm9kZSkgewogICAgd3JpdGVXb3JkKG5vZGUubmFtZSk7CiAgICB3cml0ZUNvbW1hKCc6Jyk7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS52YWx1ZSk7CiAgfQoKICBkZWZhdWx0U3RhdGVtZW50KFN0YXRlbWVudCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICBlbmRMaW5lKCcke25vZGUucnVudGltZVR5cGV9Jyk7CiAgfQoKICB2aXNpdEludmFsaWRJbml0aWFsaXplcihJbnZhbGlkSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgd3JpdGVXb3JkKCdpbnZhbGlkLWluaXRpYWxpemVyJyk7CiAgfQoKICB2aXNpdEZpZWxkSW5pdGlhbGl6ZXIoRmllbGRJbml0aWFsaXplciBub2RlKSB7CiAgICB3cml0ZU1lbWJlclJlZmVyZW5jZUZyb21SZWZlcmVuY2Uobm9kZS5maWVsZFJlZmVyZW5jZSk7CiAgICB3cml0ZVNwYWNlZCgnPScpOwogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUudmFsdWUpOwogIH0KCiAgdmlzaXRTdXBlckluaXRpYWxpemVyKFN1cGVySW5pdGlhbGl6ZXIgbm9kZSkgewogICAgd3JpdGVXb3JkKCdzdXBlcicpOwogICAgd3JpdGVNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKG5vZGUudGFyZ2V0UmVmZXJlbmNlKTsKICAgIHdyaXRlTm9kZShub2RlLmFyZ3VtZW50cyk7CiAgfQoKICB2aXNpdFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIoUmVkaXJlY3RpbmdJbml0aWFsaXplciBub2RlKSB7CiAgICB3cml0ZVdvcmQoJ3RoaXMnKTsKICAgIHdyaXRlTWVtYmVyUmVmZXJlbmNlRnJvbVJlZmVyZW5jZShub2RlLnRhcmdldFJlZmVyZW5jZSk7CiAgICB3cml0ZU5vZGUobm9kZS5hcmd1bWVudHMpOwogIH0KCiAgdmlzaXRMb2NhbEluaXRpYWxpemVyKExvY2FsSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUudmFyaWFibGUpOwogIH0KCiAgdmlzaXRBc3NlcnRJbml0aWFsaXplcihBc3NlcnRJbml0aWFsaXplciBub2RlKSB7CiAgICB2aXNpdEFzc2VydFN0YXRlbWVudChub2RlLnN0YXRlbWVudCwgYXNFeHByZXNzaW9uOiB0cnVlKTsKICB9CgogIGRlZmF1bHRJbml0aWFsaXplcihJbml0aWFsaXplciBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICBlbmRMaW5lKCc6ICR7bm9kZS5ydW50aW1lVHlwZX0nKTsKICB9CgogIHZvaWQgd3JpdGVOdWxsYWJpbGl0eShOdWxsYWJpbGl0eSBudWxsYWJpbGl0eSwge2Jvb2wgaW5Db21tZW50ID0gZmFsc2V9KSB7CiAgICBzd2l0Y2ggKG51bGxhYmlsaXR5KSB7CiAgICAgIGNhc2UgTnVsbGFiaWxpdHkubGVnYWN5OgogICAgICAgIHdyaXRlU3ltYm9sKCcqJyk7CiAgICAgICAgaWYgKCFpbkNvbW1lbnQpIHsKICAgICAgICAgIHN0YXRlID0gV09SRDsgLy8gRGlzYWxsb3cgYSB3b3JkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnKicuCiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE51bGxhYmlsaXR5Lm51bGxhYmxlOgogICAgICAgIHdyaXRlU3ltYm9sKCc/Jyk7CiAgICAgICAgaWYgKCFpbkNvbW1lbnQpIHsKICAgICAgICAgIHN0YXRlID0gV09SRDsgLy8gRGlzYWxsb3cgYSB3b3JkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnPycuCiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE51bGxhYmlsaXR5Lm5laXRoZXI6CiAgICAgICAgd3JpdGVTeW1ib2woJyUnKTsKICAgICAgICBpZiAoIWluQ29tbWVudCkgewogICAgICAgICAgc3RhdGUgPSBXT1JEOyAvLyBEaXNhbGxvdyBhIHdvcmQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICclJy4KICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTnVsbGFiaWxpdHkubm9uTnVsbGFibGU6CiAgICAgICAgaWYgKGluQ29tbWVudCkgewogICAgICAgICAgd3JpdGVTeW1ib2woIiEiKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlRGFydFR5cGVOdWxsYWJpbGl0eShEYXJ0VHlwZSB0eXBlLCB7Ym9vbCBpbkNvbW1lbnQgPSBmYWxzZX0pIHsKICAgIGlmICh0eXBlIGlzIEludmFsaWRUeXBlKSB7CiAgICAgIHdyaXRlTnVsbGFiaWxpdHkoTnVsbGFiaWxpdHkubmVpdGhlcik7CiAgICB9IGVsc2UgewogICAgICB3cml0ZU51bGxhYmlsaXR5KHR5cGUubnVsbGFiaWxpdHksIGluQ29tbWVudDogaW5Db21tZW50KTsKICAgIH0KICB9CgogIHZpc2l0SW52YWxpZFR5cGUoSW52YWxpZFR5cGUgbm9kZSkgewogICAgd3JpdGVXb3JkKCdpbnZhbGlkLXR5cGUnKTsKICB9CgogIHZpc2l0RHluYW1pY1R5cGUoRHluYW1pY1R5cGUgbm9kZSkgewogICAgd3JpdGVXb3JkKCdkeW5hbWljJyk7CiAgfQoKICB2aXNpdFZvaWRUeXBlKFZvaWRUeXBlIG5vZGUpIHsKICAgIHdyaXRlV29yZCgndm9pZCcpOwogIH0KCiAgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgbm9kZSkgewogICAgd3JpdGVDbGFzc1JlZmVyZW5jZUZyb21SZWZlcmVuY2Uobm9kZS5jbGFzc05hbWUpOwogICAgaWYgKG5vZGUudHlwZUFyZ3VtZW50cy5pc05vdEVtcHR5KSB7CiAgICAgIHdyaXRlU3ltYm9sKCc8Jyk7CiAgICAgIHdyaXRlTGlzdChub2RlLnR5cGVBcmd1bWVudHMsIHdyaXRlVHlwZSk7CiAgICAgIHdyaXRlU3ltYm9sKCc+Jyk7CiAgICAgIHN0YXRlID0gV09SRDsgLy8gRGlzYWxsb3cgYSB3b3JkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnPicuCiAgICB9CiAgICB3cml0ZU51bGxhYmlsaXR5KG5vZGUubnVsbGFiaWxpdHkpOwogIH0KCiAgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIG5vZGUpIHsKICAgIHdyaXRlRnVuY3Rpb25UeXBlKG5vZGUpOwogIH0KCiAgdmlzaXROYW1lZFR5cGUoTmFtZWRUeXBlIG5vZGUpIHsKICAgIHdyaXRlTW9kaWZpZXIobm9kZS5pc1JlcXVpcmVkLCAncmVxdWlyZWQnKTsKICAgIHdyaXRlV29yZChub2RlLm5hbWUpOwogICAgd3JpdGVTeW1ib2woJzonKTsKICAgIHdyaXRlU3BhY2UoKTsKICAgIHdyaXRlVHlwZShub2RlLnR5cGUpOwogIH0KCiAgdmlzaXRUeXBlUGFyYW1ldGVyVHlwZShUeXBlUGFyYW1ldGVyVHlwZSBub2RlKSB7CiAgICB3cml0ZVR5cGVQYXJhbWV0ZXJSZWZlcmVuY2Uobm9kZS5wYXJhbWV0ZXIpOwogICAgd3JpdGVOdWxsYWJpbGl0eShub2RlLmRlY2xhcmVkTnVsbGFiaWxpdHkpOwogICAgaWYgKG5vZGUucHJvbW90ZWRCb3VuZCAhPSBudWxsKSB7CiAgICAgIHdyaXRlU3BhY2VkKCcmJyk7CiAgICAgIHdyaXRlVHlwZShub2RlLnByb21vdGVkQm91bmQpOwoKICAgICAgd3JpdGVXb3JkKCIvKiAnIik7CiAgICAgIHdyaXRlTnVsbGFiaWxpdHkobm9kZS5kZWNsYXJlZE51bGxhYmlsaXR5LCBpbkNvbW1lbnQ6IHRydWUpOwogICAgICB3cml0ZVdvcmQoIicgJiAnIik7CiAgICAgIHdyaXRlRGFydFR5cGVOdWxsYWJpbGl0eShub2RlLnByb21vdGVkQm91bmQsIGluQ29tbWVudDogdHJ1ZSk7CiAgICAgIHdyaXRlV29yZCgiJyA9ICciKTsKICAgICAgd3JpdGVOdWxsYWJpbGl0eShub2RlLm51bGxhYmlsaXR5LCBpbkNvbW1lbnQ6IHRydWUpOwogICAgICB3cml0ZVdvcmQoIicgKi8iKTsKICAgIH0KICB9CgogIHZpc2l0VHlwZVBhcmFtZXRlcihUeXBlUGFyYW1ldGVyIG5vZGUpIHsKICAgIHdyaXRlTW9kaWZpZXIobm9kZS5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsLCAnZ2VuZXJpYy1jb3ZhcmlhbnQtaW1wbCcpOwogICAgd3JpdGVBbm5vdGF0aW9uTGlzdChub2RlLmFubm90YXRpb25zLCBzZXBhcmF0ZUxpbmVzOiBmYWxzZSk7CiAgICB3cml0ZVdvcmQoZ2V0VHlwZVBhcmFtZXRlck5hbWUobm9kZSkpOwogICAgd3JpdGVTcGFjZWQoJ2V4dGVuZHMnKTsKICAgIHdyaXRlVHlwZShub2RlLmJvdW5kKTsKICAgIGlmIChub2RlLmRlZmF1bHRUeXBlICE9IG51bGwpIHsKICAgICAgd3JpdGVTcGFjZWQoJz0nKTsKICAgICAgd3JpdGVUeXBlKG5vZGUuZGVmYXVsdFR5cGUpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZUNvbnN0YW50UmVmZXJlbmNlKENvbnN0YW50IG5vZGUpIHsKICAgIHdyaXRlV29yZChzeW50aGV0aWNOYW1lcy5uYW1lQ29uc3RhbnQobm9kZSkpOwogIH0KCiAgdmlzaXRDb25zdGFudEV4cHJlc3Npb24oQ29uc3RhbnRFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlQ29uc3RhbnRSZWZlcmVuY2Uobm9kZS5jb25zdGFudCk7CiAgfQoKICBkZWZhdWx0Q29uc3RhbnQoQ29uc3RhbnQgbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVDb25zdGFudFJlZmVyZW5jZShub2RlKTsKICAgIHdyaXRlU3BhY2VkKCc9Jyk7CiAgICBlbmRMaW5lKCckbm9kZScpOwogIH0KCiAgdmlzaXRMaXN0Q29uc3RhbnQoTGlzdENvbnN0YW50IG5vZGUpIHsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlQ29uc3RhbnRSZWZlcmVuY2Uobm9kZSk7CiAgICB3cml0ZVNwYWNlZCgnPScpOwogICAgd3JpdGVTeW1ib2woJzwnKTsKICAgIHdyaXRlVHlwZShub2RlLnR5cGVBcmd1bWVudCk7CiAgICB3cml0ZVN5bWJvbCgnPlsnKTsKICAgIHdyaXRlTGlzdChub2RlLmVudHJpZXMsIHdyaXRlQ29uc3RhbnRSZWZlcmVuY2UpOwogICAgZW5kTGluZSgnXScpOwogIH0KCiAgdmlzaXRTZXRDb25zdGFudChTZXRDb25zdGFudCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZUNvbnN0YW50UmVmZXJlbmNlKG5vZGUpOwogICAgd3JpdGVTcGFjZWQoJz0nKTsKICAgIHdyaXRlU3ltYm9sKCc8Jyk7CiAgICB3cml0ZVR5cGUobm9kZS50eXBlQXJndW1lbnQpOwogICAgd3JpdGVTeW1ib2woJz57Jyk7CiAgICB3cml0ZUxpc3Qobm9kZS5lbnRyaWVzLCB3cml0ZUNvbnN0YW50UmVmZXJlbmNlKTsKICAgIGVuZExpbmUoJ30nKTsKICB9CgogIHZpc2l0TWFwQ29uc3RhbnQoTWFwQ29uc3RhbnQgbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVDb25zdGFudFJlZmVyZW5jZShub2RlKTsKICAgIHdyaXRlU3BhY2VkKCc9Jyk7CiAgICB3cml0ZVN5bWJvbCgnPCcpOwogICAgd3JpdGVMaXN0KFtub2RlLmtleVR5cGUsIG5vZGUudmFsdWVUeXBlXSwgd3JpdGVUeXBlKTsKICAgIHdyaXRlU3ltYm9sKCc+eycpOwogICAgd3JpdGVMaXN0KG5vZGUuZW50cmllcywgKGVudHJ5KSB7CiAgICAgIHdyaXRlQ29uc3RhbnRSZWZlcmVuY2UoZW50cnkua2V5KTsKICAgICAgd3JpdGVTeW1ib2woJzonKTsKICAgICAgd3JpdGVDb25zdGFudFJlZmVyZW5jZShlbnRyeS52YWx1ZSk7CiAgICB9KTsKICAgIGVuZExpbmUoJyknKTsKICB9CgogIHZpc2l0SW5zdGFuY2VDb25zdGFudChJbnN0YW5jZUNvbnN0YW50IG5vZGUpIHsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlQ29uc3RhbnRSZWZlcmVuY2Uobm9kZSk7CiAgICB3cml0ZVNwYWNlZCgnPScpOwogICAgd3JpdGVDbGFzc1JlZmVyZW5jZUZyb21SZWZlcmVuY2Uobm9kZS5jbGFzc1JlZmVyZW5jZSk7CiAgICBpZiAoIW5vZGUudHlwZUFyZ3VtZW50cy5pc0VtcHR5KSB7CiAgICAgIHdyaXRlU3ltYm9sKCc8Jyk7CiAgICAgIHdyaXRlTGlzdChub2RlLnR5cGVBcmd1bWVudHMsIHdyaXRlVHlwZSk7CiAgICAgIHdyaXRlU3ltYm9sKCc+Jyk7CiAgICB9CgogICAgd3JpdGVTeW1ib2woJyB7Jyk7CiAgICB3cml0ZUxpc3Qobm9kZS5maWVsZFZhbHVlcy5lbnRyaWVzLAogICAgICAgIChjb3JlLk1hcEVudHJ5PFJlZmVyZW5jZSwgQ29uc3RhbnQ+IGVudHJ5KSB7CiAgICAgIGlmIChlbnRyeS5rZXkubm9kZSAhPSBudWxsKSB7CiAgICAgICAgd3JpdGVXb3JkKCcke2VudHJ5LmtleS5hc0ZpZWxkLm5hbWUubmFtZX0nKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB3cml0ZVdvcmQoJyR7ZW50cnkua2V5LmNhbm9uaWNhbE5hbWUubmFtZX0nKTsKICAgICAgfQogICAgICB3cml0ZVN5bWJvbCgnOicpOwogICAgICB3cml0ZUNvbnN0YW50UmVmZXJlbmNlKGVudHJ5LnZhbHVlKTsKICAgIH0pOwogICAgZW5kTGluZSgnfScpOwogIH0KCiAgdmlzaXRQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50KFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQgbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVDb25zdGFudFJlZmVyZW5jZShub2RlKTsKICAgIHdyaXRlU3BhY2VkKCc9Jyk7CiAgICB3cml0ZVdvcmQoJ3BhcnRpYWwtaW5zdGFudGlhdGlvbicpOwogICAgd3JpdGVTcGFjZSgpOwogICAgd3JpdGVNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKG5vZGUudGVhck9mZkNvbnN0YW50LnByb2NlZHVyZVJlZmVyZW5jZSk7CiAgICB3cml0ZVNwYWNlKCk7CiAgICB3cml0ZVN5bWJvbCgnPCcpOwogICAgd3JpdGVMaXN0KG5vZGUudHlwZXMsIHdyaXRlVHlwZSk7CiAgICB3cml0ZVN5bWJvbCgnPicpOwogICAgZW5kTGluZSgpOwogIH0KCiAgdmlzaXRTdHJpbmdDb25zdGFudChTdHJpbmdDb25zdGFudCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZUNvbnN0YW50UmVmZXJlbmNlKG5vZGUpOwogICAgd3JpdGVTcGFjZWQoJz0nKTsKICAgIGVuZExpbmUoJyIke2VzY2FwZVN0cmluZyhub2RlLnZhbHVlKX0iJyk7CiAgfQoKICB2aXNpdFRlYXJPZmZDb25zdGFudChUZWFyT2ZmQ29uc3RhbnQgbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVDb25zdGFudFJlZmVyZW5jZShub2RlKTsKICAgIHdyaXRlU3BhY2VkKCc9Jyk7CiAgICB3cml0ZVdvcmQoJ3RlYXJvZmYnKTsKICAgIHdyaXRlU3BhY2UoKTsKICAgIHdyaXRlTWVtYmVyUmVmZXJlbmNlRnJvbVJlZmVyZW5jZShub2RlLnByb2NlZHVyZVJlZmVyZW5jZSk7CiAgICBlbmRMaW5lKCk7CiAgfQoKICB2aXNpdFVuZXZhbHVhdGVkQ29uc3RhbnQoVW5ldmFsdWF0ZWRDb25zdGFudCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZUNvbnN0YW50UmVmZXJlbmNlKG5vZGUpOwogICAgd3JpdGVTcGFjZWQoJz0nKTsKICAgIHdyaXRlU3ltYm9sKCdldmFsJyk7CiAgICB3cml0ZVNwYWNlKCk7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uKTsKICAgIGVuZExpbmUoKTsKICB9CgogIGRlZmF1bHROb2RlKE5vZGUgbm9kZSkgewogICAgd3JpdGUoJzwke25vZGUucnVudGltZVR5cGV9PicpOwogIH0KfQoKY2xhc3MgUHJlY2VkZW5jZSBleHRlbmRzIEV4cHJlc3Npb25WaXNpdG9yPGludD4gewogIHN0YXRpYyBmaW5hbCBQcmVjZWRlbmNlIGluc3RhbmNlID0gbmV3IFByZWNlZGVuY2UoKTsKCiAgc3RhdGljIGludCBvZihFeHByZXNzaW9uIG5vZGUpID0+IG5vZGUuYWNjZXB0KGluc3RhbmNlKTsKCiAgc3RhdGljIGNvbnN0IGludCBFWFBSRVNTSU9OID0gMTsKICBzdGF0aWMgY29uc3QgaW50IENPTkRJVElPTkFMID0gMjsKICBzdGF0aWMgY29uc3QgaW50IExPR0lDQUxfTlVMTF9BV0FSRSA9IDM7CiAgc3RhdGljIGNvbnN0IGludCBMT0dJQ0FMX09SID0gNDsKICBzdGF0aWMgY29uc3QgaW50IExPR0lDQUxfQU5EID0gNTsKICBzdGF0aWMgY29uc3QgaW50IEVRVUFMSVRZID0gNjsKICBzdGF0aWMgY29uc3QgaW50IFJFTEFUSU9OQUwgPSA3OwogIHN0YXRpYyBjb25zdCBpbnQgQklUV0lTRV9PUiA9IDg7CiAgc3RhdGljIGNvbnN0IGludCBCSVRXSVNFX1hPUiA9IDk7CiAgc3RhdGljIGNvbnN0IGludCBCSVRXSVNFX0FORCA9IDEwOwogIHN0YXRpYyBjb25zdCBpbnQgU0hJRlQgPSAxMTsKICBzdGF0aWMgY29uc3QgaW50IEFERElUSVZFID0gMTI7CiAgc3RhdGljIGNvbnN0IGludCBNVUxUSVBMSUNBVElWRSA9IDEzOwogIHN0YXRpYyBjb25zdCBpbnQgUFJFRklYID0gMTQ7CiAgc3RhdGljIGNvbnN0IGludCBQT1NURklYID0gMTU7CiAgc3RhdGljIGNvbnN0IGludCBUWVBFX0xJVEVSQUwgPSAxOTsKICBzdGF0aWMgY29uc3QgaW50IFBSSU1BUlkgPSAyMDsKICBzdGF0aWMgY29uc3QgaW50IENBTExFRSA9IDIxOwoKICBzdGF0aWMgY29uc3QgTWFwPFN0cmluZywgaW50PiBiaW5hcnlQcmVjZWRlbmNlID0gY29uc3QgewogICAgJyYmJzogTE9HSUNBTF9BTkQsCiAgICAnfHwnOiBMT0dJQ0FMX09SLAogICAgJz8/JzogTE9HSUNBTF9OVUxMX0FXQVJFLAogICAgJz09JzogRVFVQUxJVFksCiAgICAnIT0nOiBFUVVBTElUWSwKICAgICc+JzogUkVMQVRJT05BTCwKICAgICc+PSc6IFJFTEFUSU9OQUwsCiAgICAnPCc6IFJFTEFUSU9OQUwsCiAgICAnPD0nOiBSRUxBVElPTkFMLAogICAgJ3wnOiBCSVRXSVNFX09SLAogICAgJ14nOiBCSVRXSVNFX1hPUiwKICAgICcmJzogQklUV0lTRV9BTkQsCiAgICAnPj4nOiBTSElGVCwKICAgICc8PCc6IFNISUZULAogICAgJysnOiBBRERJVElWRSwKICAgICctJzogQURESVRJVkUsCiAgICAnKic6IE1VTFRJUExJQ0FUSVZFLAogICAgJyUnOiBNVUxUSVBMSUNBVElWRSwKICAgICcvJzogTVVMVElQTElDQVRJVkUsCiAgICAnfi8nOiBNVUxUSVBMSUNBVElWRSwKICAgIG51bGw6IEVYUFJFU1NJT04sCiAgfTsKCiAgc3RhdGljIGJvb2wgaXNBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yKGludCBwcmVjZWRlbmNlKSB7CiAgICByZXR1cm4gcHJlY2VkZW5jZSAhPSBFUVVBTElUWSAmJiBwcmVjZWRlbmNlICE9IFJFTEFUSU9OQUw7CiAgfQoKICBpbnQgZGVmYXVsdEV4cHJlc3Npb24oRXhwcmVzc2lvbiBub2RlKSA9PiBFWFBSRVNTSU9OOwogIGludCB2aXNpdEludmFsaWRFeHByZXNzaW9uKEludmFsaWRFeHByZXNzaW9uIG5vZGUpID0+IENBTExFRTsKICBpbnQgdmlzaXRNZXRob2RJbnZvY2F0aW9uKE1ldGhvZEludm9jYXRpb24gbm9kZSkgPT4gQ0FMTEVFOwogIGludCB2aXNpdFN1cGVyTWV0aG9kSW52b2NhdGlvbihTdXBlck1ldGhvZEludm9jYXRpb24gbm9kZSkgPT4gQ0FMTEVFOwogIGludCB2aXNpdERpcmVjdE1ldGhvZEludm9jYXRpb24oRGlyZWN0TWV0aG9kSW52b2NhdGlvbiBub2RlKSA9PiBDQUxMRUU7CiAgaW50IHZpc2l0U3RhdGljSW52b2NhdGlvbihTdGF0aWNJbnZvY2F0aW9uIG5vZGUpID0+IENBTExFRTsKICBpbnQgdmlzaXRDb25zdHJ1Y3Rvckludm9jYXRpb24oQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUpID0+IENBTExFRTsKICBpbnQgdmlzaXROb3QoTm90IG5vZGUpID0+IFBSRUZJWDsKICBpbnQgdmlzaXRMb2dpY2FsRXhwcmVzc2lvbihMb2dpY2FsRXhwcmVzc2lvbiBub2RlKSA9PgogICAgICBiaW5hcnlQcmVjZWRlbmNlW25vZGUub3BlcmF0b3JdOwogIGludCB2aXNpdENvbmRpdGlvbmFsRXhwcmVzc2lvbihDb25kaXRpb25hbEV4cHJlc3Npb24gbm9kZSkgPT4gQ09ORElUSU9OQUw7CiAgaW50IHZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbihTdHJpbmdDb25jYXRlbmF0aW9uIG5vZGUpID0+IFBSSU1BUlk7CiAgaW50IHZpc2l0SXNFeHByZXNzaW9uKElzRXhwcmVzc2lvbiBub2RlKSA9PiBSRUxBVElPTkFMOwogIGludCB2aXNpdEFzRXhwcmVzc2lvbihBc0V4cHJlc3Npb24gbm9kZSkgPT4gUkVMQVRJT05BTDsKICBpbnQgdmlzaXRTeW1ib2xMaXRlcmFsKFN5bWJvbExpdGVyYWwgbm9kZSkgPT4gUFJJTUFSWTsKICBpbnQgdmlzaXRUeXBlTGl0ZXJhbChUeXBlTGl0ZXJhbCBub2RlKSA9PiBQUklNQVJZOwogIGludCB2aXNpdFRoaXNFeHByZXNzaW9uKFRoaXNFeHByZXNzaW9uIG5vZGUpID0+IENBTExFRTsKICBpbnQgdmlzaXRSZXRocm93KFJldGhyb3cgbm9kZSkgPT4gUFJJTUFSWTsKICBpbnQgdmlzaXRUaHJvdyhUaHJvdyBub2RlKSA9PiBFWFBSRVNTSU9OOwogIGludCB2aXNpdExpc3RMaXRlcmFsKExpc3RMaXRlcmFsIG5vZGUpID0+IFBSSU1BUlk7CiAgaW50IHZpc2l0U2V0TGl0ZXJhbChTZXRMaXRlcmFsIG5vZGUpID0+IFBSSU1BUlk7CiAgaW50IHZpc2l0TWFwTGl0ZXJhbChNYXBMaXRlcmFsIG5vZGUpID0+IFBSSU1BUlk7CiAgaW50IHZpc2l0QXdhaXRFeHByZXNzaW9uKEF3YWl0RXhwcmVzc2lvbiBub2RlKSA9PiBQUkVGSVg7CiAgaW50IHZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKEZ1bmN0aW9uRXhwcmVzc2lvbiBub2RlKSA9PiBFWFBSRVNTSU9OOwogIGludCB2aXNpdFN0cmluZ0xpdGVyYWwoU3RyaW5nTGl0ZXJhbCBub2RlKSA9PiBDQUxMRUU7CiAgaW50IHZpc2l0SW50TGl0ZXJhbChJbnRMaXRlcmFsIG5vZGUpID0+IENBTExFRTsKICBpbnQgdmlzaXREb3VibGVMaXRlcmFsKERvdWJsZUxpdGVyYWwgbm9kZSkgPT4gQ0FMTEVFOwogIGludCB2aXNpdEJvb2xMaXRlcmFsKEJvb2xMaXRlcmFsIG5vZGUpID0+IENBTExFRTsKICBpbnQgdmlzaXROdWxsTGl0ZXJhbChOdWxsTGl0ZXJhbCBub2RlKSA9PiBDQUxMRUU7CiAgaW50IHZpc2l0VmFyaWFibGVHZXQoVmFyaWFibGVHZXQgbm9kZSkgPT4gUFJJTUFSWTsKICBpbnQgdmlzaXRWYXJpYWJsZVNldChWYXJpYWJsZVNldCBub2RlKSA9PiBFWFBSRVNTSU9OOwogIGludCB2aXNpdFByb3BlcnR5R2V0KFByb3BlcnR5R2V0IG5vZGUpID0+IFBSSU1BUlk7CiAgaW50IHZpc2l0UHJvcGVydHlTZXQoUHJvcGVydHlTZXQgbm9kZSkgPT4gRVhQUkVTU0lPTjsKICBpbnQgdmlzaXRTdXBlclByb3BlcnR5R2V0KFN1cGVyUHJvcGVydHlHZXQgbm9kZSkgPT4gUFJJTUFSWTsKICBpbnQgdmlzaXRTdXBlclByb3BlcnR5U2V0KFN1cGVyUHJvcGVydHlTZXQgbm9kZSkgPT4gRVhQUkVTU0lPTjsKICBpbnQgdmlzaXREaXJlY3RQcm9wZXJ0eUdldChEaXJlY3RQcm9wZXJ0eUdldCBub2RlKSA9PiBQUklNQVJZOwogIGludCB2aXNpdERpcmVjdFByb3BlcnR5U2V0KERpcmVjdFByb3BlcnR5U2V0IG5vZGUpID0+IEVYUFJFU1NJT047CiAgaW50IHZpc2l0U3RhdGljR2V0KFN0YXRpY0dldCBub2RlKSA9PiBQUklNQVJZOwogIGludCB2aXNpdFN0YXRpY1NldChTdGF0aWNTZXQgbm9kZSkgPT4gRVhQUkVTU0lPTjsKICBpbnQgdmlzaXRMZXQoTGV0IG5vZGUpID0+IEVYUFJFU1NJT047Cn0KClN0cmluZyBwcm9jZWR1cmVLaW5kVG9TdHJpbmcoUHJvY2VkdXJlS2luZCBraW5kKSB7CiAgc3dpdGNoIChraW5kKSB7CiAgICBjYXNlIFByb2NlZHVyZUtpbmQuTWV0aG9kOgogICAgICByZXR1cm4gJ21ldGhvZCc7CiAgICBjYXNlIFByb2NlZHVyZUtpbmQuR2V0dGVyOgogICAgICByZXR1cm4gJ2dldCc7CiAgICBjYXNlIFByb2NlZHVyZUtpbmQuU2V0dGVyOgogICAgICByZXR1cm4gJ3NldCc7CiAgICBjYXNlIFByb2NlZHVyZUtpbmQuT3BlcmF0b3I6CiAgICAgIHJldHVybiAnb3BlcmF0b3InOwogICAgY2FzZSBQcm9jZWR1cmVLaW5kLkZhY3Rvcnk6CiAgICAgIHJldHVybiAnZmFjdG9yeSc7CiAgfQogIHRocm93ICdpbGxlZ2FsIFByb2NlZHVyZUtpbmQ6ICRraW5kJzsKfQqJSgBOTjwcASIqASEBFh8BGhEsAUwBFQIBKBccAgFKFx4BJiZNRBUJTk0JTxkJKj07ORoKMFElQA83JggGJAQBMBcEASNJHQQCARwvLzMBPhMoPBEyDQggBgEYJCkqBhgkKSoGIQQCATQBKBYPPQIBJBYPOwIBLVACASZDAgEvJToPHws1Dx8EAgE0RAIBPR4yDyYEHzMPJgQnAgFAPwIBJixNFAIBKyw4IRQCARMvMj9BUEUuLEI9OzUBRTQyPThJO0c6ATQBO08NNT8kLyIw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dWx0QmFzaWNMaXRlcmFsKEJhc2ljTGl0ZXJhbCBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKCiAgUiB2aXNpdEludmFsaWRFeHByZXNzaW9uKEludmFsaWRFeHByZXNzaW9uIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRWYXJpYWJsZUdldChWYXJpYWJsZUdldCBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0VmFyaWFibGVTZXQoVmFyaWFibGVTZXQgbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdFByb3BlcnR5R2V0KFByb3BlcnR5R2V0IG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRQcm9wZXJ0eVNldChQcm9wZXJ0eVNldCBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0RGlyZWN0UHJvcGVydHlHZXQoRGlyZWN0UHJvcGVydHlHZXQgbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdERpcmVjdFByb3BlcnR5U2V0KERpcmVjdFByb3BlcnR5U2V0IG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRTdXBlclByb3BlcnR5R2V0KFN1cGVyUHJvcGVydHlHZXQgbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdFN1cGVyUHJvcGVydHlTZXQoU3VwZXJQcm9wZXJ0eVNldCBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0U3RhdGljR2V0KFN0YXRpY0dldCBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0U3RhdGljU2V0KFN0YXRpY1NldCBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0TWV0aG9kSW52b2NhdGlvbihNZXRob2RJbnZvY2F0aW9uIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXREaXJlY3RNZXRob2RJbnZvY2F0aW9uKERpcmVjdE1ldGhvZEludm9jYXRpb24gbm9kZSkgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdFN1cGVyTWV0aG9kSW52b2NhdGlvbihTdXBlck1ldGhvZEludm9jYXRpb24gbm9kZSkgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdFN0YXRpY0ludm9jYXRpb24oU3RhdGljSW52b2NhdGlvbiBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKENvbnN0cnVjdG9ySW52b2NhdGlvbiBub2RlKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0Tm90KE5vdCBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0TG9naWNhbEV4cHJlc3Npb24oTG9naWNhbEV4cHJlc3Npb24gbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdENvbmRpdGlvbmFsRXhwcmVzc2lvbihDb25kaXRpb25hbEV4cHJlc3Npb24gbm9kZSkgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdFN0cmluZ0NvbmNhdGVuYXRpb24oU3RyaW5nQ29uY2F0ZW5hdGlvbiBub2RlKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0TGlzdENvbmNhdGVuYXRpb24oTGlzdENvbmNhdGVuYXRpb24gbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdFNldENvbmNhdGVuYXRpb24oU2V0Q29uY2F0ZW5hdGlvbiBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0TWFwQ29uY2F0ZW5hdGlvbihNYXBDb25jYXRlbmF0aW9uIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRJbnN0YW5jZUNyZWF0aW9uKEluc3RhbmNlQ3JlYXRpb24gbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdElzRXhwcmVzc2lvbihJc0V4cHJlc3Npb24gbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdEFzRXhwcmVzc2lvbihBc0V4cHJlc3Npb24gbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdFN5bWJvbExpdGVyYWwoU3ltYm9sTGl0ZXJhbCBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0VHlwZUxpdGVyYWwoVHlwZUxpdGVyYWwgbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdFRoaXNFeHByZXNzaW9uKFRoaXNFeHByZXNzaW9uIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRSZXRocm93KFJldGhyb3cgbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdFRocm93KFRocm93IG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRMaXN0TGl0ZXJhbChMaXN0TGl0ZXJhbCBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0U2V0TGl0ZXJhbChTZXRMaXRlcmFsIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRNYXBMaXRlcmFsKE1hcExpdGVyYWwgbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdEF3YWl0RXhwcmVzc2lvbihBd2FpdEV4cHJlc3Npb24gbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbihGdW5jdGlvbkV4cHJlc3Npb24gbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdENvbnN0YW50RXhwcmVzc2lvbihDb25zdGFudEV4cHJlc3Npb24gbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdFN0cmluZ0xpdGVyYWwoU3RyaW5nTGl0ZXJhbCBub2RlKSA9PiBkZWZhdWx0QmFzaWNMaXRlcmFsKG5vZGUpOwogIFIgdmlzaXRJbnRMaXRlcmFsKEludExpdGVyYWwgbm9kZSkgPT4gZGVmYXVsdEJhc2ljTGl0ZXJhbChub2RlKTsKICBSIHZpc2l0RG91YmxlTGl0ZXJhbChEb3VibGVMaXRlcmFsIG5vZGUpID0+IGRlZmF1bHRCYXNpY0xpdGVyYWwobm9kZSk7CiAgUiB2aXNpdEJvb2xMaXRlcmFsKEJvb2xMaXRlcmFsIG5vZGUpID0+IGRlZmF1bHRCYXNpY0xpdGVyYWwobm9kZSk7CiAgUiB2aXNpdE51bGxMaXRlcmFsKE51bGxMaXRlcmFsIG5vZGUpID0+IGRlZmF1bHRCYXNpY0xpdGVyYWwobm9kZSk7CiAgUiB2aXNpdExldChMZXQgbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdEJsb2NrRXhwcmVzc2lvbihCbG9ja0V4cHJlc3Npb24gbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdEluc3RhbnRpYXRpb24oSW5zdGFudGlhdGlvbiBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0TG9hZExpYnJhcnkoTG9hZExpYnJhcnkgbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdENoZWNrTGlicmFyeUlzTG9hZGVkKENoZWNrTGlicmFyeUlzTG9hZGVkIG5vZGUpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwp9CgphYnN0cmFjdCBjbGFzcyBTdGF0ZW1lbnRWaXNpdG9yPFI+IHsKICBjb25zdCBTdGF0ZW1lbnRWaXNpdG9yKCk7CgogIFIgZGVmYXVsdFN0YXRlbWVudChTdGF0ZW1lbnQgbm9kZSkgPT4gbnVsbDsKCiAgUiB2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnQoRXhwcmVzc2lvblN0YXRlbWVudCBub2RlKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUpOwogIFIgdmlzaXRCbG9jayhCbG9jayBub2RlKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUpOwogIFIgdmlzaXRBc3NlcnRCbG9jayhBc3NlcnRCbG9jayBub2RlKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUpOwogIFIgdmlzaXRFbXB0eVN0YXRlbWVudChFbXB0eVN0YXRlbWVudCBub2RlKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUpOwogIFIgdmlzaXRBc3NlcnRTdGF0ZW1lbnQoQXNzZXJ0U3RhdGVtZW50IG5vZGUpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdExhYmVsZWRTdGF0ZW1lbnQoTGFiZWxlZFN0YXRlbWVudCBub2RlKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUpOwogIFIgdmlzaXRCcmVha1N0YXRlbWVudChCcmVha1N0YXRlbWVudCBub2RlKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUpOwogIFIgdmlzaXRXaGlsZVN0YXRlbWVudChXaGlsZVN0YXRlbWVudCBub2RlKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUpOwogIFIgdmlzaXREb1N0YXRlbWVudChEb1N0YXRlbWVudCBub2RlKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUpOwogIFIgdmlzaXRGb3JTdGF0ZW1lbnQoRm9yU3RhdGVtZW50IG5vZGUpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdEZvckluU3RhdGVtZW50KEZvckluU3RhdGVtZW50IG5vZGUpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdFN3aXRjaFN0YXRlbWVudChTd2l0Y2hTdGF0ZW1lbnQgbm9kZSkgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlKTsKICBSIHZpc2l0Q29udGludWVTd2l0Y2hTdGF0ZW1lbnQoQ29udGludWVTd2l0Y2hTdGF0ZW1lbnQgbm9kZSkgPT4KICAgICAgZGVmYXVsdFN0YXRlbWVudChub2RlKTsKICBSIHZpc2l0SWZTdGF0ZW1lbnQoSWZTdGF0ZW1lbnQgbm9kZSkgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlKTsKICBSIHZpc2l0UmV0dXJuU3RhdGVtZW50KFJldHVyblN0YXRlbWVudCBub2RlKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUpOwogIFIgdmlzaXRUcnlDYXRjaChUcnlDYXRjaCBub2RlKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUpOwogIFIgdmlzaXRUcnlGaW5hbGx5KFRyeUZpbmFsbHkgbm9kZSkgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlKTsKICBSIHZpc2l0WWllbGRTdGF0ZW1lbnQoWWllbGRTdGF0ZW1lbnQgbm9kZSkgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlKTsKICBSIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiBub2RlKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUpOwp9CgphYnN0cmFjdCBjbGFzcyBNZW1iZXJWaXNpdG9yPFI+IHsKICBjb25zdCBNZW1iZXJWaXNpdG9yKCk7CgogIFIgZGVmYXVsdE1lbWJlcihNZW1iZXIgbm9kZSkgPT4gbnVsbDsKCiAgUiB2aXNpdENvbnN0cnVjdG9yKENvbnN0cnVjdG9yIG5vZGUpID0+IGRlZmF1bHRNZW1iZXIobm9kZSk7CiAgUiB2aXNpdFByb2NlZHVyZShQcm9jZWR1cmUgbm9kZSkgPT4gZGVmYXVsdE1lbWJlcihub2RlKTsKICBSIHZpc2l0RmllbGQoRmllbGQgbm9kZSkgPT4gZGVmYXVsdE1lbWJlcihub2RlKTsKICBSIHZpc2l0UmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IoUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3Igbm9kZSkgewogICAgcmV0dXJuIGRlZmF1bHRNZW1iZXIobm9kZSk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBJbml0aWFsaXplclZpc2l0b3I8Uj4gewogIGNvbnN0IEluaXRpYWxpemVyVmlzaXRvcigpOwoKICBSIGRlZmF1bHRJbml0aWFsaXplcihJbml0aWFsaXplciBub2RlKSA9PiBudWxsOwoKICBSIHZpc2l0SW52YWxpZEluaXRpYWxpemVyKEludmFsaWRJbml0aWFsaXplciBub2RlKSA9PgogICAgICBkZWZhdWx0SW5pdGlhbGl6ZXIobm9kZSk7CiAgUiB2aXNpdEZpZWxkSW5pdGlhbGl6ZXIoRmllbGRJbml0aWFsaXplciBub2RlKSA9PiBkZWZhdWx0SW5pdGlhbGl6ZXIobm9kZSk7CiAgUiB2aXNpdFN1cGVySW5pdGlhbGl6ZXIoU3VwZXJJbml0aWFsaXplciBub2RlKSA9PiBkZWZhdWx0SW5pdGlhbGl6ZXIobm9kZSk7CiAgUiB2aXNpdFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIoUmVkaXJlY3RpbmdJbml0aWFsaXplciBub2RlKSA9PgogICAgICBkZWZhdWx0SW5pdGlhbGl6ZXIobm9kZSk7CiAgUiB2aXNpdExvY2FsSW5pdGlhbGl6ZXIoTG9jYWxJbml0aWFsaXplciBub2RlKSA9PiBkZWZhdWx0SW5pdGlhbGl6ZXIobm9kZSk7CiAgUiB2aXNpdEFzc2VydEluaXRpYWxpemVyKEFzc2VydEluaXRpYWxpemVyIG5vZGUpID0+IGRlZmF1bHRJbml0aWFsaXplcihub2RlKTsKfQoKY2xhc3MgVHJlZVZpc2l0b3I8Uj4KICAgIGltcGxlbWVudHMKICAgICAgICBFeHByZXNzaW9uVmlzaXRvcjxSPiwKICAgICAgICBTdGF0ZW1lbnRWaXNpdG9yPFI+LAogICAgICAgIE1lbWJlclZpc2l0b3I8Uj4sCiAgICAgICAgSW5pdGlhbGl6ZXJWaXNpdG9yPFI+IHsKICBjb25zdCBUcmVlVmlzaXRvcigpOwoKICBSIGRlZmF1bHRUcmVlTm9kZShUcmVlTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLyBFeHByZXNzaW9ucwogIFIgZGVmYXVsdEV4cHJlc3Npb24oRXhwcmVzc2lvbiBub2RlKSA9PiBkZWZhdWx0VHJlZU5vZGUobm9kZSk7CiAgUiBkZWZhdWx0QmFzaWNMaXRlcmFsKEJhc2ljTGl0ZXJhbCBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0SW52YWxpZEV4cHJlc3Npb24oSW52YWxpZEV4cHJlc3Npb24gbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdFZhcmlhYmxlR2V0KFZhcmlhYmxlR2V0IG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRWYXJpYWJsZVNldChWYXJpYWJsZVNldCBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0UHJvcGVydHlHZXQoUHJvcGVydHlHZXQgbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdFByb3BlcnR5U2V0KFByb3BlcnR5U2V0IG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXREaXJlY3RQcm9wZXJ0eUdldChEaXJlY3RQcm9wZXJ0eUdldCBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0RGlyZWN0UHJvcGVydHlTZXQoRGlyZWN0UHJvcGVydHlTZXQgbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdFN1cGVyUHJvcGVydHlHZXQoU3VwZXJQcm9wZXJ0eUdldCBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0U3VwZXJQcm9wZXJ0eVNldChTdXBlclByb3BlcnR5U2V0IG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRTdGF0aWNHZXQoU3RhdGljR2V0IG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRTdGF0aWNTZXQoU3RhdGljU2V0IG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRNZXRob2RJbnZvY2F0aW9uKE1ldGhvZEludm9jYXRpb24gbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdERpcmVjdE1ldGhvZEludm9jYXRpb24oRGlyZWN0TWV0aG9kSW52b2NhdGlvbiBub2RlKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0U3VwZXJNZXRob2RJbnZvY2F0aW9uKFN1cGVyTWV0aG9kSW52b2NhdGlvbiBub2RlKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0U3RhdGljSW52b2NhdGlvbihTdGF0aWNJbnZvY2F0aW9uIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRDb25zdHJ1Y3Rvckludm9jYXRpb24oQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXROb3QoTm90IG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRMb2dpY2FsRXhwcmVzc2lvbihMb2dpY2FsRXhwcmVzc2lvbiBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0Q29uZGl0aW9uYWxFeHByZXNzaW9uKENvbmRpdGlvbmFsRXhwcmVzc2lvbiBub2RlKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbihTdHJpbmdDb25jYXRlbmF0aW9uIG5vZGUpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRMaXN0Q29uY2F0ZW5hdGlvbihMaXN0Q29uY2F0ZW5hdGlvbiBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0U2V0Q29uY2F0ZW5hdGlvbihTZXRDb25jYXRlbmF0aW9uIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRNYXBDb25jYXRlbmF0aW9uKE1hcENvbmNhdGVuYXRpb24gbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdEluc3RhbmNlQ3JlYXRpb24oSW5zdGFuY2VDcmVhdGlvbiBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0SXNFeHByZXNzaW9uKElzRXhwcmVzc2lvbiBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0QXNFeHByZXNzaW9uKEFzRXhwcmVzc2lvbiBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0U3ltYm9sTGl0ZXJhbChTeW1ib2xMaXRlcmFsIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRUeXBlTGl0ZXJhbChUeXBlTGl0ZXJhbCBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0VGhpc0V4cHJlc3Npb24oVGhpc0V4cHJlc3Npb24gbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdFJldGhyb3coUmV0aHJvdyBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0VGhyb3coVGhyb3cgbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdExpc3RMaXRlcmFsKExpc3RMaXRlcmFsIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRTZXRMaXRlcmFsKFNldExpdGVyYWwgbm9kZSkgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgUiB2aXNpdE1hcExpdGVyYWwoTWFwTGl0ZXJhbCBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0QXdhaXRFeHByZXNzaW9uKEF3YWl0RXhwcmVzc2lvbiBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKEZ1bmN0aW9uRXhwcmVzc2lvbiBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0Q29uc3RhbnRFeHByZXNzaW9uKENvbnN0YW50RXhwcmVzc2lvbiBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0U3RyaW5nTGl0ZXJhbChTdHJpbmdMaXRlcmFsIG5vZGUpID0+IGRlZmF1bHRCYXNpY0xpdGVyYWwobm9kZSk7CiAgUiB2aXNpdEludExpdGVyYWwoSW50TGl0ZXJhbCBub2RlKSA9PiBkZWZhdWx0QmFzaWNMaXRlcmFsKG5vZGUpOwogIFIgdmlzaXREb3VibGVMaXRlcmFsKERvdWJsZUxpdGVyYWwgbm9kZSkgPT4gZGVmYXVsdEJhc2ljTGl0ZXJhbChub2RlKTsKICBSIHZpc2l0Qm9vbExpdGVyYWwoQm9vbExpdGVyYWwgbm9kZSkgPT4gZGVmYXVsdEJhc2ljTGl0ZXJhbChub2RlKTsKICBSIHZpc2l0TnVsbExpdGVyYWwoTnVsbExpdGVyYWwgbm9kZSkgPT4gZGVmYXVsdEJhc2ljTGl0ZXJhbChub2RlKTsKICBSIHZpc2l0TGV0KExldCBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0QmxvY2tFeHByZXNzaW9uKEJsb2NrRXhwcmVzc2lvbiBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0SW5zdGFudGlhdGlvbihJbnN0YW50aWF0aW9uIG5vZGUpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIFIgdmlzaXRMb2FkTGlicmFyeShMb2FkTGlicmFyeSBub2RlKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICBSIHZpc2l0Q2hlY2tMaWJyYXJ5SXNMb2FkZWQoQ2hlY2tMaWJyYXJ5SXNMb2FkZWQgbm9kZSkgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CgogIC8vIFN0YXRlbWVudHMKICBSIGRlZmF1bHRTdGF0ZW1lbnQoU3RhdGVtZW50IG5vZGUpID0+IGRlZmF1bHRUcmVlTm9kZShub2RlKTsKICBSIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChFeHByZXNzaW9uU3RhdGVtZW50IG5vZGUpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdEJsb2NrKEJsb2NrIG5vZGUpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdEFzc2VydEJsb2NrKEFzc2VydEJsb2NrIG5vZGUpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdEVtcHR5U3RhdGVtZW50KEVtcHR5U3RhdGVtZW50IG5vZGUpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdEFzc2VydFN0YXRlbWVudChBc3NlcnRTdGF0ZW1lbnQgbm9kZSkgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlKTsKICBSIHZpc2l0TGFiZWxlZFN0YXRlbWVudChMYWJlbGVkU3RhdGVtZW50IG5vZGUpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdEJyZWFrU3RhdGVtZW50KEJyZWFrU3RhdGVtZW50IG5vZGUpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdFdoaWxlU3RhdGVtZW50KFdoaWxlU3RhdGVtZW50IG5vZGUpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdERvU3RhdGVtZW50KERvU3RhdGVtZW50IG5vZGUpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdEZvclN0YXRlbWVudChGb3JTdGF0ZW1lbnQgbm9kZSkgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlKTsKICBSIHZpc2l0Rm9ySW5TdGF0ZW1lbnQoRm9ySW5TdGF0ZW1lbnQgbm9kZSkgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlKTsKICBSIHZpc2l0U3dpdGNoU3RhdGVtZW50KFN3aXRjaFN0YXRlbWVudCBub2RlKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUpOwogIFIgdmlzaXRDb250aW51ZVN3aXRjaFN0YXRlbWVudChDb250aW51ZVN3aXRjaFN0YXRlbWVudCBub2RlKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUpOwogIFIgdmlzaXRJZlN0YXRlbWVudChJZlN0YXRlbWVudCBub2RlKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUpOwogIFIgdmlzaXRSZXR1cm5TdGF0ZW1lbnQoUmV0dXJuU3RhdGVtZW50IG5vZGUpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdFRyeUNhdGNoKFRyeUNhdGNoIG5vZGUpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CiAgUiB2aXNpdFRyeUZpbmFsbHkoVHJ5RmluYWxseSBub2RlKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUpOwogIFIgdmlzaXRZaWVsZFN0YXRlbWVudChZaWVsZFN0YXRlbWVudCBub2RlKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUpOwogIFIgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgPT4KICAgICAgZGVmYXVsdFN0YXRlbWVudChub2RlKTsKICBSIHZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uIG5vZGUpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSk7CgogIC8vIE1lbWJlcnMKICBSIGRlZmF1bHRNZW1iZXIoTWVtYmVyIG5vZGUpID0+IGRlZmF1bHRUcmVlTm9kZShub2RlKTsKICBSIHZpc2l0Q29uc3RydWN0b3IoQ29uc3RydWN0b3Igbm9kZSkgPT4gZGVmYXVsdE1lbWJlcihub2RlKTsKICBSIHZpc2l0UHJvY2VkdXJlKFByb2NlZHVyZSBub2RlKSA9PiBkZWZhdWx0TWVtYmVyKG5vZGUpOwogIFIgdmlzaXRGaWVsZChGaWVsZCBub2RlKSA9PiBkZWZhdWx0TWVtYmVyKG5vZGUpOwogIFIgdmlzaXRSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcihSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvciBub2RlKSB7CiAgICByZXR1cm4gZGVmYXVsdE1lbWJlcihub2RlKTsKICB9CgogIC8vIENsYXNzZXMKICBSIHZpc2l0Q2xhc3MoQ2xhc3Mgbm9kZSkgPT4gZGVmYXVsdFRyZWVOb2RlKG5vZGUpOwogIFIgdmlzaXRFeHRlbnNpb24oRXh0ZW5zaW9uIG5vZGUpID0+IGRlZmF1bHRUcmVlTm9kZShub2RlKTsKCiAgLy8gSW5pdGlhbGl6ZXJzCiAgUiBkZWZhdWx0SW5pdGlhbGl6ZXIoSW5pdGlhbGl6ZXIgbm9kZSkgPT4gZGVmYXVsdFRyZWVOb2RlKG5vZGUpOwogIFIgdmlzaXRJbnZhbGlkSW5pdGlhbGl6ZXIoSW52YWxpZEluaXRpYWxpemVyIG5vZGUpID0+CiAgICAgIGRlZmF1bHRJbml0aWFsaXplcihub2RlKTsKICBSIHZpc2l0RmllbGRJbml0aWFsaXplcihGaWVsZEluaXRpYWxpemVyIG5vZGUpID0+IGRlZmF1bHRJbml0aWFsaXplcihub2RlKTsKICBSIHZpc2l0U3VwZXJJbml0aWFsaXplcihTdXBlckluaXRpYWxpemVyIG5vZGUpID0+IGRlZmF1bHRJbml0aWFsaXplcihub2RlKTsKICBSIHZpc2l0UmVkaXJlY3RpbmdJbml0aWFsaXplcihSZWRpcmVjdGluZ0luaXRpYWxpemVyIG5vZGUpID0+CiAgICAgIGRlZmF1bHRJbml0aWFsaXplcihub2RlKTsKICBSIHZpc2l0TG9jYWxJbml0aWFsaXplcihMb2NhbEluaXRpYWxpemVyIG5vZGUpID0+IGRlZmF1bHRJbml0aWFsaXplcihub2RlKTsKICBSIHZpc2l0QXNzZXJ0SW5pdGlhbGl6ZXIoQXNzZXJ0SW5pdGlhbGl6ZXIgbm9kZSkgPT4gZGVmYXVsdEluaXRpYWxpemVyKG5vZGUpOwoKICAvLyBPdGhlciB0cmVlIG5vZGVzCiAgUiB2aXNpdExpYnJhcnkoTGlicmFyeSBub2RlKSA9PiBkZWZhdWx0VHJlZU5vZGUobm9kZSk7CiAgUiB2aXNpdExpYnJhcnlEZXBlbmRlbmN5KExpYnJhcnlEZXBlbmRlbmN5IG5vZGUpID0+IGRlZmF1bHRUcmVlTm9kZShub2RlKTsKICBSIHZpc2l0Q29tYmluYXRvcihDb21iaW5hdG9yIG5vZGUpID0+IGRlZmF1bHRUcmVlTm9kZShub2RlKTsKICBSIHZpc2l0TGlicmFyeVBhcnQoTGlicmFyeVBhcnQgbm9kZSkgPT4gZGVmYXVsdFRyZWVOb2RlKG5vZGUpOwogIFIgdmlzaXRUeXBlZGVmKFR5cGVkZWYgbm9kZSkgPT4gZGVmYXVsdFRyZWVOb2RlKG5vZGUpOwogIFIgdmlzaXRUeXBlUGFyYW1ldGVyKFR5cGVQYXJhbWV0ZXIgbm9kZSkgPT4gZGVmYXVsdFRyZWVOb2RlKG5vZGUpOwogIFIgdmlzaXRGdW5jdGlvbk5vZGUoRnVuY3Rpb25Ob2RlIG5vZGUpID0+IGRlZmF1bHRUcmVlTm9kZShub2RlKTsKICBSIHZpc2l0QXJndW1lbnRzKEFyZ3VtZW50cyBub2RlKSA9PiBkZWZhdWx0VHJlZU5vZGUobm9kZSk7CiAgUiB2aXNpdE5hbWVkRXhwcmVzc2lvbihOYW1lZEV4cHJlc3Npb24gbm9kZSkgPT4gZGVmYXVsdFRyZWVOb2RlKG5vZGUpOwogIFIgdmlzaXRTd2l0Y2hDYXNlKFN3aXRjaENhc2Ugbm9kZSkgPT4gZGVmYXVsdFRyZWVOb2RlKG5vZGUpOwogIFIgdmlzaXRDYXRjaChDYXRjaCBub2RlKSA9PiBkZWZhdWx0VHJlZU5vZGUobm9kZSk7CiAgUiB2aXNpdE1hcEVudHJ5KE1hcEVudHJ5IG5vZGUpID0+IGRlZmF1bHRUcmVlTm9kZShub2RlKTsKICBSIHZpc2l0Q29tcG9uZW50KENvbXBvbmVudCBub2RlKSA9PiBkZWZhdWx0VHJlZU5vZGUobm9kZSk7Cn0KCmNsYXNzIERhcnRUeXBlVmlzaXRvcjxSPiB7CiAgY29uc3QgRGFydFR5cGVWaXNpdG9yKCk7CgogIFIgZGVmYXVsdERhcnRUeXBlKERhcnRUeXBlIG5vZGUpID0+IG51bGw7CgogIFIgdmlzaXRJbnZhbGlkVHlwZShJbnZhbGlkVHlwZSBub2RlKSA9PiBkZWZhdWx0RGFydFR5cGUobm9kZSk7CiAgUiB2aXNpdER5bmFtaWNUeXBlKER5bmFtaWNUeXBlIG5vZGUpID0+IGRlZmF1bHREYXJ0VHlwZShub2RlKTsKICBSIHZpc2l0Vm9pZFR5cGUoVm9pZFR5cGUgbm9kZSkgPT4gZGVmYXVsdERhcnRUeXBlKG5vZGUpOwogIFIgdmlzaXRCb3R0b21UeXBlKEJvdHRvbVR5cGUgbm9kZSkgPT4gZGVmYXVsdERhcnRUeXBlKG5vZGUpOwogIFIgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgbm9kZSkgPT4gZGVmYXVsdERhcnRUeXBlKG5vZGUpOwogIFIgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIG5vZGUpID0+IGRlZmF1bHREYXJ0VHlwZShub2RlKTsKICBSIHZpc2l0VHlwZVBhcmFtZXRlclR5cGUoVHlwZVBhcmFtZXRlclR5cGUgbm9kZSkgPT4gZGVmYXVsdERhcnRUeXBlKG5vZGUpOwogIFIgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSBub2RlKSA9PiBkZWZhdWx0RGFydFR5cGUobm9kZSk7Cn0KCmNsYXNzIERhcnRUeXBlVmlzaXRvcjE8UiwgVD4gewogIFIgZGVmYXVsdERhcnRUeXBlKERhcnRUeXBlIG5vZGUsIFQgYXJnKSA9PiBudWxsOwoKICBSIHZpc2l0SW52YWxpZFR5cGUoSW52YWxpZFR5cGUgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHREYXJ0VHlwZShub2RlLCBhcmcpOwogIFIgdmlzaXREeW5hbWljVHlwZShEeW5hbWljVHlwZSBub2RlLCBUIGFyZykgPT4gZGVmYXVsdERhcnRUeXBlKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFZvaWRUeXBlKFZvaWRUeXBlIG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0RGFydFR5cGUobm9kZSwgYXJnKTsKICBSIHZpc2l0Qm90dG9tVHlwZShCb3R0b21UeXBlIG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0RGFydFR5cGUobm9kZSwgYXJnKTsKICBSIHZpc2l0SW50ZXJmYWNlVHlwZShJbnRlcmZhY2VUeXBlIG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0RGFydFR5cGUobm9kZSwgYXJnKTsKICBSIHZpc2l0RnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSBub2RlLCBUIGFyZykgPT4gZGVmYXVsdERhcnRUeXBlKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFR5cGVQYXJhbWV0ZXJUeXBlKFR5cGVQYXJhbWV0ZXJUeXBlIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0RGFydFR5cGUobm9kZSwgYXJnKTsKICBSIHZpc2l0VHlwZWRlZlR5cGUoVHlwZWRlZlR5cGUgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHREYXJ0VHlwZShub2RlLCBhcmcpOwp9CgovLy8gVmlzaXRvciBmb3IgW0NvbnN0YW50XSBub2Rlcy4KLy8vCi8vLyBOb3RlOiBDb25zdGFudCBub2RlcyBhcmUgX25vdF8gdHJlZXMgYnV0IGRpcmVjdGVkIGFjeWNsaWMgZ3JhcGhzLiBUaGlzCi8vLyBtZWFucyB0aGF0IHZpc2l0aW5nIGEgY29uc3RhbnQgbm9kZSB3aXRob3V0IHRyYWNraW5nIHdoaWNoIHN1Ym5vZGVzIHRoYXQKLy8vIGhhdmUgYWxyZWFkeSBiZWVuIHZpc2l0ZWQgbWlnaHQgbGVhZCB0byBleHBvbmVudGlhbCBydW5uaW5nIHRpbWVzLgovLy8KLy8vIFVzZSBbQ29tcHV0ZU9uY2VDb25zdGFudFZpc2l0b3JdIG9yIFtWaXNpdE9uY2VDb25zdGFudFZpc2l0b3JdIHRvIHZpc2l0Ci8vLyBhIGNvbnN0YW50IG5vZGUgd2hpbGUgZW5zdXJpbmcgZWFjaCBzdWJub2RlIGlzIG9ubHkgdmlzaXRlZCBvbmNlLgpjbGFzcyBDb25zdGFudFZpc2l0b3I8Uj4gewogIGNvbnN0IENvbnN0YW50VmlzaXRvcigpOwoKICBSIGRlZmF1bHRDb25zdGFudChDb25zdGFudCBub2RlKSA9PiBudWxsOwoKICBSIHZpc2l0TnVsbENvbnN0YW50KE51bGxDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdEJvb2xDb25zdGFudChCb29sQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRJbnRDb25zdGFudChJbnRDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdERvdWJsZUNvbnN0YW50KERvdWJsZUNvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0U3RyaW5nQ29uc3RhbnQoU3RyaW5nQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRTeW1ib2xDb25zdGFudChTeW1ib2xDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdE1hcENvbnN0YW50KE1hcENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0TGlzdENvbnN0YW50KExpc3RDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdFNldENvbnN0YW50KFNldENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0SW5zdGFuY2VDb25zdGFudChJbnN0YW5jZUNvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0UGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudChQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50IG5vZGUpID0+CiAgICAgIGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0VGVhck9mZkNvbnN0YW50KFRlYXJPZmZDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdFR5cGVMaXRlcmFsQ29uc3RhbnQoVHlwZUxpdGVyYWxDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdFVuZXZhbHVhdGVkQ29uc3RhbnQoVW5ldmFsdWF0ZWRDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7Cn0KCmFic3RyYWN0IGNsYXNzIF9Db25zdGFudENhbGxiYWNrPFI+IHsKICBSIGRlZmF1bHRDb25zdGFudChDb25zdGFudCBub2RlKTsKCiAgUiB2aXNpdE51bGxDb25zdGFudChOdWxsQ29uc3RhbnQgbm9kZSk7CiAgUiB2aXNpdEJvb2xDb25zdGFudChCb29sQ29uc3RhbnQgbm9kZSk7CiAgUiB2aXNpdEludENvbnN0YW50KEludENvbnN0YW50IG5vZGUpOwogIFIgdmlzaXREb3VibGVDb25zdGFudChEb3VibGVDb25zdGFudCBub2RlKTsKICBSIHZpc2l0U3RyaW5nQ29uc3RhbnQoU3RyaW5nQ29uc3RhbnQgbm9kZSk7CiAgUiB2aXNpdFN5bWJvbENvbnN0YW50KFN5bWJvbENvbnN0YW50IG5vZGUpOwogIFIgdmlzaXRNYXBDb25zdGFudChNYXBDb25zdGFudCBub2RlKTsKICBSIHZpc2l0TGlzdENvbnN0YW50KExpc3RDb25zdGFudCBub2RlKTsKICBSIHZpc2l0U2V0Q29uc3RhbnQoU2V0Q29uc3RhbnQgbm9kZSk7CiAgUiB2aXNpdEluc3RhbmNlQ29uc3RhbnQoSW5zdGFuY2VDb25zdGFudCBub2RlKTsKICBSIHZpc2l0UGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudChQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50IG5vZGUpOwogIFIgdmlzaXRUZWFyT2ZmQ29uc3RhbnQoVGVhck9mZkNvbnN0YW50IG5vZGUpOwogIFIgdmlzaXRUeXBlTGl0ZXJhbENvbnN0YW50KFR5cGVMaXRlcmFsQ29uc3RhbnQgbm9kZSk7CiAgUiB2aXNpdFVuZXZhbHVhdGVkQ29uc3RhbnQoVW5ldmFsdWF0ZWRDb25zdGFudCBub2RlKTsKfQoKY2xhc3MgX0NvbnN0YW50Q2FsbGJhY2tWaXNpdG9yPFI+IGltcGxlbWVudHMgQ29uc3RhbnRWaXNpdG9yPFI+IHsKICBmaW5hbCBfQ29uc3RhbnRDYWxsYmFjayBfY2FsbGJhY2s7CgogIF9Db25zdGFudENhbGxiYWNrVmlzaXRvcih0aGlzLl9jYWxsYmFjayk7CgogIEBvdmVycmlkZQogIFIgdmlzaXRVbmV2YWx1YXRlZENvbnN0YW50KFVuZXZhbHVhdGVkQ29uc3RhbnQgbm9kZSkgPT4KICAgICAgX2NhbGxiYWNrLnZpc2l0VW5ldmFsdWF0ZWRDb25zdGFudChub2RlKTsKCiAgQG92ZXJyaWRlCiAgUiB2aXNpdFR5cGVMaXRlcmFsQ29uc3RhbnQoVHlwZUxpdGVyYWxDb25zdGFudCBub2RlKSA9PgogICAgICBfY2FsbGJhY2sudmlzaXRUeXBlTGl0ZXJhbENvbnN0YW50KG5vZGUpOwoKICBAb3ZlcnJpZGUKICBSIHZpc2l0VGVhck9mZkNvbnN0YW50KFRlYXJPZmZDb25zdGFudCBub2RlKSA9PgogICAgICBfY2FsbGJhY2sudmlzaXRUZWFyT2ZmQ29uc3RhbnQobm9kZSk7CgogIEBvdmVycmlkZQogIFIgdmlzaXRQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50KFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQgbm9kZSkgPT4KICAgICAgX2NhbGxiYWNrLnZpc2l0UGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudChub2RlKTsKCiAgQG92ZXJyaWRlCiAgUiB2aXNpdEluc3RhbmNlQ29uc3RhbnQoSW5zdGFuY2VDb25zdGFudCBub2RlKSA9PgogICAgICBfY2FsbGJhY2sudmlzaXRJbnN0YW5jZUNvbnN0YW50KG5vZGUpOwoKICBAb3ZlcnJpZGUKICBSIHZpc2l0U2V0Q29uc3RhbnQoU2V0Q29uc3RhbnQgbm9kZSkgPT4gX2NhbGxiYWNrLnZpc2l0U2V0Q29uc3RhbnQobm9kZSk7CgogIEBvdmVycmlkZQogIFIgdmlzaXRMaXN0Q29uc3RhbnQoTGlzdENvbnN0YW50IG5vZGUpID0+IF9jYWxsYmFjay52aXNpdExpc3RDb25zdGFudChub2RlKTsKCiAgQG92ZXJyaWRlCiAgUiB2aXNpdE1hcENvbnN0YW50KE1hcENvbnN0YW50IG5vZGUpID0+IF9jYWxsYmFjay52aXNpdE1hcENvbnN0YW50KG5vZGUpOwoKICBAb3ZlcnJpZGUKICBSIHZpc2l0U3ltYm9sQ29uc3RhbnQoU3ltYm9sQ29uc3RhbnQgbm9kZSkgPT4KICAgICAgX2NhbGxiYWNrLnZpc2l0U3ltYm9sQ29uc3RhbnQobm9kZSk7CgogIEBvdmVycmlkZQogIFIgdmlzaXRTdHJpbmdDb25zdGFudChTdHJpbmdDb25zdGFudCBub2RlKSA9PgogICAgICBfY2FsbGJhY2sudmlzaXRTdHJpbmdDb25zdGFudChub2RlKTsKCiAgQG92ZXJyaWRlCiAgUiB2aXNpdERvdWJsZUNvbnN0YW50KERvdWJsZUNvbnN0YW50IG5vZGUpID0+CiAgICAgIF9jYWxsYmFjay52aXNpdERvdWJsZUNvbnN0YW50KG5vZGUpOwoKICBAb3ZlcnJpZGUKICBSIHZpc2l0SW50Q29uc3RhbnQoSW50Q29uc3RhbnQgbm9kZSkgPT4gX2NhbGxiYWNrLnZpc2l0SW50Q29uc3RhbnQobm9kZSk7CgogIEBvdmVycmlkZQogIFIgdmlzaXRCb29sQ29uc3RhbnQoQm9vbENvbnN0YW50IG5vZGUpID0+IF9jYWxsYmFjay52aXNpdEJvb2xDb25zdGFudChub2RlKTsKCiAgQG92ZXJyaWRlCiAgUiB2aXNpdE51bGxDb25zdGFudChOdWxsQ29uc3RhbnQgbm9kZSkgPT4gX2NhbGxiYWNrLnZpc2l0TnVsbENvbnN0YW50KG5vZGUpOwoKICBAb3ZlcnJpZGUKICBSIGRlZmF1bHRDb25zdGFudChDb25zdGFudCBub2RlKSA9PiBfY2FsbGJhY2suZGVmYXVsdENvbnN0YW50KG5vZGUpOwp9CgovLy8gVmlzaXRvci1saWtlIGNsYXNzIHVzZWQgZm9yIHZpc2l0aW5nIGEgW0NvbnN0YW50XSBub2RlIHdoaWxlIGNvbXB1dGluZyBhCi8vLyB2YWx1ZSBmb3IgZWFjaCBzdWJub2RlLiBUaGUgdmlzaXRvciBjYWNoZXMgdGhlIGNvbXB1dGVkIHZhbHVlcyBlbnN1cmluZyB0aGF0Ci8vLyBlYWNoIHN1Ym5vZGUgaXMgb25seSB2aXNpdGVkIG9uY2UuCmNsYXNzIENvbXB1dGVPbmNlQ29uc3RhbnRWaXNpdG9yPFI+IGltcGxlbWVudHMgX0NvbnN0YW50Q2FsbGJhY2s8Uj4gewogIF9Db25zdGFudENhbGxiYWNrVmlzaXRvciBfdmlzaXRvcjsKICBNYXA8Q29uc3RhbnQsIFI+IGNhY2hlID0gbmV3IExpbmtlZEhhc2hNYXAuaWRlbnRpdHkoKTsKCiAgQ29tcHV0ZU9uY2VDb25zdGFudFZpc2l0b3IoKSB7CiAgICBfdmlzaXRvciA9IG5ldyBfQ29uc3RhbnRDYWxsYmFja1Zpc2l0b3I8Uj4odGhpcyk7CiAgfQoKICAvLy8gVmlzaXRzIFtub2RlXSBpZiBub3QgYWxyZWFkeSB2aXNpdGVkIHRvIGNvbXB1dGUgYSB2YWx1ZSBmb3IgW25vZGVdLgogIC8vLwogIC8vLyBJZiB0aGUgdmFsdWUgaGFzIGFscmVhZHkgYmVlbiBjb21wdXRlZCB0aGUgY2FjaGVkIHZhbHVlIGlzIHJldHVybmVkIGltbWVkaWF0ZWx5LgogIC8vLwogIC8vLyBDYWxsIHRoaXMgbWV0aG9kIHRvIGNvbXB1dGUgdmFsdWVzIGZvciBzdWJub2RlcyByZWN1cnNpdmVseSwgd2hpbGUgb25seQogIC8vLyB2aXNpdGluZyBlYWNoIHN1Ym5vZGUgb25jZS4KICBSIHZpc2l0Q29uc3RhbnQoQ29uc3RhbnQgbm9kZSkgewogICAgcmV0dXJuIGNhY2hlW25vZGVdID8/PSBub2RlLmFjY2VwdChfdmlzaXRvcik7CiAgfQoKICBSIGRlZmF1bHRDb25zdGFudChDb25zdGFudCBub2RlKSA9PiBudWxsOwoKICBSIHZpc2l0TnVsbENvbnN0YW50KE51bGxDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdEJvb2xDb25zdGFudChCb29sQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRJbnRDb25zdGFudChJbnRDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdERvdWJsZUNvbnN0YW50KERvdWJsZUNvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0U3RyaW5nQ29uc3RhbnQoU3RyaW5nQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRTeW1ib2xDb25zdGFudChTeW1ib2xDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdE1hcENvbnN0YW50KE1hcENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0TGlzdENvbnN0YW50KExpc3RDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdFNldENvbnN0YW50KFNldENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0SW5zdGFuY2VDb25zdGFudChJbnN0YW5jZUNvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0UGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudChQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50IG5vZGUpID0+CiAgICAgIGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0VGVhck9mZkNvbnN0YW50KFRlYXJPZmZDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdFR5cGVMaXRlcmFsQ29uc3RhbnQoVHlwZUxpdGVyYWxDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdFVuZXZhbHVhdGVkQ29uc3RhbnQoVW5ldmFsdWF0ZWRDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7Cn0KCi8vLyBWaXNpdG9yLWxpa2UgY2xhc3MgdXNlZCBmb3IgdmlzaXRpbmcgZWFjaCBzdWJub2RlIG9mIGEgW0NvbnN0YW50XSBub2RlIG9uY2UuCi8vLwovLy8gVGhlIHZpc2l0b3IgcmVjb3JkcyB0aGUgdmlzaXRlZCBub2RlIHRvIGVuc3VyZSB0aGF0IGVhY2ggc3Vibm9kZSBpcyBvbmx5Ci8vLyB2aXNpdGVkIG9uY2UuCmNsYXNzIFZpc2l0T25jZUNvbnN0YW50VmlzaXRvciBpbXBsZW1lbnRzIF9Db25zdGFudENhbGxiYWNrPHZvaWQ+IHsKICBfQ29uc3RhbnRDYWxsYmFja1Zpc2l0b3I8dm9pZD4gX3Zpc2l0b3I7CiAgU2V0PENvbnN0YW50PiBjYWNoZSA9IG5ldyBMaW5rZWRIYXNoU2V0LmlkZW50aXR5KCk7CgogIFZpc2l0T25jZUNvbnN0YW50VmlzaXRvcigpIHsKICAgIF92aXNpdG9yID0gbmV3IF9Db25zdGFudENhbGxiYWNrVmlzaXRvcjx2b2lkPih0aGlzKTsKICB9CgogIC8vLyBWaXNpdHMgW25vZGVdIGlmIG5vdCBhbHJlYWR5IHZpc2l0ZWQuCiAgLy8vCiAgLy8vIENhbGwgdGhpcyBtZXRob2QgdG8gdmlzaXQgc3Vibm9kZXMgcmVjdXJzaXZlbHksIHdoaWxlIG9ubHkgdmlzaXRpbmcgZWFjaAogIC8vLyBzdWJub2RlIG9uY2UuCiAgdm9pZCB2aXNpdENvbnN0YW50KENvbnN0YW50IG5vZGUpIHsKICAgIGlmIChjYWNoZS5hZGQobm9kZSkpIHsKICAgICAgbm9kZS5hY2NlcHQoX3Zpc2l0b3IpOwogICAgfQogIH0KCiAgdm9pZCBkZWZhdWx0Q29uc3RhbnQoQ29uc3RhbnQgbm9kZSkgPT4gbnVsbDsKCiAgdm9pZCB2aXNpdE51bGxDb25zdGFudChOdWxsQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIHZvaWQgdmlzaXRCb29sQ29uc3RhbnQoQm9vbENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICB2b2lkIHZpc2l0SW50Q29uc3RhbnQoSW50Q29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIHZvaWQgdmlzaXREb3VibGVDb25zdGFudChEb3VibGVDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgdm9pZCB2aXNpdFN0cmluZ0NvbnN0YW50KFN0cmluZ0NvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICB2b2lkIHZpc2l0U3ltYm9sQ29uc3RhbnQoU3ltYm9sQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIHZvaWQgdmlzaXRNYXBDb25zdGFudChNYXBDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgdm9pZCB2aXNpdExpc3RDb25zdGFudChMaXN0Q29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIHZvaWQgdmlzaXRTZXRDb25zdGFudChTZXRDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgdm9pZCB2aXNpdEluc3RhbmNlQ29uc3RhbnQoSW5zdGFuY2VDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgdm9pZCB2aXNpdFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQoUGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCBub2RlKSA9PgogICAgICBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgdm9pZCB2aXNpdFRlYXJPZmZDb25zdGFudChUZWFyT2ZmQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIHZvaWQgdmlzaXRUeXBlTGl0ZXJhbENvbnN0YW50KFR5cGVMaXRlcmFsQ29uc3RhbnQgbm9kZSkgPT4KICAgICAgZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIHZvaWQgdmlzaXRVbmV2YWx1YXRlZENvbnN0YW50KFVuZXZhbHVhdGVkQ29uc3RhbnQgbm9kZSkgPT4KICAgICAgZGVmYXVsdENvbnN0YW50KG5vZGUpOwp9CgpjbGFzcyBNZW1iZXJSZWZlcmVuY2VWaXNpdG9yPFI+IHsKICBjb25zdCBNZW1iZXJSZWZlcmVuY2VWaXNpdG9yKCk7CgogIFIgZGVmYXVsdE1lbWJlclJlZmVyZW5jZShNZW1iZXIgbm9kZSkgPT4gbnVsbDsKCiAgUiB2aXNpdEZpZWxkUmVmZXJlbmNlKEZpZWxkIG5vZGUpID0+IGRlZmF1bHRNZW1iZXJSZWZlcmVuY2Uobm9kZSk7CiAgUiB2aXNpdENvbnN0cnVjdG9yUmVmZXJlbmNlKENvbnN0cnVjdG9yIG5vZGUpID0+IGRlZmF1bHRNZW1iZXJSZWZlcmVuY2Uobm9kZSk7CiAgUiB2aXNpdFByb2NlZHVyZVJlZmVyZW5jZShQcm9jZWR1cmUgbm9kZSkgPT4gZGVmYXVsdE1lbWJlclJlZmVyZW5jZShub2RlKTsKICBSIHZpc2l0UmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JSZWZlcmVuY2UoCiAgICAgIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yIG5vZGUpIHsKICAgIHJldHVybiBkZWZhdWx0TWVtYmVyUmVmZXJlbmNlKG5vZGUpOwogIH0KfQoKY2xhc3MgVmlzaXRvcjxSPiBleHRlbmRzIFRyZWVWaXNpdG9yPFI+CiAgICBpbXBsZW1lbnRzCiAgICAgICAgRGFydFR5cGVWaXNpdG9yPFI+LAogICAgICAgIENvbnN0YW50VmlzaXRvcjxSPiwKICAgICAgICBNZW1iZXJSZWZlcmVuY2VWaXNpdG9yPFI+IHsKICBjb25zdCBWaXNpdG9yKCk7CgogIC8vLyBUaGUgY2F0Y2gtYWxsIGNhc2UsIGV4Y2VwdCBmb3IgcmVmZXJlbmNlcy4KICBSIGRlZmF1bHROb2RlKE5vZGUgbm9kZSkgPT4gbnVsbDsKICBSIGRlZmF1bHRUcmVlTm9kZShUcmVlTm9kZSBub2RlKSA9PiBkZWZhdWx0Tm9kZShub2RlKTsKCiAgLy8gRGFydFR5cGVzCiAgUiBkZWZhdWx0RGFydFR5cGUoRGFydFR5cGUgbm9kZSkgPT4gZGVmYXVsdE5vZGUobm9kZSk7CiAgUiB2aXNpdEludmFsaWRUeXBlKEludmFsaWRUeXBlIG5vZGUpID0+IGRlZmF1bHREYXJ0VHlwZShub2RlKTsKICBSIHZpc2l0RHluYW1pY1R5cGUoRHluYW1pY1R5cGUgbm9kZSkgPT4gZGVmYXVsdERhcnRUeXBlKG5vZGUpOwogIFIgdmlzaXRWb2lkVHlwZShWb2lkVHlwZSBub2RlKSA9PiBkZWZhdWx0RGFydFR5cGUobm9kZSk7CiAgUiB2aXNpdEJvdHRvbVR5cGUoQm90dG9tVHlwZSBub2RlKSA9PiBkZWZhdWx0RGFydFR5cGUobm9kZSk7CiAgUiB2aXNpdEludGVyZmFjZVR5cGUoSW50ZXJmYWNlVHlwZSBub2RlKSA9PiBkZWZhdWx0RGFydFR5cGUobm9kZSk7CiAgUiB2aXNpdEZ1bmN0aW9uVHlwZShGdW5jdGlvblR5cGUgbm9kZSkgPT4gZGVmYXVsdERhcnRUeXBlKG5vZGUpOwogIFIgdmlzaXRUeXBlUGFyYW1ldGVyVHlwZShUeXBlUGFyYW1ldGVyVHlwZSBub2RlKSA9PiBkZWZhdWx0RGFydFR5cGUobm9kZSk7CiAgUiB2aXNpdFR5cGVkZWZUeXBlKFR5cGVkZWZUeXBlIG5vZGUpID0+IGRlZmF1bHREYXJ0VHlwZShub2RlKTsKCiAgLy8gQ29uc3RhbnRzCiAgUiBkZWZhdWx0Q29uc3RhbnQoQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdE5vZGUobm9kZSk7CiAgUiB2aXNpdE51bGxDb25zdGFudChOdWxsQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRCb29sQ29uc3RhbnQoQm9vbENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0SW50Q29uc3RhbnQoSW50Q29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXREb3VibGVDb25zdGFudChEb3VibGVDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdFN0cmluZ0NvbnN0YW50KFN0cmluZ0NvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0U3ltYm9sQ29uc3RhbnQoU3ltYm9sQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRNYXBDb25zdGFudChNYXBDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdExpc3RDb25zdGFudChMaXN0Q29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRTZXRDb25zdGFudChTZXRDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdEluc3RhbmNlQ29uc3RhbnQoSW5zdGFuY2VDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQoUGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCBub2RlKSA9PgogICAgICBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdFRlYXJPZmZDb25zdGFudChUZWFyT2ZmQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRUeXBlTGl0ZXJhbENvbnN0YW50KFR5cGVMaXRlcmFsQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRVbmV2YWx1YXRlZENvbnN0YW50KFVuZXZhbHVhdGVkQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwoKICAvLyBDbGFzcyByZWZlcmVuY2VzCiAgUiB2aXNpdENsYXNzUmVmZXJlbmNlKENsYXNzIG5vZGUpID0+IG51bGw7CiAgUiB2aXNpdFR5cGVkZWZSZWZlcmVuY2UoVHlwZWRlZiBub2RlKSA9PiBudWxsOwoKICAvLyBDb25zdGFudCByZWZlcmVuY2VzCiAgUiBkZWZhdWx0Q29uc3RhbnRSZWZlcmVuY2UoQ29uc3RhbnQgbm9kZSkgPT4gbnVsbDsKICBSIHZpc2l0TnVsbENvbnN0YW50UmVmZXJlbmNlKE51bGxDb25zdGFudCBub2RlKSA9PgogICAgICBkZWZhdWx0Q29uc3RhbnRSZWZlcmVuY2Uobm9kZSk7CiAgUiB2aXNpdEJvb2xDb25zdGFudFJlZmVyZW5jZShCb29sQ29uc3RhbnQgbm9kZSkgPT4KICAgICAgZGVmYXVsdENvbnN0YW50UmVmZXJlbmNlKG5vZGUpOwogIFIgdmlzaXRJbnRDb25zdGFudFJlZmVyZW5jZShJbnRDb25zdGFudCBub2RlKSA9PgogICAgICBkZWZhdWx0Q29uc3RhbnRSZWZlcmVuY2Uobm9kZSk7CiAgUiB2aXNpdERvdWJsZUNvbnN0YW50UmVmZXJlbmNlKERvdWJsZUNvbnN0YW50IG5vZGUpID0+CiAgICAgIGRlZmF1bHRDb25zdGFudFJlZmVyZW5jZShub2RlKTsKICBSIHZpc2l0U3RyaW5nQ29uc3RhbnRSZWZlcmVuY2UoU3RyaW5nQ29uc3RhbnQgbm9kZSkgPT4KICAgICAgZGVmYXVsdENvbnN0YW50UmVmZXJlbmNlKG5vZGUpOwogIFIgdmlzaXRTeW1ib2xDb25zdGFudFJlZmVyZW5jZShTeW1ib2xDb25zdGFudCBub2RlKSA9PgogICAgICBkZWZhdWx0Q29uc3RhbnRSZWZlcmVuY2Uobm9kZSk7CiAgUiB2aXNpdE1hcENvbnN0YW50UmVmZXJlbmNlKE1hcENvbnN0YW50IG5vZGUpID0+CiAgICAgIGRlZmF1bHRDb25zdGFudFJlZmVyZW5jZShub2RlKTsKICBSIHZpc2l0TGlzdENvbnN0YW50UmVmZXJlbmNlKExpc3RDb25zdGFudCBub2RlKSA9PgogICAgICBkZWZhdWx0Q29uc3RhbnRSZWZlcmVuY2Uobm9kZSk7CiAgUiB2aXNpdFNldENvbnN0YW50UmVmZXJlbmNlKFNldENvbnN0YW50IG5vZGUpID0+CiAgICAgIGRlZmF1bHRDb25zdGFudFJlZmVyZW5jZShub2RlKTsKICBSIHZpc2l0SW5zdGFuY2VDb25zdGFudFJlZmVyZW5jZShJbnN0YW5jZUNvbnN0YW50IG5vZGUpID0+CiAgICAgIGRlZmF1bHRDb25zdGFudFJlZmVyZW5jZShub2RlKTsKICBSIHZpc2l0UGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudFJlZmVyZW5jZSgKICAgICAgICAgIFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQgbm9kZSkgPT4KICAgICAgZGVmYXVsdENvbnN0YW50UmVmZXJlbmNlKG5vZGUpOwogIFIgdmlzaXRUZWFyT2ZmQ29uc3RhbnRSZWZlcmVuY2UoVGVhck9mZkNvbnN0YW50IG5vZGUpID0+CiAgICAgIGRlZmF1bHRDb25zdGFudFJlZmVyZW5jZShub2RlKTsKICBSIHZpc2l0VHlwZUxpdGVyYWxDb25zdGFudFJlZmVyZW5jZShUeXBlTGl0ZXJhbENvbnN0YW50IG5vZGUpID0+CiAgICAgIGRlZmF1bHRDb25zdGFudFJlZmVyZW5jZShub2RlKTsKICBSIHZpc2l0VW5ldmFsdWF0ZWRDb25zdGFudFJlZmVyZW5jZShVbmV2YWx1YXRlZENvbnN0YW50IG5vZGUpID0+CiAgICAgIGRlZmF1bHRDb25zdGFudFJlZmVyZW5jZShub2RlKTsKCiAgLy8gTWVtYmVyIHJlZmVyZW5jZXMKICBSIGRlZmF1bHRNZW1iZXJSZWZlcmVuY2UoTWVtYmVyIG5vZGUpID0+IG51bGw7CiAgUiB2aXNpdEZpZWxkUmVmZXJlbmNlKEZpZWxkIG5vZGUpID0+IGRlZmF1bHRNZW1iZXJSZWZlcmVuY2Uobm9kZSk7CiAgUiB2aXNpdENvbnN0cnVjdG9yUmVmZXJlbmNlKENvbnN0cnVjdG9yIG5vZGUpID0+IGRlZmF1bHRNZW1iZXJSZWZlcmVuY2Uobm9kZSk7CiAgUiB2aXNpdFByb2NlZHVyZVJlZmVyZW5jZShQcm9jZWR1cmUgbm9kZSkgPT4gZGVmYXVsdE1lbWJlclJlZmVyZW5jZShub2RlKTsKICBSIHZpc2l0UmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JSZWZlcmVuY2UoCiAgICAgIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yIG5vZGUpIHsKICAgIHJldHVybiBkZWZhdWx0TWVtYmVyUmVmZXJlbmNlKG5vZGUpOwogIH0KCiAgUiB2aXNpdE5hbWUoTmFtZSBub2RlKSA9PiBkZWZhdWx0Tm9kZShub2RlKTsKICBSIHZpc2l0U3VwZXJ0eXBlKFN1cGVydHlwZSBub2RlKSA9PiBkZWZhdWx0Tm9kZShub2RlKTsKICBSIHZpc2l0TmFtZWRUeXBlKE5hbWVkVHlwZSBub2RlKSA9PiBkZWZhdWx0Tm9kZShub2RlKTsKfQoKY2xhc3MgUmVjdXJzaXZlVmlzaXRvcjxSPiBleHRlbmRzIFZpc2l0b3I8Uj4gewogIGNvbnN0IFJlY3Vyc2l2ZVZpc2l0b3IoKTsKCiAgUiBkZWZhdWx0Tm9kZShOb2RlIG5vZGUpIHsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICAgIHJldHVybiBudWxsOwogIH0KfQoKLy8vIFZpc2l0b3IgdGhhdCByZWN1cnNpdmVseSByZXdyaXRlcyBlYWNoIG5vZGUgaW4gdHJlZS4KLy8vCi8vLyBWaXNpdCBtZXRob2RzIHNob3VsZCByZXR1cm4gYSBuZXcgbm9kZSwgb3IgdGhlIHZpc2l0ZWQgbm9kZSAocG9zc2libHkKLy8vIG11dGF0ZWQpLCBvciBhbnkgbm9kZSBmcm9tIHRoZSB2aXNpdGVkIG5vZGUncyBzdWJ0cmVlLgovLy8KLy8vIEVhY2ggc3ViY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIEFTVCByZW1haW5zIGEgdHJlZS4KLy8vCi8vLyBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyB0cmFuc2Zvcm1lciByZXBsYWNlcyBldmVyeSBvY2N1cnJlbmNlIG9mCi8vLyBgISh4ICYmIHkpYCB3aXRoIGAoIXggfHwgIXkpYDoKLy8vCi8vLyAgICAgY2xhc3MgTmVnYXRpb25TaW5rZXIgZXh0ZW5kcyBUcmFuc2Zvcm1lciB7Ci8vLyAgICAgICBAb3ZlcnJpZGUKLy8vICAgICAgIE5vZGUgdmlzaXROb3QoTm90IG5vZGUpIHsKLy8vICAgICAgICAgdmFyIG9wZXJhbmQgPSBub2RlLm9wZXJhbmQuYWNjZXB0KHRoaXMpOyAvLyBSZW1lbWJlciB0byB2aXNpdC4KLy8vICAgICAgICAgaWYgKG9wZXJhbmQgaXMgTG9naWNhbEV4cHJlc3Npb24gJiYgb3BlcmFuZC5vcGVyYXRvciA9PSAnJiYnKSB7Ci8vLyAgICAgICAgICAgcmV0dXJuIG5ldyBMb2dpY2FsRXhwcmVzc2lvbigKLy8vICAgICAgICAgICAgIG5ldyBOb3Qob3BlcmFuZC5sZWZ0KSwKLy8vICAgICAgICAgICAgICd8fCcsCi8vLyAgICAgICAgICAgICBuZXcgTm90KG9wZXJhbmQucmlnaHQpKTsKLy8vICAgICAgICAgfQovLy8gICAgICAgICByZXR1cm4gbm9kZTsKLy8vICAgICAgIH0KLy8vICAgICB9Ci8vLwpjbGFzcyBUcmFuc2Zvcm1lciBleHRlbmRzIFRyZWVWaXNpdG9yPFRyZWVOb2RlPiB7CiAgY29uc3QgVHJhbnNmb3JtZXIoKTsKCiAgLy8vIFJlcGxhY2VzIGEgdXNlIG9mIGEgdHlwZS4KICAvLy8KICAvLy8gQnkgZGVmYXVsdCwgcmVjdXJzaW9uIHN0b3BzIGF0IHRoaXMgcG9pbnQuCiAgRGFydFR5cGUgdmlzaXREYXJ0VHlwZShEYXJ0VHlwZSBub2RlKSA9PiBub2RlOwoKICBDb25zdGFudCB2aXNpdENvbnN0YW50KENvbnN0YW50IG5vZGUpID0+IG5vZGU7CgogIFN1cGVydHlwZSB2aXNpdFN1cGVydHlwZShTdXBlcnR5cGUgbm9kZSkgPT4gbm9kZTsKCiAgVHJlZU5vZGUgZGVmYXVsdFRyZWVOb2RlKFRyZWVOb2RlIG5vZGUpIHsKICAgIG5vZGUudHJhbnNmb3JtQ2hpbGRyZW4odGhpcyk7CiAgICByZXR1cm4gbm9kZTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIEV4cHJlc3Npb25WaXNpdG9yMTxSLCBUPiB7CiAgY29uc3QgRXhwcmVzc2lvblZpc2l0b3IxKCk7CgogIFIgZGVmYXVsdEV4cHJlc3Npb24oRXhwcmVzc2lvbiBub2RlLCBUIGFyZykgPT4gbnVsbDsKICBSIGRlZmF1bHRCYXNpY0xpdGVyYWwoQmFzaWNMaXRlcmFsIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRJbnZhbGlkRXhwcmVzc2lvbihJbnZhbGlkRXhwcmVzc2lvbiBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0VmFyaWFibGVHZXQoVmFyaWFibGVHZXQgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFZhcmlhYmxlU2V0KFZhcmlhYmxlU2V0IG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRQcm9wZXJ0eUdldChQcm9wZXJ0eUdldCBub2RlLCBUIGFyZykgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0UHJvcGVydHlTZXQoUHJvcGVydHlTZXQgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdERpcmVjdFByb3BlcnR5R2V0KERpcmVjdFByb3BlcnR5R2V0IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXREaXJlY3RQcm9wZXJ0eVNldChEaXJlY3RQcm9wZXJ0eVNldCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0U3VwZXJQcm9wZXJ0eUdldChTdXBlclByb3BlcnR5R2V0IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRTdXBlclByb3BlcnR5U2V0KFN1cGVyUHJvcGVydHlTZXQgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFN0YXRpY0dldChTdGF0aWNHZXQgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFN0YXRpY1NldChTdGF0aWNTZXQgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdE1ldGhvZEludm9jYXRpb24oTWV0aG9kSW52b2NhdGlvbiBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0RGlyZWN0TWV0aG9kSW52b2NhdGlvbihEaXJlY3RNZXRob2RJbnZvY2F0aW9uIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRTdXBlck1ldGhvZEludm9jYXRpb24oU3VwZXJNZXRob2RJbnZvY2F0aW9uIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRTdGF0aWNJbnZvY2F0aW9uKFN0YXRpY0ludm9jYXRpb24gbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdENvbnN0cnVjdG9ySW52b2NhdGlvbihDb25zdHJ1Y3Rvckludm9jYXRpb24gbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdE5vdChOb3Qgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdExvZ2ljYWxFeHByZXNzaW9uKExvZ2ljYWxFeHByZXNzaW9uIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRDb25kaXRpb25hbEV4cHJlc3Npb24oQ29uZGl0aW9uYWxFeHByZXNzaW9uIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKFN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdExpc3RDb25jYXRlbmF0aW9uKExpc3RDb25jYXRlbmF0aW9uIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRTZXRDb25jYXRlbmF0aW9uKFNldENvbmNhdGVuYXRpb24gbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdE1hcENvbmNhdGVuYXRpb24oTWFwQ29uY2F0ZW5hdGlvbiBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0SW5zdGFuY2VDcmVhdGlvbihJbnN0YW5jZUNyZWF0aW9uIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRJc0V4cHJlc3Npb24oSXNFeHByZXNzaW9uIG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRBc0V4cHJlc3Npb24oQXNFeHByZXNzaW9uIG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRTeW1ib2xMaXRlcmFsKFN5bWJvbExpdGVyYWwgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFR5cGVMaXRlcmFsKFR5cGVMaXRlcmFsIG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRUaGlzRXhwcmVzc2lvbihUaGlzRXhwcmVzc2lvbiBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0Q29uc3RhbnRFeHByZXNzaW9uKENvbnN0YW50RXhwcmVzc2lvbiBub2RlLCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFJldGhyb3coUmV0aHJvdyBub2RlLCBUIGFyZykgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0VGhyb3coVGhyb3cgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdExpc3RMaXRlcmFsKExpc3RMaXRlcmFsIG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRTZXRMaXRlcmFsKFNldExpdGVyYWwgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdE1hcExpdGVyYWwoTWFwTGl0ZXJhbCBub2RlLCBUIGFyZykgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0QXdhaXRFeHByZXNzaW9uKEF3YWl0RXhwcmVzc2lvbiBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKEZ1bmN0aW9uRXhwcmVzc2lvbiBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0SW50TGl0ZXJhbChJbnRMaXRlcmFsIG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0QmFzaWNMaXRlcmFsKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFN0cmluZ0xpdGVyYWwoU3RyaW5nTGl0ZXJhbCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdEJhc2ljTGl0ZXJhbChub2RlLCBhcmcpOwogIFIgdmlzaXREb3VibGVMaXRlcmFsKERvdWJsZUxpdGVyYWwgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRCYXNpY0xpdGVyYWwobm9kZSwgYXJnKTsKICBSIHZpc2l0Qm9vbExpdGVyYWwoQm9vbExpdGVyYWwgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRCYXNpY0xpdGVyYWwobm9kZSwgYXJnKTsKICBSIHZpc2l0TnVsbExpdGVyYWwoTnVsbExpdGVyYWwgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRCYXNpY0xpdGVyYWwobm9kZSwgYXJnKTsKICBSIHZpc2l0TGV0KExldCBub2RlLCBUIGFyZykgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0QmxvY2tFeHByZXNzaW9uKEJsb2NrRXhwcmVzc2lvbiBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0SW5zdGFudGlhdGlvbihJbnN0YW50aWF0aW9uIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRMb2FkTGlicmFyeShMb2FkTGlicmFyeSBub2RlLCBUIGFyZykgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0Q2hlY2tMaWJyYXJ5SXNMb2FkZWQoQ2hlY2tMaWJyYXJ5SXNMb2FkZWQgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7Cn0KCmFic3RyYWN0IGNsYXNzIFN0YXRlbWVudFZpc2l0b3IxPFIsIFQ+IHsKICBjb25zdCBTdGF0ZW1lbnRWaXNpdG9yMSgpOwoKICBSIGRlZmF1bHRTdGF0ZW1lbnQoU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PiBudWxsOwoKICBSIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChFeHByZXNzaW9uU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdEJsb2NrKEJsb2NrIG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdEFzc2VydEJsb2NrKEFzc2VydEJsb2NrIG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdEVtcHR5U3RhdGVtZW50KEVtcHR5U3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdEFzc2VydFN0YXRlbWVudChBc3NlcnRTdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0TGFiZWxlZFN0YXRlbWVudChMYWJlbGVkU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdEJyZWFrU3RhdGVtZW50KEJyZWFrU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdFdoaWxlU3RhdGVtZW50KFdoaWxlU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdERvU3RhdGVtZW50KERvU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdEZvclN0YXRlbWVudChGb3JTdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0Rm9ySW5TdGF0ZW1lbnQoRm9ySW5TdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0U3dpdGNoU3RhdGVtZW50KFN3aXRjaFN0YXRlbWVudCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRDb250aW51ZVN3aXRjaFN0YXRlbWVudChDb250aW51ZVN3aXRjaFN0YXRlbWVudCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRJZlN0YXRlbWVudChJZlN0YXRlbWVudCBub2RlLCBUIGFyZykgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRSZXR1cm5TdGF0ZW1lbnQoUmV0dXJuU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdFRyeUNhdGNoKFRyeUNhdGNoIG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdFRyeUZpbmFsbHkoVHJ5RmluYWxseSBub2RlLCBUIGFyZykgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRZaWVsZFN0YXRlbWVudChZaWVsZFN0YXRlbWVudCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7Cn0KCmFic3RyYWN0IGNsYXNzIEJvZHlWaXNpdG9yMTxSLCBUPiBleHRlbmRzIEV4cHJlc3Npb25WaXNpdG9yMTxSLCBUPgogICAgaW1wbGVtZW50cyBTdGF0ZW1lbnRWaXNpdG9yMTxSLCBUPiB7CiAgY29uc3QgQm9keVZpc2l0b3IxKCk7CgogIFIgZGVmYXVsdFN0YXRlbWVudChTdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+IG51bGw7CiAgUiB2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnQoRXhwcmVzc2lvblN0YXRlbWVudCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRCbG9jayhCbG9jayBub2RlLCBUIGFyZykgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRBc3NlcnRCbG9jayhBc3NlcnRCbG9jayBub2RlLCBUIGFyZykgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRFbXB0eVN0YXRlbWVudChFbXB0eVN0YXRlbWVudCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRBc3NlcnRTdGF0ZW1lbnQoQXNzZXJ0U3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdExhYmVsZWRTdGF0ZW1lbnQoTGFiZWxlZFN0YXRlbWVudCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRCcmVha1N0YXRlbWVudChCcmVha1N0YXRlbWVudCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRXaGlsZVN0YXRlbWVudChXaGlsZVN0YXRlbWVudCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXREb1N0YXRlbWVudChEb1N0YXRlbWVudCBub2RlLCBUIGFyZykgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRGb3JTdGF0ZW1lbnQoRm9yU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdEZvckluU3RhdGVtZW50KEZvckluU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdFN3aXRjaFN0YXRlbWVudChTd2l0Y2hTdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0Q29udGludWVTd2l0Y2hTdGF0ZW1lbnQoQ29udGludWVTd2l0Y2hTdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0SWZTdGF0ZW1lbnQoSWZTdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0UmV0dXJuU3RhdGVtZW50KFJldHVyblN0YXRlbWVudCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRUcnlDYXRjaChUcnlDYXRjaCBub2RlLCBUIGFyZykgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRUcnlGaW5hbGx5KFRyeUZpbmFsbHkgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0WWllbGRTdGF0ZW1lbnQoWWllbGRTdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwp9CoMjAE5OPBwBIhoBEwEmHQEwRwFPQ0NDQ09PTU0/P01AHz4fTT4fM08+HzofT01NTUVFR0NJOzdDQUFLUVFJQ0lFRTNLR0M8HwIBJRwBLgE6HjZCSEpMSEhCREhKQh5CSjxASDoeOh4CASIZASgBPzszTSAEAgEnHgEyATggTk5AIE5QAgEVDx4dGiAXASwBEUFHT0NDQ0NPT01NPz9NQB8+H00+HzNPPh86H09NTU1FRUdDSTs3Q0FBS1FRSUNJRUUzS0dDPB8BED86HjZCSEpMSEhCREhKQh5CSjxASDoeOh4BDTk/OzNNIAQBDTU9ARJDOCBOTkAgTlABFjlNP0E5RUM9ST81Oz0CARsbASwBQUE7P0VDTUECAR8zAU1NR0tRTz0iTQIBIgRLTUcETEYbGwEsAUNDQUdHR0FDQUtMHUlRUQIBJiQBKiooLi4uKCooMkowODgCAUIlASwBDDowAQw6MAEMMiwBDEw5AQw0LQEMTAEMTwEMTAEMMCsBDDArAQwwKwEMTAEMTwEMTwEMRwIBTVEnRiU5ASE2BAFKBlcGTiIjMgQBLAFDQ0FHR0dBQ0FLTB1JUVECAVEETRJEKzYBHzkEASwGTxQmGx0GBAEvAUZGREpKSkRGRE5PHUw9HT0dAgEiIgExAUVRTTEsKQQCASgPHBwkEwExJDkBDzlBQTs/RUNNQQEPOUNDQUdHR0FDQUtMHUlRUQEWLTEBGTU1JjUmMyY5JjkmOSYzJjUmMyY9JjAwJjsmQyZDJgEXMUVRTTEsKQQBLzk5AgEvHAEdHhEEAgE5BEo7BEsESCMEMxQkS0wsJxYpDhkMCgQyFwEgBjExATEBNAEsIhEEAgEqHgE3NSQ9JE9PT089JD0kOyQ7JEtLOyRHJEUkOyRFJD89JEUkQSQ9JDskOyQ7JFFRNSRPNyQ9JEdDT01NOSQ/JE81JjUmUVE/OSQ1JE9DJAIBKR0BNQFBI0JONyM5IzsjNyM3I05QNyM5I0kjTjkjSEw3I0EjQSMCAUMpGAE1QSNCTjcjOSM7IzcjNyNOUDcjOSNJI045I0hMNyNBI0EjAgEbcGFja2FnZTprZXJuZWwvdmlzaXRvci5kYXJ0K3Nka3Jvb3Q6L3BrZy9rZXJuZWwvbGliL2Nhbm9uaWNhbF9uYW1lLmRhcnSZYC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCmxpYnJhcnkga2VybmVsLmNhbm9uaWNhbF9uYW1lOwoKaW1wb3J0ICdhc3QuZGFydCc7CgovLy8gQSBzdHJpbmcgc2VxdWVuY2UgdGhhdCBpZGVudGlmaWVzIGEgbGlicmFyeSwgY2xhc3MsIG9yIG1lbWJlci4KLy8vCi8vLyBDYW5vbmljYWwgbmFtZXMgYXJlIG9yZ2FuaXplZCBpbiBhIHByZWZpeCB0cmVlLiAgRWFjaCBub2RlIGtub3dzIGl0cwovLy8gcGFyZW50LCBjaGlsZHJlbiwgYW5kIHRoZSBBU1Qgbm9kZSBpdCBpcyBjdXJyZW50bHkgYm91bmQgdG8uCi8vLwovLy8gVGhlIGZvbGxvd2luZyBzY2hlbWEgc3BlY2lmaWVzIGhvdyB0aGUgY2Fub25pY2FsIG5hbWUgb2YgYSBnaXZlbiBvYmplY3QKLy8vIGlzIGRlZmluZWQ6Ci8vLwovLy8gICAgICBMaWJyYXJ5OgovLy8gICAgICAgICBVUkkgb2YgbGlicmFyeQovLy8KLy8vICAgICAgQ2xhc3M6Ci8vLyAgICAgICAgIENhbm9uaWNhbCBuYW1lIG9mIGVuY2xvc2luZyBsaWJyYXJ5Ci8vLyAgICAgICAgIE5hbWUgb2YgY2xhc3MKLy8vCi8vLyAgICAgIEV4dGVuc2lvbjoKLy8vICAgICAgICAgQ2Fub25pY2FsIG5hbWUgb2YgZW5jbG9zaW5nIGxpYnJhcnkKLy8vICAgICAgICAgTmFtZSBvZiBleHRlbnNpb24KLy8vCi8vLyAgICAgIENvbnN0cnVjdG9yOgovLy8gICAgICAgICBDYW5vbmljYWwgbmFtZSBvZiBlbmNsb3NpbmcgY2xhc3Mgb3IgbGlicmFyeQovLy8gICAgICAgICAiQGNvbnN0cnVjdG9ycyIKLy8vICAgICAgICAgUXVhbGlmaWVkIG5hbWUKLy8vCi8vLyAgICAgIEZpZWxkOgovLy8gICAgICAgICBDYW5vbmljYWwgbmFtZSBvZiBlbmNsb3NpbmcgY2xhc3Mgb3IgbGlicmFyeQovLy8gICAgICAgICAiQGZpZWxkcyIKLy8vICAgICAgICAgUXVhbGlmaWVkIG5hbWUKLy8vCi8vLyAgICAgIFR5cGVkZWY6Ci8vLyAgICAgICAgIENhbm9uaWNhbCBuYW1lIG9mIGVuY2xvc2luZyBjbGFzcwovLy8gICAgICAgICAiQHR5cGVkZWZzIgovLy8gICAgICAgICBOYW1lIHRleHQKLy8vCi8vLyAgICAgIFByb2NlZHVyZSB0aGF0IGlzIG5vdCBhbiBhY2Nlc3NvciBvciBmYWN0b3J5OgovLy8gICAgICAgICBDYW5vbmljYWwgbmFtZSBvZiBlbmNsb3NpbmcgY2xhc3Mgb3IgbGlicmFyeQovLy8gICAgICAgICAiQG1ldGhvZHMiCi8vLyAgICAgICAgIFF1YWxpZmllZCBuYW1lCi8vLwovLy8gICAgICBQcm9jZWR1cmUgdGhhdCBpcyBhIGdldHRlcjoKLy8vICAgICAgICAgQ2Fub25pY2FsIG5hbWUgb2YgZW5jbG9zaW5nIGNsYXNzIG9yIGxpYnJhcnkKLy8vICAgICAgICAgIkBnZXR0ZXJzIgovLy8gICAgICAgICBRdWFsaWZpZWQgbmFtZQovLy8KLy8vICAgICAgUHJvY2VkdXJlIHRoYXQgaXMgYSBzZXR0ZXI6Ci8vLyAgICAgICAgIENhbm9uaWNhbCBuYW1lIG9mIGVuY2xvc2luZyBjbGFzcyBvciBsaWJyYXJ5Ci8vLyAgICAgICAgICJAc2V0dGVycyIKLy8vICAgICAgICAgUXVhbGlmaWVkIG5hbWUKLy8vCi8vLyAgICAgIFByb2NlZHVyZSB0aGF0IGlzIGEgZmFjdG9yeToKLy8vICAgICAgICAgQ2Fub25pY2FsIG5hbWUgb2YgZW5jbG9zaW5nIGNsYXNzCi8vLyAgICAgICAgICJAZmFjdG9yaWVzIgovLy8gICAgICAgICBRdWFsaWZpZWQgbmFtZQovLy8KLy8vICAgICAgUXVhbGlmaWVkIG5hbWU6Ci8vLyAgICAgICAgIGlmIHByaXZhdGU6IFVSSSBvZiBsaWJyYXJ5Ci8vLyAgICAgICAgIE5hbWUgdGV4dAovLy8KLy8vIFRoZSAicXVhbGlmaWVkIG5hbWUiIGFsbG93cyBhIG1lbWJlciB0byBoYXZlIGEgbmFtZSB0aGF0IGlzIHByaXZhdGUgdG8KLy8vIGEgbGlicmFyeSBvdGhlciB0aGFuIHRoZSBvbmUgY29udGFpbmluZyB0aGF0IG1lbWJlci4KY2xhc3MgQ2Fub25pY2FsTmFtZSB7CiAgQ2Fub25pY2FsTmFtZSBfcGFyZW50OwoKICBDYW5vbmljYWxOYW1lIGdldCBwYXJlbnQgPT4gX3BhcmVudDsKCiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgQ2Fub25pY2FsTmFtZSBfbm9uUm9vdFRvcDsKCiAgTWFwPFN0cmluZywgQ2Fub25pY2FsTmFtZT4gX2NoaWxkcmVuOwoKICAvLy8gVGhlIGxpYnJhcnksIGNsYXNzLCBvciBtZW1iZXIgYm91bmQgdG8gdGhpcyBuYW1lLgogIFJlZmVyZW5jZSByZWZlcmVuY2U7CgogIC8vLyBUZW1wb3JhcnkgaW5kZXggdXNlZCBkdXJpbmcgc2VyaWFsaXphdGlvbi4KICBpbnQgaW5kZXggPSAtMTsKCiAgQ2Fub25pY2FsTmFtZS5fKHRoaXMuX3BhcmVudCwgdGhpcy5uYW1lKSB7CiAgICBhc3NlcnQobmFtZSAhPSBudWxsKTsKICAgIGFzc2VydChwYXJlbnQgIT0gbnVsbCk7CiAgICBfbm9uUm9vdFRvcCA9IF9wYXJlbnQuaXNSb290ID8gdGhpcyA6IF9wYXJlbnQuX25vblJvb3RUb3A7CiAgfQoKICBDYW5vbmljYWxOYW1lLnJvb3QoKQogICAgICA6IF9wYXJlbnQgPSBudWxsLAogICAgICAgIF9ub25Sb290VG9wID0gbnVsbCwKICAgICAgICBuYW1lID0gJyc7CgogIGJvb2wgZ2V0IGlzUm9vdCA9PiBfcGFyZW50ID09IG51bGw7CiAgQ2Fub25pY2FsTmFtZSBnZXQgbm9uUm9vdFRvcCA9PiBfbm9uUm9vdFRvcDsKCiAgSXRlcmFibGU8Q2Fub25pY2FsTmFtZT4gZ2V0IGNoaWxkcmVuID0+CiAgICAgIF9jaGlsZHJlbj8udmFsdWVzID8/IGNvbnN0IDxDYW5vbmljYWxOYW1lPltdOwoKICBJdGVyYWJsZTxDYW5vbmljYWxOYW1lPiBnZXQgY2hpbGRyZW5Pck51bGwgPT4gX2NoaWxkcmVuPy52YWx1ZXM7CgogIGJvb2wgaGFzQ2hpbGQoU3RyaW5nIG5hbWUpIHsKICAgIHJldHVybiBfY2hpbGRyZW4gIT0gbnVsbCAmJiBfY2hpbGRyZW4uY29udGFpbnNLZXkobmFtZSk7CiAgfQoKICBDYW5vbmljYWxOYW1lIGdldENoaWxkKFN0cmluZyBuYW1lKSB7CiAgICB2YXIgbWFwID0gX2NoaWxkcmVuID8/PSA8U3RyaW5nLCBDYW5vbmljYWxOYW1lPnt9OwogICAgcmV0dXJuIG1hcFtuYW1lXSA/Pz0gbmV3IENhbm9uaWNhbE5hbWUuXyh0aGlzLCBuYW1lKTsKICB9CgogIENhbm9uaWNhbE5hbWUgZ2V0Q2hpbGRGcm9tVXJpKFVyaSB1cmkpIHsKICAgIC8vIE5vdGUgdGhhdCB0aGUgVXJpIGNsYXNzIGNhY2hlcyBpdHMgc3RyaW5nIHJlcHJlc2VudGF0aW9uLCBhbmQgYWxsIGxpYnJhcnkKICAgIC8vIFVSSXMgd2lsbCBiZSBzdHJpbmdpZmllZCBmb3Igc2VyaWFsaXphdGlvbiBhbnl3YXksIHNvIHRoZXJlIGlzIG5vCiAgICAvLyBzaWduaWZpY2FudCBjb3N0IGZvciBjb252ZXJ0aW5nIHRoZSBVcmkgdG8gYSBzdHJpbmcgaGVyZS4KICAgIHJldHVybiBnZXRDaGlsZCgnJHVyaScpOwogIH0KCiAgQ2Fub25pY2FsTmFtZSBnZXRDaGlsZEZyb21RdWFsaWZpZWROYW1lKE5hbWUgbmFtZSkgewogICAgcmV0dXJuIG5hbWUuaXNQcml2YXRlCiAgICAgICAgPyBnZXRDaGlsZEZyb21VcmkobmFtZS5saWJyYXJ5LmltcG9ydFVyaSkuZ2V0Q2hpbGQobmFtZS5uYW1lKQogICAgICAgIDogZ2V0Q2hpbGQobmFtZS5uYW1lKTsKICB9CgogIENhbm9uaWNhbE5hbWUgZ2V0Q2hpbGRGcm9tTWVtYmVyKE1lbWJlciBtZW1iZXIpIHsKICAgIHJldHVybiBnZXRDaGlsZChnZXRNZW1iZXJRdWFsaWZpZXIobWVtYmVyKSkKICAgICAgICAuZ2V0Q2hpbGRGcm9tUXVhbGlmaWVkTmFtZShtZW1iZXIubmFtZSk7CiAgfQoKICBDYW5vbmljYWxOYW1lIGdldENoaWxkRnJvbUZpZWxkV2l0aE5hbWUoTmFtZSBuYW1lKSB7CiAgICByZXR1cm4gZ2V0Q2hpbGQoJ0BmaWVsZHMnKS5nZXRDaGlsZEZyb21RdWFsaWZpZWROYW1lKG5hbWUpOwogIH0KCiAgQ2Fub25pY2FsTmFtZSBnZXRDaGlsZEZyb21UeXBlZGVmKFR5cGVkZWYgdHlwZWRlZl8pIHsKICAgIHJldHVybiBnZXRDaGlsZCgnQHR5cGVkZWZzJykuZ2V0Q2hpbGQodHlwZWRlZl8ubmFtZSk7CiAgfQoKICAvLy8gVGFrZSBvd25lcnNoaXAgb2YgYSBjaGlsZCBjYW5vbmljYWwgbmFtZSBhbmQgaXRzIHN1YnRyZWUuCiAgLy8vCiAgLy8vIFRoZSBjaGlsZCBuYW1lIGlzIHJlbW92ZWQgYXMgYSBjaGlsZCBvZiBpdHMgY3VycmVudCBwYXJlbnQgYW5kIHRoaXMgbmFtZQogIC8vLyBiZWNvbWVzIHRoZSBuZXcgcGFyZW50LiAgTm90ZSB0aGF0IHRoaXMgbW92ZXMgdGhlIGVudGlyZSBzdWJ0cmVlIHJvb3RlZCBhdAogIC8vLyB0aGUgY2hpbGQuCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIG1vdmUgc3VidHJlZXMgd2l0aGluIGEgY2Fub25pY2FsIG5hbWUgdHJlZSBvcgogIC8vLyBlbHNlIG1vdmUgdGhlbSBiZXR3ZWVuIHRyZWVzLiAgSXQgaXMgc2FmZSB0byBjYWxsIHRoaXMgbWV0aG9kIGlmIHRoZSBjaGlsZAogIC8vLyBuYW1lIGlzIGFscmVhZHkgYSBjaGlsZCBvZiB0aGlzIG5hbWUuCiAgLy8vCiAgLy8vIFRoZSBwcmVjb25kaXRpb24gaXMgdGhhdCB0aGlzIG5hbWUgY2Fubm90IGhhdmUgYSAoZGlmZmVyZW50KSBjaGlsZCB3aXRoCiAgLy8vIHRoZSBzYW1lIG5hbWUuCiAgdm9pZCBhZG9wdENoaWxkKENhbm9uaWNhbE5hbWUgY2hpbGQpIHsKICAgIGlmIChjaGlsZC5fcGFyZW50ID09IHRoaXMpIHJldHVybjsKICAgIGlmIChfY2hpbGRyZW4gIT0gbnVsbCAmJiBfY2hpbGRyZW4uY29udGFpbnNLZXkoY2hpbGQubmFtZSkpIHsKICAgICAgdGhyb3cgJ0Nhbm5vdCBhZGQgYSBjaGlsZCB0byAkdGhpcyBiZWNhdXNlIHRoaXMgbmFtZSBhbHJlYWR5IGhhcyBhICcKICAgICAgICAgICdjaGlsZCBuYW1lZCAke2NoaWxkLm5hbWV9JzsKICAgIH0KICAgIGNoaWxkLl9wYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQubmFtZSk7CiAgICBjaGlsZC5fcGFyZW50ID0gdGhpczsKICAgIGlmIChfY2hpbGRyZW4gPT0gbnVsbCkgX2NoaWxkcmVuID0gPFN0cmluZywgQ2Fub25pY2FsTmFtZT57fTsKICAgIF9jaGlsZHJlbltjaGlsZC5uYW1lXSA9IGNoaWxkOwogIH0KCiAgdm9pZCByZW1vdmVDaGlsZChTdHJpbmcgbmFtZSkgewogICAgX2NoaWxkcmVuPy5yZW1vdmUobmFtZSk7CiAgfQoKICB2b2lkIGJpbmRUbyhSZWZlcmVuY2UgdGFyZ2V0KSB7CiAgICBpZiAocmVmZXJlbmNlID09IHRhcmdldCkgcmV0dXJuOwogICAgaWYgKHJlZmVyZW5jZSAhPSBudWxsKSB7CiAgICAgIHRocm93ICckdGhpcyBpcyBhbHJlYWR5IGJvdW5kJzsKICAgIH0KICAgIGlmICh0YXJnZXQuY2Fub25pY2FsTmFtZSAhPSBudWxsKSB7CiAgICAgIHRocm93ICdDYW5ub3QgYmluZCAkdGhpcyB0byAke3RhcmdldC5ub2RlfSwgdGFyZ2V0IGlzIGFscmVhZHkgYm91bmQgdG8gJwogICAgICAgICAgJyR7dGFyZ2V0LmNhbm9uaWNhbE5hbWV9JzsKICAgIH0KICAgIHRhcmdldC5jYW5vbmljYWxOYW1lID0gdGhpczsKICAgIHRoaXMucmVmZXJlbmNlID0gdGFyZ2V0OwogIH0KCiAgdm9pZCB1bmJpbmQoKSB7CiAgICBpZiAocmVmZXJlbmNlID09IG51bGwpIHJldHVybjsKICAgIGFzc2VydChyZWZlcmVuY2UuY2Fub25pY2FsTmFtZSA9PSB0aGlzKTsKICAgIHJlZmVyZW5jZS5jYW5vbmljYWxOYW1lID0gbnVsbDsKICAgIHJlZmVyZW5jZSA9IG51bGw7CiAgfQoKICB2b2lkIHVuYmluZEFsbCgpIHsKICAgIHVuYmluZCgpOwogICAgSXRlcmFibGU8Q2Fub25pY2FsTmFtZT4gY2hpbGRyZW5fID0gY2hpbGRyZW5Pck51bGw7CiAgICBpZiAoY2hpbGRyZW5fICE9IG51bGwpIHsKICAgICAgZm9yIChDYW5vbmljYWxOYW1lIGNoaWxkIGluIGNoaWxkcmVuXykgewogICAgICAgIGNoaWxkLnVuYmluZEFsbCgpOwogICAgICB9CiAgICB9CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBfcGFyZW50ID09IG51bGwgPyAncm9vdCcgOiAnJHBhcmVudDo6JG5hbWUnOwoKICBSZWZlcmVuY2UgZ2V0UmVmZXJlbmNlKCkgewogICAgcmV0dXJuIHJlZmVyZW5jZSA/Pz0gKG5ldyBSZWZlcmVuY2UoKS4uY2Fub25pY2FsTmFtZSA9IHRoaXMpOwogIH0KCiAgc3RhdGljIFN0cmluZyBnZXRNZW1iZXJRdWFsaWZpZXIoTWVtYmVyIG1lbWJlcikgewogICAgaWYgKG1lbWJlciBpcyBQcm9jZWR1cmUpIHsKICAgICAgaWYgKG1lbWJlci5pc0dldHRlcikgcmV0dXJuICdAZ2V0dGVycyc7CiAgICAgIGlmIChtZW1iZXIuaXNTZXR0ZXIpIHJldHVybiAnQHNldHRlcnMnOwogICAgICBpZiAobWVtYmVyLmlzRmFjdG9yeSkgcmV0dXJuICdAZmFjdG9yaWVzJzsKICAgICAgcmV0dXJuICdAbWV0aG9kcyc7CiAgICB9CiAgICBpZiAobWVtYmVyIGlzIEZpZWxkKSB7CiAgICAgIHJldHVybiAnQGZpZWxkcyc7CiAgICB9CiAgICBpZiAobWVtYmVyIGlzIENvbnN0cnVjdG9yKSB7CiAgICAgIHJldHVybiAnQGNvbnN0cnVjdG9ycyc7CiAgICB9CiAgICBpZiAobWVtYmVyIGlzIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKSB7CiAgICAgIHJldHVybiAnQGZhY3Rvcmllcyc7CiAgICB9CiAgICB0aHJvdyAnVW5leHBlY3RlZCBtZW1iZXI6ICRtZW1iZXInOwogIH0KfQqA3gBOTjwfARMBQwRJQQRMEAQSGwQQMBoEFDAeBBY5HBsEEDkWGwQSLhgWBDc5FxsEJTkXGwQlORcbBCYuGRsEGScWBEs5FhkBJwEVHQEoATgXATESAS0aHD8EARcYHBMBJi8BKjQBQwEfPQQBKDc6BAErUUlBHQQBNxpGHwQBNDAxBAE3QAQBODoEAUAGT1ERBk9RLAZOFSknQksnBisaQiMEASIdBAEiJR0mBihPJQYhHQQBEiMtJBYEARUOOB0vGwgGBAFEAR1CBAE0Hy4uMRkGGxgGIR4GMxsGKAQCASJwYWNrYWdlOmtlcm5lbC9jYW5vbmljYWxfbmFtZS5kYXJ0MnNka3Jvb3Q6L3BrZy9rZXJuZWwvbGliL3RyYW5zZm9ybWF0aW9ucy9mbGFncy5kYXJ0gvVsaWJyYXJ5IGtlcm5lbC50cmFuc2Zvcm1hdGlvbnMuZmxhZ3M7CgppbXBvcnQgJy4uL2FzdC5kYXJ0JzsKCi8vLyBGbGFncyBzdW1tYXJpemluZyB0aGUga2luZHMgb2YgQVNUIG5vZGVzIGNvbnRhaW5lZCBpbiBhIGdpdmVuIG1lbWJlciBvcgovLy8gY2xhc3MsIGZvciBzcGVlZGluZyB1cCB0cmFuc2Zvcm1hdGlvbnMgdGhhdCBvbmx5IGFmZmVjdCBjZXJ0YWluIHR5cGVzIG9mCi8vLyBub2Rlcy4KLy8vCi8vLyBUaGVzZSBhcmUgc2V0IGJ5IHRoZSBmcm9udGVuZCBhbmQgdGhlIGRlc2VyaWFsaXplci4KY2xhc3MgVHJhbnNmb3JtZXJGbGFnIHsKICAvLy8gVGhlIGNsYXNzIG9yIG1lbWJlciBjb250YWlucyAnc3VwZXInIGNhbGxzLCB0aGF0IGlzLCBvbmUgb2YgdGhlIEFTVCBub2RlcwogIC8vLyBbU3VwZXJQcm9wZXJ0eUdldF0sIFtTdXBlclByb3BlcnR5U2V0XSwgW1N1cGVyTWV0aG9kSW52b2NhdGlvbl0uCiAgc3RhdGljIGNvbnN0IGludCBzdXBlckNhbGxzID0gMSA8PCAwOwoKICAvLy8gVGVtcG9yYXJ5IGZsYWcgdXNlZCBieSB0aGUgdmVyaWZpZXIgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZ2l2ZW4gbWVtYmVyCiAgLy8vIGhhcyBiZWVuIHNlZW4uCiAgc3RhdGljIGNvbnN0IGludCBzZWVuQnlWZXJpZmllciA9IDEgPDwgMTsKCiAgLy8gVE9ETyhhc2dlcmYpOiAgV2UgY291bGQgYWxzbyBhZGQgYSBmbGFnIGZvciAnYXN5bmMnIGFuZCB3aWxsIHByb2JhYmx5IGhhdmUKICAvLyBvbmUgZm9yIGNsb3N1cmVzIGFzIHdlbGwuCn0KFwAmARYBTE0LBDgYUEcoAUwVLAFQHwIBKXBhY2thZ2U6a2VybmVsL3RyYW5zZm9ybWF0aW9ucy9mbGFncy5kYXJ0KXNka3Jvb3Q6L3BrZy9rZXJuZWwvbGliL3R5cGVfYWxnZWJyYS5kYXJ0wABthi8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCmxpYnJhcnkga2VybmVsLnR5cGVfYWxnZWJyYTsKCmltcG9ydCAnYXN0LmRhcnQnOwoKLy8vIFJldHVybnMgYSB0eXBlIHdoZXJlIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGUgZ2l2ZW4gdHlwZSBwYXJhbWV0ZXJzIGhhdmUgYmVlbgovLy8gcmVwbGFjZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB0eXBlcy4KLy8vCi8vLyBUaGlzIHdpbGwgY29weSBvbmx5IHRoZSBzdWJ0ZXJtcyBvZiBbdHlwZV0gdGhhdCBjb250YWluIHN1YnN0aXR1dGVkCi8vLyB2YXJpYWJsZXM7IGFsbCBvdGhlciBbRGFydFR5cGVdIG9iamVjdHMgd2lsbCBiZSByZXVzZWQuCi8vLwovLy8gSW4gcGFydGljdWxhciwgaWYgbm8gdmFyaWFibGVzIHdlcmUgc3Vic3RpdHV0ZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0bwovLy8gcmV0dXJuIHRoZSBbdHlwZV0gaW5zdGFuY2UgKG5vdCBhIGNvcHkpLCBzbyB0aGUgY2FsbGVyIG1heSB1c2UgW2lkZW50aWNhbF0KLy8vIHRvIGVmZmljaWVudGx5IGNoZWNrIGlmIGEgZGlzdGluY3QgdHlwZSB3YXMgY3JlYXRlZC4KRGFydFR5cGUgc3Vic3RpdHV0ZShEYXJ0VHlwZSB0eXBlLCBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IHN1YnN0aXR1dGlvbikgewogIGlmIChzdWJzdGl0dXRpb24uaXNFbXB0eSkgcmV0dXJuIHR5cGU7CiAgcmV0dXJuIFN1YnN0aXR1dGlvbi5mcm9tTWFwKHN1YnN0aXR1dGlvbikuc3Vic3RpdHV0ZVR5cGUodHlwZSk7Cn0KCi8vLyBSZXR1cm5zIGEgbWFwcGluZyBmcm9tIHRoZSB0eXBlIHBhcmFtZXRlcnMgZGVjbGFyZWQgb24gdGhlIGNsYXNzIG9mIFt0eXBlXQovLy8gdG8gdGhlIGFjdHVhbCB0eXBlIGFyZ3VtZW50cyBwcm92aWRlZCBpbiBbdHlwZV0uCi8vLwovLy8gVGhpcyBjYW4gYmUgcGFzc2VkIGFzIGFyZ3VtZW50IHRvIFtzdWJzdGl0dXRlXS4KTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBnZXRTdWJzdGl0dXRpb25NYXAoU3VwZXJ0eXBlIHR5cGUpIHsKICByZXR1cm4gdHlwZS50eXBlQXJndW1lbnRzLmlzRW1wdHkKICAgICAgPyBjb25zdCA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+e30KICAgICAgOiBuZXcgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPi5mcm9tSXRlcmFibGVzKAogICAgICAgICAgdHlwZS5jbGFzc05vZGUudHlwZVBhcmFtZXRlcnMsIHR5cGUudHlwZUFyZ3VtZW50cyk7Cn0KCk1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gZ2V0VXBwZXJCb3VuZFN1YnN0aXR1dGlvbk1hcChDbGFzcyBob3N0KSB7CiAgaWYgKGhvc3QudHlwZVBhcmFtZXRlcnMuaXNFbXB0eSkgcmV0dXJuIGNvbnN0IDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fTsKICB2YXIgcmVzdWx0ID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogIGZvciAodmFyIHBhcmFtZXRlciBpbiBob3N0LnR5cGVQYXJhbWV0ZXJzKSB7CiAgICByZXN1bHRbcGFyYW1ldGVyXSA9IGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgfQogIGZvciAodmFyIHBhcmFtZXRlciBpbiBob3N0LnR5cGVQYXJhbWV0ZXJzKSB7CiAgICByZXN1bHRbcGFyYW1ldGVyXSA9IHN1YnN0aXR1dGUocGFyYW1ldGVyLmJvdW5kLCByZXN1bHQpOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CgovLy8gTGlrZSBbc3Vic3RpdHV0ZV0sIGV4Y2VwdCB3aGVuIGEgdHlwZSBpbiB0aGUgW3N1YnN0aXR1dGlvbl0gbWFwIHJlZmVyZW5jZXMKLy8vIGFub3RoZXIgc3Vic3RpdHV0ZWQgdHlwZSB2YXJpYWJsZSwgdGhlIG1hcHBpbmcgZm9yIHRoYXQgdHlwZSBpcyByZWN1cnNpdmVseQovLy8gaW5zZXJ0ZWQuCi8vLwovLy8gRm9yIGV4YW1wbGUgYFNldDxHPmAgc3Vic3RpdHV0ZWQgd2l0aCBge1QgLT4gU3RyaW5nLCBHIC0+IExpc3Q8VD59YCByZXN1bHRzCi8vLyBpbiBgU2V0PExpc3Q8U3RyaW5nPj5gLgovLy8KLy8vIFJldHVybnMgYG51bGxgIGlmIHRoZSBzdWJzdGl0dXRpb24gbWFwIGNvbnRhaW5zIGEgY3ljbGUgcmVhY2hhYmxlIGZyb20gYQovLy8gdHlwZSB2YXJpYWJsZSBpbiBbdHlwZV0gKHRoZSByZXN1bHRpbmcgdHlwZSB3b3VsZCBiZSBpbmZpbml0ZSkuCi8vLwovLy8gVGhlIFtzdWJzdGl0dXRpb25dIG1hcCB3aWxsIGJlIG11dGF0ZWQgc28gdGhhdCB0aGUgcmlnaHQtaGFuZCBzaWRlcyBtYXkKLy8vIGJlIHJlbWFwcGVkIHRvIHRoZSBkZWVwbHkgc3Vic3RpdHV0ZWQgdHlwZSwgYnV0IG9ubHkgZm9yIHRoZSBrZXlzIHRoYXQgYXJlCi8vLyByZWFjaGFibGUgZnJvbSBbdHlwZV0uCi8vLwovLy8gQXMgd2l0aCBbc3Vic3RpdHV0ZV0sIHRoaXMgaXMgZ3VhcmFudGVlZCB0byByZXR1cm4gdGhlIHNhbWUgaW5zdGFuY2UgaWYgbm8KLy8vIHN1YnN0aXR1dGlvbiB3YXMgcGVyZm9ybWVkLgpEYXJ0VHlwZSBzdWJzdGl0dXRlRGVlcCgKICAgIERhcnRUeXBlIHR5cGUsIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gc3Vic3RpdHV0aW9uKSB7CiAgaWYgKHN1YnN0aXR1dGlvbi5pc0VtcHR5KSByZXR1cm4gdHlwZTsKICB2YXIgc3Vic3RpdHV0b3IgPSBuZXcgX0RlZXBUeXBlU3Vic3RpdHV0b3Ioc3Vic3RpdHV0aW9uKTsKICB2YXIgcmVzdWx0ID0gc3Vic3RpdHV0b3IudmlzaXQodHlwZSk7CiAgcmV0dXJuIHN1YnN0aXR1dG9yLmlzSW5maW5pdGUgPyBudWxsIDogcmVzdWx0Owp9CgovLy8gUmV0dXJucyB0cnVlIGlmIFt0eXBlXSBjb250YWlucyBhIHJlZmVyZW5jZSB0byBhbnkgb2YgdGhlIGdpdmVuIFt2YXJpYWJsZXNdLgovLy8KLy8vIEl0IGlzIGFuIGVycm9yIHRvIGNhbGwgdGhpcyB3aXRoIGEgW3R5cGVdIHRoYXQgY29udGFpbnMgYSBbRnVuY3Rpb25UeXBlXQovLy8gdGhhdCBkZWNsYXJlcyBvbmUgb2YgdGhlIHBhcmFtZXRlcnMgaW4gW3ZhcmlhYmxlc10uCmJvb2wgY29udGFpbnNUeXBlVmFyaWFibGUoRGFydFR5cGUgdHlwZSwgU2V0PFR5cGVQYXJhbWV0ZXI+IHZhcmlhYmxlcykgewogIGlmICh2YXJpYWJsZXMuaXNFbXB0eSkgcmV0dXJuIGZhbHNlOwogIHJldHVybiBuZXcgX09jY3VycmVuY2VWaXNpdG9yKHZhcmlhYmxlcykudmlzaXQodHlwZSk7Cn0KCi8vLyBHaXZlbiBhIHNldCBvZiB0eXBlIHZhcmlhYmxlcywgZmluZHMgYSBzdWJzdGl0dXRpb24gb2YgdGhvc2UgdmFyaWFibGVzIHN1Y2gKLy8vIHRoYXQgdGhlIHR3byBnaXZlbiB0eXBlcyBiZWNvbWVzIGVxdWFsLCBvciByZXR1cm5zIGBudWxsYCBpZiBubyBzdWNoCi8vLyBzdWJzdGl0dXRpb24gZXhpc3RzLgovLy8KLy8vIEZvciBleGFtcGxlLCB1bmlmeWluZyBgTGlzdDxUPmAgd2l0aCBgTGlzdDxTdHJpbmc+YCwgd2hlcmUgYFRgIGlzIGEKLy8vIHF1YW50aWZpZWQgdmFyaWFibGUsIHlpZWxkcyB0aGUgc3Vic3RpdHV0aW9uIGBUID0gU3RyaW5nYC4KLy8vCi8vLyBJZiBzdWNjZXNzZnVsLCB0aGlzIGVxdWF0aW9uIGhvbGRzOgovLy8KLy8vICAgICBzdWJzdGl0dXRlKHR5cGUxLCBzdWJzdGl0dXRpb24pID09IHN1YnN0aXR1dGUodHlwZTIsIHN1YnN0aXR1dGlvbikKLy8vCi8vLyBUaGUgdW5pZmljYXRpb24gY2FuIGZhaWwgZm9yIHR3byByZWFzb25zOgovLy8gLSBpbmNvbXBhdGlibGUgdHlwZXMsIGUuZy4gYExpc3Q8VD5gIGNhbm5vdCBiZSB1bmlmaWVkIHdpdGggYFNldDxUPmAuCi8vLyAtIGluZmluaXRlIHR5cGVzOiBlLmcuIGBUYCBjYW5ub3QgYmUgdW5pZmllZCB3aXRoIGBMaXN0PFQ+YCBiZWNhdXNlIGl0Ci8vLyAgIHdvdWxkIGNyZWF0ZSB0aGUgaW5maW5pdGUgdHlwZSBgTGlzdDxMaXN0PExpc3Q8Li4uPj4+YC4KTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiB1bmlmeVR5cGVzKAogICAgRGFydFR5cGUgdHlwZTEsIERhcnRUeXBlIHR5cGUyLCBTZXQ8VHlwZVBhcmFtZXRlcj4gcXVhbnRpZmllZFZhcmlhYmxlcykgewogIHZhciB1bmlmaWVyID0gbmV3IF9UeXBlVW5pZmljYXRpb24odHlwZTEsIHR5cGUyLCBxdWFudGlmaWVkVmFyaWFibGVzKTsKICByZXR1cm4gdW5pZmllci5zdWNjZXNzID8gdW5pZmllci5zdWJzdGl0dXRpb24gOiBudWxsOwp9CgovLy8gR2VuZXJhdGVzIGEgZnJlc2ggY29weSBvZiB0aGUgZ2l2ZW4gdHlwZSBwYXJhbWV0ZXJzLCB3aXRoIHRoZWlyIGJvdW5kcwovLy8gc3Vic3RpdHV0ZWQgdG8gcmVmZXJlbmNlIHRoZSBuZXcgcGFyYW1ldGVycy4KLy8vCi8vLyBUaGUgcmV0dXJuZWQgb2JqZWN0IGNvbnRhaW5zIHRoZSBmcmVzaCB0eXBlIHBhcmFtZXRlciBsaXN0IGFzIHdlbGwgYXMgYQovLy8gbWFwcGluZyB0byBiZSB1c2VkIGZvciByZXBsYWNpbmcgb3RoZXIgdHlwZXMgdG8gdXNlIHRoZSBuZXcgdHlwZSBwYXJhbWV0ZXJzLgpGcmVzaFR5cGVQYXJhbWV0ZXJzIGdldEZyZXNoVHlwZVBhcmFtZXRlcnMoTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycykgewogIHZhciBmcmVzaFBhcmFtZXRlcnMgPSBuZXcgTGlzdDxUeXBlUGFyYW1ldGVyPi5nZW5lcmF0ZSgKICAgICAgdHlwZVBhcmFtZXRlcnMubGVuZ3RoLCAoaSkgPT4gbmV3IFR5cGVQYXJhbWV0ZXIodHlwZVBhcmFtZXRlcnNbaV0ubmFtZSksCiAgICAgIGdyb3dhYmxlOiB0cnVlKTsKICB2YXIgbWFwID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKICAgIG1hcFt0eXBlUGFyYW1ldGVyc1tpXV0gPSBuZXcgVHlwZVBhcmFtZXRlclR5cGUoZnJlc2hQYXJhbWV0ZXJzW2ldKTsKICB9CiAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlUGFyYW1ldGVycy5sZW5ndGg7ICsraSkgewogICAgZnJlc2hQYXJhbWV0ZXJzW2ldLmJvdW5kID0gc3Vic3RpdHV0ZSh0eXBlUGFyYW1ldGVyc1tpXS5ib3VuZCwgbWFwKTsKICAgIGZyZXNoUGFyYW1ldGVyc1tpXS5kZWZhdWx0VHlwZSA9IHR5cGVQYXJhbWV0ZXJzW2ldLmRlZmF1bHRUeXBlICE9IG51bGwKICAgICAgICA/IHN1YnN0aXR1dGUodHlwZVBhcmFtZXRlcnNbaV0uZGVmYXVsdFR5cGUsIG1hcCkKICAgICAgICA6IG51bGw7CiAgfQogIHJldHVybiBuZXcgRnJlc2hUeXBlUGFyYW1ldGVycyhmcmVzaFBhcmFtZXRlcnMsIFN1YnN0aXR1dGlvbi5mcm9tTWFwKG1hcCkpOwp9CgpjbGFzcyBGcmVzaFR5cGVQYXJhbWV0ZXJzIHsKICBmaW5hbCBMaXN0PFR5cGVQYXJhbWV0ZXI+IGZyZXNoVHlwZVBhcmFtZXRlcnM7CiAgZmluYWwgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbjsKCiAgRnJlc2hUeXBlUGFyYW1ldGVycyh0aGlzLmZyZXNoVHlwZVBhcmFtZXRlcnMsIHRoaXMuc3Vic3RpdHV0aW9uKTsKCiAgRnVuY3Rpb25UeXBlIGFwcGx5VG9GdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIHR5cGUpID0+IG5ldyBGdW5jdGlvblR5cGUoCiAgICAgIHR5cGUucG9zaXRpb25hbFBhcmFtZXRlcnMubWFwKHN1YnN0aXR1dGUpLnRvTGlzdCgpLAogICAgICBzdWJzdGl0dXRlKHR5cGUucmV0dXJuVHlwZSksCiAgICAgIG5hbWVkUGFyYW1ldGVyczogdHlwZS5uYW1lZFBhcmFtZXRlcnMubWFwKHN1YnN0aXR1dGVOYW1lZCkudG9MaXN0KCksCiAgICAgIHR5cGVQYXJhbWV0ZXJzOiBmcmVzaFR5cGVQYXJhbWV0ZXJzLAogICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50OiB0eXBlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICAgIHR5cGVkZWZUeXBlOgogICAgICAgICAgdHlwZS50eXBlZGVmVHlwZSA9PSBudWxsID8gbnVsbCA6IHN1YnN0aXR1dGUodHlwZS50eXBlZGVmVHlwZSkpOwoKICBEYXJ0VHlwZSBzdWJzdGl0dXRlKERhcnRUeXBlIHR5cGUpID0+IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZSh0eXBlKTsKCiAgTmFtZWRUeXBlIHN1YnN0aXR1dGVOYW1lZChOYW1lZFR5cGUgdHlwZSkgPT4KICAgICAgbmV3IE5hbWVkVHlwZSh0eXBlLm5hbWUsIHN1YnN0aXR1dGUodHlwZS50eXBlKSwKICAgICAgICAgIGlzUmVxdWlyZWQ6IHR5cGUuaXNSZXF1aXJlZCk7CgogIFN1cGVydHlwZSBzdWJzdGl0dXRlU3VwZXIoU3VwZXJ0eXBlIHR5cGUpIHsKICAgIHJldHVybiBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVN1cGVydHlwZSh0eXBlKTsKICB9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNUExFTUVOVEFUSU9OCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKYWJzdHJhY3QgY2xhc3MgU3Vic3RpdHV0aW9uIHsKICBjb25zdCBTdWJzdGl0dXRpb24oKTsKCiAgc3RhdGljIGNvbnN0IFN1YnN0aXR1dGlvbiBlbXB0eSA9IF9OdWxsU3Vic3RpdHV0aW9uLmluc3RhbmNlOwoKICAvLy8gU3Vic3RpdHV0ZXMgZWFjaCBwYXJhbWV0ZXIgdG8gdGhlIHR5cGUgaXQgbWFwcyB0byBpbiBbbWFwXS4KICBzdGF0aWMgU3Vic3RpdHV0aW9uIGZyb21NYXAoTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBtYXApIHsKICAgIGlmIChtYXAuaXNFbXB0eSkgcmV0dXJuIF9OdWxsU3Vic3RpdHV0aW9uLmluc3RhbmNlOwogICAgcmV0dXJuIG5ldyBfTWFwU3Vic3RpdHV0aW9uKG1hcCwgbWFwKTsKICB9CgogIHN0YXRpYyBTdWJzdGl0dXRpb24gZmlsdGVyZWQoU3Vic3RpdHV0aW9uIHN1YiwgVHlwZVBhcmFtZXRlckZpbHRlciBmaWx0ZXIpIHsKICAgIHJldHVybiBuZXcgX0ZpbHRlcmVkU3Vic3RpdHV0aW9uKHN1YiwgZmlsdGVyKTsKICB9CgogIC8vLyBTdWJzdGl0dXRlcyBhbGwgb2NjdXJyZW5jZXMgb2YgdGhlIGdpdmVuIHR5cGUgcGFyYW1ldGVycyB3aXRoIHRoZQogIC8vLyBjb3JyZXNwb25kaW5nIHVwcGVyIG9yIGxvd2VyIGJvdW5kLCBkZXBlbmRpbmcgb24gdGhlIHZhcmlhbmNlIG9mIHRoZQogIC8vLyBjb250ZXh0IHdoZXJlIGl0IG9jY3Vycy4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGUgdGhlIHR5cGUgYChUKSA9PiBUYCB3aXRoIHRoZSBib3VuZHMgYGJvdHRvbSA8OiBUIDw6IG51bWAKICAvLy8gYmVjb21lcyBgKGJvdHRvbSkgPT4gbnVtYCAoaW4gdGhpcyBleGFtcGxlLCBgbnVtYCBpcyB0aGUgdXBwZXIgYm91bmQsCiAgLy8vIGFuZCBgYm90dG9tYCBpcyB0aGUgbG93ZXIgYm91bmQpLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgd2F5IHRvIG9idGFpbiBhbiB1cHBlciBib3VuZCBmb3IgYSB0eXBlIHdoaWxlIGVsaW1pbmF0aW5nIGFsbAogIC8vLyByZWZlcmVuY2VzIHRvIGNlcnRhaW4gdHlwZSB2YXJpYWJsZXMuCiAgc3RhdGljIFN1YnN0aXR1dGlvbiBmcm9tVXBwZXJBbmRMb3dlckJvdW5kcygKICAgICAgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiB1cHBlciwgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBsb3dlcikgewogICAgaWYgKHVwcGVyLmlzRW1wdHkgJiYgbG93ZXIuaXNFbXB0eSkgcmV0dXJuIF9OdWxsU3Vic3RpdHV0aW9uLmluc3RhbmNlOwogICAgcmV0dXJuIG5ldyBfTWFwU3Vic3RpdHV0aW9uKHVwcGVyLCBsb3dlcik7CiAgfQoKICAvLy8gU3Vic3RpdHV0ZXMgdGhlIHR5cGUgcGFyYW1ldGVycyBvbiB0aGUgY2xhc3Mgb2YgW3N1cGVydHlwZV0gd2l0aCB0aGUKICAvLy8gdHlwZSBhcmd1bWVudHMgcHJvdmlkZWQgaW4gW3N1cGVydHlwZV0uCiAgc3RhdGljIFN1YnN0aXR1dGlvbiBmcm9tU3VwZXJ0eXBlKFN1cGVydHlwZSBzdXBlcnR5cGUpIHsKICAgIGlmIChzdXBlcnR5cGUudHlwZUFyZ3VtZW50cy5pc0VtcHR5KSByZXR1cm4gX051bGxTdWJzdGl0dXRpb24uaW5zdGFuY2U7CiAgICByZXR1cm4gZnJvbU1hcChuZXcgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPi5mcm9tSXRlcmFibGVzKAogICAgICAgIHN1cGVydHlwZS5jbGFzc05vZGUudHlwZVBhcmFtZXRlcnMsIHN1cGVydHlwZS50eXBlQXJndW1lbnRzKSk7CiAgfQoKICAvLy8gU3Vic3RpdHV0ZXMgdGhlIHR5cGUgcGFyYW1ldGVycyBvbiB0aGUgY2xhc3Mgb2YgW3R5cGVdIHdpdGggdGhlCiAgLy8vIHR5cGUgYXJndW1lbnRzIHByb3ZpZGVkIGluIFt0eXBlXS4KICBzdGF0aWMgU3Vic3RpdHV0aW9uIGZyb21JbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgdHlwZSkgewogICAgaWYgKHR5cGUudHlwZUFyZ3VtZW50cy5pc0VtcHR5KSByZXR1cm4gX051bGxTdWJzdGl0dXRpb24uaW5zdGFuY2U7CiAgICByZXR1cm4gZnJvbU1hcChuZXcgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPi5mcm9tSXRlcmFibGVzKAogICAgICAgIHR5cGUuY2xhc3NOb2RlLnR5cGVQYXJhbWV0ZXJzLCB0eXBlLnR5cGVBcmd1bWVudHMpKTsKICB9CgogIC8vLyBTdWJzdGl0dXRlcyB0aGUgdHlwZSBwYXJhbWV0ZXJzIG9uIHRoZSB0eXBlZGVmIG9mIFt0eXBlXSB3aXRoIHRoZQogIC8vLyB0eXBlIGFyZ3VtZW50cyBwcm92aWRlZCBpbiBbdHlwZV0uCiAgc3RhdGljIFN1YnN0aXR1dGlvbiBmcm9tVHlwZWRlZlR5cGUoVHlwZWRlZlR5cGUgdHlwZSkgewogICAgaWYgKHR5cGUudHlwZUFyZ3VtZW50cy5pc0VtcHR5KSByZXR1cm4gX051bGxTdWJzdGl0dXRpb24uaW5zdGFuY2U7CiAgICByZXR1cm4gZnJvbU1hcChuZXcgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPi5mcm9tSXRlcmFibGVzKAogICAgICAgIHR5cGUudHlwZWRlZk5vZGUudHlwZVBhcmFtZXRlcnMsIHR5cGUudHlwZUFyZ3VtZW50cykpOwogIH0KCiAgLy8vIFN1YnN0aXR1dGVzIHRoZSBOdGggcGFyYW1ldGVyIGluIFtwYXJhbWV0ZXJzXSB3aXRoIHRoZSBOdGggdHlwZSBpbgogIC8vLyBbdHlwZXNdLgogIHN0YXRpYyBTdWJzdGl0dXRpb24gZnJvbVBhaXJzKAogICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHBhcmFtZXRlcnMsIExpc3Q8RGFydFR5cGU+IHR5cGVzKSB7CiAgICAvLyBUT0RPKGFzZ2VyZik6IEludmVzdGlnYXRlIGlmIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGltcGxlbWVudAogICAgLy8gc3Vic3RpdHV0aW9uIGJhc2VkIG9uIHBhcmFsbGVsIHBhaXJ3aXNlIGxpc3RzIGluc3RlYWQgb2YgTWFwcy4KICAgIGFzc2VydChwYXJhbWV0ZXJzLmxlbmd0aCA9PSB0eXBlcy5sZW5ndGgpOwogICAgaWYgKHBhcmFtZXRlcnMuaXNFbXB0eSkgcmV0dXJuIF9OdWxsU3Vic3RpdHV0aW9uLmluc3RhbmNlOwogICAgcmV0dXJuIGZyb21NYXAoCiAgICAgICAgbmV3IE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4uZnJvbUl0ZXJhYmxlcyhwYXJhbWV0ZXJzLCB0eXBlcykpOwogIH0KCiAgLy8vIFN1YnN0aXR1dGVzIHRoZSB0eXBlIHBhcmFtZXRlcnMgb24gdGhlIGNsYXNzIHdpdGggYm90dG9tIG9yIGR5bmFtaWMsCiAgLy8vIGRlcGVuZGluZyBvbiB0aGUgY292YXJpYW5jZSBvZiBpdHMgdXNlLgogIHN0YXRpYyBTdWJzdGl0dXRpb24gYm90dG9tRm9yQ2xhc3MoQ2xhc3MgY2xhc3NfKSB7CiAgICBpZiAoY2xhc3NfLnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkpIHJldHVybiBfTnVsbFN1YnN0aXR1dGlvbi5pbnN0YW5jZTsKICAgIHJldHVybiBuZXcgX0NsYXNzQm90dG9tU3Vic3RpdHV0aW9uKGNsYXNzXyk7CiAgfQoKICAvLy8gU3Vic3RpdHV0ZXMgY292YXJpYW50IHVzZXMgb2YgW2NsYXNzX10ncyB0eXBlIHBhcmFtZXRlcnMgd2l0aCB0aGUgdXBwZXIKICAvLy8gYm91bmQgb2YgdGhhdCB0eXBlIHBhcmFtZXRlci4gIFJlY3Vyc2l2ZSByZWZlcmVuY2VzIGluIHRoZSBib3VuZCBoYXZlCiAgLy8vIGJlZW4gcmVwbGFjZWQgYnkgZHluYW1pYy4KICBzdGF0aWMgU3Vic3RpdHV0aW9uIHVwcGVyQm91bmRGb3JDbGFzcyhDbGFzcyBjbGFzc18pIHsKICAgIGlmIChjbGFzc18udHlwZVBhcmFtZXRlcnMuaXNFbXB0eSkgcmV0dXJuIF9OdWxsU3Vic3RpdHV0aW9uLmluc3RhbmNlOwogICAgdmFyIHVwcGVyID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogICAgZm9yICh2YXIgcGFyYW1ldGVyIGluIGNsYXNzXy50eXBlUGFyYW1ldGVycykgewogICAgICB1cHBlcltwYXJhbWV0ZXJdID0gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgIH0KICAgIGZvciAodmFyIHBhcmFtZXRlciBpbiBjbGFzc18udHlwZVBhcmFtZXRlcnMpIHsKICAgICAgdXBwZXJbcGFyYW1ldGVyXSA9IHN1YnN0aXR1dGUocGFyYW1ldGVyLmJvdW5kLCB1cHBlcik7CiAgICB9CiAgICByZXR1cm4gZnJvbVVwcGVyQW5kTG93ZXJCb3VuZHModXBwZXIsIHt9KTsKICB9CgogIC8vLyBTdWJzdGl0dXRlcyBib3RoIHZhcmlhYmxlcyBmcm9tIFtmaXJzdF0gYW5kIFtzZWNvbmRdLCBmYXZvcmluZyB0aG9zZSBmcm9tCiAgLy8vIFtmaXJzdF0gaWYgdGhleSBvdmVybGFwLgogIC8vLwogIC8vLyBOZWl0aGVyIHN1YnN0aXR1dGlvbiBpcyBhcHBsaWVkIHRvIHRoZSByZXN1bHRzIG9mIHRoZSBvdGhlciwgc28gdGhpcyBkb2VzCiAgLy8vICpub3QqIGNvcnJlc3BvbmQgdG8gYSBzZXF1ZW5jZSBvZiB0d28gc3Vic3RpdHV0aW9ucy4gRm9yIGV4YW1wbGUsCiAgLy8vIGNvbWJpbmluZyBge1QgLT4gTGlzdDxHPn1gIHdpdGggYHtHIC0+IFN0cmluZ31gIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8KICAvLy8gYHtUIC0+IExpc3Q8U3RyaW5nPn1gIGJlY2F1c2UgdGhlIHJlc3VsdCBmcm9tIHN1YnN0aXR1dGluZyBgVGAgaXMgbm90CiAgLy8vIHNlYXJjaGVkIGZvciBvY2N1cmVuY2VzIG9mIGBHYC4KICBzdGF0aWMgU3Vic3RpdHV0aW9uIGNvbWJpbmUoU3Vic3RpdHV0aW9uIGZpcnN0LCBTdWJzdGl0dXRpb24gc2Vjb25kKSB7CiAgICBpZiAoZmlyc3QgPT0gX051bGxTdWJzdGl0dXRpb24uaW5zdGFuY2UpIHJldHVybiBzZWNvbmQ7CiAgICBpZiAoc2Vjb25kID09IF9OdWxsU3Vic3RpdHV0aW9uLmluc3RhbmNlKSByZXR1cm4gZmlyc3Q7CiAgICByZXR1cm4gbmV3IF9Db21iaW5lZFN1YnN0aXR1dGlvbihmaXJzdCwgc2Vjb25kKTsKICB9CgogIERhcnRUeXBlIGdldFN1YnN0aXR1dGUoVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIsIGJvb2wgdXBwZXJCb3VuZCk7CgogIERhcnRUeXBlIHN1YnN0aXR1dGVUeXBlKERhcnRUeXBlIG5vZGUsIHtib29sIGNvbnRyYXZhcmlhbnQ6IGZhbHNlfSkgewogICAgcmV0dXJuIG5ldyBfVG9wU3Vic3RpdHV0b3IodGhpcywgY29udHJhdmFyaWFudCkudmlzaXQobm9kZSk7CiAgfQoKICBTdXBlcnR5cGUgc3Vic3RpdHV0ZVN1cGVydHlwZShTdXBlcnR5cGUgbm9kZSkgewogICAgcmV0dXJuIG5ldyBfVG9wU3Vic3RpdHV0b3IodGhpcywgZmFsc2UpLnZpc2l0U3VwZXJ0eXBlKG5vZGUpOwogIH0KfQoKY2xhc3MgX051bGxTdWJzdGl0dXRpb24gZXh0ZW5kcyBTdWJzdGl0dXRpb24gewogIHN0YXRpYyBjb25zdCBfTnVsbFN1YnN0aXR1dGlvbiBpbnN0YW5jZSA9IGNvbnN0IF9OdWxsU3Vic3RpdHV0aW9uKCk7CgogIGNvbnN0IF9OdWxsU3Vic3RpdHV0aW9uKCk7CgogIERhcnRUeXBlIGdldFN1YnN0aXR1dGUoVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIsIGJvb2wgdXBwZXJCb3VuZCkgewogICAgcmV0dXJuIG5ldyBUeXBlUGFyYW1ldGVyVHlwZShwYXJhbWV0ZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgc3Vic3RpdHV0ZVR5cGUoRGFydFR5cGUgbm9kZSwge2Jvb2wgY29udHJhdmFyaWFudDogZmFsc2V9KSA9PiBub2RlOwoKICBAb3ZlcnJpZGUKICBTdXBlcnR5cGUgc3Vic3RpdHV0ZVN1cGVydHlwZShTdXBlcnR5cGUgbm9kZSkgPT4gbm9kZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIlN1YnN0aXR1dGlvbi5lbXB0eSI7Cn0KCmNsYXNzIF9NYXBTdWJzdGl0dXRpb24gZXh0ZW5kcyBTdWJzdGl0dXRpb24gewogIGZpbmFsIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gdXBwZXI7CiAgZmluYWwgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBsb3dlcjsKCiAgX01hcFN1YnN0aXR1dGlvbih0aGlzLnVwcGVyLCB0aGlzLmxvd2VyKTsKCiAgRGFydFR5cGUgZ2V0U3Vic3RpdHV0ZShUeXBlUGFyYW1ldGVyIHBhcmFtZXRlciwgYm9vbCB1cHBlckJvdW5kKSB7CiAgICByZXR1cm4gdXBwZXJCb3VuZCA/IHVwcGVyW3BhcmFtZXRlcl0gOiBsb3dlcltwYXJhbWV0ZXJdOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIl9NYXBTdWJzdGl0dXRpb24oJHVwcGVyLCAkbG93ZXIpIjsKfQoKY2xhc3MgX1RvcFN1YnN0aXR1dG9yIGV4dGVuZHMgX1R5cGVTdWJzdGl0dXRvciB7CiAgZmluYWwgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbjsKCiAgX1RvcFN1YnN0aXR1dG9yKHRoaXMuc3Vic3RpdHV0aW9uLCBib29sIGNvbnRyYXZhcmlhbnQpIDogc3VwZXIobnVsbCkgewogICAgaWYgKGNvbnRyYXZhcmlhbnQpIHsKICAgICAgaW52ZXJ0VmFyaWFuY2UoKTsKICAgIH0KICB9CgogIERhcnRUeXBlIGxvb2t1cChUeXBlUGFyYW1ldGVyIHBhcmFtZXRlciwgYm9vbCB1cHBlckJvdW5kKSB7CiAgICByZXR1cm4gc3Vic3RpdHV0aW9uLmdldFN1YnN0aXR1dGUocGFyYW1ldGVyLCB1cHBlckJvdW5kKTsKICB9CgogIFR5cGVQYXJhbWV0ZXIgZnJlc2hUeXBlUGFyYW1ldGVyKFR5cGVQYXJhbWV0ZXIgbm9kZSkgewogICAgdGhyb3cgJ0NyZWF0ZSBhIGZyZXNoIGVudmlyb25tZW50IGZpcnN0JzsKICB9Cn0KCmNsYXNzIF9DbGFzc0JvdHRvbVN1YnN0aXR1dGlvbiBleHRlbmRzIFN1YnN0aXR1dGlvbiB7CiAgZmluYWwgQ2xhc3MgY2xhc3NfOwoKICBfQ2xhc3NCb3R0b21TdWJzdGl0dXRpb24odGhpcy5jbGFzc18pOwoKICBEYXJ0VHlwZSBnZXRTdWJzdGl0dXRlKFR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyLCBib29sIHVwcGVyQm91bmQpIHsKICAgIGlmIChwYXJhbWV0ZXIucGFyZW50ID09IGNsYXNzXykgewogICAgICByZXR1cm4gdXBwZXJCb3VuZCA/IGNvbnN0IEJvdHRvbVR5cGUoKSA6IGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCmNsYXNzIF9Db21iaW5lZFN1YnN0aXR1dGlvbiBleHRlbmRzIFN1YnN0aXR1dGlvbiB7CiAgZmluYWwgU3Vic3RpdHV0aW9uIGZpcnN0LCBzZWNvbmQ7CgogIF9Db21iaW5lZFN1YnN0aXR1dGlvbih0aGlzLmZpcnN0LCB0aGlzLnNlY29uZCk7CgogIERhcnRUeXBlIGdldFN1YnN0aXR1dGUoVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIsIGJvb2wgdXBwZXJCb3VuZCkgewogICAgcmV0dXJuIGZpcnN0LmdldFN1YnN0aXR1dGUocGFyYW1ldGVyLCB1cHBlckJvdW5kKSA/PwogICAgICAgIHNlY29uZC5nZXRTdWJzdGl0dXRlKHBhcmFtZXRlciwgdXBwZXJCb3VuZCk7CiAgfQp9Cgp0eXBlZGVmIGJvb2wgVHlwZVBhcmFtZXRlckZpbHRlcihUeXBlUGFyYW1ldGVyIFApOwoKY2xhc3MgX0ZpbHRlcmVkU3Vic3RpdHV0aW9uIGV4dGVuZHMgU3Vic3RpdHV0aW9uIHsKICBmaW5hbCBTdWJzdGl0dXRpb24gYmFzZTsKICBmaW5hbCBUeXBlUGFyYW1ldGVyRmlsdGVyIGZpbHRlckZuOwoKICBfRmlsdGVyZWRTdWJzdGl0dXRpb24odGhpcy5iYXNlLCB0aGlzLmZpbHRlckZuKTsKCiAgRGFydFR5cGUgZ2V0U3Vic3RpdHV0ZShUeXBlUGFyYW1ldGVyIHBhcmFtZXRlciwgYm9vbCB1cHBlckJvdW5kKSB7CiAgICByZXR1cm4gZmlsdGVyRm4ocGFyYW1ldGVyKQogICAgICAgID8gYmFzZS5nZXRTdWJzdGl0dXRlKHBhcmFtZXRlciwgdXBwZXJCb3VuZCkKICAgICAgICA6IF9OdWxsU3Vic3RpdHV0aW9uLmluc3RhbmNlLmdldFN1YnN0aXR1dGUocGFyYW1ldGVyLCB1cHBlckJvdW5kKTsKICB9Cn0KCmNsYXNzIF9Jbm5lclR5cGVTdWJzdGl0dXRvciBleHRlbmRzIF9UeXBlU3Vic3RpdHV0b3IgewogIGZpbmFsIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gc3Vic3RpdHV0aW9uID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwoKICBfSW5uZXJUeXBlU3Vic3RpdHV0b3IoX1R5cGVTdWJzdGl0dXRvciBvdXRlcikgOiBzdXBlcihvdXRlcik7CgogIERhcnRUeXBlIGxvb2t1cChUeXBlUGFyYW1ldGVyIHBhcmFtZXRlciwgYm9vbCB1cHBlckJvdW5kKSB7CiAgICByZXR1cm4gc3Vic3RpdHV0aW9uW3BhcmFtZXRlcl07CiAgfQoKICBUeXBlUGFyYW1ldGVyIGZyZXNoVHlwZVBhcmFtZXRlcihUeXBlUGFyYW1ldGVyIG5vZGUpIHsKICAgIHZhciBmcmVzaCA9IG5ldyBUeXBlUGFyYW1ldGVyKG5vZGUubmFtZSk7CiAgICBzdWJzdGl0dXRpb25bbm9kZV0gPSBuZXcgVHlwZVBhcmFtZXRlclR5cGUoZnJlc2gpOwogICAgZnJlc2guYm91bmQgPSB2aXNpdChub2RlLmJvdW5kKTsKICAgIGlmIChub2RlLmRlZmF1bHRUeXBlICE9IG51bGwpIHsKICAgICAgZnJlc2guZGVmYXVsdFR5cGUgPSB2aXNpdChub2RlLmRlZmF1bHRUeXBlKTsKICAgIH0KICAgIHJldHVybiBmcmVzaDsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9UeXBlU3Vic3RpdHV0b3IgZXh0ZW5kcyBEYXJ0VHlwZVZpc2l0b3I8RGFydFR5cGU+IHsKICBmaW5hbCBfVHlwZVN1YnN0aXR1dG9yIG91dGVyOwogIGJvb2wgY292YXJpYW50Q29udGV4dCA9IHRydWU7CgogIF9UeXBlU3Vic3RpdHV0b3IodGhpcy5vdXRlcikgewogICAgY292YXJpYW50Q29udGV4dCA9IG91dGVyID09IG51bGwgPyB0cnVlIDogb3V0ZXIuY292YXJpYW50Q29udGV4dDsKICB9CgogIERhcnRUeXBlIGxvb2t1cChUeXBlUGFyYW1ldGVyIHBhcmFtZXRlciwgYm9vbCB1cHBlckJvdW5kKTsKCiAgLy8vIFRoZSBudW1iZXIgb2YgdGltZXMgYSB2YXJpYWJsZSBmcm9tIHRoaXMgZW52aXJvbm1lbnQgaGFzIGJlZW4gdXNlZCBpbgogIC8vLyBhIHN1YnN0aXR1dGlvbi4KICAvLy8KICAvLy8gVGhlcmUgaXMgYSBzdHJpY3QgcmVxdWlyZW1lbnQgdGhhdCB3ZSBtdXN0IHJldHVybiB0aGUgc2FtZSBpbnN0YW5jZSBmb3IKICAvLy8gdHlwZXMgdGhhdCB3ZXJlIG5vdCBhbHRlcmVkIGJ5IHRoZSBzdWJzdGl0dXRpb24uICBUaGlzIGNvdW50ZXIgbGV0cyB1cwogIC8vLyBjaGVjayBxdWlja2x5IGlmIGFueXRoaW5nIGhhcHBlbmVkIGluIGEgc3Vic3RpdHV0aW9uLgogIGludCB1c2VDb3VudGVyID0gMDsKCiAgX0lubmVyVHlwZVN1YnN0aXR1dG9yIG5ld0lubmVyRW52aXJvbm1lbnQoKSB7CiAgICByZXR1cm4gbmV3IF9Jbm5lclR5cGVTdWJzdGl0dXRvcih0aGlzKTsKICB9CgogIHZvaWQgaW52ZXJ0VmFyaWFuY2UoKSB7CiAgICBjb3ZhcmlhbnRDb250ZXh0ID0gIWNvdmFyaWFudENvbnRleHQ7CiAgfQoKICBTdXBlcnR5cGUgdmlzaXRTdXBlcnR5cGUoU3VwZXJ0eXBlIG5vZGUpIHsKICAgIGlmIChub2RlLnR5cGVBcmd1bWVudHMuaXNFbXB0eSkgcmV0dXJuIG5vZGU7CiAgICBpbnQgYmVmb3JlID0gdXNlQ291bnRlcjsKICAgIHZhciB0eXBlQXJndW1lbnRzID0gbm9kZS50eXBlQXJndW1lbnRzLm1hcCh2aXNpdCkudG9MaXN0KCk7CiAgICBpZiAodXNlQ291bnRlciA9PSBiZWZvcmUpIHJldHVybiBub2RlOwogICAgcmV0dXJuIG5ldyBTdXBlcnR5cGUobm9kZS5jbGFzc05vZGUsIHR5cGVBcmd1bWVudHMpOwogIH0KCiAgTmFtZWRUeXBlIHZpc2l0TmFtZWRUeXBlKE5hbWVkVHlwZSBub2RlKSB7CiAgICBpbnQgYmVmb3JlID0gdXNlQ291bnRlcjsKICAgIHZhciB0eXBlID0gdmlzaXQobm9kZS50eXBlKTsKICAgIGlmICh1c2VDb3VudGVyID09IGJlZm9yZSkgcmV0dXJuIG5vZGU7CiAgICByZXR1cm4gbmV3IE5hbWVkVHlwZShub2RlLm5hbWUsIHR5cGUsIGlzUmVxdWlyZWQ6IG5vZGUuaXNSZXF1aXJlZCk7CiAgfQoKICBEYXJ0VHlwZSB2aXNpdChEYXJ0VHlwZSBub2RlKSA9PiBub2RlLmFjY2VwdCh0aGlzKTsKCiAgRGFydFR5cGUgdmlzaXRJbnZhbGlkVHlwZShJbnZhbGlkVHlwZSBub2RlKSA9PiBub2RlOwogIERhcnRUeXBlIHZpc2l0RHluYW1pY1R5cGUoRHluYW1pY1R5cGUgbm9kZSkgPT4gbm9kZTsKICBEYXJ0VHlwZSB2aXNpdFZvaWRUeXBlKFZvaWRUeXBlIG5vZGUpID0+IG5vZGU7CiAgRGFydFR5cGUgdmlzaXRCb3R0b21UeXBlKEJvdHRvbVR5cGUgbm9kZSkgPT4gbm9kZTsKCiAgRGFydFR5cGUgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgbm9kZSkgewogICAgaWYgKG5vZGUudHlwZUFyZ3VtZW50cy5pc0VtcHR5KSByZXR1cm4gbm9kZTsKICAgIGludCBiZWZvcmUgPSB1c2VDb3VudGVyOwogICAgdmFyIHR5cGVBcmd1bWVudHMgPSBub2RlLnR5cGVBcmd1bWVudHMubWFwKHZpc2l0KS50b0xpc3QoKTsKICAgIGlmICh1c2VDb3VudGVyID09IGJlZm9yZSkgcmV0dXJuIG5vZGU7CiAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUobm9kZS5jbGFzc05vZGUsIHR5cGVBcmd1bWVudHMpOwogIH0KCiAgRGFydFR5cGUgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSBub2RlKSB7CiAgICBpZiAobm9kZS50eXBlQXJndW1lbnRzLmlzRW1wdHkpIHJldHVybiBub2RlOwogICAgaW50IGJlZm9yZSA9IHVzZUNvdW50ZXI7CiAgICB2YXIgdHlwZUFyZ3VtZW50cyA9IG5vZGUudHlwZUFyZ3VtZW50cy5tYXAodmlzaXQpLnRvTGlzdCgpOwogICAgaWYgKHVzZUNvdW50ZXIgPT0gYmVmb3JlKSByZXR1cm4gbm9kZTsKICAgIHJldHVybiBuZXcgVHlwZWRlZlR5cGUobm9kZS50eXBlZGVmTm9kZSwgdHlwZUFyZ3VtZW50cyk7CiAgfQoKICBMaXN0PFR5cGVQYXJhbWV0ZXI+IGZyZXNoVHlwZVBhcmFtZXRlcnMoTGlzdDxUeXBlUGFyYW1ldGVyPiBwYXJhbWV0ZXJzKSB7CiAgICBpZiAocGFyYW1ldGVycy5pc0VtcHR5KSByZXR1cm4gY29uc3QgPFR5cGVQYXJhbWV0ZXI+W107CiAgICByZXR1cm4gcGFyYW1ldGVycy5tYXAoZnJlc2hUeXBlUGFyYW1ldGVyKS50b0xpc3QoKTsKICB9CgogIFR5cGVQYXJhbWV0ZXIgZnJlc2hUeXBlUGFyYW1ldGVyKFR5cGVQYXJhbWV0ZXIgbm9kZSk7CgogIERhcnRUeXBlIHZpc2l0RnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSBub2RlKSB7CiAgICAvLyBUaGlzIGlzIGEgYml0IHRyaWNreSBiZWNhdXNlIHdlIGhhdmUgdG8gZ2VuZXJhdGUgZnJlc2ggdHlwZSBwYXJhbWV0ZXJzCiAgICAvLyBpbiBvcmRlciB0byBjaGFuZ2UgdGhlIGJvdW5kcy4gIEF0IHRoZSBzYW1lIHRpbWUsIGlmIHRoZSBmdW5jdGlvbiB0eXBlCiAgICAvLyB3YXMgdW5hbHRlcmVkLCB3ZSBoYXZlIHRvIHJldHVybiB0aGUgW25vZGVdIG9iamVjdCAobm90IGEgY29weSEpLgogICAgLy8gU3Vic3RpdHV0aW5nIGEgdHlwZSBmb3IgYSBmcmVzaCB0eXBlIHZhcmlhYmxlIHNob3VsZCBub3QgYmUgY29uZnVzZWQgd2l0aAogICAgLy8gYSAicmVhbCIgc3Vic3RpdHV0aW9uLgogICAgLy8KICAgIC8vIENyZWF0ZSBhbiBpbm5lciBlbnZpcm9ubWVudCB0byBnZW5lcmF0ZSBmcmVzaCB0eXBlIHBhcmFtZXRlcnMuICBUaGUgdXNlCiAgICAvLyBjb3VudGVyIG9uIHRoZSBpbm5lciBlbnZpcm9ubWVudCB0ZWxscyBpZiB0aGUgZnJlc2ggdHlwZSBwYXJhbWV0ZXJzIGhhdmUKICAgIC8vIGFueSB1c2VzLCBidXQgZG9lcyBub3QgdGVsbCBpZiB0aGUgcmVzdWx0aW5nIGZ1bmN0aW9uIHR5cGUgaXMgZGlzdGluY3QuCiAgICAvLyBPdXIgb3duIHVzZSBjb3VudGVyIHdpbGwgZ2V0IGluY3JlbWVudGVkIGlmIHNvbWV0aGluZyBmcm9tIG91cgogICAgLy8gZW52aXJvbm1lbnQgaGFzIGJlZW4gdXNlZCBpbnNpZGUgdGhlIGZ1bmN0aW9uLgogICAgdmFyIGlubmVyID0gbm9kZS50eXBlUGFyYW1ldGVycy5pc0VtcHR5ID8gdGhpcyA6IG5ld0lubmVyRW52aXJvbm1lbnQoKTsKICAgIGludCBiZWZvcmUgPSB0aGlzLnVzZUNvdW50ZXI7CiAgICAvLyBJbnZlcnQgdGhlIHZhcmlhbmNlIHdoZW4gdHJhbnNsYXRpbmcgcGFyYW1ldGVycy4KICAgIGlubmVyLmludmVydFZhcmlhbmNlKCk7CiAgICB2YXIgdHlwZVBhcmFtZXRlcnMgPSBpbm5lci5mcmVzaFR5cGVQYXJhbWV0ZXJzKG5vZGUudHlwZVBhcmFtZXRlcnMpOwogICAgdmFyIHBvc2l0aW9uYWxQYXJhbWV0ZXJzID0gbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5pc0VtcHR5CiAgICAgICAgPyBjb25zdCA8RGFydFR5cGU+W10KICAgICAgICA6IG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMubWFwKGlubmVyLnZpc2l0KS50b0xpc3QoKTsKICAgIHZhciBuYW1lZFBhcmFtZXRlcnMgPSBub2RlLm5hbWVkUGFyYW1ldGVycy5pc0VtcHR5CiAgICAgICAgPyBjb25zdCA8TmFtZWRUeXBlPltdCiAgICAgICAgOiBub2RlLm5hbWVkUGFyYW1ldGVycy5tYXAoaW5uZXIudmlzaXROYW1lZFR5cGUpLnRvTGlzdCgpOwogICAgaW5uZXIuaW52ZXJ0VmFyaWFuY2UoKTsKICAgIHZhciByZXR1cm5UeXBlID0gaW5uZXIudmlzaXQobm9kZS5yZXR1cm5UeXBlKTsKICAgIERhcnRUeXBlIHR5cGVkZWZUeXBlID0KICAgICAgICBub2RlLnR5cGVkZWZUeXBlID09IG51bGwgPyBudWxsIDogaW5uZXIudmlzaXQobm9kZS50eXBlZGVmVHlwZSk7CiAgICBpZiAodGhpcy51c2VDb3VudGVyID09IGJlZm9yZSkgcmV0dXJuIG5vZGU7CiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uVHlwZShwb3NpdGlvbmFsUGFyYW1ldGVycywgcmV0dXJuVHlwZSwKICAgICAgICBuYW1lZFBhcmFtZXRlcnM6IG5hbWVkUGFyYW1ldGVycywKICAgICAgICB0eXBlUGFyYW1ldGVyczogdHlwZVBhcmFtZXRlcnMsCiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogbm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50LAogICAgICAgIHR5cGVkZWZUeXBlOiB0eXBlZGVmVHlwZSk7CiAgfQoKICB2b2lkIGJ1bXBDb3VudGVyc1VudGlsKF9UeXBlU3Vic3RpdHV0b3IgdGFyZ2V0KSB7CiAgICB2YXIgbm9kZSA9IHRoaXM7CiAgICB3aGlsZSAobm9kZSAhPSB0YXJnZXQpIHsKICAgICAgKytub2RlLnVzZUNvdW50ZXI7CiAgICAgIG5vZGUgPSBub2RlLm91dGVyOwogICAgfQogICAgKyt0YXJnZXQudXNlQ291bnRlcjsKICB9CgogIERhcnRUeXBlIGdldFN1YnN0aXR1dGUoVHlwZVBhcmFtZXRlciB2YXJpYWJsZSkgewogICAgdmFyIGVudmlyb25tZW50ID0gdGhpczsKICAgIHdoaWxlIChlbnZpcm9ubWVudCAhPSBudWxsKSB7CiAgICAgIHZhciByZXBsYWNlbWVudCA9IGVudmlyb25tZW50Lmxvb2t1cCh2YXJpYWJsZSwgY292YXJpYW50Q29udGV4dCk7CiAgICAgIGlmIChyZXBsYWNlbWVudCAhPSBudWxsKSB7CiAgICAgICAgYnVtcENvdW50ZXJzVW50aWwoZW52aXJvbm1lbnQpOwogICAgICAgIHJldHVybiByZXBsYWNlbWVudDsKICAgICAgfQogICAgICBlbnZpcm9ubWVudCA9IGVudmlyb25tZW50Lm91dGVyOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBEYXJ0VHlwZSB2aXNpdFR5cGVQYXJhbWV0ZXJUeXBlKFR5cGVQYXJhbWV0ZXJUeXBlIG5vZGUpIHsKICAgIHJldHVybiBnZXRTdWJzdGl0dXRlKG5vZGUucGFyYW1ldGVyKSA/PyBub2RlOwogIH0KfQoKY2xhc3MgX0RlZXBUeXBlU3Vic3RpdHV0b3IgZXh0ZW5kcyBfSW5uZXJUeXBlU3Vic3RpdHV0b3IgewogIGludCBkZXB0aCA9IDA7CiAgYm9vbCBpc0luZmluaXRlID0gZmFsc2U7CgogIF9EZWVwVHlwZVN1YnN0aXR1dG9yKE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gc3Vic3RpdHV0aW9uLAogICAgICBbX0RlZXBUeXBlU3Vic3RpdHV0b3Igb3V0ZXJdKQogICAgICA6IHN1cGVyKG91dGVyKSB7CiAgICB0aGlzLnN1YnN0aXR1dGlvbi5hZGRBbGwoc3Vic3RpdHV0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIF9EZWVwVHlwZVN1YnN0aXR1dG9yIG5ld0lubmVyRW52aXJvbm1lbnQoKSB7CiAgICByZXR1cm4gbmV3IF9EZWVwVHlwZVN1YnN0aXR1dG9yKDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fSwgdGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdFR5cGVQYXJhbWV0ZXJUeXBlKFR5cGVQYXJhbWV0ZXJUeXBlIG5vZGUpIHsKICAgIERhcnRUeXBlIHJlcGxhY2VtZW50ID0gZ2V0U3Vic3RpdHV0ZShub2RlLnBhcmFtZXRlcik7CiAgICBpZiAocmVwbGFjZW1lbnQgPT0gbnVsbCkgcmV0dXJuIG5vZGU7CiAgICBpZiAoaXNJbmZpbml0ZSkgcmV0dXJuIHJlcGxhY2VtZW50OwogICAgKytkZXB0aDsKICAgIGlmIChkZXB0aCA+IHN1YnN0aXR1dGlvbi5sZW5ndGgpIHsKICAgICAgaXNJbmZpbml0ZSA9IHRydWU7CiAgICAgIC0tZGVwdGg7CiAgICAgIHJldHVybiByZXBsYWNlbWVudDsKICAgIH0gZWxzZSB7CiAgICAgIHJlcGxhY2VtZW50ID0gdmlzaXQocmVwbGFjZW1lbnQpOwogICAgICAvLyBVcGRhdGUgdHlwZSB0byB0aGUgZnVsbHkgZmxlc2hlZC1vdXQgdHlwZS4KICAgICAgc3Vic3RpdHV0aW9uW25vZGUucGFyYW1ldGVyXSA9IHJlcGxhY2VtZW50OwogICAgICAtLWRlcHRoOwogICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CiAgICB9CiAgfQp9CgpjbGFzcyBfVHlwZVVuaWZpY2F0aW9uIHsKICAvLyBBY3ljbGljIGludmFyaWFudDogVGhlcmUgYXJlIG5vIGN5Y2xlcyBpbiB0aGUgbWFwLCB0aGF0IGlzLCBhbGwgdHlwZXMgY2FuCiAgLy8gICBiZSByZXNvbHZlZCB0byBmaW5pdGUgdHlwZXMgYnkgc3Vic3RpdHV0aW5nIGFsbCBjb250YWluZWQgdHlwZSB2YXJpYWJsZXMuCiAgLy8KICAvLyBUaGUgYWN5Y2xpYyBpbnZhcmlhbnQgaG9sZHMgZXZlcnl3aGVyZSBleGNlcHQgZHVyaW5nIGN5Y2xlIGRldGVjdGlvbi4KICAvLwogIC8vIEl0IGlzIG5vdCBjaGVja2VkIHRoYXQgdGhlIHN1YnN0aXR1dGlvbiBzYXRpc2ZpZXMgdGhlIGJvdW5kIG9uIHRoZSB0eXBlCiAgLy8gcGFyYW1ldGVyLgogIGZpbmFsIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gc3Vic3RpdHV0aW9uID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwoKICAvLy8gVmFyaWFibGVzIHRoYXQgbWF5IGJlIGFzc2lnbmVkIGZyZWVseSBpbiBvcmRlciB0byBvYnRhaW4gdW5pZmljYXRpb24uCiAgLy8vCiAgLy8vIFRoZXNlIGFyZSBzb21ldGltZXMgcmVmZXJyZWQgdG8gYXMgZXhpc3RlbnRpYWxseSBxdWFudGlmaWVkIHZhcmlhYmxlcy4KICBmaW5hbCBTZXQ8VHlwZVBhcmFtZXRlcj4gcXVhbnRpZmllZFZhcmlhYmxlczsKCiAgLy8vIFZhcmlhYmxlcyB0aGF0IGFyZSBib3VuZCBieSBhIGZ1bmN0aW9uIHR5cGUgaW5zaWRlIG9uZSBvZiB0aGUgdHlwZXMuCiAgLy8vIFRoZXNlIG1heSBub3Qgb2NjdXIgaW4gYSBzdWJzdGl0dXRpb24sIGJlY2F1c2UgdGhlc2UgdmFyaWFibGVzIGFyZSBub3QgaW4KICAvLy8gc2NvcGUgYXQgdGhlIGV4aXN0ZW50aWFsbHkgcXVhbnRpZmllZCB2YXJpYWJsZXMuCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCBzdXBwb3NlIHdlIGFyZSB0cnlpbmcgdG8gc2F0aXNmeSB0aGUgZXF1YXRpb246CiAgLy8vCiAgLy8vICAgICDiiINTLiA8RT4oRSwgUykgPT4gRSAgPSAgPEU+KEUsIEUpID0+IEUKICAvLy8KICAvLy8gVGhhdCBpcywgd2UgbXVzdCBjaG9vc2UgYFNgIHN1Y2ggdGhhdCB0aGUgZ2VuZXJpYyBmdW5jdGlvbiB0eXBlCiAgLy8vIGA8RT4oRSwgUykgPT4gRWAgYmVjb21lcyBgPEU+KEUsIEUpID0+IEVgLiAgQ2hvb3NpbmcgYFMgPSBFYCBpcyBub3QgYQogIC8vLyB2YWxpZCBzb2x1dGlvbiwgYmVjYXVzZSBgRWAgaXMgbm90IGluIHNjb3BlIHdoZXJlIGBTYCBpcyBxdWFudGlmaWVkLgogIC8vLyBUaGUgdHdvIGZ1bmN0aW9uIHR5cGVzIGNhbm5vdCBiZSB1bmlmaWVkLgogIGZpbmFsIFNldDxUeXBlUGFyYW1ldGVyPiBfdW5pdmVyc2FsbHlRdWFudGlmaWVkVmFyaWFibGVzID0KICAgICAgbmV3IFNldDxUeXBlUGFyYW1ldGVyPigpOwoKICBib29sIHN1Y2Nlc3MgPSB0cnVlOwoKICBfVHlwZVVuaWZpY2F0aW9uKERhcnRUeXBlIHR5cGUxLCBEYXJ0VHlwZSB0eXBlMiwgdGhpcy5xdWFudGlmaWVkVmFyaWFibGVzKSB7CiAgICBfdW5pZnkodHlwZTEsIHR5cGUyKTsKICAgIGlmIChzdWNjZXNzICYmIHN1YnN0aXR1dGlvbi5sZW5ndGggPj0gMikgewogICAgICBmb3IgKHZhciBrZXkgaW4gc3Vic3RpdHV0aW9uLmtleXMpIHsKICAgICAgICBzdWJzdGl0dXRpb25ba2V5XSA9IHN1YnN0aXR1dGVEZWVwKHN1YnN0aXR1dGlvbltrZXldLCBzdWJzdGl0dXRpb24pOwogICAgICB9CiAgICB9CiAgfQoKICBEYXJ0VHlwZSBfc3Vic3RpdHV0ZUhlYWQoVHlwZVBhcmFtZXRlclR5cGUgdHlwZSkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc3Vic3RpdHV0aW9uLmxlbmd0aDsgKytpKSB7CiAgICAgIERhcnRUeXBlIG5leHRUeXBlID0gc3Vic3RpdHV0aW9uW3R5cGUucGFyYW1ldGVyXTsKICAgICAgaWYgKG5leHRUeXBlID09IG51bGwpIHJldHVybiB0eXBlOwogICAgICBpZiAobmV4dFR5cGUgaXMgVHlwZVBhcmFtZXRlclR5cGUpIHsKICAgICAgICB0eXBlID0gbmV4dFR5cGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG5leHRUeXBlOwogICAgICB9CiAgICB9CiAgICAvLyBUaGUgY3ljbGUgc2hvdWxkIGhhdmUgYmVlbiBmb3VuZCBieSBfdHJ5U3Vic3RpdHV0aW9uIHdoZW4gdGhlIGN5Y2xlCiAgICAvLyB3YXMgY3JlYXRlZC4KICAgIHRocm93ICdVbmV4cGVjdGVkIGN5Y2xlIGZvdW5kIGR1cmluZyB1bmlmaWNhdGlvbic7CiAgfQoKICBib29sIF91bmlmeShEYXJ0VHlwZSB0eXBlMSwgRGFydFR5cGUgdHlwZTIpIHsKICAgIGlmICghc3VjY2VzcykgcmV0dXJuIGZhbHNlOwogICAgdHlwZTEgPSB0eXBlMSBpcyBUeXBlUGFyYW1ldGVyVHlwZSA/IF9zdWJzdGl0dXRlSGVhZCh0eXBlMSkgOiB0eXBlMTsKICAgIHR5cGUyID0gdHlwZTIgaXMgVHlwZVBhcmFtZXRlclR5cGUgPyBfc3Vic3RpdHV0ZUhlYWQodHlwZTIpIDogdHlwZTI7CiAgICBpZiAodHlwZTEgaXMgRHluYW1pY1R5cGUgJiYgdHlwZTIgaXMgRHluYW1pY1R5cGUpIHJldHVybiB0cnVlOwogICAgaWYgKHR5cGUxIGlzIFZvaWRUeXBlICYmIHR5cGUyIGlzIFZvaWRUeXBlKSByZXR1cm4gdHJ1ZTsKICAgIGlmICh0eXBlMSBpcyBJbnZhbGlkVHlwZSAmJiB0eXBlMiBpcyBJbnZhbGlkVHlwZSkgcmV0dXJuIHRydWU7CiAgICBpZiAodHlwZTEgaXMgQm90dG9tVHlwZSAmJiB0eXBlMiBpcyBCb3R0b21UeXBlKSByZXR1cm4gdHJ1ZTsKICAgIGlmICh0eXBlMSBpcyBJbnRlcmZhY2VUeXBlICYmIHR5cGUyIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgaWYgKHR5cGUxLmNsYXNzTm9kZSAhPSB0eXBlMi5jbGFzc05vZGUpIHJldHVybiBfZmFpbCgpOwogICAgICBhc3NlcnQodHlwZTEudHlwZUFyZ3VtZW50cy5sZW5ndGggPT0gdHlwZTIudHlwZUFyZ3VtZW50cy5sZW5ndGgpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGUxLnR5cGVBcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgICBpZiAoIV91bmlmeSh0eXBlMS50eXBlQXJndW1lbnRzW2ldLCB0eXBlMi50eXBlQXJndW1lbnRzW2ldKSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmICh0eXBlMSBpcyBGdW5jdGlvblR5cGUgJiYgdHlwZTIgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICAgIGlmICh0eXBlMS50eXBlUGFyYW1ldGVycy5sZW5ndGggIT0gdHlwZTIudHlwZVBhcmFtZXRlcnMubGVuZ3RoIHx8CiAgICAgICAgICB0eXBlMS5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGggIT0KICAgICAgICAgICAgICB0eXBlMi5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGggfHwKICAgICAgICAgIHR5cGUxLm5hbWVkUGFyYW1ldGVycy5sZW5ndGggIT0gdHlwZTIubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCB8fAogICAgICAgICAgdHlwZTEucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCAhPSB0eXBlMi5yZXF1aXJlZFBhcmFtZXRlckNvdW50KSB7CiAgICAgICAgcmV0dXJuIF9mYWlsKCk7CiAgICAgIH0KICAgICAgLy8gV2hlbiB1bmlmeWluZyB0d28gZ2VuZXJpYyBmdW5jdGlvbnMsIHRyYW5zZm9ybSB0aGUgZXF1YXRpb24gbGlrZSB0aGlzOgogICAgICAvLwogICAgICAvLyAgICDiiINTLiA8RT4oZm4xKSA9IDxUPihmbjIpCiAgICAgIC8vICAgICAgPT0+CiAgICAgIC8vICAgIOKIg1MuIOKIgEcuIGZuMVtHL0VdID0gZm4yW0cvVF0KICAgICAgLy8KICAgICAgLy8gVGhhdCBpcywgYXNzdW1lIHNvbWUgZml4ZWQgaWRlbnRpY2FsIGNob2ljZSBvZiB0eXBlIHBhcmFtZXRlcnMgZm9yIGJvdGgKICAgICAgLy8gZnVuY3Rpb25zIGFuZCB0cnkgdG8gdW5pZnkgdGhlIGluc3RhbnRpYXRlZCBmdW5jdGlvbiB0eXBlcy4KICAgICAgYXNzZXJ0KCF0eXBlMS50eXBlUGFyYW1ldGVycy5hbnkocXVhbnRpZmllZFZhcmlhYmxlcy5jb250YWlucykpOwogICAgICBhc3NlcnQoIXR5cGUyLnR5cGVQYXJhbWV0ZXJzLmFueShxdWFudGlmaWVkVmFyaWFibGVzLmNvbnRhaW5zKSk7CiAgICAgIHZhciBsZWZ0SW5zdGFuY2UgPSA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+e307CiAgICAgIHZhciByaWdodEluc3RhbmNlID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGUxLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgdmFyIGluc3RhbnRpYXRvciA9IG5ldyBUeXBlUGFyYW1ldGVyKHR5cGUxLnR5cGVQYXJhbWV0ZXJzW2ldLm5hbWUpOwogICAgICAgIHZhciBpbnN0YW50aWF0b3JUeXBlID0gbmV3IFR5cGVQYXJhbWV0ZXJUeXBlKGluc3RhbnRpYXRvcik7CiAgICAgICAgbGVmdEluc3RhbmNlW3R5cGUxLnR5cGVQYXJhbWV0ZXJzW2ldXSA9IGluc3RhbnRpYXRvclR5cGU7CiAgICAgICAgcmlnaHRJbnN0YW5jZVt0eXBlMi50eXBlUGFyYW1ldGVyc1tpXV0gPSBpbnN0YW50aWF0b3JUeXBlOwogICAgICAgIF91bml2ZXJzYWxseVF1YW50aWZpZWRWYXJpYWJsZXMuYWRkKGluc3RhbnRpYXRvcik7CiAgICAgIH0KICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlMS50eXBlUGFyYW1ldGVycy5sZW5ndGg7ICsraSkgewogICAgICAgIHZhciBsZWZ0ID0gc3Vic3RpdHV0ZSh0eXBlMS50eXBlUGFyYW1ldGVyc1tpXS5ib3VuZCwgbGVmdEluc3RhbmNlKTsKICAgICAgICB2YXIgcmlnaHQgPSBzdWJzdGl0dXRlKHR5cGUyLnR5cGVQYXJhbWV0ZXJzW2ldLmJvdW5kLCByaWdodEluc3RhbmNlKTsKICAgICAgICBpZiAoIV91bmlmeShsZWZ0LCByaWdodCkpIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGUxLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgdmFyIGxlZnQgPSBzdWJzdGl0dXRlKHR5cGUxLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldLCBsZWZ0SW5zdGFuY2UpOwogICAgICAgIHZhciByaWdodCA9IHN1YnN0aXR1dGUodHlwZTIucG9zaXRpb25hbFBhcmFtZXRlcnNbaV0sIHJpZ2h0SW5zdGFuY2UpOwogICAgICAgIGlmICghX3VuaWZ5KGxlZnQsIHJpZ2h0KSkgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZTEubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgaWYgKHR5cGUxLm5hbWVkUGFyYW1ldGVyc1tpXS5uYW1lICE9IHR5cGUyLm5hbWVkUGFyYW1ldGVyc1tpXS5uYW1lKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHZhciBsZWZ0ID0gc3Vic3RpdHV0ZSh0eXBlMS5uYW1lZFBhcmFtZXRlcnNbaV0udHlwZSwgbGVmdEluc3RhbmNlKTsKICAgICAgICB2YXIgcmlnaHQgPSBzdWJzdGl0dXRlKHR5cGUyLm5hbWVkUGFyYW1ldGVyc1tpXS50eXBlLCByaWdodEluc3RhbmNlKTsKICAgICAgICBpZiAoIV91bmlmeShsZWZ0LCByaWdodCkpIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICB2YXIgbGVmdFJldHVybiA9IHN1YnN0aXR1dGUodHlwZTEucmV0dXJuVHlwZSwgbGVmdEluc3RhbmNlKTsKICAgICAgdmFyIHJpZ2h0UmV0dXJuID0gc3Vic3RpdHV0ZSh0eXBlMi5yZXR1cm5UeXBlLCByaWdodEluc3RhbmNlKTsKICAgICAgaWYgKCFfdW5pZnkobGVmdFJldHVybiwgcmlnaHRSZXR1cm4pKSByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKHR5cGUxIGlzIFR5cGVQYXJhbWV0ZXJUeXBlICYmCiAgICAgICAgdHlwZTIgaXMgVHlwZVBhcmFtZXRlclR5cGUgJiYKICAgICAgICB0eXBlMS5wYXJhbWV0ZXIgPT0gdHlwZTIucGFyYW1ldGVyKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKHR5cGUxIGlzIFR5cGVQYXJhbWV0ZXJUeXBlICYmCiAgICAgICAgcXVhbnRpZmllZFZhcmlhYmxlcy5jb250YWlucyh0eXBlMS5wYXJhbWV0ZXIpKSB7CiAgICAgIHJldHVybiBfdHJ5U3Vic3RpdHV0aW9uKHR5cGUxLnBhcmFtZXRlciwgdHlwZTIpOwogICAgfQogICAgaWYgKHR5cGUyIGlzIFR5cGVQYXJhbWV0ZXJUeXBlICYmCiAgICAgICAgcXVhbnRpZmllZFZhcmlhYmxlcy5jb250YWlucyh0eXBlMi5wYXJhbWV0ZXIpKSB7CiAgICAgIHJldHVybiBfdHJ5U3Vic3RpdHV0aW9uKHR5cGUyLnBhcmFtZXRlciwgdHlwZTEpOwogICAgfQogICAgcmV0dXJuIF9mYWlsKCk7CiAgfQoKICBib29sIF90cnlTdWJzdGl0dXRpb24oVHlwZVBhcmFtZXRlciB2YXJpYWJsZSwgRGFydFR5cGUgdHlwZSkgewogICAgaWYgKGNvbnRhaW5zVHlwZVZhcmlhYmxlKHR5cGUsIF91bml2ZXJzYWxseVF1YW50aWZpZWRWYXJpYWJsZXMpKSB7CiAgICAgIHJldHVybiBfZmFpbCgpOwogICAgfQogICAgLy8gU2V0IHRoZSBwbGFpbiBzdWJzdGl0dXRpb24gZmlyc3QgYW5kIHRoZW4gZ2VuZXJhdGUgdGhlIGRlZXAKICAgIC8vIHN1YnN0aXR1dGlvbiB0byBkZXRlY3QgY3ljbGVzLgogICAgc3Vic3RpdHV0aW9uW3ZhcmlhYmxlXSA9IHR5cGU7CiAgICBEYXJ0VHlwZSBkZWVwU3Vic3RpdHV0ZSA9IHN1YnN0aXR1dGVEZWVwKHR5cGUsIHN1YnN0aXR1dGlvbik7CiAgICBpZiAoZGVlcFN1YnN0aXR1dGUgPT0gbnVsbCkgcmV0dXJuIF9mYWlsKCk7CiAgICBzdWJzdGl0dXRpb25bdmFyaWFibGVdID0gZGVlcFN1YnN0aXR1dGU7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGJvb2wgX2ZhaWwoKSB7CiAgICByZXR1cm4gc3VjY2VzcyA9IGZhbHNlOwogIH0KfQoKY2xhc3MgX09jY3VycmVuY2VWaXNpdG9yIGV4dGVuZHMgRGFydFR5cGVWaXNpdG9yPGJvb2w+IHsKICBmaW5hbCBTZXQ8VHlwZVBhcmFtZXRlcj4gdmFyaWFibGVzOwoKICBfT2NjdXJyZW5jZVZpc2l0b3IodGhpcy52YXJpYWJsZXMpOwoKICBib29sIHZpc2l0KERhcnRUeXBlIG5vZGUpID0+IG5vZGUuYWNjZXB0KHRoaXMpOwoKICBib29sIHZpc2l0TmFtZWRUeXBlKE5hbWVkVHlwZSBub2RlKSB7CiAgICByZXR1cm4gdmlzaXQobm9kZS50eXBlKTsKICB9CgogIGJvb2wgdmlzaXRJbnZhbGlkVHlwZShJbnZhbGlkVHlwZSBub2RlKSA9PiBmYWxzZTsKICBib29sIHZpc2l0RHluYW1pY1R5cGUoRHluYW1pY1R5cGUgbm9kZSkgPT4gZmFsc2U7CiAgYm9vbCB2aXNpdFZvaWRUeXBlKFZvaWRUeXBlIG5vZGUpID0+IGZhbHNlOwoKICBib29sIHZpc2l0SW50ZXJmYWNlVHlwZShJbnRlcmZhY2VUeXBlIG5vZGUpIHsKICAgIHJldHVybiBub2RlLnR5cGVBcmd1bWVudHMuYW55KHZpc2l0KTsKICB9CgogIGJvb2wgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSBub2RlKSB7CiAgICByZXR1cm4gbm9kZS50eXBlQXJndW1lbnRzLmFueSh2aXNpdCk7CiAgfQoKICBib29sIHZpc2l0RnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSBub2RlKSB7CiAgICByZXR1cm4gbm9kZS50eXBlUGFyYW1ldGVycy5hbnkoaGFuZGxlVHlwZVBhcmFtZXRlcikgfHwKICAgICAgICBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmFueSh2aXNpdCkgfHwKICAgICAgICBub2RlLm5hbWVkUGFyYW1ldGVycy5hbnkodmlzaXROYW1lZFR5cGUpIHx8CiAgICAgICAgdmlzaXQobm9kZS5yZXR1cm5UeXBlKTsKICB9CgogIGJvb2wgdmlzaXRUeXBlUGFyYW1ldGVyVHlwZShUeXBlUGFyYW1ldGVyVHlwZSBub2RlKSB7CiAgICByZXR1cm4gdmFyaWFibGVzID09IG51bGwgfHwgdmFyaWFibGVzLmNvbnRhaW5zKG5vZGUucGFyYW1ldGVyKTsKICB9CgogIGJvb2wgaGFuZGxlVHlwZVBhcmFtZXRlcihUeXBlUGFyYW1ldGVyIG5vZGUpIHsKICAgIGFzc2VydCghdmFyaWFibGVzLmNvbnRhaW5zKG5vZGUpKTsKICAgIGlmIChub2RlLmJvdW5kLmFjY2VwdCh0aGlzKSkgcmV0dXJuIHRydWU7CiAgICBpZiAobm9kZS5kZWZhdWx0VHlwZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gbm9kZS5kZWZhdWx0VHlwZS5hY2NlcHQodGhpcyk7CiAgfQp9CoLnAE5OPB0BEwFQKwRIPARLTzlQKUICAU81BDRCJCo4PgIBSE0sLy0ELz0EEQIBT1AOBFAcBE1EBExPGwRPIBlAKTwoMQIBUQRNOEknOAIBUEkZBEg/BCgESwQuSks+KU5JOAIBSzEETFFROk8XKTRIBDRJSzkQBE4CARwxIwFEAUs6I0srOxNLAUsBLzYoAS4zBAIBTC9MAR4YAUABQkI4KwQBTzMEAUhLHwZLTCgGTiwvUEsvBAFLLjtMQ0cEAUYpPkdDPQQBSCk6R0M/BAFJDyE+RkYvPxRMBAFLLjVKMQQBTkwgOUotMy4GMz0GLwQBUB8GUEhNTCZJPDw1BAFEAUhBBAEyQgQCAS9HAR0BRS0EAQxPAQw5AQwtAgEuLCwBLAFFPQQBDDsCATEjAUkZGAYEAT4+BAE5LgQCATYWASkBRSZEBhEEAgEzJAEyAUU5NQQCATMBMxsmATMBRR80SwQCATdRAUABPiQEATkuNyUkMwYSBAIBRCAgASFGBAE9AUwWBk5NPBYBMCwEARoqBAEtMR1AKzkEAS0dIStIBAE2ATc3MTUBNDEdQCs9BAEwMR1AKz0EAUw8OAQBOAEyTk5JUR4HT1BPRjZMIjgcSUEdPzceQxwzG0kwPiooPSMEATQVHRkZBhkEATMcIkghKBwIJwYRBAE8MgQCATsRGwFCJBcsBAEML0gEAQw8OiooDScZDxoNKDQyDxoGBAIBGU9RBUsFTRBRAUwGTTABS1A3BkIGMAZGTEswPSABFwFPGi8rTQgGBAE1NTgpKxkPGQgGSxQ3BAEwIElJQz1DQTw+SD1HGAoIEwY6SC8zSkoYCFAJJBIoCVFFR0c2Nz5MREJDOwg+TE4wCERMTjAIP04YCkxOMAhDRToTBiYmLhMGJjk3BiY5NwYUBAFBRxYGQyYjQjAtEQQBERwEAgE5JgEmATIBKB0EATQ0LgEwKgQBLCoEAS47MDQgBAE4RAQBMScuMCoEAgEgcGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQtc2Rrcm9vdDovcGtnL2tlcm5lbC9saWIvdHlwZV9lbnZpcm9ubWVudC5kYXJ0sNEvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgpsaWJyYXJ5IGtlcm5lbC50eXBlX2Vudmlyb25tZW50OwoKaW1wb3J0ICdhc3QuZGFydCc7CmltcG9ydCAnY2xhc3NfaGllcmFyY2h5LmRhcnQnOwppbXBvcnQgJ2NvcmVfdHlwZXMuZGFydCc7CmltcG9ydCAndHlwZV9hbGdlYnJhLmRhcnQnOwoKaW1wb3J0ICdzcmMvaGllcmFyY2h5X2Jhc2VkX3R5cGVfZW52aXJvbm1lbnQuZGFydCcKICAgIHNob3cgSGllcmFyY2h5QmFzZWRUeXBlRW52aXJvbm1lbnQ7Cgp0eXBlZGVmIHZvaWQgRXJyb3JIYW5kbGVyKFRyZWVOb2RlIG5vZGUsIFN0cmluZyBtZXNzYWdlKTsKCmFic3RyYWN0IGNsYXNzIFR5cGVFbnZpcm9ubWVudCBleHRlbmRzIFN1YnR5cGVUZXN0ZXIgewogIGZpbmFsIENvcmVUeXBlcyBjb3JlVHlwZXM7CgogIEludGVyZmFjZVR5cGUgdGhpc1R5cGU7CgogIERhcnRUeXBlIHJldHVyblR5cGU7CiAgRGFydFR5cGUgeWllbGRUeXBlOwogIEFzeW5jTWFya2VyIGN1cnJlbnRBc3luY01hcmtlciA9IEFzeW5jTWFya2VyLlN5bmM7CgogIC8vLyBBbiBlcnJvciBoYW5kbGVyIGZvciB1c2UgaW4gZGVidWdnaW5nLCBvciBgbnVsbGAgaWYgdHlwZSBlcnJvcnMgc2hvdWxkIG5vdAogIC8vLyBiZSB0b2xlcmF0ZWQuICBTZWUgW3R5cGVFcnJvcl0uCiAgRXJyb3JIYW5kbGVyIGVycm9ySGFuZGxlcjsKCiAgVHlwZUVudmlyb25tZW50LmZyb21TdWJjbGFzcyh0aGlzLmNvcmVUeXBlcyk7CgogIGZhY3RvcnkgVHlwZUVudmlyb25tZW50KENvcmVUeXBlcyBjb3JlVHlwZXMsIENsYXNzSGllcmFyY2h5IGhpZXJhcmNoeSkgewogICAgcmV0dXJuIG5ldyBIaWVyYXJjaHlCYXNlZFR5cGVFbnZpcm9ubWVudChjb3JlVHlwZXMsIGhpZXJhcmNoeSk7CiAgfQoKICBJbnRlcmZhY2VUeXBlIGdldCBvYmplY3RUeXBlID0+IGNvcmVUeXBlcy5vYmplY3RDbGFzcy5yYXdUeXBlOwogIEludGVyZmFjZVR5cGUgZ2V0IG51bGxUeXBlID0+IGNvcmVUeXBlcy5udWxsQ2xhc3MucmF3VHlwZTsKICBJbnRlcmZhY2VUeXBlIGdldCBib29sVHlwZSA9PiBjb3JlVHlwZXMuYm9vbENsYXNzLnJhd1R5cGU7CiAgSW50ZXJmYWNlVHlwZSBnZXQgaW50VHlwZSA9PiBjb3JlVHlwZXMuaW50Q2xhc3MucmF3VHlwZTsKICBJbnRlcmZhY2VUeXBlIGdldCBudW1UeXBlID0+IGNvcmVUeXBlcy5udW1DbGFzcy5yYXdUeXBlOwogIEludGVyZmFjZVR5cGUgZ2V0IGRvdWJsZVR5cGUgPT4gY29yZVR5cGVzLmRvdWJsZUNsYXNzLnJhd1R5cGU7CiAgSW50ZXJmYWNlVHlwZSBnZXQgc3RyaW5nVHlwZSA9PiBjb3JlVHlwZXMuc3RyaW5nQ2xhc3MucmF3VHlwZTsKICBJbnRlcmZhY2VUeXBlIGdldCBzeW1ib2xUeXBlID0+IGNvcmVUeXBlcy5zeW1ib2xDbGFzcy5yYXdUeXBlOwogIEludGVyZmFjZVR5cGUgZ2V0IHR5cGVUeXBlID0+IGNvcmVUeXBlcy50eXBlQ2xhc3MucmF3VHlwZTsKICBJbnRlcmZhY2VUeXBlIGdldCByYXdGdW5jdGlvblR5cGUgPT4gY29yZVR5cGVzLmZ1bmN0aW9uQ2xhc3MucmF3VHlwZTsKCiAgQ2xhc3MgZ2V0IGludENsYXNzID0+IGNvcmVUeXBlcy5pbnRDbGFzczsKICBDbGFzcyBnZXQgbnVtQ2xhc3MgPT4gY29yZVR5cGVzLm51bUNsYXNzOwogIENsYXNzIGdldCBmdXR1cmVPckNsYXNzID0+IGNvcmVUeXBlcy5mdXR1cmVPckNsYXNzOwoKICBJbnRlcmZhY2VUeXBlIGxpdGVyYWxMaXN0VHlwZShEYXJ0VHlwZSBlbGVtZW50VHlwZSkgewogICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlKGNvcmVUeXBlcy5saXN0Q2xhc3MsIDxEYXJ0VHlwZT5bZWxlbWVudFR5cGVdKTsKICB9CgogIEludGVyZmFjZVR5cGUgbGl0ZXJhbFNldFR5cGUoRGFydFR5cGUgZWxlbWVudFR5cGUpIHsKICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVHlwZShjb3JlVHlwZXMuc2V0Q2xhc3MsIDxEYXJ0VHlwZT5bZWxlbWVudFR5cGVdKTsKICB9CgogIEludGVyZmFjZVR5cGUgbGl0ZXJhbE1hcFR5cGUoRGFydFR5cGUga2V5LCBEYXJ0VHlwZSB2YWx1ZSkgewogICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlKGNvcmVUeXBlcy5tYXBDbGFzcywgPERhcnRUeXBlPltrZXksIHZhbHVlXSk7CiAgfQoKICBJbnRlcmZhY2VUeXBlIGl0ZXJhYmxlVHlwZShEYXJ0VHlwZSB0eXBlKSB7CiAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUoY29yZVR5cGVzLml0ZXJhYmxlQ2xhc3MsIDxEYXJ0VHlwZT5bdHlwZV0pOwogIH0KCiAgSW50ZXJmYWNlVHlwZSBzdHJlYW1UeXBlKERhcnRUeXBlIHR5cGUpIHsKICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVHlwZShjb3JlVHlwZXMuc3RyZWFtQ2xhc3MsIDxEYXJ0VHlwZT5bdHlwZV0pOwogIH0KCiAgSW50ZXJmYWNlVHlwZSBmdXR1cmVUeXBlKERhcnRUeXBlIHR5cGUpIHsKICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVHlwZShjb3JlVHlwZXMuZnV0dXJlQ2xhc3MsIDxEYXJ0VHlwZT5bdHlwZV0pOwogIH0KCiAgLy8vIFJlbW92ZXMgYSBsZXZlbCBvZiBgRnV0dXJlPD5gIHR5cGVzIHdyYXBwaW5nIGEgdHlwZS4KICAvLy8KICAvLy8gVGhpcyBpbXBsZW1lbnRzIHRoZSBmdW5jdGlvbiBgZmxhdHRlbmAgZnJvbSB0aGUgc3BlYywgd2hpY2ggdW53cmFwcyBhCiAgLy8vIGxheWVyIG9mIEZ1dHVyZSBvciBGdXR1cmVPciBmcm9tIGEgdHlwZS4KICBEYXJ0VHlwZSB1bmZ1dHVyZVR5cGUoRGFydFR5cGUgdHlwZSkgewogICAgaWYgKHR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICBpZiAodHlwZS5jbGFzc05vZGUgPT0gY29yZVR5cGVzLmZ1dHVyZU9yQ2xhc3MgfHwKICAgICAgICAgIHR5cGUuY2xhc3NOb2RlID09IGNvcmVUeXBlcy5mdXR1cmVDbGFzcykgewogICAgICAgIHJldHVybiB0eXBlLnR5cGVBcmd1bWVudHNbMF07CiAgICAgIH0KICAgICAgLy8gSXQgaXMgYSBjb21waWxlLXRpbWUgZXJyb3IgdG8gaW1wbGVtZW50LCBleHRlbmQsIG9yIG1peGluIEZ1dHVyZU9yIHNvCiAgICAgIC8vIHdlIGFyZW4ndCBjb25jZXJuZWQgd2l0aCBpdC4gIElmIGEgY2xhc3MgaW1wbGVtZW50cyBtdWx0aXBsZQogICAgICAvLyBpbnN0YW50aWF0aW9ucyBvZiBGdXR1cmUsIGdldFR5cGVBc0luc3RhbmNlT2YgaXMgcmVzcG9uc2libGUgZm9yCiAgICAgIC8vIHBpY2tpbmcgdGhlIGxlYXN0IG9uZSBpbiB0aGUgc2Vuc2UgcmVxdWlyZWQgYnkgdGhlIHNwZWMuCiAgICAgIEludGVyZmFjZVR5cGUgZnV0dXJlID0gZ2V0VHlwZUFzSW5zdGFuY2VPZih0eXBlLCBjb3JlVHlwZXMuZnV0dXJlQ2xhc3MpOwogICAgICBpZiAoZnV0dXJlICE9IG51bGwpIHsKICAgICAgICByZXR1cm4gZnV0dXJlLnR5cGVBcmd1bWVudHNbMF07CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0eXBlOwogIH0KCiAgLy8vIENhbGxlZCBpZiB0aGUgY29tcHV0YXRpb24gb2YgYSBzdGF0aWMgdHlwZSBmYWlsZWQgZHVlIHRvIGEgdHlwZSBlcnJvci4KICAvLy8KICAvLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGluIHByb2R1Y3Rpb24uICBUaGUgZnJvbnRlbmQgc2hvdWxkIHJlcG9ydCB0eXBlCiAgLy8vIGVycm9ycywgYW5kIGVpdGhlciByZWNvdmVyIGZyb20gdGhlIGVycm9yIGR1cmluZyB0cmFuc2xhdGlvbiBvciBhYm9ydAogIC8vLyBjb21waWxhdGlvbiBpZiB1bmFibGUgdG8gcmVjb3Zlci4KICAvLy8KICAvLy8gQnkgZGVmYXVsdCwgdGhpcyB0aHJvd3MgYW4gZXhjZXB0aW9uLCBzaW5jZSBwcm9ncmFtcyBpbiBrZXJuZWwgYXJlIGFzc3VtZWQKICAvLy8gdG8gYmUgY29ycmVjdGx5IHR5cGVkLgogIC8vLwogIC8vLyBBbiBbZXJyb3JIYW5kbGVyXSBtYXkgYmUgcHJvdmlkZWQgaW4gb3JkZXIgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQKICAvLy8gYmVoYXZpb3IgYW5kIHRvbGVyYXRlIHRoZSBwcmVzZW5jZSBvZiB0eXBlIGVycm9ycy4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IKICAvLy8gZGVidWdnaW5nIElSIHByb2R1Y2VycyB3aGljaCBhcmUgcmVxdWlyZWQgdG8gcHJvZHVjZSBhIHN0cm9uZ2x5IHR5cGVkIElSLgogIHZvaWQgdHlwZUVycm9yKFRyZWVOb2RlIG5vZGUsIFN0cmluZyBtZXNzYWdlKSB7CiAgICBpZiAoZXJyb3JIYW5kbGVyICE9IG51bGwpIHsKICAgICAgZXJyb3JIYW5kbGVyKG5vZGUsIG1lc3NhZ2UpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgJyRtZXNzYWdlIGluICRub2RlJzsKICAgIH0KICB9CgogIC8vLyBUcnVlIGlmIFttZW1iZXJdIGlzIGEgYmluYXJ5IG9wZXJhdG9yIHRoYXQgcmV0dXJucyBhbiBgaW50YCBpZiBib3RoCiAgLy8vIG9wZXJhbmRzIGFyZSBgaW50YCwgYW5kIG90aGVyd2lzZSByZXR1cm5zIGBkb3VibGVgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY2FzZSBvZiB0eXBlLWJhc2VkIG92ZXJsb2FkaW5nLCB3aGljaCBpbiBEYXJ0IGlzIG9ubHkgc3VwcG9ydGVkCiAgLy8vIGJ5IGdpdmluZyBzcGVjaWFsIHRyZWF0bWVudCB0byBjZXJ0YWluIGFyaXRobWV0aWMgb3BlcmF0b3JzLgogIGJvb2wgaXNPdmVybG9hZGVkQXJpdGhtZXRpY09wZXJhdG9yKFByb2NlZHVyZSBtZW1iZXIpIHsKICAgIENsYXNzIGNsYXNzXyA9IG1lbWJlci5lbmNsb3NpbmdDbGFzczsKICAgIGlmIChjbGFzc18gPT0gY29yZVR5cGVzLmludENsYXNzIHx8IGNsYXNzXyA9PSBjb3JlVHlwZXMubnVtQ2xhc3MpIHsKICAgICAgU3RyaW5nIG5hbWUgPSBtZW1iZXIubmFtZS5uYW1lOwogICAgICByZXR1cm4gbmFtZSA9PSAnKycgfHwKICAgICAgICAgIG5hbWUgPT0gJy0nIHx8CiAgICAgICAgICBuYW1lID09ICcqJyB8fAogICAgICAgICAgbmFtZSA9PSAncmVtYWluZGVyJyB8fAogICAgICAgICAgbmFtZSA9PSAnJSc7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgc3RhdGljIHJldHVybiB0eXBlIG9mIGFuIG92ZXJsb2FkZWQgYXJpdGhtZXRpYyBvcGVyYXRvcgogIC8vLyAoc2VlIFtpc092ZXJsb2FkZWRBcml0aG1ldGljT3BlcmF0b3JdKSBnaXZlbiB0aGUgc3RhdGljIHR5cGUgb2YgdGhlCiAgLy8vIG9wZXJhbmRzLgogIC8vLwogIC8vLyBJZiBib3RoIHR5cGVzIGFyZSBgaW50YCwgdGhlIHJldHVybmVkIHR5cGUgaXMgYGludGAuCiAgLy8vIElmIGVpdGhlciB0eXBlIGlzIGBkb3VibGVgLCB0aGUgcmV0dXJuZWQgdHlwZSBpcyBgZG91YmxlYC4KICAvLy8gSWYgYm90aCB0eXBlcyByZWZlciB0byB0aGUgc2FtZSB0eXBlIHZhcmlhYmxlICh0eXBpY2FsbHkgd2l0aCBgbnVtYCBhcwogIC8vLyB0aGUgdXBwZXIgYm91bmQpLCB0aGVuIHRoYXQgdHlwZSB2YXJpYWJsZSBpcyByZXR1cm5lZC4KICAvLy8gT3RoZXJ3aXNlIGBudW1gIGlzIHJldHVybmVkLgogIERhcnRUeXBlIGdldFR5cGVPZk92ZXJsb2FkZWRBcml0aG1ldGljKERhcnRUeXBlIHR5cGUxLCBEYXJ0VHlwZSB0eXBlMikgewogICAgaWYgKHR5cGUxID09IHR5cGUyKSByZXR1cm4gdHlwZTE7CiAgICBpZiAodHlwZTEgPT0gZG91YmxlVHlwZSB8fCB0eXBlMiA9PSBkb3VibGVUeXBlKSByZXR1cm4gZG91YmxlVHlwZTsKICAgIHJldHVybiBudW1UeXBlOwogIH0KfQoKLy8vIFRoZSBwYXJ0IG9mIFtUeXBlRW52aXJvbm1lbnRdIHRoYXQgZGVhbHMgd2l0aCBzdWJ0eXBlIHRlc3RzLgovLy8KLy8vIFRoaXMgbGl2ZXMgaW4gYSBzZXBhcmF0ZSBjbGFzcyBzbyBpdCBjYW4gYmUgdGVzdGVkIGluZGVwZW5kZW50bHkgb2YgdGhlIFNESy4KYWJzdHJhY3QgY2xhc3MgU3VidHlwZVRlc3RlciB7CiAgSW50ZXJmYWNlVHlwZSBnZXQgb2JqZWN0VHlwZTsKICBJbnRlcmZhY2VUeXBlIGdldCBudWxsVHlwZTsKICBJbnRlcmZhY2VUeXBlIGdldCByYXdGdW5jdGlvblR5cGU7CiAgQ2xhc3MgZ2V0IGZ1dHVyZU9yQ2xhc3M7CiAgSW50ZXJmYWNlVHlwZSBmdXR1cmVUeXBlKERhcnRUeXBlIHR5cGUpOwoKICBzdGF0aWMgTGlzdDxPYmplY3Q+IHR5cGVDaGVja3M7CgogIEludGVyZmFjZVR5cGUgZ2V0VHlwZUFzSW5zdGFuY2VPZihJbnRlcmZhY2VUeXBlIHR5cGUsIENsYXNzIHN1cGVyY2xhc3MpOwoKICAvLy8gRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gdHlwZSBpcyBhdCB0aGUgdG9wIG9mIHRoZSB0eXBlIGhpZXJhcmNoeS4gIE1heSBiZQogIC8vLyBvdmVycmlkZGVuIGluIHN1YmNsYXNzZXMuCiAgYm9vbCBpc1RvcChEYXJ0VHlwZSB0eXBlKSA9PgogICAgICB0eXBlIGlzIER5bmFtaWNUeXBlIHx8IHR5cGUgaXMgVm9pZFR5cGUgfHwgdHlwZSA9PSBvYmplY3RUeXBlOwoKICAvLy8gQ2FuIGJlIHVzZSB0byBjb2xsZWN0IHR5cGUgY2hlY2tzLiBUbyB1c2U6CiAgLy8vIDEuIFJlbmFtZSBgaXNTdWJ0eXBlT2ZgIHRvIGBfaXNTdWJ0eXBlT2ZgLgogIC8vLyAyLiBSZW5hbWUgYF9jb2xsZWN0X2lzU3VidHlwZU9mYCB0byBgaXNTdWJ0eXBlT2ZgLgogIC8vLyAzLiBDb21tZW50IG91dCB0aGUgY2FsbCB0byBgX2lzU3VidHlwZU9mYCBiZWxvdy4KICAvLyBpZ25vcmU6dW51c2VkX2VsZW1lbnQKICBib29sIF9jb2xsZWN0X2lzU3VidHlwZU9mKERhcnRUeXBlIHN1YnR5cGUsIERhcnRUeXBlIHN1cGVydHlwZSkgewogICAgYm9vbCByZXN1bHQgPSB0cnVlOwogICAgLy8gcmVzdWx0ID0gX2lzU3VidHlwZU9mKHN1YnR5cGUsIHN1cGVydHlwZSk7CiAgICB0eXBlQ2hlY2tzID8/PSA8T2JqZWN0PltdOwogICAgdHlwZUNoZWNrcy5hZGQoW3N1YnR5cGUsIHN1cGVydHlwZSwgcmVzdWx0XSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiBbc3VidHlwZV0gaXMgYSBzdWJ0eXBlIG9mIFtzdXBlcnR5cGVdLgogIGJvb2wgaXNTdWJ0eXBlT2YoRGFydFR5cGUgc3VidHlwZSwgRGFydFR5cGUgc3VwZXJ0eXBlKSB7CiAgICBzdWJ0eXBlID0gc3VidHlwZS51bmFsaWFzOwogICAgc3VwZXJ0eXBlID0gc3VwZXJ0eXBlLnVuYWxpYXM7CiAgICBpZiAoaWRlbnRpY2FsKHN1YnR5cGUsIHN1cGVydHlwZSkpIHJldHVybiB0cnVlOwogICAgaWYgKHN1YnR5cGUgaXMgQm90dG9tVHlwZSkgcmV0dXJuIHRydWU7CiAgICBpZiAoc3VidHlwZSA9PSBudWxsVHlwZSkgewogICAgICAvLyBTZWUgcnVsZSA0IG9mIHRoZSBzdWJ0eXBlIHJ1bGVzIGZyb20gdGhlIERhcnQgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbi4KICAgICAgcmV0dXJuIHN1cGVydHlwZSBpcyEgQm90dG9tVHlwZTsKICAgIH0KICAgIGlmIChpc1RvcChzdXBlcnR5cGUpKSByZXR1cm4gdHJ1ZTsKCiAgICAvLyBIYW5kbGUgRnV0dXJlT3I8VD4gdW5pb24gdHlwZS4KICAgIGlmIChzdWJ0eXBlIGlzIEludGVyZmFjZVR5cGUgJiYKICAgICAgICBpZGVudGljYWwoc3VidHlwZS5jbGFzc05vZGUsIGZ1dHVyZU9yQ2xhc3MpKSB7CiAgICAgIHZhciBzdWJ0eXBlQXJnID0gc3VidHlwZS50eXBlQXJndW1lbnRzWzBdOwogICAgICBpZiAoc3VwZXJ0eXBlIGlzIEludGVyZmFjZVR5cGUgJiYKICAgICAgICAgIGlkZW50aWNhbChzdXBlcnR5cGUuY2xhc3NOb2RlLCBmdXR1cmVPckNsYXNzKSkgewogICAgICAgIHZhciBzdXBlcnR5cGVBcmcgPSBzdXBlcnR5cGUudHlwZUFyZ3VtZW50c1swXTsKICAgICAgICAvLyBGdXR1cmVPcjxBPiA8OiBGdXR1cmVPcjxCPiBpZmYgQSA8OiBCCiAgICAgICAgcmV0dXJuIGlzU3VidHlwZU9mKHN1YnR5cGVBcmcsIHN1cGVydHlwZUFyZyk7CiAgICAgIH0KCiAgICAgIC8vIGdpdmVuIHQxIGlzIEZ1dHVyZTxBPiB8IEEsIHRoZW46CiAgICAgIC8vIChGdXR1cmU8QT4gfCBBKSA8OiB0MiBpZmYgRnV0dXJlPEE+IDw6IHQyIGFuZCBBIDw6IHQyLgogICAgICB2YXIgc3VidHlwZUZ1dHVyZSA9IGZ1dHVyZVR5cGUoc3VidHlwZUFyZyk7CiAgICAgIHJldHVybiBpc1N1YnR5cGVPZihzdWJ0eXBlRnV0dXJlLCBzdXBlcnR5cGUpICYmCiAgICAgICAgICBpc1N1YnR5cGVPZihzdWJ0eXBlQXJnLCBzdXBlcnR5cGUpOwogICAgfQoKICAgIGlmIChzdXBlcnR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJgogICAgICAgIGlkZW50aWNhbChzdXBlcnR5cGUuY2xhc3NOb2RlLCBmdXR1cmVPckNsYXNzKSkgewogICAgICAvLyBnaXZlbiB0MiBpcyBGdXR1cmU8QT4gfCBBLCB0aGVuOgogICAgICAvLyB0MSA8OiAoRnV0dXJlPEE+IHwgQSkgaWZmIHQxIDw6IEZ1dHVyZTxBPiBvciB0MSA8OiBBCiAgICAgIHZhciBzdXBlcnR5cGVBcmcgPSBzdXBlcnR5cGUudHlwZUFyZ3VtZW50c1swXTsKICAgICAgdmFyIHN1cGVydHlwZUZ1dHVyZSA9IGZ1dHVyZVR5cGUoc3VwZXJ0eXBlQXJnKTsKICAgICAgcmV0dXJuIGlzU3VidHlwZU9mKHN1YnR5cGUsIHN1cGVydHlwZUZ1dHVyZSkgfHwKICAgICAgICAgIGlzU3VidHlwZU9mKHN1YnR5cGUsIHN1cGVydHlwZUFyZyk7CiAgICB9CgogICAgaWYgKHN1YnR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJiBzdXBlcnR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICB2YXIgdXBjYXN0VHlwZSA9IGdldFR5cGVBc0luc3RhbmNlT2Yoc3VidHlwZSwgc3VwZXJ0eXBlLmNsYXNzTm9kZSk7CiAgICAgIGlmICh1cGNhc3RUeXBlID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1cGNhc3RUeXBlLnR5cGVBcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgICAvLyBUZXJtaW5hdGlvbjogdGhlICdzdXBlcnR5cGUnIHBhcmFtZXRlciBkZWNyZWFzZXMgaW4gc2l6ZS4KICAgICAgICBpZiAoIWlzU3VidHlwZU9mKAogICAgICAgICAgICB1cGNhc3RUeXBlLnR5cGVBcmd1bWVudHNbaV0sIHN1cGVydHlwZS50eXBlQXJndW1lbnRzW2ldKSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChzdWJ0eXBlIGlzIFR5cGVQYXJhbWV0ZXJUeXBlKSB7CiAgICAgIGlmIChzdXBlcnR5cGUgaXMgVHlwZVBhcmFtZXRlclR5cGUgJiYKICAgICAgICAgIHN1YnR5cGUucGFyYW1ldGVyID09IHN1cGVydHlwZS5wYXJhbWV0ZXIpIHsKICAgICAgICBpZiAoc3VwZXJ0eXBlLnByb21vdGVkQm91bmQgIT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIGlzU3VidHlwZU9mKHN1YnR5cGUuYm91bmQsIHN1cGVydHlwZS5ib3VuZCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIFByb21vdGVkIGJvdW5kIHNob3VsZCBhbHdheXMgYmUgYSBzdWJ0eXBlIG9mIHRoZSBkZWNsYXJlZCBib3VuZC4KICAgICAgICAgIGFzc2VydChzdWJ0eXBlLnByb21vdGVkQm91bmQgPT0gbnVsbCB8fAogICAgICAgICAgICAgIGlzU3VidHlwZU9mKHN1YnR5cGUuYm91bmQsIHN1cGVydHlwZS5ib3VuZCkpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIFRlcm1pbmF0aW9uOiBpZiB0aGVyZSBhcmUgbm8gY3ljbGljYWxseSBib3VuZCB0eXBlIHBhcmFtZXRlcnMsIHRoaXMKICAgICAgLy8gcmVjdXJzaXZlIGNhbGwgY2FuIG9ubHkgb2NjdXIgYSBmaW5pdGUgbnVtYmVyIG9mIHRpbWVzLCBiZWZvcmUgcmVhY2hpbmcKICAgICAgLy8gYSBzaHJpbmtpbmcgcmVjdXJzaXZlIGNhbGwgKG9yIHRlcm1pbmF0aW5nKS4KICAgICAgcmV0dXJuIGlzU3VidHlwZU9mKHN1YnR5cGUuYm91bmQsIHN1cGVydHlwZSk7CiAgICB9CiAgICBpZiAoc3VidHlwZSBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgaWYgKHN1cGVydHlwZSA9PSByYXdGdW5jdGlvblR5cGUpIHJldHVybiB0cnVlOwogICAgICBpZiAoc3VwZXJ0eXBlIGlzIEZ1bmN0aW9uVHlwZSkgewogICAgICAgIHJldHVybiBfaXNGdW5jdGlvblN1YnR5cGVPZihzdWJ0eXBlLCBzdXBlcnR5cGUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBib29sIF9pc0Z1bmN0aW9uU3VidHlwZU9mKEZ1bmN0aW9uVHlwZSBzdWJ0eXBlLCBGdW5jdGlvblR5cGUgc3VwZXJ0eXBlKSB7CiAgICBpZiAoc3VidHlwZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50ID4gc3VwZXJ0eXBlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKHN1YnR5cGUucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoIDwKICAgICAgICBzdXBlcnR5cGUucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChzdWJ0eXBlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCAhPSBzdXBlcnR5cGUudHlwZVBhcmFtZXRlcnMubGVuZ3RoKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChzdWJ0eXBlLnR5cGVQYXJhbWV0ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgdmFyIHN1YnN0aXR1dGlvbiA9IDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdWJ0eXBlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgdmFyIHN1YlBhcmFtZXRlciA9IHN1YnR5cGUudHlwZVBhcmFtZXRlcnNbaV07CiAgICAgICAgdmFyIHN1cGVyUGFyYW1ldGVyID0gc3VwZXJ0eXBlLnR5cGVQYXJhbWV0ZXJzW2ldOwogICAgICAgIHN1YnN0aXR1dGlvbltzdWJQYXJhbWV0ZXJdID0gbmV3IFR5cGVQYXJhbWV0ZXJUeXBlKHN1cGVyUGFyYW1ldGVyKTsKICAgICAgfQogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN1YnR5cGUudHlwZVBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKICAgICAgICB2YXIgc3ViUGFyYW1ldGVyID0gc3VidHlwZS50eXBlUGFyYW1ldGVyc1tpXTsKICAgICAgICB2YXIgc3VwZXJQYXJhbWV0ZXIgPSBzdXBlcnR5cGUudHlwZVBhcmFtZXRlcnNbaV07CiAgICAgICAgdmFyIHN1YkJvdW5kID0gc3Vic3RpdHV0ZShzdWJQYXJhbWV0ZXIuYm91bmQsIHN1YnN0aXR1dGlvbik7CiAgICAgICAgLy8gVGVybWluYXRpb246IGlmIHRoZXJlIGFyZSBubyBjeWNsaWNhbGx5IGJvdW5kIHR5cGUgcGFyYW1ldGVycywgdGhpcwogICAgICAgIC8vIHJlY3Vyc2l2ZSBjYWxsIGNhbiBvbmx5IG9jY3VyIGEgZmluaXRlIG51bWJlciBvZiB0aW1lcyBiZWZvcmUKICAgICAgICAvLyByZWFjaGluZyBhIHNocmlua2luZyByZWN1cnNpdmUgY2FsbCAob3IgdGVybWluYXRpbmcpLgogICAgICAgIC8vIFRPRE8oZG1pdHJ5YXMpOiBSZXBsYWNlIGl0IHdpdGggb25lIHJlY3Vyc2l2ZSBkZXNjZW50IGluc3RlYWQgb2YgdHdvLgogICAgICAgIGlmICghaXNTdWJ0eXBlT2Yoc3VwZXJQYXJhbWV0ZXIuYm91bmQsIHN1YkJvdW5kKSB8fAogICAgICAgICAgICAhaXNTdWJ0eXBlT2Yoc3ViQm91bmQsIHN1cGVyUGFyYW1ldGVyLmJvdW5kKSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBzdWJ0eXBlID0gc3Vic3RpdHV0ZShzdWJ0eXBlLndpdGhvdXRUeXBlUGFyYW1ldGVycywgc3Vic3RpdHV0aW9uKTsKICAgIH0KICAgIGlmICghaXNTdWJ0eXBlT2Yoc3VidHlwZS5yZXR1cm5UeXBlLCBzdXBlcnR5cGUucmV0dXJuVHlwZSkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdXBlcnR5cGUucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKICAgICAgdmFyIHN1cGVydHlwZVBhcmFtZXRlciA9IHN1cGVydHlwZS5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXTsKICAgICAgdmFyIHN1YnR5cGVQYXJhbWV0ZXIgPSBzdWJ0eXBlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldOwogICAgICAvLyBUZXJtaW5hdGlvbjogQm90aCB0eXBlcyBzaHJpbmsgaW4gc2l6ZS4KICAgICAgaWYgKCFpc1N1YnR5cGVPZihzdXBlcnR5cGVQYXJhbWV0ZXIsIHN1YnR5cGVQYXJhbWV0ZXIpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICBpbnQgc3VidHlwZU5hbWVJbmRleCA9IDA7CiAgICBmb3IgKE5hbWVkVHlwZSBzdXBlcnR5cGVQYXJhbWV0ZXIgaW4gc3VwZXJ0eXBlLm5hbWVkUGFyYW1ldGVycykgewogICAgICB3aGlsZSAoc3VidHlwZU5hbWVJbmRleCA8IHN1YnR5cGUubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCAmJgogICAgICAgICAgc3VidHlwZS5uYW1lZFBhcmFtZXRlcnNbc3VidHlwZU5hbWVJbmRleF0ubmFtZSAhPQogICAgICAgICAgICAgIHN1cGVydHlwZVBhcmFtZXRlci5uYW1lKSB7CiAgICAgICAgKytzdWJ0eXBlTmFtZUluZGV4OwogICAgICB9CiAgICAgIGlmIChzdWJ0eXBlTmFtZUluZGV4ID09IHN1YnR5cGUubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgICBOYW1lZFR5cGUgc3VidHlwZVBhcmFtZXRlciA9IHN1YnR5cGUubmFtZWRQYXJhbWV0ZXJzW3N1YnR5cGVOYW1lSW5kZXhdOwogICAgICAvLyBUZXJtaW5hdGlvbjogQm90aCB0eXBlcyBzaHJpbmsgaW4gc2l6ZS4KICAgICAgaWYgKCFpc1N1YnR5cGVPZihzdXBlcnR5cGVQYXJhbWV0ZXIudHlwZSwgc3VidHlwZVBhcmFtZXRlci50eXBlKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQp9CoFCAE5OPCEBEx8aHAEzKAE6ATcdARoBFxY1AVEmHQEwAUtEBAFBPT07O0FBQT1IASwsNgE4TAQBN0sEAT9KBAEuSQQBLEcEASxHBAE7BkwvKSE3NSYIT0ZKQk8cKAgGEQQBTQZPTCgGUR0GSVFQMiAjDSEGBAFKOgZQQzoqSCYcGRkhFwYSBAFKShAGO0FNPSNLJkcUBAIBQQRRHyAeJRsrASIBSwFQIB9FATExOTcbRBgyHzITBAE9Ox8jNCwfTycGJwEmJDcxKDs3MTYIASpAMjYuBgEmOSo+NTY2LgYBQkosQkUaSBgKCBMGKCw2Lz4RTjI8FwoITVE2NAYjNSc5CAYSBAFMTRQGLjEUBkwUBi02QDY6TAhANjpFT0lBUTw8GAoISQZCFAZGQj4xQBYIBh5GQjwpHAhMTjFKFggGEQQCASRwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnQsc2Rrcm9vdDovcGtnL2tlcm5lbC9saWIvY2xhc3NfaGllcmFyY2h5LmRhcnTAANKdLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KbGlicmFyeSBrZXJuZWwuY2xhc3NfaGllcmFyY2h5OwoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nOwppbXBvcnQgJ2RhcnQ6bWF0aCc7CmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJzsKCmltcG9ydCAnYXN0LmRhcnQnOwppbXBvcnQgJ3NyYy9oZWFwLmRhcnQnOwppbXBvcnQgJ3R5cGVfYWxnZWJyYS5kYXJ0JzsKCnR5cGVkZWYgSGFuZGxlQW1iaWd1b3VzU3VwZXJ0eXBlcyA9IHZvaWQgRnVuY3Rpb24oQ2xhc3MsIFN1cGVydHlwZSwgU3VwZXJ0eXBlKTsKCmFic3RyYWN0IGNsYXNzIE1peGluSW5mZXJyZXIgewogIHZvaWQgaW5mZXIoQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5LCBDbGFzcyBjbGFzc05vZGUpOwp9CgovLy8gSW50ZXJmYWNlIGZvciBhbnN3ZXJpbmcgdmFyaW91cyBzdWJjbGFzc2luZyBxdWVyaWVzLgphYnN0cmFjdCBjbGFzcyBDbGFzc0hpZXJhcmNoeSB7CiAgZmFjdG9yeSBDbGFzc0hpZXJhcmNoeShDb21wb25lbnQgY29tcG9uZW50LAogICAgICB7SGFuZGxlQW1iaWd1b3VzU3VwZXJ0eXBlcyBvbkFtYmlndW91c1N1cGVydHlwZXMsCiAgICAgIE1peGluSW5mZXJyZXIgbWl4aW5JbmZlcnJlcn0pIHsKICAgIG9uQW1iaWd1b3VzU3VwZXJ0eXBlcyA/Pz0gKENsYXNzIGNscywgU3VwZXJ0eXBlIGEsIFN1cGVydHlwZSBiKSB7CiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMzIwOTEKICAgICAgdGhyb3cgIiRjbHMgY2FuJ3QgaW1wbGVtZW50IGJvdGggJGEgYW5kICRiIjsKICAgIH07CiAgICByZXR1cm4gbmV3IENsb3NlZFdvcmxkQ2xhc3NIaWVyYXJjaHkuX2ludGVybmFsKAogICAgICAgIG9uQW1iaWd1b3VzU3VwZXJ0eXBlcywgbWl4aW5JbmZlcnJlcikKICAgICAgLi5faW5pdGlhbGl6ZShjb21wb25lbnQubGlicmFyaWVzKTsKICB9CgogIHZvaWQgc2V0IG9uQW1iaWd1b3VzU3VwZXJ0eXBlcygKICAgICAgSGFuZGxlQW1iaWd1b3VzU3VwZXJ0eXBlcyBvbkFtYmlndW91c1N1cGVydHlwZXMpOwoKICB2b2lkIHNldCBtaXhpbkluZmVycmVyKE1peGluSW5mZXJyZXIgbWl4aW5JbmZlcnJlcik7CgogIC8vLyBHaXZlbiB0aGUgW3Vub3JkZXJlZF0gY2xhc3NlcywgcmV0dXJuIHRoZW0gaW4gc3VjaCBvcmRlciB0aGF0IGNsYXNzZXMKICAvLy8gb2NjdXIgYWZ0ZXIgdGhlaXIgc3VwZXJjbGFzc2VzLiAgSWYgc29tZSBzdXBlcmNsYXNzZXMgYXJlIG5vdCBpbgogIC8vLyBbdW5vcmRlcmVkXSwgdGhleSBhcmUgbm90IGluY2x1ZGVkLgogIEl0ZXJhYmxlPENsYXNzPiBnZXRPcmRlcmVkQ2xhc3NlcyhJdGVyYWJsZTxDbGFzcz4gdW5vcmRlcmVkKTsKCiAgLy8gUmV0dXJucyB0aGUgaW5zdGFudGlhdGlvbiBvZiBlYWNoIGdlbmVyaWMgc3VwZXJ0eXBlIGltcGxlbWVudGVkIGJ5IHRoaXMKICAvLyBjbGFzcyAoZS5nLiBnZXRDbGFzc0FzSW5zdGFuY2VPZiBhcHBsaWVkIHRvIGFsbCBzdXBlcmNsYXNzZXMgYW5kCiAgLy8gaW50ZXJmYWNlcykuCiAgTGlzdDxTdXBlcnR5cGU+IGdlbmVyaWNTdXBlcnR5cGVzT2YoQ2xhc3MgY2xhc3NfKTsKCiAgLy8vIFJldHVybnMgdGhlIGxlYXN0IHVwcGVyIGJvdW5kIG9mIHR3byBpbnRlcmZhY2UgdHlwZXMsIGFzIGRlZmluZWQgYnkgRGFydAogIC8vLyAxLjAuCiAgLy8vCiAgLy8vIEdpdmVuIHR3byBpbnRlcmZhY2VzIEkgYW5kIEosIGxldCBTX0kgYmUgdGhlIHNldCBvZiBzdXBlcmludGVyZmFjZXMgb2YgSSwKICAvLy8gbGV0IFNfSiBiZSB0aGUgc2V0IG9mIHN1cGVyaW50ZXJmYWNlcyBvZiBKLCBhbmQgbGV0CiAgLy8vIFMgPSAoSSB1bmlvbiBTX0kpIGludGVyc2VjdCAoSiB1bmlvbiBTX0opLiAgRnVydGhlcm1vcmUsIHdlIGRlZmluZQogIC8vLyBTX24gPSB7VCB8IFQgaW4gUyBhbmQgZGVwdGgoVCkgPSBufSBmb3IgYW55IGZpbml0ZSBuIHdoZXJlIGRlcHRoKFQpIGlzCiAgLy8vIHRoZSBudW1iZXIgb2Ygc3RlcHMgaW4gdGhlIGxvbmdlc3QgaW5oZXJpdGFuY2UgcGF0aCBmcm9tIFQgdG8gT2JqZWN0LiAgTGV0CiAgLy8vIHEgYmUgdGhlIGxhcmdlc3QgbnVtYmVyIHN1Y2ggdGhhdCBTX3EgaGFzIGNhcmRpbmFsaXR5IG9uZS4gIFRoZSBsZWFzdAogIC8vLyB1cHBlciBib3VuZCBvZiBJIGFuZCBKIGlzIHRoZSBzb2xlIGVsZW1lbnQgb2YgU19xLgogIC8vLwogIC8vLyBUaGlzIGlzIGNhbGxlZCB0aGUgImxlZ2FjeSIgbGVhc3QgdXBwZXIgYm91bmQgdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbSB0aGUKICAvLy8gRGFydCAyIGxlYXN0IHVwcGVyIGJvdW5kLCB3aGljaCBoYXMgc3BlY2lhbCBiZWhhdmlvcnMgaW4gdGhlIGNhc2Ugd2hlcmUKICAvLy8gb25lIHR5cGUgaXMgYSBzdWJ0eXBlIG9mIHRoZSBvdGhlciwgb3Igd2hlcmUgYm90aCB0eXBlcyBhcmUgYmFzZWQgb24gdGhlCiAgLy8vIHNhbWUgY2xhc3MuCiAgSW50ZXJmYWNlVHlwZSBnZXRMZWdhY3lMZWFzdFVwcGVyQm91bmQoCiAgICAgIEludGVyZmFjZVR5cGUgdHlwZTEsIEludGVyZmFjZVR5cGUgdHlwZTIpOwoKICAvLy8gUmV0dXJucyB0aGUgaW5zdGFudGlhdGlvbiBvZiBbc3VwZXJjbGFzc10gdGhhdCBpcyBpbXBsZW1lbnRlZCBieSBbY2xhc3NfXSwKICAvLy8gb3IgYG51bGxgIGlmIFtjbGFzc19dIGRvZXMgbm90IGltcGxlbWVudCBbc3VwZXJjbGFzc10gYXQgYWxsLgogIFN1cGVydHlwZSBnZXRDbGFzc0FzSW5zdGFuY2VPZihDbGFzcyBjbGFzc18sIENsYXNzIHN1cGVyY2xhc3MpOwoKICAvLy8gUmV0dXJucyB0aGUgaW5zdGFudGlhdGlvbiBvZiBbc3VwZXJjbGFzc10gdGhhdCBpcyBpbXBsZW1lbnRlZCBieSBbdHlwZV0sCiAgLy8vIG9yIGBudWxsYCBpZiBbdHlwZV0gZG9lcyBub3QgaW1wbGVtZW50IFtzdXBlcmNsYXNzXSBhdCBhbGwuCiAgSW50ZXJmYWNlVHlwZSBnZXRUeXBlQXNJbnN0YW5jZU9mKEludGVyZmFjZVR5cGUgdHlwZSwgQ2xhc3Mgc3VwZXJjbGFzcyk7CgogIC8vLyBSZXR1cm5zIHRoZSBpbnN0YW50aWF0aW9uIG9mIFtzdXBlcmNsYXNzXSB0aGF0IGlzIGltcGxlbWVudGVkIGJ5IFt0eXBlXSwKICAvLy8gb3IgYG51bGxgIGlmIFt0eXBlXSBkb2VzIG5vdCBpbXBsZW1lbnQgW3N1cGVyY2xhc3NdLiAgW3N1cGVyY2xhc3NdIG11c3QKICAvLy8gYmUgYSBnZW5lcmljIGNsYXNzLgogIFN1cGVydHlwZSBhc0luc3RhbnRpYXRpb25PZihTdXBlcnR5cGUgdHlwZSwgQ2xhc3Mgc3VwZXJjbGFzcyk7CgogIC8vLyBSZXR1cm5zIHRoZSBpbnN0YW5jZSBtZW1iZXIgdGhhdCB3b3VsZCByZXNwb25kIHRvIGEgZHluYW1pYyBkaXNwYXRjaCBvZgogIC8vLyBbbmFtZV0gdG8gYW4gaW5zdGFuY2Ugb2YgW2NsYXNzX10sIG9yIGBudWxsYCBpZiBubyBzdWNoIG1lbWJlciBleGlzdHMuCiAgLy8vCiAgLy8vIElmIFtzZXR0ZXJdIGlzIGBmYWxzZWAsIHRoZSBuYW1lIGlzIGRpc3BhdGNoZWQgYXMgYSBnZXR0ZXIgb3IgY2FsbCwKICAvLy8gYW5kIHdpbGwgcmV0dXJuIGEgZmllbGQsIGdldHRlciwgbWV0aG9kLCBvciBvcGVyYXRvciAob3IgbnVsbCkuCiAgLy8vCiAgLy8vIElmIFtzZXR0ZXJdIGlzIGB0cnVlYCwgdGhlIG5hbWUgaXMgZGlzcGF0Y2hlZCBhcyBhIHNldHRlciwgcm91Z2hseQogIC8vLyBjb3JyZXNwb25kaW5nIHRvIGBuYW1lPWAgaW4gdGhlIERhcnQgc3BlY2lmaWNhdGlvbiwgYnV0IG5vdGUgdGhhdCB0aGUKICAvLy8gcmV0dXJuZWQgbWVtYmVyIHdpbGwgbm90IGhhdmUgYSBuYW1lIGVuZGluZyB3aXRoIGA9YC4gIEluIHRoaXMgY2FzZSwKICAvLy8gYSBub24tZmluYWwgZmllbGQgb3Igc2V0dGVyIChvciBudWxsKSB3aWxsIGJlIHJldHVybmVkLgogIC8vLwogIC8vLyBJZiB0aGUgY2xhc3MgaXMgYWJzdHJhY3QsIGFic3RyYWN0IG1lbWJlcnMgYXJlIGlnbm9yZWQgYW5kIHRoZSBkaXNwYXRjaAogIC8vLyBpcyByZXNvbHZlZCBpZiB0aGUgY2xhc3Mgd2FzIG5vdCBhYnN0cmFjdC4KICBNZW1iZXIgZ2V0RGlzcGF0Y2hUYXJnZXQoQ2xhc3MgY2xhc3NfLCBOYW1lIG5hbWUsIHtib29sIHNldHRlcjogZmFsc2V9KTsKCiAgLy8vIFJldHVybnMgdGhlIGxpc3Qgb2YgcG90ZW50aWFsIHRhcmdldHMgb2YgZHluYW1pYyBkaXNwYXRjaCB0byBhbiBpbnN0YW5jZQogIC8vLyBvZiBbY2xhc3NfXS4KICAvLy8KICAvLy8gSWYgW3NldHRlcnNdIGlzIGBmYWxzZWAsIG9ubHkgcG90ZW50aWFsIHRhcmdldHMgb2YgYSBnZXR0ZXIgb3IgY2FsbAogIC8vLyBkaXNwYXRjaCBhcmUgcmV0dXJuZWQuICBJZiBbc2V0dGVyc10gaXMgYHRydWVgLCBvbmx5IHBvdGVudGlhbCB0YXJnZXRzCiAgLy8vIG9mIGEgc2V0dGVyIGRpc3BhdGNoIGFyZSByZXR1cm5lZC4KICAvLy8KICAvLy8gU2VlIFtnZXREaXNwYXRjaFRhcmdldF0gZm9yIG1vcmUgZGV0YWlscy4KICAvLy8KICAvLy8gVGhlIHJldHVybmVkIGxpc3Qgc2hvdWxkIG5vdCBiZSBtb2RpZmllZC4KICBMaXN0PE1lbWJlcj4gZ2V0RGlzcGF0Y2hUYXJnZXRzKENsYXNzIGNsYXNzXywge2Jvb2wgc2V0dGVyczogZmFsc2V9KTsKCiAgLy8vIFJldHVybnMgdGhlIHBvc3NpYmx5IGFic3RyYWN0IGludGVyZmFjZSBtZW1iZXIgb2YgW2NsYXNzX10gd2l0aCB0aGUgZ2l2ZW4KICAvLy8gW25hbWVdLgogIC8vLwogIC8vLyBJZiBbc2V0dGVyXSBpcyBgZmFsc2VgLCBvbmx5IGZpZWxkcywgbWV0aG9kcywgYW5kIGdldHRlcnMgd2l0aCB0aGF0IG5hbWUKICAvLy8gd2lsbCBiZSBmb3VuZC4gIElmIFtzZXR0ZXJdIGlzIGB0cnVlYCwgb25seSBub24tZmluYWwgZmllbGRzIGFuZCBzZXR0ZXJzCiAgLy8vIHdpbGwgYmUgZm91bmQuCiAgLy8vCiAgLy8vIElmIG11bHRpcGxlIG1lbWJlcnMgd2l0aCB0aGF0IG5hbWUgYXJlIGluaGVyaXRlZCBhbmQgbm90IG92ZXJyaWRkZW4sIHRoZQogIC8vLyBtZW1iZXIgZnJvbSB0aGUgZmlyc3QgZGVjbGFyZWQgc3VwZXJ0eXBlIGlzIHJldHVybmVkLgogIE1lbWJlciBnZXRJbnRlcmZhY2VNZW1iZXIoQ2xhc3MgY2xhc3NfLCBOYW1lIG5hbWUsIHtib29sIHNldHRlcjogZmFsc2V9KTsKCiAgLy8vIFJldHVybnMgdGhlIGxpc3Qgb2YgbWVtYmVycyBkZW5vdGluZyB0aGUgaW50ZXJmYWNlIGZvciBbY2xhc3NfXSwgd2hpY2gKICAvLy8gbWF5IGluY2x1ZGUgYWJzdHJhY3QgbWVtYmVycy4KICAvLy8KICAvLy8gVGhlIGxpc3QgbWF5IGNvbnRhaW4gbXVsdGlwbGUgbWVtYmVycyB3aXRoIGEgZ2l2ZW4gbmFtZS4gIFRoaXMgaGFwcGVucwogIC8vLyB3aGVuIG1lbWJlcnMgYXJlIGluaGVyaXRlZCB0aHJvdWdoIGRpZmZlcmVudCBzdXBlcnR5cGVzIGFuZCBub3Qgb3ZlcnJpZGRlbgogIC8vLyBpbiB0aGUgY2xhc3MuCiAgLy8vCiAgLy8vIEFsc28gc2VlIFtnZXRJbnRlcmZhY2VNZW1iZXJdLgogIExpc3Q8TWVtYmVyPiBnZXRJbnRlcmZhY2VNZW1iZXJzKENsYXNzIGNsYXNzXywge2Jvb2wgc2V0dGVyczogZmFsc2V9KTsKCiAgLy8vIFJldHVybnMgdGhlIGxpc3Qgb2YgbWVtYmVycyBkZWNsYXJlZCBpbiBbY2xhc3NfXSwgaW5jbHVkaW5nIGFic3RyYWN0CiAgLy8vIG1lbWJlcnMuCiAgLy8vCiAgLy8vIE1lbWJlcnMgYXJlIHNvcnRlZCBieSBuYW1lIHNvIHRoYXQgdGhleSBtYXkgYmUgZWZmaWNpZW50bHkgY29tcGFyZWQgYWNyb3NzCiAgLy8vIGNsYXNzZXMuCiAgTGlzdDxNZW1iZXI+IGdldERlY2xhcmVkTWVtYmVycyhDbGFzcyBjbGFzc18sIHtib29sIHNldHRlcnM6IGZhbHNlfSk7CgogIC8vLyBUcnVlIGlmIFtzdWJjbGFzc10gaW5oZXJpdHMgZnJvbSBbc3VwZXJjbGFzc10gdGhvdWdoIHplcm8gb3IgbW9yZQogIC8vLyBgZXh0ZW5kc2AgcmVsYXRpb25zaGlwcy4KICBib29sIGlzU3ViY2xhc3NPZihDbGFzcyBzdWJjbGFzcywgQ2xhc3Mgc3VwZXJjbGFzcyk7CgogIC8vLyBUcnVlIGlmIFtzdWJ0eXBlXSBpbmhlcml0cyBmcm9tIFtzdXBlcmNsYXNzXSB0aG91Z2ggemVybyBvciBtb3JlCiAgLy8vIGBleHRlbmRzYCwgYHdpdGhgLCBhbmQgYGltcGxlbWVudHNgIHJlbGF0aW9uc2hpcHMuCiAgYm9vbCBpc1N1YnR5cGVPZihDbGFzcyBzdWJ0eXBlLCBDbGFzcyBzdXBlcmNsYXNzKTsKCiAgLy8vIFRydWUgaWYgdGhlIGdpdmVuIGNsYXNzIGlzIHVzZWQgYXMgdGhlIHJpZ2h0LWhhbmQgb3BlcmFuZCB0byBhCiAgLy8vIG1peGluIGFwcGxpY2F0aW9uIChpLmUuIFtDbGFzcy5taXhlZEluVHlwZV0pLgogIGJvb2wgaXNVc2VkQXNNaXhpbihDbGFzcyBjbGFzc18pOwoKICAvLy8gSW52b2tlcyBbY2FsbGJhY2tdIGZvciBldmVyeSBtZW1iZXIgZGVjbGFyZWQgaW4gb3IgaW5oZXJpdGVkIGJ5IFtjbGFzc19dCiAgLy8vIHRoYXQgb3ZlcnJpZGVzIG9yIGltcGxlbWVudHMgYSBtZW1iZXIgaW4gYSBzdXBlcnR5cGUgb2YgW2NsYXNzX10KICAvLy8gKG9yIGluIHJhcmUgY2FzZXMsIG92ZXJyaWRlcyBhIG1lbWJlciBkZWNsYXJlZCBpbiBbY2xhc3NfXSkuCiAgLy8vCiAgLy8vIFdlIHVzZSB0aGUgdGVybSAiaW5oZXJpdGFibGUiIGZvciBtZW1iZXJzIHRoYXQgYXJlIGNhbmRpZGF0ZXMgZm9yCiAgLy8vIGluaGVyaXRhbmNlIGJ1dCBtYXkgaGF2ZSBiZWVuIG92ZXJyaWRkZW4uICBUaGUgImRlY2xhcmVkIiBtZW1iZXJzIG9mIGEKICAvLy8gbWl4aW4gYXBwbGljYXRpb24gYXJlIHRob3NlIGRlY2xhcmVkIGluIHRoZSBtaXhlZC1pbiB0eXBlLiBUaGUgY2FsbGJhY2sgaXMKICAvLy8gaW52b2tlZCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOgogIC8vLwogIC8vLyAxLiBBIG1lbWJlciBkZWNsYXJlZCBpbiB0aGUgY2xhc3Mgb3ZlcnJpZGVzIGEgbWVtYmVyIGluaGVyaXRhYmxlIHRocm91Z2gKICAvLy8gb25lIG9mIHRoZSBzdXBlcnR5cGVzIG9mIHRoZSBjbGFzcy4KICAvLy8KICAvLy8gMi4gQSBub24tYWJzdHJhY3QgbWVtYmVyIGlzIGluaGVyaXRlZCBmcm9tIGEgc3VwZXJjbGFzcywgYW5kIGluIHRoZQogIC8vLyBjb250ZXh0IG9mIHRoaXMgY2xhc3MsIGl0IG92ZXJyaWRlcyBhbiBhYnN0cmFjdCBtZW1iZXIgaW5oZXJpdGFibGUgdGhyb3VnaAogIC8vLyBvbmUgb2YgaXRzIHN1cGVyaW50ZXJmYWNlcy4KICAvLy8KICAvLy8gMy4gQSBub24tYWJzdHJhY3QgbWVtYmVyIGlzIGluaGVyaXRlZCBmcm9tIGEgc3VwZXJjbGFzcywgYW5kIGl0IG92ZXJyaWRlcwogIC8vLyBhbiBhYnN0cmFjdCBtZW1iZXIgZGVjbGFyZWQgaW4gdGhpcyBjbGFzcy4KICAvLy8KICAvLy8gVGhpcyBtZXRob2Qgd2lsbCBub3QgcmVwb3J0IHRoYXQgYSBtZW1iZXIgb3ZlcnJpZGVzIGl0c2VsZi4gQSBnaXZlbiBwYWlyCiAgLy8vIG1heSBiZSByZXBvcnRlZCBtdWx0aXBsZSB0aW1lcyB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBpbmhlcml0YW5jZSBwYXRocwogIC8vLyB0byB0aGUgb3ZlcnJpZGRlbiBtZW1iZXIuCiAgLy8vCiAgLy8vIEl0IGlzIHBvc3NpYmxlIGZvciB0d28gbWV0aG9kcyB0byBvdmVycmlkZSBvbmUgYW5vdGhlciBpbiBib3RoIGRpcmVjdGlvbnMuCiAgLy8vCiAgLy8vIEJ5IGRlZmF1bHQgZ2V0dGVycyBhbmQgc2V0dGVycyBhcmUgb3ZlcnJpZGRlbiBzZXBhcmF0ZWx5LiAgVGhlIFtpc1NldHRlcl0KICAvLy8gY2FsbGJhY2sgcGFyYW1ldGVyIGRldGVybWluZXMgd2hpY2ggdHlwZSBvZiBhY2Nlc3MgaXMgYmVpbmcgb3ZlcnJpZGRlbi4KICB2b2lkIGZvckVhY2hPdmVycmlkZVBhaXIoQ2xhc3MgY2xhc3NfLAogICAgICBjYWxsYmFjayhNZW1iZXIgZGVjbGFyZWRNZW1iZXIsIE1lbWJlciBpbnRlcmZhY2VNZW1iZXIsIGJvb2wgaXNTZXR0ZXIpKTsKCiAgLy8vIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgYnkgdGhlIGNsaWVudCBhZnRlciBhIGNoYW5nZTogcmVtb3ZhbCwgYWRkaXRpb24sCiAgLy8vIG9yIG1vZGlmaWNhdGlvbiBvZiBjbGFzc2VzICh2aWEgbGlicmFyaWVzKS4KICAvLy8KICAvLy8gRm9yIG1vZGlmaWVkIGNsYXNzZXMgc3BlY2lmeSBhIGNsYXNzIGFzIGJvdGggcmVtb3ZlZCBhbmQgYWRkZWQ6IFNvbWUgb2YKICAvLy8gdGhlIGluZm9ybWF0aW9uIHRoYXQgdGhpcyBoaWVyYXJjaHkgbWlnaHQgaGF2ZSBjYWNoZWQsIGlzIG5vdCB2YWxpZAogIC8vLyBhbnltb3JlLgogIC8vLwogIC8vLyBOb3RlLCB0aGF0IGl0IGlzIHRoZSBjbGllbnRzIHJlc3BvbnNpYmlsaXR5IHRvIG1hcmsgYWxsIHN1YmNsYXNzZXMgYXMKICAvLy8gY2hhbmdlZCB0b28uCiAgQ2xhc3NIaWVyYXJjaHkgYXBwbHlUcmVlQ2hhbmdlcyhJdGVyYWJsZTxMaWJyYXJ5PiByZW1vdmVkTGlicmFyaWVzLAogICAgICBJdGVyYWJsZTxMaWJyYXJ5PiBlbnN1cmVLbm93bkxpYnJhcmllcywKICAgICAge0NvbXBvbmVudCByZWlzc3VlQW1iaWd1b3VzU3VwZXJ0eXBlc0Zvcn0pOwoKICAvLy8gVGhpcyBtZXRob2QgaXMgaW52b2tlZCBieSB0aGUgY2xpZW50IGFmdGVyIGEgbWVtYmVyIGNoYW5nZSBvbiBjbGFzc2VzOgogIC8vLyBTb21lIG9mIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHRoaXMgaGllcmFyY2h5IG1pZ2h0IGhhdmUgY2FjaGVkLAogIC8vLyBpcyBub3QgdmFsaWQgYW55bW9yZS4KICAvLy8gTm90ZSwgdGhhdCBpdCBpcyB0aGUgY2xpZW50cyByZXNwb25zaWJpbGl0eSB0byBtYXJrIGFsbCBzdWJjbGFzc2VzIGFzCiAgLy8vIGNoYW5nZWQgdG9vLCBvciAtIGlmIFtmaW5kRGVzY2VuZGFudHNdIGlzIHRydWUsIHRoZSBDbGFzc0hpZXJhcmNoeSB3aWxsCiAgLy8vIHNwZW5kIHRoZSB0aW1lIHRvIGZpbmQgdGhlbSBmb3IgdGhlIGNhbGxlci4KICBDbGFzc0hpZXJhcmNoeSBhcHBseU1lbWJlckNoYW5nZXMoSXRlcmFibGU8Q2xhc3M+IGNsYXNzZXMsCiAgICAgIHtib29sIGZpbmREZXNjZW5kYW50czogZmFsc2V9KTsKCiAgLy8vIE1lcmdlcyB0d28gc29ydGVkIGxpc3RzLgogIC8vLwogIC8vLyBJZiBhIGdpdmVuIG1lbWJlciBvY2N1cnMgaW4gYm90aCBsaXN0cywgdGhlIG1lcmdlIHdpbGwgYXR0ZW1wdCB0byBleGNsdWRlCiAgLy8vIHRoZSBkdXBsaWNhdGUgbWVtYmVyLCBidXQgaXMgbm90IHN0cmljdGx5IGd1YXJhbnRlZWQgdG8gZG8gc28uCiAgLy8vCiAgLy8vIFRoZSBzb3J0IGhhcyB0aGUgZm9sbG93aW5nIHN0YWJpbGl0eSBwcm9wZXJ0aWVzOgogIC8vLwogIC8vLyAtIElmIGJvdGggeCBhbmQgeSBjYW1lIGZyb20gdGhlIHNhbWUgaW5wdXQgbGlzdCwgYW5kIHggcHJlY2VkZWQgeSBpbiB0aGUKICAvLy8gICBpbnB1dCBsaXN0LCB4IHdpbGwgcHJlY2VkZSB5IGluIHRoZSBvdXRwdXQgbGlzdC4gIFRoaXMgaG9sZHMgZXZlbiBpZiB4CiAgLy8vICAgYW5kIHkgaGF2ZSBtYXRjaGluZyBuYW1lcy4KICAvLy8KICAvLy8gLSBJZiBtIGlzIGEgY29udGlndW91cyBzdWJzZXF1ZW5jZSBvZiB0aGUgb3V0cHV0IGxpc3QgY29udGFpbmluZyBhdCBsZWFzdAogIC8vLyAgIG9uZSBlbGVtZW50IGZyb20gZWFjaCBpbnB1dCBsaXN0LCBhbmQgYWxsIGVsZW1lbnRzIG9mIG0gaGF2ZSBtYXRjaGluZwogIC8vLyAgIG5hbWVzLCB0aGVuIHRoZSBlbGVtZW50cyBvZiBtIGZyb20gW2ZpcnN0XSB3aWxsIHByZWNlZGUgdGhlIGVsZW1lbnRzIG9mCiAgLy8vICAgbSBmcm9tIFtzZWNvbmRdLgogIHN0YXRpYyBMaXN0PE1lbWJlcj4gbWVyZ2VTb3J0ZWRMaXN0cygKICAgICAgTGlzdDxNZW1iZXI+IGZpcnN0LCBMaXN0PE1lbWJlcj4gc2Vjb25kKSB7CiAgICBpZiAoZmlyc3QuaXNFbXB0eSkgcmV0dXJuIHNlY29uZDsKICAgIGlmIChzZWNvbmQuaXNFbXB0eSkgcmV0dXJuIGZpcnN0OwogICAgTGlzdDxNZW1iZXI+IHJlc3VsdCA9IDxNZW1iZXI+W10uLmxlbmd0aCA9IGZpcnN0Lmxlbmd0aCArIHNlY29uZC5sZW5ndGg7CiAgICBpbnQgc3RvcmVJbmRleCA9IDA7CiAgICBpbnQgaSA9IDAsIGogPSAwOwogICAgd2hpbGUgKGkgPCBmaXJzdC5sZW5ndGggJiYgaiA8IHNlY29uZC5sZW5ndGgpIHsKICAgICAgTWVtYmVyIGZpcnN0TWVtYmVyID0gZmlyc3RbaV07CiAgICAgIE1lbWJlciBzZWNvbmRNZW1iZXIgPSBzZWNvbmRbal07CiAgICAgIGludCBjb21wYXJlID0gQ2xhc3NIaWVyYXJjaHkuY29tcGFyZU1lbWJlcnMoZmlyc3RNZW1iZXIsIHNlY29uZE1lbWJlcik7CiAgICAgIGlmIChjb21wYXJlIDw9IDApIHsKICAgICAgICByZXN1bHRbc3RvcmVJbmRleCsrXSA9IGZpcnN0TWVtYmVyOwogICAgICAgICsraTsKICAgICAgICAvLyBJZiB0aGUgc2FtZSBtZW1iZXIgb2NjdXJzIGluIGJvdGggbGlzdHMsIHNraXAgdGhlIGR1cGxpY2F0ZS4KICAgICAgICBpZiAoaWRlbnRpY2FsKGZpcnN0TWVtYmVyLCBzZWNvbmRNZW1iZXIpKSB7CiAgICAgICAgICArK2o7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHJlc3VsdFtzdG9yZUluZGV4KytdID0gc2Vjb25kTWVtYmVyOwogICAgICAgICsrajsKICAgICAgfQogICAgfQogICAgd2hpbGUgKGkgPCBmaXJzdC5sZW5ndGgpIHsKICAgICAgcmVzdWx0W3N0b3JlSW5kZXgrK10gPSBmaXJzdFtpKytdOwogICAgfQogICAgd2hpbGUgKGogPCBzZWNvbmQubGVuZ3RoKSB7CiAgICAgIHJlc3VsdFtzdG9yZUluZGV4KytdID0gc2Vjb25kW2orK107CiAgICB9CiAgICByZXN1bHQubGVuZ3RoID0gc3RvcmVJbmRleDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gQ29tcGFyZXMgbWVtYmVycyBieSBuYW1lLCB1c2luZyB0aGUgc2FtZSBzb3J0IG9yZGVyIGFzCiAgLy8vIFtnZXREZWNsYXJlZE1lbWJlcnNdIGFuZCBbZ2V0SW50ZXJmYWNlTWVtYmVyc10uCiAgc3RhdGljIGludCBjb21wYXJlTWVtYmVycyhNZW1iZXIgZmlyc3QsIE1lbWJlciBzZWNvbmQpIHsKICAgIHJldHVybiBjb21wYXJlTmFtZXMoZmlyc3QubmFtZSwgc2Vjb25kLm5hbWUpOwogIH0KCiAgLy8vIENvbXBhcmVzIG5hbWVzLCB1c2luZyB0aGUgc2FtZSBzb3J0IG9yZGVyIGFzIFtnZXREZWNsYXJlZE1lbWJlcnNdIGFuZAogIC8vLyBbZ2V0SW50ZXJmYWNlTWVtYmVyc10uCiAgLy8vCiAgLy8vIFRoaXMgaXMgYW4gYXJiaXRyYXJ5IGFzLWZhc3QtYXMtcG9zc2libGUgc29ydGluZyBjcml0ZXJpb24uCiAgc3RhdGljIGludCBjb21wYXJlTmFtZXMoTmFtZSBmaXJzdE5hbWUsIE5hbWUgc2Vjb25kTmFtZSkgewogICAgaW50IGZpcnN0SGFzaCA9IGZpcnN0TmFtZS5oYXNoQ29kZTsKICAgIGludCBzZWNvbmRIYXNoID0gc2Vjb25kTmFtZS5oYXNoQ29kZTsKICAgIGlmIChmaXJzdEhhc2ggIT0gc2Vjb25kSGFzaCkgcmV0dXJuIGZpcnN0SGFzaCAtIHNlY29uZEhhc2g7CiAgICBTdHJpbmcgZmlyc3RTdHJpbmcgPSBmaXJzdE5hbWUubmFtZTsKICAgIFN0cmluZyBzZWNvbmRTdHJpbmcgPSBzZWNvbmROYW1lLm5hbWU7CiAgICBpbnQgZmlyc3RMZW5ndGggPSBmaXJzdFN0cmluZy5sZW5ndGg7CiAgICBpbnQgc2Vjb25kTGVuZ3RoID0gc2Vjb25kU3RyaW5nLmxlbmd0aDsKICAgIGlmIChmaXJzdExlbmd0aCAhPSBzZWNvbmRMZW5ndGgpIHsKICAgICAgcmV0dXJuIGZpcnN0TGVuZ3RoIC0gc2Vjb25kTGVuZ3RoOwogICAgfQogICAgTGlicmFyeSBmaXJzdExpYnJhcnkgPSBmaXJzdE5hbWUubGlicmFyeTsKICAgIExpYnJhcnkgc2Vjb25kTGlicmFyeSA9IHNlY29uZE5hbWUubGlicmFyeTsKICAgIGlmIChmaXJzdExpYnJhcnkgIT0gc2Vjb25kTGlicmFyeSkgewogICAgICBpZiAoZmlyc3RMaWJyYXJ5ID09IG51bGwpIHJldHVybiAtMTsKICAgICAgaWYgKHNlY29uZExpYnJhcnkgPT0gbnVsbCkgcmV0dXJuIDE7CiAgICAgIHJldHVybiBmaXJzdExpYnJhcnkuY29tcGFyZVRvKHNlY29uZExpYnJhcnkpOwogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaXJzdExlbmd0aDsgKytpKSB7CiAgICAgIGludCBmaXJzdFVuaXQgPSBmaXJzdFN0cmluZy5jb2RlVW5pdEF0KGkpOwogICAgICBpbnQgc2Vjb25kVW5pdCA9IHNlY29uZFN0cmluZy5jb2RlVW5pdEF0KGkpOwogICAgICBpbnQgZGVsdGEgPSBmaXJzdFVuaXQgLSBzZWNvbmRVbml0OwogICAgICBpZiAoZGVsdGEgIT0gMCkgcmV0dXJuIGRlbHRhOwogICAgfQogICAgcmV0dXJuIDA7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbWVtYmVyIHdpdGggdGhlIGdpdmVuIG5hbWUsIG9yIGBudWxsYCBpZiBubyBtZW1iZXIgaGFzIHRoZQogIC8vLyBuYW1lLiAgSW4gY2FzZSB0aGUgbGlzdCBjb250YWlucyBtdWx0aXBsZSBtZW1iZXJzIHdpdGggdGhlIGdpdmVuIG5hbWUsCiAgLy8vIHRoZSBvbmUgdGhhdCBvY2N1cnMgZmlyc3QgaW4gdGhlIGxpc3QgaXMgcmV0dXJuZWQuCiAgLy8vCiAgLy8vIFRoZSBsaXN0IGlzIGFzc3VtZWQgdG8gYmUgc29ydGVkIGFjY29yZGluZyB0byBbY29tcGFyZU1lbWJlcnNdLgogIHN0YXRpYyBNZW1iZXIgZmluZE1lbWJlckJ5TmFtZShMaXN0PE1lbWJlcj4gbWVtYmVycywgTmFtZSBuYW1lKSB7CiAgICBpbnQgbG93ID0gMCwgaGlnaCA9IG1lbWJlcnMubGVuZ3RoIC0gMTsKICAgIHdoaWxlIChsb3cgPD0gaGlnaCkgewogICAgICBpbnQgbWlkID0gbG93ICsgKChoaWdoIC0gbG93KSA+PiAxKTsKICAgICAgTWVtYmVyIHBpdm90ID0gbWVtYmVyc1ttaWRdOwogICAgICBpbnQgY29tcGFyaXNvbiA9IGNvbXBhcmVOYW1lcyhuYW1lLCBwaXZvdC5uYW1lKTsKICAgICAgaWYgKGNvbXBhcmlzb24gPCAwKSB7CiAgICAgICAgaGlnaCA9IG1pZCAtIDE7CiAgICAgIH0gZWxzZSBpZiAoY29tcGFyaXNvbiA+IDApIHsKICAgICAgICBsb3cgPSBtaWQgKyAxOwogICAgICB9IGVsc2UgaWYgKGhpZ2ggIT0gbWlkKSB7CiAgICAgICAgLy8gRW5zdXJlIHdlIGZpbmQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGdpdmVuIG5hbWUuCiAgICAgICAgaGlnaCA9IG1pZDsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gcGl2b3Q7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgQ2xhc3NIaWVyYXJjaHlTdWJ0eXBlcyB7CiAgLy8vIFJldHVybnMgdGhlIHN1YnR5cGVzIG9mIFtjbGFzc19dIGFzIGFuIGludGVydmFsIGxpc3QuCiAgQ2xhc3NTZXQgZ2V0U3VidHlwZXNPZihDbGFzcyBjbGFzc18pOwoKICAvLy8gUmV0dXJucyB0aGUgc2luZ2xlIGNvbmNyZXRlIHRhcmdldCBmb3IgaW52b2NhdGlvbiBvZiB0aGUgZ2l2ZW4gaW50ZXJmYWNlCiAgLy8vIHRhcmdldCwgb3IgYG51bGxgIGlmIGl0IGNvdWxkIG5vdCBiZSByZXNvbHZlZCBvciB0aGVyZSBhcmUgbXVsdGlwbGUKICAvLy8gcG9zc2libGUgdGFyZ2V0cy4KICBNZW1iZXIgZ2V0U2luZ2xlVGFyZ2V0Rm9ySW50ZXJmYWNlSW52b2NhdGlvbihNZW1iZXIgaW50ZXJmYWNlVGFyZ2V0LAogICAgICB7Ym9vbCBzZXR0ZXI6IGZhbHNlfSk7Cn0KCmNsYXNzIF9DbGFzc0luZm9TdWJ0eXBlIHsKICBmaW5hbCBfQ2xhc3NJbmZvIGNsYXNzSW5mbzsKICBpbnQgdG9wRG93bkluZGV4ID0gLTE7CgogIC8vLyBUb3AtZG93biBpbmRpY2VzIG9mIGFsbCBzdWJjbGFzc2VzIG9mIHRoaXMgY2xhc3MsIHJlcHJlc2VudGVkIGFzCiAgLy8vIGludGVybGVhdmVkIGJlZ2luL2VuZCBpbnRlcnZhbCBlbmQgcG9pbnRzLgogIFVpbnQzMkxpc3Qgc3VidHlwZUludGVydmFsTGlzdDsKCiAgX0NsYXNzSW5mb1N1YnR5cGUodGhpcy5jbGFzc0luZm8pOwp9CgpjbGFzcyBfQ2xvc2VkV29ybGRDbGFzc0hpZXJhcmNoeVN1YnR5cGVzIGltcGxlbWVudHMgQ2xhc3NIaWVyYXJjaHlTdWJ0eXBlcyB7CiAgZmluYWwgQ2xvc2VkV29ybGRDbGFzc0hpZXJhcmNoeSBoaWVyYXJjaHk7CiAgZmluYWwgTGlzdDxDbGFzcz4gX2NsYXNzZXNCeVRvcERvd25JbmRleDsKICBmaW5hbCBNYXA8Q2xhc3MsIF9DbGFzc0luZm9TdWJ0eXBlPiBfaW5mb01hcCA9IDxDbGFzcywgX0NsYXNzSW5mb1N1YnR5cGU+e307CiAgYm9vbCBpbnZhbGlkYXRlZCA9IGZhbHNlOwoKICBfQ2xvc2VkV29ybGRDbGFzc0hpZXJhcmNoeVN1YnR5cGVzKHRoaXMuaGllcmFyY2h5KQogICAgICA6IF9jbGFzc2VzQnlUb3BEb3duSW5kZXggPSBuZXcgTGlzdDxDbGFzcz4oaGllcmFyY2h5Ll9pbmZvTWFwLmxlbmd0aCkgewogICAgaGllcmFyY2h5LmFsbEJldHNPZmYgPSB0cnVlOwogICAgaWYgKGhpZXJhcmNoeS5faW5mb01hcC5pc05vdEVtcHR5KSB7CiAgICAgIGZvciAoQ2xhc3MgY2xhc3NfIGluIGhpZXJhcmNoeS5faW5mb01hcC5rZXlzKSB7CiAgICAgICAgX2luZm9NYXBbY2xhc3NfXSA9IG5ldyBfQ2xhc3NJbmZvU3VidHlwZShoaWVyYXJjaHkuX2luZm9NYXBbY2xhc3NfXSk7CiAgICAgIH0KCiAgICAgIF90b3BEb3duU29ydFZpc2l0KF9pbmZvTWFwW2hpZXJhcmNoeS5faW5mb01hcC5rZXlzLmZpcnN0XSk7CiAgICB9CiAgfQoKICAvLy8gRG93bndhcmRzIHRyYXZlcnNhbCBvZiB0aGUgY2xhc3MgaGllcmFyY2h5IHRoYXQgb3JkZXJzIGNsYXNzZXMgc28gbG9jYWwKICAvLy8gaGllcmFyY2hpZXMgaGF2ZSBjb250aWd1b3VzIGluZGljZXMuCiAgaW50IF90b3BEb3duU29ydEluZGV4ID0gMDsKICB2b2lkIF90b3BEb3duU29ydFZpc2l0KF9DbGFzc0luZm9TdWJ0eXBlIHN1YkluZm8pIHsKICAgIGlmIChzdWJJbmZvLnRvcERvd25JbmRleCAhPSAtMSkgcmV0dXJuOwogICAgaW50IGluZGV4ID0gX3RvcERvd25Tb3J0SW5kZXgrKzsKICAgIHN1YkluZm8udG9wRG93bkluZGV4ID0gaW5kZXg7CiAgICBfY2xhc3Nlc0J5VG9wRG93bkluZGV4W2luZGV4XSA9IHN1YkluZm8uY2xhc3NJbmZvLmNsYXNzTm9kZTsKICAgIHZhciBzdWJ0eXBlU2V0QnVpbGRlciA9IG5ldyBfSW50ZXJ2YWxMaXN0QnVpbGRlcigpLi5hZGRTaW5nbGV0b24oaW5kZXgpOwogICAgZm9yIChfQ2xhc3NJbmZvIHN1YnR5cGUgaW4gc3ViSW5mby5jbGFzc0luZm8uZGlyZWN0RXh0ZW5kZXJzKSB7CiAgICAgIF9DbGFzc0luZm9TdWJ0eXBlIHN1YnR5cGVJbmZvID0gX2luZm9NYXBbc3VidHlwZS5jbGFzc05vZGVdOwogICAgICBfdG9wRG93blNvcnRWaXNpdChzdWJ0eXBlSW5mbyk7CiAgICAgIHN1YnR5cGVTZXRCdWlsZGVyLmFkZEludGVydmFsTGlzdChzdWJ0eXBlSW5mby5zdWJ0eXBlSW50ZXJ2YWxMaXN0KTsKICAgIH0KICAgIGZvciAoX0NsYXNzSW5mbyBzdWJ0eXBlIGluIHN1YkluZm8uY2xhc3NJbmZvLmRpcmVjdE1peGVycykgewogICAgICBfQ2xhc3NJbmZvU3VidHlwZSBzdWJ0eXBlSW5mbyA9IF9pbmZvTWFwW3N1YnR5cGUuY2xhc3NOb2RlXTsKICAgICAgX3RvcERvd25Tb3J0VmlzaXQoc3VidHlwZUluZm8pOwogICAgICBzdWJ0eXBlU2V0QnVpbGRlci5hZGRJbnRlcnZhbExpc3Qoc3VidHlwZUluZm8uc3VidHlwZUludGVydmFsTGlzdCk7CiAgICB9CiAgICBmb3IgKF9DbGFzc0luZm8gc3VidHlwZSBpbiBzdWJJbmZvLmNsYXNzSW5mby5kaXJlY3RJbXBsZW1lbnRlcnMpIHsKICAgICAgX0NsYXNzSW5mb1N1YnR5cGUgc3VidHlwZUluZm8gPSBfaW5mb01hcFtzdWJ0eXBlLmNsYXNzTm9kZV07CiAgICAgIF90b3BEb3duU29ydFZpc2l0KHN1YnR5cGVJbmZvKTsKICAgICAgc3VidHlwZVNldEJ1aWxkZXIuYWRkSW50ZXJ2YWxMaXN0KHN1YnR5cGVJbmZvLnN1YnR5cGVJbnRlcnZhbExpc3QpOwogICAgfQogICAgc3ViSW5mby5zdWJ0eXBlSW50ZXJ2YWxMaXN0ID0gc3VidHlwZVNldEJ1aWxkZXIuYnVpbGRJbnRlcnZhbExpc3QoKTsKICB9CgogIEBvdmVycmlkZQogIE1lbWJlciBnZXRTaW5nbGVUYXJnZXRGb3JJbnRlcmZhY2VJbnZvY2F0aW9uKE1lbWJlciBpbnRlcmZhY2VUYXJnZXQsCiAgICAgIHtib29sIHNldHRlcjogZmFsc2V9KSB7CiAgICBpZiAoaW52YWxpZGF0ZWQpIHRocm93ICJUaGlzIGRhdGEgc3RydWN0dXJlIGhhcyBiZWVuIGludmFsaWRhdGVkIjsKICAgIE5hbWUgbmFtZSA9IGludGVyZmFjZVRhcmdldC5uYW1lOwogICAgTWVtYmVyIHRhcmdldCA9IG51bGw7CiAgICBDbGFzc1NldCBzdWJ0eXBlcyA9IGdldFN1YnR5cGVzT2YoaW50ZXJmYWNlVGFyZ2V0LmVuY2xvc2luZ0NsYXNzKTsKICAgIGZvciAoQ2xhc3MgYyBpbiBzdWJ0eXBlcykgewogICAgICBpZiAoIWMuaXNBYnN0cmFjdCkgewogICAgICAgIE1lbWJlciBjYW5kaWRhdGUgPSBoaWVyYXJjaHkuZ2V0RGlzcGF0Y2hUYXJnZXQoYywgbmFtZSwgc2V0dGVyOiBzZXR0ZXIpOwogICAgICAgIGlmICgoY2FuZGlkYXRlICE9IG51bGwpICYmICFjYW5kaWRhdGUuaXNBYnN0cmFjdCkgewogICAgICAgICAgaWYgKHRhcmdldCA9PSBudWxsKSB7CiAgICAgICAgICAgIHRhcmdldCA9IGNhbmRpZGF0ZTsKICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ICE9IGNhbmRpZGF0ZSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0YXJnZXQ7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc1NldCBnZXRTdWJ0eXBlc09mKENsYXNzIGNsYXNzXykgewogICAgaWYgKGludmFsaWRhdGVkKSB0aHJvdyAiVGhpcyBkYXRhIHN0cnVjdHVyZSBoYXMgYmVlbiBpbnZhbGlkYXRlZCI7CiAgICBTZXQ8Q2xhc3M+IHJlc3VsdCA9IG5ldyBTZXQ8Q2xhc3M+KCk7CiAgICBVaW50MzJMaXN0IGxpc3QgPSBfaW5mb01hcFtjbGFzc19dLnN1YnR5cGVJbnRlcnZhbExpc3Q7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgaW50IGZyb20gPSBsaXN0W2ldOwogICAgICBpbnQgdG8gPSBsaXN0W2kgKyAxXTsKICAgICAgZm9yIChpbnQgaiA9IGZyb207IGogPCB0bzsgaisrKSB7CiAgICAgICAgcmVzdWx0LmFkZChfY2xhc3Nlc0J5VG9wRG93bkluZGV4W2pdKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBDbGFzc1NldChyZXN1bHQpOwogIH0KfQoKLy8vIEltcGxlbWVudGF0aW9uIG9mIFtDbGFzc0hpZXJhcmNoeV0gZm9yIGNsb3NlZCB3b3JsZC4KY2xhc3MgQ2xvc2VkV29ybGRDbGFzc0hpZXJhcmNoeSBpbXBsZW1lbnRzIENsYXNzSGllcmFyY2h5IHsKICBIYW5kbGVBbWJpZ3VvdXNTdXBlcnR5cGVzIF9vbkFtYmlndW91c1N1cGVydHlwZXM7CiAgSGFuZGxlQW1iaWd1b3VzU3VwZXJ0eXBlcyBfb25BbWJpZ3VvdXNTdXBlcnR5cGVzTm90V3JhcHBlZDsKICBNaXhpbkluZmVycmVyIG1peGluSW5mZXJyZXI7CgogIHZvaWQgc2V0IG9uQW1iaWd1b3VzU3VwZXJ0eXBlcygKICAgICAgSGFuZGxlQW1iaWd1b3VzU3VwZXJ0eXBlcyBvbkFtYmlndW91c1N1cGVydHlwZXMpIHsKICAgIF9vbkFtYmlndW91c1N1cGVydHlwZXNOb3RXcmFwcGVkID0gb25BbWJpZ3VvdXNTdXBlcnR5cGVzOwogICAgX29uQW1iaWd1b3VzU3VwZXJ0eXBlcyA9IChDbGFzcyBjbGFzc18sIFN1cGVydHlwZSBhLCBTdXBlcnR5cGUgYikgewogICAgICBvbkFtYmlndW91c1N1cGVydHlwZXMoY2xhc3NfLCBhLCBiKTsKICAgICAgTGlzdDxTdXBlcnR5cGU+IHJlY29yZGVkID0gX3JlY29yZGVkQW1iaWd1b3VzU3VwZXJ0eXBlc1tjbGFzc19dOwogICAgICBpZiAocmVjb3JkZWQgPT0gbnVsbCkgewogICAgICAgIHJlY29yZGVkID0gbmV3IExpc3Q8U3VwZXJ0eXBlPigpOwogICAgICAgIF9yZWNvcmRlZEFtYmlndW91c1N1cGVydHlwZXNbY2xhc3NfXSA9IHJlY29yZGVkOwogICAgICB9CiAgICAgIHJlY29yZGVkLmFkZChhKTsKICAgICAgcmVjb3JkZWQuYWRkKGIpOwogICAgfTsKICB9CgogIC8vLyBUaGUgaW5zZXJ0IG9yZGVyIGlzIGltcG9ydGFudC4KICBmaW5hbCBNYXA8Q2xhc3MsIF9DbGFzc0luZm8+IF9pbmZvTWFwID0KICAgICAgbmV3IExpbmtlZEhhc2hNYXA8Q2xhc3MsIF9DbGFzc0luZm8+KCk7CgogIF9DbGFzc0luZm8gaW5mb0ZvcihDbGFzcyBjKSB7CiAgICBfQ2xhc3NJbmZvIGluZm8gPSBfaW5mb01hcFtjXTsKICAgIGluZm8/LnVzZWQgPSB0cnVlOwogICAgcmV0dXJuIGluZm87CiAgfQoKICBMaXN0PENsYXNzPiBnZXRVc2VkQ2xhc3NlcygpIHsKICAgIExpc3Q8Q2xhc3M+IHJlc3VsdCA9IG5ldyBMaXN0PENsYXNzPigpOwogICAgZm9yIChfQ2xhc3NJbmZvIGNsYXNzSW5mbyBpbiBfaW5mb01hcC52YWx1ZXMpIHsKICAgICAgaWYgKGNsYXNzSW5mby51c2VkKSB7CiAgICAgICAgcmVzdWx0LmFkZChjbGFzc0luZm8uY2xhc3NOb2RlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgcmVzZXRVc2VkKCkgewogICAgZm9yIChfQ2xhc3NJbmZvIGNsYXNzSW5mbyBpbiBfaW5mb01hcC52YWx1ZXMpIHsKICAgICAgY2xhc3NJbmZvLnVzZWQgPSBmYWxzZTsKICAgIH0KICAgIGFsbEJldHNPZmYgPSBmYWxzZTsKICB9CgogIGZpbmFsIFNldDxMaWJyYXJ5PiBrbm93bkxpYnJhcmllcyA9IG5ldyBTZXQ8TGlicmFyeT4oKTsKICBib29sIGFsbEJldHNPZmYgPSBmYWxzZTsKCiAgLy8vIFJlY29yZGVkIGVycm9ycyBmb3IgY2xhc3NlcyB3ZSBoYXZlIGFscmVhZHkgY2FsY3VsYXRlZCB0aGUgY2xhc3MgaGllcmFyY2h5CiAgLy8vIGZvciwgYnV0IHdpbGwgaGF2ZSB0byBiZSByZWlzc3VlZCB3aGVuIHJlLXVzaW5nIHRoZSBjYWxjdWxhdGlvbi4KICBmaW5hbCBNYXA8Q2xhc3MsIExpc3Q8U3VwZXJ0eXBlPj4gX3JlY29yZGVkQW1iaWd1b3VzU3VwZXJ0eXBlcyA9CiAgICAgIG5ldyBMaW5rZWRIYXNoTWFwPENsYXNzLCBMaXN0PFN1cGVydHlwZT4+KCk7CgogIEl0ZXJhYmxlPENsYXNzPiBnZXQgY2xhc3NlcyB7CiAgICBhbGxCZXRzT2ZmID0gdHJ1ZTsKICAgIHJldHVybiBfaW5mb01hcC5rZXlzOwogIH0KCiAgaW50IGdldCBudW1iZXJPZkNsYXNzZXMgewogICAgYWxsQmV0c09mZiA9IHRydWU7CiAgICByZXR1cm4gX2luZm9NYXAubGVuZ3RoOwogIH0KCiAgX0Nsb3NlZFdvcmxkQ2xhc3NIaWVyYXJjaHlTdWJ0eXBlcyBfY2FjaGVkQ2xhc3NIaWVyYXJjaHlTdWJ0eXBlczsKCiAgQ2xvc2VkV29ybGRDbGFzc0hpZXJhcmNoeS5faW50ZXJuYWwoCiAgICAgIEhhbmRsZUFtYmlndW91c1N1cGVydHlwZXMgb25BbWJpZ3VvdXNTdXBlcnR5cGVzLCB0aGlzLm1peGluSW5mZXJyZXIpIHsKICAgIHRoaXMub25BbWJpZ3VvdXNTdXBlcnR5cGVzID0gb25BbWJpZ3VvdXNTdXBlcnR5cGVzOwogIH0KCiAgQ2xhc3NIaWVyYXJjaHlTdWJ0eXBlcyBjb21wdXRlU3VidHlwZXNJbmZvcm1hdGlvbigpIHsKICAgIF9jYWNoZWRDbGFzc0hpZXJhcmNoeVN1YnR5cGVzID8/PQogICAgICAgIG5ldyBfQ2xvc2VkV29ybGRDbGFzc0hpZXJhcmNoeVN1YnR5cGVzKHRoaXMpOwogICAgcmV0dXJuIF9jYWNoZWRDbGFzc0hpZXJhcmNoeVN1YnR5cGVzOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q2xhc3M+IGdldE9yZGVyZWRDbGFzc2VzKEl0ZXJhYmxlPENsYXNzPiB1bm9yZGVyZWQpIHsKICAgIHZhciB1bm9yZGVyZWRTZXQgPSB1bm9yZGVyZWQudG9TZXQoKTsKICAgIGZvciAoQ2xhc3MgYyBpbiB1bm9yZGVyZWQpIF9pbmZvTWFwW2NdPy51c2VkID0gdHJ1ZTsKICAgIHJldHVybiBfaW5mb01hcC5rZXlzLndoZXJlKHVub3JkZXJlZFNldC5jb250YWlucyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzU3ViY2xhc3NPZihDbGFzcyBzdWJjbGFzcywgQ2xhc3Mgc3VwZXJjbGFzcykgewogICAgaWYgKGlkZW50aWNhbChzdWJjbGFzcywgc3VwZXJjbGFzcykpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGluZm9Gb3Ioc3ViY2xhc3MpLmlzU3ViY2xhc3NPZihpbmZvRm9yKHN1cGVyY2xhc3MpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNTdWJ0eXBlT2YoQ2xhc3Mgc3VidHlwZSwgQ2xhc3Mgc3VwZXJjbGFzcykgewogICAgaWYgKGlkZW50aWNhbChzdWJ0eXBlLCBzdXBlcmNsYXNzKSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gaW5mb0ZvcihzdWJ0eXBlKS5pc1N1YnR5cGVPZihpbmZvRm9yKHN1cGVyY2xhc3MpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNVc2VkQXNNaXhpbihDbGFzcyBjbGFzc18pIHsKICAgIHJldHVybiBpbmZvRm9yKGNsYXNzXykuZGlyZWN0TWl4ZXJzLmlzTm90RW1wdHk7CiAgfQoKICBMaXN0PF9DbGFzc0luZm8+IF9nZXRSYW5rZWRTdXBlcmNsYXNzSW5mb3MoX0NsYXNzSW5mbyBpbmZvKSB7CiAgICBpZiAoaW5mby5sZWFzdFVwcGVyQm91bmRJbmZvcyAhPSBudWxsKSByZXR1cm4gaW5mby5sZWFzdFVwcGVyQm91bmRJbmZvczsKICAgIHZhciBoZWFwID0gbmV3IF9MdWJIZWFwKCkuLmFkZChpbmZvKTsKICAgIHZhciBjaGFpbiA9IDxfQ2xhc3NJbmZvPltdOwogICAgaW5mby5sZWFzdFVwcGVyQm91bmRJbmZvcyA9IGNoYWluOwogICAgX0NsYXNzSW5mbyBsYXN0SW5mbyA9IG51bGw7CiAgICB3aGlsZSAoaGVhcC5pc05vdEVtcHR5KSB7CiAgICAgIHZhciBuZXh0SW5mbyA9IGhlYXAucmVtb3ZlKCk7CiAgICAgIGlmIChpZGVudGljYWwobmV4dEluZm8sIGxhc3RJbmZvKSkgY29udGludWU7CiAgICAgIGNoYWluLmFkZChuZXh0SW5mbyk7CiAgICAgIGxhc3RJbmZvID0gbmV4dEluZm87CiAgICAgIHZhciBjbGFzc05vZGUgPSBuZXh0SW5mby5jbGFzc05vZGU7CiAgICAgIHZvaWQgYWRkVG9IZWFwKFN1cGVydHlwZSBzdXBlcnR5cGUpIHsKICAgICAgICBoZWFwLmFkZChpbmZvRm9yKHN1cGVydHlwZS5jbGFzc05vZGUpKTsKICAgICAgfQoKICAgICAgaWYgKGNsYXNzTm9kZS5zdXBlcnR5cGUgIT0gbnVsbCkgYWRkVG9IZWFwKGNsYXNzTm9kZS5zdXBlcnR5cGUpOwogICAgICBpZiAoY2xhc3NOb2RlLm1peGVkSW5UeXBlICE9IG51bGwpIGFkZFRvSGVhcChjbGFzc05vZGUubWl4ZWRJblR5cGUpOwogICAgICBjbGFzc05vZGUuaW1wbGVtZW50ZWRUeXBlcy5mb3JFYWNoKGFkZFRvSGVhcCk7CiAgICB9CiAgICByZXR1cm4gY2hhaW47CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldExlZ2FjeUxlYXN0VXBwZXJCb3VuZCgKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlMSwgSW50ZXJmYWNlVHlwZSB0eXBlMikgewogICAgLy8gVGhlIGFsZ29yaXRobSBpczogZmlyc3Qgd2UgY29tcHV0ZSBhIGxpc3Qgb2Ygc3VwZXJjbGFzc2VzIGZvciBib3RoIHR5cGVzLAogICAgLy8gb3JkZXJlZCBmcm9tIGdyZWF0ZXN0IHRvIGxlYXN0IGRlcHRoLCBhbmQgb3JkZXJlZCBieSB0b3BvbG9naWNhbCBzb3J0CiAgICAvLyBpbmRleCB3aXRoaW4gZWFjaCBkZXB0aC4gIER1ZSB0byB0aGUgc29ydCBvcmRlciwgd2UgY2FuIGZpbmQgdGhlCiAgICAvLyBpbnRlcnNlY3Rpb24gb2YgdGhlc2UgbGlzdHMgYnkgYSBzaW1wbGUgd2Fsay4KICAgIC8vCiAgICAvLyBUaGVuLCBmb3IgZWFjaCBjbGFzcyBpbiB0aGUgaW50ZXJzZWN0aW9uLCBkZXRlcm1pbmUgdGhlIGV4YWN0IHR5cGUgdGhhdAogICAgLy8gaXMgaW1wbGVtZW50ZWQgYnkgdHlwZTEgYW5kIHR5cGUyLiAgSWYgdGhlIHR5cGVzIG1hdGNoLCB0aGF0IHR5cGUgaXMgYQogICAgLy8gY2FuZGlkYXRlIChpdCdzIGEgbWVtYmVyIG9mIFNfbikuICBBcyBzb29uIGFzIHdlIGZpbmQgYSBjYW5kaWRhdGUgd2hpY2gKICAgIC8vIGlzIHVuaXF1ZSBmb3IgaXRzIGRlcHRoLCB3ZSByZXR1cm4gaXQuCiAgICAvLwogICAgLy8gQXMgYW4gb3B0aW1pemF0aW9uLCBpZiB0aGUgY2xhc3MgZm9yIEkgaXMgYSBzdWJ0eXBlIG9mIHRoZSBjbGFzcyBmb3IgSiwKICAgIC8vIHRoZW4gd2Uga25vdyB0aGF0IHRoZSBsaXN0IG9mIHN1cGVyY2xhc3NlcyBvZiBKIGlzIGEgc3Vic2V0IG9mIHRoZSBsaXN0CiAgICAvLyBvZiBzdXBlcmNsYXNzZXMgZm9yIEk7IHRoZXJlZm9yZSBpdCBpcyBzdWZmaWNpZW50IHRvIGNvbXB1dGUganVzdCB0aGUKICAgIC8vIGxpc3Qgb2Ygc3VwZXJjbGFzc2VzIGZvciBKLiAgVG8gYXZvaWQgY29tcGxpY2F0aW5nIHRoZSBjb2RlIGJlbG93ICh3aGljaAogICAgLy8gaW50ZXJzZWN0cyB0aGUgdHdvIGxpc3RzKSwgd2Ugc2V0IGJvdGggbGlzdHMgZXF1YWwgdG8gdGhlIGxpc3Qgb2YKICAgIC8vIHN1cGVyY2xhc3NlcyBmb3IgSi4gIEFuZCB2aWNlIHZlcnNhIHdpdGggdGhlIHJvbGUgb2YgSSBhbmQgSiBzd2FwcGVkLgoKICAgIC8vIENvbXB1dGUgdGhlIGxpc3Qgb2Ygc3VwZXJjbGFzc2VzIGZvciBib3RoIHR5cGVzLCB3aXRoIHRoZSBhYm92ZQogICAgLy8gb3B0aW1pemF0aW9uLgogICAgX0NsYXNzSW5mbyBpbmZvMSA9IGluZm9Gb3IodHlwZTEuY2xhc3NOb2RlKTsKICAgIF9DbGFzc0luZm8gaW5mbzIgPSBpbmZvRm9yKHR5cGUyLmNsYXNzTm9kZSk7CiAgICBMaXN0PF9DbGFzc0luZm8+IGNsYXNzZXMxOwogICAgTGlzdDxfQ2xhc3NJbmZvPiBjbGFzc2VzMjsKICAgIGlmIChpZGVudGljYWwoaW5mbzEsIGluZm8yKSB8fCBpbmZvMS5pc1N1YnR5cGVPZihpbmZvMikpIHsKICAgICAgY2xhc3NlczEgPSBjbGFzc2VzMiA9IF9nZXRSYW5rZWRTdXBlcmNsYXNzSW5mb3MoaW5mbzIpOwogICAgfSBlbHNlIGlmIChpbmZvMi5pc1N1YnR5cGVPZihpbmZvMSkpIHsKICAgICAgY2xhc3NlczEgPSBjbGFzc2VzMiA9IF9nZXRSYW5rZWRTdXBlcmNsYXNzSW5mb3MoaW5mbzEpOwogICAgfSBlbHNlIHsKICAgICAgY2xhc3NlczEgPSBfZ2V0UmFua2VkU3VwZXJjbGFzc0luZm9zKGluZm8xKTsKICAgICAgY2xhc3NlczIgPSBfZ2V0UmFua2VkU3VwZXJjbGFzc0luZm9zKGluZm8yKTsKICAgIH0KCiAgICAvLyBXYWxrIHRoZSBsaXN0cyBmaW5kaW5nIHRoZWlyIGludGVyc2VjdGlvbiwgbG9va2luZyBmb3IgYSBkZXB0aCB0aGF0IGhhcyBhCiAgICAvLyBzaW5nbGUgY2FuZGlkYXRlLgogICAgaW50IGkxID0gMDsKICAgIGludCBpMiA9IDA7CiAgICBJbnRlcmZhY2VUeXBlIGNhbmRpZGF0ZSA9IG51bGw7CiAgICBpbnQgY3VycmVudERlcHRoID0gLTE7CiAgICBpbnQgbnVtQ2FuZGlkYXRlc0F0VGhpc0RlcHRoID0gMDsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIF9DbGFzc0luZm8gbmV4dCA9IGNsYXNzZXMxW2kxXTsKICAgICAgX0NsYXNzSW5mbyBuZXh0MiA9IGNsYXNzZXMyW2kyXTsKICAgICAgaWYgKCFpZGVudGljYWwobmV4dCwgbmV4dDIpKSB7CiAgICAgICAgaWYgKF9MdWJIZWFwLnNvcnRzQmVmb3JlU3RhdGljKG5leHQsIG5leHQyKSkgewogICAgICAgICAgKytpMTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgKytpMjsKICAgICAgICB9CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgKytpMjsKICAgICAgKytpMTsKICAgICAgaWYgKG5leHQuZGVwdGggIT0gY3VycmVudERlcHRoKSB7CiAgICAgICAgaWYgKG51bUNhbmRpZGF0ZXNBdFRoaXNEZXB0aCA9PSAxKSByZXR1cm4gY2FuZGlkYXRlOwogICAgICAgIGN1cnJlbnREZXB0aCA9IG5leHQuZGVwdGg7CiAgICAgICAgbnVtQ2FuZGlkYXRlc0F0VGhpc0RlcHRoID0gMDsKICAgICAgICBjYW5kaWRhdGUgPSBudWxsOwogICAgICB9IGVsc2UgaWYgKG51bUNhbmRpZGF0ZXNBdFRoaXNEZXB0aCA+IDEpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQoKICAgICAgLy8gRm9yIGVhY2ggY2xhc3MgaW4gdGhlIGludGVyc2VjdGlvbiwgZmluZCB0aGUgZXhhY3QgdHlwZSB0aGF0IGlzCiAgICAgIC8vIGltcGxlbWVudGVkIGJ5IHR5cGUxIGFuZCB0eXBlMi4gIElmIHRoZXkgbWF0Y2gsIGl0J3MgYSBjYW5kaWRhdGUuCiAgICAgIC8vCiAgICAgIC8vIFR3byBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnM6CiAgICAgIC8vCiAgICAgIC8vIC0gSWYgdGhpcyBjbGFzcyBsYWNrcyB0eXBlIHBhcmFtZXRlcnMsIHdlIGtub3cgdGhlcmUgaXMgYSBtYXRjaCB3aXRob3V0CiAgICAgIC8vICAgbmVlZGluZyB0byBzdWJzdGl0dXRlLgogICAgICAvLwogICAgICAvLyAtIElmIHRoZSBkZXB0aCBpcyAwLCB3ZSBoYXZlIHJlYWNoZWQgT2JqZWN0LCBzbyB3ZSBjYW4gcmV0dXJuIGl0CiAgICAgIC8vICAgaW1tZWRpYXRlbHkuICBTaW5jZSBhbGwgaW50ZXJmYWNlIHR5cGVzIGFyZSBzdWJ0eXBlcyBvZiBPYmplY3QsIHRoaXMKICAgICAgLy8gICBlbnN1cmVzIHRoZSBsb29wIHRlcm1pbmF0ZXMuCiAgICAgIGlmIChuZXh0LmNsYXNzTm9kZS50eXBlUGFyYW1ldGVycy5pc0VtcHR5KSB7CiAgICAgICAgY2FuZGlkYXRlID0gbmV4dC5jbGFzc05vZGUucmF3VHlwZTsKICAgICAgICBpZiAoY3VycmVudERlcHRoID09IDApIHJldHVybiBjYW5kaWRhdGU7CiAgICAgICAgKytudW1DYW5kaWRhdGVzQXRUaGlzRGVwdGg7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHN1cGVyVHlwZTEgPSBpZGVudGljYWwoaW5mbzEsIG5leHQpCiAgICAgICAgICAgID8gdHlwZTEKICAgICAgICAgICAgOiBTdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUodHlwZTEpLnN1YnN0aXR1dGVUeXBlKAogICAgICAgICAgICAgICAgaW5mbzEuZ2VuZXJpY1N1cGVyVHlwZXNbbmV4dC5jbGFzc05vZGVdLmZpcnN0LmFzSW50ZXJmYWNlVHlwZSk7CiAgICAgICAgdmFyIHN1cGVyVHlwZTIgPSBpZGVudGljYWwoaW5mbzIsIG5leHQpCiAgICAgICAgICAgID8gdHlwZTIKICAgICAgICAgICAgOiBTdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUodHlwZTIpLnN1YnN0aXR1dGVUeXBlKAogICAgICAgICAgICAgICAgaW5mbzIuZ2VuZXJpY1N1cGVyVHlwZXNbbmV4dC5jbGFzc05vZGVdLmZpcnN0LmFzSW50ZXJmYWNlVHlwZSk7CiAgICAgICAgaWYgKHN1cGVyVHlwZTEgPT0gc3VwZXJUeXBlMikgewogICAgICAgICAgY2FuZGlkYXRlID0gc3VwZXJUeXBlMTsKICAgICAgICAgICsrbnVtQ2FuZGlkYXRlc0F0VGhpc0RlcHRoOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgU3VwZXJ0eXBlIGdldENsYXNzQXNJbnN0YW5jZU9mKENsYXNzIGNsYXNzXywgQ2xhc3Mgc3VwZXJjbGFzcykgewogICAgaWYgKGlkZW50aWNhbChjbGFzc18sIHN1cGVyY2xhc3MpKSByZXR1cm4gY2xhc3NfLmFzVGhpc1N1cGVydHlwZTsKICAgIF9DbGFzc0luZm8gaW5mbyA9IGluZm9Gb3IoY2xhc3NfKTsKICAgIGlmIChpbmZvID09IG51bGwpIHsKICAgICAgdGhyb3cgIiR7Y2xhc3NfLmZpbGVVcml9OiBObyBjbGFzcyBpbmZvIGZvciAke2NsYXNzXy5uYW1lfSI7CiAgICB9CiAgICBfQ2xhc3NJbmZvIHN1cGVySW5mbyA9IGluZm9Gb3Ioc3VwZXJjbGFzcyk7CiAgICBpZiAoc3VwZXJJbmZvID09IG51bGwpIHsKICAgICAgdGhyb3cgIiR7c3VwZXJjbGFzcy5maWxlVXJpfTogTm8gY2xhc3MgaW5mbyBmb3IgJHtzdXBlcmNsYXNzLm5hbWV9IjsKICAgIH0KICAgIGlmICghaW5mby5pc1N1YnR5cGVPZihzdXBlckluZm8pKSByZXR1cm4gbnVsbDsKICAgIGlmIChzdXBlcmNsYXNzLnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkpIHJldHVybiBzdXBlcmNsYXNzLmFzUmF3U3VwZXJ0eXBlOwogICAgcmV0dXJuIGluZm8uZ2VuZXJpY1N1cGVyVHlwZXNbc3VwZXJjbGFzc10/LmZpcnN0OwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRUeXBlQXNJbnN0YW5jZU9mKEludGVyZmFjZVR5cGUgdHlwZSwgQ2xhc3Mgc3VwZXJjbGFzcykgewogICAgU3VwZXJ0eXBlIGNhc3RlZFR5cGUgPSBnZXRDbGFzc0FzSW5zdGFuY2VPZih0eXBlLmNsYXNzTm9kZSwgc3VwZXJjbGFzcyk7CiAgICBpZiAoY2FzdGVkVHlwZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBTdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUodHlwZSkKICAgICAgICAuc3Vic3RpdHV0ZVR5cGUoY2FzdGVkVHlwZS5hc0ludGVyZmFjZVR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyIGdldERpc3BhdGNoVGFyZ2V0KENsYXNzIGNsYXNzXywgTmFtZSBuYW1lLCB7Ym9vbCBzZXR0ZXI6IGZhbHNlfSkgewogICAgX0NsYXNzSW5mbyBpbmZvID0gaW5mb0ZvcihjbGFzc18pOwogICAgTGlzdDxNZW1iZXI+IGxpc3QgPQogICAgICAgIHNldHRlciA/IGluZm8uaW1wbGVtZW50ZWRTZXR0ZXJzIDogaW5mby5pbXBsZW1lbnRlZEdldHRlcnNBbmRDYWxsczsKICAgIHJldHVybiBDbGFzc0hpZXJhcmNoeS5maW5kTWVtYmVyQnlOYW1lKGxpc3QsIG5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxNZW1iZXI+IGdldERpc3BhdGNoVGFyZ2V0cyhDbGFzcyBjbGFzc18sIHtib29sIHNldHRlcnM6IGZhbHNlfSkgewogICAgX0NsYXNzSW5mbyBpbmZvID0gaW5mb0ZvcihjbGFzc18pOwogICAgcmV0dXJuIHNldHRlcnMgPyBpbmZvLmltcGxlbWVudGVkU2V0dGVycyA6IGluZm8uaW1wbGVtZW50ZWRHZXR0ZXJzQW5kQ2FsbHM7CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXIgZ2V0SW50ZXJmYWNlTWVtYmVyKENsYXNzIGNsYXNzXywgTmFtZSBuYW1lLCB7Ym9vbCBzZXR0ZXI6IGZhbHNlfSkgewogICAgTGlzdDxNZW1iZXI+IGxpc3QgPSBnZXRJbnRlcmZhY2VNZW1iZXJzKGNsYXNzXywgc2V0dGVyczogc2V0dGVyKTsKICAgIHJldHVybiBDbGFzc0hpZXJhcmNoeS5maW5kTWVtYmVyQnlOYW1lKGxpc3QsIG5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxNZW1iZXI+IGdldEludGVyZmFjZU1lbWJlcnMoQ2xhc3MgY2xhc3NfLCB7Ym9vbCBzZXR0ZXJzOiBmYWxzZX0pIHsKICAgIHJldHVybiBfYnVpbGRJbnRlcmZhY2VNZW1iZXJzKGNsYXNzXywgaW5mb0ZvcihjbGFzc18pLCBzZXR0ZXJzOiBzZXR0ZXJzKTsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8TWVtYmVyPiBnZXREZWNsYXJlZE1lbWJlcnMoQ2xhc3MgY2xhc3NfLCB7Ym9vbCBzZXR0ZXJzOiBmYWxzZX0pIHsKICAgIHZhciBpbmZvID0gaW5mb0ZvcihjbGFzc18pOwogICAgcmV0dXJuIHNldHRlcnMgPyBpbmZvLmRlY2xhcmVkU2V0dGVycyA6IGluZm8uZGVjbGFyZWRHZXR0ZXJzQW5kQ2FsbHM7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hPdmVycmlkZVBhaXIoQ2xhc3MgY2xhc3NfLAogICAgICBjYWxsYmFjayhNZW1iZXIgZGVjbGFyZWRNZW1iZXIsIE1lbWJlciBpbnRlcmZhY2VNZW1iZXIsIGJvb2wgaXNTZXR0ZXIpLAogICAgICB7Ym9vbCBjcm9zc0dldHRlcnNTZXR0ZXJzOiBmYWxzZX0pIHsKICAgIF9DbGFzc0luZm8gaW5mbyA9IGluZm9Gb3IoY2xhc3NfKTsKICAgIGZvciAodmFyIHN1cGVydHlwZSBpbiBjbGFzc18uc3VwZXJzKSB7CiAgICAgIHZhciBzdXBlcmNsYXNzID0gc3VwZXJ0eXBlLmNsYXNzTm9kZTsKICAgICAgdmFyIHN1cGVyR2V0dGVycyA9IGdldEludGVyZmFjZU1lbWJlcnMoc3VwZXJjbGFzcyk7CiAgICAgIHZhciBzdXBlclNldHRlcnMgPSBnZXRJbnRlcmZhY2VNZW1iZXJzKHN1cGVyY2xhc3MsIHNldHRlcnM6IHRydWUpOwogICAgICBfcmVwb3J0T3ZlcnJpZGVzKGluZm8uZGVjbGFyZWRHZXR0ZXJzQW5kQ2FsbHMsIHN1cGVyR2V0dGVycywgY2FsbGJhY2spOwogICAgICBfcmVwb3J0T3ZlcnJpZGVzKGluZm8uZGVjbGFyZWRTZXR0ZXJzLCBzdXBlclNldHRlcnMsIGNhbGxiYWNrLAogICAgICAgICAgaXNTZXR0ZXI6IHRydWUpOwogICAgfQogIH0KCiAgc3RhdGljIHZvaWQgX3JlcG9ydE92ZXJyaWRlcygKICAgICAgTGlzdDxNZW1iZXI+IGRlY2xhcmVkTGlzdCwKICAgICAgTGlzdDxNZW1iZXI+IGluaGVyaXRlZExpc3QsCiAgICAgIGNhbGxiYWNrKE1lbWJlciBkZWNsYXJlZE1lbWJlciwgTWVtYmVyIGludGVyZmFjZU1lbWJlciwgYm9vbCBpc1NldHRlciksCiAgICAgIHtib29sIGlzU2V0dGVyOiBmYWxzZX0pIHsKICAgIGludCBpID0gMCwgaiA9IDA7CiAgICB3aGlsZSAoaSA8IGRlY2xhcmVkTGlzdC5sZW5ndGggJiYgaiA8IGluaGVyaXRlZExpc3QubGVuZ3RoKSB7CiAgICAgIE1lbWJlciBkZWNsYXJlZCA9IGRlY2xhcmVkTGlzdFtpXTsKICAgICAgTWVtYmVyIGluaGVyaXRlZCA9IGluaGVyaXRlZExpc3Rbal07CiAgICAgIGludCBjb21wYXJpc29uID0gQ2xhc3NIaWVyYXJjaHkuY29tcGFyZU1lbWJlcnMoZGVjbGFyZWQsIGluaGVyaXRlZCk7CiAgICAgIGlmIChjb21wYXJpc29uIDwgMCkgewogICAgICAgICsraTsKICAgICAgfSBlbHNlIGlmIChjb21wYXJpc29uID4gMCkgewogICAgICAgICsrajsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoIWlkZW50aWNhbChkZWNsYXJlZCwgaW5oZXJpdGVkKSkgewogICAgICAgICAgY2FsbGJhY2soZGVjbGFyZWQsIGluaGVyaXRlZCwgaXNTZXR0ZXIpOwogICAgICAgIH0KICAgICAgICAvLyBBIGdpdmVuIGRlY2xhcmVkIG1lbWJlciBtYXkgb3ZlcnJpZGUgbXVsdGlwbGUgaW50ZXJmYWNlIG1lbWJlcnMsCiAgICAgICAgLy8gc28gb25seSBtb3ZlIHBhc3QgdGhlIGludGVyZmFjZSBtZW1iZXIuCiAgICAgICAgKytqOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PFN1cGVydHlwZT4gZ2VuZXJpY1N1cGVydHlwZXNPZihDbGFzcyBjbGFzc18pIHsKICAgIGZpbmFsIHN1cGVydHlwZXMgPSBpbmZvRm9yKGNsYXNzXykuZ2VuZXJpY1N1cGVyVHlwZXM7CiAgICBpZiAoc3VwZXJ0eXBlcyA9PSBudWxsKSByZXR1cm4gY29uc3QgPFN1cGVydHlwZT5bXTsKICAgIC8vIE11bHRpcGxlIHN1cGVydHlwZXMgY2FuIGFyaXNlIGZyb20gYW1iaWd1b3VzIHN1cGVydHlwZXMuIFRoZSBmaXJzdAogICAgLy8gc3VwZXJ0eXBlIGlzIHRoZSByZWFsIG9uZTsgdGhlIG90aGVycyBhcmUgcHVyZWx5IGluZm9ybWF0aW9uYWwuCiAgICByZXR1cm4gc3VwZXJ0eXBlcy52YWx1ZXMubWFwKCh2KSA9PiB2LmZpcnN0KS50b0xpc3QoKTsKICB9CgogIEBvdmVycmlkZQogIENsYXNzSGllcmFyY2h5IGFwcGx5VHJlZUNoYW5nZXMoSXRlcmFibGU8TGlicmFyeT4gcmVtb3ZlZExpYnJhcmllcywKICAgICAgSXRlcmFibGU8TGlicmFyeT4gZW5zdXJlS25vd25MaWJyYXJpZXMsCiAgICAgIHtDb21wb25lbnQgcmVpc3N1ZUFtYmlndW91c1N1cGVydHlwZXNGb3J9KSB7CiAgICAvLyBSZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIHJlbW92ZWQgY2xhc3Nlcy4KICAgIGZvciAoTGlicmFyeSBsaWIgaW4gcmVtb3ZlZExpYnJhcmllcykgewogICAgICBpZiAoIWtub3duTGlicmFyaWVzLmNvbnRhaW5zKGxpYikpIGNvbnRpbnVlOwogICAgICBmb3IgKENsYXNzIGNsYXNzXyBpbiBsaWIuY2xhc3NlcykgewogICAgICAgIF9DbGFzc0luZm8gaW5mbyA9IF9pbmZvTWFwW2NsYXNzX107CiAgICAgICAgaWYgKGNsYXNzXy5zdXBlcnR5cGUgIT0gbnVsbCkgewogICAgICAgICAgX2luZm9NYXBbY2xhc3NfLnN1cGVydHlwZS5jbGFzc05vZGVdPy5kaXJlY3RFeHRlbmRlcnM/LnJlbW92ZShpbmZvKTsKICAgICAgICB9CiAgICAgICAgaWYgKGNsYXNzXy5taXhlZEluVHlwZSAhPSBudWxsKSB7CiAgICAgICAgICBfaW5mb01hcFtjbGFzc18ubWl4ZWRJblR5cGUuY2xhc3NOb2RlXT8uZGlyZWN0TWl4ZXJzPy5yZW1vdmUoaW5mbyk7CiAgICAgICAgfQogICAgICAgIGZvciAodmFyIHN1cGVydHlwZSBpbiBjbGFzc18uaW1wbGVtZW50ZWRUeXBlcykgewogICAgICAgICAgX2luZm9NYXBbc3VwZXJ0eXBlLmNsYXNzTm9kZV0/LmRpcmVjdEltcGxlbWVudGVycz8ucmVtb3ZlKGluZm8pOwogICAgICAgIH0KCiAgICAgICAgX2luZm9NYXAucmVtb3ZlKGNsYXNzXyk7CiAgICAgICAgX3JlY29yZGVkQW1iaWd1b3VzU3VwZXJ0eXBlcy5yZW1vdmUoY2xhc3NfKTsKICAgICAgfQogICAgICBrbm93bkxpYnJhcmllcy5yZW1vdmUobGliKTsKICAgIH0KCiAgICAvLyBJZiB3ZSBoYXZlIGEgY2FjaGVkIGNvbXB1dGF0aW9uIG9mIHN1YnR5cGVzLCBpbnZhbGlkYXRlIGl0IGFuZCBzdG9wCiAgICAvLyBjYWNoaW5nIGl0LgogICAgaWYgKF9jYWNoZWRDbGFzc0hpZXJhcmNoeVN1YnR5cGVzICE9IG51bGwpIHsKICAgICAgX2NhY2hlZENsYXNzSGllcmFyY2h5U3VidHlwZXMuaW52YWxpZGF0ZWQgPSB0cnVlOwogICAgfQoKICAgIGlmIChfcmVjb3JkZWRBbWJpZ3VvdXNTdXBlcnR5cGVzLmlzTm90RW1wdHkgJiYKICAgICAgICByZWlzc3VlQW1iaWd1b3VzU3VwZXJ0eXBlc0ZvciAhPSBudWxsKSB7CiAgICAgIFNldDxMaWJyYXJ5PiBsaWJzID0KICAgICAgICAgIG5ldyBTZXQ8TGlicmFyeT4uZnJvbShyZWlzc3VlQW1iaWd1b3VzU3VwZXJ0eXBlc0Zvci5saWJyYXJpZXMpOwogICAgICBmb3IgKENsYXNzIGNsYXNzXyBpbiBfcmVjb3JkZWRBbWJpZ3VvdXNTdXBlcnR5cGVzLmtleXMpIHsKICAgICAgICBpZiAoIWxpYnMuY29udGFpbnMoY2xhc3NfLmVuY2xvc2luZ0xpYnJhcnkpKSBjb250aW51ZTsKICAgICAgICBMaXN0PFN1cGVydHlwZT4gcmVjb3JkZWQgPSBfcmVjb3JkZWRBbWJpZ3VvdXNTdXBlcnR5cGVzW2NsYXNzX107CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWNvcmRlZC5sZW5ndGg7IGkgKz0gMikgewogICAgICAgICAgX29uQW1iaWd1b3VzU3VwZXJ0eXBlc05vdFdyYXBwZWQoCiAgICAgICAgICAgICAgY2xhc3NfLCByZWNvcmRlZFtpXSwgcmVjb3JkZWRbaSArIDFdKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBBZGQgdGhlIG5ldyBjbGFzc2VzLgogICAgTGlzdDxDbGFzcz4gYWRkZWRDbGFzc2VzU29ydGVkID0gbmV3IExpc3Q8Q2xhc3M+KCk7CiAgICBpbnQgZXhwZWN0ZWRTdGFydEluZGV4ID0gX3RvcFNvcnRJbmRleDsKICAgIGZvciAoTGlicmFyeSBsaWIgaW4gZW5zdXJlS25vd25MaWJyYXJpZXMpIHsKICAgICAgaWYgKGtub3duTGlicmFyaWVzLmNvbnRhaW5zKGxpYikpIGNvbnRpbnVlOwogICAgICBmb3IgKENsYXNzIGNsYXNzXyBpbiBsaWIuY2xhc3NlcykgewogICAgICAgIF90b3BvbG9naWNhbFNvcnRWaXNpdChjbGFzc18sIG5ldyBTZXQ8Q2xhc3M+KCksCiAgICAgICAgICAgIG9yZGVyZWRMaXN0OiBhZGRlZENsYXNzZXNTb3J0ZWQpOwogICAgICB9CiAgICAgIGtub3duTGlicmFyaWVzLmFkZChsaWIpOwogICAgfQogICAgX2luaXRpYWxpemVUb3BvbG9naWNhbGx5U29ydGVkQ2xhc3NlcygKICAgICAgICBhZGRlZENsYXNzZXNTb3J0ZWQsIGV4cGVjdGVkU3RhcnRJbmRleCk7CgogICAgcmV0dXJuIHRoaXM7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc0hpZXJhcmNoeSBhcHBseU1lbWJlckNoYW5nZXMoSXRlcmFibGU8Q2xhc3M+IGNsYXNzZXMsCiAgICAgIHtib29sIGZpbmREZXNjZW5kYW50czogZmFsc2V9KSB7CiAgICBpZiAoY2xhc3Nlcy5pc0VtcHR5KSByZXR1cm4gdGhpczsKCiAgICBMaXN0PF9DbGFzc0luZm8+IGluZm9zID0gbmV3IExpc3Q8X0NsYXNzSW5mbz4oKTsKICAgIGlmIChmaW5kRGVzY2VuZGFudHMpIHsKICAgICAgU2V0PF9DbGFzc0luZm8+IHByb2Nlc3NlZENsYXNzZXMgPSBuZXcgU2V0PF9DbGFzc0luZm8+KCk7CiAgICAgIExpc3Q8X0NsYXNzSW5mbz4gd29ya2xpc3QgPSA8X0NsYXNzSW5mbz5bXTsKICAgICAgZm9yIChDbGFzcyBjbGFzc18gaW4gY2xhc3NlcykgewogICAgICAgIF9DbGFzc0luZm8gaW5mbyA9IGluZm9Gb3IoY2xhc3NfKTsKICAgICAgICB3b3JrbGlzdC5hZGQoaW5mbyk7CiAgICAgIH0KCiAgICAgIHdoaWxlICh3b3JrbGlzdC5pc05vdEVtcHR5KSB7CiAgICAgICAgX0NsYXNzSW5mbyBpbmZvID0gd29ya2xpc3QucmVtb3ZlTGFzdCgpOwogICAgICAgIGlmIChwcm9jZXNzZWRDbGFzc2VzLmFkZChpbmZvKSkgewogICAgICAgICAgd29ya2xpc3QuYWRkQWxsKGluZm8uZGlyZWN0RXh0ZW5kZXJzKTsKICAgICAgICAgIHdvcmtsaXN0LmFkZEFsbChpbmZvLmRpcmVjdEltcGxlbWVudGVycyk7CiAgICAgICAgICB3b3JrbGlzdC5hZGRBbGwoaW5mby5kaXJlY3RNaXhlcnMpOwogICAgICAgIH0KICAgICAgfQogICAgICBpbmZvcy5hZGRBbGwocHJvY2Vzc2VkQ2xhc3Nlcyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKENsYXNzIGNsYXNzXyBpbiBjbGFzc2VzKSB7CiAgICAgICAgX0NsYXNzSW5mbyBpbmZvID0gaW5mb0ZvcihjbGFzc18pOwogICAgICAgIGluZm9zLmFkZChpbmZvKTsKICAgICAgfQogICAgfQoKICAgIGluZm9zLnNvcnQoKF9DbGFzc0luZm8gYSwgX0NsYXNzSW5mbyBiKSB7CiAgICAgIHJldHVybiBhLnRvcG9sb2dpY2FsSW5kZXggLSBiLnRvcG9sb2dpY2FsSW5kZXg7CiAgICB9KTsKCiAgICBmb3IgKF9DbGFzc0luZm8gaW5mbyBpbiBpbmZvcykgewogICAgICBDbGFzcyBjbGFzc18gPSBpbmZvLmNsYXNzTm9kZTsKICAgICAgX2J1aWxkRGVjbGFyZWRNZW1iZXJzKGNsYXNzXywgaW5mbyk7CiAgICAgIF9idWlsZEltcGxlbWVudGVkTWVtYmVycyhjbGFzc18sIGluZm8pOwogICAgICBpbmZvLmludGVyZmFjZVNldHRlcnMgPSBudWxsOwogICAgICBpbmZvLmludGVyZmFjZUdldHRlcnNBbmRDYWxscyA9IG51bGw7CiAgICAgIF9idWlsZEludGVyZmFjZU1lbWJlcnMoY2xhc3NfLCBpbmZvLCBzZXR0ZXJzOiB0cnVlKTsKICAgICAgX2J1aWxkSW50ZXJmYWNlTWVtYmVycyhjbGFzc18sIGluZm8sIHNldHRlcnM6IGZhbHNlKTsKICAgIH0KCiAgICBhc3NlcnQoc2FuaXR5Q2hlY2tBbHNvS25vd3NQYXJlbnRBbmRMaWJyYXJ5KCkpOwoKICAgIHJldHVybiB0aGlzOwogIH0KCiAgYm9vbCBzYW5pdHlDaGVja0Fsc29Lbm93c1BhcmVudEFuZExpYnJhcnkoKSB7CiAgICBmb3IgKENsYXNzIGMgaW4gX2luZm9NYXAua2V5cykgewogICAgICBpZiAoIWtub3duTGlicmFyaWVzLmNvbnRhaW5zKGMuZW5jbG9zaW5nTGlicmFyeSkpIHsKICAgICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiRGlkbid0IGtub3cgbGlicmFyeSBvZiAkYyAoZnJvbSAke2MuZmlsZVVyaX0pIik7CiAgICAgIH0KICAgICAgaWYgKGMuc3VwZXJ0eXBlICE9IG51bGwgJiYgX2luZm9NYXBbYy5zdXBlcnR5cGUuY2xhc3NOb2RlXSA9PSBudWxsKSB7CiAgICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIkRpZG4ndCBrbm93IHBhcmVudCBvZiAkYyAoZnJvbSAke2MuZmlsZVVyaX0pIik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgU3VwZXJ0eXBlIGFzSW5zdGFudGlhdGlvbk9mKFN1cGVydHlwZSB0eXBlLCBDbGFzcyBzdXBlcmNsYXNzKSB7CiAgICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gZ2V0VHlwZUFzSW5zdGFuY2VPZiwgZXhjZXB0IHRoYXQgaXQgYXNzdW1lcyB0aGF0CiAgICAvLyBzdXBlcmNsYXNzIGlzIGEgZ2VuZXJpYyBjbGFzcy4gIEl0IHRodXMgZG9lcyBub3QgcmVseSBvbiBiZWluZyBhYmxlCiAgICAvLyB0byBhbnN3ZXIgaXNTdWJ0eXBlT2YgcXVlcmllcyBhbmQgc28gY2FuIGJlIHVzZWQgYmVmb3JlIHdlIGhhdmUgYnVpbHQKICAgIC8vIHRoZSBpbnRlcnZhbHMgbmVlZGVkIGZvciB0aG9zZSBxdWVyaWVzLgogICAgYXNzZXJ0KHN1cGVyY2xhc3MudHlwZVBhcmFtZXRlcnMuaXNOb3RFbXB0eSk7CiAgICBpZiAodHlwZS5jbGFzc05vZGUgPT0gc3VwZXJjbGFzcykgewogICAgICByZXR1cm4gc3VwZXJjbGFzcy5hc1RoaXNTdXBlcnR5cGU7CiAgICB9CiAgICB2YXIgbWFwID0gaW5mb0Zvcih0eXBlLmNsYXNzTm9kZSk/LmdlbmVyaWNTdXBlclR5cGVzOwogICAgcmV0dXJuIG1hcCA9PSBudWxsID8gbnVsbCA6IG1hcFtzdXBlcmNsYXNzXT8uZmlyc3Q7CiAgfQoKICB2b2lkIF9pbml0aWFsaXplKExpc3Q8TGlicmFyeT4gbGlicmFyaWVzKSB7CiAgICAvLyBCdWlsZCB0aGUgY2xhc3Mgb3JkZXJpbmcgYmFzZWQgb24gYSB0b3BvbG9naWNhbCBzb3J0LgogICAgZm9yICh2YXIgbGlicmFyeSBpbiBsaWJyYXJpZXMpIHsKICAgICAgZm9yICh2YXIgY2xhc3NOb2RlIGluIGxpYnJhcnkuY2xhc3NlcykgewogICAgICAgIF90b3BvbG9naWNhbFNvcnRWaXNpdChjbGFzc05vZGUsIG5ldyBTZXQ8Q2xhc3M+KCkpOwogICAgICB9CiAgICAgIGtub3duTGlicmFyaWVzLmFkZChsaWJyYXJ5KTsKICAgIH0KCiAgICBfaW5pdGlhbGl6ZVRvcG9sb2dpY2FsbHlTb3J0ZWRDbGFzc2VzKF9pbmZvTWFwLmtleXMsIDApOwogIH0KCiAgLy8vIC0gQnVpbGQgaW5kZXggb2YgZGlyZWN0IGNoaWxkcmVuLgogIC8vLyAtIEJ1aWxkIGxpc3Qgb2Ygc3VwZXIgY2xhc3NlcyBhbmQgc3VwZXIgdHlwZXMuCiAgLy8vIC0gSW5mZXIgYW5kIHJlY29yZCBzdXBlcnR5cGVzIGZvciB0aGUgY2xhc3Nlcy4KICAvLy8gLSBSZWNvcmQgaW50ZXJmYWNlIG1lbWJlcnMuCiAgLy8vIC0gUGVyZm9ybSBzb21lIHNhbml0eSBjaGVja2luZy4KICAvLy8gRG8gdGhpcyBhZnRlciB0aGUgdG9wb2xvZ2ljYWwgc29ydCBzbyB0aGF0IHN1cGVyIHR5cGVzIGFsd2F5cyBvY2N1cgogIC8vLyBiZWZvcmUgc3VidHlwZXMuCiAgdm9pZCBfaW5pdGlhbGl6ZVRvcG9sb2dpY2FsbHlTb3J0ZWRDbGFzc2VzKAogICAgICBJdGVyYWJsZTxDbGFzcz4gY2xhc3NlcywgaW50IGV4cGVjdGVkU3RhcnRpbmdUb3BvbG9naWNhbEluZGV4KSB7CiAgICBpbnQgaSA9IGV4cGVjdGVkU3RhcnRpbmdUb3BvbG9naWNhbEluZGV4OwogICAgZm9yIChDbGFzcyBjbGFzc18gaW4gY2xhc3NlcykgewogICAgICBfQ2xhc3NJbmZvIGluZm8gPSBfaW5mb01hcFtjbGFzc19dOwogICAgICBpZiAoY2xhc3NfLnN1cGVydHlwZSAhPSBudWxsKSB7CiAgICAgICAgX2luZm9NYXBbY2xhc3NfLnN1cGVydHlwZS5jbGFzc05vZGVdLmRpcmVjdEV4dGVuZGVycy5hZGQoaW5mbyk7CiAgICAgIH0KICAgICAgaWYgKGNsYXNzXy5taXhlZEluVHlwZSAhPSBudWxsKSB7CiAgICAgICAgX2luZm9NYXBbY2xhc3NfLm1peGVkSW5UeXBlLmNsYXNzTm9kZV0uZGlyZWN0TWl4ZXJzLmFkZChpbmZvKTsKICAgICAgfQogICAgICBmb3IgKHZhciBzdXBlcnR5cGUgaW4gY2xhc3NfLmltcGxlbWVudGVkVHlwZXMpIHsKICAgICAgICBfaW5mb01hcFtzdXBlcnR5cGUuY2xhc3NOb2RlXS5kaXJlY3RJbXBsZW1lbnRlcnMuYWRkKGluZm8pOwogICAgICB9CiAgICAgIF9jb2xsZWN0U3VwZXJzRm9yQ2xhc3MoY2xhc3NfKTsKCiAgICAgIGlmIChjbGFzc18uc3VwZXJ0eXBlICE9IG51bGwpIHsKICAgICAgICBfcmVjb3JkU3VwZXJUeXBlcyhpbmZvLCBjbGFzc18uc3VwZXJ0eXBlKTsKICAgICAgfQogICAgICBpZiAoY2xhc3NfLm1peGVkSW5UeXBlICE9IG51bGwpIHsKICAgICAgICBtaXhpbkluZmVycmVyPy5pbmZlcih0aGlzLCBjbGFzc18pOwogICAgICAgIF9yZWNvcmRTdXBlclR5cGVzKGluZm8sIGNsYXNzXy5taXhlZEluVHlwZSk7CiAgICAgIH0KICAgICAgZm9yIChTdXBlcnR5cGUgc3VwZXJ0eXBlIGluIGNsYXNzXy5pbXBsZW1lbnRlZFR5cGVzKSB7CiAgICAgICAgX3JlY29yZFN1cGVyVHlwZXMoaW5mbywgc3VwZXJ0eXBlKTsKICAgICAgfQoKICAgICAgX2J1aWxkSW50ZXJmYWNlTWVtYmVycyhjbGFzc18sIGluZm8sIHNldHRlcnM6IHRydWUpOwogICAgICBfYnVpbGRJbnRlcmZhY2VNZW1iZXJzKGNsYXNzXywgaW5mbywgc2V0dGVyczogZmFsc2UpOwoKICAgICAgaWYgKGluZm8gPT0gbnVsbCkgewogICAgICAgIHRocm93ICJObyBpbmZvIGZvciAke2NsYXNzXy5uYW1lfSBmcm9tICR7Y2xhc3NfLmZpbGVVcml9LiI7CiAgICAgIH0KICAgICAgaWYgKGluZm8udG9wb2xvZ2ljYWxJbmRleCAhPSBpKSB7CiAgICAgICAgdGhyb3cgIlVuZXhwZWN0ZWQgdG9wb2xvZ2ljYWxJbmRleCAoJHtpbmZvLnRvcG9sb2dpY2FsSW5kZXh9ICE9ICRpKSAiCiAgICAgICAgICAgICJmb3IgJHtjbGFzc18ubmFtZX0gZnJvbSAke2NsYXNzXy5maWxlVXJpfS4iOwogICAgICB9CiAgICAgIGkrKzsKICAgIH0KICB9CgogIC8vLyBVcHdhcmRzIHRyYXZlcnNhbCBvZiB0aGUgY2xhc3MgaGllcmFyY2h5IHRoYXQgb3JkZXJzIGNsYXNzZXMgc28gc3VwZXIKICAvLy8gdHlwZXMgYmVmb3JlIHRoZWlyIHN1YnR5cGVzLgogIC8vLwogIC8vLyBSZXR1cm5zIHRoZSBkZXB0aCBvZiB0aGUgdmlzaXRlZCBjbGFzcyAodGhlIG51bWJlciBvZiBzdGVwcyBpbiB0aGUgbG9uZ2VzdAogIC8vLyBpbmhlcml0YW5jZSBwYXRoIHRvIHRoZSByb290IGNsYXNzKS4KICBpbnQgX3RvcFNvcnRJbmRleCA9IDA7CiAgaW50IF90b3BvbG9naWNhbFNvcnRWaXNpdChDbGFzcyBjbGFzc05vZGUsIFNldDxDbGFzcz4gYmVpbmdWaXNpdGVkLAogICAgICB7TGlzdDxDbGFzcz4gb3JkZXJlZExpc3R9KSB7CiAgICB2YXIgaW5mbyA9IF9pbmZvTWFwW2NsYXNzTm9kZV07CiAgICBpZiAoaW5mbyAhPSBudWxsKSB7CiAgICAgIHJldHVybiBpbmZvLmRlcHRoOwogICAgfQoKICAgIGlmICghYmVpbmdWaXNpdGVkLmFkZChjbGFzc05vZGUpKSB7CiAgICAgIHRocm93ICdDeWNsaWMgaW5oZXJpdGFuY2UgaW52b2x2aW5nICR7Y2xhc3NOb2RlLm5hbWV9JzsKICAgIH0KCiAgICBpbmZvID0gbmV3IF9DbGFzc0luZm8oY2xhc3NOb2RlKTsKCiAgICBpbnQgc3VwZXJEZXB0aCA9IC0xOwogICAgaWYgKGNsYXNzTm9kZS5zdXBlcnR5cGUgIT0gbnVsbCkgewogICAgICBzdXBlckRlcHRoID0gbWF4KAogICAgICAgICAgc3VwZXJEZXB0aCwKICAgICAgICAgIF90b3BvbG9naWNhbFNvcnRWaXNpdChjbGFzc05vZGUuc3VwZXJ0eXBlLmNsYXNzTm9kZSwgYmVpbmdWaXNpdGVkLAogICAgICAgICAgICAgIG9yZGVyZWRMaXN0OiBvcmRlcmVkTGlzdCkpOwogICAgfQogICAgaWYgKGNsYXNzTm9kZS5taXhlZEluVHlwZSAhPSBudWxsKSB7CiAgICAgIHN1cGVyRGVwdGggPSBtYXgoCiAgICAgICAgICBzdXBlckRlcHRoLAogICAgICAgICAgX3RvcG9sb2dpY2FsU29ydFZpc2l0KGNsYXNzTm9kZS5taXhlZEluVHlwZS5jbGFzc05vZGUsIGJlaW5nVmlzaXRlZCwKICAgICAgICAgICAgICBvcmRlcmVkTGlzdDogb3JkZXJlZExpc3QpKTsKICAgIH0KICAgIGZvciAodmFyIHN1cGVydHlwZSBpbiBjbGFzc05vZGUuaW1wbGVtZW50ZWRUeXBlcykgewogICAgICBzdXBlckRlcHRoID0gbWF4KAogICAgICAgICAgc3VwZXJEZXB0aCwKICAgICAgICAgIF90b3BvbG9naWNhbFNvcnRWaXNpdChzdXBlcnR5cGUuY2xhc3NOb2RlLCBiZWluZ1Zpc2l0ZWQsCiAgICAgICAgICAgICAgb3JkZXJlZExpc3Q6IG9yZGVyZWRMaXN0KSk7CiAgICB9CiAgICBfYnVpbGREZWNsYXJlZE1lbWJlcnMoY2xhc3NOb2RlLCBpbmZvKTsKICAgIF9idWlsZEltcGxlbWVudGVkTWVtYmVycyhjbGFzc05vZGUsIGluZm8pOwogICAgaW5mby50b3BvbG9naWNhbEluZGV4ID0gX3RvcFNvcnRJbmRleCsrOwoKICAgIF9pbmZvTWFwW2NsYXNzTm9kZV0gPSBpbmZvOwogICAgb3JkZXJlZExpc3Q/LmFkZChjbGFzc05vZGUpOwogICAgYmVpbmdWaXNpdGVkLnJlbW92ZShjbGFzc05vZGUpOwogICAgcmV0dXJuIGluZm8uZGVwdGggPSBzdXBlckRlcHRoICsgMTsKICB9CgogIHZvaWQgX2J1aWxkRGVjbGFyZWRNZW1iZXJzKENsYXNzIGNsYXNzTm9kZSwgX0NsYXNzSW5mbyBpbmZvKSB7CiAgICBpZiAoY2xhc3NOb2RlLm1peGVkSW5UeXBlICE9IG51bGwpIHsKICAgICAgX0NsYXNzSW5mbyBtaXhlZEluZm8gPSBfaW5mb01hcFtjbGFzc05vZGUubWl4ZWRJblR5cGUuY2xhc3NOb2RlXTsKCiAgICAgIExpc3Q8TWVtYmVyPiBkZWNsYXJlZEdldHRlcnNBbmRDYWxscyA9IDxNZW1iZXI+W107CiAgICAgIGZvciAoTWVtYmVyIG1peGluTWVtYmVyIGluIG1peGVkSW5mby5kZWNsYXJlZEdldHRlcnNBbmRDYWxscykgewogICAgICAgIGlmIChtaXhpbk1lbWJlciBpcyEgUHJvY2VkdXJlIHx8CiAgICAgICAgICAgIChtaXhpbk1lbWJlciBpcyBQcm9jZWR1cmUgJiYKICAgICAgICAgICAgICAgICFtaXhpbk1lbWJlci5pc05vU3VjaE1ldGhvZEZvcndhcmRlcikpIHsKICAgICAgICAgIGRlY2xhcmVkR2V0dGVyc0FuZENhbGxzLmFkZChtaXhpbk1lbWJlcik7CiAgICAgICAgfQogICAgICB9CgogICAgICBMaXN0PE1lbWJlcj4gZGVjbGFyZWRTZXR0ZXJzID0gPE1lbWJlcj5bXTsKICAgICAgZm9yIChNZW1iZXIgbWl4aW5NZW1iZXIgaW4gbWl4ZWRJbmZvLmRlY2xhcmVkU2V0dGVycykgewogICAgICAgIGlmIChtaXhpbk1lbWJlciBpcyEgUHJvY2VkdXJlIHx8CiAgICAgICAgICAgIChtaXhpbk1lbWJlciBpcyBQcm9jZWR1cmUgJiYKICAgICAgICAgICAgICAgICFtaXhpbk1lbWJlci5pc05vU3VjaE1ldGhvZEZvcndhcmRlcikpIHsKICAgICAgICAgIGRlY2xhcmVkU2V0dGVycy5hZGQobWl4aW5NZW1iZXIpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgaW5mby5kZWNsYXJlZEdldHRlcnNBbmRDYWxscyA9IGRlY2xhcmVkR2V0dGVyc0FuZENhbGxzOwogICAgICBpbmZvLmRlY2xhcmVkU2V0dGVycyA9IGRlY2xhcmVkU2V0dGVyczsKICAgIH0gZWxzZSB7CiAgICAgIHZhciBtZW1iZXJzID0gaW5mby5kZWNsYXJlZEdldHRlcnNBbmRDYWxscyA9IDxNZW1iZXI+W107CiAgICAgIHZhciBzZXR0ZXJzID0gaW5mby5kZWNsYXJlZFNldHRlcnMgPSA8TWVtYmVyPltdOwogICAgICBmb3IgKFByb2NlZHVyZSBwcm9jZWR1cmUgaW4gY2xhc3NOb2RlLnByb2NlZHVyZXMpIHsKICAgICAgICBpZiAocHJvY2VkdXJlLmlzU3RhdGljKSBjb250aW51ZTsKICAgICAgICBpZiAocHJvY2VkdXJlLmtpbmQgPT0gUHJvY2VkdXJlS2luZC5TZXR0ZXIpIHsKICAgICAgICAgIHNldHRlcnMuYWRkKHByb2NlZHVyZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG1lbWJlcnMuYWRkKHByb2NlZHVyZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZvciAoRmllbGQgZmllbGQgaW4gY2xhc3NOb2RlLmZpZWxkcykgewogICAgICAgIGlmIChmaWVsZC5pc1N0YXRpYykgY29udGludWU7CiAgICAgICAgaWYgKGZpZWxkLmhhc0ltcGxpY2l0R2V0dGVyKSB7CiAgICAgICAgICBtZW1iZXJzLmFkZChmaWVsZCk7CiAgICAgICAgfQogICAgICAgIGlmIChmaWVsZC5oYXNJbXBsaWNpdFNldHRlcikgewogICAgICAgICAgc2V0dGVycy5hZGQoZmllbGQpOwogICAgICAgIH0KICAgICAgfQogICAgICBtZW1iZXJzLnNvcnQoQ2xhc3NIaWVyYXJjaHkuY29tcGFyZU1lbWJlcnMpOwogICAgICBzZXR0ZXJzLnNvcnQoQ2xhc3NIaWVyYXJjaHkuY29tcGFyZU1lbWJlcnMpOwogICAgfQogIH0KCiAgdm9pZCBfYnVpbGRJbXBsZW1lbnRlZE1lbWJlcnMoQ2xhc3MgY2xhc3NOb2RlLCBfQ2xhc3NJbmZvIGluZm8pIHsKICAgIExpc3Q8TWVtYmVyPiBpbmhlcml0ZWRNZW1iZXJzOwogICAgTGlzdDxNZW1iZXI+IGluaGVyaXRlZFNldHRlcnM7CiAgICBpZiAoY2xhc3NOb2RlLnN1cGVydHlwZSA9PSBudWxsKSB7CiAgICAgIGluaGVyaXRlZE1lbWJlcnMgPSBpbmhlcml0ZWRTZXR0ZXJzID0gY29uc3QgPE1lbWJlcj5bXTsKICAgIH0gZWxzZSB7CiAgICAgIF9DbGFzc0luZm8gc3VwZXJJbmZvID0gX2luZm9NYXBbY2xhc3NOb2RlLnN1cGVydHlwZS5jbGFzc05vZGVdOwogICAgICBpbmhlcml0ZWRNZW1iZXJzID0gc3VwZXJJbmZvLmltcGxlbWVudGVkR2V0dGVyc0FuZENhbGxzOwogICAgICBpbmhlcml0ZWRTZXR0ZXJzID0gc3VwZXJJbmZvLmltcGxlbWVudGVkU2V0dGVyczsKICAgIH0KICAgIGluZm8uaW1wbGVtZW50ZWRHZXR0ZXJzQW5kQ2FsbHMgPSBfaW5oZXJpdE1lbWJlcnMoCiAgICAgICAgaW5mby5kZWNsYXJlZEdldHRlcnNBbmRDYWxscywgaW5oZXJpdGVkTWVtYmVycywKICAgICAgICBza2lwQWJzdHJhY3RNZW1iZXJzOiB0cnVlKTsKICAgIGluZm8uaW1wbGVtZW50ZWRTZXR0ZXJzID0gX2luaGVyaXRNZW1iZXJzKAogICAgICAgIGluZm8uZGVjbGFyZWRTZXR0ZXJzLCBpbmhlcml0ZWRTZXR0ZXJzLAogICAgICAgIHNraXBBYnN0cmFjdE1lbWJlcnM6IHRydWUpOwogIH0KCiAgTGlzdDxNZW1iZXI+IF9idWlsZEludGVyZmFjZU1lbWJlcnMoQ2xhc3MgY2xhc3NOb2RlLCBfQ2xhc3NJbmZvIGluZm8sCiAgICAgIHtib29sIHNldHRlcnN9KSB7CiAgICBpZiAoaW5mbyA9PSBudWxsKSB7CiAgICAgIHRocm93ICIke2NsYXNzTm9kZS5maWxlVXJpfTogTm8gY2xhc3MgaW5mbyBmb3IgJHtjbGFzc05vZGUubmFtZX0iOwogICAgfQogICAgTGlzdDxNZW1iZXI+IG1lbWJlcnMgPQogICAgICAgIHNldHRlcnMgPyBpbmZvLmludGVyZmFjZVNldHRlcnMgOiBpbmZvLmludGVyZmFjZUdldHRlcnNBbmRDYWxsczsKICAgIGlmIChtZW1iZXJzICE9IG51bGwpIHJldHVybiBtZW1iZXJzOwogICAgTGlzdDxNZW1iZXI+IGFsbEluaGVyaXRlZE1lbWJlcnMgPSA8TWVtYmVyPltdOwogICAgTGlzdDxNZW1iZXI+IGRlY2xhcmVkID0KICAgICAgICBzZXR0ZXJzID8gaW5mby5kZWNsYXJlZFNldHRlcnMgOiBpbmZvLmRlY2xhcmVkR2V0dGVyc0FuZENhbGxzOwogICAgdm9pZCBpbmhlcml0RnJvbShTdXBlcnR5cGUgdHlwZSkgewogICAgICBpZiAodHlwZSA9PSBudWxsKSByZXR1cm47CiAgICAgIExpc3Q8TWVtYmVyPiBpbmhlcml0ZWQgPSBfYnVpbGRJbnRlcmZhY2VNZW1iZXJzKAogICAgICAgICAgdHlwZS5jbGFzc05vZGUsIF9pbmZvTWFwW3R5cGUuY2xhc3NOb2RlXSwKICAgICAgICAgIHNldHRlcnM6IHNldHRlcnMpOwogICAgICBpbmhlcml0ZWQgPSBfZ2V0VW5zaGFkb3dlZEluaGVyaXRlZE1lbWJlcnMoZGVjbGFyZWQsIGluaGVyaXRlZCk7CiAgICAgIGFsbEluaGVyaXRlZE1lbWJlcnMgPQogICAgICAgICAgQ2xhc3NIaWVyYXJjaHkubWVyZ2VTb3J0ZWRMaXN0cyhhbGxJbmhlcml0ZWRNZW1iZXJzLCBpbmhlcml0ZWQpOwogICAgfQoKICAgIGluaGVyaXRGcm9tKGNsYXNzTm9kZS5zdXBlcnR5cGUpOwogICAgaW5oZXJpdEZyb20oY2xhc3NOb2RlLm1peGVkSW5UeXBlKTsKICAgIGNsYXNzTm9kZS5pbXBsZW1lbnRlZFR5cGVzLmZvckVhY2goaW5oZXJpdEZyb20pOwogICAgbWVtYmVycyA9IF9pbmhlcml0TWVtYmVycyhkZWNsYXJlZCwgYWxsSW5oZXJpdGVkTWVtYmVycyk7CiAgICBpZiAoc2V0dGVycykgewogICAgICBpbmZvLmludGVyZmFjZVNldHRlcnMgPSBtZW1iZXJzOwogICAgfSBlbHNlIHsKICAgICAgaW5mby5pbnRlcmZhY2VHZXR0ZXJzQW5kQ2FsbHMgPSBtZW1iZXJzOwogICAgfQogICAgcmV0dXJuIG1lbWJlcnM7CiAgfQoKICAvLy8gQ29tcHV0ZXMgdGhlIGxpc3Qgb2YgaW1wbGVtZW50ZWQgbWVtYmVycywgYmFzZWQgb24gdGhlIGRlY2xhcmVkIGluc3RhbmNlCiAgLy8vIG1lbWJlcnMgYW5kIGluaGVyaXRlZCBpbnN0YW5jZSBtZW1iZXJzLgogIC8vLwogIC8vLyBCb3RoIGxpc3RzIG11c3QgYmUgc29ydGVkIGJ5IG5hbWUgYmVmb3JlaGFuZC4KICBzdGF0aWMgTGlzdDxNZW1iZXI+IF9pbmhlcml0TWVtYmVycygKICAgICAgTGlzdDxNZW1iZXI+IGRlY2xhcmVkLCBMaXN0PE1lbWJlcj4gaW5oZXJpdGVkLAogICAgICB7Ym9vbCBza2lwQWJzdHJhY3RNZW1iZXJzOiBmYWxzZX0pIHsKICAgIExpc3Q8TWVtYmVyPiByZXN1bHQgPSA8TWVtYmVyPltdLi5sZW5ndGggPQogICAgICAgIGRlY2xhcmVkLmxlbmd0aCArIGluaGVyaXRlZC5sZW5ndGg7CiAgICAvLyBTaW5jZSBib3RoIGxpc3RzIGFyZSBzb3J0ZWQsIHdlIGNhbiBmdXNlIHRoZW0gbGlrZSBpbiBtZXJnZSBzb3J0LgogICAgaW50IHN0b3JlSW5kZXggPSAwOwogICAgaW50IGkgPSAwLCBqID0gMDsKICAgIHdoaWxlIChpIDwgZGVjbGFyZWQubGVuZ3RoICYmIGogPCBpbmhlcml0ZWQubGVuZ3RoKSB7CiAgICAgIE1lbWJlciBkZWNsYXJlZE1lbWJlciA9IGRlY2xhcmVkW2ldOwogICAgICBNZW1iZXIgaW5oZXJpdGVkTWVtYmVyID0gaW5oZXJpdGVkW2pdOwogICAgICBpZiAoc2tpcEFic3RyYWN0TWVtYmVycyAmJiBkZWNsYXJlZE1lbWJlci5pc0Fic3RyYWN0KSB7CiAgICAgICAgKytpOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChza2lwQWJzdHJhY3RNZW1iZXJzICYmIGluaGVyaXRlZE1lbWJlci5pc0Fic3RyYWN0KSB7CiAgICAgICAgKytqOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGludCBjb21wYXJpc29uID0KICAgICAgICAgIENsYXNzSGllcmFyY2h5LmNvbXBhcmVNZW1iZXJzKGRlY2xhcmVkTWVtYmVyLCBpbmhlcml0ZWRNZW1iZXIpOwogICAgICBpZiAoY29tcGFyaXNvbiA8IDApIHsKICAgICAgICByZXN1bHRbc3RvcmVJbmRleCsrXSA9IGRlY2xhcmVkTWVtYmVyOwogICAgICAgICsraTsKICAgICAgfSBlbHNlIGlmIChjb21wYXJpc29uID4gMCkgewogICAgICAgIHJlc3VsdFtzdG9yZUluZGV4KytdID0gaW5oZXJpdGVkTWVtYmVyOwogICAgICAgICsrajsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXN1bHRbc3RvcmVJbmRleCsrXSA9IGRlY2xhcmVkTWVtYmVyOwogICAgICAgICsraTsKICAgICAgICArK2o7IC8vIE1vdmUgcGFzdCBvdmVycmlkZGVuIG1lbWJlci4KICAgICAgfQogICAgfQogICAgLy8gT25lIG9mIHRoZSB0d28gbGlzdHMgaXMgbm93IGV4aGF1c3RlZCwgY29weSBvdmVyIHRoZSByZW1haW5zLgogICAgd2hpbGUgKGkgPCBkZWNsYXJlZC5sZW5ndGgpIHsKICAgICAgTWVtYmVyIGRlY2xhcmVkTWVtYmVyID0gZGVjbGFyZWRbaSsrXTsKICAgICAgaWYgKHNraXBBYnN0cmFjdE1lbWJlcnMgJiYgZGVjbGFyZWRNZW1iZXIuaXNBYnN0cmFjdCkgY29udGludWU7CiAgICAgIHJlc3VsdFtzdG9yZUluZGV4KytdID0gZGVjbGFyZWRNZW1iZXI7CiAgICB9CiAgICB3aGlsZSAoaiA8IGluaGVyaXRlZC5sZW5ndGgpIHsKICAgICAgTWVtYmVyIGluaGVyaXRlZE1lbWJlciA9IGluaGVyaXRlZFtqKytdOwogICAgICBpZiAoc2tpcEFic3RyYWN0TWVtYmVycyAmJiBpbmhlcml0ZWRNZW1iZXIuaXNBYnN0cmFjdCkgY29udGludWU7CiAgICAgIHJlc3VsdFtzdG9yZUluZGV4KytdID0gaW5oZXJpdGVkTWVtYmVyOwogICAgfQogICAgcmVzdWx0Lmxlbmd0aCA9IHN0b3JlSW5kZXg7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIFJldHVybnMgdGhlIHN1YnNldCBvZiBtZW1iZXJzIGluIFtpbmhlcml0ZWRdIGZvciB3aGljaCBhIG1lbWJlciB3aXRoIHRoZQogIC8vLyBzYW1lIG5hbWUgZG9lcyBub3Qgb2NjdXIgaW4gW2RlY2xhcmVkXS4KICAvLy8KICAvLy8gVGhlIGlucHV0IGxpc3RzIG11c3QgYmUgc29ydGVkLCBhbmQgdGhlIHJldHVybmVkIGxpc3QgaXMgc29ydGVkLgogIHN0YXRpYyBMaXN0PE1lbWJlcj4gX2dldFVuc2hhZG93ZWRJbmhlcml0ZWRNZW1iZXJzKAogICAgICBMaXN0PE1lbWJlcj4gZGVjbGFyZWQsIExpc3Q8TWVtYmVyPiBpbmhlcml0ZWQpIHsKICAgIExpc3Q8TWVtYmVyPiByZXN1bHQgPSA8TWVtYmVyPltdLi5sZW5ndGggPSBpbmhlcml0ZWQubGVuZ3RoOwogICAgaW50IHN0b3JlSW5kZXggPSAwOwogICAgaW50IGkgPSAwLCBqID0gMDsKICAgIHdoaWxlIChpIDwgZGVjbGFyZWQubGVuZ3RoICYmIGogPCBpbmhlcml0ZWQubGVuZ3RoKSB7CiAgICAgIE1lbWJlciBkZWNsYXJlZE1lbWJlciA9IGRlY2xhcmVkW2ldOwogICAgICBNZW1iZXIgaW5oZXJpdGVkTWVtYmVyID0gaW5oZXJpdGVkW2pdOwogICAgICBpbnQgY29tcGFyaXNvbiA9CiAgICAgICAgICBDbGFzc0hpZXJhcmNoeS5jb21wYXJlTWVtYmVycyhkZWNsYXJlZE1lbWJlciwgaW5oZXJpdGVkTWVtYmVyKTsKICAgICAgaWYgKGNvbXBhcmlzb24gPCAwKSB7CiAgICAgICAgKytpOwogICAgICB9IGVsc2UgaWYgKGNvbXBhcmlzb24gPiAwKSB7CiAgICAgICAgcmVzdWx0W3N0b3JlSW5kZXgrK10gPSBpbmhlcml0ZWRNZW1iZXI7CiAgICAgICAgKytqOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIE1vdmUgcGFzdCB0aGUgc2hhZG93ZWQgbWVtYmVyLCBidXQgcmV0YWluIHRoZSBkZWNsYXJlZCBtZW1iZXIsIGFzCiAgICAgICAgLy8gaXQgbWF5IHNoYWRvdyBtdWx0aXBsZSBtZW1iZXJzLgogICAgICAgICsrajsKICAgICAgfQogICAgfQogICAgLy8gSWYgdGhlIGxpc3Qgb2YgZGVjbGFyZWQgbWVtYmVycyBpcyBleGhhdXN0ZWQsIGNvcHkgb3ZlciB0aGUgcmVtYWlucyBvZgogICAgLy8gdGhlIGluaGVyaXRlZCBtZW1iZXJzLgogICAgd2hpbGUgKGogPCBpbmhlcml0ZWQubGVuZ3RoKSB7CiAgICAgIHJlc3VsdFtzdG9yZUluZGV4KytdID0gaW5oZXJpdGVkW2orK107CiAgICB9CiAgICByZXN1bHQubGVuZ3RoID0gc3RvcmVJbmRleDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIF9yZWNvcmRTdXBlclR5cGVzKF9DbGFzc0luZm8gc3ViSW5mbywgU3VwZXJ0eXBlIHN1cGVydHlwZSkgewogICAgX0NsYXNzSW5mbyBzdXBlckluZm8gPSBfaW5mb01hcFtzdXBlcnR5cGUuY2xhc3NOb2RlXTsKICAgIGlmIChzdXBlcnR5cGUudHlwZUFyZ3VtZW50cy5pc0VtcHR5KSB7CiAgICAgIGlmIChzdXBlckluZm8uZ2VuZXJpY1N1cGVyVHlwZXMgPT0gbnVsbCkgcmV0dXJuOwogICAgICAvLyBDb3B5IG92ZXIgdGhlIHN1cGVyIHR5cGUgZW50cmllcy4KICAgICAgc3ViSW5mby5nZW5lcmljU3VwZXJUeXBlcyA/Pz0gPENsYXNzLCBMaXN0PFN1cGVydHlwZT4+e307CiAgICAgIHN1cGVySW5mby5nZW5lcmljU3VwZXJUeXBlcz8uZm9yRWFjaCgoQ2xhc3Mga2V5LCBMaXN0PFN1cGVydHlwZT4gdHlwZXMpIHsKICAgICAgICBmb3IgKFN1cGVydHlwZSB0eXBlIGluIHR5cGVzKSB7CiAgICAgICAgICBzdWJJbmZvLnJlY29yZEdlbmVyaWNTdXBlclR5cGUoa2V5LCB0eXBlLCBfb25BbWJpZ3VvdXNTdXBlcnR5cGVzKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgLy8gQ29weSBvdmVyIGFsbCB0cmFuc2l0aXZlIGdlbmVyaWMgc3VwZXIgdHlwZXMsIGFuZCBzdWJzdGl0dXRlIHRoZQogICAgICAvLyBmcmVlIHZhcmlhYmxlcyB3aXRoIHRob3NlIHByb3ZpZGVkIGluIFtzdXBlcnR5cGVdLgogICAgICBDbGFzcyBzdXBlcmNsYXNzID0gc3VwZXJ0eXBlLmNsYXNzTm9kZTsKICAgICAgdmFyIHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoCiAgICAgICAgICBzdXBlcmNsYXNzLnR5cGVQYXJhbWV0ZXJzLCBzdXBlcnR5cGUudHlwZUFyZ3VtZW50cyk7CiAgICAgIHN1YkluZm8uZ2VuZXJpY1N1cGVyVHlwZXMgPz89IDxDbGFzcywgTGlzdDxTdXBlcnR5cGU+Pnt9OwogICAgICBzdXBlckluZm8uZ2VuZXJpY1N1cGVyVHlwZXM/LmZvckVhY2goKENsYXNzIGtleSwgTGlzdDxTdXBlcnR5cGU+IHR5cGVzKSB7CiAgICAgICAgZm9yIChTdXBlcnR5cGUgdHlwZSBpbiB0eXBlcykgewogICAgICAgICAgc3ViSW5mby5yZWNvcmRHZW5lcmljU3VwZXJUeXBlKGtleSwKICAgICAgICAgICAgICBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVN1cGVydHlwZSh0eXBlKSwgX29uQW1iaWd1b3VzU3VwZXJ0eXBlcyk7CiAgICAgICAgfQogICAgICB9KTsKCiAgICAgIHN1YkluZm8ucmVjb3JkR2VuZXJpY1N1cGVyVHlwZSgKICAgICAgICAgIHN1cGVyY2xhc3MsIHN1cGVydHlwZSwgX29uQW1iaWd1b3VzU3VwZXJ0eXBlcyk7CiAgICB9CiAgfQoKICAvLy8gQnVpbGQgbGlzdHMgb2Ygc3VwZXIgdHlwZXMgYW5kIHN1cGVyIGNsYXNzZXMuCiAgLy8vIE5vdGUgdGhhdCB0aGUgc3VwZXIgY2xhc3MgYW5kIHN1cGVyIHR5cGVzIG9mIHRoZSBjbGFzcyBtdXN0IGFscmVhZHkgaGF2ZQogIC8vLyBoYWQgdGhlaXIgc3VwZXJzIGNvbGxlY3RlZC4KICB2b2lkIF9jb2xsZWN0U3VwZXJzRm9yQ2xhc3MoQ2xhc3MgY2xhc3NfKSB7CiAgICBfQ2xhc3NJbmZvIGluZm8gPSBfaW5mb01hcFtjbGFzc19dOwoKICAgIHZhciBzdXBlcmNsYXNzU2V0QnVpbGRlciA9IG5ldyBfSW50ZXJ2YWxMaXN0QnVpbGRlcigpCiAgICAgIC4uYWRkU2luZ2xldG9uKGluZm8udG9wb2xvZ2ljYWxJbmRleCk7CiAgICB2YXIgc3VwZXJ0eXBlU2V0QnVpbGRlciA9IG5ldyBfSW50ZXJ2YWxMaXN0QnVpbGRlcigpCiAgICAgIC4uYWRkU2luZ2xldG9uKGluZm8udG9wb2xvZ2ljYWxJbmRleCk7CgogICAgaWYgKGNsYXNzXy5zdXBlcnR5cGUgIT0gbnVsbCkgewogICAgICBfQ2xhc3NJbmZvIHN1cGVydHlwZUluZm8gPSBfaW5mb01hcFtjbGFzc18uc3VwZXJ0eXBlLmNsYXNzTm9kZV07CiAgICAgIHN1cGVyY2xhc3NTZXRCdWlsZGVyCiAgICAgICAgICAuYWRkSW50ZXJ2YWxMaXN0KHN1cGVydHlwZUluZm8uc3VwZXJjbGFzc0ludGVydmFsTGlzdCk7CiAgICAgIHN1cGVydHlwZVNldEJ1aWxkZXIuYWRkSW50ZXJ2YWxMaXN0KHN1cGVydHlwZUluZm8uc3VwZXJ0eXBlSW50ZXJ2YWxMaXN0KTsKICAgIH0KCiAgICBpZiAoY2xhc3NfLm1peGVkSW5UeXBlICE9IG51bGwpIHsKICAgICAgX0NsYXNzSW5mbyBtaXhlZEluVHlwZUluZm8gPSBfaW5mb01hcFtjbGFzc18ubWl4ZWRJblR5cGUuY2xhc3NOb2RlXTsKICAgICAgc3VwZXJ0eXBlU2V0QnVpbGRlcgogICAgICAgICAgLmFkZEludGVydmFsTGlzdChtaXhlZEluVHlwZUluZm8uc3VwZXJ0eXBlSW50ZXJ2YWxMaXN0KTsKICAgIH0KCiAgICBmb3IgKFN1cGVydHlwZSBzdXBlcnR5cGUgaW4gY2xhc3NfLmltcGxlbWVudGVkVHlwZXMpIHsKICAgICAgX0NsYXNzSW5mbyBzdXBlcnR5cGVJbmZvID0gX2luZm9NYXBbc3VwZXJ0eXBlLmNsYXNzTm9kZV07CiAgICAgIHN1cGVydHlwZVNldEJ1aWxkZXIuYWRkSW50ZXJ2YWxMaXN0KHN1cGVydHlwZUluZm8uc3VwZXJ0eXBlSW50ZXJ2YWxMaXN0KTsKICAgIH0KCiAgICBpbmZvLnN1cGVyY2xhc3NJbnRlcnZhbExpc3QgPSBzdXBlcmNsYXNzU2V0QnVpbGRlci5idWlsZEludGVydmFsTGlzdCgpOwogICAgaW5mby5zdXBlcnR5cGVJbnRlcnZhbExpc3QgPSBzdXBlcnR5cGVTZXRCdWlsZGVyLmJ1aWxkSW50ZXJ2YWxMaXN0KCk7CiAgfQoKICAvLy8gQ3JlYXRlcyBhIGhpc3RvZ3JhbSBzdWNoIHRoYXQgaW5kZXggYE5gIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgY2xhc3NlcwogIC8vLyB0aGF0IGhhdmUgYE5gIGludGVydmFscyBpbiBpdHMgc3VwZXJ0eXBlIHNldC4KICAvLy8KICAvLy8gVGhlIG1vcmUgbnVtYmVycyBhcmUgY29uZGVuc2VkIG5lYXIgdGhlIGJlZ2lubmluZywgdGhlIG1vcmUgZWZmaWNpZW50IHRoZQogIC8vLyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSBpcy4KICBMaXN0PGludD4gZ2V0RXhwZW5zZUhpc3RvZ3JhbSgpIHsKICAgIHZhciByZXN1bHQgPSA8aW50PltdOwogICAgZm9yIChDbGFzcyBjbGFzc18gaW4gX2luZm9NYXAua2V5cykgewogICAgICB2YXIgaW5mbyA9IF9pbmZvTWFwW2NsYXNzX107CiAgICAgIGludCBpbnRlcnZhbHMgPSBpbmZvLnN1cGVydHlwZUludGVydmFsTGlzdC5sZW5ndGggfi8gMjsKICAgICAgaWYgKGludGVydmFscyA+PSByZXN1bHQubGVuZ3RoKSB7CiAgICAgICAgaW50IG9sZExlbmd0aCA9IHJlc3VsdC5sZW5ndGg7CiAgICAgICAgcmVzdWx0Lmxlbmd0aCA9IGludGVydmFscyArIDE7CiAgICAgICAgcmVzdWx0LmZpbGxSYW5nZShvbGRMZW5ndGgsIHJlc3VsdC5sZW5ndGgsIDApOwogICAgICB9CiAgICAgIHJlc3VsdFtpbnRlcnZhbHNdICs9IDE7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGF2ZXJhZ2UgbnVtYmVyIG9mIGludGVydmFscyBwZXIgc3VwZXJ0eXBlIHJlbGF0aW9uIChsZXNzCiAgLy8vIGlzIGJldHRlciwgMS4wIGlzIGJhZCkuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYW4gZXN0aW1hdGUgb2YgdGhlIG1lbW9yeSB1c2UgY29tcGFyZWQgdG8gYSBkYXRhIHN0cnVjdHVyZSB0aGF0CiAgLy8vIGVudW1lcmF0ZXMgYWxsIHN1cGVyY2xhc3Mvc3VwZXJ0eXBlIHBhaXJzLgogIGRvdWJsZSBnZXRDb21wcmVzc2lvblJhdGlvKCkgewogICAgaW50IGludGVydmFscyA9IDA7CiAgICBpbnQgc2l6ZXMgPSAwOwogICAgZm9yIChDbGFzcyBjbGFzc18gaW4gX2luZm9NYXAua2V5cykgewogICAgICB2YXIgaW5mbyA9IF9pbmZvTWFwW2NsYXNzX107CiAgICAgIGludGVydmFscyArPSAoaW5mby5zdXBlcmNsYXNzSW50ZXJ2YWxMaXN0Lmxlbmd0aCArCiAgICAgICAgICAgICAgaW5mby5zdXBlcnR5cGVJbnRlcnZhbExpc3QubGVuZ3RoKSB+LwogICAgICAgICAgMjsKICAgICAgc2l6ZXMgKz0gX2ludGVydmFsTGlzdFNpemUoaW5mby5zdXBlcmNsYXNzSW50ZXJ2YWxMaXN0KSArCiAgICAgICAgICBfaW50ZXJ2YWxMaXN0U2l6ZShpbmZvLnN1cGVydHlwZUludGVydmFsTGlzdCk7CiAgICB9CgogICAgcmV0dXJuIHNpemVzID09IDAgPyAxLjAgOiBpbnRlcnZhbHMgLyBzaXplczsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBoYXNoIHRhYmxlcyBzdG9yaW5nIGhpZXJhcmNoeSBkYXRhLgogIGludCBnZXRTdXBlclR5cGVIYXNoVGFibGVTaXplKCkgewogICAgaW50IHN1bSA9IDA7CiAgICBmb3IgKENsYXNzIGNsYXNzXyBpbiBfaW5mb01hcC5rZXlzKSB7CiAgICAgIHN1bSArPSBfaW5mb01hcFtjbGFzc19dLmdlbmVyaWNTdXBlclR5cGVzPy5sZW5ndGggPz8gMDsKICAgIH0KICAgIHJldHVybiBzdW07CiAgfQp9CgpjbGFzcyBfSW50ZXJ2YWxMaXN0QnVpbGRlciB7CiAgZmluYWwgTGlzdDxpbnQ+IGV2ZW50cyA9IDxpbnQ+W107CgogIHZvaWQgYWRkSW50ZXJ2YWwoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICAvLyBBZGQgYW4gZXZlbnQgcG9pbnQgZm9yIGVhY2ggaW50ZXJ2YWwgZW5kIHBvaW50LCB1c2luZyB0aGUgbG93IGJpdCB0bwogICAgLy8gZGlzdGluZ3Vpc2ggb3BlbmluZyBmcm9tIGNsb3NpbmcgZW5kIHBvaW50cy4gQ2xvc2luZyBlbmQgcG9pbnRzIHNob3VsZAogICAgLy8gaGF2ZSB0aGUgaGlnaCBiaXQgdG8gZW5zdXJlIHRoZXkgb2NjdXIgYWZ0ZXIgYW4gb3BlbmluZyBlbmQgcG9pbnQuCiAgICBldmVudHMuYWRkKHN0YXJ0IDw8IDEpOwogICAgZXZlbnRzLmFkZCgoZW5kIDw8IDEpICsgMSk7CiAgfQoKICB2b2lkIGFkZFNpbmdsZXRvbihpbnQgeCkgewogICAgYWRkSW50ZXJ2YWwoeCwgeCArIDEpOwogIH0KCiAgdm9pZCBhZGRJbnRlcnZhbExpc3QoVWludDMyTGlzdCBpbnRlcnZhbHMpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW50ZXJ2YWxzLmxlbmd0aDsgaSArPSAyKSB7CiAgICAgIGFkZEludGVydmFsKGludGVydmFsc1tpXSwgaW50ZXJ2YWxzW2kgKyAxXSk7CiAgICB9CiAgfQoKICBVaW50MzJMaXN0IGJ1aWxkSW50ZXJ2YWxMaXN0KCkgewogICAgLy8gU29ydCB0aGUgZXZlbnQgcG9pbnRzIGFuZCBzd2VlcCBsZWZ0IHRvIHJpZ2h0IHdoaWxlIHRyYWNraW5nIGhvdyBtYW55CiAgICAvLyBpbnRlcnZhbHMgd2UgYXJlIGN1cnJlbnRseSBpbnNpZGUuICBSZWNvcmQgYW4gaW50ZXJ2YWwgZW5kIHBvaW50IHdoZW4gdGhlCiAgICAvLyBudW1iZXIgb2YgaW50ZXJ2YWxzIGRyb3AgdG8gemVybyBvciBpbmNyZWFzZSBmcm9tIHplcm8gdG8gb25lLgogICAgLy8gRXZlbnQgcG9pbnRzIGFyZSBlbmNvZGVkIHNvIHRoYXQgYW4gb3BlbmluZyBlbmQgcG9pbnQgb2NjdXIgYmVmb3JlIGEKICAgIC8vIGNsb3NpbmcgZW5kIHBvaW50IGF0IHRoZSBzYW1lIHZhbHVlLgogICAgZXZlbnRzLnNvcnQoKTsKICAgIGludCBpbnNpZGVDb3VudCA9IDA7IC8vIFRoZSBudW1iZXIgb2YgaW50ZXJ2YWxzIHdlIGFyZSBjdXJyZW50bHkgaW5zaWRlLgogICAgaW50IHN0b3JlSW5kZXggPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBldmVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgaW50IGV2ZW50ID0gZXZlbnRzW2ldOwogICAgICBpZiAoZXZlbnQgJiAxID09IDApIHsKICAgICAgICAvLyBTdGFydCBwb2ludAogICAgICAgICsraW5zaWRlQ291bnQ7CiAgICAgICAgaWYgKGluc2lkZUNvdW50ID09IDEpIHsKICAgICAgICAgIC8vIFN0b3JlIHRoZSByZXN1bHRzIHRlbXBvcmFyaWx5IGJhY2sgaW4gdGhlIGV2ZW50IGFycmF5LgogICAgICAgICAgZXZlbnRzW3N0b3JlSW5kZXgrK10gPSBldmVudCA+PiAxOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBFbmQgcG9pbnQKICAgICAgICAtLWluc2lkZUNvdW50OwogICAgICAgIGlmIChpbnNpZGVDb3VudCA9PSAwKSB7CiAgICAgICAgICBldmVudHNbc3RvcmVJbmRleCsrXSA9IGV2ZW50ID4+IDE7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAvLyBDb3B5IHRoZSByZXN1bHRzIG92ZXIgdG8gYSB0eXBlZCBhcnJheSBvZiB0aGUgY29ycmVjdCBsZW5ndGguCiAgICB2YXIgcmVzdWx0ID0gbmV3IFVpbnQzMkxpc3Qoc3RvcmVJbmRleCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0b3JlSW5kZXg7ICsraSkgewogICAgICByZXN1bHRbaV0gPSBldmVudHNbaV07CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQoKYm9vbCBfaW50ZXJ2YWxMaXN0Q29udGFpbnMoVWludDMyTGlzdCBpbnRlcnZhbExpc3QsIGludCB4KSB7CiAgaW50IGxvdyA9IDAsIGhpZ2ggPSBpbnRlcnZhbExpc3QubGVuZ3RoIC0gMTsKICBpZiAoaGlnaCA9PSAtMSB8fCB4IDwgaW50ZXJ2YWxMaXN0WzBdIHx8IGludGVydmFsTGlzdFtoaWdoXSA8PSB4KSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIC8vIEZpbmQgdGhlIGxvd2VyIGJvdW5kIG9mIHggaW4gdGhlIGxpc3QuCiAgLy8gSWYgdGhlIGxvd2VyIGJvdW5kIGlzIGF0IGFuIGV2ZW4gaW5kZXgsIHRoZSBsb3dlciBib3VuZCBpcyBhbiBvcGVuaW5nIHBvaW50CiAgLy8gb2YgYW4gaW50ZXJ2YWwgdGhhdCBjb250YWlucyB4LCBvdGhlcndpc2UgaXQgaXMgYSBjbG9zaW5nIHBvaW50IG9mIGFuCiAgLy8gaW50ZXJ2YWwgYmVsb3cgeCBhbmQgdGhlcmUgaXMgbm8gaW50ZXJ2YWwgY29udGFpbmluZyB4LgogIHdoaWxlIChsb3cgPCBoaWdoKSB7CiAgICBpbnQgbWlkID0gaGlnaCAtICgoaGlnaCAtIGxvdykgPj4gMSk7IC8vIEdldCBtaWRkbGUsIHJvdW5kaW5nIHVwLgogICAgaW50IHBpdm90ID0gaW50ZXJ2YWxMaXN0W21pZF07CiAgICBpZiAocGl2b3QgPD0geCkgewogICAgICBsb3cgPSBtaWQ7CiAgICB9IGVsc2UgewogICAgICBoaWdoID0gbWlkIC0gMTsKICAgIH0KICB9CiAgcmV0dXJuIGxvdyA9PSBoaWdoICYmIChsb3cgJiAxKSA9PSAwOwp9CgppbnQgX2ludGVydmFsTGlzdFNpemUoVWludDMyTGlzdCBpbnRlcnZhbExpc3QpIHsKICBpbnQgc2l6ZSA9IDA7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRlcnZhbExpc3QubGVuZ3RoOyBpICs9IDIpIHsKICAgIHNpemUgKz0gaW50ZXJ2YWxMaXN0W2kgKyAxXSAtIGludGVydmFsTGlzdFtpXTsKICB9CiAgcmV0dXJuIHNpemU7Cn0KCmNsYXNzIF9DbGFzc0luZm8gewogIGJvb2wgdXNlZCA9IGZhbHNlOwogIGZpbmFsIENsYXNzIGNsYXNzTm9kZTsKICBpbnQgdG9wb2xvZ2ljYWxJbmRleCA9IDA7CiAgaW50IGRlcHRoID0gMDsKCiAgLy8gU3VwZXIgdHlwZXMgbXVzdCBhbHdheXMgb2NjdXIgYmVmb3JlIHN1YnR5cGVzIGluIHRoZXNlIGxpc3RzLgogIC8vIEZvciBleGFtcGxlOgogIC8vCiAgLy8gICBjbGFzcyBBIGV4dGVuZHMgT2JqZWN0CiAgLy8gICBjbGFzcyBCIGV4dGVuZHMgT2JqZWN0IGltcGxlbWVudHMgQQogIC8vCiAgLy8gSGVyZSBgQWAgbXVzdCBvY2N1ciBiZWZvcmUgYEJgIGluIHRoZSBsaXN0IG9mIGRpcmVjdCBleHRlbmRlcnMgb2YgT2JqZWN0LAogIC8vIGJlY2F1c2UgYEJgIGlzIGEgc3VidHlwZSBvZiBgQWAuCiAgZmluYWwgU2V0PF9DbGFzc0luZm8+IGRpcmVjdEV4dGVuZGVycyA9IG5ldyBMaW5rZWRIYXNoU2V0PF9DbGFzc0luZm8+KCk7CiAgZmluYWwgU2V0PF9DbGFzc0luZm8+IGRpcmVjdE1peGVycyA9IG5ldyBMaW5rZWRIYXNoU2V0PF9DbGFzc0luZm8+KCk7CiAgZmluYWwgU2V0PF9DbGFzc0luZm8+IGRpcmVjdEltcGxlbWVudGVycyA9IG5ldyBMaW5rZWRIYXNoU2V0PF9DbGFzc0luZm8+KCk7CgogIFVpbnQzMkxpc3Qgc3VwZXJjbGFzc0ludGVydmFsTGlzdDsKICBVaW50MzJMaXN0IHN1cGVydHlwZUludGVydmFsTGlzdDsKCiAgTGlzdDxfQ2xhc3NJbmZvPiBsZWFzdFVwcGVyQm91bmRJbmZvczsKCiAgLy8vIE1hcHMgZ2VuZXJpYyBzdXBlcnR5cGUgY2xhc3NlcyB0byB0aGUgaW5zdGFudGlhdGlvbiBpbXBsZW1lbnRlZCBieSB0aGlzCiAgLy8vIGNsYXNzLgogIC8vLwogIC8vLyBFLmcuIGBMaXN0YCBtYXBzIHRvIGBMaXN0PFN0cmluZz5gIGZvciBhIGNsYXNzIHRoYXQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseQogIC8vLyBpbXBsZW1lbnRzIGBMaXN0PFN0cmluZz5gLgogIE1hcDxDbGFzcywgTGlzdDxTdXBlcnR5cGU+PiBnZW5lcmljU3VwZXJUeXBlczsKCiAgLy8vIEluc3RhbmNlIGZpZWxkcywgZ2V0dGVycywgbWV0aG9kcywgYW5kIG9wZXJhdG9ycyBkZWNsYXJlZCBpbiB0aGlzIGNsYXNzCiAgLy8vIG9yIGl0cyBtaXhlZC1pbiBjbGFzcywgc29ydGVkIGFjY29yZGluZyB0byBbX2NvbXBhcmVNZW1iZXJzXS4KICBMaXN0PE1lbWJlcj4gZGVjbGFyZWRHZXR0ZXJzQW5kQ2FsbHM7CgogIC8vLyBOb24tZmluYWwgaW5zdGFuY2UgZmllbGRzIGFuZCBzZXR0ZXJzIGRlY2xhcmVkIGluIHRoaXMgY2xhc3Mgb3IgaXRzCiAgLy8vIG1peGVkLWluIGNsYXNzLCBzb3J0ZWQgYWNjb3JkaW5nIHRvIFtfY29tcGFyZU1lbWJlcnNdLgogIExpc3Q8TWVtYmVyPiBkZWNsYXJlZFNldHRlcnM7CgogIC8vLyBJbnN0YW5jZSBmaWVsZHMsIGdldHRlcnMsIG1ldGhvZHMsIGFuZCBvcGVyYXRvcnMgaW1wbGVtZW50ZWQgYnkgdGhpcyBjbGFzcwogIC8vLyAoZGVjbGFyZWQgb3IgaW5oZXJpdGVkKS4KICBMaXN0PE1lbWJlcj4gaW1wbGVtZW50ZWRHZXR0ZXJzQW5kQ2FsbHM7CgogIC8vLyBOb24tZmluYWwgaW5zdGFuY2UgZmllbGRzIGFuZCBzZXR0ZXJzIGltcGxlbWVudGVkIGJ5IHRoaXMgY2xhc3MKICAvLy8gKGRlY2xhcmVkIG9yIGluaGVyaXRlZCkuCiAgTGlzdDxNZW1iZXI+IGltcGxlbWVudGVkU2V0dGVyczsKCiAgTGlzdDxNZW1iZXI+IGludGVyZmFjZUdldHRlcnNBbmRDYWxsczsKICBMaXN0PE1lbWJlcj4gaW50ZXJmYWNlU2V0dGVyczsKCiAgX0NsYXNzSW5mbyh0aGlzLmNsYXNzTm9kZSk7CgogIGJvb2wgaXNTdWJjbGFzc09mKF9DbGFzc0luZm8gb3RoZXIpIHsKICAgIHJldHVybiBfaW50ZXJ2YWxMaXN0Q29udGFpbnMoCiAgICAgICAgc3VwZXJjbGFzc0ludGVydmFsTGlzdCwgb3RoZXIudG9wb2xvZ2ljYWxJbmRleCk7CiAgfQoKICBib29sIGlzU3VidHlwZU9mKF9DbGFzc0luZm8gb3RoZXIpIHsKICAgIHJldHVybiBfaW50ZXJ2YWxMaXN0Q29udGFpbnMoc3VwZXJ0eXBlSW50ZXJ2YWxMaXN0LCBvdGhlci50b3BvbG9naWNhbEluZGV4KTsKICB9CgogIHZvaWQgcmVjb3JkR2VuZXJpY1N1cGVyVHlwZShDbGFzcyBjbHMsIFN1cGVydHlwZSB0eXBlLAogICAgICBIYW5kbGVBbWJpZ3VvdXNTdXBlcnR5cGVzIG9uQW1iaWd1b3VzU3VwZXJ0eXBlcykgewogICAgTGlzdDxTdXBlcnR5cGU+IGV4aXN0aW5nID0gZ2VuZXJpY1N1cGVyVHlwZXNbY2xzXTsKICAgIGlmIChleGlzdGluZyA9PSBudWxsKSB7CiAgICAgIGdlbmVyaWNTdXBlclR5cGVzW2Nsc10gPSA8U3VwZXJ0eXBlPlt0eXBlXTsKICAgIH0gZWxzZSBpZiAodHlwZSAhPSBleGlzdGluZy5maXJzdCkgewogICAgICBleGlzdGluZy5hZGQodHlwZSk7CiAgICAgIG9uQW1iaWd1b3VzU3VwZXJ0eXBlcyhjbGFzc05vZGUsIGV4aXN0aW5nLmZpcnN0LCB0eXBlKTsKICAgIH0KICB9Cn0KCi8vLyBBbiBpbW11dGFibGUgc2V0IG9mIGNsYXNzZXMuCmNsYXNzIENsYXNzU2V0IGV4dGVuZHMgSXRlcmFibGVCYXNlPENsYXNzPiB7CiAgZmluYWwgU2V0PENsYXNzPiBfY2xhc3NlczsKICBDbGFzc1NldCh0aGlzLl9jbGFzc2VzKTsKCiAgYm9vbCBjb250YWlucyhPYmplY3QgY2xhc3NfKSB7CiAgICByZXR1cm4gX2NsYXNzZXMuY29udGFpbnMoY2xhc3NfKTsKICB9CgogIENsYXNzU2V0IHVuaW9uKENsYXNzU2V0IG90aGVyKSB7CiAgICBTZXQ8Q2xhc3M+IHJlc3VsdCA9IG5ldyBTZXQ8Q2xhc3M+LmZyb20oX2NsYXNzZXMpOwogICAgcmVzdWx0LmFkZEFsbChvdGhlci5fY2xhc3Nlcyk7CiAgICByZXR1cm4gbmV3IENsYXNzU2V0KHJlc3VsdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYXRvcjxDbGFzcz4gZ2V0IGl0ZXJhdG9yID0+IF9jbGFzc2VzLml0ZXJhdG9yOwp9CgovLy8gSGVhcCBmb3IgdXNlIGlu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ICAgICAnSXRlcmFibGUnLAogICAgICAnSXRlcmF0b3InLAogICAgICAnU3ltYm9sJywKICAgICAgJ1R5cGUnLAogICAgICAnRnVuY3Rpb24nLAogICAgICAnSW52b2NhdGlvbicsCiAgICAgICdGYWxsVGhyb3VnaEVycm9yJywKICAgIF0sCiAgICAnZGFydDpfaW50ZXJuYWwnOiBbCiAgICAgICdTeW1ib2wnLAogICAgXSwKICAgICdkYXJ0OmFzeW5jJzogWwogICAgICAnRnV0dXJlJywKICAgICAgJ1N0cmVhbScsCiAgICBdCiAgfTsKCiAgZmluYWwgTGlicmFyeUluZGV4IGluZGV4OwoKICBMaWJyYXJ5IF9jb3JlTGlicmFyeTsKICBDbGFzcyBfb2JqZWN0Q2xhc3M7CiAgQ2xhc3MgX251bGxDbGFzczsKICBDbGFzcyBfYm9vbENsYXNzOwogIENsYXNzIF9pbnRDbGFzczsKICBDbGFzcyBfbnVtQ2xhc3M7CiAgQ2xhc3MgX2RvdWJsZUNsYXNzOwogIENsYXNzIF9zdHJpbmdDbGFzczsKICBDbGFzcyBfbGlzdENsYXNzOwogIENsYXNzIF9zZXRDbGFzczsKICBDbGFzcyBfbWFwQ2xhc3M7CiAgQ2xhc3MgX2l0ZXJhYmxlQ2xhc3M7CiAgQ2xhc3MgX2l0ZXJhdG9yQ2xhc3M7CiAgQ2xhc3MgX3N5bWJvbENsYXNzOwogIENsYXNzIF90eXBlQ2xhc3M7CiAgQ2xhc3MgX2Z1bmN0aW9uQ2xhc3M7CiAgQ2xhc3MgX2ludm9jYXRpb25DbGFzczsKICBDbGFzcyBfaW52b2NhdGlvbk1pcnJvckNsYXNzOwogIENvbnN0cnVjdG9yIF9pbnZvY2F0aW9uTWlycm9yV2l0aFR5cGVDb25zdHJ1Y3RvcjsKICBDb25zdHJ1Y3RvciBfbm9TdWNoTWV0aG9kRXJyb3JEZWZhdWx0Q29uc3RydWN0b3I7CiAgUHJvY2VkdXJlIF9saXN0RnJvbUNvbnN0cnVjdG9yOwogIFByb2NlZHVyZSBfbGlzdFVubW9kaWZpYWJsZUNvbnN0cnVjdG9yOwogIFByb2NlZHVyZSBfaWRlbnRpY2FsUHJvY2VkdXJlOwogIENvbnN0cnVjdG9yIF9mYWxsVGhyb3VnaEVycm9yVXJsQW5kTGluZUNvbnN0cnVjdG9yOwogIFByb2NlZHVyZSBfb2JqZWN0RXF1YWxzOwogIFByb2NlZHVyZSBfbWFwVW5tb2RpZmlhYmxlOwoKICBDbGFzcyBfaW50ZXJuYWxTeW1ib2xDbGFzczsKCiAgTGlicmFyeSBfYXN5bmNMaWJyYXJ5OwogIENsYXNzIF9mdXR1cmVDbGFzczsKICBDbGFzcyBfc3RhY2tUcmFjZUNsYXNzOwogIENsYXNzIF9zdHJlYW1DbGFzczsKICBDbGFzcyBfYXN5bmNBd2FpdENvbXBsZXRlckNsYXNzOwogIENsYXNzIF9mdXR1cmVPckNsYXNzOwogIENvbnN0cnVjdG9yIF9hc3luY0F3YWl0Q29tcGxldGVyQ29uc3RydWN0b3I7CiAgUHJvY2VkdXJlIF9jb21wbGV0ZU9uQXN5bmNSZXR1cm5Qcm9jZWR1cmU7CiAgUHJvY2VkdXJlIF9jb21wbGV0ZXJDb21wbGV0ZUVycm9yOwogIENvbnN0cnVjdG9yIF9zeW5jSXRlcmFibGVEZWZhdWx0Q29uc3RydWN0b3I7CiAgQ29uc3RydWN0b3IgX3N0cmVhbUl0ZXJhdG9yRGVmYXVsdENvbnN0cnVjdG9yOwogIENvbnN0cnVjdG9yIF9hc3luY1N0YXJTdHJlYW1Db250cm9sbGVyRGVmYXVsdENvbnN0cnVjdG9yOwogIFByb2NlZHVyZSBfYXN5bmNTdGFyTGlzdGVuSGVscGVyUHJvY2VkdXJlOwogIFByb2NlZHVyZSBfYXN5bmNTdGFyTW92ZU5leHRIZWxwZXJQcm9jZWR1cmU7CiAgUHJvY2VkdXJlIF9hc3luY1N0YWNrVHJhY2VIZWxwZXJQcm9jZWR1cmU7CiAgUHJvY2VkdXJlIF9hc3luY1RoZW5XcmFwcGVySGVscGVyUHJvY2VkdXJlOwogIFByb2NlZHVyZSBfYXN5bmNFcnJvcldyYXBwZXJIZWxwZXJQcm9jZWR1cmU7CiAgUHJvY2VkdXJlIF9hd2FpdEhlbHBlclByb2NlZHVyZTsKICBQcm9jZWR1cmUgX2Jvb2xGcm9tRW52aXJvbm1lbnQ7CgogIC8vLyBUaGUgYGRhcnQ6bWlycm9yc2AgbGlicmFyeSwgb3IgYG51bGxgIGlmIHRoZSBjb21wb25lbnQgZG9lcyBub3QgdXNlIGl0LgogIExpYnJhcnkgX21pcnJvcnNMaWJyYXJ5OwoKICBDbGFzcyBfcHJhZ21hQ2xhc3M7CiAgRmllbGQgX3ByYWdtYU5hbWU7CiAgRmllbGQgX3ByYWdtYU9wdGlvbnM7CiAgQ29uc3RydWN0b3IgX3ByYWdtYUNvbnN0cnVjdG9yOwoKICBDb3JlVHlwZXMoQ29tcG9uZW50IGNvbXBvbmVudCkKICAgICAgOiBpbmRleCA9IG5ldyBMaWJyYXJ5SW5kZXguY29yZUxpYnJhcmllcyhjb21wb25lbnQpOwoKICBQcm9jZWR1cmUgZ2V0IGFzeW5jRXJyb3JXcmFwcGVySGVscGVyUHJvY2VkdXJlIHsKICAgIHJldHVybiBfYXN5bmNFcnJvcldyYXBwZXJIZWxwZXJQcm9jZWR1cmUgPz89CiAgICAgICAgaW5kZXguZ2V0VG9wTGV2ZWxNZW1iZXIoJ2RhcnQ6YXN5bmMnLCAnX2FzeW5jRXJyb3JXcmFwcGVySGVscGVyJyk7CiAgfQoKICBMaWJyYXJ5IGdldCBhc3luY0xpYnJhcnkgewogICAgcmV0dXJuIF9hc3luY0xpYnJhcnkgPz89IGluZGV4LmdldExpYnJhcnkoJ2RhcnQ6YXN5bmMnKTsKICB9CgogIE1lbWJlciBnZXQgYXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlckFkZCB7CiAgICByZXR1cm4gaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmFzeW5jJywgJ19Bc3luY1N0YXJTdHJlYW1Db250cm9sbGVyJywgJ2FkZCcpOwogIH0KCiAgTWVtYmVyIGdldCBhc3luY1N0YXJTdHJlYW1Db250cm9sbGVyQWRkRXJyb3IgewogICAgcmV0dXJuIGluZGV4LmdldE1lbWJlcigKICAgICAgICAnZGFydDphc3luYycsICdfQXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlcicsICdhZGRFcnJvcicpOwogIH0KCiAgTWVtYmVyIGdldCBhc3luY1N0YXJTdHJlYW1Db250cm9sbGVyQWRkU3RyZWFtIHsKICAgIHJldHVybiBpbmRleC5nZXRNZW1iZXIoCiAgICAgICAgJ2RhcnQ6YXN5bmMnLCAnX0FzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXInLCAnYWRkU3RyZWFtJyk7CiAgfQoKICBDbGFzcyBnZXQgYXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlckNsYXNzIHsKICAgIHJldHVybiBpbmRleC5nZXRDbGFzcygnZGFydDphc3luYycsICdfQXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlcicpOwogIH0KCiAgTWVtYmVyIGdldCBhc3luY1N0YXJTdHJlYW1Db250cm9sbGVyQ2xvc2UgewogICAgcmV0dXJuIGluZGV4LmdldE1lbWJlcignZGFydDphc3luYycsICdfQXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlcicsICdjbG9zZScpOwogIH0KCiAgQ29uc3RydWN0b3IgZ2V0IGFzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJEZWZhdWx0Q29uc3RydWN0b3IgewogICAgcmV0dXJuIF9hc3luY1N0YXJTdHJlYW1Db250cm9sbGVyRGVmYXVsdENvbnN0cnVjdG9yID8/PQogICAgICAgIGluZGV4LmdldE1lbWJlcignZGFydDphc3luYycsICdfQXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlcicsICcnKTsKICB9CgogIE1lbWJlciBnZXQgYXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlclN0cmVhbSB7CiAgICByZXR1cm4gaW5kZXguZ2V0TWVtYmVyKAogICAgICAgICdkYXJ0OmFzeW5jJywgJ19Bc3luY1N0YXJTdHJlYW1Db250cm9sbGVyJywgJ2dldDpzdHJlYW0nKTsKICB9CgogIFByb2NlZHVyZSBnZXQgYXN5bmNTdGFyTGlzdGVuSGVscGVyIHsKICAgIHJldHVybiBfYXN5bmNTdGFyTGlzdGVuSGVscGVyUHJvY2VkdXJlID8/PQogICAgICAgIGluZGV4LmdldFRvcExldmVsTWVtYmVyKCdkYXJ0OmFzeW5jJywgJ19hc3luY1N0YXJMaXN0ZW5IZWxwZXInKTsKICB9CgogIFByb2NlZHVyZSBnZXQgYXN5bmNTdGFyTW92ZU5leHRIZWxwZXIgewogICAgcmV0dXJuIF9hc3luY1N0YXJNb3ZlTmV4dEhlbHBlclByb2NlZHVyZSA/Pz0KICAgICAgICBpbmRleC5nZXRUb3BMZXZlbE1lbWJlcignZGFydDphc3luYycsICdfYXN5bmNTdGFyTW92ZU5leHRIZWxwZXInKTsKICB9CgogIFByb2NlZHVyZSBnZXQgYXN5bmNTdGFja1RyYWNlSGVscGVyUHJvY2VkdXJlIHsKICAgIHJldHVybiBfYXN5bmNTdGFja1RyYWNlSGVscGVyUHJvY2VkdXJlID8/PQogICAgICAgIGluZGV4LmdldFRvcExldmVsTWVtYmVyKCdkYXJ0OmFzeW5jJywgJ19hc3luY1N0YWNrVHJhY2VIZWxwZXInKTsKICB9CgogIFByb2NlZHVyZSBnZXQgYXN5bmNUaGVuV3JhcHBlckhlbHBlclByb2NlZHVyZSB7CiAgICByZXR1cm4gX2FzeW5jVGhlbldyYXBwZXJIZWxwZXJQcm9jZWR1cmUgPz89CiAgICAgICAgaW5kZXguZ2V0VG9wTGV2ZWxNZW1iZXIoJ2RhcnQ6YXN5bmMnLCAnX2FzeW5jVGhlbldyYXBwZXJIZWxwZXInKTsKICB9CgogIFByb2NlZHVyZSBnZXQgYXdhaXRIZWxwZXJQcm9jZWR1cmUgewogICAgcmV0dXJuIF9hd2FpdEhlbHBlclByb2NlZHVyZSA/Pz0KICAgICAgICBpbmRleC5nZXRUb3BMZXZlbE1lbWJlcignZGFydDphc3luYycsICdfYXdhaXRIZWxwZXInKTsKICB9CgogIENsYXNzIGdldCBib29sQ2xhc3MgewogICAgcmV0dXJuIF9ib29sQ2xhc3MgPz89IGluZGV4LmdldENsYXNzKCdkYXJ0OmNvcmUnLCAnYm9vbCcpOwogIH0KCiAgQ2xhc3MgZ2V0IGFzeW5jQXdhaXRDb21wbGV0ZXJDbGFzcyB7CiAgICByZXR1cm4gX2FzeW5jQXdhaXRDb21wbGV0ZXJDbGFzcyA/Pz0KICAgICAgICBpbmRleC5nZXRDbGFzcygnZGFydDphc3luYycsICdfQXN5bmNBd2FpdENvbXBsZXRlcicpOwogIH0KCiAgQ29uc3RydWN0b3IgZ2V0IGFzeW5jQXdhaXRDb21wbGV0ZXJDb25zdHJ1Y3RvciB7CiAgICByZXR1cm4gX2FzeW5jQXdhaXRDb21wbGV0ZXJDb25zdHJ1Y3RvciA/Pz0KICAgICAgICBpbmRleC5nZXRNZW1iZXIoJ2RhcnQ6YXN5bmMnLCAnX0FzeW5jQXdhaXRDb21wbGV0ZXInLCAnJyk7CiAgfQoKICBNZW1iZXIgZ2V0IGNvbXBsZXRlT25Bc3luY1JldHVybiB7CiAgICByZXR1cm4gX2NvbXBsZXRlT25Bc3luY1JldHVyblByb2NlZHVyZSA/Pz0KICAgICAgICBpbmRleC5nZXRUb3BMZXZlbE1lbWJlcignZGFydDphc3luYycsICdfY29tcGxldGVPbkFzeW5jUmV0dXJuJyk7CiAgfQoKICBQcm9jZWR1cmUgZ2V0IGNvbXBsZXRlckNvbXBsZXRlRXJyb3IgewogICAgcmV0dXJuIF9jb21wbGV0ZXJDb21wbGV0ZUVycm9yID8/PQogICAgICAgIGluZGV4LmdldE1lbWJlcignZGFydDphc3luYycsICdDb21wbGV0ZXInLCAnY29tcGxldGVFcnJvcicpOwogIH0KCiAgTWVtYmVyIGdldCBjb21wbGV0ZXJGdXR1cmUgewogICAgcmV0dXJuIGluZGV4LmdldE1lbWJlcignZGFydDphc3luYycsICdDb21wbGV0ZXInLCAnZ2V0OmZ1dHVyZScpOwogIH0KCiAgTGlicmFyeSBnZXQgY29yZUxpYnJhcnkgewogICAgcmV0dXJuIF9jb3JlTGlicmFyeSA/Pz0gaW5kZXguZ2V0TGlicmFyeSgnZGFydDpjb3JlJyk7CiAgfQoKICBDbGFzcyBnZXQgZG91YmxlQ2xhc3MgewogICAgcmV0dXJuIF9kb3VibGVDbGFzcyA/Pz0gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdkb3VibGUnKTsKICB9CgogIENsYXNzIGdldCBmdW5jdGlvbkNsYXNzIHsKICAgIHJldHVybiBfZnVuY3Rpb25DbGFzcyA/Pz0gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdGdW5jdGlvbicpOwogIH0KCiAgQ2xhc3MgZ2V0IGZ1dHVyZUNsYXNzIHsKICAgIHJldHVybiBfZnV0dXJlQ2xhc3MgPz89IGluZGV4LmdldENsYXNzKCdkYXJ0OmNvcmUnLCAnRnV0dXJlJyk7CiAgfQoKICBDbGFzcyBnZXQgZnV0dXJlT3JDbGFzcyB7CiAgICByZXR1cm4gX2Z1dHVyZU9yQ2xhc3MgPz89IChpbmRleC50cnlHZXRDbGFzcygnZGFydDpjb3JlJywgJ0Z1dHVyZU9yJykgPz8KICAgICAgICBpbmRleC5nZXRDbGFzcygnZGFydDphc3luYycsICdGdXR1cmVPcicpKTsKICB9CgogIFByb2NlZHVyZSBnZXQgaWRlbnRpY2FsUHJvY2VkdXJlIHsKICAgIHJldHVybiBfaWRlbnRpY2FsUHJvY2VkdXJlID8/PQogICAgICAgIGluZGV4LmdldFRvcExldmVsTWVtYmVyKCdkYXJ0OmNvcmUnLCAnaWRlbnRpY2FsJyk7CiAgfQoKICBDbGFzcyBnZXQgaW50Q2xhc3MgewogICAgcmV0dXJuIF9pbnRDbGFzcyA/Pz0gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdpbnQnKTsKICB9CgogIENsYXNzIGdldCBpbnRlcm5hbFN5bWJvbENsYXNzIHsKICAgIHJldHVybiBfaW50ZXJuYWxTeW1ib2xDbGFzcyA/Pz0gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6X2ludGVybmFsJywgJ1N5bWJvbCcpOwogIH0KCiAgQ2xhc3MgZ2V0IGludm9jYXRpb25DbGFzcyB7CiAgICByZXR1cm4gX2ludm9jYXRpb25DbGFzcyA/Pz0gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdJbnZvY2F0aW9uJyk7CiAgfQoKICBDbGFzcyBnZXQgaW52b2NhdGlvbk1pcnJvckNsYXNzIHsKICAgIHJldHVybiBfaW52b2NhdGlvbk1pcnJvckNsYXNzID8/PQogICAgICAgIGluZGV4LmdldENsYXNzKCdkYXJ0OmNvcmUnLCAnX0ludm9jYXRpb25NaXJyb3InKTsKICB9CgogIENvbnN0cnVjdG9yIGdldCBpbnZvY2F0aW9uTWlycm9yV2l0aFR5cGVDb25zdHJ1Y3RvciB7CiAgICByZXR1cm4gX2ludm9jYXRpb25NaXJyb3JXaXRoVHlwZUNvbnN0cnVjdG9yID8/PQogICAgICAgIGluZGV4LmdldE1lbWJlcignZGFydDpjb3JlJywgJ19JbnZvY2F0aW9uTWlycm9yJywgJ193aXRoVHlwZScpOwogIH0KCiAgQ2xhc3MgZ2V0IGl0ZXJhYmxlQ2xhc3MgewogICAgcmV0dXJuIF9pdGVyYWJsZUNsYXNzID8/PSBpbmRleC5nZXRDbGFzcygnZGFydDpjb3JlJywgJ0l0ZXJhYmxlJyk7CiAgfQoKICBDbGFzcyBnZXQgaXRlcmF0b3JDbGFzcyB7CiAgICByZXR1cm4gX2l0ZXJhdG9yQ2xhc3MgPz89IGluZGV4LmdldENsYXNzKCdkYXJ0OmNvcmUnLCAnSXRlcmF0b3InKTsKICB9CgogIENsYXNzIGdldCBsaXN0Q2xhc3MgewogICAgcmV0dXJuIF9saXN0Q2xhc3MgPz89IGluZGV4LmdldENsYXNzKCdkYXJ0OmNvcmUnLCAnTGlzdCcpOwogIH0KCiAgUHJvY2VkdXJlIGdldCBsaXN0RnJvbUNvbnN0cnVjdG9yIHsKICAgIHJldHVybiBfbGlzdEZyb21Db25zdHJ1Y3RvciA/Pz0KICAgICAgICBpbmRleC5nZXRNZW1iZXIoJ2RhcnQ6Y29yZScsICdMaXN0JywgJ2Zyb20nKTsKICB9CgogIFByb2NlZHVyZSBnZXQgbGlzdFVubW9kaWZpYWJsZUNvbnN0cnVjdG9yIHsKICAgIHJldHVybiBfbGlzdFVubW9kaWZpYWJsZUNvbnN0cnVjdG9yID8/PQogICAgICAgIGluZGV4LmdldE1lbWJlcignZGFydDpjb3JlJywgJ0xpc3QnLCAndW5tb2RpZmlhYmxlJyk7CiAgfQoKICBDbGFzcyBnZXQgc2V0Q2xhc3MgewogICAgcmV0dXJuIF9zZXRDbGFzcyA/Pz0gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdTZXQnKTsKICB9CgogIENsYXNzIGdldCBtYXBDbGFzcyB7CiAgICByZXR1cm4gX21hcENsYXNzID8/PSBpbmRleC5nZXRDbGFzcygnZGFydDpjb3JlJywgJ01hcCcpOwogIH0KCiAgUHJvY2VkdXJlIGdldCBtYXBVbm1vZGlmaWFibGUgewogICAgcmV0dXJuIF9tYXBVbm1vZGlmaWFibGUgPz89CiAgICAgICAgaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmNvcmUnLCAnTWFwJywgJ3VubW9kaWZpYWJsZScpOwogIH0KCiAgTGlicmFyeSBnZXQgbWlycm9yc0xpYnJhcnkgewogICAgcmV0dXJuIF9taXJyb3JzTGlicmFyeSA/Pz0gaW5kZXgudHJ5R2V0TGlicmFyeSgnZGFydDptaXJyb3JzJyk7CiAgfQoKICBDb25zdHJ1Y3RvciBnZXQgbm9TdWNoTWV0aG9kRXJyb3JEZWZhdWx0Q29uc3RydWN0b3IgewogICAgcmV0dXJuIF9ub1N1Y2hNZXRob2RFcnJvckRlZmF1bHRDb25zdHJ1Y3RvciA/Pz0KICAgICAgICAvLyBUT0RPKHJlZ2lzKTogUmVwbGFjZSAnd2l0aEludm9jYXRpb24nIHdpdGggJycgYWZ0ZXIgZGFydDJqcyBpcyBmaXhlZC4KICAgICAgICBpbmRleC5nZXRNZW1iZXIoJ2RhcnQ6Y29yZScsICdOb1N1Y2hNZXRob2RFcnJvcicsICd3aXRoSW52b2NhdGlvbicpOwogIH0KCiAgQ2xhc3MgZ2V0IG51bGxDbGFzcyB7CiAgICByZXR1cm4gX251bGxDbGFzcyA/Pz0gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdOdWxsJyk7CiAgfQoKICBDbGFzcyBnZXQgbnVtQ2xhc3MgewogICAgcmV0dXJuIF9udW1DbGFzcyA/Pz0gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdudW0nKTsKICB9CgogIENsYXNzIGdldCBvYmplY3RDbGFzcyB7CiAgICByZXR1cm4gX29iamVjdENsYXNzID8/PSBpbmRleC5nZXRDbGFzcygnZGFydDpjb3JlJywgJ09iamVjdCcpOwogIH0KCiAgUHJvY2VkdXJlIGdldCBvYmplY3RFcXVhbHMgewogICAgcmV0dXJuIF9vYmplY3RFcXVhbHMgPz89IGluZGV4LmdldE1lbWJlcignZGFydDpjb3JlJywgJ09iamVjdCcsICc9PScpOwogIH0KCiAgQ2xhc3MgZ2V0IHByYWdtYUNsYXNzIHsKICAgIHJldHVybiBfcHJhZ21hQ2xhc3MgPz89IGluZGV4LmdldENsYXNzKCdkYXJ0OmNvcmUnLCAncHJhZ21hJyk7CiAgfQoKICBGaWVsZCBnZXQgcHJhZ21hTmFtZSB7CiAgICByZXR1cm4gX3ByYWdtYU5hbWUgPz89IGluZGV4LmdldE1lbWJlcignZGFydDpjb3JlJywgJ3ByYWdtYScsICduYW1lJyk7CiAgfQoKICBGaWVsZCBnZXQgcHJhZ21hT3B0aW9ucyB7CiAgICByZXR1cm4gX3ByYWdtYU9wdGlvbnMgPz89IGluZGV4LmdldE1lbWJlcignZGFydDpjb3JlJywgJ3ByYWdtYScsICdvcHRpb25zJyk7CiAgfQoKICBDb25zdHJ1Y3RvciBnZXQgcHJhZ21hQ29uc3RydWN0b3IgewogICAgcmV0dXJuIF9wcmFnbWFDb25zdHJ1Y3RvciA/Pz0gaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmNvcmUnLCAncHJhZ21hJywgJ18nKTsKICB9CgogIENsYXNzIGdldCBzdGFja1RyYWNlQ2xhc3MgewogICAgcmV0dXJuIF9zdGFja1RyYWNlQ2xhc3MgPz89IGluZGV4LmdldENsYXNzKCdkYXJ0OmNvcmUnLCAnU3RhY2tUcmFjZScpOwogIH0KCiAgQ2xhc3MgZ2V0IHN0cmVhbUNsYXNzIHsKICAgIHJldHVybiBfc3RyZWFtQ2xhc3MgPz89IGluZGV4LmdldENsYXNzKCdkYXJ0OmNvcmUnLCAnU3RyZWFtJyk7CiAgfQoKICBNZW1iZXIgZ2V0IHN0cmVhbUl0ZXJhdG9yU3Vic2NyaXB0aW9uIHsKICAgIHJldHVybiBpbmRleC5nZXRNZW1iZXIoJ2RhcnQ6YXN5bmMnLCAnX1N0cmVhbUl0ZXJhdG9yJywgJ19zdWJzY3JpcHRpb24nKTsKICB9CgogIE1lbWJlciBnZXQgc3RyZWFtSXRlcmF0b3JDYW5jZWwgewogICAgcmV0dXJuIGluZGV4LmdldE1lbWJlcignZGFydDphc3luYycsICdfU3RyZWFtSXRlcmF0b3InLCAnY2FuY2VsJyk7CiAgfQoKICBDbGFzcyBnZXQgc3RyZWFtSXRlcmF0b3JDbGFzcyB7CiAgICByZXR1cm4gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6YXN5bmMnLCAnX1N0cmVhbUl0ZXJhdG9yJyk7CiAgfQoKICBDb25zdHJ1Y3RvciBnZXQgc3RyZWFtSXRlcmF0b3JEZWZhdWx0Q29uc3RydWN0b3IgewogICAgcmV0dXJuIF9zdHJlYW1JdGVyYXRvckRlZmF1bHRDb25zdHJ1Y3RvciA/Pz0KICAgICAgICBpbmRleC5nZXRNZW1iZXIoJ2RhcnQ6YXN5bmMnLCAnX1N0cmVhbUl0ZXJhdG9yJywgJycpOwogIH0KCiAgTWVtYmVyIGdldCBzdHJlYW1JdGVyYXRvck1vdmVOZXh0IHsKICAgIHJldHVybiBpbmRleC5nZXRNZW1iZXIoJ2RhcnQ6YXN5bmMnLCAnX1N0cmVhbUl0ZXJhdG9yJywgJ21vdmVOZXh0Jyk7CiAgfQoKICBNZW1iZXIgZ2V0IHN0cmVhbUl0ZXJhdG9yQ3VycmVudCB7CiAgICByZXR1cm4gaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmFzeW5jJywgJ19TdHJlYW1JdGVyYXRvcicsICdnZXQ6Y3VycmVudCcpOwogIH0KCiAgQ2xhc3MgZ2V0IHN0cmluZ0NsYXNzIHsKICAgIHJldHVybiBfc3RyaW5nQ2xhc3MgPz89IGluZGV4LmdldENsYXNzKCdkYXJ0OmNvcmUnLCAnU3RyaW5nJyk7CiAgfQoKICBDbGFzcyBnZXQgc3ltYm9sQ2xhc3MgewogICAgcmV0dXJuIF9zeW1ib2xDbGFzcyA/Pz0gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdTeW1ib2wnKTsKICB9CgogIENvbnN0cnVjdG9yIGdldCBzeW5jSXRlcmFibGVEZWZhdWx0Q29uc3RydWN0b3IgewogICAgcmV0dXJuIF9zeW5jSXRlcmFibGVEZWZhdWx0Q29uc3RydWN0b3IgPz89CiAgICAgICAgaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmNvcmUnLCAnX1N5bmNJdGVyYWJsZScsICcnKTsKICB9CgogIENsYXNzIGdldCBzeW5jSXRlcmF0b3JDbGFzcyB7CiAgICByZXR1cm4gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdfU3luY0l0ZXJhdG9yJyk7CiAgfQoKICBNZW1iZXIgZ2V0IHN5bmNJdGVyYXRvckN1cnJlbnQgewogICAgcmV0dXJuIGluZGV4LmdldE1lbWJlcignZGFydDpjb3JlJywgJ19TeW5jSXRlcmF0b3InLCAnX2N1cnJlbnQnKTsKICB9CgogIE1lbWJlciBnZXQgc3luY0l0ZXJhdG9yWWllbGRFYWNoSXRlcmFibGUgewogICAgcmV0dXJuIGluZGV4LmdldE1lbWJlcignZGFydDpjb3JlJywgJ19TeW5jSXRlcmF0b3InLCAnX3lpZWxkRWFjaEl0ZXJhYmxlJyk7CiAgfQoKICBDbGFzcyBnZXQgdHlwZUNsYXNzIHsKICAgIHJldHVybiBfdHlwZUNsYXNzID8/PSBpbmRleC5nZXRDbGFzcygnZGFydDpjb3JlJywgJ1R5cGUnKTsKICB9CgogIENvbnN0cnVjdG9yIGdldCBmYWxsVGhyb3VnaEVycm9yVXJsQW5kTGluZUNvbnN0cnVjdG9yIHsKICAgIHJldHVybiBfZmFsbFRocm91Z2hFcnJvclVybEFuZExpbmVDb25zdHJ1Y3RvciA/Pz0KICAgICAgICBpbmRleC5nZXRNZW1iZXIoJ2RhcnQ6Y29yZScsICdGYWxsVGhyb3VnaEVycm9yJywgJ19jcmVhdGUnKTsKICB9CgogIFByb2NlZHVyZSBnZXQgYm9vbEZyb21FbnZpcm9ubWVudCB7CiAgICByZXR1cm4gX2Jvb2xGcm9tRW52aXJvbm1lbnQgPz89CiAgICAgICAgaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmNvcmUnLCAnYm9vbCcsICdmcm9tRW52aXJvbm1lbnQnKTsKICB9Cn0KgYkATk48GwETHQFIEj0TEA4ODQ0QEA4NEhIQDhIUGgcYEAcUEBAGBQEcARgWFBQTExYWFBMTGBgWFBgaIDQ0IiohNhseAR4BGRYaFiMYLy0lLzE8LS8tLi8jIgFOGwEWFRgiASE7ATMxSwQBHT0EASxPBAExHEEEATIcQgQBLUcEAS5RBAFAPEkEAS8cQwQBKC9JBAEqMUsEATEvSQQBMjBKBAEnJT8EARg/BAEnKT4EATMvQwQBJS9JBAEpJ0UEAR9FBAEcOwQBGkMEARxHBAEaQwQBHE0zBAElIzsEARc9BAEiUAQBHksEASQmOgQBODRIBAEcRwQBHEcEARg/BAEmJDYEAS4sPgQBFz0EARc9BAEiID0EAR9EBAE4NFFNBAEYPwQBFz0EARpDBAEfSwQBGkMEARlLBAEcUQQBJk8EAR5LBAEaQwQBKk4EASRHBAEiPAQBNTE+BAEmSQQBJUwEARpDBAEaQwQBMy87BAEgOQQBI0YEAS1QBAEYPwQBOjZFBAEmJEEEAgEecGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0QHNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZ190ZXN0ZWQvcGFja2FnZV9jb25maWcvbGliL3BhY2thZ2VzLmRhcnSPLi8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IHBhY2thZ2VfY29uZmlnLnBhY2thZ2VzOwoKaW1wb3J0ICJzcmMvcGFja2FnZXNfaW1wbC5kYXJ0IjsKCi8vLyBBIHBhY2thZ2UgcmVzb2x1dGlvbiBzdHJhdGVneS4KLy8vCi8vLyBBbGxvd3MgY29udmVydGluZyBhIGBwYWNrYWdlOmAgVVJJIHRvIGEgZGlmZmVyZW50IGtpbmQgb2YgVVJJLgovLy8KLy8vIE1heSBhbHNvIGFsbG93IGxpc3RpbmcgdGhlIGF2YWlsYWJsZSBwYWNrYWdlcyBhbmQgY29udmVydGluZwovLy8gdG8gYSBgTWFwPFN0cmluZywgVXJpPmAgdGhhdCBnaXZlcyB0aGUgYmFzZSBsb2NhdGlvbiBvZiBlYWNoIGF2YWlsYWJsZQovLy8gcGFja2FnZS4gSW4gc29tZSBjYXNlcyB0aGVyZSBpcyBubyB3YXkgdG8gZmluZCB0aGUgYXZhaWxhYmxlIHBhY2thZ2VzLAovLy8gaW4gd2hpY2ggY2FzZSBbcGFja2FnZXNdIGFuZCBbYXNNYXBdIHdpbGwgdGhyb3cgaWYgdXNlZC4KLy8vIE9uZSBzdWNoIGNhc2UgaXMgaWYgdGhlIHBhY2thZ2VzIGFyZSByZXNvbHZlZCByZWxhdGl2ZSB0byBhCi8vLyBgcGFja2FnZXMvYCBkaXJlY3RvcnkgYXZhaWxhYmxlIG92ZXIgSFRUUC4KYWJzdHJhY3QgY2xhc3MgUGFja2FnZXMgewogIC8vLyBBIFtQYWNrYWdlc10gcmVzb2x2ZXIgY29udGFpbmluZyBubyBwYWNrYWdlcy4KICAvLy8KICAvLy8gVGhpcyBjb25zdGFudCBvYmplY3QgaXMgcmV0dXJuZWQgYnkgW2ZpbmRdIGFib3ZlIGlmIG5vCiAgLy8vIHBhY2thZ2UgcmVzb2x1dGlvbiBzdHJhdGVneSBpcyBmb3VuZC4KICBzdGF0aWMgY29uc3QgUGFja2FnZXMgbm9QYWNrYWdlcyA9IGNvbnN0IE5vUGFja2FnZXMoKTsKCiAgLy8vIFJlc29sdmUgYSBwYWNrYWdlIFVSSSBpbnRvIGEgbm9uLXBhY2thZ2UgVVJJLgogIC8vLwogIC8vLyBUcmFuc2xhdGVzIGEgYHBhY2thZ2U6YCBVUkksIGFjY29yZGluZyB0byB0aGUgcGFja2FnZSByZXNvbHV0aW9uCiAgLy8vIHN0cmF0ZWd5LCBpbnRvIGEgVVJJIHRoYXQgY2FuIGJlIGxvYWRlZC4KICAvLy8gQnkgZGVmYXVsdCwgb25seSBgZmlsZWAsIGBodHRwYCBhbmQgYGh0dHBzYCBVUklzIGFyZSByZXR1cm5lZC4KICAvLy8gQ3VzdG9tIGBQYWNrYWdlc2Agb2JqZWN0cyBtYXkgcmV0dXJuIG90aGVyIFVSSXMuCiAgLy8vCiAgLy8vIElmIHJlc29sdXRpb24gZmFpbHMgYmVjYXVzZSBhIHBhY2thZ2Ugd2l0aCB0aGUgcmVxdWVzdGVkIHBhY2thZ2UgbmFtZQogIC8vLyBpcyBub3QgYXZhaWxhYmxlLCB0aGUgW25vdEZvdW5kXSBmdW5jdGlvbiBpcyBjYWxsZWQuCiAgLy8vIElmIG5vIGBub3RGb3VuZGAgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIGl0IGRlZmF1bHRzIHRvIHRocm93aW5nIGFuIGVycm9yLgogIC8vLwogIC8vLyBUaGUgW3BhY2thZ2VVcmldIG11c3QgYmUgYSB2YWxpZCBwYWNrYWdlIFVSSS4KICBVcmkgcmVzb2x2ZShVcmkgcGFja2FnZVVyaSwge1VyaSBub3RGb3VuZChVcmkgcGFja2FnZVVyaSl9KTsKCiAgLy8vIFJldHVybiB0aGUgbmFtZXMgb2YgdGhlIGF2YWlsYWJsZSBwYWNrYWdlcy4KICAvLy8KICAvLy8gUmV0dXJucyBhbiBpdGVyYWJsZSB0aGF0IGFsbG93cyBpdGVyYXRpbmcgdGhlIG5hbWVzIG9mIGF2YWlsYWJsZSBwYWNrYWdlcy4KICAvLy8KICAvLy8gU29tZSBgUGFja2FnZXNgIG9iamVjdHMgYXJlIHVuYWJsZSB0byBmaW5kIHRoZSBwYWNrYWdlIG5hbWVzLAogIC8vLyBhbmQgZ2V0dGluZyBgcGFja2FnZXNgIGZyb20gc3VjaCBhIGBQYWNrYWdlc2Agb2JqZWN0IHdpbGwgdGhyb3cuCiAgSXRlcmFibGU8U3RyaW5nPiBnZXQgcGFja2FnZXM7CgogIC8vLyBSZXRyaWV2ZSBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBwYWNrYWdlLgogIC8vLwogIC8vLyBNZXRhZGF0YSBoYXZlIHN0cmluZyBrZXlzIGFuZCB2YWx1ZXMsIGFuZCBhcmUgbG9va2VkIHVwIGJ5IGtleS4KICAvLy8KICAvLy8gUmV0dXJucyBgbnVsbGAgaWYgdGhlIGFyZ3VtZW50IGlzIG5vdCBhIHZhbGlkIHBhY2thZ2UgbmFtZSwKICAvLy8gb3IgaWYgdGhlIHBhY2thZ2UgaXMgbm90IG9uZSBvZiB0aGUgcGFja2FnZXMgY29uZmlndXJlZCBieQogIC8vLyB0aGlzIHBhY2thZ2VzIG9iamVjdCwgb3IgaWYgdGhlIHBhY2thZ2UgZG9lcyBub3QgaGF2ZSBhc3NvY2lhdGVkCiAgLy8vIG1ldGFkYXRhIHdpdGggdGhlIHByb3ZpZGVkIFtrZXldLgogIC8vLwogIC8vLyBOb3QgYWxsIGBQYWNrYWdlc2Agb2JqZWN0cyBjYW4gc3VwcG9ydCBtZXRhZGF0YS4KICAvLy8gVGhvc2Ugd2lsbCBhbHdheXMgcmV0dXJuIGBudWxsYC4KICBTdHJpbmcgcGFja2FnZU1ldGFkYXRhKFN0cmluZyBwYWNrYWdlTmFtZSwgU3RyaW5nIGtleSk7CgogIC8vLyBSZXRyaWV2ZSBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBsaWJyYXJ5LgogIC8vLwogIC8vLyBJZiBbbGlicmFyeVVyaV0gaXMgYSBgcGFja2FnZTpgIFVSSSwgdGhlIHJldHVybmVkIHZhbHVlCiAgLy8vIGlzIHRoZSBzYW1lIHRoYXQgd291bGQgYmUgcmV0dXJuZWQgYnkgW3BhY2thZ2VNZXRhZGF0YV0gd2l0aAogIC8vLyB0aGUgcGFja2FnZSdzIG5hbWUgYW5kIHRoZSBzYW1lIGtleS4KICAvLy8KICAvLy8gSWYgW2xpYnJhcnlVcmldIGlzIG5vdCBhIGBwYWNrYWdlOmAgVVJJLCBhbmQgdGhpcyBbUGFja2FnZXNdCiAgLy8vIG9iamVjdCBoYXMgYSBbZGVmYXVsdFBhY2thZ2VOYW1lXSwgdGhlbiB0aGUgW2tleV0gaXMgbG9va2VkCiAgLy8vIHVwIG9uIHRoZSBkZWZhdWx0IHBhY2thZ2UgaW5zdGVhZC4KICAvLy8KICAvLy8gT3RoZXJ3aXNlIHRoZSByZXN1bHQgaXMgYG51bGxgLgogIFN0cmluZyBsaWJyYXJ5TWV0YWRhdGEoVXJpIGxpYnJhcnlVcmksIFN0cmluZyBrZXkpOwoKICAvLy8gUmV0dXJuIHRoZSBuYW1lcy10by1iYXNlLVVSSSBtYXBwaW5nIG9mIHRoZSBhdmFpbGFibGUgcGFja2FnZXMuCiAgLy8vCiAgLy8vIFJldHVybnMgYSBtYXAgZnJvbSBwYWNrYWdlIG5hbWUgdG8gYSBiYXNlIFVSSS4KICAvLy8gVGhlIFtyZXNvbHZlXSBtZXRob2Qgd2lsbCByZXNvbHZlIGEgcGFja2FnZSBVUkkgd2l0aCBhIHNwZWNpZmljIHBhY2thZ2UKICAvLy8gbmFtZSB0byBhIHBhdGggZXh0ZW5kaW5nIHRoZSBiYXNlIFVSSSB0aGF0IHRoaXMgbWFwIGdpdmVzIGZvciB0aGF0CiAgLy8vIHBhY2thZ2UgbmFtZS4KICAvLy8KICAvLy8gU29tZSBgUGFja2FnZXNgIG9iamVjdHMgYXJlIHVuYWJsZSB0byBmaW5kIHRoZSBwYWNrYWdlIG5hbWVzLAogIC8vLyBhbmQgY2FsbGluZyBgYXNNYXBgIG9uIHN1Y2ggYSBgUGFja2FnZXNgIG9iamVjdCB3aWxsIHRocm93LgogIE1hcDxTdHJpbmcsIFVyaT4gYXNNYXAoKTsKCiAgLy8vIFRoZSBuYW1lIG9mIHRoZSAiZGVmYXVsdCBwYWNrYWdlIi4KICAvLy8KICAvLy8gQSBkZWZhdWx0IHBhY2thZ2UgaXMgYSBwYWNrYWdlIHRoYXQgKm5vbi1wYWNrYWdlKiBsaWJyYXJpZXMKICAvLy8gbWF5IGJlIGNvbnNpZGVyZWQgcGFydCBvZiBmb3Igc29tZSBwdXJwb3Nlcy4KICAvLy8KICAvLy8gVGhlIHZhbHVlIGlzIGBudWxsYCBpZiB0aGVyZSBpcyBubyBkZWZhdWx0IHBhY2thZ2UuCiAgLy8vIE5vdCBhbGwgaW1wbGVtZW50YXRpb25zIG9mIFtQYWNrYWdlc10gc3VwcG9ydHMgYSBkZWZhdWx0IHBhY2thZ2UsCiAgLy8vIGFuZCB3aWxsIGFsd2F5cyBoYXZlIGEgYG51bGxgIHZhbHVlIGZvciB0aG9zZS4KICBTdHJpbmcgZ2V0IGRlZmF1bHRQYWNrYWdlTmFtZTsKfQpgAE5OPAEhASEBIwRDBEFLSz1ALxo0Bj0sOQE0BkcvRTcGTDtPBjQ/ATIGUQZERyEBMwZGBkJBRygGNyc6ATMGPkMrBkNCKQYmNgFGBjVOSRQGREIcASkGQjMGOkg1IQIBJHBhY2thZ2U6cGFja2FnZV9jb25maWcvcGFja2FnZXMuZGFydEVzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2dfdGVzdGVkL3BhY2thZ2VfY29uZmlnL2xpYi9wYWNrYWdlc19maWxlLmRhcnScUC8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IHBhY2thZ2VfY29uZmlnLnBhY2thZ2VzX2ZpbGU7CgppbXBvcnQgInBhY2thZ2U6Y2hhcmNvZGUvYXNjaWkuZGFydCI7CgppbXBvcnQgInNyYy91dGlsLmRhcnQiIHNob3cgaXNWYWxpZFBhY2thZ2VOYW1lOwoKLy8vIFBhcnNlcyBhIGAucGFja2FnZXNgIGZpbGUgaW50byBhIG1hcCBmcm9tIHBhY2thZ2UgbmFtZSB0byBiYXNlIFVSSS4KLy8vCi8vLyBUaGUgW3NvdXJjZV0gaXMgdGhlIGJ5dGUgY29udGVudCBvZiBhIGAucGFja2FnZXNgIGZpbGUsIGFzc3VtZWQgdG8gYmUKLy8vIFVURi04IGVuY29kZWQuIEluIHByYWN0aWNlLCBhbGwgc2lnbmlmaWNhbnQgcGFydHMgb2YgdGhlIGZpbGUgbXVzdCBiZSBBU0NJSSwKLy8vIHNvIExhdGluLTEgb3IgV2luZG93cy0xMjUyIGVuY29kaW5nIHdpbGwgYWxzbyB3b3JrIGZpbmUuCi8vLwovLy8gSWYgdGhlIGZpbGUgY29udGVudCBpcyBhdmFpbGFibGUgYXMgYSBzdHJpbmcsIGl0cyBbU3RyaW5nLmNvZGVVbml0c10gY2FuCi8vLyBiZSB1c2VkIGFzIHRoZSBgc291cmNlYCBhcmd1bWVudCBvZiB0aGlzIGZ1bmN0aW9uLgovLy8KLy8vIFRoZSBbYmFzZUxvY2F0aW9uXSBpcyB1c2VkIGFzIGEgYmFzZSBVUkkgdG8gcmVzb2x2ZSBhbGwgcmVsYXRpdmUKLy8vIFVSSSByZWZlcmVuY2VzIGFnYWluc3QuCi8vLyBJZiB0aGUgY29udGVudCB3YXMgcmVhZCBmcm9tIGEgZmlsZSwgYGJhc2VMb2NhdGlvbmAgc2hvdWxkIGJlIHRoZQovLy8gbG9jYXRpb24gb2YgdGhhdCBmaWxlLgovLy8KLy8vIElmIFthbGxvd0RlZmF1bHRQYWNrYWdlXSBpcyBzZXQgdG8gdHJ1ZSwgYW4gZW50cnkgd2l0aCBhbiBlbXB0eSBwYWNrYWdlIG5hbWUKLy8vIGlzIGFjY2VwdGVkLiBUaGlzIGVudHJ5IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBwYWNrYWdlLCBidXQgaW5zdGVhZAovLy8gcmVwcmVzZW50cyBhICpkZWZhdWx0IHBhY2thZ2UqIHdoaWNoIG5vbi1wYWNrYWdlIGxpYnJhcmllcyBtYXkgYmUgY29uc2lkZXJlZAovLy8gcGFydCBvZiBpbiBzb21lIGNhc2VzLiBUaGUgdmFsdWUgb2YgdGhhdCBlbnRyeSBtdXN0IGJlIGEgdmFsaWQgcGFja2FnZSBuYW1lLgovLy8KLy8vIFJldHVybnMgYSBzaW1wbGUgbWFwcGluZyBmcm9tIHBhY2thZ2UgbmFtZSB0byBwYWNrYWdlIGxvY2F0aW9uLgovLy8gSWYgZGVmYXVsdCBwYWNrYWdlIGlzIGFsbG93ZWQsIHRoZSBtYXAgbWFwcyB0aGUgZW1wdHkgc3RyaW5nIHRvIHRoZSBkZWZhdWx0IHBhY2thZ2UncyBuYW1lLgpNYXA8U3RyaW5nLCBVcmk+IHBhcnNlKExpc3Q8aW50PiBzb3VyY2UsIFVyaSBiYXNlTG9jYXRpb24sCiAgICB7Ym9vbCBhbGxvd0RlZmF1bHRQYWNrYWdlID0gZmFsc2V9KSB7CiAgaW50IGluZGV4ID0gMDsKICBNYXA8U3RyaW5nLCBVcmk+IHJlc3VsdCA9IDxTdHJpbmcsIFVyaT57fTsKICB3aGlsZSAoaW5kZXggPCBzb3VyY2UubGVuZ3RoKSB7CiAgICBib29sIGlzQ29tbWVudCA9IGZhbHNlOwogICAgaW50IHN0YXJ0ID0gaW5kZXg7CiAgICBpbnQgc2VwYXJhdG9ySW5kZXggPSAtMTsKICAgIGludCBlbmQgPSBzb3VyY2UubGVuZ3RoOwogICAgaW50IGNoYXIgPSBzb3VyY2VbaW5kZXgrK107CiAgICBpZiAoY2hhciA9PSAkY3IgfHwgY2hhciA9PSAkbGYpIHsKICAgICAgY29udGludWU7CiAgICB9CiAgICBpZiAoY2hhciA9PSAkY29sb24pIHsKICAgICAgaWYgKCFhbGxvd0RlZmF1bHRQYWNrYWdlKSB7CiAgICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKCJNaXNzaW5nIHBhY2thZ2UgbmFtZSIsIHNvdXJjZSwgaW5kZXggLSAxKTsKICAgICAgfQogICAgICBzZXBhcmF0b3JJbmRleCA9IGluZGV4IC0gMTsKICAgIH0KICAgIGlzQ29tbWVudCA9IGNoYXIgPT0gJGhhc2g7CiAgICB3aGlsZSAoaW5kZXggPCBzb3VyY2UubGVuZ3RoKSB7CiAgICAgIGNoYXIgPSBzb3VyY2VbaW5kZXgrK107CiAgICAgIGlmIChjaGFyID09ICRjb2xvbiAmJiBzZXBhcmF0b3JJbmRleCA8IDApIHsKICAgICAgICBzZXBhcmF0b3JJbmRleCA9IGluZGV4IC0gMTsKICAgICAgfSBlbHNlIGlmIChjaGFyID09ICRjciB8fCBjaGFyID09ICRsZikgewogICAgICAgIGVuZCA9IGluZGV4IC0gMTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaWYgKGlzQ29tbWVudCkgY29udGludWU7CiAgICBpZiAoc2VwYXJhdG9ySW5kZXggPCAwKSB7CiAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiTm8gJzonIG9uIGxpbmUiLCBzb3VyY2UsIGluZGV4IC0gMSk7CiAgICB9CiAgICB2YXIgcGFja2FnZU5hbWUgPSBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoc291cmNlLCBzdGFydCwgc2VwYXJhdG9ySW5kZXgpOwogICAgaWYgKHBhY2thZ2VOYW1lLmlzRW1wdHkKICAgICAgICA/ICFhbGxvd0RlZmF1bHRQYWNrYWdlCiAgICAgICAgOiAhaXNWYWxpZFBhY2thZ2VOYW1lKHBhY2thZ2VOYW1lKSkgewogICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oIk5vdCBhIHZhbGlkIHBhY2thZ2UgbmFtZSIsIHBhY2thZ2VOYW1lLCAwKTsKICAgIH0KICAgIHZhciBwYWNrYWdlVmFsdWUgPQogICAgICAgIG5ldyBTdHJpbmcuZnJvbUNoYXJDb2Rlcyhzb3VyY2UsIHNlcGFyYXRvckluZGV4ICsgMSwgZW5kKTsKICAgIFVyaSBwYWNrYWdlTG9jYXRpb247CiAgICBpZiAocGFja2FnZU5hbWUuaXNFbXB0eSkgewogICAgICBpZiAoIWlzVmFsaWRQYWNrYWdlTmFtZShwYWNrYWdlVmFsdWUpKSB7CiAgICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKAogICAgICAgICAgICAiRGVmYXVsdCBwYWNrYWdlIGVudHJ5IHZhbHVlIGlzIG5vdCBhIHZhbGlkIHBhY2thZ2UgbmFtZSIpOwogICAgICB9CiAgICAgIHBhY2thZ2VMb2NhdGlvbiA9IFVyaShwYXRoOiBwYWNrYWdlVmFsdWUpOwogICAgfSBlbHNlIHsKICAgICAgcGFja2FnZUxvY2F0aW9uID0gYmFzZUxvY2F0aW9uLnJlc29sdmUocGFja2FnZVZhbHVlKTsKICAgICAgaWYgKCFwYWNrYWdlTG9jYXRpb24ucGF0aC5lbmRzV2l0aCgnLycpKSB7CiAgICAgICAgcGFja2FnZUxvY2F0aW9uID0KICAgICAgICAgICAgcGFja2FnZUxvY2F0aW9uLnJlcGxhY2UocGF0aDogcGFja2FnZUxvY2F0aW9uLnBhdGggKyAiLyIpOwogICAgICB9CiAgICB9CiAgICBpZiAocmVzdWx0LmNvbnRhaW5zS2V5KHBhY2thZ2VOYW1lKSkgewogICAgICBpZiAocGFja2FnZU5hbWUuaXNFbXB0eSkgewogICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICAgIk1vcmUgdGhhbiBvbmUgZGVmYXVsdCBwYWNrYWdlIGVudHJ5Iiwgc291cmNlLCBzdGFydCk7CiAgICAgIH0KICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKCJTYW1lIHBhY2thZ2UgbmFtZSBvY2N1cmVkIHR3aWNlIiwgc291cmNlLCBzdGFydCk7CiAgICB9CiAgICByZXN1bHRbcGFja2FnZU5hbWVdID0gcGFja2FnZUxvY2F0aW9uOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CgovLy8gV3JpdGVzIHRoZSBtYXBwaW5nIHRvIGEgW1N0cmluZ1NpbmtdLgovLy8KLy8vIElmIFtjb21tZW50XSBpcyBwcm92aWRlZCwgdGhlIG91dHB1dCB3aWxsIGNvbnRhaW4gdGhpcyBjb21tZW50Ci8vLyB3aXRoIGAjIGAgaW4gZnJvbnQgb2YgZWFjaCBsaW5lLgovLy8gTGluZXMgYXJlIGRlZmluZWQgYXMgZW5kaW5nIGluIGxpbmUgZmVlZCAoYCdcbidgKS4gSWYgdGhlIGZpbmFsCi8vLyBsaW5lIG9mIHRoZSBjb21tZW50IGRvZXNuJ3QgZW5kIGluIGEgbGluZSBmZWVkLCBvbmUgd2lsbCBiZSBhZGRlZC4KLy8vCi8vLyBJZiBbYmFzZVVyaV0gaXMgcHJvdmlkZWQsIHBhY2thZ2UgbG9jYXRpb25zIHdpbGwgYmUgbWFkZSByZWxhdGl2ZQovLy8gdG8gdGhlIGJhc2UgVVJJLCBpZiBwb3NzaWJsZSwgYmVmb3JlIHdyaXRpbmcuCi8vLwovLy8gQWxsIHRoZSBrZXlzIG9mIFtwYWNrYWdlTWFwcGluZ10gbXVzdCBiZSB2YWxpZCBwYWNrYWdlIG5hbWVzLAovLy8gYW5kIHRoZSB2YWx1ZXMgbXVzdCBiZSBVUklzIHRoYXQgZG8gbm90IGhhdmUgdGhlIGBwYWNrYWdlOmAgc2NoZW1lLgp2b2lkIHdyaXRlKFN0cmluZ1Npbmsgb3V0cHV0LCBNYXA8U3RyaW5nLCBVcmk+IHBhY2thZ2VNYXBwaW5nLAogICAge1VyaSBiYXNlVXJpLCBTdHJpbmcgY29tbWVudH0pIHsKICBpZiAoYmFzZVVyaSAhPSBudWxsICYmICFiYXNlVXJpLmlzQWJzb2x1dGUpIHsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKGJhc2VVcmksICJiYXNlVXJpIiwgIk11c3QgYmUgYWJzb2x1dGUiKTsKICB9CgogIGlmIChjb21tZW50ICE9IG51bGwpIHsKICAgIHZhciBsaW5lcyA9IGNvbW1lbnQuc3BsaXQoJ1xuJyk7CiAgICBpZiAobGluZXMubGFzdC5pc0VtcHR5KSBsaW5lcy5yZW1vdmVMYXN0KCk7CiAgICBmb3IgKHZhciBjb21tZW50TGluZSBpbiBsaW5lcykgewogICAgICBvdXRwdXQud3JpdGUoJyMgJyk7CiAgICAgIG91dHB1dC53cml0ZWxuKGNvbW1lbnRMaW5lKTsKICAgIH0KICB9IGVsc2UgewogICAgb3V0cHV0LndyaXRlKCIjIGdlbmVyYXRlZCBieSBwYWNrYWdlOnBhY2thZ2VfY29uZmlnIGF0ICIpOwogICAgb3V0cHV0LndyaXRlKG5ldyBEYXRlVGltZS5ub3coKSk7CiAgICBvdXRwdXQud3JpdGVsbigpOwogIH0KCiAgcGFja2FnZU1hcHBpbmcuZm9yRWFjaCgoU3RyaW5nIHBhY2thZ2VOYW1lLCBVcmkgdXJpKSB7CiAgICAvLyBWYWxpZGF0ZSBwYWNrYWdlTmFtZS4KICAgIGlmICghaXNWYWxpZFBhY2thZ2VOYW1lKHBhY2thZ2VOYW1lKSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignIiRwYWNrYWdlTmFtZSIgaXMgbm90IGEgdmFsaWQgcGFja2FnZSBuYW1lJyk7CiAgICB9CiAgICBpZiAodXJpLnNjaGVtZSA9PSAicGFja2FnZSIpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUoCiAgICAgICAgICAiUGFja2FnZSBsb2NhdGlvbiBtdXN0IG5vdCBiZSBhIHBhY2thZ2U6IFVSSSIsIHVyaS50b1N0cmluZygpKTsKICAgIH0KICAgIG91dHB1dC53cml0ZShwYWNrYWdlTmFtZSk7CiAgICBvdXRwdXQud3JpdGUoJzonKTsKICAgIC8vIElmIGJhc2VVcmkgcHJvdmlkZWQsIG1ha2UgdXJpIHJlbGF0aXZlLgogICAgaWYgKGJhc2VVcmkgIT0gbnVsbCkgewogICAgICB1cmkgPSBfcmVsYXRpdml6ZSh1cmksIGJhc2VVcmkpOwogICAgfQogICAgb3V0cHV0LndyaXRlKHVyaSk7CiAgICBpZiAoIXVyaS5wYXRoLmVuZHNXaXRoKCcvJykpIHsKICAgICAgb3V0cHV0LndyaXRlKCcvJyk7CiAgICB9CiAgICBvdXRwdXQud3JpdGVsbigpOwogIH0pOwp9CgovLy8gQXR0ZW1wdHMgdG8gcmV0dXJuIGEgcmVsYXRpdmUgVVJJIGZvciBbdXJpXS4KLy8vCi8vLyBUaGUgcmVzdWx0IFVSSSBzYXRpc2ZpZXMgYGJhc2VVcmkucmVzb2x2ZVVyaShyZXN1bHQpID09IHVyaWAsCi8vLyBidXQgbWF5IGJlIHJlbGF0aXZlLgovLy8gVGhlIGBiYXNlVXJpYCBtdXN0IGJlIGFic29sdXRlLgpVcmkgX3JlbGF0aXZpemUoVXJpIHVyaSwgVXJpIGJhc2VVcmkpIHsKICBhc3NlcnQoYmFzZVVyaS5pc0Fic29sdXRlKTsKICBpZiAodXJpLmhhc1F1ZXJ5IHx8IHVyaS5oYXNGcmFnbWVudCkgewogICAgdXJpID0gbmV3IFVyaSgKICAgICAgICBzY2hlbWU6IHVyaS5zY2hlbWUsCiAgICAgICAgdXNlckluZm86IHVyaS5oYXNBdXRob3JpdHkgPyB1cmkudXNlckluZm8gOiBudWxsLAogICAgICAgIGhvc3Q6IHVyaS5oYXNBdXRob3JpdHkgPyB1cmkuaG9zdCA6IG51bGwsCiAgICAgICAgcG9ydDogdXJpLmhhc0F1dGhvcml0eSA/IHVyaS5wb3J0IDogbnVsbCwKICAgICAgICBwYXRoOiB1cmkucGF0aCk7CiAgfQoKICAvLyBBbHJlYWR5IHJlbGF0aXZlLiBXZSBhc3N1bWUgdGhlIGNhbGxlciBrbm93cyB3aGF0IHRoZXkgYXJlIGRvaW5nLgogIGlmICghdXJpLmlzQWJzb2x1dGUpIHJldHVybiB1cmk7CgogIGlmIChiYXNlVXJpLnNjaGVtZSAhPSB1cmkuc2NoZW1lKSB7CiAgICByZXR1cm4gdXJpOwogIH0KCiAgLy8gSWYgYXV0aG9yaXR5IGRpZmZlcnMsIHdlIGNvdWxkIHJlbW92ZSB0aGUgc2NoZW1lLCBidXQgaXQncyBub3Qgd29ydGggaXQuCiAgaWYgKHVyaS5oYXNBdXRob3JpdHkgIT0gYmFzZVVyaS5oYXNBdXRob3JpdHkpIHJldHVybiB1cmk7CiAgaWYgKHVyaS5oYXNBdXRob3JpdHkpIHsKICAgIGlmICh1cmkudXNlckluZm8gIT0gYmFzZVVyaS51c2VySW5mbyB8fAogICAgICAgIHVyaS5ob3N0LnRvTG93ZXJDYXNlKCkgIT0gYmFzZVVyaS5ob3N0LnRvTG93ZXJDYXNlKCkgfHwKICAgICAgICB1cmkucG9ydCAhPSBiYXNlVXJpLnBvcnQpIHsKICAgICAgcmV0dXJuIHVyaTsKICAgIH0KICB9CgogIGJhc2VVcmkgPSBiYXNlVXJpLm5vcm1hbGl6ZVBhdGgoKTsKICBMaXN0PFN0cmluZz4gYmFzZSA9IGJhc2VVcmkucGF0aFNlZ21lbnRzLnRvTGlzdCgpOwogIGlmIChiYXNlLmlzTm90RW1wdHkpIHsKICAgIGJhc2UgPSBuZXcgTGlzdDxTdHJpbmc+LmZyb20oYmFzZSkuLnJlbW92ZUxhc3QoKTsKICB9CiAgdXJpID0gdXJpLm5vcm1hbGl6ZVBhdGgoKTsKICBMaXN0PFN0cmluZz4gdGFyZ2V0ID0gdXJpLnBhdGhTZWdtZW50cy50b0xpc3QoKTsKICBpZiAodGFyZ2V0LmlzTm90RW1wdHkgJiYgdGFyZ2V0Lmxhc3QuaXNFbXB0eSkgdGFyZ2V0LnJlbW92ZUxhc3QoKTsKICBpbnQgaW5kZXggPSAwOwogIHdoaWxlIChpbmRleCA8IGJhc2UubGVuZ3RoICYmIGluZGV4IDwgdGFyZ2V0Lmxlbmd0aCkgewogICAgaWYgKGJhc2VbaW5kZXhdICE9IHRhcmdldFtpbmRleF0pIHsKICAgICAgYnJlYWs7CiAgICB9CiAgICBpbmRleCsrOwogIH0KICBpZiAoaW5kZXggPT0gYmFzZS5sZW5ndGgpIHsKICAgIGlmIChpbmRleCA9PSB0YXJnZXQubGVuZ3RoKSB7CiAgICAgIHJldHVybiBuZXcgVXJpKHBhdGg6ICIuLyIpOwogICAgfQogICAgcmV0dXJuIG5ldyBVcmkocGF0aDogdGFyZ2V0LnNraXAoaW5kZXgpLmpvaW4oJy8nKSk7CiAgfSBlbHNlIGlmIChpbmRleCA+IDApIHsKICAgIHJldHVybiBuZXcgVXJpKAogICAgICAgIHBhdGg6ICcuLi8nICogKGJhc2UubGVuZ3RoIC0gaW5kZXgpICsgdGFyZ2V0LnNraXAoaW5kZXgpLmpvaW4oJy8nKSk7CiAgfSBlbHNlIHsKICAgIHJldHVybiB1cmk7CiAgfQp9CoDWAE5OPAEmASYBMAFIBEpRPQRNNwRFHEYbBFFKUVEERGA7KhEtIhwXHR0gJhAGGiJKCCIGHyQeMiQvGQ8IBh0eQgZPHB8uSQYXQxkfLx9ICDENPDEaRwgGKyEfQwhPBisEEQIBKgRDJURHBEYyBEJIPyUwSwQBGSUwJRojBgs/JhYEATkdLE0GIyVKBh8XLxsnBhcjGQYWBgIBMQRCGSQoHikTHDoyMhkEAUcjASYQBAFOPBosQCQSBgQBJTUZNgQdM0UROSgNBg0EHiIiBjgaFE0LEAQCASlwYWNrYWdlOnBhY2thZ2VfY29uZmlnL3BhY2thZ2VzX2ZpbGUuZGFydElzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2dfdGVzdGVkL3BhY2thZ2VfY29uZmlnL2xpYi9zcmMvcGFja2FnZXNfaW1wbC5kYXJ0kOMvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIEltcGxlbWVudGF0aW9ucyBvZiBbUGFja2FnZXNdIHRoYXQgbWF5IGJlIHVzZWQgaW4gZWl0aGVyIHNlcnZlciBvciBicm93c2VyCi8vLyBiYXNlZCBhcHBsaWNhdGlvbnMuIEZvciBpbXBsZW1lbnRhdGlvbnMgdGhhdCBjYW4gb25seSBydW4gaW4gdGhlIGJyb3dzZXIsCi8vLyBzZWUgW3BhY2thZ2VfY29uZmlnLnBhY2thZ2VzX2lvX2ltcGxdLgpsaWJyYXJ5IHBhY2thZ2VfY29uZmlnLnBhY2thZ2VzX2ltcGw7CgppbXBvcnQgImRhcnQ6Y29sbGVjdGlvbiIgc2hvdyBVbm1vZGlmaWFibGVNYXBWaWV3OwoKaW1wb3J0ICIuLi9wYWNrYWdlcy5kYXJ0IjsKaW1wb3J0ICJ1dGlsLmRhcnQiIHNob3cgY2hlY2tWYWxpZFBhY2thZ2VVcmk7CgovLy8gQSBbUGFja2FnZXNdIG51bGwtb2JqZWN0LgpjbGFzcyBOb1BhY2thZ2VzIGltcGxlbWVudHMgUGFja2FnZXMgewogIGNvbnN0IE5vUGFja2FnZXMoKTsKCiAgVXJpIHJlc29sdmUoVXJpIHBhY2thZ2VVcmksIHtVcmkgbm90Rm91bmQoVXJpIHBhY2thZ2VVcmkpfSkgewogICAgU3RyaW5nIHBhY2thZ2VOYW1lID0gY2hlY2tWYWxpZFBhY2thZ2VVcmkocGFja2FnZVVyaSk7CiAgICBpZiAobm90Rm91bmQgIT0gbnVsbCkgcmV0dXJuIG5vdEZvdW5kKHBhY2thZ2VVcmkpOwogICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUoCiAgICAgICAgcGFja2FnZVVyaSwgInBhY2thZ2VVcmkiLCAnTm8gcGFja2FnZSBuYW1lZCAiJHBhY2thZ2VOYW1lIicpOwogIH0KCiAgSXRlcmFibGU8U3RyaW5nPiBnZXQgcGFja2FnZXMgPT4gbmV3IEl0ZXJhYmxlPFN0cmluZz4uZW1wdHkoKTsKCiAgTWFwPFN0cmluZywgVXJpPiBhc01hcCgpID0+IGNvbnN0IDxTdHJpbmcsIFVyaT57fTsKCiAgU3RyaW5nIGdldCBkZWZhdWx0UGFja2FnZU5hbWUgPT4gbnVsbDsKCiAgU3RyaW5nIHBhY2thZ2VNZXRhZGF0YShTdHJpbmcgcGFja2FnZU5hbWUsIFN0cmluZyBrZXkpID0+IG51bGw7CgogIFN0cmluZyBsaWJyYXJ5TWV0YWRhdGEoVXJpIGxpYnJhcnlVcmksIFN0cmluZyBrZXkpID0+IG51bGw7Cn0KCi8vLyBCYXNlIGNsYXNzIGZvciBbUGFja2FnZXNdIGltcGxlbWVudGF0aW9ucy4KLy8vCi8vLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIFtyZXNvbHZlXSBtZXRob2QgaW4gdGVybXMgb2YgYSBwcml2YXRlCi8vLyBtZW1iZXIKYWJzdHJhY3QgY2xhc3MgUGFja2FnZXNCYXNlIGltcGxlbWVudHMgUGFja2FnZXMgewogIFVyaSByZXNvbHZlKFVyaSBwYWNrYWdlVXJpLCB7VXJpIG5vdEZvdW5kKFVyaSBwYWNrYWdlVXJpKX0pIHsKICAgIHBhY2thZ2VVcmkgPSBwYWNrYWdlVXJpLm5vcm1hbGl6ZVBhdGgoKTsKICAgIFN0cmluZyBwYWNrYWdlTmFtZSA9IGNoZWNrVmFsaWRQYWNrYWdlVXJpKHBhY2thZ2VVcmkpOwogICAgVXJpIHBhY2thZ2VCYXNlID0gZ2V0QmFzZShwYWNrYWdlTmFtZSk7CiAgICBpZiAocGFja2FnZUJhc2UgPT0gbnVsbCkgewogICAgICBpZiAobm90Rm91bmQgIT0gbnVsbCkgcmV0dXJuIG5vdEZvdW5kKHBhY2thZ2VVcmkpOwogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZSgKICAgICAgICAgIHBhY2thZ2VVcmksICJwYWNrYWdlVXJpIiwgJ05vIHBhY2thZ2UgbmFtZWQgIiRwYWNrYWdlTmFtZSInKTsKICAgIH0KICAgIFN0cmluZyBwYWNrYWdlUGF0aCA9IHBhY2thZ2VVcmkucGF0aC5zdWJzdHJpbmcocGFja2FnZU5hbWUubGVuZ3RoICsgMSk7CiAgICByZXR1cm4gcGFja2FnZUJhc2UucmVzb2x2ZShwYWNrYWdlUGF0aCk7CiAgfQoKICAvLy8gRmluZCBhIGJhc2UgbG9jYXRpb24gZm9yIGEgcGFja2FnZSBuYW1lLgogIC8vLwogIC8vLyBSZXR1cm5zIGBudWxsYCBpZiBubyBwYWNrYWdlIGV4aXN0cyB3aXRoIHRoYXQgbmFtZSwgYW5kIHRoYXQgY2FuIGJlCiAgLy8vIGRldGVybWluZWQuCiAgVXJpIGdldEJhc2UoU3RyaW5nIHBhY2thZ2VOYW1lKTsKCiAgU3RyaW5nIGdldCBkZWZhdWx0UGFja2FnZU5hbWUgPT4gbnVsbDsKCiAgU3RyaW5nIHBhY2thZ2VNZXRhZGF0YShTdHJpbmcgcGFja2FnZU5hbWUsIFN0cmluZyBrZXkpID0+IG51bGw7CgogIFN0cmluZyBsaWJyYXJ5TWV0YWRhdGEoVXJpIGxpYnJhcnlVcmksIFN0cmluZyBrZXkpID0+IG51bGw7Cn0KCi8vLyBBIFtQYWNrYWdlc10gaW1wbGVtZW50YXRpb24gYmFzZWQgb24gYW4gZXhpc3RpbmcgbWFwLgpjbGFzcyBNYXBQYWNrYWdlcyBleHRlbmRzIFBhY2thZ2VzQmFzZSB7CiAgZmluYWwgTWFwPFN0cmluZywgVXJpPiBfbWFwcGluZzsKICBNYXBQYWNrYWdlcyh0aGlzLl9tYXBwaW5nKTsKCiAgVXJpIGdldEJhc2UoU3RyaW5nIHBhY2thZ2VOYW1lKSA9PgogICAgICBwYWNrYWdlTmFtZS5pc0VtcHR5ID8gbnVsbCA6IF9tYXBwaW5nW3BhY2thZ2VOYW1lXTsKCiAgSXRlcmFibGU8U3RyaW5nPiBnZXQgcGFja2FnZXMgPT4gX21hcHBpbmcua2V5czsKCiAgTWFwPFN0cmluZywgVXJpPiBhc01hcCgpID0+IG5ldyBVbm1vZGlmaWFibGVNYXBWaWV3PFN0cmluZywgVXJpPihfbWFwcGluZyk7CgogIFN0cmluZyBnZXQgZGVmYXVsdFBhY2thZ2VOYW1lID0+IF9tYXBwaW5nWyIiXT8udG9TdHJpbmcoKTsKCiAgU3RyaW5nIHBhY2thZ2VNZXRhZGF0YShTdHJpbmcgcGFja2FnZU5hbWUsIFN0cmluZyBrZXkpIHsKICAgIGlmIChwYWNrYWdlTmFtZS5pc0VtcHR5KSByZXR1cm4gbnVsbDsKICAgIFVyaSB1cmkgPSBfbWFwcGluZ1twYWNrYWdlTmFtZV07CiAgICBpZiAodXJpID09IG51bGwgfHwgIXVyaS5oYXNGcmFnbWVudCkgcmV0dXJuIG51bGw7CiAgICAvLyBUaGlzIGNhbiBiZSBvcHRpbWl6ZWQsIGVpdGhlciBieSBjYWNoaW5nIHRoZSBtYXAgb3IgYnkKICAgIC8vIHBhcnNpbmcgaW5jcmVtZW50YWxseSBpbnN0ZWFkIG9mIHBhcnNpbmcgdGhlIGVudGlyZSBmcmFnbWVudC4KICAgIHJldHVybiBVcmkuc3BsaXRRdWVyeVN0cmluZyh1cmkuZnJhZ21lbnQpW2tleV07CiAgfQoKICBTdHJpbmcgbGlicmFyeU1ldGFkYXRhKFVyaSBsaWJyYXJ5VXJpLCBTdHJpbmcga2V5KSB7CiAgICBpZiAobGlicmFyeVVyaS5pc1NjaGVtZSgicGFja2FnZSIpKSB7CiAgICAgIHJldHVybiBwYWNrYWdlTWV0YWRhdGEobGlicmFyeVVyaS5wYXRoU2VnbWVudHMuZmlyc3QsIGtleSk7CiAgICB9CiAgICB2YXIgZGVmYXVsdFBhY2thZ2VOYW1lVXJpID0gX21hcHBpbmdbIiJdOwogICAgaWYgKGRlZmF1bHRQYWNrYWdlTmFtZVVyaSAhPSBudWxsKSB7CiAgICAgIHJldHVybiBwYWNrYWdlTWV0YWRhdGEoZGVmYXVsdFBhY2thZ2VOYW1lVXJpLnRvU3RyaW5nKCksIGtleSk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCi8vLyBBIFtQYWNrYWdlc10gaW1wbGVtZW50YXRpb24gYmFzZWQgb24gYSByZW1vdGUgKGUuZy4sIEhUVFApIGRpcmVjdG9yeS4KLy8vCi8vLyBUaGVyZSBpcyBubyB3YXkgdG8gZGV0ZWN0IHdoaWNoIHBhY2thZ2VzIGV4aXN0IHNob3J0IG9mIHRyeWluZyB0byB1c2UKLy8vIHRoZW0uIFlvdSBjYW4ndCBuZWNlc3NhcmlseSBjaGVjayB3aGV0aGVyIGEgZGlyZWN0b3J5IGV4aXN0cywKLy8vIGV4Y2VwdCBieSBjaGVja2luZyBmb3IgYSBrbm93IGZpbGUgaW4gdGhlIGRpcmVjdG9yeS4KY2xhc3MgTm9uRmlsZVBhY2thZ2VzRGlyZWN0b3J5UGFja2FnZXMgZXh0ZW5kcyBQYWNrYWdlc0Jhc2UgewogIGZpbmFsIFVyaSBfcGFja2FnZUJhc2U7CiAgTm9uRmlsZVBhY2thZ2VzRGlyZWN0b3J5UGFja2FnZXModGhpcy5fcGFja2FnZUJhc2UpOwoKICBVcmkgZ2V0QmFzZShTdHJpbmcgcGFja2FnZU5hbWUpID0+IF9wYWNrYWdlQmFzZS5yZXNvbHZlKCIkcGFja2FnZU5hbWUvIik7CgogIEVycm9yIF9mYWlsTGlzdGluZ1BhY2thZ2VzKCkgewogICAgcmV0dXJuIG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJDYW5ub3QgbGlzdCBwYWNrYWdlcyBmb3IgYSAke19wYWNrYWdlQmFzZS5zY2hlbWV9OiAiCiAgICAgICAgImJhc2VkIHBhY2thZ2Ugcm9vdCIpOwogIH0KCiAgSXRlcmFibGU8U3RyaW5nPiBnZXQgcGFja2FnZXMgewogICAgdGhyb3cgX2ZhaWxMaXN0aW5nUGFja2FnZXMoKTsKICB9CgogIE1hcDxTdHJpbmcsIFVyaT4gYXNNYXAoKSB7CiAgICB0aHJvdyBfZmFpbExpc3RpbmdQYWNrYWdlcygpOwogIH0KfQqAgQBOTjwBT04rJgEzARsuAR4nFgFAOzcjRgQBQQE1ASkBQgE+AgEvBEULMkAtOywfOSVIBkwtBAEvBkoSIwEpAUIBPgIBOikjHgElOgEyAU4BPQE7KiU2PkU0BAE3KkIGLilFBhEEAgFKBEpCOT4aNwFMASEhPh8EASIiBAEdIgQCAS1wYWNrYWdlOnBhY2thZ2VfY29uZmlnL3NyYy9wYWNrYWdlc19pbXBsLmRhcnRIc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2FwaV9wcm90b3R5cGUvdGVybWluYWxfY29sb3Jfc3VwcG9ydC5kYXJ0jSsvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmcm9udF9lbmQudGVybWluYWxfY29sb3Jfc3VwcG9ydDsKCmltcG9ydCAnZGFydDpjb252ZXJ0JyBzaG93IGpzb25FbmNvZGU7CgppbXBvcnQgJ2RhcnQ6aW8nIHNob3cgUGxhdGZvcm0sIFByb2Nlc3MsIFByb2Nlc3NSZXN1bHQsIHN0ZGVyciwgc3Rkb3V0OwoKaW1wb3J0ICcuLi9mYXN0YS9jb2xvcnMuZGFydCcgc2hvdyBBTExfQ09ERVMsIFRFUk1JTkFMX0NBUEFCSUxJVElFUzsKCmltcG9ydCAnZGlhZ25vc3RpY19tZXNzYWdlLmRhcnQnIHNob3cgRGlhZ25vc3RpY01lc3NhZ2U7CgovLy8gVHJ1ZSBpZiB3ZSBzaG91bGQgZW5hYmxlIGNvbG9ycyBpbiBvdXRwdXQuCi8vLwovLy8gV2UgZW5hYmxlIGNvbG9ycyBvbmx5IHdoZW4gYm90aCBbc3Rkb3V0XSBhbmQgW3N0ZGVycl0gc3VwcG9ydCBBTlNJIGVzY2FwZXMuCmZpbmFsIGJvb2wgZW5hYmxlVGVybWluYWxDb2xvcnMgPSBfY29tcHV0ZUVuYWJsZUNvbG9ycygpOwoKdm9pZCBwcmludERpYWdub3N0aWNNZXNzYWdlKAogICAgRGlhZ25vc3RpY01lc3NhZ2UgbWVzc2FnZSwgdm9pZCBGdW5jdGlvbihTdHJpbmcpIHByaW50bG4pIHsKICBpZiAoZW5hYmxlVGVybWluYWxDb2xvcnMpIHsKICAgIG1lc3NhZ2UuYW5zaUZvcm1hdHRlZC5mb3JFYWNoKHByaW50bG4pOwogIH0gZWxzZSB7CiAgICBtZXNzYWdlLnBsYWluVGV4dEZvcm1hdHRlZC5mb3JFYWNoKHByaW50bG4pOwogIH0KfQoKLy8vIE9uIFdpbmRvd3MsIGNvbG9ycyBhcmUgZW5hYmxlZCBpZiBib3RoIHN0ZG91dCBhbmQgc3RkZXJyIHN1cHBvcnRzIEFOU0kKLy8vIGVzY2FwZXMuICBPbiBvdGhlciBwbGF0Zm9ybXMsIHdlIHJlbHkgb24gdGhlIGV4dGVybmFsIHByb2dyYW1zIGB0dHlgIGFuZAovLy8gYHRwdXRgIHRvIGNvbXB1dGUgaWYgQU5TSSBjb2xvcnMgYXJlIHN1cHBvcnRlZC4KYm9vbCBfY29tcHV0ZUVuYWJsZUNvbG9ycygpIHsKICBjb25zdCBib29sIGRlYnVnID0KICAgICAgY29uc3QgYm9vbC5mcm9tRW52aXJvbm1lbnQoImZyb250X2VuZC5kZWJ1Z19jb21wdXRlX2VuYWJsZV9jb2xvcnMiKTsKCiAgaWYgKFBsYXRmb3JtLmlzV2luZG93cykgewogICAgaWYgKCFzdGRvdXQuc3VwcG9ydHNBbnNpRXNjYXBlcyB8fCAhc3RkZXJyLnN1cHBvcnRzQW5zaUVzY2FwZXMpIHsKICAgICAgLy8gSW4gdGhpcyBjYXNlLCBlaXRoZXIgW3N0ZG91dF0gb3IgW3N0ZGVycl0gZGlkIG5vdCBzdXBwb3J0IHRoZSBwcm9wZXJ0eQogICAgICAvLyBgc3VwcG9ydHNBbnNpRXNjYXBlc2AuIFNpbmNlIHdlIGRvIG5vdCBoYXZlIGFub3RoZXIgd2F5IHRvIGRldGVybWluZQogICAgICAvLyBzdXBwb3J0IGZvciBjb2xvcnMsIHdlIGRpc2FibGUgdGhlbS4KICAgICAgaWYgKGRlYnVnKSB7CiAgICAgICAgcHJpbnQoIk5vdCBlbmFibGluZyBjb2xvcnMgYXMgQU5TSSBpcyBub3Qgc3VwcG9ydGVkLiIpOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChkZWJ1ZykgewogICAgICBwcmludCgiRW5hYmxpbmcgY29sb3JzIGFzIE9TIGlzIFdpbmRvd3MuIik7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8vIFdlIGhhdmUgdG8gY2hlY2sgaWYgdGhlIHRlcm1pbmFsIGFjdHVhbGx5IHN1cHBvcnRzIGNvbG9ycy4gQ3VycmVudGx5LCB0bwogIC8vIGF2b2lkIGxpbmtpbmcgdGhlIERhcnQgVk0gd2l0aCBuY3Vyc2VzLCBBTlNJIGVzY2FwZSBzdXBwb3J0IGlzIHJlZHVjZWQgdG8KICAvLyBgUGxhdGZvcm0uZW52aXJvbm1lbnRbJ1RFUk0nXS5jb250YWlucygieHRlcm0iKWAuCgogIC8vIENoZWNrIGlmIHN0ZGluIGlzIGEgdGVybWluYWwgKFRUWSkuCiAgUHJvY2Vzc1Jlc3VsdCByZXN1bHQgPQogICAgICBQcm9jZXNzLnJ1blN5bmMoIi9iaW4vc2giLCBbIi1jIiwgInR0eSA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGwiXSk7CgogIGlmIChyZXN1bHQuZXhpdENvZGUgIT0gMCkgewogICAgaWYgKGRlYnVnKSB7CiAgICAgIHByaW50KCJOb3QgZW5hYmxpbmcgY29sb3JzLCBzdGRpbiBpc24ndCBhIHRlcm1pbmFsLiIpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8gVGhlIGAtU2Agb3B0aW9uIG9mIGB0cHV0YCBhbGxvd3MgdXMgdG8gcXVlcnkgbXVsdGlwbGUgY2FwYWJpbGl0aWVzIGF0CiAgLy8gb25jZS4KICByZXN1bHQgPSBQcm9jZXNzLnJ1blN5bmMoCiAgICAgICIvYmluL3NoIiwgWyItYyIsICJwcmludGYgJyVzJyAnJFRFUk1JTkFMX0NBUEFCSUxJVElFUycgfCB0cHV0IC1TIl0pOwoKICBpZiAocmVzdWx0LmV4aXRDb2RlICE9IDApIHsKICAgIGlmIChkZWJ1ZykgewogICAgICBwcmludCgiTm90IGVuYWJsaW5nIGNvbG9ycywgcnVubmluZyB0cHV0IGZhaWxlZC4iKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIExpc3Q8U3RyaW5nPiBsaW5lcyA9IHJlc3VsdC5zdGRvdXQuc3BsaXQoIlxuIik7CgogIGlmIChsaW5lcy5sZW5ndGggIT0gMikgewogICAgaWYgKGRlYnVnKSB7CiAgICAgIHByaW50KCJOb3QgZW5hYmxpbmcgY29sb3JzLCB1bmV4cGVjdGVkIG91dHB1dCBmcm9tIHRwdXQ6ICIKICAgICAgICAgICIke2pzb25FbmNvZGUocmVzdWx0LnN0ZG91dCl9LiIpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgU3RyaW5nIG51bWJlck9mQ29sb3JzID0gbGluZXNbMF07CiAgaWYgKChpbnQudHJ5UGFyc2UobnVtYmVyT2ZDb2xvcnMpID8/IC0xKSA8IDgpIHsKICAgIGlmIChkZWJ1ZykgewogICAgICBwcmludCgiTm90IGVuYWJsaW5nIGNvbG9ycywgbGVzcyB0aGFuIDggY29sb3JzIHN1cHBvcnRlZDogIgogICAgICAgICAgIiR7anNvbkVuY29kZShudW1iZXJPZkNvbG9ycyl9LiIpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgU3RyaW5nIGFsbENvZGVzID0gbGluZXNbMV0udHJpbSgpOwogIGlmIChBTExfQ09ERVMgIT0gYWxsQ29kZXMpIHsKICAgIGlmIChkZWJ1ZykgewogICAgICBwcmludCgiTm90IGVuYWJsaW5nIGNvbG9ycywgY29sb3IgY29kZXMgZG9uJ3QgbWF0Y2g6ICIKICAgICAgICAgICIke2pzb25FbmNvZGUoQUxMX0NPREVTKX0gIT0gJHtqc29uRW5jb2RlKGFsbENvZGVzKX0uIik7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBpZiAoZGVidWcpIHsKICAgIHByaW50KCJFbmFibGluZyBjb2xvcnMuIik7CiAgfQogIHJldHVybiB0cnVlOwp9CnEATk48ASoBJwFIAUUBOQEvBFA6AR1AHiwLMQQCAUtNNB4VSwEcRlBOLhNACBQGETIGEQQBTk83ASkZSgEeET0GEgQBSwscTAEeEToGEgQBMgEbEUEsBhIEASQyEUItBhIEASUfET1DBhIEAQ8fBA8CAT9wYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS90ZXJtaW5hbF9jb2xvcl9zdXBwb3J0LmRhcnRAc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2NvbW1hbmRfbGluZV9yZXBvcnRpbmcuZGFydJhKLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBQcm92aWRlcyBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIHJlcG9ydCBhbmQgZm9ybWF0IG1ldGhvZHMgb2YKLy8vIFtDb21waWxlckNvbnRleHRdIHRoYXQgYXJlIHN1aXRhYmxlIGZvciBjb21tYW5kLWxpbmUgdG9vbHMuIFRoZSBtZXRob2RzIGluCi8vLyB0aGlzIGxpYnJhcnkgYXJlbid0IGludGVuZGVkIHRvIGJlIGNhbGxlZCBkaXJlY3RseSwgaW5zdGVhZCwgb25lIHNob3VsZCB1c2UKLy8vIFtDb21waWxlckNvbnRleHRdLgpsaWJyYXJ5IGZhc3RhLmNvbW1hbmRfbGluZV9yZXBvcnRpbmc7CgppbXBvcnQgJ2RhcnQ6bWF0aCcgc2hvdyBtaW47CgppbXBvcnQgJ2RhcnQ6dHlwZWRfZGF0YScgc2hvdyBVaW50OExpc3Q7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IExvY2F0aW9uLCBUcmVlTm9kZTsKCmltcG9ydCAnLi4vY29tcHV0ZV9wbGF0Zm9ybV9iaW5hcmllc19sb2NhdGlvbi5kYXJ0JyBzaG93IHRyYW5zbGF0ZVNkazsKCmltcG9ydCAnY29sb3JzLmRhcnQnIHNob3cgZ3JlZW4sIG1hZ2VudGEsIHJlZDsKCmltcG9ydCAnY29tcGlsZXJfY29udGV4dC5kYXJ0JyBzaG93IENvbXBpbGVyQ29udGV4dDsKCmltcG9ydCAnY3Jhc2guZGFydCcgc2hvdyBDcmFzaCwgc2FmZVRvU3RyaW5nOwoKaW1wb3J0ICdmYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IExvY2F0ZWRNZXNzYWdlOwoKaW1wb3J0ICdtZXNzYWdlcy5kYXJ0JyBzaG93IGdldExvY2F0aW9uLCBnZXRTb3VyY2VMaW5lOwoKaW1wb3J0ICdwcm9ibGVtcy5kYXJ0JyBzaG93IHVuaGFuZGxlZDsKCmltcG9ydCAncmVzb2x2ZV9pbnB1dF91cmkuZGFydCcgc2hvdyBpc1dpbmRvd3M7CgppbXBvcnQgJ3NldmVyaXR5LmRhcnQnIHNob3cgU2V2ZXJpdHksIHNldmVyaXR5UHJlZml4ZXM7CgppbXBvcnQgJ3NjYW5uZXIvY2hhcmFjdGVycy5kYXJ0JyBzaG93ICRDQVJFVCwgJFNQQUNFLCAkVEFCOwoKaW1wb3J0ICd1dGlsL3JlbGF0aXZpemUuZGFydCcgc2hvdyByZWxhdGl2aXplVXJpOwoKY29uc3QgYm9vbCBoaWRlV2FybmluZ3MgPSBmYWxzZTsKCi8vLyBGb3JtYXRzIFttZXNzYWdlXSBhcyBhIHN0cmluZyB0aGF0IGlzIHN1aXRhYmxlIGZvciBvdXRwdXQgZnJvbSBhCi8vLyBjb21tYW5kLWxpbmUgdG9vbC4gVGhpcyBpbmNsdWRlcyBzb3VyY2Ugc25pcHBldHMgYW5kIGRpZmZlcmVudCBjb2xvcnMgYmFzZWQKLy8vIG9uIFtzZXZlcml0eV0uClN0cmluZyBmb3JtYXQoTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZSwgU2V2ZXJpdHkgc2V2ZXJpdHksIHtMb2NhdGlvbiBsb2NhdGlvbn0pIHsKICB0cnkgewogICAgaW50IGxlbmd0aCA9IG1lc3NhZ2UubGVuZ3RoOwogICAgaWYgKGxlbmd0aCA8IDEpIHsKICAgICAgLy8gVE9ETyhhaGUpOiBUaHJvdyBpbiB0aGlzIHNpdHVhdGlvbi4gSXQgaXMgbm9ybWFsbHkgYW4gZXJyb3IgY2F1c2VkIGJ5CiAgICAgIC8vIGVtcHR5IG5hbWVzLgogICAgICBsZW5ndGggPSAxOwogICAgfQogICAgU3RyaW5nIHByZWZpeCA9IHNldmVyaXR5UHJlZml4ZXNbc2V2ZXJpdHldOwogICAgU3RyaW5nIG1lc3NhZ2VUZXh0ID0KICAgICAgICBwcmVmaXggPT0gbnVsbCA/IG1lc3NhZ2UubWVzc2FnZSA6ICIkcHJlZml4OiAke21lc3NhZ2UubWVzc2FnZX0iOwogICAgaWYgKG1lc3NhZ2UudGlwICE9IG51bGwpIHsKICAgICAgbWVzc2FnZVRleHQgKz0gIlxuJHttZXNzYWdlLnRpcH0iOwogICAgfQogICAgaWYgKENvbXBpbGVyQ29udGV4dC5lbmFibGVDb2xvcnMpIHsKICAgICAgc3dpdGNoIChzZXZlcml0eSkgewogICAgICAgIGNhc2UgU2V2ZXJpdHkuZXJyb3I6CiAgICAgICAgY2FzZSBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW06CiAgICAgICAgICBtZXNzYWdlVGV4dCA9IHJlZChtZXNzYWdlVGV4dCk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBTZXZlcml0eS53YXJuaW5nOgogICAgICAgICAgbWVzc2FnZVRleHQgPSBtYWdlbnRhKG1lc3NhZ2VUZXh0KTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIFNldmVyaXR5LmNvbnRleHQ6CiAgICAgICAgICBtZXNzYWdlVGV4dCA9IGdyZWVuKG1lc3NhZ2VUZXh0KTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuIHVuaGFuZGxlZCgiJHNldmVyaXR5IiwgImZvcm1hdCIsIC0xLCBudWxsKTsKICAgICAgfQogICAgfQoKICAgIGlmIChtZXNzYWdlLnVyaSAhPSBudWxsKSB7CiAgICAgIFN0cmluZyBwYXRoID0KICAgICAgICAgIHJlbGF0aXZpemVVcmkoVXJpLmJhc2UsIHRyYW5zbGF0ZVNkayhtZXNzYWdlLnVyaSksIGlzV2luZG93cyk7CiAgICAgIGludCBvZmZzZXQgPSBtZXNzYWdlLmNoYXJPZmZzZXQ7CiAgICAgIGxvY2F0aW9uID8/PSAob2Zmc2V0ID09IC0xID8gbnVsbCA6IGdldExvY2F0aW9uKG1lc3NhZ2UudXJpLCBvZmZzZXQpKTsKICAgICAgaWYgKGxvY2F0aW9uPy5saW5lID09IFRyZWVOb2RlLm5vT2Zmc2V0KSB7CiAgICAgICAgbG9jYXRpb24gPSBudWxsOwogICAgICB9CiAgICAgIFN0cmluZyBzb3VyY2VMaW5lID0gZ2V0U291cmNlTGluZShsb2NhdGlvbik7CiAgICAgIHJldHVybiBmb3JtYXRFcnJvck1lc3NhZ2UoCiAgICAgICAgICBzb3VyY2VMaW5lLCBsb2NhdGlvbiwgbGVuZ3RoLCBwYXRoLCBtZXNzYWdlVGV4dCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbWVzc2FnZVRleHQ7CiAgICB9CiAgfSBjYXRjaCAoZXJyb3IsIHRyYWNlKSB7CiAgICBwcmludCgiQ3Jhc2ggd2hlbiBmb3JtYXR0aW5nOiAiCiAgICAgICAgIlske21lc3NhZ2UuY29kZS5uYW1lfV0gJHtzYWZlVG9TdHJpbmcobWVzc2FnZS5tZXNzYWdlKX1cbiIKICAgICAgICAiJHtzYWZlVG9TdHJpbmcoZXJyb3IpfVxuIgogICAgICAgICIkdHJhY2UiKTsKICAgIHRocm93IG5ldyBDcmFzaChtZXNzYWdlLnVyaSwgbWVzc2FnZS5jaGFyT2Zmc2V0LCBlcnJvciwgdHJhY2UpOwogIH0KfQoKU3RyaW5nIGZvcm1hdEVycm9yTWVzc2FnZShTdHJpbmcgc291cmNlTGluZSwgTG9jYXRpb24gbG9jYXRpb24sCiAgICBpbnQgc3F1aWdnbHlMZW5ndGgsIFN0cmluZyBwYXRoLCBTdHJpbmcgbWVzc2FnZVRleHQpIHsKICBpZiAoc291cmNlTGluZSA9PSBudWxsKSB7CiAgICBzb3VyY2VMaW5lID0gIiI7CiAgfSBlbHNlIGlmIChzb3VyY2VMaW5lLmlzTm90RW1wdHkpIHsKICAgIC8vIFRPRE8oYXNrZXNjKTogTXVjaCBtb3JlIGNvdWxkIGJlIGRvbmUgdG8gaW5kZW50IHByb3Blcmx5IGluIHRoZQogICAgLy8gcHJlc2VuY2Ugb2YgYWxsIHNvcnRzIG9mIHVuaWNvZGUgd2VpcmRuZXNzLgogICAgLy8gVGhpcyBoYW5kbGluZyBjb3ZlcnMgdGhlIGNvbW1vbiBjYXNlIG9mIHNpbmdsZS13aWR0aCBjaGFyYWN0ZXJzCiAgICAvLyBpbmRlbnRlZCB3aXRoIHNwYWNlcyBhbmQvb3IgdGFicywgdXNpbmcgbm8gc3Vycm9nYXRlcy4KICAgIGludCBpbmRlbnRMZW5ndGggPSBsb2NhdGlvbi5jb2x1bW4gLSAxOwogICAgVWludDhMaXN0IGluZGVudGF0aW9uID0gbmV3IFVpbnQ4TGlzdChpbmRlbnRMZW5ndGggKyBzcXVpZ2dseUxlbmd0aCkKICAgICAgLi5maWxsUmFuZ2UoMCwgaW5kZW50TGVuZ3RoLCAkU1BBQ0UpCiAgICAgIC4uZmlsbFJhbmdlKGluZGVudExlbmd0aCwgaW5kZW50TGVuZ3RoICsgc3F1aWdnbHlMZW5ndGgsICRDQVJFVCk7CiAgICBpbnQgbGVuZ3RoSW5Tb3VyY2VMaW5lID0gbWluKGluZGVudGF0aW9uLmxlbmd0aCwgc291cmNlTGluZS5sZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGhJblNvdXJjZUxpbmU7IGkrKykgewogICAgICBpZiAoc291cmNlTGluZS5jb2RlVW5pdEF0KGkpID09ICRUQUIpIHsKICAgICAgICBpbmRlbnRhdGlvbltpXSA9ICRUQUI7CiAgICAgIH0KICAgIH0KICAgIFN0cmluZyBwb2ludGVyID0gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGluZGVudGF0aW9uKTsKICAgIGlmIChwb2ludGVyLmxlbmd0aCA+IHNvdXJjZUxpbmUubGVuZ3RoKSB7CiAgICAgIC8vIFRydW5jYXRlIHRoZSBjYXJldHMgdG8gaGFuZGxlIG1lc3NhZ2VzIHRoYXQgc3BhbiBtdWx0aXBsZSBsaW5lcy4KICAgICAgaW50IHBvaW50ZXJMZW5ndGggPSBzb3VyY2VMaW5lLmxlbmd0aDsKICAgICAgLy8gQWRkIG9uZSB0byBjb3ZlciB0aGUgY2FzZSBvZiBhIHBhcnNlciBlcnJvciBwb2ludGluZyB0byBFT0Ygd2hlbgogICAgICAvLyB0aGUgbGFzdCBsaW5lIGRvZXNuJ3QgZW5kIHdpdGggYSBuZXdsaW5lLiBGb3IgbWVzc2FnZXMgc3Bhbm5pbmcKICAgICAgLy8gbXVsdGlwbGUgbGluZXMsIHRoaXMgYWxzbyBwcm92aWRlcyBhIG1pbm9yIHZpc3VhbCBjbHVlIHRoYXQgY2FuIGJlCiAgICAgIC8vIHVzZWZ1bCBmb3IgZGVidWdnaW5nIEZhc3RhLgogICAgICBwb2ludGVyTGVuZ3RoICs9IDE7CiAgICAgIHBvaW50ZXIgPSBwb2ludGVyLnN1YnN0cmluZygwLCBwb2ludGVyTGVuZ3RoKTsKICAgICAgcG9pbnRlciArPSAiLi4uIjsKICAgIH0KICAgIHNvdXJjZUxpbmUgPSAiXG4kc291cmNlTGluZVxuJHBvaW50ZXIiOwogIH0KICBTdHJpbmcgcG9zaXRpb24gPQogICAgICBsb2NhdGlvbiA9PSBudWxsID8gIiIgOiAiOiR7bG9jYXRpb24ubGluZX06JHtsb2NhdGlvbi5jb2x1bW59IjsKICByZXR1cm4gIiRwYXRoJHBvc2l0aW9uOiAkbWVzc2FnZVRleHQkc291cmNlTGluZSI7Cn0KCi8vLyBBcmUgcHJvYmxlbXMgb2YgW3NldmVyaXR5XSBzdXBwcmVzc2VkPwpib29sIGlzSGlkZGVuKFNldmVyaXR5IHNldmVyaXR5KSB7CiAgc3dpdGNoIChzZXZlcml0eSkgewogICAgY2FzZSBTZXZlcml0eS5lcnJvcjoKICAgIGNhc2UgU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtOgogICAgY2FzZSBTZXZlcml0eS5jb250ZXh0OgogICAgICByZXR1cm4gZmFsc2U7CgogICAgY2FzZSBTZXZlcml0eS53YXJuaW5nOgogICAgICByZXR1cm4gaGlkZVdhcm5pbmdzOwoKICAgIGRlZmF1bHQ6CiAgICAgIHJldHVybiB1bmhhbmRsZWQoIiRzZXZlcml0eSIsICJpc0hpZGRlbiIsIC0xLCBudWxsKTsKICB9Cn0KCi8vLyBBcmUgcHJvYmxlbXMgb2YgW3NldmVyaXR5XSBmYXRhbD8gVGhhdCBpcywgc2hvdWxkIHRoZSBjb21waWxlciB0ZXJtaW5hdGUKLy8vIGltbWVkaWF0ZWx5Pwpib29sIHNob3VsZFRocm93T24oU2V2ZXJpdHkgc2V2ZXJpdHkpIHsKICBzd2l0Y2ggKHNldmVyaXR5KSB7CiAgICBjYXNlIFNldmVyaXR5LmVycm9yOgogICAgICByZXR1cm4gQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQub3B0aW9ucy50aHJvd09uRXJyb3JzRm9yRGVidWdnaW5nOwoKICAgIGNhc2UgU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtOgogICAgICByZXR1cm4gdHJ1ZTsKCiAgICBjYXNlIFNldmVyaXR5Lndhcm5pbmc6CiAgICAgIHJldHVybiBDb21waWxlckNvbnRleHQuY3VycmVudC5vcHRpb25zLnRocm93T25XYXJuaW5nc0ZvckRlYnVnZ2luZzsKCiAgICBjYXNlIFNldmVyaXR5LmNvbnRleHQ6CiAgICAgIHJldHVybiBmYWxzZTsKCiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gdW5oYW5kbGVkKCIkc2V2ZXJpdHkiLCAic2hvdWxkVGhyb3dPbiIsIC0xLCBudWxsKTsKICB9Cn0KCmJvb2wgaXNDb21waWxlVGltZUVycm9yKFNldmVyaXR5IHNldmVyaXR5KSB7CiAgc3dpdGNoIChzZXZlcml0eSkgewogICAgY2FzZSBTZXZlcml0eS5lcnJvcjoKICAgIGNhc2UgU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtOgogICAgICByZXR1cm4gdHJ1ZTsKCiAgICBjYXNlIFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZzoKICAgICAgcmV0dXJuICFDb21waWxlckNvbnRleHQuY3VycmVudC5vcHRpb25zLmxlZ2FjeU1vZGU7CgogICAgY2FzZSBTZXZlcml0eS53YXJuaW5nOgogICAgY2FzZSBTZXZlcml0eS5jb250ZXh0OgogICAgICByZXR1cm4gZmFsc2U7CgogICAgY2FzZSBTZXZlcml0eS5pZ25vcmVkOgogICAgICBicmVhazsgLy8gRmFsbC10aHJvdWdoIHRvIHVuaGFuZGxlZCBiZWxvdy4KICB9CiAgcmV0dXJuIHVuaGFuZGxlZCgiJHNldmVyaXR5IiwgImlzQ29tcGlsZVRpbWVFcnJvciIsIC0xLCBudWxsKTsKfQqAwwBOTjwBSk9QFyYBHQEpAToBRwEvATUBLgEvATgBJwEwATgBPAEyASEBRVATUAghFk8WEgYwGUofKQYoGh0nKhEBHy4RAR8sEQERPQgGAR8USSdNMRkIMyE8DRoGGyREIxNEBAIBQDscFSZHM0c+LEkrSEkzLh8IBjwuSi1KSUwlGjUYBiwEFEY0AgErIxYZIxsUARsbAQ07BAIBTREoFhlIASMTARtKARsUAQ1ABAIBLRYZIxMBJjoBGxsUARsxBEECATdwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvY29tbWFuZF9saW5lX3JlcG9ydGluZy5kYXJ0MnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9tZXNzYWdlcy5kYXJ0hjwvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5tZXNzYWdlczsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgTGlicmFyeSwgTG9jYXRpb24sIENvbXBvbmVudCwgVHJlZU5vZGU7CgppbXBvcnQgJ2NvbXBpbGVyX2NvbnRleHQuZGFydCcgc2hvdyBDb21waWxlckNvbnRleHQ7CgpleHBvcnQgJ2Zhc3RhX2NvZGVzLmRhcnQnOwoKYm9vbCBnZXQgaXNWZXJib3NlID0+IENvbXBpbGVyQ29udGV4dC5jdXJyZW50Lm9wdGlvbnMudmVyYm9zZTsKCkxvY2F0aW9uIGdldExvY2F0aW9uKFVyaSB1cmksIGludCBjaGFyT2Zmc2V0KSB7CiAgcmV0dXJuIENvbXBpbGVyQ29udGV4dC5jdXJyZW50LnVyaVRvU291cmNlW3VyaV0/LmdldExvY2F0aW9uKHVyaSwgY2hhck9mZnNldCk7Cn0KCkxvY2F0aW9uIGdldExvY2F0aW9uRnJvbVVyaShVcmkgdXJpLCBpbnQgY2hhck9mZnNldCkgewogIGlmIChjaGFyT2Zmc2V0ID09IC0xKSByZXR1cm4gbnVsbDsKICByZXR1cm4gZ2V0TG9jYXRpb24odXJpLCBjaGFyT2Zmc2V0KTsKfQoKU3RyaW5nIGdldFNvdXJjZUxpbmUoTG9jYXRpb24gbG9jYXRpb24pIHsKICBpZiAobG9jYXRpb24gPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgcmV0dXJuIENvbXBpbGVyQ29udGV4dC5jdXJyZW50LnVyaVRvU291cmNlW2xvY2F0aW9uLmZpbGVdCiAgICAgID8uZ2V0VGV4dExpbmUobG9jYXRpb24ubGluZSk7Cn0KCkxvY2F0aW9uIGdldExvY2F0aW9uRnJvbU5vZGUoVHJlZU5vZGUgbm9kZSkgewogIGlmIChub2RlLmVuY2xvc2luZ0NvbXBvbmVudCA9PSBudWxsKSB7CiAgICBUcmVlTm9kZSBwYXJlbnQgPSBub2RlOwogICAgd2hpbGUgKHBhcmVudCAhPSBudWxsICYmIHBhcmVudCBpcyEgTGlicmFyeSkgewogICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50OwogICAgfQogICAgaWYgKHBhcmVudCBpcyBMaWJyYXJ5KSB7CiAgICAgIENvbXBvbmVudCBjb21wb25lbnQgPSBDb21waWxlckNvbnRleHQuY3VycmVudC5vcHRpb25zLnRhcmdldAogICAgICAgICAgLmNvbmZpZ3VyZUNvbXBvbmVudCgKICAgICAgICAgICAgICBuZXcgQ29tcG9uZW50KHVyaVRvU291cmNlOiBDb21waWxlckNvbnRleHQuY3VycmVudC51cmlUb1NvdXJjZSkpOwogICAgICBjb21wb25lbnQubGlicmFyaWVzLmFkZChwYXJlbnQpOwogICAgICBwYXJlbnQucGFyZW50ID0gY29tcG9uZW50OwogICAgICBMb2NhdGlvbiByZXN1bHQgPSBub2RlLmxvY2F0aW9uOwogICAgICBjb21wb25lbnQubGlicmFyaWVzLmNsZWFyKCk7CiAgICAgIHBhcmVudC5wYXJlbnQgPSBudWxsOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfSBlbHNlIHsKICAgIHJldHVybiBub2RlLmxvY2F0aW9uOwogIH0KfQo2AE5OPAEYAU4BNQEbAT8BMFECATclJwIBKiU8JAIBLikcMx4GHUMfUCchJyMcFQ0TBgsaBAIBKXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9tZXNzYWdlcy5kYXJ0MnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9wcm9ibGVtcy5kYXJ0iqIvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5wcm9ibGVtczsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgRmlsZVVyaU5vZGUsIFRyZWVOb2RlOwoKaW1wb3J0ICdjb21waWxlcl9jb250ZXh0LmRhcnQnIHNob3cgQ29tcGlsZXJDb250ZXh0OwoKaW1wb3J0ICdtZXNzYWdlcy5kYXJ0JwogICAgc2hvdwogICAgICAgIExvY2F0ZWRNZXNzYWdlLAogICAgICAgIE1lc3NhZ2UsCiAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1EZWJ1Z0Fib3J0LAogICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtVW5leHBlY3RlZCwKICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVVuaGFuZGxlZCwKICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVVuaW1wbGVtZW50ZWQsCiAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VbnN1cHBvcnRlZDsKCmltcG9ydCAnc2V2ZXJpdHkuZGFydCcgc2hvdyBTZXZlcml0eSwgc2V2ZXJpdHlUZXh0czsKCmNsYXNzIERlYnVnQWJvcnQgewogIGZpbmFsIExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2U7CgogIERlYnVnQWJvcnQoVXJpIHVyaSwgaW50IGNoYXJPZmZzZXQsIFNldmVyaXR5IHNldmVyaXR5LCBTdGFja1RyYWNlIHRyYWNlKQogICAgICA6IG1lc3NhZ2UgPSB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbURlYnVnQWJvcnQKICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoc2V2ZXJpdHlUZXh0c1tzZXZlcml0eV0sICIkdHJhY2UiKQogICAgICAgICAgICAud2l0aExvY2F0aW9uKHVyaSwgY2hhck9mZnNldCwgbm9MZW5ndGgpOwoKICB0b1N0cmluZygpID0+ICJEZWJ1Z0Fib3J0OiAke21lc3NhZ2UubWVzc2FnZX0iOwp9CgovLy8gVXNlZCB0byByZXBvcnQgYW4gaW50ZXJuYWwgZXJyb3IuCi8vLwovLy8gSW50ZXJuYWwgZXJyb3JzIHNob3VsZCBiZSBhdm9pZGVkIGFzIGJlc3QgYXMgcG9zc2libGUsIGJ1dCBhcmUgcHJlZmVycmVkCi8vLyBvdmVyIGFzc2VydGlvbiBmYWlsdXJlcy4gVGhlIG1lc3NhZ2Ugc2hvdWxkIHN0YXJ0IHdpdGggYW4gdXBwZXItY2FzZSBsZXR0ZXIKLy8vIGFuZCBjb250YWluIGEgc2hvcnQgZGVzY3JpcHRpb24gdGhhdCBtYXkgaGVscCBhIGRldmVsb3BlciBkZWJ1ZyB0aGUgaXNzdWUuCi8vLyBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIGluc3RlYWQgb2YgdXNpbmcgYHRocm93YCwgYXMgdGhpcyBhbGxvd3MgdXMgdG8KLy8vIGVuc3VyZSB0aGF0IHRoZXJlIGFyZSBubyB0aHJvd3MgYW55d2hlcmUgZWxzZSBpbiB0aGUgY29kZWJhc2UuCi8vLwovLy8gQmVmb3JlIHByaW50aW5nIHRoZSBtZXNzYWdlLCB0aGUgc3RyaW5nIGAiSW50ZXJuYWwgZXJyb3I6ICJgIGlzIHByZXBlbmRlZC4KZHluYW1pYyBpbnRlcm5hbFByb2JsZW0oTWVzc2FnZSBtZXNzYWdlLCBpbnQgY2hhck9mZnNldCwgVXJpIHVyaSkgewogIHRocm93IENvbXBpbGVyQ29udGV4dC5jdXJyZW50LmZvcm1hdCgKICAgICAgbWVzc2FnZS53aXRoTG9jYXRpb24odXJpLCBjaGFyT2Zmc2V0LCBub0xlbmd0aCksCiAgICAgIFNldmVyaXR5LmludGVybmFsUHJvYmxlbSk7Cn0KCmR5bmFtaWMgdW5pbXBsZW1lbnRlZChTdHJpbmcgd2hhdCwgaW50IGNoYXJPZmZzZXQsIFVyaSB1cmkpIHsKICByZXR1cm4gaW50ZXJuYWxQcm9ibGVtKAogICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVVuaW1wbGVtZW50ZWQud2l0aEFyZ3VtZW50cyh3aGF0KSwKICAgICAgY2hhck9mZnNldCwKICAgICAgdXJpKTsKfQoKZHluYW1pYyB1bmhhbmRsZWQoU3RyaW5nIHdoYXQsIFN0cmluZyB3aGVyZSwgaW50IGNoYXJPZmZzZXQsIFVyaSB1cmkpIHsKICByZXR1cm4gaW50ZXJuYWxQcm9ibGVtKAogICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVVuaGFuZGxlZC53aXRoQXJndW1lbnRzKHdoYXQsIHdoZXJlKSwKICAgICAgY2hhck9mZnNldCwKICAgICAgdXJpKTsKfQoKZHluYW1pYyB1bmV4cGVjdGVkKFN0cmluZyBleHBlY3RlZCwgU3RyaW5nIGFjdHVhbCwgaW50IGNoYXJPZmZzZXQsIFVyaSB1cmkpIHsKICByZXR1cm4gaW50ZXJuYWxQcm9ibGVtKAogICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVVuZXhwZWN0ZWQud2l0aEFyZ3VtZW50cyhleHBlY3RlZCwgYWN0dWFsKSwKICAgICAgY2hhck9mZnNldCwKICAgICAgdXJpKTsKfQoKZHluYW1pYyB1bnN1cHBvcnRlZChTdHJpbmcgb3BlcmF0aW9uLCBpbnQgY2hhck9mZnNldCwgVXJpIHVyaSkgewogIHJldHVybiBpbnRlcm5hbFByb2JsZW0oCiAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtVW5zdXBwb3J0ZWQud2l0aEFyZ3VtZW50cyhvcGVyYXRpb24pLAogICAgICBjaGFyT2Zmc2V0LAogICAgICB1cmkpOwp9CgpVcmkgZ2V0RmlsZVVyaShUcmVlTm9kZSBub2RlKSB7CiAgZG8gewogICAgaWYgKG5vZGUgaXMgRmlsZVVyaU5vZGUpIHJldHVybiBub2RlLmZpbGVVcmk7CiAgICBub2RlID0gbm9kZS5wYXJlbnQ7CiAgfSB3aGlsZSAobm9kZSBpcyBUcmVlTm9kZSk7CiAgcmV0dXJuIG51bGw7Cn0KVgBOTjwBGAE9ATUBFwkYERIrKyouLAE1ARMgAUs0PjYBMgIBJgRNUE9QQwRPRCg3IQIBPhpAEgwCAUgaQxIMAgFOGkkSDAIBQRpDEgwCASAHMhgeDwIBKXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wcm9ibGVtcy5kYXJ0MHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS90aWNrZXIuZGFydINtLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEudGlja2VyOwoKY2xhc3MgVGlja2VyIHsKICBmaW5hbCBTdG9wd2F0Y2ggc3cgPSBuZXcgU3RvcHdhdGNoKCkuLnN0YXJ0KCk7CgogIGJvb2wgaXNWZXJib3NlOwoKICBEdXJhdGlvbiBwcmV2aW91c1RpY2s7CgogIFRpY2tlcih7dGhpcy5pc1ZlcmJvc2U6IHRydWV9KSB7CiAgICBwcmV2aW91c1RpY2sgPSBzdy5lbGFwc2VkOwogIH0KCiAgdm9pZCBsb2dNcyhPYmplY3QgbWVzc2FnZSkgewogICAgbG9nKChEdXJhdGlvbiBlbGFwc2VkLCBEdXJhdGlvbiBzaW5jZVN0YXJ0KSB7CiAgICAgIHByaW50KCIkc2luY2VTdGFydDogJG1lc3NhZ2UgaW4gJHtlbGFwc2VkLmluTWlsbGlzZWNvbmRzfW1zLiIpOwogICAgfSk7CiAgfQoKICB2b2lkIGxvZyh2b2lkIGYoRHVyYXRpb24gZWxhcHNlZCwgRHVyYXRpb24gc2luY2VTdGFydCkpIHsKICAgIER1cmF0aW9uIGVsYXBzZWQgPSBzdy5lbGFwc2VkOwogICAgdHJ5IHsKICAgICAgaWYgKGlzVmVyYm9zZSkgZihlbGFwc2VkIC0gcHJldmlvdXNUaWNrLCBlbGFwc2VkKTsKICAgIH0gZmluYWxseSB7CiAgICAgIHByZXZpb3VzVGljayA9IHN3LmVsYXBzZWQ7CiAgICB9CiAgfQoKICB2b2lkIHJlc2V0KCkgewogICAgc3cucmVzZXQoKTsKICAgIHByZXZpb3VzVGljayA9IHN3LmVsYXBzZWQ7CiAgfQp9CicATk48ARYBDzEBEgEZASMfBAEfMkYIBAE8Iwo5ECEGBAEREB8EAgEncGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3RpY2tlci5kYXJ0OHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS91cmlfdHJhbnNsYXRvci5kYXJ0j0svLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS51cmlfdHJhbnNsYXRvcjsKCmltcG9ydCAncGFja2FnZTpwYWNrYWdlX2NvbmZpZy9wYWNrYWdlcy5kYXJ0JyBzaG93IFBhY2thZ2VzOwoKaW1wb3J0ICcuLi9iYXNlL2xpYnJhcmllc19zcGVjaWZpY2F0aW9uLmRhcnQnIHNob3cgVGFyZ2V0TGlicmFyaWVzU3BlY2lmaWNhdGlvbjsKaW1wb3J0ICdjb21waWxlcl9jb250ZXh0LmRhcnQnIHNob3cgQ29tcGlsZXJDb250ZXh0OwppbXBvcnQgJ2Zhc3RhX2NvZGVzLmRhcnQnOwppbXBvcnQgJ3NldmVyaXR5LmRhcnQnIHNob3cgU2V2ZXJpdHk7CgpjbGFzcyBVcmlUcmFuc2xhdG9yIHsKICBmaW5hbCBUYXJnZXRMaWJyYXJpZXNTcGVjaWZpY2F0aW9uIGRhcnRMaWJyYXJpZXM7CgogIGZpbmFsIFBhY2thZ2VzIHBhY2thZ2VzOwoKICBVcmlUcmFuc2xhdG9yKHRoaXMuZGFydExpYnJhcmllcywgdGhpcy5wYWNrYWdlcyk7CgogIExpc3Q8VXJpPiBnZXREYXJ0UGF0Y2hlcyhTdHJpbmcgbGlicmFyeU5hbWUpID0+CiAgICAgIGRhcnRMaWJyYXJpZXMubGlicmFyeUluZm9Gb3IobGlicmFyeU5hbWUpPy5wYXRjaGVzOwoKICBib29sIGlzUGxhdGZvcm1JbXBsZW1lbnRhdGlvbihVcmkgdXJpKSB7CiAgICBpZiAodXJpLnNjaGVtZSAhPSAiZGFydCIpIHJldHVybiBmYWxzZTsKICAgIFN0cmluZyBwYXRoID0gdXJpLnBhdGg7CiAgICByZXR1cm4gZGFydExpYnJhcmllcy5saWJyYXJ5SW5mb0ZvcihwYXRoKSA9PSBudWxsIHx8IHBhdGguc3RhcnRzV2l0aCgiXyIpOwogIH0KCiAgLy8gVE9ETyhzaWdtdW5kLCBhaGUpOiBjb25zaWRlciBleHBhbmRpbmcgdGhpcyBBUEkgdG8gaW5jbHVkZSBhbiBlcnJvcgogIC8vIGNhbGxiYWNrLCBzbyB3ZSBjYW4gcHJvdmlkZSBhbiBlcnJvciBsb2NhdGlvbiB3aGVuIG9uZSBpcyBhdmFpbGFibGUuIEZvcgogIC8vIGV4YW1wbGUsIGlmIHRoZSBlcnJvciBvY2N1cnMgaW4gYW4gYGltcG9ydGAuCiAgVXJpIHRyYW5zbGF0ZShVcmkgdXJpLCBbYm9vbCByZXBvcnRNZXNzYWdlID0gdHJ1ZV0pIHsKICAgIGlmICh1cmkuc2NoZW1lID09ICJkYXJ0IikgcmV0dXJuIF90cmFuc2xhdGVEYXJ0VXJpKHVyaSk7CiAgICBpZiAodXJpLnNjaGVtZSA9PSAicGFja2FnZSIpIHsKICAgICAgcmV0dXJuIF90cmFuc2xhdGVQYWNrYWdlVXJpKHVyaSwgcmVwb3J0TWVzc2FnZSk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vLyBGb3IgYSBwYWNrYWdlIHVyaSwgZ2V0IHRoZSBmcmFnbWVudCBvZiB0aGUgdXJpIHNwZWNpZmllZCBmb3IgdGhhdCBwYWNrYWdlLgogIFN0cmluZyBnZXRQYWNrYWdlRnJhZ21lbnQoVXJpIHVyaSkgewogICAgaWYgKHBhY2thZ2VzID09IG51bGwpIHJldHVybiBudWxsOwogICAgaWYgKHVyaS5zY2hlbWUgIT0gInBhY2thZ2UiKSByZXR1cm4gbnVsbDsKICAgIGludCBmaXJzdFNsYXNoID0gdXJpLnBhdGguaW5kZXhPZignLycpOwogICAgaWYgKGZpcnN0U2xhc2ggPT0gLTEpIHJldHVybiBudWxsOwogICAgU3RyaW5nIHBhY2thZ2VOYW1lID0gdXJpLnBhdGguc3Vic3RyaW5nKDAsIGZpcnN0U2xhc2gpOwogICAgVXJpIHBhY2thZ2VCYXNlVXJpID0gcGFja2FnZXMuYXNNYXAoKVtwYWNrYWdlTmFtZV07CiAgICBpZiAocGFja2FnZUJhc2VVcmkgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gcGFja2FnZUJhc2VVcmkuZnJhZ21lbnQ7CiAgfQoKICAvLy8gR2V0IHRoZSBmcmFnbWVudCBmb3IgdGhlIHBhY2thZ2Ugc3BlY2lmaWVkIGFzIHRoZSBkZWZhdWx0IHBhY2thZ2UsIGlmIGFueS4KICBTdHJpbmcgZ2V0RGVmYXVsdFBhY2thZ2VGcmFnbWVudCgpIHsKICAgIFVyaSBlbXB0eVBhY2thZ2VSZWRpcmVjdCA9IHBhY2thZ2VzLmFzTWFwKClbIiJdOwogICAgaWYgKGVtcHR5UGFja2FnZVJlZGlyZWN0ID09IG51bGwpIHJldHVybiBudWxsOwogICAgU3RyaW5nIHBhY2thZ2VOYW1lID0gZW1wdHlQYWNrYWdlUmVkaXJlY3QudG9TdHJpbmcoKTsKICAgIFVyaSBwYWNrYWdlQmFzZVVyaSA9IHBhY2thZ2VzLmFzTWFwKClbcGFja2FnZU5hbWVdOwogICAgaWYgKHBhY2thZ2VCYXNlVXJpID09IG51bGwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIHBhY2thZ2VCYXNlVXJpLmZyYWdtZW50OwogIH0KCiAgYm9vbCBpc0xpYnJhcnlTdXBwb3J0ZWQoU3RyaW5nIGxpYnJhcnlOYW1lKSB7CiAgICAvLyBUT0RPKHNpZ211bmQpOiBjaGFuZ2UgdGhpcyB0byBgPz8gZmFsc2VgIHdoZW4gYWxsIGJhY2tlbmRzIHByb3ZpZGUgdGhlCiAgICAvLyBgbGlicmFyaWVzLmpzb25gIGZpbGUgYnkgZGVmYXVsdCAoSXNzdWUgIzMyNjU3KS4KICAgIHJldHVybiBkYXJ0TGlicmFyaWVzLmxpYnJhcnlJbmZvRm9yKGxpYnJhcnlOYW1lKT8uaXNTdXBwb3J0ZWQgPz8gdHJ1ZTsKICB9CgogIFVyaSBfdHJhbnNsYXRlRGFydFVyaShVcmkgdXJpKSB7CiAgICBpZiAoIXVyaS5pc1NjaGVtZSgnZGFydCcpKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBkYXJ0TGlicmFyaWVzLmxpYnJhcnlJbmZvRm9yKHVyaS5wYXRoKT8udXJpOwogIH0KCiAgVXJpIF90cmFuc2xhdGVQYWNrYWdlVXJpKFVyaSB1cmksIGJvb2wgcmVwb3J0TWVzc2FnZSkgewogICAgdHJ5IHsKICAgICAgLy8gVE9ETyhzaWdtdW5kKTogb25jZSB3ZSByZW1vdmUgdGhlIGBwYXJzZWAgQVBJLCB3ZSBjYW4gZW5zdXJlIHRoYXQKICAgICAgLy8gcGFja2FnZXMgd2lsbCBuZXZlciBiZSBudWxsIGFuZCBnZXQgcmlkIG9mIGA/YCBiZWxvdy4KICAgICAgcmV0dXJuIHBhY2thZ2VzPy5yZXNvbHZlKHVyaSwKICAgICAgICAgIG5vdEZvdW5kOiByZXBvcnRNZXNzYWdlCiAgICAgICAgICAgICAgPyBfcGFja2FnZVVyaU5vdEZvdW5kCiAgICAgICAgICAgICAgOiBfcGFja2FnZVVyaU5vdEZvdW5kTm9SZXBvcnQpOwogICAgfSBvbiBBcmd1bWVudEVycm9yIGNhdGNoIChlKSB7CiAgICAgIC8vIFRPRE8oc2lnbXVuZCk6IGNhdGNoIGEgbW9yZSBwcmVjaXNlIGVycm9yIHdoZW4KICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9wYWNrYWdlX2NvbmZpZy9pc3N1ZXMvNDAgaXMgZml4ZWQuCiAgICAgIGlmIChyZXBvcnRNZXNzYWdlKSB7CiAgICAgICAgQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQucmVwb3J0V2l0aG91dExvY2F0aW9uKAogICAgICAgICAgICB0ZW1wbGF0ZUludmFsaWRQYWNrYWdlVXJpLndpdGhBcmd1bWVudHModXJpLCAnJGUnKSwgU2V2ZXJpdHkuZXJyb3IpOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgc3RhdGljIFVyaSBfcGFja2FnZVVyaU5vdEZvdW5kKFVyaSB1cmkpIHsKICAgIFN0cmluZyBuYW1lID0gdXJpLnBhdGhTZWdtZW50cy5maXJzdDsKICAgIENvbXBpbGVyQ29udGV4dC5jdXJyZW50LnJlcG9ydFdpdGhvdXRMb2NhdGlvbigKICAgICAgICB0ZW1wbGF0ZVBhY2thZ2VOb3RGb3VuZC53aXRoQXJndW1lbnRzKG5hbWUsIHVyaSksIFNldmVyaXR5LmVycm9yKTsKICAgIC8vIFRPRE8oc2lnbXVuZCwgYWhlKTogZW5zdXJlIHdlIG9ubHkgcmVwb3J0IGFuIGVycm9yIG9uY2UsCiAgICAvLyB0aGlzIG51bGwgcmVzdWx0IHdpbGwgbGlrZWx5IGNhdXNlIGFub3RoZXIgZXJyb3IgZnVydGhlciBkb3duIGluIHRoZQogICAgLy8gY29tcGlsZXIuCiAgICByZXR1cm4gbnVsbDsKICB9CgogIHN0YXRpYyBVcmkgX3BhY2thZ2VVcmlOb3RGb3VuZE5vUmVwb3J0KFVyaSB1cmkpIHsKICAgIHJldHVybiBudWxsOwogIH0KfQpsAE5OPAEeAT0BUTUbJgEWNAEbATQBMjoBKywcTwQBSU4yOD0jNwYRBAFRJycuLCc8OC0kBAFRJzUzOjgtJAQBME44SwQBIyw4BAE6Cks/JCIkLiM4SRs3UQgTBgQBLCozS0BMEREEATQRBAIBL3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS91cmlfdHJhbnNsYXRvci5kYXJ0O3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9yZXNvbHZlX2lucHV0X3VyaS5kYXJ0hHUvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIERldGVjdCBpZiB3ZSdyZSBvbiBXaW5kb3dzIHdpdGhvdXQgaW1wb3J0aW5nIGBkYXJ0OmlvYC4KYm9vbCBpc1dpbmRvd3MgPSBuZXcgVXJpLmRpcmVjdG9yeSgiQzpcXCIpLnBhdGggPT0KICAgIG5ldyBVcmkuZGlyZWN0b3J5KCJDOlxcIiwgd2luZG93czogdHJ1ZSkucGF0aDsKClVyaSByZXNvbHZlSW5wdXRVcmkoU3RyaW5nIHBhdGgpIHsKICBVcmkgdXJpOwogIGlmIChwYXRoLmluZGV4T2YoIjoiKSA9PSAtMSkgewogICAgdXJpID0gbmV3IFVyaS5maWxlKHBhdGgsIHdpbmRvd3M6IGlzV2luZG93cyk7CiAgfSBlbHNlIGlmICghaXNXaW5kb3dzKSB7CiAgICB1cmkgPSBwYXJzZVVyaShwYXRoKTsKICB9IGVsc2UgewogICAgdXJpID0gcmVzb2x2ZUFtYmlndW91c1dpbmRvd3NQYXRoKHBhdGgpOwogIH0KICByZXR1cm4gVXJpLmJhc2UucmVzb2x2ZVVyaSh1cmkpOwp9CgpVcmkgcGFyc2VVcmkoU3RyaW5nIHBhdGgpIHsKICBpZiAocGF0aC5zdGFydHNXaXRoKCJmaWxlOiIpKSB7CiAgICBpZiAoVXJpLmJhc2Uuc2NoZW1lID09ICJmaWxlIikgewogICAgICAvLyBUaGUgVXJpIGNsYXNzIGRvZXNuJ3QgaGFuZGxlIHJlbGF0aXZlIGZpbGUgVVJJcyBjb3JyZWN0bHksIHRoZQogICAgICAvLyBmb2xsb3dpbmcgd29ya3MgYXJvdW5kIHRoYXQgaXNzdWUuCiAgICAgIHJldHVybiBuZXcgVXJpKHBhdGg6IFVyaS5wYXJzZSgieC0kcGF0aCIpLnBhdGgpOwogICAgfQogIH0KICByZXR1cm4gVXJpLnBhcnNlKHBhdGgpOwp9CgpVcmkgcmVzb2x2ZUFtYmlndW91c1dpbmRvd3NQYXRoKFN0cmluZyBwYXRoKSB7CiAgdHJ5IHsKICAgIHJldHVybiBuZXcgVXJpLmZpbGUocGF0aCwgd2luZG93czogaXNXaW5kb3dzKTsKICB9IG9uIEFyZ3VtZW50RXJyb3IgY2F0Y2ggKF8pIHsKICAgIHJldHVybiBwYXJzZVVyaShwYXRoKTsKICB9Cn0KKABOTjwBPDMzASMLITIbGgstBCMCARwiJUgsNwYEGgIBLwgzIRsEAgEycGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3Jlc29sdmVfaW5wdXRfdXJpLmRhcnQ3c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3NjYW5uZXIvdG9rZW4uZGFydKwzLy8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuc2Nhbm5lci50b2tlbjsKCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JyBhcyBhbmFseXplcjsKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW4sIFRva2VuVHlwZTsKCmltcG9ydCAndG9rZW5fY29uc3RhbnRzLmRhcnQnIHNob3cgSURFTlRJRklFUl9UT0tFTjsKCmltcG9ydCAnc3RyaW5nX2Nhbm9uaWNhbGl6ZXIuZGFydCc7CgovKioKICogQSBTdHJpbmctdmFsdWVkIHRva2VuLiBSZXByZXNlbnRzIGlkZW50aWZpZXJzLCBzdHJpbmcgbGl0ZXJhbHMsCiAqIG51bWJlciBsaXRlcmFscywgY29tbWVudHMsIGFuZCBlcnJvciB0b2tlbnMsIHVzaW5nIHRoZSBjb3JyZXNwb25kaW5nCiAqIHByZWNlZGVuY2UgaW5mby4KICovCmNsYXNzIFN0cmluZ1Rva2VuIGV4dGVuZHMgYW5hbHl6ZXIuU2ltcGxlVG9rZW4gaW1wbGVtZW50cyBhbmFseXplci5TdHJpbmdUb2tlbiB7CiAgLyoqCiAgICogVGhlIGxlbmd0aCB0aHJlc2hvbGQgYWJvdmUgd2hpY2ggc3Vic3RyaW5nIHRva2VucyBhcmUgY29tcHV0ZWQgbGF6aWx5LgogICAqCiAgICogRm9yIHN0cmluZyB0b2tlbnMgdGhhdCBhcmUgc3Vic3RyaW5ncyBvZiB0aGUgcHJvZ3JhbSBzb3VyY2UsIHRoZSBhY3R1YWwKICAgKiBzdWJzdHJpbmcgZXh0cmFjdGlvbiBpcyBwZXJmb3JtZWQgbGF6aWx5LiBUaGlzIGlzIGJlbmVmaWNpYWwgYmVjYXVzZQogICAqIG5vdCBhbGwgc2Nhbm5lZCBjb2RlIGFyZSBhY3R1YWxseSB1c2VkLiBGb3IgdW51c2VkIHBhcnRzLCB0aGUgc3Vic3RyaW5ncwogICAqIGFyZSBuZXZlciBjb21wdXRlZCBhbmQgYWxsb2NhdGVkLgogICAqLwogIHN0YXRpYyBjb25zdCBpbnQgTEFaWV9USFJFU0hPTEQgPSA0OwoKICBkeW5hbWljIC8qIFN0cmluZyB8IExhenlTdWJzdHJpbmcgKi8gdmFsdWVPckxhenlTdWJzdHJpbmc7CgogIC8qKgogICAqIENyZWF0ZXMgYSBub24tbGF6eSBzdHJpbmcgdG9rZW4uIElmIFtjYW5vbmljYWxpemVdIGlzIHRydWUsIHRoZSBzdHJpbmcKICAgKiBpcyBjYW5vbmljYWxpemVkIGJlZm9yZSB0aGUgdG9rZW4gaXMgY3JlYXRlZC4KICAgKi8KICBTdHJpbmdUb2tlbi5mcm9tU3RyaW5nKFRva2VuVHlwZSB0eXBlLCBTdHJpbmcgdmFsdWUsIGludCBjaGFyT2Zmc2V0LAogICAgICB7Ym9vbCBjYW5vbmljYWxpemU6IGZhbHNlLCBhbmFseXplci5Db21tZW50VG9rZW4gcHJlY2VkaW5nQ29tbWVudHN9KQogICAgICA6IHZhbHVlT3JMYXp5U3Vic3RyaW5nID0KICAgICAgICAgICAgY2Fub25pY2FsaXplZFN0cmluZyh2YWx1ZSwgMCwgdmFsdWUubGVuZ3RoLCBjYW5vbmljYWxpemUpLAogICAgICAgIHN1cGVyKHR5cGUsIGNoYXJPZmZzZXQsIHByZWNlZGluZ0NvbW1lbnRzKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIGxhenkgc3RyaW5nIHRva2VuLiBJZiBbY2Fub25pY2FsaXplXSBpcyB0cnVlLCB0aGUgc3RyaW5nCiAgICogaXMgY2Fub25pY2FsaXplZCBiZWZvcmUgdGhlIHRva2VuIGlzIGNyZWF0ZWQuCiAgICovCiAgU3RyaW5nVG9rZW4uZnJvbVN1YnN0cmluZygKICAgICAgVG9rZW5UeXBlIHR5cGUsIFN0cmluZyBkYXRhLCBpbnQgc3RhcnQsIGludCBlbmQsIGludCBjaGFyT2Zmc2V0LAogICAgICB7Ym9vbCBjYW5vbmljYWxpemU6IGZhbHNlLCBhbmFseXplci5Db21tZW50VG9rZW4gcHJlY2VkaW5nQ29tbWVudHN9KQogICAgICA6IHN1cGVyKHR5cGUsIGNoYXJPZmZzZXQsIHByZWNlZGluZ0NvbW1lbnRzKSB7CiAgICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICBpZiAobGVuZ3RoIDw9IExBWllfVEhSRVNIT0xEKSB7CiAgICAgIHZhbHVlT3JMYXp5U3Vic3RyaW5nID0KICAgICAgICAgIGNhbm9uaWNhbGl6ZWRTdHJpbmcoZGF0YSwgc3RhcnQsIGVuZCwgY2Fub25pY2FsaXplKTsKICAgIH0gZWxzZSB7CiAgICAgIHZhbHVlT3JMYXp5U3Vic3RyaW5nID0KICAgICAgICAgIG5ldyBfTGF6eVN1YnN0cmluZyhkYXRhLCBzdGFydCwgbGVuZ3RoLCBjYW5vbmljYWxpemUpOwogICAgfQogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIGxhenkgc3RyaW5nIHRva2VuLiBJZiBbYXNjaWlPbmx5XSBpcyBmYWxzZSwgdGhlIGJ5dGUgYXJyYXkKICAgKiBpcyBwYXNzZWQgdGhyb3VnaCBhIFVURi04IGRlY29kZXIuCiAgICovCiAgU3RyaW5nVG9rZW4uZnJvbVV0ZjhCeXRlcyhUb2tlblR5cGUgdHlwZSwgTGlzdDxpbnQ+IGRhdGEsIGludCBzdGFydCwgaW50IGVuZCwKICAgICAgYm9vbCBhc2NpaU9ubHksIGludCBjaGFyT2Zmc2V0LAogICAgICB7YW5hbHl6ZXIuQ29tbWVudFRva2VuIHByZWNlZGluZ0NvbW1lbnRzfSkKICAgICAgOiBzdXBlcih0eXBlLCBjaGFyT2Zmc2V0LCBwcmVjZWRpbmdDb21tZW50cykgewogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgaWYgKGxlbmd0aCA8PSBMQVpZX1RIUkVTSE9MRCkgewogICAgICB2YWx1ZU9yTGF6eVN1YnN0cmluZyA9IGRlY29kZVV0ZjgoZGF0YSwgc3RhcnQsIGVuZCwgYXNjaWlPbmx5KTsKICAgIH0gZWxzZSB7CiAgICAgIHZhbHVlT3JMYXp5U3Vic3RyaW5nID0gbmV3IF9MYXp5U3Vic3RyaW5nKGRhdGEsIHN0YXJ0LCBsZW5ndGgsIGFzY2lpT25seSk7CiAgICB9CiAgfQoKICBTdHJpbmdUb2tlbi5fKFRva2VuVHlwZSB0eXBlLCB0aGlzLnZhbHVlT3JMYXp5U3Vic3RyaW5nLCBpbnQgY2hhck9mZnNldCwKICAgICAgW2FuYWx5emVyLkNvbW1lbnRUb2tlbiBwcmVjZWRpbmdDb21tZW50c10pCiAgICAgIDogc3VwZXIodHlwZSwgY2hhck9mZnNldCwgcHJlY2VkaW5nQ29tbWVudHMpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGxleGVtZSB7CiAgICBpZiAodmFsdWVPckxhenlTdWJzdHJpbmcgaXMgU3RyaW5nKSB7CiAgICAgIHJldHVybiB2YWx1ZU9yTGF6eVN1YnN0cmluZzsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydCh2YWx1ZU9yTGF6eVN1YnN0cmluZyBpcyBfTGF6eVN1YnN0cmluZyk7CiAgICAgIGR5bmFtaWMgZGF0YSA9IHZhbHVlT3JMYXp5U3Vic3RyaW5nLmRhdGE7CiAgICAgIGludCBzdGFydCA9IHZhbHVlT3JMYXp5U3Vic3RyaW5nLnN0YXJ0OwogICAgICBpbnQgZW5kID0gc3RhcnQgKyB2YWx1ZU9yTGF6eVN1YnN0cmluZy5sZW5ndGg7CiAgICAgIGlmIChkYXRhIGlzIFN0cmluZykgewogICAgICAgIHZhbHVlT3JMYXp5U3Vic3RyaW5nID0gY2Fub25pY2FsaXplZFN0cmluZygKICAgICAgICAgICAgZGF0YSwgc3RhcnQsIGVuZCwgdmFsdWVPckxhenlTdWJzdHJpbmcuYm9vbFZhbHVlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YWx1ZU9yTGF6eVN1YnN0cmluZyA9CiAgICAgICAgICAgIGRlY29kZVV0ZjgoZGF0YSwgc3RhcnQsIGVuZCwgdmFsdWVPckxhenlTdWJzdHJpbmcuYm9vbFZhbHVlKTsKICAgICAgfQogICAgICByZXR1cm4gdmFsdWVPckxhenlTdWJzdHJpbmc7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0lkZW50aWZpZXIgPT4gaWRlbnRpY2FsKGtpbmQsIElERU5USUZJRVJfVE9LRU4pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBsZXhlbWU7CgogIHN0YXRpYyBmaW5hbCBTdHJpbmdDYW5vbmljYWxpemVyIGNhbm9uaWNhbGl6ZXIgPSBuZXcgU3RyaW5nQ2Fub25pY2FsaXplcigpOwoKICBzdGF0aWMgU3RyaW5nIGNhbm9uaWNhbGl6ZWRTdHJpbmcoCiAgICAgIFN0cmluZyBzLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgY2Fub25pY2FsaXplKSB7CiAgICBpZiAoIWNhbm9uaWNhbGl6ZSkgcmV0dXJuIHM7CiAgICByZXR1cm4gY2Fub25pY2FsaXplci5jYW5vbmljYWxpemUocywgc3RhcnQsIGVuZCwgZmFsc2UpOwogIH0KCiAgc3RhdGljIFN0cmluZyBkZWNvZGVVdGY4KExpc3Q8aW50PiBkYXRhLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgYXNjaWlPbmx5KSB7CiAgICByZXR1cm4gY2Fub25pY2FsaXplci5jYW5vbmljYWxpemUoZGF0YSwgc3RhcnQsIGVuZCwgYXNjaWlPbmx5KTsKICB9CgogIEBvdmVycmlkZQogIFRva2VuIGNvcHkoKSA9PiBuZXcgU3RyaW5nVG9rZW4uXygKICAgICAgdHlwZSwgdmFsdWVPckxhenlTdWJzdHJpbmcsIGNoYXJPZmZzZXQsIGNvcHlDb21tZW50cyhwcmVjZWRpbmdDb21tZW50cykpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmFsdWUoKSA9PiBsZXhlbWU7Cn0KCi8qKgogKiBBIFN0cmluZy12YWx1ZWQgdG9rZW4gdGhhdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgb3JpZ2luYWwgc291cmNlLgogKi8KY2xhc3MgU3ludGhldGljU3RyaW5nVG9rZW4gZXh0ZW5kcyBTdHJpbmdUb2tlbgogICAgaW1wbGVtZW50cyBhbmFseXplci5TeW50aGV0aWNTdHJpbmdUb2tlbiB7CiAgU3ludGhldGljU3RyaW5nVG9rZW4oVG9rZW5UeXBlIHR5cGUsIFN0cmluZyB2YWx1ZSwgaW50IG9mZnNldCwKICAgICAgW2FuYWx5emVyLkNvbW1lbnRUb2tlbiBwcmVjZWRpbmdDb21tZW50c10pCiAgICAgIDogc3VwZXIuXyh0eXBlLCB2YWx1ZSwgb2Zmc2V0LCBwcmVjZWRpbmdDb21tZW50cyk7CgogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoID0+IDA7CgogIEBvdmVycmlkZQogIFRva2VuIGNvcHkoKSA9PiBuZXcgU3ludGhldGljU3RyaW5nVG9rZW4oCiAgICAgIHR5cGUsIHZhbHVlT3JMYXp5U3Vic3RyaW5nLCBvZmZzZXQsIGNvcHlDb21tZW50cyhwcmVjZWRpbmdDb21tZW50cykpOwp9CgpjbGFzcyBDb21tZW50VG9rZW4gZXh0ZW5kcyBTdHJpbmdUb2tlbiBpbXBsZW1lbnRzIGFuYWx5emVyLkNvbW1lbnRUb2tlbiB7CiAgQG92ZXJyaWRlCiAgYW5hbHl6ZXIuU2ltcGxlVG9rZW4gcGFyZW50OwoKICAvKioKICAgKiBDcmVhdGVzIGEgbGF6eSBjb21tZW50IHRva2VuLiBJZiBbY2Fub25pY2FsaXplXSBpcyB0cnVlLCB0aGUgc3RyaW5nCiAgICogaXMgY2Fub25pY2FsaXplZCBiZWZvcmUgdGhlIHRva2VuIGlzIGNyZWF0ZWQuCiAgICovCiAgQ29tbWVudFRva2VuLmZyb21TdWJzdHJpbmcoCiAgICAgIFRva2VuVHlwZSB0eXBlLCBTdHJpbmcgZGF0YSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgY2hhck9mZnNldCwKICAgICAge2Jvb2wgY2Fub25pY2FsaXplOiBmYWxzZX0pCiAgICAgIDogc3VwZXIuZnJvbVN1YnN0cmluZyh0eXBlLCBkYXRhLCBzdGFydCwgZW5kLCBjaGFyT2Zmc2V0LAogICAgICAgICAgICBjYW5vbmljYWxpemU6IGNhbm9uaWNhbGl6ZSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBub24tbGF6eSBjb21tZW50IHRva2VuLgogICAqLwogIENvbW1lbnRUb2tlbi5mcm9tU3RyaW5nKFRva2VuVHlwZSB0eXBlLCBTdHJpbmcgbGV4ZW1lLCBpbnQgY2hhck9mZnNldCkKICAgICAgOiBzdXBlci5mcm9tU3RyaW5nKHR5cGUsIGxleGVtZSwgY2hhck9mZnNldCk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBsYXp5IHN0cmluZyB0b2tlbi4gSWYgW2FzY2lpT25seV0gaXMgZmFsc2UsIHRoZSBieXRlIGFycmF5CiAgICogaXMgcGFzc2VkIHRocm91Z2ggYSBVVEYtOCBkZWNvZGVyLgogICAqLwogIENvbW1lbnRUb2tlbi5mcm9tVXRmOEJ5dGVzKFRva2VuVHlwZSB0eXBlLCBMaXN0PGludD4gZGF0YSwgaW50IHN0YXJ0LCBpbnQgZW5kLAogICAgICBib29sIGFzY2lpT25seSwgaW50IGNoYXJPZmZzZXQpCiAgICAgIDogc3VwZXIuZnJvbVV0ZjhCeXRlcyh0eXBlLCBkYXRhLCBzdGFydCwgZW5kLCBhc2NpaU9ubHksIGNoYXJPZmZzZXQpOwoKICBDb21tZW50VG9rZW4uXyhUb2tlblR5cGUgdHlwZSwgdmFsdWVPckxhenlTdWJzdHJpbmcsIGludCBjaGFyT2Zmc2V0KQogICAgICA6IHN1cGVyLl8odHlwZSwgdmFsdWVPckxhenlTdWJzdHJpbmcsIGNoYXJPZmZzZXQpOwoKICBAb3ZlcnJpZGUKICBDb21tZW50VG9rZW4gY29weSgpID0+CiAgICAgIG5ldyBDb21tZW50VG9rZW4uXyh0eXBlLCB2YWx1ZU9yTGF6eVN1YnN0cmluZywgY2hhck9mZnNldCk7CgogIEBvdmVycmlkZQogIHZvaWQgcmVtb3ZlKCkgewogICAgaWYgKHByZXZpb3VzICE9IG51bGwpIHsKICAgICAgcHJldmlvdXMuc2V0TmV4dFdpdGhvdXRTZXR0aW5nUHJldmlvdXMobmV4dCk7CiAgICAgIG5leHQ/LnByZXZpb3VzID0gcHJldmlvdXM7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQocGFyZW50LnByZWNlZGluZ0NvbW1lbnRzID09IHRoaXMpOwogICAgICBwYXJlbnQucHJlY2VkaW5nQ29tbWVudHMgPSBuZXh0IGFzIENvbW1lbnRUb2tlbjsKICAgIH0KICB9Cn0KCi8qKgogKiBBIHNwZWNpYWxpemVkIGNvbW1lbnQgdG9rZW4gcmVwcmVzZW50aW5nIGEgbGFuZ3VhZ2UgdmVyc2lvbgogKiAoZS5nLiAnLy8gQGRhcnQgPSAyLjEnKS4KICovCmNsYXNzIExhbmd1YWdlVmVyc2lvblRva2VuIGV4dGVuZHMgQ29tbWVudFRva2VuIHsKICAvKioKICAgKiBUaGUgbWFqb3IgbGFuZ3VhZ2UgdmVyc2lvbi4KICAgKi8KICBpbnQgbWFqb3I7CgogIC8qKgogICAqIFRoZSBtaW5vciBsYW5ndWFnZSB2ZXJzaW9uLgogICAqLwogIGludCBtaW5vcjsKCiAgTGFuZ3VhZ2VWZXJzaW9uVG9rZW4uZnJvbShTdHJpbmcgdGV4dCwgaW50IG9mZnNldCwgdGhpcy5tYWpvciwgdGhpcy5taW5vcikKICAgICAgOiBzdXBlci5mcm9tU3RyaW5nKFRva2VuVHlwZS5TSU5HTEVfTElORV9DT01NRU5ULCB0ZXh0LCBvZmZzZXQpOwoKICBMYW5ndWFnZVZlcnNpb25Ub2tlbi5mcm9tU3Vic3RyaW5nKAogICAgICBTdHJpbmcgc3RyaW5nLCBpbnQgc3RhcnQsIGludCBlbmQsIGludCB0b2tlblN0YXJ0LCB0aGlzLm1ham9yLCB0aGlzLm1pbm9yLAogICAgICB7Ym9vbCBjYW5vbmljYWxpemV9KQogICAgICA6IHN1cGVyLmZyb21TdWJzdHJpbmcoCiAgICAgICAgICAgIFRva2VuVHlwZS5TSU5HTEVfTElORV9DT01NRU5ULCBzdHJpbmcsIHN0YXJ0LCBlbmQsIHRva2VuU3RhcnQsCiAgICAgICAgICAgIGNhbm9uaWNhbGl6ZTogY2Fub25pY2FsaXplKTsKCiAgTGFuZ3VhZ2VWZXJzaW9uVG9rZW4uZnJvbVV0ZjhCeXRlcyhMaXN0PGludD4gYnl0ZXMsIGludCBzdGFydCwgaW50IGVuZCwKICAgICAgaW50IHRva2VuU3RhcnQsIHRoaXMubWFqb3IsIHRoaXMubWlub3IpCiAgICAgIDogc3VwZXIuZnJvbVV0ZjhCeXRlcygKICAgICAgICAgICAgVG9rZW5UeXBlLlNJTkdMRV9MSU5FX0NPTU1FTlQsIGJ5dGVzLCBzdGFydCwgZW5kLCB0cnVlLCB0b2tlblN0YXJ0KTsKCiAgQG92ZXJyaWRlCiAgTGFuZ3VhZ2VWZXJzaW9uVG9rZW4gY29weSgpID0+CiAgICAgIG5ldyBMYW5ndWFnZVZlcnNpb25Ub2tlbi5mcm9tKGxleGVtZSwgb2Zmc2V0LCBtYWpvciwgbWlub3IpOwp9CgpjbGFzcyBEYXJ0RG9jVG9rZW4gZXh0ZW5kcyBDb21tZW50VG9rZW4KICAgIGltcGxlbWVudHMgYW5hbHl6ZXIuRG9jdW1lbnRhdGlvbkNvbW1lbnRUb2tlbiB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIGxhenkgY29tbWVudCB0b2tlbi4gSWYgW2Nhbm9uaWNhbGl6ZV0gaXMgdHJ1ZSwgdGhlIHN0cmluZwogICAqIGlzIGNhbm9uaWNhbGl6ZWQgYmVmb3JlIHRoZSB0b2tlbiBpcyBjcmVhdGVkLgogICAqLwogIERhcnREb2NUb2tlbi5mcm9tU3Vic3RyaW5nKAogICAgICBUb2tlblR5cGUgdHlwZSwgU3RyaW5nIGRhdGEsIGludCBzdGFydCwgaW50IGVuZCwgaW50IGNoYXJPZmZzZXQsCiAgICAgIHtib29sIGNhbm9uaWNhbGl6ZTogZmFsc2V9KQogICAgICA6IHN1cGVyLmZyb21TdWJzdHJpbmcodHlwZSwgZGF0YSwgc3RhcnQsIGVuZCwgY2hhck9mZnNldCwKICAgICAgICAgICAgY2Fub25pY2FsaXplOiBjYW5vbmljYWxpemUpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbGF6eSBzdHJpbmcgdG9rZW4uIElmIFthc2NpaU9ubHldIGlzIGZhbHNlLCB0aGUgYnl0ZSBhcnJheQogICAqIGlzIHBhc3NlZCB0aHJvdWdoIGEgVVRGLTggZGVjb2Rlci4KICAgKi8KICBEYXJ0RG9jVG9rZW4uZnJvbVV0ZjhCeXRlcyhUb2tlblR5cGUgdHlwZSwgTGlzdDxpbnQ+IGRhdGEsIGludCBzdGFydCwgaW50IGVuZCwKICAgICAgYm9vbCBhc2NpaU9ubHksIGludCBjaGFyT2Zmc2V0KQogICAgICA6IHN1cGVyLmZyb21VdGY4Qnl0ZXModHlwZSwgZGF0YSwgc3RhcnQsIGVuZCwgYXNjaWlPbmx5LCBjaGFyT2Zmc2V0KTsKCiAgRGFydERvY1Rva2VuLl8oVG9rZW5UeXBlIHR5cGUsIHZhbHVlT3JMYXp5U3Vic3RyaW5nLCBpbnQgY2hhck9mZnNldCkKICAgICAgOiBzdXBlci5fKHR5cGUsIHZhbHVlT3JMYXp5U3Vic3RyaW5nLCBjaGFyT2Zmc2V0KTsKCiAgQG92ZXJyaWRlCiAgRGFydERvY1Rva2VuIGNvcHkoKSA9PgogICAgICBuZXcgRGFydERvY1Rva2VuLl8odHlwZSwgdmFsdWVPckxhenlTdWJzdHJpbmcsIGNoYXJPZmZzZXQpOwp9CgovKioKICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gY29tcHV0ZSBhIHN1YnN0cmluZwogKiBsYXppbHkuIFRoZSBzdWJzdHJpbmcgY2FuIGVpdGhlciBvcmlnaW5hdGUgZnJvbSBhIHN0cmluZyBvciBmcm9tCiAqIGEgWzpMaXN0PGludD46XSBvZiBVVEYtOCBieXRlcy4KICovCmFic3RyYWN0IGNsYXNzIF9MYXp5U3Vic3RyaW5nIHsKICAvKiogVGhlIG9yaWdpbmFsIGRhdGEsIGVpdGhlciBhIHN0cmluZyBvciBhIExpc3Q8aW50PiAqLwogIGdldCBkYXRhOwoKICBpbnQgZ2V0IHN0YXJ0OwogIGludCBnZXQgbGVuZ3RoOwoKICAvKioKICAgKiBJZiB0aGlzIHN1YnN0cmluZyBpcyBiYXNlZCBvbiBhIFN0cmluZywgdGhlIFtib29sVmFsdWVdIGluZGljYXRlcyB3aGV0aGVyCiAgICogdGhlIHJlc3VsdGluZyBzdWJzdHJpbmcgc2hvdWxkIGJlIGNhbm9uaWNhbGl6ZWQuCiAgICoKICAgKiBGb3Igc3Vic3RyaW5ncyBiYXNlZCBvbiBhIGJ5dGUgYXJyYXksIHRoZSBbYm9vbFZhbHVlXSBpcyB0cnVlIGlmIHRoZQogICAqIGFycmF5IG9ubHkgaG9sZHMgQVNDSUkgY2hhcmFjdGVycy4gVGhlIHJlc3VsdGluZyBzdWJzdHJpbmcgd2lsbCBiZQogICAqIGNhbm9uaWNhbGl6ZWQgYWZ0ZXIgZGVjb2RpbmcuCiAgICovCiAgYm9vbCBnZXQgYm9vbFZhbHVlOwoKICBfTGF6eVN1YnN0cmluZy5pbnRlcm5hbCgpOwoKICBmYWN0b3J5IF9MYXp5U3Vic3RyaW5nKGRhdGEsIGludCBzdGFydCwgaW50IGxlbmd0aCwgYm9vbCBiKSB7CiAgICAvLyBTZWUgY29tbWVudCBvbiBbQ29tcGFjdExhenlTdWJzdHJpbmddLgogICAgaWYgKHN0YXJ0IDwgMHgxMDAwMDAgJiYgbGVuZ3RoIDwgMHgyMDApIHsKICAgICAgaW50IGZpZWxkcyA9IChzdGFydCA8PCA5KTsKICAgICAgZmllbGRzID0gZmllbGRzIHwgbGVuZ3RoOwogICAgICBmaWVsZHMgPSBmaWVsZHMgPDwgMTsKICAgICAgaWYgKGIpIGZpZWxkcyB8PSAxOwogICAgICByZXR1cm4gbmV3IF9Db21wYWN0TGF6eVN1YnN0cmluZyhkYXRhLCBmaWVsZHMpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBfRnVsbExhenlTdWJzdHJpbmcoZGF0YSwgc3RhcnQsIGxlbmd0aCwgYik7CiAgICB9CiAgfQp9CgovKioKICogVGhpcyBjbGFzcyBlbmNvZGVzIFtzdGFydF0sIFtsZW5ndGhdIGFuZCBbYm9vbFZhbHVlXSBpbiBhIHNpbmdsZQogKiAzMCBiaXQgaW50ZWdlci4gSXQgdXNlcyAyMCBiaXRzIGZvciBbc3RhcnRdLCB3aGljaCBjb3ZlcnMgc291cmNlIGZpbGVzCiAqIG9mIDFNQi4gW2xlbmd0aF0gaGFzIDkgYml0cywgd2hpY2ggY292ZXJzIDUxMiBjaGFyYWN0ZXJzLgogKgogKiBUaGUgZmlsZSBodG1sX2RhcnQyanMuZGFydCBpcyBjdXJyZW50bHkgYXJvdW5kIDFNQi4KICovCmNsYXNzIF9Db21wYWN0TGF6eVN1YnN0cmluZyBleHRlbmRzIF9MYXp5U3Vic3RyaW5nIHsKICBmaW5hbCBkeW5hbWljIGRhdGE7CiAgZmluYWwgaW50IGZpZWxkczsKCiAgX0NvbXBhY3RMYXp5U3Vic3RyaW5nKHRoaXMuZGF0YSwgdGhpcy5maWVsZHMpIDogc3VwZXIuaW50ZXJuYWwoKTsKCiAgaW50IGdldCBzdGFydCA9PiBmaWVsZHMgPj4gMTA7CiAgaW50IGdldCBsZW5ndGggPT4gKGZpZWxkcyA+PiAxKSAmIDB4MWZmOwogIGJvb2wgZ2V0IGJvb2xWYWx1ZSA9PiAoZmllbGRzICYgMSkgPT0gMTsKfQoKY2xhc3MgX0Z1bGxMYXp5U3Vic3RyaW5nIGV4dGVuZHMgX0xhenlTdWJzdHJpbmcgewogIGZpbmFsIGR5bmFtaWMgZGF0YTsKICBmaW5hbCBpbnQgc3RhcnQ7CiAgZmluYWwgaW50IGxlbmd0aDsKICBmaW5hbCBib29sIGJvb2xWYWx1ZTsKICBfRnVsbExhenlTdWJzdHJpbmcodGhpcy5kYXRhLCB0aGlzLnN0YXJ0LCB0aGlzLmxlbmd0aCwgdGhpcy5ib29sVmFsdWUpCiAgICAgIDogc3VwZXIuaW50ZXJuYWwoKTsKfQoKYm9vbCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcihTdHJpbmcgdmFsdWUpIHsKICByZXR1cm4gaXNCaW5hcnlPcGVyYXRvcih2YWx1ZSkgfHwKICAgICAgaXNNaW51c09wZXJhdG9yKHZhbHVlKSB8fAogICAgICBpc1Rlcm5hcnlPcGVyYXRvcih2YWx1ZSkgfHwKICAgICAgaXNVbmFyeU9wZXJhdG9yKHZhbHVlKTsKfQoKYm9vbCBpc1VuYXJ5T3BlcmF0b3IoU3RyaW5nIHZhbHVlKSA9PiBpZGVudGljYWwodmFsdWUsICJ+Iik7Cgpib29sIGlzQmluYXJ5T3BlcmF0b3IoU3RyaW5nIHZhbHVlKSB7CiAgcmV0dXJuIGlkZW50aWNhbCh2YWx1ZSwgIj09IikgfHwKICAgICAgaWRlbnRpY2FsKHZhbHVlLCAiW10iKSB8fAogICAgICBpZGVudGljYWwodmFsdWUsICIqIikgfHwKICAgICAgaWRlbnRpY2FsKHZhbHVlLCAiLyIpIHx8CiAgICAgIGlkZW50aWNhbCh2YWx1ZSwgIiUiKSB8fAogICAgICBpZGVudGljYWwodmFsdWUsICJ+LyIpIHx8CiAgICAgIGlkZW50aWNhbCh2YWx1ZSwgIisiKSB8fAogICAgICBpZGVudGljYWwodmFsdWUsICI8PCIpIHx8CiAgICAgIGlkZW50aWNhbCh2YWx1ZSwgIj4+IikgfHwKICAgICAgaWRlbnRpY2FsKHZhbHVlLCAiPj4+IikgfHwKICAgICAgaWRlbnRpY2FsKHZhbHVlLCAiPj0iKSB8fAogICAgICBpZGVudGljYWwodmFsdWUsICI+IikgfHwKICAgICAgaWRlbnRpY2FsKHZhbHVlLCAiPD0iKSB8fAogICAgICBpZGVudGljYWwodmFsdWUsICI8IikgfHwKICAgICAgaWRlbnRpY2FsKHZhbHVlLCAiJiIpIHx8CiAgICAgIGlkZW50aWNhbCh2YWx1ZSwgIl4iKSB8fAogICAgICBpZGVudGljYWwodmFsdWUsICJ8Iik7Cn0KCmJvb2wgaXNUZXJuYXJ5T3BlcmF0b3IoU3RyaW5nIHZhbHVlKSA9PiBpZGVudGljYWwodmFsdWUsICJbXT0iKTsKCmJvb2wgaXNNaW51c09wZXJhdG9yKFN0cmluZyB2YWx1ZSkgPT4gaWRlbnRpY2FsKHZhbHVlLCAiLSIpOwqBXwBOTjwBHQEvOQE1ASQBBENIFARRBkwFTUpOJwYnAT0BBkwzBkdLH0c0AQZIMwYdR0s1HiQdPw0dQQYEAQZKKAZQJjE1HiRGDVEGBAFLMTQBDBYqIw02MC41HDQ/Dx9KCCMGBAEMPgEMHwFOASU5IT0EAVFEBAEMJVABDBwCAQRFBC8vQTE5AQwXAQwsTAIBSgwfAQZJMwYeRyJAKQEGJwZJNAEGSigGUSZMAUc5AQwZQgEMEhw0IQ0wNwYEAgEEPxwEMgYhBg0BBiEGDQFNRwEmURsdSykBSi4dUQEMIUMCASg0BkkzBh5HIkApAQZKKAZRJkwBRzkBDBlCAgEESkQjBCA7DAEREgEGTzYFSkgjBhYBHQFALi4hIBwaNg09BgQCAQRESj0DNwQ1FhQBRAEhKysCATIWExQYSRoCAS0kICIeAgE9ASYjIB8fHyAfICAhIB8gHx8fHQIBQQE9AS5wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2Nhbm5lci90b2tlbi5kYXJ0MXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9zY2FubmVyL3Rva2VuLmRhcnTAAMFZLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8qKgogKiBEZWZpbmVzIHRoZSB0b2tlbnMgdGhhdCBhcmUgcHJvZHVjZWQgYnkgdGhlIHNjYW5uZXIsIHVzZWQgYnkgdGhlIHBhcnNlciwgYW5kCiAqIHJlZmVyZW5jZWQgZnJvbSB0aGUgW0FTVCBzdHJ1Y3R1cmVdKGFzdC5kYXJ0KS4KICovCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJzsKCmltcG9ydCAnLi4vYmFzZS9zeW50YWN0aWNfZW50aXR5LmRhcnQnOwppbXBvcnQgJy4uL2Zhc3RhL3NjYW5uZXIvdG9rZW5fY29uc3RhbnRzLmRhcnQnOwppbXBvcnQgJ3N0cmluZ191dGlsaXRpZXMuZGFydCc7Cgpjb25zdCBpbnQgTk9fUFJFQ0VERU5DRSA9IDA7CmNvbnN0IGludCBBU1NJR05NRU5UX1BSRUNFREVOQ0UgPSAxOwpjb25zdCBpbnQgQ0FTQ0FERV9QUkVDRURFTkNFID0gMjsKY29uc3QgaW50IENPTkRJVElPTkFMX1BSRUNFREVOQ0UgPSAzOwpjb25zdCBpbnQgSUZfTlVMTF9QUkVDRURFTkNFID0gNDsKY29uc3QgaW50IExPR0lDQUxfT1JfUFJFQ0VERU5DRSA9IDU7CmNvbnN0IGludCBMT0dJQ0FMX0FORF9QUkVDRURFTkNFID0gNjsKY29uc3QgaW50IEVRVUFMSVRZX1BSRUNFREVOQ0UgPSA3Owpjb25zdCBpbnQgUkVMQVRJT05BTF9QUkVDRURFTkNFID0gODsKY29uc3QgaW50IEJJVFdJU0VfT1JfUFJFQ0VERU5DRSA9IDk7CmNvbnN0IGludCBCSVRXSVNFX1hPUl9QUkVDRURFTkNFID0gMTA7CmNvbnN0IGludCBCSVRXSVNFX0FORF9QUkVDRURFTkNFID0gMTE7CmNvbnN0IGludCBTSElGVF9QUkVDRURFTkNFID0gMTI7CmNvbnN0IGludCBBRERJVElWRV9QUkVDRURFTkNFID0gMTM7CmNvbnN0IGludCBNVUxUSVBMSUNBVElWRV9QUkVDRURFTkNFID0gMTQ7CmNvbnN0IGludCBQUkVGSVhfUFJFQ0VERU5DRSA9IDE1Owpjb25zdCBpbnQgUE9TVEZJWF9QUkVDRURFTkNFID0gMTY7CmNvbnN0IGludCBTRUxFQ1RPUl9QUkVDRURFTkNFID0gMTc7CgovKioKICogVGhlIG9wZW5pbmcgaGFsZiBvZiBhIGdyb3VwaW5nIHBhaXIgb2YgdG9rZW5zLiBUaGlzIGlzIHVzZWQgZm9yIGN1cmx5CiAqIGJyYWNrZXRzICgneycpLCBwYXJlbnRoZXNlcyAoJygnKSwgYW5kIHNxdWFyZSBicmFja2V0cyAoJ1snKS4KICovCmNsYXNzIEJlZ2luVG9rZW4gZXh0ZW5kcyBTaW1wbGVUb2tlbiB7CiAgLyoqCiAgICogVGhlIHRva2VuIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhpcyB0b2tlbi4KICAgKi8KICBUb2tlbiBlbmRUb2tlbjsKCiAgLyoqCiAgICogSW5pdGlhbGl6ZSBhIG5ld2x5IGNyZWF0ZWQgdG9rZW4gdG8gaGF2ZSB0aGUgZ2l2ZW4gW3R5cGVdIGF0IHRoZSBnaXZlbgogICAqIFtvZmZzZXRdLgogICAqLwogIEJlZ2luVG9rZW4oVG9rZW5UeXBlIHR5cGUsIGludCBvZmZzZXQsIFtDb21tZW50VG9rZW4gcHJlY2VkaW5nQ29tbWVudF0pCiAgICAgIDogc3VwZXIodHlwZSwgb2Zmc2V0LCBwcmVjZWRpbmdDb21tZW50KSB7CiAgICBhc3NlcnQodHlwZSA9PSBUb2tlblR5cGUuTFQgfHwKICAgICAgICB0eXBlID09IFRva2VuVHlwZS5PUEVOX0NVUkxZX0JSQUNLRVQgfHwKICAgICAgICB0eXBlID09IFRva2VuVHlwZS5PUEVOX1BBUkVOIHx8CiAgICAgICAgdHlwZSA9PSBUb2tlblR5cGUuT1BFTl9TUVVBUkVfQlJBQ0tFVCB8fAogICAgICAgIHR5cGUgPT0gVG9rZW5UeXBlLlFVRVNUSU9OX1BFUklPRF9PUEVOX1NRVUFSRV9CUkFDS0VUIHx8CiAgICAgICAgdHlwZSA9PSBUb2tlblR5cGUuU1RSSU5HX0lOVEVSUE9MQVRJT05fRVhQUkVTU0lPTik7CiAgfQoKICBAb3ZlcnJpZGUKICBUb2tlbiBjb3B5KCkgPT4gbmV3IEJlZ2luVG9rZW4odHlwZSwgb2Zmc2V0LCBjb3B5Q29tbWVudHMocHJlY2VkaW5nQ29tbWVudHMpKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZ2V0IGVuZEdyb3VwID0+IGVuZFRva2VuOwoKICAvKioKICAgKiBTZXQgdGhlIHRva2VuIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhpcyB0b2tlbi4KICAgKi8KICBzZXQgZW5kR3JvdXAoVG9rZW4gdG9rZW4pIHsKICAgIGVuZFRva2VuID0gdG9rZW47CiAgfQp9CgovKioKICogQSB0b2tlbiByZXByZXNlbnRpbmcgYSBjb21tZW50LgogKi8KY2xhc3MgQ29tbWVudFRva2VuIGV4dGVuZHMgU3RyaW5nVG9rZW4gewogIC8qKgogICAqIFRoZSB0b2tlbiB0aGF0IGNvbnRhaW5zIHRoaXMgY29tbWVudC4KICAgKi8KICBTaW1wbGVUb2tlbiBwYXJlbnQ7CgogIC8qKgogICAqIEluaXRpYWxpemUgYSBuZXdseSBjcmVhdGVkIHRva2VuIHRvIHJlcHJlc2VudCBhIHRva2VuIG9mIHRoZSBnaXZlbiBbdHlwZV0KICAgKiB3aXRoIHRoZSBnaXZlbiBbdmFsdWVdIGF0IHRoZSBnaXZlbiBbb2Zmc2V0XS4KICAgKi8KICBDb21tZW50VG9rZW4oVG9rZW5UeXBlIHR5cGUsIFN0cmluZyB2YWx1ZSwgaW50IG9mZnNldCkKICAgICAgOiBzdXBlcih0eXBlLCB2YWx1ZSwgb2Zmc2V0KTsKCiAgQG92ZXJyaWRlCiAgQ29tbWVudFRva2VuIGNvcHkoKSA9PiBuZXcgQ29tbWVudFRva2VuKHR5cGUsIF92YWx1ZSwgb2Zmc2V0KTsKCiAgLyoqCiAgICogUmVtb3ZlIHRoaXMgY29tbWVudCB0b2tlbiBmcm9tIHRoZSBsaXN0LgogICAqCiAgICogVGhpcyBpcyB1c2VkIHdoZW4gd2UgZGVjaWRlIHRvIGludGVycHJldCB0aGUgY29tbWVudCBhcyBzeW50YXguCiAgICovCiAgdm9pZCByZW1vdmUoKSB7CiAgICBpZiAocHJldmlvdXMgIT0gbnVsbCkgewogICAgICBwcmV2aW91cy5zZXROZXh0V2l0aG91dFNldHRpbmdQcmV2aW91cyhuZXh0KTsKICAgICAgbmV4dD8ucHJldmlvdXMgPSBwcmV2aW91czsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChwYXJlbnQucHJlY2VkaW5nQ29tbWVudHMgPT0gdGhpcyk7CiAgICAgIHBhcmVudC5wcmVjZWRpbmdDb21tZW50cyA9IG5leHQ7CiAgICB9CiAgfQp9CgovKioKICogQSBkb2N1bWVudGF0aW9uIGNvbW1lbnQgdG9rZW4uCiAqLwpjbGFzcyBEb2N1bWVudGF0aW9uQ29tbWVudFRva2VuIGV4dGVuZHMgQ29tbWVudFRva2VuIHsKICAvKioKICAgKiBJbml0aWFsaXplIGEgbmV3bHkgY3JlYXRlZCB0b2tlbiB0byByZXByZXNlbnQgYSB0b2tlbiBvZiB0aGUgZ2l2ZW4gW3R5cGVdCiAgICogd2l0aCB0aGUgZ2l2ZW4gW3ZhbHVlXSBhdCB0aGUgZ2l2ZW4gW29mZnNldF0uCiAgICovCiAgRG9jdW1lbnRhdGlvbkNvbW1lbnRUb2tlbihUb2tlblR5cGUgdHlwZSwgU3RyaW5nIHZhbHVlLCBpbnQgb2Zmc2V0KQogICAgICA6IHN1cGVyKHR5cGUsIHZhbHVlLCBvZmZzZXQpOwoKICBAb3ZlcnJpZGUKICBDb21tZW50VG9rZW4gY29weSgpID0+IG5ldyBEb2N1bWVudGF0aW9uQ29tbWVudFRva2VuKHR5cGUsIF92YWx1ZSwgb2Zmc2V0KTsKfQoKLyoqCiAqIFRoZSBrZXl3b3JkcyBpbiB0aGUgRGFydCBwcm9ncmFtbWluZyBsYW5ndWFnZS4KICoKICogQ2xpZW50cyBtYXkgbm90IGV4dGVuZCwgaW1wbGVtZW50IG9yIG1peC1pbiB0aGlzIGNsYXNzLgogKi8KY2xhc3MgS2V5d29yZCBleHRlbmRzIFRva2VuVHlwZSB7CiAgc3RhdGljIGNvbnN0IEtleXdvcmQgQUJTVFJBQ1QgPQogICAgICBjb25zdCBLZXl3b3JkKCJhYnN0cmFjdCIsICJBQlNUUkFDVCIsIGlzQnVpbHRJbjogdHJ1ZSwgaXNNb2RpZmllcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIEFTID0gY29uc3QgS2V5d29yZCgiYXMiLCAiQVMiLAogICAgICBwcmVjZWRlbmNlOiBSRUxBVElPTkFMX1BSRUNFREVOQ0UsIGlzQnVpbHRJbjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIEFTU0VSVCA9IGNvbnN0IEtleXdvcmQoImFzc2VydCIsICJBU1NFUlQiKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgQVNZTkMgPSBjb25zdCBLZXl3b3JkKCJhc3luYyIsICJBU1lOQyIsIGlzUHNldWRvOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgQVdBSVQgPSBjb25zdCBLZXl3b3JkKCJhd2FpdCIsICJBV0FJVCIsIGlzUHNldWRvOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgQlJFQUsgPSBjb25zdCBLZXl3b3JkKCJicmVhayIsICJCUkVBSyIpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBDQVNFID0gY29uc3QgS2V5d29yZCgiY2FzZSIsICJDQVNFIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIENBVENIID0gY29uc3QgS2V5d29yZCgiY2F0Y2giLCAiQ0FUQ0giKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgQ0xBU1MgPQogICAgICBjb25zdCBLZXl3b3JkKCJjbGFzcyIsICJDTEFTUyIsIGlzVG9wTGV2ZWxLZXl3b3JkOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgQ09OU1QgPQogICAgICBjb25zdCBLZXl3b3JkKCJjb25zdCIsICJDT05TVCIsIGlzTW9kaWZpZXI6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBDT05USU5VRSA9IGNvbnN0IEtleXdvcmQoImNvbnRpbnVlIiwgIkNPTlRJTlVFIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIENPVkFSSUFOVCA9IGNvbnN0IEtleXdvcmQoImNvdmFyaWFudCIsICJDT1ZBUklBTlQiLAogICAgICBpc0J1aWx0SW46IHRydWUsIGlzTW9kaWZpZXI6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBERUZBVUxUID0gY29uc3QgS2V5d29yZCgiZGVmYXVsdCIsICJERUZBVUxUIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIERFRkVSUkVEID0KICAgICAgY29uc3QgS2V5d29yZCgiZGVmZXJyZWQiLCAiREVGRVJSRUQiLCBpc0J1aWx0SW46IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBETyA9IGNvbnN0IEtleXdvcmQoImRvIiwgIkRPIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIERZTkFNSUMgPQogICAgICBjb25zdCBLZXl3b3JkKCJkeW5hbWljIiwgIkRZTkFNSUMiLCBpc0J1aWx0SW46IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBFTFNFID0gY29uc3QgS2V5d29yZCgiZWxzZSIsICJFTFNFIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIEVOVU0gPQogICAgICBjb25zdCBLZXl3b3JkKCJlbnVtIiwgIkVOVU0iLCBpc1RvcExldmVsS2V5d29yZDogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIEVYUE9SVCA9IGNvbnN0IEtleXdvcmQoImV4cG9ydCIsICJFWFBPUlQiLAogICAgICBpc0J1aWx0SW46IHRydWUsIGlzVG9wTGV2ZWxLZXl3b3JkOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgRVhURU5EUyA9IGNvbnN0IEtleXdvcmQoImV4dGVuZHMiLCAiRVhURU5EUyIpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBFWFRFTlNJT04gPSBjb25zdCBLZXl3b3JkKCJleHRlbnNpb24iLCAiRVhURU5TSU9OIiwKICAgICAgaXNCdWlsdEluOiB0cnVlLCBpc1RvcExldmVsS2V5d29yZDogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIEVYVEVSTkFMID0KICAgICAgY29uc3QgS2V5d29yZCgiZXh0ZXJuYWwiLCAiRVhURVJOQUwiLCBpc0J1aWx0SW46IHRydWUsIGlzTW9kaWZpZXI6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBGQUNUT1JZID0KICAgICAgY29uc3QgS2V5d29yZCgiZmFjdG9yeSIsICJGQUNUT1JZIiwgaXNCdWlsdEluOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgRkFMU0UgPSBjb25zdCBLZXl3b3JkKCJmYWxzZSIsICJGQUxTRSIpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBGSU5BTCA9CiAgICAgIGNvbnN0IEtleXdvcmQoImZpbmFsIiwgIkZJTkFMIiwgaXNNb2RpZmllcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIEZJTkFMTFkgPSBjb25zdCBLZXl3b3JkKCJmaW5hbGx5IiwgIkZJTkFMTFkiKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgRk9SID0gY29uc3QgS2V5d29yZCgiZm9yIiwgIkZPUiIpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBGVU5DVElPTiA9CiAgICAgIGNvbnN0IEtleXdvcmQoIkZ1bmN0aW9uIiwgIkZVTkNUSU9OIiwgaXNQc2V1ZG86IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBHRVQgPSBjb25zdCBLZXl3b3JkKCJnZXQiLCAiR0VUIiwgaXNCdWlsdEluOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgSElERSA9IGNvbnN0IEtleXdvcmQoImhpZGUiLCAiSElERSIsIGlzUHNldWRvOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgSUYgPSBjb25zdCBLZXl3b3JkKCJpZiIsICJJRiIpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBJTVBMRU1FTlRTID0KICAgICAgY29uc3QgS2V5d29yZCgiaW1wbGVtZW50cyIsICJJTVBMRU1FTlRTIiwgaXNCdWlsdEluOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgSU1QT1JUID0gY29uc3QgS2V5d29yZCgiaW1wb3J0IiwgIklNUE9SVCIsCiAgICAgIGlzQnVpbHRJbjogdHJ1ZSwgaXNUb3BMZXZlbEtleXdvcmQ6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBJTiA9IGNvbnN0IEtleXdvcmQoImluIiwgIklOIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIElOVEVSRkFDRSA9CiAgICAgIGNvbnN0IEtleXdvcmQoImludGVyZmFjZSIsICJJTlRFUkZBQ0UiLCBpc0J1aWx0SW46IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBJUyA9CiAgICAgIGNvbnN0IEtleXdvcmQoImlzIiwgIklTIiwgcHJlY2VkZW5jZTogUkVMQVRJT05BTF9QUkVDRURFTkNFKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgTEFURSA9IGNvbnN0IEtleXdvcmQoImxhdGUiLCAiTEFURSIsIGlzTW9kaWZpZXI6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBMSUJSQVJZID0gY29uc3QgS2V5d29yZCgibGlicmFyeSIsICJMSUJSQVJZIiwKICAgICAgaXNCdWlsdEluOiB0cnVlLCBpc1RvcExldmVsS2V5d29yZDogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIE1JWElOID0KICAgICAgY29uc3QgS2V5d29yZCgibWl4aW4iLCAiTUlYSU4iLCBpc0J1aWx0SW46IHRydWUsIGlzVG9wTGV2ZWxLZXl3b3JkOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgTkFUSVZFID0KICAgICAgY29uc3QgS2V5d29yZCgibmF0aXZlIiwgIk5BVElWRSIsIGlzUHNldWRvOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgTkVXID0gY29uc3QgS2V5d29yZCgibmV3IiwgIk5FVyIpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBOVUxMID0gY29uc3QgS2V5d29yZCgibnVsbCIsICJOVUxMIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIE9GID0gY29uc3QgS2V5d29yZCgib2YiLCAiT0YiLCBpc1BzZXVkbzogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIE9OID0gY29uc3QgS2V5d29yZCgib24iLCAiT04iLCBpc1BzZXVkbzogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIE9QRVJBVE9SID0KICAgICAgY29uc3QgS2V5d29yZCgib3BlcmF0b3IiLCAiT1BFUkFUT1IiLCBpc0J1aWx0SW46IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBQQVJUID0KICAgICAgY29uc3QgS2V5d29yZCgicGFydCIsICJQQVJUIiwgaXNCdWlsdEluOiB0cnVlLCBpc1RvcExldmVsS2V5d29yZDogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIFBBVENIID0gY29uc3QgS2V5d29yZCgicGF0Y2giLCAiUEFUQ0giLCBpc1BzZXVkbzogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIFJFUVVJUkVEID0KICAgICAgY29uc3QgS2V5d29yZCgicmVxdWlyZWQiLCAiUkVRVUlSRUQiLCBpc0J1aWx0SW46IHRydWUsIGlzTW9kaWZpZXI6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBSRVRIUk9XID0gY29uc3QgS2V5d29yZCgicmV0aHJvdyIsICJSRVRIUk9XIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIFJFVFVSTiA9IGNvbnN0IEtleXdvcmQoInJldHVybiIsICJSRVRVUk4iKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgU0VUID0gY29uc3QgS2V5d29yZCgic2V0IiwgIlNFVCIsIGlzQnVpbHRJbjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIFNIT1cgPSBjb25zdCBLZXl3b3JkKCJzaG93IiwgIlNIT1ciLCBpc1BzZXVkbzogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIFNPVVJDRSA9CiAgICAgIGNvbnN0IEtleXdvcmQoInNvdXJjZSIsICJTT1VSQ0UiLCBpc1BzZXVkbzogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIFNUQVRJQyA9CiAgICAgIGNvbnN0IEtleXdvcmQoInN0YXRpYyIsICJTVEFUSUMiLCBpc0J1aWx0SW46IHRydWUsIGlzTW9kaWZpZXI6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBTVVBFUiA9IGNvbnN0IEtleXdvcmQoInN1cGVyIiwgIlNVUEVSIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIFNXSVRDSCA9IGNvbnN0IEtleXdvcmQoInN3aXRjaCIsICJTV0lUQ0giKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgU1lOQyA9IGNvbnN0IEtleXdvcmQoInN5bmMiLCAiU1lOQyIsIGlzUHNldWRvOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgVEhJUyA9IGNvbnN0IEtleXdvcmQoInRoaXMiLCAiVEhJUyIpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBUSFJPVyA9IGNvbnN0IEtleXdvcmQoInRocm93IiwgIlRIUk9XIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIFRSVUUgPSBjb25zdCBLZXl3b3JkKCJ0cnVlIiwgIlRSVUUiKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgVFJZID0gY29uc3QgS2V5d29yZCgidHJ5IiwgIlRSWSIpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBUWVBFREVGID0gY29uc3QgS2V5d29yZCgidHlwZWRlZiIsICJUWVBFREVGIiwKICAgICAgaXNCdWlsdEluOiB0cnVlLCBpc1RvcExldmVsS2V5d29yZDogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIFZBUiA9IGNvbnN0IEtleXdvcmQoInZhciIsICJWQVIiLCBpc01vZGlmaWVyOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgVk9JRCA9IGNvbnN0IEtleXdvcmQoInZvaWQiLCAiVk9JRCIpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBXSElMRSA9IGNvbnN0IEtleXdvcmQoIndoaWxlIiwgIldISUxFIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIFdJVEggPSBjb25zdCBLZXl3b3JkKCJ3aXRoIiwgIldJVEgiKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgWUlFTEQgPSBjb25zdCBLZXl3b3JkKCJ5aWVsZCIsICJZSUVMRCIsIGlzUHNldWRvOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IExpc3Q8S2V5d29yZD4gdmFsdWVzID0gY29uc3QgPEtleXdvcmQ+WwogICAgQUJTVFJBQ1QsCiAgICBBUywKICAgIEFTU0VSVCwKICAgIEFTWU5DLAogICAgQVdBSVQsCiAgICBCUkVBSywKICAgIENBU0UsCiAgICBDQVRDSCwKICAgIENMQVNTLAogICAgQ09OU1QsCiAgICBDT05USU5VRSwKICAgIENPVkFSSUFOVCwKICAgIERFRkFVTFQsCiAgICBERUZFUlJFRCwKICAgIERPLAogICAgRFlOQU1JQywKICAgIEVMU0UsCiAgICBFTlVNLAogICAgRVhQT1JULAogICAgRVhURU5EUywKICAgIEVYVEVOU0lPTiwKICAgIEVYVEVSTkFMLAogICAgRkFDVE9SWSwKICAgIEZBTFNFLAogICAgRklOQUwsCiAgICBGSU5BTExZLAogICAgRk9SLAogICAgRlVOQ1RJT04sCiAgICBHRVQsCiAgICBISURFLAogICAgSUYsCiAgICBJTVBMRU1FTlRTLAogICAgSU1QT1JULAogICAgSU4sCiAgICBJTlRFUkZBQ0UsCiAgICBJUywKICAgIExBVEUsCiAgICBMSUJSQVJZLAogICAgTUlYSU4sCiAgICBOQVRJVkUsCiAgICBORVcsCiAgICBOVUxMLAogICAgT0YsCiAgICBPTiwKICAgIE9QRVJBVE9SLAogICAgUEFSVCwKICAgIFBBVENILAogICAgUkVRVUlSRUQsCiAgICBSRVRIUk9XLAogICAgUkVUVVJOLAogICAgU0VULAogICAgU0hPVywKICAgIFNPVVJDRSwKICAgIFNUQVRJQywKICAgIFNVUEVSLAogICAgU1dJVENILAogICAgU1lOQywKICAgIFRISVMsCiAgICBUSFJPVywKICAgIFRSVUUsCiAgICBUUlksCiAgICBUWVBFREVGLAogICAgVkFSLAogICAgVk9JRCwKICAgIFdISUxFLAogICAgV0lUSCwKICAgIFlJRUxELAogIF07CgogIC8qKgogICAqIEEgdGFibGUgbWFwcGluZyB0aGUgbGV4ZW1lcyBvZiBrZXl3b3JkcyB0byB0aGUgY29ycmVzcG9uZGluZyBrZXl3b3JkLgogICAqLwogIHN0YXRpYyBmaW5hbCBNYXA8U3RyaW5nLCBLZXl3b3JkPiBrZXl3b3JkcyA9IF9jcmVhdGVLZXl3b3JkTWFwKCk7CgogIC8qKgogICAqIEEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGtleXdvcmQgaXMgImJ1aWx0LWluIiBpZGVudGlmaWVyLgogICAqLwogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgaXNCdWlsdEluOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzUHNldWRvOwoKICAvKioKICAgKiBJbml0aWFsaXplIGEgbmV3bHkgY3JlYXRlZCBrZXl3b3JkLgogICAqLwogIGNvbnN0IEtleXdvcmQoU3RyaW5nIGxleGVtZSwgU3RyaW5nIG5hbWUsCiAgICAgIHt0aGlzLmlzQnVpbHRJbjogZmFsc2UsCiAgICAgIGJvb2wgaXNNb2RpZmllcjogZmFsc2UsCiAgICAgIHRoaXMuaXNQc2V1ZG86IGZhbHNlLAogICAgICBib29sIGlzVG9wTGV2ZWxLZXl3b3JkOiBmYWxzZSwKICAgICAgaW50IHByZWNlZGVuY2U6IE5PX1BSRUNFREVOQ0V9KQogICAgICA6IHN1cGVyKGxleGVtZSwgbmFtZSwgcHJlY2VkZW5jZSwgS0VZV09SRF9UT0tFTiwKICAgICAgICAgICAgaXNNb2RpZmllcjogaXNNb2RpZmllciwgaXNUb3BMZXZlbEtleXdvcmQ6IGlzVG9wTGV2ZWxLZXl3b3JkKTsKCiAgYm9vbCBnZXQgaXNCdWlsdEluT3JQc2V1ZG8gPT4gaXNCdWlsdEluIHx8IGlzUHNldWRvOwoKICAvKioKICAgKiBBIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBrZXl3b3JkIGlzICJidWlsdC1pbiIgaWRlbnRpZmllci4KICAgKiBUaGlzIG1ldGhvZCBleGlzdHMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kIHdpbGwgYmUgcmVtb3ZlZC4KICAgKiBVc2UgW2lzQnVpbHRJbl0gaW5zdGVhZC4KICAgKi8KICBAZGVwcmVjYXRlZAogIGJvb2wgZ2V0IGlzUHNldWRvS2V5d29yZCA9PiBpc0J1aWx0SW47IC8vIFRPRE8gKGRhbnJ1YmVsKTogcmVtb3ZlIHRoaXMKCiAgLyoqCiAgICogVGhlIG5hbWUgb2YgdGhlIGtleXdvcmQgdHlwZS4KICAgKi8KICBTdHJpbmcgZ2V0IG5hbWUgPT4gbGV4ZW1lLnRvVXBwZXJDYXNlKCk7CgogIC8qKgogICAqIFRoZSBsZXhlbWUgZm9yIHRoZSBrZXl3b3JkLgogICAqCiAgICogRGVwcmVjYXRlZCAtIHVzZSBbbGV4ZW1lXSBpbnN0ZWFkLgogICAqLwogIEBkZXByZWNhdGVkCiAgU3RyaW5nIGdldCBzeW50YXggPT4gbGV4ZW1lOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBuYW1lOwoKICAvKioKICAgKiBDcmVhdGUgYSB0YWJsZSBtYXBwaW5nIHRoZSBsZXhlbWVzIG9mIGtleXdvcmRzIHRvIHRoZSBjb3JyZXNwb25kaW5nIGtleXdvcmQKICAgKiBhbmQgcmV0dXJuIHRoZSB0YWJsZSB0aGF0IHdhcyBjcmVhdGVkLgogICAqLwogIHN0YXRpYyBNYXA8U3RyaW5nLCBLZXl3b3JkPiBfY3JlYXRlS2V5d29yZE1hcCgpIHsKICAgIExpbmtlZEhhc2hNYXA8U3RyaW5nLCBLZXl3b3JkPiByZXN1bHQgPQogICAgICAgIG5ldyBMaW5rZWRIYXNoTWFwPFN0cmluZywgS2V5d29yZD4oKTsKICAgIGZvciAoS2V5d29yZCBrZXl3b3JkIGluIHZhbHVlcykgewogICAgICByZXN1bHRba2V5d29yZC5sZXhlbWVdID0ga2V5d29yZDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CgovKioKICogQSB0b2tlbiByZXByZXNlbnRpbmcgYSBrZXl3b3JkIGluIHRoZSBsYW5ndWFnZS4KICovCmNsYXNzIEtleXdvcmRUb2tlbiBleHRlbmRzIFNpbXBsZVRva2VuIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBLZXl3b3JkIGtleXdvcmQ7CgogIC8qKgogICAqIEluaXRpYWxpemUgYSBuZXdseSBjcmVhdGVkIHRva2VuIHRvIHJlcHJlc2VudCB0aGUgZ2l2ZW4gW2tleXdvcmRdIGF0IHRoZQogICAqIGdpdmVuIFtvZmZzZXRdLgogICAqLwogIEtleXdvcmRUb2tlbih0aGlzLmtleXdvcmQsIGludCBvZmZzZXQsIFtDb21tZW50VG9rZW4gcHJlY2VkaW5nQ29tbWVudF0pCiAgICAgIDogc3VwZXIoa2V5d29yZCwgb2Zmc2V0LCBwcmVjZWRpbmdDb21tZW50KTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gY29weSgpID0+CiAgICAgIG5ldyBLZXl3b3JkVG9rZW4oa2V5d29yZCwgb2Zmc2V0LCBjb3B5Q29tbWVudHMocHJlY2VkaW5nQ29tbWVudHMpKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNJZGVudGlmaWVyID0+IGtleXdvcmQuaXNQc2V1ZG8gfHwga2V5d29yZC5pc0J1aWx0SW47CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzS2V5d29yZCA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0tleXdvcmRPcklkZW50aWZpZXIgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgT2JqZWN0IHZhbHVlKCkgPT4ga2V5d29yZDsKfQoKLyoqCiAqIEEgdG9rZW4gdGhhdCB3YXMgc2Nhbm5lZCBmcm9tIHRoZSBpbnB1dC4gRWFjaCB0b2tlbiBrbm93cyB3aGljaCB0b2tlbnMKICogcHJlY2VkZSBhbmQgZm9sbG93IGl0LCBhY3RpbmcgYXMgYSBsaW5rIGluIGEgZG91Ymx5IGxpbmtlZCBsaXN0IG9mIHRva2Vucy4KICovCmNsYXNzIFNpbXBsZVRva2VuIGltcGxlbWVudHMgVG9rZW4gewogIC8qKgogICAqIFRoZSB0eXBlIG9mIHRoZSB0b2tlbi4KICAgKi8KICBAb3ZlcnJpZGUKICBmaW5hbCBUb2tlblR5cGUgdHlwZTsKCiAgLyoqCiAgICogVGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUKICAgKiB0b2tlbi4KICAgKi8KICBAb3ZlcnJpZGUKICBpbnQgb2Zmc2V0ID0gMDsKCiAgLyoqCiAgICogVGhlIHByZXZpb3VzIHRva2VuIGluIHRoZSB0b2tlbiBzdHJlYW0uCiAgICovCiAgQG92ZXJyaWRlCiAgVG9rZW4gcHJldmlvdXM7CgogIEBvdmVycmlkZQogIFRva2VuIG5leHQ7CgogIC8qKgogICAqIFRoZSBmaXJzdCBjb21tZW50IGluIHRoZSBsaXN0IG9mIGNvbW1lbnRzIHRoYXQgcHJlY2VkZSB0aGlzIHRva2VuLgogICAqLwogIENvbW1lbnRUb2tlbiBfcHJlY2VkaW5nQ29tbWVudDsKCiAgLyoqCiAgICogSW5pdGlhbGl6ZSBhIG5ld2x5IGNyZWF0ZWQgdG9rZW4gdG8gaGF2ZSB0aGUgZ2l2ZW4gW3R5cGVdIGFuZCBbb2Zmc2V0XS4KICAgKi8KICBTaW1wbGVUb2tlbih0aGlzLnR5cGUsIHRoaXMub2Zmc2V0LCBbdGhpcy5fcHJlY2VkaW5nQ29tbWVudF0pIHsKICAgIF9zZXRDb21tZW50UGFyZW50KF9wcmVjZWRpbmdDb21tZW50KTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgY2hhckNvdW50ID0+IGxlbmd0aDsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBjaGFyT2Zmc2V0ID0+IG9mZnNldDsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBjaGFyRW5kID0+IGVuZDsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZ2V0IGJlZm9yZVN5bnRoZXRpYyA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBzZXQgYmVmb3JlU3ludGhldGljKFRva2VuIHByZXZpb3VzKSB7CiAgICAvLyBpZ25vcmVkCiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGVuZCA9PiBvZmZzZXQgKyBsZW5ndGg7CgogIEBvdmVycmlkZQogIFRva2VuIGdldCBlbmRHcm91cCA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0VvZiA9PiB0eXBlID09IFRva2VuVHlwZS5FT0Y7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzSWRlbnRpZmllciA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNLZXl3b3JkID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0tleXdvcmRPcklkZW50aWZpZXIgPT4gaXNJZGVudGlmaWVyOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc01vZGlmaWVyID0+IHR5cGUuaXNNb2RpZmllcjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNPcGVyYXRvciA9PiB0eXBlLmlzT3BlcmF0b3I7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU3ludGhldGljID0+IGxlbmd0aCA9PSAwOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1RvcExldmVsS2V5d29yZCA9PiB0eXBlLmlzVG9wTGV2ZWxLZXl3b3JkOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvciA9PiB0eXBlLmlzVXNlckRlZmluYWJsZU9wZXJhdG9yOwoKICBAb3ZlcnJpZGUKICBLZXl3b3JkIGdldCBrZXl3b3JkID0+IG51bGw7CgogIEBvdmVycmlkZQogIGludCBnZXQga2luZCA9PiB0eXBlLmtpbmQ7CgogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoID0+IGxleGVtZS5sZW5ndGg7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgbGV4ZW1lID0+IHR5cGUubGV4ZW1lOwoKICBAb3ZlcnJpZGUKICBDb21tZW50VG9rZW4gZ2V0IHByZWNlZGluZ0NvbW1lbnRzID0+IF9wcmVjZWRpbmdDb21tZW50OwoKICB2b2lkIHNldCBwcmVjZWRpbmdDb21tZW50cyhDb21tZW50VG9rZW4gY29tbWVudCkgewogICAgX3ByZWNlZGluZ0NvbW1lbnQgPSBjb21tZW50OwogICAgX3NldENvbW1lbnRQYXJlbnQoX3ByZWNlZGluZ0NvbW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBzdHJpbmdWYWx1ZSA9PiB0eXBlLnN0cmluZ1ZhbHVlOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBjb3B5KCkgPT4KICAgICAgbmV3IFNpbXBsZVRva2VuKHR5cGUsIG9mZnNldCwgY29weUNvbW1lbnRzKHByZWNlZGluZ0NvbW1lbnRzKSk7CgogIEBvdmVycmlkZQogIFRva2VuIGNvcHlDb21tZW50cyhUb2tlbiB0b2tlbikgewogICAgaWYgKHRva2VuID09IG51bGwpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBUb2tlbiBoZWFkID0gdG9rZW4uY29weSgpOwogICAgVG9rZW4gdGFpbCA9IGhlYWQ7CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICB3aGlsZSAodG9rZW4gIT0gbnVsbCkgewogICAgICB0YWlsID0gdGFpbC5zZXROZXh0KHRva2VuLmNvcHkoKSk7CiAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIH0KICAgIHJldHVybiBoZWFkOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBtYXRjaGVzQW55KExpc3Q8VG9rZW5UeXBlPiB0eXBlcykgewogICAgZm9yIChUb2tlblR5cGUgdHlwZSBpbiB0eXBlcykgewogICAgICBpZiAodGhpcy50eXBlID09IHR5cGUpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgVG9rZW4gc2V0TmV4dChUb2tlbiB0b2tlbikgewogICAgbmV4dCA9IHRva2VuOwogICAgdG9rZW4ucHJldmlvdXMgPSB0aGlzOwogICAgdG9rZW4uYmVmb3JlU3ludGhldGljID0gdGhpczsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIEBvdmVycmlkZQogIFRva2VuIHNldE5leHRXaXRob3V0U2V0dGluZ1ByZXZpb3VzKFRva2VuIHRva2VuKSB7CiAgICBuZXh0ID0gdG9rZW47CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBsZXhlbWU7CgogIEBvdmVycmlkZQogIE9iamVjdCB2YWx1ZSgpID0+IGxleGVtZTsKCiAgLyoqCiAgICogU2V0cyB0aGUgYHBhcmVudGAgcHJvcGVydHkgdG8gYHRoaXNgIGZvciB0aGUgZ2l2ZW4gW2NvbW1lbnRdIGFuZCBhbGwgdGhlCiAgICogbmV4dCB0b2tlbnMuCiAgICovCiAgdm9pZCBfc2V0Q29tbWVudFBhcmVudChDb21tZW50VG9rZW4gY29tbWVudCkgewogICAgd2hpbGUgKGNvbW1lbnQgIT0gbnVsbCkgewogICAgICBjb21tZW50LnBhcmVudCA9IHRoaXM7CiAgICAgIGNvbW1lbnQgPSBjb21tZW50Lm5leHQ7CiAgICB9CiAgfQp9CgovKioKICogQSB0b2tlbiB3aG9zZSB2YWx1ZSBpcyBpbmRlcGVuZGVudCBvZiBpdCdzIHR5cGUuCiAqLwpjbGFzcyBTdHJpbmdUb2tlbiBleHRlbmRzIFNpbXBsZVRva2VuIHsKICAvKioKICAgKiBUaGUgbGV4ZW1lIHJlcHJlc2VudGVkIGJ5IHRoaXMgdG9rZW4uCiAgICovCiAgU3RyaW5nIF92YWx1ZTsKCiAgLyoqCiAgICogSW5pdGlhbGl6ZSBhIG5ld2x5IGNyZWF0ZWQgdG9rZW4gdG8gcmVwcmVzZW50IGEgdG9rZW4gb2YgdGhlIGdpdmVuIFt0eXBlXQogICAqIHdpdGggdGhlIGdpdmVuIFt2YWx1ZV0gYXQgdGhlIGdpdmVuIFtvZmZzZXRdLgogICAqLwogIFN0cmluZ1Rva2VuKFRva2VuVHlwZSB0eXBlLCBTdHJpbmcgdmFsdWUsIGludCBvZmZzZXQsCiAgICAgIFtDb21tZW50VG9rZW4gcHJlY2VkaW5nQ29tbWVudF0pCiAgICAgIDogc3VwZXIodHlwZSwgb2Zmc2V0LCBwcmVjZWRpbmdDb21tZW50KSB7CiAgICB0aGlzLl92YWx1ZSA9IFN0cmluZ1V0aWxpdGllcy5pbnRlcm4odmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNJZGVudGlmaWVyID0+IGlkZW50aWNhbChraW5kLCBJREVOVElGSUVSX1RPS0VOKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBsZXhlbWUgPT4gX3ZhbHVlOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBjb3B5KCkgPT4KICAgICAgbmV3IFN0cmluZ1Rva2VuKHR5cGUsIF92YWx1ZSwgb2Zmc2V0LCBjb3B5Q29tbWVudHMocHJlY2VkaW5nQ29tbWVudHMpKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZhbHVlKCkgPT4gX3ZhbHVlOwp9CgovKioKICogQSBzeW50aGV0aWMgYmVnaW4gdG9rZW4uCiAqLwpjbGFzcyBTeW50aGV0aWNCZWdpblRva2VuIGV4dGVuZHMgQmVnaW5Ub2tlbiB7CiAgLyoqCiAgICogSW5pdGlhbGl6ZSBhIG5ld2x5IGNyZWF0ZWQgdG9rZW4gdG8gaGF2ZSB0aGUgZ2l2ZW4gW3R5cGVdIGF0IHRoZSBnaXZlbgogICAqIFtvZmZzZXRdLgogICAqLwogIFN5bnRoZXRpY0JlZ2luVG9rZW4oVG9rZW5UeXBlIHR5cGUsIGludCBvZmZzZXQsCiAgICAgIFtDb21tZW50VG9rZW4gcHJlY2VkaW5nQ29tbWVudF0pCiAgICAgIDogc3VwZXIodHlwZSwgb2Zmc2V0LCBwcmVjZWRpbmdDb21tZW50KTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gY29weSgpID0+CiAgICAgIG5ldyBTeW50aGV0aWNCZWdpblRva2VuKHR5cGUsIG9mZnNldCwgY29weUNvbW1lbnRzKHByZWNlZGluZ0NvbW1lbnRzKSk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU3ludGhldGljID0+IHRydWU7CgogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoID0+IDA7Cn0KCi8qKgogKiBBIHN5bnRoZXRpYyBrZXl3b3JkIHRva2VuLgogKi8KY2xhc3MgU3ludGhldGljS2V5d29yZFRva2VuIGV4dGVuZHMgS2V5d29yZFRva2VuIHsKICAvKioKICAgKiBJbml0aWFsaXplIGEgbmV3bHkgY3JlYXRlZCB0b2tlbiB0byByZXByZXNlbnQgdGhlIGdpdmVuIFtrZXl3b3JkXSBhdCB0aGUKICAgKiBnaXZlbiBbb2Zmc2V0XS4KICAgKi8KICBTeW50aGV0aWNLZXl3b3JkVG9rZW4oS2V5d29yZCBrZXl3b3JkLCBpbnQgb2Zmc2V0KSA6IHN1cGVyKGtleXdvcmQsIG9mZnNldCk7CgogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoID0+IDA7CgogIEBvdmVycmlkZQogIFRva2VuIGNvcHkoKSA9PiBuZXcgU3ludGhldGljS2V5d29yZFRva2VuKGtleXdvcmQsIG9mZnNldCk7Cn0KCi8qKgogKiBBIHRva2VuIHdob3NlIHZhbHVlIGlzIGluZGVwZW5kZW50IG9mIGl0J3MgdHlwZS4KICovCmNsYXNzIFN5bnRoZXRpY1N0cmluZ1Rva2VuIGV4dGVuZHMgU3RyaW5nVG9rZW4gewogIGZpbmFsIGludCBfbGVuZ3RoOwoKICAvKioKICAgKiBJbml0aWFsaXplIGEgbmV3bHkgY3JlYXRlZCB0b2tlbiB0byByZXByZXNlbnQgYSB0b2tlbiBvZiB0aGUgZ2l2ZW4gW3R5cGVdCiAgICogd2l0aCB0aGUgZ2l2ZW4gW3ZhbHVlXSBhdCB0aGUgZ2l2ZW4gW29mZnNldF0uIElmIHRoZSBbbGVuZ3RoXSBpcwogICAqIG5vdCBzcGVjaWZpZWQsIHRoZW4gaXQgZGVmYXVsdHMgdG8gdGhlIGxlbmd0aCBvZiBbdmFsdWVdLgogICAqLwogIFN5bnRoZXRpY1N0cmluZ1Rva2VuKFRva2VuVHlwZSB0eXBlLCBTdHJpbmcgdmFsdWUsIGludCBvZmZzZXQsIFt0aGlzLl9sZW5ndGhdKQogICAgICA6IHN1cGVyKHR5cGUsIHZhbHVlLCBvZmZzZXQpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1N5bnRoZXRpYyA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGxlbmd0aCA9PiBfbGVuZ3RoID8/IHN1cGVyLmxlbmd0aDsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gY29weSgpID0+IG5ldyBTeW50aGV0aWNTdHJpbmdUb2tlbih0eXBlLCBfdmFsdWUsIG9mZnNldCwgX2xlbmd0aCk7Cn0KCi8qKgogKiBBIHN5bnRoZXRpYyB0b2tlbi4KICovCmNsYXNzIFN5bnRoZXRpY1Rva2VuIGV4dGVuZHMgU2ltcGxlVG9rZW4gewogIFN5bnRoZXRpY1Rva2VuKFRva2VuVHlwZSB0eXBlLCBpbnQgb2Zmc2V0KSA6IHN1cGVyKHR5cGUsIG9mZnNldCk7CgogIEBvdmVycmlkZQogIFRva2VuIGJlZm9yZVN5bnRoZXRpYzsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTeW50aGV0aWMgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBsZW5ndGggPT4gMDsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gY29weSgpID0+IG5ldyBTeW50aGV0aWNUb2tlbih0eXBlLCBvZmZzZXQpOwp9CgovKioKICogQSB0b2tlbiB0aGF0IHdhcyBzY2FubmVkIGZyb20gdGhlIGlucHV0LiBFYWNoIHRva2VuIGtub3dzIHdoaWNoIHRva2VucwogKiBwcmVjZWRlIGFuZCBmb2xsb3cgaXQsIGFjdGluZyBhcyBhIGxpbmsgaW4gYSBkb3VibHkgbGlua2VkIGxpc3Qgb2YgdG9rZW5zLgogKgogKiBDbGllbnRzIG1heSBub3QgZXh0ZW5kLCBpbXBsZW1lbnQgb3IgbWl4LWluIHRoaXMgY2xhc3MuCiAqLwphYnN0cmFjdCBjbGFzcyBUb2tlbiBpbXBsZW1lbnRzIFN5bnRhY3RpY0VudGl0eSB7CiAgLyoqCiAgICogSW5pdGlhbGl6ZSBhIG5ld2x5IGNyZWF0ZWQgdG9rZW4gdG8gaGF2ZSB0aGUgZ2l2ZW4gW3R5cGVdIGFuZCBbb2Zmc2V0XS4KICAgKi8KICBmYWN0b3J5IFRva2VuKFRva2VuVHlwZSB0eXBlLCBpbnQgb2Zmc2V0LCBbQ29tbWVudFRva2VuIHByZWNlZWRpbmdDb21tZW50XSkgPQogICAgICBTaW1wbGVUb2tlbjsKCiAgLyoqCiAgICogSW5pdGlhbGl6ZSBhIG5ld2x5IGNyZWF0ZWQgZW5kLW9mLWZpbGUgdG9rZW4gdG8gaGF2ZSB0aGUgZ2l2ZW4gW29mZnNldF0uCiAgICovCiAgZmFjdG9yeSBUb2tlbi5lb2YoaW50IG9mZnNldCwgW0NvbW1lbnRUb2tlbiBwcmVjZWRpbmdDb21tZW50c10pIHsKICAgIFRva2VuIGVvZiA9IG5ldyBTaW1wbGVUb2tlbihUb2tlblR5cGUuRU9GLCBvZmZzZXQsIHByZWNlZGluZ0NvbW1lbnRzKTsKICAgIC8vIEVPRiBwb2ludHMgdG8gaXRzZWxmIHNvIHRoZXJlJ3MgYWx3YXlzIGluZmluaXRlIGxvb2stYWhlYWQuCiAgICBlb2YucHJldmlvdXMgPSBlb2Y7CiAgICBlb2YubmV4dCA9IGVvZjsKICAgIHJldHVybiBlb2Y7CiAgfQoKICAvKioKICAgKiBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcGFyc2VkIGJ5IHRoaXMgdG9rZW4uCiAgICovCiAgaW50IGdldCBjaGFyQ291bnQ7CgogIC8qKgogICAqIFRoZSBjaGFyYWN0ZXIgb2Zmc2V0IG9mIHRoZSBzdGFydCBvZiB0aGlzIHRva2VuIHdpdGhpbiB0aGUgc291cmNlIHRleHQuCiAgICovCiAgaW50IGdldCBjaGFyT2Zmc2V0OwoKICAvKioKICAgKiBUaGUgY2hhcmFjdGVyIG9mZnNldCBvZiB0aGUgZW5kIG9mIHRoaXMgdG9rZW4gd2l0aGluIHRoZSBzb3VyY2UgdGV4dC4KICAgKi8KICBpbnQgZ2V0IGNoYXJFbmQ7CgogIC8qKgogICAqIFRoZSB0b2tlbiBiZWZvcmUgdGhpcyBzeW50aGV0aWMgdG9rZW4sCiAgICogb3IgYG51bGxgIGlmIHRoaXMgaXMgbm90IGEgc3ludGhldGljIGApYCwgYF1gLCBgfWAsIG9yIGA+YCB0b2tlbi4KICAgKi8KICBUb2tlbiBnZXQgYmVmb3JlU3ludGhldGljOwoKICAvKioKICAgKiBTZXQgdG9rZW4gYmVmb3JlIHRoaXMgc3ludGhldGljIGApYCwgYF1gLCBgfWAsIG9yIGA+YCB0b2tlbiwKICAgKiBhbmQgaWdub3JlZCBvdGhlcndpc2UuCiAgICovCiAgc2V0IGJlZm9yZVN5bnRoZXRpYyhUb2tlbiBwcmV2aW91cyk7CgogIEBvdmVycmlkZQogIGludCBnZXQgZW5kOwoKICAvKioKICAgKiBUaGUgdG9rZW4gdGhhdCBjb3JyZXNwb25kcyB0byB0aGlzIHRva2VuLCBvciBgbnVsbGAgaWYgdGhpcyB0b2tlbiBpcyBub3QKICAgKiB0aGUgZmlyc3Qgb2YgYSBwYWlyIG9mIG1hdGNoaW5nIHRva2VucyAoc3VjaCBhcyBwYXJlbnRoZXNlcykuCiAgICovCiAgVG9rZW4gZ2V0IGVuZEdyb3VwID0+IG51bGw7CgogIC8qKgogICAqIFJldHVybiBgdHJ1ZWAgaWYgdGhpcyB0b2tlbiByZXByZXNlbnRzIGFuIGVuZCBvZiBmaWxlLgogICAqLwogIGJvb2wgZ2V0IGlzRW9mOwoKICAvKioKICAgKiBUcnVlIGlmIHRoaXMgdG9rZW4gaXMgYW4gaWRlbnRpZmllci4gU29tZSBrZXl3b3JkcyBhbGxvd2VkIGFzIGlkZW50aWZpZXJzLAogICAqIHNlZSBpbXBsZW1lbnRhdGlvbiBpbiBbS2V5d29yZFRva2VuXS4KICAgKi8KICBib29sIGdldCBpc0lkZW50aWZpZXI7CgogIC8qKgogICAqIFRydWUgaWYgdGhpcyB0b2tlbiBpcyBhIGtleXdvcmQuIFNvbWUga2V5d29yZHMgYWxsb3dlZCBhcyBpZGVudGlmaWVycywKICAgKiBzZWUgaW1wbGVtZW50YXRpb24gaW4gW0tleXdvcmRUb2tlbl0uCiAgICovCiAgYm9vbCBnZXQgaXNLZXl3b3JkOwoKICAvKioKICAgKiBUcnVlIGlmIHRoaXMgdG9rZW4gaXMgYSBrZXl3b3JkIG9yIGFuIGlkZW50aWZpZXIuCiAgICovCiAgYm9vbCBnZXQgaXNLZXl3b3JkT3JJZGVudGlmaWVyOwoKICAvKioKICAgKiBSZXR1cm4gYHRydWVgIGlmIHRoaXMgdG9rZW4gaXMgYSBtb2RpZmllciBzdWNoIGFzIGBhYnN0cmFjdGAgb3IgYGNvbnN0YC4KICAgKi8KICBib29sIGdldCBpc01vZGlmaWVyOwoKICAvKioKICAgKiBSZXR1cm4gYHRydWVgIGlmIHRoaXMgdG9rZW4gcmVwcmVzZW50cyBhbiBvcGVyYXRvci4KICAgKi8KICBib29sIGdldCBpc09wZXJhdG9yOwoKICAvKioKICAgKiBSZXR1cm4gYHRydWVgIGlmIHRoaXMgdG9rZW4gaXMgYSBzeW50aGV0aWMgdG9rZW4uIEEgc3ludGhldGljIHRva2VuIGlzIGEKICAgKiB0b2tlbiB0aGF0IHdhcyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXJzZXIgaW4gb3JkZXIgdG8gcmVjb3ZlciBmcm9tIGFuIGVycm9yCiAgICogaW4gdGhlIGNvZGUuCiAgICovCiAgYm9vbCBnZXQgaXNTeW50aGV0aWM7CgogIC8qKgogICAqIFJldHVybiBgdHJ1ZWAgaWYgdGhpcyB0b2tlbiBpcyBhIGtleXdvcmQgc3RhcnRpbmcgYSB0b3AgbGV2ZWwgZGVjbGFyYXRpb24KICAgKiBzdWNoIGFzIGBjbGFzc2AsIGBlbnVtYCwgYGltcG9ydGAsIGV0Yy4KICAgKi8KICBib29sIGdldCBpc1RvcExldmVsS2V5d29yZDsKCiAgLyoqCiAgICogUmV0dXJuIGB0cnVlYCBpZiB0aGlzIHRva2VuIHJlcHJlc2VudHMgYW4gb3BlcmF0b3IgdGhhdCBjYW4gYmUgZGVmaW5lZCBieQogICAqIHVzZXJzLgogICAqLwogIGJvb2wgZ2V0IGlzVXNlckRlZmluYWJsZU9wZXJhdG9yOwoKICAvKioKICAgKiBSZXR1cm4gdGhlIGtleXdvcmQsIGlmIGEga2V5d29yZCB0b2tlbiwgb3IgYG51bGxgIG90aGVyd2lzZS4KICAgKi8KICBLZXl3b3JkIGdldCBrZXl3b3JkOwoKICAvKioKICAgKiBUaGUga2luZCBlbnVtIG9mIHRoaXMgdG9rZW4gYXMgZGV0ZXJtaW5lZCBieSBpdHMgW3R5cGVdLgogICAqLwogIGludCBnZXQga2luZDsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBsZW5ndGg7CgogIC8qKgogICAqIFJldHVybiB0aGUgbGV4ZW1lIHRoYXQgcmVwcmVzZW50cyB0aGlzIHRva2VuLgogICAqCiAgICogRm9yIFtTdHJpbmdUb2tlbl1zIHRoZSBbbGV4ZW1lXSBpbmNsdWRlcyB0aGUgcXVvdGVzLCBleHBsaWNpdCBlc2NhcGVzLCBldGMuCiAgICovCiAgU3RyaW5nIGdldCBsZXhlbWU7CgogIC8qKgogICAqIFJldHVybiB0aGUgbmV4dCB0b2tlbiBpbiB0aGUgdG9rZW4gc3RyZWFtLgogICAqLwogIFRva2VuIGdldCBuZXh0OwoKICAvKioKICAgKiBSZXR1cm4gdGhlIG5leHQgdG9rZW4gaW4gdGhlIHRva2VuIHN0cmVhbS4KICAgKi8KICB2b2lkIHNldCBuZXh0KFRva2VuIG5leHQpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IG9mZnNldDsKCiAgLyoqCiAgICogU2V0IHRoZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4KICAgKiB0aGUgdG9rZW4gdG8gdGhlIGdpdmVuIFtvZmZzZXRdLgogICAqLwogIHZvaWQgc2V0IG9mZnNldChpbnQgb2Zmc2V0KTsKCiAgLyoqCiAgICogUmV0dXJuIHRoZSBmaXJzdCBjb21tZW50IGluIHRoZSBsaXN0IG9mIGNvbW1lbnRzIHRoYXQgcHJlY2VkZSB0aGlzIHRva2VuLAogICAqIG9yIGBudWxsYCBpZiB0aGVyZSBhcmUgbm8gY29tbWVudHMgcHJlY2VkaW5nIHRoaXMgdG9rZW4uIEFkZGl0aW9uYWwKICAgKiBjb21tZW50cyBjYW4gYmUgcmVhY2hlZCBieSBmb2xsb3dpbmcgdGhlIHRva2VuIHN0cmVhbSB1c2luZyBbbmV4dF0gdW50aWwKICAgKiBgbnVsbGAgaXMgcmV0dXJuZWQuCiAgICoKICAgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIG9yaWdpbmFsIGNvbnRlbnRzIHdlcmUgYC8qIG9uZSAqLyAvKiB0d28gKi8gaWRgLCB0aGVuCiAgICogdGhlIGZpcnN0IHByZWNlZGluZyBjb21tZW50IHRva2VuIHdpbGwgaGF2ZSBhIGxleGVtZSBvZiBgLyogb25lICovYCBhbmQKICAgKiB0aGUgbmV4dCBjb21tZW50IHRva2VuIHdpbGwgaGF2ZSBhIGxleGVtZSBvZiBgLyogdHdvICovYC4KICAgKi8KICBUb2tlbiBnZXQgcHJlY2VkaW5nQ29tbWVudHM7CgogIC8qKgogICAqIFJldHVybiB0aGUgcHJldmlvdXMgdG9rZW4gaW4gdGhlIHRva2VuIHN0cmVhbS4KICAgKi8KICBUb2tlbiBnZXQgcHJldmlvdXM7CgogIC8qKgogICAqIFNldCB0aGUgcHJldmlvdXMgdG9rZW4gaW4gdGhlIHRva2VuIHN0cmVhbSB0byB0aGUgZ2l2ZW4gW3Rva2VuXS4KICAgKi8KICB2b2lkIHNldCBwcmV2aW91cyhUb2tlbiB0b2tlbik7CgogIC8qKgogICAqIEZvciBzeW1ib2wgYW5kIGtleXdvcmQgdG9rZW5zLCByZXR1cm5zIHRoZSBzdHJpbmcgdmFsdWUgcmVwcmVzZW50ZWQgYnkgdGhpcwogICAqIHRva2VuLiBGb3IgW1N0cmluZ1Rva2VuXXMgdGhpcyBtZXRob2QgcmV0dXJucyBbOm51bGw6XS4KICAgKgogICAqIEZvciBbU3ltYm9sVG9rZW5dcyBhbmQgW0tleXdvcmRUb2tlbl1zLCB0aGUgc3RyaW5nIHZhbHVlIGlzIGEgY29tcGlsZS10aW1lCiAgICogY29uc3RhbnQgb3JpZ2luYXRpbmcgaW4gdGhlIFtUb2tlblR5cGVdIG9yIGluIHRoZSBbS2V5d29yZF0gaW5zdGFuY2UuCiAgICogVGhpcyBhbGxvd3MgdGVzdGluZyBmb3Iga2V5d29yZHMgYW5kIHN5bWJvbHMgdXNpbmcgWzppZGVudGljYWw6XSwgZS5nLiwKICAgKiBbOmlkZW50aWNhbCgnY2xhc3MnLCB0b2tlbi52YWx1ZSk6XS4KICAgKgogICAqIE5vdGUgdGhhdCByZXR1cm5pbmcgWzpudWxsOl0gZm9yIHN0cmluZyB0b2tlbnMgaXMgaW1wb3J0YW50IHRvIGlkZW50aWZ5CiAgICogc3ltYm9scyBhbmQga2V5d29yZHMsIHdlIGNhbm5vdCB1c2UgW2xleGVtZV0gaW5zdGVhZC4gVGhlIHN0cmluZyBsaXRlcmFsCiAgICogICAiJGEoJGIiCiAgICogcHJvZHVjZXMgLi4uLCBTeW1ib2xUb2tlbigkKSwgU3RyaW5nVG9rZW4oYSksIFN0cmluZ1Rva2VuKCgpLCAuLi4KICAgKgogICAqIEFmdGVyIHBhcnNpbmcgdGhlIGlkZW50aWZpZXIgJ2EnLCB0aGUgcGFyc2VyIHRlc3RzIGZvciBhIGZ1bmN0aW9uCiAgICogZGVjbGFyYXRpb24gdXNpbmcgWzppZGVudGljYWwobmV4dC5zdHJpbmdWYWx1ZSwgJygnKTpdLCB3aGljaCAocmlnaHRmdWxseSkKICAgKiByZXR1cm5zIGZhbHNlIGJlY2F1c2Ugc3RyaW5nVmFsdWUgcmV0dXJucyBbOm51bGw6XS4KICAgKi8KICBTdHJpbmcgZ2V0IHN0cmluZ1ZhbHVlOwoKICAvKioKICAgKiBSZXR1cm4gdGhlIHR5cGUgb2YgdGhlIHRva2VuLgogICAqLwogIFRva2VuVHlwZSBnZXQgdHlwZTsKCiAgLyoqCiAgICogUmV0dXJuIGEgbmV3bHkgY3JlYXRlZCB0b2tlbiB0aGF0IGlzIGEgY29weSBvZiB0aGlzIHRva2VucwogICAqIGluY2x1ZGluZyBhbnkgW3ByZWNlZWRpbmdDb21tZW50XSB0b2tlbnMsCiAgICogYnV0IHRoYXQgaXMgbm90IGEgcGFydCBvZiBhbnkgdG9rZW4gc3RyZWFtLgogICAqLwogIFRva2VuIGNvcHkoKTsKCiAgLyoqCiAgICogQ29weSBhIGxpbmtlZCBsaXN0IG9mIGNvbW1lbnQgdG9rZW5zIGlkZW50aWNhbCB0byB0aGUgZ2l2ZW4gY29tbWVudCB0b2tlbnMuCiAgICovCiAgVG9rZW4gY29weUNvbW1lbnRzKFRva2VuIHRva2VuKTsKCiAgLyoqCiAgICogUmV0dXJuIGB0cnVlYCBpZiB0aGlzIHRva2VuIGhhcyBhbnkgb25lIG9mIHRoZSBnaXZlbiBbdHlwZXNdLgogICAqLwogIGJvb2wgbWF0Y2hlc0FueShMaXN0PFRva2VuVHlwZT4gdHlwZXMpOwoKICAvKioKICAgKiBTZXQgdGhlIG5leHQgdG9rZW4gaW4gdGhlIHRva2VuIHN0cmVhbSB0byB0aGUgZ2l2ZW4gW3Rva2VuXS4gVGhpcyBoYXMgdGhlCiAgICogc2lkZS1lZmZlY3Qgb2Ygc2V0dGluZyB0aGlzIHRva2VuIHRvIGJlIHRoZSBwcmV2aW91cyB0b2tlbiBmb3IgdGhlIGdpdmVuCiAgICogdG9rZW4uIFJldHVybiB0aGUgdG9rZW4gdGhhdCB3YXMgcGFzc2VkIGluLgogICAqLwogIFRva2VuIHNldE5leHQoVG9rZW4gdG9rZW4pOwoKICAvKioKICAgKiBTZXQgdGhlIG5leHQgdG9rZW4gaW4gdGhlIHRva2VuIHN0cmVhbSB0byB0aGUgZ2l2ZW4gdG9rZW4gd2l0aG91dCBjaGFuZ2luZwogICAqIHdoaWNoIHRva2VuIGlzIHRoZSBwcmV2aW91cyB0b2tlbiBmb3IgdGhlIGdpdmVuIHRva2VuLiBSZXR1cm4gdGhlIHRva2VuCiAgICogdGhhdCB3YXMgcGFzc2VkIGluLgogICAqLwogIFRva2VuIHNldE5leHRXaXRob3V0U2V0dGluZ1ByZXZpb3VzKFRva2VuIHRva2VuKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhpcyB0b2tlbiB0byBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcKICAgKiBwdXJwb3Nlcy4gVGhlIHJlc3VsdGluZyBzdHJpbmcgbWlnaHQgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUKICAgKiBzdHJ1Y3R1cmUgb2YgdGhlIHRva2VuLCBmb3IgZXhhbXBsZSAnU3RyaW5nVG9rZW4oZm9vKScgZm9yIHRoZSBpZGVudGlmaWVyCiAgICogdG9rZW4gJ2ZvbycuCiAgICoKICAgKiBVc2UgW2xleGVtZV0gZm9yIHRoZSB0ZXh0IGFjdHVhbGx5IHBhcnNlZCBieSB0aGUgdG9rZW4uCiAgICovCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCk7CgogIC8qKgogICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhpcyB0b2tlbi4gRm9yIGtleXdvcmQgdG9rZW5zLCB0aGlzIGlzIHRoZSBrZXl3b3JkCiAgICogYXNzb2NpYXRlZCB3aXRoIHRoZSB0b2tlbiwgZm9yIG90aGVyIHRva2VucyBpdCBpcyB0aGUgbGV4ZW1lIGFzc29jaWF0ZWQKICAgKiB3aXRoIHRoZSB0b2tlbi4KICAgKi8KICBPYmplY3QgdmFsdWUoKTsKCiAgLyoqCiAgICogQ29tcGFyZSB0aGUgZ2l2ZW4gW3Rva2Vuc10gdG8gZmluZCB0aGUgdG9rZW4gdGhhdCBhcHBlYXJzIGZpcnN0IGluIHRoZQogICAqIHNvdXJjZSBiZWluZyBwYXJzZWQuIFRoYXQgaXMsIHJldHVybiB0aGUgbGVmdC1tb3N0IG9mIGFsbCBvZiB0aGUgdG9rZW5zLgogICAqIFRoZSBsaXN0IG11c3QgYmUgbm9uLWBudWxsYCwgYnV0IHRoZSBlbGVtZW50cyBvZiB0aGUgbGlzdCBhcmUgYWxsb3dlZCB0byBiZQogICAqIGBudWxsYC4gUmV0dXJuIHRoZSB0b2tlbiB3aXRoIHRoZSBzbWFsbGVzdCBvZmZzZXQsIG9yIGBudWxsYCBpZiB0aGUgbGlzdCBpcwogICAqIGVtcHR5IG9yIGlmIGFsbCBvZiB0aGUgZWxlbWVudHMgb2YgdGhlIGxpc3QgYXJlIGBudWxsYC4KICAgKi8KICBzdGF0aWMgVG9rZW4gbGV4aWNhbGx5Rmlyc3QoTGlzdDxUb2tlbj4gdG9rZW5zKSB7CiAgICBUb2tlbiBmaXJzdCA9IG51bGw7CiAgICBpbnQgb2Zmc2V0ID0gLTE7CiAgICBpbnQgbGVuZ3RoID0gdG9rZW5zLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgVG9rZW4gdG9rZW4gPSB0b2tlbnNbaV07CiAgICAgIGlmICh0b2tlbiAhPSBudWxsICYmIChvZmZzZXQgPCAwIHx8IHRva2VuLm9mZnNldCA8IG9mZnNldCkpIHsKICAgICAgICBmaXJzdCA9IHRva2VuOwogICAgICAgIG9mZnNldCA9IHRva2VuLm9mZnNldDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZpcnN0OwogIH0KfQoKLyoqCiAqIFRoZSBjbGFzc2VzIChvciBncm91cHMpIG9mIHRva2VucyB3aXRoIGEgc2ltaWxhciB1c2UuCiAqLwpjbGFzcyBUb2tlbkNsYXNzIHsKICAvKioKICAgKiBBIHZhbHVlIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdG9rZW4gdHlwZSBpcyBub3QgcGFydCBvZiBhbnkgc3BlY2lmaWMKICAgKiBjbGFzcyBvZiB0b2tlbi4KICAgKi8KICBzdGF0aWMgY29uc3QgVG9rZW5DbGFzcyBOT19DTEFTUyA9IGNvbnN0IFRva2VuQ2xhc3MoJ05PX0NMQVNTJyk7CgogIC8qKgogICAqIEEgdmFsdWUgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0b2tlbiB0eXBlIGlzIGFuIGFkZGl0aXZlIG9wZXJhdG9yLgogICAqLwogIHN0YXRpYyBjb25zdCBUb2tlbkNsYXNzIEFERElUSVZFX09QRVJBVE9SID0KICAgICAgY29uc3QgVG9rZW5DbGFzcygnQURESVRJVkVfT1BFUkFUT1InLCBBRERJVElWRV9QUkVDRURFTkNFKTsKCiAgLyoqCiAgICogQSB2YWx1ZSB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHRva2VuIHR5cGUgaXMgYW4gYXNzaWdubWVudCBvcGVyYXRvci4KICAgKi8KICBzdGF0aWMgY29uc3QgVG9rZW5DbGFzcyBBU1NJR05NRU5UX09QRVJBVE9SID0KICAgICAgY29uc3QgVG9rZW5DbGFzcygnQVNTSUdOTUVOVF9PUEVSQVRPUicsIEFTU0lHTk1FTlRfUFJFQ0VERU5DRSk7CgogIC8qKgogICAqIEEgdmFsdWUgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0b2tlbiB0eXBlIGlzIGEgYml0d2lzZS1hbmQgb3BlcmF0b3IuCiAgICovCiAgc3RhdGljIGNvbnN0IFRva2VuQ2xhc3MgQklUV0lTRV9BTkRfT1BFUkFUT1IgPQogICAgICBjb25zdCBUb2tlbkNsYXNzKCdCSVRXSVNFX0FORF9PUEVSQVRPUicsIEJJVFdJU0VfQU5EX1BSRUNFREVOQ0UpOwoKICAvKioKICAgKiBBIHZhbHVlIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdG9rZW4gdHlwZSBpcyBhIGJpdHdpc2Utb3Igb3BlcmF0b3IuCiAgICovCiAgc3RhdGljIGNvbnN0IFRva2VuQ2xhc3MgQklUV0lTRV9PUl9PUEVSQVRPUiA9CiAgICAgIGNvbnN0IFRva2VuQ2xhc3MoJ0JJVFdJU0VfT1JfT1BFUkFUT1InLCBCSVRXSVNFX09SX1BSRUNFREVOQ0UpOwoKICAvKioKICAgKiBBIHZhbHVlIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdG9rZW4gdHlwZSBpcyBhIGJpdHdpc2UteG9yIG9wZXJhdG9yLgogICAqLwogIHN0YXRpYyBjb25zdCBUb2tlbkNsYXNzIEJJVFdJU0VfWE9SX09QRVJBVE9SID0KICAgICAgY29uc3QgVG9rZW5DbGFzcygnQklUV0lTRV9YT1JfT1BFUkFUT1InLCBCSVRXSVNFX1hPUl9QUkVDRURFTkNFKTsKCiAgLyoqCiAgICogQSB2YWx1ZSB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHRva2VuIHR5cGUgaXMgYSBjYXNjYWRlIG9wZXJhdG9yLgogICAqLwogIHN0YXRpYyBjb25zdCBUb2tlbkNsYXNzIENBU0NBREVfT1BFUkFUT1IgPQogICAgICBjb25zdCBUb2tlbkNsYXNzKCdDQVNDQURFX09QRVJBVE9SJywgQ0FTQ0FERV9QUkVDRURFTkNFKTsKCiAgLyoqCiAgICogQSB2YWx1ZSB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHRva2VuIHR5cGUgaXMgYSBjb25kaXRpb25hbCBvcGVyYXRvci4KICAgKi8KICBzdGF0aWMgY29uc3QgVG9rZW5DbGFzcyBDT05ESVRJT05BTF9PUEVSQVRPUiA9CiAgICAgIGNvbnN0IFRva2VuQ2xhc3MoJ0NPTkRJVElPTkFMX09QRVJBVE9SJywgQ09ORElUSU9OQUxfUFJFQ0VERU5DRSk7CgogIC8qKgogICAqIEEgdmFsdWUgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0b2tlbiB0eXBlIGlzIGFuIGVxdWFsaXR5IG9wZXJhdG9yLgogICAqLwogIHN0YXRpYyBjb25zdCBUb2tlbkNsYXNzIEVRVUFMSVRZX09QRVJBVE9SID0KICAgICAgY29uc3QgVG9rZW5DbGFzcygnRVFVQUxJVFlfT1BFUkFUT1InLCBFUVVBTElUWV9QUkVDRURFTkNFKTsKCiAgLyoqCiAgICogQSB2YWx1ZSB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHRva2VuIHR5cGUgaXMgYW4gaWYtbnVsbCBvcGVyYXRvci4KICAgKi8KICBzdGF0aWMgY29uc3QgVG9rZW5DbGFzcyBJRl9OVUxMX09QRVJBVE9SID0KICAgICAgY29uc3QgVG9rZW5DbGFzcygnSUZfTlVMTF9PUEVSQVRPUicsIElGX05VTExfUFJFQ0VERU5DRSk7CgogIC8qKgogICAqIEEgdmFsdWUgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0b2tlbiB0eXBlIGlzIGEgbG9naWNhbC1hbmQgb3BlcmF0b3IuCiAgICovCiAgc3RhdGljIGNvbnN0IFRva2VuQ2xhc3MgTE9HSUNBTF9BTkRfT1BFUkFUT1IgPQogICAgICBjb25zdCBUb2tlbkNsYXNzKCdMT0dJQ0FMX0FORF9PUEVSQVRPUicsIExPR0lDQUxfQU5EX1BSRUNFREVOQ0UpOwoKICAvKioKICAgKiBBIHZhbHVlIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdG9rZW4gdHlwZSBpcyBhIGxvZ2ljYWwtb3Igb3BlcmF0b3IuCiAgICovCiAgc3RhdGljIGNvbnN0IFRva2VuQ2xhc3MgTE9HSUNBTF9PUl9PUEVSQVRPUiA9CiAgICAgIGNvbnN0IFRva2VuQ2xhc3MoJ0xPR0lDQUxfT1JfT1BFUkFUT1InLCBMT0dJQ0FMX09SX1BSRUNFREVOQ0UpOwoKICAvKioKICAgKiBBIHZhbHVlIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdG9rZW4gdHlwZSBpcyBhIG11bHRpcGxpY2F0aXZlIG9wZXJhdG9yLgogICAqLwogIHN0YXRpYyBjb25zdCBUb2tlbkNsYXNzIE1VTFRJUExJQ0FUSVZFX09QRVJBVE9SID0KICAgICAgY29uc3QgVG9rZW5DbGFzcygnTVVMVElQTElDQVRJVkVfT1BFUkFUT1InLCBNVUxUSVBMSUNBVElWRV9QUkVDRURFTkNFKTsKCiAgLyoqCiAgICogQSB2YWx1ZSB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHRva2VuIHR5cGUgaXMgYSByZWxhdGlvbmFsIG9wZXJhdG9yLgogICAqLwogIHN0YXRpYyBjb25zdCBUb2tlbkNsYXNzIFJFTEFUSU9OQUxfT1BFUkFUT1IgPQogICAgICBjb25zdCBUb2tlbkNsYXNzKCdSRUxBVElPTkFMX09QRVJBVE9SJywgUkVMQVRJT05BTF9QUkVDRURFTkNFKTsKCiAgLyoqCiAgICogQSB2YWx1ZSB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHRva2VuIHR5cGUgaXMgYSBzaGlmdCBvcGVyYXRvci4KICAgKi8KICBzdGF0aWMgY29uc3QgVG9rZW5DbGFzcyBTSElGVF9PUEVSQVRPUiA9CiAgICAgIGNvbnN0IFRva2VuQ2xhc3MoJ1NISUZUX09QRVJBVE9SJywgU0hJRlRfUFJFQ0VERU5DRSk7CgogIC8qKgogICAqIEEgdmFsdWUgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0b2tlbiB0eXBlIGlzIGEgdW5hcnkgb3BlcmF0b3IuCiAgICovCiAgc3RhdGljIGNvbnN0IFRva2VuQ2xhc3MgVU5BUllfUE9TVEZJWF9PUEVSQVRPUiA9CiAgICAgIGNvbnN0IFRva2VuQ2xhc3MoJ1VOQVJZX1BPU1RGSVhfT1BFUkFUT1InLCBQT1NURklYX1BSRUNFREVOQ0UpOwoKICAvKioKICAgKiBBIHZhbHVlIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdG9rZW4gdHlwZSBpcyBhIHVuYXJ5IG9wZXJhdG9yLgogICAqLwogIHN0YXRpYyBjb25zdCBUb2tlbkNsYXNzIFVOQVJZX1BSRUZJWF9PUEVSQVRPUiA9CiAgICAgIGNvbnN0IFRva2VuQ2xhc3MoJ1VOQVJZX1BSRUZJWF9PUEVSQVRPUicsIFBSRUZJWF9QUkVDRURFTkNFKTsKCiAgLyoqCiAgICogVGhlIG5hbWUgb2YgdGhlIHRva2VuIGNsYXNzLgogICAqLwogIGZpbmFsIFN0cmluZyBuYW1lOwoKICAvKioKICAgKiBUaGUgcHJlY2VkZW5jZSBvZiB0b2tlbnMgb2YgdGhpcyBjbGFzcywgb3IgYDBgIGlmIHRoZSBzdWNoIHRva2VucyBkbyBub3QKICAgKiByZXByZXNlbnQgYW4gb3BlcmF0b3IuCiAgICovCiAgZmluYWwgaW50IHByZWNlZGVuY2U7CgogIC8qKgogICAqIEluaXRpYWxpemUgYSBuZXdseSBjcmVhdGVkIGNsYXNzIG9mIHRva2VucyB0byBoYXZlIHRoZSBnaXZlbiBbbmFtZV0gYW5kCiAgICogW3ByZWNlZGVuY2VdLgogICAqLwogIGNvbnN0IFRva2VuQ2xhc3ModGhpcy5uYW1lLCBbdGhpcy5wcmVjZWRlbmNlID0gTk9fUFJFQ0VERU5DRV0pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBuYW1lOwp9CgovKioKICogVGhlIHR5cGVzIG9mIHRva2VucyB0aGF0IGNhbiBiZSByZXR1cm5lZCBieSB0aGUgc2Nhbm5lci4KICoKICogQ2xpZW50cyBtYXkgbm90IGV4dGVuZCwgaW1wbGVtZW50IG9yIG1peC1pbiB0aGlzIGNsYXNzLgogKi8KY2xhc3MgVG9rZW5UeXBlIHsKICAvKioKICAgKiBUaGUgdHlwZSBvZiB0aGUgdG9rZW4gdGhhdCBtYXJrcyB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZSBpbnB1dC4KICAgKi8KICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEVPRiA9CiAgICAgIGNvbnN0IFRva2VuVHlwZSgnJywgJ0VPRicsIE5PX1BSRUNFREVOQ0UsIEVPRl9UT0tFTik7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgRE9VQkxFID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnZG91YmxlJywgJ0RPVUJMRScsIE5PX1BSRUNFREVOQ0UsIERPVUJMRV9UT0tFTiwKICAgICAgc3RyaW5nVmFsdWU6IG51bGwpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEhFWEFERUNJTUFMID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnaGV4YWRlY2ltYWwnLCAnSEVYQURFQ0lNQUwnLCBOT19QUkVDRURFTkNFLCBIRVhBREVDSU1BTF9UT0tFTiwKICAgICAgc3RyaW5nVmFsdWU6IG51bGwpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIElERU5USUZJRVIgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICdpZGVudGlmaWVyJywgJ0lERU5USUZJRVInLCBOT19QUkVDRURFTkNFLCBJREVOVElGSUVSX1RPS0VOLAogICAgICBzdHJpbmdWYWx1ZTogbnVsbCk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgSU5UID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnaW50JywgJ0lOVCcsIE5PX1BSRUNFREVOQ0UsIElOVF9UT0tFTiwKICAgICAgc3RyaW5nVmFsdWU6IG51bGwpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIE1VTFRJX0xJTkVfQ09NTUVOVCA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJ2NvbW1lbnQnLCAnTVVMVElfTElORV9DT01NRU5UJywgTk9fUFJFQ0VERU5DRSwgQ09NTUVOVF9UT0tFTiwKICAgICAgc3RyaW5nVmFsdWU6IG51bGwpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIFNDUklQVF9UQUcgPQogICAgICBjb25zdCBUb2tlblR5cGUoJ3NjcmlwdCcsICdTQ1JJUFRfVEFHJywgTk9fUFJFQ0VERU5DRSwgU0NSSVBUX1RPS0VOKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBTSU5HTEVfTElORV9DT01NRU5UID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnY29tbWVudCcsICdTSU5HTEVfTElORV9DT01NRU5UJywgTk9fUFJFQ0VERU5DRSwgQ09NTUVOVF9UT0tFTiwKICAgICAgc3RyaW5nVmFsdWU6IG51bGwpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIFNUUklORyA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJ3N0cmluZycsICdTVFJJTkcnLCBOT19QUkVDRURFTkNFLCBTVFJJTkdfVE9LRU4sCiAgICAgIHN0cmluZ1ZhbHVlOiBudWxsKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBBTVBFUlNBTkQgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICcmJywgJ0FNUEVSU0FORCcsIEJJVFdJU0VfQU5EX1BSRUNFREVOQ0UsIEFNUEVSU0FORF9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSwgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEFNUEVSU0FORF9BTVBFUlNBTkQgPSBjb25zdCBUb2tlblR5cGUoJyYmJywKICAgICAgJ0FNUEVSU0FORF9BTVBFUlNBTkQnLCBMT0dJQ0FMX0FORF9QUkVDRURFTkNFLCBBTVBFUlNBTkRfQU1QRVJTQU5EX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlKTsKCiAgLy8gVGhpcyBpcyBub3QgeWV0IHBhcnQgb2YgdGhlIGxhbmd1YWdlIGFuZCBub3Qgc3VwcG9ydGVkIGJ5IGZhc3RhCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBBTVBFUlNBTkRfQU1QRVJTQU5EX0VRID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnJiY9JywKICAgICAgJ0FNUEVSU0FORF9BTVBFUlNBTkRfRVEnLAogICAgICBBU1NJR05NRU5UX1BSRUNFREVOQ0UsCiAgICAgIEFNUEVSU0FORF9BTVBFUlNBTkRfRVFfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEFNUEVSU0FORF9FUSA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJyY9JywgJ0FNUEVSU0FORF9FUScsIEFTU0lHTk1FTlRfUFJFQ0VERU5DRSwgQU1QRVJTQU5EX0VRX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBBVCA9CiAgICAgIGNvbnN0IFRva2VuVHlwZSgnQCcsICdBVCcsIE5PX1BSRUNFREVOQ0UsIEFUX1RPS0VOKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBCQU5HID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnIScsICdCQU5HJywgUFJFRklYX1BSRUNFREVOQ0UsIEJBTkdfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEJBTkdfRVEgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICchPScsICdCQU5HX0VRJywgRVFVQUxJVFlfUFJFQ0VERU5DRSwgQkFOR19FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgQkFOR19FUV9FUSA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJyE9PScsICdCQU5HX0VRX0VRJywgRVFVQUxJVFlfUFJFQ0VERU5DRSwgQkFOR19FUV9FUV9UT0tFTik7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgQkFSID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnfCcsICdCQVInLCBCSVRXSVNFX09SX1BSRUNFREVOQ0UsIEJBUl9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSwgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEJBUl9CQVIgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICd8fCcsICdCQVJfQkFSJywgTE9HSUNBTF9PUl9QUkVDRURFTkNFLCBCQVJfQkFSX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlKTsKCiAgLy8gVGhpcyBpcyBub3QgeWV0IHBhcnQgb2YgdGhlIGxhbmd1YWdlIGFuZCBub3Qgc3VwcG9ydGVkIGJ5IGZhc3RhCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBCQVJfQkFSX0VRID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnfHw9JywgJ0JBUl9CQVJfRVEnLCBBU1NJR05NRU5UX1BSRUNFREVOQ0UsIEJBUl9CQVJfRVFfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEJBUl9FUSA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJ3w9JywgJ0JBUl9FUScsIEFTU0lHTk1FTlRfUFJFQ0VERU5DRSwgQkFSX0VRX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBDT0xPTiA9CiAgICAgIGNvbnN0IFRva2VuVHlwZSgnOicsICdDT0xPTicsIE5PX1BSRUNFREVOQ0UsIENPTE9OX1RPS0VOKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBDT01NQSA9CiAgICAgIGNvbnN0IFRva2VuVHlwZSgnLCcsICdDT01NQScsIE5PX1BSRUNFREVOQ0UsIENPTU1BX1RPS0VOKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBDQVJFVCA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJ14nLCAnQ0FSRVQnLCBCSVRXSVNFX1hPUl9QUkVDRURFTkNFLCBDQVJFVF9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSwgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIENBUkVUX0VRID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnXj0nLCAnQ0FSRVRfRVEnLCBBU1NJR05NRU5UX1BSRUNFREVOQ0UsIENBUkVUX0VRX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBDTE9TRV9DVVJMWV9CUkFDS0VUID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnfScsICdDTE9TRV9DVVJMWV9CUkFDS0VUJywgTk9fUFJFQ0VERU5DRSwgQ0xPU0VfQ1VSTFlfQlJBQ0tFVF9UT0tFTik7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgQ0xPU0VfUEFSRU4gPQogICAgICBjb25zdCBUb2tlblR5cGUoJyknLCAnQ0xPU0VfUEFSRU4nLCBOT19QUkVDRURFTkNFLCBDTE9TRV9QQVJFTl9UT0tFTik7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgQ0xPU0VfU1FVQVJFX0JSQUNLRVQgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICddJywgJ0NMT1NFX1NRVUFSRV9CUkFDS0VUJywgTk9fUFJFQ0VERU5DRSwgQ0xPU0VfU1FVQVJFX0JSQUNLRVRfVE9LRU4pOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEVRID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnPScsICdFUScsIEFTU0lHTk1FTlRfUFJFQ0VERU5DRSwgRVFfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEVRX0VRID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnPT0nLCAnRVFfRVEnLCBFUVVBTElUWV9QUkVDRURFTkNFLCBFUV9FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSwgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I6IHRydWUpOwoKICAvLy8gVGhlIGA9PT1gIG9wZXJhdG9yIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIERhcnQgbGFuZ3VhZ2UKICAvLy8gYnV0IGlzIHBhcnNlZCBhcyBzdWNoIGJ5IHRoZSBzY2FubmVyIHRvIHN1cHBvcnQgYmV0dGVyIHJlY292ZXJ5CiAgLy8vIHdoZW4gYSBKYXZhU2NyaXB0IGNvZGUgc25pcHBldCBpcyBwYXN0ZWQgaW50byBhIERhcnQgZmlsZS4KICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEVRX0VRX0VRID0KICAgICAgY29uc3QgVG9rZW5UeXBlKCc9PT0nLCAnRVFfRVFfRVEnLCBFUVVBTElUWV9QUkVDRURFTkNFLCBFUV9FUV9FUV9UT0tFTik7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgRlVOQ1RJT04gPQogICAgICBjb25zdCBUb2tlblR5cGUoJz0+JywgJ0ZVTkNUSU9OJywgTk9fUFJFQ0VERU5DRSwgRlVOQ1RJT05fVE9LRU4pOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEdUID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnPicsICdHVCcsIFJFTEFUSU9OQUxfUFJFQ0VERU5DRSwgR1RfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUsIGlzVXNlckRlZmluYWJsZU9wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBHVF9FUSA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJz49JywgJ0dUX0VRJywgUkVMQVRJT05BTF9QUkVDRURFTkNFLCBHVF9FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSwgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEdUX0dUID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnPj4nLCAnR1RfR1QnLCBTSElGVF9QUkVDRURFTkNFLCBHVF9HVF9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSwgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEdUX0dUX0VRID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnPj49JywgJ0dUX0dUX0VRJywgQVNTSUdOTUVOVF9QUkVDRURFTkNFLCBHVF9HVF9FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgR1RfR1RfR1QgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICc+Pj4nLCAnR1RfR1RfR1QnLCBTSElGVF9QUkVDRURFTkNFLCBHVF9HVF9HVF9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSwgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEdUX0dUX0dUX0VRID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnPj4+PScsICdHVF9HVF9HVF9FUScsIEFTU0lHTk1FTlRfUFJFQ0VERU5DRSwgR1RfR1RfR1RfRVFfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEhBU0ggPQogICAgICBjb25zdCBUb2tlblR5cGUoJyMnLCAnSEFTSCcsIE5PX1BSRUNFREVOQ0UsIEhBU0hfVE9LRU4pOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIElOREVYID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnW10nLCAnSU5ERVgnLCBTRUxFQ1RPUl9QUkVDRURFTkNFLCBJTkRFWF9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSwgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIElOREVYX0VRID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnW109JywgJ0lOREVYX0VRJywgTk9fUFJFQ0VERU5DRSwgSU5ERVhfRVFfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUsIGlzVXNlckRlZmluYWJsZU9wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBMVCA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJzwnLCAnTFQnLCBSRUxBVElPTkFMX1BSRUNFREVOQ0UsIExUX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlLCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgTFRfRVEgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICc8PScsICdMVF9FUScsIFJFTEFUSU9OQUxfUFJFQ0VERU5DRSwgTFRfRVFfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUsIGlzVXNlckRlZmluYWJsZU9wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBMVF9MVCA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJzw8JywgJ0xUX0xUJywgU0hJRlRfUFJFQ0VERU5DRSwgTFRfTFRfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUsIGlzVXNlckRlZmluYWJsZU9wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBMVF9MVF9FUSA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJzw8PScsICdMVF9MVF9FUScsIEFTU0lHTk1FTlRfUFJFQ0VERU5DRSwgTFRfTFRfRVFfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIE1JTlVTID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnLScsICdNSU5VUycsIEFERElUSVZFX1BSRUNFREVOQ0UsIE1JTlVTX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlLCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgTUlOVVNfRVEgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICctPScsICdNSU5VU19FUScsIEFTU0lHTk1FTlRfUFJFQ0VERU5DRSwgTUlOVVNfRVFfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIE1JTlVTX01JTlVTID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnLS0nLCAnTUlOVVNfTUlOVVMnLCBQT1NURklYX1BSRUNFREVOQ0UsIE1JTlVTX01JTlVTX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBPUEVOX0NVUkxZX0JSQUNLRVQgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICd7JywgJ09QRU5fQ1VSTFlfQlJBQ0tFVCcsIE5PX1BSRUNFREVOQ0UsIE9QRU5fQ1VSTFlfQlJBQ0tFVF9UT0tFTik7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgT1BFTl9QQVJFTiA9CiAgICAgIGNvbnN0IFRva2VuVHlwZSgnKCcsICdPUEVOX1BBUkVOJywgU0VMRUNUT1JfUFJFQ0VERU5DRSwgT1BFTl9QQVJFTl9UT0tFTik7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgT1BFTl9TUVVBUkVfQlJBQ0tFVCA9IGNvbnN0IFRva2VuVHlwZSgnWycsCiAgICAgICdPUEVOX1NRVUFSRV9CUkFDS0VUJywgU0VMRUNUT1JfUFJFQ0VERU5DRSwgT1BFTl9TUVVBUkVfQlJBQ0tFVF9UT0tFTik7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgUEVSQ0VOVCA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJyUnLCAnUEVSQ0VOVCcsIE1VTFRJUExJQ0FUSVZFX1BSRUNFREVOQ0UsIFBFUkNFTlRfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUsIGlzVXNlckRlZmluYWJsZU9wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBQRVJDRU5UX0VRID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnJT0nLCAnUEVSQ0VOVF9FUScsIEFTU0lHTk1FTlRfUFJFQ0VERU5DRSwgUEVSQ0VOVF9FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgUEVSSU9EID0KICAgICAgY29uc3QgVG9rZW5UeXBlKCcuJywgJ1BFUklPRCcsIFNFTEVDVE9SX1BSRUNFREVOQ0UsIFBFUklPRF9UT0tFTik7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgUEVSSU9EX1BFUklPRCA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJy4uJywgJ1BFUklPRF9QRVJJT0QnLCBDQVNDQURFX1BSRUNFREVOQ0UsIFBFUklPRF9QRVJJT0RfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIFBMVVMgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICcrJywgJ1BMVVMnLCBBRERJVElWRV9QUkVDRURFTkNFLCBQTFVTX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlLCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgUExVU19FUSA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJys9JywgJ1BMVVNfRVEnLCBBU1NJR05NRU5UX1BSRUNFREVOQ0UsIFBMVVNfRVFfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIFBMVVNfUExVUyA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJysrJywgJ1BMVVNfUExVUycsIFBPU1RGSVhfUFJFQ0VERU5DRSwgUExVU19QTFVTX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBRVUVTVElPTiA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJz8nLCAnUVVFU1RJT04nLCBDT05ESVRJT05BTF9QUkVDRURFTkNFLCBRVUVTVElPTl9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgUVVFU1RJT05fUEVSSU9EID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnPy4nLCAnUVVFU1RJT05fUEVSSU9EJywgU0VMRUNUT1JfUFJFQ0VERU5DRSwgUVVFU1RJT05fUEVSSU9EX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBRVUVTVElPTl9RVUVTVElPTiA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJz8/JywgJ1FVRVNUSU9OX1FVRVNUSU9OJywgSUZfTlVMTF9QUkVDRURFTkNFLCBRVUVTVElPTl9RVUVTVElPTl9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgUVVFU1RJT05fUVVFU1RJT05fRVEgPSBjb25zdCBUb2tlblR5cGUoJz8/PScsCiAgICAgICdRVUVTVElPTl9RVUVTVElPTl9FUScsIEFTU0lHTk1FTlRfUFJFQ0VERU5DRSwgUVVFU1RJT05fUVVFU1RJT05fRVFfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIFNFTUlDT0xPTiA9CiAgICAgIGNvbnN0IFRva2VuVHlwZSgnOycsICdTRU1JQ09MT04nLCBOT19QUkVDRURFTkNFLCBTRU1JQ09MT05fVE9LRU4pOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIFNMQVNIID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnLycsICdTTEFTSCcsIE1VTFRJUExJQ0FUSVZFX1BSRUNFREVOQ0UsIFNMQVNIX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlLCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgU0xBU0hfRVEgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICcvPScsICdTTEFTSF9FUScsIEFTU0lHTk1FTlRfUFJFQ0VERU5DRSwgU0xBU0hfRVFfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIFNUQVIgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICcqJywgJ1NUQVInLCBNVUxUSVBMSUNBVElWRV9QUkVDRURFTkNFLCBTVEFSX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlLCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgU1RBUl9FUSA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJyo9JywgJ1NUQVJfRVEnLCBBU1NJR05NRU5UX1BSRUNFREVOQ0UsIFNUQVJfRVFfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIFNUUklOR19JTlRFUlBPTEFUSU9OX0VYUFJFU1NJT04gPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICdcJHsnLAogICAgICAnU1RSSU5HX0lOVEVSUE9MQVRJT05fRVhQUkVTU0lPTicsCiAgICAgIE5PX1BSRUNFREVOQ0UsCiAgICAgIFNUUklOR19JTlRFUlBPTEFUSU9OX1RPS0VOKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBTVFJJTkdfSU5URVJQT0xBVElPTl9JREVOVElGSUVSID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnXCQnLAogICAgICAnU1RSSU5HX0lOVEVSUE9MQVRJT05fSURFTlRJRklFUicsCiAgICAgIE5PX1BSRUNFREVOQ0UsCiAgICAgIFNUUklOR19JTlRFUlBPTEFUSU9OX0lERU5USUZJRVJfVE9LRU4pOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIFRJTERFID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnficsICdUSUxERScsIFBSRUZJWF9QUkVDRURFTkNFLCBUSUxERV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSwgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIFRJTERFX1NMQVNIID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnfi8nLCAnVElMREVfU0xBU0gnLCBNVUxUSVBMSUNBVElWRV9QUkVDRURFTkNFLCBUSUxERV9TTEFTSF9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSwgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIFRJTERFX1NMQVNIX0VRID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnfi89JywgJ1RJTERFX1NMQVNIX0VRJywgQVNTSUdOTUVOVF9QUkVDRURFTkNFLCBUSUxERV9TTEFTSF9FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgQkFDS1BJTkcgPQogICAgICBjb25zdCBUb2tlblR5cGUoJ2AnLCAnQkFDS1BJTkcnLCBOT19QUkVDRURFTkNFLCBCQUNLUElOR19UT0tFTik7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgQkFDS1NMQVNIID0KICAgICAgY29uc3QgVG9rZW5UeXBlKCdcXCcsICdCQUNLU0xBU0gnLCBOT19QUkVDRURFTkNFLCBCQUNLU0xBU0hfVE9LRU4pOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIFBFUklPRF9QRVJJT0RfUEVSSU9EID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnLi4uJywgJ1BFUklPRF9QRVJJT0RfUEVSSU9EJywgTk9fUFJFQ0VERU5DRSwgUEVSSU9EX1BFUklPRF9QRVJJT0RfVE9LRU4pOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIFBFUklPRF9QRVJJT0RfUEVSSU9EX1FVRVNUSU9OID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnLi4uPycsCiAgICAgICdQRVJJT0RfUEVSSU9EX1BFUklPRF9RVUVTVElPTicsCiAgICAgIE5PX1BSRUNFREVOQ0UsCiAgICAgIFBFUklPRF9QRVJJT0RfUEVSSU9EX1FVRVNUSU9OX1RPS0VOKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBRVUVTVElPTl9QRVJJT0RfT1BFTl9TUVVBUkVfQlJBQ0tFVCA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJz8uWycsCiAgICAgICdRVUVTVElPTl9QRVJJT0RfT1BFTl9TUVVBUkVfQlJBQ0tFVCcsCiAgICAgIFNFTEVDVE9SX1BSRUNFREVOQ0UsCiAgICAgIFFVRVNUSU9OX1BFUklPRF9PUEVOX1NRVUFSRV9CUkFDS0VUX1RPS0VOKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBBUyA9IEtleXdvcmQuQVM7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgSVMgPSBLZXl3b3JkLklTOwoKICAvKioKICAgKiBUb2tlbiB0eXBlIHVzZWQgYnkgZXJyb3IgdG9rZW5zLgogICAqLwogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgQkFEX0lOUFVUID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnbWFsZm9ybWVkIGlucHV0JywgJ0JBRF9JTlBVVCcsIE5PX1BSRUNFREVOQ0UsIEJBRF9JTlBVVF9UT0tFTiwKICAgICAgc3RyaW5nVmFsdWU6IG51bGwpOwoKICAvKioKICAgKiBUb2tlbiB0eXBlIHVzZWQgYnkgc3ludGhldGljIHRva2VucyB0aGF0IGFyZSBjcmVhdGVkIGR1cmluZyBwYXJzZXIKICAgKiByZWNvdmVyeSAobm9uLWFuYWx5emVyIHVzZSBjYXNlKS4KICAgKi8KICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIFJFQ09WRVJZID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAncmVjb3ZlcnknLCAnUkVDT1ZFUlknLCBOT19QUkVDRURFTkNFLCBSRUNPVkVSWV9UT0tFTiwKICAgICAgc3RyaW5nVmFsdWU6IG51bGwpOwoKICAvLyBUT0RPKGRhbnJ1YmVsKTogImFsbCIgaXMgbWlzbGVhZGluZwogIC8vIGJlY2F1c2UgdGhpcyBsaXN0IGRvZXMgbm90IGluY2x1ZGUgYWxsIFRva2VuVHlwZSBpbnN0YW5jZXMuCiAgc3RhdGljIGNvbnN0IExpc3Q8VG9rZW5UeXBlPiBhbGwgPSBjb25zdCA8VG9rZW5UeXBlPlsKICAgIFRva2VuVHlwZS5FT0YsCiAgICBUb2tlblR5cGUuRE9VQkxFLAogICAgVG9rZW5UeXBlLkhFWEFERUNJTUFMLAogICAgVG9rZW5UeXBlLklERU5USUZJRVIsCiAgICBUb2tlblR5cGUuSU5ULAogICAgVG9rZW5UeXBlLk1VTFRJX0xJTkVfQ09NTUVOVCwKICAgIFRva2VuVHlwZS5TQ1JJUFRfVEFHLAogICAgVG9rZW5UeXBlLlNJTkdMRV9MSU5FX0NPTU1FTlQsCiAgICBUb2tlblR5cGUuU1RSSU5HLAogICAgVG9rZW5UeXBlLkFNUEVSU0FORCwKICAgIFRva2VuVHlwZS5BTVBFUlNBTkRfQU1QRVJTQU5ELAogICAgVG9rZW5UeXBlLkFNUEVSU0FORF9FUSwKICAgIFRva2VuVHlwZS5BVCwKICAgIFRva2VuVHlwZS5CQU5HLAogICAgVG9rZW5UeXBlLkJBTkdfRVEsCiAgICBUb2tlblR5cGUuQkFSLAogICAgVG9rZW5UeXBlLkJBUl9CQVIsCiAgICBUb2tlblR5cGUuQkFSX0VRLAogICAgVG9rZW5UeXBlLkNPTE9OLAogICAgVG9rZW5UeXBlLkNPTU1BLAogICAgVG9rZW5UeXBlLkNBUkVULAogICAgVG9rZW5UeXBlLkNBUkVUX0VRLAogICAgVG9rZW5UeXBlLkNMT1NFX0NVUkxZX0JSQUNLRVQsCiAgICBUb2tlblR5cGUuQ0xPU0VfUEFSRU4sCiAgICBUb2tlblR5cGUuQ0xPU0VfU1FVQVJFX0JSQUNLRVQsCiAgICBUb2tlblR5cGUuRVEsCiAgICBUb2tlblR5cGUuRVFfRVEsCiAgICBUb2tlblR5cGUuRlVOQ1RJT04sCiAgICBUb2tlblR5cGUuR1QsCiAgICBUb2tlblR5cGUuR1RfRVEsCiAgICBUb2tlblR5cGUuR1RfR1QsCiAgICBUb2tlblR5cGUuR1RfR1RfRVEsCiAgICBUb2tlblR5cGUuSEFTSCwKICAgIFRva2VuVHlwZS5JTkRFWCwKICAgIFRva2VuVHlwZS5JTkRFWF9FUSwKICAgIFRva2VuVHlwZS5MVCwKICAgIFRva2VuVHlwZS5MVF9FUSwKICAgIFRva2VuVHlwZS5MVF9MVCwKICAgIFRva2VuVHlwZS5MVF9MVF9FUSwKICAgIFRva2VuVHlwZS5NSU5VUywKICAgIFRva2VuVHlwZS5NSU5VU19FUSwKICAgIFRva2VuVHlwZS5NSU5VU19NSU5VUywKICAgIFRva2VuVHlwZS5PUEVOX0NVUkxZX0JSQUNLRVQsCiAgICBUb2tlblR5cGUuT1BFTl9QQVJFTiwKICAgIFRva2VuVHlwZS5PUEVOX1NRVUFSRV9CUkFDS0VULAogICAgVG9rZW5UeXBlLlBFUkNFTlQsCiAgICBUb2tlblR5cGUuUEVSQ0VOVF9FUSwKICAgIFRva2VuVHlwZS5QRVJJT0QsCiAgICBUb2tlblR5cGUuUEVSSU9EX1BFUklPRCwKICAgIFRva2VuVHlwZS5QTFVTLAogICAgVG9rZW5UeXBlLlBMVVNfRVEsCiAgICBUb2tlblR5cGUuUExVU19QTFVTLAogICAgVG9rZW5UeXBlLlFVRVNUSU9OLAogICAgVG9rZW5UeXBlLlFVRVNUSU9OX1BFUklPRCwKICAgIFRva2VuVHlwZS5RVUVTVElPTl9RVUVTVElPTiwKICAgIFRva2VuVHlwZS5RVUVTVElPTl9RVUVTVElPTl9FUSwKICAgIFRva2VuVHlwZS5TRU1JQ09MT04sCiAgICBUb2tlblR5cGUuU0xBU0gsCiAgICBUb2tlblR5cGUuU0xBU0hfRVEsCiAgICBUb2tlblR5cGUuU1RBUiwKICAgIFRva2VuVHlwZS5TVEFSX0VRLAogICAgVG9rZW5UeXBlLlNUUklOR19JTlRFUlBPTEFUSU9OX0VYUFJFU1NJT04sCiAgICBUb2tlblR5cGUuU1RSSU5HX0lOVEVSUE9MQVRJT05fSURFTlRJRklFUiwKICAgIFRva2VuVHlwZS5USUxERSwKICAgIFRva2VuVHlwZS5USUxERV9TTEFTSCwKICAgIFRva2VuVHlwZS5USUxERV9TTEFTSF9FUSwKICAgIFRva2VuVHlwZS5CQUNLUElORywKICAgIFRva2VuVHlwZS5CQUNLU0xBU0gsCiAgICBUb2tlblR5cGUuUEVSSU9EX1BFUklPRF9QRVJJT0QsCiAgICBUb2tlblR5cGUuUEVSSU9EX1BFUklPRF9QRVJJT0RfUVVFU1RJT04sCgogICAgLy8gVE9ETyhkYW5ydWJlbCk6IFNob3VsZCB0aGVzZSBiZSBhZGRlZCB0byB0aGUgImFsbCIgbGlzdD8KICAgIC8vVG9rZW5UeXBlLklTLAogICAgLy9Ub2tlblR5cGUuQVMsCgogICAgLy8gVGhlc2UgYXJlIG5vdCB5ZXQgcGFydCBvZiB0aGUgbGFuZ3VhZ2UgYW5kIG5vdCBzdXBwb3J0ZWQgYnkgZmFzdGEKICAgIC8vVG9rZW5UeXBlLkFNUEVSU0FORF9BTVBFUlNBTkRfRVEsCiAgICAvL1Rva2VuVHlwZS5CQVJfQkFSX0VRLAoKICAgIC8vIFN1cHBvcnRlZCBieSBmYXN0YSBidXQgbm90IHBhcnQgb2YgdGhlIGxhbmd1YWdlCiAgICAvL1Rva2VuVHlwZS5CQU5HX0VRX0VRLAogICAgLy9Ub2tlblR5cGUuRVFfRVFfRVEsCgogICAgLy8gVXNlZCBieSBzeW50aGV0aWMgdG9rZW5zIGdlbmVyYXRlZCBkdXJpbmcgcmVjb3ZlcnkKICAgIC8vVG9rZW5UeXBlLkJBRF9JTlBVVCwKICAgIC8vVG9rZW5UeXBlLlJFQ09WRVJZLAogIF07CgogIGZpbmFsIGludCBraW5kOwoKICAvKioKICAgKiBgdHJ1ZWAgaWYgdGhpcyB0b2tlbiB0eXBlIHJlcHJlc2VudHMgYSBtb2RpZmllcgogICAqIHN1Y2ggYXMgYGFic3RyYWN0YCBvciBgY29uc3RgLgogICAqLwogIGZpbmFsIGJvb2wgaXNNb2RpZmllcjsKCiAgLyoqCiAgICogYHRydWVgIGlmIHRoaXMgdG9rZW4gdHlwZSByZXByZXNlbnRzIGFuIG9wZXJhdG9yLgogICAqLwogIGZpbmFsIGJvb2wgaXNPcGVyYXRvcjsKCiAgLyoqCiAgICogYHRydWVgIGlmIHRoaXMgdG9rZW4gdHlwZSByZXByZXNlbnRzIGEga2V5d29yZCBzdGFydGluZyBhIHRvcCBsZXZlbAogICAqIGRlY2xhcmF0aW9uIHN1Y2ggYXMgYGNsYXNzYCwgYGVudW1gLCBgaW1wb3J0YCwgZXRjLgogICAqLwogIGZpbmFsIGJvb2wgaXNUb3BMZXZlbEtleXdvcmQ7CgogIC8qKgogICAqIGB0cnVlYCBpZiB0aGlzIHRva2VuIHR5cGUgcmVwcmVzZW50cyBhbiBvcGVyYXRvcgogICAqIHRoYXQgY2FuIGJlIGRlZmluZWQgYnkgdXNlcnMuCiAgICovCiAgZmluYWwgYm9vbCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcjsKCiAgLyoqCiAgICogVGhlIGxleGVtZSB0aGF0IGRlZmluZXMgdGhpcyB0eXBlIG9mIHRva2VuLAogICAqIG9yIGBudWxsYCBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBvc3NpYmxlIGxleGVtZSBmb3IgdGhpcyB0eXBlIG9mIHRva2VuLgogICAqLwogIGZpbmFsIFN0cmluZyBsZXhlbWU7CgogIC8qKgogICAqIFRoZSBuYW1lIG9mIHRoZSB0b2tlbiB0eXBlLgogICAqLwogIGZpbmFsIFN0cmluZyBuYW1lOwoKICAvKioKICAgKiBUaGUgcHJlY2VkZW5jZSBvZiB0aGlzIHR5cGUgb2YgdG9rZW4sCiAgICogb3IgYDBgIGlmIHRoZSB0b2tlbiBkb2VzIG5vdCByZXByZXNlbnQgYW4gb3BlcmF0b3IuCiAgICovCiAgZmluYWwgaW50IHByZWNlZGVuY2U7CgogIC8qKgogICAqIFNlZSBbVG9rZW4uc3RyaW5nVmFsdWVdIGZvciBhbiBleHBsYW5hdGlvbi4KICAgKi8KICBmaW5hbCBTdHJpbmcgc3RyaW5nVmFsdWU7CgogIGNvbnN0IFRva2VuVHlwZSh0aGlzLmxleGVtZSwgdGhpcy5uYW1lLCB0aGlzLnByZWNlZGVuY2UsIHRoaXMua2luZCwKICAgICAge3RoaXMuaXNNb2RpZmllcjogZmFsc2UsCiAgICAgIHRoaXMuaXNPcGVyYXRvcjogZmFsc2UsCiAgICAgIHRoaXMuaXNUb3BMZXZlbEtleXdvcmQ6IGZhbHNlLAogICAgICB0aGlzLmlzVXNlckRlZmluYWJsZU9wZXJhdG9yOiBmYWxzZSwKICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlOiAndW5zcGVjaWZpZWQnfSkKICAgICAgOiB0aGlzLnN0cmluZ1ZhbHVlID0gc3RyaW5nVmFsdWUgPT0gJ3Vuc3BlY2lmaWVkJyA/IGxleGVtZSA6IHN0cmluZ1ZhbHVlOwoKICAvKioKICAgKiBSZXR1cm4gYHRydWVgIGlmIHRoaXMgdHlwZSBvZiB0b2tlbiByZXByZXNlbnRzIGFuIGFkZGl0aXZlIG9wZXJhdG9yLgogICAqLwogIGJvb2wgZ2V0IGlzQWRkaXRpdmVPcGVyYXRvciA9PiBwcmVjZWRlbmNlID09IEFERElUSVZFX1BSRUNFREVOQ0U7CgogIC8qKgogICAqIFJldHVybiBgdHJ1ZWAgaWYgdGhpcyB0eXBlIG9mIHRva2VuIHJlcHJlc2VudHMgYW4gYXNzaWdubWVudCBvcGVyYXRvci4KICAgKi8KICBib29sIGdldCBpc0Fzc2lnbm1lbnRPcGVyYXRvciA9PiBwcmVjZWRlbmNlID09IEFTU0lHTk1FTlRfUFJFQ0VERU5DRTsKCiAgLyoqCiAgICogUmV0dXJuIGB0cnVlYCBpZiB0aGlzIHR5cGUgb2YgdG9rZW4gcmVwcmVzZW50cyBhbiBhc3NvY2lhdGl2ZSBvcGVyYXRvci4gQW4KICAgKiBhc3NvY2lhdGl2ZSBvcGVyYXRvciBpcyBhbiBvcGVyYXRvciBmb3Igd2hpY2ggdGhlIGZvbGxvd2luZyBlcXVhbGl0eSBpcwogICAqIHRydWU6IGAoYSAqIGIpICogYyA9PSBhICogKGIgKiBjKWAuIEluIG90aGVyIHdvcmRzLCBpZiB0aGUgcmVzdWx0IG9mCiAgICogYXBwbHlpbmcgdGhlIG9wZXJhdG9yIHRvIG11bHRpcGxlIG9wZXJhbmRzIGRvZXMgbm90IGRlcGVuZCBvbiB0aGUgb3JkZXIgaW4KICAgKiB3aGljaCB0aG9zZSBhcHBsaWNhdGlvbnMgb2NjdXIuCiAgICoKICAgKiBOb3RlOiBUaGlzIG1ldGhvZCBjb25zaWRlcnMgdGhlIGxvZ2ljYWwtYW5kIGFuZCBsb2dpY2FsLW9yIG9wZXJhdG9ycyB0byBiZQogICAqIGFzc29jaWF0aXZlLCBldmVuIHRob3VnaCB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGFwcGxpY2F0aW9uIG9mIHRob3NlCiAgICogb3BlcmF0b3JzIGNhbiBoYXZlIGFuIGVmZmVjdCBiZWNhdXNlIGV2YWx1YXRpb24gb2YgdGhlIHJpZ2h0LWhhbmQgb3BlcmFuZAogICAqIGlzIGNvbmRpdGlvbmFsLgogICAqLwogIGJvb2wgZ2V0IGlzQXNzb2NpYXRpdmVPcGVyYXRvciA9PgogICAgICB0aGlzID09IFRva2VuVHlwZS5BTVBFUlNBTkQgfHwKICAgICAgdGhpcyA9PSBUb2tlblR5cGUuQU1QRVJTQU5EX0FNUEVSU0FORCB8fAogICAgICB0aGlzID09IFRva2VuVHlwZS5CQVIgfHwKICAgICAgdGhpcyA9PSBUb2tlblR5cGUuQkFSX0JBUiB8fAogICAgICB0aGlzID09IFRva2VuVHlwZS5DQVJFVCB8fAogICAgICB0aGlzID09IFRva2VuVHlwZS5QTFVTIHx8CiAgICAgIHRoaXMgPT0gVG9rZW5UeXBlLlNUQVI7CgogIC8qKgogICAqIEEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGtleXdvcmQgaXMgYSAiYnVpbHQtaW4iIGlkZW50aWZpZXIuCiAgICovCiAgYm9vbCBnZXQgaXNCdWlsdEluID0+IGZhbHNlOwoKICAvKioKICAgKiBSZXR1cm4gYHRydWVgIGlmIHRoaXMgdHlwZSBvZiB0b2tlbiByZXByZXNlbnRzIGFuIGVxdWFsaXR5IG9wZXJhdG9yLgogICAqLwogIGJvb2wgZ2V0IGlzRXF1YWxpdHlPcGVyYXRvciA9PgogICAgICB0aGlzID09IFRva2VuVHlwZS5CQU5HX0VRIHx8IHRoaXMgPT0gVG9rZW5UeXBlLkVRX0VROwoKICAvKioKICAgKiBSZXR1cm4gYHRydWVgIGlmIHRoaXMgdHlwZSBvZiB0b2tlbiByZXByZXNlbnRzIGFuIGluY3JlbWVudCBvcGVyYXRvci4KICAgKi8KICBib29sIGdldCBpc0luY3JlbWVudE9wZXJhdG9yID0+CiAgICAgIHRoaXMgPT0gVG9rZW5UeXBlLlBMVVNfUExVUyB8fCB0aGlzID09IFRva2VuVHlwZS5NSU5VU19NSU5VUzsKCiAgLyoqCiAgICogUmV0dXJuIGB0cnVlYCBpZiB0aGlzIHR5cGUgb2YgdG9rZW4gaXMgYSBrZXl3b3JkLgogICAqLwogIGJvb2wgZ2V0IGlzS2V5d29yZCA9PiBraW5kID09IEtFWVdPUkRfVE9LRU47CgogIC8qKgogICAqIEEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGtleXdvcmQgY2FuIGJlIHVzZWQgYXMgYW4gaWRlbnRpZmllcgogICAqIGluIHNvbWUgc2l0dWF0aW9ucy4KICAgKi8KICBib29sIGdldCBpc1BzZXVkbyA9PiBmYWxzZTsKCiAgLyoqCiAgICogUmV0dXJuIGB0cnVlYCBpZiB0aGlzIHR5cGUgb2YgdG9rZW4gcmVwcmVzZW50cyBhIG11bHRpcGxpY2F0aXZlIG9wZXJhdG9yLgogICAqLwogIGJvb2wgZ2V0IGlzTXVsdGlwbGljYXRpdmVPcGVyYXRvciA9PiBwcmVjZWRlbmNlID09IE1VTFRJUExJQ0FUSVZFX1BSRUNFREVOQ0U7CgogIC8qKgogICAqIFJldHVybiBgdHJ1ZWAgaWYgdGhpcyB0eXBlIG9mIHRva2VuIHJlcHJlc2VudHMgYSByZWxhdGlvbmFsIG9wZXJhdG9yLgogICAqLwogIGJvb2wgZ2V0IGlzUmVsYXRpb25hbE9wZXJhdG9yID0+CiAgICAgIHRoaXMgPT0gVG9rZW5UeXBlLkxUIHx8CiAgICAgIHRoaXMgPT0gVG9rZW5UeXBlLkxUX0VRIHx8CiAgICAgIHRoaXMgPT0gVG9rZW5UeXBlLkdUIHx8CiAgICAgIHRoaXMgPT0gVG9rZW5UeXBlLkdUX0VROwoKICAvKioKICAgKiBSZXR1cm4gYHRydWVgIGlmIHRoaXMgdHlwZSBvZiB0b2tlbiByZXByZXNlbnRzIGEgc2hpZnQgb3BlcmF0b3IuCiAgICovCiAgYm9vbCBnZXQgaXNTaGlmdE9wZXJhdG9yID0+IHByZWNlZGVuY2UgPT0gU0hJRlRfUFJFQ0VERU5DRTsKCiAgLyoqCiAgICogUmV0dXJuIGB0cnVlYCBpZiB0aGlzIHR5cGUgb2YgdG9rZW4gcmVwcmVzZW50cyBhIHVuYXJ5IHBvc3RmaXggb3BlcmF0b3IuCiAgICovCiAgYm9vbCBnZXQgaXNVbmFyeVBvc3RmaXhPcGVyYXRvciA9PiBwcmVjZWRlbmNlID09IFBPU1RGSVhfUFJFQ0VERU5DRTsKCiAgLyoqCiAgICogUmV0dXJuIGB0cnVlYCBpZiB0aGlzIHR5cGUgb2YgdG9rZW4gcmVwcmVzZW50cyBhIHVuYXJ5IHByZWZpeCBvcGVyYXRvci4KICAgKi8KICBib29sIGdldCBpc1VuYXJ5UHJlZml4T3BlcmF0b3IgPT4KICAgICAgcHJlY2VkZW5jZSA9PSBQUkVGSVhfUFJFQ0VERU5DRSB8fAogICAgICB0aGlzID09IFRva2VuVHlwZS5NSU5VUyB8fAogICAgICB0aGlzID09IFRva2VuVHlwZS5QTFVTX1BMVVMgfHwKICAgICAgdGhpcyA9PSBUb2tlblR5cGUuTUlOVVNfTUlOVVM7CgogIC8qKgogICAqIFJldHVybiBgdHJ1ZWAgaWYgdGhpcyB0eXBlIG9mIHRva2VuIHJlcHJlc2VudHMgYSBzZWxlY3RvciBvcGVyYXRvcgogICAqIChzdGFydGluZyB0b2tlbiBvZiBhIHNlbGVjdG9yKS4KICAgKi8KICBib29sIGdldCBpc1NlbGVjdG9yT3BlcmF0b3IgPT4gcHJlY2VkZW5jZSA9PSBTRUxFQ1RPUl9QUkVDRURFTkNFOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBuYW1lOwoKICAvKioKICAgKiBVc2UgW2xleGVtZV0gaW5zdGVhZCBvZiB0aGlzIG1ldGhvZAogICAqLwogIEBkZXByZWNhdGVkCiAgU3RyaW5nIGdldCB2YWx1ZSA9PiBsZXhlbWU7Cn0Khr4ATk48AQRQMgQaASgwIAEdJSImIiUmIyUlJychJCoiIyQB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IDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gVE9ETyhhaGUpOiBPcmlnaW5hbGx5IGNvcGllZCBmcm9tIHNkay9wa2cvY29tcGlsZXIvbGliL3NyYy9jb2xvcnMuZGFydCwKLy8gbWVyZ2UgdGhlc2UgdHdvIHBhY2thZ2VzLgpsaWJyYXJ5IGNvbG9yczsKCmltcG9ydCAnZGFydDpjb252ZXJ0JyBzaG93IGpzb25FbmNvZGU7CgppbXBvcnQgJ2RhcnQ6aW8nIHNob3cgUGxhdGZvcm0sIFByb2Nlc3MsIFByb2Nlc3NSZXN1bHQsIHN0ZGVyciwgc3Rkb3V0OwoKaW1wb3J0ICdjb21waWxlcl9jb250ZXh0LmRhcnQnIHNob3cgQ29tcGlsZXJDb250ZXh0OwoKLy8vIEFOU0kveHRlcm0gdGVybWNhcCBmb3Igc2V0dGluZyBkZWZhdWx0IGNvbG9ycy4gT3V0cHV0IGZyb20gVW5peAovLy8gY29tbWFuZC1saW5lIHByb2dyYW0gYHRwdXQgb3BgLgpjb25zdCBTdHJpbmcgREVGQVVMVF9DT0xPUiA9ICJceDFiWzM5OzQ5bSI7CgovLy8gQU5TSS94dGVybSB0ZXJtY2FwIGZvciBzZXR0aW5nIGJsYWNrIHRleHQgY29sb3IuIE91dHB1dCBmcm9tIFVuaXgKLy8vIGNvbW1hbmQtbGluZSBwcm9ncmFtIGB0cHV0IHNldGFmIDBgLgpjb25zdCBTdHJpbmcgQkxBQ0tfQ09MT1IgPSAiXHgxYlszMG0iOwoKLy8vIEFOU0kveHRlcm0gdGVybWNhcCBmb3Igc2V0dGluZyByZWQgdGV4dCBjb2xvci4gT3V0cHV0IGZyb20gVW5peAovLy8gY29tbWFuZC1saW5lIHByb2dyYW0gYHRwdXQgc2V0YWYgMWAuCmNvbnN0IFN0cmluZyBSRURfQ09MT1IgPSAiXHgxYlszMW0iOwoKLy8vIEFOU0kveHRlcm0gdGVybWNhcCBmb3Igc2V0dGluZyBncmVlbiB0ZXh0IGNvbG9yLiBPdXRwdXQgZnJvbSBVbml4Ci8vLyBjb21tYW5kLWxpbmUgcHJvZ3JhbSBgdHB1dCBzZXRhZiAyYC4KY29uc3QgU3RyaW5nIEdSRUVOX0NPTE9SID0gIlx4MWJbMzJtIjsKCi8vLyBBTlNJL3h0ZXJtIHRlcm1jYXAgZm9yIHNldHRpbmcgeWVsbG93IHRleHQgY29sb3IuIE91dHB1dCBmcm9tIFVuaXgKLy8vIGNvbW1hbmQtbGluZSBwcm9ncmFtIGB0cHV0IHNldGFmIDNgLgpjb25zdCBTdHJpbmcgWUVMTE9XX0NPTE9SID0gIlx4MWJbMzNtIjsKCi8vLyBBTlNJL3h0ZXJtIHRlcm1jYXAgZm9yIHNldHRpbmcgYmx1ZSB0ZXh0IGNvbG9yLiBPdXRwdXQgZnJvbSBVbml4Ci8vLyBjb21tYW5kLWxpbmUgcHJvZ3JhbSBgdHB1dCBzZXRhZiA0YC4KY29uc3QgU3RyaW5nIEJMVUVfQ09MT1IgPSAiXHgxYlszNG0iOwoKLy8vIEFOU0kveHRlcm0gdGVybWNhcCBmb3Igc2V0dGluZyBtYWdlbnRhIHRleHQgY29sb3IuIE91dHB1dCBmcm9tIFVuaXgKLy8vIGNvbW1hbmQtbGluZSBwcm9ncmFtIGB0cHV0IHNldGFmIDVgLgpjb25zdCBTdHJpbmcgTUFHRU5UQV9DT0xPUiA9ICJceDFiWzM1bSI7CgovLy8gQU5TSS94dGVybSB0ZXJtY2FwIGZvciBzZXR0aW5nIGN5YW4gdGV4dCBjb2xvci4gT3V0cHV0IGZyb20gVW5peAovLy8gY29tbWFuZC1saW5lIHByb2dyYW0gYHRwdXQgc2V0YWYgNmAuCmNvbnN0IFN0cmluZyBDWUFOX0NPTE9SID0gIlx4MWJbMzZtIjsKCi8vLyBBTlNJL3h0ZXJtIHRlcm1jYXAgZm9yIHNldHRpbmcgd2hpdGUgdGV4dCBjb2xvci4gT3V0cHV0IGZyb20gVW5peAovLy8gY29tbWFuZC1saW5lIHByb2dyYW0gYHRwdXQgc2V0YWYgN2AuCmNvbnN0IFN0cmluZyBXSElURV9DT0xPUiA9ICJceDFiWzM3bSI7CgovLy8gQWxsIHRoZSBhYm92ZSBjb2Rlcy4gVGhpcyBpcyB1c2VkIHRvIGNvbXBhcmUgdGhlIGFib3ZlIGNvZGVzIHRvIHRoZQovLy8gdGVybWluYWwncy4gUHJpbnRpbmcgdGhpcyBzdHJpbmcgc2hvdWxkIGhhdmUgdGhlIHNhbWUgZWZmZWN0IGFzIGp1c3QKLy8vIHByaW50aW5nIFtERUZBVUxUX0NPTE9SXS4KY29uc3QgU3RyaW5nIEFMTF9DT0RFUyA9IEJMQUNLX0NPTE9SICsKICAgIFJFRF9DT0xPUiArCiAgICBHUkVFTl9DT0xPUiArCiAgICBZRUxMT1dfQ09MT1IgKwogICAgQkxVRV9DT0xPUiArCiAgICBNQUdFTlRBX0NPTE9SICsKICAgIENZQU5fQ09MT1IgKwogICAgV0hJVEVfQ09MT1IgKwogICAgREVGQVVMVF9DT0xPUjsKCmNvbnN0IFN0cmluZyBURVJNSU5BTF9DQVBBQklMSVRJRVMgPSAiIiIKY29sb3JzCnNldGFmIDAKc2V0YWYgMQpzZXRhZiAyCnNldGFmIDMKc2V0YWYgNApzZXRhZiA1CnNldGFmIDYKc2V0YWYgNwpvcAoiIiI7CgpTdHJpbmcgd3JhcChTdHJpbmcgc3RyaW5nLCBTdHJpbmcgY29sb3IpIHsKICByZXR1cm4gQ29tcGlsZXJDb250ZXh0LmVuYWJsZUNvbG9ycwogICAgICA/ICIke2NvbG9yfSRzdHJpbmcke0RFRkFVTFRfQ09MT1J9IgogICAgICA6IHN0cmluZzsKfQoKU3RyaW5nIGJsYWNrKFN0cmluZyBzdHJpbmcpID0+IHdyYXAoc3RyaW5nLCBCTEFDS19DT0xPUik7ClN0cmluZyByZWQoU3RyaW5nIHN0cmluZykgPT4gd3JhcChzdHJpbmcsIFJFRF9DT0xPUik7ClN0cmluZyBncmVlbihTdHJpbmcgc3RyaW5nKSA9PiB3cmFwKHN0cmluZywgR1JFRU5fQ09MT1IpOwpTdHJpbmcgeWVsbG93KFN0cmluZyBzdHJpbmcpID0+IHdyYXAoc3RyaW5nLCBZRUxMT1dfQ09MT1IpOwpTdHJpbmcgYmx1ZShTdHJpbmcgc3RyaW5nKSA9PiB3cmFwKHN0cmluZywgQkxVRV9DT0xPUik7ClN0cmluZyBtYWdlbnRhKFN0cmluZyBzdHJpbmcpID0+IHdyYXAoc3RyaW5nLCBNQUdFTlRBX0NPTE9SKTsKU3RyaW5nIGN5YW4oU3RyaW5nIHN0cmluZykgPT4gd3JhcChzdHJpbmcsIENZQU5fQ09MT1IpOwpTdHJpbmcgd2hpdGUoU3RyaW5nIHN0cmluZykgPT4gd3JhcChzdHJpbmcsIFdISVRFX0NPTE9SKTsKCi8vLyBSZXR1cm5zIHdoZXRoZXIgW3NpbmtdIHN1cHBvcnRzIEFOU0kgZXNjYXBlcyBvciBgbnVsbGAgaWYgaXQgY291bGQgbm90IGJlCi8vLyBkZXRlcm1pbmVkLgpib29sIF9zdXBwb3J0c0Fuc2lFc2NhcGVzKHNpbmspIHsKICB0cnkgewogICAgLy8gaWdub3JlOiB1bmRlZmluZWRfZ2V0dGVyCiAgICByZXR1cm4gc2luay5zdXBwb3J0c0Fuc2lFc2NhcGVzOwogIH0gb24gTm9TdWNoTWV0aG9kRXJyb3IgewogICAgLy8gSWdub3JlZDogV2UncmUgcnVubmluZyBvbiBhbiBvbGRlciB2ZXJzaW9uIG9mIHRoZSBEYXJ0IFZNIHdoaWNoIGRvZXNuJ3QKICAgIC8vIGltcGxlbWVudCBgc3VwcG9ydHNBbnNpRXNjYXBlc2AuCiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCi8vLyBUcnVlIGlmIHdlIHNob3VsZCBlbmFibGUgY29sb3JzIGluIG91dHB1dC4KLy8vCi8vLyBXZSBlbmFibGUgY29sb3JzIHdoZW4gYm90aCBgc3Rkb3V0YCBhbmQgYHN0ZGVycmAgc3VwcG9ydCBBTlNJIGVzY2FwZXMuCi8vLwovLy8gT24gbm9uLVdpbmRvd3MgcGxhdGZvcm1zLCB0aGlzIGZ1bmN0aW9ucyBjaGVja3MgdGhlIHRlcm1pbmFsIGNhcGFiaWxpdGllcywKLy8vIG9uIFdpbmRvd3Mgd2Ugb25seSBlbmFibGUgY29sb3JzIGlmIHRoZSBWTSBnZXR0ZXJzIGFyZSBwcmVzZW50IGFuZCByZXR1cm5lZAovLy8gYHRydWVgLgovLy8KLy8vIE5vdGU6IGRvIG5vdCBjYWxsIHRoaXMgbWV0aG9kIGRpcmVjdGx5LCBhcyBpdCBpcyBleHBlbnNpdmUgdG8KLy8vIGNvbXB1dGUuIEluc3RlYWQsIHVzZSBbQ29tcGlsZXJDb250ZXh0LmVuYWJsZUNvbG9yc10uCmJvb2wgY29tcHV0ZUVuYWJsZUNvbG9ycyhDb21waWxlckNvbnRleHQgY29udGV4dCkgewogIC8vIFRPRE8oYWhlKTogUmVtb3ZlIHRoaXMgbWV0aG9kLgoKICBib29sIHN0ZGVyclN1cHBvcnRzQ29sb3JzID0gX3N1cHBvcnRzQW5zaUVzY2FwZXMoc3Rkb3V0KTsKICBib29sIHN0ZG91dFN1cHBvcnRzQ29sb3JzID0gX3N1cHBvcnRzQW5zaUVzY2FwZXMoc3RkZXJyKTsKCiAgaWYgKHN0ZG91dFN1cHBvcnRzQ29sb3JzID09IGZhbHNlKSB7CiAgICBpZiAoY29udGV4dC5vcHRpb25zLnZlcmJvc2UpIHsKICAgICAgcHJpbnQoIk5vdCBlbmFibGluZyBjb2xvcnMsIHN0ZG91dCBkb2VzIG5vdCBzdXBwb3J0IEFOU0kgY29sb3JzLiIpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KICBpZiAoc3RkZXJyU3VwcG9ydHNDb2xvcnMgPT0gZmFsc2UpIHsKICAgIGlmIChjb250ZXh0Lm9wdGlvbnMudmVyYm9zZSkgewogICAgICBwcmludCgiTm90IGVuYWJsaW5nIGNvbG9ycywgc3RkZXJyIGRvZXMgbm90IHN1cHBvcnQgQU5TSSBjb2xvcnMuIik7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBpZiAoUGxhdGZvcm0uaXNXaW5kb3dzKSB7CiAgICBpZiAoc3RkZXJyU3VwcG9ydHNDb2xvcnMgIT0gdHJ1ZSB8fCBzdGRvdXRTdXBwb3J0c0NvbG9ycyAhPSB0cnVlKSB7CiAgICAgIC8vIEluIHRoaXMgY2FzZSwgZWl0aGVyIFtzdGRvdXRdIG9yIFtzdGRlcnJdIGRpZCBub3Qgc3VwcG9ydCB0aGUKICAgICAgLy8gcHJvcGVydHkgYHN1cHBvcnRzQW5zaUVzY2FwZXNgLiBTaW5jZSB3ZSBkbyBub3QgaGF2ZSBhbm90aGVyIHdheQogICAgICAvLyB0byBkZXRlcm1pbmUgc3VwcG9ydCBmb3IgY29sb3JzLCB3ZSBkaXNhYmxlIHRoZW0uCiAgICAgIGlmIChjb250ZXh0Lm9wdGlvbnMudmVyYm9zZSkgewogICAgICAgIHByaW50KCJOb3QgZW5hYmxpbmcgY29sb3JzIGFzIEFOU0kgaXMgbm90IHN1cHBvcnRlZC4iKTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoY29udGV4dC5vcHRpb25zLnZlcmJvc2UpIHsKICAgICAgcHJpbnQoIkVuYWJsaW5nIGNvbG9ycyBhcyBPUyBpcyBXaW5kb3dzLiIpOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLyBXZSBoYXZlIHRvIGNoZWNrIGlmIHRoZSB0ZXJtaW5hbCBhY3R1YWxseSBzdXBwb3J0cyBjb2xvcnMuIEN1cnJlbnRseSwKICAvLyB0byBhdm9pZCBsaW5raW5nIHRoZSBEYXJ0IFZNIHdpdGggbmN1cnNlcywgQU5TSSBlc2NhcGUgc3VwcG9ydCBpcyByZWR1Y2VkCiAgLy8gdG8gYFBsYXRmb3JtLmVudmlyb25tZW50WydURVJNJ10uY29udGFpbnMoInh0ZXJtIilgLgoKICAvLyBUaGUgYC1TYCBvcHRpb24gb2YgYHRwdXRgIGFsbG93cyB1cyB0byBxdWVyeSBtdWx0aXBsZSBjYXBhYmlsaXRpZXMgYXQKICAvLyBvbmNlLgogIFByb2Nlc3NSZXN1bHQgcmVzdWx0ID0gUHJvY2Vzcy5ydW5TeW5jKAogICAgICAiL2Jpbi9zaCIsIFsiLWMiLCAicHJpbnRmICclcycgJyRURVJNSU5BTF9DQVBBQklMSVRJRVMnIHwgdHB1dCAtUyJdKTsKCiAgaWYgKHJlc3VsdC5leGl0Q29kZSAhPSAwKSB7CiAgICBpZiAoY29udGV4dC5vcHRpb25zLnZlcmJvc2UpIHsKICAgICAgcHJpbnQoIk5vdCBlbmFibGluZyBjb2xvcnMsIHJ1bm5pbmcgdHB1dCBmYWlsZWQuIik7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBMaXN0PFN0cmluZz4gbGluZXMgPSByZXN1bHQuc3Rkb3V0LnNwbGl0KCJcbiIpOwoKICBpZiAobGluZXMubGVuZ3RoICE9IDIpIHsKICAgIGlmIChjb250ZXh0Lm9wdGlvbnMudmVyYm9zZSkgewogICAgICBwcmludCgiTm90IGVuYWJsaW5nIGNvbG9ycywgdW5leHBlY3RlZCBvdXRwdXQgZnJvbSB0cHV0OiAiCiAgICAgICAgICAiJHtqc29uRW5jb2RlKHJlc3VsdC5zdGRvdXQpfS4iKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIFN0cmluZyBudW1iZXJPZkNvbG9ycyA9IGxpbmVzWzBdOwogIGlmICgoaW50LnRyeVBhcnNlKG51bWJlck9mQ29sb3JzKSA/PyAtMSkgPCA4KSB7CiAgICBpZiAoY29udGV4dC5vcHRpb25zLnZlcmJvc2UpIHsKICAgICAgcHJpbnQoIk5vdCBlbmFibGluZyBjb2xvcnMsIGxlc3MgdGhhbiA4IGNvbG9ycyBzdXBwb3J0ZWQ6ICIKICAgICAgICAgICIke2pzb25FbmNvZGUobnVtYmVyT2ZDb2xvcnMpfS4iKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIFN0cmluZyBhbGxDb2RlcyA9IGxpbmVzWzFdLnRyaW0oKTsKICBpZiAoQUxMX0NPREVTICE9IGFsbENvZGVzKSB7CiAgICBpZiAoY29udGV4dC5vcHRpb25zLnZlcmJvc2UpIHsKICAgICAgcHJpbnQoIk5vdCBlbmFibGluZyBjb2xvcnMsIGNvbG9yIGNvZGVzIGRvbid0IG1hdGNoOiAiCiAgICAgICAgICAiJHtqc29uRW5jb2RlKEFMTF9DT0RFUyl9ICE9ICR7anNvbkVuY29kZShhbGxDb2Rlcyl9LiIpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgaWYgKGNvbnRleHQub3B0aW9ucy52ZXJib3NlKSB7CiAgICBwcmludCgiRW5hYmxpbmcgY29sb3JzLiIpOwogIH0KICByZXR1cm4gdHJ1ZTsKfQqAyABOTjwBSx0QAScBSAE1AUQkLAFGKScBRCklAUYpJwFHKSgBRSkmAUgpKQFFKSYBRiknAUhJHicQEhMRFBESEwEpBwgICAgICAgIAwUBKyYqEAIBOjY6PDg+ODoBThAiCCAlG08oEQQCAS8ESwRPUAwEQjo0JAE8PAEnI0oGEgQnI0oGEgQBHEhHSjslQAgUBiMyBhEEAUtPOgFLCypMAR4jOgYSBAEyARsjQSwGEgQBJDIjQi0GEgQBJR8jPUMGEgQBIR8EDwIBJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9jb2xvcnMuZGFydD1zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL3R5cGVfbGFiZWxlci5kYXJ0r5MvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnIHNob3cganNvbjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQm9vbENvbnN0YW50LAogICAgICAgIEJvdHRvbVR5cGUsCiAgICAgICAgQ2xhc3MsCiAgICAgICAgQ29uc3RhbnQsCiAgICAgICAgQ29uc3RhbnRNYXBFbnRyeSwKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBEb3VibGVDb25zdGFudCwKICAgICAgICBEeW5hbWljVHlwZSwKICAgICAgICBGaWVsZCwKICAgICAgICBGdW5jdGlvblR5cGUsCiAgICAgICAgSW52YWxpZFR5cGUsCiAgICAgICAgSW5zdGFuY2VDb25zdGFudCwKICAgICAgICBJbnRDb25zdGFudCwKICAgICAgICBJbnRlcmZhY2VUeXBlLAogICAgICAgIExpYnJhcnksCiAgICAgICAgTGlzdENvbnN0YW50LAogICAgICAgIE1hcENvbnN0YW50LAogICAgICAgIE51bGxDb25zdGFudCwKICAgICAgICBQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50LAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBTZXRDb25zdGFudCwKICAgICAgICBTdHJpbmdDb25zdGFudCwKICAgICAgICBTeW1ib2xDb25zdGFudCwKICAgICAgICBUZWFyT2ZmQ29uc3RhbnQsCiAgICAgICAgVHJlZU5vZGUsCiAgICAgICAgVHlwZWRlZlR5cGUsCiAgICAgICAgVHlwZUxpdGVyYWxDb25zdGFudCwKICAgICAgICBUeXBlUGFyYW1ldGVyLAogICAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlLAogICAgICAgIFVuZXZhbHVhdGVkQ29uc3RhbnQsCiAgICAgICAgVm9pZFR5cGU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3Zpc2l0b3IuZGFydCcgc2hvdyBDb25zdGFudFZpc2l0b3IsIERhcnRUeXBlVmlzaXRvcjsKCmltcG9ydCAnLi4vYmxhY2tsaXN0ZWRfY2xhc3Nlcy5kYXJ0JyBzaG93IGJsYWNrbGlzdGVkQ29yZUNsYXNzZXM7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93IE1lc3NhZ2UsIHRlbXBsYXRlVHlwZU9yaWdpbiwgdGVtcGxhdGVUeXBlT3JpZ2luV2l0aEZpbGVVcmk7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgdW5zdXBwb3J0ZWQ7CgovLy8gQSBwcmV0dHktcHJpbnRlciBmb3IgS2VybmVsIHR5cGVzIGFuZCBjb25zdGFudHMgd2l0aCB0aGUgYWJpbGl0eSB0byBsYWJlbAovLy8gcmF3IHR5cGVzIHdpdGggbnVtZXJpYyBtYXJrZXJzIGluIERhcnQgY29tbWVudHMgKGUuZy4gYC8qMSovYCkgdG8KLy8vIGRpc3Rpbmd1aXNoIGRpZmZlcmVudCB0eXBlcyB3aXRoIHRoZSBzYW1lIG5hbWUuIFRoaXMgaXMgdXNlZCBpbiBkaWFnbm9zdGljCi8vLyBtZXNzYWdlcyB0byBpbmRpY2F0ZSB0aGUgb3JpZ2lucyBvZiB0eXBlcyBvY2N1cnJpbmcgaW4gdGhlIG1lc3NhZ2UuCmNsYXNzIFR5cGVMYWJlbGVyIGltcGxlbWVudHMgRGFydFR5cGVWaXNpdG9yPHZvaWQ+LCBDb25zdGFudFZpc2l0b3I8dm9pZD4gewogIExpc3Q8TGFiZWxlZE5vZGU+IG5hbWVzID0gPExhYmVsZWROb2RlPltdOwogIE1hcDxTdHJpbmcsIExpc3Q8TGFiZWxlZE5vZGU+PiBuYW1lTWFwID0gPFN0cmluZywgTGlzdDxMYWJlbGVkTm9kZT4+e307CgogIExpc3Q8T2JqZWN0PiByZXN1bHQ7CgogIC8vLyBQcmV0dHktcHJpbnQgYSB0eXBlLgogIC8vLyBXaGVuIGFsbCB0eXBlcyBhbmQgY29uc3RhbnRzIGFwcGVhcmluZyBpbiB0aGUgc2FtZSBtZXNzYWdlIGhhdmUgYmVlbgogIC8vLyBwcmV0dHktcHJpbnRlZCwgdGhlIHJldHVybmVkIGxpc3QgY2FuIGJlIGNvbnZlcnRlZCB0byBpdHMgc3RyaW5nCiAgLy8vIHJlcHJlc2VudGF0aW9uICh3aXRoIGxhYmVscyBvbiBkdXBsaWNhdGVkIG5hbWVzKSBieSB0aGUgYGpvaW4oKWAgbWV0aG9kLgogIExpc3Q8T2JqZWN0PiBsYWJlbFR5cGUoRGFydFR5cGUgdHlwZSkgewogICAgLy8gVE9ETyhhc2tlc2MpOiBSZW1vdmUgbnVsbCBjaGVjayB3aGVuIHdlIGFyZSBjb21wbGV0ZWx5IG51bGwgY2xlYW4gaGVyZS4KICAgIGlmICh0eXBlID09IG51bGwpIHJldHVybiBbIm51bGwtdHlwZSJdOwogICAgcmVzdWx0ID0gW107CiAgICB0eXBlLmFjY2VwdCh0aGlzKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gUHJldHR5LXByaW50IGEgY29uc3RhbnQuCiAgLy8vIFdoZW4gYWxsIHR5cGVzIGFuZCBjb25zdGFudHMgYXBwZWFyaW5nIGluIHRoZSBzYW1lIG1lc3NhZ2UgaGF2ZSBiZWVuCiAgLy8vIHByZXR0eS1wcmludGVkLCB0aGUgcmV0dXJuZWQgbGlzdCBjYW4gYmUgY29udmVydGVkIHRvIGl0cyBzdHJpbmcKICAvLy8gcmVwcmVzZW50YXRpb24gKHdpdGggbGFiZWxzIG9uIGR1cGxpY2F0ZWQgbmFtZXMpIGJ5IHRoZSBgam9pbigpYCBtZXRob2QuCiAgTGlzdDxPYmplY3Q+IGxhYmVsQ29uc3RhbnQoQ29uc3RhbnQgY29uc3RhbnQpIHsKICAgIC8vIFRPRE8oYXNrZXNjKTogUmVtb3ZlIG51bGwgY2hlY2sgd2hlbiB3ZSBhcmUgY29tcGxldGVseSBudWxsIGNsZWFuIGhlcmUuCiAgICBpZiAoY29uc3RhbnQgPT0gbnVsbCkgcmV0dXJuIFsibnVsbC1jb25zdGFudCJdOwogICAgcmVzdWx0ID0gW107CiAgICBjb25zdGFudC5hY2NlcHQodGhpcyk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIEdldCBhIHRleHR1YWwgZGVzY3JpcHRpb24gb2YgdGhlIG9yaWdpbnMgb2YgdGhlIHJhdyB0eXBlcyBhcHBlYXJpbmcgaW4KICAvLy8gdHlwZXMgYW5kIGNvbnN0YW50cyB0aGF0IGhhdmUgYmVlbiBwcmV0dHktcHJpbnRlZCB1c2luZyB0aGlzIGxhYmVsZXIuCiAgU3RyaW5nIGdldCBvcmlnaW5NZXNzYWdlcyB7CiAgICBTdHJpbmdCdWZmZXIgbWVzc2FnZXMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBmb3IgKExhYmVsZWROb2RlIG5hbWUgaW4gbmFtZXMpIHsKICAgICAgbWVzc2FnZXMud3JpdGUobmFtZS5vcmlnaW5NZXNzYWdlKTsKICAgIH0KICAgIHJldHVybiBtZXNzYWdlcy50b1N0cmluZygpOwogIH0KCiAgLy8gV2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gY29yZVR5cGVzIGhlcmUsIHNvIHdlIGhhdmUgb3VyIG93biBPYmplY3QgY2hlY2suCiAgc3RhdGljIGJvb2wgaXNPYmplY3QoRGFydFR5cGUgdHlwZSkgewogICAgaWYgKHR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJiB0eXBlLmNsYXNzTm9kZS5uYW1lID09ICdPYmplY3QnKSB7CiAgICAgIFVyaSBpbXBvcnRVcmkgPSB0eXBlLmNsYXNzTm9kZS5lbmNsb3NpbmdMaWJyYXJ5LmltcG9ydFVyaTsKICAgICAgcmV0dXJuIGltcG9ydFVyaS5zY2hlbWUgPT0gJ2RhcnQnICYmIGltcG9ydFVyaS5wYXRoID09ICdjb3JlJzsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIExhYmVsZWROb2RlIG5hbWVGb3JFbnRpdHkoCiAgICAgIFRyZWVOb2RlIG5vZGUsIFN0cmluZyBub2RlTmFtZSwgVXJpIGltcG9ydFVyaSwgVXJpIGZpbGVVcmkpIHsKICAgIExpc3Q8TGFiZWxlZE5vZGU+IGxhYmVsc0Zvck5hbWUgPSBuYW1lTWFwW25vZGVOYW1lXTsKICAgIGlmIChsYWJlbHNGb3JOYW1lID09IG51bGwpIHsKICAgICAgLy8gRmlyc3QgZW5jb3VudGVyZWQgZW50aXR5IHdpdGggdGhpcyBuYW1lCiAgICAgIExhYmVsZWROb2RlIG5hbWUgPQogICAgICAgICAgbmV3IExhYmVsZWROb2RlKG5vZGUsIG5vZGVOYW1lLCBpbXBvcnRVcmksIGZpbGVVcmksIHRoaXMpOwogICAgICBuYW1lcy5hZGQobmFtZSk7CiAgICAgIG5hbWVNYXBbbm9kZU5hbWVdID0gW25hbWVdOwogICAgICByZXR1cm4gbmFtZTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAoTGFiZWxlZE5vZGUgZW50aXR5Rm9yTmFtZSBpbiBsYWJlbHNGb3JOYW1lKSB7CiAgICAgICAgaWYgKGVudGl0eUZvck5hbWUubm9kZSA9PSBub2RlKSB7CiAgICAgICAgICAvLyBQcmV2aW91c2x5IGVuY291bnRlcmVkIGVudGl0eQogICAgICAgICAgcmV0dXJuIGVudGl0eUZvck5hbWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIE5ldyBlbnRpdHkgd2l0aCBuYW1lIHRoYXQgd2FzIHByZXZpb3VzbHkgZW5jb3VudGVyZWQKICAgICAgTGFiZWxlZE5vZGUgbmFtZSA9CiAgICAgICAgICBuZXcgTGFiZWxlZE5vZGUobm9kZSwgbm9kZU5hbWUsIGltcG9ydFVyaSwgZmlsZVVyaSwgdGhpcyk7CiAgICAgIG5hbWVzLmFkZChuYW1lKTsKICAgICAgbGFiZWxzRm9yTmFtZS5hZGQobmFtZSk7CiAgICAgIHJldHVybiBuYW1lOwogICAgfQogIH0KCiAgdm9pZCBkZWZhdWx0RGFydFR5cGUoRGFydFR5cGUgdHlwZSkge30KICB2b2lkIHZpc2l0VHlwZWRlZlR5cGUoVHlwZWRlZlR5cGUgbm9kZSkge30KCiAgdm9pZCB2aXNpdEludmFsaWRUeXBlKEludmFsaWRUeXBlIG5vZGUpIHsKICAgIC8vIFRPRE8oYXNrZXNjKTogVGhyb3cgaW50ZXJuYWwgZXJyb3IgaWYgSW52YWxpZFR5cGUgYXBwZWFycyBpbiBkaWFnbm9zdGljcy4KICAgIHJlc3VsdC5hZGQoImludmFsaWQtdHlwZSIpOwogIH0KCiAgdm9pZCB2aXNpdEJvdHRvbVR5cGUoQm90dG9tVHlwZSBub2RlKSB7CiAgICAvLyBUT0RPKGFza2VzYyk6IFRocm93IGludGVybmFsIGVycm9yIGlmIEJvdHRvbVR5cGUgYXBwZWFycyBpbiBkaWFnbm9zdGljcy4KICAgIHJlc3VsdC5hZGQoImJvdHRvbS10eXBlIik7CiAgfQoKICB2b2lkIHZpc2l0RHluYW1pY1R5cGUoRHluYW1pY1R5cGUgbm9kZSkgewogICAgcmVzdWx0LmFkZCgiZHluYW1pYyIpOwogIH0KCiAgdm9pZCB2aXNpdFZvaWRUeXBlKFZvaWRUeXBlIG5vZGUpIHsKICAgIHJlc3VsdC5hZGQoInZvaWQiKTsKICB9CgogIHZvaWQgdmlzaXRUeXBlUGFyYW1ldGVyVHlwZShUeXBlUGFyYW1ldGVyVHlwZSBub2RlKSB7CiAgICBUcmVlTm9kZSBwYXJlbnQgPSBub2RlLnBhcmFtZXRlcjsKICAgIHdoaWxlIChwYXJlbnQgaXMhIExpYnJhcnkgJiYgcGFyZW50ICE9IG51bGwpIHsKICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDsKICAgIH0KICAgIC8vIE5vdGUgdGhhdCB0aGlzIGNhbiBiZSBudWxsIGlmLCBmb3IgaW5zdGFuY2UsIHRoZSBlcnJvbmVvdXMgY29kZSBpcyBub3QKICAgIC8vIGFjdHVhbGx5IGluIHRoZSB0cmVlIC0gdGhlbiB3ZSBkb24ndCBrbm93IHdoZXJlIGl0IGNvbWVzIGZyb20hCiAgICBMaWJyYXJ5IGVuY2xvc2luZ0xpYnJhcnkgPSBwYXJlbnQ7CgogICAgcmVzdWx0LmFkZChuYW1lRm9yRW50aXR5KAogICAgICAgIG5vZGUucGFyYW1ldGVyLAogICAgICAgIG5vZGUucGFyYW1ldGVyLm5hbWUsCiAgICAgICAgZW5jbG9zaW5nTGlicmFyeSA9PSBudWxsID8gdW5rbm93blVyaSA6IGVuY2xvc2luZ0xpYnJhcnkuaW1wb3J0VXJpLAogICAgICAgIGVuY2xvc2luZ0xpYnJhcnkgPT0gbnVsbCA/IHVua25vd25VcmkgOiBlbmNsb3NpbmdMaWJyYXJ5LmZpbGVVcmkpKTsKICB9CgogIHZvaWQgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIG5vZGUpIHsKICAgIG5vZGUucmV0dXJuVHlwZS5hY2NlcHQodGhpcyk7CiAgICByZXN1bHQuYWRkKCIgRnVuY3Rpb24iKTsKICAgIGlmIChub2RlLnR5cGVQYXJhbWV0ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgcmVzdWx0LmFkZCgiPCIpOwogICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgICAgZm9yIChUeXBlUGFyYW1ldGVyIHBhcmFtIGluIG5vZGUudHlwZVBhcmFtZXRlcnMpIHsKICAgICAgICBpZiAoIWZpcnN0KSByZXN1bHQuYWRkKCIsICIpOwogICAgICAgIHJlc3VsdC5hZGQocGFyYW0ubmFtZSk7CiAgICAgICAgaWYgKGlzT2JqZWN0KHBhcmFtLmJvdW5kKSAmJiBwYXJhbS5kZWZhdWx0VHlwZSBpcyBEeW5hbWljVHlwZSkgewogICAgICAgICAgLy8gQm91bmQgd2FzIG5vdCBzcGVjaWZpZWQsIGFuZCB0aGVyZWZvcmUgc2hvdWxkIG5vdCBiZSBwcmludGVkLgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXN1bHQuYWRkKCIgZXh0ZW5kcyAiKTsKICAgICAgICAgIHBhcmFtLmJvdW5kLmFjY2VwdCh0aGlzKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmVzdWx0LmFkZCgiPiIpOwogICAgfQogICAgcmVzdWx0LmFkZCgiKCIpOwogICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudDsgaSsrKSB7CiAgICAgIGlmICghZmlyc3QpIHJlc3VsdC5hZGQoIiwgIik7CiAgICAgIG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnNbaV0uYWNjZXB0KHRoaXMpOwogICAgICBmaXJzdCA9IGZhbHNlOwogICAgfQogICAgaWYgKG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoID4gbm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50KSB7CiAgICAgIGlmIChub2RlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPiAwKSByZXN1bHQuYWRkKCIsICIpOwogICAgICByZXN1bHQuYWRkKCJbIik7CiAgICAgIGZpcnN0ID0gdHJ1ZTsKICAgICAgZm9yIChpbnQgaSA9IG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudDsKICAgICAgICAgIGkgPCBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aDsKICAgICAgICAgIGkrKykgewogICAgICAgIGlmICghZmlyc3QpIHJlc3VsdC5hZGQoIiwgIik7CiAgICAgICAgbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXS5hY2NlcHQodGhpcyk7CiAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgfQogICAgICByZXN1bHQuYWRkKCJdIik7CiAgICB9CiAgICBpZiAobm9kZS5uYW1lZFBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgewogICAgICBpZiAobm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5pc05vdEVtcHR5KSByZXN1bHQuYWRkKCIsICIpOwogICAgICByZXN1bHQuYWRkKCJ7Iik7CiAgICAgIGZpcnN0ID0gdHJ1ZTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlLm5hbWVkUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICghZmlyc3QpIHJlc3VsdC5hZGQoIiwgIik7CiAgICAgICAgbm9kZS5uYW1lZFBhcmFtZXRlcnNbaV0udHlwZS5hY2NlcHQodGhpcyk7CiAgICAgICAgcmVzdWx0LmFkZCgiICR7bm9kZS5uYW1lZFBhcmFtZXRlcnNbaV0ubmFtZX0iKTsKICAgICAgICBmaXJzdCA9IGZhbHNlOwogICAgICB9CiAgICAgIHJlc3VsdC5hZGQoIn0iKTsKICAgIH0KICAgIHJlc3VsdC5hZGQoIikiKTsKICB9CgogIHZvaWQgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgbm9kZSkgewogICAgQ2xhc3MgY2xhc3NOb2RlID0gbm9kZS5jbGFzc05vZGU7CiAgICByZXN1bHQuYWRkKG5hbWVGb3JFbnRpdHkoCiAgICAgICAgY2xhc3NOb2RlLAogICAgICAgIGNsYXNzTm9kZS5uYW1lLAogICAgICAgIGNsYXNzTm9kZS5lbmNsb3NpbmdMaWJyYXJ5LmltcG9ydFVyaSwKICAgICAgICBjbGFzc05vZGUuZW5jbG9zaW5nTGlicmFyeS5maWxlVXJpKSk7CiAgICBpZiAobm9kZS50eXBlQXJndW1lbnRzLmlzTm90RW1wdHkpIHsKICAgICAgcmVzdWx0LmFkZCgiPCIpOwogICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgICAgZm9yIChEYXJ0VHlwZSB0eXBlQXJnIGluIG5vZGUudHlwZUFyZ3VtZW50cykgewogICAgICAgIGlmICghZmlyc3QpIHJlc3VsdC5hZGQoIiwgIik7CiAgICAgICAgdHlwZUFyZy5hY2NlcHQodGhpcyk7CiAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgfQogICAgICByZXN1bHQuYWRkKCI+Iik7CiAgICB9CiAgfQoKICB2b2lkIGRlZmF1bHRDb25zdGFudChDb25zdGFudCBub2RlKSB7fQoKICB2b2lkIHZpc2l0TnVsbENvbnN0YW50KE51bGxDb25zdGFudCBub2RlKSB7CiAgICByZXN1bHQuYWRkKG5vZGUpOwogIH0KCiAgdm9pZCB2aXNpdEJvb2xDb25zdGFudChCb29sQ29uc3RhbnQgbm9kZSkgewogICAgcmVzdWx0LmFkZChub2RlKTsKICB9CgogIHZvaWQgdmlzaXRJbnRDb25zdGFudChJbnRDb25zdGFudCBub2RlKSB7CiAgICByZXN1bHQuYWRkKG5vZGUpOwogIH0KCiAgdm9pZCB2aXNpdERvdWJsZUNvbnN0YW50KERvdWJsZUNvbnN0YW50IG5vZGUpIHsKICAgIHJlc3VsdC5hZGQobm9kZSk7CiAgfQoKICB2b2lkIHZpc2l0U3ltYm9sQ29uc3RhbnQoU3ltYm9sQ29uc3RhbnQgbm9kZSkgewogICAgcmVzdWx0LmFkZChub2RlKTsKICB9CgogIHZvaWQgdmlzaXRTdHJpbmdDb25zdGFudChTdHJpbmdDb25zdGFudCBub2RlKSB7CiAgICByZXN1bHQuYWRkKGpzb24uZW5jb2RlKG5vZGUudmFsdWUpKTsKICB9CgogIHZvaWQgdmlzaXRJbnN0YW5jZUNvbnN0YW50KEluc3RhbmNlQ29uc3RhbnQgbm9kZSkgewogICAgbmV3IEludGVyZmFjZVR5cGUobm9kZS5jbGFzc05vZGUsIG5vZGUudHlwZUFyZ3VtZW50cykuYWNjZXB0KHRoaXMpOwogICAgcmVzdWx0LmFkZCgiIHsiKTsKICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgZm9yIChGaWVsZCBmaWVsZCBpbiBub2RlLmNsYXNzTm9kZS5maWVsZHMpIHsKICAgICAgaWYgKGZpZWxkLmlzU3RhdGljKSBjb250aW51ZTsKICAgICAgaWYgKCFmaXJzdCkgcmVzdWx0LmFkZCgiLCAiKTsKICAgICAgcmVzdWx0LmFkZCgiJHtmaWVsZC5uYW1lfTogIik7CiAgICAgIG5vZGUuZmllbGRWYWx1ZXNbZmllbGQucmVmZXJlbmNlXS5hY2NlcHQodGhpcyk7CiAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICB9CiAgICByZXN1bHQuYWRkKCJ9Iik7CiAgfQoKICB2b2lkIHZpc2l0TGlzdENvbnN0YW50KExpc3RDb25zdGFudCBub2RlKSB7CiAgICByZXN1bHQuYWRkKCI8Iik7CiAgICBub2RlLnR5cGVBcmd1bWVudC5hY2NlcHQodGhpcyk7CiAgICByZXN1bHQuYWRkKCI+WyIpOwogICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICBmb3IgKENvbnN0YW50IGNvbnN0YW50IGluIG5vZGUuZW50cmllcykgewogICAgICBpZiAoIWZpcnN0KSByZXN1bHQuYWRkKCIsICIpOwogICAgICBjb25zdGFudC5hY2NlcHQodGhpcyk7CiAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICB9CiAgICByZXN1bHQuYWRkKCJdIik7CiAgfQoKICB2b2lkIHZpc2l0U2V0Q29uc3RhbnQoU2V0Q29uc3RhbnQgbm9kZSkgewogICAgcmVzdWx0LmFkZCgiPCIpOwogICAgbm9kZS50eXBlQXJndW1lbnQuYWNjZXB0KHRoaXMpOwogICAgcmVzdWx0LmFkZCgiPnsiKTsKICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgZm9yIChDb25zdGFudCBjb25zdGFudCBpbiBub2RlLmVudHJpZXMpIHsKICAgICAgaWYgKCFmaXJzdCkgcmVzdWx0LmFkZCgiLCAiKTsKICAgICAgY29uc3RhbnQuYWNjZXB0KHRoaXMpOwogICAgICBmaXJzdCA9IGZhbHNlOwogICAgfQogICAgcmVzdWx0LmFkZCgifSIpOwogIH0KCiAgdm9pZCB2aXNpdE1hcENvbnN0YW50KE1hcENvbnN0YW50IG5vZGUpIHsKICAgIHJlc3VsdC5hZGQoIjwiKTsKICAgIG5vZGUua2V5VHlwZS5hY2NlcHQodGhpcyk7CiAgICByZXN1bHQuYWRkKCIsICIpOwogICAgbm9kZS52YWx1ZVR5cGUuYWNjZXB0KHRoaXMpOwogICAgcmVzdWx0LmFkZCgiPnsiKTsKICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgZm9yIChDb25zdGFudE1hcEVudHJ5IGVudHJ5IGluIG5vZGUuZW50cmllcykgewogICAgICBpZiAoIWZpcnN0KSByZXN1bHQuYWRkKCIsICIpOwogICAgICBlbnRyeS5rZXkuYWNjZXB0KHRoaXMpOwogICAgICByZXN1bHQuYWRkKCI6ICIpOwogICAgICBlbnRyeS52YWx1ZS5hY2NlcHQodGhpcyk7CiAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICB9CiAgICByZXN1bHQuYWRkKCJ9Iik7CiAgfQoKICB2b2lkIHZpc2l0VGVhck9mZkNvbnN0YW50KFRlYXJPZmZDb25zdGFudCBub2RlKSB7CiAgICBQcm9jZWR1cmUgcHJvY2VkdXJlID0gbm9kZS5wcm9jZWR1cmU7CiAgICBDbGFzcyBjbGFzc05vZGUgPSBwcm9jZWR1cmUuZW5jbG9zaW5nQ2xhc3M7CiAgICBpZiAoY2xhc3NOb2RlICE9IG51bGwpIHsKICAgICAgcmVzdWx0LmFkZChuYW1lRm9yRW50aXR5KAogICAgICAgICAgY2xhc3NOb2RlLAogICAgICAgICAgY2xhc3NOb2RlLm5hbWUsCiAgICAgICAgICBjbGFzc05vZGUuZW5jbG9zaW5nTGlicmFyeS5pbXBvcnRVcmksCiAgICAgICAgICBjbGFzc05vZGUuZW5jbG9zaW5nTGlicmFyeS5maWxlVXJpKSk7CiAgICAgIHJlc3VsdC5hZGQoIi4iKTsKICAgIH0KICAgIHJlc3VsdC5hZGQocHJvY2VkdXJlLm5hbWUubmFtZSk7CiAgfQoKICB2b2lkIHZpc2l0UGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudChQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50IG5vZGUpIHsKICAgIG5vZGUudGVhck9mZkNvbnN0YW50LmFjY2VwdCh0aGlzKTsKICAgIGlmIChub2RlLnR5cGVzLmlzTm90RW1wdHkpIHsKICAgICAgcmVzdWx0LmFkZCgiPCIpOwogICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgICAgZm9yIChEYXJ0VHlwZSB0eXBlQXJnIGluIG5vZGUudHlwZXMpIHsKICAgICAgICBpZiAoIWZpcnN0KSByZXN1bHQuYWRkKCIsICIpOwogICAgICAgIHR5cGVBcmcuYWNjZXB0KHRoaXMpOwogICAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICAgIH0KICAgICAgcmVzdWx0LmFkZCgiPiIpOwogICAgfQogIH0KCiAgdm9pZCB2aXNpdFR5cGVMaXRlcmFsQ29uc3RhbnQoVHlwZUxpdGVyYWxDb25zdGFudCBub2RlKSB7CiAgICBub2RlLnR5cGUuYWNjZXB0KHRoaXMpOwogIH0KCiAgdm9pZCB2aXNpdFVuZXZhbHVhdGVkQ29uc3RhbnQoVW5ldmFsdWF0ZWRDb25zdGFudCBub2RlKSB7CiAgICB1bnN1cHBvcnRlZCgncHJpbnRpbmcgdW5ldmFsdWF0ZWQgY29uc3RhbnRzJywgLTEsIG51bGwpOwogIH0KfQoKZmluYWwgVXJpIHVua25vd25VcmkgPSBVcmkucGFyc2UoInVua25vd24iKTsKCmNsYXNzIExhYmVsZWROb2RlIHsKICBmaW5hbCBUcmVlTm9kZSBub2RlOwogIGZpbmFsIFR5cGVMYWJlbGVyIHR5cGVMYWJlbGVyOwogIGZpbmFsIFN0cmluZyBuYW1lOwogIGZpbmFsIFVyaSBpbXBvcnRVcmk7CiAgZmluYWwgVXJpIGZpbGVVcmk7CgogIExhYmVsZWROb2RlKAogICAgICB0aGlzLm5vZGUsIHRoaXMubmFtZSwgdGhpcy5pbXBvcnRVcmksIHRoaXMuZmlsZVVyaSwgdGhpcy50eXBlTGFiZWxlcik7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIExpc3Q8TGFiZWxlZE5vZGU+IGVudGl0eUZvck5hbWUgPSB0eXBlTGFiZWxlci5uYW1lTWFwW25hbWVdOwogICAgaWYgKGVudGl0eUZvck5hbWUubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIG5hbWU7CiAgICB9CiAgICByZXR1cm4gIiRuYW1lLyoke2VudGl0eUZvck5hbWUuaW5kZXhPZih0aGlzKSArIDF9Ki8iOwogIH0KCiAgU3RyaW5nIGdldCBvcmlnaW5NZXNzYWdlIHsKICAgIGlmIChpbXBvcnRVcmkuc2NoZW1lID09ICdkYXJ0JyAmJiBpbXBvcnRVcmkucGF0aCA9PSAnY29yZScpIHsKICAgICAgaWYgKG5vZGUgaXMgQ2xhc3MgJiYgYmxhY2tsaXN0ZWRDb3JlQ2xhc3Nlcy5jb250YWlucyhuYW1lKSkgewogICAgICAgIC8vIEJsYWNrbGlzdGVkIGNvcmUgY2xhc3MuIE9ubHkgcHJpbnQgaWYgYW1iaWd1b3VzLgogICAgICAgIExpc3Q8TGFiZWxlZE5vZGU+IGVudGl0eUZvck5hbWUgPSB0eXBlTGFiZWxlci5uYW1lTWFwW25hbWVdOwogICAgICAgIGlmIChlbnRpdHlGb3JOYW1lLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoaW1wb3J0VXJpID09IHVua25vd25VcmkgfHwgbm9kZSBpcyEgQ2xhc3MpIHsKICAgICAgLy8gV2UgZG9uJ3Qga25vdyB3aGVyZSBpdCBjb21lcyBmcm9tIGFuZC9vciBpdCdzIG5vdCBhIGNsYXNzLgogICAgICAvLyBPbmx5IHByaW50IGlmIGFtYmlndW91cy4KICAgICAgTGlzdDxMYWJlbGVkTm9kZT4gZW50aXR5Rm9yTmFtZSA9IHR5cGVMYWJlbGVyLm5hbWVNYXBbbmFtZV07CiAgICAgIGlmIChlbnRpdHlGb3JOYW1lLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgcmV0dXJuICIiOwogICAgICB9CiAgICB9CiAgICBNZXNzYWdlIG1lc3NhZ2UgPSAoaW1wb3J0VXJpID09IGZpbGVVcmkgfHwgaW1wb3J0VXJpLnNjaGVtZSA9PSAnZGFydCcpCiAgICAgICAgPyB0ZW1wbGF0ZVR5cGVPcmlnaW4ud2l0aEFyZ3VtZW50cyh0b1N0cmluZygpLCBpbXBvcnRVcmkpCiAgICAgICAgOiB0ZW1wbGF0ZVR5cGVPcmlnaW5XaXRoRmlsZVVyaS53aXRoQXJndW1lbnRzKAogICAgICAgICAgICB0b1N0cmluZygpLCBpbXBvcnRVcmksIGZpbGVVcmkpOwogICAgcmV0dXJuICJcbiAtICIgKyBtZXNzYWdlLm1lc3NhZ2U7CiAgfQp9CoGUAE5OPAEhASEJFhQPEhoSGBUPFhUaFRcRFhUWJhMVGBgZEhUdFxsdEgFMAUIBHUUBLAFORk9ITC1KARcBG0tHTypPLBEXEwQBH0tHTzJPNBEbEwQBTUweMCYqBiAEAU4oREFFBhIEAR1EOSExGUUXIhMNOSorIAoIPhlFFx8TBgQBKS0BLFEgBAEqUB8EASwbBAEmGAQBOCYzHgZORicBHhgdTEwEAS4iHSoXGTkmIElLESMkCggXBhUXPCQxFQZKPRcUMDARJjMXCBcGK0IXFD4mMzgXCBcGFQQBMCYeExguLikXGTUmHhcIFwYEASkBLhYEAS4WBAEsFgQBMhYEATIWBAEyKQQBNkgWFzEkJCU2FQYVBAEuFSQWFy4kHRUGFQQBLBUkFhcuJB0VBhUEASwVHxYhFhczJB4YIBUGFQQBNCowHSAVGjAwFwYlBAFOJyEXGS0mHhcIFwYEATwcBAE8PQQCAS0BFBchFRcVAQ9NARZBJRMGOgQBHUJEPEUpFQoIBjVEIkMnEwgGS0I3LSYEAgE0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC90eXBlX2xhYmVsZXIuZGFydDtzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF9hcGkuZGFydIbMLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBUaGlzIGxpYnJhcnkgZXhwb3J0cyBhbGwgQVBJIGZyb20gS2VybmVsIHRoYXQgY2FuIGJlIHVzZWQgdGhyb3VnaG91dCBmYXN0YS4KbGlicmFyeSBmYXN0YS5rZXJuZWxfYXBpOwoKZXhwb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2FsZ2VicmEuZGFydCcgc2hvdyBTdWJzdGl0dXRpb24sIHN1YnN0aXR1dGU7CgpleHBvcnQgJ3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBzaG93IENsYXNzSGllcmFyY2h5OwoKZXhwb3J0ICdwYWNrYWdlOmtlcm5lbC9jbG9uZS5kYXJ0JyBzaG93IENsb25lVmlzaXRvcjsKCmV4cG9ydCAncGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0JyBzaG93IENvcmVUeXBlczsKCmV4cG9ydCAncGFja2FnZTprZXJuZWwvdHJhbnNmb3JtYXRpb25zL2ZsYWdzLmRhcnQnIHNob3cgVHJhbnNmb3JtZXJGbGFnOwoKZXhwb3J0ICdwYWNrYWdlOmtlcm5lbC90ZXh0L2FzdF90b190ZXh0LmRhcnQnIHNob3cgTmFtZVN5c3RlbTsKCmV4cG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9lbnZpcm9ubWVudC5kYXJ0JyBzaG93IFR5cGVFbnZpcm9ubWVudDsKCmV4cG9ydCAncGFja2FnZTprZXJuZWwvc3JjL2JvdW5kc19jaGVja3MuZGFydCcgc2hvdyBpbnN0YW50aWF0ZVRvQm91bmRzOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90ZXh0L2FzdF90b190ZXh0LmRhcnQnIHNob3cgTmFtZVN5c3RlbSwgUHJpbnRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgQ2xhc3MsIE1lbWJlciwgTm9kZTsKCnZvaWQgcHJpbnROb2RlT24oTm9kZSBub2RlLCBTdHJpbmdTaW5rIHNpbmssIHtOYW1lU3lzdGVtIHN5bnRoZXRpY05hbWVzfSkgewogIGlmIChub2RlID09IG51bGwpIHsKICAgIHNpbmsud3JpdGUoIm51bGwiKTsKICB9IGVsc2UgewogICAgc3ludGhldGljTmFtZXMgPz89IG5ldyBOYW1lU3lzdGVtKCk7CiAgICBuZXcgUHJpbnRlcihzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpLndyaXRlTm9kZShub2RlKTsKICB9Cn0KCnZvaWQgcHJpbnRRdWFsaWZpZWROYW1lT24oTWVtYmVyIG1lbWJlciwgU3RyaW5nU2luayBzaW5rLAogICAge05hbWVTeXN0ZW0gc3ludGhldGljTmFtZXN9KSB7CiAgaWYgKG1lbWJlciA9PSBudWxsKSB7CiAgICBzaW5rLndyaXRlKCJudWxsIik7CiAgfSBlbHNlIHsKICAgIHN5bnRoZXRpY05hbWVzID8/PSBuZXcgTmFtZVN5c3RlbSgpOwogICAgc2luay53cml0ZShtZW1iZXIuZW5jbG9zaW5nTGlicmFyeS5pbXBvcnRVcmkpOwogICAgc2luay53cml0ZSgiOjoiKTsKICAgIENsYXNzIGNscyA9IG1lbWJlci5lbmNsb3NpbmdDbGFzczsKICAgIGlmIChjbHMgIT0gbnVsbCkgewogICAgICBzaW5rLndyaXRlKGNscy5uYW1lID8/IHN5bnRoZXRpY05hbWVzLm5hbWVDbGFzcyhjbHMpKTsKICAgICAgc2luay53cml0ZSgiOjoiKTsKICAgIH0KICAgIHNpbmsud3JpdGUobWVtYmVyLm5hbWU/Lm5hbWUgPz8gc3ludGhldGljTmFtZXMubmFtZU1lbWJlcihtZW1iZXIpKTsKICB9Cn0KNgBOTjwBUBoBSQFCATYBOAFJAT8BRAFJAUgBOwFMFhgLKUcEAgE6IxgYCykzFicXPRgGSAQCATJwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF9hcGkuZGFydC9zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvY3Jhc2guZGFydI3sLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuY3Jhc2g7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnIHNob3cgRnV0dXJlOwoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnIHNob3cganNvbkVuY29kZTsKCmltcG9ydCAnZGFydDppbycKICAgIHNob3cgQ29udGVudFR5cGUsIEh0dHBDbGllbnQsIEh0dHBDbGllbnRSZXF1ZXN0LCBTb2NrZXRFeGNlcHRpb24sIHN0ZGVycjsKCmltcG9ydCAncHJvYmxlbXMuZGFydCcgc2hvdyBEZWJ1Z0Fib3J0OwoKY29uc3QgU3RyaW5nIGRlZmF1bHRTZXJ2ZXJBZGRyZXNzID0gImh0dHA6Ly8xMjcuMC4wLjE6NTk0MTAvIjsKCi8vLyBUcmFja3MgaWYgdGhlcmUgaGFzIGJlZW4gYSBjcmFzaCByZXBvcnRlZCB0aHJvdWdoIFtyZXBvcnRDcmFzaF0uIFNob3VsZCBiZQovLy8gcmVzZXQgYmV0d2VlbiBlYWNoIGNvbXBpbGF0aW9uIGJ5IGNhbGxpbmcgW3Jlc2V0Q3Jhc2hSZXBvcnRpbmddLgpib29sIGhhc0NyYXNoZWQgPSBmYWxzZTsKCi8vLyBUcmFja3MgdGhlIGZpcnN0IHNvdXJjZSBVUkkgdGhhdCBoYXMgYmVlbiByZWFkIGFuZCBpcyB1c2VkIGFzIGEgZmFsbC1iYWNrCi8vLyBmb3IgW3JlcG9ydENyYXNoXS4gU2hvdWxkIGJlIHJlc2V0IGJldHdlZW4gZWFjaCBjb21waWxhdGlvbiBieSBjYWxsaW5nCi8vLyBbcmVzZXRDcmFzaFJlcG9ydGluZ10uClVyaSBmaXJzdFNvdXJjZVVyaTsKCmNsYXNzIENyYXNoIHsKICBmaW5hbCBVcmkgdXJpOwoKICBmaW5hbCBpbnQgY2hhck9mZnNldDsKCiAgZmluYWwgT2JqZWN0IGVycm9yOwoKICBmaW5hbCBTdGFja1RyYWNlIHRyYWNlOwoKICBDcmFzaCh0aGlzLnVyaSwgdGhpcy5jaGFyT2Zmc2V0LCB0aGlzLmVycm9yLCB0aGlzLnRyYWNlKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICIiIgpDcmFzaCB3aGVuIGNvbXBpbGluZyAkdXJpLAphdCBjaGFyYWN0ZXIgb2Zmc2V0ICRjaGFyT2Zmc2V0OgokZXJyb3Ike3RyYWNlID09IG51bGwgPyAnJyA6ICdcbiR0cmFjZSd9CiIiIjsKICB9Cn0KCnZvaWQgcmVzZXRDcmFzaFJlcG9ydGluZygpIHsKICBmaXJzdFNvdXJjZVVyaSA9IG51bGw7CiAgaGFzQ3Jhc2hlZCA9IGZhbHNlOwp9CgpGdXR1cmU8VD4gcmVwb3J0Q3Jhc2g8VD4oZXJyb3IsIFN0YWNrVHJhY2UgdHJhY2UsCiAgICBbVXJpIHVyaSwgaW50IGNoYXJPZmZzZXRdKSBhc3luYyB7CiAgbm90ZShTdHJpbmcgbm90ZSkgYXN5bmMgewogICAgc3RkZXJyLndyaXRlKG5vdGUpOwogICAgYXdhaXQgc3RkZXJyLmZsdXNoKCk7CiAgfQoKICBpZiAoaGFzQ3Jhc2hlZCkgcmV0dXJuIG5ldyBGdXR1cmU8VD4uZXJyb3IoZXJyb3IsIHRyYWNlKTsKICBpZiAoZXJyb3IgaXMgQ3Jhc2gpIHsKICAgIHRyYWNlID0gZXJyb3IudHJhY2UgPz8gdHJhY2U7CiAgICB1cmkgPSBlcnJvci51cmkgPz8gdXJpOwogICAgY2hhck9mZnNldCA9IGVycm9yLmNoYXJPZmZzZXQgPz8gY2hhck9mZnNldDsKICAgIGVycm9yID0gZXJyb3IuZXJyb3I7CiAgfQogIHVyaSA/Pz0gZmlyc3RTb3VyY2VVcmk7CiAgaGFzQ3Jhc2hlZCA9IHRydWU7CiAgTWFwPFN0cmluZywgZHluYW1pYz4gZGF0YSA9IDxTdHJpbmcsIGR5bmFtaWM+e307CiAgZGF0YVsidHlwZSJdID0gImNyYXNoIjsKICBkYXRhWyJjbGllbnQiXSA9ICJwYWNrYWdlOmZhc3RhIjsKICBpZiAodXJpICE9IG51bGwpIGRhdGFbInVyaSJdID0gIiR1cmkiOwogIGlmIChjaGFyT2Zmc2V0ICE9IG51bGwpIGRhdGFbIm9mZnNldCJdID0gY2hhck9mZnNldDsKICBkYXRhWyJlcnJvciJdID0gc2FmZVRvU3RyaW5nKGVycm9yKTsKICBkYXRhWyJ0cmFjZSJdID0gIiR0cmFjZSI7CiAgU3RyaW5nIGpzb24gPSBqc29uRW5jb2RlKGRhdGEpOwogIEh0dHBDbGllbnQgY2xpZW50ID0gbmV3IEh0dHBDbGllbnQoKTsKICB0cnkgewogICAgVXJpIHNlcnZlclVyaSA9IFVyaS5wYXJzZShkZWZhdWx0U2VydmVyQWRkcmVzcyk7CiAgICBIdHRwQ2xpZW50UmVxdWVzdCByZXF1ZXN0OwogICAgdHJ5IHsKICAgICAgcmVxdWVzdCA9IGF3YWl0IGNsaWVudC5wb3N0VXJsKHNlcnZlclVyaSk7CiAgICB9IG9uIFNvY2tldEV4Y2VwdGlvbiB7CiAgICAgIC8vIEFzc3VtZSB0aGUgY3Jhc2ggbG9nZ2VyIGlzbid0IHJ1bm5pbmcuCiAgICAgIGNsaWVudC5jbG9zZShmb3JjZTogdHJ1ZSk7CiAgICAgIHJldHVybiBuZXcgRnV0dXJlPFQ+LmVycm9yKAogICAgICAgICAgbmV3IENyYXNoKHVyaSwgY2hhck9mZnNldCwgZXJyb3IsIHRyYWNlKSwgdHJhY2UpOwogICAgfQogICAgaWYgKHJlcXVlc3QgIT0gbnVsbCkgewogICAgICBhd2FpdCBub3RlKCJcblNlbmRpbmcgY3Jhc2ggcmVwb3J0IGRhdGEiKTsKICAgICAgcmVxdWVzdC5wZXJzaXN0ZW50Q29ubmVjdGlvbiA9IGZhbHNlOwogICAgICByZXF1ZXN0LmJ1ZmZlck91dHB1dCA9IGZhbHNlOwogICAgICBTdHJpbmcgaG9zdCA9IHJlcXVlc3Q/LmNvbm5lY3Rpb25JbmZvPy5yZW1vdGVBZGRyZXNzPy5ob3N0OwogICAgICBpbnQgcG9ydCA9IHJlcXVlc3Q/LmNvbm5lY3Rpb25JbmZvPy5yZW1vdGVQb3J0OwogICAgICBhd2FpdCBub3RlKCIgdG8gJGhvc3Q6JHBvcnQiKTsKICAgICAgYXdhaXQgcmVxdWVzdAogICAgICAgIC4uaGVhZGVycy5jb250ZW50VHlwZSA9IENvbnRlbnRUeXBlLmpzb24KICAgICAgICAuLndyaXRlKGpzb24pOwogICAgICBhd2FpdCByZXF1ZXN0LmNsb3NlKCk7CiAgICAgIGF3YWl0IG5vdGUoIi4iKTsKICAgIH0KICB9IGNhdGNoIChlLCBzKSB7CiAgICBhd2FpdCBub3RlKCJcbiR7c2FmZVRvU3RyaW5nKGUpfVxuJHNcbiIpOwogICAgYXdhaXQgbm90ZSgiXG5cblxuRkU6OkVSUk9SOjokanNvblxuXG5cbiIpOwogIH0KICBjbGllbnQuY2xvc2UoZm9yY2U6IHRydWUpOwogIGF3YWl0IG5vdGUoIlxuIik7CiAgcmV0dXJuIG5ldyBGdXR1cmU8VD4uZXJyb3IoZXJyb3IsIHRyYWNlKTsKfQoKU3RyaW5nIHNhZmVUb1N0cmluZyhPYmplY3Qgb2JqZWN0KSB7CiAgdHJ5IHsKICAgIHJldHVybiAiJG9iamVjdCI7CiAgfSBjYXRjaCAoZSkgewogICAgcmV0dXJuICJFcnJvciB3aGVuIGNvbnZlcnRpbmcgJHtvYmplY3QucnVudGltZVR5cGV9IHRvIHN0cmluZy4iOwogIH0KfQoKRnV0dXJlPFQ+IHdpdGhDcmFzaFJlcG9ydGluZzxUPigKICAgIEZ1dHVyZTxUPiBGdW5jdGlvbigpIGFjdGlvbiwgVXJpIEZ1bmN0aW9uKCkgY3VycmVudFVyaSkgYXN5bmMgewogIHJlc2V0Q3Jhc2hSZXBvcnRpbmcoKTsKICB0cnkgewogICAgcmV0dXJuIGF3YWl0IGFjdGlvbigpOwogIH0gb24gQ3Jhc2ggewogICAgcmV0aHJvdzsKICB9IG9uIERlYnVnQWJvcnQgewogICAgcmV0aHJvdzsKICB9IGNhdGNoIChlLCBzKSB7CiAgICByZXR1cm4gcmVwb3J0Q3Jhc2goZSwgcywgY3VycmVudFVyaSgpKTsKICB9Cn0KgIQATk48ARUBIQEnARFOASgBPwFPRRkBTksbFAEOEQEYARYBGgE8ARYPGyEpBQQCAR0ZFgIBMiccGBoEATwYIhwxGQQaFTMaJCk3JxwiKAg1HwoxGzAhIjwGGzEsJEI2JRQxFx0XBhMuMAQdFCwCASUIFhBFBAIBIUQZCBsPDRQNEywEAgEmcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2NyYXNoLmRhcnQ6c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2RpbGwvZGlsbF90YXJnZXQuZGFydIgdLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuZGlsbF90YXJnZXQ7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnIHNob3cgRnV0dXJlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBMaWJyYXJ5OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90YXJnZXQvdGFyZ2V0cy5kYXJ0JyBzaG93IFRhcmdldDsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnQnIHNob3cgQ2xhc3NCdWlsZGVyOwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JyBzaG93IHVuc3VwcG9ydGVkOwoKaW1wb3J0ICcuLi90YXJnZXRfaW1wbGVtZW50YXRpb24uZGFydCcgc2hvdyBUYXJnZXRJbXBsZW1lbnRhdGlvbjsKCmltcG9ydCAnLi4vdGlja2VyLmRhcnQnIHNob3cgVGlja2VyOwoKaW1wb3J0ICcuLi91cmlfdHJhbnNsYXRvci5kYXJ0JyBzaG93IFVyaVRyYW5zbGF0b3I7CgppbXBvcnQgJ2RpbGxfbGlicmFyeV9idWlsZGVyLmRhcnQnIHNob3cgRGlsbExpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICdkaWxsX2xvYWRlci5kYXJ0JyBzaG93IERpbGxMb2FkZXI7CgpjbGFzcyBEaWxsVGFyZ2V0IGV4dGVuZHMgVGFyZ2V0SW1wbGVtZW50YXRpb24gewogIGZpbmFsIE1hcDxVcmksIERpbGxMaWJyYXJ5QnVpbGRlcj4gbGlicmFyeUJ1aWxkZXJzID0KICAgICAgPFVyaSwgRGlsbExpYnJhcnlCdWlsZGVyPnt9OwoKICBib29sIGlzTG9hZGVkID0gZmFsc2U7CgogIERpbGxMb2FkZXIgbG9hZGVyOwoKICBEaWxsVGFyZ2V0KFRpY2tlciB0aWNrZXIsIFVyaVRyYW5zbGF0b3IgdXJpVHJhbnNsYXRvciwgVGFyZ2V0IGJhY2tlbmRUYXJnZXQpCiAgICAgIDogc3VwZXIodGlja2VyLCB1cmlUcmFuc2xhdG9yLCBiYWNrZW5kVGFyZ2V0KSB7CiAgICBsb2FkZXIgPSBuZXcgRGlsbExvYWRlcih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkU291cmNlSW5mb3JtYXRpb24oCiAgICAgIFVyaSBpbXBvcnRVcmksIFVyaSBmaWxlVXJpLCBMaXN0PGludD4gbGluZVN0YXJ0cywgTGlzdDxpbnQ+IHNvdXJjZUNvZGUpIHsKICAgIHVuc3VwcG9ydGVkKCJhZGRTb3VyY2VJbmZvcm1hdGlvbiIsIC0xLCBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIEZ1dHVyZTxOdWxsPiBidWlsZENvbXBvbmVudCgpIHsKICAgIHJldHVybiBuZXcgRnV0dXJlPE51bGw+LnN5bmMoKCkgPT4gdW5zdXBwb3J0ZWQoImJ1aWxkQ29tcG9uZW50IiwgLTEsIG51bGwpKTsKICB9CgogIEBvdmVycmlkZQogIEZ1dHVyZTxOdWxsPiBidWlsZE91dGxpbmVzKCkgYXN5bmMgewogICAgaWYgKGxvYWRlci5saWJyYXJpZXMuaXNOb3RFbXB0eSkgewogICAgICBhd2FpdCBsb2FkZXIuYnVpbGRPdXRsaW5lcygpOwogICAgICBsb2FkZXIuZmluYWxpemVFeHBvcnRzKCk7CiAgICB9CiAgICBpc0xvYWRlZCA9IHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBEaWxsTGlicmFyeUJ1aWxkZXIgY3JlYXRlTGlicmFyeUJ1aWxkZXIoVXJpIHVyaSwgVXJpIGZpbGVVcmksIG9yaWdpbikgewogICAgYXNzZXJ0KG9yaWdpbiA9PSBudWxsKTsKICAgIERpbGxMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5QnVpbGRlciA9IGxpYnJhcnlCdWlsZGVycy5yZW1vdmUodXJpKTsKICAgIGFzc2VydChsaWJyYXJ5QnVpbGRlciAhPSBudWxsLCAiTm8gbGlicmFyeSBmb3VuZCBmb3IgJHVyaS4iKTsKICAgIHJldHVybiBsaWJyYXJ5QnVpbGRlcjsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYnJlYWtDeWNsZShDbGFzc0J1aWxkZXIgY2xzKSB7fQoKICB2b2lkIGFkZExpYnJhcnkoTGlicmFyeSBsaWJyYXJ5KSB7CiAgICBsaWJyYXJ5QnVpbGRlcnNbbGlicmFyeS5pbXBvcnRVcmldID0KICAgICAgICBuZXcgRGlsbExpYnJhcnlCdWlsZGVyKGxpYnJhcnksIGxvYWRlcik7CiAgfQp9Ck0ATk48ARsBIQEvATkBOgEsAUIBJQE0ATwBKwEwNyMBGQEVAU82IwQBDB1QMwQBDCJRBAEMJyckIAYVBAEMShxFQhsEAQwnASUpMQQCATFwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvZGlsbC9kaWxsX3RhcmdldC5kYXJ0PnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwva2VybmVsX3RhcmdldC5kYXJ0wAB+Wi8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmtlcm5lbF90YXJnZXQ7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnIHNob3cgRnV0dXJlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBBcmd1bWVudHMsCiAgICAgICAgQ2Fub25pY2FsTmFtZSwKICAgICAgICBDbGFzcywKICAgICAgICBDb21wb25lbnQsCiAgICAgICAgQ29uc3RydWN0b3IsCiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRW1wdHlTdGF0ZW1lbnQsCiAgICAgICAgRXhwcmVzc2lvbiwKICAgICAgICBGaWVsZCwKICAgICAgICBGaWVsZEluaXRpYWxpemVyLAogICAgICAgIEZ1bmN0aW9uTm9kZSwKICAgICAgICBJbml0aWFsaXplciwKICAgICAgICBJbnRlcmZhY2VUeXBlLAogICAgICAgIEludmFsaWRJbml0aWFsaXplciwKICAgICAgICBMaWJyYXJ5LAogICAgICAgIE5hbWUsCiAgICAgICAgTmFtZWRFeHByZXNzaW9uLAogICAgICAgIE51bGxMaXRlcmFsLAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBSZWRpcmVjdGluZ0luaXRpYWxpemVyLAogICAgICAgIFNvdXJjZSwKICAgICAgICBTdXBlckluaXRpYWxpemVyLAogICAgICAgIFR5cGVQYXJhbWV0ZXIsCiAgICAgICAgVHlwZVBhcmFtZXRlclR5cGUsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiwKICAgICAgICBWYXJpYWJsZUdldDsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xvbmUuZGFydCcgc2hvdyBDbG9uZVZpc2l0b3I7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0JyBzaG93IHN1YnN0aXR1dGU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3RhcmdldC90YXJnZXRzLmRhcnQnIHNob3cgRGlhZ25vc3RpY1JlcG9ydGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnQnIHNob3cgVHlwZUVudmlyb25tZW50OwoKaW1wb3J0ICcuLi8uLi9hcGlfcHJvdG90eXBlL2ZpbGVfc3lzdGVtLmRhcnQnIHNob3cgRmlsZVN5c3RlbTsKCmltcG9ydCAnLi4vY29tcGlsZXJfY29udGV4dC5kYXJ0JyBzaG93IENvbXBpbGVyQ29udGV4dDsKCmltcG9ydCAnLi4vY3Jhc2guZGFydCcgc2hvdyB3aXRoQ3Jhc2hSZXBvcnRpbmc7CgppbXBvcnQgJy4uL2RpbGwvZGlsbF90YXJnZXQuZGFydCcgc2hvdyBEaWxsVGFyZ2V0OwoKaW1wb3J0ICcuLi9kaWxsL2RpbGxfbWVtYmVyX2J1aWxkZXIuZGFydCcgc2hvdyBEaWxsTWVtYmVyQnVpbGRlcjsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcgc2hvdyBNZXNzYWdlLCBMb2NhdGVkTWVzc2FnZTsKCmltcG9ydCAnLi4vbG9hZGVyLmRhcnQnIHNob3cgTG9hZGVyOwoKaW1wb3J0ICcuLi9tZXNzYWdlcy5kYXJ0JwogICAgc2hvdwogICAgICAgIEZvcm1hdHRlZE1lc3NhZ2UsCiAgICAgICAgbWVzc2FnZUNvbnN0Q29uc3RydWN0b3JOb25GaW5hbEZpZWxkLAogICAgICAgIG1lc3NhZ2VDb25zdENvbnN0cnVjdG9yTm9uRmluYWxGaWVsZENhdXNlLAogICAgICAgIG1lc3NhZ2VDb25zdENvbnN0cnVjdG9yUmVkaXJlY3Rpb25Ub05vbkNvbnN0LAogICAgICAgIG5vTGVuZ3RoLAogICAgICAgIHRlbXBsYXRlRmluYWxGaWVsZE5vdEluaXRpYWxpemVkLAogICAgICAgIHRlbXBsYXRlRmluYWxGaWVsZE5vdEluaXRpYWxpemVkQnlDb25zdHJ1Y3RvciwKICAgICAgICB0ZW1wbGF0ZUluZmVycmVkUGFja2FnZVVyaSwKICAgICAgICB0ZW1wbGF0ZU1pc3NpbmdJbXBsZW1lbnRhdGlvbkNhdXNlLAogICAgICAgIHRlbXBsYXRlU3VwZXJjbGFzc0hhc05vRGVmYXVsdENvbnN0cnVjdG9yOwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JyBzaG93IHVuaGFuZGxlZDsKCmltcG9ydCAnLi4vc2NvcGUuZGFydCcgc2hvdyBBbWJpZ3VvdXNCdWlsZGVyOwoKaW1wb3J0ICcuLi9zb3VyY2Uvc291cmNlX2NsYXNzX2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VDbGFzc0J1aWxkZXI7CgppbXBvcnQgJy4uL3NvdXJjZS9zb3VyY2VfbGlicmFyeV9idWlsZGVyLmRhcnQnIHNob3cgU291cmNlTGlicmFyeUJ1aWxkZXI7CgppbXBvcnQgJy4uL3NvdXJjZS9zb3VyY2VfbG9hZGVyLmRhcnQnIHNob3cgU291cmNlTG9hZGVyOwoKaW1wb3J0ICcuLi90YXJnZXRfaW1wbGVtZW50YXRpb24uZGFydCcgc2hvdyBUYXJnZXRJbXBsZW1lbnRhdGlvbjsKCmltcG9ydCAnLi4vdXJpX3RyYW5zbGF0b3IuZGFydCcgc2hvdyBVcmlUcmFuc2xhdG9yOwoKaW1wb3J0ICdjb25zdGFudF9ldmFsdWF0b3IuZGFydCcgYXMgY29uc3RhbnRzIHNob3cgdHJhbnNmb3JtTGlicmFyaWVzOwoKaW1wb3J0ICdrZXJuZWxfYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIENsYXNzQnVpbGRlciwKICAgICAgICBCdWlsZGVyLAogICAgICAgIEludmFsaWRUeXBlQnVpbGRlciwKICAgICAgICBGaWVsZEJ1aWxkZXIsCiAgICAgICAgTmFtZWRUeXBlQnVpbGRlciwKICAgICAgICBQcm9jZWR1cmVCdWlsZGVyLAogICAgICAgIExpYnJhcnlCdWlsZGVyLAogICAgICAgIFR5cGVCdWlsZGVyLAogICAgICAgIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXI7CgppbXBvcnQgJ2tlcm5lbF9jb25zdGFudHMuZGFydCcgc2hvdyBLZXJuZWxDb25zdGFudEVycm9yUmVwb3J0ZXI7CgppbXBvcnQgJ21ldGFkYXRhX2NvbGxlY3Rvci5kYXJ0JyBzaG93IE1ldGFkYXRhQ29sbGVjdG9yOwoKaW1wb3J0ICd2ZXJpZmllci5kYXJ0JyBzaG93IHZlcmlmeUNvbXBvbmVudDsKCmNsYXNzIEtlcm5lbFRhcmdldCBleHRlbmRzIFRhcmdldEltcGxlbWVudGF0aW9uIHsKICAvLy8gVGhlIFtGaWxlU3lzdGVtXSB3aGljaCBzaG91bGQgYmUgdXNlZCB0byBhY2Nlc3MgZmlsZXMuCiAgZmluYWwgRmlsZVN5c3RlbSBmaWxlU3lzdGVtOwoKICAvLy8gV2hldGhlciBjb21tZW50cyBzaG91bGQgYmUgc2Nhbm5lZCBhbmQgcGFyc2VkLgogIGZpbmFsIGJvb2wgaW5jbHVkZUNvbW1lbnRzOwoKICBmaW5hbCBEaWxsVGFyZ2V0IGRpbGxUYXJnZXQ7CgogIC8vLyBUaGUgW01ldGFkYXRhQ29sbGVjdG9yXSB0byB3cml0ZSBtZXRhZGF0YSB0by4KICBmaW5hbCBNZXRhZGF0YUNvbGxlY3RvciBtZXRhZGF0YUNvbGxlY3RvcjsKCiAgU291cmNlTG9hZGVyIGxvYWRlcjsKCiAgQ29tcG9uZW50IGNvbXBvbmVudDsKCiAgZmluYWwgVHlwZUJ1aWxkZXIgZHluYW1pY1R5cGUgPSBuZXcgTmFtZWRUeXBlQnVpbGRlcigiZHluYW1pYyIsIG51bGwpOwoKICBmaW5hbCBOYW1lZFR5cGVCdWlsZGVyIG9iamVjdFR5cGUgPSBuZXcgTmFtZWRUeXBlQnVpbGRlcigiT2JqZWN0IiwgbnVsbCk7CgogIGZpbmFsIFR5cGVCdWlsZGVyIGJvdHRvbVR5cGUgPSBuZXcgTmFtZWRUeXBlQnVpbGRlcigiTnVsbCIsIG51bGwpOwoKICBib29sIGdldCBsZWdhY3lNb2RlID0+IGJhY2tlbmRUYXJnZXQubGVnYWN5TW9kZTsKCiAgZmluYWwgYm9vbCBleGNsdWRlU291cmNlID0gIUNvbXBpbGVyQ29udGV4dC5jdXJyZW50Lm9wdGlvbnMuZW1iZWRTb3VyY2VUZXh0OwoKICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50RGVmaW5lcyA9CiAgICAgIENvbXBpbGVyQ29udGV4dC5jdXJyZW50Lm9wdGlvbnMuZW52aXJvbm1lbnREZWZpbmVzOwoKICBmaW5hbCBib29sIGVycm9yT25VbmV2YWx1YXRlZENvbnN0YW50ID0KICAgICAgQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQub3B0aW9ucy5lcnJvck9uVW5ldmFsdWF0ZWRDb25zdGFudDsKCiAgZmluYWwgTGlzdDxPYmplY3Q+IGNsb25lZEZvcm1hbHMgPSA8T2JqZWN0PltdOwoKICBLZXJuZWxUYXJnZXQodGhpcy5maWxlU3lzdGVtLCB0aGlzLmluY2x1ZGVDb21tZW50cywgRGlsbFRhcmdldCBkaWxsVGFyZ2V0LAogICAgICBVcmlUcmFuc2xhdG9yIHVyaVRyYW5zbGF0b3IsCiAgICAgIHtNZXRhZGF0YUNvbGxlY3RvciBtZXRhZGF0YUNvbGxlY3Rvcn0pCiAgICAgIDogZGlsbFRhcmdldCA9IGRpbGxUYXJnZXQsCiAgICAgICAgbWV0YWRhdGFDb2xsZWN0b3IgPSBtZXRhZGF0YUNvbGxlY3RvciwKICAgICAgICBzdXBlcihkaWxsVGFyZ2V0LnRpY2tlciwgdXJpVHJhbnNsYXRvciwgZGlsbFRhcmdldC5iYWNrZW5kVGFyZ2V0KSB7CiAgICBsb2FkZXIgPSBjcmVhdGVMb2FkZXIoKTsKICB9CgogIFNvdXJjZUxvYWRlciBjcmVhdGVMb2FkZXIoKSA9PgogICAgICBuZXcgU291cmNlTG9hZGVyKGZpbGVTeXN0ZW0sIGluY2x1ZGVDb21tZW50cywgdGhpcyk7CgogIHZvaWQgYWRkU291cmNlSW5mb3JtYXRpb24oCiAgICAgIFVyaSBpbXBvcnRVcmksIFVyaSBmaWxlVXJpLCBMaXN0PGludD4gbGluZVN0YXJ0cywgTGlzdDxpbnQ+IHNvdXJjZUNvZGUpIHsKICAgIHVyaVRvU291cmNlW2ZpbGVVcmldID0KICAgICAgICBuZXcgU291cmNlKGxpbmVTdGFydHMsIHNvdXJjZUNvZGUsIGltcG9ydFVyaSwgZmlsZVVyaSk7CiAgfQoKICAvLy8gUmV0dXJuIGxpc3Qgb2Ygc2FtZSBzaXplIGFzIGlucHV0IHdpdGggcG9zc2libHkgdHJhbnNsYXRlZCB1cmlzLgogIExpc3Q8VXJpPiBzZXRFbnRyeVBvaW50cyhMaXN0PFVyaT4gZW50cnlQb2ludHMpIHsKICAgIE1hcDxTdHJpbmcsIFVyaT4gcGFja2FnZXNNYXA7CiAgICBMaXN0PFVyaT4gcmVzdWx0ID0gbmV3IExpc3Q8VXJpPigpOwogICAgZm9yIChVcmkgZW50cnlQb2ludCBpbiBlbnRyeVBvaW50cykgewogICAgICBTdHJpbmcgc2NoZW1lID0gZW50cnlQb2ludC5zY2hlbWU7CiAgICAgIFVyaSBmaWxlVXJpOwogICAgICBzd2l0Y2ggKHNjaGVtZSkgewogICAgICAgIGNhc2UgInBhY2thZ2UiOgogICAgICAgIGNhc2UgImRhcnQiOgogICAgICAgIGNhc2UgImRhdGEiOgogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIC8vIEF0dGVtcHQgdG8gcmV2ZXJzZS1sb29rdXAgW2VudHJ5UG9pbnRdIGluIHBhY2thZ2UgY29uZmlnLgogICAgICAgICAgU3RyaW5nIGFzU3RyaW5nID0gIiRlbnRyeVBvaW50IjsKICAgICAgICAgIHBhY2thZ2VzTWFwID8/PSB1cmlUcmFuc2xhdG9yLnBhY2thZ2VzLmFzTWFwKCk7CiAgICAgICAgICBmb3IgKFN0cmluZyBwYWNrYWdlTmFtZSBpbiBwYWNrYWdlc01hcC5rZXlzKSB7CiAgICAgICAgICAgIFVyaSBwYWNrYWdlVXJpID0gcGFja2FnZXNNYXBbcGFja2FnZU5hbWVdOwogICAgICAgICAgICBpZiAocGFja2FnZVVyaT8uaGFzRnJhZ21lbnQgPT0gdHJ1ZSkgewogICAgICAgICAgICAgIHBhY2thZ2VVcmkgPSBwYWNrYWdlVXJpLnJlbW92ZUZyYWdtZW50KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9ICIke3BhY2thZ2VVcml9IjsKICAgICAgICAgICAgaWYgKGFzU3RyaW5nLnN0YXJ0c1dpdGgocHJlZml4KSkgewogICAgICAgICAgICAgIFVyaSByZXZlcnNlZCA9IFVyaS5wYXJzZSgKICAgICAgICAgICAgICAgICAgInBhY2thZ2U6JHBhY2thZ2VOYW1lLyR7YXNTdHJpbmcuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpfSIpOwogICAgICAgICAgICAgIGlmIChlbnRyeVBvaW50ID09IHVyaVRyYW5zbGF0b3IudHJhbnNsYXRlKHJldmVyc2VkKSkgewogICAgICAgICAgICAgICAgbG9hZGVyLmFkZFByb2JsZW0oCiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVJbmZlcnJlZFBhY2thZ2VVcmkud2l0aEFyZ3VtZW50cyhyZXZlcnNlZCksCiAgICAgICAgICAgICAgICAgICAgLTEsCiAgICAgICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAgICAgICAgICBlbnRyeVBvaW50KTsKICAgICAgICAgICAgICAgIGZpbGVVcmkgPSBlbnRyeVBvaW50OwogICAgICAgICAgICAgICAgZW50cnlQb2ludCA9IHJldmVyc2VkOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgIH0KICAgICAgcmVzdWx0LmFkZChlbnRyeVBvaW50KTsKICAgICAgbG9hZGVyLnJlYWQoZW50cnlQb2ludCwgLTEsIGFjY2Vzc29yOiBsb2FkZXIuZmlyc3QsIGZpbGVVcmk6IGZpbGVVcmkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIExpYnJhcnlCdWlsZGVyIGNyZWF0ZUxpYnJhcnlCdWlsZGVyKAogICAgICBVcmkgdXJpLCBVcmkgZmlsZVVyaSwgU291cmNlTGlicmFyeUJ1aWxkZXIgb3JpZ2luKSB7CiAgICBpZiAoZGlsbFRhcmdldC5pc0xvYWRlZCkgewogICAgICBMaWJyYXJ5QnVpbGRlciBidWlsZGVyID0gZGlsbFRhcmdldC5sb2FkZXIuYnVpbGRlcnNbdXJpXTsKICAgICAgaWYgKGJ1aWxkZXIgIT0gbnVsbCkgewogICAgICAgIHJldHVybiBidWlsZGVyOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IFNvdXJjZUxpYnJhcnlCdWlsZGVyKHVyaSwgZmlsZVVyaSwgbG9hZGVyLCBvcmlnaW4pOwogIH0KCiAgLy8vIFJldHVybnMgY2xhc3NlcyBkZWZpbmVkIGluIGxpYnJhcmllcyBpbiBbbG9hZGVyXS4KICBMaXN0PFNvdXJjZUNsYXNzQnVpbGRlcj4gY29sbGVjdE15Q2xhc3NlcygpIHsKICAgIExpc3Q8U291cmNlQ2xhc3NCdWlsZGVyPiByZXN1bHQgPSA8U291cmNlQ2xhc3NCdWlsZGVyPltdOwogICAgbG9hZGVyLmJ1aWxkZXJzLmZvckVhY2goKFVyaSB1cmksIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgICAgaWYgKGxpYnJhcnkubG9hZGVyID09IGxvYWRlcikgewogICAgICAgIEl0ZXJhdG9yPEJ1aWxkZXI+IGl0ZXJhdG9yID0gbGlicmFyeS5pdGVyYXRvcjsKICAgICAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICAgICAgQnVpbGRlciBtZW1iZXIgPSBpdGVyYXRvci5jdXJyZW50OwogICAgICAgICAgaWYgKG1lbWJlciBpcyBTb3VyY2VDbGFzc0J1aWxkZXIgJiYgIW1lbWJlci5pc1BhdGNoKSB7CiAgICAgICAgICAgIHJlc3VsdC5hZGQobWVtYmVyKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgYnJlYWtDeWNsZShDbGFzc0J1aWxkZXIgYnVpbGRlcikgewogICAgQ2xhc3MgY2xzID0gYnVpbGRlci5jbHM7CiAgICBjbHMuaW1wbGVtZW50ZWRUeXBlcy5jbGVhcigpOwogICAgY2xzLnN1cGVydHlwZSA9IG51bGw7CiAgICBjbHMubWl4ZWRJblR5cGUgPSBudWxsOwogICAgYnVpbGRlci5zdXBlcnR5cGUgPSBuZXcgTmFtZWRUeXBlQnVpbGRlcigiT2JqZWN0IiwgbnVsbCkKICAgICAgLi5iaW5kKG9iamVjdENsYXNzQnVpbGRlcik7CiAgICBidWlsZGVyLmludGVyZmFjZXMgPSBudWxsOwogICAgYnVpbGRlci5taXhlZEluVHlwZSA9IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBGdXR1cmU8Q29tcG9uZW50PiBidWlsZE91dGxpbmVzKHtDYW5vbmljYWxOYW1lIG5hbWVSb290fSkgYXN5bmMgewogICAgaWYgKGxvYWRlci5maXJzdCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiB3aXRoQ3Jhc2hSZXBvcnRpbmc8Q29tcG9uZW50PigoKSBhc3luYyB7CiAgICAgIGxvYWRlci5jcmVhdGVUeXBlSW5mZXJlbmNlRW5naW5lKCk7CiAgICAgIGF3YWl0IGxvYWRlci5idWlsZE91dGxpbmVzKCk7CiAgICAgIGxvYWRlci5jb3JlTGlicmFyeS5iZWNvbWVDb3JlTGlicmFyeSgpOwogICAgICBkeW5hbWljVHlwZS5iaW5kKAogICAgICAgICAgbG9hZGVyLmNvcmVMaWJyYXJ5Lmxvb2t1cExvY2FsTWVtYmVyKCJkeW5hbWljIiwgcmVxdWlyZWQ6IHRydWUpKTsKICAgICAgbG9hZGVyLnJlc29sdmVQYXJ0cygpOwogICAgICBsb2FkZXIuY29tcHV0ZUxpYnJhcnlTY29wZXMoKTsKICAgICAgb2JqZWN0VHlwZQogICAgICAgICAgLmJpbmQobG9hZGVyLmNvcmVMaWJyYXJ5Lmxvb2t1cExvY2FsTWVtYmVyKCJPYmplY3QiLCByZXF1aXJlZDogdHJ1ZSkpOwogICAgICBib3R0b21UeXBlCiAgICAgICAgICAuYmluZChsb2FkZXIuY29yZUxpYnJhcnkubG9va3VwTG9jYWxNZW1iZXIoIk51bGwiLCByZXF1aXJlZDogdHJ1ZSkpOwogICAgICBsb2FkZXIucmVzb2x2ZVR5cGVzKCk7CiAgICAgIGxvYWRlci5jb21wdXRlRGVmYXVsdFR5cGVzKGR5bmFtaWNUeXBlLCBib3R0b21UeXBlLCBvYmplY3RDbGFzc0J1aWxkZXIpOwogICAgICBMaXN0PFNvdXJjZUNsYXNzQnVpbGRlcj4gbXlDbGFzc2VzID0KICAgICAgICAgIGxvYWRlci5jaGVja1NlbWFudGljcyhvYmplY3RDbGFzc0J1aWxkZXIpOwogICAgICBsb2FkZXIuZmluaXNoVHlwZVZhcmlhYmxlcyhvYmplY3RDbGFzc0J1aWxkZXIsIGR5bmFtaWNUeXBlKTsKICAgICAgbG9hZGVyLmJ1aWxkQ29tcG9uZW50KCk7CiAgICAgIGxvYWRlci5maW5hbGl6ZUluaXRpYWxpemluZ0Zvcm1hbHMoKTsKICAgICAgaW5zdGFsbERlZmF1bHRTdXBlcnR5cGVzKCk7CiAgICAgIGluc3RhbGxTeW50aGV0aWNDb25zdHJ1Y3RvcnMobXlDbGFzc2VzKTsKICAgICAgbG9hZGVyLnJlc29sdmVDb25zdHJ1Y3RvcnMoKTsKICAgICAgY29tcG9uZW50ID0KICAgICAgICAgIGxpbmsobmV3IExpc3Q8TGlicmFyeT4uZnJvbShsb2FkZXIubGlicmFyaWVzKSwgbmFtZVJvb3Q6IG5hbWVSb290KTsKICAgICAgY29tcHV0ZUNvcmVUeXBlcygpOwogICAgICBsb2FkZXIuYnVpbGRDbGFzc0hpZXJhcmNoeShteUNsYXNzZXMsIG9iamVjdENsYXNzQnVpbGRlcik7CiAgICAgIGxvYWRlci5jb21wdXRlSGllcmFyY2h5KCk7CiAgICAgIGxvYWRlci5wZXJmb3JtVG9wTGV2ZWxJbmZlcmVuY2UobXlDbGFzc2VzKTsKICAgICAgbG9hZGVyLmNoZWNrU3VwZXJ0eXBlcyhteUNsYXNzZXMpOwogICAgICBsb2FkZXIuY2hlY2tCb3VuZHMoKTsKICAgICAgbG9hZGVyLmNoZWNrT3ZlcnJpZGVzKG15Q2xhc3Nlcyk7CiAgICAgIGxvYWRlci5jaGVja0Fic3RyYWN0TWVtYmVycyhteUNsYXNzZXMpOwogICAgICBsb2FkZXIuY2hlY2tSZWRpcmVjdGluZ0ZhY3RvcmllcyhteUNsYXNzZXMpOwogICAgICBsb2FkZXIuYWRkTm9TdWNoTWV0aG9kRm9yd2FyZGVycyhteUNsYXNzZXMpOwogICAgICBsb2FkZXIuY2hlY2tNaXhpbnMobXlDbGFzc2VzKTsKICAgICAgbG9hZGVyLmJ1aWxkT3V0bGluZUV4cHJlc3Npb25zKCk7CiAgICAgIGluc3RhbGxBbGxDb21wb25lbnRQcm9ibGVtcyhsb2FkZXIuYWxsQ29tcG9uZW50UHJvYmxlbXMpOwogICAgICBsb2FkZXIuYWxsQ29tcG9uZW50UHJvYmxlbXMuY2xlYXIoKTsKICAgICAgcmV0dXJuIGNvbXBvbmVudDsKICAgIH0sICgpID0+IGxvYWRlcj8uY3VycmVudFVyaUZvckNyYXNoUmVwb3J0aW5nKTsKICB9CgogIC8vLyBCdWlsZCB0aGUga2VybmVsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21wb25lbnQgbG9hZGVkIGJ5IHRoaXMKICAvLy8gdGFyZ2V0LiBUaGUgY29tcG9uZW50IHdpbGwgY29udGFpbiBmdWxsIGJvZGllcyBmb3IgdGhlIGNvZGUgbG9hZGVkIGZyb20KICAvLy8gc291cmNlcywgYW5kIG9ubHkgcmVmZXJlbmNlcyB0byB0aGUgY29kZSBsb2FkZWQgYnkgdGhlIFtEaWxsVGFyZ2V0XSwKICAvLy8gd2hpY2ggbWF5IG9yIG1heSBub3QgaW5jbHVkZSBtZXRob2QgYm9kaWVzIChkZXBlbmRpbmcgb24gd2hhdCB3YXMgbG9hZGVkCiAgLy8vIGludG8gdGhhdCB0YXJnZXQsIGFuIG91dGxpbmUgb3IgYSBmdWxsIGtlcm5lbCBjb21wb25lbnQpLgogIC8vLwogIC8vLyBJZiBbdmVyaWZ5XSwgcnVuIHRoZSBkZWZhdWx0IGtlcm5lbCB2ZXJpZmljYXRpb24gb24gdGhlIHJlc3VsdGluZwogIC8vLyBjb21wb25lbnQuCiAgQG92ZXJyaWRlCiAgRnV0dXJlPENvbXBvbmVudD4gYnVpbGRDb21wb25lbnQoe2Jvb2wgdmVyaWZ5OiBmYWxzZX0pIGFzeW5jIHsKICAgIGlmIChsb2FkZXIuZmlyc3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gd2l0aENyYXNoUmVwb3J0aW5nPENvbXBvbmVudD4oKCkgYXN5bmMgewogICAgICB0aWNrZXIubG9nTXMoIkJ1aWxkaW5nIGNvbXBvbmVudCIpOwogICAgICBhd2FpdCBsb2FkZXIuYnVpbGRCb2RpZXMoKTsKICAgICAgZmluaXNoQ2xvbmVkUGFyYW1ldGVycygpOwogICAgICBsb2FkZXIuZmluaXNoRGVmZXJyZWRMb2FkVGVhcm9mZnMoKTsKICAgICAgbG9hZGVyLmZpbmlzaE5vU3VjaE1ldGhvZEZvcndhcmRlcnMoKTsKICAgICAgTGlzdDxTb3VyY2VDbGFzc0J1aWxkZXI+IG15Q2xhc3NlcyA9IGNvbGxlY3RNeUNsYXNzZXMoKTsKICAgICAgbG9hZGVyLmZpbmlzaE5hdGl2ZU1ldGhvZHMoKTsKICAgICAgbG9hZGVyLmZpbmlzaFBhdGNoTWV0aG9kcygpOwogICAgICBmaW5pc2hBbGxDb25zdHJ1Y3RvcnMobXlDbGFzc2VzKTsKICAgICAgcnVuQnVpbGRUcmFuc2Zvcm1hdGlvbnMoKTsKCiAgICAgIGlmICh2ZXJpZnkpIHRoaXMudmVyaWZ5KCk7CiAgICAgIGluc3RhbGxBbGxDb21wb25lbnRQcm9ibGVtcyhsb2FkZXIuYWxsQ29tcG9uZW50UHJvYmxlbXMpOwogICAgICByZXR1cm4gY29tcG9uZW50OwogICAgfSwgKCkgPT4gbG9hZGVyPy5jdXJyZW50VXJpRm9yQ3Jhc2hSZXBvcnRpbmcpOwogIH0KCiAgdm9pZCBpbnN0YWxsQWxsQ29tcG9uZW50UHJvYmxlbXMoCiAgICAgIExpc3Q8Rm9ybWF0dGVkTWVzc2FnZT4gYWxsQ29tcG9uZW50UHJvYmxlbXMpIHsKICAgIGlmIChhbGxDb21wb25lbnRQcm9ibGVtcy5pc05vdEVtcHR5KSB7CiAgICAgIGNvbXBvbmVudC5wcm9ibGVtc0FzSnNvbiA/Pz0gPFN0cmluZz5bXTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWxsQ29tcG9uZW50UHJvYmxlbXMubGVuZ3RoOyBpKyspIHsKICAgICAgRm9ybWF0dGVkTWVzc2FnZSBmb3JtYXR0ZWRNZXNzYWdlID0gYWxsQ29tcG9uZW50UHJvYmxlbXNbaV07CiAgICAgIGNvbXBvbmVudC5wcm9ibGVtc0FzSnNvbi5hZGQoZm9ybWF0dGVkTWVzc2FnZS50b0pzb25TdHJpbmcoKSk7CiAgICB9CiAgfQoKICAvLy8gQ3JlYXRlcyBhIGNvbXBvbmVudCBieSBjb21iaW5pbmcgW2xpYnJhcmllc10gd2l0aCB0aGUgbGlicmFyaWVzIG9mCiAgLy8vIGBkaWxsVGFyZ2V0LmxvYWRlci5jb21wb25lbnRgLgogIENvbXBvbmVudCBsaW5rKExpc3Q8TGlicmFyeT4gbGlicmFyaWVzLCB7Q2Fub25pY2FsTmFtZSBuYW1lUm9vdH0pIHsKICAgIGxpYnJhcmllcy5hZGRBbGwoZGlsbFRhcmdldC5sb2FkZXIubGlicmFyaWVzKTsKCiAgICBNYXA8VXJpLCBTb3VyY2U+IHVyaVRvU291cmNlID0gbmV3IE1hcDxVcmksIFNvdXJjZT4oKTsKICAgIHZvaWQgY29weVNvdXJjZShVcmkgdXJpLCBTb3VyY2Ugc291cmNlKSB7CiAgICAgIHVyaVRvU291cmNlW3VyaV0gPSBleGNsdWRlU291cmNlCiAgICAgICAgICA/IG5ldyBTb3VyY2Uoc291cmNlLmxpbmVTdGFydHMsIGNvbnN0IDxpbnQ+W10sIHNvdXJjZS5pbXBvcnRVcmksCiAgICAgICAgICAgICAgc291cmNlLmZpbGVVcmkpCiAgICAgICAgICA6IHNvdXJjZTsKICAgIH0KCiAgICB0aGlzLnVyaVRvU291cmNlLmZvckVhY2goY29weVNvdXJjZSk7CgogICAgQ29tcG9uZW50IGNvbXBvbmVudCA9IGJhY2tlbmRUYXJnZXQuY29uZmlndXJlQ29tcG9uZW50KG5ldyBDb21wb25lbnQoCiAgICAgICAgbmFtZVJvb3Q6IG5hbWVSb290LCBsaWJyYXJpZXM6IGxpYnJhcmllcywgdXJpVG9Tb3VyY2U6IHVyaVRvU291cmNlKSk7CiAgICBpZiAobG9hZGVyLmZpcnN0ICE9IG51bGwpIHsKICAgICAgLy8gVE9ETyhzaWdtdW5kKTogZG8gb25seSBmb3IgZnVsbCBwcm9ncmFtCiAgICAgIEJ1aWxkZXIgZGVjbGFyYXRpb24gPSBsb2FkZXIuZmlyc3QuZXhwb3J0U2NvcGUubG9va3VwKCJtYWluIiwgLTEsIG51bGwpOwogICAgICBpZiAoZGVjbGFyYXRpb24gaXMgQW1iaWd1b3VzQnVpbGRlcikgewogICAgICAgIEFtYmlndW91c0J1aWxkZXIgcHJvYmxlbSA9IGRlY2xhcmF0aW9uOwogICAgICAgIGRlY2xhcmF0aW9uID0gcHJvYmxlbS5nZXRGaXJzdERlY2xhcmF0aW9uKCk7CiAgICAgIH0KICAgICAgaWYgKGRlY2xhcmF0aW9uIGlzIFByb2NlZHVyZUJ1aWxkZXIpIHsKICAgICAgICBjb21wb25lbnQubWFpbk1ldGhvZCA9IGRlY2xhcmF0aW9uLmFjdHVhbFByb2NlZHVyZTsKICAgICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBEaWxsTWVtYmVyQnVpbGRlcikgewogICAgICAgIGlmIChkZWNsYXJhdGlvbi5tZW1iZXIgaXMgUHJvY2VkdXJlKSB7CiAgICAgICAgICBjb21wb25lbnQubWFpbk1ldGhvZCA9IGRlY2xhcmF0aW9uLm1lbWJlcjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBpZiAobWV0YWRhdGFDb2xsZWN0b3IgIT0gbnVsbCkgewogICAgICBjb21wb25lbnQuYWRkTWV0YWRhdGFSZXBvc2l0b3J5KG1ldGFkYXRhQ29sbGVjdG9yLnJlcG9zaXRvcnkpOwogICAgfQoKICAgIHRpY2tlci5sb2dNcygiTGlua2VkIGNvbXBvbmVudCIpOwogICAgcmV0dXJuIGNvbXBvbmVudDsKICB9CgogIHZvaWQgaW5zdGFsbERlZmF1bHRTdXBlcnR5cGVzKCkgewogICAgQ2xhc3Mgb2JqZWN0Q2xhc3MgPSB0aGlzLm9iamVjdENsYXNzOwogICAgbG9hZGVyLmJ1aWxkZXJzLmZvckVhY2goKFVyaSB1cmksIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgICAgaWYgKGxpYnJhcnkubG9hZGVyID09IGxvYWRlcikgewogICAgICAgIEl0ZXJhdG9yPEJ1aWxkZXI+IGl0ZXJhdG9yID0gbGlicmFyeS5pdGVyYXRvcjsKICAgICAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICAgICAgQnVpbGRlciBkZWNsYXJhdGlvbiA9IGl0ZXJhdG9yLmN1cnJlbnQ7CiAgICAgICAgICBpZiAoZGVjbGFyYXRpb24gaXMgU291cmNlQ2xhc3NCdWlsZGVyKSB7CiAgICAgICAgICAgIENsYXNzIGNscyA9IGRlY2xhcmF0aW9uLmNsczsKICAgICAgICAgICAgaWYgKGNscyAhPSBvYmplY3RDbGFzcykgewogICAgICAgICAgICAgIGNscy5zdXBlcnR5cGUgPz89IG9iamVjdENsYXNzLmFzUmF3U3VwZXJ0eXBlOwogICAgICAgICAgICAgIGRlY2xhcmF0aW9uLnN1cGVydHlwZSA/Pz0gbmV3IE5hbWVkVHlwZUJ1aWxkZXIoIk9iamVjdCIsIG51bGwpCiAgICAgICAgICAgICAgICAuLmJpbmQob2JqZWN0Q2xhc3NCdWlsZGVyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZGVjbGFyYXRpb24uaXNNaXhpbkFwcGxpY2F0aW9uKSB7CiAgICAgICAgICAgICAgY2xzLm1peGVkSW5UeXBlID0gZGVjbGFyYXRpb24ubWl4ZWRJblR5cGUuYnVpbGRNaXhlZEluVHlwZSgKICAgICAgICAgICAgICAgICAgbGlicmFyeSwgZGVjbGFyYXRpb24uY2hhck9mZnNldCwgZGVjbGFyYXRpb24uZmlsZVVyaSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgdGlja2VyLmxvZ01zKCJJbnN0YWxsZWQgT2JqZWN0IGFzIGltcGxpY2l0IHN1cGVyY2xhc3MiKTsKICB9CgogIHZvaWQgaW5zdGFsbFN5bnRoZXRpY0NvbnN0cnVjdG9ycyhMaXN0PFNvdXJjZUNsYXNzQnVpbGRlcj4gYnVpbGRlcnMpIHsKICAgIENsYXNzIG9iamVjdENsYXNzID0gdGhpcy5vYmplY3RDbGFzczsKICAgIGZvciAoU291cmNlQ2xhc3NCdWlsZGVyIGJ1aWxkZXIgaW4gYnVpbGRlcnMpIHsKICAgICAgaWYgKGJ1aWxkZXIuY2xzICE9IG9iamVjdENsYXNzICYmICFidWlsZGVyLmlzUGF0Y2gpIHsKICAgICAgICBpZiAoYnVpbGRlci5pc1BhdGNoIHx8CiAgICAgICAgICAgIGJ1aWxkZXIuaXNNaXhpbkRlY2xhcmF0aW9uIHx8CiAgICAgICAgICAgIGJ1aWxkZXIuaXNFeHRlbnNpb24pIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAoYnVpbGRlci5pc01peGluQXBwbGljYXRpb24pIHsKICAgICAgICAgIGluc3RhbGxGb3J3YXJkaW5nQ29uc3RydWN0b3JzKGJ1aWxkZXIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbnN0YWxsRGVmYXVsdENvbnN0cnVjdG9yKGJ1aWxkZXIpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgdGlja2VyLmxvZ01zKCJJbnN0YWxsZWQgc3ludGhldGljIGNvbnN0cnVjdG9ycyIpOwogIH0KCiAgQ2xhc3NCdWlsZGVyIGdldCBvYmplY3RDbGFzc0J1aWxkZXIgPT4gb2JqZWN0VHlwZS5kZWNsYXJhdGlvbjsKCiAgQ2xhc3MgZ2V0IG9iamVjdENsYXNzID0+IG9iamVjdENsYXNzQnVpbGRlci5jbHM7CgogIC8vLyBJZiBbYnVpbGRlcl0gZG9lc24ndCBoYXZlIGEgY29uc3RydWN0b3JzLCBpbnN0YWxsIHRoZSBkZWZhdWx0cy4KICB2b2lkIGluc3RhbGxEZWZhdWx0Q29uc3RydWN0b3IoU291cmNlQ2xhc3NCdWlsZGVyIGJ1aWxkZXIpIHsKICAgIGFzc2VydCghYnVpbGRlci5pc01peGluQXBwbGljYXRpb24pOwogICAgYXNzZXJ0KCFidWlsZGVyLmlzRXh0ZW5zaW9uKTsKICAgIC8vIFRPRE8oYXNrZXNjKTogTWFrZSB0aGlzIGNoZWNrIGxpZ2h0LXdlaWdodCBpbiB0aGUgYWJzZW5jZSBvZiBwYXRjaGVzLgogICAgaWYgKGJ1aWxkZXIuY2xzLmNvbnN0cnVjdG9ycy5pc05vdEVtcHR5KSByZXR1cm47CiAgICBpZiAoYnVpbGRlci5jbHMucmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzLmlzTm90RW1wdHkpIHJldHVybjsKICAgIGZvciAoUHJvY2VkdXJlIHByb2MgaW4gYnVpbGRlci5jbHMucHJvY2VkdXJlcykgewogICAgICBpZiAocHJvYy5pc0ZhY3RvcnkpIHJldHVybjsKICAgIH0KCiAgICAvLy8gRnJvbSBbRGFydCBQcm9ncmFtbWluZyBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uLCA0dGggRWRpdGlvbl0oCiAgICAvLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL3B1YmxpY2F0aW9ucy9maWxlcy9FQ01BLVNUL0VDTUEtNDA4LnBkZik6CiAgICAvLy8gPklmZiBubyBjb25zdHJ1Y3RvciBpcyBzcGVjaWZpZWQgZm9yIGEgY2xhc3MgQywgaXQgaW1wbGljaXRseSBoYXMgYQogICAgLy8vID5kZWZhdWx0IGNvbnN0cnVjdG9yIEMoKSA6IHN1cGVyKCkge30sIHVubGVzcyBDIGlzIGNsYXNzIE9iamVjdC4KICAgIC8vIFRoZSBzdXBlcmluaXRpYWxpemVyIGlzIGluc3RhbGxlZCBiZWxvdyBpbiBbZmluaXNoQ29uc3RydWN0b3JzXS4KICAgIGJ1aWxkZXIuYWRkU3ludGhldGljQ29uc3RydWN0b3IobWFrZURlZmF1bHRDb25zdHJ1Y3RvcihidWlsZGVyLmNscykpOwogIH0KCiAgdm9pZCBpbnN0YWxsRm9yd2FyZGluZ0NvbnN0cnVjdG9ycyhTb3VyY2VDbGFzc0J1aWxkZXIgYnVpbGRlcikgewogICAgYXNzZXJ0KGJ1aWxkZXIuaXNNaXhpbkFwcGxpY2F0aW9uKTsKICAgIGlmIChidWlsZGVyLmxpYnJhcnkubG9hZGVyICE9IGxvYWRlcikgcmV0dXJuOwogICAgaWYgKGJ1aWxkZXIuY2xzLmNvbnN0cnVjdG9ycy5pc05vdEVtcHR5KSB7CiAgICAgIC8vIFRoZXNlIHdlcmUgaW5zdGFsbGVkIGJ5IGEgc3ViY2xhc3MgaW4gdGhlIHJlY3Vyc2l2ZSBjYWxsIGJlbG93LgogICAgICByZXR1cm47CiAgICB9CgogICAgLy8vIEZyb20gW0RhcnQgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbiwgNHRoIEVkaXRpb25dKAogICAgLy8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9wdWJsaWNhdGlvbnMvZmlsZXMvRUNNQS1TVC9FQ01BLTQwOC5wZGYpOgogICAgLy8vID5BIG1peGluIGFwcGxpY2F0aW9uIG9mIHRoZSBmb3JtIFMgd2l0aCBNOyBkZWZpbmVzIGEgY2xhc3MgQyB3aXRoCiAgICAvLy8gPnN1cGVyY2xhc3MgUy4KICAgIC8vLyA+Li4uCgogICAgLy8vID5MZXQgTE0gYmUgdGhlIGxpYnJhcnkgaW4gd2hpY2ggTSBpcyBkZWNsYXJlZC4gRm9yIGVhY2ggZ2VuZXJhdGl2ZQogICAgLy8vID5jb25zdHJ1Y3RvciBuYW1lZCBxaShUaTEgYWkxLCAuIC4gLiAsIFRpa2kgYWlraSksIGkgaW4gMS4ubiBvZiBTCiAgICAvLy8gPnRoYXQgaXMgYWNjZXNzaWJsZSB0byBMTSAsIEMgaGFzIGFuIGltcGxpY2l0bHkgZGVjbGFyZWQgY29uc3RydWN0b3IKICAgIC8vLyA+bmFtZWQgcSdpID0gW0MvU11xaSBvZiB0aGUgZm9ybSBxJ2koYWkxLC4uLixhaWtpKSA6CiAgICAvLy8gPnN1cGVyKGFpMSwuLi4sYWlraSk7LgogICAgVHlwZUJ1aWxkZXIgdHlwZSA9IGJ1aWxkZXIuc3VwZXJ0eXBlOwogICAgVHlwZURlY2xhcmF0aW9uQnVpbGRlciBzdXBlcnR5cGU7CiAgICBpZiAodHlwZSBpcyBOYW1lZFR5cGVCdWlsZGVyKSB7CiAgICAgIHN1cGVydHlwZSA9IHR5cGUuZGVjbGFyYXRpb247CiAgICB9IGVsc2UgewogICAgICB1bmhhbmRsZWQoIiR7dHlwZS5ydW50aW1lVHlwZX0iLCAiaW5zdGFsbEZvcndhcmRpbmdDb25zdHJ1Y3RvcnMiLAogICAgICAgICAgYnVpbGRlci5jaGFyT2Zmc2V0LCBidWlsZGVyLmZpbGVVcmkpOwogICAgfQogICAgaWYgKHN1cGVydHlwZS5pc01peGluQXBwbGljYXRpb24pIHsKICAgICAgaW5zdGFsbEZvcndhcmRpbmdDb25zdHJ1Y3RvcnMoc3VwZXJ0eXBlKTsKICAgIH0KICAgIGlmIChzdXBlcnR5cGUgaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgIGlmIChzdXBlcnR5cGUuY2xzLmNvbnN0cnVjdG9ycy5pc0VtcHR5KSB7CiAgICAgICAgYnVpbGRlci5hZGRTeW50aGV0aWNDb25zdHJ1Y3RvcihtYWtlRGVmYXVsdENvbnN0cnVjdG9yKGJ1aWxkZXIuY2xzKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBzdWJzdGl0dXRpb25NYXAgPQogICAgICAgICAgICBidWlsZGVyLmdldFN1YnN0aXR1dGlvbk1hcChzdXBlcnR5cGUuY2xzKTsKICAgICAgICBmb3IgKENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yIGluIHN1cGVydHlwZS5jbHMuY29uc3RydWN0b3JzKSB7CiAgICAgICAgICBidWlsZGVyLmFkZFN5bnRoZXRpY0NvbnN0cnVjdG9yKG1ha2VNaXhpbkFwcGxpY2F0aW9uQ29uc3RydWN0b3IoCiAgICAgICAgICAgICAgYnVpbGRlci5jbHMsIGJ1aWxkZXIuY2xzLm1peGluLCBjb25zdHJ1Y3Rvciwgc3Vic3RpdHV0aW9uTWFwKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYgKHN1cGVydHlwZSBpcyBJbnZhbGlkVHlwZUJ1aWxkZXIpIHsKICAgICAgYnVpbGRlci5hZGRTeW50aGV0aWNDb25zdHJ1Y3RvcihtYWtlRGVmYXVsdENvbnN0cnVjdG9yKGJ1aWxkZXIuY2xzKSk7CiAgICB9IGVsc2UgewogICAgICB1bmhhbmRsZWQoIiR7c3VwZXJ0eXBlLnJ1bnRpbWVUeXBlfSIsICJpbnN0YWxsRm9yd2FyZGluZ0NvbnN0cnVjdG9ycyIsCiAgICAgICAgICBidWlsZGVyLmNoYXJPZmZzZXQsIGJ1aWxkZXIuZmlsZVVyaSk7CiAgICB9CiAgfQoKICBDb25zdHJ1Y3RvciBtYWtlTWl4aW5BcHBsaWNhdGlvbkNvbnN0cnVjdG9yKENsYXNzIGNscywgQ2xhc3MgbWl4aW4sCiAgICAgIENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yLCBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IHN1YnN0aXR1dGlvbk1hcCkgewogICAgVmFyaWFibGVEZWNsYXJhdGlvbiBjb3B5Rm9ybWFsKFZhcmlhYmxlRGVjbGFyYXRpb24gZm9ybWFsKSB7CiAgICAgIC8vIFRPRE8oYWhlKTogSGFuZGxlIGluaXRpYWxpemVycy4KICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBjb3B5ID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24oZm9ybWFsLm5hbWUsCiAgICAgICAgICBpc0ZpbmFsOiBmb3JtYWwuaXNGaW5hbCwgaXNDb25zdDogZm9ybWFsLmlzQ29uc3QpOwogICAgICBpZiAoZm9ybWFsLnR5cGUgIT0gbnVsbCkgewogICAgICAgIGNvcHkudHlwZSA9IHN1YnN0aXR1dGUoZm9ybWFsLnR5cGUsIHN1YnN0aXR1dGlvbk1hcCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHk7CiAgICB9CgogICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBwb3NpdGlvbmFsUGFyYW1ldGVycyA9IDxWYXJpYWJsZURlY2xhcmF0aW9uPltdOwogICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBuYW1lZFBhcmFtZXRlcnMgPSA8VmFyaWFibGVEZWNsYXJhdGlvbj5bXTsKICAgIExpc3Q8RXhwcmVzc2lvbj4gcG9zaXRpb25hbCA9IDxFeHByZXNzaW9uPltdOwogICAgTGlzdDxOYW1lZEV4cHJlc3Npb24+IG5hbWVkID0gPE5hbWVkRXhwcmVzc2lvbj5bXTsKICAgIGZvciAoVmFyaWFibGVEZWNsYXJhdGlvbiBmb3JtYWwKICAgICAgICBpbiBjb25zdHJ1Y3Rvci5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycykgewogICAgICBwb3NpdGlvbmFsUGFyYW1ldGVycy5hZGQoY29weUZvcm1hbChmb3JtYWwpKTsKICAgICAgcG9zaXRpb25hbC5hZGQobmV3IFZhcmlhYmxlR2V0KHBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxhc3QpKTsKICAgIH0KICAgIGZvciAoVmFyaWFibGVEZWNsYXJhdGlvbiBmb3JtYWwgaW4gY29uc3RydWN0b3IuZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gY2xvbmUgPSBjb3B5Rm9ybWFsKGZvcm1hbCk7CiAgICAgIGNsb25lZEZvcm1hbHMuLmFkZChmb3JtYWwpLi5hZGQoY2xvbmUpLi5hZGQoc3Vic3RpdHV0aW9uTWFwKTsKICAgICAgbmFtZWRQYXJhbWV0ZXJzLmFkZChjbG9uZSk7CiAgICAgIG5hbWVkLmFkZChuZXcgTmFtZWRFeHByZXNzaW9uKAogICAgICAgICAgZm9ybWFsLm5hbWUsIG5ldyBWYXJpYWJsZUdldChuYW1lZFBhcmFtZXRlcnMubGFzdCkpKTsKICAgIH0KICAgIEZ1bmN0aW9uTm9kZSBmdW5jdGlvbiA9IG5ldyBGdW5jdGlvbk5vZGUobmV3IEVtcHR5U3RhdGVtZW50KCksCiAgICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnM6IHBvc2l0aW9uYWxQYXJhbWV0ZXJzLAogICAgICAgIG5hbWVkUGFyYW1ldGVyczogbmFtZWRQYXJhbWV0ZXJzLAogICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ6IGNvbnN0cnVjdG9yLmZ1bmN0aW9uLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICAgICAgcmV0dXJuVHlwZTogbWFrZUNvbnN0cnVjdG9yUmV0dXJuVHlwZShjbHMpKTsKICAgIFN1cGVySW5pdGlhbGl6ZXIgaW5pdGlhbGl6ZXIgPSBuZXcgU3VwZXJJbml0aWFsaXplcigKICAgICAgICBjb25zdHJ1Y3RvciwgbmV3IEFyZ3VtZW50cyhwb3NpdGlvbmFsLCBuYW1lZDogbmFtZWQpKTsKICAgIHJldHVybiBuZXcgQ29uc3RydWN0b3IoZnVuY3Rpb24sCiAgICAgICAgbmFtZTogY29uc3RydWN0b3IubmFtZSwKICAgICAgICBpbml0aWFsaXplcnM6IDxJbml0aWFsaXplcj5baW5pdGlhbGl6ZXJdLAogICAgICAgIGlzU3ludGhldGljOiB0cnVlLAogICAgICAgIGlzQ29uc3Q6IGNvbnN0cnVjdG9yLmlzQ29uc3QgJiYgbWl4aW4uZmllbGRzLmlzRW1wdHkpOwogIH0KCiAgdm9pZCBmaW5pc2hDbG9uZWRQYXJhbWV0ZXJzKCkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbG9uZWRGb3JtYWxzLmxlbmd0aDsgaSArPSAzKSB7CiAgICAgIC8vIE5vdGUgdGhhdCBbb3JpZ2luYWxdIG1heSBpdHNlbGYgYmUgY2xvbmUuIElmIHNvLCBpdCB3YXMgYWRkZWQgdG8KICAgICAgLy8gW2Nsb25lZEZvcm1hbHNdIGJlZm9yZSBbY2xvbmVdLCBzbyBpdCdzIGluaXRpYWxpemVycyBhcmUgYWxyZWFkeSBpbgogICAgICAvLyBwbGFjZS4KICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBvcmlnaW5hbCA9IGNsb25lZEZvcm1hbHNbaV07CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gY2xvbmUgPSBjbG9uZWRGb3JtYWxzW2kgKyAxXTsKICAgICAgaWYgKG9yaWdpbmFsLmluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgICAvLyBUT0RPKGFoZSk6IEl0IGlzIHVuY2xlYXIgaWYgaXQgaXMgbGVnYWwgdG8gdXNlIHR5cGUgdmFyaWFibGVzIGluCiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZXMsIGJ1dCBGYXN0YSBpcyBjdXJyZW50bHkgYWxsb3dpbmcgaXQsIGFuZCB0aGUgVk0KICAgICAgICAvLyBhY2NlcHRzIGl0LiBJZiBpdCBpc24ndCBsZWdhbCwgdGhlIHdlIGNhbiBzcGVlZCB0aGlzIHVwIGJ5IHVzaW5nIGEKICAgICAgICAvLyBzaW5nbGUgY2xvbmVyIHdpdGhvdXQgc3Vic3RpdHV0aW9uLgogICAgICAgIENsb25lVmlzaXRvciBjbG9uZXIgPQogICAgICAgICAgICBuZXcgQ2xvbmVWaXNpdG9yKHR5cGVTdWJzdGl0dXRpb246IGNsb25lZEZvcm1hbHNbaSArIDJdKTsKICAgICAgICBjbG9uZS5pbml0aWFsaXplciA9IGNsb25lci5jbG9uZShvcmlnaW5hbC5pbml0aWFsaXplcikuLnBhcmVudCA9IGNsb25lOwogICAgICB9CiAgICB9CiAgICBjbG9uZWRGb3JtYWxzLmNsZWFyKCk7CiAgICB0aWNrZXIubG9nTXMoIkNsb25lZCBkZWZhdWx0IHZhbHVlcyBvZiBmb3JtYWxzIik7CiAgfQoKICBDb25zdHJ1Y3RvciBtYWtlRGVmYXVsdENvbnN0cnVjdG9yKENsYXNzIGVuY2xvc2luZ0NsYXNzKSB7CiAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKAogICAgICAgIG5ldyBGdW5jdGlvbk5vZGUobmV3IEVtcHR5U3RhdGVtZW50KCksCiAgICAgICAgICAgIHJldHVyblR5cGU6IG1ha2VDb25zdHJ1Y3RvclJldHVyblR5cGUoZW5jbG9zaW5nQ2xhc3MpKSwKICAgICAgICBuYW1lOiBuZXcgTmFtZSgiIiksCiAgICAgICAgaXNTeW50aGV0aWM6IHRydWUpOwogIH0KCiAgRGFydFR5cGUgbWFrZUNvbnN0cnVjdG9yUmV0dXJuVHlwZShDbGFzcyBlbmNsb3NpbmdDbGFzcykgewogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZVBhcmFtZXRlclR5cGVzID0gbmV3IExpc3Q8RGFydFR5cGU+KCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGVuY2xvc2luZ0NsYXNzLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgIFR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlciA9IGVuY2xvc2luZ0NsYXNzLnR5cGVQYXJhbWV0ZXJzW2ldOwogICAgICB0eXBlUGFyYW1ldGVyVHlwZXMuYWRkKG5ldyBUeXBlUGFyYW1ldGVyVHlwZSh0eXBlUGFyYW1ldGVyKSk7CiAgICB9CiAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUoZW5jbG9zaW5nQ2xhc3MsIHR5cGVQYXJhbWV0ZXJUeXBlcyk7CiAgfQoKICB2b2lkIGNvbXB1dGVDb3JlVHlwZXMoKSB7CiAgICBMaXN0PExpYnJhcnk+IGxpYnJhcmllcyA9IDxMaWJyYXJ5PltdOwogICAgZm9yIChTdHJpbmcgcGxhdGZvcm1MaWJyYXJ5IGluIFsKICAgICAgImRhcnQ6X2ludGVybmFsIiwKICAgICAgImRhcnQ6YXN5bmMiLAogICAgICAiZGFydDpjb3JlIiwKICAgICAgImRhcnQ6bWlycm9ycyIsCiAgICAgIC4uLmJhY2tlbmRUYXJnZXQuZXh0cmFJbmRleGVkTGlicmFyaWVzCiAgICBdKSB7CiAgICAgIFVyaSB1cmkgPSBVcmkucGFyc2UocGxhdGZvcm1MaWJyYXJ5KTsKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeUJ1aWxkZXIgPSBsb2FkZXIuYnVpbGRlcnNbdXJpXTsKICAgICAgaWYgKGxpYnJhcnlCdWlsZGVyID09IG51bGwpIHsKICAgICAgICAvLyBUT0RPKGFoZSk6IFRoaXMgaXMgd29ya2luZyBhcm91bmQgYSBidWcgaW4ga2VybmVsX2RyaXZlcl90ZXN0IG9yCiAgICAgICAgLy8ga2VybmVsX2RyaXZlci4KICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAgICAgZm9yIChMaWJyYXJ5IHRhcmdldCBpbiBkaWxsVGFyZ2V0LmxvYWRlci5saWJyYXJpZXMpIHsKICAgICAgICAgIGlmICh0YXJnZXQuaW1wb3J0VXJpID09IHVyaSkgewogICAgICAgICAgICBsaWJyYXJpZXMuYWRkKHRhcmdldCk7CiAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghZm91bmQgJiYgdXJpLnBhdGggIT0gIm1pcnJvcnMiKSB7CiAgICAgICAgICAvLyBkYXJ0Om1pcnJvcnMgaXMgb3B0aW9uYWwuCiAgICAgICAgICB0aHJvdyAiQ2FuJ3QgZmluZCAkdXJpIjsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbGlicmFyaWVzLmFkZChsaWJyYXJ5QnVpbGRlci5saWJyYXJ5KTsKICAgICAgfQogICAgfQogICAgQ29tcG9uZW50IHBsYXRmb3JtTGlicmFyaWVzID0KICAgICAgICBiYWNrZW5kVGFyZ2V0LmNvbmZpZ3VyZUNvbXBvbmVudChuZXcgQ29tcG9uZW50KCkpOwogICAgLy8gQWRkIGxpYnJhcmllcyBkaXJlY3RseSB0byBwcmV2ZW50IHRoYXQgdGhlaXIgcGFyZW50cyBhcmUgY2hhbmdlZC4KICAgIHBsYXRmb3JtTGlicmFyaWVzLmxpYnJhcmllcy5hZGRBbGwobGlicmFyaWVzKTsKICAgIGxvYWRlci5jb21wdXRlQ29yZVR5cGVzKHBsYXRmb3JtTGlicmFyaWVzKTsKICB9CgogIHZvaWQgZmluaXNoQWxsQ29uc3RydWN0b3JzKExpc3Q8U291cmNlQ2xhc3NCdWlsZGVyPiBidWlsZGVycykgewogICAgQ2xhc3Mgb2JqZWN0Q2xhc3MgPSB0aGlzLm9iamVjdENsYXNzOwogICAgZm9yIChTb3VyY2VDbGFzc0J1aWxkZXIgYnVpbGRlciBpbiBidWlsZGVycykgewogICAgICBDbGFzcyBjbHMgPSBidWlsZGVyLmNsczsKICAgICAgaWYgKGNscyAhPSBvYmplY3RDbGFzcykgewogICAgICAgIGZpbmlzaENvbnN0cnVjdG9ycyhidWlsZGVyKTsKICAgICAgfQogICAgfQogICAgdGlja2VyLmxvZ01zKCJGaW5pc2hlZCBjb25zdHJ1Y3RvcnMiKTsKICB9CgogIC8vLyBFbnN1cmUgY29uc3RydWN0b3JzIG9mIFtidWlsZGVyXSBoYXZlIHRoZSBjb3JyZWN0IGluaXRpYWxpemVycyBhbmQgb3RoZXIKICAvLy8gcmVxdWlyZW1lbnRzLgogIHZvaWQgZmluaXNoQ29uc3RydWN0b3JzKFNvdXJjZUNsYXNzQnVpbGRlciBidWlsZGVyKSB7CiAgICBpZiAoYnVpbGRlci5pc1BhdGNoKSByZXR1cm47CiAgICBDbGFzcyBjbHMgPSBidWlsZGVyLmNsczsKCiAgICAvLy8gUXVvdGVzIGJlbG93IGFyZSBmcm9tIFtEYXJ0IFByb2dyYW1taW5nIExhbmd1YWdlIFNwZWNpZmljYXRpb24sIDR0aAogICAgLy8vIEVkaXRpb25dKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9wdWJsaWNhdGlvbnMvZmlsZXMvRUNNQS1TVC9FQ01BLTQwOC5wZGYpOgogICAgTGlzdDxGaWVsZD4gdW5pbml0aWFsaXplZEZpZWxkcyA9IDxGaWVsZD5bXTsKICAgIExpc3Q8RmllbGQ+IG5vbkZpbmFsRmllbGRzID0gPEZpZWxkPltdOwogICAgZm9yIChGaWVsZCBmaWVsZCBpbiBjbHMuZmllbGRzKSB7CiAgICAgIGlmIChmaWVsZC5pc0luc3RhbmNlTWVtYmVyICYmICFmaWVsZC5pc0ZpbmFsKSB7CiAgICAgICAgbm9uRmluYWxGaWVsZHMuYWRkKGZpZWxkKTsKICAgICAgfQogICAgICBpZiAoZmllbGQuaW5pdGlhbGl6ZXIgPT0gbnVsbCkgewogICAgICAgIHVuaW5pdGlhbGl6ZWRGaWVsZHMuYWRkKGZpZWxkKTsKICAgICAgfQogICAgfQogICAgTWFwPENvbnN0cnVjdG9yLCBTZXQ8RmllbGQ+PiBjb25zdHJ1Y3RvckluaXRpYWxpemVkRmllbGRzID0KICAgICAgICA8Q29uc3RydWN0b3IsIFNldDxGaWVsZD4+e307CiAgICBDb25zdHJ1Y3RvciBzdXBlclRhcmdldDsKICAgIGZvciAoQ29uc3RydWN0b3IgY29uc3RydWN0b3IgaW4gY2xzLmNvbnN0cnVjdG9ycykgewogICAgICBib29sIGlzUmVkaXJlY3RpbmcgPSBmYWxzZTsKICAgICAgZm9yIChJbml0aWFsaXplciBpbml0aWFsaXplciBpbiBjb25zdHJ1Y3Rvci5pbml0aWFsaXplcnMpIHsKICAgICAgICBpZiAoaW5pdGlhbGl6ZXIgaXMgUmVkaXJlY3RpbmdJbml0aWFsaXplcikgewogICAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmlzQ29uc3QgJiYgIWluaXRpYWxpemVyLnRhcmdldC5pc0NvbnN0KSB7CiAgICAgICAgICAgIGJ1aWxkZXIuYWRkUHJvYmxlbShtZXNzYWdlQ29uc3RDb25zdHJ1Y3RvclJlZGlyZWN0aW9uVG9Ob25Db25zdCwKICAgICAgICAgICAgICAgIGluaXRpYWxpemVyLmZpbGVPZmZzZXQsIGluaXRpYWxpemVyLnRhcmdldC5uYW1lLm5hbWUubGVuZ3RoKTsKICAgICAgICAgIH0KICAgICAgICAgIGlzUmVkaXJlY3RpbmcgPSB0cnVlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghaXNSZWRpcmVjdGluZykgewogICAgICAgIC8vLyA+SWYgbm8gc3VwZXJpbml0aWFsaXplciBpcyBwcm92aWRlZCwgYW4gaW1wbGljaXQgc3VwZXJpbml0aWFsaXplcgogICAgICAgIC8vLyA+b2YgdGhlIGZvcm0gc3VwZXIoKSBpcyBhZGRlZCBhdCB0aGUgZW5kIG9mIGvigJlzIGluaXRpYWxpemVyIGxpc3QsCiAgICAgICAgLy8vID51bmxlc3MgdGhlIGVuY2xvc2luZyBjbGFzcyBpcyBjbGFzcyBPYmplY3QuCiAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmluaXRpYWxpemVycy5pc0VtcHR5KSB7CiAgICAgICAgICBzdXBlclRhcmdldCA/Pz0gZGVmYXVsdFN1cGVyQ29uc3RydWN0b3IoY2xzKTsKICAgICAgICAgIEluaXRpYWxpemVyIGluaXRpYWxpemVyOwogICAgICAgICAgaWYgKHN1cGVyVGFyZ2V0ID09IG51bGwpIHsKICAgICAgICAgICAgaW50IG9mZnNldCA9IGNvbnN0cnVjdG9yLmZpbGVPZmZzZXQ7CiAgICAgICAgICAgIGlmIChvZmZzZXQgPT0gLTEgJiYgY29uc3RydWN0b3IuaXNTeW50aGV0aWMpIHsKICAgICAgICAgICAgICBvZmZzZXQgPSBjbHMuZmlsZU9mZnNldDsKICAgICAgICAgICAgfQogICAgICAgICAgICBidWlsZGVyLmFkZFByb2JsZW0oCiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb0RlZmF1bHRDb25zdHJ1Y3RvcgogICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGNscy5zdXBlcmNsYXNzLm5hbWUpLAogICAgICAgICAgICAgICAgb2Zmc2V0LAogICAgICAgICAgICAgICAgbm9MZW5ndGgpOwogICAgICAgICAgICBpbml0aWFsaXplciA9IG5ldyBJbnZhbGlkSW5pdGlhbGl6ZXIoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGluaXRpYWxpemVyID0KICAgICAgICAgICAgICAgIG5ldyBTdXBlckluaXRpYWxpemVyKHN1cGVyVGFyZ2V0LCBuZXcgQXJndW1lbnRzLmVtcHR5KCkpCiAgICAgICAgICAgICAgICAgIC4uaXNTeW50aGV0aWMgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgY29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzLmFkZChpbml0aWFsaXplcik7CiAgICAgICAgICBpbml0aWFsaXplci5wYXJlbnQgPSBjb25zdHJ1Y3RvcjsKICAgICAgICB9CiAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmZ1bmN0aW9uLmJvZHkgPT0gbnVsbCkgewogICAgICAgICAgLy8vID5JZiBhIGdlbmVyYXRpdmUgY29uc3RydWN0b3IgYyBpcyBub3QgYSByZWRpcmVjdGluZyBjb25zdHJ1Y3RvcgogICAgICAgICAgLy8vID5hbmQgbm8gYm9keSBpcyBwcm92aWRlZCwgdGhlbiBjIGltcGxpY2l0bHkgaGFzIGFuIGVtcHR5IGJvZHkge30uCiAgICAgICAgICAvLy8gV2UgdXNlIGFuIGVtcHR5IHN0YXRlbWVudCBpbnN0ZWFkLgogICAgICAgICAgY29uc3RydWN0b3IuZnVuY3Rpb24uYm9keSA9IG5ldyBFbXB0eVN0YXRlbWVudCgpOwogICAgICAgICAgY29uc3RydWN0b3IuZnVuY3Rpb24uYm9keS5wYXJlbnQgPSBjb25zdHJ1Y3Rvci5mdW5jdGlvbjsKICAgICAgICB9CgogICAgICAgIFNldDxGaWVsZD4gbXlJbml0aWFsaXplZEZpZWxkcyA9IG5ldyBTZXQ8RmllbGQ+KCk7CiAgICAgICAgZm9yIChJbml0aWFsaXplciBpbml0aWFsaXplciBpbiBjb25zdHJ1Y3Rvci5pbml0aWFsaXplcnMpIHsKICAgICAgICAgIGlmIChpbml0aWFsaXplciBpcyBGaWVsZEluaXRpYWxpemVyKSB7CiAgICAgICAgICAgIG15SW5pdGlhbGl6ZWRGaWVsZHMuYWRkKGluaXRpYWxpemVyLmZpZWxkKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yIChWYXJpYWJsZURlY2xhcmF0aW9uIGZvcm1hbAogICAgICAgICAgICBpbiBjb25zdHJ1Y3Rvci5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycykgewogICAgICAgICAgaWYgKGZvcm1hbC5pc0ZpZWxkRm9ybWFsKSB7CiAgICAgICAgICAgIEJ1aWxkZXIgZmllbGRCdWlsZGVyID0gYnVpbGRlci5zY29wZS5sb2NhbFtmb3JtYWwubmFtZV0gPz8KICAgICAgICAgICAgICAgIGJ1aWxkZXIub3JpZ2luLnNjb3BlLmxvY2FsW2Zvcm1hbC5uYW1lXTsKICAgICAgICAgICAgaWYgKGZpZWxkQnVpbGRlciBpcyBGaWVsZEJ1aWxkZXIpIHsKICAgICAgICAgICAgICBteUluaXRpYWxpemVkRmllbGRzLmFkZChmaWVsZEJ1aWxkZXIuZmllbGQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0cnVjdG9ySW5pdGlhbGl6ZWRGaWVsZHNbY29uc3RydWN0b3JdID0gbXlJbml0aWFsaXplZEZpZWxkczsKICAgICAgICBpZiAoY29uc3RydWN0b3IuaXNDb25zdCAmJiBub25GaW5hbEZpZWxkcy5pc05vdEVtcHR5KSB7CiAgICAgICAgICBidWlsZGVyLmFkZFByb2JsZW0obWVzc2FnZUNvbnN0Q29uc3RydWN0b3JOb25GaW5hbEZpZWxkLAogICAgICAgICAgICAgIGNvbnN0cnVjdG9yLmZpbGVPZmZzZXQsIG5vTGVuZ3RoLAogICAgICAgICAgICAgIGNvbnRleHQ6IG5vbkZpbmFsRmllbGRzCiAgICAgICAgICAgICAgICAgIC5tYXAoKGZpZWxkKSA9PiBtZXNzYWdlQ29uc3RDb25zdHJ1Y3Rvck5vbkZpbmFsRmllbGRDYXVzZQogICAgICAgICAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbihmaWVsZC5maWxlVXJpLCBmaWVsZC5maWxlT2Zmc2V0LCBub0xlbmd0aCkpCiAgICAgICAgICAgICAgICAgIC50b0xpc3QoKSk7CiAgICAgICAgICBub25GaW5hbEZpZWxkcy5jbGVhcigpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgU2V0PEZpZWxkPiBpbml0aWFsaXplZEZpZWxkczsKICAgIGNvbnN0cnVjdG9ySW5pdGlhbGl6ZWRGaWVsZHMKICAgICAgICAuZm9yRWFjaCgoQ29uc3RydWN0b3IgY29uc3RydWN0b3IsIFNldDxGaWVsZD4gZmllbGRzKSB7CiAgICAgIGlmIChpbml0aWFsaXplZEZpZWxkcyA9PSBudWxsKSB7CiAgICAgICAgaW5pdGlhbGl6ZWRGaWVsZHMgPSBuZXcgU2V0PEZpZWxkPi5mcm9tKGZpZWxkcyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW5pdGlhbGl6ZWRGaWVsZHMuYWRkQWxsKGZpZWxkcyk7CiAgICAgIH0KICAgIH0pOwoKICAgIC8vIFJ1biB0aHJvdWdoIGFsbCBmaWVsZHMgdGhhdCBhcmVuJ3QgaW5pdGlhbGl6ZWQgYnkgYW55IGNvbnN0cnVjdG9yLCBhbmQKICAgIC8vIHNldCB0aGVpciBpbml0aWFsaXplciB0byBgbnVsbGAuCiAgICBmb3IgKEZpZWxkIGZpZWxkIGluIHVuaW5pdGlhbGl6ZWRGaWVsZHMpIHsKICAgICAgaWYgKGluaXRpYWxpemVkRmllbGRzID09IG51bGwgfHwgIWluaXRpYWxpemVkRmllbGRzLmNvbnRhaW5zKGZpZWxkKSkgewogICAgICAgIGZpZWxkLmluaXRpYWxpemVyID0gbmV3IE51bGxMaXRlcmFsKCkuLnBhcmVudCA9IGZpZWxkOwogICAgICAgIGlmIChmaWVsZC5pc0ZpbmFsICYmCiAgICAgICAgICAgIChjbHMuY29uc3RydWN0b3JzLmlzTm90RW1wdHkgfHwgY2xzLmlzTWl4aW5EZWNsYXJhdGlvbikpIHsKICAgICAgICAgIFN0cmluZyB1cmkgPSAnJHtmaWVsZC5lbmNsb3NpbmdMaWJyYXJ5LmltcG9ydFVyaX0nOwogICAgICAgICAgU3RyaW5nIGZpbGUgPSBmaWVsZC5maWxlVXJpLnBhdGhTZWdtZW50cy5sYXN0OwogICAgICAgICAgaWYgKHVyaSA9PSAnZGFydDpodG1sJyB8fAogICAgICAgICAgICAgIHVyaSA9PSAnZGFydDpzdmcnIHx8CiAgICAgICAgICAgICAgdXJpID09ICdkYXJ0Ol9uYXRpdmVfdHlwZWRfZGF0YScgfHwKICAgICAgICAgICAgICB1cmkgPT0gJ2RhcnQ6X2ludGVyY2VwdG9ycycgJiYgZmlsZSA9PSAnanNfc3RyaW5nLmRhcnQnKSB7CiAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSBleHRlcm5hbCBnZXR0ZXJzIGluc3RlYWQgb2YgZmluYWwKICAgICAgICAgICAgLy8gZmllbGRzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9zZGsvaXNzdWVzLzMzNzYyCiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBidWlsZGVyLmxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgICAgICAgIHRlbXBsYXRlRmluYWxGaWVsZE5vdEluaXRpYWxpemVkLndpdGhBcmd1bWVudHMoZmllbGQubmFtZS5uYW1lKSwKICAgICAgICAgICAgICAgIGZpZWxkLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgICBmaWVsZC5uYW1lLm5hbWUubGVuZ3RoLAogICAgICAgICAgICAgICAgZmllbGQuZmlsZVVyaSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgLy8gUnVuIHRocm91Z2ggYWxsIGZpZWxkcyB0aGF0IGFyZSBpbml0aWFsaXplZCBieSBzb21lIGNvbnN0cnVjdG9yLCBhbmQKICAgIC8vIG1ha2Ugc3VyZSB0aGF0IGFsbCBvdGhlciBjb25zdHJ1Y3RvcnMgYWxzbyBpbml0aWFsaXplIHRoZW0uCiAgICBjb25zdHJ1Y3RvckluaXRpYWxpemVkRmllbGRzCiAgICAgICAgLmZvckVhY2goKENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yLCBTZXQ8RmllbGQ+IGZpZWxkcykgewogICAgICBmb3IgKEZpZWxkIGZpZWxkIGluIGluaXRpYWxpemVkRmllbGRzLmRpZmZlcmVuY2UoZmllbGRzKSkgewogICAgICAgIGlmIChmaWVsZC5pbml0aWFsaXplciA9PSBudWxsKSB7CiAgICAgICAgICBGaWVsZEluaXRpYWxpemVyIGluaXRpYWxpemVyID0KICAgICAgICAgICAgICBuZXcgRmllbGRJbml0aWFsaXplcihmaWVsZCwgbmV3IE51bGxMaXRlcmFsKCkpCiAgICAgICAgICAgICAgICAuLmlzU3ludGhldGljID0gdHJ1ZTsKICAgICAgICAgIGluaXRpYWxpemVyLnBhcmVudCA9IGNvbnN0cnVjdG9yOwogICAgICAgICAgY29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzLmluc2VydCgwLCBpbml0aWFsaXplcik7CiAgICAgICAgICBpZiAoZmllbGQuaXNGaW5hbCkgewogICAgICAgICAgICBidWlsZGVyLmxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgICAgICAgIHRlbXBsYXRlRmluYWxGaWVsZE5vdEluaXRpYWxpemVkQnlDb25zdHJ1Y3RvcgogICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGZpZWxkLm5hbWUubmFtZSksCiAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rvci5maWxlT2Zmc2V0LAogICAgICAgICAgICAgICAgY29uc3RydWN0b3IubmFtZS5uYW1lLmxlbmd0aCwKICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yLmZpbGVVcmksCiAgICAgICAgICAgICAgICBjb250ZXh0OiBbCiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlTWlzc2luZ0ltcGxlbWVudGF0aW9uQ2F1c2UKICAgICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGZpZWxkLm5hbWUubmFtZSkKICAgICAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24oZmllbGQuZmlsZVVyaSwgZmllbGQuZmlsZU9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5uYW1lLm5hbWUubGVuZ3RoKQogICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICB9CgogIC8vLyBSdW4gYWxsIHRyYW5zZm9ybWF0aW9ucyB0aGF0IGFyZSBuZWVkZWQgd2hlbiBidWlsZGluZyBhIGJ1bmRsZSBvZgogIC8vLyBsaWJyYXJpZXMgZm9yIHRoZSBmaXJzdCB0aW1lLgogIHZvaWQgcnVuQnVpbGRUcmFuc2Zvcm1hdGlvbnMoKSB7CiAgICBiYWNrZW5kVGFyZ2V0LnBlcmZvcm1QcmVDb25zdGFudEV2YWx1YXRpb25UcmFuc2Zvcm1hdGlvbnMoCiAgICAgICAgY29tcG9uZW50LAogICAgICAgIGxvYWRlci5jb3JlVHlwZXMsCiAgICAgICAgbG9hZGVyLmxpYnJhcmllcywKICAgICAgICBuZXcgS2VybmVsRGlhZ25vc3RpY1JlcG9ydGVyKGxvYWRlciksCiAgICAgICAgbG9nZ2VyOiAoU3RyaW5nIG1zZykgPT4gdGlja2VyLmxvZ01zKG1zZykpOwoKICAgIFR5cGVFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9CiAgICAgICAgbmV3IFR5cGVFbnZpcm9ubWVudChsb2FkZXIuY29yZVR5cGVzLCBsb2FkZXIuaGllcmFyY2h5KTsKICAgIGNvbnN0YW50cy50cmFuc2Zvcm1MaWJyYXJpZXMoCiAgICAgICAgbG9hZGVyLmxpYnJhcmllcywKICAgICAgICBiYWNrZW5kVGFyZ2V0LmNvbnN0YW50c0JhY2tlbmQobG9hZGVyLmNvcmVUeXBlcyksCiAgICAgICAgZW52aXJvbm1lbnREZWZpbmVzLAogICAgICAgIGVudmlyb25tZW50LAogICAgICAgIG5ldyBLZXJuZWxDb25zdGFudEVycm9yUmVwb3J0ZXIobG9hZGVyKSwKICAgICAgICBkZXN1Z2FyU2V0czogIWJhY2tlbmRUYXJnZXQuc3VwcG9ydHNTZXRMaXRlcmFscywKICAgICAgICBlcnJvck9uVW5ldmFsdWF0ZWRDb25zdGFudDogZXJyb3JPblVuZXZhbHVhdGVkQ29uc3RhbnQpOwogICAgdGlja2VyLmxvZ01zKCJFdmFsdWF0ZWQgY29uc3RhbnRzIik7CgogICAgYmFja2VuZFRhcmdldC5wZXJmb3JtTW9kdWxhclRyYW5zZm9ybWF0aW9uc09uTGlicmFyaWVzKAogICAgICAgIGNvbXBvbmVudCwKICAgICAgICBsb2FkZXIuY29yZVR5cGVzLAogICAgICAgIGxvYWRlci5oaWVyYXJjaHksCiAgICAgICAgbG9hZGVyLmxpYnJhcmllcywKICAgICAgICBlbnZpcm9ubWVudERlZmluZXMsCiAgICAgICAgbmV3IEtlcm5lbERpYWdub3N0aWNSZXBvcnRlcihsb2FkZXIpLAogICAgICAgIGxvZ2dlcjogKFN0cmluZyBtc2cpID0+IHRpY2tlci5sb2dNcyhtc2cpKTsKICB9CgogIHZvaWQgcnVuUHJvY2VkdXJlVHJhbnNmb3JtYXRpb25zKFByb2NlZHVyZSBwcm9jZWR1cmUpIHsKICAgIGJhY2tlbmRUYXJnZXQucGVyZm9ybVRyYW5zZm9ybWF0aW9uc09uUHJvY2VkdXJlKAogICAgICAgIGxvYWRlci5jb3JlVHlwZXMsIGxvYWRlci5oaWVyYXJjaHksIHByb2NlZHVyZSwKICAgICAgICBsb2dnZXI6IChTdHJpbmcgbXNnKSA9PiB0aWNrZXIubG9nTXMobXNnKSk7CiAgfQoKICB2b2lkIHZlcmlmeSgpIHsKICAgIC8vIFRPRE8oYWhlKTogSG93IHRvIGhhbmRsZSBlcnJvcnMuCiAgICB2ZXJpZnlDb21wb25lbnQoY29tcG9uZW50KTsKICAgIHRpY2tlci5sb2dNcygiVmVyaWZpZWQgY29tcG9uZW50Iik7CiAgfQoKICAvLy8gUmV0dXJuIGB0cnVlYCBpZiB0aGUgZ2l2ZW4gW2xpYnJhcnldIHdhcyBidWlsdCBieSB0aGlzIFtLZXJuZWxUYXJnZXRdCiAgLy8vIGZyb20gc291cmNlcywgYW5kIG5vdCBsb2FkZWQgZnJvbSBhIFtEaWxsVGFyZ2V0XS4KICBib29sIGlzU291cmNlTGlicmFyeShMaWJyYXJ5IGxpYnJhcnkpIHsKICAgIHJldHVybiBsb2FkZXIubGlicmFyaWVzLmNvbnRhaW5zKGxpYnJhcnkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWFkUGF0Y2hGaWxlcyhTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICBhc3NlcnQobGlicmFyeS51cmkuc2NoZW1lID09ICJkYXJ0Iik7CiAgICBMaXN0PFVyaT4gcGF0Y2hlcyA9IHVyaVRyYW5zbGF0b3IuZ2V0RGFydFBhdGNoZXMobGlicmFyeS51cmkucGF0aCk7CiAgICBpZiAocGF0Y2hlcyAhPSBudWxsKSB7CiAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGZpcnN0OwogICAgICBmb3IgKFVyaSBwYXRjaCBpbiBwYXRjaGVzKSB7CiAgICAgICAgaWYgKGZpcnN0ID09IG51bGwpIHsKICAgICAgICAgIGZpcnN0ID0gbGlicmFyeS5sb2FkZXIucmVhZChwYXRjaCwgLTEsCiAgICAgICAgICAgICAgZmlsZVVyaTogcGF0Y2gsIG9yaWdpbjogbGlicmFyeSwgYWNjZXNzb3I6IGxpYnJhcnkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBJZiB0aGVyZSdzIG1vcmUgdGhhbiBvbmUgcGF0Y2ggZmlsZSwgaXQncyBpbnRlcnByZXRlZCBhcyBhIHBhcnQgb2YKICAgICAgICAgIC8vIHRoZSBwYXRjaCBsaWJyYXJ5LgogICAgICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgcGFydCA9IGxpYnJhcnkubG9hZGVyLnJlYWQocGF0Y2gsIC0xLAogICAgICAgICAgICAgIG9yaWdpbjogbGlicmFyeSwgZmlsZVVyaTogcGF0Y2gsIGFjY2Vzc29yOiBsaWJyYXJ5KTsKICAgICAgICAgIGZpcnN0LnBhcnRzLmFkZChwYXJ0KTsKICAgICAgICAgIGZpcnN0LnBhcnRPZmZzZXRzLmFkZCgtMSk7CiAgICAgICAgICBwYXJ0LnBhcnRPZlVyaSA9IGZpcnN0LnVyaTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9Cn0KCi8vLyBMb29rcyBmb3IgYSBjb25zdHJ1Y3RvciBjYWxsIHRoYXQgbWF0Y2hlcyBgc3VwZXIoKWAgZnJvbSBhIGNvbnN0cnVjdG9yIGluCi8vLyBbY2xzXS4gU3VjaCBhIGNvbnN0cnVjdG9yIG1heSBoYXZlIG9wdGlvbmFsIGFyZ3VtZW50cywgYnV0IG5vIHJlcXVpcmVkCi8vLyBhcmd1bWVudHMuCkNvbnN0cnVjdG9yIGRlZmF1bHRTdXBlckNvbnN0cnVjdG9yKENsYXNzIGNscykgewogIENsYXNzIHN1cGVyY2xhc3MgPSBjbHMuc3VwZXJjbGFzczsKICBpZiAoc3VwZXJjbGFzcyAhPSBudWxsKSB7CiAgICBmb3IgKENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yIGluIHN1cGVyY2xhc3MuY29uc3RydWN0b3JzKSB7CiAgICAgIGlmIChjb25zdHJ1Y3Rvci5uYW1lLm5hbWUuaXNFbXB0eSkgewogICAgICAgIHJldHVybiBjb25zdHJ1Y3Rvci5mdW5jdGlvbi5yZXF1aXJlZFBhcmFtZXRlckNvdW50ID09IDAKICAgICAgICAgICAgPyBjb25zdHJ1Y3RvcgogICAgICAgICAgICA6IG51bGw7CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIG51bGw7Cn0KCmNsYXNzIEtlcm5lbERpYWdub3N0aWNSZXBvcnRlcgogICAgZXh0ZW5kcyBEaWFnbm9zdGljUmVwb3J0ZXI8TWVzc2FnZSwgTG9jYXRlZE1lc3NhZ2U+IHsKICBmaW5hbCBMb2FkZXIgbG9hZGVyOwoKICBLZXJuZWxEaWFnbm9zdGljUmVwb3J0ZXIodGhpcy5sb2FkZXIpOwoKICB2b2lkIHJlcG9ydChNZXNzYWdlIG1lc3NhZ2UsIGludCBjaGFyT2Zmc2V0LCBpbnQgbGVuZ3RoLCBVcmkgZmlsZVVyaSwKICAgICAge0xpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHR9KSB7CiAgICBsb2FkZXIuYWRkUHJvYmxlbShtZXNzYWdlLCBjaGFyT2Zmc2V0LCBub0xlbmd0aCwgZmlsZVVyaSwgY29udGV4dDogY29udGV4dCk7CiAgfQp9CoNtAE5OPAEdASEBIQkTFw8TFRIYFA8aFhUXHBEOGRUTIBAaFxsdFQE2ATsBRQFEAT8BOAEwATMBQgE7ASUBGgkaLjM2Eio3JCwzASoBLgFGAUoBOQFCATQBRwEdCRYRHBYaGhgVIAFBATkBLQEyPR8BNR4BHwE0LQEXARcBSQFMAUUBMwFPATE6ASpCATEBTSMtIS9MHQQBITsBHVAbQAQBRzQiKCopExgYFRUREUcrOjk3MzgOLS8oUEUjSBgXISYnFxAODAgeTQYTBAEMJzsfQB0YCAZDBAE4MD5AJjcmLUEgDAoICBMEASodIhocPSIfIAQBDEQrNCokLhhMHSURURFPHU8rNUMfLCIvJBJOGkEhMikcKC4zMyUoQCsYMwQBRk5LT0AGSBEMQSs0KiIgKy0/JCMoIQEhQBgzBAEkNSsvBjxDRQYEAUklRjMBOy4nSx4UBgEqAUpOIDFPLTA1CC08NS81CggGASVFBgEmFgQBJCpAJjcmMjMpJjxNLA4ySkkODAoICD0EAUkqMzwfKiMUCioyES4KCAY2BAFBATMBRj8pIk01RzUiBgFFUUxJSEoEAUMoMi9JDgYBRVFKFw0BS0pNPR8qJiQkDUgwBigwBiUwTg83N0ZLTgoIMkwNTTAGBAFGT0EpRj0hPggTBgFOSTI3JDg0QgZPNkQiJUAGQzQqTTU5PyUgMhs/BAEiOEpNEDc4KkxKTi8eRlAIBhs2BAE9HC9EHBwEAT0+RUZEBkIEARwrJRgUExYtCSw8JEwaHD4pIxoTDAovJyMKDy8IBiI7STMwBAFCKjMfICUIBisEAU8UOCEdAUxdMSwmNiMIJygIBkAlHTgiQjVETU4MIBEKCBxOTjkwOCMlMTsnDiA6ORgbNBMaSSgMNSwKMU5QMTxDCgE7RDE4DAooPCZHOTA7DgwKSUBDMCZMUB4iCggGIiFAJzkPKggIAU4oL00/HUc+OSQjMklKSRMoUSIoIAwKCAYBTEMhQEIpKT0mLDsfKD41KC4lGzU2RTIUDAoICAQBSCQjPxMaGi40ASJBIho6HBUxOUEpATwTGhoaHC40BAE6NTc0BAESKCAoBAFMOCovBAEMNipIGyIjHTFDEVAgRUMhJSYKCAYEAgFOSw8xJRw/K0AaFAgGBA8CAR86FwEpAUgoUQQCATVwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF90YXJnZXQuZGFydDZzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL3V0aWxzLmRhcnSSpC8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6YXN5bmMnIHNob3cgRnV0dXJlOwoKaW1wb3J0ICdkYXJ0OmlvJyBzaG93IEJ5dGVzQnVpbGRlciwgRmlsZSwgSU9TaW5rOwoKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnIHNob3cgVWludDhMaXN0OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbG9uZS5kYXJ0JyBzaG93IENsb25lVmlzaXRvcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgTGlicmFyeSwKICAgICAgICBDb21wb25lbnQsCiAgICAgICAgUHJvY2VkdXJlLAogICAgICAgIENsYXNzLAogICAgICAgIFR5cGVQYXJhbWV0ZXIsCiAgICAgICAgVHlwZVBhcmFtZXRlclR5cGUsCiAgICAgICAgU3VwZXJ0eXBlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9iaW5hcnkvYXN0X3RvX2JpbmFyeS5kYXJ0JyBzaG93IEJpbmFyeVByaW50ZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2JpbmFyeS9saW1pdGVkX2FzdF90b19iaW5hcnkuZGFydCcKICAgIHNob3cgTGltaXRlZEJpbmFyeVByaW50ZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3RleHQvYXN0X3RvX3RleHQuZGFydCcgc2hvdyBQcmludGVyOwoKLy8vIFByaW50IHRoZSBnaXZlbiBbY29tcG9uZW50XS4gIERvIG5vdGhpbmcgaWYgaXQgaXMgYG51bGxgLiAgSWYgdGhlCi8vLyBbbGlicmFyeUZpbHRlcl0gaXMgcHJvdmlkZWQsIHRoZW4gb25seSBsaWJyYXJpZXMgdGhhdCBzYXRpc2Z5IGl0IGFyZQovLy8gcHJpbnRlZC4Kdm9pZCBwcmludENvbXBvbmVudFRleHQoQ29tcG9uZW50IGNvbXBvbmVudCwKICAgIHtib29sIGxpYnJhcnlGaWx0ZXIoTGlicmFyeSBsaWJyYXJ5KX0pIHsKICBpZiAoY29tcG9uZW50ID09IG51bGwpIHJldHVybjsKICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgUHJpbnRlciBwcmludGVyID0gbmV3IFByaW50ZXIoc2IpOwogIHByaW50ZXIud3JpdGVDb21wb25lbnRQcm9ibGVtcyhjb21wb25lbnQpOwogIGZvciAoTGlicmFyeSBsaWJyYXJ5IGluIGNvbXBvbmVudC5saWJyYXJpZXMpIHsKICAgIGlmIChsaWJyYXJ5RmlsdGVyICE9IG51bGwgJiYgIWxpYnJhcnlGaWx0ZXIobGlicmFyeSkpIGNvbnRpbnVlOwogICAgcHJpbnRlci53cml0ZUxpYnJhcnlGaWxlKGxpYnJhcnkpOwogIH0KICBwcmludGVyLndyaXRlQ29uc3RhbnRUYWJsZShjb21wb25lbnQpOwogIHByaW50KHNiKTsKfQoKLy8vIFdyaXRlIFtjb21wb25lbnRdIHRvIGZpbGUgb25seSBpbmNsdWRpbmcgbGlicmFyaWVzIHRoYXQgbWF0Y2ggW2ZpbHRlcl0uCkZ1dHVyZTxOdWxsPiB3cml0ZUNvbXBvbmVudFRvRmlsZShDb21wb25lbnQgY29tcG9uZW50LCBVcmkgdXJpLAogICAge2Jvb2wgZmlsdGVyKExpYnJhcnkgbGlicmFyeSl9KSBhc3luYyB7CiAgRmlsZSBvdXRwdXQgPSBuZXcgRmlsZS5mcm9tVXJpKHVyaSk7CiAgSU9TaW5rIHNpbmsgPSBvdXRwdXQub3BlbldyaXRlKCk7CiAgdHJ5IHsKICAgIEJpbmFyeVByaW50ZXIgcHJpbnRlciA9IGZpbHRlciA9PSBudWxsCiAgICAgICAgPyBuZXcgQmluYXJ5UHJpbnRlcihzaW5rKQogICAgICAgIDogbmV3IExpbWl0ZWRCaW5hcnlQcmludGVyKHNpbmssIGZpbHRlciA/PyAoXykgPT4gdHJ1ZSwgZmFsc2UpOwogICAgcHJpbnRlci53cml0ZUNvbXBvbmVudEZpbGUoY29tcG9uZW50KTsKICB9IGZpbmFsbHkgewogICAgYXdhaXQgc2luay5jbG9zZSgpOwogIH0KfQoKLy8vIFNlcmlhbGl6ZSB0aGUgbGlicmFyaWVzIGluIFtjb21wb25lbnRdIHRoYXQgbWF0Y2ggW2ZpbHRlcl0uClVpbnQ4TGlzdCBzZXJpYWxpemVDb21wb25lbnQoQ29tcG9uZW50IGNvbXBvbmVudCwKICAgIHtib29sIGZpbHRlcihMaWJyYXJ5IGxpYnJhcnkpLAogICAgYm9vbCBpbmNsdWRlU291cmNlczogdHJ1ZSwKICAgIGJvb2wgaW5jbHVkZU9mZnNldHM6IHRydWV9KSB7CiAgQnl0ZVNpbmsgYnl0ZVNpbmsgPSBuZXcgQnl0ZVNpbmsoKTsKICBCaW5hcnlQcmludGVyIHByaW50ZXIgPSBmaWx0ZXIgPT0gbnVsbAogICAgICA/IG5ldyBCaW5hcnlQcmludGVyKGJ5dGVTaW5rLAogICAgICAgICAgaW5jbHVkZVNvdXJjZXM6IGluY2x1ZGVTb3VyY2VzLCBpbmNsdWRlT2Zmc2V0czogaW5jbHVkZU9mZnNldHMpCiAgICAgIDogbmV3IExpbWl0ZWRCaW5hcnlQcmludGVyKGJ5dGVTaW5rLCBmaWx0ZXIsICFpbmNsdWRlU291cmNlcywKICAgICAgICAgIGluY2x1ZGVPZmZzZXRzOiBpbmNsdWRlT2Zmc2V0cyk7CiAgcHJpbnRlci53cml0ZUNvbXBvbmVudEZpbGUoY29tcG9uZW50KTsKICByZXR1cm4gYnl0ZVNpbmsuYnVpbGRlci50YWtlQnl0ZXMoKTsKfQoKY29uc3QgU3RyaW5nIGtEZWJ1Z0NsYXNzTmFtZSA9ICIjRGVidWdDbGFzcyI7CgpDb21wb25lbnQgY3JlYXRlRXhwcmVzc2lvbkV2YWx1YXRpb25Db21wb25lbnQoUHJvY2VkdXJlIHByb2NlZHVyZSkgewogIExpYnJhcnkgcmVhbExpYnJhcnkgPSBwcm9jZWR1cmUuZW5jbG9zaW5nTGlicmFyeTsKCiAgTGlicmFyeSBmYWtlTGlicmFyeSA9IG5ldyBMaWJyYXJ5KG5ldyBVcmkoc2NoZW1lOiAnZXZhbHVhdGUnLCBwYXRoOiAnc291cmNlJykpCiAgICAuLnNldExhbmd1YWdlVmVyc2lvbigKICAgICAgICByZWFsTGlicmFyeS5sYW5ndWFnZVZlcnNpb25NYWpvciwgcmVhbExpYnJhcnkubGFuZ3VhZ2VWZXJzaW9uTWlub3IpOwoKICBpZiAocHJvY2VkdXJlLnBhcmVudCBpcyBDbGFzcykgewogICAgQ2xhc3MgcmVhbENsYXNzID0gcHJvY2VkdXJlLnBhcmVudDsKCiAgICBDbGFzcyBmYWtlQ2xhc3MgPSBuZXcgQ2xhc3MobmFtZToga0RlYnVnQ2xhc3NOYW1lKS4ucGFyZW50ID0gZmFrZUxpYnJhcnk7CiAgICBNYXA8VHlwZVBhcmFtZXRlciwgVHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtcyA9CiAgICAgICAgPFR5cGVQYXJhbWV0ZXIsIFR5cGVQYXJhbWV0ZXI+e307CiAgICBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IHR5cGVTdWJzdGl0dXRpb24gPSA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+e307CiAgICBmb3IgKFR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtIGluIHJlYWxDbGFzcy50eXBlUGFyYW1ldGVycykgewogICAgICBUeXBlUGFyYW1ldGVyIG5ld05vZGUgPSBuZXcgVHlwZVBhcmFtZXRlcih0eXBlUGFyYW0ubmFtZSkKICAgICAgICAuLnBhcmVudCA9IGZha2VDbGFzczsKICAgICAgdHlwZVBhcmFtc1t0eXBlUGFyYW1dID0gbmV3Tm9kZTsKICAgICAgdHlwZVN1YnN0aXR1dGlvblt0eXBlUGFyYW1dID0gbmV3IFR5cGVQYXJhbWV0ZXJUeXBlKG5ld05vZGUpOwogICAgfQogICAgQ2xvbmVWaXNpdG9yIGNsb25lciA9IG5ldyBDbG9uZVZpc2l0b3IoCiAgICAgICAgdHlwZVN1YnN0aXR1dGlvbjogdHlwZVN1YnN0aXR1dGlvbiwgdHlwZVBhcmFtczogdHlwZVBhcmFtcyk7CgogICAgZm9yIChUeXBlUGFyYW1ldGVyIHR5cGVQYXJhbSBpbiByZWFsQ2xhc3MudHlwZVBhcmFtZXRlcnMpIHsKICAgICAgZmFrZUNsYXNzLnR5cGVQYXJhbWV0ZXJzLmFkZCh0eXBlUGFyYW0uYWNjZXB0KGNsb25lcikpOwogICAgfQoKICAgIGlmIChyZWFsQ2xhc3Muc3VwZXJ0eXBlICE9IG51bGwpIHsKICAgICAgLy8gc3VwZXJ0eXBlIGlzIG51bGwgZm9yIE9iamVjdC4KICAgICAgZmFrZUNsYXNzLnN1cGVydHlwZSA9IG5ldyBTdXBlcnR5cGUuYnlSZWZlcmVuY2UoCiAgICAgICAgICByZWFsQ2xhc3Muc3VwZXJ0eXBlLmNsYXNzTmFtZSwKICAgICAgICAgIHJlYWxDbGFzcy5zdXBlcnR5cGUudHlwZUFyZ3VtZW50cy5tYXAoY2xvbmVyLnZpc2l0VHlwZSkudG9MaXN0KCkpOwogICAgfQoKICAgIC8vIFJlYmluZCB0aGUgdHlwZSBwYXJhbWV0ZXJzIGluIHRoZSBwcm9jZWR1cmUuCiAgICBwcm9jZWR1cmUgPSBwcm9jZWR1cmUuYWNjZXB0KGNsb25lcik7CiAgICBwcm9jZWR1cmUucGFyZW50ID0gZmFrZUNsYXNzOwogICAgZmFrZUNsYXNzLnByb2NlZHVyZXMuYWRkKHByb2NlZHVyZSk7CiAgICBmYWtlTGlicmFyeS5jbGFzc2VzLmFkZChmYWtlQ2xhc3MpOwogIH0gZWxzZSB7CiAgICBmYWtlTGlicmFyeS5wcm9jZWR1cmVzLmFkZChwcm9jZWR1cmUpOwogICAgcHJvY2VkdXJlLnBhcmVudCA9IGZha2VMaWJyYXJ5OwogIH0KCiAgLy8gVE9ETyh2ZWdvcm92KSBmaW5kIGEgd2F5IHRvIHByZXNlcnZlIG1ldGFkYXRhLgogIHJldHVybiBuZXcgQ29tcG9uZW50KGxpYnJhcmllczogW2Zha2VMaWJyYXJ5XSk7Cn0KCkxpc3Q8aW50PiBzZXJpYWxpemVQcm9jZWR1cmUoUHJvY2VkdXJlIHByb2NlZHVyZSkgewogIHJldHVybiBzZXJpYWxpemVDb21wb25lbnQoY3JlYXRlRXhwcmVzc2lvbkV2YWx1YXRpb25Db21wb25lbnQocHJvY2VkdXJlKSk7Cn0KCi8vLyBBIFtTaW5rXSB0aGF0IGRpcmVjdGx5IHdyaXRlcyBkYXRhIGludG8gYSBieXRlIGJ1aWxkZXIuCmNsYXNzIEJ5dGVTaW5rIGltcGxlbWVudHMgU2luazxMaXN0PGludD4+IHsKICBmaW5hbCBCeXRlc0J1aWxkZXIgYnVpbGRlciA9IG5ldyBCeXRlc0J1aWxkZXIoKTsKCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGRhdGEpIHsKICAgIGJ1aWxkZXIuYWRkKGRhdGEpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHt9Cn0KgI8ATk48ASEBMgEpATYBIQkSERMTDxcbEwFGATofATwBRkkNLS0hKCUtMUQnBCkNAgFMQCwnJAgrIkgrDhgEAgFAMiMfIiYpJEpEKyknAgEuAUU0AVEaTQEjKAFOMypRQEAeJ0QGLEUBQD4GAScnNylNBgE0KiIpKAsrJAQBNDICATRNAgE8LDMBHRcEARICAS1wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL3V0aWxzLmRhcnQ5c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC92ZXJpZmllci5kYXJ0l2gvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS52ZXJpZmllcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQXNFeHByZXNzaW9uLAogICAgICAgIENsYXNzLAogICAgICAgIENvbXBvbmVudCwKICAgICAgICBFeHByZXNzaW9uU3RhdGVtZW50LAogICAgICAgIEZpZWxkLAogICAgICAgIExldCwKICAgICAgICBMaWJyYXJ5LAogICAgICAgIE1lbWJlciwKICAgICAgICBQcm9jZWR1cmUsCiAgICAgICAgU3RhdGljSW52b2NhdGlvbiwKICAgICAgICBTdXBlck1ldGhvZEludm9jYXRpb24sCiAgICAgICAgU3VwZXJQcm9wZXJ0eUdldCwKICAgICAgICBTdXBlclByb3BlcnR5U2V0LAogICAgICAgIFRyZWVOb2RlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90cmFuc2Zvcm1hdGlvbnMvZmxhZ3MuZGFydCcgc2hvdyBUcmFuc2Zvcm1lckZsYWc7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3ZlcmlmaWVyLmRhcnQnIHNob3cgVmVyaWZ5aW5nVmlzaXRvcjsKCmltcG9ydCAnLi4vY29tcGlsZXJfY29udGV4dC5kYXJ0JyBzaG93IENvbXBpbGVyQ29udGV4dDsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cgTG9jYXRlZE1lc3NhZ2UsIG5vTGVuZ3RoLCB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVZlcmlmaWNhdGlvbkVycm9yOwoKaW1wb3J0ICcuLi9zZXZlcml0eS5kYXJ0JyBzaG93IFNldmVyaXR5OwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX3NjaGVtYS5kYXJ0JyBzaG93IFR5cGVTY2hlbWFWaXNpdG9yLCBVbmtub3duVHlwZTsKCmltcG9ydCAna2VybmVsX3NoYWRvd19hc3QuZGFydCcgc2hvdyBTeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnQ7CgppbXBvcnQgJ3JlZGlyZWN0aW5nX2ZhY3RvcnlfYm9keS5kYXJ0JwogICAgc2hvdyBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5LCBnZXRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5OwoKTGlzdDxMb2NhdGVkTWVzc2FnZT4gdmVyaWZ5Q29tcG9uZW50KENvbXBvbmVudCBjb21wb25lbnQsCiAgICB7Ym9vbCBpc091dGxpbmU6IGZhbHNlLCBib29sIHNraXBQbGF0Zm9ybTogZmFsc2V9KSB7CiAgRmFzdGFWZXJpZnlpbmdWaXNpdG9yIHZlcmlmaWVyID0KICAgICAgbmV3IEZhc3RhVmVyaWZ5aW5nVmlzaXRvcihpc091dGxpbmUsIHNraXBQbGF0Zm9ybSk7CiAgY29tcG9uZW50LmFjY2VwdCh2ZXJpZmllcik7CiAgcmV0dXJuIHZlcmlmaWVyLmVycm9yczsKfQoKY2xhc3MgRmFzdGFWZXJpZnlpbmdWaXNpdG9yIGV4dGVuZHMgVmVyaWZ5aW5nVmlzaXRvcgogICAgaW1wbGVtZW50cyBUeXBlU2NoZW1hVmlzaXRvcjx2b2lkPiB7CiAgZmluYWwgTGlzdDxMb2NhdGVkTWVzc2FnZT4gZXJyb3JzID0gPExvY2F0ZWRNZXNzYWdlPltdOwoKICBVcmkgZmlsZVVyaTsKICBmaW5hbCBib29sIHNraXBQbGF0Zm9ybTsKCiAgRmFzdGFWZXJpZnlpbmdWaXNpdG9yKGJvb2wgaXNPdXRsaW5lLCB0aGlzLnNraXBQbGF0Zm9ybSkgewogICAgdGhpcy5pc091dGxpbmUgPSBpc091dGxpbmU7CiAgfQoKICBVcmkgY2hlY2tMb2NhdGlvbihUcmVlTm9kZSBub2RlLCBTdHJpbmcgbmFtZSwgVXJpIGZpbGVVcmkpIHsKICAgIGlmIChuYW1lID09IG51bGwgfHwgbmFtZS5jb250YWlucygiIyIpKSB7CiAgICAgIC8vIFRPRE8oYWhlKTogSW52ZXN0aWdhdGUgaWYgdGhlc2UgY2hlY2tzIGNhbiBiZSBlbmFibGVkOgogICAgICAvLyBpZiAobm9kZS5maWxlVXJpICE9IG51bGwgJiYgbm9kZSBpcyEgTGlicmFyeSkgewogICAgICAvLyAgIHByb2JsZW0obm9kZSwgIkEgc3ludGhldGljIG5vZGUgc2hvdWxkbid0IGhhdmUgYSBmaWxlVXJpIiwKICAgICAgLy8gICAgICAgY29udGV4dDogbm9kZSk7CiAgICAgIC8vIH0KICAgICAgLy8gaWYgKG5vZGUuZmlsZU9mZnNldCAhPSAtMSkgewogICAgICAvLyAgIHByb2JsZW0obm9kZSwgIkEgc3ludGhldGljIG5vZGUgc2hvdWxkbid0IGhhdmUgYSBmaWxlT2Zmc2V0IiwKICAgICAgLy8gICAgICAgY29udGV4dDogbm9kZSk7CiAgICAgIC8vIH0KICAgICAgcmV0dXJuIGZpbGVVcmk7CiAgICB9IGVsc2UgewogICAgICBpZiAoZmlsZVVyaSA9PSBudWxsKSB7CiAgICAgICAgcHJvYmxlbShub2RlLCAiJyRuYW1lJyBoYXMgbm8gZmlsZVVyaSIsIGNvbnRleHQ6IG5vZGUpOwogICAgICAgIHJldHVybiBmaWxlVXJpOwogICAgICB9CiAgICAgIGlmIChub2RlLmZpbGVPZmZzZXQgPT0gLTEgJiYgbm9kZSBpcyEgTGlicmFyeSkgewogICAgICAgIHByb2JsZW0obm9kZSwgIickbmFtZScgaGFzIG5vIGZpbGVPZmZzZXQiLCBjb250ZXh0OiBub2RlKTsKICAgICAgfQogICAgICByZXR1cm4gZmlsZVVyaTsKICAgIH0KICB9CgogIHZvaWQgY2hlY2tTdXBlckludm9jYXRpb24oVHJlZU5vZGUgbm9kZSkgewogICAgTWVtYmVyIGNvbnRhaW5pbmdNZW1iZXIgPSBnZXRDb250YWluaW5nTWVtYmVyKG5vZGUpOwogICAgaWYgKGNvbnRhaW5pbmdNZW1iZXIgPT0gbnVsbCkgewogICAgICBwcm9ibGVtKG5vZGUsICdTdXBlciBjYWxsIG91dHNpZGUgb2YgYW55IG1lbWJlcicpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKGNvbnRhaW5pbmdNZW1iZXIudHJhbnNmb3JtZXJGbGFncyAmIFRyYW5zZm9ybWVyRmxhZy5zdXBlckNhbGxzID09IDApIHsKICAgICAgICBwcm9ibGVtKAogICAgICAgICAgICBub2RlLCAnU3VwZXIgY2FsbCBpbiBhIG1lbWJlciBsYWNraW5nIFRyYW5zZm9ybWVyRmxhZy5zdXBlckNhbGxzJyk7CiAgICAgIH0KICAgIH0KICB9CgogIE1lbWJlciBnZXRDb250YWluaW5nTWVtYmVyKFRyZWVOb2RlIG5vZGUpIHsKICAgIHdoaWxlIChub2RlICE9IG51bGwpIHsKICAgICAgaWYgKG5vZGUgaXMgTWVtYmVyKSByZXR1cm4gbm9kZTsKICAgICAgbm9kZSA9IG5vZGUucGFyZW50OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBwcm9ibGVtKFRyZWVOb2RlIG5vZGUsIFN0cmluZyBkZXRhaWxzLCB7VHJlZU5vZGUgY29udGV4dH0pIHsKICAgIG5vZGUgPz89IChjb250ZXh0ID8/IHRoaXMuY29udGV4dCk7CiAgICBpbnQgb2Zmc2V0ID0gbm9kZT8uZmlsZU9mZnNldCA/PyAtMTsKICAgIFVyaSBmaWxlID0gbm9kZT8ubG9jYXRpb24/LmZpbGUgPz8gZmlsZVVyaTsKICAgIFVyaSB1cmkgPSBmaWxlID09IG51bGwgPyBudWxsIDogZmlsZTsKICAgIExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2UgPSB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVZlcmlmaWNhdGlvbkVycm9yCiAgICAgICAgLndpdGhBcmd1bWVudHMoZGV0YWlscykKICAgICAgICAud2l0aExvY2F0aW9uKHVyaSwgb2Zmc2V0LCBub0xlbmd0aCk7CiAgICBDb21waWxlckNvbnRleHQuY3VycmVudC5yZXBvcnQobWVzc2FnZSwgU2V2ZXJpdHkuZXJyb3IpOwogICAgZXJyb3JzLmFkZChtZXNzYWdlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0QXNFeHByZXNzaW9uKEFzRXhwcmVzc2lvbiBub2RlKSB7CiAgICBzdXBlci52aXNpdEFzRXhwcmVzc2lvbihub2RlKTsKICAgIGlmIChub2RlLmZpbGVPZmZzZXQgPT0gLTEpIHsKICAgICAgVHJlZU5vZGUgcGFyZW50ID0gbm9kZS5wYXJlbnQ7CiAgICAgIHdoaWxlIChwYXJlbnQgIT0gbnVsbCkgewogICAgICAgIGlmIChwYXJlbnQuZmlsZU9mZnNldCAhPSAtMSkgYnJlYWs7CiAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDsKICAgICAgfQogICAgICBwcm9ibGVtKHBhcmVudCwgIk5vIG9mZnNldCBmb3IgJG5vZGUiLCBjb250ZXh0OiBub2RlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChFeHByZXNzaW9uU3RhdGVtZW50IG5vZGUpIHsKICAgIC8vIEJ5cGFzcyB2ZXJpZmljYXRpb24gb2YgdGhlIFtTdGF0aWNHZXRdIGluIFtSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5XSBhcwogICAgLy8gdGhpcyBpcyBhIHN0YXRpYyBnZXQgd2l0aG91dCBhIGdldHRlci4KICAgIGlmIChub2RlIGlzISBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KSB7CiAgICAgIHN1cGVyLnZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChub2RlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0TGV0KExldCBub2RlKSB7CiAgICBpZiAobm9kZSBpcyBTeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnQpIHsKICAgICAgcHJvYmxlbShub2RlLCAiTGVha2luZyBzaGFkb3cgbm9kZTogJHtub2RlLnJ1bnRpbWVUeXBlfSIpOwogICAgfQogICAgc3VwZXIudmlzaXRMZXQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdExpYnJhcnkoTGlicmFyeSBub2RlKSB7CiAgICAvLyBJc3N1ZShodHRwOi8vZGFydGJ1Zy5jb20vMzI1MzApCiAgICBpZiAoc2tpcFBsYXRmb3JtICYmIG5vZGUuaW1wb3J0VXJpLnNjaGVtZSA9PSAnZGFydCcpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgZmlsZVVyaSA9IGNoZWNrTG9jYXRpb24obm9kZSwgbm9kZS5uYW1lLCBub2RlLmZpbGVVcmkpOwogICAgc3VwZXIudmlzaXRMaWJyYXJ5KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDbGFzcyhDbGFzcyBub2RlKSB7CiAgICBmaWxlVXJpID0gY2hlY2tMb2NhdGlvbihub2RlLCBub2RlLm5hbWUsIG5vZGUuZmlsZVVyaSk7CiAgICBzdXBlci52aXNpdENsYXNzKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRGaWVsZChGaWVsZCBub2RlKSB7CiAgICBmaWxlVXJpID0gY2hlY2tMb2NhdGlvbihub2RlLCBub2RlLm5hbWUubmFtZSwgbm9kZS5maWxlVXJpKTsKICAgIHN1cGVyLnZpc2l0RmllbGQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFByb2NlZHVyZShQcm9jZWR1cmUgbm9kZSkgewogICAgZmlsZVVyaSA9IGNoZWNrTG9jYXRpb24obm9kZSwgbm9kZS5uYW1lLm5hbWUsIG5vZGUuZmlsZVVyaSk7CiAgICBzdXBlci52aXNpdFByb2NlZHVyZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0VW5rbm93blR5cGUoVW5rbm93blR5cGUgbm9kZSkgewogICAgLy8gTm90ZTogd2UgY2FuJ3QgcGFzcyBbbm9kZV0gdG8gW3Byb2JsZW1dIGJlY2F1c2UgaXQncyBub3QgYSBbVHJlZU5vZGVdLgogICAgcHJvYmxlbShudWxsLCAiVW5leHBlY3RlZCBhcHBlYXJhbmNlIG9mIHRoZSB1bmtub3duIHR5cGUuIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFN1cGVyTWV0aG9kSW52b2NhdGlvbihTdXBlck1ldGhvZEludm9jYXRpb24gbm9kZSkgewogICAgY2hlY2tTdXBlckludm9jYXRpb24obm9kZSk7CiAgICBzdXBlci52aXNpdFN1cGVyTWV0aG9kSW52b2NhdGlvbihub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0U3VwZXJQcm9wZXJ0eUdldChTdXBlclByb3BlcnR5R2V0IG5vZGUpIHsKICAgIGNoZWNrU3VwZXJJbnZvY2F0aW9uKG5vZGUpOwogICAgc3VwZXIudmlzaXRTdXBlclByb3BlcnR5R2V0KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRTdXBlclByb3BlcnR5U2V0KFN1cGVyUHJvcGVydHlTZXQgbm9kZSkgewogICAgY2hlY2tTdXBlckludm9jYXRpb24obm9kZSk7CiAgICBzdXBlci52aXNpdFN1cGVyUHJvcGVydHlTZXQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFN0YXRpY0ludm9jYXRpb24oU3RhdGljSW52b2NhdGlvbiBub2RlKSB7CiAgICBzdXBlci52aXNpdFN0YXRpY0ludm9jYXRpb24obm9kZSk7CiAgICBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5IGJvZHkgPSBnZXRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KG5vZGUudGFyZ2V0KTsKICAgIGlmIChib2R5ICE9IG51bGwpIHsKICAgICAgcHJvYmxlbShub2RlLCAiQXR0ZW1wdCB0byBpbnZva2UgcmVkaXJlY3RpbmcgZmFjdG9yeS4iKTsKICAgIH0KICB9Cn0KgNIATk48ARgBIQkWDxMdDw0REBMaHxoaEgFJAT0BOAEdTQEpAVEBQgEnPAE6OSM6HhoCATUpOgEPGwE9IAQBPy5AOUYfCyZJHwsWDR1AGAg3QwgWBgQBLTkkOQ1REVAIBgQBLhsnGgYRBAEMPygpMCpGIC49GQQBDCkjISUfLCAIPQYEAQw3TS4rLAYEAQwXL0EGGgQBDB8nOw4GPB4EAQwbPBwEAQwbQRwEAQwjQSAEAQwnTkEEAQw7ICwEAQwxICcEAQwxICcEAQwxJ0oYPwYEAgEwcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC92ZXJpZmllci5kYXJ0MHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9sb2FkZXIuZGFydLLuLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEubG9hZGVyOwoKaW1wb3J0ICdkYXJ0OmFzeW5jJyBzaG93IEZ1dHVyZTsKCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJyBzaG93IFF1ZXVlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBDbGFzcywgRGFydFR5cGUsIExpYnJhcnk7CgppbXBvcnQgJ2J1aWxkZXIvYnVpbGRlci5kYXJ0JwogICAgc2hvdyBCdWlsZGVyLCBDbGFzc0J1aWxkZXIsIExpYnJhcnlCdWlsZGVyLCBTY29wZSwgVHlwZUJ1aWxkZXI7CgppbXBvcnQgJ2J1aWxkZXIvZGVjbGFyYXRpb25fYnVpbGRlci5kYXJ0JyBzaG93IERlY2xhcmF0aW9uQnVpbGRlcjsKCmltcG9ydCAnYnVpbGRlci9tb2RpZmllcl9idWlsZGVyLmRhcnQnIHNob3cgTW9kaWZpZXJCdWlsZGVyOwoKaW1wb3J0ICdjcmFzaC5kYXJ0JyBzaG93IGZpcnN0U291cmNlVXJpOwoKaW1wb3J0ICdrZXJuZWwvYm9keV9idWlsZGVyLmRhcnQnIHNob3cgQm9keUJ1aWxkZXI7CgppbXBvcnQgJ21lc3NhZ2VzLmRhcnQnCiAgICBzaG93CiAgICAgICAgRm9ybWF0dGVkTWVzc2FnZSwKICAgICAgICBMb2NhdGVkTWVzc2FnZSwKICAgICAgICBNZXNzYWdlLAogICAgICAgIG5vTGVuZ3RoLAogICAgICAgIFN1bW1hcnlUZW1wbGF0ZSwKICAgICAgICBUZW1wbGF0ZSwKICAgICAgICBtZXNzYWdlUGxhdGZvcm1Qcml2YXRlTGlicmFyeUFjY2VzcywKICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbUNvbnRleHRTZXZlcml0eSwKICAgICAgICB0ZW1wbGF0ZVNvdXJjZUJvZHlTdW1tYXJ5OwoKaW1wb3J0ICdwcm9ibGVtcy5kYXJ0JyBzaG93IGludGVybmFsUHJvYmxlbSwgdW5oYW5kbGVkOwoKaW1wb3J0ICdzZXZlcml0eS5kYXJ0JyBzaG93IFNldmVyaXR5OwoKaW1wb3J0ICd0YXJnZXRfaW1wbGVtZW50YXRpb24uZGFydCcgc2hvdyBUYXJnZXRJbXBsZW1lbnRhdGlvbjsKCmltcG9ydCAndGlja2VyLmRhcnQnIHNob3cgVGlja2VyOwoKY29uc3QgU3RyaW5nIHVudHJhbnNsYXRhYmxlVXJpU2NoZW1lID0gIm9yZy1kYXJ0bGFuZy11bnRyYW5zbGF0YWJsZS11cmkiOwoKYWJzdHJhY3QgY2xhc3MgTG9hZGVyIHsKICBmaW5hbCBNYXA8VXJpLCBMaWJyYXJ5QnVpbGRlcj4gYnVpbGRlcnMgPSA8VXJpLCBMaWJyYXJ5QnVpbGRlcj57fTsKCiAgZmluYWwgUXVldWU8TGlicmFyeUJ1aWxkZXI+IHVucGFyc2VkTGlicmFyaWVzID0gbmV3IFF1ZXVlPExpYnJhcnlCdWlsZGVyPigpOwoKICBmaW5hbCBMaXN0PExpYnJhcnk+IGxpYnJhcmllcyA9IDxMaWJyYXJ5PltdOwoKICBmaW5hbCBUYXJnZXRJbXBsZW1lbnRhdGlvbiB0YXJnZXQ7CgogIC8vLyBMaXN0IG9mIGFsbCBoYW5kbGVkIGNvbXBpbGUtdGltZSBlcnJvcnMgc2VlbiBzbyBmYXIgYnkgbGlicmFyaWVzIGxvYWRlZAogIC8vLyBieSB0aGlzIGxvYWRlci4KICAvLy8KICAvLy8gQSBoYW5kbGVkIGVycm9yIGlzIGFuIGVycm9yIHRoYXQgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGdlbmVyYXRlZCBBU1QKICAvLy8gYWxyZWFkeSwgZm9yIGV4YW1wbGUsIGFzIGEgdGhyb3cgZXhwcmVzc2lvbi4KICBmaW5hbCBMaXN0PExvY2F0ZWRNZXNzYWdlPiBoYW5kbGVkRXJyb3JzID0gPExvY2F0ZWRNZXNzYWdlPltdOwoKICAvLy8gTGlzdCBvZiBhbGwgdW5oYW5kbGVkIGNvbXBpbGUtdGltZSBlcnJvcnMgc2VlbiBzbyBmYXIgYnkgbGlicmFyaWVzIGxvYWRlZAogIC8vLyBieSB0aGlzIGxvYWRlci4KICAvLy8KICAvLy8gQW4gdW5oYW5kbGVkIGVycm9yIGlzIGFuIGVycm9yIHRoYXQgaGFzbid0IGJlZW4gaGFuZGxlZCwgc2VlCiAgLy8vIFtoYW5kbGVkRXJyb3JzXS4KICBmaW5hbCBMaXN0PExvY2F0ZWRNZXNzYWdlPiB1bmhhbmRsZWRFcnJvcnMgPSA8TG9jYXRlZE1lc3NhZ2U+W107CgogIC8vLyBMaXN0IG9mIGFsbCBwcm9ibGVtcyBzZWVuIHNvIGZhciBieSBsaWJyYXJpZXMgbG9hZGVkIGJ5IHRoaXMgbG9hZGVyIHRoYXQKICAvLy8gZG9lcyBub3QgYmVsb25nIGRpcmVjdGx5IHRvIGEgbGlicmFyeS4KICBmaW5hbCBMaXN0PEZvcm1hdHRlZE1lc3NhZ2U+IGFsbENvbXBvbmVudFByb2JsZW1zID0gPEZvcm1hdHRlZE1lc3NhZ2U+W107CgogIGZpbmFsIFNldDxTdHJpbmc+IHNlZW5NZXNzYWdlcyA9IG5ldyBTZXQ8U3RyaW5nPigpOwoKICBMaWJyYXJ5QnVpbGRlciBjb3JlTGlicmFyeTsKCiAgLy8vIFRoZSBmaXJzdCBsaWJyYXJ5IHRoYXQgd2UndmUgYmVlbiBhc2tlZCB0byBjb21waWxlLiBXaGVuIGNvbXBpbGluZyBhCiAgLy8vIHByb2dyYW0gKGFrYSBzY3JpcHQpLCB0aGlzIGlzIHRoZSBsaWJyYXJ5IHRoYXQgc2hvdWxkIGhhdmUgYSBtYWluIG1ldGhvZC4KICBMaWJyYXJ5QnVpbGRlciBmaXJzdDsKCiAgaW50IGJ5dGVDb3VudCA9IDA7CgogIFVyaSBjdXJyZW50VXJpRm9yQ3Jhc2hSZXBvcnRpbmc7CgogIExvYWRlcih0aGlzLnRhcmdldCk7CgogIFRpY2tlciBnZXQgdGlja2VyID0+IHRhcmdldC50aWNrZXI7CgogIFRlbXBsYXRlPFN1bW1hcnlUZW1wbGF0ZT4gZ2V0IG91dGxpbmVTdW1tYXJ5VGVtcGxhdGU7CgogIGJvb2wgZ2V0IGlzU291cmNlTG9hZGVyID0+IGZhbHNlOwoKICAvLy8gTG9vayB1cCBhIGxpYnJhcnkgYnVpbGRlciBieSB0aGUgbmFtZSBbdXJpXSwgb3IgaWYgc3VjaCBkb2Vzbid0CiAgLy8vIGV4aXN0LCBjcmVhdGUgb25lLiBUaGUgY2Fub25pY2FsIFVSSSBvZiB0aGUgbGlicmFyeSBpcyBbdXJpXSwgYW5kIGl0cwogIC8vLyBhY3R1YWwgbG9jYXRpb24gaXMgW2ZpbGVVcmldLgogIC8vLwogIC8vLyBDYW5vbmljYWwgVVJJcyBoYXZlIHNjaGVtZXMgbGlrZSAiZGFydCIsIG9yICJwYWNrYWdlIiwgYW5kIHRoZSBhY3R1YWwKICAvLy8gbG9jYXRpb24gaXMgb2Z0ZW4gYSBmaWxlIFVSSS4KICAvLy8KICAvLy8gVGhlIFthY2Nlc3Nvcl0gaXMgdGhlIGxpYnJhcnkgdGhhdCdzIHRyeWluZyB0byBpbXBvcnQsIGV4cG9ydCwgb3IgaW5jbHVkZQogIC8vLyBhcyBwYXJ0IFt1cmldLCBhbmQgW2NoYXJPZmZzZXRdIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZwogIC8vLyBkaXJlY3RpdmUuIElmIFthY2Nlc3Nvcl0gaXNuJ3QgYWxsb3dlZCB0byBhY2Nlc3MgW3VyaV0sIGl0J3MgYQogIC8vLyBjb21waWxlLXRpbWUgZXJyb3IuCiAgTGlicmFyeUJ1aWxkZXIgcmVhZChVcmkgdXJpLCBpbnQgY2hhck9mZnNldCwKICAgICAge1VyaSBmaWxlVXJpLCBMaWJyYXJ5QnVpbGRlciBhY2Nlc3NvciwgTGlicmFyeUJ1aWxkZXIgb3JpZ2lufSkgewogICAgTGlicmFyeUJ1aWxkZXIgYnVpbGRlciA9IGJ1aWxkZXJzLnB1dElmQWJzZW50KHVyaSwgKCkgewogICAgICBpZiAoZmlsZVVyaSAhPSBudWxsICYmCiAgICAgICAgICAoZmlsZVVyaS5zY2hlbWUgPT0gImRhcnQiIHx8CiAgICAgICAgICAgICAgZmlsZVVyaS5zY2hlbWUgPT0gInBhY2thZ2UiIHx8CiAgICAgICAgICAgICAgZmlsZVVyaS5zY2hlbWUgPT0gImRhcnQtZXh0IikpIHsKICAgICAgICBmaWxlVXJpID0gbnVsbDsKICAgICAgfQogICAgICBTdHJpbmcgcGFja2FnZUZyYWdtZW50OwogICAgICBpZiAoZmlsZVVyaSA9PSBudWxsKSB7CiAgICAgICAgc3dpdGNoICh1cmkuc2NoZW1lKSB7CiAgICAgICAgICBjYXNlICJwYWNrYWdlIjoKICAgICAgICAgIGNhc2UgImRhcnQiOgogICAgICAgICAgICBmaWxlVXJpID0gdGFyZ2V0LnRyYW5zbGF0ZVVyaSh1cmkpID8/CiAgICAgICAgICAgICAgICBuZXcgVXJpKAogICAgICAgICAgICAgICAgICAgIHNjaGVtZTogdW50cmFuc2xhdGFibGVVcmlTY2hlbWUsCiAgICAgICAgICAgICAgICAgICAgcGF0aDogVXJpLmVuY29kZUNvbXBvbmVudCgiJHVyaSIpKTsKICAgICAgICAgICAgcGFja2FnZUZyYWdtZW50ID0gdGFyZ2V0LnVyaVRyYW5zbGF0b3IuZ2V0UGFja2FnZUZyYWdtZW50KHVyaSk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIGZpbGVVcmkgPSB1cmk7CiAgICAgICAgICAgIC8vIENoZWNrIGZvciBlbXB0eSBwYWNrYWdlIG5hbWUgZW50cnkgKHJlZGlyZWN0aW5nIHRvIHBhY2thZ2UgbmFtZQogICAgICAgICAgICAvLyBmcm9tIHdoaWNoIHdlIHNob3VsZCBnZXQgdGhlIGZyYWdtZW50IHBhcnQpLgogICAgICAgICAgICBwYWNrYWdlRnJhZ21lbnQgPSB0YXJnZXQudXJpVHJhbnNsYXRvcj8uZ2V0RGVmYXVsdFBhY2thZ2VGcmFnbWVudCgpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgYm9vbCBoYXNQYWNrYWdlU3BlY2lmaWVkTGFuZ3VhZ2VWZXJzaW9uID0gZmFsc2U7CiAgICAgIGludCBwYWNrYWdlU3BlY2lmaWVkTGFuZ3VhZ2VWZXJzaW9uTWFqb3I7CiAgICAgIGludCBwYWNrYWdlU3BlY2lmaWVkTGFuZ3VhZ2VWZXJzaW9uTWlub3I7CiAgICAgIGlmIChwYWNrYWdlRnJhZ21lbnQgIT0gbnVsbCkgewogICAgICAgIExpc3Q8U3RyaW5nPiBwcm9wZXJ0aWVzID0gcGFja2FnZUZyYWdtZW50LnNwbGl0KCImIik7CiAgICAgICAgaW50IGZvdW5kRW50cmllcyA9IDA7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICBTdHJpbmcgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldOwogICAgICAgICAgaWYgKHByb3BlcnR5LnN0YXJ0c1dpdGgoImRhcnQ9IikpIHsKICAgICAgICAgICAgaWYgKCsrZm91bmRFbnRyaWVzID4gMSkgewogICAgICAgICAgICAgIC8vIEZvcmNlIGVycm9yIHRvIGJlIGlzc3VlZCBpZiBtb3JlIHRoYW4gb25lICJkYXJ0PSIgZW50cnkuCiAgICAgICAgICAgICAgLy8gKFRoZSBlcnJvciB3aWxsIGJlIGlzc3VlZCBpbiBsaWJyYXJ5LnNldExhbmd1YWdlVmVyc2lvbiBiZWxvdwogICAgICAgICAgICAgIC8vIHdoZW4gZ2l2aW5nIGl0IGBudWxsYCB2ZXJzaW9uIG51bWJlcnMuKQogICAgICAgICAgICAgIHBhY2thZ2VTcGVjaWZpZWRMYW5ndWFnZVZlcnNpb25NYWpvciA9IG51bGw7CiAgICAgICAgICAgICAgcGFja2FnZVNwZWNpZmllZExhbmd1YWdlVmVyc2lvbk1pbm9yID0gbnVsbDsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaGFzUGFja2FnZVNwZWNpZmllZExhbmd1YWdlVmVyc2lvbiA9IHRydWU7CiAgICAgICAgICAgIFN0cmluZyBsYW5nYXVnZVZlcnNpb25TdHJpbmcgPSBwcm9wZXJ0eS5zdWJzdHJpbmcoNSk7CgogICAgICAgICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgdmVyc2lvbiBpcyB4Lnlbd2hhdGV2ZXJdCiAgICAgICAgICAgIExpc3Q8U3RyaW5nPiBkb3RTZXBhcmF0ZWRQYXJ0cyA9IGxhbmdhdWdlVmVyc2lvblN0cmluZy5zcGxpdCgiLiIpOwogICAgICAgICAgICBpZiAoZG90U2VwYXJhdGVkUGFydHMubGVuZ3RoID49IDIpIHsKICAgICAgICAgICAgICBwYWNrYWdlU3BlY2lmaWVkTGFuZ3VhZ2VWZXJzaW9uTWFqb3IgPQogICAgICAgICAgICAgICAgICBpbnQudHJ5UGFyc2UoZG90U2VwYXJhdGVkUGFydHNbMF0pOwogICAgICAgICAgICAgIHBhY2thZ2VTcGVjaWZpZWRMYW5ndWFnZVZlcnNpb25NaW5vciA9CiAgICAgICAgICAgICAgICAgIGludC50cnlQYXJzZShkb3RTZXBhcmF0ZWRQYXJ0c1sxXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9CiAgICAgICAgICB0YXJnZXQuY3JlYXRlTGlicmFyeUJ1aWxkZXIodXJpLCBmaWxlVXJpLCBvcmlnaW4pOwogICAgICBpZiAoaGFzUGFja2FnZVNwZWNpZmllZExhbmd1YWdlVmVyc2lvbikgewogICAgICAgIGxpYnJhcnkuc2V0TGFuZ3VhZ2VWZXJzaW9uKHBhY2thZ2VTcGVjaWZpZWRMYW5ndWFnZVZlcnNpb25NYWpvciwKICAgICAgICAgICAgcGFja2FnZVNwZWNpZmllZExhbmd1YWdlVmVyc2lvbk1pbm9yLAogICAgICAgICAgICBleHBsaWNpdDogZmFsc2UpOwogICAgICB9CiAgICAgIGlmICh1cmkuc2NoZW1lID09ICJkYXJ0IiAmJiB1cmkucGF0aCA9PSAiY29yZSIpIHsKICAgICAgICBjb3JlTGlicmFyeSA9IGxpYnJhcnk7CiAgICAgIH0KICAgICAgaWYgKGxpYnJhcnkubG9hZGVyICE9IHRoaXMpIHsKICAgICAgICBpZiAoY29yZUxpYnJhcnkgPT0gbGlicmFyeSkgewogICAgICAgICAgdGFyZ2V0LmxvYWRFeHRyYVJlcXVpcmVkTGlicmFyaWVzKHRoaXMpOwogICAgICAgIH0KICAgICAgICAvLyBUaGlzIGxpYnJhcnkgaXNuJ3Qgb3duZWQgYnkgdGhpcyBsb2FkZXIsIHNvIG5vdCBmdXJ0aGVyIHByb2Nlc3NpbmcKICAgICAgICAvLyBzaG91bGQgYmUgYXR0ZW1wdGVkLgogICAgICAgIHJldHVybiBsaWJyYXJ5OwogICAgICB9CgogICAgICB7CiAgICAgICAgLy8gQWRkIGFueSBhZGRpdGlvbmFsIGxvZ2ljIGFmdGVyIHRoaXMgYmxvY2suIFNldHRpbmcgdGhlCiAgICAgICAgLy8gZmlyc3RTb3VyY2VVcmkgYW5kIGZpcnN0IGxpYnJhcnkgc2hvdWxkIGJlIGRvbmUgYXMgZWFybHkgYXMKICAgICAgICAvLyBwb3NzaWJsZS4KICAgICAgICBmaXJzdFNvdXJjZVVyaSA/Pz0gdXJpOwogICAgICAgIGZpcnN0ID8/PSBsaWJyYXJ5OwogICAgICB9CiAgICAgIGlmIChjb3JlTGlicmFyeSA9PSBsaWJyYXJ5KSB7CiAgICAgICAgdGFyZ2V0LmxvYWRFeHRyYVJlcXVpcmVkTGlicmFyaWVzKHRoaXMpOwogICAgICB9CiAgICAgIGlmICh0YXJnZXQuYmFja2VuZFRhcmdldC5tYXlEZWZpbmVSZXN0cmljdGVkVHlwZShvcmlnaW4/LnVyaSA/PyB1cmkpKSB7CiAgICAgICAgbGlicmFyeS5tYXlJbXBsZW1lbnRSZXN0cmljdGVkVHlwZXMgPSB0cnVlOwogICAgICB9CiAgICAgIGlmICh1cmkuc2NoZW1lID09ICJkYXJ0IikgewogICAgICAgIHRhcmdldC5yZWFkUGF0Y2hGaWxlcyhsaWJyYXJ5KTsKICAgICAgfQogICAgICB1bnBhcnNlZExpYnJhcmllcy5hZGRMYXN0KGxpYnJhcnkpOwogICAgICByZXR1cm4gbGlicmFyeTsKICAgIH0pOwogICAgaWYgKGFjY2Vzc29yID09IG51bGwpIHsKICAgICAgaWYgKGJ1aWxkZXIubG9hZGVyID09IHRoaXMgJiYgZmlyc3QgIT0gYnVpbGRlciAmJiBpc1NvdXJjZUxvYWRlcikgewogICAgICAgIHVuaGFuZGxlZCgibnVsbCIsICJhY2Nlc3NvciIsIGNoYXJPZmZzZXQsIHVyaSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGJ1aWxkZXIucmVjb3JkQWNjZXNzKGNoYXJPZmZzZXQsIG5vTGVuZ3RoLCBhY2Nlc3Nvci5maWxlVXJpKTsKICAgICAgaWYgKCFhY2Nlc3Nvci5pc1BhdGNoICYmCiAgICAgICAgICAhYWNjZXNzb3IuaXNQYXJ0ICYmCiAgICAgICAgICAhdGFyZ2V0LmJhY2tlbmRUYXJnZXQKICAgICAgICAgICAgICAuYWxsb3dQbGF0Zm9ybVByaXZhdGVMaWJyYXJ5QWNjZXNzKGFjY2Vzc29yLnVyaSwgdXJpKSkgewogICAgICAgIGFjY2Vzc29yLmFkZFByb2JsZW0obWVzc2FnZVBsYXRmb3JtUHJpdmF0ZUxpYnJhcnlBY2Nlc3MsIGNoYXJPZmZzZXQsCiAgICAgICAgICAgIG5vTGVuZ3RoLCBhY2Nlc3Nvci5maWxlVXJpKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGJ1aWxkZXI7CiAgfQoKICB2b2lkIGVuc3VyZUNvcmVMaWJyYXJ5KCkgewogICAgaWYgKGNvcmVMaWJyYXJ5ID09IG51bGwpIHsKICAgICAgcmVhZChVcmkucGFyc2UoImRhcnQ6Y29yZSIpLCAwLCBhY2Nlc3NvcjogZmlyc3QpOwogICAgICAvLyBUT0RPKGFza2VzYyk6IFdoZW4gYWxsIGJhY2tlbmRzIHN1cHBvcnQgc2V0IGxpdGVyYWxzLCB3ZSBubyBsb25nZXIKICAgICAgLy8gbmVlZCB0byBpbmRleCBkYXJ0OmNvbGxlY3Rpb24sIGFzIGl0IGlzIG9ubHkgbmVlZGVkIGZvciBkZXN1Z2FyaW5nIG9mCiAgICAgIC8vIGNvbnN0IHNldHMuIFdlIGNhbiByZW1vdmUgaXQgZnJvbSB0aGlzIGxpc3QgYXQgdGhhdCB0aW1lLgogICAgICByZWFkKFVyaS5wYXJzZSgiZGFydDpjb2xsZWN0aW9uIiksIDAsIGFjY2Vzc29yOiBmaXJzdCk7CiAgICAgIGFzc2VydChjb3JlTGlicmFyeSAhPSBudWxsKTsKICAgIH0KICB9CgogIEZ1dHVyZTxOdWxsPiBidWlsZEJvZGllcygpIGFzeW5jIHsKICAgIGFzc2VydChjb3JlTGlicmFyeSAhPSBudWxsKTsKICAgIGZvciAoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSBpbiBidWlsZGVycy52YWx1ZXMpIHsKICAgICAgaWYgKGxpYnJhcnkubG9hZGVyID09IHRoaXMpIHsKICAgICAgICBjdXJyZW50VXJpRm9yQ3Jhc2hSZXBvcnRpbmcgPSBsaWJyYXJ5LnVyaTsKICAgICAgICBhd2FpdCBidWlsZEJvZHkobGlicmFyeSk7CiAgICAgIH0KICAgIH0KICAgIGN1cnJlbnRVcmlGb3JDcmFzaFJlcG9ydGluZyA9IG51bGw7CiAgICBsb2dTdW1tYXJ5KHRlbXBsYXRlU291cmNlQm9keVN1bW1hcnkpOwogIH0KCiAgRnV0dXJlPE51bGw+IGJ1aWxkT3V0bGluZXMoKSBhc3luYyB7CiAgICBlbnN1cmVDb3JlTGlicmFyeSgpOwogICAgd2hpbGUgKHVucGFyc2VkTGlicmFyaWVzLmlzTm90RW1wdHkpIHsKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IHVucGFyc2VkTGlicmFyaWVzLnJlbW92ZUZpcnN0KCk7CiAgICAgIGN1cnJlbnRVcmlGb3JDcmFzaFJlcG9ydGluZyA9IGxpYnJhcnkudXJpOwogICAgICBhd2FpdCBidWlsZE91dGxpbmUobGlicmFyeSk7CiAgICB9CiAgICBjdXJyZW50VXJpRm9yQ3Jhc2hSZXBvcnRpbmcgPSBudWxsOwogICAgbG9nU3VtbWFyeShvdXRsaW5lU3VtbWFyeVRlbXBsYXRlKTsKICB9CgogIHZvaWQgbG9nU3VtbWFyeShUZW1wbGF0ZTxTdW1tYXJ5VGVtcGxhdGU+IHRlbXBsYXRlKSB7CiAgICB0aWNrZXIubG9nKChEdXJhdGlvbiBlbGFwc2VkLCBEdXJhdGlvbiBzaW5jZVN0YXJ0KSB7CiAgICAgIGludCBsaWJyYXJ5Q291bnQgPSAwOwogICAgICBidWlsZGVycy5mb3JFYWNoKChVcmkgdXJpLCBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICAgICAgaWYgKGxpYnJhcnkubG9hZGVyID09IHRoaXMpIGxpYnJhcnlDb3VudCsrOwogICAgICB9KTsKICAgICAgZG91YmxlIG1zID0gZWxhcHNlZC5pbk1pY3Jvc2Vjb25kcyAvIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1Blck1pbGxpc2Vjb25kOwogICAgICBNZXNzYWdlIG1lc3NhZ2UgPSB0ZW1wbGF0ZS53aXRoQXJndW1lbnRzKAogICAgICAgICAgbGlicmFyeUNvdW50LCBieXRlQ291bnQsIG1zLCBieXRlQ291bnQgLyBtcywgbXMgLyBsaWJyYXJ5Q291bnQpOwogICAgICBwcmludCgiJHNpbmNlU3RhcnQ6ICR7bWVzc2FnZS5tZXNzYWdlfSIpOwogICAgfSk7CiAgfQoKICBGdXR1cmU8TnVsbD4gYnVpbGRPdXRsaW5lKGNvdmFyaWFudCBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KTsKCiAgLy8vIEJ1aWxkcyBhbGwgdGhlIG1ldGhvZCBib2RpZXMgZm91bmQgaW4gdGhlIGdpdmVuIFtsaWJyYXJ5XS4KICBGdXR1cmU8TnVsbD4gYnVpbGRCb2R5KGNvdmFyaWFudCBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KTsKCiAgLy8vIFJlZ2lzdGVyIFttZXNzYWdlXSBhcyBhIHByb2JsZW0gd2l0aCBhIHNldmVyaXR5IGRldGVybWluZWQgYnkgdGhlCiAgLy8vIGludHJpbnNpYyBzZXZlcml0eSBvZiB0aGUgbWVzc2FnZS4KICBGb3JtYXR0ZWRNZXNzYWdlIGFkZFByb2JsZW0oCiAgICAgIE1lc3NhZ2UgbWVzc2FnZSwgaW50IGNoYXJPZmZzZXQsIGludCBsZW5ndGgsIFVyaSBmaWxlVXJpLAogICAgICB7Ym9vbCB3YXNIYW5kbGVkOiBmYWxzZSwKICAgICAgTGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dCwKICAgICAgU2V2ZXJpdHkgc2V2ZXJpdHksCiAgICAgIGJvb2wgcHJvYmxlbU9uTGlicmFyeTogZmFsc2V9KSB7CiAgICByZXR1cm4gYWRkTWVzc2FnZShtZXNzYWdlLCBjaGFyT2Zmc2V0LCBsZW5ndGgsIGZpbGVVcmksIHNldmVyaXR5LAogICAgICAgIHdhc0hhbmRsZWQ6IHdhc0hhbmRsZWQsCiAgICAgICAgY29udGV4dDogY29udGV4dCwKICAgICAgICBwcm9ibGVtT25MaWJyYXJ5OiBwcm9ibGVtT25MaWJyYXJ5KTsKICB9CgogIC8vLyBBbGwgbWVzc2FnZXMgcmVwb3J0ZWQgYnkgdGhlIGNvbXBpbGVyIChlcnJvcnMsIHdhcm5pbmdzLCBldGMuKSBhcmUgcm91dGVkCiAgLy8vIHRocm91Z2ggdGhpcyBtZXRob2QuCiAgLy8vCiAgLy8vIFJldHVybnMgYSBGb3JtYXR0ZWRNZXNzYWdlIGlmIHRoZSBtZXNzYWdlIGlzIG5ldywgdGhhdCBpcywgbm90IHByZXZpb3VzbHkKICAvLy8gcmVwb3J0ZWQuIFRoaXMgaXMgaW1wb3J0YW50IGFzIHNvbWUgcGFyc2VyIGVycm9ycyBtYXkgYmUgcmVwb3J0ZWQgdXAgdG8KICAvLy8gdGhyZWUgdGltZXMgYnkgYE91dGxpbmVCdWlsZGVyYCwgYERpZXRMaXN0ZW5lcmAsIGFuZCBgQm9keUJ1aWxkZXJgLgogIC8vLyBJZiB0aGUgbWVzc2FnZSBpcyBub3QgbmV3LCBbbnVsbF0gaXMgcmVwb3J0ZWQuCiAgLy8vCiAgLy8vIElmIFtzZXZlcml0eV0gaXMgYFNldmVyaXR5LmVycm9yYCwgdGhlIG1lc3NhZ2UgaXMgYWRkZWQgdG8KICAvLy8gW2hhbmRsZWRFcnJvcnNdIGlmIFt3YXNIYW5kbGVkXSBpcyB0cnVlIG9yIHRvIFt1bmhhbmRsZWRFcnJvcnNdIGlmCiAgLy8vIFt3YXNIYW5kbGVkXSBpcyBmYWxzZS4KICBGb3JtYXR0ZWRNZXNzYWdlIGFkZE1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlLCBpbnQgY2hhck9mZnNldCwgaW50IGxlbmd0aCwKICAgICAgVXJpIGZpbGVVcmksIFNldmVyaXR5IHNldmVyaXR5LAogICAgICB7Ym9vbCB3YXNIYW5kbGVkOiBmYWxzZSwKICAgICAgTGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dCwKICAgICAgYm9vbCBwcm9ibGVtT25MaWJyYXJ5OiBmYWxzZX0pIHsKICAgIHNldmVyaXR5ID0gdGFyZ2V0LmZpeFNldmVyaXR5KHNldmVyaXR5LCBtZXNzYWdlLCBmaWxlVXJpKTsKICAgIGlmIChzZXZlcml0eSA9PSBTZXZlcml0eS5pZ25vcmVkKSByZXR1cm4gbnVsbDsKICAgIFN0cmluZyB0cmFjZSA9ICIiIgptZXNzYWdlOiAke21lc3NhZ2UubWVzc2FnZX0KY2hhck9mZnNldDogJGNoYXJPZmZzZXQKZmlsZVVyaTogJGZpbGVVcmkKc2V2ZXJpdHk6ICRzZXZlcml0eQoiIiI7CiAgICAvLyBUT0RPKGFza2VzYyk6IFN3YXAgbWVzc2FnZSBhbmQgY29udGV4dCBhcm91bmQgZm9yIGludGVyZmFjZSBjaGVja3MKICAgIC8vIGFuZCBtaXhpbiBvdmVycmlkZXMgdG8gbWFrZSBjb21wYXJpbmcgY29udGV4dCBoZXJlIHVubmVjZXNzYXJ5LgogICAgaWYgKGNvbnRleHQgIT0gbnVsbCkgewogICAgICBmb3IgKExvY2F0ZWRNZXNzYWdlIGNvbnRleHRNZXNzYWdlIGluIGNvbnRleHQpIHsKICAgICAgICB0cmFjZSArPSAiIiIKbWVzc2FnZTogJHtjb250ZXh0TWVzc2FnZS5tZXNzYWdlfQpjaGFyT2Zmc2V0OiAke2NvbnRleHRNZXNzYWdlLmNoYXJPZmZzZXR9CmZpbGVVcmk6ICR7Y29udGV4dE1lc3NhZ2UudXJpfQoiIiI7CiAgICAgIH0KICAgIH0KICAgIGlmICghc2Vlbk1lc3NhZ2VzLmFkZCh0cmFjZSkpIHJldHVybiBudWxsOwogICAgaWYgKG1lc3NhZ2UuY29kZS5zZXZlcml0eSA9PSBTZXZlcml0eS5jb250ZXh0KSB7CiAgICAgIGludGVybmFsUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtQ29udGV4dFNldmVyaXR5CiAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMobWVzc2FnZS5jb2RlLm5hbWUpLAogICAgICAgICAgY2hhck9mZnNldCwKICAgICAgICAgIGZpbGVVcmkpOwogICAgfQogICAgdGFyZ2V0LmNvbnRleHQucmVwb3J0KAogICAgICAgIG1lc3NhZ2Uud2l0aExvY2F0aW9uKGZpbGVVcmksIGNoYXJPZmZzZXQsIGxlbmd0aCksIHNldmVyaXR5LAogICAgICAgIGNvbnRleHQ6IGNvbnRleHQpOwogICAgaWYgKHNldmVyaXR5ID09IFNldmVyaXR5LmVycm9yKSB7CiAgICAgICh3YXNIYW5kbGVkID8gaGFuZGxlZEVycm9ycyA6IHVuaGFuZGxlZEVycm9ycykKICAgICAgICAgIC5hZGQobWVzc2FnZS53aXRoTG9jYXRpb24oZmlsZVVyaSwgY2hhck9mZnNldCwgbGVuZ3RoKSk7CiAgICB9CiAgICBGb3JtYXR0ZWRNZXNzYWdlIGZvcm1hdHRlZE1lc3NhZ2UgPSB0YXJnZXQuY3JlYXRlRm9ybWF0dGVkTWVzc2FnZSgKICAgICAgICBtZXNzYWdlLCBjaGFyT2Zmc2V0LCBsZW5ndGgsIGZpbGVVcmksIGNvbnRleHQsIHNldmVyaXR5KTsKICAgIGlmICghcHJvYmxlbU9uTGlicmFyeSkgewogICAgICBhbGxDb21wb25lbnRQcm9ibGVtcy5hZGQoZm9ybWF0dGVkTWVzc2FnZSk7CiAgICB9CiAgICByZXR1cm4gZm9ybWF0dGVkTWVzc2FnZTsKICB9CgogIEJ1aWxkZXIgZ2V0QWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvcigpIHsKICAgIHJldHVybiB0YXJnZXQuZ2V0QWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvcih0aGlzKTsKICB9CgogIEJ1aWxkZXIgZ2V0Q29tcGlsZVRpbWVFcnJvcigpID0+IHRhcmdldC5nZXRDb21waWxlVGltZUVycm9yKHRoaXMpOwoKICBCdWlsZGVyIGdldER1cGxpY2F0ZWRGaWVsZEluaXRpYWxpemVyRXJyb3IoKSB7CiAgICByZXR1cm4gdGFyZ2V0LmdldER1cGxpY2F0ZWRGaWVsZEluaXRpYWxpemVyRXJyb3IodGhpcyk7CiAgfQoKICBCdWlsZGVyIGdldE5hdGl2ZUFubm90YXRpb24oKSA9PiB0YXJnZXQuZ2V0TmF0aXZlQW5ub3RhdGlvbih0aGlzKTsKCiAgQ2xhc3NCdWlsZGVyIGNvbXB1dGVDbGFzc0J1aWxkZXJGcm9tVGFyZ2V0Q2xhc3MoQ2xhc3MgY2xzKTsKCiAgVHlwZUJ1aWxkZXIgY29tcHV0ZVR5cGVCdWlsZGVyKERhcnRUeXBlIHR5cGUpOwoKICBCb2R5QnVpbGRlciBjcmVhdGVCb2R5QnVpbGRlckZvck91dGxpbmVFeHByZXNzaW9uKAogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LAogICAgICBEZWNsYXJhdGlvbkJ1aWxkZXIgZGVjbGFyYXRpb25CdWlsZGVyLAogICAgICBNb2RpZmllckJ1aWxkZXIgbWVtYmVyLAogICAgICBTY29wZSBzY29wZSwKICAgICAgVXJpIGZpbGVVcmkpIHsKICAgIHJldHVybiBuZXcgQm9keUJ1aWxkZXIuZm9yT3V0bGluZUV4cHJlc3Npb24oCiAgICAgICAgbGlicmFyeSwgZGVjbGFyYXRpb25CdWlsZGVyLCBtZW1iZXIsIHNjb3BlLCBmaWxlVXJpKTsKICB9Cn0KgXMATk48ARYBIQElAUABHkQBQwE9ASkBNAEXCRoYERIZEi0wIwE4ASYBPwEiAUoBGEUBTwEvASUBThYGSzNBAVAWBkMXQwFPLUwBNgEeAUtQGAEVASMBFwEmATgBJAFGTCQGTCQGUEtFGi9HPB0nLS8YCB4dHhoXMhk1OEwTARMbTzxREwoINzAwJT4eNisuJkpPOTs7FQ4BN0IBOE8xNTY1Ng4MCggfPTBJMh4IOB8IJCYzCk4gGAgBCEJHFSAbCCQxCE40CCIoCCoWCBxKOAgNRB8eIEdNKQgGFAQBHR84TE9DPiMGBAElITYkMyIIBigrBAEnGStAMSMGKCgEATg5HDs0ClAwSzAIBAE/AUE8AUgpH0AfJBknRiAaLQQBUBsGUE5KNQZBSR1LJh8kJz8zFxwYEhQFSkcbNxUjKR8FCAYvNRcxMRYUBhtFGyY1QwZHQh0yBh0EATE8BAFFATE8BAFFAT4BMQE1Hi0eExUxPgQCASdwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvbG9hZGVyLmRhcnQ7c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2FwaV9wcm90b3R5cGUvZnJvbnRfZW5kLmRhcnSCWy8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gVGhlIERhcnQgRnJvbnQgRW5kIGNvbnRhaW5zIGxvZ2ljIHRvIGJ1aWxkIHN1bW1hcmllcyBhbmQga2VybmVsIHByb2dyYW1zCi8vLyBmcm9tIERhcnQgc291cmNlcy4gVGhlIEFQSXMgZXhwb3NlZCBoZXJlIGFyZSBkZXNpZ25lZCBmb3IgdG9vbHMgaW4gdGhlIERhcnQKLy8vIGVjb3N5c3RlbSB0aGF0IG5lZWQgdG8gbG9hZCBzb3VyY2VzIGFuZCBjb252ZXJ0IHRoZW0gdG8gdGhlc2UgZm9ybWF0cy4KbGlicmFyeSBmcm9udF9lbmQuZnJvbnRfZW5kOwoKZXhwb3J0ICdjb21waWxlcl9vcHRpb25zLmRhcnQnOwpleHBvcnQgJ2tlcm5lbF9nZW5lcmF0b3IuZGFydCc7CmV4cG9ydCAnc3VtbWFyeV9nZW5lcmF0b3IuZGFydCc7CmV4cG9ydCAnZmlsZV9zeXN0ZW0uZGFydCc7Cg8ATk48AU1QSx0BICAhGwEycGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV9wcm90b3R5cGUvZnJvbnRfZW5kLmRhcnRCc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3NjYW5uZXIvYWJzdHJhY3Rfc2Nhbm5lci5kYXJ0wADniC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnNjYW5uZXIuYWJzdHJhY3Rfc2Nhbm5lcjsKCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJyBzaG93IExpc3RNaXhpbjsKCmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJyBzaG93IFVpbnQxNkxpc3QsIFVpbnQzMkxpc3Q7CgppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCcKICAgIHNob3cgQmVnaW5Ub2tlbiwgS2V5d29yZCwgS2V5d29yZFRva2VuLCBTeW50aGV0aWNUb2tlbiwgVG9rZW4sIFRva2VuVHlwZTsKCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JyBhcyBhbmFseXplciBzaG93IFN0cmluZ1Rva2VuOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdwogICAgICAgIG1lc3NhZ2VFeHBlY3RlZEhleERpZ2l0LAogICAgICAgIG1lc3NhZ2VNaXNzaW5nRXhwb25lbnQsCiAgICAgICAgbWVzc2FnZVVuZXhwZWN0ZWREb2xsYXJJblN0cmluZywKICAgICAgICBtZXNzYWdlVW50ZXJtaW5hdGVkQ29tbWVudDsKCmltcG9ydCAnLi4vc2Nhbm5lci5kYXJ0JwogICAgc2hvdyBFcnJvclRva2VuLCBLZXl3b3JkLCBTY2FubmVyLCBidWlsZFVuZXhwZWN0ZWRDaGFyYWN0ZXJUb2tlbjsKCmltcG9ydCAnLi4vdXRpbC9saW5rLmRhcnQnIHNob3cgTGluazsKCmltcG9ydCAnZXJyb3JfdG9rZW4uZGFydCcKICAgIHNob3cKICAgICAgICBOb25Bc2NpaUlkZW50aWZpZXJUb2tlbiwKICAgICAgICBVbm1hdGNoZWRUb2tlbiwKICAgICAgICBVbnN1cHBvcnRlZE9wZXJhdG9yLAogICAgICAgIFVudGVybWluYXRlZFN0cmluZywKICAgICAgICBVbnRlcm1pbmF0ZWRUb2tlbjsKCmltcG9ydCAna2V5d29yZF9zdGF0ZS5kYXJ0JyBzaG93IEtleXdvcmRTdGF0ZTsKCmltcG9ydCAndG9rZW4uZGFydCcKICAgIHNob3cgQ29tbWVudFRva2VuLCBEYXJ0RG9jVG9rZW4sIExhbmd1YWdlVmVyc2lvblRva2VuLCBTdHJpbmdUb2tlbjsKCmltcG9ydCAndG9rZW5fY29uc3RhbnRzLmRhcnQnOwoKaW1wb3J0ICdjaGFyYWN0ZXJzLmRhcnQnOwoKdHlwZWRlZiB2b2lkIExhbmd1YWdlVmVyc2lvbkNoYW5nZWQoCiAgICBTY2FubmVyIHNjYW5uZXIsIExhbmd1YWdlVmVyc2lvblRva2VuIGxhbmd1YWdlVmVyc2lvbik7CgphYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFNjYW5uZXIgaW1wbGVtZW50cyBTY2FubmVyIHsKICAvKioKICAgKiBBIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIGNoYXJhY3RlciBzZXF1ZW5jZXMgYCYmPWAgYW5kIGB8fD1gCiAgICogc2hvdWxkIGJlIHRva2VuaXplZCBhcyB0aGUgYXNzaWdubWVudCBvcGVyYXRvcnMKICAgKiBbQU1QRVJTQU5EX0FNUEVSU0FORF9FUV9UT0tFTl0gYW5kIFtCQVJfQkFSX0VRX1RPS0VOXSByZXNwZWN0aXZlbHkuCiAgICogU2VlIGlzc3VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvc2RrL2lzc3Vlcy8zMDM0MAogICAqLwogIHN0YXRpYyBjb25zdCBib29sIExBWllfQVNTSUdOTUVOVF9FTkFCTEVEID0gZmFsc2U7CgogIGZpbmFsIGJvb2wgaW5jbHVkZUNvbW1lbnRzOwoKICAvLy8gQ2FsbGVkIHdoZW4gdGhlIHNjYW5uZXIgZGV0ZWN0cyBhIGxhbmd1YWdlIHZlcnNpb24gY29tbWVudAogIC8vLyBzbyB0aGF0IHRoZSBsaXN0ZW5lciBjYW4gdXBkYXRlIHRoZSBzY2FubmVyIGNvbmZpZ3VyYXRpb24KICAvLy8gYmFzZWQgdXBvbiB0aGUgc3BlY2lmaWVkIGxhbmd1YWdlIHZlcnNpb24uCiAgZmluYWwgTGFuZ3VhZ2VWZXJzaW9uQ2hhbmdlZCBsYW5ndWFnZVZlcnNpb25DaGFuZ2VkOwoKICAvLy8gRXhwZXJpbWVudGFsIGZsYWcgZm9yIGVuYWJsaW5nIHNjYW5uaW5nIG9mIHRoZSBgZXh0ZW5zaW9uYCB0b2tlbi4KICBib29sIF9lbmFibGVFeHRlbnNpb25NZXRob2RzID0gZmFsc2U7CgogIC8vLyBFeHBlcmltZW50YWwgZmxhZyBmb3IgZW5hYmxpbmcgc2Nhbm5pbmcgb2YgTk5CRCB0b2tlbnMKICAvLy8gc3VjaCBhcyAncmVxdWlyZWQnIGFuZCAnbGF0ZScuCiAgYm9vbCBfZW5hYmxlTm9uTnVsbGFibGUgPSBmYWxzZTsKCiAgLy8vIEV4cGVyaW1lbnRhbCBmbGFnIGZvciBlbmFibGluZyBzY2FubmluZyBvZiBgPj4+YC4KICAvLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvbGFuZ3VhZ2UvaXNzdWVzLzYxCiAgLy8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL2xhbmd1YWdlL2lzc3Vlcy82MAogIGJvb2wgX2VuYWJsZVRyaXBsZVNoaWZ0ID0gZmFsc2U7CgogIC8qKgogICAqIFRoZSBzdHJpbmcgb2Zmc2V0IGZvciB0aGUgbmV4dCB0b2tlbiB0aGF0IHdpbGwgYmUgY3JlYXRlZC4KICAgKgogICAqIE5vdGUgdGhhdCBpbiB0aGUgW1V0ZjhCeXRlc1NjYW5uZXJdLCBbc3RyaW5nT2Zmc2V0XSBhbmQgW3NjYW5PZmZzZXRdIHZhbHVlcwogICAqIGFyZSBkaWZmZXJlbnQuIE9uZSBzdHJpbmcgY2hhcmFjdGVyIGNhbiBiZSBlbmNvZGVkIHVzaW5nIG11bHRpcGxlIFVURi04CiAgICogYnl0ZXMuCiAgICovCiAgaW50IHRva2VuU3RhcnQgPSAtMTsKCiAgLyoqCiAgICogQSBwb2ludGVyIHRvIHRoZSB0b2tlbiBzdHJlYW0gY3JlYXRlZCBieSB0aGlzIHNjYW5uZXIuIFRoZSBmaXJzdCB0b2tlbgogICAqIGlzIGEgc3BlY2lhbCB0b2tlbiBhbmQgbm90IHBhcnQgb2YgdGhlIHNvdXJjZSBmaWxlLiBUaGlzIGlzIGFuCiAgICogaW1wbGVtZW50YXRpb24gZGV0YWlsIHRvIGF2b2lkcyBzcGVjaWFsIGNhc2VzIGluIHRoZSBzY2FubmVyLiBUaGlzIHRva2VuCiAgICogaXMgbm90IGV4cG9zZWQgdG8gY2xpZW50cyBvZiB0aGUgc2Nhbm5lciwgd2hpY2ggYXJlIGV4cGVjdGVkIHRvIGludm9rZQogICAqIFtmaXJzdFRva2VuXSB0byBhY2Nlc3MgdGhlIHRva2VuIHN0cmVhbS4KICAgKi8KICBmaW5hbCBUb2tlbiB0b2tlbnMgPSBuZXcgVG9rZW4uZW9mKC0xKTsKCiAgLyoqCiAgICogQSBwb2ludGVyIHRvIHRoZSBsYXN0IHNjYW5uZWQgdG9rZW4uCiAgICovCiAgVG9rZW4gdGFpbDsKCiAgLyoqCiAgICogQSBwb2ludGVyIHRvIHRoZSBsYXN0IHByZXBlbmRlZCBlcnJvciB0b2tlbi4KICAgKi8KICBUb2tlbiBlcnJvclRhaWw7CgogIGJvb2wgaGFzRXJyb3JzID0gZmFsc2U7CgogIC8qKgogICAqIEEgcG9pbnRlciB0byB0aGUgc3RyZWFtIG9mIGNvbW1lbnQgdG9rZW5zIGNyZWF0ZWQgYnkgdGhpcyBzY2FubmVyCiAgICogYmVmb3JlIHRoZXkgYXJlIGFzc2lnbmVkIHRvIHRoZSBbVG9rZW5dIHByZWNlZGluZ0NvbW1lbnRzIGZpZWxkCiAgICogb2YgYSBub24tY29tbWVudCB0b2tlbi4gQSB2YWx1ZSBvZiBgbnVsbGAgaW5kaWNhdGVzIG5vIGNvbW1lbnQgdG9rZW5zLgogICAqLwogIENvbW1lbnRUb2tlbiBjb21tZW50czsKCiAgLyoqCiAgICogQSBwb2ludGVyIHRvIHRoZSBsYXN0IHNjYW5uZWQgY29tbWVudCB0b2tlbiBvciBgbnVsbGAgaWYgbm9uZS4KICAgKi8KICBUb2tlbiBjb21tZW50c1RhaWw7CgogIGZpbmFsIExpc3Q8aW50PiBsaW5lU3RhcnRzOwoKICAvKioKICAgKiBUaGUgc3RhY2sgb2Ygb3BlbiBncm91cHMsIGUuZyBbOiB7IC4uLiAoIC4uIDpdCiAgICogRWFjaCBCZWdpblRva2VuIGhhcyBhIHBvaW50ZXIgdG8gdGhlIHRva2VuIHdoZXJlIHRoZSBncm91cAogICAqIGVuZHMuIFRoaXMgZmllbGQgaXMgc2V0IHdoZW4gc2Nhbm5pbmcgdGhlIGVuZCBncm91cCB0b2tlbi4KICAgKi8KICBMaW5rPEJlZ2luVG9rZW4+IGdyb3VwaW5nU3RhY2sgPSBjb25zdCBMaW5rPEJlZ2luVG9rZW4+KCk7CgogIEFic3RyYWN0U2Nhbm5lcihTY2FubmVyQ29uZmlndXJhdGlvbiBjb25maWcsIHRoaXMuaW5jbHVkZUNvbW1lbnRzLAogICAgICB0aGlzLmxhbmd1YWdlVmVyc2lvbkNoYW5nZWQsCiAgICAgIHtpbnQgbnVtYmVyT2ZCeXRlc0hpbnR9KQogICAgICA6IGxpbmVTdGFydHMgPSBuZXcgTGluZVN0YXJ0cyhudW1iZXJPZkJ5dGVzSGludCkgewogICAgdGhpcy50YWlsID0gdGhpcy50b2tlbnM7CiAgICB0aGlzLmVycm9yVGFpbCA9IHRoaXMudG9rZW5zOwogICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlnOwogIH0KCiAgQG92ZXJyaWRlCiAgc2V0IGNvbmZpZ3VyYXRpb24oU2Nhbm5lckNvbmZpZ3VyYXRpb24gY29uZmlnKSB7CiAgICBpZiAoY29uZmlnICE9IG51bGwpIHsKICAgICAgX2VuYWJsZUV4dGVuc2lvbk1ldGhvZHMgPSBjb25maWcuZW5hYmxlRXh0ZW5zaW9uTWV0aG9kczsKICAgICAgX2VuYWJsZU5vbk51bGxhYmxlID0gY29uZmlnLmVuYWJsZU5vbk51bGxhYmxlOwogICAgICBfZW5hYmxlVHJpcGxlU2hpZnQgPSBjb25maWcuZW5hYmxlVHJpcGxlU2hpZnQ7CiAgICB9CiAgfQoKICAvKioKICAgKiBBZHZhbmNlcyBhbmQgcmV0dXJucyB0aGUgbmV4dCBjaGFyYWN0ZXIuCiAgICoKICAgKiBJZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaXMgbm9uLUFTQ0lJLCB0aGVuIHRoZSByZXR1cm5lZCB2YWx1ZSBkZXBlbmRzIG9uIHRoZQogICAqIHNjYW5uZXIgaW1wbGVtZW50YXRpb24uIFRoZSBbVXRmOEJ5dGVzU2Nhbm5lcl0gcmV0dXJucyBhIFVURi04IGJ5dGUsIHdoaWxlCiAgICogdGhlIFtTdHJpbmdTY2FubmVyXSByZXR1cm5zIGEgVVRGLTE2IGNvZGUgdW5pdC4KICAgKgogICAqIFRoZSBzY2FubmVyIGVuc3VyZXMgdGhhdCBbYWR2YW5jZV0gaXMgbm90IGludm9rZWQgYWZ0ZXIgaXQgcmV0dXJuZWQgWyRFT0ZdLgogICAqIFRoaXMgYWxsb3dzIGltcGxlbWVudGF0aW9ucyB0byBvbWl0IGJvdW5kIGNoZWNrcyBpZiB0aGUgZGF0YSBzdHJ1Y3R1cmUgZW5kcwogICAqIHdpdGggJzAnLgogICAqLwogIGludCBhZHZhbmNlKCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGN1cnJlbnQgdW5pY29kZSBjaGFyYWN0ZXIuCiAgICoKICAgKiBJZiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgaXMgQVNDSUksIHRoZW4gaXQgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLgogICAqCiAgICogVGhlIFtVdGY4Qnl0ZXNTY2FubmVyXSBkZWNvZGVzIHRoZSBuZXh0IHVuaWNvZGUgY29kZSBwb2ludCBzdGFydGluZyBhdCB0aGUKICAgKiBjdXJyZW50IHBvc2l0aW9uLiBOb3RlIHRoYXQgZXZlcnkgdW5pY29kZSBjaGFyYWN0ZXIgaXMgcmV0dXJuZWQgYXMgYSBzaW5nbGUKICAgKiBjb2RlIHBvaW50LCB0aGF0IGlzLCBmb3IgJ1x1ezFkMTFlfScgaXQgcmV0dXJucyAxMTkwNzAsIGFuZCB0aGUgZm9sbG93aW5nCiAgICogW2FkdmFuY2VdIHJldHVybnMgdGhlIG5leHQgY2hhcmFjdGVyLgogICAqCiAgICogVGhlIFtTdHJpbmdTY2FubmVyXSByZXR1cm5zIHRoZSBjdXJyZW50IGNoYXJhY3RlciB1bmNoYW5nZWQsIHdoaWNoIG1pZ2h0CiAgICogYmUgYSBzdXJyb2dhdGUgY2hhcmFjdGVyLiBJbiB0aGUgY2FzZSBvZiAnXHV7MWQxMWV9JywgaXQgcmV0dXJucyB0aGUgZmlyc3QKICAgKiBjb2RlIHVuaXQgNTUzNDgsIGFuZCB0aGUgZm9sbG93aW5nIFthZHZhbmNlXSByZXR1cm5zIHRoZSBzZWNvbmQgY29kZSB1bml0CiAgICogNTY2MDYuCiAgICoKICAgKiBJbnZva2luZyBbY3VycmVudEFzVW5pY29kZV0gbXVsdGlwbGUgdGltZXMgaXMgc2FmZSwgaS5lLiwKICAgKiBbOmN1cnJlbnRBc1VuaWNvZGUobmV4dCkgPT0gY3VycmVudEFzVW5pY29kZShjdXJyZW50QXNVbmljb2RlKG5leHQpKTpdLgogICAqLwogIGludCBjdXJyZW50QXNVbmljb2RlKGludCBuZXh0KTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgY2hhcmFjdGVyIGF0IHRoZSBuZXh0IHBvc2l0aW9uLiBMaWtlIGluIFthZHZhbmNlXSwgdGhlCiAgICogW1V0ZjhCeXRlc1NjYW5uZXJdIHJldHVybnMgYSBVVEYtOCBieXRlLCB3aGlsZSB0aGUgW1N0cmluZ1NjYW5uZXJdIHJldHVybnMKICAgKiBhIFVURi0xNiBjb2RlIHVuaXQuCiAgICovCiAgaW50IHBlZWsoKTsKCiAgLyoqCiAgICogTm90aWZpZXMgdGhlIHNjYW5uZXIgdGhhdCB1bmljb2RlIGNoYXJhY3RlcnMgd2VyZSBkZXRlY3RlZCBpbiBlaXRoZXIgYQogICAqIGNvbW1lbnQgb3IgYSBzdHJpbmcgbGl0ZXJhbCBiZXR3ZWVuIFtzdGFydFNjYW5PZmZzZXRdIGFuZCB0aGUgY3VycmVudAogICAqIHNjYW4gb2Zmc2V0LgogICAqLwogIHZvaWQgaGFuZGxlVW5pY29kZShpbnQgc3RhcnRTY2FuT2Zmc2V0KTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgY3VycmVudCBzY2FuIG9mZnNldC4KICAgKgogICAqIEluIHRoZSBbVXRmOEJ5dGVzU2Nhbm5lcl0gdGhpcyBpcyB0aGUgb2Zmc2V0IGludG8gdGhlIGJ5dGUgbGlzdCwgaW4gdGhlCiAgICogW1N0cmluZ1NjYW5uZXJdIHRoZSBvZmZzZXQgaW4gdGhlIHNvdXJjZSBzdHJpbmcuCiAgICovCiAgaW50IGdldCBzY2FuT2Zmc2V0OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN0cmluZyBvZmZzZXQuCiAgICoKICAgKiBJbiB0aGUgW1N0cmluZ1NjYW5uZXJdIHRoaXMgaXMgaWRlbnRpY2FsIHRvIHRoZSBbc2Nhbk9mZnNldF0uIEluIHRoZQogICAqIFtVdGY4Qnl0ZXNTY2FubmVyXSBpdCBpcyBjb21wdXRlZCBiYXNlZCBvbiBlbmNvdW50ZXJlZCBVVEYtOCBjaGFyYWN0ZXJzLgogICAqLwogIGludCBnZXQgc3RyaW5nT2Zmc2V0OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBmaXJzdCB0b2tlbiBzY2FubmVkIGJ5IHRoaXMgW1NjYW5uZXJdLgogICAqLwogIFRva2VuIGZpcnN0VG9rZW4oKSA9PiB0b2tlbnMubmV4dDsKCiAgLyoqCiAgICogTm90aWZpZXMgdGhhdCBhIG5ldyB0b2tlbiBzdGFydHMgYXQgY3VycmVudCBvZmZzZXQuCiAgICovCiAgdm9pZCBiZWdpblRva2VuKCkgewogICAgdG9rZW5TdGFydCA9IHN0cmluZ09mZnNldDsKICB9CgogIC8qKgogICAqIEFwcGVuZHMgYSBzdWJzdHJpbmcgZnJvbSB0aGUgc2NhbiBvZmZzZXQgWzpzdGFydDpdIHRvIHRoZSBjdXJyZW50CiAgICogWzpzY2FuT2Zmc2V0Ol0gcGx1cyB0aGUgWzpleHRyYU9mZnNldDpdLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGN1cnJlbnQKICAgKiBzY2FuT2Zmc2V0IGlzIDEwLCB0aGVuIFs6YXBwZW5kU3Vic3RyaW5nVG9rZW4oNSwgLTEpOl0gd2lsbCBhcHBlbmQgdGhlCiAgICogc3Vic3RyaW5nIHN0cmluZyBbNSw5KS4KICAgKgogICAqIE5vdGUgdGhhdCBbZXh0cmFPZmZzZXRdIGNhbiBvbmx5IGJlIHVzZWQgaWYgdGhlIGNvdmVyZWQgY2hhcmFjdGVyKHMpIGFyZQogICAqIGtub3duIHRvIGJlIEFTQ0lJLgogICAqLwogIHZvaWQgYXBwZW5kU3Vic3RyaW5nVG9rZW4oVG9rZW5UeXBlIHR5cGUsIGludCBzdGFydCwgYm9vbCBhc2NpaU9ubHksCiAgICAgIFtpbnQgZXh0cmFPZmZzZXQgPSAwXSkgewogICAgYXBwZW5kVG9rZW4oY3JlYXRlU3Vic3RyaW5nVG9rZW4odHlwZSwgc3RhcnQsIGFzY2lpT25seSwgZXh0cmFPZmZzZXQpKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgc3Vic3RyaW5nIGZyb20gdGhlIHNjYW4gb2Zmc2V0IFtzdGFydF0gdG8gdGhlIGN1cnJlbnQKICAgKiBbc2Nhbk9mZnNldF0gcGx1cyB0aGUgW2V4dHJhT2Zmc2V0XS4gRm9yIGV4YW1wbGUsIGlmIHRoZSBjdXJyZW50CiAgICogc2Nhbk9mZnNldCBpcyAxMCwgdGhlbiBbYXBwZW5kU3Vic3RyaW5nVG9rZW4oNSwgLTEpXSB3aWxsIGFwcGVuZCB0aGUKICAgKiBzdWJzdHJpbmcgc3RyaW5nIFs1LDkpLgogICAqCiAgICogTm90ZSB0aGF0IFtleHRyYU9mZnNldF0gY2FuIG9ubHkgYmUgdXNlZCBpZiB0aGUgY292ZXJlZCBjaGFyYWN0ZXIocykgYXJlCiAgICoga25vd24gdG8gYmUgQVNDSUkuCiAgICovCiAgYW5hbHl6ZXIuU3RyaW5nVG9rZW4gY3JlYXRlU3Vic3RyaW5nVG9rZW4oCiAgICAgIFRva2VuVHlwZSB0eXBlLCBpbnQgc3RhcnQsIGJvb2wgYXNjaWlPbmx5LAogICAgICBbaW50IGV4dHJhT2Zmc2V0ID0gMF0pOwoKICAvKioKICAgKiBBcHBlbmRzIGEgc3Vic3RyaW5nIGZyb20gdGhlIHNjYW4gb2Zmc2V0IFtzdGFydF0gdG8gdGhlIGN1cnJlbnQKICAgKiBbc2Nhbk9mZnNldF0gcGx1cyBbc3ludGhldGljQ2hhcnNdLiBUaGUgYWRkaXRpb25hbCBjaGFyKHMpIHdpbGwgYmUgYWRkZWQKICAgKiB0byB0aGUgdW50ZXJtaW5hdGVkIHN0cmluZyBsaXRlcmFsJ3MgbGV4ZW1lIGJ1dCB0aGUgcmV0dXJuZWQKICAgKiB0b2tlbidzIGxlbmd0aCB3aWxsICpub3QqIGluY2x1ZGUgdGhvc2UgYWRkaXRpb25hbCBjaGFyKHMpCiAgICogc28gYXMgdG8gYmUgdHJ1ZSB0byB0aGUgb3JpZ2luYWwgc291cmNlLgogICAqLwogIHZvaWQgYXBwZW5kU3ludGhldGljU3Vic3RyaW5nVG9rZW4oCiAgICAgIFRva2VuVHlwZSB0eXBlLCBpbnQgc3RhcnQsIGJvb2wgYXNjaWlPbmx5LCBTdHJpbmcgc3ludGhldGljQ2hhcnMpIHsKICAgIGFwcGVuZFRva2VuKAogICAgICAgIGNyZWF0ZVN5bnRoZXRpY1N1YnN0cmluZ1Rva2VuKHR5cGUsIHN0YXJ0LCBhc2NpaU9ubHksIHN5bnRoZXRpY0NoYXJzKSk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IHN5bnRoZXRpYyBzdWJzdHJpbmcgZnJvbSB0aGUgc2NhbiBvZmZzZXQgW3N0YXJ0XQogICAqIHRvIHRoZSBjdXJyZW50IFtzY2FuT2Zmc2V0XSBwbHVzIHRoZSBbc3ludGhldGljQ2hhcnNdLgogICAqIFRoZSBbc3ludGhldGljQ2hhcnNdIGFyZSBhcHBlbmRlZCB0byB0aGUgdW50ZXJtaW5hdGVkIHN0cmluZwogICAqIGxpdGVyYWwncyBsZXhlbWUgYnV0IHRoZSByZXR1cm5lZCB0b2tlbidzIGxlbmd0aCB3aWxsICpub3QqIGluY2x1ZGUKICAgKiB0aG9zZSBhZGRpdGlvbmFsIGNoYXJhY3RlcnMgc28gYXMgdG8gYmUgdHJ1ZSB0byB0aGUgb3JpZ2luYWwgc291cmNlLgogICAqLwogIGFuYWx5emVyLlN0cmluZ1Rva2VuIGNyZWF0ZVN5bnRoZXRpY1N1YnN0cmluZ1Rva2VuKAogICAgICBUb2tlblR5cGUgdHlwZSwgaW50IHN0YXJ0LCBib29sIGFzY2lpT25seSwgU3RyaW5nIHN5bnRoZXRpY0NoYXJzKTsKICAvKioKICAgKiBBcHBlbmRzIGEgZml4ZWQgdG9rZW4gd2hvc2Uga2luZCBhbmQgY29udGVudCBpcyBkZXRlcm1pbmVkIGJ5IFt0eXBlXS4KICAgKiBBcHBlbmRzIGFuICpvcGVyYXRvciogdG9rZW4gZnJvbSBbdHlwZV0uCiAgICoKICAgKiBBbiBvcGVyYXRvciB0b2tlbiByZXByZXNlbnQgb3BlcmF0b3JzIGxpa2UgJzonLCAnLicsICc7JywgJyYmJywgJz09JywgJy0tJywKICAgKiAnPT4nLCBldGMuCiAgICovCiAgdm9pZCBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlIHR5cGUpIHsKICAgIGFwcGVuZFRva2VuKG5ldyBUb2tlbih0eXBlLCB0b2tlblN0YXJ0LCBjb21tZW50cykpOwogIH0KCiAgLyoqCiAgICogQXBwZW5kcyBhIGZpeGVkIHRva2VuIGJhc2VkIG9uIHdoZXRoZXIgdGhlIGN1cnJlbnQgY2hhciBpcyBbY2hvaWNlXSBvciBub3QuCiAgICogSWYgdGhlIGN1cnJlbnQgY2hhciBpcyBbY2hvaWNlXSBhIGZpeGVkIHRva2VuIHdob3NlIGtpbmQgYW5kIGNvbnRlbnQKICAgKiBpcyBkZXRlcm1pbmVkIGJ5IFt5ZXNdIGlzIGFwcGVuZGVkLCBvdGhlcndpc2UgYSBmaXhlZCB0b2tlbiB3aG9zZSBraW5kCiAgICogYW5kIGNvbnRlbnQgaXMgZGV0ZXJtaW5lZCBieSBbbm9dIGlzIGFwcGVuZGVkLgogICAqLwogIGludCBzZWxlY3QoaW50IGNob2ljZSwgVG9rZW5UeXBlIHllcywgVG9rZW5UeXBlIG5vKSB7CiAgICBpbnQgbmV4dCA9IGFkdmFuY2UoKTsKICAgIGlmIChpZGVudGljYWwobmV4dCwgY2hvaWNlKSkgewogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oeWVzKTsKICAgICAgcmV0dXJuIGFkdmFuY2UoKTsKICAgIH0gZWxzZSB7CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihubyk7CiAgICAgIHJldHVybiBuZXh0OwogICAgfQogIH0KCiAgLyoqCiAgICogQXBwZW5kcyBhIGtleXdvcmQgdG9rZW4gd2hvc2Uga2luZCBpcyBkZXRlcm1pbmVkIGJ5IFtrZXl3b3JkXS4KICAgKi8KICB2b2lkIGFwcGVuZEtleXdvcmRUb2tlbihLZXl3b3JkIGtleXdvcmQpIHsKICAgIFN0cmluZyBzeW50YXggPSBrZXl3b3JkLmxleGVtZTsKICAgIC8vIFR5cGUgcGFyYW1ldGVycyBhbmQgYXJndW1lbnRzIGNhbm5vdCBjb250YWluICd0aGlzJy4KICAgIGlmIChpZGVudGljYWwoc3ludGF4LCAndGhpcycpKSB7CiAgICAgIGRpc2NhcmRPcGVuTHQoKTsKICAgIH0KICAgIGFwcGVuZFRva2VuKG5ldyBLZXl3b3JkVG9rZW4oa2V5d29yZCwgdG9rZW5TdGFydCwgY29tbWVudHMpKTsKICB9CgogIHZvaWQgYXBwZW5kRW9mVG9rZW4oKSB7CiAgICBiZWdpblRva2VuKCk7CiAgICBkaXNjYXJkT3Blbkx0KCk7CiAgICB3aGlsZSAoIWdyb3VwaW5nU3RhY2suaXNFbXB0eSkgewogICAgICB1bm1hdGNoZWRCZWdpbkdyb3VwKGdyb3VwaW5nU3RhY2suaGVhZCk7CiAgICAgIGdyb3VwaW5nU3RhY2sgPSBncm91cGluZ1N0YWNrLnRhaWw7CiAgICB9CiAgICBhcHBlbmRUb2tlbihuZXcgVG9rZW4uZW9mKHRva2VuU3RhcnQsIGNvbW1lbnRzKSk7CiAgfQoKICAvKioKICAgKiBOb3RpZmllcyBzY2FubmluZyBhIHdoaXRlc3BhY2UgY2hhcmFjdGVyLiBOb3RlIHRoYXQgW2FwcGVuZFdoaXRlU3BhY2VdIGlzCiAgICogbm90IGFsd2F5cyBpbnZva2VkIGZvciBbJFNQQUNFXSBjaGFyYWN0ZXJzLgogICAqCiAgICogVGhpcyBtZXRob2QgaXMgdXNlZCBieSB0aGUgc2Nhbm5lcnMgdG8gdHJhY2sgbGluZSBicmVha3MgYW5kIGNyZWF0ZSB0aGUKICAgKiBbbGluZVN0YXJ0c10gbWFwLgogICAqLwogIHZvaWQgYXBwZW5kV2hpdGVTcGFjZShpbnQgbmV4dCkgewogICAgaWYgKG5leHQgPT0gJExGKSB7CiAgICAgIGxpbmVTdGFydHMuYWRkKHN0cmluZ09mZnNldCArIDEpOyAvLyArMSwgdGhlIGxpbmUgc3RhcnRzIGFmdGVyIHRoZSAkTEYuCiAgICB9CiAgfQoKICAvKioKICAgKiBOb3RpZmllcyBvbiBbJExGXSBjaGFyYWN0ZXJzIGluIG11bHRpLWxpbmUgY29tbWVudHMgb3Igc3RyaW5ncy4KICAgKgogICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgdGhlIHNjYW5uZXJzIHRvIHRyYWNrIGxpbmUgYnJlYWtzIGFuZCBjcmVhdGUgdGhlCiAgICogW2xpbmVTdGFydHNdIG1hcC4KICAgKi8KICB2b2lkIGxpbmVGZWVkSW5NdWx0aWxpbmUoKSB7CiAgICBsaW5lU3RhcnRzLmFkZChzdHJpbmdPZmZzZXQgKyAxKTsKICB9CgogIC8qKgogICAqIEFwcGVuZHMgYSB0b2tlbiB0aGF0IGJlZ2lucyBhIG5ldyBncm91cCwgcmVwcmVzZW50ZWQgYnkgW3R5cGVdLgogICAqIEdyb3VwIGJlZ2luIHRva2VucyBhcmUgJ3snLCAnKCcsICdbJywgJzwnIGFuZCAnJHsnLgogICAqLwogIHZvaWQgYXBwZW5kQmVnaW5Hcm91cChUb2tlblR5cGUgdHlwZSkgewogICAgVG9rZW4gdG9rZW4gPSBuZXcgQmVnaW5Ub2tlbih0eXBlLCB0b2tlblN0YXJ0LCBjb21tZW50cyk7CiAgICBhcHBlbmRUb2tlbih0b2tlbik7CgogICAgLy8geyBbICR7IGNhbm5vdCBhcHBlYXIgaW5zaWRlIGEgdHlwZSBwYXJhbWV0ZXJzIC8gYXJndW1lbnRzLgogICAgaWYgKCFpZGVudGljYWwodHlwZS5raW5kLCBMVF9UT0tFTikgJiYKICAgICAgICAhaWRlbnRpY2FsKHR5cGUua2luZCwgT1BFTl9QQVJFTl9UT0tFTikpIHsKICAgICAgZGlzY2FyZE9wZW5MdCgpOwogICAgfQogICAgZ3JvdXBpbmdTdGFjayA9IGdyb3VwaW5nU3RhY2sucHJlcGVuZCh0b2tlbik7CiAgfQoKICAvKioKICAgKiBBcHBlbmRzIGEgdG9rZW4gdGhhdCBiZWdpbnMgYW4gZW5kIGdyb3VwLCByZXByZXNlbnRlZCBieSBbdHlwZV0uCiAgICogSXQgaGFuZGxlcyB0aGUgZ3JvdXAgZW5kIHRva2VucyAnfScsICcpJyBhbmQgJ10nLiBUaGUgdG9rZW5zICc+JyBhbmQKICAgKiAnPj4nIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkgYnkgW2FwcGVuZEd0XSBhbmQgW2FwcGVuZEd0R3RdLgogICAqLwogIGludCBhcHBlbmRFbmRHcm91cChUb2tlblR5cGUgdHlwZSwgaW50IG9wZW5LaW5kKSB7CiAgICBhc3NlcnQoIWlkZW50aWNhbChvcGVuS2luZCwgTFRfVE9LRU4pKTsgLy8gb3BlbktpbmQgaXMgPCBmb3IgPiBhbmQgPj4KICAgIGlmICghZGlzY2FyZEJlZ2luR3JvdXBVbnRpbChvcGVuS2luZCkpIHsKICAgICAgLy8gTm8gYmVnaW4gZ3JvdXAgZm91bmQuIEp1c3QgY29udGludWUuCiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbih0eXBlKTsKICAgICAgcmV0dXJuIGFkdmFuY2UoKTsKICAgIH0KICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbih0eXBlKTsKICAgIFRva2VuIGNsb3NlID0gdGFpbDsKICAgIEJlZ2luVG9rZW4gYmVnaW4gPSBncm91cGluZ1N0YWNrLmhlYWQ7CiAgICBpZiAoIWlkZW50aWNhbChiZWdpbi5raW5kLCBvcGVuS2luZCkgJiYKICAgICAgICAhKGJlZ2luLmtpbmQgPT0gUVVFU1RJT05fUEVSSU9EX09QRU5fU1FVQVJFX0JSQUNLRVRfVE9LRU4gJiYKICAgICAgICAgICAgb3BlbktpbmQgPT0gT1BFTl9TUVVBUkVfQlJBQ0tFVF9UT0tFTikpIHsKICAgICAgYXNzZXJ0KGJlZ2luLmtpbmQgPT0gU1RSSU5HX0lOVEVSUE9MQVRJT05fVE9LRU4gJiYKICAgICAgICAgIG9wZW5LaW5kID09IE9QRU5fQ1VSTFlfQlJBQ0tFVF9UT0tFTik7CiAgICAgIC8vIFdlJ3JlIGVuZGluZyBhbiBpbnRlcnBvbGF0ZWQgZXhwcmVzc2lvbi4KICAgICAgYmVnaW4uZW5kR3JvdXAgPSBjbG9zZTsKICAgICAgZ3JvdXBpbmdTdGFjayA9IGdyb3VwaW5nU3RhY2sudGFpbDsKICAgICAgLy8gVXNpbmcgInN0YXJ0LW9mLXRleHQiIHRvIHNpZ25hbCB0aGF0IHdlJ3JlIGJhY2sgaW4gc3RyaW5nCiAgICAgIC8vIHNjYW5uaW5nIG1vZGUuCiAgICAgIHJldHVybiAkU1RYOwogICAgfQogICAgYmVnaW4uZW5kR3JvdXAgPSBjbG9zZTsKICAgIGdyb3VwaW5nU3RhY2sgPSBncm91cGluZ1N0YWNrLnRhaWw7CiAgICByZXR1cm4gYWR2YW5jZSgpOwogIH0KCiAgLyoqCiAgICogQXBwZW5kcyBhIHRva2VuIGZvciAnPicuCiAgICogVGhpcyBtZXRob2QgZG9lcyBub3QgaXNzdWUgdW5tYXRjaGVkIGVycm9ycywgYmVjYXVzZSA+IGlzIGFsc28gdGhlCiAgICogZ3JlYXRlci10aGFuIG9wZXJhdG9yLiBJdCBkb2VzIG5vdCBuZWNlc3NhcmlseSBoYXZlIHRvIGNsb3NlIGEgZ3JvdXAuCiAgICovCiAgdm9pZCBhcHBlbmRHdChUb2tlblR5cGUgdHlwZSkgewogICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKHR5cGUpOwogICAgaWYgKGdyb3VwaW5nU3RhY2suaXNFbXB0eSkgcmV0dXJuOwogICAgaWYgKGlkZW50aWNhbChncm91cGluZ1N0YWNrLmhlYWQua2luZCwgTFRfVE9LRU4pKSB7CiAgICAgIGdyb3VwaW5nU3RhY2suaGVhZC5lbmRHcm91cCA9IHRhaWw7CiAgICAgIGdyb3VwaW5nU3RhY2sgPSBncm91cGluZ1N0YWNrLnRhaWw7CiAgICB9CiAgfQoKICAvKioKICAgKiBBcHBlbmRzIGEgdG9rZW4gZm9yICc+PicuCiAgICogVGhpcyBtZXRob2QgZG9lcyBub3QgaXNzdWUgdW5tYXRjaGVkIGVycm9ycywgYmVjYXVzZSA+PiBpcyBhbHNvIHRoZQogICAqIHNoaWZ0IG9wZXJhdG9yLiBJdCBkb2VzIG5vdCBuZWNlc3NhcmlseSBoYXZlIHRvIGNsb3NlIGEgZ3JvdXAuCiAgICovCiAgdm9pZCBhcHBlbmRHdEd0KFRva2VuVHlwZSB0eXBlKSB7CiAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4odHlwZSk7CiAgICBpZiAoZ3JvdXBpbmdTdGFjay5pc0VtcHR5KSByZXR1cm47CiAgICBpZiAoaWRlbnRpY2FsKGdyb3VwaW5nU3RhY2suaGVhZC5raW5kLCBMVF9UT0tFTikpIHsKICAgICAgLy8gRG9uJ3QgYXNzaWduIGVuZEdyb3VwOiBpbiAiVDxVPFY+PiIsIHRoZSAnPj4nIHRva2VuIGNsb3NlcyB0aGUgb3V0ZXIKICAgICAgLy8gJzwnLCB0aGUgaW5uZXIgJzwnIGlzIGxlZnQgd2l0aG91dCBlbmRHcm91cC4KICAgICAgZ3JvdXBpbmdTdGFjayA9IGdyb3VwaW5nU3RhY2sudGFpbDsKICAgIH0KICAgIGlmIChncm91cGluZ1N0YWNrLmlzRW1wdHkpIHJldHVybjsKICAgIGlmIChpZGVudGljYWwoZ3JvdXBpbmdTdGFjay5oZWFkLmtpbmQsIExUX1RPS0VOKSkgewogICAgICBncm91cGluZ1N0YWNrLmhlYWQuZW5kR3JvdXAgPSB0YWlsOwogICAgICBncm91cGluZ1N0YWNrID0gZ3JvdXBpbmdTdGFjay50YWlsOwogICAgfQogIH0KCiAgLy8vIFByZXBlbmQgW3Rva2VuXSB0byB0aGUgdG9rZW4gc3RyZWFtLgogIHZvaWQgcHJlcGVuZEVycm9yVG9rZW4oRXJyb3JUb2tlbiB0b2tlbikgewogICAgaGFzRXJyb3JzID0gdHJ1ZTsKICAgIGlmIChlcnJvclRhaWwgPT0gdGFpbCkgewogICAgICBhcHBlbmRUb2tlbih0b2tlbik7CiAgICAgIGVycm9yVGFpbCA9IHRhaWw7CiAgICB9IGVsc2UgewogICAgICB0b2tlbi5uZXh0ID0gZXJyb3JUYWlsLm5leHQ7CiAgICAgIHRva2VuLm5leHQucHJldmlvdXMgPSB0b2tlbjsKICAgICAgZXJyb3JUYWlsLm5leHQgPSB0b2tlbjsKICAgICAgdG9rZW4ucHJldmlvdXMgPSBlcnJvclRhaWw7CiAgICAgIGVycm9yVGFpbCA9IGVycm9yVGFpbC5uZXh0OwogICAgfQogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBjb21tZW50IGZyb20gdGhlIHNjYW4gb2Zmc2V0IFtzdGFydF0gdG8gdGhlIGN1cnJlbnQKICAgKiBbc2Nhbk9mZnNldF0gcGx1cyB0aGUgW2V4dHJhT2Zmc2V0XS4gRm9yIGV4YW1wbGUsIGlmIHRoZSBjdXJyZW50CiAgICogc2Nhbk9mZnNldCBpcyAxMCwgdGhlbiBbYXBwZW5kU3Vic3RyaW5nVG9rZW4oNSwgLTEpXSB3aWxsIGFwcGVuZCB0aGUKICAgKiBzdWJzdHJpbmcgc3RyaW5nIFs1LDkpLgogICAqCiAgICogTm90ZSB0aGF0IFtleHRyYU9mZnNldF0gY2FuIG9ubHkgYmUgdXNlZCBpZiB0aGUgY292ZXJlZCBjaGFyYWN0ZXIocykgYXJlCiAgICoga25vd24gdG8gYmUgQVNDSUkuCiAgICovCiAgQ29tbWVudFRva2VuIGNyZWF0ZUNvbW1lbnRUb2tlbihUb2tlblR5cGUgdHlwZSwgaW50IHN0YXJ0LCBib29sIGFzY2lpT25seSwKICAgICAgW2ludCBleHRyYU9mZnNldCA9IDBdKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBkYXJ0ZG9jIGZyb20gdGhlIHNjYW4gb2Zmc2V0IFtzdGFydF0gdG8gdGhlIGN1cnJlbnQKICAgKiBbc2Nhbk9mZnNldF0gcGx1cyB0aGUgW2V4dHJhT2Zmc2V0XS4gRm9yIGV4YW1wbGUsIGlmIHRoZSBjdXJyZW50CiAgICogc2Nhbk9mZnNldCBpcyAxMCwgdGhlbiBbYXBwZW5kU3Vic3RyaW5nVG9rZW4oNSwgLTEpXSB3aWxsIGFwcGVuZCB0aGUKICAgKiBzdWJzdHJpbmcgc3RyaW5nIFs1LDkpLgogICAqCiAgICogTm90ZSB0aGF0IFtleHRyYU9mZnNldF0gY2FuIG9ubHkgYmUgdXNlZCBpZiB0aGUgY292ZXJlZCBjaGFyYWN0ZXIocykgYXJlCiAgICoga25vd24gdG8gYmUgQVNDSUkuCiAgICovCiAgRGFydERvY1Rva2VuIGNyZWF0ZURhcnREb2NUb2tlbihUb2tlblR5cGUgdHlwZSwgaW50IHN0YXJ0LCBib29sIGFzY2lpT25seSwKICAgICAgW2ludCBleHRyYU9mZnNldCA9IDBdKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBsYW5ndWFnZSB2ZXJzaW9uIHRva2VuIGZyb20gdGhlIHNjYW4gb2Zmc2V0IFtzdGFydF0KICAgKiB0byB0aGUgY3VycmVudCBbc2Nhbk9mZnNldF0gc2ltaWxhciB0byBjcmVhdGVDb21tZW50VG9rZW4uCiAgICovCiAgTGFuZ3VhZ2VWZXJzaW9uVG9rZW4gY3JlYXRlTGFuZ3VhZ2VWZXJzaW9uVG9rZW4oCiAgICAgIGludCBzdGFydCwgaW50IG1ham9yLCBpbnQgbWlub3IpOwoKICAvKioKICAgKiBJZiBhIGJlZ2luIGdyb3VwIHRva2VuIG1hdGNoZXMgW29wZW5LaW5kXSwKICAgKiB0aGVuIGRpc2NhcmQgYmVnaW4gZ3JvdXAgdG9rZW5zIHVwIHRvIHRoYXQgbWF0Y2ggYW5kIHJldHVybiBgdHJ1ZWAsCiAgICogb3RoZXJ3aXNlIHJldHVybiBgZmFsc2VgLgogICAqIFRoaXMgcmVjb3ZlcnMgbmljZWx5IGZyb20gZnJvbSBzaXR1YXRpb25zIGxpa2UgIntbfSIgYW5kICJ7Zm9vKCkpO30iLAogICAqIGJ1dCBub3QgImZvbygoKSB7YmFyKCkpO30pOwogICAqLwogIGJvb2wgZGlzY2FyZEJlZ2luR3JvdXBVbnRpbChpbnQgb3BlbktpbmQpIHsKICAgIExpbms8QmVnaW5Ub2tlbj4gb3JpZ2luYWxTdGFjayA9IGdyb3VwaW5nU3RhY2s7CgogICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICBkbyB7CiAgICAgIC8vIERvbid0IHJlcG9ydCB1bm1hdGNoZWQgZXJyb3JzIGZvciA8OyBpdCBpcyBhbHNvIHRoZSBsZXNzLXRoYW4gb3BlcmF0b3IuCiAgICAgIGRpc2NhcmRPcGVuTHQoKTsKICAgICAgaWYgKGdyb3VwaW5nU3RhY2suaXNFbXB0eSkgYnJlYWs7IC8vIHJlY292ZXIKICAgICAgQmVnaW5Ub2tlbiBiZWdpbiA9IGdyb3VwaW5nU3RhY2suaGVhZDsKICAgICAgaWYgKG9wZW5LaW5kID09IGJlZ2luLmtpbmQgfHwKICAgICAgICAgIChvcGVuS2luZCA9PSBPUEVOX0NVUkxZX0JSQUNLRVRfVE9LRU4gJiYKICAgICAgICAgICAgICBiZWdpbi5raW5kID09IFNUUklOR19JTlRFUlBPTEFUSU9OX1RPS0VOKSB8fAogICAgICAgICAgKG9wZW5LaW5kID09IE9QRU5fU1FVQVJFX0JSQUNLRVRfVE9LRU4gJiYKICAgICAgICAgICAgICBiZWdpbi5raW5kID09IFFVRVNUSU9OX1BFUklPRF9PUEVOX1NRVUFSRV9CUkFDS0VUX1RPS0VOKSkgewogICAgICAgIGlmIChmaXJzdCkgewogICAgICAgICAgLy8gSWYgdGhlIGV4cGVjdGVkIG9wZW5lciBoYXMgYmVlbiBmb3VuZCBvbiB0aGUgZmlyc3QgcGFzcwogICAgICAgICAgLy8gdGhlbiBubyByZWNvdmVyeSBuZWNlc3NhcnkuCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7IC8vIHJlY292ZXIKICAgICAgfQogICAgICBmaXJzdCA9IGZhbHNlOwogICAgICBncm91cGluZ1N0YWNrID0gZ3JvdXBpbmdTdGFjay50YWlsOwogICAgfSB3aGlsZSAoIWdyb3VwaW5nU3RhY2suaXNFbXB0eSk7CgogICAgLy8gSWYgdGhlIHN0YWNrIGRvZXMgbm90IGhhdmUgYW55IG9wZW5lciBvZiB0aGUgZ2l2ZW4gdHlwZSwKICAgIC8vIHRoZW4gcmV0dXJuIHdpdGhvdXQgZGlzY2FyZGluZyBhbnl0aGluZy4KICAgIC8vIFRoaXMgcmVjb3ZlcnMgbmljZWx5IGZyb20gZnJvbSBzaXR1YXRpb25zIGxpa2UgIntmb28oKSk7fSIuCiAgICBpZiAoZ3JvdXBpbmdTdGFjay5pc0VtcHR5KSB7CiAgICAgIGdyb3VwaW5nU3RhY2sgPSBvcmlnaW5hbFN0YWNrOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLy8gSW5zZXJ0IHN5bnRoZXRpYyBjbG9zZXJzIGFuZCByZXBvcnQgZXJyb3JzIGZvciBhbnkgdW5iYWxhbmNlZCBvcGVuZXJzLgogICAgLy8gVGhpcyByZWNvdmVycyBuaWNlbHkgZnJvbSBmcm9tIHNpdHVhdGlvbnMgbGlrZSAie1t9Ii4KICAgIHdoaWxlICghaWRlbnRpY2FsKG9yaWdpbmFsU3RhY2ssIGdyb3VwaW5nU3RhY2spKSB7CiAgICAgIC8vIERvbid0IHJlcG9ydCB1bm1hdGNoZWQgZXJyb3JzIGZvciA8OyBpdCBpcyBhbHNvIHRoZSBsZXNzLXRoYW4gb3BlcmF0b3IuCiAgICAgIGlmICghaWRlbnRpY2FsKGdyb3VwaW5nU3RhY2suaGVhZC5raW5kLCBMVF9UT0tFTikpIHsKICAgICAgICB1bm1hdGNoZWRCZWdpbkdyb3VwKG9yaWdpbmFsU3RhY2suaGVhZCk7CiAgICAgIH0KICAgICAgb3JpZ2luYWxTdGFjayA9IG9yaWdpbmFsU3RhY2sudGFpbDsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgLyoqCiAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGRpc2NhcmQgJzwnIGZyb20gdGhlICJncm91cGluZyIgc3RhY2suCiAgICoKICAgKiBbUGFydGlhbFBhcnNlci5za2lwRXhwcmVzc2lvbl0gcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgd2UgZG8gbm90CiAgICogY3JlYXRlIGdyb3VwcyBmb3Igc3R1ZmYgbGlrZToKICAgKiBbOmEgPSBiIDwgYywgZCA9IGUgPiBmOl0uCiAgICoKICAgKiBJbiBvdGhlciB3b3JkcywgdGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHNjYW5uZXIgcmVjb2duaXplcwogICAqIHNvbWV0aGluZyB3aGljaCBjYW5ub3QgcG9zc2libHkgYmUgcGFydCBvZiBhIHR5cGUgcGFyYW1ldGVyL2FyZ3VtZW50CiAgICogbGlzdCwgbGlrZSB0aGUgJz0nIGluIHRoZSBhYm92ZSBleGFtcGxlLgogICAqLwogIHZvaWQgZGlzY2FyZE9wZW5MdCgpIHsKICAgIHdoaWxlICghZ3JvdXBpbmdTdGFjay5pc0VtcHR5ICYmCiAgICAgICAgaWRlbnRpY2FsKGdyb3VwaW5nU3RhY2suaGVhZC5raW5kLCBMVF9UT0tFTikpIHsKICAgICAgZ3JvdXBpbmdTdGFjayA9IGdyb3VwaW5nU3RhY2sudGFpbDsKICAgIH0KICB9CgogIC8qKgogICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBkaXNjYXJkICckeycgZnJvbSB0aGUgImdyb3VwaW5nIiBzdGFjay4KICAgKgogICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBzY2FubmVyIGZpbmRzIGFuIHVudGVybWluYXRlZAogICAqIGludGVycG9sYXRpb24gZXhwcmVzc2lvbi4KICAgKi8KICB2b2lkIGRpc2NhcmRJbnRlcnBvbGF0aW9uKCkgewogICAgd2hpbGUgKCFncm91cGluZ1N0YWNrLmlzRW1wdHkpIHsKICAgICAgQmVnaW5Ub2tlbiBiZWdpblRva2VuID0gZ3JvdXBpbmdTdGFjay5oZWFkOwogICAgICB1bm1hdGNoZWRCZWdpbkdyb3VwKGJlZ2luVG9rZW4pOwogICAgICBncm91cGluZ1N0YWNrID0gZ3JvdXBpbmdTdGFjay50YWlsOwogICAgICBpZiAoaWRlbnRpY2FsKGJlZ2luVG9rZW4ua2luZCwgU1RSSU5HX0lOVEVSUE9MQVRJT05fVE9LRU4pKSBicmVhazsKICAgIH0KICB9CgogIHZvaWQgdW5tYXRjaGVkQmVnaW5Hcm91cChCZWdpblRva2VuIGJlZ2luKSB7CiAgICAvLyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IHVubWF0Y2hlZCBCZWdpblRva2VucyBhcmUgcmVwb3J0ZWQgYXMKICAgIC8vIGVycm9ycy4gIEhvd2V2ZXIsIHRoZSBkaWV0IHBhcnNlciBhc3N1bWVzIHRoYXQgZ3JvdXBzIGFyZSB3ZWxsLWJhbGFuY2VkCiAgICAvLyBhbmQgd2lsbCBuZXZlciBsb29rIGF0IHRoZSBlbmRHcm91cCB0b2tlbi4gIFRoaXMgaXMgYSBuaWNlIHByb3BlcnR5IHRoYXQKICAgIC8vIGFsbG93cyB1cyB0byBza2lwIHF1aWNrbHkgb3ZlciBjb3JyZWN0IGNvZGUuIEJ5IGluc2VydGluZyBhbiBhZGRpdGlvbmFsCiAgICAvLyBzeW50aGV0aWMgdG9rZW4gaW4gdGhlIHN0cmVhbSwgd2UgY2FuIGtlZXAgaWdub3JpbmcgZW5kR3JvdXAgdG9rZW5zLgogICAgLy8KICAgIC8vIFtiZWdpbl0gLS1uZXh0LS0+IFt0YWlsXQogICAgLy8gW2JlZ2luXSAtLWVuZEctLT4gW3N5bnRoZXRpY10gLS1uZXh0LS0+IFtuZXh0XSAtLW5leHQtLT4gW3RhaWxdCiAgICAvLwogICAgLy8gVGhpcyBhbGxvd3MgdGhlIGRpZXQgcGFyc2VyIHRvIHNraXAgZnJvbSBbYmVnaW5dIHZpYSBlbmRHcm91cCB0bwogICAgLy8gW3N5bnRoZXRpY10gYW5kIGlnbm9yZSB0aGUgW3N5bnRoZXRpY10gdG9rZW4gKGFzc3VtaW5nIGl0J3MgY29ycmVjdCksCiAgICAvLyB0aGVuIHRoZSBlcnJvciB3aWxsIGJlIHJlcG9ydGVkIHdoZW4gcGFyc2luZyB0aGUgW25leHRdIHRva2VuLgogICAgLy8KICAgIC8vIEZvciBleGFtcGxlLCB0b2tlbml6ZSgie1sxfTsiKSBwcm9kdWNlczoKICAgIC8vCiAgICAvLyBTeW1ib2xUb2tlbih7KSAtLWVuZEdyb3VwLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIC8vICAgICBuZXh0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAvLyAgICAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgLy8gU3ltYm9sVG9rZW4oWykgLS1lbmRHcm91cC0tKyAgICAgICAgICAgICAgICAgICAgIHwKICAgIC8vICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8CiAgICAvLyAgICAgbmV4dCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAogICAgLy8gICAgICB2ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKICAgIC8vIFN0cmluZ1Rva2VuKDEpICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8CiAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAogICAgLy8gICAgIG5leHQgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKICAgIC8vICAgICAgdiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8CiAgICAvLyBTeW1ib2xUb2tlbihdKTwtLS0tLS0tLS0tLS0rIDwtLSBTeW50aGV0aWMgdG9rZW4gfAogICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIC8vICAgICBuZXh0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAvLyAgICAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgLy8gVW5tYXRjaGVkVG9rZW4oWykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIC8vICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAvLyAgICAgbmV4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgLy8gICAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIC8vIFN5bWJvbFRva2VuKH0pPC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICAvLyAgICAgIHwKICAgIC8vICAgICBuZXh0CiAgICAvLyAgICAgIHYKICAgIC8vIFN5bWJvbFRva2VuKDspCiAgICAvLyAgICAgIHwKICAgIC8vICAgICBuZXh0CiAgICAvLyAgICAgIHYKICAgIC8vICAgICBFT0YKICAgIFRva2VuVHlwZSB0eXBlID0gY2xvc2VCcmFjZUluZm9Gb3IoYmVnaW4pOwogICAgYXBwZW5kVG9rZW4obmV3IFN5bnRoZXRpY1Rva2VuKHR5cGUsIHRva2VuU3RhcnQpLi5iZWZvcmVTeW50aGV0aWMgPSB0YWlsKTsKICAgIGJlZ2luLmVuZEdyb3VwID0gdGFpbDsKICAgIHByZXBlbmRFcnJvclRva2VuKG5ldyBVbm1hdGNoZWRUb2tlbihiZWdpbikpOwogIH0KCiAgLy8vIFJldHVybiB0cnVlIHdoZW4gYXQgRU9GLgogIGJvb2wgYXRFbmRPZkZpbGUoKTsKCiAgVG9rZW4gdG9rZW5pemUoKSB7CiAgICB3aGlsZSAoIWF0RW5kT2ZGaWxlKCkpIHsKICAgICAgaW50IG5leHQgPSBhZHZhbmNlKCk7CgogICAgICAvLyBTY2FuIHRoZSBoZWFkZXIgbG9va2luZyBmb3IgYSBsYW5ndWFnZSB2ZXJzaW9uCiAgICAgIGlmICghaWRlbnRpY2FsKG5leHQsICRFT0YpKSB7CiAgICAgICAgVG9rZW4gb2xkVGFpbCA9IHRhaWw7CiAgICAgICAgbmV4dCA9IGJpZ0hlYWRlclN3aXRjaChuZXh0KTsKICAgICAgICBpZiAoIWlkZW50aWNhbChuZXh0LCAkRU9GKSAmJiB0YWlsLmtpbmQgPT0gU0NSSVBUX1RPS0VOKSB7CiAgICAgICAgICBvbGRUYWlsID0gdGFpbDsKICAgICAgICAgIG5leHQgPSBiaWdIZWFkZXJTd2l0Y2gobmV4dCk7CiAgICAgICAgfQogICAgICAgIHdoaWxlICghaWRlbnRpY2FsKG5leHQsICRFT0YpICYmIHRhaWwgPT0gb2xkVGFpbCkgewogICAgICAgICAgbmV4dCA9IGJpZ0hlYWRlclN3aXRjaChuZXh0KTsKICAgICAgICB9CiAgICAgICAgbmV4dCA9IG5leHQ7CiAgICAgIH0KCiAgICAgIHdoaWxlICghaWRlbnRpY2FsKG5leHQsICRFT0YpKSB7CiAgICAgICAgbmV4dCA9IGJpZ1N3aXRjaChuZXh0KTsKICAgICAgfQogICAgICBpZiAoYXRFbmRPZkZpbGUoKSkgewogICAgICAgIGFwcGVuZEVvZlRva2VuKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdW5leHBlY3RlZCgkRU9GKTsKICAgICAgfQogICAgfQoKICAgIC8vIEFsd2F5cyBwcmV0ZW5kIHRoYXQgdGhlcmUncyBhIGxpbmUgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4KICAgIGxpbmVTdGFydHMuYWRkKHN0cmluZ09mZnNldCArIDEpOwoKICAgIHJldHVybiBmaXJzdFRva2VuKCk7CiAgfQoKICBpbnQgYmlnSGVhZGVyU3dpdGNoKGludCBuZXh0KSB7CiAgICBpZiAoIWlkZW50aWNhbChuZXh0LCAkU0xBU0gpKSB7CiAgICAgIHJldHVybiBiaWdTd2l0Y2gobmV4dCk7CiAgICB9CiAgICBiZWdpblRva2VuKCk7CiAgICBpZiAoIWlkZW50aWNhbCgkU0xBU0gsIHBlZWsoKSkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplU2xhc2hPckNvbW1lbnQobmV4dCk7CiAgICB9CiAgICByZXR1cm4gdG9rZW5pemVMYW5ndWFnZVZlcnNpb25PclNpbmdsZUxpbmVDb21tZW50KG5leHQpOwogIH0KCiAgaW50IGJpZ1N3aXRjaChpbnQgbmV4dCkgewogICAgYmVnaW5Ub2tlbigpOwogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkU1BBQ0UpIHx8CiAgICAgICAgaWRlbnRpY2FsKG5leHQsICRUQUIpIHx8CiAgICAgICAgaWRlbnRpY2FsKG5leHQsICRMRikgfHwKICAgICAgICBpZGVudGljYWwobmV4dCwgJENSKSkgewogICAgICBhcHBlbmRXaGl0ZVNwYWNlKG5leHQpOwogICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICAvLyBTZXF1ZW5jZXMgb2Ygc3BhY2VzIGFyZSBjb21tb24sIHNvIGFkdmFuY2UgdGhyb3VnaCB0aGVtIGZhc3QuCiAgICAgIHdoaWxlIChpZGVudGljYWwobmV4dCwgJFNQQUNFKSkgewogICAgICAgIC8vIFdlIGRvbid0IGludm9rZSBbOmFwcGVuZFdoaXRlU3BhY2UobmV4dCk6XSBoZXJlIGZvciBlZmZpY2llbmN5LAogICAgICAgIC8vIGFzc3VtaW5nIHRoYXQgaXQgZG9lcyBub3QgZG8gYW55dGhpbmcgZm9yIHNwYWNlIGNoYXJhY3RlcnMuCiAgICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgfQogICAgICByZXR1cm4gbmV4dDsKICAgIH0KCiAgICBpbnQgbmV4dExvd2VyID0gbmV4dCB8IDB4MjA7CgogICAgaWYgKCRhIDw9IG5leHRMb3dlciAmJiBuZXh0TG93ZXIgPD0gJHopIHsKICAgICAgaWYgKGlkZW50aWNhbCgkciwgbmV4dCkpIHsKICAgICAgICByZXR1cm4gdG9rZW5pemVSYXdTdHJpbmdLZXl3b3JkT3JJZGVudGlmaWVyKG5leHQpOwogICAgICB9CiAgICAgIHJldHVybiB0b2tlbml6ZUtleXdvcmRPcklkZW50aWZpZXIobmV4dCwgdHJ1ZSk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkQ0xPU0VfUEFSRU4pKSB7CiAgICAgIHJldHVybiBhcHBlbmRFbmRHcm91cChUb2tlblR5cGUuQ0xPU0VfUEFSRU4sIE9QRU5fUEFSRU5fVE9LRU4pOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJE9QRU5fUEFSRU4pKSB7CiAgICAgIGFwcGVuZEJlZ2luR3JvdXAoVG9rZW5UeXBlLk9QRU5fUEFSRU4pOwogICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJFNFTUlDT0xPTikpIHsKICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5TRU1JQ09MT04pOwogICAgICAvLyBUeXBlIHBhcmFtZXRlcnMgYW5kIGFyZ3VtZW50cyBjYW5ub3QgY29udGFpbiBzZW1pY29sb24uCiAgICAgIGRpc2NhcmRPcGVuTHQoKTsKICAgICAgcmV0dXJuIGFkdmFuY2UoKTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRQRVJJT0QpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZURvdHNPck51bWJlcihuZXh0KTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRDT01NQSkpIHsKICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5DT01NQSk7CiAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkRVEpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZUVxdWFscyhuZXh0KTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRDTE9TRV9DVVJMWV9CUkFDS0VUKSkgewogICAgICByZXR1cm4gYXBwZW5kRW5kR3JvdXAoCiAgICAgICAgICBUb2tlblR5cGUuQ0xPU0VfQ1VSTFlfQlJBQ0tFVCwgT1BFTl9DVVJMWV9CUkFDS0VUX1RPS0VOKTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRTTEFTSCkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplU2xhc2hPckNvbW1lbnQobmV4dCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkT1BFTl9DVVJMWV9CUkFDS0VUKSkgewogICAgICBhcHBlbmRCZWdpbkdyb3VwKFRva2VuVHlwZS5PUEVOX0NVUkxZX0JSQUNLRVQpOwogICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJERRKSB8fCBpZGVudGljYWwobmV4dCwgJFNRKSkgewogICAgICByZXR1cm4gdG9rZW5pemVTdHJpbmcobmV4dCwgc2Nhbk9mZnNldCwgZmFsc2UpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJF8pKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZUtleXdvcmRPcklkZW50aWZpZXIobmV4dCwgdHJ1ZSk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkQ09MT04pKSB7CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuQ09MT04pOwogICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJExUKSkgewogICAgICByZXR1cm4gdG9rZW5pemVMZXNzVGhhbihuZXh0KTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRHVCkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplR3JlYXRlclRoYW4obmV4dCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkQkFORykpIHsKICAgICAgcmV0dXJuIHRva2VuaXplRXhjbGFtYXRpb24obmV4dCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkT1BFTl9TUVVBUkVfQlJBQ0tFVCkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplT3BlblNxdWFyZUJyYWNrZXQobmV4dCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkQ0xPU0VfU1FVQVJFX0JSQUNLRVQpKSB7CiAgICAgIHJldHVybiBhcHBlbmRFbmRHcm91cCgKICAgICAgICAgIFRva2VuVHlwZS5DTE9TRV9TUVVBUkVfQlJBQ0tFVCwgT1BFTl9TUVVBUkVfQlJBQ0tFVF9UT0tFTik7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkQVQpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZUF0KG5leHQpOwogICAgfQoKICAgIGlmIChuZXh0ID49ICQxICYmIG5leHQgPD0gJDkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplTnVtYmVyKG5leHQpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJEFNUEVSU0FORCkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplQW1wZXJzYW5kKG5leHQpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJDApKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZUhleE9yTnVtYmVyKG5leHQpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJFFVRVNUSU9OKSkgewogICAgICByZXR1cm4gdG9rZW5pemVRdWVzdGlvbihuZXh0KTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRCQVIpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZUJhcihuZXh0KTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRQTFVTKSkgewogICAgICByZXR1cm4gdG9rZW5pemVQbHVzKG5leHQpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJCQpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZUtleXdvcmRPcklkZW50aWZpZXIobmV4dCwgdHJ1ZSk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkTUlOVVMpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZU1pbnVzKG5leHQpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJFNUQVIpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZU11bHRpcGx5KG5leHQpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJENBUkVUKSkgewogICAgICByZXR1cm4gdG9rZW5pemVDYXJldChuZXh0KTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRUSUxERSkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplVGlsZGUobmV4dCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkUEVSQ0VOVCkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplUGVyY2VudChuZXh0KTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRCQUNLUElORykpIHsKICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5CQUNLUElORyk7CiAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkQkFDS1NMQVNIKSkgewogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLkJBQ0tTTEFTSCk7CiAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkSEFTSCkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplVGFnKG5leHQpOwogICAgfQoKICAgIGlmIChuZXh0IDwgMHgxZikgewogICAgICByZXR1cm4gdW5leHBlY3RlZChuZXh0KTsKICAgIH0KCiAgICBuZXh0ID0gY3VycmVudEFzVW5pY29kZShuZXh0KTsKCiAgICByZXR1cm4gdW5leHBlY3RlZChuZXh0KTsKICB9CgogIGludCB0b2tlbml6ZVRhZyhpbnQgbmV4dCkgewogICAgLy8gIyBvciAjIS4qW1xuXHJdCiAgICBpZiAoc2Nhbk9mZnNldCA9PSAwKSB7CiAgICAgIGlmIChpZGVudGljYWwocGVlaygpLCAkQkFORykpIHsKICAgICAgICBpbnQgc3RhcnQgPSBzY2FuT2Zmc2V0OwogICAgICAgIGJvb2wgYXNjaWlPbmx5ID0gdHJ1ZTsKICAgICAgICBkbyB7CiAgICAgICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICAgICAgaWYgKG5leHQgPiAxMjcpIGFzY2lpT25seSA9IGZhbHNlOwogICAgICAgIH0gd2hpbGUgKCFpZGVudGljYWwobmV4dCwgJExGKSAmJgogICAgICAgICAgICAhaWRlbnRpY2FsKG5leHQsICRDUikgJiYKICAgICAgICAgICAgIWlkZW50aWNhbChuZXh0LCAkRU9GKSk7CiAgICAgICAgaWYgKCFhc2NpaU9ubHkpIGhhbmRsZVVuaWNvZGUoc3RhcnQpOwogICAgICAgIGFwcGVuZFN1YnN0cmluZ1Rva2VuKFRva2VuVHlwZS5TQ1JJUFRfVEFHLCBzdGFydCwgYXNjaWlPbmx5KTsKICAgICAgICByZXR1cm4gbmV4dDsKICAgICAgfQogICAgfQogICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5IQVNIKTsKICAgIHJldHVybiBhZHZhbmNlKCk7CiAgfQoKICBpbnQgdG9rZW5pemVUaWxkZShpbnQgbmV4dCkgewogICAgLy8gfiB+LyB+Lz0KICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRTTEFTSCkpIHsKICAgICAgcmV0dXJuIHNlbGVjdCgkRVEsIFRva2VuVHlwZS5USUxERV9TTEFTSF9FUSwgVG9rZW5UeXBlLlRJTERFX1NMQVNIKTsKICAgIH0gZWxzZSB7CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuVElMREUpOwogICAgICByZXR1cm4gbmV4dDsKICAgIH0KICB9CgogIGludCB0b2tlbml6ZU9wZW5TcXVhcmVCcmFja2V0KGludCBuZXh0KSB7CiAgICAvLyBbIFtdIFtdPQogICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIGlmIChpZGVudGljYWwobmV4dCwgJENMT1NFX1NRVUFSRV9CUkFDS0VUKSkgewogICAgICByZXR1cm4gc2VsZWN0KCRFUSwgVG9rZW5UeXBlLklOREVYX0VRLCBUb2tlblR5cGUuSU5ERVgpOwogICAgfQogICAgYXBwZW5kQmVnaW5Hcm91cChUb2tlblR5cGUuT1BFTl9TUVVBUkVfQlJBQ0tFVCk7CiAgICByZXR1cm4gbmV4dDsKICB9CgogIGludCB0b2tlbml6ZUNhcmV0KGludCBuZXh0KSB7CiAgICAvLyBeIF49CiAgICByZXR1cm4gc2VsZWN0KCRFUSwgVG9rZW5UeXBlLkNBUkVUX0VRLCBUb2tlblR5cGUuQ0FSRVQpOwogIH0KCiAgaW50IHRva2VuaXplUXVlc3Rpb24oaW50IG5leHQpIHsKICAgIC8vID8gPy4gPz8gPz89CiAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkUVVFU1RJT04pKSB7CiAgICAgIHJldHVybiBzZWxlY3QoCiAgICAgICAgICAkRVEsIFRva2VuVHlwZS5RVUVTVElPTl9RVUVTVElPTl9FUSwgVG9rZW5UeXBlLlFVRVNUSU9OX1FVRVNUSU9OKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKG5leHQsICRQRVJJT0QpKSB7CiAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgIGlmIChfZW5hYmxlTm9uTnVsbGFibGUgJiYgaWRlbnRpY2FsKCRPUEVOX1NRVUFSRV9CUkFDS0VULCBuZXh0KSkgewogICAgICAgIGFwcGVuZEJlZ2luR3JvdXAoVG9rZW5UeXBlLlFVRVNUSU9OX1BFUklPRF9PUEVOX1NRVUFSRV9CUkFDS0VUKTsKICAgICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgICB9CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuUVVFU1RJT05fUEVSSU9EKTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9IGVsc2UgewogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLlFVRVNUSU9OKTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CiAgfQoKICBpbnQgdG9rZW5pemVCYXIoaW50IG5leHQpIHsKICAgIC8vIHwgfHwgfD0gfHw9CiAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkQkFSKSkgewogICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICBpZiAoTEFaWV9BU1NJR05NRU5UX0VOQUJMRUQgJiYgaWRlbnRpY2FsKG5leHQsICRFUSkpIHsKICAgICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLkJBUl9CQVJfRVEpOwogICAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICAgIH0KICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5CQVJfQkFSKTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbChuZXh0LCAkRVEpKSB7CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuQkFSX0VRKTsKICAgICAgcmV0dXJuIGFkdmFuY2UoKTsKICAgIH0gZWxzZSB7CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuQkFSKTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CiAgfQoKICBpbnQgdG9rZW5pemVBbXBlcnNhbmQoaW50IG5leHQpIHsKICAgIC8vICYmICY9ICYgJiY9CiAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkQU1QRVJTQU5EKSkgewogICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICBpZiAoTEFaWV9BU1NJR05NRU5UX0VOQUJMRUQgJiYgaWRlbnRpY2FsKG5leHQsICRFUSkpIHsKICAgICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLkFNUEVSU0FORF9BTVBFUlNBTkRfRVEpOwogICAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICAgIH0KICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5BTVBFUlNBTkRfQU1QRVJTQU5EKTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbChuZXh0LCAkRVEpKSB7CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuQU1QRVJTQU5EX0VRKTsKICAgICAgcmV0dXJuIGFkdmFuY2UoKTsKICAgIH0gZWxzZSB7CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuQU1QRVJTQU5EKTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CiAgfQoKICBpbnQgdG9rZW5pemVQZXJjZW50KGludCBuZXh0KSB7CiAgICAvLyAlICU9CiAgICByZXR1cm4gc2VsZWN0KCRFUSwgVG9rZW5UeXBlLlBFUkNFTlRfRVEsIFRva2VuVHlwZS5QRVJDRU5UKTsKICB9CgogIGludCB0b2tlbml6ZU11bHRpcGx5KGludCBuZXh0KSB7CiAgICAvLyAqICo9CiAgICByZXR1cm4gc2VsZWN0KCRFUSwgVG9rZW5UeXBlLlNUQVJfRVEsIFRva2VuVHlwZS5TVEFSKTsKICB9CgogIGludCB0b2tlbml6ZU1pbnVzKGludCBuZXh0KSB7CiAgICAvLyAtIC0tIC09CiAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkTUlOVVMpKSB7CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuTUlOVVNfTUlOVVMpOwogICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwobmV4dCwgJEVRKSkgewogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLk1JTlVTX0VRKTsKICAgICAgcmV0dXJuIGFkdmFuY2UoKTsKICAgIH0gZWxzZSB7CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuTUlOVVMpOwogICAgICByZXR1cm4gbmV4dDsKICAgIH0KICB9CgogIGludCB0b2tlbml6ZVBsdXMoaW50IG5leHQpIHsKICAgIC8vICsgKysgKz0KICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICBpZiAoaWRlbnRpY2FsKCRQTFVTLCBuZXh0KSkgewogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLlBMVVNfUExVUyk7CiAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgkRVEsIG5leHQpKSB7CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuUExVU19FUSk7CiAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICB9IGVsc2UgewogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLlBMVVMpOwogICAgICByZXR1cm4gbmV4dDsKICAgIH0KICB9CgogIGludCB0b2tlbml6ZUV4Y2xhbWF0aW9uKGludCBuZXh0KSB7CiAgICAvLyAhICE9CiAgICAvLyAhPT0gaXMga2VwdCBmb3IgdXNlci1mcmllbmRseSBlcnJvciByZXBvcnRpbmcuCgogICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIGlmIChpZGVudGljYWwobmV4dCwgJEVRKSkgewogICAgICAvL3dhcyBgcmV0dXJuIHNlbGVjdCgkRVEsIFRva2VuVHlwZS5CQU5HX0VRX0VRLCBUb2tlblR5cGUuQkFOR19FUSk7YAogICAgICBpbnQgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgaWYgKGlkZW50aWNhbChuZXh0LCAkRVEpKSB7CiAgICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5CQU5HX0VRX0VRKTsKICAgICAgICBwcmVwZW5kRXJyb3JUb2tlbihuZXcgVW5zdXBwb3J0ZWRPcGVyYXRvcih0YWlsLCB0b2tlblN0YXJ0KSk7CiAgICAgICAgcmV0dXJuIGFkdmFuY2UoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLkJBTkdfRVEpOwogICAgICAgIHJldHVybiBuZXh0OwogICAgICB9CiAgICB9CiAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLkJBTkcpOwogICAgcmV0dXJuIG5leHQ7CiAgfQoKICBpbnQgdG9rZW5pemVFcXVhbHMoaW50IG5leHQpIHsKICAgIC8vID0gPT0gPT4KICAgIC8vID09PSBpcyBrZXB0IGZvciB1c2VyLWZyaWVuZGx5IGVycm9yIHJlcG9ydGluZy4KCiAgICAvLyBUeXBlIHBhcmFtZXRlcnMgYW5kIGFyZ3VtZW50cyBjYW5ub3QgY29udGFpbiBhbnkgdG9rZW4gdGhhdAogICAgLy8gc3RhcnRzIHdpdGggJz0nLgogICAgZGlzY2FyZE9wZW5MdCgpOwoKICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRFUSkpIHsKICAgICAgLy8gd2FzIGByZXR1cm4gc2VsZWN0KCRFUSwgVG9rZW5UeXBlLkVRX0VRX0VRLCBUb2tlblR5cGUuRVFfRVEpO2AKICAgICAgaW50IG5leHQgPSBhZHZhbmNlKCk7CiAgICAgIGlmIChpZGVudGljYWwobmV4dCwgJEVRKSkgewogICAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuRVFfRVFfRVEpOwogICAgICAgIHByZXBlbmRFcnJvclRva2VuKG5ldyBVbnN1cHBvcnRlZE9wZXJhdG9yKHRhaWwsIHRva2VuU3RhcnQpKTsKICAgICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgICB9IGVsc2UgewogICAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuRVFfRVEpOwogICAgICAgIHJldHVybiBuZXh0OwogICAgICB9CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbChuZXh0LCAkR1QpKSB7CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuRlVOQ1RJT04pOwogICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgfQogICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5FUSk7CiAgICByZXR1cm4gbmV4dDsKICB9CgogIGludCB0b2tlbml6ZUdyZWF0ZXJUaGFuKGludCBuZXh0KSB7CiAgICAvLyA+ID49ID4+ID4+PSA+Pj4gPj4+PQogICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIGlmIChpZGVudGljYWwoJEVRLCBuZXh0KSkgewogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLkdUX0VRKTsKICAgICAgcmV0dXJuIGFkdmFuY2UoKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCRHVCwgbmV4dCkpIHsKICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgaWYgKGlkZW50aWNhbCgkRVEsIG5leHQpKSB7CiAgICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5HVF9HVF9FUSk7CiAgICAgICAgcmV0dXJuIGFkdmFuY2UoKTsKICAgICAgfSBlbHNlIGlmIChfZW5hYmxlVHJpcGxlU2hpZnQgJiYgaWRlbnRpY2FsKCRHVCwgbmV4dCkpIHsKICAgICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICAgIGlmIChfZW5hYmxlVHJpcGxlU2hpZnQgJiYgaWRlbnRpY2FsKCRFUSwgbmV4dCkpIHsKICAgICAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuR1RfR1RfR1RfRVEpOwogICAgICAgICAgcmV0dXJuIGFkdmFuY2UoKTsKICAgICAgICB9CiAgICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5HVF9HVF9HVCk7CiAgICAgICAgcmV0dXJuIG5leHQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXBwZW5kR3RHdChUb2tlblR5cGUuR1RfR1QpOwogICAgICAgIHJldHVybiBuZXh0OwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBhcHBlbmRHdChUb2tlblR5cGUuR1QpOwogICAgICByZXR1cm4gbmV4dDsKICAgIH0KICB9CgogIGludCB0b2tlbml6ZUxlc3NUaGFuKGludCBuZXh0KSB7CiAgICAvLyA8IDw9IDw8IDw8PQogICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIGlmIChpZGVudGljYWwoJEVRLCBuZXh0KSkgewogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLkxUX0VRKTsKICAgICAgcmV0dXJuIGFkdmFuY2UoKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCRMVCwgbmV4dCkpIHsKICAgICAgcmV0dXJuIHNlbGVjdCgkRVEsIFRva2VuVHlwZS5MVF9MVF9FUSwgVG9rZW5UeXBlLkxUX0xUKTsKICAgIH0gZWxzZSB7CiAgICAgIGFwcGVuZEJlZ2luR3JvdXAoVG9rZW5UeXBlLkxUKTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CiAgfQoKICBpbnQgdG9rZW5pemVOdW1iZXIoaW50IG5leHQpIHsKICAgIGludCBzdGFydCA9IHNjYW5PZmZzZXQ7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICBpZiAoJDAgPD0gbmV4dCAmJiBuZXh0IDw9ICQ5KSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKG5leHQsICRlKSB8fCBpZGVudGljYWwobmV4dCwgJEUpKSB7CiAgICAgICAgcmV0dXJuIHRva2VuaXplRnJhY3Rpb25QYXJ0KG5leHQsIHN0YXJ0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRQRVJJT0QpKSB7CiAgICAgICAgICBpbnQgbmV4dG5leHQgPSBwZWVrKCk7CiAgICAgICAgICBpZiAoJDAgPD0gbmV4dG5leHQgJiYgbmV4dG5leHQgPD0gJDkpIHsKICAgICAgICAgICAgcmV0dXJuIHRva2VuaXplRnJhY3Rpb25QYXJ0KGFkdmFuY2UoKSwgc3RhcnQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhcHBlbmRTdWJzdHJpbmdUb2tlbihUb2tlblR5cGUuSU5ULCBzdGFydCwgdHJ1ZSk7CiAgICAgICAgcmV0dXJuIG5leHQ7CiAgICAgIH0KICAgIH0KICB9CgogIGludCB0b2tlbml6ZUhleE9yTnVtYmVyKGludCBuZXh0KSB7CiAgICBpbnQgeCA9IHBlZWsoKTsKICAgIGlmIChpZGVudGljYWwoeCwgJHgpIHx8IGlkZW50aWNhbCh4LCAkWCkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplSGV4KG5leHQpOwogICAgfQogICAgcmV0dXJuIHRva2VuaXplTnVtYmVyKG5leHQpOwogIH0KCiAgaW50IHRva2VuaXplSGV4KGludCBuZXh0KSB7CiAgICBpbnQgc3RhcnQgPSBzY2FuT2Zmc2V0OwogICAgbmV4dCA9IGFkdmFuY2UoKTsgLy8gQWR2YW5jZSBwYXN0IHRoZSAkeCBvciAkWC4KICAgIGJvb2wgaGFzRGlnaXRzID0gZmFsc2U7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICBpZiAoKCQwIDw9IG5leHQgJiYgbmV4dCA8PSAkOSkgfHwKICAgICAgICAgICgkQSA8PSBuZXh0ICYmIG5leHQgPD0gJEYpIHx8CiAgICAgICAgICAoJGEgPD0gbmV4dCAmJiBuZXh0IDw9ICRmKSkgewogICAgICAgIGhhc0RpZ2l0cyA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKCFoYXNEaWdpdHMpIHsKICAgICAgICAgIHByZXBlbmRFcnJvclRva2VuKG5ldyBVbnRlcm1pbmF0ZWRUb2tlbigKICAgICAgICAgICAgICBtZXNzYWdlRXhwZWN0ZWRIZXhEaWdpdCwgc3RhcnQsIHN0cmluZ09mZnNldCkpOwogICAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICAgIGFwcGVuZFN5bnRoZXRpY1N1YnN0cmluZ1Rva2VuKAogICAgICAgICAgICAgIFRva2VuVHlwZS5IRVhBREVDSU1BTCwgc3RhcnQsIHRydWUsICIwIik7CiAgICAgICAgICByZXR1cm4gbmV4dDsKICAgICAgICB9CiAgICAgICAgYXBwZW5kU3Vic3RyaW5nVG9rZW4oVG9rZW5UeXBlLkhFWEFERUNJTUFMLCBzdGFydCwgdHJ1ZSk7CiAgICAgICAgcmV0dXJuIG5leHQ7CiAgICAgIH0KICAgIH0KICB9CgogIGludCB0b2tlbml6ZURvdHNPck51bWJlcihpbnQgbmV4dCkgewogICAgaW50IHN0YXJ0ID0gc2Nhbk9mZnNldDsKICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICBpZiAoKCQwIDw9IG5leHQgJiYgbmV4dCA8PSAkOSkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplRnJhY3Rpb25QYXJ0KG5leHQsIHN0YXJ0KTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCRQRVJJT0QsIG5leHQpKSB7CiAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgIGlmIChpZGVudGljYWwobmV4dCwgJFBFUklPRCkpIHsKICAgICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICAgIGlmIChpZGVudGljYWwobmV4dCwgJFFVRVNUSU9OKSkgewogICAgICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5QRVJJT0RfUEVSSU9EX1BFUklPRF9RVUVTVElPTik7CiAgICAgICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLlBFUklPRF9QRVJJT0RfUEVSSU9EKTsKICAgICAgICAgIHJldHVybiBuZXh0OwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLlBFUklPRF9QRVJJT0QpOwogICAgICAgIHJldHVybiBuZXh0OwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLlBFUklPRCk7CiAgICAgIHJldHVybiBuZXh0OwogICAgfQogIH0KCiAgaW50IHRva2VuaXplRnJhY3Rpb25QYXJ0KGludCBuZXh0LCBpbnQgc3RhcnQpIHsKICAgIGJvb2wgZG9uZSA9IGZhbHNlOwogICAgYm9vbCBoYXNEaWdpdCA9IGZhbHNlOwogICAgTE9PUDoKICAgIHdoaWxlICghZG9uZSkgewogICAgICBpZiAoJDAgPD0gbmV4dCAmJiBuZXh0IDw9ICQ5KSB7CiAgICAgICAgaGFzRGlnaXQgPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgkZSwgbmV4dCkgfHwgaWRlbnRpY2FsKCRFLCBuZXh0KSkgewogICAgICAgIGhhc0RpZ2l0ID0gdHJ1ZTsKICAgICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICAgIGlmIChpZGVudGljYWwobmV4dCwgJFBMVVMpIHx8IGlkZW50aWNhbChuZXh0LCAkTUlOVVMpKSB7CiAgICAgICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICAgIH0KICAgICAgICBib29sIGhhc0V4cG9uZW50RGlnaXRzID0gZmFsc2U7CiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgIGlmICgkMCA8PSBuZXh0ICYmIG5leHQgPD0gJDkpIHsKICAgICAgICAgICAgaGFzRXhwb25lbnREaWdpdHMgPSB0cnVlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFoYXNFeHBvbmVudERpZ2l0cykgewogICAgICAgICAgICAgIGFwcGVuZFN5bnRoZXRpY1N1YnN0cmluZ1Rva2VuKFRva2VuVHlwZS5ET1VCTEUsIHN0YXJ0LCB0cnVlLCAnMCcpOwogICAgICAgICAgICAgIHByZXBlbmRFcnJvclRva2VuKG5ldyBVbnRlcm1pbmF0ZWRUb2tlbigKICAgICAgICAgICAgICAgICAgbWVzc2FnZU1pc3NpbmdFeHBvbmVudCwgdG9rZW5TdGFydCwgc3RyaW5nT2Zmc2V0KSk7CiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICAgIH0KCiAgICAgICAgZG9uZSA9IHRydWU7CiAgICAgICAgY29udGludWUgTE9PUDsKICAgICAgfSBlbHNlIHsKICAgICAgICBkb25lID0gdHJ1ZTsKICAgICAgICBjb250aW51ZSBMT09QOwogICAgICB9CiAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICB9CiAgICBpZiAoIWhhc0RpZ2l0KSB7CiAgICAgIC8vIFJlZHVjZSBvZmZzZXQsIHdlIGFscmVhZHkgYWR2YW5jZWQgdG8gdGhlIHRva2VuIHBhc3QgdGhlIHBlcmlvZC4KICAgICAgYXBwZW5kU3Vic3RyaW5nVG9rZW4oVG9rZW5UeXBlLklOVCwgc3RhcnQsIHRydWUsIC0xKTsKCiAgICAgIC8vIFRPRE8oYWhlKTogV3Jvbmcgb2Zmc2V0IGZvciB0aGUgcGVyaW9kLiBDYW5ub3QgY2FsbCBiZWdpblRva2VuIGJlY2F1c2UKICAgICAgLy8gdGhlIHNjYW5uZXIgYWxyZWFkeSBhZHZhbmNlZCBwYXN0IHRoZSBwZXJpb2QuCiAgICAgIGlmIChpZGVudGljYWwoJFBFUklPRCwgbmV4dCkpIHsKICAgICAgICByZXR1cm4gc2VsZWN0KAogICAgICAgICAgICAkUEVSSU9ELCBUb2tlblR5cGUuUEVSSU9EX1BFUklPRF9QRVJJT0QsIFRva2VuVHlwZS5QRVJJT0RfUEVSSU9EKTsKICAgICAgfQogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLlBFUklPRCk7CiAgICAgIHJldHVybiBuZXh0OwogICAgfQogICAgYXBwZW5kU3Vic3RyaW5nVG9rZW4oVG9rZW5UeXBlLkRPVUJMRSwgc3RhcnQsIHRydWUpOwogICAgcmV0dXJuIG5leHQ7CiAgfQoKICBpbnQgdG9rZW5pemVTbGFzaE9yQ29tbWVudChpbnQgbmV4dCkgewogICAgaW50IHN0YXJ0ID0gc2Nhbk9mZnNldDsKICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICBpZiAoaWRlbnRpY2FsKCRTVEFSLCBuZXh0KSkgewogICAgICByZXR1cm4gdG9rZW5pemVNdWx0aUxpbmVDb21tZW50KG5leHQsIHN0YXJ0KTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCRTTEFTSCwgbmV4dCkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplU2luZ2xlTGluZUNvbW1lbnQobmV4dCwgc3RhcnQpOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwoJEVRLCBuZXh0KSkgewogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLlNMQVNIX0VRKTsKICAgICAgcmV0dXJuIGFkdmFuY2UoKTsKICAgIH0gZWxzZSB7CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuU0xBU0gpOwogICAgICByZXR1cm4gbmV4dDsKICAgIH0KICB9CgogIGludCB0b2tlbml6ZUxhbmd1YWdlVmVyc2lvbk9yU2luZ2xlTGluZUNvbW1lbnQoaW50IG5leHQpIHsKICAgIGludCBzdGFydCA9IHNjYW5PZmZzZXQ7CiAgICBuZXh0ID0gYWR2YW5jZSgpOwoKICAgIC8vIERhcnQgZG9jCiAgICBpZiAoaWRlbnRpY2FsKCRTTEFTSCwgcGVlaygpKSkgewogICAgICByZXR1cm4gdG9rZW5pemVTaW5nbGVMaW5lQ29tbWVudChuZXh0LCBzdGFydCk7CiAgICB9CgogICAgLy8gIkBkYXJ0IgogICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIHdoaWxlIChpZGVudGljYWwoJFNQQUNFLCBuZXh0KSkgewogICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgfQogICAgaWYgKCFpZGVudGljYWwoJEFULCBuZXh0KSkgewogICAgICByZXR1cm4gdG9rZW5pemVTaW5nbGVMaW5lQ29tbWVudFJlc3QobmV4dCwgc3RhcnQsIGZhbHNlKTsKICAgIH0KICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICBpZiAoIWlkZW50aWNhbCgkZCwgbmV4dCkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplU2luZ2xlTGluZUNvbW1lbnRSZXN0KG5leHQsIHN0YXJ0LCBmYWxzZSk7CiAgICB9CiAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgaWYgKCFpZGVudGljYWwoJGEsIG5leHQpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZVNpbmdsZUxpbmVDb21tZW50UmVzdChuZXh0LCBzdGFydCwgZmFsc2UpOwogICAgfQogICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIGlmICghaWRlbnRpY2FsKCRyLCBuZXh0KSkgewogICAgICByZXR1cm4gdG9rZW5pemVTaW5nbGVMaW5lQ29tbWVudFJlc3QobmV4dCwgc3RhcnQsIGZhbHNlKTsKICAgIH0KICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICBpZiAoIWlkZW50aWNhbCgkdCwgbmV4dCkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplU2luZ2xlTGluZUNvbW1lbnRSZXN0KG5leHQsIHN0YXJ0LCBmYWxzZSk7CiAgICB9CiAgICBuZXh0ID0gYWR2YW5jZSgpOwoKICAgIC8vICI9IgogICAgd2hpbGUgKGlkZW50aWNhbCgkU1BBQ0UsIG5leHQpKSB7CiAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICB9CiAgICBpZiAoIWlkZW50aWNhbCgkRVEsIG5leHQpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZVNpbmdsZUxpbmVDb21tZW50UmVzdChuZXh0LCBzdGFydCwgZmFsc2UpOwogICAgfQogICAgbmV4dCA9IGFkdmFuY2UoKTsKCiAgICAvLyBtYWpvcgogICAgd2hpbGUgKGlkZW50aWNhbCgkU1BBQ0UsIG5leHQpKSB7CiAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICB9CiAgICBpbnQgbWFqb3IgPSAwOwogICAgaW50IG1ham9yU3RhcnQgPSBzY2FuT2Zmc2V0OwogICAgd2hpbGUgKGlzRGlnaXQobmV4dCkpIHsKICAgICAgbWFqb3IgPSBtYWpvciAqIDEwICsgbmV4dCAtICQwOwogICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgfQogICAgaWYgKHNjYW5PZmZzZXQgPT0gbWFqb3JTdGFydCkgewogICAgICByZXR1cm4gdG9rZW5pemVTaW5nbGVMaW5lQ29tbWVudFJlc3QobmV4dCwgc3RhcnQsIGZhbHNlKTsKICAgIH0KCiAgICAvLyBtaW5vcgogICAgaWYgKCFpZGVudGljYWwoJFBFUklPRCwgbmV4dCkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplU2luZ2xlTGluZUNvbW1lbnRSZXN0KG5leHQsIHN0YXJ0LCBmYWxzZSk7CiAgICB9CiAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgaW50IG1pbm9yID0gMDsKICAgIGludCBtaW5vclN0YXJ0ID0gc2Nhbk9mZnNldDsKICAgIHdoaWxlIChpc0RpZ2l0KG5leHQpKSB7CiAgICAgIG1pbm9yID0gbWlub3IgKiAxMCArIG5leHQgLSAkMDsKICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIH0KICAgIGlmIChzY2FuT2Zmc2V0ID09IG1pbm9yU3RhcnQpIHsKICAgICAgcmV0dXJuIHRva2VuaXplU2luZ2xlTGluZUNvbW1lbnRSZXN0KG5leHQsIHN0YXJ0LCBmYWxzZSk7CiAgICB9CgogICAgLy8gdHJhaWxpbmcgc3BhY2VzCiAgICB3aGlsZSAoaWRlbnRpY2FsKCRTUEFDRSwgbmV4dCkpIHsKICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIH0KICAgIGlmIChuZXh0ICE9ICRMRiAmJiBuZXh0ICE9ICRDUiAmJiBuZXh0ICE9ICRFT0YpIHsKICAgICAgcmV0dXJuIHRva2VuaXplU2luZ2xlTGluZUNvbW1lbnRSZXN0KG5leHQsIHN0YXJ0LCBmYWxzZSk7CiAgICB9CgogICAgTGFuZ3VhZ2VWZXJzaW9uVG9rZW4gbGFuZ3VhZ2VWZXJzaW9uID0KICAgICAgICBjcmVhdGVMYW5ndWFnZVZlcnNpb25Ub2tlbihzdGFydCwgbWFqb3IsIG1pbm9yKTsKICAgIGlmIChsYW5ndWFnZVZlcnNpb25DaGFuZ2VkICE9IG51bGwpIHsKICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IG1ha2UgdGhpcyByZXF1aXJlZCBhbmQgcmVtb3ZlIHRoZSBsYW5ndWFnZVZlcnNpb24gZmllbGQKICAgICAgbGFuZ3VhZ2VWZXJzaW9uQ2hhbmdlZCh0aGlzLCBsYW5ndWFnZVZlcnNpb24pOwogICAgfSBlbHNlIHsKICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IHJlbW92ZSB0aGlzIGhhY2sgYW5kIHJlcXVpcmUgbGlzdGVuZXIgdG8gdXBkYXRlCiAgICAgIC8vIHRoZSBzY2FubmVyJ3MgY29uZmlndXJhdGlvbi4KICAgICAgY29uZmlndXJhdGlvbiA9IFNjYW5uZXJDb25maWd1cmF0aW9uLmNsYXNzaWM7CiAgICB9CiAgICBpZiAoaW5jbHVkZUNvbW1lbnRzKSB7CiAgICAgIF9hcHBlbmRUb0NvbW1lbnRTdHJlYW0obGFuZ3VhZ2VWZXJzaW9uKTsKICAgIH0KICAgIHJldHVybiBuZXh0OwogIH0KCiAgaW50IHRva2VuaXplU2luZ2xlTGluZUNvbW1lbnQoaW50IG5leHQsIGludCBzdGFydCkgewogICAgYm9vbCBkYXJ0ZG9jID0gaWRlbnRpY2FsKCRTTEFTSCwgcGVlaygpKTsKICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICByZXR1cm4gdG9rZW5pemVTaW5nbGVMaW5lQ29tbWVudFJlc3QobmV4dCwgc3RhcnQsIGRhcnRkb2MpOwogIH0KCiAgaW50IHRva2VuaXplU2luZ2xlTGluZUNvbW1lbnRSZXN0KGludCBuZXh0LCBpbnQgc3RhcnQsIGJvb2wgZGFydGRvYykgewogICAgYm9vbCBhc2NpaU9ubHkgPSB0cnVlOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgaWYgKG5leHQgPiAxMjcpIGFzY2lpT25seSA9IGZhbHNlOwogICAgICBpZiAoaWRlbnRpY2FsKCRMRiwgbmV4dCkgfHwKICAgICAgICAgIGlkZW50aWNhbCgkQ1IsIG5leHQpIHx8CiAgICAgICAgICBpZGVudGljYWwoJEVPRiwgbmV4dCkpIHsKICAgICAgICBpZiAoIWFzY2lpT25seSkgaGFuZGxlVW5pY29kZShzdGFydCk7CiAgICAgICAgaWYgKGRhcnRkb2MpIHsKICAgICAgICAgIGFwcGVuZERhcnREb2Moc3RhcnQsIFRva2VuVHlwZS5TSU5HTEVfTElORV9DT01NRU5ULCBhc2NpaU9ubHkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhcHBlbmRDb21tZW50KHN0YXJ0LCBUb2tlblR5cGUuU0lOR0xFX0xJTkVfQ09NTUVOVCwgYXNjaWlPbmx5KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5leHQ7CiAgICAgIH0KICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIH0KICB9CgogIGludCB0b2tlbml6ZU11bHRpTGluZUNvbW1lbnQoaW50IG5leHQsIGludCBzdGFydCkgewogICAgYm9vbCBhc2NpaU9ubHlDb21tZW50ID0gdHJ1ZTsgLy8gVHJhY2sgaWYgdGhlIGVudGlyZSBjb21tZW50IGlzIEFTQ0lJLgogICAgYm9vbCBhc2NpaU9ubHlMaW5lcyA9IHRydWU7IC8vIFRyYWNrIEFTQ0lJIHNpbmNlIHRoZSBsYXN0IGhhbmRsZVVuaWNvZGUuCiAgICBpbnQgdW5pY29kZVN0YXJ0ID0gc3RhcnQ7CiAgICBpbnQgbmVzdGluZyA9IDE7CiAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgYm9vbCBkYXJ0ZG9jID0gaWRlbnRpY2FsKCRTVEFSLCBuZXh0KTsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGlmIChpZGVudGljYWwoJEVPRiwgbmV4dCkpIHsKICAgICAgICBpZiAoIWFzY2lpT25seUxpbmVzKSBoYW5kbGVVbmljb2RlKHVuaWNvZGVTdGFydCk7CiAgICAgICAgcHJlcGVuZEVycm9yVG9rZW4obmV3IFVudGVybWluYXRlZFRva2VuKAogICAgICAgICAgICBtZXNzYWdlVW50ZXJtaW5hdGVkQ29tbWVudCwgdG9rZW5TdGFydCwgc3RyaW5nT2Zmc2V0KSk7CiAgICAgICAgYWR2YW5jZUFmdGVyRXJyb3IodHJ1ZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCRTVEFSLCBuZXh0KSkgewogICAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgICAgaWYgKGlkZW50aWNhbCgkU0xBU0gsIG5leHQpKSB7CiAgICAgICAgICAtLW5lc3Rpbmc7CiAgICAgICAgICBpZiAoMCA9PSBuZXN0aW5nKSB7CiAgICAgICAgICAgIGlmICghYXNjaWlPbmx5TGluZXMpIGhhbmRsZVVuaWNvZGUodW5pY29kZVN0YXJ0KTsKICAgICAgICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgICAgICAgaWYgKGRhcnRkb2MpIHsKICAgICAgICAgICAgICBhcHBlbmREYXJ0RG9jKAogICAgICAgICAgICAgICAgICBzdGFydCwgVG9rZW5UeXBlLk1VTFRJX0xJTkVfQ09NTUVOVCwgYXNjaWlPbmx5Q29tbWVudCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgYXBwZW5kQ29tbWVudCgKICAgICAgICAgICAgICAgICAgc3RhcnQsIFRva2VuVHlwZS5NVUxUSV9MSU5FX0NPTU1FTlQsIGFzY2lpT25seUNvbW1lbnQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCRTTEFTSCwgbmV4dCkpIHsKICAgICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICAgIGlmIChpZGVudGljYWwoJFNUQVIsIG5leHQpKSB7CiAgICAgICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICAgICAgKytuZXN0aW5nOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwobmV4dCwgJExGKSkgewogICAgICAgIGlmICghYXNjaWlPbmx5TGluZXMpIHsKICAgICAgICAgIC8vIFN5bmNocm9uaXplIHRoZSBzdHJpbmcgb2Zmc2V0IGluIHRoZSB1dGY4IHNjYW5uZXIuCiAgICAgICAgICBoYW5kbGVVbmljb2RlKHVuaWNvZGVTdGFydCk7CiAgICAgICAgICBhc2NpaU9ubHlMaW5lcyA9IHRydWU7CiAgICAgICAgICB1bmljb2RlU3RhcnQgPSBzY2FuT2Zmc2V0OwogICAgICAgIH0KICAgICAgICBsaW5lRmVlZEluTXVsdGlsaW5lKCk7CiAgICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAobmV4dCA+IDEyNykgewogICAgICAgICAgYXNjaWlPbmx5TGluZXMgPSBmYWxzZTsKICAgICAgICAgIGFzY2lpT25seUNvbW1lbnQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5leHQ7CiAgfQoKICB2b2lkIGFwcGVuZENvbW1lbnQoaW50IHN0YXJ0LCBUb2tlblR5cGUgdHlwZSwgYm9vbCBhc2NpaU9ubHkpIHsKICAgIGlmICghaW5jbHVkZUNvbW1lbnRzKSByZXR1cm47CiAgICBDb21tZW50VG9rZW4gbmV3Q29tbWVudCA9IGNyZWF0ZUNvbW1lbnRUb2tlbih0eXBlLCBzdGFydCwgYXNjaWlPbmx5KTsKICAgIF9hcHBlbmRUb0NvbW1lbnRTdHJlYW0obmV3Q29tbWVudCk7CiAgfQoKICB2b2lkIGFwcGVuZERhcnREb2MoaW50IHN0YXJ0LCBUb2tlblR5cGUgdHlwZSwgYm9vbCBhc2NpaU9ubHkpIHsKICAgIGlmICghaW5jbHVkZUNvbW1lbnRzKSByZXR1cm47CiAgICBUb2tlbiBuZXdDb21tZW50ID0gY3JlYXRlRGFydERvY1Rva2VuKHR5cGUsIHN0YXJ0LCBhc2NpaU9ubHkpOwogICAgX2FwcGVuZFRvQ29tbWVudFN0cmVhbShuZXdDb21tZW50KTsKICB9CgogIC8qKgogICAqIEFwcGVuZCB0aGUgZ2l2ZW4gdG9rZW4gdG8gdGhlIFt0YWlsXSBvZiB0aGUgY3VycmVudCBzdHJlYW0gb2YgdG9rZW5zLgogICAqLwogIHZvaWQgYXBwZW5kVG9rZW4oVG9rZW4gdG9rZW4pIHsKICAgIHRhaWwubmV4dCA9IHRva2VuOwogICAgdG9rZW4ucHJldmlvdXMgPSB0YWlsOwogICAgdGFpbCA9IHRva2VuOwogICAgaWYgKGNvbW1lbnRzICE9IG51bGwgJiYgY29tbWVudHMgPT0gdG9rZW4ucHJlY2VkaW5nQ29tbWVudHMpIHsKICAgICAgY29tbWVudHMgPSBudWxsOwogICAgICBjb21tZW50c1RhaWwgPSBudWxsOwogICAgfSBlbHNlIHsKICAgICAgLy8gSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIgdG8gY29uc3RydWN0IHRoZSB0b2tlbgogICAgICAvLyBiZWluZyBhcHBlbmRlZCB3aXRoIHByZWNlZGluZyBjb21tZW50cyBpZiBhbnkKICAgICAgYXNzZXJ0KGNvbW1lbnRzID09IG51bGwgfHwgdG9rZW4uaXNTeW50aGV0aWMgfHwgdG9rZW4gaXMgRXJyb3JUb2tlbik7CiAgICB9CiAgfQoKICB2b2lkIF9hcHBlbmRUb0NvbW1lbnRTdHJlYW0oVG9rZW4gbmV3Q29tbWVudCkgewogICAgaWYgKGNvbW1lbnRzID09IG51bGwpIHsKICAgICAgY29tbWVudHMgPSBuZXdDb21tZW50OwogICAgICBjb21tZW50c1RhaWwgPSBjb21tZW50czsKICAgIH0gZWxzZSB7CiAgICAgIGNvbW1lbnRzVGFpbC5uZXh0ID0gbmV3Q29tbWVudDsKICAgICAgY29tbWVudHNUYWlsLm5leHQucHJldmlvdXMgPSBjb21tZW50c1RhaWw7CiAgICAgIGNvbW1lbnRzVGFpbCA9IGNvbW1lbnRzVGFpbC5uZXh0OwogICAgfQogIH0KCiAgaW50IHRva2VuaXplUmF3U3RyaW5nS2V5d29yZE9ySWRlbnRpZmllcihpbnQgbmV4dCkgewogICAgLy8gW25leHRdIGlzICRyLgogICAgaW50IG5leHRuZXh0ID0gcGVlaygpOwogICAgaWYgKGlkZW50aWNhbChuZXh0bmV4dCwgJERRKSB8fCBpZGVudGljYWwobmV4dG5leHQsICRTUSkpIHsKICAgICAgaW50IHN0YXJ0ID0gc2Nhbk9mZnNldDsKICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgcmV0dXJuIHRva2VuaXplU3RyaW5nKG5leHQsIHN0YXJ0LCB0cnVlKTsKICAgIH0KICAgIHJldHVybiB0b2tlbml6ZUtleXdvcmRPcklkZW50aWZpZXIobmV4dCwgdHJ1ZSk7CiAgfQoKICBpbnQgdG9rZW5pemVLZXl3b3JkT3JJZGVudGlmaWVyKGludCBuZXh0LCBib29sIGFsbG93RG9sbGFyKSB7CiAgICBLZXl3b3JkU3RhdGUgc3RhdGUgPSBLZXl3b3JkU3RhdGUuS0VZV09SRF9TVEFURTsKICAgIGludCBzdGFydCA9IHNjYW5PZmZzZXQ7CiAgICAvLyBXZSBhbGxvdyBhIGxlYWRpbmcgY2FwaXRhbCBjaGFyYWN0ZXIuCiAgICBpZiAoJEEgPD0gbmV4dCAmJiBuZXh0IDw9ICRaKSB7CiAgICAgIHN0YXRlID0gc3RhdGUubmV4dENhcGl0YWwobmV4dCk7CiAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICB9IGVsc2UgaWYgKCRhIDw9IG5leHQgJiYgbmV4dCA8PSAkeikgewogICAgICAvLyBEbyB0aGUgZmlyc3QgbmV4dCBjYWxsIG91dHNpZGUgdGhlIGxvb3AgdG8gYXZvaWQgYW4gYWRkaXRpb25hbCB0ZXN0CiAgICAgIC8vIGFuZCB0byBtYWtlIHRoZSBsb29wIG1vbm9tb3JwaGljLgogICAgICBzdGF0ZSA9IHN0YXRlLm5leHQobmV4dCk7CiAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICB9CiAgICB3aGlsZSAoc3RhdGUgIT0gbnVsbCAmJiAkYSA8PSBuZXh0ICYmIG5leHQgPD0gJHopIHsKICAgICAgc3RhdGUgPSBzdGF0ZS5uZXh0KG5leHQpOwogICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgfQogICAgaWYgKHN0YXRlID09IG51bGwgfHwgc3RhdGUua2V5d29yZCA9PSBudWxsKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZUlkZW50aWZpZXIobmV4dCwgc3RhcnQsIGFsbG93RG9sbGFyKTsKICAgIH0KICAgIGlmICghX2VuYWJsZUV4dGVuc2lvbk1ldGhvZHMgJiYgc3RhdGUua2V5d29yZCA9PSBLZXl3b3JkLkVYVEVOU0lPTikgewogICAgICByZXR1cm4gdG9rZW5pemVJZGVudGlmaWVyKG5leHQsIHN0YXJ0LCBhbGxvd0RvbGxhcik7CiAgICB9CiAgICBpZiAoIV9lbmFibGVOb25OdWxsYWJsZSAmJgogICAgICAgIChzdGF0ZS5rZXl3b3JkID09IEtleXdvcmQuTEFURSB8fCBzdGF0ZS5rZXl3b3JkID09IEtleXdvcmQuUkVRVUlSRUQpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZUlkZW50aWZpZXIobmV4dCwgc3RhcnQsIGFsbG93RG9sbGFyKTsKICAgIH0KICAgIGlmICgoJEEgPD0gbmV4dCAmJiBuZXh0IDw9ICRaKSB8fAogICAgICAgICgkMCA8PSBuZXh0ICYmIG5leHQgPD0gJDkpIHx8CiAgICAgICAgaWRlbnRpY2FsKG5leHQsICRfKSB8fAogICAgICAgIGlkZW50aWNhbChuZXh0LCAkJCkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplSWRlbnRpZmllcihuZXh0LCBzdGFydCwgYWxsb3dEb2xsYXIpOwogICAgfSBlbHNlIHsKICAgICAgYXBwZW5kS2V5d29yZFRva2VuKHN0YXRlLmtleXdvcmQpOwogICAgICByZXR1cm4gbmV4dDsKICAgIH0KICB9CgogIC8qKgogICAqIFthbGxvd0RvbGxhcl0gY2FuIGV4Y2x1ZGUgJyQnLCB3aGljaCBpcyBub3QgYWxsb3dlZCBhcyBwYXJ0IG9mIGEgc3RyaW5nCiAgICogaW50ZXJwb2xhdGlvbiBpZGVudGlmaWVyLgogICAqLwogIGludCB0b2tlbml6ZUlkZW50aWZpZXIoaW50IG5leHQsIGludCBzdGFydCwgYm9vbCBhbGxvd0RvbGxhcikgewogICAgd2hpbGUgKHRydWUpIHsKICAgICAgaWYgKF9pc0lkZW50aWZpZXJDaGFyKG5leHQsIGFsbG93RG9sbGFyKSkgewogICAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gSWRlbnRpZmllciBlbmRzIGhlcmUuCiAgICAgICAgaWYgKHN0YXJ0ID09IHNjYW5PZmZzZXQpIHsKICAgICAgICAgIHJldHVybiB1bmV4cGVjdGVkKG5leHQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhcHBlbmRTdWJzdHJpbmdUb2tlbihUb2tlblR5cGUuSURFTlRJRklFUiwgc3RhcnQsIHRydWUpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5leHQ7CiAgfQoKICBpbnQgdG9rZW5pemVBdChpbnQgbmV4dCkgewogICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5BVCk7CiAgICByZXR1cm4gYWR2YW5jZSgpOwogIH0KCiAgaW50IHRva2VuaXplU3RyaW5nKGludCBuZXh0LCBpbnQgc3RhcnQsIGJvb2wgcmF3KSB7CiAgICBpbnQgcXVvdGVDaGFyID0gbmV4dDsKICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICBpZiAoaWRlbnRpY2FsKHF1b3RlQ2hhciwgbmV4dCkpIHsKICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgaWYgKGlkZW50aWNhbChxdW90ZUNoYXIsIG5leHQpKSB7CiAgICAgICAgLy8gTXVsdGlsaW5lIHN0cmluZy4KICAgICAgICByZXR1cm4gdG9rZW5pemVNdWx0aUxpbmVTdHJpbmcocXVvdGVDaGFyLCBzdGFydCwgcmF3KTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBFbXB0eSBzdHJpbmcuCiAgICAgICAgYXBwZW5kU3Vic3RyaW5nVG9rZW4oVG9rZW5UeXBlLlNUUklORywgc3RhcnQsIHRydWUpOwogICAgICAgIHJldHVybiBuZXh0OwogICAgICB9CiAgICB9CiAgICBpZiAocmF3KSB7CiAgICAgIHJldHVybiB0b2tlbml6ZVNpbmdsZUxpbmVSYXdTdHJpbmcobmV4dCwgcXVvdGVDaGFyLCBzdGFydCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gdG9rZW5pemVTaW5nbGVMaW5lU3RyaW5nKG5leHQsIHF1b3RlQ2hhciwgc3RhcnQpOwogICAgfQogIH0KCiAgLyoqCiAgICogW25leHRdIGlzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIHF1b3RlLgogICAqIFtxdW90ZVN0YXJ0XSBpcyB0aGUgc2Nhbk9mZnNldCBvZiB0aGUgcXVvdGUuCiAgICoKICAgKiBUaGUgdG9rZW4gY29udGFpbnMgYSBzdWJzdHJpbmcgb2YgdGhlIHNvdXJjZSBmaWxlLCBpbmNsdWRpbmcgdGhlCiAgICogc3RyaW5nIHF1b3RlcywgYmFja3NsYXNoZXMgZm9yIGVzY2FwaW5nLiBGb3IgaW50ZXJwb2xhdGVkIHN0cmluZ3MsCiAgICogdGhlIHBhcnRzIGJlZm9yZSBhbmQgYWZ0ZXIgYXJlIHNlcGFyYXRlIHRva2Vucy4KICAgKgogICAqICAgImEgJGIgYyIKICAgKgogICAqIGdpdmVzIFN0cmluZ1Rva2VuKCJhICQpLCBTdHJpbmdUb2tlbihiKSBhbmQgU3RyaW5nVG9rZW4oIGMiKS4KICAgKi8KICBpbnQgdG9rZW5pemVTaW5nbGVMaW5lU3RyaW5nKGludCBuZXh0LCBpbnQgcXVvdGVDaGFyLCBpbnQgcXVvdGVTdGFydCkgewogICAgaW50IHN0YXJ0ID0gcXVvdGVTdGFydDsKICAgIGJvb2wgYXNjaWlPbmx5ID0gdHJ1ZTsKICAgIHdoaWxlICghaWRlbnRpY2FsKG5leHQsIHF1b3RlQ2hhcikpIHsKICAgICAgaWYgKGlkZW50aWNhbChuZXh0LCAkQkFDS1NMQVNIKSkgewogICAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKG5leHQsICQkKSkgewogICAgICAgIGlmICghYXNjaWlPbmx5KSBoYW5kbGVVbmljb2RlKHN0YXJ0KTsKICAgICAgICBuZXh0ID0gdG9rZW5pemVTdHJpbmdJbnRlcnBvbGF0aW9uKHN0YXJ0LCBhc2NpaU9ubHkpOwogICAgICAgIHN0YXJ0ID0gc2Nhbk9mZnNldDsKICAgICAgICBhc2NpaU9ubHkgPSB0cnVlOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChuZXh0IDw9ICRDUiAmJgogICAgICAgICAgKGlkZW50aWNhbChuZXh0LCAkTEYpIHx8CiAgICAgICAgICAgICAgaWRlbnRpY2FsKG5leHQsICRDUikgfHwKICAgICAgICAgICAgICBpZGVudGljYWwobmV4dCwgJEVPRikpKSB7CiAgICAgICAgaWYgKCFhc2NpaU9ubHkpIGhhbmRsZVVuaWNvZGUoc3RhcnQpOwogICAgICAgIHVudGVybWluYXRlZFN0cmluZyhxdW90ZUNoYXIsIHF1b3RlU3RhcnQsIHN0YXJ0LAogICAgICAgICAgICBhc2NpaU9ubHk6IGFzY2lpT25seSwgaXNNdWx0aUxpbmU6IGZhbHNlLCBpc1JhdzogZmFsc2UpOwogICAgICAgIHJldHVybiBuZXh0OwogICAgICB9CiAgICAgIGlmIChuZXh0ID4gMTI3KSBhc2NpaU9ubHkgPSBmYWxzZTsKICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIH0KICAgIGlmICghYXNjaWlPbmx5KSBoYW5kbGVVbmljb2RlKHN0YXJ0KTsKICAgIC8vIEFkdmFuY2UgcGFzdCB0aGUgcXVvdGUgY2hhcmFjdGVyLgogICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIGFwcGVuZFN1YnN0cmluZ1Rva2VuKFRva2VuVHlwZS5TVFJJTkcsIHN0YXJ0LCBhc2NpaU9ubHkpOwogICAgcmV0dXJuIG5leHQ7CiAgfQoKICBpbnQgdG9rZW5pemVTdHJpbmdJbnRlcnBvbGF0aW9uKGludCBzdGFydCwgYm9vbCBhc2NpaU9ubHkpIHsKICAgIGFwcGVuZFN1YnN0cmluZ1Rva2VuKFRva2VuVHlwZS5TVFJJTkcsIHN0YXJ0LCBhc2NpaU9ubHkpOwogICAgYmVnaW5Ub2tlbigpOyAvLyAkIHN0YXJ0cyBoZXJlLgogICAgaW50IG5leHQgPSBhZHZhbmNlKCk7CiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRPUEVOX0NVUkxZX0JSQUNLRVQpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZUludGVycG9sYXRlZEV4cHJlc3Npb24obmV4dCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gdG9rZW5pemVJbnRlcnBvbGF0ZWRJZGVudGlmaWVyKG5leHQpOwogICAgfQogIH0KCiAgaW50IHRva2VuaXplSW50ZXJwb2xhdGVkRXhwcmVzc2lvbihpbnQgbmV4dCkgewogICAgYXBwZW5kQmVnaW5Hcm91cChUb2tlblR5cGUuU1RSSU5HX0lOVEVSUE9MQVRJT05fRVhQUkVTU0lPTik7CiAgICBiZWdpblRva2VuKCk7IC8vIFRoZSBleHByZXNzaW9uIHN0YXJ0cyBoZXJlLgogICAgbmV4dCA9IGFkdmFuY2UoKTsgLy8gTW92ZSBwYXN0IHRoZSBjdXJseSBicmFja2V0LgogICAgd2hpbGUgKCFpZGVudGljYWwobmV4dCwgJEVPRikgJiYgIWlkZW50aWNhbChuZXh0LCAkU1RYKSkgewogICAgICBuZXh0ID0gYmlnU3dpdGNoKG5leHQpOwogICAgfQogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkRU9GKSkgewogICAgICBiZWdpblRva2VuKCk7CiAgICAgIGRpc2NhcmRJbnRlcnBvbGF0aW9uKCk7CiAgICAgIHJldHVybiBuZXh0OwogICAgfQogICAgbmV4dCA9IGFkdmFuY2UoKTsgLy8gTW92ZSBwYXN0IHRoZSAkU1RYLgogICAgYmVnaW5Ub2tlbigpOyAvLyBUaGUgc3RyaW5nIGludGVycG9sYXRpb24gc3VmZml4IHN0YXJ0cyBoZXJlLgogICAgcmV0dXJuIG5leHQ7CiAgfQoKICBpbnQgdG9rZW5pemVJbnRlcnBvbGF0ZWRJZGVudGlmaWVyKGludCBuZXh0KSB7CiAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLlNUUklOR19JTlRFUlBPTEFUSU9OX0lERU5USUZJRVIpOwoKICAgIGlmICgkYSA8PSBuZXh0ICYmIG5leHQgPD0gJHogfHwKICAgICAgICAkQSA8PSBuZXh0ICYmIG5leHQgPD0gJFogfHwKICAgICAgICBpZGVudGljYWwobmV4dCwgJF8pKSB7CiAgICAgIGJlZ2luVG9rZW4oKTsgLy8gVGhlIGlkZW50aWZpZXIgc3RhcnRzIGhlcmUuCiAgICAgIG5leHQgPSB0b2tlbml6ZUtleXdvcmRPcklkZW50aWZpZXIobmV4dCwgZmFsc2UpOwogICAgfSBlbHNlIHsKICAgICAgYmVnaW5Ub2tlbigpOyAvLyBUaGUgc3ludGhldGljIGlkZW50aWZpZXIgc3RhcnRzIGhlcmUuCiAgICAgIGFwcGVuZFN5bnRoZXRpY1N1YnN0cmluZ1Rva2VuKFRva2VuVHlwZS5JREVOVElGSUVSLCBzY2FuT2Zmc2V0LCB0cnVlLCAnJyk7CiAgICAgIHByZXBlbmRFcnJvclRva2VuKG5ldyBVbnRlcm1pbmF0ZWRUb2tlbigKICAgICAgICAgIG1lc3NhZ2VVbmV4cGVjdGVkRG9sbGFySW5TdHJpbmcsIHRva2VuU3RhcnQsIHN0cmluZ09mZnNldCkpOwogICAgfQogICAgYmVnaW5Ub2tlbigpOyAvLyBUaGUgc3RyaW5nIGludGVycG9sYXRpb24gc3VmZml4IHN0YXJ0cyBoZXJlLgogICAgcmV0dXJuIG5leHQ7CiAgfQoKICBpbnQgdG9rZW5pemVTaW5nbGVMaW5lUmF3U3RyaW5nKGludCBuZXh0LCBpbnQgcXVvdGVDaGFyLCBpbnQgcXVvdGVTdGFydCkgewogICAgYm9vbCBhc2NpaU9ubHkgPSB0cnVlOwogICAgd2hpbGUgKG5leHQgIT0gJEVPRikgewogICAgICBpZiAoaWRlbnRpY2FsKG5leHQsIHF1b3RlQ2hhcikpIHsKICAgICAgICBpZiAoIWFzY2lpT25seSkgaGFuZGxlVW5pY29kZShxdW90ZVN0YXJ0KTsKICAgICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICAgIGFwcGVuZFN1YnN0cmluZ1Rva2VuKFRva2VuVHlwZS5TVFJJTkcsIHF1b3RlU3RhcnQsIGFzY2lpT25seSk7CiAgICAgICAgcmV0dXJuIG5leHQ7CiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKG5leHQsICRMRikgfHwgaWRlbnRpY2FsKG5leHQsICRDUikpIHsKICAgICAgICBpZiAoIWFzY2lpT25seSkgaGFuZGxlVW5pY29kZShxdW90ZVN0YXJ0KTsKICAgICAgICB1bnRlcm1pbmF0ZWRTdHJpbmcocXVvdGVDaGFyLCBxdW90ZVN0YXJ0LCBxdW90ZVN0YXJ0LAogICAgICAgICAgICBhc2NpaU9ubHk6IGFzY2lpT25seSwgaXNNdWx0aUxpbmU6IGZhbHNlLCBpc1JhdzogdHJ1ZSk7CiAgICAgICAgcmV0dXJuIG5leHQ7CiAgICAgIH0gZWxzZSBpZiAobmV4dCA+IDEyNykgewogICAgICAgIGFzY2lpT25seSA9IGZhbHNlOwogICAgICB9CiAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICB9CiAgICBpZiAoIWFzY2lpT25seSkgaGFuZGxlVW5pY29kZShxdW90ZVN0YXJ0KTsKICAgIHVudGVybWluYXRlZFN0cmluZyhxdW90ZUNoYXIsIHF1b3RlU3RhcnQsIHF1b3RlU3RhcnQsCiAgICAgICAgYXNjaWlPbmx5OiBhc2NpaU9ubHksIGlzTXVsdGlMaW5lOiBmYWxzZSwgaXNSYXc6IHRydWUpOwogICAgcmV0dXJuIG5leHQ7CiAgfQoKICBpbnQgdG9rZW5pemVNdWx0aUxpbmVSYXdTdHJpbmcoaW50IHF1b3RlQ2hhciwgaW50IHF1b3RlU3RhcnQpIHsKICAgIGJvb2wgYXNjaWlPbmx5U3RyaW5nID0gdHJ1ZTsKICAgIGJvb2wgYXNjaWlPbmx5TGluZSA9IHRydWU7CiAgICBpbnQgdW5pY29kZVN0YXJ0ID0gcXVvdGVTdGFydDsKICAgIGludCBuZXh0ID0gYWR2YW5jZSgpOyAvLyBBZHZhbmNlIHBhc3QgdGhlIChsYXN0KSBxdW90ZSAob2YgdGhyZWUpLgogICAgb3V0ZXI6CiAgICB3aGlsZSAoIWlkZW50aWNhbChuZXh0LCAkRU9GKSkgewogICAgICB3aGlsZSAoIWlkZW50aWNhbChuZXh0LCBxdW90ZUNoYXIpKSB7CiAgICAgICAgaWYgKGlkZW50aWNhbChuZXh0LCAkTEYpKSB7CiAgICAgICAgICBpZiAoIWFzY2lpT25seUxpbmUpIHsKICAgICAgICAgICAgLy8gU3luY2hyb25pemUgdGhlIHN0cmluZyBvZmZzZXQgaW4gdGhlIHV0Zjggc2Nhbm5lci4KICAgICAgICAgICAgaGFuZGxlVW5pY29kZSh1bmljb2RlU3RhcnQpOwogICAgICAgICAgICBhc2NpaU9ubHlMaW5lID0gdHJ1ZTsKICAgICAgICAgICAgdW5pY29kZVN0YXJ0ID0gc2Nhbk9mZnNldDsKICAgICAgICAgIH0KICAgICAgICAgIGxpbmVGZWVkSW5NdWx0aWxpbmUoKTsKICAgICAgICB9IGVsc2UgaWYgKG5leHQgPiAxMjcpIHsKICAgICAgICAgIGFzY2lpT25seUxpbmUgPSBmYWxzZTsKICAgICAgICAgIGFzY2lpT25seVN0cmluZyA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICAgIGlmIChpZGVudGljYWwobmV4dCwgJEVPRikpIGJyZWFrIG91dGVyOwogICAgICB9CiAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgIGlmIChpZGVudGljYWwobmV4dCwgcXVvdGVDaGFyKSkgewogICAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgICAgaWYgKGlkZW50aWNhbChuZXh0LCBxdW90ZUNoYXIpKSB7CiAgICAgICAgICBpZiAoIWFzY2lpT25seUxpbmUpIGhhbmRsZVVuaWNvZGUodW5pY29kZVN0YXJ0KTsKICAgICAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgICAgICBhcHBlbmRTdWJzdHJpbmdUb2tlbihUb2tlblR5cGUuU1RSSU5HLCBxdW90ZVN0YXJ0LCBhc2NpaU9ubHlTdHJpbmcpOwogICAgICAgICAgcmV0dXJuIG5leHQ7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoIWFzY2lpT25seUxpbmUpIGhhbmRsZVVuaWNvZGUodW5pY29kZVN0YXJ0KTsKICAgIHVudGVybWluYXRlZFN0cmluZyhxdW90ZUNoYXIsIHF1b3RlU3RhcnQsIHF1b3RlU3RhcnQsCiAgICAgICAgYXNjaWlPbmx5OiBhc2NpaU9ubHlMaW5lLCBpc011bHRpTGluZTogdHJ1ZSwgaXNSYXc6IHRydWUpOwogICAgcmV0dXJuIG5leHQ7CiAgfQoKICBpbnQgdG9rZW5pemVNdWx0aUxpbmVTdHJpbmcoaW50IHF1b3RlQ2hhciwgaW50IHF1b3RlU3RhcnQsIGJvb2wgcmF3KSB7CiAgICBpZiAocmF3KSByZXR1cm4gdG9rZW5pemVNdWx0aUxpbmVSYXdTdHJpbmcocXVvdGVDaGFyLCBxdW90ZVN0YXJ0KTsKICAgIGludCBzdGFydCA9IHF1b3RlU3RhcnQ7CiAgICBib29sIGFzY2lpT25seVN0cmluZyA9IHRydWU7CiAgICBib29sIGFzY2lpT25seUxpbmUgPSB0cnVlOwogICAgaW50IHVuaWNvZGVTdGFydCA9IHN0YXJ0OwogICAgaW50IG5leHQgPSBhZHZhbmNlKCk7IC8vIEFkdmFuY2UgcGFzdCB0aGUgKGxhc3QpIHF1b3RlIChvZiB0aHJlZSkuCiAgICB3aGlsZSAoIWlkZW50aWNhbChuZXh0LCAkRU9GKSkgewogICAgICBpZiAoaWRlbnRpY2FsKG5leHQsICQkKSkgewogICAgICAgIGlmICghYXNjaWlPbmx5TGluZSkgaGFuZGxlVW5pY29kZSh1bmljb2RlU3RhcnQpOwogICAgICAgIG5leHQgPSB0b2tlbml6ZVN0cmluZ0ludGVycG9sYXRpb24oc3RhcnQsIGFzY2lpT25seVN0cmluZyk7CiAgICAgICAgc3RhcnQgPSBzY2FuT2Zmc2V0OwogICAgICAgIHVuaWNvZGVTdGFydCA9IHN0YXJ0OwogICAgICAgIGFzY2lpT25seVN0cmluZyA9IHRydWU7IC8vIEEgbmV3IHN0cmluZyB0b2tlbiBpcyBjcmVhdGVkIGZvciB0aGUgcmVzdC4KICAgICAgICBhc2NpaU9ubHlMaW5lID0gdHJ1ZTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoaWRlbnRpY2FsKG5leHQsIHF1b3RlQ2hhcikpIHsKICAgICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICAgIGlmIChpZGVudGljYWwobmV4dCwgcXVvdGVDaGFyKSkgewogICAgICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgICAgIGlmIChpZGVudGljYWwobmV4dCwgcXVvdGVDaGFyKSkgewogICAgICAgICAgICBpZiAoIWFzY2lpT25seUxpbmUpIGhhbmRsZVVuaWNvZGUodW5pY29kZVN0YXJ0KTsKICAgICAgICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgICAgICAgYXBwZW5kU3Vic3RyaW5nVG9rZW4oVG9rZW5UeXBlLlNUUklORywgc3RhcnQsIGFzY2lpT25seVN0cmluZyk7CiAgICAgICAgICAgIHJldHVybiBuZXh0OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRCQUNLU0xBU0gpKSB7CiAgICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRFT0YpKSBicmVhazsKICAgICAgfQogICAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRMRikpIHsKICAgICAgICBpZiAoIWFzY2lpT25seUxpbmUpIHsKICAgICAgICAgIC8vIFN5bmNocm9uaXplIHRoZSBzdHJpbmcgb2Zmc2V0IGluIHRoZSB1dGY4IHNjYW5uZXIuCiAgICAgICAgICBoYW5kbGVVbmljb2RlKHVuaWNvZGVTdGFydCk7CiAgICAgICAgICBhc2NpaU9ubHlMaW5lID0gdHJ1ZTsKICAgICAgICAgIHVuaWNvZGVTdGFydCA9IHNjYW5PZmZzZXQ7CiAgICAgICAgfQogICAgICAgIGxpbmVGZWVkSW5NdWx0aWxpbmUoKTsKICAgICAgfSBlbHNlIGlmIChuZXh0ID4gMTI3KSB7CiAgICAgICAgYXNjaWlPbmx5U3RyaW5nID0gZmFsc2U7CiAgICAgICAgYXNjaWlPbmx5TGluZSA9IGZhbHNlOwogICAgICB9CiAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICB9CiAgICBpZiAoIWFzY2lpT25seUxpbmUpIGhhbmRsZVVuaWNvZGUodW5pY29kZVN0YXJ0KTsKICAgIHVudGVybWluYXRlZFN0cmluZyhxdW90ZUNoYXIsIHF1b3RlU3RhcnQsIHN0YXJ0LAogICAgICAgIGFzY2lpT25seTogYXNjaWlPbmx5U3RyaW5nLCBpc011bHRpTGluZTogdHJ1ZSwgaXNSYXc6IGZhbHNlKTsKICAgIHJldHVybiBuZXh0OwogIH0KCiAgaW50IHVuZXhwZWN0ZWQoaW50IGNoYXJhY3RlcikgewogICAgRXJyb3JUb2tlbiBlcnJvclRva2VuID0KICAgICAgICBidWlsZFVuZXhwZWN0ZWRDaGFyYWN0ZXJUb2tlbihjaGFyYWN0ZXIsIHRva2VuU3RhcnQpOwogICAgaWYgKGVycm9yVG9rZW4gaXMgTm9uQXNjaWlJZGVudGlmaWVyVG9rZW4pIHsKICAgICAgaW50IGNoYXJPZmZzZXQ7CiAgICAgIExpc3Q8aW50PiBjb2RlVW5pdHMgPSA8aW50PltdOwogICAgICBpZiAodGFpbC50eXBlID09IFRva2VuVHlwZS5JREVOVElGSUVSICYmIHRhaWwuY2hhckVuZCA9PSB0b2tlblN0YXJ0KSB7CiAgICAgICAgY2hhck9mZnNldCA9IHRhaWwuY2hhck9mZnNldDsKICAgICAgICBjb2RlVW5pdHMuYWRkQWxsKHRhaWwubGV4ZW1lLmNvZGVVbml0cyk7CiAgICAgICAgdGFpbCA9IHRhaWwucHJldmlvdXM7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY2hhck9mZnNldCA9IGVycm9yVG9rZW4uY2hhck9mZnNldDsKICAgICAgfQogICAgICBjb2RlVW5pdHMuYWRkKGVycm9yVG9rZW4uY2hhcmFjdGVyKTsKICAgICAgcHJlcGVuZEVycm9yVG9rZW4oZXJyb3JUb2tlbik7CiAgICAgIGludCBuZXh0ID0gYWR2YW5jZUFmdGVyRXJyb3IodHJ1ZSk7CiAgICAgIHdoaWxlIChfaXNJZGVudGlmaWVyQ2hhcihuZXh0LCB0cnVlKSkgewogICAgICAgIGNvZGVVbml0cy5hZGQobmV4dCk7CiAgICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgfQogICAgICBhcHBlbmRUb2tlbihuZXcgU3RyaW5nVG9rZW4uZnJvbVN0cmluZyhUb2tlblR5cGUuSURFTlRJRklFUiwKICAgICAgICAgIG5ldyBTdHJpbmcuZnJvbUNoYXJDb2Rlcyhjb2RlVW5pdHMpLCBjaGFyT2Zmc2V0KSk7CiAgICAgIHJldHVybiBuZXh0OwogICAgfSBlbHNlIHsKICAgICAgcHJlcGVuZEVycm9yVG9rZW4oZXJyb3JUb2tlbik7CiAgICAgIHJldHVybiBhZHZhbmNlQWZ0ZXJFcnJvcih0cnVlKTsKICAgIH0KICB9CgogIHZvaWQgdW50ZXJtaW5hdGVkU3RyaW5nKGludCBxdW90ZUNoYXIsIGludCBxdW90ZVN0YXJ0LCBpbnQgc3RhcnQsCiAgICAgIHtib29sIGFzY2lpT25seSwgYm9vbCBpc011bHRpTGluZSwgYm9vbCBpc1Jhd30pIHsKICAgIFN0cmluZyBzdWZmaXggPSBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoCiAgICAgICAgaXNNdWx0aUxpbmUgPyBbcXVvdGVDaGFyLCBxdW90ZUNoYXIsIHF1b3RlQ2hhcl0gOiBbcXVvdGVDaGFyXSk7CiAgICBTdHJpbmcgcHJlZml4ID0gaXNSYXcgPyAnciRzdWZmaXgnIDogc3VmZml4OwoKICAgIGFwcGVuZFN5bnRoZXRpY1N1YnN0cmluZ1Rva2VuKFRva2VuVHlwZS5TVFJJTkcsIHN0YXJ0LCBhc2NpaU9ubHksIHN1ZmZpeCk7CiAgICAvLyBFbnN1cmUgdGhhdCB0aGUgZXJyb3IgaXMgcmVwb3J0ZWQgb24gYSB2aXNpYmxlIHRva2VuCiAgICBpbnQgZXJyb3JTdGFydCA9IHRva2VuU3RhcnQgPCBzdHJpbmdPZmZzZXQgPyB0b2tlblN0YXJ0IDogcXVvdGVTdGFydDsKICAgIHByZXBlbmRFcnJvclRva2VuKG5ldyBVbnRlcm1pbmF0ZWRTdHJpbmcocHJlZml4LCBlcnJvclN0YXJ0LCBzdHJpbmdPZmZzZXQpKTsKICB9CgogIGludCBhZHZhbmNlQWZ0ZXJFcnJvcihib29sIHNob3VsZEFkdmFuY2UpIHsKICAgIGlmIChhdEVuZE9mRmlsZSgpKSByZXR1cm4gJEVPRjsKICAgIGlmIChzaG91bGRBZHZhbmNlKSB7CiAgICAgIHJldHVybiBhZHZhbmNlKCk7IC8vIEVuc3VyZSBwcm9ncmVzcy4KICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAtMTsKICAgIH0KICB9Cn0KClRva2VuVHlwZSBjbG9zZUJyYWNlSW5mb0ZvcihCZWdpblRva2VuIGJlZ2luKSB7CiAgcmV0dXJuIGNvbnN0IHsKICAgICcoJzogVG9rZW5UeXBlLkNMT1NFX1BBUkVOLAogICAgJ1snOiBUb2tlblR5cGUuQ0xPU0VfU1FVQVJFX0JSQUNLRVQsCiAgICAneyc6IFRva2VuVHlwZS5DTE9TRV9DVVJMWV9CUkFDS0VULAogICAgJzwnOiBUb2tlblR5cGUuR1QsCiAgICByJyR7JzogVG9rZW5UeXBlLkNMT1NFX0NVUkxZX0JSQUNLRVQsCiAgICAnPy5bJzogVG9rZW5UeXBlLkNMT1NFX1NRVUFSRV9CUkFDS0VULAogIH1bYmVnaW4ubGV4ZW1lXTsKfQoKY2xhc3MgTGluZVN0YXJ0cyBleHRlbmRzIE9iamVjdCB3aXRoIExpc3RNaXhpbjxpbnQ+IHsKICBMaXN0PGludD4gYXJyYXk7CiAgaW50IGFycmF5TGVuZ3RoID0gMDsKCiAgTGluZVN0YXJ0cyhpbnQgbnVtYmVyT2ZCeXRlc0hpbnQpIHsKICAgIC8vIExldCdzIGFzc3VtZSB0aGUgYXZlcmFnZSBEYXJ0IGZpbGUgaXMgMzAwIGJ5dGVzLgogICAgaWYgKG51bWJlck9mQnl0ZXNIaW50ID09IG51bGwpIG51bWJlck9mQnl0ZXNIaW50ID0gMzAwOwoKICAgIC8vIExldCdzIGFzc3VtZSB3ZSBoYXZlIG9uIGF2ZXJhZ2UgMjIgYnl0ZXMgcGVyIGxpbmUuCiAgICBmaW5hbCBpbnQgZXhwZWN0ZWROdW1iZXJPZkxpbmVzID0gMSArIChudW1iZXJPZkJ5dGVzSGludCB+LyAyMik7CgogICAgaWYgKG51bWJlck9mQnl0ZXNIaW50ID4gNjU1MzUpIHsKICAgICAgYXJyYXkgPSBuZXcgVWludDMyTGlzdChleHBlY3RlZE51bWJlck9mTGluZXMpOwogICAgfSBlbHNlIHsKICAgICAgYXJyYXkgPSBuZXcgVWludDE2TGlzdChleHBlY3RlZE51bWJlck9mTGluZXMpOwogICAgfQoKICAgIC8vIFRoZSBmaXJzdCBsaW5lIHN0YXJ0cyBhdCBjaGFyYWN0ZXIgb2Zmc2V0IDAuCiAgICBhZGQoMCk7CiAgfQoKICAvLyBJbXBsZW1lbnQgYWJzdHJhY3QgbWVtYmVycyB1c2VkIGJ5IFtMaXN0TWl4aW5dCgogIGludCBnZXQgbGVuZ3RoID0+IGFycmF5TGVuZ3RoOwoKICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBhc3NlcnQoaW5kZXggPCBhcnJheUxlbmd0aCk7CiAgICByZXR1cm4gYXJyYXlbaW5kZXhdOwogIH0KCiAgdm9pZCBzZXQgbGVuZ3RoKGludCBuZXdMZW5ndGgpIHsKICAgIGlmIChuZXdMZW5ndGggPiBhcnJheS5sZW5ndGgpIHsKICAgICAgZ3JvdyhuZXdMZW5ndGgpOwogICAgfQogICAgYXJyYXlMZW5ndGggPSBuZXdMZW5ndGg7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKHZhbHVlID4gNjU1MzUgJiYgYXJyYXkgaXMhIFVpbnQzMkxpc3QpIHsKICAgICAgc3dpdGNoVG9VaW50MzIoYXJyYXkubGVuZ3RoKTsKICAgIH0KICAgIGFycmF5W2luZGV4XSA9IHZhbHVlOwogIH0KCiAgLy8gU3BlY2lhbGl6ZSBtZXRob2RzIGZyb20gW0xpc3RNaXhpbl0uCiAgdm9pZCBhZGQoaW50IHZhbHVlKSB7CiAgICBpZiAoYXJyYXlMZW5ndGggPj0gYXJyYXkubGVuZ3RoKSB7CiAgICAgIGdyb3coMCk7CiAgICB9CiAgICBpZiAodmFsdWUgPiA2NTUzNSAmJiBhcnJheSBpcyEgVWludDMyTGlzdCkgewogICAgICBzd2l0Y2hUb1VpbnQzMihhcnJheS5sZW5ndGgpOwogICAgfQogICAgYXJyYXlbYXJyYXlMZW5ndGgrK10gPSB2YWx1ZTsKICB9CgogIC8vIEhlbHBlciBtZXRob2RzLgoKICB2b2lkIGdyb3coaW50IG5ld0xlbmd0aE1pbmltdW0pIHsKICAgIGludCBuZXdMZW5ndGggPSBhcnJheS5sZW5ndGggKiAyOwogICAgaWYgKG5ld0xlbmd0aCA8IG5ld0xlbmd0aE1pbmltdW0pIG5ld0xlbmd0aCA9IG5ld0xlbmd0aE1pbmltdW07CgogICAgaWYgKGFycmF5IGlzIFVpbnQxNkxpc3QpIHsKICAgICAgZmluYWwgVWludDE2TGlzdCBuZXdBcnJheSA9IG5ldyBVaW50MTZMaXN0KG5ld0xlbmd0aCk7CiAgICAgIG5ld0FycmF5LnNldFJhbmdlKDAsIGFycmF5TGVuZ3RoLCBhcnJheSk7CiAgICAgIGFycmF5ID0gbmV3QXJyYXk7CiAgICB9IGVsc2UgewogICAgICBzd2l0Y2hUb1VpbnQzMihuZXdMZW5ndGgpOwogICAgfQogIH0KCiAgdm9pZCBzd2l0Y2hUb1VpbnQzMihpbnQgbmV3TGVuZ3RoKSB7CiAgICBmaW5hbCBVaW50MzJMaXN0IG5ld0FycmF5ID0gbmV3IFVpbnQzMkxpc3QobmV3TGVuZ3RoKTsKICAgIG5ld0FycmF5LnNldFJhbmdlKDAsIGFycmF5TGVuZ3RoLCBhcnJheSk7CiAgICBhcnJheSA9IG5ld0FycmF5OwogIH0KfQoKLy8vIFtTY2FubmVyQ29uZmlndXJhdGlvbl0gY29udGFpbnMgaW5mb3JtYXRpb24gZm9yIGNvbmZpZ3VyaW5nIHdoaWNoIHRva2VucwovLy8gdGhlIHNjYW5uZXIgcHJvZHVjZXMgYmFzZWQgdXBvbiB0aGUgRGFydCBsYW5ndWFnZSBsZXZlbC4KY2xhc3MgU2Nhbm5lckNvbmZpZ3VyYXRpb24gewogIHN0YXRpYyBjb25zdCBTY2FubmVyQ29uZmlndXJhdGlvbiBjbGFzc2ljID0gY29uc3QgU2Nhbm5lckNvbmZpZ3VyYXRpb24oKTsKICBzdGF0aWMgY29uc3QgU2Nhbm5lckNvbmZpZ3VyYXRpb24gbm9uTnVsbGFibGUgPQogICAgICBjb25zdCBTY2FubmVyQ29uZmlndXJhdGlvbihlbmFibGVOb25OdWxsYWJsZTogdHJ1ZSk7CgogIC8vLyBFeHBlcmltZW50YWwgZmxhZyBmb3IgZW5hYmxpbmcgc2Nhbm5pbmcgb2YgdGhlIGBleHRlbnNpb25gIGtleXdvcmQuCiAgZmluYWwgYm9vbCBlbmFibGVFeHRlbnNpb25NZXRob2RzOwoKICAvLy8gRXhwZXJpbWVudGFsIGZsYWcgZm9yIGVuYWJsaW5nIHNjYW5uaW5nIG9mIE5OQkQgdG9rZW5zCiAgLy8vIHN1Y2ggYXMgJ3JlcXVpcmVkJyBhbmQgJ2xhdGUnCiAgZmluYWwgYm9vbCBlbmFibGVOb25OdWxsYWJsZTsKCiAgLy8vIEV4cGVyaW1lbnRhbCBmbGFnIGZvciBlbmFibGluZyBzY2FubmluZyBvZiBgPj4+YC4KICAvLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvbGFuZ3VhZ2UvaXNzdWVzLzYxCiAgLy8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL2xhbmd1YWdlL2lzc3Vlcy82MAogIGZpbmFsIGJvb2wgZW5hYmxlVHJpcGxlU2hpZnQ7CgogIGNvbnN0IFNjYW5uZXJDb25m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ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb2xsZWN0aW9uOwoKLy8vIEFic3RyYWN0IGltcGxlbWVudGF0aW9uIG9mIGEgbGlzdC4KLy8vCi8vLyBgTGlzdEJhc2VgIGNhbiBiZSB1c2VkIGFzIGEgYmFzZSBjbGFzcyBmb3IgaW1wbGVtZW50aW5nIHRoZSBgTGlzdGAKLy8vIGludGVyZmFjZS4KLy8vCi8vLyBBbGwgb3BlcmF0aW9ucyBhcmUgZGVmaW5lZCBpbiB0ZXJtcyBvZiBgbGVuZ3RoYCwgYG9wZXJhdG9yW11gLAovLy8gYG9wZXJhdG9yW109YCBhbmQgYGxlbmd0aD1gLCB3aGljaCBuZWVkIHRvIGJlIGltcGxlbWVudGVkLgovLy8KLy8vICpOT1RJQ0UqOiBGb3J3YXJkaW5nIGp1c3QgdGhlc2UgZm91ciBvcGVyYXRpb25zIHRvIGEgbm9ybWFsIGdyb3dhYmxlIFtMaXN0XQovLy8gKGFzIGNyZWF0ZWQgYnkgYG5ldyBMaXN0KClgKSB3aWxsIGdpdmUgdmVyeSBiYWQgcGVyZm9ybWFuY2UgZm9yIGBhZGRgIGFuZAovLy8gYGFkZEFsbGAgb3BlcmF0aW9ucyBvZiBgTGlzdEJhc2VgLiBUaGVzZSBvcGVyYXRpb25zIGFyZSBpbXBsZW1lbnRlZCBieQovLy8gaW5jcmVhc2luZyB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGJ5IG9uZSBmb3IgZWFjaCBgYWRkYCBvcGVyYXRpb24sIGFuZAovLy8gcmVwZWF0ZWRseSBpbmNyZWFzaW5nIHRoZSBsZW5ndGggb2YgYSBncm93YWJsZSBsaXN0IGlzIG5vdCBlZmZpY2llbnQuCi8vLyBUbyBhdm9pZCB0aGlzLCBlaXRoZXIgb3ZlcnJpZGUgJ2FkZCcgYW5kICdhZGRBbGwnIHRvIGFsc28gZm9yd2FyZCBkaXJlY3RseQovLy8gdG8gdGhlIGdyb3dhYmxlIGxpc3QsIG9yLCBwcmVmZXJhYmx5LCB1c2UgYERlbGVnYXRpbmdMaXN0YCBmcm9tCi8vLyAicGFja2FnZTpjb2xsZWN0aW9uL3dyYXBwZXJzLmRhcnQiIGluc3RlYWQuCmFic3RyYWN0IGNsYXNzIExpc3RCYXNlPEU+IGV4dGVuZHMgT2JqZWN0IHdpdGggTGlzdE1peGluPEU+IHsKICAvLy8gQ29udmVydCBhIGBMaXN0YCB0byBhIHN0cmluZyBhcyBgW2VhY2gsIGVsZW1lbnQsIGFzLCBzdHJpbmddYC4KICAvLy8KICAvLy8gSGFuZGxlcyBjaXJjdWxhciByZWZlcmVuY2VzIHdoZXJlIGNvbnZlcnRpbmcgb25lIG9mIHRoZSBlbGVtZW50cwogIC8vLyB0byBhIHN0cmluZyBlbmRzIHVwIGNvbnZlcnRpbmcgW2xpc3RdIHRvIGEgc3RyaW5nIGFnYWluLgogIHN0YXRpYyBTdHJpbmcgbGlzdFRvU3RyaW5nKExpc3QgbGlzdCkgPT4KICAgICAgSXRlcmFibGVCYXNlLml0ZXJhYmxlVG9GdWxsU3RyaW5nKGxpc3QsICdbJywgJ10nKTsKfQoKLy8vIEJhc2UgaW1wbGVtZW50YXRpb24gb2YgYSBbTGlzdF0gY2xhc3MuCi8vLwovLy8gYExpc3RNaXhpbmAgY2FuIGJlIHVzZWQgYXMgYSBtaXhpbiB0byBtYWtlIGEgY2xhc3MgaW1wbGVtZW50Ci8vLyB0aGUgYExpc3RgIGludGVyZmFjZS4KLy8vCi8vLyBUaGlzIGltcGxlbWVudHMgYWxsIHJlYWQgb3BlcmF0aW9ucyB1c2luZyBvbmx5IHRoZSBgbGVuZ3RoYCBhbmQKLy8vIGBvcGVyYXRvcltdYCBtZW1iZXJzLiBJdCBpbXBsZW1lbnRzIHdyaXRlIG9wZXJhdGlvbnMgdXNpbmcgdGhvc2UgYW5kCi8vLyBgbGVuZ3RoPWAgYW5kIGBvcGVyYXRvcltdPWAKLy8vCi8vLyAqTk9USUNFKjogRm9yd2FyZGluZyBqdXN0IHRoZXNlIGZvdXIgb3BlcmF0aW9ucyB0byBhIG5vcm1hbCBncm93YWJsZSBbTGlzdF0KLy8vIChhcyBjcmVhdGVkIGJ5IGBuZXcgTGlzdCgpYCkgd2lsbCBnaXZlIHZlcnkgYmFkIHBlcmZvcm1hbmNlIGZvciBgYWRkYCBhbmQKLy8vIGBhZGRBbGxgIG9wZXJhdGlvbnMgb2YgYExpc3RCYXNlYC4gVGhlc2Ugb3BlcmF0aW9ucyBhcmUgaW1wbGVtZW50ZWQgYnkKLy8vIGluY3JlYXNpbmcgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCBieSBvbmUgZm9yIGVhY2ggYGFkZGAgb3BlcmF0aW9uLCBhbmQKLy8vIHJlcGVhdGVkbHkgaW5jcmVhc2luZyB0aGUgbGVuZ3RoIG9mIGEgZ3Jvd2FibGUgbGlzdCBpcyBub3QgZWZmaWNpZW50LgovLy8gVG8gYXZvaWQgdGhpcywgZWl0aGVyIG92ZXJyaWRlICdhZGQnIGFuZCAnYWRkQWxsJyB0byBhbHNvIGZvcndhcmQgZGlyZWN0bHkKLy8vIHRvIHRoZSBncm93YWJsZSBsaXN0LCBvciwgaWYgcG9zc2libGUsIHVzZSBgRGVsZWdhdGluZ0xpc3RgIGZyb20KLy8vICJwYWNrYWdlOmNvbGxlY3Rpb24vd3JhcHBlcnMuZGFydCIgaW5zdGVhZC4KYWJzdHJhY3QgY2xhc3MgTGlzdE1peGluPEU+IGltcGxlbWVudHMgTGlzdDxFPiB7CiAgLy8gSXRlcmFibGUgaW50ZXJmYWNlLgogIC8vIFRPRE8obHJuKTogV2hlbiB3ZSBnZXQgY29tcG9zYWJsZSBtaXhpbnMsIHJldXNlIEl0ZXJhYmxlTWl4aW4gaW5zdGVhZAogIC8vIG9mIHJlZGFjbGF0aW5nIGV2ZXJ5dGhpbmcuCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yID0+IExpc3RJdGVyYXRvcjxFPih0aGlzKTsKCiAgRSBlbGVtZW50QXQoaW50IGluZGV4KSA9PiB0aGlzW2luZGV4XTsKCiAgSXRlcmFibGU8RT4gZm9sbG93ZWRCeShJdGVyYWJsZTxFPiBvdGhlcikgPT4KICAgICAgRm9sbG93ZWRCeUl0ZXJhYmxlPEU+LmZpcnN0RWZmaWNpZW50KHRoaXMsIG90aGVyKTsKCiAgdm9pZCBmb3JFYWNoKHZvaWQgYWN0aW9uKEUgZWxlbWVudCkpIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgYWN0aW9uKHRoaXNbaV0pOwogICAgICBpZiAobGVuZ3RoICE9IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBib29sIGdldCBpc0VtcHR5ID0+IGxlbmd0aCA9PSAwOwoKICBib29sIGdldCBpc05vdEVtcHR5ID0+ICFpc0VtcHR5OwoKICBFIGdldCBmaXJzdCB7CiAgICBpZiAobGVuZ3RoID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgcmV0dXJuIHRoaXNbMF07CiAgfQoKICB2b2lkIHNldCBmaXJzdChFIHZhbHVlKSB7CiAgICBpZiAobGVuZ3RoID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgdGhpc1swXSA9IHZhbHVlOwogIH0KCiAgRSBnZXQgbGFzdCB7CiAgICBpZiAobGVuZ3RoID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgcmV0dXJuIHRoaXNbbGVuZ3RoIC0gMV07CiAgfQoKICB2b2lkIHNldCBsYXN0KEUgdmFsdWUpIHsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB0aGlzW2xlbmd0aCAtIDFdID0gdmFsdWU7CiAgfQoKICBFIGdldCBzaW5nbGUgewogICAgaWYgKGxlbmd0aCA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIGlmIChsZW5ndGggPiAxKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICByZXR1cm4gdGhpc1swXTsKICB9CgogIGJvb2wgY29udGFpbnMoT2JqZWN0IGVsZW1lbnQpIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRoaXNbaV0gPT0gZWxlbWVudCkgcmV0dXJuIHRydWU7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgZXZlcnkoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKCF0ZXN0KHRoaXNbaV0pKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgYm9vbCBhbnkoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRlc3QodGhpc1tpXSkpIHJldHVybiB0cnVlOwogICAgICBpZiAobGVuZ3RoICE9IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBFIGZpcnN0V2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIHtFIG9yRWxzZSgpfSkgewogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBFIGVsZW1lbnQgPSB0aGlzW2ldOwogICAgICBpZiAodGVzdChlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIGxhc3RXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwge0Ugb3JFbHNlKCl9KSB7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gbGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgRSBlbGVtZW50ID0gdGhpc1tpXTsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHJldHVybiBlbGVtZW50OwogICAgICBpZiAobGVuZ3RoICE9IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBzaW5nbGVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwge0Ugb3JFbHNlKCl9KSB7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBFIG1hdGNoOwogICAgYm9vbCBtYXRjaEZvdW5kID0gZmFsc2U7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIEUgZWxlbWVudCA9IHRoaXNbaV07CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgaWYgKG1hdGNoRm91bmQpIHsKICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgICAgICB9CiAgICAgICAgbWF0Y2hGb3VuZCA9IHRydWU7CiAgICAgICAgbWF0Y2ggPSBlbGVtZW50OwogICAgICB9CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChtYXRjaEZvdW5kKSByZXR1cm4gbWF0Y2g7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgU3RyaW5nIGpvaW4oW1N0cmluZyBzZXBhcmF0b3IgPSAiIl0pIHsKICAgIGlmIChsZW5ndGggPT0gMCkgcmV0dXJuICIiOwogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IFN0cmluZ0J1ZmZlcigpLi53cml0ZUFsbCh0aGlzLCBzZXBhcmF0b3IpOwogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgSXRlcmFibGU8RT4gd2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IFdoZXJlSXRlcmFibGU8RT4odGhpcywgdGVzdCk7CgogIEl0ZXJhYmxlPFQ+IHdoZXJlVHlwZTxUPigpID0+IFdoZXJlVHlwZUl0ZXJhYmxlPFQ+KHRoaXMpOwoKICBJdGVyYWJsZTxUPiBtYXA8VD4oVCBmKEUgZWxlbWVudCkpID0+IE1hcHBlZExpc3RJdGVyYWJsZTxFLCBUPih0aGlzLCBmKTsKCiAgSXRlcmFibGU8VD4gZXhwYW5kPFQ+KEl0ZXJhYmxlPFQ+IGYoRSBlbGVtZW50KSkgPT4KICAgICAgRXhwYW5kSXRlcmFibGU8RSwgVD4odGhpcywgZik7CgogIEUgcmVkdWNlKEUgY29tYmluZShFIHByZXZpb3VzVmFsdWUsIEUgZWxlbWVudCkpIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICBFIHZhbHVlID0gdGhpc1swXTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgdmFsdWUgPSBjb21iaW5lKHZhbHVlLCB0aGlzW2ldKTsKICAgICAgaWYgKGxlbmd0aCAhPSB0aGlzLmxlbmd0aCkgewogICAgICAgIHRocm93IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgVCBmb2xkPFQ+KFQgaW5pdGlhbFZhbHVlLCBUIGNvbWJpbmUoVCBwcmV2aW91c1ZhbHVlLCBFIGVsZW1lbnQpKSB7CiAgICB2YXIgdmFsdWUgPSBpbml0aWFsVmFsdWU7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgdGhpc1tpXSk7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CgogIEl0ZXJhYmxlPEU+IHNraXAoaW50IGNvdW50KSA9PiBTdWJMaXN0SXRlcmFibGU8RT4odGhpcywgY291bnQsIG51bGwpOwoKICBJdGVyYWJsZTxFPiBza2lwV2hpbGUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIHJldHVybiBTa2lwV2hpbGVJdGVyYWJsZTxFPih0aGlzLCB0ZXN0KTsKICB9CgogIEl0ZXJhYmxlPEU+IHRha2UoaW50IGNvdW50KSA9PiBTdWJMaXN0SXRlcmFibGU8RT4odGhpcywgMCwgY291bnQpOwoKICBJdGVyYWJsZTxFPiB0YWtlV2hpbGUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIHJldHVybiBUYWtlV2hpbGVJdGVyYWJsZTxFPih0aGlzLCB0ZXN0KTsKICB9CgogIExpc3Q8RT4gdG9MaXN0KHtib29sIGdyb3dhYmxlID0gdHJ1ZX0pIHsKICAgIExpc3Q8RT4gcmVzdWx0OwogICAgaWYgKGdyb3dhYmxlKSB7CiAgICAgIHJlc3VsdCA9IDxFPltdLi5sZW5ndGggPSBsZW5ndGg7CiAgICB9IGVsc2UgewogICAgICByZXN1bHQgPSBMaXN0PEU+KGxlbmd0aCk7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHJlc3VsdFtpXSA9IHRoaXNbaV07CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgU2V0PEU+IHRvU2V0KCkgewogICAgU2V0PEU+IHJlc3VsdCA9IFNldDxFPigpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICByZXN1bHQuYWRkKHRoaXNbaV0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIExpc3QgaW50ZXJmYWNlLgogIHZvaWQgYWRkKEUgZWxlbWVudCkgewogICAgdGhpc1t0aGlzLmxlbmd0aCsrXSA9IGVsZW1lbnQ7CiAgfQoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgaW50IGkgPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoRSBlbGVtZW50IGluIGl0ZXJhYmxlKSB7CiAgICAgIGFzc2VydCh0aGlzLmxlbmd0aCA9PSBpIHx8ICh0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcykpKTsKICAgICAgdGhpcy5sZW5ndGggPSBpICsgMTsKICAgICAgdGhpc1tpXSA9IGVsZW1lbnQ7CiAgICAgIGkrKzsKICAgIH0KICB9CgogIGJvb2wgcmVtb3ZlKE9iamVjdCBlbGVtZW50KSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRoaXNbaV0gPT0gZWxlbWVudCkgewogICAgICAgIHRoaXMuX2Nsb3NlR2FwKGksIGkgKyAxKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8vIFJlbW92ZXMgZWxlbWVudHMgZnJvbSB0aGUgbGlzdCBzdGFydGluZyBhdCBbc3RhcnRdIHVwIHRvIGJ1dCBub3QgaW5jbHVkaW5nCiAgLy8vIFtlbmRdLiAgQXJndW1lbnRzIGFyZSBwcmUtdmFsaWRhdGVkLgogIHZvaWQgX2Nsb3NlR2FwKGludCBzdGFydCwgaW50IGVuZCkgewogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgYXNzZXJ0KDAgPD0gc3RhcnQpOwogICAgYXNzZXJ0KHN0YXJ0IDwgZW5kKTsKICAgIGFzc2VydChlbmQgPD0gbGVuZ3RoKTsKICAgIGludCBzaXplID0gZW5kIC0gc3RhcnQ7CiAgICBmb3IgKGludCBpID0gZW5kOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgdGhpc1tpIC0gc2l6ZV0gPSB0aGlzW2ldOwogICAgfQogICAgdGhpcy5sZW5ndGggPSBsZW5ndGggLSBzaXplOwogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgX2ZpbHRlcih0ZXN0LCBmYWxzZSk7CiAgfQoKICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBfZmlsdGVyKHRlc3QsIHRydWUpOwogIH0KCiAgdm9pZCBfZmlsdGVyKGJvb2wgdGVzdChFIGVsZW1lbnQpLCBib29sIHJldGFpbk1hdGNoaW5nKSB7CiAgICBMaXN0PEU+IHJldGFpbmVkID0gPEU+W107CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBlbGVtZW50ID0gdGhpc1tpXTsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkgPT0gcmV0YWluTWF0Y2hpbmcpIHsKICAgICAgICByZXRhaW5lZC5hZGQoZWxlbWVudCk7CiAgICAgIH0KICAgICAgaWYgKGxlbmd0aCAhPSB0aGlzLmxlbmd0aCkgewogICAgICAgIHRocm93IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgfQogICAgfQogICAgaWYgKHJldGFpbmVkLmxlbmd0aCAhPSB0aGlzLmxlbmd0aCkgewogICAgICB0aGlzLnNldFJhbmdlKDAsIHJldGFpbmVkLmxlbmd0aCwgcmV0YWluZWQpOwogICAgICB0aGlzLmxlbmd0aCA9IHJldGFpbmVkLmxlbmd0aDsKICAgIH0KICB9CgogIHZvaWQgY2xlYXIoKSB7CiAgICB0aGlzLmxlbmd0aCA9IDA7CiAgfQoKICBMaXN0PFI+IGNhc3Q8Uj4oKSA9PiBMaXN0LmNhc3RGcm9tPEUsIFI+KHRoaXMpOwogIEUgcmVtb3ZlTGFzdCgpIHsKICAgIGlmIChsZW5ndGggPT0gMCkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIH0KICAgIEUgcmVzdWx0ID0gdGhpc1tsZW5ndGggLSAxXTsKICAgIGxlbmd0aC0tOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgc29ydChbaW50IGNvbXBhcmUoRSBhLCBFIGIpXSkgewogICAgU29ydC5zb3J0KHRoaXMsIGNvbXBhcmUgPz8gX2NvbXBhcmVBbnkpOwogIH0KCiAgc3RhdGljIGludCBfY29tcGFyZUFueShhLCBiKSB7CiAgICAvLyBJbiBzdHJvbmcgbW9kZSBDb21wYXJhYmxlLmNvbXBhcmUgcmVxdWlyZXMgYW4gaW1wbGljaXQgY2FzdCB0byBlbnN1cmUKICAgIC8vIGBhYCBhbmQgYGJgIGFyZSBDb21wYXJhYmxlLgogICAgcmV0dXJuIENvbXBhcmFibGUuY29tcGFyZShhLCBiKTsKICB9CgogIHZvaWQgc2h1ZmZsZShbUmFuZG9tIHJhbmRvbV0pIHsKICAgIHJhbmRvbSA/Pz0gUmFuZG9tKCk7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICB3aGlsZSAobGVuZ3RoID4gMSkgewogICAgICBpbnQgcG9zID0gcmFuZG9tLm5leHRJbnQobGVuZ3RoKTsKICAgICAgbGVuZ3RoIC09IDE7CiAgICAgIHZhciB0bXAgPSB0aGlzW2xlbmd0aF07CiAgICAgIHRoaXNbbGVuZ3RoXSA9IHRoaXNbcG9zXTsKICAgICAgdGhpc1twb3NdID0gdG1wOwogICAgfQogIH0KCiAgTWFwPGludCwgRT4gYXNNYXAoKSB7CiAgICByZXR1cm4gTGlzdE1hcFZpZXc8RT4odGhpcyk7CiAgfQoKICBMaXN0PEU+IG9wZXJhdG9yICsoTGlzdDxFPiBvdGhlcikgewogICAgdmFyIHJlc3VsdCA9IDxFPltdLi5sZW5ndGggPSAodGhpcy5sZW5ndGggKyBvdGhlci5sZW5ndGgpOwogICAgcmVzdWx0LnNldFJhbmdlKDAsIHRoaXMubGVuZ3RoLCB0aGlzKTsKICAgIHJlc3VsdC5zZXRSYW5nZSh0aGlzLmxlbmd0aCwgcmVzdWx0Lmxlbmd0aCwgb3RoZXIpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIExpc3Q8RT4gc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSkgewogICAgaW50IGxpc3RMZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGVuZCA/Pz0gbGlzdExlbmd0aDsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGxpc3RMZW5ndGgpOwogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgTGlzdDxFPiByZXN1bHQgPSA8RT5bXS4ubGVuZ3RoID0gbGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICByZXN1bHRbaV0gPSB0aGlzW3N0YXJ0ICsgaV07CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgSXRlcmFibGU8RT4gZ2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICByZXR1cm4gU3ViTGlzdEl0ZXJhYmxlPEU+KHRoaXMsIHN0YXJ0LCBlbmQpOwogIH0KCiAgdm9pZCByZW1vdmVSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgIGlmIChlbmQgPiBzdGFydCkgewogICAgICBfY2xvc2VHYXAoc3RhcnQsIGVuZCk7CiAgICB9CiAgfQoKICB2b2lkIGZpbGxSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIFtFIGZpbGxdKSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICB0aGlzW2ldID0gZmlsbDsKICAgIH0KICB9CgogIHZvaWQgc2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZTxFPiBpdGVyYWJsZSwgW2ludCBza2lwQ291bnQgPSAwXSkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgaWYgKGxlbmd0aCA9PSAwKSByZXR1cm47CiAgICBSYW5nZUVycm9yLmNoZWNrTm90TmVnYXRpdmUoc2tpcENvdW50LCAic2tpcENvdW50Iik7CgogICAgTGlzdDxFPiBvdGhlckxpc3Q7CiAgICBpbnQgb3RoZXJTdGFydDsKICAgIC8vIFRPRE8oZmxvaXRzY2gpOiBNYWtlIHRoaXMgYWNjZXB0IG1vcmUuCiAgICBpZiAoaXRlcmFibGUgaXMgTGlzdDxFPikgewogICAgICBvdGhlckxpc3QgPSBpdGVyYWJsZTsKICAgICAgb3RoZXJTdGFydCA9IHNraXBDb3VudDsKICAgIH0gZWxzZSB7CiAgICAgIG90aGVyTGlzdCA9IGl0ZXJhYmxlLnNraXAoc2tpcENvdW50KS50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKICAgICAgb3RoZXJTdGFydCA9IDA7CiAgICB9CiAgICBpZiAob3RoZXJTdGFydCArIGxlbmd0aCA+IG90aGVyTGlzdC5sZW5ndGgpIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vRmV3KCk7CiAgICB9CiAgICBpZiAob3RoZXJTdGFydCA8IHN0YXJ0KSB7CiAgICAgIC8vIENvcHkgYmFja3dhcmRzIHRvIGVuc3VyZSBjb3JyZWN0IGNvcHkgaWYgW2Zyb21dIGlzIHRoaXMuCiAgICAgIGZvciAoaW50IGkgPSBsZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICAgIHRoaXNbc3RhcnQgKyBpXSA9IG90aGVyTGlzdFtvdGhlclN0YXJ0ICsgaV07CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICB0aGlzW3N0YXJ0ICsgaV0gPSBvdGhlckxpc3Rbb3RoZXJTdGFydCArIGldOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIHJlcGxhY2VSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlPEU+IG5ld0NvbnRlbnRzKSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICBpZiAobmV3Q29udGVudHMgaXMhIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlKSB7CiAgICAgIG5ld0NvbnRlbnRzID0gbmV3Q29udGVudHMudG9MaXN0KCk7CiAgICB9CiAgICBpbnQgcmVtb3ZlTGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICBpbnQgaW5zZXJ0TGVuZ3RoID0gbmV3Q29udGVudHMubGVuZ3RoOwogICAgaWYgKHJlbW92ZUxlbmd0aCA+PSBpbnNlcnRMZW5ndGgpIHsKICAgICAgaW50IGluc2VydEVuZCA9IHN0YXJ0ICsgaW5zZXJ0TGVuZ3RoOwogICAgICB0aGlzLnNldFJhbmdlKHN0YXJ0LCBpbnNlcnRFbmQsIG5ld0NvbnRlbnRzKTsKICAgICAgaWYgKHJlbW92ZUxlbmd0aCA+IGluc2VydExlbmd0aCkgewogICAgICAgIF9jbG9zZUdhcChpbnNlcnRFbmQsIGVuZCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGludCBkZWx0YSA9IGluc2VydExlbmd0aCAtIHJlbW92ZUxlbmd0aDsKICAgICAgaW50IG5ld0xlbmd0aCA9IHRoaXMubGVuZ3RoICsgZGVsdGE7CiAgICAgIGludCBpbnNlcnRFbmQgPSBzdGFydCArIGluc2VydExlbmd0aDsgLy8gYWthLiBlbmQgKyBkZWx0YS4KICAgICAgdGhpcy5sZW5ndGggPSBuZXdMZW5ndGg7CiAgICAgIHRoaXMuc2V0UmFuZ2UoaW5zZXJ0RW5kLCBuZXdMZW5ndGgsIHRoaXMsIGVuZCk7CiAgICAgIHRoaXMuc2V0UmFuZ2Uoc3RhcnQsIGluc2VydEVuZCwgbmV3Q29udGVudHMpOwogICAgfQogIH0KCiAgaW50IGluZGV4T2YoT2JqZWN0IGVsZW1lbnQsIFtpbnQgc3RhcnQgPSAwXSkgewogICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgdGhpcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAodGhpc1tpXSA9PSBlbGVtZW50KSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIGludCBpbmRleFdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCBbaW50IHN0YXJ0ID0gMF0pIHsKICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMDsKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRlc3QodGhpc1tpXSkpIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgaW50IGxhc3RJbmRleE9mKE9iamVjdCBlbGVtZW50LCBbaW50IHN0YXJ0XSkgewogICAgaWYgKHN0YXJ0ID09IG51bGwgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHN0YXJ0ID0gdGhpcy5sZW5ndGggLSAxOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpID49IDA7IGktLSkgewogICAgICBpZiAodGhpc1tpXSA9PSBlbGVtZW50KSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIGludCBsYXN0SW5kZXhXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwgW2ludCBzdGFydF0pIHsKICAgIGlmIChzdGFydCA9PSBudWxsIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSBzdGFydCA9IHRoaXMubGVuZ3RoIC0gMTsKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA+PSAwOyBpLS0pIHsKICAgICAgaWYgKHRlc3QodGhpc1tpXSkpIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgdm9pZCBpbnNlcnQoaW50IGluZGV4LCBFIGVsZW1lbnQpIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGluZGV4LCAiaW5kZXgiKTsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWx1ZUluSW50ZXJ2YWwoaW5kZXgsIDAsIGxlbmd0aCwgImluZGV4Iik7CiAgICBpZiAoaW5kZXggPT0gdGhpcy5sZW5ndGgpIHsKICAgICAgYWRkKGVsZW1lbnQpOwogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLmxlbmd0aCsrOwogICAgc2V0UmFuZ2UoaW5kZXggKyAxLCB0aGlzLmxlbmd0aCwgdGhpcywgaW5kZXgpOwogICAgdGhpc1tpbmRleF0gPSBlbGVtZW50OwogIH0KCiAgRSByZW1vdmVBdChpbnQgaW5kZXgpIHsKICAgIEUgcmVzdWx0ID0gdGhpc1tpbmRleF07CiAgICBfY2xvc2VHYXAoaW5kZXgsIGluZGV4ICsgMSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgdm9pZCBpbnNlcnRBbGwoaW50IGluZGV4LCBJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbHVlSW5JbnRlcnZhbChpbmRleCwgMCwgbGVuZ3RoLCAiaW5kZXgiKTsKICAgIGlmIChpdGVyYWJsZSBpcyEgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGUgfHwgaWRlbnRpY2FsKGl0ZXJhYmxlLCB0aGlzKSkgewogICAgICBpdGVyYWJsZSA9IGl0ZXJhYmxlLnRvTGlzdCgpOwogICAgfQogICAgaW50IGluc2VydGlvbkxlbmd0aCA9IGl0ZXJhYmxlLmxlbmd0aDsKICAgIC8vIFRoZXJlIG1pZ2h0IGJlIGVycm9ycyBhZnRlciB0aGUgbGVuZ3RoIGNoYW5nZSwgaW4gd2hpY2ggY2FzZSB0aGUgbGlzdAogICAgLy8gd2lsbCBlbmQgdXAgYmVpbmcgbW9kaWZpZWQgYnV0IHRoZSBvcGVyYXRpb24gbm90IGNvbXBsZXRlLiBVbmxlc3Mgd2UKICAgIC8vIGFsd2F5cyBnbyB0aHJvdWdoIGEgInRvTGlzdCIgd2UgY2FuJ3QgcmVhbGx5IGF2b2lkIHRoYXQuCiAgICB0aGlzLmxlbmd0aCArPSBpbnNlcnRpb25MZW5ndGg7CiAgICBpZiAoaXRlcmFibGUubGVuZ3RoICE9IGluc2VydGlvbkxlbmd0aCkgewogICAgICAvLyBJZiB0aGUgaXRlcmFibGUncyBsZW5ndGggaXMgbGlua2VkIHRvIHRoaXMgbGlzdCdzIGxlbmd0aCBzb21laG93LAogICAgICAvLyB3ZSBjYW4ndCBpbnNlcnQgb25lIGluIHRoZSBvdGhlci4KICAgICAgdGhpcy5sZW5ndGggLT0gaW5zZXJ0aW9uTGVuZ3RoOwogICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IoaXRlcmFibGUpOwogICAgfQogICAgc2V0UmFuZ2UoaW5kZXggKyBpbnNlcnRpb25MZW5ndGgsIHRoaXMubGVuZ3RoLCB0aGlzLCBpbmRleCk7CiAgICBzZXRBbGwoaW5kZXgsIGl0ZXJhYmxlKTsKICB9CgogIHZvaWQgc2V0QWxsKGludCBpbmRleCwgSXRlcmFibGU8RT4gaXRlcmFibGUpIHsKICAgIGlmIChpdGVyYWJsZSBpcyBMaXN0KSB7CiAgICAgIHNldFJhbmdlKGluZGV4LCBpbmRleCArIGl0ZXJhYmxlLmxlbmd0aCwgaXRlcmFibGUpOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChFIGVsZW1lbnQgaW4gaXRlcmFibGUpIHsKICAgICAgICB0aGlzW2luZGV4KytdID0gZWxlbWVudDsKICAgICAgfQogICAgfQogIH0KCiAgSXRlcmFibGU8RT4gZ2V0IHJldmVyc2VkID0+IFJldmVyc2VkTGlzdEl0ZXJhYmxlPEU+KHRoaXMpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBJdGVyYWJsZUJhc2UuaXRlcmFibGVUb0Z1bGxTdHJpbmcodGhpcywgJ1snLCAnXScpOwp9CoIZAE5OPAEZAScERw8EQz8EUE5LS0pPRDA+RQZHPys5AgErBEEaBERJIARQTktLSk9FMDEZSyA1ASkBLzkBKR4nFyMxCAYEAR4jASMBED0UBAEcPRUEAQ89HQQBGz0eBAERPToUBAEiHicrIzEIBhIEASUeJygjMQgGEQQBIx4nJiMxCAYSBAE1HicbKSMxCAYpLAQBNB4sGykjMQgGKSwEATYeDR0nGxsaMAobGQgjMQgGIiksBAEpIEUeBAFLATwBSwE1JQE0Hj0XJycjMQgGEgQBRR4eJycjMQgGEgQBSAEwLQQBRQEwLQQBKxQUJw0gBicbBhMEARMeJxsGEwQBFRgjBAEmGSJNGxkLBgQBICwgIhUIBhIEAVErJx4YGRscKSAGIQQBKxoEASsZBAE8Hh4nHS0fCCMxCAYqMyUGBAERFQQBMhMXLgYhDhMEASctBAEhTSMlBAEiGR4ZKBMeIBcGBAEYIQQBJj8rOBMEASoiGDgeLScjBhMEAS05MQQBKTkXHQYEATE5KBYGBAFROR4dOQEXFC4fHB4NRBYGMisGHkIuNQgNKTUIBgQBQzkzKgYkKygsNCkjCA0vK0EfNjQGBAExHjAoBg8EAToeMCMGDwQBMUgnKAYPBAE6SCcjBg8EASYwQCAUDgYTMxsEARocIRMEATRATSQGK01MQCQuSysmMwZBHQQBMRw6DSQhCAYEAT0BSgIBGWRhcnQ6Y29sbGVjdGlvbi9saXN0LmRhcnRAc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3NjYW5uZXIvc3RyaW5nX3NjYW5uZXIuZGFydIz/Ly8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5zY2FubmVyLnN0cmluZ19zY2FubmVyOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW4sIFN5bnRoZXRpY1N0cmluZ1Rva2VuLCBUb2tlblR5cGU7CgppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCcgYXMgYW5hbHl6ZXIgc2hvdyBTdHJpbmdUb2tlbjsKCmltcG9ydCAnYWJzdHJhY3Rfc2Nhbm5lci5kYXJ0JwogICAgc2hvdyBBYnN0cmFjdFNjYW5uZXIsIExhbmd1YWdlVmVyc2lvbkNoYW5nZWQsIFNjYW5uZXJDb25maWd1cmF0aW9uOwoKaW1wb3J0ICd0b2tlbi5kYXJ0JwogICAgc2hvdyBDb21tZW50VG9rZW4sIERhcnREb2NUb2tlbiwgTGFuZ3VhZ2VWZXJzaW9uVG9rZW4sIFN0cmluZ1Rva2VuOwoKaW1wb3J0ICdlcnJvcl90b2tlbi5kYXJ0JyBzaG93IEVycm9yVG9rZW47CgovKioKICogU2Nhbm5lciB0aGF0IHJlYWRzIGZyb20gYSBTdHJpbmcgYW5kIGNyZWF0ZXMgdG9rZW5zIHRoYXQgcG9pbnRzIHRvCiAqIHN1YnN0cmluZ3MuCiAqLwpjbGFzcyBTdHJpbmdTY2FubmVyIGV4dGVuZHMgQWJzdHJhY3RTY2FubmVyIHsKICAvKiogVGhlIGZpbGUgY29udGVudC4gKi8KICBTdHJpbmcgc3RyaW5nOwoKICAvKiogVGhlIGN1cnJlbnQgb2Zmc2V0IGluIFtzdHJpbmddLiAqLwogIGludCBzY2FuT2Zmc2V0ID0gLTE7CgogIFN0cmluZ1NjYW5uZXIoU3RyaW5nIHN0cmluZywKICAgICAge1NjYW5uZXJDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24sCiAgICAgIGJvb2wgaW5jbHVkZUNvbW1lbnRzOiBmYWxzZSwKICAgICAgTGFuZ3VhZ2VWZXJzaW9uQ2hhbmdlZCBsYW5ndWFnZVZlcnNpb25DaGFuZ2VkfSkKICAgICAgOiBzdHJpbmcgPSBlbnN1cmVaZXJvVGVybWluYXRpb24oc3RyaW5nKSwKICAgICAgICBzdXBlcihjb25maWd1cmF0aW9uLCBpbmNsdWRlQ29tbWVudHMsIGxhbmd1YWdlVmVyc2lvbkNoYW5nZWQpOwoKICBzdGF0aWMgU3RyaW5nIGVuc3VyZVplcm9UZXJtaW5hdGlvbihTdHJpbmcgc3RyaW5nKSB7CiAgICByZXR1cm4gKHN0cmluZy5pc0VtcHR5IHx8IHN0cmluZy5jb2RlVW5pdEF0KHN0cmluZy5sZW5ndGggLSAxKSAhPSAwKQogICAgICAgIC8vIFRPRE8obHJ5KTogYWJvcnQgaW5zdGVhZCBvZiBjb3B5aW5nIHRoZSBhcnJheSwgb3Igd2Fybj8KICAgICAgICA/IHN0cmluZyArICdceDAwJwogICAgICAgIDogc3RyaW5nOwogIH0KCiAgc3RhdGljIGJvb2wgaXNMZWdhbElkZW50aWZpZXIoU3RyaW5nIGlkZW50aWZpZXIpIHsKICAgIFN0cmluZ1NjYW5uZXIgc2Nhbm5lciA9IG5ldyBTdHJpbmdTY2FubmVyKGlkZW50aWZpZXIpOwogICAgVG9rZW4gc3RhcnRUb2tlbiA9IHNjYW5uZXIudG9rZW5pemUoKTsKICAgIHJldHVybiBzdGFydFRva2VuIGlzISBFcnJvclRva2VuICYmIHN0YXJ0VG9rZW4ubmV4dC5pc0VvZjsKICB9CgogIGludCBhZHZhbmNlKCkgPT4gc3RyaW5nLmNvZGVVbml0QXQoKytzY2FuT2Zmc2V0KTsKICBpbnQgcGVlaygpID0+IHN0cmluZy5jb2RlVW5pdEF0KHNjYW5PZmZzZXQgKyAxKTsKCiAgaW50IGdldCBzdHJpbmdPZmZzZXQgPT4gc2Nhbk9mZnNldDsKCiAgaW50IGN1cnJlbnRBc1VuaWNvZGUoaW50IG5leHQpID0+IG5leHQ7CgogIHZvaWQgaGFuZGxlVW5pY29kZShpbnQgc3RhcnRTY2FuT2Zmc2V0KSB7fQoKICBAb3ZlcnJpZGUKICBhbmFseXplci5TdHJpbmdUb2tlbiBjcmVhdGVTdWJzdHJpbmdUb2tlbigKICAgICAgVG9rZW5UeXBlIHR5cGUsIGludCBzdGFydCwgYm9vbCBhc2NpaU9ubHksCiAgICAgIFtpbnQgZXh0cmFPZmZzZXQgPSAwXSkgewogICAgcmV0dXJuIG5ldyBTdHJpbmdUb2tlbi5mcm9tU3Vic3RyaW5nKAogICAgICAgIHR5cGUsIHN0cmluZywgc3RhcnQsIHNjYW5PZmZzZXQgKyBleHRyYU9mZnNldCwgdG9rZW5TdGFydCwKICAgICAgICBjYW5vbmljYWxpemU6IHRydWUsIHByZWNlZGluZ0NvbW1lbnRzOiBjb21tZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBhbmFseXplci5TdHJpbmdUb2tlbiBjcmVhdGVTeW50aGV0aWNTdWJzdHJpbmdUb2tlbigKICAgICAgVG9rZW5UeXBlIHR5cGUsIGludCBzdGFydCwgYm9vbCBhc2NpaU9ubHksIFN0cmluZyBzeW50aGV0aWNDaGFycykgewogICAgU3RyaW5nIHNvdXJjZSA9IHN0cmluZy5zdWJzdHJpbmcoc3RhcnQsIHNjYW5PZmZzZXQpOwogICAgcmV0dXJuIG5ldyBTeW50aGV0aWNTdHJpbmdUb2tlbigKICAgICAgICB0eXBlLCBzb3VyY2UgKyBzeW50aGV0aWNDaGFycywgdG9rZW5TdGFydCwgc291cmNlLmxlbmd0aCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb21tZW50VG9rZW4gY3JlYXRlQ29tbWVudFRva2VuKFRva2VuVHlwZSB0eXBlLCBpbnQgc3RhcnQsIGJvb2wgYXNjaWlPbmx5LAogICAgICBbaW50IGV4dHJhT2Zmc2V0ID0gMF0pIHsKICAgIHJldHVybiBuZXcgQ29tbWVudFRva2VuLmZyb21TdWJzdHJpbmcoCiAgICAgICAgdHlwZSwgc3RyaW5nLCBzdGFydCwgc2Nhbk9mZnNldCArIGV4dHJhT2Zmc2V0LCB0b2tlblN0YXJ0LAogICAgICAgIGNhbm9uaWNhbGl6ZTogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0RG9jVG9rZW4gY3JlYXRlRGFydERvY1Rva2VuKFRva2VuVHlwZSB0eXBlLCBpbnQgc3RhcnQsIGJvb2wgYXNjaWlPbmx5LAogICAgICBbaW50IGV4dHJhT2Zmc2V0ID0gMF0pIHsKICAgIHJldHVybiBuZXcgRGFydERvY1Rva2VuLmZyb21TdWJzdHJpbmcoCiAgICAgICAgdHlwZSwgc3RyaW5nLCBzdGFydCwgc2Nhbk9mZnNldCArIGV4dHJhT2Zmc2V0LCB0b2tlblN0YXJ0LAogICAgICAgIGNhbm9uaWNhbGl6ZTogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBMYW5ndWFnZVZlcnNpb25Ub2tlbiBjcmVhdGVMYW5ndWFnZVZlcnNpb25Ub2tlbigKICAgICAgaW50IHN0YXJ0LCBpbnQgbWFqb3IsIGludCBtaW5vcikgewogICAgcmV0dXJuIG5ldyBMYW5ndWFnZVZlcnNpb25Ub2tlbi5mcm9tU3Vic3RyaW5nKAogICAgICAgIHN0cmluZywgc3RhcnQsIHNjYW5PZmZzZXQsIHRva2VuU3RhcnQsIG1ham9yLCBtaW5vciwKICAgICAgICBjYW5vbmljYWxpemU6IHRydWUpOwogIH0KCiAgYm9vbCBhdEVuZE9mRmlsZSgpID0+IHNjYW5PZmZzZXQgPj0gc3RyaW5nLmxlbmd0aCAtIDE7Cn0KZwBOTjwBKAFPAUABH0gBFEgBKwEERg8ELhsRASkXAR8rIzYwRwE3SUMaEgQBNTsrPwQBNDMBJgEqAS0BDC0xHypDOgQBDDZKOSVDBAEMTR8rQx0EAQxNHytDHQQBDDMpMz0dBAE5AgE3cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NjYW5uZXIvc3RyaW5nX3NjYW5uZXIuZGFydERzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvc2Nhbm5lci91dGY4X2J5dGVzX3NjYW5uZXIuZGFydKFZLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuc2Nhbm5lci51dGY4X2J5dGVzX3NjYW5uZXI7CgppbXBvcnQgJ2RhcnQ6Y29udmVydCcgc2hvdyB1bmljb2RlQm9tQ2hhcmFjdGVyUnVuZSwgdXRmODsKCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JyBzaG93IFN5bnRoZXRpY1N0cmluZ1Rva2VuLCBUb2tlblR5cGU7CgppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCcgYXMgYW5hbHl6ZXIgc2hvdyBTdHJpbmdUb2tlbjsKCmltcG9ydCAnLi4vc2Nhbm5lci5kYXJ0JyBzaG93IHVuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlcjsKCmltcG9ydCAnYWJzdHJhY3Rfc2Nhbm5lci5kYXJ0JwogICAgc2hvdyBBYnN0cmFjdFNjYW5uZXIsIExhbmd1YWdlVmVyc2lvbkNoYW5nZWQsIFNjYW5uZXJDb25maWd1cmF0aW9uOwoKaW1wb3J0ICd0b2tlbi5kYXJ0JwogICAgc2hvdyBDb21tZW50VG9rZW4sIERhcnREb2NUb2tlbiwgTGFuZ3VhZ2VWZXJzaW9uVG9rZW4sIFN0cmluZ1Rva2VuOwoKLyoqCiAqIFNjYW5uZXIgdGhhdCByZWFkcyBmcm9tIGEgVVRGLTggZW5jb2RlZCBsaXN0IG9mIGJ5dGVzIGFuZCBjcmVhdGVzIHRva2VucwogKiB0aGF0IHBvaW50cyB0byBzdWJzdHJpbmdzLgogKi8KY2xhc3MgVXRmOEJ5dGVzU2Nhbm5lciBleHRlbmRzIEFic3RyYWN0U2Nhbm5lciB7CiAgLyoqCiAgICogVGhlIGZpbGUgY29udGVudC4KICAgKgogICAqIFRoZSBjb250ZW50IGlzIHplcm8tdGVybWluYXRlZC4KICAgKi8KICBMaXN0PGludD4gYnl0ZXM7CgogIC8qKgogICAqIFBvaW50cyB0byB0aGUgb2Zmc2V0IG9mIHRoZSBsYXN0IGJ5dGUgcmV0dXJuZWQgYnkgW2FkdmFuY2VdLgogICAqCiAgICogQWZ0ZXIgaW52b2tpbmcgW2N1cnJlbnRBc1VuaWNvZGVdLCB0aGUgW2J5dGVPZmZzZXRdIHBvaW50cyB0byB0aGUgbGFzdAogICAqIGJ5dGUgdGhhdCBpcyBwYXJ0IG9mIHRoZSAodW5pY29kZSBvciBBU0NJSSkgY2hhcmFjdGVyLiBUaGF0IHdheSwgW2FkdmFuY2VdCiAgICogY2FuIGFsd2F5cyBpbmNyZWFzZSB0aGUgYnl0ZSBvZmZzZXQgYnkgMS4KICAgKi8KICBpbnQgYnl0ZU9mZnNldCA9IC0xOwoKICAvKioKICAgKiBUaGUgZ2V0dGVyIFtzY2FuT2Zmc2V0XSBpcyBleHBlY3RlZCB0byByZXR1cm4gdGhlIGluZGV4IHdoZXJlIHRoZSBjdXJyZW50CiAgICogY2hhcmFjdGVyICpzdGFydHMqLiBJbiBjYXNlIG9mIGEgbm9uLWFzY2lpIGNoYXJhY3RlciwgYWZ0ZXIgaW52b2tpbmcKICAgKiBbY3VycmVudEFzVW5pY29kZV0sIHRoZSBieXRlIG9mZnNldCBwb2ludHMgdG8gdGhlICpsYXN0KiBieXRlLgogICAqCiAgICogVGhpcyBmaWVsZCBrZWVwcyB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGZvciB0aGUgY3VycmVudCB1bmljb2RlCiAgICogY2hhcmFjdGVyLiBGb3IgZXhhbXBsZSwgaWYgYnl0ZXMgNyw4LDkgZW5jb2RlIG9uZSB1bmljb2RlIGNoYXJhY3RlciwgdGhlCiAgICogW2J5dGVPZmZzZXRdIGlzIDkgKGFmdGVyIGludm9raW5nIFtjdXJyZW50QXNVbmljb2RlXSkuIFRoZSBbc2NhblNsYWNrXQogICAqIHdpbGwgYmUgMiwgc28gdGhhdCBbc2Nhbk9mZnNldF0gcmV0dXJucyA3LgogICAqLwogIGludCBzY2FuU2xhY2sgPSAwOwoKICAvKioKICAgKiBIb2xkcyB0aGUgW2J5dGVPZmZzZXRdIHZhbHVlIGZvciB3aGljaCB0aGUgY3VycmVudCBbc2NhblNsYWNrXSBpcyB2YWxpZC4KICAgKi8KICBpbnQgc2NhblNsYWNrT2Zmc2V0ID0gLTE7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGJ5dGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBieXRlIHRoYXQgYmVsb25ncyB0byB0aGUgY3VycmVudAogICAqIGNoYXJhY3Rlci4KICAgKi8KICBpbnQgZ2V0IHNjYW5PZmZzZXQgewogICAgaWYgKGJ5dGVPZmZzZXQgPT0gc2NhblNsYWNrT2Zmc2V0KSB7CiAgICAgIHJldHVybiBieXRlT2Zmc2V0IC0gc2NhblNsYWNrOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGJ5dGVPZmZzZXQ7CiAgICB9CiAgfQoKICAvKioKICAgKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBudW1iZXIgb2YgYnl0ZXMgYW5kIHRoZSBudW1iZXIgb2YgY29ycmVzcG9uZGluZwogICAqIHN0cmluZyBjaGFyYWN0ZXJzLCB1cCB0byB0aGUgY3VycmVudCBbYnl0ZU9mZnNldF0uCiAgICovCiAgaW50IHV0ZjhTbGFjayA9IDA7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgVXRmOEJ5dGVzU2Nhbm5lci4gVGhlIHNvdXJjZSBmaWxlIGlzIGV4cGVjdGVkIHRvIGJlIGEKICAgKiBbVXRmOEJ5dGVzU291cmNlRmlsZV0gdGhhdCBob2xkcyBhIGxpc3Qgb2YgVVRGLTggYnl0ZXMuIE90aGVyd2lzZSB0aGUKICAgKiBzdHJpbmcgdGV4dCBvZiB0aGUgc291cmNlIGZpbGUgaXMgZGVjb2RlZC4KICAgKgogICAqIFRoZSBsaXN0IG9mIFVURi04IGJ5dGVzIFtmaWxlLnNsb3dVdGY4Qnl0ZXMoKV0gaXMgZXhwZWN0ZWQgdG8gcmV0dXJuIGFuCiAgICogYXJyYXkgd2hvc2UgbGFzdCBlbGVtZW50IGlzICcwJyB0byBzaWduYWwgdGhlIGVuZCBvZiB0aGUgZmlsZS4gSWYgdGhpcwogICAqIGlzIG5vdCB0aGUgY2FzZSwgdGhlIGVudGlyZSBhcnJheSBpcyBjb3BpZWQgYmVmb3JlIHNjYW5uaW5nLgogICAqLwogIFV0ZjhCeXRlc1NjYW5uZXIodGhpcy5ieXRlcywKICAgICAge1NjYW5uZXJDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24sCiAgICAgIGJvb2wgaW5jbHVkZUNvbW1lbnRzOiBmYWxzZSwKICAgICAgTGFuZ3VhZ2VWZXJzaW9uQ2hhbmdlZCBsYW5ndWFnZVZlcnNpb25DaGFuZ2VkfSkKICAgICAgOiBzdXBlcihjb25maWd1cmF0aW9uLCBpbmNsdWRlQ29tbWVudHMsIGxhbmd1YWdlVmVyc2lvbkNoYW5nZWQsCiAgICAgICAgICAgIG51bWJlck9mQnl0ZXNIaW50OiBieXRlcy5sZW5ndGgpIHsKICAgIGFzc2VydChieXRlcy5sYXN0ID09IDApOwogICAgLy8gU2tpcCBhIGxlYWRpbmcgQk9NLgogICAgaWYgKGNvbnRhaW5zQm9tQXQoMCkpIGJ5dGVPZmZzZXQgKz0gMzsKICB9CgogIGJvb2wgY29udGFpbnNCb21BdChpbnQgb2Zmc2V0KSB7CiAgICBjb25zdCBMaXN0PGludD4gQk9NX1VURjggPSBjb25zdCBbMHhFRiwgMHhCQiwgMHhCRl07CgogICAgcmV0dXJuIG9mZnNldCArIDMgPCBieXRlcy5sZW5ndGggJiYKICAgICAgICBieXRlc1tvZmZzZXRdID09IEJPTV9VVEY4WzBdICYmCiAgICAgICAgYnl0ZXNbb2Zmc2V0ICsgMV0gPT0gQk9NX1VURjhbMV0gJiYKICAgICAgICBieXRlc1tvZmZzZXQgKyAyXSA9PSBCT01fVVRGOFsyXTsKICB9CgogIGludCBhZHZhbmNlKCkgPT4gYnl0ZXNbKytieXRlT2Zmc2V0XTsKCiAgaW50IHBlZWsoKSA9PiBieXRlc1tieXRlT2Zmc2V0ICsgMV07CgogIC8vLyBSZXR1cm5zIHRoZSB1bmljb2RlIGNvZGUgcG9pbnQgc3RhcnRpbmcgYXQgdGhlIGJ5dGUgb2Zmc2V0IFtzdGFydE9mZnNldF0KICAvLy8gd2l0aCB0aGUgYnl0ZSBbbmV4dEJ5dGVdLgogIGludCBuZXh0Q29kZVBvaW50KGludCBzdGFydE9mZnNldCwgaW50IG5leHRCeXRlKSB7CiAgICBpbnQgZXhwZWN0ZWRIaWdoQnl0ZXM7CiAgICBpZiAobmV4dEJ5dGUgPCAweEMyKSB7CiAgICAgIGV4cGVjdGVkSGlnaEJ5dGVzID0gMTsgLy8gQmFkIGNvZGUgdW5pdC4KICAgIH0gZWxzZSBpZiAobmV4dEJ5dGUgPCAweEUwKSB7CiAgICAgIGV4cGVjdGVkSGlnaEJ5dGVzID0gMjsKICAgIH0gZWxzZSBpZiAobmV4dEJ5dGUgPCAweEYwKSB7CiAgICAgIGV4cGVjdGVkSGlnaEJ5dGVzID0gMzsKICAgIH0gZWxzZSBpZiAobmV4dEJ5dGUgPCAweEY1KSB7CiAgICAgIGV4cGVjdGVkSGlnaEJ5dGVzID0gNDsKICAgIH0gZWxzZSB7CiAgICAgIGV4cGVjdGVkSGlnaEJ5dGVzID0gMTsgLy8gQmFkIGNvZGUgdW5pdC4KICAgIH0KICAgIGludCBudW1CeXRlcyA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVkSGlnaEJ5dGVzOyBpKyspIHsKICAgICAgaWYgKGJ5dGVzW2J5dGVPZmZzZXQgKyBpXSA8IDB4ODApIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBudW1CeXRlcysrOwogICAgfQogICAgaW50IGVuZCA9IHN0YXJ0T2Zmc2V0ICsgbnVtQnl0ZXM7CiAgICBieXRlT2Zmc2V0ID0gZW5kIC0gMTsKICAgIGlmIChleHBlY3RlZEhpZ2hCeXRlcyA9PSAxIHx8IG51bUJ5dGVzICE9IGV4cGVjdGVkSGlnaEJ5dGVzKSB7CiAgICAgIHJldHVybiB1bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXI7CiAgICB9CiAgICAvLyBUT0RPKGxyeSk6IG1lYXN1cmFibHkgc2xvdywgZGVjb2RlIGNyZWF0ZXMgZmlyc3QgYSBVdGY4RGVjb2RlciBhbmQgYQogICAgLy8gX1V0ZjhEZWNvZGVyIGluc3RhbmNlLiBBbHNvIHRoZSBzdWJsaXN0IGlzIGVhZ2VybHkgYWxsb2NhdGVkLgogICAgU3RyaW5nIGNvZGVQb2ludCA9CiAgICAgICAgdXRmOC5kZWNvZGUoYnl0ZXMuc3VibGlzdChzdGFydE9mZnNldCwgZW5kKSwgYWxsb3dNYWxmb3JtZWQ6IHRydWUpOwogICAgaWYgKGNvZGVQb2ludC5sZW5ndGggPT0gMCkgewogICAgICAvLyBUaGUgVVRGLTggZGVjb2RlciBkaXNjYXJkcyBsZWFkaW5nIEJPTSBjaGFyYWN0ZXJzLgogICAgICAvLyBUT0RPKGZsb2l0c2NoKTogZG9uJ3QganVzdCBhc3N1bWUgdGhhdCByZW1vdmVkIGNoYXJhY3RlcnMgd2VyZSB0aGUKICAgICAgLy8gQk9NLgogICAgICBhc3NlcnQoY29udGFpbnNCb21BdChzdGFydE9mZnNldCkpOwogICAgICBjb2RlUG9pbnQgPSBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZSh1bmljb2RlQm9tQ2hhcmFjdGVyUnVuZSk7CiAgICB9CiAgICBpZiAoY29kZVBvaW50Lmxlbmd0aCA9PSAxKSB7CiAgICAgIHV0ZjhTbGFjayArPSAobnVtQnl0ZXMgLSAxKTsKICAgICAgc2NhblNsYWNrID0gbnVtQnl0ZXMgLSAxOwogICAgICBzY2FuU2xhY2tPZmZzZXQgPSBieXRlT2Zmc2V0OwogICAgICByZXR1cm4gY29kZVBvaW50LmNvZGVVbml0QXQoMCk7CiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludC5sZW5ndGggPT0gMikgewogICAgICB1dGY4U2xhY2sgKz0gKG51bUJ5dGVzIC0gMik7CiAgICAgIHNjYW5TbGFjayA9IG51bUJ5dGVzIC0gMTsKICAgICAgc2NhblNsYWNrT2Zmc2V0ID0gYnl0ZU9mZnNldDsKICAgICAgc3RyaW5nT2Zmc2V0U2xhY2tPZmZzZXQgPSBieXRlT2Zmc2V0OwogICAgICAvLyBJbiBjYXNlIG9mIGEgc3Vycm9nYXRlIHBhaXIsIHJldHVybiBhIHNpbmdsZSBjb2RlIHBvaW50LgogICAgICAvLyBHcmFjZWZ1bGx5IGRlZ3JhZGUgZ2l2ZW4gaW52YWxpZCBVVEYtOC4KICAgICAgUnVuZUl0ZXJhdG9yIHJ1bmVzID0gY29kZVBvaW50LnJ1bmVzLml0ZXJhdG9yOwogICAgICBpZiAoIXJ1bmVzLm1vdmVOZXh0KCkpIHJldHVybiB1bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXI7CiAgICAgIGludCBjb2RlVW5pdCA9IHJ1bmVzLmN1cnJlbnQ7CiAgICAgIHJldHVybiAhcnVuZXMubW92ZU5leHQoKSA/IGNvZGVVbml0IDogdW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHVuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlcjsKICAgIH0KICB9CgogIGludCBsYXN0VW5pY29kZU9mZnNldCA9IC0xOwogIGludCBjdXJyZW50QXNVbmljb2RlKGludCBuZXh0KSB7CiAgICBpZiAobmV4dCA8IDEyOCkgcmV0dXJuIG5leHQ7CiAgICAvLyBDaGVjayBpZiBjdXJyZW50QXNVbmljb2RlIHdhcyBhbHJlYWR5IGludm9rZWQuCiAgICBpZiAoYnl0ZU9mZnNldCA9PSBsYXN0VW5pY29kZU9mZnNldCkgcmV0dXJuIG5leHQ7CiAgICBpbnQgcmVzID0gbmV4dENvZGVQb2ludChieXRlT2Zmc2V0LCBuZXh0KTsKICAgIGxhc3RVbmljb2RlT2Zmc2V0ID0gYnl0ZU9mZnNldDsKICAgIHJldHVybiByZXM7CiAgfQoKICB2b2lkIGhhbmRsZVVuaWNvZGUoaW50IHN0YXJ0U2Nhbk9mZnNldCkgewogICAgaW50IGVuZCA9IGJ5dGVPZmZzZXQ7CiAgICAvLyBUT0RPKGxyeSk6IHRoaXMgbWVhc3VyYWJseSBzbG93cyBkb3duIHRoZSBzY2FubmVyIGZvciBmaWxlcyB3aXRoIHVuaWNvZGUuCiAgICBTdHJpbmcgcyA9CiAgICAgICAgdXRmOC5kZWNvZGUoYnl0ZXMuc3VibGlzdChzdGFydFNjYW5PZmZzZXQsIGVuZCksIGFsbG93TWFsZm9ybWVkOiB0cnVlKTsKICAgIHV0ZjhTbGFjayArPSAoZW5kIC0gc3RhcnRTY2FuT2Zmc2V0KSAtIHMubGVuZ3RoOwogIH0KCiAgLyoqCiAgICogVGhpcyBmaWVsZCByZW1lbWJlcnMgdGhlIGJ5dGUgb2Zmc2V0IG9mIHRoZSBsYXN0IGNoYXJhY3RlciBkZWNvZGVkIHdpdGgKICAgKiBbbmV4dENvZGVQb2ludF0gdGhhdCB1c2VkIHR3byBjb2RlIHVuaXRzIGluIFVURi0xNi4KICAgKgogICAqIFtuZXh0Q29kZVBvaW50XSByZXR1cm5zIGEgc2luZ2xlIGNvZGUgcG9pbnQgZm9yIGVhY2ggdW5pY29kZSBjaGFyYWN0ZXIsCiAgICogZXZlbiBpZiBpdCBuZWVkcyB0d28gY29kZSB1bml0cyBpbiBVVEYtMTYuCiAgICoKICAgKiBGb3IgZXhhbXBsZSwgJ1x1ezFkMTFlfScgdXNlcyA0IGJ5dGVzIGluIFVURi04LCBhbmQgdHdvIGNvZGUgdW5pdHMgaW4KICAgKiBVVEYtMTYuIFRoZSBbdXRmOFNsYWNrXSBpcyB0aGVyZWZvcmUgMi4gQWZ0ZXIgaW52b2tpbmcgW25leHRDb2RlUG9pbnRdLCB0aGUKICAgKiBbYnl0ZU9mZnNldF0gcG9pbnRzIHRvIHRoZSBsYXN0IChvZiA0KSBieXRlcy4gVGhlIFtzdHJpbmdPZmZzZXRdIHNob3VsZAogICAqIHJldHVybiB0aGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBvbmUsIHdoaWNoIGlzIG9uZSBwb3NpdGlvbiBtb3JlIGxlZnQgdGhhbgogICAqIHRoZSBbdXRmOFNsYWNrXS4KICAgKi8KICBpbnQgc3RyaW5nT2Zmc2V0U2xhY2tPZmZzZXQgPSAtMTsKCiAgaW50IGdldCBzdHJpbmdPZmZzZXQgewogICAgaWYgKHN0cmluZ09mZnNldFNsYWNrT2Zmc2V0ID09IGJ5dGVPZmZzZXQpIHsKICAgICAgcmV0dXJuIGJ5dGVPZmZzZXQgLSB1dGY4U2xhY2sgLSAxOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGJ5dGVPZmZzZXQgLSB1dGY4U2xhY2s7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBhbmFseXplci5TdHJpbmdUb2tlbiBjcmVhdGVTdWJzdHJpbmdUb2tlbigKICAgICAgVG9rZW5UeXBlIHR5cGUsIGludCBzdGFydCwgYm9vbCBhc2NpaU9ubHksCiAgICAgIFtpbnQgZXh0cmFPZmZzZXQgPSAwXSkgewogICAgcmV0dXJuIG5ldyBTdHJpbmdUb2tlbi5mcm9tVXRmOEJ5dGVzKAogICAgICAgIHR5cGUsIGJ5dGVzLCBzdGFydCwgYnl0ZU9mZnNldCArIGV4dHJhT2Zmc2V0LCBhc2NpaU9ubHksIHRva2VuU3RhcnQsCiAgICAgICAgcHJlY2VkaW5nQ29tbWVudHM6IGNvbW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIGFuYWx5emVyLlN0cmluZ1Rva2VuIGNyZWF0ZVN5bnRoZXRpY1N1YnN0cmluZ1Rva2VuKAogICAgICBUb2tlblR5cGUgdHlwZSwgaW50IHN0YXJ0LCBib29sIGFzY2lpT25seSwgU3RyaW5nIHN5bnRoZXRpY0NoYXJzKSB7CiAgICBTdHJpbmcgc291cmNlID0gU3RyaW5nVG9rZW4uZGVjb2RlVXRmOChieXRlcywgc3RhcnQsIGJ5dGVPZmZzZXQsIGFzY2lpT25seSk7CiAgICByZXR1cm4gbmV3IFN5bnRoZXRpY1N0cmluZ1Rva2VuKAogICAgICAgIHR5cGUsIHNvdXJjZSArIHN5bnRoZXRpY0NoYXJzLCB0b2tlblN0YXJ0LCBzb3VyY2UubGVuZ3RoKTsKICB9CgogIEBvdmVycmlkZQogIENvbW1lbnRUb2tlbiBjcmVhdGVDb21tZW50VG9rZW4oVG9rZW5UeXBlIHR5cGUsIGludCBzdGFydCwgYm9vbCBhc2NpaU9ubHksCiAgICAgIFtpbnQgZXh0cmFPZmZzZXQgPSAwXSkgewogICAgcmV0dXJuIG5ldyBDb21tZW50VG9rZW4uZnJvbVV0ZjhCeXRlcygKICAgICAgICB0eXBlLCBieXRlcywgc3RhcnQsIGJ5dGVPZmZzZXQgKyBleHRyYU9mZnNldCwgYXNjaWlPbmx5LCB0b2tlblN0YXJ0KTsKICB9CgogIEBvdmVycmlkZQogIERhcnREb2NUb2tlbiBjcmVhdGVEYXJ0RG9jVG9rZW4oVG9rZW5UeXBlIHR5cGUsIGludCBzdGFydCwgYm9vbCBhc2NpaU9ubHksCiAgICAgIFtpbnQgZXh0cmFPZmZzZXQgPSAwXSkgewogICAgcmV0dXJuIG5ldyBEYXJ0RG9jVG9rZW4uZnJvbVV0ZjhCeXRlcygKICAgICAgICB0eXBlLCBieXRlcywgc3RhcnQsIGJ5dGVPZmZzZXQgKyBleHRyYU9mZnNldCwgYXNjaWlPbmx5LCB0b2tlblN0YXJ0KTsKICB9CgogIEBvdmVycmlkZQogIExhbmd1YWdlVmVyc2lvblRva2VuIGNyZWF0ZUxhbmd1YWdlVmVyc2lvblRva2VuKAogICAgICBpbnQgc3RhcnQsIGludCBtYWpvciwgaW50IG1pbm9yKSB7CiAgICByZXR1cm4gbmV3IExhbmd1YWdlVmVyc2lvblRva2VuLmZyb21VdGY4Qnl0ZXMoCiAgICAgICAgYnl0ZXMsIHN0YXJ0LCBieXRlT2Zmc2V0LCB0b2tlblN0YXJ0LCBtYWpvciwgbWlub3IpOwogIH0KCiAgYm9vbCBhdEVuZE9mRmlsZSgpID0+IGJ5dGVPZmZzZXQgPj0gYnl0ZXMubGVuZ3RoIC0gMTsKfQqA+wBOTjwBKgE6AUgBQAE7AR9IARRIAQRMHgQxBhcFJQYTAQZCBUxQLwYXAQZPSkQFS05MMAYVAQZOBhwBBksQBhcpJQ0ZBgQBBlA4BhUBBklLMAVNTEIGHysjNkYvHRsrBAEjOQEoKCwqBAEoAScBTyA1GxsvIh0iHSIdDS8GFjIqDwgSBiYaQyoGTEUXTCE8TA4qRAYhIyAkJigjICQsQjE1QSRJDSoGBAEeIyE2Ni8kEAQBLBpRD1A1BAEGTTkFTTAFS1FNThYGJAEZMSkNJQYEAQwtMR8qTSYEAQw2SlElQwQBDE0fK04EAQxNHytOBAEMMykzPQQBOAIBO3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zY2FubmVyL3V0ZjhfYnl0ZXNfc2Nhbm5lci5kYXJ0OXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9zY2FubmVyL3JlY292ZXIuZGFydIi5Ly8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuc2Nhbm5lci5yZWNvdmVyOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW5UeXBlOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJ3Rva2VuLmRhcnQnIHNob3cgU3RyaW5nVG9rZW47CgppbXBvcnQgJ2Vycm9yX3Rva2VuLmRhcnQnIHNob3cgRXJyb3JUb2tlbjsKCi8vLyBSZWNvdmVyIGZyb20gZXJyb3JzIGluIFt0b2tlbnNdLiBUaGUgb3JpZ2luYWwgc291cmNlcyBhcmUgcHJvdmlkZWQgYXMKLy8vIFtieXRlc10uIFtsaW5lU3RhcnRzXSBhcmUgdGhlIGJlZ2lubmluZyBjaGFyYWN0ZXIgb2Zmc2V0cyBvZiBsaW5lcywgYW5kCi8vLyBtdXN0IGJlIHVwZGF0ZWQgaWYgcmVjb3ZlcnkgaXMgcGVyZm9ybWVkIHJld3JpdGluZyB0aGUgb3JpZ2luYWwgc291cmNlCi8vLyBjb2RlLgpUb2tlbiBzY2FubmVyUmVjb3ZlcnkoTGlzdDxpbnQ+IGJ5dGVzLCBUb2tlbiB0b2tlbnMsIExpc3Q8aW50PiBsaW5lU3RhcnRzKSB7CiAgLy8gU2FuaXR5IGNoZWNrIHRoYXQgYWxsIGVycm9yIHRva2VucyBhcmUgcHJlcGVuZGVkLgoKICAvLyBUT0RPKGRhbnJ1YmVsKTogUmVtb3ZlIHRoaXMgaW4gYSB3aGlsZSBhZnRlciB0aGUgZHVzdCBoYXMgc2V0dGxlZC4KCiAgLy8gU2tpcCBvdmVyIHByZXBlbmRlZCBlcnJvciB0b2tlbnMKICBUb2tlbiB0b2tlbiA9IHRva2VuczsKICB3aGlsZSAodG9rZW4gaXMgRXJyb3JUb2tlbikgewogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogIH0KCiAgLy8gQXNzZXJ0IG5vIGVycm9yIHRva2VucyBpbiB0aGUgcmVtYWluaW5nIHRva2VucwogIHdoaWxlICghdG9rZW4uaXNFb2YpIHsKICAgIGlmICh0b2tlbiBpcyBFcnJvclRva2VuKSB7CiAgICAgIGZvciAoaW50IGNvdW50ID0gMDsgY291bnQgPCAzOyArK2NvdW50KSB7CiAgICAgICAgVG9rZW4gcHJldmlvdXMgPSB0b2tlbi5wcmV2aW91czsKICAgICAgICBpZiAocHJldmlvdXMuaXNFb2YpIGJyZWFrOwogICAgICAgIHRva2VuID0gcHJldmlvdXM7CiAgICAgIH0KICAgICAgU3RyaW5nQnVmZmVyIG1zZyA9IG5ldyBTdHJpbmdCdWZmZXIoCiAgICAgICAgICAiSW50ZXJuYWwgZXJyb3I6IEFsbCBlcnJvciB0b2tlbnMgc2hvdWxkIGhhdmUgYmVlbiBwcmVwZW5kZWQ6Iik7CiAgICAgIGZvciAoaW50IGNvdW50ID0gMDsgY291bnQgPCA3OyArK2NvdW50KSB7CiAgICAgICAgaWYgKHRva2VuLmlzRW9mKSBicmVhazsKICAgICAgICBtc2cud3JpdGUoJyAke3Rva2VuLnJ1bnRpbWVUeXBlfSwnKTsKICAgICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICAgIH0KICAgICAgdGhyb3cgbXNnLnRvU3RyaW5nKCk7CiAgICB9CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgfQoKICByZXR1cm4gdG9rZW5zOwp9CgpUb2tlbiBzeW50aGVzaXplVG9rZW4oaW50IGNoYXJPZmZzZXQsIFN0cmluZyB2YWx1ZSwgVG9rZW5UeXBlIHR5cGUpIHsKICByZXR1cm4gbmV3IFN0cmluZ1Rva2VuLmZyb21TdHJpbmcodHlwZSwgdmFsdWUsIGNoYXJPZmZzZXQpOwp9CgpUb2tlbiBza2lwVG9Fb2YoVG9rZW4gdG9rZW4pIHsKICB3aGlsZSAoIXRva2VuLmlzRW9mKSB7CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgfQogIHJldHVybiB0b2tlbjsKfQoKU3RyaW5nIGNsb3NlQnJhY2VGb3IoU3RyaW5nIG9wZW5CcmFjZSkgewogIHJldHVybiBjb25zdCB7CiAgICAnKCc6ICcpJywKICAgICdbJzogJ10nLAogICAgJ3snOiAnfScsCiAgICAnPCc6ICc+JywKICAgIHInJHsnOiAnfScsCiAgICAnPy5bJzogJ10nLAogIH1bb3BlbkJyYWNlXTsKfQoKU3RyaW5nIGNsb3NlUXVvdGVGb3IoU3RyaW5nIG9wZW5RdW90ZSkgewogIHJldHVybiBjb25zdCB7CiAgICAnIic6ICciJywKICAgICInIjogIiciLAogICAgJyIiIic6ICciIiInLAogICAgIicnJyI6ICInJyciLAogICAgJ3IiJzogJyInLAogICAgInInIjogIiciLAogICAgJ3IiIiInOiAnIiIiJywKICAgICJyJycnIjogIicnJyIsCiAgfVtvcGVuUXVvdGVdOwp9ClgATk48AR8BMgEuASYBKwFKTEsKTTcBSAEmGCAYBAE0GR8wKSMaCCtLMCAtHAgcBhgEARECAUY+AgEfGRgEEAIBKREODg4OEBAQAgEpEQ4OEhIPDxMTEAIBMHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zY2FubmVyL3JlY292ZXIuZGFydD1zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvc2Nhbm5lci9lcnJvcl90b2tlbi5kYXJ0mb8vLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0X3NjYW5uZXIuZXJyb3JfdG9rZW47CgppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCcgc2hvdyBCZWdpblRva2VuLCBTaW1wbGVUb2tlbiwgVG9rZW5UeXBlOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdwogICAgICAgIENvZGUsCiAgICAgICAgTWVzc2FnZSwKICAgICAgICBtZXNzYWdlRW5jb2RpbmcsCiAgICAgICAgdGVtcGxhdGVBc2NpaUNvbnRyb2xDaGFyYWN0ZXIsCiAgICAgICAgdGVtcGxhdGVOb25Bc2NpaUlkZW50aWZpZXIsCiAgICAgICAgdGVtcGxhdGVOb25Bc2NpaVdoaXRlc3BhY2UsCiAgICAgICAgdGVtcGxhdGVVbm1hdGNoZWRUb2tlbiwKICAgICAgICB0ZW1wbGF0ZVVuc3VwcG9ydGVkT3BlcmF0b3IsCiAgICAgICAgdGVtcGxhdGVVbnRlcm1pbmF0ZWRTdHJpbmc7CgppbXBvcnQgJy4uL3NjYW5uZXIuZGFydCcgc2hvdyBUb2tlbiwgdW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyOwoKaW1wb3J0ICcuLi9zY2FubmVyL3JlY292ZXIuZGFydCcgc2hvdyBjbG9zZUJyYWNlRm9yLCBjbG9zZVF1b3RlRm9yOwoKRXJyb3JUb2tlbiBidWlsZFVuZXhwZWN0ZWRDaGFyYWN0ZXJUb2tlbihpbnQgY2hhcmFjdGVyLCBpbnQgY2hhck9mZnNldCkgewogIGlmIChjaGFyYWN0ZXIgPCAweDFmKSB7CiAgICByZXR1cm4gbmV3IEFzY2lpQ29udHJvbENoYXJhY3RlclRva2VuKGNoYXJhY3RlciwgY2hhck9mZnNldCk7CiAgfQogIHN3aXRjaCAoY2hhcmFjdGVyKSB7CiAgICBjYXNlIHVuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlcjoKICAgICAgcmV0dXJuIG5ldyBFbmNvZGluZ0Vycm9yVG9rZW4oY2hhck9mZnNldCk7CgogICAgLy8vIFNlZSBbR2VuZXJhbCBQdW5jdHVhdGlvbl0KICAgIC8vLyAoaHR0cDovL3d3dy51bmljb2RlLm9yZy9jaGFydHMvUERGL1UyMDAwLnBkZikuCiAgICBjYXNlIDB4MDBBMDogLy8gTm8tYnJlYWsgc3BhY2UuCiAgICBjYXNlIDB4MTY4MDogLy8gT2doYW0gc3BhY2UgbWFyay4KICAgIGNhc2UgMHgxODBFOiAvLyBNb25nb2xpYW4gdm93ZWwgc2VwYXJhdG9yLgogICAgY2FzZSAweDIwMDA6IC8vIEVuIHF1YWQuCiAgICBjYXNlIDB4MjAwMTogLy8gRW0gcXVhZC4KICAgIGNhc2UgMHgyMDAyOiAvLyBFbiBzcGFjZS4KICAgIGNhc2UgMHgyMDAzOiAvLyBFbSBzcGFjZS4KICAgIGNhc2UgMHgyMDA0OiAvLyBUaHJlZS1wZXItZW0gc3BhY2UuCiAgICBjYXNlIDB4MjAwNTogLy8gRm91ci1wZXItZW0gc3BhY2UuCiAgICBjYXNlIDB4MjAwNjogLy8gU2l4LXBlci1lbSBzcGFjZS4KICAgIGNhc2UgMHgyMDA3OiAvLyBGaWd1cmUgc3BhY2UuCiAgICBjYXNlIDB4MjAwODogLy8gUHVuY3R1YXRpb24gc3BhY2UuCiAgICBjYXNlIDB4MjAwOTogLy8gVGhpbiBzcGFjZS4KICAgIGNhc2UgMHgyMDBBOiAvLyBIYWlyIHNwYWNlLgogICAgY2FzZSAweDIwMEI6IC8vIFplcm8gd2lkdGggc3BhY2UuCiAgICBjYXNlIDB4MjAyODogLy8gTGluZSBzZXBhcmF0b3IuCiAgICBjYXNlIDB4MjAyOTogLy8gUGFyYWdyYXBoIHNlcGFyYXRvci4KICAgIGNhc2UgMHgyMDJGOiAvLyBOYXJyb3cgbm8tYnJlYWsgc3BhY2UuCiAgICBjYXNlIDB4MjA1RjogLy8gTWVkaXVtIG1hdGhlbWF0aWNhbCBzcGFjZS4KICAgIGNhc2UgMHgzMDAwOiAvLyBJZGVvZ3JhcGhpYyBzcGFjZS4KICAgIGNhc2UgMHhGRUZGOiAvLyBaZXJvIHdpZHRoIG5vLWJyZWFrIHNwYWNlLgogICAgICByZXR1cm4gbmV3IE5vbkFzY2lpV2hpdGVzcGFjZVRva2VuKGNoYXJhY3RlciwgY2hhck9mZnNldCk7CgogICAgZGVmYXVsdDoKICAgICAgcmV0dXJuIG5ldyBOb25Bc2NpaUlkZW50aWZpZXJUb2tlbihjaGFyYWN0ZXIsIGNoYXJPZmZzZXQpOwogIH0KfQoKLy8vIENvbW1vbiBzdXBlcmNsYXNzIGZvciBhbGwgZXJyb3IgdG9rZW5zLgovLy8KLy8vIEl0J3MgY29uc2lkZXJlZCBhbiBpbXBsZW1lbnRhdGlvbiBlcnJvciB0byBhY2Nlc3MgW2xleGVtZV0gb2YgYW4KLy8vIFtFcnJvclRva2VuXS4KYWJzdHJhY3QgY2xhc3MgRXJyb3JUb2tlbiBleHRlbmRzIFNpbXBsZVRva2VuIHsKICBFcnJvclRva2VuKGludCBvZmZzZXQpIDogc3VwZXIoVG9rZW5UeXBlLkJBRF9JTlBVVCwgb2Zmc2V0LCBudWxsKTsKCiAgLy8vIFRoaXMgaXMgYSB0b2tlbiB0aGF0IHdyYXBzIGFyb3VuZCBhbiBlcnJvciBtZXNzYWdlLiBSZXR1cm4gMQogIC8vLyBpbnN0ZWFkIG9mIHRoZSBzaXplIG9mIHRoZSBsZW5ndGggb2YgdGhlIGVycm9yIG1lc3NhZ2UuCiAgQG92ZXJyaWRlCiAgaW50IGdldCBsZW5ndGggPT4gMTsKCiAgU3RyaW5nIGdldCBsZXhlbWUgewogICAgU3RyaW5nIGVycm9yTXNnID0gYXNzZXJ0aW9uTWVzc2FnZS5tZXNzYWdlOwoKICAgIC8vIEF0dGVtcHQgdG8gaW5jbHVkZSB0aGUgbG9jYXRpb24gd2hpY2ggaXMgY2FsbGluZyB0aGUgcGFyc2VyCiAgICAvLyBpbiBhbiBlZmZvcnQgdG8gZGVidWcgaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9zZGsvaXNzdWVzLzM3NTI4CiAgICBSZWdFeHAgcGF0dGVybiA9IG5ldyBSZWdFeHAoJ14jWzAtOV0qICpQYXJzZXInKTsKICAgIExpc3Q8U3RyaW5nPiB0cmFjZUxpbmVzID0gU3RhY2tUcmFjZS5jdXJyZW50LnRvU3RyaW5nKCkuc3BsaXQoJ1xuJyk7CiAgICBmb3IgKGludCBpbmRleCA9IHRyYWNlTGluZXMubGVuZ3RoIC0gMjsgaW5kZXggPj0gMDsgLS1pbmRleCkgewogICAgICBTdHJpbmcgbGluZSA9IHRyYWNlTGluZXNbaW5kZXhdOwogICAgICBpZiAobGluZS5zdGFydHNXaXRoKHBhdHRlcm4pKSB7CiAgICAgICAgZXJyb3JNc2cgPSAnJGVycm9yTXNnIC0gJHt0cmFjZUxpbmVzW2luZGV4ICsgMV19JzsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQoKICAgIHRocm93IGVycm9yTXNnOwogIH0KCiAgTWVzc2FnZSBnZXQgYXNzZXJ0aW9uTWVzc2FnZTsKCiAgQ29kZTxkeW5hbWljPiBnZXQgZXJyb3JDb2RlID0+IGFzc2VydGlvbk1lc3NhZ2UuY29kZTsKCiAgaW50IGdldCBjaGFyYWN0ZXIgPT4gbnVsbDsKCiAgU3RyaW5nIGdldCBzdGFydCA9PiBudWxsOwoKICBpbnQgZ2V0IGVuZE9mZnNldCA9PiBudWxsOwoKICBCZWdpblRva2VuIGdldCBiZWdpbiA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBjb3B5KCkgewogICAgdGhyb3cgJ3Vuc3VwcG9ydGVkIG9wZXJhdGlvbic7CiAgfQp9CgovLy8gUmVwcmVzZW50cyBhbiBlbmNvZGluZyBlcnJvci4KY2xhc3MgRW5jb2RpbmdFcnJvclRva2VuIGV4dGVuZHMgRXJyb3JUb2tlbiB7CiAgRW5jb2RpbmdFcnJvclRva2VuKGludCBjaGFyT2Zmc2V0KSA6IHN1cGVyKGNoYXJPZmZzZXQpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiRW5jb2RpbmdFcnJvclRva2VuKCkiOwoKICBNZXNzYWdlIGdldCBhc3NlcnRpb25NZXNzYWdlID0+IG1lc3NhZ2VFbmNvZGluZzsKfQoKLy8vIFJlcHJlc2VudHMgYSBub24tQVNDSUkgY2hhcmFjdGVyIG91dHNpZGUgYSBzdHJpbmcgb3IgY29tbWVudC4KY2xhc3MgTm9uQXNjaWlJZGVudGlmaWVyVG9rZW4gZXh0ZW5kcyBFcnJvclRva2VuIHsKICBmaW5hbCBpbnQgY2hhcmFjdGVyOwoKICBOb25Bc2NpaUlkZW50aWZpZXJUb2tlbih0aGlzLmNoYXJhY3RlciwgaW50IGNoYXJPZmZzZXQpIDogc3VwZXIoY2hhck9mZnNldCk7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJOb25Bc2NpaUlkZW50aWZpZXJUb2tlbigkY2hhcmFjdGVyKSI7CgogIE1lc3NhZ2UgZ2V0IGFzc2VydGlvbk1lc3NhZ2UgPT4gdGVtcGxhdGVOb25Bc2NpaUlkZW50aWZpZXIud2l0aEFyZ3VtZW50cygKICAgICAgbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKFtjaGFyYWN0ZXJdKSwgY2hhcmFjdGVyKTsKfQoKLy8vIFJlcHJlc2VudHMgYSBub24tQVNDSUkgd2hpdGVzcGFjZSBvdXRzaWRlIGEgc3RyaW5nIG9yIGNvbW1lbnQuCmNsYXNzIE5vbkFzY2lpV2hpdGVzcGFjZVRva2VuIGV4dGVuZHMgRXJyb3JUb2tlbiB7CiAgZmluYWwgaW50IGNoYXJhY3RlcjsKCiAgTm9uQXNjaWlXaGl0ZXNwYWNlVG9rZW4odGhpcy5jaGFyYWN0ZXIsIGludCBjaGFyT2Zmc2V0KSA6IHN1cGVyKGNoYXJPZmZzZXQpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiTm9uQXNjaWlXaGl0ZXNwYWNlVG9rZW4oJGNoYXJhY3RlcikiOwoKICBNZXNzYWdlIGdldCBhc3NlcnRpb25NZXNzYWdlID0+CiAgICAgIHRlbXBsYXRlTm9uQXNjaWlXaGl0ZXNwYWNlLndpdGhBcmd1bWVudHMoY2hhcmFjdGVyKTsKfQoKLy8vIFJlcHJlc2VudHMgYW4gQVNDSUkgY29udHJvbCBjaGFyYWN0ZXIgb3V0c2lkZSBhIHN0cmluZyBvciBjb21tZW50LgpjbGFzcyBBc2NpaUNvbnRyb2xDaGFyYWN0ZXJUb2tlbiBleHRlbmRzIEVycm9yVG9rZW4gewogIGZpbmFsIGludCBjaGFyYWN0ZXI7CgogIEFzY2lpQ29udHJvbENoYXJhY3RlclRva2VuKHRoaXMuY2hhcmFjdGVyLCBpbnQgY2hhck9mZnNldCkKICAgICAgOiBzdXBlcihjaGFyT2Zmc2V0KTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkFzY2lpQ29udHJvbENoYXJhY3RlclRva2VuKCRjaGFyYWN0ZXIpIjsKCiAgTWVzc2FnZSBnZXQgYXNzZXJ0aW9uTWVzc2FnZSA9PgogICAgICB0ZW1wbGF0ZUFzY2lpQ29udHJvbENoYXJhY3Rlci53aXRoQXJndW1lbnRzKGNoYXJhY3Rlcik7Cn0KCi8vLyBEZW5vdGVzIGFuIG9wZXJhdG9yIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgRGFydCBsYW5ndWFnZS4KY2xhc3MgVW5zdXBwb3J0ZWRPcGVyYXRvciBleHRlbmRzIEVycm9yVG9rZW4gewogIFRva2VuIHRva2VuOwoKICBVbnN1cHBvcnRlZE9wZXJhdG9yKHRoaXMudG9rZW4sIGludCBjaGFyT2Zmc2V0KSA6IHN1cGVyKGNoYXJPZmZzZXQpOwoKICBAb3ZlcnJpZGUKICBNZXNzYWdlIGdldCBhc3NlcnRpb25NZXNzYWdlID0+CiAgICAgIHRlbXBsYXRlVW5zdXBwb3J0ZWRPcGVyYXRvci53aXRoQXJndW1lbnRzKHRva2VuKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIlVuc3VwcG9ydGVkT3BlcmF0b3IoJHt0b2tlbi5sZXhlbWV9KSI7Cn0KCi8vLyBSZXByZXNlbnRzIGFuIHVudGVybWluYXRlZCBzdHJpbmcuCmNsYXNzIFVudGVybWluYXRlZFN0cmluZyBleHRlbmRzIEVycm9yVG9rZW4gewogIGZpbmFsIFN0cmluZyBzdGFydDsKICBmaW5hbCBpbnQgZW5kT2Zmc2V0OwoKICBVbnRlcm1pbmF0ZWRTdHJpbmcodGhpcy5zdGFydCwgaW50IGNoYXJPZmZzZXQsIHRoaXMuZW5kT2Zmc2V0KQogICAgICA6IHN1cGVyKGNoYXJPZmZzZXQpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiVW50ZXJtaW5hdGVkU3RyaW5nKCRzdGFydCkiOwoKICBpbnQgZ2V0IGNoYXJDb3VudCA9PiBlbmRPZmZzZXQgLSBjaGFyT2Zmc2V0OwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBjaGFyQ291bnQ7CgogIE1lc3NhZ2UgZ2V0IGFzc2VydGlvbk1lc3NhZ2UgPT4KICAgICAgdGVtcGxhdGVVbnRlcm1pbmF0ZWRTdHJpbmcud2l0aEFyZ3VtZW50cyhzdGFydCwgY2xvc2VRdW90ZUZvcihzdGFydCkpOwp9CgovLy8gUmVwcmVzZW50cyBhbiB1bnRlcm1pbmF0ZWQgdG9rZW4uCmNsYXNzIFVudGVybWluYXRlZFRva2VuIGV4dGVuZHMgRXJyb3JUb2tlbiB7CiAgZmluYWwgTWVzc2FnZSBhc3NlcnRpb25NZXNzYWdlOwogIGZpbmFsIGludCBlbmRPZmZzZXQ7CgogIFVudGVybWluYXRlZFRva2VuKHRoaXMuYXNzZXJ0aW9uTWVzc2FnZSwgaW50IGNoYXJPZmZzZXQsIHRoaXMuZW5kT2Zmc2V0KQogICAgICA6IHN1cGVyKGNoYXJPZmZzZXQpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiVW50ZXJtaW5hdGVkVG9rZW4oJHthc3NlcnRpb25NZXNzYWdlLmNvZGUubmFtZX0pIjsKCiAgaW50IGdldCBjaGFyQ291bnQgPT4gZW5kT2Zmc2V0IC0gY2hhck9mZnNldDsKfQoKLy8vIFJlcHJlc2VudHMgYW4gb3BlbiBicmFjZSB3aXRob3V0IGEgbWF0Y2hpbmcgY2xvc2UgYnJhY2UuCi8vLwovLy8gSW4gdGhpcyBjYXNlLCBicmFjZSBtZWFucyBhbnkgb2YgYChgLCBge2AsIGBbYCwgYW5kIGA8YCwgcGFyZW50aGVzaXMsIGN1cmx5Ci8vLyBicmFjZSwgc3F1YXJlIGJyYWNlLCBhbmQgYW5nbGUgYnJhY2UsIHJlc3BlY3RpdmVseS4KY2xhc3MgVW5tYXRjaGVkVG9rZW4gZXh0ZW5kcyBFcnJvclRva2VuIHsKICBmaW5hbCBCZWdpblRva2VuIGJlZ2luOwoKICBVbm1hdGNoZWRUb2tlbihCZWdpblRva2VuIGJlZ2luKQogICAgICA6IHRoaXMuYmVnaW4gPSBiZWdpbiwKICAgICAgICBzdXBlcihiZWdpbi5jaGFyT2Zmc2V0KTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIlVubWF0Y2hlZFRva2VuKCR7YmVnaW4ubGV4ZW1lfSkiOwoKICBNZXNzYWdlIGdldCBhc3NlcnRpb25NZXNzYWdlID0+CiAgICAgIHRlbXBsYXRlVW5tYXRjaGVkVG9rZW4ud2l0aEFyZ3VtZW50cyhjbG9zZUJyYWNlRm9yKGJlZ2luLmxleGVtZSksIGJlZ2luKTsKfQqA2wBOTjwBIgFLAR0JDhEZJyQkICUkAUIBRAFKGkIEFyYxASI3JCYvHR0eHignJiInICAmJCkrLycvQQENQQQCASwERRIwRQFDPgwXARYwAUNLNUlDJyY7DwgGARQEASABOAEdARwBHQEgAQwRIwQCASIuOgEvATMCAUIzFwFPAT4BTDkCAUMzFwFPAT4BIjsCAUc2FwE9GwFBASI+AgFELw8BRwEMIjgBDD8CAScuFhcBQRsBNQEvAR8BIk0CASYtIhcBSxsBSwEvAgE9BFA4KhoBIxwhAToBIlACATRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2Nhbm5lci9lcnJvcl90b2tlbi5kYXJ0QXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9zY2FubmVyL3Rva2VuX2NvbnN0YW50cy5kYXJ0j4kvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5zY2FubmVyLnRva2VuX2NvbnN0YW50czsKCmltcG9ydCAnY2hhcmFjdGVycy5kYXJ0JzsKCmNvbnN0IGludCBFT0ZfVE9LRU4gPSAwOwoKY29uc3QgaW50IEtFWVdPUkRfVE9LRU4gPSAkazsKY29uc3QgaW50IElERU5USUZJRVJfVE9LRU4gPSAkYTsKY29uc3QgaW50IFNDUklQVF9UT0tFTiA9ICRiOwpjb25zdCBpbnQgQkFEX0lOUFVUX1RPS0VOID0gJFg7CmNvbnN0IGludCBET1VCTEVfVE9LRU4gPSAkZDsKY29uc3QgaW50IElOVF9UT0tFTiA9ICRpOwpjb25zdCBpbnQgUkVDT1ZFUllfVE9LRU4gPSAkcjsKY29uc3QgaW50IEhFWEFERUNJTUFMX1RPS0VOID0gJHg7CmNvbnN0IGludCBTVFJJTkdfVE9LRU4gPSAkU1E7Cgpjb25zdCBpbnQgQU1QRVJTQU5EX1RPS0VOID0gJEFNUEVSU0FORDsKY29uc3QgaW50IEJBQ0tQSU5HX1RPS0VOID0gJEJBQ0tQSU5HOwpjb25zdCBpbnQgQkFDS1NMQVNIX1RPS0VOID0gJEJBQ0tTTEFTSDsKY29uc3QgaW50IEJBTkdfVE9LRU4gPSAkQkFORzsKY29uc3QgaW50IEJBUl9UT0tFTiA9ICRCQVI7CmNvbnN0IGludCBDT0xPTl9UT0tFTiA9ICRDT0xPTjsKY29uc3QgaW50IENPTU1BX1RPS0VOID0gJENPTU1BOwpjb25zdCBpbnQgRVFfVE9LRU4gPSAkRVE7CmNvbnN0IGludCBHVF9UT0tFTiA9ICRHVDsKY29uc3QgaW50IEhBU0hfVE9LRU4gPSAkSEFTSDsKY29uc3QgaW50IE9QRU5fQ1VSTFlfQlJBQ0tFVF9UT0tFTiA9ICRPUEVOX0NVUkxZX0JSQUNLRVQ7CmNvbnN0IGludCBPUEVOX1NRVUFSRV9CUkFDS0VUX1RPS0VOID0gJE9QRU5fU1FVQVJFX0JSQUNLRVQ7CmNvbnN0IGludCBPUEVOX1BBUkVOX1RPS0VOID0gJE9QRU5fUEFSRU47CmNvbnN0IGludCBMVF9UT0tFTiA9ICRMVDsKY29uc3QgaW50IE1JTlVTX1RPS0VOID0gJE1JTlVTOwpjb25zdCBpbnQgUEVSSU9EX1RPS0VOID0gJFBFUklPRDsKY29uc3QgaW50IFBMVVNfVE9LRU4gPSAkUExVUzsKY29uc3QgaW50IFFVRVNUSU9OX1RPS0VOID0gJFFVRVNUSU9OOwpjb25zdCBpbnQgQVRfVE9LRU4gPSAkQVQ7CmNvbnN0IGludCBDTE9TRV9DVVJMWV9CUkFDS0VUX1RPS0VOID0gJENMT1NFX0NVUkxZX0JSQUNLRVQ7CmNvbnN0IGludCBDTE9TRV9TUVVBUkVfQlJBQ0tFVF9UT0tFTiA9ICRDTE9TRV9TUVVBUkVfQlJBQ0tFVDsKY29uc3QgaW50IENMT1NFX1BBUkVOX1RPS0VOID0gJENMT1NFX1BBUkVOOwpjb25zdCBpbnQgU0VNSUNPTE9OX1RPS0VOID0gJFNFTUlDT0xPTjsKY29uc3QgaW50IFNMQVNIX1RPS0VOID0gJFNMQVNIOwpjb25zdCBpbnQgVElMREVfVE9LRU4gPSAkVElMREU7CmNvbnN0IGludCBTVEFSX1RPS0VOID0gJFNUQVI7CmNvbnN0IGludCBQRVJDRU5UX1RPS0VOID0gJFBFUkNFTlQ7CmNvbnN0IGludCBDQVJFVF9UT0tFTiA9ICRDQVJFVDsKCmNvbnN0IGludCBTVFJJTkdfSU5URVJQT0xBVElPTl9UT0tFTiA9IDEyODsKY29uc3QgaW50IExUX0VRX1RPS0VOID0gU1RSSU5HX0lOVEVSUE9MQVRJT05fVE9LRU4gKyAxOwpjb25zdCBpbnQgRlVOQ1RJT05fVE9LRU4gPSBMVF9FUV9UT0tFTiArIDE7CmNvbnN0IGludCBTTEFTSF9FUV9UT0tFTiA9IEZVTkNUSU9OX1RPS0VOICsgMTsKY29uc3QgaW50IFBFUklPRF9QRVJJT0RfUEVSSU9EX1RPS0VOID0gU0xBU0hfRVFfVE9LRU4gKyAxOwpjb25zdCBpbnQgUEVSSU9EX1BFUklPRF9UT0tFTiA9IFBFUklPRF9QRVJJT0RfUEVSSU9EX1RPS0VOICsgMTsKY29uc3QgaW50IEVRX0VRX0VRX1RPS0VOID0gUEVSSU9EX1BFUklPRF9UT0tFTiArIDE7CmNvbnN0IGludCBFUV9FUV9UT0tFTiA9IEVRX0VRX0VRX1RPS0VOICsgMTsKY29uc3QgaW50IExUX0xUX0VRX1RPS0VOID0gRVFfRVFfVE9LRU4gKyAxOwpjb25zdCBpbnQgTFRfTFRfVE9LRU4gPSBMVF9MVF9FUV9UT0tFTiArIDE7CmNvbnN0IGludCBHVF9FUV9UT0tFTiA9IExUX0xUX1RPS0VOICsgMTsKY29uc3QgaW50IEdUX0dUX0VRX1RPS0VOID0gR1RfRVFfVE9LRU4gKyAxOwpjb25zdCBpbnQgSU5ERVhfRVFfVE9LRU4gPSBHVF9HVF9FUV9UT0tFTiArIDE7CmNvbnN0IGludCBJTkRFWF9UT0tFTiA9IElOREVYX0VRX1RPS0VOICsgMTsKY29uc3QgaW50IEJBTkdfRVFfRVFfVE9LRU4gPSBJTkRFWF9UT0tFTiArIDE7CmNvbnN0IGludCBCQU5HX0VRX1RPS0VOID0gQkFOR19FUV9FUV9UT0tFTiArIDE7CmNvbnN0IGludCBBTVBFUlNBTkRfQU1QRVJTQU5EX1RPS0VOID0gQkFOR19FUV9UT0tFTiArIDE7CmNvbnN0IGludCBBTVBFUlNBTkRfQU1QRVJTQU5EX0VRX1RPS0VOID0gQU1QRVJTQU5EX0FNUEVSU0FORF9UT0tFTiArIDE7CmNvbnN0IGludCBBTVBFUlNBTkRfRVFfVE9LRU4gPSBBTVBFUlNBTkRfQU1QRVJTQU5EX0VRX1RPS0VOICsgMTsKY29uc3QgaW50IEJBUl9CQVJfVE9LRU4gPSBBTVBFUlNBTkRfRVFfVE9LRU4gKyAxOwpjb25zdCBpbnQgQkFSX0JBUl9FUV9UT0tFTiA9IEJBUl9CQVJfVE9LRU4gKyAxOwpjb25zdCBpbnQgQkFSX0VRX1RPS0VOID0gQkFSX0JBUl9FUV9UT0tFTiArIDE7CmNvbnN0IGludCBTVEFSX0VRX1RPS0VOID0gQkFSX0VRX1RPS0VOICsgMTsKY29uc3QgaW50IFBMVVNfUExVU19UT0tFTiA9IFNUQVJfRVFfVE9LRU4gKyAxOwpjb25zdCBpbnQgUExVU19FUV9UT0tFTiA9IFBMVVNfUExVU19UT0tFTiArIDE7CmNvbnN0IGludCBNSU5VU19NSU5VU19UT0tFTiA9IFBMVVNfRVFfVE9LRU4gKyAxOwpjb25zdCBpbnQgTUlOVVNfRVFfVE9LRU4gPSBNSU5VU19NSU5VU19UT0tFTiArIDE7CmNvbnN0IGludCBUSUxERV9TTEFTSF9FUV9UT0tFTiA9IE1JTlVTX0VRX1RPS0VOICsgMTsKY29uc3QgaW50IFRJTERFX1NMQVNIX1RPS0VOID0gVElMREVfU0xBU0hfRVFfVE9LRU4gKyAxOwpjb25zdCBpbnQgUEVSQ0VOVF9FUV9UT0tFTiA9IFRJTERFX1NMQVNIX1RPS0VOICsgMTsKY29uc3QgaW50IEdUX0dUX1RPS0VOID0gUEVSQ0VOVF9FUV9UT0tFTiArIDE7CmNvbnN0IGludCBDQVJFVF9FUV9UT0tFTiA9IEdUX0dUX1RPS0VOICsgMTsKY29uc3QgaW50IENPTU1FTlRfVE9LRU4gPSBDQVJFVF9FUV9UT0tFTiArIDE7CmNvbnN0IGludCBTVFJJTkdfSU5URVJQT0xBVElPTl9JREVOVElGSUVSX1RPS0VOID0gQ09NTUVOVF9UT0tFTiArIDE7CmNvbnN0IGludCBRVUVTVElPTl9QRVJJT0RfVE9LRU4gPSBTVFJJTkdfSU5URVJQT0xBVElPTl9JREVOVElGSUVSX1RPS0VOICsgMTsKY29uc3QgaW50IFFVRVNUSU9OX1FVRVNUSU9OX1RPS0VOID0gUVVFU1RJT05fUEVSSU9EX1RPS0VOICsgMTsKY29uc3QgaW50IFFVRVNUSU9OX1FVRVNUSU9OX0VRX1RPS0VOID0gUVVFU1RJT05fUVVFU1RJT05fVE9LRU4gKyAxOwpjb25zdCBpbnQgR0VORVJJQ19NRVRIT0RfVFlQRV9BU1NJR05fVE9LRU4gPSBRVUVTVElPTl9RVUVTVElPTl9FUV9UT0tFTiArIDE7CmNvbnN0IGludCBHRU5FUklDX01FVEhPRF9UWVBFX0xJU1RfVE9LRU4gPSBHRU5FUklDX01FVEhPRF9UWVBFX0FTU0lHTl9UT0tFTiArIDE7CmNvbnN0IGludCBHVF9HVF9HVF9UT0tFTiA9IEdFTkVSSUNfTUVUSE9EX1RZUEVfTElTVF9UT0tFTiArIDE7CmNvbnN0IGludCBQRVJJT0RfUEVSSU9EX1BFUklPRF9RVUVTVElPTl9UT0tFTiA9IEdUX0dUX0dUX1RPS0VOICsgMTsKY29uc3QgaW50IEdUX0dUX0dUX0VRX1RPS0VOID0gUEVSSU9EX1BFUklPRF9QRVJJT0RfUVVFU1RJT05fVE9LRU4gKyAxOwpjb25zdCBpbnQgUVVFU1RJT05fUEVSSU9EX09QRU5fU1FVQVJFX0JSQUNLRVRfVE9LRU4gPSBHVF9HVF9HVF9FUV9UT0tFTiArIDE7Cl4ATk48AScBGgEZAR4hHSAdGh8iHgEoJigeHCAgGhoeOjwqGiAiHiYaPD4sKCAgHiQgASw4LC87QDQsLCwpLC8sLjA5SEEyMC8sLy8xMjU4NC4sLkVNP0RNUT9ER00BOHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zY2FubmVyL3Rva2VuX2NvbnN0YW50cy5kYXJ0PXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwvYm9keV9idWlsZGVyLmRhcnTAAw8ALy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuYm9keV9idWlsZGVyOwoKaW1wb3J0ICdkYXJ0OmNvcmUnIGhpZGUgTWFwRW50cnk7CgppbXBvcnQgJy4uL2J1aWxkZXIvZGVjbGFyYXRpb25fYnVpbGRlci5kYXJ0JzsKCmltcG9ydCAnLi4vY29uc3RhbnRfY29udGV4dC5kYXJ0JyBzaG93IENvbnN0YW50Q29udGV4dDsKCmltcG9ydCAnLi4vZGlsbC9kaWxsX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IERpbGxMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcgYXMgZmFzdGE7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnIHNob3cgTG9jYXRlZE1lc3NhZ2UsIE1lc3NhZ2UsIG5vTGVuZ3RoLCBUZW1wbGF0ZTsKCmltcG9ydCAnLi4vbWVzc2FnZXMuZGFydCcgYXMgbWVzc2FnZXMgc2hvdyBnZXRMb2NhdGlvbkZyb21Vcmk7CgppbXBvcnQgJy4uL21vZGlmaWVyLmRhcnQnCiAgICBzaG93IE1vZGlmaWVyLCBjb25zdE1hc2ssIGNvdmFyaWFudE1hc2ssIGZpbmFsTWFzaywgbGF0ZU1hc2s7CgppbXBvcnQgJy4uL25hbWVzLmRhcnQnCiAgICBzaG93IGNhbGxOYW1lLCBlbXB0eU5hbWUsIGluZGV4R2V0TmFtZSwgaW5kZXhTZXROYW1lLCBtaW51c05hbWUsIHBsdXNOYW1lOwoKaW1wb3J0ICcuLi9wYXJzZXIuZGFydCcKICAgIHNob3cKICAgICAgICBBc3NlcnQsCiAgICAgICAgUGFyc2VyLAogICAgICAgIEZvcm1hbFBhcmFtZXRlcktpbmQsCiAgICAgICAgSWRlbnRpZmllckNvbnRleHQsCiAgICAgICAgTWVtYmVyS2luZCwKICAgICAgICBsZW5ndGhGb3JUb2tlbiwKICAgICAgICBsZW5ndGhPZlNwYW4sCiAgICAgICAgb2Zmc2V0Rm9yVG9rZW4sCiAgICAgICAgb3B0aW9uYWw7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnCiAgICBzaG93IGludGVybmFsUHJvYmxlbSwgdW5leHBlY3RlZCwgdW5oYW5kbGVkLCB1bnN1cHBvcnRlZDsKCmltcG9ydCAnLi4vcXVvdGUuZGFydCcKICAgIHNob3cKICAgICAgICBRdW90ZSwKICAgICAgICBhbmFseXplUXVvdGUsCiAgICAgICAgdW5lc2NhcGUsCiAgICAgICAgdW5lc2NhcGVGaXJzdFN0cmluZ1BhcnQsCiAgICAgICAgdW5lc2NhcGVMYXN0U3RyaW5nUGFydCwKICAgICAgICB1bmVzY2FwZVN0cmluZzsKCmltcG9ydCAnLi4vc2Nhbm5lci5kYXJ0JyBzaG93IFRva2VuOwoKaW1wb3J0ICcuLi9zY2FubmVyL3Rva2VuLmRhcnQnCiAgICBzaG93IGlzQmluYXJ5T3BlcmF0b3IsIGlzTWludXNPcGVyYXRvciwgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I7CgppbXBvcnQgJy4uL3Njb3BlLmRhcnQnIHNob3cgUHJvYmxlbUJ1aWxkZXI7CgppbXBvcnQgJy4uL3NldmVyaXR5LmRhcnQnIHNob3cgU2V2ZXJpdHk7CgppbXBvcnQgJy4uL3NvdXJjZS9zY29wZV9saXN0ZW5lci5kYXJ0JwogICAgc2hvdwogICAgICAgIEZpeGVkTnVsbGFibGVMaXN0LAogICAgICAgIEdyb3dhYmxlTGlzdCwKICAgICAgICBKdW1wVGFyZ2V0S2luZCwKICAgICAgICBOdWxsVmFsdWUsCiAgICAgICAgUGFyc2VyUmVjb3ZlcnksCiAgICAgICAgU2NvcGVMaXN0ZW5lcjsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnLi4vc291cmNlL3ZhbHVlX2tpbmRzLmRhcnQnOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX2luZmVycmVyLmRhcnQnIHNob3cgVHlwZUluZmVycmVyOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX3Byb21vdGlvbi5kYXJ0JwogICAgc2hvdyBUeXBlUHJvbW90ZXIsIFR5cGVQcm9tb3Rpb25GYWN0LCBUeXBlUHJvbW90aW9uU2NvcGU7CgppbXBvcnQgJ2NvbGxlY3Rpb25zLmRhcnQnCiAgICBzaG93CiAgICAgICAgU3ByZWFkRWxlbWVudCwKICAgICAgICBTcHJlYWRNYXBFbnRyeSwKICAgICAgICBjb252ZXJ0VG9NYXBFbnRyeSwKICAgICAgICBpc0NvbnZlcnRpYmxlVG9NYXBFbnRyeTsKCmltcG9ydCAnY29uc3RuZXNzLmRhcnQnIHNob3cgQ29uc3RuZXNzOwoKaW1wb3J0ICdleHByZXNzaW9uX2dlbmVyYXRvci5kYXJ0JzsKCmltcG9ydCAnZXhwcmVzc2lvbl9nZW5lcmF0b3JfaGVscGVyLmRhcnQnIHNob3cgRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlcjsKCmltcG9ydCAnZm9yZXN0LmRhcnQnIHNob3cgRm9yZXN0OwoKaW1wb3J0ICdpbXBsaWNpdF90eXBlX2FyZ3VtZW50LmRhcnQnIHNob3cgSW1wbGljaXRUeXBlQXJndW1lbnQ7CgppbXBvcnQgJ2tlcm5lbF9zaGFkb3dfYXN0LmRhcnQnIGFzIHNoYWRvdwogICAgc2hvdyBTeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnQsIFN5bnRoZXRpY1dyYXBwZXI7CgppbXBvcnQgJ3JlZGlyZWN0aW5nX2ZhY3RvcnlfYm9keS5kYXJ0JwogICAgc2hvdwogICAgICAgIFJlZGlyZWN0aW5nRmFjdG9yeUJvZHksCiAgICAgICAgUmVkaXJlY3Rpb25UYXJnZXQsCiAgICAgICAgZ2V0UmVkaXJlY3RpbmdGYWN0b3J5Qm9keSwKICAgICAgICBnZXRSZWRpcmVjdGlvblRhcmdldCwKICAgICAgICBpc1JlZGlyZWN0aW5nRmFjdG9yeTsKCmltcG9ydCAndHlwZV9hbGdvcml0aG1zLmRhcnQnIHNob3cgY2FsY3VsYXRlQm91bmRzOwoKaW1wb3J0ICdrZXJuZWxfYXBpLmRhcnQnOwoKaW1wb3J0ICdrZXJuZWxfYXN0X2FwaS5kYXJ0JzsKCmltcG9ydCAna2VybmVsX2J1aWxkZXIuZGFydCc7CgovLyBUT0RPKGFoZSk6IFJlbW92ZSB0aGlzIGFuZCBlbnN1cmUgYWxsIG5vZGVzIGhhdmUgYSBsb2NhdGlvbi4KY29uc3QgTnVsbCBub0xvY2F0aW9uID0gbnVsbDsKCi8vIFRPRE8oZGFucnViZWwpOiBSZW1vdmUgdGhpcyBvbmNlIGNvbnRyb2wgZmxvdyBhbmQgc3ByZWFkIGNvbGxlY3Rpb24gc3VwcG9ydAovLyBoYXMgYmVlbiBlbmFibGVkIGJ5IGRlZmF1bHQuCmNvbnN0IE9iamVjdCBpbnZhbGlkQ29sbGVjdGlvbkVsZW1lbnQgPSBjb25zdCBPYmplY3QoKTsKCmNsYXNzIEJvZHlCdWlsZGVyIGV4dGVuZHMgU2NvcGVMaXN0ZW5lcjxKdW1wVGFyZ2V0PgogICAgaW1wbGVtZW50cyBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyLCBFbnN1cmVMb2FkZWQgewogIGZpbmFsIEZvcmVzdCBmb3Jlc3Q7CgogIC8vIFRPRE8oYWhlKTogUmVuYW1lIFtsaWJyYXJ5XSB0byAncGFydCcuCiAgQG92ZXJyaWRlCiAgZmluYWwgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeUJ1aWxkZXI7CgogIGZpbmFsIE1vZGlmaWVyQnVpbGRlciBtZW1iZXI7CgogIC8vLyBUaGUgY2xhc3MsIG1peGluIG9yIGV4dGVuc2lvbiBkZWNsYXJhdGlvbiBpbiB3aGljaCBbbWVtYmVyXSBpcyBkZWNsYXJlZCwKICAvLy8gaWYgYW55LgogIGZpbmFsIERlY2xhcmF0aW9uQnVpbGRlciBkZWNsYXJhdGlvbkJ1aWxkZXI7CgogIC8vLyBUaGUgY2xhc3Mgb3IgbWl4aW4gZGVjbGFyYXRpb24gaW4gd2hpY2ggW21lbWJlcl0gaXMgZGVjbGFyZWQsIGlmIGFueS4KICBmaW5hbCBDbGFzc0J1aWxkZXIgY2xhc3NCdWlsZGVyOwoKICBmaW5hbCBDbGFzc0hpZXJhcmNoeSBoaWVyYXJjaHk7CgogIEBvdmVycmlkZQogIGZpbmFsIENvcmVUeXBlcyBjb3JlVHlwZXM7CgogIGZpbmFsIGJvb2wgaXNEZWNsYXJhdGlvbkluc3RhbmNlTWVtYmVyOwoKICBmaW5hbCBTY29wZSBlbmNsb3NpbmdTY29wZTsKCiAgZmluYWwgYm9vbCBlbmFibGVOYXRpdmU7CgogIGZpbmFsIGJvb2wgc3RyaW5nRXhwZWN0ZWRBZnRlck5hdGl2ZTsKCiAgLy8vIFdoZXRoZXIgdG8gaWdub3JlIGFuIHVucmVzb2x2ZWQgcmVmZXJlbmNlIHRvIGBtYWluYCB3aXRoaW4gdGhlIGJvZHkgb2YKICAvLy8gYF9nZXRNYWluQ2xvc3VyZWAgd2hlbiBjb21waWxpbmcgdGhlIGN1cnJlbnQgbGlicmFyeS4KICAvLy8KICAvLy8gVGhpcyBhcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kLiBUaGUgc3RhbmRhbG9uZSBWTSBhbmQgZmx1dHRlciBoYXZlCiAgLy8vIHNwZWNpYWwgbG9naWMgdG8gcmVzb2x2ZSBgbWFpbmAgaW4gYF9nZXRNYWluQ2xvc3VyZWAsIHRoaXMgZmxhZyBpcyB1c2VkIHRvCiAgLy8vIGlnbm9yZSB0aGF0IHJlZmVyZW5jZSB0byBgbWFpbmAsIGJ1dCBvbmx5IG9uIGxpYnJhcmllcyB3aGVyZSB3ZSBleHBlY3QgdG8KICAvLy8gc2VlIGl0ICh0b2RheSB0aGF0IGlzIGRhcnQ6X2J1aWx0aW4gYW5kIGRhcnQ6dWkpLgogIC8vLwogIC8vIFRPRE8oYWhlLHNpZ211bmQpOiByZW1vdmUgd2hlbiB0aGUgVk0gZ2V0cyByaWQgb2YgdGhlIHNwZWNpYWwgcnVsZSwgc2VlCiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9zZGsvaXNzdWVzLzI4OTg5LgogIGZpbmFsIGJvb2wgaWdub3JlTWFpbkluR2V0TWFpbkNsb3N1cmU7CgogIC8vIFRPRE8oYWhlKTogQ29uc2lkZXIgcmVuYW1pbmcgW3VyaV0gdG8gJ3BhcnRVcmknLgogIEBvdmVycmlkZQogIGZpbmFsIFVyaSB1cmk7CgogIGZpbmFsIFR5cGVJbmZlcnJlciB0eXBlSW5mZXJyZXI7CgogIEBvdmVycmlkZQogIGZpbmFsIFR5cGVQcm9tb3RlciB0eXBlUHJvbW90ZXI7CgogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgbGVnYWN5TW9kZTsKCiAgLy8vIE9ubHkgdXNlZCB3aGVuIFttZW1iZXJdIGlzIGEgY29uc3RydWN0b3IuIEl0IHRyYWNrcyBpZiBhbiBpbXBsaWNpdCBzdXBlcgogIC8vLyBpbml0aWFsaXplciBpcyBuZWVkZWQuCiAgLy8vCiAgLy8vIEFuIGltcGxpY2l0IHN1cGVyIGluaXRpYWxpemVyIGlzbid0IG5lZWRlZAogIC8vLwogIC8vLyAxLiBpZiB0aGUgY3VycmVudCBjbGFzcyBpcyBPYmplY3QsCiAgLy8vIDIuIGlmIHRoZXJlIGlzIGFuIGV4cGxpY2l0IHN1cGVyIGluaXRpYWxpemVyLAogIC8vLyAzLiBpZiB0aGVyZSBpcyBhIHJlZGlyZWN0aW5nICh0aGlzKSBpbml0aWFsaXplciwgb3IKICAvLy8gNC4gaWYgYSBjb21waWxlLXRpbWUgZXJyb3IgcHJldmVudGVkIHVzIGZyb20gZ2VuZXJhdGluZyBjb2RlIGZvciBhbgogIC8vLyAgICBpbml0aWFsaXplci4gVGhpcyBhdm9pZHMgY2FzY2FkaW5nIGVycm9ycy4KICBib29sIG5lZWRzSW1wbGljaXRTdXBlckluaXRpYWxpemVyOwoKICBTY29wZSBmb3JtYWxQYXJhbWV0ZXJTY29wZTsKCiAgLy8vIFRoaXMgaXMgc2V0IHRvIHRydWUgd2hlbiB3ZSBzdGFydCBwYXJzaW5nIGFuIGluaXRpYWxpemVyLiBXZSB1c2UgdGhpcyB0bwogIC8vLyBmaW5kIHRoZSBjb3JyZWN0IHNjb3BlIGZvciBpbml0aWFsaXplcnMgbGlrZSBpbiB0aGlzIGV4YW1wbGU6CiAgLy8vCiAgLy8vICAgICBjbGFzcyBDIHsKICAvLy8gICAgICAgZmluYWwgeDsKICAvLy8gICAgICAgQyh4KSA6IHggPSB4OwogIC8vLyAgICAgfQogIC8vLwogIC8vLyBXaGVuIHBhcnNpbmcgdGhpcyBpbml0aWFsaXplciBgeCA9IHhgLCBgeGAgbXVzdCBiZSByZXNvbHZlZCBpbiB0d28KICAvLy8gZGlmZmVyZW50IHNjb3Blcy4gVGhlIGZpcnN0IGB4YCBtdXN0IGJlIHJlc29sdmVkIGluIHRoZSBjbGFzcycgc2NvcGUsIHRoZQogIC8vLyBzZWNvbmQgaW4gdGhlIGZvcm1hbCBwYXJhbWV0ZXIgc2NvcGUuCiAgYm9vbCBpbkluaXRpYWxpemVyID0gZmFsc2U7CgogIC8vLyBTZXQgdG8gYHRydWVgIHdoZW4gd2UgYXJlIHBhcnNpbmcgYSBmaWVsZCBpbml0aWFsaXplciBlaXRoZXIgZGlyZWN0bHkKICAvLy8gb3Igd2l0aGluIGFuIGluaXRpYWxpemVyIGxpc3QuCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBpbiBgPGluaXQ+YCBpbgogIC8vLwogIC8vLyAgICB2YXIgZm9vID0gPGluaXQ+OwogIC8vLyAgICBjbGFzcyBDbGFzcyB7CiAgLy8vICAgICAgdmFyIGJhciA9IDxpbml0PjsKICAvLy8gICAgICBDbGFzcygpIDogPGluaXQ+OwogIC8vLyAgICB9CiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBpbnN0YW5jZSBwcm9wZXJ0aWVzIGFyZSBhdmFpbGFibGUuCiAgYm9vbCBpbkZpZWxkSW5pdGlhbGl6ZXIgPSBmYWxzZTsKCiAgYm9vbCBpbkNhdGNoQ2xhdXNlID0gZmFsc2U7CgogIGJvb2wgaW5DYXRjaEJsb2NrID0gZmFsc2U7CgogIGludCBmdW5jdGlvbk5lc3RpbmdMZXZlbCA9IDA7CgogIC8vIFNldCB3aGVuIGEgc3ByZWFkIGVsZW1lbnQgaXMgZW5jb3VudGVyZWQgaW4gYSBjb2xsZWN0aW9uIHNvIHRoZSBjb2xsZWN0aW9uCiAgLy8gbmVlZHMgdG8gYmUgZGVzdWdhcmVkIGFmdGVyIHR5cGUgaW5mZXJlbmNlLgogIGJvb2wgdHJhbnNmb3JtQ29sbGVjdGlvbnMgPSBmYWxzZTsKCiAgLy8gU2V0IGJ5IHR5cGUgaW5mZXJlbmNlIHdoZW4gYSBzZXQgbGl0ZXJhbCBpcyBlbmNvdW50ZXJlZCB0aGF0IG5lZWRzIHRvIGJlCiAgLy8gdHJhbnNmb3JtZWQgYmVjYXVzZSB0aGUgYmFja2VuZCB0YXJnZXQgZG9lcyBub3Qgc3VwcG9ydCBzZXQgbGl0ZXJhbHMuCiAgYm9vbCB0cmFuc2Zvcm1TZXRMaXRlcmFscyA9IGZhbHNlOwoKICBTdGF0ZW1lbnQgcHJvYmxlbUluTG9vcE9yU3dpdGNoOwoKICBTY29wZSBzd2l0Y2hTY29wZTsKCiAgQ2xvbmVWaXNpdG9yIGNsb25lcjsKCiAgQ29uc3RhbnRDb250ZXh0IGNvbnN0YW50Q29udGV4dCA9IENvbnN0YW50Q29udGV4dC5ub25lOwoKICBVbnJlc29sdmVkVHlwZSBjdXJyZW50TG9jYWxWYXJpYWJsZVR5cGU7CgogIC8vIFVzaW5nIG5vbi1udWxsIHZhbHVlIHRvIGluaXRpYWxpemUgdGhpcyBmaWVsZCBiYXNlZCBvbiBwZXJmb3JtYW5jZSBhZHZpY2UKICAvLyBmcm9tIFZNIGVuZ2luZWVycy4gVE9ETyhhaGUpOiBEb2VzIHRoaXMgc3RpbGwgYXBwbHk/CiAgaW50IGN1cnJlbnRMb2NhbFZhcmlhYmxlTW9kaWZpZXJzID0gLTE7CgogIC8vLyBJZiBub24tbnVsbCwgcmVjb3JkcyBpbnN0YW5jZSBmaWVsZHMgd2hpY2ggaGF2ZSBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQKICAvLy8gYW5kIHdoZXJlIHRoYXQgd2FzLgogIE1hcDxTdHJpbmcsIGludD4gaW5pdGlhbGl6ZWRGaWVsZHM7CgogIC8vLyBMaXN0IG9mIGJ1aWx0IHJlZGlyZWN0aW5nIGZhY3RvcnkgaW52b2NhdGlvbnMuICBUaGUgdGFyZ2V0cyBvZiB0aGUKICAvLy8gaW52b2NhdGlvbnMgYXJlIHRvIGJlIHJlc29sdmVkIGluIGEgc2VwYXJhdGUgc3RlcC4KICBmaW5hbCBMaXN0PEV4cHJlc3Npb24+IHJlZGlyZWN0aW5nRmFjdG9yeUludm9jYXRpb25zID0gPEV4cHJlc3Npb24+W107CgogIC8vLyBWYXJpYWJsZXMgd2l0aCBtZXRhZGF0YS4gIFRoZWlyIHR5cGVzIG5lZWQgdG8gYmUgaW5mZXJyZWQgbGF0ZSwgZm9yCiAgLy8vIGV4YW1wbGUsIGluIFtmaW5pc2hGdW5jdGlvbl0uCiAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiB2YXJpYWJsZXNXaXRoTWV0YWRhdGE7CgogIC8vLyBNb3JlIHRoYW4gb25lIHZhcmlhYmxlIGRlY2xhcmVkIGluIGEgc2luZ2xlIHN0YXRlbWVudCB0aGF0IGhhcyBtZXRhZGF0YS4KICAvLy8gVGhlaXIgdHlwZXMgbmVlZCB0byBiZSBpbmZlcnJlZCBsYXRlLCBmb3IgZXhhbXBsZSwgaW4gW2ZpbmlzaEZ1bmN0aW9uXS4KICBMaXN0PExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4+IG11bHRpVmFyaWFibGVzV2l0aE1ldGFkYXRhOwoKICAvLy8gSWYgdGhlIGN1cnJlbnQgbWVtYmVyIGlzIGFuIGluc3RhbmNlIG1lbWJlciBpbiBhbiBleHRlbnNpb24gZGVjbGFyYXRpb24sCiAgLy8vIFtleHRlbnNpb25UaGlzXSBob2xkcyB0aGUgc3ludGhldGljYWxseSBhZGQgcGFyYW1ldGVyIGhvbGRpbmcgdGhlIHZhbHVlCiAgLy8vIGZvciBgdGhpc2AuCiAgZmluYWwgVmFyaWFibGVEZWNsYXJhdGlvbiBleHRlbnNpb25UaGlzOwoKICBmaW5hbCBMaXN0PFR5cGVQYXJhbWV0ZXI+IGV4dGVuc2lvblR5cGVQYXJhbWV0ZXJzOwoKICBCb2R5QnVpbGRlcigKICAgICAge3RoaXMubGlicmFyeUJ1aWxkZXIsCiAgICAgIHRoaXMubWVtYmVyLAogICAgICB0aGlzLmVuY2xvc2luZ1Njb3BlLAogICAgICB0aGlzLmZvcm1hbFBhcmFtZXRlclNjb3BlLAogICAgICB0aGlzLmhpZXJhcmNoeSwKICAgICAgdGhpcy5jb3JlVHlwZXMsCiAgICAgIHRoaXMuZGVjbGFyYXRpb25CdWlsZGVyLAogICAgICB0aGlzLmlzRGVjbGFyYXRpb25JbnN0YW5jZU1lbWJlciwKICAgICAgdGhpcy5leHRlbnNpb25UaGlzLAogICAgICB0aGlzLmV4dGVuc2lvblR5cGVQYXJhbWV0ZXJzLAogICAgICB0aGlzLnVyaSwKICAgICAgdGhpcy50eXBlSW5mZXJyZXJ9KQogICAgICA6IGZvcmVzdCA9IGNvbnN0IEZvcmVzdCgpLAogICAgICAgIGNsYXNzQnVpbGRlciA9CiAgICAgICAgICAgIGRlY2xhcmF0aW9uQnVpbGRlciBpcyBDbGFzc0J1aWxkZXIgPyBkZWNsYXJhdGlvbkJ1aWxkZXIgOiBudWxsLAogICAgICAgIGVuYWJsZU5hdGl2ZSA9IGxpYnJhcnlCdWlsZGVyLmxvYWRlci50YXJnZXQuYmFja2VuZFRhcmdldAogICAgICAgICAgICAuZW5hYmxlTmF0aXZlKGxpYnJhcnlCdWlsZGVyLnVyaSksCiAgICAgICAgc3RyaW5nRXhwZWN0ZWRBZnRlck5hdGl2ZSA9IGxpYnJhcnlCdWlsZGVyCiAgICAgICAgICAgIC5sb2FkZXIudGFyZ2V0LmJhY2tlbmRUYXJnZXQubmF0aXZlRXh0ZW5zaW9uRXhwZWN0c1N0cmluZywKICAgICAgICBpZ25vcmVNYWluSW5HZXRNYWluQ2xvc3VyZSA9IGxpYnJhcnlCdWlsZGVyLnVyaS5zY2hlbWUgPT0gJ2RhcnQnICYmCiAgICAgICAgICAgIChsaWJyYXJ5QnVpbGRlci51cmkucGF0aCA9PSAiX2J1aWx0aW4iIHx8CiAgICAgICAgICAgICAgICBsaWJyYXJ5QnVpbGRlci51cmkucGF0aCA9PSAidWkiKSwKICAgICAgICBuZWVkc0ltcGxpY2l0U3VwZXJJbml0aWFsaXplciA9IGRlY2xhcmF0aW9uQnVpbGRlciBpcyBDbGFzc0J1aWxkZXIgJiYKICAgICAgICAgICAgY29yZVR5cGVzPy5vYmplY3RDbGFzcyAhPSBkZWNsYXJhdGlvbkJ1aWxkZXIuY2xzLAogICAgICAgIHR5cGVQcm9tb3RlciA9IHR5cGVJbmZlcnJlcj8udHlwZVByb21vdGVyLAogICAgICAgIGxlZ2FjeU1vZGUgPSBsaWJyYXJ5QnVpbGRlci5sZWdhY3lNb2RlLAogICAgICAgIHN1cGVyKGVuY2xvc2luZ1Njb3BlKTsKCiAgQm9keUJ1aWxkZXIud2l0aFBhcmVudHMoRmllbGRCdWlsZGVyIGZpZWxkLCBTb3VyY2VMaWJyYXJ5QnVpbGRlciBwYXJ0LAogICAgICBEZWNsYXJhdGlvbkJ1aWxkZXIgZGVjbGFyYXRpb25CdWlsZGVyLCBUeXBlSW5mZXJyZXIgdHlwZUluZmVycmVyKQogICAgICA6IHRoaXMoCiAgICAgICAgICAgIGxpYnJhcnlCdWlsZGVyOiBwYXJ0LAogICAgICAgICAgICBtZW1iZXI6IGZpZWxkLAogICAgICAgICAgICBlbmNsb3NpbmdTY29wZTogZGVjbGFyYXRpb25CdWlsZGVyPy5zY29wZSA/PyBmaWVsZC5saWJyYXJ5LnNjb3BlLAogICAgICAgICAgICBmb3JtYWxQYXJhbWV0ZXJTY29wZTogbnVsbCwKICAgICAgICAgICAgaGllcmFyY2h5OiBwYXJ0LmxvYWRlci5oaWVyYXJjaHksCiAgICAgICAgICAgIGNvcmVUeXBlczogcGFydC5sb2FkZXIuY29yZVR5cGVzLAogICAgICAgICAgICBkZWNsYXJhdGlvbkJ1aWxkZXI6IGRlY2xhcmF0aW9uQnVpbGRlciwKICAgICAgICAgICAgaXNEZWNsYXJhdGlvbkluc3RhbmNlTWVtYmVyOiBmaWVsZC5pc0RlY2xhcmF0aW9uSW5zdGFuY2VNZW1iZXIsCiAgICAgICAgICAgIGV4dGVuc2lvblRoaXM6IG51bGwsCiAgICAgICAgICAgIHVyaTogZmllbGQuZmlsZVVyaSwKICAgICAgICAgICAgdHlwZUluZmVycmVyOiB0eXBlSW5mZXJyZXIpOwoKICBCb2R5QnVpbGRlci5mb3JGaWVsZChGaWVsZEJ1aWxkZXIgZmllbGQsIFR5cGVJbmZlcnJlciB0eXBlSW5mZXJyZXIpCiAgICAgIDogdGhpcy53aXRoUGFyZW50cygKICAgICAgICAgICAgZmllbGQsCiAgICAgICAgICAgIGZpZWxkLnBhcmVudCBpcyBEZWNsYXJhdGlvbkJ1aWxkZXIKICAgICAgICAgICAgICAgID8gZmllbGQucGFyZW50LnBhcmVudAogICAgICAgICAgICAgICAgOiBmaWVsZC5wYXJlbnQsCiAgICAgICAgICAgIGZpZWxkLnBhcmVudCBpcyBEZWNsYXJhdGlvbkJ1aWxkZXIgPyBmaWVsZC5wYXJlbnQgOiBudWxsLAogICAgICAgICAgICB0eXBlSW5mZXJyZXIpOwoKICBCb2R5QnVpbGRlci5mb3JPdXRsaW5lRXhwcmVzc2lvbigKICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwKICAgICAgRGVjbGFyYXRpb25CdWlsZGVyIGRlY2xhcmF0aW9uQnVpbGRlciwKICAgICAgTW9kaWZpZXJCdWlsZGVyIG1lbWJlciwKICAgICAgU2NvcGUgc2NvcGUsCiAgICAgIFVyaSBmaWxlVXJpKQogICAgICA6IHRoaXMoCiAgICAgICAgICAgIGxpYnJhcnlCdWlsZGVyOiBsaWJyYXJ5LAogICAgICAgICAgICBtZW1iZXI6IG1lbWJlciwKICAgICAgICAgICAgZW5jbG9zaW5nU2NvcGU6IHNjb3BlLAogICAgICAgICAgICBmb3JtYWxQYXJhbWV0ZXJTY29wZTogbnVsbCwKICAgICAgICAgICAgaGllcmFyY2h5OiBsaWJyYXJ5LmxvYWRlci5oaWVyYXJjaHksCiAgICAgICAgICAgIGNvcmVUeXBlczogbGlicmFyeS5sb2FkZXIuY29yZVR5cGVzLAogICAgICAgICAgICBkZWNsYXJhdGlvbkJ1aWxkZXI6IGRlY2xhcmF0aW9uQnVpbGRlciwKICAgICAgICAgICAgaXNEZWNsYXJhdGlvbkluc3RhbmNlTWVtYmVyOgogICAgICAgICAgICAgICAgbWVtYmVyPy5pc0RlY2xhcmF0aW9uSW5zdGFuY2VNZW1iZXIgPz8gZmFsc2UsCiAgICAgICAgICAgIGV4dGVuc2lvblRoaXM6IG51bGwsCiAgICAgICAgICAgIHVyaTogZmlsZVVyaSwKICAgICAgICAgICAgdHlwZUluZmVycmVyOiBsaWJyYXJ5LmxvYWRlci50eXBlSW5mZXJlbmNlRW5naW5lCiAgICAgICAgICAgICAgICA/LmNyZWF0ZUxvY2FsVHlwZUluZmVycmVyKAogICAgICAgICAgICAgICAgICAgIGZpbGVVcmksIGRlY2xhcmF0aW9uQnVpbGRlcj8udGhpc1R5cGUsIGxpYnJhcnkpKTsKCiAgYm9vbCBnZXQgaW5Db25zdHJ1Y3RvciB7CiAgICByZXR1cm4gZnVuY3Rpb25OZXN0aW5nTGV2ZWwgPT0gMCAmJiBtZW1iZXIgaXMgQ29uc3RydWN0b3JCdWlsZGVyOwogIH0KCiAgYm9vbCBnZXQgaXNEZWNsYXJhdGlvbkluc3RhbmNlQ29udGV4dCB7CiAgICByZXR1cm4gaXNEZWNsYXJhdGlvbkluc3RhbmNlTWVtYmVyIHx8IG1lbWJlciBpcyBDb25zdHJ1Y3RvckJ1aWxkZXI7CiAgfQoKICBUeXBlRW52aXJvbm1lbnQgZ2V0IHR5cGVFbnZpcm9ubWVudCA9PiB0eXBlSW5mZXJyZXI/LnR5cGVTY2hlbWFFbnZpcm9ubWVudDsKCiAgRGFydFR5cGUgZ2V0IGltcGxpY2l0VHlwZUFyZ3VtZW50ID0+CiAgICAgIGxlZ2FjeU1vZGUgPyBjb25zdCBEeW5hbWljVHlwZSgpIDogY29uc3QgSW1wbGljaXRUeXBlQXJndW1lbnQoKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBwdXNoKE9iamVjdCBub2RlKSB7CiAgICBpZiAobm9kZSBpcyBEYXJ0VHlwZSkgewogICAgICB1bmhhbmRsZWQoIkRhcnRUeXBlIiwgInB1c2giLCAtMSwgdXJpKTsKICAgIH0KICAgIGluSW5pdGlhbGl6ZXIgPSBmYWxzZTsKICAgIHN1cGVyLnB1c2gobm9kZSk7CiAgfQoKICBFeHByZXNzaW9uIHBvcEZvclZhbHVlKCkgPT4gdG9WYWx1ZShwb3AoKSk7CgogIEV4cHJlc3Npb24gcG9wRm9yRWZmZWN0KCkgPT4gdG9FZmZlY3QocG9wKCkpOwoKICBFeHByZXNzaW9uIHBvcEZvclZhbHVlSWZOb3ROdWxsKE9iamVjdCB2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlID09IG51bGwgPyBudWxsIDogcG9wRm9yVmFsdWUoKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gdG9WYWx1ZShPYmplY3Qgbm9kZSkgewogICAgaWYgKG5vZGUgaXMgR2VuZXJhdG9yKSB7CiAgICAgIHJldHVybiBub2RlLmJ1aWxkU2ltcGxlUmVhZCgpOwogICAgfSBlbHNlIGlmIChub2RlIGlzIEV4cHJlc3Npb24pIHsKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9IGVsc2UgaWYgKG5vZGUgaXMgU3VwZXJJbml0aWFsaXplcikgewogICAgICByZXR1cm4gYnVpbGRQcm9ibGVtKAogICAgICAgICAgZmFzdGEubWVzc2FnZVN1cGVyQXNFeHByZXNzaW9uLCBub2RlLmZpbGVPZmZzZXQsIG5vTGVuZ3RoKTsKICAgIH0gZWxzZSBpZiAobm9kZSBpcyBQcm9ibGVtQnVpbGRlcikgewogICAgICByZXR1cm4gYnVpbGRQcm9ibGVtKG5vZGUubWVzc2FnZSwgbm9kZS5jaGFyT2Zmc2V0LCBub0xlbmd0aCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gdW5oYW5kbGVkKCIke25vZGUucnVudGltZVR5cGV9IiwgInRvVmFsdWUiLCAtMSwgdXJpKTsKICAgIH0KICB9CgogIEV4cHJlc3Npb24gdG9FZmZlY3QoT2JqZWN0IG5vZGUpIHsKICAgIGlmIChub2RlIGlzIEdlbmVyYXRvcikgcmV0dXJuIG5vZGUuYnVpbGRGb3JFZmZlY3QoKTsKICAgIHJldHVybiB0b1ZhbHVlKG5vZGUpOwogIH0KCiAgTGlzdDxFeHByZXNzaW9uPiBwb3BMaXN0Rm9yVmFsdWUoaW50IG4pIHsKICAgIExpc3Q8RXhwcmVzc2lvbj4gbGlzdCA9CiAgICAgICAgbmV3IExpc3Q8RXhwcmVzc2lvbj4uZmlsbGVkKG4sIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgIGZvciAoaW50IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgbGlzdFtpXSA9IHBvcEZvclZhbHVlKCk7CiAgICB9CiAgICByZXR1cm4gbGlzdDsKICB9CgogIExpc3Q8RXhwcmVzc2lvbj4gcG9wTGlzdEZvckVmZmVjdChpbnQgbikgewogICAgTGlzdDxFeHByZXNzaW9uPiBsaXN0ID0KICAgICAgICBuZXcgTGlzdDxFeHByZXNzaW9uPi5maWxsZWQobiwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgZm9yIChpbnQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkgewogICAgICBsaXN0W2ldID0gcG9wRm9yRWZmZWN0KCk7CiAgICB9CiAgICByZXR1cm4gbGlzdDsKICB9CgogIFN0YXRlbWVudCBwb3BCbG9jayhpbnQgY291bnQsIFRva2VuIG9wZW5CcmFjZSwgVG9rZW4gY2xvc2VCcmFjZSkgewogICAgcmV0dXJuIGZvcmVzdC5jcmVhdGVCbG9jaygKICAgICAgICBvcGVuQnJhY2UsCiAgICAgICAgY29uc3QgR3Jvd2FibGVMaXN0PFN0YXRlbWVudD4oKS5wb3Aoc3RhY2ssIGNvdW50KSA/PyA8U3RhdGVtZW50PltdLAogICAgICAgIGNsb3NlQnJhY2UpOwogIH0KCiAgU3RhdGVtZW50IHBvcFN0YXRlbWVudElmTm90TnVsbChPYmplY3QgdmFsdWUpIHsKICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gbnVsbCA6IHBvcFN0YXRlbWVudCgpOwogIH0KCiAgU3RhdGVtZW50IHBvcFN0YXRlbWVudCgpID0+IGZvcmVzdC53cmFwVmFyaWFibGVzKHBvcCgpKTsKCiAgdm9pZCBlbnRlclN3aXRjaFNjb3BlKCkgewogICAgcHVzaChzd2l0Y2hTY29wZSA/PyBOdWxsVmFsdWUuU3dpdGNoU2NvcGUpOwogICAgc3dpdGNoU2NvcGUgPSBzY29wZTsKICB9CgogIHZvaWQgZXhpdFN3aXRjaFNjb3BlKCkgewogICAgU2NvcGUgb3V0ZXJTd2l0Y2hTY29wZSA9IHBvcCgpOwogICAgaWYgKHN3aXRjaFNjb3BlLnVuY2xhaW1lZEZvcndhcmREZWNsYXJhdGlvbnMgIT0gbnVsbCkgewogICAgICBzd2l0Y2hTY29wZS51bmNsYWltZWRGb3J3YXJkRGVjbGFyYXRpb25zCiAgICAgICAgICAuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgZGVjbGFyYXRpb24pIHsKICAgICAgICBpZiAob3V0ZXJTd2l0Y2hTY29wZSA9PSBudWxsKSB7CiAgICAgICAgICBKdW1wVGFyZ2V0IHRhcmdldCA9IGRlY2xhcmF0aW9uOwogICAgICAgICAgZm9yIChTdGF0ZW1lbnQgc3RhdGVtZW50IGluIHRhcmdldC51c2VycykgewogICAgICAgICAgICBzdGF0ZW1lbnQucGFyZW50LnJlcGxhY2VDaGlsZCgKICAgICAgICAgICAgICAgIHN0YXRlbWVudCwKICAgICAgICAgICAgICAgIHdyYXBJblByb2JsZW1TdGF0ZW1lbnQoc3RhdGVtZW50LAogICAgICAgICAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlTGFiZWxOb3RGb3VuZC53aXRoQXJndW1lbnRzKG5hbWUpKSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG91dGVyU3dpdGNoU2NvcGUuZm9yd2FyZERlY2xhcmVMYWJlbChuYW1lLCBkZWNsYXJhdGlvbik7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIHN3aXRjaFNjb3BlID0gb3V0ZXJTd2l0Y2hTY29wZTsKICB9CgogIHZvaWQgd3JhcFZhcmlhYmxlSW5pdGlhbGl6ZXJJbkVycm9yKAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLAogICAgICBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGUsCiAgICAgIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQpIHsKICAgIFN0cmluZyBuYW1lID0gdmFyaWFibGUubmFtZTsKICAgIGludCBvZmZzZXQgPSB2YXJpYWJsZS5maWxlT2Zmc2V0OwogICAgTWVzc2FnZSBtZXNzYWdlID0gdGVtcGxhdGUud2l0aEFyZ3VtZW50cyhuYW1lKTsKICAgIGlmICh2YXJpYWJsZS5pbml0aWFsaXplciA9PSBudWxsKSB7CiAgICAgIHZhcmlhYmxlLmluaXRpYWxpemVyID0KICAgICAgICAgIGJ1aWxkUHJvYmxlbShtZXNzYWdlLCBvZmZzZXQsIG5hbWUubGVuZ3RoLCBjb250ZXh0OiBjb250ZXh0KQogICAgICAgICAgICAuLnBhcmVudCA9IHZhcmlhYmxlOwogICAgfSBlbHNlIHsKICAgICAgdmFyaWFibGUuaW5pdGlhbGl6ZXIgPSB3cmFwSW5Mb2NhdGVkUHJvYmxlbSgKICAgICAgICAgIHZhcmlhYmxlLmluaXRpYWxpemVyLCBtZXNzYWdlLndpdGhMb2NhdGlvbih1cmksIG9mZnNldCwgbmFtZS5sZW5ndGgpLAogICAgICAgICAgY29udGV4dDogY29udGV4dCkKICAgICAgICAuLnBhcmVudCA9IHZhcmlhYmxlOwogICAgfQogIH0KCiAgdm9pZCBkZWNsYXJlVmFyaWFibGUoVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwgU2NvcGUgc2NvcGUpIHsKICAgIFN0cmluZyBuYW1lID0gdmFyaWFibGUubmFtZTsKICAgIEJ1aWxkZXIgZXhpc3RpbmcgPSBzY29wZS5sb2NhbFtuYW1lXTsKICAgIGlmIChleGlzdGluZyAhPSBudWxsKSB7CiAgICAgIC8vIFRoaXMgcmVwb3J0cyBhbiBlcnJvciBmb3IgZHVwbGljYXRlZCBkZWNsYXJhdGlvbnMgaW4gdGhlIHNhbWUgc2NvcGU6CiAgICAgIC8vIGB7IHZhciB4OyB2YXIgeDsgfWAKICAgICAgd3JhcFZhcmlhYmxlSW5pdGlhbGl6ZXJJbkVycm9yKAogICAgICAgICAgdmFyaWFibGUsIGZhc3RhLnRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uLCA8TG9jYXRlZE1lc3NhZ2U+WwogICAgICAgIGZhc3RhLnRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uQ2F1c2UKICAgICAgICAgICAgLndpdGhBcmd1bWVudHMobmFtZSkKICAgICAgICAgICAgLndpdGhMb2NhdGlvbih1cmksIGV4aXN0aW5nLmNoYXJPZmZzZXQsIG5hbWUubGVuZ3RoKQogICAgICBdKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgTG9jYXRlZE1lc3NhZ2UgY29udGV4dCA9IHNjb3BlLmRlY2xhcmUoCiAgICAgICAgdmFyaWFibGUubmFtZSwKICAgICAgICBuZXcgVmFyaWFibGVCdWlsZGVyKAogICAgICAgICAgICB2YXJpYWJsZSwgbWVtYmVyID8/IGNsYXNzQnVpbGRlciA/PyBsaWJyYXJ5QnVpbGRlciwgdXJpKSwKICAgICAgICB1cmkpOwogICAgaWYgKGNvbnRleHQgIT0gbnVsbCkgewogICAgICAvLyBUaGlzIGNhc2UgaXMgZGlmZmVyZW50IGZyb20gdGhlIGFib3ZlIGVycm9yLiBJbiB0aGlzIGNhc2UsIHRoZSBwcm9ibGVtCiAgICAgIC8vIGlzIHVzaW5nIGB4YCBiZWZvcmUgaXQncyBkZWNsYXJlZDogYHsgdmFyIHg7IHsgcHJpbnQoeCk7IHZhciB4OwogICAgICAvLyB9fWAuIEluIHRoaXMgY2FzZSwgd2Ugd2FudCB0d28gZXJyb3JzLCB0aGUgYHhgIGluIGBwcmludCh4KWAgYW5kIHRoZQogICAgICAvLyBzZWNvbmQgKG9yIGlubmVybW9zdCBkZWNsYXJhdGlvbikgb2YgYHhgLgogICAgICB3cmFwVmFyaWFibGVJbml0aWFsaXplckluRXJyb3IoCiAgICAgICAgICB2YXJpYWJsZSwKICAgICAgICAgIGZhc3RhLnRlbXBsYXRlRHVwbGljYXRlZE5hbWVQcmV2aW91c2x5VXNlZCwKICAgICAgICAgIDxMb2NhdGVkTWVzc2FnZT5bY29udGV4dF0pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgSnVtcFRhcmdldCBjcmVhdGVKdW1wVGFyZ2V0KEp1bXBUYXJnZXRLaW5kIGtpbmQsIGludCBjaGFyT2Zmc2V0KSB7CiAgICByZXR1cm4gbmV3IEp1bXBUYXJnZXQoa2luZCwgZnVuY3Rpb25OZXN0aW5nTGV2ZWwsIG1lbWJlciwgY2hhck9mZnNldCk7CiAgfQoKICB2b2lkIGluZmVyQW5ub3RhdGlvbnMoTGlzdDxFeHByZXNzaW9uPiBhbm5vdGF0aW9ucykgewogICAgaWYgKGFubm90YXRpb25zICE9IG51bGwpIHsKICAgICAgdHlwZUluZmVycmVyPy5pbmZlck1ldGFkYXRhKHRoaXMsIGFubm90YXRpb25zKTsKICAgICAgbGlicmFyeUJ1aWxkZXIubG9hZGVyLnRyYW5zZm9ybUxpc3RQb3N0SW5mZXJlbmNlKAogICAgICAgICAgYW5ub3RhdGlvbnMsIHRyYW5zZm9ybVNldExpdGVyYWxzLCB0cmFuc2Zvcm1Db2xsZWN0aW9ucyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luTWV0YWRhdGEoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luTWV0YWRhdGEiKTsKICAgIHN1cGVyLnB1c2goY29uc3RhbnRDb250ZXh0KTsKICAgIGNvbnN0YW50Q29udGV4dCA9IENvbnN0YW50Q29udGV4dC5pbmZlcnJlZDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWV0YWRhdGEoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gcGVyaW9kQmVmb3JlTmFtZSwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk1ldGFkYXRhIik7CiAgICBBcmd1bWVudHMgYXJndW1lbnRzID0gcG9wKCk7CiAgICBwdXNoUXVhbGlmaWVkUmVmZXJlbmNlKGJlZ2luVG9rZW4ubmV4dCwgcGVyaW9kQmVmb3JlTmFtZSk7CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgcHVzaChhcmd1bWVudHMpOwogICAgICBfYnVpbGRDb25zdHJ1Y3RvclJlZmVyZW5jZUludm9jYXRpb24oCiAgICAgICAgICBiZWdpblRva2VuLm5leHQsIGJlZ2luVG9rZW4ub2Zmc2V0LCBDb25zdG5lc3MuZXhwbGljaXRDb25zdCk7CiAgICAgIHB1c2gocG9wRm9yVmFsdWUoKSk7CiAgICB9IGVsc2UgewogICAgICBwb3AoKTsgLy8gTmFtZSBsYXN0IGlkZW50aWZpZXIKICAgICAgU3RyaW5nIG5hbWUgPSBwb3AoKTsKICAgICAgcG9wKCk7IC8vIFR5cGUgYXJndW1lbnRzIChpZ25vcmVkLCBhbHJlYWR5IHJlcG9ydGVkIGJ5IHBhcnNlcikuCiAgICAgIE9iamVjdCBleHByZXNzaW9uID0gcG9wKCk7CiAgICAgIGlmIChleHByZXNzaW9uIGlzIElkZW50aWZpZXIpIHsKICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBleHByZXNzaW9uOwogICAgICAgIGV4cHJlc3Npb24gPSBuZXcgVW5yZXNvbHZlZE5hbWVHZW5lcmF0b3IoCiAgICAgICAgICAgIHRoaXMsCiAgICAgICAgICAgIGRlcHJlY2F0ZWRfZXh0cmFjdFRva2VuKGlkZW50aWZpZXIpLAogICAgICAgICAgICBuZXcgTmFtZShpZGVudGlmaWVyLm5hbWUsIGxpYnJhcnlCdWlsZGVyLm5hbWVPcmlnaW4pKTsKICAgICAgfQogICAgICBpZiAobmFtZT8uaXNOb3RFbXB0eSA/PyBmYWxzZSkgewogICAgICAgIFRva2VuIHBlcmlvZCA9IHBlcmlvZEJlZm9yZU5hbWUgPz8gYmVnaW5Ub2tlbi5uZXh0Lm5leHQ7CiAgICAgICAgR2VuZXJhdG9yIGdlbmVyYXRvciA9IGV4cHJlc3Npb247CiAgICAgICAgZXhwcmVzc2lvbiA9IGdlbmVyYXRvci5idWlsZFByb3BlcnR5QWNjZXNzKAogICAgICAgICAgICBuZXcgSW5jb21wbGV0ZVByb3BlcnR5QWNjZXNzR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgdGhpcywgcGVyaW9kLm5leHQsIG5ldyBOYW1lKG5hbWUsIGxpYnJhcnlCdWlsZGVyLm5hbWVPcmlnaW4pKSwKICAgICAgICAgICAgcGVyaW9kLm5leHQub2Zmc2V0LAogICAgICAgICAgICBmYWxzZSk7CiAgICAgIH0KCiAgICAgIENvbnN0YW50Q29udGV4dCBzYXZlZENvbnN0YW50Q29udGV4dCA9IHBvcCgpOwogICAgICBpZiAoZXhwcmVzc2lvbiBpcyEgU3RhdGljQWNjZXNzR2VuZXJhdG9yICYmCiAgICAgICAgICBleHByZXNzaW9uIGlzISBWYXJpYWJsZVVzZUdlbmVyYXRvcikgewogICAgICAgIHB1c2god3JhcEluUHJvYmxlbSgKICAgICAgICAgICAgdG9WYWx1ZShleHByZXNzaW9uKSwgZmFzdGEubWVzc2FnZUV4cHJlc3Npb25Ob3RNZXRhZGF0YSwgbm9MZW5ndGgpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwdXNoKHRvVmFsdWUoZXhwcmVzc2lvbikpOwogICAgICB9CiAgICAgIGNvbnN0YW50Q29udGV4dCA9IHNhdmVkQ29uc3RhbnRDb250ZXh0OwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRNZXRhZGF0YVN0YXIoaW50IGNvdW50KSB7CiAgICBkZWJ1Z0V2ZW50KCJNZXRhZGF0YVN0YXIiKTsKICAgIGlmIChjb3VudCA9PSAwKSB7CiAgICAgIHB1c2goTnVsbFZhbHVlLk1ldGFkYXRhKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2goY29uc3QgR3Jvd2FibGVMaXN0PEV4cHJlc3Npb24+KCkucG9wKHN0YWNrLCBjb3VudCkgPz8KICAgICAgICAgIE51bGxWYWx1ZS5NZXRhZGF0YSAvKiBJZ25vcmUgcGFyc2VyIHJlY292ZXJ5ICovKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVG9wTGV2ZWxGaWVsZHMoCiAgICAgIFRva2VuIHN0YXRpY1Rva2VuLAogICAgICBUb2tlbiBjb3ZhcmlhbnRUb2tlbiwKICAgICAgVG9rZW4gbGF0ZVRva2VuLAogICAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3QsCiAgICAgIGludCBjb3VudCwKICAgICAgVG9rZW4gYmVnaW5Ub2tlbiwKICAgICAgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlRvcExldmVsRmllbGRzIik7CiAgICBpZiAoIWxpYnJhcnlCdWlsZGVyLmxvYWRlci50YXJnZXQuZW5hYmxlTm9uTnVsbGFibGUpIHsKICAgICAgcmVwb3J0Tm9uTnVsbGFibGVNb2RpZmllckVycm9yKGxhdGVUb2tlbik7CiAgICB9CiAgICBwdXNoKGNvdW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ2xhc3NGaWVsZHMoVG9rZW4gc3RhdGljVG9rZW4sIFRva2VuIGNvdmFyaWFudFRva2VuLCBUb2tlbiBsYXRlVG9rZW4sCiAgICAgIFRva2VuIHZhckZpbmFsT3JDb25zdCwgaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiRmllbGRzIik7CiAgICBpZiAoIWxpYnJhcnlCdWlsZGVyLmxvYWRlci50YXJnZXQuZW5hYmxlTm9uTnVsbGFibGUpIHsKICAgICAgcmVwb3J0Tm9uTnVsbGFibGVNb2RpZmllckVycm9yKGxhdGVUb2tlbik7CiAgICB9CiAgICBwdXNoKGNvdW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZmluaXNoRmllbGRzKCkgewogICAgZGVidWdFdmVudCgiZmluaXNoRmllbGRzIik7CiAgICBpbnQgY291bnQgPSBwb3AoKTsKICAgIExpc3Q8RmllbGRCdWlsZGVyPiBmaWVsZHMgPSA8RmllbGRCdWlsZGVyPltdOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIEV4cHJlc3Npb24gaW5pdGlhbGl6ZXIgPSBwb3AoKTsKICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gcG9wKCk7CiAgICAgIFN0cmluZyBuYW1lID0gaWRlbnRpZmllci5uYW1lOwogICAgICBCdWlsZGVyIGRlY2xhcmF0aW9uOwogICAgICBpZiAoZGVjbGFyYXRpb25CdWlsZGVyICE9IG51bGwpIHsKICAgICAgICBkZWNsYXJhdGlvbiA9CiAgICAgICAgICAgIGRlY2xhcmF0aW9uQnVpbGRlci5sb29rdXBMb2NhbE1lbWJlcihuYW1lLCByZXF1aXJlZDogdHJ1ZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZGVjbGFyYXRpb24gPSBsaWJyYXJ5QnVpbGRlci5sb29rdXBMb2NhbE1lbWJlcihuYW1lLCByZXF1aXJlZDogdHJ1ZSk7CiAgICAgIH0KICAgICAgRmllbGRCdWlsZGVyIGZpZWxkQnVpbGRlcjsKICAgICAgaWYgKGRlY2xhcmF0aW9uLmlzRmllbGQgJiYgZGVjbGFyYXRpb24ubmV4dCA9PSBudWxsKSB7CiAgICAgICAgZmllbGRCdWlsZGVyID0gZGVjbGFyYXRpb247CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgZmllbGRzLmFkZChmaWVsZEJ1aWxkZXIpOwogICAgICBpZiAoaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICAgIGlmIChmaWVsZEJ1aWxkZXIubmV4dCAhPSBudWxsKSB7CiAgICAgICAgICAvLyBEdXBsaWNhdGUgZGVmaW5pdGlvbi4gVGhlIGZpZWxkIG1pZ2h0IG5vdCBiZSB0aGUgY29ycmVjdCBvbmUsCiAgICAgICAgICAvLyBzbyB3ZSBza2lwIGluZmVyZW5jZSBvZiB0aGUgaW5pdGlhbGl6ZXIuCiAgICAgICAgICAvLyBFcnJvciByZXBvcnRpbmcgYW5kIHJlY292ZXJ5IGlzIGhhbmRsZWQgZWxzZXdoZXJlLgogICAgICAgIH0gZWxzZSBpZiAoZmllbGRCdWlsZGVyLmZpZWxkLmluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgICAgIC8vIFRoZSBpbml0aWFsaXplciB3YXMgYWxyZWFkeSBjb21waWxlZCAoZS5nLiwgaWYgaXQgYXBwZWFyIGluIHRoZQogICAgICAgICAgLy8gb3V0bGluZSwgbGlrZSBjb25zdGFudCBmaWVsZCBpbml0aWFsaXplcnMpIHNvIHdlIGRvIG5vdCBuZWVkIHRvCiAgICAgICAgICAvLyBwZXJmb3JtIHR5cGUgaW5mZXJlbmNlIG9yIHRyYW5zZm9ybWF0aW9ucy4KICAgICAgICB9IGVsc2UgewogICAgICAgICAgZmllbGRCdWlsZGVyLmluaXRpYWxpemVyID0gaW5pdGlhbGl6ZXI7CiAgICAgICAgICB0eXBlSW5mZXJyZXI/LmluZmVyRmllbGRJbml0aWFsaXplcigKICAgICAgICAgICAgICB0aGlzLCBmaWVsZEJ1aWxkZXIuYnVpbHRUeXBlLCBpbml0aWFsaXplcik7CiAgICAgICAgICBsaWJyYXJ5QnVpbGRlci5sb2FkZXIudHJhbnNmb3JtUG9zdEluZmVyZW5jZSgKICAgICAgICAgICAgICBmaWVsZEJ1aWxkZXIuZmllbGQsIHRyYW5zZm9ybVNldExpdGVyYWxzLCB0cmFuc2Zvcm1Db2xsZWN0aW9ucyk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICB7CiAgICAgIC8vIFRPRE8oYWhlKTogVGhlIHR5cGUgd2UgY29tcHV0ZSBoZXJlIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB3aGF0IGlzCiAgICAgIC8vIGNvbXB1dGVkIGluIHRoZSBvdXRsaW5lIHBoYXNlLiBXZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlIG91dGxpbmUKICAgICAgLy8gcGhhc2UgY29tcHV0ZXMgdGhlIHNhbWUgdHlwZS4gU2VlCiAgICAgIC8vIHBrZy9mcm9udF9lbmQvdGVzdGNhc2VzL3JlZ3Jlc3MvaXNzdWVfMzIyMDAuZGFydCBmb3IgYW4gZXhhbXBsZSB3aGVyZQogICAgICAvLyBub3QgY2FsbGluZyBbYnVpbGREYXJ0VHlwZV0gbGVhZHMgdG8gYSBtaXNzaW5nIGNvbXBpbGUtdGltZQogICAgICAvLyBlcnJvci4gQWxzbywgbm90aWNlIHRoYXQgdGhlIHR5cGUgb2YgdGhlIHByb2JsZW1hdGljIGZpZWxkIGlzbid0CiAgICAgIC8vIGBpbnZhbGlkLXR5cGVgLgogICAgICBidWlsZERhcnRUeXBlKHBvcCgpKTsgLy8gVHlwZS4KICAgIH0KICAgIHBvcCgpOyAvLyBBbm5vdGF0aW9ucy4KCiAgICByZXNvbHZlUmVkaXJlY3RpbmdGYWN0b3J5VGFyZ2V0cygpOwogICAgZmluaXNoVmFyaWFibGVNZXRhZGF0YSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRNZW1iZXIoKSB7CiAgICBkZWJ1Z0V2ZW50KCJNZW1iZXIiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQmxvY2tGdW5jdGlvbkJvZHkoaW50IGNvdW50LCBUb2tlbiBvcGVuQnJhY2UsIFRva2VuIGNsb3NlQnJhY2UpIHsKICAgIGRlYnVnRXZlbnQoIkJsb2NrRnVuY3Rpb25Cb2R5Iik7CiAgICBpZiAob3BlbkJyYWNlID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGNvdW50ID09IDApOwogICAgICBwdXNoKE51bGxWYWx1ZS5CbG9jayk7CiAgICB9IGVsc2UgewogICAgICBTdGF0ZW1lbnQgYmxvY2sgPSBwb3BCbG9jayhjb3VudCwgb3BlbkJyYWNlLCBjbG9zZUJyYWNlKTsKICAgICAgZXhpdExvY2FsU2NvcGUoKTsKICAgICAgcHVzaChibG9jayk7CiAgICB9CiAgfQoKICB2b2lkIHByZXBhcmVJbml0aWFsaXplcnMoKSB7CiAgICBGdW5jdGlvbkJ1aWxkZXIgbWVtYmVyID0gdGhpcy5tZW1iZXI7CiAgICBzY29wZSA9IG1lbWJlci5jb21wdXRlRm9ybWFsUGFyYW1ldGVySW5pdGlhbGl6ZXJTY29wZShzY29wZSk7CiAgICBpZiAobWVtYmVyIGlzIENvbnN0cnVjdG9yQnVpbGRlcikgewogICAgICBtZW1iZXIucHJlcGFyZUluaXRpYWxpemVycygpOwogICAgICBpZiAobWVtYmVyLmZvcm1hbHMgIT0gbnVsbCkgewogICAgICAgIGZvciAoRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBmb3JtYWwgaW4gbWVtYmVyLmZvcm1hbHMpIHsKICAgICAgICAgIGlmIChmb3JtYWwuaXNJbml0aWFsaXppbmdGb3JtYWwpIHsKICAgICAgICAgICAgSW5pdGlhbGl6ZXIgaW5pdGlhbGl6ZXI7CiAgICAgICAgICAgIGlmIChtZW1iZXIuaXNFeHRlcm5hbCkgewogICAgICAgICAgICAgIGluaXRpYWxpemVyID0gYnVpbGRJbnZhbGlkSW5pdGlhbGl6ZXIoCiAgICAgICAgICAgICAgICAgIGRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgICAgICAgICAgIGZhc3RhLm1lc3NhZ2VFeHRlcm5hbENvbnN0cnVjdG9yV2l0aEZpZWxkSW5pdGlhbGl6ZXJzLAogICAgICAgICAgICAgICAgICAgICAgZm9ybWFsLmNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICBmb3JtYWwubmFtZS5sZW5ndGgpKSwKICAgICAgICAgICAgICAgICAgZm9ybWFsLmNoYXJPZmZzZXQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGluaXRpYWxpemVyID0gYnVpbGRGaWVsZEluaXRpYWxpemVyKAogICAgICAgICAgICAgICAgICB0cnVlLAogICAgICAgICAgICAgICAgICBmb3JtYWwubmFtZSwKICAgICAgICAgICAgICAgICAgZm9ybWFsLmNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICAgIGZvcm1hbC5jaGFyT2Zmc2V0LAogICAgICAgICAgICAgICAgICBuZXcgVmFyaWFibGVHZXQoZm9ybWFsLnZhcmlhYmxlKSwKICAgICAgICAgICAgICAgICAgZm9ybWFsVHlwZTogZm9ybWFsLnZhcmlhYmxlLnR5cGUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG1lbWJlci5hZGRJbml0aWFsaXplcihpbml0aWFsaXplciwgdGhpcyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vSW5pdGlhbGl6ZXJzKCkgewogICAgZGVidWdFdmVudCgiTm9Jbml0aWFsaXplcnMiKTsKICAgIGlmIChmdW5jdGlvbk5lc3RpbmdMZXZlbCA9PSAwKSB7CiAgICAgIHByZXBhcmVJbml0aWFsaXplcnMoKTsKICAgICAgc2NvcGUgPSBmb3JtYWxQYXJhbWV0ZXJTY29wZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Jbml0aWFsaXplcnMoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luSW5pdGlhbGl6ZXJzIik7CiAgICBpZiAoZnVuY3Rpb25OZXN0aW5nTGV2ZWwgPT0gMCkgewogICAgICBwcmVwYXJlSW5pdGlhbGl6ZXJzKCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEluaXRpYWxpemVycyhpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJJbml0aWFsaXplcnMiKTsKICAgIGlmIChmdW5jdGlvbk5lc3RpbmdMZXZlbCA9PSAwKSB7CiAgICAgIHNjb3BlID0gZm9ybWFsUGFyYW1ldGVyU2NvcGU7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luSW5pdGlhbGl6ZXIoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luSW5pdGlhbGl6ZXIiKTsKICAgIGluSW5pdGlhbGl6ZXIgPSB0cnVlOwogICAgaW5GaWVsZEluaXRpYWxpemVyID0gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSW5pdGlhbGl6ZXIoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImVuZEluaXRpYWxpemVyIik7CiAgICBpbkZpZWxkSW5pdGlhbGl6ZXIgPSBmYWxzZTsKICAgIGFzc2VydCghaW5Jbml0aWFsaXplcik7CiAgICBmaW5hbCBNb2RpZmllckJ1aWxkZXIgbWVtYmVyID0gdGhpcy5tZW1iZXI7CiAgICBPYmplY3Qgbm9kZSA9IHBvcCgpOwogICAgSW5pdGlhbGl6ZXIgaW5pdGlhbGl6ZXI7CiAgICBpZiAobm9kZSBpcyBJbml0aWFsaXplcikgewogICAgICBpbml0aWFsaXplciA9IG5vZGU7CiAgICB9IGVsc2UgaWYgKG5vZGUgaXMgR2VuZXJhdG9yKSB7CiAgICAgIGluaXRpYWxpemVyID0gbm9kZS5idWlsZEZpZWxkSW5pdGlhbGl6ZXIoaW5pdGlhbGl6ZWRGaWVsZHMpOwogICAgfSBlbHNlIGlmIChub2RlIGlzIENvbnN0cnVjdG9ySW52b2NhdGlvbikgewogICAgICBpbml0aWFsaXplciA9IGJ1aWxkU3VwZXJJbml0aWFsaXplcigKICAgICAgICAgIGZhbHNlLCBub2RlLnRhcmdldCwgbm9kZS5hcmd1bWVudHMsIHRva2VuLmNoYXJPZmZzZXQpOwogICAgfSBlbHNlIHsKICAgICAgRXhwcmVzc2lvbiB2YWx1ZSA9IHRvVmFsdWUobm9kZSk7CiAgICAgIGlmICghZm9yZXN0LmlzVGhyb3cobm9kZSkpIHsKICAgICAgICB2YWx1ZSA9CiAgICAgICAgICAgIHdyYXBJblByb2JsZW0odmFsdWUsIGZhc3RhLm1lc3NhZ2VFeHBlY3RlZEFuSW5pdGlhbGl6ZXIsIG5vTGVuZ3RoKTsKICAgICAgfQogICAgICBpbml0aWFsaXplciA9IGJ1aWxkSW52YWxpZEluaXRpYWxpemVyKG5vZGUsIHRva2VuLmNoYXJPZmZzZXQpOwogICAgfQogICAgdHlwZUluZmVycmVyPy5pbmZlckluaXRpYWxpemVyKHRoaXMsIGluaXRpYWxpemVyKTsKICAgIGlmIChtZW1iZXIgaXMgQ29uc3RydWN0b3JCdWlsZGVyICYmICFtZW1iZXIuaXNFeHRlcm5hbCkgewogICAgICBtZW1iZXIuYWRkSW5pdGlhbGl6ZXIoaW5pdGlhbGl6ZXIsIHRoaXMpOwogICAgfSBlbHNlIHsKICAgICAgYWRkUHJvYmxlbSgKICAgICAgICAgIGZhc3RhLnRlbXBsYXRlSW5pdGlhbGl6ZXJPdXRzaWRlQ29uc3RydWN0b3IKICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhtZW1iZXIubmFtZSksCiAgICAgICAgICB0b2tlbi5jaGFyT2Zmc2V0LAogICAgICAgICAgbWVtYmVyLm5hbWUubGVuZ3RoKTsKICAgIH0KICB9CgogIERhcnRUeXBlIF9jb21wdXRlUmV0dXJuVHlwZUNvbnRleHQoTWVtYmVyQnVpbGRlciBtZW1iZXIpIHsKICAgIGlmIChtZW1iZXIgaXMgUHJvY2VkdXJlQnVpbGRlcikgewogICAgICByZXR1cm4gbWVtYmVyLmFjdHVhbFByb2NlZHVyZS5mdW5jdGlvbi5yZXR1cm5UeXBlOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KG1lbWJlciBpcyBDb25zdHJ1Y3RvckJ1aWxkZXIpOwogICAgICByZXR1cm4gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZmluaXNoRnVuY3Rpb24oCiAgICAgIEZvcm1hbFBhcmFtZXRlcnMgZm9ybWFscywgQXN5bmNNYXJrZXIgYXN5bmNNb2RpZmllciwgU3RhdGVtZW50IGJvZHkpIHsKICAgIGRlYnVnRXZlbnQoImZpbmlzaEZ1bmN0aW9uIik7CiAgICB0eXBlUHJvbW90ZXI/LmZpbmlzaGVkKCk7CgogICAgRnVuY3Rpb25CdWlsZGVyIGJ1aWxkZXIgPSBtZW1iZXI7CiAgICBpZiAoZm9ybWFscz8ucGFyYW1ldGVycyAhPSBudWxsKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm9ybWFscy5wYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBwYXJhbWV0ZXIgPSBmb3JtYWxzLnBhcmFtZXRlcnNbaV07CiAgICAgICAgRXhwcmVzc2lvbiBpbml0aWFsaXplciA9IHBhcmFtZXRlci50YXJnZXQuaW5pdGlhbGl6ZXI7CiAgICAgICAgaWYgKHBhcmFtZXRlci5pc09wdGlvbmFsIHx8IGluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gcmVhbFBhcmFtZXRlciA9IGJ1aWxkZXIuZm9ybWFsc1tpXS50YXJnZXQ7CiAgICAgICAgICBpZiAocGFyYW1ldGVyLmlzT3B0aW9uYWwpIHsKICAgICAgICAgICAgaW5pdGlhbGl6ZXIgPz89IGZvcmVzdC5jcmVhdGVOdWxsTGl0ZXJhbCgKICAgICAgICAgICAgICAgIC8vIFRPRE8oYWhlKTogU2hvdWxkIHN0b3JlOiByZWFsUGFyYW1ldGVyLmZpbGVPZmZzZXQKICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvc2RrL2lzc3Vlcy8zMjI4OQogICAgICAgICAgICAgICAgbnVsbCk7CiAgICAgICAgICB9CiAgICAgICAgICByZWFsUGFyYW1ldGVyLmluaXRpYWxpemVyID0gaW5pdGlhbGl6ZXIuLnBhcmVudCA9IHJlYWxQYXJhbWV0ZXI7CiAgICAgICAgICB0eXBlSW5mZXJyZXI/LmluZmVyUGFyYW1ldGVySW5pdGlhbGl6ZXIoCiAgICAgICAgICAgICAgdGhpcywgaW5pdGlhbGl6ZXIsIHJlYWxQYXJhbWV0ZXIudHlwZSk7CiAgICAgICAgICBsaWJyYXJ5QnVpbGRlci5sb2FkZXIudHJhbnNmb3JtUG9zdEluZmVyZW5jZSgKICAgICAgICAgICAgICByZWFsUGFyYW1ldGVyLCB0cmFuc2Zvcm1TZXRMaXRlcmFscywgdHJhbnNmb3JtQ29sbGVjdGlvbnMpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHR5cGVJbmZlcnJlcj8uaW5mZXJGdW5jdGlvbkJvZHkoCiAgICAgICAgdGhpcywgX2NvbXB1dGVSZXR1cm5UeXBlQ29udGV4dChtZW1iZXIpLCBhc3luY01vZGlmaWVyLCBib2R5KTsKICAgIGlmIChib2R5ICE9IG51bGwpIHsKICAgICAgbGlicmFyeUJ1aWxkZXIubG9hZGVyLnRyYW5zZm9ybVBvc3RJbmZlcmVuY2UoCiAgICAgICAgICBib2R5LCB0cmFuc2Zvcm1TZXRMaXRlcmFscywgdHJhbnNmb3JtQ29sbGVjdGlvbnMpOwogICAgfQoKICAgIC8vIEZvciBhc3luYywgYXN5bmMqLCBhbmQgc3luYyogZnVuY3Rpb25zIHdpdGggZGVjbGFyZWQgcmV0dXJuIHR5cGVzLCB3ZQogICAgLy8gbmVlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aG9zZSB0eXBlcyBhcmUgdmFsaWQuCiAgICAvLyBUT0RPKGhpbGxlcnN0cm9tKTogY3VycmVudGx5LCB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgW2xlZ2FjeU1vZGVdIGlzCiAgICAvLyBlbmFibGVkIGZvciB0d28gcmVhc29uczoKICAgIC8vIDEpIHRoZSBbaXNTdWJ0eXBlT2ZdIHByZWRpY2F0ZSBwcm9kdWNlcyBmYWxzZS1uZWdhdGl2ZXMgd2hlbgogICAgLy8gW2xlZ2FjeU1vZGVdIGlzIGVuYWJsZWQuCiAgICAvLyAyKSB0aGUgbWVtYmVyIFt0eXBlRW52aXJvbm1lbnRdIG1pZ2h0IGJlIG51bGwgd2hlbiBbbGVnYWN5TW9kZV0gaXMKICAgIC8vIGVuYWJsZWQuCiAgICAvLyBUaGlzIHBhcnRpY3VsYXIgYmVoYXZpb3IgY2FuIGJlIG9ic2VydmVkIHdoZW4gcnVubmluZyB0aGUgZmFzdGEgcGVyZgogICAgLy8gYmVuY2htYXJrcy4KICAgIGlmICghbGVnYWN5TW9kZSAmJiBidWlsZGVyLnJldHVyblR5cGUgIT0gbnVsbCkgewogICAgICBEYXJ0VHlwZSByZXR1cm5UeXBlID0gYnVpbGRlci5mdW5jdGlvbi5yZXR1cm5UeXBlOwogICAgICAvLyBXZSB1c2UgdGhlIHNhbWUgdHJpY2sgaW4gZWFjaCBjYXNlIGJlbG93LiBGb3IgZXhhbXBsZSB0byBkZWNpZGUgd2hldGhlcgogICAgICAvLyBGdXR1cmU8VD4gPDogW3JldHVyblR5cGVdIGZvciBldmVyeSBULCB3ZSByZWx5IG9uIEZ1dHVyZTxCb3Q+IGFuZAogICAgICAvLyB0cmFuc2l0aXZpdHkgb2YgdGhlIHN1YnR5cGluZyByZWxhdGlvbiBiZWNhdXNlIEZ1dHVyZTxCb3Q+IDw6IEZ1dHVyZTxUPgogICAgICAvLyBmb3IgZXZlcnkgVC4KCiAgICAgIC8vIFdlIHVzZSBbcHJvYmxlbSA9PSBudWxsXSB0byBzaWduYWwgc3VjY2Vzcy4KICAgICAgTWVzc2FnZSBwcm9ibGVtOwogICAgICBzd2l0Y2ggKGFzeW5jTW9kaWZpZXIpIHsKICAgICAgICBjYXNlIEFzeW5jTWFya2VyLkFzeW5jOgogICAgICAgICAgRGFydFR5cGUgZnV0dXJlQm90dG9tVHlwZSA9IGxpYnJhcnlCdWlsZGVyLmxvYWRlci5mdXR1cmVPZkJvdHRvbTsKICAgICAgICAgIGlmICghdHlwZUVudmlyb25tZW50LmlzU3VidHlwZU9mKGZ1dHVyZUJvdHRvbVR5cGUsIHJldHVyblR5cGUpKSB7CiAgICAgICAgICAgIHByb2JsZW0gPSBmYXN0YS5tZXNzYWdlSWxsZWdhbEFzeW5jUmV0dXJuVHlwZTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIEFzeW5jTWFya2VyLkFzeW5jU3RhcjoKICAgICAgICAgIERhcnRUeXBlIHN0cmVhbUJvdHRvbVR5cGUgPSBsaWJyYXJ5QnVpbGRlci5sb2FkZXIuc3RyZWFtT2ZCb3R0b207CiAgICAgICAgICBpZiAocmV0dXJuVHlwZSBpcyBWb2lkVHlwZSkgewogICAgICAgICAgICBwcm9ibGVtID0gZmFzdGEubWVzc2FnZUlsbGVnYWxBc3luY0dlbmVyYXRvclZvaWRSZXR1cm5UeXBlOwogICAgICAgICAgfSBlbHNlIGlmICghdHlwZUVudmlyb25tZW50LmlzU3VidHlwZU9mKAogICAgICAgICAgICAgIHN0cmVhbUJvdHRvbVR5cGUsIHJldHVyblR5cGUpKSB7CiAgICAgICAgICAgIHByb2JsZW0gPSBmYXN0YS5tZXNzYWdlSWxsZWdhbEFzeW5jR2VuZXJhdG9yUmV0dXJuVHlwZTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIEFzeW5jTWFya2VyLlN5bmNTdGFyOgogICAgICAgICAgRGFydFR5cGUgaXRlcmFibGVCb3R0b21UeXBlID0gbGlicmFyeUJ1aWxkZXIubG9hZGVyLml0ZXJhYmxlT2ZCb3R0b207CiAgICAgICAgICBpZiAocmV0dXJuVHlwZSBpcyBWb2lkVHlwZSkgewogICAgICAgICAgICBwcm9ibGVtID0gZmFzdGEubWVzc2FnZUlsbGVnYWxTeW5jR2VuZXJhdG9yVm9pZFJldHVyblR5cGU7CiAgICAgICAgICB9IGVsc2UgaWYgKCF0eXBlRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YoCiAgICAgICAgICAgICAgaXRlcmFibGVCb3R0b21UeXBlLCByZXR1cm5UeXBlKSkgewogICAgICAgICAgICBwcm9ibGVtID0gZmFzdGEubWVzc2FnZUlsbGVnYWxTeW5jR2VuZXJhdG9yUmV0dXJuVHlwZTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIEFzeW5jTWFya2VyLlN5bmM6CiAgICAgICAgICBicmVhazsgLy8gc2tpcAogICAgICAgIGNhc2UgQXN5bmNNYXJrZXIuU3luY1lpZWxkaW5nOgogICAgICAgICAgdW5leHBlY3RlZCgiYXN5bmMsIGFzeW5jKiwgc3luYywgb3Igc3luYyoiLCAiJGFzeW5jTW9kaWZpZXIiLAogICAgICAgICAgICAgIG1lbWJlci5jaGFyT2Zmc2V0LCB1cmkpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIGlmIChwcm9ibGVtICE9IG51bGwpIHsKICAgICAgICAvLyBUT0RPKGhpbGxlcnN0cm9tKTogb25jZSB0eXBlcyBnZXQgYW5ub3RhdGVkIHdpdGggbG9jYXRpb24KICAgICAgICAvLyBpbmZvcm1hdGlvbiwgd2UgY2FuIGltcHJvdmUgdGhlIHF1YWxpdHkgb2YgdGhlIGVycm9yIG1lc3NhZ2UgYnkKICAgICAgICAvLyB1c2luZyB0aGUgb2Zmc2V0IG9mIFtyZXR1cm5UeXBlXSAoYW5kIHRoZSBsZW5ndGggb2YgaXRzIG5hbWUpLgogICAgICAgIGFkZFByb2JsZW0ocHJvYmxlbSwgbWVtYmVyLmNoYXJPZmZzZXQsIG1lbWJlci5uYW1lLmxlbmd0aCk7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoYnVpbGRlci5raW5kID09IFByb2NlZHVyZUtpbmQuU2V0dGVyKSB7CiAgICAgIGlmIChmb3JtYWxzPy5wYXJhbWV0ZXJzID09IG51bGwgfHwKICAgICAgICAgIGZvcm1hbHMucGFyYW1ldGVycy5sZW5ndGggIT0gMSB8fAogICAgICAgICAgZm9ybWFscy5wYXJhbWV0ZXJzLnNpbmdsZS5pc09wdGlvbmFsKSB7CiAgICAgICAgaW50IGNoYXJPZmZzZXQgPSBmb3JtYWxzPy5jaGFyT2Zmc2V0ID8/CiAgICAgICAgICAgIGJvZHk/LmZpbGVPZmZzZXQgPz8KICAgICAgICAgICAgYnVpbGRlci5tZW1iZXIuZmlsZU9mZnNldDsKICAgICAgICBpZiAoYm9keSA9PSBudWxsKSB7CiAgICAgICAgICBib2R5ID0gbmV3IEVtcHR5U3RhdGVtZW50KCkuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogICAgICAgIH0KICAgICAgICBpZiAoYnVpbGRlci5mb3JtYWxzICE9IG51bGwpIHsKICAgICAgICAgIC8vIElsbGVnYWwgcGFyYW1ldGVycyB3ZXJlIHJlbW92ZWQgYnkgdGhlIGZ1bmN0aW9uIGJ1aWxkZXIuCiAgICAgICAgICAvLyBBZGQgdGhlbSBhcyBsb2NhbCB2YXJpYWJsZSB0byBwdXQgdGhlbSBpbiBzY29wZSBvZiB0aGUgYm9keS4KICAgICAgICAgIExpc3Q8U3RhdGVtZW50PiBzdGF0ZW1lbnRzID0gPFN0YXRlbWVudD5bXTsKICAgICAgICAgIGZvciAoRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBwYXJhbWV0ZXIgaW4gYnVpbGRlci5mb3JtYWxzKSB7CiAgICAgICAgICAgIHN0YXRlbWVudHMuYWRkKHBhcmFtZXRlci50YXJnZXQpOwogICAgICAgICAgfQogICAgICAgICAgc3RhdGVtZW50cy5hZGQoYm9keSk7CiAgICAgICAgICBib2R5ID0gZm9yZXN0LmNyZWF0ZUJsb2NrKG51bGwsIHN0YXRlbWVudHMsIG51bGwpCiAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgICAgICAgfQogICAgICAgIGJvZHkgPSBmb3Jlc3QuY3JlYXRlQmxvY2soCiAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgIDxTdGF0ZW1lbnQ+WwogICAgICAgICAgICAgIGZvcmVzdC5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KAogICAgICAgICAgICAgICAgICAvLyBUaGlzIGVycm9yIGlzIGFkZGVkIGFmdGVyIHR5cGUgaW5mZXJlbmNlIGlzIGRvbmUsIHNvIHdlCiAgICAgICAgICAgICAgICAgIC8vIGRvbid0IG5lZWQgdG8gd3JhcCBlcnJvcnMgaW4gU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50LgogICAgICAgICAgICAgICAgICBkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihidWlsZFByb2JsZW0oCiAgICAgICAgICAgICAgICAgICAgICBmYXN0YS5tZXNzYWdlU2V0dGVyV2l0aFdyb25nTnVtYmVyT2ZGb3JtYWxzLAogICAgICAgICAgICAgICAgICAgICAgY2hhck9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgIG5vTGVuZ3RoKSksCiAgICAgICAgICAgICAgICAgIG51bGwpLAogICAgICAgICAgICAgIGJvZHksCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIG51bGwpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogICAgICB9CiAgICB9CiAgICAvLyBOby1zdWNoLW1ldGhvZCBmb3J3YXJkZXJzIGdldCB0aGVpciBib2RpZXMgaW5qZWN0ZWQgZHVyaW5nIG91dGxpbmUKICAgIC8vIGJ1aWxkaW5nLCBzbyB3ZSBzaG91bGQgc2tpcCB0aGVtIGhlcmUuCiAgICBib29sIGlzTm9TdWNoTWV0aG9kRm9yd2FyZGVyID0gKGJ1aWxkZXIuZnVuY3Rpb24ucGFyZW50IGlzIFByb2NlZHVyZSAmJgogICAgICAgIChidWlsZGVyLmZ1bmN0aW9uLnBhcmVudCBhcyBQcm9jZWR1cmUpLmlzTm9TdWNoTWV0aG9kRm9yd2FyZGVyKTsKICAgIGlmICghYnVpbGRlci5pc0V4dGVybmFsICYmICFpc05vU3VjaE1ldGhvZEZvcndhcmRlcikgewogICAgICBidWlsZGVyLmJvZHkgPSBib2R5OwogICAgfSBlbHNlIHsKICAgICAgaWYgKGJvZHkgIT0gbnVsbCkgewogICAgICAgIGJ1aWxkZXIuYm9keSA9IG5ldyBCbG9jayg8U3RhdGVtZW50PlsKICAgICAgICAgIG5ldyBFeHByZXNzaW9uU3RhdGVtZW50SnVkZ21lbnQoZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oCiAgICAgICAgICAgICAgYnVpbGRQcm9ibGVtKGZhc3RhLm1lc3NhZ2VFeHRlcm5hbE1ldGhvZFdpdGhCb2R5LCBib2R5LmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgICAgIG5vTGVuZ3RoKSkpCiAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGJvZHkuZmlsZU9mZnNldCwKICAgICAgICAgIGJvZHksCiAgICAgICAgXSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGJvZHkuZmlsZU9mZnNldDsKICAgICAgfQogICAgfQogICAgaWYgKGJ1aWxkZXIgaXMgQ29uc3RydWN0b3JCdWlsZGVyKSB7CiAgICAgIGZpbmlzaENvbnN0cnVjdG9yKGJ1aWxkZXIsIGFzeW5jTW9kaWZpZXIpOwogICAgfSBlbHNlIGlmIChidWlsZGVyIGlzIFByb2NlZHVyZUJ1aWxkZXIpIHsKICAgICAgYnVpbGRlci5hc3luY01vZGlmaWVyID0gYXN5bmNNb2RpZmllcjsKICAgIH0gZWxzZSB7CiAgICAgIHVuaGFuZGxlZCgiJHtidWlsZGVyLnJ1bnRpbWVUeXBlfSIsICJmaW5pc2hGdW5jdGlvbiIsIGJ1aWxkZXIuY2hhck9mZnNldCwKICAgICAgICAgIGJ1aWxkZXIuZmlsZVVyaSk7CiAgICB9CgogICAgcmVzb2x2ZVJlZGlyZWN0aW5nRmFjdG9yeVRhcmdldHMoKTsKICAgIGZpbmlzaFZhcmlhYmxlTWV0YWRhdGEoKTsKICB9CgogIC8vLyBFbnN1cmUgdGhhdCB0aGUgY29udGFpbmluZyBsaWJyYXJ5IG9mIHRoZSBbbWVtYmVyXSBoYXMgYmVlbiBsb2FkZWQuCiAgLy8vCiAgLy8vIFRoaXMgaXMgZm9yIGluc3RhbmNlIGltcG9ydGFudCBmb3IgbGF6eSBkaWxsIGxpYnJhcnkgYnVpbGRlcnMgd2hlcmUgdGhpcwogIC8vLyBtZXRob2QgaGFzIHRvIGJlIGNhbGxlZCB0byBlbnN1cmUgdGhhdAogIC8vLyBhKSBUaGUgbGlicmFyeSBoYXMgYmVlbiBmdWxseSBsb2FkZWQgKGFuZCBmb3IgaW5zdGFuY2UgYW55IGludGVybmFsCiAgLy8vICAgIHRyYW5zZm9ybWF0aW9uIG5lZWRlZCBoYXMgYmVlbiBwZXJmb3JtZWQpOyBhbmQKICAvLy8gYikgVGhlIGxpYnJhcnkgaXMgY29ycmVjdGx5IG1hcmtlZCBhcyBiZWluZyB1c2VkIHRvIGFsbG93IGZvciBwcm9wZXIKICAvLy8gICAgJ2RlcGVuZGVuY3kgcHJ1bmluZycuCiAgdm9pZCBlbnN1cmVMb2FkZWQoTWVtYmVyIG1lbWJlcikgewogICAgaWYgKG1lbWJlciA9PSBudWxsKSByZXR1cm47CiAgICBMaWJyYXJ5IGVuc3VyZUxpYnJhcnlMb2FkZWQgPSBtZW1iZXIuZW5jbG9zaW5nTGlicmFyeTsKICAgIExpYnJhcnlCdWlsZGVyIGJ1aWxkZXIgPQogICAgICAgIGxpYnJhcnlCdWlsZGVyLmxvYWRlci5idWlsZGVyc1tlbnN1cmVMaWJyYXJ5TG9hZGVkLmltcG9ydFVyaV0gPz8KICAgICAgICAgICAgbGlicmFyeUJ1aWxkZXIubG9hZGVyLnRhcmdldC5kaWxsVGFyZ2V0LmxvYWRlcgogICAgICAgICAgICAgICAgLmJ1aWxkZXJzW2Vuc3VyZUxpYnJhcnlMb2FkZWQuaW1wb3J0VXJpXTsKICAgIGlmIChidWlsZGVyIGlzIERpbGxMaWJyYXJ5QnVpbGRlcikgewogICAgICBidWlsZGVyLmVuc3VyZUxvYWRlZCgpOwogICAgfQogIH0KCiAgLy8vIENoZWNrIGlmIHRoZSBjb250YWluaW5nIGxpYnJhcnkgb2YgdGhlIFttZW1iZXJdIGhhcyBiZWVuIGxvYWRlZC4KICAvLy8KICAvLy8gVGhpcyBpcyBkZXNpZ25lZCBmb3IgdXNlIHdpdGggYXNzZXJ0cy4KICAvLy8gU2VlIFtlbnN1cmVMb2FkZWRdIGZvciBhIGRlc2NyaXB0aW9uIG9mIHdoYXQgJ2xvYWRlZCcgbWVhbnMgYW5kIHRoZSBpZGVhcwogIC8vLyBiZWhpbmQgdGhhdC4KICBib29sIGlzTG9hZGVkKE1lbWJlciBtZW1iZXIpIHsKICAgIGlmIChtZW1iZXIgPT0gbnVsbCkgcmV0dXJuIHRydWU7CiAgICBMaWJyYXJ5IGVuc3VyZUxpYnJhcnlMb2FkZWQgPSBtZW1iZXIuZW5jbG9zaW5nTGlicmFyeTsKICAgIExpYnJhcnlCdWlsZGVyIGJ1aWxkZXIgPQogICAgICAgIGxpYnJhcnlCdWlsZGVyLmxvYWRlci5idWlsZGVyc1tlbnN1cmVMaWJyYXJ5TG9hZGVkLmltcG9ydFVyaV0gPz8KICAgICAgICAgICAgbGlicmFyeUJ1aWxkZXIubG9hZGVyLnRhcmdldC5kaWxsVGFyZ2V0LmxvYWRlcgogICAgICAgICAgICAgICAgLmJ1aWxkZXJzW2Vuc3VyZUxpYnJhcnlMb2FkZWQuaW1wb3J0VXJpXTsKICAgIGlmIChidWlsZGVyIGlzIERpbGxMaWJyYXJ5QnVpbGRlcikgewogICAgICByZXR1cm4gYnVpbGRlci5pc0J1aWx0QW5kTWFya2VkOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICB2b2lkIHJlc29sdmVSZWRpcmVjdGluZ0ZhY3RvcnlUYXJnZXRzKCkgewogICAgZm9yIChTdGF0aWNJbnZvY2F0aW9uIGludm9jYXRpb24gaW4gcmVkaXJlY3RpbmdGYWN0b3J5SW52b2NhdGlvbnMpIHsKICAgICAgLy8gSWYgdGhlIGludm9jYXRpb24gd2FzIGludmFsaWQsIGl0IG9yIGl0cyBwYXJlbnQgaGFzIGFscmVhZHkgYmVlbgogICAgICAvLyBkZXN1Z2FyZWQgaW50byBhbiBleGNlcHRpb24gdGhyb3dpbmcgZXhwcmVzc2lvbi4gIFRoZXJlIGlzIG5vdGhpbmcgdG8KICAgICAgLy8gcmVzb2x2ZSBhbnltb3JlLiAgTm90ZSB0aGF0IGluIHRoZSBjYXNlIHdoZXJlIHRoZSBpbnZvY2F0aW9uJ3MgcGFyZW50CiAgICAgIC8vIHdhcyBpbnZhbGlkLCB0eXBlIGluZmVyZW5jZSB3b24ndCByZWFjaCB0aGUgaW52b2NhdGlvbiBub2RlIGFuZCB3b24ndAogICAgICAvLyBzZXQgaXRzIGluZmVycmVkVHlwZSBmaWVsZC4gIElmIHR5cGUgaW5mZXJlbmNlIGlzIGRpc2FibGVkLCByZWFjaCB0bwogICAgICAvLyB0aGUgb3V0ZXJtb3N0IHBhcmVudCB0byBjaGVjayBpZiB0aGUgbm9kZSBpcyBhIGRlYWQgY29kZS4KICAgICAgaWYgKGludm9jYXRpb24ucGFyZW50ID09IG51bGwpIGNvbnRpbnVlOwogICAgICBpZiAodHlwZUluZmVycmVyICE9IG51bGwpIHsKICAgICAgICBpZiAoaW52b2NhdGlvbiBpcyBGYWN0b3J5Q29uc3RydWN0b3JJbnZvY2F0aW9uSnVkZ21lbnQgJiYKICAgICAgICAgICAgaW52b2NhdGlvbi5pbmZlcnJlZFR5cGUgPT0gbnVsbCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIFRyZWVOb2RlIHBhcmVudCA9IGludm9jYXRpb24ucGFyZW50OwogICAgICAgIHdoaWxlIChwYXJlbnQgaXMhIENvbXBvbmVudCAmJiBwYXJlbnQgIT0gbnVsbCkgewogICAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDsKICAgICAgICB9CiAgICAgICAgaWYgKHBhcmVudCA9PSBudWxsKSBjb250aW51ZTsKICAgICAgfQoKICAgICAgUHJvY2VkdXJlIGluaXRpYWxUYXJnZXQgPSBpbnZvY2F0aW9uLnRhcmdldDsKICAgICAgRXhwcmVzc2lvbiByZXBsYWNlbWVudE5vZGU7CgogICAgICBSZWRpcmVjdGlvblRhcmdldCByZWRpcmVjdGlvblRhcmdldCA9CiAgICAgICAgICBnZXRSZWRpcmVjdGlvblRhcmdldChpbml0aWFsVGFyZ2V0LCB0aGlzLCBsZWdhY3lNb2RlOiBsZWdhY3lNb2RlKTsKICAgICAgTWVtYmVyIHJlc29sdmVkVGFyZ2V0ID0gcmVkaXJlY3Rpb25UYXJnZXQ/LnRhcmdldDsKCiAgICAgIGlmIChyZXNvbHZlZFRhcmdldCA9PSBudWxsKSB7CiAgICAgICAgU3RyaW5nIG5hbWUgPSBjb25zdHJ1Y3Rvck5hbWVGb3JEaWFnbm9zdGljcyhpbml0aWFsVGFyZ2V0Lm5hbWUubmFtZSwKICAgICAgICAgICAgY2xhc3NOYW1lOiBpbml0aWFsVGFyZ2V0LmVuY2xvc2luZ0NsYXNzLm5hbWUpOwogICAgICAgIC8vIFRPRE8oZG1pdHJ5YXMpOiBSZXBvcnQgdGhpcyBlcnJvciBlYXJsaWVyLgogICAgICAgIHJlcGxhY2VtZW50Tm9kZSA9IGRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVDeWNsaWNSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgICBpbml0aWFsVGFyZ2V0LmZpbGVPZmZzZXQsCiAgICAgICAgICAgIG5hbWUubGVuZ3RoKSk7CiAgICAgIH0gZWxzZSBpZiAocmVzb2x2ZWRUYXJnZXQgaXMgQ29uc3RydWN0b3IgJiYKICAgICAgICAgIHJlc29sdmVkVGFyZ2V0LmVuY2xvc2luZ0NsYXNzLmlzQWJzdHJhY3QpIHsKICAgICAgICByZXBsYWNlbWVudE5vZGUgPSBldmFsdWF0ZUFyZ3VtZW50c0JlZm9yZSgKICAgICAgICAgICAgZm9yZXN0LmNyZWF0ZUFyZ3VtZW50cyhub0xvY2F0aW9uLCBpbnZvY2F0aW9uLmFyZ3VtZW50cy5wb3NpdGlvbmFsLAogICAgICAgICAgICAgICAgdHlwZXM6IGludm9jYXRpb24uYXJndW1lbnRzLnR5cGVzLAogICAgICAgICAgICAgICAgbmFtZWQ6IGludm9jYXRpb24uYXJndW1lbnRzLm5hbWVkKSwKICAgICAgICAgICAgYnVpbGRBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVBYnN0cmFjdFJlZGlyZWN0ZWRDbGFzc0luc3RhbnRpYXRpb24KICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhyZXNvbHZlZFRhcmdldC5lbmNsb3NpbmdDbGFzcy5uYW1lKSwKICAgICAgICAgICAgICAgIHJlc29sdmVkVGFyZ2V0LmVuY2xvc2luZ0NsYXNzLm5hbWUsCiAgICAgICAgICAgICAgICBpbml0aWFsVGFyZ2V0LmZpbGVPZmZzZXQpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5IHJlZGlyZWN0aW5nRmFjdG9yeUJvZHkgPQogICAgICAgICAgICBnZXRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KHJlc29sdmVkVGFyZ2V0KTsKICAgICAgICBpZiAocmVkaXJlY3RpbmdGYWN0b3J5Qm9keSAhPSBudWxsKSB7CiAgICAgICAgICAvLyBJZiB0aGUgcmVkaXJlY3Rpb24gdGFyZ2V0IGlzIGl0c2VsZiBhIHJlZGlyZWN0aW5nIGZhY3RvcnksIGl0IG1lYW5zCiAgICAgICAgICAvLyB0aGF0IGl0IGlzIHVucmVzb2x2ZWQuCiAgICAgICAgICBhc3NlcnQocmVkaXJlY3RpbmdGYWN0b3J5Qm9keS5pc1VucmVzb2x2ZWQpOwogICAgICAgICAgU3RyaW5nIGVycm9yTmFtZSA9IHJlZGlyZWN0aW5nRmFjdG9yeUJvZHkudW5yZXNvbHZlZE5hbWU7CgogICAgICAgICAgcmVwbGFjZW1lbnROb2RlID0gdGhyb3dOb1N1Y2hNZXRob2RFcnJvcigKICAgICAgICAgICAgICBmb3Jlc3QuY3JlYXRlTnVsbExpdGVyYWwobnVsbCkKICAgICAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGludm9jYXRpb24uZmlsZU9mZnNldCwKICAgICAgICAgICAgICBlcnJvck5hbWUsCiAgICAgICAgICAgICAgZm9yZXN0LmNyZWF0ZUFyZ3VtZW50cygKICAgICAgICAgICAgICAgICAgbm9Mb2NhdGlvbiwgaW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbCwKICAgICAgICAgICAgICAgICAgdHlwZXM6IGludm9jYXRpb24uYXJndW1lbnRzLnR5cGVzLAogICAgICAgICAgICAgICAgICBuYW1lZDogaW52b2NhdGlvbi5hcmd1bWVudHMubmFtZWQpLAogICAgICAgICAgICAgIGluaXRpYWxUYXJnZXQuZmlsZU9mZnNldCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZnJvbVBhaXJzKAogICAgICAgICAgICAgIGluaXRpYWxUYXJnZXQuZnVuY3Rpb24udHlwZVBhcmFtZXRlcnMsCiAgICAgICAgICAgICAgaW52b2NhdGlvbi5hcmd1bWVudHMudHlwZXMpOwogICAgICAgICAgaW52b2NhdGlvbi5hcmd1bWVudHMudHlwZXMuY2xlYXIoKTsKICAgICAgICAgIGludm9jYXRpb24uYXJndW1lbnRzLnR5cGVzLmxlbmd0aCA9CiAgICAgICAgICAgICAgcmVkaXJlY3Rpb25UYXJnZXQudHlwZUFyZ3VtZW50cy5sZW5ndGg7CiAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGludm9jYXRpb24uYXJndW1lbnRzLnR5cGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGludm9jYXRpb24uYXJndW1lbnRzLnR5cGVzW2ldID0KICAgICAgICAgICAgICAgIHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShyZWRpcmVjdGlvblRhcmdldC50eXBlQXJndW1lbnRzW2ldKTsKICAgICAgICAgIH0KCiAgICAgICAgICByZXBsYWNlbWVudE5vZGUgPSBidWlsZFN0YXRpY0ludm9jYXRpb24oCiAgICAgICAgICAgICAgcmVzb2x2ZWRUYXJnZXQsCiAgICAgICAgICAgICAgZm9yZXN0LmNyZWF0ZUFyZ3VtZW50cygKICAgICAgICAgICAgICAgICAgbm9Mb2NhdGlvbiwgaW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbCwKICAgICAgICAgICAgICAgICAgdHlwZXM6IGludm9jYXRpb24uYXJndW1lbnRzLnR5cGVzLAogICAgICAgICAgICAgICAgICBuYW1lZDogaW52b2NhdGlvbi5hcmd1bWVudHMubmFtZWQpLAogICAgICAgICAgICAgIGNvbnN0bmVzczogaW52b2NhdGlvbi5pc0NvbnN0CiAgICAgICAgICAgICAgICAgID8gQ29uc3RuZXNzLmV4cGxpY2l0Q29uc3QKICAgICAgICAgICAgICAgICAgOiBDb25zdG5lc3MuZXhwbGljaXROZXcsCiAgICAgICAgICAgICAgY2hhck9mZnNldDogaW52b2NhdGlvbi5maWxlT2Zmc2V0KTsKICAgICAgICAgIC8vIFRPRE8oZG1pdHJ5YXMpOiBGaW5kIGEgYmV0dGVyIHdheSB0byB1bndyYXAKICAgICAgICAgIC8vIFtTeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnRdIG9yIG5vdCB0byBidWlsZCBpdCBpbiB0aGUgZmlyc3QgcGxhY2UKICAgICAgICAgIC8vIHdoZW4gaXQncyBub3QgbmVlZGVkLgogICAgICAgICAgaWYgKHJlcGxhY2VtZW50Tm9kZSBpcyBzaGFkb3cuU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50KSB7CiAgICAgICAgICAgIHJlcGxhY2VtZW50Tm9kZSA9IGRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKHJlcGxhY2VtZW50Tm9kZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICBpbnZvY2F0aW9uLnJlcGxhY2VXaXRoKHJlcGxhY2VtZW50Tm9kZSk7CiAgICB9CiAgICByZWRpcmVjdGluZ0ZhY3RvcnlJbnZvY2F0aW9ucy5jbGVhcigpOwogIH0KCiAgdm9pZCBmaW5pc2hWYXJpYWJsZU1ldGFkYXRhKCkgewogICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiB2YXJpYWJsZXNXaXRoTWV0YWRhdGEgPQogICAgICAgIHRoaXMudmFyaWFibGVzV2l0aE1ldGFkYXRhOwogICAgdGhpcy52YXJpYWJsZXNXaXRoTWV0YWRhdGEgPSBudWxsOwogICAgTGlzdDxMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+PiBtdWx0aVZhcmlhYmxlc1dpdGhNZXRhZGF0YSA9CiAgICAgICAgdGhpcy5tdWx0aVZhcmlhYmxlc1dpdGhNZXRhZGF0YTsKICAgIHRoaXMubXVsdGlWYXJpYWJsZXNXaXRoTWV0YWRhdGEgPSBudWxsOwoKICAgIGlmICh2YXJpYWJsZXNXaXRoTWV0YWRhdGEgIT0gbnVsbCkgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcmlhYmxlc1dpdGhNZXRhZGF0YS5sZW5ndGg7IGkrKykgewogICAgICAgIGluZmVyQW5ub3RhdGlvbnModmFyaWFibGVzV2l0aE1ldGFkYXRhW2ldLmFubm90YXRpb25zKTsKICAgICAgfQogICAgfQogICAgaWYgKG11bHRpVmFyaWFibGVzV2l0aE1ldGFkYXRhICE9IG51bGwpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtdWx0aVZhcmlhYmxlc1dpdGhNZXRhZGF0YS5sZW5ndGg7IGkrKykgewogICAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gdmFyaWFibGVzID0gbXVsdGlWYXJpYWJsZXNXaXRoTWV0YWRhdGFbaV07CiAgICAgICAgTGlzdDxFeHByZXNzaW9uPiBhbm5vdGF0aW9ucyA9IHZhcmlhYmxlcy5maXJzdC5hbm5vdGF0aW9uczsKICAgICAgICBpbmZlckFubm90YXRpb25zKGFubm90YXRpb25zKTsKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IHZhcmlhYmxlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgY2xvbmVyID8/PSBuZXcgQ2xvbmVWaXNpdG9yKCk7CiAgICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlID0gdmFyaWFibGVzW2ldOwogICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhbm5vdGF0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXJpYWJsZS5hZGRBbm5vdGF0aW9uKGNsb25lci5jbG9uZShhbm5vdGF0aW9uc1tpXSkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxFeHByZXNzaW9uPiBmaW5pc2hNZXRhZGF0YShUcmVlTm9kZSBwYXJlbnQpIHsKICAgIExpc3Q8RXhwcmVzc2lvbj4gZXhwcmVzc2lvbnMgPSBwb3AoKTsKICAgIGluZmVyQW5ub3RhdGlvbnMoZXhwcmVzc2lvbnMpOwoKICAgIC8vIFRoZSBpbnZvY2F0aW9uIG9mIFtyZXNvbHZlUmVkaXJlY3RpbmdGYWN0b3J5VGFyZ2V0c10gYmVsb3cgbWF5IGNoYW5nZSB0aGUKICAgIC8vIHJvb3Qgbm9kZXMgb2YgdGhlIGFubm90YXRpb24gZXhwcmVzc2lvbnMuICBXZSBuZWVkIHRvIGhhdmUgYSBwYXJlbnQgb2YKICAgIC8vIHRoZSBhbm5vdGF0aW9uIG5vZGVzIGJlZm9yZSB0aGUgcmVzb2x1dGlvbiBpcyBwZXJmb3JtZWQsIHRvIGNvbGxlY3QgYW5kCiAgICAvLyByZXR1cm4gdGhlbSBsYXRlci4gIElmIFtwYXJlbnRdIGlzIG5vdCBwcm92aWRlZCwgW3RlbXBvcmFyeVBhcmVudF0gaXMKICAgIC8vIHVzZWQuCiAgICBMaXN0TGl0ZXJhbCB0ZW1wb3JhcnlQYXJlbnQ7CgogICAgaWYgKHBhcmVudCBpcyBDbGFzcykgewogICAgICBmb3IgKEV4cHJlc3Npb24gZXhwcmVzc2lvbiBpbiBleHByZXNzaW9ucykgewogICAgICAgIHBhcmVudC5hZGRBbm5vdGF0aW9uKGV4cHJlc3Npb24pOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHBhcmVudCBpcyBMaWJyYXJ5KSB7CiAgICAgIGZvciAoRXhwcmVzc2lvbiBleHByZXNzaW9uIGluIGV4cHJlc3Npb25zKSB7CiAgICAgICAgcGFyZW50LmFkZEFubm90YXRpb24oZXhwcmVzc2lvbik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAocGFyZW50IGlzIExpYnJhcnlEZXBlbmRlbmN5KSB7CiAgICAgIGZvciAoRXhwcmVzc2lvbiBleHByZXNzaW9uIGluIGV4cHJlc3Npb25zKSB7CiAgICAgICAgcGFyZW50LmFkZEFubm90YXRpb24oZXhwcmVzc2lvbik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAocGFyZW50IGlzIExpYnJhcnlQYXJ0KSB7CiAgICAgIGZvciAoRXhwcmVzc2lvbiBleHByZXNzaW9uIGluIGV4cHJlc3Npb25zKSB7CiAgICAgICAgcGFyZW50LmFkZEFubm90YXRpb24oZXhwcmVzc2lvbik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAocGFyZW50IGlzIE1lbWJlcikgewogICAgICBmb3IgKEV4cHJlc3Npb24gZXhwcmVzc2lvbiBpbiBleHByZXNzaW9ucykgewogICAgICAgIHBhcmVudC5hZGRBbm5vdGF0aW9uKGV4cHJlc3Npb24pOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHBhcmVudCBpcyBUeXBlZGVmKSB7CiAgICAgIGZvciAoRXhwcmVzc2lvbiBleHByZXNzaW9uIGluIGV4cHJlc3Npb25zKSB7CiAgICAgICAgcGFyZW50LmFkZEFubm90YXRpb24oZXhwcmVzc2lvbik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAocGFyZW50IGlzIFR5cGVQYXJhbWV0ZXIpIHsKICAgICAgZm9yIChFeHByZXNzaW9uIGV4cHJlc3Npb24gaW4gZXhwcmVzc2lvbnMpIHsKICAgICAgICBwYXJlbnQuYWRkQW5ub3RhdGlvbihleHByZXNzaW9uKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChwYXJlbnQgaXMgVmFyaWFibGVEZWNsYXJhdGlvbikgewogICAgICBmb3IgKEV4cHJlc3Npb24gZXhwcmVzc2lvbiBpbiBleHByZXNzaW9ucykgewogICAgICAgIHBhcmVudC5hZGRBbm5vdGF0aW9uKGV4cHJlc3Npb24pOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB0ZW1wb3JhcnlQYXJlbnQgPSBuZXcgTGlzdExpdGVyYWwoZXhwcmVzc2lvbnMpOwogICAgfQogICAgcmVzb2x2ZVJlZGlyZWN0aW5nRmFjdG9yeVRhcmdldHMoKTsKICAgIGZpbmlzaFZhcmlhYmxlTWV0YWRhdGEoKTsKICAgIHJldHVybiB0ZW1wb3JhcnlQYXJlbnQgIT0gbnVsbCA/IHRlbXBvcmFyeVBhcmVudC5leHByZXNzaW9ucyA6IGV4cHJlc3Npb25zOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBwYXJzZVNpbmdsZUV4cHJlc3Npb24oCiAgICAgIFBhcnNlciBwYXJzZXIsIFRva2VuIHRva2VuLCBGdW5jdGlvbk5vZGUgcGFyYW1ldGVycykgewogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlUGFyYW1ldGVyQnVpbGRlcnM7CiAgICBmb3IgKFR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlciBpbiBwYXJhbWV0ZXJzLnR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgIHR5cGVQYXJhbWV0ZXJCdWlsZGVycyA/Pz0gPFR5cGVWYXJpYWJsZUJ1aWxkZXI+W107CiAgICAgIHR5cGVQYXJhbWV0ZXJCdWlsZGVycy5hZGQoCiAgICAgICAgICBuZXcgVHlwZVZhcmlhYmxlQnVpbGRlci5mcm9tS2VybmVsKHR5cGVQYXJhbWV0ZXIsIGxpYnJhcnlCdWlsZGVyKSk7CiAgICB9CiAgICBlbnRlckZ1bmN0aW9uVHlwZVNjb3BlKHR5cGVQYXJhbWV0ZXJCdWlsZGVycyk7CgogICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBmb3JtYWxzID0KICAgICAgICBwYXJhbWV0ZXJzLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCA9PSAwCiAgICAgICAgICAgID8gbnVsbAogICAgICAgICAgICA6IG5ldyBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+KAogICAgICAgICAgICAgICAgcGFyYW1ldGVycy5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gZm9ybWFsID0gcGFyYW1ldGVycy5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXTsKICAgICAgZm9ybWFsc1tpXSA9IG5ldyBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyKAogICAgICAgICAgbnVsbCwgMCwgbnVsbCwgZm9ybWFsLm5hbWUsIGxpYnJhcnlCdWlsZGVyLCBmb3JtYWwuZmlsZU9mZnNldCkKICAgICAgICAuLnZhcmlhYmxlID0gZm9ybWFsOwogICAgfQogICAgZW50ZXJMb2NhbFNjb3BlKAogICAgICAgIG51bGwsCiAgICAgICAgbmV3IEZvcm1hbFBhcmFtZXRlcnMoZm9ybWFscywgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCBub0xlbmd0aCwgdXJpKQogICAgICAgICAgICAuY29tcHV0ZUZvcm1hbFBhcmFtZXRlclNjb3BlKHNjb3BlLCBtZW1iZXIsIHRoaXMpKTsKCiAgICB0b2tlbiA9IHBhcnNlci5wYXJzZUV4cHJlc3Npb24ocGFyc2VyLnN5bnRoZXRpY1ByZXZpb3VzVG9rZW4odG9rZW4pKTsKCiAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwb3BGb3JWYWx1ZSgpOwogICAgVG9rZW4gZW9mID0gdG9rZW4ubmV4dDsKCiAgICBpZiAoIWVvZi5pc0VvZikgewogICAgICBleHByZXNzaW9uID0gd3JhcEluTG9jYXRlZFByb2JsZW0oCiAgICAgICAgICBleHByZXNzaW9uLAogICAgICAgICAgZmFzdGEubWVzc2FnZUV4cGVjdGVkT25lRXhwcmVzc2lvbgogICAgICAgICAgICAgIC53aXRoTG9jYXRpb24odXJpLCBlb2YuY2hhck9mZnNldCwgZW9mLmxlbmd0aCkpOwogICAgfQoKICAgIFJldHVybkp1ZGdtZW50IGZha2VSZXR1cm4gPSBuZXcgUmV0dXJuSnVkZ21lbnQodHJ1ZSwgZXhwcmVzc2lvbik7CgogICAgdHlwZUluZmVycmVyPy5pbmZlckZ1bmN0aW9uQm9keSgKICAgICAgICB0aGlzLCBjb25zdCBEeW5hbWljVHlwZSgpLCBBc3luY01hcmtlci5TeW5jLCBmYWtlUmV0dXJuKTsKCiAgICByZXR1cm4gZmFrZVJldHVybi5leHByZXNzaW9uOwogIH0KCiAgdm9pZCBwYXJzZUluaXRpYWxpemVycyhUb2tlbiB0b2tlbikgewogICAgUGFyc2VyIHBhcnNlciA9IG5ldyBQYXJzZXIodGhpcyk7CiAgICBpZiAoIXRva2VuLmlzRW9mKSB7CiAgICAgIHRva2VuID0gcGFyc2VyLnBhcnNlSW5pdGlhbGl6ZXJzKHRva2VuKTsKICAgICAgY2hlY2tFbXB0eSh0b2tlbi5jaGFyT2Zmc2V0KTsKICAgIH0gZWxzZSB7CiAgICAgIGhhbmRsZU5vSW5pdGlhbGl6ZXJzKCk7CiAgICB9CiAgICAvLyBXZSBhcmUgcGFzc2luZyBbQXN5bmNNYXJrZXIuU3luY10gYmVjYXVzZSB0aGUgZXJyb3Igd2lsbCBiZSByZXBvcnRlZAogICAgLy8gYWxyZWFkeS4KICAgIGZpbmlzaENvbnN0cnVjdG9yKG1lbWJlciwgQXN5bmNNYXJrZXIuU3luYyk7CiAgfQoKICBFeHByZXNzaW9uIHBhcnNlRmllbGRJbml0aWFsaXplcihUb2tlbiB0b2tlbikgewogICAgUGFyc2VyIHBhcnNlciA9IG5ldyBQYXJzZXIodGhpcyk7CiAgICB0b2tlbiA9IHBhcnNlci5wYXJzZUV4cHJlc3Npb24ocGFyc2VyLnN5bnRoZXRpY1ByZXZpb3VzVG9rZW4odG9rZW4pKTsKICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBvcEZvclZhbHVlKCk7CiAgICBjaGVja0VtcHR5KHRva2VuLmNoYXJPZmZzZXQpOwogICAgcmV0dXJuIGV4cHJlc3Npb247CiAgfQoKICBFeHByZXNzaW9uIHBhcnNlQW5ub3RhdGlvbihUb2tlbiB0b2tlbikgewogICAgUGFyc2VyIHBhcnNlciA9IG5ldyBQYXJzZXIodGhpcyk7CiAgICB0b2tlbiA9IHBhcnNlci5wYXJzZU1ldGFkYXRhKHBhcnNlci5zeW50aGV0aWNQcmV2aW91c1Rva2VuKHRva2VuKSk7CiAgICBFeHByZXNzaW9uIGFubm90YXRpb24gPSBwb3AoKTsKICAgIGNoZWNrRW1wdHkodG9rZW4uY2hhck9mZnNldCk7CiAgICByZXR1cm4gYW5ub3RhdGlvbjsKICB9CgogIHZvaWQgZmluaXNoQ29uc3RydWN0b3IoCiAgICAgIENvbnN0cnVjdG9yQnVpbGRlciBidWlsZGVyLCBBc3luY01hcmtlciBhc3luY01vZGlmaWVyKSB7CiAgICAvLy8gUXVvdGVzIGJlbG93IGFyZSBmcm9tIFtEYXJ0IFByb2dyYW1taW5nIExhbmd1YWdlIFNwZWNpZmljYXRpb24sIDR0aAogICAgLy8vIEVkaXRpb25dKAogICAgLy8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9wdWJsaWNhdGlvbnMvZmlsZXMvRUNNQS1TVC9FQ01BLTQwOC5wZGYpLgogICAgYXNzZXJ0KGJ1aWxkZXIgPT0gbWVtYmVyKTsKICAgIENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yID0gYnVpbGRlci5hY3R1YWxDb25zdHJ1Y3RvcjsKICAgIGlmIChhc3luY01vZGlmaWVyICE9IEFzeW5jTWFya2VyLlN5bmMpIHsKICAgICAgLy8gVE9ETyhhaGUpOiBDaGFuZ2UgdGhpcyB0byBhIG51bGwgY2hlY2suCiAgICAgIGludCBvZmZzZXQgPSBidWlsZGVyLmJvZHk/LmZpbGVPZmZzZXQgPz8gYnVpbGRlci5jaGFyT2Zmc2V0OwogICAgICBjb25zdHJ1Y3Rvci5pbml0aWFsaXplcnMuYWRkKGJ1aWxkSW52YWxpZEluaXRpYWxpemVyKAogICAgICAgICAgZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oCiAgICAgICAgICAgICAgYnVpbGRQcm9ibGVtKGZhc3RhLm1lc3NhZ2VDb25zdHJ1Y3Rvck5vdFN5bmMsIG9mZnNldCwgbm9MZW5ndGgpKSwKICAgICAgICAgIG9mZnNldCkpOwogICAgfQogICAgaWYgKG5lZWRzSW1wbGljaXRTdXBlckluaXRpYWxpemVyKSB7CiAgICAgIC8vLyA+SWYgbm8gc3VwZXJpbml0aWFsaXplciBpcyBwcm92aWRlZCwgYW4gaW1wbGljaXQgc3VwZXJpbml0aWFsaXplcgogICAgICAvLy8gPm9mIHRoZSBmb3JtIHN1cGVyKCkgaXMgYWRkZWQgYXQgdGhlIGVuZCBvZiBr4oCZcyBpbml0aWFsaXplciBsaXN0LAogICAgICAvLy8gPnVubGVzcyB0aGUgZW5jbG9zaW5nIGNsYXNzIGlzIGNsYXNzIE9iamVjdC4KICAgICAgQ29uc3RydWN0b3Igc3VwZXJUYXJnZXQgPSBsb29rdXBDb25zdHJ1Y3RvcihlbXB0eU5hbWUsIGlzU3VwZXI6IHRydWUpOwogICAgICBJbml0aWFsaXplciBpbml0aWFsaXplcjsKICAgICAgQXJndW1lbnRzIGFyZ3VtZW50cyA9IGZvcmVzdC5jcmVhdGVBcmd1bWVudHNFbXB0eShub0xvY2F0aW9uKTsKICAgICAgaWYgKHN1cGVyVGFyZ2V0ID09IG51bGwgfHwKICAgICAgICAgIGNoZWNrQXJndW1lbnRzRm9yRnVuY3Rpb24oc3VwZXJUYXJnZXQuZnVuY3Rpb24sIGFyZ3VtZW50cywKICAgICAgICAgICAgICAgICAgYnVpbGRlci5jaGFyT2Zmc2V0LCBjb25zdCA8VHlwZVBhcmFtZXRlcj5bXSkgIT0KICAgICAgICAgICAgICBudWxsKSB7CiAgICAgICAgU3RyaW5nIHN1cGVyY2xhc3MgPSBjbGFzc0J1aWxkZXIuc3VwZXJ0eXBlLmZ1bGxOYW1lRm9yRXJyb3JzOwogICAgICAgIGludCBsZW5ndGggPSBjb25zdHJ1Y3Rvci5uYW1lLm5hbWUubGVuZ3RoOwogICAgICAgIGlmIChsZW5ndGggPT0gMCkgewogICAgICAgICAgbGVuZ3RoID0gKGNvbnN0cnVjdG9yLnBhcmVudCBhcyBDbGFzcykubmFtZS5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIGluaXRpYWxpemVyID0gYnVpbGRJbnZhbGlkSW5pdGlhbGl6ZXIoCiAgICAgICAgICAgIGRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlU3VwZXJjbGFzc0hhc05vRGVmYXVsdENvbnN0cnVjdG9yCiAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoc3VwZXJjbGFzcyksCiAgICAgICAgICAgICAgICBidWlsZGVyLmNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICBsZW5ndGgpKSwKICAgICAgICAgICAgYnVpbGRlci5jaGFyT2Zmc2V0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbml0aWFsaXplciA9IGJ1aWxkU3VwZXJJbml0aWFsaXplcigKICAgICAgICAgICAgdHJ1ZSwgc3VwZXJUYXJnZXQsIGFyZ3VtZW50cywgYnVpbGRlci5jaGFyT2Zmc2V0KTsKICAgICAgfQogICAgICBjb25zdHJ1Y3Rvci5pbml0aWFsaXplcnMuYWRkKGluaXRpYWxpemVyKTsKICAgIH0KICAgIHNldFBhcmVudHMoY29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzLCBjb25zdHJ1Y3Rvcik7CiAgICBsaWJyYXJ5QnVpbGRlci5sb2FkZXIudHJhbnNmb3JtTGlzdFBvc3RJbmZlcmVuY2UoCiAgICAgICAgY29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzLCB0cmFuc2Zvcm1TZXRMaXRlcmFscywgdHJhbnNmb3JtQ29sbGVjdGlvbnMpOwogICAgaWYgKGNvbnN0cnVjdG9yLmZ1bmN0aW9uLmJvZHkgPT0gbnVsbCkgewogICAgICAvLy8gPklmIGEgZ2VuZXJhdGl2ZSBjb25zdHJ1Y3RvciBjIGlzIG5vdCBhIHJlZGlyZWN0aW5nIGNvbnN0cnVjdG9yCiAgICAgIC8vLyA+YW5kIG5vIGJvZHkgaXMgcHJvdmlkZWQsIHRoZW4gYyBpbXBsaWNpdGx5IGhhcyBhbiBlbXB0eSBib2R5IHt9LgogICAgICAvLy8gV2UgdXNlIGFuIGVtcHR5IHN0YXRlbWVudCBpbnN0ZWFkLgogICAgICBjb25zdHJ1Y3Rvci5mdW5jdGlvbi5ib2R5ID0gbmV3IEVtcHR5U3RhdGVtZW50KCk7CiAgICAgIGNvbnN0cnVjdG9yLmZ1bmN0aW9uLmJvZHkucGFyZW50ID0gY29uc3RydWN0b3IuZnVuY3Rpb247CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUV4cHJlc3Npb25TdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkV4cHJlc3Npb25TdGF0ZW1lbnQiKTsKICAgIHB1c2goZm9yZXN0LmNyZWF0ZUV4cHJlc3Npb25TdGF0ZW1lbnQocG9wRm9yRWZmZWN0KCksIHRva2VuKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEFyZ3VtZW50cyhpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJBcmd1bWVudHMiKTsKICAgIExpc3Q8T2JqZWN0PiBhcmd1bWVudHMgPSBjb3VudCA9PSAwCiAgICAgICAgPyA8T2JqZWN0PltdCiAgICAgICAgOiBjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxPYmplY3Q+KCkucG9wKHN0YWNrLCBjb3VudCk7CiAgICBpZiAoYXJndW1lbnRzID09IG51bGwpIHsKICAgICAgcHVzaChuZXcgUGFyc2VyUmVjb3ZlcnkoYmVnaW5Ub2tlbi5jaGFyT2Zmc2V0KSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGludCBmaXJzdE5hbWVkQXJndW1lbnRJbmRleCA9IGFyZ3VtZW50cy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBPYmplY3Qgbm9kZSA9IGFyZ3VtZW50c1tpXTsKICAgICAgaWYgKG5vZGUgaXMgTmFtZWRFeHByZXNzaW9uKSB7CiAgICAgICAgZmlyc3ROYW1lZEFyZ3VtZW50SW5kZXggPQogICAgICAgICAgICBpIDwgZmlyc3ROYW1lZEFyZ3VtZW50SW5kZXggPyBpIDogZmlyc3ROYW1lZEFyZ3VtZW50SW5kZXg7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgRXhwcmVzc2lvbiBhcmd1bWVudCA9IHRvVmFsdWUobm9kZSk7CiAgICAgICAgYXJndW1lbnRzW2ldID0gYXJndW1lbnQ7CiAgICAgICAgaWYgKGkgPiBmaXJzdE5hbWVkQXJndW1lbnRJbmRleCkgewogICAgICAgICAgYXJndW1lbnRzW2ldID0gbmV3IE5hbWVkRXhwcmVzc2lvbigKICAgICAgICAgICAgICAiIyRpIiwKICAgICAgICAgICAgICBidWlsZFByb2JsZW0oZmFzdGEubWVzc2FnZUV4cGVjdGVkTmFtZWRBcmd1bWVudCwKICAgICAgICAgICAgICAgICAgZm9yZXN0LnJlYWRPZmZzZXQoYXJndW1lbnQpLCBub0xlbmd0aCkpCiAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGJlZ2luVG9rZW4uY2hhck9mZnNldDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChmaXJzdE5hbWVkQXJndW1lbnRJbmRleCA8IGFyZ3VtZW50cy5sZW5ndGgpIHsKICAgICAgTGlzdDxFeHByZXNzaW9uPiBwb3NpdGlvbmFsID0gbmV3IExpc3Q8RXhwcmVzc2lvbj4uZnJvbSgKICAgICAgICAgIGFyZ3VtZW50cy5nZXRSYW5nZSgwLCBmaXJzdE5hbWVkQXJndW1lbnRJbmRleCkpOwogICAgICBMaXN0PE5hbWVkRXhwcmVzc2lvbj4gbmFtZWQgPSBuZXcgTGlzdDxOYW1lZEV4cHJlc3Npb24+LmZyb20oCiAgICAgICAgICBhcmd1bWVudHMuZ2V0UmFuZ2UoZmlyc3ROYW1lZEFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50cy5sZW5ndGgpKTsKICAgICAgcHVzaChmb3Jlc3QuY3JlYXRlQXJndW1lbnRzKGJlZ2luVG9rZW4ub2Zmc2V0LCBwb3NpdGlvbmFsLCBuYW1lZDogbmFtZWQpKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRPRE8oa21pbGxpa2luKTogRmluZCBhIHdheSB0byBhdm9pZCBhbGxvY2F0aW5nIGEgc2Vjb25kIGxpc3QgaW4gdGhlCiAgICAgIC8vIGNhc2Ugd2hlcmUgdGhlcmUgd2VyZSBubyBuYW1lZCBhcmd1bWVudHMsIHdoaWNoIGlzIGEgY29tbW9uIG9uZS4KICAgICAgcHVzaChmb3Jlc3QuY3JlYXRlQXJndW1lbnRzKAogICAgICAgICAgYmVnaW5Ub2tlbi5vZmZzZXQsIG5ldyBMaXN0PEV4cHJlc3Npb24+LmZyb20oYXJndW1lbnRzKSkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVQYXJlbnRoZXNpemVkQ29uZGl0aW9uKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJQYXJlbnRoZXNpemVkQ29uZGl0aW9uIik7CiAgICBwdXNoKGZvcmVzdC5jcmVhdGVQYXJlbnRoZXNpemVkQ29uZGl0aW9uKAogICAgICAgIHRva2VuLCBwb3BGb3JWYWx1ZSgpLCB0b2tlbi5lbmRHcm91cCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVQYXJlbnRoZXNpemVkRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiUGFyZW50aGVzaXplZEV4cHJlc3Npb24iKTsKICAgIEV4cHJlc3Npb24gdmFsdWUgPSBwb3BGb3JWYWx1ZSgpOwogICAgaWYgKHZhbHVlIGlzIFNoYWRvd0xhcmdlSW50TGl0ZXJhbCkgewogICAgICAvLyBXZSBuZWVkIHRvIGtub3cgdGhhdCB0aGUgZXhwcmVzc2lvbiB3YXMgcGFyZW50aGVzaXplZCBiZWNhdXNlIHdlIHdpbGwKICAgICAgLy8gdHJlYXQgLW4gZGlmZmVyZW50bHkgZnJvbSAtKG4pLiAgSWYgdGhlIGV4cHJlc3Npb24gb2NjdXJzIGluIGEgZG91YmxlCiAgICAgIC8vIGNvbnRleHQsIC1uIGlzIGEgZG91YmxlIGxpdGVyYWwgYW5kIC0obikgaXMgYW4gYXBwbGljYXRpb24gb2YgdW5hcnktIHRvCiAgICAgIC8vIGFuIGludGVnZXIgbGl0ZXJhbC4gIEFuZCBpbiBhbnkgb3RoZXIgY29udGV4dCwgJy0nIGlzIHBhcnQgb2YgdGhlCiAgICAgIC8vIHN5bnRheCBvZiAtbiwgaS5lLiwgLTkyMjMzNzIwMzY4NTQ3NzU4MDggaXMgT0sgYW5kIGl0IGlzIHRoZSBtaW5pbXVtCiAgICAgIC8vIDY0LWJpdCBpbnRlZ2VyLCBhbmQgJy0nIGlzIGFuIGFwcGxpY2F0aW9uIG9mIHVuYXJ5LSBpbiAtKG4pLCBpLmUuLAogICAgICAvLyAtKDkyMjMzNzIwMzY4NTQ3NzU4MDgpIGlzIGFuIGVycm9yIGJlY2F1c2UgdGhlIGxpdGVyYWwgZG9lcyBub3QgZml0IGluCiAgICAgIC8vIDY0LWJpdHMuCiAgICAgIHB1c2godmFsdWUuLmlzUGFyZW50aGVzaXplZCA9IHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChuZXcgUGFyZW50aGVzaXplZEV4cHJlc3Npb25HZW5lcmF0b3IodGhpcywgdG9rZW4uZW5kR3JvdXAsIHZhbHVlKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVNlbmQoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGFzc2VydChjaGVja1N0YXRlKGJlZ2luVG9rZW4sIFsKICAgICAgVmFsdWVLaW5kLkFyZ3VtZW50c09yTnVsbCwKICAgICAgVmFsdWVLaW5kLlR5cGVBcmd1bWVudHNPck51bGwsCiAgICAgIHVuaW9uT2ZLaW5kcyhbCiAgICAgICAgVmFsdWVLaW5kLkV4cHJlc3Npb24sCiAgICAgICAgVmFsdWVLaW5kLkdlbmVyYXRvciwKICAgICAgICBWYWx1ZUtpbmQuSWRlbnRpZmllciwKICAgICAgICBWYWx1ZUtpbmQuUGFyc2VyUmVjb3ZlcnksCiAgICAgICAgVmFsdWVLaW5kLlByb2JsZW1CdWlsZGVyCiAgICAgIF0pCiAgICBdKSk7CiAgICBkZWJ1Z0V2ZW50KCJTZW5kIik7CiAgICBBcmd1bWVudHMgYXJndW1lbnRzID0gcG9wKCk7CiAgICBMaXN0PFVucmVzb2x2ZWRUeXBlPiB0eXBlQXJndW1lbnRzID0gcG9wKCk7CiAgICBPYmplY3QgcmVjZWl2ZXIgPSBwb3AoKTsKICAgIGlmIChhcmd1bWVudHMgIT0gbnVsbCAmJiB0eXBlQXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgYXNzZXJ0KGZvcmVzdC5hcmd1bWVudHNUeXBlQXJndW1lbnRzKGFyZ3VtZW50cykuaXNFbXB0eSk7CiAgICAgIGZvcmVzdC5hcmd1bWVudHNTZXRUeXBlQXJndW1lbnRzKAogICAgICAgICAgYXJndW1lbnRzLCBidWlsZERhcnRUeXBlQXJndW1lbnRzKHR5cGVBcmd1bWVudHMpKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydCh0eXBlQXJndW1lbnRzID09IG51bGwpOwogICAgfQogICAgaWYgKHJlY2VpdmVyIGlzIElkZW50aWZpZXIpIHsKICAgICAgTmFtZSBuYW1lID0gbmV3IE5hbWUocmVjZWl2ZXIubmFtZSwgbGlicmFyeUJ1aWxkZXIubmFtZU9yaWdpbik7CiAgICAgIGlmIChhcmd1bWVudHMgPT0gbnVsbCkgewogICAgICAgIHB1c2gobmV3IEluY29tcGxldGVQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcih0aGlzLCBiZWdpblRva2VuLCBuYW1lKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcHVzaChuZXcgU2VuZEFjY2Vzc0dlbmVyYXRvcih0aGlzLCBiZWdpblRva2VuLCBuYW1lLCBhcmd1bWVudHMpKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChhcmd1bWVudHMgPT0gbnVsbCkgewogICAgICBwdXNoKHJlY2VpdmVyKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2goZmluaXNoU2VuZChyZWNlaXZlciwgYXJndW1lbnRzLCBiZWdpblRva2VuLmNoYXJPZmZzZXQpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGZpbmlzaFNlbmQoT2JqZWN0IHJlY2VpdmVyLCBBcmd1bWVudHMgYXJndW1lbnRzLCBpbnQgY2hhck9mZnNldCkgewogICAgaWYgKHJlY2VpdmVyIGlzIEdlbmVyYXRvcikgewogICAgICByZXR1cm4gcmVjZWl2ZXIuZG9JbnZvY2F0aW9uKGNoYXJPZmZzZXQsIGFyZ3VtZW50cyk7CiAgICB9IGVsc2UgaWYgKHJlY2VpdmVyIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIHJldHVybiBuZXcgUGFyc2VyRXJyb3JHZW5lcmF0b3IodGhpcywgbnVsbCwgZmFzdGEubWVzc2FnZVN5bnRoZXRpY1Rva2VuKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBidWlsZE1ldGhvZEludm9jYXRpb24oCiAgICAgICAgICB0b1ZhbHVlKHJlY2VpdmVyKSwgY2FsbE5hbWUsIGFyZ3VtZW50cywgY2hhck9mZnNldCwKICAgICAgICAgIGlzSW1wbGljaXRDYWxsOiB0cnVlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5DYXNjYWRlKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkNhc2NhZGUiKTsKICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBvcEZvclZhbHVlKCk7CiAgICBpZiAoZXhwcmVzc2lvbiBpcyBDYXNjYWRlSnVkZ21lbnQpIHsKICAgICAgcHVzaChleHByZXNzaW9uKTsKICAgICAgcHVzaChuZXcgVmFyaWFibGVVc2VHZW5lcmF0b3IodGhpcywgdG9rZW4sIGV4cHJlc3Npb24udmFyaWFibGUpKTsKICAgICAgZXhwcmVzc2lvbi5leHRlbmQoKTsKICAgIH0gZWxzZSB7CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBmb3Jlc3QuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbkZvclZhbHVlKAogICAgICAgICAgZXhwcmVzc2lvbi5maWxlT2Zmc2V0LCBleHByZXNzaW9uKTsKICAgICAgcHVzaChuZXcgQ2FzY2FkZUp1ZGdtZW50KHZhcmlhYmxlKS4uZmlsZU9mZnNldCA9IGV4cHJlc3Npb24uZmlsZU9mZnNldCk7CiAgICAgIHB1c2gobmV3IFZhcmlhYmxlVXNlR2VuZXJhdG9yKHRoaXMsIHRva2VuLCB2YXJpYWJsZSkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDYXNjYWRlKCkgewogICAgZGVidWdFdmVudCgiZW5kQ2FzY2FkZSIpOwogICAgRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcG9wRm9yRWZmZWN0KCk7CiAgICBDYXNjYWRlSnVkZ21lbnQgY2FzY2FkZVJlY2VpdmVyID0gcG9wKCk7CiAgICBjYXNjYWRlUmVjZWl2ZXIuZmluYWxpemUoZXhwcmVzc2lvbik7CiAgICBwdXNoKGNhc2NhZGVSZWNlaXZlcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ2FzZUV4cHJlc3Npb24oVG9rZW4gY2FzZUtleXdvcmQpIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luQ2FzZUV4cHJlc3Npb24iKTsKICAgIHN1cGVyLnB1c2goY29uc3RhbnRDb250ZXh0KTsKICAgIGNvbnN0YW50Q29udGV4dCA9IENvbnN0YW50Q29udGV4dC5pbmZlcnJlZDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ2FzZUV4cHJlc3Npb24oVG9rZW4gY29sb24pIHsKICAgIGRlYnVnRXZlbnQoImVuZENhc2VFeHByZXNzaW9uIik7CiAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwb3BGb3JWYWx1ZSgpOwogICAgY29uc3RhbnRDb250ZXh0ID0gcG9wKCk7CiAgICBzdXBlci5wdXNoKGV4cHJlc3Npb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkJpbmFyeUV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGlmIChvcHRpb25hbCgiJiYiLCB0b2tlbikgfHwgb3B0aW9uYWwoInx8IiwgdG9rZW4pKSB7CiAgICAgIEV4cHJlc3Npb24gbGhzID0gcG9wRm9yVmFsdWUoKTsKICAgICAgdHlwZVByb21vdGVyPy5lbnRlckxvZ2ljYWxFeHByZXNzaW9uKGxocywgdG9rZW4uc3RyaW5nVmFsdWUpOwogICAgICBwdXNoKGxocyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEJpbmFyeUV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkJpbmFyeUV4cHJlc3Npb24iKTsKICAgIGlmIChvcHRpb25hbCgiLiIsIHRva2VuKSB8fCBvcHRpb25hbCgiLi4iLCB0b2tlbikpIHsKICAgICAgcmV0dXJuIGRvRG90T3JDYXNjYWRlRXhwcmVzc2lvbih0b2tlbik7CiAgICB9CiAgICBpZiAob3B0aW9uYWwoIiYmIiwgdG9rZW4pIHx8IG9wdGlvbmFsKCJ8fCIsIHRva2VuKSkgewogICAgICByZXR1cm4gZG9Mb2dpY2FsRXhwcmVzc2lvbih0b2tlbik7CiAgICB9CiAgICBpZiAob3B0aW9uYWwoIj8/IiwgdG9rZW4pKSByZXR1cm4gZG9JZk51bGwodG9rZW4pOwogICAgaWYgKG9wdGlvbmFsKCI/LiIsIHRva2VuKSkgcmV0dXJuIGRvSWZOb3ROdWxsKHRva2VuKTsKICAgIEV4cHJlc3Npb24gYXJndW1lbnQgPSBwb3BGb3JWYWx1ZSgpOwogICAgT2JqZWN0IHJlY2VpdmVyID0gcG9wKCk7CiAgICBib29sIGlzU3VwZXIgPSBmYWxzZTsKICAgIGlmIChyZWNlaXZlciBpcyBUaGlzQWNjZXNzR2VuZXJhdG9yICYmIHJlY2VpdmVyLmlzU3VwZXIpIHsKICAgICAgVGhpc0FjY2Vzc0dlbmVyYXRvciB0aGlzQWNjZXNzb3JSZWNlaXZlciA9IHJlY2VpdmVyOwogICAgICBpc1N1cGVyID0gdHJ1ZTsKICAgICAgcmVjZWl2ZXIgPSBmb3Jlc3QuY3JlYXRlVGhpc0V4cHJlc3Npb24odGhpc0FjY2Vzc29yUmVjZWl2ZXIudG9rZW4pOwogICAgfQogICAgcHVzaChidWlsZEJpbmFyeU9wZXJhdG9yKHRvVmFsdWUocmVjZWl2ZXIpLCB0b2tlbiwgYXJndW1lbnQsIGlzU3VwZXIpKTsKICB9CgogIEV4cHJlc3Npb24gYnVpbGRCaW5hcnlPcGVyYXRvcigKICAgICAgRXhwcmVzc2lvbiBhLCBUb2tlbiB0b2tlbiwgRXhwcmVzc2lvbiBiLCBib29sIGlzU3VwZXIpIHsKICAgIGJvb2wgbmVnYXRlID0gZmFsc2U7CiAgICBTdHJpbmcgb3BlcmF0b3IgPSB0b2tlbi5zdHJpbmdWYWx1ZTsKICAgIGlmIChpZGVudGljYWwoIiE9Iiwgb3BlcmF0b3IpKSB7CiAgICAgIG9wZXJhdG9yID0gIj09IjsKICAgICAgbmVnYXRlID0gdHJ1ZTsKICAgIH0KICAgIGlmICghaXNCaW5hcnlPcGVyYXRvcihvcGVyYXRvcikgJiYgIWlzTWludXNPcGVyYXRvcihvcGVyYXRvcikpIHsKICAgICAgaWYgKGlzVXNlckRlZmluYWJsZU9wZXJhdG9yKG9wZXJhdG9yKSkgewogICAgICAgIHJldHVybiBidWlsZFByb2JsZW0oCiAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlTm90QmluYXJ5T3BlcmF0b3Iud2l0aEFyZ3VtZW50cyh0b2tlbiksCiAgICAgICAgICAgIHRva2VuLmNoYXJPZmZzZXQsCiAgICAgICAgICAgIHRva2VuLmxlbmd0aCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGJ1aWxkUHJvYmxlbShmYXN0YS50ZW1wbGF0ZUludmFsaWRPcGVyYXRvci53aXRoQXJndW1lbnRzKHRva2VuKSwKICAgICAgICAgICAgdG9rZW4uY2hhck9mZnNldCwgdG9rZW4ubGVuZ3RoKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgRXhwcmVzc2lvbiByZXN1bHQgPSBidWlsZE1ldGhvZEludm9jYXRpb24oYSwgbmV3IE5hbWUob3BlcmF0b3IpLAogICAgICAgICAgZm9yZXN0LmNyZWF0ZUFyZ3VtZW50cyhub0xvY2F0aW9uLCA8RXhwcmVzc2lvbj5bYl0pLCB0b2tlbi5jaGFyT2Zmc2V0LAogICAgICAgICAgLy8gVGhpcyAqY291bGQqIGJlIGEgY29uc3RhbnQgZXhwcmVzc2lvbiwgd2UgY2FuJ3Qga25vdyB3aXRob3V0CiAgICAgICAgICAvLyBldmFsdWF0aW5nIFthXSBhbmQgW2JdLgogICAgICAgICAgaXNDb25zdGFudEV4cHJlc3Npb246ICFpc1N1cGVyLAogICAgICAgICAgaXNTdXBlcjogaXNTdXBlcik7CiAgICAgIHJldHVybiBuZWdhdGUgPyBmb3Jlc3QuY3JlYXRlTm90KHJlc3VsdCwgbnVsbCwgdHJ1ZSkgOiByZXN1bHQ7CiAgICB9CiAgfQoKICB2b2lkIGRvTG9naWNhbEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIEV4cHJlc3Npb24gYXJndW1lbnQgPSBwb3BGb3JWYWx1ZSgpOwogICAgRXhwcmVzc2lvbiByZWNlaXZlciA9IHBvcCgpOwogICAgRXhwcmVzc2lvbiBsb2dpY2FsRXhwcmVzc2lvbiA9CiAgICAgICAgZm9yZXN0LmNyZWF0ZUxvZ2ljYWxFeHByZXNzaW9uKHJlY2VpdmVyLCB0b2tlbiwgYXJndW1lbnQpOwogICAgdHlwZVByb21vdGVyPy5leGl0TG9naWNhbEV4cHJlc3Npb24oYXJndW1lbnQsIGxvZ2ljYWxFeHByZXNzaW9uKTsKICAgIHB1c2gobG9naWNhbEV4cHJlc3Npb24pOwogIH0KCiAgLy8vIEhhbmRsZSBgYSA/PyBiYC4KICB2b2lkIGRvSWZOdWxsKFRva2VuIHRva2VuKSB7CiAgICBFeHByZXNzaW9uIGIgPSBwb3BGb3JWYWx1ZSgpOwogICAgRXhwcmVzc2lvbiBhID0gcG9wRm9yVmFsdWUoKTsKICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZShhKTsKICAgIHB1c2gobmV3IElmTnVsbEp1ZGdtZW50KAogICAgICAgIHZhcmlhYmxlLAogICAgICAgIGZvcmVzdC5jcmVhdGVDb25kaXRpb25hbEV4cHJlc3Npb24oCiAgICAgICAgICAgIGJ1aWxkSXNOdWxsKG5ldyBWYXJpYWJsZUdldCh2YXJpYWJsZSksIG9mZnNldEZvclRva2VuKHRva2VuKSwgdGhpcyksCiAgICAgICAgICAgIHRva2VuLAogICAgICAgICAgICBiLAogICAgICAgICAgICBudWxsLAogICAgICAgICAgICBuZXcgVmFyaWFibGVHZXQodmFyaWFibGUpKSkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pKTsKICB9CgogIC8vLyBIYW5kbGUgYGE/LmIoLi4uKWAuCiAgdm9pZCBkb0lmTm90TnVsbChUb2tlbiB0b2tlbikgewogICAgT2JqZWN0IHNlbmQgPSBwb3AoKTsKICAgIGlmIChzZW5kIGlzIEluY29tcGxldGVTZW5kR2VuZXJhdG9yKSB7CiAgICAgIHB1c2goc2VuZC53aXRoUmVjZWl2ZXIocG9wKCksIHRva2VuLmNoYXJPZmZzZXQsIGlzTnVsbEF3YXJlOiB0cnVlKSk7CiAgICB9IGVsc2UgewogICAgICBwb3AoKTsKICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICBwdXNoKGJ1aWxkUHJvYmxlbShmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllci53aXRoQXJndW1lbnRzKHRva2VuKSwKICAgICAgICAgIG9mZnNldEZvclRva2VuKHRva2VuKSwgbGVuZ3RoRm9yVG9rZW4odG9rZW4pKSk7CiAgICB9CiAgfQoKICB2b2lkIGRvRG90T3JDYXNjYWRlRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgT2JqZWN0IHNlbmQgPSBwb3AoKTsKICAgIGlmIChzZW5kIGlzIEluY29tcGxldGVTZW5kR2VuZXJhdG9yKSB7CiAgICAgIE9iamVjdCByZWNlaXZlciA9IG9wdGlvbmFsKCIuIiwgdG9rZW4pID8gcG9wKCkgOiBwb3BGb3JWYWx1ZSgpOwogICAgICBwdXNoKHNlbmQud2l0aFJlY2VpdmVyKHJlY2VpdmVyLCB0b2tlbi5jaGFyT2Zmc2V0KSk7CiAgICB9IGVsc2UgewogICAgICBwb3AoKTsKICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICBwdXNoKGJ1aWxkUHJvYmxlbShmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllci53aXRoQXJndW1lbnRzKHRva2VuKSwKICAgICAgICAgIG9mZnNldEZvclRva2VuKHRva2VuKSwgbGVuZ3RoRm9yVG9rZW4odG9rZW4pKSk7CiAgICB9CiAgfQoKICBib29sIGFyZUFyZ3VtZW50c0NvbXBhdGlibGUoRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uLCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICAvLyBUT0RPKGFoZSk6IEltcGxlbWVudCB0aGlzLgogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIHRocm93Tm9TdWNoTWV0aG9kRXJyb3IoCiAgICAgIEV4cHJlc3Npb24gcmVjZWl2ZXIsIFN0cmluZyBuYW1lLCBBcmd1bWVudHMgYXJndW1lbnRzLCBpbnQgY2hhck9mZnNldCwKICAgICAge01lbWJlciBjYW5kaWRhdGUsCiAgICAgIGJvb2wgaXNTdXBlcjogZmFsc2UsCiAgICAgIGJvb2wgaXNHZXR0ZXI6IGZhbHNlLAogICAgICBib29sIGlzU2V0dGVyOiBmYWxzZSwKICAgICAgYm9vbCBpc1N0YXRpYzogZmFsc2UsCiAgICAgIExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2V9KSB7CiAgICBpbnQgbGVuZ3RoID0gbmFtZS5sZW5ndGg7CiAgICBpbnQgcGVyaW9kSW5kZXggPSBuYW1lLmxhc3RJbmRleE9mKCIuIik7CiAgICBpZiAocGVyaW9kSW5kZXggIT0gLTEpIHsKICAgICAgbGVuZ3RoIC09IHBlcmlvZEluZGV4ICsgMTsKICAgIH0KICAgIE5hbWUga2VybmVsTmFtZSA9IG5ldyBOYW1lKG5hbWUsIGxpYnJhcnlCdWlsZGVyLm5hbWVPcmlnaW4pOwogICAgTGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dDsKICAgIGlmIChjYW5kaWRhdGUgIT0gbnVsbCAmJiBjYW5kaWRhdGUubG9jYXRpb24gIT0gbnVsbCkgewogICAgICBVcmkgdXJpID0gY2FuZGlkYXRlLmxvY2F0aW9uLmZpbGU7CiAgICAgIGludCBvZmZzZXQgPSBjYW5kaWRhdGUuZmlsZU9mZnNldDsKICAgICAgTWVzc2FnZSBjb250ZXh0TWVzc2FnZTsKICAgICAgaW50IGxlbmd0aCA9IG5vTGVuZ3RoOwogICAgICBpZiAoY2FuZGlkYXRlIGlzIENvbnN0cnVjdG9yICYmIGNhbmRpZGF0ZS5pc1N5bnRoZXRpYykgewogICAgICAgIG9mZnNldCA9IGNhbmRpZGF0ZS5lbmNsb3NpbmdDbGFzcy5maWxlT2Zmc2V0OwogICAgICAgIGNvbnRleHRNZXNzYWdlID0gZmFzdGEudGVtcGxhdGVDYW5kaWRhdGVGb3VuZElzRGVmYXVsdENvbnN0cnVjdG9yCiAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGNhbmRpZGF0ZS5lbmNsb3NpbmdDbGFzcy5uYW1lKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBsZW5ndGggPSBuYW1lLmxlbmd0aDsKICAgICAgICBjb250ZXh0TWVzc2FnZSA9IGZhc3RhLm1lc3NhZ2VDYW5kaWRhdGVGb3VuZDsKICAgICAgfQogICAgICBjb250ZXh0ID0gW2NvbnRleHRNZXNzYWdlLndpdGhMb2NhdGlvbih1cmksIG9mZnNldCwgbGVuZ3RoKV07CiAgICB9CiAgICBpZiAobWVzc2FnZSA9PSBudWxsKSB7CiAgICAgIGlmIChpc0dldHRlcikgewogICAgICAgIG1lc3NhZ2UgPSB3YXJuVW5yZXNvbHZlZEdldChrZXJuZWxOYW1lLCBjaGFyT2Zmc2V0LAogICAgICAgICAgICAgICAgaXNTdXBlcjogaXNTdXBlciwgcmVwb3J0V2FybmluZzogZmFsc2UsIGNvbnRleHQ6IGNvbnRleHQpCiAgICAgICAgICAgIC53aXRoTG9jYXRpb24odXJpLCBjaGFyT2Zmc2V0LCBsZW5ndGgpOwogICAgICB9IGVsc2UgaWYgKGlzU2V0dGVyKSB7CiAgICAgICAgbWVzc2FnZSA9IHdhcm5VbnJlc29sdmVkU2V0KGtlcm5lbE5hbWUsIGNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICBpc1N1cGVyOiBpc1N1cGVyLCByZXBvcnRXYXJuaW5nOiBmYWxzZSwgY29udGV4dDogY29udGV4dCkKICAgICAgICAgICAgLndpdGhMb2NhdGlvbih1cmksIGNoYXJPZmZzZXQsIGxlbmd0aCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWVzc2FnZSA9IHdhcm5VbnJlc29sdmVkTWV0aG9kKGtlcm5lbE5hbWUsIGNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICBpc1N1cGVyOiBpc1N1cGVyLCByZXBvcnRXYXJuaW5nOiBmYWxzZSwgY29udGV4dDogY29udGV4dCkKICAgICAgICAgICAgLndpdGhMb2NhdGlvbih1cmksIGNoYXJPZmZzZXQsIGxlbmd0aCk7CiAgICAgIH0KICAgIH0KICAgIGlmIChsZWdhY3lNb2RlICYmIGNvbnN0YW50Q29udGV4dCA9PSBDb25zdGFudENvbnRleHQubm9uZSkgewogICAgICBhZGRQcm9ibGVtKG1lc3NhZ2UubWVzc2FnZU9iamVjdCwgbWVzc2FnZS5jaGFyT2Zmc2V0LCBtZXNzYWdlLmxlbmd0aCwKICAgICAgICAgIHdhc0hhbmRsZWQ6IHRydWUsIGNvbnRleHQ6IGNvbnRleHQpOwogICAgICByZXR1cm4gZm9yZXN0LmNyZWF0ZVRocm93KAogICAgICAgICAgbnVsbCwKICAgICAgICAgIGxpYnJhcnlCdWlsZGVyLmxvYWRlci5pbnN0YW50aWF0ZU5vU3VjaE1ldGhvZEVycm9yKAogICAgICAgICAgICAgIHJlY2VpdmVyLCBuYW1lLCBhcmd1bWVudHMsIGNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgaXNNZXRob2Q6ICFpc0dldHRlciAmJiAhaXNTZXR0ZXIsCiAgICAgICAgICAgICAgaXNHZXR0ZXI6IGlzR2V0dGVyLAogICAgICAgICAgICAgIGlzU2V0dGVyOiBpc1NldHRlciwKICAgICAgICAgICAgICBpc1N0YXRpYzogaXNTdGF0aWMsCiAgICAgICAgICAgICAgaXNUb3BMZXZlbDogIWlzU3RhdGljICYmICFpc1N1cGVyKSkKICAgICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogICAgfQogICAgcmV0dXJuIGRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGJ1aWxkUHJvYmxlbSgKICAgICAgICBtZXNzYWdlLm1lc3NhZ2VPYmplY3QsIG1lc3NhZ2UuY2hhck9mZnNldCwgbWVzc2FnZS5sZW5ndGgsCiAgICAgICAgY29udGV4dDogY29udGV4dCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVzc2FnZSB3YXJuVW5yZXNvbHZlZEdldChOYW1lIG5hbWUsIGludCBjaGFyT2Zmc2V0LAogICAgICB7Ym9vbCBpc1N1cGVyOiBmYWxzZSwKICAgICAgYm9vbCByZXBvcnRXYXJuaW5nOiB0cnVlLAogICAgICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0fSkgewogICAgTWVzc2FnZSBtZXNzYWdlID0gaXNTdXBlcgogICAgICAgID8gZmFzdGEudGVtcGxhdGVTdXBlcmNsYXNzSGFzTm9HZXR0ZXIud2l0aEFyZ3VtZW50cyhuYW1lLm5hbWUpCiAgICAgICAgOiBmYXN0YS50ZW1wbGF0ZUdldHRlck5vdEZvdW5kLndpdGhBcmd1bWVudHMobmFtZS5uYW1lKTsKICAgIGlmIChyZXBvcnRXYXJuaW5nKSB7CiAgICAgIGFkZFByb2JsZW1FcnJvcklmQ29uc3QobWVzc2FnZSwgY2hhck9mZnNldCwgbmFtZS5uYW1lLmxlbmd0aCwKICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQpOwogICAgfQogICAgcmV0dXJuIG1lc3NhZ2U7CiAgfQoKICBAb3ZlcnJpZGUKICBNZXNzYWdlIHdhcm5VbnJlc29sdmVkU2V0KE5hbWUgbmFtZSwgaW50IGNoYXJPZmZzZXQsCiAgICAgIHtib29sIGlzU3VwZXI6IGZhbHNlLAogICAgICBib29sIHJlcG9ydFdhcm5pbmc6IHRydWUsCiAgICAgIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHR9KSB7CiAgICBNZXNzYWdlIG1lc3NhZ2UgPSBpc1N1cGVyCiAgICAgICAgPyBmYXN0YS50ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb1NldHRlci53aXRoQXJndW1lbnRzKG5hbWUubmFtZSkKICAgICAgICA6IGZhc3RhLnRlbXBsYXRlU2V0dGVyTm90Rm91bmQud2l0aEFyZ3VtZW50cyhuYW1lLm5hbWUpOwogICAgaWYgKHJlcG9ydFdhcm5pbmcpIHsKICAgICAgYWRkUHJvYmxlbUVycm9ySWZDb25zdChtZXNzYWdlLCBjaGFyT2Zmc2V0LCBuYW1lLm5hbWUubGVuZ3RoLAogICAgICAgICAgY29udGV4dDogY29udGV4dCk7CiAgICB9CiAgICByZXR1cm4gbWVzc2FnZTsKICB9CgogIEBvdmVycmlkZQogIE1lc3NhZ2Ugd2FyblVucmVzb2x2ZWRNZXRob2QoTmFtZSBuYW1lLCBpbnQgY2hhck9mZnNldCwKICAgICAge2Jvb2wgaXNTdXBlcjogZmFsc2UsCiAgICAgIGJvb2wgcmVwb3J0V2FybmluZzogdHJ1ZSwKICAgICAgTGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dH0pIHsKICAgIFN0cmluZyBwbGFpbk5hbWUgPSBuYW1lLm5hbWU7CiAgICBpbnQgZG90SW5kZXggPSBwbGFpbk5hbWUubGFzdEluZGV4T2YoIi4iKTsKICAgIGlmIChkb3RJbmRleCAhPSAtMSkgewogICAgICBwbGFpbk5hbWUgPSBwbGFpbk5hbWUuc3Vic3RyaW5nKGRvdEluZGV4ICsgMSk7CiAgICB9CiAgICAvLyBUT0RPKGFoZSk6IFRoaXMgaXMgcmF0aGVyIGJyaXR0bGUuIFdlIHdvdWxkIHByb2JhYmx5IGJlIGJldHRlciBvZmYgd2l0aAogICAgLy8gbW9yZSBwcmVjaXNlIGxvY2F0aW9uIGluZm9ybWF0aW9uIGluIHRoaXMgY2FzZS4KICAgIGludCBsZW5ndGggPSBwbGFpbk5hbWUubGVuZ3RoOwogICAgaWYgKHBsYWluTmFtZS5zdGFydHNXaXRoKCJbIikpIHsKICAgICAgbGVuZ3RoID0gMTsKICAgIH0KICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGlzU3VwZXIKICAgICAgICA/IGZhc3RhLnRlbXBsYXRlU3VwZXJjbGFzc0hhc05vTWV0aG9kLndpdGhBcmd1bWVudHMobmFtZS5uYW1lKQogICAgICAgIDogZmFzdGEudGVtcGxhdGVNZXRob2ROb3RGb3VuZC53aXRoQXJndW1lbnRzKG5hbWUubmFtZSk7CiAgICBpZiAocmVwb3J0V2FybmluZykgewogICAgICBhZGRQcm9ibGVtRXJyb3JJZkNvbnN0KG1lc3NhZ2UsIGNoYXJPZmZzZXQsIGxlbmd0aCwgY29udGV4dDogY29udGV4dCk7CiAgICB9CiAgICByZXR1cm4gbWVzc2FnZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd2FyblR5cGVBcmd1bWVudHNNaXNtYXRjaChTdHJpbmcgbmFtZSwgaW50IGV4cGVjdGVkLCBpbnQgY2hhck9mZnNldCkgewogICAgYWRkUHJvYmxlbUVycm9ySWZDb25zdCgKICAgICAgICBmYXN0YS50ZW1wbGF0ZVR5cGVBcmd1bWVudE1pc21hdGNoLndpdGhBcmd1bWVudHMoZXhwZWN0ZWQpLAogICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgbmFtZS5sZW5ndGgpOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyIGxvb2t1cEluc3RhbmNlTWVtYmVyKE5hbWUgbmFtZSwKICAgICAge2Jvb2wgaXNTZXR0ZXI6IGZhbHNlLCBib29sIGlzU3VwZXI6IGZhbHNlfSkgewogICAgcmV0dXJuIGNsYXNzQnVpbGRlci5sb29rdXBJbnN0YW5jZU1lbWJlcihoaWVyYXJjaHksIG5hbWUsCiAgICAgICAgaXNTZXR0ZXI6IGlzU2V0dGVyLCBpc1N1cGVyOiBpc1N1cGVyKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0cnVjdG9yIGxvb2t1cENvbnN0cnVjdG9yKE5hbWUgbmFtZSwge2Jvb2wgaXNTdXBlcn0pIHsKICAgIHJldHVybiBjbGFzc0J1aWxkZXIubG9va3VwQ29uc3RydWN0b3IobmFtZSwgaXNTdXBlcjogaXNTdXBlcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIElkZW50aWZpZXJDb250ZXh0IGNvbnRleHQpIHsKICAgIGRlYnVnRXZlbnQoImhhbmRsZUlkZW50aWZpZXIiKTsKICAgIFN0cmluZyBuYW1lID0gdG9rZW4ubGV4ZW1lOwogICAgaWYgKG5hbWUuc3RhcnRzV2l0aCgiZGVwcmVjYXRlZCIpICYmCiAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBwcmV2aW91cyBjaGVjayBpcyByZWR1bmRhbnQsIGJ1dCBmYXN0ZXIgaW4gdGhlIGNvbW1vbgogICAgICAgIC8vIGNhc2UgKHdoZW4gW25hbWVdIGlzbid0IGRlcHJlY2F0ZWQpLgogICAgICAgIChuYW1lID09ICJkZXByZWNhdGVkIiB8fCBuYW1lLnN0YXJ0c1dpdGgoImRlcHJlY2F0ZWRfIikpKSB7CiAgICAgIGFkZFByb2JsZW0oZmFzdGEudGVtcGxhdGVVc2VPZkRlcHJlY2F0ZWRJZGVudGlmaWVyLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICBvZmZzZXRGb3JUb2tlbih0b2tlbiksIGxlbmd0aEZvclRva2VuKHRva2VuKSk7CiAgICB9CiAgICBpZiAoY29udGV4dC5pc1Njb3BlUmVmZXJlbmNlKSB7CiAgICAgIGFzc2VydCghaW5Jbml0aWFsaXplciB8fAogICAgICAgICAgdGhpcy5zY29wZSA9PSBlbmNsb3NpbmdTY29wZSB8fAogICAgICAgICAgdGhpcy5zY29wZS5wYXJlbnQgPT0gZW5jbG9zaW5nU2NvcGUpOwogICAgICAvLyBUaGlzIGRlYWxzIHdpdGggdGhpcyBraW5kIG9mIGluaXRpYWxpemVyOiBgQyhhKSA6IGEgPSBhO2AKICAgICAgU2NvcGUgc2NvcGUgPSBpbkluaXRpYWxpemVyID8gZW5jbG9zaW5nU2NvcGUgOiB0aGlzLnNjb3BlOwogICAgICBwdXNoKHNjb3BlTG9va3VwKHNjb3BlLCBuYW1lLCB0b2tlbikpOwogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYgKGNvbnRleHQuaW5EZWNsYXJhdGlvbikgewogICAgICBpZiAoY29udGV4dCA9PSBJZGVudGlmaWVyQ29udGV4dC50b3BMZXZlbFZhcmlhYmxlRGVjbGFyYXRpb24gfHwKICAgICAgICAgIGNvbnRleHQgPT0gSWRlbnRpZmllckNvbnRleHQuZmllbGREZWNsYXJhdGlvbikgewogICAgICAgIGNvbnN0YW50Q29udGV4dCA9IG1lbWJlci5pc0NvbnN0CiAgICAgICAgICAgID8gQ29uc3RhbnRDb250ZXh0LmluZmVycmVkCiAgICAgICAgICAgIDogIW1lbWJlci5pc1N0YXRpYyAmJgogICAgICAgICAgICAgICAgICAgIGNsYXNzQnVpbGRlciAhPSBudWxsICYmCiAgICAgICAgICAgICAgICAgICAgY2xhc3NCdWlsZGVyLmhhc0NvbnN0Q29uc3RydWN0b3IKICAgICAgICAgICAgICAgID8gQ29uc3RhbnRDb250ZXh0LnJlcXVpcmVkCiAgICAgICAgICAgICAgICA6IENvbnN0YW50Q29udGV4dC5ub25lOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGNvbnN0YW50Q29udGV4dCAhPSBDb25zdGFudENvbnRleHQubm9uZSAmJgogICAgICAgICFjb250ZXh0LmFsbG93ZWRJbkNvbnN0YW50RXhwcmVzc2lvbikgewogICAgICBhZGRQcm9ibGVtKAogICAgICAgICAgZmFzdGEubWVzc2FnZU5vdEFDb25zdGFudEV4cHJlc3Npb24sIHRva2VuLmNoYXJPZmZzZXQsIHRva2VuLmxlbmd0aCk7CiAgICB9CiAgICBpZiAodG9rZW4uaXNTeW50aGV0aWMpIHsKICAgICAgcHVzaChuZXcgUGFyc2VyUmVjb3Zlcnkob2Zmc2V0Rm9yVG9rZW4odG9rZW4pKSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKG5ldyBJZGVudGlmaWVyLnByZXNlcnZlVG9rZW4odG9rZW4pKTsKICAgIH0KICB9CgogIC8vLyBIZWxwZXIgbWV0aG9kIHRvIGNyZWF0ZSBhIFtWYXJpYWJsZUdldF0gb2YgdGhlIFt2YXJpYWJsZV0gdXNpbmcKICAvLy8gW2NoYXJPZmZzZXRdIGFzIHRoZSBmaWxlIG9mZnNldC4KICBAb3ZlcnJpZGUKICBWYXJpYWJsZUdldCBjcmVhdGVWYXJpYWJsZUdldChWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBpbnQgY2hhck9mZnNldCkgewogICAgT2JqZWN0IGZhY3QgPQogICAgICAgIHR5cGVQcm9tb3Rlcj8uZ2V0RmFjdEZvckFjY2Vzcyh2YXJpYWJsZSwgZnVuY3Rpb25OZXN0aW5nTGV2ZWwpOwogICAgT2JqZWN0IHNjb3BlID0gdHlwZVByb21vdGVyPy5jdXJyZW50U2NvcGU7CiAgICByZXR1cm4gbmV3IFZhcmlhYmxlR2V0SnVkZ21lbnQodmFyaWFibGUsIGZhY3QsIHNjb3BlKQogICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogIH0KCiAgLy8vIEhlbHBlciBtZXRob2QgdG8gY3JlYXRlIGEgW1JlYWRPbmx5QWNjZXNzR2VuZXJhdG9yXSBvbiB0aGUgW3ZhcmlhYmxlXQogIC8vLyB1c2luZyBbdG9rZW5dIGFuZCBbY2hhck9mZnNldF0gZm9yIG9mZnNldCBpbmZvcm1hdGlvbiBhbmQgW25hbWVdCiAgLy8vIGZvciBgRXhwcmVzc2lvbkdlbmVyYXRvci5fcGxhaW5OYW1lRm9yUmVhZGAuCiAgUmVhZE9ubHlBY2Nlc3NHZW5lcmF0b3IgX2NyZWF0ZVJlYWRPbmx5VmFyaWFibGVBY2Nlc3MoCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIFRva2VuIHRva2VuLCBpbnQgY2hhck9mZnNldCwgU3RyaW5nIG5hbWUpIHsKICAgIHJldHVybiBuZXcgUmVhZE9ubHlBY2Nlc3NHZW5lcmF0b3IoCiAgICAgICAgdGhpcywgdG9rZW4sIGNyZWF0ZVZhcmlhYmxlR2V0KHZhcmlhYmxlLCBjaGFyT2Zmc2V0KSwgbmFtZSk7CiAgfQoKICAvLy8gTG9vayB1cCBbbmFtZV0gaW4gW3Njb3BlXSB1c2luZyBbdG9rZW5dIGFzIGxvY2F0aW9uIGluZm9ybWF0aW9uIChib3RoIHRvCiAgLy8vIHJlcG9ydCBwcm9ibGVtcyBhbmQgYXMgdGhlIGZpbGUgb2Zmc2V0IGluIHRoZSBnZW5lcmF0ZWQga2VybmVsIGNvZGUpLgogIC8vLyBbaXNRdWFsaWZpZWRdIHNob3VsZCBiZSB0cnVlIGlmIFtuYW1lXSBpcyBhIHF1YWxpZmllZCBhY2Nlc3MgKHdoaWNoCiAgLy8vIGltcGxpZXMgdGhhdCBpdCBzaG91bGRuJ3QgYmUgdHVybmVkIGludG8gYSBbVGhpc1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yXQogIC8vLyBpZiB0aGUgbmFtZSBkb2Vzbid0IHJlc29sdmUgaW4gdGhlIHNjb3BlKS4KICBAb3ZlcnJpZGUKICBzY29wZUxvb2t1cChTY29wZSBzY29wZSwgU3RyaW5nIG5hbWUsIFRva2VuIHRva2VuLAogICAgICB7Ym9vbCBpc1F1YWxpZmllZDogZmFsc2UsIFByZWZpeEJ1aWxkZXIgcHJlZml4fSkgewogICAgaW50IGNoYXJPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgICBpZiAodG9rZW4uaXNTeW50aGV0aWMpIHsKICAgICAgcmV0dXJuIG5ldyBQYXJzZXJFcnJvckdlbmVyYXRvcih0aGlzLCB0b2tlbiwgZmFzdGEubWVzc2FnZVN5bnRoZXRpY1Rva2VuKTsKICAgIH0KICAgIEJ1aWxkZXIgZGVjbGFyYXRpb24gPSBzY29wZS5sb29rdXAobmFtZSwgY2hhck9mZnNldCwgdXJpKTsKICAgIGlmIChkZWNsYXJhdGlvbiBpcyBVbmxpbmtlZERlY2xhcmF0aW9uKSB7CiAgICAgIHJldHVybiBuZXcgVW5saW5rZWRHZW5lcmF0b3IodGhpcywgdG9rZW4sIGRlY2xhcmF0aW9uKTsKICAgIH0KICAgIGlmIChkZWNsYXJhdGlvbiA9PSBudWxsICYmCiAgICAgICAgcHJlZml4ID09IG51bGwgJiYKICAgICAgICAoY2xhc3NCdWlsZGVyPy5pc1BhdGNoID8/IGZhbHNlKSkgewogICAgICAvLyBUaGUgc2NvcGUgb2YgYSBwYXRjaGVkIG1ldGhvZCBpbmNsdWRlcyB0aGUgb3JpZ2luIGNsYXNzLgogICAgICBkZWNsYXJhdGlvbiA9IGNsYXNzQnVpbGRlci5vcmlnaW4KICAgICAgICAgIC5maW5kU3RhdGljQnVpbGRlcihuYW1lLCBjaGFyT2Zmc2V0LCB1cmksIGxpYnJhcnlCdWlsZGVyKTsKICAgIH0KICAgIGlmIChkZWNsYXJhdGlvbiAhPSBudWxsICYmCiAgICAgICAgZGVjbGFyYXRpb24uaXNEZWNsYXJhdGlvbkluc3RhbmNlTWVtYmVyICYmCiAgICAgICAgaW5GaWVsZEluaXRpYWxpemVyICYmCiAgICAgICAgIWluSW5pdGlhbGl6ZXIpIHsKICAgICAgLy8gV2UgY2Fubm90IGFjY2VzcyBhIGNsYXNzIGluc3RhbmNlIG1lbWJlciBpbiBhbiBpbml0aWFsaXplciBvZiBhCiAgICAgIC8vIGZpZWxkLgogICAgICAvLwogICAgICAvLyBGb3IgaW5zdGFuY2UKICAgICAgLy8KICAgICAgLy8gICAgIGNsYXNzIE0gewogICAgICAvLyAgICAgICBpbnQgZm9vID0gYmFyOwogICAgICAvLyAgICAgICBpbnQgYmFyOwogICAgICAvLyAgICAgfQogICAgICAvLwogICAgICByZXR1cm4gbmV3IEluY29tcGxldGVFcnJvckdlbmVyYXRvcih0aGlzLCB0b2tlbiwKICAgICAgICAgIGZhc3RhLnRlbXBsYXRlVGhpc0FjY2Vzc0luRmllbGRJbml0aWFsaXplci53aXRoQXJndW1lbnRzKG5hbWUpKTsKICAgIH0KICAgIGlmIChkZWNsYXJhdGlvbiA9PSBudWxsIHx8CiAgICAgICAgKCFpc0RlY2xhcmF0aW9uSW5zdGFuY2VDb250ZXh0ICYmCiAgICAgICAgICAgIGRlY2xhcmF0aW9uLmlzRGVjbGFyYXRpb25JbnN0YW5jZU1lbWJlcikpIHsKICAgICAgLy8gV2UgZWl0aGVyIGRpZG4ndCBmaW5kIGEgZGVjbGFyYXRpb24gb3IgZm91bmQgYW4gaW5zdGFuY2UgbWVtYmVyIGZyb20KICAgICAgLy8gYSBub24taW5zdGFuY2UgY29udGV4dC4KICAgICAgTmFtZSBuID0gbmV3IE5hbWUobmFtZSwgbGlicmFyeUJ1aWxkZXIubmFtZU9yaWdpbik7CiAgICAgIGlmICghaXNRdWFsaWZpZWQgJiYgaXNEZWNsYXJhdGlvbkluc3RhbmNlQ29udGV4dCkgewogICAgICAgIGFzc2VydChkZWNsYXJhdGlvbiA9PSBudWxsKTsKICAgICAgICBpZiAoY29uc3RhbnRDb250ZXh0ICE9IENvbnN0YW50Q29udGV4dC5ub25lIHx8IG1lbWJlci5pc0ZpZWxkKSB7CiAgICAgICAgICByZXR1cm4gbmV3IFVucmVzb2x2ZWROYW1lR2VuZXJhdG9yKHRoaXMsIHRva2VuLCBuKTsKICAgICAgICB9CiAgICAgICAgaWYgKGV4dGVuc2lvblRoaXMgIT0gbnVsbCkgewogICAgICAgICAgLy8gSWYgd2UgYXJlIGluIGFuIGV4dGVuc2lvbiBpbnN0YW5jZSBtZW1iZXIgd2UgaW50ZXJwcmV0IHRoaXMgYXMgYW4KICAgICAgICAgIC8vIGltcGxpY2l0IGFjY2VzcyBvbiB0aGUgJ3RoaXMnIHBhcmFtZXRlci4KICAgICAgICAgIHJldHVybiBQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvci5tYWtlKAogICAgICAgICAgICAgIHRoaXMsCiAgICAgICAgICAgICAgdG9rZW4sCiAgICAgICAgICAgICAgY3JlYXRlVmFyaWFibGVHZXQoZXh0ZW5zaW9uVGhpcywgY2hhck9mZnNldCksCiAgICAgICAgICAgICAgbiwKICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgICAgZmFsc2UpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBUaGlzIGlzIGFuIGltcGxpY2l0IGFjY2VzcyBvbiAndGhpcycuCiAgICAgICAgICByZXR1cm4gbmV3IFRoaXNQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcih0aGlzLCB0b2tlbiwgbiwKICAgICAgICAgICAgICBsb29rdXBJbnN0YW5jZU1lbWJlcihuKSwgbG9va3VwSW5zdGFuY2VNZW1iZXIobiwgaXNTZXR0ZXI6IHRydWUpKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoaWdub3JlTWFpbkluR2V0TWFpbkNsb3N1cmUgJiYKICAgICAgICAgIG5hbWUgPT0gIm1haW4iICYmCiAgICAgICAgICBtZW1iZXI/Lm5hbWUgPT0gIl9nZXRNYWluQ2xvc3VyZSIpIHsKICAgICAgICByZXR1cm4gZm9yZXN0LmNyZWF0ZU51bGxMaXRlcmFsKG51bGwpLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldDsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IFVucmVzb2x2ZWROYW1lR2VuZXJhdG9yKHRoaXMsIHRva2VuLCBuKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbi5pc1R5cGVEZWNsYXJhdGlvbikgewogICAgICByZXR1cm4gbmV3IFR5cGVVc2VHZW5lcmF0b3IodGhpcywgdG9rZW4sIGRlY2xhcmF0aW9uLCBuYW1lKTsKICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24uaXNMb2NhbCkgewogICAgICBpZiAoY29uc3RhbnRDb250ZXh0ICE9IENvbnN0YW50Q29udGV4dC5ub25lICYmCiAgICAgICAgICAhZGVjbGFyYXRpb24uaXNDb25zdCAmJgogICAgICAgICAgIW1lbWJlci5pc0NvbnN0cnVjdG9yKSB7CiAgICAgICAgcmV0dXJuIG5ldyBJbmNvbXBsZXRlRXJyb3JHZW5lcmF0b3IoCiAgICAgICAgICAgIHRoaXMsIHRva2VuLCBmYXN0YS5tZXNzYWdlTm90QUNvbnN0YW50RXhwcmVzc2lvbik7CiAgICAgIH0KICAgICAgLy8gQW4gaW5pdGlhbGl6aW5nIGZvcm1hbCBwYXJhbWV0ZXIgbWlnaHQgYmUgZmluYWwgd2l0aG91dCBpdHMKICAgICAgLy8gVmFyaWFibGVEZWNsYXJhdGlvbiBiZWluZyBmaW5hbC4gU2VlCiAgICAgIC8vIFtQcm9jZWR1cmVCdWlsZGVyLmNvbXB1dGVGb3JtYWxQYXJhbWV0ZXJJbml0aWFsaXplclNjb3BlXS4gSWYgdGhhdAogICAgICAvLyB3YXNuJ3QgdGhlIGNhc2UsIHdlIGNvdWxkIGFsd2F5cyB1c2UgW1ZhcmlhYmxlVXNlR2VuZXJhdG9yXS4KICAgICAgaWYgKGRlY2xhcmF0aW9uLmlzRmluYWwpIHsKICAgICAgICByZXR1cm4gX2NyZWF0ZVJlYWRPbmx5VmFyaWFibGVBY2Nlc3MoCiAgICAgICAgICAgIGRlY2xhcmF0aW9uLnRhcmdldCwgdG9rZW4sIGNoYXJPZmZzZXQsIG5hbWUpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBuZXcgVmFyaWFibGVVc2VHZW5lcmF0b3IodGhpcywgdG9rZW4sIGRlY2xhcmF0aW9uLnRhcmdldCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24uaXNDbGFzc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgIGlmIChjb25zdGFudENvbnRleHQgIT0gQ29uc3RhbnRDb250ZXh0Lm5vbmUgJiYKICAgICAgICAgICFpbkluaXRpYWxpemVyICYmCiAgICAgICAgICAvLyBUT0RPKGFoZSk6IFRoaXMgaXMgYSBoYWNrIGJlY2F1c2UgRmFzdGEgc2V0cyB1cCB0aGUgc2NvcGUKICAgICAgICAgIC8vICJ0aGlzLmZpZWxkIiBwYXJhbWV0ZXJzIGFjY29yZGluZyB0byBvbGQgc2VtYW50aWNzLiBVbmRlciB0aGUgbmV3CiAgICAgICAgICAvLyBzZW1hbnRpY3MsIHN1Y2ggcGFyYW1ldGVycyBpbnRyb2R1Y2VzIGEgbmV3IHBhcmFtZXRlciB3aXRoIHRoYXQKICAgICAgICAgIC8vIG5hbWUgdGhhdCBzaG91bGQgYmUgcmVzb2x2ZWQgaGVyZS4KICAgICAgICAgICFtZW1iZXIuaXNDb25zdHJ1Y3RvcikgewogICAgICAgIGFkZFByb2JsZW0oCiAgICAgICAgICAgIGZhc3RhLm1lc3NhZ2VOb3RBQ29uc3RhbnRFeHByZXNzaW9uLCBjaGFyT2Zmc2V0LCB0b2tlbi5sZW5ndGgpOwogICAgICB9CiAgICAgIE5hbWUgbiA9IG5ldyBOYW1lKG5hbWUsIGxpYnJhcnlCdWlsZGVyLm5hbWVPcmlnaW4pOwogICAgICBNZW1iZXIgZ2V0dGVyOwogICAgICBNZW1iZXIgc2V0dGVyOwogICAgICBpZiAoZGVjbGFyYXRpb24gaXMgQWNjZXNzRXJyb3JCdWlsZGVyKSB7CiAgICAgICAgc2V0dGVyID0gZGVjbGFyYXRpb24ucGFyZW50LnRhcmdldDsKICAgICAgICBnZXR0ZXIgPSBsb29rdXBJbnN0YW5jZU1lbWJlcihuKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBnZXR0ZXIgPSBkZWNsYXJhdGlvbi50YXJnZXQ7CiAgICAgICAgc2V0dGVyID0gbG9va3VwSW5zdGFuY2VNZW1iZXIobiwgaXNTZXR0ZXI6IHRydWUpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgVGhpc1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yKHRoaXMsIHRva2VuLCBuLCBnZXR0ZXIsIHNldHRlcik7CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uLmlzRXh0ZW5zaW9uSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgQnVpbGRlciBzZXR0ZXIgPQogICAgICAgICAgX2dldENvcnJlc3BvbmRpbmdTZXR0ZXJCdWlsZGVyKHNjb3BlLCBkZWNsYXJhdGlvbiwgbmFtZSwgY2hhck9mZnNldCk7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENoZWNrIGZvciBjb25zdGFudENvbnRleHQgbGlrZSBiZWxvdz8KICAgICAgcmV0dXJuIG5ldyBFeHRlbnNpb25JbnN0YW5jZUFjY2Vzc0dlbmVyYXRvci5mcm9tQnVpbGRlcih0aGlzLAogICAgICAgICAgZXh0ZW5zaW9uVGhpcywgZXh0ZW5zaW9uVHlwZVBhcmFtZXRlcnMsIGRlY2xhcmF0aW9uLCB0b2tlbiwgc2V0dGVyKTsKICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24uaXNSZWd1bGFyTWV0aG9kKSB7CiAgICAgIGFzc2VydChkZWNsYXJhdGlvbi5pc1N0YXRpYyB8fCBkZWNsYXJhdGlvbi5pc1RvcExldmVsKTsKICAgICAgcmV0dXJuIG5ldyBTdGF0aWNBY2Nlc3NHZW5lcmF0b3IodGhpcywgdG9rZW4sIGRlY2xhcmF0aW9uLnRhcmdldCwgbnVsbCk7CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIFByZWZpeEJ1aWxkZXIpIHsKICAgICAgYXNzZXJ0KHByZWZpeCA9PSBudWxsKTsKICAgICAgcmV0dXJuIG5ldyBQcmVmaXhVc2VHZW5lcmF0b3IodGhpcywgdG9rZW4sIGRlY2xhcmF0aW9uKTsKICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24gaXMgTG9hZExpYnJhcnlCdWlsZGVyKSB7CiAgICAgIHJldHVybiBuZXcgTG9hZExpYnJhcnlHZW5lcmF0b3IodGhpcywgdG9rZW4sIGRlY2xhcmF0aW9uKTsKICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24uaGFzUHJvYmxlbSAmJiBkZWNsYXJhdGlvbiBpcyEgQWNjZXNzRXJyb3JCdWlsZGVyKSB7CiAgICAgIHJldHVybiBkZWNsYXJhdGlvbjsKICAgIH0gZWxzZSB7CiAgICAgIEJ1aWxkZXIgc2V0dGVyID0KICAgICAgICAgIF9nZXRDb3JyZXNwb25kaW5nU2V0dGVyQnVpbGRlcihzY29wZSwgZGVjbGFyYXRpb24sIG5hbWUsIGNoYXJPZmZzZXQpOwogICAgICBTdGF0aWNBY2Nlc3NHZW5lcmF0b3IgZ2VuZXJhdG9yID0gbmV3IFN0YXRpY0FjY2Vzc0dlbmVyYXRvci5mcm9tQnVpbGRlcigKICAgICAgICAgIHRoaXMsIGRlY2xhcmF0aW9uLCB0b2tlbiwgc2V0dGVyKTsKICAgICAgaWYgKGNvbnN0YW50Q29udGV4dCAhPSBDb25zdGFudENvbnRleHQubm9uZSkgewogICAgICAgIE1lbWJlciByZWFkVGFyZ2V0ID0gZ2VuZXJhdG9yLnJlYWRUYXJnZXQ7CiAgICAgICAgaWYgKCEocmVhZFRhcmdldCBpcyBGaWVsZCAmJiByZWFkVGFyZ2V0LmlzQ29uc3QgfHwKICAgICAgICAgICAgLy8gU3RhdGljIHRlYXItb2ZmcyBhcmUgYWxzbyBjb21waWxlIHRpbWUgY29uc3RhbnRzLgogICAgICAgICAgICByZWFkVGFyZ2V0IGlzIFByb2NlZHVyZSkpIHsKICAgICAgICAgIGFkZFByb2JsZW0oCiAgICAgICAgICAgICAgZmFzdGEubWVzc2FnZU5vdEFDb25zdGFudEV4cHJlc3Npb24sIGNoYXJPZmZzZXQsIHRva2VuLmxlbmd0aCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBnZW5lcmF0b3I7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgc2V0dGVyIGJ1aWxkZXIgY29ycmVzcG9uZGluZyB0byBbZGVjbGFyYXRpb25dIHVzaW5nIHRoZQogIC8vLyBbbmFtZV0gYW5kIFtjaGFyT2Zmc2V0XSBmb3IgdGhlIGxvb2t1cCBpbnRvIFtzY29wZV0gaWYgbmVjZXNzYXJ5LgogIEJ1aWxkZXIgX2dldENvcnJlc3BvbmRpbmdTZXR0ZXJCdWlsZGVyKAogICAgICBTY29wZSBzY29wZSwgQnVpbGRlciBkZWNsYXJhdGlvbiwgU3RyaW5nIG5hbWUsIGludCBjaGFyT2Zmc2V0KSB7CiAgICBCdWlsZGVyIHNldHRlcjsKICAgIGlmIChkZWNsYXJhdGlvbi5pc1NldHRlcikgewogICAgICBzZXR0ZXIgPSBkZWNsYXJhdGlvbjsKICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24uaXNHZXR0ZXIpIHsKICAgICAgc2V0dGVyID0gc2NvcGUubG9va3VwU2V0dGVyKG5hbWUsIGNoYXJPZmZzZXQsIHVyaSk7CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uLmlzRmllbGQpIHsKICAgICAgaWYgKGRlY2xhcmF0aW9uLmlzRmluYWwgfHwgZGVjbGFyYXRpb24uaXNDb25zdCkgewogICAgICAgIHNldHRlciA9IHNjb3BlLmxvb2t1cFNldHRlcihuYW1lLCBjaGFyT2Zmc2V0LCB1cmkpOwogICAgICB9IGVsc2UgewogICAgICAgIHNldHRlciA9IGRlY2xhcmF0aW9uOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc2V0dGVyOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVRdWFsaWZpZWQoVG9rZW4gcGVyaW9kKSB7CiAgICBkZWJ1Z0V2ZW50KCJRdWFsaWZpZWQiKTsKICAgIE9iamVjdCBub2RlID0gcG9wKCk7CiAgICBPYmplY3QgcXVhbGlmaWVyID0gcG9wKCk7CiAgICBpZiAocXVhbGlmaWVyIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIHB1c2gocXVhbGlmaWVyKTsKICAgIH0gZWxzZSBpZiAobm9kZSBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBwdXNoKG5vZGUpOwogICAgfSBlbHNlIHsKICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gbm9kZTsKICAgICAgcHVzaChpZGVudGlmaWVyLndpdGhRdWFsaWZpZXIocXVhbGlmaWVyKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luTGl0ZXJhbFN0cmluZyhUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5MaXRlcmFsU3RyaW5nIik7CiAgICBwdXNoKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3RyaW5nUGFydChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiU3RyaW5nUGFydCIpOwogICAgcHVzaCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZExpdGVyYWxTdHJpbmcoaW50IGludGVycG9sYXRpb25Db3VudCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImVuZExpdGVyYWxTdHJpbmciKTsKICAgIGlmIChpbnRlcnBvbGF0aW9uQ291bnQgPT0gMCkgewogICAgICBUb2tlbiB0b2tlbiA9IHBvcCgpOwogICAgICBTdHJpbmcgdmFsdWUgPSB1bmVzY2FwZVN0cmluZyh0b2tlbi5sZXhlbWUsIHRva2VuLCB0aGlzKTsKICAgICAgcHVzaChmb3Jlc3QuY3JlYXRlU3RyaW5nTGl0ZXJhbCh2YWx1ZSwgdG9rZW4pKTsKICAgIH0gZWxzZSB7CiAgICAgIGludCBjb3VudCA9IDEgKyBpbnRlcnBvbGF0aW9uQ291bnQgKiAyOwogICAgICBMaXN0PE9iamVjdD4gcGFydHMgPSBjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxPYmplY3Q+KCkucG9wKHN0YWNrLCBjb3VudCk7CiAgICAgIGlmIChwYXJ0cyA9PSBudWxsKSB7CiAgICAgICAgcHVzaChuZXcgUGFyc2VyUmVjb3ZlcnkoZW5kVG9rZW4uY2hhck9mZnNldCkpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBUb2tlbiBmaXJzdCA9IHBhcnRzLmZpcnN0OwogICAgICBUb2tlbiBsYXN0ID0gcGFydHMubGFzdDsKICAgICAgUXVvdGUgcXVvdGUgPSBhbmFseXplUXVvdGUoZmlyc3QubGV4ZW1lKTsKICAgICAgTGlzdDxFeHByZXNzaW9uPiBleHByZXNzaW9ucyA9IDxFeHByZXNzaW9uPltdOwogICAgICAvLyBDb250YWlucyBtb3JlIHRoYW4ganVzdCBcJyBvciBcIi4KICAgICAgaWYgKGZpcnN0LmxleGVtZS5sZW5ndGggPiAxKSB7CiAgICAgICAgU3RyaW5nIHZhbHVlID0KICAgICAgICAgICAgdW5lc2NhcGVGaXJzdFN0cmluZ1BhcnQoZmlyc3QubGV4ZW1lLCBxdW90ZSwgZmlyc3QsIHRoaXMpOwogICAgICAgIGlmICh2YWx1ZS5pc05vdEVtcHR5KSB7CiAgICAgICAgICBleHByZXNzaW9ucy5hZGQoZm9yZXN0LmNyZWF0ZVN0cmluZ0xpdGVyYWwodmFsdWUsIGZpcnN0KSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrKSB7CiAgICAgICAgT2JqZWN0IHBhcnQgPSBwYXJ0c1tpXTsKICAgICAgICBpZiAocGFydCBpcyBUb2tlbikgewogICAgICAgICAgaWYgKHBhcnQubGV4ZW1lLmxlbmd0aCAhPSAwKSB7CiAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHVuZXNjYXBlKHBhcnQubGV4ZW1lLCBxdW90ZSwgcGFydCwgdGhpcyk7CiAgICAgICAgICAgIGV4cHJlc3Npb25zLmFkZChmb3Jlc3QuY3JlYXRlU3RyaW5nTGl0ZXJhbCh2YWx1ZSwgcGFydCkpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBleHByZXNzaW9ucy5hZGQodG9WYWx1ZShwYXJ0KSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIENvbnRhaW5zIG1vcmUgdGhhbiBqdXN0IFwnIG9yIFwiLgogICAgICBpZiAobGFzdC5sZXhlbWUubGVuZ3RoID4gMSkgewogICAgICAgIFN0cmluZyB2YWx1ZSA9IHVuZXNjYXBlTGFzdFN0cmluZ1BhcnQoCiAgICAgICAgICAgIGxhc3QubGV4ZW1lLCBxdW90ZSwgbGFzdCwgbGFzdC5pc1N5bnRoZXRpYywgdGhpcyk7CiAgICAgICAgaWYgKHZhbHVlLmlzTm90RW1wdHkpIHsKICAgICAgICAgIGV4cHJlc3Npb25zLmFkZChmb3Jlc3QuY3JlYXRlU3RyaW5nTGl0ZXJhbCh2YWx1ZSwgbGFzdCkpOwogICAgICAgIH0KICAgICAgfQogICAgICBwdXNoKGZvcmVzdC5jcmVhdGVTdHJpbmdDb25jYXRlbmF0aW9uKGV4cHJlc3Npb25zLCBlbmRUb2tlbikpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOYXRpdmVDbGF1c2UoVG9rZW4gbmF0aXZlVG9rZW4sIGJvb2wgaGFzTmFtZSkgewogICAgZGVidWdFdmVudCgiTmF0aXZlQ2xhdXNlIik7CiAgICBpZiAoaGFzTmFtZSkgewogICAgICBmb3Jlc3QuYXNMaXRlcmFsU3RyaW5nKHBvcCgpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU2NyaXB0KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJTY3JpcHQiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3RyaW5nSnV4dGFwb3NpdGlvbihpbnQgbGl0ZXJhbENvdW50KSB7CiAgICBkZWJ1Z0V2ZW50KCJTdHJpbmdKdXh0YXBvc2l0aW9uIik7CiAgICBMaXN0PEV4cHJlc3Npb24+IHBhcnRzID0gcG9wTGlzdEZvclZhbHVlKGxpdGVyYWxDb3VudCk7CiAgICBMaXN0PEV4cHJlc3Npb24+IGV4cHJlc3Npb25zOwogICAgLy8gRmxhdHRlbiBzdHJpbmcganV4dGFwb3NpdGlvbnMgb2Ygc3RyaW5nIGludGVycG9sYXRpb24uCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIEV4cHJlc3Npb24gcGFydCA9IHBhcnRzW2ldOwogICAgICBpZiAocGFydCBpcyBTdHJpbmdDb25jYXRlbmF0aW9uKSB7CiAgICAgICAgaWYgKGV4cHJlc3Npb25zID09IG51bGwpIHsKICAgICAgICAgIGV4cHJlc3Npb25zID0gcGFydHMuc3VibGlzdCgwLCBpKTsKICAgICAgICB9CiAgICAgICAgZm9yIChFeHByZXNzaW9uIGV4cHJlc3Npb24gaW4gcGFydC5leHByZXNzaW9ucykgewogICAgICAgICAgZXhwcmVzc2lvbnMuYWRkKGV4cHJlc3Npb24pOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoZXhwcmVzc2lvbnMgIT0gbnVsbCkgewogICAgICAgICAgZXhwcmVzc2lvbnMuYWRkKHBhcnQpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcHVzaChmb3Jlc3QuY3JlYXRlU3RyaW5nQ29uY2F0ZW5hdGlvbihleHByZXNzaW9ucyA/PyBwYXJ0cywgbnVsbCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVMaXRlcmFsSW50KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJMaXRlcmFsSW50Iik7CiAgICBpbnQgdmFsdWUgPSBpbnQudHJ5UGFyc2UodG9rZW4ubGV4ZW1lKTsKICAgIGlmIChsZWdhY3lNb2RlKSB7CiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7CiAgICAgICAgcHVzaCh1bmhhbmRsZWQoCiAgICAgICAgICAgICdsYXJnZSBpbnRlZ2VyJywgJ2hhbmRsZUxpdGVyYWxJbnQnLCB0b2tlbi5jaGFyT2Zmc2V0LCB1cmkpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwdXNoKGZvcmVzdC5jcmVhdGVJbnRMaXRlcmFsKHZhbHVlLCB0b2tlbikpOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIFBvc3Rwb25lIHBhcnNpbmcgb2YgbGl0ZXJhbHMgcmVzdWx0aW5nIGluIGEgbmVnYXRpdmUgdmFsdWUKICAgIC8vIChoZXggbGl0ZXJhbHMgPj0gMl42MykuIFRoZXNlIGFyZSBvbmx5IGFsbG93ZWQgd2hlbiBub3QgbmVnYXRlZC4KICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlIDwgMCkgewogICAgICBwdXNoKGZvcmVzdC5jcmVhdGVJbnRMaXRlcmFsTGFyZ2UodG9rZW4ubGV4ZW1lLCB0b2tlbikpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChmb3Jlc3QuY3JlYXRlSW50TGl0ZXJhbCh2YWx1ZSwgdG9rZW4pKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRW1wdHlGdW5jdGlvbkJvZHkoVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBkZWJ1Z0V2ZW50KCJFeHByZXNzaW9uRnVuY3Rpb25Cb2R5Iik7CiAgICBlbmRCbG9ja0Z1bmN0aW9uQm9keSgwLCBudWxsLCBzZW1pY29sb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVFeHByZXNzaW9uRnVuY3Rpb25Cb2R5KFRva2VuIGFycm93VG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJFeHByZXNzaW9uRnVuY3Rpb25Cb2R5Iik7CiAgICBlbmRSZXR1cm5TdGF0ZW1lbnQodHJ1ZSwgYXJyb3dUb2tlbi5uZXh0LCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFJldHVyblN0YXRlbWVudCgKICAgICAgYm9vbCBoYXNFeHByZXNzaW9uLCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiUmV0dXJuU3RhdGVtZW50Iik7CiAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBoYXNFeHByZXNzaW9uID8gcG9wRm9yVmFsdWUoKSA6IG51bGw7CiAgICBpZiAoZXhwcmVzc2lvbiAhPSBudWxsICYmIGluQ29uc3RydWN0b3IpIHsKICAgICAgcHVzaChidWlsZFByb2JsZW1TdGF0ZW1lbnQoCiAgICAgICAgICBmYXN0YS5tZXNzYWdlQ29uc3RydWN0b3JXaXRoUmV0dXJuVHlwZSwgYmVnaW5Ub2tlbi5jaGFyT2Zmc2V0KSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKGZvcmVzdC5jcmVhdGVSZXR1cm5TdGF0ZW1lbnQob2Zmc2V0Rm9yVG9rZW4oYmVnaW5Ub2tlbiksIGV4cHJlc3Npb24sCiAgICAgICAgICBpc0Fycm93OiAhaWRlbnRpY2FsKGJlZ2luVG9rZW4ubGV4ZW1lLCAicmV0dXJuIikpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5UaGVuU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBFeHByZXNzaW9uIGNvbmRpdGlvbiA9IHBvcEZvclZhbHVlKCk7CiAgICBlbnRlclRoZW5Gb3JUeXBlUHJvbW90aW9uKGNvbmRpdGlvbik7CiAgICBwdXNoKGNvbmRpdGlvbik7CiAgICBzdXBlci5iZWdpblRoZW5TdGF0ZW1lbnQodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUaGVuU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICB0eXBlUHJvbW90ZXI/LmVudGVyRWxzZSgpOwogICAgc3VwZXIuZW5kVGhlblN0YXRlbWVudCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZElmU3RhdGVtZW50KFRva2VuIGlmVG9rZW4sIFRva2VuIGVsc2VUb2tlbikgewogICAgU3RhdGVtZW50IGVsc2VQYXJ0ID0gcG9wU3RhdGVtZW50SWZOb3ROdWxsKGVsc2VUb2tlbik7CiAgICBTdGF0ZW1lbnQgdGhlblBhcnQgPSBwb3BTdGF0ZW1lbnQoKTsKICAgIEV4cHJlc3Npb24gY29uZGl0aW9uID0gcG9wKCk7CiAgICB0eXBlUHJvbW90ZXI/LmV4aXRDb25kaXRpb25hbCgpOwogICAgcHVzaChmb3Jlc3QuY3JlYXRlSWZTdGF0ZW1lbnQoCiAgICAgICAgaWZUb2tlbiwgY29uZGl0aW9uLCB0aGVuUGFydCwgZWxzZVRva2VuLCBlbHNlUGFydCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRWYXJpYWJsZUluaXRpYWxpemVyKFRva2VuIGFzc2lnbm1lbnRPcGVyYXRvcikgewogICAgZGVidWdFdmVudCgiVmFyaWFibGVJbml0aWFsaXplciIpOwogICAgYXNzZXJ0KGFzc2lnbm1lbnRPcGVyYXRvci5zdHJpbmdWYWx1ZSA9PSAiPSIpOwogICAgcHVzaE5ld0xvY2FsVmFyaWFibGUocG9wRm9yVmFsdWUoKSwgZXF1YWxzVG9rZW46IGFzc2lnbm1lbnRPcGVyYXRvcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vVmFyaWFibGVJbml0aWFsaXplcihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiTm9WYXJpYWJsZUluaXRpYWxpemVyIik7CiAgICBib29sIGlzQ29uc3QgPSAoY3VycmVudExvY2FsVmFyaWFibGVNb2RpZmllcnMgJiBjb25zdE1hc2spICE9IDA7CiAgICBib29sIGlzRmluYWwgPSAoY3VycmVudExvY2FsVmFyaWFibGVNb2RpZmllcnMgJiBmaW5hbE1hc2spICE9IDA7CiAgICBFeHByZXNzaW9uIGluaXRpYWxpemVyOwogICAgaWYgKCFvcHRpb25hbCgiaW4iLCB0b2tlbikpIHsKICAgICAgLy8gQSBmb3ItaW4gbG9vcC12YXJpYWJsZSBjYW4ndCBoYXZlIGFuIGluaXRpYWxpemVyLiBTbyBsZXQncyByZW1haW4KICAgICAgLy8gc2lsZW50IGlmIHRoZSBuZXh0IHRva2VuIGlzIGBpbmAuIFNpbmNlIGEgZm9yLWluIGxvb3AgY2FuIG9ubHkgaGF2ZQogICAgICAvLyBvbmUgdmFyaWFibGUgaXQgbXVzdCBiZSBmb2xsb3dlZCBieSBgaW5gLgogICAgICBpZiAoaXNDb25zdCkgewogICAgICAgIGluaXRpYWxpemVyID0gYnVpbGRQcm9ibGVtKAogICAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUNvbnN0RmllbGRXaXRob3V0SW5pdGlhbGl6ZXIKICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKHRva2VuLmxleGVtZSksCiAgICAgICAgICAgIHRva2VuLmNoYXJPZmZzZXQsCiAgICAgICAgICAgIHRva2VuLmxlbmd0aCk7CiAgICAgIH0gZWxzZSBpZiAoaXNGaW5hbCkgewogICAgICAgIGluaXRpYWxpemVyID0gYnVpbGRQcm9ibGVtKAogICAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUZpbmFsRmllbGRXaXRob3V0SW5pdGlhbGl6ZXIKICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKHRva2VuLmxleGVtZSksCiAgICAgICAgICAgIHRva2VuLmNoYXJPZmZzZXQsCiAgICAgICAgICAgIHRva2VuLmxlbmd0aCk7CiAgICAgIH0KICAgIH0KICAgIHB1c2hOZXdMb2NhbFZhcmlhYmxlKGluaXRpYWxpemVyKTsKICB9CgogIHZvaWQgcHVzaE5ld0xvY2FsVmFyaWFibGUoRXhwcmVzc2lvbiBpbml0aWFsaXplciwge1Rva2VuIGVxdWFsc1Rva2VufSkgewogICAgT2JqZWN0IG5vZGUgPSBwb3AoKTsKICAgIGlmIChub2RlIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIHB1c2gobm9kZSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IG5vZGU7CiAgICBhc3NlcnQoY3VycmVudExvY2FsVmFyaWFibGVNb2RpZmllcnMgIT0gLTEpOwogICAgYm9vbCBpc0NvbnN0ID0gKGN1cnJlbnRMb2NhbFZhcmlhYmxlTW9kaWZpZXJzICYgY29uc3RNYXNrKSAhPSAwOwogICAgYm9vbCBpc0ZpbmFsID0gKGN1cnJlbnRMb2NhbFZhcmlhYmxlTW9kaWZpZXJzICYgZmluYWxNYXNrKSAhPSAwOwogICAgYm9vbCBpc0xhdGUgPSAoY3VycmVudExvY2FsVmFyaWFibGVNb2RpZmllcnMgJiBsYXRlTWFzaykgIT0gMDsKICAgIGFzc2VydChpc0NvbnN0ID09IChjb25zdGFudENvbnRleHQgPT0gQ29uc3RhbnRDb250ZXh0LmluZmVycmVkKSk7CiAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudCgKICAgICAgICBpZGVudGlmaWVyLm5hbWUsIGZ1bmN0aW9uTmVzdGluZ0xldmVsLAogICAgICAgIGZvclN5bnRoZXRpY1Rva2VuOiBkZXByZWNhdGVkX2V4dHJhY3RUb2tlbihpZGVudGlmaWVyKS5pc1N5bnRoZXRpYywKICAgICAgICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXIsCiAgICAgICAgdHlwZTogYnVpbGREYXJ0VHlwZShjdXJyZW50TG9jYWxWYXJpYWJsZVR5cGUpLAogICAgICAgIGlzRmluYWw6IGlzRmluYWwsCiAgICAgICAgaXNDb25zdDogaXNDb25zdCwKICAgICAgICBpc0xhdGU6IGlzTGF0ZSkKICAgICAgLi5maWxlT2Zmc2V0ID0gaWRlbnRpZmllci5jaGFyT2Zmc2V0CiAgICAgIC4uZmlsZUVxdWFsc09mZnNldCA9IG9mZnNldEZvclRva2VuKGVxdWFsc1Rva2VuKTsKICAgIGxpYnJhcnlCdWlsZGVyLmNoZWNrQm91bmRzSW5WYXJpYWJsZURlY2xhcmF0aW9uKAogICAgICAgIHZhcmlhYmxlLCB0eXBlRW52aXJvbm1lbnQsIHVyaSk7CiAgICBwdXNoKHZhcmlhYmxlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5GaWVsZEluaXRpYWxpemVyKFRva2VuIHRva2VuKSB7CiAgICBpbkZpZWxkSW5pdGlhbGl6ZXIgPSB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGaWVsZEluaXRpYWxpemVyKFRva2VuIGFzc2lnbm1lbnRPcGVyYXRvciwgVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkZpZWxkSW5pdGlhbGl6ZXIiKTsKICAgIGluRmllbGRJbml0aWFsaXplciA9IGZhbHNlOwogICAgYXNzZXJ0KGFzc2lnbm1lbnRPcGVyYXRvci5zdHJpbmdWYWx1ZSA9PSAiPSIpOwogICAgcHVzaChwb3BGb3JWYWx1ZSgpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9GaWVsZEluaXRpYWxpemVyKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJOb0ZpZWxkSW5pdGlhbGl6ZXIiKTsKICAgIGlmIChjb25zdGFudENvbnRleHQgPT0gQ29uc3RhbnRDb250ZXh0LmluZmVycmVkKSB7CiAgICAgIC8vIENyZWF0aW5nIGEgbnVsbCB2YWx1ZSB0byBwcmV2ZW50IHRoZSBEYXJ0IFZNIGZyb20gY3Jhc2hpbmcuCiAgICAgIHB1c2goZm9yZXN0LmNyZWF0ZU51bGxMaXRlcmFsKG9mZnNldEZvclRva2VuKHRva2VuKSkpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChOdWxsVmFsdWUuRmllbGRJbml0aWFsaXplcik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEluaXRpYWxpemVkSWRlbnRpZmllcihUb2tlbiBuYW1lVG9rZW4pIHsKICAgIC8vIFRPRE8oYWhlKTogVXNlIFtJbml0aWFsaXplZElkZW50aWZpZXJdIGhlcmU/CiAgICBkZWJ1Z0V2ZW50KCJJbml0aWFsaXplZElkZW50aWZpZXIiKTsKICAgIE9iamVjdCBub2RlID0gcG9wKCk7CiAgICBpZiAobm9kZSBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBwdXNoKG5vZGUpOwogICAgICByZXR1cm47CiAgICB9CiAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlID0gbm9kZTsKICAgIHZhcmlhYmxlLmZpbGVPZmZzZXQgPSBuYW1lVG9rZW4uY2hhck9mZnNldDsKICAgIHB1c2godmFyaWFibGUpOwogICAgZGVjbGFyZVZhcmlhYmxlKHZhcmlhYmxlLCBzY29wZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luVmFyaWFibGVzRGVjbGFyYXRpb24oCiAgICAgIFRva2VuIHRva2VuLCBUb2tlbiBsYXRlVG9rZW4sIFRva2VuIHZhckZpbmFsT3JDb25zdCkgewogICAgZGVidWdFdmVudCgiYmVnaW5WYXJpYWJsZXNEZWNsYXJhdGlvbiIpOwogICAgaWYgKCFsaWJyYXJ5QnVpbGRlci5sb2FkZXIudGFyZ2V0LmVuYWJsZU5vbk51bGxhYmxlKSB7CiAgICAgIHJlcG9ydE5vbk51bGxhYmxlTW9kaWZpZXJFcnJvcihsYXRlVG9rZW4pOwogICAgfQogICAgVW5yZXNvbHZlZFR5cGUgdHlwZSA9IHBvcCgpOwogICAgaW50IG1vZGlmaWVycyA9IChsYXRlVG9rZW4gIT0gbnVsbCA/IGxhdGVNYXNrIDogMCkgfAogICAgICAgIE1vZGlmaWVyLnZhbGlkYXRlVmFyRmluYWxPckNvbnN0KHZhckZpbmFsT3JDb25zdD8ubGV4ZW1lKTsKICAgIHN1cGVyLnB1c2goY3VycmVudExvY2FsVmFyaWFibGVNb2RpZmllcnMpOwogICAgc3VwZXIucHVzaChjdXJyZW50TG9jYWxWYXJpYWJsZVR5cGUgPz8gTnVsbFZhbHVlLlR5cGUpOwogICAgY3VycmVudExvY2FsVmFyaWFibGVUeXBlID0gdHlwZTsKICAgIGN1cnJlbnRMb2NhbFZhcmlhYmxlTW9kaWZpZXJzID0gbW9kaWZpZXJzOwogICAgc3VwZXIucHVzaChjb25zdGFudENvbnRleHQpOwogICAgY29uc3RhbnRDb250ZXh0ID0gKChtb2RpZmllcnMgJiBjb25zdE1hc2spICE9IDApCiAgICAgICAgPyBDb25zdGFudENvbnRleHQuaW5mZXJyZWQKICAgICAgICA6IENvbnN0YW50Q29udGV4dC5ub25lOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRWYXJpYWJsZXNEZWNsYXJhdGlvbihpbnQgY291bnQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJWYXJpYWJsZXNEZWNsYXJhdGlvbiIpOwogICAgaWYgKGNvdW50ID09IDEpIHsKICAgICAgT2JqZWN0IG5vZGUgPSBwb3AoKTsKICAgICAgY29uc3RhbnRDb250ZXh0ID0gcG9wKCk7CiAgICAgIGN1cnJlbnRMb2NhbFZhcmlhYmxlVHlwZSA9IHBvcCgpOwogICAgICBjdXJyZW50TG9jYWxWYXJpYWJsZU1vZGlmaWVycyA9IHBvcCgpOwogICAgICBMaXN0PEV4cHJlc3Npb24+IGFubm90YXRpb25zID0gcG9wKCk7CiAgICAgIGlmIChub2RlIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgICAgcHVzaChub2RlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSA9IG5vZGU7CiAgICAgIGlmIChhbm5vdGF0aW9ucyAhPSBudWxsKSB7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhbm5vdGF0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgdmFyaWFibGUuYWRkQW5ub3RhdGlvbihhbm5vdGF0aW9uc1tpXSk7CiAgICAgICAgfQogICAgICAgICh2YXJpYWJsZXNXaXRoTWV0YWRhdGEgPz89IDxWYXJpYWJsZURlY2xhcmF0aW9uPltdKS5hZGQodmFyaWFibGUpOwogICAgICB9CiAgICAgIHB1c2godmFyaWFibGUpOwogICAgfSBlbHNlIHsKICAgICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiB2YXJpYWJsZXMgPQogICAgICAgICAgY29uc3QgRml4ZWROdWxsYWJsZUxpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4oKS5wb3Aoc3RhY2ssIGNvdW50KTsKICAgICAgY29uc3RhbnRDb250ZXh0ID0gcG9wKCk7CiAgICAgIGN1cnJlbnRMb2NhbFZhcmlhYmxlVHlwZSA9IHBvcCgpOwogICAgICBjdXJyZW50TG9jYWxWYXJpYWJsZU1vZGlmaWVycyA9IHBvcCgpOwogICAgICBMaXN0PEV4cHJlc3Npb24+IGFubm90YXRpb25zID0gcG9wKCk7CiAgICAgIGlmICh2YXJpYWJsZXMgPT0gbnVsbCkgewogICAgICAgIHB1c2gobmV3IFBhcnNlclJlY292ZXJ5KG9mZnNldEZvclRva2VuKGVuZFRva2VuKSkpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoYW5ub3RhdGlvbnMgIT0gbnVsbCkgewogICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gZmlyc3QgPSB2YXJpYWJsZXMuZmlyc3Q7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhbm5vdGF0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgZmlyc3QuYWRkQW5ub3RhdGlvbihhbm5vdGF0aW9uc1tpXSk7CiAgICAgICAgfQogICAgICAgIChtdWx0aVZhcmlhYmxlc1dpdGhNZXRhZGF0YSA/Pz0gPExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4+W10pCiAgICAgICAgICAgIC5hZGQodmFyaWFibGVzKTsKICAgICAgfQogICAgICBwdXNoKGZvcmVzdC52YXJpYWJsZXNEZWNsYXJhdGlvbih2YXJpYWJsZXMsIHVyaSkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRCbG9jayhpbnQgY291bnQsIFRva2VuIG9wZW5CcmFjZSwgVG9rZW4gY2xvc2VCcmFjZSkgewogICAgZGVidWdFdmVudCgiQmxvY2siKTsKICAgIFN0YXRlbWVudCBibG9jayA9IHBvcEJsb2NrKGNvdW50LCBvcGVuQnJhY2UsIGNsb3NlQnJhY2UpOwogICAgZXhpdExvY2FsU2NvcGUoKTsKICAgIHB1c2goYmxvY2spOwogIH0KCiAgdm9pZCBoYW5kbGVJbnZhbGlkVG9wTGV2ZWxCbG9jayhUb2tlbiB0b2tlbikgewogICAgLy8gVE9ETyhkYW5ydWJlbCk6IENvbnNpZGVyIGltcHJvdmVkIHJlY292ZXJ5IGJ5IGFkZGluZyB0aGlzIGJsb2NrCiAgICAvLyBhcyBwYXJ0IG9mIGEgc3ludGhldGljIHRvcCBsZXZlbCBmdW5jdGlvbi4KICAgIHBvcCgpOyAvLyBibG9jawogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVBc3NpZ25tZW50RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiQXNzaWdubWVudEV4cHJlc3Npb24iKTsKICAgIEV4cHJlc3Npb24gdmFsdWUgPSBwb3BGb3JWYWx1ZSgpOwogICAgT2JqZWN0IGdlbmVyYXRvciA9IHBvcCgpOwogICAgaWYgKGdlbmVyYXRvciBpcyEgR2VuZXJhdG9yKSB7CiAgICAgIHB1c2goYnVpbGRQcm9ibGVtKGZhc3RhLm1lc3NhZ2VOb3RBbkx2YWx1ZSwgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLAogICAgICAgICAgbGVuZ3RoRm9yVG9rZW4odG9rZW4pKSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKG5ldyBEZWxheWVkQXNzaWdubWVudCgKICAgICAgICAgIHRoaXMsIHRva2VuLCBnZW5lcmF0b3IsIHZhbHVlLCB0b2tlbi5zdHJpbmdWYWx1ZSkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbnRlckxvb3AoaW50IGNoYXJPZmZzZXQpIHsKICAgIGlmIChwZWVrKCkgaXMgTGFiZWxUYXJnZXQpIHsKICAgICAgTGFiZWxUYXJnZXQgdGFyZ2V0ID0gcGVlaygpOwogICAgICBlbnRlckJyZWFrVGFyZ2V0KGNoYXJPZmZzZXQsIHRhcmdldC5icmVha1RhcmdldCk7CiAgICAgIGVudGVyQ29udGludWVUYXJnZXQoY2hhck9mZnNldCwgdGFyZ2V0LmNvbnRpbnVlVGFyZ2V0KTsKICAgIH0gZWxzZSB7CiAgICAgIGVudGVyQnJlYWtUYXJnZXQoY2hhck9mZnNldCk7CiAgICAgIGVudGVyQ29udGludWVUYXJnZXQoY2hhck9mZnNldCk7CiAgICB9CiAgfQoKICB2b2lkIGV4aXRMb29wT3JTd2l0Y2goU3RhdGVtZW50IHN0YXRlbWVudCkgewogICAgaWYgKHByb2JsZW1Jbkxvb3BPclN3aXRjaCAhPSBudWxsKSB7CiAgICAgIHB1c2gocHJvYmxlbUluTG9vcE9yU3dpdGNoKTsKICAgICAgcHJvYmxlbUluTG9vcE9yU3dpdGNoID0gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2goc3RhdGVtZW50KTsKICAgIH0KICB9CgogIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gYnVpbGRWYXJpYWJsZURlY2xhcmF0aW9ucyh2YXJpYWJsZU9yRXhwcmVzc2lvbikgewogICAgLy8gVE9ETyhhaGUpOiBUaGlzIGNhbiBiZSBzaW1wbGlmaWVkIG5vdyB0aGF0IHdlIGhhdmUgdGhlIGV2ZW50cwogICAgLy8gYGhhbmRsZUZvckluaXRpYWxpemVyLi4uYCBldmVudHMuCiAgICBpZiAodmFyaWFibGVPckV4cHJlc3Npb24gaXMgR2VuZXJhdG9yKSB7CiAgICAgIHZhcmlhYmxlT3JFeHByZXNzaW9uID0gdmFyaWFibGVPckV4cHJlc3Npb24uYnVpbGRGb3JFZmZlY3QoKTsKICAgIH0KICAgIGlmICh2YXJpYWJsZU9yRXhwcmVzc2lvbiBpcyBWYXJpYWJsZURlY2xhcmF0aW9uKSB7CiAgICAgIHJldHVybiA8VmFyaWFibGVEZWNsYXJhdGlvbj5bdmFyaWFibGVPckV4cHJlc3Npb25dOwogICAgfSBlbHNlIGlmICh2YXJpYWJsZU9yRXhwcmVzc2lvbiBpcyBFeHByZXNzaW9uKSB7CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50LmZvckVmZmVjdCgKICAgICAgICAgIHZhcmlhYmxlT3JFeHByZXNzaW9uLCBmdW5jdGlvbk5lc3RpbmdMZXZlbCk7CiAgICAgIHJldHVybiA8VmFyaWFibGVEZWNsYXJhdGlvbj5bdmFyaWFibGVdOwogICAgfSBlbHNlIGlmICh2YXJpYWJsZU9yRXhwcmVzc2lvbiBpcyBFeHByZXNzaW9uU3RhdGVtZW50KSB7CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50LmZvckVmZmVjdCgKICAgICAgICAgIHZhcmlhYmxlT3JFeHByZXNzaW9uLmV4cHJlc3Npb24sIGZ1bmN0aW9uTmVzdGluZ0xldmVsKTsKICAgICAgcmV0dXJuIDxWYXJpYWJsZURlY2xhcmF0aW9uPlt2YXJpYWJsZV07CiAgICB9IGVsc2UgaWYgKGZvcmVzdC5pc1ZhcmlhYmxlc0RlY2xhcmF0aW9uKHZhcmlhYmxlT3JFeHByZXNzaW9uKSkgewogICAgICByZXR1cm4gZm9yZXN0CiAgICAgICAgICAudmFyaWFibGVzRGVjbGFyYXRpb25FeHRyYWN0RGVjbGFyYXRpb25zKHZhcmlhYmxlT3JFeHByZXNzaW9uKTsKICAgIH0gZWxzZSBpZiAodmFyaWFibGVPckV4cHJlc3Npb24gaXMgTGlzdDxPYmplY3Q+KSB7CiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gdmFyaWFibGVzID0gPFZhcmlhYmxlRGVjbGFyYXRpb24+W107CiAgICAgIGZvciAoT2JqZWN0IHYgaW4gdmFyaWFibGVPckV4cHJlc3Npb24pIHsKICAgICAgICB2YXJpYWJsZXMuYWRkQWxsKGJ1aWxkVmFyaWFibGVEZWNsYXJhdGlvbnModikpOwogICAgICB9CiAgICAgIHJldHVybiB2YXJpYWJsZXM7CiAgICB9IGVsc2UgaWYgKHZhcmlhYmxlT3JFeHByZXNzaW9uID09IG51bGwpIHsKICAgICAgcmV0dXJuIDxWYXJpYWJsZURlY2xhcmF0aW9uPltdOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUZvckluaXRpYWxpemVyRW1wdHlTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkZvckluaXRpYWxpemVyRW1wdHlTdGF0ZW1lbnQiKTsKICAgIHB1c2goTnVsbFZhbHVlLkV4cHJlc3Npb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVGb3JJbml0aWFsaXplckV4cHJlc3Npb25TdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkZvckluaXRpYWxpemVyRXhwcmVzc2lvblN0YXRlbWVudCIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVGb3JJbml0aWFsaXplckxvY2FsVmFyaWFibGVEZWNsYXJhdGlvbihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiRm9ySW5pdGlhbGl6ZXJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb24iKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRm9yTG9vcFBhcnRzKFRva2VuIGZvcktleXdvcmQsIFRva2VuIGxlZnRQYXJlbiwKICAgICAgVG9rZW4gbGVmdFNlcGFyYXRvciwgaW50IHVwZGF0ZUV4cHJlc3Npb25Db3VudCkgewogICAgcHVzaChmb3JLZXl3b3JkKTsKICAgIHB1c2gobGVmdFBhcmVuKTsKICAgIHB1c2gobGVmdFNlcGFyYXRvcik7CiAgICBwdXNoKHVwZGF0ZUV4cHJlc3Npb25Db3VudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZvckNvbnRyb2xGbG93KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJGb3JDb250cm9sRmxvdyIpOwogICAgT2JqZWN0IGVudHJ5ID0gcG9wKCk7CiAgICBpbnQgdXBkYXRlRXhwcmVzc2lvbkNvdW50ID0gcG9wKCk7CiAgICBwb3AoKTsgLy8gbGVmdCBzZXBhcmF0b3IKICAgIHBvcCgpOyAvLyBsZWZ0IHBhcmVudGhlc2lzCiAgICBUb2tlbiBmb3JUb2tlbiA9IHBvcCgpOwogICAgTGlzdDxFeHByZXNzaW9uPiB1cGRhdGVzID0gcG9wTGlzdEZvckVmZmVjdCh1cGRhdGVFeHByZXNzaW9uQ291bnQpOwogICAgU3RhdGVtZW50IGNvbmRpdGlvblN0YXRlbWVudCA9IHBvcFN0YXRlbWVudCgpOyAvLyBjb25kaXRpb24KICAgIE9iamVjdCB2YXJpYWJsZU9yRXhwcmVzc2lvbiA9IHBvcCgpOwogICAgZXhpdExvY2FsU2NvcGUoKTsKCiAgICBpZiAoY29uc3RhbnRDb250ZXh0ICE9IENvbnN0YW50Q29udGV4dC5ub25lKSB7CiAgICAgIGhhbmRsZVJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUNhbnRVc2VDb250cm9sRmxvd09yU3ByZWFkQXNDb25zdGFudAogICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGZvclRva2VuKSwKICAgICAgICAgIGZvclRva2VuLAogICAgICAgICAgZm9yVG9rZW4pOwogICAgICBwdXNoKGludmFsaWRDb2xsZWN0aW9uRWxlbWVudCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB0cmFuc2Zvcm1Db2xsZWN0aW9ucyA9IHRydWU7CiAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHZhcmlhYmxlcyA9CiAgICAgICAgYnVpbGRWYXJpYWJsZURlY2xhcmF0aW9ucyh2YXJpYWJsZU9yRXhwcmVzc2lvbik7CiAgICBFeHByZXNzaW9uIGNvbmRpdGlvbjsKICAgIGlmIChmb3Jlc3QuaXNFeHByZXNzaW9uU3RhdGVtZW50KGNvbmRpdGlvblN0YXRlbWVudCkpIHsKICAgICAgY29uZGl0aW9uID0KICAgICAgICAgIGZvcmVzdC5nZXRFeHByZXNzaW9uRnJvbUV4cHJlc3Npb25TdGF0ZW1lbnQoY29uZGl0aW9uU3RhdGVtZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChmb3Jlc3QuaXNFbXB0eVN0YXRlbWVudChjb25kaXRpb25TdGF0ZW1lbnQpKTsKICAgIH0KICAgIGlmIChlbnRyeSBpcyBNYXBFbnRyeSkgewogICAgICBwdXNoKGZvcmVzdC5jcmVhdGVGb3JNYXBFbnRyeSgKICAgICAgICAgIHZhcmlhYmxlcywgY29uZGl0aW9uLCB1cGRhdGVzLCBlbnRyeSwgZm9yVG9rZW4pKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2goZm9yZXN0LmNyZWF0ZUZvckVsZW1lbnQoCiAgICAgICAgICB2YXJpYWJsZXMsIGNvbmRpdGlvbiwgdXBkYXRlcywgdG9WYWx1ZShlbnRyeSksIGZvclRva2VuKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZvclN0YXRlbWVudChUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiRm9yU3RhdGVtZW50Iik7CiAgICBTdGF0ZW1lbnQgYm9keSA9IHBvcFN0YXRlbWVudCgpOwoKICAgIGludCB1cGRhdGVFeHByZXNzaW9uQ291bnQgPSBwb3AoKTsKICAgIFRva2VuIGxlZnRTZXBhcmF0b3IgPSBwb3AoKTsKICAgIFRva2VuIGxlZnRQYXJlbiA9IHBvcCgpOwogICAgVG9rZW4gZm9yS2V5d29yZCA9IHBvcCgpOwoKICAgIExpc3Q8RXhwcmVzc2lvbj4gdXBkYXRlcyA9IHBvcExpc3RGb3JFZmZlY3QodXBkYXRlRXhwcmVzc2lvbkNvdW50KTsKICAgIFN0YXRlbWVudCBjb25kaXRpb25TdGF0ZW1lbnQgPSBwb3BTdGF0ZW1lbnQoKTsKICAgIE9iamVjdCB2YXJpYWJsZU9yRXhwcmVzc2lvbiA9IHBvcCgpOwogICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiB2YXJpYWJsZXMgPQogICAgICAgIGJ1aWxkVmFyaWFibGVEZWNsYXJhdGlvbnModmFyaWFibGVPckV4cHJlc3Npb24pOwogICAgZXhpdExvY2FsU2NvcGUoKTsKICAgIEp1bXBUYXJnZXQgY29udGludWVUYXJnZXQgPSBleGl0Q29udGludWVUYXJnZXQoKTsKICAgIEp1bXBUYXJnZXQgYnJlYWtUYXJnZXQgPSBleGl0QnJlYWtUYXJnZXQoKTsKICAgIGlmIChjb250aW51ZVRhcmdldC5oYXNVc2VycykgewogICAgICBib2R5ID0gZm9yZXN0LmNyZWF0ZUxhYmVsZWRTdGF0ZW1lbnQoYm9keSk7CiAgICAgIGNvbnRpbnVlVGFyZ2V0LnJlc29sdmVDb250aW51ZXMoZm9yZXN0LCBib2R5KTsKICAgIH0KICAgIEV4cHJlc3Npb24gY29uZGl0aW9uOwogICAgaWYgKGZvcmVzdC5pc0V4cHJlc3Npb25TdGF0ZW1lbnQoY29uZGl0aW9uU3RhdGVtZW50KSkgewogICAgICBjb25kaXRpb24gPQogICAgICAgICAgZm9yZXN0LmdldEV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvblN0YXRlbWVudChjb25kaXRpb25TdGF0ZW1lbnQpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KGZvcmVzdC5pc0VtcHR5U3RhdGVtZW50KGNvbmRpdGlvblN0YXRlbWVudCkpOwogICAgfQogICAgU3RhdGVtZW50IHJlc3VsdCA9IGZvcmVzdC5jcmVhdGVGb3JTdGF0ZW1lbnQoCiAgICAgICAgZm9yS2V5d29yZCwKICAgICAgICBsZWZ0UGFyZW4sCiAgICAgICAgdmFyaWFibGVzLAogICAgICAgIGxlZnRTZXBhcmF0b3IsCiAgICAgICAgY29uZGl0aW9uLAogICAgICAgIGNvbmRpdGlvblN0YXRlbWVudCwKICAgICAgICB1cGRhdGVzLAogICAgICAgIGxlZnRQYXJlbi5lbmRHcm91cCwKICAgICAgICBib2R5KTsKICAgIGlmIChicmVha1RhcmdldC5oYXNVc2VycykgewogICAgICByZXN1bHQgPSBmb3Jlc3QuY3JlYXRlTGFiZWxlZFN0YXRlbWVudChyZXN1bHQpOwogICAgICBicmVha1RhcmdldC5yZXNvbHZlQnJlYWtzKGZvcmVzdCwgcmVzdWx0KTsKICAgIH0KICAgIGlmICh2YXJpYWJsZU9yRXhwcmVzc2lvbiBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBwcm9ibGVtSW5Mb29wT3JTd2l0Y2ggPz89IGJ1aWxkUHJvYmxlbVN0YXRlbWVudCgKICAgICAgICAgIGZhc3RhLm1lc3NhZ2VTeW50aGV0aWNUb2tlbiwgdmFyaWFibGVPckV4cHJlc3Npb24uY2hhck9mZnNldCwKICAgICAgICAgIHN1cHByZXNzTWVzc2FnZTogdHJ1ZSk7CiAgICB9CiAgICBleGl0TG9vcE9yU3dpdGNoKHJlc3VsdCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEF3YWl0RXhwcmVzc2lvbihUb2tlbiBrZXl3b3JkLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiQXdhaXRFeHByZXNzaW9uIik7CiAgICBwdXNoKGZvcmVzdC5jcmVhdGVBd2FpdEV4cHJlc3Npb24ocG9wRm9yVmFsdWUoKSwga2V5d29yZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRJbnZhbGlkQXdhaXRFeHByZXNzaW9uKAogICAgICBUb2tlbiBrZXl3b3JkLCBUb2tlbiBlbmRUb2tlbiwgZmFzdGEuTWVzc2FnZUNvZGUgZXJyb3JDb2RlKSB7CiAgICBkZWJ1Z0V2ZW50KCJBd2FpdEV4cHJlc3Npb24iKTsKICAgIHBvcEZvclZhbHVlKCk7CiAgICBwdXNoKGJ1aWxkUHJvYmxlbShlcnJvckNvZGUsIGtleXdvcmQub2Zmc2V0LCBrZXl3b3JkLmxlbmd0aCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVBc3luY01vZGlmaWVyKFRva2VuIGFzeW5jVG9rZW4sIFRva2VuIHN0YXJUb2tlbikgewogICAgZGVidWdFdmVudCgiQXN5bmNNb2RpZmllciIpOwogICAgcHVzaChhc3luY01hcmtlckZyb21Ub2tlbnMoYXN5bmNUb2tlbiwgc3RhclRva2VuKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUxpdGVyYWxMaXN0KAogICAgICBpbnQgY291bnQsIFRva2VuIGxlZnRCcmFja2V0LCBUb2tlbiBjb25zdEtleXdvcmQsIFRva2VuIHJpZ2h0QnJhY2tldCkgewogICAgZGVidWdFdmVudCgiTGl0ZXJhbExpc3QiKTsKCiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogUmVwbGFjZSB0aGlzIHdpdGggcG9wTGlzdEZvclZhbHVlCiAgICAvLyB3aGVuIGNvbnRyb2wgZmxvdyBhbmQgc3ByZWFkIGNvbGxlY3Rpb25zIGhhdmUgYmVlbiBlbmFibGVkIGJ5IGRlZmF1bHQKICAgIExpc3Q8RXhwcmVzc2lvbj4gZXhwcmVzc2lvbnMgPQogICAgICAgIG5ldyBMaXN0PEV4cHJlc3Npb24+LmZpbGxlZChjb3VudCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgZm9yIChpbnQgaSA9IGNvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgT2JqZWN0IGVsZW0gPSBwb3AoKTsKICAgICAgaWYgKGVsZW0gIT0gaW52YWxpZENvbGxlY3Rpb25FbGVtZW50KSB7CiAgICAgICAgZXhwcmVzc2lvbnNbaV0gPSB0b1ZhbHVlKGVsZW0pOwogICAgICB9IGVsc2UgewogICAgICAgIGV4cHJlc3Npb25zLnJlbW92ZUF0KGkpOwogICAgICB9CiAgICB9CgogICAgTGlzdDxVbnJlc29sdmVkVHlwZT4gdHlwZUFyZ3VtZW50cyA9IHBvcCgpOwoKICAgIERhcnRUeXBlIHR5cGVBcmd1bWVudDsKICAgIGlmICh0eXBlQXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgaWYgKHR5cGVBcmd1bWVudHMubGVuZ3RoID4gMSkgewogICAgICAgIGFkZFByb2JsZW0oCiAgICAgICAgICAgIGZhc3RhLm1lc3NhZ2VMaXN0TGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzLAogICAgICAgICAgICBvZmZzZXRGb3JUb2tlbihsZWZ0QnJhY2tldCksCiAgICAgICAgICAgIGxlbmd0aE9mU3BhbihsZWZ0QnJhY2tldCwgbGVmdEJyYWNrZXQuZW5kR3JvdXApKTsKICAgICAgICB0eXBlQXJndW1lbnQgPSBjb25zdCBJbnZhbGlkVHlwZSgpOwogICAgICB9IGVsc2UgewogICAgICAgIHR5cGVBcmd1bWVudCA9IGJ1aWxkRGFydFR5cGUodHlwZUFyZ3VtZW50cy5zaW5nbGUpOwogICAgICAgIGlmICghbGVnYWN5TW9kZSkgewogICAgICAgICAgdHlwZUFyZ3VtZW50ID0KICAgICAgICAgICAgICBpbnN0YW50aWF0ZVRvQm91bmRzKHR5cGVBcmd1bWVudCwgY29yZVR5cGVzLm9iamVjdENsYXNzKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHR5cGVBcmd1bWVudCA9IGltcGxpY2l0VHlwZUFyZ3VtZW50OwogICAgfQoKICAgIEV4cHJlc3Npb24gbm9kZSA9IGZvcmVzdC5jcmVhdGVMaXN0TGl0ZXJhbCgKICAgICAgICBjb25zdEtleXdvcmQsCiAgICAgICAgY29uc3RLZXl3b3JkICE9IG51bGwgfHwgY29uc3RhbnRDb250ZXh0ID09IENvbnN0YW50Q29udGV4dC5pbmZlcnJlZCwKICAgICAgICB0eXBlQXJndW1lbnQsCiAgICAgICAgdHlwZUFyZ3VtZW50cywKICAgICAgICBsZWZ0QnJhY2tldCwKICAgICAgICBleHByZXNzaW9ucywKICAgICAgICByaWdodEJyYWNrZXQpOwogICAgbGlicmFyeUJ1aWxkZXIuY2hlY2tCb3VuZHNJbkxpc3RMaXRlcmFsKG5vZGUsIHR5cGVFbnZpcm9ubWVudCwgdXJpKTsKICAgIHB1c2gobm9kZSk7CiAgfQoKICB2b2lkIGJ1aWxkTGl0ZXJhbFNldChMaXN0PFVucmVzb2x2ZWRUeXBlPiB0eXBlQXJndW1lbnRzLCBUb2tlbiBjb25zdEtleXdvcmQsCiAgICAgIFRva2VuIGxlZnRCcmFjZSwgTGlzdDxkeW5hbWljPiBzZXRPck1hcEVudHJpZXMpIHsKICAgIERhcnRUeXBlIHR5cGVBcmd1bWVudDsKICAgIGlmICh0eXBlQXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgdHlwZUFyZ3VtZW50ID0gYnVpbGREYXJ0VHlwZSh0eXBlQXJndW1lbnRzLnNpbmdsZSk7CiAgICAgIGlmICghbGlicmFyeUJ1aWxkZXIubG9hZGVyLnRhcmdldC5sZWdhY3lNb2RlKSB7CiAgICAgICAgdHlwZUFyZ3VtZW50ID0gaW5zdGFudGlhdGVUb0JvdW5kcyh0eXBlQXJndW1lbnQsIGNvcmVUeXBlcy5vYmplY3RDbGFzcyk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHR5cGVBcmd1bWVudCA9IGltcGxpY2l0VHlwZUFyZ3VtZW50OwogICAgfQoKICAgIExpc3Q8RXhwcmVzc2lvbj4gZXhwcmVzc2lvbnMgPSA8RXhwcmVzc2lvbj5bXTsKICAgIGlmIChzZXRPck1hcEVudHJpZXMgIT0gbnVsbCkgewogICAgICBmb3IgKGR5bmFtaWMgZW50cnkgaW4gc2V0T3JNYXBFbnRyaWVzKSB7CiAgICAgICAgaWYgKGVudHJ5IGlzIE1hcEVudHJ5KSB7CiAgICAgICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogcmVwb3J0IHRoZSBlcnJvciBvbiB0aGUgY29sb24KICAgICAgICAgIGFkZFByb2JsZW0oZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCcsJyksCiAgICAgICAgICAgICAgZW50cnkuZmlsZU9mZnNldCwgMSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBSZXZpc2Ugb25jZSBjb250cm9sIGZsb3cgYW5kIHNwcmVhZAogICAgICAgICAgLy8gIGNvbGxlY3Rpb24gZW50cmllcyBhcmUgc3VwcG9ydGVkLgogICAgICAgICAgZXhwcmVzc2lvbnMuYWRkKGVudHJ5IGFzIEV4cHJlc3Npb24pOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIEV4cHJlc3Npb24gbm9kZSA9IGZvcmVzdC5jcmVhdGVTZXRMaXRlcmFsKAogICAgICAgIGNvbnN0S2V5d29yZCwKICAgICAgICBjb25zdEtleXdvcmQgIT0gbnVsbCB8fCBjb25zdGFudENvbnRleHQgPT0gQ29uc3RhbnRDb250ZXh0LmluZmVycmVkLAogICAgICAgIHR5cGVBcmd1bWVudCwKICAgICAgICB0eXBlQXJndW1lbnRzLAogICAgICAgIGxlZnRCcmFjZSwKICAgICAgICBleHByZXNzaW9ucywKICAgICAgICBsZWZ0QnJhY2UuZW5kR3JvdXApOwogICAgbGlicmFyeUJ1aWxkZXIuY2hlY2tCb3VuZHNJblNldExpdGVyYWwobm9kZSwgdHlwZUVudmlyb25tZW50LCB1cmkpOwogICAgcHVzaChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTGl0ZXJhbFNldE9yTWFwKAogICAgaW50IGNvdW50LAogICAgVG9rZW4gbGVmdEJyYWNlLAogICAgVG9rZW4gY29uc3RLZXl3b3JkLAogICAgVG9rZW4gcmlnaHRCcmFjZSwKICAgIC8vIFRPRE8oZGFucnViZWwpOiBoYXNTZXRFbnRyeSBwYXJhbWV0ZXIgZXhpc3RzIGZvciByZXBsaWNhdGluZyBleGlzdGluZwogICAgLy8gYmVoYXZpb3IgYW5kIHdpbGwgYmUgcmVtb3ZlZCBvbmNlIHVuaWZpZWQgY29sbGVjdGlvbiBoYXMgYmVlbiBlbmFibGVkCiAgICBib29sIGhhc1NldEVudHJ5LAogICkgewogICAgZGVidWdFdmVudCgiTGl0ZXJhbFNldE9yTWFwIik7CgogICAgTGlzdDxkeW5hbWljPiBzZXRPck1hcEVudHJpZXMgPQogICAgICAgIG5ldyBMaXN0PGR5bmFtaWM+LmZpbGxlZChjb3VudCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgZm9yIChpbnQgaSA9IGNvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgT2JqZWN0IGVsZW0gPSBwb3AoKTsKICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IFJldmlzZSB0aGlzIHRvIGhhbmRsZSBjb250cm9sIGZsb3cgYW5kIHNwcmVhZAogICAgICBpZiAoZWxlbSA9PSBpbnZhbGlkQ29sbGVjdGlvbkVsZW1lbnQpIHsKICAgICAgICBzZXRPck1hcEVudHJpZXMucmVtb3ZlQXQoaSk7CiAgICAgIH0gZWxzZSBpZiAoZWxlbSBpcyBNYXBFbnRyeSkgewogICAgICAgIHNldE9yTWFwRW50cmllc1tpXSA9IGVsZW07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2V0T3JNYXBFbnRyaWVzW2ldID0gdG9WYWx1ZShlbGVtKTsKICAgICAgfQogICAgfQogICAgTGlzdDxVbnJlc29sdmVkVHlwZT4gdHlwZUFyZ3VtZW50cyA9IHBvcCgpOwoKICAgIC8vIFJlcGxpY2F0ZSBleGlzdGluZyBiZWhhdmlvciB0aGF0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgcGFyc2VyLgogICAgLy8gVGhpcyB3aWxsIGJlIHJlbW92ZWQgb25jZSB1bmlmaWVkIGNvbGxlY3Rpb25zIGlzIGltcGxlbWVudGVkLgoKICAgIC8vIERldGVybWluZSBpZiB0aGlzIGlzIGEgc2V0IG9yIG1hcCBiYXNlZCBvbiB0eXBlIGFyZ3MgYW5kIGNvbnRlbnQKICAgIC8vIFRPRE8oZGFucnViZWwpOiBTaW5jZSB0eXBlIHJlc29sdXRpb24gaXMgbmVlZGVkIHRvIGRpc2FtYmlndWF0ZQogICAgLy8gc2V0IG9yIG1hcCBpbiBzb21lIHNpdHVhdGlvbnMsIGNvbnNpZGVyIGFsd2F5cyBkZWZlcnJpbmcgZGV0ZXJtaW5hdGlvbgogICAgLy8gdW50aWwgdGhlIHR5cGUgcmVzb2x1dGlvbiBwaGFzZS4KICAgIGZpbmFsIGludCB0eXBlQXJnQ291bnQgPSB0eXBlQXJndW1lbnRzPy5sZW5ndGg7CiAgICBib29sIGlzU2V0ID0gdHlwZUFyZ0NvdW50ID09IDEgPyB0cnVlIDogdHlwZUFyZ0NvdW50ICE9IG51bGwgPyBmYWxzZSA6IG51bGw7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXRPck1hcEVudHJpZXMubGVuZ3RoOyArK2kpIHsKICAgICAgaWYgKHNldE9yTWFwRW50cmllc1tpXSBpcyEgTWFwRW50cnkgJiYKICAgICAgICAgICFpc0NvbnZlcnRpYmxlVG9NYXBFbnRyeShzZXRPck1hcEVudHJpZXNbaV0pKSB7CiAgICAgICAgaGFzU2V0RW50cnkgPSB0cnVlOwogICAgICB9CiAgICB9CgogICAgLy8gVE9ETyhkYW5ydWJlbCk6IElmIHRoZSB0eXBlIGFyZ3VtZW50cyBhcmUgbm90IGtub3duIChudWxsKSB0aGVuCiAgICAvLyBkZWZlciBzZXQvbWFwIGRldGVybWluYXRpb24gdW50aWwgYWZ0ZXIgdHlwZSByZXNvbHV0aW9uIGFzIHBlciB0aGUKICAgIC8vIHVuaWZpZWQgY29sbGVjdGlvbiBzcGVjOiBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL2xhbmd1YWdlL3B1bGwvMjAwCiAgICAvLyByYXRoZXIgdGhhbiB0cnlpbmcgdG8gZ3Vlc3MgYXMgZG9uZSBiZWxvdy4KICAgIGlzU2V0ID8/PSBoYXNTZXRFbnRyeTsKCiAgICBpZiAoaXNTZXQpIHsKICAgICAgYnVpbGRMaXRlcmFsU2V0KHR5cGVBcmd1bWVudHMsIGNvbnN0S2V5d29yZCwgbGVmdEJyYWNlLCBzZXRPck1hcEVudHJpZXMpOwogICAgfSBlbHNlIHsKICAgICAgTGlzdDxNYXBFbnRyeT4gbWFwRW50cmllcyA9IG5ldyBMaXN0PE1hcEVudHJ5PihzZXRPck1hcEVudHJpZXMubGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXRPck1hcEVudHJpZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICBpZiAoc2V0T3JNYXBFbnRyaWVzW2ldIGlzIE1hcEVudHJ5KSB7CiAgICAgICAgICBtYXBFbnRyaWVzW2ldID0gc2V0T3JNYXBFbnRyaWVzW2ldOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBtYXBFbnRyaWVzW2ldID0gY29udmVydFRvTWFwRW50cnkoc2V0T3JNYXBFbnRyaWVzW2ldLCB0aGlzKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYnVpbGRMaXRlcmFsTWFwKHR5cGVBcmd1bWVudHMsIGNvbnN0S2V5d29yZCwgbGVmdEJyYWNlLCBtYXBFbnRyaWVzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTGl0ZXJhbEJvb2woVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkxpdGVyYWxCb29sIik7CiAgICBib29sIHZhbHVlID0gb3B0aW9uYWwoInRydWUiLCB0b2tlbik7CiAgICBhc3NlcnQodmFsdWUgfHwgb3B0aW9uYWwoImZhbHNlIiwgdG9rZW4pKTsKICAgIHB1c2goZm9yZXN0LmNyZWF0ZUJvb2xMaXRlcmFsKHZhbHVlLCB0b2tlbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVMaXRlcmFsRG91YmxlKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJMaXRlcmFsRG91YmxlIik7CiAgICBwdXNoKGZvcmVzdC5jcmVhdGVEb3VibGVMaXRlcmFsKGRvdWJsZS5wYXJzZSh0b2tlbi5sZXhlbWUpLCB0b2tlbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVMaXRlcmFsTnVsbChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiTGl0ZXJhbE51bGwiKTsKICAgIHB1c2goZm9yZXN0LmNyZWF0ZU51bGxMaXRlcmFsKG9mZnNldEZvclRva2VuKHRva2VuKSkpOwogIH0KCiAgdm9pZCBidWlsZExpdGVyYWxNYXAoTGlzdDxVbnJlc29sdmVkVHlwZT4gdHlwZUFyZ3VtZW50cywgVG9rZW4gY29uc3RLZXl3b3JkLAogICAgICBUb2tlbiBsZWZ0QnJhY2UsIExpc3Q8TWFwRW50cnk+IGVudHJpZXMpIHsKICAgIERhcnRUeXBlIGtleVR5cGU7CiAgICBEYXJ0VHlwZSB2YWx1ZVR5cGU7CiAgICBpZiAodHlwZUFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGlmICh0eXBlQXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7CiAgICAgICAga2V5VHlwZSA9IGNvbnN0IEludmFsaWRUeXBlKCk7CiAgICAgICAgdmFsdWVUeXBlID0gY29uc3QgSW52YWxpZFR5cGUoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBrZXlUeXBlID0gYnVpbGREYXJ0VHlwZSh0eXBlQXJndW1lbnRzWzBdKTsKICAgICAgICB2YWx1ZVR5cGUgPSBidWlsZERhcnRUeXBlKHR5cGVBcmd1bWVudHNbMV0pOwogICAgICAgIGlmICghbGVnYWN5TW9kZSkgewogICAgICAgICAga2V5VHlwZSA9IGluc3RhbnRpYXRlVG9Cb3VuZHMoa2V5VHlwZSwgY29yZVR5cGVzLm9iamVjdENsYXNzKTsKICAgICAgICAgIHZhbHVlVHlwZSA9IGluc3RhbnRpYXRlVG9Cb3VuZHModmFsdWVUeXBlLCBjb3JlVHlwZXMub2JqZWN0Q2xhc3MpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgRGFydFR5cGUgaW1wbGljaXRUeXBlQXJndW1lbnQgPSB0aGlzLmltcGxpY2l0VHlwZUFyZ3VtZW50OwogICAgICBrZXlUeXBlID0gaW1wbGljaXRUeXBlQXJndW1lbnQ7CiAgICAgIHZhbHVlVHlwZSA9IGltcGxpY2l0VHlwZUFyZ3VtZW50OwogICAgfQoKICAgIEV4cHJlc3Npb24gbm9kZSA9IGZvcmVzdC5jcmVhdGVNYXBMaXRlcmFsKAogICAgICAgIGNvbnN0S2V5d29yZCwKICAgICAgICBjb25zdEtleXdvcmQgIT0gbnVsbCB8fCBjb25zdGFudENvbnRleHQgPT0gQ29uc3RhbnRDb250ZXh0LmluZmVycmVkLAogICAgICAgIGtleVR5cGUsCiAgICAgICAgdmFsdWVUeXBlLAogICAgICAgIHR5cGVBcmd1bWVudHMsCiAgICAgICAgbGVmdEJyYWNlLAogICAgICAgIGVudHJpZXMsCiAgICAgICAgbGVmdEJyYWNlLmVuZEdyb3VwKTsKICAgIGxpYnJhcnlCdWlsZGVyLmNoZWNrQm91bmRzSW5NYXBMaXRlcmFsKG5vZGUsIHR5cGVFbnZpcm9ubWVudCwgdXJpKTsKICAgIHB1c2gobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUxpdGVyYWxNYXBFbnRyeShUb2tlbiBjb2xvbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkxpdGVyYWxNYXBFbnRyeSIpOwogICAgRXhwcmVzc2lvbiB2YWx1ZSA9IHBvcEZvclZhbHVlKCk7CiAgICBFeHByZXNzaW9uIGtleSA9IHBvcEZvclZhbHVlKCk7CiAgICBwdXNoKGZvcmVzdC5jcmVhdGVNYXBFbnRyeShrZXksIGNvbG9uLCB2YWx1ZSkpOwogIH0KCiAgU3RyaW5nIHN5bWJvbFBhcnRUb1N0cmluZyhuYW1lKSB7CiAgICBpZiAobmFtZSBpcyBJZGVudGlmaWVyKSB7CiAgICAgIHJldHVybiBuYW1lLm5hbWU7CiAgICB9IGVsc2UgaWYgKG5hbWUgaXMgT3BlcmF0b3IpIHsKICAgICAgcmV0dXJuIG5hbWUubmFtZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB1bmhhbmRsZWQoIiR7bmFtZS5ydW50aW1lVHlwZX0iLCAic3ltYm9sUGFydFRvU3RyaW5nIiwgLTEsIHVyaSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZExpdGVyYWxTeW1ib2woVG9rZW4gaGFzaFRva2VuLCBpbnQgaWRlbnRpZmllckNvdW50KSB7CiAgICBkZWJ1Z0V2ZW50KCJMaXRlcmFsU3ltYm9sIik7CiAgICBpZiAoaWRlbnRpZmllckNvdW50ID09IDEpIHsKICAgICAgT2JqZWN0IHBhcnQgPSBwb3AoKTsKICAgICAgaWYgKHBhcnQgaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgICBwdXNoKG5ldyBQYXJzZXJFcnJvckdlbmVyYXRvcigKICAgICAgICAgICAgdGhpcywgaGFzaFRva2VuLCBmYXN0YS5tZXNzYWdlU3ludGhldGljVG9rZW4pKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwdXNoKGZvcmVzdC5jcmVhdGVTeW1ib2xMaXRlcmFsKHN5bWJvbFBhcnRUb1N0cmluZyhwYXJ0KSwgaGFzaFRva2VuKSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIExpc3Q8SWRlbnRpZmllcj4gcGFydHMgPQogICAgICAgICAgY29uc3QgRml4ZWROdWxsYWJsZUxpc3Q8SWRlbnRpZmllcj4oKS5wb3Aoc3RhY2ssIGlkZW50aWZpZXJDb3VudCk7CiAgICAgIGlmIChwYXJ0cyA9PSBudWxsKSB7CiAgICAgICAgcHVzaChuZXcgUGFyc2VyRXJyb3JHZW5lcmF0b3IoCiAgICAgICAgICAgIHRoaXMsIGhhc2hUb2tlbiwgZmFzdGEubWVzc2FnZVN5bnRoZXRpY1Rva2VuKSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIFN0cmluZyB2YWx1ZSA9IHN5bWJvbFBhcnRUb1N0cmluZyhwYXJ0cy5maXJzdCk7CiAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YWx1ZSArPSAiLiR7c3ltYm9sUGFydFRvU3RyaW5nKHBhcnRzW2ldKX0iOwogICAgICB9CiAgICAgIHB1c2goZm9yZXN0LmNyZWF0ZVN5bWJvbExpdGVyYWwodmFsdWUsIGhhc2hUb2tlbikpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb25OdWxsQXNzZXJ0RXhwcmVzc2lvbihUb2tlbiBiYW5nKSB7CiAgICBpZiAoIWxpYnJhcnlCdWlsZGVyLmxvYWRlci50YXJnZXQuZW5hYmxlTm9uTnVsbGFibGUpIHsKICAgICAgcmVwb3J0Tm9uTnVsbEFzc2VydEV4cHJlc3Npb25Ob3RFbmFibGVkKGJhbmcpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVUeXBlKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIHF1ZXN0aW9uTWFyaykgewogICAgLy8gVE9ETyhhaGUpOiBUaGUgc2NvcGUgaXMgd3JvbmcgZm9yIHJldHVybiB0eXBlcyBvZiBnZW5lcmljIGZ1bmN0aW9ucy4KICAgIGRlYnVnRXZlbnQoIlR5cGUiKTsKICAgIGlmICghbGlicmFyeUJ1aWxkZXIubG9hZGVyLnRhcmdldC5lbmFibGVOb25OdWxsYWJsZSkgewogICAgICByZXBvcnRFcnJvcklmTnVsbGFibGVUeXBlKHF1ZXN0aW9uTWFyayk7CiAgICB9CiAgICBMaXN0PFVucmVzb2x2ZWRUeXBlPiBhcmd1bWVudHMgPSBwb3AoKTsKICAgIE9iamVjdCBuYW1lID0gcG9wKCk7CiAgICBpZiAobmFtZSBpcyBRdWFsaWZpZWROYW1lKSB7CiAgICAgIFF1YWxpZmllZE5hbWUgcXVhbGlmaWVkID0gbmFtZTsKICAgICAgT2JqZWN0IHByZWZpeCA9IHF1YWxpZmllZC5xdWFsaWZpZXI7CiAgICAgIFRva2VuIHN1ZmZpeCA9IGRlcHJlY2F0ZWRfZXh0cmFjdFRva2VuKHF1YWxpZmllZCk7CiAgICAgIGlmIChwcmVmaXggaXMgR2VuZXJhdG9yKSB7CiAgICAgICAgbmFtZSA9IHByZWZpeC5xdWFsaWZpZWRMb29rdXAoc3VmZml4KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBTdHJpbmcgbmFtZSA9IGdldE5vZGVOYW1lKHByZWZpeCk7CiAgICAgICAgU3RyaW5nIGRpc3BsYXlOYW1lID0gZGVidWdOYW1lKG5hbWUsIHN1ZmZpeC5sZXhlbWUpOwogICAgICAgIGludCBvZmZzZXQgPSBvZmZzZXRGb3JUb2tlbihiZWdpblRva2VuKTsKICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBmYXN0YS50ZW1wbGF0ZU5vdEFUeXBlLndpdGhBcmd1bWVudHMoZGlzcGxheU5hbWUpOwogICAgICAgIGxpYnJhcnlCdWlsZGVyLmFkZFByb2JsZW0oCiAgICAgICAgICAgIG1lc3NhZ2UsIG9mZnNldCwgbGVuZ3RoT2ZTcGFuKGJlZ2luVG9rZW4sIHN1ZmZpeCksIHVyaSk7CiAgICAgICAgcHVzaChuZXcgVW5yZXNvbHZlZFR5cGUoCiAgICAgICAgICAgIG5ldyBOYW1lZFR5cGVCdWlsZGVyKG5hbWUsIG51bGwpCiAgICAgICAgICAgICAgLi5iaW5kKG5ldyBJbnZhbGlkVHlwZUJ1aWxkZXIoCiAgICAgICAgICAgICAgICAgIG5hbWUsCiAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgICAgICAgICAgdXJpLCBvZmZzZXQsIGxlbmd0aE9mU3BhbihiZWdpblRva2VuLCBzdWZmaXgpKSkpLAogICAgICAgICAgICBvZmZzZXQsCiAgICAgICAgICAgIHVyaSkpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgVHlwZUJ1aWxkZXIgcmVzdWx0OwogICAgaWYgKG5hbWUgaXMgR2VuZXJhdG9yKSB7CiAgICAgIHJlc3VsdCA9IG5hbWUuYnVpbGRUeXBlV2l0aFJlc29sdmVkQXJndW1lbnRzKGFyZ3VtZW50cyk7CiAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgewogICAgICAgIHVuaGFuZGxlZCgibnVsbCIsICJyZXN1bHQiLCBiZWdpblRva2VuLmNoYXJPZmZzZXQsIHVyaSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAobmFtZSBpcyBQcm9ibGVtQnVpbGRlcikgewogICAgICAvLyBUT0RPKGFoZSk6IEFyZ3VtZW50cyBjb3VsZCBiZSBwYXNzZWQgaGVyZS4KICAgICAgbGlicmFyeUJ1aWxkZXIuYWRkUHJvYmxlbSgKICAgICAgICAgIG5hbWUubWVzc2FnZSwgbmFtZS5jaGFyT2Zmc2V0LCBuYW1lLm5hbWUubGVuZ3RoLCBuYW1lLmZpbGVVcmkpOwogICAgICByZXN1bHQgPSBuZXcgTmFtZWRUeXBlQnVpbGRlcihuYW1lLm5hbWUsIG51bGwpCiAgICAgICAgLi5iaW5kKG5ldyBJbnZhbGlkVHlwZUJ1aWxkZXIoCiAgICAgICAgICAgIG5hbWUubmFtZSwKICAgICAgICAgICAgbmFtZS5tZXNzYWdlLndpdGhMb2NhdGlvbigKICAgICAgICAgICAgICAgIG5hbWUuZmlsZVVyaSwgbmFtZS5jaGFyT2Zmc2V0LCBuYW1lLm5hbWUubGVuZ3RoKSkpOwogICAgfSBlbHNlIHsKICAgICAgdW5oYW5kbGVkKAogICAgICAgICAgIiR7bmFtZS5ydW50aW1lVHlwZX0iLCAiaGFuZGxlVHlwZSIsIGJlZ2luVG9rZW4uY2hhck9mZnNldCwgdXJpKTsKICAgIH0KICAgIHB1c2gobmV3IFVucmVzb2x2ZWRUeXBlKHJlc3VsdCwgYmVnaW5Ub2tlbi5jaGFyT2Zmc2V0LCB1cmkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5GdW5jdGlvblR5cGUoVG9rZW4gYmVnaW5Ub2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5GdW5jdGlvblR5cGUiKTsKICB9CgogIHZvaWQgZW50ZXJGdW5jdGlvblR5cGVTY29wZShMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMpIHsKICAgIGRlYnVnRXZlbnQoImVudGVyRnVuY3Rpb25UeXBlU2NvcGUiKTsKICAgIGVudGVyTG9jYWxTY29wZShudWxsLAogICAgICAgIHNjb3BlLmNyZWF0ZU5lc3RlZFNjb3BlKCJmdW5jdGlvbi10eXBlIHNjb3BlIiwgaXNNb2RpZmlhYmxlOiB0cnVlKSk7CiAgICBpZiAodHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgIFNjb3BlQnVpbGRlciBzY29wZUJ1aWxkZXIgPSBuZXcgU2NvcGVCdWlsZGVyKHNjb3BlKTsKICAgICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIGJ1aWxkZXIgaW4gdHlwZVZhcmlhYmxlcykgewogICAgICAgIFN0cmluZyBuYW1lID0gYnVpbGRlci5uYW1lOwogICAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXIgZXhpc3RpbmcgPSBzY29wZUJ1aWxkZXJbbmFtZV07CiAgICAgICAgaWYgKGV4aXN0aW5nID09IG51bGwpIHsKICAgICAgICAgIHNjb3BlQnVpbGRlci5hZGRNZW1iZXIobmFtZSwgYnVpbGRlcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlcG9ydER1cGxpY2F0ZWREZWNsYXJhdGlvbihleGlzdGluZywgbmFtZSwgYnVpbGRlci5jaGFyT2Zmc2V0KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRnVuY3Rpb25UeXBlKFRva2VuIGZ1bmN0aW9uVG9rZW4sIFRva2VuIHF1ZXN0aW9uTWFyaykgewogICAgZGVidWdFdmVudCgiRnVuY3Rpb25UeXBlIik7CiAgICBpZiAoIWxpYnJhcnlCdWlsZGVyLmxvYWRlci50YXJnZXQuZW5hYmxlTm9uTnVsbGFibGUpIHsKICAgICAgcmVwb3J0RXJyb3JJZk51bGxhYmxlVHlwZShxdWVzdGlvbk1hcmspOwogICAgfQogICAgRm9ybWFsUGFyYW1ldGVycyBmb3JtYWxzID0gcG9wKCk7CiAgICBVbnJlc29sdmVkVHlwZSByZXR1cm5UeXBlID0gcG9wKCk7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMgPSBwb3AoKTsKICAgIFVucmVzb2x2ZWRUeXBlIHR5cGUgPSBmb3JtYWxzLnRvRnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIHR5cGVWYXJpYWJsZXMpOwogICAgZXhpdExvY2FsU2NvcGUoKTsKICAgIHB1c2godHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVZvaWRLZXl3b3JkKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJWb2lkS2V5d29yZCIpOwogICAgaW50IG9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICAgIHB1c2gobmV3IFVucmVzb2x2ZWRUeXBlKAogICAgICAgIG5ldyBOYW1lZFR5cGVCdWlsZGVyKCJ2b2lkIiwgbnVsbCkKICAgICAgICAgIC4uYmluZChuZXcgVm9pZFR5cGVCdWlsZGVyKGNvbnN0IFZvaWRUeXBlKCksIGxpYnJhcnlCdWlsZGVyLCBvZmZzZXQpKSwKICAgICAgICBvZmZzZXQsCiAgICAgICAgdXJpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUFzT3BlcmF0b3IoVG9rZW4gb3BlcmF0b3IpIHsKICAgIGRlYnVnRXZlbnQoIkFzT3BlcmF0b3IiKTsKICAgIERhcnRUeXBlIHR5cGUgPSBidWlsZERhcnRUeXBlKHBvcCgpKTsKICAgIGxpYnJhcnlCdWlsZGVyLmNoZWNrQm91bmRzSW5UeXBlKAogICAgICAgIHR5cGUsIHR5cGVFbnZpcm9ubWVudCwgdXJpLCBvcGVyYXRvci5jaGFyT2Zmc2V0KTsKICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBvcEZvclZhbHVlKCk7CiAgICBFeHByZXNzaW9uIGFzRXhwcmVzc2lvbiA9CiAgICAgICAgZm9yZXN0LmNyZWF0ZUFzRXhwcmVzc2lvbihleHByZXNzaW9uLCB0eXBlLCBvcGVyYXRvcik7CiAgICBwdXNoKGFzRXhwcmVzc2lvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUlzT3BlcmF0b3IoVG9rZW4gaXNPcGVyYXRvciwgVG9rZW4gbm90KSB7CiAgICBkZWJ1Z0V2ZW50KCJJc09wZXJhdG9yIik7CiAgICBEYXJ0VHlwZSB0eXBlID0gYnVpbGREYXJ0VHlwZShwb3AoKSk7CiAgICBFeHByZXNzaW9uIG9wZXJhbmQgPSBwb3BGb3JWYWx1ZSgpOwogICAgYm9vbCBpc0ludmVydGVkID0gbm90ICE9IG51bGw7CiAgICBFeHByZXNzaW9uIGlzRXhwcmVzc2lvbiA9CiAgICAgICAgZm9yZXN0LmNyZWF0ZUlzRXhwcmVzc2lvbihvcGVyYW5kLCBpc09wZXJhdG9yLCBub3QsIHR5cGUpOwogICAgbGlicmFyeUJ1aWxkZXIuY2hlY2tCb3VuZHNJblR5cGUoCiAgICAgICAgdHlwZSwgdHlwZUVudmlyb25tZW50LCB1cmksIGlzT3BlcmF0b3IuY2hhck9mZnNldCk7CiAgICBpZiAob3BlcmFuZCBpcyBWYXJpYWJsZUdldCkgewogICAgICB0eXBlUHJvbW90ZXI/LmhhbmRsZUlzQ2hlY2soaXNFeHByZXNzaW9uLCBpc0ludmVydGVkLCBvcGVyYW5kLnZhcmlhYmxlLAogICAgICAgICAgdHlwZSwgZnVuY3Rpb25OZXN0aW5nTGV2ZWwpOwogICAgfQogICAgcHVzaChpc0V4cHJlc3Npb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkNvbmRpdGlvbmFsRXhwcmVzc2lvbihUb2tlbiBxdWVzdGlvbikgewogICAgRXhwcmVzc2lvbiBjb25kaXRpb24gPSBwb3BGb3JWYWx1ZSgpOwogICAgdHlwZVByb21vdGVyPy5lbnRlclRoZW4oY29uZGl0aW9uKTsKICAgIHB1c2goY29uZGl0aW9uKTsKICAgIHN1cGVyLmJlZ2luQ29uZGl0aW9uYWxFeHByZXNzaW9uKHF1ZXN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ29uZGl0aW9uYWxFeHByZXNzaW9uQ29sb24oKSB7CiAgICBFeHByZXNzaW9uIHRoZW4gPSBwb3BGb3JWYWx1ZSgpOwogICAgdHlwZVByb21vdGVyPy5lbnRlckVsc2UoKTsKICAgIHB1c2godGhlbik7CiAgICBzdXBlci5oYW5kbGVDb25kaXRpb25hbEV4cHJlc3Npb25Db2xvbigpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDb25kaXRpb25hbEV4cHJlc3Npb24oVG9rZW4gcXVlc3Rpb24sIFRva2VuIGNvbG9uKSB7CiAgICBkZWJ1Z0V2ZW50KCJDb25kaXRpb25hbEV4cHJlc3Npb24iKTsKICAgIEV4cHJlc3Npb24gZWxzZUV4cHJlc3Npb24gPSBwb3BGb3JWYWx1ZSgpOwogICAgRXhwcmVzc2lvbiB0aGVuRXhwcmVzc2lvbiA9IHBvcCgpOwogICAgRXhwcmVzc2lvbiBjb25kaXRpb24gPSBwb3AoKTsKICAgIHR5cGVQcm9tb3Rlcj8uZXhpdENvbmRpdGlvbmFsKCk7CiAgICBwdXNoKGZvcmVzdC5jcmVhdGVDb25kaXRpb25hbEV4cHJlc3Npb24oCiAgICAgICAgY29uZGl0aW9uLCBxdWVzdGlvbiwgdGhlbkV4cHJlc3Npb24sIGNvbG9uLCBlbHNlRXhwcmVzc2lvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVUaHJvd0V4cHJlc3Npb24oVG9rZW4gdGhyb3dUb2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlRocm93RXhwcmVzc2lvbiIpOwogICAgRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcG9wRm9yVmFsdWUoKTsKICAgIGlmIChjb25zdGFudENvbnRleHQgIT0gQ29uc3RhbnRDb250ZXh0Lm5vbmUpIHsKICAgICAgcHVzaChidWlsZFByb2JsZW0oCiAgICAgICAgICBmYXN0YS50ZW1wbGF0ZU5vdENvbnN0YW50RXhwcmVzc2lvbi53aXRoQXJndW1lbnRzKCdUaHJvdycpLAogICAgICAgICAgdGhyb3dUb2tlbi5vZmZzZXQsCiAgICAgICAgICB0aHJvd1Rva2VuLmxlbmd0aCkpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChmb3Jlc3QuY3JlYXRlVGhyb3codGhyb3dUb2tlbiwgZXhwcmVzc2lvbikpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZvcm1hbFBhcmFtZXRlcihUb2tlbiB0b2tlbiwgTWVtYmVyS2luZCBraW5kLCBUb2tlbiByZXF1aXJlZFRva2VuLAogICAgICBUb2tlbiBjb3ZhcmlhbnRUb2tlbiwgVG9rZW4gdmFyRmluYWxPckNvbnN0KSB7CiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogaGFuZGxlIHJlcXVpcmVkIHRva2VuCiAgICBpZiAoIWxpYnJhcnlCdWlsZGVyLmxvYWRlci50YXJnZXQuZW5hYmxlTm9uTnVsbGFibGUpIHsKICAgICAgcmVwb3J0Tm9uTnVsbGFibGVNb2RpZmllckVycm9yKHJlcXVpcmVkVG9rZW4pOwogICAgfQogICAgcHVzaCgoY292YXJpYW50VG9rZW4gIT0gbnVsbCA/IGNvdmFyaWFudE1hc2sgOiAwKSB8CiAgICAgICAgTW9kaWZpZXIudmFsaWRhdGVWYXJGaW5hbE9yQ29uc3QodmFyRmluYWxPckNvbnN0Py5sZXhlbWUpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRm9ybWFsUGFyYW1ldGVyKAogICAgICBUb2tlbiB0aGlzS2V5d29yZCwKICAgICAgVG9rZW4gcGVyaW9kQWZ0ZXJUaGlzLAogICAgICBUb2tlbiBuYW1lVG9rZW4sCiAgICAgIFRva2VuIGluaXRpYWxpemVyU3RhcnQsCiAgICAgIFRva2VuIGluaXRpYWxpemVyRW5kLAogICAgICBGb3JtYWxQYXJhbWV0ZXJLaW5kIGtpbmQsCiAgICAgIE1lbWJlcktpbmQgbWVtYmVyS2luZCkgewogICAgZGVidWdFdmVudCgiRm9ybWFsUGFyYW1ldGVyIik7CiAgICBpZiAodGhpc0tleXdvcmQgIT0gbnVsbCkgewogICAgICBpZiAoIWluQ29uc3RydWN0b3IpIHsKICAgICAgICBoYW5kbGVSZWNvdmVyYWJsZUVycm9yKGZhc3RhLm1lc3NhZ2VGaWVsZEluaXRpYWxpemVyT3V0c2lkZUNvbnN0cnVjdG9yLAogICAgICAgICAgICB0aGlzS2V5d29yZCwgdGhpc0tleXdvcmQpOwogICAgICAgIHRoaXNLZXl3b3JkID0gbnVsbDsKICAgICAgfQogICAgfQogICAgT2JqZWN0IG5hbWVOb2RlID0gcG9wKCk7CiAgICBVbnJlc29sdmVkVHlwZSB0eXBlID0gcG9wKCk7CiAgICBpZiAoZnVuY3Rpb25OZXN0aW5nTGV2ZWwgPT0gMCkgewogICAgICAvLyBUT0RPKGFoZSk6IFRoZSB0eXBlIHdlIGNvbXB1dGUgaGVyZSBtYXkgYmUgZGlmZmVyZW50IGZyb20gd2hhdCBpcwogICAgICAvLyBjb21wdXRlZCBpbiB0aGUgb3V0bGluZSBwaGFzZS4gV2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSBvdXRsaW5lCiAgICAgIC8vIHBoYXNlIGNvbXB1dGVzIHRoZSBzYW1lIHR5cGUuIFNlZQogICAgICAvLyBwa2cvZnJvbnRfZW5kL3Rlc3RjYXNlcy9kZWZlcnJlZF90eXBlX2Fubm90YXRpb24uZGFydCBmb3IgYW4gZXhhbXBsZQogICAgICAvLyB3aGVyZSBub3QgY2FsbGluZyBbYnVpbGREYXJ0VHlwZV0gbGVhZHMgdG8gYSBtaXNzaW5nIGNvbXBpbGUtdGltZQogICAgICAvLyBlcnJvci4gQWxzbywgbm90aWNlIHRoYXQgdGhlIHR5cGUgb2YgdGhlIHByb2JsZW1hdGljIHBhcmFtZXRlciBpc24ndAogICAgICAvLyBgaW52YWxpZC10eXBlYC4KICAgICAgYnVpbGREYXJ0VHlwZSh0eXBlKTsKICAgIH0KICAgIGludCBtb2RpZmllcnMgPSBwb3AoKTsKICAgIGlmIChpbkNhdGNoQ2xhdXNlKSB7CiAgICAgIG1vZGlmaWVycyB8PSBmaW5hbE1hc2s7CiAgICB9CiAgICBMaXN0PEV4cHJlc3Npb24+IGFubm90YXRpb25zID0gcG9wKCk7CiAgICBpZiAobmFtZU5vZGUgaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgcHVzaChuYW1lTm9kZSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIElkZW50aWZpZXIgbmFtZSA9IG5hbWVOb2RlOwogICAgRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBwYXJhbWV0ZXI7CiAgICBpZiAoIWluQ2F0Y2hDbGF1c2UgJiYKICAgICAgICBmdW5jdGlvbk5lc3RpbmdMZXZlbCA9PSAwICYmCiAgICAgICAgbWVtYmVyS2luZCAhPSBNZW1iZXJLaW5kLkdlbmVyYWxpemVkRnVuY3Rpb25UeXBlKSB7CiAgICAgIEZ1bmN0aW9uQnVpbGRlciBtZW1iZXIgPSB0aGlzLm1lbWJlcjsKICAgICAgcGFyYW1ldGVyID0gbWVtYmVyLmdldEZvcm1hbChuYW1lLm5hbWUpOwogICAgICBpZiAocGFyYW1ldGVyID09IG51bGwpIHsKICAgICAgICBwdXNoKG5ldyBQYXJzZXJSZWNvdmVyeShuYW1lVG9rZW4uY2hhck9mZnNldCkpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcGFyYW1ldGVyID0gbmV3IEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIobnVsbCwgbW9kaWZpZXJzLCB0eXBlPy5idWlsZGVyLAogICAgICAgICAgbmFtZT8ubmFtZSwgbGlicmFyeUJ1aWxkZXIsIG9mZnNldEZvclRva2VuKG5hbWVUb2tlbikpOwogICAgfQogICAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSA9CiAgICAgICAgcGFyYW1ldGVyLmJ1aWxkKGxpYnJhcnlCdWlsZGVyLCBmdW5jdGlvbk5lc3RpbmdMZXZlbCk7CiAgICBFeHByZXNzaW9uIGluaXRpYWxpemVyID0gbmFtZT8uaW5pdGlhbGl6ZXI7CiAgICBpZiAoaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICBpZiAobWVtYmVyIGlzIFJlZGlyZWN0aW5nRmFjdG9yeUJ1aWxkZXIpIHsKICAgICAgICBSZWRpcmVjdGluZ0ZhY3RvcnlCdWlsZGVyIGZhY3RvcnkgPSBtZW1iZXI7CiAgICAgICAgYWRkUHJvYmxlbSgKICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVEZWZhdWx0VmFsdWVJblJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yCiAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhmYWN0b3J5LnJlZGlyZWN0aW9uVGFyZ2V0LmZ1bGxOYW1lRm9yRXJyb3JzKSwKICAgICAgICAgICAgaW5pdGlhbGl6ZXIuZmlsZU9mZnNldCwKICAgICAgICAgICAgbm9MZW5ndGgpOwogICAgICB9IGVsc2UgewogICAgICAgIHZhcmlhYmxlLmluaXRpYWxpemVyID0gaW5pdGlhbGl6ZXIuLnBhcmVudCA9IHZhcmlhYmxlOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGtpbmQgIT0gRm9ybWFsUGFyYW1ldGVyS2luZC5tYW5kYXRvcnkpIHsKICAgICAgdmFyaWFibGUuaW5pdGlhbGl6ZXIgPz89IGZvcmVzdC5jcmVhdGVOdWxsTGl0ZXJhbChudWxsKQogICAgICAgIC4ucGFyZW50ID0gdmFyaWFibGU7CiAgICB9CiAgICBpZiAoYW5ub3RhdGlvbnMgIT0gbnVsbCkgewogICAgICBpZiAoZnVuY3Rpb25OZXN0aW5nTGV2ZWwgPT0gMCkgewogICAgICAgIGluZmVyQW5ub3RhdGlvbnMoYW5ub3RhdGlvbnMpOwogICAgICB9CiAgICAgIGZvciAoRXhwcmVzc2lvbiBhbm5vdGF0aW9uIGluIGFubm90YXRpb25zKSB7CiAgICAgICAgdmFyaWFibGUuYWRkQW5ub3RhdGlvbihhbm5vdGF0aW9uKTsKICAgICAgfQogICAgfQogICAgcHVzaChwYXJhbWV0ZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRPcHRpb25hbEZvcm1hbFBhcmFtZXRlcnMoCiAgICAgIGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk9wdGlvbmFsRm9ybWFsUGFyYW1ldGVycyIpOwogICAgRm9ybWFsUGFyYW1ldGVyS2luZCBraW5kID0gb3B0aW9uYWwoInsiLCBiZWdpblRva2VuKQogICAgICAgID8gRm9ybWFsUGFyYW1ldGVyS2luZC5vcHRpb25hbE5hbWVkCiAgICAgICAgOiBGb3JtYWxQYXJhbWV0ZXJLaW5kLm9wdGlvbmFsUG9zaXRpb25hbDsKICAgIC8vIFdoZW4gcmVjb3ZlcmluZyBmcm9tIGFuIGVtcHR5IGxpc3Qgb2Ygb3B0aW9uYWwgYXJndW1lbnRzLCBjb3VudCBtYXkgYmUKICAgIC8vIDAuIEl0IG1pZ2h0IGJlIHNpbXBsZXIgaWYgdGhlIHBhcnNlciBkaWRuJ3QgY2FsbCB0aGlzIG1ldGhvZCBpbiB0aGF0CiAgICAvLyBjYXNlLCBob3dldmVyLCB0aGVuIFtiZWdpbk9wdGlvbmFsRm9ybWFsUGFyYW1ldGVyc10gd291bGRuJ3QgYWx3YXlzIGJlCiAgICAvLyBtYXRjaGVkIGJ5IHRoaXMgbWV0aG9kLgogICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBwYXJhbWV0ZXJzID0KICAgICAgICBjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPigpLnBvcChzdGFjaywgY291bnQpOwogICAgaWYgKHBhcmFtZXRlcnMgPT0gbnVsbCkgewogICAgICBwdXNoKG5ldyBQYXJzZXJSZWNvdmVyeShvZmZzZXRGb3JUb2tlbihiZWdpblRva2VuKSkpOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIHBhcmFtZXRlciBpbiBwYXJhbWV0ZXJzKSB7CiAgICAgICAgcGFyYW1ldGVyLmtpbmQgPSBraW5kOwogICAgICB9CiAgICAgIHB1c2gocGFyYW1ldGVycyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRnVuY3Rpb25UeXBlZEZvcm1hbFBhcmFtZXRlcihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5GdW5jdGlvblR5cGVkRm9ybWFsUGFyYW1ldGVyIik7CiAgICBmdW5jdGlvbk5lc3RpbmdMZXZlbCsrOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGdW5jdGlvblR5cGVkRm9ybWFsUGFyYW1ldGVyKFRva2VuIG5hbWVUb2tlbiwgVG9rZW4gcXVlc3Rpb24pIHsKICAgIGRlYnVnRXZlbnQoIkZ1bmN0aW9uVHlwZWRGb3JtYWxQYXJhbWV0ZXIiKTsKICAgIGlmIChpbkNhdGNoQ2xhdXNlIHx8IGZ1bmN0aW9uTmVzdGluZ0xldmVsICE9IDApIHsKICAgICAgZXhpdExvY2FsU2NvcGUoKTsKICAgIH0KICAgIEZvcm1hbFBhcmFtZXRlcnMgZm9ybWFscyA9IHBvcCgpOwogICAgVW5yZXNvbHZlZFR5cGUgcmV0dXJuVHlwZSA9IHBvcCgpOwogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzID0gcG9wKCk7CiAgICBpZiAoIWxpYnJhcnlCdWlsZGVyLmxvYWRlci50YXJnZXQuZW5hYmxlTm9uTnVsbGFibGUpIHsKICAgICAgcmVwb3J0RXJyb3JJZk51bGxhYmxlVHlwZShxdWVzdGlvbik7CiAgICB9CiAgICBVbnJlc29sdmVkVHlwZSB0eXBlID0gZm9ybWFscy50b0Z1bmN0aW9uVHlwZShyZXR1cm5UeXBlLCB0eXBlVmFyaWFibGVzKTsKICAgIGV4aXRMb2NhbFNjb3BlKCk7CiAgICBwdXNoKHR5cGUpOwogICAgZnVuY3Rpb25OZXN0aW5nTGV2ZWwtLTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Gb3JtYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVFeHByZXNzaW9uKCkgewogICAgc3VwZXIucHVzaChjb25zdGFudENvbnRleHQpOwogICAgY29uc3RhbnRDb250ZXh0ID0gQ29uc3RhbnRDb250ZXh0LnJlcXVpcmVkOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGb3JtYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVFeHByZXNzaW9uKCkgewogICAgZGVidWdFdmVudCgiRm9ybWFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlRXhwcmVzc2lvbiIpOwogICAgT2JqZWN0IGRlZmF1bHRWYWx1ZUV4cHJlc3Npb24gPSBwb3AoKTsKICAgIGNvbnN0YW50Q29udGV4dCA9IHBvcCgpOwogICAgcHVzaChkZWZhdWx0VmFsdWVFeHByZXNzaW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVmFsdWVkRm9ybWFsUGFyYW1ldGVyKFRva2VuIGVxdWFscywgVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlZhbHVlZEZvcm1hbFBhcmFtZXRlciIpOwogICAgRXhwcmVzc2lvbiBpbml0aWFsaXplciA9IHBvcEZvclZhbHVlKCk7CiAgICBPYmplY3QgbmFtZSA9IHBvcCgpOwogICAgaWYgKG5hbWUgaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgcHVzaChuYW1lKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2gobmV3IEluaXRpYWxpemVkSWRlbnRpZmllcihuYW1lLCBpbml0aWFsaXplcikpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVGb3JtYWxQYXJhbWV0ZXJXaXRob3V0VmFsdWUoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkZvcm1hbFBhcmFtZXRlcldpdGhvdXRWYWx1ZSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZvcm1hbFBhcmFtZXRlcnMoVG9rZW4gdG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgc3VwZXIucHVzaChjb25zdGFudENvbnRleHQpOwogICAgY29uc3RhbnRDb250ZXh0ID0gQ29uc3RhbnRDb250ZXh0Lm5vbmU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZvcm1hbFBhcmFtZXRlcnMoCiAgICAgIGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgZGVidWdFdmVudCgiRm9ybWFsUGFyYW1ldGVycyIpOwogICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBvcHRpb25hbHM7CiAgICBpbnQgb3B0aW9uYWxzQ291bnQgPSAwOwogICAgaWYgKGNvdW50ID4gMCAmJiBwZWVrKCkgaXMgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPikgewogICAgICBvcHRpb25hbHMgPSBwb3AoKTsKICAgICAgY291bnQtLTsKICAgICAgb3B0aW9uYWxzQ291bnQgPSBvcHRpb25hbHMubGVuZ3RoOwogICAgfQogICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBwYXJhbWV0ZXJzID0KICAgICAgICBjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPigpCiAgICAgICAgICAgIC5wb3BQYWRkZWQoc3RhY2ssIGNvdW50LCBvcHRpb25hbHNDb3VudCk7CiAgICBpZiAob3B0aW9uYWxzICE9IG51bGwgJiYgcGFyYW1ldGVycyAhPSBudWxsKSB7CiAgICAgIHBhcmFtZXRlcnMuc2V0UmFuZ2UoY291bnQsIGNvdW50ICsgb3B0aW9uYWxzQ291bnQsIG9wdGlvbmFscyk7CiAgICB9CiAgICBhc3NlcnQocGFyYW1ldGVycz8uaXNOb3RFbXB0eSA/PyB0cnVlKTsKICAgIEZvcm1hbFBhcmFtZXRlcnMgZm9ybWFscyA9IG5ldyBGb3JtYWxQYXJhbWV0ZXJzKHBhcmFtZXRlcnMsCiAgICAgICAgb2Zmc2V0Rm9yVG9rZW4oYmVnaW5Ub2tlbiksIGxlbmd0aE9mU3BhbihiZWdpblRva2VuLCBlbmRUb2tlbiksIHVyaSk7CiAgICBjb25zdGFudENvbnRleHQgPSBwb3AoKTsKICAgIHB1c2goZm9ybWFscyk7CiAgICBpZiAoKGluQ2F0Y2hDbGF1c2UgfHwgZnVuY3Rpb25OZXN0aW5nTGV2ZWwgIT0gMCkgJiYKICAgICAgICBraW5kICE9IE1lbWJlcktpbmQuR2VuZXJhbGl6ZWRGdW5jdGlvblR5cGUpIHsKICAgICAgZW50ZXJMb2NhbFNjb3BlKAogICAgICAgICAgbnVsbCwKICAgICAgICAgIGZvcm1hbHMuY29tcHV0ZUZvcm1hbFBhcmFtZXRlclNjb3BlKAogICAgICAgICAgICAgIHNjb3BlLCBtZW1iZXIgPz8gY2xhc3NCdWlsZGVyID8/IGxpYnJhcnlCdWlsZGVyLCB0aGlzKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ2F0Y2hDbGF1c2UoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luQ2F0Y2hDbGF1c2UiKTsKICAgIGluQ2F0Y2hDbGF1c2UgPSB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDYXRjaENsYXVzZShUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiQ2F0Y2hDbGF1c2UiKTsKICAgIGluQ2F0Y2hDbGF1c2UgPSBmYWxzZTsKICAgIHB1c2goaW5DYXRjaEJsb2NrKTsKICAgIGluQ2F0Y2hCbG9jayA9IHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNhdGNoQmxvY2soVG9rZW4gb25LZXl3b3JkLCBUb2tlbiBjYXRjaEtleXdvcmQsIFRva2VuIGNvbW1hKSB7CiAgICBkZWJ1Z0V2ZW50KCJDYXRjaEJsb2NrIik7CiAgICBTdGF0ZW1lbnQgYm9keSA9IHBvcCgpOwogICAgaW5DYXRjaEJsb2NrID0gcG9wKCk7CiAgICBpZiAoY2F0Y2hLZXl3b3JkICE9IG51bGwpIHsKICAgICAgZXhpdExvY2FsU2NvcGUoKTsKICAgIH0KICAgIEZvcm1hbFBhcmFtZXRlcnMgY2F0Y2hQYXJhbWV0ZXJzID0gcG9wSWZOb3ROdWxsKGNhdGNoS2V5d29yZCk7CiAgICBEYXJ0VHlwZSBleGNlcHRpb25UeXBlID0KICAgICAgICBidWlsZERhcnRUeXBlKHBvcElmTm90TnVsbChvbktleXdvcmQpKSA/PyBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBleGNlcHRpb247CiAgICBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIHN0YWNrVHJhY2U7CiAgICBMaXN0PFN0YXRlbWVudD4gY29tcGlsZVRpbWVFcnJvcnM7CiAgICBpZiAoY2F0Y2hQYXJhbWV0ZXJzPy5wYXJhbWV0ZXJzICE9IG51bGwpIHsKICAgICAgaW50IHBhcmFtZXRlckNvdW50ID0gY2F0Y2hQYXJhbWV0ZXJzLnBhcmFtZXRlcnMubGVuZ3RoOwogICAgICBpZiAocGFyYW1ldGVyQ291bnQgPiAwKSB7CiAgICAgICAgZXhjZXB0aW9uID0gY2F0Y2hQYXJhbWV0ZXJzLnBhcmFtZXRlcnNbMF07CiAgICAgICAgZXhjZXB0aW9uLmJ1aWxkKGxpYnJhcnlCdWlsZGVyLCBmdW5jdGlvbk5lc3RpbmdMZXZlbCkudHlwZSA9CiAgICAgICAgICAgIGV4Y2VwdGlvblR5cGU7CiAgICAgICAgaWYgKHBhcmFtZXRlckNvdW50ID4gMSkgewogICAgICAgICAgc3RhY2tUcmFjZSA9IGNhdGNoUGFyYW1ldGVycy5wYXJhbWV0ZXJzWzFdOwogICAgICAgICAgc3RhY2tUcmFjZS5idWlsZChsaWJyYXJ5QnVpbGRlciwgZnVuY3Rpb25OZXN0aW5nTGV2ZWwpLnR5cGUgPQogICAgICAgICAgICAgIGNvcmVUeXBlcy5zdGFja1RyYWNlQ2xhc3MucmF3VHlwZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHBhcmFtZXRlckNvdW50ID4gMikgewogICAgICAgIC8vIElmIHBhcmFtZXRlckNvdW50IGlzIDAsIHRoZSBwYXJzZXIgcmVwb3J0ZWQgYW4gZXJyb3IgYWxyZWFkeS4KICAgICAgICBpZiAocGFyYW1ldGVyQ291bnQgIT0gMCkgewogICAgICAgICAgZm9yIChpbnQgaSA9IDI7IGkgPCBwYXJhbWV0ZXJDb3VudDsgaSsrKSB7CiAgICAgICAgICAgIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgcGFyYW1ldGVyID0gY2F0Y2hQYXJhbWV0ZXJzLnBhcmFtZXRlcnNbaV07CiAgICAgICAgICAgIGNvbXBpbGVUaW1lRXJyb3JzID8/PSA8U3RhdGVtZW50PltdOwogICAgICAgICAgICBjb21waWxlVGltZUVycm9ycy5hZGQoYnVpbGRQcm9ibGVtU3RhdGVtZW50KAogICAgICAgICAgICAgICAgZmFzdGEubWVzc2FnZUNhdGNoU3ludGF4RXh0cmFQYXJhbWV0ZXJzLCBwYXJhbWV0ZXIuY2hhck9mZnNldCwKICAgICAgICAgICAgICAgIGxlbmd0aDogcGFyYW1ldGVyLm5hbWUubGVuZ3RoKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBwdXNoKGZvcmVzdC5jcmVhdGVDYXRjaCgKICAgICAgICBvbktleXdvcmQsCiAgICAgICAgZXhjZXB0aW9uVHlwZSwKICAgICAgICBjYXRjaEtleXdvcmQsCiAgICAgICAgZXhjZXB0aW9uPy50YXJnZXQsCiAgICAgICAgc3RhY2tUcmFjZT8udGFyZ2V0LAogICAgICAgIGNvcmVUeXBlcy5zdGFja1RyYWNlQ2xhc3MucmF3VHlwZSwKICAgICAgICBib2R5KSk7CiAgICBpZiAoY29tcGlsZVRpbWVFcnJvcnMgPT0gbnVsbCkgewogICAgICBwdXNoKE51bGxWYWx1ZS5CbG9jayk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKGZvcmVzdC5jcmVhdGVCbG9jayhudWxsLCBjb21waWxlVGltZUVycm9ycywgbnVsbCkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUcnlTdGF0ZW1lbnQoaW50IGNhdGNoQ291bnQsIFRva2VuIHRyeUtleXdvcmQsIFRva2VuIGZpbmFsbHlLZXl3b3JkKSB7CiAgICBTdGF0ZW1lbnQgZmluYWxseUJsb2NrID0gcG9wU3RhdGVtZW50SWZOb3ROdWxsKGZpbmFsbHlLZXl3b3JkKTsKICAgIExpc3Q8Q2F0Y2g+IGNhdGNoQmxvY2tzOwogICAgTGlzdDxTdGF0ZW1lbnQ+IGNvbXBpbGVUaW1lRXJyb3JzOwogICAgaWYgKGNhdGNoQ291bnQgIT0gMCkgewogICAgICBMaXN0PE9iamVjdD4gY2F0Y2hCbG9ja3NBbmRFcnJvcnMgPQogICAgICAgICAgY29uc3QgRml4ZWROdWxsYWJsZUxpc3Q8T2JqZWN0PigpLnBvcChzdGFjaywgY2F0Y2hDb3VudCAqIDIpOwogICAgICBjYXRjaEJsb2NrcyA9IG5ldyBMaXN0PENhdGNoPi5maWxsZWQoY2F0Y2hDb3VudCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNhdGNoQ291bnQ7IGkrKykgewogICAgICAgIGNhdGNoQmxvY2tzW2ldID0gY2F0Y2hCbG9ja3NBbmRFcnJvcnNbaSAqIDJdOwogICAgICAgIFN0YXRlbWVudCBlcnJvciA9IGNhdGNoQmxvY2tzQW5kRXJyb3JzW2kgKiAyICsgMV07CiAgICAgICAgaWYgKGVycm9yICE9IG51bGwpIHsKICAgICAgICAgIGNvbXBpbGVUaW1lRXJyb3JzID8/PSA8U3RhdGVtZW50PltdOwogICAgICAgICAgY29tcGlsZVRpbWVFcnJvcnMuYWRkKGVycm9yKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIFN0YXRlbWVudCB0cnlCbG9jayA9IHBvcFN0YXRlbWVudCgpOwogICAgU3RhdGVtZW50IHRyeVN0YXRlbWVudCA9IGZvcmVzdC5jcmVhdGVUcnlTdGF0ZW1lbnQoCiAgICAgICAgdHJ5S2V5d29yZCwgdHJ5QmxvY2ssIGNhdGNoQmxvY2tzLCBmaW5hbGx5S2V5d29yZCwgZmluYWxseUJsb2NrKTsKICAgIGlmIChjb21waWxlVGltZUVycm9ycyAhPSBudWxsKSB7CiAgICAgIGNvbXBpbGVUaW1lRXJyb3JzLmFkZCh0cnlTdGF0ZW1lbnQpOwogICAgICBwdXNoKGZvcmVzdC5jcmVhdGVCbG9jayhudWxsLCBjb21waWxlVGltZUVycm9ycywgbnVsbCkpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaCh0cnlTdGF0ZW1lbnQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJbmRleGVkRXhwcmVzc2lvbigKICAgICAgVG9rZW4gb3BlblNxdWFyZUJyYWNrZXQsIFRva2VuIGNsb3NlU3F1YXJlQnJhY2tldCkgewogICAgZGVidWdFdmVudCgiSW5kZXhlZEV4cHJlc3Npb24iKTsKICAgIEV4cHJlc3Npb24gaW5kZXggPSBwb3BGb3JWYWx1ZSgpOwogICAgT2JqZWN0IHJlY2VpdmVyID0gcG9wKCk7CiAgICBpZiAocmVjZWl2ZXIgaXMgVGhpc0FjY2Vzc0dlbmVyYXRvciAmJiByZWNlaXZlci5pc1N1cGVyKSB7CiAgICAgIHB1c2gobmV3IFN1cGVySW5kZXhlZEFjY2Vzc0dlbmVyYXRvcigKICAgICAgICAgIHRoaXMsCiAgICAgICAgICBvcGVuU3F1YXJlQnJhY2tldCwKICAgICAgICAgIGluZGV4LAogICAgICAgICAgbG9va3VwSW5zdGFuY2VNZW1iZXIoaW5kZXhHZXROYW1lLCBpc1N1cGVyOiB0cnVlKSwKICAgICAgICAgIGxvb2t1cEluc3RhbmNlTWVtYmVyKGluZGV4U2V0TmFtZSwgaXNTdXBlcjogdHJ1ZSkpKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2goSW5kZXhlZEFjY2Vzc0dlbmVyYXRvci5tYWtlKAogICAgICAgICAgdGhpcywgb3BlblNxdWFyZUJyYWNrZXQsIHRvVmFsdWUocmVjZWl2ZXIpLCBpbmRleCwgbnVsbCwgbnVsbCkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVVbmFyeVByZWZpeEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlVuYXJ5UHJlZml4RXhwcmVzc2lvbiIpOwogICAgT2JqZWN0IHJlY2VpdmVyID0gcG9wKCk7CiAgICBpZiAob3B0aW9uYWwoIiEiLCB0b2tlbikpIHsKICAgICAgcHVzaChmb3Jlc3QuY3JlYXRlTm90KHRvVmFsdWUocmVjZWl2ZXIpLCB0b2tlbiwgZmFsc2UpKTsKICAgIH0gZWxzZSB7CiAgICAgIFN0cmluZyBvcGVyYXRvciA9IHRva2VuLnN0cmluZ1ZhbHVlOwogICAgICBFeHByZXNzaW9uIHJlY2VpdmVyVmFsdWU7CiAgICAgIGlmIChvcHRpb25hbCgiLSIsIHRva2VuKSkgewogICAgICAgIG9wZXJhdG9yID0gInVuYXJ5LSI7CiAgICAgIH0KICAgICAgYm9vbCBpc1N1cGVyID0gZmFsc2U7CiAgICAgIGlmIChyZWNlaXZlciBpcyBUaGlzQWNjZXNzR2VuZXJhdG9yICYmIHJlY2VpdmVyLmlzU3VwZXIpIHsKICAgICAgICBpc1N1cGVyID0gdHJ1ZTsKICAgICAgICByZWNlaXZlclZhbHVlID0gZm9yZXN0LmNyZWF0ZVRoaXNFeHByZXNzaW9uKHJlY2VpdmVyLnRva2VuKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZWNlaXZlclZhbHVlID0gdG9WYWx1ZShyZWNlaXZlcik7CiAgICAgIH0KICAgICAgcHVzaChidWlsZE1ldGhvZEludm9jYXRpb24ocmVjZWl2ZXJWYWx1ZSwgbmV3IE5hbWUob3BlcmF0b3IpLAogICAgICAgICAgZm9yZXN0LmNyZWF0ZUFyZ3VtZW50c0VtcHR5KG5vTG9jYXRpb24pLCB0b2tlbi5jaGFyT2Zmc2V0LAogICAgICAgICAgLy8gVGhpcyAqY291bGQqIGJlIGEgY29uc3RhbnQgZXhwcmVzc2lvbiwgd2UgY2FuJ3Qga25vdyB3aXRob3V0CiAgICAgICAgICAvLyBldmFsdWF0aW5nIFtyZWNlaXZlcl0uCiAgICAgICAgICBpc0NvbnN0YW50RXhwcmVzc2lvbjogIWlzU3VwZXIsCiAgICAgICAgICBpc1N1cGVyOiBpc1N1cGVyKSk7CiAgICB9CiAgfQoKICBOYW1lIGluY3JlbWVudE9wZXJhdG9yKFRva2VuIHRva2VuKSB7CiAgICBpZiAob3B0aW9uYWwoIisrIiwgdG9rZW4pKSByZXR1cm4gcGx1c05hbWU7CiAgICBpZiAob3B0aW9uYWwoIi0tIiwgdG9rZW4pKSByZXR1cm4gbWludXNOYW1lOwogICAgcmV0dXJuIHVuaGFuZGxlZCh0b2tlbi5sZXhlbWUsICJpbmNyZW1lbnRPcGVyYXRvciIsIHRva2VuLmNoYXJPZmZzZXQsIHVyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVVuYXJ5UHJlZml4QXNzaWdubWVudEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlVuYXJ5UHJlZml4QXNzaWdubWVudEV4cHJlc3Npb24iKTsKICAgIE9iamVjdCBnZW5lcmF0b3IgPSBwb3AoKTsKICAgIGlmIChnZW5lcmF0b3IgaXMgR2VuZXJhdG9yKSB7CiAgICAgIHB1c2goZ2VuZXJhdG9yLmJ1aWxkUHJlZml4SW5jcmVtZW50KGluY3JlbWVudE9wZXJhdG9yKHRva2VuKSwKICAgICAgICAgIG9mZnNldDogdG9rZW4uY2hhck9mZnNldCkpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaCh3cmFwSW5Qcm9ibGVtKAogICAgICAgICAgdG9WYWx1ZShnZW5lcmF0b3IpLCBmYXN0YS5tZXNzYWdlTm90QW5MdmFsdWUsIG5vTGVuZ3RoKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVVuYXJ5UG9zdGZpeEFzc2lnbm1lbnRFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJVbmFyeVBvc3RmaXhBc3NpZ25tZW50RXhwcmVzc2lvbiIpOwogICAgT2JqZWN0IGdlbmVyYXRvciA9IHBvcCgpOwogICAgaWYgKGdlbmVyYXRvciBpcyBHZW5lcmF0b3IpIHsKICAgICAgcHVzaChuZXcgRGVsYXllZFBvc3RmaXhJbmNyZW1lbnQoCiAgICAgICAgICB0aGlzLCB0b2tlbiwgZ2VuZXJhdG9yLCBpbmNyZW1lbnRPcGVyYXRvcih0b2tlbiksIG51bGwpKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2god3JhcEluUHJvYmxlbSgKICAgICAgICAgIHRvVmFsdWUoZ2VuZXJhdG9yKSwgZmFzdGEubWVzc2FnZU5vdEFuTHZhbHVlLCBub0xlbmd0aCkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDb25zdHJ1Y3RvclJlZmVyZW5jZSgKICAgICAgVG9rZW4gc3RhcnQsIFRva2VuIHBlcmlvZEJlZm9yZU5hbWUsIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJDb25zdHJ1Y3RvclJlZmVyZW5jZSIpOwogICAgcHVzaFF1YWxpZmllZFJlZmVyZW5jZShzdGFydCwgcGVyaW9kQmVmb3JlTmFtZSk7CiAgfQoKICAvLy8gQSBxdWFsaWZpZWQgcmVmZXJlbmNlIGlzIHNvbWV0aGluZyB0aGF0IG1hdGNoZXMgb25lIG9mOgogIC8vLwogIC8vLyAgICAgaWRlbnRpZmllcgogIC8vLyAgICAgaWRlbnRpZmllciB0eXBlQXJndW1lbnRzPyAnLicgaWRlbnRpZmllcgogIC8vLyAgICAgaWRlbnRpZmllciAnLicgaWRlbnRpZmllciB0eXBlQXJndW1lbnRzPyAnLicgaWRlbnRpZmllcgogIC8vLwogIC8vLyBUaGF0IGlzLCBvbmUgdG8gdGhyZWUgaWRlbnRpZmllcnMgc2VwYXJhdGVkIGJ5IHBlcmlvZHMgYW5kIG9wdGlvbmFsbHkgb25lCiAgLy8vIGxpc3Qgb2YgdHlwZSBhcmd1bWVudHMuCiAgLy8vCiAgLy8vIEEgcXVhbGlmaWVkIHJlZmVyZW5jZSBjYW4gYmUgdXNlZCB0byByZXByZXNlbnQgYm90aCBhIHJlZmVyZW5jZSB0bwogIC8vLyBjb21waWxlLXRpbWUgY29uc3RhbnQgdmFyaWFibGUgKG1ldGFkYXRhKSBvciBhIGNvbnN0cnVjdG9yIHJlZmVyZW5jZQogIC8vLyAodXNlZCBieSBtZXRhZGF0YSwgbmV3L2NvbnN0IGV4cHJlc3Npb24sIGFuZCByZWRpcmVjdGluZyBmYWN0b3JpZXMpLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgdGhlIHBhcnNlciB3aWxsIHJlcG9ydCBlcnJvcnMgaWYgbWV0YWRhdGEgaW5jbHVkZXMgdHlwZQogIC8vLyBhcmd1bWVudHMsIGJ1dCB3aWxsIG90aGVyIHByZXNlcnZlIHRoZW0gZm9yIGVycm9yIHJlY292ZXJ5LgogIC8vLwogIC8vLyBBIGNvbnN0cnVjdG9yIHJlZmVyZW5jZSBjYW4gY29udGFpbiB1cCB0byB0aHJlZSBpZGVudGlmaWVyczoKICAvLy8KICAvLy8gICAgIGEpIHR5cGUgdHlwZUFyZ3VtZW50cz8KICAvLy8gICAgIGIpIHR5cGUgdHlwZUFyZ3VtZW50cz8gJy4nIG5hbWUKICAvLy8gICAgIGMpIHByZWZpeCAnLicgdHlwZSB0eXBlQXJndW1lbnRzPwogIC8vLyAgICAgZCkgcHJlZml4ICcuJyB0eXBlIHR5cGVBcmd1bWVudHM/ICcuJyBuYW1lCiAgLy8vCiAgLy8vIFRoaXMgaXNuJ3QgYSBsZWdhbCBjb25zdHJ1Y3RvciByZWZlcmVuY2U6CiAgLy8vCiAgLy8vICAgICB0eXBlICcuJyBuYW1lIHR5cGVBcmd1bWVudHM/CiAgLy8vCiAgLy8vIEJ1dCB0aGUgcGFyc2VyIGNhbid0IHRlbGwgdGhpcyBmcm9tIHR5cGUgYykgYWJvdmUuCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIHBvcHMgMiAob3IgMyBpZiBgcGVyaW9kQmVmb3JlTmFtZSAhPSBudWxsYCkgdmFsdWVzIGZyb20gdGhlCiAgLy8vIHN0YWNrIGFuZCBwdXNoZXMgMyB2YWx1ZXM6IGEgZ2VuZXJhdG9yICh0aGUgdHlwZSBpbiBhIGNvbnN0cnVjdG9yCiAgLy8vIHJlZmVyZW5jZSwgb3IgYW4gZXhwcmVzc2lvbiBpbiBtZXRhZGF0YSksIGEgbGlzdCBvZiB0eXBlIGFyZ3VtZW50cywgYW5kIGEKICAvLy8gbmFtZS4KICB2b2lkIHB1c2hRdWFsaWZpZWRSZWZlcmVuY2UoVG9rZW4gc3RhcnQsIFRva2VuIHBlcmlvZEJlZm9yZU5hbWUpIHsKICAgIGFzc2VydChjaGVja1N0YXRlKHN0YXJ0LCBbCiAgICAgIC8qc3VmZml4Ki8gaWYgKHBlcmlvZEJlZm9yZU5hbWUgIT0gbnVsbCkgVmFsdWVLaW5kLklkZW50aWZpZXIsCiAgICAgIC8qdHlwZSBhcmd1bWVudHMqLyBWYWx1ZUtpbmQuVHlwZUFyZ3VtZW50c09yTnVsbCwKICAgICAgLyp0eXBlKi8gdW5pb25PZktpbmRzKFsKICAgICAgICBWYWx1ZUtpbmQuR2VuZXJhdG9yLAogICAgICAgIFZhbHVlS2luZC5RdWFsaWZpZWROYW1lLAogICAgICAgIFZhbHVlS2luZC5Qcm9ibGVtQnVpbGRlciwKICAgICAgICBWYWx1ZUtpbmQuUGFyc2VyUmVjb3ZlcnkKICAgICAgXSkKICAgIF0pKTsKICAgIElkZW50aWZpZXIgc3VmZml4ID0gcG9wSWZOb3ROdWxsKHBlcmlvZEJlZm9yZU5hbWUpOwogICAgSWRlbnRpZmllciBpZGVudGlmaWVyOwogICAgTGlzdDxVbnJlc29sdmVkVHlwZT4gdHlwZUFyZ3VtZW50cyA9IHBvcCgpOwogICAgT2JqZWN0IHR5cGUgPSBwb3AoKTsKICAgIGlmICh0eXBlIGlzIFF1YWxpZmllZE5hbWUpIHsKICAgICAgaWRlbnRpZmllciA9IHR5cGU7CiAgICAgIFF1YWxpZmllZE5hbWUgcXVhbGlmaWVkID0gdHlwZTsKICAgICAgT2JqZWN0IHF1YWxpZmllciA9IHF1YWxpZmllZC5xdWFsaWZpZXI7CiAgICAgIGFzc2VydChjaGVja1ZhbHVlKAogICAgICAgICAgc3RhcnQsCiAgICAgICAgICB1bmlvbk9mS2luZHMoW1ZhbHVlS2luZC5HZW5lcmF0b3IsIFZhbHVlS2luZC5Qcm9ibGVtQnVpbGRlcl0pLAogICAgICAgICAgcXVhbGlmaWVyKSk7CiAgICAgIGlmIChxdWFsaWZpZXIgaXMgVHlwZVVzZUdlbmVyYXRvcikgewogICAgICAgIHR5cGUgPSBxdWFsaWZpZXI7CiAgICAgICAgaWYgKHR5cGVBcmd1bWVudHMgIT0gbnVsbCkgewogICAgICAgICAgLy8gVE9ETyhhaGUpOiBQb2ludCB0byB0aGUgdHlwZSBhcmd1bWVudHMgaW5zdGVhZC4KICAgICAgICAgIGFkZFByb2JsZW0oZmFzdGEubWVzc2FnZUNvbnN0cnVjdG9yV2l0aFR5cGVBcmd1bWVudHMsCiAgICAgICAgICAgICAgaWRlbnRpZmllci5jaGFyT2Zmc2V0LCBpZGVudGlmaWVyLm5hbWUubGVuZ3RoKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAocXVhbGlmaWVyIGlzIEdlbmVyYXRvcikgewogICAgICAgIHR5cGUgPSBxdWFsaWZpZXIucXVhbGlmaWVkTG9va3VwKGRlcHJlY2F0ZWRfZXh0cmFjdFRva2VuKGlkZW50aWZpZXIpKTsKICAgICAgICBpZGVudGlmaWVyID0gbnVsbDsKICAgICAgfSBlbHNlIGlmIChxdWFsaWZpZXIgaXMgUHJvYmxlbUJ1aWxkZXIpIHsKICAgICAgICB0eXBlID0gcXVhbGlmaWVyOwogICAgICB9IGVsc2UgewogICAgICAgIHVuaGFuZGxlZCgiJHtxdWFsaWZpZXIucnVudGltZVR5cGV9IiwgInB1c2hRdWFsaWZpZWRSZWZlcmVuY2UiLAogICAgICAgICAgICBzdGFydC5jaGFyT2Zmc2V0LCB1cmkpOwogICAgICB9CiAgICB9CiAgICBTdHJpbmcgbmFtZTsKICAgIGlmIChpZGVudGlmaWVyICE9IG51bGwgJiYgc3VmZml4ICE9IG51bGwpIHsKICAgICAgbmFtZSA9ICIke2lkZW50aWZpZXIubmFtZX0uJHtzdWZmaXgubmFtZX0iOwogICAgfSBlbHNlIGlmIChpZGVudGlmaWVyICE9IG51bGwpIHsKICAgICAgbmFtZSA9IGlkZW50aWZpZXIubmFtZTsKICAgIH0gZWxzZSBpZiAoc3VmZml4ICE9IG51bGwpIHsKICAgICAgbmFtZSA9IHN1ZmZpeC5uYW1lOwogICAgfSBlbHNlIHsKICAgICAgbmFtZSA9ICIiOwogICAgfQogICAgcHVzaCh0eXBlKTsKICAgIHB1c2godHlwZUFyZ3VtZW50cyA/PyBOdWxsVmFsdWUuVHlwZUFyZ3VtZW50cyk7CiAgICBwdXNoKG5hbWUpOwogICAgcHVzaChzdWZmaXggPz8gaWRlbnRpZmllciA/PyBOdWxsVmFsdWUuSWRlbnRpZmllcik7CgogICAgYXNzZXJ0KGNoZWNrU3RhdGUoc3RhcnQsIFsKICAgICAgLypjb25zdHJ1Y3RvciBuYW1lIGlkZW50aWZpZXIqLyBWYWx1ZUtpbmQuSWRlbnRpZmllck9yTnVsbCwKICAgICAgLypjb25zdHJ1Y3RvciBuYW1lKi8gVmFsdWVLaW5kLk5hbWUsCiAgICAgIC8qdHlwZSBhcmd1bWVudHMqLyBWYWx1ZUtpbmQuVHlwZUFyZ3VtZW50c09yTnVsbCwKICAgICAgLypjbGFzcyovIHVuaW9uT2ZLaW5kcyhbCiAgICAgICAgVmFsdWVLaW5kLkdlbmVyYXRvciwKICAgICAgICBWYWx1ZUtpbmQuUHJvYmxlbUJ1aWxkZXIsCiAgICAgICAgVmFsdWVLaW5kLlBhcnNlclJlY292ZXJ5CiAgICAgIF0pLAogICAgXSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZFN0YXRpY0ludm9jYXRpb24oTWVtYmVyIHRhcmdldCwgQXJndW1lbnRzIGFyZ3VtZW50cywKICAgICAge0NvbnN0bmVzcyBjb25zdG5lc3M6IENvbnN0bmVzcy5pbXBsaWNpdCwKICAgICAgaW50IGNoYXJPZmZzZXQ6IC0xLAogICAgICBpbnQgY2hhckxlbmd0aDogbm9MZW5ndGh9KSB7CiAgICAvLyBUaGUgYXJndW1lbnQgY2hlY2tzIGZvciB0aGUgaW5pdGlhbCB0YXJnZXQgb2YgcmVkaXJlY3RpbmcgZmFjdG9yaWVzCiAgICAvLyBpbnZvY2F0aW9ucyBhcmUgc2tpcHBlZCBpbiBEYXJ0IDEuCiAgICBpZiAoIWxlZ2FjeU1vZGUgfHwgIWlzUmVkaXJlY3RpbmdGYWN0b3J5KHRhcmdldCwgaGVscGVyOiB0aGlzKSkgewogICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzID0gdGFyZ2V0LmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzOwogICAgICBpZiAodGFyZ2V0IGlzIENvbnN0cnVjdG9yKSB7CiAgICAgICAgYXNzZXJ0KCF0YXJnZXQuZW5jbG9zaW5nQ2xhc3MuaXNBYnN0cmFjdCk7CiAgICAgICAgdHlwZVBhcmFtZXRlcnMgPSB0YXJnZXQuZW5jbG9zaW5nQ2xhc3MudHlwZVBhcmFtZXRlcnM7CiAgICAgIH0KICAgICAgTG9jYXRlZE1lc3NhZ2UgYXJnTWVzc2FnZSA9IGNoZWNrQXJndW1lbnRzRm9yRnVuY3Rpb24oCiAgICAgICAgICB0YXJnZXQuZnVuY3Rpb24sIGFyZ3VtZW50cywgY2hhck9mZnNldCwgdHlwZVBhcmFtZXRlcnMpOwogICAgICBpZiAoYXJnTWVzc2FnZSAhPSBudWxsKSB7CiAgICAgICAgcmV0dXJuIHdyYXBTeW50aGV0aWNFeHByZXNzaW9uKAogICAgICAgICAgICB0aHJvd05vU3VjaE1ldGhvZEVycm9yKAogICAgICAgICAgICAgICAgZm9yZXN0LmNyZWF0ZU51bGxMaXRlcmFsKG51bGwpLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldCwKICAgICAgICAgICAgICAgIHRhcmdldC5uYW1lLm5hbWUsCiAgICAgICAgICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgICAgICAgICAgY2FuZGlkYXRlOiB0YXJnZXQsCiAgICAgICAgICAgICAgICBtZXNzYWdlOiBhcmdNZXNzYWdlKSwKICAgICAgICAgICAgY2hhck9mZnNldCk7CiAgICAgIH0KICAgIH0KCiAgICBib29sIGlzQ29uc3QgPSBjb25zdG5lc3MgPT0gQ29uc3RuZXNzLmV4cGxpY2l0Q29uc3Q7CiAgICBpZiAodGFyZ2V0IGlzIENvbnN0cnVjdG9yKSB7CiAgICAgIGlzQ29uc3QgPQogICAgICAgICAgaXNDb25zdCB8fCBjb25zdGFudENvbnRleHQgIT0gQ29uc3RhbnRDb250ZXh0Lm5vbmUgJiYgdGFyZ2V0LmlzQ29uc3Q7CiAgICAgIGlmICgoaXNDb25zdCB8fCBjb25zdGFudENvbnRleHQgPT0gQ29uc3RhbnRDb250ZXh0LmluZmVycmVkKSAmJgogICAgICAgICAgIXRhcmdldC5pc0NvbnN0KSB7CiAgICAgICAgcmV0dXJuIHdyYXBJbnZhbGlkQ29uc3RydWN0b3JJbnZvY2F0aW9uKAogICAgICAgICAgICBkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihidWlsZFByb2JsZW0oCiAgICAgICAgICAgICAgICBmYXN0YS5tZXNzYWdlTm9uQ29uc3RDb25zdHJ1Y3RvciwgY2hhck9mZnNldCwgY2hhckxlbmd0aCkpLAogICAgICAgICAgICB0YXJnZXQsCiAgICAgICAgICAgIGFyZ3VtZW50cywKICAgICAgICAgICAgY2hhck9mZnNldCk7CiAgICAgIH0KICAgICAgQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUgPQogICAgICAgICAgbmV3IENvbnN0cnVjdG9ySW52b2NhdGlvbih0YXJnZXQsIGFyZ3VtZW50cywgaXNDb25zdDogaXNDb25zdCkKICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldDsKICAgICAgbGlicmFyeUJ1aWxkZXIuY2hlY2tCb3VuZHNJbkNvbnN0cnVjdG9ySW52b2NhdGlvbigKICAgICAgICAgIG5vZGUsIHR5cGVFbnZpcm9ubWVudCwgdXJpKTsKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9IGVsc2UgewogICAgICBQcm9jZWR1cmUgcHJvY2VkdXJlID0gdGFyZ2V0OwogICAgICBpZiAocHJvY2VkdXJlLmlzRmFjdG9yeSkgewogICAgICAgIGlzQ29uc3QgPSBpc0NvbnN0IHx8CiAgICAgICAgICAgIGNvbnN0YW50Q29udGV4dCAhPSBDb25zdGFudENvbnRleHQubm9uZSAmJiBwcm9jZWR1cmUuaXNDb25zdDsKICAgICAgICBpZiAoKGlzQ29uc3QgfHwgY29uc3RhbnRDb250ZXh0ID09IENvbnN0YW50Q29udGV4dC5pbmZlcnJlZCkgJiYKICAgICAgICAgICAgIXByb2NlZHVyZS5pc0NvbnN0KSB7CiAgICAgICAgICByZXR1cm4gd3JhcEludmFsaWRDb25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgICAgICAgICAgZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oYnVpbGRQcm9ibGVtKAogICAgICAgICAgICAgICAgICBmYXN0YS5tZXNzYWdlTm9uQ29uc3RGYWN0b3J5LCBjaGFyT2Zmc2V0LCBjaGFyTGVuZ3RoKSksCiAgICAgICAgICAgICAgdGFyZ2V0LAogICAgICAgICAgICAgIGFyZ3VtZW50cywKICAgICAgICAgICAgICBjaGFyT2Zmc2V0KTsKICAgICAgICB9CiAgICAgICAgU3RhdGljSW52b2NhdGlvbiBub2RlID0gbmV3IEZhY3RvcnlDb25zdHJ1Y3Rvckludm9jYXRpb25KdWRnbWVudCgKICAgICAgICAgICAgdGFyZ2V0LCBhcmd1bWVudHMsCiAgICAgICAgICAgIGlzQ29uc3Q6IGlzQ29uc3QpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogICAgICAgIGxpYnJhcnlCdWlsZGVyLmNoZWNrQm91bmRzSW5GYWN0b3J5SW52b2NhdGlvbigKICAgICAgICAgICAgbm9kZSwgdHlwZUVudmlyb25tZW50LCB1cmkpOwogICAgICAgIHJldHVybiBub2RlOwogICAgICB9IGVsc2UgewogICAgICAgIFN0YXRpY0ludm9jYXRpb24gbm9kZSA9CiAgICAgICAgICAgIG5ldyBTdGF0aWNJbnZvY2F0aW9uKHRhcmdldCwgYXJndW1lbnRzLCBpc0NvbnN0OiBpc0NvbnN0KQogICAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgICAgICAgbGlicmFyeUJ1aWxkZXIuY2hlY2tCb3VuZHNJblN0YXRpY0ludm9jYXRpb24oCiAgICAgICAgICAgIG5vZGUsIHR5cGVFbnZpcm9ubWVudCwgdXJpKTsKICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgfQogICAgfQogIH0KCiAgRXhwcmVzc2lvbiBidWlsZEV4dGVuc2lvbk1ldGhvZEludm9jYXRpb24oCiAgICAgIGludCBmaWxlT2Zmc2V0LCBQcm9jZWR1cmUgdGFyZ2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDaGVjayB0eXBlIGFyZ3VtZW50IGNvdW50LgogICAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycyA9IHRhcmdldC5mdW5jdGlvbi50eXBlUGFyYW1ldGVyczsKICAgIExvY2F0ZWRNZXNzYWdlIGFyZ01lc3NhZ2UgPSBjaGVja0FyZ3VtZW50c0ZvckZ1bmN0aW9uKAogICAgICAgIHRhcmdldC5mdW5jdGlvbiwgYXJndW1lbnRzLCBmaWxlT2Zmc2V0LCB0eXBlUGFyYW1ldGVycyk7CiAgICBpZiAoYXJnTWVzc2FnZSAhPSBudWxsKSB7CiAgICAgIHJldHVybiB3cmFwU3ludGhldGljRXhwcmVzc2lvbigKICAgICAgICAgIHRocm93Tm9TdWNoTWV0aG9kRXJyb3IoCiAgICAgICAgICAgICAgZm9yZXN0LmNyZWF0ZU51bGxMaXRlcmFsKG51bGwpLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldCwKICAgICAgICAgICAgICB0YXJnZXQubmFtZS5uYW1lLAogICAgICAgICAgICAgIGFyZ3VtZW50cywKICAgICAgICAgICAgICBmaWxlT2Zmc2V0LAogICAgICAgICAgICAgIGNhbmRpZGF0ZTogdGFyZ2V0LAogICAgICAgICAgICAgIG1lc3NhZ2U6IGFyZ01lc3NhZ2UpLAogICAgICAgICAgZmlsZU9mZnNldCk7CiAgICB9CgogICAgU3RhdGljSW52b2NhdGlvbiBub2RlID0gbmV3IFN0YXRpY0ludm9jYXRpb24odGFyZ2V0LCBhcmd1bWVudHMpCiAgICAgIC4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDaGVjayB0eXBlIGFyZ3VtZW50IGJvdW5kcy4KICAgIC8vbGlicmFyeUJ1aWxkZXIuY2hlY2tCb3VuZHNJblN0YXRpY0ludm9jYXRpb24obm9kZSwgdHlwZUVudmlyb25tZW50LCB1cmkpOwogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBMb2NhdGVkTWVzc2FnZSBjaGVja0FyZ3VtZW50c0ZvckZ1bmN0aW9uKEZ1bmN0aW9uTm9kZSBmdW5jdGlvbiwKICAgICAgQXJndW1lbnRzIGFyZ3VtZW50cywgaW50IG9mZnNldCwgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycykgewogICAgaWYgKGZvcmVzdC5hcmd1bWVudHNQb3NpdGlvbmFsKGFyZ3VtZW50cykubGVuZ3RoIDwKICAgICAgICBmdW5jdGlvbi5yZXF1aXJlZFBhcmFtZXRlckNvdW50KSB7CiAgICAgIHJldHVybiBmYXN0YS50ZW1wbGF0ZVRvb0Zld0FyZ3VtZW50cwogICAgICAgICAgLndpdGhBcmd1bWVudHMoZnVuY3Rpb24ucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICAgICAgICBmb3Jlc3QuYXJndW1lbnRzUG9zaXRpb25hbChhcmd1bWVudHMpLmxlbmd0aCkKICAgICAgICAgIC53aXRoTG9jYXRpb24odXJpLCBhcmd1bWVudHMuZmlsZU9mZnNldCwgbm9MZW5ndGgpOwogICAgfQogICAgaWYgKGZvcmVzdC5hcmd1bWVudHNQb3NpdGlvbmFsKGFyZ3VtZW50cykubGVuZ3RoID4KICAgICAgICBmdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgcmV0dXJuIGZhc3RhLnRlbXBsYXRlVG9vTWFueUFyZ3VtZW50cwogICAgICAgICAgLndpdGhBcmd1bWVudHMoZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoLAogICAgICAgICAgICAgIGZvcmVzdC5hcmd1bWVudHNQb3NpdGlvbmFsKGFyZ3VtZW50cykubGVuZ3RoKQogICAgICAgICAgLndpdGhMb2NhdGlvbih1cmksIGFyZ3VtZW50cy5maWxlT2Zmc2V0LCBub0xlbmd0aCk7CiAgICB9CiAgICBMaXN0PE9iamVjdD4gbmFtZWQgPSBmb3Jlc3QuYXJndW1lbnRzTmFtZWQoYXJndW1lbnRzKTsKICAgIGlmIChuYW1lZC5pc05vdEVtcHR5KSB7CiAgICAgIFNldDxTdHJpbmc+IG5hbWVzID0KICAgICAgICAgIG5ldyBTZXQuZnJvbShmdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMubWFwKChhKSA9PiBhLm5hbWUpKTsKICAgICAgZm9yIChOYW1lZEV4cHJlc3Npb24gYXJndW1lbnQgaW4gbmFtZWQpIHsKICAgICAgICBpZiAoIW5hbWVzLmNvbnRhaW5zKGFyZ3VtZW50Lm5hbWUpKSB7CiAgICAgICAgICByZXR1cm4gZmFzdGEudGVtcGxhdGVOb1N1Y2hOYW1lZFBhcmFtZXRlcgogICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGFyZ3VtZW50Lm5hbWUpCiAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbih1cmksIGFyZ3VtZW50LmZpbGVPZmZzZXQsIGFyZ3VtZW50Lm5hbWUubGVuZ3RoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBMaXN0PERhcnRUeXBlPiB0eXBlcyA9IGZvcmVzdC5hcmd1bWVudHNUeXBlQXJndW1lbnRzKGFyZ3VtZW50cyk7CiAgICBpZiAodHlwZVBhcmFtZXRlcnMubGVuZ3RoICE9IHR5cGVzLmxlbmd0aCkgewogICAgICBpZiAodHlwZXMubGVuZ3RoID09IDApIHsKICAgICAgICAvLyBFeHBlY3RlZCBgdHlwZVBhcmFtZXRlcnMubGVuZ3RoYCB0eXBlIGFyZ3VtZW50cywgYnV0IG5vbmUgZ2l2ZW4sIHNvCiAgICAgICAgLy8gd2UgZmlsbCBpbiBkeW5hbWljIGluIGxlZ2FjeSBtb2RlLCBhbmQgdXNlIHR5cGUgaW5mZXJlbmNlIG90aGVyd2lzZS4KICAgICAgICBpZiAobGVnYWN5TW9kZSkgewogICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB0eXBlcy5hZGQoY29uc3QgRHluYW1pY1R5cGUoKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIC8vIEEgd3JvbmcgKG5vbi16ZXJvKSBhbW91bnQgb2YgdHlwZSBhcmd1bWVudHMgZ2l2ZW4uIFRoYXQncyBhbiBlcnJvci4KICAgICAgICAvLyBUT0RPKGplbnNqKTogUG9zaXRpb24gc2hvdWxkIGJlIG9uIHR5cGUgYXJndW1lbnRzIGluc3RlYWQuCiAgICAgICAgcmV0dXJuIGZhc3RhLnRlbXBsYXRlVHlwZUFyZ3VtZW50TWlzbWF0Y2gKICAgICAgICAgICAgLndpdGhBcmd1bWVudHModHlwZVBhcmFtZXRlcnMubGVuZ3RoKQogICAgICAgICAgICAud2l0aExvY2F0aW9uKHVyaSwgb2Zmc2V0LCBub0xlbmd0aCk7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIExvY2F0ZWRNZXNzYWdlIGNoZWNrQXJndW1lbnRzRm9yVHlwZSgKICAgICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uLCBBcmd1bWVudHMgYXJndW1lbnRzLCBpbnQgb2Zmc2V0KSB7CiAgICBpZiAoZm9yZXN0LmFyZ3VtZW50c1Bvc2l0aW9uYWwoYXJndW1lbnRzKS5sZW5ndGggPAogICAgICAgIGZ1bmN0aW9uLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpIHsKICAgICAgcmV0dXJuIGZhc3RhLnRlbXBsYXRlVG9vRmV3QXJndW1lbnRzCiAgICAgICAgICAud2l0aEFyZ3VtZW50cyhmdW5jdGlvbi5yZXF1aXJlZFBhcmFtZXRlckNvdW50LAogICAgICAgICAgICAgIGZvcmVzdC5hcmd1bWVudHNQb3NpdGlvbmFsKGFyZ3VtZW50cykubGVuZ3RoKQogICAgICAgICAgLndpdGhMb2NhdGlvbih1cmksIGFyZ3VtZW50cy5maWxlT2Zmc2V0LCBub0xlbmd0aCk7CiAgICB9CiAgICBpZiAoZm9yZXN0LmFyZ3VtZW50c1Bvc2l0aW9uYWwoYXJndW1lbnRzKS5sZW5ndGggPgogICAgICAgIGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICByZXR1cm4gZmFzdGEudGVtcGxhdGVUb29NYW55QXJndW1lbnRzCiAgICAgICAgICAud2l0aEFyZ3VtZW50cyhmdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgsCiAgICAgICAgICAgICAgZm9yZXN0LmFyZ3VtZW50c1Bvc2l0aW9uYWwoYXJndW1lbnRzKS5sZW5ndGgpCiAgICAgICAgICAud2l0aExvY2F0aW9uKHVyaSwgYXJndW1lbnRzLmZpbGVPZmZzZXQsIG5vTGVuZ3RoKTsKICAgIH0KICAgIExpc3Q8T2JqZWN0PiBuYW1lZCA9IGZvcmVzdC5hcmd1bWVudHNOYW1lZChhcmd1bWVudHMpOwogICAgaWYgKG5hbWVkLmlzTm90RW1wdHkpIHsKICAgICAgU2V0PFN0cmluZz4gbmFtZXMgPQogICAgICAgICAgbmV3IFNldC5mcm9tKGZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycy5tYXAoKGEpID0+IGEubmFtZSkpOwogICAgICBmb3IgKE5hbWVkRXhwcmVzc2lvbiBhcmd1bWVudCBpbiBuYW1lZCkgewogICAgICAgIGlmICghbmFtZXMuY29udGFpbnMoYXJndW1lbnQubmFtZSkpIHsKICAgICAgICAgIHJldHVybiBmYXN0YS50ZW1wbGF0ZU5vU3VjaE5hbWVkUGFyYW1ldGVyCiAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoYXJndW1lbnQubmFtZSkKICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKHVyaSwgYXJndW1lbnQuZmlsZU9mZnNldCwgYXJndW1lbnQubmFtZS5sZW5ndGgpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgTGlzdDxPYmplY3Q+IHR5cGVzID0gZm9yZXN0LmFyZ3VtZW50c1R5cGVBcmd1bWVudHMoYXJndW1lbnRzKTsKICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMgPSBmdW5jdGlvbi50eXBlUGFyYW1ldGVyczsKICAgIGlmICh0eXBlUGFyYW1ldGVycy5sZW5ndGggIT0gdHlwZXMubGVuZ3RoICYmIHR5cGVzLmxlbmd0aCAhPSAwKSB7CiAgICAgIC8vIEEgd3JvbmcgKG5vbi16ZXJvKSBhbW91bnQgb2YgdHlwZSBhcmd1bWVudHMgZ2l2ZW4uIFRoYXQncyBhbiBlcnJvci4KICAgICAgLy8gVE9ETyhqZW5zaik6IFBvc2l0aW9uIHNob3VsZCBiZSBvbiB0eXBlIGFyZ3VtZW50cyBpbnN0ZWFkLgogICAgICByZXR1cm4gZmFzdGEudGVtcGxhdGVUeXBlQXJndW1lbnRNaXNtYXRjaAogICAgICAgICAgLndpdGhBcmd1bWVudHModHlwZVBhcmFtZXRlcnMubGVuZ3RoKQogICAgICAgICAgLndpdGhMb2NhdGlvbih1cmksIG9mZnNldCwgbm9MZW5ndGgpOwogICAgfQoKICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbk5ld0V4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luTmV3RXhwcmVzc2lvbiIpOwogICAgc3VwZXIucHVzaChjb25zdGFudENvbnRleHQpOwogICAgaWYgKGNvbnN0YW50Q29udGV4dCAhPSBDb25zdGFudENvbnRleHQubm9uZSkgewogICAgICBhZGRQcm9ibGVtKAogICAgICAgICAgZmFzdGEudGVtcGxhdGVOb3RDb25zdGFudEV4cHJlc3Npb24ud2l0aEFyZ3VtZW50cygnTmV3IGV4cHJlc3Npb24nKSwKICAgICAgICAgIHRva2VuLmNoYXJPZmZzZXQsCiAgICAgICAgICB0b2tlbi5sZW5ndGgpOwogICAgfQogICAgY29uc3RhbnRDb250ZXh0ID0gQ29uc3RhbnRDb250ZXh0Lm5vbmU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ29uc3RFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkNvbnN0RXhwcmVzc2lvbiIpOwogICAgc3VwZXIucHVzaChjb25zdGFudENvbnRleHQpOwogICAgY29uc3RhbnRDb250ZXh0ID0gQ29uc3RhbnRDb250ZXh0LmluZmVycmVkOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkNvbnN0TGl0ZXJhbChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5Db25zdExpdGVyYWwiKTsKICAgIHN1cGVyLnB1c2goY29uc3RhbnRDb250ZXh0KTsKICAgIGNvbnN0YW50Q29udGV4dCA9IENvbnN0YW50Q29udGV4dC5pbmZlcnJlZDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5JbXBsaWNpdENyZWF0aW9uRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5JbXBsaWNpdENyZWF0aW9uRXhwcmVzc2lvbiIpOwogICAgc3VwZXIucHVzaChjb25zdGFudENvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDb25zdExpdGVyYWwoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImVuZENvbnN0TGl0ZXJhbCIpOwogICAgT2JqZWN0IGxpdGVyYWwgPSBwb3AoKTsKICAgIGNvbnN0YW50Q29udGV4dCA9IHBvcCgpOwogICAgcHVzaChsaXRlcmFsKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTmV3RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiTmV3RXhwcmVzc2lvbiIpOwogICAgX2J1aWxkQ29uc3RydWN0b3JSZWZlcmVuY2VJbnZvY2F0aW9uKAogICAgICAgIHRva2VuLm5leHQsIHRva2VuLm9mZnNldCwgQ29uc3RuZXNzLmV4cGxpY2l0TmV3KTsKICB9CgogIHZvaWQgX2J1aWxkQ29uc3RydWN0b3JSZWZlcmVuY2VJbnZvY2F0aW9uKAogICAgICBUb2tlbiBuYW1lVG9rZW4sIGludCBvZmZzZXQsIENvbnN0bmVzcyBjb25zdG5lc3MpIHsKICAgIGFzc2VydChjaGVja1N0YXRlKG5hbWVUb2tlbiwgWwogICAgICAvKmFyZ3VtZW50cyovIFZhbHVlS2luZC5Bcmd1bWVudHMsCiAgICAgIC8qY29uc3RydWN0b3IgbmFtZSBpZGVudGlmaWVyKi8gVmFsdWVLaW5kLklkZW50aWZpZXJPck51bGwsCiAgICAgIC8qY29uc3RydWN0b3IgbmFtZSovIFZhbHVlS2luZC5OYW1lLAogICAgICAvKnR5cGUgYXJndW1lbnRzKi8gVmFsdWVLaW5kLlR5cGVBcmd1bWVudHNPck51bGwsCiAgICAgIC8qY2xhc3MqLyB1bmlvbk9mS2luZHMoWwogICAgICAgIFZhbHVlS2luZC5HZW5lcmF0b3IsCiAgICAgICAgVmFsdWVLaW5kLlByb2JsZW1CdWlsZGVyLAogICAgICAgIFZhbHVlS2luZC5QYXJzZXJSZWNvdmVyeQogICAgICBdKSwKICAgIF0pKTsKICAgIEFyZ3VtZW50cyBhcmd1bWVudHMgPSBwb3AoKTsKICAgIElkZW50aWZpZXIgbmFtZUxhc3RJZGVudGlmaWVyID0gcG9wKE51bGxWYWx1ZS5JZGVudGlmaWVyKTsKICAgIFRva2VuIG5hbWVMYXN0VG9rZW4gPQogICAgICAgIGRlcHJlY2F0ZWRfZXh0cmFjdFRva2VuKG5hbWVMYXN0SWRlbnRpZmllcikgPz8gbmFtZVRva2VuOwogICAgU3RyaW5nIG5hbWUgPSBwb3AoKTsKICAgIExpc3Q8VW5yZXNvbHZlZFR5cGU+IHR5cGVBcmd1bWVudHMgPSBwb3AoKTsKCiAgICBPYmplY3QgdHlwZSA9IHBvcCgpOwoKICAgIENvbnN0YW50Q29udGV4dCBzYXZlZENvbnN0YW50Q29udGV4dCA9IHBvcCgpOwogICAgaWYgKHR5cGUgaXMgR2VuZXJhdG9yKSB7CiAgICAgIHB1c2godHlwZS5pbnZva2VDb25zdHJ1Y3RvcigKICAgICAgICAgIHR5cGVBcmd1bWVudHMsIG5hbWUsIGFyZ3VtZW50cywgbmFtZVRva2VuLCBuYW1lTGFzdFRva2VuLCBjb25zdG5lc3MpKTsKICAgIH0gZWxzZSBpZiAodHlwZSBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBwdXNoKG5ldyBQYXJzZXJFcnJvckdlbmVyYXRvcigKICAgICAgICAgIHRoaXMsIG5hbWVUb2tlbiwgZmFzdGEubWVzc2FnZVN5bnRoZXRpY1Rva2VuKSk7CiAgICB9IGVsc2UgewogICAgICBTdHJpbmcgdHlwZU5hbWU7CiAgICAgIGlmICh0eXBlIGlzIFByb2JsZW1CdWlsZGVyKSB7CiAgICAgICAgdHlwZU5hbWUgPSB0eXBlLmZ1bGxOYW1lRm9yRXJyb3JzOwogICAgICB9CiAgICAgIHB1c2god3JhcFN5bnRoZXRpY0V4cHJlc3Npb24oCiAgICAgICAgICB0aHJvd05vU3VjaE1ldGhvZEVycm9yKAogICAgICAgICAgICAgIGZvcmVzdC5jcmVhdGVOdWxsTGl0ZXJhbChudWxsKS4uZmlsZU9mZnNldCA9IG9mZnNldCwKICAgICAgICAgICAgICBkZWJ1Z05hbWUodHlwZU5hbWUsIG5hbWUpLAogICAgICAgICAgICAgIGFyZ3VtZW50cywKICAgICAgICAgICAgICBuYW1lVG9rZW4uY2hhck9mZnNldCksCiAgICAgICAgICBvZmZzZXQpKTsKICAgIH0KICAgIGNvbnN0YW50Q29udGV4dCA9IHNhdmVkQ29uc3RhbnRDb250ZXh0OwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRJbXBsaWNpdENyZWF0aW9uRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiSW1wbGljaXRDcmVhdGlvbkV4cHJlc3Npb24iKTsKICAgIF9idWlsZENvbnN0cnVjdG9yUmVmZXJlbmNlSW52b2NhdGlvbigKICAgICAgICB0b2tlbiwgdG9rZW4ub2Zmc2V0LCBDb25zdG5lc3MuaW1wbGljaXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZENvbnN0cnVjdG9ySW52b2NhdGlvbigKICAgICAgVHlwZURlY2xhcmF0aW9uQnVpbGRlciB0eXBlLAogICAgICBUb2tlbiBuYW1lVG9rZW4sCiAgICAgIFRva2VuIG5hbWVMYXN0VG9rZW4sCiAgICAgIEFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBMaXN0PFVucmVzb2x2ZWRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICBpbnQgY2hhck9mZnNldCwKICAgICAgQ29uc3RuZXNzIGNvbnN0bmVzcykgewogICAgaWYgKGFyZ3VtZW50cyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBidWlsZFByb2JsZW0oZmFzdGEubWVzc2FnZU1pc3NpbmdBcmd1bWVudExpc3QsCiAgICAgICAgICBuYW1lVG9rZW4uY2hhck9mZnNldCwgbmFtZVRva2VuLmxlbmd0aCk7CiAgICB9CiAgICBpZiAobmFtZS5pc05vdEVtcHR5ICYmIGFyZ3VtZW50cy50eXBlcy5pc05vdEVtcHR5KSB7CiAgICAgIC8vIFRPRE8oYWhlKTogUG9pbnQgdG8gdGhlIHR5cGUgYXJndW1lbnRzIGluc3RlYWQuCiAgICAgIGFkZFByb2JsZW0oZmFzdGEubWVzc2FnZUNvbnN0cnVjdG9yV2l0aFR5cGVBcmd1bWVudHMsCiAgICAgICAgICBuYW1lVG9rZW4uY2hhck9mZnNldCwgbmFtZVRva2VuLmxlbmd0aCk7CiAgICB9CgogICAgaWYgKHR5cGVBcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBhc3NlcnQoZm9yZXN0LmFyZ3VtZW50c1R5cGVBcmd1bWVudHMoYXJndW1lbnRzKS5pc0VtcHR5KTsKICAgICAgZm9yZXN0LmFyZ3VtZW50c1NldFR5cGVBcmd1bWVudHMoCiAgICAgICAgICBhcmd1bWVudHMsIGJ1aWxkRGFydFR5cGVBcmd1bWVudHModHlwZUFyZ3VtZW50cykpOwogICAgfQoKICAgIFN0cmluZyBlcnJvck5hbWU7CiAgICBMb2NhdGVkTWVzc2FnZSBtZXNzYWdlOwogICAgaWYgKHR5cGUgaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgIGlmICh0eXBlIGlzIEVudW1CdWlsZGVyKSB7CiAgICAgICAgcmV0dXJuIGJ1aWxkUHJvYmxlbShmYXN0YS5tZXNzYWdlRW51bUluc3RhbnRpYXRpb24sCiAgICAgICAgICAgIG5hbWVUb2tlbi5jaGFyT2Zmc2V0LCBuYW1lVG9rZW4ubGVuZ3RoKTsKICAgICAgfQogICAgICBCdWlsZGVyIGIgPQogICAgICAgICAgdHlwZS5maW5kQ29uc3RydWN0b3JPckZhY3RvcnkobmFtZSwgY2hhck9mZnNldCwgdXJpLCBsaWJyYXJ5QnVpbGRlcik7CiAgICAgIE1lbWJlciB0YXJnZXQgPSBiPy50YXJnZXQ7CiAgICAgIGlmIChiID09IG51bGwpIHsKICAgICAgICAvLyBOb3QgZm91bmQuIFJlcG9ydGVkIGJlbG93LgogICAgICB9IGVsc2UgaWYgKGIgaXMgUHJvYmxlbUJ1aWxkZXIpIHsKICAgICAgICBtZXNzYWdlID0gYi5tZXNzYWdlLndpdGhMb2NhdGlvbih1cmksIGNoYXJPZmZzZXQsIG5vTGVuZ3RoKTsKICAgICAgfSBlbHNlIGlmIChiLmlzQ29uc3RydWN0b3IpIHsKICAgICAgICBpZiAodHlwZS5pc0Fic3RyYWN0KSB7CiAgICAgICAgICByZXR1cm4gd3JhcEludmFsaWRDb25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgICAgICAgICAgZXZhbHVhdGVBcmd1bWVudHNCZWZvcmUoCiAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cywKICAgICAgICAgICAgICAgICAgYnVpbGRBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKHR5cGUubmFtZSksCiAgICAgICAgICAgICAgICAgICAgICB0eXBlLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBuYW1lVG9rZW4uY2hhck9mZnNldCkpLAogICAgICAgICAgICAgIHRhcmdldCwKICAgICAgICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgICAgICAgY2hhck9mZnNldCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQgaXMgQ29uc3RydWN0b3IgfHwKICAgICAgICAgICh0YXJnZXQgaXMgUHJvY2VkdXJlICYmIHRhcmdldC5raW5kID09IFByb2NlZHVyZUtpbmQuRmFjdG9yeSkpIHsKICAgICAgICBFeHByZXNzaW9uIGludm9jYXRpb247CgogICAgICAgIGlmIChsZWdhY3lNb2RlICYmIGlzUmVkaXJlY3RpbmdGYWN0b3J5KHRhcmdldCwgaGVscGVyOiB0aGlzKSkgewogICAgICAgICAgLy8gSW4gbGVnYWN5IG1vZGUgdGhlIGNoZWNrcyB0aGF0IGFyZSBkb25lIGluIFtidWlsZFN0YXRpY0ludm9jYXRpb25dCiAgICAgICAgICAvLyBvbiB0aGUgaW5pdGlhbCB0YXJnZXQgb2YgYSByZWRpcmVjdGluZyBmYWN0b3J5IGludm9jYXRpb24gc2hvdWxkCiAgICAgICAgICAvLyBiZSBza2lwcGVkLiBTbyB3ZSBidWlsZCB0aGUgaW52b2NhdGlvbiBub2RlcyBkaXJlY3RseSBoZXJlIHdpdGhvdXQKICAgICAgICAgIC8vIGRvaW5nIGFueSBjaGVja3MuCiAgICAgICAgICBpZiAodGFyZ2V0LmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzICE9IG51bGwgJiYKICAgICAgICAgICAgICB0YXJnZXQuZnVuY3Rpb24udHlwZVBhcmFtZXRlcnMubGVuZ3RoICE9CiAgICAgICAgICAgICAgICAgIGZvcmVzdC5hcmd1bWVudHNUeXBlQXJndW1lbnRzKGFyZ3VtZW50cykubGVuZ3RoKSB7CiAgICAgICAgICAgIGFyZ3VtZW50cyA9IGZvcmVzdC5jcmVhdGVBcmd1bWVudHMoCiAgICAgICAgICAgICAgICBub0xvY2F0aW9uLCBmb3Jlc3QuYXJndW1lbnRzUG9zaXRpb25hbChhcmd1bWVudHMpLAogICAgICAgICAgICAgICAgbmFtZWQ6IGZvcmVzdC5hcmd1bWVudHNOYW1lZChhcmd1bWVudHMpLAogICAgICAgICAgICAgICAgdHlwZXM6IG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQoCiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCwgY29uc3QgRHluYW1pY1R5cGUoKSwKICAgICAgICAgICAgICAgICAgICBncm93YWJsZTogdHJ1ZSkpOwogICAgICAgICAgfQogICAgICAgICAgaW52b2NhdGlvbiA9IG5ldyBGYWN0b3J5Q29uc3RydWN0b3JJbnZvY2F0aW9uSnVkZ21lbnQoCiAgICAgICAgICAgICAgdGFyZ2V0LCBhcmd1bWVudHMsCiAgICAgICAgICAgICAgaXNDb25zdDogY29uc3RuZXNzID09IENvbnN0bmVzcy5leHBsaWNpdENvbnN0KQogICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBuYW1lVG9rZW4uY2hhck9mZnNldDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaW52b2NhdGlvbiA9IGJ1aWxkU3RhdGljSW52b2NhdGlvbih0YXJnZXQsIGFyZ3VtZW50cywKICAgICAgICAgICAgICBjb25zdG5lc3M6IGNvbnN0bmVzcywKICAgICAgICAgICAgICBjaGFyT2Zmc2V0OiBuYW1lVG9rZW4uY2hhck9mZnNldCwKICAgICAgICAgICAgICBjaGFyTGVuZ3RoOiBuYW1lVG9rZW4ubGVuZ3RoKTsKICAgICAgICB9CgogICAgICAgIGlmIChpbnZvY2F0aW9uIGlzIFN0YXRpY0ludm9jYXRpb24gJiYKICAgICAgICAgICAgaXNSZWRpcmVjdGluZ0ZhY3RvcnkodGFyZ2V0LCBoZWxwZXI6IHRoaXMpKSB7CiAgICAgICAgICByZWRpcmVjdGluZ0ZhY3RvcnlJbnZvY2F0aW9ucy5hZGQoaW52b2NhdGlvbik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW52b2NhdGlvbjsKICAgICAgfSBlbHNlIHsKICAgICAgICBlcnJvck5hbWUgPz89IGRlYnVnTmFtZSh0eXBlLm5hbWUsIG5hbWUpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHR5cGUgaXMgSW52YWxpZFR5cGVCdWlsZGVyKSB7CiAgICAgIExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2UgPSB0eXBlLm1lc3NhZ2U7CiAgICAgIHJldHVybiBldmFsdWF0ZUFyZ3VtZW50c0JlZm9yZSgKICAgICAgICAgIGFyZ3VtZW50cywKICAgICAgICAgIGJ1aWxkUHJvYmxlbShtZXNzYWdlLm1lc3NhZ2VPYmplY3QsIG5hbWVUb2tlbi5jaGFyT2Zmc2V0LAogICAgICAgICAgICAgIG5hbWVUb2tlbi5sZXhlbWUubGVuZ3RoKSk7CiAgICB9IGVsc2UgewogICAgICBlcnJvck5hbWUgPSBkZWJ1Z05hbWUodHlwZS5mdWxsTmFtZUZvckVycm9ycywgbmFtZSk7CiAgICB9CiAgICBlcnJvck5hbWUgPz89IG5hbWU7CgogICAgcmV0dXJuIHdyYXBVbnJlc29sdmVkVGFyZ2V0SW52b2NhdGlvbigKICAgICAgICB0aHJvd05vU3VjaE1ldGhvZEVycm9yKAogICAgICAgICAgICBmb3Jlc3QuY3JlYXRlTnVsbExpdGVyYWwobnVsbCkuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0LAogICAgICAgICAgICBlcnJvck5hbWUsCiAgICAgICAgICAgIGFyZ3VtZW50cywKICAgICAgICAgICAgbmFtZUxhc3RUb2tlbi5jaGFyT2Zmc2V0LAogICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlKSwKICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgYXJndW1lbnRzLmZpbGVPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDb25zdEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImVuZENvbnN0RXhwcmVzc2lvbiIpOwogICAgX2J1aWxkQ29uc3RydWN0b3JSZWZlcmVuY2VJbnZvY2F0aW9uKAogICAgICAgIHRva2VuLm5leHQsIHRva2VuLm9mZnNldCwgQ29uc3RuZXNzLmV4cGxpY2l0Q29uc3QpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbklmQ29udHJvbEZsb3coVG9rZW4gaWZUb2tlbikgewogICAgLy8gVE9ETyhkYW5ydWJlbCk6IGNvbnNpZGVyIHJlbW92aW5nIHRoaXMgd2hlbiBjb250cm9sIGZsb3cgc3VwcG9ydCBpcyBhZGRlZAogICAgLy8gaWYgdGhlIGlmVG9rZW4gaXMgbm90IG5lZWRlZCBmb3IgZXJyb3IgcmVwb3J0aW5nCiAgICBwdXNoKGlmVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblRoZW5Db250cm9sRmxvdyhUb2tlbiB0b2tlbikgewogICAgRXhwcmVzc2lvbiBjb25kaXRpb24gPSBwb3BGb3JWYWx1ZSgpOwogICAgZW50ZXJUaGVuRm9yVHlwZVByb21vdGlvbihjb25kaXRpb24pOwogICAgcHVzaChjb25kaXRpb24pOwogICAgc3VwZXIuYmVnaW5UaGVuQ29udHJvbEZsb3codG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVFbHNlQ29udHJvbEZsb3coVG9rZW4gZWxzZVRva2VuKSB7CiAgICB0eXBlUHJvbW90ZXI/LmVudGVyRWxzZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRJZkNvbnRyb2xGbG93KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRJZkNvbnRyb2xGbG93Iik7CiAgICBPYmplY3QgZW50cnkgPSBwb3AoKTsKICAgIE9iamVjdCBjb25kaXRpb24gPSBwb3AoKTsgLy8gcGFyZW50aGVzaXplZCBleHByZXNzaW9uCiAgICBUb2tlbiBpZlRva2VuID0gcG9wKCk7CiAgICB0eXBlUHJvbW90ZXI/LmVudGVyRWxzZSgpOwogICAgdHlwZVByb21vdGVyPy5leGl0Q29uZGl0aW9uYWwoKTsKCiAgICB0cmFuc2Zvcm1Db2xsZWN0aW9ucyA9IHRydWU7CiAgICBpZiAoZW50cnkgaXMgTWFwRW50cnkpIHsKICAgICAgcHVzaChmb3Jlc3QuY3JlYXRlSWZNYXBFbnRyeSh0b1ZhbHVlKGNvbmRpdGlvbiksIGVudHJ5LCBudWxsLCBpZlRva2VuKSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKGZvcmVzdC5jcmVhdGVJZkVsZW1lbnQoCiAgICAgICAgICB0b1ZhbHVlKGNvbmRpdGlvbiksIHRvVmFsdWUoZW50cnkpLCBudWxsLCBpZlRva2VuKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZElmRWxzZUNvbnRyb2xGbG93KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRJZkVsc2VDb250cm9sRmxvdyIpOwogICAgT2JqZWN0IGVsc2VFbnRyeSA9IHBvcCgpOyAvLyBlbHNlIGVudHJ5CiAgICBPYmplY3QgdGhlbkVudHJ5ID0gcG9wKCk7IC8vIHRoZW4gZW50cnkKICAgIE9iamVjdCBjb25kaXRpb24gPSBwb3AoKTsgLy8gcGFyZW50aGVzaXplZCBleHByZXNzaW9uCiAgICBUb2tlbiBpZlRva2VuID0gcG9wKCk7CiAgICB0eXBlUHJvbW90ZXI/LmV4aXRDb25kaXRpb25hbCgpOwoKICAgIHRyYW5zZm9ybUNvbGxlY3Rpb25zID0gdHJ1ZTsKICAgIGlmICh0aGVuRW50cnkgaXMgTWFwRW50cnkpIHsKICAgICAgaWYgKGVsc2VFbnRyeSBpcyBNYXBFbnRyeSkgewogICAgICAgIHB1c2goZm9yZXN0LmNyZWF0ZUlmTWFwRW50cnkoCiAgICAgICAgICAgIHRvVmFsdWUoY29uZGl0aW9uKSwgdGhlbkVudHJ5LCBlbHNlRW50cnksIGlmVG9rZW4pKTsKICAgICAgfSBlbHNlIGlmIChlbHNlRW50cnkgaXMgU3ByZWFkRWxlbWVudCkgewogICAgICAgIHB1c2goZm9yZXN0LmNyZWF0ZUlmTWFwRW50cnkoCiAgICAgICAgICAgIHRvVmFsdWUoY29uZGl0aW9uKSwKICAgICAgICAgICAgdGhlbkVudHJ5LAogICAgICAgICAgICBuZXcgU3ByZWFkTWFwRW50cnkoZWxzZUVudHJ5LmV4cHJlc3Npb24sIGVsc2VFbnRyeS5pc051bGxBd2FyZSksCiAgICAgICAgICAgIGlmVG9rZW4pKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbnQgb2Zmc2V0ID0gZWxzZUVudHJ5IGlzIEV4cHJlc3Npb24KICAgICAgICAgICAgPyBlbHNlRW50cnkuZmlsZU9mZnNldAogICAgICAgICAgICA6IG9mZnNldEZvclRva2VuKGlmVG9rZW4pOwogICAgICAgIHB1c2gobmV3IE1hcEVudHJ5KAogICAgICAgICAgICBkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihidWlsZFByb2JsZW0oCiAgICAgICAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQWZ0ZXJCdXRHb3Qud2l0aEFyZ3VtZW50cygnOicpLAogICAgICAgICAgICAgICAgb2Zmc2V0LAogICAgICAgICAgICAgICAgMSkpLAogICAgICAgICAgICBuZXcgTnVsbExpdGVyYWwoKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKGlmVG9rZW4pKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChlbHNlRW50cnkgaXMgTWFwRW50cnkpIHsKICAgICAgaWYgKHRoZW5FbnRyeSBpcyBTcHJlYWRFbGVtZW50KSB7CiAgICAgICAgcHVzaChmb3Jlc3QuY3JlYXRlSWZNYXBFbnRyeSgKICAgICAgICAgICAgdG9WYWx1ZShjb25kaXRpb24pLAogICAgICAgICAgICBuZXcgU3ByZWFkTWFwRW50cnkodGhlbkVudHJ5LmV4cHJlc3Npb24sIHRoZW5FbnRyeS5pc051bGxBd2FyZSksCiAgICAgICAgICAgIGVsc2VFbnRyeSwKICAgICAgICAgICAgaWZUb2tlbikpOwogICAgICB9IGVsc2UgewogICAgICAgIGludCBvZmZzZXQgPSB0aGVuRW50cnkgaXMgRXhwcmVzc2lvbgogICAgICAgICAgICA/IHRoZW5FbnRyeS5maWxlT2Zmc2V0CiAgICAgICAgICAgIDogb2Zmc2V0Rm9yVG9rZW4oaWZUb2tlbik7CiAgICAgICAgcHVzaChuZXcgTWFwRW50cnkoCiAgICAgICAgICAgIGRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRBZnRlckJ1dEdvdC53aXRoQXJndW1lbnRzKCc6JyksCiAgICAgICAgICAgICAgICBvZmZzZXQsCiAgICAgICAgICAgICAgICAxKSksCiAgICAgICAgICAgIG5ldyBOdWxsTGl0ZXJhbCgpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4oaWZUb2tlbikpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBwdXNoKGZvcmVzdC5jcmVhdGVJZkVsZW1lbnQoCiAgICAgICAgICB0b1ZhbHVlKGNvbmRpdGlvbiksIHRvVmFsdWUodGhlbkVudHJ5KSwgdG9WYWx1ZShlbHNlRW50cnkpLCBpZlRva2VuKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVNwcmVhZEV4cHJlc3Npb24oVG9rZW4gc3ByZWFkVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlNwcmVhZEV4cHJlc3Npb24iKTsKICAgIE9iamVjdCBleHByZXNzaW9uID0gcG9wKCk7CiAgICB0cmFuc2Zvcm1Db2xsZWN0aW9ucyA9IHRydWU7CiAgICBwdXNoKGZvcmVzdC5jcmVhdGVTcHJlYWRFbGVtZW50KHRvVmFsdWUoZXhwcmVzc2lvbiksIHNwcmVhZFRva2VuKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFR5cGVBcmd1bWVudHMoaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiVHlwZUFyZ3VtZW50cyIpOwogICAgcHVzaChjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxVbnJlc29sdmVkVHlwZT4oKS5wb3Aoc3RhY2ssIGNvdW50KSA/PwogICAgICAgIE51bGxWYWx1ZS5UeXBlQXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW52YWxpZFR5cGVBcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkludmFsaWRUeXBlQXJndW1lbnRzIik7CiAgICBwb3AoTnVsbFZhbHVlLlR5cGVBcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVUaGlzRXhwcmVzc2lvbihUb2tlbiB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQgY29udGV4dCkgewogICAgZGVidWdFdmVudCgiVGhpc0V4cHJlc3Npb24iKTsKICAgIGlmIChjb250ZXh0LmlzU2NvcGVSZWZlcmVuY2UgJiYgaXNEZWNsYXJhdGlvbkluc3RhbmNlQ29udGV4dCkgewogICAgICBpZiAoZXh0ZW5zaW9uVGhpcyAhPSBudWxsKSB7CiAgICAgICAgcHVzaChfY3JlYXRlUmVhZE9ubHlWYXJpYWJsZUFjY2VzcygKICAgICAgICAgICAgZXh0ZW5zaW9uVGhpcywgdG9rZW4sIG9mZnNldEZvclRva2VuKHRva2VuKSwgJ3RoaXMnKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcHVzaChuZXcgVGhpc0FjY2Vzc0dlbmVyYXRvcigKICAgICAgICAgICAgdGhpcywgdG9rZW4sIGluSW5pdGlhbGl6ZXIsIGluRmllbGRJbml0aWFsaXplcikpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBwdXNoKG5ldyBJbmNvbXBsZXRlRXJyb3JHZW5lcmF0b3IoCiAgICAgICAgICB0aGlzLCB0b2tlbiwgZmFzdGEubWVzc2FnZVRoaXNBc0lkZW50aWZpZXIpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3VwZXJFeHByZXNzaW9uKFRva2VuIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dCBjb250ZXh0KSB7CiAgICBkZWJ1Z0V2ZW50KCJTdXBlckV4cHJlc3Npb24iKTsKICAgIGlmIChjb250ZXh0LmlzU2NvcGVSZWZlcmVuY2UgJiYKICAgICAgICBpc0RlY2xhcmF0aW9uSW5zdGFuY2VDb250ZXh0ICYmCiAgICAgICAgZXh0ZW5zaW9uVGhpcyA9PSBudWxsKSB7CiAgICAgIE1lbWJlciBtZW1iZXIgPSB0aGlzLm1lbWJlci50YXJnZXQ7CiAgICAgIG1lbWJlci50cmFuc2Zvcm1lckZsYWdzIHw9IFRyYW5zZm9ybWVyRmxhZy5zdXBlckNhbGxzOwogICAgICBwdXNoKG5ldyBUaGlzQWNjZXNzR2VuZXJhdG9yKAogICAgICAgICAgdGhpcywgdG9rZW4sIGluSW5pdGlhbGl6ZXIsIGluRmllbGRJbml0aWFsaXplciwKICAgICAgICAgIGlzU3VwZXI6IHRydWUpKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2gobmV3IEluY29tcGxldGVFcnJvckdlbmVyYXRvcigKICAgICAgICAgIHRoaXMsIHRva2VuLCBmYXN0YS5tZXNzYWdlU3VwZXJBc0lkZW50aWZpZXIpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTmFtZWRBcmd1bWVudChUb2tlbiBjb2xvbikgewogICAgZGVidWdFdmVudCgiTmFtZWRBcmd1bWVudCIpOwogICAgRXhwcmVzc2lvbiB2YWx1ZSA9IHBvcEZvclZhbHVlKCk7CiAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBwb3AoKTsKICAgIHB1c2gobmV3IE5hbWVkRXhwcmVzc2lvbihpZGVudGlmaWVyLm5hbWUsIHZhbHVlKQogICAgICAuLmZpbGVPZmZzZXQgPSBpZGVudGlmaWVyLmNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGdW5jdGlvbk5hbWUoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkZ1bmN0aW9uTmFtZSIpOwogICAgSWRlbnRpZmllciBuYW1lID0gcG9wKCk7CiAgICBUb2tlbiBuYW1lVG9rZW4gPSBkZXByZWNhdGVkX2V4dHJhY3RUb2tlbihuYW1lKTsKICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50KAogICAgICAgIG5hbWUubmFtZSwgZnVuY3Rpb25OZXN0aW5nTGV2ZWwsCiAgICAgICAgZm9yU3ludGhldGljVG9rZW46IG5hbWVUb2tlbi5pc1N5bnRoZXRpYywKICAgICAgICBpc0ZpbmFsOiB0cnVlLAogICAgICAgIGlzTG9jYWxGdW5jdGlvbjogdHJ1ZSkKICAgICAgLi5maWxlT2Zmc2V0ID0gbmFtZS5jaGFyT2Zmc2V0OwogICAgLy8gVE9ETyhhaGUpOiBXaHkgYXJlIHdlIGxvb2tpbmcgdXAgaW4gbG9jYWwgc2NvcGUsIGJ1dCBkZWNsYXJpbmcgaW4gcGFyZW50CiAgICAvLyBzY29wZT8KICAgIEJ1aWxkZXIgZXhpc3RpbmcgPSBzY29wZS5sb2NhbFtuYW1lLm5hbWVdOwogICAgaWYgKGV4aXN0aW5nICE9IG51bGwpIHsKICAgICAgcmVwb3J0RHVwbGljYXRlZERlY2xhcmF0aW9uKGV4aXN0aW5nLCBuYW1lLm5hbWUsIG5hbWUuY2hhck9mZnNldCk7CiAgICB9CiAgICBwdXNoKG5ldyBGdW5jdGlvbkRlY2xhcmF0aW9uSnVkZ21lbnQoCiAgICAgICAgdmFyaWFibGUsCiAgICAgICAgLy8gVGhlIGZ1bmN0aW9uIG5vZGUgaXMgY3JlYXRlZCBsYXRlci4KICAgICAgICBudWxsKQogICAgICAuLmZpbGVPZmZzZXQgPSBiZWdpblRva2VuLmNoYXJPZmZzZXQpOwogICAgZGVjbGFyZVZhcmlhYmxlKHZhcmlhYmxlLCBzY29wZS5wYXJlbnQpOwogIH0KCiAgdm9pZCBlbnRlckZ1bmN0aW9uKCkgewogICAgZGVidWdFdmVudCgiZW50ZXJGdW5jdGlvbiIpOwogICAgZnVuY3Rpb25OZXN0aW5nTGV2ZWwrKzsKICAgIHB1c2goc3dpdGNoU2NvcGUgPz8gTnVsbFZhbHVlLlN3aXRjaFNjb3BlKTsKICAgIHN3aXRjaFNjb3BlID0gbnVsbDsKICAgIHB1c2goaW5DYXRjaEJsb2NrKTsKICAgIGluQ2F0Y2hCbG9jayA9IGZhbHNlOwogIH0KCiAgdm9pZCBleGl0RnVuY3Rpb24oKSB7CiAgICBkZWJ1Z0V2ZW50KCJleGl0RnVuY3Rpb24iKTsKICAgIGZ1bmN0aW9uTmVzdGluZ0xldmVsLS07CiAgICBpbkNhdGNoQmxvY2sgPSBwb3AoKTsKICAgIHN3aXRjaFNjb3BlID0gcG9wKCk7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMgPSBwb3AoKTsKICAgIGV4aXRMb2NhbFNjb3BlKCk7CiAgICBwdXNoKHR5cGVWYXJpYWJsZXMgPz8gTnVsbFZhbHVlLlR5cGVWYXJpYWJsZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkxvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5Mb2NhbEZ1bmN0aW9uRGVjbGFyYXRpb24iKTsKICAgIGVudGVyRnVuY3Rpb24oKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5OYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5OYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbiIpOwogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzID0gcG9wKCk7CiAgICAvLyBDcmVhdGUgYW4gYWRkaXRpb25hbCBzY29wZSBpbiB3aGljaCB0aGUgbmFtZWQgZnVuY3Rpb24gZXhwcmVzc2lvbiBpcwogICAgLy8gZGVjbGFyZWQuCiAgICBlbnRlckxvY2FsU2NvcGUoIm5hbWVkIGZ1bmN0aW9uIik7CiAgICBwdXNoKHR5cGVWYXJpYWJsZXMgPz8gTnVsbFZhbHVlLlR5cGVWYXJpYWJsZXMpOwogICAgZW50ZXJGdW5jdGlvbigpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZ1bmN0aW9uRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5GdW5jdGlvbkV4cHJlc3Npb24iKTsKICAgIGVudGVyRnVuY3Rpb24oKTsKICB9CgogIHZvaWQgcHVzaE5hbWVkRnVuY3Rpb24oVG9rZW4gdG9rZW4sIGJvb2wgaXNGdW5jdGlvbkV4cHJlc3Npb24pIHsKICAgIFN0YXRlbWVudCBib2R5ID0gcG9wU3RhdGVtZW50KCk7CiAgICBBc3luY01hcmtlciBhc3luY01vZGlmaWVyID0gcG9wKCk7CiAgICBleGl0TG9jYWxTY29wZSgpOwogICAgRm9ybWFsUGFyYW1ldGVycyBmb3JtYWxzID0gcG9wKCk7CiAgICBPYmplY3QgZGVjbGFyYXRpb24gPSBwb3AoKTsKICAgIFVucmVzb2x2ZWRUeXBlIHJldHVyblR5cGUgPSBwb3AoKTsKICAgIGJvb2wgaGFzSW1wbGljaXRSZXR1cm5UeXBlID0gcmV0dXJuVHlwZSA9PSBudWxsOwogICAgZXhpdEZ1bmN0aW9uKCk7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVQYXJhbWV0ZXJzID0gcG9wKCk7CiAgICBMaXN0PEV4cHJlc3Npb24+IGFubm90YXRpb25zOwogICAgaWYgKCFpc0Z1bmN0aW9uRXhwcmVzc2lvbikgewogICAgICBhbm5vdGF0aW9ucyA9IHBvcCgpOyAvLyBNZXRhZGF0YS4KICAgIH0KICAgIEZ1bmN0aW9uTm9kZSBmdW5jdGlvbiA9IGZvcm1hbHMuYnVpbGRGdW5jdGlvbk5vZGUobGlicmFyeUJ1aWxkZXIsCiAgICAgICAgcmV0dXJuVHlwZSwgdHlwZVBhcmFtZXRlcnMsIGFzeW5jTW9kaWZpZXIsIGJvZHksIHRva2VuLmNoYXJPZmZzZXQpOwoKICAgIGlmIChkZWNsYXJhdGlvbiBpcyBGdW5jdGlvbkRlY2xhcmF0aW9uKSB7CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBkZWNsYXJhdGlvbi52YXJpYWJsZTsKICAgICAgaWYgKGFubm90YXRpb25zICE9IG51bGwpIHsKICAgICAgICBmb3IgKEV4cHJlc3Npb24gYW5ub3RhdGlvbiBpbiBhbm5vdGF0aW9ucykgewogICAgICAgICAgdmFyaWFibGUuYWRkQW5ub3RhdGlvbihhbm5vdGF0aW9uKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgRnVuY3Rpb25EZWNsYXJhdGlvbkp1ZGdtZW50LnNldEhhc0ltcGxpY2l0UmV0dXJuVHlwZSgKICAgICAgICAgIGRlY2xhcmF0aW9uLCBoYXNJbXBsaWNpdFJldHVyblR5cGUpOwoKICAgICAgdmFyaWFibGUudHlwZSA9IGZ1bmN0aW9uLmZ1bmN0aW9uVHlwZTsKICAgICAgaWYgKGlzRnVuY3Rpb25FeHByZXNzaW9uKSB7CiAgICAgICAgRXhwcmVzc2lvbiBvbGRJbml0aWFsaXplciA9IHZhcmlhYmxlLmluaXRpYWxpemVyOwogICAgICAgIHZhcmlhYmxlLmluaXRpYWxpemVyID0gbmV3IEZ1bmN0aW9uRXhwcmVzc2lvbihmdW5jdGlvbikKICAgICAgICAgIC4ucGFyZW50ID0gdmFyaWFibGUKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGZvcm1hbHMuY2hhck9mZnNldDsKICAgICAgICBleGl0TG9jYWxTY29wZSgpOwogICAgICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IG5ldyBOYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbkp1ZGdtZW50KHZhcmlhYmxlKTsKICAgICAgICBpZiAob2xkSW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICAgICAgLy8gVGhpcyBtdXN0IGhhdmUgYmVlbiBhIGNvbXBpbGUtdGltZSBlcnJvci4KICAgICAgICAgIEV4cHJlc3Npb24gZXJyb3IgPSBkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihvbGRJbml0aWFsaXplcik7CiAgICAgICAgICBhc3NlcnQoaXNFcnJvbmVvdXNOb2RlKGVycm9yKSk7CiAgICAgICAgICBpbnQgb2Zmc2V0ID0gZm9yZXN0LnJlYWRPZmZzZXQoZXhwcmVzc2lvbik7CiAgICAgICAgICBwdXNoKHdyYXBTeW50aGV0aWNFeHByZXNzaW9uKAogICAgICAgICAgICAgIG5ldyBMZXQoCiAgICAgICAgICAgICAgICAgIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKGVycm9yKS4uZmlsZU9mZnNldCA9IG9mZnNldCwKICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbikKICAgICAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldCwKICAgICAgICAgICAgICBvZmZzZXQpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcHVzaChleHByZXNzaW9uKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZGVjbGFyYXRpb24uZnVuY3Rpb24gPSBmdW5jdGlvbjsKICAgICAgICBmdW5jdGlvbi5wYXJlbnQgPSBkZWNsYXJhdGlvbjsKICAgICAgICBpZiAodmFyaWFibGUuaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICAgICAgLy8gVGhpcyBtdXN0IGhhdmUgYmVlbiBhIGNvbXBpbGUtdGltZSBlcnJvci4KICAgICAgICAgIGFzc2VydChpc0Vycm9uZW91c05vZGUodmFyaWFibGUuaW5pdGlhbGl6ZXIpKTsKCiAgICAgICAgICBwdXNoKGZvcmVzdC5jcmVhdGVCbG9jaygKICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgIDxTdGF0ZW1lbnQ+WwogICAgICAgICAgICAgICAgZm9yZXN0LmNyZWF0ZUV4cHJlc3Npb25TdGF0ZW1lbnQodmFyaWFibGUuaW5pdGlhbGl6ZXIsIHRva2VuKSwKICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICBudWxsKQogICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBkZWNsYXJhdGlvbi5maWxlT2Zmc2V0KTsKICAgICAgICAgIHZhcmlhYmxlLmluaXRpYWxpemVyID0gbnVsbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcHVzaChkZWNsYXJhdGlvbik7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gdW5oYW5kbGVkKCIke2RlY2xhcmF0aW9uLnJ1bnRpbWVUeXBlfSIsICJwdXNoTmFtZWRGdW5jdGlvbiIsCiAgICAgICAgICB0b2tlbi5jaGFyT2Zmc2V0LCB1cmkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmROYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbihUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiTmFtZWRGdW5jdGlvbkV4cHJlc3Npb24iKTsKICAgIHB1c2hOYW1lZEZ1bmN0aW9uKGVuZFRva2VuLCB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTG9jYWxGdW5jdGlvbkRlY2xhcmF0aW9uKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJMb2NhbEZ1bmN0aW9uRGVjbGFyYXRpb24iKTsKICAgIHB1c2hOYW1lZEZ1bmN0aW9uKHRva2VuLCBmYWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZ1bmN0aW9uRXhwcmVzc2lvbihUb2tlbiBiZWdpblRva2VuLCBUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiRnVuY3Rpb25FeHByZXNzaW9uIik7CiAgICBTdGF0ZW1lbnQgYm9keSA9IHBvcFN0YXRlbWVudCgpOwogICAgQXN5bmNNYXJrZXIgYXN5bmNNb2RpZmllciA9IHBvcCgpOwogICAgZXhpdExvY2FsU2NvcGUoKTsKICAgIEZvcm1hbFBhcmFtZXRlcnMgZm9ybWFscyA9IHBvcCgpOwogICAgZXhpdEZ1bmN0aW9uKCk7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVQYXJhbWV0ZXJzID0gcG9wKCk7CiAgICBGdW5jdGlvbk5vZGUgZnVuY3Rpb24gPSBmb3JtYWxzLmJ1aWxkRnVuY3Rpb25Ob2RlKGxpYnJhcnlCdWlsZGVyLCBudWxsLAogICAgICAgIHR5cGVQYXJhbWV0ZXJzLCBhc3luY01vZGlmaWVyLCBib2R5LCB0b2tlbi5jaGFyT2Zmc2V0KQogICAgICAuLmZpbGVPZmZzZXQgPSBiZWdpblRva2VuLmNoYXJPZmZzZXQ7CgogICAgaWYgKGxpYnJhcnlCdWlsZGVyLmxlZ2FjeU1vZGUgJiYgYXN5bmNNb2RpZmllciAhPSBBc3luY01hcmtlci5TeW5jKSB7CiAgICAgIERhcnRUeXBlIHJldHVyblR5cGU7CiAgICAgIHN3aXRjaCAoYXN5bmNNb2RpZmllcikgewogICAgICAgIGNhc2UgQXN5bmNNYXJrZXIuQXN5bmM6CiAgICAgICAgICByZXR1cm5UeXBlID0gY29yZVR5cGVzLmZ1dHVyZUNsYXNzLnJhd1R5cGU7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEFzeW5jTWFya2VyLkFzeW5jU3RhcjoKICAgICAgICAgIHJldHVyblR5cGUgPSBjb3JlVHlwZXMuc3RyZWFtQ2xhc3MucmF3VHlwZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQXN5bmNNYXJrZXIuU3luY1N0YXI6CiAgICAgICAgICByZXR1cm5UeXBlID0gY29yZVR5cGVzLml0ZXJhYmxlQ2xhc3MucmF3VHlwZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm5UeXBlID0gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGZ1bmN0aW9uLnJldHVyblR5cGUgPSByZXR1cm5UeXBlOwogICAgfQogICAgaWYgKGNvbnN0YW50Q29udGV4dCAhPSBDb25zdGFudENvbnRleHQubm9uZSkgewogICAgICBwdXNoKGJ1aWxkUHJvYmxlbShmYXN0YS5tZXNzYWdlTm90QUNvbnN0YW50RXhwcmVzc2lvbiwgZm9ybWFscy5jaGFyT2Zmc2V0LAogICAgICAgICAgZm9ybWFscy5sZW5ndGgpKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2gobmV3IEZ1bmN0aW9uRXhwcmVzc2lvbihmdW5jdGlvbikKICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbihiZWdpblRva2VuKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZERvV2hpbGVTdGF0ZW1lbnQoCiAgICAgIFRva2VuIGRvS2V5d29yZCwgVG9rZW4gd2hpbGVLZXl3b3JkLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiRG9XaGlsZVN0YXRlbWVudCIpOwogICAgRXhwcmVzc2lvbiBjb25kaXRpb24gPSBwb3BGb3JWYWx1ZSgpOwogICAgU3RhdGVtZW50IGJvZHkgPSBwb3BTdGF0ZW1lbnQoKTsKICAgIEp1bXBUYXJnZXQgY29udGludWVUYXJnZXQgPSBleGl0Q29udGludWVUYXJnZXQoKTsKICAgIEp1bXBUYXJnZXQgYnJlYWtUYXJnZXQgPSBleGl0QnJlYWtUYXJnZXQoKTsKICAgIGlmIChjb250aW51ZVRhcmdldC5oYXNVc2VycykgewogICAgICBib2R5ID0gZm9yZXN0LmNyZWF0ZUxhYmVsZWRTdGF0ZW1lbnQoYm9keSk7CiAgICAgIGNvbnRpbnVlVGFyZ2V0LnJlc29sdmVDb250aW51ZXMoZm9yZXN0LCBib2R5KTsKICAgIH0KICAgIFN0YXRlbWVudCByZXN1bHQgPSBmb3Jlc3QuY3JlYXRlRG9TdGF0ZW1lbnQoCiAgICAgICAgZG9LZXl3b3JkLCBib2R5LCB3aGlsZUtleXdvcmQsIGNvbmRpdGlvbiwgZW5kVG9rZW4pOwogICAgaWYgKGJyZWFrVGFyZ2V0Lmhhc1VzZXJzKSB7CiAgICAgIHJlc3VsdCA9IGZvcmVzdC5jcmVhdGVMYWJlbGVkU3RhdGVtZW50KHJlc3VsdCk7CiAgICAgIGJyZWFrVGFyZ2V0LnJlc29sdmVCcmVha3MoZm9yZXN0LCByZXN1bHQpOwogICAgfQogICAgZXhpdExvb3BPclN3aXRjaChyZXN1bHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZvckluRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgZW50ZXJMb2NhbFNjb3BlKG51bGwsIHNjb3BlLnBhcmVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZvckluRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiRm9ySW5FeHByZXNzaW9uIik7CiAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwb3BGb3JWYWx1ZSgpOwogICAgZXhpdExvY2FsU2NvcGUoKTsKICAgIHB1c2goZXhwcmVzc2lvbiA/PyBOdWxsVmFsdWUuRXhwcmVzc2lvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUZvckluTG9vcFBhcnRzKFRva2VuIGF3YWl0VG9rZW4sIFRva2VuIGZvclRva2VuLAogICAgICBUb2tlbiBsZWZ0UGFyZW50aGVzaXMsIFRva2VuIGluS2V5d29yZCkgewogICAgcHVzaChhd2FpdFRva2VuID8/IE51bGxWYWx1ZS5Bd2FpdFRva2VuKTsKICAgIHB1c2goZm9yVG9rZW4pOwogICAgcHVzaChpbktleXdvcmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGb3JJbkNvbnRyb2xGbG93KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJGb3JJbkNvbnRyb2xGbG93Iik7CiAgICBPYmplY3QgZW50cnkgPSBwb3AoKTsKICAgIFRva2VuIGluVG9rZW4gPSBwb3AoKTsKICAgIFRva2VuIGZvclRva2VuID0gcG9wKCk7CiAgICBUb2tlbiBhd2FpdFRva2VuID0gcG9wKE51bGxWYWx1ZS5Bd2FpdFRva2VuKTsKICAgIEV4cHJlc3Npb24gaXRlcmFibGUgPSBwb3BGb3JWYWx1ZSgpOwogICAgT2JqZWN0IGx2YWx1ZSA9IHBvcCgpOyAvLyBsdmFsdWUKICAgIGV4aXRMb2NhbFNjb3BlKCk7CgogICAgaWYgKGNvbnN0YW50Q29udGV4dCAhPSBDb25zdGFudENvbnRleHQubm9uZSkgewogICAgICBoYW5kbGVSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgZmFzdGEudGVtcGxhdGVDYW50VXNlQ29udHJvbEZsb3dPclNwcmVhZEFzQ29uc3RhbnQKICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhmb3JUb2tlbiksCiAgICAgICAgICBmb3JUb2tlbiwKICAgICAgICAgIGZvclRva2VuKTsKICAgICAgcHVzaChpbnZhbGlkQ29sbGVjdGlvbkVsZW1lbnQpOwogICAgICByZXR1cm47CiAgICB9CgogICAgdHJhbnNmb3JtQ29sbGVjdGlvbnMgPSB0cnVlOwogICAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSA9IGJ1aWxkRm9ySW5WYXJpYWJsZShsdmFsdWUpOwogICAgRXhwcmVzc2lvbiBwcm9ibGVtID0gY2hlY2tGb3JJblZhcmlhYmxlKGx2YWx1ZSwgdmFyaWFibGUsIGZvclRva2VuKTsKICAgIFN0YXRlbWVudCBwcm9sb2d1ZSA9IGJ1aWxkRm9ySW5Cb2R5KGx2YWx1ZSwgdmFyaWFibGUsIGZvclRva2VuLCBpblRva2VuKTsKICAgIGlmIChlbnRyeSBpcyBNYXBFbnRyeSkgewogICAgICBwdXNoKGZvcmVzdC5jcmVhdGVGb3JJbk1hcEVudHJ5KAogICAgICAgICAgdmFyaWFibGUsIGl0ZXJhYmxlLCBwcm9sb2d1ZSwgZW50cnksIHByb2JsZW0sIGZvclRva2VuLAogICAgICAgICAgaXNBc3luYzogYXdhaXRUb2tlbiAhPSBudWxsKSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKGZvcmVzdC5jcmVhdGVGb3JJbkVsZW1lbnQoCiAgICAgICAgICB2YXJpYWJsZSwgaXRlcmFibGUsIHByb2xvZ3VlLCB0b1ZhbHVlKGVudHJ5KSwgcHJvYmxlbSwgZm9yVG9rZW4sCiAgICAgICAgICBpc0FzeW5jOiBhd2FpdFRva2VuICE9IG51bGwpKTsKICAgIH0KICB9CgogIFZhcmlhYmxlRGVjbGFyYXRpb24gYnVpbGRGb3JJblZhcmlhYmxlKE9iamVjdCBsdmFsdWUpIHsKICAgIGlmIChsdmFsdWUgaXMgVmFyaWFibGVEZWNsYXJhdGlvbikgcmV0dXJuIGx2YWx1ZTsKICAgIHJldHVybiBmb3Jlc3QuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbkZvclZhbHVlKG5vTG9jYXRpb24sIG51bGwpOwogIH0KCiAgRXhwcmVzc2lvbiBjaGVja0ZvckluVmFyaWFibGUoCiAgICAgIE9iamVjdCBsdmFsdWUsIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIFRva2VuIGZvclRva2VuKSB7CiAgICBpZiAobHZhbHVlIGlzIFZhcmlhYmxlRGVjbGFyYXRpb24pIHsKICAgICAgaWYgKHZhcmlhYmxlLmlzQ29uc3QpIHsKICAgICAgICByZXR1cm4gYnVpbGRQcm9ibGVtKGZhc3RhLm1lc3NhZ2VGb3JJbkxvb3BXaXRoQ29uc3RWYXJpYWJsZSwKICAgICAgICAgICAgdmFyaWFibGUuZmlsZU9mZnNldCwgdmFyaWFibGUubmFtZS5sZW5ndGgpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGx2YWx1ZSBpcyEgR2VuZXJhdG9yKSB7CiAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGZvcmVzdC5pc1ZhcmlhYmxlc0RlY2xhcmF0aW9uKGx2YWx1ZSkKICAgICAgICAgID8gZmFzdGEubWVzc2FnZUZvckluTG9vcEV4YWN0bHlPbmVWYXJpYWJsZQogICAgICAgICAgOiBmYXN0YS5tZXNzYWdlRm9ySW5Mb29wTm90QXNzaWduYWJsZTsKICAgICAgVG9rZW4gdG9rZW4gPSBmb3JUb2tlbi5uZXh0Lm5leHQ7CiAgICAgIHJldHVybiBidWlsZFByb2JsZW0oCiAgICAgICAgICBtZXNzYWdlLCBvZmZzZXRGb3JUb2tlbih0b2tlbiksIGxlbmd0aEZvclRva2VuKHRva2VuKSk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIFN0YXRlbWVudCBidWlsZEZvckluQm9keShPYmplY3QgbHZhbHVlLCBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLAogICAgICBUb2tlbiBmb3JUb2tlbiwgVG9rZW4gaW5LZXl3b3JkKSB7CiAgICBpZiAobHZhbHVlIGlzIFZhcmlhYmxlRGVjbGFyYXRpb24pIHJldHVybiBudWxsOwogICAgaWYgKGx2YWx1ZSBpcyBHZW5lcmF0b3IpIHsKICAgICAgLy8vIFdlIGFyZSBpbiB0aGlzIGNhc2UsIHdoZXJlIGBsdmFsdWVgIGlzbid0IGEgW1ZhcmlhYmxlRGVjbGFyYXRpb25dOgogICAgICAvLy8KICAgICAgLy8vICAgICBmb3IgKGx2YWx1ZSBpbiBleHByZXNzaW9uKSBib2R5CiAgICAgIC8vLwogICAgICAvLy8gVGhpcyBpcyBub3JtYWxpemVkIHRvOgogICAgICAvLy8KICAgICAgLy8vICAgICBmb3IgKGZpbmFsICN0IGluIGV4cHJlc3Npb24pIHsKICAgICAgLy8vICAgICAgIGx2YWx1ZSA9ICN0OwogICAgICAvLy8gICAgICAgYm9keTsKICAgICAgLy8vICAgICB9CiAgICAgIFR5cGVQcm9tb3Rpb25GYWN0IGZhY3QgPQogICAgICAgICAgdHlwZVByb21vdGVyPy5nZXRGYWN0Rm9yQWNjZXNzKHZhcmlhYmxlLCBmdW5jdGlvbk5lc3RpbmdMZXZlbCk7CiAgICAgIFR5cGVQcm9tb3Rpb25TY29wZSBzY29wZSA9IHR5cGVQcm9tb3Rlcj8uY3VycmVudFNjb3BlOwogICAgICBFeHByZXNzaW9uIHN5bnRoZXRpY0Fzc2lnbm1lbnQgPSBsdmFsdWUuYnVpbGRBc3NpZ25tZW50KAogICAgICAgICAgbmV3IFZhcmlhYmxlR2V0SnVkZ21lbnQodmFyaWFibGUsIGZhY3QsIHNjb3BlKQogICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBpbktleXdvcmQub2Zmc2V0LAogICAgICAgICAgdm9pZENvbnRleHQ6IHRydWUpOwogICAgICBpZiAoc3ludGhldGljQXNzaWdubWVudCBpcyBzaGFkb3cuU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50KSB7CiAgICAgICAgc3ludGhldGljQXNzaWdubWVudCA9IHdyYXBTeW50aGV0aWNFeHByZXNzaW9uKAogICAgICAgICAgICBkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihzeW50aGV0aWNBc3NpZ25tZW50KSwKICAgICAgICAgICAgb2Zmc2V0Rm9yVG9rZW4obHZhbHVlLnRva2VuKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGZvcmVzdC5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KHN5bnRoZXRpY0Fzc2lnbm1lbnQsIG51bGwpOwogICAgfQogICAgTWVzc2FnZSBtZXNzYWdlID0gZm9yZXN0LmlzVmFyaWFibGVzRGVjbGFyYXRpb24obHZhbHVlKQogICAgICAgID8gZmFzdGEubWVzc2FnZUZvckluTG9vcEV4YWN0bHlPbmVWYXJpYWJsZQogICAgICAgIDogZmFzdGEubWVzc2FnZUZvckluTG9vcE5vdEFzc2lnbmFibGU7CiAgICBUb2tlbiB0b2tlbiA9IGZvclRva2VuLm5leHQubmV4dDsKICAgIFN0YXRlbWVudCBib2R5OwogICAgaWYgKGZvcmVzdC5pc1ZhcmlhYmxlc0RlY2xhcmF0aW9uKGx2YWx1ZSkpIHsKICAgICAgYm9keSA9IGZvcmVzdC5jcmVhdGVCbG9jaygKICAgICAgICAgIG51bGwsCiAgICAgICAgICAvLyBOZXcgbGlzdCBiZWNhdXNlIHRoZSBkZWNsYXJhdGlvbnMgYXJlIG5vdCBhIGdyb3dhYmxlIGxpc3QuCiAgICAgICAgICBuZXcgTGlzdDxTdGF0ZW1lbnQ+LmZyb20oCiAgICAgICAgICAgICAgZm9yZXN0LnZhcmlhYmxlc0RlY2xhcmF0aW9uRXh0cmFjdERlY2xhcmF0aW9ucyhsdmFsdWUpKSwKICAgICAgICAgIG51bGwpOwogICAgfSBlbHNlIHsKICAgICAgYm9keSA9IGZvcmVzdC5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KGx2YWx1ZSwgbnVsbCk7CiAgICB9CiAgICByZXR1cm4gY29tYmluZVN0YXRlbWVudHMoCiAgICAgICAgZm9yZXN0LmNyZWF0ZUV4cHJlc3Npb25TdGF0ZW1lbnQoCiAgICAgICAgICAgIGJ1aWxkUHJvYmxlbShtZXNzYWdlLCBvZmZzZXRGb3JUb2tlbih0b2tlbiksIGxlbmd0aEZvclRva2VuKHRva2VuKSksCiAgICAgICAgICAgIG51bGwpLAogICAgICAgIGJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGb3JJbihUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiRm9ySW4iKTsKICAgIFN0YXRlbWVudCBib2R5ID0gcG9wU3RhdGVtZW50KCk7CgogICAgVG9rZW4gaW5LZXl3b3JkID0gcG9wKCk7CiAgICBUb2tlbiBmb3JUb2tlbiA9IHBvcCgpOwogICAgVG9rZW4gYXdhaXRUb2tlbiA9IHBvcChOdWxsVmFsdWUuQXdhaXRUb2tlbik7CgogICAgRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcG9wRm9yVmFsdWUoKTsKICAgIE9iamVjdCBsdmFsdWUgPSBwb3AoKTsKICAgIGV4aXRMb2NhbFNjb3BlKCk7CiAgICBKdW1wVGFyZ2V0IGNvbnRpbnVlVGFyZ2V0ID0gZXhpdENvbnRpbnVlVGFyZ2V0KCk7CiAgICBKdW1wVGFyZ2V0IGJyZWFrVGFyZ2V0ID0gZXhpdEJyZWFrVGFyZ2V0KCk7CiAgICBpZiAoY29udGludWVUYXJnZXQuaGFzVXNlcnMpIHsKICAgICAgYm9keSA9IGZvcmVzdC5jcmVhdGVMYWJlbGVkU3RhdGVtZW50KGJvZHkpOwogICAgICBjb250aW51ZVRhcmdldC5yZXNvbHZlQ29udGludWVzKGZvcmVzdCwgYm9keSk7CiAgICB9CiAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlID0gYnVpbGRGb3JJblZhcmlhYmxlKGx2YWx1ZSk7CiAgICBFeHByZXNzaW9uIHByb2JsZW0gPSBjaGVja0ZvckluVmFyaWFibGUobHZhbHVlLCB2YXJpYWJsZSwgZm9yVG9rZW4pOwogICAgU3RhdGVtZW50IHByb2xvZ3VlID0gYnVpbGRGb3JJbkJvZHkobHZhbHVlLCB2YXJpYWJsZSwgZm9yVG9rZW4sIGluS2V5d29yZCk7CiAgICBpZiAocHJvbG9ndWUgIT0gbnVsbCkgewogICAgICBpZiAocHJvbG9ndWUgaXMgQmxvY2spIHsKICAgICAgICBpZiAoYm9keSBpcyBCbG9jaykgewogICAgICAgICAgZm9yIChTdGF0ZW1lbnQgc3RhdGVtZW50IGluIGJvZHkuc3RhdGVtZW50cykgewogICAgICAgICAgICBwcm9sb2d1ZS5hZGRTdGF0ZW1lbnQoc3RhdGVtZW50KTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgcHJvbG9ndWUuYWRkU3RhdGVtZW50KGJvZHkpOwogICAgICAgIH0KICAgICAgICBib2R5ID0gcHJvbG9ndWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYm9keSA9IGNvbWJpbmVTdGF0ZW1lbnRzKHByb2xvZ3VlLCBib2R5KTsKICAgICAgfQogICAgfQogICAgU3RhdGVtZW50IHJlc3VsdCA9IG5ldyBGb3JJblN0YXRlbWVudCh2YXJpYWJsZSwgZXhwcmVzc2lvbiwgYm9keSwKICAgICAgICBpc0FzeW5jOiBhd2FpdFRva2VuICE9IG51bGwpCiAgICAgIC4uZmlsZU9mZnNldCA9IGF3YWl0VG9rZW4/LmNoYXJPZmZzZXQgPz8gZm9yVG9rZW4uY2hhck9mZnNldAogICAgICAuLmJvZHlPZmZzZXQgPSBib2R5LmZpbGVPZmZzZXQ7IC8vIFRPRE8oYWhlKTogSXNuJ3QgdGhpcyByZWR1bmRhbnQ/CiAgICBpZiAoYnJlYWtUYXJnZXQuaGFzVXNlcnMpIHsKICAgICAgcmVzdWx0ID0gZm9yZXN0LmNyZWF0ZUxhYmVsZWRTdGF0ZW1lbnQocmVzdWx0KTsKICAgICAgYnJlYWtUYXJnZXQucmVzb2x2ZUJyZWFrcyhmb3Jlc3QsIHJlc3VsdCk7CiAgICB9CiAgICBpZiAocHJvYmxlbSAhPSBudWxsKSB7CiAgICAgIHJlc3VsdCA9IGNvbWJpbmVTdGF0ZW1lbnRzKAogICAgICAgICAgZm9yZXN0LmNyZWF0ZUV4cHJlc3Npb25TdGF0ZW1lbnQocHJvYmxlbSwgbnVsbCksIHJlc3VsdCk7CiAgICB9CiAgICBleGl0TG9vcE9yU3dpdGNoKHJlc3VsdCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUxhYmVsKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJMYWJlbCIpOwogICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gcG9wKCk7CiAgICBwdXNoKG5ldyBMYWJlbChpZGVudGlmaWVyLm5hbWUsIGlkZW50aWZpZXIuY2hhck9mZnNldCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkxhYmVsZWRTdGF0ZW1lbnQoVG9rZW4gdG9rZW4sIGludCBsYWJlbENvdW50KSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkxhYmVsZWRTdGF0ZW1lbnQiKTsKICAgIExpc3Q8TGFiZWw+IGxhYmVscyA9CiAgICAgICAgY29uc3QgRml4ZWROdWxsYWJsZUxpc3Q8TGFiZWw+KCkucG9wKHN0YWNrLCBsYWJlbENvdW50KTsKICAgIGVudGVyTG9jYWxTY29wZShudWxsLCBzY29wZS5jcmVhdGVOZXN0ZWRMYWJlbFNjb3BlKCkpOwogICAgTGFiZWxUYXJnZXQgdGFyZ2V0ID0KICAgICAgICBuZXcgTGFiZWxUYXJnZXQobWVtYmVyLCBmdW5jdGlvbk5lc3RpbmdMZXZlbCwgdG9rZW4uY2hhck9mZnNldCk7CiAgICBpZiAobGFiZWxzICE9IG51bGwpIHsKICAgICAgZm9yIChMYWJlbCBsYWJlbCBpbiBsYWJlbHMpIHsKICAgICAgICBzY29wZS5kZWNsYXJlTGFiZWwobGFiZWwubmFtZSwgdGFyZ2V0KTsKICAgICAgfQogICAgfQogICAgcHVzaCh0YXJnZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRMYWJlbGVkU3RhdGVtZW50KGludCBsYWJlbENvdW50KSB7CiAgICBkZWJ1Z0V2ZW50KCJMYWJlbGVkU3RhdGVtZW50Iik7CiAgICBTdGF0ZW1lbnQgc3RhdGVtZW50ID0gcG9wKCk7CiAgICBMYWJlbFRhcmdldCB0YXJnZXQgPSBwb3AoKTsKICAgIGV4aXRMb2NhbFNjb3BlKCk7CiAgICBpZiAodGFyZ2V0LmJyZWFrVGFyZ2V0Lmhhc1VzZXJzIHx8IHRhcmdldC5jb250aW51ZVRhcmdldC5oYXNVc2VycykgewogICAgICBpZiAoZm9yZXN0LmlzVmFyaWFibGVzRGVjbGFyYXRpb24oc3RhdGVtZW50KSkgewogICAgICAgIGludGVybmFsUHJvYmxlbSgKICAgICAgICAgICAgZmFzdGEubWVzc2FnZUludGVybmFsUHJvYmxlbUxhYmVsVXNhZ2VJblZhcmlhYmxlc0RlY2xhcmF0aW9uLAogICAgICAgICAgICBzdGF0ZW1lbnQuZmlsZU9mZnNldCwKICAgICAgICAgICAgdXJpKTsKICAgICAgfQogICAgICBpZiAoc3RhdGVtZW50IGlzISBMYWJlbGVkU3RhdGVtZW50KSB7CiAgICAgICAgc3RhdGVtZW50ID0gZm9yZXN0LmNyZWF0ZUxhYmVsZWRTdGF0ZW1lbnQoc3RhdGVtZW50KTsKICAgICAgfQogICAgICB0YXJnZXQuYnJlYWtUYXJnZXQucmVzb2x2ZUJyZWFrcyhmb3Jlc3QsIHN0YXRlbWVudCk7CiAgICAgIHRhcmdldC5jb250aW51ZVRhcmdldC5yZXNvbHZlQ29udGludWVzKGZvcmVzdCwgc3RhdGVtZW50KTsKICAgIH0KICAgIHB1c2goc3RhdGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kUmV0aHJvd1N0YXRlbWVudChUb2tlbiByZXRocm93VG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJSZXRocm93U3RhdGVtZW50Iik7CiAgICBpZiAoaW5DYXRjaEJsb2NrKSB7CiAgICAgIHB1c2goZm9yZXN0LmNyZWF0ZVJldGhyb3dTdGF0ZW1lbnQocmV0aHJvd1Rva2VuLCBlbmRUb2tlbikpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChuZXcgRXhwcmVzc2lvblN0YXRlbWVudEp1ZGdtZW50KGJ1aWxkUHJvYmxlbSgKICAgICAgICAgIGZhc3RhLm1lc3NhZ2VSZXRocm93Tm90Q2F0Y2gsCiAgICAgICAgICBvZmZzZXRGb3JUb2tlbihyZXRocm93VG9rZW4pLAogICAgICAgICAgbGVuZ3RoRm9yVG9rZW4ocmV0aHJvd1Rva2VuKSkpCiAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4ocmV0aHJvd1Rva2VuKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUZpbmFsbHlCbG9jayhUb2tlbiBmaW5hbGx5S2V5d29yZCkgewogICAgZGVidWdFdmVudCgiRmluYWxseUJsb2NrIik7CiAgICAvLyBEbyBub3RoaW5nLCBoYW5kbGVkIGJ5IFtlbmRUcnlTdGF0ZW1lbnRdLgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRXaGlsZVN0YXRlbWVudChUb2tlbiB3aGlsZUtleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJXaGlsZVN0YXRlbWVudCIpOwogICAgU3RhdGVtZW50IGJvZHkgPSBwb3BTdGF0ZW1lbnQoKTsKICAgIEV4cHJlc3Npb24gY29uZGl0aW9uID0gcG9wRm9yVmFsdWUoKTsKICAgIEp1bXBUYXJnZXQgY29udGludWVUYXJnZXQgPSBleGl0Q29udGludWVUYXJnZXQoKTsKICAgIEp1bXBUYXJnZXQgYnJlYWtUYXJnZXQgPSBleGl0QnJlYWtUYXJnZXQoKTsKICAgIGlmIChjb250aW51ZVRhcmdldC5oYXNVc2VycykgewogICAgICBib2R5ID0gZm9yZXN0LmNyZWF0ZUxhYmVsZWRTdGF0ZW1lbnQoYm9keSk7CiAgICAgIGNvbnRpbnVlVGFyZ2V0LnJlc29sdmVDb250aW51ZXMoZm9yZXN0LCBib2R5KTsKICAgIH0KICAgIFN0YXRlbWVudCByZXN1bHQgPQogICAgICAgIGZvcmVzdC5jcmVhdGVXaGlsZVN0YXRlbWVudCh3aGlsZUtleXdvcmQsIGNvbmRpdGlvbiwgYm9keSk7CiAgICBpZiAoYnJlYWtUYXJnZXQuaGFzVXNlcnMpIHsKICAgICAgcmVzdWx0ID0gZm9yZXN0LmNyZWF0ZUxhYmVsZWRTdGF0ZW1lbnQocmVzdWx0KTsKICAgICAgYnJlYWtUYXJnZXQucmVzb2x2ZUJyZWFrcyhmb3Jlc3QsIHJlc3VsdCk7CiAgICB9CiAgICBleGl0TG9vcE9yU3dpdGNoKHJlc3VsdCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUVtcHR5U3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJFbXB0eVN0YXRlbWVudCIpOwogICAgcHVzaChmb3Jlc3QuY3JlYXRlRW1wdHlTdGF0ZW1lbnQodG9rZW4pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Bc3NlcnQoVG9rZW4gYXNzZXJ0S2V5d29yZCwgQXNzZXJ0IGtpbmQpIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luQXNzZXJ0Iik7CiAgICAvLyBJZiBpbiBhbiBhc3NlcnQgaW5pdGlhbGl6ZXIsIG1ha2Ugc3VyZSBbaW5Jbml0aWFsaXplcl0gaXMgZmFsc2Ugc28gd2UKICAgIC8vIHVzZSB0aGUgZm9ybWFsIHBhcmFtZXRlciBzY29wZS4gSWYgdGhpcyBpcyBhbnkgb3RoZXIga2luZCBvZiBhc3NlcnQsCiAgICAvLyBpbkluaXRpYWxpemVyIHNob3VsZCBiZSBmYWxzZSBhbnl3YXkuCiAgICBpbkluaXRpYWxpemVyID0gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEFzc2VydChUb2tlbiBhc3NlcnRLZXl3b3JkLCBBc3NlcnQga2luZCwgVG9rZW4gbGVmdFBhcmVudGhlc2lzLAogICAgICBUb2tlbiBjb21tYVRva2VuLCBUb2tlbiBzZW1pY29sb25Ub2tlbikgewogICAgZGVidWdFdmVudCgiQXNzZXJ0Iik7CiAgICBFeHByZXNzaW9uIG1lc3NhZ2UgPSBwb3BGb3JWYWx1ZUlmTm90TnVsbChjb21tYVRva2VuKTsKICAgIEV4cHJlc3Npb24gY29uZGl0aW9uID0gcG9wRm9yVmFsdWUoKTsKCiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBBc3NlcnQuU3RhdGVtZW50OgogICAgICAgIHB1c2goZm9yZXN0LmNyZWF0ZUFzc2VydFN0YXRlbWVudChhc3NlcnRLZXl3b3JkLCBsZWZ0UGFyZW50aGVzaXMsCiAgICAgICAgICAgIGNvbmRpdGlvbiwgY29tbWFUb2tlbiwgbWVzc2FnZSwgc2VtaWNvbG9uVG9rZW4pKTsKICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgQXNzZXJ0LkV4cHJlc3Npb246CiAgICAgICAgLy8gVGhlIHBhcnNlciBoYXMgYWxyZWFkeSByZXBvcnRlZCBhbiBlcnJvciBpbmRpY2F0aW5nIHRoYXQgYXNzZXJ0CiAgICAgICAgLy8gY2Fubm90IGJlIHVzZWQgaW4gYW4gZXhwcmVzc2lvbi4KICAgICAgICBwdXNoKGJ1aWxkUHJvYmxlbShmYXN0YS5tZXNzYWdlQXNzZXJ0QXNFeHByZXNzaW9uLCBhc3NlcnRLZXl3b3JkLm9mZnNldCwKICAgICAgICAgICAgYXNzZXJ0S2V5d29yZC5sZW5ndGgpKTsKICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgQXNzZXJ0LkluaXRpYWxpemVyOgogICAgICAgIHB1c2goZm9yZXN0LmNyZWF0ZUFzc2VydEluaXRpYWxpemVyKAogICAgICAgICAgICBhc3NlcnRLZXl3b3JkLCBsZWZ0UGFyZW50aGVzaXMsIGNvbmRpdGlvbiwgY29tbWFUb2tlbiwgbWVzc2FnZSkpOwogICAgICAgIGJyZWFrOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRZaWVsZFN0YXRlbWVudChUb2tlbiB5aWVsZFRva2VuLCBUb2tlbiBzdGFyVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJZaWVsZFN0YXRlbWVudCIpOwogICAgcHVzaChmb3Jlc3QuY3JlYXRlWWllbGRTdGF0ZW1lbnQoCiAgICAgICAgeWllbGRUb2tlbiwgc3RhclRva2VuLCBwb3BGb3JWYWx1ZSgpLCBlbmRUb2tlbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblN3aXRjaEJsb2NrKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpblN3aXRjaEJsb2NrIik7CiAgICBlbnRlckxvY2FsU2NvcGUoInN3aXRjaCBibG9jayIpOwogICAgZW50ZXJTd2l0Y2hTY29wZSgpOwogICAgZW50ZXJCcmVha1RhcmdldCh0b2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Td2l0Y2hDYXNlKGludCBsYWJlbENvdW50LCBpbnQgZXhwcmVzc2lvbkNvdW50LCBUb2tlbiBmaXJzdFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpblN3aXRjaENhc2UiKTsKICAgIGludCBjb3VudCA9IGxhYmVsQ291bnQgKyBleHByZXNzaW9uQ291bnQ7CiAgICBMaXN0PE9iamVjdD4gbGFiZWxzQW5kRXhwcmVzc2lvbnMgPQogICAgICAgIGNvbnN0IEZpeGVkTnVsbGFibGVMaXN0PE9iamVjdD4oKS5wb3Aoc3RhY2ssIGNvdW50KTsKICAgIExpc3Q8TGFiZWw+IGxhYmVscyA9IGxhYmVsQ291bnQgPT0gMCA/IG51bGwgOiBuZXcgTGlzdDxMYWJlbD4obGFiZWxDb3VudCk7CiAgICBMaXN0PEV4cHJlc3Npb24+IGV4cHJlc3Npb25zID0KICAgICAgICBuZXcgTGlzdDxFeHByZXNzaW9uPi5maWxsZWQoZXhwcmVzc2lvbkNvdW50LCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBpbnQgbGFiZWxJbmRleCA9IDA7CiAgICBpbnQgZXhwcmVzc2lvbkluZGV4ID0gMDsKICAgIGlmIChsYWJlbHNBbmRFeHByZXNzaW9ucyAhPSBudWxsKSB7CiAgICAgIGZvciAoT2JqZWN0IGxhYmVsT3JFeHByZXNzaW9uIGluIGxhYmVsc0FuZEV4cHJlc3Npb25zKSB7CiAgICAgICAgaWYgKGxhYmVsT3JFeHByZXNzaW9uIGlzIExhYmVsKSB7CiAgICAgICAgICBsYWJlbHNbbGFiZWxJbmRleCsrXSA9IGxhYmVsT3JFeHByZXNzaW9uOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBleHByZXNzaW9uc1tleHByZXNzaW9uSW5kZXgrK10gPSBsYWJlbE9yRXhwcmVzc2lvbjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzc2VydChzY29wZSA9PSBzd2l0Y2hTY29wZSk7CiAgICBpZiAobGFiZWxzICE9IG51bGwpIHsKICAgICAgZm9yIChMYWJlbCBsYWJlbCBpbiBsYWJlbHMpIHsKICAgICAgICBTdHJpbmcgbGFiZWxOYW1lID0gbGFiZWwubmFtZTsKICAgICAgICBpZiAoc2NvcGUuaGFzTG9jYWxMYWJlbChsYWJlbE5hbWUpKSB7CiAgICAgICAgICAvLyBUT0RPKGFoZSk6IFNob3VsZCB2YWxpZGF0ZSB0aGlzIGlzIGEgZ290byB0YXJnZXQuCiAgICAgICAgICBpZiAoIXNjb3BlLmNsYWltTGFiZWwobGFiZWxOYW1lKSkgewogICAgICAgICAgICBhZGRQcm9ibGVtKAogICAgICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVEdXBsaWNhdGVMYWJlbEluU3dpdGNoU3RhdGVtZW50CiAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMobGFiZWxOYW1lKSwKICAgICAgICAgICAgICAgIGxhYmVsLmNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICBsYWJlbE5hbWUubGVuZ3RoKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgc2NvcGUuZGVjbGFyZUxhYmVsKAogICAgICAgICAgICAgIGxhYmVsTmFtZSwgY3JlYXRlR290b1RhcmdldChmaXJzdFRva2VuLmNoYXJPZmZzZXQpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHB1c2goZXhwcmVzc2lvbnMpOwogICAgcHVzaChsYWJlbHMgPz8gTnVsbFZhbHVlLkxhYmVscyk7CiAgICBlbnRlckxvY2FsU2NvcGUoInN3aXRjaCBjYXNlIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFN3aXRjaENhc2UoCiAgICAgIGludCBsYWJlbENvdW50LAogICAgICBpbnQgZXhwcmVzc2lvbkNvdW50LAogICAgICBUb2tlbiBkZWZhdWx0S2V5d29yZCwKICAgICAgVG9rZW4gY29sb25BZnRlckRlZmF1bHQsCiAgICAgIGludCBzdGF0ZW1lbnRDb3VudCwKICAgICAgVG9rZW4gZmlyc3RUb2tlbiwKICAgICAgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlN3aXRjaENhc2UiKTsKICAgIC8vIFdlIGFsd2F5cyBjcmVhdGUgYSBibG9jayBoZXJlIHNvIHRoYXQgd2UgbGF0ZXIga25vdyB0aGF0IHRoZXJlJ3MgYWx3YXlzCiAgICAvLyBvbmUgc3ludGhldGljIGJsb2NrIHdoZW4gd2UgZmluaXNoIGNvbXBpbGluZyB0aGUgc3dpdGNoIHN0YXRlbWVudCBhbmQKICAgIC8vIGNoZWNrIHRoaXMgc3dpdGNoIGNhc2UgdG8gc2VlIGlmIGl0IGZhbGxzIHRocm91Z2ggdG8gdGhlIG5leHQgY2FzZS4KICAgIFN0YXRlbWVudCBibG9jayA9IHBvcEJsb2NrKHN0YXRlbWVudENvdW50LCBmaXJzdFRva2VuLCBudWxsKTsKICAgIGV4aXRMb2NhbFNjb3BlKCk7CiAgICBMaXN0PExhYmVsPiBsYWJlbHMgPSBwb3AoKTsKICAgIExpc3Q8RXhwcmVzc2lvbj4gZXhwcmVzc2lvbnMgPSBwb3AoKTsKICAgIExpc3Q8aW50PiBleHByZXNzaW9uT2Zmc2V0cyA9IDxpbnQ+W107CiAgICBmb3IgKEV4cHJlc3Npb24gZXhwcmVzc2lvbiBpbiBleHByZXNzaW9ucykgewogICAgICBleHByZXNzaW9uT2Zmc2V0cy5hZGQoZm9yZXN0LnJlYWRPZmZzZXQoZXhwcmVzc2lvbikpOwogICAgfQogICAgcHVzaChuZXcgU3dpdGNoQ2FzZUp1ZGdtZW50KGV4cHJlc3Npb25zLCBleHByZXNzaW9uT2Zmc2V0cywgYmxvY2ssCiAgICAgICAgaXNEZWZhdWx0OiBkZWZhdWx0S2V5d29yZCAhPSBudWxsKQogICAgICAuLmZpbGVPZmZzZXQgPSBmaXJzdFRva2VuLmNoYXJPZmZzZXQpOwogICAgcHVzaChsYWJlbHMgPz8gTnVsbFZhbHVlLkxhYmVscyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFN3aXRjaFN0YXRlbWVudChUb2tlbiBzd2l0Y2hLZXl3b3JkLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiU3dpdGNoU3RhdGVtZW50Iik7CgogICAgTGlzdDxTd2l0Y2hDYXNlPiBjYXNlcyA9IHBvcCgpOwogICAgSnVtcFRhcmdldCB0YXJnZXQgPSBleGl0QnJlYWtUYXJnZXQoKTsKICAgIGV4aXRTd2l0Y2hTY29wZSgpOwogICAgZXhpdExvY2FsU2NvcGUoKTsKICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBvcEZvclZhbHVlKCk7CiAgICBTdGF0ZW1lbnQgcmVzdWx0ID0gbmV3IFN3aXRjaFN0YXRlbWVudEp1ZGdtZW50KGV4cHJlc3Npb24sIGNhc2VzKQogICAgICAuLmZpbGVPZmZzZXQgPSBzd2l0Y2hLZXl3b3JkLmNoYXJPZmZzZXQ7CiAgICBpZiAodGFyZ2V0Lmhhc1VzZXJzKSB7CiAgICAgIHJlc3VsdCA9IGZvcmVzdC5jcmVhdGVMYWJlbGVkU3RhdGVtZW50KHJlc3VsdCk7CiAgICAgIHRhcmdldC5yZXNvbHZlQnJlYWtzKGZvcmVzdCwgcmVzdWx0KTsKICAgIH0KICAgIGV4aXRMb29wT3JTd2l0Y2gocmVzdWx0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kU3dpdGNoQmxvY2soaW50IGNhc2VDb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlN3aXRjaEJsb2NrIik7CiAgICBMaXN0PFN3aXRjaENhc2U+IGNhc2VzID0KICAgICAgICBuZXcgTGlzdDxTd2l0Y2hDYXNlPi5maWxsZWQoY2FzZUNvdW50LCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gY2FzZUNvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgTGlzdDxMYWJlbD4gbGFiZWxzID0gcG9wKCk7CiAgICAgIFN3aXRjaENhc2UgY3VycmVudCA9IGNhc2VzW2ldID0gcG9wKCk7CiAgICAgIGlmIChsYWJlbHMgIT0gbnVsbCkgewogICAgICAgIGZvciAoTGFiZWwgbGFiZWwgaW4gbGFiZWxzKSB7CiAgICAgICAgICBKdW1wVGFyZ2V0IHRhcmdldCA9IHN3aXRjaFNjb3BlLmxvb2t1cExhYmVsKGxhYmVsLm5hbWUpOwogICAgICAgICAgaWYgKHRhcmdldCAhPSBudWxsKSB7CiAgICAgICAgICAgIHRhcmdldC5yZXNvbHZlR290b3MoZm9yZXN0LCBjdXJyZW50KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2FzZUNvdW50IC0gMTsgaSsrKSB7CiAgICAgIFN3aXRjaENhc2UgY3VycmVudCA9IGNhc2VzW2ldOwogICAgICBCbG9jayBibG9jayA9IGN1cnJlbnQuYm9keTsKICAgICAgLy8gW2Jsb2NrXSBpcyBhIHN5bnRoZXRpYyBibG9jayB0aGF0IGlzIGFkZGVkIHRvIGhhbmRsZSB2YXJpYWJsZQogICAgICAvLyBkZWNsYXJhdGlvbnMgaW4gdGhlIHN3aXRjaCBjYXNlLgogICAgICBUcmVlTm9kZSBsYXN0Tm9kZSA9CiAgICAgICAgICBibG9jay5zdGF0ZW1lbnRzLmlzRW1wdHkgPyBudWxsIDogYmxvY2suc3RhdGVtZW50cy5sYXN0OwogICAgICBpZiAoZm9yZXN0LmlzQmxvY2sobGFzdE5vZGUpKSB7CiAgICAgICAgLy8gVGhpcyBpcyBhIG5vbi1zeW50aGV0aWMgYmxvY2suCiAgICAgICAgQmxvY2sgYmxvY2sgPSBsYXN0Tm9kZTsKICAgICAgICBsYXN0Tm9kZSA9IGJsb2NrLnN0YXRlbWVudHMuaXNFbXB0eSA/IG51bGwgOiBibG9jay5zdGF0ZW1lbnRzLmxhc3Q7CiAgICAgIH0KICAgICAgaWYgKGxhc3ROb2RlIGlzIEV4cHJlc3Npb25TdGF0ZW1lbnQpIHsKICAgICAgICBFeHByZXNzaW9uU3RhdGVtZW50IHN0YXRlbWVudCA9IGxhc3ROb2RlOwogICAgICAgIGxhc3ROb2RlID0gc3RhdGVtZW50LmV4cHJlc3Npb247CiAgICAgIH0KICAgICAgaWYgKGxhc3ROb2RlIGlzISBCcmVha1N0YXRlbWVudCAmJgogICAgICAgICAgbGFzdE5vZGUgaXMhIENvbnRpbnVlU3dpdGNoU3RhdGVtZW50ICYmCiAgICAgICAgICBsYXN0Tm9kZSBpcyEgUmV0aHJvdyAmJgogICAgICAgICAgbGFzdE5vZGUgaXMhIFJldHVyblN0YXRlbWVudCAmJgogICAgICAgICAgIWZvcmVzdC5pc1Rocm93KGxhc3ROb2RlKSkgewogICAgICAgIGJsb2NrLmFkZFN0YXRlbWVudCgKICAgICAgICAgICAgbmV3IEV4cHJlc3Npb25TdGF0ZW1lbnQoYnVpbGRGYWxsVGhyb3VnaEVycm9yKGN1cnJlbnQuZmlsZU9mZnNldCkpKTsKICAgICAgfQogICAgfQoKICAgIHB1c2goY2FzZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVDYXNlTWF0Y2goVG9rZW4gY2FzZUtleXdvcmQsIFRva2VuIGNvbG9uKSB7CiAgICBkZWJ1Z0V2ZW50KCJDYXNlTWF0Y2giKTsKICAgIC8vIERvIG5vdGhpbmcuIEhhbmRsZWQgYnkgW2hhbmRsZVN3aXRjaENhc2VdLgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVCcmVha1N0YXRlbWVudCgKICAgICAgYm9vbCBoYXNUYXJnZXQsIFRva2VuIGJyZWFrS2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkJyZWFrU3RhdGVtZW50Iik7CiAgICBKdW1wVGFyZ2V0IHRhcmdldCA9IGJyZWFrVGFyZ2V0OwogICAgSWRlbnRpZmllciBpZGVudGlmaWVyOwogICAgU3RyaW5nIG5hbWU7CiAgICBpZiAoaGFzVGFyZ2V0KSB7CiAgICAgIGlkZW50aWZpZXIgPSBwb3AoKTsKICAgICAgbmFtZSA9IGlkZW50aWZpZXIubmFtZTsKICAgICAgdGFyZ2V0ID0gc2NvcGUubG9va3VwTGFiZWwobmFtZSk7CiAgICB9CiAgICBpZiAodGFyZ2V0ID09IG51bGwgJiYgbmFtZSA9PSBudWxsKSB7CiAgICAgIHB1c2gocHJvYmxlbUluTG9vcE9yU3dpdGNoID0gYnVpbGRQcm9ibGVtU3RhdGVtZW50KAogICAgICAgICAgZmFzdGEubWVzc2FnZUJyZWFrT3V0c2lkZU9mTG9vcCwgYnJlYWtLZXl3b3JkLmNoYXJPZmZzZXQpKTsKICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09IG51bGwgfHwKICAgICAgICB0YXJnZXQgaXMhIEp1bXBUYXJnZXQgfHwKICAgICAgICAhdGFyZ2V0LmlzQnJlYWtUYXJnZXQpIHsKICAgICAgVG9rZW4gbGFiZWxUb2tlbiA9IGJyZWFrS2V5d29yZC5uZXh0OwogICAgICBwdXNoKHByb2JsZW1Jbkxvb3BPclN3aXRjaCA9IGJ1aWxkUHJvYmxlbVN0YXRlbWVudCgKICAgICAgICAgIGZhc3RhLnRlbXBsYXRlSW52YWxpZEJyZWFrVGFyZ2V0LndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICBsYWJlbFRva2VuLmNoYXJPZmZzZXQsCiAgICAgICAgICBsZW5ndGg6IGxhYmVsVG9rZW4ubGVuZ3RoKSk7CiAgICB9IGVsc2UgaWYgKHRhcmdldC5mdW5jdGlvbk5lc3RpbmdMZXZlbCAhPSBmdW5jdGlvbk5lc3RpbmdMZXZlbCkgewogICAgICBwdXNoKGJ1aWxkUHJvYmxlbVRhcmdldE91dHNpZGVMb2NhbEZ1bmN0aW9uKG5hbWUsIGJyZWFrS2V5d29yZCkpOwogICAgfSBlbHNlIHsKICAgICAgU3RhdGVtZW50IHN0YXRlbWVudCA9CiAgICAgICAgICBmb3Jlc3QuY3JlYXRlQnJlYWtTdGF0ZW1lbnQoYnJlYWtLZXl3b3JkLCBpZGVudGlmaWVyLCBlbmRUb2tlbik7CiAgICAgIHRhcmdldC5hZGRCcmVhayhzdGF0ZW1lbnQpOwogICAgICBwdXNoKHN0YXRlbWVudCk7CiAgICB9CiAgfQoKICBTdGF0ZW1lbnQgYnVpbGRQcm9ibGVtVGFyZ2V0T3V0c2lkZUxvY2FsRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFRva2VuIGtleXdvcmQpIHsKICAgIFN0YXRlbWVudCBwcm9ibGVtOwogICAgYm9vbCBpc0JyZWFrID0gb3B0aW9uYWwoImJyZWFrIiwga2V5d29yZCk7CiAgICBpZiAobmFtZSAhPSBudWxsKSB7CiAgICAgIFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nKT4gdGVtcGxhdGUgPSBpc0JyZWFrCiAgICAgICAgICA/IGZhc3RhLnRlbXBsYXRlQnJlYWtUYXJnZXRPdXRzaWRlRnVuY3Rpb24KICAgICAgICAgIDogZmFzdGEudGVtcGxhdGVDb250aW51ZVRhcmdldE91dHNpZGVGdW5jdGlvbjsKICAgICAgcHJvYmxlbSA9IGJ1aWxkUHJvYmxlbVN0YXRlbWVudCgKICAgICAgICAgIHRlbXBsYXRlLndpdGhBcmd1bWVudHMobmFtZSksIG9mZnNldEZvclRva2VuKGtleXdvcmQpLAogICAgICAgICAgbGVuZ3RoOiBsZW5ndGhPZlNwYW4oa2V5d29yZCwga2V5d29yZC5uZXh0KSk7CiAgICB9IGVsc2UgewogICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBpc0JyZWFrCiAgICAgICAgICA/IGZhc3RhLm1lc3NhZ2VBbm9ueW1vdXNCcmVha1RhcmdldE91dHNpZGVGdW5jdGlvbgogICAgICAgICAgOiBmYXN0YS5tZXNzYWdlQW5vbnltb3VzQ29udGludWVUYXJnZXRPdXRzaWRlRnVuY3Rpb247CiAgICAgIHByb2JsZW0gPSBidWlsZFByb2JsZW1TdGF0ZW1lbnQobWVzc2FnZSwgb2Zmc2V0Rm9yVG9rZW4oa2V5d29yZCksCiAgICAgICAgICBsZW5ndGg6IGxlbmd0aEZvclRva2VuKGtleXdvcmQpKTsKICAgIH0KICAgIHByb2JsZW1Jbkxvb3BPclN3aXRjaCA/Pz0gcHJvYmxlbTsKICAgIHJldHVybiBwcm9ibGVtOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVDb250aW51ZVN0YXRlbWVudCgKICAgICAgYm9vbCBoYXNUYXJnZXQsIFRva2VuIGNvbnRpbnVlS2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkNvbnRpbnVlU3RhdGVtZW50Iik7CiAgICBKdW1wVGFyZ2V0IHRhcmdldCA9IGNvbnRpbnVlVGFyZ2V0OwogICAgSWRlbnRpZmllciBpZGVudGlmaWVyOwogICAgU3RyaW5nIG5hbWU7CiAgICBpZiAoaGFzVGFyZ2V0KSB7CiAgICAgIGlkZW50aWZpZXIgPSBwb3AoKTsKICAgICAgbmFtZSA9IGlkZW50aWZpZXIubmFtZTsKICAgICAgQnVpbGRlciBuYW1lZFRhcmdldCA9IHNjb3BlLmxvb2t1cExhYmVsKGlkZW50aWZpZXIubmFtZSk7CiAgICAgIGlmIChuYW1lZFRhcmdldCAhPSBudWxsICYmIG5hbWVkVGFyZ2V0IGlzISBKdW1wVGFyZ2V0KSB7CiAgICAgICAgVG9rZW4gbGFiZWxUb2tlbiA9IGNvbnRpbnVlS2V5d29yZC5uZXh0OwogICAgICAgIHB1c2gocHJvYmxlbUluTG9vcE9yU3dpdGNoID0gYnVpbGRQcm9ibGVtU3RhdGVtZW50KAogICAgICAgICAgICBmYXN0YS5tZXNzYWdlQ29udGludWVMYWJlbE5vdFRhcmdldCwgbGFiZWxUb2tlbi5jaGFyT2Zmc2V0LAogICAgICAgICAgICBsZW5ndGg6IGxhYmVsVG9rZW4ubGVuZ3RoKSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRhcmdldCA9IG5hbWVkVGFyZ2V0OwogICAgICBpZiAodGFyZ2V0ID09IG51bGwpIHsKICAgICAgICBpZiAoc3dpdGNoU2NvcGUgPT0gbnVsbCkgewogICAgICAgICAgcHVzaChidWlsZFByb2JsZW1TdGF0ZW1lbnQoCiAgICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVMYWJlbE5vdEZvdW5kLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICAgICAgY29udGludWVLZXl3b3JkLm5leHQuY2hhck9mZnNldCkpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBzd2l0Y2hTY29wZS5mb3J3YXJkRGVjbGFyZUxhYmVsKAogICAgICAgICAgICBpZGVudGlmaWVyLm5hbWUsIHRhcmdldCA9IGNyZWF0ZUdvdG9UYXJnZXQoaWRlbnRpZmllci5jaGFyT2Zmc2V0KSk7CiAgICAgIH0KICAgICAgaWYgKHRhcmdldC5pc0dvdG9UYXJnZXQgJiYKICAgICAgICAgIHRhcmdldC5mdW5jdGlvbk5lc3RpbmdMZXZlbCA9PSBmdW5jdGlvbk5lc3RpbmdMZXZlbCkgewogICAgICAgIENvbnRpbnVlU3dpdGNoU3RhdGVtZW50IHN0YXRlbWVudCA9IG5ldyBDb250aW51ZVN3aXRjaEp1ZGdtZW50KG51bGwpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBjb250aW51ZUtleXdvcmQuY2hhck9mZnNldDsKICAgICAgICB0YXJnZXQuYWRkR290byhzdGF0ZW1lbnQpOwogICAgICAgIHB1c2goc3RhdGVtZW50KTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICAgIGlmICh0YXJnZXQgPT0gbnVsbCkgewogICAgICBwdXNoKHByb2JsZW1Jbkxvb3BPclN3aXRjaCA9IGJ1aWxkUHJvYmxlbVN0YXRlbWVudCgKICAgICAgICAgIGZhc3RhLm1lc3NhZ2VDb250aW51ZVdpdGhvdXRMYWJlbEluQ2FzZSwgY29udGludWVLZXl3b3JkLmNoYXJPZmZzZXQsCiAgICAgICAgICBsZW5ndGg6IGNvbnRpbnVlS2V5d29yZC5sZW5ndGgpKTsKICAgIH0gZWxzZSBpZiAoIXRhcmdldC5pc0NvbnRpbnVlVGFyZ2V0KSB7CiAgICAgIFRva2VuIGxhYmVsVG9rZW4gPSBjb250aW51ZUtleXdvcmQubmV4dDsKICAgICAgcHVzaChwcm9ibGVtSW5Mb29wT3JTd2l0Y2ggPSBidWlsZFByb2JsZW1TdGF0ZW1lbnQoCiAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUludmFsaWRDb250aW51ZVRhcmdldC53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgbGFiZWxUb2tlbi5jaGFyT2Zmc2V0LAogICAgICAgICAgbGVuZ3RoOiBsYWJlbFRva2VuLmxlbmd0aCkpOwogICAgfSBlbHNlIGlmICh0YXJnZXQuZnVuY3Rpb25OZXN0aW5nTGV2ZWwgIT0gZnVuY3Rpb25OZXN0aW5nTGV2ZWwpIHsKICAgICAgcHVzaChidWlsZFByb2JsZW1UYXJnZXRPdXRzaWRlTG9jYWxGdW5jdGlvbihuYW1lLCBjb250aW51ZUtleXdvcmQpKTsKICAgIH0gZWxzZSB7CiAgICAgIFN0YXRlbWVudCBzdGF0ZW1lbnQgPQogICAgICAgICAgZm9yZXN0LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGNvbnRpbnVlS2V5d29yZCwgaWRlbnRpZmllciwgZW5kVG9rZW4pOwogICAgICB0YXJnZXQuYWRkQ29udGludWUoc3RhdGVtZW50KTsKICAgICAgcHVzaChzdGF0ZW1lbnQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblR5cGVWYXJpYWJsZShUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5UeXBlVmFyaWFibGUiKTsKICAgIElkZW50aWZpZXIgbmFtZSA9IHBvcCgpOwogICAgTGlzdDxFeHByZXNzaW9uPiBhbm5vdGF0aW9ucyA9IHBvcCgpOwogICAgVHlwZVZhcmlhYmxlQnVpbGRlciB2YXJpYWJsZSA9CiAgICAgICAgbmV3IFR5cGVWYXJpYWJsZUJ1aWxkZXIobmFtZS5uYW1lLCBsaWJyYXJ5QnVpbGRlciwgbmFtZS5jaGFyT2Zmc2V0KTsKICAgIGlmIChhbm5vdGF0aW9ucyAhPSBudWxsKSB7CiAgICAgIGluZmVyQW5ub3RhdGlvbnMoYW5ub3RhdGlvbnMpOwogICAgICBmb3IgKEV4cHJlc3Npb24gYW5ub3RhdGlvbiBpbiBhbm5vdGF0aW9ucykgewogICAgICAgIHZhcmlhYmxlLnBhcmFtZXRlci5hZGRBbm5vdGF0aW9uKGFubm90YXRpb24pOwogICAgICB9CiAgICB9CiAgICBwdXNoKHZhcmlhYmxlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVHlwZVZhcmlhYmxlc0RlZmluZWQoVG9rZW4gdG9rZW4sIGludCBjb3VudCkgewogICAgZGVidWdFdmVudCgiaGFuZGxlVHlwZVZhcmlhYmxlc0RlZmluZWQiKTsKICAgIGFzc2VydChjb3VudCA+IDApOwogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzID0KICAgICAgICBjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPigpLnBvcChzdGFjaywgY291bnQpOwogICAgZW50ZXJGdW5jdGlvblR5cGVTY29wZSh0eXBlVmFyaWFibGVzKTsKICAgIHB1c2godHlwZVZhcmlhYmxlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFR5cGVWYXJpYWJsZShUb2tlbiB0b2tlbiwgaW50IGluZGV4LCBUb2tlbiBleHRlbmRzT3JTdXBlcikgewogICAgZGVidWdFdmVudCgiVHlwZVZhcmlhYmxlIik7CiAgICBVbnJlc29sdmVkVHlwZSBib3VuZCA9IHBvcCgpOwogICAgLy8gUGVlayB0byBsZWF2ZSB0eXBlIHBhcmFtZXRlcnMgb24gdG9wIG9mIHN0YWNrLgogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzID0gcGVlaygpOwoKICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXIgdmFyaWFibGUgPSB0eXBlVmFyaWFibGVzW2luZGV4XTsKICAgIHZhcmlhYmxlLmJvdW5kID0gYm91bmQ/LmJ1aWxkZXI7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFR5cGVWYXJpYWJsZXMoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlR5cGVWYXJpYWJsZXMiKTsKICAgIC8vIFBlZWsgdG8gbGVhdmUgdHlwZSBwYXJhbWV0ZXJzIG9uIHRvcCBvZiBzdGFjay4KICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcyA9IHBlZWsoKTsKCiAgICBpZiAoIWxlZ2FjeU1vZGUpIHsKICAgICAgTGlzdDxUeXBlQnVpbGRlcj4gY2FsY3VsYXRlZEJvdW5kcyA9IGNhbGN1bGF0ZUJvdW5kcygKICAgICAgICAgIHR5cGVWYXJpYWJsZXMsCiAgICAgICAgICBsaWJyYXJ5QnVpbGRlci5sb2FkZXIudGFyZ2V0LmR5bmFtaWNUeXBlLAogICAgICAgICAgbGlicmFyeUJ1aWxkZXIubG9hZGVyLnRhcmdldC5ib3R0b21UeXBlLAogICAgICAgICAgbGlicmFyeUJ1aWxkZXIubG9hZGVyLnRhcmdldC5vYmplY3RDbGFzc0J1aWxkZXIpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVWYXJpYWJsZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICB0eXBlVmFyaWFibGVzW2ldLmRlZmF1bHRUeXBlID0gY2FsY3VsYXRlZEJvdW5kc1tpXTsKICAgICAgICB0eXBlVmFyaWFibGVzW2ldLmRlZmF1bHRUeXBlLnJlc29sdmVJbigKICAgICAgICAgICAgc2NvcGUsCiAgICAgICAgICAgIHR5cGVWYXJpYWJsZXNbaV0uY2hhck9mZnNldCwKICAgICAgICAgICAgdHlwZVZhcmlhYmxlc1tpXS5maWxlVXJpLAogICAgICAgICAgICBsaWJyYXJ5QnVpbGRlcik7CiAgICAgICAgdHlwZVZhcmlhYmxlc1tpXS5maW5pc2goCiAgICAgICAgICAgIGxpYnJhcnlCdWlsZGVyLAogICAgICAgICAgICBsaWJyYXJ5QnVpbGRlci5sb2FkZXIudGFyZ2V0Lm9iamVjdENsYXNzQnVpbGRlciwKICAgICAgICAgICAgbGlicmFyeUJ1aWxkZXIubG9hZGVyLnRhcmdldC5keW5hbWljVHlwZSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVZhcmlhYmxlcy5sZW5ndGg7ICsraSkgewogICAgICAgIHR5cGVWYXJpYWJsZXNbaV0uZGVmYXVsdFR5cGUgPSBsaWJyYXJ5QnVpbGRlci5sb2FkZXIudGFyZ2V0LmR5bmFtaWNUeXBlOwogICAgICAgIHR5cGVWYXJpYWJsZXNbaV0uZmluaXNoKAogICAgICAgICAgICBsaWJyYXJ5QnVpbGRlciwKICAgICAgICAgICAgbGlicmFyeUJ1aWxkZXIubG9hZGVyLnRhcmdldC5vYmplY3RDbGFzc0J1aWxkZXIsCiAgICAgICAgICAgIGxpYnJhcnlCdWlsZGVyLmxvYWRlci50YXJnZXQuZHluYW1pY1R5cGUpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vVHlwZVZhcmlhYmxlcyhUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiTm9UeXBlVmFyaWFibGVzIik7CiAgICBlbnRlckZ1bmN0aW9uVHlwZVNjb3BlKG51bGwpOwogICAgcHVzaChOdWxsVmFsdWUuVHlwZVZhcmlhYmxlcyk7CiAgfQoKICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVWYXJpYWJsZUJ1aWxkZXJzVG9LZXJuZWwoCiAgICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlQnVpbGRlcnMpIHsKICAgIGlmICh0eXBlVmFyaWFibGVCdWlsZGVycyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMgPSBuZXcgTGlzdDxUeXBlUGFyYW1ldGVyPi5maWxsZWQoCiAgICAgICAgdHlwZVZhcmlhYmxlQnVpbGRlcnMubGVuZ3RoLCBudWxsLAogICAgICAgIGdyb3dhYmxlOiB0cnVlKTsKICAgIGludCBpID0gMDsKICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciBidWlsZGVyIGluIHR5cGVWYXJpYWJsZUJ1aWxkZXJzKSB7CiAgICAgIHR5cGVQYXJhbWV0ZXJzW2krK10gPSBidWlsZGVyLnBhcmFtZXRlcjsKICAgIH0KICAgIHJldHVybiB0eXBlUGFyYW1ldGVyczsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW52YWxpZFN0YXRlbWVudChUb2tlbiB0b2tlbiwgTWVzc2FnZSBtZXNzYWdlKSB7CiAgICBTdGF0ZW1lbnQgc3RhdGVtZW50ID0gcG9wKCk7CiAgICBwdXNoKG5ldyBFeHByZXNzaW9uU3RhdGVtZW50KGRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKAogICAgICAgIGJ1aWxkUHJvYmxlbShtZXNzYWdlLCBzdGF0ZW1lbnQuZmlsZU9mZnNldCwgbm9MZW5ndGgpKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZFByb2JsZW0oTWVzc2FnZSBtZXNzYWdlLCBpbnQgY2hhck9mZnNldCwgaW50IGxlbmd0aCwKICAgICAge0xpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQsIGJvb2wgc3VwcHJlc3NNZXNzYWdlOiBmYWxzZX0pIHsKICAgIGlmICghc3VwcHJlc3NNZXNzYWdlKSB7CiAgICAgIGFkZFByb2JsZW0obWVzc2FnZSwgY2hhck9mZnNldCwgbGVuZ3RoLAogICAgICAgICAgd2FzSGFuZGxlZDogdHJ1ZSwgY29udGV4dDogY29udGV4dCk7CiAgICB9CiAgICBTdHJpbmcgdGV4dCA9IGxpYnJhcnlCdWlsZGVyLmxvYWRlci50YXJnZXQuY29udGV4dAogICAgICAgIC5mb3JtYXQobWVzc2FnZS53aXRoTG9jYXRpb24odXJpLCBjaGFyT2Zmc2V0LCBsZW5ndGgpLCBTZXZlcml0eS5lcnJvcik7CiAgICByZXR1cm4gd3JhcFN5bnRoZXRpY0V4cHJlc3Npb24oCiAgICAgICAgbmV3IEludmFsaWRFeHByZXNzaW9uKHRleHQpLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldCwgY2hhck9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIHdyYXBJblByb2JsZW0oRXhwcmVzc2lvbiBleHByZXNzaW9uLCBNZXNzYWdlIG1lc3NhZ2UsIGludCBsZW5ndGgsCiAgICAgIHtMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0fSkgewogICAgaW50IGNoYXJPZmZzZXQgPSBmb3Jlc3QucmVhZE9mZnNldChleHByZXNzaW9uKTsKICAgIFNldmVyaXR5IHNldmVyaXR5ID0gbWVzc2FnZS5jb2RlLnNldmVyaXR5OwogICAgaWYgKHNldmVyaXR5ID09IFNldmVyaXR5LmVycm9yIHx8CiAgICAgICAgc2V2ZXJpdHkgPT0gU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nICYmICFsZWdhY3lNb2RlKSB7CiAgICAgIHJldHVybiB3cmFwSW5Mb2NhdGVkUHJvYmxlbSgKICAgICAgICAgIGV4cHJlc3Npb24sIG1lc3NhZ2Uud2l0aExvY2F0aW9uKHVyaSwgY2hhck9mZnNldCwgbGVuZ3RoKSwKICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQpOwogICAgfSBlbHNlIHsKICAgICAgYWRkUHJvYmxlbShtZXNzYWdlLCBjaGFyT2Zmc2V0LCBsZW5ndGgsIGNvbnRleHQ6IGNvbnRleHQpOwogICAgICByZXR1cm4gZXhwcmVzc2lvbjsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gd3JhcEluTG9jYXRlZFByb2JsZW0oRXhwcmVzc2lvbiBleHByZXNzaW9uLCBMb2NhdGVkTWVzc2FnZSBtZXNzYWdlLAogICAgICB7TGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dH0pIHsKICAgIC8vIFRPRE8oYXNrZXNjKTogUHJvZHVjZSBleHBsaWNpdCBlcnJvciBleHByZXNzaW9uIHdyYXBwaW5nIHRoZSBvcmlnaW5hbC4KICAgIC8vIFNlZSBbaXNzdWUgMjk3MTddKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvc2RrL2lzc3Vlcy8yOTcxNykKICAgIGludCBvZmZzZXQgPSBmb3Jlc3QucmVhZE9mZnNldChleHByZXNzaW9uKTsKICAgIGlmIChvZmZzZXQgPT0gLTEpIHsKICAgICAgb2Zmc2V0ID0gbWVzc2FnZS5jaGFyT2Zmc2V0OwogICAgfQogICAgcmV0dXJuIG5ldyBMZXQoCiAgICAgICAgbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUoCiAgICAgICAgICAgIGRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgICAgIG1lc3NhZ2UubWVzc2FnZU9iamVjdCwgbWVzc2FnZS5jaGFyT2Zmc2V0LCBtZXNzYWdlLmxlbmd0aCwKICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQpKSwKICAgICAgICAgICAgdHlwZTogY29uc3QgQm90dG9tVHlwZSgpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0LAogICAgICAgIGV4cHJlc3Npb24pOwogIH0KCiAgRXhwcmVzc2lvbiBidWlsZEZhbGxUaHJvdWdoRXJyb3IoaW50IGNoYXJPZmZzZXQpIHsKICAgIGFkZFByb2JsZW0oZmFzdGEubWVzc2FnZVN3aXRjaENhc2VGYWxsVGhyb3VnaCwgY2hhck9mZnNldCwgbm9MZW5ndGgpOwoKICAgIC8vIFRPRE8oYWhlKTogVGhlIGZvbGxvd2luZyBkb2Vzbid0IG1ha2Ugc2Vuc2UgZm9yIHRoZSBBbmFseXplci4gSXQgc2hvdWxkCiAgICAvLyBiZSBtb3ZlZCB0byBbRm9yZXN0XSBvciBjb25kaXRpb25hbCBvbiBgZm9yZXN0IGlzIEZhbmdvcm5gLgoKICAgIC8vIFRPRE8oYWhlKTogQ29tcHV0ZSBhIExvY2F0ZWRNZXNzYWdlIGFib3ZlIGluc3RlYWQ/CiAgICBMb2NhdGlvbiBsb2NhdGlvbiA9IG1lc3NhZ2VzLmdldExvY2F0aW9uRnJvbVVyaSh1cmksIGNoYXJPZmZzZXQpOwoKICAgIHJldHVybiBmb3Jlc3QuY3JlYXRlVGhyb3coCiAgICAgICAgbnVsbCwKICAgICAgICBidWlsZFN0YXRpY0ludm9jYXRpb24oCiAgICAgICAgICAgIGxpYnJhcnlCdWlsZGVyCiAgICAgICAgICAgICAgICAubG9hZGVyLmNvcmVUeXBlcy5mYWxsVGhyb3VnaEVycm9yVXJsQW5kTGluZUNvbnN0cnVjdG9yLAogICAgICAgICAgICBmb3Jlc3QuY3JlYXRlQXJndW1lbnRzKG5vTG9jYXRpb24sIDxFeHByZXNzaW9uPlsKICAgICAgICAgICAgICBmb3Jlc3QuY3JlYXRlU3RyaW5nTGl0ZXJhbCgiJHtsb2NhdGlvbj8uZmlsZSA/PyB1cml9IiwgbnVsbCkKICAgICAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgZm9yZXN0LmNyZWF0ZUludExpdGVyYWwobG9jYXRpb24/LmxpbmUgPz8gMCwgbnVsbCkKICAgICAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQsCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBjaGFyT2Zmc2V0OiBjaGFyT2Zmc2V0KSkKICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldDsKICB9CgogIEV4cHJlc3Npb24gYnVpbGRBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkVycm9yKAogICAgICBNZXNzYWdlIG1lc3NhZ2UsIFN0cmluZyBjbGFzc05hbWUsCiAgICAgIFtpbnQgY2hhck9mZnNldCA9IC0xXSkgewogICAgYWRkUHJvYmxlbUVycm9ySWZDb25zdChtZXNzYWdlLCBjaGFyT2Zmc2V0LCBjbGFzc05hbWUubGVuZ3RoKTsKICAgIC8vIFRPRE8oYWhlKTogVGhlIGZvbGxvd2luZyBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gQW5hbHl6ZXIgQVNULgogICAgQnVpbGRlciBjb25zdHJ1Y3RvciA9CiAgICAgICAgbGlicmFyeUJ1aWxkZXIubG9hZGVyLmdldEFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3IoKTsKICAgIEV4cHJlc3Npb24gaW52b2NhdGlvbiA9IGJ1aWxkU3RhdGljSW52b2NhdGlvbigKICAgICAgICBjb25zdHJ1Y3Rvci50YXJnZXQsCiAgICAgICAgZm9yZXN0LmNyZWF0ZUFyZ3VtZW50cyhjaGFyT2Zmc2V0LCA8RXhwcmVzc2lvbj5bCiAgICAgICAgICBmb3Jlc3QuY3JlYXRlU3RyaW5nTGl0ZXJhbChjbGFzc05hbWUsIG51bGwpLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldAogICAgICAgIF0pLAogICAgICAgIGNoYXJPZmZzZXQ6IGNoYXJPZmZzZXQpOwogICAgaWYgKGludm9jYXRpb24gaXMgc2hhZG93LlN5bnRoZXRpY0V4cHJlc3Npb25KdWRnbWVudCkgewogICAgICBpbnZvY2F0aW9uID0gZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oaW52b2NhdGlvbik7CiAgICB9CiAgICByZXR1cm4gZm9yZXN0LmNyZWF0ZVRocm93KG51bGwsIGludm9jYXRpb24pLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldDsKICB9CgogIFN0YXRlbWVudCBidWlsZFByb2JsZW1TdGF0ZW1lbnQoTWVzc2FnZSBtZXNzYWdlLCBpbnQgY2hhck9mZnNldCwKICAgICAge0xpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQsIGludCBsZW5ndGgsIGJvb2wgc3VwcHJlc3NNZXNzYWdlOiBmYWxzZX0pIHsKICAgIGxlbmd0aCA/Pz0gbm9MZW5ndGg7CiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25TdGF0ZW1lbnRKdWRnbWVudChidWlsZFByb2JsZW0oCiAgICAgICAgbWVzc2FnZSwgY2hhck9mZnNldCwgbGVuZ3RoLAogICAgICAgIGNvbnRleHQ6IGNvbnRleHQsIHN1cHByZXNzTWVzc2FnZTogc3VwcHJlc3NNZXNzYWdlKSk7CiAgfQoKICBTdGF0ZW1lbnQgd3JhcEluUHJvYmxlbVN0YXRlbWVudChTdGF0ZW1lbnQgc3RhdGVtZW50LCBNZXNzYWdlIG1lc3NhZ2UpIHsKICAgIC8vIFRPRE8oYXNrZXNjKTogUHJvZHVjZSBleHBsaWNpdCBlcnJvciBzdGF0ZW1lbnQgd3JhcHBpbmcgdGhlIG9yaWdpbmFsLgogICAgLy8gU2VlIFtpc3N1ZSAyOTcxN10oaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9zZGsvaXNzdWVzLzI5NzE3KQogICAgcmV0dXJuIGJ1aWxkUHJvYmxlbVN0YXRlbWVudChtZXNzYWdlLCBzdGF0ZW1lbnQuZmlsZU9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplciBidWlsZEludmFsaWRJbml0aWFsaXplcihFeHByZXNzaW9uIGV4cHJlc3Npb24sCiAgICAgIFtpbnQgY2hhck9mZnNldCA9IC0xXSkgewogICAgbmVlZHNJbXBsaWNpdFN1cGVySW5pdGlhbGl6ZXIgPSBmYWxzZTsKICAgIHJldHVybiBuZXcgU2hhZG93SW52YWxpZEluaXRpYWxpemVyKAogICAgICAgIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKGV4cHJlc3Npb24pKQogICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogIH0KCiAgSW5pdGlhbGl6ZXIgYnVpbGRJbnZhbGlkU3VwZXJJbml0aWFsaXplcigKICAgICAgQ29uc3RydWN0b3IgdGFyZ2V0LCBBcmd1bWVudHNKdWRnbWVudCBhcmd1bWVudHMsIEV4cHJlc3Npb24gZXhwcmVzc2lvbiwKICAgICAgW2ludCBjaGFyT2Zmc2V0ID0gLTFdKSB7CiAgICBuZWVkc0ltcGxpY2l0U3VwZXJJbml0aWFsaXplciA9IGZhbHNlOwogICAgcmV0dXJuIG5ldyBJbnZhbGlkU3VwZXJJbml0aWFsaXplckp1ZGdtZW50KAogICAgICAgIHRhcmdldCwgYXJndW1lbnRzLCBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZShleHByZXNzaW9uKSkKICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldDsKICB9CgogIEluaXRpYWxpemVyIGJ1aWxkRHVwbGljYXRlZEluaXRpYWxpemVyKEZpZWxkIGZpZWxkLCBFeHByZXNzaW9uIHZhbHVlLAogICAgICBTdHJpbmcgbmFtZSwgaW50IG9mZnNldCwgaW50IHByZXZpb3VzSW5pdGlhbGl6ZXJPZmZzZXQpIHsKICAgIHJldHVybiBuZXcgU2hhZG93SW52YWxpZEZpZWxkSW5pdGlhbGl6ZXIoCiAgICAgICAgZmllbGQsCiAgICAgICAgdmFsdWUsCiAgICAgICAgbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUoZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oCiAgICAgICAgICAgIGJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkCiAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICAgICAgICBvZmZzZXQsCiAgICAgICAgICAgICAgICBub0xlbmd0aCkpKSkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogIH0KCiAgLy8vIFBhcmFtZXRlciBbZm9ybWFsVHlwZV0gc2hvdWxkIG9ubHkgYmUgcGFzc2VkIGluIHRoZSBzcGVjaWFsIGNhc2Ugb2YKICAvLy8gYnVpbGRpbmcgYSBmaWVsZCBpbml0aWFsaXplciBhcyBhIGRlc3VnYXJpbmcgb2YgYW4gaW5pdGlhbGl6aW5nIGZvcm1hbAogIC8vLyBwYXJhbWV0ZXIuICBUaGUgc3BlYyBzYXlzIHRoZSBmb2xsb3dpbmc6CiAgLy8vCiAgLy8vICJJZiBhbiBleHBsaWNpdCB0eXBlIGlzIGF0dGFjaGVkIHRvIHRoZSBpbml0aWFsaXppbmcgZm9ybWFsLCB0aGF0IGlzIGl0cwogIC8vLyBzdGF0aWMgdHlwZS4gIE90aGVyd2lzZSwgdGhlIHR5cGUgb2YgYW4gaW5pdGlhbGl6aW5nIGZvcm1hbCBuYW1lZCBfaWRfIGlzCiAgLy8vIF9UaWRfLCB3aGVyZSBfVGlkXyBpcyB0aGUgdHlwZSBvZiB0aGUgaW5zdGFuY2UgdmFyaWFibGUgbmFtZWQgX2lkXyBpbiB0aGUKICAvLy8gaW1tZWRpYXRlbHkgZW5jbG9zaW5nIGNsYXNzLiAgSXQgaXMgYSBzdGF0aWMgd2FybmluZyBpZiB0aGUgc3RhdGljIHR5cGUgb2YKICAvLy8gX2lkXyBpcyBub3QgYSBzdWJ0eXBlIG9mIF9UaWRfLiIKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplciBidWlsZEZpZWxkSW5pdGlhbGl6ZXIoYm9vbCBpc1N5bnRoZXRpYywgU3RyaW5nIG5hbWUsCiAgICAgIGludCBmaWVsZE5hbWVPZmZzZXQsIGludCBhc3NpZ25tZW50T2Zmc2V0LCBFeHByZXNzaW9uIGV4cHJlc3Npb24sCiAgICAgIHtEYXJ0VHlwZSBmb3JtYWxUeXBlfSkgewogICAgQnVpbGRlciBidWlsZGVyID0gZGVjbGFyYXRpb25CdWlsZGVyLmxvb2t1cExvY2FsTWVtYmVyKG5hbWUpOwogICAgaWYgKGJ1aWxkZXI/Lm5leHQgIT0gbnVsbCkgewogICAgICAvLyBEdXBsaWNhdGVkIG5hbWUsIGFscmVhZHkgcmVwb3J0ZWQuCiAgICAgIHJldHVybiBuZXcgTG9jYWxJbml0aWFsaXplcigKICAgICAgICAgIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKAogICAgICAgICAgICAgIGRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25Vc2Uud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgICAgICAgICAgZmllbGROYW1lT2Zmc2V0LAogICAgICAgICAgICAgICAgICBuYW1lLmxlbmd0aCkpCiAgICAgICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBmaWVsZE5hbWVPZmZzZXQpCiAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGZpZWxkTmFtZU9mZnNldCkKICAgICAgICAuLmZpbGVPZmZzZXQgPSBmaWVsZE5hbWVPZmZzZXQ7CiAgICB9IGVsc2UgaWYgKGJ1aWxkZXIgaXMgRmllbGRCdWlsZGVyICYmIGJ1aWxkZXIuaXNEZWNsYXJhdGlvbkluc3RhbmNlTWVtYmVyKSB7CiAgICAgIGluaXRpYWxpemVkRmllbGRzID8/PSA8U3RyaW5nLCBpbnQ+e307CiAgICAgIGlmIChpbml0aWFsaXplZEZpZWxkcy5jb250YWluc0tleShuYW1lKSkgewogICAgICAgIHJldHVybiBidWlsZER1cGxpY2F0ZWRJbml0aWFsaXplcihidWlsZGVyLmZpZWxkLCBleHByZXNzaW9uLCBuYW1lLAogICAgICAgICAgICBhc3NpZ25tZW50T2Zmc2V0LCBpbml0aWFsaXplZEZpZWxkc1tuYW1lXSk7CiAgICAgIH0KICAgICAgaW5pdGlhbGl6ZWRGaWVsZHNbbmFtZV0gPSBhc3NpZ25tZW50T2Zmc2V0OwogICAgICBpZiAoYnVpbGRlci5pc0ZpbmFsICYmIGJ1aWxkZXIuaGFzSW5pdGlhbGl6ZXIpIHsKICAgICAgICBhZGRQcm9ibGVtKAogICAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUZpbmFsSW5zdGFuY2VWYXJpYWJsZUFscmVhZHlJbml0aWFsaXplZAogICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICAgIGFzc2lnbm1lbnRPZmZzZXQsCiAgICAgICAgICAgIG5vTGVuZ3RoLAogICAgICAgICAgICBjb250ZXh0OiBbCiAgICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVGaW5hbEluc3RhbmNlVmFyaWFibGVBbHJlYWR5SW5pdGlhbGl6ZWRDYXVzZQogICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhuYW1lKQogICAgICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKHVyaSwgYnVpbGRlci5jaGFyT2Zmc2V0LCBuYW1lLmxlbmd0aCkKICAgICAgICAgICAgXSk7CiAgICAgICAgQnVpbGRlciBjb25zdHJ1Y3RvciA9CiAgICAgICAgICAgIGxpYnJhcnlCdWlsZGVyLmxvYWRlci5nZXREdXBsaWNhdGVkRmllbGRJbml0aWFsaXplckVycm9yKCk7CiAgICAgICAgRXhwcmVzc2lvbiBpbnZvY2F0aW9uID0gYnVpbGRTdGF0aWNJbnZvY2F0aW9uKAogICAgICAgICAgICBjb25zdHJ1Y3Rvci50YXJnZXQsCiAgICAgICAgICAgIGZvcmVzdC5jcmVhdGVBcmd1bWVudHMoYXNzaWdubWVudE9mZnNldCwgPEV4cHJlc3Npb24+WwogICAgICAgICAgICAgIGZvcmVzdC5jcmVhdGVTdHJpbmdMaXRlcmFsKG5hbWUsIG51bGwpCiAgICAgICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBhc3NpZ25tZW50T2Zmc2V0CiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBjaGFyT2Zmc2V0OiBhc3NpZ25tZW50T2Zmc2V0KTsKICAgICAgICBpZiAoaW52b2NhdGlvbiBpcyBzaGFkb3cuU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50KSB7CiAgICAgICAgICBpbnZvY2F0aW9uID0gZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oaW52b2NhdGlvbik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgU2hhZG93SW52YWxpZEZpZWxkSW5pdGlhbGl6ZXIoCiAgICAgICAgICAgIGJ1aWxkZXIuZmllbGQsCiAgICAgICAgICAgIGV4cHJlc3Npb24sCiAgICAgICAgICAgIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKAogICAgICAgICAgICAgICAgZm9yZXN0LmNyZWF0ZVRocm93KG51bGwsIGludm9jYXRpb24pCiAgICAgICAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGFzc2lnbm1lbnRPZmZzZXQpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gYXNzaWdubWVudE9mZnNldDsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoIWxlZ2FjeU1vZGUgJiYKICAgICAgICAgICAgZm9ybWFsVHlwZSAhPSBudWxsICYmCiAgICAgICAgICAgICF0eXBlRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YoZm9ybWFsVHlwZSwgYnVpbGRlci5maWVsZC50eXBlKSkgewogICAgICAgICAgbGlicmFyeUJ1aWxkZXIuYWRkUHJvYmxlbSgKICAgICAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUluaXRpYWxpemluZ0Zvcm1hbFR5cGVNaXNtYXRjaAogICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhuYW1lLCBmb3JtYWxUeXBlLCBidWlsZGVyLmZpZWxkLnR5cGUpLAogICAgICAgICAgICAgIGFzc2lnbm1lbnRPZmZzZXQsCiAgICAgICAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgICAgICAgdXJpLAogICAgICAgICAgICAgIGNvbnRleHQ6IFsKICAgICAgICAgICAgICAgIGZhc3RhLm1lc3NhZ2VJbml0aWFsaXppbmdGb3JtYWxUeXBlTWlzbWF0Y2hGaWVsZAogICAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24oYnVpbGRlci5maWxlVXJpLCBidWlsZGVyLmNoYXJPZmZzZXQsIG5vTGVuZ3RoKQogICAgICAgICAgICAgIF0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IFNoYWRvd0ZpZWxkSW5pdGlhbGl6ZXIoYnVpbGRlci5maWVsZCwgZXhwcmVzc2lvbikKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGFzc2lnbm1lbnRPZmZzZXQKICAgICAgICAgIC4uaXNTeW50aGV0aWMgPSBpc1N5bnRoZXRpYzsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGJ1aWxkSW52YWxpZEluaXRpYWxpemVyKAogICAgICAgICAgZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oYnVpbGRQcm9ibGVtKAogICAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlSW5pdGlhbGl6ZXJGb3JTdGF0aWNGaWVsZC53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgICAgIGZpZWxkTmFtZU9mZnNldCwKICAgICAgICAgICAgICBuYW1lLmxlbmd0aCkpLAogICAgICAgICAgZmllbGROYW1lT2Zmc2V0KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyIGJ1aWxkU3VwZXJJbml0aWFsaXplcigKICAgICAgYm9vbCBpc1N5bnRoZXRpYywgQ29uc3RydWN0b3IgY29uc3RydWN0b3IsIEFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIFtpbnQgY2hhck9mZnNldCA9IC0xXSkgewogICAgaWYgKG1lbWJlci5pc0NvbnN0ICYmICFjb25zdHJ1Y3Rvci5pc0NvbnN0KSB7CiAgICAgIHJldHVybiBidWlsZEludmFsaWRTdXBlckluaXRpYWxpemVyKAogICAgICAgICAgY29uc3RydWN0b3IsCiAgICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgICBkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihidWlsZFByb2JsZW0oCiAgICAgICAgICAgICAgZmFzdGEubWVzc2FnZUNvbnN0Q29uc3RydWN0b3JXaXRoTm9uQ29uc3RTdXBlciwKICAgICAgICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgICAgICAgIGNvbnN0cnVjdG9yLm5hbWUubmFtZS5sZW5ndGgpKSwKICAgICAgICAgIGNoYXJPZmZzZXQpOwogICAgfQogICAgbmVlZHNJbXBsaWNpdFN1cGVySW5pdGlhbGl6ZXIgPSBmYWxzZTsKICAgIHJldHVybiBuZXcgU3VwZXJJbml0aWFsaXplckp1ZGdtZW50KGNvbnN0cnVjdG9yLCBhcmd1bWVudHMpCiAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQKICAgICAgLi5pc1N5bnRoZXRpYyA9IGlzU3ludGhldGljOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXIgYnVpbGRSZWRpcmVjdGluZ0luaXRpYWxpemVyKAogICAgICBDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciwgQXJndW1lbnRzIGFyZ3VtZW50cywKICAgICAgW2ludCBjaGFyT2Zmc2V0ID0gLTFdKSB7CiAgICBpZiAoY2xhc3NCdWlsZGVyLmNoZWNrQ29uc3RydWN0b3JDeWNsaWMoCiAgICAgICAgbWVtYmVyLm5hbWUsIGNvbnN0cnVjdG9yLm5hbWUubmFtZSkpIHsKICAgICAgaW50IGxlbmd0aCA9IGNvbnN0cnVjdG9yLm5hbWUubmFtZS5sZW5ndGg7CiAgICAgIGlmIChsZW5ndGggPT0gMCkgbGVuZ3RoID0gInRoaXMiLmxlbmd0aDsKICAgICAgYWRkUHJvYmxlbShmYXN0YS5tZXNzYWdlQ29uc3RydWN0b3JDeWNsaWMsIGNoYXJPZmZzZXQsIGxlbmd0aCk7CiAgICAgIC8vIFRPRE8oYXNrZXNjKTogUHJvZHVjZSBpbnZhbGlkIGluaXRpYWxpemVyLgogICAgfQogICAgbmVlZHNJbXBsaWNpdFN1cGVySW5pdGlhbGl6ZXIgPSBmYWxzZTsKICAgIHJldHVybiBuZXcgUmVkaXJlY3RpbmdJbml0aWFsaXplckp1ZGdtZW50KGNvbnN0cnVjdG9yLCBhcmd1bWVudHMpCiAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU9wZXJhdG9yKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJPcGVyYXRvciIpOwogICAgcHVzaChuZXcgT3BlcmF0b3IodG9rZW4sIHRva2VuLmNoYXJPZmZzZXQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3ltYm9sVm9pZChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiU3ltYm9sVm9pZCIpOwogICAgcHVzaChuZXcgSWRlbnRpZmllci5wcmVzZXJ2ZVRva2VuKHRva2VuKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUludmFsaWRGdW5jdGlvbkJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGlmIChtZW1iZXIuaXNOYXRpdmUpIHsKICAgICAgcHVzaChOdWxsVmFsdWUuRnVuY3Rpb25Cb2R5KTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2goZm9yZXN0LmNyZWF0ZUJsb2NrKAogICAgICAgICAgdG9rZW4sCiAgICAgICAgICA8U3RhdGVtZW50PlsKICAgICAgICAgICAgYnVpbGRQcm9ibGVtU3RhdGVtZW50KAogICAgICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEZ1bmN0aW9uQm9keS53aXRoQXJndW1lbnRzKHRva2VuKSwKICAgICAgICAgICAgICAgIHRva2VuLmNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICBsZW5ndGg6IHRva2VuLmxlbmd0aCkKICAgICAgICAgIF0sCiAgICAgICAgICBudWxsKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBVbnJlc29sdmVkVHlwZSB2YWxpZGF0ZVR5cGVVc2UoCiAgICAgIFVucmVzb2x2ZWRUeXBlIHVucmVzb2x2ZWQsIGJvb2wgbm9uSW5zdGFuY2VBY2Nlc3NJc0Vycm9yKSB7CiAgICBUeXBlQnVpbGRlciBidWlsZGVyID0gdW5yZXNvbHZlZC5idWlsZGVyOwogICAgaWYgKGJ1aWxkZXIgaXMgTmFtZWRUeXBlQnVpbGRlciAmJiBidWlsZGVyLmRlY2xhcmF0aW9uLmlzVHlwZVZhcmlhYmxlKSB7CiAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXIgdHlwZVBhcmFtZXRlckJ1aWxkZXIgPSBidWlsZGVyLmRlY2xhcmF0aW9uOwogICAgICBUeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIgPSB0eXBlUGFyYW1ldGVyQnVpbGRlci5wYXJhbWV0ZXI7CiAgICAgIExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2U7CiAgICAgIGlmICghaXNEZWNsYXJhdGlvbkluc3RhbmNlQ29udGV4dCAmJiB0eXBlUGFyYW1ldGVyLnBhcmVudCBpcyBDbGFzcykgewogICAgICAgIG1lc3NhZ2UgPSBmYXN0YS5tZXNzYWdlVHlwZVZhcmlhYmxlSW5TdGF0aWNDb250ZXh0LndpdGhMb2NhdGlvbigKICAgICAgICAgICAgdW5yZXNvbHZlZC5maWxlVXJpLAogICAgICAgICAgICB1bnJlc29sdmVkLmNoYXJPZmZzZXQsCiAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIubmFtZS5sZW5ndGgpOwogICAgICB9IGVsc2UgaWYgKGNvbnN0YW50Q29udGV4dCA9PSBDb25zdGFudENvbnRleHQuaW5mZXJyZWQpIHsKICAgICAgICBtZXNzYWdlID0gZmFzdGEubWVzc2FnZVR5cGVWYXJpYWJsZUluQ29uc3RhbnRDb250ZXh0LndpdGhMb2NhdGlvbigKICAgICAgICAgICAgdW5yZXNvbHZlZC5maWxlVXJpLAogICAgICAgICAgICB1bnJlc29sdmVkLmNoYXJPZmZzZXQsCiAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIubmFtZS5sZW5ndGgpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiB1bnJlc29sdmVkOwogICAgICB9CiAgICAgIGFkZFByb2JsZW0obWVzc2FnZS5tZXNzYWdlT2JqZWN0LCBtZXNzYWdlLmNoYXJPZmZzZXQsIG1lc3NhZ2UubGVuZ3RoKTsKICAgICAgcmV0dXJuIG5ldyBVbnJlc29sdmVkVHlwZSgKICAgICAgICAgIG5ldyBOYW1lZFR5cGVCdWlsZGVyKHR5cGVQYXJhbWV0ZXIubmFtZSwgbnVsbCkKICAgICAgICAgICAgLi5iaW5kKG5ldyBJbnZhbGlkVHlwZUJ1aWxkZXIodHlwZVBhcmFtZXRlci5uYW1lLCBtZXNzYWdlKSksCiAgICAgICAgICB1bnJlc29sdmVkLmNoYXJPZmZzZXQsCiAgICAgICAgICB1bnJlc29sdmVkLmZpbGVVcmkpOwogICAgfQogICAgcmV0dXJuIHVucmVzb2x2ZWQ7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGV2YWx1YXRlQXJndW1lbnRzQmVmb3JlKAogICAgICBBcmd1bWVudHMgYXJndW1lbnRzLCBFeHByZXNzaW9uIGV4cHJlc3Npb24pIHsKICAgIGlmIChhcmd1bWVudHMgPT0gbnVsbCkgcmV0dXJuIGV4cHJlc3Npb247CiAgICBMaXN0PEV4cHJlc3Npb24+IGV4cHJlc3Npb25zID0KICAgICAgICBuZXcgTGlzdDxFeHByZXNzaW9uPi5mcm9tKGZvcmVzdC5hcmd1bWVudHNQb3NpdGlvbmFsKGFyZ3VtZW50cykpOwogICAgZm9yIChOYW1lZEV4cHJlc3Npb24gbmFtZWQgaW4gZm9yZXN0LmFyZ3VtZW50c05hbWVkKGFyZ3VtZW50cykpIHsKICAgICAgZXhwcmVzc2lvbnMuYWRkKG5hbWVkLnZhbHVlKTsKICAgIH0KICAgIGZvciAoRXhwcmVzc2lvbiBhcmd1bWVudCBpbiBleHByZXNzaW9ucy5yZXZlcnNlZCkgewogICAgICBleHByZXNzaW9uID0gbmV3IExldCgKICAgICAgICAgIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKGFyZ3VtZW50LAogICAgICAgICAgICAgIGlzRmluYWw6IHRydWUsIHR5cGU6IGNvcmVUeXBlcy5vYmplY3RDbGFzcy5yYXdUeXBlKSwKICAgICAgICAgIGV4cHJlc3Npb24pOwogICAgfQogICAgcmV0dXJuIGV4cHJlc3Npb247CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSWRlbnRpY2FsKE1lbWJlciBtZW1iZXIpID0+IG1lbWJlciA9PSBjb3JlVHlwZXMuaWRlbnRpY2FsUHJvY2VkdXJlOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGJ1aWxkTWV0aG9kSW52b2NhdGlvbigKICAgICAgRXhwcmVzc2lvbiByZWNlaXZlciwgTmFtZSBuYW1lLCBBcmd1bWVudHMgYXJndW1lbnRzLCBpbnQgb2Zmc2V0LAogICAgICB7Ym9vbCBpc0NvbnN0YW50RXhwcmVzc2lvbjogZmFsc2UsCiAgICAgIGJvb2wgaXNOdWxsQXdhcmU6IGZhbHNlLAogICAgICBib29sIGlzSW1wbGljaXRDYWxsOiBmYWxzZSwKICAgICAgYm9vbCBpc1N1cGVyOiBmYWxzZSwKICAgICAgTWVtYmVyIGludGVyZmFjZVRhcmdldH0pIHsKICAgIGlmIChjb25zdGFudENvbnRleHQgIT0gQ29uc3RhbnRDb250ZXh0Lm5vbmUgJiYgIWlzQ29uc3RhbnRFeHByZXNzaW9uKSB7CiAgICAgIHJldHVybiBidWlsZFByb2JsZW0oCiAgICAgICAgICBmYXN0YS50ZW1wbGF0ZU5vdENvbnN0YW50RXhwcmVzc2lvbgogICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKCdNZXRob2QgaW52b2NhdGlvbicpLAogICAgICAgICAgb2Zmc2V0LAogICAgICAgICAgbmFtZS5uYW1lLmxlbmd0aCk7CiAgICB9CiAgICBpZiAoaXNTdXBlcikgewogICAgICAvLyBXZSBjYW4gaWdub3JlIFtpc051bGxBd2FyZV0gb24gc3VwZXIgc2VuZHMuCiAgICAgIGFzc2VydChmb3Jlc3QuaXNUaGlzRXhwcmVzc2lvbihyZWNlaXZlcikpOwogICAgICBNZW1iZXIgdGFyZ2V0ID0gbG9va3VwSW5zdGFuY2VNZW1iZXIobmFtZSwgaXNTdXBlcjogdHJ1ZSk7CgogICAgICBpZiAodGFyZ2V0ID09IG51bGwgfHwgKHRhcmdldCBpcyBQcm9jZWR1cmUgJiYgIXRhcmdldC5pc0FjY2Vzc29yKSkgewogICAgICAgIGlmICh0YXJnZXQgPT0gbnVsbCkgewogICAgICAgICAgd2FyblVucmVzb2x2ZWRNZXRob2QobmFtZSwgb2Zmc2V0LCBpc1N1cGVyOiB0cnVlKTsKICAgICAgICB9IGVsc2UgaWYgKCFhcmVBcmd1bWVudHNDb21wYXRpYmxlKHRhcmdldC5mdW5jdGlvbiwgYXJndW1lbnRzKSkgewogICAgICAgICAgdGFyZ2V0ID0gbnVsbDsKICAgICAgICAgIGFkZFByb2JsZW1FcnJvcklmQ29uc3QoCiAgICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVTdXBlcmNsYXNzTWV0aG9kQXJndW1lbnRNaXNtYXRjaAogICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhuYW1lLm5hbWUpLAogICAgICAgICAgICAgIG9mZnNldCwKICAgICAgICAgICAgICBuYW1lLm5hbWUubGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBTdXBlck1ldGhvZEludm9jYXRpb25KdWRnbWVudChuYW1lLCBhcmd1bWVudHMsCiAgICAgICAgICAgIGludGVyZmFjZVRhcmdldDogdGFyZ2V0KQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICB9CgogICAgICByZWNlaXZlciA9IG5ldyBTdXBlclByb3BlcnR5R2V0SnVkZ21lbnQobmFtZSwgaW50ZXJmYWNlVGFyZ2V0OiB0YXJnZXQpCiAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBNZXRob2RJbnZvY2F0aW9uIG5vZGUgPSBuZXcgTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KAogICAgICAgICAgcmVjZWl2ZXIsIGNhbGxOYW1lLCBhcmd1bWVudHMsCiAgICAgICAgICBpc0ltcGxpY2l0Q2FsbDogdHJ1ZSkKICAgICAgICAuLmZpbGVPZmZzZXQgPSBmb3Jlc3QucmVhZE9mZnNldChhcmd1bWVudHMpOwogICAgICByZXR1cm4gbm9kZTsKICAgIH0KCiAgICBpZiAoaXNOdWxsQXdhcmUpIHsKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKHJlY2VpdmVyKTsKICAgICAgcmV0dXJuIG5ldyBOdWxsQXdhcmVNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQoCiAgICAgICAgICB2YXJpYWJsZSwKICAgICAgICAgIGZvcmVzdC5jcmVhdGVDb25kaXRpb25hbEV4cHJlc3Npb24oCiAgICAgICAgICAgICAgYnVpbGRJc051bGwobmV3IFZhcmlhYmxlR2V0KHZhcmlhYmxlKSwgb2Zmc2V0LCB0aGlzKSwKICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgIGZvcmVzdC5jcmVhdGVOdWxsTGl0ZXJhbChudWxsKS4uZmlsZU9mZnNldCA9IG9mZnNldCwKICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgIG5ldyBNZXRob2RJbnZvY2F0aW9uKAogICAgICAgICAgICAgICAgICBuZXcgVmFyaWFibGVHZXQodmFyaWFibGUpLCBuYW1lLCBhcmd1bWVudHMsIGludGVyZmFjZVRhcmdldCkKICAgICAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldCkKICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0KQogICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgIH0gZWxzZSB7CiAgICAgIE1ldGhvZEludm9jYXRpb24gbm9kZSA9IG5ldyBNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQoCiAgICAgICAgICByZWNlaXZlciwgbmFtZSwgYXJndW1lbnRzLAogICAgICAgICAgaXNJbXBsaWNpdENhbGw6IGlzSW1wbGljaXRDYWxsLCBpbnRlcmZhY2VUYXJnZXQ6IGludGVyZmFjZVRhcmdldCkKICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIHJldHVybiBub2RlOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRQcm9ibGVtKE1lc3NhZ2UgbWVzc2FnZSwgaW50IGNoYXJPZmZzZXQsIGludCBsZW5ndGgsCiAgICAgIHtib29sIHdhc0hhbmRsZWQ6IGZhbHNlLAogICAgICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0LAogICAgICBTZXZlcml0eSBzZXZlcml0eX0pIHsKICAgIGxpYnJhcnlCdWlsZGVyLmFkZFByb2JsZW0obWVzc2FnZSwgY2hhck9mZnNldCwgbGVuZ3RoLCB1cmksCiAgICAgICAgd2FzSGFuZGxlZDogd2FzSGFuZGxlZCwgY29udGV4dDogY29udGV4dCwgc2V2ZXJpdHk6IHNldmVyaXR5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkUHJvYmxlbUVycm9ySWZDb25zdChNZXNzYWdlIG1lc3NhZ2UsIGludCBjaGFyT2Zmc2V0LCBpbnQgbGVuZ3RoLAogICAgICB7Ym9vbCB3YXNIYW5kbGVkOiBmYWxzZSwgTGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dH0pIHsKICAgIC8vIFRPRE8oYXNrZXNjKTogSW5zdGVhZCBvZiBkZWNpZGluZyBvbiB0aGUgc2V2ZXJpdHksIHRoaXMgbWV0aG9kIHNob3VsZAogICAgLy8gdGFrZSB0d28gbWVzc2FnZXM6IG9uZSB0byB1c2Ugd2hlbiBhIGNvbnN0YW50IGV4cHJlc3Npb24gaXMKICAgIC8vIHJlcXVpcmVkIGFuZCBvbmUgdG8gdXNlIG90aGVyd2lzZS4KICAgIFNldmVyaXR5IHNldmVyaXR5ID0gbWVzc2FnZS5jb2RlLnNldmVyaXR5OwogICAgaWYgKGNvbnN0YW50Q29udGV4dCAhPSBDb25zdGFudENvbnRleHQubm9uZSkgewogICAgICBzZXZlcml0eSA9IFNldmVyaXR5LmVycm9yOwogICAgfQogICAgYWRkUHJvYmxlbShtZXNzYWdlLCBjaGFyT2Zmc2V0LCBsZW5ndGgsCiAgICAgICAgd2FzSGFuZGxlZDogd2FzSGFuZGxlZCwgY29udGV4dDogY29udGV4dCwgc2V2ZXJpdHk6IHNldmVyaXR5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVwb3J0RHVwbGljYXRlZERlY2xhcmF0aW9uKAogICAgICBCdWlsZGVyIGV4aXN0aW5nLCBTdHJpbmcgbmFtZSwgaW50IGNoYXJPZmZzZXQpIHsKICAgIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQgPSBleGlzdGluZy5pc1N5bnRoZXRpYwogICAgICAgID8gbnVsbAogICAgICAgIDogPExvY2F0ZWRNZXNzYWdlPlsKICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25DYXVzZQogICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMobmFtZSkKICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24oCiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcuZmlsZVVyaSwgZXhpc3RpbmcuY2hhck9mZnNldCwgbmFtZS5sZW5ndGgpCiAgICAgICAgICBdOwogICAgYWRkUHJvYmxlbShmYXN0YS50ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvbi53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgIGNoYXJPZmZzZXQsIG5hbWUubGVuZ3RoLAogICAgICAgIGNvbnRleHQ6IGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWJ1Z0V2ZW50KFN0cmluZyBuYW1lKSB7CiAgICAvLyBwcmludEV2ZW50KCdCb2R5QnVpbGRlcjogJG5hbWUnKTsKICB9CgogIEBvdmVycmlkZQogIFN0YXRpY0dldCBtYWtlU3RhdGljR2V0KE1lbWJlciByZWFkVGFyZ2V0LCBUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIG5ldyBTdGF0aWNHZXQocmVhZFRhcmdldCkuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIHdyYXBJbkRlZmVycmVkQ2hlY2soCiAgICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiwgUHJlZml4QnVpbGRlciBwcmVmaXgsIGludCBjaGFyT2Zmc2V0KSB7CiAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGNoZWNrID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUoCiAgICAgICAgZm9yZXN0LmNoZWNrTGlicmFyeUlzTG9hZGVkKHByZWZpeC5kZXBlbmRlbmN5KSkKICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldDsKICAgIHJldHVybiBuZXcgRGVmZXJyZWRDaGVja0p1ZGdtZW50KGNoZWNrLCBleHByZXNzaW9uKTsKICB9CgogIC8vLyBUT0RPKGFoZSk6IFRoaXMgbWV0aG9kIGlzIHRlbXBvcmFyaWx5IGltcGxlbWVudGVkLiBPbmNlIHR5cGUgcHJvbW90aW9uIGlzCiAgLy8vIGluZGVwZW5kZW50IG9mIHNoYWRvdyBub2RlcywgcmVtb3ZlIHRoaXMgbWV0aG9kLgogIHZvaWQgZW50ZXJUaGVuRm9yVHlwZVByb21vdGlvbihFeHByZXNzaW9uIGNvbmRpdGlvbikgewogICAgdHlwZVByb21vdGVyPy5lbnRlclRoZW4oY29uZGl0aW9uKTsKICB9CgogIGJvb2wgaXNFcnJvbmVvdXNOb2RlKFRyZWVOb2RlIG5vZGUpIHsKICAgIHJldHVybiBsaWJyYXJ5QnVpbGRlci5sb2FkZXIuaGFuZGxlZEVycm9ycy5pc05vdEVtcHR5ICYmCiAgICAgICAgZm9yZXN0LmlzRXJyb25lb3VzTm9kZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGJ1aWxkRGFydFR5cGUoVW5yZXNvbHZlZFR5cGUgdW5yZXNvbHZlZFR5cGUsCiAgICAgIHtib29sIG5vbkluc3RhbmNlQWNjZXNzSXNFcnJvcjogZmFsc2V9KSB7CiAgICBpZiAodW5yZXNvbHZlZFR5cGUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gdmFsaWRhdGVUeXBlVXNlKHVucmVzb2x2ZWRUeXBlLCBub25JbnN0YW5jZUFjY2Vzc0lzRXJyb3IpCiAgICAgICAgLmJ1aWxkZXIKICAgICAgICA/LmJ1aWxkKGxpYnJhcnlCdWlsZGVyKTsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8RGFydFR5cGU+IGJ1aWxkRGFydFR5cGVBcmd1bWVudHMoTGlzdDxVbnJlc29sdmVkVHlwZT4gdW5yZXNvbHZlZFR5cGVzKSB7CiAgICBpZiAodW5yZXNvbHZlZFR5cGVzID09IG51bGwpIHJldHVybiA8RGFydFR5cGU+W107CiAgICBMaXN0PERhcnRUeXBlPiB0eXBlcyA9CiAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+LmZpbGxlZCh1bnJlc29sdmVkVHlwZXMubGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHR5cGVzW2ldID0gYnVpbGREYXJ0VHlwZSh1bnJlc29sdmVkVHlwZXNbaV0pOwogICAgfQogICAgcmV0dXJuIHR5cGVzOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGNvbnN0cnVjdG9yTmFtZUZvckRpYWdub3N0aWNzKFN0cmluZyBuYW1lLAogICAgICB7U3RyaW5nIGNsYXNzTmFtZSwgYm9vbCBpc1N1cGVyOiBmYWxzZX0pIHsKICAgIGlmIChjbGFzc05hbWUgPT0gbnVsbCkgewogICAgICBDbGFzcyBjbHMgPSBjbGFzc0J1aWxkZXIuY2xzOwogICAgICBpZiAoaXNTdXBlcikgewogICAgICAgIGNscyA9IGNscy5zdXBlcmNsYXNzOwogICAgICAgIHdoaWxlIChjbHMuaXNNaXhpbkFwcGxpY2F0aW9uKSB7CiAgICAgICAgICBjbHMgPSBjbHMuc3VwZXJjbGFzczsKICAgICAgICB9CiAgICAgIH0KICAgICAgY2xhc3NOYW1lID0gY2xzLm5hbWU7CiAgICB9CiAgICByZXR1cm4gbmFtZS5pc0VtcHR5ID8gY2xhc3NOYW1lIDogIiRjbGFzc05hbWUuJG5hbWUiOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiB3cmFwU3ludGhldGljRXhwcmVzc2lvbihFeHByZXNzaW9uIGRlc3VnYXJlZCwgaW50IGNoYXJPZmZzZXQpIHsKICAgIGlmIChsZWdhY3lNb2RlKSByZXR1cm4gZGVzdWdhcmVkOwogICAgcmV0dXJuIHNoYWRvdy5TeW50aGV0aWNXcmFwcGVyLndyYXBTeW50aGV0aWNFeHByZXNzaW9uKGRlc3VnYXJlZCkKICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldDsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oRXhwcmVzc2lvbiBub2RlKSB7CiAgICBpZiAobGVnYWN5TW9kZSkgcmV0dXJuIG5vZGU7CiAgICBzaGFkb3cuU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50IHNoYWRvd05vZGUgPSBub2RlOwogICAgcmV0dXJuIHNoYWRvd05vZGUuZGVzdWdhcmVkOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiB3cmFwSW52YWxpZENvbnN0cnVjdG9ySW52b2NhdGlvbihFeHByZXNzaW9uIGRlc3VnYXJlZCwKICAgICAgTWVtYmVyIGNvbnN0cnVjdG9yLCBBcmd1bWVudHMgYXJndW1lbnRzLCBpbnQgY2hhck9mZnNldCkgewogICAgaWYgKGxlZ2FjeU1vZGUpIHJldHVybiBkZXN1Z2FyZWQ7CiAgICByZXR1cm4gc2hhZG93LlN5bnRoZXRpY1dyYXBwZXIud3JhcEludmFsaWRDb25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgICAgZGVzdWdhcmVkLCBjb25zdHJ1Y3RvciwgYXJndW1lbnRzKQogICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiB3cmFwSW52YWxpZFdyaXRlKAogICAgICBFeHByZXNzaW9uIGRlc3VnYXJlZCwgRXhwcmVzc2lvbiBleHByZXNzaW9uLCBpbnQgY2hhck9mZnNldCkgewogICAgaWYgKGxlZ2FjeU1vZGUpIHJldHVybiBkZXN1Z2FyZWQ7CiAgICByZXR1cm4gc2hhZG93LlN5bnRoZXRpY1dyYXBwZXIud3JhcEludmFsaWRXcml0ZShkZXN1Z2FyZWQsIGV4cHJlc3Npb24pCiAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIHdyYXBVbnJlc29sdmVkVGFyZ2V0SW52b2NhdGlvbigKICAgICAgRXhwcmVzc2lvbiBkZXN1Z2FyZWQsIEFyZ3VtZW50cyBhcmd1bWVudHMsIGludCBjaGFyT2Zmc2V0KSB7CiAgICBpZiAobGVnYWN5TW9kZSkgcmV0dXJuIGRlc3VnYXJlZDsKICAgIHJldHVybiBzaGFkb3cuU3ludGhldGljV3JhcHBlci53cmFwVW5yZXNvbHZlZFRhcmdldEludm9jYXRpb24oCiAgICAgICAgZGVzdWdhcmVkLCBhcmd1bWVudHMpCiAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIHdyYXBVbnJlc29sdmVkVmFyaWFibGVBc3NpZ25tZW50KAogICAgICBFeHByZXNzaW9uIGRlc3VnYXJlZCwgYm9vbCBpc0NvbXBvdW5kLCBFeHByZXNzaW9uIHJocywgaW50IGNoYXJPZmZzZXQpIHsKICAgIGlmIChsZWdhY3lNb2RlKSByZXR1cm4gZGVzdWdhcmVkOwogICAgcmV0dXJuIHNoYWRvdy5TeW50aGV0aWNXcmFwcGVyLndyYXBVbnJlc29sdmVkVmFyaWFibGVBc3NpZ25tZW50KAogICAgICAgIGRlc3VnYXJlZCwgaXNDb21wb3VuZCwgcmhzKQogICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgRW5zdXJlTG9hZGVkIHsKICB2b2lkIGVuc3VyZUxvYWRlZChNZW1iZXIgbWVtYmVyKTsKICBib29sIGlzTG9hZGVkKE1lbWJlciBtZW1iZXIpOwp9CgpjbGFzcyBPcGVyYXRvciB7CiAgZmluYWwgVG9rZW4gdG9rZW47CiAgU3RyaW5nIGdldCBuYW1lID0+IHRva2VuLnN0cmluZ1ZhbHVlOwoKICBmaW5hbCBpbnQgY2hhck9mZnNldDsKCiAgT3BlcmF0b3IodGhpcy50b2tlbiwgdGhpcy5jaGFyT2Zmc2V0KTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIm9wZXJhdG9yKCRuYW1lKSI7Cn0KCmNsYXNzIEp1bXBUYXJnZXQgZXh0ZW5kcyBCdWlsZGVyIHsKICBmaW5hbCBMaXN0PFN0YXRlbWVudD4gdXNlcnMgPSA8U3RhdGVtZW50PltdOwoKICBmaW5hbCBKdW1wVGFyZ2V0S2luZCBraW5kOwoKICBmaW5hbCBpbnQgZnVuY3Rpb25OZXN0aW5nTGV2ZWw7CgogIEBvdmVycmlkZQogIGZpbmFsIE1lbWJlckJ1aWxkZXIgcGFyZW50OwoKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgY2hhck9mZnNldDsKCiAgSnVtcFRhcmdldCgKICAgICAgdGhpcy5raW5kLCB0aGlzLmZ1bmN0aW9uTmVzdGluZ0xldmVsLCB0aGlzLnBhcmVudCwgdGhpcy5jaGFyT2Zmc2V0KTsKCiAgQG92ZXJyaWRlCiAgVXJpIGdldCBmaWxlVXJpID0+IHBhcmVudC5maWxlVXJpOwoKICBib29sIGdldCBpc0JyZWFrVGFyZ2V0ID0+IGtpbmQgPT0gSnVtcFRhcmdldEtpbmQuQnJlYWs7CgogIGJvb2wgZ2V0IGlzQ29udGludWVUYXJnZXQgPT4ga2luZCA9PSBKdW1wVGFyZ2V0S2luZC5Db250aW51ZTsKCiAgYm9vbCBnZXQgaXNHb3RvVGFyZ2V0ID0+IGtpbmQgPT0gSnVtcFRhcmdldEtpbmQuR290bzsKCiAgYm9vbCBnZXQgaGFzVXNlcnMgPT4gdXNlcnMuaXNOb3RFbXB0eTsKCiAgdm9pZCBhZGRCcmVhayhTdGF0ZW1lbnQgc3RhdGVtZW50KSB7CiAgICBhc3NlcnQoaXNCcmVha1RhcmdldCk7CiAgICB1c2Vycy5hZGQoc3RhdGVtZW50KTsKICB9CgogIHZvaWQgYWRkQ29udGludWUoU3RhdGVtZW50IHN0YXRlbWVudCkgewogICAgYXNzZXJ0KGlzQ29udGludWVUYXJnZXQpOwogICAgdXNlcnMuYWRkKHN0YXRlbWVudCk7CiAgfQoKICB2b2lkIGFkZEdvdG8oU3RhdGVtZW50IHN0YXRlbWVudCkgewogICAgYXNzZXJ0KGlzR290b1RhcmdldCk7CiAgICB1c2Vycy5hZGQoc3RhdGVtZW50KTsKICB9CgogIHZvaWQgcmVzb2x2ZUJyZWFrcyhGb3Jlc3QgZm9yZXN0LCBTdGF0ZW1lbnQgdGFyZ2V0KSB7CiAgICBhc3NlcnQoaXNCcmVha1RhcmdldCk7CiAgICBmb3IgKEJyZWFrU3RhdGVtZW50IHVzZXIgaW4gdXNlcnMpIHsKICAgICAgdXNlci50YXJnZXQgPSB0YXJnZXQ7CiAgICB9CiAgICB1c2Vycy5jbGVhcigpOwogIH0KCiAgdm9pZCByZXNvbHZlQ29udGludWVzKEZvcmVzdCBmb3Jlc3QsIFN0YXRlbWVudCB0YXJnZXQpIHsKICAgIGFzc2VydChpc0NvbnRpbnVlVGFyZ2V0KTsKICAgIGZvciAoQnJlYWtTdGF0ZW1lbnQgdXNlciBpbiB1c2VycykgewogICAgICB1c2VyLnRhcmdldCA9IHRhcmdldDsKICAgIH0KICAgIHVzZXJzLmNsZWFyKCk7CiAgfQoKICB2b2lkIHJlc29sdmVHb3RvcyhGb3Jlc3QgZm9yZXN0LCBTd2l0Y2hDYXNlIHRhcmdldCkgewogICAgYXNzZXJ0KGlzR290b1RhcmdldCk7CiAgICBmb3IgKENvbnRpbnVlU3dpdGNoU3RhdGVtZW50IHVzZXIgaW4gdXNlcnMpIHsKICAgICAgdXNlci50YXJnZXQgPSB0YXJnZXQ7CiAgICB9CiAgICB1c2Vycy5jbGVhcigpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBmdWxsTmFtZUZvckVycm9ycyA9PiAiPGp1bXAtdGFyZ2V0PiI7Cn0KCmNsYXNzIExhYmVsVGFyZ2V0IGV4dGVuZHMgQnVpbGRlciBpbXBsZW1lbnRzIEp1bXBUYXJnZXQgewogIEBvdmVycmlkZQogIGZpbmFsIE1lbWJlckJ1aWxkZXIgcGFyZW50OwoKICBmaW5hbCBKdW1wVGFyZ2V0IGJyZWFrVGFyZ2V0OwoKICBmaW5hbCBKdW1wVGFyZ2V0IGNvbnRpbnVlVGFyZ2V0OwoKICBmaW5hbCBpbnQgZnVuY3Rpb25OZXN0aW5nTGV2ZWw7CgogIEBvdmVycmlkZQogIGZpbmFsIGludCBjaGFyT2Zmc2V0OwoKICBMYWJlbFRhcmdldCh0aGlzLnBhcmVudCwgdGhpcy5mdW5jdGlvbk5lc3RpbmdMZXZlbCwgdGhpcy5jaGFyT2Zmc2V0KQogICAgICA6IGJyZWFrVGFyZ2V0ID0gbmV3IEp1bXBUYXJnZXQoCiAgICAgICAgICAgIEp1bXBUYXJnZXRLaW5kLkJyZWFrLCBmdW5jdGlvbk5lc3RpbmdMZXZlbCwgcGFyZW50LCBjaGFyT2Zmc2V0KSwKICAgICAgICBjb250aW51ZVRhcmdldCA9IG5ldyBKdW1wVGFyZ2V0KAogICAgICAgICAgICBKdW1wVGFyZ2V0S2luZC5Db250aW51ZSwgZnVuY3Rpb25OZXN0aW5nTGV2ZWwsIHBhcmVudCwgY2hhck9mZnNldCk7CgogIEBvdmVycmlkZQogIFVyaSBnZXQgZmlsZVVyaSA9PiBwYXJlbnQuZmlsZVVyaTsKCiAgYm9vbCBnZXQgaGFzVXNlcnMgPT4gYnJlYWtUYXJnZXQuaGFzVXNlcnMgfHwgY29udGludWVUYXJnZXQuaGFzVXNlcnM7CgogIExpc3Q8U3RhdGVtZW50PiBnZXQgdXNlcnMgPT4gdW5zdXBwb3J0ZWQoInVzZXJzIiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CgogIEp1bXBUYXJnZXRLaW5kIGdldCBraW5kID0+IHVuc3VwcG9ydGVkKCJraW5kIiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CgogIGJvb2wgZ2V0IGlzQnJlYWtUYXJnZXQgPT4gdHJ1ZTsKCiAgYm9vbCBnZXQgaXNDb250aW51ZVRhcmdldCA9PiB0cnVlOwoKICBib29sIGdldCBpc0dvdG9UYXJnZXQgPT4gZmFsc2U7CgogIHZvaWQgYWRkQnJlYWsoU3RhdGVtZW50IHN0YXRlbWVudCkgewogICAgYnJlYWtUYXJnZXQuYWRkQnJlYWsoc3RhdGVtZW50KTsKICB9CgogIHZvaWQgYWRkQ29udGludWUoU3RhdGVtZW50IHN0YXRlbWVudCkgewogICAgY29udGludWVUYXJnZXQuYWRkQ29udGludWUoc3RhdGVtZW50KTsKICB9CgogIHZvaWQgYWRkR290byhTdGF0ZW1lbnQgc3RhdGVtZW50KSB7CiAgICB1bnN1cHBvcnRlZCgiYWRkR290byIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogIH0KCiAgdm9pZCByZXNvbHZlQnJlYWtzKEZvcmVzdCBmb3Jlc3QsIFN0YXRlbWVudCB0YXJnZXQpIHsKICAgIGJyZWFrVGFyZ2V0LnJlc29sdmVCcmVha3MoZm9yZXN0LCB0YXJnZXQpOwogIH0KCiAgdm9pZCByZXNvbHZlQ29udGludWVzKEZvcmVzdCBmb3Jlc3QsIFN0YXRlbWVudCB0YXJnZXQpIHsKICAgIGNvbnRpbnVlVGFyZ2V0LnJlc29sdmVDb250aW51ZXMoZm9yZXN0LCB0YXJnZXQpOwogIH0KCiAgdm9pZCByZXNvbHZlR290b3MoRm9yZXN0IGZvcmVzdCwgU3dpdGNoQ2FzZSB0YXJnZXQpIHsKICAgIHVuc3VwcG9ydGVkKCJyZXNvbHZlR290b3MiLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZnVsbE5hbWVGb3JFcnJvcnMgPT4gIjxsYWJlbC10YXJnZXQ+IjsKfQoKY2xhc3MgRm9ybWFsUGFyYW1ldGVycyB7CiAgZmluYWwgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBwYXJhbWV0ZXJzOwogIGZpbmFsIGludCBjaGFyT2Zmc2V0OwogIGZpbmFsIGludCBsZW5ndGg7CiAgZmluYWwgVXJpIHVyaTsKCiAgRm9ybWFsUGFyYW1ldGVycyh0aGlzLnBhcmFtZXRlcnMsIHRoaXMuY2hhck9mZnNldCwgdGhpcy5sZW5ndGgsIHRoaXMudXJpKSB7CiAgICBpZiAocGFyYW1ldGVycz8uaXNFbXB0eSA/PyBmYWxzZSkgewogICAgICB0aHJvdyAiRW1wdHkgcGFyYW1ldGVycyBzaG91bGQgYmUgbnVsbCI7CiAgICB9CiAgfQoKICBGdW5jdGlvbk5vZGUgYnVpbGRGdW5jdGlvbk5vZGUoCiAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnksCiAgICAgIFVucmVzb2x2ZWRUeXBlIHJldHVyblR5cGUsCiAgICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVBhcmFtZXRlcnMsCiAgICAgIEFzeW5jTWFya2VyIGFzeW5jTW9kaWZpZXIsCiAgICAgIFN0YXRlbWVudCBib2R5LAogICAgICBpbnQgZmlsZUVuZE9mZnNldCkgewogICAgRnVuY3Rpb25UeXBlIHR5cGUgPQogICAgICAgIHRvRnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIHR5cGVQYXJhbWV0ZXJzKS5idWlsZGVyLmJ1aWxkKGxpYnJhcnkpOwogICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBwb3NpdGlvbmFsUGFyYW1ldGVycyA9IDxWYXJpYWJsZURlY2xhcmF0aW9uPltdOwogICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBuYW1lZFBhcmFtZXRlcnMgPSA8VmFyaWFibGVEZWNsYXJhdGlvbj5bXTsKICAgIGlmIChwYXJhbWV0ZXJzICE9IG51bGwpIHsKICAgICAgZm9yIChGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIHBhcmFtZXRlciBpbiBwYXJhbWV0ZXJzKSB7CiAgICAgICAgaWYgKHBhcmFtZXRlci5pc05hbWVkKSB7CiAgICAgICAgICBuYW1lZFBhcmFtZXRlcnMuYWRkKHBhcmFtZXRlci50YXJnZXQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVycy5hZGQocGFyYW1ldGVyLnRhcmdldCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIG5hbWVkUGFyYW1ldGVycy5zb3J0KChWYXJpYWJsZURlY2xhcmF0aW9uIGEsIFZhcmlhYmxlRGVjbGFyYXRpb24gYikgewogICAgICAgIHJldHVybiBhLm5hbWUuY29tcGFyZVRvKGIubmFtZSk7CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIG5ldyBGdW5jdGlvbk5vZGVKdWRnbWVudChib2R5LAogICAgICAgIHR5cGVQYXJhbWV0ZXJzOiB0eXBlLnR5cGVQYXJhbWV0ZXJzLAogICAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzOiBwb3NpdGlvbmFsUGFyYW1ldGVycywKICAgICAgICBuYW1lZFBhcmFtZXRlcnM6IG5hbWVkUGFyYW1ldGVycywKICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50OiB0eXBlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICAgICAgcmV0dXJuVHlwZTogdHlwZS5yZXR1cm5UeXBlLAogICAgICAgIGFzeW5jTWFya2VyOiBhc3luY01vZGlmaWVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0CiAgICAgIC4uZmlsZUVuZE9mZnNldCA9IGZpbGVFbmRPZmZzZXQ7CiAgfQoKICBVbnJlc29sdmVkVHlwZSB0b0Z1bmN0aW9uVHlwZShVbnJlc29sdmVkVHlwZSByZXR1cm5UeXBlLAogICAgICBbTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlUGFyYW1ldGVyc10pIHsKICAgIHJldHVybiBuZXcgVW5yZXNvbHZlZFR5cGUoCiAgICAgICAgbmV3IEZ1bmN0aW9uVHlwZUJ1aWxkZXIoCiAgICAgICAgICAgIHJldHVyblR5cGU/LmJ1aWxkZXIsIHR5cGVQYXJhbWV0ZXJzLCBwYXJhbWV0ZXJzKSwKICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgIHVyaSk7CiAgfQoKICBTY29wZSBjb21wdXRlRm9ybWFsUGFyYW1ldGVyU2NvcGUoCiAgICAgIFNjb3BlIHBhcmVudCwgQnVpbGRlciBkZWNsYXJhdGlvbiwgRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIpIHsKICAgIGlmIChwYXJhbWV0ZXJzID09IG51bGwpIHJldHVybiBwYXJlbnQ7CiAgICBhc3NlcnQocGFyYW1ldGVycy5pc05vdEVtcHR5KTsKICAgIE1hcDxTdHJpbmcsIEJ1aWxkZXI+IGxvY2FsID0gPFN0cmluZywgQnVpbGRlcj57fTsKCiAgICBmb3IgKEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgcGFyYW1ldGVyIGluIHBhcmFtZXRlcnMpIHsKICAgICAgQnVpbGRlciBleGlzdGluZyA9IGxvY2FsW3BhcmFtZXRlci5uYW1lXTsKICAgICAgaWYgKGV4aXN0aW5nICE9IG51bGwpIHsKICAgICAgICBoZWxwZXIucmVwb3J0RHVwbGljYXRlZERlY2xhcmF0aW9uKAogICAgICAgICAgICBleGlzdGluZywgcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci5jaGFyT2Zmc2V0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBsb2NhbFtwYXJhbWV0ZXIubmFtZV0gPSBwYXJhbWV0ZXI7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgU2NvcGUoCiAgICAgICAgbG9jYWw6IGxvY2FsLAogICAgICAgIHBhcmVudDogcGFyZW50LAogICAgICAgIGRlYnVnTmFtZTogImZvcm1hbHMiLAogICAgICAgIGlzTW9kaWZpYWJsZTogZmFsc2UpOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICJGb3JtYWxQYXJhbWV0ZXJzKCRwYXJhbWV0ZXJzLCAkY2hhck9mZnNldCwgJHVyaSkiOwogIH0KfQoKLy8vIFJldHVybnMgYSBibG9jayBsaWtlIHRoaXM6Ci8vLwovLy8gICAgIHsKLy8vICAgICAgIHN0YXRlbWVudDsKLy8vICAgICAgIGJvZHk7Ci8vLyAgICAgfQovLy8KLy8vIElmIFtib2R5XSBpcyBhIFtCbG9ja10sIGl0J3MgcmV0dXJuZWQgd2l0aCBbc3RhdGVtZW50XSBwcmVwZW5kZWQgdG8gaXQuCkJsb2NrIGNvbWJpbmVTdGF0ZW1lbnRzKFN0YXRlbWVudCBzdGF0ZW1lbnQsIFN0YXRlbWVudCBib2R5KSB7CiAgaWYgKGJvZHkgaXMgQmxvY2spIHsKICAgIGJvZHkuc3RhdGVtZW50cy5pbnNlcnQoMCwgc3RhdGVtZW50KTsKICAgIHN0YXRlbWVudC5wYXJlbnQgPSBib2R5OwogICAgcmV0dXJuIGJvZHk7CiAgfSBlbHNlIHsKICAgIHJldHVybiBuZXcgQmxvY2tKdWRnbWVudCg8U3RhdGVtZW50PltzdGF0ZW1lbnQsIGJvZHldKQogICAgICAuLmZpbGVPZmZzZXQgPSBzdGF0ZW1lbnQuZmlsZU9mZnNldDsKICB9Cn0KClN0cmluZyBkZWJ1Z05hbWUoU3RyaW5nIGNsYXNzTmFtZSwgU3RyaW5nIG5hbWUsIFtTdHJpbmcgcHJlZml4XSkgewogIFN0cmluZyByZXN1bHQgPSBuYW1lLmlzRW1wdHkgPyBjbGFzc05hbWUgOiAiJGNsYXNzTmFtZS4kbmFtZSI7CiAgcmV0dXJuIHByZWZpeCA9PSBudWxsID8gcmVzdWx0IDogIiRwcmVmaXgucmVzdWx0IjsKfQoKLy8gVE9ETyhqb2hubml3aW50aGVyKTogVGhpcyBpcyBhIGJpdCBhZCBob2MuIENhbGwgc2l0ZXMgc2hvdWxkIGtub3cgd2hhdCBraW5kCi8vIG9mIG9iamVjdHMgY2FuIGJlIGFudGljaXBhdGVkIGFuZCBoYW5kbGUgdGhlc2UgZGlyZWN0bHkuClN0cmluZyBnZXROb2RlTmFtZShPYmplY3Qgbm9kZSkgewogIGlmIChub2RlIGlzIElkZW50aWZpZXIpIHsKICAgIHJldHVybiBub2RlLm5hbWU7CiAgfSBlbHNlIGlmIChub2RlIGlzIEJ1aWxkZXIpIHsKICAgIHJldHVybiBub2RlLmZ1bGxOYW1lRm9yRXJyb3JzOwogIH0gZWxzZSBpZiAobm9kZSBpcyBRdWFsaWZpZWROYW1lKSB7CiAgICByZXR1cm4gZmxhdHRlbk5hbWUobm9kZSwgbm9kZS5jaGFyT2Zmc2V0LCBudWxsKTsKICB9IGVsc2UgewogICAgcmV0dXJuIHVuaGFuZGxlZCgiJHtub2RlLnJ1bnRpbWVUeXBlfSIsICJnZXROb2RlTmFtZSIsIC0xLCBudWxsKTsKICB9Cn0KCkFzeW5jTWFya2VyIGFzeW5jTWFya2VyRnJvbVRva2VucyhUb2tlbiBhc3luY1Rva2VuLCBUb2tlbiBzdGFyVG9rZW4pIHsKICBpZiAoYXN5bmNUb2tlbiA9PSBudWxsIHx8IGlkZW50aWNhbChhc3luY1Rva2VuLnN0cmluZ1ZhbHVlLCAic3luYyIpKSB7CiAgICBpZiAoc3RhclRva2VuID09IG51bGwpIHsKICAgICAgcmV0dXJuIEFzeW5jTWFya2VyLlN5bmM7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoaWRlbnRpY2FsKHN0YXJUb2tlbi5zdHJpbmdWYWx1ZSwgIioiKSk7CiAgICAgIHJldHVybiBBc3luY01hcmtlci5TeW5jU3RhcjsKICAgIH0KICB9IGVsc2UgaWYgKGlkZW50aWNhbChhc3luY1Rva2VuLnN0cmluZ1ZhbHVlLCAiYXN5bmMiKSkg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ATRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2JvZHlfYnVpbGRlci5kYXJ0PnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9pbmNyZW1lbnRhbF9jb21waWxlci5kYXJ0wACcty8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmluY3JlbWVudGFsX2NvbXBpbGVyOwoKaW1wb3J0ICdkYXJ0OmFzeW5jJyBzaG93IEZ1dHVyZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYmluYXJ5L2FzdF9mcm9tX2JpbmFyeS5kYXJ0JyBzaG93IEJpbmFyeUJ1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2JpbmFyeS9hc3RfZnJvbV9iaW5hcnkuZGFydCcKICAgIHNob3cKICAgICAgICBCaW5hcnlCdWlsZGVyLAogICAgICAgIENhbm9uaWNhbE5hbWVFcnJvciwKICAgICAgICBDYW5vbmljYWxOYW1lU2RrRXJyb3IsCiAgICAgICAgSW52YWxpZEtlcm5lbFZlcnNpb25FcnJvcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnCiAgICBzaG93IENsYXNzSGllcmFyY2h5LCBDbG9zZWRXb3JsZENsYXNzSGllcmFyY2h5OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIHNob3cgQ29yZVR5cGVzOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9rZXJuZWwuZGFydCcKICAgIHNob3cKICAgICAgICBDbGFzcywKICAgICAgICBDb21wb25lbnQsCiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRXhwcmVzc2lvbiwKICAgICAgICBGdW5jdGlvbk5vZGUsCiAgICAgICAgTGlicmFyeSwKICAgICAgICBMaWJyYXJ5RGVwZW5kZW5jeSwKICAgICAgICBMaWJyYXJ5UGFydCwKICAgICAgICBOYW1lLAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBQcm9jZWR1cmVLaW5kLAogICAgICAgIFJldHVyblN0YXRlbWVudCwKICAgICAgICBTb3VyY2UsCiAgICAgICAgU3VwZXJ0eXBlLAogICAgICAgIFRyZWVOb2RlLAogICAgICAgIFR5cGVQYXJhbWV0ZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2tlcm5lbC5kYXJ0JyBhcyBrZXJuZWwgc2hvdyBDb21iaW5hdG9yOwoKaW1wb3J0ICcuLi9hcGlfcHJvdG90eXBlL2ZpbGVfc3lzdGVtLmRhcnQnIHNob3cgRmlsZVN5c3RlbUVudGl0eTsKCmltcG9ydCAnLi4vYXBpX3Byb3RvdHlwZS9pbmNyZW1lbnRhbF9rZXJuZWxfZ2VuZXJhdG9yLmRhcnQnCiAgICBzaG93IEluY3JlbWVudGFsS2VybmVsR2VuZXJhdG9yLCBpc0xlZ2FsSWRlbnRpZmllcjsKCmltcG9ydCAnLi4vYXBpX3Byb3RvdHlwZS9tZW1vcnlfZmlsZV9zeXN0ZW0uZGFydCcgc2hvdyBNZW1vcnlGaWxlU3lzdGVtOwoKaW1wb3J0ICdidWlsZGVyL2J1aWxkZXIuZGFydCcgc2hvdyBDbGFzc0J1aWxkZXIsIExpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICdidWlsZGVyX2dyYXBoLmRhcnQnIHNob3cgQnVpbGRlckdyYXBoOwoKaW1wb3J0ICdjb21iaW5hdG9yLmRhcnQnIHNob3cgQ29tYmluYXRvcjsKCmltcG9ydCAnY29tcGlsZXJfY29udGV4dC5kYXJ0JyBzaG93IENvbXBpbGVyQ29udGV4dDsKCmltcG9ydCAnZGlsbC9kaWxsX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IERpbGxMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnZGlsbC9kaWxsX3RhcmdldC5kYXJ0JyBzaG93IERpbGxUYXJnZXQ7CgppbXBvcnQgJ3V0aWwvZXJyb3JfcmVwb3J0ZXJfZmlsZV9jb3BpZXIuZGFydCcgc2hvdyBzYXZlQXNHemlwOwoKaW1wb3J0ICdmYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdwogICAgICAgIERpYWdub3N0aWNNZXNzYWdlRnJvbUpzb24sCiAgICAgICAgdGVtcGxhdGVJbml0aWFsaXplRnJvbURpbGxOb3RTZWxmQ29udGFpbmVkLAogICAgICAgIHRlbXBsYXRlSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZE5vRHVtcCwKICAgICAgICB0ZW1wbGF0ZUluaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtLAogICAgICAgIHRlbXBsYXRlSW5pdGlhbGl6ZUZyb21EaWxsVW5rbm93blByb2JsZW1Ob0R1bXA7CgppbXBvcnQgJ2h5YnJpZF9maWxlX3N5c3RlbS5kYXJ0JyBzaG93IEh5YnJpZEZpbGVTeXN0ZW07CgppbXBvcnQgJ2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0JyBzaG93IENsYXNzSGllcmFyY2h5QnVpbGRlcjsKCmltcG9ydCAna2VybmVsL2tlcm5lbF9zaGFkb3dfYXN0LmRhcnQnIHNob3cgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50OwoKaW1wb3J0ICdrZXJuZWwva2VybmVsX3RhcmdldC5kYXJ0JyBzaG93IEtlcm5lbFRhcmdldDsKCmltcG9ydCAnbGlicmFyeV9ncmFwaC5kYXJ0JyBzaG93IExpYnJhcnlHcmFwaDsKCmltcG9ydCAnbWVzc2FnZXMuZGFydCcgc2hvdyBNZXNzYWdlOwoKaW1wb3J0ICdzb3VyY2Uvc291cmNlX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZUxpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICd0aWNrZXIuZGFydCcgc2hvdyBUaWNrZXI7CgppbXBvcnQgJ3VyaV90cmFuc2xhdG9yLmRhcnQnIHNob3cgVXJpVHJhbnNsYXRvcjsKCmNsYXNzIEluY3JlbWVudGFsQ29tcGlsZXIgaW1wbGVtZW50cyBJbmNyZW1lbnRhbEtlcm5lbEdlbmVyYXRvciB7CiAgZmluYWwgQ29tcGlsZXJDb250ZXh0IGNvbnRleHQ7CgogIGZpbmFsIFRpY2tlciB0aWNrZXI7CgogIGZpbmFsIGJvb2wgb3V0bGluZU9ubHk7CiAgYm9vbCB0cmFja05lZWRlZERpbGxMaWJyYXJpZXMgPSBmYWxzZTsKICBTZXQ8TGlicmFyeT4gbmVlZGVkRGlsbExpYnJhcmllczsKCiAgU2V0PFVyaT4gaW52YWxpZGF0ZWRVcmlzID0gbmV3IFNldDxVcmk+KCk7CgogIERpbGxUYXJnZXQgZGlsbExvYWRlZERhdGE7CiAgTGlzdDxMaWJyYXJ5QnVpbGRlcj4gcGxhdGZvcm1CdWlsZGVyczsKICBNYXA8VXJpLCBMaWJyYXJ5QnVpbGRlcj4gdXNlckJ1aWxkZXJzOwogIGZpbmFsIFVyaSBpbml0aWFsaXplRnJvbURpbGxVcmk7CiAgZmluYWwgQ29tcG9uZW50IGNvbXBvbmVudFRvSW5pdGlhbGl6ZUZyb207CiAgYm9vbCBpbml0aWFsaXplZEZyb21EaWxsID0gZmFsc2U7CiAgVXJpIHByZXZpb3VzUGFja2FnZXNVcmk7CiAgTWFwPFN0cmluZywgVXJpPiBwcmV2aW91c1BhY2thZ2VzTWFwOwogIE1hcDxTdHJpbmcsIFVyaT4gY3VycmVudFBhY2thZ2VzTWFwOwogIGJvb2wgaGFzVG9DaGVja1BhY2thZ2VVcmlzID0gZmFsc2U7CiAgTWFwPFVyaSwgTGlzdDxEaWFnbm9zdGljTWVzc2FnZUZyb21Kc29uPj4gcmVtYWluaW5nQ29tcG9uZW50UHJvYmxlbXMgPQogICAgICBuZXcgTWFwPFVyaSwgTGlzdDxEaWFnbm9zdGljTWVzc2FnZUZyb21Kc29uPj4oKTsKICBMaXN0PENvbXBvbmVudD4gbW9kdWxlc1RvTG9hZDsKCiAgc3RhdGljIGZpbmFsIFVyaSBkZWJ1Z0V4cHJVcmkgPQogICAgICBuZXcgVXJpKHNjaGVtZTogIm9yZy1kYXJ0bGFuZy1kZWJ1ZyIsIHBhdGg6ICJzeW50aGV0aWNfZGVidWdfZXhwcmVzc2lvbiIpOwoKICBLZXJuZWxUYXJnZXQgdXNlckNvZGU7CgogIEluY3JlbWVudGFsQ29tcGlsZXIuZnJvbUNvbXBvbmVudCgKICAgICAgdGhpcy5jb250ZXh0LCBDb21wb25lbnQgdGhpcy5jb21wb25lbnRUb0luaXRpYWxpemVGcm9tLAogICAgICBbYm9vbCBvdXRsaW5lT25seV0pCiAgICAgIDogdGlja2VyID0gY29udGV4dC5vcHRpb25zLnRpY2tlciwKICAgICAgICBpbml0aWFsaXplRnJvbURpbGxVcmkgPSBudWxsLAogICAgICAgIHRoaXMub3V0bGluZU9ubHkgPSBvdXRsaW5lT25seSA/PyBmYWxzZTsKCiAgSW5jcmVtZW50YWxDb21waWxlcih0aGlzLmNvbnRleHQsCiAgICAgIFt0aGlzLmluaXRpYWxpemVGcm9tRGlsbFVyaSwgYm9vbCBvdXRsaW5lT25seV0pCiAgICAgIDogdGlja2VyID0gY29udGV4dC5vcHRpb25zLnRpY2tlciwKICAgICAgICBjb21wb25lbnRUb0luaXRpYWxpemVGcm9tID0gbnVsbCwKICAgICAgICB0aGlzLm91dGxpbmVPbmx5ID0gb3V0bGluZU9ubHkgPz8gZmFsc2U7CgogIEBvdmVycmlkZQogIEZ1dHVyZTxDb21wb25lbnQ+IGNvbXB1dGVEZWx0YSgKICAgICAge0xpc3Q8VXJpPiBlbnRyeVBvaW50cywgYm9vbCBmdWxsQ29tcG9uZW50OiBmYWxzZX0pIGFzeW5jIHsKICAgIHRpY2tlci5yZXNldCgpOwogICAgZW50cnlQb2ludHMgPz89IGNvbnRleHQub3B0aW9ucy5pbnB1dHM7CiAgICByZXR1cm4gY29udGV4dC5ydW5JbkNvbnRleHQ8Q29tcG9uZW50PigoQ29tcGlsZXJDb250ZXh0IGMpIGFzeW5jIHsKICAgICAgSW5jcmVtZW50YWxDb21waWxlckRhdGEgZGF0YSA9IG5ldyBJbmNyZW1lbnRhbENvbXBpbGVyRGF0YSgpOwoKICAgICAgYm9vbCBieXBhc3NDYWNoZSA9IGZhbHNlOwogICAgICBpZiAoIWlkZW50aWNhbChwcmV2aW91c1BhY2thZ2VzVXJpLCBjLm9wdGlvbnMucGFja2FnZXNVcmlSYXcpKSB7CiAgICAgICAgcHJldmlvdXNQYWNrYWdlc1VyaSA9IGMub3B0aW9ucy5wYWNrYWdlc1VyaVJhdzsKICAgICAgICBieXBhc3NDYWNoZSA9IHRydWU7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5pbnZhbGlkYXRlZFVyaXMuY29udGFpbnMoYy5vcHRpb25zLnBhY2thZ2VzVXJpKSkgewogICAgICAgIGJ5cGFzc0NhY2hlID0gdHJ1ZTsKICAgICAgfQogICAgICBoYXNUb0NoZWNrUGFja2FnZVVyaXMgPSBoYXNUb0NoZWNrUGFja2FnZVVyaXMgfHwgYnlwYXNzQ2FjaGU7CiAgICAgIFVyaVRyYW5zbGF0b3IgdXJpVHJhbnNsYXRvciA9CiAgICAgICAgICBhd2FpdCBjLm9wdGlvbnMuZ2V0VXJpVHJhbnNsYXRvcihieXBhc3NDYWNoZTogYnlwYXNzQ2FjaGUpOwogICAgICBwcmV2aW91c1BhY2thZ2VzTWFwID0gY3VycmVudFBhY2thZ2VzTWFwOwogICAgICBjdXJyZW50UGFja2FnZXNNYXAgPSB1cmlUcmFuc2xhdG9yLnBhY2thZ2VzLmFzTWFwKCk7CiAgICAgIHRpY2tlci5sb2dNcygiUmVhZCBwYWNrYWdlcyBmaWxlIik7CgogICAgICBpZiAoZGlsbExvYWRlZERhdGEgPT0gbnVsbCkgewogICAgICAgIGludCBieXRlc0xlbmd0aCA9IDA7CiAgICAgICAgaWYgKGNvbXBvbmVudFRvSW5pdGlhbGl6ZUZyb20gIT0gbnVsbCkgewogICAgICAgICAgLy8gSWYgaW5pdGlhbGl6aW5nIGZyb20gYSBjb21wb25lbnQgaXQgaGFzIHRvIGluY2x1ZGUgdGhlIHNkaywKICAgICAgICAgIC8vIHNvIHdlIGV4cGxpY2l0bHkgZG9uJ3QgbG9hZCBpdCBoZXJlLgogICAgICAgICAgaW5pdGlhbGl6ZUZyb21Db21wb25lbnQodXJpVHJhbnNsYXRvciwgYywgZGF0YSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIExpc3Q8aW50PiBzdW1tYXJ5Qnl0ZXMgPSBhd2FpdCBjLm9wdGlvbnMubG9hZFNka1N1bW1hcnlCeXRlcygpOwogICAgICAgICAgYnl0ZXNMZW5ndGggPSBwcmVwYXJlU3VtbWFyeShzdW1tYXJ5Qnl0ZXMsIHVyaVRyYW5zbGF0b3IsIGMsIGRhdGEpOwogICAgICAgICAgaWYgKGluaXRpYWxpemVGcm9tRGlsbFVyaSAhPSBudWxsKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgYnl0ZXNMZW5ndGggKz0gYXdhaXQgaW5pdGlhbGl6ZUZyb21EaWxsKHVyaVRyYW5zbGF0b3IsIGMsIGRhdGEpOwogICAgICAgICAgICB9IGNhdGNoIChlLCBzdCkgewogICAgICAgICAgICAgIC8vIFdlIG1pZ2h0IGhhdmUgbG9hZGVkIHggb3V0IG9mIHkgbGlicmFyaWVzIGludG8gdGhlIGNvbXBvbmVudC4KICAgICAgICAgICAgICAvLyBUbyBhdm9pZCBhbnkgdW5mb3Jlc2VlbiBwcm9ibGVtcyBzdGFydCBvdmVyLgogICAgICAgICAgICAgIGJ5dGVzTGVuZ3RoID0KICAgICAgICAgICAgICAgICAgcHJlcGFyZVN1bW1hcnkoc3VtbWFyeUJ5dGVzLCB1cmlUcmFuc2xhdG9yLCBjLCBkYXRhKTsKCiAgICAgICAgICAgICAgaWYgKGUgaXMgSW52YWxpZEtlcm5lbFZlcnNpb25FcnJvciB8fAogICAgICAgICAgICAgICAgICBlIGlzIFBhY2thZ2VDaGFuZ2VkRXJyb3IgfHwKICAgICAgICAgICAgICAgICAgZSBpcyBDYW5vbmljYWxOYW1lU2RrRXJyb3IpIHsKICAgICAgICAgICAgICAgIC8vIERvbid0IHJlcG9ydCBhbnkgd2FybmluZy4KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgVXJpIGd6SW5pdGlhbGl6ZWRGcm9tOwogICAgICAgICAgICAgICAgaWYgKGMub3B0aW9ucy53cml0ZUZpbGVPbkNyYXNoUmVwb3J0KSB7CiAgICAgICAgICAgICAgICAgIGd6SW5pdGlhbGl6ZWRGcm9tID0gc2F2ZUFzR3ppcCgKICAgICAgICAgICAgICAgICAgICAgIGRhdGEuaW5pdGlhbGl6YXRpb25CeXRlcywgImluaXRpYWxpemVfZnJvbS5kaWxsIik7CiAgICAgICAgICAgICAgICAgIHJlY29yZFRlbXBvcmFyeUZpbGVGb3JUZXN0aW5nKGd6SW5pdGlhbGl6ZWRGcm9tKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChlIGlzIENhbm9uaWNhbE5hbWVFcnJvcikgewogICAgICAgICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBnekluaXRpYWxpemVkRnJvbSAhPSBudWxsCiAgICAgICAgICAgICAgICAgICAgICA/IHRlbXBsYXRlSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZAogICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGluaXRpYWxpemVGcm9tRGlsbFVyaS50b1N0cmluZygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnekluaXRpYWxpemVkRnJvbSkKICAgICAgICAgICAgICAgICAgICAgIDogdGVtcGxhdGVJbml0aWFsaXplRnJvbURpbGxOb3RTZWxmQ29udGFpbmVkTm9EdW1wCiAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoaW5pdGlhbGl6ZUZyb21EaWxsVXJpLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICBkaWxsTG9hZGVkRGF0YS5sb2FkZXIKICAgICAgICAgICAgICAgICAgICAgIC5hZGRQcm9ibGVtKG1lc3NhZ2UsIFRyZWVOb2RlLm5vT2Zmc2V0LCAxLCBudWxsKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIC8vIFVua25vd24gZXJyb3I6IFJlcG9ydCBwcm9ibGVtIGFzIHN1Y2guCiAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGd6SW5pdGlhbGl6ZWRGcm9tICE9IG51bGwKICAgICAgICAgICAgICAgICAgICAgID8gdGVtcGxhdGVJbml0aWFsaXplRnJvbURpbGxVbmtub3duUHJvYmxlbS53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemVGcm9tRGlsbFVyaS50b1N0cmluZygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICIkZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIiRzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3pJbml0aWFsaXplZEZyb20pCiAgICAgICAgICAgICAgICAgICAgICA6IHRlbXBsYXRlSW5pdGlhbGl6ZUZyb21EaWxsVW5rbm93blByb2JsZW1Ob0R1bXAKICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZUZyb21EaWxsVXJpLnRvU3RyaW5nKCksICIkZSIsICIkc3QiKTsKICAgICAgICAgICAgICAgICAgZGlsbExvYWRlZERhdGEubG9hZGVyCiAgICAgICAgICAgICAgICAgICAgICAuYWRkUHJvYmxlbShtZXNzYWdlLCBUcmVlTm9kZS5ub09mZnNldCwgMSwgbnVsbCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFwcGVuZExpYnJhcmllcyhkYXRhLCBieXRlc0xlbmd0aCk7CgogICAgICAgIGF3YWl0IGRpbGxMb2FkZWREYXRhLmJ1aWxkT3V0bGluZXMoKTsKICAgICAgICB1c2VyQnVpbGRlcnMgPSA8VXJpLCBMaWJyYXJ5QnVpbGRlcj57fTsKICAgICAgICBwbGF0Zm9ybUJ1aWxkZXJzID0gPExpYnJhcnlCdWlsZGVyPltdOwogICAgICAgIGRpbGxMb2FkZWREYXRhLmxvYWRlci5idWlsZGVycy5mb3JFYWNoKCh1cmksIGJ1aWxkZXIpIHsKICAgICAgICAgIGlmIChidWlsZGVyLnVyaS5zY2hlbWUgPT0gImRhcnQiKSB7CiAgICAgICAgICAgIHBsYXRmb3JtQnVpbGRlcnMuYWRkKGJ1aWxkZXIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdXNlckJ1aWxkZXJzW3VyaV0gPSBidWlsZGVyOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGlmICh1c2VyQnVpbGRlcnMuaXNFbXB0eSkgdXNlckJ1aWxkZXJzID0gbnVsbDsKICAgICAgfQogICAgICBkYXRhLmluaXRpYWxpemF0aW9uQnl0ZXMgPSBudWxsOwoKICAgICAgU2V0PFVyaT4gaW52YWxpZGF0ZWRVcmlzID0gdGhpcy5pbnZhbGlkYXRlZFVyaXMudG9TZXQoKTsKCiAgICAgIGludmFsaWRhdGVOb3RLZXB0VXNlckJ1aWxkZXJzKGludmFsaWRhdGVkVXJpcyk7CgogICAgICBDbGFzc0hpZXJhcmNoeSBoaWVyYXJjaHkgPSB1c2VyQ29kZT8ubG9hZGVyPy5oaWVyYXJjaHk7CiAgICAgIFNldDxMaWJyYXJ5QnVpbGRlcj4gbm90UmV1c2VkTGlicmFyaWVzID0gbmV3IFNldDxMaWJyYXJ5QnVpbGRlcj4oKTsKICAgICAgTGlzdDxMaWJyYXJ5QnVpbGRlcj4gcmV1c2VkTGlicmFyaWVzID0gY29tcHV0ZVJldXNlZExpYnJhcmllcygKICAgICAgICAgIGludmFsaWRhdGVkVXJpcywgdXJpVHJhbnNsYXRvciwKICAgICAgICAgIG5vdFJldXNlZDogbm90UmV1c2VkTGlicmFyaWVzKTsKCiAgICAgIGJvb2wgcmVtb3ZlZERpbGxCdWlsZGVycyA9IGZhbHNlOwogICAgICBmb3IgKExpYnJhcnlCdWlsZGVyIGJ1aWxkZXIgaW4gbm90UmV1c2VkTGlicmFyaWVzKSB7CiAgICAgICAgQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQudXJpVG9Tb3VyY2UucmVtb3ZlKGJ1aWxkZXIuZmlsZVVyaSk7CgogICAgICAgIExpYnJhcnlCdWlsZGVyIGRpbGxCdWlsZGVyID0KICAgICAgICAgICAgZGlsbExvYWRlZERhdGEubG9hZGVyLmJ1aWxkZXJzLnJlbW92ZShidWlsZGVyLnVyaSk7CiAgICAgICAgaWYgKGRpbGxCdWlsZGVyICE9IG51bGwpIHsKICAgICAgICAgIHJlbW92ZWREaWxsQnVpbGRlcnMgPSB0cnVlOwogICAgICAgICAgdXNlckJ1aWxkZXJzPy5yZW1vdmUoYnVpbGRlci51cmkpOwogICAgICAgIH0KCiAgICAgICAgLy8gUmVtb3ZlIGNvbXBvbmVudCBwcm9ibGVtcyBmb3IgbGlicmFyaWVzIHdlIGRvbid0IHJldXNlLgogICAgICAgIGlmIChyZW1haW5pbmdDb21wb25lbnRQcm9ibGVtcy5pc05vdEVtcHR5KSB7CiAgICAgICAgICBMaWJyYXJ5IGxpYiA9IGJ1aWxkZXIubGlicmFyeTsKICAgICAgICAgIHJlbW92ZUxpYnJhcnlGcm9tUmVtYWluaW5nQ29tcG9uZW50UHJvYmxlbXMobGliLCB1cmlUcmFuc2xhdG9yKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGlmIChyZW1vdmVkRGlsbEJ1aWxkZXJzKSB7CiAgICAgICAgZGlsbExvYWRlZERhdGEubG9hZGVyLmxpYnJhcmllcy5jbGVhcigpOwogICAgICAgIGZvciAoTGlicmFyeUJ1aWxkZXIgYnVpbGRlciBpbiBkaWxsTG9hZGVkRGF0YS5sb2FkZXIuYnVpbGRlcnMudmFsdWVzKSB7CiAgICAgICAgICBkaWxsTG9hZGVkRGF0YS5sb2FkZXIubGlicmFyaWVzLmFkZChidWlsZGVyLmxpYnJhcnkpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgaWYgKGhhc1RvQ2hlY2tQYWNrYWdlVXJpcykgewogICAgICAgIC8vIFRoZSBwYWNrYWdlIGZpbGUgd2FzIGNoYW5nZWQuCiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBkaWxsIGxvYWRlciBpcyBvbiB0aGUgc2FtZSBwYWdlLgogICAgICAgIERpbGxUYXJnZXQgb2xkRGlsbExvYWRlZERhdGEgPSBkaWxsTG9hZGVkRGF0YTsKICAgICAgICBkaWxsTG9hZGVkRGF0YSA9CiAgICAgICAgICAgIG5ldyBEaWxsVGFyZ2V0KHRpY2tlciwgdXJpVHJhbnNsYXRvciwgYy5vcHRpb25zLnRhcmdldCk7CiAgICAgICAgZm9yIChEaWxsTGlicmFyeUJ1aWxkZXIgbGlicmFyeQogICAgICAgICAgICBpbiBvbGREaWxsTG9hZGVkRGF0YS5sb2FkZXIuYnVpbGRlcnMudmFsdWVzKSB7CiAgICAgICAgICBsaWJyYXJ5LmxvYWRlciA9IGRpbGxMb2FkZWREYXRhLmxvYWRlcjsKICAgICAgICAgIGRpbGxMb2FkZWREYXRhLmxvYWRlci5idWlsZGVyc1tsaWJyYXJ5LnVyaV0gPSBsaWJyYXJ5OwogICAgICAgICAgaWYgKGxpYnJhcnkudXJpLnNjaGVtZSA9PSAiZGFydCIgJiYgbGlicmFyeS51cmkucGF0aCA9PSAiY29yZSIpIHsKICAgICAgICAgICAgZGlsbExvYWRlZERhdGEubG9hZGVyLmNvcmVMaWJyYXJ5ID0gbGlicmFyeTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZGlsbExvYWRlZERhdGEubG9hZGVyLmZpcnN0ID0gb2xkRGlsbExvYWRlZERhdGEubG9hZGVyLmZpcnN0OwogICAgICAgIGRpbGxMb2FkZWREYXRhLmxvYWRlci5saWJyYXJpZXMKICAgICAgICAgICAgLmFkZEFsbChvbGREaWxsTG9hZGVkRGF0YS5sb2FkZXIubGlicmFyaWVzKTsKICAgICAgfQoKICAgICAgaWYgKGhpZXJhcmNoeSAhPSBudWxsKSB7CiAgICAgICAgTGlzdDxMaWJyYXJ5PiByZW1vdmVkTGlicmFyaWVzID0gbmV3IExpc3Q8TGlicmFyeT4oKTsKICAgICAgICBmb3IgKExpYnJhcnlCdWlsZGVyIGJ1aWxkZXIgaW4gbm90UmV1c2VkTGlicmFyaWVzKSB7CiAgICAgICAgICBMaWJyYXJ5IGxpYiA9IGJ1aWxkZXIubGlicmFyeTsKICAgICAgICAgIHJlbW92ZWRMaWJyYXJpZXMuYWRkKGxpYik7CiAgICAgICAgfQogICAgICAgIGhpZXJhcmNoeS5hcHBseVRyZWVDaGFuZ2VzKHJlbW92ZWRMaWJyYXJpZXMsIGNvbnN0IFtdKTsKICAgICAgfQogICAgICBub3RSZXVzZWRMaWJyYXJpZXMgPSBudWxsOwoKICAgICAgaWYgKHVzZXJDb2RlICE9IG51bGwpIHsKICAgICAgICB0aWNrZXIubG9nTXMoIkRlY2lkZWQgdG8gcmV1c2UgJHtyZXVzZWRMaWJyYXJpZXMubGVuZ3RofSIKICAgICAgICAgICAgIiBvZiAke3VzZXJDb2RlLmxvYWRlci5idWlsZGVycy5sZW5ndGh9IGxpYnJhcmllcyIpOwogICAgICB9CgogICAgICBhd2FpdCBsb2FkRW5zdXJlTG9hZGVkQ29tcG9uZW50cyhyZXVzZWRMaWJyYXJpZXMpOwoKICAgICAgS2VybmVsVGFyZ2V0IHVzZXJDb2RlT2xkID0gdXNlckNvZGU7CiAgICAgIHVzZXJDb2RlID0gbmV3IEtlcm5lbFRhcmdldCgKICAgICAgICAgIG5ldyBIeWJyaWRGaWxlU3lzdGVtKAogICAgICAgICAgICAgIG5ldyBNZW1vcnlGaWxlU3lzdGVtKAogICAgICAgICAgICAgICAgICBuZXcgVXJpKHNjaGVtZTogIm9yZy1kYXJ0bGFuZy1kZWJ1ZyIsIHBhdGg6ICIvIikpLAogICAgICAgICAgICAgIGMuZmlsZVN5c3RlbSksCiAgICAgICAgICBmYWxzZSwKICAgICAgICAgIGRpbGxMb2FkZWREYXRhLAogICAgICAgICAgdXJpVHJhbnNsYXRvcik7CiAgICAgIHVzZXJDb2RlLmxvYWRlci5oaWVyYXJjaHkgPSBoaWVyYXJjaHk7CgogICAgICBpZiAodHJhY2tOZWVkZWREaWxsTGlicmFyaWVzKSB7CiAgICAgICAgLy8gUmVzZXQgZGlsbCBsb2FkZXJzIGFuZCBrZXJuZWwgY2xhc3MgaGllcmFyY2h5LgogICAgICAgIGZvciAoTGlicmFyeUJ1aWxkZXIgYnVpbGRlciBpbiBkaWxsTG9hZGVkRGF0YS5sb2FkZXIuYnVpbGRlcnMudmFsdWVzKSB7CiAgICAgICAgICBpZiAoYnVpbGRlciBpcyBEaWxsTGlicmFyeUJ1aWxkZXIpIHsKICAgICAgICAgICAgYnVpbGRlci5pc0J1aWx0QW5kTWFya2VkID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaGllcmFyY2h5IGlzIENsb3NlZFdvcmxkQ2xhc3NIaWVyYXJjaHkpIHsKICAgICAgICAgIGhpZXJhcmNoeS5yZXNldFVzZWQoKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGZvciAoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSBpbiByZXVzZWRMaWJyYXJpZXMpIHsKICAgICAgICB1c2VyQ29kZS5sb2FkZXIuYnVpbGRlcnNbbGlicmFyeS51cmldID0gbGlicmFyeTsKICAgICAgICBpZiAobGlicmFyeS51cmkuc2NoZW1lID09ICJkYXJ0IiAmJiBsaWJyYXJ5LnVyaS5wYXRoID09ICJjb3JlIikgewogICAgICAgICAgdXNlckNvZGUubG9hZGVyLmNvcmVMaWJyYXJ5ID0gbGlicmFyeTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGVudHJ5UG9pbnRzID0gdXNlckNvZGUuc2V0RW50cnlQb2ludHMoZW50cnlQb2ludHMpOwogICAgICBpZiAodXNlckNvZGUubG9hZGVyLmZpcnN0ID09IG51bGwgJiYKICAgICAgICAgIHVzZXJDb2RlLmxvYWRlci5idWlsZGVyc1tlbnRyeVBvaW50cy5maXJzdF0gIT0gbnVsbCkgewogICAgICAgIHVzZXJDb2RlLmxvYWRlci5maXJzdCA9IHVzZXJDb2RlLmxvYWRlci5idWlsZGVyc1tlbnRyeVBvaW50cy5maXJzdF07CiAgICAgIH0KICAgICAgQ29tcG9uZW50IGNvbXBvbmVudFdpdGhEaWxsID0gYXdhaXQgdXNlckNvZGUuYnVpbGRPdXRsaW5lcygpOwoKICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGZ1bGwgY29tcG9uZW50LiBJdCBpcyB0aGUgY29tcG9uZW50IGNvbnNpc3Rpbmcgb2YgYWxsCiAgICAgIC8vIG5ld2x5IGNvbXBpbGVkIGxpYnJhcmllcyBhbmQgYWxsIGxpYnJhcmllcyBsb2FkZWQgZnJvbSAuZGlsbCBmaWxlcyBvcgogICAgICAvLyBkaXJlY3RseSBmcm9tIGNvbXBvbmVudHMuCiAgICAgIC8vIFRlY2huaWNhbGx5LCBpdCdzIHRoZSBjb21iaW5hdGlvbiBvZiB1c2VyQ29kZS5sb2FkZXIubGlicmFyaWVzIGFuZAogICAgICAvLyBkaWxsTG9hZGVkRGF0YS5sb2FkZXIubGlicmFyaWVzLgogICAgICBpZiAoIW91dGxpbmVPbmx5KSB7CiAgICAgICAgY29tcG9uZW50V2l0aERpbGwgPQogICAgICAgICAgICBhd2FpdCB1c2VyQ29kZS5idWlsZENvbXBvbmVudCh2ZXJpZnk6IGMub3B0aW9ucy52ZXJpZnkpOwogICAgICB9CiAgICAgIGhpZXJhcmNoeSA/Pz0gdXNlckNvZGUubG9hZGVyLmhpZXJhcmNoeTsKCiAgICAgIHJlY29yZE5vbkZ1bGxDb21wb25lbnRGb3JUZXN0aW5nKGNvbXBvbmVudFdpdGhEaWxsKTsKICAgICAgaWYgKHRyYWNrTmVlZGVkRGlsbExpYnJhcmllcykgewogICAgICAgIC8vIFdoaWNoIGRpbGwgYnVpbGRlcnMgd2VyZSBidWlsdD8KICAgICAgICBuZWVkZWREaWxsTGlicmFyaWVzID0gbmV3IFNldDxMaWJyYXJ5PigpOwogICAgICAgIGZvciAoTGlicmFyeUJ1aWxkZXIgYnVpbGRlciBpbiBkaWxsTG9hZGVkRGF0YS5sb2FkZXIuYnVpbGRlcnMudmFsdWVzKSB7CiAgICAgICAgICBpZiAoYnVpbGRlciBpcyBEaWxsTGlicmFyeUJ1aWxkZXIpIHsKICAgICAgICAgICAgaWYgKGJ1aWxkZXIuaXNCdWlsdEFuZE1hcmtlZCkgewogICAgICAgICAgICAgIG5lZWRlZERpbGxMaWJyYXJpZXMuYWRkKGJ1aWxkZXIubGlicmFyeSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHVwZGF0ZU5lZWRlZERpbGxMaWJyYXJpZXNXaXRoSGllcmFyY2h5KAogICAgICAgICAgICBoaWVyYXJjaHksIHVzZXJDb2RlLmxvYWRlci5idWlsZGVySGllcmFyY2h5KTsKICAgICAgfQoKICAgICAgaWYgKGNvbXBvbmVudFdpdGhEaWxsICE9IG51bGwpIHsKICAgICAgICB0aGlzLmludmFsaWRhdGVkVXJpcy5jbGVhcigpOwogICAgICAgIGhhc1RvQ2hlY2tQYWNrYWdlVXJpcyA9IGZhbHNlOwogICAgICAgIHVzZXJDb2RlT2xkPy5sb2FkZXI/LnJlbGVhc2VBbmNpbGxhcnlSZXNvdXJjZXMoKTsKICAgICAgICB1c2VyQ29kZU9sZD8ubG9hZGVyPy5idWlsZGVycz8uY2xlYXIoKTsKICAgICAgICB1c2VyQ29kZU9sZCA9IG51bGw7CiAgICAgIH0KCiAgICAgIExpc3Q8TGlicmFyeT4gY29tcGlsZWRMaWJyYXJpZXMgPQogICAgICAgICAgbmV3IExpc3Q8TGlicmFyeT4uZnJvbSh1c2VyQ29kZS5sb2FkZXIubGlicmFyaWVzKTsKICAgICAgUHJvY2VkdXJlIG1haW5NZXRob2QgPSBjb21wb25lbnRXaXRoRGlsbCA9PSBudWxsCiAgICAgICAgICA/IGRhdGEudXNlckxvYWRlZFVyaU1haW4KICAgICAgICAgIDogY29tcG9uZW50V2l0aERpbGwubWFpbk1ldGhvZDsKCiAgICAgIExpc3Q8TGlicmFyeT4gb3V0cHV0TGlicmFyaWVzOwogICAgICBTZXQ8TGlicmFyeT4gYWxsTGlicmFyaWVzOwogICAgICBNYXA8VXJpLCBTb3VyY2U+IHVyaVRvU291cmNlID0gY29tcG9uZW50V2l0aERpbGw/LnVyaVRvU291cmNlOwogICAgICBpZiAoZGF0YS5jb21wb25lbnQgIT0gbnVsbCB8fCBmdWxsQ29tcG9uZW50KSB7CiAgICAgICAgb3V0cHV0TGlicmFyaWVzID0gY29tcHV0ZVRyYW5zaXRpdmVDbG9zdXJlKAogICAgICAgICAgICBjb21waWxlZExpYnJhcmllcywKICAgICAgICAgICAgZW50cnlQb2ludHMsCiAgICAgICAgICAgIHJldXNlZExpYnJhcmllcywKICAgICAgICAgICAgaGllcmFyY2h5LAogICAgICAgICAgICB1cmlUcmFuc2xhdG9yLAogICAgICAgICAgICB1cmlUb1NvdXJjZSk7CiAgICAgICAgYWxsTGlicmFyaWVzID0gb3V0cHV0TGlicmFyaWVzLnRvU2V0KCk7CiAgICAgICAgaWYgKCFjLm9wdGlvbnMub21pdFBsYXRmb3JtKSB7CiAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBsYXRmb3JtQnVpbGRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgTGlicmFyeSBsaWIgPSBwbGF0Zm9ybUJ1aWxkZXJzW2ldLmxpYnJhcnk7CiAgICAgICAgICAgIG91dHB1dExpYnJhcmllcy5hZGQobGliKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb3V0cHV0TGlicmFyaWVzID0gbmV3IExpc3Q8TGlicmFyeT4oKTsKICAgICAgICBhbGxMaWJyYXJpZXMgPSBjb21wdXRlVHJhbnNpdGl2ZUNsb3N1cmUoCiAgICAgICAgICAgICAgICBjb21waWxlZExpYnJhcmllcywKICAgICAgICAgICAgICAgIGVudHJ5UG9pbnRzLAogICAgICAgICAgICAgICAgcmV1c2VkTGlicmFyaWVzLAogICAgICAgICAgICAgICAgaGllcmFyY2h5LAogICAgICAgICAgICAgICAgdXJpVHJhbnNsYXRvciwKICAgICAgICAgICAgICAgIHVyaVRvU291cmNlLAogICAgICAgICAgICAgICAgb3V0cHV0TGlicmFyaWVzKQogICAgICAgICAgICAudG9TZXQoKTsKICAgICAgfQoKICAgICAgTGlzdDxTdHJpbmc+IHByb2JsZW1zQXNKc29uID0gcmVpc3N1ZUNvbXBvbmVudFByb2JsZW1zKGNvbXBvbmVudFdpdGhEaWxsKTsKICAgICAgcmVpc3N1ZUxpYnJhcnlQcm9ibGVtcyhhbGxMaWJyYXJpZXMsIGNvbXBpbGVkTGlicmFyaWVzKTsKCiAgICAgIGlmIChjb21wb25lbnRXaXRoRGlsbCA9PSBudWxsKSB7CiAgICAgICAgdXNlckNvZGUubG9hZGVyLmJ1aWxkZXJzLmNsZWFyKCk7CiAgICAgICAgdXNlckNvZGUgPSB1c2VyQ29kZU9sZDsKICAgICAgfQoKICAgICAgLy8gVGhpcyBpcyB0aGUgaW5jcmVtZW50YWwgY29tcG9uZW50LgogICAgICByZXR1cm4gY29udGV4dC5vcHRpb25zLnRhcmdldC5jb25maWd1cmVDb21wb25lbnQoCiAgICAgICAgICBuZXcgQ29tcG9uZW50KGxpYnJhcmllczogb3V0cHV0TGlicmFyaWVzLCB1cmlUb1NvdXJjZTogdXJpVG9Tb3VyY2UpKQogICAgICAgIC4ubWFpbk1ldGhvZCA9IG1haW5NZXRob2QKICAgICAgICAuLnByb2JsZW1zQXNKc29uID0gcHJvYmxlbXNBc0pzb247CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIENvcmVUeXBlcyBnZXRDb3JlVHlwZXMoKSA9PiB1c2VyQ29kZT8ubG9hZGVyPy5jb3JlVHlwZXM7CgogIEBvdmVycmlkZQogIENsYXNzSGllcmFyY2h5IGdldENsYXNzSGllcmFyY2h5KCkgPT4gdXNlckNvZGU/LmxvYWRlcj8uaGllcmFyY2h5OwoKICAvLy8gQWxsb3dzIGZvciB1cGRhdGluZyB0aGUgbGlzdCBvZiBuZWVkZWQgbGlicmFyaWVzLgogIC8vLwogIC8vLyBVc2VmdWwgaWYgYSBjbGFzcyBoaWVyYXJjaHkgaGFzIGJlZW4gdXNlZCBleHRlcm5hbGx5LgogIC8vLyBDdXJyZW50bHkgdGhlcmUgYXJlIHR3byBkaWZmZXJlbnQgY2xhc3MgaGllcmFyY2hpZXMgd2hpY2ggaXMgdW5mb3J0dW5hdGUuCiAgLy8vIEZvciBub3cgdGhpcyBtZXRob2QgYWxsb3dzIHRoZSAnQ2xhc3NIaWVyYXJjaHlCdWlsZGVyJyB0byBiZSBudWxsLgogIC8vLwogIC8vLyBUT0RPKGplbnNqLENGRSBpbiBnZW5lcmFsKTogRXZlbnR1YWxseSB3ZSBzaG91bGQgZ2V0IHRvIGEgcG9pbnQgd2hlcmUgd2UKICAvLy8gb25seSBoYXZlIG9uZSBjbGFzcyBoaWVyYXJjaHkuCiAgLy8vIFRPRE8oamVuc2opOiBUaGlzIGNvdWxkIHByb2JhYmx5IGJlIGEgdXRpbGl0eSBtZXRob2Qgc29tZXdoZXJlIGluc3RlYWQKICAvLy8gKHRob3VnaCBoYW5kbGluZyBvZiB0aGUgY2FzZSB3aGVyZSBhbGwgYmV0cyBhcmUgb2ZmIHNob3VsZCBwcm9iYWJseSBzdGlsbAogIC8vLyBsaXZlIGxvY2FsbHkpLgogIHZvaWQgdXBkYXRlTmVlZGVkRGlsbExpYnJhcmllc1dpdGhIaWVyYXJjaHkoCiAgICAgIENsYXNzSGllcmFyY2h5IGhpZXJhcmNoeSwgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGJ1aWxkZXJIaWVyYXJjaHkpIHsKICAgIGlmIChoaWVyYXJjaHkgaXMgQ2xvc2VkV29ybGRDbGFzc0hpZXJhcmNoeSAmJiAhaGllcmFyY2h5LmFsbEJldHNPZmYpIHsKICAgICAgbmVlZGVkRGlsbExpYnJhcmllcyA/Pz0gbmV3IFNldDxMaWJyYXJ5PigpOwogICAgICBTZXQ8Q2xhc3M+IGNsYXNzZXMgPSBuZXcgU2V0PENsYXNzPigpOwogICAgICBMaXN0PENsYXNzPiB3b3JrbGlzdCA9IG5ldyBMaXN0PENsYXNzPigpOwogICAgICAvLyBHZXQgYWxsIGNsYXNzZXMgdG91Y2hlZCBieSBrZXJuZWwgY2xhc3MgaGllcmFyY2h5LgogICAgICBMaXN0PENsYXNzPiB1c2VkQ2xhc3NlcyA9IGhpZXJhcmNoeS5nZXRVc2VkQ2xhc3NlcygpOwogICAgICB3b3JrbGlzdC5hZGRBbGwodXNlZENsYXNzZXMpOwogICAgICBjbGFzc2VzLmFkZEFsbCh1c2VkQ2xhc3Nlcyk7CgogICAgICAvLyBHZXQgYWxsIGNsYXNzZXMgdG91Y2hlZCBieSBmYXN0YSBjbGFzcyBoaWVyYXJjaHkuCiAgICAgIGlmIChidWlsZGVySGllcmFyY2h5ICE9IG51bGwpIHsKICAgICAgICBmb3IgKENsYXNzIGMgaW4gYnVpbGRlckhpZXJhcmNoeS5ub2Rlcy5rZXlzKSB7CiAgICAgICAgICBpZiAoY2xhc3Nlcy5hZGQoYykpIHdvcmtsaXN0LmFkZChjKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIEdldCBhbGwgc3VwZXJzIGV0Yy4KICAgICAgd2hpbGUgKHdvcmtsaXN0LmlzTm90RW1wdHkpIHsKICAgICAgICBDbGFzcyBjID0gd29ya2xpc3QucmVtb3ZlTGFzdCgpOwogICAgICAgIGZvciAoU3VwZXJ0eXBlIHN1cGVydHlwZSBpbiBjLmltcGxlbWVudGVkVHlwZXMpIHsKICAgICAgICAgIGlmIChjbGFzc2VzLmFkZChzdXBlcnR5cGUuY2xhc3NOb2RlKSkgewogICAgICAgICAgICB3b3JrbGlzdC5hZGQoc3VwZXJ0eXBlLmNsYXNzTm9kZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChjLm1peGVkSW5UeXBlICE9IG51bGwpIHsKICAgICAgICAgIGlmIChjbGFzc2VzLmFkZChjLm1peGVkSW5UeXBlLmNsYXNzTm9kZSkpIHsKICAgICAgICAgICAgd29ya2xpc3QuYWRkKGMubWl4ZWRJblR5cGUuY2xhc3NOb2RlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGMuc3VwZXJ0eXBlICE9IG51bGwpIHsKICAgICAgICAgIGlmIChjbGFzc2VzLmFkZChjLnN1cGVydHlwZS5jbGFzc05vZGUpKSB7CiAgICAgICAgICAgIHdvcmtsaXN0LmFkZChjLnN1cGVydHlwZS5jbGFzc05vZGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gQWRkIGFueSBsaWJyYXJpZXMgdGhhdCB3YXMgdXNlZCBvciB3YXMgaW4gdGhlICJwYXJlbnQtY2hhaW4iIG9mIGEKICAgICAgLy8gdXNlZCBjbGFzcy4KICAgICAgZm9yIChDbGFzcyBjIGluIGNsYXNzZXMpIHsKICAgICAgICBMaWJyYXJ5IGxpYnJhcnkgPSBjLmVuY2xvc2luZ0xpYnJhcnk7CiAgICAgICAgLy8gT25seSBhZGQgaWYgbG9hZGVkIGZyb20gYSBkaWxsIGZpbGUuCiAgICAgICAgaWYgKGRpbGxMb2FkZWREYXRhLmxvYWRlci5idWlsZGVycy5jb250YWluc0tleShsaWJyYXJ5LmltcG9ydFVyaSkpIHsKICAgICAgICAgIG5lZWRlZERpbGxMaWJyYXJpZXMuYWRkKGxpYnJhcnkpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgLy8gQ2Fubm90IHRyYWNrIGluIG90aGVyIGtlcm5lbCBjbGFzcyBoaWVyYXJjaGllcyBvcgogICAgICAvLyBpZiBhbGwgYmV0cyBhcmUgb2ZmOiBBZGQgZXZlcnl0aGluZy4KICAgICAgbmVlZGVkRGlsbExpYnJhcmllcyA9IG5ldyBTZXQ8TGlicmFyeT4oKTsKICAgICAgZm9yIChMaWJyYXJ5QnVpbGRlciBidWlsZGVyIGluIGRpbGxMb2FkZWREYXRhLmxvYWRlci5idWlsZGVycy52YWx1ZXMpIHsKICAgICAgICBpZiAoYnVpbGRlciBpcyBEaWxsTGlicmFyeUJ1aWxkZXIpIHsKICAgICAgICAgIG5lZWRlZERpbGxMaWJyYXJpZXMuYWRkKGJ1aWxkZXIubGlicmFyeSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICAvLy8gSW50ZXJuYWwgbWV0aG9kLgogIHZvaWQgaW52YWxpZGF0ZU5vdEtlcHRVc2VyQnVpbGRlcnMoU2V0PFVyaT4gaW52YWxpZGF0ZWRVcmlzKSB7CiAgICBpZiAobW9kdWxlc1RvTG9hZCAhPSBudWxsICYmIHVzZXJCdWlsZGVycyAhPSBudWxsKSB7CiAgICAgIFNldDxMaWJyYXJ5PiBsb2FkZWROb3RLZXB0ID0gbmV3IFNldDxMaWJyYXJ5PigpOwogICAgICBmb3IgKExpYnJhcnlCdWlsZGVyIGJ1aWxkZXIgaW4gdXNlckJ1aWxkZXJzLnZhbHVlcykgewogICAgICAgIGxvYWRlZE5vdEtlcHQuYWRkKGJ1aWxkZXIubGlicmFyeSk7CiAgICAgIH0KICAgICAgZm9yIChDb21wb25lbnQgbW9kdWxlIGluIG1vZHVsZXNUb0xvYWQpIHsKICAgICAgICBsb2FkZWROb3RLZXB0LnJlbW92ZUFsbChtb2R1bGUubGlicmFyaWVzKTsKICAgICAgfQogICAgICBmb3IgKExpYnJhcnkgbGliIGluIGxvYWRlZE5vdEtlcHQpIHsKICAgICAgICBpbnZhbGlkYXRlZFVyaXMuYWRkKGxpYi5pbXBvcnRVcmkpOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gSW50ZXJuYWwgbWV0aG9kLgogIEZ1dHVyZTx2b2lkPiBsb2FkRW5zdXJlTG9hZGVkQ29tcG9uZW50cygKICAgICAgTGlzdDxMaWJyYXJ5QnVpbGRlcj4gcmV1c2VkTGlicmFyaWVzKSBhc3luYyB7CiAgICBpZiAobW9kdWxlc1RvTG9hZCAhPSBudWxsKSB7CiAgICAgIGJvb2wgbG9hZGVkQW55dGhpbmcgPSBmYWxzZTsKICAgICAgZm9yIChDb21wb25lbnQgbW9kdWxlIGluIG1vZHVsZXNUb0xvYWQpIHsKICAgICAgICBib29sIHVzZWRDb21wb25lbnQgPSBmYWxzZTsKICAgICAgICBmb3IgKExpYnJhcnkgbGliIGluIG1vZHVsZS5saWJyYXJpZXMpIHsKICAgICAgICAgIGlmICghZGlsbExvYWRlZERhdGEubG9hZGVyLmJ1aWxkZXJzLmNvbnRhaW5zS2V5KGxpYi5pbXBvcnRVcmkpKSB7CiAgICAgICAgICAgIGRpbGxMb2FkZWREYXRhLmxvYWRlci5saWJyYXJpZXMuYWRkKGxpYik7CiAgICAgICAgICAgIGRpbGxMb2FkZWREYXRhLmFkZExpYnJhcnkobGliKTsKICAgICAgICAgICAgcmV1c2VkTGlicmFyaWVzLmFkZChkaWxsTG9hZGVkRGF0YS5sb2FkZXIucmVhZChsaWIuaW1wb3J0VXJpLCAtMSkpOwogICAgICAgICAgICB1c2VkQ29tcG9uZW50ID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHVzZWRDb21wb25lbnQpIHsKICAgICAgICAgIGRpbGxMb2FkZWREYXRhLnVyaVRvU291cmNlLmFkZEFsbChtb2R1bGUudXJpVG9Tb3VyY2UpOwogICAgICAgICAgbG9hZGVkQW55dGhpbmcgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAobG9hZGVkQW55dGhpbmcpIHsKICAgICAgICBhd2FpdCBkaWxsTG9hZGVkRGF0YS5idWlsZE91dGxpbmVzKCk7CiAgICAgICAgdXNlckJ1aWxkZXJzID0gPFVyaSwgTGlicmFyeUJ1aWxkZXI+e307CiAgICAgICAgcGxhdGZvcm1CdWlsZGVycyA9IDxMaWJyYXJ5QnVpbGRlcj5bXTsKICAgICAgICBkaWxsTG9hZGVkRGF0YS5sb2FkZXIuYnVpbGRlcnMuZm9yRWFjaCgodXJpLCBidWlsZGVyKSB7CiAgICAgICAgICBpZiAoYnVpbGRlci51cmkuc2NoZW1lID09ICJkYXJ0IikgewogICAgICAgICAgICBwbGF0Zm9ybUJ1aWxkZXJzLmFkZChidWlsZGVyKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHVzZXJCdWlsZGVyc1t1cmldID0gYnVpbGRlcjsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZiAodXNlckJ1aWxkZXJzLmlzRW1wdHkpIHsKICAgICAgICAgIHVzZXJCdWlsZGVycyA9IG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICAgIG1vZHVsZXNUb0xvYWQgPSBudWxsOwogICAgfQogIH0KCiAgLy8vIEludGVybmFsIG1ldGhvZC4KICB2b2lkIHJlaXNzdWVMaWJyYXJ5UHJvYmxlbXMoCiAgICAgIFNldDxMaWJyYXJ5PiBhbGxMaWJyYXJpZXMsIExpc3Q8TGlicmFyeT4gY29tcGlsZWRMaWJyYXJpZXMpIHsKICAgIC8vIFRoZSBuZXdseS1jb21waWxlZCBsaWJyYXJpZXMgaGF2ZSBpc3N1ZWQgcHJvYmxlbXMgYWxyZWFkeS4gUmUtaXNzdWUKICAgIC8vIHByb2JsZW1zIGZvciB0aGUgbGlicmFyaWVzIHRoYXQgd2VyZW4ndCByZS1jb21waWxlZCAoaWdub3JlIGNvbXBpbGUKICAgIC8vIGV4cHJlc3Npb24gcHJvYmxlbXMpCiAgICBhbGxMaWJyYXJpZXMucmVtb3ZlQWxsKGNvbXBpbGVkTGlicmFyaWVzKTsKICAgIGZvciAoTGlicmFyeSBsaWJyYXJ5IGluIGFsbExpYnJhcmllcykgewogICAgICBpZiAobGlicmFyeS5wcm9ibGVtc0FzSnNvbj8uaXNOb3RFbXB0eSA9PSB0cnVlKSB7CiAgICAgICAgZm9yIChTdHJpbmcganNvblN0cmluZyBpbiBsaWJyYXJ5LnByb2JsZW1zQXNKc29uKSB7CiAgICAgICAgICBEaWFnbm9zdGljTWVzc2FnZUZyb21Kc29uIG1lc3NhZ2UgPQogICAgICAgICAgICAgIG5ldyBEaWFnbm9zdGljTWVzc2FnZUZyb21Kc29uLmZyb21Kc29uKGpzb25TdHJpbmcpOwogICAgICAgICAgaWYgKG1lc3NhZ2UudXJpID09IGRlYnVnRXhwclVyaSkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnRleHQub3B0aW9ucy5yZXBvcnREaWFnbm9zdGljTWVzc2FnZShtZXNzYWdlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBJbnRlcm5hbCBtZXRob2QuCiAgLy8vIFJlLWlzc3VlIHByb2JsZW1zIG9uIHRoZSBjb21wb25lbnQgYW5kIHJldHVybiB0aGUgZmlsdGVyZWQgbGlzdC4KICBMaXN0PFN0cmluZz4gcmVpc3N1ZUNvbXBvbmVudFByb2JsZW1zKENvbXBvbmVudCBjb21wb25lbnRXaXRoRGlsbCkgewogICAgLy8gVGhlc2UgcHJvYmxlbXMgaGF2ZSBhbHJlYWR5IGJlZW4gcmVwb3J0ZWQuCiAgICBTZXQ8U3RyaW5nPiBpc3N1ZWRQcm9ibGVtcyA9IG5ldyBTZXQ8U3RyaW5nPigpOwogICAgaWYgKGNvbXBvbmVudFdpdGhEaWxsPy5wcm9ibGVtc0FzSnNvbiAhPSBudWxsKSB7CiAgICAgIGlzc3VlZFByb2JsZW1zLmFkZEFsbChjb21wb25lbnRXaXRoRGlsbC5wcm9ibGVtc0FzSnNvbik7CiAgICB9CgogICAgLy8gUmVwb3J0IG9sZCBwcm9ibGVtcyB0aGF0IHdhc24ndCByZXBvcnRlZCBhZ2Fpbi4KICAgIGZvciAoTGlzdDxEaWFnbm9zdGljTWVzc2FnZUZyb21Kc29uPiBtZXNzYWdlcwogICAgICAgIGluIHJlbWFpbmluZ0NvbXBvbmVudFByb2JsZW1zLnZhbHVlcykgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgRGlhZ25vc3RpY01lc3NhZ2VGcm9tSnNvbiBtZXNzYWdlID0gbWVzc2FnZXNbaV07CiAgICAgICAgaWYgKGlzc3VlZFByb2JsZW1zLmFkZChtZXNzYWdlLnRvSnNvblN0cmluZygpKSkgewogICAgICAgICAgY29udGV4dC5vcHRpb25zLnJlcG9ydERpYWdub3N0aWNNZXNzYWdlKG1lc3NhZ2UpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIFNhdmUgYW55IG5ldyBjb21wb25lbnQtcHJvYmxlbXMuCiAgICBpZiAoY29tcG9uZW50V2l0aERpbGw/LnByb2JsZW1zQXNKc29uICE9IG51bGwpIHsKICAgICAgZm9yIChTdHJpbmcganNvblN0cmluZyBpbiBjb21wb25lbnRXaXRoRGlsbC5wcm9ibGVtc0FzSnNvbikgewogICAgICAgIERpYWdub3N0aWNNZXNzYWdlRnJvbUpzb24gbWVzc2FnZSA9CiAgICAgICAgICAgIG5ldyBEaWFnbm9zdGljTWVzc2FnZUZyb21Kc29uLmZyb21Kc29uKGpzb25TdHJpbmcpOwogICAgICAgIExpc3Q8RGlhZ25vc3RpY01lc3NhZ2VGcm9tSnNvbj4gbWVzc2FnZXMgPQogICAgICAgICAgICByZW1haW5pbmdDb21wb25lbnRQcm9ibGVtc1ttZXNzYWdlLnVyaV0gPz89CiAgICAgICAgICAgICAgICBuZXcgTGlzdDxEaWFnbm9zdGljTWVzc2FnZUZyb21Kc29uPigpOwogICAgICAgIG1lc3NhZ2VzLmFkZChtZXNzYWdlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBMaXN0PFN0cmluZz4uZnJvbShpc3N1ZWRQcm9ibGVtcyk7CiAgfQoKICAvLy8gSW50ZXJuYWwgbWV0aG9kLgogIFVyaSBnZXRQYXJ0RmlsZVVyaSgKICAgICAgVXJpIHBhcmVudEZpbGVVcmksIExpYnJhcnlQYXJ0IHBhcnQsIFVyaVRyYW5zbGF0b3IgdXJpVHJhbnNsYXRvcikgewogICAgVXJpIGZpbGVVcmkgPSBwYXJlbnRGaWxlVXJpLnJlc29sdmUocGFydC5wYXJ0VXJpKTsKICAgIGlmIChmaWxlVXJpLnNjaGVtZSA9PSAicGFja2FnZSIpIHsKICAgICAgLy8gUGFydCB3YXMgc3BlY2lmaWVkIHZpYSBwYWNrYWdlIFVSSSBhbmQgdGhlIHJlc29sdmUgYWJvdmUgdGh1cwogICAgICAvLyBkaWQgbm90IGdvIGFzIGV4cGVjdGVkLiBUcmFuc2xhdGUgdGhlIHBhY2thZ2UgVVJJIHRvIGdldCB0aGUKICAgICAgLy8gYWN0dWFsIGZpbGUgVVJJLgogICAgICBmaWxlVXJpID0gdXJpVHJhbnNsYXRvci50cmFuc2xhdGUoZmlsZVVyaSwgZmFsc2UpOwogICAgfQogICAgcmV0dXJuIGZpbGVVcmk7CiAgfQoKICAvLy8gSW50ZXJuYWwgbWV0aG9kLgogIC8vLyBDb21wdXRlIHRoZSB0cmFuc2l0aXZlIGNsb3N1cmUuCiAgLy8vCiAgLy8vIEFzIGEgc2lkZS1lZmZlY3QsIHRoaXMgYWxzbyBjbGVhbnMtdXAgbm93LXVucmVmZXJlbmNlZCBidWlsZGVycyBhcyB3ZWxsIGFzCiAgLy8vIGFueSBzYXZlZCBjb21wb25lbnQgcHJvYmxlbXMgZm9yIHN1Y2ggYnVpbGRlcnMuCiAgTGlzdDxMaWJyYXJ5PiBjb21wdXRlVHJhbnNpdGl2ZUNsb3N1cmUoCiAgICAgIExpc3Q8TGlicmFyeT4gaW5wdXRMaWJyYXJpZXMsCiAgICAgIExpc3Q8VXJpPiBlbnRyaWVzLAogICAgICBMaXN0PExpYnJhcnlCdWlsZGVyPiByZXVzZWRMaWJyYXJpZXMsCiAgICAgIENsYXNzSGllcmFyY2h5IGhpZXJhcmNoeSwKICAgICAgVXJpVHJhbnNsYXRvciB1cmlUcmFuc2xhdG9yLAogICAgICBNYXA8VXJpLCBTb3VyY2U+IHVyaVRvU291cmNlLAogICAgICBbTGlzdDxMaWJyYXJ5PiBpbnB1dExpYnJhcmllc0ZpbHRlcmVkXSkgewogICAgTGlzdDxMaWJyYXJ5PiByZXN1bHQgPSBuZXcgTGlzdDxMaWJyYXJ5PigpOwogICAgTWFwPFVyaSwgTGlicmFyeT4gbGlicmFyeU1hcCA9IDxVcmksIExpYnJhcnk+e307CiAgICBNYXA8VXJpLCBMaWJyYXJ5PiBwb3RlbnRpYWxseVJlZmVyZW5jZWRMaWJyYXJpZXMgPSA8VXJpLCBMaWJyYXJ5Pnt9OwogICAgTWFwPFVyaSwgTGlicmFyeT4gcG90ZW50aWFsbHlSZWZlcmVuY2VkSW5wdXRMaWJyYXJpZXMgPSA8VXJpLCBMaWJyYXJ5Pnt9OwogICAgZm9yIChMaWJyYXJ5IGxpYnJhcnkgaW4gaW5wdXRMaWJyYXJpZXMpIHsKICAgICAgbGlicmFyeU1hcFtsaWJyYXJ5LmltcG9ydFVyaV0gPSBsaWJyYXJ5OwogICAgICBpZiAobGlicmFyeS5pbXBvcnRVcmkuc2NoZW1lID09ICJkYXJ0IikgewogICAgICAgIHJlc3VsdC5hZGQobGlicmFyeSk7CiAgICAgICAgaW5wdXRMaWJyYXJpZXNGaWx0ZXJlZD8uYWRkKGxpYnJhcnkpOwogICAgICB9IGVsc2UgewogICAgICAgIHBvdGVudGlhbGx5UmVmZXJlbmNlZExpYnJhcmllc1tsaWJyYXJ5LmltcG9ydFVyaV0gPSBsaWJyYXJ5OwogICAgICAgIHBvdGVudGlhbGx5UmVmZXJlbmNlZElucHV0TGlicmFyaWVzW2xpYnJhcnkuaW1wb3J0VXJpXSA9IGxpYnJhcnk7CiAgICAgIH0KICAgIH0KCiAgICBMaXN0PFVyaT4gd29ya2xpc3QgPSBuZXcgTGlzdDxVcmk+KCk7CiAgICB3b3JrbGlzdC5hZGRBbGwoZW50cmllcyk7CiAgICBmb3IgKExpYnJhcnlCdWlsZGVyIGxpYnJhcnlCdWlsZGVyIGluIHJldXNlZExpYnJhcmllcykgewogICAgICBpZiAobGlicmFyeUJ1aWxkZXIudXJpLnNjaGVtZSA9PSAiZGFydCIgJiYgIWxpYnJhcnlCdWlsZGVyLmlzU3ludGhldGljKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgTGlicmFyeSBsaWIgPSBsaWJyYXJ5QnVpbGRlci5saWJyYXJ5OwogICAgICBwb3RlbnRpYWxseVJlZmVyZW5jZWRMaWJyYXJpZXNbbGlicmFyeUJ1aWxkZXIudXJpXSA9IGxpYjsKICAgICAgbGlicmFyeU1hcFtsaWJyYXJ5QnVpbGRlci51cmldID0gbGliOwogICAgfQoKICAgIExpYnJhcnlHcmFwaCBncmFwaCA9IG5ldyBMaWJyYXJ5R3JhcGgobGlicmFyeU1hcCk7CiAgICB3aGlsZSAod29ya2xpc3QuaXNOb3RFbXB0eSAmJiBwb3RlbnRpYWxseVJlZmVyZW5jZWRMaWJyYXJpZXMuaXNOb3RFbXB0eSkgewogICAgICBVcmkgdXJpID0gd29ya2xpc3QucmVtb3ZlTGFzdCgpOwogICAgICBpZiAobGlicmFyeU1hcC5jb250YWluc0tleSh1cmkpKSB7CiAgICAgICAgZm9yIChVcmkgbmVpZ2hib3IgaW4gZ3JhcGgubmVpZ2hib3JzT2YodXJpKSkgewogICAgICAgICAgd29ya2xpc3QuYWRkKG5laWdoYm9yKTsKICAgICAgICB9CiAgICAgICAgbGlicmFyeU1hcC5yZW1vdmUodXJpKTsKICAgICAgICBMaWJyYXJ5IGxpYnJhcnkgPSBwb3RlbnRpYWxseVJlZmVyZW5jZWRMaWJyYXJpZXMucmVtb3ZlKHVyaSk7CiAgICAgICAgaWYgKGxpYnJhcnkgIT0gbnVsbCkgewogICAgICAgICAgcmVzdWx0LmFkZChsaWJyYXJ5KTsKICAgICAgICAgIGlmIChwb3RlbnRpYWxseVJlZmVyZW5jZWRJbnB1dExpYnJhcmllcy5yZW1vdmUodXJpKSAhPSBudWxsKSB7CiAgICAgICAgICAgIGlucHV0TGlicmFyaWVzRmlsdGVyZWQ/LmFkZChsaWJyYXJ5KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBMaXN0PExpYnJhcnk+IHJlbW92ZWRMaWJyYXJpZXMgPSBuZXcgTGlzdDxMaWJyYXJ5PigpOwogICAgZm9yIChVcmkgdXJpIGluIHBvdGVudGlhbGx5UmVmZXJlbmNlZExpYnJhcmllcy5rZXlzKSB7CiAgICAgIGlmICh1cmkuc2NoZW1lID09ICJwYWNrYWdlIikgY29udGludWU7CiAgICAgIExpYnJhcnlCdWlsZGVyIGJ1aWxkZXIgPSB1c2VyQ29kZS5sb2FkZXIuYnVpbGRlcnMucmVtb3ZlKHVyaSk7CiAgICAgIGlmIChidWlsZGVyICE9IG51bGwpIHsKICAgICAgICBMaWJyYXJ5IGxpYiA9IGJ1aWxkZXIubGlicmFyeTsKICAgICAgICByZW1vdmVkTGlicmFyaWVzLmFkZChsaWIpOwogICAgICAgIGRpbGxMb2FkZWREYXRhLmxvYWRlci5idWlsZGVycy5yZW1vdmUodXJpKTsKICAgICAgICBDb21waWxlckNvbnRleHQuY3VycmVudC51cmlUb1NvdXJjZS5yZW1vdmUodXJpKTsKICAgICAgICB1cmlUb1NvdXJjZS5yZW1vdmUodXJpKTsKICAgICAgICB1c2VyQnVpbGRlcnM/LnJlbW92ZSh1cmkpOwogICAgICAgIHJlbW92ZUxpYnJhcnlGcm9tUmVtYWluaW5nQ29tcG9uZW50UHJvYmxlbXMobGliLCB1cmlUcmFuc2xhdG9yKTsKICAgICAgfQogICAgfQogICAgaGllcmFyY2h5Py5hcHBseVRyZWVDaGFuZ2VzKHJlbW92ZWRMaWJyYXJpZXMsIGNvbnN0IFtdKTsKCiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIEludGVybmFsIG1ldGhvZC4KICB2b2lkIHJlbW92ZUxpYnJhcnlGcm9tUmVtYWluaW5nQ29tcG9uZW50UHJvYmxlbXMoCiAgICAgIExpYnJhcnkgbGliLCBVcmlUcmFuc2xhdG9yIHVyaVRyYW5zbGF0b3IpIHsKICAgIHJlbWFpbmluZ0NvbXBvbmVudFByb2JsZW1zLnJlbW92ZShsaWIuZmlsZVVyaSk7CiAgICAvLyBSZW1vdmUgcGFydHMgdG9vLgogICAgZm9yIChMaWJyYXJ5UGFydCBwYXJ0IGluIGxpYi5wYXJ0cykgewogICAgICBVcmkgcGFydEZpbGVVcmkgPSBnZXRQYXJ0RmlsZVVyaShsaWIuZmlsZVVyaSwgcGFydCwgdXJpVHJhbnNsYXRvcik7CiAgICAgIHJlbWFpbmluZ0NvbXBvbmVudFByb2JsZW1zLnJlbW92ZShwYXJ0RmlsZVVyaSk7CiAgICB9CiAgfQoKICAvLy8gSW50ZXJuYWwgbWV0aG9kLgogIGludCBwcmVwYXJlU3VtbWFyeShMaXN0PGludD4gc3VtbWFyeUJ5dGVzLCBVcmlUcmFuc2xhdG9yIHVyaVRyYW5zbGF0b3IsCiAgICAgIENvbXBpbGVyQ29udGV4dCBjLCBJbmNyZW1lbnRhbENvbXBpbGVyRGF0YSBkYXRhKSB7CiAgICBkaWxsTG9hZGVkRGF0YSA9IG5ldyBEaWxsVGFyZ2V0KHRpY2tlciwgdXJpVHJhbnNsYXRvciwgYy5vcHRpb25zLnRhcmdldCk7CiAgICBpbnQgYnl0ZXNMZW5ndGggPSAwOwoKICAgIGlmIChzdW1tYXJ5Qnl0ZXMgIT0gbnVsbCkgewogICAgICB0aWNrZXIubG9nTXMoIlJlYWQgJHtjLm9wdGlvbnMuc2RrU3VtbWFyeX0iKTsKICAgICAgZGF0YS5jb21wb25lbnQgPSBjLm9wdGlvbnMudGFyZ2V0LmNvbmZpZ3VyZUNvbXBvbmVudChuZXcgQ29tcG9uZW50KCkpOwogICAgICBuZXcgQmluYXJ5QnVpbGRlcihzdW1tYXJ5Qnl0ZXMsIGRpc2FibGVMYXp5UmVhZGluZzogZmFsc2UpCiAgICAgICAgICAucmVhZENvbXBvbmVudChkYXRhLmNvbXBvbmVudCk7CiAgICAgIHRpY2tlci5sb2dNcygiRGVzZXJpYWxpemVkICR7Yy5vcHRpb25zLnNka1N1bW1hcnl9Iik7CiAgICAgIGJ5dGVzTGVuZ3RoICs9IHN1bW1hcnlCeXRlcy5sZW5ndGg7CiAgICB9CgogICAgcmV0dXJuIGJ5dGVzTGVuZ3RoOwogIH0KCiAgLy8vIEludGVybmFsIG1ldGhvZC4KICAvLyBUaGlzIHByb2NlZHVyZSB3aWxsIHRyeSB0byBsb2FkIHRoZSBkaWxsIGZpbGUgYW5kIHdpbGwgY3Jhc2ggaWYgaXQgY2Fubm90LgogIEZ1dHVyZTxpbnQ+IGluaXRpYWxpemVGcm9tRGlsbChVcmlUcmFuc2xhdG9yIHVyaVRyYW5zbGF0b3IsIENvbXBpbGVyQ29udGV4dCBjLAogICAgICBJbmNyZW1lbnRhbENvbXBpbGVyRGF0YSBkYXRhKSBhc3luYyB7CiAgICBpbnQgYnl0ZXNMZW5ndGggPSAwOwogICAgRmlsZVN5c3RlbUVudGl0eSBlbnRpdHkgPQogICAgICAgIGMub3B0aW9ucy5maWxlU3lzdGVtLmVudGl0eUZvclVyaShpbml0aWFsaXplRnJvbURpbGxVcmkpOwogICAgaWYgKGF3YWl0IGVudGl0eS5leGlzdHMoKSkgewogICAgICBMaXN0PGludD4gaW5pdGlhbGl6YXRpb25CeXRlcyA9IGF3YWl0IGVudGl0eS5yZWFkQXNCeXRlcygpOwogICAgICBpZiAoaW5pdGlhbGl6YXRpb25CeXRlcyAhPSBudWxsICYmIGluaXRpYWxpemF0aW9uQnl0ZXMuaXNOb3RFbXB0eSkgewogICAgICAgIHRpY2tlci5sb2dNcygiUmVhZCAkaW5pdGlhbGl6ZUZyb21EaWxsVXJpIik7CiAgICAgICAgZGF0YS5pbml0aWFsaXphdGlvbkJ5dGVzID0gaW5pdGlhbGl6YXRpb25CeXRlczsKCiAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gb3V0cHV0IGFsbCB3ZSByZWFkIGhlcmUgc28gbGF6eSBsb2FkaW5nIGl0CiAgICAgICAgLy8gZG9lc24ndCBtYWtlIHNlbnNlLgogICAgICAgIG5ldyBCaW5hcnlCdWlsZGVyKGluaXRpYWxpemF0aW9uQnl0ZXMsIGRpc2FibGVMYXp5UmVhZGluZzogdHJ1ZSkKICAgICAgICAgICAgLnJlYWRDb21wb25lbnQoZGF0YS5jb21wb25lbnQsIGNoZWNrQ2Fub25pY2FsTmFtZXM6IHRydWUpOwoKICAgICAgICAvLyBDaGVjayB0aGUgYW55IHBhY2thZ2UtdXJscyBzdGlsbCBwb2ludCB0byB0aGUgc2FtZSBmaWxlCiAgICAgICAgLy8gKGUuZy4gdGhlIHBhY2thZ2Ugc3RpbGwgZXhpc3RzIGFuZCBoYXNuJ3QgYmVlbiB1cGRhdGVkKS4KICAgICAgICBmb3IgKExpYnJhcnkgbGliIGluIGRhdGEuY29tcG9uZW50LmxpYnJhcmllcykgewogICAgICAgICAgaWYgKGxpYi5pbXBvcnRVcmkuc2NoZW1lID09ICJwYWNrYWdlIiAmJgogICAgICAgICAgICAgIHVyaVRyYW5zbGF0b3IudHJhbnNsYXRlKGxpYi5pbXBvcnRVcmksIGZhbHNlKSAhPSBsaWIuZmlsZVVyaSkgewogICAgICAgICAgICAvLyBQYWNrYWdlIGhhcyBiZWVuIHJlbW92ZWQgb3IgdXBkYXRlZC4KICAgICAgICAgICAgLy8gVGhpcyBsaWJyYXJ5IHNob3VsZCBiZSB0aHJvd24gYXdheS4KICAgICAgICAgICAgLy8gRXZlcnl0aGluZyB0aGF0IGRlcGVuZHMgb24gaXQgc2hvdWxkIGJlIHRocm93biBhd2F5LgogICAgICAgICAgICAvLyBUT0RPKGplbnNqKTogQW55dGhpbmcgdGhhdCBkb2Vzbid0IGRlcGVuZCBvbiBpdCBjYW4gYmUga2VwdC4KICAgICAgICAgICAgLy8gRm9yIG5vdyBqdXN0IGRvbid0IGluaXRpYWxpemUgZnJvbSB0aGlzIGRpbGwuCiAgICAgICAgICAgIHRocm93IGNvbnN0IFBhY2thZ2VDaGFuZ2VkRXJyb3IoKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGluaXRpYWxpemVkRnJvbURpbGwgPSB0cnVlOwogICAgICAgIGJ5dGVzTGVuZ3RoICs9IGluaXRpYWxpemF0aW9uQnl0ZXMubGVuZ3RoOwogICAgICAgIGRhdGEudXNlckxvYWRlZFVyaU1haW4gPSBkYXRhLmNvbXBvbmVudC5tYWluTWV0aG9kOwogICAgICAgIHNhdmVDb21wb25lbnRQcm9ibGVtcyhkYXRhKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGJ5dGVzTGVuZ3RoOwogIH0KCiAgLy8vIEludGVybmFsIG1ldGhvZC4KICB2b2lkIHNhdmVDb21wb25lbnRQcm9ibGVtcyhJbmNyZW1lbnRhbENvbXBpbGVyRGF0YSBkYXRhKSB7CiAgICBpZiAoZGF0YS5jb21wb25lbnQucHJvYmxlbXNBc0pzb24gIT0gbnVsbCkgewogICAgICBmb3IgKFN0cmluZyBqc29uU3RyaW5nIGluIGRhdGEuY29tcG9uZW50LnByb2JsZW1zQXNKc29uKSB7CiAgICAgICAgRGlhZ25vc3RpY01lc3NhZ2VGcm9tSnNvbiBtZXNzYWdlID0KICAgICAgICAgICAgbmV3IERpYWdub3N0aWNNZXNzYWdlRnJvbUpzb24uZnJvbUpzb24oanNvblN0cmluZyk7CiAgICAgICAgTGlzdDxEaWFnbm9zdGljTWVzc2FnZUZyb21Kc29uPiBtZXNzYWdlcyA9CiAgICAgICAgICAgIHJlbWFpbmluZ0NvbXBvbmVudFByb2JsZW1zW21lc3NhZ2UudXJpXSA/Pz0KICAgICAgICAgICAgICAgIG5ldyBMaXN0PERpYWdub3N0aWNNZXNzYWdlRnJvbUpzb24+KCk7CiAgICAgICAgbWVzc2FnZXMuYWRkKG1lc3NhZ2UpOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gSW50ZXJuYWwgbWV0aG9kLgogIC8vIFRoaXMgcHJvY2VkdXJlIHdpbGwgc2V0IHVwIGNvbXBpbGVyIGZyb20gW2NvbXBvbmVudFRvSW5pdGlhbGl6ZUZyb21dLgogIHZvaWQgaW5pdGlhbGl6ZUZyb21Db21wb25lbnQoVXJpVHJhbnNsYXRvciB1cmlUcmFuc2xhdG9yLCBDb21waWxlckNvbnRleHQgYywKICAgICAgSW5jcmVtZW50YWxDb21waWxlckRhdGEgZGF0YSkgewogICAgdGlja2VyLmxvZ01zKCJBYm91dCB0byBpbml0aWFsaXplRnJvbUNvbXBvbmVudCIpOwoKICAgIGRpbGxMb2FkZWREYXRhID0gbmV3IERpbGxUYXJnZXQodGlja2VyLCB1cmlUcmFuc2xhdG9yLCBjLm9wdGlvbnMudGFyZ2V0KTsKICAgIGRhdGEuY29tcG9uZW50ID0gbmV3IENvbXBvbmVudCgKICAgICAgICBsaWJyYXJpZXM6IGNvbXBvbmVudFRvSW5pdGlhbGl6ZUZyb20ubGlicmFyaWVzLAogICAgICAgIHVyaVRvU291cmNlOiBjb21wb25lbnRUb0luaXRpYWxpemVGcm9tLnVyaVRvU291cmNlKQogICAgICAuLm1haW5NZXRob2QgPSBjb21wb25lbnRUb0luaXRpYWxpemVGcm9tLm1haW5NZXRob2Q7CiAgICBkYXRhLnVzZXJMb2FkZWRVcmlNYWluID0gY29tcG9uZW50VG9Jbml0aWFsaXplRnJvbS5tYWluTWV0aG9kOwogICAgc2F2ZUNvbXBvbmVudFByb2JsZW1zKGRhdGEpOwoKICAgIGJvb2wgZm91bmREYXJ0Q29yZSA9IGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkYXRhLmNvbXBvbmVudC5saWJyYXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgTGlicmFyeSBsaWJyYXJ5ID0gZGF0YS5jb21wb25lbnQubGlicmFyaWVzW2ldOwogICAgICBpZiAobGlicmFyeS5pbXBvcnRVcmkuc2NoZW1lID09ICJkYXJ0IiAmJgogICAgICAgICAgbGlicmFyeS5pbXBvcnRVcmkucGF0aCA9PSAiY29yZSIpIHsKICAgICAgICBmb3VuZERhcnRDb3JlID0gdHJ1ZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQoKICAgIGlmICghZm91bmREYXJ0Q29yZSkgewogICAgICB0aHJvdyBjb25zdCBJbml0aWFsaXplRnJvbUNvbXBvbmVudEVycm9yKCJEaWQgbm90IGZpbmQgZGFydDpjb3JlIHdoZW4gIgogICAgICAgICAgInRyaWVkIHRvIGluaXRpYWxpemUgZnJvbSBjb21wb25lbnQuIik7CiAgICB9CgogICAgdGlja2VyLmxvZ01zKCJSYW4gaW5pdGlhbGl6ZUZyb21Db21wb25lbnQiKTsKICB9CgogIC8vLyBJbnRlcm5hbCBtZXRob2QuCiAgdm9pZCBhcHBlbmRMaWJyYXJpZXMoSW5jcmVtZW50YWxDb21waWxlckRhdGEgZGF0YSwgaW50IGJ5dGVzTGVuZ3RoKSB7CiAgICBpZiAoZGF0YS5jb21wb25lbnQgIT0gbnVsbCkgewogICAgICBkaWxsTG9hZGVkRGF0YS5sb2FkZXIKICAgICAgICAgIC5hcHBlbmRMaWJyYXJpZXMoZGF0YS5jb21wb25lbnQsIGJ5dGVDb3VudDogYnl0ZXNMZW5ndGgpOwogICAgfQogICAgdGlja2VyLmxvZ01zKCJBcHBlbmRlZCBsaWJyYXJpZXMiKTsKICB9CgogIEBvdmVycmlkZQogIEZ1dHVyZTxQcm9jZWR1cmU+IGNvbXBpbGVFeHByZXNzaW9uKAogICAgICBTdHJpbmcgZXhwcmVzc2lvbiwKICAgICAgTWFwPFN0cmluZywgRGFydFR5cGU+IGRlZmluaXRpb25zLAogICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVEZWZpbml0aW9ucywKICAgICAgU3RyaW5nIHN5bnRoZXRpY1Byb2NlZHVyZU5hbWUsCiAgICAgIFVyaSBsaWJyYXJ5VXJpLAogICAgICBbU3RyaW5nIGNsYXNzTmFtZSwKICAgICAgYm9vbCBpc1N0YXRpYyA9IGZhbHNlXSkgYXN5bmMgewogICAgYXNzZXJ0KGRpbGxMb2FkZWREYXRhICE9IG51bGwgJiYgdXNlckNvZGUgIT0gbnVsbCk7CgogICAgcmV0dXJuIGF3YWl0IGNvbnRleHQucnVuSW5Db250ZXh0KChfKSBhc3luYyB7CiAgICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnlCdWlsZGVyID0KICAgICAgICAgIHVzZXJDb2RlLmxvYWRlci5yZWFkKGxpYnJhcnlVcmksIC0xLCBhY2Nlc3NvcjogdXNlckNvZGUubG9hZGVyLmZpcnN0KTsKCiAgICAgIENsYXNzIGNsczsKICAgICAgaWYgKGNsYXNzTmFtZSAhPSBudWxsKSB7CiAgICAgICAgQ2xhc3NCdWlsZGVyIGNsYXNzQnVpbGRlciA9IGxpYnJhcnlCdWlsZGVyLnNjb3BlQnVpbGRlcltjbGFzc05hbWVdOwogICAgICAgIGNscyA9IGNsYXNzQnVpbGRlcj8uY2xzOwogICAgICAgIGlmIChjbHMgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIH0KCiAgICAgIHVzZXJDb2RlLmxvYWRlci5zZWVuTWVzc2FnZXMuY2xlYXIoKTsKCiAgICAgIGZvciAoVHlwZVBhcmFtZXRlciB0eXBlUGFyYW0gaW4gdHlwZURlZmluaXRpb25zKSB7CiAgICAgICAgaWYgKCFpc0xlZ2FsSWRlbnRpZmllcih0eXBlUGFyYW0ubmFtZSkpIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGZvciAoU3RyaW5nIG5hbWUgaW4gZGVmaW5pdGlvbnMua2V5cykgewogICAgICAgIGlmICghaXNMZWdhbElkZW50aWZpZXIobmFtZSkpIHJldHVybiBudWxsOwogICAgICB9CgogICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBkZWJ1Z0xpYnJhcnkgPSBuZXcgU291cmNlTGlicmFyeUJ1aWxkZXIoCiAgICAgICAgbGlicmFyeVVyaSwKICAgICAgICBkZWJ1Z0V4cHJVcmksCiAgICAgICAgdXNlckNvZGUubG9hZGVyLAogICAgICAgIG51bGwsCiAgICAgICAgc2NvcGU6IGxpYnJhcnlCdWlsZGVyLnNjb3BlLmNyZWF0ZU5lc3RlZFNjb3BlKCJleHByZXNzaW9uIiksCiAgICAgICAgbmFtZU9yaWdpbjogbGlicmFyeUJ1aWxkZXIubGlicmFyeSwKICAgICAgKTsKICAgICAgZGVidWdMaWJyYXJ5LnNldExhbmd1YWdlVmVyc2lvbigKICAgICAgICAgIGxpYnJhcnlCdWlsZGVyLmxpYnJhcnkubGFuZ3VhZ2VWZXJzaW9uTWFqb3IsCiAgICAgICAgICBsaWJyYXJ5QnVpbGRlci5saWJyYXJ5Lmxhbmd1YWdlVmVyc2lvbk1pbm9yKTsKCiAgICAgIGlmIChsaWJyYXJ5QnVpbGRlciBpcyBEaWxsTGlicmFyeUJ1aWxkZXIpIHsKICAgICAgICBmb3IgKExpYnJhcnlEZXBlbmRlbmN5IGRlcGVuZGVuY3kKICAgICAgICAgICAgaW4gbGlicmFyeUJ1aWxkZXIubGlicmFyeS5kZXBlbmRlbmNpZXMpIHsKICAgICAgICAgIGlmICghZGVwZW5kZW5jeS5pc0ltcG9ydCkgY29udGludWU7CgogICAgICAgICAgTGlzdDxDb21iaW5hdG9yPiBjb21iaW5hdG9yczsKCiAgICAgICAgICBmb3IgKGtlcm5lbC5Db21iaW5hdG9yIGNvbWJpbmF0b3IgaW4gZGVwZW5kZW5jeS5jb21iaW5hdG9ycykgewogICAgICAgICAgICBjb21iaW5hdG9ycyA/Pz0gPENvbWJpbmF0b3I+W107CgogICAgICAgICAgICBjb21iaW5hdG9ycy5hZGQoY29tYmluYXRvci5pc1Nob3cKICAgICAgICAgICAgICAgID8gbmV3IENvbWJpbmF0b3Iuc2hvdyhjb21iaW5hdG9yLm5hbWVzLCBjb21iaW5hdG9yLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgbGlicmFyeUJ1aWxkZXIuZmlsZVVyaSkKICAgICAgICAgICAgICAgIDogbmV3IENvbWJpbmF0b3IuaGlkZShjb21iaW5hdG9yLm5hbWVzLCBjb21iaW5hdG9yLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgbGlicmFyeUJ1aWxkZXIuZmlsZVVyaSkpOwogICAgICAgICAgfQoKICAgICAgICAgIGRlYnVnTGlicmFyeS5hZGRJbXBvcnQoCiAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICBkZXBlbmRlbmN5LmltcG9ydGVkTGlicmFyeVJlZmVyZW5jZS5jYW5vbmljYWxOYW1lLm5hbWUsCiAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICBkZXBlbmRlbmN5Lm5hbWUsCiAgICAgICAgICAgICAgY29tYmluYXRvcnMsCiAgICAgICAgICAgICAgZGVwZW5kZW5jeS5pc0RlZmVycmVkLAogICAgICAgICAgICAgIC0xLAogICAgICAgICAgICAgIC0xLAogICAgICAgICAgICAgIC0xLAogICAgICAgICAgICAgIC0xKTsKICAgICAgICB9CgogICAgICAgIGRlYnVnTGlicmFyeS5hZGRJbXBvcnRzVG9TY29wZSgpOwogICAgICB9CgogICAgICBIeWJyaWRGaWxlU3lzdGVtIGhmcyA9IHVzZXJDb2RlLmZpbGVTeXN0ZW07CiAgICAgIE1lbW9yeUZpbGVTeXN0ZW0gZnMgPSBoZnMubWVtb3J5OwogICAgICBmcy5lbnRpdHlGb3JVcmkoZGVidWdFeHByVXJpKS53cml0ZUFzU3RyaW5nU3luYyhleHByZXNzaW9uKTsKCiAgICAgIEZ1bmN0aW9uTm9kZSBwYXJhbWV0ZXJzID0gbmV3IEZ1bmN0aW9uTm9kZShudWxsLAogICAgICAgICAgdHlwZVBhcmFtZXRlcnM6IHR5cGVEZWZpbml0aW9ucywKICAgICAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzOiBkZWZpbml0aW9ucy5rZXlzCiAgICAgICAgICAgICAgLm1hcCgobmFtZSkgPT4gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudChuYW1lLCAwKSkKICAgICAgICAgICAgICAudG9MaXN0KCkpOwoKICAgICAgZGVidWdMaWJyYXJ5LmJ1aWxkKHVzZXJDb2RlLmxvYWRlci5jb3JlTGlicmFyeSwgbW9kaWZ5VGFyZ2V0OiBmYWxzZSk7CiAgICAgIEV4cHJlc3Npb24gY29tcGlsZWRFeHByZXNzaW9uID0gYXdhaXQgdXNlckNvZGUubG9hZGVyLmJ1aWxkRXhwcmVzc2lvbigKICAgICAgICAgIGRlYnVnTGlicmFyeSwgY2xhc3NOYW1lLCBjbGFzc05hbWUgIT0gbnVsbCAmJiAhaXNTdGF0aWMsIHBhcmFtZXRlcnMpOwoKICAgICAgUHJvY2VkdXJlIHByb2NlZHVyZSA9IG5ldyBQcm9jZWR1cmUoCiAgICAgICAgICBuZXcgTmFtZShzeW50aGV0aWNQcm9jZWR1cmVOYW1lKSwgUHJvY2VkdXJlS2luZC5NZXRob2QsIHBhcmFtZXRlcnMsCiAgICAgICAgICBpc1N0YXRpYzogaXNTdGF0aWMpOwoKICAgICAgcGFyYW1ldGVycy5ib2R5ID0gbmV3IFJldHVyblN0YXRlbWVudChjb21waWxlZEV4cHJlc3Npb24pCiAgICAgICAgLi5wYXJlbnQgPSBwYXJhbWV0ZXJzOwoKICAgICAgcHJvY2VkdXJlLmZpbGVVcmkgPSBkZWJ1Z0xpYnJhcnkuZmlsZVVyaTsKICAgICAgcHJvY2VkdXJlLnBhcmVudCA9IGNsYXNzTmFtZSAhPSBudWxsID8gY2xzIDogbGlicmFyeUJ1aWxkZXIubGlicmFyeTsKCiAgICAgIHVzZXJDb2RlLnVyaVRvU291cmNlLnJlbW92ZShkZWJ1Z0V4cHJVcmkpOwogICAgICB1c2VyQ29kZS5sb2FkZXIuc291cmNlQnl0ZXMucmVtb3ZlKGRlYnVnRXhwclVyaSk7CgogICAgICAvLyBNYWtlIHN1cmUgdGhlIGxpYnJhcnkgaGFzIGEgY2Fub25pY2FsIG5hbWUuCiAgICAgIENvbXBvbmVudCBjID0gbmV3IENvbXBvbmVudChsaWJyYXJpZXM6IFtkZWJ1Z0xpYnJhcnkubGlicmFyeV0pOwogICAgICBjLmNvbXB1dGVDYW5vbmljYWxOYW1lcygpOwoKICAgICAgdXNlckNvZGUucnVuUHJvY2VkdXJlVHJhbnNmb3JtYXRpb25zKHByb2NlZHVyZSk7CgogICAgICByZXR1cm4gcHJvY2VkdXJlOwogICAgfSk7CiAgfQoKICAvLy8gSW50ZXJuYWwgbWV0aG9kLgogIExpc3Q8TGlicmFyeUJ1aWxkZXI+IGNvbXB1dGVSZXVzZWRMaWJyYXJpZXMoCiAgICAgIFNldDxVcmk+IGludmFsaWRhdGVkVXJpcywgVXJpVHJhbnNsYXRvciB1cmlUcmFuc2xhdG9yLAogICAgICB7U2V0PExpYnJhcnlCdWlsZGVyPiBub3RSZXVzZWR9KSB7CiAgICBMaXN0PExpYnJhcnlCdWlsZGVyPiByZXN1bHQgPSA8TGlicmFyeUJ1aWxkZXI+W107CiAgICByZXN1bHQuYWRkQWxsKHBsYXRmb3JtQnVpbGRlcnMpOwogICAgaWYgKHVzZXJDb2RlID09IG51bGwgJiYgdXNlckJ1aWxkZXJzID09IG51bGwpIHsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICAvLyBNYXBzIGFsbCBub24tcGxhdGZvcm0gTGlicmFyeUJ1aWxkZXJzIGZyb20gdGhlaXIgaW1wb3J0IFVSSS4KICAgIE1hcDxVcmksIExpYnJhcnlCdWlsZGVyPiBidWlsZGVycyA9IDxVcmksIExpYnJhcnlCdWlsZGVyPnt9OwoKICAgIC8vIEludmFsaWRhdGVkIFVSSXMgdHJhbnNsYXRlZCBiYWNrIHRvIHRoZWlyIGltcG9ydCBVUkkgKHBhY2thZ2U6LCBkYXJ0OiwKICAgIC8vIGV0Yy4pLgogICAgTGlzdDxVcmk+IGludmFsaWRhdGVkSW1wb3J0VXJpcyA9IDxVcmk+W107CgogICAgYm9vbCBpc0ludmFsaWRhdGVkKFVyaSBpbXBvcnRVcmksIFVyaSBmaWxlVXJpKSB7CiAgICAgIGlmIChpbnZhbGlkYXRlZFVyaXMuY29udGFpbnMoaW1wb3J0VXJpKSkgcmV0dXJuIHRydWU7CiAgICAgIGlmIChpbXBvcnRVcmkgIT0gZmlsZVVyaSAmJiBpbnZhbGlkYXRlZFVyaXMuY29udGFpbnMoZmlsZVVyaSkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoaGFzVG9DaGVja1BhY2thZ2VVcmlzICYmIGltcG9ydFVyaS5zY2hlbWUgPT0gInBhY2thZ2UiKSB7CiAgICAgICAgLy8gR2V0IHBhY2thZ2UgbmFtZSwgY2hlY2sgaWYgdGhlIGJhc2UgVVJJIGhhcyBjaGFuZ2VkIGZvciB0aGUgcGFja2FnZSwKICAgICAgICAvLyBpZiBpdCBoYXMsIHRyYW5zbGF0ZSB0aGUgVVJJIGFnYWluLAogICAgICAgIC8vIG90aGVyd2lzZSB0aGUgVVJJIGNhbm5vdCBoYXZlIGNoYW5nZWQuCiAgICAgICAgU3RyaW5nIHBhdGggPSBpbXBvcnRVcmkucGF0aDsKICAgICAgICBpbnQgZmlyc3RTbGFzaCA9IHBhdGguaW5kZXhPZignLycpOwogICAgICAgIFN0cmluZyBwYWNrYWdlTmFtZSA9IHBhdGguc3Vic3RyaW5nKDAsIGZpcnN0U2xhc2gpOwogICAgICAgIGlmIChwcmV2aW91c1BhY2thZ2VzTWFwID09IG51bGwgfHwKICAgICAgICAgICAgKHByZXZpb3VzUGFja2FnZXNNYXBbcGFja2FnZU5hbWVdICE9CiAgICAgICAgICAgICAgICBjdXJyZW50UGFja2FnZXNNYXBbcGFja2FnZU5hbWVdKSkgewogICAgICAgICAgVXJpIG5ld0ZpbGVVcmkgPSB1cmlUcmFuc2xhdG9yLnRyYW5zbGF0ZShpbXBvcnRVcmksIGZhbHNlKTsKICAgICAgICAgIGlmIChuZXdGaWxlVXJpICE9IGZpbGVVcmkpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChidWlsZGVyc1tpbXBvcnRVcmldPy5pc1N5bnRoZXRpYyA/PyBmYWxzZSkgcmV0dXJuIHRydWU7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBhZGRCdWlsZGVyQW5kSW52YWxpZGF0ZVVyaXMoVXJpIHVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeUJ1aWxkZXIpIHsKICAgICAgaWYgKHVyaS5zY2hlbWUgPT0gImRhcnQiICYmICFsaWJyYXJ5QnVpbGRlci5pc1N5bnRoZXRpYykgewogICAgICAgIHJlc3VsdC5hZGQobGlicmFyeUJ1aWxkZXIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBidWlsZGVyc1t1cmldID0gbGlicmFyeUJ1aWxkZXI7CiAgICAgIGlmIChpc0ludmFsaWRhdGVkKHVyaSwgbGlicmFyeUJ1aWxkZXIubGlicmFyeS5maWxlVXJpKSkgewogICAgICAgIGludmFsaWRhdGVkSW1wb3J0VXJpcy5hZGQodXJpKTsKICAgICAgfQogICAgICBpZiAobGlicmFyeUJ1aWxkZXIgaXMgU291cmNlTGlicmFyeUJ1aWxkZXIpIHsKICAgICAgICBmb3IgKExpYnJhcnlCdWlsZGVyIHBhcnQgaW4gbGlicmFyeUJ1aWxkZXIucGFydHMpIHsKICAgICAgICAgIGlmIChpc0ludmFsaWRhdGVkKHBhcnQudXJpLCBwYXJ0LmZpbGVVcmkpKSB7CiAgICAgICAgICAgIGludmFsaWRhdGVkSW1wb3J0VXJpcy5hZGQocGFydC51cmkpOwogICAgICAgICAgICBidWlsZGVyc1twYXJ0LnVyaV0gPSBwYXJ0OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChsaWJyYXJ5QnVpbGRlciBpcyBEaWxsTGlicmFyeUJ1aWxkZXIpIHsKICAgICAgICBmb3IgKExpYnJhcnlQYXJ0IHBhcnQgaW4gbGlicmFyeUJ1aWxkZXIubGlicmFyeS5wYXJ0cykgewogICAgICAgICAgVXJpIHBhcnRVcmkgPSBsaWJyYXJ5QnVpbGRlci51cmkucmVzb2x2ZShwYXJ0LnBhcnRVcmkpOwogICAgICAgICAgVXJpIGZpbGVVcmkgPSBnZXRQYXJ0RmlsZVVyaSgKICAgICAgICAgICAgICBsaWJyYXJ5QnVpbGRlci5saWJyYXJ5LmZpbGVVcmksIHBhcnQsIHVyaVRyYW5zbGF0b3IpOwoKICAgICAgICAgIGlmIChpc0ludmFsaWRhdGVkKHBhcnRVcmksIGZpbGVVcmkpKSB7CiAgICAgICAgICAgIGludmFsaWRhdGVkSW1wb3J0VXJpcy5hZGQocGFydFVyaSk7CiAgICAgICAgICAgIGJ1aWxkZXJzW3BhcnRVcmldID0gbGlicmFyeUJ1aWxkZXI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgaWYgKHVzZXJDb2RlICE9IG51bGwpIHsKICAgICAgLy8gdXNlckNvZGUgYWxyZWFkeSBjb250YWlucyB0aGUgYnVpbGRlcnMgZnJvbSB1c2VyQnVpbGRlcnMuCiAgICAgIHVzZXJDb2RlLmxvYWRlci5idWlsZGVycy5mb3JFYWNoKGFkZEJ1aWxkZXJBbmRJbnZhbGlkYXRlVXJpcyk7CiAgICB9IGVsc2UgewogICAgICAvLyB1c2VyQ29kZSB3YXMgbnVsbCBzbyB3ZSBleHBsaWNpdGx5IGhhdmUgdG8gYWRkIHRoZSBidWlsZGVycyBmcm9tCiAgICAgIC8vIHVzZXJCdWlsZGVycyAod2hpY2ggY2Fubm90IGJlIG51bGwgYXMgd2UgY2hlY2tlZCBpbml0aWFsbHkgdGhhdCBvbmUgb2YKICAgICAgLy8gdGhlbSB3YXMgbm9uLW51bGwpLgogICAgICB1c2VyQnVpbGRlcnMuZm9yRWFjaChhZGRCdWlsZGVyQW5kSW52YWxpZGF0ZVVyaXMpOwogICAgfQoKICAgIHJlY29yZEludmFsaWRhdGVkSW1wb3J0VXJpc0ZvclRlc3RpbmcoaW52YWxpZGF0ZWRJbXBvcnRVcmlzKTsKCiAgICBCdWlsZGVyR3JhcGggZ3JhcGggPSBuZXcgQnVpbGRlckdyYXBoKGJ1aWxkZXJzKTsKCiAgICAvLyBDb21wdXRlIGRpcmVjdCBkZXBlbmRlbmNpZXMgZm9yIGVhY2ggaW1wb3J0IFVSSSAodGhlIHJldmVyc2Ugb2YgdGhlCiAgICAvLyBlZGdlcyByZXR1cm5lZCBieSBgZ3JhcGgubmVpZ2hib3JzT2ZgKS4KICAgIE1hcDxVcmksIFNldDxVcmk+PiBkaXJlY3REZXBlbmRlbmNpZXMgPSA8VXJpLCBTZXQ8VXJpPj57fTsKICAgIGZvciAoVXJpIHZlcnRleCBpbiBncmFwaC52ZXJ0aWNlcykgewogICAgICBmb3IgKFVyaSBuZWlnaGJvciBpbiBncmFwaC5uZWlnaGJvcnNPZih2ZXJ0ZXgpKSB7CiAgICAgICAgKGRpcmVjdERlcGVuZGVuY2llc1tuZWlnaGJvcl0gPz89IG5ldyBTZXQ8VXJpPigpKS5hZGQodmVydGV4KTsKICAgICAgfQogICAgfQoKICAgIC8vIFJlbW92ZSBhbGwgZGVwZW5kZW5jaWVzIG9mIFtpbnZhbGlkYXRlZEltcG9ydFVyaXNdIGZyb20gYnVpbGRlcnMuCiAgICBMaXN0PFVyaT4gd29ya0xpc3QgPSBpbnZhbGlkYXRlZEltcG9ydFVyaXM7CiAgICB3aGlsZSAod29ya0xpc3QuaXNOb3RFbXB0eSkgewogICAgICBVcmkgcmVtb3ZlZCA9IHdvcmtMaXN0LnJlbW92ZUxhc3QoKTsKICAgICAgTGlicmFyeUJ1aWxkZXIgY3VycmVudCA9IGJ1aWxkZXJzLnJlbW92ZShyZW1vdmVkKTsKICAgICAgLy8gW2N1cnJlbnRdIGlzIG51bGwgaWYgdGhlIGNvcnJlc3BvbmRpbmcga2V5IChVUkkpIGhhcyBhbHJlYWR5IGJlZW4KICAgICAgLy8gcmVtb3ZlZC4KICAgICAgaWYgKGN1cnJlbnQgIT0gbnVsbCkgewogICAgICAgIFNldDxVcmk+IHMgPSBkaXJlY3REZXBlbmRlbmNpZXNbY3VycmVudC51cmldOwogICAgICAgIGlmIChjdXJyZW50LnVyaSAhPSByZW1vdmVkKSB7CiAgICAgICAgICBpZiAocyA9PSBudWxsKSB7CiAgICAgICAgICAgIHMgPSBkaXJlY3REZXBlbmRlbmNpZXNbcmVtb3ZlZF07CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzLmFkZEFsbChkaXJlY3REZXBlbmRlbmNpZXNbcmVtb3ZlZF0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAocyAhPSBudWxsKSB7CiAgICAgICAgICAvLyBbc10gaXMgbnVsbCBmb3IgbGVhdmVzLgogICAgICAgICAgZm9yIChVcmkgZGVwZW5kZW5jeSBpbiBzKSB7CiAgICAgICAgICAgIHdvcmtMaXN0LmFkZChkZXBlbmRlbmN5KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbm90UmV1c2VkPy5hZGQoY3VycmVudCk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBCdWlsZGVycyBjb250YWluIG1hcHBpbmdzIGZyb20gcGFydCB1cmkgdG8gYnVpbGRlciwgbWVhbmluZyB0aGUgc2FtZQogICAgLy8gYnVpbGRlciBjYW4gZXhpc3QgbXVsdGlwbGUgdGltZXMgaW4gdGhlIHZhbHVlcyBsaXN0LgogICAgU2V0PFVyaT4gc2VlblVyaXMgPSBuZXcgU2V0PFVyaT4oKTsKICAgIGZvciAoTGlicmFyeUJ1aWxkZXIgYnVpbGRlciBpbiBidWlsZGVycy52YWx1ZXMpIHsKICAgICAgaWYgKGJ1aWxkZXIuaXNQYXJ0KSBjb250aW51ZTsKICAgICAgLy8gVE9ETyhqZW5zai9haGUpOiBUaGlzIGxpbmUgY2FuIHByb2JhYmx5IGdvIGF3YXkgb25jZQogICAgICAvLyBodHRwczovL2RhcnQtcmV2aWV3Lmdvb2dsZXNvdXJjZS5jb20vNDc0NDIgbGFuZHMuCiAgICAgIGlmIChidWlsZGVyLmlzUGF0Y2gpIGNvbnRpbnVlOwogICAgICBpZiAoIXNlZW5VcmlzLmFkZChidWlsZGVyLnVyaSkpIGNvbnRpbnVlOwogICAgICByZXN1bHQuYWRkKGJ1aWxkZXIpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaW52YWxpZGF0ZShVcmkgdXJpKSB7CiAgICBpbnZhbGlkYXRlZFVyaXMuYWRkKHVyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGludmFsaWRhdGVBbGxTb3VyY2VzKCkgewogICAgaWYgKHVzZXJDb2RlICE9IG51bGwpIHsKICAgICAgU2V0PFVyaT4gdXJpcyA9IG5ldyBTZXQ8VXJpPi5mcm9tKHVzZXJDb2RlLmxvYWRlci5idWlsZGVycy5rZXlzKTsKICAgICAgdXJpcy5yZW1vdmVBbGwoZGlsbExvYWRlZERhdGEubG9hZGVyLmJ1aWxkZXJzLmtleXMpOwogICAgICBpbnZhbGlkYXRlZFVyaXMuYWRkQWxsKHVyaXMpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXRNb2R1bGVzVG9Mb2FkT25OZXh0Q29tcHV0ZURlbHRhKExpc3Q8Q29tcG9uZW50PiBjb21wb25lbnRzKSB7CiAgICBtb2R1bGVzVG9Mb2FkID0gY29tcG9uZW50cy50b0xpc3QoKTsKICB9CgogIC8vLyBJbnRlcm5hbCBtZXRob2QuCiAgdm9pZCByZWNvcmROb25GdWxsQ29tcG9uZW50Rm9yVGVzdGluZyhDb21wb25lbnQgY29tcG9uZW50KSB7fQoKICAvLy8gSW50ZXJuYWwgbWV0aG9kLgogIHZvaWQgcmVjb3JkSW52YWxpZGF0ZWRJbXBvcnRVcmlzRm9yVGVzdGluZyhMaXN0PFVyaT4gdXJpcykge30KCiAgLy8vIEludGVybmFsIG1ldGhvZC4KICB2b2lkIHJlY29yZFRlbXBvcmFyeUZpbGVGb3JUZXN0aW5nKFVyaSB1cmkpIHt9Cn0KCmNsYXNzIFBhY2thZ2VDaGFuZ2VkRXJyb3IgewogIGNvbnN0IFBhY2thZ2VDaGFuZ2VkRXJyb3IoKTsKfQoKY2xhc3MgSW5pdGlhbGl6ZUZyb21Db21wb25lbnRFcnJvciB7CiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CgogIGNvbnN0IEluaXRpYWxpemVGcm9tQ29tcG9uZW50RXJyb3IodGhpcy5tZXNzYWdlKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gbWVzc2FnZTsKfQoKY2xhc3MgSW5jcmVtZW50YWxDb21waWxlckRhdGEgewogIFByb2NlZHVyZSB1c2VyTG9hZGVkVXJpTWFpbiA9IG51bGw7CiAgQ29tcG9uZW50IGNvbXBvbmVudCA9IG51bGw7CiAgTGlzdDxpbnQ+IGluaXRpYWxpemF0aW9uQnl0ZXMgPSBudWxsOwp9CoRgAE5OPAEkASEBSAE0CRccHyMBLTQBOAEkCQ8TEhQWERsVDhMXGRATEhcBPwFCATw4AUkBQQEvASoBNQFBATABPwEaCSM0OjI4ATgBQAFJATYBLwElAUcBIgExAUIhARcBGikkAS0BHSkpIy0kGygnJkk3IQEiUQEZASU+GikmMQEkNikqMQEMIkIULEdEASBHOBxJHAhEJEYwOyoBJB0xSTI7EUpOLxJPHk8+HEgBNC4wLRcnODJJRBIvPkNLMUlMKEgZPD5QPCAhLUcqTihIEhAODAosAS4wL0AuKxMpDAw3CCcBPwE2AT5KRSoqASg7RQElQCMmLQoBQzUpSwoIASExUEAKCAEjKTo3GUUoOzJBTDkMCkYoOQgBHz49KSUKQAghAR5CQQgBOQErIyAkRR0RGhotASY6UC8uDAoBNiEKCAE4OUoxCggBOitBTQhEAU9PI0wqGhxFCC8BOyYrMlAvLDgODAoBMDoIAScmJzowHAgBKD03IyoBJSFFNTQfGR0XGxowJz43JgwKDy8xIx0hGx8dIRYIAVE/AScqIAgBLDhPIisIBAEMOwEMRQE4BjxQSQZPJU1QFS9KSzItMDw8JCMBOyY3LwoIAR0kKToyLwwKJTYzDAojNDEMCggBSxUhLjBNLAoIDTsuME4tNAoIBgQBF0E5NzwsCDAzCCssCAYEARcrNCEjMCQwTDYsUCIMCh1BIQoIHC4wL0AuKxMpDAwkHwoIHAYEARcfREtLHC8sODwuQi0WDDwKCAYEARdHRzI0NT8GATcyMDI5OjwKCAYBKDVELEAzODcfCAYyBAEXFko3J0dGGjkGFAQBFyYGUTYqJBksICMkMDA1SU4uLzAdLg9FSggGASoePVASCCxALAYBN08nKTciCiBGHx9JMgwKCAYBOjstRR0nIzQ5ISNJCAY9ARMEARc0MjQZKko2BgQBF0o5ThkBIDRNQSo8KgYBGAQBF1BRLBkeQiFCSzU4AUUfSUcBQ0Q4M040M0RMPS8MCgEkMzwlCAYYBAEXPTFBLEAzODcfCAYEARdLTyY2AU4kODw7QyEBIEA1MC4eDwgGARpOMgYBMQQBF0giHEQGKAQBDCcZKSslFhkmOAEyJlEBER9MISYIASwBOT0ILjMIAUQUFhkORSwJJzc4ATIqNi4BKAFJLAEuTyxPLgwBIhRGFB8bJRISEhMKASoIATIoQwE3KzFHGgFMTVABK04fAUAfATBLATE4ATVGIQE3ARgIBAEXLz0pNiU0FQYBREEBTg4vATU8RxUIRFAvMiYsPCsxNEYnGQwKCEIUBgFKQSQQCCZAKAg0PDcxJwwKOUFCKEQBMTAwDAoIBgEcQ0UNSlAdOQYBQgE1AUsvPyk4RwgGAUkwIis5SxIdNiYbLRMzDAoZJSYmDAohCAYBTDwoNiQ+OyUwGwYTBAEMHR4EAQwgHEg7JAYEAQxIKQQBF0ABF0ABFzECARwfAgElGAE0ASACASAmHigCATVwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvaW5jcmVtZW50YWxfY29tcGlsZXIuZGFydDFzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9vbGRfdG9fbmV3X2FwaS5kYXJ0jPYvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIEltcGxlbWVudGF0aW9uIG9mIHRoZSBuZXcgY29tcGlsZXIgQVBJIGluICcuLi9jb21waWxlcl9uZXcuZGFydCcgdGhyb3VnaCB0aGUKLy8vIG9sZCBjb21waWxlciBBUEkgaW4gJy4uL2NvbXBpbGVyLmRhcnQnLgoKbGlicmFyeSBjb21waWxlci5hcGkubGVnYWN5OwoKaW1wb3J0ICdkYXJ0OmFzeW5jJyBzaG93IEV2ZW50U2luaywgRnV0dXJlOwppbXBvcnQgJ2RhcnQ6Y29udmVydCcgc2hvdyB1dGY4OwoKaW1wb3J0ICcuLi9jb21waWxlci5kYXJ0JzsKaW1wb3J0ICcuLi9jb21waWxlcl9uZXcuZGFydCc7CmltcG9ydCAnaW8vc291cmNlX2ZpbGUuZGFydCc7CmltcG9ydCAnbnVsbF9jb21waWxlcl9vdXRwdXQuZGFydCcgc2hvdyBOdWxsU2luazsKCi8vLyBJbXBsZW1lbnRhdGlvbiBvZiBbQ29tcGlsZXJJbnB1dF0gdXNpbmcgYSBbQ29tcGlsZXJJbnB1dFByb3ZpZGVyXS4KY2xhc3MgTGVnYWN5Q29tcGlsZXJJbnB1dCBpbXBsZW1lbnRzIENvbXBpbGVySW5wdXQgewogIGZpbmFsIENvbXBpbGVySW5wdXRQcm92aWRlciBfaW5wdXRQcm92aWRlcjsKCiAgTGVnYWN5Q29tcGlsZXJJbnB1dCh0aGlzLl9pbnB1dFByb3ZpZGVyKTsKCiAgQG92ZXJyaWRlCiAgRnV0dXJlPElucHV0PiByZWFkRnJvbVVyaShVcmkgdXJpLCB7SW5wdXRLaW5kIGlucHV0S2luZDogSW5wdXRLaW5kLlVURjh9KSB7CiAgICAvLyBUaGUgc3dpdGNoIGhhbmRsZXMgYWxsIGVudW0gdmFsdWVzLCBidXQgbm90IG51bGwuCiAgICAvLyBpZ25vcmU6IG1pc3NpbmdfcmV0dXJuCiAgICByZXR1cm4gX2lucHV0UHJvdmlkZXIodXJpKS50aGVuKCgvKlN0cmluZ3xMaXN0PGludD4qLyBkYXRhKSB7CiAgICAgIHN3aXRjaCAoaW5wdXRLaW5kKSB7CiAgICAgICAgY2FzZSBJbnB1dEtpbmQuVVRGODoKICAgICAgICAgIFNvdXJjZUZpbGUgc291cmNlRmlsZTsKICAgICAgICAgIGlmIChkYXRhIGlzIExpc3Q8aW50PikgewogICAgICAgICAgICBzb3VyY2VGaWxlID0gbmV3IFV0ZjhCeXRlc1NvdXJjZUZpbGUodXJpLCBkYXRhKTsKICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YSBpcyBTdHJpbmcpIHsKICAgICAgICAgICAgc291cmNlRmlsZSA9IG5ldyBTdHJpbmdTb3VyY2VGaWxlLmZyb21VcmkodXJpLCBkYXRhKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93ICJFeHBlY3RlZCBhICdTdHJpbmcnIG9yIGEgJ0xpc3Q8aW50PicgZnJvbSB0aGUgaW5wdXQgIgogICAgICAgICAgICAgICAgInByb3ZpZGVyLCBidXQgZ290OiAke0Vycm9yLnNhZmVUb1N0cmluZyhkYXRhKX0uIjsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBzb3VyY2VGaWxlOwogICAgICAgIGNhc2UgSW5wdXRLaW5kLmJpbmFyeToKICAgICAgICAgIGlmIChkYXRhIGlzIFN0cmluZykgewogICAgICAgICAgICBkYXRhID0gdXRmOC5lbmNvZGUoZGF0YSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gbmV3IEJpbmFyeSh1cmksIGRhdGEpOwogICAgICB9CiAgICB9KTsKICB9Cn0KCi8vLyBJbXBsZW1lbnRhdGlvbiBvZiBbQ29tcGlsZXJEaWFnbm9zdGljc10gdXNpbmcgYSBbRGlhZ25vc3RpY0hhbmRsZXJdLgpjbGFzcyBMZWdhY3lDb21waWxlckRpYWdub3N0aWNzIGltcGxlbWVudHMgQ29tcGlsZXJEaWFnbm9zdGljcyB7CiAgZmluYWwgRGlhZ25vc3RpY0hhbmRsZXIgX2hhbmRsZXI7CgogIExlZ2FjeUNvbXBpbGVyRGlhZ25vc3RpY3ModGhpcy5faGFuZGxlcik7CgogIEBvdmVycmlkZQogIHZvaWQgcmVwb3J0KAogICAgICB2YXIgY29kZSwgVXJpIHVyaSwgaW50IGJlZ2luLCBpbnQgZW5kLCBTdHJpbmcgbWVzc2FnZSwgRGlhZ25vc3RpYyBraW5kKSB7CiAgICBfaGFuZGxlcih1cmksIGJlZ2luLCBlbmQsIG1lc3NhZ2UsIGtpbmQpOwogIH0KfQoKLy8vIEltcGxlbWVudGF0aW9uIG9mIFtDb21waWxlck91dHB1dF0gdXNpbmcgYW4gb3B0aW9uYWwKLy8vIFtDb21waWxlck91dHB1dFByb3ZpZGVyXS4KLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2hhbmdlIFB1YiB0byB1c2UgdGhlIG5ldyBpbnRlcmZhY2UgYW5kIHJlbW92ZSB0aGlzLgpjbGFzcyBMZWdhY3lDb21waWxlck91dHB1dCBpbXBsZW1lbnRzIENvbXBpbGVyT3V0cHV0IHsKICBmaW5hbCBDb21waWxlck91dHB1dFByb3ZpZGVyIF9vdXRwdXRQcm92aWRlcjsKCiAgTGVnYWN5Q29tcGlsZXJPdXRwdXQoW3RoaXMuX291dHB1dFByb3ZpZGVyXSk7CgogIEBvdmVycmlkZQogIE91dHB1dFNpbmsgY3JlYXRlT3V0cHV0U2luayhTdHJpbmcgbmFtZSwgU3RyaW5nIGV4dGVuc2lvbiwgT3V0cHV0VHlwZSB0eXBlKSB7CiAgICBpZiAoX291dHB1dFByb3ZpZGVyICE9IG51bGwpIHsKICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgY2FzZSBPdXRwdXRUeXBlLmR1bXBJbmZvOgogICAgICAgIGNhc2UgT3V0cHV0VHlwZS5kZWZlcnJlZE1hcDoKICAgICAgICAgIGlmIChleHRlbnNpb24gPT0gJycpIHsKICAgICAgICAgICAgLy8gTmVlZGVkIHRvIG1ha2UgUHViIGdlbmVyYXRlIHRoZSBzYW1lIG91dHB1dCBuYW1lLgogICAgICAgICAgICBleHRlbnNpb24gPSAnZGVmZXJyZWRfbWFwJzsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBMZWdhY3lPdXRwdXRTaW5rKF9vdXRwdXRQcm92aWRlcihuYW1lLCBleHRlbnNpb24pKTsKICAgIH0KICAgIHJldHVybiBOdWxsU2luay5vdXRwdXRQcm92aWRlcihuYW1lLCBleHRlbnNpb24sIHR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQmluYXJ5T3V0cHV0U2luayBjcmVhdGVCaW5hcnlTaW5rKFVyaSB1cmkpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJMZWdhY3lDb21waWxlck91dHB1dC5jcmVhdGVCaW5hcnlTaW5rIik7CiAgfQp9CgpjbGFzcyBMZWdhY3lPdXRwdXRTaW5rIGltcGxlbWVudHMgT3V0cHV0U2luayB7CiAgZmluYWwgRXZlbnRTaW5rPFN0cmluZz4gc2luazsKCiAgTGVnYWN5T3V0cHV0U2luayh0aGlzLnNpbmspOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZChTdHJpbmcgZXZlbnQpID0+IHNpbmsuYWRkKGV2ZW50KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBjbG9zZSgpID0+IHNpbmsuY2xvc2UoKTsKfQpsAE5OPAFRLAEdASwhARsfHjIBRzUuASwBDE45HkIbHSEjPSdCE0lDDB0fICYMKAgIBAIBSUEkASwBDA9QLgQCATkeTTcwATABDFAjFiIlIUEoDBERCEUGOwQBDC9JBAIBLyABHwEMLQEMIAIBKHBhY2thZ2U6Y29tcGlsZXIvc3JjL29sZF90b19uZXdfYXBpLmRhcnQvc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvY29tbW9uL3Rhc2tzLmRhcnSl2y8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuY29tbW9uLnRhc2tzOwoKaW1wb3J0ICdkYXJ0OmFzeW5jJwogICAgc2hvdyBGdXR1cmUsIFpvbmUsIFpvbmVEZWxlZ2F0ZSwgWm9uZVNwZWNpZmljYXRpb24sIHJ1blpvbmVkOwoKLy8vIFVzZWQgdG8gbWVhc3VyZSB3aGVyZSB0aW1lIGlzIHNwZW50IGluIHRoZSBjb21waWxlci4KLy8vCi8vLyBUaGlzIGV4cG9zZXMgW21lYXN1cmVdIGFuZCBbbWVhc3VyZUlvXSwgd2hpY2ggd3JhcCBhbiBhY3Rpb24gYW5kIGFzc29jaWF0ZQovLy8gdGhlIHRpbWUgc3BlbnQgZHVyaW5nIHRoYXQgYWN0aW9uIHdpdGggdGhpcyB0YXNrLiBOZXN0ZWQgbWVhc3VyZW1lbnRzY2NhbiBiZQovLy8gaW50cm9kdWNlZCBieSB1c2luZyBbbWVhc3VyZVN1YnRhc2tdLgovLyBUT0RPKHNpZ211bmQpOiByZW5hbWUgdG8gTWVhc3VyYWJsZVRhc2sKYWJzdHJhY3QgY2xhc3MgQ29tcGlsZXJUYXNrIHsKICBmaW5hbCBNZWFzdXJlciBfbWVhc3VyZXI7CiAgZmluYWwgU3RvcHdhdGNoIF93YXRjaDsKICBmaW5hbCBNYXA8U3RyaW5nLCBHZW5lcmljVGFzaz4gX3N1YnRhc2tzID0gPFN0cmluZywgR2VuZXJpY1Rhc2s+e307CgogIGludCBfYXN5bmNDb3VudCA9IDA7CgogIC8vIEVhY2ggdGFzayBoYXMgYSBmaXhlZCwgbGF6aWx5IGNvbXB1dGVkLCBab25lU3BlY2lmaWNhdGlvbiBhbmQgem9uZVZhbHVlcwogIC8vIGZvciBbX21lYXN1cmVab25lZF0uCiAgWm9uZVNwZWNpZmljYXRpb24gX3pvbmVTcGVjaWZpY2F0aW9uOwogIE1hcCBfem9uZVZhbHVlczsKCiAgQ29tcGlsZXJUYXNrKHRoaXMuX21lYXN1cmVyKQogICAgICA6IF93YXRjaCA9IF9tZWFzdXJlci5lbmFibGVUYXNrTWVhc3VyZW1lbnRzID8gbmV3IFN0b3B3YXRjaCgpIDogbnVsbDsKCiAgLy8vIFdoZXRoZXIgbWVhc3VyZW1lbnQgaXMgZGlzYWJsZWQuIFRoZSBmdW5jdGlvbnMgW21lYXN1cmVdIGFuZCBbbWVhc3VyZUlvXQogIC8vLyBvbmx5IG1lYXN1cmUgdGltZSBpZiBtZWFzdXJlbWVudHMgYXJlIGVuYWJsZWQuCiAgYm9vbCBnZXQgX2lzRGlzYWJsZWQgPT4gX3dhdGNoID09IG51bGw7CgogIC8vLyBOYW1lIHRvIHVzZSBmb3IgcmVwb3J0aW5nIHRpbWluZyBpbmZvcm1hdGlvbi4KICAvLy8KICAvLy8gU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyB3aXRoIGEgcHJvcGVyIG5hbWUsIG90aGVyd2lzZSB3ZSB1c2UgdGhlCiAgLy8vIHJ1bnRpbWUgdHlwZSBvZiB0aGUgdGFzay4KICBTdHJpbmcgZ2V0IG5hbWUgPT4gIlVua25vd24gdGFzayAnJHt0aGlzLnJ1bnRpbWVUeXBlfSciOwoKICBib29sIGdldCBpc1J1bm5pbmcgPT4gX3dhdGNoPy5pc1J1bm5pbmcgPT0gdHJ1ZTsKCiAgaW50IGdldCB0aW1pbmcgewogICAgaWYgKF9pc0Rpc2FibGVkKSByZXR1cm4gMDsKICAgIGludCB0b3RhbCA9IF93YXRjaC5lbGFwc2VkTWlsbGlzZWNvbmRzOwogICAgZm9yIChHZW5lcmljVGFzayBzdWJ0YXNrIGluIF9zdWJ0YXNrcy52YWx1ZXMpIHsKICAgICAgdG90YWwgKz0gc3VidGFzay50aW1pbmc7CiAgICB9CiAgICByZXR1cm4gdG90YWw7CiAgfQoKICBEdXJhdGlvbiBnZXQgZHVyYXRpb24gewogICAgaWYgKF9pc0Rpc2FibGVkKSByZXR1cm4gRHVyYXRpb24uemVybzsKICAgIER1cmF0aW9uIHRvdGFsID0gX3dhdGNoLmVsYXBzZWQ7CiAgICBmb3IgKEdlbmVyaWNUYXNrIHN1YnRhc2sgaW4gX3N1YnRhc2tzLnZhbHVlcykgewogICAgICB0b3RhbCArPSBzdWJ0YXNrLmR1cmF0aW9uOwogICAgfQogICAgcmV0dXJuIHRvdGFsOwogIH0KCiAgLy8vIFBlcmZvcm0gW2FjdGlvbl0gYW5kIG1lYXN1cmUgaXRzIHJ1bnRpbWUgKGluY2x1ZGluZyBhbnkgYXN5bmNocm9ub3VzCiAgLy8vIGNhbGxiYWNrcywgc3VjaCBhcywgW0Z1dHVyZS50aGVuXSwgYnV0IGV4Y2x1ZGluZyBjb2RlIG1lYXN1cmVkIGJ5IG90aGVyCiAgLy8vIHRhc2tzKS4KICBUIG1lYXN1cmU8VD4oVCBhY3Rpb24oKSkgPT4gX2lzRGlzYWJsZWQgPyBhY3Rpb24oKSA6IF9tZWFzdXJlWm9uZWQoYWN0aW9uKTsKCiAgLy8vIEhlbHBlciBtZXRob2QgdGhhdCBzdGFydHMgbWVhc3VyaW5nIHdpdGggdGhpcyBbQ29tcGlsZXJUYXNrXSwgdGhhdCBpcywKICAvLy8gbWFrZSB0aGlzIHRhc2sgdGhlIGN1cnJlbnRseSBtZWFzdXJlZCB0YXNrLgogIENvbXBpbGVyVGFzayBfc3RhcnQoKSB7CiAgICBpZiAoX2lzRGlzYWJsZWQpIHJldHVybiBudWxsOwogICAgQ29tcGlsZXJUYXNrIHByZXZpb3VzID0gX21lYXN1cmVyLl9jdXJyZW50VGFzazsKICAgIF9tZWFzdXJlci5fY3VycmVudFRhc2sgPSB0aGlzOwogICAgaWYgKHByZXZpb3VzICE9IG51bGwpIHByZXZpb3VzLl93YXRjaC5zdG9wKCk7CiAgICAvLyBSZWdhcmRsZXNzIG9mIHdoZXRoZXIgW3ByZXZpb3VzXSBpcyBgbnVsbGAgd2UndmUgcmV0dXJuZWQgZnJvbSB0aGUKICAgIC8vIGV2ZW50bG9vcC4KICAgIF9tZWFzdXJlci5zdG9wQXN5bmNXYWxsQ2xvY2soKTsKICAgIF93YXRjaC5zdGFydCgpOwogICAgcmV0dXJuIHByZXZpb3VzOwogIH0KCiAgLy8vIEhlbHBlciBtZXRob2QgdGhhdCBzdG9wcyBtZWFzdXJpbmcgd2l0aCB0aGlzIFtDb21waWxlclRhc2tdLCB0aGF0IGlzLAogIC8vLyBtYWtlIFtwcmV2aW91c10gdGhlIGN1cnJlbnRseSBtZWFzdXJlZCB0YXNrLgogIHZvaWQgX3N0b3AoQ29tcGlsZXJUYXNrIHByZXZpb3VzKSB7CiAgICBpZiAoX2lzRGlzYWJsZWQpIHJldHVybjsKICAgIF93YXRjaC5zdG9wKCk7CiAgICBpZiAocHJldmlvdXMgIT0gbnVsbCkgewogICAgICBwcmV2aW91cy5fd2F0Y2guc3RhcnQoKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gcHJldmlvdXMgdGFzaywgd2UncmUgYWJvdXQgdG8gcmV0dXJuIGNvbnRyb2wgdG8gdGhlCiAgICAgIC8vIGV2ZW50IGxvb3AuIFN0YXJ0IGNvdW50aW5nIHRoYXQgYXMgd2FpdGluZyBhc3luY2hyb25vdXMgSS9PLgogICAgICBfbWVhc3VyZXIuc3RhcnRBc3luY1dhbGxDbG9jaygpOwogICAgfQogICAgX21lYXN1cmVyLl9jdXJyZW50VGFzayA9IHByZXZpb3VzOwogIH0KCiAgVCBfbWVhc3VyZVpvbmVkPFQ+KFQgYWN0aW9uKCkpIHsKICAgIC8vIFVzaW5nIHpvbmVzLCB3ZSdyZSBhYmxlIHRvIHRyYWNrIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zIGNvcnJlY3RseSwgYXMKICAgIC8vIG91ciB6b25lIHdpbGwgYmUgYXNrZWQgdG8gaW52b2tlIGB0aGVuYCBibG9ja3MuIFRoZW4gYmxvY2tzICh0aGUgY2xvc3VyZQogICAgLy8gcGFzc2VkIHRvIHJ1blpvbmVkLCBhbmQgb3RoZXIgY2xvc3VyZXMpIGFyZSBydW4gdmlhIHRoZSBgcnVuYCBmdW5jdGlvbnMKICAgIC8vIGJlbG93LgoKICAgIGFzc2VydChfd2F0Y2ggIT0gbnVsbCk7CgogICAgLy8gVGhlIGN1cnJlbnQgem9uZSBpcyBhbHJlYWR5IG1lYXN1cmluZyBgdGhpc2AgdGFzay4KICAgIGlmIChab25lLmN1cnJlbnRbX21lYXN1cmVyXSA9PSB0aGlzKSByZXR1cm4gYWN0aW9uKCk7CgogICAgcmV0dXJuIHJ1blpvbmVkKGFjdGlvbiwKICAgICAgICB6b25lVmFsdWVzOiBfem9uZVZhbHVlcyA/Pz0ge19tZWFzdXJlcjogdGhpc30sCiAgICAgICAgem9uZVNwZWNpZmljYXRpb246IF96b25lU3BlY2lmaWNhdGlvbiA/Pz0gbmV3IFpvbmVTcGVjaWZpY2F0aW9uKAogICAgICAgICAgICBydW46IF9ydW4sIHJ1blVuYXJ5OiBfcnVuVW5hcnksIHJ1bkJpbmFyeTogX3J1bkJpbmFyeSkpOwogIH0KCiAgLy8vIFJ1biBbZl0gaW4gW3pvbmVdLiBSdW5uaW5nIG11c3QgYmUgZGVsZWdhdGVkIHRvIFtwYXJlbnRdIHRvIGVuc3VyZSB0aGF0CiAgLy8vIHZhcmlvdXMgc3RhdGUgaXMgc2V0IHVwIGNvcnJlY3RseSAoaW4gcGFydGljdWxhciB0aGF0IGBab25lLmN1cnJlbnRgCiAgLy8vIGhhcyB0aGUgcmlnaHQgdmFsdWUpLiBTaW5jZSBbX21lYXN1cmVab25lZF0gY2FuIGJlIGNhbGxlZCByZWN1cnNpdmVseQogIC8vLyAoc3luY2hyb25vdXNseSksIHNvbWUgb2YgdGhlIG1lYXN1cmluZyB6b25lcyB3ZSBjcmVhdGUgd2lsbCBiZSBwYXJlbnRzCiAgLy8vIG9mIG90aGVyIG1lYXN1cmluZyB6b25lcywgYnV0IHdlIHN0aWxsIG5lZWQgdG8gY2FsbCB0aHJvdWdoIHRoZSBwYXJlbnQKICAvLy8gY2hhaW4uIENvbnNlcXVlbnRseSwgd2UgdXNlIGEgem9uZSB2YWx1ZSBrZXllZCBieSBbX21lYXN1cmVyXSB0byBzZWUgaWYKICAvLy8gd2Ugc2hvdWxkIG1lYXN1cmUgb3Igbm90IHdoZW4gZGVsZWdhdGluZy4KICBSIF9ydW48Uj4oWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsIFIgZigpKSB7CiAgICBpZiAoem9uZVtfbWVhc3VyZXJdICE9IHRoaXMpIHJldHVybiBwYXJlbnQucnVuKHpvbmUsIGYpOwogICAgQ29tcGlsZXJUYXNrIHByZXZpb3VzID0gX3N0YXJ0KCk7CiAgICB0cnkgewogICAgICByZXR1cm4gcGFyZW50LnJ1bih6b25lLCBmKTsKICAgIH0gZmluYWxseSB7CiAgICAgIF9zdG9wKHByZXZpb3VzKTsKICAgIH0KICB9CgogIC8vLyBTYW1lIGFzIFtydW5dIGV4Y2VwdCB0aGF0IFtmXSB0YWtlcyBvbmUgYXJndW1lbnQsIFthcmddLgogIFIgX3J1blVuYXJ5PFIsIFQ+KAogICAgICBab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgUiBmKFQgYXJnKSwgVCBhcmcpIHsKICAgIGlmICh6b25lW19tZWFzdXJlcl0gIT0gdGhpcykgcmV0dXJuIHBhcmVudC5ydW5VbmFyeSh6b25lLCBmLCBhcmcpOwogICAgQ29tcGlsZXJUYXNrIHByZXZpb3VzID0gX3N0YXJ0KCk7CiAgICB0cnkgewogICAgICByZXR1cm4gcGFyZW50LnJ1blVuYXJ5KHpvbmUsIGYsIGFyZyk7CiAgICB9IGZpbmFsbHkgewogICAgICBfc3RvcChwcmV2aW91cyk7CiAgICB9CiAgfQoKICAvLy8gU2FtZSBhcyBbcnVuXSBleGNlcHQgdGhhdCBbZl0gdGFrZXMgdHdvIGFyZ3VtZW50cyAoW2ExXSBhbmQgW2EyXSkuCiAgUiBfcnVuQmluYXJ5PFIsIFQxLCBUMj4oWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsCiAgICAgIFIgZihUMSBhMSwgVDIgYTIpLCBUMSBhMSwgVDIgYTIpIHsKICAgIGlmICh6b25lW19tZWFzdXJlcl0gIT0gdGhpcykgcmV0dXJuIHBhcmVudC5ydW5CaW5hcnkoem9uZSwgZiwgYTEsIGEyKTsKICAgIENvbXBpbGVyVGFzayBwcmV2aW91cyA9IF9zdGFydCgpOwogICAgdHJ5IHsKICAgICAgcmV0dXJuIHBhcmVudC5ydW5CaW5hcnkoem9uZSwgZiwgYTEsIGEyKTsKICAgIH0gZmluYWxseSB7CiAgICAgIF9zdG9wKHByZXZpb3VzKTsKICAgIH0KICB9CgogIC8vLyBBc3luY2hyb25vdXMgdmVyc2lvbiBvZiBbbWVhc3VyZV0uIFVzZSB0aGlzIHdoZW4gYWN0aW9uIHJldHVybnMgYSBmdXR1cmUKICAvLy8gdGhhdCdzIHRydWx5IGFzeW5jaHJvbm91cywgc3VjaCBJL08uIE9ubHkgb25lIHRhc2sgY2FuIHVzZSB0aGlzIG1ldGhvZAogIC8vLyBjb25jdXJyZW50bHkuCiAgLy8vCiAgLy8vIE5vdGU6IHdlIGFzc3VtZSB0aGF0IHRoaXMgbWV0aG9kIGlzIHVzZWQgb25seSBieSB0aGUgY29tcGlsZXIgaW5wdXQKICAvLy8gcHJvdmlkZXIsIGJ1dCBpdCBjb3VsZCBiZSB1c2VkIGJ5IG90aGVyIHRhc2tzIGFzIGxvbmcgYXMgdGhlIGlucHV0CiAgLy8vIHByb3ZpZGVyIHdpbGwgbm90IGJlIGNhbGxlZCBieSB0aG9zZSB0YXNrcy4KICBGdXR1cmU8VD4gbWVhc3VyZUlvPFQ+KEZ1dHVyZTxUPiBhY3Rpb24oKSkgewogICAgaWYgKF9pc0Rpc2FibGVkKSByZXR1cm4gYWN0aW9uKCk7CgogICAgaWYgKF9tZWFzdXJlci5fY3VycmVudEFzeW5jVGFzayA9PSBudWxsKSB7CiAgICAgIF9tZWFzdXJlci5fY3VycmVudEFzeW5jVGFzayA9IHRoaXM7CiAgICB9IGVsc2UgaWYgKF9tZWFzdXJlci5fY3VycmVudEFzeW5jVGFzayAhPSB0aGlzKSB7CiAgICAgIHRocm93ICJDYW4ndCB0cmFjayBhc3luYyB0YXNrICckbmFtZScgYmVjYXVzZSIKICAgICAgICAgICIgJyR7X21lYXN1cmVyLl9jdXJyZW50QXN5bmNUYXNrLm5hbWV9JyBpcyBhbHJlYWR5IGJlaW5nIHRyYWNrZWQuIjsKICAgIH0KICAgIF9hc3luY0NvdW50Kys7CiAgICByZXR1cm4gbWVhc3VyZShhY3Rpb24pLndoZW5Db21wbGV0ZSgoKSB7CiAgICAgIF9hc3luY0NvdW50LS07CiAgICAgIGlmIChfYXN5bmNDb3VudCA9PSAwKSBfbWVhc3VyZXIuX2N1cnJlbnRBc3luY1Rhc2sgPSBudWxsOwogICAgfSk7CiAgfQoKICAvLy8gTWVhc3VyZSB0aGUgdGltZSBzcGVudCBpbiBbYWN0aW9uXSAoaWYgaW4gdmVyYm9zZSBtb2RlKSBhbmQgYWNjdW11bGF0ZSBpdAogIC8vLyB1bmRlciBhIHN1YnRhc2sgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KICBUIG1lYXN1cmVTdWJ0YXNrPFQ+KFN0cmluZyBuYW1lLCBUIGFjdGlvbigpKSB7CiAgICBpZiAoX2lzRGlzYWJsZWQpIHJldHVybiBhY3Rpb24oKTsKCiAgICAvLyBVc2UgYSBuZXN0ZWQgQ29tcGlsZXJUYXNrIGZvciB0aGUgbWVhc3VyZW1lbnQgdG8gZW5zdXJlIG5lc3RlZCBbbWVhc3VyZV0KICAgIC8vIGNhbGxzIHdvcmsgY29ycmVjdGx5LiBUaGUgc3VidGFza3Mgd2lsbCBuZXZlciB0aGVtc2VsdmVzIGhhdmUgbmVzdGVkCiAgICAvLyBzdWJ0YXNrcyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBhY2Nlc3NpYmxlIG91dHNpZGUuCiAgICBHZW5lcmljVGFzayBzdWJ0YXNrID0gX3N1YnRhc2tzW25hbWVdID8/PSBuZXcgR2VuZXJpY1Rhc2sobmFtZSwgX21lYXN1cmVyKTsKICAgIHJldHVybiBzdWJ0YXNrLm1lYXN1cmUoYWN0aW9uKTsKICB9CgogIC8vLyBBc3luY2hyb25vdXMgdmVyc2lvbiBvZiBbbWVhc3VyZVN1YnRhc2tdLiBVc2UgdGhpcyB3aGVuIGFjdGlvbiByZXR1cm5zIGEKICAvLy8gZnV0dXJlIHRoYXQncyB0cnVseSBhc3luY2hyb25vdXMsIHN1Y2ggSS9PLiBPbmx5IG9uZSB0YXNrIGNhbiB1c2UgdGhpcwogIC8vLyBjb25jdXJyZW50bHkuCiAgLy8vCiAgLy8vIE5vdGU6IHdlIGFzc3VtZSB0aGF0IHRoaXMgbWV0aG9kIGlzIHVzZWQgb25seSBieSB0aGUgY29tcGlsZXIgaW5wdXQKICAvLy8gcHJvdmlkZXIsIGJ1dCBpdCBjb3VsZCBiZSB1c2VkIGJ5IG90aGVyIHRhc2tzIGFzIGxvbmcgYXMgdGhlIGlucHV0CiAgLy8vIHByb3ZpZGVyIHdpbGwgbm90IGJlIGNhbGxlZCBieSB0aG9zZSB0YXNrcy4KICBGdXR1cmU8VD4gbWVhc3VyZUlvU3VidGFzazxUPihTdHJpbmcgbmFtZSwgRnV0dXJlPFQ+IGFjdGlvbigpKSB7CiAgICBpZiAoX2lzRGlzYWJsZWQpIHJldHVybiBhY3Rpb24oKTsKCiAgICAvLyBVc2UgYSBuZXN0ZWQgQ29tcGlsZXJUYXNrIGZvciB0aGUgbWVhc3VyZW1lbnQgdG8gZW5zdXJlIG5lc3RlZCBbbWVhc3VyZV0KICAgIC8vIGNhbGxzIHdvcmsgY29ycmVjdGx5LiBUaGUgc3VidGFza3Mgd2lsbCBuZXZlciB0aGVtc2VsdmVzIGhhdmUgbmVzdGVkCiAgICAvLyBzdWJ0YXNrcyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBhY2Nlc3NpYmxlIG91dHNpZGUuCiAgICBHZW5lcmljVGFzayBzdWJ0YXNrID0gX3N1YnRhc2tzW25hbWVdID8/PSBuZXcgR2VuZXJpY1Rhc2sobmFtZSwgX21lYXN1cmVyKTsKICAgIHJldHVybiBzdWJ0YXNrLm1lYXN1cmVJbyhhY3Rpb24pOwogIH0KCiAgSXRlcmFibGU8U3RyaW5nPiBnZXQgc3VidGFza3MgPT4gX3N1YnRhc2tzLmtleXM7CgogIGludCBnZXRTdWJ0YXNrVGltZShTdHJpbmcgc3VidGFzaykgPT4gX3N1YnRhc2tzW3N1YnRhc2tdLnRpbWluZzsKCiAgYm9vbCBnZXRTdWJ0YXNrSXNSdW5uaW5nKFN0cmluZyBzdWJ0YXNrKSA9PiBfc3VidGFza3Nbc3VidGFza10uaXNSdW5uaW5nOwp9CgpjbGFzcyBHZW5lcmljVGFzayBleHRlbmRzIENvbXBpbGVyVGFzayB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgR2VuZXJpY1Rhc2sodGhpcy5uYW1lLCBNZWFzdXJlciBtZWFzdXJlcikgOiBzdXBlcihtZWFzdXJlcik7Cn0KCmNsYXNzIE1lYXN1cmVyIHsKICAvLy8gTWVhc3VyZXMgdGhlIHRvdGFsIHJ1bnRpbWUgZnJvbSB0aGlzIG9iamVjdCB3YXMgY29uc3RydWN0ZWQuCiAgLy8vCiAgLy8vIE5vdGU6IE1VU1QgYmUgdGhlIGZpcnN0IGZpZWxkIG9mIHRoaXMgY2xhc3MgdG8gZW5zdXJlIFt3YWxsY2xvY2tdIGlzCiAgLy8vIHN0YXJ0ZWQgYmVmb3JlIG90aGVyIGNvbXB1dGF0aW9ucy4KICBmaW5hbCBTdG9wd2F0Y2ggX3dhbGxDbG9jayA9IG5ldyBTdG9wd2F0Y2goKS4uc3RhcnQoKTsKCiAgRHVyYXRpb24gZ2V0IGVsYXBzZWRXYWxsQ2xvY2sgPT4gX3dhbGxDbG9jay5lbGFwc2VkOwoKICAvLy8gTWVhc3VyZXMgZ2FwcyBiZXR3ZWVuIHpvbmVkIGNsb3N1cmVzIGR1ZSB0byBhc3luY2hyb25pY2l0eS4KICBmaW5hbCBTdG9wd2F0Y2ggX2FzeW5jV2FsbENsb2NrID0gbmV3IFN0b3B3YXRjaCgpOwoKICBEdXJhdGlvbiBnZXQgZWxhcHNlZEFzeW5jV2FsbENsb2NrID0+IF9hc3luY1dhbGxDbG9jay5lbGFwc2VkOwoKICAvLy8gV2hldGhlciBtZWFzdXJlbWVudCBvZiB0YXNrcyBpcyBlbmFibGVkLgogIGZpbmFsIGJvb2wgZW5hYmxlVGFza01lYXN1cmVtZW50czsKCiAgc3RhdGljIGludCBfaGFzaENvZGVHZW5lcmF0b3IgPSAxOTc7CiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGhhc2hDb2RlID0gX2hhc2hDb2RlR2VuZXJhdG9yKys7CgogIE1lYXN1cmVyKHt0aGlzLmVuYWJsZVRhc2tNZWFzdXJlbWVudHM6IGZhbHNlfSk7CgogIC8vLyBUaGUgY3VycmVudGx5IHJ1bm5pbmcgdGFzaywgdGhhdCBpcywgdGhlIHRhc2sgd2hvc2UgW1N0b3B3YXRjaF0gaXMKICAvLy8gY3VycmVudGx5IHJ1bm5pbmcuCiAgQ29tcGlsZXJUYXNrIF9jdXJyZW50VGFzazsKCiAgLy8vIFRoZSBjdXJyZW50IHRhc2sgd2hpY2ggc2hvdWxkIGJlIGNoYXJnZWQgZm9yIGFzeW5jaHJvbm91cyBnYXBzLgogIENvbXBpbGVyVGFzayBfY3VycmVudEFzeW5jVGFzazsKCiAgLy8vIFN0YXJ0IGNvdW50aW5nIHRoZSB0b3RhbCBlbGFwc2VkIHRpbWUgc2luY2UgdGhlIGNvbXBpbGVyIHN0YXJ0ZWQuCiAgdm9pZCBzdGFydFdhbGxDbG9jaygpIHsKICAgIF93YWxsQ2xvY2suc3RhcnQoKTsKICB9CgogIC8vLyBTdGFydCBjb3VudGluZyB0aGUgdG90YWwgZWxhcHNlZCB0aW1lIHNpbmNlIHRoZSBjb21waWxlciBzdGFydGVkLgogIHZvaWQgc3RvcFdhbGxDbG9jaygpIHsKICAgIF93YWxsQ2xvY2suc3RvcCgpOwogIH0KCiAgLy8vIENhbGwgdGhpcyBiZWZvcmUgcmV0dXJuaW5nIHRvIHRoZSBldmVudGxvb3AuCiAgdm9pZCBzdGFydEFzeW5jV2FsbENsb2NrKCkgewogICAgaWYgKF9jdXJyZW50QXN5bmNUYXNrICE9IG51bGwpIHsKICAgICAgX2N1cnJlbnRBc3luY1Rhc2suX3dhdGNoLnN0YXJ0KCk7CiAgICB9IGVsc2UgewogICAgICBfYXN5bmNXYWxsQ2xvY2suc3RhcnQoKTsKICAgIH0KICB9CgogIC8vLyBDYWxsIHRoaXMgd2hlbiB0aGUgZXZlbnRsb29wIHJldHVybnMgY29udHJvbCB0byB1cy4KICB2b2lkIHN0b3BBc3luY1dhbGxDbG9jaygpIHsKICAgIGlmIChfY3VycmVudEFzeW5jVGFzayAhPSBudWxsKSB7CiAgICAgIF9jdXJyZW50QXN5bmNUYXNrLl93YXRjaC5zdG9wKCk7CiAgICB9CiAgICBfYXN5bmNXYWxsQ2xvY2suc3RvcCgpOwogIH0KfQqBFABOTjwBHgEUQgE5BE9RKiseHBpGARcBThooEwEfTAFPNSoBNAZPIDsBMwETHyw0HwYSBAEaKyU0IQYSBAFLTg5OAU0yGiI0IzJKEiQUFQQBTDMmHRMcHw1LRicGJwQBI05QTw4BHAE6OgEcN0lFBAFOS0xNTU4wQD0mCiIQFwYEAT8VRkcmCiwQFwYEAUlFKUsmCjAQFwYEAU9NFAZKSTIvJgEvKjY1TgYTLRVACAQBUCsxJgFQTDlQJAQBT00UBkpJMkMmAVBMOVAmBAEzAUMBTAIBKQwVPwIBEUMGSyk5ATcBQjUBQQEvJQEnDC0BMgFJGR0BRiIBSBoYBAFIGRcEATMfJSgNHwYEAToeJScGHAQCASZwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb21tb24vdGFza3MuZGFydClzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9jb21tb24uZGFydINYLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBMaWJyYXJ5IHRoYXQgcmUtZXhwb3J0cyBsaWJyYXJpZXMgdXNlZCB0aHJvdWdob3V0IHRoZSBjb21waWxlciByZWdhcmRsZXNzCi8vLyBvZiBwaGFzZSBvciBzdWJmdW5jdGlvbmFsaXR5LgpsaWJyYXJ5IGRhcnQyanMuY29tbW9uOwoKZXhwb3J0ICdkaWFnbm9zdGljcy9kaWFnbm9zdGljX2xpc3RlbmVyLmRhcnQnCiAgICBzaG93IERpYWdub3N0aWNNZXNzYWdlLCBEaWFnbm9zdGljUmVwb3J0ZXI7CmV4cG9ydCAnZGlhZ25vc3RpY3MvaW52YXJpYW50LmRhcnQnIHNob3cgYXNzZXJ0RGVidWdNb2RlLCBmYWlsZWRBdDsKZXhwb3J0ICdkaWFnbm9zdGljcy9tZXNzYWdlcy5kYXJ0JyBzaG93IE1lc3NhZ2VLaW5kOwpleHBvcnQgJ2RpYWdub3N0aWNzL3NvdXJjZV9zcGFuLmRhcnQnIHNob3cgU291cmNlU3BhbjsKZXhwb3J0ICdkaWFnbm9zdGljcy9zcGFubmFibGUuZGFydCcKICAgIHNob3cKICAgICAgICBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgIE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwKICAgICAgICBTcGFubmFibGUsCiAgICAgICAgU3Bhbm5hYmxlQXNzZXJ0aW9uRmFpbHVyZTsKZXhwb3J0ICdoZWxwZXJzL2hlbHBlcnMuZGFydCc7Cgpib29sIHJldGFpbkRhdGFGb3JUZXN0aW5nID0gZmFsc2U7ChgATk48AU4iGAEuMEQ1NyQJIx8TIx8BIwEgcGFja2FnZTpjb21waWxlci9zcmMvY29tbW9uLmRhcnQrc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvY29tcGlsZXIuZGFydMAAijwvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmNvbXBpbGVyX2Jhc2U7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnIHNob3cgRnV0dXJlOwoKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Vuc3RhYmxlL2RhcnQyanMuZGFydCcKICAgIHNob3cgY2xlYXJTdHJpbmdUb2tlbkNhbm9uaWNhbGl6ZXI7CgppbXBvcnQgJy4uL2NvbXBpbGVyX25ldy5kYXJ0JyBhcyBhcGk7CmltcG9ydCAnYmFja2VuZF9zdHJhdGVneS5kYXJ0JzsKaW1wb3J0ICdjb21tb24vY29kZWdlbi5kYXJ0JzsKaW1wb3J0ICdjb21tb24vbmFtZXMuZGFydCcgc2hvdyBTZWxlY3RvcnMsIFVyaXM7CmltcG9ydCAnY29tbW9uL3Rhc2tzLmRhcnQnIHNob3cgQ29tcGlsZXJUYXNrLCBHZW5lcmljVGFzaywgTWVhc3VyZXI7CmltcG9ydCAnY29tbW9uL3dvcmsuZGFydCcgc2hvdyBXb3JrSXRlbTsKaW1wb3J0ICdjb21tb24uZGFydCc7CmltcG9ydCAnY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgRWxlbWVudEVudmlyb25tZW50OwppbXBvcnQgJ2RlZmVycmVkX2xvYWQuZGFydCcgc2hvdyBEZWZlcnJlZExvYWRUYXNrLCBPdXRwdXRVbml0RGF0YTsKaW1wb3J0ICdkaWFnbm9zdGljcy9jb2RlX2xvY2F0aW9uLmRhcnQnOwppbXBvcnQgJ2RpYWdub3N0aWNzL2RpYWdub3N0aWNfbGlzdGVuZXIuZGFydCcgc2hvdyBEaWFnbm9zdGljUmVwb3J0ZXI7CmltcG9ydCAnZGlhZ25vc3RpY3MvbWVzc2FnZXMuZGFydCcgc2hvdyBNZXNzYWdlLCBNZXNzYWdlVGVtcGxhdGU7CmltcG9ydCAnZHVtcF9pbmZvLmRhcnQnIHNob3cgRHVtcEluZm9UYXNrOwppbXBvcnQgJ2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJ2VucXVldWUuZGFydCcgc2hvdyBFbnF1ZXVlciwgRW5xdWV1ZVRhc2ssIFJlc29sdXRpb25FbnF1ZXVlcjsKaW1wb3J0ICdlbnZpcm9ubWVudC5kYXJ0JzsKaW1wb3J0ICdmcm9udGVuZF9zdHJhdGVneS5kYXJ0JzsKaW1wb3J0ICdpbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCcgc2hvdyBBYnN0cmFjdFZhbHVlU3RyYXRlZ3k7CmltcG9ydCAnaW5mZXJyZXIvdHJpdmlhbC5kYXJ0JyBzaG93IFRyaXZpYWxBYnN0cmFjdFZhbHVlU3RyYXRlZ3k7CmltcG9ydCAnaW5mZXJyZXIvdHlwZW1hc2tzL21hc2tzLmRhcnQnIHNob3cgVHlwZU1hc2tTdHJhdGVneTsKaW1wb3J0ICdpbmZlcnJlci90eXBlcy5kYXJ0JwogICAgc2hvdyBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cywgR2xvYmFsVHlwZUluZmVyZW5jZVRhc2s7CmltcG9ydCAnaW8vc291cmNlX2luZm9ybWF0aW9uLmRhcnQnIHNob3cgU291cmNlSW5mb3JtYXRpb247CmltcG9ydCAnanNfYmFja2VuZC9iYWNrZW5kLmRhcnQnIHNob3cgQ29kZWdlbklucHV0cywgSmF2YVNjcmlwdEltcGFjdFN0cmF0ZWd5OwppbXBvcnQgJ2pzX2JhY2tlbmQvaW5mZXJyZWRfZGF0YS5kYXJ0JzsKaW1wb3J0ICdqc19tb2RlbC9qc19zdHJhdGVneS5kYXJ0JzsKaW1wb3J0ICdrZXJuZWwva2VybmVsX3N0cmF0ZWd5LmRhcnQnOwppbXBvcnQgJ2tlcm5lbC9sb2FkZXIuZGFydCcgc2hvdyBLZXJuZWxMb2FkZXJUYXNrLCBLZXJuZWxSZXN1bHQ7CmltcG9ydCAnbnVsbF9jb21waWxlcl9vdXRwdXQuZGFydCcgc2hvdyBOdWxsQ29tcGlsZXJPdXRwdXQ7CmltcG9ydCAnb3B0aW9ucy5kYXJ0JyBzaG93IENvbXBpbGVyT3B0aW9ucywgRGlhZ25vc3RpY09wdGlvbnM7CmltcG9ydCAnc2VyaWFsaXphdGlvbi90YXNrLmRhcnQnOwppbXBvcnQgJ3NlcmlhbGl6YXRpb24vc3RyYXRlZ2llcy5kYXJ0JzsKaW1wb3J0ICdzc2Evbm9kZXMuZGFydCcgc2hvdyBISW5zdHJ1Y3Rpb247CmltcG9ydCAndW5pdmVyc2Uvc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvcjsKaW1wb3J0ICd1bml2ZXJzZS9jb2RlZ2VuX3dvcmxkX2J1aWxkZXIuZGFydCc7CmltcG9ydCAndW5pdmVyc2UvcmVzb2x1dGlvbl93b3JsZF9idWlsZGVyLmRhcnQnOwppbXBvcnQgJ3VuaXZlcnNlL3dvcmxkX2ltcGFjdC5kYXJ0JwogICAgc2hvdyBJbXBhY3RTdHJhdGVneSwgV29ybGRJbXBhY3QsIFdvcmxkSW1wYWN0QnVpbGRlckltcGw7CmltcG9ydCAnd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQsIEtDbG9zZWRXb3JsZDsKCnR5cGVkZWYgQ29tcGlsZXJEaWFnbm9zdGljUmVwb3J0ZXIgTWFrZVJlcG9ydGVyRnVuY3Rpb24oCiAgICBDb21waWxlciBjb21waWxlciwgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMpOwoKYWJzdHJhY3QgY2xhc3MgQ29tcGlsZXIgewogIE1lYXN1cmVyIGdldCBtZWFzdXJlcjsKCiAgYXBpLkNvbXBpbGVySW5wdXQgZ2V0IHByb3ZpZGVyOwoKICBGcm9udGVuZFN0cmF0ZWd5IGZyb250ZW5kU3RyYXRlZ3k7CiAgQmFja2VuZFN0cmF0ZWd5IGJhY2tlbmRTdHJhdGVneTsKICBDb21waWxlckRpYWdub3N0aWNSZXBvcnRlciBfcmVwb3J0ZXI7CiAgTWFwPEVudGl0eSwgV29ybGRJbXBhY3Q+IF9pbXBhY3RDYWNoZTsKICBJbXBhY3RDYWNoZURlbGV0ZXIgX2ltcGFjdENhY2hlRGVsZXRlcjsKCiAgSW1wYWN0U3RyYXRlZ3kgaW1wYWN0U3RyYXRlZ3kgPSBjb25zdCBJbXBhY3RTdHJhdGVneSgpOwoKICAvLy8gT3B0aW9ucyBwcm92aWRlZCBmcm9tIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuCiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnM7CgogIC8vIFRoZXNlIGludGVybmFsIGZsYWdzIGFyZSB1c2VkIHRvIHN0b3AgY29tcGlsYXRpb24gYWZ0ZXIgYSBzcGVjaWZpYyBwaGFzZS4KICAvLyBVc2VkIG9ubHkgZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZyBwdXJwb3NlcyBvbmx5LgogIGJvb2wgc3RvcEFmdGVyQ2xvc2VkV29ybGQgPSBmYWxzZTsKICBib29sIHN0b3BBZnRlclR5cGVJbmZlcmVuY2UgPSBmYWxzZTsKCiAgLy8vIE91dHB1dCBwcm92aWRlciBmcm9tIHVzZXIgb2YgQ29tcGlsZXIgQVBJLgogIGFwaS5Db21waWxlck91dHB1dCBfb3V0cHV0UHJvdmlkZXI7CgogIGFwaS5Db21waWxlck91dHB1dCBnZXQgb3V0cHV0UHJvdmlkZXIgPT4gX291dHB1dFByb3ZpZGVyOwoKICBMaXN0PENvZGVMb2NhdGlvbj4gX3VzZXJDb2RlTG9jYXRpb25zID0gPENvZGVMb2NhdGlvbj5bXTsKCiAgSkNsb3NlZFdvcmxkIGJhY2tlbmRDbG9zZWRXb3JsZEZvclRlc3Rpbmc7CgogIERpYWdub3N0aWNSZXBvcnRlciBnZXQgcmVwb3J0ZXIgPT4gX3JlcG9ydGVyOwogIE1hcDxFbnRpdHksIFdvcmxkSW1wYWN0PiBnZXQgaW1wYWN0Q2FjaGUgPT4gX2ltcGFjdENhY2hlOwogIEltcGFjdENhY2hlRGVsZXRlciBnZXQgaW1wYWN0Q2FjaGVEZWxldGVyID0+IF9pbXBhY3RDYWNoZURlbGV0ZXI7CgogIGZpbmFsIEVudmlyb25tZW50IGVudmlyb25tZW50OwogIC8vIFRPRE8oc2lnbXVuZCk6IGRlbGV0ZSBvbmNlIHdlIG1pZ3JhdGUgdGhlIHJlc3Qgb2YgdGhlIGNvbXBpbGVyIHRvIHVzZQogIC8vIGBlbnZpcm9ubWVudGAgZGlyZWN0bHkuCiAgQGRlcHJlY2F0ZWQKICBmcm9tRW52aXJvbm1lbnQoU3RyaW5nIG5hbWUpID0+IGVudmlyb25tZW50LnZhbHVlT2YobmFtZSk7CgogIEVudGl0eSBnZXQgY3VycmVudEVsZW1lbnQgPT4gX3JlcG9ydGVyLmN1cnJlbnRFbGVtZW50OwoKICBMaXN0PENvbXBpbGVyVGFzaz4gdGFza3M7CiAgS2VybmVsTG9hZGVyVGFzayBrZXJuZWxMb2FkZXI7CiAgR2xvYmFsVHlwZUluZmVyZW5jZVRhc2sgZ2xvYmFsSW5mZXJlbmNlOwogIENvZGVnZW5Xb3JsZEJ1aWxkZXIgX2NvZGVnZW5Xb3JsZEJ1aWxkZXI7CgogIEFic3RyYWN0VmFsdWVTdHJhdGVneSBhYnN0cmFjdFZhbHVlU3RyYXRlZ3k7CgogIEdlbmVyaWNUYXNrIHNlbGZUYXNrOwoKICBFbnF1ZXVlVGFzayBlbnF1ZXVlcjsKICBEZWZlcnJlZExvYWRUYXNrIGRlZmVycmVkTG9hZFRhc2s7CiAgRHVtcEluZm9UYXNrIGR1bXBJbmZvVGFzazsKICBTZXJpYWxpemF0aW9uVGFzayBzZXJpYWxpemF0aW9uVGFzazsKCiAgYm9vbCBnZXQgaGFzQ3Jhc2hlZCA9PiBfcmVwb3J0ZXIuaGFzQ3Jhc2hlZDsKCiAgUHJvZ3Jlc3MgcHJvZ3Jlc3MgPSBjb25zdCBQcm9ncmVzcygpOwoKICBzdGF0aWMgY29uc3QgaW50IFBIQVNFX1NDQU5OSU5HID0gMDsKICBzdGF0aWMgY29uc3QgaW50IFBIQVNFX1JFU09MVklORyA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBQSEFTRV9ET05FX1JFU09MVklORyA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBQSEFTRV9DT01QSUxJTkcgPSAzOwogIGludCBwaGFzZTsKCiAgYm9vbCBjb21waWxhdGlvbkZhaWxlZCA9IGZhbHNlOwoKICAvLyBDYWxsYmFjayBmdW5jdGlvbiB1c2VkIGZvciB0ZXN0aW5nIHJlc29sdXRpb24gZW5xdWV1aW5nLgogIHZvaWQgRnVuY3Rpb24oKSBvblJlc29sdXRpb25RdWV1ZUVtcHR5Rm9yVGVzdGluZzsKCiAgLy8gQ2FsbGJhY2sgZnVuY3Rpb24gdXNlZCBmb3IgdGVzdGluZyBjb2RlZ2VuIGVucXVldWluZy4KICB2b2lkIEZ1bmN0aW9uKCkgb25Db2RlZ2VuUXVldWVFbXB0eUZvclRlc3Rpbmc7CgogIENvbXBpbGVyKAogICAgICB7Q29tcGlsZXJPcHRpb25zIG9wdGlvbnMsCiAgICAgIGFwaS5Db21waWxlck91dHB1dCBvdXRwdXRQcm92aWRlciwKICAgICAgdGhpcy5lbnZpcm9ubWVudDogY29uc3QgX0VtcHR5RW52aXJvbm1lbnQoKSwKICAgICAgTWFrZVJlcG9ydGVyRnVuY3Rpb24gbWFrZVJlcG9ydGVyfSkKICAgICAgOiB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHsKICAgIG9wdGlvbnMuZGVyaXZlT3B0aW9ucygpOwogICAgb3B0aW9ucy52YWxpZGF0ZSgpOwoKICAgIGFic3RyYWN0VmFsdWVTdHJhdGVneSA9IG9wdGlvbnMudXNlVHJpdmlhbEFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICA/IGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlU3RyYXRlZ3koKQogICAgICAgIDogY29uc3QgVHlwZU1hc2tTdHJhdGVneSgpOwogICAgQ29tcGlsZXJUYXNrIGtlcm5lbEZyb250RW5kVGFzazsKICAgIHNlbGZUYXNrID0gbmV3IEdlbmVyaWNUYXNrKCdzZWxmJywgbWVhc3VyZXIpOwogICAgX291dHB1dFByb3ZpZGVyID0gbmV3IF9Db21waWxlck91dHB1dCh0aGlzLCBvdXRwdXRQcm92aWRlcik7CiAgICBpZiAobWFrZVJlcG9ydGVyICE9IG51bGwpIHsKICAgICAgX3JlcG9ydGVyID0gbWFrZVJlcG9ydGVyKHRoaXMsIG9wdGlvbnMpOwogICAgfSBlbHNlIHsKICAgICAgX3JlcG9ydGVyID0gbmV3IENvbXBpbGVyRGlhZ25vc3RpY1JlcG9ydGVyKHRoaXMsIG9wdGlvbnMpOwogICAgfQogICAga2VybmVsRnJvbnRFbmRUYXNrID0gbmV3IEdlbmVyaWNUYXNrKCdGcm9udCBlbmQnLCBtZWFzdXJlcik7CiAgICBmcm9udGVuZFN0cmF0ZWd5ID0gbmV3IEtlcm5lbEZyb250ZW5kU3RyYXRlZ3koCiAgICAgICAga2VybmVsRnJvbnRFbmRUYXNrLCBvcHRpb25zLCByZXBvcnRlciwgZW52aXJvbm1lbnQpOwogICAgYmFja2VuZFN0cmF0ZWd5ID0gY3JlYXRlQmFja2VuZFN0cmF0ZWd5KCk7CiAgICBfaW1wYWN0Q2FjaGUgPSA8RW50aXR5LCBXb3JsZEltcGFjdD57fTsKICAgIF9pbXBhY3RDYWNoZURlbGV0ZXIgPSBuZXcgX01hcEltcGFjdENhY2hlRGVsZXRlcihfaW1wYWN0Q2FjaGUpOwoKICAgIGlmIChvcHRpb25zLnNob3dJbnRlcm5hbFByb2dyZXNzKSB7CiAgICAgIHByb2dyZXNzID0gbmV3IEludGVyYWN0aXZlUHJvZ3Jlc3MoKTsKICAgIH0KCiAgICBlbnF1ZXVlciA9IG5ldyBFbnF1ZXVlVGFzayh0aGlzKTsKCiAgICB0YXNrcyA9IFsKICAgICAga2VybmVsTG9hZGVyID0gbmV3IEtlcm5lbExvYWRlclRhc2soCiAgICAgICAgICBvcHRpb25zLCBwcm92aWRlciwgX291dHB1dFByb3ZpZGVyLCByZXBvcnRlciwgbWVhc3VyZXIpLAogICAgICBrZXJuZWxGcm9udEVuZFRhc2ssCiAgICAgIGdsb2JhbEluZmVyZW5jZSA9IG5ldyBHbG9iYWxUeXBlSW5mZXJlbmNlVGFzayh0aGlzKSwKICAgICAgZGVmZXJyZWRMb2FkVGFzayA9IGZyb250ZW5kU3RyYXRlZ3kuY3JlYXRlRGVmZXJyZWRMb2FkVGFzayh0aGlzKSwKICAgICAgLy8gW2VucXVldWVyXSBpcyBjcmVhdGVkIGVhcmxpZXIgYmVjYXVzZSBpdCBjb250YWlucyB0aGUgcmVzb2x1dGlvbiB3b3JsZAogICAgICAvLyBvYmplY3RzIG5lZWRlZCBieSBvdGhlciB0YXNrcy4KICAgICAgZW5xdWV1ZXIsCiAgICAgIGR1bXBJbmZvVGFzayA9IG5ldyBEdW1wSW5mb1Rhc2sodGhpcyksCiAgICAgIHNlbGZUYXNrLAogICAgICBzZXJpYWxpemF0aW9uVGFzayA9IG5ldyBTZXJpYWxpemF0aW9uVGFzaygKICAgICAgICAgIG9wdGlvbnMsIHJlcG9ydGVyLCBwcm92aWRlciwgb3V0cHV0UHJvdmlkZXIsIG1lYXN1cmVyKSwKICAgIF07CgogICAgdGFza3MuYWRkQWxsKGJhY2tlbmRTdHJhdGVneS50YXNrcyk7CiAgfQoKICAvLy8gQ3JlYXRlcyB0aGUgYmFja2VuZCBzdHJhdGVneS4KICAvLy8KICAvLy8gT3ZlcnJpZGUgdGhpcyB0byBtb2NrIHRoZSBiYWNrZW5kIHN0cmF0ZWd5IGZvciB0ZXN0aW5nLgogIEJhY2tlbmRTdHJhdGVneSBjcmVhdGVCYWNrZW5kU3RyYXRlZ3koKSB7CiAgICByZXR1cm4gbmV3IEpzQmFja2VuZFN0cmF0ZWd5KHRoaXMpOwogIH0KCiAgUmVzb2x1dGlvbldvcmxkQnVpbGRlciBnZXQgcmVzb2x1dGlvbldvcmxkQnVpbGRlciA9PgogICAgICBlbnF1ZXVlci5yZXNvbHV0aW9uLndvcmxkQnVpbGRlcjsKCiAgQ29kZWdlbldvcmxkQnVpbGRlciBnZXQgY29kZWdlbldvcmxkQnVpbGRlciB7CiAgICBhc3NlcnQoCiAgICAgICAgX2NvZGVnZW5Xb3JsZEJ1aWxkZXIgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdChOT19MT0NBVElPTl9TUEFOTkFCTEUsCiAgICAgICAgICAgICJDb2RlZ2VuV29ybGRCdWlsZGVyIGhhcyBub3QgYmVlbiBjcmVhdGVkIHlldC4iKSk7CiAgICByZXR1cm4gX2NvZGVnZW5Xb3JsZEJ1aWxkZXI7CiAgfQoKICBDb2RlZ2VuV29ybGQgY29kZWdlbldvcmxkRm9yVGVzdGluZzsKCiAgYm9vbCBnZXQgZGlzYWJsZVR5cGVJbmZlcmVuY2UgPT4KICAgICAgb3B0aW9ucy5kaXNhYmxlVHlwZUluZmVyZW5jZSB8fCBjb21waWxhdGlvbkZhaWxlZDsKCiAgLy8gQ29tcGlsZXMgdGhlIGRhcnQgc2NyaXB0IGF0IFt1cmldLgogIC8vCiAgLy8gVGhlIHJlc3VsdGluZyBmdXR1cmUgd2lsbCBjb21wbGV0ZSB3aXRoIHRydWUgaWYgdGhlIGNvbXBpbGF0aW9uCiAgLy8gc3VjY2VlZGVkLgogIEZ1dHVyZTxib29sPiBydW4oVXJpIHVyaSkgPT4gc2VsZlRhc2subWVhc3VyZVN1YnRhc2soInJ1biIsICgpIHsKICAgICAgICBtZWFzdXJlci5zdGFydFdhbGxDbG9jaygpOwoKICAgICAgICByZXR1cm4gbmV3IEZ1dHVyZS5zeW5jKCgpID0+IHJ1bkludGVybmFsKHVyaSkpCiAgICAgICAgICAgIC5jYXRjaEVycm9yKChlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSA9PgogICAgICAgICAgICAgICAgX3JlcG9ydGVyLm9uRXJyb3IodXJpLCBlcnJvciwgc3RhY2tUcmFjZSkpCiAgICAgICAgICAgIC53aGVuQ29tcGxldGUoKCkgewogICAgICAgICAgbWVhc3VyZXIuc3RvcFdhbGxDbG9jaygpOwogICAgICAgIH0pLnRoZW4oKF8pIHsKICAgICAgICAgIHJldHVybiAhY29tcGlsYXRpb25GYWlsZWQ7CiAgICAgICAgfSk7CiAgICAgIH0pOwoKICBGdXR1cmUgcnVuSW50ZXJuYWwoVXJpIHVyaSkgYXN5bmMgewogICAgY2xlYXJTdGF0ZSgpOwogICAgYXNzZXJ0KHVyaSAhPSBudWxsKTsKICAgIC8vIEFzIGZhciBhcyBJIGNhbiB0ZWxsLCB0aGlzIGJyYW5jaCBpcyBvbmx5IHVzZWQgYnkgdGVzdCBjb2RlLgogICAgcmVwb3J0ZXIubG9nKCdDb21waWxpbmcgJHVyaSAoJHtvcHRpb25zLmJ1aWxkSWR9KScpOwoKICAgIGlmIChvcHRpb25zLnJlYWREYXRhVXJpICE9IG51bGwpIHsKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgZ2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgPQogICAgICAgICAgYXdhaXQgc2VyaWFsaXphdGlvblRhc2suZGVzZXJpYWxpemVHbG9iYWxUeXBlSW5mZXJlbmNlKAogICAgICAgICAgICAgIGVudmlyb25tZW50LCBhYnN0cmFjdFZhbHVlU3RyYXRlZ3kpOwogICAgICBpZiAob3B0aW9ucy5kZWJ1Z0dsb2JhbEluZmVyZW5jZSkgewogICAgICAgIHBlcmZvcm1HbG9iYWxUeXBlSW5mZXJlbmNlKGdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzLmNsb3NlZFdvcmxkKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgYXdhaXQgZ2VuZXJhdGVKYXZhU2NyaXB0Q29kZShnbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyk7CiAgICB9IGVsc2UgewogICAgICBLZXJuZWxSZXN1bHQgcmVzdWx0ID0gYXdhaXQga2VybmVsTG9hZGVyLmxvYWQodXJpKTsKICAgICAgcmVwb3J0ZXIubG9nKCJLZXJuZWwgbG9hZCBjb21wbGV0ZSIpOwogICAgICBpZiAocmVzdWx0ID09IG51bGwpIHJldHVybjsKICAgICAgaWYgKGNvbXBpbGF0aW9uRmFpbGVkKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChvcHRpb25zLmNmZU9ubHkpIHJldHVybjsKCiAgICAgIGZyb250ZW5kU3RyYXRlZ3kucmVnaXN0ZXJMb2FkZWRMaWJyYXJpZXMocmVzdWx0KTsKCiAgICAgIC8vIFRPRE8oZWZvcnR1bmEsIHNpZ211bmQpOiBUaGVzZSB2YWxpZGF0aW9uIHN0ZXBzIHNob3VsZCBiZSBkb25lIGluIHRoZQogICAgICAvLyBmcm9udCBlbmQgZm9yIHRoZSBLZXJuZWwgcGF0aCBzaW5jZSBLZXJuZWwgZG9lc24ndCBoYXZlIHRoZSBub3Rpb24gb2YKICAgICAgLy8gaW1wb3J0cyAoZXZlcnl0aGluZyBoYXMgYWxyZWFkeSBiZWVuIHJlc29sdmVkKS4gKFNlZQogICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMjkzNjgpCiAgICAgIGlmIChyZXN1bHQubGlicmFyaWVzLmNvbnRhaW5zKFVyaXMuZGFydF9taXJyb3JzKSkgewogICAgICAgIHJlcG9ydGVyLnJlcG9ydFdhcm5pbmdNZXNzYWdlKE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwKICAgICAgICAgICAgTWVzc2FnZUtpbmQuTUlSUk9SU19MSUJSQVJZX05PVF9TVVBQT1JUX1dJVEhfQ0ZFKTsKICAgICAgfQoKICAgICAgYXdhaXQgY29tcGlsZUZyb21LZXJuZWwocmVzdWx0LnJvb3RMaWJyYXJ5VXJpLCByZXN1bHQubGlicmFyaWVzKTsKICAgIH0KICB9CgogIHZvaWQgZ2VuZXJhdGVKYXZhU2NyaXB0Q29kZSgKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgZ2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMpIGFzeW5jIHsKICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCA9IGdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzLmNsb3NlZFdvcmxkOwogICAgYmFja2VuZFN0cmF0ZWd5LnJlZ2lzdGVySkNsb3NlZFdvcmxkKGNsb3NlZFdvcmxkKTsKICAgIHBoYXNlID0gUEhBU0VfQ09NUElMSU5HOwogICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuSW5wdXRzID0KICAgICAgICBiYWNrZW5kU3RyYXRlZ3kub25Db2RlZ2VuU3RhcnQoZ2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMpOwoKICAgIGlmIChvcHRpb25zLnJlYWRDb2RlZ2VuVXJpICE9IG51bGwpIHsKICAgICAgQ29kZWdlblJlc3VsdHMgY29kZWdlblJlc3VsdHMgPQogICAgICAgICAgYXdhaXQgc2VyaWFsaXphdGlvblRhc2suZGVzZXJpYWxpemVDb2RlZ2VuKAogICAgICAgICAgICAgIGJhY2tlbmRTdHJhdGVneSwgZ2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMsIGNvZGVnZW5JbnB1dHMpOwogICAgICByZXBvcnRlci5sb2coJ0NvbXBpbGluZyBtZXRob2RzJyk7CiAgICAgIHJ1bkNvZGVnZW5FbnF1ZXVlcihjb2RlZ2VuUmVzdWx0cyk7CiAgICB9IGVsc2UgewogICAgICByZXBvcnRlci5sb2coJ0NvbXBpbGluZyBtZXRob2RzJyk7CiAgICAgIENvZGVnZW5SZXN1bHRzIGNvZGVnZW5SZXN1bHRzID0gbmV3IE9uRGVtYW5kQ29kZWdlblJlc3VsdHMoCiAgICAgICAgICBnbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cywKICAgICAgICAgIGNvZGVnZW5JbnB1dHMsCiAgICAgICAgICBiYWNrZW5kU3RyYXRlZ3kuZnVuY3Rpb25Db21waWxlcik7CiAgICAgIGlmIChvcHRpb25zLndyaXRlQ29kZWdlblVyaSAhPSBudWxsKSB7CiAgICAgICAgc2VyaWFsaXphdGlvblRhc2suc2VyaWFsaXplQ29kZWdlbihiYWNrZW5kU3RyYXRlZ3ksIGNvZGVnZW5SZXN1bHRzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBydW5Db2RlZ2VuRW5xdWV1ZXIoY29kZWdlblJlc3VsdHMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gQ2xlYXIgdGhlIGludGVybmFsIGNvbXBpbGVyIHN0YXRlIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzIHdoZW4gaW52b2tpbmcKICAvLy8gdGhlIGNvbXBpbGVyIG11bHRpcGxlIHRpbWVzIChlLmcuIGluIGJhdGNoIG1vZGUpLgogIC8vIFRPRE8oYWhlKTogaW1wbGVtZW50IGEgYmV0dGVyIG1lY2hhbmlzbSB3aGVyZSB3ZSBjYW4gc3RvcmUKICAvLyBzdWNoIGNhY2hlcyBpbiB0aGUgY29tcGlsZXIgYW5kIGdldCBhY2Nlc3MgdG8gdGhlbSB0aHJvdWdoIGEKICAvLyBzdWl0YWJseSBtYWludGFpbmVkIHN0YXRpYyByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgY29tcGlsZXIuCiAgdm9pZCBjbGVhclN0YXRlKCkgewogICAgY2xlYXJTdHJpbmdUb2tlbkNhbm9uaWNhbGl6ZXIoKTsKICAgIFNlbGVjdG9yLmNhbm9uaWNhbGl6ZWRWYWx1ZXMuY2xlYXIoKTsKCiAgICAvLyBUaGUgc2VsZWN0b3Igb2JqZWN0cyBoZWxkIGluIHN0YXRpYyBmaWVsZHMgbXVzdCByZW1haW4gY2Fub25pY2FsLgogICAgZm9yIChTZWxlY3RvciBzZWxlY3RvciBpbiBTZWxlY3RvcnMuQUxMKSB7CiAgICAgIFNlbGVjdG9yLmNhbm9uaWNhbGl6ZWRWYWx1ZXMKICAgICAgICAgIC5wdXRJZkFic2VudChzZWxlY3Rvci5oYXNoQ29kZSwgKCkgPT4gPFNlbGVjdG9yPltdKQogICAgICAgICAgLmFkZChzZWxlY3Rvcik7CiAgICB9CiAgfQoKICAvLy8gU3RhcnRzIHRoZSByZXNvbHV0aW9uIHBoYXNlLCBjcmVhdGluZyB0aGUgW1Jlc29sdXRpb25FbnF1ZXVlcl0gaWYgbm90CiAgLy8vIGFscmVhZHkgY3JlYXRlZC4KICAvLy8KICAvLy8gRHVyaW5nIG5vcm1hbCBjb21waWxhdGlvbiByZXNvbHV0aW9uIG9ubHkgc3RhcnRlZCBvbmNlLCBidXQgdGhyb3VnaAogIC8vLyBbYW5hbHl6ZVVyaV0gcmVzb2x1dGlvbiBpcyBzdGFydGVkIHJlcGVhdGVkbHkuCiAgUmVzb2x1dGlvbkVucXVldWVyIHN0YXJ0UmVzb2x1dGlvbigpIHsKICAgIFJlc29sdXRpb25FbnF1ZXVlciByZXNvbHV0aW9uRW5xdWV1ZXI7CiAgICBpZiAoZW5xdWV1ZXIuaGFzUmVzb2x1dGlvbikgewogICAgICByZXNvbHV0aW9uRW5xdWV1ZXIgPSBlbnF1ZXVlci5yZXNvbHV0aW9uOwogICAgfSBlbHNlIHsKICAgICAgcmVzb2x1dGlvbkVucXVldWVyID0gZW5xdWV1ZXIuY3JlYXRlUmVzb2x1dGlvbkVucXVldWVyKCk7CiAgICAgIGZyb250ZW5kU3RyYXRlZ3kub25SZXNvbHV0aW9uU3RhcnQoKTsKICAgIH0KICAgIHJldHVybiByZXNvbHV0aW9uRW5xdWV1ZXI7CiAgfQoKICBKQ2xvc2VkV29ybGQgY29tcHV0ZUNsb3NlZFdvcmxkKFVyaSByb290TGlicmFyeVVyaSwgSXRlcmFibGU8VXJpPiBsaWJyYXJpZXMpIHsKICAgIFJlc29sdXRpb25FbnF1ZXVlciByZXNvbHV0aW9uRW5xdWV1ZXIgPSBzdGFydFJlc29sdXRpb24oKTsKICAgIGZvciAoTGlicmFyeUVudGl0eSBsaWJyYXJ5CiAgICAgICAgaW4gZnJvbnRlbmRTdHJhdGVneS5lbGVtZW50RW52aXJvbm1lbnQubGlicmFyaWVzKSB7CiAgICAgIGZyb250ZW5kU3RyYXRlZ3kuZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hDbGFzcyhsaWJyYXJ5LAogICAgICAgICAgKENsYXNzRW50aXR5IGNscykgewogICAgICAgIC8vIFJlZ2lzdGVyIGFsbCBjbGFzc2VzIGVhZ2VybHkgdG8gb3B0aW1pemUgY2xvc2VkIHdvcmxkIGNvbXB1dGF0aW9uIGluCiAgICAgICAgLy8gYENsYXNzV29ybGRCdWlsZGVyLmlzSW5oZXJpdGVkSW5TdWJ0eXBlT2ZgLgogICAgICAgIHJlc29sdXRpb25FbnF1ZXVlci53b3JsZEJ1aWxkZXIucmVnaXN0ZXJDbGFzcyhjbHMpOwogICAgICB9KTsKICAgIH0KICAgIFdvcmxkSW1wYWN0QnVpbGRlckltcGwgbWFpbkltcGFjdCA9IG5ldyBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsKCk7CiAgICBGdW5jdGlvbkVudGl0eSBtYWluRnVuY3Rpb24gPSBmcm9udGVuZFN0cmF0ZWd5LmNvbXB1dGVNYWluKG1haW5JbXBhY3QpOwoKICAgIC8vIEluIG9yZGVyIHRvIHNlZSBpZiBhIGxpYnJhcnkgaXMgZGVmZXJyZWQsIHdlIG11c3QgY29tcHV0ZSB0aGUKICAgIC8vIGNvbXBpbGUtdGltZSBjb25zdGFudHMgdGhhdCBhcmUgbWV0YWRhdGEuICBUaGlzIG1lYW5zIGFkZGluZwogICAgLy8gc29tZXRoaW5nIHRvIHRoZSByZXNvbHV0aW9uIHF1ZXVlLiAgU28gd2UgY2Fubm90IHdhaXQgd2l0aAogICAgLy8gdGhpcyB1bnRpbCBhZnRlciB0aGUgcmVzb2x1dGlvbiBxdWV1ZSBpcyBwcm9jZXNzZWQuCiAgICBkZWZlcnJlZExvYWRUYXNrLmJlZm9yZVJlc29sdXRpb24ocm9vdExpYnJhcnlVcmksIGxpYnJhcmllcyk7CgogICAgaW1wYWN0U3RyYXRlZ3kgPSBuZXcgSmF2YVNjcmlwdEltcGFjdFN0cmF0ZWd5KAogICAgICAgIGltcGFjdENhY2hlRGVsZXRlciwgZHVtcEluZm9UYXNrLAogICAgICAgIHN1cHBvcnREZWZlcnJlZExvYWQ6IGRlZmVycmVkTG9hZFRhc2suaXNQcm9ncmFtU3BsaXQsCiAgICAgICAgc3VwcG9ydER1bXBJbmZvOiBvcHRpb25zLmR1bXBJbmZvKTsKCiAgICBwaGFzZSA9IFBIQVNFX1JFU09MVklORzsKICAgIHJlc29sdXRpb25FbnF1ZXVlci5hcHBseUltcGFjdChtYWluSW1wYWN0KTsKICAgIGlmIChvcHRpb25zLnNob3dJbnRlcm5hbFByb2dyZXNzKSByZXBvcnRlci5sb2coJ0NvbXB1dGluZyBjbG9zZWQgd29ybGQnKTsKCiAgICBwcm9jZXNzUXVldWUoCiAgICAgICAgZnJvbnRlbmRTdHJhdGVneS5lbGVtZW50RW52aXJvbm1lbnQsIHJlc29sdXRpb25FbnF1ZXVlciwgbWFpbkZ1bmN0aW9uLAogICAgICAgIG9uUHJvZ3Jlc3M6IHNob3dSZXNvbHV0aW9uUHJvZ3Jlc3MpOwogICAgZnJvbnRlbmRTdHJhdGVneS5vblJlc29sdXRpb25FbmQoKTsKICAgIHJlc29sdXRpb25FbnF1ZXVlci5sb2dTdW1tYXJ5KHJlcG9ydGVyLmxvZyk7CgogICAgX3JlcG9ydGVyLnJlcG9ydFN1cHByZXNzZWRNZXNzYWdlc1N1bW1hcnkoKTsKCiAgICBpZiAoY29tcGlsYXRpb25GYWlsZWQpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgYXNzZXJ0KG1haW5GdW5jdGlvbiAhPSBudWxsKTsKICAgIGNoZWNrUXVldWUocmVzb2x1dGlvbkVucXVldWVyKTsKCiAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQgPSBjbG9zZVJlc29sdXRpb24obWFpbkZ1bmN0aW9uKTsKICAgIGlmIChyZXRhaW5EYXRhRm9yVGVzdGluZykgewogICAgICBiYWNrZW5kQ2xvc2VkV29ybGRGb3JUZXN0aW5nID0gY2xvc2VkV29ybGQ7CiAgICB9CiAgICByZXR1cm4gY2xvc2VkV29ybGQ7CiAgfQoKICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBwZXJmb3JtR2xvYmFsVHlwZUluZmVyZW5jZSgKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBGdW5jdGlvbkVudGl0eSBtYWluRnVuY3Rpb24gPSBjbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQubWFpbkZ1bmN0aW9uOwogICAgcmVwb3J0ZXIubG9nKCdQZXJmb3JtaW5nIGdsb2JhbCB0eXBlIGluZmVyZW5jZScpOwogICAgSW5mZXJyZWREYXRhQnVpbGRlciBpbmZlcnJlZERhdGFCdWlsZGVyID0KICAgICAgICBuZXcgSW5mZXJyZWREYXRhQnVpbGRlckltcGwoY2xvc2VkV29ybGQuYW5ub3RhdGlvbnNEYXRhKTsKICAgIHJldHVybiBnbG9iYWxJbmZlcmVuY2UucnVuR2xvYmFsVHlwZUluZmVyZW5jZSgKICAgICAgICBtYWluRnVuY3Rpb24sIGNsb3NlZFdvcmxkLCBpbmZlcnJlZERhdGFCdWlsZGVyKTsKICB9CgogIHZvaWQgcnVuQ29kZWdlbkVucXVldWVyKENvZGVnZW5SZXN1bHRzIGNvZGVnZW5SZXN1bHRzKSB7CiAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBnbG9iYWxJbmZlcmVuY2VSZXN1bHRzID0KICAgICAgICBjb2RlZ2VuUmVzdWx0cy5nbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0czsKICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCA9IGdsb2JhbEluZmVyZW5jZVJlc3VsdHMuY2xvc2VkV29ybGQ7CiAgICBDb2RlZ2VuSW5wdXRzIGNvZGVnZW5JbnB1dHMgPSBjb2RlZ2VuUmVzdWx0cy5jb2RlZ2VuSW5wdXRzOwogICAgRW5xdWV1ZXIgY29kZWdlbkVucXVldWVyID0gZW5xdWV1ZXIuY3JlYXRlQ29kZWdlbkVucXVldWVyKAogICAgICAgIGNsb3NlZFdvcmxkLCBnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLCBjb2RlZ2VuSW5wdXRzLCBjb2RlZ2VuUmVzdWx0cyk7CiAgICBfY29kZWdlbldvcmxkQnVpbGRlciA9IGNvZGVnZW5FbnF1ZXVlci53b3JsZEJ1aWxkZXI7CgogICAgRnVuY3Rpb25FbnRpdHkgbWFpbkZ1bmN0aW9uID0gY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50Lm1haW5GdW5jdGlvbjsKICAgIHByb2Nlc3NRdWV1ZShjbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQsIGNvZGVnZW5FbnF1ZXVlciwgbWFpbkZ1bmN0aW9uLAogICAgICAgIG9uUHJvZ3Jlc3M6IHNob3dDb2RlZ2VuUHJvZ3Jlc3MpOwogICAgY29kZWdlbkVucXVldWVyLmxvZ1N1bW1hcnkocmVwb3J0ZXIubG9nKTsKICAgIENvZGVnZW5Xb3JsZCBjb2RlZ2VuV29ybGQgPSBjb2RlZ2VuV29ybGRCdWlsZGVyLmNsb3NlKCk7CiAgICBpZiAocmV0YWluRGF0YUZvclRlc3RpbmcpIHsKICAgICAgY29kZWdlbldvcmxkRm9yVGVzdGluZyA9IGNvZGVnZW5Xb3JsZDsKICAgIH0KICAgIHJlcG9ydGVyLmxvZygnRW1pdHRpbmcgSmF2YVNjcmlwdCcpOwogICAgaW50IHByb2dyYW1TaXplID0gYmFja2VuZFN0cmF0ZWd5LmFzc2VtYmxlUHJvZ3JhbShjbG9zZWRXb3JsZCwKICAgICAgICBnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLmluZmVycmVkRGF0YSwgY29kZWdlbklucHV0cywgY29kZWdlbldvcmxkKTsKCiAgICBpZiAob3B0aW9ucy5kdW1wSW5mbykgewogICAgICBkdW1wSW5mb1Rhc2sucmVwb3J0U2l6ZShwcm9ncmFtU2l6ZSk7CiAgICAgIGR1bXBJbmZvVGFzay5kdW1wSW5mbyhjbG9zZWRXb3JsZCwgZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cyk7CiAgICB9CgogICAgYmFja2VuZFN0cmF0ZWd5Lm9uQ29kZWdlbkVuZChjb2RlZ2VuSW5wdXRzKTsKCiAgICBjaGVja1F1ZXVlKGNvZGVnZW5FbnF1ZXVlcik7CiAgfQoKICB2b2lkIGNvbXBpbGVGcm9tS2VybmVsKFVyaSByb290TGlicmFyeVVyaSwgSXRlcmFibGU8VXJpPiBsaWJyYXJpZXMpIHsKICAgIF91c2VyQ29kZUxvY2F0aW9ucy5hZGQobmV3IENvZGVMb2NhdGlvbihyb290TGlicmFyeVVyaSkpOwogICAgc2VsZlRhc2subWVhc3VyZVN1YnRhc2soImNvbXBpbGVGcm9tS2VybmVsIiwgKCkgewogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQgPSBzZWxmVGFzay5tZWFzdXJlU3VidGFzaygiY29tcHV0ZUNsb3NlZFdvcmxkIiwKICAgICAgICAgICgpID0+IGNvbXB1dGVDbG9zZWRXb3JsZChyb290TGlicmFyeVVyaSwgbGlicmFyaWVzKSk7CiAgICAgIGlmIChzdG9wQWZ0ZXJDbG9zZWRXb3JsZCkgcmV0dXJuOwogICAgICBpZiAoY2xvc2VkV29ybGQgIT0gbnVsbCkgewogICAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGdsb2JhbEluZmVyZW5jZVJlc3VsdHMgPQogICAgICAgICAgICBwZXJmb3JtR2xvYmFsVHlwZUluZmVyZW5jZShjbG9zZWRXb3JsZCk7CiAgICAgICAgaWYgKG9wdGlvbnMud3JpdGVEYXRhVXJpICE9IG51bGwpIHsKICAgICAgICAgIHNlcmlhbGl6YXRpb25UYXNrCiAgICAgICAgICAgICAgLnNlcmlhbGl6ZUdsb2JhbFR5cGVJbmZlcmVuY2UoZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cyk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChvcHRpb25zLnRlc3RNb2RlKSB7CiAgICAgICAgICBTZXJpYWxpemF0aW9uU3RyYXRlZ3kgc3RyYXRlZ3kgPQogICAgICAgICAgICAgIGNvbnN0IEJ5dGVzSW5NZW1vcnlTZXJpYWxpemF0aW9uU3RyYXRlZ3koKTsKICAgICAgICAgIExpc3Q8aW50PiBpckRhdGEgPQogICAgICAgICAgICAgIHN0cmF0ZWd5LnNlcmlhbGl6ZUNvbXBvbmVudChnbG9iYWxJbmZlcmVuY2VSZXN1bHRzKTsKICAgICAgICAgIExpc3Qgd29ybGREYXRhID0gc3RyYXRlZ3kuc2VyaWFsaXplRGF0YShnbG9iYWxJbmZlcmVuY2VSZXN1bHRzKTsKICAgICAgICAgIGdsb2JhbEluZmVyZW5jZVJlc3VsdHMgPSBzdHJhdGVneS5kZXNlcmlhbGl6ZURhdGEoCiAgICAgICAgICAgICAgb3B0aW9ucywKICAgICAgICAgICAgICByZXBvcnRlciwKICAgICAgICAgICAgICBlbnZpcm9ubWVudCwKICAgICAgICAgICAgICBhYnN0cmFjdFZhbHVlU3RyYXRlZ3ksCiAgICAgICAgICAgICAgc3RyYXRlZ3kuZGVzZXJpYWxpemVDb21wb25lbnQoaXJEYXRhKSwKICAgICAgICAgICAgICB3b3JsZERhdGEpOwogICAgICAgIH0KICAgICAgICBpZiAoc3RvcEFmdGVyVHlwZUluZmVyZW5jZSkgcmV0dXJuOwogICAgICAgIGdlbmVyYXRlSmF2YVNjcmlwdENvZGUoZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cyk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgLy8vIFBlcmZvcm0gdGhlIHN0ZXBzIG5lZWRlZCB0byBmdWxseSBlbmQgdGhlIHJlc29sdXRpb24gcGhhc2UuCiAgSkNsb3NlZFdvcmxkIGNsb3NlUmVzb2x1dGlvbihGdW5jdGlvbkVudGl0eSBtYWluRnVuY3Rpb24pIHsKICAgIHBoYXNlID0gUEhBU0VfRE9ORV9SRVNPTFZJTkc7CgogICAgS0Nsb3NlZFdvcmxkIGtDbG9zZWRXb3JsZCA9IHJlc29sdXRpb25Xb3JsZEJ1aWxkZXIuY2xvc2VXb3JsZChyZXBvcnRlcik7CiAgICBPdXRwdXRVbml0RGF0YSByZXN1bHQgPSBkZWZlcnJlZExvYWRUYXNrLnJ1bihtYWluRnVuY3Rpb24sIGtDbG9zZWRXb3JsZCk7CiAgICBKQ2xvc2VkV29ybGQgakNsb3NlZFdvcmxkID0KICAgICAgICBiYWNrZW5kU3RyYXRlZ3kuY3JlYXRlSkNsb3NlZFdvcmxkKGtDbG9zZWRXb3JsZCwgcmVzdWx0KTsKICAgIHJldHVybiBqQ2xvc2VkV29ybGQ7CiAgfQoKICAvLy8gRW1wdHkgdGhlIFtlbnF1ZXVlcl0gcXVldWUuCiAgdm9pZCBlbXB0eVF1ZXVlKEVucXVldWVyIGVucXVldWVyLCB7dm9pZCBvblByb2dyZXNzKEVucXVldWVyIGVucXVldWVyKX0pIHsKICAgIHNlbGZUYXNrLm1lYXN1cmVTdWJ0YXNrKCJlbXB0eVF1ZXVlIiwgKCkgewogICAgICBlbnF1ZXVlci5mb3JFYWNoKChXb3JrSXRlbSB3b3JrKSB7CiAgICAgICAgaWYgKG9uUHJvZ3Jlc3MgIT0gbnVsbCkgewogICAgICAgICAgb25Qcm9ncmVzcyhlbnF1ZXVlcik7CiAgICAgICAgfQogICAgICAgIHJlcG9ydGVyLndpdGhDdXJyZW50RWxlbWVudCgKICAgICAgICAgICAgd29yay5lbGVtZW50LAogICAgICAgICAgICAoKSA9PiBzZWxmVGFzay5tZWFzdXJlU3VidGFzaygiYXBwbHlJbXBhY3QiLCAoKSB7CiAgICAgICAgICAgICAgICAgIGVucXVldWVyLmFwcGx5SW1wYWN0KAogICAgICAgICAgICAgICAgICAgICAgc2VsZlRhc2subWVhc3VyZVN1YnRhc2soIndvcmsucnVuIiwgKCkgPT4gd29yay5ydW4oKSksCiAgICAgICAgICAgICAgICAgICAgICBpbXBhY3RTb3VyY2U6IHdvcmsuZWxlbWVudCk7CiAgICAgICAgICAgICAgICB9KSk7CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICB2b2lkIHByb2Nlc3NRdWV1ZShFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50LCBFbnF1ZXVlciBlbnF1ZXVlciwKICAgICAgRnVuY3Rpb25FbnRpdHkgbWFpbk1ldGhvZCwKICAgICAge3ZvaWQgb25Qcm9ncmVzcyhFbnF1ZXVlciBlbnF1ZXVlcil9KSB7CiAgICBzZWxmVGFzay5tZWFzdXJlU3VidGFzaygicHJvY2Vzc1F1ZXVlIiwgKCkgewogICAgICBlbnF1ZXVlci5vcGVuKAogICAgICAgICAgaW1wYWN0U3RyYXRlZ3ksCiAgICAgICAgICBtYWluTWV0aG9kLAogICAgICAgICAgZWxlbWVudEVudmlyb25tZW50LmxpYnJhcmllcwogICAgICAgICAgICAgIC5tYXAoKExpYnJhcnlFbnRpdHkgbGlicmFyeSkgPT4gbGlicmFyeS5jYW5vbmljYWxVcmkpKTsKICAgICAgcHJvZ3Jlc3Muc3RhcnRQaGFzZSgpOwogICAgICBlbXB0eVF1ZXVlKGVucXVldWVyLCBvblByb2dyZXNzOiBvblByb2dyZXNzKTsKICAgICAgZW5xdWV1ZXIucXVldWVJc0Nsb3NlZCA9IHRydWU7CiAgICAgIGVucXVldWVyLmNsb3NlKCk7CiAgICAgIC8vIE5vdGlmeSB0aGUgaW1wYWN0IHN0cmF0ZWd5IGltcGFjdHMgYXJlIG5vIGxvbmdlciBuZWVkZWQgZm9yIHRoaXMKICAgICAgLy8gZW5xdWV1ZXIuCiAgICAgIGltcGFjdFN0cmF0ZWd5Lm9uSW1wYWN0VXNlZChlbnF1ZXVlci5pbXBhY3RVc2UpOwogICAgICBhc3NlcnQoY29tcGlsYXRpb25GYWlsZWQgfHwKICAgICAgICAgIGVucXVldWVyLmNoZWNrTm9FbnF1ZXVlZEludm9rZWRJbnN0YW5jZU1ldGhvZHMoZWxlbWVudEVudmlyb25tZW50KSk7CiAgICB9KTsKICB9CgogIC8vLyBQZXJmb3JtIHZhcmlvdXMgY2hlY2tzIG9mIHRoZSBxdWV1ZS4gVGhpcyBpbmNsdWRlcyBjaGVja2luZyB0aGF0IHRoZQogIC8vLyBxdWV1ZXMgYXJlIGVtcHR5IChub3RoaW5nIHdhcyBhZGRlZCBhZnRlciB3ZSBzdG9wcGVkIHByb2Nlc3NpbmcgdGhlCiAgLy8vIHF1ZXVlcykuCiAgY2hlY2tRdWV1ZShFbnF1ZXVlciBlbnF1ZXVlcikgewogICAgZW5xdWV1ZXIuY2hlY2tRdWV1ZUlzRW1wdHkoKTsKICB9CgogIHZvaWQgc2hvd1Jlc29sdXRpb25Qcm9ncmVzcyhFbnF1ZXVlciBlbnF1ZXVlcikgewogICAgYXNzZXJ0KHBoYXNlID09IFBIQVNFX1JFU09MVklORywgJ1VuZXhwZWN0ZWQgcGhhc2U6ICRwaGFzZScpOwogICAgcHJvZ3Jlc3Muc2hvd1Byb2dyZXNzKAogICAgICAgICdSZXNvbHZlZCAnLCBlbnF1ZXVlci5wcm9jZXNzZWRFbnRpdGllcy5sZW5ndGgsICcgZWxlbWVudHMuJyk7CiAgfQoKICB2b2lkIHNob3dDb2RlZ2VuUHJvZ3Jlc3MoRW5xdWV1ZXIgZW5xdWV1ZXIpIHsKICAgIHByb2dyZXNzLnNob3dQcm9ncmVzcygKICAgICAgICAnQ29tcGlsZWQgJywgZW5xdWV1ZXIucHJvY2Vzc2VkRW50aXRpZXMubGVuZ3RoLCAnIG1ldGhvZHMuJyk7CiAgfQoKICB2b2lkIHJlcG9ydERpYWdub3N0aWMoRGlhZ25vc3RpY01lc3NhZ2UgbWVzc2FnZSwKICAgICAgTGlzdDxEaWFnbm9zdGljTWVzc2FnZT4gaW5mb3MsIGFwaS5EaWFnbm9zdGljIGtpbmQpOwoKICB2b2lkIHJlcG9ydENyYXNoSW5Vc2VyQ29kZShTdHJpbmcgbWVzc2FnZSwgZXhjZXB0aW9uLCBzdGFja1RyYWNlKSB7CiAgICByZXBvcnRlci5vbkNyYXNoSW5Vc2VyQ29kZShtZXNzYWdlLCBleGNlcHRpb24sIHN0YWNrVHJhY2UpOwogIH0KCiAgLy8vIE1lc3NhZ2VzIGZvciB3aGljaCBjb21waWxlLXRpbWUgZXJyb3JzIGFyZSByZXBvcnRlZCBidXQgY29tcGlsYXRpb24KICAvLy8gY29udGludWVzIHJlZ2FyZGxlc3MuCiAgc3RhdGljIGNvbnN0IExpc3Q8TWVzc2FnZUtpbmQ+IEJFTklHTl9FUlJPUlMgPSBjb25zdCA8TWVzc2FnZUtpbmQ+WwogICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9NRVRBREFUQSwKICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfTUVUQURBVEFfR0VORVJJQywKICBdOwoKICBib29sIG1hcmtDb21waWxhdGlvbkFzRmFpbGVkKERpYWdub3N0aWNNZXNzYWdlIG1lc3NhZ2UsIGFwaS5EaWFnbm9zdGljIGtpbmQpIHsKICAgIGlmIChvcHRpb25zLnRlc3RNb2RlKSB7CiAgICAgIC8vIFdoZW4gaW4gdGVzdCBtb2RlLCBpLmUuIG9uIHRoZSBidWlsZC1ib3QsIHdlIGFsd2F5cyBzdG9wIGNvbXBpbGF0aW9uLgogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChyZXBvcnRlci5vcHRpb25zLmZhdGFsV2FybmluZ3MpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gIUJFTklHTl9FUlJPUlMuY29udGFpbnMobWVzc2FnZS5tZXNzYWdlLmtpbmQpOwogIH0KCiAgdm9pZCBmYXRhbERpYWdub3N0aWNSZXBvcnRlZChEaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlLAogICAgICBMaXN0PERpYWdub3N0aWNNZXNzYWdlPiBpbmZvcywgYXBpLkRpYWdub3N0aWMga2luZCkgewogICAgaWYgKG1hcmtDb21waWxhdGlvbkFzRmFpbGVkKG1lc3NhZ2UsIGtpbmQpKSB7CiAgICAgIGNvbXBpbGF0aW9uRmFpbGVkID0gdHJ1ZTsKICAgIH0KICB9CgogIC8vLyBIZWxwZXIgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyBkZWNsYXJlZCB3aXRoaW4KICAvLy8gJ3VzZXIgY29kZScuCiAgLy8vCiAgLy8vIFNlZSBbaW5Vc2VyQ29kZV0gZm9yIHdoYXQgZGVmaW5lcyAndXNlciBjb2RlJy4KICBib29sIGN1cnJlbnRseUluVXNlckNvZGUoKSB7CiAgICByZXR1cm4gaW5Vc2VyQ29kZShjdXJyZW50RWxlbWVudCk7CiAgfQoKICAvLy8gSGVscGVyIGZvciBkZXRlcm1pbmluZyB3aGV0aGVyIFtlbGVtZW50XSBpcyBkZWNsYXJlZCB3aXRoaW4gJ3VzZXIgY29kZScuCiAgLy8vCiAgLy8vIFdoYXQgY29uc3RpdHV0ZXMgJ3VzZXIgY29kZScgaXMgZGVmaW5lZCBieSB0aGUgVVJJKHMpIHByb3ZpZGVkIGJ5IHRoZQogIC8vLyBlbnRyeSBwb2ludChzKSBvZiBjb21waWxhdGlvbiBvciBhbmFseXNpczoKICAvLy8KICAvLy8gSWYgYW4gZW50cnlwb2ludCBVUkkgdXNlcyB0aGUgJ3BhY2thZ2UnIHNjaGVtZSB0aGVuIGV2ZXJ5IGxpYnJhcnkgZnJvbQogIC8vLyB0aGF0IHNhbWUgcGFja2FnZSBpcyBjb25zaWRlcmVkIHRvIGJlIGluIHVzZXIgY29kZS4gRm9yIGluc3RhbmNlLCBpZgogIC8vLyBhbiBlbnRyeSBwb2ludCBVUkkgaXMgJ3BhY2thZ2U6Zm9vL2Jhci5kYXJ0JyB0aGVuIGV2ZXJ5IGxpYnJhcnkgd2hvc2UKICAvLy8gY2Fub25pY2FsIFVSSSBzdGFydHMgd2l0aCAncGFja2FnZTpmb28vJyBpcyBpbiB1c2VyIGNvZGUuCiAgLy8vCiAgLy8vIElmIGFuIGVudHJ5cG9pbnQgVVJJIHVzZXMgYW5vdGhlciBzY2hlbWUgdGhhbiAncGFja2FnZScgdGhlbiBldmVyeSBsaWJyYXJ5CiAgLy8vIHdpdGggdGhhdCBzY2hlbWUgaXMgaW4gdXNlciBjb2RlLiBGb3IgaW5zdGFuY2UsIGFuIGVudHJ5IHBvaW50IFVSSSBpcwogIC8vLyAnZmlsZTovLy9mb28uZGFydCcgdGhlbiBldmVyeSBsaWJyYXJ5IHdob3NlIGNhbm9uaWNhbCBVUkkgc2NoZW1lIGlzCiAgLy8vICdmaWxlJyBpcyBpbiB1c2VyIGNvZGUuCiAgLy8vCiAgLy8vIElmIFthc3N1bWVJblVzZXJDb2RlXSBpcyBgdHJ1ZWAsIFtlbGVtZW50XSBpcyBhc3N1bWVkIHRvIGJlIGluIHVzZXIgY29kZQogIC8vLyBpZiBubyBlbnRyeXBvaW50cyBoYXZlIGJlZW4gc2V0LgogIGJvb2wgaW5Vc2VyQ29kZShFbnRpdHkgZWxlbWVudCwge2Jvb2wgYXNzdW1lSW5Vc2VyQ29kZTogZmFsc2V9KSB7CiAgICBpZiAoZWxlbWVudCA9PSBudWxsKSByZXR1cm4gYXNzdW1lSW5Vc2VyQ29kZTsKICAgIFVyaSBsaWJyYXJ5VXJpID0gX3VyaUZyb21FbGVtZW50KGVsZW1lbnQpOwogICAgaWYgKGxpYnJhcnlVcmkgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgaWYgKF91c2VyQ29kZUxvY2F0aW9ucy5pc0VtcHR5ICYmIGFzc3VtZUluVXNlckNvZGUpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIF91c2VyQ29kZUxvY2F0aW9ucy5hbnkoCiAgICAgICAgKENvZGVMb2NhdGlvbiBjb2RlTG9jYXRpb24pID0+IGNvZGVMb2NhdGlvbi5pblNhbWVMb2NhdGlvbihsaWJyYXJ5VXJpKSk7CiAgfQoKICAvLy8gUmV0dXJuIGEgY2Fub25pY2FsIFVSSSBmb3IgdGhlIHNvdXJjZSBvZiBbZWxlbWVudF0uCiAgLy8vCiAgLy8vIEZvciBhIHBhY2thZ2UgbGlicmFyeSB3aXRoIGNhbm9uaWNhbCBVUkkgJ3BhY2thZ2U6Zm9vL2Jhci9iYXouZGFydCcgdGhlCiAgLy8vIHJldHVybiBVUkkgaXMgJ3BhY2thZ2U6Zm9vJy4gRm9yIG5vbi1wYWNrYWdlIGxpYnJhcmllcyB0aGUgcmV0dXJuZWQgVVJJIGlzCiAgLy8vIHRoZSBjYW5vbmljYWwgVVJJIG9mIHRoZSBsaWJyYXJ5IGl0c2VsZi4KICBVcmkgZ2V0Q2Fub25pY2FsVXJpKEVudGl0eSBlbGVtZW50KSB7CiAgICBVcmkgbGlicmFyeVVyaSA9IF91cmlGcm9tRWxlbWVudChlbGVtZW50KTsKICAgIGlmIChsaWJyYXJ5VXJpID09IG51bGwpIHJldHVybiBudWxsOwogICAgaWYgKGxpYnJhcnlVcmkuc2NoZW1lID09ICdwYWNrYWdlJykgewogICAgICBpbnQgc2xhc2hQb3MgPSBsaWJyYXJ5VXJpLnBhdGguaW5kZXhPZignLycpOwogICAgICBpZiAoc2xhc2hQb3MgIT0gLTEpIHsKICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBsaWJyYXJ5VXJpLnBhdGguc3Vic3RyaW5nKDAsIHNsYXNoUG9zKTsKICAgICAgICByZXR1cm4gbmV3IFVyaShzY2hlbWU6ICdwYWNrYWdlJywgcGF0aDogcGFja2FnZU5hbWUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbGlicmFyeVVyaTsKICB9CgogIFVyaSBfdXJpRnJvbUVsZW1lbnQoRW50aXR5IGVsZW1lbnQpIHsKICAgIGlmIChlbGVtZW50IGlzIExpYnJhcnlFbnRpdHkpIHsKICAgICAgcmV0dXJuIGVsZW1lbnQuY2Fub25pY2FsVXJpOwogICAgfSBlbHNlIGlmIChlbGVtZW50IGlzIENsYXNzRW50aXR5KSB7CiAgICAgIHJldHVybiBlbGVtZW50LmxpYnJhcnkuY2Fub25pY2FsVXJpOwogICAgfSBlbHNlIGlmIChlbGVtZW50IGlzIE1lbWJlckVudGl0eSkgewogICAgICByZXR1cm4gZWxlbWVudC5saWJyYXJ5LmNhbm9uaWNhbFVyaTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KfQoKY2xhc3MgX0NvbXBpbGVyT3V0cHV0IGltcGxlbWVudHMgYXBpLkNvbXBpbGVyT3V0cHV0IHsKICBmaW5hbCBDb21waWxlciBfY29tcGlsZXI7CiAgZmluYWwgYXBpLkNvbXBpbGVyT3V0cHV0IF91c2VyT3V0cHV0OwoKICBfQ29tcGlsZXJPdXRwdXQodGhpcy5fY29tcGlsZXIsIGFwaS5Db21waWxlck91dHB1dCBvdXRwdXQpCiAgICAgIDogdGhpcy5fdXNlck91dHB1dCA9IG91dHB1dCA/PyBjb25zdCBOdWxsQ29tcGlsZXJPdXRwdXQoKTsKCiAgQG92ZXJyaWRlCiAgYXBpLk91dHB1dFNpbmsgY3JlYXRlT3V0cHV0U2luaygKICAgICAgU3RyaW5nIG5hbWUsIFN0cmluZyBleHRlbnNpb24sIGFwaS5PdXRwdXRUeXBlIHR5cGUpIHsKICAgIGlmIChfY29tcGlsZXIuY29tcGlsYXRpb25GYWlsZWQpIHsKICAgICAgLy8gRW5zdXJlIHRoYXQgd2UgZG9uJ3QgZW1pdCBvdXRwdXQgd2hlbiB0aGUgY29tcGlsYXRpb24gaGFzIGZhaWxlZC4KICAgICAgcmV0dXJuIGNvbnN0IE51bGxDb21waWxlck91dHB1dCgpLmNyZWF0ZU91dHB1dFNpbmsobmFtZSwgZXh0ZW5zaW9uLCB0eXBlKTsKICAgIH0KICAgIHJldHVybiBfdXNlck91dHB1dC5jcmVhdGVPdXRwdXRTaW5rKG5hbWUsIGV4dGVuc2lvbiwgdHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBhcGkuQmluYXJ5T3V0cHV0U2luayBjcmVhdGVCaW5hcnlTaW5rKFVyaSB1cmkpIHsKICAgIHJldHVybiBfdXNlck91dHB1dC5jcmVhdGVCaW5hcnlTaW5rKHVyaSk7CiAgfQp9CgovLy8gSW5mb3JtYXRpb24gYWJvdXQgc3VwcHJlc3NlZCB3YXJuaW5ncyBhbmQgaGludHMgZm9yIGEgZ2l2ZW4gbGlicmFyeS4KY2xhc3MgU3VwcHJlc3Npb25JbmZvIHsKICBpbnQgd2FybmluZ3MgPSAwOwogIGludCBoaW50cyA9IDA7Cn0KCmNsYXNzIENvbXBpbGVyRGlhZ25vc3RpY1JlcG9ydGVyIGV4dGVuZHMgRGlhZ25vc3RpY1JlcG9ydGVyIHsKICBmaW5hbCBDb21waWxlciBjb21waWxlcjsKICBAb3ZlcnJpZGUKICBmaW5hbCBEaWFnbm9zdGljT3B0aW9ucyBvcHRpb25zOwoKICBFbnRpdHkgX2N1cnJlbnRFbGVtZW50OwogIGJvb2wgaGFzQ3Jhc2hlZCA9IGZhbHNlOwoKICAvLy8gYHRydWVgIGlmIHRoZSBsYXN0IGRpYWdub3N0aWMgd2FzIGZpbHRlcmVkLCBpbiB3aGljaCBjYXNlIHRoZQogIC8vLyBhY2NvbXBhbnlpbmcgaW5mbyBtZXNzYWdlIHNob3VsZCBiZSBmaWx0ZXJlZCBhcyB3ZWxsLgogIGJvb2wgbGFzdERpYWdub3N0aWNXYXNGaWx0ZXJlZCA9IGZhbHNlOwoKICAvLy8gTWFwIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHdhcm5pbmdzIGFuZCBoaW50cyB0aGF0IGhhdmUgYmVlbgogIC8vLyBzdXBwcmVzc2VkIGZvciBlYWNoIGxpYnJhcnkuCiAgTWFwPFVyaSwgU3VwcHJlc3Npb25JbmZvPiBzdXBwcmVzc2VkV2FybmluZ3MgPSA8VXJpLCBTdXBwcmVzc2lvbkluZm8+e307CgogIENvbXBpbGVyRGlhZ25vc3RpY1JlcG9ydGVyKHRoaXMuY29tcGlsZXIsIHRoaXMub3B0aW9ucyk7CgogIEVudGl0eSBnZXQgY3VycmVudEVsZW1lbnQgPT4gX2N1cnJlbnRFbGVtZW50OwoKICBAb3ZlcnJpZGUKICBEaWFnbm9zdGljTWVzc2FnZSBjcmVhdGVNZXNzYWdlKFNwYW5uYWJsZSBzcGFubmFibGUsIE1lc3NhZ2VLaW5kIG1lc3NhZ2VLaW5kLAogICAgICBbTWFwIGFyZ3VtZW50cyA9IGNvbnN0IHt9XSkgewogICAgU291cmNlU3BhbiBzcGFuID0gc3BhbkZyb21TcGFubmFibGUoc3Bhbm5hYmxlKTsKICAgIE1lc3NhZ2VUZW1wbGF0ZSB0ZW1wbGF0ZSA9IE1lc3NhZ2VUZW1wbGF0ZS5URU1QTEFURVNbbWVzc2FnZUtpbmRdOwogICAgTWVzc2FnZSBtZXNzYWdlID0gdGVtcGxhdGUubWVzc2FnZShhcmd1bWVudHMsIG9wdGlvbnMudGVyc2VEaWFnbm9zdGljcyk7CiAgICByZXR1cm4gbmV3IERpYWdub3N0aWNNZXNzYWdlKHNwYW4sIHNwYW5uYWJsZSwgbWVzc2FnZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlcG9ydEVycm9yKERpYWdub3N0aWNNZXNzYWdlIG1lc3NhZ2UsCiAgICAgIFtMaXN0PERpYWdub3N0aWNNZXNzYWdlPiBpbmZvcyA9IGNvbnN0IDxEaWFnbm9zdGljTWVzc2FnZT5bXV0pIHsKICAgIHJlcG9ydERpYWdub3N0aWNJbnRlcm5hbChtZXNzYWdlLCBpbmZvcywgYXBpLkRpYWdub3N0aWMuRVJST1IpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZXBvcnRXYXJuaW5nKERpYWdub3N0aWNNZXNzYWdlIG1lc3NhZ2UsCiAgICAgIFtMaXN0PERpYWdub3N0aWNNZXNzYWdlPiBpbmZvcyA9IGNvbnN0IDxEaWFnbm9zdGljTWVzc2FnZT5bXV0pIHsKICAgIHJlcG9ydERpYWdub3N0aWNJbnRlcm5hbChtZXNzYWdlLCBpbmZvcywgYXBpLkRpYWdub3N0aWMuV0FSTklORyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlcG9ydEhpbnQoRGlhZ25vc3RpY01lc3NhZ2UgbWVzc2FnZSwKICAgICAgW0xpc3Q8RGlhZ25vc3RpY01lc3NhZ2U+IGluZm9zID0gY29uc3QgPERpYWdub3N0aWNNZXNzYWdlPltdXSkgewogICAgcmVwb3J0RGlhZ25vc3RpY0ludGVybmFsKG1lc3NhZ2UsIGluZm9zLCBhcGkuRGlhZ25vc3RpYy5ISU5UKTsKICB9CgogIEBkZXByZWNhdGVkCiAgQG92ZXJyaWRlCiAgdm9pZCByZXBvcnRJbmZvKFNwYW5uYWJsZSBub2RlLCBNZXNzYWdlS2luZCBtZXNzYWdlS2luZCwKICAgICAgW01hcCBhcmd1bWVudHMgPSBjb25zdCB7fV0pIHsKICAgIHJlcG9ydERpYWdub3N0aWNJbnRlcm5hbChjcmVhdGVNZXNzYWdlKG5vZGUsIG1lc3NhZ2VLaW5kLCBhcmd1bWVudHMpLAogICAgICAgIGNvbnN0IDxEaWFnbm9zdGljTWVzc2FnZT5bXSwgYXBpLkRpYWdub3N0aWMuSU5GTyk7CiAgfQoKICB2b2lkIHJlcG9ydERpYWdub3N0aWNJbnRlcm5hbChEaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlLAogICAgICBMaXN0PERpYWdub3N0aWNNZXNzYWdlPiBpbmZvcywgYXBpLkRpYWdub3N0aWMga2luZCkgewogICAgaWYgKCFvcHRpb25zLnNob3dBbGxQYWNrYWdlV2FybmluZ3MgJiYKICAgICAgICBtZXNzYWdlLnNwYW5uYWJsZSAhPSBOT19MT0NBVElPTl9TUEFOTkFCTEUpIHsKICAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgICAgY2FzZSBhcGkuRGlhZ25vc3RpYy5XQVJOSU5HOgogICAgICAgIGNhc2UgYXBpLkRpYWdub3N0aWMuSElOVDoKICAgICAgICAgIEVudGl0eSBlbGVtZW50ID0gZWxlbWVudEZyb21TcGFubmFibGUobWVzc2FnZS5zcGFubmFibGUpOwogICAgICAgICAgaWYgKCFjb21waWxlci5pblVzZXJDb2RlKGVsZW1lbnQsIGFzc3VtZUluVXNlckNvZGU6IHRydWUpKSB7CiAgICAgICAgICAgIFVyaSB1cmkgPSBjb21waWxlci5nZXRDYW5vbmljYWxVcmkoZWxlbWVudCk7CiAgICAgICAgICAgIGlmIChvcHRpb25zLnNob3dQYWNrYWdlV2FybmluZ3NGb3IodXJpKSkgewogICAgICAgICAgICAgIHJlcG9ydERpYWdub3N0aWMobWVzc2FnZSwgaW5mb3MsIGtpbmQpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBTdXBwcmVzc2lvbkluZm8gaW5mbyA9IHN1cHByZXNzZWRXYXJuaW5ncy5wdXRJZkFic2VudCgKICAgICAgICAgICAgICAgIHVyaSwgKCkgPT4gbmV3IFN1cHByZXNzaW9uSW5mbygpKTsKICAgICAgICAgICAgaWYgKGtpbmQgPT0gYXBpLkRpYWdub3N0aWMuV0FSTklORykgewogICAgICAgICAgICAgIGluZm8ud2FybmluZ3MrKzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBpbmZvLmhpbnRzKys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGFzdERpYWdub3N0aWNXYXNGaWx0ZXJlZCA9IHRydWU7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgYXBpLkRpYWdub3N0aWMuSU5GTzoKICAgICAgICAgIGlmIChsYXN0RGlhZ25vc3RpY1dhc0ZpbHRlcmVkKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBsYXN0RGlhZ25vc3RpY1dhc0ZpbHRlcmVkID0gZmFsc2U7CiAgICByZXBvcnREaWFnbm9zdGljKG1lc3NhZ2UsIGluZm9zLCBraW5kKTsKICB9CgogIHZvaWQgcmVwb3J0RGlhZ25vc3RpYyhEaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlLAogICAgICBMaXN0PERpYWdub3N0aWNNZXNzYWdlPiBpbmZvcywgYXBpLkRpYWdub3N0aWMga2luZCkgewogICAgY29tcGlsZXIucmVwb3J0RGlhZ25vc3RpYyhtZXNzYWdlLCBpbmZvcywga2luZCk7CiAgICBpZiAoa2luZCA9PSBhcGkuRGlhZ25vc3RpYy5FUlJPUiB8fAogICAgICAgIGtpbmQgPT0gYXBpLkRpYWdub3N0aWMuQ1JBU0ggfHwKICAgICAgICAob3B0aW9ucy5mYXRhbFdhcm5pbmdzICYmIGtpbmQgPT0gYXBpLkRpYWdub3N0aWMuV0FSTklORykpIHsKICAgICAgY29tcGlsZXIuZmF0YWxEaWFnbm9zdGljUmVwb3J0ZWQobWVzc2FnZSwgaW5mb3MsIGtpbmQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaGFzUmVwb3J0ZWRFcnJvciA9PiBjb21waWxlci5jb21waWxhdGlvbkZhaWxlZDsKCiAgLy8vIFBlcmZvcm0gYW4gb3BlcmF0aW9uLCBbZl0sIHJldHVybmluZyB0aGUgcmV0dXJuIHZhbHVlIGZyb20gW2ZdLiAgSWYgYW4KICAvLy8gZXJyb3Igb2NjdXJzIHRoZW4gcmVwb3J0IGl0IGFzIGhhdmluZyBvY2N1cnJlZCBkdXJpbmcgY29tcGlsYXRpb24gb2YKICAvLy8gW2VsZW1lbnRdLiAgQ2FuIGJlIG5lc3RlZC4KICBAb3ZlcnJpZGUKICB3aXRoQ3VycmVudEVsZW1lbnQoRW50aXR5IGVsZW1lbnQsIGYoKSkgewogICAgRW50aXR5IG9sZCA9IGN1cnJlbnRFbGVtZW50OwogICAgX2N1cnJlbnRFbGVtZW50ID0gZWxlbWVudDsKICAgIHRyeSB7CiAgICAgIHJldHVybiBmKCk7CiAgICB9IG9uIFNwYW5uYWJsZUFzc2VydGlvbkZhaWx1cmUgY2F0Y2ggKGV4KSB7CiAgICAgIGlmICghaGFzQ3Jhc2hlZCkgewogICAgICAgIHJlcG9ydEFzc2VydGlvbkZhaWx1cmUoZXgpOwogICAgICAgIHBsZWFzZVJlcG9ydENyYXNoKCk7CiAgICAgIH0KICAgICAgaGFzQ3Jhc2hlZCA9IHRydWU7CiAgICAgIHJldGhyb3c7CiAgICB9IG9uIFN0YWNrT3ZlcmZsb3dFcnJvciB7CiAgICAgIC8vIFdlIGNhbm5vdCByZXBvcnQgYW55dGhpbmcgdXNlZnVsIGluIHRoaXMgY2FzZSwgYmVjYXVzZSB3ZQogICAgICAvLyBkbyBub3QgaGF2ZSBlbm91Z2ggc3RhY2sgc3BhY2UuCiAgICAgIHJldGhyb3c7CiAgICB9IGNhdGNoIChleCkgewogICAgICBpZiAoaGFzQ3Jhc2hlZCkgcmV0aHJvdzsKICAgICAgdHJ5IHsKICAgICAgICB1bmhhbmRsZWRFeGNlcHRpb25PbkVsZW1lbnQoZWxlbWVudCk7CiAgICAgIH0gY2F0Y2ggKGRvdWJsZUZhdWx0KSB7CiAgICAgICAgLy8gSWdub3JpbmcgZXhjZXB0aW9ucyBpbiBleGNlcHRpb24gaGFuZGxpbmcuCiAgICAgIH0KICAgICAgcmV0aHJvdzsKICAgIH0gZmluYWxseSB7CiAgICAgIF9jdXJyZW50RWxlbWVudCA9IG9sZDsKICAgIH0KICB9CgogIHZvaWQgcmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShTcGFubmFibGVBc3NlcnRpb25GYWlsdXJlIGV4KSB7CiAgICBTdHJpbmcgbWVzc2FnZSA9CiAgICAgICAgKGV4Lm1lc3NhZ2UgIT0gbnVsbCkgPyB0cnlUb1N0cmluZyhleC5tZXNzYWdlKSA6IHRyeVRvU3RyaW5nKGV4KTsKICAgIHJlcG9ydERpYWdub3N0aWNJbnRlcm5hbCgKICAgICAgICBjcmVhdGVNZXNzYWdlKGV4Lm5vZGUsIE1lc3NhZ2VLaW5kLkdFTkVSSUMsIHsndGV4dCc6IG1lc3NhZ2V9KSwKICAgICAgICBjb25zdCA8RGlhZ25vc3RpY01lc3NhZ2U+W10sCiAgICAgICAgYXBpLkRpYWdub3N0aWMuQ1JBU0gpOwogIH0KCiAgLy8vIFVzaW5nIFtmcm9udGVuZFN0cmF0ZWd5XSB0byBjb21wdXRlIGEgW1NvdXJjZVNwYW5dIGZyb20gc3Bhbm5hYmxlIHVzaW5nCiAgLy8vIHRoZSBbY3VycmVudEVsZW1lbnRdIGFzIGNvbnRleHQuCiAgU291cmNlU3BhbiBfc3BhbkZyb21TdHJhdGVneShTcGFubmFibGUgc3Bhbm5hYmxlKSB7CiAgICBTb3VyY2VTcGFuIHNwYW47CiAgICBpZiAoY29tcGlsZXIucGhhc2UgPT0gQ29tcGlsZXIuUEhBU0VfQ09NUElMSU5HKSB7CiAgICAgIHNwYW4gPQogICAgICAgICAgY29tcGlsZXIuYmFja2VuZFN0cmF0ZWd5LnNwYW5Gcm9tU3Bhbm5hYmxlKHNwYW5uYWJsZSwgY3VycmVudEVsZW1lbnQpOwogICAgfSBlbHNlIHsKICAgICAgc3BhbiA9IGNvbXBpbGVyLmZyb250ZW5kU3RyYXRlZ3kKICAgICAgICAgIC5zcGFuRnJvbVNwYW5uYWJsZShzcGFubmFibGUsIGN1cnJlbnRFbGVtZW50KTsKICAgIH0KICAgIGlmIChzcGFuICE9IG51bGwpIHJldHVybiBzcGFuOwogICAgdGhyb3cgJ05vIGVycm9yIGxvY2F0aW9uLic7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VTcGFuIHNwYW5Gcm9tU3Bhbm5hYmxlKFNwYW5uYWJsZSBzcGFubmFibGUpIHsKICAgIGlmIChzcGFubmFibGUgPT0gQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSkgewogICAgICBzcGFubmFibGUgPSBjdXJyZW50RWxlbWVudDsKICAgIH0gZWxzZSBpZiAoc3Bhbm5hYmxlID09IE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSkgewogICAgICBpZiAoY3VycmVudEVsZW1lbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIHNwYW5uYWJsZSA9IGN1cnJlbnRFbGVtZW50OwogICAgfQogICAgaWYgKHNwYW5uYWJsZSBpcyBTb3VyY2VTcGFuKSB7CiAgICAgIHJldHVybiBzcGFubmFibGU7CiAgICB9IGVsc2UgaWYgKHNwYW5uYWJsZSBpcyBISW5zdHJ1Y3Rpb24pIHsKICAgICAgRW50aXR5IGVsZW1lbnQgPSBzcGFubmFibGUuc291cmNlRWxlbWVudDsKICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkgZWxlbWVudCA9IGN1cnJlbnRFbGVtZW50OwogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBwb3NpdGlvbiA9IHNwYW5uYWJsZS5zb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgaWYgKHBvc2l0aW9uICE9IG51bGwpIHJldHVybiBwb3NpdGlvbi5zb3VyY2VTcGFuOwogICAgICByZXR1cm4gX3NwYW5Gcm9tU3RyYXRlZ3koZWxlbWVudCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX3NwYW5Gcm9tU3RyYXRlZ3koc3Bhbm5hYmxlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGludGVybmFsRXJyb3IoU3Bhbm5hYmxlIHNwYW5uYWJsZSwgcmVhc29uKSB7CiAgICBTdHJpbmcgbWVzc2FnZSA9IHRyeVRvU3RyaW5nKHJlYXNvbik7CiAgICByZXBvcnREaWFnbm9zdGljSW50ZXJuYWwoCiAgICAgICAgY3JlYXRlTWVzc2FnZShzcGFubmFibGUsIE1lc3NhZ2VLaW5kLkdFTkVSSUMsIHsndGV4dCc6IG1lc3NhZ2V9KSwKICAgICAgICBjb25zdCA8RGlhZ25vc3RpY01lc3NhZ2U+W10sCiAgICAgICAgYXBpLkRpYWdub3N0aWMuQ1JBU0gpOwogICAgdGhyb3cgJ0ludGVybmFsIEVycm9yOiAkbWVzc2FnZSc7CiAgfQoKICB2b2lkIHVuaGFuZGxlZEV4Y2VwdGlvbk9uRWxlbWVudChFbnRpdHkgZWxlbWVudCkgewogICAgaWYgKGhhc0NyYXNoZWQpIHJldHVybjsKICAgIGhhc0NyYXNoZWQgPSB0cnVlOwogICAgcmVwb3J0RGlhZ25vc3RpYyhjcmVhdGVNZXNzYWdlKGVsZW1lbnQsIE1lc3NhZ2VLaW5kLkNPTVBJTEVSX0NSQVNIRUQpLAogICAgICAgIGNvbnN0IDxEaWFnbm9zdGljTWVzc2FnZT5bXSwgYXBpLkRpYWdub3N0aWMuQ1JBU0gpOwogICAgcGxlYXNlUmVwb3J0Q3Jhc2goKTsKICB9CgogIHZvaWQgcGxlYXNlUmVwb3J0Q3Jhc2goKSB7CiAgICBwcmludChNZXNzYWdlVGVtcGxhdGUuVEVNUExBVEVTW01lc3NhZ2VLaW5kLlBMRUFTRV9SRVBPUlRfVEhFX0NSQVNIXQogICAgICAgIC5tZXNzYWdlKHsnYnVpbGRJZCc6IGNvbXBpbGVyLm9wdGlvbnMuYnVpbGRJZH0pKTsKICB9CgogIC8vLyBGaW5kcyB0aGUgYXBwcm94aW1hdGUgW0VsZW1lbnRdIGZvciBbbm9kZV0uIFtjdXJyZW50RWxlbWVudF0gaXMgdXNlZCBhcwogIC8vLyB0aGUgZGVmYXVsdCB2YWx1ZS4KICBFbnRpdHkgZWxlbWVudEZyb21TcGFubmFibGUoU3Bhbm5hYmxlIG5vZGUpIHsKICAgIEVudGl0eSBlbGVtZW50OwogICAgaWYgKG5vZGUgaXMgRW50aXR5KSB7CiAgICAgIGVsZW1lbnQgPSBub2RlOwogICAgfSBlbHNlIGlmIChub2RlIGlzIEhJbnN0cnVjdGlvbikgewogICAgICBlbGVtZW50ID0gbm9kZS5zb3VyY2VFbGVtZW50OwogICAgfQogICAgcmV0dXJuIGVsZW1lbnQgIT0gbnVsbCA/IGVsZW1lbnQgOiBjdXJyZW50RWxlbWVudDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgbG9nKG1lc3NhZ2UpIHsKICAgIE1lc3NhZ2UgbXNnID0gTWVzc2FnZVRlbXBsYXRlLlRFTVBMQVRFU1tNZXNzYWdlS2luZC5HRU5FUklDXQogICAgICAgIC5tZXNzYWdlKHsndGV4dCc6ICckbWVzc2FnZSd9KTsKICAgIHJlcG9ydERpYWdub3N0aWMobmV3IERpYWdub3N0aWNNZXNzYWdlKG51bGwsIG51bGwsIG1zZyksCiAgICAgICAgY29uc3QgPERpYWdub3N0aWNNZXNzYWdlPltdLCBhcGkuRGlhZ25vc3RpYy5WRVJCT1NFX0lORk8pOwogIH0KCiAgU3RyaW5nIHRyeVRvU3RyaW5nKG9iamVjdCkgewogICAgdHJ5IHsKICAgICAgcmV0dXJuIG9iamVjdC50b1N0cmluZygpOwogICAgfSBjYXRjaCAoXykgewogICAgICByZXR1cm4gJzxleGNlcHRpb24gaW4gdG9TdHJpbmcoKT4nOwogICAgfQogIH0KCiAgb25FcnJvcihVcmkgdXJpLCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICB0cnkgewogICAgICBpZiAoIWhhc0NyYXNoZWQpIHsKICAgICAgICBoYXNDcmFzaGVkID0gdHJ1ZTsKICAgICAgICBpZiAoZXJyb3IgaXMgU3Bhbm5hYmxlQXNzZXJ0aW9uRmFpbHVyZSkgewogICAgICAgICAgcmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShlcnJvcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlcG9ydERpYWdub3N0aWMoCiAgICAgICAgICAgICAgY3JlYXRlTWVzc2FnZSgKICAgICAgICAgICAgICAgICAgbmV3IFNvdXJjZVNwYW4odXJpLCAwLCAwKSwgTWVzc2FnZUtpbmQuQ09NUElMRVJfQ1JBU0hFRCksCiAgICAgICAgICAgICAgY29uc3QgPERpYWdub3N0aWNNZXNzYWdlPltdLAogICAgICAgICAgICAgIGFwaS5EaWFnbm9zdGljLkNSQVNIKTsKICAgICAgICB9CiAgICAgICAgcGxlYXNlUmVwb3J0Q3Jhc2goKTsKICAgICAgfQogICAgfSBjYXRjaCAoZG91YmxlRmF1bHQpIHsKICAgICAgLy8gSWdub3JpbmcgZXhjZXB0aW9ucyBpbiBleGNlcHRpb24gaGFuZGxpbmcuCiAgICB9CiAgICByZXR1cm4gbmV3IEZ1dHVyZS5lcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIG9uQ3Jhc2hJblVzZXJDb2RlKFN0cmluZyBtZXNzYWdlLCBleGNlcHRpb24sIHN0YWNrVHJhY2UpIHsKICAgIGhhc0NyYXNoZWQgPSB0cnVlOwogICAgcHJpbnQoJyRtZXNzYWdlOiAke3RyeVRvU3RyaW5nKGV4Y2VwdGlvbil9Jyk7CiAgICBwcmludCh0cnlUb1N0cmluZyhzdGFja1RyYWNlKSk7CiAgfQoKICB2b2lkIHJlcG9ydFN1cHByZXNzZWRNZXNzYWdlc1N1bW1hcnkoKSB7CiAgICBpZiAoIW9wdGlvbnMuc2hvd0FsbFBhY2thZ2VXYXJuaW5ncyAmJiAhb3B0aW9ucy5zdXBwcmVzc1dhcm5pbmdzKSB7CiAgICAgIHN1cHByZXNzZWRXYXJuaW5ncy5mb3JFYWNoKChVcmkgdXJpLCBTdXBwcmVzc2lvbkluZm8gaW5mbykgewogICAgICAgIE1lc3NhZ2VLaW5kIGtpbmQgPSBNZXNzYWdlS2luZC5ISURERU5fV0FSTklOR1NfSElOVFM7CiAgICAgICAgaWYgKGluZm8ud2FybmluZ3MgPT0gMCkgewogICAgICAgICAga2luZCA9IE1lc3NhZ2VLaW5kLkhJRERFTl9ISU5UUzsKICAgICAgICB9IGVsc2UgaWYgKGluZm8uaGludHMgPT0gMCkgewogICAgICAgICAga2luZCA9IE1lc3NhZ2VLaW5kLkhJRERFTl9XQVJOSU5HUzsKICAgICAgICB9CiAgICAgICAgTWVzc2FnZVRlbXBsYXRlIHRlbXBsYXRlID0gTWVzc2FnZVRlbXBsYXRlLlRFTVBMQVRFU1traW5kXTsKICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSB0ZW1wbGF0ZS5tZXNzYWdlKAogICAgICAgICAgICB7J3dhcm5pbmdzJzogaW5mby53YXJuaW5ncywgJ2hpbnRzJzogaW5mby5oaW50cywgJ3VyaSc6IHVyaX0sCiAgICAgICAgICAgIG9wdGlvbnMudGVyc2VEaWFnbm9zdGljcyk7CiAgICAgICAgcmVwb3J0RGlhZ25vc3RpYyhuZXcgRGlhZ25vc3RpY01lc3NhZ2UobnVsbCwgbnVsbCwgbWVzc2FnZSksCiAgICAgICAgICAgIGNvbnN0IDxEaWFnbm9zdGljTWVzc2FnZT5bXSwgYXBpLkRpYWdub3N0aWMuSElOVCk7CiAgICAgIH0pOwogICAgfQogIH0KfQoKY2xhc3MgX01hcEltcGFjdENhY2hlRGVsZXRlciBpbXBsZW1lbnRzIEltcGFjdENhY2hlRGVsZXRlciB7CiAgZmluYWwgTWFwPEVudGl0eSwgV29ybGRJbXBhY3Q+IF9pbXBhY3RDYWNoZTsKICBfTWFwSW1wYWN0Q2FjaGVEZWxldGVyKHRoaXMuX2ltcGFjdENhY2hlKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB1bmNhY2hlV29ybGRJbXBhY3QoRW50aXR5IGVsZW1lbnQpIHsKICAgIGlmIChyZXRhaW5EYXRhRm9yVGVzdGluZykgcmV0dXJuOwogICAgX2ltcGFjdENhY2hlLnJlbW92ZShlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW1wdHlDYWNoZSgpIHsKICAgIGlmIChyZXRhaW5EYXRhRm9yVGVzdGluZykgcmV0dXJuOwogICAgX2ltcGFjdENhY2hlLmNsZWFyKCk7CiAgfQp9CgpjbGFzcyBfRW1wdHlFbnZpcm9ubWVudCBpbXBsZW1lbnRzIEVudmlyb25tZW50IHsKICBjb25zdCBfRW1wdHlFbnZpcm9ubWVudCgpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmFsdWVPZihTdHJpbmcga2V5KSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBNYXA8U3RyaW5nLCBTdHJpbmc+IHRvTWFwKCkgPT4gY29uc3Qge307Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIHNob3dpbmcgcHJvZ3Jlc3MgZHVyaW5nIGNvbXBpbGF0aW9uLgpjbGFzcyBQcm9ncmVzcyB7CiAgY29uc3QgUHJvZ3Jlc3MoKTsKCiAgLy8vIFN0YXJ0cyBhIG5ldyBwaGFzZSBmb3Igd2hpY2ggdG8gc2hvdyBwcm9ncmVzcy4KICB2b2lkIHN0YXJ0UGhhc2UoKSB7fQoKICAvLy8gU2hvd3MgcHJvZ3Jlc3Mgb2YgdGhlIGN1cnJlbnQgcGhhc2UgaWYgbmVlZGVkLiBUaGUgc2hvd24gbWVzc2FnZSBpcwogIC8vLyBjb21wdXRlZCBhcyAnJHByZWZpeCRjb3VudCRzdWZmaXgnLgogIHZvaWQgc2hvd1Byb2dyZXNzKFN0cmluZyBwcmVmaXgsIGludCBjb3VudCwgU3RyaW5nIHN1ZmZpeCkge30KfQoKLy8vIFByb2dyZXNzIGltcGxlbWVudGF0aW9ucyB0aGF0IHByaW50cyBwcm9ncmVzcyB0byB0aGUgW0RpYWdub3N0aWNSZXBvcnRlcl0KLy8vIHdpdGggNTAwbXMgaW50ZXJ2YWxzLgpjbGFzcyBQcm9ncmVzc0ltcGwgaW1wbGVtZW50cyBQcm9ncmVzcyB7CiAgZmluYWwgRGlhZ25vc3RpY1JlcG9ydGVyIF9yZXBvcnRlcjsKICBmaW5hbCBTdG9wd2F0Y2ggX3N0b3B3YXRjaCA9IG5ldyBTdG9wd2F0Y2goKS4uc3RhcnQoKTsKCiAgUHJvZ3Jlc3NJbXBsKHRoaXMuX3JlcG9ydGVyKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBzaG93UHJvZ3Jlc3MoU3RyaW5nIHByZWZpeCwgaW50IGNvdW50LCBTdHJpbmcgc3VmZml4KSB7CiAgICBpZiAoX3N0b3B3YXRjaC5lbGFwc2VkTWlsbGlzZWNvbmRzID4gNTAwKSB7CiAgICAgIF9yZXBvcnRlci5sb2coJyRwcmVmaXgkY291bnQkc3VmZml4Jyk7CiAgICAgIF9zdG9wd2F0Y2gucmVzZXQoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgc3RhcnRQaGFzZSgpIHsKICAgIF9zdG9wd2F0Y2gucmVzZXQoKTsKICB9Cn0KCi8vLyBQcm9ncmVzcyBpbXBsZW1lbnRhdGlvbnMgdGhhdCBwcmludHMgcHJvZ3Jlc3MgdG8gdGhlIFtEaWFnbm9zdGljUmVwb3J0ZXJdCi8vLyB3aXRoIDUwMG1zIGludGVydmFscyB1c2luZyBlc2NhcGUgc2VxdWVuY2VzIHRvIGtlZXAgdGhlIHByb2dyZXNzIGRhdGEgb24gYQovLy8gc2luZ2xlIGxpbmUuCmNsYXNzIEludGVyYWN0aXZlUHJvZ3Jlc3MgaW1wbGVtZW50cyBQcm9ncmVzcyB7CiAgZmluYWwgU3RvcHdhdGNoIF9zdG9wd2F0Y2hQaGFzZSA9IG5ldyBTdG9wd2F0Y2goKS4uc3RhcnQoKTsKICBmaW5hbCBTdG9wd2F0Y2ggX3N0b3B3YXRjaEludGVydmFsID0gbmV3IFN0b3B3YXRjaCgpLi5zdGFydCgpOwogIEBvdmVycmlkZQogIHZvaWQgc3RhcnRQaGFzZSgpIHsKICAgIHByaW50KCcnKTsKICAgIF9zdG9wd2F0Y2hQaGFzZS5yZXNldCgpOwogICAgX3N0b3B3YXRjaEludGVydmFsLnJlc2V0KCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHNob3dQcm9ncmVzcyhTdHJpbmcgcHJlZml4LCBpbnQgY291bnQsIFN0cmluZyBzdWZmaXgpIHsKICAgIGlmIChfc3RvcHdhdGNoSW50ZXJ2YWwuZWxhcHNlZE1pbGxpc2Vjb25kcyA+IDUwMCkgewogICAgICB2YXIgdGltZSA9IF9zdG9wd2F0Y2hQaGFzZS5lbGFwc2VkTWls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TElDRU5TRSBmaWxlLgoKLy8vIFRoZSBtZXNzYWdlcyBpbiB0aGlzIGZpbGUgc2hvdWxkIGZvbGxvdyB0aGUgW0d1aWRlIGZvciBXcml0aW5nCi8vLyBEaWFnbm9zdGljc10oLi4vLi4vLi4vLi4vZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvZGlhZ25vc3RpY3MubWQpLgovLy8KLy8vIE90aGVyIHRoaW5ncyB0byBrZWVwIGluIG1pbmQ6Ci8vLwovLy8gQW4gSU5GTyBtZXNzYWdlIHNob3VsZCBhbHdheXMgYmUgcHJlY2VkZWQgYnkgYSBub24tSU5GTyBtZXNzYWdlLCBhbmQgdGhlCi8vLyBJTkZPIG1lc3NhZ2VzIGFyZSBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQgdGhlIHByZWNlZGluZyBub24tSU5GTwovLy8gbWVzc2FnZS4gRm9yIGV4YW1wbGUsIGNvbnNpZGVyIGR1cGxpY2F0ZWQgZWxlbWVudHMuIEZpcnN0IHJlcG9ydCBhIFdBUk5JTkcKLy8vIG9yIEVSUk9SIGFib3V0IHRoZSBkdXBsaWNhdGVkIGVsZW1lbnQsIGFuZCB0aGVuIHJlcG9ydCBhbiBJTkZPIGFib3V0IHRoZQovLy8gbG9jYXRpb24gb2YgdGhlIGV4aXN0aW5nIGVsZW1lbnQuCmxpYnJhcnkgZGFydDJqcy5tZXNzYWdlczsKCmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9kYXJ0MmpzLmRhcnQnIHNob3cgdG9rZW5Ub1N0cmluZzsKCmltcG9ydCAnZ2VuZXJhdGVkL3NoYXJlZF9tZXNzYWdlcy5kYXJ0JyBhcyBzaGFyZWRfbWVzc2FnZXM7CmltcG9ydCAnLi4vY29uc3RhbnRzL2V4cHJlc3Npb25zLmRhcnQnIHNob3cgQ29uc3RhbnRFeHByZXNzaW9uOwppbXBvcnQgJy4uL2NvbW1hbmRsaW5lX29wdGlvbnMuZGFydCc7CmltcG9ydCAnaW52YXJpYW50LmRhcnQnIHNob3cgZmFpbGVkQXQ7CmltcG9ydCAnc3Bhbm5hYmxlLmRhcnQnIHNob3cgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRTsKCmNvbnN0IERPTlRfS05PV19IT1dfVE9fRklYID0gIkNvbXB1dGVyIHNheXMgbm8hIjsKCi8vLyBLZXlzIGZvciB0aGUgW01lc3NhZ2VUZW1wbGF0ZV1zLgplbnVtIE1lc3NhZ2VLaW5kIHsKICBBQlNUUkFDVF9HRVRURVIsCiAgQ0FOTk9UX1JFU09MVkUsCiAgQ09NUElMRVJfQ1JBU0hFRCwKICBDT01QTEVYX1JFVFVSTklOR19OU00sCiAgQ09NUExFWF9USFJPV0lOR19OU00sCiAgQ09OU1RfQ09OU1RSVUNUT1JfV0lUSF9CT0RZLAogIENPTlNUX0ZBQ1RPUlksCiAgQ09OU1RSVUNUT1JfV0lUSF9SRVRVUk5fVFlQRSwKICBDWUNMSUNfQ09NUElMRV9USU1FX0NPTlNUQU5UUywKICBESVJFQ1RMWV9USFJPV0lOR19OU00sCiAgRVFVQUxfTUFQX0VOVFJZX0tFWSwKICBFUVVBTF9TRVRfRU5UUlksCiAgRVhUUkFORU9VU19NT0RJRklFUiwKICBFWFRSQU5FT1VTX01PRElGSUVSX1JFUExBQ0UsCiAgRk9SSU5fTk9UX0FTU0lHTkFCTEUsCiAgR0VORVJJQywKICBISURERU5fSElOVFMsCiAgSElEREVOX1dBUk5JTkdTLAogIEhJRERFTl9XQVJOSU5HU19ISU5UUywKICBJTVBMSUNJVF9KU19JTlRFUk9QX0ZJRUxEX05PVF9TVVBQT1JURUQsCiAgSU5WQUxJRF9BU1NFUlRfVkFMVUUsCiAgSU5WQUxJRF9BU1NFUlRfVkFMVUVfTUVTU0FHRSwKICBJTlZBTElEX0JPT0xfRlJPTV9FTlZJUk9OTUVOVF9ERUZBVUxUX1ZBTFVFX1RZUEUsCiAgSU5WQUxJRF9DT05TVEFOVF9DQVNULAogIElOVkFMSURfQ09OU1RBTlRfQUREX1RZUEVTLAogIElOVkFMSURfQ09OU1RBTlRfQklOQVJZX0lOVF9UWVBFLAogIElOVkFMSURfQ09OU1RBTlRfQklOQVJZX05VTV9UWVBFLAogIElOVkFMSURfQ09OU1RBTlRfQklOQVJZX1BSSU1JVElWRV9UWVBFLAogIElOVkFMSURfQ09OU1RBTlRfQ09NUExFTUVOVF9UWVBFLAogIElOVkFMSURfQ09OU1RBTlRfQ09ORElUSU9OQUxfVFlQRSwKICBJTlZBTElEX0NPTlNUQU5UX0NPTlNUUlVDVE9SLAogIElOVkFMSURfQ09OU1RBTlRfRElWLAogIElOVkFMSURfQ09OU1RBTlRfSU5ERVgsCiAgSU5WQUxJRF9DT05TVEFOVF9JTlRFUlBPTEFUSU9OX1RZUEUsCiAgSU5WQUxJRF9DT05TVEFOVF9ORUdBVEVfVFlQRSwKICBJTlZBTElEX0NPTlNUQU5UX05PVF9UWVBFLAogIElOVkFMSURfQ09OU1RBTlRfU1RSSU5HX0FERF9UWVBFLAogIElOVkFMSURfQ09OU1RBTlRfTlVNX0FERF9UWVBFLAogIElOVkFMSURfQ09OU1RBTlRfU1RSSU5HX0xFTkdUSF9UWVBFLAogIElOVkFMSURfQ09OU1RBTlRfU0hJRlQsCiAgSU5WQUxJRF9GUk9NX0VOVklST05NRU5UX05BTUVfVFlQRSwKICBJTlZBTElEX0lOVF9GUk9NX0VOVklST05NRU5UX0RFRkFVTFRfVkFMVUVfVFlQRSwKICBJTlZBTElEX0xPR0lDQUxfQU5EX09QRVJBTkRfVFlQRSwKICBJTlZBTElEX0xPR0lDQUxfT1JfT1BFUkFORF9UWVBFLAogIElOVkFMSURfTUVUQURBVEEsCiAgSU5WQUxJRF9NRVRBREFUQV9HRU5FUklDLAogIElOVkFMSURfUEFDS0FHRV9DT05GSUcsCiAgSU5WQUxJRF9QQUNLQUdFX1VSSSwKICBJTlZBTElEX1NUUklOR19GUk9NX0VOVklST05NRU5UX0RFRkFVTFRfVkFMVUVfVFlQRSwKICBKU19JTlRFUk9QX0NMQVNTX0NBTk5PVF9FWFRFTkRfREFSVF9DTEFTUywKICBKU19JTlRFUk9QX0NMQVNTX05PTl9FWFRFUk5BTF9DT05TVFJVQ1RPUiwKICBKU19JTlRFUk9QX0NMQVNTX05PTl9FWFRFUk5BTF9NRU1CRVIsCiAgSlNfSU5URVJPUF9GSUVMRF9OT1RfU1VQUE9SVEVELAogIEpTX0lOVEVST1BfSU5ERVhfTk9UX1NVUFBPUlRFRCwKICBKU19JTlRFUk9QX05PTl9FWFRFUk5BTF9NRU1CRVIsCiAgSlNfSU5URVJPUF9NRU1CRVJfSU5fTk9OX0pTX0lOVEVST1BfQ0xBU1MsCiAgSlNfSU5URVJPUF9NRVRIT0RfV0lUSF9OQU1FRF9BUkdVTUVOVFMsCiAgSlNfT0JKRUNUX0xJVEVSQUxfQ09OU1RSVUNUT1JfV0lUSF9QT1NJVElPTkFMX0FSR1VNRU5UUywKICBKU19QTEFDRUhPTERFUl9DQVBUVVJFLAogIExJQlJBUllfTk9UX0ZPVU5ELAogIE1JUlJPUlNfTElCUkFSWV9OT1RfU1VQUE9SVF9XSVRIX0NGRSwKICBNSVNTSU5HX0VYUFJFU1NJT05fSU5fVEhST1csCiAgTkFUSVZFX05PTl9JTlNUQU5DRV9JTl9OT05fTkFUSVZFX0NMQVNTLAogIE5PX1NVQ0hfU1VQRVJfTUVNQkVSLAogIE5PTl9OQVRJVkVfRVhURVJOQUwsCiAgTk9UX0FfQ09NUElMRV9USU1FX0NPTlNUQU5ULAogIE5PVF9BU1NJR05BQkxFLAogIFBMRUFTRV9SRVBPUlRfVEhFX0NSQVNILAogIFBSRUFNQkxFLAogIFJFVEhST1dfT1VUU0lERV9DQVRDSCwKICBSRVRVUk5fSU5fR0VORVJBVElWRV9DT05TVFJVQ1RPUiwKICBSRVRVUk5fSU5fR0VORVJBVE9SLAogIFJVTlRJTUVfVFlQRV9UT19TVFJJTkdfT0JKRUNULAogIFJVTlRJTUVfVFlQRV9UT19TVFJJTkdfU1VCVFlQRSwKICBTVFJJTkdfRVhQRUNURUQsCiAgVU5ERUZJTkVEX0dFVFRFUiwKICBVTkRFRklORURfSU5TVEFOQ0VfR0VUVEVSX0JVVF9TRVRURVIsCiAgVU5ERUZJTkVEX01FVEhPRCwKICBVTkRFRklORURfT1BFUkFUT1IsCiAgVU5ERUZJTkVEX1NFVFRFUiwKICBVTkRFRklORURfU1RBVElDX0dFVFRFUl9CVVRfU0VUVEVSLAogIFVOREVGSU5FRF9TVEFUSUNfU0VUVEVSX0JVVF9HRVRURVIsCiAgVU5ERUZJTkVEX1NVUEVSX1NFVFRFUiwKICBXUk9OR19BUkdVTUVOVF9GT1JfSlMsCiAgV1JPTkdfQVJHVU1FTlRfRk9SX0pTX0ZJUlNULAogIFdST05HX0FSR1VNRU5UX0ZPUl9KU19TRUNPTkQsCiAgV1JPTkdfQVJHVU1FTlRfRk9SX0pTX0lOVEVSQ0VQVE9SX0NPTlNUQU5ULAogIC8vIFRPRE8oMzI1NTcpOiBSZW1vdmUgdGhlc2Ugd2hlbiBpc3N1ZSAzMjU1NyBpcyBmaXhlZC4KICBTV0lUQ0hfQ0FTRV9GT1JCSURERU4sCiAgU1dJVENIX0NBU0VfVkFMVUVfT1ZFUlJJREVTX0VRVUFMUywKICBTV0lUQ0hfQ0FTRV9UWVBFU19OT1RfRVFVQUwsCiAgU1dJVENIX0NBU0VfVFlQRVNfTk9UX0VRVUFMX0NBU0UsCn0KCi8vLyBBIG1lc3NhZ2UgdGVtcGxhdGUgZm9yIGFuIGVycm9yLCB3YXJuaW5nLCBoaW50IG9yIGluZm8gbWVzc2FnZSBnZW5lcmF0ZWQKLy8vIGJ5IHRoZSBjb21waWxlci4gRWFjaCB0ZW1wbGF0ZSBpcyBhc3NvY2lhdGVkIHdpdGggYSBbTWVzc2FnZUtpbmRdIHRoYXQKLy8vIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIG1lc3NhZ2UgdGVtcGxhdGUuCi8vIFRPRE8oam9obm5pd2ludGhlcik6IEZvciBJbmZvcywgY29uc2lkZXIgYWRkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZQovLyBlcnJvci93YXJuaW5nL2hpbnQgdGhhdCB0aGV5IGJlbG9uZyB0by4KY2xhc3MgTWVzc2FnZVRlbXBsYXRlIHsKICBmaW5hbCBNZXNzYWdlS2luZCBraW5kOwoKICAvLy8gU2hvdWxkIGRlc2NyaWJlIHdoYXQgaXMgd3JvbmcgYW5kIHdoeS4KICBmaW5hbCBTdHJpbmcgdGVtcGxhdGU7CgogIC8vLyBTaG91bGQgZGVzY3JpYmUgaG93IHRvIGZpeCB0aGUgcHJvYmxlbS4gRWxpZGVkIHdoZW4gdXNpbmcgLS10ZXJzZSBvcHRpb24uCiAgZmluYWwgU3RyaW5nIGhvd1RvRml4OwoKICAvLy8gIEV4YW1wbGVzIHdpbGwgYmUgY2hlY2tlZCBieQogIC8vLyAgdGVzdHMvY29tcGlsZXIvZGFydDJqcy9tZXNzYWdlX2tpbmRfdGVzdC5kYXJ0LgogIC8vLwogIC8vLyAgQW4gZXhhbXBsZSBpcyBlaXRoZXIgYSBTdHJpbmcgY29udGFpbmluZyB0aGUgZXhhbXBsZSBzb3VyY2UgY29kZSBvciBhIE1hcAogIC8vLyAgZnJvbSBmaWxlbmFtZXMgdG8gc291cmNlIGNvZGUuIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhlIGZpbGVuYW1lIGZvciB0aGUKICAvLy8gIG1haW4gbGlicmFyeSBjb2RlIG11c3QgYmUgJ21haW4uZGFydCcuCiAgZmluYWwgTGlzdCBleGFtcGxlczsKCiAgLy8vIEFkZGl0aW9uYWwgb3B0aW9ucyBuZWVkZWQgZm9yIHRoZSBleGFtcGxlcyB0byB3b3JrLgogIGZpbmFsIExpc3Q8U3RyaW5nPiBvcHRpb25zOwoKICBjb25zdCBNZXNzYWdlVGVtcGxhdGUodGhpcy5raW5kLCB0aGlzLnRlbXBsYXRlLAogICAgICB7dGhpcy5ob3dUb0ZpeCwgdGhpcy5leGFtcGxlcywgdGhpcy5vcHRpb25zOiBjb25zdCA8U3RyaW5nPltdfSk7CgogIC8vLyBBbGwgdGVtcGxhdGVzIHVzZWQgYnkgdGhlIGNvbXBpbGVyLgogIC8vLwogIC8vLyBUaGUgbWFwIGlzIGNvbXBsZXRlIG1hcHBpbmcgZnJvbSBbTWVzc2FnZUtpbmRdIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcKICAvLy8gW01lc3NhZ2VUZW1wbGF0ZV0uCiAgLy8gVGhlIGtleSB0eXBlIGlzIGEgdW5pb24gb2YgTWVzc2FnZUtpbmQgYW5kIFNoYXJlZE1lc3NhZ2VLaW5kLgogIHN0YXRpYyBmaW5hbCBNYXA8ZHluYW1pYywgTWVzc2FnZVRlbXBsYXRlPiBURU1QTEFURVMgPSA8ZHluYW1pYywKICAgICAgTWVzc2FnZVRlbXBsYXRlPnt9CiAgICAuLmFkZEFsbChzaGFyZWRfbWVzc2FnZXMuVEVNUExBVEVTKQogICAgLi5hZGRBbGwoY29uc3QgPE1lc3NhZ2VLaW5kLCBNZXNzYWdlVGVtcGxhdGU+ewogICAgICAvLy8gRG8gbm90IHVzZSB0aGlzLiBJdCBpcyBoZXJlIGZvciBsZWdhY3kgYW5kIGRlYnVnZ2luZy4gSXQgdmlvbGF0ZXMgaXRlbQogICAgICAvLy8gNCBvZiB0aGUgZ3VpZGUgbGluZXMgZm9yIGVycm9yIG1lc3NhZ2VzIGluIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuCiAgICAgIE1lc3NhZ2VLaW5kLkdFTkVSSUM6CiAgICAgICAgICBjb25zdCBNZXNzYWdlVGVtcGxhdGUoTWVzc2FnZUtpbmQuR0VORVJJQywgJyN7dGV4dH0nKSwKCiAgICAgIE1lc3NhZ2VLaW5kLkNBTk5PVF9SRVNPTFZFOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5DQU5OT1RfUkVTT0xWRSwgIkNhbm5vdCByZXNvbHZlICcje25hbWV9Jy4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLk5PVF9BX0NPTVBJTEVfVElNRV9DT05TVEFOVDogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuTk9UX0FfQ09NUElMRV9USU1FX0NPTlNUQU5ULAogICAgICAgICAgIk5vdCBhIGNvbXBpbGUtdGltZSBjb25zdGFudC4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLkNZQ0xJQ19DT01QSUxFX1RJTUVfQ09OU1RBTlRTOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5DWUNMSUNfQ09NUElMRV9USU1FX0NPTlNUQU5UUywKICAgICAgICAgICJDeWNsZSBpbiB0aGUgY29tcGlsZS10aW1lIGNvbnN0YW50IGNvbXB1dGF0aW9uLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuVU5ERUZJTkVEX1NUQVRJQ19TRVRURVJfQlVUX0dFVFRFUjogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuVU5ERUZJTkVEX1NUQVRJQ19TRVRURVJfQlVUX0dFVFRFUiwKICAgICAgICAgICJDYW5ub3QgcmVzb2x2ZSBzZXR0ZXIuIiksCgogICAgICBNZXNzYWdlS2luZC5TVFJJTkdfRVhQRUNURUQ6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLlNUUklOR19FWFBFQ1RFRCwKICAgICAgICAgICJFeHBlY3RlZCBhICdTdHJpbmcnLCBidXQgZ290IGFuIGluc3RhbmNlIG9mICcje3R5cGV9Jy4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfQ0xBU1NfQ0FOTk9UX0VYVEVORF9EQVJUX0NMQVNTOgogICAgICAgICAgY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgICAgIE1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfQ0xBU1NfQ0FOTk9UX0VYVEVORF9EQVJUX0NMQVNTLAogICAgICAgICAgICAgICJKcy1pbnRlcm9wIGNsYXNzICcje2Nsc30nIGNhbm5vdCBleHRlbmQgZnJvbSB0aGUgbm9uIGpzLWludGVyb3AgIgogICAgICAgICAgICAgICJjbGFzcyAnI3tzdXBlcmNsYXNzfScuIiwKICAgICAgICAgICAgICBob3dUb0ZpeDogIkFubm90YXRlIHRoZSBzdXBlcmNsYXNzIHdpdGggQEpTLiIsCiAgICAgICAgICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICAgICAgIiIiCiAgICAgICAgICAgICAgaW1wb3J0ICdwYWNrYWdlOmpzL2pzLmRhcnQnOwoKICAgICAgICAgICAgICBjbGFzcyBGb28geyB9CgogICAgICAgICAgICAgIEBKUygpCiAgICAgICAgICAgICAgY2xhc3MgQmFyIGV4dGVuZHMgRm9vIHsgfQoKICAgICAgICAgICAgICBtYWluKCkgewogICAgICAgICAgICAgICAgbmV3IEJhcigpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAiIiIKICAgICAgICAgIF0pLAoKICAgICAgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9JTkRFWF9OT1RfU1VQUE9SVEVEOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5KU19JTlRFUk9QX0lOREVYX05PVF9TVVBQT1JURUQsCiAgICAgICAgICAiSnMtaW50ZXJvcCBkb2VzIG5vdCBzdXBwb3J0IFtdIGFuZCBbXT0gb3BlcmF0b3IgbWV0aG9kcy4iLAogICAgICAgICAgaG93VG9GaXg6ICJUcnkgcmVwbGFjaW5nIFtdIGFuZCBbXT0gb3BlcmF0b3IgbWV0aG9kcyB3aXRoIG5vcm1hbCAiCiAgICAgICAgICAgICAgIm1ldGhvZHMuIiwKICAgICAgICAgIGV4YW1wbGVzOiBjb25zdCBbCiAgICAgICAgICAgICIiIgogICAgICAgIGltcG9ydCAncGFja2FnZTpqcy9qcy5kYXJ0JzsKCiAgICAgICAgQEpTKCkKICAgICAgICBjbGFzcyBGb28gewogICAgICAgICAgZXh0ZXJuYWwgb3BlcmF0b3IgW10oYXJnKTsKICAgICAgICB9CgogICAgICAgIG1haW4oKSB7CiAgICAgICAgICBuZXcgRm9vKClbMF07CiAgICAgICAgfQogICAgICAgICIiIiwKICAgICAgICAgICAgIiIiCiAgICAgICAgaW1wb3J0ICdwYWNrYWdlOmpzL2pzLmRhcnQnOwoKICAgICAgICBASlMoKQogICAgICAgIGNsYXNzIEZvbyB7CiAgICAgICAgICBleHRlcm5hbCBvcGVyYXRvciBbXT0oYXJnLCB2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICBtYWluKCkgewogICAgICAgICAgbmV3IEZvbygpWzBdID0gMTsKICAgICAgICB9CiAgICAgICAgIiIiCiAgICAgICAgICBdKSwKCiAgICAgIE1lc3NhZ2VLaW5kLkpTX09CSkVDVF9MSVRFUkFMX0NPTlNUUlVDVE9SX1dJVEhfUE9TSVRJT05BTF9BUkdVTUVOVFM6CiAgICAgICAgICBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICAgICAgTWVzc2FnZUtpbmQKICAgICAgICAgICAgICAgICAgLkpTX09CSkVDVF9MSVRFUkFMX0NPTlNUUlVDVE9SX1dJVEhfUE9TSVRJT05BTF9BUkdVTUVOVFMsCiAgICAgICAgICAgICAgIlNvbWUgcGFyYW1ldGVycyBpbiBhbm9ueW1vdXMganMtaW50ZXJvcCBjbGFzcyAnI3tjbHN9JyAiCiAgICAgICAgICAgICAgIm9iamVjdCBsaXRlcmFsIGNvbnN0cnVjdG9yIGFyZSBwb3NpdGlvbmFsIGluc3RlYWQgb2YgbmFtZWQuIgogICAgICAgICAgICAgICIuIiwKICAgICAgICAgICAgICBob3dUb0ZpeDogIk1ha2UgYWxsIGFyZ3VtZW50cyBpbiBleHRlcm5hbCBmYWN0b3J5IG9iamVjdCBsaXRlcmFsICIKICAgICAgICAgICAgICAgICAgImNvbnN0cnVjdG9ycyBuYW1lZC4iLAogICAgICAgICAgICAgIGV4YW1wbGVzOiBjb25zdCBbCiAgICAgICAgICAgICIiIgpjbGFzcyBTdXBlciB7CiAgZmFjdG9yeSBTdXBlci5mb28oKSA9PiBudWxsOwp9CmNsYXNzIENsYXNzIGV4dGVuZHMgU3VwZXIgewogIENsYXNzKCkgOiBzdXBlci5mb28oKTsKfQptYWluKCkgPT4gbmV3IENsYXNzKCk7CiIiIgogICAgICAgICAgXSksCgogICAgICBNZXNzYWdlS2luZC5KU19JTlRFUk9QX05PTl9FWFRFUk5BTF9NRU1CRVI6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfTk9OX0VYVEVSTkFMX01FTUJFUiwKICAgICAgICAgICJKcy1pbnRlcm9wIG1lbWJlcnMgbXVzdCBiZSAnZXh0ZXJuYWwnLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9NRU1CRVJfSU5fTk9OX0pTX0lOVEVST1BfQ0xBU1M6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfTUVNQkVSX0lOX05PTl9KU19JTlRFUk9QX0NMQVNTLAogICAgICAgICAgIkpzLWludGVyb3AgY2xhc3MgbWVtYmVycyBhcmUgb25seSBzdXBwb3J0ZWQgaW4ganMtaW50ZXJvcCBjbGFzc2VzLiIsCiAgICAgICAgICBob3dUb0ZpeDogIlRyeSBtYXJraW5nIHRoZSBlbmNsb3NpbmcgY2xhc3MgYXMganMtaW50ZXJvcCBvciAiCiAgICAgICAgICAgICAgInJlbW92ZSB0aGUganMtaW50ZXJvcCBhbm5vdGF0aW9uIGZyb20gdGhlIG1lbWJlci4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfQ0xBU1NfTk9OX0VYVEVSTkFMX0NPTlNUUlVDVE9SOgogICAgICAgICAgY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgICAgIE1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfQ0xBU1NfTk9OX0VYVEVSTkFMX0NPTlNUUlVDVE9SLAogICAgICAgICAgICAgICJDb25zdHJ1Y3RvciAnI3tjb25zdHJ1Y3Rvcn0nIGluIGpzLWludGVyb3AgY2xhc3MgJyN7Y2xzfScgaXMgIgogICAgICAgICAgICAgICJub3QgZXh0ZXJuYWwuIiwKICAgICAgICAgICAgICBob3dUb0ZpeDogIlRyeSBhZGRpbmcgdGhlICdleHRlcm5hbCcgdG8gJyN7Y29uc3RydWN0b3J9Jy4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfQ0xBU1NfTk9OX0VYVEVSTkFMX01FTUJFUjogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9DTEFTU19OT05fRVhURVJOQUxfTUVNQkVSLAogICAgICAgICAgIk1lbWJlciAnI3ttZW1iZXJ9JyBpbiBqcy1pbnRlcm9wIGNsYXNzICcje2Nsc30nIGlzIG5vdCBleHRlcm5hbC4iLAogICAgICAgICAgaG93VG9GaXg6ICJUcnkgYWRkaW5nIHRoZSAnZXh0ZXJuYWwnIHRvICcje21lbWJlcn0nLiIsCiAgICAgICAgICBleGFtcGxlczogY29uc3QgWwogICAgICAgICAgICAiIiIKICAgICAgICAgICAgICBpbXBvcnQgJ3BhY2thZ2U6anMvanMuZGFydCc7CgogICAgICAgICAgICAgIEBKUygpCiAgICAgICAgICAgICAgY2xhc3MgRm9vIHsKICAgICAgICAgICAgICAgIGJhcigpIHt9CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBtYWluKCkgewogICAgICAgICAgICAgICAgbmV3IEZvbygpLmJhcigpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAiIiIKICAgICAgICAgIF0pLAoKICAgICAgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9NRVRIT0RfV0lUSF9OQU1FRF9BUkdVTUVOVFM6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfTUVUSE9EX1dJVEhfTkFNRURfQVJHVU1FTlRTLAogICAgICAgICAgIkpzLWludGVyb3AgbWV0aG9kICcje21ldGhvZH0nIGhhcyBuYW1lZCBhcmd1bWVudHMgYnV0IGlzIG5vdCAiCiAgICAgICAgICAiYSBmYWN0b3J5IGNvbnN0cnVjdG9yIG9mIGFuIEBhbm9ueW1vdXMgQEpTIGNsYXNzLiIsCiAgICAgICAgICBob3dUb0ZpeDogIlJlbW92ZSBhbGwgbmFtZWQgYXJndW1lbnRzIGZyb20ganMtaW50ZXJvcCBtZXRob2Qgb3IgIgogICAgICAgICAgICAgICJpbiB0aGUgY2FzZSBvZiBhIGZhY3RvcnkgY29uc3RydWN0b3IgYW5ub3RhdGUgdGhlIGNsYXNzICIKICAgICAgICAgICAgICAiYXMgQGFub255bW91cy4iLAogICAgICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICAgICAgIiIiCiAgICAgICAgICAgICAgaW1wb3J0ICdwYWNrYWdlOmpzL2pzLmRhcnQnOwoKICAgICAgICAgICAgICBASlMoKQogICAgICAgICAgICAgIGNsYXNzIEZvbyB7CiAgICAgICAgICAgICAgICBleHRlcm5hbCBiYXIoZm9vLCB7YmF6fSk7CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBtYWluKCkgewogICAgICAgICAgICAgICAgbmV3IEZvbygpLmJhcig0LCBiYXo6IDUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAiIiIKICAgICAgICAgIF0pLAogICAgICBNZXNzYWdlS2luZC5JTVBMSUNJVF9KU19JTlRFUk9QX0ZJRUxEX05PVF9TVVBQT1JURUQ6CiAgICAgICAgICBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICAgICAgTWVzc2FnZUtpbmQuSU1QTElDSVRfSlNfSU5URVJPUF9GSUVMRF9OT1RfU1VQUE9SVEVELAogICAgICAgICAgICAgICJGaWVsZHMgaW4ganMtaW50ZXJvcCBjbGFzc2VzIGFyZSBub3Qgc3VwcG9ydGVkLiIsCiAgICAgICAgICAgICAgaG93VG9GaXg6ICJUcnkgcmVwbGFjaW5nIHRoZSBmaWVsZCB3aXRoIGFuICIKICAgICAgICAgICAgICAgICAgImV4dGVybmFsIGdldHRlciBhbmQvb3Igc2V0dGVyLiIpLAogICAgICBNZXNzYWdlS2luZC5KU19JTlRFUk9QX0ZJRUxEX05PVF9TVVBQT1JURUQ6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfRklFTERfTk9UX1NVUFBPUlRFRCwKICAgICAgICAgICJGaWVsZCBjYW4ndCBiZSBtYXJrZWQgYXMganMtaW50ZXJvcC4iLAogICAgICAgICAgaG93VG9GaXg6ICJUcnkgcmVwbGFjaW5nIHRoZSBmaWVsZCB3aXRoIGFuICIKICAgICAgICAgICAgICAiZXh0ZXJuYWwgZ2V0dGVyIGFuZC9vciBzZXR0ZXIuIiksCgogICAgICBNZXNzYWdlS2luZC5MSUJSQVJZX05PVF9GT1VORDogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuTElCUkFSWV9OT1RfRk9VTkQsICJMaWJyYXJ5IG5vdCBmb3VuZCAnI3tyZXNvbHZlZFVyaX0nLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9QQUNLQUdFX0NPTkZJRzogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9QQUNLQUdFX0NPTkZJRywKICAgICAgICAgICIiIlBhY2thZ2UgY29uZmlnIGZpbGUgJyN7dXJpfScgaXMgaW52YWxpZC4KI3tleGNlcHRpb259IiIiLAogICAgICAgICAgaG93VG9GaXg6IERPTlRfS05PV19IT1dfVE9fRklYKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfUEFDS0FHRV9VUkk6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfUEFDS0FHRV9VUkksCiAgICAgICAgICAiJyN7dXJpfScgaXMgbm90IGEgdmFsaWQgcGFja2FnZSBVUkkgKCN7ZXhjZXB0aW9ufSkuIiwKICAgICAgICAgIGhvd1RvRml4OiBET05UX0tOT1dfSE9XX1RPX0ZJWCwKICAgICAgICAgIGV4YW1wbGVzOiBjb25zdCBbCiAgICAgICAgICAgICIiIgovLyBjYW4ndCBoYXZlIGEgJ3RvcCBsZXZlbCcgcGFja2FnZSBVUkkKaW1wb3J0ICdwYWNrYWdlOmZvby5kYXJ0JzsKCm1haW4oKSB7fQoiIiIsCiAgICAgICAgICAgICIiIgovLyBjYW4ndCBoYXZlIDIgc2xhc2hlcwppbXBvcnQgJ3BhY2thZ2U6Ly9mb28vZm9vLmRhcnQnOwoKbWFpbigpIHt9CiIiIiwKICAgICAgICAgICAgIiIiCi8vIHBhY2thZ2UgbmFtZSBtdXN0IGJlIHZhbGlkCmltcG9ydCAncGFja2FnZTpub3RcdmFsaWQvZm9vLmRhcnQnOwoKbWFpbigpIHt9CiIiIgogICAgICAgICAgXSksCgogICAgICBNZXNzYWdlS2luZC5KU19QTEFDRUhPTERFUl9DQVBUVVJFOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5KU19QTEFDRUhPTERFUl9DQVBUVVJFLAogICAgICAgICAgIkpTIGNvZGUgbXVzdCBub3QgdXNlICcjJyBwbGFjZWhvbGRlcnMgaW5zaWRlIGZ1bmN0aW9ucy4iLAogICAgICAgICAgaG93VG9GaXg6CiAgICAgICAgICAgICAgIlVzZSBhbiBpbW1lZGlhdGVseSBjYWxsZWQgSmF2YVNjcmlwdCBmdW5jdGlvbiB0byBjYXB0dXJlIHRoZSIKICAgICAgICAgICAgICAiIHRoZSBwbGFjZWhvbGRlciB2YWx1ZXMgYXMgSmF2YVNjcmlwdCBmdW5jdGlvbiBwYXJhbWV0ZXJzLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuV1JPTkdfQVJHVU1FTlRfRk9SX0pTOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5XUk9OR19BUkdVTUVOVF9GT1JfSlMsCiAgICAgICAgICAiSlMgZXhwcmVzc2lvbiBtdXN0IHRha2UgdHdvIG9yIG1vcmUgYXJndW1lbnRzLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuV1JPTkdfQVJHVU1FTlRfRk9SX0pTX0ZJUlNUOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5XUk9OR19BUkdVTUVOVF9GT1JfSlNfRklSU1QsCiAgICAgICAgICAiSlMgZXhwcmVzc2lvbiBtdXN0IHRha2UgdHdvIG9yIG1vcmUgYXJndW1lbnRzLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuV1JPTkdfQVJHVU1FTlRfRk9SX0pTX1NFQ09ORDogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuV1JPTkdfQVJHVU1FTlRfRk9SX0pTX1NFQ09ORCwKICAgICAgICAgICJKUyBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyBsaXRlcmFsLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuV1JPTkdfQVJHVU1FTlRfRk9SX0pTX0lOVEVSQ0VQVE9SX0NPTlNUQU5UOgogICAgICAgICAgY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgICAgIE1lc3NhZ2VLaW5kLldST05HX0FSR1VNRU5UX0ZPUl9KU19JTlRFUkNFUFRPUl9DT05TVEFOVCwKICAgICAgICAgICAgICAiQXJndW1lbnQgZm9yICdKU19JTlRFUkNFUFRPUl9DT05TVEFOVCcgbXVzdCBiZSBhIHR5cGUgY29uc3RhbnQuIiksCgogICAgICBNZXNzYWdlS2luZC5BQlNUUkFDVF9HRVRURVI6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLkFCU1RSQUNUX0dFVFRFUiwKICAgICAgICAgICJUaGUgZ2V0dGVyICcje25hbWV9JyBoYXMgbm8gaW1wbGVtZW50YXRpb24gaW4gIgogICAgICAgICAgImNsYXNzICcje2NsYXNzfScuIiwKICAgICAgICAgIGhvd1RvRml4OiAiVHJ5IGFkZGluZyBhIGJvZHkgdG8gJyN7bmFtZX0nIG9yIGRlY2xhcmluZyAiCiAgICAgICAgICAgICAgIicje2NsYXNzfScgdG8gYmUgJ2Fic3RyYWN0Jy4iLAogICAgICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICAgICAgIiIiCmNsYXNzIENsYXNzIHsKICBnZXQgZ2V0dGVyOwp9Cm1haW4oKSA9PiBuZXcgQ2xhc3MoKTsKIiIiCiAgICAgICAgICBdKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfTUVUQURBVEE6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfTUVUQURBVEEsCiAgICAgICAgICAiQSBtZXRhZGF0YSBhbm5vdGF0aW9uIG11c3QgYmUgZWl0aGVyIGEgcmVmZXJlbmNlIHRvIGEgY29tcGlsZS10aW1lICIKICAgICAgICAgICJjb25zdGFudCB2YXJpYWJsZSBvciBhIGNhbGwgdG8gYSBjb25zdGFudCBjb25zdHJ1Y3Rvci4iLAogICAgICAgICAgaG93VG9GaXg6CiAgICAgICAgICAgICAgIlRyeSB1c2luZyBhIGRpZmZlcmVudCBjb25zdGFudCB2YWx1ZSBvciByZWZlcmVuY2luZyBpdCB0aHJvdWdoIGEgIgogICAgICAgICAgICAgICJjb25zdGFudCB2YXJpYWJsZS4iLAogICAgICAgICAgZXhhbXBsZXM6IGNvbnN0IFsnQE9iamVjdCBtYWluKCkge30nLCAnQHByaW50IG1haW4oKSB7fSddKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfTUVUQURBVEFfR0VORVJJQzogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9NRVRBREFUQV9HRU5FUklDLAogICAgICAgICAgIkEgbWV0YWRhdGEgYW5ub3RhdGlvbiB1c2luZyBhIGNvbnN0YW50IGNvbnN0cnVjdG9yIGNhbm5vdCB1c2UgdHlwZSAiCiAgICAgICAgICAiYXJndW1lbnRzLiIsCiAgICAgICAgICBob3dUb0ZpeDoKICAgICAgICAgICAgICAiVHJ5IHJlbW92aW5nIHRoZSB0eXBlIGFyZ3VtZW50cyBvciByZWZlcmVuY2luZyB0aGUgY29uc3RhbnQgIgogICAgICAgICAgICAgICJ0aHJvdWdoIGEgY29uc3RhbnQgdmFyaWFibGUuIiwKICAgICAgICAgIGV4YW1wbGVzOiBjb25zdCBbCiAgICAgICAgICAgICcnJwpjbGFzcyBDPFQ+IHsKICBjb25zdCBDKCk7Cn0KQEM8aW50PigpIG1haW4oKSB7fQonJycKICAgICAgICAgIF0pLAoKICAgICAgTWVzc2FnZUtpbmQuRVFVQUxfTUFQX0VOVFJZX0tFWTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuRVFVQUxfTUFQX0VOVFJZX0tFWSwKICAgICAgICAgICJBbiBlbnRyeSB3aXRoIHRoZSBzYW1lIGtleSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgbWFwLiIsCiAgICAgICAgICBob3dUb0ZpeDoKICAgICAgICAgICAgICAiVHJ5IHJlbW92aW5nIHRoZSBwcmV2aW91cyBlbnRyeSBvciBjaGFuZ2luZyB0aGUga2V5IGluIG9uZSAiCiAgICAgICAgICAgICAgIm9mIHRoZSBlbnRyaWVzLiIsCiAgICAgICAgICBleGFtcGxlczogY29uc3QgWwogICAgICAgICAgICAiIiIKbWFpbigpIHsKICB2YXIgbSA9IGNvbnN0IHsnZm9vJzogMSwgJ2Zvbyc6IDJ9Owp9IiIiCiAgICAgICAgICBdKSwKCiAgICAgIE1lc3NhZ2VLaW5kLkVRVUFMX1NFVF9FTlRSWTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuRVFVQUxfU0VUX0VOVFJZLCAiQW4gZW50cnkgYXBwZWFycyB0d2ljZSBpbiB0aGUgc2V0LiIsCiAgICAgICAgICBob3dUb0ZpeDogIlRyeSByZW1vdmluZyBvbmUgb2YgdGhlIGVudHJpZXMuIiwKICAgICAgICAgIGV4YW1wbGVzOiBjb25zdCBbCiAgICAgICAgICAgICIiIgptYWluKCkgewogIHZhciBtID0gY29uc3Qgeydmb28nLCAnYmFyJywgJ2Zvbyd9Owp9IiIiCiAgICAgICAgICBdKSwKCiAgICAgIE1lc3NhZ2VLaW5kLkNPTVBJTEVSX0NSQVNIRUQ6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLkNPTVBJTEVSX0NSQVNIRUQsCiAgICAgICAgICAiVGhlIGNvbXBpbGVyIGNyYXNoZWQgd2hlbiBjb21waWxpbmcgdGhpcyBlbGVtZW50LiIpLAoKICAgICAgTWVzc2FnZUtpbmQuUExFQVNFX1JFUE9SVF9USEVfQ1JBU0g6CiAgICAgICAgICBjb25zdCBNZXNzYWdlVGVtcGxhdGUoTWVzc2FnZUtpbmQuUExFQVNFX1JFUE9SVF9USEVfQ1JBU0gsICcnJwpUaGUgY29tcGlsZXIgaXMgYnJva2VuLgoKV2hlbiBjb21waWxpbmcgdGhlIGFib3ZlIGVsZW1lbnQsIHRoZSBjb21waWxlciBjcmFzaGVkLiBJdCBpcyBub3QKcG9zc2libGUgdG8gdGVsbCBpZiB0aGlzIGlzIGNhdXNlZCBieSBhIHByb2JsZW0gaW4geW91ciBwcm9ncmFtIG9yCm5vdC4gUmVnYXJkbGVzcywgdGhlIGNvbXBpbGVyIHNob3VsZCBub3QgY3Jhc2guCgpUaGUgRGFydCB0ZWFtIHdvdWxkIGdyZWF0bHkgYXBwcmVjaWF0ZSBpZiB5b3Ugd291bGQgdGFrZSBhIG1vbWVudCB0bwpyZXBvcnQgdGhpcyBwcm9ibGVtIGF0IGh0dHA6Ly9kYXJ0YnVnLmNvbS9uZXcuCgpQbGVhc2UgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgoKKiB0aGUgbmFtZSBhbmQgdmVyc2lvbiBvZiB5b3VyIG9wZXJhdGluZyBzeXN0ZW0sCgoqIHRoZSBEYXJ0IFNESyBidWlsZCBudW1iZXIgKCN7YnVpbGRJZH0pLCBhbmQKCiogdGhlIGVudGlyZSBtZXNzYWdlIHlvdSBzZWUgaGVyZSAoaW5jbHVkaW5nIHRoZSBmdWxsIHN0YWNrIHRyYWNlCiAgYmVsb3cgYXMgd2VsbCBhcyB0aGUgc291cmNlIGxvY2F0aW9uIGFib3ZlKS4KJycnKSwKCiAgICAgIE1lc3NhZ2VLaW5kLkhJRERFTl9XQVJOSU5HU19ISU5UUzogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSElEREVOX1dBUk5JTkdTX0hJTlRTLAogICAgICAgICAgIiN7d2FybmluZ3N9IHdhcm5pbmcocykgYW5kICN7aGludHN9IGhpbnQocykgc3VwcHJlc3NlZCBpbiAje3VyaX0uIiksCgogICAgICBNZXNzYWdlS2luZC5ISURERU5fV0FSTklOR1M6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLkhJRERFTl9XQVJOSU5HUywKICAgICAgICAgICIje3dhcm5pbmdzfSB3YXJuaW5nKHMpIHN1cHByZXNzZWQgaW4gI3t1cml9LiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSElEREVOX0hJTlRTOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5ISURERU5fSElOVFMsICIje2hpbnRzfSBoaW50KHMpIHN1cHByZXNzZWQgaW4gI3t1cml9LiIpLAoKICAgICAgTWVzc2FnZUtpbmQuUFJFQU1CTEU6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLlBSRUFNQkxFLAogICAgICAgICAgIldoZW4gcnVuIG9uIHRoZSBjb21tYW5kLWxpbmUsIHRoZSBjb21waWxlZCBvdXRwdXQgbWlnaHQiCiAgICAgICAgICAiIHJlcXVpcmUgYSBwcmVhbWJsZSBmaWxlIGxvY2F0ZWQgaW46XG4iCiAgICAgICAgICAiICA8c2RrPi9saWIvX2ludGVybmFsL2pzX3J1bnRpbWUvbGliL3ByZWFtYmxlcy4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQ09ORElUSU9OQUxfVFlQRTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9DT05ESVRJT05BTF9UWVBFLAogICAgICAgICAgImAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgY29uc3RhbnQgY29uZGl0aW9uLiAiCiAgICAgICAgICAiTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgJ2Jvb2wnLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9JTlRFUlBPTEFUSU9OX1RZUEU6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfSU5URVJQT0xBVElPTl9UWVBFLAogICAgICAgICAgImAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IHZhbGlkIGluIGNvbnN0YW50IHN0cmluZyAiCiAgICAgICAgICAiaW50ZXJwb2xhdGlvbi4gTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgJ2Jvb2wnLCAnaW50JywgJ2RvdWJsZScsICIKICAgICAgICAgICJvciAnU3RyaW5nJy4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQklOQVJZX1BSSU1JVElWRV9UWVBFOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0JJTkFSWV9QUklNSVRJVkVfVFlQRSwKICAgICAgICAgICJgI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIG9wZXJhbmQgb2YgYSAiCiAgICAgICAgICAiY29uc3RhbnQgYmluYXJ5ICN7b3BlcmF0b3J9IGV4cHJlc3Npb24uIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICIKICAgICAgICAgICInYm9vbCcsICdpbnQnLCAnZG91YmxlJywgJ1N0cmluZycsIG9yICdOdWxsJy4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfU1RSSU5HX0FERF9UWVBFOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX1NUUklOR19BRERfVFlQRSwKICAgICAgICAgICJgI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIG9wZXJhbmQgb2YgYSAiCiAgICAgICAgICAiY29uc3RhbnQgYmluYXJ5ICsgZXhwcmVzc2lvbiBvbiAnU3RyaW5nJy4gTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgIgogICAgICAgICAgIidTdHJpbmcnLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9TVFJJTkdfTEVOR1RIX1RZUEU6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfU1RSSU5HX0xFTkdUSF9UWVBFLAogICAgICAgICAgImAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgb3BlcmFuZCBmb3IgYSAiCiAgICAgICAgICAiLmxlbmd0aCBleHByZXNzaW9uLiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAnU3RyaW5nJy4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfU0hJRlQ6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfU0hJRlQsCiAgICAgICAgICAiU2hpZnQgYW1vdW50IG11c3QgYmUgbm9uLW5lZ2F0aXZlIGluICIKICAgICAgICAgICJgI3tsZWZ0fSAje29wZXJhdG9yfSAje3JpZ2h0fWAuIiksCgogICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0RJVjogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9ESVYsCiAgICAgICAgICAiRGl2aXNvciBtdXN0IGJlIG5vbi16ZXJvIGluIGAje2xlZnR9ICN7b3BlcmF0b3J9ICN7cmlnaHR9YC4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfTlVNX0FERF9UWVBFOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX05VTV9BRERfVFlQRSwKICAgICAgICAgICJgI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIG9wZXJhbmQgb2YgYSAiCiAgICAgICAgICAiY29uc3RhbnQgYmluYXJ5ICsgZXhwcmVzc2lvbiBvbiAnbnVtJy4gTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgIgogICAgICAgICAgIidpbnQnIG9yICdkb3VibGUnLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9DQVNUOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0NBU1QsCiAgICAgICAgICAiYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSBzdWJ0eXBlIG9mICN7Y2FzdFR5cGV9LiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9BRERfVFlQRVM6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQUREX1RZUEVTLAogICAgICAgICAgImAje2xlZnRDb25zdGFudH1gIG9mIHR5cGUgJyN7bGVmdFR5cGV9JyBhbmQgIgogICAgICAgICAgImAje3JpZ2h0Q29uc3RhbnR9YCBvZiB0eXBlICcje3JpZ2h0VHlwZX0nIGFyZSBub3QgdmFsaWQgb3BlcmFuZHMgIgogICAgICAgICAgIm9mIGEgY29uc3RhbnQgYmluYXJ5ICsgZXhwcmVzc2lvbi4gTXVzdCBib3RoIGJlIGVpdGhlciBvZiAiCiAgICAgICAgICAidHlwZSAnU3RyaW5nJywgb3Igb2YgdHlwZXMgJ2ludCcgb3IgJ2RvdWJsZScuIiksCgogICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0JJTkFSWV9OVU1fVFlQRTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9CSU5BUllfTlVNX1RZUEUsCiAgICAgICAgICAiYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBvcGVyYW5kIG9mIGEgIgogICAgICAgICAgImNvbnN0YW50IGJpbmFyeSAje29wZXJhdG9yfSBleHByZXNzaW9uLiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAiCiAgICAgICAgICAiJ2ludCcgb3IgJ2RvdWJsZScuIiksCgogICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0JJTkFSWV9JTlRfVFlQRTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9CSU5BUllfSU5UX1RZUEUsCiAgICAgICAgICAiYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBvcGVyYW5kIG9mIGEgIgogICAgICAgICAgImNvbnN0YW50IGJpbmFyeSAje29wZXJhdG9yfSBleHByZXNzaW9uLiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAiCiAgICAgICAgICAiJ2ludCcuIiksCgogICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX05PVF9UWVBFOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX05PVF9UWVBFLAogICAgICAgICAgImAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgb3BlcmFuZCBvZiBhICIKICAgICAgICAgICJjb25zdGFudCB1bmFyeSAje29wZXJhdG9yfSBleHByZXNzaW9uLiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAiCiAgICAgICAgICAiJ2Jvb2wnLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9ORUdBVEVfVFlQRTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9ORUdBVEVfVFlQRSwKICAgICAgICAgICJgI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIG9wZXJhbmQgb2YgYSAiCiAgICAgICAgICAiY29uc3RhbnQgdW5hcnkgI3tvcGVyYXRvcn0gZXhwcmVzc2lvbi4gTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgIgogICAgICAgICAgIidpbnQnIG9yICdkb3VibGUnLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9DT01QTEVNRU5UX1RZUEU6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQ09NUExFTUVOVF9UWVBFLAogICAgICAgICAgImAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgb3BlcmFuZCBvZiBhICIKICAgICAgICAgICJjb25zdGFudCB1bmFyeSAje29wZXJhdG9yfSBleHByZXNzaW9uLiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAiCiAgICAgICAgICAiJ2ludCcuIiksCgogICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0lOREVYOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0lOREVYLAogICAgICAgICAgIkluZGV4IGV4cHJlc3Npb25zIGFyZSBub3QgYWxsb3dlZCBpbiBjb25zdGFudCBleHByZXNzaW9ucy4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfRlJPTV9FTlZJUk9OTUVOVF9OQU1FX1RZUEU6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfRlJPTV9FTlZJUk9OTUVOVF9OQU1FX1RZUEUsCiAgICAgICAgICAiYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBlbnZpcm9ubWVudCBuYW1lICIKICAgICAgICAgICJjb25zdGFudC4gTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgJ1N0cmluZycuIiksCgogICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0JPT0xfRlJPTV9FTlZJUk9OTUVOVF9ERUZBVUxUX1ZBTFVFX1RZUEU6CiAgICAgICAgICBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9CT09MX0ZST01fRU5WSVJPTk1FTlRfREVGQVVMVF9WQUxVRV9UWVBFLAogICAgICAgICAgICAgICJgI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkICIKICAgICAgICAgICAgICAiYGJvb2wuZnJvbUVudmlyb25tZW50YCBkZWZhdWx0IHZhbHVlIGNvbnN0YW50LiAiCiAgICAgICAgICAgICAgIk11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICdib29sJyBvciBgbnVsbGAuIiksCgogICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0lOVF9GUk9NX0VOVklST05NRU5UX0RFRkFVTFRfVkFMVUVfVFlQRToKICAgICAgICAgIGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0lOVF9GUk9NX0VOVklST05NRU5UX0RFRkFVTFRfVkFMVUVfVFlQRSwKICAgICAgICAgICAgICAiYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCAiCiAgICAgICAgICAgICAgImBpbnQuZnJvbUVudmlyb25tZW50YCBkZWZhdWx0IHZhbHVlIGNvbnN0YW50LiAiCiAgICAgICAgICAgICAgIk11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICdpbnQnIG9yIGBudWxsYC4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfU1RSSU5HX0ZST01fRU5WSVJPTk1FTlRfREVGQVVMVF9WQUxVRV9UWVBFOgogICAgICAgICAgY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfU1RSSU5HX0ZST01fRU5WSVJPTk1FTlRfREVGQVVMVF9WQUxVRV9UWVBFLAogICAgICAgICAgICAgICJgI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkICIKICAgICAgICAgICAgICAiYFN0cmluZy5mcm9tRW52aXJvbm1lbnRgIGRlZmF1bHQgdmFsdWUgY29uc3RhbnQuICIKICAgICAgICAgICAgICAiTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgJ1N0cmluZycgb3IgYG51bGxgLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9MT0dJQ0FMX0FORF9PUEVSQU5EX1RZUEU6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfTE9HSUNBTF9BTkRfT1BFUkFORF9UWVBFLAogICAgICAgICAgImAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgbG9naWNhbCBhbmQgb3BlcmFuZC4gIgogICAgICAgICAgIk11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICdib29sJy4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfTE9HSUNBTF9PUl9PUEVSQU5EX1RZUEU6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfTE9HSUNBTF9PUl9PUEVSQU5EX1RZUEUsCiAgICAgICAgICAiYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBsb2dpY2FsIG9yIG9wZXJhbmQuICIKICAgICAgICAgICJNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAnYm9vbCcuIiksCgogICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0NPTlNUUlVDVE9SOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0NPTlNUUlVDVE9SLAogICAgICAgICAgIkNvbnN0cnVjdG9yICcje2NvbnN0cnVjdG9yTmFtZX0nIGlzIG5vdCBhIHZhbGlkIGNvbnN0YW50ICIKICAgICAgICAgICJjb25zdHJ1Y3Rvci4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQVNTRVJUX1ZBTFVFOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0FTU0VSVF9WQUxVRSwgIkFzc2VydGlvbiAnI3thc3NlcnRpb259JyBmYWlsZWQuIiksCgogICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0FTU0VSVF9WQUxVRV9NRVNTQUdFOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0FTU0VSVF9WQUxVRV9NRVNTQUdFLAogICAgICAgICAgIkFzc2VydGlvbiBmYWlsZWQ6ICN7bWVzc2FnZX0iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLk1JUlJPUlNfTElCUkFSWV9OT1RfU1VQUE9SVF9XSVRIX0NGRTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuTUlSUk9SU19MSUJSQVJZX05PVF9TVVBQT1JUX1dJVEhfQ0ZFLCAiIiIKZGFydDJqcyBubyBsb25nZXIgc3VwcG9ydHMgdGhlIGRhcnQ6bWlycm9ycyBsaWJyYXJ5LgoKQVBJcyBmcm9tIHRoaXMgbGlicmFyeSB3aWxsIHRocm93IGEgcnVudGltZSBlcnJvciBhdCB0aGlzIHRpbWUsIGJ1dCB0aGV5IHdpbGwKYmVjb21lIGEgY29tcGlsZS10aW1lIGVycm9yIGluIHRoZSBmdXR1cmUuIiIiKSwKCiAgICAgIE1lc3NhZ2VLaW5kLkRJUkVDVExZX1RIUk9XSU5HX05TTTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuRElSRUNUTFlfVEhST1dJTkdfTlNNLAogICAgICAgICAgIlRoaXMgJ25vU3VjaE1ldGhvZCcgaW1wbGVtZW50YXRpb24gaXMgZ3VhcmFudGVlZCB0byB0aHJvdyBhbiAiCiAgICAgICAgICAiZXhjZXB0aW9uLiBUaGUgZ2VuZXJhdGVkIGNvZGUgd2lsbCBiZSBzbWFsbGVyIGlmIGl0IGlzICIKICAgICAgICAgICJyZXdyaXR0ZW4uIiwKICAgICAgICAgIGhvd1RvRml4OiAiUmV3cml0ZSB0byAiCiAgICAgICAgICAgICAgIidub1N1Y2hNZXRob2QoSW52b2NhdGlvbiBpKSA9PiBzdXBlci5ub1N1Y2hNZXRob2QoaSk7Jy4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLkNPTVBMRVhfVEhST1dJTkdfTlNNOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5DT01QTEVYX1RIUk9XSU5HX05TTSwKICAgICAgICAgICJUaGlzICdub1N1Y2hNZXRob2QnIGltcGxlbWVudGF0aW9uIGlzIGd1YXJhbnRlZWQgdG8gdGhyb3cgYW4gIgogICAgICAgICAgImV4Y2VwdGlvbi4gVGhlIGdlbmVyYXRlZCBjb2RlIHdpbGwgYmUgc21hbGxlciBhbmQgdGhlIGNvbXBpbGVyICIKICAgICAgICAgICJ3aWxsIGJlIGFibGUgdG8gcGVyZm9ybSBtb3JlIG9wdGltaXphdGlvbnMgaWYgaXQgaXMgcmV3cml0dGVuLiIsCiAgICAgICAgICBob3dUb0ZpeDogIlJld3JpdGUgdG8gIgogICAgICAgICAgICAgICInbm9TdWNoTWV0aG9kKEludm9jYXRpb24gaSkgPT4gc3VwZXIubm9TdWNoTWV0aG9kKGkpOycuIiksCgogICAgICBNZXNzYWdlS2luZC5DT01QTEVYX1JFVFVSTklOR19OU006IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLkNPTVBMRVhfUkVUVVJOSU5HX05TTSwKICAgICAgICAgICJPdmVycmlkaW5nICdub1N1Y2hNZXRob2QnIGNhdXNlcyB0aGUgY29tcGlsZXIgdG8gZ2VuZXJhdGUgIgogICAgICAgICAgIm1vcmUgY29kZSBhbmQgcHJldmVudHMgdGhlIGNvbXBpbGVyIGZyb20gZG9pbmcgc29tZSBvcHRpbWl6YXRpb25zLiIsCiAgICAgICAgICBob3dUb0ZpeDogIkNvbnNpZGVyIHJlbW92aW5nIHRoaXMgJ25vU3VjaE1ldGhvZCcgaW1wbGVtZW50YXRpb24uIiksCgogICAgICBNZXNzYWdlS2luZC5SVU5USU1FX1RZUEVfVE9fU1RSSU5HX09CSkVDVDogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuUlVOVElNRV9UWVBFX1RPX1NUUklOR19PQkpFQ1QsCiAgICAgICAgICAiVXNpbmcgJy5ydW50aW1lVHlwZS50b1N0cmluZygpJyBjYXVzZXMgdGhlIGNvbXBpbGVyIHRvIGdlbmVyYXRlICIKICAgICAgICAgICJtb3JlIGNvZGUgYmVjYXVzZSBpdCBuZWVkcyB0byBwcmVzZXJ2ZSB0eXBlIGFyZ3VtZW50cyBvbiBhbGwgIgogICAgICAgICAgImdlbmVyaWMgY2xhc3NlcywgZXZlbiBpZiB0aGV5IGFyZSBub3QgbmVjZXNzYXJ5IGVsc2V3aGVyZS4iLAogICAgICAgICAgaG93VG9GaXg6ICJJZiB1c2VkIG9ubHkgZm9yIGRlYnVnZ2luZywgY29uc2lkZXIgdXNpbmcgb3B0aW9uICIKICAgICAgICAgICAgICAiJHtGbGFncy5sYXhSdW50aW1lVHlwZVRvU3RyaW5nfSB0byByZWR1Y2UgdGhlIGNvZGUgc2l6ZSAiCiAgICAgICAgICAgICAgImltcGFjdC4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLlJVTlRJTUVfVFlQRV9UT19TVFJJTkdfU1VCVFlQRTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuUlVOVElNRV9UWVBFX1RPX1NUUklOR19TVUJUWVBFLAogICAgICAgICAgIlVzaW5nICcucnVudGltZVR5cGUudG9TdHJpbmcoKScgaGVyZSBjYXVzZXMgdGhlIGNvbXBpbGVyIHRvICIKICAgICAgICAgICJnZW5lcmF0ZSBtb3JlIGNvZGUgYmVjYXVzZSBpdCBuZWVkcyB0byBwcmVzZXJ2ZSB0eXBlIGFyZ3VtZW50cyBvbiAiCiAgICAgICAgICAiYWxsIGdlbmVyaWMgc3VidHlwZXMgb2YgJyN7cmVjZWl2ZXJUeXBlfScsIGV2ZW4gaWYgdGhleSBhcmUgbm90ICIKICAgICAgICAgICJuZWNlc3NhcnkgZWxzZXdoZXJlLiIsCiAgICAgICAgICBob3dUb0ZpeDogIklmIHVzZWQgb25seSBmb3IgZGVidWdnaW5nLCBjb25zaWRlciB1c2luZyBvcHRpb24gIgogICAgICAgICAgICAgICIke0ZsYWdzLmxheFJ1bnRpbWVUeXBlVG9TdHJpbmd9IHRvIHJlZHVjZSB0aGUgY29kZSBzaXplICIKICAgICAgICAgICAgICAiaW1wYWN0LiIpLAoKICAgICAgTWVzc2FnZUtpbmQuTk9OX05BVElWRV9FWFRFUk5BTDogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuTk9OX05BVElWRV9FWFRFUk5BTCwKICAgICAgICAgICJPbmx5IGV4dGVybmFsIGpzLWludGVyb3AgZnVuY3Rpb25zIGFyZSBzdXBwb3J0ZWQuIiwKICAgICAgICAgIGhvd1RvRml4OgogICAgICAgICAgICAgICJUcnkgcmVtb3ZpbmcgJ2V4dGVybmFsJyBrZXl3b3JkIG9yIGFubm90YXRpbmcgdGhlIGZ1bmN0aW9uICIKICAgICAgICAgICAgICAiYXMgYSBqcy1pbnRlcm9wIGZ1bmN0aW9uLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuTkFUSVZFX05PTl9JTlNUQU5DRV9JTl9OT05fTkFUSVZFX0NMQVNTOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5OQVRJVkVfTk9OX0lOU1RBTkNFX0lOX05PTl9OQVRJVkVfQ0xBU1MsCiAgICAgICAgICAiTmF0aXZlIG5vbi1pbnN0YW5jZSBtZW1iZXJzIGFyZSBvbmx5IGFsbG93ZWQgaW4gbmF0aXZlIGNsYXNzZXMuIiksCgogICAgICAvLyBUT0RPKDMyNTU3KTogUmVtb3ZlIHRoZXNlIHdoZW4gaXNzdWUgMzI1NTcgaXMgZml4ZWQuCiAgICAgIE1lc3NhZ2VLaW5kLlNXSVRDSF9DQVNFX1ZBTFVFX09WRVJSSURFU19FUVVBTFM6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLlNXSVRDSF9DQVNFX1ZBTFVFX09WRVJSSURFU19FUVVBTFMsCiAgICAgICAgICAiJ2Nhc2UnIGV4cHJlc3Npb24gdHlwZSAnI3t0eXBlfScgb3ZlcnJpZGVzICdvcGVyYXRvciA9PScuIiksCiAgICAgIE1lc3NhZ2VLaW5kLlNXSVRDSF9DQVNFX0ZPUkJJRERFTjogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuU1dJVENIX0NBU0VfRk9SQklEREVOLAogICAgICAgICAgIidjYXNlJyBleHByZXNzaW9uIG1heSBub3QgYmUgb2YgdHlwZSAnI3t0eXBlfScuIiksCiAgICAgIE1lc3NhZ2VLaW5kLlNXSVRDSF9DQVNFX1RZUEVTX05PVF9FUVVBTDogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuU1dJVENIX0NBU0VfVFlQRVNfTk9UX0VRVUFMLAogICAgICAgICAgIidjYXNlJyBleHByZXNzaW9ucyBkbyBub3QgYWxsIGhhdmUgdHlwZSAnI3t0eXBlfScuIiksCiAgICAgIE1lc3NhZ2VLaW5kLlNXSVRDSF9DQVNFX1RZUEVTX05PVF9FUVVBTF9DQVNFOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5TV0lUQ0hfQ0FTRV9UWVBFU19OT1RfRVFVQUxfQ0FTRSwKICAgICAgICAgICInY2FzZScgZXhwcmVzc2lvbiBvZiB0eXBlICcje3R5cGV9Jy4iKSwKICAgIH0pOyAvLyBFbmQgb2YgVEVNUExBVEVTLgoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiB0ZW1wbGF0ZTsKCiAgTWVzc2FnZSBtZXNzYWdlKFtNYXAgYXJndW1lbnRzID0gY29uc3Qge30sIGJvb2wgdGVyc2UgPSBmYWxzZV0pIHsKICAgIHJldHVybiBuZXcgTWVzc2FnZSh0aGlzLCBhcmd1bWVudHMsIHRlcnNlKTsKICB9CgogIGJvb2wgZ2V0IGhhc0hvd1RvRml4ID0+IGhvd1RvRml4ICE9IG51bGwgJiYgaG93VG9GaXggIT0gRE9OVF9LTk9XX0hPV19UT19GSVg7Cn0KCmNsYXNzIE1lc3NhZ2UgewogIGZpbmFsIE1lc3NhZ2VUZW1wbGF0ZSB0ZW1wbGF0ZTsKICBmaW5hbCBNYXAgYXJndW1lbnRzOwogIGZpbmFsIGJvb2wgdGVyc2U7CiAgU3RyaW5nIG1lc3NhZ2U7CgogIE1lc3NhZ2UodGhpcy50ZW1wbGF0ZSwgdGhpcy5hcmd1bWVudHMsIHRoaXMudGVyc2UpIHsKICAgIGFzc2VydCgoKSB7CiAgICAgIGNvbXB1dGVNZXNzYWdlKCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSgpKTsKICB9CgogIE1lc3NhZ2VLaW5kIGdldCBraW5kID0+IHRlbXBsYXRlLmtpbmQ7CgogIFN0cmluZyBjb21wdXRlTWVzc2FnZSgpIHsKICAgIGlmIChtZXNzYWdlID09IG51bGwpIHsKICAgICAgbWVzc2FnZSA9IHRlbXBsYXRlLnRlbXBsYXRlOwogICAgICBhcmd1bWVudHMuZm9yRWFjaCgoa2V5LCB2YWx1ZSkgewogICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2VBbGwoJyN7JHtrZXl9fScsIGNvbnZlcnRUb1N0cmluZyh2YWx1ZSkpOwogICAgICB9KTsKICAgICAgYXNzZXJ0KAogICAgICAgICAga2luZCA9PSBNZXNzYWdlS2luZC5HRU5FUklDIHx8CiAgICAgICAgICAgICAgIW1lc3NhZ2UuY29udGFpbnMobmV3IFJlZ0V4cChyJyNcey4rXH0nKSksCiAgICAgICAgICBmYWlsZWRBdChDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICAgICAgICdNaXNzaW5nIGFyZ3VtZW50cyBpbiBlcnJvciBtZXNzYWdlOiAiJG1lc3NhZ2UiJykpOwogICAgICBpZiAoIXRlcnNlICYmIHRlbXBsYXRlLmhhc0hvd1RvRml4KSB7CiAgICAgICAgU3RyaW5nIGhvd1RvRml4ID0gdGVtcGxhdGUuaG93VG9GaXg7CiAgICAgICAgYXJndW1lbnRzLmZvckVhY2goKGtleSwgdmFsdWUpIHsKICAgICAgICAgIGhvd1RvRml4ID0gaG93VG9GaXgucmVwbGFjZUFsbCgnI3ske2tleX19JywgY29udmVydFRvU3RyaW5nKHZhbHVlKSk7CiAgICAgICAgfSk7CiAgICAgICAgbWVzc2FnZSA9ICckbWVzc2FnZVxuJGhvd1RvRml4JzsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG1lc3NhZ2U7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gY29tcHV0ZU1lc3NhZ2UoKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyEgTWVzc2FnZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuICh0ZW1wbGF0ZSA9PSBvdGhlci50ZW1wbGF0ZSkgJiYgKHRvU3RyaW5nKCkgPT0gb3RoZXIudG9TdHJpbmcoKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdNZXNzYWdlLmhhc2hDb2RlJyk7CgogIHN0YXRpYyBTdHJpbmcgY29udmVydFRvU3RyaW5nKHZhbHVlKSB7CiAgICBpZiAodmFsdWUgaXMgQ29uc3RhbnRFeHByZXNzaW9uKSB7CiAgICAgIHZhbHVlID0gdmFsdWUudG9EYXJ0VGV4dCgpOwogICAgfSBlbHNlIHsKICAgICAgdmFsdWUgPSB0b2tlblRvU3RyaW5nKHZhbHVlKTsKICAgIH0KICAgIHJldHVybiAnJHZhbHVlJzsKICB9Cn0KgwMATk48AUNGBCIETUZPTSYaAU0BPEAmJzgBMgElExMSFBkYHxEgIRkXExcfGAsQExkrGCA0GR4kJCokJSAYGicgHSQhJxomMyQjFBwaFzYtLSgiIiItKjsaFSgfKxgXHxIbDBkkFyEiExQoFBYUJiYaGR8gLjoZJh8kAgFNSy5GKxgaAS0ZAVAZASM2BlFPLhcBOh4BMkcBKgZMGUNDGSgzUVAbQQE5RAFGMysBSDU+AU06JQE6J0UBPSFFUSg9IBArARwBFCgBFxsQEg4BSTZGTRocECUBDhQlCgERGAoNECUBDhQtCgERHAoMDgFLIRpMSEwTUSkgEA4fAhwZAhcEDgFJNjUBVEFQSEQBPSFFTh9LAU88TkEcECsBFBoZEAEXIRASDgFRPko/TEkgHBArARQaKhABFyoQEg47IUNBOzVJNjI3MQE8UQFBLjYRKwE+K0EqHBAoGwEKBRAYIQEKBRAeJQEKBA4BQS5FFE1NAUAtPQFGMz0BRzQ7AT4hRlIBOic7H0MuHBAODgIXBA4BOyhQRBRSJEYBQzBQGBRNLhwQDQ0CFAQOAT4rQxRMIRwQCSYFDgE6TTgcEAknBQ4BOyhAAStJGAFCQzABRS8BKgExAS4BQi8GAUAtUAE6JzsBN08BMyBEMz4BTDlQLgFOO01NGwFRPklNPAFLOElPGAFOO0pEAUEuMi4BPyxKAUg1SUwhAUAtTwFFMjlORzwBSzhJTSEBSzhJTRUBRDFJTBYBRzRJTCEBSzhJTBUBQS5JAU06TToBRCFMQEA8AUMhS0A/OwFGIU5AQj4BSzhRLgFKN1AuAUc0RhsBP1EBRzQrAU9ANQFOMAFALUpEGCJKAT8sSkxMIkoBQC1HUE4BSDVNSkhJSRoBSTZJT00iSUkaAT4rPxRMLAFSP04BPk06SEAtPkYzQUs4Mx0BDCEBRDAEAVACARAiFxQSATcQGBMKBAEpARwbIydLCg4pOS5CLC0pTwwpCAYUBAEMFh0EAQwcKU0EAQxGASknIg0kBhUEAgEucGFja2FnZTpjb21waWxlci9zcmMvZGlhZ25vc3RpY3MvbWVzc2FnZXMuZGFydC5zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9lbnZpcm9ubWVudC5kYXJ0gxAvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIENvbGxlY3RzIGRlZmluaXRpb25zIHByb3ZpZGVkIHRvIHRoZSBjb21waWxlciB2aWEgdGhlIGAtRGAgZmxhZy4KLy8vCi8vLyBFbnZpcm9ubWVudCB2YXJpYWJsZXMgY2FuIGJlIHVzZWQgaW4gdGhlIHVzZXIgY29kZSBpbiB0d28gd2F5cy4gRnJvbQovLy8gY29uZGl0aW9uYWwgaW1wb3J0cywgYW5kIGZyb20gYGNvbnN0IFN0cmluZy5mcm9tRW52aXJvbm1lbnRgIGFuZAovLy8gb3RoZXIgc2ltaWxhciBjb25zdHJ1Y3RvcnMuCmFic3RyYWN0IGNsYXNzIEVudmlyb25tZW50IHsKICAvLy8gUmV0dXJuIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlIGdpdmVuIGtleS4KICAvLy8KICAvLy8gTm90ZSB0aGF0IGBib29sLmZyb21FbnZpcm9ubWVudGAgYW5kIGBpbnQuZnJvbUVudmlyb25tZW50YCBhcmUgYWxzbwogIC8vLyBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBgU3RyaW5nLmZyb21FbnZpcm9ubWVudGAuCiAgU3RyaW5nIHZhbHVlT2YoU3RyaW5nIGtleSk7CgogIC8vLyBSZXR1cm5zIHRoZSBmdWxsIGVudmlyb25tZW50IGFzIG1hcC4KICBNYXA8U3RyaW5nLCBTdHJpbmc+IHRvTWFwKCk7Cn0KFQBOTjwBRQRJRSAdMAZKOB4BKx8CASVwYWNrYWdlOmNvbXBpbGVyL3NyYy9lbnZpcm9ubWVudC5kYXJ0N3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2lvL2xvY2F0aW9uX3Byb3ZpZGVyLmRhcnSGMC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuaW8ubG9jYXRpb25fcHJvdmlkZXI7CgppbXBvcnQgJ2NvZGVfb3V0cHV0LmRhcnQnIHNob3cgQ29kZU91dHB1dExpc3RlbmVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBMb2NhdGlvbiwgU291cmNlOwoKLy8vIEludGVyZmFjZSBmb3IgcHJvdmlkaW5nIGxpbmUvY29sdW1uIGluZm9ybWF0aW9uLgphYnN0cmFjdCBjbGFzcyBMb2NhdGlvblByb3ZpZGVyIHsKICAvLy8gVHJhbnNsYXRlcyB0aGUgemVyby1iYXNlZCBjaGFyYWN0ZXIgW29mZnNldF0gKGZyb20gdGhlIGJlZ2lubmluZyBvZiBhCiAgLy8vIGZpbGUpIHRvIGEgW0xvY2F0aW9uXS4KICBMb2NhdGlvbiBnZXRMb2NhdGlvbihpbnQgb2Zmc2V0KTsKfQoKLy8vIFtDb2RlT3V0cHV0TGlzdGVuZXJdIHRoYXQgY29sbGVjdHMgbGluZSBpbmZvcm1hdGlvbi4KY2xhc3MgTG9jYXRpb25Db2xsZWN0b3IgZXh0ZW5kcyBDb2RlT3V0cHV0TGlzdGVuZXIgaW1wbGVtZW50cyBMb2NhdGlvblByb3ZpZGVyIHsKICBpbnQgbGVuZ3RoID0gMDsKICBMaXN0PGludD4gbGluZVN0YXJ0cyA9IDxpbnQ+WzBdOwoKICB2b2lkIF9jb2xsZWN0KFN0cmluZyB0ZXh0KSB7CiAgICBpbnQgaW5kZXggPSAwOwogICAgd2hpbGUgKGluZGV4IDwgdGV4dC5sZW5ndGgpIHsKICAgICAgLy8gVW5peCB1c2VzICdcbicgYW5kIFdpbmRvd3MgdXNlcyAnXHJcbicsIHNvIHRoaXMgYWxnb3JpdGhtIHdvcmtzIGZvcgogICAgICAvLyBib3RoIHBsYXRmb3Jtcy4KICAgICAgaW5kZXggPSB0ZXh0LmluZGV4T2YoJ1xuJywgaW5kZXgpICsgMTsKICAgICAgaWYgKGluZGV4IDw9IDApIGJyZWFrOwogICAgICBsaW5lU3RhcnRzLmFkZChsZW5ndGggKyBpbmRleCk7CiAgICB9CiAgICBsZW5ndGggKz0gdGV4dC5sZW5ndGg7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIG9uVGV4dChTdHJpbmcgdGV4dCkgewogICAgX2NvbGxlY3QodGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICBMb2NhdGlvbiBnZXRMb2NhdGlvbihpbnQgb2Zmc2V0KSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsdWVJbkludGVydmFsKG9mZnNldCwgMCwgbGVuZ3RoLCAnb2Zmc2V0Jyk7CiAgICByZXR1cm4gbmV3IFNvdXJjZShsaW5lU3RhcnRzLCBudWxsLCBudWxsLCBudWxsKS5nZXRMb2NhdGlvbihudWxsLCBvZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBvbkRvbmUoaW50IGxlbmd0aCkgewogICAgbGluZVN0YXJ0cy5hZGQobGVuZ3RoICsgMSk7CiAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aDsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnbGluZVN0YXJ0cz0kbGluZVN0YXJ0cyxsZW5ndGg9JGxlbmd0aCc7CiAgfQp9CjoATk48ASYBMwE4ATUiTB0kAgE5URIjAR8TIk0ZLR0mBhsEAQwdFAQBDCVCTwQBDBwgGgQBDBY0BAIBLnBhY2thZ2U6Y29tcGlsZXIvc3JjL2lvL2xvY2F0aW9uX3Byb3ZpZGVyLmRhcnQnc2Rrcm9vdDovcGtnL2tlcm5lbC9saWIvYmluYXJ5L3RhZy5kYXJ0l/svLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgpsaWJyYXJ5IGtlcm5lbC5iaW5hcnkudGFnOwoKY2xhc3MgVGFnIHsKICBzdGF0aWMgY29uc3QgaW50IE5vdGhpbmcgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgU29tZXRoaW5nID0gMTsKCiAgc3RhdGljIGNvbnN0IGludCBDbGFzcyA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBFeHRlbnNpb24gPSAxMTU7CgogIHN0YXRpYyBjb25zdCBpbnQgRnVuY3Rpb25Ob2RlID0gMzsKCiAgLy8gTWVtYmVycwogIHN0YXRpYyBjb25zdCBpbnQgRmllbGQgPSA0OwogIHN0YXRpYyBjb25zdCBpbnQgQ29uc3RydWN0b3IgPSA1OwogIHN0YXRpYyBjb25zdCBpbnQgUHJvY2VkdXJlID0gNjsKICBzdGF0aWMgY29uc3QgaW50IFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yID0gMTA4OwoKICAvLyBJbml0aWFsaXplcnMKICBzdGF0aWMgY29uc3QgaW50IEludmFsaWRJbml0aWFsaXplciA9IDc7CiAgc3RhdGljIGNvbnN0IGludCBGaWVsZEluaXRpYWxpemVyID0gODsKICBzdGF0aWMgY29uc3QgaW50IFN1cGVySW5pdGlhbGl6ZXIgPSA5OwogIHN0YXRpYyBjb25zdCBpbnQgUmVkaXJlY3RpbmdJbml0aWFsaXplciA9IDEwOwogIHN0YXRpYyBjb25zdCBpbnQgTG9jYWxJbml0aWFsaXplciA9IDExOwogIHN0YXRpYyBjb25zdCBpbnQgQXNzZXJ0SW5pdGlhbGl6ZXIgPSAxMjsKCiAgLy8gRXhwcmVzc2lvbnMKICBzdGF0aWMgY29uc3QgaW50IENoZWNrTGlicmFyeUlzTG9hZGVkID0gMTM7CiAgc3RhdGljIGNvbnN0IGludCBMb2FkTGlicmFyeSA9IDE0OwogIHN0YXRpYyBjb25zdCBpbnQgRGlyZWN0UHJvcGVydHlHZXQgPSAxNTsKICBzdGF0aWMgY29uc3QgaW50IERpcmVjdFByb3BlcnR5U2V0ID0gMTY7CiAgc3RhdGljIGNvbnN0IGludCBEaXJlY3RNZXRob2RJbnZvY2F0aW9uID0gMTc7CiAgc3RhdGljIGNvbnN0IGludCBDb25zdFN0YXRpY0ludm9jYXRpb24gPSAxODsKICBzdGF0aWMgY29uc3QgaW50IEludmFsaWRFeHByZXNzaW9uID0gMTk7CiAgc3RhdGljIGNvbnN0IGludCBWYXJpYWJsZUdldCA9IDIwOwogIHN0YXRpYyBjb25zdCBpbnQgVmFyaWFibGVTZXQgPSAyMTsKICBzdGF0aWMgY29uc3QgaW50IFByb3BlcnR5R2V0ID0gMjI7CiAgc3RhdGljIGNvbnN0IGludCBQcm9wZXJ0eVNldCA9IDIzOwogIHN0YXRpYyBjb25zdCBpbnQgU3VwZXJQcm9wZXJ0eUdldCA9IDI0OwogIHN0YXRpYyBjb25zdCBpbnQgU3VwZXJQcm9wZXJ0eVNldCA9IDI1OwogIHN0YXRpYyBjb25zdCBpbnQgU3RhdGljR2V0ID0gMjY7CiAgc3RhdGljIGNvbnN0IGludCBTdGF0aWNTZXQgPSAyNzsKICBzdGF0aWMgY29uc3QgaW50IE1ldGhvZEludm9jYXRpb24gPSAyODsKICBzdGF0aWMgY29uc3QgaW50IFN1cGVyTWV0aG9kSW52b2NhdGlvbiA9IDI5OwogIHN0YXRpYyBjb25zdCBpbnQgU3RhdGljSW52b2NhdGlvbiA9IDMwOwogIHN0YXRpYyBjb25zdCBpbnQgQ29uc3RydWN0b3JJbnZvY2F0aW9uID0gMzE7CiAgc3RhdGljIGNvbnN0IGludCBDb25zdENvbnN0cnVjdG9ySW52b2NhdGlvbiA9IDMyOwogIHN0YXRpYyBjb25zdCBpbnQgTm90ID0gMzM7CiAgc3RhdGljIGNvbnN0IGludCBMb2dpY2FsRXhwcmVzc2lvbiA9IDM0OwogIHN0YXRpYyBjb25zdCBpbnQgQ29uZGl0aW9uYWxFeHByZXNzaW9uID0gMzU7CiAgc3RhdGljIGNvbnN0IGludCBTdHJpbmdDb25jYXRlbmF0aW9uID0gMzY7CiAgc3RhdGljIGNvbnN0IGludCBMaXN0Q29uY2F0ZW5hdGlvbiA9IDExMTsKICBzdGF0aWMgY29uc3QgaW50IFNldENvbmNhdGVuYXRpb24gPSAxMTI7CiAgc3RhdGljIGNvbnN0IGludCBNYXBDb25jYXRlbmF0aW9uID0gMTEzOwogIHN0YXRpYyBjb25zdCBpbnQgSW5zdGFuY2VDcmVhdGlvbiA9IDExNDsKICBzdGF0aWMgY29uc3QgaW50IElzRXhwcmVzc2lvbiA9IDM3OwogIHN0YXRpYyBjb25zdCBpbnQgQXNFeHByZXNzaW9uID0gMzg7CiAgc3RhdGljIGNvbnN0IGludCBTdHJpbmdMaXRlcmFsID0gMzk7CiAgc3RhdGljIGNvbnN0IGludCBEb3VibGVMaXRlcmFsID0gNDA7CiAgc3RhdGljIGNvbnN0IGludCBUcnVlTGl0ZXJhbCA9IDQxOwogIHN0YXRpYyBjb25zdCBpbnQgRmFsc2VMaXRlcmFsID0gNDI7CiAgc3RhdGljIGNvbnN0IGludCBOdWxsTGl0ZXJhbCA9IDQzOwogIHN0YXRpYyBjb25zdCBpbnQgU3ltYm9sTGl0ZXJhbCA9IDQ0OwogIHN0YXRpYyBjb25zdCBpbnQgVHlwZUxpdGVyYWwgPSA0NTsKICBzdGF0aWMgY29uc3QgaW50IFRoaXNFeHByZXNzaW9uID0gNDY7CiAgc3RhdGljIGNvbnN0IGludCBSZXRocm93ID0gNDc7CiAgc3RhdGljIGNvbnN0IGludCBUaHJvdyA9IDQ4OwogIHN0YXRpYyBjb25zdCBpbnQgTGlzdExpdGVyYWwgPSA0OTsKICBzdGF0aWMgY29uc3QgaW50IE1hcExpdGVyYWwgPSA1MDsKICBzdGF0aWMgY29uc3QgaW50IEF3YWl0RXhwcmVzc2lvbiA9IDUxOwogIHN0YXRpYyBjb25zdCBpbnQgRnVuY3Rpb25FeHByZXNzaW9uID0gNTI7CiAgc3RhdGljIGNvbnN0IGludCBMZXQgPSA1MzsKICBzdGF0aWMgY29uc3QgaW50IEJsb2NrRXhwcmVzc2lvbiA9IDgyOwogIHN0YXRpYyBjb25zdCBpbnQgSW5zdGFudGlhdGlvbiA9IDU0OwogIHN0YXRpYyBjb25zdCBpbnQgUG9zaXRpdmVJbnRMaXRlcmFsID0gNTU7CiAgc3RhdGljIGNvbnN0IGludCBOZWdhdGl2ZUludExpdGVyYWwgPSA1NjsKICBzdGF0aWMgY29uc3QgaW50IEJpZ0ludExpdGVyYWwgPSA1NzsKICBzdGF0aWMgY29uc3QgaW50IENvbnN0TGlzdExpdGVyYWwgPSA1ODsKICBzdGF0aWMgY29uc3QgaW50IENvbnN0TWFwTGl0ZXJhbCA9IDU5OwogIHN0YXRpYyBjb25zdCBpbnQgU2V0TGl0ZXJhbCA9IDEwOTsKICBzdGF0aWMgY29uc3QgaW50IENvbnN0U2V0TGl0ZXJhbCA9IDExMDsKCiAgLy8gU3RhdGVtZW50cwogIHN0YXRpYyBjb25zdCBpbnQgRXhwcmVzc2lvblN0YXRlbWVudCA9IDYxOwogIHN0YXRpYyBjb25zdCBpbnQgQmxvY2sgPSA2MjsKICBzdGF0aWMgY29uc3QgaW50IEVtcHR5U3RhdGVtZW50ID0gNjM7CiAgc3RhdGljIGNvbnN0IGludCBBc3NlcnRTdGF0ZW1lbnQgPSA2NDsKICBzdGF0aWMgY29uc3QgaW50IExhYmVsZWRTdGF0ZW1lbnQgPSA2NTsKICBzdGF0aWMgY29uc3QgaW50IEJyZWFrU3RhdGVtZW50ID0gNjY7CiAgc3RhdGljIGNvbnN0IGludCBXaGlsZVN0YXRlbWVudCA9IDY3OwogIHN0YXRpYyBjb25zdCBpbnQgRG9TdGF0ZW1lbnQgPSA2ODsKICBzdGF0aWMgY29uc3QgaW50IEZvclN0YXRlbWVudCA9IDY5OwogIHN0YXRpYyBjb25zdCBpbnQgRm9ySW5TdGF0ZW1lbnQgPSA3MDsKICBzdGF0aWMgY29uc3QgaW50IFN3aXRjaFN0YXRlbWVudCA9IDcxOwogIHN0YXRpYyBjb25zdCBpbnQgQ29udGludWVTd2l0Y2hTdGF0ZW1lbnQgPSA3MjsKICBzdGF0aWMgY29uc3QgaW50IElmU3RhdGVtZW50ID0gNzM7CiAgc3RhdGljIGNvbnN0IGludCBSZXR1cm5TdGF0ZW1lbnQgPSA3NDsKICBzdGF0aWMgY29uc3QgaW50IFRyeUNhdGNoID0gNzU7CiAgc3RhdGljIGNvbnN0IGludCBUcnlGaW5hbGx5ID0gNzY7CiAgc3RhdGljIGNvbnN0IGludCBZaWVsZFN0YXRlbWVudCA9IDc3OwogIHN0YXRpYyBjb25zdCBpbnQgVmFyaWFibGVEZWNsYXJhdGlvbiA9IDc4OwogIHN0YXRpYyBjb25zdCBpbnQgRnVuY3Rpb25EZWNsYXJhdGlvbiA9IDc5OwogIHN0YXRpYyBjb25zdCBpbnQgQXN5bmNGb3JJblN0YXRlbWVudCA9IDgwOwogIHN0YXRpYyBjb25zdCBpbnQgQXNzZXJ0QmxvY2sgPSA4MTsKICAvLyA4MiBpcyBvY2N1cGllZCBieSBbQmxvY2tFeHByZXNzaW9uXSAoZXhwcmVzc2lvbikuCgogIC8vIFR5cGVzCiAgc3RhdGljIGNvbnN0IGludCBUeXBlZGVmVHlwZSA9IDg3OwogIHN0YXRpYyBjb25zdCBpbnQgQm90dG9tVHlwZSA9IDg5OwogIHN0YXRpYyBjb25zdCBpbnQgSW52YWxpZFR5cGUgPSA5MDsKICBzdGF0aWMgY29uc3QgaW50IER5bmFtaWNUeXBlID0gOTE7CiAgc3RhdGljIGNvbnN0IGludCBWb2lkVHlwZSA9IDkyOwogIHN0YXRpYyBjb25zdCBpbnQgSW50ZXJmYWNlVHlwZSA9IDkzOwogIHN0YXRpYyBjb25zdCBpbnQgRnVuY3Rpb25UeXBlID0gOTQ7CiAgc3RhdGljIGNvbnN0IGludCBUeXBlUGFyYW1ldGVyVHlwZSA9IDk1OwogIHN0YXRpYyBjb25zdCBpbnQgU2ltcGxlSW50ZXJmYWNlVHlwZSA9IDk2OwogIHN0YXRpYyBjb25zdCBpbnQgU2ltcGxlRnVuY3Rpb25UeXBlID0gOTc7CgogIHN0YXRpYyBjb25zdCBpbnQgQ29uc3RhbnRFeHByZXNzaW9uID0gMTA2OwoKICAvLy8gMTA4IGlzIG9jY3VwaWVkIGJ5IFtSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvcl0gKG1lbWJlcikuCiAgLy8vIDEwOSBpcyBvY2N1cGllZCBieSBbU2V0TGl0ZXJhbF0gKGV4cHJlc3Npb24pLgogIC8vLyAxMTAgaXMgb2NjdXBpZWQgYnkgW0NvbnN0U2V0TGl0ZXJhbF0gKGV4cHJlc3Npb24pLgogIC8vLyAxMTEgaXMgb2NjdXBpZWQgYnkgW0xpc3RDb25jYXRlbmF0aW9uXSAoZXhwcmVzc2lvbikuCiAgLy8vIDExMiBpcyBvY2N1cGllZCBieSBbU2V0Q29uY2F0ZW5hdGlvbl0gKGV4cHJlc3Npb24pLgogIC8vLyAxMTMgaXMgb2NjdXBpZWQgYnkgW01hcENvbmNhdGVuYXRpb25dIChleHByZXNzaW9uKS4KICAvLy8gMTE0IGlzIG9jY3VwaWVkIGJ5IFtJbnN0YW5jZUNyZWF0aW9uXSAoZXhwcmVzc2lvbikuCgogIHN0YXRpYyBjb25zdCBpbnQgU3BlY2lhbGl6ZWRUYWdIaWdoQml0ID0gMHg4MDsgLy8gMTAwMDAwMDAKICBzdGF0aWMgY29uc3QgaW50IFNwZWNpYWxpemVkVGFnTWFzayA9IDB4Rjg7IC8vIDExMTExMDAwCiAgc3RhdGljIGNvbnN0IGludCBTcGVjaWFsaXplZFBheWxvYWRNYXNrID0gMHg3OyAvLyAwMDAwMDExMQoKICBzdGF0aWMgY29uc3QgaW50IFNwZWNpYWxpemVkVmFyaWFibGVHZXQgPSAxMjg7CiAgc3RhdGljIGNvbnN0IGludCBTcGVjaWFsaXplZFZhcmlhYmxlU2V0ID0gMTM2OwogIHN0YXRpYyBjb25zdCBpbnQgU3BlY2lhbGl6ZWRJbnRMaXRlcmFsID0gMTQ0OwoKICBzdGF0aWMgY29uc3QgaW50IFNwZWNpYWxpemVkSW50TGl0ZXJhbEJpYXMgPSAzOwoKICBzdGF0aWMgY29uc3QgaW50IENvbXBvbmVudEZpbGUgPSAweDkwQUJDREVGOwoKICAvLy8gSW50ZXJuYWwgdmVyc2lvbiBvZiBrZXJuZWwgYmluYXJ5IGZvcm1hdC4KICAvLy8gQnVtcCBpdCB3aGVuIG1ha2luZyBpbmNvbXBhdGlibGUgY2hhbmdlcyBpbiBrZXJuZWwgYmluYXJpZXMuCiAgLy8vIEtlZXAgaW4gc3luYyB3aXRoIHJ1bnRpbWUvdm0va2VybmVsX2JpbmFyeS5oLCBwa2cva2VybmVsL2JpbmFyeS5tZC4KICBzdGF0aWMgY29uc3QgaW50IEJpbmFyeUZvcm1hdFZlcnNpb24gPSAzMDsKfQoKYWJzdHJhY3QgY2xhc3MgQ29uc3RhbnRUYWcgewogIHN0YXRpYyBjb25zdCBpbnQgTnVsbENvbnN0YW50ID0gMDsKICBzdGF0aWMgY29uc3QgaW50IEJvb2xDb25zdGFudCA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBJbnRDb25zdGFudCA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBEb3VibGVDb25zdGFudCA9IDM7CiAgc3RhdGljIGNvbnN0IGludCBTdHJpbmdDb25zdGFudCA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBTeW1ib2xDb25zdGFudCA9IDU7CiAgc3RhdGljIGNvbnN0IGludCBNYXBDb25zdGFudCA9IDY7CiAgc3RhdGljIGNvbnN0IGludCBMaXN0Q29uc3RhbnQgPSA3OwogIHN0YXRpYyBjb25zdCBpbnQgU2V0Q29uc3RhbnQgPSAxMzsKICBzdGF0aWMgY29uc3QgaW50IEluc3RhbmNlQ29uc3RhbnQgPSA4OwogIHN0YXRpYyBjb25zdCBpbnQgUGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCA9IDk7CiAgc3RhdGljIGNvbnN0IGludCBUZWFyT2ZmQ29uc3RhbnQgPSAxMDsKICBzdGF0aWMgY29uc3QgaW50IFR5cGVMaXRlcmFsQ29uc3RhbnQgPSAxMTsKICBzdGF0aWMgY29uc3QgaW50IFVuZXZhbHVhdGVkQ29uc3RhbnQgPSAxMjsKICAvLyAxMyBpcyBvY2N1cGllZCBieSBbU2V0Q29uc3RhbnRdCn0KgKcATk48GwEMICIBHiQBJQENHiQiOAESKykpMCorAREuJSsrMC8rJSUlJSoqIyMqLyovNB0rLy0sKysrJiYnJyUmJSclKCEfJSQpLB0pJywsJyopJSoBEC0fKCkqKCglJigpMSUpIiQoLS0tJTcBCyUkJSUiJyYrLSwBLQFDNDk7Ojo6AT06PQExMTABMgEvATBDSi0CAR0lJSQnJyckJSUpNSktLSUCAR5wYWNrYWdlOmtlcm5lbC9iaW5hcnkvdGFnLmRhcnQpc2Rrcm9vdDovcGtnL2tlcm5lbC9saWIvaW1wb3J0X3RhYmxlLmRhcnSTWy8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCmxpYnJhcnkga2VybmVsLmltcG9ydF90YWJsZTsKCmltcG9ydCAnYXN0LmRhcnQnOwoKYWJzdHJhY3QgY2xhc3MgSW1wb3J0VGFibGUgewogIGludCBnZXRJbXBvcnRJbmRleChMaWJyYXJ5IGxpYnJhcnkpOwp9CgpjbGFzcyBDb21wb25lbnRJbXBvcnRUYWJsZSBpbXBsZW1lbnRzIEltcG9ydFRhYmxlIHsKICBmaW5hbCBNYXA8TGlicmFyeSwgaW50PiBfbGlicmFyeUluZGV4ID0gPExpYnJhcnksIGludD57fTsKCiAgQ29tcG9uZW50SW1wb3J0VGFibGUoQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb21wb25lbnQubGlicmFyaWVzLmxlbmd0aDsgKytpKSB7CiAgICAgIF9saWJyYXJ5SW5kZXhbY29tcG9uZW50LmxpYnJhcmllc1tpXV0gPSBpOwogICAgfQogIH0KCiAgaW50IGdldEltcG9ydEluZGV4KExpYnJhcnkgbGlicmFyeSkgPT4gX2xpYnJhcnlJbmRleFtsaWJyYXJ5XSA/PyAtMTsKfQoKY2xhc3MgTGlicmFyeUltcG9ydFRhYmxlIGltcGxlbWVudHMgSW1wb3J0VGFibGUgewogIGZpbmFsIExpc3Q8U3RyaW5nPiBfaW1wb3J0UGF0aHMgPSA8U3RyaW5nPltdOwogIGZpbmFsIExpc3Q8TGlicmFyeT4gX2ltcG9ydGVkTGlicmFyaWVzID0gPExpYnJhcnk+W107CiAgZmluYWwgTWFwPExpYnJhcnksIGludD4gX2xpYnJhcnlJbmRleCA9IDxMaWJyYXJ5LCBpbnQ+e307CgogIGZhY3RvcnkgTGlicmFyeUltcG9ydFRhYmxlKExpYnJhcnkgbGliKSB7CiAgICByZXR1cm4gbmV3IF9JbXBvcnRUYWJsZUJ1aWxkZXIobGliKS5idWlsZCgpOwogIH0KCiAgTGlicmFyeUltcG9ydFRhYmxlLmVtcHR5KCk7CgogIC8vLyBUaGUgbGlzdCBvZiBpbXBvcnRzLgogIC8vLwogIC8vLyBTaG91bGQgbm90IGJlIG1vZGlmaWVkIGRpcmVjdGx5LCBhcyB0aGUgaW5kZXggbWFwIHdvdWxkIGdvIG91dCBvZiBzeW5jLgogIExpc3Q8U3RyaW5nPiBnZXQgaW1wb3J0UGF0aHMgPT4gX2ltcG9ydFBhdGhzOwoKICBMaXN0PExpYnJhcnk+IGdldCBpbXBvcnRlZExpYnJhcmllcyA9PiBfaW1wb3J0ZWRMaWJyYXJpZXM7CgogIGludCBhZGRJbXBvcnQoTGlicmFyeSB0YXJnZXQsIFN0cmluZyBpbXBvcnRQYXRoKSB7CiAgICBpbnQgaW5kZXggPSBfbGlicmFyeUluZGV4W3RhcmdldF07CiAgICBpZiAoaW5kZXggIT0gbnVsbCkgcmV0dXJuIGluZGV4OwogICAgaW5kZXggPSBfaW1wb3J0UGF0aHMubGVuZ3RoOwogICAgX2ltcG9ydFBhdGhzLmFkZChpbXBvcnRQYXRoKTsKICAgIF9pbXBvcnRlZExpYnJhcmllcy5hZGQodGFyZ2V0KTsKICAgIF9saWJyYXJ5SW5kZXhbdGFyZ2V0XSA9IGluZGV4OwogICAgcmV0dXJuIGluZGV4OwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBpbXBvcnQsIG9yIC0xIGlmIG5vdCBmb3VuZC4KICBpbnQgZ2V0SW1wb3J0SW5kZXgoTGlicmFyeSBsaWJyYXJ5KSB7CiAgICByZXR1cm4gX2xpYnJhcnlJbmRleFtsaWJyYXJ5XSA/PyAtMTsKICB9CgogIFN0cmluZyBnZXRJbXBvcnRQYXRoKExpYnJhcnkgbGlicmFyeSkgewogICAgcmV0dXJuIF9pbXBvcnRQYXRoc1tnZXRJbXBvcnRJbmRleChsaWJyYXJ5KV07CiAgfQp9CgovLy8gQnVpbGRzIHRoZSBpbXBvcnQgdGFibGUgZm9yIGEgZ2l2ZW4gbGlicmFyeS4KY2xhc3MgX0ltcG9ydFRhYmxlQnVpbGRlciBleHRlbmRzIFJlY3Vyc2l2ZVZpc2l0b3IgewogIGZpbmFsIExpYnJhcnlJbXBvcnRUYWJsZSB0YWJsZSA9IG5ldyBMaWJyYXJ5SW1wb3J0VGFibGUuZW1wdHkoKTsKICBmaW5hbCBMaWJyYXJ5IHJlZmVyZW5jZUxpYnJhcnk7CgogIExpYnJhcnlJbXBvcnRUYWJsZSBidWlsZCgpIHsKICAgIHJlZmVyZW5jZUxpYnJhcnkuYWNjZXB0KHRoaXMpOwogICAgcmV0dXJuIHRhYmxlOwogIH0KCiAgX0ltcG9ydFRhYmxlQnVpbGRlcih0aGlzLnJlZmVyZW5jZUxpYnJhcnkpIHsKICAgIHRhYmxlLmFkZEltcG9ydChyZWZlcmVuY2VMaWJyYXJ5LCAnJyk7CiAgfQoKICB2b2lkIGFkZExpYnJhcnlJbXBvcnQoTGlicmFyeSB0YXJnZXQpIHsKICAgIGlmICh0YXJnZXQgPT0gcmVmZXJlbmNlTGlicmFyeSkgcmV0dXJuOyAvLyBTZWxmLXJlZmVyZW5jZSBpcyBzcGVjaWFsLgogICAgdmFyIHJlZmVyZW5jZVVyaSA9IHJlZmVyZW5jZUxpYnJhcnkuaW1wb3J0VXJpOwogICAgdmFyIHRhcmdldFVyaSA9IHRhcmdldC5pbXBvcnRVcmk7CiAgICBpZiAodGFyZ2V0VXJpID09IG51bGwpIHsKICAgICAgdGhyb3cgJyRyZWZlcmVuY2VVcmkgY2Fubm90IHJlZmVyIHRvIGxpYnJhcnkgd2l0aG91dCBhbiBpbXBvcnQgVVJJJzsKICAgIH0KICAgIC8vIFRvIHN1cHBvcnQgdXNpbmcgY3VzdG9tLXVyaXMgaW4gdW5pdCB0ZXN0cywgd2UgZG9uJ3QgY2hlY2sgZGlyZWN0bHkKICAgIC8vIHdoZXRoZXIgdGhlIHNjaGVtZSBpcyAnZmlsZTonLCBidXQgaW5zdGVhZCB3ZSBjaGVjayB0aGF0IGlzIG5vdCAnZGFydDonCiAgICAvLyBvciAncGFja2FnZTonLgogICAgYm9vbCBpc0ZpbGVPckN1c3RvbVNjaGVtZSh1cmkpID0+CiAgICAgICAgdXJpLnNjaGVtZSAhPSAnJyAmJiB1cmkuc2NoZW1lICE9ICdwYWNrYWdlJyAmJiB1cmkuc2NoZW1lICE9ICdkYXJ0JzsKICAgIGJvb2wgaXNUYXJnZXRTY2hlbWVGaWxlT3JDdXN0b20gPSBpc0ZpbGVPckN1c3RvbVNjaGVtZSh0YXJnZXRVcmkpOwogICAgYm9vbCBpc1JlZmVyZW5jZVNjaGVtZUZpbGVPckN1c3RvbSA9IGlzRmlsZU9yQ3VzdG9tU2NoZW1lKHJlZmVyZW5jZVVyaSk7CiAgICBpZiAoaXNUYXJnZXRTY2hlbWVGaWxlT3JDdXN0b20gJiYgaXNSZWZlcmVuY2VTY2hlbWVGaWxlT3JDdXN0b20pIHsKICAgICAgU3RyaW5nIHJlbGF0aXZlVXJpID0gcmVsYXRpdmVVcmlQYXRoKHRhcmdldFVyaSwgcmVmZXJlbmNlVXJpKTsKICAgICAgdGFibGUuYWRkSW1wb3J0KHRhcmdldCwgcmVsYXRpdmVVcmkpOwogICAgfSBlbHNlIGlmIChpc1RhcmdldFNjaGVtZUZpbGVPckN1c3RvbSkgewogICAgICAvLyBDYW5ub3QgaW1wb3J0IGEgZmlsZTpVUkkgZnJvbSBhIGRhcnQ6VVJJIG9yIHBhY2thZ2U6VVJJLgogICAgICAvLyBXZSBtYXkgd2FudCB0byByZW1vdmUgdGhpcyByZXN0cmljdGlvbiwgYnV0IGZvciBub3cgaXQncyBqdXN0IGEgc2FuaXR5CiAgICAgIC8vIGNoZWNrLgogICAgICB0aHJvdyAnJHJlZmVyZW5jZVVyaSBjYW5ub3QgcmVmZXIgdG8gYXBwbGljYXRpb24gbGlicmFyeSAkdGFyZ2V0VXJpJzsKICAgIH0gZWxzZSB7CiAgICAgIHRhYmxlLmFkZEltcG9ydCh0YXJnZXQsIHRhcmdldC5pbXBvcnRVcmkudG9TdHJpbmcoKSk7CiAgICB9CiAgfQoKICB2aXNpdENsYXNzUmVmZXJlbmNlKENsYXNzIG5vZGUpIHsKICAgIGFkZExpYnJhcnlJbXBvcnQobm9kZS5lbmNsb3NpbmdMaWJyYXJ5KTsKICB9CgogIHZpc2l0TGlicmFyeShMaWJyYXJ5IG5vZGUpIHsKICAgIHN1cGVyLnZpc2l0TGlicmFyeShub2RlKTsKICAgIGZvciAoUmVmZXJlbmNlIGV4cG9ydGVkUmVmZXJlbmNlIGluIG5vZGUuYWRkaXRpb25hbEV4cG9ydHMpIHsKICAgICAgYWRkTGlicmFyeUltcG9ydChleHBvcnRlZFJlZmVyZW5jZS5ub2RlLnBhcmVudCk7CiAgICB9CiAgfQoKICBkZWZhdWx0TWVtYmVyUmVmZXJlbmNlKE1lbWJlciBub2RlKSB7CiAgICBhZGRMaWJyYXJ5SW1wb3J0KG5vZGUuZW5jbG9zaW5nTGlicmFyeSk7CiAgfQoKICB2aXNpdE5hbWUoTmFtZSBuYW1lKSB7CiAgICBpZiAobmFtZS5saWJyYXJ5ICE9IG51bGwpIHsKICAgICAgYWRkTGlicmFyeUltcG9ydChuYW1lLmxpYnJhcnkpOwogICAgfQogIH0KfQoKU3RyaW5nIHJlbGF0aXZlVXJpUGF0aChVcmkgdGFyZ2V0LCBVcmkgcmVmKSB7CiAgTGlzdDxTdHJpbmc+IHRhcmdldFNlZ21lbnRzID0gdGFyZ2V0LnBhdGhTZWdtZW50czsKICBMaXN0PFN0cmluZz4gcmVmU2VnbWVudHMgPSByZWYucGF0aFNlZ21lbnRzOwogIGludCB0byA9IHJlZlNlZ21lbnRzLmxlbmd0aDsKICBpZiAodGFyZ2V0U2VnbWVudHMubGVuZ3RoIDwgdG8pIHRvID0gdGFyZ2V0U2VnbWVudHMubGVuZ3RoOwogIHRvLS07IC8vIFRoZSBsYXN0IGVudHJ5IGlzIHRoZSBmaWxlbmFtZSwgaGVyZSB3ZSBjb21wYXJlIG9ubHkgZGlyZWN0b3JpZXMuCiAgaW50IHNhbWUgPSAtMTsKICBmb3IgKGludCBpID0gMDsgaSA8IHRvOyBpKyspIHsKICAgIGlmICh0YXJnZXRTZWdtZW50c1tpXSA9PSByZWZTZWdtZW50c1tpXSkgewogICAgICBzYW1lID0gaTsKICAgIH0gZWxzZSB7CiAgICAgIGJyZWFrOwogICAgfQogIH0KICBpZiAoc2FtZSA9PSB0YXJnZXRTZWdtZW50cy5sZW5ndGggLSAyICYmCiAgICAgIHRhcmdldFNlZ21lbnRzLmxlbmd0aCA9PSByZWZTZWdtZW50cy5sZW5ndGgpIHsKICAgIC8vIEJvdGggcGFydHMgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2Ygc2VnbWVudHMsCiAgICAvLyBhbmQgdGhleSBhZ3JlZSBvbiBhbGwgZGlyZWN0b3JpZXMuCiAgICBpZiAodGFyZ2V0U2VnbWVudHMubGFzdCA9PSAiIikgcmV0dXJuICIuIjsKICAgIHJldHVybiB0YXJnZXRTZWdtZW50cy5sYXN0OwogIH0KICBMaXN0PFN0cmluZz4gcGF0aCA9IG5ldyBMaXN0PFN0cmluZz4oKTsKICBpbnQgb2tlZCA9IHNhbWUgKyAxOwogIHdoaWxlIChva2VkIDwgcmVmU2VnbWVudHMubGVuZ3RoIC0gMSkgewogICAgcGF0aC5hZGQoIi4uIik7CiAgICBva2VkKys7CiAgfQogIHBhdGguYWRkQWxsKHRhcmdldFNlZ21lbnRzLnNraXAoc2FtZSArIDEpKTsKCiAgaWYgKHBhdGguaXNFbXB0eSkgcGF0aC5hZGQoIi4iKTsKICByZXR1cm4gcGF0aC5qb2luKCIvIik7Cn0KgJ4ATk48HQETAR0nAgE0PAEuOzEGBAFHAgEyMDg8ASwxBAEeARsGTjABPQE1JyUhIiQjEgQBQSgpBAEqMgQCATE1QyIBHyMSBAEvKwQBKkozJh1LBktPFiZNR01HRSwtQlAQTA08BgQBJC0EAR8eQjcGBAEoLQQBGSAmBgQCAS41Lx8+TREhLxANDQYEKzU0Ki8gBCoXKhQMBC4BIxkCASBwYWNrYWdlOmtlcm5lbC9pbXBvcnRfdGFibGUuZGFydEFzZGtyb290Oi9wa2cva2VybmVsL2xpYi9zcmMvaGllcmFyY2h5X2Jhc2VkX3R5cGVfZW52aXJvbm1lbnQuZGFydINBLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkga2VybmVsLmhpZXJhcmNoeV9iYXNlZF90eXBlX2Vudmlyb25tZW50OwoKaW1wb3J0ICcuLi9hc3QuZGFydCcgc2hvdyBDbGFzcywgSW50ZXJmYWNlVHlwZTsKCmltcG9ydCAnLi4vY2xhc3NfaGllcmFyY2h5LmRhcnQnIHNob3cgQ2xhc3NIaWVyYXJjaHk7CgppbXBvcnQgJy4uL2NvcmVfdHlwZXMuZGFydCcgc2hvdyBDb3JlVHlwZXM7CgppbXBvcnQgJy4uL3R5cGVfZW52aXJvbm1lbnQuZGFydCcgc2hvdyBUeXBlRW52aXJvbm1lbnQ7CgpjbGFzcyBIaWVyYXJjaHlCYXNlZFR5cGVFbnZpcm9ubWVudCBleHRlbmRzIFR5cGVFbnZpcm9ubWVudCB7CiAgZmluYWwgQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5OwoKICBIaWVyYXJjaHlCYXNlZFR5cGVFbnZpcm9ubWVudChDb3JlVHlwZXMgY29yZVR5cGVzLCB0aGlzLmhpZXJhcmNoeSkKICAgICAgOiBzdXBlci5mcm9tU3ViY2xhc3MoY29yZVR5cGVzKTsKCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRUeXBlQXNJbnN0YW5jZU9mKEludGVyZmFjZVR5cGUgdHlwZSwgQ2xhc3Mgc3VwZXJjbGFzcykgewogICAgcmV0dXJuIGhpZXJhcmNoeS5nZXRUeXBlQXNJbnN0YW5jZU9mKHR5cGUsIHN1cGVyY2xhc3MpOwogIH0KfQobAE5OPAExATABNgEsATgBPiIBRScBDEw8BAIBOHBhY2thZ2U6a2VybmVsL3NyYy9oaWVyYXJjaHlfYmFzZWRfdHlwZV9lbnZpcm9ubWVudC5kYXJ0JXNka3Jvb3Q6L3BrZy9rZXJuZWwvbGliL3NyYy9oZWFwLmRhcnSGcS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gQmFzaWMgaW1wbGVtZW50YXRpb24gb2YgYSBoZWFwLCB3aXRoIE8obG9nIG4pIGluc2VydGlvbiBhbmQgcmVtb3ZhbC4KYWJzdHJhY3QgY2xhc3MgSGVhcDxUPiB7CiAgZmluYWwgX2l0ZW1zID0gPFQ+W107CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2l0ZW1zLmlzRW1wdHk7CgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX2l0ZW1zLmlzTm90RW1wdHk7CgogIHZvaWQgYWRkKFQgaXRlbSkgewogICAgaW50IGluZGV4ID0gX2l0ZW1zLmxlbmd0aDsKICAgIF9pdGVtcy5sZW5ndGggKz0gMTsKICAgIHdoaWxlIChpbmRleCA+IDApIHsKICAgICAgVCBwYXJlbnQgPSBfaXRlbXNbX3BhcmVudEluZGV4KGluZGV4KV07CiAgICAgIGlmIChzb3J0c0JlZm9yZShwYXJlbnQsIGl0ZW0pKSBicmVhazsKICAgICAgX2l0ZW1zW2luZGV4XSA9IHBhcmVudDsKICAgICAgaW5kZXggPSBfcGFyZW50SW5kZXgoaW5kZXgpOwogICAgfQogICAgX2l0ZW1zW2luZGV4XSA9IGl0ZW07CiAgfQoKICBUIHJlbW92ZSgpIHsKICAgIFQgcmVtb3ZlZCA9IF9pdGVtc1swXTsKICAgIFQgb3JwaGFuID0gX2l0ZW1zLnJlbW92ZUxhc3QoKTsKICAgIGlmIChfaXRlbXMuaXNOb3RFbXB0eSkgX3JlSW5zZXJ0KG9ycGhhbik7CiAgICByZXR1cm4gcmVtb3ZlZDsKICB9CgogIC8vLyBDbGllbnQgc2hvdWxkIHVzZSBhIGRlcml2ZWQgY2xhc3MgdG8gc3BlY2lmeSB0aGUgc29ydCBvcmRlci4KICBib29sIHNvcnRzQmVmb3JlKFQgYSwgVCBiKTsKCiAgaW50IF9maXJzdENoaWxkSW5kZXgoaW50IGluZGV4KSB7CiAgICByZXR1cm4gKGluZGV4IDw8IDEpICsgMTsKICB9CgogIGludCBfcGFyZW50SW5kZXgoaW50IGluZGV4KSB7CiAgICByZXR1cm4gKGluZGV4IC0gMSkgPj4gMTsKICB9CgogIHZvaWQgX3JlSW5zZXJ0KFQgaXRlbSkgewogICAgaW50IGluZGV4ID0gMDsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGludCBjaGlsZEluZGV4ID0gX2ZpcnN0Q2hpbGRJbmRleChpbmRleCk7CiAgICAgIGlmIChjaGlsZEluZGV4ID49IF9pdGVtcy5sZW5ndGgpIGJyZWFrOwogICAgICBUIGNoaWxkID0gX2l0ZW1zW2NoaWxkSW5kZXhdOwogICAgICBpZiAoY2hpbGRJbmRleCArIDEgPCBfaXRlbXMubGVuZ3RoKSB7CiAgICAgICAgVCBuZXh0Q2hpbGQgPSBfaXRlbXNbY2hpbGRJbmRleCArIDFdOwogICAgICAgIGlmIChzb3J0c0JlZm9yZShuZXh0Q2hpbGQsIGNoaWxkKSkgewogICAgICAgICAgY2hpbGQgPSBuZXh0Q2hpbGQ7CiAgICAgICAgICBjaGlsZEluZGV4Kys7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzb3J0c0JlZm9yZShpdGVtLCBjaGlsZCkpIGJyZWFrOwogICAgICBfaXRlbXNbaW5kZXhdID0gX2l0ZW1zW2NoaWxkSW5kZXhdOwogICAgICBpbmRleCA9IGNoaWxkSW5kZXg7CiAgICB9CiAgICBfaXRlbXNbaW5kZXhdID0gaXRlbTsKICB9Cn0KQABOTjwBSRkYASYBLAEVHxgYLiweIwYaBAEPGyQuFAQBQx4BJB0EASAdBAEbExMwLiQsLi0dGAoIKyoaBhoEAgEccGFja2FnZTprZXJuZWwvc3JjL2hlYXAuZGFydCpzZGtyb290Oi9wa2cva2VybmVsL2xpYi9saWJyYXJ5X2luZGV4LmRhcnSg/S8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCmxpYnJhcnkga2VybmVsLmxpYnJhcnlfaW5kZXg7CgppbXBvcnQgJ2FzdC5kYXJ0JzsKCi8vLyBQcm92aWRlcyBuYW1lLWJhc2VkIGFjY2VzcyB0byBsaWJyYXJ5LCBjbGFzcywgYW5kIG1lbWJlciBBU1Qgbm9kZXMuCi8vLwovLy8gV2hlbiBjb25zdHJ1Y3RlZCwgYSBnaXZlbiBzZXQgb2YgbGlicmFyaWVzIGFyZSBpbmRleGVkIGltbWVkaWF0ZWx5LCBhbmQKLy8vIHdpbGwgbm90IGJlIHVwLXRvLWRhdGUgd2l0aCBjaGFuZ2VzIG1hZGUgYWZ0ZXIgaXQgd2FzIGNyZWF0ZWQuCmNsYXNzIExpYnJhcnlJbmRleCB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBnZXR0ZXJQcmVmaXggPSAnZ2V0Oic7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBzZXR0ZXJQcmVmaXggPSAnc2V0Oic7CgogIC8vLyBBIHNwZWNpYWwgY2xhc3MgbmFtZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgdG9wLWxldmVsIG1lbWJlcnMKICAvLy8gb2YgYSBsaWJyYXJ5LgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdG9wTGV2ZWwgPSAnOjonOwoKICBmaW5hbCBNYXA8U3RyaW5nLCBfQ2xhc3NUYWJsZT4gX2xpYnJhcmllcyA9IDxTdHJpbmcsIF9DbGFzc1RhYmxlPnt9OwoKICAvLy8gSW5kZXhlcyB0aGUgbGlicmFyaWVzIHdpdGggdGhlIFVSSXMgZ2l2ZW4gaW4gW2xpYnJhcnlVcmlzXS4KICBMaWJyYXJ5SW5kZXgoQ29tcG9uZW50IGNvbXBvbmVudCwgSXRlcmFibGU8U3RyaW5nPiBsaWJyYXJ5VXJpcykgewogICAgdmFyIGxpYnJhcnlVcmlTZXQgPSBsaWJyYXJ5VXJpcy50b1NldCgpOwogICAgZm9yICh2YXIgbGlicmFyeSBpbiBjb21wb25lbnQubGlicmFyaWVzKSB7CiAgICAgIHZhciB1cmkgPSAnJHtsaWJyYXJ5LmltcG9ydFVyaX0nOwogICAgICBpZiAobGlicmFyeVVyaVNldC5jb250YWlucyh1cmkpKSB7CiAgICAgICAgX2xpYnJhcmllc1t1cmldID0gbmV3IF9DbGFzc1RhYmxlKGxpYnJhcnkpOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gSW5kZXhlcyB0aGUgbGlicmFyaWVzIHdpdGggdGhlIFVSSXMgZ2l2ZW4gaW4gW2xpYnJhcnlVcmlzXS4KICBMaWJyYXJ5SW5kZXguYnlVcmkoQ29tcG9uZW50IGNvbXBvbmVudCwgSXRlcmFibGU8VXJpPiBsaWJyYXJ5VXJpcykKICAgICAgOiB0aGlzKGNvbXBvbmVudCwgbGlicmFyeVVyaXMubWFwKCh1cmkpID0+ICckdXJpJykpOwoKICAvLy8gSW5kZXhlcyBgZGFydDpgIGxpYnJhcmllcy4KICBMaWJyYXJ5SW5kZXguY29yZUxpYnJhcmllcyhDb21wb25lbnQgY29tcG9uZW50KSB7CiAgICBmb3IgKHZhciBsaWJyYXJ5IGluIGNvbXBvbmVudC5saWJyYXJpZXMpIHsKICAgICAgaWYgKGxpYnJhcnkuaW1wb3J0VXJpLnNjaGVtZSA9PSAnZGFydCcpIHsKICAgICAgICBfbGlicmFyaWVzWycke2xpYnJhcnkuaW1wb3J0VXJpfSddID0gbmV3IF9DbGFzc1RhYmxlKGxpYnJhcnkpOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gSW5kZXhlcyB0aGUgZW50aXJlIGNvbXBvbmVudC4KICAvLy8KICAvLy8gQ29uc2lkZXIgdXNpbmcgYW5vdGhlciBjb25zdHJ1Y3RvciB0byBvbmx5IGluZGV4IHRoZSBsaWJyYXJpZXMgdGhhdAogIC8vLyBhcmUgbmVlZGVkLgogIExpYnJhcnlJbmRleC5hbGwoQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgZm9yICh2YXIgbGlicmFyeSBpbiBjb21wb25lbnQubGlicmFyaWVzKSB7CiAgICAgIF9saWJyYXJpZXNbJyR7bGlicmFyeS5pbXBvcnRVcml9J10gPSBuZXcgX0NsYXNzVGFibGUobGlicmFyeSk7CiAgICB9CiAgfQoKICBfQ2xhc3NUYWJsZSBfZ2V0TGlicmFyeUluZGV4KFN0cmluZyB1cmkpIHsKICAgIF9DbGFzc1RhYmxlIGxpYnJhcnlJbmRleCA9IF9saWJyYXJpZXNbdXJpXTsKICAgIGlmIChsaWJyYXJ5SW5kZXggPT0gbnVsbCkgewogICAgICB0aHJvdyAiVGhlIGxpYnJhcnkgJyR1cmknIGhhcyBub3QgYmVlbiBpbmRleGVkIjsKICAgIH0KICAgIHJldHVybiBsaWJyYXJ5SW5kZXg7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbGlicmFyeSB3aXRoIHRoZSBnaXZlbiBVUkkuCiAgLy8vCiAgLy8vIFRocm93cyBhbiBlcnJvciBpZiBpdCBkb2VzIG5vdCBleGlzdC4KICBMaWJyYXJ5IGdldExpYnJhcnkoU3RyaW5nIHVyaSkgPT4gX2dldExpYnJhcnlJbmRleCh1cmkpLmxpYnJhcnk7CgogIC8vLyBMaWtlIFtnZXRMaWJyYXJ5XSBidXQgcmV0dXJucyBgbnVsbGAgaWYgbm90IGZvdW5kLgogIExpYnJhcnkgdHJ5R2V0TGlicmFyeShTdHJpbmcgdXJpKSA9PiBfbGlicmFyaWVzW3VyaV0/LmxpYnJhcnk7CgogIC8vLyBUcnVlIGlmIHRoZSBsaWJyYXJ5IHdpdGggdGhlIGdpdmVuIFVSSSBleGlzdHMgYW5kIHdhcyBpbmRleGVkLgogIGJvb2wgY29udGFpbnNMaWJyYXJ5KFN0cmluZyB1cmkpID0+IF9saWJyYXJpZXMuY29udGFpbnNLZXkodXJpKTsKCiAgLy8vIFJldHVybnMgdGhlIGNsYXNzIHdpdGggdGhlIGdpdmVuIG5hbWUgaW4gdGhlIGdpdmVuIGxpYnJhcnkuCiAgLy8vCiAgLy8vIEFuIGVycm9yIGlzIHRocm93biBpZiB0aGUgY2xhc3MgaXMgbm90IGZvdW5kLgogIENsYXNzIGdldENsYXNzKFN0cmluZyBsaWJyYXJ5LCBTdHJpbmcgY2xhc3NOYW1lKSB7CiAgICByZXR1cm4gX2dldExpYnJhcnlJbmRleChsaWJyYXJ5KS5nZXRDbGFzcyhjbGFzc05hbWUpOwogIH0KCiAgLy8vIExpa2UgW2dldENsYXNzXSBidXQgcmV0dXJucyBgbnVsbGAgaWYgbm90IGZvdW5kLgogIENsYXNzIHRyeUdldENsYXNzKFN0cmluZyBsaWJyYXJ5LCBTdHJpbmcgY2xhc3NOYW1lKSB7CiAgICByZXR1cm4gX2xpYnJhcmllc1tsaWJyYXJ5XT8udHJ5R2V0Q2xhc3MoY2xhc3NOYW1lKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBtZW1iZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgaW4gdGhlIGdpdmVuIGNsYXNzLCBpbiB0aGUKICAvLy8gZ2l2ZW4gbGlicmFyeS4KICAvLy8KICAvLy8gSWYgYSBnZXR0ZXIgb3Igc2V0dGVyIGlzIHdhbnRlZCwgdGhlIGBnZXQ6YCBvciBgc2V0OmAgcHJlZml4IG11c3QgYmUKICAvLy8gYWRkZWQgaW4gZnJvbnQgb2YgdGhlIG1lbWJlciBuYW1lLgogIC8vLwogIC8vLyBUaGUgc3BlY2lhbCBjbGFzcyBuYW1lIGA6OmAgY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRvcC1sZXZlbCBtZW1iZXJzLgogIC8vLwogIC8vLyBJZiB0aGUgbWVtYmVyIG5hbWUgaXMgcHJpdmF0ZSBpdCBpcyBjb25zaWRlcmVkIHByaXZhdGUgdG8gW2xpYnJhcnldLgogIC8vLyBJdCBpcyBub3QgcG9zc2libGUgd2l0aCB0aGlzIGNsYXNzIHRvIGxvb2t1cCBtZW1iZXJzIHdob3NlIG5hbWUgaXMgcHJpdmF0ZQogIC8vLyB0byBhIGxpYnJhcnkgb3RoZXIgdGhhbiB0aGUgb25lIGNvbnRhaW5pbmcgaXQuCiAgLy8vCiAgLy8vIEFuIGVycm9yIGlzIHRocm93biBpZiB0aGUgbWVtYmVyIGlzIG5vdCBmb3VuZC4KICBNZW1iZXIgZ2V0TWVtYmVyKFN0cmluZyBsaWJyYXJ5LCBTdHJpbmcgY2xhc3NOYW1lLCBTdHJpbmcgbWVtYmVyTmFtZSkgewogICAgcmV0dXJuIF9nZXRMaWJyYXJ5SW5kZXgobGlicmFyeSkuZ2V0TWVtYmVyKGNsYXNzTmFtZSwgbWVtYmVyTmFtZSk7CiAgfQoKICAvLy8gTGlrZSBbZ2V0TWVtYmVyXSBidXQgcmV0dXJucyBgbnVsbGAgaWYgbm90IGZvdW5kLgogIE1lbWJlciB0cnlHZXRNZW1iZXIoU3RyaW5nIGxpYnJhcnksIFN0cmluZyBjbGFzc05hbWUsIFN0cmluZyBtZW1iZXJOYW1lKSB7CiAgICByZXR1cm4gX2xpYnJhcmllc1tsaWJyYXJ5XT8udHJ5R2V0TWVtYmVyKGNsYXNzTmFtZSwgbWVtYmVyTmFtZSk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgdG9wLWxldmVsIG1lbWJlciB3aXRoIHRoZSBnaXZlbiBuYW1lLCBpbiB0aGUgZ2l2ZW4gbGlicmFyeS4KICAvLy8KICAvLy8gSWYgYSBnZXR0ZXIgb3Igc2V0dGVyIGlzIHdhbnRlZCwgdGhlIGBnZXQ6YCBvciBgc2V0OmAgcHJlZml4IG11c3QgYmUKICAvLy8gYWRkZWQgaW4gZnJvbnQgb2YgdGhlIG1lbWJlciBuYW1lLgogIC8vLwogIC8vLyBJZiB0aGUgbWVtYmVyIG5hbWUgaXMgcHJpdmF0ZSBpdCBpcyBjb25zaWRlcmVkIHByaXZhdGUgdG8gW2xpYnJhcnldLgogIC8vLyBJdCBpcyBub3QgcG9zc2libGUgd2l0aCB0aGlzIGNsYXNzIHRvIGxvb2t1cCBtZW1iZXJzIHdob3NlIG5hbWUgaXMgcHJpdmF0ZQogIC8vLyB0byBhIGxpYnJhcnkgb3RoZXIgdGhhbiB0aGUgb25lIGNvbnRhaW5pbmcgaXQuCiAgLy8vCiAgLy8vIEFuIGVycm9yIGlzIHRocm93biBpZiB0aGUgbWVtYmVyIGlzIG5vdCBmb3VuZC4KICBNZW1iZXIgZ2V0VG9wTGV2ZWxNZW1iZXIoU3RyaW5nIGxpYnJhcnksIFN0cmluZyBtZW1iZXJOYW1lKSB7CiAgICByZXR1cm4gZ2V0TWVtYmVyKGxpYnJhcnksIHRvcExldmVsLCBtZW1iZXJOYW1lKTsKICB9CgogIC8vLyBMaWtlIFtnZXRUb3BMZXZlbE1lbWJlcl0gYnV0IHJldHVybnMgYG51bGxgIGlmIG5vdCBmb3VuZC4KICBNZW1iZXIgdHJ5R2V0VG9wTGV2ZWxNZW1iZXIoCiAgICAgIFN0cmluZyBsaWJyYXJ5LCBTdHJpbmcgY2xhc3NOYW1lLCBTdHJpbmcgbWVtYmVyTmFtZSkgewogICAgcmV0dXJuIHRyeUdldE1lbWJlcihsaWJyYXJ5LCB0b3BMZXZlbCwgbWVtYmVyTmFtZSk7CiAgfQp9CgpjbGFzcyBfQ2xhc3NUYWJsZSB7CiAgZmluYWwgTGlicmFyeSBsaWJyYXJ5OwoKICBNYXA8U3RyaW5nLCBfTWVtYmVyVGFibGU+IF9jbGFzc2VzOwoKICBfQ2xhc3NUYWJsZSh0aGlzLmxpYnJhcnkpOwoKICBNYXA8U3RyaW5nLCBfTWVtYmVyVGFibGU+IGdldCBjbGFzc2VzIHsKICAgIGlmIChfY2xhc3NlcyA9PSBudWxsKSB7CiAgICAgIF9jbGFzc2VzID0gPFN0cmluZywgX01lbWJlclRhYmxlPnt9OwogICAgICBfY2xhc3Nlc1tMaWJyYXJ5SW5kZXgudG9wTGV2ZWxdID0gbmV3IF9NZW1iZXJUYWJsZS50b3BMZXZlbCh0aGlzKTsKICAgICAgZm9yICh2YXIgY2xhc3NfIGluIGxpYnJhcnkuY2xhc3NlcykgewogICAgICAgIF9jbGFzc2VzW2NsYXNzXy5uYW1lXSA9IG5ldyBfTWVtYmVyVGFibGUodGhpcywgY2xhc3NfKTsKICAgICAgfQogICAgICBmb3IgKFJlZmVyZW5jZSByZWZlcmVuY2UgaW4gbGlicmFyeS5hZGRpdGlvbmFsRXhwb3J0cykgewogICAgICAgIE5hbWVkTm9kZSBub2RlID0gcmVmZXJlbmNlLm5vZGU7CiAgICAgICAgaWYgKG5vZGUgaXMgQ2xhc3MpIHsKICAgICAgICAgIF9jbGFzc2VzW25vZGUubmFtZV0gPSBuZXcgX01lbWJlclRhYmxlKHRoaXMsIG5vZGUpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIF9jbGFzc2VzOwogIH0KCiAgU3RyaW5nIGdldCBjb250YWluZXJOYW1lIHsKICAgIC8vIEZvciB1c2VmdWwgZXJyb3IgbWVzc2FnZXMsIGl0IGNhbiBiZSBoZWxwZnVsIHRvIGluZGljYXRlIGlmIHRoZSBsaWJyYXJ5CiAgICAvLyBpcyBleHRlcm5hbC4gIElmIGEgY2xhc3Mgb3IgbWVtYmVyIHdhcyBub3QgZm91bmQgaW4gYW4gZXh0ZXJuYWwgbGlicmFyeSwKICAgIC8vIGl0IG1pZ2h0IGJlIHRoYXQgaXQgZXhpc3RzIGluIHRoZSBhY3R1YWwgbGlicmFyeSwgYnV0IGl0cyBpbnRlcmZhY2Ugd2FzCiAgICAvLyBub3QgaW5jbHVkZWQgaW4gdGhpcyBidWlsZCB1bml0LgogICAgcmV0dXJuIGxpYnJhcnkuaXNFeHRlcm5hbAogICAgICAgID8gImV4dGVybmFsIGxpYnJhcnkgJyR7bGlicmFyeS5pbXBvcnRVcml9JyIKICAgICAgICA6ICJsaWJyYXJ5ICcke2xpYnJhcnkuaW1wb3J0VXJpfSciOwogIH0KCiAgX01lbWJlclRhYmxlIF9nZXRDbGFzc0luZGV4KFN0cmluZyBuYW1lKSB7CiAgICB2YXIgaW5kZXhlciA9IGNsYXNzZXNbbmFtZV07CiAgICBpZiAoaW5kZXhlciA9PSBudWxsKSB7CiAgICAgIHRocm93ICJDbGFzcyAnJG5hbWUnIG5vdCBmb3VuZCBpbiAkY29udGFpbmVyTmFtZSI7CiAgICB9CiAgICByZXR1cm4gaW5kZXhlcjsKICB9CgogIENsYXNzIGdldENsYXNzKFN0cmluZyBuYW1lKSB7CiAgICByZXR1cm4gX2dldENsYXNzSW5kZXgobmFtZSkuY2xhc3NfOwogIH0KCiAgQ2xhc3MgdHJ5R2V0Q2xhc3MoU3RyaW5nIG5hbWUpIHsKICAgIHJldHVybiBjbGFzc2VzW25hbWVdPy5jbGFzc187CiAgfQoKICBNZW1iZXIgZ2V0TWVtYmVyKFN0cmluZyBjbGFzc05hbWUsIFN0cmluZyBtZW1iZXJOYW1lKSB7CiAgICByZXR1cm4gX2dldENsYXNzSW5kZXgoY2xhc3NOYW1lKS5nZXRNZW1iZXIobWVtYmVyTmFtZSk7CiAgfQoKICBNZW1iZXIgdHJ5R2V0TWVtYmVyKFN0cmluZyBjbGFzc05hbWUsIFN0cmluZyBtZW1iZXJOYW1lKSB7CiAgICByZXR1cm4gY2xhc3Nlc1tjbGFzc05hbWVdPy50cnlHZXRNZW1iZXIobWVtYmVyTmFtZSk7CiAgfQp9CgpjbGFzcyBfTWVtYmVyVGFibGUgewogIGZpbmFsIF9DbGFzc1RhYmxlIHBhcmVudDsKICBmaW5hbCBDbGFzcyBjbGFzc187IC8vIE51bGwgZm9yIHRvcC1sZXZlbC4KICBNYXA8U3RyaW5nLCBNZW1iZXI+IF9tZW1iZXJzOwoKICBMaWJyYXJ5IGdldCBsaWJyYXJ5ID0+IHBhcmVudC5saWJyYXJ5OwoKICBfTWVtYmVyVGFibGUodGhpcy5wYXJlbnQsIHRoaXMuY2xhc3NfKTsKCiAgX01lbWJlclRhYmxlLnRvcExldmVsKHRoaXMucGFyZW50KSA6IGNsYXNzXyA9IG51bGw7CgogIE1hcDxTdHJpbmcsIE1lbWJlcj4gZ2V0IG1lbWJlcnMgewogICAgaWYgKF9tZW1iZXJzID09IG51bGwpIHsKICAgICAgX21lbWJlcnMgPSA8U3RyaW5nLCBNZW1iZXI+e307CiAgICAgIGlmIChjbGFzc18gIT0gbnVsbCkgewogICAgICAgIGNsYXNzXy5wcm9jZWR1cmVzLmZvckVhY2goYWRkTWVtYmVyKTsKICAgICAgICBjbGFzc18uZmllbGRzLmZvckVhY2goYWRkTWVtYmVyKTsKICAgICAgICBjbGFzc18uY29uc3RydWN0b3JzLmZvckVhY2goYWRkTWVtYmVyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBsaWJyYXJ5LnByb2NlZHVyZXMuZm9yRWFjaChhZGRNZW1iZXIpOwogICAgICAgIGxpYnJhcnkuZmllbGRzLmZvckVhY2goYWRkTWVtYmVyKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIF9tZW1iZXJzOwogIH0KCiAgU3RyaW5nIGdldERpc2FtYmlndWF0ZWROYW1lKE1lbWJlciBtZW1iZXIpIHsKICAgIGlmIChtZW1iZXIgaXMgUHJvY2VkdXJlKSB7CiAgICAgIGlmIChtZW1iZXIuaXNHZXR0ZXIpIHJldHVybiBMaWJyYXJ5SW5kZXguZ2V0dGVyUHJlZml4ICsgbWVtYmVyLm5hbWUubmFtZTsKICAgICAgaWYgKG1lbWJlci5pc1NldHRlcikgcmV0dXJuIExpYnJhcnlJbmRleC5zZXR0ZXJQcmVmaXggKyBtZW1iZXIubmFtZS5uYW1lOwogICAgfQogICAgcmV0dXJuIG1lbWJlci5uYW1lLm5hbWU7CiAgfQoKICB2b2lkIGFkZE1lbWJlcihNZW1iZXIgbWVtYmVyKSB7CiAgICBpZiAobWVtYmVyLm5hbWUuaXNQcml2YXRlICYmIG1lbWJlci5uYW1lLmxpYnJhcnkgIT0gbGlicmFyeSkgewogICAgICAvLyBNZW1iZXJzIHdob3NlIG5hbWUgaXMgcHJpdmF0ZSB0byBvdGhlciBsaWJyYXJpZXMgY2Fubm90IGN1cnJlbnRseQogICAgICAvLyBiZSBmb3VuZCB3aXRoIHRoZSBMaWJyYXJ5SW5kZXggY2xhc3MuCiAgICAgIHJldHVybjsKICAgIH0KICAgIF9tZW1iZXJzW2dldERpc2FtYmlndWF0ZWROYW1lKG1lbWJlcildID0gbWVtYmVyOwogIH0KCiAgU3RyaW5nIGdldCBjb250YWluZXJOYW1lIHsKICAgIGlmIChjbGFzc18gPT0gbnVsbCkgewogICAgICByZXR1cm4gInRvcC1sZXZlbCBvZiAke3BhcmVudC5jb250YWluZXJOYW1lfSI7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gImNsYXNzICcke2NsYXNzXy5uYW1lfScgaW4gJHtwYXJlbnQuY29udGFpbmVyTmFtZX0iOwogICAgfQogIH0KCiAgTWVtYmVyIGdldE1lbWJlcihTdHJpbmcgbmFtZSkgewogICAgdmFyIG1lbWJlciA9IG1lbWJlcnNbbmFtZV07CiAgICBpZiAobWVtYmVyID09IG51bGwpIHsKICAgICAgU3RyaW5nIG1lc3NhZ2UgPSAiQSBtZW1iZXIgd2l0aCBkaXNhbWJpZ3VhdGVkIG5hbWUgJyRuYW1lJyB3YXMgbm90IGZvdW5kICIKICAgICAgICAgICJpbiAkY29udGFpbmVyTmFtZSI7CiAgICAgIHZhciBnZXR0ZXIgPSBMaWJyYXJ5SW5kZXguZ2V0dGVyUHJlZml4ICsgbmFtZTsKICAgICAgdmFyIHNldHRlciA9IExpYnJhcnlJbmRleC5zZXR0ZXJQcmVmaXggKyBuYW1lOwogICAgICBpZiAobWVtYmVyc1tnZXR0ZXJdICE9IG51bGwgfHwgbWVtYmVyc1tzZXR0ZXJdICE9IG51bGwpIHsKICAgICAgICB0aHJvdyAiJG1lc3NhZ2UuIERpZCB5b3UgbWVhbiAnJGdldHRlcicgb3IgJyRzZXR0ZXInPyI7CiAgICAgIH0KICAgICAgdGhyb3cgbWVzc2FnZTsKICAgIH0KICAgIHJldHVybiBtZW1iZXI7CiAgfQoKICBNZW1iZXIgdHJ5R2V0TWVtYmVyKFN0cmluZyBuYW1lKSA9PiBtZW1iZXJzW25hbWVdOwp9CoECAE5OPB4BEwFIBExDFS0tAUwUJwFHAUJELS8oKTQIBgQBQkU7ASE0LzBHCAYEASQGShIqL0UGBAEtMCA3BhkEAS4GLEMBOUEBRUMBQgY0NToEATc4OAQBSRUGSykGSwZLUTUGNUpHBAE4TUUEAU4GSykGS1E1BjVANQQBQB89OAQCARQZASYBHQEqHCtJLEAIPykdPgoIBhUEAR1PUE8oHjQsBAEtIRs5BhQEASAoBAEjIgQBOjwEAT05BAIBFRwtIAEpASoBNgEkHCUcLiowDy8rCAYVBAEvH1BQBh0EASJDSy8OBjUEAR0aNQ1CBgQBIiAaUR81NUBACBUGEwQBNQIBIXBhY2thZ2U6a2VybmVsL2xpYnJhcnlfaW5kZXguZGFydDBzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY2hhcmNvZGUvbGliL2FzY2lpLmRhcnSjKS8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIERlY2xhcmUgaW50ZWdlciBjb25zdGFudHMgZm9yIGVhY2ggQVNDSUkgY2hhcmFjdGVyLgovLy8KLy8vIFRoZSBjb25zdGFudHMgYWxsIHN0YXJ0IHdpdGggIiQiIHRvIGF2b2lkIGNvbmZsaWN0aW5nIHdpdGggb3RoZXIgY29uc3RhbnRzLgovLy8KLy8vIEZvciBjaGFyYWN0ZXJzIHRoYXQgYXJlIHZhbGlkIGluIGFuIGlkZW50aWZpZXIsIHRoZSBjaGFyYWN0ZXIgaXRzZWxmCi8vLyBmb2xsb3dzIHRoZSAiJCIuIEZvciBvdGhlciBjaGFyYWN0ZXJzLCBhIHN5bWJvbGljIG5hbWUgaXMgdXNlZC4KLy8vIEluIHNvbWUgY2FzZXMsIG11bHRpcGxlIGFsdGVybmF0aXZlIHN5bWJvbGljIG5hbWVzIGFyZSBwcm92aWRlZC4KLy8vIFBsZWFzZSBzdGljayB0byB1c2luZyBvbmUgbmFtZSBwZXIgY2hhcmFjdGVyIGluIHlvdXIgY29kZS4KLy8vCi8vLyBUaGUgc3ltYm9saWMgbmFtZXMgYXJlLCB3aGVyZSBhcHBsaWNhYmxlLCB0aGUgbmFtZSBvZiB0aGUgc3ltYm9sIHdpdGhvdXQKLy8vIGFueSAibWFyayIsICJzeW1ib2wiICJzaWduIiBvciAiYWNjZW50IiBzdWZmaXguCi8vLyBFeGFtcGxlczogWyRleGNsYW1hdGlvbl0sIFskcGlwZV0sIFskZG9sbGFyXSBhbmQgWyRncmF2ZV0uCi8vLyBGb3IgbGVzcyBjb21tb24gc3ltYm9scywgYSBzZWxlY3Rpb24gb2YgY29tbW9uIG5hbWVzIGFyZSB1c2VkLgovLy8KLy8vIEZvciBwYXJlbnRoZXRpY2FsIG1hcmtlcnMsIHRoZXJlIGlzIGJvdGggYSBzaG9ydCBuYW1lLCBbJGxwYXJlbl0vWyRycGFyZW5dLAovLy8gYW5kIGEgbG9uZyBuYW1lLCBbJG9wZW5fcGFyZW5dLyBbJGNsb3NlX3BhcmVuXS4KLy8vCi8vLyBGb3IgY29tbW9uIEhUTUwgZW50aXRpZXMsIHRoZSBlbnRpdHkgbmFtZXMgYXJlIGFsc28gdXNhYmxlIGFzIHN5bWJvbGljCi8vLyBuYW1lczogWyRhcG9zXSwgWyRxdW90XSwgWyRsdF0sIFskZ3RdLCBhbmQgWyRhbXBdLgpsaWJyYXJ5IGNoYXJjb2RlLmFzY2lpLmRvbGxhcl9sb3dlcmNhc2U7CgovLyBDb250cm9sIGNoYXJhY3RlcnMuCgovLy8gIk51bGwgY2hhcmFjdGVyIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRudWwgPSAweDAwOwoKLy8vICJTdGFydCBvZiBIZWFkZXIiIGNvbnRyb2wgY2hhcmFjdGVyLgpjb25zdCBpbnQgJHNvaCA9IDB4MDE7CgovLy8gIlN0YXJ0IG9mIFRleHQiIGNvbnRyb2wgY2hhcmFjdGVyLgpjb25zdCBpbnQgJHN0eCA9IDB4MDI7CgovLy8gIkVuZCBvZiBUZXh0IiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRldHggPSAweDAzOwoKLy8vICJFbmQgb2YgVHJhbnNtaXNzaW9uIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRlb3QgPSAweDA0OwoKLy8vICJFbnF1aXJ5IiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRlbnEgPSAweDA1OwoKLy8vICJBY2tub3dsZWRnbWVudCIgY29udHJvbCBjaGFyYWN0ZXIuCmNvbnN0IGludCAkYWNrID0gMHgwNjsKCi8vLyAiQmVsbCIgY29udHJvbCBjaGFyYWN0ZXIuCmNvbnN0IGludCAkYmVsID0gMHgwNzsKCi8vLyAiQmFja3NwYWNlIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRicyA9IDB4MDg7CgovLy8gIkhvcml6b250YWwgVGFiIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRodCA9IDB4MDk7CgovLy8gIkhvcml6b250YWwgVGFiIiBjb250cm9sIGNoYXJhY3RlciwgY29tbW9uIG5hbWUuCmNvbnN0IGludCAkdGFiID0gMHgwOTsKCi8vLyAiTGluZSBmZWVkIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRsZiA9IDB4MEE7CgovLy8gIlZlcnRpY2FsIFRhYiIgY29udHJvbCBjaGFyYWN0ZXIuCmNvbnN0IGludCAkdnQgPSAweDBCOwoKLy8vICJGb3JtIGZlZWQiIGNvbnRyb2wgY2hhcmFjdGVyLgpjb25zdCBpbnQgJGZmID0gMHgwQzsKCi8vLyAiQ2FycmlhZ2UgcmV0dXJuIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRjciA9IDB4MEQ7CgovLy8gIlNoaWZ0IE91dCIgY29udHJvbCBjaGFyYWN0ZXIuCmNvbnN0IGludCAkc28gPSAweDBFOwoKLy8vICJTaGlmdCBJbiIgY29udHJvbCBjaGFyYWN0ZXIuCmNvbnN0IGludCAkc2kgPSAweDBGOwoKLy8vICJEYXRhIExpbmsgRXNjYXBlIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRkbGUgPSAweDEwOwoKLy8vICJEZXZpY2UgQ29udHJvbCAxIiBjb250cm9sIGNoYXJhY3RlciAob2Z0LiBYT04pLgpjb25zdCBpbnQgJGRjMSA9IDB4MTE7CgovLy8gIkRldmljZSBDb250cm9sIDIiIGNvbnRyb2wgY2hhcmFjdGVyLgpjb25zdCBpbnQgJGRjMiA9IDB4MTI7CgovLy8gIkRldmljZSBDb250cm9sIDMiIGNvbnRyb2wgY2hhcmFjdGVyIChvZnQuIFhPRkYpLgpjb25zdCBpbnQgJGRjMyA9IDB4MTM7CgovLy8gIkRldmljZSBDb250cm9sIDQiIGNvbnRyb2wgY2hhcmFjdGVyLgpjb25zdCBpbnQgJGRjNCA9IDB4MTQ7CgovLy8gIk5lZ2F0aXZlIEFja25vd2xlZGdtZW50IiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRuYWsgPSAweDE1OwoKLy8vICJTeW5jaHJvbm91cyBpZGxlIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRzeW4gPSAweDE2OwoKLy8vICJFbmQgb2YgVHJhbnNtaXNzaW9uIEJsb2NrIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRldGIgPSAweDE3OwoKLy8vICJDYW5jZWwiIGNvbnRyb2wgY2hhcmFjdGVyLgpjb25zdCBpbnQgJGNhbiA9IDB4MTg7CgovLy8gIkVuZCBvZiBNZWRpdW0iIGNvbnRyb2wgY2hhcmFjdGVyLgpjb25zdCBpbnQgJGVtID0gMHgxOTsKCi8vLyAiU3Vic3RpdHV0ZSIgY29udHJvbCBjaGFyYWN0ZXIuCmNvbnN0IGludCAkc3ViID0gMHgxQTsKCi8vLyAiRXNjYXBlIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRlc2MgPSAweDFCOwoKLy8vICJGaWxlIFNlcGFyYXRvciIgY29udHJvbCBjaGFyYWN0ZXIuCmNvbnN0IGludCAkZnMgPSAweDFDOwoKLy8vICJHcm91cCBTZXBhcmF0b3IiIGNvbnRyb2wgY2hhcmFjdGVyLgpjb25zdCBpbnQgJGdzID0gMHgxRDsKCi8vLyAiUmVjb3JkIFNlcGFyYXRvciIgY29udHJvbCBjaGFyYWN0ZXIuCmNvbnN0IGludCAkcnMgPSAweDFFOwoKLy8vICJVbml0IFNlcGFyYXRvciIgY29udHJvbCBjaGFyYWN0ZXIuCmNvbnN0IGludCAkdXMgPSAweDFGOwoKLy8vICJEZWxldGUiIGNvbnRyb2wgY2hhcmFjdGVyLgpjb25zdCBpbnQgJGRlbCA9IDB4N0Y7CgovLyBWaXNpYmxlIGNoYXJhY3RlcnMuCgovLy8gU3BhY2UgY2hhcmFjdGVyLgpjb25zdCBpbnQgJHNwYWNlID0gMHgyMDsKCi8vLyBDaGFyYWN0ZXIgJyEnLgpjb25zdCBpbnQgJGV4Y2xhbWF0aW9uID0gMHgyMTsKCi8vLyBDaGFyYWN0ZXIgJyInLCBzaG9ydCBuYW1lLgpjb25zdCBpbnQgJHF1b3QgPSAweDIyOwoKLy8vIENoYXJhY3RlciAnIicuCmNvbnN0IGludCAkcXVvdGUgPSAweDIyOwoKLy8vIENoYXJhY3RlciAnIicuCmNvbnN0IGludCAkZG91YmxlX3F1b3RlID0gMHgyMjsKCi8vLyBDaGFyYWN0ZXIgJyInLgpjb25zdCBpbnQgJHF1b3RhdGlvbiA9IDB4MjI7CgovLy8gQ2hhcmFjdGVyICcjJy4KY29uc3QgaW50ICRoYXNoID0gMHgyMzsKCi8vLyBDaGFyYWN0ZXIgJyQnLgpjb25zdCBpbnQgJCQgPSAweDI0OwoKLy8vIENoYXJhY3RlciAnJCcuCmNvbnN0IGludCAkZG9sbGFyID0gMHgyNDsKCi8vLyBDaGFyYWN0ZXIgJyUnLgpjb25zdCBpbnQgJHBlcmNlbnQgPSAweDI1OwoKLy8vIENoYXJhY3RlciAnJicsIHNob3J0IG5hbWUuCmNvbnN0IGludCAkYW1wID0gMHgyNjsKCi8vLyBDaGFyYWN0ZXIgJyYnLgpjb25zdCBpbnQgJGFtcGVyc2FuZCA9IDB4MjY7CgovLy8gQ2hhcmFjdGVyICInIi4KY29uc3QgaW50ICRhcG9zID0gMHgyNzsKCi8vLyBDaGFyYWN0ZXIgJycnLgpjb25zdCBpbnQgJGFwb3N0cm9waGUgPSAweDI3OwoKLy8vIENoYXJhY3RlciAnJycuCmNvbnN0IGludCAkc2luZ2xlX3F1b3RlID0gMHgyNzsKCi8vLyBDaGFyYWN0ZXIgJygnLgpjb25zdCBpbnQgJGxwYXJlbiA9IDB4Mjg7CgovLy8gQ2hhcmFjdGVyICcoJy4KY29uc3QgaW50ICRvcGVuX3BhcmVuID0gMHgyODsKCi8vLyBDaGFyYWN0ZXIgJygnLgpjb25zdCBpbnQgJG9wZW5fcGFyZW50aGVzaXMgPSAweDI4OwoKLy8vIENoYXJhY3RlciAnKScuCmNvbnN0IGludCAkcnBhcmVuID0gMHgyOTsKCi8vLyBDaGFyYWN0ZXIgJyknLgpjb25zdCBpbnQgJGNsb3NlX3BhcmVuID0gMHgyOTsKCi8vLyBDaGFyYWN0ZXIgJyknLgpjb25zdCBpbnQgJGNsb3NlX3BhcmVudGhlc2lzID0gMHgyOTsKCi8vLyBDaGFyYWN0ZXIgJyonLgpjb25zdCBpbnQgJGFzdGVyaXNrID0gMHgyQTsKCi8vLyBDaGFyYWN0ZXIgJysnLgpjb25zdCBpbnQgJHBsdXMgPSAweDJCOwoKLy8vIENoYXJhY3RlciAnLCcuCmNvbnN0IGludCAkY29tbWEgPSAweDJDOwoKLy8vIENoYXJhY3RlciAnLScuCmNvbnN0IGludCAkbWludXMgPSAweDJEOwoKLy8vIENoYXJhY3RlciAnLScuCmNvbnN0IGludCAkZGFzaCA9IDB4MkQ7CgovLy8gQ2hhcmFjdGVyICcuJy4KY29uc3QgaW50ICRkb3QgPSAweDJFOwoKLy8vIENoYXJhY3RlciAnLicuCmNvbnN0IGludCAkZnVsbHN0b3AgPSAweDJFOwoKLy8vIENoYXJhY3RlciAnLycuCmNvbnN0IGludCAkc2xhc2ggPSAweDJGOwoKLy8vIENoYXJhY3RlciAnLycuCmNvbnN0IGludCAkc29saWR1cyA9IDB4MkY7CgovLy8gQ2hhcmFjdGVyICcvJy4KY29uc3QgaW50ICRkaXZpc2lvbiA9IDB4MkY7CgovLy8gQ2hhcmFjdGVyICcwJy4KY29uc3QgaW50ICQwID0gMHgzMDsKCi8vLyBDaGFyYWN0ZXIgJzEnLgpjb25zdCBpbnQgJDEgPSAweDMxOwoKLy8vIENoYXJhY3RlciAnMicuCmNvbnN0IGludCAkMiA9IDB4MzI7CgovLy8gQ2hhcmFjdGVyICczJy4KY29uc3QgaW50ICQzID0gMHgzMzsKCi8vLyBDaGFyYWN0ZXIgJzQnLgpjb25zdCBpbnQgJDQgPSAweDM0OwoKLy8vIENoYXJhY3RlciAnNScuCmNvbnN0IGludCAkNSA9IDB4MzU7CgovLy8gQ2hhcmFjdGVyICc2Jy4KY29uc3QgaW50ICQ2ID0gMHgzNjsKCi8vLyBDaGFyYWN0ZXIgJzcnLgpjb25zdCBpbnQgJDcgPSAweDM3OwoKLy8vIENoYXJhY3RlciAnOCcuCmNvbnN0IGludCAkOCA9IDB4Mzg7CgovLy8gQ2hhcmFjdGVyICc5Jy4KY29uc3QgaW50ICQ5ID0gMHgzOTsKCi8vLyBDaGFyYWN0ZXIgJzonLgpjb25zdCBpbnQgJGNvbG9uID0gMHgzQTsKCi8vLyBDaGFyYWN0ZXIgJzsnLgpjb25zdCBpbnQgJHNlbWljb2xvbiA9IDB4M0I7CgovLy8gQ2hhcmFjdGVyICc8Jy4KY29uc3QgaW50ICRsdCA9IDB4M0M7CgovLy8gQ2hhcmFjdGVyICc8Jy4KY29uc3QgaW50ICRsZXNzX3RoYW4gPSAweDNDOwoKLy8vIENoYXJhY3RlciAnPCcuCmNvbnN0IGludCAkbGFuZ2xlID0gMHgzQzsKCi8vLyBDaGFyYWN0ZXIgJzwnLgpjb25zdCBpbnQgJG9wZW5fYW5nbGUgPSAweDNDOwoKLy8vIENoYXJhY3RlciAnPScuCmNvbnN0IGludCAkZXF1YWwgPSAweDNEOwoKLy8vIENoYXJhY3RlciAnPicuCmNvbnN0IGludCAkZ3QgPSAweDNFOwoKLy8vIENoYXJhY3RlciAnPicuCmNvbnN0IGludCAkZ3JlYXRlcl90aGFuID0gMHgzRTsKCi8vLyBDaGFyYWN0ZXIgJz4nLgpjb25zdCBpbnQgJHJhbmdsZSA9IDB4M0U7CgovLy8gQ2hhcmFjdGVyICc+Jy4KY29uc3QgaW50ICRjbG9zZV9hbmdsZSA9IDB4M0U7CgovLy8gQ2hhcmFjdGVyICc/Jy4KY29uc3QgaW50ICRxdWVzdGlvbiA9IDB4M0Y7CgovLy8gQ2hhcmFjdGVyICdAJy4KY29uc3QgaW50ICRhdCA9IDB4NDA7CgovLy8gQ2hhcmFjdGVyICdBJy4KY29uc3QgaW50ICRBID0gMHg0MTsKCi8vLyBDaGFyYWN0ZXIgJ0InLgpjb25zdCBpbnQgJEIgPSAweDQyOwoKLy8vIENoYXJhY3RlciAnQycuCmNvbnN0IGludCAkQyA9IDB4NDM7CgovLy8gQ2hhcmFjdGVyICdEJy4KY29uc3QgaW50ICREID0gMHg0NDsKCi8vLyBDaGFyYWN0ZXIgJ0UnLgpjb25zdCBpbnQgJEUgPSAweDQ1OwoKLy8vIENoYXJhY3RlciAnRicuCmNvbnN0IGludCAkRiA9IDB4NDY7CgovLy8gQ2hhcmFjdGVyICdHJy4KY29uc3QgaW50ICRHID0gMHg0NzsKCi8vLyBDaGFyYWN0ZXIgJ0gnLgpjb25zdCBpbnQgJEggPSAweDQ4OwoKLy8vIENoYXJhY3RlciAnSScuCmNvbnN0IGludCAkSSA9IDB4NDk7CgovLy8gQ2hhcmFjdGVyICdKJy4KY29uc3QgaW50ICRKID0gMHg0QTsKCi8vLyBDaGFyYWN0ZXIgJ0snLgpjb25zdCBpbnQgJEsgPSAweDRCOwoKLy8vIENoYXJhY3RlciAnTCcuCmNvbnN0IGludCAkTCA9IDB4NEM7CgovLy8gQ2hhcmFjdGVyICdNJy4KY29uc3QgaW50ICRNID0gMHg0RDsKCi8vLyBDaGFyYWN0ZXIgJ04nLgpjb25zdCBpbnQgJE4gPSAweDRFOwoKLy8vIENoYXJhY3RlciAnTycuCmNvbnN0IGludCAkTyA9IDB4NEY7CgovLy8gQ2hhcmFjdGVyICdQJy4KY29uc3QgaW50ICRQID0gMHg1MDsKCi8vLyBDaGFyYWN0ZXIgJ1EnLgpjb25zdCBpbnQgJFEgPSAweDUxOwoKLy8vIENoYXJhY3RlciAnUicuCmNvbnN0IGludCAkUiA9IDB4NTI7CgovLy8gQ2hhcmFjdGVyICdTJy4KY29uc3QgaW50ICRTID0gMHg1MzsKCi8vLyBDaGFyYWN0ZXIgJ1QnLgpjb25zdCBpbnQgJFQgPSAweDU0OwoKLy8vIENoYXJhY3RlciAnVScuCmNvbnN0IGludCAkVSA9IDB4NTU7CgovLy8gQ2hhcmFjdGVyICdWJy4KY29uc3QgaW50ICRWID0gMHg1NjsKCi8vLyBDaGFyYWN0ZXIgJ1cnLgpjb25zdCBpbnQgJFcgPSAweDU3OwoKLy8vIENoYXJhY3RlciAnWCcuCmNvbnN0IGludCAkWCA9IDB4NTg7CgovLy8gQ2hhcmFjdGVyICdZJy4KY29uc3QgaW50ICRZID0gMHg1OTsKCi8vLyBDaGFyYWN0ZXIgJ1onLgpjb25zdCBpbnQgJFogPSAweDVBOwoKLy8vIENoYXJhY3RlciAnWycuCmNvbnN0IGludCAkbGJyYWNrZXQgPSAweDVCOwoKLy8vIENoYXJhY3RlciAnWycuCmNvbnN0IGludCAkb3Blbl9icmFja2V0ID0gMHg1QjsKCi8vLyBDaGFyYWN0ZXIgJ1wnLgpjb25zdCBpbnQgJGJhY2tzbGFzaCA9IDB4NUM7CgovLy8gQ2hhcmFjdGVyICddJy4KY29uc3QgaW50ICRyYnJhY2tldCA9IDB4NUQ7CgovLy8gQ2hhcmFjdGVyICddJy4KY29uc3QgaW50ICRjbG9zZV9icmFja2V0ID0gMHg1RDsKCi8vLyBDaGFyYWN0ZXIgJ14nLgpjb25zdCBpbnQgJGNpcmN1bWZsZXggPSAweDVFOwoKLy8vIENoYXJhY3RlciAnXicuCmNvbnN0IGludCAkY2FyZXQgPSAweDVFOwoKLy8vIENoYXJhY3RlciAnXicuCmNvbnN0IGludCAkaGF0ID0gMHg1RTsKCi8vLyBDaGFyYWN0ZXIgJ18nLgpjb25zdCBpbnQgJF8gPSAweDVGOwoKLy8vIENoYXJhY3RlciAnXycuCmNvbnN0IGludCAkdW5kZXJzY29yZSA9IDB4NUY7CgovLy8gQ2hhcmFjdGVyICdfJy4KY29uc3QgaW50ICR1bmRlcmxpbmUgPSAweDVGOwoKLy8vIENoYXJhY3RlciAnYCcuCmNvbnN0IGludCAkYmFja3F1b3RlID0gMHg2MDsKCi8vLyBDaGFyYWN0ZXIgJ2AnLgpjb25zdCBpbnQgJGdyYXZlID0gMHg2MDsKCi8vLyBDaGFyYWN0ZXIgJ2EnLgpjb25zdCBpbnQgJGEgPSAweDYxOwoKLy8vIENoYXJhY3RlciAnYicuCmNvbnN0IGludCAkYiA9IDB4NjI7CgovLy8gQ2hhcmFjdGVyICdjJy4KY29uc3QgaW50ICRjID0gMHg2MzsKCi8vLyBDaGFyYWN0ZXIgJ2QnLgpjb25zdCBpbnQgJGQgPSAweDY0OwoKLy8vIENoYXJhY3RlciAnZScuCmNvbnN0IGludCAkZSA9IDB4NjU7CgovLy8gQ2hhcmFjdGVyICdmJy4KY29uc3QgaW50ICRmID0gMHg2NjsKCi8vLyBDaGFyYWN0ZXIgJ2cnLgpjb25zdCBpbnQgJGcgPSAweDY3OwoKLy8vIENoYXJhY3RlciAnaCcuCmNvbnN0IGludCAkaCA9IDB4Njg7CgovLy8gQ2hhcmFjdGVyICdpJy4KY29uc3QgaW50ICRpID0gMHg2OTsKCi8vLyBDaGFyYWN0ZXIgJ2onLgpjb25zdCBpbnQgJGogPSAweDZBOwoKLy8vIENoYXJhY3RlciAnaycuCmNvbnN0IGludCAkayA9IDB4NkI7CgovLy8gQ2hhcmFjdGVyICdsJy4KY29uc3QgaW50ICRsID0gMHg2QzsKCi8vLyBDaGFyYWN0ZXIgJ20nLgpjb25zdCBpbnQgJG0gPSAweDZEOwoKLy8vIENoYXJhY3RlciAnbicuCmNvbnN0IGludCAkbiA9IDB4NkU7CgovLy8gQ2hhcmFjdGVyICdvJy4KY29uc3QgaW50ICRvID0gMHg2RjsKCi8vLyBDaGFyYWN0ZXIgJ3AnLgpjb25zdCBpbnQgJHAgPSAweDcwOwoKLy8vIENoYXJhY3RlciAncScuCmNvbnN0IGludCAkcSA9IDB4NzE7CgovLy8gQ2hhcmFjdGVyICdyJy4KY29uc3QgaW50ICRyID0gMHg3MjsKCi8vLyBDaGFyYWN0ZXIgJ3MnLgpjb25zdCBpbnQgJHMgPSAweDczOwoKLy8vIENoYXJhY3RlciAndCcuCmNvbnN0IGludCAkdCA9IDB4NzQ7CgovLy8gQ2hhcmFjdGVyICd1Jy4KY29uc3QgaW50ICR1ID0gMHg3NTsKCi8vLyBDaGFyYWN0ZXIgJ3YnLgpjb25zdCBpbnQgJHYgPSAweDc2OwoKLy8vIENoYXJhY3RlciAndycuCmNvbnN0IGludCAkdyA9IDB4Nzc7CgovLy8gQ2hhcmFjdGVyICd4Jy4KY29uc3QgaW50ICR4ID0gMHg3ODsKCi8vLyBDaGFyYWN0ZXIgJ3knLgpjb25zdCBpbnQgJHkgPSAweDc5OwoKLy8vIENoYXJhY3RlciAneicuCmNvbnN0IGludCAkeiA9IDB4N0E7CgovLy8gQ2hhcmFjdGVyICd7Jy4KY29uc3QgaW50ICRsYnJhY2UgPSAweDdCOwoKLy8vIENoYXJhY3RlciAneycuCmNvbnN0IGludCAkb3Blbl9icmFjZSA9IDB4N0I7CgovLy8gQ2hhcmFjdGVyICd8Jy4KY29uc3QgaW50ICRwaXBlID0gMHg3QzsKCi8vLyBDaGFyYWN0ZXIgJ3wnLgpjb25zdCBpbnQgJGJhciA9IDB4N0M7CgovLy8gQ2hhcmFjdGVyICd9Jy4KY29uc3QgaW50ICRyYnJhY2UgPSAweDdEOwoKLy8vIENoYXJhY3RlciAnfScuCmNvbnN0IGludCAkY2xvc2VfYnJhY2UgPSAweDdEOwoKLy8vIENoYXJhY3RlciAnficuCmNvbnN0IGludCAkdGlsZGUgPSAweDdFOwqB/gBOSTwBOARQBElERT8ETTQ/QwRQNARLNykBFwEoFwEpFwEnFwElFwEtFwEhFwEoFwEeFwEjFgEoFgE1FwEjFgEmFgEjFgEpFgEjFgEiFgEqFwE1FwEqFwE2FwEqFwExFwEqFwEzFwEgFwEnFgEkFwEgFwEoFgEpFgEqFgEoFgEgFwEXARUZARMfAR8YARMZARMgARMdARMYARMVARMaARMbAR8XARMdARMYARMeARMgARMaARMeARMkARMaARMfARMlARMcARMYARMZARMZARMYARMXARMcARMZARMbARMcARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMZARMdARMWARMdARMaARMeARMZARMWARMgARMaARMfARMcARMWARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMcARMgARMdARMcARMhARMeARMZARMXARMVARMeARMdARMdARMZARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMaARMeARMYARMXARMaARMfARMZARtwYWNrYWdlOmNoYXJjb2RlL2FzY2lpLmRhcnRAc2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnX3Rlc3RlZC9wYWNrYWdlX2NvbmZpZy9saWIvc3JjL3V0aWwuZGFydI8QLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBVdGlsaXR5IG1ldGhvZHMgdXNlZCBieSBtb3JlIHRoYW4gb25lIGxpYnJhcnkgaW4gdGhlIHBhY2thZ2UuCmxpYnJhcnkgcGFja2FnZV9jb25maWcudXRpbDsKCmltcG9ydCAicGFja2FnZTpjaGFyY29kZS9hc2NpaS5kYXJ0IjsKCi8vIEFsbCBBU0NJSSBjaGFyYWN0ZXJzIHRoYXQgYXJlIHZhbGlkIGluIGEgcGFja2FnZSBuYW1lLCB3aXRoIHNwYWNlCi8vIGZvciBhbGwgdGhlIGludmFsaWQgb25lcyAoaW5jbHVkaW5nIHNwYWNlKS4KY29uc3QgU3RyaW5nIF92YWxpZFBhY2thZ2VOYW1lQ2hhcmFjdGVycyA9CiAgICByIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgICQgJicoKSorLC0uIDAxMjM0NTY3ODkgOyA9ICAiCiAgICByIkBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiAgICBfIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6ICAgfiAiOwoKLy8vIFRlc3RzIHdoZXRoZXIgc29tZXRoaW5nIGlzIGEgdmFsaWQgRGFydCBwYWNrYWdlIG5hbWUuCmJvb2wgaXNWYWxpZFBhY2thZ2VOYW1lKFN0cmluZyBzdHJpbmcpIHsKICByZXR1cm4gX2ZpbmRJbnZhbGlkQ2hhcmFjdGVyKHN0cmluZykgPCAwOwp9CgovLy8gQ2hlY2sgaWYgYSBzdHJpbmcgaXMgYSB2YWxpZCBwYWNrYWdlIG5hbWUuCi8vLwovLy8gVmFsaWQgcGFja2FnZSBuYW1lcyBjb250YWluIG9ubHkgY2hhcmFjdGVycyBpbiBbX3ZhbGlkUGFja2FnZU5hbWVDaGFyYWN0ZXJzXQovLy8gYW5kIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgbm9uLScuJyBjaGFyYWN0ZXIuCi8vLwovLy8gUmV0dXJucyBgLTFgIGlmIHRoZSBzdHJpbmcgaXMgdmFsaWQuCi8vLyBPdGhlcndpc2UgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGludmFsaWQgY2hhcmFjdGVyLAovLy8gb3IgYHN0cmluZy5sZW5ndGhgIGlmIHRoZSBzdHJpbmcgY29udGFpbnMgbm8gbm9uLScuJyBjaGFyYWN0ZXIuCmludCBfZmluZEludmFsaWRDaGFyYWN0ZXIoU3RyaW5nIHN0cmluZykgewogIC8vIEJlY29tZXMgbm9uLXplcm8gaWYgYW55IG5vbi0nLicgY2hhcmFjdGVyIGlzIGVuY291bnRlcmVkLgogIGludCBub25Eb3QgPSAwOwogIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIgYyA9IHN0cmluZy5jb2RlVW5pdEF0KGkpOwogICAgaWYgKGMgPiAweDdmIHx8IF92YWxpZFBhY2thZ2VOYW1lQ2hhcmFjdGVycy5jb2RlVW5pdEF0KGMpIDw9ICRzcGFjZSkgewogICAgICByZXR1cm4gaTsKICAgIH0KICAgIG5vbkRvdCArPSBjIF4gJGRvdDsKICB9CiAgaWYgKG5vbkRvdCA9PSAwKSByZXR1cm4gc3RyaW5nLmxlbmd0aDsKICByZXR1cm4gLTE7Cn0KCi8vLyBWYWxpZGF0ZSB0aGF0IGEgVXJpIGlzIGEgdmFsaWQgcGFja2FnZTpVUkkuClN0cmluZyBjaGVja1ZhbGlkUGFja2FnZVVyaShVcmkgcGFja2FnZVVyaSkgewogIGlmIChwYWNrYWdlVXJpLnNjaGVtZSAhPSAicGFja2FnZSIpIHsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKAogICAgICAgIHBhY2thZ2VVcmksICJwYWNrYWdlVXJpIiwgIk5vdCBhIHBhY2thZ2U6IFVSSSIpOwogIH0KICBpZiAocGFja2FnZVVyaS5oYXNBdXRob3JpdHkpIHsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKAogICAgICAgIHBhY2thZ2VVcmksICJwYWNrYWdlVXJpIiwgIlBhY2thZ2UgVVJJcyBtdXN0IG5vdCBoYXZlIGEgaG9zdCBwYXJ0Iik7CiAgfQogIGlmIChwYWNrYWdlVXJpLmhhc1F1ZXJ5KSB7CiAgICAvLyBBIHF1ZXJ5IG1ha2VzIG5vIHNlbnNlIGlmIHJlc29sdmVkIHRvIGEgZmlsZTogVVJJLgogICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUoCiAgICAgICAgcGFja2FnZVVyaSwgInBhY2thZ2VVcmkiLCAiUGFja2FnZSBVUklzIG11c3Qgbm90IGhhdmUgYSBxdWVyeSBwYXJ0Iik7CiAgfQogIGlmIChwYWNrYWdlVXJpLmhhc0ZyYWdtZW50KSB7CiAgICAvLyBXZSBjb3VsZCBsZWF2ZSB0aGUgZnJhZ21lbnQgYWZ0ZXIgdGhlIFVSTCB3aGVuIHJlc29sdmluZywKICAgIC8vIGJ1dCBpdCB3b3VsZCBiZSBvZGQgaWYgInBhY2thZ2U6Zm9vL2Zvby5kYXJ0IzEiIGFuZAogICAgLy8gInBhY2thZ2U6Zm9vL2Zvby5kYXJ0IzIiIHdlcmUgY29uc2lkZXJlZCBkaWZmZXJlbnQgbGlicmFyaWVzLgogICAgLy8gS2VlcCB0aGUgc3ludGF4IG9wZW4gaW4gY2FzZSB3ZSBldmVyIGdldCBtdWx0aXBsZSBsaWJyYXJpZXMgaW4gb25lIGZpbGUuCiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZSgKICAgICAgICBwYWNrYWdlVXJpLCAicGFja2FnZVVyaSIsICJQYWNrYWdlIFVSSXMgbXVzdCBub3QgaGF2ZSBhIGZyYWdtZW50IHBhcnQiKTsKICB9CiAgaWYgKHBhY2thZ2VVcmkucGF0aC5zdGFydHNXaXRoKCcvJykpIHsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKAogICAgICAgIHBhY2thZ2VVcmksICJwYWNrYWdlVXJpIiwgIlBhY2thZ2UgVVJJcyBtdXN0IG5vdCBzdGFydCB3aXRoIGEgJy8nIik7CiAgfQogIGludCBmaXJzdFNsYXNoID0gcGFja2FnZVVyaS5wYXRoLmluZGV4T2YoJy8nKTsKICBpZiAoZmlyc3RTbGFzaCA9PSAtMSkgewogICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUocGFja2FnZVVyaSwgInBhY2thZ2VVcmkiLAogICAgICAgICJQYWNrYWdlIFVSSXMgbXVzdCBzdGFydCB3aXRoIHRoZSBwYWNrYWdlIG5hbWUgZm9sbG93ZWQgYnkgYSAnLyciKTsKICB9CiAgU3RyaW5nIHBhY2thZ2VOYW1lID0gcGFja2FnZVVyaS5wYXRoLnN1YnN0cmluZygwLCBmaXJzdFNsYXNoKTsKICBpbnQgYmFkSW5kZXggPSBfZmluZEludmFsaWRDaGFyYWN0ZXIocGFja2FnZU5hbWUpOwogIGlmIChiYWRJbmRleCA+PSAwKSB7CiAgICBpZiAocGFja2FnZU5hbWUuaXNFbXB0eSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZSgKICAgICAgICAgIHBhY2thZ2VVcmksICJwYWNrYWdlVXJpIiwgIlBhY2thZ2UgbmFtZXMgbXVzIGJlIG5vbi1lbXB0eSIpOwogICAgfQogICAgaWYgKGJhZEluZGV4ID09IHBhY2thZ2VOYW1lLmxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZShwYWNrYWdlVXJpLCAicGFja2FnZVVyaSIsCiAgICAgICAgICAiUGFja2FnZSBuYW1lcyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIG5vbi0nLicgY2hhcmFjdGVyIik7CiAgICB9CiAgICBhc3NlcnQoYmFkSW5kZXggPCBwYWNrYWdlTmFtZS5sZW5ndGgpOwogICAgaW50IGJhZENoYXJDb2RlID0gcGFja2FnZU5hbWUuY29kZVVuaXRBdChiYWRJbmRleCk7CiAgICB2YXIgYmFkQ2hhciA9ICJVKyIgKyBiYWRDaGFyQ29kZS50b1JhZGl4U3RyaW5nKDE2KS5wYWRMZWZ0KDQsICcwJyk7CiAgICBpZiAoYmFkQ2hhckNvZGUgPj0gMHgyMCAmJiBiYWRDaGFyQ29kZSA8PSAweDdlKSB7CiAgICAgIC8vIFByaW50YWJsZSBjaGFyYWN0ZXIuCiAgICAgIGJhZENoYXIgPSAiJyR7cGFja2FnZU5hbWVbYmFkSW5kZXhdfScgKCRiYWRDaGFyKSI7CiAgICB9CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZSgKICAgICAgICBwYWNrYWdlVXJpLCAicGFja2FnZVVyaSIsICJQYWNrYWdlIG5hbWVzIG11c3Qgbm90IGNvbnRhaW4gJGJhZENoYXIiKTsKICB9CiAgcmV0dXJuIHBhY2thZ2VOYW1lOwp9CmMATk48AUIdASYBRS8rSEkBOiksAgEvBFE1BClARCs/EiwiSxAGGAQpDQIBMC4oIzkEISNNBB06I04EIEE7RVAjUQQpI00EMRo8TARBNRcfJUcGKj5IBis4SDYeOQYjTgQWAgEkcGFja2FnZTpwYWNrYWdlX2NvbmZpZy9zcmMvdXRpbC5kYXJ0RnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9zY2FubmVyL3N0cmluZ19jYW5vbmljYWxpemVyLmRhcnSMni8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnNjYW5uZXIuc3RyaW5nX2Nhbm9uaWNhbGl6ZXI7CgppbXBvcnQgJ2RhcnQ6Y29udmVydCc7CgpjbGFzcyBOb2RlIHsKICBkeW5hbWljIC8qIFN0cmluZyB8IExpc3Q8aW50PiAqLyBkYXRhOwogIGludCBzdGFydDsKICBpbnQgZW5kOwogIFN0cmluZyBwYXlsb2FkOwogIE5vZGUgbmV4dDsKICBOb2RlKHRoaXMuZGF0YSwgdGhpcy5zdGFydCwgdGhpcy5lbmQsIHRoaXMucGF5bG9hZCwgdGhpcy5uZXh0KTsKfQoKLy8vIEEgaGFzaCB0YWJsZSBmb3IgdHJpcGxlczoKLy8vIChsaXN0IG9mIGJ5dGVzLCBzdGFydCwgZW5kKSAtLT4gY2Fub25pY2FsaXplZCBzdHJpbmcKLy8vIFVzaW5nIHRyaXBsZXMgYXZvaWRzIGFsbG9jYXRpbmcgc3RyaW5nIHNsaWNlcyBiZWZvcmUgY2hlY2tpbmcgaWYgdGhleQovLy8gYXJlIGNhbm9uaWNhbC4KLy8vCi8vLyBHaXZlcyBhYm91dCAzJSBzcGVlZHVwIG9uIGRhcnQyanMuCmNsYXNzIFN0cmluZ0Nhbm9uaWNhbGl6ZXIgewogIC8vLyBNYXNrIGF3YXkgdG9wIGJpdHMgdG8ga2VlcCBoYXNoIGNhbGN1bGF0aW9uIHdpdGhpbiAzMi1iaXQgU01JIHJhbmdlLgogIHN0YXRpYyBjb25zdCBpbnQgTUFTSyA9IDE2ICogMTAyNCAqIDEwMjQgLSAxOwoKICBzdGF0aWMgY29uc3QgaW50IElOSVRJQUxfU0laRSA9IDggKiAxMDI0OwoKICAvLy8gTGluZWFyIHNpemUgb2YgYSBoYXNoIHRhYmxlLgogIGludCBfc2l6ZSA9IElOSVRJQUxfU0laRTsKCiAgLy8vIEl0ZW1zIGluIGEgaGFzaCB0YWJsZS4KICBpbnQgX2NvdW50ID0gMDsKCiAgLy8vIFRoZSB0YWJsZSBpdHNlbGYuCiAgTGlzdDxOb2RlPiBfbm9kZXMgPSBuZXcgTGlzdDxOb2RlPihJTklUSUFMX1NJWkUpOwoKICBzdGF0aWMgU3RyaW5nIGRlY29kZShMaXN0PGludD4gZGF0YSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGFzY2lpT25seSkgewogICAgU3RyaW5nIHM7CiAgICBpZiAoYXNjaWlPbmx5KSB7CiAgICAgIHMgPSBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoZGF0YSwgc3RhcnQsIGVuZCk7CiAgICB9IGVsc2UgewogICAgICBzID0gbmV3IFV0ZjhEZWNvZGVyKGFsbG93TWFsZm9ybWVkOiB0cnVlKS5jb252ZXJ0KGRhdGEsIHN0YXJ0LCBlbmQpOwogICAgfQogICAgcmV0dXJuIHM7CiAgfQoKICBzdGF0aWMgaW50IGhhc2hCeXRlcyhMaXN0PGludD4gZGF0YSwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBpbnQgaCA9IDUzODE7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICBoID0gKChoIDw8IDUpICsgaCArIGRhdGFbaV0pICYgTUFTSzsKICAgIH0KICAgIHJldHVybiBoOwogIH0KCiAgc3RhdGljIGludCBoYXNoU3RyaW5nKFN0cmluZyBkYXRhLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIGludCBoID0gNTM4MTsKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIGggPSAoKGggPDwgNSkgKyBoICsgZGF0YS5jb2RlVW5pdEF0KGkpKSAmIE1BU0s7CiAgICB9CiAgICByZXR1cm4gaDsKICB9CgogIHJlaGFzaCgpIHsKICAgIGludCBuZXdTaXplID0gX3NpemUgKiAyOwogICAgTGlzdDxOb2RlPiBuZXdOb2RlcyA9IG5ldyBMaXN0PE5vZGU+KG5ld1NpemUpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfc2l6ZTsgaSsrKSB7CiAgICAgIE5vZGUgdCA9IF9ub2Rlc1tpXTsKICAgICAgd2hpbGUgKHQgIT0gbnVsbCkgewogICAgICAgIE5vZGUgbiA9IHQubmV4dDsKICAgICAgICBpbnQgbmV3SW5kZXggPSB0LmRhdGEgaXMgU3RyaW5nCiAgICAgICAgICAgID8gaGFzaFN0cmluZyh0LmRhdGEsIHQuc3RhcnQsIHQuZW5kKSAmIChuZXdTaXplIC0gMSkKICAgICAgICAgICAgOiBoYXNoQnl0ZXModC5kYXRhLCB0LnN0YXJ0LCB0LmVuZCkgJiAobmV3U2l6ZSAtIDEpOwogICAgICAgIE5vZGUgcyA9IG5ld05vZGVzW25ld0luZGV4XTsKICAgICAgICB0Lm5leHQgPSBzOwogICAgICAgIG5ld05vZGVzW25ld0luZGV4XSA9IHQ7CiAgICAgICAgdCA9IG47CiAgICAgIH0KICAgIH0KICAgIF9zaXplID0gbmV3U2l6ZTsKICAgIF9ub2RlcyA9IG5ld05vZGVzOwogIH0KCiAgU3RyaW5nIGNhbm9uaWNhbGl6ZShkYXRhLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgYXNjaWlPbmx5KSB7CiAgICBpZiAoX2NvdW50ID4gX3NpemUpIHJlaGFzaCgpOwogICAgaW50IGluZGV4ID0gZGF0YSBpcyBTdHJpbmcKICAgICAgICA/IGhhc2hTdHJpbmcoZGF0YSwgc3RhcnQsIGVuZCkKICAgICAgICA6IGhhc2hCeXRlcyhkYXRhLCBzdGFydCwgZW5kKTsKICAgIGluZGV4ID0gaW5kZXggJiAoX3NpemUgLSAxKTsKICAgIE5vZGUgcyA9IF9ub2Rlc1tpbmRleF07CiAgICBOb2RlIHQgPSBzOwogICAgaW50IGxlbiA9IGVuZCAtIHN0YXJ0OwogICAgd2hpbGUgKHQgIT0gbnVsbCkgewogICAgICBpZiAodC5lbmQgLSB0LnN0YXJ0ID09IGxlbikgewogICAgICAgIGludCBpID0gc3RhcnQsIGogPSB0LnN0YXJ0OwogICAgICAgIHdoaWxlIChpIDwgZW5kICYmIGRhdGFbaV0gPT0gdC5kYXRhW2pdKSB7CiAgICAgICAgICBpKys7CiAgICAgICAgICBqKys7CiAgICAgICAgfQogICAgICAgIGlmIChpID09IGVuZCkgewogICAgICAgICAgcmV0dXJuIHQucGF5bG9hZDsKICAgICAgICB9CiAgICAgIH0KICAgICAgdCA9IHQubmV4dDsKICAgIH0KICAgIFN0cmluZyBwYXlsb2FkOwogICAgaWYgKGRhdGEgaXMgU3RyaW5nKSB7CiAgICAgIHBheWxvYWQgPSBkYXRhLnN1YnN0cmluZyhzdGFydCwgZW5kKTsKICAgIH0gZWxzZSB7CiAgICAgIHBheWxvYWQgPSBkZWNvZGUoZGF0YSwgc3RhcnQsIGVuZCwgYXNjaWlPbmx5KTsKICAgIH0KICAgIF9ub2Rlc1tpbmRleF0gPSBuZXcgTm9kZShkYXRhLCBzdGFydCwgZW5kLCBwYXlsb2FkLCBzKTsKICAgIF9jb3VudCsrOwogICAgcmV0dXJuIHBheWxvYWQ7CiAgfQoKICBjbGVhcigpIHsKICAgIF9zaXplID0gSU5JVElBTF9TSVpFOwogICAgX25vZGVzID0gbmV3IExpc3Q8Tm9kZT4oX3NpemUpOwogICAgX2NvdW50ID0gMDsKICB9Cn0KfQBOTjwBLAEXAQ0pDQsSDUICAR45ShMEJxxLMAEsASMcAR0SARg0AU0OFTYNSwYOBAE9EigrBg4EATsSKDYGDgQBDR0zJhoaGShBQSUUIA8IBhUXBAFCIh8nJyEcEBsYJCQyDw8KGBwKCBIGFBosDTUGPA4UBAEMGiQQBAIBPXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zY2FubmVyL3N0cmluZ19jYW5vbmljYWxpemVyLmRhcnQ5c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Jhc2Uvc3ludGFjdGljX2VudGl0eS5kYXJ0gxcvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLyoqCiAqIEludGVyZmFjZSByZXByZXNlbnRpbmcgYSBzeW50YWN0aWMgZW50aXR5IChlaXRoZXIgYSB0b2tlbiBvciBhbiBBU1Qgbm9kZSkKICogd2hpY2ggaGFzIGEgbG9jYXRpb24gYW5kIGV4dGVudCBpbiB0aGUgc291cmNlIGZpbGUuCiAqLwphYnN0cmFjdCBjbGFzcyBTeW50YWN0aWNFbnRpdHkgewogIC8qKgogICAqIFJldHVybiB0aGUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZQogICAqIGxhc3QgY2hhcmFjdGVyIG9mIHRoZSBzeW50YWN0aWMgZW50aXR5LgogICAqLwogIGludCBnZXQgZW5kOwoKICAvKioKICAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZSBzeW50YWN0aWMgZW50aXR5J3Mgc291cmNlIHJhbmdlLgogICAqLwogIGludCBnZXQgbGVuZ3RoOwoKICAvKioKICAgKiBSZXR1cm4gdGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBpbgogICAqIHRoZSBzeW50YWN0aWMgZW50aXR5LgogICAqLwogIGludCBnZXQgb2Zmc2V0Owp9ChwATk48AQRNNwQhBlEtBg8BBk0GEgEGUBsGEgIBMHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9iYXNlL3N5bnRhY3RpY19lbnRpdHkuZGFydDxzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvc2Nhbm5lci9zdHJpbmdfdXRpbGl0aWVzLmRhcnSBgC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2ludGVybmVyLmRhcnQnOwoKY2xhc3MgU3RyaW5nVXRpbGl0aWVzIHsKICBzdGF0aWMgSW50ZXJuZXIgSU5URVJORVIgPSBuZXcgTnVsbEludGVybmVyKCk7CgogIHN0YXRpYyBTdHJpbmcgaW50ZXJuKFN0cmluZyBzdHJpbmcpID0+IElOVEVSTkVSLmludGVybihzdHJpbmcpOwp9Cg0ATk48ARgBGDEBQgIBM3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9zY2FubmVyL3N0cmluZ191dGlsaXRpZXMuZGFydD1zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYmxhY2tsaXN0ZWRfY2xhc3Nlcy5kYXJ0gYkvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gTGlzdCBvZiBzcGVjaWFsIGNsYXNzZXMgaW4gZGFydDpjb3JlIHRoYXQgY2FuJ3QgYmUgc3ViY2xhc3NlZC4KY29uc3QgTGlzdDxTdHJpbmc+IGJsYWNrbGlzdGVkQ29yZUNsYXNzZXMgPSBbCiAgImJvb2wiLAogICJpbnQiLAogICJudW0iLAogICJkb3VibGUiLAogICJTdHJpbmciLAogICJOdWxsIgpdOwoPAE5OPAFCLgoJCQwMCQMBNHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9ibGFja2xpc3RlZF9jbGFzc2VzLmRhcnQic2Rrcm9vdDovcGtnL2tlcm5lbC9saWIvY2xvbmUuZGFydMAAU68vLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgpsaWJyYXJ5IGtlcm5lbC5jbG9uZTsKCmltcG9ydCAnZGFydDpjb3JlJyBoaWRlIE1hcEVudHJ5OwoKaW1wb3J0ICdhc3QuZGFydCc7CmltcG9ydCAndHlwZV9hbGdlYnJhLmRhcnQnOwoKLy8vIFZpc2l0b3IgdGhhdCByZXR1cm4gYSBjbG9uZSBvZiBhIHRyZWUsIG1haW50YWluaW5nIHJlZmVyZW5jZXMgdG8gY2xvbmVkCi8vLyBvYmplY3RzLgovLy8KLy8vIEl0IGlzIHNhZmUgdG8gY2xvbmUgbWVtYmVycywgYnV0IGNsb25pbmcgYSBjbGFzcyBvciBsaWJyYXJ5IGlzIG5vdAovLy8gc3VwcG9ydGVkLgpjbGFzcyBDbG9uZVZpc2l0b3IgaW1wbGVtZW50cyBUcmVlVmlzaXRvciB7CiAgZmluYWwgTWFwPFZhcmlhYmxlRGVjbGFyYXRpb24sIFZhcmlhYmxlRGVjbGFyYXRpb24+IHZhcmlhYmxlcyA9CiAgICAgIDxWYXJpYWJsZURlY2xhcmF0aW9uLCBWYXJpYWJsZURlY2xhcmF0aW9uPnt9OwogIGZpbmFsIE1hcDxMYWJlbGVkU3RhdGVtZW50LCBMYWJlbGVkU3RhdGVtZW50PiBsYWJlbHMgPQogICAgICA8TGFiZWxlZFN0YXRlbWVudCwgTGFiZWxlZFN0YXRlbWVudD57fTsKICBmaW5hbCBNYXA8U3dpdGNoQ2FzZSwgU3dpdGNoQ2FzZT4gc3dpdGNoQ2FzZXMgPSA8U3dpdGNoQ2FzZSwgU3dpdGNoQ2FzZT57fTsKICBmaW5hbCBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IHR5cGVTdWJzdGl0dXRpb247CiAgZmluYWwgTWFwPFR5cGVQYXJhbWV0ZXIsIFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbXM7CiAgYm9vbCBjbG9uZUFubm90YXRpb25zOwoKICAvLy8gQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgY2xvbmluZyB2aXNpdG9yIGZvciBLZXJuZWwgQVNUcy4KICAvLy8KICAvLy8gVGhlIGJvb2xlYW4gdmFsdWUgb2YgW2Nsb25lQW5ub3RhdGlvbnNdIHRlbGxzIGlmIHRoZSBhbm5vdGF0aW9ucyBvbiB0aGUKICAvLy8gb3V0bGluZSBlbGVtZW50cyBpbiB0aGUgc291cmNlIEFTVCBzaG91bGQgYmUgY2xvbmVkIHRvIHRoZSB0YXJnZXQgQVNULiBUaGUKICAvLy8gYW5ub3RhdGlvbnMgaW4gcHJvY2VkdXJlIGJvZGllcyBhcmUgY2xvbmVkIHVuY29uZGl0aW9uYWxseS4KICBDbG9uZVZpc2l0b3IoCiAgICAgIHtNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IHR5cGVTdWJzdGl0dXRpb24sCiAgICAgIE1hcDxUeXBlUGFyYW1ldGVyLCBUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1zLAogICAgICB0aGlzLmNsb25lQW5ub3RhdGlvbnMgPSB0cnVlfSkKICAgICAgOiB0aGlzLnR5cGVTdWJzdGl0dXRpb24gPSBlbnN1cmVNdXRhYmxlKHR5cGVTdWJzdGl0dXRpb24pLAogICAgICAgIHRoaXMudHlwZVBhcmFtcyA9IHR5cGVQYXJhbXMgPz8gPFR5cGVQYXJhbWV0ZXIsIFR5cGVQYXJhbWV0ZXI+e307CgogIHN0YXRpYyBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IGVuc3VyZU11dGFibGUoCiAgICAgIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gbWFwKSB7CiAgICAvLyBXZSBuZWVkIHRvIG11dGF0ZSB0aGlzIG1hcCwgc28gbWFrZSBzdXJlIHdlIGRvbid0IHVzZSBhIGNvbnN0YW50IG1hcC4KICAgIGlmIChtYXAgPT0gbnVsbCB8fCBtYXAuaXNFbXB0eSkgewogICAgICByZXR1cm4gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogICAgfQogICAgcmV0dXJuIG1hcDsKICB9CgogIFRyZWVOb2RlIHZpc2l0TGlicmFyeShMaWJyYXJ5IG5vZGUpIHsKICAgIHRocm93ICdDbG9uaW5nIG9mIGxpYnJhcmllcyBpcyBub3QgaW1wbGVtZW50ZWQnOwogIH0KCiAgVHJlZU5vZGUgdmlzaXRDbGFzcyhDbGFzcyBub2RlKSB7CiAgICB0aHJvdyAnQ2xvbmluZyBvZiBjbGFzc2VzIGlzIG5vdCBpbXBsZW1lbnRlZCc7CiAgfQoKICBUcmVlTm9kZSB2aXNpdEV4dGVuc2lvbihFeHRlbnNpb24gbm9kZSkgewogICAgdGhyb3cgJ0Nsb25pbmcgb2YgZXh0ZW5zaW9ucyBpcyBub3QgaW1wbGVtZW50ZWQnOwogIH0KCiAgLy8gVGhlIGN1cnJlbnRseSBhY3RpdmUgZmlsZSB1cmkgd2hlcmUgd2UgYXJlIGNsb25pbmcgW1RyZWVOb2RlXXMgZnJvbS4gIElmCiAgLy8gdGhpcyBpcyBzZXQgdG8gYG51bGxgIHdlIGNhbm5vdCBjbG9uZSBmaWxlIG9mZnNldHMgdG8gbmV3bHkgY3JlYXRlZCBub2Rlcy4KICAvLyBUaGUgW19jbG9uZUZpbGVPZmZzZXRdIGhlbHBlciBmdW5jdGlvbiB3aWxsIGVuc3VyZSB0aGlzLgogIFVyaSBfYWN0aXZlRmlsZVVyaTsKCiAgLy8gSWYgd2UgZG9uJ3Qga25vdyB0aGUgZmlsZSB1cmkgd2UgYXJlIGNsb25pbmcgZWxlbWVudHMgZnJvbSwgaXQncyBub3Qgc2FmZQogIC8vIHRvIGNsb25lIGZpbGUgb2Zmc2V0cyBlaXRoZXIuCiAgaW50IF9jbG9uZUZpbGVPZmZzZXQoaW50IGZpbGVPZmZzZXQpIHsKICAgIHJldHVybiBfYWN0aXZlRmlsZVVyaSA9PSBudWxsID8gVHJlZU5vZGUubm9PZmZzZXQgOiBmaWxlT2Zmc2V0OwogIH0KCiAgVCBjbG9uZTxUIGV4dGVuZHMgVHJlZU5vZGU+KFQgbm9kZSkgewogICAgZmluYWwgVXJpIGFjdGl2ZUZpbGVVcmlTYXZlZCA9IF9hY3RpdmVGaWxlVXJpOwogICAgaWYgKG5vZGUgaXMgRmlsZVVyaU5vZGUpIF9hY3RpdmVGaWxlVXJpID0gbm9kZS5maWxlVXJpID8/IF9hY3RpdmVGaWxlVXJpOwogICAgZmluYWwgVHJlZU5vZGUgcmVzdWx0ID0gbm9kZS5hY2NlcHQodGhpcykKICAgICAgLi5maWxlT2Zmc2V0ID0gX2Nsb25lRmlsZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgX2FjdGl2ZUZpbGVVcmkgPSBhY3RpdmVGaWxlVXJpU2F2ZWQ7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgVHJlZU5vZGUgY2xvbmVPcHRpb25hbChUcmVlTm9kZSBub2RlKSB7CiAgICBpZiAobm9kZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGZpbmFsIFVyaSBhY3RpdmVGaWxlVXJpU2F2ZWQgPSBfYWN0aXZlRmlsZVVyaTsKICAgIGlmIChub2RlIGlzIEZpbGVVcmlOb2RlKSBfYWN0aXZlRmlsZVVyaSA9IG5vZGUuZmlsZVVyaSA/PyBfYWN0aXZlRmlsZVVyaTsKICAgIFRyZWVOb2RlIHJlc3VsdCA9IG5vZGU/LmFjY2VwdCh0aGlzKTsKICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgcmVzdWx0LmZpbGVPZmZzZXQgPSBfY2xvbmVGaWxlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICBfYWN0aXZlRmlsZVVyaSA9IGFjdGl2ZUZpbGVVcmlTYXZlZDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBEYXJ0VHlwZSB2aXNpdFR5cGUoRGFydFR5cGUgdHlwZSkgewogICAgcmV0dXJuIHN1YnN0aXR1dGUodHlwZSwgdHlwZVN1YnN0aXR1dGlvbik7CiAgfQoKICBDb25zdGFudCB2aXNpdENvbnN0YW50KENvbnN0YW50IGNvbnN0YW50KSB7CiAgICByZXR1cm4gY29uc3RhbnQ7CiAgfQoKICBEYXJ0VHlwZSB2aXNpdE9wdGlvbmFsVHlwZShEYXJ0VHlwZSB0eXBlKSB7CiAgICByZXR1cm4gdHlwZSA9PSBudWxsID8gbnVsbCA6IHN1YnN0aXR1dGUodHlwZSwgdHlwZVN1YnN0aXR1dGlvbik7CiAgfQoKICB2aXNpdEludmFsaWRFeHByZXNzaW9uKEludmFsaWRFeHByZXNzaW9uIG5vZGUpIHsKICAgIHJldHVybiBuZXcgSW52YWxpZEV4cHJlc3Npb24obm9kZS5tZXNzYWdlKTsKICB9CgogIHZpc2l0VmFyaWFibGVHZXQoVmFyaWFibGVHZXQgbm9kZSkgewogICAgcmV0dXJuIG5ldyBWYXJpYWJsZUdldCgKICAgICAgICB2YXJpYWJsZXNbbm9kZS52YXJpYWJsZV0sIHZpc2l0T3B0aW9uYWxUeXBlKG5vZGUucHJvbW90ZWRUeXBlKSk7CiAgfQoKICB2aXNpdFZhcmlhYmxlU2V0KFZhcmlhYmxlU2V0IG5vZGUpIHsKICAgIHJldHVybiBuZXcgVmFyaWFibGVTZXQodmFyaWFibGVzW25vZGUudmFyaWFibGVdLCBjbG9uZShub2RlLnZhbHVlKSk7CiAgfQoKICB2aXNpdFByb3BlcnR5R2V0KFByb3BlcnR5R2V0IG5vZGUpIHsKICAgIHJldHVybiBuZXcgUHJvcGVydHlHZXQuYnlSZWZlcmVuY2UoCiAgICAgICAgY2xvbmUobm9kZS5yZWNlaXZlciksIG5vZGUubmFtZSwgbm9kZS5pbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UpOwogIH0KCiAgdmlzaXRQcm9wZXJ0eVNldChQcm9wZXJ0eVNldCBub2RlKSB7CiAgICByZXR1cm4gbmV3IFByb3BlcnR5U2V0LmJ5UmVmZXJlbmNlKGNsb25lKG5vZGUucmVjZWl2ZXIpLCBub2RlLm5hbWUsCiAgICAgICAgY2xvbmUobm9kZS52YWx1ZSksIG5vZGUuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKTsKICB9CgogIHZpc2l0RGlyZWN0UHJvcGVydHlHZXQoRGlyZWN0UHJvcGVydHlHZXQgbm9kZSkgewogICAgcmV0dXJuIG5ldyBEaXJlY3RQcm9wZXJ0eUdldC5ieVJlZmVyZW5jZSgKICAgICAgICBjbG9uZShub2RlLnJlY2VpdmVyKSwgbm9kZS50YXJnZXRSZWZlcmVuY2UpOwogIH0KCiAgdmlzaXREaXJlY3RQcm9wZXJ0eVNldChEaXJlY3RQcm9wZXJ0eVNldCBub2RlKSB7CiAgICByZXR1cm4gbmV3IERpcmVjdFByb3BlcnR5U2V0LmJ5UmVmZXJlbmNlKAogICAgICAgIGNsb25lKG5vZGUucmVjZWl2ZXIpLCBub2RlLnRhcmdldFJlZmVyZW5jZSwgY2xvbmUobm9kZS52YWx1ZSkpOwogIH0KCiAgdmlzaXRTdXBlclByb3BlcnR5R2V0KFN1cGVyUHJvcGVydHlHZXQgbm9kZSkgewogICAgcmV0dXJuIG5ldyBTdXBlclByb3BlcnR5R2V0LmJ5UmVmZXJlbmNlKAogICAgICAgIG5vZGUubmFtZSwgbm9kZS5pbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UpOwogIH0KCiAgdmlzaXRTdXBlclByb3BlcnR5U2V0KFN1cGVyUHJvcGVydHlTZXQgbm9kZSkgewogICAgcmV0dXJuIG5ldyBTdXBlclByb3BlcnR5U2V0LmJ5UmVmZXJlbmNlKAogICAgICAgIG5vZGUubmFtZSwgY2xvbmUobm9kZS52YWx1ZSksIG5vZGUuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKTsKICB9CgogIHZpc2l0U3RhdGljR2V0KFN0YXRpY0dldCBub2RlKSB7CiAgICByZXR1cm4gbmV3IFN0YXRpY0dldC5ieVJlZmVyZW5jZShub2RlLnRhcmdldFJlZmVyZW5jZSk7CiAgfQoKICB2aXNpdFN0YXRpY1NldChTdGF0aWNTZXQgbm9kZSkgewogICAgcmV0dXJuIG5ldyBTdGF0aWNTZXQuYnlSZWZlcmVuY2Uobm9kZS50YXJnZXRSZWZlcmVuY2UsIGNsb25lKG5vZGUudmFsdWUpKTsKICB9CgogIHZpc2l0TWV0aG9kSW52b2NhdGlvbihNZXRob2RJbnZvY2F0aW9uIG5vZGUpIHsKICAgIHJldHVybiBuZXcgTWV0aG9kSW52b2NhdGlvbi5ieVJlZmVyZW5jZShjbG9uZShub2RlLnJlY2VpdmVyKSwgbm9kZS5uYW1lLAogICAgICAgIGNsb25lKG5vZGUuYXJndW1lbnRzKSwgbm9kZS5pbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UpOwogIH0KCiAgdmlzaXREaXJlY3RNZXRob2RJbnZvY2F0aW9uKERpcmVjdE1ldGhvZEludm9jYXRpb24gbm9kZSkgewogICAgcmV0dXJuIG5ldyBEaXJlY3RNZXRob2RJbnZvY2F0aW9uLmJ5UmVmZXJlbmNlKAogICAgICAgIGNsb25lKG5vZGUucmVjZWl2ZXIpLCBub2RlLnRhcmdldFJlZmVyZW5jZSwgY2xvbmUobm9kZS5hcmd1bWVudHMpKTsKICB9CgogIHZpc2l0U3VwZXJNZXRob2RJbnZvY2F0aW9uKFN1cGVyTWV0aG9kSW52b2NhdGlvbiBub2RlKSB7CiAgICByZXR1cm4gbmV3IFN1cGVyTWV0aG9kSW52b2NhdGlvbi5ieVJlZmVyZW5jZSgKICAgICAgICBub2RlLm5hbWUsIGNsb25lKG5vZGUuYXJndW1lbnRzKSwgbm9kZS5pbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UpOwogIH0KCiAgdmlzaXRTdGF0aWNJbnZvY2F0aW9uKFN0YXRpY0ludm9jYXRpb24gbm9kZSkgewogICAgcmV0dXJuIG5ldyBTdGF0aWNJbnZvY2F0aW9uLmJ5UmVmZXJlbmNlKAogICAgICAgIG5vZGUudGFyZ2V0UmVmZXJlbmNlLCBjbG9uZShub2RlLmFyZ3VtZW50cyksCiAgICAgICAgaXNDb25zdDogbm9kZS5pc0NvbnN0KTsKICB9CgogIHZpc2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKENvbnN0cnVjdG9ySW52b2NhdGlvbiBub2RlKSB7CiAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9ySW52b2NhdGlvbi5ieVJlZmVyZW5jZSgKICAgICAgICBub2RlLnRhcmdldFJlZmVyZW5jZSwgY2xvbmUobm9kZS5hcmd1bWVudHMpLAogICAgICAgIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCk7CiAgfQoKICB2aXNpdE5vdChOb3Qgbm9kZSkgewogICAgcmV0dXJuIG5ldyBOb3QoY2xvbmUobm9kZS5vcGVyYW5kKSk7CiAgfQoKICB2aXNpdExvZ2ljYWxFeHByZXNzaW9uKExvZ2ljYWxFeHByZXNzaW9uIG5vZGUpIHsKICAgIHJldHVybiBuZXcgTG9naWNhbEV4cHJlc3Npb24oCiAgICAgICAgY2xvbmUobm9kZS5sZWZ0KSwgbm9kZS5vcGVyYXRvciwgY2xvbmUobm9kZS5yaWdodCkpOwogIH0KCiAgdmlzaXRDb25kaXRpb25hbEV4cHJlc3Npb24oQ29uZGl0aW9uYWxFeHByZXNzaW9uIG5vZGUpIHsKICAgIHJldHVybiBuZXcgQ29uZGl0aW9uYWxFeHByZXNzaW9uKGNsb25lKG5vZGUuY29uZGl0aW9uKSwgY2xvbmUobm9kZS50aGVuKSwKICAgICAgICBjbG9uZShub2RlLm90aGVyd2lzZSksIHZpc2l0T3B0aW9uYWxUeXBlKG5vZGUuc3RhdGljVHlwZSkpOwogIH0KCiAgdmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKFN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSkgewogICAgcmV0dXJuIG5ldyBTdHJpbmdDb25jYXRlbmF0aW9uKG5vZGUuZXhwcmVzc2lvbnMubWFwKGNsb25lKS50b0xpc3QoKSk7CiAgfQoKICB2aXNpdExpc3RDb25jYXRlbmF0aW9uKExpc3RDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIHJldHVybiBuZXcgTGlzdENvbmNhdGVuYXRpb24obm9kZS5saXN0cy5tYXAoY2xvbmUpLnRvTGlzdCgpLAogICAgICAgIHR5cGVBcmd1bWVudDogdmlzaXRUeXBlKG5vZGUudHlwZUFyZ3VtZW50KSk7CiAgfQoKICB2aXNpdFNldENvbmNhdGVuYXRpb24oU2V0Q29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICByZXR1cm4gbmV3IFNldENvbmNhdGVuYXRpb24obm9kZS5zZXRzLm1hcChjbG9uZSkudG9MaXN0KCksCiAgICAgICAgdHlwZUFyZ3VtZW50OiB2aXNpdFR5cGUobm9kZS50eXBlQXJndW1lbnQpKTsKICB9CgogIHZpc2l0TWFwQ29uY2F0ZW5hdGlvbihNYXBDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIHJldHVybiBuZXcgTWFwQ29uY2F0ZW5hdGlvbihub2RlLm1hcHMubWFwKGNsb25lKS50b0xpc3QoKSwKICAgICAgICBrZXlUeXBlOiB2aXNpdFR5cGUobm9kZS5rZXlUeXBlKSwgdmFsdWVUeXBlOiB2aXNpdFR5cGUobm9kZS52YWx1ZVR5cGUpKTsKICB9CgogIHZpc2l0SW5zdGFuY2VDcmVhdGlvbihJbnN0YW5jZUNyZWF0aW9uIG5vZGUpIHsKICAgIGZpbmFsIE1hcDxSZWZlcmVuY2UsIEV4cHJlc3Npb24+IGZpZWxkVmFsdWVzID0gPFJlZmVyZW5jZSwgRXhwcmVzc2lvbj57fTsKICAgIG5vZGUuZmllbGRWYWx1ZXMuZm9yRWFjaCgoUmVmZXJlbmNlIGZpZWxkUmVmLCBFeHByZXNzaW9uIHZhbHVlKSB7CiAgICAgIGZpZWxkVmFsdWVzW2ZpZWxkUmVmXSA9IGNsb25lKHZhbHVlKTsKICAgIH0pOwogICAgcmV0dXJuIG5ldyBJbnN0YW5jZUNyZWF0aW9uKAogICAgICAgIG5vZGUuY2xhc3NSZWZlcmVuY2UsCiAgICAgICAgbm9kZS50eXBlQXJndW1lbnRzLm1hcCh2aXNpdFR5cGUpLnRvTGlzdCgpLAogICAgICAgIGZpZWxkVmFsdWVzLAogICAgICAgIG5vZGUuYXNzZXJ0cy5tYXAoY2xvbmUpLnRvTGlzdCgpLAogICAgICAgIG5vZGUudW51c2VkQXJndW1lbnRzLm1hcChjbG9uZSkudG9MaXN0KCkpOwogIH0KCiAgdmlzaXRJc0V4cHJlc3Npb24oSXNFeHByZXNzaW9uIG5vZGUpIHsKICAgIHJldHVybiBuZXcgSXNFeHByZXNzaW9uKGNsb25lKG5vZGUub3BlcmFuZCksIHZpc2l0VHlwZShub2RlLnR5cGUpKTsKICB9CgogIHZpc2l0QXNFeHByZXNzaW9uKEFzRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gbmV3IEFzRXhwcmVzc2lvbihjbG9uZShub2RlLm9wZXJhbmQpLCB2aXNpdFR5cGUobm9kZS50eXBlKSkKICAgICAgLi5mbGFncyA9IG5vZGUuZmxhZ3M7CiAgfQoKICB2aXNpdFN5bWJvbExpdGVyYWwoU3ltYm9sTGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gbmV3IFN5bWJvbExpdGVyYWwobm9kZS52YWx1ZSk7CiAgfQoKICB2aXNpdFR5cGVMaXRlcmFsKFR5cGVMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBuZXcgVHlwZUxpdGVyYWwodmlzaXRUeXBlKG5vZGUudHlwZSkpOwogIH0KCiAgdmlzaXRUaGlzRXhwcmVzc2lvbihUaGlzRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gbmV3IFRoaXNFeHByZXNzaW9uKCk7CiAgfQoKICB2aXNpdFJldGhyb3coUmV0aHJvdyBub2RlKSB7CiAgICByZXR1cm4gbmV3IFJldGhyb3coKTsKICB9CgogIHZpc2l0VGhyb3coVGhyb3cgbm9kZSkgewogICAgcmV0dXJuIG5ldyBUaHJvdyhjbG9uZU9wdGlvbmFsKG5vZGUuZXhwcmVzc2lvbikpOwogIH0KCiAgdmlzaXRMaXN0TGl0ZXJhbChMaXN0TGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gbmV3IExpc3RMaXRlcmFsKG5vZGUuZXhwcmVzc2lvbnMubWFwKGNsb25lKS50b0xpc3QoKSwKICAgICAgICB0eXBlQXJndW1lbnQ6IHZpc2l0VHlwZShub2RlLnR5cGVBcmd1bWVudCksIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCk7CiAgfQoKICB2aXNpdFNldExpdGVyYWwoU2V0TGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gbmV3IFNldExpdGVyYWwobm9kZS5leHByZXNzaW9ucy5tYXAoY2xvbmUpLnRvTGlzdCgpLAogICAgICAgIHR5cGVBcmd1bWVudDogdmlzaXRUeXBlKG5vZGUudHlwZUFyZ3VtZW50KSwgaXNDb25zdDogbm9kZS5pc0NvbnN0KTsKICB9CgogIHZpc2l0TWFwTGl0ZXJhbChNYXBMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBuZXcgTWFwTGl0ZXJhbChub2RlLmVudHJpZXMubWFwKGNsb25lKS50b0xpc3QoKSwKICAgICAgICBrZXlUeXBlOiB2aXNpdFR5cGUobm9kZS5rZXlUeXBlKSwKICAgICAgICB2YWx1ZVR5cGU6IHZpc2l0VHlwZShub2RlLnZhbHVlVHlwZSksCiAgICAgICAgaXNDb25zdDogbm9kZS5pc0NvbnN0KTsKICB9CgogIHZpc2l0TWFwRW50cnkoTWFwRW50cnkgbm9kZSkgewogICAgcmV0dXJuIG5ldyBNYXBFbnRyeShjbG9uZShub2RlLmtleSksIGNsb25lKG5vZGUudmFsdWUpKTsKICB9CgogIHZpc2l0QXdhaXRFeHByZXNzaW9uKEF3YWl0RXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gbmV3IEF3YWl0RXhwcmVzc2lvbihjbG9uZShub2RlLm9wZXJhbmQpKTsKICB9CgogIHZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKEZ1bmN0aW9uRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uRXhwcmVzc2lvbihjbG9uZShub2RlLmZ1bmN0aW9uKSk7CiAgfQoKICB2aXNpdENvbnN0YW50RXhwcmVzc2lvbihDb25zdGFudEV4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIG5ldyBDb25zdGFudEV4cHJlc3Npb24oCiAgICAgICAgdmlzaXRDb25zdGFudChub2RlLmNvbnN0YW50KSwgdmlzaXRUeXBlKG5vZGUudHlwZSkpOwogIH0KCiAgdmlzaXRTdHJpbmdMaXRlcmFsKFN0cmluZ0xpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIG5ldyBTdHJpbmdMaXRlcmFsKG5vZGUudmFsdWUpOwogIH0KCiAgdmlzaXRJbnRMaXRlcmFsKEludExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIG5ldyBJbnRMaXRlcmFsKG5vZGUudmFsdWUpOwogIH0KCiAgdmlzaXREb3VibGVMaXRlcmFsKERvdWJsZUxpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIG5ldyBEb3VibGVMaXRlcmFsKG5vZGUudmFsdWUpOwogIH0KCiAgdmlzaXRCb29sTGl0ZXJhbChCb29sTGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gbmV3IEJvb2xMaXRlcmFsKG5vZGUudmFsdWUpOwogIH0KCiAgdmlzaXROdWxsTGl0ZXJhbChOdWxsTGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gbmV3IE51bGxMaXRlcmFsKCk7CiAgfQoKICB2aXNpdExldChMZXQgbm9kZSkgewogICAgdmFyIG5ld1ZhcmlhYmxlID0gY2xvbmUobm9kZS52YXJpYWJsZSk7CiAgICByZXR1cm4gbmV3IExldChuZXdWYXJpYWJsZSwgY2xvbmUobm9kZS5ib2R5KSk7CiAgfQoKICB2aXNpdEJsb2NrRXhwcmVzc2lvbihCbG9ja0V4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIG5ldyBCbG9ja0V4cHJlc3Npb24oY2xvbmUobm9kZS5ib2R5KSwgY2xvbmUobm9kZS52YWx1ZSkpOwogIH0KCiAgdmlzaXRFeHByZXNzaW9uU3RhdGVtZW50KEV4cHJlc3Npb25TdGF0ZW1lbnQgbm9kZSkgewogICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uU3RhdGVtZW50KGNsb25lKG5vZGUuZXhwcmVzc2lvbikpOwogIH0KCiAgdmlzaXRCbG9jayhCbG9jayBub2RlKSB7CiAgICByZXR1cm4gbmV3IEJsb2NrKG5vZGUuc3RhdGVtZW50cy5tYXAoY2xvbmUpLnRvTGlzdCgpKTsKICB9CgogIHZpc2l0QXNzZXJ0QmxvY2soQXNzZXJ0QmxvY2sgbm9kZSkgewogICAgcmV0dXJuIG5ldyBBc3NlcnRCbG9jayhub2RlLnN0YXRlbWVudHMubWFwKGNsb25lKS50b0xpc3QoKSk7CiAgfQoKICB2aXNpdEVtcHR5U3RhdGVtZW50KEVtcHR5U3RhdGVtZW50IG5vZGUpIHsKICAgIHJldHVybiBuZXcgRW1wdHlTdGF0ZW1lbnQoKTsKICB9CgogIHZpc2l0QXNzZXJ0U3RhdGVtZW50KEFzc2VydFN0YXRlbWVudCBub2RlKSB7CiAgICByZXR1cm4gbmV3IEFzc2VydFN0YXRlbWVudChjbG9uZShub2RlLmNvbmRpdGlvbiksCiAgICAgICAgY29uZGl0aW9uU3RhcnRPZmZzZXQ6IG5vZGUuY29uZGl0aW9uU3RhcnRPZmZzZXQsCiAgICAgICAgY29uZGl0aW9uRW5kT2Zmc2V0OiBub2RlLmNvbmRpdGlvbkVuZE9mZnNldCwKICAgICAgICBtZXNzYWdlOiBjbG9uZU9wdGlvbmFsKG5vZGUubWVzc2FnZSkpOwogIH0KCiAgdmlzaXRMYWJlbGVkU3RhdGVtZW50KExhYmVsZWRTdGF0ZW1lbnQgbm9kZSkgewogICAgTGFiZWxlZFN0YXRlbWVudCBuZXdOb2RlID0gbmV3IExhYmVsZWRTdGF0ZW1lbnQobnVsbCk7CiAgICBsYWJlbHNbbm9kZV0gPSBuZXdOb2RlOwogICAgbmV3Tm9kZS5ib2R5ID0gY2xvbmUobm9kZS5ib2R5KS4ucGFyZW50ID0gbmV3Tm9kZTsKICAgIHJldHVybiBuZXdOb2RlOwogIH0KCiAgdmlzaXRCcmVha1N0YXRlbWVudChCcmVha1N0YXRlbWVudCBub2RlKSB7CiAgICByZXR1cm4gbmV3IEJyZWFrU3RhdGVtZW50KGxhYmVsc1tub2RlLnRhcmdldF0pOwogIH0KCiAgdmlzaXRXaGlsZVN0YXRlbWVudChXaGlsZVN0YXRlbWVudCBub2RlKSB7CiAgICByZXR1cm4gbmV3IFdoaWxlU3RhdGVtZW50KGNsb25lKG5vZGUuY29uZGl0aW9uKSwgY2xvbmUobm9kZS5ib2R5KSk7CiAgfQoKICB2aXNpdERvU3RhdGVtZW50KERvU3RhdGVtZW50IG5vZGUpIHsKICAgIHJldHVybiBuZXcgRG9TdGF0ZW1lbnQoY2xvbmUobm9kZS5ib2R5KSwgY2xvbmUobm9kZS5jb25kaXRpb24pKTsKICB9CgogIHZpc2l0Rm9yU3RhdGVtZW50KEZvclN0YXRlbWVudCBub2RlKSB7CiAgICB2YXIgdmFyaWFibGVzID0gbm9kZS52YXJpYWJsZXMubWFwKGNsb25lKS50b0xpc3QoKTsKICAgIHJldHVybiBuZXcgRm9yU3RhdGVtZW50KHZhcmlhYmxlcywgY2xvbmVPcHRpb25hbChub2RlLmNvbmRpdGlvbiksCiAgICAgICAgbm9kZS51cGRhdGVzLm1hcChjbG9uZSkudG9MaXN0KCksIGNsb25lKG5vZGUuYm9keSkpOwogIH0KCiAgdmlzaXRGb3JJblN0YXRlbWVudChGb3JJblN0YXRlbWVudCBub2RlKSB7CiAgICB2YXIgbmV3VmFyaWFibGUgPSBjbG9uZShub2RlLnZhcmlhYmxlKTsKICAgIHJldHVybiBuZXcgRm9ySW5TdGF0ZW1lbnQoCiAgICAgICAgbmV3VmFyaWFibGUsIGNsb25lKG5vZGUuaXRlcmFibGUpLCBjbG9uZShub2RlLmJvZHkpLAogICAgICAgIGlzQXN5bmM6IG5vZGUuaXNBc3luYyk7CiAgfQoKICB2aXNpdFN3aXRjaFN0YXRlbWVudChTd2l0Y2hTdGF0ZW1lbnQgbm9kZSkgewogICAgZm9yIChTd2l0Y2hDYXNlIHN3aXRjaENhc2UgaW4gbm9kZS5jYXNlcykgewogICAgICBzd2l0Y2hDYXNlc1tzd2l0Y2hDYXNlXSA9IG5ldyBTd2l0Y2hDYXNlKAogICAgICAgICAgc3dpdGNoQ2FzZS5leHByZXNzaW9ucy5tYXAoY2xvbmUpLnRvTGlzdCgpLAogICAgICAgICAgbmV3IExpc3Q8aW50Pi5mcm9tKHN3aXRjaENhc2UuZXhwcmVzc2lvbk9mZnNldHMpLAogICAgICAgICAgbnVsbCwKICAgICAgICAgIGlzRGVmYXVsdDogc3dpdGNoQ2FzZS5pc0RlZmF1bHQpOwogICAgfQogICAgcmV0dXJuIG5ldyBTd2l0Y2hTdGF0ZW1lbnQoCiAgICAgICAgY2xvbmUobm9kZS5leHByZXNzaW9uKSwgbm9kZS5jYXNlcy5tYXAoY2xvbmUpLnRvTGlzdCgpKTsKICB9CgogIHZpc2l0U3dpdGNoQ2FzZShTd2l0Y2hDYXNlIG5vZGUpIHsKICAgIHZhciBzd2l0Y2hDYXNlID0gc3dpdGNoQ2FzZXNbbm9kZV07CiAgICBzd2l0Y2hDYXNlLmJvZHkgPSBjbG9uZShub2RlLmJvZHkpLi5wYXJlbnQgPSBzd2l0Y2hDYXNlOwogICAgcmV0dXJuIHN3aXRjaENhc2U7CiAgfQoKICB2aXNpdENvbnRpbnVlU3dpdGNoU3RhdGVtZW50KENvbnRpbnVlU3dpdGNoU3RhdGVtZW50IG5vZGUpIHsKICAgIHJldHVybiBuZXcgQ29udGludWVTd2l0Y2hTdGF0ZW1lbnQoc3dpdGNoQ2FzZXNbbm9kZS50YXJnZXRdKTsKICB9CgogIHZpc2l0SWZTdGF0ZW1lbnQoSWZTdGF0ZW1lbnQgbm9kZSkgewogICAgcmV0dXJuIG5ldyBJZlN0YXRlbWVudCgKICAgICAgICBjbG9uZShub2RlLmNvbmRpdGlvbiksIGNsb25lKG5vZGUudGhlbiksIGNsb25lT3B0aW9uYWwobm9kZS5vdGhlcndpc2UpKTsKICB9CgogIHZpc2l0UmV0dXJuU3RhdGVtZW50KFJldHVyblN0YXRlbWVudCBub2RlKSB7CiAgICByZXR1cm4gbmV3IFJldHVyblN0YXRlbWVudChjbG9uZU9wdGlvbmFsKG5vZGUuZXhwcmVzc2lvbikpOwogIH0KCiAgdmlzaXRUcnlDYXRjaChUcnlDYXRjaCBub2RlKSB7CiAgICByZXR1cm4gbmV3IFRyeUNhdGNoKGNsb25lKG5vZGUuYm9keSksIG5vZGUuY2F0Y2hlcy5tYXAoY2xvbmUpLnRvTGlzdCgpLAogICAgICAgIGlzU3ludGhldGljOiBub2RlLmlzU3ludGhldGljKTsKICB9CgogIHZpc2l0Q2F0Y2goQ2F0Y2ggbm9kZSkgewogICAgdmFyIG5ld0V4Y2VwdGlvbiA9IGNsb25lT3B0aW9uYWwobm9kZS5leGNlcHRpb24pOwogICAgdmFyIG5ld1N0YWNrVHJhY2UgPSBjbG9uZU9wdGlvbmFsKG5vZGUuc3RhY2tUcmFjZSk7CiAgICByZXR1cm4gbmV3IENhdGNoKG5ld0V4Y2VwdGlvbiwgY2xvbmUobm9kZS5ib2R5KSwKICAgICAgICBzdGFja1RyYWNlOiBuZXdTdGFja1RyYWNlLCBndWFyZDogdmlzaXRUeXBlKG5vZGUuZ3VhcmQpKTsKICB9CgogIHZpc2l0VHJ5RmluYWxseShUcnlGaW5hbGx5IG5vZGUpIHsKICAgIHJldHVybiBuZXcgVHJ5RmluYWxseShjbG9uZShub2RlLmJvZHkpLCBjbG9uZShub2RlLmZpbmFsaXplcikpOwogIH0KCiAgdmlzaXRZaWVsZFN0YXRlbWVudChZaWVsZFN0YXRlbWVudCBub2RlKSB7CiAgICByZXR1cm4gbmV3IFlpZWxkU3RhdGVtZW50KGNsb25lKG5vZGUuZXhwcmVzc2lvbikpLi5mbGFncyA9IG5vZGUuZmxhZ3M7CiAgfQoKICB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24oVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICByZXR1cm4gdmFyaWFibGVzW25vZGVdID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24obm9kZS5uYW1lLAogICAgICAgIGluaXRpYWxpemVyOiBjbG9uZU9wdGlvbmFsKG5vZGUuaW5pdGlhbGl6ZXIpLAogICAgICAgIHR5cGU6IHZpc2l0VHlwZShub2RlLnR5cGUpKQogICAgICAuLmFubm90YXRpb25zID0gY2xvbmVBbm5vdGF0aW9ucyAmJiAhbm9kZS5hbm5vdGF0aW9ucy5pc0VtcHR5CiAgICAgICAgICA/IG5vZGUuYW5ub3RhdGlvbnMubWFwKGNsb25lKS50b0xpc3QoKQogICAgICAgICAgOiBjb25zdCA8RXhwcmVzc2lvbj5bXQogICAgICAuLmZsYWdzID0gbm9kZS5mbGFncwogICAgICAuLmZpbGVFcXVhbHNPZmZzZXQgPSBfY2xvbmVGaWxlT2Zmc2V0KG5vZGUuZmlsZUVxdWFsc09mZnNldCk7CiAgfQoKICB2aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiBub2RlKSB7CiAgICB2YXIgbmV3VmFyaWFibGUgPSBjbG9uZShub2RlLnZhcmlhYmxlKTsKICAgIHJldHVybiBuZXcgRnVuY3Rpb25EZWNsYXJhdGlvbihuZXdWYXJpYWJsZSwgY2xvbmUobm9kZS5mdW5jdGlvbikpOwogIH0KCiAgLy8gTWVtYmVycwogIHZpc2l0Q29uc3RydWN0b3IoQ29uc3RydWN0b3Igbm9kZSkgewogICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RvcihjbG9uZShub2RlLmZ1bmN0aW9uKSwKICAgICAgICBuYW1lOiBub2RlLm5hbWUsCiAgICAgICAgaXNDb25zdDogbm9kZS5pc0NvbnN0LAogICAgICAgIGlzRXh0ZXJuYWw6IG5vZGUuaXNFeHRlcm5hbCwKICAgICAgICBpc1N5bnRoZXRpYzogbm9kZS5pc1N5bnRoZXRpYywKICAgICAgICBpbml0aWFsaXplcnM6IG5vZGUuaW5pdGlhbGl6ZXJzLm1hcChjbG9uZSkudG9MaXN0KCksCiAgICAgICAgdHJhbnNmb3JtZXJGbGFnczogbm9kZS50cmFuc2Zvcm1lckZsYWdzLAogICAgICAgIGZpbGVVcmk6IF9hY3RpdmVGaWxlVXJpKQogICAgICAuLmFubm90YXRpb25zID0gY2xvbmVBbm5vdGF0aW9ucyAmJiAhbm9kZS5hbm5vdGF0aW9ucy5pc0VtcHR5CiAgICAgICAgICA/IG5vZGUuYW5ub3RhdGlvbnMubWFwKGNsb25lKS50b0xpc3QoKQogICAgICAgICAgOiBjb25zdCA8RXhwcmVzc2lvbj5bXQogICAgICAuLmZpbGVPZmZzZXQgPSBfY2xvbmVGaWxlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCkKICAgICAgLi5maWxlRW5kT2Zmc2V0ID0gX2Nsb25lRmlsZU9mZnNldChub2RlLmZpbGVFbmRPZmZzZXQpOwogIH0KCiAgdmlzaXRQcm9jZWR1cmUoUHJvY2VkdXJlIG5vZGUpIHsKICAgIHJldHVybiBuZXcgUHJvY2VkdXJlKG5vZGUubmFtZSwgbm9kZS5raW5kLCBjbG9uZShub2RlLmZ1bmN0aW9uKSwKICAgICAgICB0cmFuc2Zvcm1lckZsYWdzOiBub2RlLnRyYW5zZm9ybWVyRmxhZ3MsCiAgICAgICAgZmlsZVVyaTogX2FjdGl2ZUZpbGVVcmksCiAgICAgICAgZm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldDogbm9kZS5mb3J3YXJkaW5nU3R1YlN1cGVyVGFyZ2V0LAogICAgICAgIGZvcndhcmRpbmdTdHViSW50ZXJmYWNlVGFyZ2V0OiBub2RlLmZvcndhcmRpbmdTdHViSW50ZXJmYWNlVGFyZ2V0KQogICAgICAuLmFubm90YXRpb25zID0gY2xvbmVBbm5vdGF0aW9ucyAmJiAhbm9kZS5hbm5vdGF0aW9ucy5pc0VtcHR5CiAgICAgICAgICA/IG5vZGUuYW5ub3RhdGlvbnMubWFwKGNsb25lKS50b0xpc3QoKQogICAgICAgICAgOiBjb25zdCA8RXhwcmVzc2lvbj5bXQogICAgICAuLnN0YXJ0RmlsZU9mZnNldCA9IF9jbG9uZUZpbGVPZmZzZXQobm9kZS5zdGFydEZpbGVPZmZzZXQpCiAgICAgIC4uZmlsZU9mZnNldCA9IF9jbG9uZUZpbGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KQogICAgICAuLmZpbGVFbmRPZmZzZXQgPSBfY2xvbmVGaWxlT2Zmc2V0KG5vZGUuZmlsZUVuZE9mZnNldCkKICAgICAgLi5mbGFncyA9IG5vZGUuZmxhZ3M7CiAgfQoKICB2aXNpdEZpZWxkKEZpZWxkIG5vZGUpIHsKICAgIHJldHVybiBuZXcgRmllbGQobm9kZS5uYW1lLAogICAgICAgIHR5cGU6IHZpc2l0VHlwZShub2RlLnR5cGUpLAogICAgICAgIGluaXRpYWxpemVyOiBjbG9uZU9wdGlvbmFsKG5vZGUuaW5pdGlhbGl6ZXIpLAogICAgICAgIGlzQ292YXJpYW50OiBub2RlLmlzQ292YXJpYW50LAogICAgICAgIGlzRmluYWw6IG5vZGUuaXNGaW5hbCwKICAgICAgICBpc0NvbnN0OiBub2RlLmlzQ29uc3QsCiAgICAgICAgaXNTdGF0aWM6IG5vZGUuaXNTdGF0aWMsCiAgICAgICAgaXNMYXRlOiBub2RlLmlzTGF0ZSwKICAgICAgICBoYXNJbXBsaWNpdEdldHRlcjogbm9kZS5oYXNJbXBsaWNpdEdldHRlciwKICAgICAgICBoYXNJbXBsaWNpdFNldHRlcjogbm9kZS5oYXNJbXBsaWNpdFNldHRlciwKICAgICAgICB0cmFuc2Zvcm1lckZsYWdzOiBub2RlLnRyYW5zZm9ybWVyRmxhZ3MsCiAgICAgICAgZmlsZVVyaTogX2FjdGl2ZUZpbGVVcmkpCiAgICAgIC4uYW5ub3RhdGlvbnMgPSBjbG9uZUFubm90YXRpb25zICYmICFub2RlLmFubm90YXRpb25zLmlzRW1wdHkKICAgICAgICAgID8gbm9kZS5hbm5vdGF0aW9ucy5tYXAoY2xvbmUpLnRvTGlzdCgpCiAgICAgICAgICA6IGNvbnN0IDxFeHByZXNzaW9uPltdCiAgICAgIC4uZmlsZU9mZnNldCA9IF9jbG9uZUZpbGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KQogICAgICAuLmZpbGVFbmRPZmZzZXQgPSBfY2xvbmVGaWxlT2Zmc2V0KG5vZGUuZmlsZUVuZE9mZnNldCkKICAgICAgLi5mbGFncyA9IG5vZGUuZmxhZ3M7CiAgfQoKICB2aXNpdFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yIG5vZGUpIHsKICAgIHJldHVybiBuZXcgUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3Iobm9kZS50YXJnZXRSZWZlcmVuY2UsCiAgICAgICAgbmFtZTogbm9kZS5uYW1lLAogICAgICAgIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCwKICAgICAgICBpc0V4dGVybmFsOiBub2RlLmlzRXh0ZXJuYWwsCiAgICAgICAgdHJhbnNmb3JtZXJGbGFnczogbm9kZS50cmFuc2Zvcm1lckZsYWdzLAogICAgICAgIHR5cGVBcmd1bWVudHM6IG5vZGUudHlwZUFyZ3VtZW50cy5tYXAodmlzaXRUeXBlKS50b0xpc3QoKSwKICAgICAgICB0eXBlUGFyYW1ldGVyczogbm9kZS50eXBlUGFyYW1ldGVycy5tYXAoY2xvbmUpLnRvTGlzdCgpLAogICAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzOiBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLm1hcChjbG9uZSkudG9MaXN0KCksCiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzOiBub2RlLm5hbWVkUGFyYW1ldGVycy5tYXAoY2xvbmUpLnRvTGlzdCgpLAogICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ6IG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICBmaWxlVXJpOiBfYWN0aXZlRmlsZVVyaSkKICAgICAgLi5hbm5vdGF0aW9ucyA9IGNsb25lQW5ub3RhdGlvbnMgJiYgIW5vZGUuYW5ub3RhdGlvbnMuaXNFbXB0eQogICAgICAgICAgPyBub2RlLmFubm90YXRpb25zLm1hcChjbG9uZSkudG9MaXN0KCkKICAgICAgICAgIDogY29uc3QgPEV4cHJlc3Npb24+W107CiAgfQoKICB2aXNpdFR5cGVQYXJhbWV0ZXIoVHlwZVBhcmFtZXRlciBub2RlKSB7CiAgICBUeXBlUGFyYW1ldGVyIG5ld05vZGUgPSB0eXBlUGFyYW1zW25vZGVdOwogICAgaWYgKG5ld05vZGUgPT0gbnVsbCkgewogICAgICBuZXdOb2RlID0gbmV3IFR5cGVQYXJhbWV0ZXIobm9kZS5uYW1lKTsKICAgICAgdHlwZVN1YnN0aXR1dGlvbltub2RlXSA9IG5ldyBUeXBlUGFyYW1ldGVyVHlwZShuZXdOb2RlKTsKICAgIH0KICAgIG5ld05vZGUuYm91bmQgPSB2aXNpdFR5cGUobm9kZS5ib3VuZCk7CiAgICBpZiAobm9kZS5kZWZhdWx0VHlwZSAhPSBudWxsKSB7CiAgICAgIG5ld05vZGUuZGVmYXVsdFR5cGUgPSB2aXNpdFR5cGUobm9kZS5kZWZhdWx0VHlwZSk7CiAgICB9CiAgICByZXR1cm4gbmV3Tm9kZQogICAgICAuLmFubm90YXRpb25zID0gY2xvbmVBbm5vdGF0aW9ucyAmJiAhbm9kZS5hbm5vdGF0aW9ucy5pc0VtcHR5CiAgICAgICAgICA/IG5vZGUuYW5ub3RhdGlvbnMubWFwKGNsb25lKS50b0xpc3QoKQogICAgICAgICAgOiBjb25zdCA8RXhwcmVzc2lvbj5bXQogICAgICAuLmZsYWdzID0gbm9kZS5mbGFnczsKICB9CgogIFRyZWVOb2RlIGNsb25lRnVuY3Rpb25Ob2RlQm9keShGdW5jdGlvbk5vZGUgbm9kZSkgewogICAgYm9vbCBzYXZlZENsb25lQW5ub3RhdGlvbnMgPSB0aGlzLmNsb25lQW5ub3RhdGlvbnM7CiAgICB0cnkgewogICAgICB0aGlzLmNsb25lQW5ub3RhdGlvbnMgPSB0cnVlOwogICAgICByZXR1cm4gY2xvbmVPcHRpb25hbChub2RlLmJvZHkpOwogICAgfSBmaW5hbGx5IHsKICAgICAgdGhpcy5jbG9uZUFubm90YXRpb25zID0gc2F2ZWRDbG9uZUFubm90YXRpb25zOwogICAgfQogIH0KCiAgdmlzaXRGdW5jdGlvbk5vZGUoRnVuY3Rpb25Ob2RlIG5vZGUpIHsKICAgIHZhciB0eXBlUGFyYW1ldGVycyA9IG5vZGUudHlwZVBhcmFtZXRlcnMubWFwKGNsb25lKS50b0xpc3QoKTsKICAgIHZhciBwb3NpdGlvbmFsID0gbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5tYXAoY2xvbmUpLnRvTGlzdCgpOwogICAgdmFyIG5hbWVkID0gbm9kZS5uYW1lZFBhcmFtZXRlcnMubWFwKGNsb25lKS50b0xpc3QoKTsKICAgIHJldHVybiBuZXcgRnVuY3Rpb25Ob2RlKGNsb25lRnVuY3Rpb25Ob2RlQm9keShub2RlKSwKICAgICAgICB0eXBlUGFyYW1ldGVyczogdHlwZVBhcmFtZXRlcnMsCiAgICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnM6IHBvc2l0aW9uYWwsCiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzOiBuYW1lZCwKICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50OiBub2RlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICAgICAgcmV0dXJuVHlwZTogdmlzaXRUeXBlKG5vZGUucmV0dXJuVHlwZSksCiAgICAgICAgYXN5bmNNYXJrZXI6IG5vZGUuYXN5bmNNYXJrZXIsCiAgICAgICAgZGFydEFzeW5jTWFya2VyOiBub2RlLmRhcnRBc3luY01hcmtlcikKICAgICAgLi5maWxlT2Zmc2V0ID0gX2Nsb25lRmlsZU9mZnNldChub2RlLmZpbGVPZmZzZXQpCiAgICAgIC4uZmlsZUVuZE9mZnNldCA9IF9jbG9uZUZpbGVPZmZzZXQobm9kZS5maWxlRW5kT2Zmc2V0KTsKICB9CgogIHZpc2l0QXJndW1lbnRzKEFyZ3VtZW50cyBub2RlKSB7CiAgICByZXR1cm4gbmV3IEFyZ3VtZW50cyhub2RlLnBvc2l0aW9uYWwubWFwKGNsb25lKS50b0xpc3QoKSwKICAgICAgICB0eXBlczogbm9kZS50eXBlcy5tYXAodmlzaXRUeXBlKS50b0xpc3QoKSwKICAgICAgICBuYW1lZDogbm9kZS5uYW1lZC5tYXAoY2xvbmUpLnRvTGlzdCgpKTsKICB9CgogIHZpc2l0TmFtZWRFeHByZXNzaW9uKE5hbWVkRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gbmV3IE5hbWVkRXhwcmVzc2lvbihub2RlLm5hbWUsIGNsb25lKG5vZGUudmFsdWUpKTsKICB9CgogIGRlZmF1bHRCYXNpY0xpdGVyYWwoQmFzaWNMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICB9CgogIGRlZmF1bHRFeHByZXNzaW9uKEV4cHJlc3Npb24gbm9kZSkgewogICAgdGhyb3cgJ1VuaW1wbGVtZW50ZWQgY2xvbmUgZm9yIEtlcm5lbCBleHByZXNzaW9uOiAkbm9kZSc7CiAgfQoKICBkZWZhdWx0SW5pdGlhbGl6ZXIoSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgdGhyb3cgJ1VuaW1wbGVtZW50ZWQgY2xvbmUgZm9yIEtlcm5lbCBpbml0aWFsaXplcjogJG5vZGUnOwogIH0KCiAgZGVmYXVsdE1lbWJlcihNZW1iZXIgbm9kZSkgewogICAgdGhyb3cgJ1VuaW1wbGVtZW50ZWQgY2xvbmUgZm9yIEtlcm5lbCBtZW1iZXI6ICRub2RlJzsKICB9CgogIGRlZmF1bHRTdGF0ZW1lbnQoU3RhdGVtZW50IG5vZGUpIHsKICAgIHRocm93ICdVbmltcGxlbWVudGVkIGNsb25lIGZvciBLZXJuZWwgc3RhdGVtZW50OiAkbm9kZSc7CiAgfQoKICBkZWZhdWx0VHJlZU5vZGUoVHJlZU5vZGUgbm9kZSkgewogICAgdGhyb3cgJ0Nsb25pbmcgS2VybmVsIG5vbi1tZW1iZXJzIGlzIG5vdCBzdXBwb3J0ZWQuICAnCiAgICAgICAgJ1RyaWVkIGNsb25pbmcgJG5vZGUnOwogIH0KCiAgdmlzaXRBc3NlcnRJbml0aWFsaXplcihBc3NlcnRJbml0aWFsaXplciBub2RlKSB7CiAgICByZXR1cm4gbmV3IEFzc2VydEluaXRpYWxpemVyKGNsb25lKG5vZGUuc3RhdGVtZW50KSk7CiAgfQoKICB2aXNpdENoZWNrTGlicmFyeUlzTG9hZGVkKENoZWNrTGlicmFyeUlzTG9hZGVkIG5vZGUpIHsKICAgIHJldHVybiBuZXcgQ2hlY2tMaWJyYXJ5SXNMb2FkZWQobm9kZS5pbXBvcnQpOwogIH0KCiAgdmlzaXRDb21iaW5hdG9yKENvbWJpbmF0b3Igbm9kZSkgewogICAgcmV0dXJuIGRlZmF1bHRUcmVlTm9kZShub2RlKTsKICB9CgogIHZpc2l0RmllbGRJbml0aWFsaXplcihGaWVsZEluaXRpYWxpemVyIG5vZGUpIHsKICAgIHJldHVybiBuZXcgRmllbGRJbml0aWFsaXplci5ieVJlZmVyZW5jZSgKICAgICAgICBub2RlLmZpZWxkUmVmZXJlbmNlLCBjbG9uZShub2RlLnZhbHVlKSk7CiAgfQoKICB2aXNpdEluc3RhbnRpYXRpb24oSW5zdGFudGlhdGlvbiBub2RlKSB7CiAgICByZXR1cm4gbmV3IEluc3RhbnRpYXRpb24oCiAgICAgICAgY2xvbmUobm9kZS5leHByZXNzaW9uKSwgbm9kZS50eXBlQXJndW1lbnRzLm1hcCh2aXNpdFR5cGUpLnRvTGlzdCgpKTsKICB9CgogIHZpc2l0SW52YWxpZEluaXRpYWxpemVyKEludmFsaWRJbml0aWFsaXplciBub2RlKSB7CiAgICByZXR1cm4gbmV3IEludmFsaWRJbml0aWFsaXplcigpOwogIH0KCiAgdmlzaXRMaWJyYXJ5RGVwZW5kZW5jeShMaWJyYXJ5RGVwZW5kZW5jeSBub2RlKSB7CiAgICByZXR1cm4gZGVmYXVsdFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgdmlzaXRMaWJyYXJ5UGFydChMaWJyYXJ5UGFydCBub2RlKSB7CiAgICByZXR1cm4gZGVmYXVsdFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgdmlzaXRMb2FkTGlicmFyeShMb2FkTGlicmFyeSBub2RlKSB7CiAgICByZXR1cm4gbmV3IExvYWRMaWJyYXJ5KG5vZGUuaW1wb3J0KTsKICB9CgogIHZpc2l0TG9jYWxJbml0aWFsaXplcihMb2NhbEluaXRpYWxpemVyIG5vZGUpIHsKICAgIHJldHVybiBuZXcgTG9jYWxJbml0aWFsaXplcihjbG9uZShub2RlLnZhcmlhYmxlKSk7CiAgfQoKICB2aXNpdENvbXBvbmVudChDb21wb25lbnQgbm9kZSkgewogICAgcmV0dXJuIGRlZmF1bHRUcmVlTm9kZShub2RlKTsKICB9CgogIHZpc2l0UmVkaXJlY3RpbmdJbml0aWFsaXplcihSZWRpcmVjdGluZ0luaXRpYWxpemVyIG5vZGUpIHsKICAgIHJldHVybiBuZXcgUmVkaXJlY3RpbmdJbml0aWFsaXplci5ieVJlZmVyZW5jZSgKICAgICAgICBub2RlLnRhcmdldFJlZmVyZW5jZSwgY2xvbmUobm9kZS5hcmd1bWVudHMpKTsKICB9CgogIHZpc2l0U3VwZXJJbml0aWFsaXplcihTdXBlcklu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cnQnIHNob3cgU3Vic3RpdHV0aW9uLCBzdWJzdGl0dXRlOwoKaW1wb3J0ICcuLi90eXBlX2Vudmlyb25tZW50LmRhcnQnIHNob3cgVHlwZUVudmlyb25tZW50OwoKaW1wb3J0ICcuLi91dGlsL2dyYXBoLmRhcnQnIHNob3cgR3JhcGgsIGNvbXB1dGVTdHJvbmdDb21wb25lbnRzOwoKaW1wb3J0ICcuLi92aXNpdG9yLmRhcnQnIHNob3cgRGFydFR5cGVWaXNpdG9yOwoKY2xhc3MgVHlwZVZhcmlhYmxlR3JhcGggZXh0ZW5kcyBHcmFwaDxpbnQ+IHsKICBMaXN0PGludD4gdmVydGljZXM7CiAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVyczsKICBMaXN0PERhcnRUeXBlPiBib3VuZHM7CgogIC8vIGBlZGdlc1tpXWAgaXMgdGhlIGxpc3Qgb2YgaW5kaWNlcyBvZiB0eXBlIHZhcmlhYmxlcyB0aGF0IHJlZmVyZW5jZSB0aGUgdHlwZQogIC8vIHZhcmlhYmxlIHdpdGggdGhlIGluZGV4IGBpYCBpbiB0aGVpciBib3VuZHMuCiAgTGlzdDxMaXN0PGludD4+IGVkZ2VzOwoKICBUeXBlVmFyaWFibGVHcmFwaCh0aGlzLnR5cGVQYXJhbWV0ZXJzLCB0aGlzLmJvdW5kcykgewogICAgYXNzZXJ0KHR5cGVQYXJhbWV0ZXJzLmxlbmd0aCA9PSBib3VuZHMubGVuZ3RoKTsKCiAgICB2ZXJ0aWNlcyA9IG5ldyBMaXN0PGludD4odHlwZVBhcmFtZXRlcnMubGVuZ3RoKTsKICAgIE1hcDxUeXBlUGFyYW1ldGVyLCBpbnQ+IHR5cGVQYXJhbWV0ZXJJbmRpY2VzID0gPFR5cGVQYXJhbWV0ZXIsIGludD57fTsKICAgIGVkZ2VzID0gbmV3IExpc3Q8TGlzdDxpbnQ+Pih0eXBlUGFyYW1ldGVycy5sZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2ZXJ0aWNlcy5sZW5ndGg7IGkrKykgewogICAgICB2ZXJ0aWNlc1tpXSA9IGk7CiAgICAgIHR5cGVQYXJhbWV0ZXJJbmRpY2VzW3R5cGVQYXJhbWV0ZXJzW2ldXSA9IGk7CiAgICAgIGVkZ2VzW2ldID0gPGludD5bXTsKICAgIH0KCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHZlcnRpY2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgIE9jY3VycmVuY2VDb2xsZWN0b3JWaXNpdG9yIGNvbGxlY3RvciA9CiAgICAgICAgICBuZXcgT2NjdXJyZW5jZUNvbGxlY3RvclZpc2l0b3IodHlwZVBhcmFtZXRlcnMudG9TZXQoKSk7CiAgICAgIGNvbGxlY3Rvci52aXNpdChib3VuZHNbaV0pOwogICAgICBmb3IgKFR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlciBpbiBjb2xsZWN0b3Iub2NjdXJyZWQpIHsKICAgICAgICBlZGdlc1t0eXBlUGFyYW1ldGVySW5kaWNlc1t0eXBlUGFyYW1ldGVyXV0uYWRkKGkpOwogICAgICB9CiAgICB9CiAgfQoKICBJdGVyYWJsZTxpbnQ+IG5laWdoYm9yc09mKGludCBpbmRleCkgewogICAgcmV0dXJuIGVkZ2VzW2luZGV4XTsKICB9Cn0KCmNsYXNzIE9jY3VycmVuY2VDb2xsZWN0b3JWaXNpdG9yIGV4dGVuZHMgRGFydFR5cGVWaXNpdG9yIHsKICBmaW5hbCBTZXQ8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnM7CiAgU2V0PFR5cGVQYXJhbWV0ZXI+IG9jY3VycmVkID0gbmV3IFNldDxUeXBlUGFyYW1ldGVyPigpOwoKICBPY2N1cnJlbmNlQ29sbGVjdG9yVmlzaXRvcih0aGlzLnR5cGVQYXJhbWV0ZXJzKTsKCiAgdmlzaXQoRGFydFR5cGUgbm9kZSkgPT4gbm9kZS5hY2NlcHQodGhpcyk7CgogIHZpc2l0TmFtZWRUeXBlKE5hbWVkVHlwZSBub2RlKSB7CiAgICBub2RlLnR5cGUuYWNjZXB0KHRoaXMpOwogIH0KCiAgdmlzaXRJbnZhbGlkVHlwZShJbnZhbGlkVHlwZSBub2RlKTsKICB2aXNpdER5bmFtaWNUeXBlKER5bmFtaWNUeXBlIG5vZGUpOwogIHZpc2l0Vm9pZFR5cGUoVm9pZFR5cGUgbm9kZSk7CgogIHZpc2l0SW50ZXJmYWNlVHlwZShJbnRlcmZhY2VUeXBlIG5vZGUpIHsKICAgIGZvciAoRGFydFR5cGUgYXJndW1lbnQgaW4gbm9kZS50eXBlQXJndW1lbnRzKSB7CiAgICAgIGFyZ3VtZW50LmFjY2VwdCh0aGlzKTsKICAgIH0KICB9CgogIHZpc2l0VHlwZWRlZlR5cGUoVHlwZWRlZlR5cGUgbm9kZSkgewogICAgZm9yIChEYXJ0VHlwZSBhcmd1bWVudCBpbiBub2RlLnR5cGVBcmd1bWVudHMpIHsKICAgICAgYXJndW1lbnQuYWNjZXB0KHRoaXMpOwogICAgfQogIH0KCiAgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIG5vZGUpIHsKICAgIGZvciAoVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyIGluIG5vZGUudHlwZVBhcmFtZXRlcnMpIHsKICAgICAgdHlwZVBhcmFtZXRlci5ib3VuZC5hY2NlcHQodGhpcyk7CiAgICAgIHR5cGVQYXJhbWV0ZXIuZGVmYXVsdFR5cGU/LmFjY2VwdCh0aGlzKTsKICAgIH0KICAgIGZvciAoRGFydFR5cGUgcGFyYW1ldGVyIGluIG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMpIHsKICAgICAgcGFyYW1ldGVyLmFjY2VwdCh0aGlzKTsKICAgIH0KICAgIGZvciAoTmFtZWRUeXBlIG5hbWVkUGFyYW1ldGVyIGluIG5vZGUubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgIG5hbWVkUGFyYW1ldGVyLnR5cGUuYWNjZXB0KHRoaXMpOwogICAgfQogICAgbm9kZS5yZXR1cm5UeXBlLmFjY2VwdCh0aGlzKTsKICB9CgogIHZpc2l0VHlwZVBhcmFtZXRlclR5cGUoVHlwZVBhcmFtZXRlclR5cGUgbm9kZSkgewogICAgaWYgKHR5cGVQYXJhbWV0ZXJzLmNvbnRhaW5zKG5vZGUucGFyYW1ldGVyKSkgewogICAgICBvY2N1cnJlZC5hZGQobm9kZS5wYXJhbWV0ZXIpOwogICAgfQogIH0KfQoKRGFydFR5cGUgaW5zdGFudGlhdGVUb0JvdW5kcyhEYXJ0VHlwZSB0eXBlLCBDbGFzcyBvYmplY3RDbGFzcykgewogIGlmICh0eXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgIGZvciAodmFyIHR5cGVBcmd1bWVudCBpbiB0eXBlLnR5cGVBcmd1bWVudHMpIHsKICAgICAgLy8gSWYgYXQgbGVhc3Qgb25lIG9mIHRoZSBhcmd1bWVudHMgaXMgbm90IGR5bmFtaWMsIHdlIGFzc3VtZSB0aGF0IHRoZQogICAgICAvLyB0eXBlIGlzIG5vdCByYXcgYW5kIGRvZXMgbm90IG5lZWQgaW5zdGFudGlhdGlvbiBvZiBpdHMgdHlwZSBwYXJhbWV0ZXJzCiAgICAgIC8vIHRvIHRoZWlyIGJvdW5kcy4KICAgICAgaWYgKHR5cGVBcmd1bWVudCBpcyEgRHluYW1pY1R5cGUpIHsKICAgICAgICByZXR1cm4gdHlwZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlLmJ5UmVmZXJlbmNlKHR5cGUuY2xhc3NOYW1lLAogICAgICAgIGNhbGN1bGF0ZUJvdW5kcyh0eXBlLmNsYXNzTm9kZS50eXBlUGFyYW1ldGVycywgb2JqZWN0Q2xhc3MpKTsKICB9CiAgaWYgKHR5cGUgaXMgVHlwZWRlZlR5cGUpIHsKICAgIGZvciAodmFyIHR5cGVBcmd1bWVudCBpbiB0eXBlLnR5cGVBcmd1bWVudHMpIHsKICAgICAgaWYgKHR5cGVBcmd1bWVudCBpcyEgRHluYW1pY1R5cGUpIHsKICAgICAgICByZXR1cm4gdHlwZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBUeXBlZGVmVHlwZS5ieVJlZmVyZW5jZSh0eXBlLnR5cGVkZWZSZWZlcmVuY2UsCiAgICAgICAgY2FsY3VsYXRlQm91bmRzKHR5cGUudHlwZWRlZk5vZGUudHlwZVBhcmFtZXRlcnMsIG9iamVjdENsYXNzKSk7CiAgfQogIHJldHVybiB0eXBlOwp9CgovLy8gQ2FsY3VsYXRlcyBib3VuZHMgdG8gYmUgcHJvdmlkZWQgYXMgdHlwZSBhcmd1bWVudHMgaW4gcGxhY2Ugb2YgbWlzc2luZyB0eXBlCi8vLyBhcmd1bWVudHMgb24gcmF3IHR5cGVzIHdpdGggdGhlIGdpdmVuIHR5cGUgcGFyYW1ldGVycy4KLy8vCi8vLyBTZWUgdGhlIFtkZXNjcmlwdGlvbl0KLy8vIChodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9ibG9iL21hc3Rlci9kb2NzL2xhbmd1YWdlL2luZm9ybWFsL2luc3RhbnRpYXRlLXRvLWJvdW5kLm1kKQovLy8gb2YgdGhlIGFsZ29yaXRobSBmb3IgZGV0YWlscy4KTGlzdDxEYXJ0VHlwZT4gY2FsY3VsYXRlQm91bmRzKAogICAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycywgQ2xhc3Mgb2JqZWN0Q2xhc3MpIHsKICBMaXN0PERhcnRUeXBlPiBib3VuZHMgPSBuZXcgTGlzdDxEYXJ0VHlwZT4odHlwZVBhcmFtZXRlcnMubGVuZ3RoKTsKICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICBEYXJ0VHlwZSBib3VuZCA9IHR5cGVQYXJhbWV0ZXJzW2ldLmJvdW5kOwogICAgaWYgKGJvdW5kID09IG51bGwpIHsKICAgICAgYm91bmQgPSBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgfSBlbHNlIGlmIChib3VuZCBpcyBJbnRlcmZhY2VUeXBlICYmIGJvdW5kLmNsYXNzTm9kZSA9PSBvYmplY3RDbGFzcykgewogICAgICBEYXJ0VHlwZSBkZWZhdWx0VHlwZSA9IHR5cGVQYXJhbWV0ZXJzW2ldLmRlZmF1bHRUeXBlOwogICAgICBpZiAoIShkZWZhdWx0VHlwZSBpcyBJbnRlcmZhY2VUeXBlICYmCiAgICAgICAgICBkZWZhdWx0VHlwZS5jbGFzc05vZGUgPT0gb2JqZWN0Q2xhc3MpKSB7CiAgICAgICAgYm91bmQgPSBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgICB9CiAgICB9CiAgICBib3VuZHNbaV0gPSBib3VuZDsKICB9CgogIFR5cGVWYXJpYWJsZUdyYXBoIGdyYXBoID0gbmV3IFR5cGVWYXJpYWJsZUdyYXBoKHR5cGVQYXJhbWV0ZXJzLCBib3VuZHMpOwogIExpc3Q8TGlzdDxpbnQ+PiBzdHJvbmdseUNvbm5lY3RlZCA9IGNvbXB1dGVTdHJvbmdDb21wb25lbnRzKGdyYXBoKTsKICBmb3IgKExpc3Q8aW50PiBjb21wb25lbnQgaW4gc3Ryb25nbHlDb25uZWN0ZWQpIHsKICAgIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gdXBwZXJCb3VuZHMgPSA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+e307CiAgICBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IGxvd2VyQm91bmRzID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogICAgZm9yIChpbnQgdHlwZVBhcmFtZXRlckluZGV4IGluIGNvbXBvbmVudCkgewogICAgICB1cHBlckJvdW5kc1t0eXBlUGFyYW1ldGVyc1t0eXBlUGFyYW1ldGVySW5kZXhdXSA9IGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICAgIGxvd2VyQm91bmRzW3R5cGVQYXJhbWV0ZXJzW3R5cGVQYXJhbWV0ZXJJbmRleF1dID0gY29uc3QgQm90dG9tVHlwZSgpOwogICAgfQogICAgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbiA9CiAgICAgICAgU3Vic3RpdHV0aW9uLmZyb21VcHBlckFuZExvd2VyQm91bmRzKHVwcGVyQm91bmRzLCBsb3dlckJvdW5kcyk7CiAgICBmb3IgKGludCB0eXBlUGFyYW1ldGVySW5kZXggaW4gY29tcG9uZW50KSB7CiAgICAgIGJvdW5kc1t0eXBlUGFyYW1ldGVySW5kZXhdID0KICAgICAgICAgIHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShib3VuZHNbdHlwZVBhcmFtZXRlckluZGV4XSk7CiAgICB9CiAgfQoKICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IHVwcGVyQm91bmRzID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogICAgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBsb3dlckJvdW5kcyA9IDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fTsKICAgIHVwcGVyQm91bmRzW3R5cGVQYXJhbWV0ZXJzW2ldXSA9IGJvdW5kc1tpXTsKICAgIGxvd2VyQm91bmRzW3R5cGVQYXJhbWV0ZXJzW2ldXSA9IGNvbnN0IEJvdHRvbVR5cGUoKTsKICAgIFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb24gPQogICAgICAgIFN1YnN0aXR1dGlvbi5mcm9tVXBwZXJBbmRMb3dlckJvdW5kcyh1cHBlckJvdW5kcywgbG93ZXJCb3VuZHMpOwogICAgZm9yIChpbnQgaiA9IDA7IGogPCB0eXBlUGFyYW1ldGVycy5sZW5ndGg7IGorKykgewogICAgICBib3VuZHNbal0gPSBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoYm91bmRzW2pdKTsKICAgIH0KICB9CgogIHJldHVybiBib3VuZHM7Cn0KCmNsYXNzIFR5cGVBcmd1bWVudElzc3VlIHsKICAvLyBUaGUgdHlwZSBhcmd1bWVudCB0aGF0IHZpb2xhdGVkIHRoZSBib3VuZC4KICBmaW5hbCBEYXJ0VHlwZSBhcmd1bWVudDsKCiAgLy8gVGhlIHR5cGUgcGFyYW1ldGVyIHdpdGggdGhlIGJvdW5kIHRoYXQgd2FzIHZpb2xhdGVkLgogIGZpbmFsIFR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlcjsKCiAgLy8gVGhlIGVuY2xvc2luZyB0eXBlIG9mIHRoZSBpc3N1ZSwgdGhhdCBpcywgdGhlIG9uZSB3aXRoIFt0eXBlUGFyYW1ldGVyXS4KICBmaW5hbCBEYXJ0VHlwZSBlbmNsb3NpbmdUeXBlOwoKICBUeXBlQXJndW1lbnRJc3N1ZSh0aGlzLmFyZ3VtZW50LCB0aGlzLnR5cGVQYXJhbWV0ZXIsIHRoaXMuZW5jbG9zaW5nVHlwZSk7Cn0KCi8vIFRPRE8oZG1pdHJ5YXMpOiAgUmVtb3ZlIFt0eXBlZGVmSW5zdGFudGlhdGlvbnNdIHdoZW4gdHlwZSBhcmd1bWVudHMgcGFzc2VkIHRvCi8vIHR5cGVkZWZzIGFyZSBwcmVzZXJ2ZWQgaW4gdGhlIEtlcm5lbCBvdXRwdXQuCkxpc3Q8VHlwZUFyZ3VtZW50SXNzdWU+IGZpbmRUeXBlQXJndW1lbnRJc3N1ZXMoCiAgICBEYXJ0VHlwZSB0eXBlLCBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50LAogICAge2Jvb2wgYWxsb3dTdXBlckJvdW5kZWQgPSBmYWxzZX0pIHsKICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHZhcmlhYmxlczsKICBMaXN0PERhcnRUeXBlPiBhcmd1bWVudHM7CiAgTGlzdDxUeXBlQXJndW1lbnRJc3N1ZT4gdHlwZWRlZlJoc1Jlc3VsdDsKCiAgaWYgKHR5cGUgaXMgRnVuY3Rpb25UeXBlICYmIHR5cGUudHlwZWRlZlR5cGUgIT0gbnVsbCkgewogICAgLy8gW3R5cGVdIGlzIGEgZnVuY3Rpb24gdHlwZSB0aGF0IGlzIGFuIGFwcGxpY2F0aW9uIG9mIGEgcGFyYW1ldHJpemVkCiAgICAvLyB0eXBlZGVmLiAgV2UgbmVlZCB0byBjaGVjayBib3RoIHRoZSBsLmgucy4gYW5kIHRoZSByLmgucy4gb2YgdGhlCiAgICAvLyBkZWZpbml0aW9uIGluIHRoYXQgY2FzZS4gIEZvciBkZXRhaWxzLCBzZWUgW2xpbmtdCiAgICAvLyAoaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9zZGsvYmxvYi9tYXN0ZXIvZG9jcy9sYW5ndWFnZS9pbmZvcm1hbC9zdXBlci1ib3VuZGVkLXR5cGVzLm1kKS4KICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSB0eXBlOwogICAgRnVuY3Rpb25UeXBlIGNsb25lZCA9IG5ldyBGdW5jdGlvblR5cGUoCiAgICAgICAgZnVuY3Rpb25UeXBlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLCBmdW5jdGlvblR5cGUucmV0dXJuVHlwZSwKICAgICAgICBuYW1lZFBhcmFtZXRlcnM6IGZ1bmN0aW9uVHlwZS5uYW1lZFBhcmFtZXRlcnMsCiAgICAgICAgdHlwZVBhcmFtZXRlcnM6IGZ1bmN0aW9uVHlwZS50eXBlUGFyYW1ldGVycywKICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50OiBmdW5jdGlvblR5cGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICB0eXBlZGVmVHlwZTogbnVsbCk7CiAgICB0eXBlZGVmUmhzUmVzdWx0ID0gZmluZFR5cGVBcmd1bWVudElzc3VlcyhjbG9uZWQsIHR5cGVFbnZpcm9ubWVudCwKICAgICAgICBhbGxvd1N1cGVyQm91bmRlZDogdHJ1ZSk7CiAgICB0eXBlID0gZnVuY3Rpb25UeXBlLnR5cGVkZWZUeXBlOwogIH0KCiAgaWYgKHR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgdmFyaWFibGVzID0gdHlwZS5jbGFzc05vZGUudHlwZVBhcmFtZXRlcnM7CiAgICBhcmd1bWVudHMgPSB0eXBlLnR5cGVBcmd1bWVudHM7CiAgfSBlbHNlIGlmICh0eXBlIGlzIFR5cGVkZWZUeXBlKSB7CiAgICB2YXJpYWJsZXMgPSB0eXBlLnR5cGVkZWZOb2RlLnR5cGVQYXJhbWV0ZXJzOwogICAgYXJndW1lbnRzID0gdHlwZS50eXBlQXJndW1lbnRzOwogIH0gZWxzZSBpZiAodHlwZSBpcyBGdW5jdGlvblR5cGUpIHsKICAgIExpc3Q8VHlwZUFyZ3VtZW50SXNzdWU+IHJlc3VsdCA9IDxUeXBlQXJndW1lbnRJc3N1ZT5bXTsKICAgIGZvciAoVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIgaW4gdHlwZS50eXBlUGFyYW1ldGVycykgewogICAgICByZXN1bHQuYWRkQWxsKGZpbmRUeXBlQXJndW1lbnRJc3N1ZXMocGFyYW1ldGVyLmJvdW5kLCB0eXBlRW52aXJvbm1lbnQsCiAgICAgICAgICAgICAgYWxsb3dTdXBlckJvdW5kZWQ6IHRydWUpID8/CiAgICAgICAgICBjb25zdCA8VHlwZUFyZ3VtZW50SXNzdWU+W10pOwogICAgfQogICAgZm9yIChEYXJ0VHlwZSBmb3JtYWwgaW4gdHlwZS5wb3NpdGlvbmFsUGFyYW1ldGVycykgewogICAgICByZXN1bHQuYWRkQWxsKGZpbmRUeXBlQXJndW1lbnRJc3N1ZXMoZm9ybWFsLCB0eXBlRW52aXJvbm1lbnQsCiAgICAgICAgICAgICAgYWxsb3dTdXBlckJvdW5kZWQ6IHRydWUpID8/CiAgICAgICAgICBjb25zdCA8VHlwZUFyZ3VtZW50SXNzdWU+W10pOwogICAgfQogICAgZm9yIChOYW1lZFR5cGUgbmFtZWQgaW4gdHlwZS5uYW1lZFBhcmFtZXRlcnMpIHsKICAgICAgcmVzdWx0LmFkZEFsbChmaW5kVHlwZUFyZ3VtZW50SXNzdWVzKG5hbWVkLnR5cGUsIHR5cGVFbnZpcm9ubWVudCwKICAgICAgICAgICAgICBhbGxvd1N1cGVyQm91bmRlZDogdHJ1ZSkgPz8KICAgICAgICAgIGNvbnN0IDxUeXBlQXJndW1lbnRJc3N1ZT5bXSk7CiAgICB9CiAgICByZXN1bHQuYWRkQWxsKGZpbmRUeXBlQXJndW1lbnRJc3N1ZXModHlwZS5yZXR1cm5UeXBlLCB0eXBlRW52aXJvbm1lbnQsCiAgICAgICAgICAgIGFsbG93U3VwZXJCb3VuZGVkOiB0cnVlKSA/PwogICAgICAgIGNvbnN0IDxUeXBlQXJndW1lbnRJc3N1ZT5bXSk7CiAgICByZXR1cm4gcmVzdWx0LmlzRW1wdHkgPyBudWxsIDogcmVzdWx0OwogIH0gZWxzZSB7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIGlmICh2YXJpYWJsZXMgPT0gbnVsbCkgcmV0dXJuIG51bGw7CgogIExpc3Q8VHlwZUFyZ3VtZW50SXNzdWU+IHJlc3VsdDsKICBMaXN0PFR5cGVBcmd1bWVudElzc3VlPiBhcmd1bWVudHNSZXN1bHQ7CgogIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gc3Vic3RpdHV0aW9uTWFwID0KICAgICAgbmV3IE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4uZnJvbUl0ZXJhYmxlcyh2YXJpYWJsZXMsIGFyZ3VtZW50cyk7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKICAgIERhcnRUeXBlIGFyZ3VtZW50ID0gYXJndW1lbnRzW2ldOwogICAgaWYgKGFyZ3VtZW50IGlzIEZ1bmN0aW9uVHlwZSAmJiBhcmd1bWVudC50eXBlUGFyYW1ldGVycy5sZW5ndGggPiAwKSB7CiAgICAgIC8vIEdlbmVyaWMgZnVuY3Rpb24gdHlwZXMgYXJlbid0IGFsbG93ZWQgYXMgdHlwZSBhcmd1bWVudHMgZWl0aGVyLgogICAgICByZXN1bHQgPz89IDxUeXBlQXJndW1lbnRJc3N1ZT5bXTsKICAgICAgcmVzdWx0LmFkZChuZXcgVHlwZUFyZ3VtZW50SXNzdWUoYXJndW1lbnQsIHZhcmlhYmxlc1tpXSwgdHlwZSkpOwogICAgfSBlbHNlIGlmICghdHlwZUVudmlyb25tZW50LmlzU3VidHlwZU9mKAogICAgICAgIGFyZ3VtZW50LCBzdWJzdGl0dXRlKHZhcmlhYmxlc1tpXS5ib3VuZCwgc3Vic3RpdHV0aW9uTWFwKSkpIHsKICAgICAgcmVzdWx0ID8/PSA8VHlwZUFyZ3VtZW50SXNzdWU+W107CiAgICAgIHJlc3VsdC5hZGQobmV3IFR5cGVBcmd1bWVudElzc3VlKGFyZ3VtZW50LCB2YXJpYWJsZXNbaV0sIHR5cGUpKTsKICAgIH0KCiAgICBMaXN0PFR5cGVBcmd1bWVudElzc3VlPiBpc3N1ZXMgPSBmaW5kVHlwZUFyZ3VtZW50SXNzdWVzKAogICAgICAgIGFyZ3VtZW50LCB0eXBlRW52aXJvbm1lbnQsCiAgICAgICAgYWxsb3dTdXBlckJvdW5kZWQ6IHRydWUpOwogICAgaWYgKGlzc3VlcyAhPSBudWxsKSB7CiAgICAgIGFyZ3VtZW50c1Jlc3VsdCA/Pz0gPFR5cGVBcmd1bWVudElzc3VlPltdOwogICAgICBhcmd1bWVudHNSZXN1bHQuYWRkQWxsKGlzc3Vlcyk7CiAgICB9CiAgfQogIGlmIChhcmd1bWVudHNSZXN1bHQgIT0gbnVsbCkgewogICAgcmVzdWx0ID8/PSA8VHlwZUFyZ3VtZW50SXNzdWU+W107CiAgICByZXN1bHQuYWRkQWxsKGFyZ3VtZW50c1Jlc3VsdCk7CiAgfQogIGlmICh0eXBlZGVmUmhzUmVzdWx0ICE9IG51bGwpIHsKICAgIHJlc3VsdCA/Pz0gPFR5cGVBcmd1bWVudElzc3VlPltdOwogICAgcmVzdWx0LmFkZEFsbCh0eXBlZGVmUmhzUmVzdWx0KTsKICB9CgogIC8vIFt0eXBlXSBpcyByZWd1bGFyLWJvdW5kZWQuCiAgaWYgKHJlc3VsdCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICBpZiAoIWFsbG93U3VwZXJCb3VuZGVkKSByZXR1cm4gcmVzdWx0OwoKICByZXN1bHQgPSBudWxsOwogIHR5cGUgPSBjb252ZXJ0U3VwZXJCb3VuZGVkVG9SZWd1bGFyQm91bmRlZCh0eXBlRW52aXJvbm1lbnQsIHR5cGUpOwogIExpc3Q8RGFydFR5cGU+IGFyZ3VtZW50c1RvUmVwb3J0ID0gYXJndW1lbnRzLnRvTGlzdCgpOwogIGlmICh0eXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgIHZhcmlhYmxlcyA9IHR5cGUuY2xhc3NOb2RlLnR5cGVQYXJhbWV0ZXJzOwogICAgYXJndW1lbnRzID0gdHlwZS50eXBlQXJndW1lbnRzOwogIH0gZWxzZSBpZiAodHlwZSBpcyBUeXBlZGVmVHlwZSkgewogICAgdmFyaWFibGVzID0gdHlwZS50eXBlZGVmTm9kZS50eXBlUGFyYW1ldGVyczsKICAgIGFyZ3VtZW50cyA9IHR5cGUudHlwZUFyZ3VtZW50czsKICB9CiAgc3Vic3RpdHV0aW9uTWFwID0KICAgICAgbmV3IE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4uZnJvbUl0ZXJhYmxlcyh2YXJpYWJsZXMsIGFyZ3VtZW50cyk7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKICAgIERhcnRUeXBlIGFyZ3VtZW50ID0gYXJndW1lbnRzW2ldOwogICAgaWYgKGFyZ3VtZW50IGlzIEZ1bmN0aW9uVHlwZSAmJiBhcmd1bWVudC50eXBlUGFyYW1ldGVycy5sZW5ndGggPiAwKSB7CiAgICAgIC8vIEdlbmVyaWMgZnVuY3Rpb24gdHlwZXMgYXJlbid0IGFsbG93ZWQgYXMgdHlwZSBhcmd1bWVudHMgZWl0aGVyLgogICAgICByZXN1bHQgPz89IDxUeXBlQXJndW1lbnRJc3N1ZT5bXTsKICAgICAgcmVzdWx0CiAgICAgICAgICAuYWRkKG5ldyBUeXBlQXJndW1lbnRJc3N1ZShhcmd1bWVudHNUb1JlcG9ydFtpXSwgdmFyaWFibGVzW2ldLCB0eXBlKSk7CiAgICB9IGVsc2UgaWYgKCF0eXBlRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YoCiAgICAgICAgYXJndW1lbnQsIHN1YnN0aXR1dGUodmFyaWFibGVzW2ldLmJvdW5kLCBzdWJzdGl0dXRpb25NYXApKSkgewogICAgICByZXN1bHQgPz89IDxUeXBlQXJndW1lbnRJc3N1ZT5bXTsKICAgICAgcmVzdWx0CiAgICAgICAgICAuYWRkKG5ldyBUeXBlQXJndW1lbnRJc3N1ZShhcmd1bWVudHNUb1JlcG9ydFtpXSwgdmFyaWFibGVzW2ldLCB0eXBlKSk7CiAgICB9CiAgfQogIGlmIChhcmd1bWVudHNSZXN1bHQgIT0gbnVsbCkgewogICAgcmVzdWx0ID8/PSA8VHlwZUFyZ3VtZW50SXNzdWU+W107CiAgICByZXN1bHQuYWRkQWxsKGFyZ3VtZW50c1Jlc3VsdCk7CiAgfQogIGlmICh0eXBlZGVmUmhzUmVzdWx0ICE9IG51bGwpIHsKICAgIHJlc3VsdCA/Pz0gPFR5cGVBcmd1bWVudElzc3VlPltdOwogICAgcmVzdWx0LmFkZEFsbCh0eXBlZGVmUmhzUmVzdWx0KTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKLy8gVE9ETyhkbWl0cnlhcyk6ICBSZW1vdmUgW3R5cGVkZWZJbnN0YW50aWF0aW9uc10gd2hlbiB0eXBlIGFyZ3VtZW50cyBwYXNzZWQgdG8KLy8gdHlwZWRlZnMgYXJlIHByZXNlcnZlZCBpbiB0aGUgS2VybmVsIG91dHB1dC4KTGlzdDxUeXBlQXJndW1lbnRJc3N1ZT4gZmluZFR5cGVBcmd1bWVudElzc3Vlc0Zvckludm9jYXRpb24oCiAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHBhcmFtZXRlcnMsCiAgICBMaXN0PERhcnRUeXBlPiBhcmd1bWVudHMsCiAgICBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50LAogICAge01hcDxGdW5jdGlvblR5cGUsIExpc3Q8RGFydFR5cGU+PiB0eXBlZGVmSW5zdGFudGlhdGlvbnN9KSB7CiAgYXNzZXJ0KGFyZ3VtZW50cy5sZW5ndGggPT0gcGFyYW1ldGVycy5sZW5ndGgpOwogIExpc3Q8VHlwZUFyZ3VtZW50SXNzdWU+IHJlc3VsdDsKICB2YXIgc3Vic3RpdHV0aW9uTWFwID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogIGZvciAoaW50IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7CiAgICBzdWJzdGl0dXRpb25NYXBbcGFyYW1ldGVyc1tpXV0gPSBhcmd1bWVudHNbaV07CiAgfQogIGZvciAoaW50IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7CiAgICBEYXJ0VHlwZSBhcmd1bWVudCA9IGFyZ3VtZW50c1tpXTsKICAgIGlmIChhcmd1bWVudCBpcyBUeXBlUGFyYW1ldGVyVHlwZSAmJiBhcmd1bWVudC5wcm9tb3RlZEJvdW5kICE9IG51bGwpIHsKICAgICAgcmVzdWx0ID8/PSA8VHlwZUFyZ3VtZW50SXNzdWU+W107CiAgICAgIHJlc3VsdC5hZGQobmV3IFR5cGVBcmd1bWVudElzc3VlKGFyZ3VtZW50LCBwYXJhbWV0ZXJzW2ldLCBudWxsKSk7CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50IGlzIEZ1bmN0aW9uVHlwZSAmJiBhcmd1bWVudC50eXBlUGFyYW1ldGVycy5sZW5ndGggPiAwKSB7CiAgICAgIC8vIEdlbmVyaWMgZnVuY3Rpb24gdHlwZXMgYXJlbid0IGFsbG93ZWQgYXMgdHlwZSBhcmd1bWVudHMgZWl0aGVyLgogICAgICByZXN1bHQgPz89IDxUeXBlQXJndW1lbnRJc3N1ZT5bXTsKICAgICAgcmVzdWx0LmFkZChuZXcgVHlwZUFyZ3VtZW50SXNzdWUoYXJndW1lbnQsIHBhcmFtZXRlcnNbaV0sIG51bGwpKTsKICAgIH0gZWxzZSBpZiAoIXR5cGVFbnZpcm9ubWVudC5pc1N1YnR5cGVPZigKICAgICAgICBhcmd1bWVudCwgc3Vic3RpdHV0ZShwYXJhbWV0ZXJzW2ldLmJvdW5kLCBzdWJzdGl0dXRpb25NYXApKSkgewogICAgICByZXN1bHQgPz89IDxUeXBlQXJndW1lbnRJc3N1ZT5bXTsKICAgICAgcmVzdWx0LmFkZChuZXcgVHlwZUFyZ3VtZW50SXNzdWUoYXJndW1lbnQsIHBhcmFtZXRlcnNbaV0sIG51bGwpKTsKICAgIH0KCiAgICBMaXN0PFR5cGVBcmd1bWVudElzc3VlPiBpc3N1ZXMgPSBmaW5kVHlwZUFyZ3VtZW50SXNzdWVzKAogICAgICAgIGFyZ3VtZW50LCB0eXBlRW52aXJvbm1lbnQsCiAgICAgICAgYWxsb3dTdXBlckJvdW5kZWQ6IHRydWUpOwogICAgaWYgKGlzc3VlcyAhPSBudWxsKSB7CiAgICAgIHJlc3VsdCA/Pz0gPFR5cGVBcmd1bWVudElzc3VlPltdOwogICAgICByZXN1bHQuYWRkQWxsKGlzc3Vlcyk7CiAgICB9CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KClN0cmluZyBnZXRHZW5lcmljVHlwZU5hbWUoRGFydFR5cGUgdHlwZSkgewogIGlmICh0eXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgIHJldHVybiB0eXBlLmNsYXNzTm9kZS5uYW1lOwogIH0gZWxzZSBpZiAodHlwZSBpcyBUeXBlZGVmVHlwZSkgewogICAgcmV0dXJuIHR5cGUudHlwZWRlZk5vZGUubmFtZTsKICB9CiAgcmV0dXJuIHR5cGUudG9TdHJpbmcoKTsKfQoKLy8vIFJlcGxhY2VzIGFsbCBjb3ZhcmlhbnQgb2NjdXJyZW5jZXMgb2YgYGR5bmFtaWNgLCBgT2JqZWN0YCwgYW5kIGB2b2lkYCB3aXRoCi8vLyBbQm90dG9tVHlwZV0gYW5kIGFsbCBjb250cmF2YXJpYW50IG9jY3VycmVuY2VzIG9mIGBOdWxsYCBhbmQgW0JvdHRvbVR5cGVdCi8vLyB3aXRoIGBPYmplY3RgLgpEYXJ0VHlwZSBjb252ZXJ0U3VwZXJCb3VuZGVkVG9SZWd1bGFyQm91bmRlZCgKICAgIFR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQsIERhcnRUeXBlIHR5cGUsCiAgICB7Ym9vbCBpc0NvdmFyaWFudCA9IHRydWV9KSB7CiAgaWYgKCh0eXBlIGlzIER5bmFtaWNUeXBlIHx8CiAgICAgICAgICB0eXBlIGlzIFZvaWRUeXBlIHx8CiAgICAgICAgICBpc09iamVjdCh0eXBlRW52aXJvbm1lbnQsIHR5cGUpKSAmJgogICAgICBpc0NvdmFyaWFudCkgewogICAgcmV0dXJuIGNvbnN0IEJvdHRvbVR5cGUoKTsKICB9IGVsc2UgaWYgKCh0eXBlIGlzIEJvdHRvbVR5cGUgfHwgaXNOdWxsKHR5cGVFbnZpcm9ubWVudCwgdHlwZSkpICYmCiAgICAgICFpc0NvdmFyaWFudCkgewogICAgcmV0dXJuIHR5cGVFbnZpcm9ubWVudC5vYmplY3RUeXBlOwogIH0gZWxzZSBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlICYmIHR5cGUuY2xhc3NOb2RlLnR5cGVQYXJhbWV0ZXJzICE9IG51bGwpIHsKICAgIExpc3Q8RGFydFR5cGU+IHJlcGxhY2VkVHlwZUFyZ3VtZW50cyA9CiAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+KHR5cGUudHlwZUFyZ3VtZW50cy5sZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBsYWNlZFR5cGVBcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgcmVwbGFjZWRUeXBlQXJndW1lbnRzW2ldID0gY29udmVydFN1cGVyQm91bmRlZFRvUmVndWxhckJvdW5kZWQoCiAgICAgICAgICB0eXBlRW52aXJvbm1lbnQsIHR5cGUudHlwZUFyZ3VtZW50c1tpXSwKICAgICAgICAgIGlzQ292YXJpYW50OiBpc0NvdmFyaWFudCk7CiAgICB9CiAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUodHlwZS5jbGFzc05vZGUsIHJlcGxhY2VkVHlwZUFyZ3VtZW50cyk7CiAgfSBlbHNlIGlmICh0eXBlIGlzIFR5cGVkZWZUeXBlICYmIHR5cGUudHlwZWRlZk5vZGUudHlwZVBhcmFtZXRlcnMgIT0gbnVsbCkgewogICAgTGlzdDxEYXJ0VHlwZT4gcmVwbGFjZWRUeXBlQXJndW1lbnRzID0KICAgICAgICBuZXcgTGlzdDxEYXJ0VHlwZT4odHlwZS50eXBlQXJndW1lbnRzLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGxhY2VkVHlwZUFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewogICAgICByZXBsYWNlZFR5cGVBcmd1bWVudHNbaV0gPSBjb252ZXJ0U3VwZXJCb3VuZGVkVG9SZWd1bGFyQm91bmRlZCgKICAgICAgICAgIHR5cGVFbnZpcm9ubWVudCwgdHlwZS50eXBlQXJndW1lbnRzW2ldLAogICAgICAgICAgaXNDb3ZhcmlhbnQ6IGlzQ292YXJpYW50KTsKICAgIH0KICAgIHJldHVybiBuZXcgVHlwZWRlZlR5cGUodHlwZS50eXBlZGVmTm9kZSwgcmVwbGFjZWRUeXBlQXJndW1lbnRzKTsKICB9IGVsc2UgaWYgKHR5cGUgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICB2YXIgcmVwbGFjZWRSZXR1cm5UeXBlID0gY29udmVydFN1cGVyQm91bmRlZFRvUmVndWxhckJvdW5kZWQoCiAgICAgICAgdHlwZUVudmlyb25tZW50LCB0eXBlLnJldHVyblR5cGUsCiAgICAgICAgaXNDb3ZhcmlhbnQ6IGlzQ292YXJpYW50KTsKICAgIHZhciByZXBsYWNlZFBvc2l0aW9uYWxQYXJhbWV0ZXJzID0KICAgICAgICBuZXcgTGlzdDxEYXJ0VHlwZT4odHlwZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBsYWNlZFBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHJlcGxhY2VkUG9zaXRpb25hbFBhcmFtZXRlcnNbaV0gPSBjb252ZXJ0U3VwZXJCb3VuZGVkVG9SZWd1bGFyQm91bmRlZCgKICAgICAgICAgIHR5cGVFbnZpcm9ubWVudCwgdHlwZS5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXSwKICAgICAgICAgIGlzQ292YXJpYW50OiAhaXNDb3ZhcmlhbnQpOwogICAgfQogICAgdmFyIHJlcGxhY2VkTmFtZWRQYXJhbWV0ZXJzID0KICAgICAgICBuZXcgTGlzdDxOYW1lZFR5cGU+KHR5cGUubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGxhY2VkTmFtZWRQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHJlcGxhY2VkTmFtZWRQYXJhbWV0ZXJzW2ldID0gbmV3IE5hbWVkVHlwZSgKICAgICAgICAgIHR5cGUubmFtZWRQYXJhbWV0ZXJzW2ldLm5hbWUsCiAgICAgICAgICBjb252ZXJ0U3VwZXJCb3VuZGVkVG9SZWd1bGFyQm91bmRlZCgKICAgICAgICAgICAgICB0eXBlRW52aXJvbm1lbnQsIHR5cGUubmFtZWRQYXJhbWV0ZXJzW2ldLnR5cGUsCiAgICAgICAgICAgICAgaXNDb3ZhcmlhbnQ6ICFpc0NvdmFyaWFudCkpOwogICAgfQogICAgcmV0dXJuIG5ldyBGdW5jdGlvblR5cGUocmVwbGFjZWRQb3NpdGlvbmFsUGFyYW1ldGVycywgcmVwbGFjZWRSZXR1cm5UeXBlLAogICAgICAgIG5hbWVkUGFyYW1ldGVyczogcmVwbGFjZWROYW1lZFBhcmFtZXRlcnMsCiAgICAgICAgdHlwZVBhcmFtZXRlcnM6IHR5cGUudHlwZVBhcmFtZXRlcnMsCiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogdHlwZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50LAogICAgICAgIHR5cGVkZWZUeXBlOiB0eXBlLnR5cGVkZWZUeXBlKTsKICB9CiAgcmV0dXJuIHR5cGU7Cn0KCmJvb2wgaXNPYmplY3QoVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCwgRGFydFR5cGUgdHlwZSkgewogIHJldHVybiB0eXBlIGlzIEludGVyZmFjZVR5cGUgJiYKICAgICAgdHlwZS5jbGFzc05vZGUgPT0gdHlwZUVudmlyb25tZW50Lm9iamVjdFR5cGUuY2xhc3NOb2RlOwp9Cgpib29sIGlzTnVsbChUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50LCBEYXJ0VHlwZSB0eXBlKSB7CiAgcmV0dXJuIHR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJgogICAgICB0eXBlLmNsYXNzTm9kZSA9PSB0eXBlRW52aXJvbm1lbnQubnVsbFR5cGUuY2xhc3NOb2RlOwp9CgovLyBWYWx1ZSBzZXQgZm9yIHZhcmlhbmNlIG9mIGEgdHlwZSBwYXJhbWV0ZXIgWCBpbiBhIHR5cGUgdGVybSBULgpjbGFzcyBWYXJpYW5jZSB7CiAgLy8gVXNlZCB3aGVuIFggZG9lcyBub3Qgb2NjdXIgZnJlZSBpbiBULgogIHN0YXRpYyBjb25zdCBpbnQgdW5yZWxhdGVkID0gMDsKCiAgLy8gVXNlZCB3aGVuIFggb2NjdXJzIGZyZWUgaW4gVCwgYW5kIFUgPDogViBpbXBsaWVzIFtVL1hdVCA8OiBbVi9YXVQuCiAgc3RhdGljIGNvbnN0IGludCBjb3ZhcmlhbnQgPSAxOwoKICAvLyBVc2VkIHdoZW4gWCBvY2N1cnMgZnJlZSBpbiBULCBhbmQgVSA8OiBWIGltcGxpZXMgW1YvWF1UIDw6IFtVL1hdVC4KICBzdGF0aWMgY29uc3QgaW50IGNvbnRyYXZhcmlhbnQgPSAyOwoKICAvLyBVc2VkIHdoZW4gdGhlcmUgZXhpc3RzIGEgcGFpciBVIGFuZCBWIHN1Y2ggdGhhdCBVIDw6IFYsIGJ1dCBbVS9YXVQgYW5kCiAgLy8gW1YvWF1UIGFyZSBpbmNvbXBhcmFibGUuCiAgc3RhdGljIGNvbnN0IGludCBpbnZhcmlhbnQgPSAzOwoKICAvLyBWYXJpYW5jZSB2YWx1ZXMgZm9ybSBhIGxhdHRpY2Ugd2hlcmUgW3VucmVsYXRlZF0gaXMgdGhlIHRvcCwgW2ludmFyaWFudF0KICAvLyBpcyB0aGUgYm90dG9tLCBhbmQgW2NvdmFyaWFudF0gYW5kIFtjb250cmF2YXJpYW50XSBhcmUgaW5jb21wYXJhYmxlLgogIC8vIFttZWV0XSBjYWxjdWxhdGVzIHRoZSBtZWV0IG9mIHR3byBlbGVtZW50cyBvZiBzdWNoIGxhdHRpY2UuICBJdCBjYW4gYmUKICAvLyB1c2VkLCBmb3IgZXhhbXBsZSwgdG8gY2FsY3VsYXRlIHRoZSB2YXJpYW5jZSBvZiBhIHR5cGVkZWYgdHlwZSBwYXJhbWV0ZXIKICAvLyBpZiBpdCdzIGVuY291bnRlcmVkIG9uIHRoZSByLmgucy4gb2YgdGhlIHR5cGVkZWYgbXVsdGlwbGUgdGltZXMuCiAgc3RhdGljIGludCBtZWV0KGludCBhLCBpbnQgYikgPT4gYSB8IGI7CgogIC8vIENvbWJpbmVzIHZhcmlhbmNlcyBvZiBYIGluIFQgYW5kIFkgaW4gUyBpbnRvIHZhcmlhbmNlIG9mIFggaW4gW1kvVF1TLgogIC8vCiAgLy8gQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlczoKICAvLwogIC8vICogdmFyaWFuY2Ugb2YgWCBpbiBGdW5jdGlvbihYKSBpcyBbY29udHJhdmFyaWFudF0sIHZhcmlhbmNlIG9mIFkgaW4gTGlzdDxZPgogIC8vIGlzIFtjb3ZhcmlhbnRdLCBzbyB2YXJpYW5jZSBvZiBYIGluIExpc3Q8RnVuY3Rpb24oWCk+IGlzIFtjb250cmF2YXJpYW50XTsKICAvLwogIC8vICogdmFyaWFuY2Ugb2YgWCBpbiBMaXN0PFg+IGlzIFtjb3ZhcmlhbnRdLCB2YXJpYW5jZSBvZiBZIGluIEZ1bmN0aW9uKFkpIGlzCiAgLy8gW2NvbnRyYXZhcmlhbnRdLCBzbyB2YXJpYW5jZSBvZiBYIGluIEZ1bmN0aW9uKExpc3Q8WD4pIGlzIFtjb250cmF2YXJpYW50XTsKICAvLwogIC8vICogdmFyaWFuY2Ugb2YgWCBpbiBGdW5jdGlvbihYKSBpcyBbY29udHJhdmFyaWFudF0sIHZhcmlhbmNlIG9mIFkgaW4KICAvLyBGdW5jdGlvbihZKSBpcyBbY29udHJhdmFyaWFudF0sIHNvIHZhcmlhbmNlIG9mIFggaW4gRnVuY3Rpb24oRnVuY3Rpb24oWCkpCiAgLy8gaXMgW2NvdmFyaWFudF07CiAgLy8KICAvLyAqIGxldCB0aGUgZm9sbG93aW5nIGJlIGRlY2xhcmVkOgogIC8vCiAgLy8gICAgIHR5cGVkZWYgRjxaPiA9IEZ1bmN0aW9uKCk7CiAgLy8KICAvLyB0aGVuIHZhcmlhbmNlIG9mIFggaW4gRjxYPiBpcyBbdW5yZWxhdGVkXSwgdmFyaWFuY2Ugb2YgWSBpbiBMaXN0PFk+IGlzCiAgLy8gW2NvdmFyaWFudF0sIHNvIHZhcmlhbmNlIG9mIFggaW4gTGlzdDxGPFg+PiBpcyBbdW5yZWxhdGVkXTsKICAvLwogIC8vICogbGV0IHRoZSBmb2xsb3dpbmcgYmUgZGVjbGFyZWQ6CiAgLy8KICAvLyAgICAgdHlwZWRlZiBHPFo+ID0gWiBGdW5jdGlvbihaKTsKICAvLwogIC8vIHRoZW4gdmFyaWFuY2Ugb2YgWCBpbiBMaXN0PFg+IGlzIFtjb3ZhcmlhbnRdLCB2YXJpYW5jZSBvZiBZIGluIEc8WT4gaXMKICAvLyBbaW52YXJpYW50XSwgc28gdmFyaWFuY2Ugb2YgYFhgIGluIGBHPExpc3Q8WD4+YCBpcyBbaW52YXJpYW50XS4KICBzdGF0aWMgaW50IGNvbWJpbmUoaW50IGEsIGludCBiKSB7CiAgICBpZiAoYSA9PSB1bnJlbGF0ZWQgfHwgYiA9PSB1bnJlbGF0ZWQpIHJldHVybiB1bnJlbGF0ZWQ7CiAgICBpZiAoYSA9PSBpbnZhcmlhbnQgfHwgYiA9PSBpbnZhcmlhbnQpIHJldHVybiBpbnZhcmlhbnQ7CiAgICByZXR1cm4gYSA9PSBiID8gY292YXJpYW50IDogY29udHJhdmFyaWFudDsKICB9Cn0KggMATk48ARUJFA8SFRYXFRMXGxUSAT0BOAFBAS8BLRYmGQFRMhkBODQBNUs4MBczGgYBMC1CIkA7CAYEASkZBAIBOys6ATMBLQEjHAQBJiYgASs0HQYEASc0HQYEASk/KC8GPB4GPSgGIgQBMzMkBgQCAUEfM01QGioVCAY5RgQdMyoVCAY+SAQPAgFQOwQaYiIgPUU0LhkjSzwsMyUIBhcEAUtGM0xMME1MBiBIMCNDBgQBNExMMDkgSDY6BgQBEQIBGjAbATolAU0gAUwCAVEwMDQoIRwsATpKSDllJixENzVFHEciJQQBHy8kJDEkJTw7TSooBjlEKigGNEgqKAZLKCYrCxEEASYBIisBMUwvJkpJKEctRihHBgE9IyIaMSYGBCEmJAQiJiUEASAjKQERRTkfLyQkMSQEFEwvJkpJKA1RLUYoDVEGBCEmJAQiJiUEEQIBUTA9JB4lQTEiNS8zBC8mSyhIUUkoSC1HKEgGAT0jIhooHQYEEQIBKx8gJCIEGgIBT04TLjQhHh4uFR9GFidPKzc9RjIlBkVPKzc9RjIlBkUlQiojJz5ETTkmBiI6PzIoLz0rBk4yLT0oBA8CAUAiPgIBPiI8AgFCESsiAUgiAUgmAUweIgFOSkxORioBSwUmBVFPBVBQBUlPFQUmBSQFTEEFJgUnBUxFJTw8LwQCASVwYWNrYWdlOmtlcm5lbC9zcmMvYm91bmRzX2NoZWNrcy5kYXJ0P3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydIdxLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEua2VybmVsX2J1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIENvbWJpbmF0b3IsCiAgICAgICAgQ29uc3RydWN0b3IsCiAgICAgICAgSW5pdGlhbGl6ZXIsCiAgICAgICAgUHJvY2VkdXJlLAogICAgICAgIFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXI7CgppbXBvcnQgJy4uL2NvbWJpbmF0b3IuZGFydCcgYXMgZmFzdGE7CgpleHBvcnQgJy4uL2J1aWxkZXIvYnVpbGRlci5kYXJ0JzsKCmV4cG9ydCAnY2xhc3NfaGllcmFyY2h5X2J1aWxkZXIuZGFydCcKICAgIHNob3cgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyLCBEZWxheWVkTWVtYmVyLCBEZWxheWVkT3ZlcnJpZGVDaGVjazsKCmV4cG9ydCAnaW1wbGljaXRfZmllbGRfdHlwZS5kYXJ0JyBzaG93IEltcGxpY2l0RmllbGRUeXBlOwoKZXhwb3J0ICdrZXJuZWxfdmFyaWFibGVfYnVpbGRlci5kYXJ0JyBzaG93IFZhcmlhYmxlQnVpbGRlcjsKCmV4cG9ydCAnbG9hZF9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBMb2FkTGlicmFyeUJ1aWxkZXI7CgpleHBvcnQgJ3VubGlua2VkX3Njb3BlLmRhcnQnIHNob3cgVW5saW5rZWREZWNsYXJhdGlvbjsKCmludCBjb21wYXJlUHJvY2VkdXJlcyhQcm9jZWR1cmUgYSwgUHJvY2VkdXJlIGIpIHsKICBpbnQgaSA9ICIke2EuZmlsZVVyaX0iLmNvbXBhcmVUbygiJHtiLmZpbGVVcml9Iik7CiAgaWYgKGkgIT0gMCkgcmV0dXJuIGk7CiAgcmV0dXJuIGEuZmlsZU9mZnNldC5jb21wYXJlVG8oYi5maWxlT2Zmc2V0KTsKfQoKYm9vbCBpc1JlZGlyZWN0aW5nR2VuZXJhdGl2ZUNvbnN0cnVjdG9ySW1wbGVtZW50YXRpb24oQ29uc3RydWN0b3IgY29uc3RydWN0b3IpIHsKICBMaXN0PEluaXRpYWxpemVyPiBpbml0aWFsaXplcnMgPSBjb25zdHJ1Y3Rvci5pbml0aWFsaXplcnM7CiAgcmV0dXJuIGluaXRpYWxpemVycy5sZW5ndGggPT0gMSAmJgogICAgICBpbml0aWFsaXplcnMuc2luZ2xlIGlzIFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXI7Cn0KCkxpc3Q8Q29tYmluYXRvcj4gdG9LZXJuZWxDb21iaW5hdG9ycyhMaXN0PGZhc3RhLkNvbWJpbmF0b3I+IGZhc3RhQ29tYmluYXRvcnMpIHsKICBpZiAoZmFzdGFDb21iaW5hdG9ycyA9PSBudWxsKSB7CiAgICAvLyBOb3RlOiBpdCdzIHNhZmUgdG8gcmV0dXJuIG51bGwgaGVyZSBhcyBLZXJuZWwncyBMaWJyYXJ5RGVwZW5kZW5jeSB3aWxsCiAgICAvLyBjb252ZXJ0IG51bGwgdG8gYW4gZW1wdHkgbGlzdC4KICAgIHJldHVybiBudWxsOwogIH0KCiAgTGlzdDxDb21iaW5hdG9yPiByZXN1bHQgPSBuZXcgTGlzdDxDb21iaW5hdG9yPi5maWxsZWQoCiAgICAgIGZhc3RhQ29tYmluYXRvcnMubGVuZ3RoLCBudWxsLAogICAgICBncm93YWJsZTogdHJ1ZSk7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBmYXN0YUNvbWJpbmF0b3JzLmxlbmd0aDsgaSsrKSB7CiAgICBmYXN0YS5Db21iaW5hdG9yIGNvbWJpbmF0b3IgPSBmYXN0YUNvbWJpbmF0b3JzW2ldOwogICAgTGlzdDxTdHJpbmc+IG5hbWVMaXN0ID0gY29tYmluYXRvci5uYW1lcy50b0xpc3QoKTsKICAgIHJlc3VsdFtpXSA9IGNvbWJpbmF0b3IuaXNTaG93CiAgICAgICAgPyBuZXcgQ29tYmluYXRvci5zaG93KG5hbWVMaXN0KQogICAgICAgIDogbmV3IENvbWJpbmF0b3IuaGlkZShuYW1lTGlzdCk7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KPgBOTjwBHgEhCRQVFRMgASYBIgEmRQE6ATwBPAE3ATI0GC8CAVE9JTUCAVAiTiYRBAE5JRc2NzciKCkEEQIBNnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydD9zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvdGFyZ2V0X2ltcGxlbWVudGF0aW9uLmRhcnSbXy8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnRhcmdldF9pbXBsZW1lbnRhdGlvbjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgU291cmNlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90YXJnZXQvdGFyZ2V0cy5kYXJ0JyBhcyBiYWNrZW5kIHNob3cgVGFyZ2V0OwoKaW1wb3J0ICcuLi9iYXNlL3Byb2Nlc3NlZF9vcHRpb25zLmRhcnQnIHNob3cgUHJvY2Vzc2VkT3B0aW9uczsKCmltcG9ydCAnYnVpbGRlci9idWlsZGVyLmRhcnQnIHNob3cgQnVpbGRlciwgQ2xhc3NCdWlsZGVyLCBMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnY29tcGlsZXJfY29udGV4dC5kYXJ0JyBzaG93IENvbXBpbGVyQ29udGV4dDsKCmltcG9ydCAnbG9hZGVyLmRhcnQnIHNob3cgTG9hZGVyOwoKaW1wb3J0ICdtZXNzYWdlcy5kYXJ0JyBzaG93IEZvcm1hdHRlZE1lc3NhZ2UsIExvY2F0ZWRNZXNzYWdlLCBNZXNzYWdlOwoKaW1wb3J0ICdyZXdyaXRlX3NldmVyaXR5LmRhcnQnIHNob3cgcmV3cml0ZVNldmVyaXR5OwoKaW1wb3J0ICdzZXZlcml0eS5kYXJ0JyBzaG93IFNldmVyaXR5OwoKaW1wb3J0ICd0YXJnZXQuZGFydCcgc2hvdyBUYXJnZXQ7CgppbXBvcnQgJ3RpY2tlci5kYXJ0JyBzaG93IFRpY2tlcjsKCmltcG9ydCAndXJpX3RyYW5zbGF0b3IuZGFydCcgc2hvdyBVcmlUcmFuc2xhdG9yOwoKaW1wb3J0ICcuLi9hcGlfcHJvdG90eXBlL2V4cGVyaW1lbnRhbF9mbGFncy5kYXJ0JyBzaG93IEV4cGVyaW1lbnRhbEZsYWc7CgovLy8gUHJvdmlkZXMgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgdXNlZCBieSBhIGxvYWRlciBmb3IgYSB0YXJnZXQuCmFic3RyYWN0IGNsYXNzIFRhcmdldEltcGxlbWVudGF0aW9uIGV4dGVuZHMgVGFyZ2V0IHsKICBmaW5hbCBVcmlUcmFuc2xhdG9yIHVyaVRyYW5zbGF0b3I7CgogIGZpbmFsIGJhY2tlbmQuVGFyZ2V0IGJhY2tlbmRUYXJnZXQ7CgogIGZpbmFsIENvbXBpbGVyQ29udGV4dCBjb250ZXh0ID0gQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQ7CgogIC8vLyBTaGFyZWQgd2l0aCBbQ29tcGlsZXJDb250ZXh0XS4KICBmaW5hbCBNYXA8VXJpLCBTb3VyY2U+IHVyaVRvU291cmNlID0gQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQudXJpVG9Tb3VyY2U7CgogIEJ1aWxkZXIgY2FjaGVkQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvcjsKICBCdWlsZGVyIGNhY2hlZENvbXBpbGVUaW1lRXJyb3I7CiAgQnVpbGRlciBjYWNoZWREdXBsaWNhdGVkRmllbGRJbml0aWFsaXplckVycm9yOwogIEJ1aWxkZXIgY2FjaGVkRmFsbFRocm91Z2hFcnJvcjsKICBCdWlsZGVyIGNhY2hlZE5hdGl2ZUFubm90YXRpb247CiAgQnVpbGRlciBjYWNoZWROYXRpdmVFeHRlbnNpb25Bbm5vdGF0aW9uOwoKICBib29sIGVuYWJsZUV4dGVuc2lvbk1ldGhvZHM7CiAgYm9vbCBlbmFibGVOb25OdWxsYWJsZTsKICBib29sIGVuYWJsZVRyaXBsZVNoaWZ0OwoKICBUYXJnZXRJbXBsZW1lbnRhdGlvbihUaWNrZXIgdGlja2VyLCB0aGlzLnVyaVRyYW5zbGF0b3IsIHRoaXMuYmFja2VuZFRhcmdldCkKICAgICAgOiBlbmFibGVFeHRlbnNpb25NZXRob2RzID0gQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQub3B0aW9ucwogICAgICAgICAgICAuaXNFeHBlcmltZW50RW5hYmxlZChFeHBlcmltZW50YWxGbGFnLmV4dGVuc2lvbk1ldGhvZHMpLAogICAgICAgIGVuYWJsZU5vbk51bGxhYmxlID0gQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQub3B0aW9ucwogICAgICAgICAgICAuaXNFeHBlcmltZW50RW5hYmxlZChFeHBlcmltZW50YWxGbGFnLm5vbk51bGxhYmxlKSwKICAgICAgICBlbmFibGVUcmlwbGVTaGlmdCA9IENvbXBpbGVyQ29udGV4dC5jdXJyZW50Lm9wdGlvbnMKICAgICAgICAgICAgLmlzRXhwZXJpbWVudEVuYWJsZWQoRXhwZXJpbWVudGFsRmxhZy50cmlwbGVTaGlmdCksCiAgICAgICAgc3VwZXIodGlja2VyKTsKCiAgLy8vIENyZWF0ZXMgYSBbTGlicmFyeUJ1aWxkZXJdIGNvcnJlc3BvbmRpbmcgdG8gW3VyaV0sIGlmIG9uZSBkb2Vzbid0IGV4aXN0CiAgLy8vIGFscmVhZHkuCiAgLy8vCiAgLy8vIFtmaWxlVXJpXSBtdXN0IG5vdCBiZSBudWxsIGFuZCBpcyBhIFVSSSB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gRmlsZVN5c3RlbQogIC8vLyB0byBsb2NhdGUgdGhlIGNvcnJlc3BvbmRpbmcgZmlsZS4KICAvLy8KICAvLy8gW29yaWdpbl0gaXMgbm9uLW51bGwgaWYgdGhlIGNyZWF0ZWQgbGlicmFyeSBpcyBhIHBhdGNoIHRvIFtvcmlnaW5dLgogIExpYnJhcnlCdWlsZGVyIGNyZWF0ZUxpYnJhcnlCdWlsZGVyKAogICAgICBVcmkgdXJpLCBVcmkgZmlsZVVyaSwgY292YXJpYW50IExpYnJhcnlCdWlsZGVyIG9yaWdpbik7CgogIC8vLyBUaGUgY2xhc3MgW2Nsc10gaXMgaW52b2x2ZWQgaW4gYSBjeWNsaWMgZGVmaW5pdGlvbi4gVGhpcyBtZXRob2Qgc2hvdWxkCiAgLy8vIGVuc3VyZSB0aGF0IHRoZSBjeWNsZSBpcyBicm9rZW4sIGZvciBleGFtcGxlLCBieSByZW1vdmluZyBzdXBlcmNsYXNzIGFuZAogIC8vLyBpbXBsZW1lbnRlZCBpbnRlcmZhY2VzLgogIHZvaWQgYnJlYWtDeWNsZShDbGFzc0J1aWxkZXIgY2xzKTsKCiAgVXJpIHRyYW5zbGF0ZVVyaShVcmkgdXJpKSA9PiB1cmlUcmFuc2xhdG9yLnRyYW5zbGF0ZSh1cmkpOwoKICAvLy8gUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgY29uc3RydWN0b3Igb2YKICAvLy8gW0Fic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3JdIGVycm9yLiAgVGhlIGNvbnN0cnVjdG9yIGlzIGV4cGVjdGVkIHRvCiAgLy8vIGFjY2VwdCBhIHNpbmdsZSBhcmd1bWVudCBvZiB0eXBlIFN0cmluZywgd2hpY2ggaXMgdGhlIG5hbWUgb2YgdGhlCiAgLy8vIGFic3RyYWN0IGNsYXNzLgogIEJ1aWxkZXIgZ2V0QWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvcihMb2FkZXIgbG9hZGVyKSB7CiAgICBpZiAoY2FjaGVkQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvciAhPSBudWxsKSB7CiAgICAgIHJldHVybiBjYWNoZWRBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkVycm9yOwogICAgfQogICAgcmV0dXJuIGNhY2hlZEFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3IgPQogICAgICAgIGxvYWRlci5jb3JlTGlicmFyeS5nZXRDb25zdHJ1Y3RvcigiQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvciIpOwogIH0KCiAgLy8vIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGNvbnN0cnVjdG9yIHVzZWQgZm9yIGNyZWF0aW5nIGEgY29tcGlsZS10aW1lCiAgLy8vIGVycm9yLiBUaGUgY29uc3RydWN0b3IgaXMgZXhwZWN0ZWQgdG8gYWNjZXB0IGEgc2luZ2xlIGFyZ3VtZW50IG9mIHR5cGUKICAvLy8gU3RyaW5nLCB3aGljaCBpcyB0aGUgY29tcGlsZS10aW1lIGVycm9yIG1lc3NhZ2UuCiAgQnVpbGRlciBnZXRDb21waWxlVGltZUVycm9yKExvYWRlciBsb2FkZXIpIHsKICAgIGlmIChjYWNoZWRDb21waWxlVGltZUVycm9yICE9IG51bGwpIHJldHVybiBjYWNoZWRDb21waWxlVGltZUVycm9yOwogICAgcmV0dXJuIGNhY2hlZENvbXBpbGVUaW1lRXJyb3IgPSBsb2FkZXIuY29yZUxpYnJhcnkKICAgICAgICAuZ2V0Q29uc3RydWN0b3IoIl9Db21waWxlVGltZUVycm9yIiwgYnlwYXNzTGlicmFyeVByaXZhY3k6IHRydWUpOwogIH0KCiAgLy8vIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGNvbnN0cnVjdG9yIHVzZWQgZm9yIGNyZWF0aW5nIGEgcnVudGltZSBlcnJvcgogIC8vLyB3aGVuIGEgZmluYWwgZmllbGQgaXMgaW5pdGlhbGl6ZWQgdHdpY2UuIFRoZSBjb25zdHJ1Y3RvciBpcyBleHBlY3RlZCB0bwogIC8vLyBhY2NlcHQgYSBzaW5nbGUgYXJndW1lbnQgd2hpY2ggaXMgdGhlIG5hbWUgb2YgdGhlIGZpZWxkLgogIEJ1aWxkZXIgZ2V0RHVwbGljYXRlZEZpZWxkSW5pdGlhbGl6ZXJFcnJvcihMb2FkZXIgbG9hZGVyKSB7CiAgICBpZiAoY2FjaGVkRHVwbGljYXRlZEZpZWxkSW5pdGlhbGl6ZXJFcnJvciAhPSBudWxsKSB7CiAgICAgIHJldHVybiBjYWNoZWREdXBsaWNhdGVkRmllbGRJbml0aWFsaXplckVycm9yOwogICAgfQogICAgcmV0dXJuIGNhY2hlZER1cGxpY2F0ZWRGaWVsZEluaXRpYWxpemVyRXJyb3IgPSBsb2FkZXIuY29yZUxpYnJhcnkKICAgICAgICAuZ2V0Q29uc3RydWN0b3IoIl9EdXBsaWNhdGVkRmllbGRJbml0aWFsaXplckVycm9yIiwKICAgICAgICAgICAgYnlwYXNzTGlicmFyeVByaXZhY3k6IHRydWUpOwogIH0KCiAgLy8vIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGNvbnN0cnVjdG9yIHVzZWQgZm9yIGNyZWF0aW5nIGBuYXRpdmVgCiAgLy8vIGFubm90YXRpb25zLiBUaGUgY29uc3RydWN0b3IgaXMgZXhwZWN0ZWQgdG8gYWNjZXB0IGEgc2luZ2xlIGFyZ3VtZW50IG9mCiAgLy8vIHR5cGUgU3RyaW5nLCB3aGljaCBpcyB0aGUgbmFtZSBvZiB0aGUgbmF0aXZlIG1ldGhvZC4KICBCdWlsZGVyIGdldE5hdGl2ZUFubm90YXRpb24oTG9hZGVyIGxvYWRlcikgewogICAgaWYgKGNhY2hlZE5hdGl2ZUFubm90YXRpb24gIT0gbnVsbCkgcmV0dXJuIGNhY2hlZE5hdGl2ZUFubm90YXRpb247CiAgICBMaWJyYXJ5QnVpbGRlciBpbnRlcm5hbCA9IGxvYWRlci5yZWFkKFVyaS5wYXJzZSgiZGFydDpfaW50ZXJuYWwiKSwgLTEsCiAgICAgICAgYWNjZXNzb3I6IGxvYWRlci5jb3JlTGlicmFyeSk7CiAgICByZXR1cm4gY2FjaGVkTmF0aXZlQW5ub3RhdGlvbiA9IGludGVybmFsLmdldENvbnN0cnVjdG9yKCJFeHRlcm5hbE5hbWUiKTsKICB9CgogIHZvaWQgbG9hZEV4dHJhUmVxdWlyZWRMaWJyYXJpZXMoTG9hZGVyIGxvYWRlcikgewogICAgZm9yIChTdHJpbmcgdXJpIGluIGJhY2tlbmRUYXJnZXQuZXh0cmFSZXF1aXJlZExpYnJhcmllcykgewogICAgICBsb2FkZXIucmVhZChVcmkucGFyc2UodXJpKSwgMCwgYWNjZXNzb3I6IGxvYWRlci5jb3JlTGlicmFyeSk7CiAgICB9CiAgfQoKICB2b2lkIGFkZFNvdXJjZUluZm9ybWF0aW9uKAogICAgICBVcmkgaW1wb3J0VXJpLCBVcmkgZmlsZVVyaSwgTGlzdDxpbnQ+IGxpbmVTdGFydHMsIExpc3Q8aW50PiBzb3VyY2VDb2RlKTsKCiAgdm9pZCByZWFkUGF0Y2hGaWxlcyhjb3ZhcmlhbnQgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkge30KCiAgRm9ybWF0dGVkTWVzc2FnZSBjcmVhdGVGb3JtYXR0ZWRNZXNzYWdlKAogICAgICBNZXNzYWdlIG1lc3NhZ2UsCiAgICAgIGludCBjaGFyT2Zmc2V0LAogICAgICBpbnQgbGVuZ3RoLAogICAgICBVcmkgZmlsZVVyaSwKICAgICAgTGlzdDxMb2NhdGVkTWVzc2FnZT4gbWVzc2FnZUNvbnRleHQsCiAgICAgIFNldmVyaXR5IHNldmVyaXR5KSB7CiAgICBQcm9jZXNzZWRPcHRpb25zIHByb2Nlc3NlZE9wdGlvbnMgPSBjb250ZXh0Lm9wdGlvbnM7CiAgICByZXR1cm4gcHJvY2Vzc2VkT3B0aW9ucy5mb3JtYXQoCiAgICAgICAgbWVzc2FnZS53aXRoTG9jYXRpb24oZmlsZVVyaSwgY2hhck9mZnNldCwgbGVuZ3RoKSwKICAgICAgICBzZXZlcml0eSwKICAgICAgICBtZXNzYWdlQ29udGV4dCk7CiAgfQoKICBTZXZlcml0eSBmaXhTZXZlcml0eShTZXZlcml0eSBzZXZlcml0eSwgTWVzc2FnZSBtZXNzYWdlLCBVcmkgZmlsZVVyaSkgewogICAgc2V2ZXJpdHkgPz89IG1lc3NhZ2UuY29kZS5zZXZlcml0eTsKICAgIGlmIChzZXZlcml0eSA9PSBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpIHsKICAgICAgc2V2ZXJpdHkgPSBiYWNrZW5kVGFyZ2V0LmxlZ2FjeU1vZGUgPyBTZXZlcml0eS53YXJuaW5nIDogU2V2ZXJpdHkuZXJyb3I7CiAgICB9CiAgICByZXR1cm4gcmV3cml0ZVNldmVyaXR5KHNldmVyaXR5LCBtZXNzYWdlLmNvZGUsIGZpbGVVcmkpOwogIH0KCiAgU3RyaW5nIGdldCBjdXJyZW50U2RrVmVyc2lvbiB7CiAgICByZXR1cm4gQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQub3B0aW9ucy5jdXJyZW50U2RrVmVyc2lvbjsKICB9CgogIGludCBfY3VycmVudFNka1ZlcnNpb25NYWpvcjsKICBpbnQgX2N1cnJlbnRTZGtWZXJzaW9uTWlub3I7CiAgaW50IGdldCBjdXJyZW50U2RrVmVyc2lvbk1ham9yIHsKICAgIGlmIChfY3VycmVudFNka1ZlcnNpb25NYWpvciAhPSBudWxsKSByZXR1cm4gX2N1cnJlbnRTZGtWZXJzaW9uTWFqb3I7CiAgICBfcGFyc2VDdXJyZW50U2RrVmVyc2lvbigpOwogICAgcmV0dXJuIF9jdXJyZW50U2RrVmVyc2lvbk1ham9yOwogIH0KCiAgaW50IGdldCBjdXJyZW50U2RrVmVyc2lvbk1pbm9yIHsKICAgIGlmIChfY3VycmVudFNka1ZlcnNpb25NaW5vciAhPSBudWxsKSByZXR1cm4gX2N1cnJlbnRTZGtWZXJzaW9uTWlub3I7CiAgICBfcGFyc2VDdXJyZW50U2RrVmVyc2lvbigpOwogICAgcmV0dXJuIF9jdXJyZW50U2RrVmVyc2lvbk1pbm9yOwogIH0KCiAgdm9pZCBfcGFyc2VDdXJyZW50U2RrVmVyc2lvbigpIHsKICAgIGJvb2wgZ29vZCA9IGZhbHNlOwogICAgaWYgKGN1cnJlbnRTZGtWZXJzaW9uICE9IG51bGwpIHsKICAgICAgTGlzdDxTdHJpbmc+IGRvdFNlcGFyYXRlZFBhcnRzID0gY3VycmVudFNka1ZlcnNpb24uc3BsaXQoIi4iKTsKICAgICAgaWYgKGRvdFNlcGFyYXRlZFBhcnRzLmxlbmd0aCA+PSAyKSB7CiAgICAgICAgX2N1cnJlbnRTZGtWZXJzaW9uTWFqb3IgPSBpbnQudHJ5UGFyc2UoZG90U2VwYXJhdGVkUGFydHNbMF0pOwogICAgICAgIF9jdXJyZW50U2RrVmVyc2lvbk1pbm9yID0gaW50LnRyeVBhcnNlKGRvdFNlcGFyYXRlZFBhcnRzWzFdKTsKICAgICAgICBnb29kID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaWYgKCFnb29kKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJVbnBhcnNhYmxlIHNkayB2ZXJzaW9uIGdpdmVuOiAkY3VycmVudFNka1ZlcnNpb24iKTsKICAgIH0KICB9Cn0KgL8ATk48ASUBLgFEAT8BSgE1ASIBRwE1ASYBIgEiATEBSQFHNSUBJgE7ASVMATEiMSIiKwEfGhoBTkFFPEA8QBcBTg8GTygGSic+AU1PHiUBPQEwT0gWPjk0BjNOBAFOTTcvRzdKBAFPTj8+OTQGRjwpBAFITjsvR0snTQQBMz9EBgQBHU8BOwErFxYSEysbOSQ7EhkEAUooM08GPQQBIT4EAR8fI0kfJAQBI0kfJAQBIxclRStGRhUIBhFQBgQCATZwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdGFyZ2V0X2ltcGxlbWVudGF0aW9uLmRhcnRDc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2RpbGwvZGlsbF9saWJyYXJ5X2J1aWxkZXIuZGFydKauLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuZGlsbF9saWJyYXJ5X2J1aWxkZXI7CgppbXBvcnQgJ2RhcnQ6Y29udmVydCcgc2hvdyBqc29uRGVjb2RlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBDbGFzcywKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBEeW5hbWljVHlwZSwKICAgICAgICBGaWVsZCwKICAgICAgICBGdW5jdGlvblR5cGUsCiAgICAgICAgTGlicmFyeSwKICAgICAgICBMaXN0TGl0ZXJhbCwKICAgICAgICBNZW1iZXIsCiAgICAgICAgTmFtZWROb2RlLAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBSZWZlcmVuY2UsCiAgICAgICAgU3RhdGljR2V0LAogICAgICAgIFN0cmluZ0xpdGVyYWwsCiAgICAgICAgVHlwZWRlZjsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cKICAgICAgICBNZXNzYWdlLAogICAgICAgIG5vTGVuZ3RoLAogICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uLAogICAgICAgIHRlbXBsYXRlVHlwZU5vdEZvdW5kLAogICAgICAgIHRlbXBsYXRlVW5zcGVjaWZpZWQ7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgaW50ZXJuYWxQcm9ibGVtLCB1bmhhbmRsZWQsIHVuaW1wbGVtZW50ZWQ7CgppbXBvcnQgJy4uL2J1aWxkZXIvY2xhc3NfYnVpbGRlci5kYXJ0JzsKCmltcG9ydCAnLi4vYnVpbGRlci9tZW1iZXJfYnVpbGRlci5kYXJ0JzsKCmltcG9ydCAnLi4vYnVpbGRlci90eXBlX2FsaWFzX2J1aWxkZXIuZGFydCc7CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0JwogICAgc2hvdyBCdWlsZGVyLCBEeW5hbWljVHlwZUJ1aWxkZXIsIEludmFsaWRUeXBlQnVpbGRlciwgTGlicmFyeUJ1aWxkZXIsIFNjb3BlOwoKaW1wb3J0ICcuLi9rZXJuZWwvcmVkaXJlY3RpbmdfZmFjdG9yeV9ib2R5LmRhcnQnIHNob3cgUmVkaXJlY3RpbmdGYWN0b3J5Qm9keTsKCmltcG9ydCAnZGlsbF9jbGFzc19idWlsZGVyLmRhcnQnIHNob3cgRGlsbENsYXNzQnVpbGRlcjsKCmltcG9ydCAnZGlsbF9tZW1iZXJfYnVpbGRlci5kYXJ0JyBzaG93IERpbGxNZW1iZXJCdWlsZGVyOwoKaW1wb3J0ICdkaWxsX2xvYWRlci5kYXJ0JyBzaG93IERpbGxMb2FkZXI7CgppbXBvcnQgJ2RpbGxfdHlwZV9hbGlhc19idWlsZGVyLmRhcnQnIHNob3cgRGlsbFR5cGVBbGlhc0J1aWxkZXI7CgpjbGFzcyBMYXp5TGlicmFyeVNjb3BlIGV4dGVuZHMgU2NvcGUgewogIERpbGxMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5QnVpbGRlcjsKCiAgTGF6eUxpYnJhcnlTY29wZShNYXA8U3RyaW5nLCBCdWlsZGVyPiBsb2NhbCwgTWFwPFN0cmluZywgQnVpbGRlcj4gc2V0dGVycywKICAgICAgU2NvcGUgcGFyZW50LCBTdHJpbmcgZGVidWdOYW1lLCB7Ym9vbCBpc01vZGlmaWFibGU6IHRydWV9KQogICAgICA6IHN1cGVyKAogICAgICAgICAgICBsb2NhbDogbG9jYWwsCiAgICAgICAgICAgIHNldHRlcnM6IHNldHRlcnMsCiAgICAgICAgICAgIHBhcmVudDogcGFyZW50LAogICAgICAgICAgICBkZWJ1Z05hbWU6IGRlYnVnTmFtZSwKICAgICAgICAgICAgaXNNb2RpZmlhYmxlOiBpc01vZGlmaWFibGUpOwoKICBMYXp5TGlicmFyeVNjb3BlLnRvcCh7Ym9vbCBpc01vZGlmaWFibGU6IGZhbHNlfSkKICAgICAgOiB0aGlzKDxTdHJpbmcsIEJ1aWxkZXI+e30sIDxTdHJpbmcsIEJ1aWxkZXI+e30sIG51bGwsICJ0b3AiLAogICAgICAgICAgICBpc01vZGlmaWFibGU6IGlzTW9kaWZpYWJsZSk7CgogIE1hcDxTdHJpbmcsIEJ1aWxkZXI+IGdldCBsb2NhbCB7CiAgICBpZiAobGlicmFyeUJ1aWxkZXIgPT0gbnVsbCkgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIk5vIGxpYnJhcnkgYnVpbGRlci4iKTsKICAgIGxpYnJhcnlCdWlsZGVyLmVuc3VyZUxvYWRlZCgpOwogICAgcmV0dXJuIHN1cGVyLmxvY2FsOwogIH0KCiAgTWFwPFN0cmluZywgQnVpbGRlcj4gZ2V0IHNldHRlcnMgewogICAgaWYgKGxpYnJhcnlCdWlsZGVyID09IG51bGwpIHRocm93IG5ldyBTdGF0ZUVycm9yKCJObyBsaWJyYXJ5IGJ1aWxkZXIuIik7CiAgICBsaWJyYXJ5QnVpbGRlci5lbnN1cmVMb2FkZWQoKTsKICAgIHJldHVybiBzdXBlci5zZXR0ZXJzOwogIH0KfQoKY2xhc3MgRGlsbExpYnJhcnlCdWlsZGVyIGV4dGVuZHMgTGlicmFyeUJ1aWxkZXIgewogIEBvdmVycmlkZQogIGZpbmFsIExpYnJhcnkgbGlicmFyeTsKCiAgRGlsbExvYWRlciBsb2FkZXI7CgogIC8vLyBFeHBvcnRzIHRoYXQgY2FuJ3QgYmUgc2VyaWFsaXplZC4KICAvLy8KICAvLy8gVGhlIGVsZW1lbnRzIG9mIHRoaXMgbWFwIGFyZSBkb2N1bWVudGVkIGluCiAgLy8vIFsuLi9rZXJuZWwva2VybmVsX2xpYnJhcnlfYnVpbGRlci5kYXJ0XS4KICBNYXA8U3RyaW5nLCBTdHJpbmc+IHVuc2VyaWFsaXphYmxlRXhwb3J0czsKCiAgYm9vbCBleHBvcnRzQWxyZWFkeUZpbmFsaXplZCA9IGZhbHNlOwoKICAvLyBUT0RPKGplbnNqKTogVGhlc2UgNCBib29sZWFucyBjb3VsZCBwb3RlbnRpYWxseSBiZSBtZXJnZWQgaW50byBhIHNpbmdsZQogIC8vIHN0YXRlIGZpZWxkLgogIGJvb2wgaXNSZWFkeVRvQnVpbGQgPSBmYWxzZTsKICBib29sIGlzUmVhZHlUb0ZpbmFsaXplRXhwb3J0cyA9IGZhbHNlOwogIGJvb2wgaXNCdWlsdCA9IGZhbHNlOwogIGJvb2wgaXNCdWlsdEFuZE1hcmtlZCA9IGZhbHNlOwoKICBEaWxsTGlicmFyeUJ1aWxkZXIodGhpcy5saWJyYXJ5LCB0aGlzLmxvYWRlcikKICAgICAgOiBzdXBlcihsaWJyYXJ5LmZpbGVVcmksIG5ldyBMYXp5TGlicmFyeVNjb3BlLnRvcCgpLAogICAgICAgICAgICBuZXcgTGF6eUxpYnJhcnlTY29wZS50b3AoKSkgewogICAgTGF6eUxpYnJhcnlTY29wZSBsYXp5U2NvcGUgPSBzY29wZTsKICAgIGxhenlTY29wZS5saWJyYXJ5QnVpbGRlciA9IHRoaXM7CiAgICBMYXp5TGlicmFyeVNjb3BlIGxhenlFeHBvcnRTY29wZSA9IGV4cG9ydFNjb3BlOwogICAgbGF6eUV4cG9ydFNjb3BlLmxpYnJhcnlCdWlsZGVyID0gdGhpczsKICB9CgogIHZvaWQgZW5zdXJlTG9hZGVkKCkgewogICAgaWYgKCFpc1JlYWR5VG9CdWlsZCkgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIk5vdCByZWFkeSB0byBidWlsZC4iKTsKICAgIGlzQnVpbHRBbmRNYXJrZWQgPSB0cnVlOwogICAgaWYgKGlzQnVpbHQpIHJldHVybjsKICAgIGlzQnVpbHQgPSB0cnVlOwogICAgbGlicmFyeS5jbGFzc2VzLmZvckVhY2goYWRkQ2xhc3MpOwogICAgbGlicmFyeS5wcm9jZWR1cmVzLmZvckVhY2goYWRkTWVtYmVyKTsKICAgIGxpYnJhcnkudHlwZWRlZnMuZm9yRWFjaChhZGRUeXBlZGVmKTsKICAgIGxpYnJhcnkuZmllbGRzLmZvckVhY2goYWRkTWVtYmVyKTsKCiAgICBpZiAoaXNSZWFkeVRvRmluYWxpemVFeHBvcnRzKSB7CiAgICAgIGZpbmFsaXplRXhwb3J0cygpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIk5vdCByZWFkeSB0byBmaW5hbGl6ZSBleHBvcnRzLiIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTeW50aGV0aWMgPT4gbGlicmFyeS5pc1N5bnRoZXRpYzsKCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXRMYW5ndWFnZVZlcnNpb24oaW50IG1ham9yLCBpbnQgbWlub3IsCiAgICAgIHtpbnQgb2Zmc2V0OiAwLCBpbnQgbGVuZ3RoLCBib29sIGV4cGxpY2l0fSkge30KCiAgVXJpIGdldCB1cmkgPT4gbGlicmFyeS5pbXBvcnRVcmk7CgogIFVyaSBnZXQgZmlsZVVyaSA9PiBsaWJyYXJ5LmZpbGVVcmk7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgbmFtZSA9PiBsaWJyYXJ5Lm5hbWU7CgogIHZvaWQgYWRkU3ludGhldGljRGVjbGFyYXRpb25PZkR5bmFtaWMoKSB7CiAgICBhZGRCdWlsZGVyKAogICAgICAgICJkeW5hbWljIiwgbmV3IER5bmFtaWNUeXBlQnVpbGRlcihjb25zdCBEeW5hbWljVHlwZSgpLCB0aGlzLCAtMSksIC0xKTsKICB9CgogIHZvaWQgYWRkQ2xhc3MoQ2xhc3MgY2xzKSB7CiAgICBEaWxsQ2xhc3NCdWlsZGVyIGNsYXNzQnVsZGVyID0gbmV3IERpbGxDbGFzc0J1aWxkZXIoY2xzLCB0aGlzKTsKICAgIGFkZEJ1aWxkZXIoY2xzLm5hbWUsIGNsYXNzQnVsZGVyLCBjbHMuZmlsZU9mZnNldCk7CiAgICBjbHMucHJvY2VkdXJlcy5mb3JFYWNoKGNsYXNzQnVsZGVyLmFkZE1lbWJlcik7CiAgICBjbHMuY29uc3RydWN0b3JzLmZvckVhY2goY2xhc3NCdWxkZXIuYWRkTWVtYmVyKTsKICAgIGZvciAoRmllbGQgZmllbGQgaW4gY2xzLmZpZWxkcykgewogICAgICBpZiAoZmllbGQubmFtZS5uYW1lID09ICJfcmVkaXJlY3RpbmcjIikgewogICAgICAgIExpc3RMaXRlcmFsIGluaXRpYWxpemVyID0gZmllbGQuaW5pdGlhbGl6ZXI7CiAgICAgICAgZm9yIChTdGF0aWNHZXQgZ2V0IGluIGluaXRpYWxpemVyLmV4cHJlc3Npb25zKSB7CiAgICAgICAgICBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5LnJlc3RvcmVGcm9tRGlsbChnZXQudGFyZ2V0KTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY2xhc3NCdWxkZXIuYWRkTWVtYmVyKGZpZWxkKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBhZGRNZW1iZXIoTWVtYmVyIG1lbWJlcikgewogICAgU3RyaW5nIG5hbWUgPSBtZW1iZXIubmFtZS5uYW1lOwogICAgaWYgKG5hbWUgPT0gIl9leHBvcnRzIyIpIHsKICAgICAgRmllbGQgZmllbGQgPSBtZW1iZXI7CiAgICAgIFN0cmluZ0xpdGVyYWwgc3RyaW5nID0gZmllbGQuaW5pdGlhbGl6ZXI7CiAgICAgIE1hcDxkeW5hbWljLCBkeW5hbWljPiBqc29uID0ganNvbkRlY29kZShzdHJpbmcudmFsdWUpOwogICAgICB1bnNlcmlhbGl6YWJsZUV4cG9ydHMgPQogICAgICAgICAganNvbiAhPSBudWxsID8gbmV3IE1hcDxTdHJpbmcsIFN0cmluZz4uZnJvbShqc29uKSA6IG51bGw7CiAgICB9IGVsc2UgewogICAgICBhZGRCdWlsZGVyKG5hbWUsIG5ldyBEaWxsTWVtYmVyQnVpbGRlcihtZW1iZXIsIHRoaXMpLCBtZW1iZXIuZmlsZU9mZnNldCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBCdWlsZGVyIGFkZEJ1aWxkZXIoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgZGVjbGFyYXRpb24sIGludCBjaGFyT2Zmc2V0KSB7CiAgICBpZiAobmFtZSA9PSBudWxsIHx8IG5hbWUuaXNFbXB0eSkgcmV0dXJuIG51bGw7CiAgICBib29sIGlzU2V0dGVyID0gZGVjbGFyYXRpb24uaXNTZXR0ZXI7CiAgICBpZiAoaXNTZXR0ZXIpIHsKICAgICAgc2NvcGVCdWlsZGVyLmFkZFNldHRlcihuYW1lLCBkZWNsYXJhdGlvbik7CiAgICB9IGVsc2UgewogICAgICBzY29wZUJ1aWxkZXIuYWRkTWVtYmVyKG5hbWUsIGRlY2xhcmF0aW9uKTsKICAgIH0KICAgIGlmICghbmFtZS5zdGFydHNXaXRoKCJfIikpIHsKICAgICAgaWYgKGlzU2V0dGVyKSB7CiAgICAgICAgZXhwb3J0U2NvcGVCdWlsZGVyLmFkZFNldHRlcihuYW1lLCBkZWNsYXJhdGlvbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZXhwb3J0U2NvcGVCdWlsZGVyLmFkZE1lbWJlcihuYW1lLCBkZWNsYXJhdGlvbik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBkZWNsYXJhdGlvbjsKICB9CgogIHZvaWQgYWRkVHlwZWRlZihUeXBlZGVmIHR5cGVkZWYpIHsKICAgIERhcnRUeXBlIHR5cGUgPSB0eXBlZGVmLnR5cGU7CiAgICBpZiAodHlwZSBpcyBGdW5jdGlvblR5cGUgJiYgdHlwZS50eXBlZGVmVHlwZSA9PSBudWxsKSB7CiAgICAgIHVuaGFuZGxlZCgibnVsbCIsICJhZGRUeXBlZGVmIiwgdHlwZWRlZi5maWxlT2Zmc2V0LCB0eXBlZGVmLmZpbGVVcmkpOwogICAgfQogICAgYWRkQnVpbGRlcih0eXBlZGVmLm5hbWUsIG5ldyBEaWxsVHlwZUFsaWFzQnVpbGRlcih0eXBlZGVmLCB0aGlzKSwKICAgICAgICB0eXBlZGVmLmZpbGVPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRUb1Njb3BlKFN0cmluZyBuYW1lLCBCdWlsZGVyIG1lbWJlciwgaW50IGNoYXJPZmZzZXQsIGJvb2wgaXNJbXBvcnQpIHsKICAgIHVuaW1wbGVtZW50ZWQoImFkZFRvU2NvcGUiLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICB9CgogIEBvdmVycmlkZQogIEJ1aWxkZXIgY29tcHV0ZUFtYmlndW91c0RlY2xhcmF0aW9uKAogICAgICBTdHJpbmcgbmFtZSwgQnVpbGRlciBidWlsZGVyLCBCdWlsZGVyIG90aGVyLCBpbnQgY2hhck9mZnNldCwKICAgICAge2Jvb2wgaXNFeHBvcnQ6IGZhbHNlLCBib29sIGlzSW1wb3J0OiBmYWxzZX0pIHsKICAgIGlmIChidWlsZGVyID09IG90aGVyKSByZXR1cm4gYnVpbGRlcjsKICAgIGlmIChidWlsZGVyIGlzIEludmFsaWRUeXBlQnVpbGRlcikgcmV0dXJuIGJ1aWxkZXI7CiAgICBpZiAob3RoZXIgaXMgSW52YWxpZFR5cGVCdWlsZGVyKSByZXR1cm4gb3RoZXI7CiAgICAvLyBGb3IgZWFjaCBlbnRyeSBtYXBwaW5nIGtleSBga2AgdG8gZGVjbGFyYXRpb24gYGRgIGluIGBOU2AgYW4gZW50cnkKICAgIC8vIG1hcHBpbmcgYGtgIHRvIGBkYCBpcyBhZGRlZCB0byB0aGUgZXhwb3J0ZWQgbmFtZXNwYWNlIG9mIGBMYCB1bmxlc3MgYQogICAgLy8gdG9wLWxldmVsIGRlY2xhcmF0aW9uIHdpdGggdGhlIG5hbWUgYGtgIGV4aXN0cyBpbiBgTGAuCiAgICBpZiAoYnVpbGRlci5wYXJlbnQgPT0gdGhpcykgcmV0dXJuIGJ1aWxkZXI7CiAgICBNZXNzYWdlIG1lc3NhZ2UgPSB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvbi53aXRoQXJndW1lbnRzKG5hbWUpOwogICAgYWRkUHJvYmxlbShtZXNzYWdlLCBjaGFyT2Zmc2V0LCBuYW1lLmxlbmd0aCwgZmlsZVVyaSk7CiAgICByZXR1cm4gbmV3IEludmFsaWRUeXBlQnVpbGRlcigKICAgICAgICBuYW1lLCBtZXNzYWdlLndpdGhMb2NhdGlvbihmaWxlVXJpLCBjaGFyT2Zmc2V0LCBuYW1lLmxlbmd0aCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBmdWxsTmFtZUZvckVycm9ycyB7CiAgICByZXR1cm4gbGlicmFyeS5uYW1lID8/ICI8bGlicmFyeSAnJHtsaWJyYXJ5LmZpbGVVcml9Jz4iOwogIH0KCiAgdm9pZCBtYXJrQXNSZWFkeVRvQnVpbGQoKSB7CiAgICBpc1JlYWR5VG9CdWlsZCA9IHRydWU7CiAgfQoKICB2b2lkIG1hcmtBc1JlYWR5VG9GaW5hbGl6ZUV4cG9ydHMoKSB7CiAgICBpc1JlYWR5VG9GaW5hbGl6ZUV4cG9ydHMgPSB0cnVlOwogIH0KCiAgdm9pZCBmaW5hbGl6ZUV4cG9ydHMoKSB7CiAgICBpZiAoZXhwb3J0c0FscmVhZHlGaW5hbGl6ZWQpIHJldHVybjsKICAgIGV4cG9ydHNBbHJlYWR5RmluYWxpemVkID0gdHJ1ZTsKICAgIHVuc2VyaWFsaXphYmxlRXhwb3J0cz8uZm9yRWFjaCgoU3RyaW5nIG5hbWUsIFN0cmluZyBtZXNzYWdlVGV4dCkgewogICAgICBCdWlsZGVyIGRlY2xhcmF0aW9uOwogICAgICBzd2l0Y2ggKG5hbWUpIHsKICAgICAgICBjYXNlICJkeW5hbWljIjoKICAgICAgICBjYXNlICJ2b2lkIjoKICAgICAgICAgIC8vIFRPRE8oYWhlKTogSXQncyBsaWtlbHkgdGhhdCB3ZSBzaG91bGRuJ3QgYmUgZXhwb3J0aW5nIHRoZXNlIHR5cGVzCiAgICAgICAgICAvLyBmcm9tIGRhcnQ6Y29yZSwgYW5kIHRoaXMgY2FzZSBjYW4gYmUgcmVtb3ZlZC4KICAgICAgICAgIGRlY2xhcmF0aW9uID0gbG9hZGVyLmNvcmVMaWJyYXJ5LmV4cG9ydFNjb3BlQnVpbGRlcltuYW1lXTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gbWVzc2FnZVRleHQgPT0gbnVsbAogICAgICAgICAgICAgID8gdGVtcGxhdGVUeXBlTm90Rm91bmQud2l0aEFyZ3VtZW50cyhuYW1lKQogICAgICAgICAgICAgIDogdGVtcGxhdGVVbnNwZWNpZmllZC53aXRoQXJndW1lbnRzKG1lc3NhZ2VUZXh0KTsKICAgICAgICAgIGFkZFByb2JsZW0obWVzc2FnZSwgLTEsIG5vTGVuZ3RoLCBudWxsKTsKICAgICAgICAgIGRlY2xhcmF0aW9uID0gbmV3IEludmFsaWRUeXBlQnVpbGRlcihuYW1lLCBtZXNzYWdlLndpdGhvdXRMb2NhdGlvbigpKTsKICAgICAgfQogICAgICBleHBvcnRTY29wZUJ1aWxkZXIuYWRkTWVtYmVyKG5hbWUsIGRlY2xhcmF0aW9uKTsKICAgIH0pOwoKICAgIGZvciAoUmVmZXJlbmNlIHJlZmVyZW5jZSBpbiBsaWJyYXJ5LmFkZGl0aW9uYWxFeHBvcnRzKSB7CiAgICAgIE5hbWVkTm9kZSBub2RlID0gcmVmZXJlbmNlLm5vZGU7CiAgICAgIFVyaSBsaWJyYXJ5VXJpOwogICAgICBTdHJpbmcgbmFtZTsKICAgICAgYm9vbCBpc1NldHRlciA9IGZhbHNlOwogICAgICBpZiAobm9kZSBpcyBDbGFzcykgewogICAgICAgIGxpYnJhcnlVcmkgPSBub2RlLmVuY2xvc2luZ0xpYnJhcnkuaW1wb3J0VXJpOwogICAgICAgIG5hbWUgPSBub2RlLm5hbWU7CiAgICAgIH0gZWxzZSBpZiAobm9kZSBpcyBQcm9jZWR1cmUpIHsKICAgICAgICBsaWJyYXJ5VXJpID0gbm9kZS5lbmNsb3NpbmdMaWJyYXJ5LmltcG9ydFVyaTsKICAgICAgICBuYW1lID0gbm9kZS5uYW1lLm5hbWU7CiAgICAgICAgaXNTZXR0ZXIgPSBub2RlLmlzU2V0dGVyOwogICAgICB9IGVsc2UgaWYgKG5vZGUgaXMgTWVtYmVyKSB7CiAgICAgICAgbGlicmFyeVVyaSA9IG5vZGUuZW5jbG9zaW5nTGlicmFyeS5pbXBvcnRVcmk7CiAgICAgICAgbmFtZSA9IG5vZGUubmFtZS5uYW1lOwogICAgICB9IGVsc2UgaWYgKG5vZGUgaXMgVHlwZWRlZikgewogICAgICAgIGxpYnJhcnlVcmkgPSBub2RlLmVuY2xvc2luZ0xpYnJhcnkuaW1wb3J0VXJpOwogICAgICAgIG5hbWUgPSBub2RlLm5hbWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdW5oYW5kbGVkKCIke25vZGUucnVudGltZVR5cGV9IiwgImZpbmFsaXplRXhwb3J0cyIsIC0xLCBmaWxlVXJpKTsKICAgICAgfQogICAgICBEaWxsTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IGxvYWRlci5idWlsZGVyc1tsaWJyYXJ5VXJpXTsKICAgICAgaWYgKGxpYnJhcnkgPT0gbnVsbCkgewogICAgICAgIGludGVybmFsUHJvYmxlbSgKICAgICAgICAgICAgdGVtcGxhdGVVbnNwZWNpZmllZC53aXRoQXJndW1lbnRzKCJObyBidWlsZGVyIGZvciAnJGxpYnJhcnlVcmknLiIpLAogICAgICAgICAgICAtMSwKICAgICAgICAgICAgZmlsZVVyaSk7CiAgICAgIH0KICAgICAgQnVpbGRlciBkZWNsYXJhdGlvbjsKICAgICAgaWYgKGlzU2V0dGVyKSB7CiAgICAgICAgZGVjbGFyYXRpb24gPSBsaWJyYXJ5LmV4cG9ydFNjb3BlLnNldHRlcnNbbmFtZV07CiAgICAgICAgZXhwb3J0U2NvcGVCdWlsZGVyLmFkZFNldHRlcihuYW1lLCBkZWNsYXJhdGlvbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZGVjbGFyYXRpb24gPSBsaWJyYXJ5LmV4cG9ydFNjb3BlLmxvY2FsW25hbWVdOwogICAgICAgIGV4cG9ydFNjb3BlQnVpbGRlci5hZGRNZW1iZXIobmFtZSwgZGVjbGFyYXRpb24pOwogICAgICB9CiAgICAgIGlmIChkZWNsYXJhdGlvbiA9PSBudWxsKSB7CiAgICAgICAgaW50ZXJuYWxQcm9ibGVtKAogICAgICAgICAgICB0ZW1wbGF0ZVVuc3BlY2lmaWVkLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICAiRXhwb3J0ZWQgZWxlbWVudCAnJG5hbWUnIG5vdCBmb3VuZCBpbiAnJGxpYnJhcnlVcmknLiIpLAogICAgICAgICAgICAtMSwKICAgICAgICAgICAgZmlsZVVyaSk7CiAgICAgIH0KICAgICAgYXNzZXJ0KChkZWNsYXJhdGlvbiBpcyBDbGFzc0J1aWxkZXIgJiYgbm9kZSA9PSBkZWNsYXJhdGlvbi5jbHMpIHx8CiAgICAgICAgICAoZGVjbGFyYXRpb24gaXMgVHlwZUFsaWFzQnVpbGRlciAmJiBub2RlID09IGRlY2xhcmF0aW9uLnR5cGVkZWYpIHx8CiAgICAgICAgICAoZGVjbGFyYXRpb24gaXMgTWVtYmVyQnVpbGRlciAmJiBub2RlID09IGRlY2xhcmF0aW9uLm1lbWJlcikpOwogICAgfQogIH0KfQqBPABOTjwBJAEnASEJDxIVDxYRFRATExMTFxEBHQkREiceHQFKASgBKQEtASdRAU4BOAE6ASsBQQEnJQFNQQ8aHhwiKQEzRCkBI00jGAQBJU0jGgQCATIMGQEVASgGMS8tASgBTRIfKRghATA7KiglNCsEARhGHRkUJysqJwEkGQ0+BgQBDC8BDDA1ASQBJgEMIwEsEE8EAR1ENzM1JjA1OT4KDyYIBgQBIiQfHDA9HkQNUAYEAQxJMyoUMQ0xBiEWOQ85CAYYBAElIjxMBkYdBAEMUDYEAQwnQzYqNzNKTT4wSTsjRwQBDCE9BAEeGwQBKCUEARspJEcbFhgVTztFEQERMDlAM1EINwgBPScWEx0bNhomNh8iIzYfJDYaD0oIQB0ZUBAWCBsWOTkPNzkIIRkvSRAWCElOSQYEAgE6cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2RpbGwvZGlsbF9saWJyYXJ5X2J1aWxkZXIuZGFydDpzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvZGlsbC9kaWxsX2xvYWRlci5kYXJ0i30vLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5kaWxsX2xvYWRlcjsKCmltcG9ydCAnZGFydDphc3luYycgc2hvdyBGdXR1cmU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IENsYXNzLCBDb21wb25lbnQsIERhcnRUeXBlLCBMaWJyYXJ5OwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdyBTdW1tYXJ5VGVtcGxhdGUsIFRlbXBsYXRlLCB0ZW1wbGF0ZURpbGxPdXRsaW5lU3VtbWFyeTsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93IENsYXNzQnVpbGRlciwgVHlwZUJ1aWxkZXIsIExpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICcuLi9rZXJuZWwvdHlwZV9idWlsZGVyX2NvbXB1dGVyLmRhcnQnIHNob3cgVHlwZUJ1aWxkZXJDb21wdXRlcjsKCmltcG9ydCAnLi4vbG9hZGVyLmRhcnQnIHNob3cgTG9hZGVyOwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JyBzaG93IHVuaGFuZGxlZDsKCmltcG9ydCAnLi4vdGFyZ2V0X2ltcGxlbWVudGF0aW9uLmRhcnQnIHNob3cgVGFyZ2V0SW1wbGVtZW50YXRpb247CgppbXBvcnQgJ2RpbGxfbGlicmFyeV9idWlsZGVyLmRhcnQnIHNob3cgRGlsbExpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICdkaWxsX3RhcmdldC5kYXJ0JyBzaG93IERpbGxUYXJnZXQ7CgpjbGFzcyBEaWxsTG9hZGVyIGV4dGVuZHMgTG9hZGVyIHsKICBEaWxsTG9hZGVyKFRhcmdldEltcGxlbWVudGF0aW9uIHRhcmdldCkgOiBzdXBlcih0YXJnZXQpOwoKICBUZW1wbGF0ZTxTdW1tYXJ5VGVtcGxhdGU+IGdldCBvdXRsaW5lU3VtbWFyeVRlbXBsYXRlID0+CiAgICAgIHRlbXBsYXRlRGlsbE91dGxpbmVTdW1tYXJ5OwoKICAvLy8gQXBwZW5kIGNvbXBpbGVkIGxpYnJhcmllcyBmcm9tIHRoZSBnaXZlbiBbY29tcG9uZW50XS4gSWYgdGhlIFtmaWx0ZXJdIGlzCiAgLy8vIHByb3ZpZGVkLCBhcHBlbmQgb25seSBsaWJyYXJpZXMgd2hvc2UgW1VyaV0gaXMgYWNjZXB0ZWQgYnkgdGhlIFtmaWx0ZXJdLgogIExpc3Q8RGlsbExpYnJhcnlCdWlsZGVyPiBhcHBlbmRMaWJyYXJpZXMoQ29tcG9uZW50IGNvbXBvbmVudCwKICAgICAge2Jvb2wgZmlsdGVyKFVyaSB1cmkpLCBpbnQgYnl0ZUNvdW50OiAwfSkgewogICAgTGlzdDxMaWJyYXJ5PiBjb21wb25lbnRMaWJyYXJpZXMgPSBjb21wb25lbnQubGlicmFyaWVzOwogICAgTGlzdDxVcmk+IHJlcXVlc3RlZExpYnJhcmllcyA9IDxVcmk+W107CiAgICBEaWxsVGFyZ2V0IHRhcmdldCA9IHRoaXMudGFyZ2V0OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb21wb25lbnRMaWJyYXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgTGlicmFyeSBsaWJyYXJ5ID0gY29tcG9uZW50TGlicmFyaWVzW2ldOwogICAgICBVcmkgdXJpID0gbGlicmFyeS5pbXBvcnRVcmk7CiAgICAgIGlmIChmaWx0ZXIgPT0gbnVsbCB8fCBmaWx0ZXIobGlicmFyeS5pbXBvcnRVcmkpKSB7CiAgICAgICAgbGlicmFyaWVzLmFkZChsaWJyYXJ5KTsKICAgICAgICB0YXJnZXQuYWRkTGlicmFyeShsaWJyYXJ5KTsKICAgICAgICByZXF1ZXN0ZWRMaWJyYXJpZXMuYWRkKHVyaSk7CiAgICAgIH0KICAgIH0KICAgIExpc3Q8RGlsbExpYnJhcnlCdWlsZGVyPiByZXN1bHQgPSA8RGlsbExpYnJhcnlCdWlsZGVyPltdOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXF1ZXN0ZWRMaWJyYXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgcmVzdWx0LmFkZChyZWFkKHJlcXVlc3RlZExpYnJhcmllc1tpXSwgLTEpKTsKICAgIH0KICAgIHRhcmdldC51cmlUb1NvdXJjZS5hZGRBbGwoY29tcG9uZW50LnVyaVRvU291cmNlKTsKICAgIHRoaXMuYnl0ZUNvdW50ICs9IGJ5dGVDb3VudDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBGdXR1cmU8TnVsbD4gYnVpbGRPdXRsaW5lKERpbGxMaWJyYXJ5QnVpbGRlciBidWlsZGVyKSBhc3luYyB7CiAgICBpZiAoYnVpbGRlci5saWJyYXJ5ID09IG51bGwpIHsKICAgICAgdW5oYW5kbGVkKCJudWxsIiwgImJ1aWxkZXIubGlicmFyeSIsIDAsIGJ1aWxkZXIuZmlsZVVyaSk7CiAgICB9CiAgICBidWlsZGVyLm1hcmtBc1JlYWR5VG9CdWlsZCgpOwogIH0KCiAgRnV0dXJlPE51bGw+IGJ1aWxkQm9keShEaWxsTGlicmFyeUJ1aWxkZXIgYnVpbGRlcikgewogICAgcmV0dXJuIGJ1aWxkT3V0bGluZShidWlsZGVyKTsKICB9CgogIHZvaWQgZmluYWxpemVFeHBvcnRzKCkgewogICAgYnVpbGRlcnMuZm9yRWFjaCgoVXJpIHVyaSwgTGlicmFyeUJ1aWxkZXIgYnVpbGRlcikgewogICAgICBEaWxsTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IGJ1aWxkZXI7CiAgICAgIGxpYnJhcnkubWFya0FzUmVhZHlUb0ZpbmFsaXplRXhwb3J0cygpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc0J1aWxkZXIgY29tcHV0ZUNsYXNzQnVpbGRlckZyb21UYXJnZXRDbGFzcyhDbGFzcyBjbHMpIHsKICAgIExpYnJhcnkga2VybmVsTGlicmFyeSA9IGNscy5lbmNsb3NpbmdMaWJyYXJ5OwogICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IGJ1aWxkZXJzW2tlcm5lbExpYnJhcnkuaW1wb3J0VXJpXTsKICAgIHJldHVybiBsaWJyYXJ5Lmxvb2t1cExvY2FsTWVtYmVyKGNscy5uYW1lLCByZXF1aXJlZDogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlQnVpbGRlciBjb21wdXRlVHlwZUJ1aWxkZXIoRGFydFR5cGUgdHlwZSkgewogICAgcmV0dXJuIHR5cGUuYWNjZXB0KG5ldyBUeXBlQnVpbGRlckNvbXB1dGVyKHRoaXMpKTsKICB9Cn0KWwBOTjwBGwEhAUsBHUABJzQBSAElASoBQgE8ASsBIjsBOiIBT09AMjwsJTovIzkgJCUIBj46MwY2IRMEAUAjQAYiBAE3IgQBGzksLggEAQw/MkBABAEMMjcEAgExcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2RpbGwvZGlsbF9sb2FkZXIuZGFydEJzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvZGlsbC9kaWxsX21lbWJlcl9idWlsZGVyLmRhcnSKHi8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmRpbGxfbWVtYmVyX2J1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdyBDb25zdHJ1Y3RvciwgRmllbGQsIE1lbWJlciwgUHJvY2VkdXJlLCBQcm9jZWR1cmVLaW5kOwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBCdWlsZGVyLAogICAgICAgIE1lbWJlckJ1aWxkZXIsCiAgICAgICAgaXNSZWRpcmVjdGluZ0dlbmVyYXRpdmVDb25zdHJ1Y3RvckltcGxlbWVudGF0aW9uOwoKaW1wb3J0ICcuLi9tb2RpZmllci5kYXJ0JwogICAgc2hvdyBhYnN0cmFjdE1hc2ssIGNvbnN0TWFzaywgZXh0ZXJuYWxNYXNrLCBmaW5hbE1hc2ssIGxhdGVNYXNrLCBzdGF0aWNNYXNrOwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JyBzaG93IHVuaGFuZGxlZDsKCmNsYXNzIERpbGxNZW1iZXJCdWlsZGVyIGV4dGVuZHMgTWVtYmVyQnVpbGRlciB7CiAgZmluYWwgaW50IG1vZGlmaWVyczsKCiAgZmluYWwgTWVtYmVyIG1lbWJlcjsKCiAgRGlsbE1lbWJlckJ1aWxkZXIoTWVtYmVyIG1lbWJlciwgQnVpbGRlciBwYXJlbnQpCiAgICAgIDogbW9kaWZpZXJzID0gY29tcHV0ZU1vZGlmaWVycyhtZW1iZXIpLAogICAgICAgIG1lbWJlciA9IG1lbWJlciwKICAgICAgICBzdXBlcihwYXJlbnQsIG1lbWJlci5maWxlT2Zmc2V0KTsKCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWUgPT4gIkRpbGxNZW1iZXJCdWlsZGVyIjsKCiAgU3RyaW5nIGdldCBuYW1lID0+IG1lbWJlci5uYW1lLm5hbWU7CgogIGJvb2wgZ2V0IGlzQ29uc3RydWN0b3IgPT4gbWVtYmVyIGlzIENvbnN0cnVjdG9yOwoKICBQcm9jZWR1cmVLaW5kIGdldCBraW5kIHsKICAgIGZpbmFsIE1lbWJlciBtZW1iZXIgPSB0aGlzLm1lbWJlcjsKICAgIHJldHVybiBtZW1iZXIgaXMgUHJvY2VkdXJlID8gbWVtYmVyLmtpbmQgOiBudWxsOwogIH0KCiAgYm9vbCBnZXQgaXNSZWd1bGFyTWV0aG9kID0+IGlkZW50aWNhbChQcm9jZWR1cmVLaW5kLk1ldGhvZCwga2luZCk7CgogIGJvb2wgZ2V0IGlzR2V0dGVyID0+IGlkZW50aWNhbChQcm9jZWR1cmVLaW5kLkdldHRlciwga2luZCk7CgogIGJvb2wgZ2V0IGlzU2V0dGVyID0+IGlkZW50aWNhbChQcm9jZWR1cmVLaW5kLlNldHRlciwga2luZCk7CgogIGJvb2wgZ2V0IGlzT3BlcmF0b3IgPT4gaWRlbnRpY2FsKFByb2NlZHVyZUtpbmQuT3BlcmF0b3IsIGtpbmQpOwoKICBib29sIGdldCBpc0ZhY3RvcnkgPT4gaWRlbnRpY2FsKFByb2NlZHVyZUtpbmQuRmFjdG9yeSwga2luZCk7CgogIGJvb2wgZ2V0IGlzUmVkaXJlY3RpbmdHZW5lcmF0aXZlQ29uc3RydWN0b3IgewogICAgcmV0dXJuIGlzQ29uc3RydWN0b3IgJiYKICAgICAgICBpc1JlZGlyZWN0aW5nR2VuZXJhdGl2ZUNvbnN0cnVjdG9ySW1wbGVtZW50YXRpb24obWVtYmVyKTsKICB9CgogIGJvb2wgZ2V0IGlzU3ludGhldGljIHsKICAgIGZpbmFsIE1lbWJlciBtZW1iZXIgPSB0aGlzLm1lbWJlcjsKICAgIHJldHVybiBtZW1iZXIgaXMgQ29uc3RydWN0b3IgJiYgbWVtYmVyLmlzU3ludGhldGljOwogIH0KCiAgYm9vbCBnZXQgaXNGaWVsZCA9PiBtZW1iZXIgaXMgRmllbGQ7Cn0KCmludCBjb21wdXRlTW9kaWZpZXJzKE1lbWJlciBtZW1iZXIpIHsKICBpbnQgbW9kaWZpZXIgPSBtZW1iZXIuaXNBYnN0cmFjdCA/IGFic3RyYWN0TWFzayA6IDA7CiAgbW9kaWZpZXIgfD0gbWVtYmVyLmlzRXh0ZXJuYWwgPyBleHRlcm5hbE1hc2sgOiAwOwogIGlmIChtZW1iZXIgaXMgRmllbGQpIHsKICAgIG1vZGlmaWVyIHw9IG1lbWJlci5pc0NvbnN0ID8gY29uc3RNYXNrIDogMDsKICAgIG1vZGlmaWVyIHw9IG1lbWJlci5pc0ZpbmFsID8gZmluYWxNYXNrIDogMDsKICAgIG1vZGlmaWVyIHw9IG1lbWJlci5pc0xhdGUgPyBsYXRlTWFzayA6IDA7CiAgICBtb2RpZmllciB8PSBtZW1iZXIuaXNTdGF0aWMgPyBzdGF0aWNNYXNrIDogMDsKICB9IGVsc2UgaWYgKG1lbWJlciBpcyBQcm9jZWR1cmUpIHsKICAgIG1vZGlmaWVyIHw9IG1lbWJlci5pc0NvbnN0ID8gY29uc3RNYXNrIDogMDsKICAgIG1vZGlmaWVyIHw9IG1lbWJlci5pc1N0YXRpYyA/IHN0YXRpY01hc2sgOiAwOwogIH0gZWxzZSBpZiAobWVtYmVyIGlzIENvbnN0cnVjdG9yKSB7CiAgICBtb2RpZmllciB8PSBtZW1iZXIuaXNDb25zdCA/IGNvbnN0TWFzayA6IDA7CiAgfSBlbHNlIHsKICAgIGR5bmFtaWMgcGFyZW50ID0gbWVtYmVyLnBhcmVudDsKICAgIHVuaGFuZGxlZCgiJHttZW1iZXIucnVudGltZVR5cGV9IiwgImNvbXB1dGVNb2RpZmllcnMiLCBtZW1iZXIuZmlsZU9mZnNldCwKICAgICAgICBVcmkuYmFzZS5yZXNvbHZlKHBhcmVudC5maWxlVXJpKSk7CiAgfQogIHJldHVybiBtb2RpZmllcjsKfQpWAE5OPAEjASE/AScJERc6ARpRASoBMBcBFwEzLhkqAS8BJwEzARsnNQQBRQE+AT4BQgFAATAcQgQBGSc4BAEnAgEmNzQZMDAuMiQwMiYwCyROKwQTAgE5cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2RpbGwvZGlsbF9tZW1iZXJfYnVpbGRlci5kYXJ0L3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9zY29wZS5kYXJ0vxgvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5zY29wZTsKCmltcG9ydCAnYnVpbGRlci9idWlsZGVyLmRhcnQnIHNob3cgQnVpbGRlciwgTmFtZUl0ZXJhdG9yLCBUeXBlVmFyaWFibGVCdWlsZGVyOwoKaW1wb3J0ICdidWlsZGVyL2V4dGVuc2lvbl9idWlsZGVyLmRhcnQnOwoKaW1wb3J0ICdmYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdwogICAgICAgIExvY2F0ZWRNZXNzYWdlLAogICAgICAgIE1lc3NhZ2UsCiAgICAgICAgbWVzc2FnZUludGVybmFsUHJvYmxlbUV4dGVuZGluZ1VubW9kaWZpYWJsZVNjb3BlLAogICAgICAgIHRlbXBsYXRlQWNjZXNzRXJyb3IsCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25Vc2UsCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkTmFtZVByZXZpb3VzbHlVc2VkQ2F1c2U7CgppbXBvcnQgJ3Byb2JsZW1zLmRhcnQnIHNob3cgaW50ZXJuYWxQcm9ibGVtLCB1bnN1cHBvcnRlZDsKCmNsYXNzIE11dGFibGVTY29wZSB7CiAgLy8vIE5hbWVzIGRlY2xhcmVkIGluIHRoaXMgc2NvcGUuCiAgTWFwPFN0cmluZywgQnVpbGRlcj4gbG9jYWw7CgogIC8vLyBTZXR0ZXJzIGRlY2xhcmVkIGluIHRoaXMgc2NvcGUuCiAgTWFwPFN0cmluZywgQnVpbGRlcj4gc2V0dGVyczsKCiAgLy8vIFRoZSBleHRlbnNpb25zIGRlY2xhcmVkIGluIHRoaXMgc2NvcGUuCiAgLy8vCiAgLy8vIFRoaXMgaW5jbHVkZXMgYWxsIGF2YWlsYWJsZSBleHRlbnNpb25zIGV2ZW4gaWYgdGhlIGV4dGVuc2lvbnMgYXJlIG5vdAogIC8vLyBhY2Nlc3NpYmxlIGJ5IG5hbWUgYmVjYXVzZSBvZiBkdXBsaWNhdGUgaW1wb3J0cy4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlOgogIC8vLwogIC8vLyAgIGxpYjEuZGFydDoKICAvLy8gICAgIGV4dGVuc2lvbiBFeHRlbnNpb24gb24gU3RyaW5nIHsKICAvLy8gICAgICAgbWV0aG9kMSgpIHt9CiAgLy8vICAgICAgIHN0YXRpY01ldGhvZDEoKSB7fQogIC8vLyAgICAgfQogIC8vLyAgIGxpYjIuZGFydDoKICAvLy8gICAgIGV4dGVuc2lvbiBFeHRlbnNpb24gb24gU3RyaW5nIHsKICAvLy8gICAgICAgbWV0aG9kMigpIHt9CiAgLy8vICAgICAgIHN0YXRpY01ldGhvZDIoKSB7fQogIC8vLyAgICAgfQogIC8vLyAgIG1haW4uZGFydDoKICAvLy8gICAgIGltcG9ydCAnbGliMS5kYXJ0JzsKICAvLy8gICAgIGltcG9ydCAnbGliMi5kYXJ0JzsKICAvLy8KICAvLy8gICAgIG1haW4oKSB7CiAgLy8vICAgICAgICdmb28nLm1ldGhvZDEoKTsgLy8gVGhpcyBtZXRob2QgaXMgYXZhaWxhYmxlLgogIC8vLyAgICAgICAnZm9vJy5tZXRob2QyKCk7IC8vIFRoaXMgbWV0aG9kIGlzIGF2YWlsYWJsZS4KICAvLy8gICAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIEV4dGVuc2lvbiBpcyBhbWJpZ3VvdXM6CiAgLy8vICAgICAgIEV4dGVuc2lvbi5zdGF0aWNNZXRob2QxKCk7CiAgLy8vICAgICAgIEV4dGVuc2lvbi5zdGF0aWNNZXRob2QyKCk7CiAgLy8vICAgICB9CiAgLy8vCiAgTGlzdDxFeHRlbnNpb25CdWlsZGVyPiBfZXh0ZW5zaW9uczsKCiAgLy8vIFRoZSBzY29wZSB0aGF0IHRoaXMgc2NvcGUgaXMgbmVzdGVkIHdpdGhpbiwgb3IgYG51bGxgIGlmIHRoaXMgaXMgdGhlIHRvcAogIC8vLyBsZXZlbCBzY29wZS4KICBTY29wZSBwYXJlbnQ7CgogIGZpbmFsIFN0cmluZyBjbGFzc05hbWVPckRlYnVnTmFtZTsKCiAgTXV0YWJsZVNjb3BlKHRoaXMubG9jYWwsIHRoaXMuc2V0dGVycywgdGhpcy5fZXh0ZW5zaW9ucywgdGhpcy5wYXJlbnQsCiAgICAgIHRoaXMuY2xhc3NOYW1lT3JEZWJ1Z05hbWUpIHsKICAgIGFzc2VydChjbGFzc05hbWVPckRlYnVnTmFtZSAhPSBudWxsKTsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJTY29wZSgkY2xhc3NOYW1lT3JEZWJ1Z05hbWUsICR7bG9jYWwua2V5c30pIjsKfQoKY2xhc3MgU2NvcGUgZXh0ZW5kcyBNdXRhYmxlU2NvcGUgewogIC8vLyBJbmRpY2F0ZXMgd2hldGhlciBhbiBhdHRlbXB0IHRvIGRlY2xhcmUgbmV3IG5hbWVzIGluIHRoaXMgc2NvcGUgc2hvdWxkCiAgLy8vIHN1Y2NlZWQuCiAgZmluYWwgYm9vbCBpc01vZGlmaWFibGU7CgogIE1hcDxTdHJpbmcsIEJ1aWxkZXI+IGxhYmVsczsKCiAgTWFwPFN0cmluZywgQnVpbGRlcj4gZm9yd2FyZERlY2xhcmVkTGFiZWxzOwoKICBNYXA8U3RyaW5nLCBpbnQ+IHVzZWROYW1lczsKCiAgU2NvcGUoCiAgICAgIHtNYXA8U3RyaW5nLCBCdWlsZGVyPiBsb2NhbCwKICAgICAgTWFwPFN0cmluZywgQnVpbGRlcj4gc2V0dGVycywKICAgICAgTGlzdDxFeHRlbnNpb25CdWlsZGVyPiBleHRlbnNpb25zLAogICAgICBTY29wZSBwYXJlbnQsCiAgICAgIFN0cmluZyBkZWJ1Z05hbWUsCiAgICAgIHRoaXMuaXNNb2RpZmlhYmxlOiB0cnVlfSkKICAgICAgOiBzdXBlcihsb2NhbCwgc2V0dGVycyA9IHNldHRlcnMgPz8gY29uc3QgPFN0cmluZywgQnVpbGRlcj57fSwgZXh0ZW5zaW9ucywKICAgICAgICAgICAgcGFyZW50LCBkZWJ1Z05hbWUpOwoKICBTY29wZS50b3Aoe2Jvb2wgaXNNb2RpZmlhYmxlOiBmYWxzZX0pCiAgICAgIDogdGhpcygKICAgICAgICAgICAgbG9jYWw6IDxTdHJpbmcsIEJ1aWxkZXI+e30sCiAgICAgICAgICAgIHNldHRlcnM6IDxTdHJpbmcsIEJ1aWxkZXI+e30sCiAgICAgICAgICAgIGRlYnVnTmFtZTogInRvcCIsCiAgICAgICAgICAgIGlzTW9kaWZpYWJsZTogaXNNb2RpZmlhYmxlKTsKCiAgU2NvcGUuaW1tdXRhYmxlKCkKICAgICAgOiB0aGlzKAogICAgICAgICAgICBsb2NhbDogY29uc3QgPFN0cmluZywgQnVpbGRlcj57fSwKICAgICAgICAgICAgc2V0dGVyczogY29uc3QgPFN0cmluZywgQnVpbGRlcj57fSwKICAgICAgICAgICAgZGVidWdOYW1lOiAiaW1tdXRhYmxlIiwKICAgICAgICAgICAgaXNNb2RpZmlhYmxlOiBmYWxzZSk7CgogIFNjb3BlLm5lc3RlZChTY29wZSBwYXJlbnQsIFN0cmluZyBkZWJ1Z05hbWUsIHtib29sIGlzTW9kaWZpYWJsZTogdHJ1ZX0pCiAgICAgIDogdGhpcygKICAgICAgICAgICAgbG9jYWw6IDxTdHJpbmcsIEJ1aWxkZXI+e30sCiAgICAgICAgICAgIHNldHRlcnM6IDxTdHJpbmcsIEJ1aWxkZXI+e30sCiAgICAgICAgICAgIHBhcmVudDogcGFyZW50LAogICAgICAgICAgICBkZWJ1Z05hbWU6IGRlYnVnTmFtZSwKICAgICAgICAgICAgaXNNb2RpZmlhYmxlOiBpc01vZGlmaWFibGUpOwoKICBJdGVyYXRvcjxCdWlsZGVyPiBnZXQgaXRlcmF0b3IgewogICAgcmV0dXJuIG5ldyBTY29wZUxvY2FsRGVjbGFyYXRpb25JdGVyYXRvcih0aGlzKTsKICB9CgogIE5hbWVJdGVyYXRvciBnZXQgbmFtZUl0ZXJhdG9yIHsKICAgIHJldHVybiBuZXcgU2NvcGVMb2NhbERlY2xhcmF0aW9uTmFtZUl0ZXJhdG9yKHRoaXMpOwogIH0KCiAgU2NvcGUgY29weVdpdGhQYXJlbnQoU2NvcGUgcGFyZW50LCBTdHJpbmcgZGVidWdOYW1lKSB7CiAgICByZXR1cm4gbmV3IFNjb3BlKAogICAgICAgIGxvY2FsOiBzdXBlci5sb2NhbCwKICAgICAgICBzZXR0ZXJzOiBzdXBlci5zZXR0ZXJzLAogICAgICAgIGV4dGVuc2lvbnM6IF9leHRlbnNpb25zLAogICAgICAgIHBhcmVudDogcGFyZW50LAogICAgICAgIGRlYnVnTmFtZTogZGVidWdOYW1lLAogICAgICAgIGlzTW9kaWZpYWJsZTogaXNNb2RpZmlhYmxlKTsKICB9CgogIC8vLyBEb24ndCB1c2UgdGhpcy4gVXNlIFtiZWNvbWVQYXJ0T2ZdIGluc3RlYWQuCiAgdm9pZCBzZXQgbG9jYWwoXykgPT4gdW5zdXBwb3J0ZWQoImxvY2FsPSIsIC0xLCBudWxsKTsKCiAgLy8vIERvbid0IHVzZSB0aGlzLiBVc2UgW2JlY29tZVBhcnRPZl0gaW5zdGVhZC4KICB2b2lkIHNldCBzZXR0ZXJzKF8pID0+IHVuc3VwcG9ydGVkKCJzZXR0ZXJzPSIsIC0xLCBudWxsKTsKCiAgLy8vIERvbid0IHVzZSB0aGlzLiBVc2UgW2JlY29tZVBhcnRPZl0gaW5zdGVhZC4KICB2b2lkIHNldCBwYXJlbnQoXykgPT4gdW5zdXBwb3J0ZWQoInBhcmVudD0iLCAtMSwgbnVsbCk7CgogIC8vLyBUaGlzIHNjb3BlIGJlY29tZXMgZXF1aXZhbGVudCB0byBbc2NvcGVdLiBUaGlzIGlzIHVzZWQgZm9yIHBhcnRzIHRvCiAgLy8vIGJlY29tZSBwYXJ0IG9mIHRoZWlyIGxpYnJhcnkncyBzY29wZS4KICB2b2lkIGJlY29tZVBhcnRPZihTY29wZSBzY29wZSkgewogICAgYXNzZXJ0KHBhcmVudC5wYXJlbnQgPT0gbnVsbCk7CiAgICBhc3NlcnQoc2NvcGUucGFyZW50LnBhcmVudCA9PSBudWxsKTsKICAgIHN1cGVyLmxvY2FsID0gc2NvcGUubG9jYWw7CiAgICBzdXBlci5zZXR0ZXJzID0gc2NvcGUuc2V0dGVyczsKICAgIHN1cGVyLnBhcmVudCA9IHNjb3BlLnBhcmVudDsKICAgIHN1cGVyLl9leHRlbnNpb25zID0gc2NvcGUuX2V4dGVuc2lvbnM7CiAgfQoKICBTY29wZSBjcmVhdGVOZXN0ZWRTY29wZShTdHJpbmcgZGVidWdOYW1lLCB7Ym9vbCBpc01vZGlmaWFibGU6IHRydWV9KSB7CiAgICByZXR1cm4gbmV3IFNjb3BlLm5lc3RlZCh0aGlzLCBkZWJ1Z05hbWUsIGlzTW9kaWZpYWJsZTogaXNNb2RpZmlhYmxlKTsKICB9CgogIFNjb3BlIHdpdGhUeXBlVmFyaWFibGVzKExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcykgewogICAgaWYgKHR5cGVWYXJpYWJsZXMgPT0gbnVsbCkgcmV0dXJuIHRoaXM7CiAgICBTY29wZSBuZXdTY29wZSA9CiAgICAgICAgbmV3IFNjb3BlLm5lc3RlZCh0aGlzLCAidHlwZSB2YXJpYWJsZXMiLCBpc01vZGlmaWFibGU6IGZhbHNlKTsKICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciB0IGluIHR5cGVWYXJpYWJsZXMpIHsKICAgICAgbmV3U2NvcGUubG9jYWxbdC5uYW1lXSA9IHQ7CiAgICB9CiAgICByZXR1cm4gbmV3U2NvcGU7CiAgfQoKICAvLy8gQ3JlYXRlIGEgc3BlY2lhbCBzY29wZSBmb3IgdXNlIGJ5IGxhYmVsZWQgc3RhdGVtZW50cy4gVGhpcyBzY29wZSBkb2Vzbid0CiAgLy8vIGludHJvZHVjZSBhIG5ldyBzY29wZSBmb3IgbG9jYWwgdmFyaWFibGVzLCBvbmx5IGZvciBsYWJlbHMuIFRoaXMgZGVhbHMKICAvLy8gd2l0aCBjb3JuZXIgY2FzZXMgbGlrZSB0aGlzOgogIC8vLwogIC8vLyAgICAgTDogdmFyIHg7CiAgLy8vICAgICB4ID0gNDI7CiAgLy8vICAgICBwcmludCgiVGhlIGFuc3dlciBpcyAkeC4iKTsKICBTY29wZSBjcmVhdGVOZXN0ZWRMYWJlbFNjb3BlKCkgewogICAgcmV0dXJuIG5ldyBTY29wZSgKICAgICAgICBsb2NhbDogbG9jYWwsCiAgICAgICAgc2V0dGVyczogc2V0dGVycywKICAgICAgICBleHRlbnNpb25zOiBfZXh0ZW5zaW9ucywKICAgICAgICBwYXJlbnQ6IHBhcmVudCwKICAgICAgICBkZWJ1Z05hbWU6ICJsYWJlbCIsCiAgICAgICAgaXNNb2RpZmlhYmxlOiB0cnVlKTsKICB9CgogIHZvaWQgcmVjb3JkVXNlKFN0cmluZyBuYW1lLCBpbnQgY2hhck9mZnNldCwgVXJpIGZpbGVVcmkpIHsKICAgIGlmIChpc01vZGlmaWFibGUpIHsKICAgICAgdXNlZE5hbWVzID8/PSA8U3RyaW5nLCBpbnQ+e307CiAgICAgIHVzZWROYW1lcy5wdXRJZkFic2VudChuYW1lLCAoKSA9PiBjaGFyT2Zmc2V0KTsKICAgIH0KICB9CgogIEJ1aWxkZXIgbG9va3VwSW4oU3RyaW5nIG5hbWUsIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSwKICAgICAgTWFwPFN0cmluZywgQnVpbGRlcj4gbWFwLCBib29sIGlzSW5zdGFuY2VTY29wZSkgewogICAgQnVpbGRlciBidWlsZGVyID0gbWFwW25hbWVdOwogICAgaWYgKGJ1aWxkZXIgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpZiAoYnVpbGRlci5uZXh0ICE9IG51bGwpIHsKICAgICAgcmV0dXJuIG5ldyBBbWJpZ3VvdXNCdWlsZGVyKG5hbWUuaXNFbXB0eSA/IGNsYXNzTmFtZU9yRGVidWdOYW1lIDogbmFtZSwKICAgICAgICAgIGJ1aWxkZXIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgfSBlbHNlIGlmICghaXNJbnN0YW5jZVNjb3BlICYmIGJ1aWxkZXIuaXNEZWNsYXJhdGlvbkluc3RhbmNlTWVtYmVyKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGJ1aWxkZXI7CiAgICB9CiAgfQoKICBCdWlsZGVyIGxvb2t1cChTdHJpbmcgbmFtZSwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpLAogICAgICB7Ym9vbCBpc0luc3RhbmNlU2NvcGU6IHRydWV9KSB7CiAgICByZWNvcmRVc2UobmFtZSwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICBCdWlsZGVyIGJ1aWxkZXIgPQogICAgICAgIGxvb2t1cEluKG5hbWUsIGNoYXJPZmZzZXQsIGZpbGVVcmksIGxvY2FsLCBpc0luc3RhbmNlU2NvcGUpOwogICAgaWYgKGJ1aWxkZXIgIT0gbnVsbCkgcmV0dXJuIGJ1aWxkZXI7CiAgICBidWlsZGVyID0gbG9va3VwSW4obmFtZSwgY2hhck9mZnNldCwgZmlsZVVyaSwgc2V0dGVycywgaXNJbnN0YW5jZVNjb3BlKTsKICAgIGlmIChidWlsZGVyICE9IG51bGwgJiYgIWJ1aWxkZXIuaGFzUHJvYmxlbSkgewogICAgICByZXR1cm4gbmV3IEFjY2Vzc0Vycm9yQnVpbGRlcihuYW1lLCBidWlsZGVyLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICAgIH0KICAgIGlmICghaXNJbnN0YW5jZVNjb3BlKSB7CiAgICAgIC8vIEZvciBzdGF0aWMgbG9va3VwLCBkbyBub3Qgc2VhcmNoIHRoZSBwYXJlbnQgc2NvcGUuCiAgICAgIHJldHVybiBidWlsZGVyOwogICAgfQogICAgcmV0dXJuIGJ1aWxkZXIgPz8gcGFyZW50Py5sb29rdXAobmFtZSwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgfQoKICBCdWlsZGVyIGxvb2t1cFNldHRlcihTdHJpbmcgbmFtZSwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpLAogICAgICB7Ym9vbCBpc0luc3RhbmNlU2NvcGU6IHRydWV9KSB7CiAgICByZWNvcmRVc2UobmFtZSwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICBCdWlsZGVyIGJ1aWxkZXIgPQogICAgICAgIGxvb2t1cEluKG5hbWUsIGNoYXJPZmZzZXQsIGZpbGVVcmksIHNldHRlcnMsIGlzSW5zdGFuY2VTY29wZSk7CiAgICBpZiAoYnVpbGRlciAhPSBudWxsKSByZXR1cm4gYnVpbGRlcjsKICAgIGJ1aWxkZXIgPSBsb29rdXBJbihuYW1lLCBjaGFyT2Zmc2V0LCBmaWxlVXJpLCBsb2NhbCwgaXNJbnN0YW5jZVNjb3BlKTsKICAgIGlmIChidWlsZGVyICE9IG51bGwgJiYgIWJ1aWxkZXIuaGFzUHJvYmxlbSkgewogICAgICByZXR1cm4gbmV3IEFjY2Vzc0Vycm9yQnVpbGRlcihuYW1lLCBidWlsZGVyLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICAgIH0KICAgIGlmICghaXNJbnN0YW5jZVNjb3BlKSB7CiAgICAgIC8vIEZvciBzdGF0aWMgbG9va3VwLCBkbyBub3Qgc2VhcmNoIHRoZSBwYXJlbnQgc2NvcGUuCiAgICAgIHJldHVybiBidWlsZGVyOwogICAgfQogICAgcmV0dXJuIGJ1aWxkZXIgPz8gcGFyZW50Py5sb29rdXBTZXR0ZXIobmFtZSwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgfQoKICBib29sIGhhc0xvY2FsTGFiZWwoU3RyaW5nIG5hbWUpID0+IGxhYmVscyAhPSBudWxsICYmIGxhYmVscy5jb250YWluc0tleShuYW1lKTsKCiAgdm9pZCBkZWNsYXJlTGFiZWwoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgdGFyZ2V0KSB7CiAgICBpZiAoaXNNb2RpZmlhYmxlKSB7CiAgICAgIGxhYmVscyA/Pz0gPFN0cmluZywgQnVpbGRlcj57fTsKICAgICAgbGFiZWxzW25hbWVdID0gdGFyZ2V0OwogICAgfSBlbHNlIHsKICAgICAgaW50ZXJuYWxQcm9ibGVtKAogICAgICAgICAgbWVzc2FnZUludGVybmFsUHJvYmxlbUV4dGVuZGluZ1VubW9kaWZpYWJsZVNjb3BlLCAtMSwgbnVsbCk7CiAgICB9CiAgfQoKICB2b2lkIGZvcndhcmREZWNsYXJlTGFiZWwoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgdGFyZ2V0KSB7CiAgICBkZWNsYXJlTGFiZWwobmFtZSwgdGFyZ2V0KTsKICAgIGZvcndhcmREZWNsYXJlZExhYmVscyA/Pz0gPFN0cmluZywgQnVpbGRlcj57fTsKICAgIGZvcndhcmREZWNsYXJlZExhYmVsc1tuYW1lXSA9IHRhcmdldDsKICB9CgogIGJvb2wgY2xhaW1MYWJlbChTdHJpbmcgbmFtZSkgewogICAgaWYgKGZvcndhcmREZWNsYXJlZExhYmVscyA9PSBudWxsIHx8CiAgICAgICAgZm9yd2FyZERlY2xhcmVkTGFiZWxzLnJlbW92ZShuYW1lKSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoZm9yd2FyZERlY2xhcmVkTGFiZWxzLmxlbmd0aCA9PSAwKSB7CiAgICAgIGZvcndhcmREZWNsYXJlZExhYmVscyA9IG51bGw7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIE1hcDxTdHJpbmcsIEJ1aWxkZXI+IGdldCB1bmNsYWltZWRGb3J3YXJkRGVjbGFyYXRpb25zIHsKICAgIHJldHVybiBmb3J3YXJkRGVjbGFyZWRMYWJlbHM7CiAgfQoKICBCdWlsZGVyIGxvb2t1cExhYmVsKFN0cmluZyBuYW1lKSB7CiAgICByZXR1cm4gKGxhYmVscyA9PSBudWxsID8gbnVsbCA6IGxhYmVsc1tuYW1lXSkgPz8gcGFyZW50Py5sb29rdXBMYWJlbChuYW1lKTsKICB9CgogIC8vLyBEZWNsYXJlcyB0aGF0IHRoZSBtZWFuaW5nIG9mIFtuYW1lXSBpbiB0aGlzIHNjb3BlIGlzIFtidWlsZGVyXS4KICAvLy8KICAvLy8gSWYgbmFtZSB3YXMgdXNlZCBwcmV2aW91c2x5IGluIHRoaXMgc2NvcGUsIHRoaXMgbWV0aG9kIHJldHVybnMgYSBtZXNzYWdlCiAgLy8vIHRoYXQgY2FuIGJlIHVzZWQgYXMgY29udGV4dCBmb3IgcmVwb3J0aW5nIGEgY29tcGlsZS10aW1lIGVycm9yIGFib3V0CiAgLy8vIFtuYW1lXSBiZWluZyB1c2VkIGJlZm9yZSBpdHMgZGVjbGFyZWQuIFtmaWxlVXJpXSBpcyB1c2VkIHRvIGJpbmQgdGhlCiAgLy8vIGxvY2F0aW9uIG9mIHRoaXMgbWVzc2FnZS4KICBMb2NhdGVkTWVzc2FnZSBkZWNsYXJlKFN0cmluZyBuYW1lLCBCdWlsZGVyIGJ1aWxkZXIsIFVyaSBmaWxlVXJpKSB7CiAgICBpZiAoaXNNb2RpZmlhYmxlKSB7CiAgICAgIGlmICh1c2VkTmFtZXM/LmNvbnRhaW5zS2V5KG5hbWUpID8/IGZhbHNlKSB7CiAgICAgICAgcmV0dXJuIHRlbXBsYXRlRHVwbGljYXRlZE5hbWVQcmV2aW91c2x5VXNlZENhdXNlCiAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKG5hbWUpCiAgICAgICAgICAgIC53aXRoTG9jYXRpb24oZmlsZVVyaSwgdXNlZE5hbWVzW25hbWVdLCBuYW1lLmxlbmd0aCk7CiAgICAgIH0KICAgICAgbG9jYWxbbmFtZV0gPSBidWlsZGVyOwogICAgfSBlbHNlIHsKICAgICAgaW50ZXJuYWxQcm9ibGVtKAogICAgICAgICAgbWVzc2FnZUludGVybmFsUHJvYmxlbUV4dGVuZGluZ1VubW9kaWZpYWJsZVNjb3BlLCAtMSwgbnVsbCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vLyBBZGRzIFtidWlsZGVyXSB0byB0aGUgZXh0ZW5zaW9ucyBpbiB0aGlzIHNjb3BlLgogIHZvaWQgYWRkRXh0ZW5zaW9uKEV4dGVuc2lvbkJ1aWxkZXIgYnVpbGRlcikgewogICAgX2V4dGVuc2lvbnMgPz89IFtdOwogICAgX2V4dGVuc2lvbnMuYWRkKGJ1aWxkZXIpOwogIH0KCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBleHRlbnNpb24gaW4gdGhpcyBzY29wZSBhbmQgcGFyZW50IHNjb3Blcy4KICB2b2lkIGZvckVhY2hFeHRlbnNpb24odm9pZCBGdW5jdGlvbihFeHRlbnNpb25CdWlsZGVyKSBmKSB7CiAgICBfZXh0ZW5zaW9ucz8uZm9yRWFjaChmKTsKICAgIHBhcmVudD8uZm9yRWFjaEV4dGVuc2lvbihmKTsKICB9CgogIHZvaWQgbWVyZ2UoCiAgICAgIFNjb3BlIHNjb3BlLAogICAgICBCdWlsZGVyIGNvbXB1dGVBbWJpZ3VvdXNEZWNsYXJhdGlvbigKICAgICAgICAgIFN0cmluZyBuYW1lLCBCdWlsZGVyIGV4aXN0aW5nLCBCdWlsZGVyIG1lbWJlcikpIHsKICAgIE1hcDxTdHJpbmcsIEJ1aWxkZXI+IG1hcCA9IGxvY2FsOwoKICAgIHZvaWQgbWVyZ2VNZW1iZXIoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgbWVtYmVyKSB7CiAgICAgIEJ1aWxkZXIgZXhpc3RpbmcgPSBtYXBbbmFtZV07CiAgICAgIGlmIChleGlzdGluZyAhPSBudWxsKSB7CiAgICAgICAgaWYgKGV4aXN0aW5nICE9IG1lbWJlcikgewogICAgICAgICAgbWVtYmVyID0gY29tcHV0ZUFtYmlndW91c0RlY2xhcmF0aW9uKG5hbWUsIGV4aXN0aW5nLCBtZW1iZXIpOwogICAgICAgIH0KICAgICAgfQogICAgICBtYXBbbmFtZV0gPSBtZW1iZXI7CiAgICB9CgogICAgc2NvcGUubG9jYWwuZm9yRWFjaChtZXJnZU1lbWJlcik7CiAgICBtYXAgPSBzZXR0ZXJzOwogICAgc2NvcGUuc2V0dGVycy5mb3JFYWNoKG1lcmdlTWVtYmVyKTsKICB9CgogIHZvaWQgZm9yRWFjaChmKFN0cmluZyBuYW1lLCBCdWlsZGVyIG1lbWJlcikpIHsKICAgIGxvY2FsLmZvckVhY2goZik7CiAgICBzZXR0ZXJzLmZvckVhY2goZik7CiAgfQoKICBTdHJpbmcgZ2V0IGRlYnVnU3RyaW5nIHsKICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBpbnQgbmVzdGluZ0xldmVsID0gd3JpdGVPbihidWZmZXIpOwogICAgZm9yIChpbnQgaSA9IG5lc3RpbmdMZXZlbDsgaSA+PSAwOyBpLS0pIHsKICAgICAgYnVmZmVyLndyaXRlbG4oIiR7JyAgJyAqIGl9fSIpOwogICAgfQogICAgcmV0dXJuICIkYnVmZmVyIjsKICB9CgogIGludCB3cml0ZU9uKFN0cmluZ1Npbmsgc2luaykgewogICAgaW50IG5lc3RpbmdMZXZlbCA9IChwYXJlbnQ/LndyaXRlT24oc2luaykgPz8gLTEpICsgMTsKICAgIFN0cmluZyBpbmRlbnQgPSAiICAiICogbmVzdGluZ0xldmVsOwogICAgc2luay53cml0ZWxuKCIkaW5kZW50eyIpOwogICAgbG9jYWwuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgbWVtYmVyKSB7CiAgICAgIHNpbmsud3JpdGVsbigiJGluZGVudCAgJG5hbWUiKTsKICAgIH0pOwogICAgc2V0dGVycy5mb3JFYWNoKChTdHJpbmcgbmFtZSwgQnVpbGRlciBtZW1iZXIpIHsKICAgICAgc2luay53cml0ZWxuKCIkaW5kZW50ICAkbmFtZT0iKTsKICAgIH0pOwogICAgcmV0dXJuIG5lc3RpbmdMZXZlbDsKICB9CgogIFNjb3BlIGNvbXB1dGVNaXhpblNjb3BlKCkgewogICAgTGlzdDxTdHJpbmc+IG5hbWVzID0gdGhpcy5sb2NhbC5rZXlzLnRvTGlzdCgpOwogICAgTWFwPFN0cmluZywgQnVpbGRlcj4gbG9jYWwgPSA8U3RyaW5nLCBCdWlsZGVyPnt9OwogICAgYm9vbCBuZWVkc0NvcHkgPSBmYWxzZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHsKICAgICAgU3RyaW5nIG5hbWUgPSBuYW1lc1tpXTsKICAgICAgQnVpbGRlciBkZWNsYXJhdGlvbiA9IHRoaXMubG9jYWxbbmFtZV07CiAgICAgIGlmIChkZWNsYXJhdGlvbi5pc1N0YXRpYykgewogICAgICAgIG5lZWRzQ29weSA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbG9jYWxbbmFtZV0gPSBkZWNsYXJhdGlvbjsKICAgICAgfQogICAgfQogICAgbmFtZXMgPSB0aGlzLnNldHRlcnMua2V5cy50b0xpc3QoKTsKICAgIE1hcDxTdHJpbmcsIEJ1aWxkZXI+IHNldHRlcnMgPSA8U3RyaW5nLCBCdWlsZGVyPnt9OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykgewogICAgICBTdHJpbmcgbmFtZSA9IG5hbWVzW2ldOwogICAgICBCdWlsZGVyIGRlY2xhcmF0aW9uID0gdGhpcy5zZXR0ZXJzW25hbWVdOwogICAgICBpZiAoZGVjbGFyYXRpb24uaXNTdGF0aWMpIHsKICAgICAgICBuZWVkc0NvcHkgPSB0cnVlOwogICAgICB9IGVsc2UgewogICAgICAgIHNldHRlcnNbbmFtZV0gPSBkZWNsYXJhdGlvbjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5lZWRzQ29weQogICAgICAgID8gbmV3IFNjb3BlKAogICAgICAgICAgICBsb2NhbDogbG9jYWwsCiAgICAgICAgICAgIHNldHRlcnM6IHNldHRlcnMsCiAgICAgICAgICAgIGV4dGVuc2lvbnM6IF9leHRlbnNpb25zLAogICAgICAgICAgICBwYXJlbnQ6IHBhcmVudCwKICAgICAgICAgICAgZGVidWdOYW1lOiBjbGFzc05hbWVPckRlYnVnTmFtZSwKICAgICAgICAgICAgaXNNb2RpZmlhYmxlOiBpc01vZGlmaWFibGUpCiAgICAgICAgOiB0aGlzOwogIH0KfQoKY2xhc3MgU2NvcGVCdWlsZGVyIHsKICBmaW5hbCBTY29wZSBzY29wZTsKCiAgU2NvcGVCdWlsZGVyKHRoaXMuc2NvcGUpOwoKICB2b2lkIGFkZE1lbWJlcihTdHJpbmcgbmFtZSwgQnVpbGRlciBidWlsZGVyKSB7CiAgICBzY29wZS5sb2NhbFtuYW1lXSA9IGJ1aWxkZXI7CiAgfQoKICB2b2lkIGFkZFNldHRlcihTdHJpbmcgbmFtZSwgQnVpbGRlciBidWlsZGVyKSB7CiAgICBzY29wZS5zZXR0ZXJzW25hbWVdID0gYnVpbGRlcjsKICB9CgogIHZvaWQgYWRkRXh0ZW5zaW9uKEV4dGVuc2lvbkJ1aWxkZXIgYnVpbGRlcikgewogICAgc2NvcGUuYWRkRXh0ZW5zaW9uKGJ1aWxkZXIpOwogIH0KCiAgQnVpbGRlciBvcGVyYXRvciBbXShTdHJpbmcgbmFtZSkgPT4gc2NvcGUubG9jYWxbbmFtZV07Cn0KCmFic3RyYWN0IGNsYXNzIFByb2JsZW1CdWlsZGVyIGV4dGVuZHMgQnVpbGRlciB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIGZpbmFsIEJ1aWxkZXIgYnVpbGRlcjsKCiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CgogIGZpbmFsIFVyaSBmaWxlVXJpOwoKICBQcm9ibGVtQnVpbGRlcih0aGlzLm5hbWUsIHRoaXMuYnVpbGRlciwgdGhpcy5jaGFyT2Zmc2V0LCB0aGlzLmZpbGVVcmkpOwoKICBnZXQgdGFyZ2V0ID0+IG51bGw7CgogIGJvb2wgZ2V0IGhhc1Byb2JsZW0gPT4gdHJ1ZTsKCiAgTWVzc2FnZSBnZXQgbWVzc2FnZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBmdWxsTmFtZUZvckVycm9ycyA9PiBuYW1lOwp9CgovLy8gUmVwcmVzZW50cyBhIFtidWlsZGVyXSB0aGF0J3MgYmVpbmcgYWNjZXNzZWQgaW5jb3JyZWN0bHkuIEZvciBleGFtcGxlLCBhbgovLy8gYXR0ZW1wdCB0byB3cml0ZSB0byBhIGZpbmFsIGZpZWxkLCBvciB0byByZWFkIGZyb20gYSBzZXR0ZXIuCmNsYXNzIEFjY2Vzc0Vycm9yQnVpbGRlciBleHRlbmRzIFByb2JsZW1CdWlsZGVyIHsKICBBY2Nlc3NFcnJvckJ1aWxkZXIoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgYnVpbGRlciwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpKQogICAgICA6IHN1cGVyKG5hbWUsIGJ1aWxkZXIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwoKICBAb3ZlcnJpZGUKICBCdWlsZGVyIGdldCBwYXJlbnQgPT4gYnVpbGRlcjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNGaW5hbCA9PiBidWlsZGVyLmlzRmluYWw7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRmllbGQgPT4gYnVpbGRlci5pc0ZpZWxkOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1JlZ3VsYXJNZXRob2QgPT4gYnVpbGRlci5pc1JlZ3VsYXJNZXRob2Q7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzR2V0dGVyID0+ICFidWlsZGVyLmlzR2V0dGVyOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1NldHRlciA9PiAhYnVpbGRlci5pc1NldHRlcjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNEZWNsYXJhdGlvbkluc3RhbmNlTWVtYmVyID0+IGJ1aWxkZXIuaXNEZWNsYXJhdGlvbkluc3RhbmNlTWVtYmVyOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0NsYXNzSW5zdGFuY2VNZW1iZXIgPT4gYnVpbGRlci5pc0NsYXNzSW5zdGFuY2VNZW1iZXI7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRXh0ZW5zaW9uSW5zdGFuY2VNZW1iZXIgPT4gYnVpbGRlci5pc0V4dGVuc2lvbkluc3RhbmNlTWVtYmVyOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1N0YXRpYyA9PiBidWlsZGVyLmlzU3RhdGljOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1RvcExldmVsID0+IGJ1aWxkZXIuaXNUb3BMZXZlbDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNUeXBlRGVjbGFyYXRpb24gPT4gYnVpbGRlci5pc1R5cGVEZWNsYXJhdGlvbjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNMb2NhbCA9PiBidWlsZGVyLmlzTG9jYWw7CgogIEBvdmVycmlkZQogIE1lc3NhZ2UgZ2V0IG1lc3NhZ2UgPT4gdGVtcGxhdGVBY2Nlc3NFcnJvci53aXRoQXJndW1lbnRzKG5hbWUpOwp9CgpjbGFzcyBBbWJpZ3VvdXNCdWlsZGVyIGV4dGVuZHMgUHJvYmxlbUJ1aWxkZXIgewogIEFtYmlndW91c0J1aWxkZXIoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgYnVpbGRlciwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpKQogICAgICA6IHN1cGVyKG5hbWUsIGJ1aWxkZXIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwoKICBAb3ZlcnJpZGUKICBCdWlsZGVyIGdldCBwYXJlbnQgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgTWVzc2FnZSBnZXQgbWVzc2FnZSA9PiB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvblVzZS53aXRoQXJndW1lbnRzKG5hbWUpOwoKICAvLyBUT0RPKGFoZSk6IEFsc28gcHJvdmlkZSBjb250ZXh0LgoKICBCdWlsZGVyIGdldEZpcnN0RGVjbGFyYXRpb24oKSB7CiAgICBCdWlsZGVyIGRlY2xhcmF0aW9uID0gYnVpbGRlcjsKICAgIHdoaWxlIChkZWNsYXJhdGlvbi5uZXh0ICE9IG51bGwpIHsKICAgICAgZGVjbGFyYXRpb24gPSBkZWNsYXJhdGlvbi5uZXh0OwogICAgfQogICAgcmV0dXJuIGRlY2xhcmF0aW9uOwogIH0KfQoKY2xhc3MgU2NvcGVMb2NhbERlY2xhcmF0aW9uSXRlcmF0b3IgaW1wbGVtZW50cyBJdGVyYXRvcjxCdWlsZGVyPiB7CiAgSXRlcmF0b3I8QnVpbGRlcj4gbG9jYWw7CiAgZmluYWwgSXRlcmF0b3I8QnVpbGRlcj4gc2V0dGVyczsKCiAgQG92ZXJyaWRlCiAgQnVpbGRlciBjdXJyZW50OwoKICBTY29wZUxvY2FsRGVjbGFyYXRpb25JdGVyYXRvcihTY29wZSBzY29wZSkKICAgICAgOiBsb2NhbCA9IHNjb3BlLmxvY2FsLnZhbHVlcy5pdGVyYXRvciwKICAgICAgICBzZXR0ZXJzID0gc2NvcGUuc2V0dGVycy52YWx1ZXMuaXRlcmF0b3I7CgogIEBvdmVycmlkZQogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBCdWlsZGVyIG5leHQgPSBjdXJyZW50Py5uZXh0OwogICAgaWYgKG5leHQgIT0gbnVsbCkgewogICAgICBjdXJyZW50ID0gbmV4dDsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAobG9jYWwgIT0gbnVsbCkgewogICAgICBpZiAobG9jYWwubW92ZU5leHQoKSkgewogICAgICAgIGN1cnJlbnQgPSBsb2NhbC5jdXJyZW50OwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGxvY2FsID0gbnVsbDsKICAgIH0KICAgIGlmIChzZXR0ZXJzLm1vdmVOZXh0KCkpIHsKICAgICAgY3VycmVudCA9IHNldHRlcnMuY3VycmVudDsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgewogICAgICBjdXJyZW50ID0gbnVsbDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoKY2xhc3MgU2NvcGVMb2NhbERlY2xhcmF0aW9uTmFtZUl0ZXJhdG9yIGV4dGVuZHMgU2NvcGVMb2NhbERlY2xhcmF0aW9uSXRlcmF0b3IKICAgIGltcGxlbWVudHMgTmFtZUl0ZXJhdG9yIHsKICBJdGVyYXRvcjxTdHJpbmc+IGxvY2FsTmFtZXM7CiAgZmluYWwgSXRlcmF0b3I8U3RyaW5nPiBzZXR0ZXJOYW1lczsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIG5hbWU7CgogIFNjb3BlTG9jYWxEZWNsYXJhdGlvbk5hbWVJdGVyYXRvcihTY29wZSBzY29wZSkKICAgICAgOiBsb2NhbE5hbWVzID0gc2NvcGUubG9jYWwua2V5cy5pdGVyYXRvciwKICAgICAgICBzZXR0ZXJOYW1lcyA9IHNjb3BlLnNldHRlcnMua2V5cy5pdGVyYXRvciwKICAgICAgICBzdXBlcihzY29wZSk7CgogIEBvdmVycmlkZQogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBCdWlsZGVyIG5leHQgPSBjdXJyZW50Py5uZXh0OwogICAgaWYgKG5leHQgIT0gbnVsbCkgewogICAgICBjdXJyZW50ID0gbmV4dDsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAobG9jYWwgIT0gbnVsbCkgewogICAgICBpZiAobG9jYWwubW92ZU5leHQoKSkgewogICAgICAgIGxvY2FsTmFtZXMubW92ZU5leHQoKTsKICAgICAgICBjdXJyZW50ID0gbG9jYWwuY3VycmVudDsKICAgICAgICBuYW1lID0gbG9jYWxOYW1lcy5jdXJyZW50OwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGxvY2FsTmFtZXMgPSBudWxsOwogICAgfQogICAgaWYgKHNldHRlcnMubW92ZU5leHQoKSkgewogICAgICBzZXR0ZXJOYW1lcy5tb3ZlTmV4dCgpOwogICAgICBjdXJyZW50ID0gc2V0dGVycy5jdXJyZW50OwogICAgICBuYW1lID0gc2V0dGVyTmFtZXMuY3VycmVudDsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgewogICAgICBjdXJyZW50ID0gbnVsbDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQqCRABOTjwBFQFPASkBGgkYETodKjMBOgEVJB4BJiABLQZMNwYUBhMqGR8MEyoZHwwTHh4GEzo6TycnDAYmAU8TEAElAUgjKgQBRgIBI00PGwEfAS4BHgEJIyQpFBggUSABKA4oKh4pARQOLjAkIgFKDigqHCIpASM0BAEiOAQBORYcICEYHiUEATI4ATI8ATI6AUosIyMpHyMhKwQBSUoEAUUsFUczIgYVBAFPTSMGFBImIxYWGiEYHB0EAT0YJTUGBAE9OCEmIE4pShMNFgYEATsmKhZFKU0ySQYcPBYGQQQBQSYqFkcpSzJJBhw8FgZHBAFRATMYJh0NF0cGBAE6IDMqBAEhKUItJAYRBAE6IgQBJVAEAUYGT0tLIEYYMzkhQggdDRdHBhEEATYwGB4EAUQ9HSEEAQ4TKzwmATQkHiJICggaBgEmEygEATEWGAQBGy4oLiYGFgQBITopHjImCDQnCBkEAR4zNhwtHi4iGg8jCAYoOC0eMCIaDyUIBhUVGh4lHC0oEAQCARUVARwBMSEEATEjBAEwIQQBOQIBMBUBGQEYARUBSgEWAR8BFwEMKAIBTkEyUDMBDCEBDCcBDCcBDDcBDCoBDCoBDE8BDEMBDEsBDCkBDC0BDDsBDCcBDEICATBOMwEMHgEMTwEmASIjJyYGGAQCAUMbIwEMEwEtLTEBDBQiGBYTBhkeIRUIFAYeIRMNFhQGBAIBTh4fJgEMDwExMDMWAQwUIhgWEwYZHh8hIxUIGQYeHiEiEw0WFAYEAgEmcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3Njb3BlLmRhcnRFc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3NvdXJjZS9zb3VyY2VfY2xhc3NfYnVpbGRlci5kYXJ0q8cvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5zb3VyY2VfY2xhc3NfYnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93IENsYXNzLCBDb25zdHJ1Y3RvciwgTWVtYmVyLCBTdXBlcnR5cGUsIFRyZWVOb2RlOwoKaW1wb3J0ICcuLi9kaWxsL2RpbGxfbWVtYmVyX2J1aWxkZXIuZGFydCcgc2hvdyBEaWxsTWVtYmVyQnVpbGRlcjsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cKICAgICAgICBNZXNzYWdlLAogICAgICAgIG5vTGVuZ3RoLAogICAgICAgIHRlbXBsYXRlQmFkVHlwZVZhcmlhYmxlSW5TdXBlcnR5cGUsCiAgICAgICAgdGVtcGxhdGVDb25mbGljdHNXaXRoQ29uc3RydWN0b3IsCiAgICAgICAgdGVtcGxhdGVDb25mbGljdHNXaXRoRmFjdG9yeSwKICAgICAgICB0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhNZW1iZXIsCiAgICAgICAgdGVtcGxhdGVDb25mbGljdHNXaXRoTWVtYmVyV2FybmluZywKICAgICAgICB0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhTZXR0ZXIsCiAgICAgICAgdGVtcGxhdGVDb25mbGljdHNXaXRoU2V0dGVyV2FybmluZywKICAgICAgICB0ZW1wbGF0ZVN1cGVydHlwZUlzSWxsZWdhbDsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgQ2xhc3NCdWlsZGVyLAogICAgICAgIENvbnN0cnVjdG9yUmVmZXJlbmNlQnVpbGRlciwKICAgICAgICBCdWlsZGVyLAogICAgICAgIEZpZWxkQnVpbGRlciwKICAgICAgICBGdW5jdGlvbkJ1aWxkZXIsCiAgICAgICAgSW52YWxpZFR5cGVCdWlsZGVyLAogICAgICAgIE5hbWVkVHlwZUJ1aWxkZXIsCiAgICAgICAgTGlicmFyeUJ1aWxkZXIsCiAgICAgICAgTWV0YWRhdGFCdWlsZGVyLAogICAgICAgIFNjb3BlLAogICAgICAgIFR5cGVCdWlsZGVyLAogICAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXIsCiAgICAgICAgY29tcGFyZVByb2NlZHVyZXM7CgppbXBvcnQgJy4uL2tlcm5lbC90eXBlX2FsZ29yaXRobXMuZGFydCcgc2hvdyBWYXJpYW5jZSwgY29tcHV0ZVZhcmlhbmNlOwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JyBzaG93IHVuZXhwZWN0ZWQsIHVuaGFuZGxlZDsKCmltcG9ydCAnc291cmNlX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZUxpYnJhcnlCdWlsZGVyOwoKQ2xhc3MgaW5pdGlhbGl6ZUNsYXNzKAogICAgQ2xhc3MgY2xzLAogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzLAogICAgU3RyaW5nIG5hbWUsCiAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBwYXJlbnQsCiAgICBpbnQgc3RhcnRDaGFyT2Zmc2V0LAogICAgaW50IGNoYXJPZmZzZXQsCiAgICBpbnQgY2hhckVuZE9mZnNldCkgewogIGNscyA/Pz0gbmV3IENsYXNzKAogICAgICBuYW1lOiBuYW1lLAogICAgICB0eXBlUGFyYW1ldGVyczoKICAgICAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXIudHlwZVBhcmFtZXRlcnNGcm9tQnVpbGRlcnModHlwZVZhcmlhYmxlcykpOwogIGNscy5maWxlVXJpID8/PSBwYXJlbnQuZmlsZVVyaTsKICBpZiAoY2xzLnN0YXJ0RmlsZU9mZnNldCA9PSBUcmVlTm9kZS5ub09mZnNldCkgewogICAgY2xzLnN0YXJ0RmlsZU9mZnNldCA9IHN0YXJ0Q2hhck9mZnNldDsKICB9CiAgaWYgKGNscy5maWxlT2Zmc2V0ID09IFRyZWVOb2RlLm5vT2Zmc2V0KSB7CiAgICBjbHMuZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgfQogIGlmIChjbHMuZmlsZUVuZE9mZnNldCA9PSBUcmVlTm9kZS5ub09mZnNldCkgewogICAgY2xzLmZpbGVFbmRPZmZzZXQgPSBjaGFyRW5kT2Zmc2V0OwogIH0KCiAgcmV0dXJuIGNsczsKfQoKY2xhc3MgU291cmNlQ2xhc3NCdWlsZGVyIGV4dGVuZHMgQ2xhc3NCdWlsZGVyCiAgICBpbXBsZW1lbnRzIENvbXBhcmFibGU8U291cmNlQ2xhc3NCdWlsZGVyPiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgQ2xhc3MgYWN0dWFsQ2xzOwoKICBmaW5hbCBMaXN0PENvbnN0cnVjdG9yUmVmZXJlbmNlQnVpbGRlcj4gY29uc3RydWN0b3JSZWZlcmVuY2VzOwoKICBUeXBlQnVpbGRlciBtaXhlZEluVHlwZTsKCiAgYm9vbCBpc01peGluRGVjbGFyYXRpb247CgogIFNvdXJjZUNsYXNzQnVpbGRlcigKICAgICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLAogICAgICBpbnQgbW9kaWZpZXJzLAogICAgICBTdHJpbmcgbmFtZSwKICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzLAogICAgICBUeXBlQnVpbGRlciBzdXBlcnR5cGUsCiAgICAgIExpc3Q8VHlwZUJ1aWxkZXI+IGludGVyZmFjZXMsCiAgICAgIExpc3Q8VHlwZUJ1aWxkZXI+IG9uVHlwZXMsCiAgICAgIFNjb3BlIHNjb3BlLAogICAgICBTY29wZSBjb25zdHJ1Y3RvcnMsCiAgICAgIExpYnJhcnlCdWlsZGVyIHBhcmVudCwKICAgICAgdGhpcy5jb25zdHJ1Y3RvclJlZmVyZW5jZXMsCiAgICAgIGludCBzdGFydENoYXJPZmZzZXQsCiAgICAgIGludCBuYW1lT2Zmc2V0LAogICAgICBpbnQgY2hhckVuZE9mZnNldCwKICAgICAge0NsYXNzIGNscywKICAgICAgdGhpcy5taXhlZEluVHlwZSwKICAgICAgdGhpcy5pc01peGluRGVjbGFyYXRpb24gPSBmYWxzZX0pCiAgICAgIDogYWN0dWFsQ2xzID0gaW5pdGlhbGl6ZUNsYXNzKGNscywgdHlwZVZhcmlhYmxlcywgbmFtZSwgcGFyZW50LAogICAgICAgICAgICBzdGFydENoYXJPZmZzZXQsIG5hbWVPZmZzZXQsIGNoYXJFbmRPZmZzZXQpLAogICAgICAgIHN1cGVyKG1ldGFkYXRhLCBtb2RpZmllcnMsIG5hbWUsIHR5cGVWYXJpYWJsZXMsIHN1cGVydHlwZSwgaW50ZXJmYWNlcywKICAgICAgICAgICAgb25UeXBlcywgc2NvcGUsIGNvbnN0cnVjdG9ycywgcGFyZW50LCBuYW1lT2Zmc2V0KTsKCiAgQG92ZXJyaWRlCiAgQ2xhc3MgZ2V0IGNscyA9PiBvcmlnaW4uYWN0dWFsQ2xzOwoKICBAb3ZlcnJpZGUKICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBnZXQgbGlicmFyeSA9PiBzdXBlci5saWJyYXJ5OwoKICBDbGFzcyBidWlsZChTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBMaWJyYXJ5QnVpbGRlciBjb3JlTGlicmFyeSkgewogICAgdm9pZCBidWlsZEJ1aWxkZXJzKFN0cmluZyBuYW1lLCBCdWlsZGVyIGRlY2xhcmF0aW9uKSB7CiAgICAgIGRvIHsKICAgICAgICBpZiAoZGVjbGFyYXRpb24ucGFyZW50ICE9IHRoaXMpIHsKICAgICAgICAgIGlmIChmaWxlVXJpICE9IGRlY2xhcmF0aW9uLnBhcmVudC5maWxlVXJpKSB7CiAgICAgICAgICAgIHVuZXhwZWN0ZWQoIiRmaWxlVXJpIiwgIiR7ZGVjbGFyYXRpb24ucGFyZW50LmZpbGVVcml9IiwgY2hhck9mZnNldCwKICAgICAgICAgICAgICAgIGZpbGVVcmkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdW5leHBlY3RlZChmdWxsTmFtZUZvckVycm9ycywgZGVjbGFyYXRpb24ucGFyZW50Py5mdWxsTmFtZUZvckVycm9ycywKICAgICAgICAgICAgICAgIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24gaXMgRmllbGRCdWlsZGVyKSB7CiAgICAgICAgICAvLyBUT0RPKGFoZSk6IEl0IHdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhIGNvbW1vbiBpbnRlcmZhY2UgZm9yIHRoZQogICAgICAgICAgLy8gYnVpbGQgbWV0aG9kIHRvIGF2b2lkIGR1cGxpY2F0aW5nIHRoZXNlIHR3byBjYXNlcy4KICAgICAgICAgIE1lbWJlciBmaWVsZCA9IGRlY2xhcmF0aW9uLmJ1aWxkKGxpYnJhcnkpOwogICAgICAgICAgaWYgKCFkZWNsYXJhdGlvbi5pc1BhdGNoICYmIGRlY2xhcmF0aW9uLm5leHQgPT0gbnVsbCkgewogICAgICAgICAgICBjbHMuYWRkTWVtYmVyKGZpZWxkKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIEZ1bmN0aW9uQnVpbGRlcikgewogICAgICAgICAgTWVtYmVyIG1lbWJlciA9IGRlY2xhcmF0aW9uLmJ1aWxkKGxpYnJhcnkpOwogICAgICAgICAgbWVtYmVyLnBhcmVudCA9IGNsczsKICAgICAgICAgIGlmICghZGVjbGFyYXRpb24uaXNQYXRjaCAmJiBkZWNsYXJhdGlvbi5uZXh0ID09IG51bGwpIHsKICAgICAgICAgICAgY2xzLmFkZE1lbWJlcihtZW1iZXIpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB1bmhhbmRsZWQoIiR7ZGVjbGFyYXRpb24ucnVudGltZVR5cGV9IiwgImJ1aWxkQnVpbGRlcnMiLAogICAgICAgICAgICAgIGRlY2xhcmF0aW9uLmNoYXJPZmZzZXQsIGRlY2xhcmF0aW9uLmZpbGVVcmkpOwogICAgICAgIH0KICAgICAgICBkZWNsYXJhdGlvbiA9IGRlY2xhcmF0aW9uLm5leHQ7CiAgICAgIH0gd2hpbGUgKGRlY2xhcmF0aW9uICE9IG51bGwpOwogICAgfQoKICAgIHNjb3BlLmZvckVhY2goYnVpbGRCdWlsZGVycyk7CiAgICBjb25zdHJ1Y3RvcnMuZm9yRWFjaChidWlsZEJ1aWxkZXJzKTsKICAgIHN1cGVydHlwZSA9IGNoZWNrU3VwZXJ0eXBlKHN1cGVydHlwZSk7CiAgICBhY3R1YWxDbHMuc3VwZXJ0eXBlID0KICAgICAgICBzdXBlcnR5cGU/LmJ1aWxkU3VwZXJ0eXBlKGxpYnJhcnksIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgaWYgKCFpc01peGluRGVjbGFyYXRpb24gJiYKICAgICAgICBhY3R1YWxDbHMuc3VwZXJ0eXBlICE9IG51bGwgJiYKICAgICAgICBhY3R1YWxDbHMuc3VwZXJjbGFzcy5pc01peGluRGVjbGFyYXRpb24pIHsKICAgICAgLy8gRGVjbGFyZWQgbWl4aW5zIGhhdmUgaW50ZXJmYWNlcyB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCwgYnV0IHRoZXkKICAgICAgLy8gY2Fubm90IGJlIGV4dGVuZGVkLiAgSG93ZXZlciwgYSBtaXhpbiBkZWNsYXJhdGlvbiB3aXRoIGEgc2luZ2xlCiAgICAgIC8vIHN1cGVyY2xhc3MgY29uc3RyYWludCBpcyBlbmNvZGVkIHdpdGggdGhlIGNvbnN0cmFpbnQgYXMgdGhlIHN1cGVydHlwZSwKICAgICAgLy8gYW5kIHRoYXQgaXMgYWxsb3dlZCB0byBiZSBhIG1peGluJ3MgaW50ZXJmYWNlLgogICAgICBsaWJyYXJ5LmFkZFByb2JsZW0oCiAgICAgICAgICB0ZW1wbGF0ZVN1cGVydHlwZUlzSWxsZWdhbC53aXRoQXJndW1lbnRzKGFjdHVhbENscy5zdXBlcmNsYXNzLm5hbWUpLAogICAgICAgICAgY2hhck9mZnNldCwKICAgICAgICAgIG5vTGVuZ3RoLAogICAgICAgICAgZmlsZVVyaSk7CiAgICAgIGFjdHVhbENscy5zdXBlcnR5cGUgPSBudWxsOwogICAgfQogICAgaWYgKGFjdHVhbENscy5zdXBlcnR5cGUgPT0gbnVsbCAmJiBzdXBlcnR5cGUgaXMhIE5hbWVkVHlwZUJ1aWxkZXIpIHsKICAgICAgc3VwZXJ0eXBlID0gbnVsbDsKICAgIH0KICAgIG1peGVkSW5UeXBlID0gY2hlY2tTdXBlcnR5cGUobWl4ZWRJblR5cGUpOwogICAgYWN0dWFsQ2xzLm1peGVkSW5UeXBlID0KICAgICAgICBtaXhlZEluVHlwZT8uYnVpbGRNaXhlZEluVHlwZShsaWJyYXJ5LCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICAgIGlmIChhY3R1YWxDbHMubWl4ZWRJblR5cGUgPT0gbnVsbCAmJiBtaXhlZEluVHlwZSBpcyEgTmFtZWRUeXBlQnVpbGRlcikgewogICAgICBtaXhlZEluVHlwZSA9IG51bGw7CiAgICB9CiAgICBhY3R1YWxDbHMuaXNNaXhpbkRlY2xhcmF0aW9uID0gaXNNaXhpbkRlY2xhcmF0aW9uOwogICAgLy8gVE9ETyhhaGUpOiBJZiBgY2xzLnN1cGVydHlwZWAgaXMgbnVsbCwgYW5kIHRoaXMgaXNuJ3QgT2JqZWN0LCByZXBvcnQgYQogICAgLy8gY29tcGlsZS10aW1lIGVycm9yLgogICAgY2xzLmlzQWJzdHJhY3QgPSBpc0Fic3RyYWN0OwogICAgaWYgKGludGVyZmFjZXMgIT0gbnVsbCkgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGludGVyZmFjZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICBpbnRlcmZhY2VzW2ldID0gY2hlY2tTdXBlcnR5cGUoaW50ZXJmYWNlc1tpXSk7CiAgICAgICAgU3VwZXJ0eXBlIHN1cGVydHlwZSA9CiAgICAgICAgICAgIGludGVyZmFjZXNbaV0uYnVpbGRTdXBlcnR5cGUobGlicmFyeSwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICAgICAgaWYgKHN1cGVydHlwZSAhPSBudWxsKSB7CiAgICAgICAgICAvLyBUT0RPKGFoZSk6IFJlcG9ydCBhbiBlcnJvciBpZiBzdXBlcnR5cGUgaXMgbnVsbC4KICAgICAgICAgIGFjdHVhbENscy5pbXBsZW1lbnRlZFR5cGVzLmFkZChzdXBlcnR5cGUpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGNvbnN0cnVjdG9ycy5mb3JFYWNoKChTdHJpbmcgbmFtZSwgQnVpbGRlciBjb25zdHJ1Y3RvcikgewogICAgICBCdWlsZGVyIG1lbWJlciA9IHNjb3BlQnVpbGRlcltuYW1lXTsKICAgICAgaWYgKG1lbWJlciA9PSBudWxsKSByZXR1cm47CiAgICAgIGlmICghbWVtYmVyLmlzU3RhdGljKSByZXR1cm47CiAgICAgIC8vIFRPRE8oYWhlKTogUmV2aXNpdCB0aGVzZSBtZXNzYWdlcy4gSXQgc2VlbXMgbGlrZSB0aGUgbGFzdCB0d28gc2hvdWxkCiAgICAgIC8vIGJlIGBjb250ZXh0YCBwYXJhbWV0ZXIgdG8gdGhpcyBtZXNzYWdlLgogICAgICBhZGRQcm9ibGVtKHRlbXBsYXRlQ29uZmxpY3RzV2l0aE1lbWJlci53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgY29uc3RydWN0b3IuY2hhck9mZnNldCwgbm9MZW5ndGgpOwogICAgICBpZiAoY29uc3RydWN0b3IuaXNGYWN0b3J5KSB7CiAgICAgICAgYWRkUHJvYmxlbSgKICAgICAgICAgICAgdGVtcGxhdGVDb25mbGljdHNXaXRoRmFjdG9yeS53aXRoQXJndW1lbnRzKCIke3RoaXMubmFtZX0uJHtuYW1lfSIpLAogICAgICAgICAgICBtZW1iZXIuY2hhck9mZnNldCwKICAgICAgICAgICAgbm9MZW5ndGgpOwogICAgICB9IGVsc2UgewogICAgICAgIGFkZFByb2JsZW0oCiAgICAgICAgICAgIHRlbXBsYXRlQ29uZmxpY3RzV2l0aENvbnN0cnVjdG9yCiAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cygiJHt0aGlzLm5hbWV9LiR7bmFtZX0iKSwKICAgICAgICAgICAgbWVtYmVyLmNoYXJPZmZzZXQsCiAgICAgICAgICAgIG5vTGVuZ3RoKTsKICAgICAgfQogICAgfSk7CgogICAgc2NvcGUuc2V0dGVycy5mb3JFYWNoKChTdHJpbmcgbmFtZSwgQnVpbGRlciBzZXR0ZXIpIHsKICAgICAgQnVpbGRlciBtZW1iZXIgPSBzY29wZUJ1aWxkZXJbbmFtZV07CiAgICAgIGlmIChtZW1iZXIgPT0gbnVsbCB8fAogICAgICAgICAgIShtZW1iZXIuaXNGaWVsZCAmJiAhbWVtYmVyLmlzRmluYWwgJiYgIW1lbWJlci5pc0NvbnN0IHx8CiAgICAgICAgICAgICAgbWVtYmVyLmlzUmVndWxhck1ldGhvZCAmJiBtZW1iZXIuaXNTdGF0aWMgJiYgc2V0dGVyLmlzU3RhdGljKSkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAobWVtYmVyLmlzRGVjbGFyYXRpb25JbnN0YW5jZU1lbWJlciA9PQogICAgICAgICAgc2V0dGVyLmlzRGVjbGFyYXRpb25JbnN0YW5jZU1lbWJlcikgewogICAgICAgIGFkZFByb2JsZW0odGVtcGxhdGVDb25mbGljdHNXaXRoTWVtYmVyLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICAgIHNldHRlci5jaGFyT2Zmc2V0LCBub0xlbmd0aCk7CiAgICAgICAgLy8gVE9ETyhhaGUpOiBDb250ZXh0IGFyZ3VtZW50IHRvIHByZXZpb3VzIG1lc3NhZ2U/CiAgICAgICAgYWRkUHJvYmxlbSh0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhTZXR0ZXIud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgICAgbWVtYmVyLmNoYXJPZmZzZXQsIG5vTGVuZ3RoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhZGRQcm9ibGVtKHRlbXBsYXRlQ29uZmxpY3RzV2l0aE1lbWJlcldhcm5pbmcud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgICAgc2V0dGVyLmNoYXJPZmZzZXQsIG5vTGVuZ3RoKTsKICAgICAgICAvLyBUT0RPKGFoZSk6IENvbnRleHQgYXJndW1lbnQgdG8gcHJldmlvdXMgbWVzc2FnZT8KICAgICAgICBhZGRQcm9ibGVtKHRlbXBsYXRlQ29uZmxpY3RzV2l0aFNldHRlcldhcm5pbmcud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgICAgbWVtYmVyLmNoYXJPZmZzZXQsIG5vTGVuZ3RoKTsKICAgICAgfQogICAgfSk7CgogICAgc2NvcGUuc2V0dGVycy5mb3JFYWNoKChTdHJpbmcgbmFtZSwgQnVpbGRlciBzZXR0ZXIpIHsKICAgICAgQnVpbGRlciBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yU2NvcGVCdWlsZGVyW25hbWVdOwogICAgICBpZiAoY29uc3RydWN0b3IgPT0gbnVsbCB8fCAhc2V0dGVyLmlzU3RhdGljKSByZXR1cm47CiAgICAgIGFkZFByb2JsZW0odGVtcGxhdGVDb25mbGljdHNXaXRoQ29uc3RydWN0b3Iud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgIHNldHRlci5jaGFyT2Zmc2V0LCBub0xlbmd0aCk7CiAgICAgIGFkZFByb2JsZW0odGVtcGxhdGVDb25mbGljdHNXaXRoU2V0dGVyLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICBjb25zdHJ1Y3Rvci5jaGFyT2Zmc2V0LCBub0xlbmd0aCk7CiAgICB9KTsKCiAgICBjbHMucHJvY2VkdXJlcy5zb3J0KGNvbXBhcmVQcm9jZWR1cmVzKTsKICAgIHJldHVybiBjbHM7CiAgfQoKICBUeXBlQnVpbGRlciBjaGVja1N1cGVydHlwZShUeXBlQnVpbGRlciBzdXBlcnR5cGUpIHsKICAgIGlmICh0eXBlVmFyaWFibGVzID09IG51bGwgfHwgc3VwZXJ0eXBlID09IG51bGwpIHJldHVybiBzdXBlcnR5cGU7CiAgICBNZXNzYWdlIG1lc3NhZ2U7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVWYXJpYWJsZXMubGVuZ3RoOyArK2kpIHsKICAgICAgaW50IHZhcmlhbmNlID0gY29tcHV0ZVZhcmlhbmNlKHR5cGVWYXJpYWJsZXNbaV0sIHN1cGVydHlwZSk7CiAgICAgIGlmICh2YXJpYW5jZSA9PSBWYXJpYW5jZS5jb250cmF2YXJpYW50IHx8CiAgICAgICAgICB2YXJpYW5jZSA9PSBWYXJpYW5jZS5pbnZhcmlhbnQpIHsKICAgICAgICBtZXNzYWdlID0gdGVtcGxhdGVCYWRUeXBlVmFyaWFibGVJblN1cGVydHlwZS53aXRoQXJndW1lbnRzKAogICAgICAgICAgICB0eXBlVmFyaWFibGVzW2ldLm5hbWUsIHN1cGVydHlwZS5uYW1lKTsKICAgICAgICBsaWJyYXJ5LmFkZFByb2JsZW0obWVzc2FnZSwgY2hhck9mZnNldCwgbm9MZW5ndGgsIGZpbGVVcmkpOwogICAgICB9CiAgICB9CiAgICBpZiAobWVzc2FnZSAhPSBudWxsKSB7CiAgICAgIHJldHVybiBuZXcgTmFtZWRUeXBlQnVpbGRlcihzdXBlcnR5cGUubmFtZSwgbnVsbCkKICAgICAgICAuLmJpbmQobmV3IEludmFsaWRUeXBlQnVpbGRlcihzdXBlcnR5cGUubmFtZSwKICAgICAgICAgICAgbWVzc2FnZS53aXRoTG9jYXRpb24oZmlsZVVyaSwgY2hhck9mZnNldCwgbm9MZW5ndGgpKSk7CiAgICB9CiAgICByZXR1cm4gc3VwZXJ0eXBlOwogIH0KCiAgdm9pZCBhZGRTeW50aGV0aWNDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvcikgewogICAgU3RyaW5nIG5hbWUgPSBjb25zdHJ1Y3Rvci5uYW1lLm5hbWU7CiAgICBjbHMuY29uc3RydWN0b3JzLmFkZChjb25zdHJ1Y3Rvcik7CiAgICBjb25zdHJ1Y3Rvci5wYXJlbnQgPSBjbHM7CiAgICBEaWxsTWVtYmVyQnVpbGRlciBtZW1iZXJCdWlsZGVyID0gbmV3IERpbGxNZW1iZXJCdWlsZGVyKGNvbnN0cnVjdG9yLCB0aGlzKTsKICAgIG1lbWJlckJ1aWxkZXIubmV4dCA9IGNvbnN0cnVjdG9yU2NvcGVCdWlsZGVyW25hbWVdOwogICAgY29uc3RydWN0b3JTY29wZUJ1aWxkZXIuYWRkTWVtYmVyKG5hbWUsIG1lbWJlckJ1aWxkZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGZpbmlzaFBhdGNoKCkgewogICAgaWYgKCFpc1BhdGNoKSByZXR1cm4gMDsKCiAgICAvLyBUT0RPKGFoZSk6IHJlc3RvcmUgZmlsZS1vZmZzZXQgb25jZSB3ZSB0cmFjayBib3RoIG9yaWdpbiBhbmQgcGF0Y2ggZmlsZQogICAgLy8gVVJJcy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvc2RrL2lzc3Vlcy8zMTU3OQogICAgY2xzLmFubm90YXRpb25zLmZvckVhY2goKG0pID0+IG0uZmlsZU9mZnNldCA9IG9yaWdpbi5jbHMuZmlsZU9mZnNldCk7CgogICAgaW50IGNvdW50ID0gMDsKICAgIHNjb3BlLmZvckVhY2goKFN0cmluZyBuYW1lLCBCdWlsZGVyIGRlY2xhcmF0aW9uKSB7CiAgICAgIGNvdW50ICs9IGRlY2xhcmF0aW9uLmZpbmlzaFBhdGNoKCk7CiAgICB9KTsKICAgIGNvbnN0cnVjdG9ycy5mb3JFYWNoKChTdHJpbmcgbmFtZSwgQnVpbGRlciBkZWNsYXJhdGlvbikgewogICAgICBjb3VudCArPSBkZWNsYXJhdGlvbi5maW5pc2hQYXRjaCgpOwogICAgfSk7CiAgICByZXR1cm4gY291bnQ7CiAgfQoKICBMaXN0PEJ1aWxkZXI+IGNvbXB1dGVEaXJlY3RTdXBlcnR5cGVzKENsYXNzQnVpbGRlciBvYmplY3RDbGFzcykgewogICAgZmluYWwgTGlzdDxCdWlsZGVyPiByZXN1bHQgPSA8QnVpbGRlcj5bXTsKICAgIGZpbmFsIFR5cGVCdWlsZGVyIHN1cGVydHlwZSA9IHRoaXMuc3VwZXJ0eXBlOwogICAgaWYgKHN1cGVydHlwZSAhPSBudWxsKSB7CiAgICAgIHJlc3VsdC5hZGQoc3VwZXJ0eXBlLmRlY2xhcmF0aW9uKTsKICAgIH0gZWxzZSBpZiAob2JqZWN0Q2xhc3MgIT0gdGhpcykgewogICAgICByZXN1bHQuYWRkKG9iamVjdENsYXNzKTsKICAgIH0KICAgIGZpbmFsIExpc3Q8VHlwZUJ1aWxkZXI+IGludGVyZmFjZXMgPSB0aGlzLmludGVyZmFjZXM7CiAgICBpZiAoaW50ZXJmYWNlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW50ZXJmYWNlcy5sZW5ndGg7IGkrKykgewogICAgICAgIFR5cGVCdWlsZGVyIGludGVyZmFjZSA9IGludGVyZmFjZXNbaV07CiAgICAgICAgcmVzdWx0LmFkZChpbnRlcmZhY2UuZGVjbGFyYXRpb24pOwogICAgICB9CiAgICB9CiAgICBmaW5hbCBUeXBlQnVpbGRlciBtaXhlZEluVHlwZSA9IHRoaXMubWl4ZWRJblR5cGU7CiAgICBpZiAobWl4ZWRJblR5cGUgIT0gbnVsbCkgewogICAgICByZXN1bHQuYWRkKG1peGVkSW5UeXBlLmRlY2xhcmF0aW9uKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgY29tcGFyZVRvKFNvdXJjZUNsYXNzQnVpbGRlciBvdGhlcikgewogICAgaW50IHJlc3VsdCA9ICIkZmlsZVVyaSIuY29tcGFyZVRvKCIke290aGVyLmZpbGVVcml9Iik7CiAgICBpZiAocmVzdWx0ICE9IDApIHJldHVybiByZXN1bHQ7CiAgICByZXR1cm4gY2hhck9mZnNldC5jb21wYXJlVG8ob3RoZXIuY2hhck9mZnNldCk7CiAgfQp9CoFEAE5OPAEkASE6AUIBHQkREiwqJiUsJSwkAScJFiURFhkcGhgZDxUdGwFIATYBQAEXDy0RIRkUGRUSFkoiMisELSEEMCcEAQ4CAS4wDBkBQQEbARsBFiYVEy8dJCETGh0iGxYZEhgoRjlPPwEMJQEMNQFKOwsqN1AaE1EmDDJMQDVCIgw1Nh9CIwwRQzwKKCUGASIpKxpBHyczS0lQOBpPFhQUIgZJGAYvHEVNGgY3ThshHjQ3HkghPjUKCAYBPisiJE4xQi0jFFAfFw8ULTgfFwgIATorHERPEAgwMEQqPEQqD0sqPEsqCAgBOjs7RyhCLQgBLBAEATZGFTVDMCxENEQIBhs4NkMGFgQBOiknHlA4PAQBDBYcAU8/SgETNyoIPioIEgQBRC4yHSkmHwY6HjQvKwgGNh8rBhMEAQwsOyQzBAIBPHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zb3VyY2Uvc291cmNlX2NsYXNzX2J1aWxkZXIuZGFydEdzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvc291cmNlL3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydMABwAMvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5zb3VyY2VfbGlicmFyeV9idWlsZGVyOwoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnIHNob3cganNvbkVuY29kZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQXJndW1lbnRzLAogICAgICAgIENsYXNzLAogICAgICAgIENvbnN0cnVjdG9yLAogICAgICAgIENvbnN0cnVjdG9ySW52b2NhdGlvbiwKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBEeW5hbWljVHlwZSwKICAgICAgICBFeHByZXNzaW9uLAogICAgICAgIEV4dGVuc2lvbiwKICAgICAgICBGaWVsZCwKICAgICAgICBGdW5jdGlvbk5vZGUsCiAgICAgICAgRnVuY3Rpb25UeXBlLAogICAgICAgIEludGVyZmFjZVR5cGUsCiAgICAgICAgTGlicmFyeSwKICAgICAgICBMaWJyYXJ5RGVwZW5kZW5jeSwKICAgICAgICBMaWJyYXJ5UGFydCwKICAgICAgICBMaXN0TGl0ZXJhbCwKICAgICAgICBNYXBMaXRlcmFsLAogICAgICAgIE1lbWJlciwKICAgICAgICBOYW1lLAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBQcm9jZWR1cmVLaW5kLAogICAgICAgIFNldExpdGVyYWwsCiAgICAgICAgU3RhdGljSW52b2NhdGlvbiwKICAgICAgICBTdHJpbmdMaXRlcmFsLAogICAgICAgIFN1cGVydHlwZSwKICAgICAgICBUeXBlZGVmLAogICAgICAgIFR5cGVQYXJhbWV0ZXIsCiAgICAgICAgVHlwZVBhcmFtZXRlclR5cGUsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiwKICAgICAgICBWb2lkVHlwZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnIHNob3cgQ2xhc3NIaWVyYXJjaHk7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2Nsb25lLmRhcnQnIHNob3cgQ2xvbmVWaXNpdG9yOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9zcmMvYm91bmRzX2NoZWNrcy5kYXJ0JwogICAgc2hvdwogICAgICAgIFR5cGVBcmd1bWVudElzc3VlLAogICAgICAgIGZpbmRUeXBlQXJndW1lbnRJc3N1ZXMsCiAgICAgICAgZmluZFR5cGVBcmd1bWVudElzc3Vlc0Zvckludm9jYXRpb24sCiAgICAgICAgZ2V0R2VuZXJpY1R5cGVOYW1lOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2FsZ2VicmEuZGFydCcgc2hvdyBzdWJzdGl0dXRlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnQnIHNob3cgVHlwZUVudmlyb25tZW50OwoKaW1wb3J0ICcuLi8uLi9iYXNlL3Jlc29sdmVfcmVsYXRpdmVfdXJpLmRhcnQnIHNob3cgcmVzb2x2ZVJlbGF0aXZlVXJpOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJy4uL2J1aWxkZXIvYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIENsYXNzQnVpbGRlciwKICAgICAgICBDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXIsCiAgICAgICAgQnVpbGRlciwKICAgICAgICBFbnVtQ29uc3RhbnRJbmZvLAogICAgICAgIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIsCiAgICAgICAgRnVuY3Rpb25UeXBlQnVpbGRlciwKICAgICAgICBMaWJyYXJ5QnVpbGRlciwKICAgICAgICBNZW1iZXJCdWlsZGVyLAogICAgICAgIE1ldGFkYXRhQnVpbGRlciwKICAgICAgICBOYW1lSXRlcmF0b3IsCiAgICAgICAgUHJlZml4QnVpbGRlciwKICAgICAgICBGdW5jdGlvbkJ1aWxkZXIsCiAgICAgICAgUXVhbGlmaWVkTmFtZSwKICAgICAgICBTY29wZSwKICAgICAgICBUeXBlQnVpbGRlciwKICAgICAgICBUeXBlRGVjbGFyYXRpb25CdWlsZGVyLAogICAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXIsCiAgICAgICAgVW5yZXNvbHZlZFR5cGUsCiAgICAgICAgZmxhdHRlbk5hbWU7CgppbXBvcnQgJy4uL2J1aWxkZXIvZXh0ZW5zaW9uX2J1aWxkZXIuZGFydCc7CgppbXBvcnQgJy4uL2NvbWJpbmF0b3IuZGFydCcgc2hvdyBDb21iaW5hdG9yOwoKaW1wb3J0ICcuLi9jb25maWd1cmF0aW9uLmRhcnQnIHNob3cgQ29uZmlndXJhdGlvbjsKCmltcG9ydCAnLi4vZXhwb3J0LmRhcnQnIHNob3cgRXhwb3J0OwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdwogICAgICAgIEZvcm1hdHRlZE1lc3NhZ2UsCiAgICAgICAgTG9jYXRlZE1lc3NhZ2UsCiAgICAgICAgTWVzc2FnZSwKICAgICAgICBtZXNzYWdlQ29uZmxpY3RzV2l0aFR5cGVWYXJpYWJsZUNhdXNlLAogICAgICAgIG1lc3NhZ2VDb25zdHJ1Y3RvcldpdGhXcm9uZ05hbWUsCiAgICAgICAgbWVzc2FnZUV4cGVjdGVkVXJpLAogICAgICAgIG1lc3NhZ2VNZW1iZXJXaXRoU2FtZU5hbWVBc0NsYXNzLAogICAgICAgIG1lc3NhZ2VHZW5lcmljRnVuY3Rpb25UeXBlSW5Cb3VuZCwKICAgICAgICBtZXNzYWdlR2VuZXJpY0Z1bmN0aW9uVHlwZVVzZWRBc0FjdHVhbFR5cGVBcmd1bWVudCwKICAgICAgICBtZXNzYWdlSW5jb3JyZWN0VHlwZUFyZ3VtZW50VmFyaWFibGUsCiAgICAgICAgbWVzc2FnZUxhbmd1YWdlVmVyc2lvbkludmFsaWRJbkRvdFBhY2thZ2VzLAogICAgICAgIG1lc3NhZ2VMYW5ndWFnZVZlcnNpb25NaXNtYXRjaEluUGFydCwKICAgICAgICBtZXNzYWdlUGFydEV4cG9ydCwKICAgICAgICBtZXNzYWdlUGFydEV4cG9ydENvbnRleHQsCiAgICAgICAgbWVzc2FnZVBhcnRJblBhcnQsCiAgICAgICAgbWVzc2FnZVBhcnRJblBhcnRMaWJyYXJ5Q29udGV4dCwKICAgICAgICBtZXNzYWdlUGFydE9mU2VsZiwKICAgICAgICBtZXNzYWdlUGFydE9mVHdvTGlicmFyaWVzLAogICAgICAgIG1lc3NhZ2VQYXJ0T2ZUd29MaWJyYXJpZXNDb250ZXh0LAogICAgICAgIG1lc3NhZ2VUeXBlVmFyaWFibGVEdXBsaWNhdGVkTmFtZSwKICAgICAgICBtZXNzYWdlVHlwZVZhcmlhYmxlU2FtZU5hbWVBc0VuY2xvc2luZywKICAgICAgICBub0xlbmd0aCwKICAgICAgICBUZW1wbGF0ZSwKICAgICAgICB0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhNZW1iZXIsCiAgICAgICAgdGVtcGxhdGVDb25mbGljdHNXaXRoU2V0dGVyLAogICAgICAgIHRlbXBsYXRlQ29uZmxpY3RzV2l0aFR5cGVWYXJpYWJsZSwKICAgICAgICB0ZW1wbGF0ZUNvbnN0cnVjdG9yV2l0aFdyb25nTmFtZUNvbnRleHQsCiAgICAgICAgdGVtcGxhdGVDb3VsZE5vdFBhcnNlVXJpLAogICAgICAgIHRlbXBsYXRlRGVmZXJyZWRQcmVmaXhEdXBsaWNhdGVkLAogICAgICAgIHRlbXBsYXRlRGVmZXJyZWRQcmVmaXhEdXBsaWNhdGVkQ2F1c2UsCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb24sCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25DYXVzZSwKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWRFeHBvcnQsCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkRXhwb3J0SW5UeXBlLAogICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZEltcG9ydCwKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWRJbXBvcnRJblR5cGUsCiAgICAgICAgdGVtcGxhdGVFeHBvcnRIaWRlc0V4cG9ydCwKICAgICAgICB0ZW1wbGF0ZUdlbmVyaWNGdW5jdGlvblR5cGVJbmZlcnJlZEFzQWN0dWFsVHlwZUFyZ3VtZW50LAogICAgICAgIHRlbXBsYXRlSW1wb3J0SGlkZXNJbXBvcnQsCiAgICAgICAgdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnQsCiAgICAgICAgdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJblJldHVyblR5cGUsCiAgICAgICAgdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJbmZlcnJlZCwKICAgICAgICB0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudFF1YWxpZmllZCwKICAgICAgICB0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudFF1YWxpZmllZEluZmVycmVkLAogICAgICAgIHRlbXBsYXRlSW50ZXJzZWN0aW9uVHlwZUFzVHlwZUFyZ3VtZW50LAogICAgICAgIHRlbXBsYXRlTGFuZ3VhZ2VWZXJzaW9uVG9vSGlnaCwKICAgICAgICB0ZW1wbGF0ZUxvYWRMaWJyYXJ5SGlkZXNNZW1iZXIsCiAgICAgICAgdGVtcGxhdGVMb2NhbERlZmluaXRpb25IaWRlc0V4cG9ydCwKICAgICAgICB0ZW1wbGF0ZUxvY2FsRGVmaW5pdGlvbkhpZGVzSW1wb3J0LAogICAgICAgIHRlbXBsYXRlTWlzc2luZ1BhcnRPZiwKICAgICAgICB0ZW1wbGF0ZU5vdEFQcmVmaXhJblR5cGVBbm5vdGF0aW9uLAogICAgICAgIHRlbXBsYXRlUGFydE9mSW5MaWJyYXJ5LAogICAgICAgIHRlbXBsYXRlUGFydE9mTGlicmFyeU5hbWVNaXNtYXRjaCwKICAgICAgICB0ZW1wbGF0ZVBhcnRPZlVyaU1pc21hdGNoLAogICAgICAgIHRlbXBsYXRlUGFydE9mVXNlVXJpLAogICAgICAgIHRlbXBsYXRlUGFydFR3aWNlLAogICAgICAgIHRlbXBsYXRlUGF0Y2hJbmplY3Rpb25GYWlsZWQsCiAgICAgICAgdGVtcGxhdGVUeXBlVmFyaWFibGVEdXBsaWNhdGVkTmFtZUNhdXNlOwoKaW1wb3J0ICcuLi9pbXBvcnQuZGFydCcgc2hvdyBJbXBvcnQ7CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIEFjY2Vzc0Vycm9yQnVpbGRlciwKICAgICAgICBCdWlsdGluVHlwZUJ1aWxkZXIsCiAgICAgICAgQ2xhc3NCdWlsZGVyLAogICAgICAgIENvbnN0cnVjdG9yUmVmZXJlbmNlQnVpbGRlciwKICAgICAgICBCdWlsZGVyLAogICAgICAgIER5bmFtaWNUeXBlQnVpbGRlciwKICAgICAgICBFbnVtQ29uc3RhbnRJbmZvLAogICAgICAgIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIsCiAgICAgICAgRnVuY3Rpb25UeXBlQnVpbGRlciwKICAgICAgICBJbXBsaWNpdEZpZWxkVHlwZSwKICAgICAgICBJbnZhbGlkVHlwZUJ1aWxkZXIsCiAgICAgICAgQ29uc3RydWN0b3JCdWlsZGVyLAogICAgICAgIEVudW1CdWlsZGVyLAogICAgICAgIEZ1bmN0aW9uQnVpbGRlciwKICAgICAgICBUeXBlQWxpYXNCdWlsZGVyLAogICAgICAgIEZpZWxkQnVpbGRlciwKICAgICAgICBNaXhpbkFwcGxpY2F0aW9uQnVpbGRlciwKICAgICAgICBOYW1lZFR5cGVCdWlsZGVyLAogICAgICAgIFByb2NlZHVyZUJ1aWxkZXIsCiAgICAgICAgUmVkaXJlY3RpbmdGYWN0b3J5QnVpbGRlciwKICAgICAgICBMaWJyYXJ5QnVpbGRlciwKICAgICAgICBMb2FkTGlicmFyeUJ1aWxkZXIsCiAgICAgICAgTWVtYmVyQnVpbGRlciwKICAgICAgICBNZXRhZGF0YUJ1aWxkZXIsCiAgICAgICAgTmFtZUl0ZXJhdG9yLAogICAgICAgIFByZWZpeEJ1aWxkZXIsCiAgICAgICAgUXVhbGlmaWVkTmFtZSwKICAgICAgICBTY29wZSwKICAgICAgICBUeXBlQnVpbGRlciwKICAgICAgICBUeXBlRGVjbGFyYXRpb25CdWlsZGVyLAogICAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXIsCiAgICAgICAgVW5yZXNvbHZlZFR5cGUsCiAgICAgICAgVm9pZFR5cGVCdWlsZGVyLAogICAgICAgIGNvbXBhcmVQcm9jZWR1cmVzLAogICAgICAgIHRvS2VybmVsQ29tYmluYXRvcnM7CgppbXBvcnQgJy4uL2tlcm5lbC9tZXRhZGF0YV9jb2xsZWN0b3IuZGFydCc7CgppbXBvcnQgJy4uL2tlcm5lbC90eXBlX2FsZ29yaXRobXMuZGFydCcKICAgIHNob3cKICAgICAgICBjYWxjdWxhdGVCb3VuZHMsCiAgICAgICAgZmluZEdlbmVyaWNGdW5jdGlvblR5cGVzLAogICAgICAgIGdldE5vblNpbXBsaWNpdHlJc3N1ZXNGb3JEZWNsYXJhdGlvbiwKICAgICAgICBnZXROb25TaW1wbGljaXR5SXNzdWVzRm9yVHlwZVZhcmlhYmxlczsKCmltcG9ydCAnLi4vbG9hZGVyLmRhcnQnIHNob3cgTG9hZGVyOwoKaW1wb3J0ICcuLi9tb2RpZmllci5kYXJ0JwogICAgc2hvdwogICAgICAgIGFic3RyYWN0TWFzaywKICAgICAgICBjb25zdE1hc2ssCiAgICAgICAgZmluYWxNYXNrLAogICAgICAgIGhhc0NvbnN0Q29uc3RydWN0b3JNYXNrLAogICAgICAgIGhhc0luaXRpYWxpemVyTWFzaywKICAgICAgICBpbml0aWFsaXppbmdGb3JtYWxNYXNrLAogICAgICAgIG1peGluRGVjbGFyYXRpb25NYXNrLAogICAgICAgIG5hbWVkTWl4aW5BcHBsaWNhdGlvbk1hc2ssCiAgICAgICAgc3RhdGljTWFzazsKCmltcG9ydCAnLi4vbmFtZXMuZGFydCcgc2hvdyBpbmRleFNldE5hbWU7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgdW5leHBlY3RlZCwgdW5oYW5kbGVkOwoKaW1wb3J0ICcuLi9zZXZlcml0eS5kYXJ0JyBzaG93IFNldmVyaXR5OwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX2luZmVycmVyLmRhcnQnIHNob3cgVHlwZUluZmVycmVySW1wbDsKCmltcG9ydCAnc291cmNlX2NsYXNzX2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VDbGFzc0J1aWxkZXI7CgppbXBvcnQgJ3NvdXJjZV9leHRlbnNpb25fYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZUV4dGVuc2lvbkJ1aWxkZXI7CgppbXBvcnQgJ3NvdXJjZV9sb2FkZXIuZGFydCcgc2hvdyBTb3VyY2VMb2FkZXI7CgpjbGFzcyBTb3VyY2VMaWJyYXJ5QnVpbGRlciBleHRlbmRzIExpYnJhcnlCdWlsZGVyIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIE1BTEZPUk1FRF9VUklfU0NIRU1FID0gIm9yZy1kYXJ0bGFuZy1tYWxmb3JtZWQtdXJpIjsKCiAgZmluYWwgU291cmNlTG9hZGVyIGxvYWRlcjsKCiAgZmluYWwgVHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlciBsaWJyYXJ5RGVjbGFyYXRpb247CgogIGZpbmFsIExpc3Q8Q29uc3RydWN0b3JSZWZlcmVuY2VCdWlsZGVyPiBjb25zdHJ1Y3RvclJlZmVyZW5jZXMgPQogICAgICA8Q29uc3RydWN0b3JSZWZlcmVuY2VCdWlsZGVyPltdOwoKICBmaW5hbCBMaXN0PFNvdXJjZUxpYnJhcnlCdWlsZGVyPiBwYXJ0cyA9IDxTb3VyY2VMaWJyYXJ5QnVpbGRlcj5bXTsKCiAgLy8gQ2FuIEkgdXNlIGxpYnJhcnkucGFydHMgaW5zdGVhZD8gU2VlIFNvdXJjZUxpYnJhcnlCdWlsZGVyLmFkZFBhcnQuCiAgZmluYWwgTGlzdDxpbnQ+IHBhcnRPZmZzZXRzID0gPGludD5bXTsKCiAgZmluYWwgTGlzdDxJbXBvcnQ+IGltcG9ydHMgPSA8SW1wb3J0PltdOwoKICBmaW5hbCBMaXN0PEV4cG9ydD4gZXhwb3J0cyA9IDxFeHBvcnQ+W107CgogIGZpbmFsIFNjb3BlIGltcG9ydFNjb3BlOwoKICBmaW5hbCBVcmkgZmlsZVVyaTsKCiAgZmluYWwgTGlzdDxJbXBsZW1lbnRhdGlvbkluZm8+IGltcGxlbWVudGF0aW9uQnVpbGRlcnMgPQogICAgICA8SW1wbGVtZW50YXRpb25JbmZvPltdOwoKICBmaW5hbCBMaXN0PE9iamVjdD4gYWNjZXNzb3JzID0gPE9iamVjdD5bXTsKCiAgZmluYWwgYm9vbCBsZWdhY3lNb2RlOwoKICBTdHJpbmcgZG9jdW1lbnRhdGlvbkNvbW1lbnQ7CgogIFN0cmluZyBuYW1lOwoKICBTdHJpbmcgcGFydE9mTmFtZTsKCiAgVXJpIHBhcnRPZlVyaTsKCiAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhOwoKICAvLy8gVGhlIGN1cnJlbnQgZGVjbGFyYXRpb24gdGhhdCBpcyBiZWluZyBidWlsdC4gV2hlbiB3ZSBzdGFydCBwYXJzaW5nIGEKICAvLy8gZGVjbGFyYXRpb24gKGNsYXNzLCBtZXRob2QsIGFuZCBzbyBvbiksIHdlIGRvbid0IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uCiAgLy8vIHRvIGNyZWF0ZSBhIGJ1aWxkZXIgYW5kIHRoaXMgb2JqZWN0IHJlY29yZHMgaXRzIG1lbWJlcnMgYW5kIHR5cGVzIHVudGlsLAogIC8vLyBmb3IgZXhhbXBsZSwgW2FkZENsYXNzXSBpcyBjYWxsZWQuCiAgVHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlciBjdXJyZW50VHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlcjsKCiAgYm9vbCBjYW5BZGRJbXBsZW1lbnRhdGlvbkJ1aWxkZXJzID0gZmFsc2U7CgogIC8vLyBOb24tbnVsbCBpZiB0aGlzIGxpYnJhcnkgY2F1c2VzIGFuIGVycm9yIHVwb24gYWNjZXNzLCB0aGF0IGlzLCB0aGVyZSB3YXMKICAvLy8gYW4gZXJyb3IgcmVhZGluZyBpdHMgc291cmNlLgogIE1lc3NhZ2UgYWNjZXNzUHJvYmxlbTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgTGlicmFyeSBsaWJyYXJ5OwoKICBmaW5hbCBTb3VyY2VMaWJyYXJ5QnVpbGRlciBhY3R1YWxPcmlnaW47CgogIGZpbmFsIExpc3Q8RnVuY3Rpb25CdWlsZGVyPiBuYXRpdmVNZXRob2RzID0gPEZ1bmN0aW9uQnVpbGRlcj5bXTsKCiAgZmluYWwgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiBib3VuZGxlc3NUeXBlVmFyaWFibGVzID0KICAgICAgPFR5cGVWYXJpYWJsZUJ1aWxkZXI+W107CgogIC8vIEEgbGlzdCBvZiBhbHRlcm5hdGluZyBmb3J3YXJkZXJzIGFuZCB0aGUgcHJvY2VkdXJlcyB0aGV5IHdlcmUgZ2VuZXJhdGVkCiAgLy8gZm9yLiAgTm90ZSB0aGF0IGl0IG1heSBub3QgaW5jbHVkZSBhIGZvcndhcmRlci1vcmlnaW4gcGFpciBpbiBjYXNlcyB3aGVuCiAgLy8gdGhlIGZvcm1lciBkb2VzIG5vdCBuZWVkIHRvIGJlIHVwZGF0ZWQgYWZ0ZXIgdGhlIGJvZHkgb2YgdGhlIGxhdHRlciB3YXMKICAvLyBidWlsdC4KICBmaW5hbCBMaXN0PFByb2NlZHVyZT4gZm9yd2FyZGVyc09yaWdpbnMgPSA8UHJvY2VkdXJlPltdOwoKICAvLyBMaXN0IG9mIHR5cGVzIGluZmVycmVkIGluIHRoZSBvdXRsaW5lLiAgRXJyb3JzIGluIHRoZXNlIHNob3VsZCBiZSByZXBvcnRlZAogIC8vIGRpZmZlcmVudGx5IHRoYW4gZm9yIHNwZWNpZmllZCB0eXBlcy4KICAvLyBUT0RPKGRtaXRyeWFzKTogIEZpbmQgYSB3YXkgdG8gbWFyayBpbmZlcnJlZCB0eXBlcy4KICBmaW5hbCBTZXQ8RGFydFR5cGU+IGluZmVycmVkVHlwZXMgPSBuZXcgU2V0PERhcnRUeXBlPi5pZGVudGl0eSgpOwoKICAvLyBBIGxpYnJhcnkgdG8gdXNlIGZvciBOYW1lcyBnZW5lcmF0ZWQgd2hlbiBjb21waWxpbmcgY29kZSBpbiB0aGlzIGxpYnJhcnkuCiAgLy8gVGhpcyBhbGxvd3MgY29kZSBnZW5lcmF0ZWQgaW4gb25lIGxpYnJhcnkgdG8gdXNlIHRoZSBwcml2YXRlIG5hbWVzcGFjZSBvZgogIC8vIGFub3RoZXIsIGZvciBleGFtcGxlIGR1cmluZyBleHByZXNzaW9uIGNvbXBpbGF0aW9uIChkZWJ1Z2dpbmcpLgogIExpYnJhcnkgZ2V0IG5hbWVPcmlnaW4gPT4gX25hbWVPcmlnaW4gPz8gbGlicmFyeTsKICBmaW5hbCBMaWJyYXJ5IF9uYW1lT3JpZ2luOwoKICAvLy8gRXhwb3J0cyB0aGF0IGNhbid0IGJlIHNlcmlhbGl6ZWQuCiAgLy8vCiAgLy8vIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGV4cG9ydGVkIG1lbWJlci4KICAvLy8KICAvLy8gSWYgdGhlIG5hbWUgaXMgYGR5bmFtaWNgIG9yIGB2b2lkYCwgdGhpcyBsaWJyYXJ5IHJlZXhwb3J0cyB0aGUKICAvLy8gY29ycmVzcG9uZGluZyB0eXBlIGZyb20gYGRhcnQ6Y29yZWAsIGFuZCB0aGUgdmFsdWUgaXMgbnVsbC4KICAvLy8KICAvLy8gT3RoZXJ3aXNlLCB0aGlzIHJlcHJlc2VudHMgYW4gZXJyb3IgKGFuIGFtYmlndW91cyBleHBvcnQpLiBJbiB0aGlzIGNhc2UsCiAgLy8vIHRoZSBlcnJvciBtZXNzYWdlIGlzIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGluIHRoZSBtYXAuCiAgTWFwPFN0cmluZywgU3RyaW5nPiB1bnNlcmlhbGl6YWJsZUV4cG9ydHM7CgogIExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4gdW50eXBlZEluaXRpYWxpemluZ0Zvcm1hbHM7CgogIExpc3Q8RmllbGRCdWlsZGVyPiBpbXBsaWNpdGx5VHlwZWRGaWVsZHM7CgogIGJvb2wgbGFuZ3VhZ2VWZXJzaW9uRXhwbGljaXRseVNldCA9IGZhbHNlOwoKICBib29sIHBvc3Rwb25lZFByb2JsZW1zSXNzdWVkID0gZmFsc2U7CiAgTGlzdDxQb3N0cG9uZWRQcm9ibGVtPiBwb3N0cG9uZWRQcm9ibGVtczsKCiAgU291cmNlTGlicmFyeUJ1aWxkZXIuaW50ZXJuYWwoU291cmNlTG9hZGVyIGxvYWRlciwgVXJpIGZpbGVVcmksIFNjb3BlIHNjb3BlLAogICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBhY3R1YWxPcmlnaW4sIExpYnJhcnkgbGlicmFyeSwgTGlicmFyeSBuYW1lT3JpZ2luKQogICAgICA6IHRoaXMuZnJvbVNjb3BlcygKICAgICAgICAgICAgbG9hZGVyLAogICAgICAgICAgICBmaWxlVXJpLAogICAgICAgICAgICBuZXcgVHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlci5saWJyYXJ5KCksCiAgICAgICAgICAgIHNjb3BlID8/IG5ldyBTY29wZS50b3AoKSwKICAgICAgICAgICAgYWN0dWFsT3JpZ2luLAogICAgICAgICAgICBsaWJyYXJ5LAogICAgICAgICAgICBuYW1lT3JpZ2luKTsKCiAgU291cmNlTGlicmFyeUJ1aWxkZXIuZnJvbVNjb3BlcygKICAgICAgdGhpcy5sb2FkZXIsCiAgICAgIHRoaXMuZmlsZVVyaSwKICAgICAgdGhpcy5saWJyYXJ5RGVjbGFyYXRpb24sCiAgICAgIHRoaXMuaW1wb3J0U2NvcGUsCiAgICAgIHRoaXMuYWN0dWFsT3JpZ2luLAogICAgICB0aGlzLmxpYnJhcnksCiAgICAgIHRoaXMuX25hbWVPcmlnaW4pCiAgICAgIDogY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIgPSBsaWJyYXJ5RGVjbGFyYXRpb24sCiAgICAgICAgbGVnYWN5TW9kZSA9IGxvYWRlci50YXJnZXQubGVnYWN5TW9kZSwKICAgICAgICBzdXBlcigKICAgICAgICAgICAgZmlsZVVyaSwgbGlicmFyeURlY2xhcmF0aW9uLnRvU2NvcGUoaW1wb3J0U2NvcGUpLCBuZXcgU2NvcGUudG9wKCkpOwoKICBTb3VyY2VMaWJyYXJ5QnVpbGRlcigKICAgICAgVXJpIHVyaSwgVXJpIGZpbGVVcmksIExvYWRlciBsb2FkZXIsIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGFjdHVhbE9yaWdpbiwKICAgICAge1Njb3BlIHNjb3BlLCBMaWJyYXJ5IHRhcmdldCwgTGlicmFyeSBuYW1lT3JpZ2lufSkKICAgICAgOiB0aGlzLmludGVybmFsKAogICAgICAgICAgICBsb2FkZXIsCiAgICAgICAgICAgIGZpbGVVcmksCiAgICAgICAgICAgIHNjb3BlLAogICAgICAgICAgICBhY3R1YWxPcmlnaW4sCiAgICAgICAgICAgIHRhcmdldCA/PwogICAgICAgICAgICAgICAgKGFjdHVhbE9yaWdpbj8ubGlicmFyeSA/PyBuZXcgTGlicmFyeSh1cmksIGZpbGVVcmk6IGZpbGVVcmkpCiAgICAgICAgICAgICAgICAgIC4uc2V0TGFuZ3VhZ2VWZXJzaW9uKGxvYWRlci50YXJnZXQuY3VycmVudFNka1ZlcnNpb25NYWpvciwKICAgICAgICAgICAgICAgICAgICAgIGxvYWRlci50YXJnZXQuY3VycmVudFNka1ZlcnNpb25NaW5vcikpLAogICAgICAgICAgICBuYW1lT3JpZ2luKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNQYXJ0ID0+IHBhcnRPZk5hbWUgIT0gbnVsbCB8fCBwYXJ0T2ZVcmkgIT0gbnVsbDsKCiAgTGlzdDxVbnJlc29sdmVkVHlwZT4gZ2V0IHR5cGVzID0+IGxpYnJhcnlEZWNsYXJhdGlvbi50eXBlczsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTeW50aGV0aWMgPT4gYWNjZXNzUHJvYmxlbSAhPSBudWxsOwoKICBUeXBlQnVpbGRlciBhZGRUeXBlKFR5cGVCdWlsZGVyIHR5cGUsIGludCBjaGFyT2Zmc2V0KSB7CiAgICBjdXJyZW50VHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlcgogICAgICAgIC5hZGRUeXBlKG5ldyBVbnJlc29sdmVkVHlwZSh0eXBlLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKSk7CiAgICByZXR1cm4gdHlwZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgc2V0TGFuZ3VhZ2VWZXJzaW9uKGludCBtYWpvciwgaW50IG1pbm9yLAogICAgICB7aW50IG9mZnNldDogMCwgaW50IGxlbmd0aDogbm9MZW5ndGgsIGJvb2wgZXhwbGljaXQ6IGZhbHNlfSkgewogICAgaWYgKGxhbmd1YWdlVmVyc2lvbkV4cGxpY2l0bHlTZXQpIHJldHVybjsKICAgIGlmIChleHBsaWNpdCkgbGFuZ3VhZ2VWZXJzaW9uRXhwbGljaXRseVNldCA9IHRydWU7CgogICAgaWYgKG1ham9yID09IG51bGwgfHwgbWlub3IgPT0gbnVsbCkgewogICAgICBhZGRQb3N0cG9uZWRQcm9ibGVtKAogICAgICAgICAgbWVzc2FnZUxhbmd1YWdlVmVyc2lvbkludmFsaWRJbkRvdFBhY2thZ2VzLCBvZmZzZXQsIGxlbmd0aCwgZmlsZVVyaSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyBJZiB0cnlpbmcgdG8gc2V0IGEgbGFuZ2F1Z2UgdmVyc2lvbiB0aGF0IGlzIGhpZ2hlciB0aGFuIHRoZSBjdXJyZW50IHNkawogICAgLy8gdmVyc2lvbiBpdCdzIGFuIGVycm9yLgogICAgaWYgKG1ham9yID4gbG9hZGVyLnRhcmdldC5jdXJyZW50U2RrVmVyc2lvbk1ham9yIHx8CiAgICAgICAgKG1ham9yID09IGxvYWRlci50YXJnZXQuY3VycmVudFNka1ZlcnNpb25NYWpvciAmJgogICAgICAgICAgICBtaW5vciA+IGxvYWRlci50YXJnZXQuY3VycmVudFNka1ZlcnNpb25NaW5vcikpIHsKICAgICAgYWRkUG9zdHBvbmVkUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlTGFuZ3VhZ2VWZXJzaW9uVG9vSGlnaC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgIGxvYWRlci50YXJnZXQuY3VycmVudFNka1ZlcnNpb25NYWpvciwKICAgICAgICAgICAgICBsb2FkZXIudGFyZ2V0LmN1cnJlbnRTZGtWZXJzaW9uTWlub3IpLAogICAgICAgICAgb2Zmc2V0LAogICAgICAgICAgbGVuZ3RoLAogICAgICAgICAgZmlsZVVyaSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGxpYnJhcnkuc2V0TGFuZ3VhZ2VWZXJzaW9uKG1ham9yLCBtaW5vcik7CiAgfQoKICBDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXIgYWRkQ29uc3RydWN0b3JSZWZlcmVuY2UoT2JqZWN0IG5hbWUsCiAgICAgIExpc3Q8VHlwZUJ1aWxkZXI+IHR5cGVBcmd1bWVudHMsIFN0cmluZyBzdWZmaXgsIGludCBjaGFyT2Zmc2V0KSB7CiAgICBDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXIgcmVmID0gbmV3IENvbnN0cnVjdG9yUmVmZXJlbmNlQnVpbGRlcigKICAgICAgICBuYW1lLCB0eXBlQXJndW1lbnRzLCBzdWZmaXgsIHRoaXMsIGNoYXJPZmZzZXQpOwogICAgY29uc3RydWN0b3JSZWZlcmVuY2VzLmFkZChyZWYpOwogICAgcmV0dXJuIHJlZjsKICB9CgogIHZvaWQgYmVnaW5OZXN0ZWREZWNsYXJhdGlvbihUeXBlUGFyYW1ldGVyU2NvcGVLaW5kIGtpbmQsIFN0cmluZyBuYW1lLAogICAgICB7Ym9vbCBoYXNNZW1iZXJzOiB0cnVlfSkgewogICAgY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIgPQogICAgICAgIGN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyLmNyZWF0ZU5lc3RlZChraW5kLCBuYW1lLCBoYXNNZW1iZXJzKTsKICB9CgogIFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIgZW5kTmVzdGVkRGVjbGFyYXRpb24oCiAgICAgIFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQga2luZCwgU3RyaW5nIG5hbWUpIHsKICAgIGFzc2VydCgKICAgICAgICBjdXJyZW50VHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlci5raW5kID09IGtpbmQsCiAgICAgICAgIlVuZXhwZWN0ZWQgZGVjbGFyYXRpb24uICIKICAgICAgICAiVHJ5aW5nIHRvIGVuZCBhICR7Y3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIua2luZH0gYXMgYSAka2luZC4iKTsKICAgIGFzc2VydCgKICAgICAgICAobmFtZT8uc3RhcnRzV2l0aChjdXJyZW50VHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlci5uYW1lKSA/PwogICAgICAgICAgICAgICAgKG5hbWUgPT0gY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIubmFtZSkpIHx8CiAgICAgICAgICAgIGN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyLm5hbWUgPT0gIm9wZXJhdG9yIiB8fAogICAgICAgICAgICBpZGVudGljYWwobmFtZSwgIjxzeW50YXgtZXJyb3I+IiksCiAgICAgICAgIiR7bmFtZX0gIT0gJHtjdXJyZW50VHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlci5uYW1lfSIpOwogICAgVHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlciBwcmV2aW91cyA9IGN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyOwogICAgY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIgPSBjdXJyZW50VHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlci5wYXJlbnQ7CiAgICByZXR1cm4gcHJldmlvdXM7CiAgfQoKICBib29sIHVyaUlzVmFsaWQoVXJpIHVyaSkgPT4gdXJpLnNjaGVtZSAhPSBNQUxGT1JNRURfVVJJX1NDSEVNRTsKCiAgVXJpIHJlc29sdmUoVXJpIGJhc2VVcmksIFN0cmluZyB1cmksIGludCB1cmlPZmZzZXQsIHtpc1BhcnQ6IGZhbHNlfSkgewogICAgaWYgKHVyaSA9PSBudWxsKSB7CiAgICAgIGFkZFByb2JsZW0obWVzc2FnZUV4cGVjdGVkVXJpLCB1cmlPZmZzZXQsIG5vTGVuZ3RoLCB0aGlzLnVyaSk7CiAgICAgIHJldHVybiBuZXcgVXJpKHNjaGVtZTogTUFMRk9STUVEX1VSSV9TQ0hFTUUpOwogICAgfQogICAgVXJpIHBhcnNlZFVyaTsKICAgIHRyeSB7CiAgICAgIHBhcnNlZFVyaSA9IFVyaS5wYXJzZSh1cmkpOwogICAgfSBvbiBGb3JtYXRFeGNlcHRpb24gY2F0Y2ggKGUpIHsKICAgICAgLy8gUG9pbnQgdG8gcG9zaXRpb24gaW4gc3RyaW5nIGluZGljYXRlZCBieSB0aGUgZXhjZXB0aW9uLAogICAgICAvLyBvciB0byB0aGUgaW5pdGlhbCBxdW90ZSBpZiBubyBwb3NpdGlvbiBpcyBnaXZlbi4KICAgICAgLy8gKEFzc3VtZXMgdGhlIGRpcmVjdGl2ZSBpcyB1c2luZyBhIHNpbmdsZS1saW5lIHN0cmluZy4pCiAgICAgIGFkZFByb2JsZW0odGVtcGxhdGVDb3VsZE5vdFBhcnNlVXJpLndpdGhBcmd1bWVudHModXJpLCBlLm1lc3NhZ2UpLAogICAgICAgICAgdXJpT2Zmc2V0ICsgMSArIChlLm9mZnNldCA/PyAtMSksIDEsIHRoaXMudXJpKTsKICAgICAgcmV0dXJuIG5ldyBVcmkoCiAgICAgICAgICBzY2hlbWU6IE1BTEZPUk1FRF9VUklfU0NIRU1FLCBxdWVyeTogVXJpLmVuY29kZVF1ZXJ5Q29tcG9uZW50KHVyaSkpOwogICAgfQogICAgaWYgKGlzUGFydCAmJiBiYXNlVXJpLnNjaGVtZSA9PSAiZGFydCIpIHsKICAgICAgLy8gUmVzb2x2ZSB1c2luZyBzcGVjaWFsIHJ1bGVzIGZvciBkYXJ0OiBVUklzCiAgICAgIHJldHVybiByZXNvbHZlUmVsYXRpdmVVcmkoYmFzZVVyaSwgcGFyc2VkVXJpKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBiYXNlVXJpLnJlc29sdmVVcmkocGFyc2VkVXJpKTsKICAgIH0KICB9CgogIFN0cmluZyBjb21wdXRlQW5kVmFsaWRhdGVDb25zdHJ1Y3Rvck5hbWUoT2JqZWN0IG5hbWUsIGludCBjaGFyT2Zmc2V0LAogICAgICB7aXNGYWN0b3J5OiBmYWxzZX0pIHsKICAgIFN0cmluZyBjbGFzc05hbWUgPSBjdXJyZW50VHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlci5uYW1lOwogICAgU3RyaW5nIHByZWZpeDsKICAgIFN0cmluZyBzdWZmaXg7CiAgICBpZiAobmFtZSBpcyBRdWFsaWZpZWROYW1lKSB7CiAgICAgIHByZWZpeCA9IG5hbWUucXVhbGlmaWVyOwogICAgICBzdWZmaXggPSBuYW1lLm5hbWU7CiAgICB9IGVsc2UgewogICAgICBwcmVmaXggPSBuYW1lOwogICAgICBzdWZmaXggPSBudWxsOwogICAgfQogICAgaWYgKHByZWZpeCA9PSBjbGFzc05hbWUpIHsKICAgICAgcmV0dXJuIHN1ZmZpeCA/PyAiIjsKICAgIH0KICAgIGlmIChzdWZmaXggPT0gbnVsbCAmJiAhaXNGYWN0b3J5KSB7CiAgICAgIC8vIEEgbGVnYWwgbmFtZSBmb3IgYSByZWd1bGFyIG1ldGhvZCwgYnV0IG5vdCBmb3IgYSBjb25zdHJ1Y3Rvci4KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgYWRkUHJvYmxlbSgKICAgICAgICBtZXNzYWdlQ29uc3RydWN0b3JXaXRoV3JvbmdOYW1lLCBjaGFyT2Zmc2V0LCBwcmVmaXgubGVuZ3RoLCBmaWxlVXJpLAogICAgICAgIGNvbnRleHQ6IFsKICAgICAgICAgIHRlbXBsYXRlQ29uc3RydWN0b3JXaXRoV3JvbmdOYW1lQ29udGV4dAogICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyLm5hbWUpCiAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbih1cmksIGN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyLmNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICAgIGN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyLm5hbWUubGVuZ3RoKQogICAgICAgIF0pOwoKICAgIHJldHVybiBzdWZmaXg7CiAgfQoKICB2b2lkIGFkZEV4cG9ydCgKICAgICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLAogICAgICBTdHJpbmcgdXJpLAogICAgICBMaXN0PENvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb25zLAogICAgICBMaXN0PENvbWJpbmF0b3I+IGNvbWJpbmF0b3JzLAogICAgICBpbnQgY2hhck9mZnNldCwKICAgICAgaW50IHVyaU9mZnNldCkgewogICAgaWYgKGNvbmZpZ3VyYXRpb25zICE9IG51bGwpIHsKICAgICAgZm9yIChDb25maWd1cmF0aW9uIGNvbmZpZyBpbiBjb25maWd1cmF0aW9ucykgewogICAgICAgIGlmIChsb29rdXBJbXBvcnRDb25kaXRpb24oY29uZmlnLmRvdHRlZE5hbWUpID09IGNvbmZpZy5jb25kaXRpb24pIHsKICAgICAgICAgIHVyaSA9IGNvbmZpZy5pbXBvcnRVcmk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBMaWJyYXJ5QnVpbGRlciBleHBvcnRlZExpYnJhcnkgPSBsb2FkZXIKICAgICAgICAucmVhZChyZXNvbHZlKHRoaXMudXJpLCB1cmksIHVyaU9mZnNldCksIGNoYXJPZmZzZXQsIGFjY2Vzc29yOiB0aGlzKTsKICAgIGV4cG9ydGVkTGlicmFyeS5hZGRFeHBvcnRlcih0aGlzLCBjb21iaW5hdG9ycywgY2hhck9mZnNldCk7CiAgICBleHBvcnRzLmFkZChuZXcgRXhwb3J0KHRoaXMsIGV4cG9ydGVkTGlicmFyeSwgY29tYmluYXRvcnMsIGNoYXJPZmZzZXQpKTsKICB9CgogIFN0cmluZyBsb29rdXBJbXBvcnRDb25kaXRpb24oU3RyaW5nIGRvdHRlZE5hbWUpIHsKICAgIGNvbnN0IFN0cmluZyBwcmVmaXggPSAiZGFydC5saWJyYXJ5LiI7CiAgICBpZiAoIWRvdHRlZE5hbWUuc3RhcnRzV2l0aChwcmVmaXgpKSByZXR1cm4gIiI7CiAgICBkb3R0ZWROYW1lID0gZG90dGVkTmFtZS5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCk7CiAgICBpZiAoIWxvYWRlci50YXJnZXQudXJpVHJhbnNsYXRvci5pc0xpYnJhcnlTdXBwb3J0ZWQoZG90dGVkTmFtZSkpIHJldHVybiAiIjsKCiAgICBMaWJyYXJ5QnVpbGRlciBpbXBvcnRlZCA9CiAgICAgICAgbG9hZGVyLmJ1aWxkZXJzW25ldyBVcmkoc2NoZW1lOiAiZGFydCIsIHBhdGg6IGRvdHRlZE5hbWUpXTsKCiAgICBpZiAoaW1wb3J0ZWQgPT0gbnVsbCkgewogICAgICBMaWJyYXJ5QnVpbGRlciBjb3JlTGlicmFyeSA9IGxvYWRlci5yZWFkKAogICAgICAgICAgcmVzb2x2ZSgKICAgICAgICAgICAgICB0aGlzLnVyaSwgbmV3IFVyaShzY2hlbWU6ICJkYXJ0IiwgcGF0aDogImNvcmUiKS50b1N0cmluZygpLCAtMSksCiAgICAgICAgICAtMSk7CiAgICAgIGltcG9ydGVkID0gY29yZUxpYnJhcnkKICAgICAgICAgIC5sb2FkZXIuYnVpbGRlcnNbbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogZG90dGVkTmFtZSldOwogICAgfQogICAgcmV0dXJuIGltcG9ydGVkICE9IG51bGwgPyAidHJ1ZSIgOiAiIjsKICB9CgogIHZvaWQgYWRkSW1wb3J0KAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIFN0cmluZyB1cmksCiAgICAgIExpc3Q8Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbnMsCiAgICAgIFN0cmluZyBwcmVmaXgsCiAgICAgIExpc3Q8Q29tYmluYXRvcj4gY29tYmluYXRvcnMsCiAgICAgIGJvb2wgZGVmZXJyZWQsCiAgICAgIGludCBjaGFyT2Zmc2V0LAogICAgICBpbnQgcHJlZml4Q2hhck9mZnNldCwKICAgICAgaW50IHVyaU9mZnNldCwKICAgICAgaW50IGltcG9ydEluZGV4KSB7CiAgICBpZiAoY29uZmlndXJhdGlvbnMgIT0gbnVsbCkgewogICAgICBmb3IgKENvbmZpZ3VyYXRpb24gY29uZmlnIGluIGNvbmZpZ3VyYXRpb25zKSB7CiAgICAgICAgaWYgKGxvb2t1cEltcG9ydENvbmRpdGlvbihjb25maWcuZG90dGVkTmFtZSkgPT0gY29uZmlnLmNvbmRpdGlvbikgewogICAgICAgICAgdXJpID0gY29uZmlnLmltcG9ydFVyaTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIExpYnJhcnlCdWlsZGVyIGJ1aWxkZXIgPSBudWxsOwoKICAgIFVyaSByZXNvbHZlZFVyaTsKICAgIFN0cmluZyBuYXRpdmVQYXRoOwogICAgY29uc3QgU3RyaW5nIG5hdGl2ZUV4dGVuc2lvblNjaGVtZSA9ICJkYXJ0LWV4dDoiOwogICAgaWYgKHVyaS5zdGFydHNXaXRoKG5hdGl2ZUV4dGVuc2lvblNjaGVtZSkpIHsKICAgICAgU3RyaW5nIHN0cmlwcGVkVXJpID0gdXJpLnN1YnN0cmluZyhuYXRpdmVFeHRlbnNpb25TY2hlbWUubGVuZ3RoKTsKICAgICAgaWYgKHN0cmlwcGVkVXJpLnN0YXJ0c1dpdGgoInBhY2thZ2UiKSkgewogICAgICAgIHJlc29sdmVkVXJpID0gcmVzb2x2ZSgKICAgICAgICAgICAgdGhpcy51cmksIHN0cmlwcGVkVXJpLCB1cmlPZmZzZXQgKyBuYXRpdmVFeHRlbnNpb25TY2hlbWUubGVuZ3RoKTsKICAgICAgICByZXNvbHZlZFVyaSA9IGxvYWRlci50YXJnZXQudHJhbnNsYXRlVXJpKHJlc29sdmVkVXJpKTsKICAgICAgICBuYXRpdmVQYXRoID0gcmVzb2x2ZWRVcmkudG9TdHJpbmcoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXNvbHZlZFVyaSA9IG5ldyBVcmkoc2NoZW1lOiAiZGFydC1leHQiLCBwYXRoU2VnbWVudHM6IFt1cmldKTsKICAgICAgICBuYXRpdmVQYXRoID0gdXJpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZXNvbHZlZFVyaSA9IHJlc29sdmUodGhpcy51cmksIHVyaSwgdXJpT2Zmc2V0KTsKICAgICAgYnVpbGRlciA9IGxvYWRlci5yZWFkKHJlc29sdmVkVXJpLCB1cmlPZmZzZXQsIGFjY2Vzc29yOiB0aGlzKTsKICAgIH0KCiAgICBpbXBvcnRzLmFkZChuZXcgSW1wb3J0KHRoaXMsIGJ1aWxkZXIsIGRlZmVycmVkLCBwcmVmaXgsIGNvbWJpbmF0b3JzLAogICAgICAgIGNvbmZpZ3VyYXRpb25zLCBjaGFyT2Zmc2V0LCBwcmVmaXhDaGFyT2Zmc2V0LCBpbXBvcnRJbmRleCwKICAgICAgICBuYXRpdmVJbXBvcnRQYXRoOiBuYXRpdmVQYXRoKSk7CiAgfQoKICB2b2lkIGFkZFBhcnQoTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLCBTdHJpbmcgdXJpLCBpbnQgY2hhck9mZnNldCkgewogICAgVXJpIHJlc29sdmVkVXJpOwogICAgVXJpIG5ld0ZpbGVVcmk7CiAgICByZXNvbHZlZFVyaSA9IHJlc29sdmUodGhpcy51cmksIHVyaSwgY2hhck9mZnNldCwgaXNQYXJ0OiB0cnVlKTsKICAgIG5ld0ZpbGVVcmkgPSByZXNvbHZlKGZpbGVVcmksIHVyaSwgY2hhck9mZnNldCk7CiAgICBwYXJ0cy5hZGQobG9hZGVyLnJlYWQocmVzb2x2ZWRVcmksIGNoYXJPZmZzZXQsCiAgICAgICAgZmlsZVVyaTogbmV3RmlsZVVyaSwgYWNjZXNzb3I6IHRoaXMpKTsKICAgIHBhcnRPZmZzZXRzLmFkZChjaGFyT2Zmc2V0KTsKCiAgICAvLyBUT0RPKGFoZSk6IFttZXRhZGF0YV0gc2hvdWxkIGJlIHN0b3JlZCwgZXZhbHVhdGVkLCBhbmQgYWRkZWQgdG8gW3BhcnRdLgogICAgTGlicmFyeVBhcnQgcGFydCA9IG5ldyBMaWJyYXJ5UGFydCg8RXhwcmVzc2lvbj5bXSwgdXJpKQogICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogICAgbGlicmFyeS5hZGRQYXJ0KHBhcnQpOwogIH0KCiAgdm9pZCBhZGRQYXJ0T2YoCiAgICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSwgU3RyaW5nIG5hbWUsIFN0cmluZyB1cmksIGludCB1cmlPZmZzZXQpIHsKICAgIHBhcnRPZk5hbWUgPSBuYW1lOwogICAgaWYgKHVyaSAhPSBudWxsKSB7CiAgICAgIHBhcnRPZlVyaSA9IHJlc29sdmUodGhpcy51cmksIHVyaSwgdXJpT2Zmc2V0KTsKICAgICAgVXJpIG5ld0ZpbGVVcmkgPSByZXNvbHZlKGZpbGVVcmksIHVyaSwgdXJpT2Zmc2V0KTsKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IGxvYWRlci5yZWFkKHBhcnRPZlVyaSwgdXJpT2Zmc2V0LAogICAgICAgICAgZmlsZVVyaTogbmV3RmlsZVVyaSwgYWNjZXNzb3I6IHRoaXMpOwogICAgICBpZiAobG9hZGVyLmZpcnN0ID09IHRoaXMpIHsKICAgICAgICAvLyBUaGlzIGlzIGEgcGFydCwgYW5kIGl0IHdhcyB0aGUgZmlyc3QgaW5wdXQuIExldCB0aGUgbG9hZGVyIGtub3cKICAgICAgICAvLyBhYm91dCB0aGF0LgogICAgICAgIGxvYWRlci5maXJzdCA9IGxpYnJhcnk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgYWRkRmllbGRzKFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCwgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLAogICAgICBpbnQgbW9kaWZpZXJzLCBUeXBlQnVpbGRlciB0eXBlLCBMaXN0PEZpZWxkSW5mbz4gZmllbGRJbmZvcykgewogICAgZm9yIChGaWVsZEluZm8gaW5mbyBpbiBmaWVsZEluZm9zKSB7CiAgICAgIGJvb2wgaXNDb25zdCA9IG1vZGlmaWVycyAmIGNvbnN0TWFzayAhPSAwOwogICAgICBib29sIGlzRmluYWwgPSBtb2RpZmllcnMgJiBmaW5hbE1hc2sgIT0gMDsKICAgICAgYm9vbCBwb3RlbnRpYWxseU5lZWRJbml0aWFsaXplckluT3V0bGluZSA9IGlzQ29uc3QgfHwgaXNGaW5hbDsKICAgICAgVG9rZW4gc3RhcnRUb2tlbjsKICAgICAgaWYgKHBvdGVudGlhbGx5TmVlZEluaXRpYWxpemVySW5PdXRsaW5lIHx8CiAgICAgICAgICAodHlwZSA9PSBudWxsICYmICFsZWdhY3lNb2RlKSkgewogICAgICAgIHN0YXJ0VG9rZW4gPSBpbmZvLmluaXRpYWxpemVyVG9rZW47CiAgICAgIH0KICAgICAgaWYgKHN0YXJ0VG9rZW4gIT0gbnVsbCkgewogICAgICAgIC8vIEV4dHJhY3Qgb25seSB0aGUgdG9rZW5zIGZvciB0aGUgaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbiBmcm9tIHRoZQogICAgICAgIC8vIHRva2VuIHN0cmVhbS4KICAgICAgICBUb2tlbiBlbmRUb2tlbiA9IGluZm8uYmVmb3JlTGFzdDsKICAgICAgICBlbmRUb2tlbi5zZXROZXh0KG5ldyBUb2tlbi5lb2YoZW5kVG9rZW4ubmV4dC5vZmZzZXQpKTsKICAgICAgICBuZXcgVG9rZW4uZW9mKHN0YXJ0VG9rZW4ucHJldmlvdXMub2Zmc2V0KS5zZXROZXh0KHN0YXJ0VG9rZW4pOwogICAgICB9CiAgICAgIGJvb2wgaGFzSW5pdGlhbGl6ZXIgPSBpbmZvLmluaXRpYWxpemVyVG9rZW4gIT0gbnVsbDsKICAgICAgYWRkRmllbGQoZG9jdW1lbnRhdGlvbkNvbW1lbnQsIG1ldGFkYXRhLCBtb2RpZmllcnMsIHR5cGUsIGluZm8ubmFtZSwKICAgICAgICAgIGluZm8uY2hhck9mZnNldCwgaW5mby5jaGFyRW5kT2Zmc2V0LCBzdGFydFRva2VuLCBoYXNJbml0aWFsaXplciwKICAgICAgICAgIGNvbnN0SW5pdGlhbGl6ZXJUb2tlbjoKICAgICAgICAgICAgICBwb3RlbnRpYWxseU5lZWRJbml0aWFsaXplckluT3V0bGluZSA/IHN0YXJ0VG9rZW4gOiBudWxsKTsKICAgIH0KICB9CgogIEJ1aWxkZXIgYWRkQnVpbGRlcihTdHJpbmcgbmFtZSwgQnVpbGRlciBkZWNsYXJhdGlvbiwgaW50IGNoYXJPZmZzZXQpIHsKICAgIC8vIFRPRE8oYWhlKTogU2V0IHRoZSBwYXJlbnQgY29ycmVjdGx5IGhlcmUuIENvdWxkIHRoZW4gY2hhbmdlIHRoZQogICAgLy8gaW1wbGVtZW50YXRpb24gb2YgTWVtYmVyQnVpbGRlci5pc1RvcExldmVsIHRvIHRlc3QgZXhwbGljaXRseSBmb3IgYQogICAgLy8gTGlicmFyeUJ1aWxkZXIuCiAgICBpZiAobmFtZSA9PSBudWxsKSB7CiAgICAgIHVuaGFuZGxlZCgibnVsbCIsICJuYW1lIiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICB9CiAgICBpZiAoY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIgPT0gbGlicmFyeURlY2xhcmF0aW9uKSB7CiAgICAgIGlmIChkZWNsYXJhdGlvbiBpcyBNZW1iZXJCdWlsZGVyKSB7CiAgICAgICAgZGVjbGFyYXRpb24ucGFyZW50ID0gdGhpczsKICAgICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBUeXBlRGVjbGFyYXRpb25CdWlsZGVyKSB7CiAgICAgICAgZGVjbGFyYXRpb24ucGFyZW50ID0gdGhpczsKICAgICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBQcmVmaXhCdWlsZGVyKSB7CiAgICAgICAgYXNzZXJ0KGRlY2xhcmF0aW9uLnBhcmVudCA9PSB0aGlzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gdW5oYW5kbGVkKAogICAgICAgICAgICAiJHtkZWNsYXJhdGlvbi5ydW50aW1lVHlwZX0iLCAiYWRkQnVpbGRlciIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIucGFyZW50ID09IGxpYnJhcnlEZWNsYXJhdGlvbik7CiAgICB9CiAgICBib29sIGlzQ29uc3RydWN0b3IgPSBkZWNsYXJhdGlvbiBpcyBGdW5jdGlvbkJ1aWxkZXIgJiYKICAgICAgICAoZGVjbGFyYXRpb24uaXNDb25zdHJ1Y3RvciB8fCBkZWNsYXJhdGlvbi5pc0ZhY3RvcnkpOwogICAgaWYgKCFpc0NvbnN0cnVjdG9yICYmIG5hbWUgPT0gY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIubmFtZSkgewogICAgICBhZGRQcm9ibGVtKAogICAgICAgICAgbWVzc2FnZU1lbWJlcldpdGhTYW1lTmFtZUFzQ2xhc3MsIGNoYXJPZmZzZXQsIG5vTGVuZ3RoLCBmaWxlVXJpKTsKICAgIH0KICAgIE1hcDxTdHJpbmcsIEJ1aWxkZXI+IG1lbWJlcnMgPSBpc0NvbnN0cnVjdG9yCiAgICAgICAgPyBjdXJyZW50VHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlci5jb25zdHJ1Y3RvcnMKICAgICAgICA6IChkZWNsYXJhdGlvbi5pc1NldHRlcgogICAgICAgICAgICA/IGN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyLnNldHRlcnMKICAgICAgICAgICAgOiBjdXJyZW50VHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlci5tZW1iZXJzKTsKICAgIEJ1aWxkZXIgZXhpc3RpbmcgPSBtZW1iZXJzW25hbWVdOwogICAgaWYgKGRlY2xhcmF0aW9uLm5leHQgIT0gbnVsbCAmJiBkZWNsYXJhdGlvbi5uZXh0ICE9IGV4aXN0aW5nKSB7CiAgICAgIHVuZXhwZWN0ZWQoCiAgICAgICAgICAiJHtkZWNsYXJhdGlvbi5uZXh0LmZpbGVVcml9QCR7ZGVjbGFyYXRpb24ubmV4dC5jaGFyT2Zmc2V0fSIsCiAgICAgICAgICAiJHtleGlzdGluZz8uZmlsZVVyaX1AJHtleGlzdGluZz8uY2hhck9mZnNldH0iLAogICAgICAgICAgZGVjbGFyYXRpb24uY2hhck9mZnNldCwKICAgICAgICAgIGRlY2xhcmF0aW9uLmZpbGVVcmkpOwogICAgfQogICAgZGVjbGFyYXRpb24ubmV4dCA9IGV4aXN0aW5nOwogICAgaWYgKGRlY2xhcmF0aW9uIGlzIFByZWZpeEJ1aWxkZXIgJiYgZXhpc3RpbmcgaXMgUHJlZml4QnVpbGRlcikgewogICAgICBhc3NlcnQoZXhpc3RpbmcubmV4dCBpcyEgUHJlZml4QnVpbGRlcik7CiAgICAgIEJ1aWxkZXIgZGVmZXJyZWQ7CiAgICAgIEJ1aWxkZXIgb3RoZXI7CiAgICAgIGlmIChkZWNsYXJhdGlvbi5kZWZlcnJlZCkgewogICAgICAgIGRlZmVycmVkID0gZGVjbGFyYXRpb247CiAgICAgICAgb3RoZXIgPSBleGlzdGluZzsKICAgICAgfSBlbHNlIGlmIChleGlzdGluZy5kZWZlcnJlZCkgewogICAgICAgIGRlZmVycmVkID0gZXhpc3Rpbmc7CiAgICAgICAgb3RoZXIgPSBkZWNsYXJhdGlvbjsKICAgICAgfQogICAgICBpZiAoZGVmZXJyZWQgIT0gbnVsbCkgewogICAgICAgIGFkZFByb2JsZW0odGVtcGxhdGVEZWZlcnJlZFByZWZpeER1cGxpY2F0ZWQud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgICAgZGVmZXJyZWQuY2hhck9mZnNldCwgbm9MZW5ndGgsIGZpbGVVcmksCiAgICAgICAgICAgIGNvbnRleHQ6IFsKICAgICAgICAgICAgICB0ZW1wbGF0ZURlZmVycmVkUHJlZml4RHVwbGljYXRlZENhdXNlCiAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKG5hbWUpCiAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24oZmlsZVVyaSwgb3RoZXIuY2hhck9mZnNldCwgbm9MZW5ndGgpCiAgICAgICAgICAgIF0pOwogICAgICB9CiAgICAgIHJldHVybiBleGlzdGluZwogICAgICAgIC4uZXhwb3J0U2NvcGUubWVyZ2UoZGVjbGFyYXRpb24uZXhwb3J0U2NvcGUsCiAgICAgICAgICAgIChTdHJpbmcgbmFtZSwgQnVpbGRlciBleGlzdGluZywgQnVpbGRlciBtZW1iZXIpIHsKICAgICAgICAgIHJldHVybiBjb21wdXRlQW1iaWd1b3VzRGVjbGFyYXRpb24oCiAgICAgICAgICAgICAgbmFtZSwgZXhpc3RpbmcsIG1lbWJlciwgY2hhck9mZnNldCk7CiAgICAgICAgfSk7CiAgICB9IGVsc2UgaWYgKGlzRHVwbGljYXRlZERlY2xhcmF0aW9uKGV4aXN0aW5nLCBkZWNsYXJhdGlvbikpIHsKICAgICAgU3RyaW5nIGZ1bGxOYW1lID0gbmFtZTsKICAgICAgaWYgKGlzQ29uc3RydWN0b3IpIHsKICAgICAgICBpZiAobmFtZS5pc0VtcHR5KSB7CiAgICAgICAgICBmdWxsTmFtZSA9IGN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyLm5hbWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZ1bGxOYW1lID0gIiR7Y3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIubmFtZX0uJG5hbWUiOwogICAgICAgIH0KICAgICAgfQogICAgICBhZGRQcm9ibGVtKHRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uLndpdGhBcmd1bWVudHMoZnVsbE5hbWUpLAogICAgICAgICAgY2hhck9mZnNldCwgZnVsbE5hbWUubGVuZ3RoLCBkZWNsYXJhdGlvbi5maWxlVXJpLAogICAgICAgICAgY29udGV4dDogPExvY2F0ZWRNZXNzYWdlPlsKICAgICAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25DYXVzZQogICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoZnVsbE5hbWUpCiAgICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmZpbGVVcmksIGV4aXN0aW5nLmNoYXJPZmZzZXQsIGZ1bGxOYW1lLmxlbmd0aCkKICAgICAgICAgIF0pOwogICAgfQogICAgaWYgKGRlY2xhcmF0aW9uLmlzRXh0ZW5zaW9uKSB7CiAgICAgIGN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyLmV4dGVuc2lvbnMuYWRkKGRlY2xhcmF0aW9uKTsKICAgIH0KICAgIHJldHVybiBtZW1iZXJzW25hbWVdID0gZGVjbGFyYXRpb247CiAgfQoKICBib29sIGlzRHVwbGljYXRlZERlY2xhcmF0aW9uKEJ1aWxkZXIgZXhpc3RpbmcsIEJ1aWxkZXIgb3RoZXIpIHsKICAgIGlmIChleGlzdGluZyA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICBCdWlsZGVyIG5leHQgPSBleGlzdGluZy5uZXh0OwogICAgaWYgKG5leHQgPT0gbnVsbCkgewogICAgICBpZiAoZXhpc3RpbmcuaXNHZXR0ZXIgJiYgb3RoZXIuaXNTZXR0ZXIpIHJldHVybiBmYWxzZTsKICAgICAgaWYgKGV4aXN0aW5nLmlzU2V0dGVyICYmIG90aGVyLmlzR2V0dGVyKSByZXR1cm4gZmFsc2U7CiAgICB9IGVsc2UgewogICAgICBpZiAobmV4dCBpcyBDbGFzc0J1aWxkZXIgJiYgIW5leHQuaXNNaXhpbkFwcGxpY2F0aW9uKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChleGlzdGluZyBpcyBDbGFzc0J1aWxkZXIgJiYgb3RoZXIgaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgIC8vIFdlIGFsbG93IG11bHRpcGxlIG1peGluIGFwcGxpY2F0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUuIEFuCiAgICAgIC8vIGFsdGVybmF0aXZlIGlzIHRvIHNoYXJlIHRoZXNlIG1peGluIGFwcGxpY2F0aW9ucy4gVGhpcyBzaXR1YXRpb24gY2FuCiAgICAgIC8vIGhhcHBlbiBpZiB5b3UgaGF2ZSBgY2xhc3MgQSBleHRlbmRzIE9iamVjdCB3aXRoIE1peGluIHt9YCBhbmQgYGNsYXNzIEIKICAgICAgLy8gZXh0ZW5kcyBPYmplY3Qgd2l0aCBNaXhpbiB7fWAgaW4gdGhlIHNhbWUgbGlicmFyeS4KICAgICAgcmV0dXJuICFleGlzdGluZy5pc01peGluQXBwbGljYXRpb24gfHwgIW90aGVyLmlzTWl4aW5BcHBsaWNhdGlvbjsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgTGlicmFyeSBidWlsZChMaWJyYXJ5QnVpbGRlciBjb3JlTGlicmFyeSwge2Jvb2wgbW9kaWZ5VGFyZ2V0fSkgewogICAgYXNzZXJ0KGltcGxlbWVudGF0aW9uQnVpbGRlcnMuaXNFbXB0eSk7CiAgICBjYW5BZGRJbXBsZW1lbnRhdGlvbkJ1aWxkZXJzID0gdHJ1ZTsKICAgIEl0ZXJhdG9yPEJ1aWxkZXI+IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcjsKICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgIGJ1aWxkQnVpbGRlcihpdGVyYXRvci5jdXJyZW50LCBjb3JlTGlicmFyeSk7CiAgICB9CiAgICBmb3IgKEltcGxlbWVudGF0aW9uSW5mbyBpbmZvIGluIGltcGxlbWVudGF0aW9uQnVpbGRlcnMpIHsKICAgICAgU3RyaW5nIG5hbWUgPSBpbmZvLm5hbWU7CiAgICAgIEJ1aWxkZXIgZGVjbGFyYXRpb24gPSBpbmZvLmRlY2xhcmF0aW9uOwogICAgICBpbnQgY2hhck9mZnNldCA9IGluZm8uY2hhck9mZnNldDsKICAgICAgYWRkQnVpbGRlcihuYW1lLCBkZWNsYXJhdGlvbiwgY2hhck9mZnNldCk7CiAgICAgIGJ1aWxkQnVpbGRlcihkZWNsYXJhdGlvbiwgY29yZUxpYnJhcnkpOwogICAgfQogICAgY2FuQWRkSW1wbGVtZW50YXRpb25CdWlsZGVycyA9IGZhbHNlOwoKICAgIHNjb3BlLnNldHRlcnMuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgc2V0dGVyKSB7CiAgICAgIEJ1aWxkZXIgbWVtYmVyID0gc2NvcGVCdWlsZGVyW25hbWVdOwogICAgICBpZiAobWVtYmVyID09IG51bGwgfHwKICAgICAgICAgICFtZW1iZXIuaXNGaWVsZCB8fAogICAgICAgICAgbWVtYmVyLmlzRmluYWwgfHwKICAgICAgICAgIG1lbWJlci5pc0NvbnN0KSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGFkZFByb2JsZW0odGVtcGxhdGVDb25mbGljdHNXaXRoTWVtYmVyLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICBzZXR0ZXIuY2hhck9mZnNldCwgbm9MZW5ndGgsIGZpbGVVcmkpOwogICAgICAvLyBUT0RPKGFoZSk6IENvbnRleHQgdG8gcHJldmlvdXMgbWVzc2FnZT8KICAgICAgYWRkUHJvYmxlbSh0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhTZXR0ZXIud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgIG1lbWJlci5jaGFyT2Zmc2V0LCBub0xlbmd0aCwgZmlsZVVyaSk7CiAgICB9KTsKCiAgICBpZiAobW9kaWZ5VGFyZ2V0ID09IGZhbHNlKSByZXR1cm4gbGlicmFyeTsKCiAgICBsaWJyYXJ5LmlzU3ludGhldGljID0gaXNTeW50aGV0aWM7CiAgICBhZGREZXBlbmRlbmNpZXMobGlicmFyeSwgbmV3IFNldDxTb3VyY2VMaWJyYXJ5QnVpbGRlcj4oKSk7CgogICAgbG9hZGVyLnRhcmdldC5tZXRhZGF0YUNvbGxlY3RvcgogICAgICAgID8uc2V0RG9jdW1lbnRhdGlvbkNvbW1lbnQobGlicmFyeSwgZG9jdW1lbnRhdGlvbkNvbW1lbnQpOwoKICAgIGxpYnJhcnkubmFtZSA9IG5hbWU7CiAgICBsaWJyYXJ5LnByb2NlZHVyZXMuc29ydChjb21wYXJlUHJvY2VkdXJlcyk7CgogICAgaWYgKHVuc2VyaWFsaXphYmxlRXhwb3J0cyAhPSBudWxsKSB7CiAgICAgIGxpYnJhcnkuYWRkTWVtYmVyKG5ldyBGaWVsZChuZXcgTmFtZSgiX2V4cG9ydHMjIiwgbGlicmFyeSksCiAgICAgICAgICBpbml0aWFsaXplcjogbmV3IFN0cmluZ0xpdGVyYWwoanNvbkVuY29kZSh1bnNlcmlhbGl6YWJsZUV4cG9ydHMpKSwKICAgICAgICAgIGlzU3RhdGljOiB0cnVlLAogICAgICAgICAgaXNDb25zdDogdHJ1ZSkpOwogICAgfQoKICAgIHJldHVybiBsaWJyYXJ5OwogIH0KCiAgLy8vIFVzZWQgdG8gYWRkIGltcGxlbWVudGF0aW9uIGJ1aWxkZXIgZHVyaW5nIHRoZSBjYWxsIHRvIFtidWlsZF0gYWJvdmUuCiAgLy8vIEN1cnJlbnRseSwgb25seSBhbm9ueW1vdXMgbWl4aW5zIGFyZSB1c2luZyBpbXBsZW1lbnRhdGlvbiBidWlsZGVycyAoc2VlCiAgLy8vIFtNaXhpbkFwcGxpY2F0aW9uQnVpbGRlcl0KICAvLy8gKC4uL2tlcm5lbC9rZXJuZWxfbWl4aW5fYXBwbGljYXRpb25fYnVpbGRlci5kYXJ0KSkuCiAgdm9pZCBhZGRJbXBsZW1lbnRhdGlvbkJ1aWxkZXIoCiAgICAgIFN0cmluZyBuYW1lLCBCdWlsZGVyIGRlY2xhcmF0aW9uLCBpbnQgY2hhck9mZnNldCkgewogICAgYXNzZXJ0KGNhbkFkZEltcGxlbWVudGF0aW9uQnVpbGRlcnMsICIkdXJpIik7CiAgICBpbXBsZW1lbnRhdGlvbkJ1aWxkZXJzCiAgICAgICAgLmFkZChuZXcgSW1wbGVtZW50YXRpb25JbmZvKG5hbWUsIGRlY2xhcmF0aW9uLCBjaGFyT2Zmc2V0KSk7CiAgfQoKICB2b2lkIHZhbGlkYXRlUGFydChTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBTZXQ8VXJpPiB1c2VkUGFydHMpIHsKICAgIGlmIChsaWJyYXJ5ICE9IG51bGwgJiYgcGFydHMuaXNOb3RFbXB0eSkgewogICAgICAvLyBJZiBbbGlicmFyeV0gaXMgbnVsbCwgd2UgaGF2ZSBhbHJlYWR5IHJlcG9ydGVkIGEgcHJvYmxlbSB0aGF0IHRoaXMKICAgICAgLy8gcGFydCBpcyBvcnBoYW5lZC4KICAgICAgTGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dCA9IDxMb2NhdGVkTWVzc2FnZT5bCiAgICAgICAgbWVzc2FnZVBhcnRJblBhcnRMaWJyYXJ5Q29udGV4dC53aXRoTG9jYXRpb24obGlicmFyeS5maWxlVXJpLCAtMSwgMSksCiAgICAgIF07CiAgICAgIGZvciAoaW50IG9mZnNldCBpbiBwYXJ0T2Zmc2V0cykgewogICAgICAgIGFkZFByb2JsZW0obWVzc2FnZVBhcnRJblBhcnQsIG9mZnNldCwgbm9MZW5ndGgsIGZpbGVVcmksCiAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQpOwogICAgICB9CiAgICAgIGZvciAoU291cmNlTGlicmFyeUJ1aWxkZXIgcGFydCBpbiBwYXJ0cykgewogICAgICAgIC8vIE1hcmsgdGhpcyBwYXJ0IGFzIHVzZWQgc28gd2UgZG9uJ3QgcmVwb3J0IGl0IGFzIG9ycGhhbmVkLgogICAgICAgIHVzZWRQYXJ0cy5hZGQocGFydC51cmkpOwogICAgICB9CiAgICB9CiAgICBwYXJ0cy5jbGVhcigpOwogICAgaWYgKGV4cG9ydGVycy5pc05vdEVtcHR5KSB7CiAgICAgIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQgPSA8TG9jYXRlZE1lc3NhZ2U+WwogICAgICAgIG1lc3NhZ2VQYXJ0RXhwb3J0Q29udGV4dC53aXRoTG9jYXRpb24oZmlsZVVyaSwgLTEsIDEpLAogICAgICBdOwogICAgICBmb3IgKEV4cG9ydCBleHBvcnQgaW4gZXhwb3J0ZXJzKSB7CiAgICAgICAgZXhwb3J0LmV4cG9ydGVyLmFkZFByb2JsZW0oCiAgICAgICAgICAgIG1lc3NhZ2VQYXJ0RXhwb3J0LCBleHBvcnQuY2hhck9mZnNldCwgImV4cG9ydCIubGVuZ3RoLCBudWxsLAogICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0KTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBpbmNsdWRlUGFydHMoU2V0PFVyaT4gdXNlZFBhcnRzKSB7CiAgICBTZXQ8VXJpPiBzZWVuUGFydHMgPSBuZXcgU2V0PFVyaT4oKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHsKICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgcGFydCA9IHBhcnRzW2ldOwogICAgICBpbnQgcGFydE9mZnNldCA9IHBhcnRPZmZzZXRzW2ldOwogICAgICBpZiAocGFydCA9PSB0aGlzKSB7CiAgICAgICAgYWRkUHJvYmxlbShtZXNzYWdlUGFydE9mU2VsZiwgLTEsIG5vTGVuZ3RoLCBmaWxlVXJpKTsKICAgICAgfSBlbHNlIGlmIChzZWVuUGFydHMuYWRkKHBhcnQuZmlsZVVyaSkpIHsKICAgICAgICBpZiAocGFydC5wYXJ0T2ZMaWJyYXJ5ICE9IG51bGwpIHsKICAgICAgICAgIGFkZFByb2JsZW0obWVzc2FnZVBhcnRPZlR3b0xpYnJhcmllcywgLTEsIG5vTGVuZ3RoLCBwYXJ0LmZpbGVVcmksCiAgICAgICAgICAgICAgY29udGV4dDogWwogICAgICAgICAgICAgICAgbWVzc2FnZVBhcnRPZlR3b0xpYnJhcmllc0NvbnRleHQud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgICAgICAgIHBhcnQucGFydE9mTGlicmFyeS5maWxlVXJpLCAtMSwgbm9MZW5ndGgpLAogICAgICAgICAgICAgICAgbWVzc2FnZVBhcnRPZlR3b0xpYnJhcmllc0NvbnRleHQud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZVVyaSwgLTEsIG5vTGVuZ3RoKQogICAgICAgICAgICAgIF0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoaXNQYXRjaCkgewogICAgICAgICAgICB1c2VkUGFydHMuYWRkKHBhcnQuZmlsZVVyaSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB1c2VkUGFydHMuYWRkKHBhcnQudXJpKTsKICAgICAgICAgIH0KICAgICAgICAgIGluY2x1ZGVQYXJ0KHBhcnQsIHVzZWRQYXJ0cywgcGFydE9mZnNldCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGFkZFByb2JsZW0odGVtcGxhdGVQYXJ0VHdpY2Uud2l0aEFyZ3VtZW50cyhwYXJ0LmZpbGVVcmkpLCAtMSwgbm9MZW5ndGgsCiAgICAgICAgICAgIGZpbGVVcmkpOwogICAgICB9CiAgICB9CiAgfQoKICBib29sIGluY2x1ZGVQYXJ0KAogICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBwYXJ0LCBTZXQ8VXJpPiB1c2VkUGFydHMsIGludCBwYXJ0T2Zmc2V0KSB7CiAgICBpZiAocGFydC5wYXJ0T2ZVcmkgIT0gbnVsbCkgewogICAgICBpZiAodXJpSXNWYWxpZChwYXJ0LnBhcnRPZlVyaSkgJiYgcGFydC5wYXJ0T2ZVcmkgIT0gdXJpKSB7CiAgICAgICAgLy8gVGhpcyBpcyBhbiBlcnJvciwgYnV0IHRoZSBwYXJ0IGlzIG5vdCByZW1vdmVkIGZyb20gdGhlIGxpc3Qgb2YgcGFydHMsCiAgICAgICAgLy8gc28gdGhhdCBtZXRhZGF0YSBhbm5vdGF0aW9ucyBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGl0LgogICAgICAgIGFkZFByb2JsZW0oCiAgICAgICAgICAgIHRlbXBsYXRlUGFydE9mVXJpTWlzbWF0Y2gud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgIHBhcnQuZmlsZVVyaSwgdXJpLCBwYXJ0LnBhcnRPZlVyaSksCiAgICAgICAgICAgIHBhcnRPZmZzZXQsCiAgICAgICAgICAgIG5vTGVuZ3RoLAogICAgICAgICAgICBmaWxlVXJpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAocGFydC5wYXJ0T2ZOYW1lICE9IG51bGwpIHsKICAgICAgaWYgKG5hbWUgIT0gbnVsbCkgewogICAgICAgIGlmIChwYXJ0LnBhcnRPZk5hbWUgIT0gbmFtZSkgewogICAgICAgICAgLy8gVGhpcyBpcyBhbiBlcnJvciwgYnV0IHRoZSBwYXJ0IGlzIG5vdCByZW1vdmVkIGZyb20gdGhlIGxpc3Qgb2YKICAgICAgICAgIC8vIHBhcnRzLCBzbyB0aGF0IG1ldGFkYXRhIGFubm90YXRpb25zIGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggaXQuCiAgICAgICAgICBhZGRQcm9ibGVtKAogICAgICAgICAgICAgIHRlbXBsYXRlUGFydE9mTGlicmFyeU5hbWVNaXNtYXRjaC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgICBwYXJ0LmZpbGVVcmksIG5hbWUsIHBhcnQucGFydE9mTmFtZSksCiAgICAgICAgICAgICAgcGFydE9mZnNldCwKICAgICAgICAgICAgICBub0xlbmd0aCwKICAgICAgICAgICAgICBmaWxlVXJpKTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gVGhpcyBpcyBhbiBlcnJvciwgYnV0IHRoZSBwYXJ0IGlzIG5vdCByZW1vdmVkIGZyb20gdGhlIGxpc3Qgb2YgcGFydHMsCiAgICAgICAgLy8gc28gdGhhdCBtZXRhZGF0YSBhbm5vdGF0aW9ucyBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGl0LgogICAgICAgIGFkZFByb2JsZW0oCiAgICAgICAgICAgIHRlbXBsYXRlUGFydE9mVXNlVXJpLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICBwYXJ0LmZpbGVVcmksIGZpbGVVcmksIHBhcnQucGFydE9mTmFtZSksCiAgICAgICAgICAgIHBhcnRPZmZzZXQsCiAgICAgICAgICAgIG5vTGVuZ3RoLAogICAgICAgICAgICBmaWxlVXJpKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIFRoaXMgaXMgYW4gZXJyb3IsIGJ1dCB0aGUgcGFydCBpcyBub3QgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IG9mIHBhcnRzLAogICAgICAvLyBzbyB0aGF0IG1ldGFkYXRhIGFubm90YXRpb25zIGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggaXQuCiAgICAgIGFzc2VydCghcGFydC5pc1BhcnQpOwogICAgICBpZiAodXJpSXNWYWxpZChwYXJ0LmZpbGVVcmkpKSB7CiAgICAgICAgYWRkUHJvYmxlbSh0ZW1wbGF0ZU1pc3NpbmdQYXJ0T2Yud2l0aEFyZ3VtZW50cyhwYXJ0LmZpbGVVcmkpLAogICAgICAgICAgICBwYXJ0T2Zmc2V0LCBub0xlbmd0aCwgZmlsZVVyaSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8vIExhbmd1YWdlIHZlcnNpb25zIGhhdmUgdG8gbWF0Y2guCiAgICBpZiAoKHRoaXMubGFuZ3VhZ2VWZXJzaW9uRXhwbGljaXRseVNldCAhPQogICAgICAgICAgICBwYXJ0Lmxhbmd1YWdlVmVyc2lvbkV4cGxpY2l0bHlTZXQpIHx8CiAgICAgICAgKHRoaXMubGlicmFyeS5sYW5ndWFnZVZlcnNpb25NYWpvciAhPQogICAgICAgICAgICAgICAgcGFydC5saWJyYXJ5Lmxhbmd1YWdlVmVyc2lvbk1ham9yIHx8CiAgICAgICAgICAgIHRoaXMubGlicmFyeS5sYW5ndWFnZVZlcnNpb25NaW5vciAhPQogICAgICAgICAgICAgICAgcGFydC5saWJyYXJ5Lmxhbmd1YWdlVmVyc2lvbk1pbm9yKSkgewogICAgICAvLyBUaGlzIGlzIGFuIGVycm9yLCBidXQgdGhlIHBhcnQgaXMgbm90IHJlbW92ZWQgZnJvbSB0aGUgbGlzdCBvZgogICAgICAvLyBwYXJ0cywgc28gdGhhdCBtZXRhZGF0YSBhbm5vdGF0aW9ucyBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGl0LgogICAgICBhZGRQcm9ibGVtKAogICAgICAgICAgbWVzc2FnZUxhbmd1YWdlVmVyc2lvbk1pc21hdGNoSW5QYXJ0LCBwYXJ0T2Zmc2V0LCBub0xlbmd0aCwgZmlsZVVyaSk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBwYXJ0LnZhbGlkYXRlUGFydCh0aGlzLCB1c2VkUGFydHMpOwogICAgTmFtZUl0ZXJhdG9yIHBhcnREZWNsYXJhdGlvbnMgPSBwYXJ0Lm5hbWVJdGVyYXRvcjsKICAgIHdoaWxlIChwYXJ0RGVjbGFyYXRpb25zLm1vdmVOZXh0KCkpIHsKICAgICAgU3RyaW5nIG5hbWUgPSBwYXJ0RGVjbGFyYXRpb25zLm5hbWU7CiAgICAgIEJ1aWxkZXIgZGVjbGFyYXRpb24gPSBwYXJ0RGVjbGFyYXRpb25zLmN1cnJlbnQ7CgogICAgICBpZiAoZGVjbGFyYXRpb24ubmV4dCAhPSBudWxsKSB7CiAgICAgICAgTGlzdDxCdWlsZGVyPiBkdXBsaWNhdGVkID0gPEJ1aWxkZXI+W107CiAgICAgICAgd2hpbGUgKGRlY2xhcmF0aW9uLm5leHQgIT0gbnVsbCkgewogICAgICAgICAgZHVwbGljYXRlZC5hZGQoZGVjbGFyYXRpb24pOwogICAgICAgICAgcGFydERlY2xhcmF0aW9ucy5tb3ZlTmV4dCgpOwogICAgICAgICAgZGVjbGFyYXRpb24gPSBwYXJ0RGVjbGFyYXRpb25zLmN1cnJlbnQ7CiAgICAgICAgfQogICAgICAgIGR1cGxpY2F0ZWQuYWRkKGRlY2xhcmF0aW9uKTsKICAgICAgICAvLyBIYW5kbGUgZHVwbGljYXRlZCBkZWNsYXJhdGlvbnMgaW4gdGhlIHBhcnQuCiAgICAgICAgLy8KICAgICAgICAvLyBEdXBsaWNhdGVkIGRlY2xhcmF0aW9ucyBhcmUgaGFuZGxlZCBieSBjcmVhdGluZyBhIGxpbmtlZCBsaXN0IHVzaW5nCiAgICAgICAgLy8gdGhlIGBuZXh0YCBmaWVsZC4gVGhpcyBpcyBwcmVmZXJyZWQgb3ZlciBtYWtpbmcgYWxsIHNjb3BlIGVudHJpZXMgYmUKICAgICAgICAvLyBhIGBMaXN0PERlY2xhcmF0aW9uPmAuCiAgICAgICAgLy8KICAgICAgICAvLyBXZSBtYWludGFpbiB0aGUgbGlua2VkIGxpc3Qgc28gdGhhdCB0aGUgbGFzdCBlbnRyeSBpcyBlYXN5IHRvCiAgICAgICAgLy8gcmVjb2duaXplIChpdCdzIGBuZXh0YCBmaWVsZCBpcyBudWxsKS4gVGhpcyBtZWFucyB0aGF0IGl0IGlzCiAgICAgICAgLy8gcmV2ZXJzZWQgd2l0aCByZXNwZWN0IHRvIHNvdXJjZSBjb2RlIG9yZGVyLiBTaW5jZSBrZXJuZWwgZG9lc24ndAogICAgICAgIC8vIGFsbG93IGR1cGxpY2F0ZWQgZGVjbGFyYXRpb25zLCB3ZSBlbnN1cmUgdGhhdCB3ZSBvbmx5IGFkZCB0aGUgZmlyc3QKICAgICAgICAvLyBkZWNsYXJhdGlvbiB0byB0aGUga2VybmVsIHRyZWUuCiAgICAgICAgLy8KICAgICAgICAvLyBTaW5jZSB0aGUgZHVwbGljYXRlZCBkZWNsYXJhdGlvbnMgYXJlIHN0b3JlZCBpbiByZXZlcnNlIG9yZGVyLCB3ZQogICAgICAgIC8vIGl0ZXJhdGUgb3ZlciB0aGVtIGluIHJldmVyc2Ugb3JkZXIgYXMgdGhpcyBpcyBzaW1wbGVyIGFuZCBub3JtYWxseQogICAgICAgIC8vIG5vdCBhIHByb2JsZW0uIEhvd2V2ZXIsIGluIHRoaXMgY2FzZSB3ZSBuZWVkIHRvIGNhbGwgW2FkZEJ1aWxkZXJdIGluCiAgICAgICAgLy8gc291cmNlIG9yZGVyIGFzIGl0IHdvdWxkIG90aGVyd2lzZSBjcmVhdGUgY3ljbGVzLgogICAgICAgIC8vCiAgICAgICAgLy8gV2UgYWxzbyBuZWVkIHRvIGJlIGNhcmVmdWwgcHJlc2VydmluZyB0aGUgb3JkZXIgb2YgdGhlIGxpbmtzLiBUaGUKICAgICAgICAvLyBwYXJ0IGxpYnJhcnkgc3RpbGwga2VlcHMgdGhlc2UgZGVjbGFyYXRpb25zIGluIGl0cyBzY29wZSBzbyB0aGF0CiAgICAgICAgLy8gRGlldExpc3RlbmVyIGNhbiBmaW5kIHRoZW0uCiAgICAgICAgZm9yIChpbnQgaSA9IGR1cGxpY2F0ZWQubGVuZ3RoOyBpID4gMDsgaS0tKSB7CiAgICAgICAgICBCdWlsZGVyIGRlY2xhcmF0aW9uID0gZHVwbGljYXRlZFtpIC0gMV07CiAgICAgICAgICBhZGRCdWlsZGVyKG5hbWUsIGRlY2xhcmF0aW9uLCBkZWNsYXJhdGlvbi5jaGFyT2Zmc2V0KTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYWRkQnVpbGRlcihuYW1lLCBkZWNsYXJhdGlvbiwgZGVjbGFyYXRpb24uY2hhck9mZnNldCk7CiAgICAgIH0KICAgIH0KICAgIHR5cGVzLmFkZEFsbChwYXJ0LnR5cGVzKTsKICAgIGNvbnN0cnVjdG9yUmVmZXJlbmNlcy5hZGRBbGwocGFydC5jb25zdHJ1Y3RvclJlZmVyZW5jZXMpOwogICAgcGFydC5wYXJ0T2ZMaWJyYXJ5ID0gdGhpczsKICAgIHBhcnQuc2NvcGUuYmVjb21lUGFydE9mKHNjb3BlKTsKICAgIC8vIFRPRE8oYWhlKTogSW5jbHVkZSBtZXRhZGF0YSBmcm9tIHBhcnQ/CgogICAgbmF0aXZlTWV0aG9kcy5hZGRBbGwocGFydC5uYXRpdmVNZXRob2RzKTsKICAgIGJvdW5kbGVzc1R5cGVWYXJpYWJsZXMuYWRkQWxsKHBhcnQuYm91bmRsZXNzVHlwZVZhcmlhYmxlcyk7CiAgICAvLyBDaGVjayB0aGF0IHRoZSB0YXJnZXRzIGFyZSBkaWZmZXJlbnQuIFRoaXMgaXMgbm90IG5vcm1hbGx5IGEgcHJvYmxlbQogICAgLy8gYnV0IGlzIGZvciBwYXRjaCBmaWxlcy4KICAgIGlmIChsaWJyYXJ5ICE9IHBhcnQubGlicmFyeSAmJiBwYXJ0LmxpYnJhcnkucHJvYmxlbXNBc0pzb24gIT0gbnVsbCkgewogICAgICBsaWJyYXJ5LnByb2JsZW1zQXNKc29uID8/PSA8U3RyaW5nPltdOwogICAgICBsaWJyYXJ5LnByb2JsZW1zQXNKc29uLmFkZEFsbChwYXJ0LmxpYnJhcnkucHJvYmxlbXNBc0pzb24pOwogICAgfQogICAgTGlzdDxGaWVsZEJ1aWxkZXI+IHBhcnRJbXBsaWNpdGx5VHlwZWRGaWVsZHMgPQogICAgICAgIHBhcnQudGFrZUltcGxpY2l0bHlUeXBlZEZpZWxkcygpOwogICAgaWYgKHBhcnRJbXBsaWNpdGx5VHlwZWRGaWVsZHMgIT0gbnVsbCkgewogICAgICBpZiAoaW1wbGljaXRseVR5cGVkRmllbGRzID09IG51bGwpIHsKICAgICAgICBpbXBsaWNpdGx5VHlwZWRGaWVsZHMgPSBwYXJ0SW1wbGljaXRseVR5cGVkRmllbGRzOwogICAgICB9IGVsc2UgewogICAgICAgIGltcGxpY2l0bHlUeXBlZEZpZWxkcy5hZGRBbGwocGFydEltcGxpY2l0bHlUeXBlZEZpZWxkcyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgdm9pZCBidWlsZEluaXRpYWxTY29wZXMoKSB7CiAgICBOYW1lSXRlcmF0b3IgaXRlcmF0b3IgPSBuYW1lSXRlcmF0b3I7CiAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICBhZGRUb0V4cG9ydFNjb3BlKGl0ZXJhdG9yLm5hbWUsIGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgfQogIH0KCiAgdm9pZCBhZGRJbXBvcnRzVG9TY29wZSgpIHsKICAgIGJvb2wgZXhwbGljaXRDb3JlSW1wb3J0ID0gdGhpcyA9PSBsb2FkZXIuY29yZUxpYnJhcnk7CiAgICBmb3IgKEltcG9ydCBpbXBvcnQgaW4gaW1wb3J0cykgewogICAgICBpZiAoaW1wb3J0LmltcG9ydGVkID09IGxvYWRlci5jb3JlTGlicmFyeSkgewogICAgICAgIGV4cGxpY2l0Q29yZUltcG9ydCA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKGltcG9ydC5pbXBvcnRlZD8uaXNQYXJ0ID8/IGZhbHNlKSB7CiAgICAgICAgYWRkUHJvYmxlbSgKICAgICAgICAgICAgdGVtcGxhdGVQYXJ0T2ZJbkxpYnJhcnkud2l0aEFyZ3VtZW50cyhpbXBvcnQuaW1wb3J0ZWQuZmlsZVVyaSksCiAgICAgICAgICAgIGltcG9ydC5jaGFyT2Zmc2V0LAogICAgICAgICAgICBub0xlbmd0aCwKICAgICAgICAgICAgZmlsZVVyaSk7CiAgICAgIH0KICAgICAgaW1wb3J0LmZpbmFsaXplSW1wb3J0cyh0aGlzKTsKICAgIH0KICAgIGlmICghZXhwbGljaXRDb3JlSW1wb3J0KSB7CiAgICAgIGxvYWRlci5jb3JlTGlicmFyeS5leHBvcnRTY29wZS5mb3JFYWNoKChTdHJpbmcgbmFtZSwgQnVpbGRlciBtZW1iZXIpIHsKICAgICAgICBhZGRUb1Njb3BlKG5hbWUsIG1lbWJlciwgLTEsIHRydWUpOwogICAgICB9KTsKICAgIH0KCiAgICBleHBvcnRTY29wZS5mb3JFYWNoKChTdHJpbmcgbmFtZSwgQnVpbGRlciBtZW1iZXIpIHsKICAgICAgaWYgKG1lbWJlci5wYXJlbnQgIT0gdGhpcykgewogICAgICAgIHN3aXRjaCAobmFtZSkgewogICAgICAgICAgY2FzZSAiZHluYW1pYyI6CiAgICAgICAgICBjYXNlICJ2b2lkIjoKICAgICAgICAgICAgdW5zZXJpYWxpemFibGVFeHBvcnRzID8/PSA8U3RyaW5nLCBTdHJpbmc+e307CiAgICAgICAgICAgIHVuc2VyaWFsaXphYmxlRXhwb3J0c1tuYW1lXSA9IG51bGw7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIGlmIChtZW1iZXIgaXMgSW52YWxpZFR5cGVCdWlsZGVyKSB7CiAgICAgICAgICAgICAgdW5zZXJpYWxpemFibGVFeHBvcnRzID8/PSA8U3RyaW5nLCBTdHJpbmc+e307CiAgICAgICAgICAgICAgdW5zZXJpYWxpemFibGVFeHBvcnRzW25hbWVdID0gbWVtYmVyLm1lc3NhZ2UubWVzc2FnZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAvLyBFdmVudHVhbGx5IChpbiAjYnVpbGRCdWlsZGVyKSBtZW1iZXJzIGFyZW4ndCBhZGRlZCB0byB0aGUKICAgICAgICAgICAgICAvLyBsaWJyYXJ5IGlmIHRoZSBoYXZlICduZXh0JyBwb2ludGVycywgc28gZG9uJ3QgYWRkIHRoZW0gYXMKICAgICAgICAgICAgICAvLyBhZGRpdGlvbmFsRXhwb3J0cyBlaXRoZXIuIEFkZCB0aGUgbGFzdCBvbmUgb25seSAodGhlIG9uZSB0aGF0CiAgICAgICAgICAgICAgLy8gd2lsbCBldmVudHVhbGx5IGJlIGFkZGVkIHRvIHRoZSBsaWJyYXJ5KS4KICAgICAgICAgICAgICBCdWlsZGVyIG1lbWJlckxhc3QgPSBtZW1iZXI7CiAgICAgICAgICAgICAgd2hpbGUgKG1lbWJlckxhc3QubmV4dCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICBtZW1iZXJMYXN0ID0gbWVtYmVyTGFzdC5uZXh0OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAobWVtYmVyTGFzdCBpcyBDbGFzc0J1aWxkZXIpIHsKICAgICAgICAgICAgICAgIGxpYnJhcnkuYWRkaXRpb25hbEV4cG9ydHMuYWRkKG1lbWJlckxhc3QuY2xzLnJlZmVyZW5jZSk7CiAgICAgICAgICAgICAgfSBlbHNlIGlmIChtZW1iZXJMYXN0IGlzIFR5cGVBbGlhc0J1aWxkZXIpIHsKICAgICAgICAgICAgICAgIGxpYnJhcnkuYWRkaXRpb25hbEV4cG9ydHMuYWRkKG1lbWJlckxhc3QudHlwZWRlZi5yZWZlcmVuY2UpOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAobWVtYmVyTGFzdCBpcyBFeHRlbnNpb25CdWlsZGVyKSB7CiAgICAgICAgICAgICAgICBsaWJyYXJ5LmFkZGl0aW9uYWxFeHBvcnRzLmFkZChtZW1iZXJMYXN0LmV4dGVuc2lvbi5yZWZlcmVuY2UpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBsaWJyYXJ5LmFkZGl0aW9uYWxFeHBvcnRzLmFkZChtZW1iZXJMYXN0LnRhcmdldC5yZWZlcmVuY2UpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZFRvU2NvcGUoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgbWVtYmVyLCBpbnQgY2hhck9mZnNldCwgYm9vbCBpc0ltcG9ydCkgewogICAgTWFwPFN0cmluZywgQnVpbGRlcj4gbWFwID0KICAgICAgICBtZW1iZXIuaXNTZXR0ZXIgPyBpbXBvcnRTY29wZS5zZXR0ZXJzIDogaW1wb3J0U2NvcGUubG9jYWw7CiAgICBCdWlsZGVyIGV4aXN0aW5nID0gbWFwW25hbWVdOwogICAgaWYgKGV4aXN0aW5nICE9IG51bGwpIHsKICAgICAgaWYgKGV4aXN0aW5nICE9IG1lbWJlcikgewogICAgICAgIG1hcFtuYW1lXSA9IGNvbXB1dGVBbWJpZ3VvdXNEZWNsYXJhdGlvbigKICAgICAgICAgICAgbmFtZSwgZXhpc3RpbmcsIG1lbWJlciwgY2hhck9mZnNldCwKICAgICAgICAgICAgaXNJbXBvcnQ6IGlzSW1wb3J0KTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgbWFwW25hbWVdID0gbWVtYmVyOwogICAgfQogICAgaWYgKG1lbWJlci5pc0V4dGVuc2lvbikgewogICAgICBpbXBvcnRTY29wZS5hZGRFeHRlbnNpb24obWVtYmVyKTsKICAgIH0KICB9CgogIC8vLyBSZXNvbHZlcyBhbGwgdW5yZXNvbHZlZCB0eXBlcyBpbiBbdHlwZXNdLiBUaGUgbGlzdCBvZiB0eXBlcyBpcyBjbGVhcmVkCiAgLy8vIHdoZW4gZG9uZS4KICBpbnQgcmVzb2x2ZVR5cGVzKCkgewogICAgaW50IHR5cGVDb3VudCA9IHR5cGVzLmxlbmd0aDsKICAgIGZvciAoVW5yZXNvbHZlZFR5cGUgdCBpbiB0eXBlcykgewogICAgICB0LnJlc29sdmVJbihzY29wZSwgdGhpcyk7CiAgICAgIGlmICghbG9hZGVyLnRhcmdldC5sZWdhY3lNb2RlKSB7CiAgICAgICAgdC5jaGVja1R5cGUodGhpcyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdC5ub3JtYWxpemVUeXBlKCk7CiAgICAgIH0KICAgIH0KICAgIHR5cGVzLmNsZWFyKCk7CiAgICByZXR1cm4gdHlwZUNvdW50OwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHJlc29sdmVDb25zdHJ1Y3RvcnMoXykgewogICAgaW50IGNvdW50ID0gMDsKICAgIEl0ZXJhdG9yPEJ1aWxkZXI+IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcjsKICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgIGNvdW50ICs9IGl0ZXJhdG9yLmN1cnJlbnQucmVzb2x2ZUNvbnN0cnVjdG9ycyh0aGlzKTsKICAgIH0KICAgIHJldHVybiBjb3VudDsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZnVsbE5hbWVGb3JFcnJvcnMgewogICAgLy8gVE9ETyhhaGUpOiBDb25zaWRlciBpZiB3ZSBzaG91bGQgdXNlIHJlbGF0aXZpemVVcmkgaGVyZS4gVGhlIGRvd25zaWRlIHRvCiAgICAvLyBkb2luZyB0aGF0IGlzIHRoYXQgdGhpcyBVUkkgbWF5IGJlIHVzZWQgaW4gYW4gZXJyb3IgbWVzc2FnZS4gSWRlYWxseSwgd2UKICAgIC8vIHNob3VsZCBjcmVhdGUgYSBjbGFzcyB0aGF0IHJlcHJlc2VudHMgcXVhbGlmaWVkIG5hbWVzIHRoYXQgd2UgY2FuCiAgICAvLyByZWxhdGl2aXplIHdoZW4gcHJpbnRpbmcgYSBtZXNzYWdlLCBidXQgc3RpbGwgc3RvcmUgdGhlIGZ1bGwgVVJJIGluCiAgICAvLyAuZGlsbCBmaWxlcy4KICAgIHJldHVybiBuYW1lID8/ICI8bGlicmFyeSAnJGZpbGVVcmknPiI7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlY29yZEFjY2VzcyhpbnQgY2hhck9mZnNldCwgaW50IGxlbmd0aCwgVXJpIGZpbGVVcmkpIHsKICAgIGFjY2Vzc29ycy5hZGQoZmlsZVVyaSk7CiAgICBhY2Nlc3NvcnMuYWRkKGNoYXJPZmZzZXQpOwogICAgYWNjZXNzb3JzLmFkZChsZW5ndGgpOwogICAgaWYgKGFjY2Vzc1Byb2JsZW0gIT0gbnVsbCkgewogICAgICBhZGRQcm9ibGVtKGFjY2Vzc1Byb2JsZW0sIGNoYXJPZmZzZXQsIGxlbmd0aCwgZmlsZVVyaSk7CiAgICB9CiAgfQoKICB2b2lkIGFkZFByb2JsZW1BdEFjY2Vzc29ycyhNZXNzYWdlIG1lc3NhZ2UpIHsKICAgIGlmIChhY2Nlc3NQcm9ibGVtID09IG51bGwpIHsKICAgICAgaWYgKGFjY2Vzc29ycy5pc0VtcHR5ICYmIHRoaXMgPT0gbG9hZGVyLmZpcnN0KSB7CiAgICAgICAgLy8gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgbGlicmFyeSwgYW5kIG5vYm9keSBhY2Nlc3MgaXQgZGlyZWN0bHkuIFNvCiAgICAgICAgLy8gd2UgbmVlZCB0byByZXBvcnQgYSBwcm9ibGVtLgogICAgICAgIGxvYWRlci5hZGRQcm9ibGVtKG1lc3NhZ2UsIC0xLCAxLCBudWxsKTsKICAgICAgfQogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFjY2Vzc29ycy5sZW5ndGg7IGkgKz0gMykgewogICAgICAgIFVyaSBhY2Nlc3NvciA9IGFjY2Vzc29yc1tpXTsKICAgICAgICBpbnQgY2hhck9mZnNldCA9IGFjY2Vzc29yc1tpICsgMV07CiAgICAgICAgaW50IGxlbmd0aCA9IGFjY2Vzc29yc1tpICsgMl07CiAgICAgICAgYWRkUHJvYmxlbShtZXNzYWdlLCBjaGFyT2Zmc2V0LCBsZW5ndGgsIGFjY2Vzc29yKTsKICAgICAgfQogICAgICBhY2Nlc3NQcm9ibGVtID0gbWVzc2FnZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGdldCBvcmlnaW4gPT4gYWN0dWFsT3JpZ2luID8/IHRoaXM7CgogIFVyaSBnZXQgdXJpID0+IGxpYnJhcnkuaW1wb3J0VXJpOwoKICB2b2lkIGFkZFN5bnRoZXRpY0RlY2xhcmF0aW9uT2ZEeW5hbWljKCkgewogICAgYWRkQnVpbGRlcigKICAgICAgICAiZHluYW1pYyIsIG5ldyBEeW5hbWljVHlwZUJ1aWxkZXIoY29uc3QgRHluYW1pY1R5cGUoKSwgdGhpcywgLTEpLCAtMSk7CiAgfQoKICBUeXBlQnVpbGRlciBhZGROYW1lZFR5cGUoCiAgICAgIE9iamVjdCBuYW1lLCBMaXN0PFR5cGVCdWlsZGVyPiBhcmd1bWVudHMsIGludCBjaGFyT2Zmc2V0KSB7CiAgICByZXR1cm4gYWRkVHlwZShuZXcgTmFtZWRUeXBlQnVpbGRlcihuYW1lLCBhcmd1bWVudHMpLCBjaGFyT2Zmc2V0KTsKICB9CgogIFR5cGVCdWlsZGVyIGFkZE1peGluQXBwbGljYXRpb24oCiAgICAgIFR5cGVCdWlsZGVyIHN1cGVydHlwZSwgTGlzdDxUeXBlQnVpbGRlcj4gbWl4aW5zLCBpbnQgY2hhck9mZnNldCkgewogICAgcmV0dXJuIGFkZFR5cGUobmV3IE1peGluQXBwbGljYXRpb25CdWlsZGVyKHN1cGVydHlwZSwgbWl4aW5zKSwgY2hhck9mZnNldCk7CiAgfQoKICBUeXBlQnVpbGRlciBhZGRWb2lkVHlwZShpbnQgY2hhck9mZnNldCkgewogICAgcmV0dXJuIGFkZE5hbWVkVHlwZSgidm9pZCIsIG51bGwsIGNoYXJPZmZzZXQpCiAgICAgIC4uYmluZChuZXcgVm9pZFR5cGVCdWlsZGVyKGNvbnN0IFZvaWRUeXBlKCksIHRoaXMsIGNoYXJPZmZzZXQpKTsKICB9CgogIC8vLyBBZGQgYSBwcm9ibGVtIHRoYXQgbWlnaHQgbm90IGJlIHJlcG9ydGVkIGltbWVkaWF0ZWx5LgogIC8vLwogIC8vLyBQcm9ibGVtcyB3aWxsIGJlIGlzc3VlZCBhZnRlciBzb3VyY2UgaW5mb3JtYXRpb24gaGFzIGJlZW4gYWRkZWQuCiAgLy8vIE9uY2UgdGhlIHByb2JsZW1zIGhhcyBiZWVuIGlzc3VlZCwgYWRkaW5nIGEgbmV3ICJwb3N0cG9uZWQiIHByb2JsZW0gd2lsbAogIC8vLyBiZSBpc3N1ZWQgaW1tZWRpYXRlbHkuCiAgdm9pZCBhZGRQb3N0cG9uZWRQcm9ibGVtKAogICAgICBNZXNzYWdlIG1lc3NhZ2UsIGludCBjaGFyT2Zmc2V0LCBpbnQgbGVuZ3RoLCBVcmkgZmlsZVVyaSkgewogICAgaWYgKHBvc3Rwb25lZFByb2JsZW1zSXNzdWVkKSB7CiAgICAgIGFkZFByb2JsZW0obWVzc2FnZSwgY2hhck9mZnNldCwgbGVuZ3RoLCBmaWxlVXJpKTsKICAgIH0gZWxzZSB7CiAgICAgIHBvc3Rwb25lZFByb2JsZW1zID8/PSA8UG9zdHBvbmVkUHJvYmxlbT5bXTsKICAgICAgcG9zdHBvbmVkUHJvYmxlbXMKICAgICAgICAgIC5hZGQobmV3IFBvc3Rwb25lZFByb2JsZW0obWVzc2FnZSwgY2hhck9mZnNldCwgbGVuZ3RoLCBmaWxlVXJpKSk7CiAgICB9CiAgfQoKICB2b2lkIGlzc3VlUG9zdHBvbmVkUHJvYmxlbXMoKSB7CiAgICBwb3N0cG9uZWRQcm9ibGVtc0lzc3VlZCA9IHRydWU7CiAgICBpZiAocG9zdHBvbmVkUHJvYmxlbXMgPT0gbnVsbCkgcmV0dXJuOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb3N0cG9uZWRQcm9ibGVtcy5sZW5ndGg7ICsraSkgewogICAgICBQb3N0cG9uZWRQcm9ibGVtIHBvc3Rwb25lZFByb2JsZW0gPSBwb3N0cG9uZWRQcm9ibGVtc1tpXTsKICAgICAgYWRkUHJvYmxlbShwb3N0cG9uZWRQcm9ibGVtLm1lc3NhZ2UsIHBvc3Rwb25lZFByb2JsZW0uY2hhck9mZnNldCwKICAgICAgICAgIHBvc3Rwb25lZFByb2JsZW0ubGVuZ3RoLCBwb3N0cG9uZWRQcm9ibGVtLmZpbGVVcmkpOwogICAgfQogICAgcG9zdHBvbmVkUHJvYmxlbXMgPSBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgRm9ybWF0dGVkTWVzc2FnZSBhZGRQcm9ibGVtKAogICAgICBNZXNzYWdlIG1lc3NhZ2UsIGludCBjaGFyT2Zmc2V0LCBpbnQgbGVuZ3RoLCBVcmkgZmlsZVVyaSwKICAgICAge2Jvb2wgd2FzSGFuZGxlZDogZmFsc2UsCiAgICAgIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQsCiAgICAgIFNldmVyaXR5IHNldmVyaXR5LAogICAgICBib29sIHByb2JsZW1PbkxpYnJhcnk6IGZhbHNlfSkgewogICAgRm9ybWF0dGVkTWVzc2FnZSBmb3JtYXR0ZWRNZXNzYWdlID0gc3VwZXIuYWRkUHJvYmxlbSgKICAgICAgICBtZXNzYWdlLCBjaGFyT2Zmc2V0LCBsZW5ndGgsIGZpbGVVcmksCiAgICAgICAgd2FzSGFuZGxlZDogd2FzSGFuZGxlZCwKICAgICAgICBjb250ZXh0OiBjb250ZXh0LAogICAgICAgIHNldmVyaXR5OiBzZXZlcml0eSwKICAgICAgICBwcm9ibGVtT25MaWJyYXJ5OiB0cnVlKTsKICAgIGlmIChmb3JtYXR0ZWRNZXNzYWdlICE9IG51bGwpIHsKICAgICAgbGlicmFyeS5wcm9ibGVtc0FzSnNvbiA/Pz0gPFN0cmluZz5bXTsKICAgICAgbGlicmFyeS5wcm9ibGVtc0FzSnNvbi5hZGQoZm9ybWF0dGVkTWVzc2FnZS50b0pzb25TdHJpbmcoKSk7CiAgICB9CiAgICByZXR1cm4gZm9ybWF0dGVkTWVzc2FnZTsKICB9CgogIHZvaWQgYWRkQ2xhc3MoCiAgICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCwKICAgICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLAogICAgICBpbnQgbW9kaWZpZXJzLAogICAgICBTdHJpbmcgY2xhc3NOYW1lLAogICAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMsCiAgICAgIFR5cGVCdWlsZGVyIHN1cGVydHlwZSwKICAgICAgTGlzdDxUeXBlQnVpbGRlcj4gaW50ZXJmYWNlcywKICAgICAgaW50IHN0YXJ0T2Zmc2V0LAogICAgICBpbnQgbmFtZU9mZnNldCwKICAgICAgaW50IGVuZE9mZnNldCwKICAgICAgaW50IHN1cGVydHlwZU9mZnNldCkgewogICAgX2FkZENsYXNzKAogICAgICAgIFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQuY2xhc3NEZWNsYXJhdGlvbiwKICAgICAgICBkb2N1bWVudGF0aW9uQ29tbWVudCwKICAgICAgICBtZXRhZGF0YSwKICAgICAgICBtb2RpZmllcnMsCiAgICAgICAgY2xhc3NOYW1lLAogICAgICAgIHR5cGVWYXJpYWJsZXMsCiAgICAgICAgc3VwZXJ0eXBlLAogICAgICAgIGludGVyZmFjZXMsCiAgICAgICAgc3RhcnRPZmZzZXQsCiAgICAgICAgbmFtZU9mZnNldCwKICAgICAgICBlbmRPZmZzZXQsCiAgICAgICAgc3VwZXJ0eXBlT2Zmc2V0KTsKICB9CgogIHZvaWQgYWRkTWl4aW5EZWNsYXJhdGlvbigKICAgICAgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIGludCBtb2RpZmllcnMsCiAgICAgIFN0cmluZyBjbGFzc05hbWUsCiAgICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcywKICAgICAgVHlwZUJ1aWxkZXIgc3VwZXJ0eXBlLAogICAgICBMaXN0PFR5cGVCdWlsZGVyPiBpbnRlcmZhY2VzLAogICAgICBpbnQgc3RhcnRPZmZzZXQsCiAgICAgIGludCBuYW1lT2Zmc2V0LAogICAgICBpbnQgZW5kT2Zmc2V0LAogICAgICBpbnQgc3VwZXJ0eXBlT2Zmc2V0KSB7CiAgICBfYWRkQ2xhc3MoCiAgICAgICAgVHlwZVBhcmFtZXRlclNjb3BlS2luZC5taXhpbkRlY2xhcmF0aW9uLAogICAgICAgIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICAgIG1ldGFkYXRhLAogICAgICAgIG1vZGlmaWVycywKICAgICAgICBjbGFzc05hbWUsCiAgICAgICAgdHlwZVZhcmlhYmxlcywKICAgICAgICBzdXBlcnR5cGUsCiAgICAgICAgaW50ZXJmYWNlcywKICAgICAgICBzdGFydE9mZnNldCwKICAgICAgICBuYW1lT2Zmc2V0LAogICAgICAgIGVuZE9mZnNldCwKICAgICAgICBzdXBlcnR5cGVPZmZzZXQpOwogIH0KCiAgdm9pZCBfYWRkQ2xhc3MoCiAgICAgIFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQga2luZCwKICAgICAgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIGludCBtb2RpZmllcnMsCiAgICAgIFN0cmluZyBjbGFzc05hbWUsCiAgICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcywKICAgICAgVHlwZUJ1aWxkZXIgc3VwZXJ0eXBlLAogICAgICBMaXN0PFR5cGVCdWlsZGVyPiBpbnRlcmZhY2VzLAogICAgICBpbnQgc3RhcnRPZmZzZXQsCiAgICAgIGludCBuYW1lT2Zmc2V0LAogICAgICBpbnQgZW5kT2Zmc2V0LAogICAgICBpbnQgc3VwZXJ0eXBlT2Zmc2V0KSB7CiAgICAvLyBOZXN0ZWQgZGVjbGFyYXRpb24gYmVnYW4gaW4gYE91dGxpbmVCdWlsZGVyLmJlZ2luQ2xhc3NEZWNsYXJhdGlvbmAuCiAgICBUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyIGRlY2xhcmF0aW9uID0KICAgICAgICBlbmROZXN0ZWREZWNsYXJhdGlvbihraW5kLCBjbGFzc05hbWUpCiAgICAgICAgICAuLnJlc29sdmVUeXBlcyh0eXBlVmFyaWFibGVzLCB0aGlzKTsKICAgIGFzc2VydChkZWNsYXJhdGlvbi5wYXJlbnQgPT0gbGlicmFyeURlY2xhcmF0aW9uKTsKICAgIE1hcDxTdHJpbmcsIE1lbWJlckJ1aWxkZXI+IG1lbWJlcnMgPSBkZWNsYXJhdGlvbi5tZW1iZXJzOwogICAgTWFwPFN0cmluZywgTWVtYmVyQnVpbGRlcj4gY29uc3RydWN0b3JzID0gZGVjbGFyYXRpb24uY29uc3RydWN0b3JzOwogICAgTWFwPFN0cmluZywgTWVtYmVyQnVpbGRlcj4gc2V0dGVycyA9IGRlY2xhcmF0aW9uLnNldHRlcnM7CgogICAgU2NvcGUgY2xhc3NTY29wZSA9IG5ldyBTY29wZSgKICAgICAgICBsb2NhbDogbWVtYmVycywKICAgICAgICBzZXR0ZXJzOiBzZXR0ZXJzLAogICAgICAgIHBhcmVudDogc2NvcGUud2l0aFR5cGVWYXJpYWJsZXModHlwZVZhcmlhYmxlcyksCiAgICAgICAgZGVidWdOYW1lOiAiY2xhc3MgJGNsYXNzTmFtZSIsCiAgICAgICAgaXNNb2RpZmlhYmxlOiBmYWxzZSk7CgogICAgLy8gV2hlbiBsb29raW5nIHVwIGEgY29uc3RydWN0b3IsIHdlIGRvbid0IGNvbnNpZGVyIHR5cGUgdmFyaWFibGVzIG9yIHRoZQogICAgLy8gbGlicmFyeSBzY29wZS4KICAgIFNjb3BlIGNvbnN0cnVjdG9yU2NvcGUgPSBuZXcgU2NvcGUoCiAgICAgICAgbG9jYWw6IGNvbnN0cnVjdG9ycywgZGVidWdOYW1lOiBjbGFzc05hbWUsIGlzTW9kaWZpYWJsZTogZmFsc2UpOwogICAgYm9vbCBpc01peGluRGVjbGFyYXRpb24gPSBmYWxzZTsKICAgIGlmIChtb2RpZmllcnMgJiBtaXhpbkRlY2xhcmF0aW9uTWFzayAhPSAwKSB7CiAgICAgIGlzTWl4aW5EZWNsYXJhdGlvbiA9IHRydWU7CiAgICAgIG1vZGlmaWVycyA9IChtb2RpZmllcnMgJiB+bWl4aW5EZWNsYXJhdGlvbk1hc2spIHwgYWJzdHJhY3RNYXNrOwogICAgfQogICAgaWYgKGRlY2xhcmF0aW9uLmhhc0NvbnN0Q29uc3RydWN0b3IpIHsKICAgICAgbW9kaWZpZXJzIHw9IGhhc0NvbnN0Q29uc3RydWN0b3JNYXNrOwogICAgfQogICAgQ2xhc3NCdWlsZGVyIGNsYXNzQnVpbGRlciA9IG5ldyBTb3VyY2VDbGFzc0J1aWxkZXIoCiAgICAgICAgbWV0YWRhdGEsCiAgICAgICAgbW9kaWZpZXJzLAogICAgICAgIGNsYXNzTmFtZSwKICAgICAgICB0eXBlVmFyaWFibGVzLAogICAgICAgIGFwcGx5TWl4aW5zKHN1cGVydHlwZSwgc3RhcnRPZmZzZXQsIG5hbWVPZmZzZXQsIGVuZE9mZnNldCwgY2xhc3NOYW1lLAogICAgICAgICAgICBpc01peGluRGVjbGFyYXRpb24sCiAgICAgICAgICAgIHR5cGVWYXJpYWJsZXM6IHR5cGVWYXJpYWJsZXMpLAogICAgICAgIGludGVyZmFjZXMsCiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQWRkIHRoZSBgb25gIGNsYXVzZSB0eXBlcyBvZiBhIG1peGluIGRlY2xhcmF0aW9uCiAgICAgICAgLy8gaGVyZS4KICAgICAgICBudWxsLAogICAgICAgIGNsYXNzU2NvcGUsCiAgICAgICAgY29uc3RydWN0b3JTY29wZSwKICAgICAgICB0aGlzLAogICAgICAgIG5ldyBMaXN0PENvbnN0cnVjdG9yUmVmZXJlbmNlQnVpbGRlcj4uZnJvbShjb25zdHJ1Y3RvclJlZmVyZW5jZXMpLAogICAgICAgIHN0YXJ0T2Zmc2V0LAogICAgICAgIG5hbWVPZmZzZXQsCiAgICAgICAgZW5kT2Zmc2V0LAogICAgICAgIGlzTWl4aW5EZWNsYXJhdGlvbjogaXNNaXhpbkRlY2xhcmF0aW9uKTsKICAgIGxvYWRlci50YXJnZXQubWV0YWRhdGFDb2xsZWN0b3IKICAgICAgICA/LnNldERvY3VtZW50YXRpb25Db21tZW50KGNsYXNzQnVpbGRlci5jbHMsIGRvY3VtZW50YXRpb25Db21tZW50KTsKCiAgICBjb25zdHJ1Y3RvclJlZmVyZW5jZXMuY2xlYXIoKTsKICAgIE1hcDxTdHJpbmcsIFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXNCeU5hbWUgPQogICAgICAgIGNoZWNrVHlwZVZhcmlhYmxlcyh0eXBlVmFyaWFibGVzLCBjbGFzc0J1aWxkZXIpOwogICAgdm9pZCBzZXRQYXJlbnQoU3RyaW5nIG5hbWUsIE1lbWJlckJ1aWxkZXIgbWVtYmVyKSB7CiAgICAgIHdoaWxlIChtZW1iZXIgIT0gbnVsbCkgewogICAgICAgIG1lbWJlci5wYXJlbnQgPSBjbGFzc0J1aWxkZXI7CiAgICAgICAgbWVtYmVyID0gbWVtYmVyLm5leHQ7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIHNldFBhcmVudEFuZENoZWNrQ29uZmxpY3RzKFN0cmluZyBuYW1lLCBNZW1iZXJCdWlsZGVyIG1lbWJlcikgewogICAgICBpZiAodHlwZVZhcmlhYmxlc0J5TmFtZSAhPSBudWxsKSB7CiAgICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlciB0diA9IHR5cGVWYXJpYWJsZXNCeU5hbWVbbmFtZV07CiAgICAgICAgaWYgKHR2ICE9IG51bGwpIHsKICAgICAgICAgIGNsYXNzQnVpbGRlci5hZGRQcm9ibGVtKAogICAgICAgICAgICAgIHRlbXBsYXRlQ29uZmxpY3RzV2l0aFR5cGVWYXJpYWJsZS53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgICAgIG1lbWJlci5jaGFyT2Zmc2V0LAogICAgICAgICAgICAgIG5hbWUubGVuZ3RoLAogICAgICAgICAgICAgIGNvbnRleHQ6IFsKICAgICAgICAgICAgICAgIG1lc3NhZ2VDb25mbGljdHNXaXRoVHlwZVZhcmlhYmxlQ2F1c2Uud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgICAgICAgIHR2LmZpbGVVcmksIHR2LmNoYXJPZmZzZXQsIG5hbWUubGVuZ3RoKQogICAgICAgICAgICAgIF0pOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXRQYXJlbnQobmFtZSwgbWVtYmVyKTsKICAgIH0KCiAgICBtZW1iZXJzLmZvckVhY2goc2V0UGFyZW50QW5kQ2hlY2tDb25mbGljdHMpOwogICAgY29uc3RydWN0b3JzLmZvckVhY2goc2V0UGFyZW50QW5kQ2hlY2tDb25mbGljdHMpOwogICAgc2V0dGVycy5mb3JFYWNoKHNldFBhcmVudEFuZENoZWNrQ29uZmxpY3RzKTsKICAgIGFkZEJ1aWxkZXIoY2xhc3NOYW1lLCBjbGFzc0J1aWxkZXIsIG5hbWVPZmZzZXQpOwogIH0KCiAgTWFwPFN0cmluZywgVHlwZVZhcmlhYmxlQnVpbGRlcj4gY2hlY2tUeXBlVmFyaWFibGVzKAogICAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMsIEJ1aWxkZXIgb3duZXIpIHsKICAgIGlmICh0eXBlVmFyaWFibGVzPy5pc0VtcHR5ID8/IHRydWUpIHJldHVybiBudWxsOwogICAgTWFwPFN0cmluZywgVHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlc0J5TmFtZSA9CiAgICAgICAgPFN0cmluZywgVHlwZVZhcmlhYmxlQnVpbGRlcj57fTsKICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciB0diBpbiB0eXBlVmFyaWFibGVzKSB7CiAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXIgZXhpc3RpbmcgPSB0eXBlVmFyaWFibGVzQnlOYW1lW3R2Lm5hbWVdOwogICAgICBpZiAoZXhpc3RpbmcgIT0gbnVsbCkgewogICAgICAgIGlmIChleGlzdGluZy5pc0V4dGVuc2lvblR5cGVQYXJhbWV0ZXIpIHsKICAgICAgICAgIHR5cGVWYXJpYWJsZXNCeU5hbWVbdHYubmFtZV0gPSB0djsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYWRkUHJvYmxlbShtZXNzYWdlVHlwZVZhcmlhYmxlRHVwbGljYXRlZE5hbWUsIHR2LmNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgdHYubmFtZS5sZW5ndGgsIGZpbGVVcmksCiAgICAgICAgICAgICAgY29udGV4dDogWwogICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlVmFyaWFibGVEdXBsaWNhdGVkTmFtZUNhdXNlCiAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHModHYubmFtZSkKICAgICAgICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICBmaWxlVXJpLCBleGlzdGluZy5jaGFyT2Zmc2V0LCBleGlzdGluZy5uYW1lLmxlbmd0aCkKICAgICAgICAgICAgICBdKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdHlwZVZhcmlhYmxlc0J5TmFtZVt0di5uYW1lXSA9IHR2OwogICAgICAgIGlmIChvd25lciBpcyBDbGFzc0J1aWxkZXIpIHsKICAgICAgICAgIC8vIE9ubHkgY2xhc3NlcyBhbmQgdHlwZSB2YXJpYWJsZXMgY2FuJ3QgaGF2ZSB0aGUgc2FtZSBuYW1lLiBTZWUKICAgICAgICAgIC8vIFsjMjk1NTVdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvc2RrL2lzc3Vlcy8yOTU1NSkuCiAgICAgICAgICBpZiAodHYubmFtZSA9PSBvd25lci5uYW1lKSB7CiAgICAgICAgICAgIGFkZFByb2JsZW0obWVzc2FnZVR5cGVWYXJpYWJsZVNhbWVOYW1lQXNFbmNsb3NpbmcsIHR2LmNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICB0di5uYW1lLmxlbmd0aCwgZmlsZVVyaSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHlwZVZhcmlhYmxlc0J5TmFtZTsKICB9CgogIHZvaWQgYWRkRXh0ZW5zaW9uRGVjbGFyYXRpb24oCiAgICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCwKICAgICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLAogICAgICBpbnQgbW9kaWZpZXJzLAogICAgICBTdHJpbmcgZXh0ZW5zaW9uTmFtZSwKICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzLAogICAgICBUeXBlQnVpbGRlciB0eXBlLAogICAgICBpbnQgc3RhcnRPZmZzZXQsCiAgICAgIGludCBuYW1lT2Zmc2V0LAogICAgICBpbnQgZW5kT2Zmc2V0KSB7CiAgICAvLyBOZXN0ZWQgZGVjbGFyYXRpb24gYmVnYW4gaW4gYE91dGxpbmVCdWlsZGVyLmJlZ2luRXh0ZW5zaW9uRGVjbGFyYXRpb25gLgogICAgVHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlciBkZWNsYXJhdGlvbiA9IGVuZE5lc3RlZERlY2xhcmF0aW9uKAogICAgICAgIFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQuZXh0ZW5zaW9uRGVjbGFyYXRpb24sIGV4dGVuc2lvbk5hbWUpCiAgICAgIC4ucmVzb2x2ZVR5cGVzKHR5cGVWYXJpYWJsZXMsIHRoaXMpOwogICAgYXNzZXJ0KGRlY2xhcmF0aW9uLnBhcmVudCA9PSBsaWJyYXJ5RGVjbGFyYXRpb24pOwogICAgTWFwPFN0cmluZywgTWVtYmVyQnVpbGRlcj4gbWVtYmVycyA9IGRlY2xhcmF0aW9uLm1lbWJlcnM7CiAgICBNYXA8U3RyaW5nLCBNZW1iZXJCdWlsZGVyPiBjb25zdHJ1Y3RvcnMgPSBkZWNsYXJhdGlvbi5jb25zdHJ1Y3RvcnM7CiAgICBNYXA8U3RyaW5nLCBNZW1iZXJCdWlsZGVyPiBzZXR0ZXJzID0gZGVjbGFyYXRpb24uc2V0dGVyczsKCiAgICBTY29wZSBjbGFzc1Njb3BlID0gbmV3IFNjb3BlKAogICAgICAgIGxvY2FsOiBtZW1iZXJzLAogICAgICAgIHNldHRlcnM6IHNldHRlcnMsCiAgICAgICAgcGFyZW50OiBzY29wZS53aXRoVHlwZVZhcmlhYmxlcyh0eXBlVmFyaWFibGVzKSwKICAgICAgICBkZWJ1Z05hbWU6ICJleHRlbnNpb24gJGV4dGVuc2lvbk5hbWUiLAogICAgICAgIGlzTW9kaWZpYWJsZTogZmFsc2UpOwoKICAgIEV4dGVuc2lvbkJ1aWxkZXIgZXh0ZW5zaW9uQnVpbGRlciA9IG5ldyBTb3VyY2VFeHRlbnNpb25CdWlsZGVyKAogICAgICAgIG1ldGFkYXRhLAogICAgICAgIG1vZGlmaWVycywKICAgICAgICBleHRlbnNpb25OYW1lLAogICAgICAgIHR5cGVWYXJpYWJsZXMsCiAgICAgICAgdHlwZSwKICAgICAgICBjbGFzc1Njb3BlLAogICAgICAgIHRoaXMsCiAgICAgICAgc3RhcnRPZmZzZXQsCiAgICAgICAgbmFtZU9mZnNldCwKICAgICAgICBlbmRPZmZzZXQpOwogICAgbG9hZGVyLnRhcmdldC5tZXRhZGF0YUNvbGxlY3Rvcj8uc2V0RG9jdW1lbnRhdGlvbkNvbW1lbnQoCiAgICAgICAgZXh0ZW5zaW9uQnVpbGRlci5leHRlbnNpb24sIGRvY3VtZW50YXRpb25Db21tZW50KTsKCiAgICBjb25zdHJ1Y3RvclJlZmVyZW5jZXMuY2xlYXIoKTsKICAgIE1hcDxTdHJpbmcsIFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXNCeU5hbWUgPQogICAgICAgIGNoZWNrVHlwZVZhcmlhYmxlcyh0eXBlVmFyaWFibGVzLCBleHRlbnNpb25CdWlsZGVyKTsKICAgIHZvaWQgc2V0UGFyZW50KFN0cmluZyBuYW1lLCBNZW1iZXJCdWlsZGVyIG1lbWJlcikgewogICAgICB3aGlsZSAobWVtYmVyICE9IG51bGwpIHsKICAgICAgICBtZW1iZXIucGFyZW50ID0gZXh0ZW5zaW9uQnVpbGRlcjsKICAgICAgICBtZW1iZXIgPSBtZW1iZXIubmV4dDsKICAgICAgfQogICAgfQoKICAgIHZvaWQgc2V0UGFyZW50QW5kQ2hlY2tDb25mbGljdHMoU3RyaW5nIG5hbWUsIE1lbWJlckJ1aWxkZXIgbWVtYmVyKSB7CiAgICAgIGlmICh0eXBlVmFyaWFibGVzQnlOYW1lICE9IG51bGwpIHsKICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyIHR2ID0gdHlwZVZhcmlhYmxlc0J5TmFtZVtuYW1lXTsKICAgICAgICBpZiAodHYgIT0gbnVsbCkgewogICAgICAgICAgZXh0ZW5zaW9uQnVpbGRlci5hZGRQcm9ibGVtKAogICAgICAgICAgICAgIHRlbXBsYXRlQ29uZmxpY3RzV2l0aFR5cGVWYXJpYWJsZS53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgICAgIG1lbWJlci5jaGFyT2Zmc2V0LAogICAgICAgICAgICAgIG5hbWUubGVuZ3RoLAogICAgICAgICAgICAgIGNvbnRleHQ6IFsKICAgICAgICAgICAgICAgIG1lc3NhZ2VDb25mbGljdHNXaXRoVHlwZVZhcmlhYmxlQ2F1c2Uud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgICAgICAgIHR2LmZpbGVVcmksIHR2LmNoYXJPZmZzZXQsIG5hbWUubGVuZ3RoKQogICAgICAgICAgICAgIF0pOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXRQYXJlbnQobmFtZSwgbWVtYmVyKTsKICAgIH0KCiAgICBtZW1iZXJzLmZvckVhY2goc2V0UGFyZW50QW5kQ2hlY2tDb25mbGljdHMpOwogICAgY29uc3RydWN0b3JzLmZvckVhY2goc2V0UGFyZW50QW5kQ2hlY2tDb25mbGljdHMpOwogICAgc2V0dGVycy5mb3JFYWNoKHNldFBhcmVudEFuZENoZWNrQ29uZmxpY3RzKTsKICAgIGFkZEJ1aWxkZXIoZXh0ZW5zaW9uTmFtZSwgZXh0ZW5zaW9uQnVpbGRlciwgbmFtZU9mZnNldCk7CiAgfQoKICBUeXBlQnVpbGRlciBhcHBseU1peGlucyhUeXBlQnVpbGRlciB0eXBlLCBpbnQgc3RhcnRDaGFyT2Zmc2V0LCBpbnQgY2hhck9mZnNldCwKICAgICAgaW50IGNoYXJFbmRPZmZzZXQsIFN0cmluZyBzdWJjbGFzc05hbWUsIGJvb2wgaXNNaXhpbkRlY2xhcmF0aW9uLAogICAgICB7U3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMsCiAgICAgIGludCBtb2RpZmllcnMsCiAgICAgIExpc3Q8VHlwZUJ1aWxkZXI+IGludGVyZmFjZXN9KSB7CiAgICBpZiAobmFtZSA9PSBudWxsKSB7CiAgICAgIC8vIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBzaG91bGQgb25seSBiZSB1c2VkIHdoZW4gYnVpbGRpbmcgYSBuYW1lZAogICAgICAvLyBtaXhpbiBhcHBsaWNhdGlvbi4KICAgICAgaWYgKGRvY3VtZW50YXRpb25Db21tZW50ICE9IG51bGwpIHsKICAgICAgICB1bmhhbmRsZWQoImRvY3VtZW50YXRpb25Db21tZW50IiwgInVubmFtZWQgbWl4aW4gYXBwbGljYXRpb24iLAogICAgICAgICAgICBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICAgICAgfSBlbHNlIGlmIChtZXRhZGF0YSAhPSBudWxsKSB7CiAgICAgICAgdW5oYW5kbGVkKCJtZXRhZGF0YSIsICJ1bm5hbWVkIG1peGluIGFwcGxpY2F0aW9uIiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICAgIH0gZWxzZSBpZiAoaW50ZXJmYWNlcyAhPSBudWxsKSB7CiAgICAgICAgdW5oYW5kbGVkKAogICAgICAgICAgICAiaW50ZXJmYWNlcyIsICJ1bm5hbWVkIG1peGluIGFwcGxpY2F0aW9uIiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICAgIH0KICAgIH0KICAgIGlmICh0eXBlIGlzIE1peGluQXBwbGljYXRpb25CdWlsZGVyKSB7CiAgICAgIC8vIERvY3VtZW50YXRpb24gYmVsb3cgYXNzdW1lcyB0aGUgZ2l2ZW4gbWl4aW4gYXBwbGljYXRpb24gaXMgaW4gb25lIG9mCiAgICAgIC8vIHRoZXNlIGZvcm1zOgogICAgICAvLwogICAgICAvLyAgICAgY2xhc3MgQyBleHRlbmRzIFMgd2l0aCBNMSwgTTIsIE0zOwogICAgICAvLyAgICAgY2xhc3MgTmFtZWQgPSBTIHdpdGggTTEsIE0yLCBNMzsKICAgICAgLy8KICAgICAgLy8gV2hlbiB3ZSByZWZlciB0byB0aGUgc3ViY2xhc3MsIHdlIG1lYW4gYENgIG9yIGBOYW1lZGAuCgogICAgICAvLy8gVGhlIGN1cnJlbnQgc3VwZXJ0eXBlLgogICAgICAvLy8KICAgICAgLy8vIFN0YXJ0cyBvdXQgaGF2aW5nIHRoZSB2YWx1ZSBgU2AgYW5kIG9uIGVhY2ggaXRlcmF0aW9uIG9mIHRoZSBsb29wCiAgICAgIC8vLyBiZWxvdywgaXQgd2lsbCB0YWtlIG9uIHRoZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvOgogICAgICAvLy8KICAgICAgLy8vIDEuIGBTIHdpdGggTTFgLgogICAgICAvLy8gMi4gYChTIHdpdGggTTEpIHdpdGggTTJgLgogICAgICAvLy8gMy4gYCgoUyB3aXRoIE0xKSB3aXRoIE0yKSB3aXRoIE0zYC4KICAgICAgVHlwZUJ1aWxkZXIgc3VwZXJ0eXBlID0gdHlwZS5zdXBlcnR5cGUgPz8gbG9hZGVyLnRhcmdldC5vYmplY3RUeXBlOwoKICAgICAgLy8vIFRoZSB2YXJpYWJsZSBwYXJ0IG9mIHRoZSBtaXhpbiBhcHBsaWNhdGlvbidzIHN5bnRoZXRpYyBuYW1lLiBJdAogICAgICAvLy8gc3RhcnRzIG91dCBhcyB0aGUgbmFtZSBvZiB0aGUgc3VwZXJjbGFzcywgYnV0IGlzIG9ubHkgdXNlZCBhZnRlciBpdAogICAgICAvLy8gaGFzIGJlZW4gY29tYmluZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBtaXhpbi4gSW4gdGhlIGV4YW1wbGVzCiAgICAgIC8vLyBmcm9tIGFib3ZlLCBpdCB3aWxsIHRha2UgdGhlc2UgdmFsdWVzOgogICAgICAvLy8KICAgICAgLy8vIDEuIGBTJk0xYAogICAgICAvLy8gMi4gYFMmTTEmTTJgCiAgICAgIC8vLyAzLiBgUyZNMSZNMiZNM2AuCiAgICAgIC8vLwogICAgICAvLy8gVGhlIGZ1bGwgbmFtZSBvZiB0aGUgbWl4aW4gYXBwbGljYXRpb24gaXMgb2J0YWluZWQgYnkgcHJlcGVuZGluZyB0aGUKICAgICAgLy8vIG5hbWUgb2YgdGhlIHN1YmNsYXNzIChgQ2Agb3IgYE5hbWVkYCBpbiB0aGUgYWJvdmUgZXhhbXBsZXMpIHRvIHRoZQogICAgICAvLy8gcnVubmluZyBuYW1lLiBGb3IgdGhlIGV4YW1wbGUgYENgLCB0aGF0IGxlYWRzIHRvIHRoZXNlIGZ1bGwgbmFtZXM6CiAgICAgIC8vLwogICAgICAvLy8gMS4gYF9DJlMmTTFgCiAgICAgIC8vLyAyLiBgX0MmUyZNMSZNMmAKICAgICAgLy8vIDMuIGBfQyZTJk0xJk0yJk0zYC4KICAgICAgLy8vCiAgICAgIC8vLyBGb3IgYSBuYW1lZCBtaXhpbiBhcHBsaWNhdGlvbiwgdGhlIGxhc3QgbmFtZSBoYXMgYmVlbiBnaXZlbiBieSB0aGUKICAgICAgLy8vIHByb2dyYW1tZXIsIHNvIGZvciB0aGUgZXhhbXBsZSBgTmFtZWRgIHdlIHNlZSB0aGVzZSBmdWxsIG5hbWVzOgogICAgICAvLy8KICAgICAgLy8vIDEuIGBfTmFtZWQmUyZNMWAKICAgICAgLy8vIDIuIGBfTmFtZWQmUyZNMSZNMmAKICAgICAgLy8vIDMuIGBOYW1lZGAuCiAgICAgIFN0cmluZyBydW5uaW5nTmFtZSA9IGV4dHJhY3ROYW1lKHN1cGVydHlwZS5uYW1lKTsKCiAgICAgIC8vLyBUcnVlIHdoZW4gd2UncmUgYnVpbGRpbmcgYSBuYW1lZCBtaXhpbiBhcHBsaWNhdGlvbi4gTm90aWNlIHRoYXQgZm9yCiAgICAgIC8vLyB0aGUgYE5hbWVkYCBleGFtcGxlIGFib3ZlLCB0aGlzIGlzIG9ubHkgdHJ1ZSBvbiB0aGUgbGFzdAogICAgICAvLy8gaXRlcmF0aW9uIGJlY2F1c2Ugb25seSB0aGUgZnVsbCBtaXhpbiBhcHBsaWNhdGlvbiBpcyBuYW1lZC4KICAgICAgYm9vbCBpc05hbWVkTWl4aW5BcHBsaWNhdGlvbjsKCiAgICAgIC8vLyBUaGUgbmFtZXMgb2YgdGhlIHR5cGUgdmFyaWFibGVzIG9mIHRoZSBzdWJjbGFzcy4KICAgICAgU2V0PFN0cmluZz4gdHlwZVZhcmlhYmxlTmFtZXM7CiAgICAgIGlmICh0eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgICB0eXBlVmFyaWFibGVOYW1lcyA9IG5ldyBTZXQ8U3RyaW5nPigpOwogICAgICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciB0eXBlVmFyaWFibGUgaW4gdHlwZVZhcmlhYmxlcykgewogICAgICAgICAgdHlwZVZhcmlhYmxlTmFtZXMuYWRkKHR5cGVWYXJpYWJsZS5uYW1lKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vLyBIZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGB0cnVlYCBpZiBhIHR5cGUgdmFyaWFibGUgd2l0aCBhIG5hbWUKICAgICAgLy8vIGZyb20gW3R5cGVWYXJpYWJsZU5hbWVzXSBpcyByZWZlcmVuY2VkIGluIFt0eXBlXS4KICAgICAgYm9vbCB1c2VzVHlwZVZhcmlhYmxlcyhUeXBlQnVpbGRlciB0eXBlKSB7CiAgICAgICAgaWYgKHR5cGUgaXMgTmFtZWRUeXBlQnVpbGRlcikgewogICAgICAgICAgaWYgKHR5cGUuZGVjbGFyYXRpb24gaXMgVHlwZVZhcmlhYmxlQnVpbGRlcikgewogICAgICAgICAgICByZXR1cm4gdHlwZVZhcmlhYmxlTmFtZXMuY29udGFpbnModHlwZS5kZWNsYXJhdGlvbi5uYW1lKTsKICAgICAgICAgIH0KCiAgICAgICAgICBMaXN0PFR5cGVCdWlsZGVyPiB0eXBlQXJndW1lbnRzID0gdHlwZS5hcmd1bWVudHM7CiAgICAgICAgICBpZiAodHlwZUFyZ3VtZW50cyAhPSBudWxsICYmIHR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICAgICAgICBmb3IgKFR5cGVCdWlsZGVyIGFyZ3VtZW50IGluIHR5cGVBcmd1bWVudHMpIHsKICAgICAgICAgICAgICBpZiAodXNlc1R5cGVWYXJpYWJsZXMoYXJndW1lbnQpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHR5cGUgaXMgRnVuY3Rpb25UeXBlQnVpbGRlcikgewogICAgICAgICAgaWYgKHR5cGUuZm9ybWFscyAhPSBudWxsKSB7CiAgICAgICAgICAgIGZvciAoRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBmb3JtYWwgaW4gdHlwZS5mb3JtYWxzKSB7CiAgICAgICAgICAgICAgaWYgKHVzZXNUeXBlVmFyaWFibGVzKGZvcm1hbC50eXBlKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdXNlc1R5cGVWYXJpYWJsZXModHlwZS5yZXR1cm5UeXBlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgICAvLy8gSXRlcmF0ZSBvdmVyIHRoZSBtaXhpbnMgZnJvbSBsZWZ0IHRvIHJpZ2h0LiBBdCB0aGUgZW5kIG9mIGVhY2gKICAgICAgLy8vIGl0ZXJhdGlvbiwgYSBuZXcgW3N1cGVydHlwZV0gaXMgY29tcHV0ZWQgdGhhdCBpcyB0aGUgbWl4aW4KICAgICAgLy8vIGFwcGxpY2F0aW9uIG9mIFtzdXBlcnR5cGVdIHdpdGggdGhlIGN1cnJlbnQgbWl4aW4uCiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZS5taXhpbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBUeXBlQnVpbGRlciBtaXhpbiA9IHR5cGUubWl4aW5zW2ldOwogICAgICAgIGlzTmFtZWRNaXhpbkFwcGxpY2F0aW9uID0gbmFtZSAhPSBudWxsICYmIG1peGluID09IHR5cGUubWl4aW5zLmxhc3Q7CiAgICAgICAgYm9vbCBpc0dlbmVyaWMgPSBmYWxzZTsKICAgICAgICBpZiAoIWlzTmFtZWRNaXhpbkFwcGxpY2F0aW9uKSB7CiAgICAgICAgICBpZiAoc3VwZXJ0eXBlIGlzIE5hbWVkVHlwZUJ1aWxkZXIpIHsKICAgICAgICAgICAgaXNHZW5lcmljID0gaXNHZW5lcmljIHx8IHVzZXNUeXBlVmFyaWFibGVzKHN1cGVydHlwZSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAobWl4aW4gaXMgTmFtZWRUeXBlQnVpbGRlcikgewogICAgICAgICAgICBydW5uaW5nTmFtZSArPSAiJiR7ZXh0cmFjdE5hbWUobWl4aW4ubmFtZSl9IjsKICAgICAgICAgICAgaXNHZW5lcmljID0gaXNHZW5lcmljIHx8IHVzZXNUeXBlVmFyaWFibGVzKG1peGluKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgU3RyaW5nIGZ1bGxuYW1lID0KICAgICAgICAgICAgaXNOYW1lZE1peGluQXBwbGljYXRpb24gPyBuYW1lIDogIl8kc3ViY2xhc3NOYW1lJiRydW5uaW5nTmFtZSI7CiAgICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiBhcHBsaWNhdGlvblR5cGVWYXJpYWJsZXM7CiAgICAgICAgTGlzdDxUeXBlQnVpbGRlcj4gYXBwbGljYXRpb25UeXBlQXJndW1lbnRzOwogICAgICAgIGlmIChpc05hbWVkTWl4aW5BcHBsaWNhdGlvbikgewogICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIG5hbWVkIG1peGluIGFwcGxpY2F0aW9uLCBpdCBtdXN0IGJlIGdpdmVuIGFsbCB0aGUKICAgICAgICAgIC8vIGRlY2xhcmF0ZWQgdHlwZSB2YXJpYWJsZXMuCiAgICAgICAgICBhcHBsaWNhdGlvblR5cGVWYXJpYWJsZXMgPSB0eXBlVmFyaWFibGVzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlIHBhc3MgdGhlIGZyZXNoIHR5cGUgdmFyaWFibGVzIHRvIHRoZSBtaXhpbgogICAgICAgICAgLy8gYXBwbGljYXRpb24gaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhleSdyZSBkZWNsYXJlZCBvbiB0aGUgc3ViY2xhc3MuCiAgICAgICAgICBpZiAoaXNHZW5lcmljKSB7CiAgICAgICAgICAgIHRoaXMuYmVnaW5OZXN0ZWREZWNsYXJhdGlvbigKICAgICAgICAgICAgICAgIFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQudW5uYW1lZE1peGluQXBwbGljYXRpb24sCiAgICAgICAgICAgICAgICAibWl4aW4gYXBwbGljYXRpb24iKTsKCiAgICAgICAgICAgIGFwcGxpY2F0aW9uVHlwZVZhcmlhYmxlcyA9IGNvcHlUeXBlVmFyaWFibGVzKAogICAgICAgICAgICAgICAgdHlwZVZhcmlhYmxlcywgY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIpOwoKICAgICAgICAgICAgTGlzdDxUeXBlQnVpbGRlcj4gbmV3VHlwZXMgPSA8VHlwZUJ1aWxkZXI+W107CiAgICAgICAgICAgIGlmIChzdXBlcnR5cGUgaXMgTmFtZWRUeXBlQnVpbGRlciAmJiBzdXBlcnR5cGUuYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN1cGVydHlwZS5hcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgICAgIHN1cGVydHlwZS5hcmd1bWVudHNbaV0gPSBzdXBlcnR5cGUuYXJndW1lbnRzW2ldLmNsb25lKG5ld1R5cGVzKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKG1peGluIGlzIE5hbWVkVHlwZUJ1aWxkZXIgJiYgbWl4aW4uYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1peGluLmFyZ3VtZW50cy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAgbWl4aW4uYXJndW1lbnRzW2ldID0gbWl4aW4uYXJndW1lbnRzW2ldLmNsb25lKG5ld1R5cGVzKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yIChUeXBlQnVpbGRlciBuZXdUeXBlIGluIG5ld1R5cGVzKSB7CiAgICAgICAgICAgICAgY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIKICAgICAgICAgICAgICAgICAgLmFkZFR5cGUobmV3IFVucmVzb2x2ZWRUeXBlKG5ld1R5cGUsIC0xLCBudWxsKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIgbWl4aW5EZWNsYXJhdGlvbiA9IHRoaXMKICAgICAgICAgICAgICAgIC5lbmROZXN0ZWREZWNsYXJhdGlvbigKICAgICAgICAgICAgICAgICAgICBUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLnVubmFtZWRNaXhpbkFwcGxpY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICJtaXhpbiBhcHBsaWNhdGlvbiIpOwogICAgICAgICAgICBtaXhpbkRlY2xhcmF0aW9uLnJlc29sdmVUeXBlcyhhcHBsaWNhdGlvblR5cGVWYXJpYWJsZXMsIHRoaXMpOwoKICAgICAgICAgICAgYXBwbGljYXRpb25UeXBlQXJndW1lbnRzID0gPFR5cGVCdWlsZGVyPltdOwogICAgICAgICAgICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgdHlwZVZhcmlhYmxlIGluIHR5cGVWYXJpYWJsZXMpIHsKICAgICAgICAgICAgICBhcHBsaWNhdGlvblR5cGVBcmd1bWVudHMKICAgICAgICAgICAgICAgICAgLmFkZChhZGROYW1lZFR5cGUodHlwZVZhcmlhYmxlLm5hbWUsIG51bGwsIGNoYXJPZmZzZXQpLi5iaW5kKAogICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHR5cGUgdmFyaWFibGUgdHlwZXMgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byB0aGUKICAgICAgICAgICAgICAgICAgICAgIC8vIGdlbmVyaWMgY2xhc3MgcmVwcmVzZW50aW5nIHRoZSBhbm9ueW1vdXMgbWl4aW4KICAgICAgICAgICAgICAgICAgICAgIC8vIGFwcGxpY2F0aW9uIHNob3VsZCByZWZlciBiYWNrIHRvIHRoZSB0eXBlIHZhcmlhYmxlcyBvZgogICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGNsYXNzIHRoYXQgZXh0ZW5kIHRoZSBhbm9ueW1vdXMgbWl4aW4gYXBwbGljYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICB0eXBlVmFyaWFibGUpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmaW5hbCBpbnQgY29tcHV0ZWRTdGFydENoYXJPZmZzZXQgPQogICAgICAgICAgICAoaXNOYW1lZE1peGluQXBwbGljYXRpb24gPyBtZXRhZGF0YSA6IG51bGwpID09IG51bGwKICAgICAgICAgICAgICAgID8gc3RhcnRDaGFyT2Zmc2V0CiAgICAgICAgICAgICAgICA6IG1ldGFkYXRhLmZpcnN0LmNoYXJPZmZzZXQ7CiAgICAgICAgU291cmNlQ2xhc3NCdWlsZGVyIGFwcGxpY2F0aW9uID0gbmV3IFNvdXJjZUNsYXNzQnVpbGRlcigKICAgICAgICAgICAgaXNOYW1lZE1peGluQXBwbGljYXRpb24gPyBtZXRhZGF0YSA6IG51bGwsCiAgICAgICAgICAgIGlzTmFtZWRNaXhpbkFwcGxpY2F0aW9uCiAgICAgICAgICAgICAgICA/IG1vZGlmaWVycyB8IG5hbWVkTWl4aW5BcHBsaWNhdGlvbk1hc2sKICAgICAgICAgICAgICAgIDogYWJzdHJhY3RNYXNrLAogICAgICAgICAgICBmdWxsbmFtZSwKICAgICAgICAgICAgYXBwbGljYXRpb25UeXBlVmFyaWFibGVzLAogICAgICAgICAgICBpc01peGluRGVjbGFyYXRpb24gPyBudWxsIDogc3VwZXJ0eXBlLAogICAgICAgICAgICBpc05hbWVkTWl4aW5BcHBsaWNhdGlvbgogICAgICAgICAgICAgICAgPyBpbnRlcmZhY2VzCiAgICAgICAgICAgICAgICA6IGlzTWl4aW5EZWNsYXJhdGlvbiA/IFtzdXBlcnR5cGUsIG1peGluXSA6IG51bGwsCiAgICAgICAgICAgIG51bGwsIC8vIE5vIGBvbmAgY2xhdXNlIHR5cGVzLgogICAgICAgICAgICBuZXcgU2NvcGUoCiAgICAgICAgICAgICAgICBsb2NhbDogPFN0cmluZywgTWVtYmVyQnVpbGRlcj57fSwKICAgICAgICAgICAgICAgIHNldHRlcnM6IDxTdHJpbmcsIE1lbWJlckJ1aWxkZXI+e30sCiAgICAgICAgICAgICAgICBwYXJlbnQ6IHNjb3BlLndpdGhUeXBlVmFyaWFibGVzKHR5cGVWYXJpYWJsZXMpLAogICAgICAgICAgICAgICAgZGVidWdOYW1lOiAibWl4aW4gJGZ1bGxuYW1lICIsCiAgICAgICAgICAgICAgICBpc01vZGlmaWFibGU6IGZhbHNlKSwKICAgICAgICAgICAgbmV3IFNjb3BlKAogICAgICAgICAgICAgICAgbG9jYWw6IDxTdHJpbmcsIE1lbWJlckJ1aWxkZXI+e30sCiAgICAgICAgICAgICAgICBkZWJ1Z05hbWU6IGZ1bGxuYW1lLAogICAgICAgICAgICAgICAgaXNNb2RpZmlhYmxlOiBmYWxzZSksCiAgICAgICAgICAgIHRoaXMsCiAgICAgICAgICAgIDxDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXI+W10sCiAgICAgICAgICAgIGNvbXB1dGVkU3RhcnRDaGFyT2Zmc2V0LAogICAgICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgICAgICBjaGFyRW5kT2Zmc2V0LAogICAgICAgICAgICBtaXhlZEluVHlwZTogaXNNaXhpbkRlY2xhcmF0aW9uID8gbnVsbCA6IG1peGluKTsKICAgICAgICBpZiAoaXNOYW1lZE1peGluQXBwbGljYXRpb24pIHsKICAgICAgICAgIGxvYWRlci50YXJnZXQubWV0YWRhdGFDb2xsZWN0b3IKICAgICAgICAgICAgICA/LnNldERvY3VtZW50YXRpb25Db21tZW50KGFwcGxpY2F0aW9uLmNscywgZG9jdW1lbnRhdGlvbkNvbW1lbnQpOwogICAgICAgIH0KICAgICAgICAvLyBUT0RPKGFoZSwga21pbGxpa2luKTogU2hvdWxkIGFsd2F5cyBiZSB0cnVlPwogICAgICAgIC8vIHBrZy9hbmFseXplci90ZXN0L3NyYy9zdW1tYXJ5L3Jlc3ludGhlc2l6ZV9rZXJuZWxfdGVzdC5kYXJ0IGNhbid0CiAgICAgICAgLy8gaGFuZGxlIHRoYXQgOigKICAgICAgICBhcHBsaWNhdGlvbi5jbHMuaXNBbm9ueW1vdXNNaXhpbiA9ICFpc05hbWVkTWl4aW5BcHBsaWNhdGlvbjsKICAgICAgICBhZGRCdWlsZGVyKGZ1bGxuYW1lLCBhcHBsaWNhdGlvbiwgY2hhck9mZnNldCk7CiAgICAgICAgc3VwZXJ0eXBlID0KICAgICAgICAgICAgYWRkTmFtZWRUeXBlKGZ1bGxuYW1lLCBhcHBsaWNhdGlvblR5cGVBcmd1bWVudHMsIGNoYXJPZmZzZXQpOwogICAgICB9CiAgICAgIHJldHVybiBzdXBlcnR5cGU7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gdHlwZTsKICAgIH0KICB9CgogIHZvaWQgYWRkTmFtZWRNaXhpbkFwcGxpY2F0aW9uKAogICAgICBTdHJpbmcgZG9jdW1lbnRhdGlvbkNvbW1lbnQsCiAgICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSwKICAgICAgU3RyaW5nIG5hbWUsCiAgICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcywKICAgICAgaW50IG1vZGlmaWVycywKICAgICAgVHlwZUJ1aWxkZXIgbWl4aW5BcHBsaWNhdGlvbiwKICAgICAgTGlzdDxUeXBlQnVpbGRlcj4gaW50ZXJmYWNlcywKICAgICAgaW50IHN0YXJ0Q2hhck9mZnNldCwKICAgICAgaW50IGNoYXJPZmZzZXQsCiAgICAgIGludCBjaGFyRW5kT2Zmc2V0KSB7CiAgICAvLyBOZXN0ZWQgZGVjbGFyYXRpb24gYmVnYW4gaW4gYE91dGxpbmVCdWlsZGVyLmJlZ2luTmFtZWRNaXhpbkFwcGxpY2F0aW9uYC4KICAgIGVuZE5lc3RlZERlY2xhcmF0aW9uKFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQubmFtZWRNaXhpbkFwcGxpY2F0aW9uLCBuYW1lKQogICAgICAgIC5yZXNvbHZlVHlwZXModHlwZVZhcmlhYmxlcywgdGhpcyk7CiAgICBOYW1lZFR5cGVCdWlsZGVyIHN1cGVydHlwZSA9IGFwcGx5TWl4aW5zKG1peGluQXBwbGljYXRpb24sIHN0YXJ0Q2hhck9mZnNldCwKICAgICAgICBjaGFyT2Zmc2V0LCBjaGFyRW5kT2Zmc2V0LCBuYW1lLCBmYWxzZSwKICAgICAgICBkb2N1bWVudGF0aW9uQ29tbWVudDogZG9jdW1lbnRhdGlvbkNvbW1lbnQsCiAgICAgICAgbWV0YWRhdGE6IG1ldGFkYXRhLAogICAgICAgIG5hbWU6IG5hbWUsCiAgICAgICAgdHlwZVZhcmlhYmxlczogdHlwZVZhcmlhYmxlcywKICAgICAgICBtb2RpZmllcnM6IG1vZGlmaWVycywKICAgICAgICBpbnRlcmZhY2VzOiBpbnRlcmZhY2VzKTsKICAgIGNoZWNrVHlwZVZhcmlhYmxlcyh0eXBlVmFyaWFibGVzLCBzdXBlcnR5cGUuZGVjbGFyYXRpb24pOwogIH0KCiAgdm9pZCBhZGRGaWVsZCgKICAgICAgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIGludCBtb2RpZmllcnMsCiAgICAgIFR5cGVCdWlsZGVyIHR5cGUsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBpbnQgY2hhck9mZnNldCwKICAgICAgaW50IGNoYXJFbmRPZmZzZXQsCiAgICAgIFRva2VuIGluaXRpYWxpemVyVG9rZW4sCiAgICAgIGJvb2wgaGFzSW5pdGlhbGl6ZXIsCiAgICAgIHtUb2tlbiBjb25zdEluaXRpYWxpemVyVG9rZW59KSB7CiAgICBpZiAoaGFzSW5pdGlhbGl6ZXIpIHsKICAgICAgbW9kaWZpZXJzIHw9IGhhc0luaXRpYWxpemVyTWFzazsKICAgIH0KICAgIEZpZWxkQnVpbGRlciBmaWVsZEJ1aWxkZXIgPSBuZXcgRmllbGRCdWlsZGVyKAogICAgICAgIG1ldGFkYXRhLCB0eXBlLCBuYW1lLCBtb2RpZmllcnMsIHRoaXMsIGNoYXJPZmZzZXQsIGNoYXJFbmRPZmZzZXQpOwogICAgZmllbGRCdWlsZGVyLmNvbnN0SW5pdGlhbGl6ZXJUb2tlbiA9IGNvbnN0SW5pdGlhbGl6ZXJUb2tlbjsKICAgIGFkZEJ1aWxkZXIobmFtZSwgZmllbGRCdWlsZGVyLCBjaGFyT2Zmc2V0KTsKICAgIGlmICghbGVnYWN5TW9kZSAmJiB0eXBlID09IG51bGwgJiYgaW5pdGlhbGl6ZXJUb2tlbiAhPSBudWxsKSB7CiAgICAgIGZpZWxkQnVpbGRlci5maWVsZC50eXBlID0KICAgICAgICAgIG5ldyBJbXBsaWNpdEZpZWxkVHlwZShmaWVsZEJ1aWxkZXIsIGluaXRpYWxpemVyVG9rZW4pOwogICAgICAoaW1wbGljaXRseVR5cGVkRmllbGRzID8/PSA8RmllbGRCdWlsZGVyPltdKS5hZGQoZmllbGRCdWlsZGVyKTsKICAgIH0KICAgIGxvYWRlci50YXJnZXQubWV0YWRhdGFDb2xsZWN0b3IKICAgICAgICA/LnNldERvY3VtZW50YXRpb25Db21tZW50KGZpZWxkQnVpbGRlci5maWVsZCwgZG9jdW1lbnRhdGlvbkNvbW1lbnQpOwogIH0KCiAgdm9pZCBhZGRDb25zdHJ1Y3RvcigKICAgICAgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIGludCBtb2RpZmllcnMsCiAgICAgIFR5cGVCdWlsZGVyIHJldHVyblR5cGUsCiAgICAgIGZpbmFsIE9iamVjdCBuYW1lLAogICAgICBTdHJpbmcgY29uc3RydWN0b3JOYW1lLAogICAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMsCiAgICAgIExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4gZm9ybWFscywKICAgICAgaW50IHN0YXJ0Q2hhck9mZnNldCwKICAgICAgaW50IGNoYXJPZmZzZXQsCiAgICAgIGludCBjaGFyT3BlblBhcmVuT2Zmc2V0LAogICAgICBpbnQgY2hhckVuZE9mZnNldCwKICAgICAgU3RyaW5nIG5hdGl2ZU1ldGhvZE5hbWUsCiAgICAgIHtUb2tlbiBiZWdpbkluaXRpYWxpemVyc30pIHsKICAgIE1ldGFkYXRhQ29sbGVjdG9yIG1ldGFkYXRhQ29sbGVjdG9yID0gbG9hZGVyLnRhcmdldC5tZXRhZGF0YUNvbGxlY3RvcjsKICAgIENvbnN0cnVjdG9yQnVpbGRlciBjb25zdHJ1Y3RvckJ1aWxkZXIgPSBuZXcgQ29uc3RydWN0b3JCdWlsZGVyKAogICAgICAgIG1ldGFkYXRhLAogICAgICAgIG1vZGlmaWVycyAmIH5hYnN0cmFjdE1hc2ssCiAgICAgICAgcmV0dXJuVHlwZSwKICAgICAgICBjb25zdHJ1Y3Rvck5hbWUsCiAgICAgICAgdHlwZVZhcmlhYmxlcywKICAgICAgICBmb3JtYWxzLAogICAgICAgIHRoaXMsCiAgICAgICAgc3RhcnRDaGFyT2Zmc2V0LAogICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgY2hhck9wZW5QYXJlbk9mZnNldCwKICAgICAgICBjaGFyRW5kT2Zmc2V0LAogICAgICAgIG5hdGl2ZU1ldGhvZE5hbWUpOwogICAgbWV0YWRhdGFDb2xsZWN0b3I/LnNldERvY3VtZW50YXRpb25Db21tZW50KAogICAgICAgIGNvbnN0cnVjdG9yQnVpbGRlci5jb25zdHJ1Y3RvciwgZG9jdW1lbnRhdGlvbkNvbW1lbnQpOwogICAgbWV0YWRhdGFDb2xsZWN0b3I/LnNldENvbnN0cnVjdG9yTmFtZU9mZnNldCgKICAgICAgICBjb25zdHJ1Y3RvckJ1aWxkZXIuY29uc3RydWN0b3IsIG5hbWUpOwogICAgY2hlY2tUeXBlVmFyaWFibGVzKHR5cGVWYXJpYWJsZXMsIGNvbnN0cnVjdG9yQnVpbGRlcik7CiAgICBhZGRCdWlsZGVyKGNvbnN0cnVjdG9yTmFtZSwgY29uc3RydWN0b3JCdWlsZGVyLCBjaGFyT2Zmc2V0KTsKICAgIGlmIChuYXRpdmVNZXRob2ROYW1lICE9IG51bGwpIHsKICAgICAgYWRkTmF0aXZlTWV0aG9kKGNvbnN0cnVjdG9yQnVpbGRlcik7CiAgICB9CiAgICBpZiAoY29uc3RydWN0b3JCdWlsZGVyLmlzQ29uc3QpIHsKICAgICAgY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXI/Lmhhc0NvbnN0Q29uc3RydWN0b3IgPSB0cnVlOwogICAgICAvLyBjb25zdCBjb25zdHJ1Y3RvcnMgd2lsbCBoYXZlIHRoZWlyIGluaXRpYWxpemVycyBjb21waWxlZCBhbmQgd3JpdHRlbgogICAgICAvLyBpbnRvIHRoZSBvdXRsaW5lLgogICAgICBjb25zdHJ1Y3RvckJ1aWxkZXIuYmVnaW5Jbml0aWFsaXplcnMgPQogICAgICAgICAgYmVnaW5Jbml0aWFsaXplcnMgPz8gbmV3IFRva2VuLmVvZigtMSk7CiAgICB9CiAgfQoKICB2b2lkIGFkZFByb2NlZHVyZSgKICAgICAgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIGludCBtb2RpZmllcnMsCiAgICAgIFR5cGVCdWlsZGVyIHJldHVyblR5cGUsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMsCiAgICAgIExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4gZm9ybWFscywKICAgICAgUHJvY2VkdXJlS2luZCBraW5kLAogICAgICBpbnQgc3RhcnRDaGFyT2Zmc2V0LAogICAgICBpbnQgY2hhck9mZnNldCwKICAgICAgaW50IGNoYXJPcGVuUGFyZW5PZmZzZXQsCiAgICAgIGludCBjaGFyRW5kT2Zmc2V0LAogICAgICBTdHJpbmcgbmF0aXZlTWV0aG9kTmFtZSwKICAgICAge2Jvb2wgaXNUb3BMZXZlbH0pIHsKICAgIE1ldGFkYXRhQ29sbGVjdG9yIG1ldGFkYXRhQ29sbGVjdG9yID0gbG9hZGVyLnRhcmdldC5tZXRhZGF0YUNvbGxlY3RvcjsKICAgIGlmIChyZXR1cm5UeXBlID09IG51bGwpIHsKICAgICAgaWYgKGtpbmQgPT0gUHJvY2VkdXJlS2luZC5PcGVyYXRvciAmJgogICAgICAgICAgaWRlbnRpY2FsKG5hbWUsIGluZGV4U2V0TmFtZS5uYW1lKSkgewogICAgICAgIHJldHVyblR5cGUgPSBhZGRWb2lkVHlwZShjaGFyT2Zmc2V0KTsKICAgICAgfSBlbHNlIGlmIChraW5kID09IFByb2NlZHVyZUtpbmQuU2V0dGVyKSB7CiAgICAgICAgcmV0dXJuVHlwZSA9IGFkZFZvaWRUeXBlKGNoYXJPZmZzZXQpOwogICAgICB9CiAgICB9CiAgICBQcm9jZWR1cmVCdWlsZGVyIHByb2NlZHVyZUJ1aWxkZXIgPSBuZXcgUHJvY2VkdXJlQnVpbGRlcigKICAgICAgICBtZXRhZGF0YSwKICAgICAgICBtb2RpZmllcnMsCiAgICAgICAgcmV0dXJuVHlwZSwKICAgICAgICBuYW1lLAogICAgICAgIHR5cGVWYXJpYWJsZXMsCiAgICAgICAgZm9ybWFscywKICAgICAgICBraW5kLAogICAgICAgIHRoaXMsCiAgICAgICAgc3RhcnRDaGFyT2Zmc2V0LAogICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgY2hhck9wZW5QYXJlbk9mZnNldCwKICAgICAgICBjaGFyRW5kT2Zmc2V0LAogICAgICAgIG5hdGl2ZU1ldGhvZE5hbWUpOwogICAgbWV0YWRhdGFDb2xsZWN0b3I/LnNldERvY3VtZW50YXRpb25Db21tZW50KAogICAgICAgIHByb2NlZHVyZUJ1aWxkZXIucHJvY2VkdXJlLCBkb2N1bWVudGF0aW9uQ29tbWVudCk7CiAgICBjaGVja1R5cGVWYXJpYWJsZXModHlwZVZhcmlhYmxlcywgcHJvY2VkdXJlQnVpbGRlcik7CiAgICBhZGRCdWlsZGVyKG5hbWUsIHByb2NlZHVyZUJ1aWxkZXIsIGNoYXJPZmZzZXQpOwogICAgaWYgKG5hdGl2ZU1ldGhvZE5hbWUgIT0gbnVsbCkgewogICAgICBhZGROYXRpdmVNZXRob2QocHJvY2VkdXJlQnVpbGRlcik7CiAgICB9CiAgfQoKICB2b2lkIGFkZEZhY3RvcnlNZXRob2QoCiAgICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCwKICAgICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLAogICAgICBpbnQgbW9kaWZpZXJzLAogICAgICBPYmplY3QgbmFtZSwKICAgICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBmb3JtYWxzLAogICAgICBDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXIgcmVkaXJlY3Rpb25UYXJnZXQsCiAgICAgIGludCBzdGFydENoYXJPZmZzZXQsCiAgICAgIGludCBjaGFyT2Zmc2V0LAogICAgICBpbnQgY2hhck9wZW5QYXJlbk9mZnNldCwKICAgICAgaW50IGNoYXJFbmRPZmZzZXQsCiAgICAgIFN0cmluZyBuYXRpdmVNZXRob2ROYW1lKSB7CiAgICBUeXBlQnVpbGRlciByZXR1cm5UeXBlID0gYWRkTmFtZWRUeXBlKAogICAgICAgIGN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyLnBhcmVudC5uYW1lLAogICAgICAgIDxUeXBlQnVpbGRlcj5bXSwKICAgICAgICBjaGFyT2Zmc2V0KTsKICAgIC8vIE5lc3RlZCBkZWNsYXJhdGlvbiBiZWdhbiBpbiBgT3V0bGluZUJ1aWxkZXIuYmVnaW5GYWN0b3J5TWV0aG9kYC4KICAgIFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIgZmFjdG9yeURlY2xhcmF0aW9uID0gZW5kTmVzdGVkRGVjbGFyYXRpb24oCiAgICAgICAgVHlwZVBhcmFtZXRlclNjb3BlS2luZC5mYWN0b3J5TWV0aG9kLCAiI2ZhY3RvcnlfbWV0aG9kIik7CgogICAgLy8gUHJlcGFyZSB0aGUgc2ltcGxlIHByb2NlZHVyZSBuYW1lLgogICAgU3RyaW5nIHByb2NlZHVyZU5hbWU7CiAgICBTdHJpbmcgY29uc3RydWN0b3JOYW1lID0KICAgICAgICBjb21wdXRlQW5kVmFsaWRhdGVDb25zdHJ1Y3Rvck5hbWUobmFtZSwgY2hhck9mZnNldCwgaXNGYWN0b3J5OiB0cnVlKTsKICAgIGlmIChjb25zdHJ1Y3Rvck5hbWUgIT0gbnVsbCkgewogICAgICBwcm9jZWR1cmVOYW1lID0gY29uc3RydWN0b3JOYW1lOwogICAgfSBlbHNlIHsKICAgICAgcHJvY2VkdXJlTmFtZSA9IG5hbWU7CiAgICB9CgogICAgUHJvY2VkdXJlQnVpbGRlciBwcm9jZWR1cmVCdWlsZGVyOwogICAgaWYgKHJlZGlyZWN0aW9uVGFyZ2V0ICE9IG51bGwpIHsKICAgICAgcHJvY2VkdXJlQnVpbGRlciA9IG5ldyBSZWRpcmVjdGluZ0ZhY3RvcnlCdWlsZGVyKAogICAgICAgICAgbWV0YWRhdGEsCiAgICAgICAgICBzdGF0aWNNYXNrIHwgbW9kaWZpZXJzLAogICAgICAgICAgcmV0dXJuVHlwZSwKICAgICAgICAgIHByb2NlZHVyZU5hbWUsCiAgICAgICAgICBjb3B5VHlwZVZhcmlhYmxlcygKICAgICAgICAgICAgICBjdXJyZW50VHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlci50eXBlVmFyaWFibGVzID8/CiAgICAgICAgICAgICAgICAgIGNvbnN0IDxUeXBlVmFyaWFibGVCdWlsZGVyPltdLAogICAgICAgICAgICAgIGZhY3RvcnlEZWNsYXJhdGlvbiksCiAgICAgICAgICBmb3JtYWxzLAogICAgICAgICAgdGhpcywKICAgICAgICAgIHN0YXJ0Q2hhck9mZnNldCwKICAgICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgICBjaGFyT3BlblBhcmVuT2Zmc2V0LAogICAgICAgICAgY2hhckVuZE9mZnNldCwKICAgICAgICAgIG5hdGl2ZU1ldGhvZE5hbWUsCiAgICAgICAgICByZWRpcmVjdGlvblRhcmdldCk7CiAgICB9IGVsc2UgewogICAgICBwcm9jZWR1cmVCdWlsZGVyID0gbmV3IFByb2NlZHVyZUJ1aWxkZXIoCiAgICAgICAgICBtZXRhZGF0YSwKICAgICAgICAgIHN0YXRpY01hc2sgfCBtb2RpZmllcnMsCiAgICAgICAgICByZXR1cm5UeXBlLAogICAgICAgICAgcHJvY2VkdXJlTmFtZSwKICAgICAgICAgIGNvcHlUeXBlVmFyaWFibGVzKAogICAgICAgICAgICAgIGN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyLnR5cGVWYXJpYWJsZXMgPz8KICAgICAgICAgICAgICAgICAgY29uc3QgPFR5cGVWYXJpYWJsZUJ1aWxkZXI+W10sCiAgICAgICAgICAgICAgZmFjdG9yeURlY2xhcmF0aW9uKSwKICAgICAgICAgIGZvcm1hbHMsCiAgICAgICAgICBQcm9jZWR1cmVLaW5kLkZhY3RvcnksCiAgICAgICAgICB0aGlzLAogICAgICAgICAgc3RhcnRDaGFyT2Zmc2V0LAogICAgICAgICAgY2hhck9mZnNldCwKICAgICAgICAgIGNoYXJPcGVuUGFyZW5PZmZzZXQsCiAgICAgICAgICBjaGFyRW5kT2Zmc2V0LAogICAgICAgICAgbmF0aXZlTWV0aG9kTmFtZSk7CiAgICB9CgogICAgTWV0YWRhdGFDb2xsZWN0b3IgbWV0YWRhdGFDb2xsZWN0b3IgPSBsb2FkZXIudGFyZ2V0Lm1ldGFkYXRhQ29sbGVjdG9yOwogICAgbWV0YWRhdGFDb2xsZWN0b3I/LnNldERvY3VtZW50YXRpb25Db21tZW50KAogICAgICAgIHByb2NlZHVyZUJ1aWxkZXIucHJvY2VkdXJlLCBkb2N1bWVudGF0aW9uQ29tbWVudCk7CiAgICBtZXRhZGF0YUNvbGxlY3Rvcj8uc2V0Q29uc3RydWN0b3JOYW1lT2Zmc2V0KAogICAgICAgIHByb2NlZHVyZUJ1aWxkZXIucHJvY2VkdXJlLCBuYW1lKTsKCiAgICBUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyIHNhdmVkRGVjbGFyYXRpb24gPQogICAgICAgIGN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyOwogICAgY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIgPSBmYWN0b3J5RGVjbGFyYXRpb247CiAgICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgdHYgaW4gcHJvY2VkdXJlQnVpbGRlci50eXBlVmFyaWFibGVzKSB7CiAgICAgIE5hbWVkVHlwZUJ1aWxkZXIgdCA9IHByb2NlZHVyZUJ1aWxkZXIucmV0dXJuVHlwZTsKICAgICAgdC5hcmd1bWVudHMuYWRkKGFkZE5hbWVkVHlwZSh0di5uYW1lLCBudWxsLCBwcm9jZWR1cmVCdWlsZGVyLmNoYXJPZmZzZXQpKTsKICAgIH0KICAgIGN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyID0gc2F2ZWREZWNsYXJhdGlvbjsKCiAgICBmYWN0b3J5RGVjbGFyYXRpb24ucmVzb2x2ZVR5cGVzKHByb2NlZHVyZUJ1aWxkZXIudHlwZVZhcmlhYmxlcywgdGhpcyk7CiAgICBhZGRCdWlsZGVyKHByb2NlZHVyZU5hbWUsIHByb2NlZHVyZUJ1aWxkZXIsIGNoYXJPZmZzZXQpOwogICAgaWYgKG5hdGl2ZU1ldGhvZE5hbWUgIT0gbnVsbCkgewogICAgICBhZGROYXRpdmVNZXRob2QocHJvY2VkdXJlQnVpbGRlcik7CiAgICB9CiAgfQoKICB2b2lkIGFkZEVudW0oCiAgICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCwKICAgICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLAogICAgICBTdHJpbmcgbmFtZSwKICAgICAgTGlzdDxFbnVtQ29uc3RhbnRJbmZvPiBlbnVtQ29uc3RhbnRJbmZvcywKICAgICAgaW50IHN0YXJ0Q2hhck9mZnNldCwKICAgICAgaW50IGNoYXJPZmZzZXQsCiAgICAgIGludCBjaGFyRW5kT2Zmc2V0KSB7CiAgICBNZXRhZGF0YUNvbGxlY3RvciBtZXRhZGF0YUNvbGxlY3RvciA9IGxvYWRlci50YXJnZXQubWV0YWRhdGFDb2xsZWN0b3I7CiAgICBFbnVtQnVpbGRlciBidWlsZGVyID0gbmV3IEVudW1CdWlsZGVyKG1ldGFkYXRhQ29sbGVjdG9yLCBtZXRhZGF0YSwgbmFtZSwKICAgICAgICBlbnVtQ29uc3RhbnRJbmZvcywgdGhpcywgc3RhcnRDaGFyT2Zmc2V0LCBjaGFyT2Zmc2V0LCBjaGFyRW5kT2Zmc2V0KTsKICAgIGFkZEJ1aWxkZXIobmFtZSwgYnVpbGRlciwgY2hhck9mZnNldCk7CiAgICBtZXRhZGF0YUNvbGxlY3Rvcj8uc2V0RG9jdW1lbnRhdGlvbkNvbW1lbnQoCiAgICAgICAgYnVpbGRlci5jbHMsIGRvY3VtZW50YXRpb25Db21tZW50KTsKICB9CgogIHZvaWQgYWRkRnVuY3Rpb25UeXBlQWxpYXMoCiAgICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCwKICAgICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLAogICAgICBTdHJpbmcgbmFtZSwKICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzLAogICAgICBGdW5jdGlvblR5cGVCdWlsZGVyIHR5cGUsCiAgICAgIGludCBjaGFyT2Zmc2V0KSB7CiAgICBUeXBlQWxpYXNCdWlsZGVyIHR5cGVkZWZCdWlsZGVyID0gbmV3IFR5cGVBbGlhc0J1aWxkZXIoCiAgICAgICAgbWV0YWRhdGEsIG5hbWUsIHR5cGVWYXJpYWJsZXMsIHR5cGUsIHRoaXMsIGNoYXJPZmZzZXQpOwogICAgbG9hZGVyLnRhcmdldC5tZXRhZGF0YUNvbGxlY3RvcgogICAgICAgID8uc2V0RG9jdW1lbnRhdGlvbkNvbW1lbnQodHlwZWRlZkJ1aWxkZXIudHlwZWRlZiwgZG9jdW1lbnRhdGlvbkNvbW1lbnQpOwogICAgY2hlY2tUeXBlVmFyaWFibGVzKHR5cGVWYXJpYWJsZXMsIHR5cGVkZWZCdWlsZGVyKTsKICAgIC8vIE5lc3RlZCBkZWNsYXJhdGlvbiBiZWdhbiBpbiBgT3V0bGluZUJ1aWxkZXIuYmVnaW5GdW5jdGlvblR5cGVBbGlhc2AuCiAgICBlbmROZXN0ZWREZWNsYXJhdGlvbihUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLnR5cGVkZWYsICIjdHlwZWRlZiIpCiAgICAgICAgLnJlc29sdmVUeXBlcyh0eXBlVmFyaWFibGVzLCB0aGlzKTsKICAgIGFkZEJ1aWxkZXIobmFtZSwgdHlwZWRlZkJ1aWxkZXIsIGNoYXJPZmZzZXQpOwogIH0KCiAgRnVuY3Rpb25UeXBlQnVpbGRlciBhZGRGdW5jdGlvblR5cGUoCiAgICAgIFR5cGVCdWlsZGVyIHJldHVyblR5cGUsCiAgICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcywKICAgICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBmb3JtYWxzLAogICAgICBpbnQgY2hhck9mZnNldCkgewogICAgRnVuY3Rpb25UeXBlQnVpbGRlciBidWlsZGVyID0KICAgICAgICBuZXcgRnVuY3Rpb25UeXBlQnVpbGRlcihyZXR1cm5UeXBlLCB0eXBlVmFyaWFibGVzLCBmb3JtYWxzKTsKICAgIGNoZWNrVHlwZVZhcmlhYmxlcyh0eXBlVmFyaWFibGVzLCBudWxsKTsKICAgIC8vIE5lc3RlZCBkZWNsYXJhdGlvbiBiZWdhbiBpbiBgT3V0bGluZUJ1aWxkZXIuYmVnaW5GdW5jdGlvblR5cGVgIG9yCiAgICAvLyBgT3V0bGluZUJ1aWxkZXIuYmVnaW5GdW5jdGlvblR5cGVkRm9ybWFsUGFyYW1ldGVyYC4KICAgIGVuZE5lc3RlZERlY2xhcmF0aW9uKFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQuZnVuY3Rpb25UeXBlLCAiI2Z1bmN0aW9uX3R5cGUiKQogICAgICAgIC5yZXNvbHZlVHlwZXModHlwZVZhcmlhYmxlcywgdGhpcyk7CiAgICByZXR1cm4gYWRkVHlwZShidWlsZGVyLCBjaGFyT2Zmc2V0KTsKICB9CgogIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgYWRkRm9ybWFsUGFyYW1ldGVyKAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIGludCBtb2RpZmllcnMsCiAgICAgIFR5cGVCdWlsZGVyIHR5cGUsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBib29sIGhhc1RoaXMsCiAgICAgIGludCBjaGFyT2Zmc2V0LAogICAgICBUb2tlbiBpbml0aWFsaXplclRva2VuKSB7CiAgICBpZiAoaGFzVGhpcykgewogICAgICBtb2RpZmllcnMgfD0gaW5pdGlhbGl6aW5nRm9ybWFsTWFzazsKICAgIH0KICAgIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZm9ybWFsID0gbmV3IEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIoCiAgICAgICAgbWV0YWRhdGEsIG1vZGlmaWVycywgdHlwZSwgbmFtZSwgdGhpcywgY2hhck9mZnNldCk7CiAgICBmb3JtYWwuaW5pdGlhbGl6ZXJUb2tlbiA9IGluaXRpYWxpemVyVG9rZW47CiAgICBpZiAobGVnYWN5TW9kZSAmJiBoYXNUaGlzICYmIHR5cGUgPT0gbnVsbCkgewogICAgICAodW50eXBlZEluaXRpYWxpemluZ0Zvcm1hbHMgPz89IDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPltdKS5hZGQoZm9ybWFsKTsKICAgIH0KICAgIHJldHVybiBmb3JtYWw7CiAgfQoKICBUeXBlVmFyaWFibGVCdWlsZGVyIGFkZFR5cGVWYXJpYWJsZSgKICAgICAgU3RyaW5nIG5hbWUsIFR5cGVCdWlsZGVyIGJvdW5kLCBpbnQgY2hhck9mZnNldCkgewogICAgVHlwZVZhcmlhYmxlQnVpbGRlciBidWlsZGVyID0KICAgICAgICBuZXcgVHlwZVZhcmlhYmxlQnVpbGRlcihuYW1lLCB0aGlzLCBjaGFyT2Zmc2V0LCBib3VuZDogYm91bmQpOwogICAgYm91bmRsZXNzVHlwZVZhcmlhYmxlcy5hZGQoYnVpbGRlcik7CiAgICByZXR1cm4gYnVpbGRlcjsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYnVpbGRPdXRsaW5lRXhwcmVzc2lvbnMoKSB7CiAgICBNZXRhZGF0YUJ1aWxkZXIuYnVpbGRBbm5vdGF0aW9ucyhsaWJyYXJ5LCBtZXRhZGF0YSwgdGhpcywgbnVsbCwgbnVsbCk7CiAgfQoKICB2b2lkIGJ1aWxkQnVpbGRlcihCdWlsZGVyIGRlY2xhcmF0aW9uLCBMaWJyYXJ5QnVpbGRlciBjb3JlTGlicmFyeSkgewogICAgQ2xhc3MgY2xzOwogICAgRXh0ZW5zaW9uIGV4dGVuc2lvbjsKICAgIE1lbWJlciBtZW1iZXI7CiAgICBUeXBlZGVmIHR5cGVkZWY7CiAgICBpZiAoZGVjbGFyYXRpb24gaXMgU291cmNlQ2xhc3NCdWlsZGVyKSB7CiAgICAgIGNscyA9IGRlY2xhcmF0aW9uLmJ1aWxkKHRoaXMsIGNvcmVMaWJyYXJ5KTsKICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24gaXMgU291cmNlRXh0ZW5zaW9uQnVpbGRlcikgewogICAgICBleHRlbnNpb24gPSBkZWNsYXJhdGlvbi5idWlsZCh0aGlzLCBjb3JlTGlicmFyeSk7CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIEZpZWxkQnVpbGRlcikgewogICAgICBtZW1iZXIgPSBkZWNsYXJhdGlvbi5idWlsZCh0aGlzKS4uaXNTdGF0aWMgPSB0cnVlOwogICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBQcm9jZWR1cmVCdWlsZGVyKSB7CiAgICAgIG1lbWJlciA9IGRlY2xhcmF0aW9uLmJ1aWxkKHRoaXMpLi5pc1N0YXRpYyA9IHRydWU7CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIFR5cGVBbGlhc0J1aWxkZXIpIHsKICAgICAgdHlwZWRlZiA9IGRlY2xhcmF0aW9uLmJ1aWxkKHRoaXMpOwogICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBFbnVtQnVpbGRlcikgewogICAgICBjbHMgPSBkZWNsYXJhdGlvbi5idWlsZCh0aGlzLCBjb3JlTGlicmFyeSk7CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIFByZWZpeEJ1aWxkZXIpIHsKICAgICAgLy8gSWdub3JlZC4gS2VybmVsIGRvZXNuJ3QgcmVwcmVzZW50IHByZWZpeGVzLgogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIEJ1aWx0aW5UeXBlQnVpbGRlcikgewogICAgICAvLyBOb3RoaW5nIG5lZWRlZC4KICAgICAgcmV0dXJuOwogICAgfSBlbHNlIHsKICAgICAgdW5oYW5kbGVkKCIke2RlY2xhcmF0aW9uLnJ1bnRpbWVUeXBlfSIsICJidWlsZEJ1aWxkZXIiLAogICAgICAgICAgZGVjbGFyYXRpb24uY2hhck9mZnNldCwgZGVjbGFyYXRpb24uZmlsZVVyaSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChkZWNsYXJhdGlvbi5pc1BhdGNoKSB7CiAgICAgIC8vIFRoZSBrZXJuZWwgbm9kZSBvZiBhIHBhdGNoIGlzIHNoYXJlZCB3aXRoIHRoZSBvcmlnaW4gZGVjbGFyYXRpb24uIFdlCiAgICAgIC8vIGhhdmUgdHdvIGJ1aWxkZXJzOiB0aGUgb3JpZ2luLCBhbmQgdGhlIHBhdGNoLCBidXQgb25seSBvbmUga2VybmVsIG5vZGUKICAgICAgLy8gKHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBmaW5hbCBvdXRwdXQpLiBDb25zZXF1ZW50bHksIHRoZSBub2RlCiAgICAgIC8vIHNob3VsZG4ndCBiZSBhZGRlZCB0byBpdHMgYXBwYXJlbnQga2VybmVsIHBhcmVudCBhcyB0aGlzIHdvdWxkIGNyZWF0ZQogICAgICAvLyBhIGR1cGxpY2F0ZSBlbnRyeSBpbiB0aGUgcGFyZW50J3MgbGlzdCBvZiBjaGlsZHJlbi9tZW1iZXJzLgogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoY2xzICE9IG51bGwpIHsKICAgICAgaWYgKGRlY2xhcmF0aW9uLm5leHQgIT0gbnVsbCkgewogICAgICAgIGludCBjb3VudCA9IDA7CiAgICAgICAgQnVpbGRlciBjdXJyZW50ID0gZGVjbGFyYXRpb24ubmV4dDsKICAgICAgICB3aGlsZSAoY3VycmVudCAhPSBudWxsKSB7CiAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDsKICAgICAgICB9CiAgICAgICAgY2xzLm5hbWUgKz0gIiMkY291bnQiOwogICAgICB9CiAgICAgIGxpYnJhcnkuYWRkQ2xhc3MoY2xzKTsKICAgIH0gZWxzZSBpZiAoZXh0ZW5zaW9uICE9IG51bGwpIHsKICAgICAgaWYgKGRlY2xhcmF0aW9uLm5leHQgPT0gbnVsbCkgewogICAgICAgIGxpYnJhcnkuYWRkRXh0ZW5zaW9uKGV4dGVuc2lvbik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAobWVtYmVyICE9IG51bGwpIHsKICAgICAgaWYgKGRlY2xhcmF0aW9uLm5leHQgPT0gbnVsbCkgewogICAgICAgIGxpYnJhcnkuYWRkTWVtYmVyKG1lbWJlcik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodHlwZWRlZiAhPSBudWxsKSB7CiAgICAgIGlmIChkZWNsYXJhdGlvbi5uZXh0ID09IG51bGwpIHsKICAgICAgICBsaWJyYXJ5LmFkZFR5cGVkZWYodHlwZWRlZik7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgYWRkTmF0aXZlRGVwZW5kZW5jeShTdHJpbmcgbmF0aXZlSW1wb3J0UGF0aCkgewogICAgQnVpbGRlciBjb25zdHJ1Y3RvciA9IGxvYWRlci5nZXROYXRpdmVBbm5vdGF0aW9uKCk7CiAgICBBcmd1bWVudHMgYXJndW1lbnRzID0KICAgICAgICBuZXcgQXJndW1lbnRzKDxFeHByZXNzaW9uPltuZXcgU3RyaW5nTGl0ZXJhbChuYXRpdmVJbXBvcnRQYXRoKV0pOwogICAgRXhwcmVzc2lvbiBhbm5vdGF0aW9uOwogICAgaWYgKGNvbnN0cnVjdG9yLmlzQ29uc3RydWN0b3IpIHsKICAgICAgYW5ub3RhdGlvbiA9IG5ldyBDb25zdHJ1Y3Rvckludm9jYXRpb24oY29uc3RydWN0b3IudGFyZ2V0LCBhcmd1bWVudHMpCiAgICAgICAgLi5pc0NvbnN0ID0gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIGFubm90YXRpb24gPSBuZXcgU3RhdGljSW52b2NhdGlvbihjb25zdHJ1Y3Rvci50YXJnZXQsIGFyZ3VtZW50cykKICAgICAgICAuLmlzQ29uc3QgPSB0cnVlOwogICAgfQogICAgbGlicmFyeS5hZGRBbm5vdGF0aW9uKGFubm90YXRpb24pOwogIH0KCiAgdm9pZCBhZGREZXBlbmRlbmNpZXMoTGlicmFyeSBsaWJyYXJ5LCBTZXQ8U291cmNlTGlicmFyeUJ1aWxkZXI+IHNlZW4pIHsKICAgIGlmICghc2Vlbi5hZGQodGhpcykpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIE1lcmdlIGltcG9ydCBhbmQgZXhwb3J0IGxpc3RzIHRvIGhhdmUgdGhlIGRlcGVuZGVuY2llcyBpbiBzb3VyY2Ugb3JkZXIuCiAgICAvLyBUaGlzIGlzIHJlcXVpcmVkIGZvciB0aGUgRGlldExpc3RlbmVyIHRvIGNvcnJlY3RseSBtYXRjaCB1cCBtZXRhZGF0YS4KICAgIGludCBpbXBvcnRJbmRleCA9IDA7CiAgICBpbnQgZXhwb3J0SW5kZXggPSAwOwogICAgd2hpbGUgKGltcG9ydEluZGV4IDwgaW1wb3J0cy5sZW5ndGggfHwgZXhwb3J0SW5kZXggPCBleHBvcnRzLmxlbmd0aCkgewogICAgICBpZiAoZXhwb3J0SW5kZXggPj0gZXhwb3J0cy5sZW5ndGggfHwKICAgICAgICAgIChpbXBvcnRJbmRleCA8IGltcG9ydHMubGVuZ3RoICYmCiAgICAgICAgICAgICAgaW1wb3J0c1tpbXBvcnRJbmRleF0uY2hhck9mZnNldCA8CiAgICAgICAgICAgICAgICAgIGV4cG9ydHNbZXhwb3J0SW5kZXhdLmNoYXJPZmZzZXQpKSB7CiAgICAgICAgLy8gQWRkIGltcG9ydAogICAgICAgIEltcG9ydCBpbXBvcnQgPSBpbXBvcnRzW2ltcG9ydEluZGV4KytdOwoKICAgICAgICAvLyBSYXRoZXIgdGhhbiBhZGQgYSBMaWJyYXJ5RGVwZW5kZW5jeSwgd2UgYXR0YWNoIGFuIGFubm90YXRpb24uCiAgICAgICAgaWYgKGltcG9ydC5uYXRpdmVJbXBvcnRQYXRoICE9IG51bGwpIHsKICAgICAgICAgIGFkZE5hdGl2ZURlcGVuZGVuY3koaW1wb3J0Lm5hdGl2ZUltcG9ydFBhdGgpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICBpZiAoaW1wb3J0LmRlZmVycmVkICYmIGltcG9ydC5wcmVmaXhCdWlsZGVyPy5kZXBlbmRlbmN5ICE9IG51bGwpIHsKICAgICAgICAgIGxpYnJhcnkuYWRkRGVwZW5kZW5jeShpbXBvcnQucHJlZml4QnVpbGRlci5kZXBlbmRlbmN5KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbGlicmFyeS5hZGREZXBlbmRlbmN5KG5ldyBMaWJyYXJ5RGVwZW5kZW5jeS5pbXBvcnQoCiAgICAgICAgICAgICAgaW1wb3J0LmltcG9ydGVkLmxpYnJhcnksCiAgICAgICAgICAgICAgbmFtZTogaW1wb3J0LnByZWZpeCwKICAgICAgICAgICAgICBjb21iaW5hdG9yczogdG9LZXJuZWxDb21iaW5hdG9ycyhpbXBvcnQuY29tYmluYXRvcnMpKQogICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBpbXBvcnQuY2hhck9mZnNldCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIC8vIEFkZCBleHBvcnQKICAgICAgICBFeHBvcnQgZXhwb3J0ID0gZXhwb3J0c1tleHBvcnRJbmRleCsrXTsKICAgICAgICBsaWJyYXJ5LmFkZERlcGVuZGVuY3kobmV3IExpYnJhcnlEZXBlbmRlbmN5LmV4cG9ydCgKICAgICAgICAgICAgZXhwb3J0LmV4cG9ydGVkLmxpYnJhcnksCiAgICAgICAgICAgIGNvbWJpbmF0b3JzOiB0b0tlcm5lbENvbWJpbmF0b3JzKGV4cG9ydC5jb21iaW5hdG9ycykpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBleHBvcnQuY2hhck9mZnNldCk7CiAgICAgIH0KICAgIH0KCiAgICBmb3IgKFNvdXJjZUxpYnJhcnlCdWlsZGVyIHBhcnQgaW4gcGFydHMpIHsKICAgICAgcGFydC5hZGREZXBlbmRlbmNpZXMobGlicmFyeSwgc2Vlbik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBCdWlsZGVyIGNvbXB1dGVBbWJpZ3VvdXNEZWNsYXJhdGlvbigKICAgICAgU3RyaW5nIG5hbWUsIEJ1aWxkZXIgZGVjbGFyYXRpb24sIEJ1aWxkZXIgb3RoZXIsIGludCBjaGFyT2Zmc2V0LAogICAgICB7Ym9vbCBpc0V4cG9ydDogZmFsc2UsIGJvb2wgaXNJbXBvcnQ6IGZhbHNlfSkgewogICAgLy8gVE9ETyhhaGUpOiBDYW4gSSBtb3ZlIHRoaXMgdG8gU2NvcGUgb3IgUHJlZml4PwogICAgaWYgKGRlY2xhcmF0aW9uID09IG90aGVyKSByZXR1cm4gZGVjbGFyYXRpb247CiAgICBpZiAoZGVjbGFyYXRpb24gaXMgSW52YWxpZFR5cGVCdWlsZGVyKSByZXR1cm4gZGVjbGFyYXRpb247CiAgICBpZiAob3RoZXIgaXMgSW52YWxpZFR5cGVCdWlsZGVyKSByZXR1cm4gb3RoZXI7CiAgICBpZiAoZGVjbGFyYXRpb24gaXMgQWNjZXNzRXJyb3JCdWlsZGVyKSB7CiAgICAgIEFjY2Vzc0Vycm9yQnVpbGRlciBlcnJvciA9IGRlY2xhcmF0aW9uOwogICAgICBkZWNsYXJhdGlvbiA9IGVycm9yLmJ1aWxkZXI7CiAgICB9CiAgICBpZiAob3RoZXIgaXMgQWNjZXNzRXJyb3JCdWlsZGVyKSB7CiAgICAgIEFjY2Vzc0Vycm9yQnVpbGRlciBlcnJvciA9IG90aGVyOwogICAgICBvdGhlciA9IGVycm9yLmJ1aWxkZXI7CiAgICB9CiAgICBib29sIGlzTG9jYWwgPSBmYWxzZTsKICAgIGJvb2wgaXNMb2FkTGlicmFyeSA9IGZhbHNlOwogICAgQnVpbGRlciBwcmVmZXJyZWQ7CiAgICBVcmkgdXJpOwogICAgVXJpIG90aGVyVXJpOwogICAgVXJpIHByZWZlcnJlZFVyaTsKICAgIFVyaSBoaWRkZW5Vcmk7CiAgICBpZiAoc2NvcGUubG9jYWxbbmFtZV0gPT0gZGVjbGFyYXRpb24pIHsKICAgICAgaXNMb2NhbCA9IHRydWU7CiAgICAgIHByZWZlcnJlZCA9IGRlY2xhcmF0aW9uOwogICAgICBoaWRkZW5VcmkgPSBjb21wdXRlTGlicmFyeVVyaShvdGhlcik7CiAgICB9IGVsc2UgewogICAgICB1cmkgPSBjb21wdXRlTGlicmFyeVVyaShkZWNsYXJhdGlvbik7CiAgICAgIG90aGVyVXJpID0gY29tcHV0ZUxpYnJhcnlVcmkob3RoZXIpOwogICAgICBpZiAoZGVjbGFyYXRpb24gaXMgTG9hZExpYnJhcnlCdWlsZGVyKSB7CiAgICAgICAgaXNMb2FkTGlicmFyeSA9IHRydWU7CiAgICAgICAgcHJlZmVycmVkID0gZGVjbGFyYXRpb247CiAgICAgICAgcHJlZmVycmVkVXJpID0gb3RoZXJVcmk7CiAgICAgIH0gZWxzZSBpZiAob3RoZXIgaXMgTG9hZExpYnJhcnlCdWlsZGVyKSB7CiAgICAgICAgaXNMb2FkTGlicmFyeSA9IHRydWU7CiAgICAgICAgcHJlZmVycmVkID0gb3RoZXI7CiAgICAgICAgcHJlZmVycmVkVXJpID0gdXJpOwogICAgICB9IGVsc2UgaWYgKG90aGVyVXJpPy5zY2hlbWUgPT0gImRhcnQiICYmIHVyaT8uc2NoZW1lICE9ICJkYXJ0IikgewogICAgICAgIHByZWZlcnJlZCA9IGRlY2xhcmF0aW9uOwogICAgICAgIHByZWZlcnJlZFVyaSA9IHVyaTsKICAgICAgICBoaWRkZW5VcmkgPSBvdGhlclVyaTsKICAgICAgfSBlbHNlIGlmICh1cmk/LnNjaGVtZSA9PSAiZGFydCIgJiYgb3RoZXJVcmk/LnNjaGVtZSAhPSAiZGFydCIpIHsKICAgICAgICBwcmVmZXJyZWQgPSBvdGhlcjsKICAgICAgICBwcmVmZXJyZWRVcmkgPSBvdGhlclVyaTsKICAgICAgICBoaWRkZW5VcmkgPSB1cmk7CiAgICAgIH0KICAgIH0KICAgIGlmIChwcmVmZXJyZWQgIT0gbnVsbCkgewogICAgICBpZiAoaXNMb2NhbCkgewogICAgICAgIFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmkpPiB0ZW1wbGF0ZSA9IGlzRXhwb3J0CiAgICAgICAgICAgID8gdGVtcGxhdGVMb2NhbERlZmluaXRpb25IaWRlc0V4cG9ydAogICAgICAgICAgICA6IHRlbXBsYXRlTG9jYWxEZWZpbml0aW9uSGlkZXNJbXBvcnQ7CiAgICAgICAgYWRkUHJvYmxlbSh0ZW1wbGF0ZS53aXRoQXJndW1lbnRzKG5hbWUsIGhpZGRlblVyaSksIGNoYXJPZmZzZXQsCiAgICAgICAgICAgIG5vTGVuZ3RoLCBmaWxlVXJpKTsKICAgICAgfSBlbHNlIGlmIChpc0xvYWRMaWJyYXJ5KSB7CiAgICAgICAgYWRkUHJvYmxlbSh0ZW1wbGF0ZUxvYWRMaWJyYXJ5SGlkZXNNZW1iZXIud2l0aEFyZ3VtZW50cyhwcmVmZXJyZWRVcmkpLAogICAgICAgICAgICBjaGFyT2Zmc2V0LCBub0xlbmd0aCwgZmlsZVVyaSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaSwgVXJpIHVyaTIpPiB0ZW1wbGF0ZSA9CiAgICAgICAgICAgIGlzRXhwb3J0ID8gdGVtcGxhdGVFeHBvcnRIaWRlc0V4cG9ydCA6IHRlbXBsYXRlSW1wb3J0SGlkZXNJbXBvcnQ7CiAgICAgICAgYWRkUHJvYmxlbSh0ZW1wbGF0ZS53aXRoQXJndW1lbnRzKG5hbWUsIHByZWZlcnJlZFVyaSwgaGlkZGVuVXJpKSwKICAgICAgICAgICAgY2hhck9mZnNldCwgbm9MZW5ndGgsIGZpbGVVcmkpOwogICAgICB9CiAgICAgIHJldHVybiBwcmVmZXJyZWQ7CiAgICB9CiAgICBpZiAoZGVjbGFyYXRpb24ubmV4dCA9PSBudWxsICYmIG90aGVyLm5leHQgPT0gbnVsbCkgewogICAgICBpZiAoaXNJbXBvcnQgJiYgZGVjbGFyYXRpb24gaXMgUHJlZml4QnVpbGRlciAmJiBvdGhlciBpcyBQcmVmaXhCdWlsZGVyKSB7CiAgICAgICAgLy8gSGFuZGxlcyB0aGUgY2FzZSB3aGVyZSB0aGUgc2FtZSBwcmVmaXggaXMgdXNlZCBmb3IgZGlmZmVyZW50CiAgICAgICAgLy8gaW1wb3J0cy4KICAgICAgICByZXR1cm4gZGVjbGFyYXRpb24KICAgICAgICAgIC4uZXhwb3J0U2NvcGUubWVyZ2Uob3RoZXIuZXhwb3J0U2NvcGUsCiAgICAgICAgICAgICAgKFN0cmluZyBuYW1lLCBCdWlsZGVyIGV4aXN0aW5nLCBCdWlsZGVyIG1lbWJlcikgewogICAgICAgICAgICByZXR1cm4gY29tcHV0ZUFtYmlndW91c0RlY2xhcmF0aW9uKAogICAgICAgICAgICAgICAgbmFtZSwgZXhpc3RpbmcsIG1lbWJlciwgY2hhck9mZnNldCwKICAgICAgICAgICAgICAgIGlzRXhwb3J0OiBpc0V4cG9ydCwgaXNJbXBvcnQ6IGlzSW1wb3J0KTsKICAgICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpLCBVcmkgdXJpMik+IHRlbXBsYXRlID0KICAgICAgICBpc0V4cG9ydCA/IHRlbXBsYXRlRHVwbGljYXRlZEV4cG9ydCA6IHRlbXBsYXRlRHVwbGljYXRlZEltcG9ydDsKICAgIE1lc3NhZ2UgbWVzc2FnZSA9IHRlbXBsYXRlLndpdGhBcmd1bWVudHMobmFtZSwgdXJpLCBvdGhlclVyaSk7CiAgICBhZGRQcm9ibGVtKG1lc3NhZ2UsIGNoYXJPZmZzZXQsIG5vTGVuZ3RoLCBmaWxlVXJpKTsKICAgIFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmksIFVyaSB1cmkyKT4gYnVpbGRlclRlbXBsYXRlID0KICAgICAgICBpc0V4cG9ydAogICAgICAgICAgICA/IHRlbXBsYXRlRHVwbGljYXRlZEV4cG9ydEluVHlwZQogICAgICAgICAgICA6IHRlbXBsYXRlRHVwbGljYXRlZEltcG9ydEluVHlwZTsKICAgIG1lc3NhZ2UgPSBidWlsZGVyVGVtcGxhdGUud2l0aEFyZ3VtZW50cygKICAgICAgICBuYW1lLAogICAgICAgIC8vIFRPRE8oYWhlKTogV2Ugc2hvdWxkIHByb2JhYmx5IHVzZSBhIGNvbnRleHQgb2JqZWN0IGhlcmUKICAgICAgICAvLyBpbnN0ZWFkIG9mIGluY2x1ZGluZyBVUklzIGluIHRoaXMgbWVzc2FnZS4KICAgICAgICB1cmksCiAgICAgICAgb3RoZXJVcmkpOwogICAgLy8gV2UgcmVwb3J0IHRoZSBlcnJvciBsYXppbHkgKHNldHRpbmcgc3VwcHJlc3NNZXNzYWdlIHRvIGZhbHNlKSBiZWNhdXNlIHRoZQogICAgLy8gc3BlYyAxOC4xIHN0YXRlcyB0aGF0ICdJdCBpcyBub3QgYW4gZXJyb3IgaWYgTiBpcyBpbnRyb2R1Y2VkIGJ5IHR3byBvcgogICAgLy8gbW9yZSBpbXBvcnRzIGJ1dCBuZXZlciByZWZlcnJlZCB0by4nCiAgICByZXR1cm4gbmV3IEludmFsaWRUeXBlQnVpbGRlcigKICAgICAgICBuYW1lLCBtZXNzYWdlLndpdGhMb2NhdGlvbihmaWxlVXJpLCBjaGFyT2Zmc2V0LCBuYW1lLmxlbmd0aCksCiAgICAgICAgc3VwcHJlc3NNZXNzYWdlOiBmYWxzZSk7CiAgfQoKICBpbnQgZmluaXNoRGVmZXJyZWRMb2FkVGVhcm9mZnMoKSB7CiAgICBpbnQgdG90YWwgPSAwOwogICAgZm9yIChJbXBvcnQgaW1wb3J0IGluIGltcG9ydHMpIHsKICAgICAgaWYgKGltcG9ydC5kZWZlcnJlZCkgewogICAgICAgIFByb2NlZHVyZSB0ZWFyb2ZmID0gaW1wb3J0LnByZWZpeEJ1aWxkZXIubG9hZExpYnJhcnlCdWlsZGVyLnRlYXJvZmY7CiAgICAgICAgaWYgKHRlYXJvZmYgIT0gbnVsbCkgbGlicmFyeS5hZGRNZW1iZXIodGVhcm9mZik7CiAgICAgICAgdG90YWwrKzsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRvdGFsOwogIH0KCiAgaW50IGZpbmlzaEZvcndhcmRlcnMoKSB7CiAgICBpbnQgY291bnQgPSAwOwogICAgQ2xvbmVWaXNpdG9yIGNsb25lciA9IG5ldyBDbG9uZVZpc2l0b3IoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm9yd2FyZGVyc09yaWdpbnMubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgUHJvY2VkdXJlIGZvcndhcmRlciA9IGZvcndhcmRlcnNPcmlnaW5zW2ldOwogICAgICBQcm9jZWR1cmUgb3JpZ2luID0gZm9yd2FyZGVyc09yaWdpbnNbaSArIDFdOwoKICAgICAgaW50IHBvc2l0aW9uYWxDb3VudCA9IG9yaWdpbi5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGg7CiAgICAgIGlmIChmb3J3YXJkZXIuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoICE9IHBvc2l0aW9uYWxDb3VudCkgewogICAgICAgIHJldHVybiB1bmV4cGVjdGVkKAogICAgICAgICAgICAiJHBvc2l0aW9uYWxDb3VudCIsCiAgICAgICAgICAgICIke2ZvcndhcmRlci5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGh9IiwKICAgICAgICAgICAgb3JpZ2luLmZpbGVPZmZzZXQsCiAgICAgICAgICAgIG9yaWdpbi5maWxlVXJpKTsKICAgICAgfQogICAgICBmb3IgKGludCBqID0gMDsgaiA8IHBvc2l0aW9uYWxDb3VudDsgKytqKSB7CiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBmb3J3YXJkZXJQYXJhbWV0ZXIgPQogICAgICAgICAgICBmb3J3YXJkZXIuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnNbal07CiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBvcmlnaW5QYXJhbWV0ZXIgPQogICAgICAgICAgICBvcmlnaW4uZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnNbal07CiAgICAgICAgaWYgKG9yaWdpblBhcmFtZXRlci5pbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgICBmb3J3YXJkZXJQYXJhbWV0ZXIuaW5pdGlhbGl6ZXIgPQogICAgICAgICAgICAgIGNsb25lci5jbG9uZShvcmlnaW5QYXJhbWV0ZXIuaW5pdGlhbGl6ZXIpOwogICAgICAgICAgZm9yd2FyZGVyUGFyYW1ldGVyLmluaXRpYWxpemVyLnBhcmVudCA9IGZvcndhcmRlclBhcmFtZXRlcjsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIE1hcDxTdHJpbmcsIFZhcmlhYmxlRGVjbGFyYXRpb24+IG9yaWdpbk5hbWVkTWFwID0KICAgICAgICAgIDxTdHJpbmcsIFZhcmlhYmxlRGVjbGFyYXRpb24+e307CiAgICAgIGZvciAoVmFyaWFibGVEZWNsYXJhdGlvbiBvcmlnaW5OYW1lZCBpbiBvcmlnaW4uZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgICAgb3JpZ2luTmFtZWRNYXBbb3JpZ2luTmFtZWQubmFtZV0gPSBvcmlnaW5OYW1lZDsKICAgICAgfQogICAgICBmb3IgKFZhcmlhYmxlRGVjbGFyYXRpb24gZm9yd2FyZGVyTmFtZWQKICAgICAgICAgIGluIGZvcndhcmRlci5mdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMpIHsKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIG9yaWdpbk5hbWVkID0gb3JpZ2luTmFtZWRNYXBbZm9yd2FyZGVyTmFtZWQubmFtZV07CiAgICAgICAgaWYgKG9yaWdpbk5hbWVkID09IG51bGwpIHsKICAgICAgICAgIHJldHVybiB1bmhhbmRsZWQoCiAgICAgICAgICAgICAgIm51bGwiLCBmb3J3YXJkZXIubmFtZS5uYW1lLCBvcmlnaW4uZmlsZU9mZnNldCwgb3JpZ2luLmZpbGVVcmkpOwogICAgICAgIH0KICAgICAgICBpZiAob3JpZ2luTmFtZWQuaW5pdGlhbGl6ZXIgPT0gbnVsbCkgY29udGludWU7CiAgICAgICAgZm9yd2FyZGVyTmFtZWQuaW5pdGlhbGl6ZXIgPSBjbG9uZXIuY2xvbmUob3JpZ2luTmFtZWQuaW5pdGlhbGl6ZXIpOwogICAgICAgIGZvcndhcmRlck5hbWVkLmluaXRpYWxpemVyLnBhcmVudCA9IGZvcndhcmRlck5hbWVkOwogICAgICB9CgogICAgICArK2NvdW50OwogICAgfQogICAgZm9yd2FyZGVyc09yaWdpbnMuY2xlYXIoKTsKICAgIHJldHVybiBjb3VudDsKICB9CgogIHZvaWQgYWRkTmF0aXZlTWV0aG9kKEZ1bmN0aW9uQnVpbGRlciBtZXRob2QpIHsKICAgIG5hdGl2ZU1ldGhvZHMuYWRkKG1ldGhvZCk7CiAgfQoKICBpbnQgZmluaXNoTmF0aXZlTWV0aG9kcygpIHsKICAgIGZvciAoRnVuY3Rpb25CdWlsZGVyIG1ldGhvZCBpbiBuYXRpdmVNZXRob2RzKSB7CiAgICAgIG1ldGhvZC5iZWNvbWVOYXRpdmUobG9hZGVyKTsKICAgIH0KICAgIHJldHVybiBuYXRpdmVNZXRob2RzLmxlbmd0aDsKICB9CgogIC8vLyBDcmVhdGVzIGEgY29weSBvZiBbb3JpZ2luYWxdIGludG8gdGhlIHNjb3BlIG9mIFtkZWNsYXJhdGlvbl0uCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCBmb3IgYWRkaW5nIGNvcGllcyBvZiBjbGFzcyB0eXBlIHBhcmFtZXRlcnMgdG8gZmFjdG9yeQogIC8vLyBtZXRob2RzIGFuZCB1bm5hbWVkIG1peGluIGFwcGxpY2F0aW9ucywgYW5kIGZvciBhZGRpbmcgY29waWVzIG9mCiAgLy8vIGV4dGVuc2lvbiB0eXBlIHBhcmFtZXRlcnMgdG8gZXh0ZW5zaW9uIGluc3RhbmNlIG1ldGhvZHMuCiAgLy8vCiAgLy8vIElmIFtzeW50aGVzaXplVHlwZVBhcmFtZXRlck5hbWVzXSBpcyBgdHJ1ZWAgdGhlIG5hbWVzIG9mIHRoZQogIC8vLyBbVHlwZVBhcmFtZXRlcl0gYXJlIHByZWZpeCB3aXRoICcjJyB0byBpbmRpY2F0ZSB0aGF0IHRoZWlyIHN5bnRoZXNpemVkLgogIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gY29weVR5cGVWYXJpYWJsZXMoCiAgICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gb3JpZ2luYWwsIFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIgZGVjbGFyYXRpb24sCiAgICAgIHtib29sIGlzRXh0ZW5zaW9uVHlwZVBhcmFtZXRlcjogZmFsc2V9KSB7CiAgICBMaXN0PFR5cGVCdWlsZGVyPiBuZXdUeXBlcyA9IDxUeXBlQnVpbGRlcj5bXTsKICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gY29weSA9IDxUeXBlVmFyaWFibGVCdWlsZGVyPltdOwogICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIHZhcmlhYmxlIGluIG9yaWdpbmFsKSB7CiAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXIgbmV3VmFyaWFibGUgPSBuZXcgVHlwZVZhcmlhYmxlQnVpbGRlcigKICAgICAgICAgIHZhcmlhYmxlLm5hbWUsIHRoaXMsIHZhcmlhYmxlLmNoYXJPZmZzZXQsCiAgICAgICAgICBib3VuZDogdmFyaWFibGUuYm91bmQ/LmNsb25lKG5ld1R5cGVzKSwKICAgICAgICAgIGlzRXh0ZW5zaW9uVHlwZVBhcmFtZXRlcjogaXNFeHRlbnNpb25UeXBlUGFyYW1ldGVyKTsKICAgICAgY29weS5hZGQobmV3VmFyaWFibGUpOwogICAgICBib3VuZGxlc3NUeXBlVmFyaWFibGVzLmFkZChuZXdWYXJpYWJsZSk7CiAgICB9CiAgICBmb3IgKFR5cGVCdWlsZGVyIG5ld1R5cGUgaW4gbmV3VHlwZXMpIHsKICAgICAgZGVjbGFyYXRpb24uYWRkVHlwZShuZXcgVW5yZXNvbHZlZFR5cGUobmV3VHlwZSwgLTEsIG51bGwpKTsKICAgIH0KICAgIHJldHVybiBjb3B5OwogIH0KCiAgaW50IGZpbmlzaFR5cGVWYXJpYWJsZXMoQ2xhc3NCdWlsZGVyIG9iamVjdCwgVHlwZUJ1aWxkZXIgZHluYW1pY1R5cGUpIHsKICAgIGludCBjb3VudCA9IGJvdW5kbGVzc1R5cGVWYXJpYWJsZXMubGVuZ3RoOwogICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIGJ1aWxkZXIgaW4gYm91bmRsZXNzVHlwZVZhcmlhYmxlcykgewogICAgICBidWlsZGVyLmZpbmlzaCh0aGlzLCBvYmplY3QsIGR5bmFtaWNUeXBlKTsKICAgIH0KICAgIGJvdW5kbGVzc1R5cGVWYXJpYWJsZXMuY2xlYXIoKTsKICAgIHJldHVybiBjb3VudDsKICB9CgogIGludCBjb21wdXRlRGVmYXVsdFR5cGVzKFR5cGVCdWlsZGVyIGR5bmFtaWNUeXBlLCBUeXBlQnVpbGRlciBib3R0b21UeXBlLAogICAgICBDbGFzc0J1aWxkZXIgb2JqZWN0Q2xhc3MpIHsKICAgIGludCBjb3VudCA9IDA7CgogICAgaW50IGNvbXB1dGVEZWZhdWx0VHlwZXNGb3JWYXJpYWJsZXMoCiAgICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB2YXJpYWJsZXMsIGJvb2wgbGVnYWN5TW9kZSkgewogICAgICBpZiAodmFyaWFibGVzID09IG51bGwpIHJldHVybiAwOwoKICAgICAgYm9vbCBoYXZlRXJyb25lb3VzQm91bmRzID0gZmFsc2U7CiAgICAgIGlmICghbGVnYWN5TW9kZSkgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyaWFibGVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyIHZhcmlhYmxlID0gdmFyaWFibGVzW2ldOwogICAgICAgICAgTGlzdDxUeXBlQnVpbGRlcj4gZ2VuZXJpY0Z1bmN0aW9uVHlwZXMgPSA8VHlwZUJ1aWxkZXI+W107CiAgICAgICAgICBmaW5kR2VuZXJpY0Z1bmN0aW9uVHlwZXModmFyaWFibGUuYm91bmQsCiAgICAgICAgICAgICAgcmVzdWx0OiBnZW5lcmljRnVuY3Rpb25UeXBlcyk7CiAgICAgICAgICBpZiAoZ2VuZXJpY0Z1bmN0aW9uVHlwZXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICBoYXZlRXJyb25lb3VzQm91bmRzID0gdHJ1ZTsKICAgICAgICAgICAgYWRkUHJvYmxlbShtZXNzYWdlR2VuZXJpY0Z1bmN0aW9uVHlwZUluQm91bmQsIHZhcmlhYmxlLmNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICB2YXJpYWJsZS5uYW1lLmxlbmd0aCwgdmFyaWFibGUuZmlsZVVyaSk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIWhhdmVFcnJvbmVvdXNCb3VuZHMpIHsKICAgICAgICAgIExpc3Q8VHlwZUJ1aWxkZXI+IGNhbGN1bGF0ZWRCb3VuZHMgPQogICAgICAgICAgICAgIGNhbGN1bGF0ZUJvdW5kcyh2YXJpYWJsZXMsIGR5bmFtaWNUeXBlLCBib3R0b21UeXBlLCBvYmplY3RDbGFzcyk7CiAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcmlhYmxlcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICB2YXJpYWJsZXNbaV0uZGVmYXVsdFR5cGUgPSBjYWxjdWxhdGVkQm91bmRzW2ldOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgaWYgKGxlZ2FjeU1vZGUgfHwgaGF2ZUVycm9uZW91c0JvdW5kcykgewogICAgICAgIC8vIEluIERhcnQgMSwgcHV0IGBkeW5hbWljYCBldmVyeXdoZXJlLgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyaWFibGVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICB2YXJpYWJsZXNbaV0uZGVmYXVsdFR5cGUgPSBkeW5hbWljVHlwZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiB2YXJpYWJsZXMubGVuZ3RoOwogICAgfQoKICAgIHZvaWQgcmVwb3J0SXNzdWVzKExpc3Q8T2JqZWN0PiBpc3N1ZXMpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpc3N1ZXMubGVuZ3RoOyBpICs9IDMpIHsKICAgICAgICBUeXBlRGVjbGFyYXRpb25CdWlsZGVyIGRlY2xhcmF0aW9uID0gaXNzdWVzW2ldOwogICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGlzc3Vlc1tpICsgMV07CiAgICAgICAgTGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dCA9IGlzc3Vlc1tpICsgMl07CgogICAgICAgIGFkZFByb2JsZW0obWVzc2FnZSwgZGVjbGFyYXRpb24uY2hhck9mZnNldCwgZGVjbGFyYXRpb24ubmFtZS5sZW5ndGgsCiAgICAgICAgICAgIGRlY2xhcmF0aW9uLmZpbGVVcmksCiAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQpOwogICAgICB9CiAgICB9CgogICAgYm9vbCBsZWdhY3lNb2RlID0gbG9hZGVyLnRhcmdldC5sZWdhY3lNb2RlOwogICAgZm9yIChCdWlsZGVyIGRlY2xhcmF0aW9uIGluIGxpYnJhcnlEZWNsYXJhdGlvbi5tZW1iZXJzLnZhbHVlcykgewogICAgICBpZiAoZGVjbGFyYXRpb24gaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgICAgewogICAgICAgICAgTGlzdDxPYmplY3Q+IGlzc3VlcyA9IGxlZ2FjeU1vZGUKICAgICAgICAgICAgICA/IGNvbnN0IDxPYmplY3Q+W10KICAgICAgICAgICAgICA6IGdldE5vblNpbXBsaWNpdHlJc3N1ZXNGb3JEZWNsYXJhdGlvbihkZWNsYXJhdGlvbiwKICAgICAgICAgICAgICAgICAgcGVyZm9ybUVycm9yUmVjb3Zlcnk6IHRydWUpOwogICAgICAgICAgcmVwb3J0SXNzdWVzKGlzc3Vlcyk7CiAgICAgICAgICAvLyBJbiBjYXNlIG9mIGlzc3VlcywgdXNlIGxlZ2FjeSBtb2RlIGZvciBlcnJvciByZWNvdmVyeS4KICAgICAgICAgIGNvdW50ICs9IGNvbXB1dGVEZWZhdWx0VHlwZXNGb3JWYXJpYWJsZXMoCiAgICAgICAgICAgICAgZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlcywgbGVnYWN5TW9kZSB8fCBpc3N1ZXMuaXNOb3RFbXB0eSk7CiAgICAgICAgfQogICAgICAgIGRlY2xhcmF0aW9uLmZvckVhY2goKFN0cmluZyBuYW1lLCBCdWlsZGVyIG1lbWJlcikgewogICAgICAgICAgaWYgKG1lbWJlciBpcyBQcm9jZWR1cmVCdWlsZGVyKSB7CiAgICAgICAgICAgIExpc3Q8T2JqZWN0PiBpc3N1ZXMgPSBsZWdhY3lNb2RlCiAgICAgICAgICAgICAgICA/IGNvbnN0IDxPYmplY3Q+W10KICAgICAgICAgICAgICAgIDogZ2V0Tm9uU2ltcGxpY2l0eUlzc3Vlc0ZvclR5cGVWYXJpYWJsZXMobWVtYmVyLnR5cGVWYXJpYWJsZXMpOwogICAgICAgICAgICByZXBvcnRJc3N1ZXMoaXNzdWVzKTsKICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBpc3N1ZXMsIHVzZSBsZWdhY3kgbW9kZSBmb3IgZXJyb3IgcmVjb3ZlcnkuCiAgICAgICAgICAgIGNvdW50ICs9IGNvbXB1dGVEZWZhdWx0VHlwZXNGb3JWYXJpYWJsZXMoCiAgICAgICAgICAgICAgICBtZW1iZXIudHlwZVZhcmlhYmxlcywgbGVnYWN5TW9kZSB8fCBpc3N1ZXMuaXNOb3RFbXB0eSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24gaXMgVHlwZUFsaWFzQnVpbGRlcikgewogICAgICAgIExpc3Q8T2JqZWN0PiBpc3N1ZXMgPSBsZWdhY3lNb2RlCiAgICAgICAgICAgID8gY29uc3QgPE9iamVjdD5bXQogICAgICAgICAgICA6IGdldE5vblNpbXBsaWNpdHlJc3N1ZXNGb3JEZWNsYXJhdGlvbihkZWNsYXJhdGlvbiwKICAgICAgICAgICAgICAgIHBlcmZvcm1FcnJvclJlY292ZXJ5OiB0cnVlKTsKICAgICAgICByZXBvcnRJc3N1ZXMoaXNzdWVzKTsKICAgICAgICAvLyBJbiBjYXNlIG9mIGlzc3VlcywgdXNlIGxlZ2FjeSBtb2RlIGZvciBlcnJvciByZWNvdmVyeS4KICAgICAgICBjb3VudCArPSBjb21wdXRlRGVmYXVsdFR5cGVzRm9yVmFyaWFibGVzKAogICAgICAgICAgICBkZWNsYXJhdGlvbi50eXBlVmFyaWFibGVzLCBsZWdhY3lNb2RlIHx8IGlzc3Vlcy5pc05vdEVtcHR5KTsKICAgICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBGdW5jdGlvbkJ1aWxkZXIpIHsKICAgICAgICBMaXN0PE9iamVjdD4gaXNzdWVzID0gbGVnYWN5TW9kZQogICAgICAgICAgICA/IGNvbnN0IDxPYmplY3Q+W10KICAgICAgICAgICAgOiBnZXROb25TaW1wbGljaXR5SXNzdWVzRm9yVHlwZVZhcmlhYmxlcyhkZWNsYXJhdGlvbi50eXBlVmFyaWFibGVzKTsKICAgICAgICByZXBvcnRJc3N1ZXMoaXNzdWVzKTsKICAgICAgICAvLyBJbiBjYXNlIG9mIGlzc3VlcywgdXNlIGxlZ2FjeSBtb2RlIGZvciBlcnJvciByZWNvdmVyeS4KICAgICAgICBjb3VudCArPSBjb21wdXRlRGVmYXVsdFR5cGVzRm9yVmFyaWFibGVzKAogICAgICAgICAgICBkZWNsYXJhdGlvbi50eXBlVmFyaWFibGVzLCBsZWdhY3lNb2RlIHx8IGlzc3Vlcy5pc05vdEVtcHR5KTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBjb3VudDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYXBwbHlQYXRjaGVzKCkgewogICAgaWYgKCFpc1BhdGNoKSByZXR1cm47CiAgICBOYW1lSXRlcmF0b3Igb3JpZ2luRGVjbGFyYXRpb25zID0gb3JpZ2luLm5hbWVJdGVyYXRvcjsKICAgIHdoaWxlIChvcmlnaW5EZWNsYXJhdGlvbnMubW92ZU5leHQoKSkgewogICAgICBTdHJpbmcgbmFtZSA9IG9yaWdpbkRlY2xhcmF0aW9ucy5uYW1lOwogICAgICBCdWlsZGVyIG1lbWJlciA9IG9yaWdpbkRlY2xhcmF0aW9ucy5jdXJyZW50OwogICAgICBib29sIGlzU2V0dGVyID0gbWVtYmVyLmlzU2V0dGVyOwogICAgICBCdWlsZGVyIHBhdGNoID0gaXNTZXR0ZXIgPyBzY29wZS5zZXR0ZXJzW25hbWVdIDogc2NvcGUubG9jYWxbbmFtZV07CiAgICAgIGlmIChwYXRjaCAhPSBudWxsKSB7CiAgICAgICAgLy8gW3BhdGNoXSBoYXMgdGhlIHNhbWUgbmFtZSBhcyBhIFttZW1iZXJdIGluIFtvcmlnaW5dIGxpYnJhcnksIHNvIGl0CiAgICAgICAgLy8gbXVzdCBiZSBhIHBhdGNoIHRvIFttZW1iZXJdLgogICAgICAgIG1lbWJlci5hcHBseVBhdGNoKHBhdGNoKTsKICAgICAgICAvLyBUT0RPKGFoZSk6IFZlcmlmeSB0aGF0IHBhdGNoIGhhcyB0aGUgQHBhdGNoIGFubm90YXRpb24uCiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gTm8gbWVtYmVyIHdpdGggW25hbWVdIGV4aXN0cyBpbiB0aGlzIGxpYnJhcnkgYWxyZWFkeS4gU28gd2UgbmVlZCB0bwogICAgICAgIC8vIGltcG9ydCBpdCBpbnRvIHRoZSBwYXRjaCBsaWJyYXJ5LiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgb3JpZ2luCiAgICAgICAgLy8gbGlicmFyeSBpcyBpbiBzY29wZSBvZiB0aGUgcGF0Y2ggbGlicmFyeS4KICAgICAgICBpZiAoaXNTZXR0ZXIpIHsKICAgICAgICAgIHNjb3BlQnVpbGRlci5hZGRTZXR0ZXIobmFtZSwgbWVtYmVyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc2NvcGVCdWlsZGVyLmFkZE1lbWJlcihuYW1lLCBtZW1iZXIpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgTmFtZUl0ZXJhdG9yIHBhdGNoRGVjbGFyYXRpb25zID0gbmFtZUl0ZXJhdG9yOwogICAgd2hpbGUgKHBhdGNoRGVjbGFyYXRpb25zLm1vdmVOZXh0KCkpIHsKICAgICAgU3RyaW5nIG5hbWUgPSBwYXRjaERlY2xhcmF0aW9ucy5uYW1lOwogICAgICBCdWlsZGVyIG1lbWJlciA9IHBhdGNoRGVjbGFyYXRpb25zLmN1cnJlbnQ7CiAgICAgIC8vIFdlIG5lZWQgdG8gaW5qZWN0IGFsbCBub24tcGF0Y2ggbWVtYmVycyBpbnRvIHRoZSBvcmlnaW4gbGlicmFyeS4gVGhpcwogICAgICAvLyBzaG91bGQgb25seSBhcHBseSB0byBwcml2YXRlIG1lbWJlcnMuCiAgICAgIGlmIChtZW1iZXIuaXNQYXRjaCkgewogICAgICAgIC8vIElnbm9yZSBwYXRjaGVzLgogICAgICB9IGVsc2UgaWYgKG5hbWUuc3RhcnRzV2l0aCgiXyIpKSB7CiAgICAgICAgb3JpZ2luLmluamVjdE1lbWJlckZyb21QYXRjaChuYW1lLCBtZW1iZXIpOwogICAgICB9IGVsc2UgewogICAgICAgIG9yaWdpbi5leHBvcnRNZW1iZXJGcm9tUGF0Y2gobmFtZSwgbWVtYmVyKTsKICAgICAgfQogICAgfQogIH0KCiAgaW50IGZpbmlzaFBhdGNoTWV0aG9kcygpIHsKICAgIGlmICghaXNQYXRjaCkgcmV0dXJuIDA7CiAgICBpbnQgY291bnQgPSAwOwogICAgSXRlcmF0b3I8QnVpbGRlcj4gaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yOwogICAgd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgY291bnQgKz0gaXRlcmF0b3IuY3VycmVudC5maW5pc2hQYXRjaCgpOwogICAgfQogICAgcmV0dXJuIGNvdW50OwogIH0KCiAgdm9pZCBpbmplY3RNZW1iZXJGcm9tUGF0Y2goU3RyaW5nIG5hbWUsIEJ1aWxkZXIgbWVtYmVyKSB7CiAgICBpZiAobWVtYmVyLmlzU2V0dGVyKSB7CiAgICAgIGFzc2VydChzY29wZS5zZXR0ZXJzW25hbWVdID09IG51bGwpOwogICAgICBzY29wZUJ1aWxkZXIuYWRkU2V0dGVyKG5hbWUsIG1lbWJlcik7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoc2NvcGUubG9jYWxbbmFtZV0gPT0gbnVsbCk7CiAgICAgIHNjb3BlQnVpbGRlci5hZGRNZW1iZXIobmFtZSwgbWVtYmVyKTsKICAgIH0KICB9CgogIHZvaWQgZXhwb3J0TWVtYmVyRnJvbVBhdGNoKFN0cmluZyBuYW1lLCBCdWlsZGVyIG1lbWJlcikgewogICAgaWYgKHVyaS5zY2hlbWUgIT0gImRhcnQiIHx8ICF1cmkucGF0aC5zdGFydHNXaXRoKCJfIikpIHsKICAgICAgYWRkUHJvYmxlbSh0ZW1wbGF0ZVBhdGNoSW5qZWN0aW9uRmFpbGVkLndpdGhBcmd1bWVudHMobmFtZSwgdXJpKSwKICAgICAgICAgIG1lbWJlci5jaGFyT2Zmc2V0LCBub0xlbmd0aCwgbWVtYmVyLmZpbGVVcmkpOwogICAgfQogICAgLy8gUGxhdGZvcm0tcHJpdmF0ZSBsaWJyYXJpZXMsIHN1Y2ggYXMgImRhcnQ6X2ludGVybmFsIiBoYXZlIHNwZWNpYWwKICAgIC8vIHNlbWFudGljczogcHVibGljIG1lbWJlcnMgYXJlIGluamVjdGVkIGludG8gdGhlIG9yaWdpbiBsaWJyYXJ5LgogICAgLy8gVE9ETyhhaGUpOiBTZWUgaWYgd2UgY2FuIHJlbW92ZSB0aGlzIHNwZWNpYWwgY2FzZS4KCiAgICAvLyBJZiB0aGlzIG1lbWJlciBhbHJlYWR5IGV4aXN0IGluIHRoZSBvcmlnaW4gbGlicmFyeSBzY29wZSwgaXQgc2hvdWxkCiAgICAvLyBoYXZlIGJlZW4gbWFya2VkIGFzIHBhdGNoLgogICAgYXNzZXJ0KChtZW1iZXIuaXNTZXR0ZXIgJiYgc2NvcGUuc2V0dGVyc1tuYW1lXSA9PSBudWxsKSB8fAogICAgICAgICghbWVtYmVyLmlzU2V0dGVyICYmIHNjb3BlLmxvY2FsW25hbWVdID09IG51bGwpKTsKICAgIGFkZFRvRXhwb3J0U2NvcGUobmFtZSwgbWVtYmVyKTsKICB9CgogIHZvaWQgcmVwb3J0VHlwZUFyZ3VtZW50SXNzdWVzKAogICAgICBMaXN0PFR5cGVBcmd1bWVudElzc3VlPiBpc3N1ZXMsIFVyaSBmaWxlVXJpLCBpbnQgb2Zmc2V0LAogICAgICB7Ym9vbCBpbmZlcnJlZCwgRGFydFR5cGUgdGFyZ2V0UmVjZWl2ZXIsIFN0cmluZyB0YXJnZXROYW1lfSkgewogICAgZm9yIChUeXBlQXJndW1lbnRJc3N1ZSBpc3N1ZSBpbiBpc3N1ZXMpIHsKICAgICAgRGFydFR5cGUgYXJndW1lbnQgPSBpc3N1ZS5hcmd1bWVudDsKICAgICAgVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyID0gaXNzdWUudHlwZVBhcmFtZXRlcjsKCiAgICAgIE1lc3NhZ2UgbWVzc2FnZTsKICAgICAgYm9vbCBpc3N1ZUluZmVycmVkID0gaW5mZXJyZWQgPz8gaW5mZXJyZWRUeXBlcy5jb250YWlucyhhcmd1bWVudCk7CiAgICAgIGlmIChhcmd1bWVudCBpcyBGdW5jdGlvblR5cGUgJiYgYXJndW1lbnQudHlwZVBhcmFtZXRlcnMubGVuZ3RoID4gMCkgewogICAgICAgIGlmIChpc3N1ZUluZmVycmVkKSB7CiAgICAgICAgICBtZXNzYWdlID0gdGVtcGxhdGVHZW5lcmljRnVuY3Rpb25UeXBlSW5mZXJyZWRBc0FjdHVhbFR5cGVBcmd1bWVudAogICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGFyZ3VtZW50KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VHZW5lcmljRnVuY3Rpb25UeXBlVXNlZEFzQWN0dWFsVHlwZUFyZ3VtZW50OwogICAgICAgIH0KICAgICAgICB0eXBlUGFyYW1ldGVyID0gbnVsbDsKICAgICAgfSBlbHNlIGlmIChhcmd1bWVudCBpcyBUeXBlUGFyYW1ldGVyVHlwZSAmJgogICAgICAgICAgYXJndW1lbnQucHJvbW90ZWRCb3VuZCAhPSBudWxsKSB7CiAgICAgICAgYWRkUHJvYmxlbSgKICAgICAgICAgICAgdGVtcGxhdGVJbnRlcnNlY3Rpb25UeXBlQXNUeXBlQXJndW1lbnQud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIubmFtZSwgYXJndW1lbnQsIGFyZ3VtZW50LnByb21vdGVkQm91bmQpLAogICAgICAgICAgICBvZmZzZXQsCiAgICAgICAgICAgIG5vTGVuZ3RoLAogICAgICAgICAgICBmaWxlVXJpKTsKICAgICAgICBjb250aW51ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoaXNzdWUuZW5jbG9zaW5nVHlwZSA9PSBudWxsICYmIHRhcmdldFJlY2VpdmVyICE9IG51bGwpIHsKICAgICAgICAgIGlmIChpc3N1ZUluZmVycmVkKSB7CiAgICAgICAgICAgIG1lc3NhZ2UgPQogICAgICAgICAgICAgICAgdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWRJbmZlcnJlZC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50LAogICAgICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIuYm91bmQsCiAgICAgICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlci5uYW1lLAogICAgICAgICAgICAgICAgICAgIHRhcmdldFJlY2VpdmVyLAogICAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWUpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbWVzc2FnZSA9IHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50UXVhbGlmaWVkLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICBhcmd1bWVudCwKICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIuYm91bmQsCiAgICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVyLm5hbWUsCiAgICAgICAgICAgICAgICB0YXJnZXRSZWNlaXZlciwKICAgICAgICAgICAgICAgIHRhcmdldE5hbWUpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBTdHJpbmcgZW5jbG9zaW5nTmFtZSA9IGlzc3VlLmVuY2xvc2luZ1R5cGUgPT0gbnVsbAogICAgICAgICAgICAgID8gdGFyZ2V0TmFtZQogICAgICAgICAgICAgIDogZ2V0R2VuZXJpY1R5cGVOYW1lKGlzc3VlLmVuY2xvc2luZ1R5cGUpOwogICAgICAgICAgYXNzZXJ0KGVuY2xvc2luZ05hbWUgIT0gbnVsbCk7CiAgICAgICAgICBpZiAoaXNzdWVJbmZlcnJlZCkgewogICAgICAgICAgICBtZXNzYWdlID0gdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJbmZlcnJlZC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgYXJndW1lbnQsCiAgICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVyLmJvdW5kLAogICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlci5uYW1lLAogICAgICAgICAgICAgICAgZW5jbG9zaW5nTmFtZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBtZXNzYWdlID0gdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnQud2l0aEFyZ3VtZW50cyhhcmd1bWVudCwKICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIuYm91bmQsIHR5cGVQYXJhbWV0ZXIubmFtZSwgZW5jbG9zaW5nTmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICByZXBvcnRUeXBlQXJndW1lbnRJc3N1ZShtZXNzYWdlLCBmaWxlVXJpLCBvZmZzZXQsIHR5cGVQYXJhbWV0ZXIpOwogICAgfQogIH0KCiAgdm9pZCByZXBvcnRUeXBlQXJndW1lbnRJc3N1ZShNZXNzYWdlIG1lc3NhZ2UsIFVyaSBmaWxlVXJpLCBpbnQgZmlsZU9mZnNldCwKICAgICAgVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyKSB7CiAgICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0OwogICAgaWYgKHR5cGVQYXJhbWV0ZXIgIT0gbnVsbCAmJiB0eXBlUGFyYW1ldGVyLmZpbGVPZmZzZXQgIT0gLTEpIHsKICAgICAgLy8gSXQgbG9va3MgbGlrZSB3aGVuIHBhcmFtZXRlcnMgY29tZSBmcm9tIHBhdGNoIGZpbGVzLCB0aGV5IGRvbid0CiAgICAgIC8vIGhhdmUgYSByZXBvcnRhYmxlIGxvY2F0aW9uLgogICAgICBjb250ZXh0ID0gPExvY2F0ZWRNZXNzYWdlPlsKICAgICAgICBtZXNzYWdlSW5jb3JyZWN0VHlwZUFyZ3VtZW50VmFyaWFibGUud2l0aExvY2F0aW9uKAogICAgICAgICAgICB0eXBlUGFyYW1ldGVyLmxvY2F0aW9uLmZpbGUsIHR5cGVQYXJhbWV0ZXIuZmlsZU9mZnNldCwgbm9MZW5ndGgpCiAgICAgIF07CiAgICB9CiAgICBhZGRQcm9ibGVtKG1lc3NhZ2UsIGZpbGVPZmZzZXQsIG5vTGVuZ3RoLCBmaWxlVXJpLCBjb250ZXh0OiBjb250ZXh0KTsKICB9CgogIHZvaWQgY2hlY2tCb3VuZHNJbkZpZWxkKEZpZWxkIGZpZWxkLCBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50KSB7CiAgICBpZiAobG9hZGVyLnRhcmdldC5sZWdhY3lNb2RlKSByZXR1cm47CiAgICBjaGVja0JvdW5kc0luVHlwZSgKICAgICAgICBmaWVsZC50eXBlLCB0eXBlRW52aXJvbm1lbnQsIGZpZWxkLmZpbGVVcmksIGZpZWxkLmZpbGVPZmZzZXQsCiAgICAgICAgYWxsb3dTdXBlckJvdW5kZWQ6IHRydWUpOwogIH0KCiAgdm9pZCBjaGVja0JvdW5kc0luRnVuY3Rpb25Ob2RlUGFydHMoCiAgICAgIFR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQsIFVyaSBmaWxlVXJpLCBpbnQgZmlsZU9mZnNldCwKICAgICAge0xpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMsCiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gcG9zaXRpb25hbFBhcmFtZXRlcnMsCiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gbmFtZWRQYXJhbWV0ZXJzLAogICAgICBEYXJ0VHlwZSByZXR1cm5UeXBlfSkgewogICAgaWYgKGxvYWRlci50YXJnZXQubGVnYWN5TW9kZSkgcmV0dXJuOwogICAgaWYgKHR5cGVQYXJhbWV0ZXJzICE9IG51bGwpIHsKICAgICAgZm9yIChUeXBlUGFyYW1ldGVyIHBhcmFtZXRlciBpbiB0eXBlUGFyYW1ldGVycykgewogICAgICAgIGNoZWNrQm91bmRzSW5UeXBlKAogICAgICAgICAgICBwYXJhbWV0ZXIuYm91bmQsIHR5cGVFbnZpcm9ubWVudCwgZmlsZVVyaSwgcGFyYW1ldGVyLmZpbGVPZmZzZXQsCiAgICAgICAgICAgIGFsbG93U3VwZXJCb3VuZGVkOiB0cnVlKTsKICAgICAgfQogICAgfQogICAgaWYgKHBvc2l0aW9uYWxQYXJhbWV0ZXJzICE9IG51bGwpIHsKICAgICAgZm9yIChWYXJpYWJsZURlY2xhcmF0aW9uIGZvcm1hbCBpbiBwb3NpdGlvbmFsUGFyYW1ldGVycykgewogICAgICAgIGNoZWNrQm91bmRzSW5UeXBlKAogICAgICAgICAgICBmb3JtYWwudHlwZSwgdHlwZUVudmlyb25tZW50LCBmaWxlVXJpLCBmb3JtYWwuZmlsZU9mZnNldCwKICAgICAgICAgICAgYWxsb3dTdXBlckJvdW5kZWQ6IHRydWUpOwogICAgICB9CiAgICB9CiAgICBpZiAobmFtZWRQYXJhbWV0ZXJzICE9IG51bGwpIHsKICAgICAgZm9yIChWYXJpYWJsZURlY2xhcmF0aW9uIG5hbWVkIGluIG5hbWVkUGFyYW1ldGVycykgewogICAgICAgIGNoZWNrQm91bmRzSW5UeXBlKAogICAgICAgICAgICBuYW1lZC50eXBlLCB0eXBlRW52aXJvbm1lbnQsIGZpbGVVcmksIG5hbWVkLmZpbGVPZmZzZXQsCiAgICAgICAgICAgIGFsbG93U3VwZXJCb3VuZGVkOiB0cnVlKTsKICAgICAgfQogICAgfQogICAgaWYgKHJldHVyblR5cGUgIT0gbnVsbCkgewogICAgICBMaXN0PFR5cGVBcmd1bWVudElzc3VlPiBpc3N1ZXMgPSBmaW5kVHlwZUFyZ3VtZW50SXNzdWVzKAogICAgICAgICAgcmV0dXJuVHlwZSwgdHlwZUVudmlyb25tZW50LAogICAgICAgICAgYWxsb3dTdXBlckJvdW5kZWQ6IHRydWUpOwogICAgICBpZiAoaXNzdWVzICE9IG51bGwpIHsKICAgICAgICBpbnQgb2Zmc2V0ID0gZmlsZU9mZnNldDsKICAgICAgICBmb3IgKFR5cGVBcmd1bWVudElzc3VlIGlzc3VlIGluIGlzc3VlcykgewogICAgICAgICAgRGFydFR5cGUgYXJndW1lbnQgPSBpc3N1ZS5hcmd1bWVudDsKICAgICAgICAgIFR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlciA9IGlzc3VlLnR5cGVQYXJhbWV0ZXI7CgogICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjaGVjayBpZiBbYXJndW1lbnRdIHdhcyBpbmZlcnJlZCBvciBzcGVjaWZpZWQKICAgICAgICAgIC8vIGhlcmUsIGJlY2F1c2UgaW5mZXJlbmNlIGluIHJldHVybiB0eXBlcyBib2lscyBkb3duIHRvIGluc3RhbnRpYXRlLQogICAgICAgICAgLy8gLXRvLWJvdW5kLCBhbmQgaXQgY2FuJ3QgcHJvdmlkZSBhIHR5cGUgdGhhdCB2aW9sYXRlcyB0aGUgYm91bmQuCiAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2U7CiAgICAgICAgICBpZiAoYXJndW1lbnQgaXMgRnVuY3Rpb25UeXBlICYmIGFyZ3VtZW50LnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VHZW5lcmljRnVuY3Rpb25UeXBlVXNlZEFzQWN0dWFsVHlwZUFyZ3VtZW50OwogICAgICAgICAgICB0eXBlUGFyYW1ldGVyID0gbnVsbDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG1lc3NhZ2UgPSB0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudEluUmV0dXJuVHlwZS53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgYXJndW1lbnQsCiAgICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVyLmJvdW5kLAogICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlci5uYW1lLAogICAgICAgICAgICAgICAgZ2V0R2VuZXJpY1R5cGVOYW1lKGlzc3VlLmVuY2xvc2luZ1R5cGUpKTsKICAgICAgICAgIH0KCiAgICAgICAgICByZXBvcnRUeXBlQXJndW1lbnRJc3N1ZShtZXNzYWdlLCBmaWxlVXJpLCBvZmZzZXQsIHR5cGVQYXJhbWV0ZXIpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBjaGVja0JvdW5kc0luRnVuY3Rpb25Ob2RlKAogICAgICBGdW5jdGlvbk5vZGUgZnVuY3Rpb24sIFR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQsIFVyaSBmaWxlVXJpKSB7CiAgICBpZiAobG9hZGVyLnRhcmdldC5sZWdhY3lNb2RlKSByZXR1cm47CiAgICBjaGVja0JvdW5kc0luRnVuY3Rpb25Ob2RlUGFydHMoCiAgICAgICAgdHlwZUVudmlyb25tZW50LCBmaWxlVXJpLCBmdW5jdGlvbi5maWxlT2Zmc2V0LAogICAgICAgIHR5cGVQYXJhbWV0ZXJzOiBmdW5jdGlvbi50eXBlUGFyYW1ldGVycywKICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVyczogZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMsCiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzOiBmdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMsCiAgICAgICAgcmV0dXJuVHlwZTogZnVuY3Rpb24ucmV0dXJuVHlwZSk7CiAgfQoKICB2b2lkIGNoZWNrQm91bmRzSW5MaXN0TGl0ZXJhbCgKICAgICAgTGlzdExpdGVyYWwgbm9kZSwgVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCwgVXJpIGZpbGVVcmksCiAgICAgIHtib29sIGluZmVycmVkID0gZmFsc2V9KSB7CiAgICBpZiAobG9hZGVyLnRhcmdldC5sZWdhY3lNb2RlKSByZXR1cm47CiAgICBjaGVja0JvdW5kc0luVHlwZSgKICAgICAgICBub2RlLnR5cGVBcmd1bWVudCwgdHlwZUVudmlyb25tZW50LCBmaWxlVXJpLCBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgaW5mZXJyZWQ6IGluZmVycmVkLCBhbGxvd1N1cGVyQm91bmRlZDogdHJ1ZSk7CiAgfQoKICB2b2lkIGNoZWNrQm91bmRzSW5TZXRMaXRlcmFsKAogICAgICBTZXRMaXRlcmFsIG5vZGUsIFR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQsIFVyaSBmaWxlVXJpLAogICAgICB7Ym9vbCBpbmZlcnJlZCA9IGZhbHNlfSkgewogICAgaWYgKGxvYWRlci50YXJnZXQubGVnYWN5TW9kZSkgcmV0dXJuOwogICAgY2hlY2tCb3VuZHNJblR5cGUoCiAgICAgICAgbm9kZS50eXBlQXJndW1lbnQsIHR5cGVFbnZpcm9ubWVudCwgZmlsZVVyaSwgbm9kZS5maWxlT2Zmc2V0LAogICAgICAgIGluZmVycmVkOiBpbmZlcnJlZCwgYWxsb3dTdXBlckJvdW5kZWQ6IHRydWUpOwogIH0KCiAgdm9pZCBjaGVja0JvdW5kc0luTWFwTGl0ZXJhbCgKICAgICAgTWFwTGl0ZXJhbCBub2RlLCBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50LCBVcmkgZmlsZVVyaSwKICAgICAge2Jvb2wgaW5mZXJyZWQgPSBmYWxzZX0pIHsKICAgIGlmIChsb2FkZXIudGFyZ2V0LmxlZ2FjeU1vZGUpIHJldHVybjsKICAgIGNoZWNrQm91bmRzSW5UeXBlKG5vZGUua2V5VHlwZSwgdHlwZUVudmlyb25tZW50LCBmaWxlVXJpLCBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgaW5mZXJyZWQ6IGluZmVycmVkLCBhbGxvd1N1cGVyQm91bmRlZDogdHJ1ZSk7CiAgICBjaGVja0JvdW5kc0luVHlwZShub2RlLnZhbHVlVHlwZSwgdHlwZUVudmlyb25tZW50LCBmaWxlVXJpLCBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgaW5mZXJyZWQ6IGluZmVycmVkLCBhbGxvd1N1cGVyQm91bmRlZDogdHJ1ZSk7CiAgfQoKICB2b2lkIGNoZWNrQm91bmRzSW5UeXBlKAogICAgICBEYXJ0VHlwZSB0eXBlLCBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50LCBVcmkgZmlsZVVyaSwgaW50IG9mZnNldCwKICAgICAge2Jvb2wgaW5mZXJyZWQsIGJvb2wgYWxsb3dTdXBlckJvdW5kZWQgPSB0cnVlfSkgewogICAgaWYgKGxvYWRlci50YXJnZXQubGVnYWN5TW9kZSkgcmV0dXJuOwogICAgTGlzdDxUeXBlQXJndW1lbnRJc3N1ZT4gaXNzdWVzID0gZmluZFR5cGVBcmd1bWVudElzc3VlcygKICAgICAgICB0eXBlLCB0eXBlRW52aXJvbm1lbnQsCiAgICAgICAgYWxsb3dTdXBlckJvdW5kZWQ6IGFsbG93U3VwZXJCb3VuZGVkKTsKICAgIGlmIChpc3N1ZXMgIT0gbnVsbCkgewogICAgICByZXBvcnRUeXBlQXJndW1lbnRJc3N1ZXMoaXNzdWVzLCBmaWxlVXJpLCBvZmZzZXQsIGluZmVycmVkOiBpbmZlcnJlZCk7CiAgICB9CiAgfQoKICB2b2lkIGNoZWNrQm91bmRzSW5WYXJpYWJsZURlY2xhcmF0aW9uKAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUsIFR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQsIFVyaSBmaWxlVXJpLAogICAgICB7Ym9vbCBpbmZlcnJlZCA9IGZhbHNlfSkgewogICAgaWYgKGxvYWRlci50YXJnZXQubGVnYWN5TW9kZSkgcmV0dXJuOwogICAgaWYgKG5vZGUudHlwZSA9PSBudWxsKSByZXR1cm47CiAgICBjaGVja0JvdW5kc0luVHlwZShub2RlLnR5cGUsIHR5cGVFbnZpcm9ubWVudCwgZmlsZVVyaSwgbm9kZS5maWxlT2Zmc2V0LAogICAgICAgIGluZmVycmVkOiBpbmZlcnJlZCwgYWxsb3dTdXBlckJvdW5kZWQ6IHRydWUpOwogIH0KCiAgdm9pZCBjaGVja0JvdW5kc0luQ29uc3RydWN0b3JJbnZvY2F0aW9uKAogICAgICBDb25zdHJ1Y3Rvckludm9jYXRpb24gbm9kZSwgVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCwgVXJpIGZpbGVVcmksCiAgICAgIHtib29sIGluZmVycmVkID0gZmFsc2V9KSB7CiAgICBpZiAobG9hZGVyLnRhcmdldC5sZWdhY3lNb2RlKSByZXR1cm47CiAgICBpZiAobm9kZS5hcmd1bWVudHMudHlwZXMuaXNFbXB0eSkgcmV0dXJuOwogICAgQ29uc3RydWN0b3IgY29uc3RydWN0b3IgPSBub2RlLnRhcmdldDsKICAgIENsYXNzIGtsYXNzID0gY29uc3RydWN0b3IuZW5jbG9zaW5nQ2xhc3M7CiAgICBEYXJ0VHlwZSBjb25zdHJ1Y3RlZFR5cGUgPSBuZXcgSW50ZXJmYWNlVHlwZShrbGFzcywgbm9kZS5hcmd1bWVudHMudHlwZXMpOwogICAgY2hlY2tCb3VuZHNJblR5cGUoCiAgICAgICAgY29uc3RydWN0ZWRUeXBlLCB0eXBlRW52aXJvbm1lbnQsIGZpbGVVcmksIG5vZGUuZmlsZU9mZnNldCwKICAgICAgICBpbmZlcnJlZDogaW5mZXJyZWQsIGFsbG93U3VwZXJCb3VuZGVkOiBmYWxzZSk7CiAgfQoKICB2b2lkIGNoZWNrQm91bmRzSW5GYWN0b3J5SW52b2NhdGlvbigKICAgICAgU3RhdGljSW52b2NhdGlvbiBub2RlLCBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50LCBVcmkgZmlsZVVyaSwKICAgICAge2Jvb2wgaW5mZXJyZWQgPSBmYWxzZX0pIHsKICAgIGlmIChsb2FkZXIudGFyZ2V0LmxlZ2FjeU1vZGUpIHJldHVybjsKICAgIGlmIChub2RlLmFyZ3VtZW50cy50eXBlcy5pc0VtcHR5KSByZXR1cm47CiAgICBQcm9jZWR1cmUgZmFjdG9yeSA9IG5vZGUudGFyZ2V0OwogICAgYXNzZXJ0KGZhY3RvcnkuaXNGYWN0b3J5KTsKICAgIENsYXNzIGtsYXNzID0gZmFjdG9yeS5lbmNsb3NpbmdDbGFzczsKICAgIERhcnRUeXBlIGNvbnN0cnVjdGVkVHlwZSA9IG5ldyBJbnRlcmZhY2VUeXBlKGtsYXNzLCBub2RlLmFyZ3VtZW50cy50eXBlcyk7CiAgICBjaGVja0JvdW5kc0luVHlwZSgKICAgICAgICBjb25zdHJ1Y3RlZFR5cGUsIHR5cGVFbnZpcm9ubWVudCwgZmlsZVVyaSwgbm9kZS5maWxlT2Zmc2V0LAogICAgICAgIGluZmVycmVkOiBpbmZlcnJlZCwgYWxsb3dTdXBlckJvdW5kZWQ6IGZhbHNlKTsKICB9CgogIHZvaWQgY2hlY2tCb3VuZHNJblN0YXRpY0ludm9jYXRpb24oCiAgICAgIFN0YXRpY0ludm9jYXRpb24gbm9kZSwgVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCwgVXJpIGZpbGVVcmksCiAgICAgIHtib29sIGluZmVycmVkID0gZmFsc2V9KSB7CiAgICBpZiAobG9hZGVyLnRhcmdldC5sZWdhY3lNb2RlKSByZXR1cm47CiAgICBpZiAobm9kZS5hcmd1bWVudHMudHlwZXMuaXNFbXB0eSkgcmV0dXJuOwogICAgQ2xhc3Mga2xhc3MgPSBub2RlLnRhcmdldC5lbmNsb3NpbmdDbGFzczsKICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gcGFyYW1ldGVycyA9IG5vZGUudGFyZ2V0LmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzOwogICAgTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzID0gbm9kZS5hcmd1bWVudHMudHlwZXM7CiAgICAvLyBUaGUgZm9sbG93aW5nIGVycm9yIGlzIHRvIGJlIHJlcG9ydGVkIGVsc2V3aGVyZS4KICAgIGlmIChwYXJhbWV0ZXJzLmxlbmd0aCAhPSBhcmd1bWVudHMubGVuZ3RoKSByZXR1cm47CiAgICBMaXN0PFR5cGVBcmd1bWVudElzc3VlPiBpc3N1ZXMgPSBmaW5kVHlwZUFyZ3VtZW50SXNzdWVzRm9ySW52b2NhdGlvbigKICAgICAgICBwYXJhbWV0ZXJzLCBhcmd1bWVudHMsIHR5cGVFbnZpcm9ubWVudCk7CiAgICBpZiAoaXNzdWVzICE9IG51bGwpIHsKICAgICAgRGFydFR5cGUgdGFyZ2V0UmVjZWl2ZXI7CiAgICAgIGlmIChrbGFzcyAhPSBudWxsKSB7CiAgICAgICAgdGFyZ2V0UmVjZWl2ZXIgPSBuZXcgSW50ZXJmYWNlVHlwZShrbGFzcyk7CiAgICAgIH0KICAgICAgU3RyaW5nIHRhcmdldE5hbWUgPSBub2RlLnRhcmdldC5uYW1lLm5hbWU7CiAgICAgIHJlcG9ydFR5cGVBcmd1bWVudElzc3Vlcyhpc3N1ZXMsIGZpbGVVcmksIG5vZGUuZmlsZU9mZnNldCwKICAgICAgICAgIGluZmVycmVkOiBpbmZlcnJlZCwKICAgICAgICAgIHRhcmdldFJlY2VpdmVyOiB0YXJnZXRSZWNlaXZlciwKICAgICAgICAgIHRhcmdldE5hbWU6IHRhcmdldE5hbWUpOwogICAgfQogIH0KCiAgdm9pZCBjaGVja0JvdW5kc0luTWV0aG9kSW52b2NhdGlvbigKICAgICAgRGFydFR5cGUgcmVjZWl2ZXJUeXBlLAogICAgICBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50LAogICAgICBDbGFzc0hpZXJhcmNoeSBoaWVyYXJjaHksCiAgICAgIFR5cGVJbmZlcnJlckltcGwgdHlwZUluZmVycmVyLAogICAgICBOYW1lIG5hbWUsCiAgICAgIE1lbWJlciBpbnRlcmZhY2VUYXJnZXQsCiAgICAgIEFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIFVyaSBmaWxlVXJpLAogICAgICBpbnQgb2Zmc2V0LAogICAgICB7Ym9vbCBpbmZlcnJlZCA9IGZhbHNlfSkgewogICAgaWYgKGxvYWRlci50YXJnZXQubGVnYWN5TW9kZSkgcmV0dXJuOwogICAgaWYgKGFyZ3VtZW50cy50eXBlcy5pc0VtcHR5KSByZXR1cm47CiAgICBDbGFzcyBrbGFzczsKICAgIExpc3Q8RGFydFR5cGU+IHJlY2VpdmVyVHlwZUFyZ3VtZW50czsKICAgIGlmIChyZWNlaXZlclR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICBrbGFzcyA9IHJlY2VpdmVyVHlwZS5jbGFzc05vZGU7CiAgICAgIHJlY2VpdmVyVHlwZUFyZ3VtZW50cyA9IHJlY2VpdmVyVHlwZS50eXBlQXJndW1lbnRzOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gVE9ETyhkbWl0cnlhcyk6IEZpbmQgYSBiZXR0ZXIgd2F5IHRoYW4gcmVseWluZyBvbiBbaW50ZXJmYWNlVGFyZ2V0XS4KICAgIE1lbWJlciBtZXRob2QgPSBoaWVyYXJjaHkuZ2V0RGlzcGF0Y2hUYXJnZXQoa2xhc3MsIG5hbWUpID8/IGludGVyZmFjZVRhcmdldDsKICAgIGlmIChtZXRob2QgPT0gbnVsbCB8fCBtZXRob2QgaXMhIFByb2NlZHVyZSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoa2xhc3MgIT0gbWV0aG9kLmVuY2xvc2luZ0NsYXNzKSB7CiAgICAgIFN1cGVydHlwZSBwYXJlbnQgPQogICAgICAgICAgaGllcmFyY2h5LmdldENsYXNzQXNJbnN0YW5jZU9mKGtsYXNzLCBtZXRob2QuZW5jbG9zaW5nQ2xhc3MpOwogICAgICBrbGFzcyA9IG1ldGhvZC5lbmNsb3NpbmdDbGFzczsKICAgICAgcmVjZWl2ZXJUeXBlQXJndW1lbnRzID0gcGFyZW50LnR5cGVBcmd1bWVudHM7CiAgICB9CiAgICBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IHN1YnN0aXR1dGlvbk1hcCA9IDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjZWl2ZXJUeXBlQXJndW1lbnRzLmxlbmd0aDsgKytpKSB7CiAgICAgIHN1YnN0aXR1dGlvbk1hcFtrbGFzcy50eXBlUGFyYW1ldGVyc1tpXV0gPSByZWNlaXZlclR5cGVBcmd1bWVudHNbaV07CiAgICB9CiAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IG1ldGhvZFBhcmFtZXRlcnMgPSBtZXRob2QuZnVuY3Rpb24udHlwZVBhcmFtZXRlcnM7CiAgICAvLyBUaGUgZXJyb3IgaXMgdG8gYmUgcmVwb3J0ZWQgZWxzZXdoZXJlLgogICAgaWYgKG1ldGhvZFBhcmFtZXRlcnMubGVuZ3RoICE9IGFyZ3VtZW50cy50eXBlcy5sZW5ndGgpIHJldHVybjsKICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gaW5zdGFudGlhdGVkTWV0aG9kUGFyYW1ldGVycyA9CiAgICAgICAgbmV3IExpc3Q8VHlwZVBhcmFtZXRlcj4uZmlsbGVkKG1ldGhvZFBhcmFtZXRlcnMubGVuZ3RoLCBudWxsKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFudGlhdGVkTWV0aG9kUGFyYW1ldGVycy5sZW5ndGg7ICsraSkgewogICAgICBpbnN0YW50aWF0ZWRNZXRob2RQYXJhbWV0ZXJzW2ldID0KICAgICAgICAgIG5ldyBUeXBlUGFyYW1ldGVyKG1ldGhvZFBhcmFtZXRlcnNbaV0ubmFtZSk7CiAgICAgIHN1YnN0aXR1dGlvbk1hcFttZXRob2RQYXJhbWV0ZXJzW2ldXSA9CiAgICAgICAgICBuZXcgVHlwZVBhcmFtZXRlclR5cGUoaW5zdGFudGlhdGVkTWV0aG9kUGFyYW1ldGVyc1tpXSk7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RhbnRpYXRlZE1ldGhvZFBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKICAgICAgaW5zdGFudGlhdGVkTWV0aG9kUGFyYW1ldGVyc1tpXS5ib3VuZCA9CiAgICAgICAgICBzdWJzdGl0dXRlKG1ldGhvZFBhcmFtZXRlcnNbaV0uYm91bmQsIHN1YnN0aXR1dGlvbk1hcCk7CiAgICB9CiAgICBMaXN0PFR5cGVBcmd1bWVudElzc3VlPiBpc3N1ZXMgPSBmaW5kVHlwZUFyZ3VtZW50SXNzdWVzRm9ySW52b2NhdGlvbigKICAgICAgICBpbnN0YW50aWF0ZWRNZXRob2RQYXJhbWV0ZXJzLCBhcmd1bWVudHMudHlwZXMsIHR5cGVFbnZpcm9ubWVudCk7CiAgICBpZiAoaXNzdWVzICE9IG51bGwpIHsKICAgICAgcmVwb3J0VHlwZUFyZ3VtZW50SXNzdWVzKGlzc3VlcywgZmlsZVVyaSwgb2Zmc2V0LAogICAgICAgICAgaW5mZXJyZWQ6IGluZmVycmVkLAogICAgICAgICAgdGFyZ2V0UmVjZWl2ZXI6IHJlY2VpdmVyVHlwZSwKICAgICAgICAgIHRhcmdldE5hbWU6IG5hbWUubmFtZSk7CiAgICB9CiAgfQoKICB2b2lkIGNoZWNrQm91bmRzSW5PdXRsaW5lKFR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQpIHsKICAgIGlmIChsb2FkZXIudGFyZ2V0LmxlZ2FjeU1vZGUpIHJldHVybjsKICAgIEl0ZXJhdG9yPEJ1aWxkZXI+IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcjsKICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgIEJ1aWxkZXIgZGVjbGFyYXRpb24gPSBpdGVyYXRvci5jdXJyZW50OwogICAgICBpZiAoZGVjbGFyYXRpb24gaXMgRmllbGRCdWlsZGVyKSB7CiAgICAgICAgY2hlY2tCb3VuZHNJbkZpZWxkKGRlY2xhcmF0aW9uLmZpZWxkLCB0eXBlRW52aXJvbm1lbnQpOwogICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIFByb2NlZHVyZUJ1aWxkZXIpIHsKICAgICAgICBjaGVja0JvdW5kc0luRnVuY3Rpb25Ob2RlKGRlY2xhcmF0aW9uLnByb2NlZHVyZS5mdW5jdGlvbiwKICAgICAgICAgICAgdHlwZUVudmlyb25tZW50LCBkZWNsYXJhdGlvbi5maWxlVXJpKTsKICAgICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBDbGFzc0J1aWxkZXIpIHsKICAgICAgICBkZWNsYXJhdGlvbi5jaGVja0JvdW5kc0luT3V0bGluZSh0eXBlRW52aXJvbm1lbnQpOwogICAgICB9CiAgICB9CiAgICBpbmZlcnJlZFR5cGVzLmNsZWFyKCk7CiAgfQoKICBpbnQgZmluYWxpemVJbml0aWFsaXppbmdGb3JtYWxzKCkgewogICAgaWYgKCFsZWdhY3lNb2RlIHx8IHVudHlwZWRJbml0aWFsaXppbmdGb3JtYWxzID09IG51bGwpIHJldHVybiAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1bnR5cGVkSW5pdGlhbGl6aW5nRm9ybWFscy5sZW5ndGg7IGkrKykgewogICAgICB1bnR5cGVkSW5pdGlhbGl6aW5nRm9ybWFsc1tpXS5maW5hbGl6ZUluaXRpYWxpemluZ0Zvcm1hbCgpOwogICAgfQogICAgaW50IGNvdW50ID0gdW50eXBlZEluaXRpYWxpemluZ0Zvcm1hbHMubGVuZ3RoOwogICAgdW50eXBlZEluaXRpYWxpemluZ0Zvcm1hbHMgPSBudWxsOwogICAgcmV0dXJuIGNvdW50OwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxGaWVsZEJ1aWxkZXI+IHRha2VJbXBsaWNpdGx5VHlwZWRGaWVsZHMoKSB7CiAgICBMaXN0PEZpZWxkQnVpbGRlcj4gcmVzdWx0ID0gaW1wbGljaXRseVR5cGVkRmllbGRzOwogICAgaW1wbGljaXRseVR5cGVkRmllbGRzID0gbnVsbDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CgovLyBUaGUga2luZCBvZiB0eXBlIHBhcmFtZXRlciBzY29wZSBidWlsdCBieSBhIFtUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyXQovLyBvYmplY3QuCmVudW0gVHlwZVBhcmFtZXRlclNjb3BlS2luZCB7CiAgbGlicmFyeSwKICBjbGFzc09yTmFtZWRNaXhpbkFwcGxpY2F0aW9uLAogIGNsYXNzRGVjbGFyYXRpb24sCiAgbWl4aW5EZWNsYXJhdGlvbiwKICB1bm5hbWVkTWl4aW5BcHBsaWNhdGlvbiwKICBuYW1lZE1peGluQXBwbGljYXRpb24sCiAgZXh0ZW5zaW9uRGVjbGFyYXRpb24sCiAgdHlwZWRlZiwKICBzdGF0aWNPckluc3RhbmNlTWV0aG9kT3JDb25zdHJ1Y3RvciwKICB0b3BMZXZlbE1ldGhvZCwKICBmYWN0b3J5TWV0aG9kLAogIGZ1bmN0aW9uVHlwZSwKfQoKLy8vIEEgYnVpbGRlciBvYmplY3QgcHJlcGFyaW5nIGZvciBidWlsZGluZyBkZWNsYXJhdGlvbnMgdGhhdCBjYW4gaW50cm9kdWNlIHR5cGUKLy8vIHBhcmFtZXRlciBhbmQvb3IgbWVtYmVycy4KLy8vCi8vLyBVbmxpa2UgW1Njb3BlXSwgdGhpcyBzY29wZSBpcyB1c2VkIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgYnVpbGRlcnMgdG8KLy8vIGVuc3VyZSB0eXBlcyBhbmQgbWVtYmVycyBhcmUgYWRkZWQgdG8gYW5kIHJlc29sdmVkIGluIHRoZSBjb3JyZWN0IGxvY2F0aW9uLgpjbGFzcyBUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyIHsKICBUeXBlUGFyYW1ldGVyU2NvcGVLaW5kIF9raW5kOwoKICBmaW5hbCBUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyIHBhcmVudDsKCiAgZmluYWwgTWFwPFN0cmluZywgQnVpbGRlcj4gbWVtYmVyczsKCiAgZmluYWwgTWFwPFN0cmluZywgQnVpbGRlcj4gY29uc3RydWN0b3JzOwoKICBmaW5hbCBNYXA8U3RyaW5nLCBCdWlsZGVyPiBzZXR0ZXJzOwoKICBmaW5hbCBMaXN0PEV4dGVuc2lvbkJ1aWxkZXI+IGV4dGVuc2lvbnM7CgogIGZpbmFsIExpc3Q8VW5yZXNvbHZlZFR5cGU+IHR5cGVzID0gPFVucmVzb2x2ZWRUeXBlPltdOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdG9wIHVzaW5nIFtfbmFtZV0gZm9yIGRldGVybWluaW5nIHRoZSBkZWNsYXJhdGlvbgogIC8vIGtpbmQuCiAgU3RyaW5nIF9uYW1lOwoKICAvLy8gT2Zmc2V0IG9mIG5hbWUgdG9rZW4sIHVwZGF0ZWQgYnkgdGhlIG91dGxpbmUgYnVpbGRlciBhbG9uZwogIC8vLyB3aXRoIHRoZSBuYW1lIGFzIHRoZSBjdXJyZW50IGRlY2xhcmF0aW9uIGNoYW5nZXMuCiAgaW50IF9jaGFyT2Zmc2V0OwoKICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IF90eXBlVmFyaWFibGVzOwoKICAvLy8gVGhlIHR5cGUgb2YgYHRoaXNgIGluIGluc3RhbmNlIG1ldGhvZHMgZGVjbGFyZWQgaW4gZXh0ZW5zaW9uIGRlY2xhcmF0aW9ucy4KICAvLy8KICAvLy8gSW5zdGFuY2UgbWV0aG9kcyBkZWNsYXJlZCBpbiBleHRlbnNpb24gZGVjbGFyYXRpb25zIG1ldGhvZHMgYXJlIGV4dGVuZGVkCiAgLy8vIHdpdGggYSBzeW50aGVzaXplZCBwYXJhbWV0ZXIgb2YgdGhpcyB0eXBlLgogIFR5cGVCdWlsZGVyIF9leHRlbnNpb25UaGlzVHlwZTsKCiAgYm9vbCBoYXNDb25zdENvbnN0cnVjdG9yID0gZmFsc2U7CgogIFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIoCiAgICAgIHRoaXMuX2tpbmQsCiAgICAgIHRoaXMubWVtYmVycywKICAgICAgdGhpcy5zZXR0ZXJzLAogICAgICB0aGlzLmNvbnN0cnVjdG9ycywKICAgICAgdGhpcy5leHRlbnNpb25zLAogICAgICB0aGlzLl9uYW1lLAogICAgICB0aGlzLl9jaGFyT2Zmc2V0LAogICAgICB0aGlzLnBhcmVudCkgewogICAgYXNzZXJ0KF9uYW1lICE9IG51bGwpOwogIH0KCiAgVHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlci5saWJyYXJ5KCkKICAgICAgOiB0aGlzKAogICAgICAgICAgICBUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLmxpYnJhcnksCiAgICAgICAgICAgIDxTdHJpbmcsIEJ1aWxkZXI+e30sCiAgICAgICAgICAgIDxTdHJpbmcsIEJ1aWxkZXI+e30sCiAgICAgICAgICAgIG51bGwsIC8vIE5vIHN1cHBvcnQgZm9yIGNvbnN0cnVjdG9ycyBpbiBsaWJyYXJ5IHNjb3Blcy4KICAgICAgICAgICAgPEV4dGVuc2lvbkJ1aWxkZXI+W10sCiAgICAgICAgICAgICI8bGlicmFyeT4iLAogICAgICAgICAgICAtMSwKICAgICAgICAgICAgbnVsbCk7CgogIFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIgY3JlYXRlTmVzdGVkKAogICAgICBUeXBlUGFyYW1ldGVyU2NvcGVLaW5kIGtpbmQsIFN0cmluZyBuYW1lLCBib29sIGhhc01lbWJlcnMpIHsKICAgIHJldHVybiBuZXcgVHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlcigKICAgICAgICBraW5kLAogICAgICAgIGhhc01lbWJlcnMgPyA8U3RyaW5nLCBNZW1iZXJCdWlsZGVyPnt9IDogbnVsbCwKICAgICAgICBoYXNNZW1iZXJzID8gPFN0cmluZywgTWVtYmVyQnVpbGRlcj57fSA6IG51bGwsCiAgICAgICAgaGFzTWVtYmVycyA/IDxTdHJpbmcsIE1lbWJlckJ1aWxkZXI+e30gOiBudWxsLAogICAgICAgIG51bGwsIC8vIE5vIHN1cHBvcnQgZm9yIGV4dGVuc2lvbnMgaW4gbmVzdGVkIHNjb3Blcy4KICAgICAgICBuYW1lLAogICAgICAgIC0xLAogICAgICAgIHRoaXMpOwogIH0KCiAgLy8vIFJlZ2lzdGVycyB0aGF0IHRoaXMgYnVpbGRlciBpcyBwcmVwYXJpbmcgZm9yIGEgY2xhc3MgZGVjbGFyYXRpb24gd2l0aCB0aGUKICAvLy8gZ2l2ZW4gW25hbWVdIGFuZCBbdHlwZVZhcmlhYmxlc10gbG9jYXRlZCBbY2hhck9mZnNldF0uCiAgdm9pZCBtYXJrQXNDbGFzc0RlY2xhcmF0aW9uKAogICAgICBTdHJpbmcgbmFtZSwgaW50IGNoYXJPZmZzZXQsIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcykgewogICAgYXNzZXJ0KF9raW5kID09IFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQuY2xhc3NPck5hbWVkTWl4aW5BcHBsaWNhdGlvbiwKICAgICAgICAiVW5leHBlY3RlZCBkZWNsYXJhdGlvbiBraW5kOiAkX2tpbmQiKTsKICAgIF9raW5kID0gVHlwZVBhcmFtZXRlclNjb3BlS2luZC5jbGFzc0RlY2xhcmF0aW9uOwogICAgX25hbWUgPSBuYW1lOwogICAgX2NoYXJPZmZzZXQgPSBjaGFyT2Zmc2V0OwogICAgX3R5cGVWYXJpYWJsZXMgPSB0eXBlVmFyaWFibGVzOwogIH0KCiAgLy8vIFJlZ2lzdGVycyB0aGF0IHRoaXMgYnVpbGRlciBpcyBwcmVwYXJpbmcgZm9yIGEgbmFtZWQgbWl4aW4gYXBwbGljYXRpb24KICAvLy8gd2l0aCB0aGUgZ2l2ZW4gW25hbWVdIGFuZCBbdHlwZVZhcmlhYmxlc10gbG9jYXRlZCBbY2hhck9mZnNldF0uCiAgdm9pZCBtYXJrQXNOYW1lZE1peGluQXBwbGljYXRpb24oCiAgICAgIFN0cmluZyBuYW1lLCBpbnQgY2hhck9mZnNldCwgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzKSB7CiAgICBhc3NlcnQoX2tpbmQgPT0gVHlwZVBhcmFtZXRlclNjb3BlS2luZC5jbGFzc09yTmFtZWRNaXhpbkFwcGxpY2F0aW9uLAogICAgICAgICJVbmV4cGVjdGVkIGRlY2xhcmF0aW9uIGtpbmQ6ICRfa2luZCIpOwogICAgX2tpbmQgPSBUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLm5hbWVkTWl4aW5BcHBsaWNhdGlvbjsKICAgIF9uYW1lID0gbmFtZTsKICAgIF9jaGFyT2Zmc2V0ID0gY2hhck9mZnNldDsKICAgIF90eXBlVmFyaWFibGVzID0gdHlwZVZhcmlhYmxlczsKICB9CgogIC8vLyBSZWdpc3RlcnMgdGhhdCB0aGlzIGJ1aWxkZXIgaXMgcHJlcGFyaW5nIGZvciBhIG1peGluIGRlY2xhcmF0aW9uIHdpdGggdGhlCiAgLy8vIGdpdmVuIFtuYW1lXSBhbmQgW3R5cGVWYXJpYWJsZXNdIGxvY2F0ZWQgW2NoYXJPZmZzZXRdLgogIHZvaWQgbWFya0FzTWl4aW5EZWNsYXJhdGlvbigKICAgICAgU3RyaW5nIG5hbWUsIGludCBjaGFyT2Zmc2V0LCBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEF2b2lkIHVzaW5nICdjbGFzc09yTmFtZWRNaXhpbkFwcGxpY2F0aW9uJyBmb3IgbWl4aW4KICAgIC8vIGRlY2xhcmF0aW9uLiBUaGVzZSBhcmUgc3ludGFjdGljYWxseSBkaXN0aW5jdCBzbyB3ZSBkb24ndCBuZWVkIHRoZQogICAgLy8gdHJhbnNpdGlvbi4KICAgIGFzc2VydChfa2luZCA9PSBUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLmNsYXNzT3JOYW1lZE1peGluQXBwbGljYXRpb24sCiAgICAgICAgIlVuZXhwZWN0ZWQgZGVjbGFyYXRpb24ga2luZDogJF9raW5kIik7CiAgICBfa2luZCA9IFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQubWl4aW5EZWNsYXJhdGlvbjsKICAgIF9uYW1lID0gbmFtZTsKICAgIF9jaGFyT2Zmc2V0ID0gY2hhck9mZnNldDsKICAgIF90eXBlVmFyaWFibGVzID0gdHlwZVZhcmlhYmxlczsKICB9CgogIC8vLyBSZWdpc3RlcnMgdGhhdCB0aGlzIGJ1aWxkZXIgaXMgcHJlcGFyaW5nIGZvciBhbiBleHRlbnNpb24gZGVjbGFyYXRpb24gd2l0aAogIC8vLyB0aGUgZ2l2ZW4gW25hbWVdIGFuZCBbdHlwZVZhcmlhYmxlc10gbG9jYXRlZCBbY2hhck9mZnNldF0uCiAgdm9pZCBtYXJrQXNFeHRlbnNpb25EZWNsYXJhdGlvbigKICAgICAgU3RyaW5nIG5hbWUsIGludCBjaGFyT2Zmc2V0LCBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMpIHsKICAgIGFzc2VydChfa2luZCA9PSBUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLmV4dGVuc2lvbkRlY2xhcmF0aW9uLAogICAgICAgICJVbmV4cGVjdGVkIGRlY2xhcmF0aW9uIGtpbmQ6ICRfa2luZCIpOwogICAgX25hbWUgPSBuYW1lOwogICAgX2NoYXJPZmZzZXQgPSBjaGFyT2Zmc2V0OwogICAgX3R5cGVWYXJpYWJsZXMgPSB0eXBlVmFyaWFibGVzOwogIH0KCiAgLy8vIFJlZ2lzdGVycyB0aGUgJ2V4dGVuc2lvbiB0aGlzIHR5cGUnIG9mIHRoZSBleHRlbnNpb24gZGVjbGFyYXRpb24gcHJlcGFyZWQKICAvLy8gZm9yIGJ5IHRoaXMgYnVpbGRlci4KICAvLy8KICAvLy8gU2VlIFtleHRlbnNpb25UaGlzVHlwZV0gZm9yIHRlcm1pbm9sb2d5LgogIHZvaWQgcmVnaXN0ZXJFeHRlbnNpb25UaGlzVHlwZShUeXBlQnVpbGRlciB0eXBlKSB7CiAgICBhc3NlcnQoX2tpbmQgPT0gVHlwZVBhcmFtZXRlclNjb3BlS2luZC5leHRlbnNpb25EZWNsYXJhdGlvbiwKICAgICAgICAiRGVjbGFyYXRpb25CdWlsZGVyLnJlZ2lzdGVyRXh0ZW5zaW9uVGhpc1R5cGUgaXMgbm90IHN1cHBvcnRlZCAkX2tpbmQiKTsKICAgIGFzc2VydChfZXh0ZW5zaW9uVGhpc1R5cGUgPT0gbnVsbCwKICAgICAgICAiRXh0ZW5zaW9uIHRoaXMgdHlwZSBoYXMgYWxyZWFkeSBiZWVuIHNldC4iKTsKICAgIF9leHRlbnNpb25UaGlzVHlwZSA9IHR5cGU7CiAgfQoKICAvLy8gUmV0dXJucyB3aGF0IGtpbmQgb2YgZGVjbGFyYXRpb24gdGhpcyBbVHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlcl0gaXMKICAvLy8gcHJlcGFyaW5nIGZvci4KICAvLy8KICAvLy8gVGhpcyBpbmZvcm1hdGlvbiBpcyB0cmFuc2llbnQgZm9yIHNvbWUgZGVjbGFyYXRpb25zLiBJbiBwYXJ0aWN1bGFyCiAgLy8vIGNsYXNzZXMgYW5kIG5hbWVkIG1peGluIGFwcGxpY2F0aW9ucyBhcmUgaW5pdGlhbGx5IGNyZWF0ZWQgd2l0aCB0aGUga2luZAogIC8vLyBbVHlwZVBhcmFtZXRlclNjb3BlS2luZC5jbGFzc09yTmFtZWRNaXhpbkFwcGxpY2F0aW9uXSBiZWZvcmUgYSBjYWxsIHRvCiAgLy8vIGVpdGhlciBbbWFya0FzQ2xhc3NEZWNsYXJhdGlvbl0gb3IgW21hcmtBc05hbWVkTWl4aW5BcHBsaWNhdGlvbl0gc2V0cyB0aGUKICAvLy8gdmFsdWUgdG8gaXRzIGFjdHVhbCBraW5kLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEF2b2lkIHRoZSB0cmFuc2l0aW9uIGN1cnJlbnRseSB1c2VkIG9uIG1peGluCiAgLy8gZGVjbGFyYXRpb25zLgogIFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQgZ2V0IGtpbmQgPT4gX2tpbmQ7CgogIFN0cmluZyBnZXQgbmFtZSA9PiBfbmFtZTsKCiAgaW50IGdldCBjaGFyT2Zmc2V0ID0+IF9jaGFyT2Zmc2V0OwoKICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IGdldCB0eXBlVmFyaWFibGVzID0+IF90eXBlVmFyaWFibGVzOwoKICAvLy8gUmV0dXJucyB0aGUgJ2V4dGVuc2lvbiB0aGlzIHR5cGUnIG9mIHRoZSBleHRlbnNpb24gZGVjbGFyYXRpb24gcHJlcGFyZWQKICAvLy8gZm9yIGJ5IHRoaXMgYnVpbGRlci4KICAvLy8KICAvLy8gVGhlICdleHRlbnNpb24gdGhpcyB0eXBlJyBpcyB0aGUgdHlwZSBtZW50aW9uZWQgaW4gdGhlIG9uLWNsYXVzZSBvZiB0aGUKICAvLy8gZXh0ZW5zaW9uIGRlY2xhcmF0aW9uLiBGb3IgaW5zdGFuY2UgYEJgIGluIHRoaXMgZXh0ZW5zaW9uIGRlY2xhcmF0aW9uOgogIC8vLwogIC8vLyAgICAgZXh0ZW5zaW9uIEEgb24gQiB7CiAgLy8vICAgICAgIEIgbWV0aG9kKCkgPT4gdGhpczsKICAvLy8gICAgIH0KICAvLy8KICAvLy8gVGhlICdleHRlbnNpb24gdGhpcyB0eXBlJyBpcyB0aGUgdHlwZSBpZiBgdGhpc2AgZXhwcmVzc2lvbiBpbiBpbnN0YW5jZQogIC8vLyBtZXRob2RzIGRlY2xhcmVkIGluIGV4dGVuc2lvbiBkZWNsYXJhdGlvbnMuCiAgVHlwZUJ1aWxkZXIgZ2V0IGV4dGVuc2lvblRoaXNUeXBlIHsKICAgIGFzc2VydChraW5kID09IFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQuZXh0ZW5zaW9uRGVjbGFyYXRpb24sCiAgICAgICAgIkRlY2xhcmF0aW9uQnVpbGRlci5leHRlbnNpb25UaGlzVHlwZSBub3Qgc3VwcG9ydGVkIG9uICRraW5kLiIpOwogICAgYXNzZXJ0KF9leHRlbnNpb25UaGlzVHlwZSAhPSBudWxsLAogICAgICAgICJEZWNsYXJhdGlvbkJ1aWxkZXIuZXh0ZW5zaW9uVGhpc1R5cGUgaGFzIG5vdCBiZWVuIHNldCBvbiAkdGhpcy4iKTsKICAgIHJldHVybiBfZXh0ZW5zaW9uVGhpc1R5cGU7CiAgfQoKICAvLy8gQWRkcyB0aGUgeWV0IHVucmVzb2x2ZWQgW3R5cGVdIHRvIHRoaXMgc2NvcGUgYnVpbGRlci4KICAvLy8KICAvLy8gVW5yZXNvbHZlZCB0eXBlIHdpbGwgYmUgcmVzb2x2ZWQgdGhyb3VnaCBbcmVzb2x2ZVR5cGVzXSB3aGVuIHRoZSBzY29wZQogIC8vLyBpcyBmdWxseSBidWlsdC4gVGhpcyBhbGxvd3MgZm9yIHJlc29sdmluZyBzZWxmLXJlZmVyZW5jaW5nIHR5cGVzLCBsaWtlCiAgLy8vIHR5cGUgcGFyYW1ldGVyIHVzZWQgaW4gdGhlaXIgb3duIGJvdW5kLCBmb3IgaW5zdGFuY2UgYDxUIGV4dGVuZHMgQTxUPj5gLgogIHZvaWQgYWRkVHlwZShVbnJlc29sdmVkVHlwZSB0eXBlKSB7CiAgICB0eXBlcy5hZGQodHlwZSk7CiAgfQoKICAvLy8gUmVzb2x2ZXMgdHlwZSB2YXJpYWJsZXMgaW4gW3R5cGVzXSBhbmQgcHJvcGFnYXRlIG90aGVyIHR5cGVzIHRvIFtwYXJlbnRdLgogIHZvaWQgcmVzb2x2ZVR5cGVzKAogICAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMsIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgIE1hcDxTdHJpbmcsIFR5cGVWYXJpYWJsZUJ1aWxkZXI+IG1hcDsKICAgIGlmICh0eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgbWFwID0gPFN0cmluZywgVHlwZVZhcmlhYmxlQnVpbGRlcj57fTsKICAgICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIGJ1aWxkZXIgaW4gdHlwZVZhcmlhYmxlcykgewogICAgICAgIG1hcFtidWlsZGVyLm5hbWVdID0gYnVpbGRlcjsKICAgICAgfQogICAgfQogICAgU2NvcGUgc2NvcGU7CiAgICBmb3IgKFVucmVzb2x2ZWRUeXBlIHR5cGUgaW4gdHlwZXMpIHsKICAgICAgT2JqZWN0IG5hbWVPclF1YWxpZmllZCA9IHR5cGUuYnVpbGRlci5uYW1lOwogICAgICBTdHJpbmcgbmFtZSA9IG5hbWVPclF1YWxpZmllZCBpcyBRdWFsaWZpZWROYW1lCiAgICAgICAgICA/IG5hbWVPclF1YWxpZmllZC5xdWFsaWZpZXIKICAgICAgICAgIDogbmFtZU9yUXVhbGlmaWVkOwogICAgICBCdWlsZGVyIGRlY2xhcmF0aW9uOwogICAgICBpZiAobmFtZSAhPSBudWxsKSB7CiAgICAgICAgaWYgKG1lbWJlcnMgIT0gbnVsbCkgewogICAgICAgICAgZGVjbGFyYXRpb24gPSBtZW1iZXJzW25hbWVdOwogICAgICAgIH0KICAgICAgICBpZiAoZGVjbGFyYXRpb24gPT0gbnVsbCAmJiBtYXAgIT0gbnVsbCkgewogICAgICAgICAgZGVjbGFyYXRpb24gPSBtYXBbbmFtZV07CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChkZWNsYXJhdGlvbiA9PSBudWxsKSB7CiAgICAgICAgLy8gU2luY2UgbmFtZSBkaWRuJ3QgcmVzb2x2ZSBpbiB0aGlzIHNjb3BlLCBwcm9wYWdhdGUgaXQgdG8gdGhlCiAgICAgICAgLy8gcGFyZW50IGRlY2xhcmF0aW9uLgogICAgICAgIHBhcmVudC5hZGRUeXBlKHR5cGUpOwogICAgICB9IGVsc2UgaWYgKG5hbWVPclF1YWxpZmllZCBpcyBRdWFsaWZpZWROYW1lKSB7CiAgICAgICAgLy8gQXR0ZW1wdCB0byB1c2UgYSBtZW1iZXIgb3IgdHlwZSB2YXJpYWJsZSBhcyBhIHByZWZpeC4KICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSB0ZW1wbGF0ZU5vdEFQcmVmaXhJblR5cGVBbm5vdGF0aW9uLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgIGZsYXR0ZW5OYW1lKAogICAgICAgICAgICAgICAgbmFtZU9yUXVhbGlmaWVkLnF1YWxpZmllciwgdHlwZS5jaGFyT2Zmc2V0LCB0eXBlLmZpbGVVcmkpLAogICAgICAgICAgICBuYW1lT3JRdWFsaWZpZWQubmFtZSk7CiAgICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKG1lc3NhZ2UsIHR5cGUuY2hhck9mZnNldCwKICAgICAgICAgICAgbmFtZU9yUXVhbGlmaWVkLmVuZENoYXJPZmZzZXQgLSB0eXBlLmNoYXJPZmZzZXQsIHR5cGUuZmlsZVVyaSk7CiAgICAgICAgdHlwZS5idWlsZGVyLmJpbmQodHlwZS5idWlsZGVyLmJ1aWxkSW52YWxpZFR5cGUobWVzc2FnZS53aXRoTG9jYXRpb24oCiAgICAgICAgICAgIHR5cGUuZmlsZVVyaSwKICAgICAgICAgICAgdHlwZS5jaGFyT2Zmc2V0LAogICAgICAgICAgICBuYW1lT3JRdWFsaWZpZWQuZW5kQ2hhck9mZnNldCAtIHR5cGUuY2hhck9mZnNldCkpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzY29wZSA/Pz0gdG9TY29wZShudWxsKS53aXRoVHlwZVZhcmlhYmxlcyh0eXBlVmFyaWFibGVzKTsKICAgICAgICB0eXBlLnJlc29sdmVJbihzY29wZSwgbGlicmFyeSk7CiAgICAgIH0KICAgIH0KICAgIHR5cGVzLmNsZWFyKCk7CiAgfQoKICBTY29wZSB0b1Njb3BlKFNjb3BlIHBhcmVudCkgewogICAgcmV0dXJuIG5ldyBTY29wZSgKICAgICAgICBsb2NhbDogbWVtYmVycywKICAgICAgICBzZXR0ZXJzOiBzZXR0ZXJzLAogICAgICAgIGV4dGVuc2lvbnM6IGV4dGVuc2lvbnMsCiAgICAgICAgcGFyZW50OiBwYXJlbnQsCiAgICAgICAgZGVidWdOYW1lOiBuYW1lLAogICAgICAgIGlzTW9kaWZpYWJsZTogZmFsc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0RlY2xhcmF0aW9uQnVpbGRlcigke2hhc2hDb2RlfTpraW5kPSRraW5kLG5hbWU9JG5hbWUpJzsKfQoKY2xhc3MgRmllbGRJbmZvIHsKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBmaW5hbCBpbnQgY2hhck9mZnNldDsKICBmaW5hbCBUb2tlbiBpbml0aWFsaXplclRva2VuOwogIGZpbmFsIFRva2VuIGJlZm9yZUxhc3Q7CiAgZmluYWwgaW50IGNoYXJFbmRPZmZzZXQ7CgogIGNvbnN0IEZpZWxkSW5mbyh0aGlzLm5hbWUsIHRoaXMuY2hhck9mZnNldCwgdGhpcy5pbml0aWFsaXplclRva2VuLAogICAgICB0aGlzLmJlZm9yZUxhc3QsIHRoaXMuY2hhckVuZE9mZnNldCk7Cn0KCmNsYXNzIEltcGxlbWVudGF0aW9uSW5mbyB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgZmluYWwgQnVpbGRlciBkZWNsYXJhdGlvbjsKICBmaW5hbCBpbnQgY2hhck9mZnNldDsKCiAgY29uc3QgSW1wbGVtZW50YXRpb25JbmZvKHRoaXMubmFtZSwgdGhpcy5kZWNsYXJhdGlvbiwgdGhpcy5jaGFyT2Zmc2V0KTsKfQoKVXJpIGNvbXB1dGVMaWJyYXJ5VXJpKEJ1aWxkZXIgZGVjbGFyYXRpb24pIHsKICBCdWlsZGVyIGN1cnJlbnQgPSBkZWNsYXJhdGlvbjsKICBkbyB7CiAgICBpZiAoY3VycmVudCBpcyBMaWJyYXJ5QnVpbGRlcikgcmV0dXJuIGN1cnJlbnQudXJpOwogICAgY3VycmVudCA9IGN1cnJlbnQucGFyZW50OwogIH0gd2hpbGUgKGN1cnJlbnQgIT0gbnVsbCk7CiAgcmV0dXJuIHVuaGFuZGxlZCgibm8gbGlicmFyeSBwYXJlbnQiLCAiJHtkZWNsYXJhdGlvbi5ydW50aW1lVHlwZX0iLAogICAgICBkZWNsYXJhdGlvbi5jaGFyT2Zmc2V0LCBkZWNsYXJhdGlvbi5maWxlVXJpKTsKfQoKU3RyaW5nIGV4dHJhY3ROYW1lKG5hbWUpID0+IG5hbWUgaXMgUXVhbGlmaWVkTmFtZSA/IG5hbWUubmFtZSA6IG5hbWU7CgpjbGFzcyBQb3N0cG9uZWRQcm9ibGVtIHsKICBmaW5hbCBNZXNzYWdlIG1lc3NhZ2U7CiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CiAgZmluYWwgaW50IGxlbmd0aDsKICBmaW5hbCBVcmkgZmlsZVVyaTsKCiAgUG9zdHBvbmVkUHJvYmxlbSh0aGlzLm1lc3NhZ2UsIHRoaXMuY2hhck9mZnNldCwgdGhpcy5sZW5ndGgsIHRoaXMuZmlsZVVyaSk7Cn0KjIAATk48ASYBJwEhCRMPFR8SFRQTDxYWFxEbFRUUEA4TFxQa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aG93IHV0Zjg7CgppbXBvcnQgJ2RhcnQ6dHlwZWRfZGF0YScgc2hvdyBVaW50OExpc3Q7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIEFyZ3VtZW50cywKICAgICAgICBCb3R0b21UeXBlLAogICAgICAgIENsYXNzLAogICAgICAgIENvbXBvbmVudCwKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBFeHByZXNzaW9uLAogICAgICAgIEZ1bmN0aW9uTm9kZSwKICAgICAgICBJbnRlcmZhY2VUeXBlLAogICAgICAgIExpYnJhcnksCiAgICAgICAgTGlicmFyeURlcGVuZGVuY3ksCiAgICAgICAgUHJvY2VkdXJlS2luZCwKICAgICAgICBTdXBlcnR5cGUsCiAgICAgICAgVHJlZU5vZGU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JwogICAgc2hvdyBDbGFzc0hpZXJhcmNoeSwgSGFuZGxlQW1iaWd1b3VzU3VwZXJ0eXBlczsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0JyBzaG93IENvcmVUeXBlczsKCmltcG9ydCAnLi4vLi4vYXBpX3Byb3RvdHlwZS9maWxlX3N5c3RlbS5kYXJ0JzsKCmltcG9ydCAnLi4vLi4vYmFzZS9pbnN0cnVtZW50YXRpb24uZGFydCcgc2hvdyBJbnN0cnVtZW50YXRpb247CgppbXBvcnQgJy4uL2JsYWNrbGlzdGVkX2NsYXNzZXMuZGFydCcgc2hvdyBibGFja2xpc3RlZENvcmVDbGFzc2VzOwoKaW1wb3J0ICcuLi9leHBvcnQuZGFydCcgc2hvdyBFeHBvcnQ7CgppbXBvcnQgJy4uL2ltcG9ydC5kYXJ0JyBzaG93IEltcG9ydDsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cKICAgICAgICBMb2NhdGVkTWVzc2FnZSwKICAgICAgICBNZXNzYWdlLAogICAgICAgIFN1bW1hcnlUZW1wbGF0ZSwKICAgICAgICBUZW1wbGF0ZSwKICAgICAgICBtZXNzYWdlT2JqZWN0RXh0ZW5kcywKICAgICAgICBtZXNzYWdlT2JqZWN0SW1wbGVtZW50cywKICAgICAgICBtZXNzYWdlT2JqZWN0TWl4ZXNJbiwKICAgICAgICBtZXNzYWdlUGFydE9ycGhhbiwKICAgICAgICBub0xlbmd0aCwKICAgICAgICB0ZW1wbGF0ZUFtYmlndW91c1N1cGVydHlwZXMsCiAgICAgICAgdGVtcGxhdGVDYW50UmVhZEZpbGUsCiAgICAgICAgdGVtcGxhdGVDeWNsaWNDbGFzc0hpZXJhcmNoeSwKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0LAogICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZExpYnJhcnlFeHBvcnRDb250ZXh0LAogICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZExpYnJhcnlJbXBvcnQsCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkTGlicmFyeUltcG9ydENvbnRleHQsCiAgICAgICAgdGVtcGxhdGVFeHRlbmRpbmdFbnVtLAogICAgICAgIHRlbXBsYXRlRXh0ZW5kaW5nUmVzdHJpY3RlZCwKICAgICAgICB0ZW1wbGF0ZUlsbGVnYWxNaXhpbiwKICAgICAgICB0ZW1wbGF0ZUlsbGVnYWxNaXhpbkR1ZVRvQ29uc3RydWN0b3JzLAogICAgICAgIHRlbXBsYXRlSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnNDYXVzZSwKICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVVyaU1pc3NpbmdTY2hlbWUsCiAgICAgICAgdGVtcGxhdGVTb3VyY2VPdXRsaW5lU3VtbWFyeSwKICAgICAgICB0ZW1wbGF0ZVVudHJhbnNsYXRhYmxlVXJpOwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX3NoYWRvd19hc3QuZGFydCcgc2hvdyBTaGFkb3dUeXBlSW5mZXJlbmNlRW5naW5lOwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBDbGFzc0J1aWxkZXIsCiAgICAgICAgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyLAogICAgICAgIEJ1aWxkZXIsCiAgICAgICAgRGVsYXllZE1lbWJlciwKICAgICAgICBEZWxheWVkT3ZlcnJpZGVDaGVjaywKICAgICAgICBFbnVtQnVpbGRlciwKICAgICAgICBGaWVsZEJ1aWxkZXIsCiAgICAgICAgUHJvY2VkdXJlQnVpbGRlciwKICAgICAgICBMaWJyYXJ5QnVpbGRlciwKICAgICAgICBNZW1iZXJCdWlsZGVyLAogICAgICAgIE5hbWVkVHlwZUJ1aWxkZXIsCiAgICAgICAgVHlwZUJ1aWxkZXIsCiAgICAgICAgVHlwZURlY2xhcmF0aW9uQnVpbGRlcjsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF90YXJnZXQuZGFydCcgc2hvdyBLZXJuZWxUYXJnZXQ7CgppbXBvcnQgJy4uL2tlcm5lbC9ib2R5X2J1aWxkZXIuZGFydCcgc2hvdyBCb2R5QnVpbGRlcjsKCmltcG9ydCAnLi4va2VybmVsL3RyYW5zZm9ybV9jb2xsZWN0aW9ucy5kYXJ0JyBzaG93IENvbGxlY3Rpb25UcmFuc2Zvcm1lcjsKCmltcG9ydCAnLi4va2VybmVsL3RyYW5zZm9ybV9zZXRfbGl0ZXJhbHMuZGFydCcgc2hvdyBTZXRMaXRlcmFsVHJhbnNmb3JtZXI7CgppbXBvcnQgJy4uL2tlcm5lbC90eXBlX2J1aWxkZXJfY29tcHV0ZXIuZGFydCcgc2hvdyBUeXBlQnVpbGRlckNvbXB1dGVyOwoKaW1wb3J0ICcuLi9sb2FkZXIuZGFydCcgc2hvdyBMb2FkZXIsIHVudHJhbnNsYXRhYmxlVXJpU2NoZW1lOwoKaW1wb3J0ICcuLi9wYXJzZXIvY2xhc3NfbWVtYmVyX3BhcnNlci5kYXJ0JyBzaG93IENsYXNzTWVtYmVyUGFyc2VyOwoKaW1wb3J0ICcuLi9wYXJzZXIuZGFydCcgc2hvdyBQYXJzZXIsIGxlbmd0aEZvclRva2VuLCBvZmZzZXRGb3JUb2tlbjsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyBpbnRlcm5hbFByb2JsZW07CgppbXBvcnQgJy4uL3NjYW5uZXIuZGFydCcKICAgIHNob3cKICAgICAgICBFcnJvclRva2VuLAogICAgICAgIExhbmd1YWdlVmVyc2lvblRva2VuLAogICAgICAgIFNjYW5uZXJDb25maWd1cmF0aW9uLAogICAgICAgIFNjYW5uZXJSZXN1bHQsCiAgICAgICAgVG9rZW4sCiAgICAgICAgc2NhbjsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvdHlwZV9pbmZlcnJlci5kYXJ0JzsKCmltcG9ydCAnZGlldF9saXN0ZW5lci5kYXJ0JyBzaG93IERpZXRMaXN0ZW5lcjsKCmltcG9ydCAnZGlldF9wYXJzZXIuZGFydCcgc2hvdyBEaWV0UGFyc2VyOwoKaW1wb3J0ICdvdXRsaW5lX2J1aWxkZXIuZGFydCcgc2hvdyBPdXRsaW5lQnVpbGRlcjsKCmltcG9ydCAnc291cmNlX2NsYXNzX2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VDbGFzc0J1aWxkZXI7CgppbXBvcnQgJ3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCmNsYXNzIFNvdXJjZUxvYWRlciBleHRlbmRzIExvYWRlciB7CiAgLy8vIFRoZSBbRmlsZVN5c3RlbV0gd2hpY2ggc2hvdWxkIGJlIHVzZWQgdG8gYWNjZXNzIGZpbGVzLgogIGZpbmFsIEZpbGVTeXN0ZW0gZmlsZVN5c3RlbTsKCiAgLy8vIFdoZXRoZXIgY29tbWVudHMgc2hvdWxkIGJlIHNjYW5uZWQgYW5kIHBhcnNlZC4KICBmaW5hbCBib29sIGluY2x1ZGVDb21tZW50czsKCiAgZmluYWwgTWFwPFVyaSwgTGlzdDxpbnQ+PiBzb3VyY2VCeXRlcyA9IDxVcmksIExpc3Q8aW50Pj57fTsKCiAgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGJ1aWxkZXJIaWVyYXJjaHk7CgogIC8vIFVzZWQgd2hlbiBidWlsZGluZyBkaXJlY3RseSB0byBrZXJuZWwuCiAgQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5OwogIENvcmVUeXBlcyBjb3JlVHlwZXM7CiAgLy8gVXNlZCB3aGVuIGNoZWNraW5nIHdoZXRoZXIgYSByZXR1cm4gdHlwZSBvZiBhbiBhc3luYyBmdW5jdGlvbiBpcyB2YWxpZC4KICBEYXJ0VHlwZSBmdXR1cmVPZkJvdHRvbTsKICBEYXJ0VHlwZSBpdGVyYWJsZU9mQm90dG9tOwogIERhcnRUeXBlIHN0cmVhbU9mQm90dG9tOwoKICBTaGFkb3dUeXBlSW5mZXJlbmNlRW5naW5lIHR5cGVJbmZlcmVuY2VFbmdpbmU7CgogIEluc3RydW1lbnRhdGlvbiBpbnN0cnVtZW50YXRpb247CgogIENvbGxlY3Rpb25UcmFuc2Zvcm1lciBjb2xsZWN0aW9uVHJhbnNmb3JtZXI7CgogIFNldExpdGVyYWxUcmFuc2Zvcm1lciBzZXRMaXRlcmFsVHJhbnNmb3JtZXI7CgogIFNvdXJjZUxvYWRlcih0aGlzLmZpbGVTeXN0ZW0sIHRoaXMuaW5jbHVkZUNvbW1lbnRzLCBLZXJuZWxUYXJnZXQgdGFyZ2V0KQogICAgICA6IHN1cGVyKHRhcmdldCk7CgogIFRlbXBsYXRlPFN1bW1hcnlUZW1wbGF0ZT4gZ2V0IG91dGxpbmVTdW1tYXJ5VGVtcGxhdGUgPT4KICAgICAgdGVtcGxhdGVTb3VyY2VPdXRsaW5lU3VtbWFyeTsKCiAgYm9vbCBnZXQgaXNTb3VyY2VMb2FkZXIgPT4gdHJ1ZTsKCiAgRnV0dXJlPFRva2VuPiB0b2tlbml6ZShTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LAogICAgICB7Ym9vbCBzdXBwcmVzc0xleGljYWxFcnJvcnM6IGZhbHNlfSkgYXN5bmMgewogICAgVXJpIHVyaSA9IGxpYnJhcnkuZmlsZVVyaTsKCiAgICAvLyBMb29rdXAgdGhlIGZpbGUgVVJJIGluIHRoZSBjYWNoZS4KICAgIExpc3Q8aW50PiBieXRlcyA9IHNvdXJjZUJ5dGVzW3VyaV07CgogICAgaWYgKGJ5dGVzID09IG51bGwpIHsKICAgICAgLy8gRXJyb3IgcmVjb3ZlcnkuCiAgICAgIGlmICh1cmkuc2NoZW1lID09IHVudHJhbnNsYXRhYmxlVXJpU2NoZW1lKSB7CiAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gdGVtcGxhdGVVbnRyYW5zbGF0YWJsZVVyaS53aXRoQXJndW1lbnRzKGxpYnJhcnkudXJpKTsKICAgICAgICBsaWJyYXJ5LmFkZFByb2JsZW1BdEFjY2Vzc29ycyhtZXNzYWdlKTsKICAgICAgICBieXRlcyA9IHN5bnRoZXNpemVTb3VyY2VGb3JNaXNzaW5nRmlsZShsaWJyYXJ5LnVyaSwgbnVsbCk7CiAgICAgIH0gZWxzZSBpZiAoIXVyaS5oYXNTY2hlbWUpIHsKICAgICAgICByZXR1cm4gaW50ZXJuYWxQcm9ibGVtKAogICAgICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVVyaU1pc3NpbmdTY2hlbWUud2l0aEFyZ3VtZW50cyh1cmkpLAogICAgICAgICAgICAtMSwKICAgICAgICAgICAgbGlicmFyeS51cmkpOwogICAgICB9IGVsc2UgaWYgKHVyaS5zY2hlbWUgPT0gU291cmNlTGlicmFyeUJ1aWxkZXIuTUFMRk9STUVEX1VSSV9TQ0hFTUUpIHsKICAgICAgICBieXRlcyA9IHN5bnRoZXNpemVTb3VyY2VGb3JNaXNzaW5nRmlsZShsaWJyYXJ5LnVyaSwgbnVsbCk7CiAgICAgIH0KICAgICAgaWYgKGJ5dGVzICE9IG51bGwpIHsKICAgICAgICBVaW50OExpc3QgemVyb1Rlcm1pbmF0ZWRCeXRlcyA9IG5ldyBVaW50OExpc3QoYnl0ZXMubGVuZ3RoICsgMSk7CiAgICAgICAgemVyb1Rlcm1pbmF0ZWRCeXRlcy5zZXRSYW5nZSgwLCBieXRlcy5sZW5ndGgsIGJ5dGVzKTsKICAgICAgICBieXRlcyA9IHplcm9UZXJtaW5hdGVkQnl0ZXM7CiAgICAgICAgc291cmNlQnl0ZXNbdXJpXSA9IGJ5dGVzOwogICAgICB9CiAgICB9CgogICAgaWYgKGJ5dGVzID09IG51bGwpIHsKICAgICAgLy8gSWYgaXQgaXNuJ3QgZm91bmQgaW4gdGhlIGNhY2hlLCByZWFkIHRoZSBmaWxlIHJlYWQgZnJvbSB0aGUgZmlsZQogICAgICAvLyBzeXN0ZW0uCiAgICAgIExpc3Q8aW50PiByYXdCeXRlczsKICAgICAgdHJ5IHsKICAgICAgICByYXdCeXRlcyA9IGF3YWl0IGZpbGVTeXN0ZW0uZW50aXR5Rm9yVXJpKHVyaSkucmVhZEFzQnl0ZXMoKTsKICAgICAgfSBvbiBGaWxlU3lzdGVtRXhjZXB0aW9uIGNhdGNoIChlKSB7CiAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gdGVtcGxhdGVDYW50UmVhZEZpbGUud2l0aEFyZ3VtZW50cyh1cmksIGUubWVzc2FnZSk7CiAgICAgICAgbGlicmFyeS5hZGRQcm9ibGVtQXRBY2Nlc3NvcnMobWVzc2FnZSk7CiAgICAgICAgcmF3Qnl0ZXMgPSBzeW50aGVzaXplU291cmNlRm9yTWlzc2luZ0ZpbGUobGlicmFyeS51cmksIG1lc3NhZ2UpOwogICAgICB9CiAgICAgIFVpbnQ4TGlzdCB6ZXJvVGVybWluYXRlZEJ5dGVzID0gbmV3IFVpbnQ4TGlzdChyYXdCeXRlcy5sZW5ndGggKyAxKTsKICAgICAgemVyb1Rlcm1pbmF0ZWRCeXRlcy5zZXRSYW5nZSgwLCByYXdCeXRlcy5sZW5ndGgsIHJhd0J5dGVzKTsKICAgICAgYnl0ZXMgPSB6ZXJvVGVybWluYXRlZEJ5dGVzOwogICAgICBzb3VyY2VCeXRlc1t1cmldID0gYnl0ZXM7CiAgICAgIGJ5dGVDb3VudCArPSByYXdCeXRlcy5sZW5ndGg7CiAgICB9CgogICAgU2Nhbm5lclJlc3VsdCByZXN1bHQgPSBzY2FuKGJ5dGVzLAogICAgICAgIGluY2x1ZGVDb21tZW50czogaW5jbHVkZUNvbW1lbnRzLAogICAgICAgIGNvbmZpZ3VyYXRpb246IG5ldyBTY2FubmVyQ29uZmlndXJhdGlvbigKICAgICAgICAgICAgZW5hYmxlVHJpcGxlU2hpZnQ6IHRhcmdldC5lbmFibGVUcmlwbGVTaGlmdCwKICAgICAgICAgICAgZW5hYmxlRXh0ZW5zaW9uTWV0aG9kczogdGFyZ2V0LmVuYWJsZUV4dGVuc2lvbk1ldGhvZHMsCiAgICAgICAgICAgIGVuYWJsZU5vbk51bGxhYmxlOiB0YXJnZXQuZW5hYmxlTm9uTnVsbGFibGUpLAogICAgICAgIGxhbmd1YWdlVmVyc2lvbkNoYW5nZWQ6IChfLCBMYW5ndWFnZVZlcnNpb25Ub2tlbiB2ZXJzaW9uKSB7CiAgICAgIGxpYnJhcnkuc2V0TGFuZ3VhZ2VWZXJzaW9uKHZlcnNpb24ubWFqb3IsIHZlcnNpb24ubWlub3IsCiAgICAgICAgICBvZmZzZXQ6IHZlcnNpb24ub2Zmc2V0LCBsZW5ndGg6IHZlcnNpb24ubGVuZ3RoLCBleHBsaWNpdDogdHJ1ZSk7CiAgICB9KTsKICAgIFRva2VuIHRva2VuID0gcmVzdWx0LnRva2VuczsKICAgIGlmICghc3VwcHJlc3NMZXhpY2FsRXJyb3JzKSB7CiAgICAgIExpc3Q8aW50PiBzb3VyY2UgPSBnZXRTb3VyY2UoYnl0ZXMpOwogICAgICBVcmkgaW1wb3J0VXJpID0gbGlicmFyeS51cmk7CiAgICAgIGlmIChsaWJyYXJ5LmlzUGF0Y2gpIHsKICAgICAgICAvLyBGb3IgcGF0Y2ggZmlsZXMgd2UgY3JlYXRlIGEgImZha2UiIGltcG9ydCB1cmkuCiAgICAgICAgLy8gV2UgY2Fubm90IHVzZSB0aGUgaW1wb3J0IHVyaSBmcm9tIHRoZSBwYXRjaGVkIGxpYnJhcnkgYmVjYXVzZQogICAgICAgIC8vIHNldmVyYWwgZGlmZmVyZW50IGZpbGVzIHdvdWxkIHRoZW4gaGF2ZSB0aGUgc2FtZSBpbXBvcnQgdXJpLAogICAgICAgIC8vIGFuZCB0aGUgVk0gZG9lcyBub3Qgc3VwcG9ydCB0aGF0LiBBbHNvLCB3aGF0IHdvdWxkLCBmb3IgaW5zdGFuY2UsCiAgICAgICAgLy8gc2V0dGluZyBhIGJyZWFrcG9pbnQgb24gbGluZSA0MiBvZiBzb21lIGltcG9ydCB1cmkgbWVhbiwgaWYgdGhlIHVyaQogICAgICAgIC8vIHJlcHJlc2VudGVkIHNldmVyYWwgZmlsZXM/CiAgICAgICAgTGlzdDxTdHJpbmc+IG5ld1BhdGhTZWdtZW50cyA9CiAgICAgICAgICAgIG5ldyBMaXN0PFN0cmluZz4uZnJvbShpbXBvcnRVcmkucGF0aFNlZ21lbnRzKTsKICAgICAgICBuZXdQYXRoU2VnbWVudHMuYWRkKGxpYnJhcnkuZmlsZVVyaS5wYXRoU2VnbWVudHMubGFzdCk7CiAgICAgICAgbmV3UGF0aFNlZ21lbnRzWzBdID0gIiR7bmV3UGF0aFNlZ21lbnRzWzBdfS1wYXRjaCI7CiAgICAgICAgaW1wb3J0VXJpID0gaW1wb3J0VXJpLnJlcGxhY2UocGF0aFNlZ21lbnRzOiBuZXdQYXRoU2VnbWVudHMpOwogICAgICB9CiAgICAgIHRhcmdldC5hZGRTb3VyY2VJbmZvcm1hdGlvbigKICAgICAgICAgIGltcG9ydFVyaSwgbGlicmFyeS5maWxlVXJpLCByZXN1bHQubGluZVN0YXJ0cywgc291cmNlKTsKICAgIH0KICAgIGxpYnJhcnkuaXNzdWVQb3N0cG9uZWRQcm9ibGVtcygpOwogICAgd2hpbGUgKHRva2VuIGlzIEVycm9yVG9rZW4pIHsKICAgICAgaWYgKCFzdXBwcmVzc0xleGljYWxFcnJvcnMpIHsKICAgICAgICBFcnJvclRva2VuIGVycm9yID0gdG9rZW47CiAgICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKGVycm9yLmFzc2VydGlvbk1lc3NhZ2UsIG9mZnNldEZvclRva2VuKHRva2VuKSwKICAgICAgICAgICAgbGVuZ3RoRm9yVG9rZW4odG9rZW4pLCB1cmkpOwogICAgICB9CiAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIExpc3Q8aW50PiBzeW50aGVzaXplU291cmNlRm9yTWlzc2luZ0ZpbGUoVXJpIHVyaSwgTWVzc2FnZSBtZXNzYWdlKSB7CiAgICBzd2l0Y2ggKCIkdXJpIikgewogICAgICBjYXNlICJkYXJ0OmNvcmUiOgogICAgICAgIHJldHVybiB1dGY4LmVuY29kZShkZWZhdWx0RGFydENvcmVTb3VyY2UpOwoKICAgICAgY2FzZSAiZGFydDphc3luYyI6CiAgICAgICAgcmV0dXJuIHV0ZjguZW5jb2RlKGRlZmF1bHREYXJ0QXN5bmNTb3VyY2UpOwoKICAgICAgY2FzZSAiZGFydDpjb2xsZWN0aW9uIjoKICAgICAgICByZXR1cm4gdXRmOC5lbmNvZGUoZGVmYXVsdERhcnRDb2xsZWN0aW9uU291cmNlKTsKCiAgICAgIGNhc2UgImRhcnQ6X2ludGVybmFsIjoKICAgICAgICByZXR1cm4gdXRmOC5lbmNvZGUoZGVmYXVsdERhcnRJbnRlcm5hbFNvdXJjZSk7CgogICAgICBjYXNlICJkYXJ0OnR5cGVkX2RhdGEiOgogICAgICAgIHJldHVybiB1dGY4LmVuY29kZShkZWZhdWx0RGFydFR5cGVkRGF0YVNvdXJjZSk7CgogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiB1dGY4LmVuY29kZShtZXNzYWdlID09IG51bGwgPyAiIiA6ICIvKiAke21lc3NhZ2UubWVzc2FnZX0gKi8iKTsKICAgIH0KICB9CgogIExpc3Q8aW50PiBnZXRTb3VyY2UoTGlzdDxpbnQ+IGJ5dGVzKSB7CiAgICAvLyBieXRlcyBpcyAwLXRlcm1pbmF0ZWQuIFdlIGRvbid0IHdhbnQgdGhhdCBpbmNsdWRlZC4KICAgIGlmIChieXRlcyBpcyBVaW50OExpc3QpIHsKICAgICAgcmV0dXJuIG5ldyBVaW50OExpc3QudmlldygKICAgICAgICAgIGJ5dGVzLmJ1ZmZlciwgYnl0ZXMub2Zmc2V0SW5CeXRlcywgYnl0ZXMubGVuZ3RoIC0gMSk7CiAgICB9CiAgICByZXR1cm4gYnl0ZXMuc3VibGlzdCgwLCBieXRlcy5sZW5ndGggLSAxKTsKICB9CgogIEZ1dHVyZTxOdWxsPiBidWlsZE91dGxpbmUoU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgYXN5bmMgewogICAgVG9rZW4gdG9rZW5zID0gYXdhaXQgdG9rZW5pemUobGlicmFyeSk7CiAgICBpZiAodG9rZW5zID09IG51bGwpIHJldHVybjsKICAgIE91dGxpbmVCdWlsZGVyIGxpc3RlbmVyID0gbmV3IE91dGxpbmVCdWlsZGVyKGxpYnJhcnkpOwogICAgbmV3IENsYXNzTWVtYmVyUGFyc2VyKGxpc3RlbmVyKS5wYXJzZVVuaXQodG9rZW5zKTsKICB9CgogIEZ1dHVyZTxOdWxsPiBidWlsZEJvZHkoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgYXN5bmMgewogICAgaWYgKGxpYnJhcnkgaXMgU291cmNlTGlicmFyeUJ1aWxkZXIpIHsKICAgICAgLy8gV2UgdG9rZW5pemUgc291cmNlIGZpbGVzIHR3aWNlIHRvIGtlZXAgbWVtb3J5IHVzYWdlIGxvdy4gVGhpcyBpcyB0aGUKICAgICAgLy8gc2Vjb25kIHRpbWUsIGFuZCB0aGUgZmlyc3QgdGltZSB3YXMgaW4gW2J1aWxkT3V0bGluZV0gYWJvdmUuIFNvIHRoaXMKICAgICAgLy8gdGltZSB3ZSBzdXBwcmVzcyBsZXhpY2FsIGVycm9ycy4KICAgICAgVG9rZW4gdG9rZW5zID0gYXdhaXQgdG9rZW5pemUobGlicmFyeSwgc3VwcHJlc3NMZXhpY2FsRXJyb3JzOiB0cnVlKTsKICAgICAgaWYgKHRva2VucyA9PSBudWxsKSByZXR1cm47CiAgICAgIERpZXRMaXN0ZW5lciBsaXN0ZW5lciA9IGNyZWF0ZURpZXRMaXN0ZW5lcihsaWJyYXJ5KTsKICAgICAgRGlldFBhcnNlciBwYXJzZXIgPSBuZXcgRGlldFBhcnNlcihsaXN0ZW5lcik7CiAgICAgIHBhcnNlci5wYXJzZVVuaXQodG9rZW5zKTsKICAgICAgZm9yIChTb3VyY2VMaWJyYXJ5QnVpbGRlciBwYXJ0IGluIGxpYnJhcnkucGFydHMpIHsKICAgICAgICBpZiAocGFydC5wYXJ0T2ZMaWJyYXJ5ICE9IGxpYnJhcnkpIHsKICAgICAgICAgIC8vIFBhcnQgd2FzIGluY2x1ZGVkIGluIG11bHRpcGxlIGxpYnJhcmllcy4gU2tpcCBpdCBoZXJlLgogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIFRva2VuIHRva2VucyA9IGF3YWl0IHRva2VuaXplKHBhcnQpOwogICAgICAgIGlmICh0b2tlbnMgIT0gbnVsbCkgewogICAgICAgICAgbGlzdGVuZXIudXJpID0gcGFydC5maWxlVXJpOwogICAgICAgICAgcGFyc2VyLnBhcnNlVW5pdCh0b2tlbnMpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgLy8gVE9ETyhqb2hubml3aW50aGVyLGplbnNqKTogSGFuZGxlIGV4cHJlc3Npb24gaW4gZXh0ZW5zaW9ucz8KICBGdXR1cmU8RXhwcmVzc2lvbj4gYnVpbGRFeHByZXNzaW9uKAogICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LAogICAgICBTdHJpbmcgZW5jbG9zaW5nQ2xhc3MsCiAgICAgIGJvb2wgaXNDbGFzc0luc3RhbmNlTWVtYmVyLAogICAgICBGdW5jdGlvbk5vZGUgcGFyYW1ldGVycykgYXN5bmMgewogICAgVG9rZW4gdG9rZW4gPSBhd2FpdCB0b2tlbml6ZShsaWJyYXJ5LCBzdXBwcmVzc0xleGljYWxFcnJvcnM6IGZhbHNlKTsKICAgIGlmICh0b2tlbiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIERpZXRMaXN0ZW5lciBkaWV0TGlzdGVuZXIgPSBjcmVhdGVEaWV0TGlzdGVuZXIobGlicmFyeSk7CgogICAgQnVpbGRlciBwYXJlbnQgPSBsaWJyYXJ5OwogICAgaWYgKGVuY2xvc2luZ0NsYXNzICE9IG51bGwpIHsKICAgICAgQnVpbGRlciBjbHMgPSBkaWV0TGlzdGVuZXIubWVtYmVyU2NvcGUubG9va3VwKGVuY2xvc2luZ0NsYXNzLCAtMSwgbnVsbCk7CiAgICAgIGlmIChjbHMgaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgICAgcGFyZW50ID0gY2xzOwogICAgICAgIGRpZXRMaXN0ZW5lcgogICAgICAgICAgLi5jdXJyZW50RGVjbGFyYXRpb24gPSBjbHMKICAgICAgICAgIC4ubWVtYmVyU2NvcGUgPSBjbHMuc2NvcGUuY29weVdpdGhQYXJlbnQoCiAgICAgICAgICAgICAgZGlldExpc3RlbmVyLm1lbWJlclNjb3BlLndpdGhUeXBlVmFyaWFibGVzKGNscy50eXBlVmFyaWFibGVzKSwKICAgICAgICAgICAgICAiZGVidWdFeHByZXNzaW9uIGluICRlbmNsb3NpbmdDbGFzcyIpOwogICAgICB9CiAgICB9CiAgICBQcm9jZWR1cmVCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgUHJvY2VkdXJlQnVpbGRlcihudWxsLCAwLCBudWxsLCAiZGVidWdFeHByIiwKICAgICAgICBudWxsLCBudWxsLCBQcm9jZWR1cmVLaW5kLk1ldGhvZCwgbGlicmFyeSwgMCwgMCwgLTEsIC0xKQogICAgICAuLnBhcmVudCA9IHBhcmVudDsKICAgIEJvZHlCdWlsZGVyIGxpc3RlbmVyID0gZGlldExpc3RlbmVyLmNyZWF0ZUxpc3RlbmVyKAogICAgICAgIGJ1aWxkZXIsIGRpZXRMaXN0ZW5lci5tZW1iZXJTY29wZSwKICAgICAgICBpc0RlY2xhcmF0aW9uSW5zdGFuY2VNZW1iZXI6IGlzQ2xhc3NJbnN0YW5jZU1lbWJlcik7CgogICAgcmV0dXJuIGxpc3RlbmVyLnBhcnNlU2luZ2xlRXhwcmVzc2lvbigKICAgICAgICBuZXcgUGFyc2VyKGxpc3RlbmVyKSwgdG9rZW4sIHBhcmFtZXRlcnMpOwogIH0KCiAgS2VybmVsVGFyZ2V0IGdldCB0YXJnZXQgPT4gc3VwZXIudGFyZ2V0OwoKICBEaWV0TGlzdGVuZXIgY3JlYXRlRGlldExpc3RlbmVyKFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgIHJldHVybiBuZXcgRGlldExpc3RlbmVyKGxpYnJhcnksIGhpZXJhcmNoeSwgY29yZVR5cGVzLCB0eXBlSW5mZXJlbmNlRW5naW5lKTsKICB9CgogIHZvaWQgcmVzb2x2ZVBhcnRzKCkgewogICAgTGlzdDxVcmk+IHBhcnRzID0gPFVyaT5bXTsKICAgIExpc3Q8U291cmNlTGlicmFyeUJ1aWxkZXI+IGxpYnJhcmllcyA9IDxTb3VyY2VMaWJyYXJ5QnVpbGRlcj5bXTsKICAgIGJ1aWxkZXJzLmZvckVhY2goKFVyaSB1cmksIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgICAgaWYgKGxpYnJhcnkubG9hZGVyID09IHRoaXMpIHsKICAgICAgICBpZiAobGlicmFyeS5pc1BhcnQpIHsKICAgICAgICAgIHBhcnRzLmFkZCh1cmkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBsaWJyYXJpZXMuYWRkKGxpYnJhcnkpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICBTZXQ8VXJpPiB1c2VkUGFydHMgPSBuZXcgU2V0PFVyaT4oKTsKICAgIGZvciAoU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSBpbiBsaWJyYXJpZXMpIHsKICAgICAgbGlicmFyeS5pbmNsdWRlUGFydHModXNlZFBhcnRzKTsKICAgIH0KICAgIGZvciAoVXJpIHVyaSBpbiBwYXJ0cykgewogICAgICBpZiAodXNlZFBhcnRzLmNvbnRhaW5zKHVyaSkpIHsKICAgICAgICBidWlsZGVycy5yZW1vdmUodXJpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBwYXJ0ID0gYnVpbGRlcnNbdXJpXTsKICAgICAgICBwYXJ0LmFkZFByb2JsZW0obWVzc2FnZVBhcnRPcnBoYW4sIDAsIDEsIHBhcnQuZmlsZVVyaSk7CiAgICAgICAgcGFydC52YWxpZGF0ZVBhcnQobnVsbCwgbnVsbCk7CiAgICAgIH0KICAgIH0KICAgIHRpY2tlci5sb2dNcygiUmVzb2x2ZWQgcGFydHMiKTsKCiAgICBidWlsZGVycy5mb3JFYWNoKChVcmkgdXJpLCBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICAgIGlmIChsaWJyYXJ5LmxvYWRlciA9PSB0aGlzKSB7CiAgICAgICAgbGlicmFyeS5hcHBseVBhdGNoZXMoKTsKICAgICAgfQogICAgfSk7CiAgICB0aWNrZXIubG9nTXMoIkFwcGxpZWQgcGF0Y2hlcyIpOwogIH0KCiAgdm9pZCBjb21wdXRlTGlicmFyeVNjb3BlcygpIHsKICAgIFNldDxMaWJyYXJ5QnVpbGRlcj4gZXhwb3J0ZXJzID0gbmV3IFNldDxMaWJyYXJ5QnVpbGRlcj4oKTsKICAgIFNldDxMaWJyYXJ5QnVpbGRlcj4gZXhwb3J0ZWVzID0gbmV3IFNldDxMaWJyYXJ5QnVpbGRlcj4oKTsKICAgIGJ1aWxkZXJzLmZvckVhY2goKFVyaSB1cmksIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgICAgaWYgKGxpYnJhcnkubG9hZGVyID09IHRoaXMpIHsKICAgICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBzb3VyY2VMaWJyYXJ5ID0gbGlicmFyeTsKICAgICAgICBzb3VyY2VMaWJyYXJ5LmJ1aWxkSW5pdGlhbFNjb3BlcygpOwogICAgICB9CiAgICAgIGlmIChsaWJyYXJ5LmV4cG9ydGVycy5pc05vdEVtcHR5KSB7CiAgICAgICAgZXhwb3J0ZWVzLmFkZChsaWJyYXJ5KTsKICAgICAgICBmb3IgKEV4cG9ydCBleHBvcnRlciBpbiBsaWJyYXJ5LmV4cG9ydGVycykgewogICAgICAgICAgZXhwb3J0ZXJzLmFkZChleHBvcnRlci5leHBvcnRlcik7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIFNldDxTb3VyY2VMaWJyYXJ5QnVpbGRlcj4gYm90aCA9IG5ldyBTZXQ8U291cmNlTGlicmFyeUJ1aWxkZXI+KCk7CiAgICBmb3IgKExpYnJhcnlCdWlsZGVyIGV4cG9ydGVkIGluIGV4cG9ydGVlcykgewogICAgICBpZiAoZXhwb3J0ZXJzLmNvbnRhaW5zKGV4cG9ydGVkKSkgewogICAgICAgIGJvdGguYWRkKGV4cG9ydGVkKTsKICAgICAgfQogICAgICBmb3IgKEV4cG9ydCBleHBvcnQgaW4gZXhwb3J0ZWQuZXhwb3J0ZXJzKSB7CiAgICAgICAgZXhwb3J0ZWQuZXhwb3J0U2NvcGUuZm9yRWFjaChleHBvcnQuYWRkVG9FeHBvcnRTY29wZSk7CiAgICAgIH0KICAgIH0KICAgIGJvb2wgd2FzQ2hhbmdlZCA9IGZhbHNlOwogICAgZG8gewogICAgICB3YXNDaGFuZ2VkID0gZmFsc2U7CiAgICAgIGZvciAoU291cmNlTGlicmFyeUJ1aWxkZXIgZXhwb3J0ZWQgaW4gYm90aCkgewogICAgICAgIGZvciAoRXhwb3J0IGV4cG9ydCBpbiBleHBvcnRlZC5leHBvcnRlcnMpIHsKICAgICAgICAgIGV4cG9ydGVkLmV4cG9ydFNjb3BlLmZvckVhY2goKFN0cmluZyBuYW1lLCBCdWlsZGVyIG1lbWJlcikgewogICAgICAgICAgICBpZiAoZXhwb3J0LmFkZFRvRXhwb3J0U2NvcGUobmFtZSwgbWVtYmVyKSkgewogICAgICAgICAgICAgIHdhc0NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gd2hpbGUgKHdhc0NoYW5nZWQpOwogICAgYnVpbGRlcnMuZm9yRWFjaCgoVXJpIHVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgICBpZiAobGlicmFyeS5sb2FkZXIgPT0gdGhpcykgewogICAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIHNvdXJjZUxpYnJhcnkgPSBsaWJyYXJ5OwogICAgICAgIHNvdXJjZUxpYnJhcnkuYWRkSW1wb3J0c1RvU2NvcGUoKTsKICAgICAgfQogICAgfSk7CiAgICBmb3IgKExpYnJhcnlCdWlsZGVyIGV4cG9ydGVlIGluIGV4cG9ydGVlcykgewogICAgICAvLyBUT0RPKGFoZSk6IENoYW5nZSBob3cgd2UgdHJhY2sgZXhwb3J0ZXJzLiBDdXJyZW50bHksIHdoZW4gYSBsaWJyYXJ5CiAgICAgIC8vIChleHBvcnRlcikgZXhwb3J0cyBhbm90aGVyIGxpYnJhcnkgKGV4cG9ydGVlKSB3ZSBhZGQgYSByZWZlcmVuY2UgdG8KICAgICAgLy8gZXhwb3J0ZXIgdG8gZXhwb3J0ZWUuIFRoaXMgY3JlYXRlcyBhIHJlZmVyZW5jZSBpbiB0aGUgd3JvbmcgZGlyZWN0aW9uCiAgICAgIC8vIGFuZCBjYW4gbGVhZCB0byBtZW1vcnkgbGVha3MuCiAgICAgIGV4cG9ydGVlLmV4cG9ydGVycy5jbGVhcigpOwogICAgfQogICAgdGlja2VyLmxvZ01zKCJDb21wdXRlZCBsaWJyYXJ5IHNjb3BlcyIpOwogICAgLy8gZGVidWdQcmludEV4cG9ydHMoKTsKICB9CgogIHZvaWQgZGVidWdQcmludEV4cG9ydHMoKSB7CiAgICAvLyBUT0RPKHNpZ211bmQpOiBzaG91bGQgYmUgYGNvdmFyaWFudCBTb3VyY2VMaWJyYXJ5QnVpbGRlcmAuCiAgICBidWlsZGVycy5mb3JFYWNoKChVcmkgdXJpLCBkeW5hbWljIGwpIHsKICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IGw7CiAgICAgIFNldDxCdWlsZGVyPiBtZW1iZXJzID0gbmV3IFNldDxCdWlsZGVyPigpOwogICAgICBJdGVyYXRvcjxCdWlsZGVyPiBpdGVyYXRvciA9IGxpYnJhcnkuaXRlcmF0b3I7CiAgICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgICAgbWVtYmVycy5hZGQoaXRlcmF0b3IuY3VycmVudCk7CiAgICAgIH0KICAgICAgTGlzdDxTdHJpbmc+IGV4cG9ydHMgPSA8U3RyaW5nPltdOwogICAgICBsaWJyYXJ5LmV4cG9ydFNjb3BlLmZvckVhY2goKFN0cmluZyBuYW1lLCBCdWlsZGVyIG1lbWJlcikgewogICAgICAgIHdoaWxlIChtZW1iZXIgIT0gbnVsbCkgewogICAgICAgICAgaWYgKCFtZW1iZXJzLmNvbnRhaW5zKG1lbWJlcikpIHsKICAgICAgICAgICAgZXhwb3J0cy5hZGQobmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgICBtZW1iZXIgPSBtZW1iZXIubmV4dDsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBpZiAoZXhwb3J0cy5pc05vdEVtcHR5KSB7CiAgICAgICAgcHJpbnQoIiR1cmkgZXhwb3J0cyAkZXhwb3J0cyIpOwogICAgICB9CiAgICB9KTsKICB9CgogIHZvaWQgcmVzb2x2ZVR5cGVzKCkgewogICAgaW50IHR5cGVDb3VudCA9IDA7CiAgICBidWlsZGVycy5mb3JFYWNoKChVcmkgdXJpLCBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICAgIGlmIChsaWJyYXJ5LmxvYWRlciA9PSB0aGlzKSB7CiAgICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgc291cmNlTGlicmFyeSA9IGxpYnJhcnk7CiAgICAgICAgdHlwZUNvdW50ICs9IHNvdXJjZUxpYnJhcnkucmVzb2x2ZVR5cGVzKCk7CiAgICAgIH0KICAgIH0pOwogICAgdGlja2VyLmxvZ01zKCJSZXNvbHZlZCAkdHlwZUNvdW50IHR5cGVzIik7CiAgfQoKICB2b2lkIGZpbmFsaXplSW5pdGlhbGl6aW5nRm9ybWFscygpIHsKICAgIGludCBmb3JtYWxDb3VudCA9IDA7CiAgICBidWlsZGVycy5mb3JFYWNoKChVcmkgdXJpLCBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICAgIGlmIChsaWJyYXJ5LmxvYWRlciA9PSB0aGlzKSB7CiAgICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgc291cmNlTGlicmFyeSA9IGxpYnJhcnk7CiAgICAgICAgZm9ybWFsQ291bnQgKz0gc291cmNlTGlicmFyeS5maW5hbGl6ZUluaXRpYWxpemluZ0Zvcm1hbHMoKTsKICAgICAgfQogICAgfSk7CiAgICB0aWNrZXIubG9nTXMoIkZpbmFsaXplZCAkZm9ybWFsQ291bnQgaW5pdGlhbGl6aW5nIGZvcm1hbHMiKTsKICB9CgogIHZvaWQgZmluaXNoRGVmZXJyZWRMb2FkVGVhcm9mZnMoKSB7CiAgICBpbnQgY291bnQgPSAwOwogICAgYnVpbGRlcnMuZm9yRWFjaCgoVXJpIHVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgICBpZiAobGlicmFyeS5sb2FkZXIgPT0gdGhpcykgewogICAgICAgIGNvdW50ICs9IGxpYnJhcnkuZmluaXNoRGVmZXJyZWRMb2FkVGVhcm9mZnMoKTsKICAgICAgfQogICAgfSk7CiAgICB0aWNrZXIubG9nTXMoIkZpbmlzaGVkIGRlZmVycmVkIGxvYWQgdGVhcm9mZnMgJGNvdW50Iik7CiAgfQoKICB2b2lkIGZpbmlzaE5vU3VjaE1ldGhvZEZvcndhcmRlcnMoKSB7CiAgICBpbnQgY291bnQgPSAwOwogICAgYnVpbGRlcnMuZm9yRWFjaCgoVXJpIHVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgICBpZiAobGlicmFyeS5sb2FkZXIgPT0gdGhpcykgewogICAgICAgIGNvdW50ICs9IGxpYnJhcnkuZmluaXNoRm9yd2FyZGVycygpOwogICAgICB9CiAgICB9KTsKICAgIHRpY2tlci5sb2dNcygiRmluaXNoZWQgZm9yd2FyZGVycyBmb3IgJGNvdW50IHByb2NlZHVyZXMiKTsKICB9CgogIHZvaWQgcmVzb2x2ZUNvbnN0cnVjdG9ycygpIHsKICAgIGludCBjb3VudCA9IDA7CiAgICBidWlsZGVycy5mb3JFYWNoKChVcmkgdXJpLCBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICAgIGlmIChsaWJyYXJ5LmxvYWRlciA9PSB0aGlzKSB7CiAgICAgICAgY291bnQgKz0gbGlicmFyeS5yZXNvbHZlQ29uc3RydWN0b3JzKG51bGwpOwogICAgICB9CiAgICB9KTsKICAgIHRpY2tlci5sb2dNcygiUmVzb2x2ZWQgJGNvdW50IGNvbnN0cnVjdG9ycyIpOwogIH0KCiAgdm9pZCBmaW5pc2hUeXBlVmFyaWFibGVzKENsYXNzQnVpbGRlciBvYmplY3QsIFR5cGVCdWlsZGVyIGR5bmFtaWNUeXBlKSB7CiAgICBpbnQgY291bnQgPSAwOwogICAgYnVpbGRlcnMuZm9yRWFjaCgoVXJpIHVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgICBpZiAobGlicmFyeS5sb2FkZXIgPT0gdGhpcykgewogICAgICAgIGNvdW50ICs9IGxpYnJhcnkuZmluaXNoVHlwZVZhcmlhYmxlcyhvYmplY3QsIGR5bmFtaWNUeXBlKTsKICAgICAgfQogICAgfSk7CiAgICB0aWNrZXIubG9nTXMoIlJlc29sdmVkICRjb3VudCB0eXBlLXZhcmlhYmxlIGJvdW5kcyIpOwogIH0KCiAgdm9pZCBjb21wdXRlRGVmYXVsdFR5cGVzKFR5cGVCdWlsZGVyIGR5bmFtaWNUeXBlLCBUeXBlQnVpbGRlciBib3R0b21UeXBlLAogICAgICBDbGFzc0J1aWxkZXIgb2JqZWN0Q2xhc3MpIHsKICAgIGludCBjb3VudCA9IDA7CiAgICBidWlsZGVycy5mb3JFYWNoKChVcmkgdXJpLCBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICAgIGlmIChsaWJyYXJ5LmxvYWRlciA9PSB0aGlzKSB7CiAgICAgICAgY291bnQgKz0KICAgICAgICAgICAgbGlicmFyeS5jb21wdXRlRGVmYXVsdFR5cGVzKGR5bmFtaWNUeXBlLCBib3R0b21UeXBlLCBvYmplY3RDbGFzcyk7CiAgICAgIH0KICAgIH0pOwogICAgdGlja2VyLmxvZ01zKCJDb21wdXRlZCBkZWZhdWx0IHR5cGVzIGZvciAkY291bnQgdHlwZSB2YXJpYWJsZXMiKTsKICB9CgogIHZvaWQgZmluaXNoTmF0aXZlTWV0aG9kcygpIHsKICAgIGludCBjb3VudCA9IDA7CiAgICBidWlsZGVycy5mb3JFYWNoKChVcmkgdXJpLCBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICAgIGlmIChsaWJyYXJ5LmxvYWRlciA9PSB0aGlzKSB7CiAgICAgICAgY291bnQgKz0gbGlicmFyeS5maW5pc2hOYXRpdmVNZXRob2RzKCk7CiAgICAgIH0KICAgIH0pOwogICAgdGlja2VyLmxvZ01zKCJGaW5pc2hlZCAkY291bnQgbmF0aXZlIG1ldGhvZHMiKTsKICB9CgogIHZvaWQgZmluaXNoUGF0Y2hNZXRob2RzKCkgewogICAgaW50IGNvdW50ID0gMDsKICAgIGJ1aWxkZXJzLmZvckVhY2goKFVyaSB1cmksIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgICAgaWYgKGxpYnJhcnkubG9hZGVyID09IHRoaXMpIHsKICAgICAgICBjb3VudCArPSBsaWJyYXJ5LmZpbmlzaFBhdGNoTWV0aG9kcygpOwogICAgICB9CiAgICB9KTsKICAgIHRpY2tlci5sb2dNcygiRmluaXNoZWQgJGNvdW50IHBhdGNoIG1ldGhvZHMiKTsKICB9CgogIC8vLyBDaGVjayB0aGF0IFtvYmplY3RDbGFzc10gaGFzIG5vIHN1cGVydHlwZXMuIFJlY292ZXIgYnkgcmVtb3ZpbmcgYW55CiAgLy8vIGZvdW5kLgogIHZvaWQgY2hlY2tPYmplY3RDbGFzc0hpZXJhcmNoeShDbGFzc0J1aWxkZXIgb2JqZWN0Q2xhc3MpIHsKICAgIGlmIChvYmplY3RDbGFzcyBpcyBTb3VyY2VDbGFzc0J1aWxkZXIgJiYKICAgICAgICBvYmplY3RDbGFzcy5saWJyYXJ5LmxvYWRlciA9PSB0aGlzKSB7CiAgICAgIGlmIChvYmplY3RDbGFzcy5zdXBlcnR5cGUgIT0gbnVsbCkgewogICAgICAgIG9iamVjdENsYXNzLnN1cGVydHlwZSA9IG51bGw7CiAgICAgICAgb2JqZWN0Q2xhc3MuYWRkUHJvYmxlbSgKICAgICAgICAgICAgbWVzc2FnZU9iamVjdEV4dGVuZHMsIG9iamVjdENsYXNzLmNoYXJPZmZzZXQsIG5vTGVuZ3RoKTsKICAgICAgfQogICAgICBpZiAob2JqZWN0Q2xhc3MuaW50ZXJmYWNlcyAhPSBudWxsKSB7CiAgICAgICAgb2JqZWN0Q2xhc3MuYWRkUHJvYmxlbSgKICAgICAgICAgICAgbWVzc2FnZU9iamVjdEltcGxlbWVudHMsIG9iamVjdENsYXNzLmNoYXJPZmZzZXQsIG5vTGVuZ3RoKTsKICAgICAgICBvYmplY3RDbGFzcy5pbnRlcmZhY2VzID0gbnVsbDsKICAgICAgfQogICAgICBpZiAob2JqZWN0Q2xhc3MubWl4ZWRJblR5cGUgIT0gbnVsbCkgewogICAgICAgIG9iamVjdENsYXNzLmFkZFByb2JsZW0oCiAgICAgICAgICAgIG1lc3NhZ2VPYmplY3RNaXhlc0luLCBvYmplY3RDbGFzcy5jaGFyT2Zmc2V0LCBub0xlbmd0aCk7CiAgICAgICAgb2JqZWN0Q2xhc3MubWl4ZWRJblR5cGUgPSBudWxsOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyBhIGxpc3Qgb2YgYWxsIGNsYXNzIGJ1aWxkZXJzIGRlY2xhcmVkIGluIHRoaXMgbG9hZGVyLiAgQXMgdGhlCiAgLy8vIGNsYXNzZXMgYXJlIHNvcnRlZCwgYW55IGN5Y2xlcyBpbiB0aGUgaGllcmFyY2h5IGFyZSByZXBvcnRlZCBhcwogIC8vLyBlcnJvcnMuIFJlY292ZXIgYnkgYnJlYWtpbmcgdGhlIGN5Y2xlcy4gVGhpcyBtZWFucyB0aGF0IHRoZSByZXN0IG9mIHRoZQogIC8vLyBwaXBlbGluZSAoaW5jbHVkaW5nIGJhY2tlbmRzKSBjYW4gYXNzdW1lIHRoYXQgdGhlcmUgYXJlIG5vIGhpZXJhcmNoeQogIC8vLyBjeWNsZXMuCiAgTGlzdDxTb3VyY2VDbGFzc0J1aWxkZXI+IGhhbmRsZUhpZXJhcmNoeUN5Y2xlcyhDbGFzc0J1aWxkZXIgb2JqZWN0Q2xhc3MpIHsKICAgIC8vIENvbXB1dGUgdGhlIGluaXRpYWwgd29yayBsaXN0IG9mIGFsbCBjbGFzc2VzIGRlY2xhcmVkIGluIHRoaXMgbG9hZGVyLgogICAgTGlzdDxTb3VyY2VDbGFzc0J1aWxkZXI+IHdvcmtMaXN0ID0gPFNvdXJjZUNsYXNzQnVpbGRlcj5bXTsKICAgIGZvciAoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSBpbiBidWlsZGVycy52YWx1ZXMpIHsKICAgICAgaWYgKGxpYnJhcnkubG9hZGVyID09IHRoaXMpIHsKICAgICAgICBJdGVyYXRvcjxCdWlsZGVyPiBtZW1iZXJzID0gbGlicmFyeS5pdGVyYXRvcjsKICAgICAgICB3aGlsZSAobWVtYmVycy5tb3ZlTmV4dCgpKSB7CiAgICAgICAgICBCdWlsZGVyIG1lbWJlciA9IG1lbWJlcnMuY3VycmVudDsKICAgICAgICAgIGlmIChtZW1iZXIgaXMgU291cmNlQ2xhc3NCdWlsZGVyKSB7CiAgICAgICAgICAgIHdvcmtMaXN0LmFkZChtZW1iZXIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIFNldDxDbGFzc0J1aWxkZXI+IGJsYWNrTGlzdGVkQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NCdWlsZGVyPigpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBibGFja2xpc3RlZENvcmVDbGFzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGJsYWNrTGlzdGVkQ2xhc3Nlcy5hZGQoY29yZUxpYnJhcnkKICAgICAgICAgIC5sb29rdXBMb2NhbE1lbWJlcihibGFja2xpc3RlZENvcmVDbGFzc2VzW2ldLCByZXF1aXJlZDogdHJ1ZSkpOwogICAgfQoKICAgIC8vIFNvcnQgdGhlIGNsYXNzZXMgdG9wb2xvZ2ljYWxseS4KICAgIFNldDxTb3VyY2VDbGFzc0J1aWxkZXI+IHRvcG9sb2dpY2FsbHlTb3J0ZWRDbGFzc2VzID0KICAgICAgICBuZXcgU2V0PFNvdXJjZUNsYXNzQnVpbGRlcj4oKTsKICAgIExpc3Q8U291cmNlQ2xhc3NCdWlsZGVyPiBwcmV2aW91c1dvcmtMaXN0OwogICAgZG8gewogICAgICBwcmV2aW91c1dvcmtMaXN0ID0gd29ya0xpc3Q7CiAgICAgIHdvcmtMaXN0ID0gPFNvdXJjZUNsYXNzQnVpbGRlcj5bXTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmV2aW91c1dvcmtMaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgU291cmNlQ2xhc3NCdWlsZGVyIGNscyA9IHByZXZpb3VzV29ya0xpc3RbaV07CiAgICAgICAgTGlzdDxCdWlsZGVyPiBkaXJlY3RTdXBlcnR5cGVzID0KICAgICAgICAgICAgY2xzLmNvbXB1dGVEaXJlY3RTdXBlcnR5cGVzKG9iamVjdENsYXNzKTsKICAgICAgICBib29sIGFsbFN1cGVydHlwZXNQcm9jZXNzZWQgPSB0cnVlOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGlyZWN0U3VwZXJ0eXBlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgQnVpbGRlciBzdXBlcnR5cGUgPSBkaXJlY3RTdXBlcnR5cGVzW2ldOwogICAgICAgICAgaWYgKHN1cGVydHlwZSBpcyBTb3VyY2VDbGFzc0J1aWxkZXIgJiYKICAgICAgICAgICAgICBzdXBlcnR5cGUubGlicmFyeS5sb2FkZXIgPT0gdGhpcyAmJgogICAgICAgICAgICAgICF0b3BvbG9naWNhbGx5U29ydGVkQ2xhc3Nlcy5jb250YWlucyhzdXBlcnR5cGUpKSB7CiAgICAgICAgICAgIGFsbFN1cGVydHlwZXNQcm9jZXNzZWQgPSBmYWxzZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChhbGxTdXBlcnR5cGVzUHJvY2Vzc2VkICYmIGNscy5pc1BhdGNoKSB7CiAgICAgICAgICBhbGxTdXBlcnR5cGVzUHJvY2Vzc2VkID0KICAgICAgICAgICAgICB0b3BvbG9naWNhbGx5U29ydGVkQ2xhc3Nlcy5jb250YWlucyhjbHMub3JpZ2luKTsKICAgICAgICB9CiAgICAgICAgaWYgKGFsbFN1cGVydHlwZXNQcm9jZXNzZWQpIHsKICAgICAgICAgIHRvcG9sb2dpY2FsbHlTb3J0ZWRDbGFzc2VzLmFkZChjbHMpOwogICAgICAgICAgY2hlY2tDbGFzc1N1cGVydHlwZXMoY2xzLCBkaXJlY3RTdXBlcnR5cGVzLCBibGFja0xpc3RlZENsYXNzZXMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB3b3JrTGlzdC5hZGQoY2xzKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gd2hpbGUgKHByZXZpb3VzV29ya0xpc3QubGVuZ3RoICE9IHdvcmtMaXN0Lmxlbmd0aCk7CiAgICBMaXN0PFNvdXJjZUNsYXNzQnVpbGRlcj4gY2xhc3NlcyA9IHRvcG9sb2dpY2FsbHlTb3J0ZWRDbGFzc2VzLnRvTGlzdCgpOwogICAgTGlzdDxTb3VyY2VDbGFzc0J1aWxkZXI+IGNsYXNzZXNXaXRoQ3ljbGVzID0gcHJldmlvdXNXb3JrTGlzdDsKCiAgICAvLyBPbmNlIHRoZSB3b3JrIGxpc3QgZG9lc24ndCBjaGFuZ2UgaW4gc2l6ZSwgaXQncyBlaXRoZXIgZW1wdHksIG9yCiAgICAvLyBjb250YWlucyBhbGwgY2xhc3NlcyB3aXRoIGN5Y2xlcy4KCiAgICAvLyBTb3J0IHRoZSBjbGFzc2VzIHRvIGVuc3VyZSBjb25zaXN0ZW50IG91dHB1dC4KICAgIGNsYXNzZXNXaXRoQ3ljbGVzLnNvcnQoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2xhc3Nlc1dpdGhDeWNsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgU291cmNlQ2xhc3NCdWlsZGVyIGNscyA9IGNsYXNzZXNXaXRoQ3ljbGVzW2ldOwogICAgICB0YXJnZXQuYnJlYWtDeWNsZShjbHMpOwogICAgICBjbGFzc2VzLmFkZChjbHMpOwogICAgICBjbHMuYWRkUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlQ3ljbGljQ2xhc3NIaWVyYXJjaHkud2l0aEFyZ3VtZW50cyhjbHMuZnVsbE5hbWVGb3JFcnJvcnMpLAogICAgICAgICAgY2xzLmNoYXJPZmZzZXQsCiAgICAgICAgICBub0xlbmd0aCk7CiAgICB9CgogICAgdGlja2VyLmxvZ01zKCJDaGVja2VkIGNsYXNzIGhpZXJhcmNoeSIpOwogICAgcmV0dXJuIGNsYXNzZXM7CiAgfQoKICB2b2lkIGNoZWNrQ2xhc3NTdXBlcnR5cGVzKFNvdXJjZUNsYXNzQnVpbGRlciBjbHMsCiAgICAgIExpc3Q8QnVpbGRlcj4gZGlyZWN0U3VwZXJ0eXBlcywgU2V0PENsYXNzQnVpbGRlcj4gYmxhY2tMaXN0ZWRDbGFzc2VzKSB7CiAgICAvLyBDaGVjayB0aGF0IHRoZSBkaXJlY3Qgc3VwZXJ0eXBlcyBhcmVuJ3QgYmxhY2stbGlzdGVkIG9yIGVudW1zLgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkaXJlY3RTdXBlcnR5cGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIEJ1aWxkZXIgc3VwZXJ0eXBlID0gZGlyZWN0U3VwZXJ0eXBlc1tpXTsKICAgICAgaWYgKHN1cGVydHlwZSBpcyBFbnVtQnVpbGRlcikgewogICAgICAgIGNscy5hZGRQcm9ibGVtKHRlbXBsYXRlRXh0ZW5kaW5nRW51bS53aXRoQXJndW1lbnRzKHN1cGVydHlwZS5uYW1lKSwKICAgICAgICAgICAgY2xzLmNoYXJPZmZzZXQsIG5vTGVuZ3RoKTsKICAgICAgfSBlbHNlIGlmICghY2xzLmxpYnJhcnkubWF5SW1wbGVtZW50UmVzdHJpY3RlZFR5cGVzICYmCiAgICAgICAgICBibGFja0xpc3RlZENsYXNzZXMuY29udGFpbnMoc3VwZXJ0eXBlKSkgewogICAgICAgIGNscy5hZGRQcm9ibGVtKAogICAgICAgICAgICB0ZW1wbGF0ZUV4dGVuZGluZ1Jlc3RyaWN0ZWQKICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKHN1cGVydHlwZS5mdWxsTmFtZUZvckVycm9ycyksCiAgICAgICAgICAgIGNscy5jaGFyT2Zmc2V0LAogICAgICAgICAgICBub0xlbmd0aCk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBDaGVjayB0aGF0IHRoZSBtaXhlZC1pbiB0eXBlIGNhbiBiZSB1c2VkIGFzIGEgbWl4aW4uCiAgICBmaW5hbCBUeXBlQnVpbGRlciBtaXhlZEluVHlwZSA9IGNscy5taXhlZEluVHlwZTsKICAgIGlmIChtaXhlZEluVHlwZSAhPSBudWxsKSB7CiAgICAgIGJvb2wgaXNDbGFzc0J1aWxkZXIgPSBmYWxzZTsKICAgICAgaWYgKG1peGVkSW5UeXBlIGlzIE5hbWVkVHlwZUJ1aWxkZXIpIHsKICAgICAgICBUeXBlRGVjbGFyYXRpb25CdWlsZGVyIGJ1aWxkZXIgPSBtaXhlZEluVHlwZS5kZWNsYXJhdGlvbjsKICAgICAgICBpZiAoYnVpbGRlciBpcyBDbGFzc0J1aWxkZXIpIHsKICAgICAgICAgIGlzQ2xhc3NCdWlsZGVyID0gdHJ1ZTsKICAgICAgICAgIGZvciAoQnVpbGRlciBjb25zdHJ1Y3RvciBpbiBidWlsZGVyLmNvbnN0cnVjdG9ycy5sb2NhbC52YWx1ZXMpIHsKICAgICAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmlzQ29uc3RydWN0b3IgJiYgIWNvbnN0cnVjdG9yLmlzU3ludGhldGljKSB7CiAgICAgICAgICAgICAgY2xzLmFkZFByb2JsZW0oCiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnMKICAgICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGJ1aWxkZXIuZnVsbE5hbWVGb3JFcnJvcnMpLAogICAgICAgICAgICAgICAgICBjbHMuY2hhck9mZnNldCwKICAgICAgICAgICAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IFsKICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUlsbGVnYWxNaXhpbkR1ZVRvQ29uc3RydWN0b3JzQ2F1c2UKICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoYnVpbGRlci5mdWxsTmFtZUZvckVycm9ycykKICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbihjb25zdHJ1Y3Rvci5maWxlVXJpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IuY2hhck9mZnNldCwgbm9MZW5ndGgpCiAgICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghaXNDbGFzc0J1aWxkZXIpIHsKICAgICAgICAvLyBUT0RPKGFoZSk6IEVpdGhlciB3ZSBuZWVkIHRvIGNoZWNrIHRoaXMgZm9yIHN1cGVyY2xhc3MgYW5kCiAgICAgICAgLy8gaW50ZXJmYWNlcywgb3IgdGhpcyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5IChvciBoYW5kbGVkIGVsc2V3aGVyZSkuCiAgICAgICAgY2xzLmFkZFByb2JsZW0oCiAgICAgICAgICAgIHRlbXBsYXRlSWxsZWdhbE1peGluLndpdGhBcmd1bWVudHMobWl4ZWRJblR5cGUuZnVsbE5hbWVGb3JFcnJvcnMpLAogICAgICAgICAgICBjbHMuY2hhck9mZnNldCwKICAgICAgICAgICAgbm9MZW5ndGgpOwogICAgICB9CiAgICB9CiAgfQoKICBMaXN0PFNvdXJjZUNsYXNzQnVpbGRlcj4gY2hlY2tTZW1hbnRpY3MoQ2xhc3NCdWlsZGVyIG9iamVjdENsYXNzKSB7CiAgICBjaGVja09iamVjdENsYXNzSGllcmFyY2h5KG9iamVjdENsYXNzKTsKICAgIExpc3Q8U291cmNlQ2xhc3NCdWlsZGVyPiBjbGFzc2VzID0gaGFuZGxlSGllcmFyY2h5Q3ljbGVzKG9iamVjdENsYXNzKTsKCiAgICAvLyBDaGVjayBpbXBvcnRzIGFuZCBleHBvcnRzIGZvciBkdXBsaWNhdGUgbmFtZXMuCiAgICAvLyBUaGlzIGlzIHJhdGhlciBzaWxseSwgZS5nLiBpdCBtYWtlcyBpbXBvcnRpbmcgJ2ZvbycgYW5kIGV4cG9ydGluZyBhbm90aGVyCiAgICAvLyAnZm9vJyBvay4KICAgIGJ1aWxkZXJzLmZvckVhY2goKFVyaSB1cmksIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgICAgaWYgKGxpYnJhcnkgaXMgU291cmNlTGlicmFyeUJ1aWxkZXIgJiYgbGlicmFyeS5sb2FkZXIgPT0gdGhpcykgewogICAgICAgIC8vIENoZWNrIGV4cG9ydHMuCiAgICAgICAgaWYgKGxpYnJhcnkuZXhwb3J0cy5pc05vdEVtcHR5KSB7CiAgICAgICAgICBNYXA8U3RyaW5nLCBMaXN0PEV4cG9ydD4+IG5hbWVUb0V4cG9ydHM7CiAgICAgICAgICBib29sIGVycm9yRXhwb3J0cyA9IGZhbHNlOwogICAgICAgICAgZm9yIChFeHBvcnQgZXhwb3J0IGluIGxpYnJhcnkuZXhwb3J0cykgewogICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGV4cG9ydC5leHBvcnRlZD8ubmFtZSA/PyAnJzsKICAgICAgICAgICAgaWYgKG5hbWUgIT0gJycpIHsKICAgICAgICAgICAgICBuYW1lVG9FeHBvcnRzID8/PSBuZXcgTWFwPFN0cmluZywgTGlzdDxFeHBvcnQ+PigpOwogICAgICAgICAgICAgIExpc3Q8RXhwb3J0PiBleHBvcnRzID0gbmFtZVRvRXhwb3J0c1tuYW1lXSA/Pz0gPEV4cG9ydD5bXTsKICAgICAgICAgICAgICBleHBvcnRzLmFkZChleHBvcnQpOwogICAgICAgICAgICAgIGlmIChleHBvcnRzWzBdLmV4cG9ydGVkICE9IGV4cG9ydC5leHBvcnRlZCkgZXJyb3JFeHBvcnRzID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGVycm9yRXhwb3J0cykgewogICAgICAgICAgICBmb3IgKFN0cmluZyBuYW1lIGluIG5hbWVUb0V4cG9ydHMua2V5cykgewogICAgICAgICAgICAgIExpc3Q8RXhwb3J0PiBleHBvcnRzID0gbmFtZVRvRXhwb3J0c1tuYW1lXTsKICAgICAgICAgICAgICBpZiAoZXhwb3J0cy5sZW5ndGggPCAyKSBjb250aW51ZTsKICAgICAgICAgICAgICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0ID0gPExvY2F0ZWRNZXNzYWdlPltdOwogICAgICAgICAgICAgIGZvciAoRXhwb3J0IGV4cG9ydCBpbiBleHBvcnRzLnNraXAoMSkpIHsKICAgICAgICAgICAgICAgIGNvbnRleHQuYWRkKHRlbXBsYXRlRHVwbGljYXRlZExpYnJhcnlFeHBvcnRDb250ZXh0CiAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMobmFtZSkKICAgICAgICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKHVyaSwgZXhwb3J0LmNoYXJPZmZzZXQsIG5vTGVuZ3RoKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgICAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkTGlicmFyeUV4cG9ydC53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgICAgICAgICBleHBvcnRzWzBdLmNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICAgIG5vTGVuZ3RoLAogICAgICAgICAgICAgICAgICB1cmksCiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBDaGVjayBpbXBvcnRzLgogICAgICAgIGlmIChsaWJyYXJ5LmltcG9ydHMuaXNOb3RFbXB0eSkgewogICAgICAgICAgTWFwPFN0cmluZywgTGlzdDxJbXBvcnQ+PiBuYW1lVG9JbXBvcnRzOwogICAgICAgICAgYm9vbCBlcnJvckltcG9ydHM7CiAgICAgICAgICBmb3IgKEltcG9ydCBpbXBvcnQgaW4gbGlicmFyeS5pbXBvcnRzKSB7CiAgICAgICAgICAgIFN0cmluZyBuYW1lID0gaW1wb3J0LmltcG9ydGVkPy5uYW1lID8/ICcnOwogICAgICAgICAgICBpZiAobmFtZSAhPSAnJykgewogICAgICAgICAgICAgIG5hbWVUb0ltcG9ydHMgPz89IG5ldyBNYXA8U3RyaW5nLCBMaXN0PEltcG9ydD4+KCk7CiAgICAgICAgICAgICAgTGlzdDxJbXBvcnQ+IGltcG9ydHMgPSBuYW1lVG9JbXBvcnRzW25hbWVdID8/PSA8SW1wb3J0PltdOwogICAgICAgICAgICAgIGltcG9ydHMuYWRkKGltcG9ydCk7CiAgICAgICAgICAgICAgaWYgKGltcG9ydHNbMF0uaW1wb3J0ZWQgIT0gaW1wb3J0LmltcG9ydGVkKSBlcnJvckltcG9ydHMgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZXJyb3JJbXBvcnRzICE9IG51bGwpIHsKICAgICAgICAgICAgZm9yIChTdHJpbmcgbmFtZSBpbiBuYW1lVG9JbXBvcnRzLmtleXMpIHsKICAgICAgICAgICAgICBMaXN0PEltcG9ydD4gaW1wb3J0cyA9IG5hbWVUb0ltcG9ydHNbbmFtZV07CiAgICAgICAgICAgICAgaWYgKGltcG9ydHMubGVuZ3RoIDwgMikgY29udGludWU7CiAgICAgICAgICAgICAgTGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dCA9IDxMb2NhdGVkTWVzc2FnZT5bXTsKICAgICAgICAgICAgICBmb3IgKEltcG9ydCBpbXBvcnQgaW4gaW1wb3J0cy5za2lwKDEpKSB7CiAgICAgICAgICAgICAgICBjb250ZXh0LmFkZCh0ZW1wbGF0ZUR1cGxpY2F0ZWRMaWJyYXJ5SW1wb3J0Q29udGV4dAogICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKG5hbWUpCiAgICAgICAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbih1cmksIGltcG9ydC5jaGFyT2Zmc2V0LCBub0xlbmd0aCkpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBsaWJyYXJ5LmFkZFByb2JsZW0oCiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZExpYnJhcnlJbXBvcnQud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgICAgICAgICAgaW1wb3J0c1swXS5jaGFyT2Zmc2V0LAogICAgICAgICAgICAgICAgICBub0xlbmd0aCwKICAgICAgICAgICAgICAgICAgdXJpLAogICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICB0aWNrZXIubG9nTXMoIkNoZWNrZWQgaW1wb3J0cyBhbmQgZXhwb3J0cyBmb3IgZHVwbGljYXRlIG5hbWVzIik7CiAgICByZXR1cm4gY2xhc3NlczsKICB9CgogIHZvaWQgYnVpbGRDb21wb25lbnQoKSB7CiAgICBidWlsZGVycy5mb3JFYWNoKChVcmkgdXJpLCBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICAgIGlmIChsaWJyYXJ5LmxvYWRlciA9PSB0aGlzKSB7CiAgICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgc291cmNlTGlicmFyeSA9IGxpYnJhcnk7CiAgICAgICAgTGlicmFyeSB0YXJnZXQgPSBzb3VyY2VMaWJyYXJ5LmJ1aWxkKGNvcmVMaWJyYXJ5KTsKICAgICAgICBpZiAoIWxpYnJhcnkuaXNQYXRjaCkgewogICAgICAgICAgbGlicmFyaWVzLmFkZCh0YXJnZXQpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICB0aWNrZXIubG9nTXMoIkJ1aWx0IGNvbXBvbmVudCIpOwogIH0KCiAgQ29tcG9uZW50IGNvbXB1dGVGdWxsQ29tcG9uZW50KCkgewogICAgU2V0PExpYnJhcnk+IGxpYnJhcmllcyA9IG5ldyBTZXQ8TGlicmFyeT4oKTsKICAgIExpc3Q8TGlicmFyeT4gd29ya0xpc3QgPSA8TGlicmFyeT5bXTsKICAgIGJ1aWxkZXJzLmZvckVhY2goKFVyaSB1cmksIExpYnJhcnlCdWlsZGVyIGxpYnJhcnlCdWlsZGVyKSB7CiAgICAgIGlmICghbGlicmFyeUJ1aWxkZXIuaXNQYXRjaCAmJgogICAgICAgICAgKGxpYnJhcnlCdWlsZGVyLmxvYWRlciA9PSB0aGlzIHx8CiAgICAgICAgICAgICAgbGlicmFyeUJ1aWxkZXIudXJpLnNjaGVtZSA9PSAiZGFydCIgfHwKICAgICAgICAgICAgICBsaWJyYXJ5QnVpbGRlciA9PSB0aGlzLmZpcnN0KSkgewogICAgICAgIGlmIChsaWJyYXJpZXMuYWRkKGxpYnJhcnlCdWlsZGVyLmxpYnJhcnkpKSB7CiAgICAgICAgICB3b3JrTGlzdC5hZGQobGlicmFyeUJ1aWxkZXIubGlicmFyeSk7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIHdoaWxlICh3b3JrTGlzdC5pc05vdEVtcHR5KSB7CiAgICAgIExpYnJhcnkgbGlicmFyeSA9IHdvcmtMaXN0LnJlbW92ZUxhc3QoKTsKICAgICAgZm9yIChMaWJyYXJ5RGVwZW5kZW5jeSBkZXBlbmRlbmN5IGluIGxpYnJhcnkuZGVwZW5kZW5jaWVzKSB7CiAgICAgICAgaWYgKGxpYnJhcmllcy5hZGQoZGVwZW5kZW5jeS50YXJnZXRMaWJyYXJ5KSkgewogICAgICAgICAgd29ya0xpc3QuYWRkKGRlcGVuZGVuY3kudGFyZ2V0TGlicmFyeSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IENvbXBvbmVudCgpLi5saWJyYXJpZXMuYWRkQWxsKGxpYnJhcmllcyk7CiAgfQoKICB2b2lkIGNvbXB1dGVIaWVyYXJjaHkoKSB7CiAgICBMaXN0PEFtYmlndW91c1R5cGVzUmVjb3JkPiBhbWJpZ3VvdXNUeXBlc1JlY29yZHMgPSBbXTsKICAgIEhhbmRsZUFtYmlndW91c1N1cGVydHlwZXMgb25BbWJpZ3VvdXNTdXBlcnR5cGVzID0KICAgICAgICAoQ2xhc3MgY2xzLCBTdXBlcnR5cGUgYSwgU3VwZXJ0eXBlIGIpIHsKICAgICAgaWYgKGFtYmlndW91c1R5cGVzUmVjb3JkcyAhPSBudWxsKSB7CiAgICAgICAgYW1iaWd1b3VzVHlwZXNSZWNvcmRzLmFkZChuZXcgQW1iaWd1b3VzVHlwZXNSZWNvcmQoY2xzLCBhLCBiKSk7CiAgICAgIH0KICAgIH07CiAgICBpZiAoaGllcmFyY2h5ID09IG51bGwpIHsKICAgICAgaGllcmFyY2h5ID0gbmV3IENsYXNzSGllcmFyY2h5KGNvbXB1dGVGdWxsQ29tcG9uZW50KCksCiAgICAgICAgICBvbkFtYmlndW91c1N1cGVydHlwZXM6IG9uQW1iaWd1b3VzU3VwZXJ0eXBlcyk7CiAgICB9IGVsc2UgewogICAgICBoaWVyYXJjaHkub25BbWJpZ3VvdXNTdXBlcnR5cGVzID0gb25BbWJpZ3VvdXNTdXBlcnR5cGVzOwogICAgICBDb21wb25lbnQgY29tcG9uZW50ID0gY29tcHV0ZUZ1bGxDb21wb25lbnQoKTsKICAgICAgaGllcmFyY2h5LmFwcGx5VHJlZUNoYW5nZXMoY29uc3QgW10sIGNvbXBvbmVudC5saWJyYXJpZXMsCiAgICAgICAgICByZWlzc3VlQW1iaWd1b3VzU3VwZXJ0eXBlc0ZvcjogY29tcG9uZW50KTsKICAgIH0KICAgIGZvciAoQW1iaWd1b3VzVHlwZXNSZWNvcmQgcmVjb3JkIGluIGFtYmlndW91c1R5cGVzUmVjb3JkcykgewogICAgICBoYW5kbGVBbWJpZ3VvdXNTdXBlcnR5cGVzKHJlY29yZC5jbHMsIHJlY29yZC5hLCByZWNvcmQuYik7CiAgICB9CiAgICBhbWJpZ3VvdXNUeXBlc1JlY29yZHMgPSBudWxsOwogICAgdGlja2VyLmxvZ01zKCJDb21wdXRlZCBjbGFzcyBoaWVyYXJjaHkiKTsKICB9CgogIHZvaWQgaGFuZGxlQW1iaWd1b3VzU3VwZXJ0eXBlcyhDbGFzcyBjbHMsIFN1cGVydHlwZSBhLCBTdXBlcnR5cGUgYikgewogICAgYWRkUHJvYmxlbSgKICAgICAgICB0ZW1wbGF0ZUFtYmlndW91c1N1cGVydHlwZXMud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgY2xzLm5hbWUsIGEuYXNJbnRlcmZhY2VUeXBlLCBiLmFzSW50ZXJmYWNlVHlwZSksCiAgICAgICAgY2xzLmZpbGVPZmZzZXQsCiAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgY2xzLmZpbGVVcmkpOwogIH0KCiAgdm9pZCBpZ25vcmVBbWJpZ3VvdXNTdXBlcnR5cGVzKENsYXNzIGNscywgU3VwZXJ0eXBlIGEsIFN1cGVydHlwZSBiKSB7fQoKICB2b2lkIGNvbXB1dGVDb3JlVHlwZXMoQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgY29yZVR5cGVzID0gbmV3IENvcmVUeXBlcyhjb21wb25lbnQpOwoKICAgIGZ1dHVyZU9mQm90dG9tID0gbmV3IEludGVyZmFjZVR5cGUoCiAgICAgICAgY29yZVR5cGVzLmZ1dHVyZUNsYXNzLCA8RGFydFR5cGU+W2NvbnN0IEJvdHRvbVR5cGUoKV0pOwogICAgaXRlcmFibGVPZkJvdHRvbSA9IG5ldyBJbnRlcmZhY2VUeXBlKAogICAgICAgIGNvcmVUeXBlcy5pdGVyYWJsZUNsYXNzLCA8RGFydFR5cGU+W2NvbnN0IEJvdHRvbVR5cGUoKV0pOwogICAgc3RyZWFtT2ZCb3R0b20gPSBuZXcgSW50ZXJmYWNlVHlwZSgKICAgICAgICBjb3JlVHlwZXMuc3RyZWFtQ2xhc3MsIDxEYXJ0VHlwZT5bY29uc3QgQm90dG9tVHlwZSgpXSk7CgogICAgdGlja2VyLmxvZ01zKCJDb21wdXRlZCBjb3JlIHR5cGVzIik7CiAgfQoKICB2b2lkIGNoZWNrU3VwZXJ0eXBlcyhMaXN0PFNvdXJjZUNsYXNzQnVpbGRlcj4gc291cmNlQ2xhc3NlcykgewogICAgZm9yIChTb3VyY2VDbGFzc0J1aWxkZXIgYnVpbGRlciBpbiBzb3VyY2VDbGFzc2VzKSB7CiAgICAgIGlmIChidWlsZGVyLmxpYnJhcnkubG9hZGVyID09IHRoaXMgJiYgIWJ1aWxkZXIuaXNQYXRjaCkgewogICAgICAgIGJ1aWxkZXIuY2hlY2tTdXBlcnR5cGVzKGNvcmVUeXBlcyk7CiAgICAgIH0KICAgIH0KICAgIHRpY2tlci5sb2dNcygiQ2hlY2tlZCBzdXBlcnR5cGVzIik7CiAgfQoKICB2b2lkIGNoZWNrQm91bmRzKCkgewogICAgaWYgKHRhcmdldC5sZWdhY3lNb2RlKSByZXR1cm47CgogICAgYnVpbGRlcnMuZm9yRWFjaCgoVXJpIHVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgICBpZiAobGlicmFyeSBpcyBTb3VyY2VMaWJyYXJ5QnVpbGRlcikgewogICAgICAgIGlmIChsaWJyYXJ5LmxvYWRlciA9PSB0aGlzKSB7CiAgICAgICAgICBsaWJyYXJ5CiAgICAgICAgICAgICAgLmNoZWNrQm91bmRzSW5PdXRsaW5lKHR5cGVJbmZlcmVuY2VFbmdpbmUudHlwZVNjaGVtYUVudmlyb25tZW50KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgdGlja2VyLmxvZ01zKCJDaGVja2VkIHR5cGUgYXJndW1lbnRzIG9mIHN1cGVycyBhZ2FpbnN0IHRoZSBib3VuZHMiKTsKICB9CgogIHZvaWQgY2hlY2tPdmVycmlkZXMoTGlzdDxTb3VyY2VDbGFzc0J1aWxkZXI+IHNvdXJjZUNsYXNzZXMpIHsKICAgIExpc3Q8RGVsYXllZE92ZXJyaWRlQ2hlY2s+IG92ZXJyaWRlQ2hlY2tzID0KICAgICAgICBidWlsZGVySGllcmFyY2h5Lm92ZXJyaWRlQ2hlY2tzLnRvTGlzdCgpOwogICAgYnVpbGRlckhpZXJhcmNoeS5vdmVycmlkZUNoZWNrcy5jbGVhcigpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvdmVycmlkZUNoZWNrcy5sZW5ndGg7IGkrKykgewogICAgICBvdmVycmlkZUNoZWNrc1tpXS5jaGVjayhidWlsZGVySGllcmFyY2h5KTsKICAgIH0KICAgIHRpY2tlci5sb2dNcygiQ2hlY2tlZCAke292ZXJyaWRlQ2hlY2tzLmxlbmd0aH0gb3ZlcnJpZGVzIik7CgogICAgdHlwZUluZmVyZW5jZUVuZ2luZT8uZmluaXNoVG9wTGV2ZWxJbml0aWFsaXppbmdGb3JtYWxzKCk7CiAgICB0aWNrZXIubG9nTXMoIkZpbmlzaGVkIGluaXRpYWxpemluZyBmb3JtYWxzIik7CiAgfQoKICB2b2lkIGNoZWNrQWJzdHJhY3RNZW1iZXJzKExpc3Q8U291cmNlQ2xhc3NCdWlsZGVyPiBzb3VyY2VDbGFzc2VzKSB7CiAgICBMaXN0PERlbGF5ZWRNZW1iZXI+IGRlbGF5ZWRNZW1iZXJDaGVja3MgPQogICAgICAgIGJ1aWxkZXJIaWVyYXJjaHkuZGVsYXllZE1lbWJlckNoZWNrcy50b0xpc3QoKTsKICAgIGJ1aWxkZXJIaWVyYXJjaHkuZGVsYXllZE1lbWJlckNoZWNrcy5jbGVhcigpOwogICAgU2V0PENsYXNzPiBjaGFuZ2VkQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3M+KCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlbGF5ZWRNZW1iZXJDaGVja3MubGVuZ3RoOyBpKyspIHsKICAgICAgZGVsYXllZE1lbWJlckNoZWNrc1tpXS5jaGVjayhidWlsZGVySGllcmFyY2h5KTsKICAgICAgY2hhbmdlZENsYXNzZXMuYWRkKGRlbGF5ZWRNZW1iZXJDaGVja3NbaV0ucGFyZW50LmNscyk7CiAgICB9CiAgICB0aWNrZXIubG9nTXMoCiAgICAgICAgIkNvbXB1dGVkICR7ZGVsYXllZE1lbWJlckNoZWNrcy5sZW5ndGh9IGNvbWJpbmVkIG1lbWJlciBzaWduYXR1cmVzIik7CgogICAgaGllcmFyY2h5LmFwcGx5TWVtYmVyQ2hhbmdlcyhjaGFuZ2VkQ2xhc3NlcywgZmluZERlc2NlbmRhbnRzOiBmYWxzZSk7CiAgICB0aWNrZXIKICAgICAgICAubG9nTXMoIlVwZGF0ZWQgJHtjaGFuZ2VkQ2xhc3Nlcy5sZW5ndGh9IGNsYXNzZXMgaW4ga2VybmVsIGhpZXJhcmNoeSIpOwogIH0KCiAgdm9pZCBjaGVja1JlZGlyZWN0aW5nRmFjdG9yaWVzKExpc3Q8U291cmNlQ2xhc3NCdWlsZGVyPiBzb3VyY2VDbGFzc2VzKSB7CiAgICAvLyBUT0RPKGFoZSk6IE1vdmUgdGhpcyB0byBbQ2xhc3NIaWVyYXJjaHlCdWlsZGVyXS4KICAgIGlmICh0YXJnZXQubGVnYWN5TW9kZSkgcmV0dXJuOwogICAgZm9yIChTb3VyY2VDbGFzc0J1aWxkZXIgYnVpbGRlciBpbiBzb3VyY2VDbGFzc2VzKSB7CiAgICAgIGlmIChidWlsZGVyLmxpYnJhcnkubG9hZGVyID09IHRoaXMgJiYgIWJ1aWxkZXIuaXNQYXRjaCkgewogICAgICAgIGJ1aWxkZXIuY2hlY2tSZWRpcmVjdGluZ0ZhY3RvcmllcygKICAgICAgICAgICAgdHlwZUluZmVyZW5jZUVuZ2luZS50eXBlU2NoZW1hRW52aXJvbm1lbnQpOwogICAgICB9CiAgICB9CiAgICB0aWNrZXIubG9nTXMoIkNoZWNrZWQgcmVkaXJlY3RpbmcgZmFjdG9yaWVzIik7CiAgfQoKICB2b2lkIGFkZE5vU3VjaE1ldGhvZEZvcndhcmRlcnMoTGlzdDxTb3VyY2VDbGFzc0J1aWxkZXI+IHNvdXJjZUNsYXNzZXMpIHsKICAgIC8vIFRPRE8oYWhlKTogTW92ZSB0aGlzIHRvIFtDbGFzc0hpZXJhcmNoeUJ1aWxkZXJdLgogICAgaWYgKCF0YXJnZXQuYmFja2VuZFRhcmdldC5lbmFibGVOb1N1Y2hNZXRob2RGb3J3YXJkZXJzKSByZXR1cm47CgogICAgTGlzdDxDbGFzcz4gY2hhbmdlZENsYXNzZXMgPSBuZXcgTGlzdDxDbGFzcz4oKTsKICAgIGZvciAoU291cmNlQ2xhc3NCdWlsZGVyIGJ1aWxkZXIgaW4gc291cmNlQ2xhc3NlcykgewogICAgICBpZiAoYnVpbGRlci5saWJyYXJ5LmxvYWRlciA9PSB0aGlzICYmICFidWlsZGVyLmlzUGF0Y2gpIHsKICAgICAgICBpZiAoYnVpbGRlci5hZGROb1N1Y2hNZXRob2RGb3J3YXJkZXJzKHRhcmdldCwgaGllcmFyY2h5KSkgewogICAgICAgICAgY2hhbmdlZENsYXNzZXMuYWRkKGJ1aWxkZXIuY2xzKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGhpZXJhcmNoeS5hcHBseU1lbWJlckNoYW5nZXMoY2hhbmdlZENsYXNzZXMsIGZpbmREZXNjZW5kYW50czogdHJ1ZSk7CiAgICB0aWNrZXIubG9nTXMoIkFkZGVkIG5vU3VjaE1ldGhvZCBmb3J3YXJkZXJzIik7CiAgfQoKICB2b2lkIGNoZWNrTWl4aW5zKExpc3Q8U291cmNlQ2xhc3NCdWlsZGVyPiBzb3VyY2VDbGFzc2VzKSB7CiAgICBmb3IgKFNvdXJjZUNsYXNzQnVpbGRlciBidWlsZGVyIGluIHNvdXJjZUNsYXNzZXMpIHsKICAgICAgaWYgKGJ1aWxkZXIubGlicmFyeS5sb2FkZXIgPT0gdGhpcyAmJiAhYnVpbGRlci5pc1BhdGNoKSB7CiAgICAgICAgaWYgKGJ1aWxkZXIuaXNNaXhpbkRlY2xhcmF0aW9uKSB7CiAgICAgICAgICBidWlsZGVyLmNoZWNrTWl4aW5EZWNsYXJhdGlvbigpOwogICAgICAgIH0KCiAgICAgICAgQ2xhc3MgbWl4ZWRJbkNsYXNzID0gYnVpbGRlci5jbHMubWl4ZWRJbkNsYXNzOwogICAgICAgIGlmIChtaXhlZEluQ2xhc3MgIT0gbnVsbCAmJiBtaXhlZEluQ2xhc3MuaXNNaXhpbkRlY2xhcmF0aW9uKSB7CiAgICAgICAgICBidWlsZGVyLmNoZWNrTWl4aW5BcHBsaWNhdGlvbihoaWVyYXJjaHkpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgdGlja2VyLmxvZ01zKCJDaGVja2VkIG1peGluIGRlY2xhcmF0aW9uIGFwcGxpY2F0aW9ucyIpOwogIH0KCiAgdm9pZCBidWlsZE91dGxpbmVFeHByZXNzaW9ucygpIHsKICAgIGJ1aWxkZXJzLmZvckVhY2goKFVyaSB1cmksIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgICAgaWYgKGxpYnJhcnkubG9hZGVyID09IHRoaXMpIHsKICAgICAgICBsaWJyYXJ5LmJ1aWxkT3V0bGluZUV4cHJlc3Npb25zKCk7CiAgICAgICAgSXRlcmF0b3I8QnVpbGRlcj4gaXRlcmF0b3IgPSBsaWJyYXJ5Lml0ZXJhdG9yOwogICAgICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgICAgICBCdWlsZGVyIGRlY2xhcmF0aW9uID0gaXRlcmF0b3IuY3VycmVudDsKICAgICAgICAgIGlmIChkZWNsYXJhdGlvbiBpcyBDbGFzc0J1aWxkZXIpIHsKICAgICAgICAgICAgZGVjbGFyYXRpb24uYnVpbGRPdXRsaW5lRXhwcmVzc2lvbnMobGlicmFyeSk7CiAgICAgICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIE1lbWJlckJ1aWxkZXIpIHsKICAgICAgICAgICAgZGVjbGFyYXRpb24uYnVpbGRPdXRsaW5lRXhwcmVzc2lvbnMobGlicmFyeSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICB9CgogIHZvaWQgYnVpbGRDbGFzc0hpZXJhcmNoeSgKICAgICAgTGlzdDxTb3VyY2VDbGFzc0J1aWxkZXI+IHNvdXJjZUNsYXNzZXMsIENsYXNzQnVpbGRlciBvYmplY3RDbGFzcykgewogICAgYnVpbGRlckhpZXJhcmNoeSA9IENsYXNzSGllcmFyY2h5QnVpbGRlci5idWlsZCgKICAgICAgICBvYmplY3RDbGFzcywgc291cmNlQ2xhc3NlcywgdGhpcywgY29yZVR5cGVzKTsKICAgIHR5cGVJbmZlcmVuY2VFbmdpbmU/LmhpZXJhcmNoeUJ1aWxkZXIgPSBidWlsZGVySGllcmFyY2h5OwogICAgdGlja2VyLmxvZ01zKCJCdWlsdCBjbGFzcyBoaWVyYXJjaHkiKTsKICB9CgogIHZvaWQgY3JlYXRlVHlwZUluZmVyZW5jZUVuZ2luZSgpIHsKICAgIGlmICh0YXJnZXQubGVnYWN5TW9kZSkgcmV0dXJuOwogICAgdHlwZUluZmVyZW5jZUVuZ2luZSA9IG5ldyBTaGFkb3dUeXBlSW5mZXJlbmNlRW5naW5lKGluc3RydW1lbnRhdGlvbik7CiAgfQoKICB2b2lkIHBlcmZvcm1Ub3BMZXZlbEluZmVyZW5jZShMaXN0PFNvdXJjZUNsYXNzQnVpbGRlcj4gc291cmNlQ2xhc3NlcykgewogICAgaWYgKHRhcmdldC5sZWdhY3lNb2RlKSByZXR1cm47CgogICAgLy8vIFRoZSBmaXJzdCBwaGFzZSBvZiB0b3AgbGV2ZWwgaW5pdGlhbGl6ZXIgaW5mZXJlbmNlLCB3aGljaCBjb25zaXN0cyBvZgogICAgLy8vIGNyZWF0aW5nIGtlcm5lbCBvYmplY3RzIGZvciBhbGwgZmllbGRzIGFuZCB0b3AgbGV2ZWwgdmFyaWFibGVzIHRoYXQKICAgIC8vLyBtaWdodCBiZSBzdWJqZWN0IHRvIHR5cGUgaW5mZXJlbmNlLCBhbmQgcmVjb3JkcyBkZXBlbmRlbmNpZXMgYmV0d2VlbgogICAgLy8vIHRoZW0uCiAgICB0eXBlSW5mZXJlbmNlRW5naW5lLnByZXBhcmVUb3BMZXZlbChjb3JlVHlwZXMsIGhpZXJhcmNoeSk7CiAgICBMaXN0PEZpZWxkQnVpbGRlcj4gYWxsSW1wbGljaXRseVR5cGVkRmllbGRzID0gPEZpZWxkQnVpbGRlcj5bXTsKICAgIGZvciAoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSBpbiBidWlsZGVycy52YWx1ZXMpIHsKICAgICAgaWYgKGxpYnJhcnkubG9hZGVyID09IHRoaXMpIHsKICAgICAgICBMaXN0PEZpZWxkQnVpbGRlcj4gaW1wbGljaXRseVR5cGVkRmllbGRzID0KICAgICAgICAgICAgbGlicmFyeS50YWtlSW1wbGljaXRseVR5cGVkRmllbGRzKCk7CiAgICAgICAgaWYgKGltcGxpY2l0bHlUeXBlZEZpZWxkcyAhPSBudWxsKSB7CiAgICAgICAgICBhbGxJbXBsaWNpdGx5VHlwZWRGaWVsZHMuYWRkQWxsKGltcGxpY2l0bHlUeXBlZEZpZWxkcyk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhbGxJbXBsaWNpdGx5VHlwZWRGaWVsZHMubGVuZ3RoOyBpKyspIHsKICAgICAgLy8gVE9ETyhhaGUpOiBUaGlzIGNhbiBjYXVzZSBhIGNyYXNoIGZvciBwYXJ0cyB0aGF0IGZhaWxlZCB0byBnZXQKICAgICAgLy8gaW5jbHVkZWQsIHNlZSBmb3IgZXhhbXBsZSwKICAgICAgLy8gdGVzdHMvc3RhbmRhbG9uZV8yL2lvL2h0dHBfY29va2llX2RhdGVfdGVzdC5kYXJ0LgogICAgICBhbGxJbXBsaWNpdGx5VHlwZWRGaWVsZHNbaV0uaW5mZXJUeXBlKCk7CiAgICB9CgogICAgdHlwZUluZmVyZW5jZUVuZ2luZS5pc1R5cGVJbmZlcmVuY2VQcmVwYXJlZCA9IHRydWU7CgogICAgLy8gU2luY2UgZmluYWxpemF0aW9uIG9mIGNvdmFyaWFuY2UgbWF5IGhhdmUgYWRkZWQgZm9yd2FyZGluZyBzdHVicywgd2UgbmVlZAogICAgLy8gdG8gcmVjb21wdXRlIHRoZSBjbGFzcyBoaWVyYXJjaHkgc28gdGhhdCBtZXRob2QgY29tcGlsYXRpb24gd2lsbCBwcm9wZXJseQogICAgLy8gdGFyZ2V0IHRob3NlIGZvcndhcmRpbmcgc3R1YnMuCiAgICBoaWVyYXJjaHkub25BbWJpZ3VvdXNTdXBlcnR5cGVzID0gaWdub3JlQW1iaWd1b3VzU3VwZXJ0eXBlczsKICAgIHRpY2tlci5sb2dNcygiUGVyZm9ybWVkIHRvcCBsZXZlbCBpbmZlcmVuY2UiKTsKICB9CgogIHZvaWQgdHJhbnNmb3JtUG9zdEluZmVyZW5jZSgKICAgICAgVHJlZU5vZGUgbm9kZSwgYm9vbCB0cmFuc2Zvcm1TZXRMaXRlcmFscywgYm9vbCB0cmFuc2Zvcm1Db2xsZWN0aW9ucykgewogICAgaWYgKHRyYW5zZm9ybUNvbGxlY3Rpb25zKSB7CiAgICAgIG5vZGUuYWNjZXB0KGNvbGxlY3Rpb25UcmFuc2Zvcm1lciA/Pz0gbmV3IENvbGxlY3Rpb25UcmFuc2Zvcm1lcih0aGlzKSk7CiAgICB9CiAgICBpZiAodHJhbnNmb3JtU2V0TGl0ZXJhbHMpIHsKICAgICAgbm9kZS5hY2NlcHQoc2V0TGl0ZXJhbFRyYW5zZm9ybWVyID8/PSBuZXcgU2V0TGl0ZXJhbFRyYW5zZm9ybWVyKHRoaXMpKTsKICAgIH0KICB9CgogIHZvaWQgdHJhbnNmb3JtTGlzdFBvc3RJbmZlcmVuY2UoTGlzdDxUcmVlTm9kZT4gbGlzdCwKICAgICAgYm9vbCB0cmFuc2Zvcm1TZXRMaXRlcmFscywgYm9vbCB0cmFuc2Zvcm1Db2xsZWN0aW9ucykgewogICAgaWYgKHRyYW5zZm9ybUNvbGxlY3Rpb25zKSB7CiAgICAgIENvbGxlY3Rpb25UcmFuc2Zvcm1lciB0cmFuc2Zvcm1lciA9CiAgICAgICAgICBjb2xsZWN0aW9uVHJhbnNmb3JtZXIgPz89IG5ldyBDb2xsZWN0aW9uVHJhbnNmb3JtZXIodGhpcyk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkgewogICAgICAgIGxpc3RbaV0gPSBsaXN0W2ldLmFjY2VwdCh0cmFuc2Zvcm1lcik7CiAgICAgIH0KICAgIH0KICAgIGlmICh0cmFuc2Zvcm1TZXRMaXRlcmFscykgewogICAgICBTZXRMaXRlcmFsVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIgPQogICAgICAgICAgc2V0TGl0ZXJhbFRyYW5zZm9ybWVyID8/PSBuZXcgU2V0TGl0ZXJhbFRyYW5zZm9ybWVyKHRoaXMpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHsKICAgICAgICBsaXN0W2ldID0gbGlzdFtpXS5hY2NlcHQodHJhbnNmb3JtZXIpOwogICAgICB9CiAgICB9CiAgfQoKICBFeHByZXNzaW9uIGluc3RhbnRpYXRlSW52b2NhdGlvbihFeHByZXNzaW9uIHJlY2VpdmVyLCBTdHJpbmcgbmFtZSwKICAgICAgQXJndW1lbnRzIGFyZ3VtZW50cywgaW50IG9mZnNldCwgYm9vbCBpc1N1cGVyKSB7CiAgICByZXR1cm4gdGFyZ2V0LmJhY2tlbmRUYXJnZXQuaW5zdGFudGlhdGVJbnZvY2F0aW9uKAogICAgICAgIGNvcmVUeXBlcywgcmVjZWl2ZXIsIG5hbWUsIGFyZ3VtZW50cywgb2Zmc2V0LCBpc1N1cGVyKTsKICB9CgogIEV4cHJlc3Npb24gaW5zdGFudGlhdGVOb1N1Y2hNZXRob2RFcnJvcigKICAgICAgRXhwcmVzc2lvbiByZWNlaXZlciwgU3RyaW5nIG5hbWUsIEFyZ3VtZW50cyBhcmd1bWVudHMsIGludCBvZmZzZXQsCiAgICAgIHtib29sIGlzTWV0aG9kOiBmYWxzZSwKICAgICAgYm9vbCBpc0dldHRlcjogZmFsc2UsCiAgICAgIGJvb2wgaXNTZXR0ZXI6IGZhbHNlLAogICAgICBib29sIGlzRmllbGQ6IGZhbHNlLAogICAgICBib29sIGlzTG9jYWxWYXJpYWJsZTogZmFsc2UsCiAgICAgIGJvb2wgaXNEeW5hbWljOiBmYWxzZSwKICAgICAgYm9vbCBpc1N1cGVyOiBmYWxzZSwKICAgICAgYm9vbCBpc1N0YXRpYzogZmFsc2UsCiAgICAgIGJvb2wgaXNDb25zdHJ1Y3RvcjogZmFsc2UsCiAgICAgIGJvb2wgaXNUb3BMZXZlbDogZmFsc2V9KSB7CiAgICByZXR1cm4gdGFyZ2V0LmJhY2tlbmRUYXJnZXQuaW5zdGFudGlhdGVOb1N1Y2hNZXRob2RFcnJvcigKICAgICAgICBjb3JlVHlwZXMsIHJlY2VpdmVyLCBuYW1lLCBhcmd1bWVudHMsIG9mZnNldCwKICAgICAgICBpc01ldGhvZDogaXNNZXRob2QsCiAgICAgICAgaXNHZXR0ZXI6IGlzR2V0dGVyLAogICAgICAgIGlzU2V0dGVyOiBpc1NldHRlciwKICAgICAgICBpc0ZpZWxkOiBpc0ZpZWxkLAogICAgICAgIGlzTG9jYWxWYXJpYWJsZTogaXNMb2NhbFZhcmlhYmxlLAogICAgICAgIGlzRHluYW1pYzogaXNEeW5hbWljLAogICAgICAgIGlzU3VwZXI6IGlzU3VwZXIsCiAgICAgICAgaXNTdGF0aWM6IGlzU3RhdGljLAogICAgICAgIGlzQ29uc3RydWN0b3I6IGlzQ29uc3RydWN0b3IsCiAgICAgICAgaXNUb3BMZXZlbDogaXNUb3BMZXZlbCk7CiAgfQoKICB2b2lkIHJlbGVhc2VBbmNpbGxhcnlSZXNvdXJjZXMoKSB7CiAgICBoaWVyYXJjaHkgPSBudWxsOwogICAgdHlwZUluZmVyZW5jZUVuZ2luZSA9IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc0J1aWxkZXIgY29tcHV0ZUNsYXNzQnVpbGRlckZyb21UYXJnZXRDbGFzcyhDbGFzcyBjbHMpIHsKICAgIExpYnJhcnkga2VybmVsTGlicmFyeSA9IGNscy5lbmNsb3NpbmdMaWJyYXJ5OwogICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IGJ1aWxkZXJzW2tlcm5lbExpYnJhcnkuaW1wb3J0VXJpXTsKICAgIGlmIChsaWJyYXJ5ID09IG51bGwpIHsKICAgICAgcmV0dXJuIHRhcmdldC5kaWxsVGFyZ2V0LmxvYWRlci5jb21wdXRlQ2xhc3NCdWlsZGVyRnJvbVRhcmdldENsYXNzKGNscyk7CiAgICB9CiAgICByZXR1cm4gbGlicmFyeS5sb29rdXBMb2NhbE1lbWJlcihjbHMubmFtZSwgcmVxdWlyZWQ6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUJ1aWxkZXIgY29tcHV0ZVR5cGVCdWlsZGVyKERhcnRUeXBlIHR5cGUpIHsKICAgIHJldHVybiB0eXBlLmFjY2VwdChuZXcgVHlwZUJ1aWxkZXJDb21wdXRlcih0aGlzKSk7CiAgfQoKICBCb2R5QnVpbGRlciBjcmVhdGVCb2R5QnVpbGRlckZvckZpZWxkKAogICAgICBGaWVsZEJ1aWxkZXIgZmllbGQsIFR5cGVJbmZlcnJlciB0eXBlSW5mZXJyZXIpIHsKICAgIHJldHVybiBuZXcgQm9keUJ1aWxkZXIuZm9yRmllbGQoZmllbGQsIHR5cGVJbmZlcnJlcik7CiAgfQp9CgovLy8gQSBtaW5pbWFsIGltcGxlbWVudGF0aW9uIG9mIGRhcnQ6Y29yZSB0aGF0IGlzIHN1ZmZpY2llbnQgdG8gY3JlYXRlIGFuCi8vLyBpbnN0YW5jZSBvZiBbQ29yZVR5cGVzXSBhbmQgY29tcGlsZSBhIHByb2dyYW0uCmNvbnN0IFN0cmluZyBkZWZhdWx0RGFydENvcmVTb3VyY2UgPSAiIiIKaW1wb3J0ICdkYXJ0Ol9pbnRlcm5hbCc7CmltcG9ydCAnZGFydDphc3luYyc7CgpleHBvcnQgJ2RhcnQ6YXN5bmMnIHNob3cgRnV0dXJlLCBTdHJlYW07CgpwcmludChvYmplY3QpIHt9CgpjbGFzcyBJdGVyYXRvciB7fQoKY2xhc3MgSXRlcmFibGUge30KCmNsYXNzIExpc3QgZXh0ZW5kcyBJdGVyYWJsZSB7CiAgZmFjdG9yeSBMaXN0LnVubW9kaWZpYWJsZShlbGVtZW50cykgPT4gbnVsbDsKfQoKY2xhc3MgTWFwIGV4dGVuZHMgSXRlcmFibGUgewogIGZhY3RvcnkgTWFwLnVubW9kaWZpYWJsZShvdGhlcikgPT4gbnVsbDsKfQoKY2xhc3MgTm9TdWNoTWV0aG9kRXJyb3IgewogIE5vU3VjaE1ldGhvZEVycm9yLndpdGhJbnZvY2F0aW9uKHJlY2VpdmVyLCBpbnZvY2F0aW9uKTsKfQoKY2xhc3MgTnVsbCB7fQoKY2xhc3MgT2JqZWN0IHsKICBub1N1Y2hNZXRob2QoaW52b2NhdGlvbikgPT4gbnVsbDsKfQoKY2xhc3MgU3RyaW5nIHt9CgpjbGFzcyBTeW1ib2wge30KCmNsYXNzIFNldCB7fQoKY2xhc3MgVHlwZSB7fQoKY2xhc3MgX0ludm9jYXRpb25NaXJyb3IgewogIF9JbnZvY2F0aW9uTWlycm9yLl93aXRoVHlwZShfbWVtYmVyTmFtZSwgX3R5cGUsIF90eXBlQXJndW1lbnRzLAogICAgICBfcG9zaXRpb25hbEFyZ3VtZW50cywgX25hbWVkQXJndW1lbnRzKTsKfQoKY2xhc3MgYm9vbCB7fQoKY2xhc3MgZG91YmxlIGV4dGVuZHMgbnVtIHt9CgpjbGFzcyBpbnQgZXh0ZW5kcyBudW0ge30KCmNsYXNzIG51bSB7fQoKY2xhc3MgX1N5bmNJdGVyYWJsZSB7fQoKY2xhc3MgX1N5bmNJdGVyYXRvciB7CiAgdmFyIF9jdXJyZW50OwogIHZhciBfeWllbGRFYWNoSXRlcmFibGU7Cn0KCmNsYXNzIEZ1bmN0aW9uIHt9CiIiIjsKCi8vLyBBIG1pbmltYWwgaW1wbGVtZW50YXRpb24gb2YgZGFydDphc3luYyB0aGF0IGlzIHN1ZmZpY2llbnQgdG8gY3JlYXRlIGFuCi8vLyBpbnN0YW5jZSBvZiBbQ29yZVR5cGVzXSBhbmQgY29tcGlsZSBwcm9ncmFtLgpjb25zdCBTdHJpbmcgZGVmYXVsdERhcnRBc3luY1NvdXJjZSA9ICIiIgpfYXN5bmNFcnJvcldyYXBwZXJIZWxwZXIoY29udGludWF0aW9uKSB7fQoKX2FzeW5jU3RhY2tUcmFjZUhlbHBlcihhc3luY19vcCkge30KCl9hc3luY1RoZW5XcmFwcGVySGVscGVyKGNvbnRpbnVhdGlvbikge30KCl9hd2FpdEhlbHBlcihvYmplY3QsIHRoZW5DYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgYXdhaXRlcikge30KCl9jb21wbGV0ZU9uQXN5bmNSZXR1cm4oY29tcGxldGVyLCB2YWx1ZSkge30KCmNsYXNzIF9Bc3luY1N0YXJTdHJlYW1Db250cm9sbGVyIHsKICBhZGQoZXZlbnQpIHt9CgogIGFkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKSB7fQoKICBhZGRTdHJlYW0oc3RyZWFtKSB7fQoKICBjbG9zZSgpIHt9CgogIGdldCBzdHJlYW0gPT4gbnVsbDsKfQoKY2xhc3MgQ29tcGxldGVyIHsKICBmYWN0b3J5IENvbXBsZXRlci5zeW5jKCkgPT4gbnVsbDsKCiAgZ2V0IGZ1dHVyZTsKCiAgY29tcGxldGUoW3ZhbHVlXSk7CgogIGNvbXBsZXRlRXJyb3IoZXJyb3IsIFtzdGFja1RyYWNlXSk7Cn0KCmNsYXNzIEZ1dHVyZSB7CiAgZmFjdG9yeSBGdXR1cmUubWljcm90YXNrKGNvbXB1dGF0aW9uKSA9PiBudWxsOwp9CgpjbGFzcyBGdXR1cmVPciB7Cn0KCmNsYXNzIF9Bc3luY0F3YWl0Q29tcGxldGVyIGltcGxlbWVudHMgQ29tcGxldGVyIHsKICBnZXQgZnV0dXJlID0+IG51bGw7CgogIGNvbXBsZXRlKFt2YWx1ZV0pIHt9CgogIGNvbXBsZXRlRXJyb3IoZXJyb3IsIFtzdGFja1RyYWNlXSkge30KfQoKY2xhc3MgU3RyZWFtIHt9CgpjbGFzcyBfU3RyZWFtSXRlcmF0b3IgewogIGdldCBjdXJyZW50ID0+IG51bGw7CgogIG1vdmVOZXh0KCkge30KCiAgY2FuY2VsKCkge30KfQoiIiI7CgovLy8gQSBtaW5pbWFsIGltcGxlbWVudGF0aW9uIG9mIGRhcnQ6Y29sbGVjdGlvbiB0aGF0IGlzIHN1ZmZpY2llbnQgdG8gY3JlYXRlIGFuCi8vLyBpbnN0YW5jZSBvZiBbQ29yZVR5cGVzXSBhbmQgY29tcGlsZSBwcm9ncmFtLgpjb25zdCBTdHJpbmcgZGVmYXVsdERhcnRDb2xsZWN0aW9uU291cmNlID0gIiIiCmNsYXNzIF9Vbm1vZGlmaWFibGVTZXQgewogIGZpbmFsIE1hcCBfbWFwOwogIGNvbnN0IF9Vbm1vZGlmaWFibGVTZXQodGhpcy5fbWFwKTsKfQoiIiI7CgovLy8gQSBtaW5pbWFsIGltcGxlbWVudGF0aW9uIG9mIGRhcnQ6X2ludGVybmFsIHRoYXQgaXMgc3VmZmljaWVudCB0byBjcmVhdGUg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KioBJAEpAT4BLAEjEAEhARcBDQEWAgESJAEOARUBJgIBDzECARECATIWARcBKAIBEAEYFwEQAQ4CBQFQMS8ZEiUCBQFPMS0PHQIFAVAxLg8lIiMCBQEdExUVATgCATVwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc291cmNlL3NvdXJjZV9sb2FkZXIuZGFydENzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL2NvbnN0YW50X2V2YWx1YXRvci5kYXJ0wAFBxC8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gVGhpcyBsaWJyYXJ5IGltcGxlbWVudHMgYSBrZXJuZWwya2VybmVsIGNvbnN0YW50IGV2YWx1YXRpb24gdHJhbnNmb3JtYXRpb24uCi8vLwovLy8gRXZlbiB0aG91Z2ggaXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgZnJvbnRlbmQgZG9lcyBub3QgZW1pdCBrZXJuZWwgQVNUIHdoaWNoCi8vLyBjb250YWlucyBjb21waWxlLXRpbWUgZXJyb3JzLCB0aGlzIHRyYW5zZm9ybWF0aW9uIHN0aWxsIHBlcmZvcm1zIHNvbWUKLy8vIHZhbGlkYXRpb24gYW5kIHRocm93cyBhIFtDb25zdGFudEV2YWx1YXRpb25FcnJvcl0gaWYgdGhlcmUgd2FzIGEKLy8vIGNvbXBpbGUtdGltZSBlcnJvcnMuCi8vLwovLy8gRHVlIHRvIHRoZSBsYWNrIGluZm9ybWF0aW9uIHdoaWNoIGlzIGlzIG9ubHkgYXZhaWxhYmxlIGluIHRoZSBmcm9udC1lbmQsCi8vLyB0aGlzIHZhbGlkYXRpb24gaXMgaW5jb21wbGV0ZSAoZS5nLiB3aGV0aGVyIGFuIGludGVnZXIgbGl0ZXJhbCB1c2VkIHRoZQovLy8gaGV4YWRlY2ltYWwgc3ludGF4IG9yIG5vdCkuCi8vLwovLy8gRnVydGhlcm1vcmUgZHVlIHRvIHRoZSBsb3dlcmluZyBvZiBjZXJ0YWluIGNvbnN0cnVjdHMgaW4gdGhlIGZyb250LWVuZAovLy8gKGUuZy4gJz8/Jykgd2UgbmVlZCB0byBzdXBwb3J0IGEgc3VwZXItc2V0IG9mIHRoZSBub3JtYWwgY29uc3RhbnQgZXhwcmVzc2lvbgovLy8gbGFuZ3VhZ2UuICBJc3N1ZShodHRwOi8vZGFydGJ1Zy5jb20vMzE3OTkpCmxpYnJhcnkgZmFzdGEuY29uc3RhbnRfZXZhbHVhdG9yOwoKaW1wb3J0ICdkYXJ0OmNvcmUnIGhpZGUgTWFwRW50cnk7CgppbXBvcnQgJ2RhcnQ6aW8nIGFzIGlvOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCc7CmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2Nsb25lLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NvcmVfdHlwZXMuZGFydCc7CmltcG9ydCAncGFja2FnZTprZXJuZWwva2VybmVsLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnQnOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90YXJnZXQvdGFyZ2V0cy5kYXJ0JzsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cKICAgICAgICBMb2NhdGVkTWVzc2FnZSwKICAgICAgICBNZXNzYWdlLAogICAgICAgIG1lc3NhZ2VDb25zdEV2YWxDaXJjdWxhcml0eSwKICAgICAgICBtZXNzYWdlQ29uc3RFdmFsQ29udGV4dCwKICAgICAgICBtZXNzYWdlQ29uc3RFdmFsRmFpbGVkQXNzZXJ0aW9uLAogICAgICAgIG1lc3NhZ2VDb25zdEV2YWxOb3RMaXN0T3JTZXRJblNwcmVhZCwKICAgICAgICBtZXNzYWdlQ29uc3RFdmFsTm90TWFwSW5TcHJlYWQsCiAgICAgICAgbWVzc2FnZUNvbnN0RXZhbE51bGxWYWx1ZSwKICAgICAgICBtZXNzYWdlQ29uc3RFdmFsU3RhcnRpbmdQb2ludCwKICAgICAgICBtZXNzYWdlQ29uc3RFdmFsVW5ldmFsdWF0ZWQsCiAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxEZWZlcnJlZExpYnJhcnksCiAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxEdXBsaWNhdGVFbGVtZW50LAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsRHVwbGljYXRlS2V5LAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsRWxlbWVudEltcGxlbWVudHNFcXVhbCwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEZhaWxlZEFzc2VydGlvbldpdGhNZXNzYWdlLAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsRnJlZVR5cGVQYXJhbWV0ZXIsCiAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkVHlwZSwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRCaW5hcnlPcGVyYW5kVHlwZSwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRFcXVhbHNPcGVyYW5kVHlwZSwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRNZXRob2RJbnZvY2F0aW9uLAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFByb3BlcnR5R2V0LAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFN0YXRpY0ludm9jYXRpb24sCiAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkU3RyaW5nSW50ZXJwb2xhdGlvbk9wZXJhbmQsCiAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkU3ltYm9sTmFtZSwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEtleUltcGxlbWVudHNFcXVhbCwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbE5lZ2F0aXZlU2hpZnQsCiAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxOb25Db25zdGFudExpdGVyYWwsCiAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxOb25Db25zdGFudFZhcmlhYmxlR2V0LAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsWmVyb0Rpdmlzb3I7CgpwYXJ0ICdjb25zdGFudF9jb2xsZWN0aW9uX2J1aWxkZXJzLmRhcnQnOwoKQ29tcG9uZW50IHRyYW5zZm9ybUNvbXBvbmVudChDb21wb25lbnQgY29tcG9uZW50LCBDb25zdGFudHNCYWNrZW5kIGJhY2tlbmQsCiAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50RGVmaW5lcywgRXJyb3JSZXBvcnRlciBlcnJvclJlcG9ydGVyLAogICAge2Jvb2wga2VlcEZpZWxkczogdHJ1ZSwKICAgIGJvb2wgZXZhbHVhdGVBbm5vdGF0aW9uczogdHJ1ZSwKICAgIGJvb2wgZGVzdWdhclNldHM6IGZhbHNlLAogICAgYm9vbCBlcnJvck9uVW5ldmFsdWF0ZWRDb25zdGFudDogZmFsc2UsCiAgICBDb3JlVHlwZXMgY29yZVR5cGVzLAogICAgQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5fSkgewogIGNvcmVUeXBlcyA/Pz0gbmV3IENvcmVUeXBlcyhjb21wb25lbnQpOwogIGhpZXJhcmNoeSA/Pz0gbmV3IENsYXNzSGllcmFyY2h5KGNvbXBvbmVudCk7CgogIGZpbmFsIFR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQgPQogICAgICBuZXcgVHlwZUVudmlyb25tZW50KGNvcmVUeXBlcywgaGllcmFyY2h5KTsKCiAgdHJhbnNmb3JtTGlicmFyaWVzKGNvbXBvbmVudC5saWJyYXJpZXMsIGJhY2tlbmQsIGVudmlyb25tZW50RGVmaW5lcywKICAgICAgdHlwZUVudmlyb25tZW50LCBlcnJvclJlcG9ydGVyLAogICAgICBrZWVwRmllbGRzOiBrZWVwRmllbGRzLAogICAgICBkZXN1Z2FyU2V0czogZGVzdWdhclNldHMsCiAgICAgIGVycm9yT25VbmV2YWx1YXRlZENvbnN0YW50OiBlcnJvck9uVW5ldmFsdWF0ZWRDb25zdGFudCwKICAgICAgZXZhbHVhdGVBbm5vdGF0aW9uczogZXZhbHVhdGVBbm5vdGF0aW9ucyk7CiAgcmV0dXJuIGNvbXBvbmVudDsKfQoKdm9pZCB0cmFuc2Zvcm1MaWJyYXJpZXMoCiAgICBMaXN0PExpYnJhcnk+IGxpYnJhcmllcywKICAgIENvbnN0YW50c0JhY2tlbmQgYmFja2VuZCwKICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnREZWZpbmVzLAogICAgVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCwKICAgIEVycm9yUmVwb3J0ZXIgZXJyb3JSZXBvcnRlciwKICAgIHtib29sIGtlZXBGaWVsZHM6IHRydWUsCiAgICBib29sIGtlZXBWYXJpYWJsZXM6IGZhbHNlLAogICAgYm9vbCBldmFsdWF0ZUFubm90YXRpb25zOiB0cnVlLAogICAgYm9vbCBkZXN1Z2FyU2V0czogZmFsc2UsCiAgICBib29sIGVycm9yT25VbmV2YWx1YXRlZENvbnN0YW50OiBmYWxzZX0pIHsKICBmaW5hbCBDb25zdGFudHNUcmFuc2Zvcm1lciBjb25zdGFudHNUcmFuc2Zvcm1lciA9IG5ldyBDb25zdGFudHNUcmFuc2Zvcm1lcigKICAgICAgYmFja2VuZCwKICAgICAgZW52aXJvbm1lbnREZWZpbmVzLAogICAgICBrZWVwRmllbGRzLAogICAgICBrZWVwVmFyaWFibGVzLAogICAgICBldmFsdWF0ZUFubm90YXRpb25zLAogICAgICBkZXN1Z2FyU2V0cywKICAgICAgZXJyb3JPblVuZXZhbHVhdGVkQ29uc3RhbnQsCiAgICAgIHR5cGVFbnZpcm9ubWVudCwKICAgICAgZXJyb3JSZXBvcnRlcik7CiAgZm9yIChmaW5hbCBMaWJyYXJ5IGxpYnJhcnkgaW4gbGlicmFyaWVzKSB7CiAgICBjb25zdGFudHNUcmFuc2Zvcm1lci5jb252ZXJ0TGlicmFyeShsaWJyYXJ5KTsKICB9Cn0KCmNsYXNzIEphdmFTY3JpcHRJbnRDb25zdGFudCBleHRlbmRzIERvdWJsZUNvbnN0YW50IHsKICBmaW5hbCBCaWdJbnQgYmlnSW50VmFsdWU7CiAgSmF2YVNjcmlwdEludENvbnN0YW50KGludCB2YWx1ZSkgOiB0aGlzLmZyb21CaWdJbnQobmV3IEJpZ0ludC5mcm9tKHZhbHVlKSk7CiAgSmF2YVNjcmlwdEludENvbnN0YW50LmZyb21Eb3VibGUoZG91YmxlIHZhbHVlKQogICAgICA6IGJpZ0ludFZhbHVlID0gbmV3IEJpZ0ludC5mcm9tKHZhbHVlKSwKICAgICAgICBzdXBlcih2YWx1ZSk7CiAgSmF2YVNjcmlwdEludENvbnN0YW50LmZyb21CaWdJbnQodGhpcy5iaWdJbnRWYWx1ZSkKICAgICAgOiBzdXBlcihiaWdJbnRWYWx1ZS50b0RvdWJsZSgpKTsKICBKYXZhU2NyaXB0SW50Q29uc3RhbnQuZnJvbVVJbnQ2NChpbnQgdmFsdWUpCiAgICAgIDogdGhpcy5mcm9tQmlnSW50KG5ldyBCaWdJbnQuZnJvbSh2YWx1ZSkudG9VbnNpZ25lZCg2NCkpOwoKICBEYXJ0VHlwZSBnZXRUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdHlwZXMuaW50VHlwZTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyRiaWdJbnRWYWx1ZSc7Cn0KCmNsYXNzIENvbnN0YW50c1RyYW5zZm9ybWVyIGV4dGVuZHMgVHJhbnNmb3JtZXIgewogIGZpbmFsIENvbnN0YW50c0JhY2tlbmQgYmFja2VuZDsKICBmaW5hbCBDb25zdGFudEV2YWx1YXRvciBjb25zdGFudEV2YWx1YXRvcjsKICBmaW5hbCBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50OwoKICAvLy8gV2hldGhlciB0byBwcmVzZXJ2ZSBjb25zdGFudCBbRmllbGRdcy4gIEFsbCB1c2Utc2l0ZXMgd2lsbCBiZSByZXdyaXR0ZW4uCiAgZmluYWwgYm9vbCBrZWVwRmllbGRzOwogIGZpbmFsIGJvb2wga2VlcFZhcmlhYmxlczsKICBmaW5hbCBib29sIGV2YWx1YXRlQW5ub3RhdGlvbnM7CiAgZmluYWwgYm9vbCBkZXN1Z2FyU2V0czsKICBmaW5hbCBib29sIGVycm9yT25VbmV2YWx1YXRlZENvbnN0YW50OwoKICBDb25zdGFudHNUcmFuc2Zvcm1lcigKICAgICAgdGhpcy5iYWNrZW5kLAogICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50RGVmaW5lcywKICAgICAgdGhpcy5rZWVwRmllbGRzLAogICAgICB0aGlzLmtlZXBWYXJpYWJsZXMsCiAgICAgIHRoaXMuZXZhbHVhdGVBbm5vdGF0aW9ucywKICAgICAgdGhpcy5kZXN1Z2FyU2V0cywKICAgICAgdGhpcy5lcnJvck9uVW5ldmFsdWF0ZWRDb25zdGFudCwKICAgICAgdGhpcy50eXBlRW52aXJvbm1lbnQsCiAgICAgIEVycm9yUmVwb3J0ZXIgZXJyb3JSZXBvcnRlcikKICAgICAgOiBjb25zdGFudEV2YWx1YXRvciA9IG5ldyBDb25zdGFudEV2YWx1YXRvcigKICAgICAgICAgICAgYmFja2VuZCwgZW52aXJvbm1lbnREZWZpbmVzLCB0eXBlRW52aXJvbm1lbnQsIGVycm9yUmVwb3J0ZXIsCiAgICAgICAgICAgIGRlc3VnYXJTZXRzOiBkZXN1Z2FyU2V0cywKICAgICAgICAgICAgZXJyb3JPblVuZXZhbHVhdGVkQ29uc3RhbnQ6IGVycm9yT25VbmV2YWx1YXRlZENvbnN0YW50KTsKCiAgLy8gVHJhbnNmb3JtIHRoZSBsaWJyYXJ5L2NsYXNzIG1lbWJlcnM6CgogIHZvaWQgY29udmVydExpYnJhcnkoTGlicmFyeSBsaWJyYXJ5KSB7CiAgICB0cmFuc2Zvcm1Bbm5vdGF0aW9ucyhsaWJyYXJ5LmFubm90YXRpb25zLCBsaWJyYXJ5KTsKCiAgICB0cmFuc2Zvcm1MaXN0KGxpYnJhcnkuZGVwZW5kZW5jaWVzLCB0aGlzLCBsaWJyYXJ5KTsKICAgIHRyYW5zZm9ybUxpc3QobGlicmFyeS5wYXJ0cywgdGhpcywgbGlicmFyeSk7CiAgICB0cmFuc2Zvcm1MaXN0KGxpYnJhcnkudHlwZWRlZnMsIHRoaXMsIGxpYnJhcnkpOwogICAgdHJhbnNmb3JtTGlzdChsaWJyYXJ5LmNsYXNzZXMsIHRoaXMsIGxpYnJhcnkpOwogICAgdHJhbnNmb3JtTGlzdChsaWJyYXJ5LnByb2NlZHVyZXMsIHRoaXMsIGxpYnJhcnkpOwogICAgdHJhbnNmb3JtTGlzdChsaWJyYXJ5LmZpZWxkcywgdGhpcywgbGlicmFyeSk7CgogICAgaWYgKCFrZWVwRmllbGRzKSB7CiAgICAgIC8vIFRoZSB0cmFuc2Zvcm1lciBBUEkgZG9lcyBub3QgaXRlcmF0ZSBvdmVyIGBMaWJyYXJ5LmFkZGl0aW9uYWxFeHBvcnRzYCwKICAgICAgLy8gc28gd2UgbWFudWFsbHkgZGVsZXRlIHRoZSByZWZlcmVuY2VzIHRvIHNoYWtlbiBub2Rlcy4KICAgICAgbGlicmFyeS5hZGRpdGlvbmFsRXhwb3J0cy5yZW1vdmVXaGVyZSgoUmVmZXJlbmNlIHJlZmVyZW5jZSkgewogICAgICAgIHJldHVybiByZWZlcmVuY2Uubm9kZSBpcyBGaWVsZCAmJiByZWZlcmVuY2UuY2Fub25pY2FsTmFtZSA9PSBudWxsOwogICAgICB9KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIExpYnJhcnlQYXJ0IHZpc2l0TGlicmFyeVBhcnQoTGlicmFyeVBhcnQgbm9kZSkgewogICAgY29uc3RhbnRFdmFsdWF0b3Iud2l0aE5ld0Vudmlyb25tZW50KCgpIHsKICAgICAgdHJhbnNmb3JtQW5ub3RhdGlvbnMobm9kZS5hbm5vdGF0aW9ucywgbm9kZSk7CiAgICB9KTsKICAgIHJldHVybiBub2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlicmFyeURlcGVuZGVuY3kgdmlzaXRMaWJyYXJ5RGVwZW5kZW5jeShMaWJyYXJ5RGVwZW5kZW5jeSBub2RlKSB7CiAgICBjb25zdGFudEV2YWx1YXRvci53aXRoTmV3RW52aXJvbm1lbnQoKCkgewogICAgICB0cmFuc2Zvcm1Bbm5vdGF0aW9ucyhub2RlLmFubm90YXRpb25zLCBub2RlKTsKICAgIH0pOwogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzcyB2aXNpdENsYXNzKENsYXNzIG5vZGUpIHsKICAgIGNvbnN0YW50RXZhbHVhdG9yLndpdGhOZXdFbnZpcm9ubWVudCgoKSB7CiAgICAgIHRyYW5zZm9ybUFubm90YXRpb25zKG5vZGUuYW5ub3RhdGlvbnMsIG5vZGUpOwogICAgICB0cmFuc2Zvcm1MaXN0KG5vZGUuZmllbGRzLCB0aGlzLCBub2RlKTsKICAgICAgdHJhbnNmb3JtTGlzdChub2RlLnR5cGVQYXJhbWV0ZXJzLCB0aGlzLCBub2RlKTsKICAgICAgdHJhbnNmb3JtTGlzdChub2RlLmNvbnN0cnVjdG9ycywgdGhpcywgbm9kZSk7CiAgICAgIHRyYW5zZm9ybUxpc3Qobm9kZS5wcm9jZWR1cmVzLCB0aGlzLCBub2RlKTsKICAgICAgdHJhbnNmb3JtTGlzdChub2RlLnJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9ycywgdGhpcywgbm9kZSk7CiAgICB9KTsKICAgIHJldHVybiBub2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgUHJvY2VkdXJlIHZpc2l0UHJvY2VkdXJlKFByb2NlZHVyZSBub2RlKSB7CiAgICBjb25zdGFudEV2YWx1YXRvci53aXRoTmV3RW52aXJvbm1lbnQoKCkgewogICAgICB0cmFuc2Zvcm1Bbm5vdGF0aW9ucyhub2RlLmFubm90YXRpb25zLCBub2RlKTsKICAgICAgbm9kZS5mdW5jdGlvbiA9IG5vZGUuZnVuY3Rpb24uYWNjZXB0KHRoaXMpLi5wYXJlbnQgPSBub2RlOwogICAgfSk7CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0cnVjdG9yIHZpc2l0Q29uc3RydWN0b3IoQ29uc3RydWN0b3Igbm9kZSkgewogICAgY29uc3RhbnRFdmFsdWF0b3Iud2l0aE5ld0Vudmlyb25tZW50KCgpIHsKICAgICAgdHJhbnNmb3JtQW5ub3RhdGlvbnMobm9kZS5hbm5vdGF0aW9ucywgbm9kZSk7CiAgICAgIHRyYW5zZm9ybUxpc3Qobm9kZS5pbml0aWFsaXplcnMsIHRoaXMsIG5vZGUpOwogICAgICBub2RlLmZ1bmN0aW9uID0gbm9kZS5mdW5jdGlvbi5hY2NlcHQodGhpcykuLnBhcmVudCA9IG5vZGU7CiAgICB9KTsKICAgIHJldHVybiBub2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZWRlZiB2aXNpdFR5cGVkZWYoVHlwZWRlZiBub2RlKSB7CiAgICBjb25zdGFudEV2YWx1YXRvci53aXRoTmV3RW52aXJvbm1lbnQoKCkgewogICAgICB0cmFuc2Zvcm1Bbm5vdGF0aW9ucyhub2RlLmFubm90YXRpb25zLCBub2RlKTsKICAgICAgdHJhbnNmb3JtTGlzdChub2RlLnR5cGVQYXJhbWV0ZXJzLCB0aGlzLCBub2RlKTsKICAgICAgdHJhbnNmb3JtTGlzdChub2RlLnR5cGVQYXJhbWV0ZXJzT2ZGdW5jdGlvblR5cGUsIHRoaXMsIG5vZGUpOwogICAgICB0cmFuc2Zvcm1MaXN0KG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMsIHRoaXMsIG5vZGUpOwogICAgICB0cmFuc2Zvcm1MaXN0KG5vZGUubmFtZWRQYXJhbWV0ZXJzLCB0aGlzLCBub2RlKTsKICAgIH0pOwogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvciB2aXNpdFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKAogICAgICBSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvciBub2RlKSB7CiAgICBjb25zdGFudEV2YWx1YXRvci53aXRoTmV3RW52aXJvbm1lbnQoKCkgewogICAgICB0cmFuc2Zvcm1Bbm5vdGF0aW9ucyhub2RlLmFubm90YXRpb25zLCBub2RlKTsKICAgICAgdHJhbnNmb3JtTGlzdChub2RlLnR5cGVQYXJhbWV0ZXJzLCB0aGlzLCBub2RlKTsKICAgICAgdHJhbnNmb3JtTGlzdChub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLCB0aGlzLCBub2RlKTsKICAgICAgdHJhbnNmb3JtTGlzdChub2RlLm5hbWVkUGFyYW1ldGVycywgdGhpcywgbm9kZSk7CiAgICB9KTsKICAgIHJldHVybiBub2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZVBhcmFtZXRlciB2aXNpdFR5cGVQYXJhbWV0ZXIoVHlwZVBhcmFtZXRlciBub2RlKSB7CiAgICB0cmFuc2Zvcm1Bbm5vdGF0aW9ucyhub2RlLmFubm90YXRpb25zLCBub2RlKTsKICAgIHJldHVybiBub2RlOwogIH0KCiAgdm9pZCB0cmFuc2Zvcm1Bbm5vdGF0aW9ucyhMaXN0PEV4cHJlc3Npb24+IG5vZGVzLCBUcmVlTm9kZSBwYXJlbnQpIHsKICAgIGlmIChldmFsdWF0ZUFubm90YXRpb25zICYmIG5vZGVzLmxlbmd0aCA+IDApIHsKICAgICAgdHJhbnNmb3JtRXhwcmVzc2lvbnMobm9kZXMsIHBhcmVudCk7CiAgICB9CiAgfQoKICB2b2lkIHRyYW5zZm9ybUV4cHJlc3Npb25zKExpc3Q8RXhwcmVzc2lvbj4gbm9kZXMsIFRyZWVOb2RlIHBhcmVudCkgewogICAgY29uc3RhbnRFdmFsdWF0b3Iud2l0aE5ld0Vudmlyb25tZW50KCgpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7ICsraSkgewogICAgICAgIG5vZGVzW2ldID0gZXZhbHVhdGVBbmRUcmFuc2Zvcm1XaXRoQ29udGV4dChwYXJlbnQsIG5vZGVzW2ldKQogICAgICAgICAgLi5wYXJlbnQgPSBwYXJlbnQ7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgLy8gSGFuZGxlIGRlZmluaXRpb24gb2YgY29uc3RhbnRzOgoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbk5vZGUgdmlzaXRGdW5jdGlvbk5vZGUoRnVuY3Rpb25Ob2RlIG5vZGUpIHsKICAgIGZpbmFsIGludCBwb3NpdGlvbmFsUGFyYW1ldGVyQ291bnQgPSBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG9zaXRpb25hbFBhcmFtZXRlckNvdW50OyArK2kpIHsKICAgICAgZmluYWwgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSA9IG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnNbaV07CiAgICAgIHRyYW5zZm9ybUFubm90YXRpb25zKHZhcmlhYmxlLmFubm90YXRpb25zLCB2YXJpYWJsZSk7CiAgICAgIGlmICh2YXJpYWJsZS5pbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgdmFyaWFibGUuaW5pdGlhbGl6ZXIgPQogICAgICAgICAgICBldmFsdWF0ZUFuZFRyYW5zZm9ybVdpdGhDb250ZXh0KHZhcmlhYmxlLCB2YXJpYWJsZS5pbml0aWFsaXplcikKICAgICAgICAgICAgICAuLnBhcmVudCA9IHZhcmlhYmxlOwogICAgICB9CiAgICB9CiAgICBmb3IgKGZpbmFsIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgaW4gbm9kZS5uYW1lZFBhcmFtZXRlcnMpIHsKICAgICAgdHJhbnNmb3JtQW5ub3RhdGlvbnModmFyaWFibGUuYW5ub3RhdGlvbnMsIHZhcmlhYmxlKTsKICAgICAgaWYgKHZhcmlhYmxlLmluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgICB2YXJpYWJsZS5pbml0aWFsaXplciA9CiAgICAgICAgICAgIGV2YWx1YXRlQW5kVHJhbnNmb3JtV2l0aENvbnRleHQodmFyaWFibGUsIHZhcmlhYmxlLmluaXRpYWxpemVyKQogICAgICAgICAgICAgIC4ucGFyZW50ID0gdmFyaWFibGU7CiAgICAgIH0KICAgIH0KICAgIGlmIChub2RlLmJvZHkgIT0gbnVsbCkgewogICAgICBub2RlLmJvZHkgPSBub2RlLmJvZHkuYWNjZXB0KHRoaXMpLi5wYXJlbnQgPSBub2RlOwogICAgfQogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBWYXJpYWJsZURlY2xhcmF0aW9uIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIHRyYW5zZm9ybUFubm90YXRpb25zKG5vZGUuYW5ub3RhdGlvbnMsIG5vZGUpOwoKICAgIGlmIChub2RlLmluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICAgIGZpbmFsIENvbnN0YW50IGNvbnN0YW50ID0gZXZhbHVhdGVXaXRoQ29udGV4dChub2RlLCBub2RlLmluaXRpYWxpemVyKTsKICAgICAgICBjb25zdGFudEV2YWx1YXRvci5lbnYuYWRkVmFyaWFibGVWYWx1ZShub2RlLCBjb25zdGFudCk7CiAgICAgICAgbm9kZS5pbml0aWFsaXplciA9IG1ha2VDb25zdGFudEV4cHJlc3Npb24oY29uc3RhbnQsIG5vZGUuaW5pdGlhbGl6ZXIpCiAgICAgICAgICAuLnBhcmVudCA9IG5vZGU7CgogICAgICAgIC8vIElmIHRoaXMgY29uc3RhbnQgaXMgaW5saW5lZCwgcmVtb3ZlIGl0LgogICAgICAgIGlmICgha2VlcFZhcmlhYmxlcyAmJiBzaG91bGRJbmxpbmUobm9kZS5pbml0aWFsaXplcikpIHsKICAgICAgICAgIGlmIChjb25zdGFudCBpcyEgVW5ldmFsdWF0ZWRDb25zdGFudCkgewogICAgICAgICAgICAvLyBJZiB0aGUgY29uc3RhbnQgaXMgdW5ldmFsdWF0ZWQgd2UgbmVlZCB0byBrZWVwIHRoZSBleHByZXNzaW9uLAogICAgICAgICAgICAvLyBzbyB0aGF0LCBpbiB0aGUgY2FzZSB0aGUgY29uc3RhbnQgY29udGFpbnMgZXJyb3IgYnV0IHRoZSBsb2NhbAogICAgICAgICAgICAvLyBpcyB1bnVzZWQsIHRoZSBlcnJvciB3aWxsIHN0aWxsIGJlIHJlcG9ydGVkLgogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbm9kZS5pbml0aWFsaXplciA9IG5vZGUuaW5pdGlhbGl6ZXIuYWNjZXB0KHRoaXMpLi5wYXJlbnQgPSBub2RlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEZpZWxkIHZpc2l0RmllbGQoRmllbGQgbm9kZSkgewogICAgcmV0dXJuIGNvbnN0YW50RXZhbHVhdG9yLndpdGhOZXdFbnZpcm9ubWVudCgoKSB7CiAgICAgIGlmIChub2RlLmlzQ29uc3QpIHsKICAgICAgICB0cmFuc2Zvcm1Bbm5vdGF0aW9ucyhub2RlLmFubm90YXRpb25zLCBub2RlKTsKICAgICAgICBub2RlLmluaXRpYWxpemVyID0KICAgICAgICAgICAgZXZhbHVhdGVBbmRUcmFuc2Zvcm1XaXRoQ29udGV4dChub2RlLCBub2RlLmluaXRpYWxpemVyKQogICAgICAgICAgICAgIC4ucGFyZW50ID0gbm9kZTsKCiAgICAgICAgLy8gSWYgdGhpcyBjb25zdGFudCBpcyBpbmxpbmVkLCByZW1vdmUgaXQuCiAgICAgICAgaWYgKCFrZWVwRmllbGRzICYmIHNob3VsZElubGluZShub2RlLmluaXRpYWxpemVyKSkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHRyYW5zZm9ybUFubm90YXRpb25zKG5vZGUuYW5ub3RhdGlvbnMsIG5vZGUpOwogICAgICAgIGlmIChub2RlLmluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgICAgIG5vZGUuaW5pdGlhbGl6ZXIgPSBub2RlLmluaXRpYWxpemVyLmFjY2VwdCh0aGlzKS4ucGFyZW50ID0gbm9kZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG5vZGU7CiAgICB9KTsKICB9CgogIC8vIEhhbmRsZSB1c2Utc2l0ZXMgb2YgY29uc3RhbnRzIChhbmQgImlubGluZSIgY29uc3RhbnQgZXhwcmVzc2lvbnMpOgoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIHZpc2l0U3ltYm9sTGl0ZXJhbChTeW1ib2xMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBtYWtlQ29uc3RhbnRFeHByZXNzaW9uKGNvbnN0YW50RXZhbHVhdG9yLmV2YWx1YXRlKG5vZGUpLCBub2RlKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gdmlzaXRTdGF0aWNHZXQoU3RhdGljR2V0IG5vZGUpIHsKICAgIGZpbmFsIE1lbWJlciB0YXJnZXQgPSBub2RlLnRhcmdldDsKICAgIGlmICh0YXJnZXQgaXMgRmllbGQgJiYgdGFyZ2V0LmlzQ29uc3QpIHsKICAgICAgLy8gTWFrZSBzdXJlIHRoZSBpbml0aWFsaXplciBpcyBldmFsdWF0ZWQgZmlyc3QuCiAgICAgIHRhcmdldC5pbml0aWFsaXplciA9CiAgICAgICAgICBldmFsdWF0ZUFuZFRyYW5zZm9ybVdpdGhDb250ZXh0KHRhcmdldCwgdGFyZ2V0LmluaXRpYWxpemVyKQogICAgICAgICAgICAuLnBhcmVudCA9IHRhcmdldDsKICAgICAgaWYgKHNob3VsZElubGluZSh0YXJnZXQuaW5pdGlhbGl6ZXIpKSB7CiAgICAgICAgcmV0dXJuIGV2YWx1YXRlQW5kVHJhbnNmb3JtV2l0aENvbnRleHQobm9kZSwgbm9kZSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodGFyZ2V0IGlzIFByb2NlZHVyZSAmJiB0YXJnZXQua2luZCA9PSBQcm9jZWR1cmVLaW5kLk1ldGhvZCkgewogICAgICByZXR1cm4gZXZhbHVhdGVBbmRUcmFuc2Zvcm1XaXRoQ29udGV4dChub2RlLCBub2RlKTsKICAgIH0KICAgIHJldHVybiBzdXBlci52aXNpdFN0YXRpY0dldChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIFN3aXRjaENhc2UgdmlzaXRTd2l0Y2hDYXNlKFN3aXRjaENhc2Ugbm9kZSkgewogICAgdHJhbnNmb3JtRXhwcmVzc2lvbnMobm9kZS5leHByZXNzaW9ucywgbm9kZSk7CiAgICByZXR1cm4gc3VwZXIudmlzaXRTd2l0Y2hDYXNlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiB2aXNpdFZhcmlhYmxlR2V0KFZhcmlhYmxlR2V0IG5vZGUpIHsKICAgIGZpbmFsIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBub2RlLnZhcmlhYmxlOwogICAgaWYgKHZhcmlhYmxlLmlzQ29uc3QpIHsKICAgICAgdmFyaWFibGUuaW5pdGlhbGl6ZXIgPQogICAgICAgICAgZXZhbHVhdGVBbmRUcmFuc2Zvcm1XaXRoQ29udGV4dCh2YXJpYWJsZSwgdmFyaWFibGUuaW5pdGlhbGl6ZXIpCiAgICAgICAgICAgIC4ucGFyZW50ID0gdmFyaWFibGU7CiAgICAgIGlmIChzaG91bGRJbmxpbmUodmFyaWFibGUuaW5pdGlhbGl6ZXIpKSB7CiAgICAgICAgcmV0dXJuIGV2YWx1YXRlQW5kVHJhbnNmb3JtV2l0aENvbnRleHQobm9kZSwgbm9kZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBzdXBlci52aXNpdFZhcmlhYmxlR2V0KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiB2aXNpdExpc3RMaXRlcmFsKExpc3RMaXRlcmFsIG5vZGUpIHsKICAgIGlmIChub2RlLmlzQ29uc3QpIHsKICAgICAgcmV0dXJuIGV2YWx1YXRlQW5kVHJhbnNmb3JtV2l0aENvbnRleHQobm9kZSwgbm9kZSk7CiAgICB9CiAgICByZXR1cm4gc3VwZXIudmlzaXRMaXN0TGl0ZXJhbChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gdmlzaXRMaXN0Q29uY2F0ZW5hdGlvbihMaXN0Q29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICByZXR1cm4gZXZhbHVhdGVBbmRUcmFuc2Zvcm1XaXRoQ29udGV4dChub2RlLCBub2RlKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gdmlzaXRTZXRMaXRlcmFsKFNldExpdGVyYWwgbm9kZSkgewogICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICByZXR1cm4gZXZhbHVhdGVBbmRUcmFuc2Zvcm1XaXRoQ29udGV4dChub2RlLCBub2RlKTsKICAgIH0KICAgIHJldHVybiBzdXBlci52aXNpdFNldExpdGVyYWwobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIHZpc2l0U2V0Q29uY2F0ZW5hdGlvbihTZXRDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIHJldHVybiBldmFsdWF0ZUFuZFRyYW5zZm9ybVdpdGhDb250ZXh0KG5vZGUsIG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiB2aXNpdE1hcExpdGVyYWwoTWFwTGl0ZXJhbCBub2RlKSB7CiAgICBpZiAobm9kZS5pc0NvbnN0KSB7CiAgICAgIHJldHVybiBldmFsdWF0ZUFuZFRyYW5zZm9ybVdpdGhDb250ZXh0KG5vZGUsIG5vZGUpOwogICAgfQogICAgcmV0dXJuIHN1cGVyLnZpc2l0TWFwTGl0ZXJhbChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gdmlzaXRNYXBDb25jYXRlbmF0aW9uKE1hcENvbmNhdGVuYXRpb24gbm9kZSkgewogICAgcmV0dXJuIGV2YWx1YXRlQW5kVHJhbnNmb3JtV2l0aENvbnRleHQobm9kZSwgbm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIHZpc2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKENvbnN0cnVjdG9ySW52b2NhdGlvbiBub2RlKSB7CiAgICBpZiAobm9kZS5pc0NvbnN0KSB7CiAgICAgIHJldHVybiBldmFsdWF0ZUFuZFRyYW5zZm9ybVdpdGhDb250ZXh0KG5vZGUsIG5vZGUpOwogICAgfQogICAgcmV0dXJuIHN1cGVyLnZpc2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiB2aXNpdFN0YXRpY0ludm9jYXRpb24oU3RhdGljSW52b2NhdGlvbiBub2RlKSB7CiAgICBpZiAobm9kZS5pc0NvbnN0KSB7CiAgICAgIHJldHVybiBldmFsdWF0ZUFuZFRyYW5zZm9ybVdpdGhDb250ZXh0KG5vZGUsIG5vZGUpOwogICAgfQogICAgcmV0dXJuIHN1cGVyLnZpc2l0U3RhdGljSW52b2NhdGlvbihub2RlKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gdmlzaXRDb25zdGFudEV4cHJlc3Npb24oQ29uc3RhbnRFeHByZXNzaW9uIG5vZGUpIHsKICAgIENvbnN0YW50IGNvbnN0YW50ID0gbm9kZS5jb25zdGFudDsKICAgIGlmIChjb25zdGFudCBpcyBVbmV2YWx1YXRlZENvbnN0YW50KSB7CiAgICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IGNvbnN0YW50LmV4cHJlc3Npb247CiAgICAgIHJldHVybiBldmFsdWF0ZUFuZFRyYW5zZm9ybVdpdGhDb250ZXh0KGV4cHJlc3Npb24sIGV4cHJlc3Npb24pOwogICAgfSBlbHNlIHsKICAgICAgbm9kZS5jb25zdGFudCA9IGNvbnN0YW50RXZhbHVhdG9yLmNhbm9uaWNhbGl6ZShjb25zdGFudCk7CiAgICAgIHJldHVybiBub2RlOwogICAgfQogIH0KCiAgRXhwcmVzc2lvbiBldmFsdWF0ZUFuZFRyYW5zZm9ybVdpdGhDb250ZXh0KAogICAgICBUcmVlTm9kZSB0cmVlQ29udGV4dCwgRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gbWFrZUNvbnN0YW50RXhwcmVzc2lvbihldmFsdWF0ZVdpdGhDb250ZXh0KHRyZWVDb250ZXh0LCBub2RlKSwgbm9kZSk7CiAgfQoKICBDb25zdGFudCBldmFsdWF0ZVdpdGhDb250ZXh0KFRyZWVOb2RlIHRyZWVDb250ZXh0LCBFeHByZXNzaW9uIG5vZGUpIHsKICAgIGlmICh0cmVlQ29udGV4dCA9PSBub2RlKSB7CiAgICAgIHJldHVybiBjb25zdGFudEV2YWx1YXRvci5ldmFsdWF0ZShub2RlKTsKICAgIH0KCiAgICByZXR1cm4gY29uc3RhbnRFdmFsdWF0b3IucnVuSW5zaWRlQ29udGV4dCh0cmVlQ29udGV4dCwgKCkgewogICAgICByZXR1cm4gY29uc3RhbnRFdmFsdWF0b3IuZXZhbHVhdGUobm9kZSk7CiAgICB9KTsKICB9CgogIEV4cHJlc3Npb24gbWFrZUNvbnN0YW50RXhwcmVzc2lvbihDb25zdGFudCBjb25zdGFudCwgRXhwcmVzc2lvbiBub2RlKSB7CiAgICBpZiAoY29uc3RhbnQgaXMgVW5ldmFsdWF0ZWRDb25zdGFudCAmJgogICAgICAgIGNvbnN0YW50LmV4cHJlc3Npb24gaXMgSW52YWxpZEV4cHJlc3Npb24pIHsKICAgICAgcmV0dXJuIGNvbnN0YW50LmV4cHJlc3Npb247CiAgICB9CiAgICByZXR1cm4gbmV3IENvbnN0YW50RXhwcmVzc2lvbihjb25zdGFudCwgbm9kZS5nZXRTdGF0aWNUeXBlKHR5cGVFbnZpcm9ubWVudCkpCiAgICAgIC4uZmlsZU9mZnNldCA9IG5vZGUuZmlsZU9mZnNldDsKICB9CgogIGJvb2wgc2hvdWxkSW5saW5lKEV4cHJlc3Npb24gaW5pdGlhbGl6ZXIpIHsKICAgIGlmIChpbml0aWFsaXplciBpcyBDb25zdGFudEV4cHJlc3Npb24pIHsKICAgICAgcmV0dXJuIGJhY2tlbmQuc2hvdWxkSW5saW5lQ29uc3RhbnQoaW5pdGlhbGl6ZXIpOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQp9CgpjbGFzcyBDb25zdGFudEV2YWx1YXRvciBleHRlbmRzIFJlY3Vyc2l2ZVZpc2l0b3I8Q29uc3RhbnQ+IHsKICBmaW5hbCBDb25zdGFudHNCYWNrZW5kIGJhY2tlbmQ7CiAgZmluYWwgTnVtYmVyU2VtYW50aWNzIG51bWJlclNlbWFudGljczsKICBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50RGVmaW5lczsKICBmaW5hbCBib29sIGVycm9yT25VbmV2YWx1YXRlZENvbnN0YW50OwogIGZpbmFsIENvcmVUeXBlcyBjb3JlVHlwZXM7CiAgZmluYWwgVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudDsKICBmaW5hbCBFcnJvclJlcG9ydGVyIGVycm9yUmVwb3J0ZXI7CgogIGZpbmFsIGJvb2wgZGVzdWdhclNldHM7CiAgZmluYWwgRmllbGQgdW5tb2RpZmlhYmxlU2V0TWFwOwoKICBmaW5hbCBib29sIEZ1bmN0aW9uKERhcnRUeXBlKSBpc0luc3RhbnRpYXRlZCA9CiAgICAgIG5ldyBJc0luc3RhbnRpYXRlZFZpc2l0b3IoKS5pc0luc3RhbnRpYXRlZDsKCiAgZmluYWwgTWFwPENvbnN0YW50LCBDb25zdGFudD4gY2Fub25pY2FsaXphdGlvbkNhY2hlOwogIGZpbmFsIE1hcDxOb2RlLCBPYmplY3Q+IG5vZGVDYWNoZTsKICBmaW5hbCBDbG9uZVZpc2l0b3IgY2xvbmVyID0gbmV3IENsb25lVmlzaXRvcigpOwoKICBNYXA8Q2xhc3MsIGJvb2w+IHByaW1pdGl2ZUVxdWFsQ2FjaGU7CgogIGZpbmFsIE51bGxDb25zdGFudCBudWxsQ29uc3RhbnQgPSBuZXcgTnVsbENvbnN0YW50KCk7CiAgZmluYWwgQm9vbENvbnN0YW50IHRydWVDb25zdGFudCA9IG5ldyBCb29sQ29uc3RhbnQodHJ1ZSk7CiAgZmluYWwgQm9vbENvbnN0YW50IGZhbHNlQ29uc3RhbnQgPSBuZXcgQm9vbENvbnN0YW50KGZhbHNlKTsKCiAgZmluYWwgTGlzdDxUcmVlTm9kZT4gY29udGV4dENoYWluID0gW107CgogIEluc3RhbmNlQnVpbGRlciBpbnN0YW5jZUJ1aWxkZXI7CiAgRXZhbHVhdGlvbkVudmlyb25tZW50IGVudjsKICBTZXQ8RXhwcmVzc2lvbj4gcmVwbGFjZW1lbnROb2RlcyA9IG5ldyBTZXQ8RXhwcmVzc2lvbj4uaWRlbnRpdHkoKTsKICBNYXA8Q29uc3RhbnQsIENvbnN0YW50PiBsb3dlcmVkID0gbmV3IE1hcDxDb25zdGFudCwgQ29uc3RhbnQ+LmlkZW50aXR5KCk7CgogIGJvb2wgc2VlblVuZXZhbHVhdGVkQ2hpbGQ7IC8vIEFueSBjaGlsZHJlbiB0aGF0IHdlcmUgbGVmdCB1bmV2YWx1YXRlZD8KICBpbnQgbGF6eURlcHRoOyAvLyBDdXJyZW50IG5lc3RpbmcgZGVwdGggb2YgbGF6eSByZWdpb25zLgoKICBib29sIGdldCBzaG91bGRCZVVuZXZhbHVhdGVkID0+IHNlZW5VbmV2YWx1YXRlZENoaWxkIHx8IGxhenlEZXB0aCAhPSAwOwoKICBib29sIGdldCB0YXJnZXRpbmdKYXZhU2NyaXB0ID0+IG51bWJlclNlbWFudGljcyA9PSBOdW1iZXJTZW1hbnRpY3MuanM7CgogIENvbnN0YW50RXZhbHVhdG9yKHRoaXMuYmFja2VuZCwgdGhpcy5lbnZpcm9ubWVudERlZmluZXMsIHRoaXMudHlwZUVudmlyb25tZW50LAogICAgICB0aGlzLmVycm9yUmVwb3J0ZXIsCiAgICAgIHt0aGlzLmRlc3VnYXJTZXRzID0gZmFsc2UsIHRoaXMuZXJyb3JPblVuZXZhbHVhdGVkQ29uc3RhbnQgPSBmYWxzZX0pCiAgICAgIDogbnVtYmVyU2VtYW50aWNzID0gYmFja2VuZC5udW1iZXJTZW1hbnRpY3MsCiAgICAgICAgY29yZVR5cGVzID0gdHlwZUVudmlyb25tZW50LmNvcmVUeXBlcywKICAgICAgICBjYW5vbmljYWxpemF0aW9uQ2FjaGUgPSA8Q29uc3RhbnQsIENvbnN0YW50Pnt9LAogICAgICAgIG5vZGVDYWNoZSA9IDxOb2RlLCBDb25zdGFudD57fSwKICAgICAgICBlbnYgPSBuZXcgRXZhbHVhdGlvbkVudmlyb25tZW50KCksCiAgICAgICAgdW5tb2RpZmlhYmxlU2V0TWFwID0gZGVzdWdhclNldHMKICAgICAgICAgICAgPyB0eXBlRW52aXJvbm1lbnQuY29yZVR5cGVzLmluZGV4CiAgICAgICAgICAgICAgICAuZ2V0TWVtYmVyKCdkYXJ0OmNvbGxlY3Rpb24nLCAnX1VubW9kaWZpYWJsZVNldCcsICdfbWFwJykKICAgICAgICAgICAgOiBudWxsIHsKICAgIGlmIChlbnZpcm9ubWVudERlZmluZXMgPT0gbnVsbCAmJiAhYmFja2VuZC5zdXBwb3J0c1VuZXZhbHVhdGVkQ29uc3RhbnRzKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKAogICAgICAgICAgIk5vICdlbnZpcm9ubWVudERlZmluZXMnIHBhc3NlZCB0byB0aGUgY29uc3RhbnQgZXZhbHVhdG9yIGJ1dCB0aGUgIgogICAgICAgICAgIkNvbnN0YW50c0JhY2tlbmQgZG9lcyBub3Qgc3VwcG9ydCB1bmV2YWx1YXRlZCBjb25zdGFudHMuIik7CiAgICB9CiAgICBwcmltaXRpdmVFcXVhbENhY2hlID0gPENsYXNzLCBib29sPnsKICAgICAgY29yZVR5cGVzLmJvb2xDbGFzczogdHJ1ZSwKICAgICAgY29yZVR5cGVzLmRvdWJsZUNsYXNzOiBmYWxzZSwKICAgICAgY29yZVR5cGVzLmludENsYXNzOiB0cnVlLAogICAgICBjb3JlVHlwZXMuaW50ZXJuYWxTeW1ib2xDbGFzczogdHJ1ZSwKICAgICAgY29yZVR5cGVzLmxpc3RDbGFzczogdHJ1ZSwKICAgICAgY29yZVR5cGVzLm1hcENsYXNzOiB0cnVlLAogICAgICBjb3JlVHlwZXMubnVsbENsYXNzOiB0cnVlLAogICAgICBjb3JlVHlwZXMub2JqZWN0Q2xhc3M6IHRydWUsCiAgICAgIGNvcmVUeXBlcy5zZXRDbGFzczogdHJ1ZSwKICAgICAgY29yZVR5cGVzLnN0cmluZ0NsYXNzOiB0cnVlLAogICAgICBjb3JlVHlwZXMuc3ltYm9sQ2xhc3M6IHRydWUsCiAgICAgIGNvcmVUeXBlcy50eXBlQ2xhc3M6IHRydWUsCiAgICB9OwogIH0KCiAgVXJpIGdldEZpbGVVcmkoVHJlZU5vZGUgbm9kZSkgewogICAgd2hpbGUgKG5vZGUgIT0gbnVsbCAmJiBub2RlIGlzISBGaWxlVXJpTm9kZSkgewogICAgICBub2RlID0gbm9kZS5wYXJlbnQ7CiAgICB9CiAgICByZXR1cm4gKG5vZGUgYXMgRmlsZVVyaU5vZGUpPy5maWxlVXJpOwogIH0KCiAgaW50IGdldEZpbGVPZmZzZXQoVXJpIHVyaSwgVHJlZU5vZGUgbm9kZSkgewogICAgaWYgKHVyaSA9PSBudWxsKSByZXR1cm4gVHJlZU5vZGUubm9PZmZzZXQ7CiAgICB3aGlsZSAobm9kZSAhPSBudWxsICYmIG5vZGUuZmlsZU9mZnNldCA9PSBUcmVlTm9kZS5ub09mZnNldCkgewogICAgICBub2RlID0gbm9kZS5wYXJlbnQ7CiAgICB9CiAgICByZXR1cm4gbm9kZSA9PSBudWxsID8gVHJlZU5vZGUubm9PZmZzZXQgOiBub2RlLmZpbGVPZmZzZXQ7CiAgfQoKICAvLy8gRXZhbHVhdGUgW25vZGVdIGFuZCBwb3NzaWJseSBjYWNoZSB0aGUgZXZhbHVhdGlvbiByZXN1bHQuCiAgLy8vIFJldHVybnMgVW5ldmFsdWF0ZWRDb25zdGFudCBpZiB0aGUgY29uc3RhbnQgY291bGQgbm90IGJlIGV2YWx1YXRlZC4KICAvLy8gSWYgdGhlIGV4cHJlc3Npb24gaW4gdGhlIFVuZXZhbHVhdGVkQ29uc3RhbnQgaXMgYW4gSW52YWxpZEV4cHJlc3Npb24sCiAgLy8vIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBjb25zdGFudCBldmFsdWF0aW9uLgogIENvbnN0YW50IGV2YWx1YXRlKEV4cHJlc3Npb24gbm9kZSkgewogICAgc2VlblVuZXZhbHVhdGVkQ2hpbGQgPSBmYWxzZTsKICAgIGxhenlEZXB0aCA9IDA7CiAgICB0cnkgewogICAgICBDb25zdGFudCByZXN1bHQgPSBfZXZhbHVhdGVTdWJleHByZXNzaW9uKG5vZGUpOwogICAgICBpZiAoZXJyb3JPblVuZXZhbHVhdGVkQ29uc3RhbnQgJiYgcmVzdWx0IGlzIFVuZXZhbHVhdGVkQ29uc3RhbnQpIHsKICAgICAgICByZXR1cm4gcmVwb3J0KG5vZGUsIG1lc3NhZ2VDb25zdEV2YWxVbmV2YWx1YXRlZCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0gb24gX0Fib3J0RHVlVG9FcnJvciBjYXRjaCAoZSkgewogICAgICBmaW5hbCBVcmkgdXJpID0gZ2V0RmlsZVVyaShlLm5vZGUpOwogICAgICBmaW5hbCBpbnQgZmlsZU9mZnNldCA9IGdldEZpbGVPZmZzZXQodXJpLCBlLm5vZGUpOwogICAgICBmaW5hbCBMb2NhdGVkTWVzc2FnZSBsb2NhdGVkTWVzc2FnZUFjdHVhbEVycm9yID0KICAgICAgICAgIGUubWVzc2FnZS53aXRoTG9jYXRpb24odXJpLCBmaWxlT2Zmc2V0LCBub0xlbmd0aCk7CgogICAgICBmaW5hbCBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0TWVzc2FnZXMgPSA8TG9jYXRlZE1lc3NhZ2U+WwogICAgICAgIGxvY2F0ZWRNZXNzYWdlQWN0dWFsRXJyb3IKICAgICAgXTsKICAgICAgaWYgKGUuY29udGV4dCAhPSBudWxsKSBjb250ZXh0TWVzc2FnZXMuYWRkQWxsKGUuY29udGV4dCk7CiAgICAgIGZvciAoZmluYWwgVHJlZU5vZGUgbm9kZSBpbiBjb250ZXh0Q2hhaW4pIHsKICAgICAgICBpZiAobm9kZSA9PSBlLm5vZGUpIGNvbnRpbnVlOwogICAgICAgIGZpbmFsIFVyaSB1cmkgPSBnZXRGaWxlVXJpKG5vZGUpOwogICAgICAgIGZpbmFsIGludCBmaWxlT2Zmc2V0ID0gZ2V0RmlsZU9mZnNldCh1cmksIG5vZGUpOwogICAgICAgIGNvbnRleHRNZXNzYWdlcy5hZGQoCiAgICAgICAgICAgIG1lc3NhZ2VDb25zdEV2YWxDb250ZXh0LndpdGhMb2NhdGlvbih1cmksIGZpbGVPZmZzZXQsIG5vTGVuZ3RoKSk7CiAgICAgIH0KCiAgICAgIHsKICAgICAgICBmaW5hbCBVcmkgdXJpID0gZ2V0RmlsZVVyaShub2RlKTsKICAgICAgICBmaW5hbCBpbnQgZmlsZU9mZnNldCA9IGdldEZpbGVPZmZzZXQodXJpLCBub2RlKTsKICAgICAgICBmaW5hbCBMb2NhdGVkTWVzc2FnZSBsb2NhdGVkTWVzc2FnZSA9IG1lc3NhZ2VDb25zdEV2YWxTdGFydGluZ1BvaW50CiAgICAgICAgICAgIC53aXRoTG9jYXRpb24odXJpLCBmaWxlT2Zmc2V0LCBub0xlbmd0aCk7CiAgICAgICAgZXJyb3JSZXBvcnRlci5yZXBvcnQobG9jYXRlZE1lc3NhZ2UsIGNvbnRleHRNZXNzYWdlcyk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBVbmV2YWx1YXRlZENvbnN0YW50KG5ldyBJbnZhbGlkRXhwcmVzc2lvbihlLm1lc3NhZ2UubWVzc2FnZSkpOwogICAgfSBvbiBfQWJvcnREdWVUb0ludmFsaWRFeHByZXNzaW9uIGNhdGNoIChlKSB7CiAgICAgIC8vIFRPRE8oYXNrZXNjKTogQ29weSBwb3NpdGlvbiBmcm9tIGVycm9uZW91cyBub2RlLgogICAgICAvLyBDdXJyZW50bHkgbm90IHBvc3NpYmxlLCBhcyBpdCBtaWdodCBiZSBpbiBhIGRpZmZlcmVudCBmaWxlLgogICAgICAvLyBDYW4gYmUgZG9uZSBpZiB3ZSBhZGQgYW4gZXhwbGljaXQgVVJJIHRvIEludmFsaWRFeHByZXNzaW9uLgogICAgICBJbnZhbGlkRXhwcmVzc2lvbiBpbnZhbGlkID0gbmV3IEludmFsaWRFeHByZXNzaW9uKGUubWVzc2FnZSk7CiAgICAgIGlmIChpbnZhbGlkLmZpbGVPZmZzZXQgPT0gVHJlZU5vZGUubm9PZmZzZXQpIHsKICAgICAgICBpbnZhbGlkLmZpbGVPZmZzZXQgPSBub2RlLmZpbGVPZmZzZXQ7CiAgICAgIH0KICAgICAgZXJyb3JSZXBvcnRlci5yZXBvcnRJbnZhbGlkRXhwcmVzc2lvbihpbnZhbGlkKTsKICAgICAgcmV0dXJuIG5ldyBVbmV2YWx1YXRlZENvbnN0YW50KGludmFsaWQpOwogICAgfQogIH0KCiAgLy8vIFJlcG9ydCBhbiBlcnJvciB0aGF0IGhhcyBiZWVuIGRldGVjdGVkIGR1cmluZyBjb25zdGFudCBldmFsdWF0aW9uLgogIE51bGwgcmVwb3J0KFRyZWVOb2RlIG5vZGUsIE1lc3NhZ2UgbWVzc2FnZSwge0xpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHR9KSB7CiAgICB0aHJvdyBuZXcgX0Fib3J0RHVlVG9FcnJvcihub2RlLCBtZXNzYWdlLCBjb250ZXh0OiBjb250ZXh0KTsKICB9CgogIC8vLyBSZXBvcnQgYSBjb25zdHJ1Y3QgdGhhdCBzaG91bGQgbm90IG9jY3VyIGluc2lkZSBhIHBvdGVudGlhbGx5IGNvbnN0YW50CiAgLy8vIGV4cHJlc3Npb24uIEl0IGlzIGFzc3VtZWQgdGhhdCBhbiBlcnJvciBoYXMgYWxyZWFkeSBiZWVuIHJlcG9ydGVkLgogIE51bGwgcmVwb3J0SW52YWxpZChUcmVlTm9kZSBub2RlLCBTdHJpbmcgbWVzc2FnZSkgewogICAgdGhyb3cgbmV3IF9BYm9ydER1ZVRvSW52YWxpZEV4cHJlc3Npb24obm9kZSwgbWVzc2FnZSk7CiAgfQoKICAvLy8gUHJvZHVjZSBhbiB1bmV2YWx1YXRlZCBjb25zdGFudCBub2RlIGZvciBhbiBleHByZXNzaW9uLgogIENvbnN0YW50IHVuZXZhbHVhdGVkKEV4cHJlc3Npb24gb3JpZ2luYWwsIEV4cHJlc3Npb24gcmVwbGFjZW1lbnQpIHsKICAgIHJlcGxhY2VtZW50LmZpbGVPZmZzZXQgPSBvcmlnaW5hbC5maWxlT2Zmc2V0OwogICAgLy8gVE9ETyhhc2tlc2Msam9obm5pd2ludGhlcik6IFByZXNlcnZlIGZpbGVVcmkgb24gW3JlcGxhY2VtZW50XS4KICAgIHJldHVybiBuZXcgVW5ldmFsdWF0ZWRDb25zdGFudChyZXBsYWNlbWVudCk7CiAgfQoKICAvLy8gRXh0cmFjdCBhbiBleHByZXNzaW9uIGZyb20gYSAocG9zc2libHkgdW5ldmFsdWF0ZWQpIGNvbnN0YW50IHRvIGJlY29tZQogIC8vLyBwYXJ0IG9mIHRoZSBleHByZXNzaW9uIHRyZWUgb2YgYW5vdGhlciB1bmV2YWx1YXRlZCBjb25zdGFudC4KICAvLy8gTWFrZXMgc3VyZSBhIHBhcnRpY3VsYXIgZXhwcmVzc2lvbiBvY2N1cnMgb25seSBvbmNlIGluIHRoZSB0cmVlIGJ5CiAgLy8vIGNsb25pbmcgZnVydGhlciBpbnN0YW5jZXMuCiAgRXhwcmVzc2lvbiBleHRyYWN0KENvbnN0YW50IGNvbnN0YW50KSB7CiAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBjb25zdGFudC5hc0V4cHJlc3Npb24oKTsKICAgIGlmICghcmVwbGFjZW1lbnROb2Rlcy5hZGQoZXhwcmVzc2lvbikpIHsKICAgICAgZXhwcmVzc2lvbiA9IGNsb25lci5jbG9uZShleHByZXNzaW9uKTsKICAgICAgcmVwbGFjZW1lbnROb2Rlcy5hZGQoZXhwcmVzc2lvbik7CiAgICB9CiAgICByZXR1cm4gZXhwcmVzc2lvbjsKICB9CgogIC8vLyBFbnRlciBhIHJlZ2lvbiBvZiBsYXp5IGV2YWx1YXRpb24uIEFsbCBsZWFmIG5vZGVzIGFyZSBldmFsdWF0ZWQgbm9ybWFsbHkKICAvLy8gKHRvIGVuc3VyZSBpbmxpbmluZyBvZiByZWZlcmVuY2VkIGxvY2FsIHZhcmlhYmxlcyksIGJ1dCBjb21wb3NpdGUgbm9kZXMKICAvLy8gYWx3YXlzIHRyZWF0IHRoZWlyIGNoaWxkcmVuIGFzIHVuZXZhbHVhdGVkLCByZXN1bHRpbmcgaW4gYSBwYXJ0aWFsbHkKICAvLy8gZXZhbHVhdGVkIGNsb25lIG9mIHRoZSBvcmlnaW5hbCBleHByZXNzaW9uIHRyZWUuCiAgLy8vIExhenkgZXZhbHVhdGlvbiBpcyB1c2VkIGZvciB0aGUgc3VidHJlZXMgb2YgbGF6eSBvcGVyYXRpb25zIHdpdGgKICAvLy8gdW5ldmFsdWF0ZWQgY29uZGl0aW9ucyB0byBlbnN1cmUgbm8gZXJyb3JzIGFyZSByZXBvcnRlZCBmb3IgcHJvYmxlbXMKICAvLy8gaW4gdGhlIHN1YnRyZWUgYXMgbG9uZyBhcyB0aGUgc3VidHJlZSBpcyBwb3RlbnRpYWxseSBjb25zdGFudC4KICB2b2lkIGVudGVyTGF6eSgpID0+IGxhenlEZXB0aCsrOwoKICAvLy8gTGVhdmUgYSAocG9zc2libHkgbmVzdGVkKSByZWdpb24gb2YgbGF6eSBldmFsdWF0aW9uLgogIHZvaWQgbGVhdmVMYXp5KCkgPT4gbGF6eURlcHRoLS07CgogIENvbnN0YW50IGxvd2VyKENvbnN0YW50IG9yaWdpbmFsLCBDb25zdGFudCByZXBsYWNlbWVudCkgewogICAgaWYgKCFpZGVudGljYWwob3JpZ2luYWwsIHJlcGxhY2VtZW50KSkgewogICAgICBvcmlnaW5hbCA9IGNhbm9uaWNhbGl6ZShvcmlnaW5hbCk7CiAgICAgIHJlcGxhY2VtZW50ID0gY2Fub25pY2FsaXplKHJlcGxhY2VtZW50KTsKICAgICAgbG93ZXJlZFtyZXBsYWNlbWVudF0gPSBvcmlnaW5hbDsKICAgICAgcmV0dXJuIHJlcGxhY2VtZW50OwogICAgfQogICAgcmV0dXJuIGNhbm9uaWNhbGl6ZShyZXBsYWNlbWVudCk7CiAgfQoKICBDb25zdGFudCB1bmxvd2VyKENvbnN0YW50IGNvbnN0YW50KSB7CiAgICByZXR1cm4gbG93ZXJlZFtjb25zdGFudF0gPz8gY29uc3RhbnQ7CiAgfQoKICBDb25zdGFudCBsb3dlckxpc3RDb25zdGFudChMaXN0Q29uc3RhbnQgY29uc3RhbnQpIHsKICAgIGlmIChzaG91bGRCZVVuZXZhbHVhdGVkKSByZXR1cm4gY29uc3RhbnQ7CiAgICByZXR1cm4gbG93ZXIoY29uc3RhbnQsIGJhY2tlbmQubG93ZXJMaXN0Q29uc3RhbnQoY29uc3RhbnQpKTsKICB9CgogIENvbnN0YW50IGxvd2VyU2V0Q29uc3RhbnQoU2V0Q29uc3RhbnQgY29uc3RhbnQpIHsKICAgIGlmIChzaG91bGRCZVVuZXZhbHVhdGVkKSByZXR1cm4gY29uc3RhbnQ7CiAgICByZXR1cm4gbG93ZXIoY29uc3RhbnQsIGJhY2tlbmQubG93ZXJTZXRDb25zdGFudChjb25zdGFudCkpOwogIH0KCiAgQ29uc3RhbnQgbG93ZXJNYXBDb25zdGFudChNYXBDb25zdGFudCBjb25zdGFudCkgewogICAgaWYgKHNob3VsZEJlVW5ldmFsdWF0ZWQpIHJldHVybiBjb25zdGFudDsKICAgIHJldHVybiBsb3dlcihjb25zdGFudCwgYmFja2VuZC5sb3dlck1hcENvbnN0YW50KGNvbnN0YW50KSk7CiAgfQoKICAvLy8gRXZhbHVhdGUgW25vZGVdIGFuZCBwb3NzaWJseSBjYWNoZSB0aGUgZXZhbHVhdGlvbiByZXN1bHQuCiAgLy8vIEB0aHJvd3MgX0Fib3J0RHVlVG9FcnJvciBvciBfQWJvcnREdWVUb0ludmFsaWRFeHByZXNzaW9uIGlmIGV4cHJlc3Npb24KICAvLy8gY2FuJ3QgYmUgZXZhbHVhdGVkLgogIENvbnN0YW50IF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24oRXhwcmVzc2lvbiBub2RlKSB7CiAgICBib29sIHdhc1VuZXZhbHVhdGVkID0gc2VlblVuZXZhbHVhdGVkQ2hpbGQ7CiAgICBzZWVuVW5ldmFsdWF0ZWRDaGlsZCA9IGZhbHNlOwogICAgQ29uc3RhbnQgcmVzdWx0OwogICAgaWYgKGVudi5pc0VtcHR5KSB7CiAgICAgIC8vIFdlIG9ubHkgdHJ5IHRvIGV2YWx1YXRlIHRoZSBzYW1lIFtub2RlXSAqb25jZSogd2l0aGluIGFuIGVtcHR5CiAgICAgIC8vIGVudmlyb25tZW50LgogICAgICBpZiAobm9kZUNhY2hlLmNvbnRhaW5zS2V5KG5vZGUpKSB7CiAgICAgICAgcmVzdWx0ID0gbm9kZUNhY2hlW25vZGVdID8/IHJlcG9ydChub2RlLCBtZXNzYWdlQ29uc3RFdmFsQ2lyY3VsYXJpdHkpOwogICAgICB9IGVsc2UgewogICAgICAgIG5vZGVDYWNoZVtub2RlXSA9IG51bGw7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHJlc3VsdCA9IG5vZGVDYWNoZVtub2RlXSA9IG5vZGUuYWNjZXB0KHRoaXMpOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIG5vZGVDYWNoZS5yZW1vdmUobm9kZSk7CiAgICAgICAgICByZXRocm93OwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmVzdWx0ID0gbm9kZS5hY2NlcHQodGhpcyk7CiAgICB9CiAgICBzZWVuVW5ldmFsdWF0ZWRDaGlsZCA9IHdhc1VuZXZhbHVhdGVkIHx8IHJlc3VsdCBpcyBVbmV2YWx1YXRlZENvbnN0YW50OwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIENvbnN0YW50IF9ldmFsdWF0ZU51bGxhYmxlU3ViZXhwcmVzc2lvbihFeHByZXNzaW9uIG5vZGUpIHsKICAgIGlmIChub2RlID09IG51bGwpIHJldHVybiBudWxsQ29uc3RhbnQ7CiAgICByZXR1cm4gX2V2YWx1YXRlU3ViZXhwcmVzc2lvbihub2RlKTsKICB9CgogIFQgcnVuSW5zaWRlQ29udGV4dDxUPihUcmVlTm9kZSBub2RlLCBUIGZ1bigpKSB7CiAgICB0cnkgewogICAgICBwdXNoQ29udGV4dChub2RlKTsKICAgICAgcmV0dXJuIGZ1bigpOwogICAgfSBmaW5hbGx5IHsKICAgICAgcG9wQ29udGV4dChub2RlKTsKICAgIH0KICB9CgogIFQgcnVuSW5zaWRlQ29udGV4dElmTm9Db250ZXh0PFQ+KFRyZWVOb2RlIG5vZGUsIFQgZnVuKCkpIHsKICAgIGlmIChjb250ZXh0Q2hhaW4uaXNFbXB0eSkgewogICAgICByZXR1cm4gcnVuSW5zaWRlQ29udGV4dChub2RlLCBmdW4pOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGZ1bigpOwogICAgfQogIH0KCiAgdm9pZCBwdXNoQ29udGV4dChUcmVlTm9kZSBjb250ZXh0Tm9kZSkgewogICAgY29udGV4dENoYWluLmFkZChjb250ZXh0Tm9kZSk7CiAgfQoKICB2b2lkIHBvcENvbnRleHQoVHJlZU5vZGUgY29udGV4dE5vZGUpIHsKICAgIGFzc2VydChjb250ZXh0Q2hhaW4ubGFzdCA9PSBjb250ZXh0Tm9kZSk7CiAgICBjb250ZXh0Q2hhaW4ubGVuZ3RoID0gY29udGV4dENoYWluLmxlbmd0aCAtIDE7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudCBkZWZhdWx0VHJlZU5vZGUoTm9kZSBub2RlKSB7CiAgICAvLyBPbmx5IGEgc3Vic2V0IG9mIHRoZSBleHByZXNzaW9uIGxhbmd1YWdlIGlzIHZhbGlkIGZvciBjb25zdGFudAogICAgLy8gZXZhbHVhdGlvbi4KICAgIHJldHVybiByZXBvcnRJbnZhbGlkKAogICAgICAgIG5vZGUsICdDb25zdGFudCBldmFsdWF0aW9uIGhhcyBubyBzdXBwb3J0IGZvciAke25vZGUucnVudGltZVR5cGV9IScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnQgdmlzaXROdWxsTGl0ZXJhbChOdWxsTGl0ZXJhbCBub2RlKSA9PiBudWxsQ29uc3RhbnQ7CgogIEBvdmVycmlkZQogIENvbnN0YW50IHZpc2l0Qm9vbExpdGVyYWwoQm9vbExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIG1ha2VCb29sQ29uc3RhbnQobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudCB2aXNpdEludExpdGVyYWwoSW50TGl0ZXJhbCBub2RlKSB7CiAgICAvLyBUaGUgZnJvbnRlbmQgZW5zdXJlcyB0aGF0IGludGVnZXIgbGl0ZXJhbHMgYXJlIHZhbGlkIGFjY29yZGluZyB0byB0aGUKICAgIC8vIHRhcmdldCByZXByZXNlbnRhdGlvbi4KICAgIHJldHVybiB0YXJnZXRpbmdKYXZhU2NyaXB0CiAgICAgICAgPyBjYW5vbmljYWxpemUobmV3IEphdmFTY3JpcHRJbnRDb25zdGFudC5mcm9tVUludDY0KG5vZGUudmFsdWUpKQogICAgICAgIDogY2Fub25pY2FsaXplKG5ldyBJbnRDb25zdGFudChub2RlLnZhbHVlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudCB2aXNpdERvdWJsZUxpdGVyYWwoRG91YmxlTGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gY2Fub25pY2FsaXplKG1ha2VEb3VibGVDb25zdGFudChub2RlLnZhbHVlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudCB2aXNpdFN0cmluZ0xpdGVyYWwoU3RyaW5nTGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gY2Fub25pY2FsaXplKG5ldyBTdHJpbmdDb25zdGFudChub2RlLnZhbHVlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudCB2aXNpdFR5cGVMaXRlcmFsKFR5cGVMaXRlcmFsIG5vZGUpIHsKICAgIGZpbmFsIERhcnRUeXBlIHR5cGUgPSBldmFsdWF0ZURhcnRUeXBlKG5vZGUsIG5vZGUudHlwZSk7CiAgICByZXR1cm4gY2Fub25pY2FsaXplKG5ldyBUeXBlTGl0ZXJhbENvbnN0YW50KHR5cGUpKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50IHZpc2l0Q29uc3RhbnRFeHByZXNzaW9uKENvbnN0YW50RXhwcmVzc2lvbiBub2RlKSB7CiAgICBDb25zdGFudCBjb25zdGFudCA9IG5vZGUuY29uc3RhbnQ7CiAgICBDb25zdGFudCByZXN1bHQgPSBjb25zdGFudDsKICAgIGlmIChjb25zdGFudCBpcyBVbmV2YWx1YXRlZENvbnN0YW50KSB7CiAgICAgIHJlc3VsdCA9IHJ1bkluc2lkZUNvbnRleHQoY29uc3RhbnQuZXhwcmVzc2lvbiwgKCkgewogICAgICAgIHJldHVybiBfZXZhbHVhdGVTdWJleHByZXNzaW9uKGNvbnN0YW50LmV4cHJlc3Npb24pOwogICAgICB9KTsKICAgIH0gZWxzZSBpZiAodGFyZ2V0aW5nSmF2YVNjcmlwdCkgewogICAgICBpZiAoY29uc3RhbnQgaXMgRG91YmxlQ29uc3RhbnQpIHsKICAgICAgICBkb3VibGUgdmFsdWUgPSBjb25zdGFudC52YWx1ZTsKICAgICAgICAvLyBUT0RPKGFza2VzYywgZmlzaHl0aGVmaXNoKTogSGFuZGxlIGluZmluaXRlIGludGVnZXJzLgogICAgICAgIGlmICh2YWx1ZS5pc0Zpbml0ZSAmJiB2YWx1ZS50cnVuY2F0ZVRvRG91YmxlKCkgPT0gdmFsdWUpIHsKICAgICAgICAgIHJlc3VsdCA9IG5ldyBKYXZhU2NyaXB0SW50Q29uc3RhbnQuZnJvbURvdWJsZSh2YWx1ZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAvLyBJZiB0aGVyZSB3ZXJlIGFscmVhZHkgY29uc3RhbnRzIGluIHRoZSBBU1QgdGhlbiB3ZSBtYWtlIHN1cmUgd2UKICAgIC8vIHJlLWNhbm9uaWNhbGl6ZSB0aGVtLiAgQWZ0ZXIgcnVubmluZyB0aGUgdHJhbnNmb3JtZXIgd2Ugd2lsbCB0aGVyZWZvcmUKICAgIC8vIGhhdmUgYSBmdWxseS1jYW5vbmljYWxpemVkIGNvbnN0YW50IERBRyB3aXRoIHJvb3RzIGNvbWluZyBmcm9tIHRoZQogICAgLy8gW0NvbnN0YW50RXhwcmVzc2lvbl0gbm9kZXMgaW4gdGhlIEFTVC4KICAgIHJldHVybiBjYW5vbmljYWxpemUocmVzdWx0KTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50IHZpc2l0TGlzdExpdGVyYWwoTGlzdExpdGVyYWwgbm9kZSkgewogICAgaWYgKCFub2RlLmlzQ29uc3QpIHsKICAgICAgcmV0dXJuIHJlcG9ydCgKICAgICAgICAgIG5vZGUsIHRlbXBsYXRlQ29uc3RFdmFsTm9uQ29uc3RhbnRMaXRlcmFsLndpdGhBcmd1bWVudHMoJ0xpc3QnKSk7CiAgICB9CiAgICBmaW5hbCBMaXN0Q29uc3RhbnRCdWlsZGVyIGJ1aWxkZXIgPQogICAgICAgIG5ldyBMaXN0Q29uc3RhbnRCdWlsZGVyKG5vZGUsIG5vZGUudHlwZUFyZ3VtZW50LCB0aGlzKTsKICAgIGZvciAoRXhwcmVzc2lvbiBlbGVtZW50IGluIG5vZGUuZXhwcmVzc2lvbnMpIHsKICAgICAgYnVpbGRlci5hZGQoZWxlbWVudCk7CiAgICB9CiAgICByZXR1cm4gYnVpbGRlci5idWlsZCgpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnQgdmlzaXRMaXN0Q29uY2F0ZW5hdGlvbihMaXN0Q29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICBmaW5hbCBMaXN0Q29uc3RhbnRCdWlsZGVyIGJ1aWxkZXIgPQogICAgICAgIG5ldyBMaXN0Q29uc3RhbnRCdWlsZGVyKG5vZGUsIG5vZGUudHlwZUFyZ3VtZW50LCB0aGlzKTsKICAgIGZvciAoRXhwcmVzc2lvbiBsaXN0IGluIG5vZGUubGlzdHMpIHsKICAgICAgYnVpbGRlci5hZGRTcHJlYWQobGlzdCk7CiAgICB9CiAgICByZXR1cm4gYnVpbGRlci5idWlsZCgpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnQgdmlzaXRTZXRMaXRlcmFsKFNldExpdGVyYWwgbm9kZSkgewogICAgaWYgKCFub2RlLmlzQ29uc3QpIHsKICAgICAgcmV0dXJuIHJlcG9ydCgKICAgICAgICAgIG5vZGUsIHRlbXBsYXRlQ29uc3RFdmFsTm9uQ29uc3RhbnRMaXRlcmFsLndpdGhBcmd1bWVudHMoJ1NldCcpKTsKICAgIH0KICAgIGZpbmFsIFNldENvbnN0YW50QnVpbGRlciBidWlsZGVyID0KICAgICAgICBuZXcgU2V0Q29uc3RhbnRCdWlsZGVyKG5vZGUsIG5vZGUudHlwZUFyZ3VtZW50LCB0aGlzKTsKICAgIGZvciAoRXhwcmVzc2lvbiBlbGVtZW50IGluIG5vZGUuZXhwcmVzc2lvbnMpIHsKICAgICAgYnVpbGRlci5hZGQoZWxlbWVudCk7CiAgICB9CiAgICByZXR1cm4gYnVpbGRlci5idWlsZCgpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnQgdmlzaXRTZXRDb25jYXRlbmF0aW9uKFNldENvbmNhdGVuYXRpb24gbm9kZSkgewogICAgZmluYWwgU2V0Q29uc3RhbnRCdWlsZGVyIGJ1aWxkZXIgPQogICAgICAgIG5ldyBTZXRDb25zdGFudEJ1aWxkZXIobm9kZSwgbm9kZS50eXBlQXJndW1lbnQsIHRoaXMpOwogICAgZm9yIChFeHByZXNzaW9uIHNldF8gaW4gbm9kZS5zZXRzKSB7CiAgICAgIGJ1aWxkZXIuYWRkU3ByZWFkKHNldF8pOwogICAgfQogICAgcmV0dXJuIGJ1aWxkZXIuYnVpbGQoKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50IHZpc2l0TWFwTGl0ZXJhbChNYXBMaXRlcmFsIG5vZGUpIHsKICAgIGlmICghbm9kZS5pc0NvbnN0KSB7CiAgICAgIHJldHVybiByZXBvcnQoCiAgICAgICAgICBub2RlLCB0ZW1wbGF0ZUNvbnN0RXZhbE5vbkNvbnN0YW50TGl0ZXJhbC53aXRoQXJndW1lbnRzKCdNYXAnKSk7CiAgICB9CiAgICBmaW5hbCBNYXBDb25zdGFudEJ1aWxkZXIgYnVpbGRlciA9CiAgICAgICAgbmV3IE1hcENvbnN0YW50QnVpbGRlcihub2RlLCBub2RlLmtleVR5cGUsIG5vZGUudmFsdWVUeXBlLCB0aGlzKTsKICAgIGZvciAoTWFwRW50cnkgZWxlbWVudCBpbiBub2RlLmVudHJpZXMpIHsKICAgICAgYnVpbGRlci5hZGQoZWxlbWVudCk7CiAgICB9CiAgICByZXR1cm4gYnVpbGRlci5idWlsZCgpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnQgdmlzaXRNYXBDb25jYXRlbmF0aW9uKE1hcENvbmNhdGVuYXRpb24gbm9kZSkgewogICAgZmluYWwgTWFwQ29uc3RhbnRCdWlsZGVyIGJ1aWxkZXIgPQogICAgICAgIG5ldyBNYXBDb25zdGFudEJ1aWxkZXIobm9kZSwgbm9kZS5rZXlUeXBlLCBub2RlLnZhbHVlVHlwZSwgdGhpcyk7CiAgICBmb3IgKEV4cHJlc3Npb24gbWFwIGluIG5vZGUubWFwcykgewogICAgICBidWlsZGVyLmFkZFNwcmVhZChtYXApOwogICAgfQogICAgcmV0dXJuIGJ1aWxkZXIuYnVpbGQoKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50IHZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKEZ1bmN0aW9uRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gcmVwb3J0KAogICAgICAgIG5vZGUsIHRlbXBsYXRlQ29uc3RFdmFsTm9uQ29uc3RhbnRMaXRlcmFsLndpdGhBcmd1bWVudHMoJ0Z1bmN0aW9uJykpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnQgdmlzaXRDb25zdHJ1Y3Rvckludm9jYXRpb24oQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUpIHsKICAgIGZpbmFsIENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yID0gbm9kZS50YXJnZXQ7CiAgICBmaW5hbCBDbGFzcyBrbGFzcyA9IGNvbnN0cnVjdG9yLmVuY2xvc2luZ0NsYXNzOwogICAgYm9vbCBpc1N5bWJvbCA9IGtsYXNzID09IGNvcmVUeXBlcy5pbnRlcm5hbFN5bWJvbENsYXNzOwogICAgaWYgKCFjb25zdHJ1Y3Rvci5pc0NvbnN0KSB7CiAgICAgIHJldHVybiByZXBvcnRJbnZhbGlkKG5vZGUsICdOb24tY29uc3QgY29uc3RydWN0b3IgaW52b2NhdGlvbi4nKTsKICAgIH0KICAgIGlmIChjb25zdHJ1Y3Rvci5mdW5jdGlvbi5ib2R5ICE9IG51bGwgJiYKICAgICAgICBjb25zdHJ1Y3Rvci5mdW5jdGlvbi5ib2R5IGlzISBFbXB0eVN0YXRlbWVudCkgewogICAgICByZXR1cm4gcmVwb3J0SW52YWxpZCgKICAgICAgICAgIG5vZGUsCiAgICAgICAgICAnQ29uc3RydWN0b3IgIiRub2RlIiBoYXMgbm9uLXRyaXZpYWwgYm9keSAnCiAgICAgICAgICAnIiR7Y29uc3RydWN0b3IuZnVuY3Rpb24uYm9keS5ydW50aW1lVHlwZX0iLicpOwogICAgfQogICAgaWYgKGtsYXNzLmlzQWJzdHJhY3QpIHsKICAgICAgcmV0dXJuIHJlcG9ydEludmFsaWQoCiAgICAgICAgICBub2RlLCAnQ29uc3RydWN0b3IgIiRub2RlIiBiZWxvbmdzIHRvIGFic3RyYWN0IGNsYXNzICIke2tsYXNzfSIuJyk7CiAgICB9CgogICAgZmluYWwgTGlzdDxDb25zdGFudD4gcG9zaXRpb25hbHMgPQogICAgICAgIGV2YWx1YXRlUG9zaXRpb25hbEFyZ3VtZW50cyhub2RlLmFyZ3VtZW50cyk7CiAgICBmaW5hbCBNYXA8U3RyaW5nLCBDb25zdGFudD4gbmFtZWQgPSBldmFsdWF0ZU5hbWVkQXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKTsKCiAgICBpZiAoaXNTeW1ib2wgJiYgc2hvdWxkQmVVbmV2YWx1YXRlZCkgewogICAgICByZXR1cm4gdW5ldmFsdWF0ZWQoCiAgICAgICAgICBub2RlLAogICAgICAgICAgbmV3IENvbnN0cnVjdG9ySW52b2NhdGlvbihjb25zdHJ1Y3RvciwKICAgICAgICAgICAgICB1bmV2YWx1YXRlZEFyZ3VtZW50cyhwb3NpdGlvbmFscywgbmFtZWQsIG5vZGUuYXJndW1lbnRzLnR5cGVzKSwKICAgICAgICAgICAgICBpc0NvbnN0OiB0cnVlKSk7CiAgICB9CgogICAgLy8gU3BlY2lhbCBjYXNlIHRoZSBkYXJ0OmNvcmUncyBTeW1ib2wgY2xhc3MgaGVyZSBhbmQgY29udmVydCBpdCB0byBhCiAgICAvLyBbU3ltYm9sQ29uc3RhbnRdLiAgRm9yIGludmFsaWQgdmFsdWVzIHdlIHJlcG9ydCBhIGNvbXBpbGUtdGltZSBlcnJvci4KICAgIGlmIChpc1N5bWJvbCkgewogICAgICBmaW5hbCBDb25zdGFudCBuYW1lVmFsdWUgPSBwb3NpdGlvbmFscy5zaW5nbGU7CgogICAgICBpZiAobmFtZVZhbHVlIGlzIFN0cmluZ0NvbnN0YW50ICYmIGlzVmFsaWRTeW1ib2xOYW1lKG5hbWVWYWx1ZS52YWx1ZSkpIHsKICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplKG5ldyBTeW1ib2xDb25zdGFudChuYW1lVmFsdWUudmFsdWUsIG51bGwpKTsKICAgICAgfQogICAgICByZXR1cm4gcmVwb3J0KG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwuZmlyc3QsCiAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRTeW1ib2xOYW1lLndpdGhBcmd1bWVudHMobmFtZVZhbHVlKSk7CiAgICB9CgogICAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9CiAgICAgICAgZXZhbHVhdGVUeXBlQXJndW1lbnRzKG5vZGUsIG5vZGUuYXJndW1lbnRzKTsKCiAgICAvLyBGaWxsIGluIGFueSBtaXNzaW5nIHR5cGUgYXJndW1lbnRzIHdpdGggImR5bmFtaWMiLgogICAgZm9yIChpbnQgaSA9IHR5cGVBcmd1bWVudHMubGVuZ3RoOyBpIDwga2xhc3MudHlwZVBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgdHlwZUFyZ3VtZW50cy5hZGQoY29uc3QgRHluYW1pY1R5cGUoKSk7CiAgICB9CgogICAgLy8gU3RhcnQgYnVpbGRpbmcgYSBuZXcgaW5zdGFuY2UuCiAgICByZXR1cm4gd2l0aE5ld0luc3RhbmNlQnVpbGRlcihrbGFzcywgdHlwZUFyZ3VtZW50cywgKCkgewogICAgICByZXR1cm4gcnVuSW5zaWRlQ29udGV4dElmTm9Db250ZXh0KG5vZGUsICgpIHsKICAgICAgICAvLyAiUnVuIiB0aGUgY29uc3RydWN0b3IgKGFuZCBhbnkgc3VwZXIgY29uc3RydWN0b3IgY2FsbHMpLCB3aGljaCB3aWxsCiAgICAgICAgLy8gaW5pdGlhbGl6ZSB0aGUgZmllbGRzIG9mIHRoZSBuZXcgaW5zdGFuY2UuCiAgICAgICAgaWYgKHNob3VsZEJlVW5ldmFsdWF0ZWQpIHsKICAgICAgICAgIGVudGVyTGF6eSgpOwogICAgICAgICAgaGFuZGxlQ29uc3RydWN0b3JJbnZvY2F0aW9uKAogICAgICAgICAgICAgIGNvbnN0cnVjdG9yLCB0eXBlQXJndW1lbnRzLCBwb3NpdGlvbmFscywgbmFtZWQpOwogICAgICAgICAgbGVhdmVMYXp5KCk7CiAgICAgICAgICByZXR1cm4gdW5ldmFsdWF0ZWQobm9kZSwgaW5zdGFuY2VCdWlsZGVyLmJ1aWxkVW5ldmFsdWF0ZWRJbnN0YW5jZSgpKTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlQ29uc3RydWN0b3JJbnZvY2F0aW9uKAogICAgICAgICAgICBjb25zdHJ1Y3RvciwgdHlwZUFyZ3VtZW50cywgcG9zaXRpb25hbHMsIG5hbWVkKTsKICAgICAgICBpZiAoc2hvdWxkQmVVbmV2YWx1YXRlZCkgewogICAgICAgICAgcmV0dXJuIHVuZXZhbHVhdGVkKG5vZGUsIGluc3RhbmNlQnVpbGRlci5idWlsZFVuZXZhbHVhdGVkSW5zdGFuY2UoKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBjYW5vbmljYWxpemUoaW5zdGFuY2VCdWlsZGVyLmJ1aWxkSW5zdGFuY2UoKSk7CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudCB2aXNpdEluc3RhbmNlQ3JlYXRpb24oSW5zdGFuY2VDcmVhdGlvbiBub2RlKSB7CiAgICByZXR1cm4gd2l0aE5ld0luc3RhbmNlQnVpbGRlcihub2RlLmNsYXNzTm9kZSwgbm9kZS50eXBlQXJndW1lbnRzLCAoKSB7CiAgICAgIGZvciAoQXNzZXJ0U3RhdGVtZW50IHN0YXRlbWVudCBpbiBub2RlLmFzc2VydHMpIHsKICAgICAgICBjaGVja0Fzc2VydChzdGF0ZW1lbnQpOwogICAgICB9CiAgICAgIG5vZGUuZmllbGRWYWx1ZXMuZm9yRWFjaCgoUmVmZXJlbmNlIGZpZWxkUmVmLCBFeHByZXNzaW9uIHZhbHVlKSB7CiAgICAgICAgaW5zdGFuY2VCdWlsZGVyLnNldEZpZWxkVmFsdWUoCiAgICAgICAgICAgIGZpZWxkUmVmLmFzRmllbGQsIF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24odmFsdWUpKTsKICAgICAgfSk7CiAgICAgIG5vZGUudW51c2VkQXJndW1lbnRzLmZvckVhY2goKEV4cHJlc3Npb24gdmFsdWUpIHsKICAgICAgICBDb25zdGFudCBjb25zdGFudCA9IF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24odmFsdWUpOwogICAgICAgIGlmIChjb25zdGFudCBpcyBVbmV2YWx1YXRlZENvbnN0YW50KSB7CiAgICAgICAgICBpbnN0YW5jZUJ1aWxkZXIudW51c2VkQXJndW1lbnRzLmFkZChleHRyYWN0KGNvbnN0YW50KSk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgaWYgKHNob3VsZEJlVW5ldmFsdWF0ZWQpIHsKICAgICAgICByZXR1cm4gdW5ldmFsdWF0ZWQobm9kZSwgaW5zdGFuY2VCdWlsZGVyLmJ1aWxkVW5ldmFsdWF0ZWRJbnN0YW5jZSgpKTsKICAgICAgfQogICAgICByZXR1cm4gY2Fub25pY2FsaXplKGluc3RhbmNlQnVpbGRlci5idWlsZEluc3RhbmNlKCkpOwogICAgfSk7CiAgfQoKICBib29sIGlzVmFsaWRTeW1ib2xOYW1lKFN0cmluZyBuYW1lKSB7CiAgICAvLyBTZWUgaHR0cHM6Ly9hcGkuZGFydGxhbmcub3JnL3N0YWJsZS8yLjAuMC9kYXJ0LWNvcmUvU3ltYm9sL1N5bWJvbC5odG1sOgogICAgLy8KICAgIC8vICBBIHF1YWxpZmllZCBuYW1lIGlzIGEgdmFsaWQgbmFtZSBwcmVjZWRlZCBieSBhIHB1YmxpYyBpZGVudGlmaWVyIG5hbWUKICAgIC8vICBhbmQgYSAnLicsIGUuZy4sIGZvby5iYXIuYmF6PSBpcyBhIHF1YWxpZmllZCB2ZXJzaW9uIG9mIGJhej0uCiAgICAvLwogICAgLy8gIFRoYXQgbWVhbnMgdGhhdCB0aGUgY29udGVudCBvZiB0aGUgbmFtZSBTdHJpbmcgbXVzdCBiZSBlaXRoZXIKICAgIC8vICAgICAtIGEgdmFsaWQgcHVibGljIERhcnQgaWRlbnRpZmllciAodGhhdCBpcywgYW4gaWRlbnRpZmllciBub3QKICAgIC8vICAgICAgIHN0YXJ0aW5nIHdpdGggIl8iKSwKICAgIC8vICAgICAtIHN1Y2ggYW4gaWRlbnRpZmllciBmb2xsb3dlZCBieSAiPSIgKGEgc2V0dGVyIG5hbWUpLAogICAgLy8gICAgIC0gdGhlIG5hbWUgb2YgYSBkZWNsYXJhYmxlIG9wZXJhdG9yLAogICAgLy8gICAgIC0gYW55IG9mIHRoZSBhYm92ZSBwcmVjZWRlZCBieSBhbnkgbnVtYmVyIG9mIHF1YWxpZmllcnMsIHdoZXJlIGEKICAgIC8vICAgICAgIHF1YWxpZmllciBpcyBhIG5vbi1wcml2YXRlIGlkZW50aWZpZXIgZm9sbG93ZWQgYnkgJy4nLAogICAgLy8gICAgIC0gb3IgdGhlIGVtcHR5IHN0cmluZyAodGhlIGRlZmF1bHQgbmFtZSBvZiBhIGxpYnJhcnkgd2l0aCBubyBsaWJyYXJ5CiAgICAvLyAgICAgICBuYW1lIGRlY2xhcmF0aW9uKS4KCiAgICBjb25zdCBMaXN0PFN0cmluZz4gb3BlcmF0b3JOYW1lcyA9IGNvbnN0IDxTdHJpbmc+WwogICAgICAnKycsCiAgICAgICctJywKICAgICAgJyonLAogICAgICAnLycsCiAgICAgICclJywKICAgICAgJ34vJywKICAgICAgJyYnLAogICAgICAnfCcsCiAgICAgICdeJywKICAgICAgJ34nLAogICAgICAnPDwnLAogICAgICAnPj4nLAogICAgICAnPCcsCiAgICAgICc8PScsCiAgICAgICc+JywKICAgICAgJz49JywKICAgICAgJz09JywKICAgICAgJ1tdJywKICAgICAgJ1tdPScsCiAgICAgICd1bmFyeS0nCiAgICBdOwoKICAgIGlmIChuYW1lID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIGlmIChuYW1lID09ICcnKSByZXR1cm4gdHJ1ZTsKCiAgICBmaW5hbCBMaXN0PFN0cmluZz4gcGFydHMgPSBuYW1lLnNwbGl0KCcuJyk7CgogICAgLy8gRWFjaCBxdWFsaWZpZXIgbXVzdCBiZSBhIHB1YmxpYyBpZGVudGlmaWVyLgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyArK2kpIHsKICAgICAgaWYgKCFpc1ZhbGlkUHVibGljSWRlbnRpZmllcihwYXJ0c1tpXSkpIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBTdHJpbmcgbGFzdCA9IHBhcnRzLmxhc3Q7CiAgICBpZiAob3BlcmF0b3JOYW1lcy5jb250YWlucyhsYXN0KSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChsYXN0LmVuZHNXaXRoKCc9JykpIHsKICAgICAgbGFzdCA9IGxhc3Quc3Vic3RyaW5nKDAsIGxhc3QubGVuZ3RoIC0gMSk7CiAgICB9CiAgICBpZiAoIWlzVmFsaWRQdWJsaWNJZGVudGlmaWVyKGxhc3QpKSByZXR1cm4gZmFsc2U7CgogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLy8gRnJvbSB0aGUgRGFydCBMYW5ndWFnZSBzcGVjaWZpY2F0aW9uOgogIC8vLwogIC8vLyAgIElERU5USUZJRVI6CiAgLy8vICAgICBJREVOVElGSUVSX1NUQVJUIElERU5USUZJRVJfUEFSVCoKICAvLy8KICAvLy8gICBJREVOVElGSUVSX1NUQVJUOgogIC8vLyAgICAgICBJREVOVElGSUVSX1NUQVJUX05PX0RPTExBUiB8IOKAmCTigJkKICAvLy8KICAvLy8gICBJREVOVElGSUVSX1BBUlQ6CiAgLy8vICAgICAgIElERU5USUZJRVJfU1RBUlQgfCBESUdJVAogIC8vLwogIC8vLyAgIElERU5USUZJRVJfTk9fRE9MTEFSOgogIC8vLyAgICAgSURFTlRJRklFUl9TVEFSVF9OT19ET0xMQVIgSURFTlRJRklFUl9QQVJUX05PX0RPTExBUioKICAvLy8KICAvLy8gICBJREVOVElGSUVSX1NUQVJUX05PX0RPTExBUjoKICAvLy8gICAgICAgTEVUVEVSIHwgJ18nCiAgLy8vCiAgLy8vICAgSURFTlRJRklFUl9QQVJUX05PX0RPTExBUjoKICAvLy8gICAgICAgSURFTlRJRklFUl9TVEFSVF9OT19ET0xMQVIgfCBESUdJVAogIC8vLwogIHN0YXRpYyBmaW5hbCBSZWdFeHAgcHVibGljSWRlbnRpZmllclJlZ0V4cCA9CiAgICAgIG5ldyBSZWdFeHAocideW2EtekEtWiRdW2EtekEtWjAtOV8kXSokJyk7CgogIHN0YXRpYyBjb25zdCBMaXN0PFN0cmluZz4gbm9uVXNhYmxlS2V5d29yZHMgPSBjb25zdCA8U3RyaW5nPlsKICAgICdhc3NlcnQnLAogICAgJ2JyZWFrJywKICAgICdjYXNlJywKICAgICdjYXRjaCcsCiAgICAnY2xhc3MnLAogICAgJ2NvbnN0JywKICAgICdjb250aW51ZScsCiAgICAnZGVmYXVsdCcsCiAgICAnZG8nLAogICAgJ2Vsc2UnLAogICAgJ2VudW0nLAogICAgJ2V4dGVuZHMnLAogICAgJ2ZhbHNlJywKICAgICdmaW5hbCcsCiAgICAnZmluYWxseScsCiAgICAnZm9yJywKICAgICdpZicsCiAgICAnaW4nLAogICAgJ2lzJywKICAgICduZXcnLAogICAgJ251bGwnLAogICAgJ3JldGhyb3cnLAogICAgJ3JldHVybicsCiAgICAnc3VwZXInLAogICAgJ3N3aXRjaCcsCiAgICAndGhpcycsCiAgICAndGhyb3cnLAogICAgJ3RydWUnLAogICAgJ3RyeScsCiAgICAndmFyJywKICAgICd3aGlsZScsCiAgICAnd2l0aCcsCiAgXTsKCiAgYm9vbCBpc1ZhbGlkUHVibGljSWRlbnRpZmllcihTdHJpbmcgbmFtZSkgewogICAgcmV0dXJuIHB1YmxpY0lkZW50aWZpZXJSZWdFeHAuaGFzTWF0Y2gobmFtZSkgJiYKICAgICAgICAhbm9uVXNhYmxlS2V5d29yZHMuY29udGFpbnMobmFtZSk7CiAgfQoKICB2b2lkIGhhbmRsZUNvbnN0cnVjdG9ySW52b2NhdGlvbigKICAgICAgQ29uc3RydWN0b3IgY29uc3RydWN0b3IsCiAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIExpc3Q8Q29uc3RhbnQ+IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIE1hcDxTdHJpbmcsIENvbnN0YW50PiBuYW1lZEFyZ3VtZW50cykgewogICAgcmV0dXJuIHJ1bkluc2lkZUNvbnRleHQoY29uc3RydWN0b3IsICgpIHsKICAgICAgcmV0dXJuIHdpdGhOZXdFbnZpcm9ubWVudCgoKSB7CiAgICAgICAgZmluYWwgQ2xhc3Mga2xhc3MgPSBjb25zdHJ1Y3Rvci5lbmNsb3NpbmdDbGFzczsKICAgICAgICBmaW5hbCBGdW5jdGlvbk5vZGUgZnVuY3Rpb24gPSBjb25zdHJ1Y3Rvci5mdW5jdGlvbjsKCiAgICAgICAgLy8gV2Ugc2ltdWxhdGUgbm93IHRoZSBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uLgoKICAgICAgICAvLyBTdGVwIDEpIE1hcCB0eXBlIGFyZ3VtZW50cyBhbmQgbm9ybWFsIGFyZ3VtZW50cyBmcm9tIGNhbGxlciB0bwogICAgICAgIC8vICAgICAgICAgY2FsbGVlLgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwga2xhc3MudHlwZVBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGVudi5hZGRUeXBlUGFyYW1ldGVyVmFsdWUoa2xhc3MudHlwZVBhcmFtZXRlcnNbaV0sIHR5cGVBcmd1bWVudHNbaV0pOwogICAgICAgIH0KICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBmaW5hbCBWYXJpYWJsZURlY2xhcmF0aW9uIHBhcmFtZXRlciA9CiAgICAgICAgICAgICAgZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnNbaV07CiAgICAgICAgICBmaW5hbCBDb25zdGFudCB2YWx1ZSA9IChpIDwgcG9zaXRpb25hbEFyZ3VtZW50cy5sZW5ndGgpCiAgICAgICAgICAgICAgPyBwb3NpdGlvbmFsQXJndW1lbnRzW2ldCiAgICAgICAgICAgICAgOiBfZXZhbHVhdGVOdWxsYWJsZVN1YmV4cHJlc3Npb24ocGFyYW1ldGVyLmluaXRpYWxpemVyKTsKICAgICAgICAgIGVudi5hZGRWYXJpYWJsZVZhbHVlKHBhcmFtZXRlciwgdmFsdWUpOwogICAgICAgIH0KICAgICAgICBmb3IgKGZpbmFsIFZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyIGluIGZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycykgewogICAgICAgICAgZmluYWwgQ29uc3RhbnQgdmFsdWUgPSBuYW1lZEFyZ3VtZW50c1twYXJhbWV0ZXIubmFtZV0gPz8KICAgICAgICAgICAgICBfZXZhbHVhdGVOdWxsYWJsZVN1YmV4cHJlc3Npb24ocGFyYW1ldGVyLmluaXRpYWxpemVyKTsKICAgICAgICAgIGVudi5hZGRWYXJpYWJsZVZhbHVlKHBhcmFtZXRlciwgdmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgLy8gU3RlcCAyKSBSdW4gYWxsIGluaXRpYWxpemVycyAoaW5jbHVkaW5nIHN1cGVyIGNhbGxzKSB3aXRoIGVudmlyb25tZW50CiAgICAgICAgLy8gICAgICAgICBzZXR1cC4KICAgICAgICBmb3IgKGZpbmFsIEZpZWxkIGZpZWxkIGluIGtsYXNzLmZpZWxkcykgewogICAgICAgICAgaWYgKCFmaWVsZC5pc1N0YXRpYykgewogICAgICAgICAgICBpbnN0YW5jZUJ1aWxkZXIuc2V0RmllbGRWYWx1ZSgKICAgICAgICAgICAgICAgIGZpZWxkLCBfZXZhbHVhdGVOdWxsYWJsZVN1YmV4cHJlc3Npb24oZmllbGQuaW5pdGlhbGl6ZXIpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yIChmaW5hbCBJbml0aWFsaXplciBpbml0IGluIGNvbnN0cnVjdG9yLmluaXRpYWxpemVycykgewogICAgICAgICAgaWYgKGluaXQgaXMgRmllbGRJbml0aWFsaXplcikgewogICAgICAgICAgICBpbnN0YW5jZUJ1aWxkZXIuc2V0RmllbGRWYWx1ZSgKICAgICAgICAgICAgICAgIGluaXQuZmllbGQsIF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24oaW5pdC52YWx1ZSkpOwogICAgICAgICAgfSBlbHNlIGlmIChpbml0IGlzIExvY2FsSW5pdGlhbGl6ZXIpIHsKICAgICAgICAgICAgZmluYWwgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSA9IGluaXQudmFyaWFibGU7CiAgICAgICAgICAgIGVudi5hZGRWYXJpYWJsZVZhbHVlKAogICAgICAgICAgICAgICAgdmFyaWFibGUsIF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24odmFyaWFibGUuaW5pdGlhbGl6ZXIpKTsKICAgICAgICAgIH0gZWxzZSBpZiAoaW5pdCBpcyBTdXBlckluaXRpYWxpemVyKSB7CiAgICAgICAgICAgIGhhbmRsZUNvbnN0cnVjdG9ySW52b2NhdGlvbigKICAgICAgICAgICAgICAgIGluaXQudGFyZ2V0LAogICAgICAgICAgICAgICAgZXZhbHVhdGVTdXBlclR5cGVBcmd1bWVudHMoCiAgICAgICAgICAgICAgICAgICAgaW5pdCwgY29uc3RydWN0b3IuZW5jbG9zaW5nQ2xhc3Muc3VwZXJ0eXBlKSwKICAgICAgICAgICAgICAgIGV2YWx1YXRlUG9zaXRpb25hbEFyZ3VtZW50cyhpbml0LmFyZ3VtZW50cyksCiAgICAgICAgICAgICAgICBldmFsdWF0ZU5hbWVkQXJndW1lbnRzKGluaXQuYXJndW1lbnRzKSk7CiAgICAgICAgICB9IGVsc2UgaWYgKGluaXQgaXMgUmVkaXJlY3RpbmdJbml0aWFsaXplcikgewogICAgICAgICAgICAvLyBTaW5jZSBhIHJlZGlyZWN0aW5nIGNvbnN0cnVjdG9yIHRhcmdldHMgYSBjb25zdHJ1Y3RvciBvZiB0aGUgc2FtZQogICAgICAgICAgICAvLyBjbGFzcywgd2UgcGFzcyB0aGUgc2FtZSBbdHlwZUFyZ3VtZW50c10uCiAgICAgICAgICAgIGhhbmRsZUNvbnN0cnVjdG9ySW52b2NhdGlvbigKICAgICAgICAgICAgICAgIGluaXQudGFyZ2V0LAogICAgICAgICAgICAgICAgdHlwZUFyZ3VtZW50cywKICAgICAgICAgICAgICAgIGV2YWx1YXRlUG9zaXRpb25hbEFyZ3VtZW50cyhpbml0LmFyZ3VtZW50cyksCiAgICAgICAgICAgICAgICBldmFsdWF0ZU5hbWVkQXJndW1lbnRzKGluaXQuYXJndW1lbnRzKSk7CiAgICAgICAgICB9IGVsc2UgaWYgKGluaXQgaXMgQXNzZXJ0SW5pdGlhbGl6ZXIpIHsKICAgICAgICAgICAgY2hlY2tBc3NlcnQoaW5pdC5zdGF0ZW1lbnQpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHJlcG9ydEludmFsaWQoCiAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciwKICAgICAgICAgICAgICAgICdObyBzdXBwb3J0IGZvciBoYW5kbGluZyBpbml0aWFsaXplciBvZiB0eXBlICcKICAgICAgICAgICAgICAgICciJHtpbml0LnJ1bnRpbWVUeXBlfSIuJyk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmb3IgKFVuZXZhbHVhdGVkQ29uc3RhbnQgY29uc3RhbnQgaW4gZW52LnVuZXZhbHVhdGVkVW5yZWFkQ29uc3RhbnRzKSB7CiAgICAgICAgICBpbnN0YW5jZUJ1aWxkZXIudW51c2VkQXJndW1lbnRzLmFkZChleHRyYWN0KGNvbnN0YW50KSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0KCiAgdm9pZCBjaGVja0Fzc2VydChBc3NlcnRTdGF0ZW1lbnQgc3RhdGVtZW50KSB7CiAgICBmaW5hbCBDb25zdGFudCBjb25kaXRpb24gPSBfZXZhbHVhdGVTdWJleHByZXNzaW9uKHN0YXRlbWVudC5jb25kaXRpb24pOwoKICAgIGlmIChzaG91bGRCZVVuZXZhbHVhdGVkKSB7CiAgICAgIEV4cHJlc3Npb24gbWVzc2FnZSA9IG51bGw7CiAgICAgIGlmIChzdGF0ZW1lbnQubWVzc2FnZSAhPSBudWxsKSB7CiAgICAgICAgZW50ZXJMYXp5KCk7CiAgICAgICAgbWVzc2FnZSA9IGV4dHJhY3QoX2V2YWx1YXRlU3ViZXhwcmVzc2lvbihzdGF0ZW1lbnQubWVzc2FnZSkpOwogICAgICAgIGxlYXZlTGF6eSgpOwogICAgICB9CiAgICAgIGluc3RhbmNlQnVpbGRlci5hc3NlcnRzLmFkZChuZXcgQXNzZXJ0U3RhdGVtZW50KGV4dHJhY3QoY29uZGl0aW9uKSwKICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsCiAgICAgICAgICBjb25kaXRpb25TdGFydE9mZnNldDogc3RhdGVtZW50LmNvbmRpdGlvblN0YXJ0T2Zmc2V0LAogICAgICAgICAgY29uZGl0aW9uRW5kT2Zmc2V0OiBzdGF0ZW1lbnQuY29uZGl0aW9uRW5kT2Zmc2V0KSk7CiAgICB9IGVsc2UgaWYgKGNvbmRpdGlvbiBpcyBCb29sQ29uc3RhbnQpIHsKICAgICAgaWYgKCFjb25kaXRpb24udmFsdWUpIHsKICAgICAgICBpZiAoc3RhdGVtZW50Lm1lc3NhZ2UgPT0gbnVsbCkgewogICAgICAgICAgcmVwb3J0KHN0YXRlbWVudC5jb25kaXRpb24sIG1lc3NhZ2VDb25zdEV2YWxGYWlsZWRBc3NlcnRpb24pOwogICAgICAgIH0KICAgICAgICBmaW5hbCBDb25zdGFudCBtZXNzYWdlID0gX2V2YWx1YXRlU3ViZXhwcmVzc2lvbihzdGF0ZW1lbnQubWVzc2FnZSk7CiAgICAgICAgaWYgKHNob3VsZEJlVW5ldmFsdWF0ZWQpIHsKICAgICAgICAgIGluc3RhbmNlQnVpbGRlci5hc3NlcnRzLmFkZChuZXcgQXNzZXJ0U3RhdGVtZW50KGV4dHJhY3QoY29uZGl0aW9uKSwKICAgICAgICAgICAgICBtZXNzYWdlOiBleHRyYWN0KG1lc3NhZ2UpLAogICAgICAgICAgICAgIGNvbmRpdGlvblN0YXJ0T2Zmc2V0OiBzdGF0ZW1lbnQuY29uZGl0aW9uU3RhcnRPZmZzZXQsCiAgICAgICAgICAgICAgY29uZGl0aW9uRW5kT2Zmc2V0OiBzdGF0ZW1lbnQuY29uZGl0aW9uRW5kT2Zmc2V0KSk7CiAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlIGlzIFN0cmluZ0NvbnN0YW50KSB7CiAgICAgICAgICByZXBvcnQoCiAgICAgICAgICAgICAgc3RhdGVtZW50LmNvbmRpdGlvbiwKICAgICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEZhaWxlZEFzc2VydGlvbldpdGhNZXNzYWdlCiAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKG1lc3NhZ2UudmFsdWUpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVwb3J0KAogICAgICAgICAgICAgIHN0YXRlbWVudC5tZXNzYWdlLAogICAgICAgICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFR5cGUud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgICAgbWVzc2FnZSwKICAgICAgICAgICAgICAgICAgdHlwZUVudmlyb25tZW50LnN0cmluZ1R5cGUsCiAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZ2V0VHlwZSh0eXBlRW52aXJvbm1lbnQpKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZXBvcnQoCiAgICAgICAgICBzdGF0ZW1lbnQuY29uZGl0aW9uLAogICAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkVHlwZS53aXRoQXJndW1lbnRzKGNvbmRpdGlvbiwKICAgICAgICAgICAgICB0eXBlRW52aXJvbm1lbnQuYm9vbFR5cGUsIGNvbmRpdGlvbi5nZXRUeXBlKHR5cGVFbnZpcm9ubWVudCkpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50IHZpc2l0SW52YWxpZEV4cHJlc3Npb24oSW52YWxpZEV4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIHJlcG9ydEludmFsaWQobm9kZSwgbm9kZS5tZXNzYWdlKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50IHZpc2l0TWV0aG9kSW52b2NhdGlvbihNZXRob2RJbnZvY2F0aW9uIG5vZGUpIHsKICAgIC8vIFdlIGhhdmUgbm8gc3VwcG9ydCBmb3IgZ2VuZXJpYyBtZXRob2QgaW52b2NhdGlvbiBhdG0uCiAgICBhc3NlcnQobm9kZS5hcmd1bWVudHMubmFtZWQuaXNFbXB0eSk7CgogICAgZmluYWwgQ29uc3RhbnQgcmVjZWl2ZXIgPSBfZXZhbHVhdGVTdWJleHByZXNzaW9uKG5vZGUucmVjZWl2ZXIpOwogICAgZmluYWwgTGlzdDxDb25zdGFudD4gYXJndW1lbnRzID0KICAgICAgICBldmFsdWF0ZVBvc2l0aW9uYWxBcmd1bWVudHMobm9kZS5hcmd1bWVudHMpOwoKICAgIGlmIChzaG91bGRCZVVuZXZhbHVhdGVkKSB7CiAgICAgIHJldHVybiB1bmV2YWx1YXRlZCgKICAgICAgICAgIG5vZGUsCiAgICAgICAgICBuZXcgTWV0aG9kSW52b2NhdGlvbihleHRyYWN0KHJlY2VpdmVyKSwgbm9kZS5uYW1lLAogICAgICAgICAgICAgIHVuZXZhbHVhdGVkQXJndW1lbnRzKGFyZ3VtZW50cywge30sIG5vZGUuYXJndW1lbnRzLnR5cGVzKSkpOwogICAgfQoKICAgIGZpbmFsIFN0cmluZyBvcCA9IG5vZGUubmFtZS5uYW1lOwoKICAgIC8vIEhhbmRsZSA9PSBhbmQgIT0gZmlyc3QgKGl0J3MgY29tbW9uIGJldHdlZW4gYWxsIHR5cGVzKS4gU2luY2UgYGEgIT0gYmAgaXMKICAgIC8vIHBhcnNlZCBhcyBgIShhID09IGIpYCBpdCBpcyBoYW5kbGVkIGltcGxpY2l0bHkgdGhyb3VnaCA9PS4KICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEgJiYgb3AgPT0gJz09JykgewogICAgICBmaW5hbCBDb25zdGFudCByaWdodCA9IGFyZ3VtZW50c1swXTsKCiAgICAgIC8vIFtEb3VibGVDb25zdGFudF0gdXNlcyBbaWRlbnRpY2FsXSB0byBkZXRlcm1pbmUgZXF1YWxpdHksIHNvIHdlIG5lZWQgdHdvCiAgICAgIC8vIHNwZWNpYWwgY2FzZXM6CiAgICAgIC8vIFR3byBOYU5zIGFyZSBhbHdheXMgdW5lcXVhbCBldmVuIGlmIFtpZGVudGljYWxdIHJldHVybnMgYHRydWVgLgogICAgICBpZiAoaXNOYU4ocmVjZWl2ZXIpIHx8IGlzTmFOKHJpZ2h0KSkgewogICAgICAgIHJldHVybiBmYWxzZUNvbnN0YW50OwogICAgICB9CgogICAgICAvLyBUd28gemVybyB2YWx1ZXMgYXJlIGFsd2F5cyBlcXVhbCByZWdhcmRsZXNzIG9mIHNpZ24uCiAgICAgIGlmIChpc1plcm8ocmVjZWl2ZXIpKSB7CiAgICAgICAgcmV0dXJuIG1ha2VCb29sQ29uc3RhbnQoaXNaZXJvKHJpZ2h0KSk7CiAgICAgIH0KCiAgICAgIGlmIChyZWNlaXZlciBpcyBOdWxsQ29uc3RhbnQgfHwKICAgICAgICAgIHJlY2VpdmVyIGlzIEJvb2xDb25zdGFudCB8fAogICAgICAgICAgcmVjZWl2ZXIgaXMgSW50Q29uc3RhbnQgfHwKICAgICAgICAgIHJlY2VpdmVyIGlzIERvdWJsZUNvbnN0YW50IHx8CiAgICAgICAgICByZWNlaXZlciBpcyBTdHJpbmdDb25zdGFudCB8fAogICAgICAgICAgcmlnaHQgaXMgTnVsbENvbnN0YW50KSB7CiAgICAgICAgcmV0dXJuIG1ha2VCb29sQ29uc3RhbnQocmVjZWl2ZXIgPT0gcmlnaHQpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiByZXBvcnQoCiAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZEVxdWFsc09wZXJhbmRUeXBlLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICByZWNlaXZlciwgcmVjZWl2ZXIuZ2V0VHlwZSh0eXBlRW52aXJvbm1lbnQpKSk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBUaGlzIGlzIGEgd2hpdGUtbGlzdGVkIHNldCBvZiBtZXRob2RzIHdlIG5lZWQgdG8gc3VwcG9ydCBvbiBjb25zdGFudHMuCiAgICBpZiAocmVjZWl2ZXIgaXMgU3RyaW5nQ29uc3RhbnQpIHsKICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewogICAgICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgIGNhc2UgJysnOgogICAgICAgICAgICBmaW5hbCBDb25zdGFudCBvdGhlciA9IGFyZ3VtZW50c1swXTsKICAgICAgICAgICAgaWYgKG90aGVyIGlzIFN0cmluZ0NvbnN0YW50KSB7CiAgICAgICAgICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZSgKICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ0NvbnN0YW50KHJlY2VpdmVyLnZhbHVlICsgb3RoZXIudmFsdWUpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmVwb3J0KAogICAgICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZEJpbmFyeU9wZXJhbmRUeXBlLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICAgICAgJysnLAogICAgICAgICAgICAgICAgICAgIHJlY2VpdmVyLAogICAgICAgICAgICAgICAgICAgIHR5cGVFbnZpcm9ubWVudC5zdHJpbmdUeXBlLAogICAgICAgICAgICAgICAgICAgIG90aGVyLmdldFR5cGUodHlwZUVudmlyb25tZW50KSkpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmIChyZWNlaXZlciBpcyBJbnRDb25zdGFudCB8fCByZWNlaXZlciBpcyBKYXZhU2NyaXB0SW50Q29uc3RhbnQpIHsKICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMCkgewogICAgICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgIGNhc2UgJ3VuYXJ5LSc6CiAgICAgICAgICAgIGlmICh0YXJnZXRpbmdKYXZhU2NyaXB0KSB7CiAgICAgICAgICAgICAgQmlnSW50IHZhbHVlID0gKHJlY2VpdmVyIGFzIEphdmFTY3JpcHRJbnRDb25zdGFudCkuYmlnSW50VmFsdWU7CiAgICAgICAgICAgICAgaWYgKHZhbHVlID09IEJpZ0ludC56ZXJvKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplKG5ldyBEb3VibGVDb25zdGFudCgtMC4wKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IEphdmFTY3JpcHRJbnRDb25zdGFudC5mcm9tQmlnSW50KC12YWx1ZSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGludCB2YWx1ZSA9IChyZWNlaXZlciBhcyBJbnRDb25zdGFudCkudmFsdWU7CiAgICAgICAgICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IEludENvbnN0YW50KC12YWx1ZSkpOwogICAgICAgICAgY2FzZSAnfic6CiAgICAgICAgICAgIGlmICh0YXJnZXRpbmdKYXZhU2NyaXB0KSB7CiAgICAgICAgICAgICAgQmlnSW50IHZhbHVlID0gKHJlY2VpdmVyIGFzIEphdmFTY3JpcHRJbnRDb25zdGFudCkuYmlnSW50VmFsdWU7CiAgICAgICAgICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZShuZXcgSmF2YVNjcmlwdEludENvbnN0YW50LmZyb21CaWdJbnQoCiAgICAgICAgICAgICAgICAgICh+dmFsdWUpLnRvVW5zaWduZWQoMzIpKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW50IHZhbHVlID0gKHJlY2VpdmVyIGFzIEludENvbnN0YW50KS52YWx1ZTsKICAgICAgICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZShuZXcgSW50Q29uc3RhbnQofnZhbHVlKSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewogICAgICAgIGZpbmFsIENvbnN0YW50IG90aGVyID0gYXJndW1lbnRzWzBdOwogICAgICAgIGlmIChvdGhlciBpcyBJbnRDb25zdGFudCB8fCBvdGhlciBpcyBKYXZhU2NyaXB0SW50Q29uc3RhbnQpIHsKICAgICAgICAgIGlmICgob3AgPT0gJzw8JyB8fCBvcCA9PSAnPj4nIHx8IG9wID09ICc+Pj4nKSkgewogICAgICAgICAgICBPYmplY3QgcmVjZWl2ZXJWYWx1ZSA9IHJlY2VpdmVyIGlzIEludENvbnN0YW50CiAgICAgICAgICAgICAgICA/IHJlY2VpdmVyLnZhbHVlCiAgICAgICAgICAgICAgICA6IChyZWNlaXZlciBhcyBKYXZhU2NyaXB0SW50Q29uc3RhbnQpLmJpZ0ludFZhbHVlOwogICAgICAgICAgICBpbnQgb3RoZXJWYWx1ZSA9IG90aGVyIGlzIEludENvbnN0YW50CiAgICAgICAgICAgICAgICA/IG90aGVyLnZhbHVlCiAgICAgICAgICAgICAgICA6IChvdGhlciBhcyBKYXZhU2NyaXB0SW50Q29uc3RhbnQpLmJpZ0ludFZhbHVlLnRvSW50KCk7CiAgICAgICAgICAgIGlmIChvdGhlclZhbHVlIDwgMCkgewogICAgICAgICAgICAgIHJldHVybiByZXBvcnQoCiAgICAgICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwuZmlyc3QsCiAgICAgICAgICAgICAgICAgIC8vIFRPRE8oYXNrZXNjKTogQ2hhbmdlIGFyZ3VtZW50IHR5cGVzIGluIHRlbXBsYXRlIHRvCiAgICAgICAgICAgICAgICAgIC8vIGNvbnN0YW50cy4KICAgICAgICAgICAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxOZWdhdGl2ZVNoaWZ0LndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICAgICAgICBvcCwgJyR7cmVjZWl2ZXJWYWx1ZX0nLCAnJHtvdGhlclZhbHVlfScpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIGlmICgob3AgPT0gJyUnIHx8IG9wID09ICd+LycpKSB7CiAgICAgICAgICAgIE9iamVjdCByZWNlaXZlclZhbHVlID0gcmVjZWl2ZXIgaXMgSW50Q29uc3RhbnQKICAgICAgICAgICAgICAgID8gcmVjZWl2ZXIudmFsdWUKICAgICAgICAgICAgICAgIDogKHJlY2VpdmVyIGFzIEphdmFTY3JpcHRJbnRDb25zdGFudCkuYmlnSW50VmFsdWU7CiAgICAgICAgICAgIGludCBvdGhlclZhbHVlID0gb3RoZXIgaXMgSW50Q29uc3RhbnQKICAgICAgICAgICAgICAgID8gb3RoZXIudmFsdWUKICAgICAgICAgICAgICAgIDogKG90aGVyIGFzIEphdmFTY3JpcHRJbnRDb25zdGFudCkuYmlnSW50VmFsdWUudG9JbnQoKTsKICAgICAgICAgICAgaWYgKG90aGVyVmFsdWUgPT0gMCkgewogICAgICAgICAgICAgIHJldHVybiByZXBvcnQoCiAgICAgICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwuZmlyc3QsCiAgICAgICAgICAgICAgICAgIC8vIFRPRE8oYXNrZXNjKTogQ2hhbmdlIGFyZ3VtZW50IHR5cGUgaW4gdGVtcGxhdGUgdG8gY29uc3RhbnQuCiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsWmVyb0Rpdmlzb3Iud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgICAgICAgIG9wLCAnJHtyZWNlaXZlclZhbHVlfScpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgICAgY2FzZSAnfCc6CiAgICAgICAgICAgIGNhc2UgJyYnOgogICAgICAgICAgICBjYXNlICdeJzoKICAgICAgICAgICAgICBpbnQgcmVjZWl2ZXJWYWx1ZSA9IHJlY2VpdmVyIGlzIEludENvbnN0YW50CiAgICAgICAgICAgICAgICAgID8gcmVjZWl2ZXIudmFsdWUKICAgICAgICAgICAgICAgICAgOiAocmVjZWl2ZXIgYXMgSmF2YVNjcmlwdEludENvbnN0YW50KQogICAgICAgICAgICAgICAgICAgICAgLmJpZ0ludFZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAudG9VbnNpZ25lZCgzMikKICAgICAgICAgICAgICAgICAgICAgIC50b0ludCgpOwogICAgICAgICAgICAgIGludCBvdGhlclZhbHVlID0gb3RoZXIgaXMgSW50Q29uc3RhbnQKICAgICAgICAgICAgICAgICAgPyBvdGhlci52YWx1ZQogICAgICAgICAgICAgICAgICA6IChvdGhlciBhcyBKYXZhU2NyaXB0SW50Q29uc3RhbnQpCiAgICAgICAgICAgICAgICAgICAgICAuYmlnSW50VmFsdWUKICAgICAgICAgICAgICAgICAgICAgIC50b1Vuc2lnbmVkKDMyKQogICAgICAgICAgICAgICAgICAgICAgLnRvSW50KCk7CiAgICAgICAgICAgICAgcmV0dXJuIGV2YWx1YXRlQmluYXJ5Qml0T3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICBvcCwgcmVjZWl2ZXJWYWx1ZSwgb3RoZXJWYWx1ZSwgbm9kZSk7CiAgICAgICAgICAgIGNhc2UgJzw8JzoKICAgICAgICAgICAgY2FzZSAnPj4nOgogICAgICAgICAgICBjYXNlICc+Pj4nOgogICAgICAgICAgICAgIGJvb2wgbmVnYXRpdmUgPSBmYWxzZTsKICAgICAgICAgICAgICBpbnQgcmVjZWl2ZXJWYWx1ZTsKICAgICAgICAgICAgICBpZiAocmVjZWl2ZXIgaXMgSW50Q29uc3RhbnQpIHsKICAgICAgICAgICAgICAgIHJlY2VpdmVyVmFsdWUgPSByZWNlaXZlci52YWx1ZTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgQmlnSW50IGJpZ0ludFZhbHVlID0KICAgICAgICAgICAgICAgICAgICAocmVjZWl2ZXIgYXMgSmF2YVNjcmlwdEludENvbnN0YW50KS5iaWdJbnRWYWx1ZTsKICAgICAgICAgICAgICAgIHJlY2VpdmVyVmFsdWUgPSBiaWdJbnRWYWx1ZS50b1Vuc2lnbmVkKDMyKS50b0ludCgpOwogICAgICAgICAgICAgICAgbmVnYXRpdmUgPSBiaWdJbnRWYWx1ZS5pc05lZ2F0aXZlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpbnQgb3RoZXJWYWx1ZSA9IG90aGVyIGlzIEludENvbnN0YW50CiAgICAgICAgICAgICAgICAgID8gb3RoZXIudmFsdWUKICAgICAgICAgICAgICAgICAgOiAob3RoZXIgYXMgSmF2YVNjcmlwdEludENvbnN0YW50KS5iaWdJbnRWYWx1ZS50b0ludCgpOwoKICAgICAgICAgICAgICByZXR1cm4gZXZhbHVhdGVCaW5hcnlTaGlmdE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgb3AsIHJlY2VpdmVyVmFsdWUsIG90aGVyVmFsdWUsIG5vZGUsCiAgICAgICAgICAgICAgICAgIG5lZ2F0aXZlUmVjZWl2ZXI6IG5lZ2F0aXZlKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICBudW0gcmVjZWl2ZXJWYWx1ZSA9IHJlY2VpdmVyIGlzIEludENvbnN0YW50CiAgICAgICAgICAgICAgICAgID8gcmVjZWl2ZXIudmFsdWUKICAgICAgICAgICAgICAgICAgOiAocmVjZWl2ZXIgYXMgRG91YmxlQ29uc3RhbnQpLnZhbHVlOwogICAgICAgICAgICAgIG51bSBvdGhlclZhbHVlID0gb3RoZXIgaXMgSW50Q29uc3RhbnQKICAgICAgICAgICAgICAgICAgPyBvdGhlci52YWx1ZQogICAgICAgICAgICAgICAgICA6IChvdGhlciBhcyBEb3VibGVDb25zdGFudCkudmFsdWU7CiAgICAgICAgICAgICAgcmV0dXJuIGV2YWx1YXRlQmluYXJ5TnVtZXJpY09wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgb3AsIHJlY2VpdmVyVmFsdWUsIG90aGVyVmFsdWUsIG5vZGUpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAob3RoZXIgaXMgRG91YmxlQ29uc3RhbnQpIHsKICAgICAgICAgIGlmICgob3AgPT0gJ3wnIHx8IG9wID09ICcmJyB8fCBvcCA9PSAnXicpIHx8CiAgICAgICAgICAgICAgKG9wID09ICc8PCcgfHwgb3AgPT0gJz4+JyB8fCBvcCA9PSAnPj4+JykpIHsKICAgICAgICAgICAgcmV0dXJuIHJlcG9ydCgKICAgICAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRCaW5hcnlPcGVyYW5kVHlwZS53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgICAgIG9wLAogICAgICAgICAgICAgICAgICAgIG90aGVyLAogICAgICAgICAgICAgICAgICAgIHR5cGVFbnZpcm9ubWVudC5pbnRUeXBlLAogICAgICAgICAgICAgICAgICAgIG90aGVyLmdldFR5cGUodHlwZUVudmlyb25tZW50KSkpOwogICAgICAgICAgfQogICAgICAgICAgbnVtIHJlY2VpdmVyVmFsdWUgPSByZWNlaXZlciBpcyBJbnRDb25zdGFudAogICAgICAgICAgICAgID8gcmVjZWl2ZXIudmFsdWUKICAgICAgICAgICAgICA6IChyZWNlaXZlciBhcyBEb3VibGVDb25zdGFudCkudmFsdWU7CiAgICAgICAgICByZXR1cm4gZXZhbHVhdGVCaW5hcnlOdW1lcmljT3BlcmF0aW9uKAogICAgICAgICAgICAgIG9wLCByZWNlaXZlclZhbHVlLCBvdGhlci52YWx1ZSwgbm9kZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXBvcnQoCiAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZEJpbmFyeU9wZXJhbmRUeXBlLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICBvcCwKICAgICAgICAgICAgICAgIHJlY2VpdmVyLAogICAgICAgICAgICAgICAgdHlwZUVudmlyb25tZW50Lm51bVR5cGUsCiAgICAgICAgICAgICAgICBvdGhlci5nZXRUeXBlKHR5cGVFbnZpcm9ubWVudCkpKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChyZWNlaXZlciBpcyBEb3VibGVDb25zdGFudCkgewogICAgICBpZiAoKG9wID09ICd8JyB8fCBvcCA9PSAnJicgfHwgb3AgPT0gJ14nKSB8fAogICAgICAgICAgKG9wID09ICc8PCcgfHwgb3AgPT0gJz4+JyB8fCBvcCA9PSAnPj4+JykpIHsKICAgICAgICByZXR1cm4gcmVwb3J0KAogICAgICAgICAgICBub2RlLAogICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRCaW5hcnlPcGVyYW5kVHlwZS53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgb3AsCiAgICAgICAgICAgICAgICByZWNlaXZlciwKICAgICAgICAgICAgICAgIHR5cGVFbnZpcm9ubWVudC5pbnRUeXBlLAogICAgICAgICAgICAgICAgcmVjZWl2ZXIuZ2V0VHlwZSh0eXBlRW52aXJvbm1lbnQpKSk7CiAgICAgIH0KICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMCkgewogICAgICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgIGNhc2UgJ3VuYXJ5LSc6CiAgICAgICAgICAgIHJldHVybiBjYW5vbmljYWxpemUobWFrZURvdWJsZUNvbnN0YW50KC1yZWNlaXZlci52YWx1ZSkpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgICBmaW5hbCBDb25zdGFudCBvdGhlciA9IGFyZ3VtZW50c1swXTsKCiAgICAgICAgaWYgKG90aGVyIGlzIEludENvbnN0YW50IHx8IG90aGVyIGlzIERvdWJsZUNvbnN0YW50KSB7CiAgICAgICAgICBmaW5hbCBudW0gdmFsdWUgPSAob3RoZXIgaXMgSW50Q29uc3RhbnQpCiAgICAgICAgICAgICAgPyBvdGhlci52YWx1ZQogICAgICAgICAgICAgIDogKG90aGVyIGFzIERvdWJsZUNvbnN0YW50KS52YWx1ZTsKICAgICAgICAgIHJldHVybiBldmFsdWF0ZUJpbmFyeU51bWVyaWNPcGVyYXRpb24oCiAgICAgICAgICAgICAgb3AsIHJlY2VpdmVyLnZhbHVlLCB2YWx1ZSwgbm9kZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXBvcnQoCiAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZEJpbmFyeU9wZXJhbmRUeXBlLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICBvcCwKICAgICAgICAgICAgICAgIHJlY2VpdmVyLAogICAgICAgICAgICAgICAgdHlwZUVudmlyb25tZW50Lm51bVR5cGUsCiAgICAgICAgICAgICAgICBvdGhlci5nZXRUeXBlKHR5cGVFbnZpcm9ubWVudCkpKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChyZWNlaXZlciBpcyBCb29sQ29uc3RhbnQpIHsKICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewogICAgICAgIGZpbmFsIENvbnN0YW50IG90aGVyID0gYXJndW1lbnRzWzBdOwogICAgICAgIGlmIChvdGhlciBpcyBCb29sQ29uc3RhbnQpIHsKICAgICAgICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgICAgY2FzZSAnfCc6CiAgICAgICAgICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZSgKICAgICAgICAgICAgICAgICAgbmV3IEJvb2xDb25zdGFudChyZWNlaXZlci52YWx1ZSB8fCBvdGhlci52YWx1ZSkpOwogICAgICAgICAgICBjYXNlICcmJzoKICAgICAgICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplKAogICAgICAgICAgICAgICAgICBuZXcgQm9vbENvbnN0YW50KHJlY2VpdmVyLnZhbHVlICYmIG90aGVyLnZhbHVlKSk7CiAgICAgICAgICAgIGNhc2UgJ14nOgogICAgICAgICAgICAgIHJldHVybiBjYW5vbmljYWxpemUoCiAgICAgICAgICAgICAgICAgIG5ldyBCb29sQ29uc3RhbnQocmVjZWl2ZXIudmFsdWUgIT0gb3RoZXIudmFsdWUpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAocmVjZWl2ZXIgaXMgTnVsbENvbnN0YW50KSB7CiAgICAgIHJldHVybiByZXBvcnQobm9kZSwgbWVzc2FnZUNvbnN0RXZhbE51bGxWYWx1ZSk7CiAgICB9CgogICAgcmV0dXJuIHJlcG9ydChub2RlLAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZE1ldGhvZEludm9jYXRpb24ud2l0aEFyZ3VtZW50cyhvcCwgcmVjZWl2ZXIpKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50IHZpc2l0TG9naWNhbEV4cHJlc3Npb24oTG9naWNhbEV4cHJlc3Npb24gbm9kZSkgewogICAgZmluYWwgQ29uc3RhbnQgbGVmdCA9IF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24obm9kZS5sZWZ0KTsKICAgIGlmIChzaG91bGRCZVVuZXZhbHVhdGVkKSB7CiAgICAgIGVudGVyTGF6eSgpOwogICAgICBDb25zdGFudCByaWdodCA9IF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24obm9kZS5yaWdodCk7CiAgICAgIGxlYXZlTGF6eSgpOwogICAgICByZXR1cm4gdW5ldmFsdWF0ZWQobm9kZSwKICAgICAgICAgIG5ldyBMb2dpY2FsRXhwcmVzc2lvbihleHRyYWN0KGxlZnQpLCBub2RlLm9wZXJhdG9yLCBleHRyYWN0KHJpZ2h0KSkpOwogICAgfQogICAgc3dpdGNoIChub2RlLm9wZXJhdG9yKSB7CiAgICAgIGNhc2UgJ3x8JzoKICAgICAgICBpZiAobGVmdCBpcyBCb29sQ29uc3RhbnQpIHsKICAgICAgICAgIGlmIChsZWZ0LnZhbHVlKSByZXR1cm4gdHJ1ZUNvbnN0YW50OwoKICAgICAgICAgIGZpbmFsIENvbnN0YW50IHJpZ2h0ID0gX2V2YWx1YXRlU3ViZXhwcmVzc2lvbihub2RlLnJpZ2h0KTsKICAgICAgICAgIGlmIChyaWdodCBpcyBCb29sQ29uc3RhbnQgfHwgcmlnaHQgaXMgVW5ldmFsdWF0ZWRDb25zdGFudCkgewogICAgICAgICAgICByZXR1cm4gcmlnaHQ7CiAgICAgICAgICB9CgogICAgICAgICAgcmV0dXJuIHJlcG9ydCgKICAgICAgICAgICAgICBub2RlLAogICAgICAgICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZEJpbmFyeU9wZXJhbmRUeXBlLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICAgIG5vZGUub3BlcmF0b3IsCiAgICAgICAgICAgICAgICAgIGxlZnQsCiAgICAgICAgICAgICAgICAgIHR5cGVFbnZpcm9ubWVudC5ib29sVHlwZSwKICAgICAgICAgICAgICAgICAgcmlnaHQuZ2V0VHlwZSh0eXBlRW52aXJvbm1lbnQpKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXBvcnQoCiAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZE1ldGhvZEludm9jYXRpb24ud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgIG5vZGUub3BlcmF0b3IsIGxlZnQpKTsKICAgICAgY2FzZSAnJiYnOgogICAgICAgIGlmIChsZWZ0IGlzIEJvb2xDb25zdGFudCkgewogICAgICAgICAgaWYgKCFsZWZ0LnZhbHVlKSByZXR1cm4gZmFsc2VDb25zdGFudDsKCiAgICAgICAgICBmaW5hbCBDb25zdGFudCByaWdodCA9IF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24obm9kZS5yaWdodCk7CiAgICAgICAgICBpZiAocmlnaHQgaXMgQm9vbENvbnN0YW50IHx8IHJpZ2h0IGlzIFVuZXZhbHVhdGVkQ29uc3RhbnQpIHsKICAgICAgICAgICAgcmV0dXJuIHJpZ2h0OwogICAgICAgICAgfQoKICAgICAgICAgIHJldHVybiByZXBvcnQoCiAgICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRCaW5hcnlPcGVyYW5kVHlwZS53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgICBub2RlLm9wZXJhdG9yLAogICAgICAgICAgICAgICAgICBsZWZ0LAogICAgICAgICAgICAgICAgICB0eXBlRW52aXJvbm1lbnQuYm9vbFR5cGUsCiAgICAgICAgICAgICAgICAgIHJpZ2h0LmdldFR5cGUodHlwZUVudmlyb25tZW50KSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVwb3J0KAogICAgICAgICAgICBub2RlLAogICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRNZXRob2RJbnZvY2F0aW9uLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICBub2RlLm9wZXJhdG9yLCBsZWZ0KSk7CiAgICAgIGNhc2UgJz8/JzoKICAgICAgICByZXR1cm4gKGxlZnQgaXMhIE51bGxDb25zdGFudCkKICAgICAgICAgICAgPyBsZWZ0CiAgICAgICAgICAgIDogX2V2YWx1YXRlU3ViZXhwcmVzc2lvbihub2RlLnJpZ2h0KTsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gcmVwb3J0KAogICAgICAgICAgICBub2RlLAogICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRNZXRob2RJbnZvY2F0aW9uLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICBub2RlLm9wZXJhdG9yLCBsZWZ0KSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudCB2aXNpdENvbmRpdGlvbmFsRXhwcmVzc2lvbihDb25kaXRpb25hbEV4cHJlc3Npb24gbm9kZSkgewogICAgZmluYWwgQ29uc3RhbnQgY29uZGl0aW9uID0gX2V2YWx1YXRlU3ViZXhwcmVzc2lvbihub2RlLmNvbmRpdGlvbik7CiAgICBpZiAoY29uZGl0aW9uID09IHRydWVDb25zdGFudCkgewogICAgICByZXR1cm4gX2V2YWx1YXRlU3ViZXhwcmVzc2lvbihub2RlLnRoZW4pOwogICAgfSBlbHNlIGlmIChjb25kaXRpb24gPT0gZmFsc2VDb25zdGFudCkgewogICAgICByZXR1cm4gX2V2YWx1YXRlU3ViZXhwcmVzc2lvbihub2RlLm90aGVyd2lzZSk7CiAgICB9IGVsc2UgaWYgKHNob3VsZEJlVW5ldmFsdWF0ZWQpIHsKICAgICAgZW50ZXJMYXp5KCk7CiAgICAgIENvbnN0YW50IHRoZW4gPSBfZXZhbHVhdGVTdWJleHByZXNzaW9uKG5vZGUudGhlbik7CiAgICAgIENvbnN0YW50IG90aGVyd2lzZSA9IF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24obm9kZS5vdGhlcndpc2UpOwogICAgICBsZWF2ZUxhenkoKTsKICAgICAgcmV0dXJuIHVuZXZhbHVhdGVkKAogICAgICAgICAgbm9kZSwKICAgICAgICAgIG5ldyBDb25kaXRpb25hbEV4cHJlc3Npb24oZXh0cmFjdChjb25kaXRpb24pLCBleHRyYWN0KHRoZW4pLAogICAgICAgICAgICAgIGV4dHJhY3Qob3RoZXJ3aXNlKSwgbm9kZS5zdGF0aWNUeXBlKSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gcmVwb3J0KAogICAgICAgICAgbm9kZS5jb25kaXRpb24sCiAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRUeXBlLndpdGhBcmd1bWVudHMoY29uZGl0aW9uLAogICAgICAgICAgICAgIHR5cGVFbnZpcm9ubWVudC5ib29sVHlwZSwgY29uZGl0aW9uLmdldFR5cGUodHlwZUVudmlyb25tZW50KSkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnQgdmlzaXRQcm9wZXJ0eUdldChQcm9wZXJ0eUdldCBub2RlKSB7CiAgICBpZiAobm9kZS5yZWNlaXZlciBpcyBUaGlzRXhwcmVzc2lvbikgewogICAgICAvLyBBY2Nlc3MgInRoaXMiIGR1cmluZyBpbnN0YW5jZSBjcmVhdGlvbi4KICAgICAgaWYgKGluc3RhbmNlQnVpbGRlciA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIHJlcG9ydEludmFsaWQobm9kZSwgJ0luc3RhbmNlIGZpZWxkIGFjY2VzcyBvdXRzaWRlIGNvbnN0cnVjdG9yJyk7CiAgICAgIH0KICAgICAgZm9yIChmaW5hbCBGaWVsZCBmaWVsZCBpbiBpbnN0YW5jZUJ1aWxkZXIuZmllbGRzLmtleXMpIHsKICAgICAgICBpZiAoZmllbGQubmFtZSA9PSBub2RlLm5hbWUpIHsKICAgICAgICAgIHJldHVybiBpbnN0YW5jZUJ1aWxkZXIuZmllbGRzW2ZpZWxkXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJlcG9ydEludmFsaWQobm9kZSwKICAgICAgICAgICdDb3VsZCBub3QgZXZhbHVhdGUgZmllbGQgZ2V0ICR7bm9kZS5uYW1lfSBvbiBpbmNvbXBsZXRlIGluc3RhbmNlJyk7CiAgICB9CgogICAgZmluYWwgQ29uc3RhbnQgcmVjZWl2ZXIgPSBfZXZhbHVhdGVTdWJleHByZXNzaW9uKG5vZGUucmVjZWl2ZXIpOwogICAgaWYgKHJlY2VpdmVyIGlzIFN0cmluZ0NvbnN0YW50ICYmIG5vZGUubmFtZS5uYW1lID09ICdsZW5ndGgnKSB7CiAgICAgIGlmICh0YXJnZXRpbmdKYXZhU2NyaXB0KSB7CiAgICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZShuZXcgSmF2YVNjcmlwdEludENvbnN0YW50KHJlY2VpdmVyLnZhbHVlLmxlbmd0aCkpOwogICAgICB9CiAgICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IEludENvbnN0YW50KHJlY2VpdmVyLnZhbHVlLmxlbmd0aCkpOwogICAgfSBlbHNlIGlmIChzaG91bGRCZVVuZXZhbHVhdGVkKSB7CiAgICAgIHJldHVybiB1bmV2YWx1YXRlZChub2RlLAogICAgICAgICAgbmV3IFByb3BlcnR5R2V0KGV4dHJhY3QocmVjZWl2ZXIpLCBub2RlLm5hbWUsIG5vZGUuaW50ZXJmYWNlVGFyZ2V0KSk7CiAgICB9IGVsc2UgaWYgKHJlY2VpdmVyIGlzIE51bGxDb25zdGFudCkgewogICAgICByZXR1cm4gcmVwb3J0KG5vZGUsIG1lc3NhZ2VDb25zdEV2YWxOdWxsVmFsdWUpOwogICAgfQogICAgcmV0dXJuIHJlcG9ydCgKICAgICAgICBub2RlLAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFByb3BlcnR5R2V0LndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgIG5vZGUubmFtZS5uYW1lLCByZWNlaXZlcikpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnQgdmlzaXRMZXQoTGV0IG5vZGUpIHsKICAgIGVudi5hZGRWYXJpYWJsZVZhbHVlKAogICAgICAgIG5vZGUudmFyaWFibGUsIF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24obm9kZS52YXJpYWJsZS5pbml0aWFsaXplcikpOwogICAgcmV0dXJuIF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24obm9kZS5ib2R5KTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50IHZpc2l0VmFyaWFibGVHZXQoVmFyaWFibGVHZXQgbm9kZSkgewogICAgLy8gTm90IGV2ZXJ5IHZhcmlhYmxlIHdoaWNoIGEgW1ZhcmlhYmxlR2V0XSByZWZlcnMgdG8gbXVzdCBiZSBtYXJrZWQgYXMKICAgIC8vIGNvbnN0YW50LiAgRm9yIGV4YW1wbGUgZnVuY3Rpb24gcGFyYW1ldGVycyBhcyB3ZWxsIGFzIGNvbnN0cnVjdHMKICAgIC8vIGRlc3VnYXJlZCB0byBbTGV0XSBleHByZXNzaW9ucyBhcmUgb2suCiAgICAvLwogICAgLy8gVE9ETyhrdXN0ZXJtYW5uKTogVGhlIGhldXJpc3RpYyBvZiBhbGxvd2luZyBhbGwgW1ZhcmlhYmxlR2V0XXMgb24gW0xldF0KICAgIC8vIHZhcmlhYmxlcyBtaWdodCBhbGxvdyBtb3JlIHRoYW4gaXQgc2hvdWxkLgogICAgZmluYWwgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSA9IG5vZGUudmFyaWFibGU7CiAgICBpZiAodmFyaWFibGUucGFyZW50IGlzIExldCB8fCBfaXNGb3JtYWxQYXJhbWV0ZXIodmFyaWFibGUpKSB7CiAgICAgIHJldHVybiBlbnYubG9va3VwVmFyaWFibGUobm9kZS52YXJpYWJsZSkgPz8KICAgICAgICAgIHJlcG9ydCgKICAgICAgICAgICAgICBub2RlLAogICAgICAgICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsTm9uQ29uc3RhbnRWYXJpYWJsZUdldAogICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyh2YXJpYWJsZS5uYW1lKSk7CiAgICB9CiAgICBpZiAodmFyaWFibGUuaXNDb25zdCkgewogICAgICByZXR1cm4gX2V2YWx1YXRlU3ViZXhwcmVzc2lvbih2YXJpYWJsZS5pbml0aWFsaXplcik7CiAgICB9CiAgICByZXR1cm4gcmVwb3J0SW52YWxpZChub2RlLCAnVmFyaWFibGUgZ2V0IG9mIGEgbm9uLWNvbnN0IHZhcmlhYmxlLicpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnQgdmlzaXRTdGF0aWNHZXQoU3RhdGljR2V0IG5vZGUpIHsKICAgIHJldHVybiB3aXRoTmV3RW52aXJvbm1lbnQoKCkgewogICAgICBmaW5hbCBNZW1iZXIgdGFyZ2V0ID0gbm9kZS50YXJnZXQ7CiAgICAgIGlmICh0YXJnZXQgaXMgRmllbGQpIHsKICAgICAgICBpZiAodGFyZ2V0LmlzQ29uc3QpIHsKICAgICAgICAgIHJldHVybiBydW5JbnNpZGVDb250ZXh0KHRhcmdldCwgKCkgewogICAgICAgICAgICByZXR1cm4gX2V2YWx1YXRlU3ViZXhwcmVzc2lvbih0YXJnZXQuaW5pdGlhbGl6ZXIpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXBvcnQoCiAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFN0YXRpY0ludm9jYXRpb24KICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKHRhcmdldC5uYW1lLm5hbWUpKTsKICAgICAgfSBlbHNlIGlmICh0YXJnZXQgaXMgUHJvY2VkdXJlKSB7CiAgICAgICAgaWYgKHRhcmdldC5raW5kID09IFByb2NlZHVyZUtpbmQuTWV0aG9kKSB7CiAgICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplKG5ldyBUZWFyT2ZmQ29uc3RhbnQodGFyZ2V0KSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXBvcnQoCiAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFN0YXRpY0ludm9jYXRpb24KICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKHRhcmdldC5uYW1lLm5hbWUpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXBvcnRJbnZhbGlkKAogICAgICAgICAgICBub2RlLCAnTm8gc3VwcG9ydCBmb3IgJHt0YXJnZXQucnVudGltZVR5cGV9IGluIGEgc3RhdGljLWdldC4nKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudCB2aXNpdFN0cmluZ0NvbmNhdGVuYXRpb24oU3RyaW5nQ29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICBmaW5hbCBMaXN0PE9iamVjdD4gY29uY2F0ZW5hdGVkID0gPE9iamVjdD5bbmV3IFN0cmluZ0J1ZmZlcigpXTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZS5leHByZXNzaW9ucy5sZW5ndGg7IGkrKykgewogICAgICBDb25zdGFudCBjb25zdGFudCA9IF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uc1tpXSk7CiAgICAgIGlmIChjb25zdGFudCBpcyBQcmltaXRpdmVDb25zdGFudDxPYmplY3Q+KSB7CiAgICAgICAgU3RyaW5nIHZhbHVlID0gY29uc3RhbnQudG9TdHJpbmcoKTsKICAgICAgICBPYmplY3QgbGFzdCA9IGNvbmNhdGVuYXRlZC5sYXN0OwogICAgICAgIGlmIChsYXN0IGlzIFN0cmluZ0J1ZmZlcikgewogICAgICAgICAgbGFzdC53cml0ZSh2YWx1ZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbmNhdGVuYXRlZC5hZGQobmV3IFN0cmluZ0J1ZmZlcih2YWx1ZSkpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChzaG91bGRCZVVuZXZhbHVhdGVkKSB7CiAgICAgICAgLy8gVGhlIGNvbnN0YW50IGlzIGVpdGhlciB1bmV2YWx1YXRlZCBvciBhIG5vbi1wcmltaXRpdmUgaW4gYW4KICAgICAgICAvLyB1bmV2YWx1YXRlZCBjb250ZXh0LiBJbiBib3RoIGNhc2VzIHdlIGRlZmVyIHRoZSBldmFsdWF0aW9uIGFuZC9vcgogICAgICAgIC8vIGVycm9yIHJlcG9ydGluZyB0aWxsIGxhdGVyLgogICAgICAgIGNvbmNhdGVuYXRlZC5hZGQoY29uc3RhbnQpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiByZXBvcnQoCiAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFN0cmluZ0ludGVycG9sYXRpb25PcGVyYW5kCiAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhjb25zdGFudCkpOwogICAgICB9CiAgICB9CiAgICBpZiAoY29uY2F0ZW5hdGVkLmxlbmd0aCA+IDEpIHsKICAgICAgZmluYWwgTGlzdDxFeHByZXNzaW9uPiBleHByZXNzaW9ucyA9CiAgICAgICAgICBuZXcgTGlzdDxFeHByZXNzaW9uPihjb25jYXRlbmF0ZWQubGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb25jYXRlbmF0ZWQubGVuZ3RoOyBpKyspIHsKICAgICAgICBPYmplY3QgdmFsdWUgPSBjb25jYXRlbmF0ZWRbaV07CiAgICAgICAgaWYgKHZhbHVlIGlzIFN0cmluZ0J1ZmZlcikgewogICAgICAgICAgZXhwcmVzc2lvbnNbaV0gPSBuZXcgQ29uc3RhbnRFeHByZXNzaW9uKAogICAgICAgICAgICAgIGNhbm9uaWNhbGl6ZShuZXcgU3RyaW5nQ29uc3RhbnQodmFsdWUudG9TdHJpbmcoKSkpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gVGhlIHZhbHVlIGlzIGVpdGhlciB1bmV2YWx1YXRlZCBjb25zdGFudCBvciBhIG5vbi1wcmltaXRpdmUKICAgICAgICAgIC8vIGNvbnN0YW50IGluIGFuIHVuZXZhbHVhdGVkIGV4cHJlc3Npb24uCiAgICAgICAgICBleHByZXNzaW9uc1tpXSA9IGV4dHJhY3QodmFsdWUpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdW5ldmFsdWF0ZWQobm9kZSwgbmV3IFN0cmluZ0NvbmNhdGVuYXRpb24oZXhwcmVzc2lvbnMpKTsKICAgIH0KICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IFN0cmluZ0NvbnN0YW50KGNvbmNhdGVuYXRlZC5zaW5nbGUudG9TdHJpbmcoKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnQgdmlzaXRTdGF0aWNJbnZvY2F0aW9uKFN0YXRpY0ludm9jYXRpb24gbm9kZSkgewogICAgZmluYWwgUHJvY2VkdXJlIHRhcmdldCA9IG5vZGUudGFyZ2V0OwogICAgZmluYWwgQXJndW1lbnRzIGFyZ3VtZW50cyA9IG5vZGUuYXJndW1lbnRzOwogICAgZmluYWwgTGlzdDxDb25zdGFudD4gcG9zaXRpb25hbHMgPSBldmFsdWF0ZVBvc2l0aW9uYWxBcmd1bWVudHMoYXJndW1lbnRzKTsKICAgIGZpbmFsIE1hcDxTdHJpbmcsIENvbnN0YW50PiBuYW1lZCA9IGV2YWx1YXRlTmFtZWRBcmd1bWVudHMoYXJndW1lbnRzKTsKICAgIGlmIChzaG91bGRCZVVuZXZhbHVhdGVkKSB7CiAgICAgIHJldHVybiB1bmV2YWx1YXRlZCgKICAgICAgICAgIG5vZGUsCiAgICAgICAgICBuZXcgU3RhdGljSW52b2NhdGlvbigKICAgICAgICAgICAgICB0YXJnZXQsIHVuZXZhbHVhdGVkQXJndW1lbnRzKHBvc2l0aW9uYWxzLCBuYW1lZCwgYXJndW1lbnRzLnR5cGVzKSwKICAgICAgICAgICAgICBpc0NvbnN0OiB0cnVlKSk7CiAgICB9CiAgICBpZiAodGFyZ2V0LmtpbmQgPT0gUHJvY2VkdXJlS2luZC5GYWN0b3J5KSB7CiAgICAgIGlmICh0YXJnZXQuaXNDb25zdCAmJgogICAgICAgICAgdGFyZ2V0Lm5hbWUubmFtZSA9PSAiZnJvbUVudmlyb25tZW50IiAmJgogICAgICAgICAgdGFyZ2V0LmVuY2xvc2luZ0xpYnJhcnkgPT0gY29yZVR5cGVzLmNvcmVMaWJyYXJ5ICYmCiAgICAgICAgICBwb3NpdGlvbmFscy5sZW5ndGggPT0gMSkgewogICAgICAgIGlmIChlbnZpcm9ubWVudERlZmluZXMgIT0gbnVsbCkgewogICAgICAgICAgLy8gRXZhbHVhdGUgZW52aXJvbm1lbnQgY29uc3RhbnQuCiAgICAgICAgICBDb25zdGFudCBuYW1lID0gcG9zaXRpb25hbHMuc2luZ2xlOwogICAgICAgICAgaWYgKG5hbWUgaXMgU3RyaW5nQ29uc3RhbnQpIHsKICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gZW52aXJvbm1lbnREZWZpbmVzW25hbWUudmFsdWVdOwogICAgICAgICAgICBDb25zdGFudCBkZWZhdWx0VmFsdWUgPSBuYW1lZFsiZGVmYXVsdFZhbHVlIl07CgogICAgICAgICAgICBpZiAodGFyZ2V0LmVuY2xvc2luZ0NsYXNzID09IGNvcmVUeXBlcy5ib29sQ2xhc3MpIHsKICAgICAgICAgICAgICBDb25zdGFudCBib29sQ29uc3RhbnQgPSB2YWx1ZSA9PSAidHJ1ZSIKICAgICAgICAgICAgICAgICAgPyB0cnVlQ29uc3RhbnQKICAgICAgICAgICAgICAgICAgOiB2YWx1ZSA9PSAiZmFsc2UiCiAgICAgICAgICAgICAgICAgICAgICA/IGZhbHNlQ29uc3RhbnQKICAgICAgICAgICAgICAgICAgICAgIDogZGVmYXVsdFZhbHVlIGlzIEJvb2xDb25zdGFudAogICAgICAgICAgICAgICAgICAgICAgICAgID8gbWFrZUJvb2xDb25zdGFudChkZWZhdWx0VmFsdWUudmFsdWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkZWZhdWx0VmFsdWUgaXMgTnVsbENvbnN0YW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbnVsbENvbnN0YW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZmFsc2VDb25zdGFudDsKICAgICAgICAgICAgICByZXR1cm4gYm9vbENvbnN0YW50OwogICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldC5lbmNsb3NpbmdDbGFzcyA9PSBjb3JlVHlwZXMuaW50Q2xhc3MpIHsKICAgICAgICAgICAgICBpbnQgaW50VmFsdWUgPSB2YWx1ZSAhPSBudWxsID8gaW50LnRyeVBhcnNlKHZhbHVlKSA6IG51bGw7CiAgICAgICAgICAgICAgaW50VmFsdWUgPz89IGRlZmF1bHRWYWx1ZSBpcyBJbnRDb25zdGFudAogICAgICAgICAgICAgICAgICA/IGRlZmF1bHRWYWx1ZS52YWx1ZQogICAgICAgICAgICAgICAgICA6IGRlZmF1bHRWYWx1ZSBpcyBKYXZhU2NyaXB0SW50Q29uc3RhbnQKICAgICAgICAgICAgICAgICAgICAgID8gZGVmYXVsdFZhbHVlLmJpZ0ludFZhbHVlLnRvSW50KCkKICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDsKICAgICAgICAgICAgICBpZiAoaW50VmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGxDb25zdGFudDsKICAgICAgICAgICAgICBpZiAodGFyZ2V0aW5nSmF2YVNjcmlwdCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZShuZXcgSmF2YVNjcmlwdEludENvbnN0YW50KGludFZhbHVlKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IEludENvbnN0YW50KGludFZhbHVlKSk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0LmVuY2xvc2luZ0NsYXNzID09IGNvcmVUeXBlcy5zdHJpbmdDbGFzcykgewogICAgICAgICAgICAgIHZhbHVlID8/PQogICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgaXMgU3RyaW5nQ29uc3RhbnQgPyBkZWZhdWx0VmFsdWUudmFsdWUgOiBudWxsOwogICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbENvbnN0YW50OwogICAgICAgICAgICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IFN0cmluZ0NvbnN0YW50KHZhbHVlKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSBpcyBOdWxsQ29uc3RhbnQpIHsKICAgICAgICAgICAgcmV0dXJuIHJlcG9ydChub2RlLCBtZXNzYWdlQ29uc3RFdmFsTnVsbFZhbHVlKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gTGVhdmUgZW52aXJvbm1lbnQgY29uc3RhbnQgdW5ldmFsdWF0ZWQuCiAgICAgICAgICByZXR1cm4gdW5ldmFsdWF0ZWQoCiAgICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgICBuZXcgU3RhdGljSW52b2NhdGlvbih0YXJnZXQsCiAgICAgICAgICAgICAgICAgIHVuZXZhbHVhdGVkQXJndW1lbnRzKHBvc2l0aW9uYWxzLCBuYW1lZCwgYXJndW1lbnRzLnR5cGVzKSwKICAgICAgICAgICAgICAgICAgaXNDb25zdDogdHJ1ZSkpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmICh0YXJnZXQubmFtZS5uYW1lID09ICdpZGVudGljYWwnKSB7CiAgICAgIC8vIEVuc3VyZSB0aGUgImlkZW50aWNhbCgpIiBmdW5jdGlvbiBjb21lcyBmcm9tIGRhcnQ6Y29yZS4KICAgICAgZmluYWwgVHJlZU5vZGUgcGFyZW50ID0gdGFyZ2V0LnBhcmVudDsKICAgICAgaWYgKHBhcmVudCBpcyBMaWJyYXJ5ICYmIHBhcmVudCA9PSBjb3JlVHlwZXMuY29yZUxpYnJhcnkpIHsKICAgICAgICBmaW5hbCBDb25zdGFudCBsZWZ0ID0gcG9zaXRpb25hbHNbMF07CiAgICAgICAgZmluYWwgQ29uc3RhbnQgcmlnaHQgPSBwb3NpdGlvbmFsc1sxXTsKCiAgICAgICAgaWYgKHRhcmdldGluZ0phdmFTY3JpcHQpIHsKICAgICAgICAgIC8vIEluIEphdmFTY3JpcHQsIHdlIGxvd2VyIFtpZGVudGljYWxdIHRvIGA9PT1gLCBzbyBhbnkgY29tcGFyaXNvbgogICAgICAgICAgLy8gYWdhaW5zdCBOYU4geWllbGRzIGBmYWxzZWAuCiAgICAgICAgICBpZiAoaXNOYU4obGVmdCkgfHwgaXNOYU4ocmlnaHQpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZUNvbnN0YW50OwogICAgICAgICAgfQoKICAgICAgICAgIC8vIEluIEphdmFTY3JpcHQsIGAtMC4wID09PSAwLjBgLgogICAgICAgICAgaWYgKGlzWmVybyhsZWZ0KSkgewogICAgICAgICAgICByZXR1cm4gbWFrZUJvb2xDb25zdGFudChpc1plcm8ocmlnaHQpKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFNpbmNlIHdlIGNhbm9uaWNhbGl6ZSBjb25zdGFudHMgZHVyaW5nIHRoZSBldmFsdWF0aW9uLCB3ZSBjYW4gdXNlCiAgICAgICAgLy8gaWRlbnRpY2FsIGhlcmUuCiAgICAgICAgcmV0dXJuIG1ha2VCb29sQ29uc3RhbnQoaWRlbnRpY2FsKGxlZnQsIHJpZ2h0KSk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBUT0RPKGttaWxsaWtpbikgRm9yIGFuIGludmFsaWQgZmFjdG9yeSBpbnZvY2F0aW9uIHdlIHNob3VsZCBhZG9wdCBhCiAgICAvLyBiZXR0ZXIgbWVzc2FnZS4gIFRoaXMgd2lsbCBzaG93IHNvbWV0aGluZyBsaWtlOgogICAgLy8KICAgIC8vICJUaGUgaW52b2NhdGlvbiBvZiAnTGlzdCcgaXMgbm90IGFsbG93ZWQgd2l0aGluIGEgY29uc3QgY29udGV4dC4iCiAgICAvLwogICAgLy8gV2hpY2ggaXMgbm90IHF1aXRlIHJpZ2h0IHdoZW4gdGhlIGNvZGUgd2FzICJuZXcgTGlzdCgpIi4KICAgIFN0cmluZyBuYW1lID0gdGFyZ2V0Lm5hbWUubmFtZTsKICAgIGlmICh0YXJnZXQgaXMgUHJvY2VkdXJlICYmIHRhcmdldC5pc0ZhY3RvcnkpIHsKICAgICAgaWYgKG5hbWUuaXNFbXB0eSkgewogICAgICAgIG5hbWUgPSB0YXJnZXQuZW5jbG9zaW5nQ2xhc3MubmFtZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBuYW1lID0gJyR7dGFyZ2V0LmVuY2xvc2luZ0NsYXNzLm5hbWV9LiR7bmFtZX0nOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVwb3J0KAogICAgICAgIG5vZGUsIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFN0YXRpY0ludm9jYXRpb24ud2l0aEFyZ3VtZW50cyhuYW1lKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudCB2aXNpdEFzRXhwcmVzc2lvbihBc0V4cHJlc3Npb24gbm9kZSkgewogICAgZmluYWwgQ29uc3RhbnQgY29uc3RhbnQgPSBfZXZhbHVhdGVTdWJleHByZXNzaW9uKG5vZGUub3BlcmFuZCk7CiAgICBpZiAoc2hvdWxkQmVVbmV2YWx1YXRlZCkgewogICAgICByZXR1cm4gdW5ldmFsdWF0ZWQobm9kZSwKICAgICAgICAgIG5ldyBBc0V4cHJlc3Npb24oZXh0cmFjdChjb25zdGFudCksIGVudi5zdWJzdGl0dXRlVHlwZShub2RlLnR5cGUpKSk7CiAgICB9CiAgICByZXR1cm4gZW5zdXJlSXNTdWJ0eXBlKGNvbnN0YW50LCBldmFsdWF0ZURhcnRUeXBlKG5vZGUsIG5vZGUudHlwZSksIG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnQgdmlzaXRJc0V4cHJlc3Npb24oSXNFeHByZXNzaW9uIG5vZGUpIHsKICAgIGZpbmFsIENvbnN0YW50IGNvbnN0YW50ID0gbm9kZS5vcGVyYW5kLmFjY2VwdCh0aGlzKTsKICAgIGlmIChzaG91bGRCZVVuZXZhbHVhdGVkKSB7CiAgICAgIHJldHVybiB1bmV2YWx1YXRlZChub2RlLCBuZXcgSXNFeHByZXNzaW9uKGV4dHJhY3QoY29uc3RhbnQpLCBub2RlLnR5cGUpKTsKICAgIH0KICAgIGlmIChjb25zdGFudCBpcyBOdWxsQ29uc3RhbnQpIHsKICAgICAgcmV0dXJuIG1ha2VCb29sQ29uc3RhbnQobm9kZS50eXBlID09IHR5cGVFbnZpcm9ubWVudC5udWxsVHlwZSB8fAogICAgICAgICAgbm9kZS50eXBlID09IHR5cGVFbnZpcm9ubWVudC5vYmplY3RUeXBlIHx8CiAgICAgICAgICBub2RlLnR5cGUgaXMgRHluYW1pY1R5cGUpOwogICAgfQogICAgcmV0dXJuIG1ha2VCb29sQ29uc3RhbnQoCiAgICAgICAgaXNTdWJ0eXBlKGNvbnN0YW50LCBldmFsdWF0ZURhcnRUeXBlKG5vZGUsIG5vZGUudHlwZSkpKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50IHZpc2l0Tm90KE5vdCBub2RlKSB7CiAgICBmaW5hbCBDb25zdGFudCBjb25zdGFudCA9IF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24obm9kZS5vcGVyYW5kKTsKICAgIGlmIChjb25zdGFudCBpcyBCb29sQ29uc3RhbnQpIHsKICAgICAgcmV0dXJuIG1ha2VCb29sQ29uc3RhbnQoY29uc3RhbnQgIT0gdHJ1ZUNvbnN0YW50KTsKICAgIH0KICAgIGlmIChzaG91bGRCZVVuZXZhbHVhdGVkKSB7CiAgICAgIHJldHVybiB1bmV2YWx1YXRlZChub2RlLCBuZXcgTm90KGV4dHJhY3QoY29uc3RhbnQpKSk7CiAgICB9CiAgICByZXR1cm4gcmVwb3J0KAogICAgICAgIG5vZGUsCiAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkVHlwZS53aXRoQXJndW1lbnRzKGNvbnN0YW50LAogICAgICAgICAgICB0eXBlRW52aXJvbm1lbnQuYm9vbFR5cGUsIGNvbnN0YW50LmdldFR5cGUodHlwZUVudmlyb25tZW50KSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnQgdmlzaXRTeW1ib2xMaXRlcmFsKFN5bWJvbExpdGVyYWwgbm9kZSkgewogICAgZmluYWwgUmVmZXJlbmNlIGxpYnJhcnlSZWZlcmVuY2UgPQogICAgICAgIG5vZGUudmFsdWUuc3RhcnRzV2l0aCgnXycpID8gbGlicmFyeU9mKG5vZGUpLnJlZmVyZW5jZSA6IG51bGw7CiAgICByZXR1cm4gY2Fub25pY2FsaXplKG5ldyBTeW1ib2xDb25zdGFudChub2RlLnZhbHVlLCBsaWJyYXJ5UmVmZXJlbmNlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudCB2aXNpdEluc3RhbnRpYXRpb24oSW5zdGFudGlhdGlvbiBub2RlKSB7CiAgICBmaW5hbCBDb25zdGFudCBjb25zdGFudCA9IF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uKTsKICAgIGlmIChzaG91bGRCZVVuZXZhbHVhdGVkKSB7CiAgICAgIHJldHVybiB1bmV2YWx1YXRlZCgKICAgICAgICAgIG5vZGUsCiAgICAgICAgICBuZXcgSW5zdGFudGlhdGlvbihleHRyYWN0KGNvbnN0YW50KSwKICAgICAgICAgICAgICBub2RlLnR5cGVBcmd1bWVudHMubWFwKCh0KSA9PiBlbnYuc3Vic3RpdHV0ZVR5cGUodCkpLnRvTGlzdCgpKSk7CiAgICB9CiAgICBpZiAoY29uc3RhbnQgaXMgVGVhck9mZkNvbnN0YW50KSB7CiAgICAgIGlmIChub2RlLnR5cGVBcmd1bWVudHMubGVuZ3RoID09CiAgICAgICAgICBjb25zdGFudC5wcm9jZWR1cmUuZnVuY3Rpb24udHlwZVBhcmFtZXRlcnMubGVuZ3RoKSB7CiAgICAgICAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9CiAgICAgICAgICAgIGV2YWx1YXRlRGFydFR5cGVzKG5vZGUsIG5vZGUudHlwZUFyZ3VtZW50cyk7CiAgICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZSgKICAgICAgICAgICAgbmV3IFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQoY29uc3RhbnQsIHR5cGVBcmd1bWVudHMpKTsKICAgICAgfQogICAgICByZXR1cm4gcmVwb3J0SW52YWxpZCgKICAgICAgICAgIG5vZGUsCiAgICAgICAgICAnVGhlIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50cyBzdXBwbGllZCBpbiB0aGUgcGFydGlhbCBpbnN0YW50aWF0aW9uICcKICAgICAgICAgICdkb2VzIG5vdCBtYXRjaCB0aGUgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzIG9mIHRoZSAkY29uc3RhbnQuJyk7CiAgICB9CiAgICAvLyBUaGUgaW5uZXIgZXhwcmVzc2lvbiBpbiBhbiBpbnN0YW50aWF0aW9uIGNhbiBuZXZlciBiZSBudWxsLCBzaW5jZQogICAgLy8gaW5zdGFudGlhdGlvbnMgYXJlIG9ubHkgaW5mZXJyZWQgb24gZGlyZWN0IHJlZmVyZW5jZXMgdG8gZGVjbGFyYXRpb25zLgogICAgcmV0dXJuIHJlcG9ydEludmFsaWQoCiAgICAgICAgbm9kZSwgJ09ubHkgdGVhci1vZmYgY29uc3RhbnRzIGNhbiBiZSBwYXJ0aWFsbHkgaW5zdGFudGlhdGVkLicpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnQgdmlzaXRDaGVja0xpYnJhcnlJc0xvYWRlZChDaGVja0xpYnJhcnlJc0xvYWRlZCBub2RlKSB7CiAgICByZXR1cm4gcmVwb3J0KAogICAgICAgIG5vZGUsIHRlbXBsYXRlQ29uc3RFdmFsRGVmZXJyZWRMaWJyYXJ5LndpdGhBcmd1bWVudHMobm9kZS5pbXBvcnQubmFtZSkpOwogIH0KCiAgLy8gSGVscGVyIG1ldGhvZHM6CgogIGJvb2wgaXNaZXJvKENvbnN0YW50IHZhbHVlKSA9PgogICAgICAodmFsdWUgaXMgSW50Q29uc3RhbnQgJiYgdmFsdWUudmFsdWUgPT0gMCkgfHwKICAgICAgKHZhbHVlIGlzIEphdmFTY3JpcHRJbnRDb25zdGFudCAmJiB2YWx1ZS5iaWdJbnRWYWx1ZSA9PSBCaWdJbnQuemVybykgfHwKICAgICAgKHZhbHVlIGlzIERvdWJsZUNvbnN0YW50ICYmIHZhbHVlLnZhbHVlID09IDApOwoKICBib29sIGlzTmFOKENvbnN0YW50IHZhbHVlKSA9PiB2YWx1ZSBpcyBEb3VibGVDb25zdGFudCAmJiB2YWx1ZS52YWx1ZS5pc05hTjsKCiAgYm9vbCBoYXNQcmltaXRpdmVFcXVhbChDb25zdGFudCBjb25zdGFudCkgewogICAgLy8gVE9ETyhhc2tlc2MsIGZpc2h5dGhlZmlzaCk6IE1ha2Ugc3VyZSB0aGUgY29ycmVjdCBjbGFzcyBpcyBpbmZlcnJlZAogICAgLy8gd2hlbiB3ZSBjbGVhbiB1cCBKYXZhU2NyaXB0IGludCBjb25zdGFudCBoYW5kbGluZy4KICAgIERhcnRUeXBlIHR5cGUgPSBjb25zdGFudC5nZXRUeXBlKHR5cGVFbnZpcm9ubWVudCk7CiAgICByZXR1cm4gISh0eXBlIGlzIEludGVyZmFjZVR5cGUgJiYgIWNsYXNzSGFzUHJpbWl0aXZlRXF1YWwodHlwZS5jbGFzc05vZGUpKTsKICB9CgogIGJvb2wgY2xhc3NIYXNQcmltaXRpdmVFcXVhbChDbGFzcyBrbGFzcykgewogICAgYm9vbCBjYWNoZWQgPSBwcmltaXRpdmVFcXVhbENhY2hlW2tsYXNzXTsKICAgIGlmIChjYWNoZWQgIT0gbnVsbCkgcmV0dXJuIGNhY2hlZDsKICAgIGZvciAoUHJvY2VkdXJlIHByb2NlZHVyZSBpbiBrbGFzcy5wcm9jZWR1cmVzKSB7CiAgICAgIGlmIChwcm9jZWR1cmUua2luZCA9PSBQcm9jZWR1cmVLaW5kLk9wZXJhdG9yICYmCiAgICAgICAgICBwcm9jZWR1cmUubmFtZS5uYW1lID09ICc9PScgJiYKICAgICAgICAgICFwcm9jZWR1cmUuaXNBYnN0cmFjdCAmJgogICAgICAgICAgIXByb2NlZHVyZS5pc0ZvcndhcmRpbmdTdHViKSB7CiAgICAgICAgcmV0dXJuIHByaW1pdGl2ZUVxdWFsQ2FjaGVba2xhc3NdID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGlmIChrbGFzcy5zdXBlcnR5cGUgPT0gbnVsbCkgcmV0dXJuIHRydWU7IC8vIFRvIGJlIG9uIHRoZSBzYWZlIHNpZGUKICAgIHJldHVybiBwcmltaXRpdmVFcXVhbENhY2hlW2tsYXNzXSA9CiAgICAgICAgY2xhc3NIYXNQcmltaXRpdmVFcXVhbChrbGFzcy5zdXBlcnR5cGUuY2xhc3NOb2RlKTsKICB9CgogIEJvb2xDb25zdGFudCBtYWtlQm9vbENvbnN0YW50KGJvb2wgdmFsdWUpID0+CiAgICAgIHZhbHVlID8gdHJ1ZUNvbnN0YW50IDogZmFsc2VDb25zdGFudDsKCiAgRG91YmxlQ29uc3RhbnQgbWFrZURvdWJsZUNvbnN0YW50KGRvdWJsZSB2YWx1ZSkgewogICAgaWYgKHRhcmdldGluZ0phdmFTY3JpcHQpIHsKICAgICAgLy8gQ29udmVydCB0byBhbiBpbnRlZ2VyIHdoZW4gcG9zc2libGUgKG1hdGNoaW5nIHRoZSBydW50aW1lIGJlaGF2aW9yCiAgICAgIC8vIG9mIGBpcyBpbnRgKS4KICAgICAgaWYgKHZhbHVlLmlzRmluaXRlICYmICFpZGVudGljYWwodmFsdWUsIC0wLjApKSB7CiAgICAgICAgaW50IGkgPSB2YWx1ZS50b0ludCgpOwogICAgICAgIGlmICh2YWx1ZSA9PSBpLnRvRG91YmxlKCkpIHJldHVybiBuZXcgSmF2YVNjcmlwdEludENvbnN0YW50KGkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IERvdWJsZUNvbnN0YW50KHZhbHVlKTsKICB9CgogIGJvb2wgaXNTdWJ0eXBlKENvbnN0YW50IGNvbnN0YW50LCBEYXJ0VHlwZSB0eXBlKSB7CiAgICBEYXJ0VHlwZSBjb25zdGFudFR5cGUgPSBjb25zdGFudC5nZXRUeXBlKHR5cGVFbnZpcm9ubWVudCk7CiAgICBpZiAodGFyZ2V0aW5nSmF2YVNjcmlwdCkgewogICAgICBpZiAoY29uc3RhbnRUeXBlID09IHR5cGVFbnZpcm9ubWVudC5pbnRUeXBlICYmCiAgICAgICAgICB0eXBlID09IHR5cGVFbnZpcm9ubWVudC5kb3VibGVUeXBlKSB7CiAgICAgICAgLy8gV2l0aCBKUyBzZW1hbnRpY3MsIGFuIGludGVnZXIgaXMgYWxzbyBhIGRvdWJsZS4KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQoKICAgICAgaWYgKGNvbnN0YW50VHlwZSA9PSB0eXBlRW52aXJvbm1lbnQuZG91YmxlVHlwZSAmJgogICAgICAgICAgdHlwZSA9PSB0eXBlRW52aXJvbm1lbnQuaW50VHlwZSkgewogICAgICAgIGRvdWJsZSB2YWx1ZSA9IChjb25zdGFudCBhcyBEb3VibGVDb25zdGFudCkudmFsdWU7CiAgICAgICAgaWYgKHZhbHVlLmlzRmluaXRlICYmIHZhbHVlID09IHZhbHVlLnRydW5jYXRlVG9Eb3VibGUoKSkgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHlwZUVudmlyb25tZW50LmlzU3VidHlwZU9mKGNvbnN0YW50VHlwZSwgdHlwZSk7CiAgfQoKICBDb25zdGFudCBlbnN1cmVJc1N1YnR5cGUoQ29uc3RhbnQgY29uc3RhbnQsIERhcnRUeXBlIHR5cGUsIFRyZWVOb2RlIG5vZGUpIHsKICAgIGlmICghaXNTdWJ0eXBlKGNvbnN0YW50LCB0eXBlKSkgewogICAgICByZXR1cm4gcmVwb3J0KAogICAgICAgICAgbm9kZSwKICAgICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFR5cGUud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICBjb25zdGFudCwgdHlwZSwgY29uc3RhbnQuZ2V0VHlwZSh0eXBlRW52aXJvbm1lbnQpKSk7CiAgICB9CiAgICByZXR1cm4gY29uc3RhbnQ7CiAgfQoKICBMaXN0PERhcnRUeXBlPiBldmFsdWF0ZVR5cGVBcmd1bWVudHMoVHJlZU5vZGUgbm9kZSwgQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIGV2YWx1YXRlRGFydFR5cGVzKG5vZGUsIGFyZ3VtZW50cy50eXBlcyk7CiAgfQoKICBMaXN0PERhcnRUeXBlPiBldmFsdWF0ZVN1cGVyVHlwZUFyZ3VtZW50cyhUcmVlTm9kZSBub2RlLCBTdXBlcnR5cGUgdHlwZSkgewogICAgcmV0dXJuIGV2YWx1YXRlRGFydFR5cGVzKG5vZGUsIHR5cGUudHlwZUFyZ3VtZW50cyk7CiAgfQoKICBMaXN0PERhcnRUeXBlPiBldmFsdWF0ZURhcnRUeXBlcyhUcmVlTm9kZSBub2RlLCBMaXN0PERhcnRUeXBlPiB0eXBlcykgewogICAgLy8gVE9ETzogT25jZSB0aGUgZnJvbnRlbmQgZ3VhcmFudGVlcyB0aGF0IHRoZXJlIGFyZSBubyBmcmVlIHR5cGUgdmFyaWFibGVzCiAgICAvLyBsZWZ0IG92ZXIgYWZ0ZXIgc3Vic3RpdHV0aW9uLCB3ZSBjYW4gZW5hYmxlIHRoaXMgc2hvcnRjdXQgYWdhaW46CiAgICAvLyBpZiAoZW52LmlzRW1wdHkpIHJldHVybiB0eXBlczsKICAgIHJldHVybiB0eXBlcy5tYXAoKHQpID0+IGV2YWx1YXRlRGFydFR5cGUobm9kZSwgdCkpLnRvTGlzdCgpOwogIH0KCiAgRGFydFR5cGUgZXZhbHVhdGVEYXJ0VHlwZShUcmVlTm9kZSBub2RlLCBEYXJ0VHlwZSB0eXBlKSB7CiAgICBmaW5hbCBEYXJ0VHlwZSByZXN1bHQgPSBlbnYuc3Vic3RpdHV0ZVR5cGUodHlwZSk7CgogICAgaWYgKCFpc0luc3RhbnRpYXRlZChyZXN1bHQpKSB7CiAgICAgIHJldHVybiByZXBvcnQoCiAgICAgICAgICBub2RlLCB0ZW1wbGF0ZUNvbnN0RXZhbEZyZWVUeXBlUGFyYW1ldGVyLndpdGhBcmd1bWVudHModHlwZSkpOwogICAgfQoKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBMaXN0PENvbnN0YW50PiBldmFsdWF0ZVBvc2l0aW9uYWxBcmd1bWVudHMoQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIGFyZ3VtZW50cy5wb3NpdGlvbmFsLm1hcCgoRXhwcmVzc2lvbiBub2RlKSB7CiAgICAgIHJldHVybiBfZXZhbHVhdGVTdWJleHByZXNzaW9uKG5vZGUpOwogICAgfSkudG9MaXN0KCk7CiAgfQoKICBNYXA8U3RyaW5nLCBDb25zdGFudD4gZXZhbHVhdGVOYW1lZEFyZ3VtZW50cyhBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICBpZiAoYXJndW1lbnRzLm5hbWVkLmlzRW1wdHkpIHJldHVybiBjb25zdCA8U3RyaW5nLCBDb25zdGFudD57fTsKCiAgICBmaW5hbCBNYXA8U3RyaW5nLCBDb25zdGFudD4gbmFtZWQgPSB7fTsKICAgIGFyZ3VtZW50cy5uYW1lZC5mb3JFYWNoKChOYW1lZEV4cHJlc3Npb24gcGFpcikgewogICAgICBuYW1lZFtwYWlyLm5hbWVdID0gX2V2YWx1YXRlU3ViZXhwcmVzc2lvbihwYWlyLnZhbHVlKTsKICAgIH0pOwogICAgcmV0dXJuIG5hbWVkOwogIH0KCiAgQXJndW1lbnRzIHVuZXZhbHVhdGVkQXJndW1lbnRzKExpc3Q8Q29uc3RhbnQ+IHBvc2l0aW9uYWxBcmdzLAogICAgICBNYXA8U3RyaW5nLCBDb25zdGFudD4gbmFtZWRBcmdzLCBMaXN0PERhcnRUeXBlPiB0eXBlcykgewogICAgZmluYWwgTGlzdDxFeHByZXNzaW9uPiBwb3NpdGlvbmFsID0KICAgICAgICBuZXcgTGlzdDxFeHByZXNzaW9uPihwb3NpdGlvbmFsQXJncy5sZW5ndGgpOwogICAgZmluYWwgTGlzdDxOYW1lZEV4cHJlc3Npb24+IG5hbWVkID0KICAgICAgICBuZXcgTGlzdDxOYW1lZEV4cHJlc3Npb24+KG5hbWVkQXJncy5sZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb3NpdGlvbmFsQXJncy5sZW5ndGg7ICsraSkgewogICAgICBwb3NpdGlvbmFsW2ldID0gZXh0cmFjdChwb3NpdGlvbmFsQXJnc1tpXSk7CiAgICB9CiAgICBpbnQgaSA9IDA7CiAgICBuYW1lZEFyZ3MuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIENvbnN0YW50IHZhbHVlKSB7CiAgICAgIG5hbWVkW2krK10gPSBuZXcgTmFtZWRFeHByZXNzaW9uKG5hbWUsIGV4dHJhY3QodmFsdWUpKTsKICAgIH0pOwogICAgcmV0dXJuIG5ldyBBcmd1bWVudHMocG9zaXRpb25hbCwgbmFtZWQ6IG5hbWVkLCB0eXBlczogdHlwZXMpOwogIH0KCiAgQ29uc3RhbnQgY2Fub25pY2FsaXplKENvbnN0YW50IGNvbnN0YW50KSB7CiAgICByZXR1cm4gY2Fub25pY2FsaXphdGlvbkNhY2hlLnB1dElmQWJzZW50KGNvbnN0YW50LCAoKSA9PiBjb25zdGFudCk7CiAgfQoKICBUIHdpdGhOZXdJbnN0YW5jZUJ1aWxkZXI8VD4oCiAgICAgIENsYXNzIGtsYXNzLCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzLCBUIGZuKCkpIHsKICAgIEluc3RhbmNlQnVpbGRlciBvbGQgPSBpbnN0YW5jZUJ1aWxkZXI7CiAgICB0cnkgewogICAgICBpbnN0YW5jZUJ1aWxkZXIgPSBuZXcgSW5zdGFuY2VCdWlsZGVyKHRoaXMsIGtsYXNzLCB0eXBlQXJndW1lbnRzKTsKICAgICAgcmV0dXJuIGZuKCk7CiAgICB9IGZpbmFsbHkgewogICAgICBpbnN0YW5jZUJ1aWxkZXIgPSBvbGQ7CiAgICB9CiAgfQoKICBUIHdpdGhOZXdFbnZpcm9ubWVudDxUPihUIGZuKCkpIHsKICAgIGZpbmFsIEV2YWx1YXRpb25FbnZpcm9ubWVudCBvbGRFbnYgPSBlbnY7CiAgICB0cnkgewogICAgICBlbnYgPSBuZXcgRXZhbHVhdGlvbkVudmlyb25tZW50KCk7CiAgICAgIHJldHVybiBmbigpOwogICAgfSBmaW5hbGx5IHsKICAgICAgZW52ID0gb2xkRW52OwogICAgfQogIH0KCiAgQ29uc3RhbnQgZXZhbHVhdGVCaW5hcnlCaXRPcGVyYXRpb24oU3RyaW5nIG9wLCBpbnQgYSwgaW50IGIsIFRyZWVOb2RlIG5vZGUpIHsKICAgIGludCByZXN1bHQ7CiAgICBzd2l0Y2ggKG9wKSB7CiAgICAgIGNhc2UgJ3wnOgogICAgICAgIHJlc3VsdCA9IGEgfCBiOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICcmJzoKICAgICAgICByZXN1bHQgPSBhICYgYjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnXic6CiAgICAgICAgcmVzdWx0ID0gYSBeIGI7CiAgICAgICAgYnJlYWs7CiAgICB9CgogICAgaWYgKHRhcmdldGluZ0phdmFTY3JpcHQpIHsKICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZShuZXcgSmF2YVNjcmlwdEludENvbnN0YW50KHJlc3VsdCkpOwogICAgfQogICAgcmV0dXJuIGNhbm9uaWNhbGl6ZShuZXcgSW50Q29uc3RhbnQocmVzdWx0KSk7CiAgfQoKICBDb25zdGFudCBldmFsdWF0ZUJpbmFyeVNoaWZ0T3BlcmF0aW9uKFN0cmluZyBvcCwgaW50IGEsIGludCBiLCBUcmVlTm9kZSBub2RlLAogICAgICB7bmVnYXRpdmVSZWNlaXZlcjogZmFsc2V9KSB7CiAgICBpbnQgcmVzdWx0OwogICAgc3dpdGNoIChvcCkgewogICAgICBjYXNlICc8PCc6CiAgICAgICAgcmVzdWx0ID0gYSA8PCBiOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICc+Pic6CiAgICAgICAgaWYgKHRhcmdldGluZ0phdmFTY3JpcHQpIHsKICAgICAgICAgIGlmIChuZWdhdGl2ZVJlY2VpdmVyKSB7CiAgICAgICAgICAgIGNvbnN0IGludCBzaWduQml0ID0gMHg4MDAwMDAwMDsKICAgICAgICAgICAgYSAtPSAoYSAmIHNpZ25CaXQpIDw8IDE7CiAgICAgICAgICB9CiAgICAgICAgICByZXN1bHQgPSBhID4+IGI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlc3VsdCA9IGEgPj4gYjsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJz4+Pic6CiAgICAgICAgLy8gVE9ETyhmaXNoeXRoZWZpc2gpOiBJbXBsZW1lbnQgSlMgc2VtYW50aWNzIGZvciBgPj4+YC4KICAgICAgICByZXN1bHQgPSBiID49IDY0ID8gMCA6IChhID4+IGIpICYgKCgxIDw8ICg2NCAtIGIpKSAtIDEpOwogICAgICAgIGJyZWFrOwogICAgfQoKICAgIGlmICh0YXJnZXRpbmdKYXZhU2NyaXB0KSB7CiAgICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IEphdmFTY3JpcHRJbnRDb25zdGFudChyZXN1bHQudG9VbnNpZ25lZCgzMikpKTsKICAgIH0KICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IEludENvbnN0YW50KHJlc3VsdCkpOwogIH0KCiAgQ29uc3RhbnQgZXZhbHVhdGVCaW5hcnlOdW1lcmljT3BlcmF0aW9uKAogICAgICBTdHJpbmcgb3AsIG51bSBhLCBudW0gYiwgVHJlZU5vZGUgbm9kZSkgewogICAgbnVtIHJlc3VsdDsKICAgIHN3aXRjaCAob3ApIHsKICAgICAgY2FzZSAnKyc6CiAgICAgICAgcmVzdWx0ID0gYSArIGI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJy0nOgogICAgICAgIHJlc3VsdCA9IGEgLSBiOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICcqJzoKICAgICAgICByZXN1bHQgPSBhICogYjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnLyc6CiAgICAgICAgcmVzdWx0ID0gYSAvIGI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ34vJzoKICAgICAgICByZXN1bHQgPSBhIH4vIGI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJyUnOgogICAgICAgIHJlc3VsdCA9IGEgJSBiOwogICAgICAgIGJyZWFrOwogICAgfQoKICAgIGlmIChyZXN1bHQgaXMgaW50KSB7CiAgICAgIGlmICh0YXJnZXRpbmdKYXZhU2NyaXB0KSB7CiAgICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZShuZXcgSmF2YVNjcmlwdEludENvbnN0YW50KHJlc3VsdCkpOwogICAgICB9CiAgICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IEludENvbnN0YW50KHJlc3VsdC50b1NpZ25lZCg2NCkpKTsKICAgIH0KICAgIGlmIChyZXN1bHQgaXMgZG91YmxlKSB7CiAgICAgIHJldHVybiBjYW5vbmljYWxpemUobWFrZURvdWJsZUNvbnN0YW50KHJlc3VsdCkpOwogICAgfQoKICAgIHN3aXRjaCAob3ApIHsKICAgICAgY2FzZSAnPCc6CiAgICAgICAgcmV0dXJuIG1ha2VCb29sQ29uc3RhbnQoYSA8IGIpOwogICAgICBjYXNlICc8PSc6CiAgICAgICAgcmV0dXJuIG1ha2VCb29sQ29uc3RhbnQoYSA8PSBiKTsKICAgICAgY2FzZSAnPj0nOgogICAgICAgIHJldHVybiBtYWtlQm9vbENvbnN0YW50KGEgPj0gYik7CiAgICAgIGNhc2UgJz4nOgogICAgICAgIHJldHVybiBtYWtlQm9vbENvbnN0YW50KGEgPiBiKTsKICAgIH0KCiAgICByZXR1cm4gcmVwb3J0SW52YWxpZChub2RlLCAiVW5leHBlY3RlZCBiaW5hcnkgbnVtZXJpYyBvcGVyYXRpb24gJyRvcCcuIik7CiAgfQoKICBMaWJyYXJ5IGxpYnJhcnlPZihUcmVlTm9kZSBub2RlKSB7CiAgICAvLyBUaGUgdHJlZSBzdHJ1Y3R1cmUgb2YgdGhlIGtlcm5lbCBBU1QgZW5zdXJlcyB3ZSBhbHdheXMgaGF2ZSBhbiBlbmNsb3NpbmcKICAgIC8vIGxpYnJhcnkuCiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBpZiAobm9kZSBpcyBMaWJyYXJ5KSByZXR1cm4gbm9kZTsKICAgICAgbm9kZSA9IG5vZGUucGFyZW50OwogICAgfQogIH0KfQoKLy8vIEhvbGRzIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZm9yIGEgY29uc3RhbnQgb2JqZWN0LCBuYW1lbHkKLy8vICAgKiB0aGUgW2tsYXNzXSBiZWluZyBpbnN0YW50aWF0ZWQKLy8vICAgKiB0aGUgW3R5cGVBcmd1bWVudHNdIHVzZWQgZm9yIHRoZSBpbnN0YW50aWF0aW9uCi8vLyAgICogdGhlIFtmaWVsZHNdIHRoZSBpbnN0YW5jZSB3aWxsIG9idGFpbiAoYWxsIGZpZWxkcyBmcm9tIHRoZQovLy8gICAgIGluc3RhbnRpYXRlZCBba2xhc3NdIHVwIHRvIHRoZSBbT2JqZWN0XSBrbGFzcykuCmNsYXNzIEluc3RhbmNlQnVpbGRlciB7CiAgQ29uc3RhbnRFdmFsdWF0b3IgZXZhbHVhdG9yOwoKICAvLy8gVGhlIGNsYXNzIG9mIHRoZSBuZXcgaW5zdGFuY2UuCiAgZmluYWwgQ2xhc3Mga2xhc3M7CgogIC8vLyBUaGUgdmFsdWVzIG9mIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgdGhlIG5ldyBpbnN0YW5jZS4KICBmaW5hbCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzOwoKICAvLy8gVGhlIGZpZWxkIHZhbHVlcyBvZiB0aGUgbmV3IGluc3RhbmNlLgogIGZpbmFsIE1hcDxGaWVsZCwgQ29uc3RhbnQ+IGZpZWxkcyA9IDxGaWVsZCwgQ29uc3RhbnQ+e307CgogIGZpbmFsIExpc3Q8QXNzZXJ0U3RhdGVtZW50PiBhc3NlcnRzID0gPEFzc2VydFN0YXRlbWVudD5bXTsKCiAgZmluYWwgTGlzdDxFeHByZXNzaW9uPiB1bnVzZWRBcmd1bWVudHMgPSA8RXhwcmVzc2lvbj5bXTsKCiAgSW5zdGFuY2VCdWlsZGVyKHRoaXMuZXZhbHVhdG9yLCB0aGlzLmtsYXNzLCB0aGlzLnR5cGVBcmd1bWVudHMpOwoKICB2b2lkIHNldEZpZWxkVmFsdWUoRmllbGQgZmllbGQsIENvbnN0YW50IGNvbnN0YW50KSB7CiAgICBmaWVsZHNbZmllbGRdID0gY29uc3RhbnQ7CiAgfQoKICBJbnN0YW5jZUNvbnN0YW50IGJ1aWxkSW5zdGFuY2UoKSB7CiAgICBhc3NlcnQoYXNzZXJ0cy5pc0VtcHR5KTsKICAgIGZpbmFsIE1hcDxSZWZlcmVuY2UsIENvbnN0YW50PiBmaWVsZFZhbHVlcyA9IDxSZWZlcmVuY2UsIENvbnN0YW50Pnt9OwogICAgZmllbGRzLmZvckVhY2goKEZpZWxkIGZpZWxkLCBDb25zdGFudCB2YWx1ZSkgewogICAgICBhc3NlcnQodmFsdWUgaXMhIFVuZXZhbHVhdGVkQ29uc3RhbnQpOwogICAgICBmaWVsZFZhbHVlc1tmaWVsZC5yZWZlcmVuY2VdID0gdmFsdWU7CiAgICB9KTsKICAgIGFzc2VydCh1bnVzZWRBcmd1bWVudHMuaXNFbXB0eSk7CiAgICByZXR1cm4gbmV3IEluc3RhbmNlQ29uc3RhbnQoa2xhc3MucmVmZXJlbmNlLCB0eXBlQXJndW1lbnRzLCBmaWVsZFZhbHVlcyk7CiAgfQoKICBJbnN0YW5jZUNyZWF0aW9uIGJ1aWxkVW5ldmFsdWF0ZWRJbnN0YW5jZSgpIHsKICAgIGZpbmFsIE1hcDxSZWZlcmVuY2UsIEV4cHJlc3Npb24+IGZpZWxkVmFsdWVzID0gPFJlZmVyZW5jZSwgRXhwcmVzc2lvbj57fTsKICAgIGZpZWxkcy5mb3JFYWNoKChGaWVsZCBmaWVsZCwgQ29uc3RhbnQgdmFsdWUpIHsKICAgICAgZmllbGRWYWx1ZXNbZmllbGQucmVmZXJlbmNlXSA9IGV2YWx1YXRvci5leHRyYWN0KHZhbHVlKTsKICAgIH0pOwogICAgcmV0dXJuIG5ldyBJbnN0YW5jZUNyZWF0aW9uKAogICAgICAgIGtsYXNzLnJlZmVyZW5jZSwgdHlwZUFyZ3VtZW50cywgZmllbGRWYWx1ZXMsIGFzc2VydHMsIHVudXNlZEFyZ3VtZW50cyk7CiAgfQp9CgovLy8gSG9sZHMgYW4gZW52aXJvbm1lbnQgb2YgdHlwZSBwYXJhbWV0ZXJzLCBwYXJhbWV0ZXJzIGFuZCB2YXJpYWJsZXMuCmNsYXNzIEV2YWx1YXRpb25FbnZpcm9ubWVudCB7CiAgLy8vIFRoZSB2YWx1ZXMgb2YgdGhlIHR5cGUgcGFyYW1ldGVycyBpbiBzY29wZS4KICBmaW5hbCBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IF90eXBlVmFyaWFibGVzID0KICAgICAgPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwoKICAvLy8gVGhlIHZhbHVlcyBvZiB0aGUgcGFyYW1ldGVycy92YXJpYWJsZXMgaW4gc2NvcGUuCiAgZmluYWwgTWFwPFZhcmlhYmxlRGVjbGFyYXRpb24sIENvbnN0YW50PiBfdmFyaWFibGVzID0KICAgICAgPFZhcmlhYmxlRGVjbGFyYXRpb24sIENvbnN0YW50Pnt9OwoKICAvLy8gVGhlIHZhcmlhYmxlcyB0aGF0IGhvbGQgdW5ldmFsdWF0ZWQgY29uc3RhbnRzLgogIC8vLwogIC8vLyBWYXJpYWJsZXMgYXJlIHJlbW92ZWQgZnJvbSB0aGlzIHNldCB3aGVuIGxvb2tlZCB1cCwgbGVhdmluZyBvbmx5IHRoZQogIC8vLyB1bnJlYWQgdmFyaWFibGVzIGF0IHRoZSBlbmQuCiAgZmluYWwgU2V0PFZhcmlhYmxlRGVjbGFyYXRpb24+IF91bnJlYWRVbmV2YWx1YXRlZFZhcmlhYmxlcyA9CiAgICAgIG5ldyBTZXQ8VmFyaWFibGVEZWNsYXJhdGlvbj4oKTsKCiAgLy8vIFdoZXRoZXIgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgZW1wdHkuCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfdHlwZVZhcmlhYmxlcy5pc0VtcHR5ICYmIF92YXJpYWJsZXMuaXNFbXB0eTsKCiAgdm9pZCBhZGRUeXBlUGFyYW1ldGVyVmFsdWUoVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIsIERhcnRUeXBlIHZhbHVlKSB7CiAgICBhc3NlcnQoIV90eXBlVmFyaWFibGVzLmNvbnRhaW5zS2V5KHBhcmFtZXRlcikpOwogICAgX3R5cGVWYXJpYWJsZXNbcGFyYW1ldGVyXSA9IHZhbHVlOwogIH0KCiAgdm9pZCBhZGRWYXJpYWJsZVZhbHVlKFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIENvbnN0YW50IHZhbHVlKSB7CiAgICBfdmFyaWFibGVzW3ZhcmlhYmxlXSA9IHZhbHVlOwogICAgaWYgKHZhbHVlIGlzIFVuZXZhbHVhdGVkQ29uc3RhbnQpIHsKICAgICAgX3VucmVhZFVuZXZhbHVhdGVkVmFyaWFibGVzLmFkZCh2YXJpYWJsZSk7CiAgICB9CiAgfQoKICBEYXJ0VHlwZSBsb29rdXBQYXJhbWV0ZXJWYWx1ZShUeXBlUGFyYW1ldGVyIHBhcmFtZXRlcikgewogICAgZmluYWwgRGFydFR5cGUgdmFsdWUgPSBfdHlwZVZhcmlhYmxlc1twYXJhbWV0ZXJdOwogICAgYXNzZXJ0KHZhbHVlICE9IG51bGwpOwogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgQ29uc3RhbnQgbG9va3VwVmFyaWFibGUoVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSkgewogICAgQ29uc3RhbnQgdmFsdWUgPSBfdmFyaWFibGVzW3ZhcmlhYmxlXTsKICAgIGlmICh2YWx1ZSBpcyBVbmV2YWx1YXRlZENvbnN0YW50KSB7CiAgICAgIF91bnJlYWRVbmV2YWx1YXRlZFZhcmlhYmxlcy5yZW1vdmUodmFyaWFibGUpOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgLy8vIFRoZSB1bmV2YWx1YXRlZCBjb25zdGFudHMgb2YgdmFyaWFibGVzIHRoYXQgd2VyZSBuZXZlciByZWFkLgogIEl0ZXJhYmxlPFVuZXZhbHVhdGVkQ29uc3RhbnQ+IGdldCB1bmV2YWx1YXRlZFVucmVhZENvbnN0YW50cyB7CiAgICBpZiAoX3VucmVhZFVuZXZhbHVhdGVkVmFyaWFibGVzLmlzRW1wdHkpIHJldHVybiBjb25zdCBbXTsKICAgIHJldHVybiBfdW5yZWFkVW5ldmFsdWF0ZWRWYXJpYWJsZXMubWFwPFVuZXZhbHVhdGVkQ29uc3RhbnQ+KAogICAgICAgIChWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKSA9PiBfdmFyaWFibGVzW3ZhcmlhYmxlXSk7CiAgfQoKICBEYXJ0VHlwZSBzdWJzdGl0dXRlVHlwZShEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAoX3R5cGVWYXJpYWJsZXMuaXNFbXB0eSkgcmV0dXJuIHR5cGU7CiAgICByZXR1cm4gc3Vic3RpdHV0ZSh0eXBlLCBfdHlwZVZhcmlhYmxlcyk7CiAgfQp9CgovLyBVc2VkIGFzIGNvbnRyb2wtZmxvdyB0byBhYm9ydCB0aGUgY3VycmVudCBldmFsdWF0aW9uLgpjbGFzcyBfQWJvcnREdWVUb0Vycm9yIHsKICBmaW5hbCBUcmVlTm9kZSBub2RlOwogIGZpbmFsIE1lc3NhZ2UgbWVzc2FnZTsKICBmaW5hbCBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0OwoKICBfQWJvcnREdWVUb0Vycm9yKHRoaXMubm9kZSwgdGhpcy5tZXNzYWdlLCB7dGhpcy5jb250ZXh0fSk7Cn0KCmNsYXNzIF9BYm9ydER1ZVRvSW52YWxpZEV4cHJlc3Npb24gewogIGZpbmFsIFRyZWVOb2RlIG5vZGU7CiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CgogIF9BYm9ydER1ZVRvSW52YWxpZEV4cHJlc3Npb24odGhpcy5ub2RlLCB0aGlzLm1lc3NhZ2UpOwp9CgphYnN0cmFjdCBjbGFzcyBFcnJvclJlcG9ydGVyIHsKICBjb25zdCBFcnJvclJlcG9ydGVyKCk7CgogIHZvaWQgcmVwb3J0KExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2UsIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQpOwoKICB2b2lkIHJlcG9ydEludmFsaWRFeHByZXNzaW9uKEludmFsaWRFeHByZXNzaW9uIG5vZGUpOwp9CgpjbGFzcyBTaW1wbGVFcnJvclJlcG9ydGVyIGltcGxlbWVudHMgRXJyb3JSZXBvcnRlciB7CiAgY29uc3QgU2ltcGxlRXJyb3JSZXBvcnRlcigpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHJlcG9ydChMb2NhdGVkTWVzc2FnZSBtZXNzYWdlLCBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0KSB7CiAgICBfcmVwb3J0KG1lc3NhZ2UpOwogICAgZm9yIChMb2NhdGVkTWVzc2FnZSBjb250ZXh0TWVzc2FnZSBpbiBjb250ZXh0KSB7CiAgICAgIF9yZXBvcnQoY29udGV4dE1lc3NhZ2UpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZXBvcnRJbnZhbGlkRXhwcmVzc2lvbihJbnZhbGlkRXhwcmVzc2lvbiBub2RlKSB7CiAgICAvLyBJZ25vcmVkCiAgfQoKICB2b2lkIF9yZXBvcnQoTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZSkgewogICAgcmVwb3J0TWVzc2FnZShtZXNzYWdlLnVyaSwgbWVzc2FnZS5jaGFyT2Zmc2V0LCBtZXNzYWdlLm1lc3NhZ2UpOwogIH0KCiAgdm9pZCByZXBvcnRNZXNzYWdlKFVyaSB1cmksIGludCBvZmZzZXQsIFN0cmluZyBtZXNzYWdlKSB7CiAgICBpby5leGl0Q29kZSA9IDQyOwogICAgaW8uc3RkZXJyLndyaXRlbG4oJyR1cmk6JG9mZnNldCBDb25zdGFudCBldmFsdWF0aW9uIGVycm9yOiAkbWVzc2FnZScpOwogIH0KfQoKY2xhc3MgSXNJbnN0YW50aWF0ZWRWaXNpdG9yIGV4dGVuZHMgRGFydFR5cGVWaXNpdG9yPGJvb2w+IHsKICBmaW5hbCBfYXZhaWxhYmxlVmFyaWFibGVzID0gbmV3IFNldDxUeXBlUGFyYW1ldGVyPigpOwoKICBib29sIGlzSW5zdGFudGlhdGVkKERhcnRUeXBlIHR5cGUpIHsKICAgIHJldHVybiB0eXBlLmFjY2VwdCh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZGVmYXVsdERhcnRUeXBlKERhcnRUeXBlIG5vZGUpIHsKICAgIHRocm93ICdBIHZpc2l0b3IgbWV0aG9kIHNlZW1zIHRvIGJlIHVuaW1wbGVtZW50ZWQhJzsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRJbnZhbGlkVHlwZShJbnZhbGlkVHlwZSBub2RlKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RHluYW1pY1R5cGUoRHluYW1pY1R5cGUgbm9kZSkgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFZvaWRUeXBlKFZvaWRUeXBlIG5vZGUpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRCb3R0b21UeXBlKEJvdHRvbVR5cGUgbm9kZSkgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFR5cGVQYXJhbWV0ZXJUeXBlKFR5cGVQYXJhbWV0ZXJUeXBlIG5vZGUpIHsKICAgIHJldHVybiBfYXZhaWxhYmxlVmFyaWFibGVzLmNvbnRhaW5zKG5vZGUucGFyYW1ldGVyKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgbm9kZSkgewogICAgcmV0dXJuIG5vZGUudHlwZUFyZ3VtZW50cwogICAgICAgIC5ldmVyeSgoRGFydFR5cGUgdHlwZUFyZ3VtZW50KSA9PiB0eXBlQXJndW1lbnQuYWNjZXB0KHRoaXMpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIG5vZGUpIHsKICAgIGZpbmFsIExpc3Q8VHlwZVBhcmFtZXRlcj4gcGFyYW1ldGVycyA9IG5vZGUudHlwZVBhcmFtZXRlcnM7CiAgICBfYXZhaWxhYmxlVmFyaWFibGVzLmFkZEFsbChwYXJhbWV0ZXJzKTsKICAgIGZpbmFsIGJvb2wgcmVzdWx0ID0gbm9kZS5yZXR1cm5UeXBlLmFjY2VwdCh0aGlzKSAmJgogICAgICAgIG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMuZXZlcnkoKHApID0+IHAuYWNjZXB0KHRoaXMpKSAmJgogICAgICAgIG5vZGUubmFtZWRQYXJhbWV0ZXJzLmV2ZXJ5KChwKSA9PiBwLnR5cGUuYWNjZXB0KHRoaXMpKTsKICAgIF9hdmFpbGFibGVWYXJpYWJsZXMucmVtb3ZlQWxsKHBhcmFtZXRlcnMpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSBub2RlKSB7CiAgICByZXR1cm4gbm9kZS51bmFsaWFzLmFjY2VwdCh0aGlzKTsKICB9Cn0KCmJvb2wgX2lzRm9ybWFsUGFyYW1ldGVyKFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUpIHsKICBmaW5hbCBUcmVlTm9kZSBwYXJlbnQgPSB2YXJpYWJsZS5wYXJlbnQ7CiAgaWYgKHBhcmVudCBpcyBGdW5jdGlvbk5vZGUpIHsKICAgIHJldHVybiBwYXJlbnQucG9zaXRpb25hbFBhcmFtZXRlcnMuY29udGFpbnModmFyaWFibGUpIHx8CiAgICAgICAgcGFyZW50Lm5hbWVkUGFyYW1ldGVycy5jb250YWlucyh2YXJpYWJsZSk7CiAgfQogIHJldHVybiBmYWxzZTsKfQqJeABOTjwBUARQSkUZBE1MIARLUS8iASIBGAEiLiQpJSsvAS0BHQkYESUhKS4oIyclEiorJzE1LCYzMzItMjwsLSgtMSYBKgFMSRwkHSwZISovASoxAUcmHiA+MRQCARkdHiwlIRwfJB0vTg8aEhUbEyIXFi0yBAIBNRxOMS4WNScuQAE8AScCATEiLSkBTxkcIhopARgULhcaIBgnHCMzSSZFASoBKTgBODE0MzYyARdQP0RLCgYEAQwzLjQIEQQBDEUuNAgRBAEMIS40LjY0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IGV2YWx1YXRvcjsKICBmaW5hbCBFeHByZXNzaW9uIG9yaWdpbmFsOwogIGZpbmFsIERhcnRUeXBlIGVsZW1lbnRUeXBlOwoKICAvLyBFYWNoIGVsZW1lbnQgb2YgW3BhcnRzXSBpcyBlaXRoZXIgYSBgTGlzdDxDb25zdGFudD5gIChjb250YWluaW5nIGZ1bGx5CiAgLy8gZXZhbHVhdGVkIGNvbnN0YW50cykgb3IgYSBgQ29uc3RhbnRgIChwb3RlbnRpYWxseSB1bmV2YWx1YXRlZCkuCiAgTGlzdDxPYmplY3Q+IHBhcnRzID0gPE9iamVjdD5bPENvbnN0YW50PltdXTsKCiAgX0xpc3RPclNldENvbnN0YW50QnVpbGRlcih0aGlzLm9yaWdpbmFsLCB0aGlzLmVsZW1lbnRUeXBlLCB0aGlzLmV2YWx1YXRvcik7CgogIEwgbWFrZUxpdGVyYWwoTGlzdDxFeHByZXNzaW9uPiBlbGVtZW50cyk7CgogIC8vLyBBZGQgYW4gZWxlbWVudCB0byB0aGUgY29uc3RhbnQgbGlzdCBiZWluZyBidWlsdCBieSB0aGlzIGJ1aWxkZXIuCiAgdm9pZCBhZGQoRXhwcmVzc2lvbiBlbGVtZW50KSB7CiAgICBDb25zdGFudCBjb25zdGFudCA9IGV2YWx1YXRvci5fZXZhbHVhdGVTdWJleHByZXNzaW9uKGVsZW1lbnQpOwogICAgaWYgKGV2YWx1YXRvci5zaG91bGRCZVVuZXZhbHVhdGVkKSB7CiAgICAgIHBhcnRzLmFkZChldmFsdWF0b3IudW5ldmFsdWF0ZWQoCiAgICAgICAgICBlbGVtZW50LCBtYWtlTGl0ZXJhbChbZXZhbHVhdG9yLmV4dHJhY3QoY29uc3RhbnQpXSkpKTsKICAgIH0gZWxzZSB7CiAgICAgIGFkZENvbnN0YW50KGNvbnN0YW50LCBlbGVtZW50KTsKICAgIH0KICB9CgogIHZvaWQgYWRkU3ByZWFkKEV4cHJlc3Npb24gc3ByZWFkRXhwcmVzc2lvbikgewogICAgQ29uc3RhbnQgc3ByZWFkID0KICAgICAgICBldmFsdWF0b3IudW5sb3dlcihldmFsdWF0b3IuX2V2YWx1YXRlU3ViZXhwcmVzc2lvbihzcHJlYWRFeHByZXNzaW9uKSk7CiAgICBpZiAoZXZhbHVhdG9yLnNob3VsZEJlVW5ldmFsdWF0ZWQpIHsKICAgICAgLy8gVW5ldmFsdWF0ZWQgc3ByZWFkCiAgICAgIHBhcnRzLmFkZChzcHJlYWQpOwogICAgfSBlbHNlIGlmIChzcHJlYWQgPT0gZXZhbHVhdG9yLm51bGxDb25zdGFudCkgewogICAgICAvLyBOdWxsIHNwcmVhZAogICAgICBldmFsdWF0b3IucmVwb3J0KHNwcmVhZEV4cHJlc3Npb24sIG1lc3NhZ2VDb25zdEV2YWxOdWxsVmFsdWUpOwogICAgfSBlbHNlIHsKICAgICAgLy8gRnVsbHkgZXZhbHVhdGVkIHNwcmVhZAogICAgICBMaXN0PENvbnN0YW50PiBlbnRyaWVzOwogICAgICBpZiAoc3ByZWFkIGlzIExpc3RDb25zdGFudCkgewogICAgICAgIGVudHJpZXMgPSBzcHJlYWQuZW50cmllczsKICAgICAgfSBlbHNlIGlmIChzcHJlYWQgaXMgU2V0Q29uc3RhbnQpIHsKICAgICAgICBlbnRyaWVzID0gc3ByZWFkLmVudHJpZXM7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gTm90IGxpc3Qgb3Igc2V0IGluIHNwcmVhZAogICAgICAgIHJldHVybiBldmFsdWF0b3IucmVwb3J0KAogICAgICAgICAgICBzcHJlYWRFeHByZXNzaW9uLCBtZXNzYWdlQ29uc3RFdmFsTm90TGlzdE9yU2V0SW5TcHJlYWQpOwogICAgICB9CiAgICAgIGZvciAoQ29uc3RhbnQgZW50cnkgaW4gZW50cmllcykgewogICAgICAgIGFkZENvbnN0YW50KGVudHJ5LCBzcHJlYWRFeHByZXNzaW9uKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBhZGRDb25zdGFudChDb25zdGFudCBjb25zdGFudCwgVHJlZU5vZGUgY29udGV4dCk7CgogIENvbnN0YW50IGJ1aWxkKCk7Cn0KCmNsYXNzIExpc3RDb25zdGFudEJ1aWxkZXIgZXh0ZW5kcyBfTGlzdE9yU2V0Q29uc3RhbnRCdWlsZGVyPExpc3RMaXRlcmFsPiB7CiAgTGlzdENvbnN0YW50QnVpbGRlcigKICAgICAgRXhwcmVzc2lvbiBvcmlnaW5hbCwgRGFydFR5cGUgZWxlbWVudFR5cGUsIENvbnN0YW50RXZhbHVhdG9yIGV2YWx1YXRvcikKICAgICAgOiBzdXBlcihvcmlnaW5hbCwgZWxlbWVudFR5cGUsIGV2YWx1YXRvcik7CgogIEBvdmVycmlkZQogIExpc3RMaXRlcmFsIG1ha2VMaXRlcmFsKExpc3Q8RXhwcmVzc2lvbj4gZWxlbWVudHMpID0+CiAgICAgIG5ldyBMaXN0TGl0ZXJhbChlbGVtZW50cywgaXNDb25zdDogdHJ1ZSk7CgogIEBvdmVycmlkZQogIHZvaWQgYWRkQ29uc3RhbnQoQ29uc3RhbnQgY29uc3RhbnQsIFRyZWVOb2RlIGNvbnRleHQpIHsKICAgIExpc3Q8Q29uc3RhbnQ+IGxhc3RQYXJ0OwogICAgaWYgKHBhcnRzLmxhc3QgaXMgTGlzdDxDb25zdGFudD4pIHsKICAgICAgbGFzdFBhcnQgPSBwYXJ0cy5sYXN0OwogICAgfSBlbHNlIHsKICAgICAgcGFydHMuYWRkKGxhc3RQYXJ0ID0gPENvbnN0YW50PltdKTsKICAgIH0KICAgIGxhc3RQYXJ0LmFkZChldmFsdWF0b3IuZW5zdXJlSXNTdWJ0eXBlKGNvbnN0YW50LCBlbGVtZW50VHlwZSwgY29udGV4dCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnQgYnVpbGQoKSB7CiAgICBpZiAocGFydHMubGVuZ3RoID09IDEpIHsKICAgICAgLy8gRnVsbHkgZXZhbHVhdGVkCiAgICAgIHJldHVybiBldmFsdWF0b3IKICAgICAgICAgIC5sb3dlckxpc3RDb25zdGFudChuZXcgTGlzdENvbnN0YW50KGVsZW1lbnRUeXBlLCBwYXJ0cy5zaW5nbGUpKTsKICAgIH0KICAgIExpc3Q8RXhwcmVzc2lvbj4gbGlzdHMgPSA8RXhwcmVzc2lvbj5bXTsKICAgIGZvciAoT2JqZWN0IHBhcnQgaW4gcGFydHMpIHsKICAgICAgaWYgKHBhcnQgaXMgTGlzdDxDb25zdGFudD4pIHsKICAgICAgICBsaXN0cy5hZGQobmV3IENvbnN0YW50RXhwcmVzc2lvbihuZXcgTGlzdENvbnN0YW50KGVsZW1lbnRUeXBlLCBwYXJ0KSkpOwogICAgICB9IGVsc2UgaWYgKHBhcnQgaXMgQ29uc3RhbnQpIHsKICAgICAgICBsaXN0cy5hZGQoZXZhbHVhdG9yLmV4dHJhY3QocGFydCkpOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93ICdOb24tY29uc3RhbnQgaW4gY29uc3RhbnQgbGlzdCc7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBldmFsdWF0b3IudW5ldmFsdWF0ZWQoCiAgICAgICAgb3JpZ2luYWwsIG5ldyBMaXN0Q29uY2F0ZW5hdGlvbihsaXN0cywgdHlwZUFyZ3VtZW50OiBlbGVtZW50VHlwZSkpOwogIH0KfQoKY2xhc3MgU2V0Q29uc3RhbnRCdWlsZGVyIGV4dGVuZHMgX0xpc3RPclNldENvbnN0YW50QnVpbGRlcjxTZXRMaXRlcmFsPiB7CiAgZmluYWwgU2V0PENvbnN0YW50PiBzZWVuID0gbmV3IFNldDxDb25zdGFudD4uaWRlbnRpdHkoKTsKCiAgU2V0Q29uc3RhbnRCdWlsZGVyKAogICAgICBFeHByZXNzaW9uIG9yaWdpbmFsLCBEYXJ0VHlwZSBlbGVtZW50VHlwZSwgQ29uc3RhbnRFdmFsdWF0b3IgZXZhbHVhdG9yKQogICAgICA6IHN1cGVyKG9yaWdpbmFsLCBlbGVtZW50VHlwZSwgZXZhbHVhdG9yKTsKCiAgQG92ZXJyaWRlCiAgU2V0TGl0ZXJhbCBtYWtlTGl0ZXJhbChMaXN0PEV4cHJlc3Npb24+IGVsZW1lbnRzKSA9PgogICAgICBuZXcgU2V0TGl0ZXJhbChlbGVtZW50cywgaXNDb25zdDogdHJ1ZSk7CgogIEBvdmVycmlkZQogIHZvaWQgYWRkQ29uc3RhbnQoQ29uc3RhbnQgY29uc3RhbnQsIFRyZWVOb2RlIGNvbnRleHQpIHsKICAgIGlmICghZXZhbHVhdG9yLmhhc1ByaW1pdGl2ZUVxdWFsKGNvbnN0YW50KSkgewogICAgICBldmFsdWF0b3IucmVwb3J0KGNvbnRleHQsCiAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEVsZW1lbnRJbXBsZW1lbnRzRXF1YWwud2l0aEFyZ3VtZW50cyhjb25zdGFudCkpOwogICAgfQogICAgaWYgKCFzZWVuLmFkZChjb25zdGFudCkpIHsKICAgICAgZXZhbHVhdG9yLnJlcG9ydCgKICAgICAgICAgIGNvbnRleHQsIHRlbXBsYXRlQ29uc3RFdmFsRHVwbGljYXRlRWxlbWVudC53aXRoQXJndW1lbnRzKGNvbnN0YW50KSk7CiAgICB9CgogICAgTGlzdDxDb25zdGFudD4gbGFzdFBhcnQ7CiAgICBpZiAocGFydHMubGFzdCBpcyBMaXN0PENvbnN0YW50PikgewogICAgICBsYXN0UGFydCA9IHBhcnRzLmxhc3Q7CiAgICB9IGVsc2UgewogICAgICBwYXJ0cy5hZGQobGFzdFBhcnQgPSA8Q29uc3RhbnQ+W10pOwogICAgfQogICAgbGFzdFBhcnQuYWRkKGV2YWx1YXRvci5lbnN1cmVJc1N1YnR5cGUoY29uc3RhbnQsIGVsZW1lbnRUeXBlLCBjb250ZXh0KSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudCBidWlsZCgpIHsKICAgIGlmIChwYXJ0cy5sZW5ndGggPT0gMSkgewogICAgICAvLyBGdWxseSBldmFsdWF0ZWQKICAgICAgTGlzdDxDb25zdGFudD4gZW50cmllcyA9IHBhcnRzLnNpbmdsZTsKICAgICAgU2V0Q29uc3RhbnQgcmVzdWx0ID0gbmV3IFNldENvbnN0YW50KGVsZW1lbnRUeXBlLCBlbnRyaWVzKTsKICAgICAgaWYgKGV2YWx1YXRvci5kZXN1Z2FyU2V0cykgewogICAgICAgIGZpbmFsIExpc3Q8Q29uc3RhbnRNYXBFbnRyeT4gbWFwRW50cmllcyA9CiAgICAgICAgICAgIG5ldyBMaXN0PENvbnN0YW50TWFwRW50cnk+KGVudHJpZXMubGVuZ3RoKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgIG1hcEVudHJpZXNbaV0gPQogICAgICAgICAgICAgIG5ldyBDb25zdGFudE1hcEVudHJ5KGVudHJpZXNbaV0sIGV2YWx1YXRvci5udWxsQ29uc3RhbnQpOwogICAgICAgIH0KICAgICAgICBDb25zdGFudCBtYXAgPSBldmFsdWF0b3IubG93ZXJNYXBDb25zdGFudChuZXcgTWFwQ29uc3RhbnQoCiAgICAgICAgICAgIGVsZW1lbnRUeXBlLCBldmFsdWF0b3IudHlwZUVudmlyb25tZW50Lm51bGxUeXBlLCBtYXBFbnRyaWVzKSk7CiAgICAgICAgcmV0dXJuIGV2YWx1YXRvci5sb3dlcigKICAgICAgICAgICAgcmVzdWx0LAogICAgICAgICAgICBuZXcgSW5zdGFuY2VDb25zdGFudCgKICAgICAgICAgICAgICAgIGV2YWx1YXRvci51bm1vZGlmaWFibGVTZXRNYXAuZW5jbG9zaW5nQ2xhc3MucmVmZXJlbmNlLCBbCiAgICAgICAgICAgICAgZWxlbWVudFR5cGUKICAgICAgICAgICAgXSwgPFJlZmVyZW5jZSwgQ29uc3RhbnQ+ewogICAgICAgICAgICAgIGV2YWx1YXRvci51bm1vZGlmaWFibGVTZXRNYXAucmVmZXJlbmNlOiBtYXAKICAgICAgICAgICAgfSkpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBldmFsdWF0b3IubG93ZXJTZXRDb25zdGFudChyZXN1bHQpOwogICAgICB9CiAgICB9CiAgICBMaXN0PEV4cHJlc3Npb24+IHNldHMgPSA8RXhwcmVzc2lvbj5bXTsKICAgIGZvciAoT2JqZWN0IHBhcnQgaW4gcGFydHMpIHsKICAgICAgaWYgKHBhcnQgaXMgTGlzdDxDb25zdGFudD4pIHsKICAgICAgICBzZXRzLmFkZChuZXcgQ29uc3RhbnRFeHByZXNzaW9uKG5ldyBTZXRDb25zdGFudChlbGVtZW50VHlwZSwgcGFydCkpKTsKICAgICAgfSBlbHNlIGlmIChwYXJ0IGlzIENvbnN0YW50KSB7CiAgICAgICAgc2V0cy5hZGQoZXZhbHVhdG9yLmV4dHJhY3QocGFydCkpOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93ICdOb24tY29uc3RhbnQgaW4gY29uc3RhbnQgc2V0JzsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGV2YWx1YXRvci51bmV2YWx1YXRlZCgKICAgICAgICBvcmlnaW5hbCwgbmV3IFNldENvbmNhdGVuYXRpb24oc2V0cywgdHlwZUFyZ3VtZW50OiBlbGVtZW50VHlwZSkpOwogIH0KfQoKY2xhc3MgTWFwQ29uc3RhbnRCdWlsZGVyIHsKICBmaW5hbCBDb25zdGFudEV2YWx1YXRvciBldmFsdWF0b3I7CiAgZmluYWwgRXhwcmVzc2lvbiBvcmlnaW5hbDsKICBmaW5hbCBEYXJ0VHlwZSBrZXlUeXBlOwogIGZpbmFsIERhcnRUeXBlIHZhbHVlVHlwZTsKCiAgLy8vIEVhY2ggZWxlbWVudCBvZiBbcGFydHNdIGlzIGVpdGhlciBhIGBMaXN0PENvbnN0YW50TWFwRW50cnk+YCAoY29udGFpbmluZwogIC8vLyBmdWxseSBldmFsdWF0ZWQgbWFwIGVudHJpZXMpIG9yIGEgYENvbnN0YW50YCAocG90ZW50aWFsbHkgdW5ldmFsdWF0ZWQpLgogIExpc3Q8T2JqZWN0PiBwYXJ0cyA9IDxPYmplY3Q+WzxDb25zdGFudE1hcEVudHJ5PltdXTsKCiAgZmluYWwgU2V0PENvbnN0YW50PiBzZWVuS2V5cyA9IG5ldyBTZXQ8Q29uc3RhbnQ+LmlkZW50aXR5KCk7CgogIE1hcENvbnN0YW50QnVpbGRlcigKICAgICAgdGhpcy5vcmlnaW5hbCwgdGhpcy5rZXlUeXBlLCB0aGlzLnZhbHVlVHlwZSwgdGhpcy5ldmFsdWF0b3IpOwoKICAvLy8gQWRkIGEgbWFwIGVudHJ5IHRvIHRoZSBjb25zdGFudCBtYXAgYmVpbmcgYnVpbHQgYnkgdGhpcyBidWlsZGVyCiAgdm9pZCBhZGQoTWFwRW50cnkgZWxlbWVudCkgewogICAgQ29uc3RhbnQga2V5ID0gZXZhbHVhdG9yLl9ldmFsdWF0ZVN1YmV4cHJlc3Npb24oZWxlbWVudC5rZXkpOwogICAgQ29uc3RhbnQgdmFsdWUgPSBldmFsdWF0b3IuX2V2YWx1YXRlU3ViZXhwcmVzc2lvbihlbGVtZW50LnZhbHVlKTsKICAgIGlmIChldmFsdWF0b3Iuc2hvdWxkQmVVbmV2YWx1YXRlZCkgewogICAgICBwYXJ0cy5hZGQoZXZhbHVhdG9yLnVuZXZhbHVhdGVkKAogICAgICAgICAgZWxlbWVudC5rZXksCiAgICAgICAgICBuZXcgTWFwTGl0ZXJhbCgKICAgICAgICAgICAgICBbbmV3IE1hcEVudHJ5KGV2YWx1YXRvci5leHRyYWN0KGtleSksIGV2YWx1YXRvci5leHRyYWN0KHZhbHVlKSldLAogICAgICAgICAgICAgIGlzQ29uc3Q6IHRydWUpKSk7CiAgICB9IGVsc2UgewogICAgICBhZGRDb25zdGFudChrZXksIHZhbHVlLCBlbGVtZW50LmtleSwgZWxlbWVudC52YWx1ZSk7CiAgICB9CiAgfQoKICB2b2lkIGFkZFNwcmVhZChFeHByZXNzaW9uIHNwcmVhZEV4cHJlc3Npb24pIHsKICAgIENvbnN0YW50IHNwcmVhZCA9CiAgICAgICAgZXZhbHVhdG9yLnVubG93ZXIoZXZhbHVhdG9yLl9ldmFsdWF0ZVN1YmV4cHJlc3Npb24oc3ByZWFkRXhwcmVzc2lvbikpOwogICAgaWYgKGV2YWx1YXRvci5zaG91bGRCZVVuZXZhbHVhdGVkKSB7CiAgICAgIC8vIFVuZXZhbHVhdGVkIHNwcmVhZAogICAgICBwYXJ0cy5hZGQoc3ByZWFkKTsKICAgIH0gZWxzZSBpZiAoc3ByZWFkID09IGV2YWx1YXRvci5udWxsQ29uc3RhbnQpIHsKICAgICAgLy8gTnVsbCBzcHJlYWQKICAgICAgZXZhbHVhdG9yLnJlcG9ydChzcHJlYWRFeHByZXNzaW9uLCBtZXNzYWdlQ29uc3RFdmFsTnVsbFZhbHVlKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIEZ1bGx5IGV2YWx1YXRlZCBzcHJlYWQKICAgICAgaWYgKHNwcmVhZCBpcyBNYXBDb25zdGFudCkgewogICAgICAgIGZvciAoQ29uc3RhbnRNYXBFbnRyeSBlbnRyeSBpbiBzcHJlYWQuZW50cmllcykgewogICAgICAgICAgYWRkQ29uc3RhbnQoCiAgICAgICAgICAgICAgZW50cnkua2V5LCBlbnRyeS52YWx1ZSwgc3ByZWFkRXhwcmVzc2lvbiwgc3ByZWFkRXhwcmVzc2lvbik7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIC8vIE5vdCBtYXAgaW4gc3ByZWFkCiAgICAgICAgcmV0dXJuIGV2YWx1YXRvci5yZXBvcnQoCiAgICAgICAgICAgIHNwcmVhZEV4cHJlc3Npb24sIG1lc3NhZ2VDb25zdEV2YWxOb3RNYXBJblNwcmVhZCk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgYWRkQ29uc3RhbnQoQ29uc3RhbnQga2V5LCBDb25zdGFudCB2YWx1ZSwgVHJlZU5vZGUga2V5Q29udGV4dCwKICAgICAgVHJlZU5vZGUgdmFsdWVDb250ZXh0KSB7CiAgICBMaXN0PENvbnN0YW50TWFwRW50cnk+IGxhc3RQYXJ0OwogICAgaWYgKHBhcnRzLmxhc3QgaXMgTGlzdDxDb25zdGFudE1hcEVudHJ5PikgewogICAgICBsYXN0UGFydCA9IHBhcnRzLmxhc3Q7CiAgICB9IGVsc2UgewogICAgICBwYXJ0cy5hZGQobGFzdFBhcnQgPSA8Q29uc3RhbnRNYXBFbnRyeT5bXSk7CiAgICB9CiAgICBpZiAoIWV2YWx1YXRvci5oYXNQcmltaXRpdmVFcXVhbChrZXkpKSB7CiAgICAgIGV2YWx1YXRvci5yZXBvcnQoCiAgICAgICAgICBrZXlDb250ZXh0LCB0ZW1wbGF0ZUNvbnN0RXZhbEtleUltcGxlbWVudHNFcXVhbC53aXRoQXJndW1lbnRzKGtleSkpOwogICAgfQogICAgaWYgKCFzZWVuS2V5cy5hZGQoa2V5KSkgewogICAgICBldmFsdWF0b3IucmVwb3J0KAogICAgICAgICAga2V5Q29udGV4dCwgdGVtcGxhdGVDb25zdEV2YWxEdXBsaWNhdGVLZXkud2l0aEFyZ3VtZW50cyhrZXkpKTsKICAgIH0KICAgIGxhc3RQYXJ0LmFkZChuZXcgQ29uc3RhbnRNYXBFbnRyeSgKICAgICAgICBldmFsdWF0b3IuZW5zdXJlSXNTdWJ0eXBlKGtleSwga2V5VHlwZSwga2V5Q29udGV4dCksCiAgICAgICAgZXZhbHVhdG9yLmVuc3VyZUlzU3VidHlwZSh2YWx1ZSwgdmFsdWVUeXBlLCB2YWx1ZUNvbnRleHQpKSk7CiAgfQoKICBDb25zdGFudCBidWlsZCgpIHsKICAgIGlmIChwYXJ0cy5sZW5ndGggPT0gMSkgewogICAgICAvLyBGdWxseSBldmFsdWF0ZWQKICAgICAgcmV0dXJuIGV2YWx1YXRvcgogICAgICAgICAgLmxvd2VyTWFwQ29uc3RhbnQobmV3IE1hcENvbnN0YW50KGtleVR5cGUsIHZhbHVlVHlwZSwgcGFydHMuc2luZ2xlKSk7CiAgICB9CiAgICBMaXN0PEV4cHJlc3Npb24+IG1hcHMgPSA8RXhwcmVzc2lvbj5bXTsKICAgIGZvciAoT2JqZWN0IHBhcnQgaW4gcGFydHMpIHsKICAgICAgaWYgKHBhcnQgaXMgTGlzdDxDb25zdGFudE1hcEVudHJ5PikgewogICAgICAgIG1hcHMuYWRkKAogICAgICAgICAgICBuZXcgQ29uc3RhbnRFeHByZXNzaW9uKG5ldyBNYXBDb25zdGFudChrZXlUeXBlLCB2YWx1ZVR5cGUsIHBhcnQpKSk7CiAgICAgIH0gZWxzZSBpZiAocGFydCBpcyBDb25zdGFudCkgewogICAgICAgIG1hcHMuYWRkKGV2YWx1YXRvci5leHRyYWN0KHBhcnQpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyAnTm9uLWNvbnN0YW50IGluIGNvbnN0YW50IG1hcCc7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBldmFsdWF0b3IudW5ldmFsdWF0ZWQob3JpZ2luYWwsCiAgICAgICAgbmV3IE1hcENvbmNhdGVuYXRpb24obWFwcywga2V5VHlwZToga2V5VHlwZSwgdmFsdWVUeXBlOiB2YWx1ZVR5cGUpKTsKICB9Cn0KgRMATk48ASMBQSUdHgFMRS8BTgEsAUchQyknQQ0mBgQBMBZPKRwZMxVFDSAeJCIqIg8lIUUIKC4IBgQBOQEUAgFLF04xAQw4MAEMOh0oHQ0qBk0EAQwVHRkXSwYtISRQJSwPLwgGIkwEAgFJOwEWTjEBDDcvAQw6MiBMBh8YTwYBHSgdDSoGTQQBDBUdGS1CIzI4MxpICkNLIBQiSRomOhEPMwgGLCEkTiUrDy4IBiJKBAIBGyUdGhwBT043AT8BFkQBRh9CRiknFxpQIA07BgQBMBZPKRwZMxVFDSAjORdLCg8dIT8IBgQBRh8lMB0NMgYtGE8GHhhJBic9RQQBFR0ZF1AGLCEsElAlKw8uCAYrTQQCAURwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2NvbnN0YW50X2NvbGxlY3Rpb25fYnVpbGRlcnMuZGFydEFzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF9jb25zdGFudHMuZGFydIONLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEua2VybmVsX2NvbnN0YW50czsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgSW52YWxpZEV4cHJlc3Npb247CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnIHNob3cgTG9jYXRlZE1lc3NhZ2U7CgppbXBvcnQgJy4uL2xvYWRlci5kYXJ0JyBzaG93IExvYWRlcjsKCmltcG9ydCAnY29uc3RhbnRfZXZhbHVhdG9yLmRhcnQnIHNob3cgRXJyb3JSZXBvcnRlcjsKCmNsYXNzIEtlcm5lbENvbnN0YW50RXJyb3JSZXBvcnRlciBleHRlbmRzIEVycm9yUmVwb3J0ZXIgewogIGZpbmFsIExvYWRlciBsb2FkZXI7CgogIEtlcm5lbENvbnN0YW50RXJyb3JSZXBvcnRlcih0aGlzLmxvYWRlcik7CgogIEBvdmVycmlkZQogIHZvaWQgcmVwb3J0KExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2UsIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQpIHsKICAgIGxvYWRlci5hZGRQcm9ibGVtKAogICAgICAgIG1lc3NhZ2UubWVzc2FnZU9iamVjdCwgbWVzc2FnZS5jaGFyT2Zmc2V0LCBtZXNzYWdlLmxlbmd0aCwgbWVzc2FnZS51cmksCiAgICAgICAgY29udGV4dDogY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlcG9ydEludmFsaWRFeHByZXNzaW9uKEludmFsaWRFeHByZXNzaW9uIG5vZGUpIHsKICAgIC8vIEFzc3VtZWQgdG8gYmUgYWxyZWFkeSByZXBvcnRlZC4KICB9Cn0KIQBOTjwBIAE5ATIBJQE1AToXASwBDEYXUBsEAQw5JwQCAThwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF9jb25zdGFudHMuZGFydENzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL21ldGFkYXRhX2NvbGxlY3Rvci5kYXJ0grsvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9rZXJuZWwuZGFydCcgc2hvdyBNZW1iZXIsIE1ldGFkYXRhUmVwb3NpdG9yeSwgTmFtZWROb2RlOwoKLy8vIFRoZSBjb2xsZWN0b3IgdG8gYWRkIHRhcmdldCBzcGVjaWZpYyBtZXRhZGF0YSB0by4KYWJzdHJhY3QgY2xhc3MgTWV0YWRhdGFDb2xsZWN0b3IgewogIC8vLyBNZXRhZGF0YSBpcyByZW1lbWJlcmVkIGluIHRoaXMgcmVwb3NpdG9yeSwgc28gdGhhdCB3aGVuIGl0IGlzIGFkZGVkCiAgLy8vIHRvIGEgY29tcG9uZW50LCBtZXRhZGF0YSBpcyBzZXJpYWxpemVkIHdpdGggdGhlIGNvbXBvbmVudC4KICBNZXRhZGF0YVJlcG9zaXRvcnk8ZHluYW1pYz4gZ2V0IHJlcG9zaXRvcnk7CgogIHZvaWQgc2V0Q29uc3RydWN0b3JOYW1lT2Zmc2V0KE1lbWJlciBub2RlLCBPYmplY3QgbmFtZSk7CgogIHZvaWQgc2V0RG9jdW1lbnRhdGlvbkNvbW1lbnQoTmFtZWROb2RlIG5vZGUsIFN0cmluZyBjb21tZW50KTsKfQoSAE5OPAFQATYjSkEuATsBQAIBOnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvbWV0YWRhdGFfY29sbGVjdG9yLmRhcnQ5c2Rrcm9vdDovcGtnL2tlcm5lbC9saWIvYmluYXJ5L2xpbWl0ZWRfYXN0X3RvX2JpbmFyeS5kYXJ0iPEvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCc7CmltcG9ydCAncGFja2FnZTprZXJuZWwvYmluYXJ5L2FzdF90b19iaW5hcnkuZGFydCc7CgovLy8gV3JpdGVzIGxpYnJhcmllcyB0aGF0IHNhdGlzZnkgdGhlIFtwcmVkaWNhdGVdLgovLy8KLy8vIE9ubHkgdGhlIHJlZmVyZW5jZWQgc3Vic2V0IG9mIGNhbm9uaWNhbCBuYW1lcyBpcyBpbmRleGVkIGFuZCB3cml0dGVuLAovLy8gc28gd2UgZG9uJ3Qgd2FzdGUgdGltZSBpbmRleGluZyBhbGwgbGlicmFyaWVzIG9mIGEgY29tcG9uZW50LCB3aGVuIG9ubHkKLy8vIGEgdGlueSBzdWJzZXQgaXMgdXNlZC4KY2xhc3MgTGltaXRlZEJpbmFyeVByaW50ZXIgZXh0ZW5kcyBCaW5hcnlQcmludGVyIHsKICBmaW5hbCBMaWJyYXJ5RmlsdGVyIHByZWRpY2F0ZTsKCiAgLy8vIEV4Y2x1ZGVzIGFsbCB1cmlUb1NvdXJjZSBpbmZvcm1hdGlvbi4KICAvLy8KICAvLy8gQnkgZGVmYXVsdCB0aGUgW3ByZWRpY2F0ZV0gYWJvdmUgd2lsbCBvbmx5IGV4Y2x1ZGUgY2Fub25pY2FsIG5hbWVzIGFuZAogIC8vLyBrZXJuZWwgbGlicmFyaWVzLCBidXQgaXQgd2lsbCBzdGlsbCBlbWl0IHRoZSBzb3VyY2VzIGZvciBhbGwgbGlicmFyaWVzLgogIC8vLyBmaWx0ZXJlZCBieSBsaWJyYXJpZXMgbWF0Y2hpbmcgW3ByZWRpY2F0ZV0uCiAgLy8gVE9ETyhzaWdtdW5kKTogcHJvdmlkZSBhIHdheSB0byBmaWx0ZXIgc291cmNlcyBkaXJlY3RseSBiYXNlZCBvbgogIC8vIFtwcmVkaWNhdGVdLiBUaGF0IHJlcXVpcmVzIHNwZWNpYWwgbG9naWMgdG8gaGFuZGxlIHNvdXJjZXMgZnJvbSBwYXJ0IGZpbGVzLgogIGZpbmFsIGJvb2wgZXhjbHVkZVVyaVRvU291cmNlOwoKICBMaW1pdGVkQmluYXJ5UHJpbnRlcigKICAgICAgU2luazxMaXN0PGludD4+IHNpbmssIHRoaXMucHJlZGljYXRlLCB0aGlzLmV4Y2x1ZGVVcmlUb1NvdXJjZSwKICAgICAge2Jvb2wgaW5jbHVkZU9mZnNldHMgPSB0cnVlfSkKICAgICAgOiBzdXBlcihzaW5rLAogICAgICAgICAgICBpbmNsdWRlU291cmNlczogIWV4Y2x1ZGVVcmlUb1NvdXJjZSwKICAgICAgICAgICAgaW5jbHVkZU9mZnNldHM6IGluY2x1ZGVPZmZzZXRzKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBjb21wdXRlQ2Fub25pY2FsTmFtZXMoQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgZm9yICh2YXIgbGlicmFyeSBpbiBjb21wb25lbnQubGlicmFyaWVzKSB7CiAgICAgIGlmIChwcmVkaWNhdGUobGlicmFyeSkpIHsKICAgICAgICBjb21wb25lbnQucm9vdAogICAgICAgICAgICAuZ2V0Q2hpbGRGcm9tVXJpKGxpYnJhcnkuaW1wb3J0VXJpKQogICAgICAgICAgICAuYmluZFRvKGxpYnJhcnkucmVmZXJlbmNlKTsKICAgICAgICBsaWJyYXJ5LmNvbXB1dGVDYW5vbmljYWxOYW1lcygpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHNob3VsZFdyaXRlTGlicmFyeUNhbm9uaWNhbE5hbWVzKExpYnJhcnkgbGlicmFyeSkgewogICAgcmV0dXJuIHByZWRpY2F0ZShsaWJyYXJ5KTsKICB9CgogIHZvaWQgd3JpdGVMaWJyYXJpZXMoQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb21wb25lbnQubGlicmFyaWVzLmxlbmd0aDsgKytpKSB7CiAgICAgIExpYnJhcnkgbGlicmFyeSA9IGNvbXBvbmVudC5saWJyYXJpZXNbaV07CiAgICAgIGlmIChwcmVkaWNhdGUobGlicmFyeSkpIHdyaXRlTGlicmFyeU5vZGUobGlicmFyeSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlTm9kZShOb2RlIG5vZGUpIHsKICAgIGlmIChub2RlIGlzIExpYnJhcnkgJiYgIXByZWRpY2F0ZShub2RlKSkgcmV0dXJuOwogICAgc3VwZXIud3JpdGVOb2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUNvbXBvbmVudEluZGV4KENvbXBvbmVudCBjb21wb25lbnQsIExpc3Q8TGlicmFyeT4gbGlicmFyaWVzKSB7CiAgICB2YXIgbGlicmFyaWVzVG9Xcml0ZSA9IGxpYnJhcmllcy53aGVyZShwcmVkaWNhdGUpLnRvTGlzdCgpOwogICAgc3VwZXIud3JpdGVDb21wb25lbnRJbmRleChjb21wb25lbnQsIGxpYnJhcmllc1RvV3JpdGUpOwogIH0KfQpFAE5OPAEiMwEzBEpMGzMhASwGTU4yRlEhARhFJBQxLQEMNC8gFzAoKQgGBAEMOx8EAS07MDkGBAEMHjUbBAEMS0A8BAIBMHBhY2thZ2U6a2VybmVsL2JpbmFyeS9saW1pdGVkX2FzdF90b19iaW5hcnkuZGFydCVzZGtyb290Oi9wa2cva2VybmVsL2xpYi92ZXJpZmllci5kYXJ0wABOdi8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCmxpYnJhcnkga2VybmVsLmNoZWNrczsKCmltcG9ydCAnYXN0LmRhcnQnOwppbXBvcnQgJ3RyYW5zZm9ybWF0aW9ucy9mbGFncy5kYXJ0JzsKCnZvaWQgdmVyaWZ5Q29tcG9uZW50KENvbXBvbmVudCBjb21wb25lbnQpIHsKICBWZXJpZnlpbmdWaXNpdG9yLmNoZWNrKGNvbXBvbmVudCk7Cn0KCmNsYXNzIFZlcmlmaWNhdGlvbkVycm9yIHsKICBmaW5hbCBUcmVlTm9kZSBjb250ZXh0OwoKICBmaW5hbCBUcmVlTm9kZSBub2RlOwoKICBmaW5hbCBTdHJpbmcgZGV0YWlsczsKCiAgVmVyaWZpY2F0aW9uRXJyb3IodGhpcy5jb250ZXh0LCB0aGlzLm5vZGUsIHRoaXMuZGV0YWlscyk7CgogIHRvU3RyaW5nKCkgewogICAgTG9jYXRpb24gbG9jYXRpb247CiAgICB0cnkgewogICAgICBsb2NhdGlvbiA9IG5vZGU/LmxvY2F0aW9uID8/IGNvbnRleHQ/LmxvY2F0aW9uOwogICAgfSBjYXRjaCAoXykgewogICAgICAvLyBUT0RPKGFoZSk6IEZpeCB0aGUgY29tcGlsZXIgaW5zdGVhZC4KICAgIH0KICAgIGlmIChsb2NhdGlvbiAhPSBudWxsKSB7CiAgICAgIFN0cmluZyBmaWxlID0gbG9jYXRpb24uZmlsZT8udG9TdHJpbmcoKSA/PyAiIjsKICAgICAgcmV0dXJuICIkZmlsZToke2xvY2F0aW9uLmxpbmV9OiR7bG9jYXRpb24uY29sdW1ufTogVmVyaWZpY2F0aW9uIGVycm9yOiIKICAgICAgICAgICIgJGRldGFpbHMiOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICJWZXJpZmljYXRpb24gZXJyb3I6ICRkZXRhaWxzXG4iCiAgICAgICAgICAiQ29udGV4dDogJyRjb250ZXh0Jy5cbiIKICAgICAgICAgICJOb2RlOiAnJG5vZGUnLiI7CiAgICB9CiAgfQp9CgplbnVtIFR5cGVkZWZTdGF0ZSB7IERvbmUsIEJlaW5nQ2hlY2tlZCB9CgovLy8gQ2hlY2tzIHRoYXQgYSBrZXJuZWwgY29tcG9uZW50IGlzIHdlbGwtZm9ybWVkLgovLy8KLy8vIFRoaXMgZG9lcyBub3QgaW5jbHVkZSBhbnkga2luZCBvZiB0eXBlIGNoZWNraW5nLgpjbGFzcyBWZXJpZnlpbmdWaXNpdG9yIGV4dGVuZHMgUmVjdXJzaXZlVmlzaXRvcjx2b2lkPiB7CiAgZmluYWwgU2V0PENsYXNzPiBjbGFzc2VzID0gbmV3IFNldDxDbGFzcz4oKTsKICBmaW5hbCBTZXQ8VHlwZWRlZj4gdHlwZWRlZnMgPSBuZXcgU2V0PFR5cGVkZWY+KCk7CiAgU2V0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzSW5TY29wZSA9IG5ldyBTZXQ8VHlwZVBhcmFtZXRlcj4oKTsKICBmaW5hbCBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHZhcmlhYmxlU3RhY2sgPSA8VmFyaWFibGVEZWNsYXJhdGlvbj5bXTsKICBmaW5hbCBNYXA8VHlwZWRlZiwgVHlwZWRlZlN0YXRlPiB0eXBlZGVmU3RhdGUgPSA8VHlwZWRlZiwgVHlwZWRlZlN0YXRlPnt9OwogIGJvb2wgY2xhc3NUeXBlUGFyYW1ldGVyc0FyZUluU2NvcGUgPSBmYWxzZTsKCiAgLy8vIElmIHRydWUsIHJlbGF4IGNlcnRhaW4gY2hlY2tzIGZvciAqb3V0bGluZSogbW9kZS4gRm9yIGV4YW1wbGUsIGRvbid0CiAgLy8vIGF0dGVtcHQgdG8gdmFsaWRhdGUgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXJzLgogIGJvb2wgaXNPdXRsaW5lID0gZmFsc2U7CgogIGJvb2wgaW5DYXRjaEJsb2NrID0gZmFsc2U7CgogIExpYnJhcnkgY3VycmVudExpYnJhcnk7CgogIE1lbWJlciBjdXJyZW50TWVtYmVyOwoKICBDbGFzcyBjdXJyZW50Q2xhc3M7CgogIFRyZWVOb2RlIGN1cnJlbnRQYXJlbnQ7CgogIFRyZWVOb2RlIGdldCBjb250ZXh0ID0+IGN1cnJlbnRNZW1iZXIgPz8gY3VycmVudENsYXNzOwoKICBzdGF0aWMgdm9pZCBjaGVjayhDb21wb25lbnQgY29tcG9uZW50KSB7CiAgICBjb21wb25lbnQuYWNjZXB0KG5ldyBWZXJpZnlpbmdWaXNpdG9yKCkpOwogIH0KCiAgZGVmYXVsdFRyZWVOb2RlKFRyZWVOb2RlIG5vZGUpIHsKICAgIHZpc2l0Q2hpbGRyZW4obm9kZSk7CiAgfQoKICBwcm9ibGVtKFRyZWVOb2RlIG5vZGUsIFN0cmluZyBkZXRhaWxzLCB7VHJlZU5vZGUgY29udGV4dH0pIHsKICAgIGNvbnRleHQgPz89IHRoaXMuY29udGV4dDsKICAgIHRocm93IG5ldyBWZXJpZmljYXRpb25FcnJvcihjb250ZXh0LCBub2RlLCBkZXRhaWxzKTsKICB9CgogIFRyZWVOb2RlIGVudGVyUGFyZW50KFRyZWVOb2RlIG5vZGUpIHsKICAgIGlmICghaWRlbnRpY2FsKG5vZGUucGFyZW50LCBjdXJyZW50UGFyZW50KSkgewogICAgICBwcm9ibGVtKAogICAgICAgICAgbm9kZSwKICAgICAgICAgICJJbmNvcnJlY3QgcGFyZW50IHBvaW50ZXIgb24gJHtub2RlLnJ1bnRpbWVUeXBlfToiCiAgICAgICAgICAiIGV4cGVjdGVkICcke2N1cnJlbnRQYXJlbnQucnVudGltZVR5cGV9JywiCiAgICAgICAgICAiIGJ1dCBmb3VuZDogJyR7bm9kZS5wYXJlbnQucnVudGltZVR5cGV9Jy4iLAogICAgICAgICAgY29udGV4dDogY3VycmVudFBhcmVudCk7CiAgICB9CiAgICB2YXIgb2xkUGFyZW50ID0gY3VycmVudFBhcmVudDsKICAgIGN1cnJlbnRQYXJlbnQgPSBub2RlOwogICAgcmV0dXJuIG9sZFBhcmVudDsKICB9CgogIHZvaWQgZXhpdFBhcmVudChUcmVlTm9kZSBvbGRQYXJlbnQpIHsKICAgIGN1cnJlbnRQYXJlbnQgPSBvbGRQYXJlbnQ7CiAgfQoKICBpbnQgZW50ZXJMb2NhbFNjb3BlKCkgPT4gdmFyaWFibGVTdGFjay5sZW5ndGg7CgogIHZvaWQgZXhpdExvY2FsU2NvcGUoaW50IHN0YWNrSGVpZ2h0KSB7CiAgICBmb3IgKGludCBpID0gc3RhY2tIZWlnaHQ7IGkgPCB2YXJpYWJsZVN0YWNrLmxlbmd0aDsgKytpKSB7CiAgICAgIHVuZGVjbGFyZVZhcmlhYmxlKHZhcmlhYmxlU3RhY2tbaV0pOwogICAgfQogICAgdmFyaWFibGVTdGFjay5sZW5ndGggPSBzdGFja0hlaWdodDsKICB9CgogIHZvaWQgdmlzaXRDaGlsZHJlbihUcmVlTm9kZSBub2RlKSB7CiAgICB2YXIgb2xkUGFyZW50ID0gZW50ZXJQYXJlbnQobm9kZSk7CiAgICBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgICBleGl0UGFyZW50KG9sZFBhcmVudCk7CiAgfQoKICB2b2lkIHZpc2l0V2l0aExvY2FsU2NvcGUoVHJlZU5vZGUgbm9kZSkgewogICAgaW50IHN0YWNrSGVpZ2h0ID0gZW50ZXJMb2NhbFNjb3BlKCk7CiAgICB2aXNpdENoaWxkcmVuKG5vZGUpOwogICAgZXhpdExvY2FsU2NvcGUoc3RhY2tIZWlnaHQpOwogIH0KCiAgdm9pZCBkZWNsYXJlTWVtYmVyKE1lbWJlciBtZW1iZXIpIHsKICAgIGlmIChtZW1iZXIudHJhbnNmb3JtZXJGbGFncyAmIFRyYW5zZm9ybWVyRmxhZy5zZWVuQnlWZXJpZmllciAhPSAwKSB7CiAgICAgIHByb2JsZW0obWVtYmVyLmZ1bmN0aW9uLAogICAgICAgICAgIk1lbWJlciAnJG1lbWJlcicgaGFzIGJlZW4gZGVjbGFyZWQgbW9yZSB0aGFuIG9uY2UuIik7CiAgICB9CiAgICBtZW1iZXIudHJhbnNmb3JtZXJGbGFncyB8PSBUcmFuc2Zvcm1lckZsYWcuc2VlbkJ5VmVyaWZpZXI7CiAgfQoKICB2b2lkIHVuZGVjbGFyZU1lbWJlcihNZW1iZXIgbWVtYmVyKSB7CiAgICBtZW1iZXIudHJhbnNmb3JtZXJGbGFncyAmPSB+VHJhbnNmb3JtZXJGbGFnLnNlZW5CeVZlcmlmaWVyOwogIH0KCiAgdm9pZCBkZWNsYXJlVmFyaWFibGUoVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSkgewogICAgaWYgKHZhcmlhYmxlLmZsYWdzICYgVmFyaWFibGVEZWNsYXJhdGlvbi5GbGFnSW5TY29wZSAhPSAwKSB7CiAgICAgIHByb2JsZW0odmFyaWFibGUsICJWYXJpYWJsZSAnJHZhcmlhYmxlJyBkZWNsYXJlZCBtb3JlIHRoYW4gb25jZS4iKTsKICAgIH0KICAgIHZhcmlhYmxlLmZsYWdzIHw9IFZhcmlhYmxlRGVjbGFyYXRpb24uRmxhZ0luU2NvcGU7CiAgICB2YXJpYWJsZVN0YWNrLmFkZCh2YXJpYWJsZSk7CiAgfQoKICB2b2lkIHVuZGVjbGFyZVZhcmlhYmxlKFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUpIHsKICAgIHZhcmlhYmxlLmZsYWdzICY9IH5WYXJpYWJsZURlY2xhcmF0aW9uLkZsYWdJblNjb3BlOwogIH0KCiAgdm9pZCBkZWNsYXJlVHlwZVBhcmFtZXRlcnMoTGlzdDxUeXBlUGFyYW1ldGVyPiBwYXJhbWV0ZXJzKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKICAgICAgdmFyIHBhcmFtZXRlciA9IHBhcmFtZXRlcnNbaV07CiAgICAgIGlmIChwYXJhbWV0ZXIuYm91bmQgPT0gbnVsbCkgewogICAgICAgIHByb2JsZW0oCiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQsICJNaXNzaW5nIGJvdW5kIGZvciB0eXBlIHBhcmFtZXRlciAnJHBhcmFtZXRlcicuIik7CiAgICAgIH0KICAgICAgaWYgKCF0eXBlUGFyYW1ldGVyc0luU2NvcGUuYWRkKHBhcmFtZXRlcikpIHsKICAgICAgICBwcm9ibGVtKHBhcmFtZXRlciwgIlR5cGUgcGFyYW1ldGVyICckcGFyYW1ldGVyJyByZWRlY2xhcmVkLiIpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIHVuZGVjbGFyZVR5cGVQYXJhbWV0ZXJzKExpc3Q8VHlwZVBhcmFtZXRlcj4gcGFyYW1ldGVycykgewogICAgdHlwZVBhcmFtZXRlcnNJblNjb3BlLnJlbW92ZUFsbChwYXJhbWV0ZXJzKTsKICB9CgogIHZvaWQgY2hlY2tWYXJpYWJsZUluU2NvcGUoVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwgVHJlZU5vZGUgd2hlcmUpIHsKICAgIGlmICh2YXJpYWJsZS5mbGFncyAmIFZhcmlhYmxlRGVjbGFyYXRpb24uRmxhZ0luU2NvcGUgPT0gMCkgewogICAgICBwcm9ibGVtKHdoZXJlLCAiVmFyaWFibGUgJyR2YXJpYWJsZScgdXNlZCBvdXQgb2Ygc2NvcGUuIik7CiAgICB9CiAgfQoKICB2aXNpdENvbXBvbmVudChDb21wb25lbnQgY29tcG9uZW50KSB7CiAgICB0cnkgewogICAgICBmb3IgKHZhciBsaWJyYXJ5IGluIGNvbXBvbmVudC5saWJyYXJpZXMpIHsKICAgICAgICBmb3IgKHZhciBjbGFzc18gaW4gbGlicmFyeS5jbGFzc2VzKSB7CiAgICAgICAgICBpZiAoIWNsYXNzZXMuYWRkKGNsYXNzXykpIHsKICAgICAgICAgICAgcHJvYmxlbShjbGFzc18sICJDbGFzcyAnJGNsYXNzXycgZGVjbGFyZWQgbW9yZSB0aGFuIG9uY2UuIik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvciAodmFyIHR5cGVkZWZfIGluIGxpYnJhcnkudHlwZWRlZnMpIHsKICAgICAgICAgIGlmICghdHlwZWRlZnMuYWRkKHR5cGVkZWZfKSkgewogICAgICAgICAgICBwcm9ibGVtKHR5cGVkZWZfLCAiVHlwZWRlZiAnJHR5cGVkZWZfJyBkZWNsYXJlZCBtb3JlIHRoYW4gb25jZS4iKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbGlicmFyeS5tZW1iZXJzLmZvckVhY2goZGVjbGFyZU1lbWJlcik7CiAgICAgICAgZm9yICh2YXIgY2xhc3NfIGluIGxpYnJhcnkuY2xhc3NlcykgewogICAgICAgICAgY2xhc3NfLm1lbWJlcnMuZm9yRWFjaChkZWNsYXJlTWVtYmVyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmlzaXRDaGlsZHJlbihjb21wb25lbnQpOwogICAgfSBmaW5hbGx5IHsKICAgICAgZm9yICh2YXIgbGlicmFyeSBpbiBjb21wb25lbnQubGlicmFyaWVzKSB7CiAgICAgICAgbGlicmFyeS5tZW1iZXJzLmZvckVhY2godW5kZWNsYXJlTWVtYmVyKTsKICAgICAgICBmb3IgKHZhciBjbGFzc18gaW4gbGlicmFyeS5jbGFzc2VzKSB7CiAgICAgICAgICBjbGFzc18ubWVtYmVycy5mb3JFYWNoKHVuZGVjbGFyZU1lbWJlcik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhcmlhYmxlU3RhY2suZm9yRWFjaCh1bmRlY2xhcmVWYXJpYWJsZSk7CiAgICB9CiAgfQoKICB2b2lkIHZpc2l0TGlicmFyeShMaWJyYXJ5IG5vZGUpIHsKICAgIGN1cnJlbnRMaWJyYXJ5ID0gbm9kZTsKICAgIHN1cGVyLnZpc2l0TGlicmFyeShub2RlKTsKICAgIGN1cnJlbnRMaWJyYXJ5ID0gbnVsbDsKICB9CgogIHZvaWQgY2hlY2tUeXBlZGVmKFR5cGVkZWYgbm9kZSkgewogICAgdmFyIHN0YXRlID0gdHlwZWRlZlN0YXRlW25vZGVdOwogICAgaWYgKHN0YXRlID09IFR5cGVkZWZTdGF0ZS5Eb25lKSByZXR1cm47CiAgICBpZiAoc3RhdGUgPT0gVHlwZWRlZlN0YXRlLkJlaW5nQ2hlY2tlZCkgewogICAgICBwcm9ibGVtKG5vZGUsICJUaGUgdHlwZWRlZiAnJG5vZGUnIHJlZmVycyB0byBpdHNlbGYiLCBjb250ZXh0OiBub2RlKTsKICAgIH0KICAgIGFzc2VydChzdGF0ZSA9PSBudWxsKTsKICAgIHR5cGVkZWZTdGF0ZVtub2RlXSA9IFR5cGVkZWZTdGF0ZS5CZWluZ0NoZWNrZWQ7CiAgICB2YXIgc2F2ZWRUeXBlUGFyYW1ldGVycyA9IHR5cGVQYXJhbWV0ZXJzSW5TY29wZTsKICAgIHR5cGVQYXJhbWV0ZXJzSW5TY29wZSA9IG5vZGUudHlwZVBhcmFtZXRlcnMudG9TZXQoKTsKICAgIHZhciBzYXZlZFBhcmVudCA9IGN1cnJlbnRQYXJlbnQ7CiAgICBjdXJyZW50UGFyZW50ID0gbm9kZTsKICAgIC8vIFZpc2l0IGNoaWxkcmVuIHdpdGhvdXQgY2hlY2tpbmcgdGhlIHBhcmVudCBwb2ludGVyIG9uIHRoZSB0eXBlZGVmIGl0c2VsZgogICAgLy8gc2luY2UgdGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gYSBjb250ZXh0IG90aGVyIHRoYW4gaXRzIHRydWUgcGFyZW50LgogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogICAgY3VycmVudFBhcmVudCA9IHNhdmVkUGFyZW50OwogICAgdHlwZVBhcmFtZXRlcnNJblNjb3BlID0gc2F2ZWRUeXBlUGFyYW1ldGVyczsKICAgIHR5cGVkZWZTdGF0ZVtub2RlXSA9IFR5cGVkZWZTdGF0ZS5Eb25lOwogIH0KCiAgdmlzaXRUeXBlZGVmKFR5cGVkZWYgbm9kZSkgewogICAgY2hlY2tUeXBlZGVmKG5vZGUpOwogICAgLy8gRW50ZXIgYW5kIGV4aXQgdGhlIG5vZGUgdG8gY2hlY2sgdGhlIHBhcmVudCBwb2ludGVyIG9uIHRoZSB0eXBlZGVmIG5vZGUuCiAgICBleGl0UGFyZW50KGVudGVyUGFyZW50KG5vZGUpKTsKICB9CgogIHZpc2l0RmllbGQoRmllbGQgbm9kZSkgewogICAgY3VycmVudE1lbWJlciA9IG5vZGU7CiAgICB2YXIgb2xkUGFyZW50ID0gZW50ZXJQYXJlbnQobm9kZSk7CiAgICBib29sIGlzVG9wTGV2ZWwgPSBub2RlLnBhcmVudCA9PSBjdXJyZW50TGlicmFyeTsKICAgIGlmIChpc1RvcExldmVsICYmICFub2RlLmlzU3RhdGljKSB7CiAgICAgIHByb2JsZW0obm9kZSwgIlRoZSB0b3AtbGV2ZWwgZmllbGQgJyR7bm9kZS5uYW1lLm5hbWV9JyBzaG91bGQgYmUgc3RhdGljIiwKICAgICAgICAgIGNvbnRleHQ6IG5vZGUpOwogICAgfQogICAgaWYgKG5vZGUuaXNDb25zdCAmJiAhbm9kZS5pc1N0YXRpYykgewogICAgICBwcm9ibGVtKG5vZGUsICJUaGUgY29uc3QgZmllbGQgJyR7bm9kZS5uYW1lLm5hbWV9JyBzaG91bGQgYmUgc3RhdGljIiwKICAgICAgICAgIGNvbnRleHQ6IG5vZGUpOwogICAgfQogICAgY2xhc3NUeXBlUGFyYW1ldGVyc0FyZUluU2NvcGUgPSAhbm9kZS5pc1N0YXRpYzsKICAgIG5vZGUuaW5pdGlhbGl6ZXI/LmFjY2VwdCh0aGlzKTsKICAgIG5vZGUudHlwZS5hY2NlcHQodGhpcyk7CiAgICBjbGFzc1R5cGVQYXJhbWV0ZXJzQXJlSW5TY29wZSA9IGZhbHNlOwogICAgdmlzaXRMaXN0KG5vZGUuYW5ub3RhdGlvbnMsIHRoaXMpOwogICAgZXhpdFBhcmVudChvbGRQYXJlbnQpOwogICAgY3VycmVudE1lbWJlciA9IG51bGw7CiAgfQoKICB2aXNpdFByb2NlZHVyZShQcm9jZWR1cmUgbm9kZSkgewogICAgY3VycmVudE1lbWJlciA9IG5vZGU7CiAgICB2YXIgb2xkUGFyZW50ID0gZW50ZXJQYXJlbnQobm9kZSk7CiAgICBjbGFzc1R5cGVQYXJhbWV0ZXJzQXJlSW5TY29wZSA9ICFub2RlLmlzU3RhdGljOwogICAgbm9kZS5mdW5jdGlvbi5hY2NlcHQodGhpcyk7CiAgICBjbGFzc1R5cGVQYXJhbWV0ZXJzQXJlSW5TY29wZSA9IGZhbHNlOwogICAgdmlzaXRMaXN0KG5vZGUuYW5ub3RhdGlvbnMsIHRoaXMpOwogICAgZXhpdFBhcmVudChvbGRQYXJlbnQpOwogICAgY3VycmVudE1lbWJlciA9IG51bGw7CiAgfQoKICB2aXNpdENvbnN0cnVjdG9yKENvbnN0cnVjdG9yIG5vZGUpIHsKICAgIGN1cnJlbnRNZW1iZXIgPSBub2RlOwogICAgY2xhc3NUeXBlUGFyYW1ldGVyc0FyZUluU2NvcGUgPSB0cnVlOwogICAgLy8gVGhlIGNvbnN0cnVjdG9yIG1lbWJlciBuZWVkcyBzcGVjaWFsIHRyZWF0bWVudCBkdWUgdG8gcGFyYW1ldGVycyBiZWluZwogICAgLy8gaW4gc2NvcGUgaW4gdGhlIGluaXRpYWxpemVyIGxpc3QuCiAgICB2YXIgb2xkUGFyZW50ID0gZW50ZXJQYXJlbnQobm9kZSk7CiAgICBpbnQgc3RhY2tIZWlnaHQgPSBlbnRlckxvY2FsU2NvcGUoKTsKICAgIHZpc2l0Q2hpbGRyZW4obm9kZS5mdW5jdGlvbik7CiAgICB2aXNpdExpc3Qobm9kZS5pbml0aWFsaXplcnMsIHRoaXMpOwogICAgaWYgKCFpc091dGxpbmUpIHsKICAgICAgY2hlY2tJbml0aWFsaXplcnMobm9kZSk7CiAgICB9CiAgICBleGl0TG9jYWxTY29wZShzdGFja0hlaWdodCk7CiAgICBjbGFzc1R5cGVQYXJhbWV0ZXJzQXJlSW5TY29wZSA9IGZhbHNlOwogICAgdmlzaXRMaXN0KG5vZGUuYW5ub3RhdGlvbnMsIHRoaXMpOwogICAgZXhpdFBhcmVudChvbGRQYXJlbnQpOwogICAgY2xhc3NUeXBlUGFyYW1ldGVyc0FyZUluU2NvcGUgPSBmYWxzZTsKICAgIGN1cnJlbnRNZW1iZXIgPSBudWxsOwogIH0KCiAgdmlzaXRDbGFzcyhDbGFzcyBub2RlKSB7CiAgICBjdXJyZW50Q2xhc3MgPSBub2RlOwogICAgZGVjbGFyZVR5cGVQYXJhbWV0ZXJzKG5vZGUudHlwZVBhcmFtZXRlcnMpOwogICAgdmFyIG9sZFBhcmVudCA9IGVudGVyUGFyZW50KG5vZGUpOwogICAgY2xhc3NUeXBlUGFyYW1ldGVyc0FyZUluU2NvcGUgPSBmYWxzZTsKICAgIHZpc2l0TGlzdChub2RlLmFubm90YXRpb25zLCB0aGlzKTsKICAgIGNsYXNzVHlwZVBhcmFtZXRlcnNBcmVJblNjb3BlID0gdHJ1ZTsKICAgIHZpc2l0TGlzdChub2RlLnR5cGVQYXJhbWV0ZXJzLCB0aGlzKTsKICAgIHZpc2l0TGlzdChub2RlLmZpZWxkcywgdGhpcyk7CiAgICB2aXNpdExpc3Qobm9kZS5jb25zdHJ1Y3RvcnMsIHRoaXMpOwogICAgdmlzaXRMaXN0KG5vZGUucHJvY2VkdXJlcywgdGhpcyk7CiAgICBleGl0UGFyZW50KG9sZFBhcmVudCk7CiAgICB1bmRlY2xhcmVUeXBlUGFyYW1ldGVycyhub2RlLnR5cGVQYXJhbWV0ZXJzKTsKICAgIGN1cnJlbnRDbGFzcyA9IG51bGw7CiAgfQoKICB2aXNpdEZ1bmN0aW9uTm9kZShGdW5jdGlvbk5vZGUgbm9kZSkgewogICAgZGVjbGFyZVR5cGVQYXJhbWV0ZXJzKG5vZGUudHlwZVBhcmFtZXRlcnMpOwogICAgYm9vbCBzYXZlZEluQ2F0Y2hCbG9jayA9IGluQ2F0Y2hCbG9jazsKICAgIGluQ2F0Y2hCbG9jayA9IGZhbHNlOwogICAgdmlzaXRXaXRoTG9jYWxTY29wZShub2RlKTsKICAgIGluQ2F0Y2hCbG9jayA9IHNhdmVkSW5DYXRjaEJsb2NrOwogICAgdW5kZWNsYXJlVHlwZVBhcmFtZXRlcnMobm9kZS50eXBlUGFyYW1ldGVycyk7CiAgfQoKICB2aXNpdEZ1bmN0aW9uVHlwZShGdW5jdGlvblR5cGUgbm9kZSkgewogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBub2RlLm5hbWVkUGFyYW1ldGVycy5sZW5ndGg7ICsraSkgewogICAgICBpZiAobm9kZS5uYW1lZFBhcmFtZXRlcnNbaSAtIDFdLmNvbXBhcmVUbyhub2RlLm5hbWVkUGFyYW1ldGVyc1tpXSkgPj0gMCkgewogICAgICAgIHByb2JsZW0oY3VycmVudFBhcmVudCwKICAgICAgICAgICAgIk5hbWVkIHBhcmFtZXRlcnMgYXJlIG5vdCBzb3J0ZWQgb24gZnVuY3Rpb24gdHlwZSAoJG5vZGUpLiIpOwogICAgICB9CiAgICB9CiAgICBkZWNsYXJlVHlwZVBhcmFtZXRlcnMobm9kZS50eXBlUGFyYW1ldGVycyk7CiAgICBmb3IgKHZhciB0eXBlUGFyYW1ldGVyIGluIG5vZGUudHlwZVBhcmFtZXRlcnMpIHsKICAgICAgdHlwZVBhcmFtZXRlci5ib3VuZD8uYWNjZXB0KHRoaXMpOwogICAgfQogICAgdmlzaXRMaXN0KG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMsIHRoaXMpOwogICAgdmlzaXRMaXN0KG5vZGUubmFtZWRQYXJhbWV0ZXJzLCB0aGlzKTsKICAgIG5vZGUucmV0dXJuVHlwZS5hY2NlcHQodGhpcyk7CiAgICB1bmRlY2xhcmVUeXBlUGFyYW1ldGVycyhub2RlLnR5cGVQYXJhbWV0ZXJzKTsKICB9CgogIHZpc2l0QmxvY2soQmxvY2sgbm9kZSkgewogICAgdmlzaXRXaXRoTG9jYWxTY29wZShub2RlKTsKICB9CgogIHZpc2l0Rm9yU3RhdGVtZW50KEZvclN0YXRlbWVudCBub2RlKSB7CiAgICB2aXNpdFdpdGhMb2NhbFNjb3BlKG5vZGUpOwogIH0KCiAgdmlzaXRGb3JJblN0YXRlbWVudChGb3JJblN0YXRlbWVudCBub2RlKSB7CiAgICB2aXNpdFdpdGhMb2NhbFNjb3BlKG5vZGUpOwogIH0KCiAgdmlzaXRMZXQoTGV0IG5vZGUpIHsKICAgIHZpc2l0V2l0aExvY2FsU2NvcGUobm9kZSk7CiAgfQoKICB2aXNpdEJsb2NrRXhwcmVzc2lvbihCbG9ja0V4cHJlc3Npb24gbm9kZSkgewogICAgaW50IHN0YWNrSGVpZ2h0ID0gZW50ZXJMb2NhbFNjb3BlKCk7CiAgICAvLyBEbyBub3QgdmlzaXQgdGhlIGJsb2NrIGRpcmVjdGx5IGJlY2F1c2UgdGhlIHZhbHVlIGV4cHJlc3Npb24gbmVlZHMgdG8KICAgIC8vIGJlIGluIGl0cyBzY29wZS4KICAgIFRyZWVOb2RlIG9sZFBhcmVudCA9IGVudGVyUGFyZW50KG5vZGUpOwogICAgZW50ZXJQYXJlbnQobm9kZS5ib2R5KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZS5ib2R5LnN0YXRlbWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgbm9kZS5ib2R5LnN0YXRlbWVudHNbaV0uYWNjZXB0KHRoaXMpOwogICAgfQogICAgZXhpdFBhcmVudChub2RlKTsKICAgIG5vZGUudmFsdWUuYWNjZXB0KHRoaXMpOwogICAgZXhpdFBhcmVudChvbGRQYXJlbnQpOwogICAgZXhpdExvY2FsU2NvcGUoc3RhY2tIZWlnaHQpOwogIH0KCiAgdmlzaXRDYXRjaChDYXRjaCBub2RlKSB7CiAgICBib29sIHNhdmVkSW5DYXRjaEJsb2NrID0gaW5DYXRjaEJsb2NrOwogICAgaW5DYXRjaEJsb2NrID0gdHJ1ZTsKICAgIHZpc2l0V2l0aExvY2FsU2NvcGUobm9kZSk7CiAgICBpbkNhdGNoQmxvY2sgPSBzYXZlZEluQ2F0Y2hCbG9jazsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0UmV0aHJvdyhSZXRocm93IG5vZGUpIHsKICAgIGlmICghaW5DYXRjaEJsb2NrKSB7CiAgICAgIHByb2JsZW0obm9kZSwgIlJldGhyb3cgbXVzdCBiZSBpbnNpZGUgYSBDYXRjaCBibG9jay4iKTsKICAgIH0KICB9CgogIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudDsKICAgIGlmIChwYXJlbnQgaXMhIEJsb2NrICYmCiAgICAgICAgIShwYXJlbnQgaXMgQ2F0Y2ggJiYgcGFyZW50LmJvZHkgIT0gbm9kZSkgJiYKICAgICAgICAhKHBhcmVudCBpcyBGdW5jdGlvbk5vZGUgJiYgcGFyZW50LmJvZHkgIT0gbm9kZSkgJiYKICAgICAgICBwYXJlbnQgaXMhIEZ1bmN0aW9uRGVjbGFyYXRpb24gJiYKICAgICAgICAhKHBhcmVudCBpcyBGb3JTdGF0ZW1lbnQgJiYgcGFyZW50LmJvZHkgIT0gbm9kZSkgJiYKICAgICAgICAhKHBhcmVudCBpcyBGb3JJblN0YXRlbWVudCAmJiBwYXJlbnQuYm9keSAhPSBub2RlKSAmJgogICAgICAgIHBhcmVudCBpcyEgTGV0ICYmCiAgICAgICAgcGFyZW50IGlzISBMb2NhbEluaXRpYWxpemVyKSB7CiAgICAgIHByb2JsZW0oCiAgICAgICAgICBub2RlLAogICAgICAgICAgIlZhcmlhYmxlRGVjbGFyYXRpb24gbXVzdCBiZSBhIGRpcmVjdCBjaGlsZCBvZiBhIEJsb2NrLCAiCiAgICAgICAgICAibm90ICR7cGFyZW50LnJ1bnRpbWVUeXBlfS4iKTsKICAgIH0KICAgIHZpc2l0Q2hpbGRyZW4obm9kZSk7CiAgICBkZWNsYXJlVmFyaWFibGUobm9kZSk7CiAgfQoKICB2aXNpdFZhcmlhYmxlR2V0KFZhcmlhYmxlR2V0IG5vZGUpIHsKICAgIGNoZWNrVmFyaWFibGVJblNjb3BlKG5vZGUudmFyaWFibGUsIG5vZGUpOwogICAgdmlzaXRDaGlsZHJlbihub2RlKTsKICB9CgogIHZpc2l0VmFyaWFibGVTZXQoVmFyaWFibGVTZXQgbm9kZSkgewogICAgY2hlY2tWYXJpYWJsZUluU2NvcGUobm9kZS52YXJpYWJsZSwgbm9kZSk7CiAgICB2aXNpdENoaWxkcmVuKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRTdGF0aWNHZXQoU3RhdGljR2V0IG5vZGUpIHsKICAgIHZpc2l0Q2hpbGRyZW4obm9kZSk7CiAgICBpZiAobm9kZS50YXJnZXQgPT0gbnVsbCkgewogICAgICBwcm9ibGVtKG5vZGUsICJTdGF0aWNHZXQgd2l0aG91dCB0YXJnZXQuIik7CiAgICB9CiAgICAvLyBDdXJyZW50bHkgQ29uc3RydWN0b3IuaGFzR2V0dGVyIHJldHVybnMgYGZhbHNlYCBldmVuIHRob3VnaCBmYXN0YSB1c2VzIGl0CiAgICAvLyBhcyBhIGdldHRlciBmb3IgaW50ZXJuYWwgcHVycG9zZXM6CiAgICAvLwogICAgLy8gRmFzdGEgaXMgbGV0dGluZyBhbGwgY2FsbCBzaXRlIG9mIGEgcmVkaXJlY3RpbmcgY29uc3RydWN0b3IgYmUgcmVzb2x2ZWQKICAgIC8vIHRvIHRoZSByZWFsIHRhcmdldC4gIEluIG9yZGVyIHRvIHJlc29sdmUgaXQsIGl0IHNlZW1zIHRvIGFkZCBhIGJvZHkgaW50bwogICAgLy8gdGhlIHJlZGlyZWN0aW5nLWZhY3RvcnkgY29uc3RydWN0b3Igd2hpY2ggY2FjaGVzIHRoZSB0YXJnZXQgY29uc3RydWN0b3IuCiAgICAvLyBUaGF0IGNhY2hlIGlzIHZpYSBhIGBTdGF0aWNHZXQocmVhbC1jb25zdHJ1Y3RvcilgIG5vZGUsIHdoaWNoIHdlIG1ha2UKICAgIC8vIGhlcmUgcGFzcyB0aGUgdmVyaWZpZXIuCiAgICBpZiAoIW5vZGUudGFyZ2V0Lmhhc0dldHRlciAmJiBub2RlLnRhcmdldCBpcyEgQ29uc3RydWN0b3IpIHsKICAgICAgcHJvYmxlbShub2RlLCAiU3RhdGljR2V0IG9mICcke25vZGUudGFyZ2V0fScgd2l0aG91dCBnZXR0ZXIuIik7CiAgICB9CiAgICBpZiAobm9kZS50YXJnZXQuaXNJbnN0YW5jZU1lbWJlcikgewogICAgICBwcm9ibGVtKG5vZGUsICJTdGF0aWNHZXQgb2YgJyR7bm9kZS50YXJnZXR9JyB0aGF0J3MgYW4gaW5zdGFuY2UgbWVtYmVyLiIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRTdGF0aWNTZXQoU3RhdGljU2V0IG5vZGUpIHsKICAgIHZpc2l0Q2hpbGRyZW4obm9kZSk7CiAgICBpZiAobm9kZS50YXJnZXQgPT0gbnVsbCkgewogICAgICBwcm9ibGVtKG5vZGUsICJTdGF0aWNTZXQgd2l0aG91dCB0YXJnZXQuIik7CiAgICB9CiAgICBpZiAoIW5vZGUudGFyZ2V0Lmhhc1NldHRlcikgewogICAgICBwcm9ibGVtKG5vZGUsICJTdGF0aWNTZXQgdG8gJyR7bm9kZS50YXJnZXR9JyB3aXRob3V0IHNldHRlci4iKTsKICAgIH0KICAgIGlmIChub2RlLnRhcmdldC5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgIHByb2JsZW0obm9kZSwgIlN0YXRpY1NldCB0byAnJHtub2RlLnRhcmdldH0nIHRoYXQncyBhbiBpbnN0YW5jZSBtZW1iZXIuIik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFN0YXRpY0ludm9jYXRpb24oU3RhdGljSW52b2NhdGlvbiBub2RlKSB7CiAgICBjaGVja1RhcmdldGVkSW52b2NhdGlvbihub2RlLnRhcmdldCwgbm9kZSk7CiAgICBpZiAobm9kZS50YXJnZXQuaXNJbnN0YW5jZU1lbWJlcikgewogICAgICBwcm9ibGVtKG5vZGUsCiAgICAgICAgICAiU3RhdGljSW52b2NhdGlvbiBvZiAnJHtub2RlLnRhcmdldH0nIHRoYXQncyBhbiBpbnN0YW5jZSBtZW1iZXIuIik7CiAgICB9CiAgICBpZiAobm9kZS5pc0NvbnN0ICYmCiAgICAgICAgKCFub2RlLnRhcmdldC5pc0NvbnN0IHx8CiAgICAgICAgICAgICFub2RlLnRhcmdldC5pc0V4dGVybmFsIHx8CiAgICAgICAgICAgIG5vZGUudGFyZ2V0LmtpbmQgIT0gUHJvY2VkdXJlS2luZC5GYWN0b3J5KSkgewogICAgICBwcm9ibGVtKAogICAgICAgICAgbm9kZSwKICAgICAgICAgICJDb25zdGFudCBTdGF0aWNJbnZvY2F0aW9uIG9mICcke25vZGUudGFyZ2V0fScgdGhhdCBpc24ndCIKICAgICAgICAgICIgYSBjb25zdCBleHRlcm5hbCBmYWN0b3J5LiIpOwogICAgfQogIH0KCiAgdm9pZCBjaGVja1RhcmdldGVkSW52b2NhdGlvbihNZW1iZXIgdGFyZ2V0LCBJbnZvY2F0aW9uRXhwcmVzc2lvbiBub2RlKSB7CiAgICB2aXNpdENoaWxkcmVuKG5vZGUpOwogICAgaWYgKHRhcmdldCA9PSBudWxsKSB7CiAgICAgIHByb2JsZW0obm9kZSwgIiR7bm9kZS5ydW50aW1lVHlwZX0gd2l0aG91dCB0YXJnZXQuIik7CiAgICB9CiAgICBpZiAodGFyZ2V0LmZ1bmN0aW9uID09IG51bGwpIHsKICAgICAgcHJvYmxlbShub2RlLCAiJHtub2RlLnJ1bnRpbWVUeXBlfSB3aXRob3V0IGZ1bmN0aW9uLiIpOwogICAgfQogICAgaWYgKCFhcmVBcmd1bWVudHNDb21wYXRpYmxlKG5vZGUuYXJndW1lbnRzLCB0YXJnZXQuZnVuY3Rpb24pKSB7CiAgICAgIHByb2JsZW0obm9kZSwKICAgICAgICAgICIke25vZGUucnVudGltZVR5cGV9IHdpdGggaW5jb21wYXRpYmxlIGFyZ3VtZW50cyBmb3IgJyR7dGFyZ2V0fScuIik7CiAgICB9CiAgICBpbnQgZXhwZWN0ZWRUeXBlUGFyYW1ldGVycyA9IHRhcmdldCBpcyBDb25zdHJ1Y3RvcgogICAgICAgID8gdGFyZ2V0LmVuY2xvc2luZ0NsYXNzLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aAogICAgICAgIDogdGFyZ2V0LmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsKICAgIGlmIChub2RlLmFyZ3VtZW50cy50eXBlcy5sZW5ndGggIT0gZXhwZWN0ZWRUeXBlUGFyYW1ldGVycykgewogICAgICBwcm9ibGVtKAogICAgICAgICAgbm9kZSwKICAgICAgICAgICIke25vZGUucnVudGltZVR5cGV9IHdpdGggd3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzIgogICAgICAgICAgIiBmb3IgJyR7dGFyZ2V0fScuIik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdERpcmVjdFByb3BlcnR5R2V0KERpcmVjdFByb3BlcnR5R2V0IG5vZGUpIHsKICAgIHZpc2l0Q2hpbGRyZW4obm9kZSk7CiAgICBpZiAobm9kZS50YXJnZXQgPT0gbnVsbCkgewogICAgICBwcm9ibGVtKG5vZGUsICJEaXJlY3RQcm9wZXJ0eUdldCB3aXRob3V0IHRhcmdldC4iKTsKICAgIH0KICAgIGlmICghbm9kZS50YXJnZXQuaGFzR2V0dGVyKSB7CiAgICAgIHByb2JsZW0obm9kZSwgIkRpcmVjdFByb3BlcnR5R2V0IG9mICcke25vZGUudGFyZ2V0fScgd2l0aG91dCBnZXR0ZXIuIik7CiAgICB9CiAgICBpZiAoIW5vZGUudGFyZ2V0LmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgcHJvYmxlbSgKICAgICAgICAgIG5vZGUsCiAgICAgICAgICAiRGlyZWN0UHJvcGVydHlHZXQgb2YgJyR7bm9kZS50YXJnZXR9JyB0aGF0IGlzbid0IGFuIgogICAgICAgICAgIiBpbnN0YW5jZSBtZW1iZXIuIik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdERpcmVjdFByb3BlcnR5U2V0KERpcmVjdFByb3BlcnR5U2V0IG5vZGUpIHsKICAgIHZpc2l0Q2hpbGRyZW4obm9kZSk7CiAgICBpZiAobm9kZS50YXJnZXQgPT0gbnVsbCkgewogICAgICBwcm9ibGVtKG5vZGUsICJEaXJlY3RQcm9wZXJ0eVNldCB3aXRob3V0IHRhcmdldC4iKTsKICAgIH0KICAgIGlmICghbm9kZS50YXJnZXQuaGFzU2V0dGVyKSB7CiAgICAgIHByb2JsZW0obm9kZSwgIkRpcmVjdFByb3BlcnR5U2V0IG9mICcke25vZGUudGFyZ2V0fScgd2l0aG91dCBzZXR0ZXIuIik7CiAgICB9CiAgICBpZiAoIW5vZGUudGFyZ2V0LmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgcHJvYmxlbShub2RlLCAiRGlyZWN0UHJvcGVydHlTZXQgb2YgJyR7bm9kZS50YXJnZXR9JyB0aGF0IGlzIHN0YXRpYy4iKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0RGlyZWN0TWV0aG9kSW52b2NhdGlvbihEaXJlY3RNZXRob2RJbnZvY2F0aW9uIG5vZGUpIHsKICAgIGNoZWNrVGFyZ2V0ZWRJbnZvY2F0aW9uKG5vZGUudGFyZ2V0LCBub2RlKTsKICAgIGlmIChub2RlLnJlY2VpdmVyID09IG51bGwpIHsKICAgICAgcHJvYmxlbShub2RlLCAiRGlyZWN0TWV0aG9kSW52b2NhdGlvbiB3aXRob3V0IHJlY2VpdmVyLiIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDb25zdHJ1Y3Rvckludm9jYXRpb24oQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUpIHsKICAgIGNoZWNrVGFyZ2V0ZWRJbnZvY2F0aW9uKG5vZGUudGFyZ2V0LCBub2RlKTsKICAgIGlmIChub2RlLnRhcmdldC5lbmNsb3NpbmdDbGFzcy5pc0Fic3RyYWN0KSB7CiAgICAgIHByb2JsZW0obm9kZSwgIkNvbnN0cnVjdG9ySW52b2NhdGlvbiBvZiBhYnN0cmFjdCBjbGFzcy4iKTsKICAgIH0KICAgIGlmIChub2RlLmlzQ29uc3QgJiYgIW5vZGUudGFyZ2V0LmlzQ29uc3QpIHsKICAgICAgcHJvYmxlbSgKICAgICAgICAgIG5vZGUsCiAgICAgICAgICAiQ29uc3RhbnQgQ29uc3RydWN0b3JJbnZvY2F0aW9uIGZvICcke25vZGUudGFyZ2V0fScgdGhhdCIKICAgICAgICAgICIgaXNuJ3QgY29uc3QuIik7CiAgICB9CiAgfQoKICBib29sIGFyZUFyZ3VtZW50c0NvbXBhdGlibGUoQXJndW1lbnRzIGFyZ3VtZW50cywgRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uKSB7CiAgICBpZiAoYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoIDwgZnVuY3Rpb24ucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoID4gZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIG5hbWVkTG9vcDoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJndW1lbnRzLm5hbWVkLmxlbmd0aDsgKytpKSB7CiAgICAgIHZhciBhcmd1bWVudCA9IGFyZ3VtZW50cy5uYW1lZFtpXTsKICAgICAgU3RyaW5nIG5hbWUgPSBhcmd1bWVudC5uYW1lOwogICAgICBmb3IgKGludCBqID0gMDsgaiA8IGZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycy5sZW5ndGg7ICsraikgewogICAgICAgIGlmIChmdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnNbal0ubmFtZSA9PSBuYW1lKSBjb250aW51ZSBuYW1lZExvb3A7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENvbnRpbnVlU3dpdGNoU3RhdGVtZW50KENvbnRpbnVlU3dpdGNoU3RhdGVtZW50IG5vZGUpIHsKICAgIGlmIChub2RlLnRhcmdldCA9PSBudWxsKSB7CiAgICAgIHByb2JsZW0obm9kZSwgIk5vIHRhcmdldC4iKTsKICAgIH0gZWxzZSBpZiAobm9kZS50YXJnZXQucGFyZW50ID09IG51bGwpIHsKICAgICAgcHJvYmxlbShub2RlLCAiVGFyZ2V0IGhhcyBubyBwYXJlbnQuIik7CiAgICB9IGVsc2UgewogICAgICBTd2l0Y2hTdGF0ZW1lbnQgc3RhdGVtZW50ID0gbm9kZS50YXJnZXQucGFyZW50OwogICAgICBmb3IgKFN3aXRjaENhc2Ugc3dpdGNoQ2FzZSBpbiBzdGF0ZW1lbnQuY2FzZXMpIHsKICAgICAgICBpZiAoc3dpdGNoQ2FzZSA9PSBub2RlLnRhcmdldCkgcmV0dXJuOwogICAgICB9CiAgICAgIHByb2JsZW0obm9kZSwgIlN3aXRjaCBjYXNlIGlzbid0IGNoaWxkIG9mIHBhcmVudC4iKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGRlZmF1bHRNZW1iZXJSZWZlcmVuY2UoTWVtYmVyIG5vZGUpIHsKICAgIGlmIChub2RlLnRyYW5zZm9ybWVyRmxhZ3MgJiBUcmFuc2Zvcm1lckZsYWcuc2VlbkJ5VmVyaWZpZXIgPT0gMCkgewogICAgICBwcm9ibGVtKAogICAgICAgICAgbm9kZSwgIkRhbmdsaW5nIHJlZmVyZW5jZSB0byAnJG5vZGUnLCBwYXJlbnQgaXM6ICcke25vZGUucGFyZW50fScuIik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENsYXNzUmVmZXJlbmNlKENsYXNzIG5vZGUpIHsKICAgIGlmICghY2xhc3Nlcy5jb250YWlucyhub2RlKSkgewogICAgICBwcm9ibGVtKAogICAgICAgICAgbm9kZSwgIkRhbmdsaW5nIHJlZmVyZW5jZSB0byAnJG5vZGUnLCBwYXJlbnQgaXM6ICcke25vZGUucGFyZW50fScuIik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFR5cGVkZWZSZWZlcmVuY2UoVHlwZWRlZiBub2RlKSB7CiAgICBpZiAoIXR5cGVkZWZzLmNvbnRhaW5zKG5vZGUpKSB7CiAgICAgIHByb2JsZW0oCiAgICAgICAgICBub2RlLCAiRGFuZ2xpbmcgcmVmZXJlbmNlIHRvICckbm9kZScsIHBhcmVudCBpczogJyR7bm9kZS5wYXJlbnR9JyIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUeXBlUGFyYW1ldGVyVHlwZShUeXBlUGFyYW1ldGVyVHlwZSBub2RlKSB7CiAgICB2YXIgcGFyYW1ldGVyID0gbm9kZS5wYXJhbWV0ZXI7CiAgICBpZiAoIXR5cGVQYXJhbWV0ZXJzSW5TY29wZS5jb250YWlucyhwYXJhbWV0ZXIpKSB7CiAgICAgIHByb2JsZW0oCiAgICAgICAgICBjdXJyZW50UGFyZW50LAogICAgICAgICAgIlR5cGUgcGFyYW1ldGVyICckcGFyYW1ldGVyJyByZWZlcmVuY2VkIG91dCBvZiIKICAgICAgICAgICIgc2NvcGUsIHBhcmVudCBpczogJyR7cGFyYW1ldGVyLnBhcmVudH0nLiIpOwogICAgfQogICAgaWYgKHBhcmFtZXRlci5wYXJlbnQgaXMgQ2xhc3MgJiYgIWNsYXNzVHlwZVBhcmFtZXRlcnNBcmVJblNjb3BlKSB7CiAgICAgIHByb2JsZW0oCiAgICAgICAgICBjdXJyZW50UGFyZW50LAogICAgICAgICAgIlR5cGUgcGFyYW1ldGVyICckcGFyYW1ldGVyJyByZWZlcmVuY2VkIGZyb20iCiAgICAgICAgICAiIHN0YXRpYyBjb250ZXh0LCBwYXJlbnQgaXM6ICcke3BhcmFtZXRlci5wYXJlbnR9Jy4iKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0SW50ZXJmYWNlVHlwZShJbnRlcmZhY2VUeXBlIG5vZGUpIHsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICAgIGlmIChub2RlLnR5cGVBcmd1bWVudHMubGVuZ3RoICE9IG5vZGUuY2xhc3NOb2RlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICBwcm9ibGVtKAogICAgICAgICAgY3VycmVudFBhcmVudCwKICAgICAgICAgICJUeXBlICRub2RlIHByb3ZpZGVzICR7bm9kZS50eXBlQXJndW1lbnRzLmxlbmd0aH0iCiAgICAgICAgICAiIHR5cGUgYXJndW1lbnRzIGJ1dCB0aGUgY2xhc3MgZGVjbGFyZXMiCiAgICAgICAgICAiICR7bm9kZS5jbGFzc05vZGUudHlwZVBhcmFtZXRlcnMubGVuZ3RofSBwYXJhbWV0ZXJzLiIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSBub2RlKSB7CiAgICBjaGVja1R5cGVkZWYobm9kZS50eXBlZGVmTm9kZSk7CiAgICBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgICBpZiAobm9kZS50eXBlQXJndW1lbnRzLmxlbmd0aCAhPSBub2RlLnR5cGVkZWZOb2RlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICBwcm9ibGVtKAogICAgICAgICAgY3VycmVudFBhcmVudCwKICAgICAgICAgICJUaGUgdHlwZWRlZiB0eXBlICRub2RlIHByb3ZpZGVzICR7bm9kZS50eXBlQXJndW1lbnRzLmxlbmd0aH0iCiAgICAgICAgICAiIHR5cGUgYXJndW1lbnRzIGJ1dCB0aGUgdHlwZWRlZiBkZWNsYXJlcyIKICAgICAgICAgICIgJHtub2RlLnR5cGVkZWZOb2RlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aH0gcGFyYW1ldGVycy4iKTsKICAgIH0KICB9Cn0KCmNsYXNzIENoZWNrUGFyZW50UG9pbnRlcnMgZXh0ZW5kcyBWaXNpdG9yIHsKICBzdGF0aWMgdm9pZCBjaGVjayhUcmVlTm9kZSBub2RlKSB7CiAgICBub2RlLmFjY2VwdChuZXcgQ2hlY2tQYXJlbnRQb2ludGVycyhub2RlLnBhcmVudCkpOwogIH0KCiAgVHJlZU5vZGUgcGFyZW50OwoKICBDaGVja1BhcmVudFBvaW50ZXJzKFt0aGlzLnBhcmVudF0pOwoKICBkZWZhdWx0VHJlZU5vZGUoVHJlZU5vZGUgbm9kZSkgewogICAgaWYgKG5vZGUucGFyZW50ICE9IHBhcmVudCkgewogICAgICB0aHJvdyBuZXcgVmVyaWZpY2F0aW9uRXJyb3IoCiAgICAgICAgICBwYXJlbnQsCiAgICAgICAgICBub2RlLAogICAgICAgICAgIlBhcmVudCBwb2ludGVyIG9uICcke25vZGUucnVudGltZVR5cGV9JyAiCiAgICAgICAgICAiaXMgJyR7bm9kZS5wYXJlbnQucnVudGltZVR5cGV9JyAiCiAgICAgICAgICAiYnV0IHNob3VsZCBiZSAnJHtwYXJlbnQucnVudGltZVR5cGV9Jy4iKTsKICAgIH0KICAgIHZhciBvbGRQYXJlbnQgPSBwYXJlbnQ7CiAgICBwYXJlbnQgPSBub2RlOwogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogICAgcGFyZW50ID0gb2xkUGFyZW50OwogIH0KfQoKdm9pZCBjaGVja0luaXRpYWxpemVycyhDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvcikgewogIC8vIFRPRE8oYWhlKTogSSdsbCBhZGQgbW9yZSBoZXJlIGluIG90aGVyIENMcy4KfQqCkwBOTjwXARMlASwlAgEaGgEXARgBPAEPFwo2Ei4GHDVOFw0uIxwGBAIBKQEzBDU4LzRHS00uAUs0GgEdARoBGAEWARoBOQErLgQBIxkEAT8eOQQBKDIPED02NyMGIxoWBAEoHwQBMQEpPysGKAQBJiceGwQBLCkZIQQBJkkfQQY/BAEoQAQBN0FKBjchBAE5OAQBPzIlJRFOCDNHCAYEAUExBAFMQUEGBAEoCjEuJkkMCjEpTwwKMC4xCgggEDEyLjMKCDAGBAEkGx4bBAEkJCwuTAYbNDU5JRpQSx4hMSwEAR8YUCMEARsaJzUoUBoGKkwaBjQkHCsnGxoEASMaJzQgKycbGgQBJxoqTiknKSIoFh8GISsnGysaBAEbGTAnKycqKiIoJhsyGQQBKTArGh8mMgQBKTxRH0oIBjA1KQYwKyIyBAEbHwQBKR8EAS0fBAEXHwQBLylNGCwcPCwGFh0bIQQBGysZHyYEAQwfGT4GBAE3Hhw1PCo8PhonDxBEKQYZGwQBJy8ZBAEnLxkEAQwjGR8yBlEqB09QUE0fQUYGKFEGBAEMIxkfMgYiRgYoUQYEAQwxMCgUTgYYISc6DxBFKQYEAUsZGjwGIz4GRBRPBjc2MUEPEEQgBgQBDDMZHzoGIk4GKQ8QQCAGBAEMMxkfOgYiTgYpTgYEAQw9MCFBBgQBDDswMUEGMA8QRBwGBAFMSRQGThQGDzcpI0JKCBQGEQQBDD8fIy0uDTY3Lwg7BgQBDChHD1AGBAEMJCMPUAYEAQwoJA9PBgQBDDMkNg8ZOjgGRw8ZOEEGBAEMKx5NDxk9M0MGBAEMJyQeTw8ZSTVFBgQCASwlNwQBEwEmASMhIxIQNS01BhwTHhgEAgEyMQIBHHBhY2thZ2U6a2VybmVsL3ZlcmlmaWVyLmRhcnREc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3R5cGVfaW5mZXJlbmNlL3R5cGVfc2NoZW1hLmRhcnSQzS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UubWQgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRGFydFR5cGVWaXNpdG9yLAogICAgICAgIERhcnRUeXBlVmlzaXRvcjEsCiAgICAgICAgRnVuY3Rpb25UeXBlLAogICAgICAgIEludGVyZmFjZVR5cGUsCiAgICAgICAgTmFtZWRUeXBlLAogICAgICAgIFR5cGVkZWZUeXBlLAogICAgICAgIFZpc2l0b3I7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2ltcG9ydF90YWJsZS5kYXJ0JyBzaG93IEltcG9ydFRhYmxlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90ZXh0L2FzdF90b190ZXh0LmRhcnQnCiAgICBzaG93IEFubm90YXRvciwgTmFtZVN5c3RlbSwgUHJpbnRlciwgZ2xvYmFsRGVidWdnaW5nTmFtZXM7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgdW5zdXBwb3J0ZWQ7CgovLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIGEgdHlwZSBzY2hlbWEgY29udGFpbnMgYD9gIHNvbWV3aGVyZSBpbnNpZGUgaXQuCmJvb2wgaXNLbm93bihEYXJ0VHlwZSBzY2hlbWEpID0+IHNjaGVtYS5hY2NlcHQobmV3IF9Jc0tub3duVmlzaXRvcigpKTsKCi8vLyBDb252ZXJ0cyBhIFtEYXJ0VHlwZV0gdG8gYSBzdHJpbmcsIHJlcHJlc2VudGluZyB0aGUgdW5rbm93biB0eXBlIGFzIGA/YC4KU3RyaW5nIHR5cGVTY2hlbWFUb1N0cmluZyhEYXJ0VHlwZSBzY2hlbWEpIHsKICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogIG5ldyBUeXBlU2NoZW1hUHJpbnRlcihidWZmZXIsIHN5bnRoZXRpY05hbWVzOiBnbG9iYWxEZWJ1Z2dpbmdOYW1lcykKICAgICAgLndyaXRlTm9kZShzY2hlbWEpOwogIHJldHVybiAnJGJ1ZmZlcic7Cn0KCi8vLyBFeHRlbnNpb24gb2YgW1ByaW50ZXJdIHRoYXQgcmVwcmVzZW50cyB0aGUgdW5rbm93biB0eXBlIGFzIGA/YC4KY2xhc3MgVHlwZVNjaGVtYVByaW50ZXIgZXh0ZW5kcyBQcmludGVyIGltcGxlbWVudHMgVHlwZVNjaGVtYVZpc2l0b3I8TnVsbD4gewogIFR5cGVTY2hlbWFQcmludGVyKFN0cmluZ1Npbmsgc2luaywKICAgICAge05hbWVTeXN0ZW0gc3ludGhldGljTmFtZXMsCiAgICAgIGJvb2wgc2hvd0V4dGVybmFsLAogICAgICBib29sIHNob3dPZmZzZXRzOiBmYWxzZSwKICAgICAgSW1wb3J0VGFibGUgaW1wb3J0VGFibGUsCiAgICAgIEFubm90YXRvciBhbm5vdGF0b3J9KQogICAgICA6IHN1cGVyKHNpbmssCiAgICAgICAgICAgIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcywKICAgICAgICAgICAgc2hvd0V4dGVybmFsOiBzaG93RXh0ZXJuYWwsCiAgICAgICAgICAgIHNob3dPZmZzZXRzOiBzaG93T2Zmc2V0cywKICAgICAgICAgICAgaW1wb3J0VGFibGU6IGltcG9ydFRhYmxlLAogICAgICAgICAgICBhbm5vdGF0b3I6IGFubm90YXRvcik7CgogIEBvdmVycmlkZQogIHZpc2l0VW5rbm93blR5cGUoVW5rbm93blR5cGUgbm9kZSkgewogICAgd3JpdGVXb3JkKCc/Jyk7CiAgfQp9CgovLy8gRXh0ZW5zaW9uIG9mIFtEYXJ0VHlwZVZpc2l0b3JdIHdoaWNoIGNhbiB2aXNpdCBbVW5rbm93blR5cGVdLgpjbGFzcyBUeXBlU2NoZW1hVmlzaXRvcjxSPiBleHRlbmRzIERhcnRUeXBlVmlzaXRvcjxSPiB7CiAgLy8vIENhbGxlZCB3aGVuIFtVbmtub3duVHlwZV0gaXMgdmlzaXRlZC4KICBSIHZpc2l0VW5rbm93blR5cGUoVW5rbm93blR5cGUgbm9kZSkgPT4gZGVmYXVsdERhcnRUeXBlKG5vZGUpOwp9CgovLy8gVGhlIHVua25vd24gdHlwZSAoZGVub3RlZCBgP2ApIGlzIGFuIG9iamVjdCB3aGljaCBjYW4gYXBwZWFyIGFueXdoZXJlIHRoYXQKLy8vIGEgdHlwZSBpcyBleHBlY3RlZC4gIEl0IHJlcHJlc2VudHMgYSBjb21wb25lbnQgb2YgYSB0eXBlIHdoaWNoIGhhcyBub3QgeWV0Ci8vLyBiZWVuIGZpeGVkIGJ5IGluZmVyZW5jZS4KLy8vCi8vLyBUaGUgdW5rbm93biB0eXBlIGNhbm5vdCBhcHBlYXIgaW4gcHJvZ3JhbXMgb3IgaW4gZmluYWwgaW5mZXJyZWQgdHlwZXM6IGl0IGlzCi8vLyBwdXJlbHkgcGFydCBvZiB0aGUgbG9jYWwgaW5mZXJlbmNlIHByb2Nlc3MuCmNsYXNzIFVua25vd25UeXBlIGV4dGVuZHMgRGFydFR5cGUgewogIEBvdmVycmlkZQogIGdldCBudWxsYWJpbGl0eSA9PiB1bnN1cHBvcnRlZCgibnVsbGFiaWxpdHkiLCAtMSwgbnVsbCk7CgogIGNvbnN0IFVua25vd25UeXBlKCk7CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICAvLyBUaGlzIGNsYXNzIGRvZXNuJ3QgaGF2ZSBhbnkgZmllbGRzIHNvIGFsbCBpbnN0YW5jZXMgb2YgYFVua25vd25UeXBlYCBhcmUKICAgIC8vIGVxdWFsLgogICAgcmV0dXJuIG90aGVyIGlzIFVua25vd25UeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KERhcnRUeXBlVmlzaXRvcjxkeW5hbWljPiB2KSB7CiAgICBpZiAodiBpcyBUeXBlU2NoZW1hVmlzaXRvcjxkeW5hbWljPikgewogICAgICByZXR1cm4gdi52aXNpdFVua25vd25UeXBlKHRoaXMpOwogICAgfSBlbHNlIHsKICAgICAgLy8gTm90ZTogaW4gcHJpbmNpcGxlIGl0IHNlZW1zIGxpa2UgdGhpcyBzaG91bGQgdGhyb3csIHNpbmNlIGFueSB2aXNpdG9yCiAgICAgIC8vIHRoYXQgb3BlcmF0ZXMgb24gYSB0eXBlIHNjaGVtYSBvdWdodCB0byBpbmhlcml0IGZyb20gVHlwZVNjaGVtYVZpc2l0b3IuCiAgICAgIC8vIEhvd2V2ZXIsIHRoYXQgd291bGQgbWFrZSBpdCBpbXBvc3NpYmxlIHRvIHVzZSB0b1N0cmluZygpIG9uIGFueSB0eXBlCiAgICAgIC8vIHNjaGVtYSwgc2luY2UgdG9TdHJpbmcoKSB1c2VzIHRoZSBrZXJuZWwncyBQcmludGVyIHZpc2l0b3IsIHdoaWNoIGNhbid0CiAgICAgIC8vIHBvc3NpYmx5IGluaGVyaXQgZnJvbSBUeXBlU2NoZW1hVmlzaXRvciBzaW5jZSBpdCdzIGluc2lkZSBrZXJuZWwuCiAgICAgIHJldHVybiB2LmRlZmF1bHREYXJ0VHlwZSh0aGlzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGFjY2VwdDEoRGFydFR5cGVWaXNpdG9yMTxkeW5hbWljLCBkeW5hbWljPiB2LCBhcmcpID0+CiAgICAgIHYuZGVmYXVsdERhcnRUeXBlKHRoaXMsIGFyZyk7CgogIEBvdmVycmlkZQogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvcjxkeW5hbWljPiB2KSB7fQp9CgovLy8gVmlzaXRvciB0aGF0IGNvbXB1dGVzIFtpc0tub3duXS4KY2xhc3MgX0lzS25vd25WaXNpdG9yIGV4dGVuZHMgVHlwZVNjaGVtYVZpc2l0b3I8Ym9vbD4gewogIEBvdmVycmlkZQogIGJvb2wgZGVmYXVsdERhcnRUeXBlKERhcnRUeXBlIG5vZGUpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIG5vZGUpIHsKICAgIGlmICghbm9kZS5yZXR1cm5UeXBlLmFjY2VwdCh0aGlzKSkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChEYXJ0VHlwZSBwYXJhbWV0ZXJUeXBlIGluIG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMpIHsKICAgICAgaWYgKCFwYXJhbWV0ZXJUeXBlLmFjY2VwdCh0aGlzKSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZm9yIChOYW1lZFR5cGUgbmFtZWRQYXJhbWV0ZXJUeXBlIGluIG5vZGUubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgIGlmICghbmFtZWRQYXJhbWV0ZXJUeXBlLnR5cGUuYWNjZXB0KHRoaXMpKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgbm9kZSkgewogICAgZm9yIChEYXJ0VHlwZSB0eXBlQXJndW1lbnQgaW4gbm9kZS50eXBlQXJndW1lbnRzKSB7CiAgICAgIGlmICghdHlwZUFyZ3VtZW50LmFjY2VwdCh0aGlzKSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0VHlwZWRlZlR5cGUoVHlwZWRlZlR5cGUgbm9kZSkgewogICAgZm9yIChEYXJ0VHlwZSB0eXBlQXJndW1lbnQgaW4gbm9kZS50eXBlQXJndW1lbnRzKSB7CiAgICAgIGlmICghdHlwZUFyZ3VtZW50LmFjY2VwdCh0aGlzKSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0VW5rbm93blR5cGUoVW5rbm93blR5cGUgbm9kZSkgPT4gZmFsc2U7Cn0KgIoATU4/ASEJEhkaFhcTFREBPAEuPwEsAUdHAU0tLEYaFAIBRE0lIhkfHxwULCgmJiMBDCcUBAIBQjgsQQIBT08dBFEwJQw7ARcBI1AOIQQBDCcrJw1PUU5RSyYGBAEMOCQBDCcCASU4DC8BDC41QDUGQT8GEQQBDDA4NAYRBAEMLDg0BhEEAQw0AgE7cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3R5cGVfaW5mZXJlbmNlL3R5cGVfc2NoZW1hLmRhcnRCc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC9rZXJuZWxfc2hhZG93X2FzdC5kYXJ0wAEG/y8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gVGhpcyBmaWxlIGRlY2xhcmVzIGEgInNoYWRvdyBoaWVyYXJjaHkiIG9mIGNvbmNyZXRlIGNsYXNzZXMgd2hpY2ggZXh0ZW5kCi8vLyB0aGUga2VybmVsIGNsYXNzIGhpZXJhcmNoeSwgYWRkaW5nIG1ldGhvZHMgYW5kIGZpZWxkcyBuZWVkZWQgYnkgdGhlCi8vLyBCb2R5QnVpbGRlci4KLy8vCi8vLyBJbnN0YW5jZXMgb2YgdGhlc2UgY2xhc3NlcyBtYXkgYmUgY3JlYXRlZCB1c2luZyB0aGUgZmFjdG9yeSBtZXRob2RzIGluCi8vLyBgYXN0X2ZhY3RvcnkuZGFydGAuCi8vLwovLy8gTm90ZSB0aGF0IHRoZXNlIGNsYXNzZXMgcmVwcmVzZW50IHRoZSBEYXJ0IGxhbmd1YWdlIHByaW9yIHRvIGRlc3VnYXJpbmcuCi8vLyBXaGVuIGEgc2luZ2xlIERhcnQgY29uc3RydWN0IGRlc3VnYXJzIHRvIGEgdHJlZSBjb250YWluaW5nIG11bHRpcGxlIGtlcm5lbAovLy8gQVNUIG5vZGVzLCB0aGUgc2hhZG93IGNsYXNzIGV4dGVuZHMgdGhlIGtlcm5lbCBvYmplY3QgYXQgdGhlIHRvcCBvZiB0aGUKLy8vIGRlc3VnYXJlZCB0cmVlLgovLy8KLy8vIFRoaXMgbWVhbnMgdGhhdCBpbiBzb21lIGNhc2VzIG11bHRpcGxlIHNoYWRvdyBjbGFzc2VzIG1heSBleHRlbmQgdGhlIHNhbWUKLy8vIGtlcm5lbCBjbGFzcywgYmVjYXVzZSBtdWx0aXBsZSBjb25zdHJ1Y3RzIGluIERhcnQgbWF5IGRlc3VnYXIgdG8gYSB0cmVlCi8vLyB3aXRoIHRoZSBzYW1lIGtpbmQgb2Ygcm9vdCBub2RlLgoKaW1wb3J0ICdkYXJ0OmNvcmUnIGhpZGUgTWFwRW50cnk7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBrZXJuZWwgc2hvdyBFeHByZXNzaW9uLCBJbml0aWFsaXplcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2FsZ2VicmEuZGFydCcgc2hvdyBTdWJzdGl0dXRpb247CgppbXBvcnQgJy4uLy4uL2Jhc2UvaW5zdHJ1bWVudGF0aW9uLmRhcnQnCiAgICBzaG93CiAgICAgICAgSW5zdHJ1bWVudGF0aW9uLAogICAgICAgIEluc3RydW1lbnRhdGlvblZhbHVlRm9yTWVtYmVyLAogICAgICAgIEluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZSwKICAgICAgICBJbnN0cnVtZW50YXRpb25WYWx1ZUZvclR5cGVBcmdzOwoKaW1wb3J0ICcuLi9idWlsZGVyL2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IExpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdwogICAgICAgIG1lc3NhZ2VDYW50RGlzYW1iaWd1YXRlQW1iaWd1b3VzSW5mb3JtYXRpb24sCiAgICAgICAgbWVzc2FnZUNhbnREaXNhbWJpZ3VhdGVOb3RFbm91Z2hJbmZvcm1hdGlvbiwKICAgICAgICBtZXNzYWdlTm9uTnVsbEF3YXJlU3ByZWFkSXNOdWxsLAogICAgICAgIG1lc3NhZ2VTd2l0Y2hFeHByZXNzaW9uTm90QXNzaWduYWJsZUNhdXNlLAogICAgICAgIG1lc3NhZ2VWb2lkRXhwcmVzc2lvbiwKICAgICAgICBub0xlbmd0aCwKICAgICAgICB0ZW1wbGF0ZUNhbnRJbmZlclR5cGVEdWVUb0NpcmN1bGFyaXR5LAogICAgICAgIHRlbXBsYXRlRm9ySW5Mb29wRWxlbWVudFR5cGVOb3RBc3NpZ25hYmxlLAogICAgICAgIHRlbXBsYXRlRm9ySW5Mb29wVHlwZU5vdEl0ZXJhYmxlLAogICAgICAgIHRlbXBsYXRlSW50ZWdlckxpdGVyYWxJc091dE9mUmFuZ2UsCiAgICAgICAgdGVtcGxhdGVTcHJlYWRFbGVtZW50VHlwZU1pc21hdGNoLAogICAgICAgIHRlbXBsYXRlU3ByZWFkTWFwRW50cnlFbGVtZW50S2V5VHlwZU1pc21hdGNoLAogICAgICAgIHRlbXBsYXRlU3ByZWFkTWFwRW50cnlFbGVtZW50VmFsdWVUeXBlTWlzbWF0Y2gsCiAgICAgICAgdGVtcGxhdGVTcHJlYWRNYXBFbnRyeVR5cGVNaXNtYXRjaCwKICAgICAgICB0ZW1wbGF0ZVNwcmVhZFR5cGVNaXNtYXRjaCwKICAgICAgICB0ZW1wbGF0ZVN3aXRjaEV4cHJlc3Npb25Ob3RBc3NpZ25hYmxlLAogICAgICAgIHRlbXBsYXRlV2ViTGl0ZXJhbENhbm5vdEJlUmVwcmVzZW50ZWRFeGFjdGx5OwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JyBzaG93IGdldEZpbGVVcmksIHVuaGFuZGxlZCwgdW5zdXBwb3J0ZWQ7CgppbXBvcnQgJy4uL3NvdXJjZS9zb3VyY2VfY2xhc3NfYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZUNsYXNzQnVpbGRlcjsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvaW5mZXJlbmNlX2hlbHBlci5kYXJ0JyBzaG93IEluZmVyZW5jZUhlbHBlcjsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvdHlwZV9pbmZlcmVuY2VfZW5naW5lLmRhcnQnCiAgICBzaG93IEluY2x1ZGVzVHlwZVBhcmFtZXRlcnNOb25Db3ZhcmlhbnRseSwgVHlwZUluZmVyZW5jZUVuZ2luZTsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvdHlwZV9pbmZlcnJlci5kYXJ0JzsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvdHlwZV9wcm9tb3Rpb24uZGFydCcKICAgIHNob3cgVHlwZVByb21vdGVyLCBUeXBlUHJvbW90ZXJJbXBsLCBUeXBlUHJvbW90aW9uRmFjdCwgVHlwZVByb21vdGlvblNjb3BlOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX3NjaGVtYS5kYXJ0JyBzaG93IFVua25vd25UeXBlOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX3NjaGVtYV9lbGltaW5hdGlvbi5kYXJ0JyBzaG93IGdyZWF0ZXN0Q2xvc3VyZTsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvdHlwZV9zY2hlbWFfZW52aXJvbm1lbnQuZGFydCcKICAgIHNob3cgVHlwZVNjaGVtYUVudmlyb25tZW50LCBnZXRQb3NpdGlvbmFsUGFyYW1ldGVyVHlwZTsKCmltcG9ydCAnYm9keV9idWlsZGVyLmRhcnQnIHNob3cgY29tYmluZVN0YXRlbWVudHM7CgppbXBvcnQgJ2NvbGxlY3Rpb25zLmRhcnQnCiAgICBzaG93CiAgICAgICAgQ29udHJvbEZsb3dNYXBFbnRyeSwKICAgICAgICBGb3JFbGVtZW50LAogICAgICAgIEZvckluRWxlbWVudCwKICAgICAgICBGb3JJbk1hcEVudHJ5LAogICAgICAgIEZvck1hcEVudHJ5LAogICAgICAgIElmRWxlbWVudCwKICAgICAgICBJZk1hcEVudHJ5LAogICAgICAgIFNwcmVhZEVsZW1lbnQsCiAgICAgICAgU3ByZWFkTWFwRW50cnksCiAgICAgICAgY29udmVydFRvRWxlbWVudDsKCmltcG9ydCAnZXhwcmVzc2lvbl9nZW5lcmF0b3IuZGFydCcgc2hvdyBtYWtlTGV0OwoKaW1wb3J0ICdpbXBsaWNpdF90eXBlX2FyZ3VtZW50LmRhcnQnIHNob3cgSW1wbGljaXRUeXBlQXJndW1lbnQ7CgpwYXJ0ICJpbmZlcmVuY2VfdmlzaXRvci5kYXJ0IjsKcGFydCAiaW5mZXJyZWRfdHlwZV92aXNpdG9yLmRhcnQiOwoKLy8vIENvbXB1dGVzIHRoZSByZXR1cm4gdHlwZSBvZiBhIChwb3NzaWJseSBmYWN0b3J5KSBjb25zdHJ1Y3Rvci4KSW50ZXJmYWNlVHlwZSBjb21wdXRlQ29uc3RydWN0b3JSZXR1cm5UeXBlKE1lbWJlciBjb25zdHJ1Y3RvcikgewogIGlmIChjb25zdHJ1Y3RvciBpcyBDb25zdHJ1Y3RvcikgewogICAgcmV0dXJuIGNvbnN0cnVjdG9yLmVuY2xvc2luZ0NsYXNzLnRoaXNUeXBlOwogIH0gZWxzZSB7CiAgICByZXR1cm4gY29uc3RydWN0b3IuZnVuY3Rpb24ucmV0dXJuVHlwZTsKICB9Cn0KCmludCBnZXRFeHRlbnNpb25UeXBlUGFyYW1ldGVyQ291bnQoQXJndW1lbnRzIGFyZ3VtZW50cykgewogIGlmIChhcmd1bWVudHMgaXMgQXJndW1lbnRzSnVkZ21lbnQpIHsKICAgIHJldHVybiBhcmd1bWVudHMuX2V4dGVuc2lvblR5cGVQYXJhbWV0ZXJDb3VudDsKICB9IGVsc2UgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgcGF0aCBvciBhc3NlcnQgd2h5IGl0IGlzIGFjY2VwdGVkLgogICAgcmV0dXJuIDA7CiAgfQp9CgppbnQgZ2V0RXh0ZW5zaW9uVHlwZUFyZ3VtZW50Q291bnQoQXJndW1lbnRzIGFyZ3VtZW50cykgewogIGlmIChhcmd1bWVudHMgaXMgQXJndW1lbnRzSnVkZ21lbnQpIHsKICAgIHJldHVybiBhcmd1bWVudHMuX2V4dGVuc2lvblR5cGVBcmd1bWVudENvdW50OwogIH0gZWxzZSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhpcyBwYXRoIG9yIGFzc2VydCB3aHkgaXQgaXMgYWNjZXB0ZWQuCiAgICByZXR1cm4gMDsKICB9Cn0KCkxpc3Q8RGFydFR5cGU+IGdldEV4cGxpY2l0RXh0ZW5zaW9uVHlwZUFyZ3VtZW50cyhBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgaWYgKGFyZ3VtZW50cyBpcyBBcmd1bWVudHNKdWRnbWVudCkgewogICAgaWYgKGFyZ3VtZW50cy5fZXh0ZW5zaW9uVHlwZUFyZ3VtZW50Q291bnQgPT0gMCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBhcmd1bWVudHMudHlwZXMKICAgICAgICAgIC50YWtlKGFyZ3VtZW50cy5fZXh0ZW5zaW9uVHlwZUFyZ3VtZW50Q291bnQpCiAgICAgICAgICAudG9MaXN0KCk7CiAgICB9CiAgfSBlbHNlIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGlzIHBhdGggb3IgYXNzZXJ0IHdoeSBpdCBpcyBhY2NlcHRlZC4KICAgIHJldHVybiBudWxsOwogIH0KfQoKTGlzdDxEYXJ0VHlwZT4gZ2V0RXhwbGljaXRUeXBlQXJndW1lbnRzKEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICBpZiAoYXJndW1lbnRzIGlzIEFyZ3VtZW50c0p1ZGdtZW50KSB7CiAgICBpZiAoYXJndW1lbnRzLl9leHBsaWNpdFR5cGVBcmd1bWVudENvdW50ID09IDApIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5fZXh0ZW5zaW9uVHlwZVBhcmFtZXRlckNvdW50ID09IDApIHsKICAgICAgcmV0dXJuIGFyZ3VtZW50cy50eXBlczsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBhcmd1bWVudHMudHlwZXMKICAgICAgICAgIC5za2lwKGFyZ3VtZW50cy5fZXh0ZW5zaW9uVHlwZVBhcmFtZXRlckNvdW50KQogICAgICAgICAgLnRvTGlzdCgpOwogICAgfQogIH0gZWxzZSB7CiAgICAvLyBUaGlzIGNvZGUgcGF0aCBzaG91bGQgb25seSBiZSB0YWtlbiBpbiBzaXR1YXRpb25zIHdoZXJlIHRoZXJlIGFyZSBubwogICAgLy8gdHlwZSBhcmd1bWVudHMgYXQgYWxsLCBlLmcuIGNhbGxpbmcgYSB1c2VyLWRlZmluYWJsZSBvcGVyYXRvci4KICAgIGFzc2VydChhcmd1bWVudHMudHlwZXMuaXNFbXB0eSk7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCi8vLyBJbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggYSBjbGFzcyBkdXJpbmcgdHlwZSBpbmZlcmVuY2UuCmNsYXNzIENsYXNzSW5mZXJlbmNlSW5mbyB7CiAgLy8vIFRoZSBidWlsZGVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYXNzLgogIGZpbmFsIFNvdXJjZUNsYXNzQnVpbGRlciBidWlsZGVyOwoKICAvLy8gVGhlIHZpc2l0b3IgZm9yIGRldGVybWluaW5nIGlmIGEgZ2l2ZW4gdHlwZSBtYWtlcyBjb3ZhcmlhbnQgdXNlIG9mIG9uZSBvZgogIC8vLyB0aGUgY2xhc3MncyBnZW5lcmljIHBhcmFtZXRlcnMsIGFuZCB0aGVyZWZvcmUgcmVxdWlyZXMgY292YXJpYW50IGNoZWNrcy4KICBJbmNsdWRlc1R5cGVQYXJhbWV0ZXJzTm9uQ292YXJpYW50bHkgbmVlZHNDaGVja1Zpc2l0b3I7CgogIC8vLyBHZXR0ZXJzIGFuZCBtZXRob2RzIGluIHRoZSBjbGFzcydzIEFQSS4gIE1heSBpbmNsdWRlIGZvcndhcmRpbmcgbm9kZXMuCiAgZmluYWwgZ2V0dGVyc0FuZE1ldGhvZHMgPSA8TWVtYmVyPltdOwoKICAvLy8gU2V0dGVycyBpbiB0aGUgY2xhc3MncyBBUEkuICBNYXkgaW5jbHVkZSBmb3J3YXJkaW5nIG5vZGVzLgogIGZpbmFsIHNldHRlcnMgPSA8TWVtYmVyPltdOwoKICBDbGFzc0luZmVyZW5jZUluZm8odGhpcy5idWlsZGVyKTsKfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgc2V0IG9mIGludm9jYXRpb24gYXJndW1lbnRzLgpjbGFzcyBBcmd1bWVudHNKdWRnbWVudCBleHRlbmRzIEFyZ3VtZW50cyB7CiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTW92ZSB0aGlzIHRvIHRoZSBzdGF0aWMgaW52b2NhdGlvbiBpbnN0ZWFkLgogIGZpbmFsIGludCBfZXh0ZW5zaW9uVHlwZVBhcmFtZXRlckNvdW50OwoKICBmaW5hbCBpbnQgX2V4dGVuc2lvblR5cGVBcmd1bWVudENvdW50OwoKICBpbnQgX2V4cGxpY2l0VHlwZUFyZ3VtZW50Q291bnQ7CgogIExpc3Q8RXhwcmVzc2lvbj4gZ2V0IHBvc2l0aW9uYWxKdWRnbWVudHMgPT4gcG9zaXRpb25hbC5jYXN0KCk7CgogIEFyZ3VtZW50c0p1ZGdtZW50KExpc3Q8RXhwcmVzc2lvbj4gcG9zaXRpb25hbCwKICAgICAge0xpc3Q8RGFydFR5cGU+IHR5cGVzLCBMaXN0PE5hbWVkRXhwcmVzc2lvbj4gbmFtZWR9KQogICAgICA6IF9leHBsaWNpdFR5cGVBcmd1bWVudENvdW50ID0gdHlwZXM/Lmxlbmd0aCA/PyAwLAogICAgICAgIF9leHRlbnNpb25UeXBlUGFyYW1ldGVyQ291bnQgPSAwLAogICAgICAgIF9leHRlbnNpb25UeXBlQXJndW1lbnRDb3VudCA9IDAsCiAgICAgICAgc3VwZXIocG9zaXRpb25hbCwgdHlwZXM6IHR5cGVzLCBuYW1lZDogbmFtZWQpOwoKICBBcmd1bWVudHNKdWRnbWVudC5mb3JFeHRlbnNpb25NZXRob2QoaW50IGV4dGVuc2lvblR5cGVQYXJhbWV0ZXJDb3VudCwKICAgICAgaW50IHR5cGVQYXJhbWV0ZXJDb3VudCwgRXhwcmVzc2lvbiByZWNlaXZlciwKICAgICAge0xpc3Q8RGFydFR5cGU+IGV4dGVuc2lvblR5cGVBcmd1bWVudHMgPSBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPSBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgIExpc3Q8RXhwcmVzc2lvbj4gcG9zaXRpb25hbEFyZ3VtZW50cyA9IGNvbnN0IDxFeHByZXNzaW9uPltdLAogICAgICBMaXN0PE5hbWVkRXhwcmVzc2lvbj4gbmFtZWRBcmd1bWVudHMgPSBjb25zdCA8TmFtZWRFeHByZXNzaW9uPltdfSkKICAgICAgOiBfZXh0ZW5zaW9uVHlwZVBhcmFtZXRlckNvdW50ID0gZXh0ZW5zaW9uVHlwZVBhcmFtZXRlckNvdW50LAogICAgICAgIF9leHRlbnNpb25UeXBlQXJndW1lbnRDb3VudCA9IGV4dGVuc2lvblR5cGVBcmd1bWVudHMubGVuZ3RoLAogICAgICAgIF9leHBsaWNpdFR5cGVBcmd1bWVudENvdW50ID0gdHlwZUFyZ3VtZW50cy5sZW5ndGgsCiAgICAgICAgYXNzZXJ0KAogICAgICAgICAgICBleHRlbnNpb25UeXBlQXJndW1lbnRzLmlzRW1wdHkgfHwKICAgICAgICAgICAgICAgIGV4dGVuc2lvblR5cGVBcmd1bWVudHMubGVuZ3RoID09IGV4dGVuc2lvblR5cGVQYXJhbWV0ZXJDb3VudCwKICAgICAgICAgICAgIkV4dGVuc2lvbiB0eXBlIGFyZ3VtZW50cyBtdXN0IGJlIGVtcHR5IG9yIGNvbXBsZXRlLiIpLAogICAgICAgIHN1cGVyKDxFeHByZXNzaW9uPltyZWNlaXZlcl0uLmFkZEFsbChwb3NpdGlvbmFsQXJndW1lbnRzKSwKICAgICAgICAgICAgbmFtZWQ6IG5hbWVkQXJndW1lbnRzLAogICAgICAgICAgICB0eXBlczogPERhcnRUeXBlPltdCiAgICAgICAgICAgICAgLi5hZGRBbGwoX25vcm1hbGl6ZVR5cGVBcmd1bWVudHMoCiAgICAgICAgICAgICAgICAgIGV4dGVuc2lvblR5cGVQYXJhbWV0ZXJDb3VudCwgZXh0ZW5zaW9uVHlwZUFyZ3VtZW50cykpCiAgICAgICAgICAgICAgLi5hZGRBbGwoCiAgICAgICAgICAgICAgICAgIF9ub3JtYWxpemVUeXBlQXJndW1lbnRzKHR5cGVQYXJhbWV0ZXJDb3VudCwgdHlwZUFyZ3VtZW50cykpKTsKCiAgc3RhdGljIExpc3Q8RGFydFR5cGU+IF9ub3JtYWxpemVUeXBlQXJndW1lbnRzKAogICAgICBpbnQgbGVuZ3RoLCBMaXN0PERhcnRUeXBlPiBhcmd1bWVudHMpIHsKICAgIGlmIChhcmd1bWVudHMuaXNFbXB0eSAmJiBsZW5ndGggPiAwKSB7CiAgICAgIHJldHVybiBuZXcgTGlzdDxEYXJ0VHlwZT4uZmlsbGVkKGxlbmd0aCwgY29uc3QgVW5rbm93blR5cGUoKSk7CiAgICB9CiAgICByZXR1cm4gYXJndW1lbnRzOwogIH0KCiAgc3RhdGljIHZvaWQgc2V0Tm9uSW5mZXJyYWJsZUFyZ3VtZW50VHlwZXMoCiAgICAgIEFyZ3VtZW50c0p1ZGdtZW50IGFyZ3VtZW50cywgTGlzdDxEYXJ0VHlwZT4gdHlwZXMpIHsKICAgIGFyZ3VtZW50cy50eXBlcy5jbGVhcigpOwogICAgYXJndW1lbnRzLnR5cGVzLmFkZEFsbCh0eXBlcyk7CiAgICBhcmd1bWVudHMuX2V4cGxpY2l0VHlwZUFyZ3VtZW50Q291bnQgPSB0eXBlcy5sZW5ndGg7CiAgfQoKICBzdGF0aWMgdm9pZCByZW1vdmVOb25JbmZlcnJhYmxlQXJndW1lbnRUeXBlcyhBcmd1bWVudHNKdWRnbWVudCBhcmd1bWVudHMpIHsKICAgIGFyZ3VtZW50cy50eXBlcy5jbGVhcigpOwogICAgYXJndW1lbnRzLl9leHBsaWNpdFR5cGVBcmd1bWVudENvdW50ID0gMDsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhbiBhc3NlcnQgaW5pdGlhbGl6ZXIgaW4ga2VybmVsIGZvcm0uCmNsYXNzIEFzc2VydEluaXRpYWxpemVySnVkZ21lbnQgZXh0ZW5kcyBBc3NlcnRJbml0aWFsaXplcgogICAgaW1wbGVtZW50cyBJbml0aWFsaXplckp1ZGdtZW50IHsKICBBc3NlcnRJbml0aWFsaXplckp1ZGdtZW50KEFzc2VydFN0YXRlbWVudCBzdGF0ZW1lbnQpIDogc3VwZXIoc3RhdGVtZW50KTsKCiAgQXNzZXJ0U3RhdGVtZW50SnVkZ21lbnQgZ2V0IGp1ZGdtZW50ID0+IHN0YXRlbWVudDsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdEFzc2VydEluaXRpYWxpemVySnVkZ21lbnQodGhpcyk7CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYW4gYXNzZXJ0aW9uIHN0YXRlbWVudCBpbiBrZXJuZWwgZm9ybS4KY2xhc3MgQXNzZXJ0U3RhdGVtZW50SnVkZ21lbnQgZXh0ZW5kcyBBc3NlcnRTdGF0ZW1lbnQKICAgIGltcGxlbWVudHMgU3RhdGVtZW50SnVkZ21lbnQgewogIEFzc2VydFN0YXRlbWVudEp1ZGdtZW50KEV4cHJlc3Npb24gY29uZGl0aW9uLAogICAgICB7RXhwcmVzc2lvbiBtZXNzYWdlLCBpbnQgY29uZGl0aW9uU3RhcnRPZmZzZXQsIGludCBjb25kaXRpb25FbmRPZmZzZXR9KQogICAgICA6IHN1cGVyKGNvbmRpdGlvbiwKICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZSwKICAgICAgICAgICAgY29uZGl0aW9uU3RhcnRPZmZzZXQ6IGNvbmRpdGlvblN0YXJ0T2Zmc2V0LAogICAgICAgICAgICBjb25kaXRpb25FbmRPZmZzZXQ6IGNvbmRpdGlvbkVuZE9mZnNldCk7CgogIEV4cHJlc3Npb24gZ2V0IGNvbmRpdGlvbkp1ZGdtZW50ID0+IGNvbmRpdGlvbjsKCiAgRXhwcmVzc2lvbiBnZXQgbWVzc2FnZUp1ZGdtZW50ID0+IG1lc3NhZ2U7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRBc3NlcnRTdGF0ZW1lbnRKdWRnbWVudCh0aGlzKTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIHN0YXRlbWVudCBibG9jayBpbiBrZXJuZWwgZm9ybS4KY2xhc3MgQmxvY2tKdWRnbWVudCBleHRlbmRzIEJsb2NrIGltcGxlbWVudHMgU3RhdGVtZW50SnVkZ21lbnQgewogIEJsb2NrSnVkZ21lbnQoTGlzdDxTdGF0ZW1lbnQ+IHN0YXRlbWVudHMpIDogc3VwZXIoc3RhdGVtZW50cyk7CgogIExpc3Q8U3RhdGVtZW50PiBnZXQganVkZ21lbnRzID0+IHN0YXRlbWVudHM7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRCbG9ja0p1ZGdtZW50KHRoaXMpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgY2FzY2FkZSBleHByZXNzaW9uLgovLy8KLy8vIEEgY2FzY2FkZSBleHByZXNzaW9uIG9mIHRoZSBmb3JtIGBhLi5iKCkuLmMoKWAgaXMgcmVwcmVzZW50ZWQgYXMgdGhlIGtlcm5lbAovLy8gZXhwcmVzc2lvbjoKLy8vCi8vLyAgICAgbGV0IHYgPSBhIGluCi8vLyAgICAgICAgIGxldCBfID0gdi5iKCkgaW4KLy8vICAgICAgICAgICAgIGxldCBfID0gdi5jKCkgaW4KLy8vICAgICAgICAgICAgICAgICB2Ci8vLwovLy8gSW4gdGhlIGRvY3VtZW50YXRpb24gdGhhdCBmb2xsb3dzLCBgdmAgaXMgcmVmZXJyZWQgdG8gYXMgdGhlICJjYXNjYWRlCi8vLyB2YXJpYWJsZSItLXRoaXMgaXMgdGhlIHZhcmlhYmxlIHRoYXQgcmVtZW1iZXJzIHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbgovLy8gcHJlY2VkaW5nIHRoZSBmaXJzdCBgLi5gIHdoaWxlIHRoZSBjYXNjYWRlcyBhcmUgYmVpbmcgZXZhbHVhdGVkLgovLy8KLy8vIEFmdGVyIGNvbnN0cnVjdGluZyBhIFtDYXNjYWRlSnVkZ21lbnRdLCB0aGUgY2FsbGVyIHNob3VsZAovLy8gY2FsbCBbZmluYWxpemVdIHdpdGggYW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGV4cHJlc3Npb24gYWZ0ZXIgdGhlCi8vLyBgLi5gLiAgSWYgYSBmdXJ0aGVyIGAuLmAgZm9sbG93cyB0aGF0IGV4cHJlc3Npb24sIHRoZSBjYWxsZXIgc2hvdWxkIGNhbGwKLy8vIFtleHRlbmRdIGZvbGxvd2VkIGJ5IFtmaW5hbGl6ZV0gZm9yIGVhY2ggc3Vic2VxdWVudCBjYXNjYWRlLgpjbGFzcyBDYXNjYWRlSnVkZ21lbnQgZXh0ZW5kcyBMZXQgaW1wbGVtZW50cyBFeHByZXNzaW9uSnVkZ21lbnQgewogIERhcnRUeXBlIGluZmVycmVkVHlwZTsKCiAgLy8vIFBvaW50ZXIgdG8gdGhlIGxhc3QgImxldCIgZXhwcmVzc2lvbiBpbiB0aGUgY2FzY2FkZS4KICBMZXQgbmV4dENhc2NhZGU7CgogIC8vLyBDcmVhdGVzIGEgW0Nhc2NhZGVKdWRnbWVudF0gdXNpbmcgW3ZhcmlhYmxlXSBhcyB0aGUgY2FzY2FkZQogIC8vLyB2YXJpYWJsZS4gIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCBbdmFyaWFibGVdJ3MKICAvLy8gaW5pdGlhbGl6ZXIgaXMgdGhlIGV4cHJlc3Npb24gcHJlY2VkaW5nIHRoZSBmaXJzdCBgLi5gIG9mIHRoZSBjYXNjYWRlCiAgLy8vIGV4cHJlc3Npb24uCiAgQ2FzY2FkZUp1ZGdtZW50KFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudCB2YXJpYWJsZSkKICAgICAgOiBzdXBlcigKICAgICAgICAgICAgdmFyaWFibGUsCiAgICAgICAgICAgIG1ha2VMZXQobmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUobmV3IF9VbmZpbmlzaGVkQ2FzY2FkZSgpKSwKICAgICAgICAgICAgICAgIG5ldyBWYXJpYWJsZUdldCh2YXJpYWJsZSkpKSB7CiAgICBuZXh0Q2FzY2FkZSA9IGJvZHk7CiAgfQoKICBFeHByZXNzaW9uIGdldCB0YXJnZXRKdWRnbWVudCA9PiB2YXJpYWJsZS5pbml0aWFsaXplcjsKCiAgSXRlcmFibGU8RXhwcmVzc2lvbj4gZ2V0IGNhc2NhZGVKdWRnbWVudHMgc3luYyogewogICAgTGV0IHNlY3Rpb24gPSBib2R5OwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgeWllbGQgc2VjdGlvbi52YXJpYWJsZS5pbml0aWFsaXplcjsKICAgICAgaWYgKHNlY3Rpb24uYm9keSBpcyEgTGV0KSBicmVhazsKICAgICAgc2VjdGlvbiA9IHNlY3Rpb24uYm9keTsKICAgIH0KICB9CgogIC8vLyBBZGRzIGEgbmV3IHVuZmluYWxpemVkIHNlY3Rpb24gdG8gdGhlIGVuZCBvZiB0aGUgY2FzY2FkZS4gIFNob3VsZCBiZQogIC8vLyBjYWxsZWQgYWZ0ZXIgdGhlIHByZXZpb3VzIGNhc2NhZGUgc2VjdGlvbiBoYXMgYmVlbiBmaW5hbGl6ZWQuCiAgdm9pZCBleHRlbmQoKSB7CiAgICBhc3NlcnQobmV4dENhc2NhZGUudmFyaWFibGUuaW5pdGlhbGl6ZXIgaXMhIF9VbmZpbmlzaGVkQ2FzY2FkZSk7CiAgICBMZXQgbmV3Q2FzY2FkZSA9IG1ha2VMZXQoCiAgICAgICAgbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUobmV3IF9VbmZpbmlzaGVkQ2FzY2FkZSgpKSwKICAgICAgICBuZXh0Q2FzY2FkZS5ib2R5KTsKICAgIG5leHRDYXNjYWRlLmJvZHkgPSBuZXdDYXNjYWRlOwogICAgbmV3Q2FzY2FkZS5wYXJlbnQgPSBuZXh0Q2FzY2FkZTsKICAgIG5leHRDYXNjYWRlID0gbmV3Q2FzY2FkZTsKICB9CgogIC8vLyBGaW5hbGl6ZXMgdGhlIGxhc3QgY2FzY2FkZSBzZWN0aW9uIHdpdGggdGhlIGdpdmVuIFtleHByZXNzaW9uXS4KICB2b2lkIGZpbmFsaXplKEV4cHJlc3Npb24gZXhwcmVzc2lvbikgewogICAgYXNzZXJ0KG5leHRDYXNjYWRlLnZhcmlhYmxlLmluaXRpYWxpemVyIGlzIF9VbmZpbmlzaGVkQ2FzY2FkZSk7CiAgICBuZXh0Q2FzY2FkZS52YXJpYWJsZS5pbml0aWFsaXplciA9IGV4cHJlc3Npb247CiAgICBleHByZXNzaW9uLnBhcmVudCA9IG5leHRDYXNjYWRlLnZhcmlhYmxlOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCBhY2NlcHRJbmZlcmVuY2UoCiAgICAgIEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Q2FzY2FkZUp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBBYnN0cmFjdCBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIGNvbXBsZXggYXNzaWdubWVudCBpbiBrZXJuZWwgZm9ybS4KLy8vCi8vLyBTaW5jZSB0aGVyZSBhcmUgbWFueSBmb3JtcyBhIGNvbXBsZXggYXNzaWdubWVudCBtaWdodCBoYXZlIGJlZW4gZGVzdWdhcmVkCi8vLyB0bywgdGhpcyBjbGFzcyB3cmFwcyB0aGUgZGVzdWdhcmVkIGFzc2lnbm1lbnQgcmF0aGVyIHRoYW4gZXh0ZW5kaW5nIGl0LgovLy8KLy8vIFRPRE8ocGF1bGJlcnJ5KTogb25jZSB3ZSBrbm93IGV4YWN0bHkgd2hhdCBjb25zdGl0dXRlcyBhICJjb21wbGV4Ci8vLyBhc3NpZ25tZW50IiwgZG9jdW1lbnQgaXQgaGVyZS4KYWJzdHJhY3QgY2xhc3MgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBleHRlbmRzIFN5bnRoZXRpY0V4cHJlc3Npb25KdWRnbWVudCB7CiAgLy8vIEluIGEgY29tcG91bmQgYXNzaWdubWVudCwgdGhlIGV4cHJlc3Npb24gdGhhdCByZWFkcyB0aGUgb2xkIHZhbHVlLCBvcgogIC8vLyBgbnVsbGAgaWYgdGhpcyBpcyBub3QgYSBjb21wb3VuZCBhc3NpZ25tZW50LgogIEV4cHJlc3Npb24gcmVhZDsKCiAgLy8vIFRoZSBleHByZXNzaW9uIGFwcGVhcmluZyBvbiB0aGUgUkhTIG9mIHRoZSBhc3NpZ25tZW50LgogIEV4cHJlc3Npb24gcmhzOwoKICAvLy8gVGhlIGV4cHJlc3Npb24gdGhhdCBwZXJmb3JtcyB0aGUgd3JpdGUgKGUuZy4gYGEuW109KGIsIGEuW10oYikgKyAxKWAgaW4KICAvLy8gYCsrYVtiXWApLgogIEV4cHJlc3Npb24gd3JpdGU7CgogIC8vLyBJbiBhIGNvbXBvdW5kIGFzc2lnbm1lbnQgd2l0aG91dCBzaG9ydGN1dCBzZW1hbnRpY3MsIHRoZSBleHByZXNzaW9uIHRoYXQKICAvLy8gY29tYmluZXMgdGhlIG9sZCBhbmQgbmV3IHZhbHVlcywgb3IgYG51bGxgIGlmIHRoaXMgaXMgbm90IGEgY29tcG91bmQKICAvLy8gYXNzaWdubWVudC4KICAvLy8KICAvLy8gTm90ZSB0aGF0IGluIGEgY29tcG91bmQgYXNzaWdubWVudCB3aXRoIHNob3J0Y3V0IHNlbWFudGljcywgdGhpcyBpcyBub3QKICAvLy8gdXNlZDsgW251bGxBd2FyZUNvbWJpbmVyXSBpcyB1c2VkIGluc3RlYWQuCiAgTWV0aG9kSW52b2NhdGlvbiBjb21iaW5lcjsKCiAgLy8vIEluIGEgY29tcG91bmQgYXNzaWdubWVudCB3aXRoIHNob3J0Y3V0IHNlbWFudGljcywgdGhlIGNvbmRpdGlvbmFsCiAgLy8vIGV4cHJlc3Npb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFzc2lnbm1lbnQgb2NjdXJzLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgaW4gYSBjb21wb3VuZCBhc3NpZ25tZW50IHdpdGhvdXQgc2hvcnRjdXQgc2VtYW50aWNzLCB0aGlzIGlzIG5vdAogIC8vLyB1c2VkOyBbY29tYmluZXJdIGlzIHVzZWQgaW5zdGVhZC4KICBDb25kaXRpb25hbEV4cHJlc3Npb24gbnVsbEF3YXJlQ29tYmluZXI7CgogIC8vLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZXhwcmVzc2lvbiBhcm9zZSBmcm9tIGEgcG9zdC1pbmNyZW1lbnQgb3IKICAvLy8gcG9zdC1kZWNyZW1lbnQuCiAgYm9vbCBpc1Bvc3RJbmNEZWMgPSBmYWxzZTsKCiAgLy8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSBleHByZXNzaW9uIGFyb3NlIGZyb20gYSBwcmUtaW5jcmVtZW50IG9yCiAgLy8vIHByZS1kZWNyZW1lbnQuCiAgYm9vbCBpc1ByZUluY0RlYyA9IGZhbHNlOwoKICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50Ll8odGhpcy5yaHMpIDogc3VwZXIuXyhudWxsKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgTGlzdDxTdHJpbmc+IHBhcnRzID0gX2dldFRvU3RyaW5nUGFydHMoKTsKICAgIHJldHVybiAnJHtydW50aW1lVHlwZX0oJHtwYXJ0cy5qb2luKCcsICcpfSknOwogIH0KCiAgTGlzdDxTdHJpbmc+IF9nZXRUb1N0cmluZ1BhcnRzKCkgewogICAgTGlzdDxTdHJpbmc+IHBhcnRzID0gW107CiAgICBpZiAoZGVzdWdhcmVkICE9IG51bGwpIHBhcnRzLmFkZCgnZGVzdWdhcmVkPSRkZXN1Z2FyZWQnKTsKICAgIGlmIChyZWFkICE9IG51bGwpIHBhcnRzLmFkZCgncmVhZD0kcmVhZCcpOwogICAgaWYgKHJocyAhPSBudWxsKSBwYXJ0cy5hZGQoJ3Jocz0kcmhzJyk7CiAgICBpZiAod3JpdGUgIT0gbnVsbCkgcGFydHMuYWRkKCd3cml0ZT0kd3JpdGUnKTsKICAgIGlmIChjb21iaW5lciAhPSBudWxsKSBwYXJ0cy5hZGQoJ2NvbWJpbmVyPSRjb21iaW5lcicpOwogICAgaWYgKG51bGxBd2FyZUNvbWJpbmVyICE9IG51bGwpIHsKICAgICAgcGFydHMuYWRkKCdudWxsQXdhcmVDb21iaW5lcj0kbnVsbEF3YXJlQ29tYmluZXInKTsKICAgIH0KICAgIGlmIChpc1Bvc3RJbmNEZWMpIHBhcnRzLmFkZCgnaXNQb3N0SW5jRGVjPXRydWUnKTsKICAgIGlmIChpc1ByZUluY0RlYykgcGFydHMuYWRkKCdpc1ByZUluY0RlYz10cnVlJyk7CiAgICByZXR1cm4gcGFydHM7CiAgfQoKICBfQ29tcGxleEFzc2lnbm1lbnRJbmZlcmVuY2VSZXN1bHQgX2luZmVyUmhzKAogICAgICBTaGFkb3dUeXBlSW5mZXJyZXIgaW5mZXJyZXIsIERhcnRUeXBlIHJlYWRUeXBlLCBEYXJ0VHlwZSB3cml0ZUNvbnRleHQpIHsKICAgIGFzc2VydCh3cml0ZUNvbnRleHQgIT0gbnVsbCk7CiAgICBpZiAocmVhZFR5cGUgaXMgVm9pZFR5cGUgJiYKICAgICAgICAoY29tYmluZXIgIT0gbnVsbCB8fCBudWxsQXdhcmVDb21iaW5lciAhPSBudWxsKSkgewogICAgICBpbmZlcnJlci5oZWxwZXIKICAgICAgICAgID8uYWRkUHJvYmxlbShtZXNzYWdlVm9pZEV4cHJlc3Npb24sIHJlYWQuZmlsZU9mZnNldCwgbm9MZW5ndGgpOwogICAgfQogICAgaW50IHdyaXRlT2Zmc2V0ID0gd3JpdGUgPT0gbnVsbCA/IC0xIDogd3JpdGUuZmlsZU9mZnNldDsKICAgIE9iamVjdEFjY2Vzc1RhcmdldCBjb21iaW5lclRhcmdldCA9IGNvbnN0IE9iamVjdEFjY2Vzc1RhcmdldC51bnJlc29sdmVkKCk7CiAgICBEYXJ0VHlwZSBjb21iaW5lZFR5cGU7CiAgICBpZiAoY29tYmluZXIgIT0gbnVsbCkgewogICAgICBib29sIGlzT3ZlcmxvYWRlZEFyaXRobWV0aWNPcGVyYXRvciA9IGZhbHNlOwogICAgICBjb21iaW5lclRhcmdldCA9IGluZmVycmVyLmZpbmRNZXRob2RJbnZvY2F0aW9uTWVtYmVyKHJlYWRUeXBlLCBjb21iaW5lciwKICAgICAgICAgIGluc3RydW1lbnRlZDogZmFsc2UpOwogICAgICBhc3NlcnQoIWNvbWJpbmVyVGFyZ2V0LmlzQ2FsbEZ1bmN0aW9uKTsKICAgICAgaWYgKGNvbWJpbmVyVGFyZ2V0LmlzSW5zdGFuY2VNZW1iZXIgJiYKICAgICAgICAgIGNvbWJpbmVyVGFyZ2V0Lm1lbWJlciBpcyBQcm9jZWR1cmUpIHsKICAgICAgICBpc092ZXJsb2FkZWRBcml0aG1ldGljT3BlcmF0b3IgPSBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQKICAgICAgICAgICAgLmlzT3ZlcmxvYWRlZEFyaXRobWV0aWNPcGVyYXRvckFuZFR5cGUoCiAgICAgICAgICAgICAgICBjb21iaW5lclRhcmdldC5tZW1iZXIsIHJlYWRUeXBlKTsKICAgICAgfQogICAgICBEYXJ0VHlwZSByaHNUeXBlOwogICAgICBGdW5jdGlvblR5cGUgY29tYmluZXJUeXBlID0KICAgICAgICAgIGluZmVycmVyLmdldEZ1bmN0aW9uVHlwZShjb21iaW5lclRhcmdldCwgcmVhZFR5cGUsIGZhbHNlKTsKICAgICAgaWYgKGlzUHJlSW5jRGVjIHx8IGlzUG9zdEluY0RlYykgewogICAgICAgIHJoc1R5cGUgPSBpbmZlcnJlci5jb3JlVHlwZXMuaW50Q2xhc3MucmF3VHlwZTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBJdCdzIG5vdCBuZWNlc3NhcnkgdG8gY2FsbCBfc3RvcmVMZXRUeXBlIGZvciBbcmhzXSBiZWNhdXNlIHRoZSBSSFMKICAgICAgICAvLyBpcyBhbHdheXMgcGFzc2VkIGRpcmVjdGx5IHRvIHRoZSBjb21iaW5lcjsgaXQncyBuZXZlciBzdG9yZWQgaW4gYQogICAgICAgIC8vIHRlbXBvcmFyeSB2YXJpYWJsZSBmaXJzdC4KICAgICAgICBhc3NlcnQoaWRlbnRpY2FsKGNvbWJpbmVyLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmZpcnN0LCByaHMpKTsKICAgICAgICAvLyBBbmFseXplciB1c2VzIGEgbnVsbCBjb250ZXh0IGZvciB0aGUgUkhTIGhlcmUuCiAgICAgICAgLy8gVE9ETyhwYXVsYmVycnkpOiBpbXByb3ZlIG9uIHRoaXMuCiAgICAgICAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCByaHNSZXN1bHQgPQogICAgICAgICAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24ocmhzLCBjb25zdCBVbmtub3duVHlwZSgpLCB0cnVlKTsKICAgICAgICBpZiAocmhzUmVzdWx0LnJlcGxhY2VtZW50ICE9IG51bGwpIHsKICAgICAgICAgIHJocyA9IHJoc1Jlc3VsdC5yZXBsYWNlbWVudDsKICAgICAgICB9CiAgICAgICAgcmhzVHlwZSA9IHJoc1Jlc3VsdC5pbmZlcnJlZFR5cGU7CiAgICAgICAgLy8gRG8gbm90IHVzZSByaHMgYWZ0ZXIgdGhpcyBwb2ludCBiZWNhdXNlIGl0IG1heSBiZSBhIFNoYWRvdyBub2RlCiAgICAgICAgLy8gdGhhdCBoYXMgYmVlbiByZXBsYWNlZCBpbiB0aGUgdHJlZSB3aXRoIGl0cyBkZXN1Z2FyaW5nLgogICAgICAgIERhcnRUeXBlIGV4cGVjdGVkVHlwZSA9IGdldFBvc2l0aW9uYWxQYXJhbWV0ZXJUeXBlKGNvbWJpbmVyVHlwZSwgMCk7CiAgICAgICAgaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZShleHBlY3RlZFR5cGUsIHJoc1R5cGUsCiAgICAgICAgICAgIGNvbWJpbmVyLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmZpcnN0LCBjb21iaW5lci5maWxlT2Zmc2V0KTsKICAgICAgfQogICAgICBpZiAoaXNPdmVybG9hZGVkQXJpdGhtZXRpY09wZXJhdG9yKSB7CiAgICAgICAgY29tYmluZWRUeXBlID0gaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50CiAgICAgICAgICAgIC5nZXRUeXBlT2ZPdmVybG9hZGVkQXJpdGhtZXRpYyhyZWFkVHlwZSwgcmhzVHlwZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29tYmluZWRUeXBlID0gY29tYmluZXJUeXBlLnJldHVyblR5cGU7CiAgICAgIH0KICAgICAgTWV0aG9kQ29udHJhdmFyaWFuY2VDaGVja0tpbmQgY2hlY2tLaW5kID0KICAgICAgICAgIGluZmVycmVyLnByZUNoZWNrSW52b2NhdGlvbkNvbnRyYXZhcmlhbmNlKHJlYWQsIHJlYWRUeXBlLAogICAgICAgICAgICAgIGNvbWJpbmVyVGFyZ2V0LCBjb21iaW5lciwgY29tYmluZXIuYXJndW1lbnRzLCBjb21iaW5lcik7CiAgICAgIEV4cHJlc3Npb24gcmVwbGFjZWRDb21iaW5lciA9IGluZmVycmVyLmhhbmRsZUludm9jYXRpb25Db250cmF2YXJpYW5jZSgKICAgICAgICAgIGNoZWNrS2luZCwKICAgICAgICAgIGNvbWJpbmVyLAogICAgICAgICAgY29tYmluZXIuYXJndW1lbnRzLAogICAgICAgICAgY29tYmluZXIsCiAgICAgICAgICBjb21iaW5lZFR5cGUsCiAgICAgICAgICBjb21iaW5lclR5cGUsCiAgICAgICAgICBjb21iaW5lci5maWxlT2Zmc2V0KTsKICAgICAgRXhwcmVzc2lvbiByZXBsYWNlZENvbWJpbmVyMiA9IGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoCiAgICAgICAgICB3cml0ZUNvbnRleHQsIGNvbWJpbmVkVHlwZSwgcmVwbGFjZWRDb21iaW5lciwgd3JpdGVPZmZzZXQpOwogICAgICBpZiAocmVwbGFjZWRDb21iaW5lcjIgIT0gbnVsbCkgewogICAgICAgIHJlcGxhY2VkQ29tYmluZXIgPSByZXBsYWNlZENvbWJpbmVyMjsKICAgICAgfQogICAgICBfc3RvcmVMZXRUeXBlKGluZmVycmVyLCByZXBsYWNlZENvbWJpbmVyLCBjb21iaW5lZFR5cGUpOwogICAgfSBlbHNlIHsKICAgICAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCByaHNSZXN1bHQgPSBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgICByaHMsIHdyaXRlQ29udGV4dCA/PyBjb25zdCBVbmtub3duVHlwZSgpLCB0cnVlLAogICAgICAgICAgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICAgIGlmIChyaHNSZXN1bHQucmVwbGFjZW1lbnQgIT0gbnVsbCkgewogICAgICAgIHJocyA9IHJoc1Jlc3VsdC5yZXBsYWNlbWVudDsKICAgICAgfQogICAgICBEYXJ0VHlwZSByaHNUeXBlID0gcmhzUmVzdWx0LmluZmVycmVkVHlwZTsKICAgICAgRXhwcmVzc2lvbiByZXBsYWNlZFJocyA9IGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoCiAgICAgICAgICB3cml0ZUNvbnRleHQsIHJoc1R5cGUsIHJocywgd3JpdGVPZmZzZXQsCiAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiB3cml0ZUNvbnRleHQgaXMgVm9pZFR5cGUpOwogICAgICBfc3RvcmVMZXRUeXBlKGluZmVycmVyLCByZXBsYWNlZFJocyA/PyByaHMsIHJoc1R5cGUpOwogICAgICBpZiAobnVsbEF3YXJlQ29tYmluZXIgIT0gbnVsbCkgewogICAgICAgIE1ldGhvZEludm9jYXRpb24gZXF1YWxzSW52b2NhdGlvbiA9IG51bGxBd2FyZUNvbWJpbmVyLmNvbmRpdGlvbjsKICAgICAgICBpbmZlcnJlci5maW5kTWV0aG9kSW52b2NhdGlvbk1lbWJlcigKICAgICAgICAgICAgZ3JlYXRlc3RDbG9zdXJlKGluZmVycmVyLmNvcmVUeXBlcywgd3JpdGVDb250ZXh0KSwgZXF1YWxzSW52b2NhdGlvbiwKICAgICAgICAgICAgaW5zdHJ1bWVudGVkOiBmYWxzZSk7CiAgICAgICAgLy8gTm90ZTogdGhlIGNhc2Ugb2YgcmVhZFR5cGU9bnVsbCBvbmx5IGhhcHBlbnMgZm9yIGVycm9uZW91cyBjb2RlLgogICAgICAgIGNvbWJpbmVkVHlwZSA9IHJlYWRUeXBlID09IG51bGwKICAgICAgICAgICAgPyByaHNUeXBlCiAgICAgICAgICAgIDogaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50CiAgICAgICAgICAgICAgICAuZ2V0U3RhbmRhcmRVcHBlckJvdW5kKHJlYWRUeXBlLCByaHNUeXBlKTsKICAgICAgICBudWxsQXdhcmVDb21iaW5lci5zdGF0aWNUeXBlID0gY29tYmluZWRUeXBlOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbWJpbmVkVHlwZSA9IHJoc1R5cGU7CiAgICAgIH0KICAgIH0KICAgIGlmICh0aGlzIGlzIEluZGV4QXNzaWdubWVudEp1ZGdtZW50KSB7CiAgICAgIF9zdG9yZUxldFR5cGUoaW5mZXJyZXIsIHdyaXRlLCBjb25zdCBWb2lkVHlwZSgpKTsKICAgIH0gZWxzZSB7CiAgICAgIF9zdG9yZUxldFR5cGUoaW5mZXJyZXIsIHdyaXRlLCBjb21iaW5lZFR5cGUpOwogICAgfQogICAgaW5mZXJyZWRUeXBlID0KICAgICAgICBpc1Bvc3RJbmNEZWMgPyAocmVhZFR5cGUgPz8gY29uc3QgRHluYW1pY1R5cGUoKSkgOiBjb21iaW5lZFR5cGU7CiAgICByZXR1cm4gbmV3IF9Db21wbGV4QXNzaWdubWVudEluZmVyZW5jZVJlc3VsdCgKICAgICAgICBjb21iaW5lclRhcmdldC5tZW1iZXIsIGluZmVycmVkVHlwZSk7CiAgfQp9CgovLy8gQWJzdHJhY3Qgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYSBjb21wbGV4IGFzc2lnbm1lbnQgaW52b2x2aW5nIGEKLy8vIHJlY2VpdmVyLgphYnN0cmFjdCBjbGFzcyBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50V2l0aFJlY2VpdmVyCiAgICBleHRlbmRzIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgewogIC8vLyBUaGUgcmVjZWl2ZXIgb2YgdGhlIGFzc2lnbm1lbnQgdGFyZ2V0IChlLmcuIGBhYCBpbiBgYVtiXSA9IGNgKS4KICBmaW5hbCBFeHByZXNzaW9uIHJlY2VpdmVyOwoKICAvLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBhc3NpZ25tZW50IHVzZXMgYHN1cGVyYC4KICBmaW5hbCBib29sIGlzU3VwZXI7CgogIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnRXaXRoUmVjZWl2ZXIuXygKICAgICAgdGhpcy5yZWNlaXZlciwgRXhwcmVzc2lvbiByaHMsIHRoaXMuaXNTdXBlcikKICAgICAgOiBzdXBlci5fKHJocyk7CgogIEBvdmVycmlkZQogIExpc3Q8U3RyaW5nPiBfZ2V0VG9TdHJpbmdQYXJ0cygpIHsKICAgIExpc3Q8U3RyaW5nPiBwYXJ0cyA9IHN1cGVyLl9nZXRUb1N0cmluZ1BhcnRzKCk7CiAgICBpZiAocmVjZWl2ZXIgIT0gbnVsbCkgcGFydHMuYWRkKCdyZWNlaXZlcj0kcmVjZWl2ZXInKTsKICAgIGlmIChpc1N1cGVyKSBwYXJ0cy5hZGQoJ2lzU3VwZXI9dHJ1ZScpOwogICAgcmV0dXJuIHBhcnRzOwogIH0KCiAgRGFydFR5cGUgX2luZmVyUmVjZWl2ZXIoU2hhZG93VHlwZUluZmVycmVyIGluZmVycmVyKSB7CiAgICBpZiAocmVjZWl2ZXIgIT0gbnVsbCkgewogICAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24ocmVjZWl2ZXIsIGNvbnN0IFVua25vd25UeXBlKCksIHRydWUpOwogICAgICBEYXJ0VHlwZSByZWNlaXZlclR5cGUgPSBnZXRJbmZlcnJlZFR5cGUocmVjZWl2ZXIsIGluZmVycmVyKTsKICAgICAgX3N0b3JlTGV0VHlwZShpbmZlcnJlciwgcmVjZWl2ZXIsIHJlY2VpdmVyVHlwZSk7CiAgICAgIHJldHVybiByZWNlaXZlclR5cGU7CiAgICB9IGVsc2UgaWYgKGlzU3VwZXIpIHsKICAgICAgcmV0dXJuIGluZmVycmVyLmNsYXNzSGllcmFyY2h5LmdldFR5cGVBc0luc3RhbmNlT2YoCiAgICAgICAgICBpbmZlcnJlci50aGlzVHlwZSwgaW5mZXJyZXIudGhpc1R5cGUuY2xhc3NOb2RlLnN1cGVydHlwZS5jbGFzc05vZGUpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGluZmVycmVyLnRoaXNUeXBlOwogICAgfQogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgY29udGludWUgc3RhdGVtZW50IGZyb20gYSBzd2l0Y2gKLy8vIHN0YXRlbWVudCwgaW4ga2VybmVsIGZvcm0uCmNsYXNzIENvbnRpbnVlU3dpdGNoSnVkZ21lbnQgZXh0ZW5kcyBDb250aW51ZVN3aXRjaFN0YXRlbWVudAogICAgaW1wbGVtZW50cyBTdGF0ZW1lbnRKdWRnbWVudCB7CiAgQ29udGludWVTd2l0Y2hKdWRnbWVudChTd2l0Y2hDYXNlIHRhcmdldCkgOiBzdXBlcih0YXJnZXQpOwoKICBTd2l0Y2hDYXNlSnVkZ21lbnQgZ2V0IHRhcmdldEp1ZGdtZW50ID0+IHRhcmdldDsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdENvbnRpbnVlU3dpdGNoSnVkZ21lbnQodGhpcyk7CiAgfQp9CgovLy8gU2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYSBkZWZlcnJlZCBjaGVjayBpbiBrZXJuZWwgZm9ybS4KY2xhc3MgRGVmZXJyZWRDaGVja0p1ZGdtZW50IGV4dGVuZHMgTGV0IGltcGxlbWVudHMgRXhwcmVzc2lvbkp1ZGdtZW50IHsKICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CgogIERlZmVycmVkQ2hlY2tKdWRnbWVudChWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBFeHByZXNzaW9uIGJvZHkpCiAgICAgIDogc3VwZXIodmFyaWFibGUsIGJvZHkpOwoKICBFeHByZXNzaW9uIGdldCBleHByZXNzaW9uID0+IGJvZHk7CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgYWNjZXB0SW5mZXJlbmNlKAogICAgICBJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdERlZmVycmVkQ2hlY2tKdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYSBkbyBsb29wIGluIGtlcm5lbCBmb3JtLgpjbGFzcyBEb0p1ZGdtZW50IGV4dGVuZHMgRG9TdGF0ZW1lbnQgaW1wbGVtZW50cyBTdGF0ZW1lbnRKdWRnbWVudCB7CiAgRG9KdWRnbWVudChTdGF0ZW1lbnQgYm9keSwgRXhwcmVzc2lvbiBjb25kaXRpb24pIDogc3VwZXIoYm9keSwgY29uZGl0aW9uKTsKCiAgRXhwcmVzc2lvbiBnZXQgY29uZGl0aW9uSnVkZ21lbnQgPT4gY29uZGl0aW9uOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0RG9KdWRnbWVudCh0aGlzKTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIGRvdWJsZSBsaXRlcmFsIGluIGtlcm5lbCBmb3JtLgpjbGFzcyBEb3VibGVKdWRnbWVudCBleHRlbmRzIERvdWJsZUxpdGVyYWwgaW1wbGVtZW50cyBFeHByZXNzaW9uSnVkZ21lbnQgewogIERhcnRUeXBlIGluZmVycmVkVHlwZTsKCiAgRG91YmxlSnVkZ21lbnQoZG91YmxlIHZhbHVlKSA6IHN1cGVyKHZhbHVlKTsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCBhY2NlcHRJbmZlcmVuY2UoCiAgICAgIEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0RG91YmxlSnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIENvbW1vbiBiYXNlIGNsYXNzIGZvciBzaGFkb3cgb2JqZWN0cyByZXByZXNlbnRpbmcgZXhwcmVzc2lvbnMgaW4ga2VybmVsCi8vLyBmb3JtLgphYnN0cmFjdCBjbGFzcyBFeHByZXNzaW9uSnVkZ21lbnQgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CgogIC8vLyBDYWxscyBiYWNrIHRvIFtpbmZlcnJlcl0gdG8gcGVyZm9ybSB0eXBlIGluZmVyZW5jZSBmb3Igd2hhdGV2ZXIgY29uY3JldGUKICAvLy8gdHlwZSBvZiBbRXhwcmVzc2lvbl0gdGhpcyBpcy4KICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IGFjY2VwdEluZmVyZW5jZSgKICAgICAgSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCk7Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhbiBlbXB0eSBzdGF0ZW1lbnQgaW4ga2VybmVsIGZvcm0uCmNsYXNzIEVtcHR5U3RhdGVtZW50SnVkZ21lbnQgZXh0ZW5kcyBFbXB0eVN0YXRlbWVudAogICAgaW1wbGVtZW50cyBTdGF0ZW1lbnRKdWRnbWVudCB7CiAgRW1wdHlTdGF0ZW1lbnRKdWRnbWVudCgpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0RW1wdHlTdGF0ZW1lbnRKdWRnbWVudCh0aGlzKTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhbiBleHByZXNzaW9uIHN0YXRlbWVudCBpbiBrZXJuZWwgZm9ybS4KY2xhc3MgRXhwcmVzc2lvblN0YXRlbWVudEp1ZGdtZW50IGV4dGVuZHMgRXhwcmVzc2lvblN0YXRlbWVudAogICAgaW1wbGVtZW50cyBTdGF0ZW1lbnRKdWRnbWVudCB7CiAgRXhwcmVzc2lvblN0YXRlbWVudEp1ZGdtZW50KEV4cHJlc3Npb24gZXhwcmVzc2lvbikgOiBzdXBlcihleHByZXNzaW9uKTsKCiAgRXhwcmVzc2lvbiBnZXQganVkZ21lbnQgPT4gZXhwcmVzc2lvbjsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnRKdWRnbWVudCh0aGlzKTsKICB9Cn0KCi8vLyBTaGFkb3cgb2JqZWN0IGZvciBbU3RhdGljSW52b2NhdGlvbl0gd2hlbiB0aGUgcHJvY2VkdXJlIGJlaW5nIGludm9rZWQgaXMgYQovLy8gZmFjdG9yeSBjb25zdHJ1Y3Rvci4KY2xhc3MgRmFjdG9yeUNvbnN0cnVjdG9ySW52b2NhdGlvbkp1ZGdtZW50IGV4dGVuZHMgU3RhdGljSW52b2NhdGlvbgogICAgaW1wbGVtZW50cyBFeHByZXNzaW9uSnVkZ21lbnQgewogIERhcnRUeXBlIGluZmVycmVkVHlwZTsKCiAgRmFjdG9yeUNvbnN0cnVjdG9ySW52b2NhdGlvbkp1ZGdtZW50KAogICAgICBQcm9jZWR1cmUgdGFyZ2V0LCBBcmd1bWVudHNKdWRnbWVudCBhcmd1bWVudHMsCiAgICAgIHtib29sIGlzQ29uc3Q6IGZhbHNlfSkKICAgICAgOiBzdXBlcih0YXJnZXQsIGFyZ3VtZW50cywgaXNDb25zdDogaXNDb25zdCk7CgogIEFyZ3VtZW50c0p1ZGdtZW50IGdldCBhcmd1bWVudEp1ZGdtZW50cyA9PiBhcmd1bWVudHM7CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgYWNjZXB0SW5mZXJlbmNlKAogICAgICBJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdEZhY3RvcnlDb25zdHJ1Y3Rvckludm9jYXRpb25KdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYSBmaWVsZCBpbml0aWFsaXplciBpbiBrZXJuZWwgZm9ybS4KY2xhc3MgU2hhZG93RmllbGRJbml0aWFsaXplciBleHRlbmRzIEZpZWxkSW5pdGlhbGl6ZXIKICAgIGltcGxlbWVudHMgSW5pdGlhbGl6ZXJKdWRnbWVudCB7CiAgU2hhZG93RmllbGRJbml0aWFsaXplcihGaWVsZCBmaWVsZCwgRXhwcmVzc2lvbiB2YWx1ZSkgOiBzdXBlcihmaWVsZCwgdmFsdWUpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0U2hhZG93RmllbGRJbml0aWFsaXplcih0aGlzKTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIGNsYXNzaWMgZm9yIGxvb3AgaW4ga2VybmVsIGZvcm0uCmNsYXNzIEZvckp1ZGdtZW50IGV4dGVuZHMgRm9yU3RhdGVtZW50IGltcGxlbWVudHMgU3RhdGVtZW50SnVkZ21lbnQgewogIEZvckp1ZGdtZW50KExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gdmFyaWFibGVzLCBFeHByZXNzaW9uIGNvbmRpdGlvbiwKICAgICAgTGlzdDxFeHByZXNzaW9uPiB1cGRhdGVzLCBTdGF0ZW1lbnQgYm9keSkKICAgICAgOiBzdXBlcih2YXJpYWJsZXMgPz8gW10sIGNvbmRpdGlvbiwgdXBkYXRlcywgYm9keSk7CgogIEV4cHJlc3Npb24gZ2V0IGNvbmRpdGlvbkp1ZGdtZW50ID0+IGNvbmRpdGlvbjsKCiAgTGlzdDxFeHByZXNzaW9uPiBnZXQgdXBkYXRlSnVkZ21lbnRzID0+IHVwZGF0ZXMuY2FzdCgpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Rm9ySnVkZ21lbnQodGhpcyk7CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYSBmdW5jdGlvbiBleHByZXNzaW9uIGluIGtlcm5lbCBmb3JtLgpjbGFzcyBGdW5jdGlvbk5vZGVKdWRnbWVudCBleHRlbmRzIEZ1bmN0aW9uTm9kZSB7CiAgRnVuY3Rpb25Ob2RlSnVkZ21lbnQoU3RhdGVtZW50IGJvZHksCiAgICAgIHtMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzLAogICAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHBvc2l0aW9uYWxQYXJhbWV0ZXJzLAogICAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IG5hbWVkUGFyYW1ldGVycywKICAgICAgaW50IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICAgIERhcnRUeXBlIHJldHVyblR5cGU6IGNvbnN0IER5bmFtaWNUeXBlKCksCiAgICAgIEFzeW5jTWFya2VyIGFzeW5jTWFya2VyOiBBc3luY01hcmtlci5TeW5jLAogICAgICBBc3luY01hcmtlciBkYXJ0QXN5bmNNYXJrZXJ9KQogICAgICA6IHN1cGVyKGJvZHksCiAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzOiB0eXBlUGFyYW1ldGVycywKICAgICAgICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnM6IHBvc2l0aW9uYWxQYXJhbWV0ZXJzLAogICAgICAgICAgICBuYW1lZFBhcmFtZXRlcnM6IG5hbWVkUGFyYW1ldGVycywKICAgICAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICAgICAgcmV0dXJuVHlwZTogcmV0dXJuVHlwZSwKICAgICAgICAgICAgYXN5bmNNYXJrZXI6IGFzeW5jTWFya2VyLAogICAgICAgICAgICBkYXJ0QXN5bmNNYXJrZXI6IGRhcnRBc3luY01hcmtlcik7Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIGxvY2FsIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGluIGtlcm5lbAovLy8gZm9ybS4KY2xhc3MgRnVuY3Rpb25EZWNsYXJhdGlvbkp1ZGdtZW50IGV4dGVuZHMgRnVuY3Rpb25EZWNsYXJhdGlvbgogICAgaW1wbGVtZW50cyBTdGF0ZW1lbnRKdWRnbWVudCB7CiAgYm9vbCBfaGFzSW1wbGljaXRSZXR1cm5UeXBlID0gZmFsc2U7CgogIEZ1bmN0aW9uRGVjbGFyYXRpb25KdWRnbWVudCgKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50IHZhcmlhYmxlLCBGdW5jdGlvbk5vZGVKdWRnbWVudCBmdW5jdGlvbikKICAgICAgOiBzdXBlcih2YXJpYWJsZSwgZnVuY3Rpb24pOwoKICBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQgZ2V0IHZhcmlhYmxlSnVkZ21lbnQgPT4gdmFyaWFibGU7CgogIEZ1bmN0aW9uTm9kZUp1ZGdtZW50IGdldCBmdW5jdGlvbkp1ZGdtZW50ID0+IGZ1bmN0aW9uOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbkp1ZGdtZW50KHRoaXMpOwogIH0KCiAgc3RhdGljIHZvaWQgc2V0SGFzSW1wbGljaXRSZXR1cm5UeXBlKAogICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uSnVkZ21lbnQgZGVjbGFyYXRpb24sIGJvb2wgaGFzSW1wbGljaXRSZXR1cm5UeXBlKSB7CiAgICBkZWNsYXJhdGlvbi5faGFzSW1wbGljaXRSZXR1cm5UeXBlID0gaGFzSW1wbGljaXRSZXR1cm5UeXBlOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgc3VwZXIgaW5pdGlhbGl6ZXIgaW4ga2VybmVsIGZvcm0uCmNsYXNzIEludmFsaWRTdXBlckluaXRpYWxpemVySnVkZ21lbnQgZXh0ZW5kcyBMb2NhbEluaXRpYWxpemVyCiAgICBpbXBsZW1lbnRzIEluaXRpYWxpemVySnVkZ21lbnQgewogIGZpbmFsIENvbnN0cnVjdG9yIHRhcmdldDsKICBmaW5hbCBBcmd1bWVudHNKdWRnbWVudCBhcmd1bWVudHNKdWRnbWVudDsKCiAgSW52YWxpZFN1cGVySW5pdGlhbGl6ZXJKdWRnbWVudCgKICAgICAgdGhpcy50YXJnZXQsIHRoaXMuYXJndW1lbnRzSnVkZ21lbnQsIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUpCiAgICAgIDogc3VwZXIodmFyaWFibGUpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0SW52YWxpZFN1cGVySW5pdGlhbGl6ZXJKdWRnbWVudCh0aGlzKTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhbiBpZi1udWxsIGV4cHJlc3Npb24uCi8vLwovLy8gQW4gaWYtbnVsbCBleHByZXNzaW9uIG9mIHRoZSBmb3JtIGBhID8/IGJgIGlzIHJlcHJlc2VudGVkIGFzIHRoZSBrZXJuZWwKLy8vIGV4cHJlc3Npb246Ci8vLwovLy8gICAgIGxldCB2ID0gYSBpbiB2ID09IG51bGwgPyBiIDogdgpjbGFzcyBJZk51bGxKdWRnbWVudCBleHRlbmRzIExldCBpbXBsZW1lbnRzIEV4cHJlc3Npb25KdWRnbWVudCB7CiAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwoKICBJZk51bGxKdWRnbWVudChWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBFeHByZXNzaW9uIGJvZHkpCiAgICAgIDogc3VwZXIodmFyaWFibGUsIGJvZHkpOwoKICBAb3ZlcnJpZGUKICBDb25kaXRpb25hbEV4cHJlc3Npb24gZ2V0IGJvZHkgPT4gc3VwZXIuYm9keTsKCiAgLy8vIFJldHVybnMgdGhlIGV4cHJlc3Npb24gdG8gdGhlIGxlZnQgb2YgYD8/YC4KICBFeHByZXNzaW9uIGdldCBsZWZ0SnVkZ21lbnQgPT4gdmFyaWFibGUuaW5pdGlhbGl6ZXI7CgogIC8vLyBSZXR1cm5zIHRoZSBleHByZXNzaW9uIHRvIHRoZSByaWdodCBvZiBgPz9gLgogIEV4cHJlc3Npb24gZ2V0IHJpZ2h0SnVkZ21lbnQgPT4gYm9keS50aGVuOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IGFjY2VwdEluZmVyZW5jZSgKICAgICAgSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRJZk51bGxKdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYW4gaWYgc3RhdGVtZW50IGluIGtlcm5lbCBmb3JtLgpjbGFzcyBJZkp1ZGdtZW50IGV4dGVuZHMgSWZTdGF0ZW1lbnQgaW1wbGVtZW50cyBTdGF0ZW1lbnRKdWRnbWVudCB7CiAgSWZKdWRnbWVudChFeHByZXNzaW9uIGNvbmRpdGlvbiwgU3RhdGVtZW50IHRoZW4sIFN0YXRlbWVudCBvdGhlcndpc2UpCiAgICAgIDogc3VwZXIoY29uZGl0aW9uLCB0aGVuLCBvdGhlcndpc2UpOwoKICBFeHByZXNzaW9uIGdldCBjb25kaXRpb25KdWRnbWVudCA9PiBjb25kaXRpb247CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRJZkp1ZGdtZW50KHRoaXMpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGFuIGFzc2lnbm1lbnQgdG8gYSB0YXJnZXQgZm9yIHdoaWNoCi8vLyBhc3NpZ25tZW50IGlzIG5vdCBhbGxvd2VkLgpjbGFzcyBJbGxlZ2FsQXNzaWdubWVudEp1ZGdtZW50IGV4dGVuZHMgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCB7CiAgLy8vIFRoZSBvZmZzZXQgYXQgd2hpY2ggdGhlIGludmFsaWQgYXNzaWdubWVudCBzaG91bGQgYmUgc3RvcmVkLgogIC8vLyBJZiBgLTFgLCB0aGVuIHRoZXJlIGlzIG5vIHNlcGFyYXRlIGxvY2F0aW9uIGZvciBpbnZhbGlkIGFzc2lnbm1lbnQuCiAgZmluYWwgaW50IGFzc2lnbm1lbnRPZmZzZXQ7CgogIElsbGVnYWxBc3NpZ25tZW50SnVkZ21lbnQuXyhFeHByZXNzaW9uIHJocywge3RoaXMuYXNzaWdubWVudE9mZnNldDogLTF9KQogICAgICA6IHN1cGVyLl8ocmhzKSB7CiAgICByaHMucGFyZW50ID0gdGhpczsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgYWNjZXB0SW5mZXJlbmNlKAogICAgICBJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdElsbGVnYWxBc3NpZ25tZW50SnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGFuIGFzc2lnbm1lbnQgdG8gYSB0YXJnZXQgb2YgdGhlIGZvcm0KLy8vIGBhW2JdYC4KY2xhc3MgSW5kZXhBc3NpZ25tZW50SnVkZ21lbnQgZXh0ZW5kcyBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50V2l0aFJlY2VpdmVyIHsKICAvLy8gSW4gYW4gYXNzaWdubWVudCB0byBhbiBpbmRleCBleHByZXNzaW9uLCB0aGUgaW5kZXggZXhwcmVzc2lvbi4KICBmaW5hbCBFeHByZXNzaW9uIGluZGV4OwoKICBJbmRleEFzc2lnbm1lbnRKdWRnbWVudC5fKEV4cHJlc3Npb24gcmVjZWl2ZXIsIHRoaXMuaW5kZXgsIEV4cHJlc3Npb24gcmhzLAogICAgICB7Ym9vbCBpc1N1cGVyOiBmYWxzZX0pCiAgICAgIDogc3VwZXIuXyhyZWNlaXZlciwgcmhzLCBpc1N1cGVyKTsKCiAgQXJndW1lbnRzIF9nZXRJbnZvY2F0aW9uQXJndW1lbnRzKAogICAgICBTaGFkb3dUeXBlSW5mZXJyZXIgaW5mZXJyZXIsIEV4cHJlc3Npb24gaW52b2NhdGlvbikgewogICAgaWYgKGludm9jYXRpb24gaXMgTWV0aG9kSW52b2NhdGlvbikgewogICAgICByZXR1cm4gaW52b2NhdGlvbi5hcmd1bWVudHM7CiAgICB9IGVsc2UgaWYgKGludm9jYXRpb24gaXMgU3VwZXJNZXRob2RJbnZvY2F0aW9uKSB7CiAgICAgIHJldHVybiBpbnZvY2F0aW9uLmFyZ3VtZW50czsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IHVuaGFuZGxlZCgiJHtpbnZvY2F0aW9uLnJ1bnRpbWVUeXBlfSIsICJfZ2V0SW52b2NhdGlvbkFyZ3VtZW50cyIsCiAgICAgICAgICBmaWxlT2Zmc2V0LCBpbmZlcnJlci51cmkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxTdHJpbmc+IF9nZXRUb1N0cmluZ1BhcnRzKCkgewogICAgTGlzdDxTdHJpbmc+IHBhcnRzID0gc3VwZXIuX2dldFRvU3RyaW5nUGFydHMoKTsKICAgIGlmIChpbmRleCAhPSBudWxsKSBwYXJ0cy5hZGQoJ2luZGV4PSRpbmRleCcpOwogICAgcmV0dXJuIHBhcnRzOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCBhY2NlcHRJbmZlcmVuY2UoCiAgICAgIEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0SW5kZXhBc3NpZ25tZW50SnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIENvbW1vbiBiYXNlIGNsYXNzIGZvciBzaGFkb3cgb2JqZWN0cyByZXByZXNlbnRpbmcgaW5pdGlhbGl6ZXJzIGluIGtlcm5lbAovLy8gZm9ybS4KYWJzdHJhY3QgY2xhc3MgSW5pdGlhbGl6ZXJKdWRnbWVudCBpbXBsZW1lbnRzIEluaXRpYWxpemVyIHsKICAvLy8gUGVyZm9ybXMgdHlwZSBpbmZlcmVuY2UgZm9yIHdoYXRldmVyIGNvbmNyZXRlIHR5cGUgb2YKICAvLy8gW0luaXRpYWxpemVySnVkZ21lbnRdIHRoaXMgaXMuCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yKTsKfQoKRXhwcmVzc2lvbiBjaGVja1dlYkludExpdGVyYWxzRXJyb3JJZlVuZXhhY3QoCiAgICBTaGFkb3dUeXBlSW5mZXJyZXIgaW5mZXJyZXIsIGludCB2YWx1ZSwgU3RyaW5nIGxpdGVyYWwsIGludCBjaGFyT2Zmc2V0KSB7CiAgaWYgKHZhbHVlID49IDAgJiYgdmFsdWUgPD0gKDEgPDwgNTMpKSByZXR1cm4gbnVsbDsKICBpZiAoaW5mZXJyZXIuaXNUb3BMZXZlbCkgcmV0dXJuIG51bGw7CiAgaWYgKCFpbmZlcnJlci5saWJyYXJ5LmxvYWRlci50YXJnZXQuYmFja2VuZFRhcmdldAogICAgICAuZXJyb3JPblVuZXhhY3RXZWJJbnRMaXRlcmFscykgcmV0dXJuIG51bGw7CiAgQmlnSW50IGFzSW50ID0gbmV3IEJpZ0ludC5mcm9tKHZhbHVlKS50b1Vuc2lnbmVkKDY0KTsKICBCaWdJbnQgYXNEb3VibGUgPSBuZXcgQmlnSW50LmZyb20oYXNJbnQudG9Eb3VibGUoKSk7CiAgaWYgKGFzSW50ID09IGFzRG91YmxlKSByZXR1cm4gbnVsbDsKICBTdHJpbmcgdGV4dCA9IGxpdGVyYWwgPz8gdmFsdWUudG9TdHJpbmcoKTsKICBTdHJpbmcgbmVhcmVzdCA9IHRleHQuc3RhcnRzV2l0aCgnMHgnKSB8fCB0ZXh0LnN0YXJ0c1dpdGgoJzBYJykKICAgICAgPyAnMHgke2FzRG91YmxlLnRvUmFkaXhTdHJpbmcoMTYpfScKICAgICAgOiBhc0RvdWJsZS50b1N0cmluZygpOwogIGludCBsZW5ndGggPSBsaXRlcmFsPy5sZW5ndGggPz8gbm9MZW5ndGg7CiAgcmV0dXJuIGluZmVycmVyLmhlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihpbmZlcnJlci5oZWxwZXIKICAgICAgLmJ1aWxkUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlV2ViTGl0ZXJhbENhbm5vdEJlUmVwcmVzZW50ZWRFeGFjdGx5LndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgdGV4dCwgbmVhcmVzdCksCiAgICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgICAgbGVuZ3RoKSk7Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhbiBpbnRlZ2VyIGxpdGVyYWwgaW4ga2VybmVsIGZvcm0uCmNsYXNzIEludEp1ZGdtZW50IGV4dGVuZHMgSW50TGl0ZXJhbCBpbXBsZW1lbnRzIEV4cHJlc3Npb25KdWRnbWVudCB7CiAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwogIGZpbmFsIFN0cmluZyBsaXRlcmFsOwoKICBJbnRKdWRnbWVudChpbnQgdmFsdWUsIHRoaXMubGl0ZXJhbCkgOiBzdXBlcih2YWx1ZSk7CgogIGRvdWJsZSBhc0RvdWJsZSh7Ym9vbCBuZWdhdGVkOiBmYWxzZX0pIHsKICAgIGlmICh2YWx1ZSA9PSAwICYmIG5lZ2F0ZWQpIHJldHVybiAtMC4wOwogICAgQmlnSW50IGludFZhbHVlID0gbmV3IEJpZ0ludC5mcm9tKG5lZ2F0ZWQgPyAtdmFsdWUgOiB2YWx1ZSk7CiAgICBkb3VibGUgZG91YmxlVmFsdWUgPSBpbnRWYWx1ZS50b0RvdWJsZSgpOwogICAgcmV0dXJuIGludFZhbHVlID09IG5ldyBCaWdJbnQuZnJvbShkb3VibGVWYWx1ZSkgPyBkb3VibGVWYWx1ZSA6IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IGFjY2VwdEluZmVyZW5jZSgKICAgICAgSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRJbnRKdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQp9CgpjbGFzcyBTaGFkb3dMYXJnZUludExpdGVyYWwgZXh0ZW5kcyBJbnRMaXRlcmFsIGltcGxlbWVudHMgRXhwcmVzc2lvbkp1ZGdtZW50IHsKICBmaW5hbCBTdHJpbmcgbGl0ZXJhbDsKICBmaW5hbCBpbnQgZmlsZU9mZnNldDsKICBib29sIGlzUGFyZW50aGVzaXplZCA9IGZhbHNlOwoKICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CgogIFNoYWRvd0xhcmdlSW50TGl0ZXJhbCh0aGlzLmxpdGVyYWwsIHRoaXMuZmlsZU9mZnNldCkgOiBzdXBlcigwKTsKCiAgZG91YmxlIGFzRG91YmxlKHtib29sIG5lZ2F0ZWQ6IGZhbHNlfSkgewogICAgQmlnSW50IGludFZhbHVlID0gQmlnSW50LnRyeVBhcnNlKG5lZ2F0ZWQgPyAnLSR7bGl0ZXJhbH0nIDogbGl0ZXJhbCk7CiAgICBpZiAoaW50VmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBkb3VibGUgZG91YmxlVmFsdWUgPSBpbnRWYWx1ZS50b0RvdWJsZSgpOwogICAgcmV0dXJuICFkb3VibGVWYWx1ZS5pc05hTiAmJgogICAgICAgICAgICAhZG91YmxlVmFsdWUuaXNJbmZpbml0ZSAmJgogICAgICAgICAgICBpbnRWYWx1ZSA9PSBuZXcgQmlnSW50LmZyb20oZG91YmxlVmFsdWUpCiAgICAgICAgPyBkb3VibGVWYWx1ZQogICAgICAgIDogbnVsbDsKICB9CgogIGludCBhc0ludDY0KHtib29sIG5lZ2F0ZWQ6IGZhbHNlfSkgewogICAgcmV0dXJuIGludC50cnlQYXJzZShuZWdhdGVkID8gJy0ke2xpdGVyYWx9JyA6IGxpdGVyYWwpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCBhY2NlcHRJbmZlcmVuY2UoCiAgICAgIEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0U2hhZG93TGFyZ2VJbnRMaXRlcmFsKHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhbiBpbnZhbGlkIGluaXRpYWxpemVyIGluIGtlcm5lbCBmb3JtLgpjbGFzcyBTaGFkb3dJbnZhbGlkSW5pdGlhbGl6ZXIgZXh0ZW5kcyBMb2NhbEluaXRpYWxpemVyCiAgICBpbXBsZW1lbnRzIEluaXRpYWxpemVySnVkZ21lbnQgewogIFNoYWRvd0ludmFsaWRJbml0aWFsaXplcihWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKSA6IHN1cGVyKHZhcmlhYmxlKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFNoYWRvd0ludmFsaWRJbml0aWFsaXplcih0aGlzKTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhbiBpbnZhbGlkIGluaXRpYWxpemVyIGluIGtlcm5lbCBmb3JtLgpjbGFzcyBTaGFkb3dJbnZhbGlkRmllbGRJbml0aWFsaXplciBleHRlbmRzIExvY2FsSW5pdGlhbGl6ZXIKICAgIGltcGxlbWVudHMgSW5pdGlhbGl6ZXJKdWRnbWVudCB7CiAgZmluYWwgRmllbGQgZmllbGQ7CiAgZmluYWwgRXhwcmVzc2lvbiB2YWx1ZTsKCiAgU2hhZG93SW52YWxpZEZpZWxkSW5pdGlhbGl6ZXIoCiAgICAgIHRoaXMuZmllbGQsIHRoaXMudmFsdWUsIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUpCiAgICAgIDogc3VwZXIodmFyaWFibGUpIHsKICAgIHZhbHVlPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgRXhwcmVzc2lvbiBnZXQganVkZ21lbnQgPT4gdmFsdWU7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRTaGFkb3dJbnZhbGlkRmllbGRJbml0aWFsaXplcih0aGlzKTsKICB9Cn0KCi8vLyBUeXBlIGluZmVyZW5jZSBkZXJpdmF0aW9uIGZvciBbTGlzdExpdGVyYWxdLgpjbGFzcyBMaXN0TGl0ZXJhbEp1ZGdtZW50IGV4dGVuZHMgTGlzdExpdGVyYWwgaW1wbGVtZW50cyBFeHByZXNzaW9uSnVkZ21lbnQgewogIERhcnRUeXBlIGluZmVycmVkVHlwZTsKCiAgTGlzdExpdGVyYWxKdWRnbWVudChMaXN0PEV4cHJlc3Npb24+IGV4cHJlc3Npb25zLAogICAgICB7RGFydFR5cGUgdHlwZUFyZ3VtZW50LCBib29sIGlzQ29uc3Q6IGZhbHNlfSkKICAgICAgOiBhc3NlcnQodHlwZUFyZ3VtZW50ICE9IG51bGwpLAogICAgICAgIHN1cGVyKGV4cHJlc3Npb25zLCB0eXBlQXJndW1lbnQ6IHR5cGVBcmd1bWVudCwgaXNDb25zdDogaXNDb25zdCk7CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgYWNjZXB0SW5mZXJlbmNlKAogICAgICBJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdExpc3RMaXRlcmFsSnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIFR5cGUgaW5mZXJlbmNlIGRlcml2YXRpb24gZm9yIFtTZXRMaXRlcmFsXS4KY2xhc3MgU2V0TGl0ZXJhbEp1ZGdtZW50IGV4dGVuZHMgU2V0TGl0ZXJhbCBpbXBsZW1lbnRzIEV4cHJlc3Npb25KdWRnbWVudCB7CiAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwoKICBTZXRMaXRlcmFsSnVkZ21lbnQoTGlzdDxFeHByZXNzaW9uPiBleHByZXNzaW9ucywKICAgICAge0RhcnRUeXBlIHR5cGVBcmd1bWVudCwgYm9vbCBpc0NvbnN0OiBmYWxzZX0pCiAgICAgIDogYXNzZXJ0KHR5cGVBcmd1bWVudCAhPSBudWxsKSwKICAgICAgICBzdXBlcihleHByZXNzaW9ucywgdHlwZUFyZ3VtZW50OiB0eXBlQXJndW1lbnQsIGlzQ29uc3Q6IGlzQ29uc3QpOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IGFjY2VwdEluZmVyZW5jZSgKICAgICAgSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRTZXRMaXRlcmFsSnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIFR5cGUgaW5mZXJlbmNlIGRlcml2YXRpb24gZm9yIFtNYXBMaXRlcmFsXS4KY2xhc3MgTWFwTGl0ZXJhbEp1ZGdtZW50IGV4dGVuZHMgTWFwTGl0ZXJhbCBpbXBsZW1lbnRzIEV4cHJlc3Npb25KdWRnbWVudCB7CiAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwoKICBNYXBMaXRlcmFsSnVkZ21lbnQoTGlzdDxNYXBFbnRyeT4ganVkZ21lbnRzLAogICAgICB7RGFydFR5cGUga2V5VHlwZSwgRGFydFR5cGUgdmFsdWVUeXBlLCBib29sIGlzQ29uc3Q6IGZhbHNlfSkKICAgICAgOiBhc3NlcnQoa2V5VHlwZSAhPSBudWxsKSwKICAgICAgICBhc3NlcnQodmFsdWVUeXBlICE9IG51bGwpLAogICAgICAgIHN1cGVyKGp1ZGdtZW50cywKICAgICAgICAgICAga2V5VHlwZToga2V5VHlwZSwgdmFsdWVUeXBlOiB2YWx1ZVR5cGUsIGlzQ29uc3Q6IGlzQ29uc3QpOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IGFjY2VwdEluZmVyZW5jZSgKICAgICAgSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRNYXBMaXRlcmFsSnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIFNoYWRvdyBvYmplY3QgZm9yIFtNZXRob2RJbnZvY2F0aW9uXS4KY2xhc3MgTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50IGV4dGVuZHMgTWV0aG9kSW52b2NhdGlvbgogICAgaW1wbGVtZW50cyBFeHByZXNzaW9uSnVkZ21lbnQgewogIERhcnRUeXBlIGluZmVycmVkVHlwZTsKCiAgLy8vIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgbWV0aG9kIGludm9jYXRpb24gaXMgYSBjYWxsIHRvIGEgYGNhbGxgIG1ldGhvZAogIC8vLyByZXN1bHRpbmcgZnJvbSB0aGUgaW52b2NhdGlvbiBvZiBhIGZ1bmN0aW9uIGV4cHJlc3Npb24uCiAgZmluYWwgYm9vbCBfaXNJbXBsaWNpdENhbGw7CgogIE1ldGhvZEludm9jYXRpb25KdWRnbWVudCgKICAgICAgRXhwcmVzc2lvbiByZWNlaXZlciwgTmFtZSBuYW1lLCBBcmd1bWVudHNKdWRnbWVudCBhcmd1bWVudHMsCiAgICAgIHtib29sIGlzSW1wbGljaXRDYWxsOiBmYWxzZSwgTWVtYmVyIGludGVyZmFjZVRhcmdldH0pCiAgICAgIDogX2lzSW1wbGljaXRDYWxsID0gaXNJbXBsaWNpdENhbGwsCiAgICAgICAgc3VwZXIocmVjZWl2ZXIsIG5hbWUsIGFyZ3VtZW50cywgaW50ZXJmYWNlVGFyZ2V0KTsKCiAgQXJndW1lbnRzSnVkZ21lbnQgZ2V0IGFyZ3VtZW50SnVkZ21lbnRzID0+IGFyZ3VtZW50czsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCBhY2NlcHRJbmZlcmVuY2UoCiAgICAgIEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0TWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIG5hbWVkIGZ1bmN0aW9uIGV4cHJlc3Npb24uCi8vLwovLy8gTmFtZWQgZnVuY3Rpb24gZXhwcmVzc2lvbnMgYXJlIG5vdCBsZWdhbCBpbiBEYXJ0LCBidXQgdGhleSBhcmUgYWNjZXB0ZWQgYnkKLy8vIHRoZSBwYXJzZXIgYW5kIEJvZHlCdWlsZGVyIGZvciBlcnJvciByZWNvdmVyeSBwdXJwb3Nlcy4KLy8vCi8vLyBBIG5hbWVkIGZ1bmN0aW9uIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gYGYoKSB7IC4uLiB9YCBpcyByZXByZXNlbnRlZCBhcyB0aGUKLy8vIGtlcm5lbCBleHByZXNzaW9uOgovLy8KLy8vICAgICBsZXQgZiA9ICgpIHsgLi4uIH0gaW4gZgpjbGFzcyBOYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbkp1ZGdtZW50IGV4dGVuZHMgTGV0CiAgICBpbXBsZW1lbnRzIEV4cHJlc3Npb25KdWRnbWVudCB7CiAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwoKICBOYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbkp1ZGdtZW50KFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudCB2YXJpYWJsZSkKICAgICAgOiBzdXBlcih2YXJpYWJsZSwgbmV3IFZhcmlhYmxlR2V0KHZhcmlhYmxlKSk7CgogIFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudCBnZXQgdmFyaWFibGVKdWRnbWVudCA9PiB2YXJpYWJsZTsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCBhY2NlcHRJbmZlcmVuY2UoCiAgICAgIEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0TmFtZWRGdW5jdGlvbkV4cHJlc3Npb25KdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYSBudWxsLWF3YXJlIG1ldGhvZCBpbnZvY2F0aW9uLgovLy8KLy8vIEEgbnVsbC1hd2FyZSBtZXRob2QgaW52b2NhdGlvbiBvZiB0aGUgZm9ybSBgYT8uYiguLi4pYCBpcyByZXByZXNlbnRlZCBhcyB0aGUKLy8vIGV4cHJlc3Npb246Ci8vLwovLy8gICAgIGxldCB2ID0gYSBpbiB2ID09IG51bGwgPyBudWxsIDogdi5iKC4uLikKY2xhc3MgTnVsbEF3YXJlTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50IGV4dGVuZHMgTGV0CiAgICBpbXBsZW1lbnRzIEV4cHJlc3Npb25KdWRnbWVudCB7CiAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwoKICBOdWxsQXdhcmVNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQoCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIEV4cHJlc3Npb24gYm9keSkKICAgICAgOiBzdXBlcih2YXJpYWJsZSwgYm9keSk7CgogIEBvdmVycmlkZQogIENvbmRpdGlvbmFsRXhwcmVzc2lvbiBnZXQgYm9keSA9PiBzdXBlci5ib2R5OwoKICBNZXRob2RJbnZvY2F0aW9uIGdldCBfZGVzdWdhcmVkSW52b2NhdGlvbiA9PiBib2R5Lm90aGVyd2lzZTsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCBhY2NlcHRJbmZlcmVuY2UoCiAgICAgIEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0TnVsbEF3YXJlTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIG51bGwtYXdhcmUgcmVhZCBmcm9tIGEgcHJvcGVydHkuCi8vLwovLy8gQSBudWxsLWF3YXJlIHByb3BlcnR5IGdldCBvZiB0aGUgZm9ybSBgYT8uYmAgaXMgcmVwcmVzZW50ZWQgYXMgdGhlIGtlcm5lbAovLy8gZXhwcmVzc2lvbjoKLy8vCi8vLyAgICAgbGV0IHYgPSBhIGluIHYgPT0gbnVsbCA/IG51bGwgOiB2LmIKY2xhc3MgTnVsbEF3YXJlUHJvcGVydHlHZXRKdWRnbWVudCBleHRlbmRzIExldCBpbXBsZW1lbnRzIEV4cHJlc3Npb25KdWRnbWVudCB7CiAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwoKICBOdWxsQXdhcmVQcm9wZXJ0eUdldEp1ZGdtZW50KAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBDb25kaXRpb25hbEV4cHJlc3Npb24gYm9keSkKICAgICAgOiBzdXBlcih2YXJpYWJsZSwgYm9keSk7CgogIEBvdmVycmlkZQogIENvbmRpdGlvbmFsRXhwcmVzc2lvbiBnZXQgYm9keSA9PiBzdXBlci5ib2R5OwoKICBQcm9wZXJ0eUdldCBnZXQgX2Rlc3VnYXJlZEdldCA9PiBib2R5Lm90aGVyd2lzZTsKCiAgRXhwcmVzc2lvbiBnZXQgcmVjZWl2ZXJKdWRnbWVudCA9PiB2YXJpYWJsZS5pbml0aWFsaXplcjsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCBhY2NlcHRJbmZlcmVuY2UoCiAgICAgIEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0TnVsbEF3YXJlUHJvcGVydHlHZXRKdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYW4gYXNzaWdubWVudCB0byBhIHByb3BlcnR5LgpjbGFzcyBQcm9wZXJ0eUFzc2lnbm1lbnRKdWRnbWVudCBleHRlbmRzIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnRXaXRoUmVjZWl2ZXIgewogIC8vLyBJZiB0aGlzIGFzc2lnbm1lbnQgdXNlcyBudWxsLWF3YXJlIGFjY2VzcyAoYD8uYCksIHRoZSBjb25kaXRpb25hbAogIC8vLyBleHByZXNzaW9uIHRoYXQgZ3VhcmRzIHRoZSBhY2Nlc3M7IG90aGVyd2lzZSBgbnVsbGAuCiAgQ29uZGl0aW9uYWxFeHByZXNzaW9uIG51bGxBd2FyZUd1YXJkOwoKICBQcm9wZXJ0eUFzc2lnbm1lbnRKdWRnbWVudC5fKEV4cHJlc3Npb24gcmVjZWl2ZXIsIEV4cHJlc3Npb24gcmhzLAogICAgICB7Ym9vbCBpc1N1cGVyOiBmYWxzZX0pCiAgICAgIDogc3VwZXIuXyhyZWNlaXZlciwgcmhzLCBpc1N1cGVyKTsKCiAgQG92ZXJyaWRlCiAgTGlzdDxTdHJpbmc+IF9nZXRUb1N0cmluZ1BhcnRzKCkgewogICAgTGlzdDxTdHJpbmc+IHBhcnRzID0gc3VwZXIuX2dldFRvU3RyaW5nUGFydHMoKTsKICAgIGlmIChudWxsQXdhcmVHdWFyZCAhPSBudWxsKSBwYXJ0cy5hZGQoJ251bGxBd2FyZUd1YXJkPSRudWxsQXdhcmVHdWFyZCcpOwogICAgcmV0dXJuIHBhcnRzOwogIH0KCiAgT2JqZWN0QWNjZXNzVGFyZ2V0IF9oYW5kbGVXcml0ZUNvbnRyYXZhcmlhbmNlKAogICAgICBTaGFkb3dUeXBlSW5mZXJyZXIgaW5mZXJyZXIsIERhcnRUeXBlIHJlY2VpdmVyVHlwZSkgewogICAgcmV0dXJuIGluZmVycmVyLmZpbmRQcm9wZXJ0eVNldE1lbWJlcihyZWNlaXZlclR5cGUsIHdyaXRlKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgYWNjZXB0SW5mZXJlbmNlKAogICAgICBJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFByb3BlcnR5QXNzaWdubWVudEp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIHJlZGlyZWN0aW5nIGluaXRpYWxpemVyIGluIGtlcm5lbAovLy8gZm9ybS4KY2xhc3MgUmVkaXJlY3RpbmdJbml0aWFsaXplckp1ZGdtZW50IGV4dGVuZHMgUmVkaXJlY3RpbmdJbml0aWFsaXplcgogICAgaW1wbGVtZW50cyBJbml0aWFsaXplckp1ZGdtZW50IHsKICBSZWRpcmVjdGluZ0luaXRpYWxpemVySnVkZ21lbnQoCiAgICAgIENvbnN0cnVjdG9yIHRhcmdldCwgQXJndW1lbnRzSnVkZ21lbnQgYXJndW1lbnRzKQogICAgICA6IHN1cGVyKHRhcmdldCwgYXJndW1lbnRzKTsKCiAgQXJndW1lbnRzSnVkZ21lbnQgZ2V0IGFyZ3VtZW50SnVkZ21lbnRzID0+IGFyZ3VtZW50czsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXJKdWRnbWVudCh0aGlzKTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIHJldHVybiBzdGF0ZW1lbnQgaW4ga2VybmVsIGZvcm0uCmNsYXNzIFJldHVybkp1ZGdtZW50IGV4dGVuZHMgUmV0dXJuU3RhdGVtZW50IGltcGxlbWVudHMgU3RhdGVtZW50SnVkZ21lbnQgewogIGZpbmFsIGJvb2wgaXNBcnJvdzsKCiAgUmV0dXJuSnVkZ21lbnQodGhpcy5pc0Fycm93LCBbRXhwcmVzc2lvbiBleHByZXNzaW9uXSkgOiBzdXBlcihleHByZXNzaW9uKTsKCiAgRXhwcmVzc2lvbiBnZXQganVkZ21lbnQgPT4gZXhwcmVzc2lvbjsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFJldHVybkp1ZGdtZW50KHRoaXMpOwogIH0KfQoKLy8vIENvbW1vbiBiYXNlIGNsYXNzIGZvciBzaGFkb3cgb2JqZWN0cyByZXByZXNlbnRpbmcgc3RhdGVtZW50cyBpbiBrZXJuZWwKLy8vIGZvcm0uCmFic3RyYWN0IGNsYXNzIFN0YXRlbWVudEp1ZGdtZW50IGV4dGVuZHMgU3RhdGVtZW50IHsKICAvLy8gQ2FsbHMgYmFjayB0byBbaW5mZXJyZXJdIHRvIHBlcmZvcm0gdHlwZSBpbmZlcmVuY2UgZm9yIHdoYXRldmVyIGNvbmNyZXRlCiAgLy8vIHR5cGUgb2YgW1N0YXRlbWVudEp1ZGdtZW50XSB0aGlzIGlzLgogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcik7Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhbiBhc3NpZ25tZW50IHRvIGEgc3RhdGljIHZhcmlhYmxlLgpjbGFzcyBTdGF0aWNBc3NpZ25tZW50SnVkZ21lbnQgZXh0ZW5kcyBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IHsKICBTdGF0aWNBc3NpZ25tZW50SnVkZ21lbnQuXyhFeHByZXNzaW9uIHJocykgOiBzdXBlci5fKHJocyk7CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgYWNjZXB0SW5mZXJlbmNlKAogICAgICBJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFN0YXRpY0Fzc2lnbm1lbnRKdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYSBzdXBlciBpbml0aWFsaXplciBpbiBrZXJuZWwgZm9ybS4KY2xhc3MgU3VwZXJJbml0aWFsaXplckp1ZGdtZW50IGV4dGVuZHMgU3VwZXJJbml0aWFsaXplcgogICAgaW1wbGVtZW50cyBJbml0aWFsaXplckp1ZGdtZW50IHsKICBTdXBlckluaXRpYWxpemVySnVkZ21lbnQoQ29uc3RydWN0b3IgdGFyZ2V0LCBBcmd1bWVudHNKdWRnbWVudCBhcmd1bWVudHMpCiAgICAgIDogc3VwZXIodGFyZ2V0LCBhcmd1bWVudHMpOwoKICBBcmd1bWVudHNKdWRnbWVudCBnZXQgYXJndW1lbnRKdWRnbWVudHMgPT4gYXJndW1lbnRzOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0U3VwZXJJbml0aWFsaXplckp1ZGdtZW50KHRoaXMpOwogIH0KfQoKLy8vIFNoYWRvdyBvYmplY3QgZm9yIFtTdXBlck1ldGhvZEludm9jYXRpb25dLgpjbGFzcyBTdXBlck1ldGhvZEludm9jYXRpb25KdWRnbWVudCBleHRlbmRzIFN1cGVyTWV0aG9kSW52b2NhdGlvbgogICAgaW1wbGVtZW50cyBFeHByZXNzaW9uSnVkZ21lbnQgewogIERhcnRUeXBlIGluZmVycmVkVHlwZTsKCiAgU3VwZXJNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQoTmFtZSBuYW1lLCBBcmd1bWVudHNKdWRnbWVudCBhcmd1bWVudHMsCiAgICAgIHtQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0fSkKICAgICAgOiBzdXBlcihuYW1lLCBhcmd1bWVudHMsIGludGVyZmFjZVRhcmdldCk7CgogIEFyZ3VtZW50c0p1ZGdtZW50IGdldCBhcmd1bWVudEp1ZGdtZW50cyA9PiBhcmd1bWVudHM7CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgYWNjZXB0SW5mZXJlbmNlKAogICAgICBJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFN1cGVyTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBTaGFkb3cgb2JqZWN0IGZvciBbU3VwZXJQcm9wZXJ0eUdldF0uCmNsYXNzIFN1cGVyUHJvcGVydHlHZXRKdWRnbWVudCBleHRlbmRzIFN1cGVyUHJvcGVydHlHZXQKICAgIGltcGxlbWVudHMgRXhwcmVzc2lvbkp1ZGdtZW50IHsKICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CgogIFN1cGVyUHJvcGVydHlHZXRKdWRnbWVudChOYW1lIG5hbWUsIHtNZW1iZXIgaW50ZXJmYWNlVGFyZ2V0fSkKICAgICAgOiBzdXBlcihuYW1lLCBpbnRlcmZhY2VUYXJnZXQpOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IGFjY2VwdEluZmVyZW5jZSgKICAgICAgSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRTdXBlclByb3BlcnR5R2V0SnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgc3dpdGNoIGNhc2UuCmNsYXNzIFN3aXRjaENhc2VKdWRnbWVudCBleHRlbmRzIFN3aXRjaENhc2UgewogIFN3aXRjaENhc2VKdWRnbWVudCgKICAgICAgTGlzdDxFeHByZXNzaW9uPiBleHByZXNzaW9ucywgTGlzdDxpbnQ+IGV4cHJlc3Npb25PZmZzZXRzLCBTdGF0ZW1lbnQgYm9keSwKICAgICAge2Jvb2wgaXNEZWZhdWx0OiBmYWxzZX0pCiAgICAgIDogc3VwZXIoZXhwcmVzc2lvbnMsIGV4cHJlc3Npb25PZmZzZXRzLCBib2R5LCBpc0RlZmF1bHQ6IGlzRGVmYXVsdCk7CgogIFN3aXRjaENhc2VKdWRnbWVudC5kZWZhdWx0Q2FzZShTdGF0ZW1lbnQgYm9keSkgOiBzdXBlci5kZWZhdWx0Q2FzZShib2R5KTsKCiAgU3dpdGNoQ2FzZUp1ZGdtZW50LmVtcHR5KCkgOiBzdXBlci5lbXB0eSgpOwoKICBMaXN0PEV4cHJlc3Npb24+IGdldCBleHByZXNzaW9uSnVkZ21lbnRzID0+IGV4cHJlc3Npb25zLmNhc3QoKTsKfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgc3dpdGNoIHN0YXRlbWVudCBpbiBrZXJuZWwgZm9ybS4KY2xhc3MgU3dpdGNoU3RhdGVtZW50SnVkZ21lbnQgZXh0ZW5kcyBTd2l0Y2hTdGF0ZW1lbnQKICAgIGltcGxlbWVudHMgU3RhdGVtZW50SnVkZ21lbnQgewogIFN3aXRjaFN0YXRlbWVudEp1ZGdtZW50KEV4cHJlc3Npb24gZXhwcmVzc2lvbiwgTGlzdDxTd2l0Y2hDYXNlPiBjYXNlcykKICAgICAgOiBzdXBlcihleHByZXNzaW9uLCBjYXNlcyk7CgogIEV4cHJlc3Npb24gZ2V0IGV4cHJlc3Npb25KdWRnbWVudCA9PiBleHByZXNzaW9uOwoKICBMaXN0PFN3aXRjaENhc2VKdWRnbWVudD4gZ2V0IGNhc2VKdWRnbWVudHMgPT4gY2FzZXMuY2FzdCgpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0U3dpdGNoU3RhdGVtZW50SnVkZ21lbnQodGhpcyk7CiAgfQp9CgovLy8gU2hhZG93IG9iamVjdCBmb3IgW1N5bWJvbExpdGVyYWxdLgpjbGFzcyBTeW1ib2xMaXRlcmFsSnVkZ21lbnQgZXh0ZW5kcyBTeW1ib2xMaXRlcmFsCiAgICBpbXBsZW1lbnRzIEV4cHJlc3Npb25KdWRnbWVudCB7CiAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwoKICBTeW1ib2xMaXRlcmFsSnVkZ21lbnQoU3RyaW5nIHZhbHVlKSA6IHN1cGVyKHZhbHVlKTsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCBhY2NlcHRJbmZlcmVuY2UoCiAgICAgIEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0U3ltYm9sTGl0ZXJhbEp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBTeW50aGV0aWMganVkZ21lbnQgY2xhc3MgcmVwcmVzZW50aW5nIGFuIGF0dGVtcHQgdG8gaW52b2tlIGFuIHVucmVzb2x2ZWQKLy8vIGNvbnN0cnVjdG9yLCBvciBhIGNvbnN0cnVjdG9yIHRoYXQgY2Fubm90IGJlIGludm9rZWQsIG9yIGEgcmVzb2x2ZWQKLy8vIGNvbnN0cnVjdG9yIHdpdGggd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cy4KLy8gVE9ETyhhaGUpOiBSZW1vdmUgdGhpcz8KY2xhc3MgSW52YWxpZENvbnN0cnVjdG9ySW52b2NhdGlvbkp1ZGdtZW50IGV4dGVuZHMgU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50IHsKICBmaW5hbCBNZW1iZXIgY29uc3RydWN0b3I7CiAgZmluYWwgQXJndW1lbnRzIGFyZ3VtZW50czsKCiAgSW52YWxpZENvbnN0cnVjdG9ySW52b2NhdGlvbkp1ZGdtZW50Ll8oCiAgICAgIGtlcm5lbC5FeHByZXNzaW9uIGRlc3VnYXJlZCwgdGhpcy5jb25zdHJ1Y3RvciwgdGhpcy5hcmd1bWVudHMpCiAgICAgIDogc3VwZXIuXyhkZXN1Z2FyZWQpOwoKICBBcmd1bWVudHNKdWRnbWVudCBnZXQgYXJndW1lbnRKdWRnbWVudHMgPT4gYXJndW1lbnRzOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IGFjY2VwdEluZmVyZW5jZSgKICAgICAgSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRJbnZhbGlkQ29uc3RydWN0b3JJbnZvY2F0aW9uSnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIFN5bnRoZXRpYyBqdWRnbWVudCBjbGFzcyByZXByZXNlbnRpbmcgYW4gYXR0ZW1wdCB0byBhc3NpZ24gdG8gdGhlCi8vLyBbZXhwcmVzc2lvbl0gd2hpY2ggaXMgbm90IGFzc2lnbmFibGUuCmNsYXNzIEludmFsaWRXcml0ZUp1ZGdtZW50IGV4dGVuZHMgU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50IHsKICBmaW5hbCBFeHByZXNzaW9uIGV4cHJlc3Npb247CgogIEludmFsaWRXcml0ZUp1ZGdtZW50Ll8oa2VybmVsLkV4cHJlc3Npb24gZGVzdWdhcmVkLCB0aGlzLmV4cHJlc3Npb24pCiAgICAgIDogc3VwZXIuXyhkZXN1Z2FyZWQpOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IGFjY2VwdEluZmVyZW5jZSgKICAgICAgSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRJbnZhbGlkV3JpdGVKdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQp9CgovLy8gU2hhZG93IG9iamVjdCBmb3IgZXhwcmVzc2lvbnMgdGhhdCBhcmUgaW50cm9kdWNlZCBieSB0aGUgZnJvbnQgZW5kIGFzIHBhcnQKLy8vIG9mIGRlc3VnYXJpbmcgb3IgdGhlIGhhbmRsaW5nIG9mIGVycm9yIGNvbmRpdGlvbnMuCi8vLwovLy8gVGhlc2UgZXhwcmVzc2lvbnMgYXJlIHJlbW92ZWQgYnkgdHlwZSBpbmZlcmVuY2UgYW5kIHJlcGxhY2VkIHdpdGggdGhlaXIKLy8vIGRlc3VnYXJlZCBlcXVpdmFsZW50cy4KY2xhc3MgU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50IGV4dGVuZHMgTGV0IGltcGxlbWVudHMgRXhwcmVzc2lvbkp1ZGdtZW50IHsKICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CgogIFN5bnRoZXRpY0V4cHJlc3Npb25KdWRnbWVudC5fKEV4cHJlc3Npb24gZGVzdWdhcmVkKQogICAgICA6IHN1cGVyKG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKCdfJywgaW5pdGlhbGl6ZXI6IG5ldyBOdWxsTGl0ZXJhbCgpKSwKICAgICAgICAgICAgZGVzdWdhcmVkKTsKCiAgLy8vIFRoZSBkZXN1Z2FyZWQga2VybmVsIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc3ludGhldGljIGV4cHJlc3Npb24uCiAgRXhwcmVzc2lvbiBnZXQgZGVzdWdhcmVkID0+IGJvZHk7CgogIHZvaWQgc2V0IGRlc3VnYXJlZChFeHByZXNzaW9uIHZhbHVlKSB7CiAgICB0aGlzLmJvZHkgPSB2YWx1ZTsKICAgIHZhbHVlLnBhcmVudCA9IHRoaXM7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IGFjY2VwdEluZmVyZW5jZSgKICAgICAgSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRTeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KCiAgLy8vIFJlbW92ZXMgdGhpcyBleHByZXNzaW9uIGZyb20gdGhlIGV4cHJlc3Npb24gdHJlZSwgcmVwbGFjaW5nIGl0IHdpdGgKICAvLy8gW2Rlc3VnYXJlZF0uCiAgRXhwcmVzc2lvbiBfcmVwbGFjZVdpdGhEZXN1Z2FyZWQoKSB7CiAgICBwYXJlbnQucmVwbGFjZUNoaWxkKHRoaXMsIGRlc3VnYXJlZCk7CiAgICBwYXJlbnQgPSBudWxsOwogICAgcmV0dXJuIGRlc3VnYXJlZDsKICB9CgogIC8vLyBVcGRhdGVzIGFueSBbTGV0XSBub2RlcyBpbiB0aGUgZGVzdWdhcmVkIGV4cHJlc3Npb24gdG8gYWNjb3VudCBmb3IgdGhlCiAgLy8vIGZhY3QgdGhhdCBbZXhwcmVzc2lvbl0gaGFzIHRoZSBnaXZlbiBbdHlwZV0uCiAgdm9pZCBfc3RvcmVMZXRUeXBlKAogICAgICBUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyLCBFeHByZXNzaW9uIGV4cHJlc3Npb24sIERhcnRUeXBlIHR5cGUpIHsKICAgIEV4cHJlc3Npb24gZGVzdWdhcmVkID0gdGhpcy5kZXN1Z2FyZWQ7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBpZiAoZGVzdWdhcmVkIGlzIExldCkgewogICAgICAgIExldCBkZXN1Z2FyZWRMZXQgPSBkZXN1Z2FyZWQ7CiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSA9IGRlc3VnYXJlZExldC52YXJpYWJsZTsKICAgICAgICBpZiAoaWRlbnRpY2FsKHZhcmlhYmxlLmluaXRpYWxpemVyLCBleHByZXNzaW9uKSkgewogICAgICAgICAgdmFyaWFibGUudHlwZSA9IHR5cGU7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGRlc3VnYXJlZCA9IGRlc3VnYXJlZExldC5ib2R5OwogICAgICB9IGVsc2UgaWYgKGRlc3VnYXJlZCBpcyBDb25kaXRpb25hbEV4cHJlc3Npb24pIHsKICAgICAgICAvLyBXaGVuIGEgbnVsbC1hd2FyZSBhc3NpZ25tZW50IGlzIGRlc3VnYXJlZCwgb2Z0ZW4gdGhlICJ0aGVuIiBvciAiZWxzZSIKICAgICAgICAvLyBicmFuY2ggb2YgdGhlIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gb2Z0ZW4gY29udGFpbnMgImxldCIgbm9kZXMgdGhhdAogICAgICAgIC8vIG5lZWQgdG8gYmUgdXBkYXRlZC4KICAgICAgICBDb25kaXRpb25hbEV4cHJlc3Npb24gZGVzdWdhcmVkQ29uZGl0aW9uYWxFeHByZXNzaW9uID0gZGVzdWdhcmVkOwogICAgICAgIGlmIChkZXN1Z2FyZWRDb25kaXRpb25hbEV4cHJlc3Npb24udGhlbiBpcyBMZXQpIHsKICAgICAgICAgIGRlc3VnYXJlZCA9IGRlc3VnYXJlZENvbmRpdGlvbmFsRXhwcmVzc2lvbi50aGVuOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkZXN1Z2FyZWQgPSBkZXN1Z2FyZWRDb25kaXRpb25hbEV4cHJlc3Npb24ub3RoZXJ3aXNlOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yPGR5bmFtaWM+IHYpIHsKICAgIC8vIFRoaXMgaXMgZGVzaWduZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIGR1cmluZyBzZXJpYWxpemF0aW9uLiBJdCBjYW4gYWxzbwogICAgLy8gbGVhZCB0byBleGNlcHRpb25zIGR1cmluZyB0cmFuc2Zvcm1hdGlvbnMsIGJ1dCB3ZSBoYXZlIHRvIGFjY2VwdCBhCiAgICAvLyBbVHJhbnNmb3JtZXJdIGFzIHRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQgYHJlcGxhY2VDaGlsZGAuCiAgICBpZiAodiBpcyBUcmFuc2Zvcm1lcikgcmV0dXJuIHN1cGVyLmFjY2VwdCh2KTsKICAgIHVuc3VwcG9ydGVkKCJhY2NlcHQiLCBmaWxlT2Zmc2V0LCBnZXRGaWxlVXJpKHRoaXMpKTsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxPGR5bmFtaWMsIGR5bmFtaWM+IHYsIGFyZykgewogICAgdW5zdXBwb3J0ZWQoImFjY2VwdDEiLCBmaWxlT2Zmc2V0LCBnZXRGaWxlVXJpKHRoaXMpKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvcjxkeW5hbWljPiB2KSB7CiAgICB1bnN1cHBvcnRlZCgidmlzaXRDaGlsZHJlbiIsIGZpbGVPZmZzZXQsIGdldEZpbGVVcmkodGhpcykpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgY2F0Y2ggY2xhdXNlLgpjbGFzcyBDYXRjaEp1ZGdtZW50IGV4dGVuZHMgQ2F0Y2ggewogIENhdGNoSnVkZ21lbnQoVmFyaWFibGVEZWNsYXJhdGlvbiBleGNlcHRpb24sIFN0YXRlbWVudCBib2R5LAogICAgICB7RGFydFR5cGUgZ3VhcmQ6IGNvbnN0IER5bmFtaWNUeXBlKCksIFZhcmlhYmxlRGVjbGFyYXRpb24gc3RhY2tUcmFjZX0pCiAgICAgIDogc3VwZXIoZXhjZXB0aW9uLCBib2R5LCBndWFyZDogZ3VhcmQsIHN0YWNrVHJhY2U6IHN0YWNrVHJhY2UpOwoKICBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQgZ2V0IGV4Y2VwdGlvbkp1ZGdtZW50ID0+IGV4Y2VwdGlvbjsKCiAgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50IGdldCBzdGFja1RyYWNlSnVkZ21lbnQgPT4gc3RhY2tUcmFjZTsKfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHJ5LWNhdGNoIGJsb2NrIGluIGtlcm5lbCBmb3JtLgpjbGFzcyBUcnlDYXRjaEp1ZGdtZW50IGV4dGVuZHMgVHJ5Q2F0Y2ggaW1wbGVtZW50cyBTdGF0ZW1lbnRKdWRnbWVudCB7CiAgVHJ5Q2F0Y2hKdWRnbWVudChTdGF0ZW1lbnQgYm9keSwgTGlzdDxDYXRjaD4gY2F0Y2hlcykgOiBzdXBlcihib2R5LCBjYXRjaGVzKTsKCiAgTGlzdDxDYXRjaEp1ZGdtZW50PiBnZXQgY2F0Y2hKdWRnbWVudHMgPT4gY2F0Y2hlcy5jYXN0KCk7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRUcnlDYXRjaEp1ZGdtZW50KHRoaXMpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHJ5LWZpbmFsbHkgYmxvY2sgaW4ga2VybmVsIGZvcm0uCmNsYXNzIFRyeUZpbmFsbHlKdWRnbWVudCBleHRlbmRzIFRyeUZpbmFsbHkgaW1wbGVtZW50cyBTdGF0ZW1lbnRKdWRnbWVudCB7CiAgVHJ5RmluYWxseUp1ZGdtZW50KFN0YXRlbWVudCBib2R5LCBTdGF0ZW1lbnQgZmluYWxpemVyKQogICAgICA6IHN1cGVyKGJvZHksIGZpbmFsaXplcik7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRUcnlGaW5hbGx5SnVkZ21lbnQodGhpcyk7CiAgfQp9CgovLy8gQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgW1R5cGVJbmZlcmVuY2VFbmdpbmVdIHNwZWNpYWxpemVkIHRvIHdvcmsgd2l0aAovLy8ga2VybmVsIG9iamVjdHMuCmNsYXNzIFNoYWRvd1R5cGVJbmZlcmVuY2VFbmdpbmUgZXh0ZW5kcyBUeXBlSW5mZXJlbmNlRW5naW5lIHsKICBTaGFkb3dUeXBlSW5mZXJlbmNlRW5naW5lKEluc3RydW1lbnRhdGlvbiBpbnN0cnVtZW50YXRpb24pCiAgICAgIDogc3VwZXIoaW5zdHJ1bWVudGF0aW9uKTsKCiAgQG92ZXJyaWRlCiAgU2hhZG93VHlwZUluZmVycmVyIGNyZWF0ZUxvY2FsVHlwZUluZmVycmVyKAogICAgICBVcmkgdXJpLCBJbnRlcmZhY2VUeXBlIHRoaXNUeXBlLCBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICByZXR1cm4gbmV3IFR5cGVJbmZlcnJlcih0aGlzLCB1cmksIGZhbHNlLCB0aGlzVHlwZSwgbGlicmFyeSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTaGFkb3dUeXBlSW5mZXJyZXIgY3JlYXRlVG9wTGV2ZWxUeXBlSW5mZXJyZXIoCiAgICAgIFVyaSB1cmksIEludGVyZmFjZVR5cGUgdGhpc1R5cGUsIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgIHJldHVybiBuZXcgVHlwZUluZmVycmVyKHRoaXMsIHVyaSwgdHJ1ZSwgdGhpc1R5cGUsIGxpYnJhcnkpOwogIH0KfQoKLy8vIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIFtUeXBlSW5mZXJyZXJdIHNwZWNpYWxpemVkIHRvIHdvcmsgd2l0aCBrZXJuZWwKLy8vIG9iamVjdHMuCmNsYXNzIFNoYWRvd1R5cGVJbmZlcnJlciBleHRlbmRzIFR5cGVJbmZlcnJlckltcGwgewogIEBvdmVycmlkZQogIGZpbmFsIFR5cGVQcm9tb3RlciB0eXBlUHJvbW90ZXI7CgogIFNoYWRvd1R5cGVJbmZlcnJlci5wcml2YXRlKFNoYWRvd1R5cGVJbmZlcmVuY2VFbmdpbmUgZW5naW5lLCBVcmkgdXJpLAogICAgICBib29sIHRvcExldmVsLCBJbnRlcmZhY2VUeXBlIHRoaXNUeXBlLCBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KQogICAgICA6IHR5cGVQcm9tb3RlciA9IG5ldyBUeXBlUHJvbW90ZXIoZW5naW5lLnR5cGVTY2hlbWFFbnZpcm9ubWVudCksCiAgICAgICAgc3VwZXIucHJpdmF0ZShlbmdpbmUsIHVyaSwgdG9wTGV2ZWwsIHRoaXNUeXBlLCBsaWJyYXJ5KTsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBnZXRGaWVsZEluaXRpYWxpemVyKEZpZWxkIGZpZWxkKSB7CiAgICByZXR1cm4gZmllbGQuaW5pdGlhbGl6ZXI7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IGluZmVyRXhwcmVzc2lvbigKICAgICAga2VybmVsLkV4cHJlc3Npb24gZXhwcmVzc2lvbiwgRGFydFR5cGUgdHlwZUNvbnRleHQsIGJvb2wgdHlwZU5lZWRlZCwKICAgICAge2Jvb2wgaXNWb2lkQWxsb3dlZDogZmFsc2V9KSB7CiAgICAvLyBgbnVsbGAgc2hvdWxkIG5ldmVyIGJlIHVzZWQgYXMgdGhlIHR5cGUgY29udGV4dC4gIEFuIGluc3RhbmNlIG9mCiAgICAvLyBgVW5rbm93blR5cGVgIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCiAgICBhc3NlcnQodHlwZUNvbnRleHQgIT0gbnVsbCk7CgogICAgLy8gSXQgaXNuJ3Qgc2FmZSB0byBkbyB0eXBlIGluZmVyZW5jZSBvbiBhbiBleHByZXNzaW9uIHdpdGhvdXQgYSBwYXJlbnQsCiAgICAvLyBiZWNhdXNlIHR5cGUgaW5mZXJlbmNlIG1pZ2h0IGNhdXNlIHVzIHRvIGhhdmUgdG8gcmVwbGFjZSBvbmUgZXhwcmVzc2lvbgogICAgLy8gd2l0aCBhbm90aGVyLCBhbmQgd2UgY2FuIG9ubHkgcmVwbGFjZSBhIG5vZGUgaWYgaXQgaGFzIGEgcGFyZW50IHBvaW50ZXIuCiAgICBhc3NlcnQoZXhwcmVzc2lvbi5wYXJlbnQgIT0gbnVsbCk7CgogICAgLy8gRm9yIGZ1bGwgKG5vbi10b3AgbGV2ZWwpIGluZmVyZW5jZSwgd2UgbmVlZCBhY2Nlc3MgdG8gdGhlCiAgICAvLyBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIHNvIHRoYXQgd2UgY2FuIHBlcmZvcm0gZXJyb3IgcmVjb3ZlcnkuCiAgICBhc3NlcnQoaXNUb3BMZXZlbCB8fCBoZWxwZXIgIT0gbnVsbCk7CgogICAgLy8gV2hlbiBkb2luZyB0b3AgbGV2ZWwgaW5mZXJlbmNlLCB3ZSBza2lwIHN1YmV4cHJlc3Npb25zIHdob3NlIHR5cGUgaXNuJ3QKICAgIC8vIG5lZWRlZCBzbyB0aGF0IHdlIGRvbid0IGluZHVjZSBib2d1cyBkZXBlbmRlbmNpZXMgb24gZmllbGRzIG1lbnRpb25lZCBpbgogICAgLy8gdGhvc2Ugc3ViZXhwcmVzc2lvbnMuCiAgICBpZiAoIXR5cGVOZWVkZWQpIHJldHVybiBjb25zdCBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0KG51bGwpOwoKICAgIEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciA9IG5ldyBJbmZlcmVuY2VWaXNpdG9yKHRoaXMpOwogICAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCByZXN1bHQ7CiAgICBpZiAoZXhwcmVzc2lvbiBpcyBFeHByZXNzaW9uSnVkZ21lbnQpIHsKICAgICAgcmVzdWx0ID0gZXhwcmVzc2lvbi5hY2NlcHRJbmZlcmVuY2UodmlzaXRvciwgdHlwZUNvbnRleHQpOwogICAgfSBlbHNlIHsKICAgICAgcmVzdWx0ID0gZXhwcmVzc2lvbi5hY2NlcHQxKHZpc2l0b3IsIHR5cGVDb250ZXh0KTsKICAgIH0KICAgIERhcnRUeXBlIGluZmVycmVkVHlwZSA9IHJlc3VsdC5pbmZlcnJlZFR5cGU7CiAgICBhc3NlcnQoaW5mZXJyZWRUeXBlICE9IG51bGwsICJObyB0eXBlIGluZmVycmVkIGZvciAkZXhwcmVzc2lvbi4iKTsKICAgIGlmIChpbmZlcnJlZFR5cGUgaXMgVm9pZFR5cGUgJiYgIWlzVm9pZEFsbG93ZWQpIHsKICAgICAgaWYgKGV4cHJlc3Npb24ucGFyZW50IGlzISBBcmd1bWVudHNKdWRnbWVudCkgewogICAgICAgIGhlbHBlcj8uYWRkUHJvYmxlbSgKICAgICAgICAgICAgbWVzc2FnZVZvaWRFeHByZXNzaW9uLCBleHByZXNzaW9uLmZpbGVPZmZzZXQsIG5vTGVuZ3RoKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaW5mZXJJbml0aWFsaXplcigKICAgICAgSW5mZXJlbmNlSGVscGVyIGhlbHBlciwga2VybmVsLkluaXRpYWxpemVyIGluaXRpYWxpemVyKSB7CiAgICBhc3NlcnQoaW5pdGlhbGl6ZXIgaXMgSW5pdGlhbGl6ZXJKdWRnbWVudCk7CiAgICB0aGlzLmhlbHBlciA9IGhlbHBlcjsKICAgIC8vIFVzZSBwb2x5bW9ycGhpYyBkaXNwYXRjaCBvbiBbS2VybmVsSW5pdGlhbGl6ZXJdIHRvIHBlcmZvcm0gd2hhdGV2ZXIKICAgIC8vIGtpbmQgb2YgdHlwZSBpbmZlcmVuY2UgaXMgY29ycmVjdCBmb3IgdGhpcyBraW5kIG9mIGluaXRpYWxpemVyLgogICAgLy8gVE9ETyhwYXVsYmVycnkpOiBleHBlcmltZW50IHRvIHNlZSBpZiBkeW5hbWljIGRpc3BhdGNoIHdvdWxkIGJlIGJldHRlciwKICAgIC8vIHNvIHRoYXQgdGhlIHR5cGUgaGllcmFyY2h5IHdpbGwgYmUgc2ltcGxlciAod2hpY2ggbWF5IHNwZWVkIHVwICJpcyIKICAgIC8vIGNoZWNrcykuCiAgICBJbml0aWFsaXplckp1ZGdtZW50IGtlcm5lbEluaXRpYWxpemVyID0gaW5pdGlhbGl6ZXI7CiAgICBrZXJuZWxJbml0aWFsaXplci5hY2NlcHRJbmZlcmVuY2UobmV3IEluZmVyZW5jZVZpc2l0b3IodGhpcykpOwogICAgdGhpcy5oZWxwZXIgPSBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBpbmZlclN0YXRlbWVudChTdGF0ZW1lbnQgc3RhdGVtZW50KSB7CiAgICAvLyBGb3IgZnVsbCAobm9uLXRvcCBsZXZlbCkgaW5mZXJlbmNlLCB3ZSBuZWVkIGFjY2VzcyB0byB0aGUKICAgIC8vIEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgc28gdGhhdCB3ZSBjYW4gcGVyZm9ybSBlcnJvciByZWNvdmVyeS4KICAgIGlmICghaXNUb3BMZXZlbCkgYXNzZXJ0KGhlbHBlciAhPSBudWxsKTsKCiAgICBpZiAoc3RhdGVtZW50IGlzIFN0YXRlbWVudEp1ZGdtZW50KSB7CiAgICAgIC8vIFVzZSBwb2x5bW9ycGhpYyBkaXNwYXRjaCBvbiBbS2VybmVsU3RhdGVtZW50XSB0byBwZXJmb3JtIHdoYXRldmVyIGtpbmQKICAgICAgLy8gb2YgdHlwZSBpbmZlcmVuY2UgaXMgY29ycmVjdCBmb3IgdGhpcyBraW5kIG9mIHN0YXRlbWVudC4KICAgICAgLy8gVE9ETyhwYXVsYmVycnkpOiBleHBlcmltZW50IHRvIHNlZSBpZiBkeW5hbWljIGRpc3BhdGNoIHdvdWxkIGJlIGJldHRlciwKICAgICAgLy8gc28gdGhhdCB0aGUgdHlwZSBoaWVyYXJjaHkgd2lsbCBiZSBzaW1wbGVyICh3aGljaCBtYXkgc3BlZWQgdXAgImlzIgogICAgICAvLyBjaGVja3MpLgogICAgICByZXR1cm4gc3RhdGVtZW50LmFjY2VwdEluZmVyZW5jZShuZXcgSW5mZXJlbmNlVmlzaXRvcih0aGlzKSk7CiAgICB9IGVsc2UgaWYgKHN0YXRlbWVudCBpcyBGb3JJblN0YXRlbWVudCkgewogICAgICByZXR1cm4gc3RhdGVtZW50LmFjY2VwdDEobmV3IEluZmVyZW5jZVZpc2l0b3IodGhpcyksIG51bGwpOwogICAgfSBlbHNlIGlmIChzdGF0ZW1lbnQgaXMgTGFiZWxlZFN0YXRlbWVudCkgewogICAgICByZXR1cm4gc3RhdGVtZW50LmFjY2VwdDEobmV3IEluZmVyZW5jZVZpc2l0b3IodGhpcyksIG51bGwpOwogICAgfSBlbHNlIGlmIChzdGF0ZW1lbnQgaXMgQnJlYWtTdGF0ZW1lbnQpIHsKICAgICAgcmV0dXJuIHN0YXRlbWVudC5hY2NlcHQxKG5ldyBJbmZlcmVuY2VWaXNpdG9yKHRoaXMpLCBudWxsKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIEVuY291bnRlcmVkIGEgc3RhdGVtZW50IHR5cGUgZm9yIHdoaWNoIHR5cGUgaW5mZXJlbmNlIGlzIG5vdCB5ZXQKICAgICAgLy8gaW1wbGVtZW50ZWQsIHNvIGp1c3Qgc2tpcCBpdCBmb3Igbm93LgogICAgICAvLyBUT0RPKHBhdWxiZXJyeSk6IG9uY2UgdGhlIEJvZHlCdWlsZGVyIHVzZXMgc2hhZG93IGNsYXNzZXMgZm9yCiAgICAgIC8vIGV2ZXJ5dGhpbmcsIHRoaXMgY2FzZSBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lZWRlZC4KICAgIH0KICB9Cn0KCmNsYXNzIFR5cGVMaXRlcmFsSnVkZ21lbnQgZXh0ZW5kcyBUeXBlTGl0ZXJhbCBpbXBsZW1lbnRzIEV4cHJlc3Npb25KdWRnbWVudCB7CiAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwoKICBUeXBlTGl0ZXJhbEp1ZGdtZW50KERhcnRUeXBlIHR5cGUpIDogc3VwZXIodHlwZSk7CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgYWNjZXB0SW5mZXJlbmNlKAogICAgICBJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFR5cGVMaXRlcmFsSnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIFtUeXBlUHJvbW90ZXJdIHNwZWNpYWxpemVkIHRvIHdvcmsgd2l0aCBrZXJuZWwKLy8vIG9iamVjdHMuCmNsYXNzIFNoYWRvd1R5cGVQcm9tb3RlciBleHRlbmRzIFR5cGVQcm9tb3RlckltcGwgewogIFNoYWRvd1R5cGVQcm9tb3Rlci5wcml2YXRlKFR5cGVTY2hlbWFFbnZpcm9ubWVudCB0eXBlU2NoZW1hRW52aXJvbm1lbnQpCiAgICAgIDogc3VwZXIucHJpdmF0ZSh0eXBlU2NoZW1hRW52aXJvbm1lbnQpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0VmFyaWFibGVGdW5jdGlvbk5lc3RpbmdMZXZlbChWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKSB7CiAgICBpZiAodmFyaWFibGUgaXMgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50KSB7CiAgICAgIHJldHVybiB2YXJpYWJsZS5fZnVuY3Rpb25OZXN0aW5nTGV2ZWw7CiAgICB9IGVsc2UgewogICAgICAvLyBIYWNrIHRvIGRlYWwgd2l0aCB0aGUgZmFjdCB0aGF0IEJvZHlCdWlsZGVyIHN0aWxsIGNyZWF0ZXMgcmF3CiAgICAgIC8vIFZhcmlhYmxlRGVjbGFyYXRpb24gb2JqZWN0cyBzb21ldGltZXMuCiAgICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogZ2V0IHJpZCBvZiB0aGlzIG9uY2UgdGhlIHR5cGUgcGFyYW1ldGVyIGlzCiAgICAgIC8vIEtlcm5lbFZhcmlhYmxlRGVjbGFyYXRpb24uCiAgICAgIHJldHVybiAwOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1Byb21vdGlvbkNhbmRpZGF0ZShWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKSB7CiAgICBhc3NlcnQodmFyaWFibGUgaXMgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50KTsKICAgIFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudCBrZXJuZWxWYXJpYWJsZURlY2xhcmF0aW9uID0gdmFyaWFibGU7CiAgICByZXR1cm4gIWtlcm5lbFZhcmlhYmxlRGVjbGFyYXRpb24uX2lzTG9jYWxGdW5jdGlvbjsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgc2FtZUV4cHJlc3Npb25zKEV4cHJlc3Npb24gYSwgRXhwcmVzc2lvbiBiKSB7CiAgICByZXR1cm4gaWRlbnRpY2FsKGEsIGIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXRWYXJpYWJsZU11dGF0ZWRBbnl3aGVyZShWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKSB7CiAgICBpZiAodmFyaWFibGUgaXMgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50KSB7CiAgICAgIHZhcmlhYmxlLl9tdXRhdGVkQW55d2hlcmUgPSB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgLy8gSGFjayB0byBkZWFsIHdpdGggdGhlIGZhY3QgdGhhdCBCb2R5QnVpbGRlciBzdGlsbCBjcmVhdGVzIHJhdwogICAgICAvLyBWYXJpYWJsZURlY2xhcmF0aW9uIG9iamVjdHMgc29tZXRpbWVzLgogICAgICAvLyBUT0RPKHBhdWxiZXJyeSk6IGdldCByaWQgb2YgdGhpcyBvbmNlIHRoZSB0eXBlIHBhcmFtZXRlciBpcwogICAgICAvLyBLZXJuZWxWYXJpYWJsZURlY2xhcmF0aW9uLgogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXRWYXJpYWJsZU11dGF0ZWRJbkNsb3N1cmUoVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSkgewogICAgaWYgKHZhcmlhYmxlIGlzIFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudCkgewogICAgICB2YXJpYWJsZS5fbXV0YXRlZEluQ2xvc3VyZSA9IHRydWU7CiAgICB9IGVsc2UgewogICAgICAvLyBIYWNrIHRvIGRlYWwgd2l0aCB0aGUgZmFjdCB0aGF0IEJvZHlCdWlsZGVyIHN0aWxsIGNyZWF0ZXMgcmF3CiAgICAgIC8vIFZhcmlhYmxlRGVjbGFyYXRpb24gb2JqZWN0cyBzb21ldGltZXMuCiAgICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogZ2V0IHJpZCBvZiB0aGlzIG9uY2UgdGhlIHR5cGUgcGFyYW1ldGVyIGlzCiAgICAgIC8vIEtlcm5lbFZhcmlhYmxlRGVjbGFyYXRpb24uCiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHdhc1ZhcmlhYmxlTXV0YXRlZEFueXdoZXJlKFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUpIHsKICAgIGlmICh2YXJpYWJsZSBpcyBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQpIHsKICAgICAgcmV0dXJuIHZhcmlhYmxlLl9tdXRhdGVkQW55d2hlcmU7CiAgICB9IGVsc2UgewogICAgICAvLyBIYWNrIHRvIGRlYWwgd2l0aCB0aGUgZmFjdCB0aGF0IEJvZHlCdWlsZGVyIHN0aWxsIGNyZWF0ZXMgcmF3CiAgICAgIC8vIFZhcmlhYmxlRGVjbGFyYXRpb24gb2JqZWN0cyBzb21ldGltZXMuCiAgICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogZ2V0IHJpZCBvZiB0aGlzIG9uY2UgdGhlIHR5cGUgcGFyYW1ldGVyIGlzCiAgICAgIC8vIEtlcm5lbFZhcmlhYmxlRGVjbGFyYXRpb24uCiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KfQoKY2xhc3MgVmFyaWFibGVBc3NpZ25tZW50SnVkZ21lbnQgZXh0ZW5kcyBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IHsKICBWYXJpYWJsZUFzc2lnbm1lbnRKdWRnbWVudC5fKEV4cHJlc3Npb24gcmhzKSA6IHN1cGVyLl8ocmhzKTsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCBhY2NlcHRJbmZlcmVuY2UoCiAgICAgIEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0VmFyaWFibGVBc3NpZ25tZW50SnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgdmFyaWFibGUgZGVjbGFyYXRpb24gaW4ga2VybmVsIGZvcm0uCmNsYXNzIFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudCBleHRlbmRzIFZhcmlhYmxlRGVjbGFyYXRpb24KICAgIGltcGxlbWVudHMgU3RhdGVtZW50SnVkZ21lbnQgewogIGZpbmFsIGJvb2wgZm9yU3ludGhldGljVG9rZW47CgogIGZpbmFsIGJvb2wgX2ltcGxpY2l0bHlUeXBlZDsKCiAgLy8gVE9ETyhhaGUpOiBSZW1vdmUgdGhpcyBmaWVsZC4gV2UgY2FuIGdldCByaWQgb2YgaXQgYnkgcmVjb3JkaW5nIGNsb3N1cmUKICAvLyBtdXRhdGlvbiBpbiBbQm9keUJ1aWxkZXJdLgogIGZpbmFsIGludCBfZnVuY3Rpb25OZXN0aW5nTGV2ZWw7CgogIC8vIFRPRE8oYWhlKTogUmVtb3ZlIHRoaXMgZmllbGQuIEl0J3Mgb25seSB1c2VkIGxvY2FsbHkgd2hlbiBjb21waWxpbmcgYQogIC8vIG1ldGhvZCwgYW5kIHRoaXMgY2FuIHRodXMgYmUgdHJhY2tlZCBpbiBhIFtTZXRdIChhY3R1YWxseSwgdHJhY2tpbmcgdGhpcwogIC8vIGluZm9ybWF0aW9uIGluIGEgW0xpc3RdIGlzIHByb2JhYmx5IGV2ZW4gZmFzdGVyIGFzIHRoZSBhdmVyYWdlIHNpemUgd2lsbAogIC8vIGJlIGNsb3NlIHRvIHplcm8pLgogIGJvb2wgX211dGF0ZWRJbkNsb3N1cmUgPSBmYWxzZTsKCiAgLy8gVE9ETyhhaGUpOiBJbnZlc3RpZ2F0ZSBpZiB0aGlzIGNhbiBiZSByZW1vdmVkLgogIGJvb2wgX211dGF0ZWRBbnl3aGVyZSA9IGZhbHNlOwoKICAvLyBUT0RPKGFoZSk6IEludmVzdGlnYXRlIGlmIHRoaXMgY2FuIGJlIHJlbW92ZWQuCiAgZmluYWwgYm9vbCBfaXNMb2NhbEZ1bmN0aW9uOwoKICBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQoU3RyaW5nIG5hbWUsIHRoaXMuX2Z1bmN0aW9uTmVzdGluZ0xldmVsLAogICAgICB7dGhpcy5mb3JTeW50aGV0aWNUb2tlbjogZmFsc2UsCiAgICAgIEV4cHJlc3Npb24gaW5pdGlhbGl6ZXIsCiAgICAgIERhcnRUeXBlIHR5cGUsCiAgICAgIGJvb2wgaXNGaW5hbDogZmFsc2UsCiAgICAgIGJvb2wgaXNDb25zdDogZmFsc2UsCiAgICAgIGJvb2wgaXNGaWVsZEZvcm1hbDogZmFsc2UsCiAgICAgIGJvb2wgaXNDb3ZhcmlhbnQ6IGZhbHNlLAogICAgICBib29sIGlzTG9jYWxGdW5jdGlvbjogZmFsc2UsCiAgICAgIGJvb2wgaXNMYXRlOiBmYWxzZSwKICAgICAgYm9vbCBpc1JlcXVpcmVkOiBmYWxzZX0pCiAgICAgIDogX2ltcGxpY2l0bHlUeXBlZCA9IHR5cGUgPT0gbnVsbCwKICAgICAgICBfaXNMb2NhbEZ1bmN0aW9uID0gaXNMb2NhbEZ1bmN0aW9uLAogICAgICAgIHN1cGVyKG5hbWUsCiAgICAgICAgICAgIGluaXRpYWxpemVyOiBpbml0aWFsaXplciwKICAgICAgICAgICAgdHlwZTogdHlwZSA/PyBjb25zdCBEeW5hbWljVHlwZSgpLAogICAgICAgICAgICBpc0ZpbmFsOiBpc0ZpbmFsLAogICAgICAgICAgICBpc0NvbnN0OiBpc0NvbnN0LAogICAgICAgICAgICBpc0ZpZWxkRm9ybWFsOiBpc0ZpZWxkRm9ybWFsLAogICAgICAgICAgICBpc0NvdmFyaWFudDogaXNDb3ZhcmlhbnQsCiAgICAgICAgICAgIGlzTGF0ZTogaXNMYXRlLAogICAgICAgICAgICBpc1JlcXVpcmVkOiBpc1JlcXVpcmVkKTsKCiAgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50LmZvckVmZmVjdCgKICAgICAgRXhwcmVzc2lvbiBpbml0aWFsaXplciwgdGhpcy5fZnVuY3Rpb25OZXN0aW5nTGV2ZWwpCiAgICAgIDogZm9yU3ludGhldGljVG9rZW4gPSBmYWxzZSwKICAgICAgICBfaW1wbGljaXRseVR5cGVkID0gZmFsc2UsCiAgICAgICAgX2lzTG9jYWxGdW5jdGlvbiA9IGZhbHNlLAogICAgICAgIHN1cGVyLmZvclZhbHVlKGluaXRpYWxpemVyKTsKCiAgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50LmZvclZhbHVlKEV4cHJlc3Npb24gaW5pdGlhbGl6ZXIpCiAgICAgIDogZm9yU3ludGhldGljVG9rZW4gPSBmYWxzZSwKICAgICAgICBfZnVuY3Rpb25OZXN0aW5nTGV2ZWwgPSAwLAogICAgICAgIF9pbXBsaWNpdGx5VHlwZWQgPSB0cnVlLAogICAgICAgIF9pc0xvY2FsRnVuY3Rpb24gPSBmYWxzZSwKICAgICAgICBzdXBlci5mb3JWYWx1ZShpbml0aWFsaXplcik7CgogIEV4cHJlc3Npb24gZ2V0IGluaXRpYWxpemVySnVkZ21lbnQgPT4gaW5pdGlhbGl6ZXI7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQodGhpcyk7CiAgfQoKICAvLy8gRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGdpdmVuIFtWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnRdIGhhZCBhbiBpbXBsaWNpdAogIC8vLyB0eXBlLgogIC8vLwogIC8vLyBUaGlzIGlzIHN0YXRpYyB0byBhdm9pZCBpbnRyb2R1Y2luZyBhIG1ldGhvZCB0aGF0IHdvdWxkIGJlIHZpc2libGUgdG8KICAvLy8gdGhlIGtlcm5lbC4KICBzdGF0aWMgYm9vbCBpc0ltcGxpY2l0bHlUeXBlZChWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQgdmFyaWFibGUpID0+CiAgICAgIHZhcmlhYmxlLl9pbXBsaWNpdGx5VHlwZWQ7CgogIC8vLyBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGdpdmVuIFtWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnRdIHJlcHJlc2VudHMgYQogIC8vLyBsb2NhbCBmdW5jdGlvbi4KICAvLy8KICAvLy8gVGhpcyBpcyBzdGF0aWMgdG8gYXZvaWQgaW50cm9kdWNpbmcgYSBtZXRob2QgdGhhdCB3b3VsZCBiZSB2aXNpYmxlIHRvIHRoZQogIC8vLyBrZXJuZWwuCiAgc3RhdGljIGJvb2wgaXNMb2NhbEZ1bmN0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudCB2YXJpYWJsZSkgPT4KICAgICAgdmFyaWFibGUuX2lzTG9jYWxGdW5jdGlvbjsKfQoKLy8vIFN5bnRoZXRpYyBqdWRnbWVudCBjbGFzcyByZXByZXNlbnRpbmcgYW4gYXR0ZW1wdCB0byBpbnZva2UgYW4gdW5yZXNvbHZlZAovLy8gdGFyZ2V0LgpjbGFzcyBVbnJlc29sdmVkVGFyZ2V0SW52b2NhdGlvbkp1ZGdtZW50IGV4dGVuZHMgU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50IHsKICBmaW5hbCBBcmd1bWVudHNKdWRnbWVudCBhcmd1bWVudHNKdWRnbWVudDsKCiAgVW5yZXNvbHZlZFRhcmdldEludm9jYXRpb25KdWRnbWVudC5fKAogICAgICBrZXJuZWwuRXhwcmVzc2lvbiBkZXN1Z2FyZWQsIHRoaXMuYXJndW1lbnRzSnVkZ21lbnQpCiAgICAgIDogc3VwZXIuXyhkZXN1Z2FyZWQpOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IGFjY2VwdEluZmVyZW5jZSgKICAgICAgSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRVbnJlc29sdmVkVGFyZ2V0SW52b2NhdGlvbkp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBTeW50aGV0aWMganVkZ21lbnQgY2xhc3MgcmVwcmVzZW50aW5nIGFuIGF0dGVtcHQgdG8gYXNzaWduIHRvIGFuIHVucmVzb2x2ZWQKLy8vIHZhcmlhYmxlLgpjbGFzcyBVbnJlc29sdmVkVmFyaWFibGVBc3NpZ25tZW50SnVkZ21lbnQgZXh0ZW5kcyBTeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnQgewogIGZpbmFsIGJvb2wgaXNDb21wb3VuZDsKICBmaW5hbCBFeHByZXNzaW9uIHJoczsKCiAgVW5yZXNvbHZlZFZhcmlhYmxlQXNzaWdubWVudEp1ZGdtZW50Ll8oCiAgICAgIGtlcm5lbC5FeHByZXNzaW9uIGRlc3VnYXJlZCwgdGhpcy5pc0NvbXBvdW5kLCB0aGlzLnJocykKICAgICAgOiBzdXBlci5fKGRlc3VnYXJlZCk7CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgYWNjZXB0SW5mZXJlbmNlKAogICAgICBJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFVucmVzb2x2ZWRWYXJpYWJsZUFzc2lnbm1lbnRKdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYSByZWFkIGZyb20gYSB2YXJpYWJsZSBpbiBrZXJuZWwgZm9ybS4KY2xhc3MgVmFyaWFibGVHZXRKdWRnbWVudCBleHRlbmRzIFZhcmlhYmxlR2V0IGltcGxlbWVudHMgRXhwcmVzc2lvbkp1ZGdtZW50IHsKICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CgogIGZpbmFsIFR5cGVQcm9tb3Rpb25GYWN0IF9mYWN0OwoKICBmaW5hbCBUeXBlUHJvbW90aW9uU2NvcGUgX3Njb3BlOwoKICBWYXJpYWJsZUdldEp1ZGdtZW50KFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIHRoaXMuX2ZhY3QsIHRoaXMuX3Njb3BlKQogICAgICA6IHN1cGVyKHZhcmlhYmxlKTsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCBhY2NlcHRJbmZlcmVuY2UoCiAgICAgIEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0VmFyaWFibGVHZXRKdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYSB3aGlsZSBsb29wIGluIGtlcm5lbCBmb3JtLgpjbGFzcyBXaGlsZUp1ZGdtZW50IGV4dGVuZHMgV2hpbGVTdGF0ZW1lbnQgaW1wbGVtZW50cyBTdGF0ZW1lbnRKdWRnbWVudCB7CiAgV2hpbGVKdWRnbWVudChFeHByZXNzaW9uIGNvbmRpdGlvbiwgU3RhdGVtZW50IGJvZHkpIDogc3VwZXIoY29uZGl0aW9uLCBib2R5KTsKCiAgRXhwcmVzc2lvbiBnZXQgY29uZGl0aW9uSnVkZ21lbnQgPT4gY29uZGl0aW9uOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0V2hpbGVKdWRnbWVudCh0aGlzKTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIHlpZWxkIHN0YXRlbWVudCBpbiBrZXJuZWwgZm9ybS4KY2xhc3MgWWllbGRKdWRnbWVudCBleHRlbmRzIFlpZWxkU3RhdGVtZW50IGltcGxlbWVudHMgU3RhdGVtZW50SnVkZ21lbnQgewogIFlpZWxkSnVkZ21lbnQoYm9vbCBpc1lpZWxkU3RhciwgRXhwcmVzc2lvbiBleHByZXNzaW9uKQogICAgICA6IHN1cGVyKGV4cHJlc3Npb24sIGlzWWllbGRTdGFyOiBpc1lpZWxkU3Rhcik7CgogIEV4cHJlc3Npb24gZ2V0IGp1ZGdtZW50ID0+IGV4cHJlc3Npb247CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRZaWVsZEp1ZGdtZW50KHRoaXMpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgZGVmZXJyZWQgbG9hZCBsaWJyYXJ5IGNhbGwuCmNsYXNzIExvYWRMaWJyYXJ5SnVkZ21lbnQgZXh0ZW5kcyBMb2FkTGlicmFyeSBpbXBsZW1lbnRzIEV4cHJlc3Npb25KdWRnbWVudCB7CiAgZmluYWwgQXJndW1lbnRzIGFyZ3VtZW50czsKCiAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwoKICBMb2FkTGlicmFyeUp1ZGdtZW50KExpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCwgdGhpcy5hcmd1bWVudHMpIDogc3VwZXIoaW1wb3J0KTsKCiAgQXJndW1lbnRzSnVkZ21lbnQgZ2V0IGFyZ3VtZW50SnVkZ21lbnRzID0+IGFyZ3VtZW50czsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCBhY2NlcHRJbmZlcmVuY2UoCiAgICAgIEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0TG9hZExpYnJhcnlKdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYSB0ZWFyLW9mZiBvZiBhIGBsb2FkTGlicmFyeWAgZnVuY3Rpb24uCmNsYXNzIExvYWRMaWJyYXJ5VGVhck9mZkp1ZGdtZW50IGV4dGVuZHMgU3RhdGljR2V0CiAgICBpbXBsZW1lbnRzIEV4cHJlc3Npb25KdWRnbWVudCB7CiAgZmluYWwgTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0OwoKICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CgogIExvYWRMaWJyYXJ5VGVhck9mZkp1ZGdtZW50KHRoaXMuaW1wb3J0LCBQcm9jZWR1cmUgdGFyZ2V0KSA6IHN1cGVyKHRhcmdldCk7CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgYWNjZXB0SW5mZXJlbmNlKAogICAgICBJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdExvYWRMaWJyYXJ5VGVhck9mZkp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBUaGUgcmVzdWx0IG9mIGluZmVyZW5jZSBmb3IgYSBSSFMgb2YgYW4gYXNzaWdubWVudC4KY2xhc3MgX0NvbXBsZXhBc3NpZ25tZW50SW5mZXJlbmNlUmVzdWx0IHsKICAvLy8gVGhlIHJlc29sdmVkIGNvbWJpbmVyIFtQcm9jZWR1cmVdLCBlLmcuIGBvcGVyYXRvcitgIGZvciBgYSArPSAyYCwgb3IKICAvLy8gYG51bGxgIGlmIHRoZSBhc3NpZ25tZW50IGlzIG5vdCBjb21wb3VuZC4KICBmaW5hbCBQcm9jZWR1cmUgY29tYmluZXI7CgogIC8vLyBUaGUgaW5mZXJyZWQgdHlwZSBvZiB0aGUgUkhTLgogIGZpbmFsIERhcnRUeXBlIGluZmVycmVkVHlwZTsKCiAgX0NvbXBsZXhBc3NpZ25tZW50SW5mZXJlbmNlUmVzdWx0KHRoaXMuY29tYmluZXIsIHRoaXMuaW5mZXJyZWRUeXBlKTsKfQoKY2xhc3MgX1VuZmluaXNoZWRDYXNjYWRlIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgYWNjZXB0KHYpID0+IHVuc3VwcG9ydGVkKCJhY2NlcHQiLCAtMSwgbnVsbCk7CgogIGFjY2VwdDEodiwgYXJnKSA9PiB1bnN1cHBvcnRlZCgiYWNjZXB0MSIsIC0xLCBudWxsKTsKCiAgZ2V0U3RhdGljVHlwZSh0eXBlcykgPT4gdW5zdXBwb3J0ZWQoImdldFN0YXRpY1R5cGUiLCAtMSwgbnVsbCk7CgogIHRyYW5zZm9ybUNoaWxkcmVuKHYpID0+IHVuc3VwcG9ydGVkKCJ0cmFuc2Zvcm1DaGlsZHJlbiIsIC0xLCBudWxsKTsKCiAgdmlzaXRDaGlsZHJlbih2KSA9PiB1bnN1cHBvcnRlZCgidmlzaXRDaGlsZHJlbiIsIC0xLCBudWxsKTsKfQoKY2xhc3MgU3ludGhldGljV3JhcHBlciB7CiAgc3RhdGljIEV4cHJlc3Npb24gd3JhcElsbGVnYWxBc3NpZ25tZW50KEV4cHJlc3Npb24gcmhzLAogICAgICB7aW50IGFzc2lnbm1lbnRPZmZzZXQ6IC0xfSkgewogICAgcmV0dXJuIG5ldyBJbGxlZ2FsQXNzaWdubWVudEp1ZGdtZW50Ll8ocmhzLAogICAgICAgIGFzc2lnbm1lbnRPZmZzZXQ6IGFzc2lnbm1lbnRPZmZzZXQpCiAgICAgIC4uZmlsZU9mZnNldCA9IHJocy5maWxlT2Zmc2V0OwogIH0KCiAgc3RhdGljIEV4cHJlc3Npb24gd3JhcEluZGV4QXNzaWdubWVudCgKICAgICAgRXhwcmVzc2lvbiByZWNlaXZlciwgRXhwcmVzc2lvbiBpbmRleCwgRXhwcmVzc2lvbiByaHMsCiAgICAgIHtib29sIGlzU3VwZXI6IGZhbHNlfSkgewogICAgcmV0dXJuIG5ldyBJbmRleEFzc2lnbm1lbnRKdWRnbWVudC5fKHJlY2VpdmVyLCBpbmRleCwgcmhzLCBpc1N1cGVyOiBpc1N1cGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBpbmRleC5maWxlT2Zmc2V0OwogIH0KCiAgc3RhdGljIEV4cHJlc3Npb24gd3JhcEludmFsaWRDb25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgIGtlcm5lbC5FeHByZXNzaW9uIGRlc3VnYXJlZCwgTWVtYmVyIGNvbnN0cnVjdG9yLCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IEludmFsaWRDb25zdHJ1Y3Rvckludm9jYXRpb25KdWRnbWVudC5fKAogICAgICAgIGRlc3VnYXJlZCwgY29uc3RydWN0b3IsIGFyZ3VtZW50cykKICAgICAgLi5maWxlT2Zmc2V0ID0gZGVzdWdhcmVkLmZpbGVPZmZzZXQ7CiAgfQoKICBzdGF0aWMgRXhwcmVzc2lvbiB3cmFwSW52YWxpZFdyaXRlKAogICAgICBFeHByZXNzaW9uIGRlc3VnYXJlZCwgRXhwcmVzc2lvbiBleHByZXNzaW9uKSB7CiAgICByZXR1cm4gbmV3IEludmFsaWRXcml0ZUp1ZGdtZW50Ll8oZGVzdWdhcmVkLCBleHByZXNzaW9uKQogICAgICAuLmZpbGVPZmZzZXQgPSBkZXN1Z2FyZWQuZmlsZU9mZnNldDsKICB9CgogIHN0YXRpYyBFeHByZXNzaW9uIHdyYXBQcm9wZXJ0eUFzc2lnbm1lbnQoRXhwcmVzc2lvbiByZWNlaXZlciwgRXhwcmVzc2lvbiByaHMsCiAgICAgIHtib29sIGlzU3VwZXI6IGZhbHNlfSkgewogICAgcmV0dXJuIG5ldyBQcm9wZXJ0eUFzc2lnbm1lbnRKdWRnbWVudC5fKHJlY2VpdmVyLCByaHMsIGlzU3VwZXI6IGlzU3VwZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IHJocy5maWxlT2Zmc2V0OwogIH0KCiAgc3RhdGljIEV4cHJlc3Npb24gd3JhcFN0YXRpY0Fzc2lnbm1lbnQoRXhwcmVzc2lvbiByaHMpIHsKICAgIHJldHVybiBuZXcgU3RhdGljQXNzaWdubWVudEp1ZGdtZW50Ll8ocmhzKS4uZmlsZU9mZnNldCA9IHJocy5maWxlT2Zmc2V0OwogIH0KCiAgc3RhdGljIEV4cHJlc3Npb24gd3JhcFN5bnRoZXRpY0V4cHJlc3Npb24oRXhwcmVzc2lvbiBkZXN1Z2FyZWQpIHsKICAgIHJldHVybiBuZXcgU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50Ll8oZGVzdWdhcmVkKQogICAgICAuLmZpbGVPZmZzZXQgPSBkZXN1Z2FyZWQuZmlsZU9mZnNldDsKICB9CgogIHN0YXRpYyBFeHByZXNzaW9uIHdyYXBVbnJlc29sdmVkVGFyZ2V0SW52b2NhdGlvbigKICAgICAgRXhwcmVzc2lvbiBkZXN1Z2FyZWQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBuZXcgVW5yZXNvbHZlZFRhcmdldEludm9jYXRpb25KdWRnbWVudC5fKGRlc3VnYXJlZCwgYXJndW1lbnRzKQogICAgICAuLmZpbGVPZmZzZXQgPSBkZXN1Z2FyZWQuZmlsZU9mZnNldDsKICB9CgogIHN0YXRpYyBFeHByZXNzaW9uIHdyYXBVbnJlc29sdmVkVmFyaWFibGVBc3NpZ25tZW50KAogICAgICBFeHByZXNzaW9uIGRlc3VnYXJlZCwgYm9vbCBpc0NvbXBvdW5kLCBFeHByZXNzaW9uIHJocykgewogICAgcmV0dXJuIG5ldyBVbnJlc29sdmVkVmFyaWFibGVBc3NpZ25tZW50SnVkZ21lbnQuXygKICAgICAgICBkZXN1Z2FyZWQsIGlzQ29tcG91bmQsIHJocykKICAgICAgLi5maWxlT2Zmc2V0ID0gZGVzdWdhcmVkLmZpbGVPZmZzZXQ7CiAgfQoKICBzdGF0aWMg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PiMgAR8BTSAjAUtOThgiATQhATQfAUcmHhUbGyEfIxofKSwUJi8eHiomHCUBKTojIiIlAT8jIyEiJQE1AQwzOwQBUAwGTBJJIQFOFgZQDkchAgFNDE8tASg7HAEMLThPBAIBUA5RGRgBKj4cAQwtOFEEAgFPThkBIQEjAU0ZAQwtOEAEAgFFSlABMQEMMy0EAgFKSjk1ASkBDDMtBAIBRk4dARkBUQE4AQwtOEAEAgFQMyQiARkBTQEMLThHBAIBOCpLMBwBJB8BRwIBLjABNwFCAUYBPgIBGTokMCwlBAEpPR9RJwQBNk43KysEASY1PSsEAVAfTSUEATtNBAFEOCsEATQzSisEATY/NyQrBAE9TwQCATlwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF9zaGFkb3dfYXN0LmRhcnRCc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC9pbmZlcmVuY2VfdmlzaXRvci5kYXJ0wAFgUS8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mICJrZXJuZWxfc2hhZG93X2FzdC5kYXJ0IjsKCmNsYXNzIEluZmVyZW5jZVZpc2l0b3IKICAgIGV4dGVuZHMgQm9keVZpc2l0b3IxPEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQsIERhcnRUeXBlPiB7CiAgZmluYWwgU2hhZG93VHlwZUluZmVycmVyIGluZmVycmVyOwoKICBDbGFzcyBtYXBFbnRyeUNsYXNzOwoKICAvLyBTdG9yZXMgdGhlIG9mZnNldCBvZiB0aGUgbWFwIGVudHJ5IGZvdW5kIGJ5IGluZmVyTWFwRW50cnkuCiAgaW50IG1hcEVudHJ5T2Zmc2V0ID0gbnVsbDsKCiAgLy8gU3RvcmVzIHRoZSBvZmZzZXQgb2YgdGhlIG1hcCBzcHJlYWQgZm91bmQgYnkgaW5mZXJNYXBFbnRyeS4KICBpbnQgbWFwU3ByZWFkT2Zmc2V0ID0gbnVsbDsKCiAgLy8gU3RvcmVzIHRoZSBvZmZzZXQgb2YgdGhlIGl0ZXJhYmxlIHNwcmVhZCBmb3VuZCBieSBpbmZlck1hcEVudHJ5LgogIGludCBpdGVyYWJsZVNwcmVhZE9mZnNldCA9IG51bGw7CgogIC8vIFN0b3JlcyB0aGUgdHlwZSBvZiB0aGUgaXRlcmFibGUgc3ByZWFkIGZvdW5kIGJ5IGluZmVyTWFwRW50cnkuCiAgRGFydFR5cGUgaXRlcmFibGVTcHJlYWRUeXBlID0gbnVsbDsKCiAgSW5mZXJlbmNlVmlzaXRvcih0aGlzLmluZmVycmVyKTsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCBkZWZhdWx0RXhwcmVzc2lvbigKICAgICAgRXhwcmVzc2lvbiBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgdW5oYW5kbGVkKCIke25vZGUucnVudGltZVR5cGV9IiwgIkluZmVyZW5jZVZpc2l0b3IiLCBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgaW5mZXJyZXIuaGVscGVyLnVyaSk7CiAgICByZXR1cm4gY29uc3QgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChjb25zdCBJbnZhbGlkVHlwZSgpKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgZGVmYXVsdFN0YXRlbWVudChTdGF0ZW1lbnQgbm9kZSwgXykgewogICAgdW5oYW5kbGVkKCIke25vZGUucnVudGltZVR5cGV9IiwgIkluZmVyZW5jZVZpc2l0b3IiLCBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgaW5mZXJyZXIuaGVscGVyLnVyaSk7CiAgICByZXR1cm4gY29uc3QgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChjb25zdCBJbnZhbGlkVHlwZSgpKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgdmlzaXRJbnZhbGlkRXhwcmVzc2lvbigKICAgICAgICAgIEludmFsaWRFeHByZXNzaW9uIG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSA9PgogICAgICBjb25zdCBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0KGNvbnN0IEJvdHRvbVR5cGUoKSk7CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgdmlzaXRJbnRMaXRlcmFsKAogICAgICAgICAgSW50TGl0ZXJhbCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgPT4KICAgICAgbmV3IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQoaW5mZXJyZXIuY29yZVR5cGVzLmludENsYXNzLnJhd1R5cGUpOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHZpc2l0RG91YmxlTGl0ZXJhbCgKICAgICAgICAgIERvdWJsZUxpdGVyYWwgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpID0+CiAgICAgIG5ldyBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0KGluZmVycmVyLmNvcmVUeXBlcy5kb3VibGVDbGFzcy5yYXdUeXBlKTsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCB2aXNpdEFzRXhwcmVzc2lvbigKICAgICAgQXNFeHByZXNzaW9uIG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgbm9kZS5vcGVyYW5kLCBjb25zdCBVbmtub3duVHlwZSgpLCAhaW5mZXJyZXIuaXNUb3BMZXZlbCwKICAgICAgICBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChub2RlLnR5cGUpOwogIH0KCiAgdm9pZCB2aXNpdEFzc2VydEluaXRpYWxpemVySnVkZ21lbnQoQXNzZXJ0SW5pdGlhbGl6ZXJKdWRnbWVudCBub2RlKSB7CiAgICBpbmZlcnJlci5pbmZlclN0YXRlbWVudChub2RlLmp1ZGdtZW50KTsKICB9CgogIHZvaWQgdmlzaXRBc3NlcnRTdGF0ZW1lbnRKdWRnbWVudChBc3NlcnRTdGF0ZW1lbnRKdWRnbWVudCBub2RlKSB7CiAgICBFeHByZXNzaW9uIGNvbmRpdGlvbkp1ZGdtZW50ID0gbm9kZS5jb25kaXRpb25KdWRnbWVudDsKICAgIEV4cHJlc3Npb24gbWVzc2FnZUp1ZGdtZW50ID0gbm9kZS5tZXNzYWdlSnVkZ21lbnQ7CiAgICBJbnRlcmZhY2VUeXBlIGV4cGVjdGVkVHlwZSA9IGluZmVycmVyLmNvcmVUeXBlcy5ib29sQ2xhc3MucmF3VHlwZTsKICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbigKICAgICAgICBjb25kaXRpb25KdWRnbWVudCwgZXhwZWN0ZWRUeXBlLCAhaW5mZXJyZXIuaXNUb3BMZXZlbCk7CiAgICBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKAogICAgICAgIGV4cGVjdGVkVHlwZSwKICAgICAgICBnZXRJbmZlcnJlZFR5cGUoY29uZGl0aW9uSnVkZ21lbnQsIGluZmVycmVyKSwKICAgICAgICBjb25kaXRpb25KdWRnbWVudCwKICAgICAgICBjb25kaXRpb25KdWRnbWVudC5maWxlT2Zmc2V0KTsKICAgIGlmIChtZXNzYWdlSnVkZ21lbnQgIT0gbnVsbCkgewogICAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgICBtZXNzYWdlSnVkZ21lbnQsIGNvbnN0IFVua25vd25UeXBlKCksICFpbmZlcnJlci5pc1RvcExldmVsKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgdmlzaXRBd2FpdEV4cHJlc3Npb24oCiAgICAgIEF3YWl0RXhwcmVzc2lvbiBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgaWYgKCFpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQuaXNFbXB0eUNvbnRleHQodHlwZUNvbnRleHQpKSB7CiAgICAgIHR5cGVDb250ZXh0ID0gaW5mZXJyZXIud3JhcEZ1dHVyZU9yVHlwZSh0eXBlQ29udGV4dCk7CiAgICB9CiAgICBFeHByZXNzaW9uIG9wZXJhbmQgPSBub2RlLm9wZXJhbmQ7CiAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24ob3BlcmFuZCwgdHlwZUNvbnRleHQsIHRydWUsIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlID0gaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50CiAgICAgICAgLnVuZnV0dXJlVHlwZShnZXRJbmZlcnJlZFR5cGUob3BlcmFuZCwgaW5mZXJyZXIpKTsKICAgIGluZmVycmVyLnN0b3JlSW5mZXJyZWRUeXBlKG5vZGUsIGluZmVycmVkVHlwZSk7CiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQoaW5mZXJyZWRUeXBlKTsKICB9CgogIHZvaWQgdmlzaXRCbG9ja0p1ZGdtZW50KEJsb2NrSnVkZ21lbnQgbm9kZSkgewogICAgZm9yIChTdGF0ZW1lbnQganVkZ21lbnQgaW4gbm9kZS5qdWRnbWVudHMpIHsKICAgICAgaW5mZXJyZXIuaW5mZXJTdGF0ZW1lbnQoanVkZ21lbnQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCB2aXNpdEJvb2xMaXRlcmFsKAogICAgICAgICAgQm9vbExpdGVyYWwgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpID0+CiAgICAgIG5ldyBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0KGluZmVycmVyLmNvcmVUeXBlcy5ib29sQ2xhc3MucmF3VHlwZSk7CgogIEBvdmVycmlkZQogIE51bGwgdmlzaXRCcmVha1N0YXRlbWVudChCcmVha1N0YXRlbWVudCBub2RlLCBfKSB7CiAgICAvLyBObyBpbmZlcmVuY2UgbmVlZHMgdG8gYmUgZG9uZS4KICB9CgogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgdmlzaXRDYXNjYWRlSnVkZ21lbnQoCiAgICAgIENhc2NhZGVKdWRnbWVudCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCByZXN1bHQgPQogICAgICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihub2RlLnRhcmdldEp1ZGdtZW50LCB0eXBlQ29udGV4dCwgdHJ1ZSk7CiAgICBub2RlLmluZmVycmVkVHlwZSA9IHJlc3VsdC5pbmZlcnJlZFR5cGU7CiAgICBub2RlLnZhcmlhYmxlLnR5cGUgPSBnZXRJbmZlcnJlZFR5cGUobm9kZSwgaW5mZXJyZXIpOwogICAgZm9yIChFeHByZXNzaW9uIGp1ZGdtZW50IGluIG5vZGUuY2FzY2FkZUp1ZGdtZW50cykgewogICAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgICBqdWRnbWVudCwgY29uc3QgVW5rbm93blR5cGUoKSwgIWluZmVycmVyLmlzVG9wTGV2ZWwsCiAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgIH0KICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChub2RlLmluZmVycmVkVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHZpc2l0Q29uZGl0aW9uYWxFeHByZXNzaW9uKAogICAgICBDb25kaXRpb25hbEV4cHJlc3Npb24gbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIEV4cHJlc3Npb24gY29uZGl0aW9uID0gbm9kZS5jb25kaXRpb247CiAgICBFeHByZXNzaW9uIHRoZW4gPSBub2RlLnRoZW47CiAgICBFeHByZXNzaW9uIG90aGVyd2lzZSA9IG5vZGUub3RoZXJ3aXNlOwogICAgSW50ZXJmYWNlVHlwZSBleHBlY3RlZFR5cGUgPSBpbmZlcnJlci5jb3JlVHlwZXMuYm9vbENsYXNzLnJhd1R5cGU7CiAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oY29uZGl0aW9uLCBleHBlY3RlZFR5cGUsICFpbmZlcnJlci5pc1RvcExldmVsKTsKICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoCiAgICAgICAgZXhwZWN0ZWRUeXBlLAogICAgICAgIGdldEluZmVycmVkVHlwZShjb25kaXRpb24sIGluZmVycmVyKSwKICAgICAgICBub2RlLmNvbmRpdGlvbiwKICAgICAgICBub2RlLmNvbmRpdGlvbi5maWxlT2Zmc2V0KTsKICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbih0aGVuLCB0eXBlQ29udGV4dCwgdHJ1ZSwgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24ob3RoZXJ3aXNlLCB0eXBlQ29udGV4dCwgdHJ1ZSwgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGUgPSBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQKICAgICAgICAuZ2V0U3RhbmRhcmRVcHBlckJvdW5kKGdldEluZmVycmVkVHlwZSh0aGVuLCBpbmZlcnJlciksCiAgICAgICAgICAgIGdldEluZmVycmVkVHlwZShvdGhlcndpc2UsIGluZmVycmVyKSk7CiAgICBub2RlLnN0YXRpY1R5cGUgPSBpbmZlcnJlZFR5cGU7CiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQoaW5mZXJyZWRUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgdmlzaXRDb25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgIENvbnN0cnVjdG9ySW52b2NhdGlvbiBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IGluZmVycmVyLmVuZ2luZS5iZWluZ0luZmVycmVkW25vZGUudGFyZ2V0XTsKICAgIGlmIChsaWJyYXJ5ICE9IG51bGwpIHsKICAgICAgLy8gVGhlcmUgaXMgYSBjeWNsaWMgZGVwZW5kZW5jeSB3aGVyZSBpbmZlcnJpbmcgdGhlIHR5cGVzIG9mIHRoZQogICAgICAvLyBpbml0aWFsaXppbmcgZm9ybWFscyBvZiBhIGNvbnN0cnVjdG9yIHJlcXVpcmVkIHVzIHRvIGluZmVyIHRoZQogICAgICAvLyBjb3JyZXNwb25kaW5nIGZpZWxkIHR5cGUgd2hpY2ggcmVxdWlyZWQgdXMgdG8ga25vdyB0aGUgdHlwZSBvZiB0aGUKICAgICAgLy8gY29uc3RydWN0b3IuCiAgICAgIFN0cmluZyBuYW1lID0gbm9kZS50YXJnZXQuZW5jbG9zaW5nQ2xhc3MubmFtZTsKICAgICAgaWYgKG5vZGUudGFyZ2V0Lm5hbWUubmFtZS5pc05vdEVtcHR5KSB7CiAgICAgICAgLy8gVE9ETyhhaGUpOiBVc2UgYGluZmVycmVyLmhlbHBlci5jb25zdHJ1Y3Rvck5hbWVGb3JEaWFnbm9zdGljc2AKICAgICAgICAvLyBpbnN0ZWFkLiBIb3dldmVyLCBgaW5mZXJyZXIuaGVscGVyYCBtYXkgYmUgbnVsbC4KICAgICAgICBuYW1lICs9ICIuJHtub2RlLnRhcmdldC5uYW1lLm5hbWV9IjsKICAgICAgfQogICAgICBsaWJyYXJ5LmFkZFByb2JsZW0oCiAgICAgICAgICB0ZW1wbGF0ZUNhbnRJbmZlclR5cGVEdWVUb0NpcmN1bGFyaXR5LndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICBub2RlLnRhcmdldC5maWxlT2Zmc2V0LAogICAgICAgICAgbmFtZS5sZW5ndGgsCiAgICAgICAgICBub2RlLnRhcmdldC5maWxlVXJpKTsKICAgICAgZm9yIChWYXJpYWJsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uCiAgICAgICAgICBpbiBub2RlLnRhcmdldC5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycykgewogICAgICAgIGRlY2xhcmF0aW9uLnR5cGUgPz89IGNvbnN0IEludmFsaWRUeXBlKCk7CiAgICAgIH0KICAgICAgZm9yIChWYXJpYWJsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uCiAgICAgICAgICBpbiBub2RlLnRhcmdldC5mdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMpIHsKICAgICAgICBkZWNsYXJhdGlvbi50eXBlID8/PSBjb25zdCBJbnZhbGlkVHlwZSgpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKChsaWJyYXJ5ID0gaW5mZXJyZXIuZW5naW5lLnRvQmVJbmZlcnJlZFtub2RlLnRhcmdldF0pICE9IG51bGwpIHsKICAgICAgaW5mZXJyZXIuZW5naW5lLnRvQmVJbmZlcnJlZC5yZW1vdmUobm9kZS50YXJnZXQpOwogICAgICBpbmZlcnJlci5lbmdpbmUuYmVpbmdJbmZlcnJlZFtub2RlLnRhcmdldF0gPSBsaWJyYXJ5OwogICAgICBmb3IgKFZhcmlhYmxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb24KICAgICAgICAgIGluIG5vZGUudGFyZ2V0LmZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzKSB7CiAgICAgICAgaW5mZXJyZXIuZW5naW5lLmluZmVySW5pdGlhbGl6aW5nRm9ybWFsKGRlY2xhcmF0aW9uLCBub2RlLnRhcmdldCk7CiAgICAgIH0KICAgICAgZm9yIChWYXJpYWJsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uCiAgICAgICAgICBpbiBub2RlLnRhcmdldC5mdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMpIHsKICAgICAgICBpbmZlcnJlci5lbmdpbmUuaW5mZXJJbml0aWFsaXppbmdGb3JtYWwoZGVjbGFyYXRpb24sIG5vZGUudGFyZ2V0KTsKICAgICAgfQogICAgICBpbmZlcnJlci5lbmdpbmUuYmVpbmdJbmZlcnJlZC5yZW1vdmUobm9kZS50YXJnZXQpOwogICAgfQogICAgYm9vbCBoYXNFeHBsaWNpdFR5cGVBcmd1bWVudHMgPQogICAgICAgIGdldEV4cGxpY2l0VHlwZUFyZ3VtZW50cyhub2RlLmFyZ3VtZW50cykgIT0gbnVsbDsKICAgIERhcnRUeXBlIGluZmVycmVkVHlwZSA9IGluZmVycmVyLmluZmVySW52b2NhdGlvbigKICAgICAgICB0eXBlQ29udGV4dCwKICAgICAgICBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgbm9kZS50YXJnZXQuZnVuY3Rpb24uZnVuY3Rpb25UeXBlLAogICAgICAgIGNvbXB1dGVDb25zdHJ1Y3RvclJldHVyblR5cGUobm9kZS50YXJnZXQpLAogICAgICAgIG5vZGUuYXJndW1lbnRzLAogICAgICAgIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCk7CiAgICBpbmZlcnJlci5zdG9yZUluZmVycmVkVHlwZShub2RlLCBpbmZlcnJlZFR5cGUpOwogICAgaWYgKCFpbmZlcnJlci5pc1RvcExldmVsKSB7CiAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkgPSBpbmZlcnJlci5saWJyYXJ5OwogICAgICBpZiAoIWhhc0V4cGxpY2l0VHlwZUFyZ3VtZW50cykgewogICAgICAgIGxpYnJhcnkuY2hlY2tCb3VuZHNJbkNvbnN0cnVjdG9ySW52b2NhdGlvbigKICAgICAgICAgICAgbm9kZSwgaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50LCBpbmZlcnJlci5oZWxwZXIudXJpLAogICAgICAgICAgICBpbmZlcnJlZDogdHJ1ZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChpbmZlcnJlZFR5cGUpOwogIH0KCiAgdm9pZCB2aXNpdENvbnRpbnVlU3dpdGNoSnVkZ21lbnQoQ29udGludWVTd2l0Y2hKdWRnbWVudCBub2RlKSB7CiAgICAvLyBObyBpbmZlcmVuY2UgbmVlZHMgdG8gYmUgZG9uZS4KICB9CgogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgdmlzaXREZWZlcnJlZENoZWNrSnVkZ21lbnQoCiAgICAgIERlZmVycmVkQ2hlY2tKdWRnbWVudCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgLy8gU2luY2UgdGhlIHZhcmlhYmxlIGlzIG5vdCB1c2VkIGluIHRoZSBib2R5IHdlIGRvbid0IG5lZWQgdG8gdHlwZSBpbmZlcgogICAgLy8gaXQuICBXZSBjYW4ganVzdCB0eXBlIGluZmVyIHRoZSBib2R5LgogICAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCByZXN1bHQgPSBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgbm9kZS5leHByZXNzaW9uLCB0eXBlQ29udGV4dCwgdHJ1ZSwKICAgICAgICBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gcmVzdWx0LmluZmVycmVkVHlwZTsKICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChyZXN1bHQuaW5mZXJyZWRUeXBlKTsKICB9CgogIHZvaWQgdmlzaXREb0p1ZGdtZW50KERvSnVkZ21lbnQgbm9kZSkgewogICAgRXhwcmVzc2lvbiBjb25kaXRpb25KdWRnbWVudCA9IG5vZGUuY29uZGl0aW9uSnVkZ21lbnQ7CiAgICBpbmZlcnJlci5pbmZlclN0YXRlbWVudChub2RlLmJvZHkpOwogICAgSW50ZXJmYWNlVHlwZSBib29sVHlwZSA9IGluZmVycmVyLmNvcmVUeXBlcy5ib29sQ2xhc3MucmF3VHlwZTsKICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihjb25kaXRpb25KdWRnbWVudCwgYm9vbFR5cGUsICFpbmZlcnJlci5pc1RvcExldmVsKTsKICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoCiAgICAgICAgYm9vbFR5cGUsCiAgICAgICAgZ2V0SW5mZXJyZWRUeXBlKGNvbmRpdGlvbkp1ZGdtZW50LCBpbmZlcnJlciksCiAgICAgICAgbm9kZS5jb25kaXRpb24sCiAgICAgICAgbm9kZS5jb25kaXRpb24uZmlsZU9mZnNldCk7CiAgfQoKICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHZpc2l0RG91YmxlSnVkZ21lbnQoCiAgICAgIERvdWJsZUp1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQoCiAgICAgICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBpbmZlcnJlci5jb3JlVHlwZXMuZG91YmxlQ2xhc3MucmF3VHlwZSk7CiAgfQoKICB2b2lkIHZpc2l0RW1wdHlTdGF0ZW1lbnRKdWRnbWVudChFbXB0eVN0YXRlbWVudEp1ZGdtZW50IG5vZGUpIHsKICAgIC8vIE5vIGluZmVyZW5jZSBuZWVkcyB0byBiZSBkb25lLgogIH0KCiAgdm9pZCB2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnRKdWRnbWVudChFeHByZXNzaW9uU3RhdGVtZW50SnVkZ21lbnQgbm9kZSkgewogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgIG5vZGUuanVkZ21lbnQsIGNvbnN0IFVua25vd25UeXBlKCksICFpbmZlcnJlci5pc1RvcExldmVsLAogICAgICAgIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogIH0KCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCB2aXNpdEZhY3RvcnlDb25zdHJ1Y3Rvckludm9jYXRpb25KdWRnbWVudCgKICAgICAgRmFjdG9yeUNvbnN0cnVjdG9ySW52b2NhdGlvbkp1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBib29sIGhhZEV4cGxpY2l0VHlwZUFyZ3VtZW50cyA9CiAgICAgICAgZ2V0RXhwbGljaXRUeXBlQXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKSAhPSBudWxsOwogICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlID0gaW5mZXJyZXIuaW5mZXJJbnZvY2F0aW9uKAogICAgICAgIHR5cGVDb250ZXh0LAogICAgICAgIG5vZGUuZmlsZU9mZnNldCwKICAgICAgICBub2RlLnRhcmdldC5mdW5jdGlvbi5mdW5jdGlvblR5cGUsCiAgICAgICAgY29tcHV0ZUNvbnN0cnVjdG9yUmV0dXJuVHlwZShub2RlLnRhcmdldCksCiAgICAgICAgbm9kZS5hcmd1bWVudEp1ZGdtZW50cywKICAgICAgICBpc0NvbnN0OiBub2RlLmlzQ29uc3QpOwogICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBpbmZlcnJlZFR5cGU7CiAgICBpZiAoIWluZmVycmVyLmlzVG9wTGV2ZWwpIHsKICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IGluZmVycmVyLmxpYnJhcnk7CiAgICAgIGlmICghaGFkRXhwbGljaXRUeXBlQXJndW1lbnRzKSB7CiAgICAgICAgbGlicmFyeS5jaGVja0JvdW5kc0luRmFjdG9yeUludm9jYXRpb24oCiAgICAgICAgICAgIG5vZGUsIGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudCwgaW5mZXJyZXIuaGVscGVyLnVyaSwKICAgICAgICAgICAgaW5mZXJyZWQ6IHRydWUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQoaW5mZXJyZWRUeXBlKTsKICB9CgogIHZvaWQgdmlzaXRTaGFkb3dGaWVsZEluaXRpYWxpemVyKFNoYWRvd0ZpZWxkSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCBpbml0aWFsaXplclJlc3VsdCA9CiAgICAgICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKG5vZGUudmFsdWUsIG5vZGUuZmllbGQudHlwZSwgdHJ1ZSk7CiAgICBEYXJ0VHlwZSBpbml0aWFsaXplclR5cGUgPSBpbml0aWFsaXplclJlc3VsdC5pbmZlcnJlZFR5cGU7CiAgICBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKAogICAgICAgIG5vZGUuZmllbGQudHlwZSwgaW5pdGlhbGl6ZXJUeXBlLCBub2RlLnZhbHVlLCBub2RlLmZpbGVPZmZzZXQpOwogIH0KCiAgdm9pZCBoYW5kbGVGb3JJbkRlY2xhcmluZ1ZhcmlhYmxlKAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBFeHByZXNzaW9uIGl0ZXJhYmxlLCBTdGF0ZW1lbnQgYm9keSwKICAgICAge2Jvb2wgaXNBc3luYzogZmFsc2V9KSB7CiAgICBEYXJ0VHlwZSBlbGVtZW50VHlwZTsKICAgIGJvb2wgdHlwZU5lZWRlZCA9IGZhbHNlOwogICAgYm9vbCB0eXBlQ2hlY2tzTmVlZGVkID0gIWluZmVycmVyLmlzVG9wTGV2ZWw7CiAgICBpZiAoVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50LmlzSW1wbGljaXRseVR5cGVkKHZhcmlhYmxlKSkgewogICAgICB0eXBlTmVlZGVkID0gdHJ1ZTsKICAgICAgZWxlbWVudFR5cGUgPSBjb25zdCBVbmtub3duVHlwZSgpOwogICAgfSBlbHNlIHsKICAgICAgZWxlbWVudFR5cGUgPSB2YXJpYWJsZS50eXBlOwogICAgfQoKICAgIERhcnRUeXBlIGluZmVycmVkVHlwZSA9IGluZmVyRm9ySW5JdGVyYWJsZSgKICAgICAgICBpdGVyYWJsZSwgZWxlbWVudFR5cGUsIHR5cGVOZWVkZWQgfHwgdHlwZUNoZWNrc05lZWRlZCwKICAgICAgICBpc0FzeW5jOiBpc0FzeW5jKTsKICAgIGlmICh0eXBlTmVlZGVkKSB7CiAgICAgIGluZmVycmVyLmluc3RydW1lbnRhdGlvbj8ucmVjb3JkKGluZmVycmVyLnVyaSwgdmFyaWFibGUuZmlsZU9mZnNldCwKICAgICAgICAgICd0eXBlJywgbmV3IEluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZShpbmZlcnJlZFR5cGUpKTsKICAgICAgdmFyaWFibGUudHlwZSA9IGluZmVycmVkVHlwZTsKICAgIH0KCiAgICBpZiAoYm9keSAhPSBudWxsKSBpbmZlcnJlci5pbmZlclN0YXRlbWVudChib2R5KTsKCiAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHRlbXBWYXIgPQogICAgICAgIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKG51bGwsIHR5cGU6IGluZmVycmVkVHlwZSwgaXNGaW5hbDogdHJ1ZSk7CiAgICBWYXJpYWJsZUdldCB2YXJpYWJsZUdldCA9IG5ldyBWYXJpYWJsZUdldCh0ZW1wVmFyKQogICAgICAuLmZpbGVPZmZzZXQgPSB2YXJpYWJsZS5maWxlT2Zmc2V0OwogICAgVHJlZU5vZGUgcGFyZW50ID0gdmFyaWFibGUucGFyZW50OwogICAgRXhwcmVzc2lvbiBpbXBsaWNpdERvd25jYXN0ID0gaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZSgKICAgICAgICB2YXJpYWJsZS50eXBlLCBpbmZlcnJlZFR5cGUsIHZhcmlhYmxlR2V0LCBwYXJlbnQuZmlsZU9mZnNldCwKICAgICAgICB0ZW1wbGF0ZTogdGVtcGxhdGVGb3JJbkxvb3BFbGVtZW50VHlwZU5vdEFzc2lnbmFibGUpOwogICAgaWYgKGltcGxpY2l0RG93bmNhc3QgIT0gbnVsbCkgewogICAgICBwYXJlbnQucmVwbGFjZUNoaWxkKHZhcmlhYmxlLCB0ZW1wVmFyKTsKICAgICAgdmFyaWFibGUuaW5pdGlhbGl6ZXIgPSBpbXBsaWNpdERvd25jYXN0Li5wYXJlbnQgPSB2YXJpYWJsZTsKICAgICAgaWYgKGJvZHkgPT0gbnVsbCkgewogICAgICAgIGlmIChwYXJlbnQgaXMgRm9ySW5FbGVtZW50KSB7CiAgICAgICAgICBwYXJlbnQucHJvbG9ndWUgPSB2YXJpYWJsZTsKICAgICAgICB9IGVsc2UgaWYgKHBhcmVudCBpcyBGb3JJbk1hcEVudHJ5KSB7CiAgICAgICAgICBwYXJlbnQucHJvbG9ndWUgPSB2YXJpYWJsZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdW5oYW5kbGVkKCIke3BhcmVudC5ydW50aW1lVHlwZX0iLCAiaGFuZGxlRm9ySW5EZWNsYXJpbmdWYXJpYWJsZSIsCiAgICAgICAgICAgICAgdmFyaWFibGUuZmlsZU9mZnNldCwgdmFyaWFibGUubG9jYXRpb24uZmlsZSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHBhcmVudC5yZXBsYWNlQ2hpbGQoYm9keSwgY29tYmluZVN0YXRlbWVudHModmFyaWFibGUsIGJvZHkpKTsKICAgICAgfQogICAgfQogIH0KCiAgRGFydFR5cGUgaW5mZXJGb3JJbkl0ZXJhYmxlKAogICAgICBFeHByZXNzaW9uIGl0ZXJhYmxlLCBEYXJ0VHlwZSBlbGVtZW50VHlwZSwgYm9vbCB0eXBlTmVlZGVkLAogICAgICB7Ym9vbCBpc0FzeW5jOiBmYWxzZX0pIHsKICAgIENsYXNzIGl0ZXJhYmxlQ2xhc3MgPSBpc0FzeW5jCiAgICAgICAgPyBpbmZlcnJlci5jb3JlVHlwZXMuc3RyZWFtQ2xhc3MKICAgICAgICA6IGluZmVycmVyLmNvcmVUeXBlcy5pdGVyYWJsZUNsYXNzOwogICAgRGFydFR5cGUgY29udGV4dCA9IGluZmVycmVyLndyYXBUeXBlKGVsZW1lbnRUeXBlLCBpdGVyYWJsZUNsYXNzKTsKICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihpdGVyYWJsZSwgY29udGV4dCwgdHlwZU5lZWRlZCk7CiAgICBEYXJ0VHlwZSBpbmZlcnJlZEV4cHJlc3Npb25UeXBlID0KICAgICAgICBpbmZlcnJlci5yZXNvbHZlVHlwZVBhcmFtZXRlcihnZXRJbmZlcnJlZFR5cGUoaXRlcmFibGUsIGluZmVycmVyKSk7CiAgICBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKAogICAgICAgIGluZmVycmVyLndyYXBUeXBlKGNvbnN0IER5bmFtaWNUeXBlKCksIGl0ZXJhYmxlQ2xhc3MpLAogICAgICAgIGluZmVycmVkRXhwcmVzc2lvblR5cGUsCiAgICAgICAgaXRlcmFibGUsCiAgICAgICAgaXRlcmFibGUuZmlsZU9mZnNldCwKICAgICAgICB0ZW1wbGF0ZTogdGVtcGxhdGVGb3JJbkxvb3BUeXBlTm90SXRlcmFibGUpOwogICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwogICAgaWYgKHR5cGVOZWVkZWQpIHsKICAgICAgaW5mZXJyZWRUeXBlID0gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgICAgaWYgKGluZmVycmVkRXhwcmVzc2lvblR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICAgIEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlID0gaW5mZXJyZXIuY2xhc3NIaWVyYXJjaHkKICAgICAgICAgICAgLmdldFR5cGVBc0luc3RhbmNlT2YoaW5mZXJyZWRFeHByZXNzaW9uVHlwZSwgaXRlcmFibGVDbGFzcyk7CiAgICAgICAgaWYgKHN1cGVydHlwZSAhPSBudWxsKSB7CiAgICAgICAgICBpbmZlcnJlZFR5cGUgPSBzdXBlcnR5cGUudHlwZUFyZ3VtZW50c1swXTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBpbmZlcnJlZFR5cGU7CiAgfQoKICB2b2lkIGhhbmRsZUZvckluV2l0aG91dFZhcmlhYmxlKAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBFeHByZXNzaW9uIGl0ZXJhYmxlLCBTdGF0ZW1lbnQgYm9keSwKICAgICAge2Jvb2wgaXNBc3luYzogZmFsc2V9KSB7CiAgICBEYXJ0VHlwZSBlbGVtZW50VHlwZTsKICAgIGJvb2wgdHlwZUNoZWNrc05lZWRlZCA9ICFpbmZlcnJlci5pc1RvcExldmVsOwogICAgRGFydFR5cGUgc3ludGhldGljV3JpdGVUeXBlOwogICAgRXhwcmVzc2lvbiBzeW50aGV0aWNBc3NpZ25tZW50OwogICAgRXhwcmVzc2lvbiByaHM7CiAgICBFeHByZXNzaW9uU3RhdGVtZW50IHN0YXRlbWVudCA9CiAgICAgICAgYm9keSBpcyBCbG9jayA/IGJvZHkuc3RhdGVtZW50cy5maXJzdCA6IGJvZHk7CiAgICBTeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnQganVkZ21lbnQgPSBzdGF0ZW1lbnQuZXhwcmVzc2lvbjsKICAgIHN5bnRoZXRpY0Fzc2lnbm1lbnQgPSBqdWRnbWVudC5kZXN1Z2FyZWQ7CiAgICBpZiAoc3ludGhldGljQXNzaWdubWVudCBpcyBWYXJpYWJsZVNldCkgewogICAgICBzeW50aGV0aWNXcml0ZVR5cGUgPSBlbGVtZW50VHlwZSA9IHN5bnRoZXRpY0Fzc2lnbm1lbnQudmFyaWFibGUudHlwZTsKICAgICAgcmhzID0gc3ludGhldGljQXNzaWdubWVudC52YWx1ZTsKICAgIH0gZWxzZSBpZiAoc3ludGhldGljQXNzaWdubWVudCBpcyBQcm9wZXJ0eVNldCB8fAogICAgICAgIHN5bnRoZXRpY0Fzc2lnbm1lbnQgaXMgU3VwZXJQcm9wZXJ0eVNldCkgewogICAgICBEYXJ0VHlwZSByZWNlaXZlclR5cGUgPSBpbmZlcnJlci50aGlzVHlwZTsKICAgICAgT2JqZWN0QWNjZXNzVGFyZ2V0IHdyaXRlVGFyZ2V0ID0KICAgICAgICAgIGluZmVycmVyLmZpbmRQcm9wZXJ0eVNldE1lbWJlcihyZWNlaXZlclR5cGUsIHN5bnRoZXRpY0Fzc2lnbm1lbnQpOwogICAgICBzeW50aGV0aWNXcml0ZVR5cGUgPQogICAgICAgICAgZWxlbWVudFR5cGUgPSBpbmZlcnJlci5nZXRTZXR0ZXJUeXBlKHdyaXRlVGFyZ2V0LCByZWNlaXZlclR5cGUpOwogICAgICBpZiAoc3ludGhldGljQXNzaWdubWVudCBpcyBQcm9wZXJ0eVNldCkgewogICAgICAgIHJocyA9IHN5bnRoZXRpY0Fzc2lnbm1lbnQudmFsdWU7CiAgICAgIH0gZWxzZSBpZiAoc3ludGhldGljQXNzaWdubWVudCBpcyBTdXBlclByb3BlcnR5U2V0KSB7CiAgICAgICAgcmhzID0gc3ludGhldGljQXNzaWdubWVudC52YWx1ZTsKICAgICAgfQogICAgfSBlbHNlIGlmIChzeW50aGV0aWNBc3NpZ25tZW50IGlzIFN0YXRpY1NldCkgewogICAgICBzeW50aGV0aWNXcml0ZVR5cGUgPSBlbGVtZW50VHlwZSA9IHN5bnRoZXRpY0Fzc2lnbm1lbnQudGFyZ2V0LnNldHRlclR5cGU7CiAgICAgIHJocyA9IHN5bnRoZXRpY0Fzc2lnbm1lbnQudmFsdWU7CiAgICB9IGVsc2UgaWYgKHN5bnRoZXRpY0Fzc2lnbm1lbnQgaXMgSW52YWxpZEV4cHJlc3Npb24pIHsKICAgICAgZWxlbWVudFR5cGUgPSBjb25zdCBVbmtub3duVHlwZSgpOwogICAgfSBlbHNlIHsKICAgICAgdW5oYW5kbGVkKAogICAgICAgICAgIiR7c3ludGhldGljQXNzaWdubWVudC5ydW50aW1lVHlwZX0iLAogICAgICAgICAgImhhbmRsZUZvckluU3RhdGVtZW50V2l0aG91dFZhcmlhYmxlIiwKICAgICAgICAgIHN5bnRoZXRpY0Fzc2lnbm1lbnQuZmlsZU9mZnNldCwKICAgICAgICAgIGluZmVycmVyLmhlbHBlci51cmkpOwogICAgfQoKICAgIERhcnRUeXBlIGluZmVycmVkVHlwZSA9IGluZmVyRm9ySW5JdGVyYWJsZSgKICAgICAgICBpdGVyYWJsZSwgZWxlbWVudFR5cGUsIHR5cGVDaGVja3NOZWVkZWQsCiAgICAgICAgaXNBc3luYzogaXNBc3luYyk7CiAgICBpZiAodHlwZUNoZWNrc05lZWRlZCkgewogICAgICB2YXJpYWJsZS50eXBlID0gaW5mZXJyZWRUeXBlOwogICAgfQoKICAgIGluZmVycmVyLmluZmVyU3RhdGVtZW50KGJvZHkpOwoKICAgIGlmIChzeW50aGV0aWNXcml0ZVR5cGUgIT0gbnVsbCkgewogICAgICBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKAogICAgICAgICAgZ3JlYXRlc3RDbG9zdXJlKGluZmVycmVyLmNvcmVUeXBlcywgc3ludGhldGljV3JpdGVUeXBlKSwKICAgICAgICAgIHZhcmlhYmxlLnR5cGUsCiAgICAgICAgICByaHMsCiAgICAgICAgICByaHMuZmlsZU9mZnNldCwKICAgICAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZUZvckluTG9vcEVsZW1lbnRUeXBlTm90QXNzaWduYWJsZSwKICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgTnVsbCB2aXNpdEZvckluU3RhdGVtZW50KEZvckluU3RhdGVtZW50IG5vZGUsIF8pIHsKICAgIGlmIChub2RlLnZhcmlhYmxlLm5hbWUgPT0gbnVsbCkgewogICAgICBoYW5kbGVGb3JJbldpdGhvdXRWYXJpYWJsZShub2RlLnZhcmlhYmxlLCBub2RlLml0ZXJhYmxlLCBub2RlLmJvZHksCiAgICAgICAgICBpc0FzeW5jOiBub2RlLmlzQXN5bmMpOwogICAgfSBlbHNlIHsKICAgICAgaGFuZGxlRm9ySW5EZWNsYXJpbmdWYXJpYWJsZShub2RlLnZhcmlhYmxlLCBub2RlLml0ZXJhYmxlLCBub2RlLmJvZHksCiAgICAgICAgICBpc0FzeW5jOiBub2RlLmlzQXN5bmMpOwogICAgfQogIH0KCiAgdm9pZCB2aXNpdEZvckp1ZGdtZW50KEZvckp1ZGdtZW50IG5vZGUpIHsKICAgIEV4cHJlc3Npb24gY29uZGl0aW9uSnVkZ21lbnQgPSBub2RlLmNvbmRpdGlvbkp1ZGdtZW50OwogICAgZm9yIChWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlIGluIG5vZGUudmFyaWFibGVzKSB7CiAgICAgIGlmICh2YXJpYWJsZS5uYW1lID09IG51bGwpIHsKICAgICAgICBFeHByZXNzaW9uIGluaXRpYWxpemVyID0gdmFyaWFibGUuaW5pdGlhbGl6ZXI7CiAgICAgICAgaWYgKGluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgICAgIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgcmVzdWx0ID0gaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgICAgICAgIGluaXRpYWxpemVyLCBjb25zdCBVbmtub3duVHlwZSgpLCB0cnVlLAogICAgICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgICAgICAgdmFyaWFibGUudHlwZSA9IHJlc3VsdC5pbmZlcnJlZFR5cGU7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGluZmVycmVyLmluZmVyU3RhdGVtZW50KHZhcmlhYmxlKTsKICAgICAgfQogICAgfQogICAgaWYgKGNvbmRpdGlvbkp1ZGdtZW50ICE9IG51bGwpIHsKICAgICAgSW50ZXJmYWNlVHlwZSBleHBlY3RlZFR5cGUgPSBpbmZlcnJlci5jb3JlVHlwZXMuYm9vbENsYXNzLnJhd1R5cGU7CiAgICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbigKICAgICAgICAgIGNvbmRpdGlvbkp1ZGdtZW50LCBleHBlY3RlZFR5cGUsICFpbmZlcnJlci5pc1RvcExldmVsKTsKICAgICAgaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZSgKICAgICAgICAgIGV4cGVjdGVkVHlwZSwKICAgICAgICAgIGdldEluZmVycmVkVHlwZShjb25kaXRpb25KdWRnbWVudCwgaW5mZXJyZXIpLAogICAgICAgICAgbm9kZS5jb25kaXRpb24sCiAgICAgICAgICBub2RlLmNvbmRpdGlvbi5maWxlT2Zmc2V0KTsKICAgIH0KICAgIGZvciAoRXhwcmVzc2lvbiB1cGRhdGUgaW4gbm9kZS51cGRhdGVKdWRnbWVudHMpIHsKICAgICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgICAgdXBkYXRlLCBjb25zdCBVbmtub3duVHlwZSgpLCAhaW5mZXJyZXIuaXNUb3BMZXZlbCwKICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgfQogICAgaW5mZXJyZXIuaW5mZXJTdGF0ZW1lbnQobm9kZS5ib2R5KTsKICB9CgogIERhcnRUeXBlIHZpc2l0RnVuY3Rpb25Ob2RlSnVkZ21lbnQoCiAgICAgIEZ1bmN0aW9uTm9kZUp1ZGdtZW50IG5vZGUsCiAgICAgIERhcnRUeXBlIHR5cGVDb250ZXh0LAogICAgICBEYXJ0VHlwZSByZXR1cm5Db250ZXh0LAogICAgICBpbnQgcmV0dXJuVHlwZUluc3RydW1lbnRhdGlvbk9mZnNldCkgewogICAgcmV0dXJuIGluZmVycmVyLmluZmVyTG9jYWxGdW5jdGlvbigKICAgICAgICBub2RlLCB0eXBlQ29udGV4dCwgcmV0dXJuVHlwZUluc3RydW1lbnRhdGlvbk9mZnNldCwgcmV0dXJuQ29udGV4dCk7CiAgfQoKICB2b2lkIHZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbkp1ZGdtZW50KEZ1bmN0aW9uRGVjbGFyYXRpb25KdWRnbWVudCBub2RlKSB7CiAgICBpbmZlcnJlci5pbmZlck1ldGFkYXRhS2VlcGluZ0hlbHBlcihub2RlLnZhcmlhYmxlLmFubm90YXRpb25zKTsKICAgIERhcnRUeXBlIHJldHVybkNvbnRleHQgPQogICAgICAgIG5vZGUuX2hhc0ltcGxpY2l0UmV0dXJuVHlwZSA/IG51bGwgOiBub2RlLmZ1bmN0aW9uLnJldHVyblR5cGU7CiAgICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGUgPSB2aXNpdEZ1bmN0aW9uTm9kZUp1ZGdtZW50KAogICAgICAgIG5vZGUuZnVuY3Rpb25KdWRnbWVudCwgbnVsbCwgcmV0dXJuQ29udGV4dCwgbm9kZS5maWxlT2Zmc2V0KTsKICAgIG5vZGUudmFyaWFibGUudHlwZSA9IGluZmVycmVkVHlwZTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgdmlzaXRGdW5jdGlvbkV4cHJlc3Npb24oCiAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbiBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlID0gdmlzaXRGdW5jdGlvbk5vZGVKdWRnbWVudCgKICAgICAgICBub2RlLmZ1bmN0aW9uLCB0eXBlQ29udGV4dCwgbnVsbCwgbm9kZS5maWxlT2Zmc2V0KTsKICAgIGluZmVycmVyLnN0b3JlSW5mZXJyZWRUeXBlKG5vZGUsIGluZmVycmVkVHlwZSk7CiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQoaW5mZXJyZWRUeXBlKTsKICB9CgogIHZvaWQgdmlzaXRJbnZhbGlkU3VwZXJJbml0aWFsaXplckp1ZGdtZW50KAogICAgICBJbnZhbGlkU3VwZXJJbml0aWFsaXplckp1ZGdtZW50IG5vZGUpIHsKICAgIFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZnJvbVN1cGVydHlwZSgKICAgICAgICBpbmZlcnJlci5jbGFzc0hpZXJhcmNoeS5nZXRDbGFzc0FzSW5zdGFuY2VPZigKICAgICAgICAgICAgaW5mZXJyZXIudGhpc1R5cGUuY2xhc3NOb2RlLCBub2RlLnRhcmdldC5lbmNsb3NpbmdDbGFzcykpOwogICAgaW5mZXJyZXIuaW5mZXJJbnZvY2F0aW9uKAogICAgICAgIG51bGwsCiAgICAgICAgbm9kZS5maWxlT2Zmc2V0LAogICAgICAgIHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZSgKICAgICAgICAgICAgbm9kZS50YXJnZXQuZnVuY3Rpb24uZnVuY3Rpb25UeXBlLndpdGhvdXRUeXBlUGFyYW1ldGVycyksCiAgICAgICAgaW5mZXJyZXIudGhpc1R5cGUsCiAgICAgICAgbm9kZS5hcmd1bWVudHNKdWRnbWVudCwKICAgICAgICBza2lwVHlwZUFyZ3VtZW50SW5mZXJlbmNlOiB0cnVlKTsKICB9CgogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgdmlzaXRJZk51bGxKdWRnbWVudCgKICAgICAgSWZOdWxsSnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIEV4cHJlc3Npb24gbGVmdEp1ZGdtZW50ID0gbm9kZS5sZWZ0SnVkZ21lbnQ7CiAgICBFeHByZXNzaW9uIHJpZ2h0SnVkZ21lbnQgPSBub2RlLnJpZ2h0SnVkZ21lbnQ7CiAgICAvLyBUbyBpbmZlciBgZTAgPz8gZTFgIGluIGNvbnRleHQgSzoKICAgIC8vIC0gSW5mZXIgZTAgaW4gY29udGV4dCBLIHRvIGdldCBUMAogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKGxlZnRKdWRnbWVudCwgdHlwZUNvbnRleHQsIHRydWUpOwogICAgRGFydFR5cGUgbGhzVHlwZSA9IGdldEluZmVycmVkVHlwZShsZWZ0SnVkZ21lbnQsIGluZmVycmVyKTsKICAgIG5vZGUudmFyaWFibGUudHlwZSA9IGxoc1R5cGU7CiAgICAvLyAtIExldCBKID0gVDAgaWYgSyBpcyBgP2AgZWxzZSBLLgogICAgLy8gLSBJbmZlciBlMSBpbiBjb250ZXh0IEogdG8gZ2V0IFQxCiAgICBpZiAodHlwZUNvbnRleHQgaXMgVW5rbm93blR5cGUpIHsKICAgICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKHJpZ2h0SnVkZ21lbnQsIGxoc1R5cGUsIHRydWUsCiAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihyaWdodEp1ZGdtZW50LCB0eXBlQ29udGV4dCwgdHJ1ZSwKICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgfQogICAgRGFydFR5cGUgcmhzVHlwZSA9IGdldEluZmVycmVkVHlwZShyaWdodEp1ZGdtZW50LCBpbmZlcnJlcik7CiAgICAvLyAtIExldCBUID0gZ3JlYXRlc3QgY2xvc3VyZSBvZiBLIHdpdGggcmVzcGVjdCB0byBgP2AgaWYgSyBpcyBub3QgYF9gLCBlbHNlCiAgICAvLyAgIFVQKHQwLCB0MSkKICAgIC8vIC0gVGhlbiB0aGUgaW5mZXJyZWQgdHlwZSBpcyBULgogICAgbm9kZS5pbmZlcnJlZFR5cGUgPQogICAgICAgIGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudC5nZXRTdGFuZGFyZFVwcGVyQm91bmQobGhzVHlwZSwgcmhzVHlwZSk7CiAgICBub2RlLmJvZHkuc3RhdGljVHlwZSA9IGdldEluZmVycmVkVHlwZShub2RlLCBpbmZlcnJlcik7CiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQobm9kZS5pbmZlcnJlZFR5cGUpOwogIH0KCiAgdm9pZCB2aXNpdElmSnVkZ21lbnQoSWZKdWRnbWVudCBub2RlKSB7CiAgICBFeHByZXNzaW9uIGNvbmRpdGlvbkp1ZGdtZW50ID0gbm9kZS5jb25kaXRpb25KdWRnbWVudDsKICAgIEludGVyZmFjZVR5cGUgZXhwZWN0ZWRUeXBlID0gaW5mZXJyZXIuY29yZVR5cGVzLmJvb2xDbGFzcy5yYXdUeXBlOwogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgIGNvbmRpdGlvbkp1ZGdtZW50LCBleHBlY3RlZFR5cGUsICFpbmZlcnJlci5pc1RvcExldmVsKTsKICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoCiAgICAgICAgZXhwZWN0ZWRUeXBlLAogICAgICAgIGdldEluZmVycmVkVHlwZShjb25kaXRpb25KdWRnbWVudCwgaW5mZXJyZXIpLAogICAgICAgIG5vZGUuY29uZGl0aW9uLAogICAgICAgIG5vZGUuY29uZGl0aW9uLmZpbGVPZmZzZXQpOwogICAgaW5mZXJyZXIuaW5mZXJTdGF0ZW1lbnQobm9kZS50aGVuKTsKICAgIGlmIChub2RlLm90aGVyd2lzZSAhPSBudWxsKSB7CiAgICAgIGluZmVycmVyLmluZmVyU3RhdGVtZW50KG5vZGUub3RoZXJ3aXNlKTsKICAgIH0KICB9CgogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgdmlzaXRJbGxlZ2FsQXNzaWdubWVudEp1ZGdtZW50KAogICAgICBJbGxlZ2FsQXNzaWdubWVudEp1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBpZiAobm9kZS53cml0ZSAhPSBudWxsKSB7CiAgICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbigKICAgICAgICAgIG5vZGUud3JpdGUsIGNvbnN0IFVua25vd25UeXBlKCksICFpbmZlcnJlci5pc1RvcExldmVsKTsKICAgIH0KICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbigKICAgICAgICBub2RlLnJocywgY29uc3QgVW5rbm93blR5cGUoKSwgIWluZmVycmVyLmlzVG9wTGV2ZWwpOwogICAgbm9kZS5fcmVwbGFjZVdpdGhEZXN1Z2FyZWQoKTsKICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgIHJldHVybiBjb25zdCBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0KGNvbnN0IER5bmFtaWNUeXBlKCkpOwogIH0KCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCB2aXNpdEluZGV4QXNzaWdubWVudEp1ZGdtZW50KAogICAgICBJbmRleEFzc2lnbm1lbnRKdWRnbWVudCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgRGFydFR5cGUgcmVjZWl2ZXJUeXBlID0gbm9kZS5faW5mZXJSZWNlaXZlcihpbmZlcnJlcik7CiAgICBPYmplY3RBY2Nlc3NUYXJnZXQgd3JpdGVUYXJnZXQgPQogICAgICAgIGluZmVycmVyLmZpbmRNZXRob2RJbnZvY2F0aW9uTWVtYmVyKHJlY2VpdmVyVHlwZSwgbm9kZS53cml0ZSk7CiAgICAvLyBUbyByZXBsaWNhdGUgYW5hbHl6ZXIgYmVoYXZpb3IsIHdlIGJhc2UgdHlwZSBpbmZlcmVuY2Ugb24gdGhlIHdyaXRlCiAgICAvLyBtZW1iZXIuICBUT0RPKHBhdWxiZXJyeSk6IHdvdWxkIGl0IGJlIGJldHRlciB0byB1c2UgdGhlIHJlYWQgbWVtYmVyCiAgICAvLyB3aGVuIGRvaW5nIGNvbXBvdW5kIGFzc2lnbm1lbnQ/CiAgICBGdW5jdGlvblR5cGUgY2FsbGVlVHlwZSA9CiAgICAgICAgaW5mZXJyZXIuZ2V0RnVuY3Rpb25UeXBlKHdyaXRlVGFyZ2V0LCByZWNlaXZlclR5cGUsIGZhbHNlKTsKICAgIERhcnRUeXBlIGV4cGVjdGVkSW5kZXhUeXBlRm9yV3JpdGU7CiAgICBEYXJ0VHlwZSBpbmRleENvbnRleHQgPSBjb25zdCBVbmtub3duVHlwZSgpOwogICAgRGFydFR5cGUgd3JpdGVDb250ZXh0ID0gY29uc3QgVW5rbm93blR5cGUoKTsKICAgIGlmIChjYWxsZWVUeXBlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCA+PSAyKSB7CiAgICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogd2Ugb3VnaHQgdG8gZ2V0IGEgY29udGV4dCBmb3IgdGhlIGluZGV4IGV4cHJlc3Npb24KICAgICAgLy8gZnJvbSB0aGUgaW5kZXggZm9ybWFsIHBhcmFtZXRlciwgYnV0IGFuYWx5emVyIGRvZXNuJ3Qgc28gZm9yIG5vdyB3ZQogICAgICAvLyByZXBsaWNhdGUgaXRzIGJlaGF2aW9yLgogICAgICBleHBlY3RlZEluZGV4VHlwZUZvcldyaXRlID0gY2FsbGVlVHlwZS5wb3NpdGlvbmFsUGFyYW1ldGVyc1swXTsKICAgICAgd3JpdGVDb250ZXh0ID0gY2FsbGVlVHlwZS5wb3NpdGlvbmFsUGFyYW1ldGVyc1sxXTsKICAgIH0KICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihub2RlLmluZGV4LCBpbmRleENvbnRleHQsIHRydWUpOwogICAgRGFydFR5cGUgaW5kZXhUeXBlID0gZ2V0SW5mZXJyZWRUeXBlKG5vZGUuaW5kZXgsIGluZmVycmVyKTsKICAgIG5vZGUuX3N0b3JlTGV0VHlwZShpbmZlcnJlciwgbm9kZS5pbmRleCwgaW5kZXhUeXBlKTsKICAgIGlmICh3cml0ZUNvbnRleHQgaXMhIFVua25vd25UeXBlKSB7CiAgICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoCiAgICAgICAgICBleHBlY3RlZEluZGV4VHlwZUZvcldyaXRlLAogICAgICAgICAgaW5kZXhUeXBlLAogICAgICAgICAgbm9kZS5fZ2V0SW52b2NhdGlvbkFyZ3VtZW50cyhpbmZlcnJlciwgbm9kZS53cml0ZSkucG9zaXRpb25hbFswXSwKICAgICAgICAgIG5vZGUud3JpdGUuZmlsZU9mZnNldCk7CiAgICB9CiAgICBJbnZvY2F0aW9uRXhwcmVzc2lvbiByZWFkID0gbm9kZS5yZWFkOwogICAgRGFydFR5cGUgcmVhZFR5cGU7CiAgICBpZiAocmVhZCAhPSBudWxsKSB7CiAgICAgIE9iamVjdEFjY2Vzc1RhcmdldCByZWFkTWVtYmVyID0gaW5mZXJyZXIKICAgICAgICAgIC5maW5kTWV0aG9kSW52b2NhdGlvbk1lbWJlcihyZWNlaXZlclR5cGUsIHJlYWQsIGluc3RydW1lbnRlZDogZmFsc2UpOwogICAgICBGdW5jdGlvblR5cGUgY2FsbGVlRnVuY3Rpb25UeXBlID0KICAgICAgICAgIGluZmVycmVyLmdldEZ1bmN0aW9uVHlwZShyZWFkTWVtYmVyLCByZWNlaXZlclR5cGUsIGZhbHNlKTsKICAgICAgaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZSgKICAgICAgICAgIGdldFBvc2l0aW9uYWxQYXJhbWV0ZXJUeXBlKGNhbGxlZUZ1bmN0aW9uVHlwZSwgMCksCiAgICAgICAgICBpbmRleFR5cGUsCiAgICAgICAgICBub2RlLl9nZXRJbnZvY2F0aW9uQXJndW1lbnRzKGluZmVycmVyLCByZWFkKS5wb3NpdGlvbmFsWzBdLAogICAgICAgICAgcmVhZC5maWxlT2Zmc2V0KTsKICAgICAgcmVhZFR5cGUgPSBjYWxsZWVGdW5jdGlvblR5cGUucmV0dXJuVHlwZTsKICAgICAgTWV0aG9kSW52b2NhdGlvbiBkZXN1Z2FyZWRJbnZvY2F0aW9uID0KICAgICAgICAgIHJlYWQgaXMgTWV0aG9kSW52b2NhdGlvbiA/IHJlYWQgOiBudWxsOwogICAgICBNZXRob2RDb250cmF2YXJpYW5jZUNoZWNrS2luZCBjaGVja0tpbmQgPQogICAgICAgICAgaW5mZXJyZXIucHJlQ2hlY2tJbnZvY2F0aW9uQ29udHJhdmFyaWFuY2Uobm9kZS5yZWNlaXZlciwgcmVjZWl2ZXJUeXBlLAogICAgICAgICAgICAgIHJlYWRNZW1iZXIsIGRlc3VnYXJlZEludm9jYXRpb24sIHJlYWQuYXJndW1lbnRzLCByZWFkKTsKICAgICAgRXhwcmVzc2lvbiByZXBsYWNlZFJlYWQgPSBpbmZlcnJlci5oYW5kbGVJbnZvY2F0aW9uQ29udHJhdmFyaWFuY2UoCiAgICAgICAgICBjaGVja0tpbmQsCiAgICAgICAgICBkZXN1Z2FyZWRJbnZvY2F0aW9uLAogICAgICAgICAgcmVhZC5hcmd1bWVudHMsCiAgICAgICAgICByZWFkLAogICAgICAgICAgcmVhZFR5cGUsCiAgICAgICAgICBjYWxsZWVGdW5jdGlvblR5cGUsCiAgICAgICAgICByZWFkLmZpbGVPZmZzZXQpOwogICAgICBub2RlLl9zdG9yZUxldFR5cGUoaW5mZXJyZXIsIHJlcGxhY2VkUmVhZCwgcmVhZFR5cGUpOwogICAgfQogICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlID0KICAgICAgICBub2RlLl9pbmZlclJocyhpbmZlcnJlciwgcmVhZFR5cGUsIHdyaXRlQ29udGV4dCkuaW5mZXJyZWRUeXBlOwogICAgbm9kZS5fcmVwbGFjZVdpdGhEZXN1Z2FyZWQoKTsKICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChpbmZlcnJlZFR5cGUpOwogIH0KCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCB2aXNpdEludEp1ZGdtZW50KAogICAgICBJbnRKdWRnbWVudCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgaWYgKGluZmVycmVyLmlzRG91YmxlQ29udGV4dCh0eXBlQ29udGV4dCkpIHsKICAgICAgZG91YmxlIGRvdWJsZVZhbHVlID0gbm9kZS5hc0RvdWJsZSgpOwogICAgICBpZiAoZG91YmxlVmFsdWUgIT0gbnVsbCkgewogICAgICAgIG5vZGUucGFyZW50LnJlcGxhY2VDaGlsZCgKICAgICAgICAgICAgbm9kZSwgbmV3IERvdWJsZUxpdGVyYWwoZG91YmxlVmFsdWUpLi5maWxlT2Zmc2V0ID0gbm9kZS5maWxlT2Zmc2V0KTsKICAgICAgICBub2RlLmluZmVycmVkVHlwZSA9IGluZmVycmVyLmNvcmVUeXBlcy5kb3VibGVDbGFzcy5yYXdUeXBlOwogICAgICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChub2RlLmluZmVycmVkVHlwZSk7CiAgICAgIH0KICAgIH0KICAgIEV4cHJlc3Npb24gZXJyb3IgPSBjaGVja1dlYkludExpdGVyYWxzRXJyb3JJZlVuZXhhY3QoCiAgICAgICAgaW5mZXJyZXIsIG5vZGUudmFsdWUsIG5vZGUubGl0ZXJhbCwgbm9kZS5maWxlT2Zmc2V0KTsKICAgIGlmIChlcnJvciAhPSBudWxsKSB7CiAgICAgIG5vZGUucGFyZW50LnJlcGxhY2VDaGlsZChub2RlLCBlcnJvcik7CiAgICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gY29uc3QgQm90dG9tVHlwZSgpOwogICAgICByZXR1cm4gY29uc3QgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChjb25zdCBCb3R0b21UeXBlKCkpOwogICAgfQogICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBpbmZlcnJlci5jb3JlVHlwZXMuaW50Q2xhc3MucmF3VHlwZTsKICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChub2RlLmluZmVycmVkVHlwZSk7CiAgfQoKICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHZpc2l0U2hhZG93TGFyZ2VJbnRMaXRlcmFsKAogICAgICBTaGFkb3dMYXJnZUludExpdGVyYWwgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIGlmIChpbmZlcnJlci5pc0RvdWJsZUNvbnRleHQodHlwZUNvbnRleHQpKSB7CiAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZSA9IG5vZGUuYXNEb3VibGUoKTsKICAgICAgaWYgKGRvdWJsZVZhbHVlICE9IG51bGwpIHsKICAgICAgICBub2RlLnBhcmVudC5yZXBsYWNlQ2hpbGQoCiAgICAgICAgICAgIG5vZGUsIG5ldyBEb3VibGVMaXRlcmFsKGRvdWJsZVZhbHVlKS4uZmlsZU9mZnNldCA9IG5vZGUuZmlsZU9mZnNldCk7CiAgICAgICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBpbmZlcnJlci5jb3JlVHlwZXMuZG91YmxlQ2xhc3MucmF3VHlwZTsKICAgICAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQobm9kZS5pbmZlcnJlZFR5cGUpOwogICAgICB9CiAgICB9CgogICAgaW50IGludFZhbHVlID0gbm9kZS5hc0ludDY0KCk7CiAgICBpZiAoaW50VmFsdWUgPT0gbnVsbCkgewogICAgICBFeHByZXNzaW9uIHJlcGxhY2VtZW50ID0gaW5mZXJyZXIuaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKAogICAgICAgICAgaW5mZXJyZXIuaGVscGVyLmJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgICB0ZW1wbGF0ZUludGVnZXJMaXRlcmFsSXNPdXRPZlJhbmdlLndpdGhBcmd1bWVudHMobm9kZS5saXRlcmFsKSwKICAgICAgICAgICAgICBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgbm9kZS5saXRlcmFsLmxlbmd0aCkpOwogICAgICBub2RlLnBhcmVudC5yZXBsYWNlQ2hpbGQobm9kZSwgcmVwbGFjZW1lbnQpOwogICAgICBub2RlLmluZmVycmVkVHlwZSA9IGNvbnN0IEJvdHRvbVR5cGUoKTsKICAgICAgcmV0dXJuIGNvbnN0IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQoY29uc3QgQm90dG9tVHlwZSgpKTsKICAgIH0KICAgIEV4cHJlc3Npb24gZXJyb3IgPSBjaGVja1dlYkludExpdGVyYWxzRXJyb3JJZlVuZXhhY3QoCiAgICAgICAgaW5mZXJyZXIsIGludFZhbHVlLCBub2RlLmxpdGVyYWwsIG5vZGUuZmlsZU9mZnNldCk7CiAgICBpZiAoZXJyb3IgIT0gbnVsbCkgewogICAgICBub2RlLnBhcmVudC5yZXBsYWNlQ2hpbGQobm9kZSwgZXJyb3IpOwogICAgICBub2RlLmluZmVycmVkVHlwZSA9IGNvbnN0IEJvdHRvbVR5cGUoKTsKICAgICAgcmV0dXJuIGNvbnN0IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQoY29uc3QgQm90dG9tVHlwZSgpKTsKICAgIH0KICAgIG5vZGUucGFyZW50LnJlcGxhY2VDaGlsZCgKICAgICAgICBub2RlLCBuZXcgSW50TGl0ZXJhbChpbnRWYWx1ZSkuLmZpbGVPZmZzZXQgPSBub2RlLmZpbGVPZmZzZXQpOwogICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBpbmZlcnJlci5jb3JlVHlwZXMuaW50Q2xhc3MucmF3VHlwZTsKICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChub2RlLmluZmVycmVkVHlwZSk7CiAgfQoKICB2b2lkIHZpc2l0U2hhZG93SW52YWxpZEluaXRpYWxpemVyKFNoYWRvd0ludmFsaWRJbml0aWFsaXplciBub2RlKSB7CiAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgbm9kZS52YXJpYWJsZS5pbml0aWFsaXplciwgY29uc3QgVW5rbm93blR5cGUoKSwgIWluZmVycmVyLmlzVG9wTGV2ZWwpOwogIH0KCiAgdm9pZCB2aXNpdFNoYWRvd0ludmFsaWRGaWVsZEluaXRpYWxpemVyKFNoYWRvd0ludmFsaWRGaWVsZEluaXRpYWxpemVyIG5vZGUpIHsKICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihub2RlLnZhbHVlLCBub2RlLmZpZWxkLnR5cGUsICFpbmZlcnJlci5pc1RvcExldmVsKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgdmlzaXRJc0V4cHJlc3Npb24oCiAgICAgIElzRXhwcmVzc2lvbiBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgIG5vZGUub3BlcmFuZCwgY29uc3QgVW5rbm93blR5cGUoKSwgIWluZmVycmVyLmlzVG9wTGV2ZWwpOwogICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0KGluZmVycmVyLmNvcmVUeXBlcy5ib29sQ2xhc3MucmF3VHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBOdWxsIHZpc2l0TGFiZWxlZFN0YXRlbWVudChMYWJlbGVkU3RhdGVtZW50IG5vZGUsIF8pIHsKICAgIGluZmVycmVyLmluZmVyU3RhdGVtZW50KG5vZGUuYm9keSk7CiAgfQoKICBEYXJ0VHlwZSBnZXRTcHJlYWRFbGVtZW50VHlwZShEYXJ0VHlwZSBzcHJlYWRUeXBlLCBib29sIGlzTnVsbEF3YXJlKSB7CiAgICBpZiAoc3ByZWFkVHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgIEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlID0gaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50CiAgICAgICAgICAuZ2V0VHlwZUFzSW5zdGFuY2VPZihzcHJlYWRUeXBlLCBpbmZlcnJlci5jb3JlVHlwZXMuaXRlcmFibGVDbGFzcyk7CiAgICAgIGlmIChzdXBlcnR5cGUgIT0gbnVsbCkgcmV0dXJuIHN1cGVydHlwZS50eXBlQXJndW1lbnRzWzBdOwogICAgICBpZiAoc3ByZWFkVHlwZS5jbGFzc05vZGUgPT0gaW5mZXJyZXIuY29yZVR5cGVzLm51bGxDbGFzcyAmJiBpc051bGxBd2FyZSkgewogICAgICAgIHJldHVybiBzcHJlYWRUeXBlOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKHNwcmVhZFR5cGUgaXMgRHluYW1pY1R5cGUpIHJldHVybiBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBEYXJ0VHlwZSBpbmZlckVsZW1lbnQoCiAgICAgIEV4cHJlc3Npb24gZWxlbWVudCwKICAgICAgVHJlZU5vZGUgcGFyZW50LAogICAgICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGVBcmd1bWVudCwKICAgICAgTWFwPFRyZWVOb2RlLCBEYXJ0VHlwZT4gaW5mZXJyZWRTcHJlYWRUeXBlcywKICAgICAgYm9vbCBpbmZlcmVuY2VOZWVkZWQsCiAgICAgIGJvb2wgdHlwZUNoZWNrc05lZWRlZCkgewogICAgaWYgKGVsZW1lbnQgaXMgU3ByZWFkRWxlbWVudCkgewogICAgICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHNwcmVhZFJlc3VsdCA9IGluZmVycmVyLmluZmVyRXhwcmVzc2lvbigKICAgICAgICAgIGVsZW1lbnQuZXhwcmVzc2lvbiwKICAgICAgICAgIG5ldyBJbnRlcmZhY2VUeXBlKGluZmVycmVyLmNvcmVUeXBlcy5pdGVyYWJsZUNsYXNzLAogICAgICAgICAgICAgIDxEYXJ0VHlwZT5baW5mZXJyZWRUeXBlQXJndW1lbnRdKSwKICAgICAgICAgIGluZmVyZW5jZU5lZWRlZCB8fCB0eXBlQ2hlY2tzTmVlZGVkLAogICAgICAgICAgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICAgIERhcnRUeXBlIHNwcmVhZFR5cGUgPSBzcHJlYWRSZXN1bHQuaW5mZXJyZWRUeXBlOwogICAgICBpbmZlcnJlZFNwcmVhZFR5cGVzW2VsZW1lbnQuZXhwcmVzc2lvbl0gPSBzcHJlYWRUeXBlOwogICAgICBpZiAodHlwZUNoZWNrc05lZWRlZCkgewogICAgICAgIERhcnRUeXBlIHNwcmVhZEVsZW1lbnRUeXBlID0KICAgICAgICAgICAgZ2V0U3ByZWFkRWxlbWVudFR5cGUoc3ByZWFkVHlwZSwgZWxlbWVudC5pc051bGxBd2FyZSk7CiAgICAgICAgaWYgKHNwcmVhZEVsZW1lbnRUeXBlID09IG51bGwpIHsKICAgICAgICAgIGlmIChzcHJlYWRUeXBlIGlzIEludGVyZmFjZVR5cGUgJiYKICAgICAgICAgICAgICBzcHJlYWRUeXBlLmNsYXNzTm9kZSA9PSBpbmZlcnJlci5jb3JlVHlwZXMubnVsbENsYXNzICYmCiAgICAgICAgICAgICAgIWVsZW1lbnQuaXNOdWxsQXdhcmUpIHsKICAgICAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZCgKICAgICAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICAgICBpbmZlcnJlci5oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oaW5mZXJyZXIuaGVscGVyCiAgICAgICAgICAgICAgICAgICAgLmJ1aWxkUHJvYmxlbShtZXNzYWdlTm9uTnVsbEF3YXJlU3ByZWFkSXNOdWxsLAogICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmV4cHJlc3Npb24uZmlsZU9mZnNldCwgMSkpKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBhcmVudC5yZXBsYWNlQ2hpbGQoCiAgICAgICAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgICAgICAgaW5mZXJyZXIuaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGluZmVycmVyLmhlbHBlcgogICAgICAgICAgICAgICAgICAgIC5idWlsZFByb2JsZW0oCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlU3ByZWFkVHlwZU1pc21hdGNoLndpdGhBcmd1bWVudHMoc3ByZWFkVHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZXhwcmVzc2lvbi5maWxlT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAxKSkpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc3ByZWFkVHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgICBpZiAoIWluZmVycmVyLmlzQXNzaWduYWJsZShpbmZlcnJlZFR5cGVBcmd1bWVudCwgc3ByZWFkRWxlbWVudFR5cGUpKSB7CiAgICAgICAgICAgIHBhcmVudC5yZXBsYWNlQ2hpbGQoCiAgICAgICAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgICAgICAgaW5mZXJyZXIuaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGluZmVycmVyLmhlbHBlcgogICAgICAgICAgICAgICAgICAgIC5idWlsZFByb2JsZW0oCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlU3ByZWFkRWxlbWVudFR5cGVNaXNtYXRjaC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByZWFkRWxlbWVudFR5cGUsIGluZmVycmVkVHlwZUFyZ3VtZW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5leHByZXNzaW9uLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIDEpKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIFVzZSAnZHluYW1pYycgZm9yIGVycm9yIHJlY292ZXJ5LgogICAgICByZXR1cm4gZWxlbWVudC5lbGVtZW50VHlwZSA9CiAgICAgICAgICBnZXRTcHJlYWRFbGVtZW50VHlwZShzcHJlYWRUeXBlLCBlbGVtZW50LmlzTnVsbEF3YXJlKSA/PwogICAgICAgICAgICAgIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQgaXMgSWZFbGVtZW50KSB7CiAgICAgIERhcnRUeXBlIGJvb2xUeXBlID0gaW5mZXJyZXIuY29yZVR5cGVzLmJvb2xDbGFzcy5yYXdUeXBlOwogICAgICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IGNvbmRpdGlvblJlc3VsdCA9IGluZmVycmVyLmluZmVyRXhwcmVzc2lvbigKICAgICAgICAgIGVsZW1lbnQuY29uZGl0aW9uLCBib29sVHlwZSwgdHlwZUNoZWNrc05lZWRlZCwKICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IGZhbHNlKTsKICAgICAgRGFydFR5cGUgY29uZGl0aW9uVHlwZSA9IGNvbmRpdGlvblJlc3VsdC5pbmZlcnJlZFR5cGU7CiAgICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoYm9vbFR5cGUsIGNvbmRpdGlvblR5cGUsIGVsZW1lbnQuY29uZGl0aW9uLAogICAgICAgICAgZWxlbWVudC5jb25kaXRpb24uZmlsZU9mZnNldCk7CiAgICAgIERhcnRUeXBlIHRoZW5UeXBlID0gaW5mZXJFbGVtZW50KAogICAgICAgICAgZWxlbWVudC50aGVuLAogICAgICAgICAgZWxlbWVudCwKICAgICAgICAgIGluZmVycmVkVHlwZUFyZ3VtZW50LAogICAgICAgICAgaW5mZXJyZWRTcHJlYWRUeXBlcywKICAgICAgICAgIGluZmVyZW5jZU5lZWRlZCwKICAgICAgICAgIHR5cGVDaGVja3NOZWVkZWQpOwogICAgICBEYXJ0VHlwZSBvdGhlcndpc2VUeXBlOwogICAgICBpZiAoZWxlbWVudC5vdGhlcndpc2UgIT0gbnVsbCkgewogICAgICAgIG90aGVyd2lzZVR5cGUgPSBpbmZlckVsZW1lbnQoCiAgICAgICAgICAgIGVsZW1lbnQub3RoZXJ3aXNlLAogICAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgICBpbmZlcnJlZFR5cGVBcmd1bWVudCwKICAgICAgICAgICAgaW5mZXJyZWRTcHJlYWRUeXBlcywKICAgICAgICAgICAgaW5mZXJlbmNlTmVlZGVkLAogICAgICAgICAgICB0eXBlQ2hlY2tzTmVlZGVkKTsKICAgICAgfQogICAgICByZXR1cm4gb3RoZXJ3aXNlVHlwZSA9PSBudWxsCiAgICAgICAgICA/IHRoZW5UeXBlCiAgICAgICAgICA6IGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudAogICAgICAgICAgICAgIC5nZXRTdGFuZGFyZFVwcGVyQm91bmQodGhlblR5cGUsIG90aGVyd2lzZVR5cGUpOwogICAgfSBlbHNlIGlmIChlbGVtZW50IGlzIEZvckVsZW1lbnQpIHsKICAgICAgZm9yIChWYXJpYWJsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uIGluIGVsZW1lbnQudmFyaWFibGVzKSB7CiAgICAgICAgaWYgKGRlY2xhcmF0aW9uLm5hbWUgPT0gbnVsbCkgewogICAgICAgICAgaWYgKGRlY2xhcmF0aW9uLmluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgICAgICAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCBpbml0aWFsaXplclJlc3VsdCA9CiAgICAgICAgICAgICAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oZGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIsCiAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24udHlwZSwgaW5mZXJlbmNlTmVlZGVkIHx8IHR5cGVDaGVja3NOZWVkZWQsCiAgICAgICAgICAgICAgICAgICAgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICAgICAgICAgIGRlY2xhcmF0aW9uLnR5cGUgPSBpbml0aWFsaXplclJlc3VsdC5pbmZlcnJlZFR5cGU7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGluZmVycmVyLmluZmVyU3RhdGVtZW50KGRlY2xhcmF0aW9uKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGVsZW1lbnQuY29uZGl0aW9uICE9IG51bGwpIHsKICAgICAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgICAgIGVsZW1lbnQuY29uZGl0aW9uLAogICAgICAgICAgICBpbmZlcnJlci5jb3JlVHlwZXMuYm9vbENsYXNzLnJhd1R5cGUsCiAgICAgICAgICAgIGluZmVyZW5jZU5lZWRlZCB8fCB0eXBlQ2hlY2tzTmVlZGVkLAogICAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiBmYWxzZSk7CiAgICAgIH0KICAgICAgZm9yIChFeHByZXNzaW9uIGV4cHJlc3Npb24gaW4gZWxlbWVudC51cGRhdGVzKSB7CiAgICAgICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKGV4cHJlc3Npb24sIGNvbnN0IFVua25vd25UeXBlKCksCiAgICAgICAgICAgIGluZmVyZW5jZU5lZWRlZCB8fCB0eXBlQ2hlY2tzTmVlZGVkLAogICAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgICAgfQogICAgICByZXR1cm4gaW5mZXJFbGVtZW50KGVsZW1lbnQuYm9keSwgZWxlbWVudCwgaW5mZXJyZWRUeXBlQXJndW1lbnQsCiAgICAgICAgICBpbmZlcnJlZFNwcmVhZFR5cGVzLCBpbmZlcmVuY2VOZWVkZWQsIHR5cGVDaGVja3NOZWVkZWQpOwogICAgfSBlbHNlIGlmIChlbGVtZW50IGlzIEZvckluRWxlbWVudCkgewogICAgICBpZiAoZWxlbWVudC52YXJpYWJsZS5uYW1lID09IG51bGwpIHsKICAgICAgICBoYW5kbGVGb3JJbldpdGhvdXRWYXJpYWJsZSgKICAgICAgICAgICAgZWxlbWVudC52YXJpYWJsZSwgZWxlbWVudC5pdGVyYWJsZSwgZWxlbWVudC5wcm9sb2d1ZSwKICAgICAgICAgICAgaXNBc3luYzogZWxlbWVudC5pc0FzeW5jKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBoYW5kbGVGb3JJbkRlY2xhcmluZ1ZhcmlhYmxlKAogICAgICAgICAgICBlbGVtZW50LnZhcmlhYmxlLCBlbGVtZW50Lml0ZXJhYmxlLCBlbGVtZW50LnByb2xvZ3VlLAogICAgICAgICAgICBpc0FzeW5jOiBlbGVtZW50LmlzQXN5bmMpOwogICAgICB9CiAgICAgIGlmIChlbGVtZW50LnByb2JsZW0gIT0gbnVsbCkgewogICAgICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihlbGVtZW50LnByb2JsZW0sIGNvbnN0IFVua25vd25UeXBlKCksCiAgICAgICAgICAgIGluZmVyZW5jZU5lZWRlZCB8fCB0eXBlQ2hlY2tzTmVlZGVkLAogICAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgICAgfQogICAgICByZXR1cm4gaW5mZXJFbGVtZW50KGVsZW1lbnQuYm9keSwgZWxlbWVudCwgaW5mZXJyZWRUeXBlQXJndW1lbnQsCiAgICAgICAgICBpbmZlcnJlZFNwcmVhZFR5cGVzLCBpbmZlcmVuY2VOZWVkZWQsIHR5cGVDaGVja3NOZWVkZWQpOwogICAgfSBlbHNlIHsKICAgICAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCByZXN1bHQgPSBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgICBlbGVtZW50LCBpbmZlcnJlZFR5cGVBcmd1bWVudCwgaW5mZXJlbmNlTmVlZGVkIHx8IHR5cGVDaGVja3NOZWVkZWQsCiAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlID0gcmVzdWx0LmluZmVycmVkVHlwZTsKICAgICAgaWYgKGluZmVycmVkVHlwZUFyZ3VtZW50IGlzISBVbmtub3duVHlwZSkgewogICAgICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoCiAgICAgICAgICAgIGluZmVycmVkVHlwZUFyZ3VtZW50LCBpbmZlcnJlZFR5cGUsIGVsZW1lbnQsIGVsZW1lbnQuZmlsZU9mZnNldCwKICAgICAgICAgICAgaXNWb2lkQWxsb3dlZDogaW5mZXJyZWRUeXBlQXJndW1lbnQgaXMgVm9pZFR5cGUpOwogICAgICB9CiAgICAgIHJldHVybiBpbmZlcnJlZFR5cGU7CiAgICB9CiAgfQoKICB2b2lkIGNoZWNrRWxlbWVudChFeHByZXNzaW9uIGl0ZW0sIEV4cHJlc3Npb24gcGFyZW50LCBEYXJ0VHlwZSB0eXBlQXJndW1lbnQsCiAgICAgIE1hcDxUcmVlTm9kZSwgRGFydFR5cGU+IGluZmVycmVkU3ByZWFkVHlwZXMpIHsKICAgIGlmIChpdGVtIGlzIFNwcmVhZEVsZW1lbnQpIHsKICAgICAgRGFydFR5cGUgc3ByZWFkVHlwZSA9IGluZmVycmVkU3ByZWFkVHlwZXNbaXRlbS5leHByZXNzaW9uXTsKICAgICAgaWYgKHNwcmVhZFR5cGUgaXMgRHluYW1pY1R5cGUpIHsKICAgICAgICBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKGluZmVycmVyLmNvcmVUeXBlcy5pdGVyYWJsZUNsYXNzLnJhd1R5cGUsCiAgICAgICAgICAgIHNwcmVhZFR5cGUsIGl0ZW0uZXhwcmVzc2lvbiwgaXRlbS5leHByZXNzaW9uLmZpbGVPZmZzZXQpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGl0ZW0gaXMgSWZFbGVtZW50KSB7CiAgICAgIGNoZWNrRWxlbWVudChpdGVtLnRoZW4sIGl0ZW0sIHR5cGVBcmd1bWVudCwgaW5mZXJyZWRTcHJlYWRUeXBlcyk7CiAgICAgIGlmIChpdGVtLm90aGVyd2lzZSAhPSBudWxsKSB7CiAgICAgICAgY2hlY2tFbGVtZW50KGl0ZW0ub3RoZXJ3aXNlLCBpdGVtLCB0eXBlQXJndW1lbnQsIGluZmVycmVkU3ByZWFkVHlwZXMpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGl0ZW0gaXMgRm9yRWxlbWVudCkgewogICAgICBpZiAoaXRlbS5jb25kaXRpb24gIT0gbnVsbCkgewogICAgICAgIERhcnRUeXBlIGNvbmRpdGlvblR5cGUgPSBnZXRJbmZlcnJlZFR5cGUoaXRlbS5jb25kaXRpb24sIGluZmVycmVyKTsKICAgICAgICBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKGluZmVycmVyLmNvcmVUeXBlcy5ib29sQ2xhc3MucmF3VHlwZSwKICAgICAgICAgICAgY29uZGl0aW9uVHlwZSwgaXRlbS5jb25kaXRpb24sIGl0ZW0uY29uZGl0aW9uLmZpbGVPZmZzZXQpOwogICAgICB9CiAgICAgIGNoZWNrRWxlbWVudChpdGVtLmJvZHksIGl0ZW0sIHR5cGVBcmd1bWVudCwgaW5mZXJyZWRTcHJlYWRUeXBlcyk7CiAgICB9IGVsc2UgaWYgKGl0ZW0gaXMgRm9ySW5FbGVtZW50KSB7CiAgICAgIGNoZWNrRWxlbWVudChpdGVtLmJvZHksIGl0ZW0sIHR5cGVBcmd1bWVudCwgaW5mZXJyZWRTcHJlYWRUeXBlcyk7CiAgICB9IGVsc2UgewogICAgICAvLyBEbyBub3RoaW5nLiAgQXNzaWduYWJpbGl0eSBjaGVja3MgYXJlIGRvbmUgZHVyaW5nIHR5cGUgaW5mZXJlbmNlLgogICAgfQogIH0KCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCB2aXNpdExpc3RMaXRlcmFsSnVkZ21lbnQoCiAgICAgIExpc3RMaXRlcmFsSnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIENsYXNzIGxpc3RDbGFzcyA9IGluZmVycmVyLmNvcmVUeXBlcy5saXN0Q2xhc3M7CiAgICBJbnRlcmZhY2VUeXBlIGxpc3RUeXBlID0gbGlzdENsYXNzLnRoaXNUeXBlOwogICAgTGlzdDxEYXJ0VHlwZT4gaW5mZXJyZWRUeXBlczsKICAgIERhcnRUeXBlIGluZmVycmVkVHlwZUFyZ3VtZW50OwogICAgTGlzdDxEYXJ0VHlwZT4gZm9ybWFsVHlwZXM7CiAgICBMaXN0PERhcnRUeXBlPiBhY3R1YWxUeXBlczsKICAgIGJvb2wgaW5mZXJlbmNlTmVlZGVkID0gbm9kZS50eXBlQXJndW1lbnQgaXMgSW1wbGljaXRUeXBlQXJndW1lbnQ7CiAgICBib29sIHR5cGVDaGVja3NOZWVkZWQgPSAhaW5mZXJyZXIuaXNUb3BMZXZlbDsKICAgIE1hcDxUcmVlTm9kZSwgRGFydFR5cGU+IGluZmVycmVkU3ByZWFkVHlwZXM7CiAgICBpZiAoaW5mZXJlbmNlTmVlZGVkIHx8IHR5cGVDaGVja3NOZWVkZWQpIHsKICAgICAgZm9ybWFsVHlwZXMgPSBbXTsKICAgICAgYWN0dWFsVHlwZXMgPSBbXTsKICAgICAgaW5mZXJyZWRTcHJlYWRUeXBlcyA9IG5ldyBNYXA8VHJlZU5vZGUsIERhcnRUeXBlPi5pZGVudGl0eSgpOwogICAgfQogICAgaWYgKGluZmVyZW5jZU5lZWRlZCkgewogICAgICBpbmZlcnJlZFR5cGVzID0gW2NvbnN0IFVua25vd25UeXBlKCldOwogICAgICBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQuaW5mZXJHZW5lcmljRnVuY3Rpb25PclR5cGUobGlzdFR5cGUsCiAgICAgICAgICBsaXN0Q2xhc3MudHlwZVBhcmFtZXRlcnMsIG51bGwsIG51bGwsIHR5cGVDb250ZXh0LCBpbmZlcnJlZFR5cGVzLAogICAgICAgICAgaXNDb25zdDogbm9kZS5pc0NvbnN0KTsKICAgICAgaW5mZXJyZWRUeXBlQXJndW1lbnQgPSBpbmZlcnJlZFR5cGVzWzBdOwogICAgfSBlbHNlIHsKICAgICAgaW5mZXJyZWRUeXBlQXJndW1lbnQgPSBub2RlLnR5cGVBcmd1bWVudDsKICAgIH0KICAgIGlmIChpbmZlcmVuY2VOZWVkZWQgfHwgdHlwZUNoZWNrc05lZWRlZCkgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGUuZXhwcmVzc2lvbnMubGVuZ3RoOyArK2kpIHsKICAgICAgICBEYXJ0VHlwZSB0eXBlID0gaW5mZXJFbGVtZW50KAogICAgICAgICAgICBub2RlLmV4cHJlc3Npb25zW2ldLAogICAgICAgICAgICBub2RlLAogICAgICAgICAgICBpbmZlcnJlZFR5cGVBcmd1bWVudCwKICAgICAgICAgICAgaW5mZXJyZWRTcHJlYWRUeXBlcywKICAgICAgICAgICAgaW5mZXJlbmNlTmVlZGVkLAogICAgICAgICAgICB0eXBlQ2hlY2tzTmVlZGVkKTsKICAgICAgICBhY3R1YWxUeXBlcy5hZGQodHlwZSk7CiAgICAgICAgaWYgKGluZmVyZW5jZU5lZWRlZCkgewogICAgICAgICAgZm9ybWFsVHlwZXMuYWRkKGxpc3RUeXBlLnR5cGVBcmd1bWVudHNbMF0pOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKGluZmVyZW5jZU5lZWRlZCkgewogICAgICBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQuaW5mZXJHZW5lcmljRnVuY3Rpb25PclR5cGUoCiAgICAgICAgICBsaXN0VHlwZSwKICAgICAgICAgIGxpc3RDbGFzcy50eXBlUGFyYW1ldGVycywKICAgICAgICAgIGZvcm1hbFR5cGVzLAogICAgICAgICAgYWN0dWFsVHlwZXMsCiAgICAgICAgICB0eXBlQ29udGV4dCwKICAgICAgICAgIGluZmVycmVkVHlwZXMpOwogICAgICBpbmZlcnJlZFR5cGVBcmd1bWVudCA9IGluZmVycmVkVHlwZXNbMF07CiAgICAgIGluZmVycmVyLmluc3RydW1lbnRhdGlvbj8ucmVjb3JkKAogICAgICAgICAgaW5mZXJyZXIudXJpLAogICAgICAgICAgbm9kZS5maWxlT2Zmc2V0LAogICAgICAgICAgJ3R5cGVBcmdzJywKICAgICAgICAgIG5ldyBJbnN0cnVtZW50YXRpb25WYWx1ZUZvclR5cGVBcmdzKFtpbmZlcnJlZFR5cGVBcmd1bWVudF0pKTsKICAgICAgbm9kZS50eXBlQXJndW1lbnQgPSBpbmZlcnJlZFR5cGVBcmd1bWVudDsKICAgIH0KICAgIGlmICh0eXBlQ2hlY2tzTmVlZGVkKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZS5leHByZXNzaW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgIGNoZWNrRWxlbWVudCgKICAgICAgICAgICAgbm9kZS5leHByZXNzaW9uc1tpXSwgbm9kZSwgbm9kZS50eXBlQXJndW1lbnQsIGluZmVycmVkU3ByZWFkVHlwZXMpOwogICAgICB9CiAgICB9CiAgICBub2RlLmluZmVycmVkVHlwZSA9IG5ldyBJbnRlcmZhY2VUeXBlKGxpc3RDbGFzcywgW2luZmVycmVkVHlwZUFyZ3VtZW50XSk7CiAgICBpZiAoIWluZmVycmVyLmlzVG9wTGV2ZWwpIHsKICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IGluZmVycmVyLmxpYnJhcnk7CiAgICAgIGlmIChpbmZlcmVuY2VOZWVkZWQpIHsKICAgICAgICBsaWJyYXJ5LmNoZWNrQm91bmRzSW5MaXN0TGl0ZXJhbCgKICAgICAgICAgICAgbm9kZSwgaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50LCBpbmZlcnJlci5oZWxwZXIudXJpLAogICAgICAgICAgICBpbmZlcnJlZDogdHJ1ZSk7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQobm9kZS5pbmZlcnJlZFR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCB2aXNpdExvZ2ljYWxFeHByZXNzaW9uKAogICAgICBMb2dpY2FsRXhwcmVzc2lvbiBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgSW50ZXJmYWNlVHlwZSBib29sVHlwZSA9IGluZmVycmVyLmNvcmVUeXBlcy5ib29sQ2xhc3MucmF3VHlwZTsKICAgIEV4cHJlc3Npb24gbGVmdCA9IG5vZGUubGVmdDsKICAgIEV4cHJlc3Npb24gcmlnaHQgPSBub2RlLnJpZ2h0OwogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKGxlZnQsIGJvb2xUeXBlLCAhaW5mZXJyZXIuaXNUb3BMZXZlbCk7CiAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24ocmlnaHQsIGJvb2xUeXBlLCAhaW5mZXJyZXIuaXNUb3BMZXZlbCk7CiAgICBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKGJvb2xUeXBlLCBnZXRJbmZlcnJlZFR5cGUobGVmdCwgaW5mZXJyZXIpLAogICAgICAgIG5vZGUubGVmdCwgbm9kZS5sZWZ0LmZpbGVPZmZzZXQpOwogICAgaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZShib29sVHlwZSwgZ2V0SW5mZXJyZWRUeXBlKHJpZ2h0LCBpbmZlcnJlciksCiAgICAgICAgbm9kZS5yaWdodCwgbm9kZS5yaWdodC5maWxlT2Zmc2V0KTsKICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChib29sVHlwZSk7CiAgfQoKICAvLyBDYWxjdWxhdGVzIHRoZSBrZXkgYW5kIHRoZSB2YWx1ZSB0eXBlIG9mIGEgc3ByZWFkIG1hcCBlbnRyeSBvZiB0eXBlCiAgLy8gc3ByZWFkTWFwRW50cnlUeXBlIGFuZCBzdG9yZXMgdGhlbSBpbiBvdXRwdXQgaW4gcG9zaXRpb25zIG9mZnNldCBhbmQgb2Zmc2V0CiAgLy8gKyAxLiAgSWYgdGhlIHR5cGVzIGNhbid0IGJlIGNhbGN1bGF0ZWQsIGZvciBleGFtcGxlLCBpZiBzcHJlYWRNYXBFbnRyeVR5cGUKICAvLyBpcyBhIGZ1bmN0aW9uIHR5cGUsIHRoZSBvcmlnaW5hbCB2YWx1ZXMgaW4gb3V0cHV0IGFyZSBwcmVzZXJ2ZWQuCiAgdm9pZCBzdG9yZVNwcmVhZE1hcEVudHJ5RWxlbWVudFR5cGVzKERhcnRUeXBlIHNwcmVhZE1hcEVudHJ5VHlwZSwKICAgICAgYm9vbCBpc051bGxBd2FyZSwgTGlzdDxEYXJ0VHlwZT4gb3V0cHV0LCBpbnQgb2Zmc2V0KSB7CiAgICBpZiAoc3ByZWFkTWFwRW50cnlUeXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUgPSBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQKICAgICAgICAgIC5nZXRUeXBlQXNJbnN0YW5jZU9mKHNwcmVhZE1hcEVudHJ5VHlwZSwgaW5mZXJyZXIuY29yZVR5cGVzLm1hcENsYXNzKTsKICAgICAgaWYgKHN1cGVydHlwZSAhPSBudWxsKSB7CiAgICAgICAgb3V0cHV0W29mZnNldF0gPSBzdXBlcnR5cGUudHlwZUFyZ3VtZW50c1swXTsKICAgICAgICBvdXRwdXRbb2Zmc2V0ICsgMV0gPSBzdXBlcnR5cGUudHlwZUFyZ3VtZW50c1sxXTsKICAgICAgfSBlbHNlIGlmIChzcHJlYWRNYXBFbnRyeVR5cGUuY2xhc3NOb2RlID09IGluZmVycmVyLmNvcmVUeXBlcy5udWxsQ2xhc3MgJiYKICAgICAgICAgIGlzTnVsbEF3YXJlKSB7CiAgICAgICAgb3V0cHV0W29mZnNldF0gPSBvdXRwdXRbb2Zmc2V0ICsgMV0gPSBzcHJlYWRNYXBFbnRyeVR5cGU7CiAgICAgIH0KICAgIH0KICAgIGlmIChzcHJlYWRNYXBFbnRyeVR5cGUgaXMgRHluYW1pY1R5cGUpIHsKICAgICAgb3V0cHV0W29mZnNldF0gPSBvdXRwdXRbb2Zmc2V0ICsgMV0gPSBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgfQogIH0KCiAgLy8gTm90ZSB0aGF0IGluZmVyTWFwRW50cnkgYWRkcyBleGFjdGx5IHR3byBlbGVtZW50cyB0byBhY3R1YWxUeXBlcyAtLSB0aGUKICAvLyBhY3R1YWwgdHlwZXMgb2YgdGhlIGtleSBhbmQgdGhlIHZhbHVlLiAgVGhlIHNhbWUgdGVjaG5pcXVlIGlzIHVzZWQgZm9yCiAgLy8gYWN0dWFsVHlwZXNGb3JTZXQsIG9ubHkgaW5mZXJNYXBFbnRyeSBhZGRzIGV4YWN0bHkgb25lIGVsZW1lbnQgdG8gdGhhdAogIC8vIGxpc3Q6IHRoZSBhY3R1YWwgdHlwZSBvZiB0aGUgaXRlcmFibGUgc3ByZWFkIGVsZW1lbnRzIGluIGNhc2UgdGhlIG1hcAogIC8vIGxpdGVyYWwgd2lsbCBiZSBkaXNhbWJpZ3VhdGVkIGFzIGEgc2V0IGxpdGVyYWwgbGF0ZXIuCiAgdm9pZCBpbmZlck1hcEVudHJ5KAogICAgICBNYXBFbnRyeSBlbnRyeSwKICAgICAgVHJlZU5vZGUgcGFyZW50LAogICAgICBEYXJ0VHlwZSBpbmZlcnJlZEtleVR5cGUsCiAgICAgIERhcnRUeXBlIGluZmVycmVkVmFsdWVUeXBlLAogICAgICBEYXJ0VHlwZSBzcHJlYWRDb250ZXh0LAogICAgICBMaXN0PERhcnRUeXBlPiBhY3R1YWxUeXBlcywKICAgICAgTGlzdDxEYXJ0VHlwZT4gYWN0dWFsVHlwZXNGb3JTZXQsCiAgICAgIE1hcDxUcmVlTm9kZSwgRGFydFR5cGU+IGluZmVycmVkU3ByZWFkVHlwZXMsCiAgICAgIGJvb2wgaW5mZXJlbmNlTmVlZGVkLAogICAgICBib29sIHR5cGVDaGVja3NOZWVkZWQpIHsKICAgIGlmIChlbnRyeSBpcyBTcHJlYWRNYXBFbnRyeSkgewogICAgICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHNwcmVhZFJlc3VsdCA9IGluZmVycmVyLmluZmVyRXhwcmVzc2lvbigKICAgICAgICAgIGVudHJ5LmV4cHJlc3Npb24sIHNwcmVhZENvbnRleHQsIGluZmVyZW5jZU5lZWRlZCB8fCB0eXBlQ2hlY2tzTmVlZGVkLAogICAgICAgICAgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICAgIERhcnRUeXBlIHNwcmVhZFR5cGUgPSBzcHJlYWRSZXN1bHQuaW5mZXJyZWRUeXBlOwogICAgICBpbmZlcnJlZFNwcmVhZFR5cGVzW2VudHJ5LmV4cHJlc3Npb25dID0gc3ByZWFkVHlwZTsKICAgICAgaW50IGxlbmd0aCA9IGFjdHVhbFR5cGVzLmxlbmd0aDsKICAgICAgYWN0dWFsVHlwZXMuYWRkKG51bGwpOwogICAgICBhY3R1YWxUeXBlcy5hZGQobnVsbCk7CiAgICAgIHN0b3JlU3ByZWFkTWFwRW50cnlFbGVtZW50VHlwZXMoCiAgICAgICAgICBzcHJlYWRUeXBlLCBlbnRyeS5pc051bGxBd2FyZSwgYWN0dWFsVHlwZXMsIGxlbmd0aCk7CiAgICAgIERhcnRUeXBlIGFjdHVhbEtleVR5cGUgPSBhY3R1YWxUeXBlc1tsZW5ndGhdOwogICAgICBEYXJ0VHlwZSBhY3R1YWxWYWx1ZVR5cGUgPSBhY3R1YWxUeXBlc1tsZW5ndGggKyAxXTsKICAgICAgRGFydFR5cGUgYWN0dWFsRWxlbWVudFR5cGUgPQogICAgICAgICAgZ2V0U3ByZWFkRWxlbWVudFR5cGUoc3ByZWFkVHlwZSwgZW50cnkuaXNOdWxsQXdhcmUpOwoKICAgICAgaWYgKHR5cGVDaGVja3NOZWVkZWQpIHsKICAgICAgICBpZiAoYWN0dWFsS2V5VHlwZSA9PSBudWxsKSB7CiAgICAgICAgICBpZiAoc3ByZWFkVHlwZSBpcyBJbnRlcmZhY2VUeXBlICYmCiAgICAgICAgICAgICAgc3ByZWFkVHlwZS5jbGFzc05vZGUgPT0gaW5mZXJyZXIuY29yZVR5cGVzLm51bGxDbGFzcyAmJgogICAgICAgICAgICAgICFlbnRyeS5pc051bGxBd2FyZSkgewogICAgICAgICAgICBwYXJlbnQucmVwbGFjZUNoaWxkKAogICAgICAgICAgICAgICAgZW50cnksCiAgICAgICAgICAgICAgICBuZXcgTWFwRW50cnkoCiAgICAgICAgICAgICAgICAgICAgaW5mZXJyZXIuaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGluZmVycmVyLmhlbHBlcgogICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGRQcm9ibGVtKG1lc3NhZ2VOb25OdWxsQXdhcmVTcHJlYWRJc051bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5leHByZXNzaW9uLmZpbGVPZmZzZXQsIDEpKSwKICAgICAgICAgICAgICAgICAgICBuZXcgTnVsbExpdGVyYWwoKSkKICAgICAgICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gZW50cnkuZmlsZU9mZnNldCk7CiAgICAgICAgICB9IGVsc2UgaWYgKGFjdHVhbEVsZW1lbnRUeXBlICE9IG51bGwpIHsKICAgICAgICAgICAgLy8gRG9uJ3QgcmVwb3J0IHRoZSBlcnJvciBoZXJlLCBpdCBtaWdodCBiZSBhbiBhbWJpZ3VvdXMgU2V0LiAgVGhlCiAgICAgICAgICAgIC8vIGVycm9yIGlzIHJlcG9ydGVkIGluIGNoZWNrTWFwRW50cnkgaWYgaXQncyBkaXNhbWJpZ3VhdGVkIGFzIG1hcC4KICAgICAgICAgICAgaXRlcmFibGVTcHJlYWRUeXBlID0gc3ByZWFkVHlwZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBhcmVudC5yZXBsYWNlQ2hpbGQoCiAgICAgICAgICAgICAgICBlbnRyeSwKICAgICAgICAgICAgICAgIG5ldyBNYXBFbnRyeSgKICAgICAgICAgICAgICAgICAgICBpbmZlcnJlci5oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oaW5mZXJyZXIuaGVscGVyCiAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZFByb2JsZW0oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVNwcmVhZE1hcEVudHJ5VHlwZU1pc21hdGNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoc3ByZWFkVHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5leHByZXNzaW9uLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKSksCiAgICAgICAgICAgICAgICAgICAgbmV3IE51bGxMaXRlcmFsKCkpCiAgICAgICAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGVudHJ5LmZpbGVPZmZzZXQpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc3ByZWFkVHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgICBFeHByZXNzaW9uIGtleUVycm9yOwogICAgICAgICAgRXhwcmVzc2lvbiB2YWx1ZUVycm9yOwogICAgICAgICAgaWYgKCFpbmZlcnJlci5pc0Fzc2lnbmFibGUoaW5mZXJyZWRLZXlUeXBlLCBhY3R1YWxLZXlUeXBlKSkgewogICAgICAgICAgICBrZXlFcnJvciA9IGluZmVycmVyLmhlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbigKICAgICAgICAgICAgICAgIGluZmVycmVyLmhlbHBlci5idWlsZFByb2JsZW0oCiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVTcHJlYWRNYXBFbnRyeUVsZW1lbnRLZXlUeXBlTWlzbWF0Y2gud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsS2V5VHlwZSwgaW5mZXJyZWRLZXlUeXBlKSwKICAgICAgICAgICAgICAgICAgICBlbnRyeS5leHByZXNzaW9uLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgMSkpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCFpbmZlcnJlci5pc0Fzc2lnbmFibGUoaW5mZXJyZWRWYWx1ZVR5cGUsIGFjdHVhbFZhbHVlVHlwZSkpIHsKICAgICAgICAgICAgdmFsdWVFcnJvciA9IGluZmVycmVyLmhlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbigKICAgICAgICAgICAgICAgIGluZmVycmVyLmhlbHBlci5idWlsZFByb2JsZW0oCiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVTcHJlYWRNYXBFbnRyeUVsZW1lbnRWYWx1ZVR5cGVNaXNtYXRjaAogICAgICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhhY3R1YWxWYWx1ZVR5cGUsIGluZmVycmVkVmFsdWVUeXBlKSwKICAgICAgICAgICAgICAgICAgICBlbnRyeS5leHByZXNzaW9uLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgMSkpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGtleUVycm9yICE9IG51bGwgfHwgdmFsdWVFcnJvciAhPSBudWxsKSB7CiAgICAgICAgICAgIGtleUVycm9yID8/PSBuZXcgTnVsbExpdGVyYWwoKTsKICAgICAgICAgICAgdmFsdWVFcnJvciA/Pz0gbmV3IE51bGxMaXRlcmFsKCk7CiAgICAgICAgICAgIHBhcmVudC5yZXBsYWNlQ2hpbGQoCiAgICAgICAgICAgICAgICBlbnRyeSwKICAgICAgICAgICAgICAgIG5ldyBNYXBFbnRyeShrZXlFcnJvciwgdmFsdWVFcnJvcikKICAgICAgICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gZW50cnkuZmlsZU9mZnNldCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICAvLyBVc2UgJ2R5bmFtaWMnIGZvciBlcnJvciByZWNvdmVyeS4KICAgICAgaWYgKGFjdHVhbEtleVR5cGUgPT0gbnVsbCkgewogICAgICAgIGFjdHVhbEtleVR5cGUgPSBhY3R1YWxUeXBlc1tsZW5ndGhdID0gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgICAgICBhY3R1YWxWYWx1ZVR5cGUgPSBhY3R1YWxUeXBlc1tsZW5ndGggKyAxXSA9IGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICAgIH0KICAgICAgLy8gU3RvcmUgdGhlIHR5cGUgaW4gY2FzZSBvZiBhbiBhbWJpZ3VvdXMgU2V0LiAgVXNlICdkeW5hbWljJyBmb3IgZXJyb3IKICAgICAgLy8gcmVjb3ZlcnkuCiAgICAgIGFjdHVhbFR5cGVzRm9yU2V0LmFkZChhY3R1YWxFbGVtZW50VHlwZSA/PyBjb25zdCBEeW5hbWljVHlwZSgpKTsKCiAgICAgIG1hcEVudHJ5Q2xhc3MgPz89CiAgICAgICAgICBpbmZlcnJlci5jb3JlVHlwZXMuaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdNYXBFbnRyeScpOwogICAgICAvLyBUT0RPKGRtaXRyeWFzKTogIEhhbmRsZSB0aGUgY2FzZSBvZiBhbiBhbWJpZ3VvdXMgU2V0LgogICAgICBlbnRyeS5lbnRyeVR5cGUgPSBuZXcgSW50ZXJmYWNlVHlwZSgKICAgICAgICAgIG1hcEVudHJ5Q2xhc3MsIDxEYXJ0VHlwZT5bYWN0dWFsS2V5VHlwZSwgYWN0dWFsVmFsdWVUeXBlXSk7CgogICAgICBib29sIGlzTWFwID0gaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50CiAgICAgICAgICAuaXNTdWJ0eXBlT2Yoc3ByZWFkVHlwZSwgaW5mZXJyZXIuY29yZVR5cGVzLm1hcENsYXNzLnJhd1R5cGUpOwogICAgICBib29sIGlzSXRlcmFibGUgPSBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQKICAgICAgICAgIC5pc1N1YnR5cGVPZihzcHJlYWRUeXBlLCBpbmZlcnJlci5jb3JlVHlwZXMuaXRlcmFibGVDbGFzcy5yYXdUeXBlKTsKICAgICAgaWYgKGlzTWFwICYmICFpc0l0ZXJhYmxlKSB7CiAgICAgICAgbWFwU3ByZWFkT2Zmc2V0ID0gZW50cnkuZmlsZU9mZnNldDsKICAgICAgfQogICAgICBpZiAoIWlzTWFwICYmIGlzSXRlcmFibGUpIHsKICAgICAgICBpdGVyYWJsZVNwcmVhZE9mZnNldCA9IGVudHJ5LmV4cHJlc3Npb24uZmlsZU9mZnNldDsKICAgICAgfQoKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmIChlbnRyeSBpcyBJZk1hcEVudHJ5KSB7CiAgICAgIERhcnRUeXBlIGJvb2xUeXBlID0gaW5mZXJyZXIuY29yZVR5cGVzLmJvb2xDbGFzcy5yYXdUeXBlOwogICAgICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IGNvbmRpdGlvblJlc3VsdCA9IGluZmVycmVyLmluZmVyRXhwcmVzc2lvbigKICAgICAgICAgIGVudHJ5LmNvbmRpdGlvbiwgYm9vbFR5cGUsIHR5cGVDaGVja3NOZWVkZWQsCiAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiBmYWxzZSk7CiAgICAgIERhcnRUeXBlIGNvbmRpdGlvblR5cGUgPSBjb25kaXRpb25SZXN1bHQuaW5mZXJyZWRUeXBlOwogICAgICBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKAogICAgICAgICAgYm9vbFR5cGUsIGNvbmRpdGlvblR5cGUsIGVudHJ5LmNvbmRpdGlvbiwgZW50cnkuY29uZGl0aW9uLmZpbGVPZmZzZXQpOwogICAgICAvLyBOb3RlIHRoYXQgdGhpcyByZWN1cnNpdmUgaW52b2NhdGlvbiBvZiBpbmZlck1hcEVudHJ5IHdpbGwgYWRkIHR3byB0eXBlcwogICAgICAvLyB0byBhY3R1YWxUeXBlczsgdGhleSBhcmUgdGhlIGFjdHVhbCB0eXBlcyBvZiB0aGUgY3VycmVudCBpbnZvY2F0aW9uIGlmCiAgICAgIC8vIHRoZSAnZWxzZScgYnJhbmNoIGlzIGVtcHR5LgogICAgICBpbmZlck1hcEVudHJ5KAogICAgICAgICAgZW50cnkudGhlbiwKICAgICAgICAgIGVudHJ5LAogICAgICAgICAgaW5mZXJyZWRLZXlUeXBlLAogICAgICAgICAgaW5mZXJyZWRWYWx1ZVR5cGUsCiAgICAgICAgICBzcHJlYWRDb250ZXh0LAogICAgICAgICAgYWN0dWFsVHlwZXMsCiAgICAgICAgICBhY3R1YWxUeXBlc0ZvclNldCwKICAgICAgICAgIGluZmVycmVkU3ByZWFkVHlwZXMsCiAgICAgICAgICBpbmZlcmVuY2VOZWVkZWQsCiAgICAgICAgICB0eXBlQ2hlY2tzTmVlZGVkKTsKICAgICAgaWYgKGVudHJ5Lm90aGVyd2lzZSAhPSBudWxsKSB7CiAgICAgICAgLy8gV2UgbmVlZCB0byBtb2RpZnkgdGhlIGFjdHVhbCB0eXBlcyBhZGRlZCBpbiB0aGUgcmVjdXJzaXZlIGNhbGwgdG8KICAgICAgICAvLyBpbmZlck1hcEVudHJ5LgogICAgICAgIERhcnRUeXBlIGFjdHVhbFZhbHVlVHlwZSA9IGFjdHVhbFR5cGVzLnJlbW92ZUxhc3QoKTsKICAgICAgICBEYXJ0VHlwZSBhY3R1YWxLZXlUeXBlID0gYWN0dWFsVHlwZXMucmVtb3ZlTGFzdCgpOwogICAgICAgIERhcnRUeXBlIGFjdHVhbFR5cGVGb3JTZXQgPSBhY3R1YWxUeXBlc0ZvclNldC5yZW1vdmVMYXN0KCk7CiAgICAgICAgaW5mZXJNYXBFbnRyeSgKICAgICAgICAgICAgZW50cnkub3RoZXJ3aXNlLAogICAgICAgICAgICBlbnRyeSwKICAgICAgICAgICAgaW5mZXJyZWRLZXlUeXBlLAogICAgICAgICAgICBpbmZlcnJlZFZhbHVlVHlwZSwKICAgICAgICAgICAgc3ByZWFkQ29udGV4dCwKICAgICAgICAgICAgYWN0dWFsVHlwZXMsCiAgICAgICAgICAgIGFjdHVhbFR5cGVzRm9yU2V0LAogICAgICAgICAgICBpbmZlcnJlZFNwcmVhZFR5cGVzLAogICAgICAgICAgICBpbmZlcmVuY2VOZWVkZWQsCiAgICAgICAgICAgIHR5cGVDaGVja3NOZWVkZWQpOwogICAgICAgIGludCBsZW5ndGggPSBhY3R1YWxUeXBlcy5sZW5ndGg7CiAgICAgICAgYWN0dWFsVHlwZXNbbGVuZ3RoIC0gMl0gPSBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQKICAgICAgICAgICAgLmdldFN0YW5kYXJkVXBwZXJCb3VuZChhY3R1YWxLZXlUeXBlLCBhY3R1YWxUeXBlc1tsZW5ndGggLSAyXSk7CiAgICAgICAgYWN0dWFsVHlwZXNbbGVuZ3RoIC0gMV0gPSBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQKICAgICAgICAgICAgLmdldFN0YW5kYXJkVXBwZXJCb3VuZChhY3R1YWxWYWx1ZVR5cGUsIGFjdHVhbFR5cGVzW2xlbmd0aCAtIDFdKTsKICAgICAgICBpbnQgbGVuZ3RoRm9yU2V0ID0gYWN0dWFsVHlwZXNGb3JTZXQubGVuZ3RoOwogICAgICAgIGFjdHVhbFR5cGVzRm9yU2V0W2xlbmd0aEZvclNldCAtIDFdID0gaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50CiAgICAgICAgICAgIC5nZXRTdGFuZGFyZFVwcGVyQm91bmQoCiAgICAgICAgICAgICAgICBhY3R1YWxUeXBlRm9yU2V0LCBhY3R1YWxUeXBlc0ZvclNldFtsZW5ndGhGb3JTZXQgLSAxXSk7CiAgICAgIH0KICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmIChlbnRyeSBpcyBGb3JNYXBFbnRyeSkgewogICAgICBmb3IgKFZhcmlhYmxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb24gaW4gZW50cnkudmFyaWFibGVzKSB7CiAgICAgICAgaWYgKGRlY2xhcmF0aW9uLm5hbWUgPT0gbnVsbCkgewogICAgICAgICAgaWYgKGRlY2xhcmF0aW9uLmluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgICAgICAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCByZXN1bHQgPSBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbi5pbml0aWFsaXplciwKICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uLnR5cGUsCiAgICAgICAgICAgICAgICBpbmZlcmVuY2VOZWVkZWQgfHwgdHlwZUNoZWNrc05lZWRlZCwKICAgICAgICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgICAgICAgICBkZWNsYXJhdGlvbi50eXBlID0gcmVzdWx0LmluZmVycmVkVHlwZTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgaW5mZXJyZXIuaW5mZXJTdGF0ZW1lbnQoZGVjbGFyYXRpb24pOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoZW50cnkuY29uZGl0aW9uICE9IG51bGwpIHsKICAgICAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgICAgIGVudHJ5LmNvbmRpdGlvbiwKICAgICAgICAgICAgaW5mZXJyZXIuY29yZVR5cGVzLmJvb2xDbGFzcy5yYXdUeXBlLAogICAgICAgICAgICBpbmZlcmVuY2VOZWVkZWQgfHwgdHlwZUNoZWNrc05lZWRlZCwKICAgICAgICAgICAgaXNWb2lkQWxsb3dlZDogZmFsc2UpOwogICAgICB9CiAgICAgIGZvciAoRXhwcmVzc2lvbiBleHByZXNzaW9uIGluIGVudHJ5LnVwZGF0ZXMpIHsKICAgICAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oZXhwcmVzc2lvbiwgY29uc3QgVW5rbm93blR5cGUoKSwKICAgICAgICAgICAgaW5mZXJlbmNlTmVlZGVkIHx8IHR5cGVDaGVja3NOZWVkZWQsCiAgICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgICB9CiAgICAgIC8vIEFjdHVhbCB0eXBlcyBhcmUgYWRkZWQgYnkgdGhlIHJlY3Vyc2l2ZSBjYWxsLgogICAgICByZXR1cm4gaW5mZXJNYXBFbnRyeSgKICAgICAgICAgIGVudHJ5LmJvZHksCiAgICAgICAgICBlbnRyeSwKICAgICAgICAgIGluZmVycmVkS2V5VHlwZSwKICAgICAgICAgIGluZmVycmVkVmFsdWVUeXBlLAogICAgICAgICAgc3ByZWFkQ29udGV4dCwKICAgICAgICAgIGFjdHVhbFR5cGVzLAogICAgICAgICAgYWN0dWFsVHlwZXNGb3JTZXQsCiAgICAgICAgICBpbmZlcnJlZFNwcmVhZFR5cGVzLAogICAgICAgICAgaW5mZXJlbmNlTmVlZGVkLAogICAgICAgICAgdHlwZUNoZWNrc05lZWRlZCk7CiAgICB9IGVsc2UgaWYgKGVudHJ5IGlzIEZvckluTWFwRW50cnkpIHsKICAgICAgaWYgKGVudHJ5LnZhcmlhYmxlLm5hbWUgPT0gbnVsbCkgewogICAgICAgIGhhbmRsZUZvckluV2l0aG91dFZhcmlhYmxlKAogICAgICAgICAgICBlbnRyeS52YXJpYWJsZSwgZW50cnkuaXRlcmFibGUsIGVudHJ5LnByb2xvZ3VlLAogICAgICAgICAgICBpc0FzeW5jOiBlbnRyeS5pc0FzeW5jKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBoYW5kbGVGb3JJbkRlY2xhcmluZ1ZhcmlhYmxlKAogICAgICAgICAgICBlbnRyeS52YXJpYWJsZSwgZW50cnkuaXRlcmFibGUsIGVudHJ5LnByb2xvZ3VlLAogICAgICAgICAgICBpc0FzeW5jOiBlbnRyeS5pc0FzeW5jKTsKICAgICAgfQogICAgICBpZiAoZW50cnkucHJvYmxlbSAhPSBudWxsKSB7CiAgICAgICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKGVudHJ5LnByb2JsZW0sIGNvbnN0IFVua25vd25UeXBlKCksCiAgICAgICAgICAgIGluZmVyZW5jZU5lZWRlZCB8fCB0eXBlQ2hlY2tzTmVlZGVkLAogICAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgICAgfQogICAgICAvLyBBY3R1YWwgdHlwZXMgYXJlIGFkZGVkIGJ5IHRoZSByZWN1cnNpdmUgY2FsbC4KICAgICAgaW5mZXJNYXBFbnRyeSgKICAgICAgICAgIGVudHJ5LmJvZHksCiAgICAgICAgICBlbnRyeSwKICAgICAgICAgIGluZmVycmVkS2V5VHlwZSwKICAgICAgICAgIGluZmVycmVkVmFsdWVUeXBlLAogICAgICAgICAgc3ByZWFkQ29udGV4dCwKICAgICAgICAgIGFjdHVhbFR5cGVzLAogICAgICAgICAgYWN0dWFsVHlwZXNGb3JTZXQsCiAgICAgICAgICBpbmZlcnJlZFNwcmVhZFR5cGVzLAogICAgICAgICAgaW5mZXJlbmNlTmVlZGVkLAogICAgICAgICAgdHlwZUNoZWNrc05lZWRlZCk7CiAgICB9IGVsc2UgewogICAgICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IGtleVJlc3VsdCA9IGluZmVycmVyLmluZmVyRXhwcmVzc2lvbigKICAgICAgICAgIGVudHJ5LmtleSwgaW5mZXJyZWRLZXlUeXBlLCB0cnVlLAogICAgICAgICAgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICAgIERhcnRUeXBlIGtleVR5cGUgPSBrZXlSZXN1bHQuaW5mZXJyZWRUeXBlOwogICAgICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHZhbHVlUmVzdWx0ID0gaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgICAgZW50cnkudmFsdWUsIGluZmVycmVkVmFsdWVUeXBlLCB0cnVlLAogICAgICAgICAgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICAgIERhcnRUeXBlIHZhbHVlVHlwZSA9IHZhbHVlUmVzdWx0LmluZmVycmVkVHlwZTsKICAgICAgaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZSgKICAgICAgICAgIGluZmVycmVkS2V5VHlwZSwga2V5VHlwZSwgZW50cnkua2V5LCBlbnRyeS5rZXkuZmlsZU9mZnNldCwKICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IGluZmVycmVkS2V5VHlwZSBpcyBWb2lkVHlwZSk7CiAgICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoCiAgICAgICAgICBpbmZlcnJlZFZhbHVlVHlwZSwgdmFsdWVUeXBlLCBlbnRyeS52YWx1ZSwgZW50cnkudmFsdWUuZmlsZU9mZnNldCwKICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IGluZmVycmVkVmFsdWVUeXBlIGlzIFZvaWRUeXBlKTsKICAgICAgYWN0dWFsVHlwZXMuYWRkKGtleVR5cGUpOwogICAgICBhY3R1YWxUeXBlcy5hZGQodmFsdWVUeXBlKTsKICAgICAgLy8gVXNlICdkeW5hbWljJyBmb3IgZXJyb3IgcmVjb3ZlcnkuCiAgICAgIGFjdHVhbFR5cGVzRm9yU2V0LmFkZChjb25zdCBEeW5hbWljVHlwZSgpKTsKICAgICAgbWFwRW50cnlPZmZzZXQgPSBlbnRyeS5maWxlT2Zmc2V0OwogICAgICByZXR1cm47CiAgICB9CiAgfQoKICB2b2lkIGNoZWNrTWFwRW50cnkoCiAgICAgIE1hcEVudHJ5IGVudHJ5LAogICAgICBUcmVlTm9kZSBwYXJlbnQsCiAgICAgIEV4cHJlc3Npb24gY2FjaGVkS2V5LAogICAgICBFeHByZXNzaW9uIGNhY2hlZFZhbHVlLAogICAgICBEYXJ0VHlwZSBrZXlUeXBlLAogICAgICBEYXJ0VHlwZSB2YWx1ZVR5cGUsCiAgICAgIE1hcDxUcmVlTm9kZSwgRGFydFR5cGU+IGluZmVycmVkU3ByZWFkVHlwZXMpIHsKICAgIC8vIEl0J3MgZGlzYW1iaWd1YXRlZCBhcyBhIG1hcCBsaXRlcmFsLgogICAgaWYgKGl0ZXJhYmxlU3ByZWFkT2Zmc2V0ICE9IG51bGwpIHsKICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZCgKICAgICAgICAgIGVudHJ5LAogICAgICAgICAgbmV3IE1hcEVudHJ5KAogICAgICAgICAgICAgIGluZmVycmVyLmhlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihpbmZlcnJlci5oZWxwZXIKICAgICAgICAgICAgICAgICAgLmJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlU3ByZWFkTWFwRW50cnlUeXBlTWlzbWF0Y2gKICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhpdGVyYWJsZVNwcmVhZFR5cGUpLAogICAgICAgICAgICAgICAgICAgICAgaXRlcmFibGVTcHJlYWRPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAxKSksCiAgICAgICAgICAgICAgbmV3IE51bGxMaXRlcmFsKCkpKTsKICAgIH0KICAgIGlmIChlbnRyeSBpcyBTcHJlYWRNYXBFbnRyeSkgewogICAgICBEYXJ0VHlwZSBzcHJlYWRUeXBlID0gaW5mZXJyZWRTcHJlYWRUeXBlc1tlbnRyeS5leHByZXNzaW9uXTsKICAgICAgaWYgKHNwcmVhZFR5cGUgaXMgRHluYW1pY1R5cGUpIHsKICAgICAgICBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKGluZmVycmVyLmNvcmVUeXBlcy5tYXBDbGFzcy5yYXdUeXBlLAogICAgICAgICAgICBzcHJlYWRUeXBlLCBlbnRyeS5leHByZXNzaW9uLCBlbnRyeS5leHByZXNzaW9uLmZpbGVPZmZzZXQpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGVudHJ5IGlzIElmTWFwRW50cnkpIHsKICAgICAgY2hlY2tNYXBFbnRyeShlbnRyeS50aGVuLCBlbnRyeSwgY2FjaGVkS2V5LCBjYWNoZWRWYWx1ZSwga2V5VHlwZSwKICAgICAgICAgIHZhbHVlVHlwZSwgaW5mZXJyZWRTcHJlYWRUeXBlcyk7CiAgICAgIGlmIChlbnRyeS5vdGhlcndpc2UgIT0gbnVsbCkgewogICAgICAgIGNoZWNrTWFwRW50cnkoZW50cnkub3RoZXJ3aXNlLCBlbnRyeSwgY2FjaGVkS2V5LCBjYWNoZWRWYWx1ZSwga2V5VHlwZSwKICAgICAgICAgICAgdmFsdWVUeXBlLCBpbmZlcnJlZFNwcmVhZFR5cGVzKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChlbnRyeSBpcyBGb3JNYXBFbnRyeSkgewogICAgICBpZiAoZW50cnkuY29uZGl0aW9uICE9IG51bGwpIHsKICAgICAgICBEYXJ0VHlwZSBjb25kaXRpb25UeXBlID0gZ2V0SW5mZXJyZWRUeXBlKGVudHJ5LmNvbmRpdGlvbiwgaW5mZXJyZXIpOwogICAgICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoaW5mZXJyZXIuY29yZVR5cGVzLmJvb2xDbGFzcy5yYXdUeXBlLAogICAgICAgICAgICBjb25kaXRpb25UeXBlLCBlbnRyeS5jb25kaXRpb24sIGVudHJ5LmNvbmRpdGlvbi5maWxlT2Zmc2V0KTsKICAgICAgfQogICAgICBjaGVja01hcEVudHJ5KGVudHJ5LmJvZHksIGVudHJ5LCBjYWNoZWRLZXksIGNhY2hlZFZhbHVlLCBrZXlUeXBlLAogICAgICAgICAgdmFsdWVUeXBlLCBpbmZlcnJlZFNwcmVhZFR5cGVzKTsKICAgIH0gZWxzZSBpZiAoZW50cnkgaXMgRm9ySW5NYXBFbnRyeSkgewogICAgICBjaGVja01hcEVudHJ5KGVudHJ5LmJvZHksIGVudHJ5LCBjYWNoZWRLZXksIGNhY2hlZFZhbHVlLCBrZXlUeXBlLAogICAgICAgICAgdmFsdWVUeXBlLCBpbmZlcnJlZFNwcmVhZFR5cGVzKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIERvIG5vdGhpbmcuICBBc3NpZ25hYmlsaXR5IGNoZWNrcyBhcmUgZG9uZSBkdXJpbmcgdHlwZSBpbmZlcmVuY2UuCiAgICB9CiAgfQoKICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHZpc2l0TWFwTGl0ZXJhbEp1ZGdtZW50KAogICAgICBNYXBMaXRlcmFsSnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIENsYXNzIG1hcENsYXNzID0gaW5mZXJyZXIuY29yZVR5cGVzLm1hcENsYXNzOwogICAgSW50ZXJmYWNlVHlwZSBtYXBUeXBlID0gbWFwQ2xhc3MudGhpc1R5cGU7CiAgICBMaXN0PERhcnRUeXBlPiBpbmZlcnJlZFR5cGVzOwogICAgRGFydFR5cGUgaW5mZXJyZWRLZXlUeXBlOwogICAgRGFydFR5cGUgaW5mZXJyZWRWYWx1ZVR5cGU7CiAgICBMaXN0PERhcnRUeXBlPiBmb3JtYWxUeXBlczsKICAgIExpc3Q8RGFydFR5cGU+IGFjdHVhbFR5cGVzOwogICAgTGlzdDxEYXJ0VHlwZT4gYWN0dWFsVHlwZXNGb3JTZXQ7CiAgICBhc3NlcnQoKG5vZGUua2V5VHlwZSBpcyBJbXBsaWNpdFR5cGVBcmd1bWVudCkgPT0KICAgICAgICAobm9kZS52YWx1ZVR5cGUgaXMgSW1wbGljaXRUeXBlQXJndW1lbnQpKTsKICAgIGJvb2wgaW5mZXJlbmNlTmVlZGVkID0gbm9kZS5rZXlUeXBlIGlzIEltcGxpY2l0VHlwZUFyZ3VtZW50OwogICAgYm9vbCB0eXBlQ29udGV4dElzTWFwID0gbm9kZS5rZXlUeXBlIGlzISBJbXBsaWNpdFR5cGVBcmd1bWVudDsKICAgIGJvb2wgdHlwZUNvbnRleHRJc0l0ZXJhYmxlID0gZmFsc2U7CiAgICBpZiAoIWluZmVycmVyLmlzVG9wTGV2ZWwgJiYgaW5mZXJlbmNlTmVlZGVkKSB7CiAgICAgIC8vIEFtYmlndW91cyBzZXQvbWFwIGxpdGVyYWwKICAgICAgRGFydFR5cGUgY29udGV4dCA9CiAgICAgICAgICBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQudW5mdXR1cmVUeXBlKHR5cGVDb250ZXh0KTsKICAgICAgaWYgKGNvbnRleHQgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICAgIHR5cGVDb250ZXh0SXNNYXAgPSB0eXBlQ29udGV4dElzTWFwIHx8CiAgICAgICAgICAgIGluZmVycmVyLmNsYXNzSGllcmFyY2h5CiAgICAgICAgICAgICAgICAuaXNTdWJ0eXBlT2YoY29udGV4dC5jbGFzc05vZGUsIGluZmVycmVyLmNvcmVUeXBlcy5tYXBDbGFzcyk7CiAgICAgICAgdHlwZUNvbnRleHRJc0l0ZXJhYmxlID0gdHlwZUNvbnRleHRJc0l0ZXJhYmxlIHx8CiAgICAgICAgICAgIGluZmVycmVyLmNsYXNzSGllcmFyY2h5LmlzU3VidHlwZU9mKAogICAgICAgICAgICAgICAgY29udGV4dC5jbGFzc05vZGUsIGluZmVycmVyLmNvcmVUeXBlcy5pdGVyYWJsZUNsYXNzKTsKICAgICAgICBpZiAobm9kZS5lbnRyaWVzLmlzRW1wdHkgJiYKICAgICAgICAgICAgdHlwZUNvbnRleHRJc0l0ZXJhYmxlICYmCiAgICAgICAgICAgICF0eXBlQ29udGV4dElzTWFwKSB7CiAgICAgICAgICAvLyBTZXQgbGl0ZXJhbAogICAgICAgICAgU2V0TGl0ZXJhbEp1ZGdtZW50IHNldExpdGVyYWwgPSBuZXcgU2V0TGl0ZXJhbEp1ZGdtZW50KFtdLAogICAgICAgICAgICAgIHR5cGVBcmd1bWVudDogY29uc3QgSW1wbGljaXRUeXBlQXJndW1lbnQoKSwgaXNDb25zdDogbm9kZS5pc0NvbnN0KQogICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBub2RlLmZpbGVPZmZzZXQ7CiAgICAgICAgICBub2RlLnBhcmVudC5yZXBsYWNlQ2hpbGQobm9kZSwgc2V0TGl0ZXJhbCk7CiAgICAgICAgICB2aXNpdFNldExpdGVyYWxKdWRnbWVudChzZXRMaXRlcmFsLCB0eXBlQ29udGV4dCk7CiAgICAgICAgICBub2RlLmluZmVycmVkVHlwZSA9IHNldExpdGVyYWwuaW5mZXJyZWRUeXBlOwogICAgICAgICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0KG5vZGUuaW5mZXJyZWRUeXBlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGJvb2wgdHlwZUNoZWNrc05lZWRlZCA9ICFpbmZlcnJlci5pc1RvcExldmVsOwogICAgTWFwPFRyZWVOb2RlLCBEYXJ0VHlwZT4gaW5mZXJyZWRTcHJlYWRUeXBlczsKICAgIGlmIChpbmZlcmVuY2VOZWVkZWQgfHwgdHlwZUNoZWNrc05lZWRlZCkgewogICAgICBmb3JtYWxUeXBlcyA9IFtdOwogICAgICBhY3R1YWxUeXBlcyA9IFtdOwogICAgICBhY3R1YWxUeXBlc0ZvclNldCA9IFtdOwogICAgICBpbmZlcnJlZFNwcmVhZFR5cGVzID0gbmV3IE1hcDxUcmVlTm9kZSwgRGFydFR5cGU+LmlkZW50aXR5KCk7CiAgICB9CiAgICBpZiAoaW5mZXJlbmNlTmVlZGVkKSB7CiAgICAgIGluZmVycmVkVHlwZXMgPSBbY29uc3QgVW5rbm93blR5cGUoKSwgY29uc3QgVW5rbm93blR5cGUoKV07CiAgICAgIGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudC5pbmZlckdlbmVyaWNGdW5jdGlvbk9yVHlwZShtYXBUeXBlLAogICAgICAgICAgbWFwQ2xhc3MudHlwZVBhcmFtZXRlcnMsIG51bGwsIG51bGwsIHR5cGVDb250ZXh0LCBpbmZlcnJlZFR5cGVzLAogICAgICAgICAgaXNDb25zdDogbm9kZS5pc0NvbnN0KTsKICAgICAgaW5mZXJyZWRLZXlUeXBlID0gaW5mZXJyZWRUeXBlc1swXTsKICAgICAgaW5mZXJyZWRWYWx1ZVR5cGUgPSBpbmZlcnJlZFR5cGVzWzFdOwogICAgfSBlbHNlIHsKICAgICAgaW5mZXJyZWRLZXlUeXBlID0gbm9kZS5rZXlUeXBlOwogICAgICBpbmZlcnJlZFZhbHVlVHlwZSA9IG5vZGUudmFsdWVUeXBlOwogICAgfQogICAgTGlzdDxFeHByZXNzaW9uPiBjYWNoZWRLZXlzID0gbmV3IExpc3Qobm9kZS5lbnRyaWVzLmxlbmd0aCk7CiAgICBMaXN0PEV4cHJlc3Npb24+IGNhY2hlZFZhbHVlcyA9IG5ldyBMaXN0KG5vZGUuZW50cmllcy5sZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlLmVudHJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgTWFwRW50cnkgZW50cnkgPSBub2RlLmVudHJpZXNbaV07CiAgICAgIGlmIChlbnRyeSBpcyEgQ29udHJvbEZsb3dNYXBFbnRyeSkgewogICAgICAgIGNhY2hlZEtleXNbaV0gPSBub2RlLmVudHJpZXNbaV0ua2V5OwogICAgICAgIGNhY2hlZFZhbHVlc1tpXSA9IG5vZGUuZW50cmllc1tpXS52YWx1ZTsKICAgICAgfQogICAgfQogICAgYm9vbCBoYXNNYXBFbnRyeSA9IGZhbHNlOwogICAgYm9vbCBoYXNNYXBTcHJlYWQgPSBmYWxzZTsKICAgIGJvb2wgaGFzSXRlcmFibGVTcHJlYWQgPSBmYWxzZTsKICAgIGlmIChpbmZlcmVuY2VOZWVkZWQgfHwgdHlwZUNoZWNrc05lZWRlZCkgewogICAgICBtYXBFbnRyeU9mZnNldCA9IG51bGw7CiAgICAgIG1hcFNwcmVhZE9mZnNldCA9IG51bGw7CiAgICAgIGl0ZXJhYmxlU3ByZWFkT2Zmc2V0ID0gbnVsbDsKICAgICAgaXRlcmFibGVTcHJlYWRUeXBlID0gbnVsbDsKICAgICAgRGFydFR5cGUgc3ByZWFkVHlwZUNvbnRleHQgPSBjb25zdCBVbmtub3duVHlwZSgpOwogICAgICBpZiAodHlwZUNvbnRleHRJc0l0ZXJhYmxlICYmICF0eXBlQ29udGV4dElzTWFwKSB7CiAgICAgICAgc3ByZWFkVHlwZUNvbnRleHQgPSBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQKICAgICAgICAgICAgLmdldFR5cGVBc0luc3RhbmNlT2YodHlwZUNvbnRleHQsIGluZmVycmVyLmNvcmVUeXBlcy5pdGVyYWJsZUNsYXNzKTsKICAgICAgfSBlbHNlIGlmICghdHlwZUNvbnRleHRJc0l0ZXJhYmxlICYmIHR5cGVDb250ZXh0SXNNYXApIHsKICAgICAgICBzcHJlYWRUeXBlQ29udGV4dCA9IG5ldyBJbnRlcmZhY2VUeXBlKGluZmVycmVyLmNvcmVUeXBlcy5tYXBDbGFzcywKICAgICAgICAgICAgPERhcnRUeXBlPltpbmZlcnJlZEtleVR5cGUsIGluZmVycmVkVmFsdWVUeXBlXSk7CiAgICAgIH0KICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlLmVudHJpZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICBNYXBFbnRyeSBlbnRyeSA9IG5vZGUuZW50cmllc1tpXTsKICAgICAgICBpbmZlck1hcEVudHJ5KAogICAgICAgICAgICBlbnRyeSwKICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgaW5mZXJyZWRLZXlUeXBlLAogICAgICAgICAgICBpbmZlcnJlZFZhbHVlVHlwZSwKICAgICAgICAgICAgc3ByZWFkVHlwZUNvbnRleHQsCiAgICAgICAgICAgIGFjdHVhbFR5cGVzLAogICAgICAgICAgICBhY3R1YWxUeXBlc0ZvclNldCwKICAgICAgICAgICAgaW5mZXJyZWRTcHJlYWRUeXBlcywKICAgICAgICAgICAgaW5mZXJlbmNlTmVlZGVkLAogICAgICAgICAgICB0eXBlQ2hlY2tzTmVlZGVkKTsKICAgICAgICBpZiAoaW5mZXJlbmNlTmVlZGVkKSB7CiAgICAgICAgICBmb3JtYWxUeXBlcy5hZGQobWFwVHlwZS50eXBlQXJndW1lbnRzWzBdKTsKICAgICAgICAgIGZvcm1hbFR5cGVzLmFkZChtYXBUeXBlLnR5cGVBcmd1bWVudHNbMV0pOwogICAgICAgIH0KICAgICAgfQogICAgICBoYXNNYXBFbnRyeSA9IG1hcEVudHJ5T2Zmc2V0ICE9IG51bGw7CiAgICAgIGhhc01hcFNwcmVhZCA9IG1hcFNwcmVhZE9mZnNldCAhPSBudWxsOwogICAgICBoYXNJdGVyYWJsZVNwcmVhZCA9IGl0ZXJhYmxlU3ByZWFkT2Zmc2V0ICE9IG51bGw7CiAgICB9CiAgICBpZiAoaW5mZXJlbmNlTmVlZGVkKSB7CiAgICAgIGJvb2wgY2FuQmVTZXQgPSAhaGFzTWFwU3ByZWFkICYmICFoYXNNYXBFbnRyeSAmJiAhdHlwZUNvbnRleHRJc01hcDsKICAgICAgYm9vbCBjYW5CZU1hcCA9ICFoYXNJdGVyYWJsZVNwcmVhZCAmJiAhdHlwZUNvbnRleHRJc0l0ZXJhYmxlOwogICAgICBpZiAoY2FuQmVTZXQgJiYgIWNhbkJlTWFwKSB7CiAgICAgICAgTGlzdDxFeHByZXNzaW9uPiBzZXRFbGVtZW50cyA9IDxFeHByZXNzaW9uPltdOwogICAgICAgIExpc3Q8RGFydFR5cGU+IGZvcm1hbFR5cGVzRm9yU2V0ID0gPERhcnRUeXBlPltdOwogICAgICAgIEludGVyZmFjZVR5cGUgc2V0VHlwZSA9IGluZmVycmVyLmNvcmVUeXBlcy5zZXRDbGFzcy50aGlzVHlwZTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGUuZW50cmllcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgc2V0RWxlbWVudHMuYWRkKGNvbnZlcnRUb0VsZW1lbnQobm9kZS5lbnRyaWVzW2ldLCBpbmZlcnJlci5oZWxwZXIpKTsKICAgICAgICAgIGZvcm1hbFR5cGVzRm9yU2V0LmFkZChzZXRUeXBlLnR5cGVBcmd1bWVudHNbMF0pOwogICAgICAgIH0KCiAgICAgICAgTGlzdDxEYXJ0VHlwZT4gaW5mZXJyZWRUeXBlc0ZvclNldCA9IDxEYXJ0VHlwZT5bY29uc3QgVW5rbm93blR5cGUoKV07CiAgICAgICAgaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50LmluZmVyR2VuZXJpY0Z1bmN0aW9uT3JUeXBlKAogICAgICAgICAgICBzZXRUeXBlLAogICAgICAgICAgICBpbmZlcnJlci5jb3JlVHlwZXMuc2V0Q2xhc3MudHlwZVBhcmFtZXRlcnMsCiAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgIHR5cGVDb250ZXh0LAogICAgICAgICAgICBpbmZlcnJlZFR5cGVzRm9yU2V0LAogICAgICAgICAgICBpc0NvbnN0OiBub2RlLmlzQ29uc3QpOwogICAgICAgIGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudC5pbmZlckdlbmVyaWNGdW5jdGlvbk9yVHlwZSgKICAgICAgICAgICAgaW5mZXJyZXIuY29yZVR5cGVzLnNldENsYXNzLnRoaXNUeXBlLAogICAgICAgICAgICBpbmZlcnJlci5jb3JlVHlwZXMuc2V0Q2xhc3MudHlwZVBhcmFtZXRlcnMsCiAgICAgICAgICAgIGZvcm1hbFR5cGVzRm9yU2V0LAogICAgICAgICAgICBhY3R1YWxUeXBlc0ZvclNldCwKICAgICAgICAgICAgdHlwZUNvbnRleHQsCiAgICAgICAgICAgIGluZmVycmVkVHlwZXNGb3JTZXQpOwogICAgICAgIERhcnRUeXBlIGluZmVycmVkVHlwZUFyZ3VtZW50ID0gaW5mZXJyZWRUeXBlc0ZvclNldFswXTsKICAgICAgICBpbmZlcnJlci5pbnN0cnVtZW50YXRpb24/LnJlY29yZCgKICAgICAgICAgICAgaW5mZXJyZXIudXJpLAogICAgICAgICAgICBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICd0eXBlQXJncycsCiAgICAgICAgICAgIG5ldyBJbnN0cnVtZW50YXRpb25WYWx1ZUZvclR5cGVBcmdzKFtpbmZlcnJlZFR5cGVBcmd1bWVudF0pKTsKCiAgICAgICAgU2V0TGl0ZXJhbEp1ZGdtZW50IHNldExpdGVyYWwgPSBuZXcgU2V0TGl0ZXJhbEp1ZGdtZW50KHNldEVsZW1lbnRzLAogICAgICAgICAgICB0eXBlQXJndW1lbnQ6IGluZmVycmVkVHlwZUFyZ3VtZW50LCBpc0NvbnN0OiBub2RlLmlzQ29uc3QpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBub2RlLmZpbGVPZmZzZXQ7CiAgICAgICAgbm9kZS5wYXJlbnQucmVwbGFjZUNoaWxkKG5vZGUsIHNldExpdGVyYWwpOwogICAgICAgIGlmICh0eXBlQ2hlY2tzTmVlZGVkKSB7CiAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNldExpdGVyYWwuZXhwcmVzc2lvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgY2hlY2tFbGVtZW50KHNldExpdGVyYWwuZXhwcmVzc2lvbnNbaV0sIHNldExpdGVyYWwsCiAgICAgICAgICAgICAgICBzZXRMaXRlcmFsLnR5cGVBcmd1bWVudCwgaW5mZXJyZWRTcHJlYWRUeXBlcyk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBub2RlLmluZmVycmVkVHlwZSA9IHNldExpdGVyYWwuaW5mZXJyZWRUeXBlID0KICAgICAgICAgICAgbmV3IEludGVyZmFjZVR5cGUoaW5mZXJyZXIuY29yZVR5cGVzLnNldENsYXNzLCBpbmZlcnJlZFR5cGVzRm9yU2V0KTsKICAgICAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQobm9kZS5pbmZlcnJlZFR5cGUpOwogICAgICB9CiAgICAgIGlmIChjYW5CZVNldCAmJiBjYW5CZU1hcCAmJiBub2RlLmVudHJpZXMuaXNOb3RFbXB0eSkgewogICAgICAgIG5vZGUucGFyZW50LnJlcGxhY2VDaGlsZCgKICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgaW5mZXJyZXIuaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGluZmVycmVyLmhlbHBlcgogICAgICAgICAgICAgICAgLmJ1aWxkUHJvYmxlbShtZXNzYWdlQ2FudERpc2FtYmlndWF0ZU5vdEVub3VnaEluZm9ybWF0aW9uLAogICAgICAgICAgICAgICAgICAgIG5vZGUuZmlsZU9mZnNldCwgMSkpKTsKICAgICAgICBub2RlLmluZmVycmVkVHlwZSA9IGNvbnN0IEJvdHRvbVR5cGUoKTsKICAgICAgICByZXR1cm4gY29uc3QgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChjb25zdCBCb3R0b21UeXBlKCkpOwogICAgICB9CiAgICAgIGlmICghY2FuQmVTZXQgJiYgIWNhbkJlTWFwKSB7CiAgICAgICAgaWYgKCFpbmZlcnJlci5pc1RvcExldmVsKSB7CiAgICAgICAgICBub2RlLnBhcmVudC5yZXBsYWNlQ2hpbGQoCiAgICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgICBpbmZlcnJlci5oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oaW5mZXJyZXIuaGVscGVyCiAgICAgICAgICAgICAgICAgIC5idWlsZFByb2JsZW0obWVzc2FnZUNhbnREaXNhbWJpZ3VhdGVBbWJpZ3VvdXNJbmZvcm1hdGlvbiwKICAgICAgICAgICAgICAgICAgICAgIG5vZGUuZmlsZU9mZnNldCwgMSkpKTsKICAgICAgICB9CiAgICAgICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBjb25zdCBCb3R0b21UeXBlKCk7CiAgICAgICAgcmV0dXJuIGNvbnN0IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQoY29uc3QgQm90dG9tVHlwZSgpKTsKICAgICAgfQogICAgICBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQuaW5mZXJHZW5lcmljRnVuY3Rpb25PclR5cGUoCiAgICAgICAgICBtYXBUeXBlLAogICAgICAgICAgbWFwQ2xhc3MudHlwZVBhcmFtZXRlcnMsCiAgICAgICAgICBmb3JtYWxUeXBlcywKICAgICAgICAgIGFjdHVhbFR5cGVzLAogICAgICAgICAgdHlwZUNvbnRleHQsCiAgICAgICAgICBpbmZlcnJlZFR5cGVzKTsKICAgICAgaW5mZXJyZWRLZXlUeXBlID0gaW5mZXJyZWRUeXBlc1swXTsKICAgICAgaW5mZXJyZWRWYWx1ZVR5cGUgPSBpbmZlcnJlZFR5cGVzWzFdOwogICAgICBpbmZlcnJlci5pbnN0cnVtZW50YXRpb24/LnJlY29yZCgKICAgICAgICAgIGluZmVycmVyLnVyaSwKICAgICAgICAgIG5vZGUuZmlsZU9mZnNldCwKICAgICAgICAgICd0eXBlQXJncycsCiAgICAgICAgICBuZXcgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JUeXBlQXJncygKICAgICAgICAgICAgICBbaW5mZXJyZWRLZXlUeXBlLCBpbmZlcnJlZFZhbHVlVHlwZV0pKTsKICAgICAgbm9kZS5rZXlUeXBlID0gaW5mZXJyZWRLZXlUeXBlOwogICAgICBub2RlLnZhbHVlVHlwZSA9IGluZmVycmVkVmFsdWVUeXBlOwogICAgfQogICAgaWYgKHR5cGVDaGVja3NOZWVkZWQpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlLmVudHJpZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICBjaGVja01hcEVudHJ5KG5vZGUuZW50cmllc1tpXSwgbm9kZSwgY2FjaGVkS2V5c1tpXSwgY2FjaGVkVmFsdWVzW2ldLAogICAgICAgICAgICBub2RlLmtleVR5cGUsIG5vZGUudmFsdWVUeXBlLCBpbmZlcnJlZFNwcmVhZFR5cGVzKTsKICAgICAgfQogICAgfQogICAgbm9kZS5pbmZlcnJlZFR5cGUgPQogICAgICAgIG5ldyBJbnRlcmZhY2VUeXBlKG1hcENsYXNzLCBbaW5mZXJyZWRLZXlUeXBlLCBpbmZlcnJlZFZhbHVlVHlwZV0pOwogICAgaWYgKCFpbmZlcnJlci5pc1RvcExldmVsKSB7CiAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkgPSBpbmZlcnJlci5saWJyYXJ5OwogICAgICAvLyBFaXRoZXIgYm90aCBbX2RlY2xhcmVkS2V5VHlwZV0gYW5kIFtfZGVjbGFyZWRWYWx1ZVR5cGVdIGFyZSBvbWl0dGVkIG9yCiAgICAgIC8vIG5vbmUgb2YgdGhlbSwgc28gd2UgbWF5IGp1c3QgY2hlY2sgb25lLgogICAgICBpZiAoaW5mZXJlbmNlTmVlZGVkKSB7CiAgICAgICAgbGlicmFyeS5jaGVja0JvdW5kc0luTWFwTGl0ZXJhbCgKICAgICAgICAgICAgbm9kZSwgaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50LCBpbmZlcnJlci5oZWxwZXIudXJpLAogICAgICAgICAgICBpbmZlcnJlZDogdHJ1ZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChub2RlLmluZmVycmVkVHlwZSk7CiAgfQoKICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHZpc2l0TWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KAogICAgICBNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIGlmIChub2RlLm5hbWUubmFtZSA9PSAndW5hcnktJyAmJgogICAgICAgIG5vZGUuYXJndW1lbnRzLnR5cGVzLmlzRW1wdHkgJiYKICAgICAgICBub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmlzRW1wdHkgJiYKICAgICAgICBub2RlLmFyZ3VtZW50cy5uYW1lZC5pc0VtcHR5KSB7CiAgICAgIC8vIFJlcGxhY2UgaW50ZWdlciBsaXRlcmFscyBpbiBhIGRvdWJsZSBjb250ZXh0IHdpdGggdGhlIGNvcnJlc3BvbmRpbmcKICAgICAgLy8gZG91YmxlIGxpdGVyYWwgaWYgaXQncyBleGFjdC4gIEZvciBkb3VibGUgbGl0ZXJhbHMsIHRoZSBuZWdhdGlvbiBpcwogICAgICAvLyBmb2xkZWQgYXdheS4gIEluIGFueSBub24tZG91YmxlIGNvbnRleHQsIG9yIGlmIHRoZXJlIGlzIG5vIGV4YWN0CiAgICAgIC8vIGRvdWJsZSB2YWx1ZSwgdGhlbiB0aGUgY29ycmVzcG9uZGluZyBpbnRlZ2VyIGxpdGVyYWwgaXMgbGVmdC4gIFRoZQogICAgICAvLyBuZWdhdGlvbiBpcyBub3QgZm9sZGVkIGF3YXkgc28gdGhhdCBwbGF0Zm9ybXMgd2l0aCB3ZWIgbGl0ZXJhbHMgY2FuCiAgICAgIC8vIGRpc3Rpbmd1aXNoIGJldHdlZW4gKG5vbi1uZWdhdGVkKSAweDgwMDAwMDAwMDAwMDAwMDAgcmVwcmVzZW50ZWQgYXMKICAgICAgLy8gaW50ZWdlciBsaXRlcmFsIC05MjIzMzcyMDM2ODU0Nzc1ODA4IHdoaWNoIHNob3VsZCBiZSBhIHBvc2l0aXZlIG51bWJlciwKICAgICAgLy8gYW5kIG5lZ2F0ZWQgOTIyMzM3MjAzNjg1NDc3NTgwOCByZXByZXNlbnRlZCBhcwogICAgICAvLyAtOTIyMzM3MjAzNjg1NDc3NTgwOC51bmFyeS0oKSB3aGljaCBzaG91bGQgYmUgYSBuZWdhdGl2ZSBudW1iZXIuCiAgICAgIGlmIChub2RlLnJlY2VpdmVyIGlzIEludEp1ZGdtZW50KSB7CiAgICAgICAgSW50SnVkZ21lbnQgcmVjZWl2ZXIgPSBub2RlLnJlY2VpdmVyOwogICAgICAgIGlmIChpbmZlcnJlci5pc0RvdWJsZUNvbnRleHQodHlwZUNvbnRleHQpKSB7CiAgICAgICAgICBkb3VibGUgZG91YmxlVmFsdWUgPSByZWNlaXZlci5hc0RvdWJsZShuZWdhdGVkOiB0cnVlKTsKICAgICAgICAgIGlmIChkb3VibGVWYWx1ZSAhPSBudWxsKSB7CiAgICAgICAgICAgIG5vZGUucGFyZW50LnJlcGxhY2VDaGlsZChub2RlLAogICAgICAgICAgICAgICAgbmV3IERvdWJsZUxpdGVyYWwoZG91YmxlVmFsdWUpLi5maWxlT2Zmc2V0ID0gbm9kZS5maWxlT2Zmc2V0KTsKICAgICAgICAgICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBpbmZlcnJlci5jb3JlVHlwZXMuZG91YmxlQ2xhc3MucmF3VHlwZTsKICAgICAgICAgICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0KG5vZGUuaW5mZXJyZWRUeXBlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgRXhwcmVzc2lvbiBlcnJvciA9IGNoZWNrV2ViSW50TGl0ZXJhbHNFcnJvcklmVW5leGFjdCgKICAgICAgICAgICAgaW5mZXJyZXIsIHJlY2VpdmVyLnZhbHVlLCByZWNlaXZlci5saXRlcmFsLCByZWNlaXZlci5maWxlT2Zmc2V0KTsKICAgICAgICBpZiAoZXJyb3IgIT0gbnVsbCkgewogICAgICAgICAgbm9kZS5wYXJlbnQucmVwbGFjZUNoaWxkKG5vZGUsIGVycm9yKTsKICAgICAgICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gY29uc3QgQm90dG9tVHlwZSgpOwogICAgICAgICAgcmV0dXJuIGNvbnN0IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQoY29uc3QgQm90dG9tVHlwZSgpKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAobm9kZS5yZWNlaXZlciBpcyBTaGFkb3dMYXJnZUludExpdGVyYWwpIHsKICAgICAgICBTaGFkb3dMYXJnZUludExpdGVyYWwgcmVjZWl2ZXIgPSBub2RlLnJlY2VpdmVyOwogICAgICAgIGlmICghcmVjZWl2ZXIuaXNQYXJlbnRoZXNpemVkKSB7CiAgICAgICAgICBpZiAoaW5mZXJyZXIuaXNEb3VibGVDb250ZXh0KHR5cGVDb250ZXh0KSkgewogICAgICAgICAgICBkb3VibGUgZG91YmxlVmFsdWUgPSByZWNlaXZlci5hc0RvdWJsZShuZWdhdGVkOiB0cnVlKTsKICAgICAgICAgICAgaWYgKGRvdWJsZVZhbHVlICE9IG51bGwpIHsKICAgICAgICAgICAgICBub2RlLnBhcmVudC5yZXBsYWNlQ2hpbGQobm9kZSwKICAgICAgICAgICAgICAgICAgbmV3IERvdWJsZUxpdGVyYWwoZG91YmxlVmFsdWUpLi5maWxlT2Zmc2V0ID0gbm9kZS5maWxlT2Zmc2V0KTsKICAgICAgICAgICAgICBub2RlLmluZmVycmVkVHlwZSA9IGluZmVycmVyLmNvcmVUeXBlcy5kb3VibGVDbGFzcy5yYXdUeXBlOwogICAgICAgICAgICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChub2RlLmluZmVycmVkVHlwZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGludCBpbnRWYWx1ZSA9IHJlY2VpdmVyLmFzSW50NjQobmVnYXRlZDogdHJ1ZSk7CiAgICAgICAgICBpZiAoaW50VmFsdWUgPT0gbnVsbCkgewogICAgICAgICAgICBFeHByZXNzaW9uIGVycm9yID0gaW5mZXJyZXIuaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKAogICAgICAgICAgICAgICAgaW5mZXJyZXIuaGVscGVyLmJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUludGVnZXJMaXRlcmFsSXNPdXRPZlJhbmdlCiAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKHJlY2VpdmVyLmxpdGVyYWwpLAogICAgICAgICAgICAgICAgICAgIHJlY2VpdmVyLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZXIubGl0ZXJhbC5sZW5ndGgpKTsKICAgICAgICAgICAgbm9kZS5wYXJlbnQucmVwbGFjZUNoaWxkKG5vZGUsIGVycm9yKTsKICAgICAgICAgICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBjb25zdCBCb3R0b21UeXBlKCk7CiAgICAgICAgICAgIHJldHVybiBjb25zdCBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0KGNvbnN0IEJvdHRvbVR5cGUoKSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoaW50VmFsdWUgIT0gbnVsbCkgewogICAgICAgICAgICBFeHByZXNzaW9uIGVycm9yID0gY2hlY2tXZWJJbnRMaXRlcmFsc0Vycm9ySWZVbmV4YWN0KAogICAgICAgICAgICAgICAgaW5mZXJyZXIsIGludFZhbHVlLCByZWNlaXZlci5saXRlcmFsLCByZWNlaXZlci5maWxlT2Zmc2V0KTsKICAgICAgICAgICAgaWYgKGVycm9yICE9IG51bGwpIHsKICAgICAgICAgICAgICBub2RlLnBhcmVudC5yZXBsYWNlQ2hpbGQobm9kZSwgZXJyb3IpOwogICAgICAgICAgICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gY29uc3QgQm90dG9tVHlwZSgpOwogICAgICAgICAgICAgIHJldHVybiBjb25zdCBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0KGNvbnN0IEJvdHRvbVR5cGUoKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbm9kZS5yZWNlaXZlciA9IG5ldyBJbnRMaXRlcmFsKC1pbnRWYWx1ZSkKICAgICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBub2RlLnJlY2VpdmVyLmZpbGVPZmZzZXQKICAgICAgICAgICAgICAuLnBhcmVudCA9IG5vZGU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHJlc3VsdCA9IGluZmVycmVyLmluZmVyTWV0aG9kSW52b2NhdGlvbigKICAgICAgICBub2RlLCBub2RlLnJlY2VpdmVyLCBub2RlLmZpbGVPZmZzZXQsIG5vZGUuX2lzSW1wbGljaXRDYWxsLCB0eXBlQ29udGV4dCwKICAgICAgICBkZXN1Z2FyZWRJbnZvY2F0aW9uOiBub2RlKTsKICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gcmVzdWx0LmluZmVycmVkVHlwZTsKICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCgKICAgICAgICByZXN1bHQuaW5mZXJyZWRUeXBlLCByZXN1bHQucmVwbGFjZW1lbnQpOwogIH0KCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCB2aXNpdE5hbWVkRnVuY3Rpb25FeHByZXNzaW9uSnVkZ21lbnQoCiAgICAgIE5hbWVkRnVuY3Rpb25FeHByZXNzaW9uSnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIEV4cHJlc3Npb24gaW5pdGlhbGl6ZXIgPSBub2RlLnZhcmlhYmxlSnVkZ21lbnQuaW5pdGlhbGl6ZXI7CiAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oaW5pdGlhbGl6ZXIsIHR5cGVDb250ZXh0LCB0cnVlKTsKICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gZ2V0SW5mZXJyZWRUeXBlKGluaXRpYWxpemVyLCBpbmZlcnJlcik7CiAgICBub2RlLnZhcmlhYmxlLnR5cGUgPSBub2RlLmluZmVycmVkVHlwZTsKICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChub2RlLmluZmVycmVkVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHZpc2l0Tm90KE5vdCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgRXhwcmVzc2lvbiBvcGVyYW5kID0gbm9kZS5vcGVyYW5kOwogICAgSW50ZXJmYWNlVHlwZSBib29sVHlwZSA9IGluZmVycmVyLmNvcmVUeXBlcy5ib29sQ2xhc3MucmF3VHlwZTsKICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihvcGVyYW5kLCBib29sVHlwZSwgIWluZmVycmVyLmlzVG9wTGV2ZWwpOwogICAgaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZShib29sVHlwZSwgZ2V0SW5mZXJyZWRUeXBlKG9wZXJhbmQsIGluZmVycmVyKSwKICAgICAgICBub2RlLm9wZXJhbmQsIG5vZGUuZmlsZU9mZnNldCk7CiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQoYm9vbFR5cGUpOwogIH0KCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCB2aXNpdE51bGxBd2FyZU1ldGhvZEludm9jYXRpb25KdWRnbWVudCgKICAgICAgTnVsbEF3YXJlTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHJlc3VsdCA9IGluZmVycmVyLmluZmVyTWV0aG9kSW52b2NhdGlvbigKICAgICAgICBub2RlLCBub2RlLnZhcmlhYmxlLmluaXRpYWxpemVyLCBub2RlLmZpbGVPZmZzZXQsIGZhbHNlLCB0eXBlQ29udGV4dCwKICAgICAgICByZWNlaXZlclZhcmlhYmxlOiBub2RlLnZhcmlhYmxlLAogICAgICAgIGRlc3VnYXJlZEludm9jYXRpb246IG5vZGUuX2Rlc3VnYXJlZEludm9jYXRpb24pOwogICAgbm9kZS5pbmZlcnJlZFR5cGUgPSByZXN1bHQuaW5mZXJyZWRUeXBlOwogICAgbm9kZS5ib2R5LnN0YXRpY1R5cGUgPSBub2RlLmluZmVycmVkVHlwZTsKICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChyZXN1bHQuaW5mZXJyZWRUeXBlKTsKICB9CgogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgdmlzaXROdWxsQXdhcmVQcm9wZXJ0eUdldEp1ZGdtZW50KAogICAgICBOdWxsQXdhcmVQcm9wZXJ0eUdldEp1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHJlc3VsdCA9IGluZmVycmVyLmluZmVyUHJvcGVydHlHZXQoCiAgICAgICAgbm9kZSwgbm9kZS5yZWNlaXZlckp1ZGdtZW50LCBub2RlLmZpbGVPZmZzZXQsIHR5cGVDb250ZXh0LAogICAgICAgIHJlY2VpdmVyVmFyaWFibGU6IG5vZGUudmFyaWFibGUsIGRlc3VnYXJlZEdldDogbm9kZS5fZGVzdWdhcmVkR2V0KTsKICAgIG5vZGUuYm9keS5zdGF0aWNUeXBlID0gcmVzdWx0LmluZmVycmVkVHlwZTsKICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChyZXN1bHQuaW5mZXJyZWRUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgdmlzaXROdWxsTGl0ZXJhbCgKICAgICAgICAgIE51bGxMaXRlcmFsIG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSA9PgogICAgICBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChpbmZlcnJlci5jb3JlVHlwZXMubnVsbENsYXNzLnJhd1R5cGUpOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHZpc2l0TGV0KExldCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgRGFydFR5cGUgdmFyaWFibGVUeXBlID0gbm9kZS52YXJpYWJsZS50eXBlOwogICAgaWYgKHZhcmlhYmxlVHlwZSA9PSBjb25zdCBEeW5hbWljVHlwZSgpKSB7CiAgICAgIHJldHVybiBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCB0eXBlQ29udGV4dCk7CiAgICB9CiAgICBFeHByZXNzaW9uIGluaXRpYWxpemVyID0gbm9kZS52YXJpYWJsZS5pbml0aWFsaXplcjsKICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihpbml0aWFsaXplciwgdmFyaWFibGVUeXBlLCB0cnVlLAogICAgICAgIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgRXhwcmVzc2lvbiBib2R5ID0gbm9kZS5ib2R5OwogICAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCByZXN1bHQgPQogICAgICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihib2R5LCB0eXBlQ29udGV4dCwgdHJ1ZSwgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGUgPSByZXN1bHQuaW5mZXJyZWRUeXBlOwogICAgLy8gVE9ETyhhaGUpOiBUaGlzIHNob3VsZG4ndCBiZSBuZWVkZWQuIFNlZSBJbmZlcnJlZFR5cGVWaXNpdG9yLnZpc2l0TGV0LgogICAgaW5mZXJyZXIuc3RvcmVJbmZlcnJlZFR5cGUobm9kZSwgaW5mZXJyZWRUeXBlKTsKICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChpbmZlcnJlZFR5cGUpOwogIH0KCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCB2aXNpdFByb3BlcnR5QXNzaWdubWVudEp1ZGdtZW50KAogICAgICBQcm9wZXJ0eUFzc2lnbm1lbnRKdWRnbWVudCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgRGFydFR5cGUgcmVjZWl2ZXJUeXBlID0gbm9kZS5faW5mZXJSZWNlaXZlcihpbmZlcnJlcik7CgogICAgRGFydFR5cGUgcmVhZFR5cGU7CiAgICBpZiAobm9kZS5yZWFkICE9IG51bGwpIHsKICAgICAgT2JqZWN0QWNjZXNzVGFyZ2V0IHJlYWRUYXJnZXQgPSBpbmZlcnJlcgogICAgICAgICAgLmZpbmRQcm9wZXJ0eUdldE1lbWJlcihyZWNlaXZlclR5cGUsIG5vZGUucmVhZCwgaW5zdHJ1bWVudGVkOiBmYWxzZSk7CiAgICAgIHJlYWRUeXBlID0gaW5mZXJyZXIuZ2V0R2V0dGVyVHlwZShyZWFkVGFyZ2V0LCByZWNlaXZlclR5cGUpOwogICAgICBpbmZlcnJlci5oYW5kbGVQcm9wZXJ0eUdldENvbnRyYXZhcmlhbmNlKAogICAgICAgICAgbm9kZS5yZWNlaXZlciwKICAgICAgICAgIHJlYWRUYXJnZXQsCiAgICAgICAgICBub2RlLnJlYWQgaXMgUHJvcGVydHlHZXQgPyBub2RlLnJlYWQgOiBudWxsLAogICAgICAgICAgbm9kZS5yZWFkLAogICAgICAgICAgcmVhZFR5cGUsCiAgICAgICAgICBub2RlLnJlYWQuZmlsZU9mZnNldCk7CiAgICAgIG5vZGUuX3N0b3JlTGV0VHlwZShpbmZlcnJlciwgbm9kZS5yZWFkLCByZWFkVHlwZSk7CiAgICB9CiAgICBPYmplY3RBY2Nlc3NUYXJnZXQgd3JpdGVUYXJnZXQ7CiAgICBpZiAobm9kZS53cml0ZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlVGFyZ2V0ID0gbm9kZS5faGFuZGxlV3JpdGVDb250cmF2YXJpYW5jZShpbmZlcnJlciwgcmVjZWl2ZXJUeXBlKTsKICAgIH0KICAgIC8vIFRvIHJlcGxpY2F0ZSBhbmFseXplciBiZWhhdmlvciwgd2UgYmFzZSB0eXBlIGluZmVyZW5jZSBvbiB0aGUgd3JpdGUKICAgIC8vIG1lbWJlci4gIFRPRE8ocGF1bGJlcnJ5KTogd291bGQgaXQgYmUgYmV0dGVyIHRvIHVzZSB0aGUgcmVhZCBtZW1iZXIgd2hlbgogICAgLy8gZG9pbmcgY29tcG91bmQgYXNzaWdubWVudD8KICAgIERhcnRUeXBlIHdyaXRlQ29udGV4dCA9IGluZmVycmVyLmdldFNldHRlclR5cGUod3JpdGVUYXJnZXQsIHJlY2VpdmVyVHlwZSk7CiAgICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGUgPQogICAgICAgIG5vZGUuX2luZmVyUmhzKGluZmVycmVyLCByZWFkVHlwZSwgd3JpdGVDb250ZXh0KS5pbmZlcnJlZFR5cGU7CiAgICBub2RlLm51bGxBd2FyZUd1YXJkPy5zdGF0aWNUeXBlID0gbm9kZS5pbmZlcnJlZFR5cGU7CiAgICBFeHByZXNzaW9uIHJlcGxhY2VtZW50OwogICAgaWYgKHdyaXRlVGFyZ2V0LmlzRXh0ZW5zaW9uTWVtYmVyKSB7CiAgICAgIG5vZGUucGFyZW50LnJlcGxhY2VDaGlsZCgKICAgICAgICAgIG5vZGUsCiAgICAgICAgICByZXBsYWNlbWVudCA9IGluZmVycmVyLmhlbHBlci5mb3Jlc3QuY3JlYXRlU3RhdGljSW52b2NhdGlvbigKICAgICAgICAgICAgICBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgd3JpdGVUYXJnZXQubWVtYmVyLAogICAgICAgICAgICAgIGluZmVycmVyLmhlbHBlci5mb3Jlc3QuY3JlYXRlQXJndW1lbnRzRm9yRXh0ZW5zaW9uTWV0aG9kKAogICAgICAgICAgICAgICAgICBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgICAgIHdyaXRlVGFyZ2V0LmluZmVycmVkRXh0ZW5zaW9uVHlwZUFyZ3VtZW50cy5sZW5ndGgsCiAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgIG5vZGUucmVjZWl2ZXIsCiAgICAgICAgICAgICAgICAgIGV4dGVuc2lvblR5cGVBcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAgICB3cml0ZVRhcmdldC5pbmZlcnJlZEV4dGVuc2lvblR5cGVBcmd1bWVudHMsCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uYWxBcmd1bWVudHM6IFtub2RlLnJoc10pKSk7CiAgICAgIGluZmVycmVyLnN0b3JlSW5mZXJyZWRUeXBlKHJlcGxhY2VtZW50LCBpbmZlcnJlZFR5cGUpOwogICAgfSBlbHNlIHsKICAgICAgbm9kZS5fcmVwbGFjZVdpdGhEZXN1Z2FyZWQoKTsKICAgIH0KCiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQoaW5mZXJyZWRUeXBlLCByZXBsYWNlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHZpc2l0UHJvcGVydHlHZXQoCiAgICAgIFByb3BlcnR5R2V0IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gaW5mZXJyZXIuaW5mZXJQcm9wZXJ0eUdldCgKICAgICAgICBub2RlLCBub2RlLnJlY2VpdmVyLCBub2RlLmZpbGVPZmZzZXQsIHR5cGVDb250ZXh0LAogICAgICAgIGRlc3VnYXJlZEdldDogbm9kZSwgYWxsb3dFeHRlbnNpb25NZXRob2RzOiB0cnVlKTsKICB9CgogIHZvaWQgdmlzaXRSZWRpcmVjdGluZ0luaXRpYWxpemVySnVkZ21lbnQoCiAgICAgIFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXJKdWRnbWVudCBub2RlKSB7CiAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IGNsYXNzVHlwZVBhcmFtZXRlcnMgPQogICAgICAgIG5vZGUudGFyZ2V0LmVuY2xvc2luZ0NsYXNzLnR5cGVQYXJhbWV0ZXJzOwogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9CiAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+KGNsYXNzVHlwZVBhcmFtZXRlcnMubGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZUFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewogICAgICB0eXBlQXJndW1lbnRzW2ldID0gbmV3IFR5cGVQYXJhbWV0ZXJUeXBlKGNsYXNzVHlwZVBhcmFtZXRlcnNbaV0pOwogICAgfQogICAgQXJndW1lbnRzSnVkZ21lbnQuc2V0Tm9uSW5mZXJyYWJsZUFyZ3VtZW50VHlwZXMoCiAgICAgICAgbm9kZS5hcmd1bWVudHMsIHR5cGVBcmd1bWVudHMpOwogICAgaW5mZXJyZXIuaW5mZXJJbnZvY2F0aW9uKAogICAgICAgIG51bGwsCiAgICAgICAgbm9kZS5maWxlT2Zmc2V0LAogICAgICAgIG5vZGUudGFyZ2V0LmZ1bmN0aW9uLmZ1bmN0aW9uVHlwZSwKICAgICAgICBub2RlLnRhcmdldC5lbmNsb3NpbmdDbGFzcy50aGlzVHlwZSwKICAgICAgICBub2RlLmFyZ3VtZW50SnVkZ21lbnRzLAogICAgICAgIHNraXBUeXBlQXJndW1lbnRJbmZlcmVuY2U6IHRydWUpOwogICAgQXJndW1lbnRzSnVkZ21lbnQucmVtb3ZlTm9uSW5mZXJyYWJsZUFyZ3VtZW50VHlwZXMobm9kZS5hcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCB2aXNpdFJldGhyb3coUmV0aHJvdyBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgPT4KICAgICAgY29uc3QgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChjb25zdCBCb3R0b21UeXBlKCkpOwoKICB2b2lkIHZpc2l0UmV0dXJuSnVkZ21lbnQoUmV0dXJuSnVkZ21lbnQgbm9kZSkgewogICAgRXhwcmVzc2lvbiBqdWRnbWVudCA9IG5vZGUuanVkZ21lbnQ7CiAgICBDbG9zdXJlQ29udGV4dCBjbG9zdXJlQ29udGV4dCA9IGluZmVycmVyLmNsb3N1cmVDb250ZXh0OwogICAgRGFydFR5cGUgdHlwZUNvbnRleHQgPSAhY2xvc3VyZUNvbnRleHQuaXNHZW5lcmF0b3IKICAgICAgICA/IGNsb3N1cmVDb250ZXh0LnJldHVybk9yWWllbGRDb250ZXh0CiAgICAgICAgOiBjb25zdCBVbmtub3duVHlwZSgpOwogICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwogICAgaWYgKG5vZGUuZXhwcmVzc2lvbiAhPSBudWxsKSB7CiAgICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihqdWRnbWVudCwgdHlwZUNvbnRleHQsIHRydWUsCiAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgICAgaW5mZXJyZWRUeXBlID0gZ2V0SW5mZXJyZWRUeXBlKGp1ZGdtZW50LCBpbmZlcnJlcik7CiAgICB9IGVsc2UgewogICAgICBpbmZlcnJlZFR5cGUgPSBpbmZlcnJlci5jb3JlVHlwZXMubnVsbENsYXNzLnJhd1R5cGU7CiAgICB9CiAgICBjbG9zdXJlQ29udGV4dC5oYW5kbGVSZXR1cm4oaW5mZXJyZXIsIG5vZGUsIGluZmVycmVkVHlwZSwgbm9kZS5pc0Fycm93KTsKICB9CgogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgdmlzaXRTZXRMaXRlcmFsSnVkZ21lbnQoCiAgICAgIFNldExpdGVyYWxKdWRnbWVudCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgQ2xhc3Mgc2V0Q2xhc3MgPSBpbmZlcnJlci5jb3JlVHlwZXMuc2V0Q2xhc3M7CiAgICBJbnRlcmZhY2VUeXBlIHNldFR5cGUgPSBzZXRDbGFzcy50aGlzVHlwZTsKICAgIExpc3Q8RGFydFR5cGU+IGluZmVycmVkVHlwZXM7CiAgICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGVBcmd1bWVudDsKICAgIExpc3Q8RGFydFR5cGU+IGZvcm1hbFR5cGVzOwogICAgTGlzdDxEYXJ0VHlwZT4gYWN0dWFsVHlwZXM7CiAgICBib29sIGluZmVyZW5jZU5lZWRlZCA9IG5vZGUudHlwZUFyZ3VtZW50IGlzIEltcGxpY2l0VHlwZUFyZ3VtZW50OwogICAgYm9vbCB0eXBlQ2hlY2tzTmVlZGVkID0gIWluZmVycmVyLmlzVG9wTGV2ZWw7CiAgICBNYXA8VHJlZU5vZGUsIERhcnRUeXBlPiBpbmZlcnJlZFNwcmVhZFR5cGVzOwogICAgaWYgKGluZmVyZW5jZU5lZWRlZCB8fCB0eXBlQ2hlY2tzTmVlZGVkKSB7CiAgICAgIGZvcm1hbFR5cGVzID0gW107CiAgICAgIGFjdHVhbFR5cGVzID0gW107CiAgICAgIGluZmVycmVkU3ByZWFkVHlwZXMgPSBuZXcgTWFwPFRyZWVOb2RlLCBEYXJ0VHlwZT4uaWRlbnRpdHkoKTsKICAgIH0KICAgIGlmIChpbmZlcmVuY2VOZWVkZWQpIHsKICAgICAgaW5mZXJyZWRUeXBlcyA9IFtjb25zdCBVbmtub3duVHlwZSgpXTsKICAgICAgaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50LmluZmVyR2VuZXJpY0Z1bmN0aW9uT3JUeXBlKHNldFR5cGUsCiAgICAgICAgICBzZXRDbGFzcy50eXBlUGFyYW1ldGVycywgbnVsbCwgbnVsbCwgdHlwZUNvbnRleHQsIGluZmVycmVkVHlwZXMsCiAgICAgICAgICBpc0NvbnN0OiBub2RlLmlzQ29uc3QpOwogICAgICBpbmZlcnJlZFR5cGVBcmd1bWVudCA9IGluZmVycmVkVHlwZXNbMF07CiAgICB9IGVsc2UgewogICAgICBpbmZlcnJlZFR5cGVBcmd1bWVudCA9IG5vZGUudHlwZUFyZ3VtZW50OwogICAgfQogICAgaWYgKGluZmVyZW5jZU5lZWRlZCB8fCB0eXBlQ2hlY2tzTmVlZGVkKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZS5leHByZXNzaW9ucy5sZW5ndGg7ICsraSkgewogICAgICAgIERhcnRUeXBlIHR5cGUgPSBpbmZlckVsZW1lbnQoCiAgICAgICAgICAgIG5vZGUuZXhwcmVzc2lvbnNbaV0sCiAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgIGluZmVycmVkVHlwZUFyZ3VtZW50LAogICAgICAgICAgICBpbmZlcnJlZFNwcmVhZFR5cGVzLAogICAgICAgICAgICBpbmZlcmVuY2VOZWVkZWQsCiAgICAgICAgICAgIHR5cGVDaGVja3NOZWVkZWQpOwogICAgICAgIGFjdHVhbFR5cGVzLmFkZCh0eXBlKTsKICAgICAgICBpZiAoaW5mZXJlbmNlTmVlZGVkKSB7CiAgICAgICAgICBmb3JtYWxUeXBlcy5hZGQoc2V0VHlwZS50eXBlQXJndW1lbnRzWzBdKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChpbmZlcmVuY2VOZWVkZWQpIHsKICAgICAgaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50LmluZmVyR2VuZXJpY0Z1bmN0aW9uT3JUeXBlKAogICAgICAgICAgc2V0VHlwZSwKICAgICAgICAgIHNldENsYXNzLnR5cGVQYXJhbWV0ZXJzLAogICAgICAgICAgZm9ybWFsVHlwZXMsCiAgICAgICAgICBhY3R1YWxUeXBlcywKICAgICAgICAgIHR5cGVDb250ZXh0LAogICAgICAgICAgaW5mZXJyZWRUeXBlcyk7CiAgICAgIGluZmVycmVkVHlwZUFyZ3VtZW50ID0gaW5mZXJyZWRUeXBlc1swXTsKICAgICAgaW5mZXJyZXIuaW5zdHJ1bWVudGF0aW9uPy5yZWNvcmQoCiAgICAgICAgICBpbmZlcnJlci51cmksCiAgICAgICAgICBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgICAndHlwZUFyZ3MnLAogICAgICAgICAgbmV3IEluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZUFyZ3MoW2luZmVycmVkVHlwZUFyZ3VtZW50XSkpOwogICAgICBub2RlLnR5cGVBcmd1bWVudCA9IGluZmVycmVkVHlwZUFyZ3VtZW50OwogICAgfQogICAgaWYgKHR5cGVDaGVja3NOZWVkZWQpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlLmV4cHJlc3Npb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgY2hlY2tFbGVtZW50KAogICAgICAgICAgICBub2RlLmV4cHJlc3Npb25zW2ldLCBub2RlLCBub2RlLnR5cGVBcmd1bWVudCwgaW5mZXJyZWRTcHJlYWRUeXBlcyk7CiAgICAgIH0KICAgIH0KICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gbmV3IEludGVyZmFjZVR5cGUoc2V0Q2xhc3MsIFtpbmZlcnJlZFR5cGVBcmd1bWVudF0pOwogICAgaWYgKCFpbmZlcnJlci5pc1RvcExldmVsKSB7CiAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkgPSBpbmZlcnJlci5saWJyYXJ5OwogICAgICBpZiAoaW5mZXJlbmNlTmVlZGVkKSB7CiAgICAgICAgbGlicmFyeS5jaGVja0JvdW5kc0luU2V0TGl0ZXJhbCgKICAgICAgICAgICAgbm9kZSwgaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50LCBpbmZlcnJlci5oZWxwZXIudXJpLAogICAgICAgICAgICBpbmZlcnJlZDogdHJ1ZSk7CiAgICAgIH0KCiAgICAgIGlmICghbGlicmFyeS5sb2FkZXIudGFyZ2V0LmJhY2tlbmRUYXJnZXQuc3VwcG9ydHNTZXRMaXRlcmFscykgewogICAgICAgIGluZmVycmVyLmhlbHBlci50cmFuc2Zvcm1TZXRMaXRlcmFscyA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChub2RlLmluZmVycmVkVHlwZSk7CiAgfQoKICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHZpc2l0U3RhdGljQXNzaWdubWVudEp1ZGdtZW50KAogICAgICBTdGF0aWNBc3NpZ25tZW50SnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIERhcnRUeXBlIHJlYWRUeXBlID0gY29uc3QgRHluYW1pY1R5cGUoKTsgLy8gT25seSB1c2VkIGluIGVycm9yIHJlY292ZXJ5CiAgICBFeHByZXNzaW9uIHJlYWQgPSBub2RlLnJlYWQ7CiAgICBpZiAocmVhZCBpcyBTdGF0aWNHZXQpIHsKICAgICAgcmVhZFR5cGUgPSByZWFkLnRhcmdldC5nZXR0ZXJUeXBlOwogICAgICBub2RlLl9zdG9yZUxldFR5cGUoaW5mZXJyZXIsIHJlYWQsIHJlYWRUeXBlKTsKICAgIH0KICAgIE1lbWJlciB3cml0ZU1lbWJlcjsKICAgIERhcnRUeXBlIHdyaXRlQ29udGV4dCA9IGNvbnN0IFVua25vd25UeXBlKCk7CiAgICBFeHByZXNzaW9uIHdyaXRlID0gbm9kZS53cml0ZTsKICAgIGlmICh3cml0ZSBpcyBTdGF0aWNTZXQpIHsKICAgICAgd3JpdGVDb250ZXh0ID0gd3JpdGUudGFyZ2V0LnNldHRlclR5cGU7CiAgICAgIHdyaXRlTWVtYmVyID0gd3JpdGUudGFyZ2V0OwogICAgICBUeXBlSW5mZXJlbmNlRW5naW5lLnJlc29sdmVJbmZlcmVuY2VOb2RlKHdyaXRlTWVtYmVyKTsKICAgIH0KICAgIERhcnRUeXBlIGluZmVycmVkVHlwZSA9CiAgICAgICAgbm9kZS5faW5mZXJSaHMoaW5mZXJyZXIsIHJlYWRUeXBlLCB3cml0ZUNvbnRleHQpLmluZmVycmVkVHlwZTsKICAgIG5vZGUuX3JlcGxhY2VXaXRoRGVzdWdhcmVkKCk7CiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQoaW5mZXJyZWRUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgdmlzaXRTdGF0aWNHZXQoCiAgICAgIFN0YXRpY0dldCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgTWVtYmVyIHRhcmdldCA9IG5vZGUudGFyZ2V0OwogICAgVHlwZUluZmVyZW5jZUVuZ2luZS5yZXNvbHZlSW5mZXJlbmNlTm9kZSh0YXJnZXQpOwogICAgRGFydFR5cGUgdHlwZSA9IHRhcmdldC5nZXR0ZXJUeXBlOwogICAgaWYgKHRhcmdldCBpcyBQcm9jZWR1cmUgJiYgdGFyZ2V0LmtpbmQgPT0gUHJvY2VkdXJlS2luZC5NZXRob2QpIHsKICAgICAgdHlwZSA9IGluZmVycmVyLmluc3RhbnRpYXRlVGVhck9mZih0eXBlLCB0eXBlQ29udGV4dCwgbm9kZSk7CiAgICB9CiAgICBpbmZlcnJlci5zdG9yZUluZmVycmVkVHlwZShub2RlLCB0eXBlKTsKICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCh0eXBlKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgdmlzaXRTdGF0aWNJbnZvY2F0aW9uKAogICAgICBTdGF0aWNJbnZvY2F0aW9uIG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBGdW5jdGlvblR5cGUgY2FsbGVlVHlwZSA9IG5vZGUudGFyZ2V0ICE9IG51bGwKICAgICAgICA/IG5vZGUudGFyZ2V0LmZ1bmN0aW9uLmZ1bmN0aW9uVHlwZQogICAgICAgIDogbmV3IEZ1bmN0aW9uVHlwZShbXSwgY29uc3QgRHluYW1pY1R5cGUoKSk7CiAgICBib29sIGhhZEV4cGxpY2l0VHlwZUFyZ3VtZW50cyA9CiAgICAgICAgZ2V0RXhwbGljaXRUeXBlQXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKSAhPSBudWxsOwogICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlID0gaW5mZXJyZXIuaW5mZXJJbnZvY2F0aW9uKHR5cGVDb250ZXh0LAogICAgICAgIG5vZGUuZmlsZU9mZnNldCwgY2FsbGVlVHlwZSwgY2FsbGVlVHlwZS5yZXR1cm5UeXBlLCBub2RlLmFyZ3VtZW50cyk7CiAgICBpbmZlcnJlci5zdG9yZUluZmVycmVkVHlwZShub2RlLCBpbmZlcnJlZFR5cGUpOwogICAgaWYgKCFpbmZlcnJlci5pc1RvcExldmVsICYmCiAgICAgICAgIWhhZEV4cGxpY2l0VHlwZUFyZ3VtZW50cyAmJgogICAgICAgIG5vZGUudGFyZ2V0ICE9IG51bGwpIHsKICAgICAgaW5mZXJyZXIubGlicmFyeS5jaGVja0JvdW5kc0luU3RhdGljSW52b2NhdGlvbigKICAgICAgICAgIG5vZGUsIGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudCwgaW5mZXJyZXIuaGVscGVyLnVyaSwKICAgICAgICAgIGluZmVycmVkOiB0cnVlKTsKICAgIH0KICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChpbmZlcnJlZFR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCB2aXNpdFN0cmluZ0NvbmNhdGVuYXRpb24oCiAgICAgIFN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIGlmICghaW5mZXJyZXIuaXNUb3BMZXZlbCkgewogICAgICBmb3IgKEV4cHJlc3Npb24gZXhwcmVzc2lvbiBpbiBub2RlLmV4cHJlc3Npb25zKSB7CiAgICAgICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgICAgICBleHByZXNzaW9uLCBjb25zdCBVbmtub3duVHlwZSgpLCAhaW5mZXJyZXIuaXNUb3BMZXZlbCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCgKICAgICAgICBpbmZlcnJlci5jb3JlVHlwZXMuc3RyaW5nQ2xhc3MucmF3VHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHZpc2l0U3RyaW5nTGl0ZXJhbCgKICAgICAgICAgIFN0cmluZ0xpdGVyYWwgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpID0+CiAgICAgIG5ldyBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0KGluZmVycmVyLmNvcmVUeXBlcy5zdHJpbmdDbGFzcy5yYXdUeXBlKTsKCiAgdm9pZCB2aXNpdFN1cGVySW5pdGlhbGl6ZXJKdWRnbWVudChTdXBlckluaXRpYWxpemVySnVkZ21lbnQgbm9kZSkgewogICAgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tU3VwZXJ0eXBlKAogICAgICAgIGluZmVycmVyLmNsYXNzSGllcmFyY2h5LmdldENsYXNzQXNJbnN0YW5jZU9mKAogICAgICAgICAgICBpbmZlcnJlci50aGlzVHlwZS5jbGFzc05vZGUsIG5vZGUudGFyZ2V0LmVuY2xvc2luZ0NsYXNzKSk7CiAgICBpbmZlcnJlci5pbmZlckludm9jYXRpb24oCiAgICAgICAgbnVsbCwKICAgICAgICBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKAogICAgICAgICAgICBub2RlLnRhcmdldC5mdW5jdGlvbi5mdW5jdGlvblR5cGUud2l0aG91dFR5cGVQYXJhbWV0ZXJzKSwKICAgICAgICBpbmZlcnJlci50aGlzVHlwZSwKICAgICAgICBub2RlLmFyZ3VtZW50SnVkZ21lbnRzLAogICAgICAgIHNraXBUeXBlQXJndW1lbnRJbmZlcmVuY2U6IHRydWUpOwogIH0KCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCB2aXNpdFN1cGVyTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KAogICAgICBTdXBlck1ldGhvZEludm9jYXRpb25KdWRnbWVudCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgaWYgKG5vZGUuaW50ZXJmYWNlVGFyZ2V0ICE9IG51bGwpIHsKICAgICAgaW5mZXJyZXIuaW5zdHJ1bWVudGF0aW9uPy5yZWNvcmQoaW5mZXJyZXIudXJpLCBub2RlLmZpbGVPZmZzZXQsICd0YXJnZXQnLAogICAgICAgICAgbmV3IEluc3RydW1lbnRhdGlvblZhbHVlRm9yTWVtYmVyKG5vZGUuaW50ZXJmYWNlVGFyZ2V0KSk7CiAgICB9CiAgICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHJlc3VsdCA9IGluZmVycmVyLmluZmVyTWV0aG9kSW52b2NhdGlvbigKICAgICAgICBub2RlLCBudWxsLCBub2RlLmZpbGVPZmZzZXQsIGZhbHNlLCB0eXBlQ29udGV4dCwKICAgICAgICB0YXJnZXQ6IG5vZGUuaW50ZXJmYWNlVGFyZ2V0ICE9IG51bGwKICAgICAgICAgICAgPyBuZXcgT2JqZWN0QWNjZXNzVGFyZ2V0LmludGVyZmFjZU1lbWJlcihub2RlLmludGVyZmFjZVRhcmdldCkKICAgICAgICAgICAgOiBjb25zdCBPYmplY3RBY2Nlc3NUYXJnZXQudW5yZXNvbHZlZCgpLAogICAgICAgIG1ldGhvZE5hbWU6IG5vZGUubmFtZSwKICAgICAgICBhcmd1bWVudHM6IG5vZGUuYXJndW1lbnRzKTsKICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gcmVzdWx0LmluZmVycmVkVHlwZTsKICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChyZXN1bHQuaW5mZXJyZWRUeXBlKTsKICB9CgogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgdmlzaXRTdXBlclByb3BlcnR5R2V0SnVkZ21lbnQoCiAgICAgIFN1cGVyUHJvcGVydHlHZXRKdWRnbWVudCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgaWYgKG5vZGUuaW50ZXJmYWNlVGFyZ2V0ICE9IG51bGwpIHsKICAgICAgaW5mZXJyZXIuaW5zdHJ1bWVudGF0aW9uPy5yZWNvcmQoaW5mZXJyZXIudXJpLCBub2RlLmZpbGVPZmZzZXQsICd0YXJnZXQnLAogICAgICAgICAgbmV3IEluc3RydW1lbnRhdGlvblZhbHVlRm9yTWVtYmVyKG5vZGUuaW50ZXJmYWNlVGFyZ2V0KSk7CiAgICB9CiAgICByZXR1cm4gaW5mZXJyZXIuaW5mZXJQcm9wZXJ0eUdldChub2RlLCBudWxsLCBub2RlLmZpbGVPZmZzZXQsIHR5cGVDb250ZXh0LAogICAgICAgIHJlYWRUYXJnZXQ6IG5vZGUuaW50ZXJmYWNlVGFyZ2V0ICE9IG51bGwKICAgICAgICAgICAgPyBuZXcgT2JqZWN0QWNjZXNzVGFyZ2V0LmludGVyZmFjZU1lbWJlcihub2RlLmludGVyZmFjZVRhcmdldCkKICAgICAgICAgICAgOiBjb25zdCBPYmplY3RBY2Nlc3NUYXJnZXQudW5yZXNvbHZlZCgpLAogICAgICAgIHByb3BlcnR5TmFtZTogbm9kZS5uYW1lKTsKICB9CgogIHZvaWQgdmlzaXRTd2l0Y2hTdGF0ZW1lbnRKdWRnbWVudChTd2l0Y2hTdGF0ZW1lbnRKdWRnbWVudCBub2RlKSB7CiAgICBFeHByZXNzaW9uIGV4cHJlc3Npb25KdWRnbWVudCA9IG5vZGUuZXhwcmVzc2lvbkp1ZGdtZW50OwogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKGV4cHJlc3Npb25KdWRnbWVudCwgY29uc3QgVW5rbm93blR5cGUoKSwgdHJ1ZSk7CiAgICBEYXJ0VHlwZSBleHByZXNzaW9uVHlwZSA9IGdldEluZmVycmVkVHlwZShleHByZXNzaW9uSnVkZ21lbnQsIGluZmVycmVyKTsKCiAgICBmb3IgKFN3aXRjaENhc2VKdWRnbWVudCBzd2l0Y2hDYXNlIGluIG5vZGUuY2FzZUp1ZGdtZW50cykgewogICAgICBmb3IgKEV4cHJlc3Npb24gY2FzZUV4cHJlc3Npb24gaW4gc3dpdGNoQ2FzZS5leHByZXNzaW9uSnVkZ21lbnRzKSB7CiAgICAgICAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCBjYXNlRXhwcmVzc2lvblJlc3VsdCA9CiAgICAgICAgICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihjYXNlRXhwcmVzc2lvbiwgZXhwcmVzc2lvblR5cGUsIHRydWUpOwogICAgICAgIERhcnRUeXBlIGNhc2VFeHByZXNzaW9uVHlwZSA9IGNhc2VFeHByZXNzaW9uUmVzdWx0LmluZmVycmVkVHlwZTsKCiAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgZXhwcmVzc2lvbiB0eXBlIGlzIGFzc2lnbmFibGUgdG8gdGhlIGNhc2UKICAgICAgICAvLyBleHByZXNzaW9uIHR5cGUuCiAgICAgICAgaWYgKCFpbmZlcnJlci5pc0Fzc2lnbmFibGUoZXhwcmVzc2lvblR5cGUsIGNhc2VFeHByZXNzaW9uVHlwZSkpIHsKICAgICAgICAgIGluZmVycmVyLmhlbHBlci5hZGRQcm9ibGVtKAogICAgICAgICAgICAgIHRlbXBsYXRlU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGUud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvblR5cGUsIGNhc2VFeHByZXNzaW9uVHlwZSksCiAgICAgICAgICAgICAgY2FzZUV4cHJlc3Npb24uZmlsZU9mZnNldCwKICAgICAgICAgICAgICBub0xlbmd0aCwKICAgICAgICAgICAgICBjb250ZXh0OiBbCiAgICAgICAgICAgICAgICBtZXNzYWdlU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGVDYXVzZS53aXRoTG9jYXRpb24oCiAgICAgICAgICAgICAgICAgICAgaW5mZXJyZXIudXJpLCBleHByZXNzaW9uSnVkZ21lbnQuZmlsZU9mZnNldCwgbm9MZW5ndGgpCiAgICAgICAgICAgICAgXSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGluZmVycmVyLmluZmVyU3RhdGVtZW50KHN3aXRjaENhc2UuYm9keSk7CiAgICB9CiAgfQoKICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHZpc2l0U3ltYm9sTGl0ZXJhbEp1ZGdtZW50KAogICAgICBTeW1ib2xMaXRlcmFsSnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gaW5mZXJyZXIuY29yZVR5cGVzLnN5bWJvbENsYXNzLnJhd1R5cGU7CiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQobm9kZS5pbmZlcnJlZFR5cGUpOwogIH0KCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCB2aXNpdEludmFsaWRDb25zdHJ1Y3Rvckludm9jYXRpb25KdWRnbWVudCgKICAgICAgSW52YWxpZENvbnN0cnVjdG9ySW52b2NhdGlvbkp1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBGdW5jdGlvblR5cGUgY2FsbGVlVHlwZTsKICAgIERhcnRUeXBlIHJldHVyblR5cGU7CiAgICBpZiAobm9kZS5jb25zdHJ1Y3RvciAhPSBudWxsKSB7CiAgICAgIGNhbGxlZVR5cGUgPSBub2RlLmNvbnN0cnVjdG9yLmZ1bmN0aW9uLmZ1bmN0aW9uVHlwZTsKICAgICAgcmV0dXJuVHlwZSA9IGNvbXB1dGVDb25zdHJ1Y3RvclJldHVyblR5cGUobm9kZS5jb25zdHJ1Y3Rvcik7CiAgICB9IGVsc2UgewogICAgICBjYWxsZWVUeXBlID0gbmV3IEZ1bmN0aW9uVHlwZShbXSwgY29uc3QgRHluYW1pY1R5cGUoKSk7CiAgICAgIHJldHVyblR5cGUgPSBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgfQogICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlID0gaW5mZXJyZXIuaW5mZXJJbnZvY2F0aW9uKHR5cGVDb250ZXh0LAogICAgICAgIG5vZGUuZmlsZU9mZnNldCwgY2FsbGVlVHlwZSwgcmV0dXJuVHlwZSwgbm9kZS5hcmd1bWVudEp1ZGdtZW50cyk7CiAgICBub2RlLmluZmVycmVkVHlwZSA9IGluZmVycmVkVHlwZTsKICAgIHJldHVybiB2aXNpdFN5bnRoZXRpY0V4cHJlc3Npb25KdWRnbWVudChub2RlLCB0eXBlQ29udGV4dCk7CiAgfQoKICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHZpc2l0SW52YWxpZFdyaXRlSnVkZ21lbnQoCiAgICAgIEludmFsaWRXcml0ZUp1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICAvLyBXaGVuIGEgY29tcG91bmQgYXNzaWdubWVudCwgdGhlIGV4cHJlc3Npb24gaXMgYWxyZWFkeSB3cmFwcGluZyBpbgogICAgLy8gVmFyaWFibGVEZWNsYXJhdGlvbiBpbiBfbWFrZVJlYWQoKS4gT3RoZXJ3aXNlLCB0ZW1wb3JhcnkgYXNzb2NpYXRlCiAgICAvLyB0aGUgZXhwcmVzc2lvbiB3aXRoIHRoaXMgbm9kZS4KICAgIG5vZGUuZXhwcmVzc2lvbi5wYXJlbnQgPz89IG5vZGU7CgogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgIG5vZGUuZXhwcmVzc2lvbiwgY29uc3QgVW5rbm93blR5cGUoKSwgIWluZmVycmVyLmlzVG9wTGV2ZWwpOwogICAgcmV0dXJuIHZpc2l0U3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50KG5vZGUsIHR5cGVDb250ZXh0KTsKICB9CgogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgdmlzaXRTeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnQoCiAgICAgIFN5bnRoZXRpY0V4cHJlc3Npb25KdWRnbWVudCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgbm9kZS5fcmVwbGFjZVdpdGhEZXN1Z2FyZWQoKTsKICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgIHJldHVybiBjb25zdCBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0KGNvbnN0IER5bmFtaWNUeXBlKCkpOwogIH0KCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCB2aXNpdFRoaXNFeHByZXNzaW9uKAogICAgICAgICAgVGhpc0V4cHJlc3Npb24gbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpID0+CiAgICAgIG5ldyBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0KGluZmVycmVyLnRoaXNUeXBlKTsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCB2aXNpdFRocm93KFRocm93IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgbm9kZS5leHByZXNzaW9uLCBjb25zdCBVbmtub3duVHlwZSgpLCAhaW5mZXJyZXIuaXNUb3BMZXZlbCk7CiAgICByZXR1cm4gY29uc3QgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChjb25zdCBCb3R0b21UeXBlKCkpOwogIH0KCiAgdm9pZCB2aXNpdENhdGNoSnVkZ21lbnQoQ2F0Y2hKdWRnbWVudCBub2RlKSB7CiAgICBpbmZlcnJlci5pbmZlclN0YXRlbWVudChub2RlLmJvZHkpOwogIH0KCiAgdm9pZCB2aXNpdFRyeUNhdGNoSnVkZ21lbnQoVHJ5Q2F0Y2hKdWRnbWVudCBub2RlKSB7CiAgICBpbmZlcnJlci5pbmZlclN0YXRlbWVudChub2RlLmJvZHkpOwogICAgZm9yIChDYXRjaEp1ZGdtZW50IGNhdGNoXyBpbiBub2RlLmNhdGNoSnVkZ21lbnRzKSB7CiAgICAgIHZpc2l0Q2F0Y2hKdWRnbWVudChjYXRjaF8pOwogICAgfQogIH0KCiAgdm9pZCB2aXNpdFRyeUZpbmFsbHlKdWRnbWVudChUcnlGaW5hbGx5SnVkZ21lbnQgbm9kZSkgewogICAgaW5mZXJyZXIuaW5mZXJTdGF0ZW1lbnQobm9kZS5ib2R5KTsKICAgIGluZmVycmVyLmluZmVyU3RhdGVtZW50KG5vZGUuZmluYWxpemVyKTsKICB9CgogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgdmlzaXRUeXBlTGl0ZXJhbEp1ZGdtZW50KAogICAgICBUeXBlTGl0ZXJhbEp1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBub2RlLmluZmVycmVkVHlwZSA9IGluZmVycmVyLmNvcmVUeXBlcy50eXBlQ2xhc3MucmF3VHlwZTsKICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChub2RlLmluZmVycmVkVHlwZSk7CiAgfQoKICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHZpc2l0VmFyaWFibGVBc3NpZ25tZW50SnVkZ21lbnQoCiAgICAgIFZhcmlhYmxlQXNzaWdubWVudEp1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBEYXJ0VHlwZSByZWFkVHlwZTsKICAgIEV4cHJlc3Npb24gcmVhZCA9IG5vZGUucmVhZDsKICAgIGlmIChyZWFkIGlzIFZhcmlhYmxlR2V0KSB7CiAgICAgIHJlYWRUeXBlID0gcmVhZC5wcm9tb3RlZFR5cGUgPz8gcmVhZC52YXJpYWJsZS50eXBlOwogICAgfQogICAgRGFydFR5cGUgd3JpdGVDb250ZXh0ID0gY29uc3QgVW5rbm93blR5cGUoKTsKICAgIEV4cHJlc3Npb24gd3JpdGUgPSBub2RlLndyaXRlOwogICAgaWYgKHdyaXRlIGlzIFZhcmlhYmxlU2V0KSB7CiAgICAgIHdyaXRlQ29udGV4dCA9IHdyaXRlLnZhcmlhYmxlLnR5cGU7CiAgICAgIGlmIChyZWFkICE9IG51bGwpIHsKICAgICAgICBub2RlLl9zdG9yZUxldFR5cGUoaW5mZXJyZXIsIHJlYWQsIHdyaXRlQ29udGV4dCk7CiAgICAgIH0KICAgIH0KICAgIERhcnRUeXBlIGluZmVycmVkVHlwZSA9CiAgICAgICAgbm9kZS5faW5mZXJSaHMoaW5mZXJyZXIsIHJlYWRUeXBlLCB3cml0ZUNvbnRleHQpLmluZmVycmVkVHlwZTsKICAgIG5vZGUuX3JlcGxhY2VXaXRoRGVzdWdhcmVkKCk7CiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQoaW5mZXJyZWRUeXBlKTsKICB9CgogIHZvaWQgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQoVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50IG5vZGUpIHsKICAgIEV4cHJlc3Npb24gaW5pdGlhbGl6ZXJKdWRnbWVudCA9IG5vZGUuaW5pdGlhbGl6ZXJKdWRnbWVudDsKICAgIERhcnRUeXBlIGRlY2xhcmVkVHlwZSA9CiAgICAgICAgbm9kZS5faW1wbGljaXRseVR5cGVkID8gY29uc3QgVW5rbm93blR5cGUoKSA6IG5vZGUudHlwZTsKICAgIERhcnRUeXBlIGluZmVycmVkVHlwZTsKICAgIERhcnRUeXBlIGluaXRpYWxpemVyVHlwZTsKICAgIGlmIChpbml0aWFsaXplckp1ZGdtZW50ICE9IG51bGwpIHsKICAgICAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCBpbml0aWFsaXplclJlc3VsdCA9IGluZmVycmVyLmluZmVyRXhwcmVzc2lvbigKICAgICAgICAgIGluaXRpYWxpemVySnVkZ21lbnQsCiAgICAgICAgICBkZWNsYXJlZFR5cGUsCiAgICAgICAgICAhaW5mZXJyZXIuaXNUb3BMZXZlbCB8fCBub2RlLl9pbXBsaWNpdGx5VHlwZWQsCiAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgICAgaW5pdGlhbGl6ZXJUeXBlID0gaW5pdGlhbGl6ZXJSZXN1bHQuaW5mZXJyZWRUeXBlOwogICAgICBpbmZlcnJlZFR5cGUgPSBpbmZlcnJlci5pbmZlckRlY2xhcmF0aW9uVHlwZShpbml0aWFsaXplclR5cGUpOwogICAgfSBlbHNlIHsKICAgICAgaW5mZXJyZWRUeXBlID0gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgIH0KICAgIGlmIChub2RlLl9pbXBsaWNpdGx5VHlwZWQpIHsKICAgICAgaW5mZXJyZXIuaW5zdHJ1bWVudGF0aW9uPy5yZWNvcmQoaW5mZXJyZXIudXJpLCBub2RlLmZpbGVPZmZzZXQsICd0eXBlJywKICAgICAgICAgIG5ldyBJbnN0cnVtZW50YXRpb25WYWx1ZUZvclR5cGUoaW5mZXJyZWRUeXBlKSk7CiAgICAgIG5vZGUudHlwZSA9IGluZmVycmVkVHlwZTsKICAgIH0KICAgIGlmIChub2RlLmluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgRXhwcmVzc2lvbiByZXBsYWNlZEluaXRpYWxpemVyID0gaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZSgKICAgICAgICAgIG5vZGUudHlwZSwgaW5pdGlhbGl6ZXJUeXBlLCBub2RlLmluaXRpYWxpemVyLCBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiBub2RlLnR5cGUgaXMgVm9pZFR5cGUpOwogICAgICBpZiAocmVwbGFjZWRJbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgbm9kZS5pbml0aWFsaXplciA9IHJlcGxhY2VkSW5pdGlhbGl6ZXI7CiAgICAgIH0KICAgIH0KICAgIGlmICghaW5mZXJyZXIuaXNUb3BMZXZlbCkgewogICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5ID0gaW5mZXJyZXIubGlicmFyeTsKICAgICAgaWYgKG5vZGUuX2ltcGxpY2l0bHlUeXBlZCkgewogICAgICAgIGxpYnJhcnkuY2hlY2tCb3VuZHNJblZhcmlhYmxlRGVjbGFyYXRpb24oCiAgICAgICAgICAgIG5vZGUsIGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudCwgaW5mZXJyZXIuaGVscGVyLnVyaSwKICAgICAgICAgICAgaW5mZXJyZWQ6IHRydWUpOwogICAgICB9CiAgICB9CiAgfQoKICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHZpc2l0VW5yZXNvbHZlZFRhcmdldEludm9jYXRpb25KdWRnbWVudCgKICAgICAgVW5yZXNvbHZlZFRhcmdldEludm9jYXRpb25KdWRnbWVudCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCByZXN1bHQgPQogICAgICAgIHZpc2l0U3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50KG5vZGUsIHR5cGVDb250ZXh0KTsKICAgIGluZmVycmVyLmluZmVySW52b2NhdGlvbigKICAgICAgICB0eXBlQ29udGV4dCwKICAgICAgICBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgVHlwZUluZmVycmVySW1wbC51bmtub3duRnVuY3Rpb24sCiAgICAgICAgY29uc3QgRHluYW1pY1R5cGUoKSwKICAgICAgICBub2RlLmFyZ3VtZW50c0p1ZGdtZW50KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHZpc2l0VW5yZXNvbHZlZFZhcmlhYmxlQXNzaWdubWVudEp1ZGdtZW50KAogICAgICBVbnJlc29sdmVkVmFyaWFibGVBc3NpZ25tZW50SnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihub2RlLnJocywgY29uc3QgVW5rbm93blR5cGUoKSwgdHJ1ZSk7CiAgICBub2RlLmluZmVycmVkVHlwZSA9IG5vZGUuaXNDb21wb3VuZAogICAgICAgID8gY29uc3QgRHluYW1pY1R5cGUoKQogICAgICAgIDogZ2V0SW5mZXJyZWRUeXBlKG5vZGUucmhzLCBpbmZlcnJlcik7CiAgICByZXR1cm4gdmlzaXRTeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnQobm9kZSwgdHlwZUNvbnRleHQpOwogIH0KCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCB2aXNpdFZhcmlhYmxlR2V0SnVkZ21lbnQoCiAgICAgIFZhcmlhYmxlR2V0SnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudCB2YXJpYWJsZSA9IG5vZGUudmFyaWFibGU7CiAgICBib29sIG11dGF0ZWRJbkNsb3N1cmUgPSB2YXJpYWJsZS5fbXV0YXRlZEluQ2xvc3VyZTsKICAgIERhcnRUeXBlIGRlY2xhcmVkT3JJbmZlcnJlZFR5cGUgPSB2YXJpYWJsZS50eXBlOwoKICAgIERhcnRUeXBlIHByb21vdGVkVHlwZSA9IGluZmVycmVyLnR5cGVQcm9tb3RlcgogICAgICAgIC5jb21wdXRlUHJvbW90ZWRUeXBlKG5vZGUuX2ZhY3QsIG5vZGUuX3Njb3BlLCBtdXRhdGVkSW5DbG9zdXJlKTsKICAgIGlmIChwcm9tb3RlZFR5cGUgIT0gbnVsbCkgewogICAgICBpbmZlcnJlci5pbnN0cnVtZW50YXRpb24/LnJlY29yZChpbmZlcnJlci51cmksIG5vZGUuZmlsZU9mZnNldCwKICAgICAgICAgICdwcm9tb3RlZFR5cGUnLCBuZXcgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JUeXBlKHByb21vdGVkVHlwZSkpOwogICAgfQogICAgbm9kZS5wcm9tb3RlZFR5cGUgPSBwcm9tb3RlZFR5cGU7CiAgICBEYXJ0VHlwZSB0eXBlID0gcHJvbW90ZWRUeXBlID8/IGRlY2xhcmVkT3JJbmZlcnJlZFR5cGU7CiAgICBpZiAodmFyaWFibGUuX2lzTG9jYWxGdW5jdGlvbikgewogICAgICB0eXBlID0gaW5mZXJyZXIuaW5zdGFudGlhdGVUZWFyT2ZmKHR5cGUsIHR5cGVDb250ZXh0LCBub2RlKTsKICAgIH0KICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gdHlwZTsKICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCh0eXBlKTsKICB9CgogIHZvaWQgdmlzaXRXaGlsZUp1ZGdtZW50KFdoaWxlSnVkZ21lbnQgbm9kZSkgewogICAgRXhwcmVzc2lvbiBjb25kaXRpb25KdWRnbWVudCA9IG5vZGUuY29uZGl0aW9uSnVkZ21lbnQ7CiAgICBJbnRlcmZhY2VUeXBlIGV4cGVjdGVkVHlwZSA9IGluZmVycmVyLmNvcmVUeXBlcy5ib29sQ2xhc3MucmF3VHlwZTsKICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbigKICAgICAgICBjb25kaXRpb25KdWRnbWVudCwgZXhwZWN0ZWRUeXBlLCAhaW5mZXJyZXIuaXNUb3BMZXZlbCk7CiAgICBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKAogICAgICAgIGV4cGVjdGVkVHlwZSwKICAgICAgICBnZXRJbmZlcnJlZFR5cGUoY29uZGl0aW9uSnVkZ21lbnQsIGluZmVycmVyKSwKICAgICAgICBub2RlLmNvbmRpdGlvbiwKICAgICAgICBub2RlLmNvbmRpdGlvbi5maWxlT2Zmc2V0KTsKICAgIGluZmVycmVyLmluZmVyU3RhdGVtZW50KG5vZGUuYm9keSk7CiAgfQoKICB2b2lkIHZpc2l0WWllbGRKdWRnbWVudChZaWVsZEp1ZGdtZW50IG5vZGUpIHsKICAgIEV4cHJlc3Npb24ganVkZ21lbnQgPSBub2RlLmp1ZGdtZW50OwogICAgQ2xvc3VyZUNvbnRleHQgY2xvc3VyZUNvbnRleHQgPSBpbmZlcnJlci5jbG9zdXJlQ29udGV4dDsKICAgIGlmIChjbG9zdXJlQ29udGV4dC5pc0dlbmVyYXRvcikgewogICAgICBEYXJ0VHlwZSB0eXBlQ29udGV4dCA9IGNsb3N1cmVDb250ZXh0LnJldHVybk9yWWllbGRDb250ZXh0OwogICAgICBpZiAobm9kZS5pc1lpZWxkU3RhciAmJiB0eXBlQ29udGV4dCAhPSBudWxsKSB7CiAgICAgICAgdHlwZUNvbnRleHQgPSBpbmZlcnJlci53cmFwVHlwZSgKICAgICAgICAgICAgdHlwZUNvbnRleHQsCiAgICAgICAgICAgIGNsb3N1cmVDb250ZXh0LmlzQXN5bmMKICAgICAgICAgICAgICAgID8gaW5mZXJyZXIuY29yZVR5cGVzLnN0cmVhbUNsYXNzCiAgICAgICAgICAgICAgICA6IGluZmVycmVyLmNvcmVUeXBlcy5pdGVyYWJsZUNsYXNzKTsKICAgICAgfQogICAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oanVkZ21lbnQsIHR5cGVDb250ZXh0LCB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihqdWRnbWVudCwgY29uc3QgVW5rbm93blR5cGUoKSwgdHJ1ZSk7CiAgICB9CiAgICBjbG9zdXJlQ29udGV4dC5oYW5kbGVZaWVsZChpbmZlcnJlciwgbm9kZS5pc1lpZWxkU3RhciwKICAgICAgICBnZXRJbmZlcnJlZFR5cGUoanVkZ21lbnQsIGluZmVycmVyKSwgbm9kZS5leHByZXNzaW9uLCBub2RlLmZpbGVPZmZzZXQpOwogIH0KCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCB2aXNpdExvYWRMaWJyYXJ5SnVkZ21lbnQoCiAgICAgIExvYWRMaWJyYXJ5SnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIG5vZGUuaW5mZXJyZWRUeXBlID0KICAgICAgICBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQuZnV0dXJlVHlwZShjb25zdCBEeW5hbWljVHlwZSgpKTsKICAgIGlmIChub2RlLmFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIEZ1bmN0aW9uVHlwZSBjYWxsZWVUeXBlID0gbmV3IEZ1bmN0aW9uVHlwZShbXSwgbm9kZS5pbmZlcnJlZFR5cGUpOwogICAgICBpbmZlcnJlci5pbmZlckludm9jYXRpb24odHlwZUNvbnRleHQsIG5vZGUuZmlsZU9mZnNldCwgY2FsbGVlVHlwZSwKICAgICAgICAgIGNhbGxlZVR5cGUucmV0dXJuVHlwZSwgbm9kZS5hcmd1bWVudEp1ZGdtZW50cyk7CiAgICB9CiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQobm9kZS5pbmZlcnJlZFR5cGUpOwogIH0KCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCB2aXNpdExvYWRMaWJyYXJ5VGVhck9mZkp1ZGdtZW50KAogICAgICBMb2FkTGlicmFyeVRlYXJPZmZKdWRnbWVudCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBuZXcgRnVuY3Rpb25UeXBlKAogICAgICAgIFtdLCBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQuZnV0dXJlVHlwZShjb25zdCBEeW5hbWljVHlwZSgpKSk7CiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQobm9kZS5pbmZlcnJlZFR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCB2aXNpdENoZWNrTGlicmFyeUlzTG9hZGVkKAogICAgICAgICAgQ2hlY2tMaWJyYXJ5SXNMb2FkZWQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpID0+CiAgICAgIG5ldyBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0KGluZmVycmVyLmNvcmVUeXBlcy5vYmplY3RDbGFzcy5yYXdUeXBlKTsKfQqIwQBOTjwBIgEXQCUBFwFAHQFBHgFGIwFEJgEjAQwvL0oeQQQBDEJKHkEEAQw0OzsBDC00SgEMMDdNAQwvMR5BHjUEAUgsBAFEOzdHHkAfFjYbJyMgRwYEAQwyNEc8BidPOzs0OAQBMDEpBgQBDC41SwEMNSYEATI0J0otOjkgPyAGPQQBDDg6KyErR00fFi4YJExRO0AzJDgEAQw4OkkbR0hMFjUuSjwtCBpFIhcgKzoyCCs1MghQODwrOksIKzVLCDkGJDo2FRkrMxggNCA3JzRHHQgGOAQBQiYEATg6Ti1BLB4tPwQBKjsoQ1EfEjYYJAQBMTMqRQQBQiYEAUweQh4EAUdJJDo2FRkrMyAgJiA3JzBHHQgGOAQBQjJFPx9IBAElSR8aHTJDGSkN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AUw/HEEbHidOHxg5IDhFDSoGIU46IAYkQkkxKTAIBiA3IzJHHQgGBAFFRyc9HhUZKh0hEwQBR0lDKB4vQAQBNjg6ODUBMkkgRkoGJjwlQwYeMAQBMDtHHkAfFjYYJCgEATApPSZCNSkZIzE1CD0NRQY7UAQBNjgYSCJJSToGPQQBPT8qTT0EAQw3Pk0CATlwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2luZmVyZW5jZV92aXNpdG9yLmRhcnRGc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC9pbmZlcnJlZF90eXBlX3Zpc2l0b3IuZGFydJJKLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgImtlcm5lbF9zaGFkb3dfYXN0LmRhcnQiOwoKRGFydFR5cGUgZ2V0SW5mZXJyZWRUeXBlKEV4cHJlc3Npb24gZXhwcmVzc2lvbiwgVHlwZUluZmVycmVySW1wbCBpbmZlcnJlcikgewogIGlmIChleHByZXNzaW9uIGlzIEV4cHJlc3Npb25KdWRnbWVudCkgewogICAgcmV0dXJuIGV4cHJlc3Npb24uaW5mZXJyZWRUeXBlOwogIH0gZWxzZSB7CiAgICByZXR1cm4gZXhwcmVzc2lvbi5hY2NlcHQxKGNvbnN0IEluZmVycmVkVHlwZVZpc2l0b3IoKSwgaW5mZXJyZXIpOwogIH0KfQoKRGFydFR5cGUgaW52YWxpZFRvQm90dG9tKERhcnRUeXBlIHR5cGUpIHsKICAvLyBUT0RPKGFoZSk6IFRoaXMgc2hvdWxkIHJlYWxseSByZXR1cm4gW0JvdHRvbVR5cGVdLCBidXQgdGhhdCByZXF1aXJlcyBtb3JlCiAgLy8gd29yayB0byB0aGUgS2VybmVsIHR5cGUgc3lzdGVtIGFuZCBpbXBsZW1lbnRhdGlvbi4KICByZXR1cm4gKHR5cGUgPT0gbnVsbCB8fCB0eXBlIGlzIEludmFsaWRUeXBlKSA/IGNvbnN0IER5bmFtaWNUeXBlKCkgOiB0eXBlOwp9CgpEYXJ0VHlwZSBpbnZhbGlkVG9Ub3AoRGFydFR5cGUgdHlwZSkgewogIHJldHVybiAodHlwZSA9PSBudWxsIHx8IHR5cGUgaXMgSW52YWxpZFR5cGUpID8gY29uc3QgRHluYW1pY1R5cGUoKSA6IHR5cGU7Cn0KCmNsYXNzIEluZmVycmVkVHlwZVZpc2l0b3IKICAgIGV4dGVuZHMgRXhwcmVzc2lvblZpc2l0b3IxPERhcnRUeXBlLCBUeXBlSW5mZXJyZXJJbXBsPiB7CiAgY29uc3QgSW5mZXJyZWRUeXBlVmlzaXRvcigpOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBkZWZhdWx0RXhwcmVzc2lvbihFeHByZXNzaW9uIG5vZGUsIFR5cGVJbmZlcnJlckltcGwgaW5mZXJyZXIpIHsKICAgIHVuaGFuZGxlZCgiJHtub2RlLnJ1bnRpbWVUeXBlfSIsICJnZXRJbmZlcnJlZFR5cGUiLCBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgaW5mZXJyZXIudXJpKTsKICAgIHJldHVybiBjb25zdCBJbnZhbGlkVHlwZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRJbnRMaXRlcmFsKEludExpdGVyYWwgbm9kZSwgVHlwZUluZmVycmVySW1wbCBpbmZlcnJlcikgewogICAgcmV0dXJuIGluZmVycmVyLmNvcmVUeXBlcy5pbnRDbGFzcy5yYXdUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXREb3VibGVMaXRlcmFsKERvdWJsZUxpdGVyYWwgbm9kZSwgVHlwZUluZmVycmVySW1wbCBpbmZlcnJlcikgewogICAgcmV0dXJuIGluZmVycmVyLmNvcmVUeXBlcy5kb3VibGVDbGFzcy5yYXdUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRJbnZhbGlkRXhwcmVzc2lvbigKICAgICAgSW52YWxpZEV4cHJlc3Npb24gbm9kZSwgVHlwZUluZmVycmVySW1wbCBpbmZlcnJlcikgewogICAgcmV0dXJuIGNvbnN0IEJvdHRvbVR5cGUoKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0QXNFeHByZXNzaW9uKEFzRXhwcmVzc2lvbiBub2RlLCBUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyKSB7CiAgICByZXR1cm4gaW52YWxpZFRvQm90dG9tKG5vZGUudHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdEF3YWl0RXhwcmVzc2lvbigKICAgICAgQXdhaXRFeHByZXNzaW9uIG5vZGUsIFR5cGVJbmZlcnJlckltcGwgaW5mZXJyZXIpIHsKICAgIHJldHVybiBpbmZlcnJlci5yZWFkSW5mZXJyZWRUeXBlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRUaGlzRXhwcmVzc2lvbihUaGlzRXhwcmVzc2lvbiBub2RlLCBUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyKSB7CiAgICByZXR1cm4gaW52YWxpZFRvQm90dG9tKGluZmVycmVyLnRoaXNUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0Qm9vbExpdGVyYWwoQm9vbExpdGVyYWwgbm9kZSwgVHlwZUluZmVycmVySW1wbCBpbmZlcnJlcikgewogICAgcmV0dXJuIGluZmVycmVyLmNvcmVUeXBlcy5ib29sQ2xhc3MucmF3VHlwZTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0Q29uZGl0aW9uYWxFeHByZXNzaW9uKAogICAgICBDb25kaXRpb25hbEV4cHJlc3Npb24gbm9kZSwgVHlwZUluZmVycmVySW1wbCBpbmZlcnJlcikgewogICAgcmV0dXJuIG5vZGUuc3RhdGljVHlwZTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKAogICAgICBDb25zdHJ1Y3Rvckludm9jYXRpb24gbm9kZSwgVHlwZUluZmVycmVySW1wbCBpbmZlcnJlcikgewogICAgcmV0dXJuIGluZmVycmVyLnJlYWRJbmZlcnJlZFR5cGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdElzRXhwcmVzc2lvbihJc0V4cHJlc3Npb24gbm9kZSwgVHlwZUluZmVycmVySW1wbCBpbmZlcnJlcikgewogICAgcmV0dXJuIGluZmVycmVyLmNvcmVUeXBlcy5ib29sQ2xhc3MucmF3VHlwZTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKAogICAgICBGdW5jdGlvbkV4cHJlc3Npb24gbm9kZSwgVHlwZUluZmVycmVySW1wbCBpbmZlcnJlcikgewogICAgcmV0dXJuIGluZmVycmVyLnJlYWRJbmZlcnJlZFR5cGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdExvZ2ljYWxFeHByZXNzaW9uKAogICAgICBMb2dpY2FsRXhwcmVzc2lvbiBub2RlLCBUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyKSB7CiAgICByZXR1cm4gaW5mZXJyZXIuY29yZVR5cGVzLmJvb2xDbGFzcy5yYXdUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXROb3QoTm90IG5vZGUsIFR5cGVJbmZlcnJlckltcGwgaW5mZXJyZXIpIHsKICAgIHJldHVybiBpbmZlcnJlci5jb3JlVHlwZXMuYm9vbENsYXNzLnJhd1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdE51bGxMaXRlcmFsKE51bGxMaXRlcmFsIG5vZGUsIFR5cGVJbmZlcnJlckltcGwgaW5mZXJyZXIpIHsKICAgIHJldHVybiBpbmZlcnJlci5jb3JlVHlwZXMubnVsbENsYXNzLnJhd1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdFByb3BlcnR5R2V0KFByb3BlcnR5R2V0IG5vZGUsIFR5cGVJbmZlcnJlckltcGwgaW5mZXJyZXIpIHsKICAgIHJldHVybiBpbmZlcnJlci5yZWFkSW5mZXJyZWRUeXBlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRSZXRocm93KFJldGhyb3cgbm9kZSwgVHlwZUluZmVycmVySW1wbCBpbmZlcnJlcikgewogICAgcmV0dXJuIGNvbnN0IEJvdHRvbVR5cGUoKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbigKICAgICAgU3RyaW5nQ29uY2F0ZW5hdGlvbiBub2RlLCBUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyKSB7CiAgICByZXR1cm4gaW5mZXJyZXIuY29yZVR5cGVzLnN0cmluZ0NsYXNzLnJhd1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdFN0cmluZ0xpdGVyYWwoU3RyaW5nTGl0ZXJhbCBub2RlLCBUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyKSB7CiAgICByZXR1cm4gaW5mZXJyZXIuY29yZVR5cGVzLnN0cmluZ0NsYXNzLnJhd1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdExldChMZXQgbm9kZSwgVHlwZUluZmVycmVySW1wbCBpbmZlcnJlcikgewogICAgLy8gVE9ETyhhaGUpOiBXZSBzaG91bGQgYmUgYWJsZSB0byByZXR1cm4gdGhlIGluZmVycmVkIHR5cGUgb2YKICAgIC8vIG5vZGUuYm9keS4gSG93ZXZlciwgdGhhdCB0eXBlIG1heSBiZSBsb3N0LCBmb3IgZXhhbXBsZSwgaW4KICAgIC8vIFZhcmlhYmxlQXNzaWdubWVudEp1ZGdtZW50Ll9yZXBsYWNlV2l0aERlc3VnYXJlZC4KICAgIHJldHVybiBpbmZlcnJlci5yZWFkSW5mZXJyZWRUeXBlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRTdGF0aWNHZXQoU3RhdGljR2V0IG5vZGUsIFR5cGVJbmZlcnJlckltcGwgaW5mZXJyZXIpIHsKICAgIHJldHVybiBpbmZlcnJlci5yZWFkSW5mZXJyZWRUeXBlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRTdGF0aWNJbnZvY2F0aW9uKAogICAgICBTdGF0aWNJbnZvY2F0aW9uIG5vZGUsIFR5cGVJbmZlcnJlckltcGwgaW5mZXJyZXIpIHsKICAgIHJldHVybiBpbmZlcnJlci5yZWFkSW5mZXJyZWRUeXBlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRUaHJvdyhUaHJvdyBub2RlLCBUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyKSB7CiAgICByZXR1cm4gY29uc3QgQm90dG9tVHlwZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRDaGVja0xpYnJhcnlJc0xvYWRlZCgKICAgICAgQ2hlY2tMaWJyYXJ5SXNMb2FkZWQgbm9kZSwgVHlwZUluZmVycmVySW1wbCBpbmZlcnJlcikgewogICAgcmV0dXJuIGluZmVycmVyLmNvcmVUeXBlcy5vYmplY3RDbGFzcy5yYXdUeXBlOwogIH0KfQqApABOTjwBIgFNKiQLRgQCASpPOE0CASdNAgEaPR8BDEtJFyAEAQxJMAQBDE8zBAEMIzsfBAEMTScEAQwhOSwEAQxRLwQBDEsxBAEMJz8cBAEMJz8sBAEMTTEEAQwkPCwEAQwjOzEEAQw7MQQBDEsxBAEMSywEAQxDHwQBDCU9MwQBDE8zBAEMO0NCOSwEAQxHLAQBDCI6LAQBDD8fBAEMJj4zBAIBPXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvaW5mZXJyZWRfdHlwZV92aXNpdG9yLmRhcnQ5c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2J1aWxkZXIvYnVpbGRlci5kYXJ0h9YvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5idWlsZGVyOwoKZXhwb3J0ICcuLi9pZGVudGlmaWVycy5kYXJ0JwogICAgc2hvdwogICAgICAgIElkZW50aWZpZXIsCiAgICAgICAgSW5pdGlhbGl6ZWRJZGVudGlmaWVyLAogICAgICAgIFF1YWxpZmllZE5hbWUsCiAgICAgICAgZGVwcmVjYXRlZF9leHRyYWN0VG9rZW4sCiAgICAgICAgZmxhdHRlbk5hbWU7CgpleHBvcnQgJy4uL3Njb3BlLmRhcnQnIHNob3cgQWNjZXNzRXJyb3JCdWlsZGVyLCBTY29wZSwgU2NvcGVCdWlsZGVyOwoKZXhwb3J0ICdidWlsdGluX3R5cGVfYnVpbGRlci5kYXJ0JyBzaG93IEJ1aWx0aW5UeXBlQnVpbGRlcjsKCmV4cG9ydCAnY2xhc3NfYnVpbGRlci5kYXJ0JyBzaG93IENsYXNzQnVpbGRlcjsKCmV4cG9ydCAnY29uc3RydWN0b3JfcmVmZXJlbmNlX2J1aWxkZXIuZGFydCcgc2hvdyBDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXI7CgpleHBvcnQgJ2RlY2xhcmF0aW9uLmRhcnQnIHNob3cgQnVpbGRlcjsKCmV4cG9ydCAnZHluYW1pY190eXBlX2J1aWxkZXIuZGFydCcgc2hvdyBEeW5hbWljVHlwZUJ1aWxkZXI7CgpleHBvcnQgJ2VudW1fYnVpbGRlci5kYXJ0JyBzaG93IEVudW1CdWlsZGVyLCBFbnVtQ29uc3RhbnRJbmZvOwoKZXhwb3J0ICdmaWVsZF9idWlsZGVyLmRhcnQnIHNob3cgRmllbGRCdWlsZGVyOwoKZXhwb3J0ICdmb3JtYWxfcGFyYW1ldGVyX2J1aWxkZXIuZGFydCcgc2hvdyBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyOwoKZXhwb3J0ICdwcm9jZWR1cmVfYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIEZ1bmN0aW9uQnVpbGRlciwKICAgICAgICBDb25zdHJ1Y3RvckJ1aWxkZXIsCiAgICAgICAgUHJvY2VkdXJlQnVpbGRlciwKICAgICAgICBSZWRpcmVjdGluZ0ZhY3RvcnlCdWlsZGVyOwoKZXhwb3J0ICdmdW5jdGlvbl90eXBlX2J1aWxkZXIuZGFydCcgc2hvdyBGdW5jdGlvblR5cGVCdWlsZGVyOwoKZXhwb3J0ICdpbnZhbGlkX3R5cGVfYnVpbGRlci5kYXJ0JyBzaG93IEludmFsaWRUeXBlQnVpbGRlcjsKCmV4cG9ydCAnbGlicmFyeV9idWlsZGVyLmRhcnQnIHNob3cgTGlicmFyeUJ1aWxkZXI7CgpleHBvcnQgJ21lbWJlcl9idWlsZGVyLmRhcnQnIHNob3cgTWVtYmVyQnVpbGRlcjsKCmV4cG9ydCAnbWV0YWRhdGFfYnVpbGRlci5kYXJ0JyBzaG93IE1ldGFkYXRhQnVpbGRlcjsKCmV4cG9ydCAnbWl4aW5fYXBwbGljYXRpb25fYnVpbGRlci5kYXJ0JyBzaG93IE1peGluQXBwbGljYXRpb25CdWlsZGVyOwoKZXhwb3J0ICdtb2RpZmllcl9idWlsZGVyLmRhcnQnIHNob3cgTW9kaWZpZXJCdWlsZGVyOwoKZXhwb3J0ICduYW1lX2l0ZXJhdG9yLmRhcnQnIHNob3cgTmFtZUl0ZXJhdG9yOwoKZXhwb3J0ICduYW1lZF90eXBlX2J1aWxkZXIuZGFydCcgc2hvdyBOYW1lZFR5cGVCdWlsZGVyOwoKZXhwb3J0ICdwcmVmaXhfYnVpbGRlci5kYXJ0JyBzaG93IFByZWZpeEJ1aWxkZXI7CgpleHBvcnQgJ3R5cGVfYWxpYXNfYnVpbGRlci5kYXJ0JyBzaG93IFR5cGVBbGlhc0J1aWxkZXI7CgpleHBvcnQgJ3R5cGVfYnVpbGRlci5kYXJ0JyBzaG93IFR5cGVCdWlsZGVyOwoKZXhwb3J0ICd0eXBlX2RlY2xhcmF0aW9uX2J1aWxkZXIuZGFydCcgc2hvdyBUeXBlRGVjbGFyYXRpb25CdWlsZGVyOwoKZXhwb3J0ICd0eXBlX3ZhcmlhYmxlX2J1aWxkZXIuZGFydCcgc2hvdyBUeXBlVmFyaWFibGVCdWlsZGVyOwoKZXhwb3J0ICd1bnJlc29sdmVkX3R5cGUuZGFydCcgc2hvdyBVbnJlc29sdmVkVHlwZTsKCmV4cG9ydCAndm9pZF90eXBlX2J1aWxkZXIuZGFydCcgc2hvdyBWb2lkVHlwZUJ1aWxkZXI7CkgATk48ARcBHQkUHxchFQFFATwBLwFOASgBPAE/AS8BRAEgCRkcGiMBPgE8ATMBMQE1AUYBNQEvATgBMQE4AS0BRAE+ATMBNgEwcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvYnVpbGRlci5kYXJ0RXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9idWlsZGVyL2RlY2xhcmF0aW9uX2J1aWxkZXIuZGFydIegLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDpjb3JlJyBoaWRlIE1hcEVudHJ5OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCc7CgppbXBvcnQgJy4uL21lc3NhZ2VzLmRhcnQnOwppbXBvcnQgJy4uL3Njb3BlLmRhcnQnOwoKaW1wb3J0ICdidWlsZGVyLmRhcnQnOwppbXBvcnQgJ2xpYnJhcnlfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICdtZXRhZGF0YV9idWlsZGVyLmRhcnQnOwppbXBvcnQgJ3R5cGVfZGVjbGFyYXRpb25fYnVpbGRlci5kYXJ0JzsKCmFic3RyYWN0IGNsYXNzIERlY2xhcmF0aW9uQnVpbGRlciBleHRlbmRzIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIgewogIGZpbmFsIFNjb3BlIHNjb3BlOwoKICBmaW5hbCBTY29wZUJ1aWxkZXIgc2NvcGVCdWlsZGVyOwoKICBEZWNsYXJhdGlvbkJ1aWxkZXIoTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLCBpbnQgbW9kaWZpZXJzLCBTdHJpbmcgbmFtZSwKICAgICAgTGlicmFyeUJ1aWxkZXIgcGFyZW50LCBpbnQgY2hhck9mZnNldCwgdGhpcy5zY29wZSkKICAgICAgOiBzY29wZUJ1aWxkZXIgPSBuZXcgU2NvcGVCdWlsZGVyKHNjb3BlKSwKICAgICAgICBzdXBlcihtZXRhZGF0YSwgbW9kaWZpZXJzLCBuYW1lLCBwYXJlbnQsIGNoYXJPZmZzZXQpOwoKICBMaWJyYXJ5QnVpbGRlciBnZXQgbGlicmFyeSB7CiAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5ID0gcGFyZW50OwogICAgcmV0dXJuIGxpYnJhcnkucGFydE9mTGlicmFyeSA/PyBsaWJyYXJ5OwogIH0KCiAgLy8vIExvb2t1cCBhIG1lbWJlciBhY2Nlc3NlZCBzdGF0aWNhbGx5IHRocm91Z2ggdGhpcyBkZWNsYXJhdGlvbi4KICBCdWlsZGVyIGZpbmRTdGF0aWNCdWlsZGVyKAogICAgICBTdHJpbmcgbmFtZSwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpLCBMaWJyYXJ5QnVpbGRlciBhY2Nlc3NpbmdMaWJyYXJ5LAogICAgICB7Ym9vbCBpc1NldHRlcjogZmFsc2V9KTsKCiAgdm9pZCBhZGRQcm9ibGVtKE1lc3NhZ2UgbWVzc2FnZSwgaW50IGNoYXJPZmZzZXQsIGludCBsZW5ndGgsCiAgICAgIHtib29sIHdhc0hhbmRsZWQ6IGZhbHNlLCBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0fSkgewogICAgbGlicmFyeS5hZGRQcm9ibGVtKG1lc3NhZ2UsIGNoYXJPZmZzZXQsIGxlbmd0aCwgZmlsZVVyaSwKICAgICAgICB3YXNIYW5kbGVkOiB3YXNIYW5kbGVkLCBjb250ZXh0OiBjb250ZXh0KTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSB0eXBlIG9mIGB0aGlzYCBpbiBhbiBpbnN0YW5jZSBvZiB0aGlzIGRlY2xhcmF0aW9uLgogIC8vLwogIC8vLyBUaGlzIGlzIG5vbi1udWxsIGZvciBjbGFzcyBhbmQgbWl4aW4gZGVjbGFyYXRpb25zIGFuZCBgbnVsbGAgZm9yCiAgLy8vIGV4dGVuc2lvbiBkZWNsYXJhdGlvbnMuCiAgSW50ZXJmYWNlVHlwZSBnZXQgdGhpc1R5cGU7CgogIC8vLyBMb29rdXBzIHRoZSBtZW1iZXIgW25hbWVdIGRlY2xhcmVkIGluIHRoaXMgZGVjbGFyYXRpb24uCiAgLy8vCiAgLy8vIElmIFtzZXR0ZXJdIGlzIGB0cnVlYCB0aGUgc291Z2h0IG1lbWJlciBpcyBhIHNldHRlciBvciBhc3NpZ25hYmxlIGZpZWxkLgogIC8vLyBJZiBbcmVxdWlyZWRdIGlzIGB0cnVlYCBhbmQgbm8gbWVtYmVyIGlzIGZvdW5kIGFuIGludGVybmFsIHByb2JsZW0gaXMKICAvLy8gcmVwb3J0ZWQuCiAgQnVpbGRlciBsb29rdXBMb2NhbE1lbWJlcihTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgc2V0dGVyOiBmYWxzZSwgYm9vbCByZXF1aXJlZDogZmFsc2V9KTsKfQo6AE5OPAEiASIBGxgBFx8gKAFDFQEjAVE5MD4BHyUtBAFEHVEfAT9APTMEAUUGRx4eAT4GT0wQKTMCATxwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9kZWNsYXJhdGlvbl9idWlsZGVyLmRhcnRCc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2J1aWxkZXIvbW9kaWZpZXJfYnVpbGRlci5kYXJ0iEcvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5tb2RpZmllcl9idWlsZGVyOwoKaW1wb3J0ICcuLi9tb2RpZmllci5kYXJ0JwogICAgc2hvdwogICAgICAgIGFic3RyYWN0TWFzaywKICAgICAgICBjb25zdE1hc2ssCiAgICAgICAgY292YXJpYW50TWFzaywKICAgICAgICBleHRlcm5hbE1hc2ssCiAgICAgICAgZmluYWxNYXNrLAogICAgICAgIGhhc0NvbnN0Q29uc3RydWN0b3JNYXNrLAogICAgICAgIGhhc0luaXRpYWxpemVyTWFzaywKICAgICAgICBpbml0aWFsaXppbmdGb3JtYWxNYXNrLAogICAgICAgIGxhdGVNYXNrLAogICAgICAgIG1peGluRGVjbGFyYXRpb25NYXNrLAogICAgICAgIG5hbWVkTWl4aW5BcHBsaWNhdGlvbk1hc2ssCiAgICAgICAgc3RhdGljTWFzazsKCmltcG9ydCAnYnVpbGRlci5kYXJ0JyBzaG93IEJ1aWxkZXI7CgphYnN0cmFjdCBjbGFzcyBNb2RpZmllckJ1aWxkZXIgZXh0ZW5kcyBCdWlsZGVyIHsKICBCdWlsZGVyIHBhcmVudDsKCiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CgogIGZpbmFsIFVyaSBmaWxlVXJpOwoKICBNb2RpZmllckJ1aWxkZXIodGhpcy5wYXJlbnQsIHRoaXMuY2hhck9mZnNldCwgW1VyaSBmaWxlVXJpXSkKICAgICAgOiBmaWxlVXJpID0gZmlsZVVyaSA/PyBwYXJlbnQ/LmZpbGVVcmk7CgogIGludCBnZXQgbW9kaWZpZXJzOwoKICBib29sIGdldCBpc0Fic3RyYWN0ID0+IChtb2RpZmllcnMgJiBhYnN0cmFjdE1hc2spICE9IDA7CgogIGJvb2wgZ2V0IGlzQ29uc3QgPT4gKG1vZGlmaWVycyAmIGNvbnN0TWFzaykgIT0gMDsKCiAgYm9vbCBnZXQgaXNDb3ZhcmlhbnQgPT4gKG1vZGlmaWVycyAmIGNvdmFyaWFudE1hc2spICE9IDA7CgogIGJvb2wgZ2V0IGlzRXh0ZXJuYWwgPT4gKG1vZGlmaWVycyAmIGV4dGVybmFsTWFzaykgIT0gMDsKCiAgYm9vbCBnZXQgaXNGaW5hbCA9PiAobW9kaWZpZXJzICYgZmluYWxNYXNrKSAhPSAwOwoKICBib29sIGdldCBpc1N0YXRpYyA9PiAobW9kaWZpZXJzICYgc3RhdGljTWFzaykgIT0gMDsKCiAgYm9vbCBnZXQgaXNMYXRlID0+IChtb2RpZmllcnMgJiBsYXRlTWFzaykgIT0gMDsKCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQWRkIHRoaXMgd2hlbiBzZW1hbnRpY3MgZm9yCiAgLy8gYEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIuaXNSZXF1aXJlZGAgaGFzIGJlZW4gdXBkYXRlZCB0byBzdXBwb3J0IHJlcXVpcmVkCiAgLy8gbmFtZWQgcGFyYW1ldGVycy4KICAvL2Jvb2wgZ2V0IGlzUmVxdWlyZWQgPT4gKG1vZGlmaWVycyAmIHJlcXVpcmVkTWFzaykgIT0gMDsKCiAgYm9vbCBnZXQgaXNOYW1lZE1peGluQXBwbGljYXRpb24gewogICAgcmV0dXJuIChtb2RpZmllcnMgJiBuYW1lZE1peGluQXBwbGljYXRpb25NYXNrKSAhPSAwOwogIH0KCiAgYm9vbCBnZXQgaGFzSW5pdGlhbGl6ZXIgPT4gKG1vZGlmaWVycyAmIGhhc0luaXRpYWxpemVyTWFzaykgIT0gMDsKCiAgYm9vbCBnZXQgaXNJbml0aWFsaXppbmdGb3JtYWwgPT4gKG1vZGlmaWVycyAmIGluaXRpYWxpemluZ0Zvcm1hbE1hc2spICE9IDA7CgogIGJvb2wgZ2V0IGhhc0NvbnN0Q29uc3RydWN0b3IgPT4gKG1vZGlmaWVycyAmIGhhc0NvbnN0Q29uc3RydWN0b3JNYXNrKSAhPSAwOwoKICBib29sIGdldCBpc01peGluID0+IChtb2RpZmllcnMgJiBtaXhpbkRlY2xhcmF0aW9uTWFzaykgIT0gMDsKCiAgU3RyaW5nIGdldCBuYW1lOwoKICBib29sIGdldCBpc05hdGl2ZSA9PiBmYWxzZTsKCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWU7CgogIFN0cmluZ0J1ZmZlciBwcmludE9uKFN0cmluZ0J1ZmZlciBidWZmZXIpIHsKICAgIHJldHVybiBidWZmZXIuLndyaXRlKG5hbWUgPz8gZnVsbE5hbWVGb3JFcnJvcnMpOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIiRkZWJ1Z05hbWUoJHtwcmludE9uKG5ldyBTdHJpbmdCdWZmZXIoKSl9KSI7Cn0KUABOTjwBIAEaCRYTFxYTIRwgEh4jFAEkATESARgBFQE/LgEVAToBNAE8AToBNAE2ATIBNk4XPAElOQQBRAFOAU4BPwETAR4BGAEuNQQBRQIBOXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL21vZGlmaWVyX2J1aWxkZXIuZGFydENzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvYXBpX3Byb3RvdHlwZS9zdW1tYXJ5X2dlbmVyYXRvci5kYXJ0hnEvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIERlZmluZXMgdGhlIGZyb250LWVuZCBBUEkgZm9yIGNvbnZlcnRpbmcgc291cmNlIGNvZGUgdG8gc3VtbWFyaWVzLgpsaWJyYXJ5IGZyb250X2VuZC5zdW1tYXJ5X2dlbmVyYXRvcjsKCmltcG9ydCAnZGFydDphc3luYyc7CmltcG9ydCAnY29tcGlsZXJfb3B0aW9ucy5kYXJ0JzsKCmltcG9ydCAnLi4vYmFzZS9wcm9jZXNzZWRfb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi9rZXJuZWxfZ2VuZXJhdG9yX2ltcGwuZGFydCc7CgovLy8gQ3JlYXRlcyBhIHN1bW1hcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJ1aWxkIHVuaXQgd2hvc2Ugc291cmNlIGZpbGVzIGFyZSBpbgovLy8gW3NvdXJjZXNdLgovLy8KLy8vIEludGVuZGVkIHRvIGJlIGEgcGFydCBvZiBhIG1vZHVsYXIgY29tcGlsYXRpb24gcHJvY2Vzcy4KLy8vCi8vLyBBbnkgZGVwZW5kZW5jeSBvZiBbc291cmNlc10gdGhhdCBpcyBub3QgbGlzdGVkIGluCi8vLyBbQ29tcGlsZXJPcHRpb25zLmlucHV0U3VtbWFyaWVzXSBhbmQgW0NvbXBpbGVyT3B0aW9ucy5zZGtTdW1tYXJ5XSBpcyB0cmVhdGVkCi8vLyBhcyBhbiBhZGRpdGlvbmFsIHNvdXJjZSBmaWxlIGZvciB0aGUgYnVpbGQgdW5pdC4KLy8vCi8vLyBBbnkgYHBhcnRgIGRlY2xhcmF0aW9ucyBmb3VuZCBpbiBbc291cmNlc10gbXVzdCByZWZlciB0byBwYXJ0IGZpbGVzIHdoaWNoCi8vLyBhcmUgYWxzbyBsaXN0ZWQgaW4gdGhlIGJ1aWxkIHVuaXQgc291cmNlcywgb3RoZXJ3aXNlIGFuIGVycm9yIHJlc3VsdHMuICAoSXQKLy8vIGlzIG5vdCBwZXJtaXR0ZWQgdG8gcmVmZXIgdG8gYSBwYXJ0IGZpbGUgZGVjbGFyZWQgaW4gYW5vdGhlciBidWlsZCB1bml0KS4KLy8vCi8vLyBJZiBbdHJ1bmNhdGVdIGlzIHRydWUsIHRoZSByZXN1bHRpbmcgc3VtbWFyeSBkb2Vzbid0IGluY2x1ZGUgYW55IHJlZmVyZW5jZXMKLy8vIHRvIGxpYnJhcmllcyBsb2FkZWQgZnJvbSB0aGUgaW5wdXQgc3VtbWFyaWVzLCBhbmQgb25seSBjb250YWlucyBjb2RlIHRoYXQKLy8vIHdhcyBjb21waWxlZCBmcm9tIHNvdXJjZXMuCi8vLwovLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBhIGxpc3Qgb2YgYnl0ZXMgdG8gd3JpdGUgdG8gdGhlIHN1bW1hcnkgZmlsZS4KRnV0dXJlPExpc3Q8aW50Pj4gc3VtbWFyeUZvcihMaXN0PFVyaT4gc291cmNlcywgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMsCiAgICB7Ym9vbCB0cnVuY2F0ZTogZmFsc2V9KSBhc3luYyB7CiAgcmV0dXJuIChhd2FpdCBnZW5lcmF0ZUtlcm5lbCgKICAgICAgICAgIG5ldyBQcm9jZXNzZWRPcHRpb25zKG9wdGlvbnM6IG9wdGlvbnMsIGlucHV0czogc291cmNlcyksCiAgICAgICAgICBidWlsZFN1bW1hcnk6IHRydWUsCiAgICAgICAgICBidWlsZENvbXBvbmVudDogZmFsc2UsCiAgICAgICAgICB0cnVuY2F0ZVN1bW1hcnk6IHRydW5jYXRlKSkKICAgICAgPy5zdW1tYXJ5Owp9CioATk48AUclARUgASkoAVEPBDwENlE1BE5QTgRQTh8ERkkkIEMeISYRAgE6cGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV9wcm90b3R5cGUvc3VtbWFyeV9nZW5lcmF0b3IuZGFydD9zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvc2Nhbm5lci9rZXl3b3JkX3N0YXRlLmRhcnSQmS8vIENvcHlyaWdodCAoYykgMjAxMSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnNjYW5uZXIua2V5d29yZHM7CgppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCcgYXMgYW5hbHl6ZXI7CgppbXBvcnQgJ2NoYXJhY3RlcnMuZGFydCcgc2hvdyAkYSwgJHosICRBLCAkWjsKCi8qKgogKiBBYnN0cmFjdCBzdGF0ZSBpbiBhIHN0YXRlIG1hY2hpbmUgZm9yIHNjYW5uaW5nIGtleXdvcmRzLgogKi8KYWJzdHJhY3QgY2xhc3MgS2V5d29yZFN0YXRlIHsKICBLZXl3b3JkU3RhdGUgbmV4dChpbnQgYyk7CiAgS2V5d29yZFN0YXRlIG5leHRDYXBpdGFsKGludCBjKTsKCiAgYW5hbHl6ZXIuS2V5d29yZCBnZXQga2V5d29yZDsKCiAgc3RhdGljIEtleXdvcmRTdGF0ZSBfS0VZV09SRF9TVEFURTsKICBzdGF0aWMgS2V5d29yZFN0YXRlIGdldCBLRVlXT1JEX1NUQVRFIHsKICAgIGlmIChfS0VZV09SRF9TVEFURSA9PSBudWxsKSB7CiAgICAgIExpc3Q8U3RyaW5nPiBzdHJpbmdzID0gbmV3IExpc3Q8U3RyaW5nPihhbmFseXplci5LZXl3b3JkLnZhbHVlcy5sZW5ndGgpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFuYWx5emVyLktleXdvcmQudmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgc3RyaW5nc1tpXSA9IGFuYWx5emVyLktleXdvcmQudmFsdWVzW2ldLmxleGVtZTsKICAgICAgfQogICAgICBzdHJpbmdzLnNvcnQoKGEsIGIpID0+IGEuY29tcGFyZVRvKGIpKTsKICAgICAgX0tFWVdPUkRfU1RBVEUgPSBjb21wdXRlS2V5d29yZFN0YXRlVGFibGUoMCwgc3RyaW5ncywgMCwgc3RyaW5ncy5sZW5ndGgpOwogICAgfQogICAgcmV0dXJuIF9LRVlXT1JEX1NUQVRFOwogIH0KCiAgc3RhdGljIEtleXdvcmRTdGF0ZSBjb21wdXRlS2V5d29yZFN0YXRlVGFibGUoCiAgICAgIGludCBzdGFydCwgTGlzdDxTdHJpbmc+IHN0cmluZ3MsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHsKICAgIGJvb2wgaXNMb3dlcmNhc2UgPSB0cnVlOwoKICAgIExpc3Q8S2V5d29yZFN0YXRlPiB0YWJsZSA9IG5ldyBMaXN0PEtleXdvcmRTdGF0ZT4oJHogLSAkQSArIDEpOwogICAgYXNzZXJ0KGxlbmd0aCAhPSAwKTsKICAgIGludCBjaHVuayA9IDA7CiAgICBpbnQgY2h1bmtTdGFydCA9IC0xOwogICAgYm9vbCBpc0xlYWYgPSBmYWxzZTsKICAgIGZvciAoaW50IGkgPSBvZmZzZXQ7IGkgPCBvZmZzZXQgKyBsZW5ndGg7IGkrKykgewogICAgICBpZiAoc3RyaW5nc1tpXS5sZW5ndGggPT0gc3RhcnQpIHsKICAgICAgICBpc0xlYWYgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChzdHJpbmdzW2ldLmxlbmd0aCA+IHN0YXJ0KSB7CiAgICAgICAgaW50IGMgPSBzdHJpbmdzW2ldLmNvZGVVbml0QXQoc3RhcnQpOwogICAgICAgIGlmICgkQSA8PSBjICYmIGMgPD0gJFopIHsKICAgICAgICAgIGlzTG93ZXJjYXNlID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmIChjaHVuayAhPSBjKSB7CiAgICAgICAgICBpZiAoY2h1bmtTdGFydCAhPSAtMSkgewogICAgICAgICAgICBhc3NlcnQodGFibGVbY2h1bmsgLSAkQV0gPT0gbnVsbCk7CiAgICAgICAgICAgIHRhYmxlW2NodW5rIC0gJEFdID0gY29tcHV0ZUtleXdvcmRTdGF0ZVRhYmxlKAogICAgICAgICAgICAgICAgc3RhcnQgKyAxLCBzdHJpbmdzLCBjaHVua1N0YXJ0LCBpIC0gY2h1bmtTdGFydCk7CiAgICAgICAgICB9CiAgICAgICAgICBjaHVua1N0YXJ0ID0gaTsKICAgICAgICAgIGNodW5rID0gYzsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChjaHVua1N0YXJ0ICE9IC0xKSB7CiAgICAgIGFzc2VydCh0YWJsZVtjaHVuayAtICRBXSA9PSBudWxsKTsKICAgICAgdGFibGVbY2h1bmsgLSAkQV0gPSBjb21wdXRlS2V5d29yZFN0YXRlVGFibGUoCiAgICAgICAgICBzdGFydCArIDEsIHN0cmluZ3MsIGNodW5rU3RhcnQsIG9mZnNldCArIGxlbmd0aCAtIGNodW5rU3RhcnQpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KGxlbmd0aCA9PSAxKTsKICAgICAgcmV0dXJuIG5ldyBMZWFmS2V5d29yZFN0YXRlKHN0cmluZ3Nbb2Zmc2V0XSk7CiAgICB9CiAgICBTdHJpbmcgc3ludGF4ID0gaXNMZWFmID8gc3RyaW5nc1tvZmZzZXRdIDogbnVsbDsKICAgIGlmIChpc0xvd2VyY2FzZSkgewogICAgICB0YWJsZSA9IHRhYmxlLnN1Ymxpc3QoJGEgLSAkQSk7CiAgICAgIHJldHVybiBuZXcgTG93ZXJDYXNlQXJyYXlLZXl3b3JkU3RhdGUodGFibGUsIHN5bnRheCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IFVwcGVyQ2FzZUFycmF5S2V5d29yZFN0YXRlKHRhYmxlLCBzeW50YXgpOwogICAgfQogIH0KfQoKLyoqCiAqIEEgc3RhdGUgd2l0aCBtdWx0aXBsZSBvdXRnb2luZyB0cmFuc2l0aW9ucy4KICovCmFic3RyYWN0IGNsYXNzIEFycmF5S2V5d29yZFN0YXRlIGltcGxlbWVudHMgS2V5d29yZFN0YXRlIHsKICBmaW5hbCBMaXN0PEtleXdvcmRTdGF0ZT4gdGFibGU7CiAgZmluYWwgYW5hbHl6ZXIuS2V5d29yZCBrZXl3b3JkOwoKICBBcnJheUtleXdvcmRTdGF0ZSh0aGlzLnRhYmxlLCBTdHJpbmcgc3ludGF4KQogICAgICA6IGtleXdvcmQgPSAoKHN5bnRheCA9PSBudWxsKSA/IG51bGwgOiBhbmFseXplci5LZXl3b3JkLmtleXdvcmRzW3N5bnRheF0pOwoKICBLZXl3b3JkU3RhdGUgbmV4dChpbnQgYyk7CgogIEtleXdvcmRTdGF0ZSBuZXh0Q2FwaXRhbChpbnQgYyk7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCJbIik7CiAgICBpZiAoa2V5d29yZCAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCIqIik7CiAgICAgIHNiLndyaXRlKGtleXdvcmQpOwogICAgICBzYi53cml0ZSgiICIpOwogICAgfQogICAgTGlzdDxLZXl3b3JkU3RhdGU+IGZvbyA9IHRhYmxlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmb28ubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGZvb1tpXSAhPSBudWxsKSB7CiAgICAgICAgc2Iud3JpdGUoIiR7bmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKFtpICsgJGFdKX06ICIKICAgICAgICAgICAgIiR7Zm9vW2ldfTsgIik7CiAgICAgIH0KICAgIH0KICAgIHNiLndyaXRlKCJdIik7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCmNsYXNzIExvd2VyQ2FzZUFycmF5S2V5d29yZFN0YXRlIGV4dGVuZHMgQXJyYXlLZXl3b3JkU3RhdGUgewogIExvd2VyQ2FzZUFycmF5S2V5d29yZFN0YXRlKExpc3Q8S2V5d29yZFN0YXRlPiB0YWJsZSwgU3RyaW5nIHN5bnRheCkKICAgICAgOiBzdXBlcih0YWJsZSwgc3ludGF4KSB7CiAgICBhc3NlcnQodGFibGUubGVuZ3RoID09ICR6IC0gJGEgKyAxKTsKICB9CgogIEtleXdvcmRTdGF0ZSBuZXh0KGludCBjKSA9PiB0YWJsZVtjIC0gJGFdOwoKICBLZXl3b3JkU3RhdGUgbmV4dENhcGl0YWwoaW50IGMpID0+IG51bGw7Cn0KCmNsYXNzIFVwcGVyQ2FzZUFycmF5S2V5d29yZFN0YXRlIGV4dGVuZHMgQXJyYXlLZXl3b3JkU3RhdGUgewogIFVwcGVyQ2FzZUFycmF5S2V5d29yZFN0YXRlKExpc3Q8S2V5d29yZFN0YXRlPiB0YWJsZSwgU3RyaW5nIHN5bnRheCkKICAgICAgOiBzdXBlcih0YWJsZSwgc3ludGF4KSB7CiAgICBhc3NlcnQodGFibGUubGVuZ3RoID09ICR6IC0gJEEgKyAxKTsKICB9CgogIEtleXdvcmRTdGF0ZSBuZXh0KGludCBjKSA9PiB0YWJsZVtjIC0gJEFdOwoKICBLZXl3b3JkU3RhdGUgbmV4dENhcGl0YWwoaW50IGMpID0+IHRhYmxlW2MgLSAkQV07Cn0KCi8qKgogKiBBIHN0YXRlIHRoYXQgaGFzIG5vIG91dGdvaW5nIHRyYW5zaXRpb25zLgogKi8KY2xhc3MgTGVhZktleXdvcmRTdGF0ZSBpbXBsZW1lbnRzIEtleXdvcmRTdGF0ZSB7CiAgZmluYWwgYW5hbHl6ZXIuS2V5d29yZCBrZXl3b3JkOwoKICBMZWFmS2V5d29yZFN0YXRlKFN0cmluZyBzeW50YXgpIDoga2V5d29yZCA9IGFuYWx5emVyLktleXdvcmQua2V5d29yZHNbc3ludGF4XTsKCiAgS2V5d29yZFN0YXRlIG5leHQoaW50IGMpID0+IG51bGw7CiAgS2V5d29yZFN0YXRlIG5leHRDYXBpdGFsKGludCBjKSA9PiBudWxsOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBrZXl3b3JkLmxleGVtZTsKfQqAlgBOTjwBIAEvAS4BBDwEHhwjASABJioiT0E4CC5QBhsEATBBHQFEGRMZGTUoFwgnLiIfChoiLzpBDBoVCggGHCk0SQ0bNAY1FyY8DTwGBAIBBC8EOyIiAS9RARwBIwEWKhMbFRkVBiQrHDscCAYTGgQCAT1GHykEAS0BKwIBPUYfKQQBLQE0AgEELQQxIgFRASQrAScCATZwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2Nhbm5lci9rZXl3b3JkX3N0YXRlLmRhcnQ6c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2NvbnN0YW50X2NvbnRleHQuZGFydIThLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuY29uc3RhbnRfY29udGV4dDsKCmVudW0gQ29uc3RhbnRDb250ZXh0IHsKICAvLy8gTm90IGluIGEgY29uc3RhbnQgY29udGV4dC4KICAvLy8KICAvLy8gVGhpcyBtZWFucyB0aGF0IGBPYmplY3QoKWAgYW5kIGBbXWAgYXJlIGVxdWl2YWxlbnQgdG8gYG5ldyBPYmplY3QoKWAgYW5kCiAgLy8vIGBbXWAgcmVzcGVjdGl2ZWx5LiBgbmV3IE9iamVjdCgpYCBpcyAqKm5vdCoqIGEgY29tcGlsZS10aW1lIGVycm9yLgogIC8vLwogIC8vLyBUT0RPKGFoZSk6IFVwZGF0ZSB0aGUgYWJvdmUgc3BlY2lmaWNhdGlvbiBhbmQgY29ycmVzcG9uZGluZwogIC8vLyBpbXBsZW1lbnRhdGlvbiBiZWNhdXNlIGBPYmplY3QoKWAgaXMgYSBjb21waWxlLXRpbWUgY29uc3RhbnQuIFNlZSBbbWFnaWMKICAvLy8gY29uc3RdKAogIC8vLyAuLi8uLi8uLi8uLi8uLi8uLi9kb2NzL2xhbmd1YWdlL2luZm9ybWFsL2RvY3MvbGFuZ3VhZ2UvaW5mb3JtYWwvaW1wbGljaXQtY3JlYXRpb24ubWQKICAvLy8gKS4KICBub25lLAoKICAvLy8gSW4gYSBjb250ZXh0IHdoZXJlIGNvbnN0YW50IGV4cHJlc3Npb25zIGFyZSByZXF1aXJlZCwgYW5kIGBjb25zdGAgbWF5IGJlCiAgLy8vIGluZmVycmVkLgogIC8vLwogIC8vLyBUaGlzIG1lYW5zIHRoYXQgYE9iamVjdCgpYCBhbmQgYFtdYCBhcmUgZXF1aXZhbGVudCB0byBgY29uc3QgT2JqZWN0KClgIGFuZAogIC8vLyBgY29uc3QgW11gIHJlc3BlY3RpdmVseS4gYG5ldyBPYmplY3QoKWAgaXMgYSBjb21waWxlLXRpbWUgZXJyb3IuCiAgaW5mZXJyZWQsCgogIC8vLyBJbiBhIGNvbnRleHQgd2hlcmUgY29uc3RhbnQgZXhwcmVzc2lvbnMgYXJlIHJlcXVpcmVkLCBidXQgYGNvbnN0YCBpcyBub3QKICAvLy8gaW5mZXJyZWQuIFRoaXMgaW5jbHVkZXMgZGVmYXVsdCB2YWx1ZXMgb2Ygb3B0aW9uYWwgcGFyYW1ldGVycyBhbmQKICAvLy8gaW5pdGlhbGl6aW5nIGV4cHJlc3Npb25zIG9uIGZpZWxkcyBpbiBjbGFzc2VzIHdpdGggYSBgY29uc3RgIGNvbnN0cnVjdG9yLgogIHJlcXVpcmVkLAp9CiEATk48ASABFyEGT0kGQk8OWwkIAU8QBlFHDAFPSFAMAgExcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2NvbnN0YW50X2NvbnRleHQuZGFydDJzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvbW9kaWZpZXIuZGFydI1WLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEubW9kaWZpZXI7CgppbXBvcnQgJ3Byb2JsZW1zLmRhcnQnIHNob3cgdW5oYW5kbGVkOwoKZW51bSBNb2RpZmllckVudW0gewogIEFic3RyYWN0LAogIENvbnN0LAogIENvdmFyaWFudCwKICBFeHRlcm5hbCwKICBGaW5hbCwKICBTdGF0aWMsCgogIC8vIE5vdCBhIHJlYWwgbW9kaWZpZXIuCiAgVmFyLAp9Cgpjb25zdCBpbnQgYWJzdHJhY3RNYXNrID0gMTsKCmNvbnN0IGludCBjb25zdE1hc2sgPSBhYnN0cmFjdE1hc2sgPDwgMTsKCmNvbnN0IGludCBjb3ZhcmlhbnRNYXNrID0gY29uc3RNYXNrIDw8IDE7Cgpjb25zdCBpbnQgZXh0ZXJuYWxNYXNrID0gY292YXJpYW50TWFzayA8PCAxOwoKY29uc3QgaW50IGZpbmFsTWFzayA9IGV4dGVybmFsTWFzayA8PCAxOwoKY29uc3QgaW50IHN0YXRpY01hc2sgPSBmaW5hbE1hc2sgPDwgMTsKCmNvbnN0IGludCBsYXRlTWFzayA9IHN0YXRpY01hc2sgPDwgMTsKCmNvbnN0IGludCByZXF1aXJlZE1hc2sgPSBsYXRlTWFzayA8PCAxOwoKY29uc3QgaW50IG5hbWVkTWl4aW5BcHBsaWNhdGlvbk1hc2sgPSByZXF1aXJlZE1hc2sgPDwgMTsKCi8vLyBOb3QgYSBtb2RpZmllciwgdXNlZCBmb3IgbWl4aW5zIGRlY2xhcmVkIGV4cGxpY2l0bHkgYnkgdXNpbmcgdGhlIGBtaXhpbmAKLy8vIGtleXdvcmQuCmNvbnN0IGludCBtaXhpbkRlY2xhcmF0aW9uTWFzayA9IG5hbWVkTWl4aW5BcHBsaWNhdGlvbk1hc2sgPDwgMTsKCi8vLyBOb3QgYSBtb2RpZmllciwgdXNlZCBieSBmaWVsZHMgdG8gdHJhY2sgaWYgdGhleSBoYXZlIGFuIGluaXRpYWxpemVyLgpjb25zdCBpbnQgaGFzSW5pdGlhbGl6ZXJNYXNrID0gbWl4aW5EZWNsYXJhdGlvbk1hc2sgPDwgMTsKCi8vLyBOb3QgYSBtb2RpZmllciwgdXNlZCBieSBmb3JtYWwgcGFyYW1ldGVycyB0byB0cmFjayBpZiB0aGV5IGFyZSBpbml0aWFsaXppbmcuCmNvbnN0IGludCBpbml0aWFsaXppbmdGb3JtYWxNYXNrID0gaGFzSW5pdGlhbGl6ZXJNYXNrIDw8IDE7CgovLy8gTm90IGEgbW9kaWZpZXIsIHVzZWQgYnkgY2xhc3NlcyB0byB0cmFjayBpZiB0aGUgY2xhc3MgaGFzIGEgY29uc3QKLy8vIGNvbnN0cnVjdG9yLgpjb25zdCBpbnQgaGFzQ29uc3RDb25zdHJ1Y3Rvck1hc2sgPSBpbml0aWFsaXppbmdGb3JtYWxNYXNrIDw8IDE7CgovLy8gTm90IGEgcmVhbCBtb2RpZmllciwgYW5kIGJ5IHNldHRpbmcgaXQgdG8gemVybywgaXQgaXMgYXV0b21hdGljYWxseSBpZ25vcmVkCi8vLyBieSBbTW9kaWZpZXIudmFsaWRhdGVdIGJlbG93Lgpjb25zdCBpbnQgdmFyTWFzayA9IDA7Cgpjb25zdCBNb2RpZmllciBBYnN0cmFjdCA9IGNvbnN0IE1vZGlmaWVyKE1vZGlmaWVyRW51bS5BYnN0cmFjdCwgYWJzdHJhY3RNYXNrKTsKCmNvbnN0IE1vZGlmaWVyIENvbnN0ID0gY29uc3QgTW9kaWZpZXIoTW9kaWZpZXJFbnVtLkNvbnN0LCBjb25zdE1hc2spOwoKY29uc3QgTW9kaWZpZXIgQ292YXJpYW50ID0KICAgIGNvbnN0IE1vZGlmaWVyKE1vZGlmaWVyRW51bS5Db3ZhcmlhbnQsIGNvdmFyaWFudE1hc2spOwoKY29uc3QgTW9kaWZpZXIgRXh0ZXJuYWwgPSBjb25zdCBNb2RpZmllcihNb2RpZmllckVudW0uRXh0ZXJuYWwsIGV4dGVybmFsTWFzayk7Cgpjb25zdCBNb2RpZmllciBGaW5hbCA9IGNvbnN0IE1vZGlmaWVyKE1vZGlmaWVyRW51bS5GaW5hbCwgZmluYWxNYXNrKTsKCmNvbnN0IE1vZGlmaWVyIFN0YXRpYyA9IGNvbnN0IE1vZGlmaWVyKE1vZGlmaWVyRW51bS5TdGF0aWMsIHN0YXRpY01hc2spOwoKLy8vIE5vdCBhIHJlYWwgbW9kaWZpZXIuCmNvbnN0IE1vZGlmaWVyIFZhciA9IGNvbnN0IE1vZGlmaWVyKE1vZGlmaWVyRW51bS5WYXIsIHZhck1hc2spOwoKY2xhc3MgTW9kaWZpZXIgewogIGZpbmFsIE1vZGlmaWVyRW51bSBraW5kOwoKICBmaW5hbCBpbnQgbWFzazsKCiAgY29uc3QgTW9kaWZpZXIodGhpcy5raW5kLCB0aGlzLm1hc2spOwoKICBmYWN0b3J5IE1vZGlmaWVyLmZyb21TdHJpbmcoU3RyaW5nIHN0cmluZykgewogICAgaWYgKGlkZW50aWNhbCgnYWJzdHJhY3QnLCBzdHJpbmcpKSByZXR1cm4gQWJzdHJhY3Q7CiAgICBpZiAoaWRlbnRpY2FsKCdjb25zdCcsIHN0cmluZykpIHJldHVybiBDb25zdDsKICAgIGlmIChpZGVudGljYWwoJ2NvdmFyaWFudCcsIHN0cmluZykpIHJldHVybiBDb3ZhcmlhbnQ7CiAgICBpZiAoaWRlbnRpY2FsKCdleHRlcm5hbCcsIHN0cmluZykpIHJldHVybiBFeHRlcm5hbDsKICAgIGlmIChpZGVudGljYWwoJ2ZpbmFsJywgc3RyaW5nKSkgcmV0dXJuIEZpbmFsOwogICAgaWYgKGlkZW50aWNhbCgnc3RhdGljJywgc3RyaW5nKSkgcmV0dXJuIFN0YXRpYzsKICAgIGlmIChpZGVudGljYWwoJ3ZhcicsIHN0cmluZykpIHJldHVybiBWYXI7CiAgICByZXR1cm4gdW5oYW5kbGVkKHN0cmluZywgIk1vZGlmaWVyLmZyb21TdHJpbmciLCAtMSwgbnVsbCk7CiAgfQoKICB0b1N0cmluZygpID0+ICJtb2RpZmllcigkeycka2luZCcuc3Vic3RyaW5nKCdNb2RpZmllckVudW0uJy5sZW5ndGgpfSkiOwoKICBzdGF0aWMgaW50IHZhbGlkYXRlKExpc3Q8TW9kaWZpZXI+IG1vZGlmaWVycywge2Jvb2wgaXNBYnN0cmFjdDogZmFsc2V9KSB7CiAgICAvLyBUT0RPKGFoZSk6IFJlbmFtZSB0aGlzIG1ldGhvZCwgdmFsaWRhdGlvbiBpcyBub3cgdGFrZW4gY2FyZSBvZiBieSB0aGUKICAgIC8vIHBhcnNlci4KICAgIGludCByZXN1bHQgPSBpc0Fic3RyYWN0ID8gYWJzdHJhY3RNYXNrIDogMDsKICAgIGlmIChtb2RpZmllcnMgPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDsKICAgIGZvciAoTW9kaWZpZXIgbW9kaWZpZXIgaW4gbW9kaWZpZXJzKSB7CiAgICAgIHJlc3VsdCB8PSBtb2RpZmllci5tYXNrOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBpbnQgdmFsaWRhdGVWYXJGaW5hbE9yQ29uc3QoU3RyaW5nIGxleGVtZSkgewogICAgaWYgKGxleGVtZSA9PSBudWxsKSByZXR1cm4gMDsKICAgIGlmIChpZGVudGljYWwoJ2NvbnN0JywgbGV4ZW1lKSkgcmV0dXJuIENvbnN0Lm1hc2s7CiAgICBpZiAoaWRlbnRpY2FsKCdmaW5hbCcsIGxleGVtZSkpIHJldHVybiBGaW5hbC5tYXNrOwogICAgaWYgKGlkZW50aWNhbCgndmFyJywgbGV4ZW1lKSkgcmV0dXJuIFZhci5tYXNrOwogICAgcmV0dXJuIHVuaGFuZGxlZChsZXhlbWUsICJNb2RpZmllci52YWxpZGF0ZVZhckZpbmFsT3JDb25zdCIsIC0xLCBudWxsKTsKICB9Cn0KcQBOTjwBGAEnARQMCQ0MCQoBGgcCARwBKQEqAS0BKQEnASYBKAE5AU0NQQFJOgFRPAFGEUEBUCIXAU8BRgEbOwFPAUYBSQEZQAERGwESASgBLzgyOjgyNC4/BAFKAUxNDzAqKx8GEwQBNiI3NzNMBAIBKXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9tb2RpZmllci5kYXJ0L3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9uYW1lcy5kYXJ0hlYvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmcm9udF9lbmQuc3JjLmZhc3RhLm5hbWVzOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBOYW1lOwoKZmluYWwgTmFtZSBhbXBlcnNhbmROYW1lID0gbmV3IE5hbWUoIiYiKTsKCmZpbmFsIE5hbWUgYmFyTmFtZSA9IG5ldyBOYW1lKCJ8Iik7CgpmaW5hbCBOYW1lIGNhbGxOYW1lID0gbmV3IE5hbWUoImNhbGwiKTsKCmZpbmFsIE5hbWUgY2FyZXROYW1lID0gbmV3IE5hbWUoIl4iKTsKCmZpbmFsIE5hbWUgZGl2aXNpb25OYW1lID0gbmV3IE5hbWUoIi8iKTsKCmZpbmFsIE5hbWUgZG91YmxlQW1wZXJzYW5kTmFtZSA9IG5ldyBOYW1lKCImJiIpOwoKZmluYWwgTmFtZSBkb3VibGVCYXJOYW1lID0gbmV3IE5hbWUoInx8Iik7CgpmaW5hbCBOYW1lIGRvdWJsZVF1ZXN0aW9uTmFtZSA9IG5ldyBOYW1lKCI/PyIpOwoKZmluYWwgTmFtZSBlbXB0eU5hbWUgPSBuZXcgTmFtZSgiIik7CgpmaW5hbCBOYW1lIGVxdWFsc05hbWUgPSBuZXcgTmFtZSgnPT0nKTsKCmZpbmFsIE5hbWUgZ3JlYXRlclRoYW5OYW1lID0gbmV3IE5hbWUoIj4iKTsKCmZpbmFsIE5hbWUgZ3JlYXRlclRoYW5PckVxdWFsc05hbWUgPSBuZXcgTmFtZSgiPj0iKTsKCmZpbmFsIE5hbWUgaWRlbnRpY2FsTmFtZSA9IG5ldyBOYW1lKCJpZGVudGljYWwiKTsKCmZpbmFsIE5hbWUgaW5kZXhHZXROYW1lID0gbmV3IE5hbWUoIltdIik7CgpmaW5hbCBOYW1lIGluZGV4U2V0TmFtZSA9IG5ldyBOYW1lKCJbXT0iKTsKCmZpbmFsIE5hbWUgbGVmdFNoaWZ0TmFtZSA9IG5ldyBOYW1lKCI8PCIpOwoKZmluYWwgTmFtZSBsZW5ndGhOYW1lID0gbmV3IE5hbWUoImxlbmd0aCIpOwoKZmluYWwgTmFtZSBsZXNzVGhhbk5hbWUgPSBuZXcgTmFtZSgiPCIpOwoKZmluYWwgTmFtZSBsZXNzVGhhbk9yRXF1YWxzTmFtZSA9IG5ldyBOYW1lKCI8PSIpOwoKZmluYWwgTmFtZSBtaW51c05hbWUgPSBuZXcgTmFtZSgiLSIpOwoKZmluYWwgTmFtZSBtdWx0aXBseU5hbWUgPSBuZXcgTmFtZSgiKiIpOwoKZmluYWwgTmFtZSBtdXN0YWNoZU5hbWUgPSBuZXcgTmFtZSgifi8iKTsKCmZpbmFsIE5hbWUgbmVnYXRpb25OYW1lID0gbmV3IE5hbWUoIiEiKTsKCmZpbmFsIE5hbWUgbm9TdWNoTWV0aG9kTmFtZSA9IG5ldyBOYW1lKCJub1N1Y2hNZXRob2QiKTsKCmZpbmFsIE5hbWUgcGVyY2VudE5hbWUgPSBuZXcgTmFtZSgiJSIpOwoKZmluYWwgTmFtZSBwbHVzTmFtZSA9IG5ldyBOYW1lKCIrIik7CgpmaW5hbCBOYW1lIHJpZ2h0U2hpZnROYW1lID0gbmV3IE5hbWUoIj4+Iik7CgpmaW5hbCBOYW1lIHRyaXBsZVNoaWZ0TmFtZSA9IG5ldyBOYW1lKCI+Pj4iKTsKCmZpbmFsIE5hbWUgdGlsZGVOYW1lID0gbmV3IE5hbWUoIn4iKTsKCmZpbmFsIE5hbWUgdW5hcnlNaW51c05hbWUgPSBuZXcgTmFtZSgidW5hcnktIik7CkUATk48ASMBLAEqASQBKAEmASkBMQErATABJQEoASwBNQEyASoBKwErASwBKQEyASYBKQEqASkBOAEoASUBLAEuASYBMAEmcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL25hbWVzLmRhcnQwc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3BhcnNlci5kYXJ0hyovLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLm1kIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnBhcnNlcjsKCmltcG9ydCAnLi4vc2Nhbm5lci90b2tlbi5kYXJ0JyBzaG93IFRva2VuOwoKaW1wb3J0ICdwYXJzZXIvbGlzdGVuZXIuZGFydCcgc2hvdyBMaXN0ZW5lcjsKCmltcG9ydCAncGFyc2VyL3BhcnNlci5kYXJ0JyBzaG93IFBhcnNlcjsKCmltcG9ydCAncGFyc2VyL3BhcnNlcl9lcnJvci5kYXJ0JyBzaG93IFBhcnNlckVycm9yOwoKaW1wb3J0ICdmYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IE1lc3NhZ2UsIG1lc3NhZ2VOYXRpdmVDbGF1c2VTaG91bGRCZUFubm90YXRpb247CgpleHBvcnQgJ3BhcnNlci9hc3NlcnQuZGFydCcgc2hvdyBBc3NlcnQ7CgpleHBvcnQgJ3BhcnNlci9jbGFzc19tZW1iZXJfcGFyc2VyLmRhcnQnIHNob3cgQ2xhc3NNZW1iZXJQYXJzZXI7CgpleHBvcnQgJ3BhcnNlci9mb3JtYWxfcGFyYW1ldGVyX2tpbmQuZGFydCcgc2hvdyBGb3JtYWxQYXJhbWV0ZXJLaW5kOwoKZXhwb3J0ICdwYXJzZXIvaWRlbnRpZmllcl9jb250ZXh0LmRhcnQnIHNob3cgSWRlbnRpZmllckNvbnRleHQ7CgpleHBvcnQgJ3BhcnNlci9saXN0ZW5lci5kYXJ0JyBzaG93IExpc3RlbmVyOwoKZXhwb3J0ICdwYXJzZXIvZGVjbGFyYXRpb25fa2luZC5kYXJ0JyBzaG93IERlY2xhcmF0aW9uS2luZDsKCmV4cG9ydCAncGFyc2VyL21lbWJlcl9raW5kLmRhcnQnIHNob3cgTWVtYmVyS2luZDsKCmV4cG9ydCAncGFyc2VyL3BhcnNlci5kYXJ0JyBzaG93IFBhcnNlcjsKCmV4cG9ydCAncGFyc2VyL3BhcnNlcl9lcnJvci5kYXJ0JyBzaG93IFBhcnNlckVycm9yOwoKZXhwb3J0ICdwYXJzZXIvdG9wX2xldmVsX3BhcnNlci5kYXJ0JyBzaG93IFRvcExldmVsUGFyc2VyOwoKZXhwb3J0ICdwYXJzZXIvdXRpbC5kYXJ0JwogICAgc2hvdyBsZW5ndGhGb3JUb2tlbiwgbGVuZ3RoT2ZTcGFuLCBvZmZzZXRGb3JUb2tlbiwgb3B0aW9uYWw7CgpjbGFzcyBFcnJvckNvbGxlY3RpbmdMaXN0ZW5lciBleHRlbmRzIExpc3RlbmVyIHsKICBmaW5hbCBMaXN0PFBhcnNlckVycm9yPiByZWNvdmVyYWJsZUVycm9ycyA9IDxQYXJzZXJFcnJvcj5bXTsKCiAgdm9pZCBoYW5kbGVSZWNvdmVyYWJsZUVycm9yKAogICAgICBNZXNzYWdlIG1lc3NhZ2UsIFRva2VuIHN0YXJ0VG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICAvLy8gVE9ETyhkYW5ydWJlbCk6IElnbm9yZSB0aGlzIGVycm9yIHVudGlsIHdlIGRlcHJlY2F0ZSBgbmF0aXZlYCBzdXBwb3J0LgogICAgaWYgKG1lc3NhZ2UgPT0gbWVzc2FnZU5hdGl2ZUNsYXVzZVNob3VsZEJlQW5ub3RhdGlvbikgewogICAgICByZXR1cm47CiAgICB9CiAgICByZWNvdmVyYWJsZUVycm9ycwogICAgICAgIC5hZGQobmV3IFBhcnNlckVycm9yLmZyb21Ub2tlbnMoc3RhcnRUb2tlbiwgZW5kVG9rZW4sIG1lc3NhZ2UpKTsKICB9Cn0KCkxpc3Q8UGFyc2VyRXJyb3I+IHBhcnNlKFRva2VuIHRva2VucykgewogIEVycm9yQ29sbGVjdGluZ0xpc3RlbmVyIGxpc3RlbmVyID0gbmV3IEVycm9yQ29sbGVjdGluZ0xpc3RlbmVyKCk7CiAgUGFyc2VyIHBhcnNlciA9IG5ldyBQYXJzZXIobGlzdGVuZXIpOwogIHBhcnNlci5wYXJzZVVuaXQodG9rZW5zKTsKICByZXR1cm4gbGlzdGVuZXIucmVjb3ZlcmFibGVFcnJvcnM7Cn0KPQBNTj8BFgErAS0BKQE0AU8BKQFBAUUBQAEtATwBMgEpATQBOwEaQQExPwEfO088DgYWSQQCAShEKBwlAgEncGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci5kYXJ0L3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9xdW90ZS5kYXJ0pWsvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5xdW90ZTsKCmltcG9ydCAncHJvYmxlbXMuZGFydCcgc2hvdyB1bmhhbmRsZWQ7CgppbXBvcnQgJ2Zhc3RhX2NvZGVzLmRhcnQnIGFzIGZhc3RhOwoKaW1wb3J0ICdzY2FubmVyL2NoYXJhY3RlcnMuZGFydCcKICAgIHNob3cKICAgICAgICAkQkFDS1NMQVNILAogICAgICAgICRCUywKICAgICAgICAkQ0xPU0VfQ1VSTFlfQlJBQ0tFVCwKICAgICAgICAkQ1IsCiAgICAgICAgJEZGLAogICAgICAgICRMRiwKICAgICAgICAkT1BFTl9DVVJMWV9CUkFDS0VULAogICAgICAgICRTUEFDRSwKICAgICAgICAkVEFCLAogICAgICAgICRWVEFCLAogICAgICAgICRiLAogICAgICAgICRmLAogICAgICAgICRuLAogICAgICAgICRyLAogICAgICAgICR0LAogICAgICAgICR1LAogICAgICAgICR2LAogICAgICAgICR4LAogICAgICAgIGhleERpZ2l0VmFsdWUsCiAgICAgICAgaXNIZXhEaWdpdDsKCmVudW0gUXVvdGUgewogIFNpbmdsZSwKICBEb3VibGUsCiAgTXVsdGlMaW5lU2luZ2xlLAogIE11bHRpTGluZURvdWJsZSwKICBSYXdTaW5nbGUsCiAgUmF3RG91YmxlLAogIFJhd011bHRpTGluZVNpbmdsZSwKICBSYXdNdWx0aUxpbmVEb3VibGUsCn0KClF1b3RlIGFuYWx5emVRdW90ZShTdHJpbmcgZmlyc3QpIHsKICBpZiAoZmlyc3Quc3RhcnRzV2l0aCgnIiIiJykpIHJldHVybiBRdW90ZS5NdWx0aUxpbmVEb3VibGU7CiAgaWYgKGZpcnN0LnN0YXJ0c1dpdGgoJ3IiIiInKSkgcmV0dXJuIFF1b3RlLlJhd011bHRpTGluZURvdWJsZTsKICBpZiAoZmlyc3Quc3RhcnRzV2l0aCgiJycnIikpIHJldHVybiBRdW90ZS5NdWx0aUxpbmVTaW5nbGU7CiAgaWYgKGZpcnN0LnN0YXJ0c1dpdGgoInInJyciKSkgcmV0dXJuIFF1b3RlLlJhd011bHRpTGluZVNpbmdsZTsKICBpZiAoZmlyc3Quc3RhcnRzV2l0aCgnIicpKSByZXR1cm4gUXVvdGUuRG91YmxlOwogIGlmIChmaXJzdC5zdGFydHNXaXRoKCdyIicpKSByZXR1cm4gUXVvdGUuUmF3RG91YmxlOwogIGlmIChmaXJzdC5zdGFydHNXaXRoKCInIikpIHJldHVybiBRdW90ZS5TaW5nbGU7CiAgaWYgKGZpcnN0LnN0YXJ0c1dpdGgoInInIikpIHJldHVybiBRdW90ZS5SYXdTaW5nbGU7CiAgcmV0dXJuIHVuaGFuZGxlZChmaXJzdCwgImFuYWx5emVRdW90ZSIsIC0xLCBudWxsKTsKfQoKLy8gTm90ZTogYmFzZWQgb24gW1N0cmluZ1ZhbGlkYXRvci5xdW90aW5nRnJvbVN0cmluZ10KLy8gKHBrZy9jb21waWxlci9saWIvc3JjL3N0cmluZ192YWxpZGF0b3IuZGFydCkuCmludCBsZW5ndGhPZk9wdGlvbmFsV2hpdGVzcGFjZVByZWZpeChTdHJpbmcgZmlyc3QsIGludCBzdGFydCkgewogIExpc3Q8aW50PiBjb2RlVW5pdHMgPSBmaXJzdC5jb2RlVW5pdHM7CiAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgY29kZVVuaXRzLmxlbmd0aDsgaSsrKSB7CiAgICBpbnQgY29kZSA9IGNvZGVVbml0c1tpXTsKICAgIGlmIChjb2RlID09ICRCQUNLU0xBU0gpIHsKICAgICAgaSsrOwogICAgICBpZiAoaSA8IGNvZGVVbml0cy5sZW5ndGgpIHsKICAgICAgICBjb2RlID0gY29kZVVuaXRzW2ldOwogICAgICB9IGVsc2UgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBpZiAoY29kZSA9PSAkVEFCIHx8IGNvZGUgPT0gJFNQQUNFKSBjb250aW51ZTsKICAgIGlmIChjb2RlID09ICRDUikgewogICAgICBpZiAoaSArIDEgPCBjb2RlVW5pdHMubGVuZ3RoICYmIGNvZGVVbml0c1tpICsgMV0gPT0gJExGKSB7CiAgICAgICAgaSsrOwogICAgICB9CiAgICAgIHJldHVybiBpICsgMTsKICAgIH0KICAgIGlmIChjb2RlID09ICRMRikgewogICAgICByZXR1cm4gaSArIDE7CiAgICB9CiAgICBicmVhazsgLy8gTm90IGEgd2hpdGUtc3BhY2UgY2hhcmFjdGVyLgogIH0KICByZXR1cm4gc3RhcnQ7Cn0KCmludCBmaXJzdFF1b3RlTGVuZ3RoKFN0cmluZyBmaXJzdCwgUXVvdGUgcXVvdGUpIHsKICBzd2l0Y2ggKHF1b3RlKSB7CiAgICBjYXNlIFF1b3RlLlNpbmdsZToKICAgIGNhc2UgUXVvdGUuRG91YmxlOgogICAgICByZXR1cm4gMTsKCiAgICBjYXNlIFF1b3RlLk11bHRpTGluZVNpbmdsZToKICAgIGNhc2UgUXVvdGUuTXVsdGlMaW5lRG91YmxlOgogICAgICByZXR1cm4gbGVuZ3RoT2ZPcHRpb25hbFdoaXRlc3BhY2VQcmVmaXgoZmlyc3QsIDMpOwoKICAgIGNhc2UgUXVvdGUuUmF3U2luZ2xlOgogICAgY2FzZSBRdW90ZS5SYXdEb3VibGU6CiAgICAgIHJldHVybiAyOwoKICAgIGNhc2UgUXVvdGUuUmF3TXVsdGlMaW5lU2luZ2xlOgogICAgY2FzZSBRdW90ZS5SYXdNdWx0aUxpbmVEb3VibGU6CiAgICAgIHJldHVybiBsZW5ndGhPZk9wdGlvbmFsV2hpdGVzcGFjZVByZWZpeChmaXJzdCwgNCk7CiAgfQogIHJldHVybiB1bmhhbmRsZWQoIiRxdW90ZSIsICJmaXJzdFF1b3RlTGVuZ3RoIiwgLTEsIG51bGwpOwp9CgppbnQgbGFzdFF1b3RlTGVuZ3RoKFF1b3RlIHF1b3RlKSB7CiAgc3dpdGNoIChxdW90ZSkgewogICAgY2FzZSBRdW90ZS5TaW5nbGU6CiAgICBjYXNlIFF1b3RlLkRvdWJsZToKICAgIGNhc2UgUXVvdGUuUmF3U2luZ2xlOgogICAgY2FzZSBRdW90ZS5SYXdEb3VibGU6CiAgICAgIHJldHVybiAxOwoKICAgIGNhc2UgUXVvdGUuTXVsdGlMaW5lU2luZ2xlOgogICAgY2FzZSBRdW90ZS5NdWx0aUxpbmVEb3VibGU6CiAgICBjYXNlIFF1b3RlLlJhd011bHRpTGluZVNpbmdsZToKICAgIGNhc2UgUXVvdGUuUmF3TXVsdGlMaW5lRG91YmxlOgogICAgICByZXR1cm4gMzsKICB9CiAgcmV0dXJuIHVuaGFuZGxlZCgiJHF1b3RlIiwgImxhc3RRdW90ZUxlbmd0aCIsIC0xLCBudWxsKTsKfQoKU3RyaW5nIHVuZXNjYXBlRmlyc3RTdHJpbmdQYXJ0KFN0cmluZyBmaXJzdCwgUXVvdGUgcXVvdGUsIE9iamVjdCBsb2NhdGlvbiwKICAgIFVuZXNjYXBlRXJyb3JMaXN0ZW5lciBsaXN0ZW5lcikgewogIHJldHVybiB1bmVzY2FwZShmaXJzdC5zdWJzdHJpbmcoZmlyc3RRdW90ZUxlbmd0aChmaXJzdCwgcXVvdGUpKSwgcXVvdGUsCiAgICAgIGxvY2F0aW9uLCBsaXN0ZW5lcik7Cn0KClN0cmluZyB1bmVzY2FwZUxhc3RTdHJpbmdQYXJ0KFN0cmluZyBsYXN0LCBRdW90ZSBxdW90ZSwgT2JqZWN0IGxvY2F0aW9uLAogICAgYm9vbCBpc0xhc3RRdW90ZVN5bnRoZXRpYywgVW5lc2NhcGVFcnJvckxpc3RlbmVyIGxpc3RlbmVyKSB7CiAgaW50IGVuZCA9IGxhc3QubGVuZ3RoIC0gKGlzTGFzdFF1b3RlU3ludGhldGljID8gMCA6IGxhc3RRdW90ZUxlbmd0aChxdW90ZSkpOwogIHJldHVybiB1bmVzY2FwZShsYXN0LnN1YnN0cmluZygwLCBlbmQpLCBxdW90ZSwgbG9jYXRpb24sIGxpc3RlbmVyKTsKfQoKU3RyaW5nIHVuZXNjYXBlU3RyaW5nKAogICAgU3RyaW5nIHN0cmluZywgT2JqZWN0IGxvY2F0aW9uLCBVbmVzY2FwZUVycm9yTGlzdGVuZXIgbGlzdGVuZXIpIHsKICBRdW90ZSBxdW90ZSA9IGFuYWx5emVRdW90ZShzdHJpbmcpOwogIHJldHVybiB1bmVzY2FwZSgKICAgICAgc3RyaW5nLnN1YnN0cmluZyhmaXJzdFF1b3RlTGVuZ3RoKHN0cmluZywgcXVvdGUpLAogICAgICAgICAgc3RyaW5nLmxlbmd0aCAtIGxhc3RRdW90ZUxlbmd0aChxdW90ZSkpLAogICAgICBxdW90ZSwKICAgICAgbG9jYXRpb24sCiAgICAgIGxpc3RlbmVyKTsKfQoKU3RyaW5nIHVuZXNjYXBlKFN0cmluZyBzdHJpbmcsIFF1b3RlIHF1b3RlLCBPYmplY3QgbG9jYXRpb24sCiAgICBVbmVzY2FwZUVycm9yTGlzdGVuZXIgbGlzdGVuZXIpIHsKICBzd2l0Y2ggKHF1b3RlKSB7CiAgICBjYXNlIFF1b3RlLlNpbmdsZToKICAgIGNhc2UgUXVvdGUuRG91YmxlOgogICAgICByZXR1cm4gIXN0cmluZy5jb250YWlucygiXFwiKQogICAgICAgICAgPyBzdHJpbmcKICAgICAgICAgIDogdW5lc2NhcGVDb2RlVW5pdHMoc3RyaW5nLmNvZGVVbml0cywgZmFsc2UsIGxvY2F0aW9uLCBsaXN0ZW5lcik7CgogICAgY2FzZSBRdW90ZS5NdWx0aUxpbmVTaW5nbGU6CiAgICBjYXNlIFF1b3RlLk11bHRpTGluZURvdWJsZToKICAgICAgcmV0dXJuICFzdHJpbmcuY29udGFpbnMoIlxcIikgJiYgIXN0cmluZy5jb250YWlucygiXHIiKQogICAgICAgICAgPyBzdHJpbmcKICAgICAgICAgIDogdW5lc2NhcGVDb2RlVW5pdHMoc3RyaW5nLmNvZGVVbml0cywgZmFsc2UsIGxvY2F0aW9uLCBsaXN0ZW5lcik7CgogICAgY2FzZSBRdW90ZS5SYXdTaW5nbGU6CiAgICBjYXNlIFF1b3RlLlJhd0RvdWJsZToKICAgICAgcmV0dXJuIHN0cmluZzsKCiAgICBjYXNlIFF1b3RlLlJhd011bHRpTGluZVNpbmdsZToKICAgIGNhc2UgUXVvdGUuUmF3TXVsdGlMaW5lRG91YmxlOgogICAgICByZXR1cm4gIXN0cmluZy5jb250YWlucygiXHIiKQogICAgICAgICAgPyBzdHJpbmcKICAgICAgICAgIDogdW5lc2NhcGVDb2RlVW5pdHMoc3RyaW5nLmNvZGVVbml0cywgdHJ1ZSwgbG9jYXRpb24sIGxpc3RlbmVyKTsKICB9CiAgcmV0dXJuIHVuaGFuZGxlZCgiJHF1b3RlIiwgInVuZXNjYXBlIiwgLTEsIG51bGwpOwp9CgovLyBOb3RlOiBiYXNlZCBvbgovLyBbU3RyaW5nVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nXShwa2cvY29tcGlsZXIvbGliL3NyYy9zdHJpbmdfdmFsaWRhdG9yLmRhcnQpLgpTdHJpbmcgdW5lc2NhcGVDb2RlVW5pdHMoTGlzdDxpbnQ+IGNvZGVVbml0cywgYm9vbCBpc1JhdywgT2JqZWN0IGxvY2F0aW9uLAogICAgVW5lc2NhcGVFcnJvckxpc3RlbmVyIGxpc3RlbmVyKSB7CiAgLy8gQ2FuJ3QgdXNlIFVpbnQ4TGlzdCBvciBVaW50MTZMaXN0IGhlcmUsIHRoZSBjb2RlIHVuaXRzIG1heSBiZSBsYXJnZXIuCiAgTGlzdDxpbnQ+IHJlc3VsdCA9IG5ldyBMaXN0PGludD4oY29kZVVuaXRzLmxlbmd0aCk7CiAgaW50IHJlc3VsdE9mZnNldCA9IDA7CgogIGZvciAoaW50IGkgPSAwOyBpIDwgY29kZVVuaXRzLmxlbmd0aDsgaSsrKSB7CiAgICBpbnQgY29kZSA9IGNvZGVVbml0c1tpXTsKICAgIGlmIChjb2RlID09ICRDUikgewogICAgICBpZiAoaSArIDEgPCBjb2RlVW5pdHMubGVuZ3RoICYmIGNvZGVVbml0c1tpICsgMV0gPT0gJExGKSB7CiAgICAgICAgaSsrOwogICAgICB9CiAgICAgIGNvZGUgPSAkTEY7CiAgICB9IGVsc2UgaWYgKCFpc1JhdyAmJiBjb2RlID09ICRCQUNLU0xBU0gpIHsKICAgICAgaWYgKGNvZGVVbml0cy5sZW5ndGggPT0gKytpKSB7CiAgICAgICAgbGlzdGVuZXIuaGFuZGxlVW5lc2NhcGVFcnJvcigKICAgICAgICAgICAgZmFzdGEubWVzc2FnZUludmFsaWRVbmljb2RlRXNjYXBlLCBsb2NhdGlvbiwgaSwgMSk7CiAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcuZnJvbUNoYXJDb2Rlcyhjb2RlVW5pdHMpOwogICAgICB9CiAgICAgIGNvZGUgPSBjb2RlVW5pdHNbaV07CgogICAgICAvLy8gYFxuYCBmb3IgbmV3bGluZSwgZXF1aXZhbGVudCB0byBgXHgwQWAuCiAgICAgIC8vLyBgXHJgIGZvciBjYXJyaWFnZSByZXR1cm4sIGVxdWl2YWxlbnQgdG8gYFx4MERgLgogICAgICAvLy8gYFxmYCBmb3IgZm9ybSBmZWVkLCBlcXVpdmFsZW50IHRvIGBceDBDYC4KICAgICAgLy8vIGBcYmAgZm9yIGJhY2tzcGFjZSwgZXF1aXZhbGVudCB0byBgXHgwOGAuCiAgICAgIC8vLyBgXHRgIGZvciB0YWIsIGVxdWl2YWxlbnQgdG8gYFx4MDlgLgogICAgICAvLy8gYFx2YCBmb3IgdmVydGljYWwgdGFiLCBlcXVpdmFsZW50IHRvIGBceDBCYC4KICAgICAgLy8vIGBceFhYYCBmb3IgaGV4IGVzY2FwZS4KICAgICAgLy8vIGBcdVhYWFhgIG9yIGBcdXtYWD9YP1g/WD9YP31gIGZvciBVbmljb2RlIGhleCBlc2NhcGUuCiAgICAgIGlmIChjb2RlID09ICRuKSB7CiAgICAgICAgY29kZSA9ICRMRjsKICAgICAgfSBlbHNlIGlmIChjb2RlID09ICRyKSB7CiAgICAgICAgY29kZSA9ICRDUjsKICAgICAgfSBlbHNlIGlmIChjb2RlID09ICRmKSB7CiAgICAgICAgY29kZSA9ICRGRjsKICAgICAgfSBlbHNlIGlmIChjb2RlID09ICRiKSB7CiAgICAgICAgY29kZSA9ICRCUzsKICAgICAgfSBlbHNlIGlmIChjb2RlID09ICR0KSB7CiAgICAgICAgY29kZSA9ICRUQUI7CiAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSAkdikgewogICAgICAgIGNvZGUgPSAkVlRBQjsKICAgICAgfSBlbHNlIGlmIChjb2RlID09ICR4KSB7CiAgICAgICAgLy8gRXhwZWN0IGV4YWN0bHkgMiBoZXggZGlnaXRzLgogICAgICAgIGludCBiZWdpbiA9IGk7CiAgICAgICAgaWYgKGNvZGVVbml0cy5sZW5ndGggPD0gaSArIDIpIHsKICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZVVuZXNjYXBlRXJyb3IoZmFzdGEubWVzc2FnZUludmFsaWRIZXhFc2NhcGUsIGxvY2F0aW9uLAogICAgICAgICAgICAgIGJlZ2luLCBjb2RlVW5pdHMubGVuZ3RoICsgMSAtIGJlZ2luKTsKICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoY29kZVVuaXRzKTsKICAgICAgICB9CiAgICAgICAgY29kZSA9IDA7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAyOyBqKyspIHsKICAgICAgICAgIGludCBkaWdpdCA9IGNvZGVVbml0c1srK2ldOwogICAgICAgICAgaWYgKCFpc0hleERpZ2l0KGRpZ2l0KSkgewogICAgICAgICAgICBsaXN0ZW5lci5oYW5kbGVVbmVzY2FwZUVycm9yKAogICAgICAgICAgICAgICAgZmFzdGEubWVzc2FnZUludmFsaWRIZXhFc2NhcGUsIGxvY2F0aW9uLCBiZWdpbiwgaSArIDEgLSBiZWdpbik7CiAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoY29kZVVuaXRzKTsKICAgICAgICAgIH0KICAgICAgICAgIGNvZGUgPSAoY29kZSA8PCA0KSArIGhleERpZ2l0VmFsdWUoZGlnaXQpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChjb2RlID09ICR1KSB7CiAgICAgICAgaW50IGJlZ2luID0gaTsKICAgICAgICBpZiAoY29kZVVuaXRzLmxlbmd0aCA9PSBpICsgMSkgewogICAgICAgICAgbGlzdGVuZXIuaGFuZGxlVW5lc2NhcGVFcnJvcihmYXN0YS5tZXNzYWdlSW52YWxpZFVuaWNvZGVFc2NhcGUsCiAgICAgICAgICAgICAgbG9jYXRpb24sIGJlZ2luLCBjb2RlVW5pdHMubGVuZ3RoICsgMSAtIGJlZ2luKTsKICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoY29kZVVuaXRzKTsKICAgICAgICB9CiAgICAgICAgY29kZSA9IGNvZGVVbml0c1tpICsgMV07CiAgICAgICAgaWYgKGNvZGUgPT0gJE9QRU5fQ1VSTFlfQlJBQ0tFVCkgewogICAgICAgICAgLy8gRXhwZWN0IDEtNiBoZXggZGlnaXRzIGZvbGxvd2VkIGJ5ICd9Jy4KICAgICAgICAgIGlmIChjb2RlVW5pdHMubGVuZ3RoID09ICsraSkgewogICAgICAgICAgICBsaXN0ZW5lci5oYW5kbGVVbmVzY2FwZUVycm9yKGZhc3RhLm1lc3NhZ2VJbnZhbGlkVW5pY29kZUVzY2FwZSwKICAgICAgICAgICAgICAgIGxvY2F0aW9uLCBiZWdpbiwgaSArIDEgLSBiZWdpbik7CiAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoY29kZVVuaXRzKTsKICAgICAgICAgIH0KICAgICAgICAgIGNvZGUgPSAwOwogICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA3OyBqKyspIHsKICAgICAgICAgICAgaWYgKGNvZGVVbml0cy5sZW5ndGggPT0gKytpKSB7CiAgICAgICAgICAgICAgbGlzdGVuZXIuaGFuZGxlVW5lc2NhcGVFcnJvcihmYXN0YS5tZXNzYWdlSW52YWxpZFVuaWNvZGVFc2NhcGUsCiAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLCBiZWdpbiwgaSArIDEgLSBiZWdpbik7CiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcuZnJvbUNoYXJDb2Rlcyhjb2RlVW5pdHMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGludCBkaWdpdCA9IGNvZGVVbml0c1tpXTsKICAgICAgICAgICAgaWYgKGogIT0gMCAmJiBkaWdpdCA9PSAkQ0xPU0VfQ1VSTFlfQlJBQ0tFVCkgYnJlYWs7CiAgICAgICAgICAgIGlmICghaXNIZXhEaWdpdChkaWdpdCkpIHsKICAgICAgICAgICAgICBsaXN0ZW5lci5oYW5kbGVVbmVzY2FwZUVycm9yKGZhc3RhLm1lc3NhZ2VJbnZhbGlkVW5pY29kZUVzY2FwZSwKICAgICAgICAgICAgICAgICAgbG9jYXRpb24sIGJlZ2luLCBpICsgMiAtIGJlZ2luKTsKICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGNvZGVVbml0cyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29kZSA9IChjb2RlIDw8IDQpICsgaGV4RGlnaXRWYWx1ZShkaWdpdCk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIEV4cGVjdCBleGFjdGx5IDQgaGV4IGRpZ2l0cy4KICAgICAgICAgIGlmIChjb2RlVW5pdHMubGVuZ3RoIDw9IGkgKyA0KSB7CiAgICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZVVuZXNjYXBlRXJyb3IoZmFzdGEubWVzc2FnZUludmFsaWRVbmljb2RlRXNjYXBlLAogICAgICAgICAgICAgICAgbG9jYXRpb24sIGJlZ2luLCBjb2RlVW5pdHMubGVuZ3RoICsgMSAtIGJlZ2luKTsKICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcuZnJvbUNoYXJDb2Rlcyhjb2RlVW5pdHMpOwogICAgICAgICAgfQogICAgICAgICAgY29kZSA9IDA7CiAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7IGorKykgewogICAgICAgICAgICBpbnQgZGlnaXQgPSBjb2RlVW5pdHNbKytpXTsKICAgICAgICAgICAgaWYgKCFpc0hleERpZ2l0KGRpZ2l0KSkgewogICAgICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZVVuZXNjYXBlRXJyb3IoZmFzdGEubWVzc2FnZUludmFsaWRVbmljb2RlRXNjYXBlLAogICAgICAgICAgICAgICAgICBsb2NhdGlvbiwgYmVnaW4sIGkgKyAxIC0gYmVnaW4pOwogICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoY29kZVVuaXRzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb2RlID0gKGNvZGUgPDwgNCkgKyBoZXhEaWdpdFZhbHVlKGRpZ2l0KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGNvZGUgPiAweDEwRkZGRikgewogICAgICAgICAgbGlzdGVuZXIuaGFuZGxlVW5lc2NhcGVFcnJvcigKICAgICAgICAgICAgICBmYXN0YS5tZXNzYWdlSW52YWxpZENvZGVQb2ludCwgbG9jYXRpb24sIGJlZ2luLCBpICsgMSAtIGJlZ2luKTsKICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoY29kZVVuaXRzKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gTm90aGluZywgZXNjYXBlZCBjaGFyYWN0ZXIgaXMgcGFzc2VkIHRocm91Z2g7CiAgICAgIH0KICAgIH0KICAgIHJlc3VsdFtyZXN1bHRPZmZzZXQrK10gPSBjb2RlOwogIH0KICByZXR1cm4gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKHJlc3VsdCwgMCwgcmVzdWx0T2Zmc2V0KTsKfQoKYWJzdHJhY3QgY2xhc3MgVW5lc2NhcGVFcnJvckxpc3RlbmVyIHsKICB2b2lkIGhhbmRsZVVuZXNjYXBlRXJyb3IoCiAgICAgIGZhc3RhLk1lc3NhZ2UgbWVzc2FnZSwgY292YXJpYW50IGxvY2F0aW9uLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKTsKfQqBMABOTjwBFQEnASQBIQkUDR4NDQ0dEA4PDAwMDAwMDAwXFAENCgoTEw0NFhYCASM9QT1BMjYyNjUCATYxQCkzHR4LIh0PDwgGMhdBDQgUBhcUBisEEAIBMhMXFxABICA5ARoaEAEjIzkEPAIBIxMXFxoaEAEgICMjEAQ7AgFLJkobAgFJQU9GAgEXRiYTODMNEBECAT0mExcXJBNMASAgPhNMARoaFQEjIyQTSwQ0AgESUUsmSzYYAS8dF0ENCBIvJSZANAgbATI6NDQuNyFAGBQfFB8UHxQfFR8WHygXKVA0NgoSJiYkKlA4DDUKHxcpSj42CiErNClMMTgMFCgrTjM6DiZAJk4zOg43DBEqK0xAOAwUKCgmTjM6DjcMCh8oTjYKDzkIBiMEPAIBJxxKAgEmcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3F1b3RlLmRhcnQ/c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3NvdXJjZS9zY29wZV9saXN0ZW5lci5kYXJ0kvQvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5zY29wZV9saXN0ZW5lcjsKCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JyBzaG93IFRva2VuOwoKaW1wb3J0ICcuLi9zY29wZS5kYXJ0JyBzaG93IFNjb3BlOwoKaW1wb3J0ICdzdGFja19saXN0ZW5lci5kYXJ0JyBzaG93IE51bGxWYWx1ZSwgU3RhY2tMaXN0ZW5lcjsKCmV4cG9ydCAnc3RhY2tfbGlzdGVuZXIuZGFydCcKICAgIHNob3cgRml4ZWROdWxsYWJsZUxpc3QsIEdyb3dhYmxlTGlzdCwgTnVsbFZhbHVlLCBQYXJzZXJSZWNvdmVyeTsKCmVudW0gSnVtcFRhcmdldEtpbmQgewogIEJyZWFrLAogIENvbnRpbnVlLAogIEdvdG8sIC8vIENvbnRpbnVlIGxhYmVsIGluIHN3aXRjaC4KfQoKYWJzdHJhY3QgY2xhc3MgU2NvcGVMaXN0ZW5lcjxKPiBleHRlbmRzIFN0YWNrTGlzdGVuZXIgewogIFNjb3BlIHNjb3BlOwoKICBKIGJyZWFrVGFyZ2V0OwoKICBKIGNvbnRpbnVlVGFyZ2V0OwoKICBTY29wZUxpc3RlbmVyKFNjb3BlIHNjb3BlKSA6IHNjb3BlID0gc2NvcGUgPz8gbmV3IFNjb3BlLmltbXV0YWJsZSgpOwoKICBKIGNyZWF0ZUp1bXBUYXJnZXQoSnVtcFRhcmdldEtpbmQga2luZCwgaW50IGNoYXJPZmZzZXQpOwoKICBKIGNyZWF0ZUJyZWFrVGFyZ2V0KGludCBjaGFyT2Zmc2V0KSB7CiAgICByZXR1cm4gY3JlYXRlSnVtcFRhcmdldChKdW1wVGFyZ2V0S2luZC5CcmVhaywgY2hhck9mZnNldCk7CiAgfQoKICBKIGNyZWF0ZUNvbnRpbnVlVGFyZ2V0KGludCBjaGFyT2Zmc2V0KSB7CiAgICByZXR1cm4gY3JlYXRlSnVtcFRhcmdldChKdW1wVGFyZ2V0S2luZC5Db250aW51ZSwgY2hhck9mZnNldCk7CiAgfQoKICBKIGNyZWF0ZUdvdG9UYXJnZXQoaW50IGNoYXJPZmZzZXQpIHsKICAgIHJldHVybiBjcmVhdGVKdW1wVGFyZ2V0KEp1bXBUYXJnZXRLaW5kLkdvdG8sIGNoYXJPZmZzZXQpOwogIH0KCiAgdm9pZCBlbnRlckxvY2FsU2NvcGUoU3RyaW5nIGRlYnVnTmFtZSwgW1Njb3BlIG5ld1Njb3BlXSkgewogICAgcHVzaChzY29wZSk7CiAgICBzY29wZSA9IG5ld1Njb3BlID8/IHNjb3BlLmNyZWF0ZU5lc3RlZFNjb3BlKGRlYnVnTmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGV4aXRMb2NhbFNjb3BlKCkgewogICAgc2NvcGUgPSBwb3AoKTsKICAgIGFzc2VydChzY29wZSAhPSBudWxsKTsKICB9CgogIHZvaWQgZW50ZXJCcmVha1RhcmdldChpbnQgY2hhck9mZnNldCwgW0ogdGFyZ2V0XSkgewogICAgcHVzaChicmVha1RhcmdldCA/PyBOdWxsVmFsdWUuQnJlYWtUYXJnZXQpOwogICAgYnJlYWtUYXJnZXQgPSB0YXJnZXQgPz8gY3JlYXRlQnJlYWtUYXJnZXQoY2hhck9mZnNldCk7CiAgfQoKICB2b2lkIGVudGVyQ29udGludWVUYXJnZXQoaW50IGNoYXJPZmZzZXQsIFtKIHRhcmdldF0pIHsKICAgIHB1c2goY29udGludWVUYXJnZXQgPz8gTnVsbFZhbHVlLkNvbnRpbnVlVGFyZ2V0KTsKICAgIGNvbnRpbnVlVGFyZ2V0ID0gdGFyZ2V0ID8/IGNyZWF0ZUNvbnRpbnVlVGFyZ2V0KGNoYXJPZmZzZXQpOwogIH0KCiAgSiBleGl0QnJlYWtUYXJnZXQoKSB7CiAgICBKIGN1cnJlbnQgPSBicmVha1RhcmdldDsKICAgIGJyZWFrVGFyZ2V0ID0gcG9wKCk7CiAgICByZXR1cm4gY3VycmVudDsKICB9CgogIEogZXhpdENvbnRpbnVlVGFyZ2V0KCkgewogICAgSiBjdXJyZW50ID0gY29udGludWVUYXJnZXQ7CiAgICBjb250aW51ZVRhcmdldCA9IHBvcCgpOwogICAgcmV0dXJuIGN1cnJlbnQ7CiAgfQoKICB2b2lkIGVudGVyTG9vcChpbnQgY2hhck9mZnNldCkgewogICAgZW50ZXJCcmVha1RhcmdldChjaGFyT2Zmc2V0KTsKICAgIGVudGVyQ29udGludWVUYXJnZXQoY2hhck9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQmxvY2tGdW5jdGlvbkJvZHkoVG9rZW4gYmVnaW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luQmxvY2tGdW5jdGlvbkJvZHkiKTsKICAgIGVudGVyTG9jYWxTY29wZSgiYmxvY2sgZnVuY3Rpb24gYm9keSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZvclN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5Gb3JTdGF0ZW1lbnQiKTsKICAgIGVudGVyTG9vcCh0b2tlbi5jaGFyT2Zmc2V0KTsKICAgIGVudGVyTG9jYWxTY29wZSgiZm9yIHN0YXRlbWVudCIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZvckNvbnRyb2xGbG93KFRva2VuIGF3YWl0VG9rZW4sIFRva2VuIGZvclRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkZvckNvbnRyb2xGbG93Iik7CiAgICBlbnRlckxvY2FsU2NvcGUoImZvciBpbiBhIGNvbGxlY3Rpb24iKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5CbG9jayhUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5CbG9jayIpOwogICAgZW50ZXJMb2NhbFNjb3BlKCJibG9jayIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblN3aXRjaEJsb2NrKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpblN3aXRjaEJsb2NrIik7CiAgICBlbnRlckxvY2FsU2NvcGUoInN3aXRjaCBibG9jayIpOwogICAgZW50ZXJCcmVha1RhcmdldCh0b2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Eb1doaWxlU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkRvV2hpbGVTdGF0ZW1lbnQiKTsKICAgIGVudGVyTG9vcCh0b2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5XaGlsZVN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5XaGlsZVN0YXRlbWVudCIpOwogICAgZW50ZXJMb29wKHRva2VuLmNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkRvV2hpbGVTdGF0ZW1lbnRCb2R5KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkRvV2hpbGVTdGF0ZW1lbnRCb2R5Iik7CiAgICBlbnRlckxvY2FsU2NvcGUoImRvLXdoaWxlIHN0YXRlbWVudCBib2R5Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZERvV2hpbGVTdGF0ZW1lbnRCb2R5KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmREb1doaWxlU3RhdGVtZW50Qm9keSIpOwogICAgT2JqZWN0IGJvZHkgPSBwb3AoKTsKICAgIGV4aXRMb2NhbFNjb3BlKCk7CiAgICBwdXNoKGJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbldoaWxlU3RhdGVtZW50Qm9keShUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5XaGlsZVN0YXRlbWVudEJvZHkiKTsKICAgIGVudGVyTG9jYWxTY29wZSgid2hpbGUgc3RhdGVtZW50IGJvZHkiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kV2hpbGVTdGF0ZW1lbnRCb2R5KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRXaGlsZVN0YXRlbWVudEJvZHkiKTsKICAgIE9iamVjdCBib2R5ID0gcG9wKCk7CiAgICBleGl0TG9jYWxTY29wZSgpOwogICAgcHVzaChib2R5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Gb3JTdGF0ZW1lbnRCb2R5KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkZvclN0YXRlbWVudEJvZHkiKTsKICAgIGVudGVyTG9jYWxTY29wZSgiZm9yIHN0YXRlbWVudCBib2R5Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZvclN0YXRlbWVudEJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImVuZEZvclN0YXRlbWVudEJvZHkiKTsKICAgIE9iamVjdCBib2R5ID0gcG9wKCk7CiAgICBleGl0TG9jYWxTY29wZSgpOwogICAgcHVzaChib2R5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Gb3JJbkJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luRm9ySW5Cb2R5Iik7CiAgICBlbnRlckxvY2FsU2NvcGUoImZvci1pbiBib2R5Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZvckluQm9keShUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiZW5kRm9ySW5Cb2R5Iik7CiAgICBPYmplY3QgYm9keSA9IHBvcCgpOwogICAgZXhpdExvY2FsU2NvcGUoKTsKICAgIHB1c2goYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luVGhlblN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5UaGVuU3RhdGVtZW50Iik7CiAgICBlbnRlckxvY2FsU2NvcGUoInRoZW4iKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVGhlblN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiZW5kVGhlblN0YXRlbWVudCIpOwogICAgT2JqZWN0IGJvZHkgPSBwb3AoKTsKICAgIGV4aXRMb2NhbFNjb3BlKCk7CiAgICBwdXNoKGJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkVsc2VTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luRWxzZVN0YXRlbWVudCIpOwogICAgZW50ZXJMb2NhbFNjb3BlKCJlbHNlIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEVsc2VTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImVuZEVsc2VTdGF0ZW1lbnQiKTsKICAgIE9iamVjdCBib2R5ID0gcG9wKCk7CiAgICBleGl0TG9jYWxTY29wZSgpOwogICAgcHVzaChib2R5KTsKICB9Cn0KgNQATk48AR4BLgEjATwBHUUBFgkMJQIBOA8BEQEUAUcBOwEoPwQBK0IEASc+BAE9ETwEAQwaExsEATYwOwQBOTZBBAEYHRkUBAEbIBwUBAEjIiUEAQwtKiwEAQwoJSEmBAEMPycsBAEMIR4eBAEMJyQlKAQBDCwpIQQBDConIQQBDDAtMAQBDC4rGRYQBAEMListBAEMLCkZFhAEAQwsKSsEAQwqJxkWEAQBDCUiJAQBDCMgGRYQBAEMKSYdBAEMJyQZFhAEAQwpJh0EAQwnJBkWEAQCATZwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc291cmNlL3Njb3BlX2xpc3RlbmVyLmRhcnQ8c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3NvdXJjZS92YWx1ZV9raW5kcy5kYXJ0lC8vLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgdHlwZTsKCmltcG9ydCAnLi4vYnVpbGRlci9idWlsZGVyLmRhcnQnIGFzIHR5cGU7CgppbXBvcnQgJy4uL2tlcm5lbC9leHByZXNzaW9uX2dlbmVyYXRvci5kYXJ0JyBhcyB0eXBlOwoKaW1wb3J0ICcuLi9tb2RpZmllci5kYXJ0JyBhcyB0eXBlOwoKaW1wb3J0ICcuLi9vcGVyYXRvci5kYXJ0JyBhcyB0eXBlOwoKaW1wb3J0ICcuLi9zY2FubmVyLmRhcnQnIGFzIHR5cGUgc2hvdyBUb2tlbjsKCmltcG9ydCAnLi4vc2NvcGUuZGFydCcgYXMgdHlwZTsKCmltcG9ydCAnLi4vc291cmNlL291dGxpbmVfYnVpbGRlci5kYXJ0JyBhcyB0eXBlOwoKaW1wb3J0ICdzdGFja19saXN0ZW5lci5kYXJ0JyBzaG93IE51bGxWYWx1ZTsKCmltcG9ydCAnc3RhY2tfbGlzdGVuZXIuZGFydCcgYXMgdHlwZTsKCi8vLyBbVmFsdWVLaW5kXSBpcyB1c2VkIGluIFtTdGFja0xpc3RlbmVyLmNoZWNrU3RhdGVdIHRvIGRvY3VtZW50IGFuZCBjaGVjayB0aGUKLy8vIGV4cGVjdGVkIHZhbHVlcyBvZiB0aGUgc3RhY2suCi8vLwovLy8gQWRkIG5ldyB2YWx1ZSBraW5kcyBhcyBuZWVkZWQgZm9yIGRvY3VtZW50aW5nIGFuZCBjaGVja2luZyB0aGUgdmFyaW91cyBzdGFjawovLy8gbGlzdGVuZXIgaW1wbGVtZW50YXRpb25zLgphYnN0cmFjdCBjbGFzcyBWYWx1ZUtpbmQgewogIGNvbnN0IFZhbHVlS2luZCgpOwoKICAvLy8gQ2hlY2tzIHRoZSBbdmFsdWVdIGFuIHJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZSBpcyBvZiB0aGUgZXhwZWN0ZWQga2luZC4KICBib29sIGNoZWNrKE9iamVjdCB2YWx1ZSk7CgogIHN0YXRpYyBjb25zdCBWYWx1ZUtpbmQgQXJndW1lbnRzID0gY29uc3QgX1NpbmdsZVZhbHVlS2luZDx0eXBlLkFyZ3VtZW50cz4oKTsKICBzdGF0aWMgY29uc3QgVmFsdWVLaW5kIEFyZ3VtZW50c09yTnVsbCA9CiAgICAgIGNvbnN0IF9TaW5nbGVWYWx1ZUtpbmQ8dHlwZS5Bcmd1bWVudHM+KE51bGxWYWx1ZS5Bcmd1bWVudHMpOwogIHN0YXRpYyBjb25zdCBWYWx1ZUtpbmQgRXhwcmVzc2lvbiA9IGNvbnN0IF9TaW5nbGVWYWx1ZUtpbmQ8dHlwZS5FeHByZXNzaW9uPigpOwogIHN0YXRpYyBjb25zdCBWYWx1ZUtpbmQgSWRlbnRpZmllciA9IGNvbnN0IF9TaW5nbGVWYWx1ZUtpbmQ8dHlwZS5JZGVudGlmaWVyPigpOwogIHN0YXRpYyBjb25zdCBWYWx1ZUtpbmQgSWRlbnRpZmllck9yTnVsbCA9CiAgICAgIGNvbnN0IF9TaW5nbGVWYWx1ZUtpbmQ8dHlwZS5JZGVudGlmaWVyPihOdWxsVmFsdWUuSWRlbnRpZmllcik7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBJbnRlZ2VyID0gY29uc3QgX1NpbmdsZVZhbHVlS2luZDxpbnQ+KCk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBGb3JtYWxzID0KICAgICAgY29uc3QgX1NpbmdsZVZhbHVlS2luZDxMaXN0PHR5cGUuRm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4+KCk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBGb3JtYWxzT3JOdWxsID0KICAgICAgY29uc3QgX1NpbmdsZVZhbHVlS2luZDxMaXN0PHR5cGUuRm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4+KAogICAgICAgICAgTnVsbFZhbHVlLkZvcm1hbFBhcmFtZXRlcnMpOwogIHN0YXRpYyBjb25zdCBWYWx1ZUtpbmQgR2VuZXJhdG9yID0gY29uc3QgX1NpbmdsZVZhbHVlS2luZDx0eXBlLkdlbmVyYXRvcj4oKTsKICBzdGF0aWMgY29uc3QgVmFsdWVLaW5kIE1ldGhvZEJvZHkgPSBjb25zdCBfU2luZ2xlVmFsdWVLaW5kPHR5cGUuTWV0aG9kQm9keT4oKTsKICBzdGF0aWMgY29uc3QgVmFsdWVLaW5kIE1vZGlmaWVycyA9CiAgICAgIGNvbnN0IF9TaW5nbGVWYWx1ZUtpbmQ8TGlzdDx0eXBlLk1vZGlmaWVyPj4oKTsKICBzdGF0aWMgY29uc3QgVmFsdWVLaW5kIE1vZGlmaWVyc09yTnVsbCA9CiAgICAgIGNvbnN0IF9TaW5nbGVWYWx1ZUtpbmQ8TGlzdDx0eXBlLk1vZGlmaWVyPj4oTnVsbFZhbHVlLk1vZGlmaWVycyk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBOYW1lID0gY29uc3QgX1NpbmdsZVZhbHVlS2luZDxTdHJpbmc+KCk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBOYW1lT3JOdWxsID0KICAgICAgY29uc3QgX1NpbmdsZVZhbHVlS2luZDxTdHJpbmc+KE51bGxWYWx1ZS5OYW1lKTsKICBzdGF0aWMgY29uc3QgVmFsdWVLaW5kIE5hbWVPck9wZXJhdG9yID0KICAgICAgY29uc3QgX1VuaW9uVmFsdWVLaW5kKFtOYW1lLCBPcGVyYXRvcl0pOwogIHN0YXRpYyBjb25zdCBWYWx1ZUtpbmQgTmFtZU9yUXVhbGlmaWVkTmFtZU9yT3BlcmF0b3IgPQogICAgICBjb25zdCBfVW5pb25WYWx1ZUtpbmQoW05hbWUsIFF1YWxpZmllZE5hbWUsIE9wZXJhdG9yXSk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBOYW1lT3JQYXJzZXJSZWNvdmVyeSA9CiAgICAgIGNvbnN0IF9VbmlvblZhbHVlS2luZChbTmFtZSwgUGFyc2VyUmVjb3ZlcnldKTsKICBzdGF0aWMgY29uc3QgVmFsdWVLaW5kIE1ldGFkYXRhTGlzdE9yTnVsbCA9CiAgICAgIGNvbnN0IF9TaW5nbGVWYWx1ZUtpbmQ8TGlzdDx0eXBlLk1ldGFkYXRhQnVpbGRlcj4+KE51bGxWYWx1ZS5NZXRhZGF0YSk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBPcGVyYXRvciA9IGNvbnN0IF9TaW5nbGVWYWx1ZUtpbmQ8dHlwZS5PcGVyYXRvcj4oKTsKICBzdGF0aWMgY29uc3QgVmFsdWVLaW5kIFBhcnNlclJlY292ZXJ5ID0KICAgICAgY29uc3QgX1NpbmdsZVZhbHVlS2luZDx0eXBlLlBhcnNlclJlY292ZXJ5PigpOwogIHN0YXRpYyBjb25zdCBWYWx1ZUtpbmQgUHJvYmxlbUJ1aWxkZXIgPQogICAgICBjb25zdCBfU2luZ2xlVmFsdWVLaW5kPHR5cGUuUHJvYmxlbUJ1aWxkZXI+KCk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBRdWFsaWZpZWROYW1lID0KICAgICAgY29uc3QgX1NpbmdsZVZhbHVlS2luZDx0eXBlLlF1YWxpZmllZE5hbWU+KCk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBUb2tlbiA9IGNvbnN0IF9TaW5nbGVWYWx1ZUtpbmQ8dHlwZS5Ub2tlbj4oKTsKICBzdGF0aWMgY29uc3QgVmFsdWVLaW5kIFRva2VuT3JOdWxsID0KICAgICAgY29uc3QgX1NpbmdsZVZhbHVlS2luZDx0eXBlLlRva2VuPihOdWxsVmFsdWUuVG9rZW4pOwogIHN0YXRpYyBjb25zdCBWYWx1ZUtpbmQgVHlwZUFyZ3VtZW50c09yTnVsbCA9CiAgICAgIGNvbnN0IF9TaW5nbGVWYWx1ZUtpbmQ8TGlzdDx0eXBlLlVucmVzb2x2ZWRUeXBlPj4oCiAgICAgICAgICBOdWxsVmFsdWUuVHlwZUFyZ3VtZW50cyk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBUeXBlQnVpbGRlciA9CiAgICAgIGNvbnN0IF9TaW5nbGVWYWx1ZUtpbmQ8dHlwZS5UeXBlQnVpbGRlcj4oKTsKICBzdGF0aWMgY29uc3QgVmFsdWVLaW5kIFR5cGVCdWlsZGVyT3JOdWxsID0KICAgICAgY29uc3QgX1NpbmdsZVZhbHVlS2luZDx0eXBlLlR5cGVCdWlsZGVyPihOdWxsVmFsdWUuVHlwZSk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBUeXBlVmFyaWFibGVMaXN0T3JOdWxsID0KICAgICAgY29uc3QgX1NpbmdsZVZhbHVlS2luZDxMaXN0PHR5cGUuVHlwZVZhcmlhYmxlQnVpbGRlcj4+KAogICAgICAgICAgTnVsbFZhbHVlLlR5cGVWYXJpYWJsZXMpOwp9CgovLy8gQSBbVmFsdWVLaW5kXSBmb3IgYSBwYXJ0aWN1bGFyIHR5cGUgW1RdLCBvcHRpb25hbGx5IHdpdGggYSByZWNvZ25pemVkCi8vLyBbTnVsbFZhbHVlXS4KY2xhc3MgX1NpbmdsZVZhbHVlS2luZDxUPiBpbXBsZW1lbnRzIFZhbHVlS2luZCB7CiAgZmluYWwgTnVsbFZhbHVlIG51bGxWYWx1ZTsKCiAgY29uc3QgX1NpbmdsZVZhbHVlS2luZChbdGhpcy5udWxsVmFsdWVdKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjaGVjayhPYmplY3QgdmFsdWUpIHsKICAgIGlmIChudWxsVmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSA9PSBudWxsVmFsdWUpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gdmFsdWUgaXMgVDsKICB9CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGlmIChudWxsVmFsdWUgIT0gbnVsbCkgewogICAgICByZXR1cm4gJyRUIG9yICRudWxsVmFsdWUnOwogICAgfQogICAgcmV0dXJuICckVCc7CiAgfQp9CgovLy8gQSBbVmFsdWVLaW5kXSBmb3IgdGhlIHVuaW9uIG9mIGEgbGlzdCBvZiBbVmFsdWVLaW5kXXMuCmNsYXNzIF9VbmlvblZhbHVlS2luZCBpbXBsZW1lbnRzIFZhbHVlS2luZCB7CiAgZmluYWwgTGlzdDxWYWx1ZUtpbmQ+IGtpbmRzOwoKICBjb25zdCBfVW5pb25WYWx1ZUtpbmQodGhpcy5raW5kcyk7CgogIEBvdmVycmlkZQogIGJvb2wgY2hlY2soT2JqZWN0IHZhbHVlKSB7CiAgICBmb3IgKFZhbHVlS2luZCBraW5kIGluIGtpbmRzKSB7CiAgICAgIGlmIChraW5kLmNoZWNrKHZhbHVlKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBTdHJpbmcgb3IgPSAnJzsKICAgIGZvciAoVmFsdWVLaW5kIGtpbmQgaW4ga2luZHMpIHsKICAgICAgc2Iud3JpdGUob3IpOwogICAgICBzYi53cml0ZShraW5kKTsKICAgICAgb3IgPSAnIG9yICc7CiAgICB9CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCi8vLyBIZWxwZXIgbWV0aG9kIGZvciBjcmVhdGluZyBhIGxpc3Qgb2YgW1ZhbHVlS2luZF1zIG9mIHRoZSBnaXZlbiBsZW5ndGgKLy8vIFtjb3VudF0uCkxpc3Q8VmFsdWVLaW5kPiByZXBlYXRlZEtpbmRzKFZhbHVlS2luZCBraW5kLCBpbnQgY291bnQpIHsKICByZXR1cm4gbmV3IExpc3QuZ2VuZXJhdGUoY291bnQsIChfKSA9PiBraW5kKTsKfQoKLy8vIEhlbHBlciBtZXRob2QgZm9yIGNyZWF0aW5nIGEgdW5pb24gb2YgYSBsaXN0IG9mIFtWYWx1ZUtpbmRdcy4KVmFsdWVLaW5kIHVuaW9uT2ZLaW5kcyhMaXN0PFZhbHVlS2luZD4ga2luZHMpIHsKICByZXR1cm4gbmV3IF9VbmlvblZhbHVlS2luZChraW5kcyk7Cn0KgJYATk48ASoBKgE2ASMBIwEtASABMQEtASYBUCIEUR4bFQFRHAFPK0NRUSxFQiNDKUEnT1ElNStIQiY2Ki85PjA1Lk5NKjUqNSk0Ryc7LzkkJzItQDI+JAIBShExHQEsAQwdMxMGFwQBFh0hBhEEAgE7LR8BJQEMHSQfFQgGEgQBFioUJBQWEwYaBAIBSg07MAIBQjAlAgEzcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NvdXJjZS92YWx1ZV9raW5kcy5kYXJ0RnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS90eXBlX2luZmVyZW5jZS90eXBlX2luZmVycmVyLmRhcnTAAaD3Ly8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS5tZCBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF9zaGFkb3dfYXN0LmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBrZXJuZWw7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIEFyZ3VtZW50cywKICAgICAgICBBc0V4cHJlc3Npb24sCiAgICAgICAgQXN5bmNNYXJrZXIsCiAgICAgICAgQm90dG9tVHlwZSwKICAgICAgICBDbGFzcywKICAgICAgICBDb25kaXRpb25hbEV4cHJlc3Npb24sCiAgICAgICAgQ29uc3RydWN0b3JJbnZvY2F0aW9uLAogICAgICAgIERhcnRUeXBlLAogICAgICAgIER5bmFtaWNUeXBlLAogICAgICAgIEV4cHJlc3Npb24sCiAgICAgICAgRXh0ZW5zaW9uLAogICAgICAgIEZpZWxkLAogICAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbiwKICAgICAgICBGdW5jdGlvbk5vZGUsCiAgICAgICAgRnVuY3Rpb25UeXBlLAogICAgICAgIEluc3RhbnRpYXRpb24sCiAgICAgICAgSW50ZXJmYWNlVHlwZSwKICAgICAgICBJbnZhbGlkVHlwZSwKICAgICAgICBJbnZvY2F0aW9uRXhwcmVzc2lvbiwKICAgICAgICBMZXQsCiAgICAgICAgTGlzdExpdGVyYWwsCiAgICAgICAgTWFwTGl0ZXJhbCwKICAgICAgICBNZW1iZXIsCiAgICAgICAgTWV0aG9kSW52b2NhdGlvbiwKICAgICAgICBOYW1lLAogICAgICAgIE51bGxMaXRlcmFsLAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBQcm9jZWR1cmVLaW5kLAogICAgICAgIFByb3BlcnR5R2V0LAogICAgICAgIFByb3BlcnR5U2V0LAogICAgICAgIFJldHVyblN0YXRlbWVudCwKICAgICAgICBTZXRMaXRlcmFsLAogICAgICAgIFN0YXRlbWVudCwKICAgICAgICBTdGF0aWNHZXQsCiAgICAgICAgU3VwZXJNZXRob2RJbnZvY2F0aW9uLAogICAgICAgIFN1cGVyUHJvcGVydHlHZXQsCiAgICAgICAgU3VwZXJQcm9wZXJ0eVNldCwKICAgICAgICBTdXBlcnR5cGUsCiAgICAgICAgVGhpc0V4cHJlc3Npb24sCiAgICAgICAgVHJlZU5vZGUsCiAgICAgICAgVHlwZVBhcmFtZXRlciwKICAgICAgICBUeXBlUGFyYW1ldGVyVHlwZSwKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uLAogICAgICAgIFZhcmlhYmxlR2V0LAogICAgICAgIFZvaWRUeXBlLAogICAgICAgIHNldFBhcmVudHM7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBzaG93IENsYXNzSGllcmFyY2h5OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIHNob3cgQ29yZVR5cGVzOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2FsZ2VicmEuZGFydCcKICAgIHNob3cgRnJlc2hUeXBlUGFyYW1ldGVycywgZ2V0RnJlc2hUeXBlUGFyYW1ldGVycywgU3Vic3RpdHV0aW9uOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9zcmMvYm91bmRzX2NoZWNrcy5kYXJ0JyBzaG93IGNhbGN1bGF0ZUJvdW5kczsKCmltcG9ydCAnLi4vLi4vYmFzZS9pbnN0cnVtZW50YXRpb24uZGFydCcKICAgIHNob3cKICAgICAgICBJbnN0cnVtZW50YXRpb24sCiAgICAgICAgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JNZW1iZXIsCiAgICAgICAgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JUeXBlLAogICAgICAgIEluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZUFyZ3M7CgppbXBvcnQgJy4uL2J1aWxkZXIvZXh0ZW5zaW9uX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnLi4vYnVpbGRlci9tZW1iZXJfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi9idWlsZGVyL3Byb2NlZHVyZV9idWlsZGVyLmRhcnQnOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdwogICAgICAgIExvY2F0ZWRNZXNzYWdlLAogICAgICAgIE1lc3NhZ2UsCiAgICAgICAgVGVtcGxhdGUsCiAgICAgICAgbWVzc2FnZVJldHVybkZyb21Wb2lkRnVuY3Rpb24sCiAgICAgICAgbWVzc2FnZVJldHVybldpdGhvdXRFeHByZXNzaW9uLAogICAgICAgIG1lc3NhZ2VWb2lkRXhwcmVzc2lvbiwKICAgICAgICBub0xlbmd0aCwKICAgICAgICB0ZW1wbGF0ZUFyZ3VtZW50VHlwZU5vdEFzc2lnbmFibGUsCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkTmFtZWRBcmd1bWVudCwKICAgICAgICB0ZW1wbGF0ZUltcGxpY2l0Q2FsbE9mTm9uTWV0aG9kLAogICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtTm9JbmZlcnJlZFR5cGVTdG9yZWQsCiAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1TdG9yaW5nTXVsdGlwbGVJbmZlcnJlZFR5cGVzLAogICAgICAgIHRlbXBsYXRlSW52YWxpZEFzc2lnbm1lbnQsCiAgICAgICAgdGVtcGxhdGVJbnZhbGlkQ2FzdEZ1bmN0aW9uRXhwciwKICAgICAgICB0ZW1wbGF0ZUludmFsaWRDYXN0TGl0ZXJhbExpc3QsCiAgICAgICAgdGVtcGxhdGVJbnZhbGlkQ2FzdExpdGVyYWxNYXAsCiAgICAgICAgdGVtcGxhdGVJbnZhbGlkQ2FzdExpdGVyYWxTZXQsCiAgICAgICAgdGVtcGxhdGVJbnZhbGlkQ2FzdExvY2FsRnVuY3Rpb24sCiAgICAgICAgdGVtcGxhdGVJbnZhbGlkQ2FzdE5ld0V4cHIsCiAgICAgICAgdGVtcGxhdGVJbnZhbGlkQ2FzdFN0YXRpY01ldGhvZCwKICAgICAgICB0ZW1wbGF0ZUludmFsaWRDYXN0VG9wTGV2ZWxGdW5jdGlvbiwKICAgICAgICB0ZW1wbGF0ZUludm9rZU5vbkZ1bmN0aW9uLAogICAgICAgIHRlbXBsYXRlTWl4aW5JbmZlcmVuY2VOb01hdGNoaW5nQ2xhc3MsCiAgICAgICAgdGVtcGxhdGVVbmRlZmluZWRHZXR0ZXIsCiAgICAgICAgdGVtcGxhdGVVbmRlZmluZWRNZXRob2QsCiAgICAgICAgdGVtcGxhdGVVbmRlZmluZWRTZXR0ZXI7CgppbXBvcnQgJy4uL2tlcm5lbC9leHByZXNzaW9uX2dlbmVyYXRvci5kYXJ0JyBzaG93IGJ1aWxkSXNOdWxsOwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX3NoYWRvd19hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBFeHByZXNzaW9uSnVkZ21lbnQsCiAgICAgICAgU2hhZG93VHlwZUluZmVyZW5jZUVuZ2luZSwKICAgICAgICBTaGFkb3dUeXBlSW5mZXJyZXIsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50LAogICAgICAgIGdldEV4cGxpY2l0VHlwZUFyZ3VtZW50cywKICAgICAgICBnZXRFeHRlbnNpb25UeXBlUGFyYW1ldGVyQ291bnQ7CgppbXBvcnQgJy4uL2tlcm5lbC90eXBlX2FsZ29yaXRobXMuZGFydCcgc2hvdyBoYXNBbnlUeXBlVmFyaWFibGVzOwoKaW1wb3J0ICcuLi9uYW1lcy5kYXJ0JyBzaG93IGNhbGxOYW1lLCB1bmFyeU1pbnVzTmFtZTsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyBpbnRlcm5hbFByb2JsZW0sIHVuZXhwZWN0ZWQsIHVuaGFuZGxlZDsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnaW5mZXJlbmNlX2hlbHBlci5kYXJ0JyBzaG93IEluZmVyZW5jZUhlbHBlcjsKCmltcG9ydCAndHlwZV9jb25zdHJhaW50X2dhdGhlcmVyLmRhcnQnIHNob3cgVHlwZUNvbnN0cmFpbnRHYXRoZXJlcjsKCmltcG9ydCAndHlwZV9pbmZlcmVuY2VfZW5naW5lLmRhcnQnCiAgICBzaG93IEluY2x1ZGVzVHlwZVBhcmFtZXRlcnNOb25Db3ZhcmlhbnRseSwgVHlwZUluZmVyZW5jZUVuZ2luZSwgVmFyaWFuY2U7CgppbXBvcnQgJ3R5cGVfcHJvbW90aW9uLmRhcnQnIHNob3cgVHlwZVByb21vdGVyOwoKaW1wb3J0ICd0eXBlX3NjaGVtYS5kYXJ0JyBzaG93IGlzS25vd24sIFVua25vd25UeXBlOwoKaW1wb3J0ICd0eXBlX3NjaGVtYV9lbGltaW5hdGlvbi5kYXJ0JyBzaG93IGdyZWF0ZXN0Q2xvc3VyZTsKCmltcG9ydCAndHlwZV9zY2hlbWFfZW52aXJvbm1lbnQuZGFydCcKICAgIHNob3cKICAgICAgICBnZXROYW1lZFBhcmFtZXRlclR5cGUsCiAgICAgICAgZ2V0UG9zaXRpb25hbFBhcmFtZXRlclR5cGUsCiAgICAgICAgVHlwZUNvbnN0cmFpbnQsCiAgICAgICAgVHlwZVZhcmlhYmxlRWxpbWluYXRvciwKICAgICAgICBUeXBlU2NoZW1hRW52aXJvbm1lbnQ7CgovLy8gR2l2ZW4gYSBbRnVuY3Rpb25Ob2RlXSwgZ2V0cyB0aGUgbmFtZWQgcGFyYW1ldGVyIGlkZW50aWZpZWQgYnkgW25hbWVdLCBvcgovLy8gYG51bGxgIGlmIHRoZXJlIGlzIG5vIHBhcmFtZXRlciB3aXRoIHRoZSBnaXZlbiBuYW1lLgpWYXJpYWJsZURlY2xhcmF0aW9uIGdldE5hbWVkRm9ybWFsKEZ1bmN0aW9uTm9kZSBmdW5jdGlvbiwgU3RyaW5nIG5hbWUpIHsKICBmb3IgKFZhcmlhYmxlRGVjbGFyYXRpb24gZm9ybWFsIGluIGZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycykgewogICAgaWYgKGZvcm1hbC5uYW1lID09IG5hbWUpIHJldHVybiBmb3JtYWw7CiAgfQogIHJldHVybiBudWxsOwp9CgovLy8gR2l2ZW4gYSBbRnVuY3Rpb25Ob2RlXSwgZ2V0cyB0aGUgW2lddGggcG9zaXRpb25hbCBmb3JtYWwgcGFyYW1ldGVyLCBvcgovLy8gYG51bGxgIGlmIHRoZXJlIGlzIG5vIHBhcmFtZXRlciB3aXRoIHRoYXQgaW5kZXguClZhcmlhYmxlRGVjbGFyYXRpb24gZ2V0UG9zaXRpb25hbEZvcm1hbChGdW5jdGlvbk5vZGUgZnVuY3Rpb24sIGludCBpKSB7CiAgaWYgKGkgPCBmdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgIHJldHVybiBmdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXTsKICB9IGVsc2UgewogICAgcmV0dXJuIG51bGw7CiAgfQp9Cgpib29sIGlzT3ZlcmxvYWRhYmxlQXJpdGhtZXRpY09wZXJhdG9yKFN0cmluZyBuYW1lKSB7CiAgcmV0dXJuIGlkZW50aWNhbChuYW1lLCAnKycpIHx8CiAgICAgIGlkZW50aWNhbChuYW1lLCAnLScpIHx8CiAgICAgIGlkZW50aWNhbChuYW1lLCAnKicpIHx8CiAgICAgIGlkZW50aWNhbChuYW1lLCAnJScpOwp9CgovLy8gS2VlcHMgdHJhY2sgb2YgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGlubmVybW9zdCBmdW5jdGlvbiBvciBjbG9zdXJlIGJlaW5nCi8vLyBpbmZlcnJlZC4KY2xhc3MgQ2xvc3VyZUNvbnRleHQgewogIGZpbmFsIGJvb2wgaXNBc3luYzsKCiAgZmluYWwgYm9vbCBpc0dlbmVyYXRvcjsKCiAgLy8vIFRoZSB0eXBpbmcgZXhwZWN0YXRpb24gZm9yIHRoZSBzdWJleHByZXNzaW9uIG9mIGEgYHJldHVybmAgb3IgYHlpZWxkYAogIC8vLyBzdGF0ZW1lbnQgaW5zaWRlIHRoZSBmdW5jdGlvbi4KICAvLy8KICAvLy8gRm9yIG5vbi1nZW5lcmF0b3IgYXN5bmMgZnVuY3Rpb25zLCB0aGlzIHdpbGwgYmUgYSAiRnV0dXJlT3IiIHR5cGUgKHNpbmNlCiAgLy8vIGl0IGlzIHBlcm1pc3NpYmxlIGZvciBzdWNoIGEgZnVuY3Rpb24gdG8gcmV0dXJuIGVpdGhlciBhIGRpcmVjdCB2YWx1ZSBvcgogIC8vLyBhIGZ1dHVyZSkuCiAgLy8vCiAgLy8vIEZvciBnZW5lcmF0b3IgZnVuY3Rpb25zIGNvbnRhaW5pbmcgYSBgeWllbGQqYCBzdGF0ZW1lbnQsIHRoZSBleHBlY3RlZCB0eXBlCiAgLy8vIGZvciB0aGUgc3ViZXhwcmVzc2lvbiBvZiB0aGUgYHlpZWxkKmAgc3RhdGVtZW50IGlzIHRoZSByZXN1bHQgb2Ygd3JhcHBpbmcKICAvLy8gdGhpcyB0eXBpbmcgZXhwZWN0YXRpb24gaW4gYFN0cmVhbWAgb3IgYEl0ZXJhdG9yYCwgYXMgYXBwcm9wcmlhdGUuCiAgZmluYWwgRGFydFR5cGUgcmV0dXJuT3JZaWVsZENvbnRleHQ7CgogIGZpbmFsIERhcnRUeXBlIGRlY2xhcmVkUmV0dXJuVHlwZTsKCiAgZmluYWwgYm9vbCBfbmVlZFRvSW5mZXJSZXR1cm5UeXBlOwoKICAvLy8gVGhlIHR5cGUgdGhhdCBhY3R1YWxseSBhcHBlYXJlZCBhcyB0aGUgc3ViZXhwcmVzc2lvbiBvZiBgcmV0dXJuYCBvcgogIC8vLyBgeWllbGRgIHN0YXRlbWVudHMgaW5zaWRlIHRoZSBmdW5jdGlvbi4KICAvLy8KICAvLy8gRm9yIG5vbi1nZW5lcmF0b3IgYXN5bmMgZnVuY3Rpb25zLCB0aGlzIGlzIHRoZSAidW53cmFwcGVkIiB0eXBlIChlLmcuIGlmCiAgLy8vIHRoZSBmdW5jdGlvbiBpcyBleHBlY3RlZCB0byByZXR1cm4gYEZ1dHVyZTxpbnQ+YCwgdGhpcyBpcyBgaW50YCkuCiAgLy8vCiAgLy8vIEZvciBnZW5lcmF0b3IgZnVuY3Rpb25zIGNvbnRhaW5pbmcgYSBgeWllbGQqYCBzdGF0ZW1lbnQsIHRoZSB0eXBlIHRoYXQKICAvLy8gYXBwZWFyZWQgYXMgdGhlIHN1YmV4cHJlc3Npb24gb2YgdGhlIGB5aWVsZCpgIHN0YXRlbWVudCB3YXMgdGhlIHJlc3VsdCBvZgogIC8vLyB3cmFwcGluZyB0aGlzIHR5cGUgaW4gYFN0cmVhbWAgb3IgYEl0ZXJhdG9yYCwgYXMgYXBwcm9wcmlhdGUuCiAgRGFydFR5cGUgX2luZmVycmVkVW53cmFwcGVkUmV0dXJuT3JZaWVsZFR5cGU7CgogIC8vLyBXaGV0aGVyIHRoZSBmdW5jdGlvbiBpcyBhbiBhcnJvdyBmdW5jdGlvbi4KICBib29sIGlzQXJyb3c7CgogIC8vLyBBIGxpc3Qgb2YgcmV0dXJuIHN0YXRlbWVudHMgaW4gZnVuY3Rpb25zIHdob3NlIHJldHVybiB0eXBlIGlzIGJlaW5nCiAgLy8vIGluZmVycmVkLgogIC8vLwogIC8vLyBUaGUgcmV0dXJucyBhcmUgY2hlY2tlZCBmb3IgdmFsaWRpdHkgYWZ0ZXIgdGhlIHJldHVybiB0eXBlIGlzIGluZmVycmVkLgogIExpc3Q8UmV0dXJuU3RhdGVtZW50PiByZXR1cm5TdGF0ZW1lbnRzOwoKICAvLy8gQSBsaXN0IG9mIHJldHVybiBleHByZXNzaW9uIHR5cGVzIGluIGZ1bmN0aW9ucyB3aG9zZSByZXR1cm4gdHlwZSBpcwogIC8vLyBiZWluZyBpbmZlcnJlZC4KICBMaXN0PERhcnRUeXBlPiByZXR1cm5FeHByZXNzaW9uVHlwZXM7CgogIGZhY3RvcnkgQ2xvc3VyZUNvbnRleHQoVHlwZUluZmVycmVySW1wbCBpbmZlcnJlciwgQXN5bmNNYXJrZXIgYXN5bmNNYXJrZXIsCiAgICAgIERhcnRUeXBlIHJldHVybkNvbnRleHQsIGJvb2wgbmVlZFRvSW5mZXJSZXR1cm5UeXBlKSB7CiAgICBhc3NlcnQocmV0dXJuQ29udGV4dCAhPSBudWxsKTsKICAgIERhcnRUeXBlIGRlY2xhcmVkUmV0dXJuVHlwZSA9CiAgICAgICAgZ3JlYXRlc3RDbG9zdXJlKGluZmVycmVyLmNvcmVUeXBlcywgcmV0dXJuQ29udGV4dCk7CiAgICBib29sIGlzQXN5bmMgPSBhc3luY01hcmtlciA9PSBBc3luY01hcmtlci5Bc3luYyB8fAogICAgICAgIGFzeW5jTWFya2VyID09IEFzeW5jTWFya2VyLkFzeW5jU3RhcjsKICAgIGJvb2wgaXNHZW5lcmF0b3IgPSBhc3luY01hcmtlciA9PSBBc3luY01hcmtlci5TeW5jU3RhciB8fAogICAgICAgIGFzeW5jTWFya2VyID09IEFzeW5jTWFya2VyLkFzeW5jU3RhcjsKICAgIGlmIChpc0dlbmVyYXRvcikgewogICAgICBpZiAoaXNBc3luYykgewogICAgICAgIHJldHVybkNvbnRleHQgPSBpbmZlcnJlci5nZXRUeXBlQXJndW1lbnRPZigKICAgICAgICAgICAgcmV0dXJuQ29udGV4dCwgaW5mZXJyZXIuY29yZVR5cGVzLnN0cmVhbUNsYXNzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm5Db250ZXh0ID0gaW5mZXJyZXIuZ2V0VHlwZUFyZ3VtZW50T2YoCiAgICAgICAgICAgIHJldHVybkNvbnRleHQsIGluZmVycmVyLmNvcmVUeXBlcy5pdGVyYWJsZUNsYXNzKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChpc0FzeW5jKSB7CiAgICAgIHJldHVybkNvbnRleHQgPSBpbmZlcnJlci53cmFwRnV0dXJlT3JUeXBlKAogICAgICAgICAgaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50LnVuZnV0dXJlVHlwZShyZXR1cm5Db250ZXh0KSk7CiAgICB9CiAgICByZXR1cm4gbmV3IENsb3N1cmVDb250ZXh0Ll8oaXNBc3luYywgaXNHZW5lcmF0b3IsIHJldHVybkNvbnRleHQsCiAgICAgICAgZGVjbGFyZWRSZXR1cm5UeXBlLCBuZWVkVG9JbmZlclJldHVyblR5cGUpOwogIH0KCiAgQ2xvc3VyZUNvbnRleHQuXyh0aGlzLmlzQXN5bmMsIHRoaXMuaXNHZW5lcmF0b3IsIHRoaXMucmV0dXJuT3JZaWVsZENvbnRleHQsCiAgICAgIHRoaXMuZGVjbGFyZWRSZXR1cm5UeXBlLCB0aGlzLl9uZWVkVG9JbmZlclJldHVyblR5cGUpIHsKICAgIGlmIChfbmVlZFRvSW5mZXJSZXR1cm5UeXBlKSB7CiAgICAgIHJldHVyblN0YXRlbWVudHMgPSBbXTsKICAgICAgcmV0dXJuRXhwcmVzc2lvblR5cGVzID0gW107CiAgICB9CiAgfQoKICBib29sIGNoZWNrVmFsaWRSZXR1cm4oVHlwZUluZmVycmVySW1wbCBpbmZlcnJlciwgRGFydFR5cGUgcmV0dXJuVHlwZSwKICAgICAgUmV0dXJuU3RhdGVtZW50IHN0YXRlbWVudCwgRGFydFR5cGUgZXhwcmVzc2lvblR5cGUpIHsKICAgIC8vIFRoZSBydWxlcyBmb3IgdmFsaWQgcmV0dXJucyBmb3IgZnVuY3Rpb25zIHdpdGggcmV0dXJuIHR5cGUgVCBhbmQgcG9zc2libHkKICAgIC8vIGEgcmV0dXJuIGV4cHJlc3Npb24gd2l0aCBzdGF0aWMgdHlwZSBTLgogICAgRGFydFR5cGUgZmxhdHRlbmVkUmV0dXJuVHlwZSA9IGlzQXN5bmMKICAgICAgICA/IGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudC51bmZ1dHVyZVR5cGUocmV0dXJuVHlwZSkKICAgICAgICA6IHJldHVyblR5cGU7CiAgICBpZiAoc3RhdGVtZW50LmV4cHJlc3Npb24gPT0gbnVsbCkgewogICAgICAvLyBTeW5jOiByZXR1cm47IGlzIGEgdmFsaWQgcmV0dXJuIGlmIFQgaXMgdm9pZCwgZHluYW1pYywgb3IgTnVsbC4KICAgICAgLy8gQXN5bmM6IHJldHVybjsgaXMgYSB2YWxpZCByZXR1cm4gaWYgZmxhdHRlbihUKSBpcyB2b2lkLCBkeW5hbWljLCBvcgogICAgICAvLyBOdWxsLgogICAgICBpZiAoZmxhdHRlbmVkUmV0dXJuVHlwZSBpcyBWb2lkVHlwZSB8fAogICAgICAgICAgZmxhdHRlbmVkUmV0dXJuVHlwZSBpcyBEeW5hbWljVHlwZSB8fAogICAgICAgICAgZmxhdHRlbmVkUmV0dXJuVHlwZSA9PSBpbmZlcnJlci5jb3JlVHlwZXMubnVsbENsYXNzLnJhd1R5cGUpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA9IGluZmVycmVyLmhlbHBlci53cmFwSW5Qcm9ibGVtKAogICAgICAgICAgbmV3IE51bGxMaXRlcmFsKCkuLmZpbGVPZmZzZXQgPSBzdGF0ZW1lbnQuZmlsZU9mZnNldCwKICAgICAgICAgIG1lc3NhZ2VSZXR1cm5XaXRob3V0RXhwcmVzc2lvbiwKICAgICAgICAgIG5vTGVuZ3RoKQogICAgICAgIC4ucGFyZW50ID0gc3RhdGVtZW50OwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLy8gQXJyb3cgZnVuY3Rpb25zIGFyZSB2YWxpZCBpZjoKICAgIC8vIFN5bmM6IFQgaXMgdm9pZCBvciByZXR1cm4gZXhwOyBpcyBhIHZhbGlkIGZvciBhIGJsb2NrLWJvZGllZCBmdW5jdGlvbi4KICAgIC8vIEFzeW5jOiBmbGF0dGVuKFQpIGlzIHZvaWQgb3IgcmV0dXJuIGV4cDsgaXMgdmFsaWQgZm9yIGEgYmxvY2stYm9kaWVkCiAgICAvLyBmdW5jdGlvbi4KICAgIGlmIChpc0Fycm93ICYmIGZsYXR0ZW5lZFJldHVyblR5cGUgaXMgVm9pZFR5cGUpIHJldHVybiB0cnVlOwoKICAgIC8vIFN5bmM6IGludmFsaWQgaWYgVCBpcyB2b2lkIGFuZCBTIGlzIG5vdCB2b2lkLCBkeW5hbWljLCBvciBOdWxsCiAgICAvLyBBc3luYzogaW52YWxpZCBpZiBUIGlzIHZvaWQgYW5kIGZsYXR0ZW4oUykgaXMgbm90IHZvaWQsIGR5bmFtaWMsIG9yIE51bGwuCiAgICBEYXJ0VHlwZSBmbGF0dGVuZWRFeHByZXNzaW9uVHlwZSA9IGlzQXN5bmMKICAgICAgICA/IGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudC51bmZ1dHVyZVR5cGUoZXhwcmVzc2lvblR5cGUpCiAgICAgICAgOiBleHByZXNzaW9uVHlwZTsKICAgIGlmIChyZXR1cm5UeXBlIGlzIFZvaWRUeXBlICYmCiAgICAgICAgZmxhdHRlbmVkRXhwcmVzc2lvblR5cGUgaXMhIFZvaWRUeXBlICYmCiAgICAgICAgZmxhdHRlbmVkRXhwcmVzc2lvblR5cGUgaXMhIER5bmFtaWNUeXBlICYmCiAgICAgICAgZmxhdHRlbmVkRXhwcmVzc2lvblR5cGUgIT0gaW5mZXJyZXIuY29yZVR5cGVzLm51bGxDbGFzcy5yYXdUeXBlKSB7CiAgICAgIHN0YXRlbWVudC5leHByZXNzaW9uID0gaW5mZXJyZXIuaGVscGVyLndyYXBJblByb2JsZW0oCiAgICAgICAgICBzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgbWVzc2FnZVJldHVybkZyb21Wb2lkRnVuY3Rpb24sIG5vTGVuZ3RoKQogICAgICAgIC4ucGFyZW50ID0gc3RhdGVtZW50OwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLy8gU3luYzogaW52YWxpZCBpZiBTIGlzIHZvaWQgYW5kIFQgaXMgbm90IHZvaWQsIGR5bmFtaWMsIG9yIE51bGwuCiAgICAvLyBBc3luYzogaW52YWxpZCBpZiBmbGF0dGVuKFMpIGlzIHZvaWQgYW5kIGZsYXR0ZW4oVCkgaXMgbm90IHZvaWQsIGR5bmFtaWMsCiAgICAvLyBvciBOdWxsLgogICAgaWYgKGZsYXR0ZW5lZEV4cHJlc3Npb25UeXBlIGlzIFZvaWRUeXBlICYmCiAgICAgICAgZmxhdHRlbmVkUmV0dXJuVHlwZSBpcyEgVm9pZFR5cGUgJiYKICAgICAgICBmbGF0dGVuZWRSZXR1cm5UeXBlIGlzISBEeW5hbWljVHlwZSAmJgogICAgICAgIGZsYXR0ZW5lZFJldHVyblR5cGUgIT0gaW5mZXJyZXIuY29yZVR5cGVzLm51bGxDbGFzcy5yYXdUeXBlKSB7CiAgICAgIHN0YXRlbWVudC5leHByZXNzaW9uID0gaW5mZXJyZXIuaGVscGVyCiAgICAgICAgICAud3JhcEluUHJvYmxlbShzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgbWVzc2FnZVZvaWRFeHByZXNzaW9uLCBub0xlbmd0aCkKICAgICAgICAgICAgLi5wYXJlbnQgPSBzdGF0ZW1lbnQ7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvLyBUaGUgY2FsbGVyIHdpbGwgY2hlY2sgdGhhdCB0aGUgcmV0dXJuIGV4cHJlc3Npb24gaXMgYXNzaWduYWJsZSB0byB0aGUKICAgIC8vIHJldHVybiB0eXBlLgogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLy8gVXBkYXRlcyB0aGUgaW5mZXJyZWQgcmV0dXJuIHR5cGUgYmFzZWQgb24gdGhlIHByZXNlbmNlIG9mIGEgcmV0dXJuCiAgLy8vIHN0YXRlbWVudCByZXR1cm5pbmcgdGhlIGdpdmVuIFt0eXBlXS4KICB2b2lkIGhhbmRsZVJldHVybihUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyLCBSZXR1cm5TdGF0ZW1lbnQgc3RhdGVtZW50LAogICAgICBEYXJ0VHlwZSB0eXBlLCBib29sIGlzQXJyb3cpIHsKICAgIGlmIChpc0dlbmVyYXRvcikgcmV0dXJuOwogICAgLy8gVGhlIGZpcnN0IHJldHVybiB3ZSBzZWUgdGVsbHMgdXMgaWYgd2UgaGF2ZSBhbiBhcnJvdyBmdW5jdGlvbi4KICAgIGlmICh0aGlzLmlzQXJyb3cgPT0gbnVsbCkgewogICAgICB0aGlzLmlzQXJyb3cgPSBpc0Fycm93OwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KHRoaXMuaXNBcnJvdyA9PSBpc0Fycm93KTsKICAgIH0KCiAgICBpZiAoX25lZWRUb0luZmVyUmV0dXJuVHlwZSkgewogICAgICAvLyBBZGQgdGhlIHJldHVybiB0byBhIGxpc3QgdG8gYmUgY2hlY2tlZCBmb3IgdmFsaWRpdHkgYWZ0ZXIgd2UndmUKICAgICAgLy8gaW5mZXJyZWQgdGhlIHJldHVybiB0eXBlLgogICAgICByZXR1cm5TdGF0ZW1lbnRzLmFkZChzdGF0ZW1lbnQpOwogICAgICByZXR1cm5FeHByZXNzaW9uVHlwZXMuYWRkKHR5cGUpOwoKICAgICAgLy8gVGhlIHJldHVybiBleHByZXNzaW9uIGhhcyB0byBiZSBhc3NpZ25hYmxlIHRvIHRoZSByZXR1cm4gdHlwZQogICAgICAvLyBleHBlY3RhdGlvbiBmcm9tIHRoZSBkb3dud2FyZHMgaW5mZXJlbmNlIGNvbnRleHQuCiAgICAgIGlmIChzdGF0ZW1lbnQuZXhwcmVzc2lvbiAhPSBudWxsICYmCiAgICAgICAgICBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKHJldHVybk9yWWllbGRDb250ZXh0LCB0eXBlLAogICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgc3RhdGVtZW50LmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgICAgIGlzUmV0dXJuRnJvbUFzeW5jOiBpc0FzeW5jLCBpc1ZvaWRBbGxvd2VkOiB0cnVlKSAhPQogICAgICAgICAgICAgIG51bGwpIHsKICAgICAgICAvLyBOb3QgYXNzaWduYWJsZSwgdXNlIHRoZSBleHBlY3RhdGlvbi4KICAgICAgICB0eXBlID0gZ3JlYXRlc3RDbG9zdXJlKGluZmVycmVyLmNvcmVUeXBlcywgcmV0dXJuT3JZaWVsZENvbnRleHQpOwogICAgICB9CiAgICAgIERhcnRUeXBlIHVud3JhcHBlZFR5cGUgPSB0eXBlOwogICAgICBpZiAoaXNBc3luYykgewogICAgICAgIHVud3JhcHBlZFR5cGUgPSBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQudW5mdXR1cmVUeXBlKHR5cGUpOwogICAgICB9CiAgICAgIGlmIChfaW5mZXJyZWRVbndyYXBwZWRSZXR1cm5PcllpZWxkVHlwZSA9PSBudWxsKSB7CiAgICAgICAgX2luZmVycmVkVW53cmFwcGVkUmV0dXJuT3JZaWVsZFR5cGUgPSB1bndyYXBwZWRUeXBlOwogICAgICB9IGVsc2UgewogICAgICAgIF9pbmZlcnJlZFVud3JhcHBlZFJldHVybk9yWWllbGRUeXBlID0gaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50CiAgICAgICAgICAgIC5nZXRTdGFuZGFyZFVwcGVyQm91bmQoCiAgICAgICAgICAgICAgICBfaW5mZXJyZWRVbndyYXBwZWRSZXR1cm5PcllpZWxkVHlwZSwgdW53cmFwcGVkVHlwZSk7CiAgICAgIH0KICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIElmIHdlIGFyZSBub3QgaW5mZXJyaW5nIGEgdHlwZSB3ZSBjYW4gaW1tZWRpYXRlbHkgY2hlY2sgdGhhdCB0aGUgcmV0dXJuCiAgICAvLyBpcyB2YWxpZC4KICAgIGlmIChjaGVja1ZhbGlkUmV0dXJuKGluZmVycmVyLCBkZWNsYXJlZFJldHVyblR5cGUsIHN0YXRlbWVudCwgdHlwZSkgJiYKICAgICAgICBzdGF0ZW1lbnQuZXhwcmVzc2lvbiAhPSBudWxsKSB7CiAgICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUocmV0dXJuT3JZaWVsZENvbnRleHQsIHR5cGUsCiAgICAgICAgICBzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgc3RhdGVtZW50LmZpbGVPZmZzZXQsCiAgICAgICAgICBpc1JldHVybkZyb21Bc3luYzogaXNBc3luYywgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICB9CiAgfQoKICB2b2lkIGhhbmRsZVlpZWxkKFR5cGVJbmZlcnJlckltcGwgaW5mZXJyZXIsIGJvb2wgaXNZaWVsZFN0YXIsIERhcnRUeXBlIHR5cGUsCiAgICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiwgaW50IGZpbGVPZmZzZXQpIHsKICAgIGlmICghaXNHZW5lcmF0b3IpIHJldHVybjsKICAgIERhcnRUeXBlIGV4cGVjdGVkVHlwZSA9IGlzWWllbGRTdGFyCiAgICAgICAgPyBfd3JhcEFzeW5jT3JHZW5lcmF0b3IoaW5mZXJyZXIsIHJldHVybk9yWWllbGRDb250ZXh0KQogICAgICAgIDogcmV0dXJuT3JZaWVsZENvbnRleHQ7CiAgICBpZiAoaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZShleHBlY3RlZFR5cGUsIHR5cGUsIGV4cHJlc3Npb24sIGZpbGVPZmZzZXQsCiAgICAgICAgICAgIGlzUmV0dXJuRnJvbUFzeW5jOiBpc0FzeW5jKSAhPQogICAgICAgIG51bGwpIHsKICAgICAgdHlwZSA9IGdyZWF0ZXN0Q2xvc3VyZShpbmZlcnJlci5jb3JlVHlwZXMsIGV4cGVjdGVkVHlwZSk7CiAgICB9CiAgICBpZiAoX25lZWRUb0luZmVyUmV0dXJuVHlwZSkgewogICAgICBEYXJ0VHlwZSB1bndyYXBwZWRUeXBlID0gdHlwZTsKICAgICAgaWYgKGlzWWllbGRTdGFyKSB7CiAgICAgICAgdW53cmFwcGVkVHlwZSA9IGluZmVycmVyLmdldERlcml2ZWRUeXBlQXJndW1lbnRPZigKICAgICAgICAgICAgICAgIHR5cGUsCiAgICAgICAgICAgICAgICBpc0FzeW5jCiAgICAgICAgICAgICAgICAgICAgPyBpbmZlcnJlci5jb3JlVHlwZXMuc3RyZWFtQ2xhc3MKICAgICAgICAgICAgICAgICAgICA6IGluZmVycmVyLmNvcmVUeXBlcy5pdGVyYWJsZUNsYXNzKSA/PwogICAgICAgICAgICB0eXBlOwogICAgICB9CiAgICAgIGlmIChfaW5mZXJyZWRVbndyYXBwZWRSZXR1cm5PcllpZWxkVHlwZSA9PSBudWxsKSB7CiAgICAgICAgX2luZmVycmVkVW53cmFwcGVkUmV0dXJuT3JZaWVsZFR5cGUgPSB1bndyYXBwZWRUeXBlOwogICAgICB9IGVsc2UgewogICAgICAgIF9pbmZlcnJlZFVud3JhcHBlZFJldHVybk9yWWllbGRUeXBlID0gaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50CiAgICAgICAgICAgIC5nZXRTdGFuZGFyZFVwcGVyQm91bmQoCiAgICAgICAgICAgICAgICBfaW5mZXJyZWRVbndyYXBwZWRSZXR1cm5PcllpZWxkVHlwZSwgdW53cmFwcGVkVHlwZSk7CiAgICAgIH0KICAgIH0KICB9CgogIERhcnRUeXBlIGluZmVyUmV0dXJuVHlwZShUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyKSB7CiAgICBhc3NlcnQoX25lZWRUb0luZmVyUmV0dXJuVHlwZSk7CiAgICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGUgPQogICAgICAgIGluZmVycmVyLmluZmVyUmV0dXJuVHlwZShfaW5mZXJyZWRVbndyYXBwZWRSZXR1cm5PcllpZWxkVHlwZSk7CiAgICBpZiAoIWluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudAogICAgICAgIC5pc1N1YnR5cGVPZihpbmZlcnJlZFR5cGUsIHJldHVybk9yWWllbGRDb250ZXh0KSkgewogICAgICAvLyBJZiB0aGUgaW5mZXJyZWQgcmV0dXJuIHR5cGUgaXNuJ3QgYSBzdWJ0eXBlIG9mIHRoZSBjb250ZXh0LCB3ZSB1c2UgdGhlCiAgICAgIC8vIGNvbnRleHQuCiAgICAgIGluZmVycmVkVHlwZSA9IGdyZWF0ZXN0Q2xvc3VyZShpbmZlcnJlci5jb3JlVHlwZXMsIHJldHVybk9yWWllbGRDb250ZXh0KTsKICAgIH0KCiAgICBpbmZlcnJlZFR5cGUgPSBfd3JhcEFzeW5jT3JHZW5lcmF0b3IoaW5mZXJyZXIsIGluZmVycmVkVHlwZSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHJldHVyblN0YXRlbWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgY2hlY2tWYWxpZFJldHVybihpbmZlcnJlciwgaW5mZXJyZWRUeXBlLCByZXR1cm5TdGF0ZW1lbnRzW2ldLAogICAgICAgICAgcmV0dXJuRXhwcmVzc2lvblR5cGVzW2ldKTsKICAgIH0KCiAgICByZXR1cm4gaW5mZXJyZWRUeXBlOwogIH0KCiAgRGFydFR5cGUgX3dyYXBBc3luY09yR2VuZXJhdG9yKFR5cGVJbmZlcnJlckltcGwgaW5mZXJyZXIsIERhcnRUeXBlIHR5cGUpIHsKICAgIGlmIChpc0dlbmVyYXRvcikgewogICAgICBpZiAoaXNBc3luYykgewogICAgICAgIHJldHVybiBpbmZlcnJlci53cmFwVHlwZSh0eXBlLCBpbmZlcnJlci5jb3JlVHlwZXMuc3RyZWFtQ2xhc3MpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBpbmZlcnJlci53cmFwVHlwZSh0eXBlLCBpbmZlcnJlci5jb3JlVHlwZXMuaXRlcmFibGVDbGFzcyk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoaXNBc3luYykgewogICAgICByZXR1cm4gaW5mZXJyZXIud3JhcEZ1dHVyZVR5cGUodHlwZSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gdHlwZTsKICAgIH0KICB9Cn0KCi8vLyBFbnVtIGRlbm90aW5nIHRoZSBraW5kcyBvZiBjb250cmF2YXJpYW5jZSBjaGVjayB0aGF0IG1pZ2h0IG5lZWQgdG8gYmUKLy8vIGluc2VydGVkIGZvciBhIG1ldGhvZCBjYWxsLgplbnVtIE1ldGhvZENvbnRyYXZhcmlhbmNlQ2hlY2tLaW5kIHsKICAvLy8gTm8gY29udHJhdmFyaWFuY2UgY2hlY2sgaXMgbmVlZGVkLgogIG5vbmUsCgogIC8vLyBUaGUgcmV0dXJuIHZhbHVlIGZyb20gdGhlIG1ldGhvZCBjYWxsIG5lZWRzIHRvIGJlIGNoZWNrZWQuCiAgY2hlY2tNZXRob2RSZXR1cm4sCgogIC8vLyBUaGUgbWV0aG9kIGNhbGwgbmVlZHMgdG8gYmUgZGVzdWdhcmVkIGludG8gYSBnZXR0ZXIgY2FsbCwgZm9sbG93ZWQgYnkgYW4KICAvLy8gImFzIiBjaGVjaywgZm9sbG93ZWQgYnkgYW4gaW52b2NhdGlvbiBvZiB0aGUgcmVzdWx0aW5nIGZ1bmN0aW9uIG9iamVjdC4KICBjaGVja0dldHRlclJldHVybiwKfQoKLy8vIEtlZXBzIHRyYWNrIG9mIHRoZSBsb2NhbCBzdGF0ZSBmb3IgdGhlIHR5cGUgaW5mZXJlbmNlIHRoYXQgb2NjdXJzIGR1cmluZwovLy8gY29tcGlsYXRpb24gb2YgYSBzaW5nbGUgbWV0aG9kIGJvZHkgb3IgdG9wIGxldmVsIGluaXRpYWxpemVyLgovLy8KLy8vIFRoaXMgY2xhc3MgZGVzY3JpYmVzIHRoZSBpbnRlcmZhY2UgZm9yIHVzZSBieSBjbGllbnRzIG9mIHR5cGUgaW5mZXJlbmNlCi8vLyAoZS5nLiBCb2R5QnVpbGRlcikuICBEZXJpdmVkIGNsYXNzZXMgc2hvdWxkIGRlcml2ZSBmcm9tIFtUeXBlSW5mZXJyZXJJbXBsXS4KYWJzdHJhY3QgY2xhc3MgVHlwZUluZmVycmVyIHsKICBmaW5hbCBDb3JlVHlwZXMgY29yZVR5cGVzOwoKICBUeXBlSW5mZXJyZXIucHJpdmF0ZSh0aGlzLmNvcmVUeXBlcyk7CgogIGZhY3RvcnkgVHlwZUluZmVycmVyKAogICAgICBTaGFkb3dUeXBlSW5mZXJlbmNlRW5naW5lIGVuZ2luZSwKICAgICAgVXJpIHVyaSwKICAgICAgYm9vbCB0b3BMZXZlbCwKICAgICAgSW50ZXJmYWNlVHlwZSB0aGlzVHlwZSwKICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgPSBTaGFkb3dUeXBlSW5mZXJyZXIucHJpdmF0ZTsKCiAgU291cmNlTGlicmFyeUJ1aWxkZXIgZ2V0IGxpYnJhcnk7CgogIC8vLyBHZXRzIHRoZSBbVHlwZVByb21vdGVyXSB0aGF0IGNhbiBiZSB1c2VkIHRvIHBlcmZvcm0gdHlwZSBwcm9tb3Rpb24gd2l0aGluCiAgLy8vIHRoaXMgbWV0aG9kIGJvZHkgb3IgaW5pdGlhbGl6ZXIuCiAgVHlwZVByb21vdGVyIGdldCB0eXBlUHJvbW90ZXI7CgogIC8vLyBHZXRzIHRoZSBbVHlwZVNjaGVtYUVudmlyb25tZW50XSBiZWluZyB1c2VkIGZvciB0eXBlIGluZmVyZW5jZS4KICBUeXBlU2NoZW1hRW52aXJvbm1lbnQgZ2V0IHR5cGVTY2hlbWFFbnZpcm9ubWVudDsKCiAgLy8vIFRoZSBVUkkgb2YgdGhlIGNvZGUgZm9yIHdoaWNoIHR5cGUgaW5mZXJlbmNlIGlzIGN1cnJlbnRseSBiZWluZwogIC8vLyBwZXJmb3JtZWQtLXRoaXMgaXMgdXNlZCBmb3IgdGVzdGluZy4KICBVcmkgZ2V0IHVyaTsKCiAgLy8vIFBlcmZvcm1zIGZ1bGwgdHlwZSBpbmZlcmVuY2Ugb24gdGhlIGdpdmVuIGZpZWxkIGluaXRpYWxpemVyLgogIHZvaWQgaW5mZXJGaWVsZEluaXRpYWxpemVyKEluZmVyZW5jZUhlbHBlciBoZWxwZXIsIERhcnRUeXBlIGRlY2xhcmVkVHlwZSwKICAgICAga2VybmVsLkV4cHJlc3Npb24gaW5pdGlhbGl6ZXIpOwoKICAvLy8gUGVyZm9ybXMgdHlwZSBpbmZlcmVuY2Ugb24gdGhlIGdpdmVuIGZ1bmN0aW9uIGJvZHkuCiAgdm9pZCBpbmZlckZ1bmN0aW9uQm9keShJbmZlcmVuY2VIZWxwZXIgaGVscGVyLCBEYXJ0VHlwZSByZXR1cm5UeXBlLAogICAgICBBc3luY01hcmtlciBhc3luY01hcmtlciwgU3RhdGVtZW50IGJvZHkpOwoKICAvLy8gUGVyZm9ybXMgdHlwZSBpbmZlcmVuY2Ugb24gdGhlIGdpdmVuIGNvbnN0cnVjdG9yIGluaXRpYWxpemVyLgogIHZvaWQgaW5mZXJJbml0aWFsaXplcihJbmZlcmVuY2VIZWxwZXIgaGVscGVyLCBrZXJuZWwuSW5pdGlhbGl6ZXIgaW5pdGlhbGl6ZXIpOwoKICAvLy8gUGVyZm9ybXMgdHlwZSBpbmZlcmVuY2Ugb24gdGhlIGdpdmVuIG1ldGFkYXRhIGFubm90YXRpb25zLgogIHZvaWQgaW5mZXJNZXRhZGF0YSgKICAgICAgSW5mZXJlbmNlSGVscGVyIGhlbHBlciwgTGlzdDxrZXJuZWwuRXhwcmVzc2lvbj4gYW5ub3RhdGlvbnMpOwoKICAvLy8gUGVyZm9ybXMgdHlwZSBpbmZlcmVuY2Ugb24gdGhlIGdpdmVuIG1ldGFkYXRhIGFubm90YXRpb25zIGtlZXBpbmcgdGhlCiAgLy8vIGV4aXN0aW5nIGhlbHBlciBpZiBwb3NzaWJsZS4KICB2b2lkIGluZmVyTWV0YWRhdGFLZWVwaW5nSGVscGVyKExpc3Q8a2VybmVsLkV4cHJlc3Npb24+IGFubm90YXRpb25zKTsKCiAgLy8vIFBlcmZvcm1zIHR5cGUgaW5mZXJlbmNlIG9uIHRoZSBnaXZlbiBmdW5jdGlvbiBwYXJhbWV0ZXIgaW5pdGlhbGl6ZXIKICAvLy8gZXhwcmVzc2lvbi4KICB2b2lkIGluZmVyUGFyYW1ldGVySW5pdGlhbGl6ZXIoSW5mZXJlbmNlSGVscGVyIGhlbHBlciwKICAgICAga2VybmVsLkV4cHJlc3Npb24gaW5pdGlhbGl6ZXIsIERhcnRUeXBlIGRlY2xhcmVkVHlwZSk7Cn0KCi8vLyBEZXJpdmVkIGNsYXNzIGNvbnRhaW5pbmcgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbnMgb2YgW1R5cGVJbmZlcnJlcl0uCi8vLwovLy8gVGhpcyBjbGFzcyBjb250YWlucyBhcyBtdWNoIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0eXBlIGluZmVyZW5jZSBhcwovLy8gcG9zc2libGUgd2l0aG91dCBrbm93aW5nIHRoZSBpZGVudGl0eSBvZiB0aGUgdHlwZSBwYXJhbWV0ZXJzLiAgSXQgZGVmZXJzIHRvCi8vLyBhYnN0cmFjdCBtZXRob2RzIGZvciBldmVyeXRoaW5nIGVsc2UuCmFic3RyYWN0IGNsYXNzIFR5cGVJbmZlcnJlckltcGwgZXh0ZW5kcyBUeXBlSW5mZXJyZXIgewogIC8vLyBNYXJrZXIgb2JqZWN0IHRvIGluZGljYXRlIHRoYXQgYSBmdW5jdGlvbiB0YWtlcyBhbiB1bmtub3duIG51bWJlcgogIC8vLyBvZiBhcmd1bWVudHMuCiAgc3RhdGljIGZpbmFsIEZ1bmN0aW9uVHlwZSB1bmtub3duRnVuY3Rpb24gPQogICAgICBuZXcgRnVuY3Rpb25UeXBlKGNvbnN0IFtdLCBjb25zdCBEeW5hbWljVHlwZSgpKTsKCiAgZmluYWwgVHlwZUluZmVyZW5jZUVuZ2luZSBlbmdpbmU7CgogIEBvdmVycmlkZQogIGZpbmFsIFVyaSB1cmk7CgogIC8vLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29uc3RydWN0IHdlIGFyZSBjdXJyZW50bHkgcGVyZm9ybWluZyBpbmZlcmVuY2UgZm9yCiAgLy8vIGlzIG91dHNpZGUgb2YgYSBtZXRob2QgYm9keSwgYW5kIGhlbmNlIHRvcCBsZXZlbCB0eXBlIGluZmVyZW5jZSBydWxlcwogIC8vLyBzaG91bGQgYXBwbHkuCiAgZmluYWwgYm9vbCBpc1RvcExldmVsOwoKICBmaW5hbCBDbGFzc0hpZXJhcmNoeSBjbGFzc0hpZXJhcmNoeTsKCiAgZmluYWwgSW5zdHJ1bWVudGF0aW9uIGluc3RydW1lbnRhdGlvbjsKCiAgZmluYWwgVHlwZVNjaGVtYUVudmlyb25tZW50IHR5cGVTY2hlbWFFbnZpcm9ubWVudDsKCiAgZmluYWwgSW50ZXJmYWNlVHlwZSB0aGlzVHlwZTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeTsKCiAgZmluYWwgTWFwPFRyZWVOb2RlLCBEYXJ0VHlwZT4gaW5mZXJyZWRUeXBlc01hcCA9IDxUcmVlTm9kZSwgRGFydFR5cGU+e307CgogIEluZmVyZW5jZUhlbHBlciBoZWxwZXI7CgogIC8vLyBDb250ZXh0IGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBjbG9zdXJlLCBvciBgbnVsbGAgaWYgd2UgYXJlIG5vdAogIC8vLyBpbnNpZGUgYSBjbG9zdXJlLgogIENsb3N1cmVDb250ZXh0IGNsb3N1cmVDb250ZXh0OwoKICAvLy8gVGhlIFtTdWJzdGl0dXRpb25dIGluZmVycmVkIGJ5IHRoZSBsYXN0IFtpbmZlckludm9jYXRpb25dLCBvciBgbnVsbGAgaWYKICAvLy8gdGhlIGxhc3QgaW52b2NhdGlvbiBkaWRuJ3QgcmVxdWlyZSBhbnkgaW5mZXJlbmNlLgogIFN1YnN0aXR1dGlvbiBsYXN0SW5mZXJyZWRTdWJzdGl0dXRpb247CgogIC8vLyBUaGUgW0Z1bmN0aW9uVHlwZV0gb2YgdGhlIGNhbGxlZSBpbiB0aGUgbGFzdCBbaW5mZXJJbnZvY2F0aW9uXSwgb3IgYG51bGxgCiAgLy8vIGlmIHRoZSBsYXN0IGludm9jYXRpb24gZGlkbid0IHJlcXVpcmUgYW55IGluZmVyZW5jZS4KICBGdW5jdGlvblR5cGUgbGFzdENhbGxlZVR5cGU7CgogIFR5cGVJbmZlcnJlckltcGwucHJpdmF0ZSgKICAgICAgdGhpcy5lbmdpbmUsIHRoaXMudXJpLCBib29sIHRvcExldmVsLCB0aGlzLnRoaXNUeXBlLCB0aGlzLmxpYnJhcnkpCiAgICAgIDogYXNzZXJ0KGxpYnJhcnkgIT0gbnVsbCksCiAgICAgICAgY2xhc3NIaWVyYXJjaHkgPSBlbmdpbmUuY2xhc3NIaWVyYXJjaHksCiAgICAgICAgaW5zdHJ1bWVudGF0aW9uID0gdG9wTGV2ZWwgPyBudWxsIDogZW5naW5lLmluc3RydW1lbnRhdGlvbiwKICAgICAgICB0eXBlU2NoZW1hRW52aXJvbm1lbnQgPSBlbmdpbmUudHlwZVNjaGVtYUVudmlyb25tZW50LAogICAgICAgIGlzVG9wTGV2ZWwgPSB0b3BMZXZlbCwKICAgICAgICBzdXBlci5wcml2YXRlKGVuZ2luZS5jb3JlVHlwZXMpOwoKICBEYXJ0VHlwZSBzdG9yZUluZmVycmVkVHlwZShUcmVlTm9kZSBub2RlLCBEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAobm9kZSBpcyBFeHByZXNzaW9uSnVkZ21lbnQpIHsKICAgICAgcmV0dXJuIG5vZGUuaW5mZXJyZWRUeXBlID0gdHlwZTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChpbmZlcnJlZFR5cGVzTWFwLmNvbnRhaW5zS2V5KG5vZGUpKSB7CiAgICAgICAgaW50ZXJuYWxQcm9ibGVtKAogICAgICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVN0b3JpbmdNdWx0aXBsZUluZmVycmVkVHlwZXMud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgIGluZmVycmVkVHlwZXNNYXBbbm9kZV0sICIke25vZGUucnVudGltZVR5cGV9IiksCiAgICAgICAgICAgIG5vZGUuZmlsZU9mZnNldCwKICAgICAgICAgICAgdXJpKTsKICAgICAgfQogICAgICByZXR1cm4gaW5mZXJyZWRUeXBlc01hcFtub2RlXSA9IHR5cGU7CiAgICB9CiAgfQoKICBEYXJ0VHlwZSByZWFkSW5mZXJyZWRUeXBlKFRyZWVOb2RlIG5vZGUpIHsKICAgIGlmICghaW5mZXJyZWRUeXBlc01hcC5jb250YWluc0tleShub2RlKSAmJiAhaXNUb3BMZXZlbCkgewogICAgICBpbnRlcm5hbFByb2JsZW0oCiAgICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbU5vSW5mZXJyZWRUeXBlU3RvcmVkCiAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoIiR7bm9kZS5ydW50aW1lVHlwZX0iKSwKICAgICAgICAgIG5vZGUuZmlsZU9mZnNldCwKICAgICAgICAgIHVyaSk7CiAgICB9CiAgICByZXR1cm4gaW5mZXJyZWRUeXBlc01hcFtub2RlXTsKICB9CgogIC8vLyBHZXRzIHRoZSB0eXBlIHByb21vdGVyIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gcHJvbW90ZSB0eXBlcyBkdXJpbmcKICAvLy8gaW5mZXJlbmNlLgogIFR5cGVQcm9tb3RlciBnZXQgdHlwZVByb21vdGVyOwoKICBib29sIGlzRG91YmxlQ29udGV4dChEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgLy8gQSBjb250ZXh0IGlzIGEgZG91YmxlIGNvbnRleHQgaWYgZG91YmxlIGlzIGFzc2lnbmFibGUgdG8gaXQgYnV0IGludCBpcwogICAgLy8gbm90LiAgVGhhdCBpcyB0aGUgdHlwZSBjb250ZXh0IGlzIGEgZG91YmxlIGNvbnRleHQgaWYgaXQgaXM6CiAgICAvLyAgICogZG91YmxlCiAgICAvLyAgICogRnV0dXJlT3I8VD4gd2hlcmUgVCBpcyBhIGRvdWJsZSBjb250ZXh0CiAgICAvLwogICAgLy8gV2UgY2hlY2sgZGlyZWN0bHksIHJhdGhlciB0aGFuIHVzaW5nIGlzQXNzaWduYWJsZSBiZWNhdXNlIGl0J3Mgc2ltcGxlci4KICAgIHdoaWxlICh0eXBlQ29udGV4dCBpcyBJbnRlcmZhY2VUeXBlICYmCiAgICAgICAgdHlwZUNvbnRleHQuY2xhc3NOb2RlID09IGNvcmVUeXBlcy5mdXR1cmVPckNsYXNzICYmCiAgICAgICAgdHlwZUNvbnRleHQudHlwZUFyZ3VtZW50cy5pc05vdEVtcHR5KSB7CiAgICAgIEludGVyZmFjZVR5cGUgdHlwZSA9IHR5cGVDb250ZXh0OwogICAgICB0eXBlQ29udGV4dCA9IHR5cGUudHlwZUFyZ3VtZW50cy5maXJzdDsKICAgIH0KICAgIHJldHVybiB0eXBlQ29udGV4dCA9PSBjb3JlVHlwZXMuZG91YmxlQ2xhc3MucmF3VHlwZTsKICB9CgogIGJvb2wgaXNBc3NpZ25hYmxlKERhcnRUeXBlIGV4cGVjdGVkVHlwZSwgRGFydFR5cGUgYWN0dWFsVHlwZSkgewogICAgcmV0dXJuIHR5cGVTY2hlbWFFbnZpcm9ubWVudC5pc1N1YnR5cGVPZihleHBlY3RlZFR5cGUsIGFjdHVhbFR5cGUpIHx8CiAgICAgICAgdHlwZVNjaGVtYUVudmlyb25tZW50LmlzU3VidHlwZU9mKGFjdHVhbFR5cGUsIGV4cGVjdGVkVHlwZSk7CiAgfQoKICAvLy8gQ2hlY2tzIHdoZXRoZXIgW2FjdHVhbFR5cGVdIGNhbiBiZSBhc3NpZ25lZCB0byB0aGUgZ3JlYXRlc3QgY2xvc3VyZSBvZgogIC8vLyBbZXhwZWN0ZWRUeXBlXSwgYW5kIGluc2VydHMgYW4gaW1wbGljaXQgZG93bmNhc3QgaWYgYXBwcm9wcmlhdGUuCiAgRXhwcmVzc2lvbiBlbnN1cmVBc3NpZ25hYmxlKERhcnRUeXBlIGV4cGVjdGVkVHlwZSwgRGFydFR5cGUgYWN0dWFsVHlwZSwKICAgICAgRXhwcmVzc2lvbiBleHByZXNzaW9uLCBpbnQgZmlsZU9mZnNldCwKICAgICAge2Jvb2wgaXNSZXR1cm5Gcm9tQXN5bmM6IGZhbHNlLAogICAgICBib29sIGlzVm9pZEFsbG93ZWQ6IGZhbHNlLAogICAgICBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlLCBEYXJ0VHlwZSk+IHRlbXBsYXRlfSkgewogICAgYXNzZXJ0KGV4cGVjdGVkVHlwZSAhPSBudWxsKTsKICAgIGV4cGVjdGVkVHlwZSA9IGdyZWF0ZXN0Q2xvc3VyZShjb3JlVHlwZXMsIGV4cGVjdGVkVHlwZSk7CgogICAgRGFydFR5cGUgaW5pdGlhbEV4cGVjdGVkVHlwZSA9IGV4cGVjdGVkVHlwZTsKICAgIGlmIChpc1JldHVybkZyb21Bc3luYyAmJiAhaXNBc3NpZ25hYmxlKGV4cGVjdGVkVHlwZSwgYWN0dWFsVHlwZSkpIHsKICAgICAgLy8gSWYgdGhlIGJvZHkgb2YgdGhlIGZ1bmN0aW9uIGlzIGFzeW5jLCB0aGUgZXhwZWN0ZWQgcmV0dXJuIHR5cGUgaGFzIHRoZQogICAgICAvLyBzaGFwZSBGdXR1cmVPcjxUPi4gIFdlIGNoZWNrIGJvdGggYnJhbmNoZXMgZm9yIEZ1dHVyZU9yIGhlcmU6IGJvdGggVAogICAgICAvLyBhbmQgRnV0dXJlPFQ+LgogICAgICBEYXJ0VHlwZSB1bmZ1dHVyZWRFeHBlY3RlZFR5cGUgPQogICAgICAgICAgdHlwZVNjaGVtYUVudmlyb25tZW50LnVuZnV0dXJlVHlwZShleHBlY3RlZFR5cGUpOwogICAgICBEYXJ0VHlwZSBmdXR1cmVkRXhwZWN0ZWRUeXBlID0gd3JhcEZ1dHVyZVR5cGUodW5mdXR1cmVkRXhwZWN0ZWRUeXBlKTsKICAgICAgaWYgKGlzQXNzaWduYWJsZSh1bmZ1dHVyZWRFeHBlY3RlZFR5cGUsIGFjdHVhbFR5cGUpKSB7CiAgICAgICAgZXhwZWN0ZWRUeXBlID0gdW5mdXR1cmVkRXhwZWN0ZWRUeXBlOwogICAgICB9IGVsc2UgaWYgKGlzQXNzaWduYWJsZShmdXR1cmVkRXhwZWN0ZWRUeXBlLCBhY3R1YWxUeXBlKSkgewogICAgICAgIGV4cGVjdGVkVHlwZSA9IGZ1dHVyZWRFeHBlY3RlZFR5cGU7CiAgICAgIH0KICAgIH0KCiAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGluc2VydCBhc3NpZ25hYmlsaXR5IGNoZWNrcyB3aGVuIGRvaW5nIHRvcCBsZXZlbCB0eXBlCiAgICAvLyBpbmZlcmVuY2Ugc2luY2UgdG9wIGxldmVsIHR5cGUgaW5mZXJlbmNlIG9ubHkgY2FyZXMgYWJvdXQgdGhlIHR5cGUgdGhhdAogICAgLy8gaXMgaW5mZXJyZWQgKHRoZSBrZXJuZWwgY29kZSBpcyBkaXNjYXJkZWQpLgogICAgaWYgKGlzVG9wTGV2ZWwpIHJldHVybiBudWxsOwoKICAgIC8vIElmIGFuIGludGVyZmFjZSB0eXBlIGlzIGJlaW5nIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gdHlwZSwgc2VlIGlmIHdlCiAgICAvLyBzaG91bGQgdGVhciBvZmYgYC5jYWxsYC4KICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogdXNlIHJlc29sdmVUeXBlUGFyYW1ldGVyLiAgU2VlIGZpbmRJbnRlcmZhY2VNZW1iZXIuCiAgICBpZiAoYWN0dWFsVHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgIENsYXNzIGNsYXNzTm9kZSA9IChhY3R1YWxUeXBlIGFzIEludGVyZmFjZVR5cGUpLmNsYXNzTm9kZTsKICAgICAgTWVtYmVyIGNhbGxNZW1iZXIgPQogICAgICAgICAgY2xhc3NIaWVyYXJjaHkuZ2V0SW50ZXJmYWNlTWVtYmVyKGNsYXNzTm9kZSwgY2FsbE5hbWUpOwogICAgICBpZiAoY2FsbE1lbWJlciBpcyBQcm9jZWR1cmUgJiYgY2FsbE1lbWJlci5raW5kID09IFByb2NlZHVyZUtpbmQuTWV0aG9kKSB7CiAgICAgICAgaWYgKF9zaG91bGRUZWFyT2ZmQ2FsbChleHBlY3RlZFR5cGUsIGFjdHVhbFR5cGUpKSB7CiAgICAgICAgICAvLyBSZXBsYWNlIGV4cHJlc3Npb24gd2l0aDoKICAgICAgICAgIC8vIGBsZXQgdCA9IGV4cHJlc3Npb24gaW4gdCA9PSBudWxsID8gbnVsbCA6IHQuY2FsbGAKICAgICAgICAgIFRyZWVOb2RlIHBhcmVudCA9IGV4cHJlc3Npb24ucGFyZW50OwogICAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiB0ID0KICAgICAgICAgICAgICBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZShleHByZXNzaW9uLCB0eXBlOiBhY3R1YWxUeXBlKQogICAgICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKICAgICAgICAgIEV4cHJlc3Npb24gbnVsbENoZWNrID0KICAgICAgICAgICAgICBidWlsZElzTnVsbChuZXcgVmFyaWFibGVHZXQodCksIGZpbGVPZmZzZXQsIGhlbHBlcik7CiAgICAgICAgICBQcm9wZXJ0eUdldCB0ZWFyT2ZmID0KICAgICAgICAgICAgICBuZXcgUHJvcGVydHlHZXQobmV3IFZhcmlhYmxlR2V0KHQpLCBjYWxsTmFtZSwgY2FsbE1lbWJlcikKICAgICAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICAgICAgICBhY3R1YWxUeXBlID0gZ2V0R2V0dGVyVHlwZUZvck1lbWJlclRhcmdldChjYWxsTWVtYmVyLCBhY3R1YWxUeXBlKTsKICAgICAgICAgIENvbmRpdGlvbmFsRXhwcmVzc2lvbiBjb25kaXRpb25hbCA9IG5ldyBDb25kaXRpb25hbEV4cHJlc3Npb24oCiAgICAgICAgICAgICAgbnVsbENoZWNrLAogICAgICAgICAgICAgIG5ldyBOdWxsTGl0ZXJhbCgpLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldCwKICAgICAgICAgICAgICB0ZWFyT2ZmLAogICAgICAgICAgICAgIGFjdHVhbFR5cGUpOwogICAgICAgICAgTGV0IGxldCA9IG5ldyBMZXQodCwgY29uZGl0aW9uYWwpLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKICAgICAgICAgIHBhcmVudD8ucmVwbGFjZUNoaWxkKGV4cHJlc3Npb24sIGxldCk7CiAgICAgICAgICBleHByZXNzaW9uID0gbGV0OwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGlmIChhY3R1YWxUeXBlIGlzIFZvaWRUeXBlICYmICFpc1ZvaWRBbGxvd2VkKSB7CiAgICAgIC8vIEVycm9yOiBub3QgYXNzaWduYWJsZS4gIFBlcmZvcm0gZXJyb3IgcmVjb3ZlcnkuCiAgICAgIFRyZWVOb2RlIHBhcmVudCA9IGV4cHJlc3Npb24ucGFyZW50OwogICAgICBFeHByZXNzaW9uIGVycm9yTm9kZSA9CiAgICAgICAgICBoZWxwZXIud3JhcEluUHJvYmxlbShleHByZXNzaW9uLCBtZXNzYWdlVm9pZEV4cHJlc3Npb24sIG5vTGVuZ3RoKTsKICAgICAgcGFyZW50Py5yZXBsYWNlQ2hpbGQoZXhwcmVzc2lvbiwgZXJyb3JOb2RlKTsKICAgICAgcmV0dXJuIGVycm9yTm9kZTsKICAgIH0KCiAgICBpZiAoZXhwZWN0ZWRUeXBlID09IG51bGwgfHwKICAgICAgICB0eXBlU2NoZW1hRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YoYWN0dWFsVHlwZSwgZXhwZWN0ZWRUeXBlKSkgewogICAgICAvLyBUeXBlcyBhcmUgY29tcGF0aWJsZS4KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgaWYgKCF0eXBlU2NoZW1hRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YoZXhwZWN0ZWRUeXBlLCBhY3R1YWxUeXBlKSkgewogICAgICAvLyBFcnJvcjogbm90IGFzc2lnbmFibGUuICBQZXJmb3JtIGVycm9yIHJlY292ZXJ5LgogICAgICBUcmVlTm9kZSBwYXJlbnQgPSBleHByZXNzaW9uLnBhcmVudDsKICAgICAgRXhwcmVzc2lvbiBlcnJvck5vZGUgPSBuZXcgQXNFeHByZXNzaW9uKAogICAgICAgICAgZXhwcmVzc2lvbiwKICAgICAgICAgIC8vIFRPRE8oYWhlKTogVGhlIG91dGxpbmUgcGhhc2UgZG9lc24ndCBjb3JyZWN0bHkgcmVtb3ZlIGludmFsaWQKICAgICAgICAgIC8vIHVzZXMgb2YgdHlwZSB2YXJpYWJsZXMsIGZvciBleGFtcGxlLCBvbiBzdGF0aWMgbWVtYmVycy4gT25jZQogICAgICAgICAgLy8gdGhhdCBoYXMgYmVlbiBmaXhlZCwgd2Ugc2hvdWxkIGFsd2F5cyBiZSBhYmxlIHRvIHVzZQogICAgICAgICAgLy8gW2V4cGVjdGVkVHlwZV0gZGlyZWN0bHkgaGVyZS4KICAgICAgICAgIGhhc0FueVR5cGVWYXJpYWJsZXMoZXhwZWN0ZWRUeXBlKSA/IGNvbnN0IEJvdHRvbVR5cGUoKSA6IGV4cGVjdGVkVHlwZSkKICAgICAgICAuLmlzVHlwZUVycm9yID0gdHJ1ZQogICAgICAgIC4uZmlsZU9mZnNldCA9IGV4cHJlc3Npb24uZmlsZU9mZnNldDsKICAgICAgaWYgKGV4cGVjdGVkVHlwZSBpcyEgSW52YWxpZFR5cGUgJiYgYWN0dWFsVHlwZSBpcyEgSW52YWxpZFR5cGUpIHsKICAgICAgICBlcnJvck5vZGUgPSBoZWxwZXIud3JhcEluUHJvYmxlbSgKICAgICAgICAgICAgZXJyb3JOb2RlLAogICAgICAgICAgICAodGVtcGxhdGUgPz8gdGVtcGxhdGVJbnZhbGlkQXNzaWdubWVudCkKICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGFjdHVhbFR5cGUsIGV4cGVjdGVkVHlwZSksCiAgICAgICAgICAgIG5vTGVuZ3RoKTsKICAgICAgfQogICAgICBwYXJlbnQ/LnJlcGxhY2VDaGlsZChleHByZXNzaW9uLCBlcnJvck5vZGUpOwogICAgICByZXR1cm4gZXJyb3JOb2RlOwogICAgfSBlbHNlIHsKICAgICAgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSwgRGFydFR5cGUpPiB0ZW1wbGF0ZSA9CiAgICAgICAgICBfZ2V0UHJlY2lzZVR5cGVFcnJvclRlbXBsYXRlKGV4cHJlc3Npb24pOwogICAgICBpZiAodGVtcGxhdGUgIT0gbnVsbCkgewogICAgICAgIC8vIFRoZSB0eXBlIG9mIHRoZSBleHByZXNzaW9uIGlzIGtub3duIHByZWNpc2VseSwgc28gYW4gaW1wbGljaXQKICAgICAgICAvLyBkb3duY2FzdCBpcyBndWFyYW50ZWVkIHRvIGZhaWwuICBJbnNlcnQgYSBjb21waWxlLXRpbWUgZXJyb3IuCiAgICAgICAgVHJlZU5vZGUgcGFyZW50ID0gZXhwcmVzc2lvbi5wYXJlbnQ7CiAgICAgICAgRXhwcmVzc2lvbiBlcnJvck5vZGUgPSBoZWxwZXIud3JhcEluUHJvYmxlbShleHByZXNzaW9uLAogICAgICAgICAgICB0ZW1wbGF0ZS53aXRoQXJndW1lbnRzKGFjdHVhbFR5cGUsIGV4cGVjdGVkVHlwZSksIG5vTGVuZ3RoKTsKICAgICAgICBwYXJlbnQ/LnJlcGxhY2VDaGlsZChleHByZXNzaW9uLCBlcnJvck5vZGUpOwogICAgICAgIHJldHVybiBlcnJvck5vZGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gSW5zZXJ0IGFuIGltcGxpY2l0IGRvd25jYXN0LgogICAgICAgIFRyZWVOb2RlIHBhcmVudCA9IGV4cHJlc3Npb24ucGFyZW50OwogICAgICAgIEFzRXhwcmVzc2lvbiB0eXBlQ2hlY2sgPQogICAgICAgICAgICBuZXcgQXNFeHByZXNzaW9uKGV4cHJlc3Npb24sIGluaXRpYWxFeHBlY3RlZFR5cGUpCiAgICAgICAgICAgICAgLi5pc1R5cGVFcnJvciA9IHRydWUKICAgICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0OwogICAgICAgIHBhcmVudD8ucmVwbGFjZUNoaWxkKGV4cHJlc3Npb24sIHR5cGVDaGVjayk7CiAgICAgICAgcmV0dXJuIHR5cGVDaGVjazsKICAgICAgfQogICAgfQogIH0KCiAgYm9vbCBpc051bGwoRGFydFR5cGUgdHlwZSkgewogICAgcmV0dXJuIHR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJiB0eXBlLmNsYXNzTm9kZSA9PSBjb3JlVHlwZXMubnVsbENsYXNzOwogIH0KCiAgTGlzdDxEYXJ0VHlwZT4gX2luZmVyRXh0ZW5zaW9uVHlwZUFyZ3VtZW50cygKICAgICAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycywKICAgICAgRGFydFR5cGUgb25UeXBlLAogICAgICBEYXJ0VHlwZSByZWNlaXZlclR5cGUpIHsKICAgIExpc3Q8RGFydFR5cGU+IGluZmVycmVkVHlwZXMgPQogICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQodHlwZVBhcmFtZXRlcnMubGVuZ3RoLCBjb25zdCBVbmtub3duVHlwZSgpKTsKICAgIHR5cGVTY2hlbWFFbnZpcm9ubWVudC5pbmZlckdlbmVyaWNGdW5jdGlvbk9yVHlwZSgKICAgICAgICBudWxsLCB0eXBlUGFyYW1ldGVycywgW29uVHlwZV0sIFtyZWNlaXZlclR5cGVdLCBudWxsLCBpbmZlcnJlZFR5cGVzKTsKICAgIHJldHVybiBpbmZlcnJlZFR5cGVzOwogIH0KCiAgLy8vIEZpbmRzIGEgbWVtYmVyIG9mIFtyZWNlaXZlclR5cGVdIGNhbGxlZCBbbmFtZV0sIGFuZCBpZiBpdCBpcyBmb3VuZCwKICAvLy8gcmVwb3J0cyBpdCB0aHJvdWdoIGluc3RydW1lbnRhdGlvbiB1c2luZyBbZmlsZU9mZnNldF0uCiAgLy8vCiAgLy8vIEZvciB0aGUgY2FzZSB3aGVyZSBbcmVjZWl2ZXJUeXBlXSBpcyBhIFtGdW5jdGlvblR5cGVdLCBhbmQgdGhlIG5hbWUKICAvLy8gaXMgYGNhbGxgLCB0aGUgc3RyaW5nICdjYWxsJyBpcyByZXR1cm5lZCBhcyBhIHNlbnRpbmVsIG9iamVjdC4KICAvLy8KICAvLy8gRm9yIHRoZSBjYXNlIHdoZXJlIFtyZWNlaXZlclR5cGVdIGlzIGBkeW5hbWljYCwgYW5kIHRoZSBuYW1lIGlzIGRlY2xhcmVkCiAgLy8vIGluIE9iamVjdCwgdGhlIG1lbWJlciBmcm9tIE9iamVjdCBpcyByZXR1cm5lZCB0aG91Z2ggdGhlIGNhbGwgbWF5IG5vdCBlbmQKICAvLy8gdXAgdGFyZ2V0aW5nIGl0IGlmIHRoZSBhcmd1bWVudHMgZG8gbm90IG1hdGNoICh0aGUgYmFzaWMgcHJpbmNpcGxlIGlzIHRoYXQKICAvLy8gdGhlIE9iamVjdCBtZW1iZXIgaXMgdXNlZCBmb3IgaW5mZXJyaW5nIHR5cGVzIG9ubHkgaWYgbm9TdWNoTWV0aG9kIGNhbm5vdAogIC8vLyBiZSB0YXJnZXRlZCBkdWUgdG8sIGUuZy4sIGFuIGluY29ycmVjdCBhcmd1bWVudCBjb3VudCkuCiAgT2JqZWN0QWNjZXNzVGFyZ2V0IGZpbmRJbnRlcmZhY2VNZW1iZXIoCiAgICAgIERhcnRUeXBlIHJlY2VpdmVyVHlwZSwgTmFtZSBuYW1lLCBpbnQgZmlsZU9mZnNldCwKICAgICAge1RlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nLCBEYXJ0VHlwZSk+IGVycm9yVGVtcGxhdGUsCiAgICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiwKICAgICAgRXhwcmVzc2lvbiByZWNlaXZlciwKICAgICAgYm9vbCBzZXR0ZXI6IGZhbHNlLAogICAgICBib29sIGluc3RydW1lbnRlZDogdHJ1ZSwKICAgICAgYm9vbCBpbmNsdWRlRXh0ZW5zaW9uTWV0aG9kczogZmFsc2V9KSB7CiAgICBhc3NlcnQocmVjZWl2ZXJUeXBlICE9IG51bGwgJiYgaXNLbm93bihyZWNlaXZlclR5cGUpKTsKCiAgICByZWNlaXZlclR5cGUgPSByZXNvbHZlVHlwZVBhcmFtZXRlcihyZWNlaXZlclR5cGUpOwoKICAgIGlmIChyZWNlaXZlclR5cGUgaXMgRnVuY3Rpb25UeXBlICYmIG5hbWUubmFtZSA9PSAnY2FsbCcpIHsKICAgICAgcmV0dXJuIGNvbnN0IE9iamVjdEFjY2Vzc1RhcmdldC5jYWxsRnVuY3Rpb24oKTsKICAgIH0KCiAgICBDbGFzcyBjbGFzc05vZGUgPSByZWNlaXZlclR5cGUgaXMgSW50ZXJmYWNlVHlwZQogICAgICAgID8gcmVjZWl2ZXJUeXBlLmNsYXNzTm9kZQogICAgICAgIDogY29yZVR5cGVzLm9iamVjdENsYXNzOwogICAgTWVtYmVyIGludGVyZmFjZU1lbWJlciA9CiAgICAgICAgX2dldEludGVyZmFjZU1lbWJlcihjbGFzc05vZGUsIG5hbWUsIHNldHRlciwgZmlsZU9mZnNldCk7CiAgICBPYmplY3RBY2Nlc3NUYXJnZXQgdGFyZ2V0ID0gaW50ZXJmYWNlTWVtYmVyICE9IG51bGwKICAgICAgICA/IG5ldyBPYmplY3RBY2Nlc3NUYXJnZXQuaW50ZXJmYWNlTWVtYmVyKGludGVyZmFjZU1lbWJlcikKICAgICAgICA6IGNvbnN0IE9iamVjdEFjY2Vzc1RhcmdldC51bnJlc29sdmVkKCk7CiAgICBpZiAoaW5zdHJ1bWVudGVkICYmCiAgICAgICAgcmVjZWl2ZXJUeXBlICE9IGNvbnN0IER5bmFtaWNUeXBlKCkgJiYKICAgICAgICB0YXJnZXQuaXNJbnN0YW5jZU1lbWJlcikgewogICAgICBpbnN0cnVtZW50YXRpb24/LnJlY29yZCh1cmksIGZpbGVPZmZzZXQsICd0YXJnZXQnLAogICAgICAgICAgbmV3IEluc3RydW1lbnRhdGlvblZhbHVlRm9yTWVtYmVyKHRhcmdldC5tZW1iZXIpKTsKICAgIH0KCiAgICBpZiAodGFyZ2V0LmlzVW5yZXNvbHZlZCAmJiBpbmNsdWRlRXh0ZW5zaW9uTWV0aG9kcykgewogICAgICBFeHRlbnNpb25BY2Nlc3NDYW5kaWRhdGUgYmVzdFNvRmFyOwogICAgICBMaXN0PEV4dGVuc2lvbkFjY2Vzc0NhbmRpZGF0ZT4gbm9uZU1vcmVTcGVjaWZpYyA9IFtdOwogICAgICBsaWJyYXJ5LnNjb3BlLmZvckVhY2hFeHRlbnNpb24oKEV4dGVuc2lvbkJ1aWxkZXIgZXh0ZW5zaW9uQnVpbGRlcikgewogICAgICAgIE1lbWJlckJ1aWxkZXIgbWVtYmVyQnVpbGRlciA9CiAgICAgICAgICAgIGV4dGVuc2lvbkJ1aWxkZXIubG9va3VwTG9jYWxNZW1iZXIobmFtZS5uYW1lLCBzZXR0ZXI6IHNldHRlcik7CiAgICAgICAgaWYgKG1lbWJlckJ1aWxkZXIgIT0gbnVsbCAmJiAhbWVtYmVyQnVpbGRlci5pc1N0YXRpYykgewogICAgICAgICAgUHJvY2VkdXJlQnVpbGRlciBwcm9jZWR1cmVCdWlsZGVyID0gbWVtYmVyQnVpbGRlcjsKICAgICAgICAgIGlmIChwcm9jZWR1cmVCdWlsZGVyICE9IG51bGwpIHsKICAgICAgICAgICAgRXh0ZW5zaW9uIGV4dGVuc2lvbiA9IGV4dGVuc2lvbkJ1aWxkZXIuZXh0ZW5zaW9uOwogICAgICAgICAgICBEYXJ0VHlwZSBvblR5cGU7CiAgICAgICAgICAgIERhcnRUeXBlIG9uVHlwZUluc3RhbnRpYXRlVG9Cb3VuZHM7CiAgICAgICAgICAgIExpc3Q8RGFydFR5cGU+IGluZmVycmVkVHlwZUFyZ3VtZW50czsKICAgICAgICAgICAgaWYgKGV4dGVuc2lvbkJ1aWxkZXIuZXh0ZW5zaW9uLnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkpIHsKICAgICAgICAgICAgICBvblR5cGVJbnN0YW50aWF0ZVRvQm91bmRzID0KICAgICAgICAgICAgICAgICAgb25UeXBlID0gZXh0ZW5zaW9uQnVpbGRlci5leHRlbnNpb24ub25UeXBlOwogICAgICAgICAgICAgIGluZmVycmVkVHlwZUFyZ3VtZW50cyA9IGNvbnN0IDxEYXJ0VHlwZT5bXTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzID0KICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uQnVpbGRlci5leHRlbnNpb24udHlwZVBhcmFtZXRlcnM7CiAgICAgICAgICAgICAgaW5mZXJyZWRUeXBlQXJndW1lbnRzID0gX2luZmVyRXh0ZW5zaW9uVHlwZUFyZ3VtZW50cygKICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uQnVpbGRlci5leHRlbnNpb24udHlwZVBhcmFtZXRlcnMsCiAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbkJ1aWxkZXIuZXh0ZW5zaW9uLm9uVHlwZSwKICAgICAgICAgICAgICAgICAgcmVjZWl2ZXJUeXBlKTsKICAgICAgICAgICAgICBTdWJzdGl0dXRpb24gaW5mZXJyZWRTdWJzdGl0dXRpb24gPQogICAgICAgICAgICAgICAgICBTdWJzdGl0dXRpb24uZnJvbVBhaXJzKHR5cGVQYXJhbWV0ZXJzLCBpbmZlcnJlZFR5cGVBcmd1bWVudHMpOwoKICAgICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgdHlwZVBhcmFtZXRlcnMubGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgICAgICAgICAgICBUeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIgPSB0eXBlUGFyYW1ldGVyc1tpbmRleF07CiAgICAgICAgICAgICAgICBEYXJ0VHlwZSB0eXBlQXJndW1lbnQgPSBpbmZlcnJlZFR5cGVBcmd1bWVudHNbaW5kZXhdOwogICAgICAgICAgICAgICAgRGFydFR5cGUgYm91bmQgPQogICAgICAgICAgICAgICAgICAgIGluZmVycmVkU3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKHR5cGVQYXJhbWV0ZXIuYm91bmQpOwogICAgICAgICAgICAgICAgaWYgKCF0eXBlU2NoZW1hRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YodHlwZUFyZ3VtZW50LCBib3VuZCkpIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBvblR5cGUgPSBpbmZlcnJlZFN1YnN0aXR1dGlvbgogICAgICAgICAgICAgICAgICAuc3Vic3RpdHV0ZVR5cGUoZXh0ZW5zaW9uQnVpbGRlci5leHRlbnNpb24ub25UeXBlKTsKICAgICAgICAgICAgICBMaXN0PERhcnRUeXBlPiBpbnN0YW50aWF0ZVRvQm91bmRUeXBlQXJndW1lbnRzID0KICAgICAgICAgICAgICAgICAgY2FsY3VsYXRlQm91bmRzKHR5cGVQYXJhbWV0ZXJzLCBjb3JlVHlwZXMub2JqZWN0Q2xhc3MpOwogICAgICAgICAgICAgIFN1YnN0aXR1dGlvbiBpbnN0YW50aWF0ZVRvQm91bmRzU3Vic3RpdHV0aW9uID0KICAgICAgICAgICAgICAgICAgU3Vic3RpdHV0aW9uLmZyb21QYWlycygKICAgICAgICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzLCBpbnN0YW50aWF0ZVRvQm91bmRUeXBlQXJndW1lbnRzKTsKICAgICAgICAgICAgICBvblR5cGVJbnN0YW50aWF0ZVRvQm91bmRzID0gaW5zdGFudGlhdGVUb0JvdW5kc1N1YnN0aXR1dGlvbgogICAgICAgICAgICAgICAgICAuc3Vic3RpdHV0ZVR5cGUoZXh0ZW5zaW9uQnVpbGRlci5leHRlbnNpb24ub25UeXBlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHR5cGVTY2hlbWFFbnZpcm9ubWVudC5pc1N1YnR5cGVPZihyZWNlaXZlclR5cGUsIG9uVHlwZSkpIHsKICAgICAgICAgICAgICBFeHRlbnNpb25BY2Nlc3NDYW5kaWRhdGUgY2FuZGlkYXRlID0gbmV3IEV4dGVuc2lvbkFjY2Vzc0NhbmRpZGF0ZSgKICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uLAogICAgICAgICAgICAgICAgICBvblR5cGUsCiAgICAgICAgICAgICAgICAgIG9uVHlwZUluc3RhbnRpYXRlVG9Cb3VuZHMsCiAgICAgICAgICAgICAgICAgIG5ldyBPYmplY3RBY2Nlc3NUYXJnZXQuZXh0ZW5zaW9uTWVtYmVyKAogICAgICAgICAgICAgICAgICAgICAgcHJvY2VkdXJlQnVpbGRlci5wcm9jZWR1cmUsCiAgICAgICAgICAgICAgICAgICAgICBwcm9jZWR1cmVCdWlsZGVyLmV4dGVuc2lvblRlYXJPZmYsCiAgICAgICAgICAgICAgICAgICAgICBwcm9jZWR1cmVCdWlsZGVyLmtpbmQsCiAgICAgICAgICAgICAgICAgICAgICBpbmZlcnJlZFR5cGVBcmd1bWVudHMpKTsKICAgICAgICAgICAgICBpZiAobm9uZU1vcmVTcGVjaWZpYy5pc05vdEVtcHR5KSB7CiAgICAgICAgICAgICAgICBib29sIGlzTW9zdFNwZWNpZmljID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGZvciAoRXh0ZW5zaW9uQWNjZXNzQ2FuZGlkYXRlIG90aGVyIGluIG5vbmVNb3JlU3BlY2lmaWMpIHsKICAgICAgICAgICAgICAgICAgYm9vbCBpc01vcmVTcGVjaWZpYyA9IGNhbmRpZGF0ZS5pc01vcmVTcGVjaWZpY1RoYW4oCiAgICAgICAgICAgICAgICAgICAgICB0eXBlU2NoZW1hRW52aXJvbm1lbnQsIG90aGVyKTsKICAgICAgICAgICAgICAgICAgaWYgKGlzTW9yZVNwZWNpZmljICE9IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICBpc01vc3RTcGVjaWZpYyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaXNNb3N0U3BlY2lmaWMpIHsKICAgICAgICAgICAgICAgICAgYmVzdFNvRmFyID0gY2FuZGlkYXRlOwogICAgICAgICAgICAgICAgICBub25lTW9yZVNwZWNpZmljLmNsZWFyKCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBub25lTW9yZVNwZWNpZmljLmFkZChjYW5kaWRhdGUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gZWxzZSBpZiAoYmVzdFNvRmFyID09IG51bGwpIHsKICAgICAgICAgICAgICAgIGJlc3RTb0ZhciA9IGNhbmRpZGF0ZTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgYm9vbCBpc01vcmVTcGVjaWZpYyA9IGNhbmRpZGF0ZS5pc01vcmVTcGVjaWZpY1RoYW4oCiAgICAgICAgICAgICAgICAgICAgdHlwZVNjaGVtYUVudmlyb25tZW50LCBiZXN0U29GYXIpOwogICAgICAgICAgICAgICAgaWYgKGlzTW9yZVNwZWNpZmljID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgYmVzdFNvRmFyID0gY2FuZGlkYXRlOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc01vcmVTcGVjaWZpYyA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgIG5vbmVNb3JlU3BlY2lmaWMuYWRkKGJlc3RTb0Zhcik7CiAgICAgICAgICAgICAgICAgIG5vbmVNb3JlU3BlY2lmaWMuYWRkKGNhbmRpZGF0ZSk7CiAgICAgICAgICAgICAgICAgIGJlc3RTb0ZhciA9IG51bGw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgICAgaWYgKGJlc3RTb0ZhciAhPSBudWxsKSB7CiAgICAgICAgdGFyZ2V0ID0gYmVzdFNvRmFyLnRhcmdldDsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZXBvcnQgYSBiZXR0ZXIgZXJyb3IgbWVzc2FnZSB3aGVuIG1vcmUgdGhhbgogICAgICAgIC8vIG9uZSBwb3RlbnRpYWwgdGFyZ2V0cyB3ZXJlIGZvdW5kLgogICAgICB9CiAgICB9CgogICAgaWYgKCFpc1RvcExldmVsICYmCiAgICAgICAgdGFyZ2V0LmlzVW5yZXNvbHZlZCAmJgogICAgICAgIHJlY2VpdmVyVHlwZSBpcyEgRHluYW1pY1R5cGUgJiYKICAgICAgICByZWNlaXZlclR5cGUgaXMhIEludmFsaWRUeXBlICYmCiAgICAgICAgIShyZWNlaXZlclR5cGUgPT0gY29yZVR5cGVzLmZ1bmN0aW9uQ2xhc3MucmF3VHlwZSAmJgogICAgICAgICAgICBuYW1lLm5hbWUgPT0gJ2NhbGwnKSAmJgogICAgICAgIGVycm9yVGVtcGxhdGUgIT0gbnVsbCkgewogICAgICBpbnQgbGVuZ3RoID0gbmFtZS5uYW1lLmxlbmd0aDsKICAgICAgaWYgKGlkZW50aWNhbChuYW1lLm5hbWUsIGNhbGxOYW1lLm5hbWUpIHx8CiAgICAgICAgICBpZGVudGljYWwobmFtZS5uYW1lLCB1bmFyeU1pbnVzTmFtZS5uYW1lKSkgewogICAgICAgIGxlbmd0aCA9IDE7CiAgICAgIH0KICAgICAgZXhwcmVzc2lvbi5wYXJlbnQucmVwbGFjZUNoaWxkKAogICAgICAgICAgZXhwcmVzc2lvbiwKICAgICAgICAgIGhlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihoZWxwZXIuYnVpbGRQcm9ibGVtKAogICAgICAgICAgICAgIGVycm9yVGVtcGxhdGUud2l0aEFyZ3VtZW50cyhuYW1lLm5hbWUsIHJlY2VpdmVyVHlwZSksCiAgICAgICAgICAgICAgZmlsZU9mZnNldCwKICAgICAgICAgICAgICBsZW5ndGgpKSk7CiAgICB9CiAgICByZXR1cm4gdGFyZ2V0OwogIH0KCiAgLy8vIEZpbmRzIGEgbWVtYmVyIG9mIFtyZWNlaXZlclR5cGVdIGNhbGxlZCBbbmFtZV0gYW5kIHJlY29yZHMgaXQgaW4KICAvLy8gW21ldGhvZEludm9jYXRpb25dLgogIE9iamVjdEFjY2Vzc1RhcmdldCBmaW5kTWV0aG9kSW52b2NhdGlvbk1lbWJlcigKICAgICAgRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBJbnZvY2F0aW9uRXhwcmVzc2lvbiBtZXRob2RJbnZvY2F0aW9uLAogICAgICB7Ym9vbCBpbnN0cnVtZW50ZWQ6IHRydWV9KSB7CiAgICAvLyBUT0RPKHBhdWxiZXJyeSk6IGNvdWxkIHdlIGFkZCBnZXR0ZXJzIHRvIEludm9jYXRpb25FeHByZXNzaW9uIHRvIG1ha2UKICAgIC8vIHRoZXNlIGlzLWNoZWNrcyB1bm5lY2Vzc2FyeT8KICAgIGlmIChtZXRob2RJbnZvY2F0aW9uIGlzIE1ldGhvZEludm9jYXRpb24pIHsKICAgICAgT2JqZWN0QWNjZXNzVGFyZ2V0IGludGVyZmFjZVRhcmdldCA9IGZpbmRJbnRlcmZhY2VNZW1iZXIoCiAgICAgICAgICByZWNlaXZlclR5cGUsIG1ldGhvZEludm9jYXRpb24ubmFtZSwgbWV0aG9kSW52b2NhdGlvbi5maWxlT2Zmc2V0LAogICAgICAgICAgZXJyb3JUZW1wbGF0ZTogdGVtcGxhdGVVbmRlZmluZWRNZXRob2QsCiAgICAgICAgICBleHByZXNzaW9uOiBtZXRob2RJbnZvY2F0aW9uLAogICAgICAgICAgcmVjZWl2ZXI6IG1ldGhvZEludm9jYXRpb24ucmVjZWl2ZXIsCiAgICAgICAgICBpbnN0cnVtZW50ZWQ6IGluc3RydW1lbnRlZCwKICAgICAgICAgIGluY2x1ZGVFeHRlbnNpb25NZXRob2RzOiB0cnVlKTsKICAgICAgaWYgKGludGVyZmFjZVRhcmdldC5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgICAgTWVtYmVyIGludGVyZmFjZU1lbWJlciA9IGludGVyZmFjZVRhcmdldC5tZW1iZXI7CiAgICAgICAgaWYgKHJlY2VpdmVyVHlwZSA9PSBjb25zdCBEeW5hbWljVHlwZSgpICYmCiAgICAgICAgICAgIGludGVyZmFjZU1lbWJlciBpcyBQcm9jZWR1cmUpIHsKICAgICAgICAgIEFyZ3VtZW50cyBhcmd1bWVudHMgPSBtZXRob2RJbnZvY2F0aW9uLmFyZ3VtZW50czsKICAgICAgICAgIEZ1bmN0aW9uTm9kZSBzaWduYXR1cmUgPSBpbnRlcmZhY2VNZW1iZXIuZnVuY3Rpb247CiAgICAgICAgICBpZiAoYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoIDwgc2lnbmF0dXJlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQgfHwKICAgICAgICAgICAgICBhcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggPgogICAgICAgICAgICAgICAgICBzaWduYXR1cmUucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoKSB7CiAgICAgICAgICAgIHJldHVybiBjb25zdCBPYmplY3RBY2Nlc3NUYXJnZXQudW5yZXNvbHZlZCgpOwogICAgICAgICAgfQogICAgICAgICAgZm9yIChrZXJuZWwuTmFtZWRFeHByZXNzaW9uIGFyZ3VtZW50IGluIGFyZ3VtZW50cy5uYW1lZCkgewogICAgICAgICAgICBpZiAoIXNpZ25hdHVyZS5uYW1lZFBhcmFtZXRlcnMKICAgICAgICAgICAgICAgIC5hbnkoKGRlY2xhcmF0aW9uKSA9PiBkZWNsYXJhdGlvbi5uYW1lID09IGFyZ3VtZW50Lm5hbWUpKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGNvbnN0IE9iamVjdEFjY2Vzc1RhcmdldC51bnJlc29sdmVkKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChpbnN0cnVtZW50ZWQgJiYgaW5zdHJ1bWVudGF0aW9uICE9IG51bGwpIHsKICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLnJlY29yZCh1cmksIG1ldGhvZEludm9jYXRpb24uZmlsZU9mZnNldCwgJ3RhcmdldCcsCiAgICAgICAgICAgICAgICBuZXcgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JNZW1iZXIoaW50ZXJmYWNlTWVtYmVyKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIG1ldGhvZEludm9jYXRpb24uaW50ZXJmYWNlVGFyZ2V0ID0gaW50ZXJmYWNlTWVtYmVyOwogICAgICB9CiAgICAgIHJldHVybiBpbnRlcmZhY2VUYXJnZXQ7CiAgICB9IGVsc2UgaWYgKG1ldGhvZEludm9jYXRpb24gaXMgU3VwZXJNZXRob2RJbnZvY2F0aW9uKSB7CiAgICAgIGFzc2VydChyZWNlaXZlclR5cGUgIT0gY29uc3QgRHluYW1pY1R5cGUoKSk7CiAgICAgIE9iamVjdEFjY2Vzc1RhcmdldCBpbnRlcmZhY2VUYXJnZXQgPSBmaW5kSW50ZXJmYWNlTWVtYmVyKAogICAgICAgICAgcmVjZWl2ZXJUeXBlLCBtZXRob2RJbnZvY2F0aW9uLm5hbWUsIG1ldGhvZEludm9jYXRpb24uZmlsZU9mZnNldCwKICAgICAgICAgIGluc3RydW1lbnRlZDogaW5zdHJ1bWVudGVkKTsKICAgICAgaWYgKGludGVyZmFjZVRhcmdldC5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgICAgbWV0aG9kSW52b2NhdGlvbi5pbnRlcmZhY2VUYXJnZXQgPSBpbnRlcmZhY2VUYXJnZXQubWVtYmVyOwogICAgICB9CiAgICAgIHJldHVybiBpbnRlcmZhY2VUYXJnZXQ7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyB1bmhhbmRsZWQoIiR7bWV0aG9kSW52b2NhdGlvbi5ydW50aW1lVHlwZX0iLAogICAgICAgICAgImZpbmRNZXRob2RJbnZvY2F0aW9uTWVtYmVyIiwgbWV0aG9kSW52b2NhdGlvbi5maWxlT2Zmc2V0LCB1cmkpOwogICAgfQogIH0KCiAgLy8vIEZpbmRzIGEgbWVtYmVyIG9mIFtyZWNlaXZlclR5cGVdIGNhbGxlZCBbbmFtZV0sIGFuZCBpZiBpdCBpcyBmb3VuZCwKICAvLy8gcmVwb3J0cyBpdCB0aHJvdWdoIGluc3RydW1lbnRhdGlvbiBhbmQgcmVjb3JkcyBpdCBpbiBbcHJvcGVydHlHZXRdLgogIE9iamVjdEFjY2Vzc1RhcmdldCBmaW5kUHJvcGVydHlHZXRNZW1iZXIoCiAgICAgIERhcnRUeXBlIHJlY2VpdmVyVHlwZSwgRXhwcmVzc2lvbiBwcm9wZXJ0eUdldCwKICAgICAge2Jvb2wgaW5zdHJ1bWVudGVkOiB0cnVlfSkgewogICAgLy8gVE9ETyhwYXVsYmVycnkpOiBjb3VsZCB3ZSBhZGQgYSBjb21tb24gYmFzZSBjbGFzcyB0byBQcm9wZXJ0eUdldCBhbmQKICAgIC8vIFN1cGVyUHJvcGVydHlHZXQgdG8gbWFrZSB0aGVzZSBpcy1jaGVja3MgdW5uZWNlc3Nhcnk/CiAgICBpZiAocHJvcGVydHlHZXQgaXMgUHJvcGVydHlHZXQpIHsKICAgICAgT2JqZWN0QWNjZXNzVGFyZ2V0IHJlYWRUYXJnZXQgPSBmaW5kSW50ZXJmYWNlTWVtYmVyKAogICAgICAgICAgcmVjZWl2ZXJUeXBlLCBwcm9wZXJ0eUdldC5uYW1lLCBwcm9wZXJ0eUdldC5maWxlT2Zmc2V0LAogICAgICAgICAgZXJyb3JUZW1wbGF0ZTogdGVtcGxhdGVVbmRlZmluZWRHZXR0ZXIsCiAgICAgICAgICBleHByZXNzaW9uOiBwcm9wZXJ0eUdldCwKICAgICAgICAgIHJlY2VpdmVyOiBwcm9wZXJ0eUdldC5yZWNlaXZlciwKICAgICAgICAgIGluc3RydW1lbnRlZDogaW5zdHJ1bWVudGVkKTsKICAgICAgaWYgKHJlYWRUYXJnZXQuaXNJbnN0YW5jZU1lbWJlcikgewogICAgICAgIGlmIChpbnN0cnVtZW50ZWQgJiYKICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uICE9IG51bGwgJiYKICAgICAgICAgICAgcmVjZWl2ZXJUeXBlID09IGNvbnN0IER5bmFtaWNUeXBlKCkpIHsKICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5yZWNvcmQodXJpLCBwcm9wZXJ0eUdldC5maWxlT2Zmc2V0LCAndGFyZ2V0JywKICAgICAgICAgICAgICBuZXcgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JNZW1iZXIocmVhZFRhcmdldC5tZW1iZXIpKTsKICAgICAgICB9CiAgICAgICAgcHJvcGVydHlHZXQuaW50ZXJmYWNlVGFyZ2V0ID0gcmVhZFRhcmdldC5tZW1iZXI7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlYWRUYXJnZXQ7CiAgICB9IGVsc2UgaWYgKHByb3BlcnR5R2V0IGlzIFN1cGVyUHJvcGVydHlHZXQpIHsKICAgICAgYXNzZXJ0KHJlY2VpdmVyVHlwZSAhPSBjb25zdCBEeW5hbWljVHlwZSgpKTsKICAgICAgT2JqZWN0QWNjZXNzVGFyZ2V0IGludGVyZmFjZU1lbWJlciA9IGZpbmRJbnRlcmZhY2VNZW1iZXIoCiAgICAgICAgICByZWNlaXZlclR5cGUsIHByb3BlcnR5R2V0Lm5hbWUsIHByb3BlcnR5R2V0LmZpbGVPZmZzZXQsCiAgICAgICAgICBpbnN0cnVtZW50ZWQ6IGluc3RydW1lbnRlZCk7CiAgICAgIGlmIChpbnRlcmZhY2VNZW1iZXIuaXNJbnN0YW5jZU1lbWJlcikgewogICAgICAgIHByb3BlcnR5R2V0LmludGVyZmFjZVRhcmdldCA9IGludGVyZmFjZU1lbWJlci5tZW1iZXI7CiAgICAgIH0KICAgICAgcmV0dXJuIGludGVyZmFjZU1lbWJlcjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB1bmhhbmRsZWQoIiR7cHJvcGVydHlHZXQucnVudGltZVR5cGV9IiwgImZpbmRQcm9wZXJ0eUdldE1lbWJlciIsCiAgICAgICAgICBwcm9wZXJ0eUdldC5maWxlT2Zmc2V0LCB1cmkpOwogICAgfQogIH0KCiAgLy8vIEZpbmRzIGEgbWVtYmVyIG9mIFtyZWNlaXZlclR5cGVdIGNhbGxlZCBbbmFtZV0sIGFuZCBpZiBpdCBpcyBmb3VuZCwKICAvLy8gcmVwb3J0cyBpdCB0aHJvdWdoIGluc3RydW1lbnRhdGlvbiBhbmQgcmVjb3JkcyBpdCBpbiBbcHJvcGVydHlTZXRdLgogIE9iamVjdEFjY2Vzc1RhcmdldCBmaW5kUHJvcGVydHlTZXRNZW1iZXIoCiAgICAgIERhcnRUeXBlIHJlY2VpdmVyVHlwZSwgRXhwcmVzc2lvbiBwcm9wZXJ0eVNldCwKICAgICAge2Jvb2wgaW5zdHJ1bWVudGVkOiB0cnVlfSkgewogICAgaWYgKHByb3BlcnR5U2V0IGlzIFByb3BlcnR5U2V0KSB7CiAgICAgIE9iamVjdEFjY2Vzc1RhcmdldCB3cml0ZVRhcmdldCA9IGZpbmRJbnRlcmZhY2VNZW1iZXIoCiAgICAgICAgICByZWNlaXZlclR5cGUsIHByb3BlcnR5U2V0Lm5hbWUsIHByb3BlcnR5U2V0LmZpbGVPZmZzZXQsCiAgICAgICAgICBlcnJvclRlbXBsYXRlOiB0ZW1wbGF0ZVVuZGVmaW5lZFNldHRlciwKICAgICAgICAgIGV4cHJlc3Npb246IHByb3BlcnR5U2V0LAogICAgICAgICAgcmVjZWl2ZXI6IHByb3BlcnR5U2V0LnJlY2VpdmVyLAogICAgICAgICAgc2V0dGVyOiB0cnVlLAogICAgICAgICAgaW5zdHJ1bWVudGVkOiBpbnN0cnVtZW50ZWQsCiAgICAgICAgICBpbmNsdWRlRXh0ZW5zaW9uTWV0aG9kczogdHJ1ZSk7CiAgICAgIGlmICh3cml0ZVRhcmdldC5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgICAgaWYgKGluc3RydW1lbnRlZCAmJgogICAgICAgICAgICBpbnN0cnVtZW50YXRpb24gIT0gbnVsbCAmJgogICAgICAgICAgICByZWNlaXZlclR5cGUgPT0gY29uc3QgRHluYW1pY1R5cGUoKSkgewogICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLnJlY29yZCh1cmksIHByb3BlcnR5U2V0LmZpbGVPZmZzZXQsICd0YXJnZXQnLAogICAgICAgICAgICAgIG5ldyBJbnN0cnVtZW50YXRpb25WYWx1ZUZvck1lbWJlcih3cml0ZVRhcmdldC5tZW1iZXIpKTsKICAgICAgICB9CiAgICAgICAgcHJvcGVydHlTZXQuaW50ZXJmYWNlVGFyZ2V0ID0gd3JpdGVUYXJnZXQubWVtYmVyOwogICAgICB9CiAgICAgIHJldHVybiB3cml0ZVRhcmdldDsKICAgIH0gZWxzZSBpZiAocHJvcGVydHlTZXQgaXMgU3VwZXJQcm9wZXJ0eVNldCkgewogICAgICBhc3NlcnQocmVjZWl2ZXJUeXBlICE9IGNvbnN0IER5bmFtaWNUeXBlKCkpOwogICAgICBPYmplY3RBY2Nlc3NUYXJnZXQgaW50ZXJmYWNlTWVtYmVyID0gZmluZEludGVyZmFjZU1lbWJlcigKICAgICAgICAgIHJlY2VpdmVyVHlwZSwgcHJvcGVydHlTZXQubmFtZSwgcHJvcGVydHlTZXQuZmlsZU9mZnNldCwKICAgICAgICAgIHNldHRlcjogdHJ1ZSwgaW5zdHJ1bWVudGVkOiBpbnN0cnVtZW50ZWQpOwogICAgICBpZiAoaW50ZXJmYWNlTWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgICBwcm9wZXJ0eVNldC5pbnRlcmZhY2VUYXJnZXQgPSBpbnRlcmZhY2VNZW1iZXIubWVtYmVyOwogICAgICB9CiAgICAgIHJldHVybiBpbnRlcmZhY2VNZW1iZXI7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyB1bmhhbmRsZWQoIiR7cHJvcGVydHlTZXQucnVudGltZVR5cGV9IiwgImZpbmRQcm9wZXJ0eVNldE1lbWJlciIsCiAgICAgICAgICBwcm9wZXJ0eVNldC5maWxlT2Zmc2V0LCB1cmkpOwogICAgfQogIH0KCiAgLy8vIFJldHVybnMgdGhlIHR5cGUgb2YgW3RhcmdldF0gd2hlbiBhY2Nlc3NlZCBhcyBhIGdldHRlciBvbiBbcmVjZWl2ZXJUeXBlXS4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlCiAgLy8vCiAgLy8vICAgIGNsYXNzIENsYXNzPFQ+IHsKICAvLy8gICAgICBUIG1ldGhvZCgpIHt9CiAgLy8vICAgICAgVCBnZXR0ZXIgPT4gbnVsbDsKICAvLy8gICAgfQogIC8vLwogIC8vLyAgICBDbGFzczxpbnQ+IGMgPSAuLi4KICAvLy8gICAgYy5tZXRob2Q7IC8vIFRoZSBnZXR0ZXIgdHlwZSBpcyBgaW50IEZ1bmN0aW9uKClgLgogIC8vLyAgICBjLmdldHRlcjsgLy8gVGhlIGdldHRlciB0eXBlIGlzIGBpbnRgLgogIC8vLwogIERhcnRUeXBlIGdldEdldHRlclR5cGUoT2JqZWN0QWNjZXNzVGFyZ2V0IHRhcmdldCwgRGFydFR5cGUgcmVjZWl2ZXJUeXBlKSB7CiAgICBzd2l0Y2ggKHRhcmdldC5raW5kKSB7CiAgICAgIGNhc2UgT2JqZWN0QWNjZXNzVGFyZ2V0S2luZC5jYWxsRnVuY3Rpb246CiAgICAgICAgcmV0dXJuIHJlY2VpdmVyVHlwZTsKICAgICAgY2FzZSBPYmplY3RBY2Nlc3NUYXJnZXRLaW5kLnVucmVzb2x2ZWQ6CiAgICAgICAgcmV0dXJuIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICAgIGNhc2UgT2JqZWN0QWNjZXNzVGFyZ2V0S2luZC5pbnN0YW5jZU1lbWJlcjoKICAgICAgICByZXR1cm4gZ2V0R2V0dGVyVHlwZUZvck1lbWJlclRhcmdldCh0YXJnZXQubWVtYmVyLCByZWNlaXZlclR5cGUpOwogICAgICBjYXNlIE9iamVjdEFjY2Vzc1RhcmdldEtpbmQuZXh0ZW5zaW9uTWVtYmVyOgogICAgICAgIHN3aXRjaCAodGFyZ2V0LmV4dGVuc2lvbk1ldGhvZEtpbmQpIHsKICAgICAgICAgIGNhc2UgUHJvY2VkdXJlS2luZC5NZXRob2Q6CiAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSB0YXJnZXQubWVtYmVyLmZ1bmN0aW9uLmZ1bmN0aW9uVHlwZTsKICAgICAgICAgICAgTGlzdDxUeXBlUGFyYW1ldGVyPiBleHRlbnNpb25UeXBlUGFyYW1ldGVycyA9IGZ1bmN0aW9uVHlwZQogICAgICAgICAgICAgICAgLnR5cGVQYXJhbWV0ZXJzCiAgICAgICAgICAgICAgICAudGFrZSh0YXJnZXQuaW5mZXJyZWRFeHRlbnNpb25UeXBlQXJndW1lbnRzLmxlbmd0aCkKICAgICAgICAgICAgICAgIC50b0xpc3QoKTsKICAgICAgICAgICAgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoCiAgICAgICAgICAgICAgICBleHRlbnNpb25UeXBlUGFyYW1ldGVycywgdGFyZ2V0LmluZmVycmVkRXh0ZW5zaW9uVHlwZUFyZ3VtZW50cyk7CiAgICAgICAgICAgIHJldHVybiBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUobmV3IEZ1bmN0aW9uVHlwZSgKICAgICAgICAgICAgICAgIGZ1bmN0aW9uVHlwZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5za2lwKDEpLnRvTGlzdCgpLAogICAgICAgICAgICAgICAgZnVuY3Rpb25UeXBlLnJldHVyblR5cGUsCiAgICAgICAgICAgICAgICBuYW1lZFBhcmFtZXRlcnM6IGZ1bmN0aW9uVHlwZS5uYW1lZFBhcmFtZXRlcnMsCiAgICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVyczogZnVuY3Rpb25UeXBlLnR5cGVQYXJhbWV0ZXJzCiAgICAgICAgICAgICAgICAgICAgLnNraXAodGFyZ2V0LmluZmVycmVkRXh0ZW5zaW9uVHlwZUFyZ3VtZW50cy5sZW5ndGgpCiAgICAgICAgICAgICAgICAgICAgLnRvTGlzdCgpLAogICAgICAgICAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDoKICAgICAgICAgICAgICAgICAgICBmdW5jdGlvblR5cGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCAtIDEpKTsKICAgICAgICAgIGNhc2UgUHJvY2VkdXJlS2luZC5HZXR0ZXI6CiAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSB0YXJnZXQubWVtYmVyLmZ1bmN0aW9uLmZ1bmN0aW9uVHlwZTsKICAgICAgICAgICAgTGlzdDxUeXBlUGFyYW1ldGVyPiBleHRlbnNpb25UeXBlUGFyYW1ldGVycyA9IGZ1bmN0aW9uVHlwZQogICAgICAgICAgICAgICAgLnR5cGVQYXJhbWV0ZXJzCiAgICAgICAgICAgICAgICAudGFrZSh0YXJnZXQuaW5mZXJyZWRFeHRlbnNpb25UeXBlQXJndW1lbnRzLmxlbmd0aCkKICAgICAgICAgICAgICAgIC50b0xpc3QoKTsKICAgICAgICAgICAgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoCiAgICAgICAgICAgICAgICBleHRlbnNpb25UeXBlUGFyYW1ldGVycywgdGFyZ2V0LmluZmVycmVkRXh0ZW5zaW9uVHlwZUFyZ3VtZW50cyk7CiAgICAgICAgICAgIHJldHVybiBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoZnVuY3Rpb25UeXBlLnJldHVyblR5cGUpOwogICAgICAgICAgY2FzZSBQcm9jZWR1cmVLaW5kLlNldHRlcjoKICAgICAgICAgIGNhc2UgUHJvY2VkdXJlS2luZC5GYWN0b3J5OgogICAgICAgICAgY2FzZSBQcm9jZWR1cmVLaW5kLk9wZXJhdG9yOgogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CiAgICB0aHJvdyB1bmhhbmRsZWQoJyR0YXJnZXQnLCAnZ2V0R2V0dGVyVHlwZScsIG51bGwsIG51bGwpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGdldHRlciB0eXBlIG9mIFttZW1iZXJdIG9uIGEgcmVjZWl2ZXIgb2YgdHlwZSBbcmVjZWl2ZXJUeXBlXS4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlCiAgLy8vCiAgLy8vICAgIGNsYXNzIENsYXNzPFQ+IHsKICAvLy8gICAgICBUIG1ldGhvZCgpIHt9CiAgLy8vICAgICAgVCBnZXR0ZXIgPT4gbnVsbDsKICAvLy8gICAgfQogIC8vLwogIC8vLyAgICBDbGFzczxpbnQ+IGMgPSAuLi4KICAvLy8gICAgYy5tZXRob2Q7IC8vIFRoZSBnZXR0ZXIgdHlwZSBpcyBgaW50IEZ1bmN0aW9uKClgLgogIC8vLyAgICBjLmdldHRlcjsgLy8gVGhlIGdldHRlciB0eXBlIGlzIGBpbnRgLgogIC8vLwogIERhcnRUeXBlIGdldEdldHRlclR5cGVGb3JNZW1iZXJUYXJnZXQoCiAgICAgIE1lbWJlciBpbnRlcmZhY2VNZW1iZXIsIERhcnRUeXBlIHJlY2VpdmVyVHlwZSkgewogICAgQ2xhc3MgbWVtYmVyQ2xhc3MgPSBpbnRlcmZhY2VNZW1iZXIuZW5jbG9zaW5nQ2xhc3M7CiAgICBhc3NlcnQoCiAgICAgICAgaW50ZXJmYWNlTWVtYmVyIGlzIGtlcm5lbC5GaWVsZCB8fCBpbnRlcmZhY2VNZW1iZXIgaXMga2VybmVsLlByb2NlZHVyZSwKICAgICAgICAiVW5leHBlY3RlZCBpbnRlcmZhY2UgbWVtYmVyICRpbnRlcmZhY2VNZW1iZXIuIik7CiAgICBEYXJ0VHlwZSBjYWxsZWVUeXBlID0gaW50ZXJmYWNlTWVtYmVyLmdldHRlclR5cGU7CiAgICBpZiAobWVtYmVyQ2xhc3MudHlwZVBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgewogICAgICByZWNlaXZlclR5cGUgPSByZXNvbHZlVHlwZVBhcmFtZXRlcihyZWNlaXZlclR5cGUpOwogICAgICBpZiAocmVjZWl2ZXJUeXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgICBJbnRlcmZhY2VUeXBlIGNhc3RlZFR5cGUgPQogICAgICAgICAgICBjbGFzc0hpZXJhcmNoeS5nZXRUeXBlQXNJbnN0YW5jZU9mKHJlY2VpdmVyVHlwZSwgbWVtYmVyQ2xhc3MpOwogICAgICAgIGNhbGxlZVR5cGUgPSBTdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUoY2FzdGVkVHlwZSkKICAgICAgICAgICAgLnN1YnN0aXR1dGVUeXBlKGNhbGxlZVR5cGUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gY2FsbGVlVHlwZTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSB0eXBlIG9mIFt0YXJnZXRdIHdoZW4gYWNjZXNzZWQgYXMgYW4gaW52b2NhdGlvbiBvbgogIC8vLyBbcmVjZWl2ZXJUeXBlXS4KICAvLy8KICAvLy8gSWYgdGhlIHRhcmdldCBpcyBrbm93biBub3QgdG8gYmUgaW52b2thYmxlIFt1bmtub3duRnVuY3Rpb25dIGlzIHJldHVybmVkLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UKICAvLy8KICAvLy8gICAgY2xhc3MgQ2xhc3M8VD4gewogIC8vLyAgICAgIFQgbWV0aG9kKCkge30KICAvLy8gICAgICBUIEZ1bmN0aW9uKCkgZ2V0dGVyMSA9PiBudWxsOwogIC8vLyAgICAgIFQgZ2V0dGVyMiA9PiBudWxsOwogIC8vLyAgICB9CiAgLy8vCiAgLy8vICAgIENsYXNzPGludD4gYyA9IC4uLgogIC8vLyAgICBjLm1ldGhvZDsgLy8gVGhlIGdldHRlciB0eXBlIGlzIGBpbnQgRnVuY3Rpb24oKWAuCiAgLy8vICAgIGMuZ2V0dGVyMTsgLy8gVGhlIGdldHRlciB0eXBlIGlzIGBpbnQgRnVuY3Rpb24oKWAuCiAgLy8vICAgIGMuZ2V0dGVyMjsgLy8gVGhlIGdldHRlciB0eXBlIGlzIFt1bmtub3duRnVuY3Rpb25dLgogIC8vLwogIEZ1bmN0aW9uVHlwZSBnZXRGdW5jdGlvblR5cGUoCiAgICAgIE9iamVjdEFjY2Vzc1RhcmdldCB0YXJnZXQsIERhcnRUeXBlIHJlY2VpdmVyVHlwZSwgYm9vbCBmb2xsb3dDYWxsKSB7CiAgICBzd2l0Y2ggKHRhcmdldC5raW5kKSB7CiAgICAgIGNhc2UgT2JqZWN0QWNjZXNzVGFyZ2V0S2luZC5jYWxsRnVuY3Rpb246CiAgICAgICAgcmV0dXJuIF9nZXRGdW5jdGlvblR5cGUocmVjZWl2ZXJUeXBlLCBmb2xsb3dDYWxsKTsKICAgICAgY2FzZSBPYmplY3RBY2Nlc3NUYXJnZXRLaW5kLnVucmVzb2x2ZWQ6CiAgICAgICAgcmV0dXJuIHVua25vd25GdW5jdGlvbjsKICAgICAgY2FzZSBPYmplY3RBY2Nlc3NUYXJnZXRLaW5kLmluc3RhbmNlTWVtYmVyOgogICAgICAgIHJldHVybiBfZ2V0RnVuY3Rpb25UeXBlKAogICAgICAgICAgICBnZXRHZXR0ZXJUeXBlRm9yTWVtYmVyVGFyZ2V0KHRhcmdldC5tZW1iZXIsIHJlY2VpdmVyVHlwZSksCiAgICAgICAgICAgIGZvbGxvd0NhbGwpOwogICAgICBjYXNlIE9iamVjdEFjY2Vzc1RhcmdldEtpbmQuZXh0ZW5zaW9uTWVtYmVyOgogICAgICAgIHN3aXRjaCAodGFyZ2V0LmV4dGVuc2lvbk1ldGhvZEtpbmQpIHsKICAgICAgICAgIGNhc2UgUHJvY2VkdXJlS2luZC5NZXRob2Q6CiAgICAgICAgICAgIHJldHVybiB0YXJnZXQubWVtYmVyLmZ1bmN0aW9uLmZ1bmN0aW9uVHlwZTsKICAgICAgICAgIGNhc2UgUHJvY2VkdXJlS2luZC5HZXR0ZXI6CiAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEhhbmRsZSBpbXBsaWNpdCAuY2FsbCBvbiBleHRlbnNpb24gZ2V0dGVyLgogICAgICAgICAgICByZXR1cm4gX2dldEZ1bmN0aW9uVHlwZSh0YXJnZXQubWVtYmVyLmZ1bmN0aW9uLnJldHVyblR5cGUsIGZhbHNlKTsKICAgICAgICAgIGNhc2UgUHJvY2VkdXJlS2luZC5TZXR0ZXI6CiAgICAgICAgICBjYXNlIFByb2NlZHVyZUtpbmQuRmFjdG9yeToKICAgICAgICAgIGNhc2UgUHJvY2VkdXJlS2luZC5PcGVyYXRvcjoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgdGhyb3cgdW5oYW5kbGVkKCckdGFyZ2V0JywgJ2dldEZ1bmN0aW9uVHlwZScsIG51bGwsIG51bGwpOwogIH0KCiAgRnVuY3Rpb25UeXBlIF9nZXRGdW5jdGlvblR5cGUoRGFydFR5cGUgY2FsbGVlVHlwZSwgYm9vbCBmb2xsb3dDYWxsKSB7CiAgICBpZiAoY2FsbGVlVHlwZSBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgcmV0dXJuIGNhbGxlZVR5cGU7CiAgICB9IGVsc2UgaWYgKGZvbGxvd0NhbGwgJiYgY2FsbGVlVHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgIE1lbWJlciBtZW1iZXIgPQogICAgICAgICAgX2dldEludGVyZmFjZU1lbWJlcihjYWxsZWVUeXBlLmNsYXNzTm9kZSwgY2FsbE5hbWUsIGZhbHNlLCAtMSk7CiAgICAgIGlmIChtZW1iZXIgIT0gbnVsbCkgewogICAgICAgIERhcnRUeXBlIGNhbGxUeXBlID0gZ2V0R2V0dGVyVHlwZUZvck1lbWJlclRhcmdldChtZW1iZXIsIGNhbGxlZVR5cGUpOwogICAgICAgIGlmIChjYWxsVHlwZSBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgICAgIHJldHVybiBjYWxsVHlwZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB1bmtub3duRnVuY3Rpb247CiAgfQoKICBEYXJ0VHlwZSBnZXREZXJpdmVkVHlwZUFyZ3VtZW50T2YoRGFydFR5cGUgdHlwZSwgQ2xhc3MgY2xhc3NfKSB7CiAgICBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgIEludGVyZmFjZVR5cGUgdHlwZUFzSW5zdGFuY2VPZkNsYXNzID0KICAgICAgICAgIGNsYXNzSGllcmFyY2h5LmdldFR5cGVBc0luc3RhbmNlT2YodHlwZSwgY2xhc3NfKTsKICAgICAgaWYgKHR5cGVBc0luc3RhbmNlT2ZDbGFzcyAhPSBudWxsKSB7CiAgICAgICAgcmV0dXJuIHR5cGVBc0luc3RhbmNlT2ZDbGFzcy50eXBlQXJndW1lbnRzWzBdOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vLyBHZXRzIHRoZSBpbml0aWFsaXplciBmb3IgdGhlIGdpdmVuIFtmaWVsZF0sIG9yIGBudWxsYCBpZiB0aGVyZSBpcyBubwogIC8vLyBpbml0aWFsaXplci4KICBFeHByZXNzaW9uIGdldEZpZWxkSW5pdGlhbGl6ZXIoRmllbGQgZmllbGQpOwoKICAvLy8gSWYgdGhlIFttZW1iZXJdIGlzIGEgZm9yd2FyZGluZyBzdHViLCByZXR1cm4gdGhlIHRhcmdldCBpdCBmb3J3YXJkcyB0by4KICAvLy8gT3RoZXJ3aXNlIHJldHVybiB0aGUgZ2l2ZW4gW21lbWJlcl0uCiAgTWVtYmVyIGdldFJlYWxUYXJnZXQoTWVtYmVyIG1lbWJlcikgewogICAgaWYgKG1lbWJlciBpcyBQcm9jZWR1cmUgJiYgbWVtYmVyLmlzRm9yd2FyZGluZ1N0dWIpIHsKICAgICAgcmV0dXJuIG1lbWJlci5mb3J3YXJkaW5nU3R1YkludGVyZmFjZVRhcmdldDsKICAgIH0KICAgIHJldHVybiBtZW1iZXI7CiAgfQoKICBEYXJ0VHlwZSBnZXRTZXR0ZXJUeXBlKE9iamVjdEFjY2Vzc1RhcmdldCB0YXJnZXQsIERhcnRUeXBlIHJlY2VpdmVyVHlwZSkgewogICAgc3dpdGNoICh0YXJnZXQua2luZCkgewogICAgICBjYXNlIE9iamVjdEFjY2Vzc1RhcmdldEtpbmQudW5yZXNvbHZlZDoKICAgICAgICByZXR1cm4gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgICAgY2FzZSBPYmplY3RBY2Nlc3NUYXJnZXRLaW5kLmluc3RhbmNlTWVtYmVyOgogICAgICAgIE1lbWJlciBpbnRlcmZhY2VNZW1iZXIgPSB0YXJnZXQubWVtYmVyOwogICAgICAgIENsYXNzIG1lbWJlckNsYXNzID0gaW50ZXJmYWNlTWVtYmVyLmVuY2xvc2luZ0NsYXNzOwogICAgICAgIERhcnRUeXBlIHNldHRlclR5cGU7CiAgICAgICAgaWYgKGludGVyZmFjZU1lbWJlciBpcyBQcm9jZWR1cmUpIHsKICAgICAgICAgIGFzc2VydChpbnRlcmZhY2VNZW1iZXIua2luZCA9PSBQcm9jZWR1cmVLaW5kLlNldHRlcik7CiAgICAgICAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHNldHRlclBhcmFtZXRlcnMgPQogICAgICAgICAgICAgIGludGVyZmFjZU1lbWJlci5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVyczsKICAgICAgICAgIHNldHRlclR5cGUgPSBzZXR0ZXJQYXJhbWV0ZXJzLmxlbmd0aCA+IDAKICAgICAgICAgICAgICA/IHNldHRlclBhcmFtZXRlcnNbMF0udHlwZQogICAgICAgICAgICAgIDogY29uc3QgRHluYW1pY1R5cGUoKTsKICAgICAgICB9IGVsc2UgaWYgKGludGVyZmFjZU1lbWJlciBpcyBGaWVsZCkgewogICAgICAgICAgc2V0dGVyVHlwZSA9IGludGVyZmFjZU1lbWJlci50eXBlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyB1bmhhbmRsZWQoaW50ZXJmYWNlTWVtYmVyLnJ1bnRpbWVUeXBlLnRvU3RyaW5nKCksCiAgICAgICAgICAgICAgJ2dldFNldHRlclR5cGUnLCBudWxsLCBudWxsKTsKICAgICAgICB9CiAgICAgICAgaWYgKG1lbWJlckNsYXNzLnR5cGVQYXJhbWV0ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgICAgIHJlY2VpdmVyVHlwZSA9IHJlc29sdmVUeXBlUGFyYW1ldGVyKHJlY2VpdmVyVHlwZSk7CiAgICAgICAgICBpZiAocmVjZWl2ZXJUeXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgICAgICAgSW50ZXJmYWNlVHlwZSBjYXN0ZWRUeXBlID0KICAgICAgICAgICAgICAgIGNsYXNzSGllcmFyY2h5LmdldFR5cGVBc0luc3RhbmNlT2YocmVjZWl2ZXJUeXBlLCBtZW1iZXJDbGFzcyk7CiAgICAgICAgICAgIHNldHRlclR5cGUgPSBTdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUoY2FzdGVkVHlwZSkKICAgICAgICAgICAgICAgIC5zdWJzdGl0dXRlVHlwZShzZXR0ZXJUeXBlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHNldHRlclR5cGU7CiAgICAgIGNhc2UgT2JqZWN0QWNjZXNzVGFyZ2V0S2luZC5leHRlbnNpb25NZW1iZXI6CiAgICAgICAgc3dpdGNoICh0YXJnZXQuZXh0ZW5zaW9uTWV0aG9kS2luZCkgewogICAgICAgICAgY2FzZSBQcm9jZWR1cmVLaW5kLlNldHRlcjoKICAgICAgICAgICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9IHRhcmdldC5tZW1iZXIuZnVuY3Rpb24uZnVuY3Rpb25UeXBlOwogICAgICAgICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IGV4dGVuc2lvblR5cGVQYXJhbWV0ZXJzID0gZnVuY3Rpb25UeXBlCiAgICAgICAgICAgICAgICAudHlwZVBhcmFtZXRlcnMKICAgICAgICAgICAgICAgIC50YWtlKHRhcmdldC5pbmZlcnJlZEV4dGVuc2lvblR5cGVBcmd1bWVudHMubGVuZ3RoKQogICAgICAgICAgICAgICAgLnRvTGlzdCgpOwogICAgICAgICAgICBTdWJzdGl0dXRpb24gc3Vic3RpdHV0aW9uID0gU3Vic3RpdHV0aW9uLmZyb21QYWlycygKICAgICAgICAgICAgICAgIGV4dGVuc2lvblR5cGVQYXJhbWV0ZXJzLCB0YXJnZXQuaW5mZXJyZWRFeHRlbnNpb25UeXBlQXJndW1lbnRzKTsKICAgICAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGlvbgogICAgICAgICAgICAgICAgLnN1YnN0aXR1dGVUeXBlKGZ1bmN0aW9uVHlwZS5wb3NpdGlvbmFsUGFyYW1ldGVyc1sxXSk7CiAgICAgICAgICBjYXNlIFByb2NlZHVyZUtpbmQuTWV0aG9kOgogICAgICAgICAgY2FzZSBQcm9jZWR1cmVLaW5kLkdldHRlcjoKICAgICAgICAgIGNhc2UgUHJvY2VkdXJlS2luZC5GYWN0b3J5OgogICAgICAgICAgY2FzZSBQcm9jZWR1cmVLaW5kLk9wZXJhdG9yOgogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ29tcHV0ZSB0aGUgcmlnaHQgc2V0dGVyIHR5cGUuCiAgICAgICAgcmV0dXJuIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICAgIGNhc2UgT2JqZWN0QWNjZXNzVGFyZ2V0S2luZC5jYWxsRnVuY3Rpb246CiAgICB9CiAgICB0aHJvdyB1bmhhbmRsZWQodGFyZ2V0LnJ1bnRpbWVUeXBlLnRvU3RyaW5nKCksICdnZXRTZXR0ZXJUeXBlJywgbnVsbCwgbnVsbCk7CiAgfQoKICBEYXJ0VHlwZSBnZXRUeXBlQXJndW1lbnRPZihEYXJ0VHlwZSB0eXBlLCBDbGFzcyBjbGFzc18pIHsKICAgIGlmICh0eXBlIGlzIEludGVyZmFjZVR5cGUgJiYgaWRlbnRpY2FsKHR5cGUuY2xhc3NOb2RlLCBjbGFzc18pKSB7CiAgICAgIHJldHVybiB0eXBlLnR5cGVBcmd1bWVudHNbMF07CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gY29uc3QgVW5rbm93blR5cGUoKTsKICAgIH0KICB9CgogIC8vLyBBZGRzIGFuICJhcyIgY2hlY2sgdG8gYSBbTWV0aG9kSW52b2NhdGlvbl0gaWYgbmVjZXNzYXJ5IGR1ZSB0bwogIC8vLyBjb250cmF2YXJpYW5jZS4KICAvLy8KICAvLy8gVGhlIHJldHVybmVkIGV4cHJlc3Npb24gaXMgdGhlIFtBc0V4cHJlc3Npb25dLCBpZiBvbmUgd2FzIGFkZGVkOyBvdGhlcndpc2UKICAvLy8gaXQgaXMgdGhlIFtNZXRob2RJbnZvY2F0aW9uXS4KICBFeHByZXNzaW9uIGhhbmRsZUludm9jYXRpb25Db250cmF2YXJpYW5jZSgKICAgICAgTWV0aG9kQ29udHJhdmFyaWFuY2VDaGVja0tpbmQgY2hlY2tLaW5kLAogICAgICBNZXRob2RJbnZvY2F0aW9uIGRlc3VnYXJlZEludm9jYXRpb24sCiAgICAgIEFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiwKICAgICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlLAogICAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlLAogICAgICBpbnQgZmlsZU9mZnNldCkgewogICAgRXhwcmVzc2lvbiBleHByZXNzaW9uVG9SZXBsYWNlID0gZGVzdWdhcmVkSW52b2NhdGlvbiA/PyBleHByZXNzaW9uOwogICAgc3dpdGNoIChjaGVja0tpbmQpIHsKICAgICAgY2FzZSBNZXRob2RDb250cmF2YXJpYW5jZUNoZWNrS2luZC5jaGVja01ldGhvZFJldHVybjoKICAgICAgICBUcmVlTm9kZSBwYXJlbnQgPSBleHByZXNzaW9uVG9SZXBsYWNlLnBhcmVudDsKICAgICAgICBBc0V4cHJlc3Npb24gcmVwbGFjZW1lbnQgPQogICAgICAgICAgICBuZXcgQXNFeHByZXNzaW9uKGV4cHJlc3Npb25Ub1JlcGxhY2UsIGluZmVycmVkVHlwZSkKICAgICAgICAgICAgICAuLmlzVHlwZUVycm9yID0gdHJ1ZQogICAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZChleHByZXNzaW9uVG9SZXBsYWNlLCByZXBsYWNlbWVudCk7CiAgICAgICAgaWYgKGluc3RydW1lbnRhdGlvbiAhPSBudWxsKSB7CiAgICAgICAgICBpbnQgb2Zmc2V0ID0gYXJndW1lbnRzLmZpbGVPZmZzZXQgPT0gLTEKICAgICAgICAgICAgICA/IGV4cHJlc3Npb24uZmlsZU9mZnNldAogICAgICAgICAgICAgIDogYXJndW1lbnRzLmZpbGVPZmZzZXQ7CiAgICAgICAgICBpbnN0cnVtZW50YXRpb24ucmVjb3JkKHVyaSwgb2Zmc2V0LCAnY2hlY2tSZXR1cm4nLAogICAgICAgICAgICAgIG5ldyBJbnN0cnVtZW50YXRpb25WYWx1ZUZvclR5cGUoaW5mZXJyZWRUeXBlKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXBsYWNlbWVudDsKICAgICAgY2FzZSBNZXRob2RDb250cmF2YXJpYW5jZUNoZWNrS2luZC5jaGVja0dldHRlclJldHVybjoKICAgICAgICBUcmVlTm9kZSBwYXJlbnQgPSBleHByZXNzaW9uVG9SZXBsYWNlLnBhcmVudDsKICAgICAgICBQcm9wZXJ0eUdldCBwcm9wZXJ0eUdldCA9IG5ldyBQcm9wZXJ0eUdldChkZXN1Z2FyZWRJbnZvY2F0aW9uLnJlY2VpdmVyLAogICAgICAgICAgICBkZXN1Z2FyZWRJbnZvY2F0aW9uLm5hbWUsIGRlc3VnYXJlZEludm9jYXRpb24uaW50ZXJmYWNlVGFyZ2V0KTsKICAgICAgICBBc0V4cHJlc3Npb24gYXNFeHByZXNzaW9uID0gbmV3IEFzRXhwcmVzc2lvbihwcm9wZXJ0eUdldCwgZnVuY3Rpb25UeXBlKQogICAgICAgICAgLi5pc1R5cGVFcnJvciA9IHRydWUKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICAgICAgTWV0aG9kSW52b2NhdGlvbiByZXBsYWNlbWVudCA9IG5ldyBNZXRob2RJbnZvY2F0aW9uKAogICAgICAgICAgICBhc0V4cHJlc3Npb24sIGNhbGxOYW1lLCBkZXN1Z2FyZWRJbnZvY2F0aW9uLmFyZ3VtZW50cyk7CiAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZChleHByZXNzaW9uVG9SZXBsYWNlLCByZXBsYWNlbWVudCk7CiAgICAgICAgaWYgKGluc3RydW1lbnRhdGlvbiAhPSBudWxsKSB7CiAgICAgICAgICBpbnQgb2Zmc2V0ID0gYXJndW1lbnRzLmZpbGVPZmZzZXQgPT0gLTEKICAgICAgICAgICAgICA/IGV4cHJlc3Npb24uZmlsZU9mZnNldAogICAgICAgICAgICAgIDogYXJndW1lbnRzLmZpbGVPZmZzZXQ7CiAgICAgICAgICBpbnN0cnVtZW50YXRpb24ucmVjb3JkKHVyaSwgb2Zmc2V0LCAnY2hlY2tHZXR0ZXJSZXR1cm4nLAogICAgICAgICAgICAgIG5ldyBJbnN0cnVtZW50YXRpb25WYWx1ZUZvclR5cGUoZnVuY3Rpb25UeXBlKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXBsYWNlbWVudDsKICAgICAgY2FzZSBNZXRob2RDb250cmF2YXJpYW5jZUNoZWNrS2luZC5ub25lOgogICAgICAgIGJyZWFrOwogICAgfQogICAgcmV0dXJuIGV4cHJlc3Npb25Ub1JlcGxhY2U7CiAgfQoKICAvLy8gQWRkIGFuICJhcyIgY2hlY2sgaWYgbmVjZXNzYXJ5IGR1ZSB0byBjb250cmF2YXJpYW5jZS4KICAvLy8KICAvLy8gUmV0dXJucyB0aGUgImFzIiBjaGVjayBpZiBpdCB3YXMgYWRkZWQ7IG90aGVyd2lzZSByZXR1cm5zIHRoZSBvcmlnaW5hbAogIC8vLyBleHByZXNzaW9uLgogIEV4cHJlc3Npb24gaGFuZGxlUHJvcGVydHlHZXRDb250cmF2YXJpYW5jZSgKICAgICAgRXhwcmVzc2lvbiByZWNlaXZlciwKICAgICAgT2JqZWN0QWNjZXNzVGFyZ2V0IHJlYWRUYXJnZXQsCiAgICAgIFByb3BlcnR5R2V0IGRlc3VnYXJlZEdldCwKICAgICAgRXhwcmVzc2lvbiBleHByZXNzaW9uLAogICAgICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGUsCiAgICAgIGludCBmaWxlT2Zmc2V0KSB7CiAgICBib29sIGNoZWNrUmV0dXJuID0gZmFsc2U7CiAgICBpZiAocmVjZWl2ZXIgIT0gbnVsbCAmJgogICAgICAgIHJlYWRUYXJnZXQuaXNJbnN0YW5jZU1lbWJlciAmJgogICAgICAgIHJlY2VpdmVyIGlzISBUaGlzRXhwcmVzc2lvbikgewogICAgICBNZW1iZXIgaW50ZXJmYWNlTWVtYmVyID0gcmVhZFRhcmdldC5tZW1iZXI7CiAgICAgIGlmIChpbnRlcmZhY2VNZW1iZXIgaXMgUHJvY2VkdXJlKSB7CiAgICAgICAgY2hlY2tSZXR1cm4gPSByZXR1cm5lZFR5cGVQYXJhbWV0ZXJzT2NjdXJOb25Db3ZhcmlhbnRseSgKICAgICAgICAgICAgaW50ZXJmYWNlTWVtYmVyLmVuY2xvc2luZ0NsYXNzLAogICAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIuZnVuY3Rpb24ucmV0dXJuVHlwZSk7CiAgICAgIH0gZWxzZSBpZiAoaW50ZXJmYWNlTWVtYmVyIGlzIEZpZWxkKSB7CiAgICAgICAgY2hlY2tSZXR1cm4gPSByZXR1cm5lZFR5cGVQYXJhbWV0ZXJzT2NjdXJOb25Db3ZhcmlhbnRseSgKICAgICAgICAgICAgaW50ZXJmYWNlTWVtYmVyLmVuY2xvc2luZ0NsYXNzLCBpbnRlcmZhY2VNZW1iZXIudHlwZSk7CiAgICAgIH0KICAgIH0KICAgIEV4cHJlc3Npb24gcmVwbGFjZWRFeHByZXNzaW9uID0gZGVzdWdhcmVkR2V0ID8/IGV4cHJlc3Npb247CiAgICBpZiAoY2hlY2tSZXR1cm4pIHsKICAgICAgRXhwcmVzc2lvbiBleHByZXNzaW9uVG9SZXBsYWNlID0gcmVwbGFjZWRFeHByZXNzaW9uOwogICAgICBUcmVlTm9kZSBwYXJlbnQgPSBleHByZXNzaW9uVG9SZXBsYWNlLnBhcmVudDsKICAgICAgcmVwbGFjZWRFeHByZXNzaW9uID0gbmV3IEFzRXhwcmVzc2lvbihleHByZXNzaW9uVG9SZXBsYWNlLCBpbmZlcnJlZFR5cGUpCiAgICAgICAgLi5pc1R5cGVFcnJvciA9IHRydWUKICAgICAgICAuLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0OwogICAgICBwYXJlbnQucmVwbGFjZUNoaWxkKGV4cHJlc3Npb25Ub1JlcGxhY2UsIHJlcGxhY2VkRXhwcmVzc2lvbik7CiAgICB9CiAgICBpZiAoaW5zdHJ1bWVudGF0aW9uICE9IG51bGwgJiYgY2hlY2tSZXR1cm4pIHsKICAgICAgaW5zdHJ1bWVudGF0aW9uLnJlY29yZCh1cmksIGV4cHJlc3Npb24uZmlsZU9mZnNldCwgJ2NoZWNrUmV0dXJuJywKICAgICAgICAgIG5ldyBJbnN0cnVtZW50YXRpb25WYWx1ZUZvclR5cGUoaW5mZXJyZWRUeXBlKSk7CiAgICB9CiAgICByZXR1cm4gcmVwbGFjZWRFeHByZXNzaW9uOwogIH0KCiAgLy8vIE1vZGlmaWVzIGEgdHlwZSBhcyBhcHByb3ByaWF0ZSB3aGVuIGluZmVycmluZyBhIGRlY2xhcmVkIHZhcmlhYmxlJ3MgdHlwZS4KICBEYXJ0VHlwZSBpbmZlckRlY2xhcmF0aW9uVHlwZShEYXJ0VHlwZSBpbml0aWFsaXplclR5cGUpIHsKICAgIGlmIChpbml0aWFsaXplclR5cGUgaXMgQm90dG9tVHlwZSB8fAogICAgICAgIChpbml0aWFsaXplclR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJgogICAgICAgICAgICBpbml0aWFsaXplclR5cGUuY2xhc3NOb2RlID09IGNvcmVUeXBlcy5udWxsQ2xhc3MpKSB7CiAgICAgIC8vIElmIHRoZSBpbml0aWFsaXplciB0eXBlIGlzIE51bGwgb3IgYm90dG9tLCB0aGUgaW5mZXJyZWQgdHlwZSBpcwogICAgICAvLyBkeW5hbWljLgogICAgICAvLyBUT0RPKHBhdWxiZXJyeSk6IHRoaXMgcnVsZSBpcyBpbmhlcml0ZWQgZnJvbSBhbmFseXplciBiZWhhdmlvciBidXQgaXMKICAgICAgLy8gbm90IHNwZWMnZWQgYW55d2hlcmUuCiAgICAgIHJldHVybiBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgfQogICAgcmV0dXJuIGluaXRpYWxpemVyVHlwZTsKICB9CgogIC8vLyBQZXJmb3JtcyB0eXBlIGluZmVyZW5jZSBvbiB0aGUgZ2l2ZW4gW2V4cHJlc3Npb25dLgogIC8vLwogIC8vLyBbdHlwZUNvbnRleHRdIGlzIHRoZSBleHBlY3RlZCB0eXBlIG9mIHRoZSBleHByZXNzaW9uLCBiYXNlZCBvbiBzdXJyb3VuZGluZwogIC8vLyBjb2RlLiAgW3R5cGVOZWVkZWRdIGluZGljYXRlcyB3aGV0aGVyIGl0IGlzIG5lY2Vzc2FyeSB0byBjb21wdXRlIHRoZQogIC8vLyBhY3R1YWwgdHlwZSBvZiB0aGUgZXhwcmVzc2lvbi4gIElmIFt0eXBlTmVlZGVkXSBpcyBgdHJ1ZWAsCiAgLy8vIFtFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0LmluZmVycmVkVHlwZV0gaXMgdGhlIGFjdHVhbCB0eXBlIG9mIHRoZQogIC8vLyBleHByZXNzaW9uOyBvdGhlcndpc2UgYG51bGxgLgogIC8vLwogIC8vLyBEZXJpdmVkIGNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHdpdGggbG9naWMgdGhhdCBkaXNwYXRjaGVzIG9uCiAgLy8vIHRoZSBleHByZXNzaW9uIHR5cGUgYW5kIGNhbGxzIHRoZSBhcHByb3ByaWF0ZSBzcGVjaWFsaXplZCAiaW5mZXIiIG1ldGhvZC4KICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IGluZmVyRXhwcmVzc2lvbigKICAgICAga2VybmVsLkV4cHJlc3Npb24gZXhwcmVzc2lvbiwgRGFydFR5cGUgdHlwZUNvbnRleHQsIGJvb2wgdHlwZU5lZWRlZCwKICAgICAge2Jvb2wgaXNWb2lkQWxsb3dlZH0pOwoKICBAb3ZlcnJpZGUKICB2b2lkIGluZmVyRmllbGRJbml0aWFsaXplcigKICAgIEluZmVyZW5jZUhlbHBlciBoZWxwZXIsCiAgICBEYXJ0VHlwZSBjb250ZXh0LAogICAga2VybmVsLkV4cHJlc3Npb24gaW5pdGlhbGl6ZXIsCiAgKSB7CiAgICBhc3NlcnQoY2xvc3VyZUNvbnRleHQgPT0gbnVsbCk7CiAgICBhc3NlcnQoIWlzVG9wTGV2ZWwpOwogICAgdGhpcy5oZWxwZXIgPSBoZWxwZXI7CiAgICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHJlc3VsdCA9CiAgICAgICAgaW5mZXJFeHByZXNzaW9uKGluaXRpYWxpemVyLCBjb250ZXh0LCB0cnVlLCBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgIGVuc3VyZUFzc2lnbmFibGUoCiAgICAgICAgY29udGV4dCwgcmVzdWx0LmluZmVycmVkVHlwZSwgaW5pdGlhbGl6ZXIsIGluaXRpYWxpemVyLmZpbGVPZmZzZXQsCiAgICAgICAgaXNWb2lkQWxsb3dlZDogY29udGV4dCBpcyBWb2lkVHlwZSk7CiAgICB0aGlzLmhlbHBlciA9IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGluZmVyRnVuY3Rpb25Cb2R5KEluZmVyZW5jZUhlbHBlciBoZWxwZXIsIERhcnRUeXBlIHJldHVyblR5cGUsCiAgICAgIEFzeW5jTWFya2VyIGFzeW5jTWFya2VyLCBTdGF0ZW1lbnQgYm9keSkgewogICAgYXNzZXJ0KGNsb3N1cmVDb250ZXh0ID09IG51bGwpOwogICAgdGhpcy5oZWxwZXIgPSBoZWxwZXI7CiAgICBjbG9zdXJlQ29udGV4dCA9IG5ldyBDbG9zdXJlQ29udGV4dCh0aGlzLCBhc3luY01hcmtlciwgcmV0dXJuVHlwZSwgZmFsc2UpOwogICAgaW5mZXJTdGF0ZW1lbnQoYm9keSk7CiAgICBjbG9zdXJlQ29udGV4dCA9IG51bGw7CiAgICB0aGlzLmhlbHBlciA9IG51bGw7CiAgfQoKICBEYXJ0VHlwZSBpbmZlckludm9jYXRpb24oRGFydFR5cGUgdHlwZUNvbnRleHQsIGludCBvZmZzZXQsCiAgICAgIEZ1bmN0aW9uVHlwZSBjYWxsZWVUeXBlLCBEYXJ0VHlwZSByZXR1cm5UeXBlLCBBcmd1bWVudHMgYXJndW1lbnRzLAogICAgICB7Ym9vbCBpc092ZXJsb2FkZWRBcml0aG1ldGljT3BlcmF0b3I6IGZhbHNlLAogICAgICBEYXJ0VHlwZSByZWNlaXZlclR5cGUsCiAgICAgIGJvb2wgc2tpcFR5cGVBcmd1bWVudEluZmVyZW5jZTogZmFsc2UsCiAgICAgIGJvb2wgaXNDb25zdDogZmFsc2UsCiAgICAgIGJvb2wgaXNJbXBsaWNpdEV4dGVuc2lvbk1lbWJlcjogZmFsc2V9KSB7CiAgICBpbnQgZXh0ZW5zaW9uVHlwZVBhcmFtZXRlckNvdW50ID0gZ2V0RXh0ZW5zaW9uVHlwZVBhcmFtZXRlckNvdW50KGFyZ3VtZW50cyk7CiAgICBpZiAoZXh0ZW5zaW9uVHlwZVBhcmFtZXRlckNvdW50ICE9IDApIHsKICAgICAgcmV0dXJuIF9pbmZlckdlbmVyaWNFeHRlbnNpb25NZXRob2RJbnZvY2F0aW9uKGV4dGVuc2lvblR5cGVQYXJhbWV0ZXJDb3VudCwKICAgICAgICAgIHR5cGVDb250ZXh0LCBvZmZzZXQsIGNhbGxlZVR5cGUsIHJldHVyblR5cGUsIGFyZ3VtZW50cywKICAgICAgICAgIGlzT3ZlcmxvYWRlZEFyaXRobWV0aWNPcGVyYXRvcjogaXNPdmVybG9hZGVkQXJpdGhtZXRpY09wZXJhdG9yLAogICAgICAgICAgcmVjZWl2ZXJUeXBlOiByZWNlaXZlclR5cGUsCiAgICAgICAgICBza2lwVHlwZUFyZ3VtZW50SW5mZXJlbmNlOiBza2lwVHlwZUFyZ3VtZW50SW5mZXJlbmNlLAogICAgICAgICAgaXNDb25zdDogaXNDb25zdCwKICAgICAgICAgIGlzSW1wbGljaXRFeHRlbnNpb25NZW1iZXI6IGlzSW1wbGljaXRFeHRlbnNpb25NZW1iZXIpOwogICAgfQogICAgcmV0dXJuIF9pbmZlckludm9jYXRpb24oCiAgICAgICAgdHlwZUNvbnRleHQsIG9mZnNldCwgY2FsbGVlVHlwZSwgcmV0dXJuVHlwZSwgYXJndW1lbnRzLAogICAgICAgIGlzT3ZlcmxvYWRlZEFyaXRobWV0aWNPcGVyYXRvcjogaXNPdmVybG9hZGVkQXJpdGhtZXRpY09wZXJhdG9yLAogICAgICAgIHJlY2VpdmVyVHlwZTogcmVjZWl2ZXJUeXBlLAogICAgICAgIHNraXBUeXBlQXJndW1lbnRJbmZlcmVuY2U6IHNraXBUeXBlQXJndW1lbnRJbmZlcmVuY2UsCiAgICAgICAgaXNDb25zdDogaXNDb25zdCwKICAgICAgICBpc0ltcGxpY2l0RXh0ZW5zaW9uTWVtYmVyOiBpc0ltcGxpY2l0RXh0ZW5zaW9uTWVtYmVyKTsKICB9CgogIERhcnRUeXBlIF9pbmZlckdlbmVyaWNFeHRlbnNpb25NZXRob2RJbnZvY2F0aW9uKAogICAgICBpbnQgZXh0ZW5zaW9uVHlwZVBhcmFtZXRlckNvdW50LAogICAgICBEYXJ0VHlwZSB0eXBlQ29udGV4dCwKICAgICAgaW50IG9mZnNldCwKICAgICAgRnVuY3Rpb25UeXBlIGNhbGxlZVR5cGUsCiAgICAgIERhcnRUeXBlIHJldHVyblR5cGUsCiAgICAgIEFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIHtib29sIGlzT3ZlcmxvYWRlZEFyaXRobWV0aWNPcGVyYXRvcjogZmFsc2UsCiAgICAgIERhcnRUeXBlIHJlY2VpdmVyVHlwZSwKICAgICAgYm9vbCBza2lwVHlwZUFyZ3VtZW50SW5mZXJlbmNlOiBmYWxzZSwKICAgICAgYm9vbCBpc0NvbnN0OiBmYWxzZSwKICAgICAgYm9vbCBpc0ltcGxpY2l0RXh0ZW5zaW9uTWVtYmVyOiBmYWxzZX0pIHsKICAgIEZ1bmN0aW9uVHlwZSBleHRlbnNpb25GdW5jdGlvblR5cGUgPSBuZXcgRnVuY3Rpb25UeXBlKAogICAgICAgIFtjYWxsZWVUeXBlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmZpcnN0XSwgY29uc3QgRHluYW1pY1R5cGUoKSwKICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50OiAxLAogICAgICAgIHR5cGVQYXJhbWV0ZXJzOiBjYWxsZWVUeXBlLnR5cGVQYXJhbWV0ZXJzCiAgICAgICAgICAgIC50YWtlKGV4dGVuc2lvblR5cGVQYXJhbWV0ZXJDb3VudCkKICAgICAgICAgICAgLnRvTGlzdCgpKTsKICAgIEFyZ3VtZW50cyBleHRlbnNpb25Bcmd1bWVudHMgPSBoZWxwZXIuZm9yZXN0LmNyZWF0ZUFyZ3VtZW50cygKICAgICAgICBhcmd1bWVudHMuZmlsZU9mZnNldCwgW2FyZ3VtZW50cy5wb3NpdGlvbmFsLmZpcnN0XSwKICAgICAgICB0eXBlczogZ2V0RXhwbGljaXRFeHRlbnNpb25UeXBlQXJndW1lbnRzKGFyZ3VtZW50cykpOwogICAgX2luZmVySW52b2NhdGlvbihjb25zdCBVbmtub3duVHlwZSgpLCBvZmZzZXQsIGV4dGVuc2lvbkZ1bmN0aW9uVHlwZSwKICAgICAgICBleHRlbnNpb25GdW5jdGlvblR5cGUucmV0dXJuVHlwZSwgZXh0ZW5zaW9uQXJndW1lbnRzLAogICAgICAgIHNraXBUeXBlQXJndW1lbnRJbmZlcmVuY2U6IHNraXBUeXBlQXJndW1lbnRJbmZlcmVuY2UsCiAgICAgICAgcmVjZWl2ZXJUeXBlOiByZWNlaXZlclR5cGUsCiAgICAgICAgaXNJbXBsaWNpdEV4dGVuc2lvbk1lbWJlcjogaXNJbXBsaWNpdEV4dGVuc2lvbk1lbWJlcik7CiAgICBTdWJzdGl0dXRpb24gZXh0ZW5zaW9uU3Vic3RpdHV0aW9uID0gU3Vic3RpdHV0aW9uLmZyb21QYWlycygKICAgICAgICBleHRlbnNpb25GdW5jdGlvblR5cGUudHlwZVBhcmFtZXRlcnMsIGV4dGVuc2lvbkFyZ3VtZW50cy50eXBlcyk7CgogICAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0YXJnZXRUeXBlUGFyYW1ldGVycyA9IGNvbnN0IDxUeXBlUGFyYW1ldGVyPltdOwogICAgaWYgKGNhbGxlZVR5cGUudHlwZVBhcmFtZXRlcnMubGVuZ3RoID4gZXh0ZW5zaW9uVHlwZVBhcmFtZXRlckNvdW50KSB7CiAgICAgIHRhcmdldFR5cGVQYXJhbWV0ZXJzID0KICAgICAgICAgIGNhbGxlZVR5cGUudHlwZVBhcmFtZXRlcnMuc2tpcChleHRlbnNpb25UeXBlUGFyYW1ldGVyQ291bnQpLnRvTGlzdCgpOwogICAgfQogICAgRnVuY3Rpb25UeXBlIHRhcmdldEZ1bmN0aW9uVHlwZSA9IG5ldyBGdW5jdGlvblR5cGUoCiAgICAgICAgY2FsbGVlVHlwZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5za2lwKDEpLnRvTGlzdCgpLCBjYWxsZWVUeXBlLnJldHVyblR5cGUsCiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogY2FsbGVlVHlwZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50IC0gMSwKICAgICAgICBuYW1lZFBhcmFtZXRlcnM6IGNhbGxlZVR5cGUubmFtZWRQYXJhbWV0ZXJzLAogICAgICAgIHR5cGVQYXJhbWV0ZXJzOiB0YXJnZXRUeXBlUGFyYW1ldGVycyk7CiAgICB0YXJnZXRGdW5jdGlvblR5cGUgPQogICAgICAgIGV4dGVuc2lvblN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZSh0YXJnZXRGdW5jdGlvblR5cGUpOwogICAgRGFydFR5cGUgdGFyZ2V0UmV0dXJuVHlwZSA9CiAgICAgICAgZXh0ZW5zaW9uU3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKHJldHVyblR5cGUpOwogICAgQXJndW1lbnRzIHRhcmdldEFyZ3VtZW50cyA9IGhlbHBlci5mb3Jlc3QuY3JlYXRlQXJndW1lbnRzKAogICAgICAgIGFyZ3VtZW50cy5maWxlT2Zmc2V0LCBhcmd1bWVudHMucG9zaXRpb25hbC5za2lwKDEpLnRvTGlzdCgpLAogICAgICAgIG5hbWVkOiBhcmd1bWVudHMubmFtZWQsIHR5cGVzOiBnZXRFeHBsaWNpdFR5cGVBcmd1bWVudHMoYXJndW1lbnRzKSk7CiAgICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGUgPSBfaW5mZXJJbnZvY2F0aW9uKHR5cGVDb250ZXh0LCBvZmZzZXQsCiAgICAgICAgdGFyZ2V0RnVuY3Rpb25UeXBlLCB0YXJnZXRSZXR1cm5UeXBlLCB0YXJnZXRBcmd1bWVudHMsCiAgICAgICAgaXNPdmVybG9hZGVkQXJpdGhtZXRpY09wZXJhdG9yOiBpc092ZXJsb2FkZWRBcml0aG1ldGljT3BlcmF0b3IsCiAgICAgICAgc2tpcFR5cGVBcmd1bWVudEluZmVyZW5jZTogc2tpcFR5cGVBcmd1bWVudEluZmVyZW5jZSwKICAgICAgICBpc0NvbnN0OiBpc0NvbnN0KTsKICAgIGFyZ3VtZW50cy5wb3NpdGlvbmFsLmNsZWFyKCk7CiAgICBhcmd1bWVudHMucG9zaXRpb25hbC5hZGRBbGwoZXh0ZW5zaW9uQXJndW1lbnRzLnBvc2l0aW9uYWwpOwogICAgYXJndW1lbnRzLnBvc2l0aW9uYWwuYWRkQWxsKHRhcmdldEFyZ3VtZW50cy5wb3NpdGlvbmFsKTsKICAgIHNldFBhcmVudHMoYXJndW1lbnRzLnBvc2l0aW9uYWwsIGFyZ3VtZW50cyk7CiAgICAvLyBUaGUgYHRhcmdldEFyZ3VtZW50cy5uYW1lZGAgaXMgdGhlIHNhbWUgbGlzdCBhcyBgYXJndW1lbnRzLm5hbWVkYCBzbwogICAgLy8gd2UganVzdCBuZWVkIHRvIGVuc3VyZSB0aGF0IHBhcmVudCByZWxhdGlvbnMgYXJlIHJlYWxpZ25lZC4KICAgIHNldFBhcmVudHMoYXJndW1lbnRzLm5hbWVkLCBhcmd1bWVudHMpOwogICAgYXJndW1lbnRzLnR5cGVzLmNsZWFyKCk7CiAgICBhcmd1bWVudHMudHlwZXMuYWRkQWxsKGV4dGVuc2lvbkFyZ3VtZW50cy50eXBlcyk7CiAgICBhcmd1bWVudHMudHlwZXMuYWRkQWxsKHRhcmdldEFyZ3VtZW50cy50eXBlcyk7CiAgICByZXR1cm4gaW5mZXJyZWRUeXBlOwogIH0KCiAgLy8vIFBlcmZvcm1zIHRoZSB0eXBlIGluZmVyZW5jZSBzdGVwcyB0aGF0IGFyZSBzaGFyZWQgYnkgYWxsIGtpbmRzIG9mCiAgLy8vIGludm9jYXRpb25zIChjb25zdHJ1Y3RvcnMsIGluc3RhbmNlIG1ldGhvZHMsIGFuZCBzdGF0aWMgbWV0aG9kcykuCiAgRGFydFR5cGUgX2luZmVySW52b2NhdGlvbihEYXJ0VHlwZSB0eXBlQ29udGV4dCwgaW50IG9mZnNldCwKICAgICAgRnVuY3Rpb25UeXBlIGNhbGxlZVR5cGUsIERhcnRUeXBlIHJldHVyblR5cGUsIEFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIHtib29sIGlzT3ZlcmxvYWRlZEFyaXRobWV0aWNPcGVyYXRvcjogZmFsc2UsCiAgICAgIERhcnRUeXBlIHJlY2VpdmVyVHlwZSwKICAgICAgYm9vbCBza2lwVHlwZUFyZ3VtZW50SW5mZXJlbmNlOiBmYWxzZSwKICAgICAgYm9vbCBpc0NvbnN0OiBmYWxzZSwKICAgICAgYm9vbCBpc0ltcGxpY2l0RXh0ZW5zaW9uTWVtYmVyOiBmYWxzZX0pIHsKICAgIGxhc3RJbmZlcnJlZFN1YnN0aXR1dGlvbiA9IG51bGw7CiAgICBsYXN0Q2FsbGVlVHlwZSA9IG51bGw7CiAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IGNhbGxlZVR5cGVQYXJhbWV0ZXJzID0gY2FsbGVlVHlwZS50eXBlUGFyYW1ldGVyczsKICAgIGlmIChjYWxsZWVUeXBlUGFyYW1ldGVycy5pc05vdEVtcHR5KSB7CiAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCBvbmUgb2YgdGhlIGNhbGxlZSB0eXBlIHBhcmFtZXRlcnMgbWlnaHQgbWF0Y2ggYSB0eXBlCiAgICAgIC8vIHRoYXQgYWxyZWFkeSBleGlzdHMgYXMgcGFydCBvZiBpbmZlcmVuY2UgKGUuZy4gdGhlIHR5cGUgb2YgYW4KICAgICAgLy8gYXJndW1lbnQpLiAgVGhpcyBtaWdodCBoYXBwZW4sIGZvciBpbnN0YW5jZSwgaW4gdGhlIGNhc2Ugd2hlcmUgYQogICAgICAvLyBmdW5jdGlvbiBvciBtZXRob2QgbWFrZXMgYSByZWN1cnNpdmUgY2FsbCB0byBpdHNlbGYuICBUbyBhdm9pZCB0aGUKICAgICAgLy8gY2FsbGVlIHR5cGUgcGFyYW1ldGVycyBhY2NpZGVudGFsbHkgbWF0Y2hpbmcgYSB0eXBlIHRoYXQgYWxyZWFkeQogICAgICAvLyBleGlzdHMsIGFuZCBjcmVhdGluZyBpbnZhbGlkIGluZmVyZW5jZSByZXN1bHRzLCB3ZSBuZWVkIHRvIGNyZWF0ZSBmcmVzaAogICAgICAvLyB0eXBlIHBhcmFtZXRlcnMgZm9yIHRoZSBjYWxsZWUgKHNlZSBkYXJ0YnVnLmNvbS8zMTc1OSkuCiAgICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogaXMgaXQgcG9zc2libGUgdG8gZmluZCBhIG5hcnJvd2VyIHNldCBvZiBjaXJjdW1zdGFuY2VzCiAgICAgIC8vIGluIHdoaWNoIG1lIG11c3QgZG8gdGhpcywgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uPwogICAgICBGcmVzaFR5cGVQYXJhbWV0ZXJzIGZyZXNoID0gZ2V0RnJlc2hUeXBlUGFyYW1ldGVycyhjYWxsZWVUeXBlUGFyYW1ldGVycyk7CiAgICAgIGNhbGxlZVR5cGUgPSBmcmVzaC5hcHBseVRvRnVuY3Rpb25UeXBlKGNhbGxlZVR5cGUpOwogICAgICByZXR1cm5UeXBlID0gZnJlc2guc3Vic3RpdHV0ZShyZXR1cm5UeXBlKTsKICAgICAgY2FsbGVlVHlwZVBhcmFtZXRlcnMgPSBmcmVzaC5mcmVzaFR5cGVQYXJhbWV0ZXJzOwogICAgfQogICAgTGlzdDxEYXJ0VHlwZT4gZXhwbGljaXRUeXBlQXJndW1lbnRzID0gZ2V0RXhwbGljaXRUeXBlQXJndW1lbnRzKGFyZ3VtZW50cyk7CiAgICBib29sIGluZmVyZW5jZU5lZWRlZCA9ICFza2lwVHlwZUFyZ3VtZW50SW5mZXJlbmNlICYmCiAgICAgICAgZXhwbGljaXRUeXBlQXJndW1lbnRzID09IG51bGwgJiYKICAgICAgICBjYWxsZWVUeXBlUGFyYW1ldGVycy5pc05vdEVtcHR5OwogICAgYm9vbCB0eXBlQ2hlY2tzTmVlZGVkID0gIWlzVG9wTGV2ZWw7CiAgICBMaXN0PERhcnRUeXBlPiBpbmZlcnJlZFR5cGVzOwogICAgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbjsKICAgIExpc3Q8RGFydFR5cGU+IGZvcm1hbFR5cGVzOwogICAgTGlzdDxEYXJ0VHlwZT4gYWN0dWFsVHlwZXM7CiAgICBpZiAoaW5mZXJlbmNlTmVlZGVkIHx8IHR5cGVDaGVja3NOZWVkZWQpIHsKICAgICAgZm9ybWFsVHlwZXMgPSBbXTsKICAgICAgYWN0dWFsVHlwZXMgPSBbXTsKICAgIH0KICAgIGlmIChpbmZlcmVuY2VOZWVkZWQpIHsKICAgICAgaWYgKGlzQ29uc3QgJiYgdHlwZUNvbnRleHQgIT0gbnVsbCkgewogICAgICAgIHR5cGVDb250ZXh0ID0KICAgICAgICAgICAgbmV3IFR5cGVWYXJpYWJsZUVsaW1pbmF0b3IoY29yZVR5cGVzKS5zdWJzdGl0dXRlVHlwZSh0eXBlQ29udGV4dCk7CiAgICAgIH0KICAgICAgaW5mZXJyZWRUeXBlcyA9IG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQoCiAgICAgICAgICBjYWxsZWVUeXBlUGFyYW1ldGVycy5sZW5ndGgsIGNvbnN0IFVua25vd25UeXBlKCkpOwogICAgICB0eXBlU2NoZW1hRW52aXJvbm1lbnQuaW5mZXJHZW5lcmljRnVuY3Rpb25PclR5cGUocmV0dXJuVHlwZSwKICAgICAgICAgIGNhbGxlZVR5cGVQYXJhbWV0ZXJzLCBudWxsLCBudWxsLCB0eXBlQ29udGV4dCwgaW5mZXJyZWRUeXBlcyk7CiAgICAgIHN1YnN0aXR1dGlvbiA9CiAgICAgICAgICBTdWJzdGl0dXRpb24uZnJvbVBhaXJzKGNhbGxlZVR5cGVQYXJhbWV0ZXJzLCBpbmZlcnJlZFR5cGVzKTsKICAgIH0gZWxzZSBpZiAoZXhwbGljaXRUeXBlQXJndW1lbnRzICE9IG51bGwgJiYKICAgICAgICBjYWxsZWVUeXBlUGFyYW1ldGVycy5sZW5ndGggPT0gZXhwbGljaXRUeXBlQXJndW1lbnRzLmxlbmd0aCkgewogICAgICBzdWJzdGl0dXRpb24gPQogICAgICAgICAgU3Vic3RpdHV0aW9uLmZyb21QYWlycyhjYWxsZWVUeXBlUGFyYW1ldGVycywgZXhwbGljaXRUeXBlQXJndW1lbnRzKTsKICAgIH0gZWxzZSBpZiAoY2FsbGVlVHlwZVBhcmFtZXRlcnMubGVuZ3RoICE9IDApIHsKICAgICAgc3Vic3RpdHV0aW9uID0gU3Vic3RpdHV0aW9uLmZyb21QYWlycygKICAgICAgICAgIGNhbGxlZVR5cGVQYXJhbWV0ZXJzLAogICAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+LmZpbGxlZCgKICAgICAgICAgICAgICBjYWxsZWVUeXBlUGFyYW1ldGVycy5sZW5ndGgsIGNvbnN0IER5bmFtaWNUeXBlKCkpKTsKICAgIH0KICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogaWYgd2UgYXJlIGRvaW5nIHRvcCBsZXZlbCBpbmZlcmVuY2UgYW5kIHR5cGUgYXJndW1lbnRzCiAgICAvLyB3ZXJlIG9taXR0ZWQsIHJlcG9ydCBhbiBlcnJvci4KICAgIGludCBpID0gMDsKICAgIF9mb3JFYWNoQXJndW1lbnQoYXJndW1lbnRzLCAobmFtZSwgZXhwcmVzc2lvbikgewogICAgICBEYXJ0VHlwZSBmb3JtYWxUeXBlID0gbmFtZSAhPSBudWxsCiAgICAgICAgICA/IGdldE5hbWVkUGFyYW1ldGVyVHlwZShjYWxsZWVUeXBlLCBuYW1lKQogICAgICAgICAgOiBnZXRQb3NpdGlvbmFsUGFyYW1ldGVyVHlwZShjYWxsZWVUeXBlLCBpKyspOwogICAgICBEYXJ0VHlwZSBpbmZlcnJlZEZvcm1hbFR5cGUgPSBzdWJzdGl0dXRpb24gIT0gbnVsbAogICAgICAgICAgPyBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoZm9ybWFsVHlwZSkKICAgICAgICAgIDogZm9ybWFsVHlwZTsKICAgICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwogICAgICBpZiAoaXNJbXBsaWNpdEV4dGVuc2lvbk1lbWJlciAmJiBpID09IDEpIHsKICAgICAgICBhc3NlcnQoCiAgICAgICAgICAgIHJlY2VpdmVyVHlwZSAhPSBudWxsLAogICAgICAgICAgICAiTm8gcmVjZWl2ZXIgdHlwZSBwcm92aWRlZCBmb3IgaW1wbGljaXQgZXh0ZW5zaW9uIG1lbWJlciAiCiAgICAgICAgICAgICJpbnZvY2F0aW9uLiIpOwogICAgICAgIGluZmVycmVkVHlwZSA9IHJlY2VpdmVyVHlwZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHJlc3VsdCA9IGluZmVyRXhwcmVzc2lvbigKICAgICAgICAgICAgZXhwcmVzc2lvbiwKICAgICAgICAgICAgaW5mZXJyZWRGb3JtYWxUeXBlLAogICAgICAgICAgICBpbmZlcmVuY2VOZWVkZWQgfHwKICAgICAgICAgICAgICAgIGlzT3ZlcmxvYWRlZEFyaXRobWV0aWNPcGVyYXRvciB8fAogICAgICAgICAgICAgICAgdHlwZUNoZWNrc05lZWRlZCk7CiAgICAgICAgaW5mZXJyZWRUeXBlID0gcmVzdWx0LmluZmVycmVkVHlwZTsKICAgICAgfQogICAgICBpZiAoaW5mZXJlbmNlTmVlZGVkIHx8IHR5cGVDaGVja3NOZWVkZWQpIHsKICAgICAgICBmb3JtYWxUeXBlcy5hZGQoZm9ybWFsVHlwZSk7CiAgICAgICAgYWN0dWFsVHlwZXMuYWRkKGluZmVycmVkVHlwZSk7CiAgICAgIH0KICAgICAgaWYgKGlzT3ZlcmxvYWRlZEFyaXRobWV0aWNPcGVyYXRvcikgewogICAgICAgIHJldHVyblR5cGUgPSB0eXBlU2NoZW1hRW52aXJvbm1lbnQuZ2V0VHlwZU9mT3ZlcmxvYWRlZEFyaXRobWV0aWMoCiAgICAgICAgICAgIHJlY2VpdmVyVHlwZSwgaW5mZXJyZWRUeXBlKTsKICAgICAgfQogICAgfSk7CgogICAgLy8gQ2hlY2sgZm9yIGFuZCByZW1vdmUgZHVwbGljYXRlZCBuYW1lZCBhcmd1bWVudHMuCiAgICBMaXN0PGtlcm5lbC5OYW1lZEV4cHJlc3Npb24+IG5hbWVkID0gYXJndW1lbnRzLm5hbWVkOwogICAgaWYgKG5hbWVkLmxlbmd0aCA9PSAyKSB7CiAgICAgIGlmIChuYW1lZFswXS5uYW1lID09IG5hbWVkWzFdLm5hbWUpIHsKICAgICAgICBTdHJpbmcgbmFtZSA9IG5hbWVkWzFdLm5hbWU7CiAgICAgICAgRXhwcmVzc2lvbiBlcnJvciA9IGhlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbigKICAgICAgICAgICAgaGVscGVyLmJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZE5hbWVkQXJndW1lbnQud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgICAgICAgIG5hbWVkWzFdLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgICBuYW1lLmxlbmd0aCkpOwogICAgICAgIGFyZ3VtZW50cy5uYW1lZCA9IFtuZXcga2VybmVsLk5hbWVkRXhwcmVzc2lvbihuYW1lZFsxXS5uYW1lLCBlcnJvcildOwogICAgICAgIGZvcm1hbFR5cGVzLnJlbW92ZUxhc3QoKTsKICAgICAgICBhY3R1YWxUeXBlcy5yZW1vdmVMYXN0KCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAobmFtZWQubGVuZ3RoID4gMikgewogICAgICBNYXA8U3RyaW5nLCBrZXJuZWwuTmFtZWRFeHByZXNzaW9uPiBzZWVuTmFtZXMgPQogICAgICAgICAgPFN0cmluZywga2VybmVsLk5hbWVkRXhwcmVzc2lvbj57fTsKICAgICAgYm9vbCBoYXNQcm9ibGVtID0gZmFsc2U7CiAgICAgIGludCBuYW1lZFR5cGVJbmRleCA9IGFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aDsKICAgICAgTGlzdDxrZXJuZWwuTmFtZWRFeHByZXNzaW9uPiB1bmlxdWVOYW1lZCA9IDxrZXJuZWwuTmFtZWRFeHByZXNzaW9uPltdOwogICAgICBmb3IgKGtlcm5lbC5OYW1lZEV4cHJlc3Npb24gZXhwcmVzc2lvbiBpbiBuYW1lZCkgewogICAgICAgIFN0cmluZyBuYW1lID0gZXhwcmVzc2lvbi5uYW1lOwogICAgICAgIGlmIChzZWVuTmFtZXMuY29udGFpbnNLZXkobmFtZSkpIHsKICAgICAgICAgIGhhc1Byb2JsZW0gPSB0cnVlOwogICAgICAgICAga2VybmVsLk5hbWVkRXhwcmVzc2lvbiBwcmV2TmFtZWRFeHByZXNzaW9uID0gc2Vlbk5hbWVzW25hbWVdOwogICAgICAgICAgcHJldk5hbWVkRXhwcmVzc2lvbi52YWx1ZSA9IGhlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbigKICAgICAgICAgICAgICBoZWxwZXIuYnVpbGRQcm9ibGVtKAogICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWROYW1lZEFyZ3VtZW50LndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24uZmlsZU9mZnNldCwKICAgICAgICAgICAgICAgICAgbmFtZS5sZW5ndGgpKQogICAgICAgICAgICAuLnBhcmVudCA9IHByZXZOYW1lZEV4cHJlc3Npb247CiAgICAgICAgICBmb3JtYWxUeXBlcy5yZW1vdmVBdChuYW1lZFR5cGVJbmRleCk7CiAgICAgICAgICBhY3R1YWxUeXBlcy5yZW1vdmVBdChuYW1lZFR5cGVJbmRleCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNlZW5OYW1lc1tuYW1lXSA9IGV4cHJlc3Npb247CiAgICAgICAgICB1bmlxdWVOYW1lZC5hZGQoZXhwcmVzc2lvbik7CiAgICAgICAgICBuYW1lZFR5cGVJbmRleCsrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoaGFzUHJvYmxlbSkgewogICAgICAgIGFyZ3VtZW50cy5uYW1lZCA9IHVuaXF1ZU5hbWVkOwogICAgICB9CiAgICB9CgogICAgaWYgKGluZmVyZW5jZU5lZWRlZCkgewogICAgICB0eXBlU2NoZW1hRW52aXJvbm1lbnQuaW5mZXJHZW5lcmljRnVuY3Rpb25PclR5cGUoCiAgICAgICAgICByZXR1cm5UeXBlLAogICAgICAgICAgY2FsbGVlVHlwZVBhcmFtZXRlcnMsCiAgICAgICAgICBmb3JtYWxUeXBlcywKICAgICAgICAgIGFjdHVhbFR5cGVzLAogICAgICAgICAgdHlwZUNvbnRleHQsCiAgICAgICAgICBpbmZlcnJlZFR5cGVzKTsKICAgICAgc3Vic3RpdHV0aW9uID0KICAgICAgICAgIFN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoY2FsbGVlVHlwZVBhcmFtZXRlcnMsIGluZmVycmVkVHlwZXMpOwogICAgICBpbnN0cnVtZW50YXRpb24/LnJlY29yZCh1cmksIG9mZnNldCwgJ3R5cGVBcmdzJywKICAgICAgICAgIG5ldyBJbnN0cnVtZW50YXRpb25WYWx1ZUZvclR5cGVBcmdzKGluZmVycmVkVHlwZXMpKTsKICAgICAgYXJndW1lbnRzLnR5cGVzLmNsZWFyKCk7CiAgICAgIGFyZ3VtZW50cy50eXBlcy5hZGRBbGwoaW5mZXJyZWRUeXBlcyk7CiAgICB9CiAgICBpZiAodHlwZUNoZWNrc05lZWRlZCAmJiAhaWRlbnRpY2FsKGNhbGxlZVR5cGUsIHVua25vd25GdW5jdGlvbikpIHsKICAgICAgTG9jYXRlZE1lc3NhZ2UgYXJnTWVzc2FnZSA9CiAgICAgICAgICBoZWxwZXIuY2hlY2tBcmd1bWVudHNGb3JUeXBlKGNhbGxlZVR5cGUsIGFyZ3VtZW50cywgb2Zmc2V0KTsKICAgICAgaWYgKGFyZ01lc3NhZ2UgIT0gbnVsbCkgewogICAgICAgIGhlbHBlci5hZGRQcm9ibGVtKAogICAgICAgICAgICBhcmdNZXNzYWdlLm1lc3NhZ2VPYmplY3QsIGFyZ01lc3NhZ2UuY2hhck9mZnNldCwgYXJnTWVzc2FnZS5sZW5ndGgpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIEFyZ3VtZW50IGNvdW50cyBhbmQgbmFtZXMgbWF0Y2guIENvbXBhcmUgdHlwZXMuCiAgICAgICAgaW50IG51bVBvc2l0aW9uYWxBcmdzID0gYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm9ybWFsVHlwZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIERhcnRUeXBlIGZvcm1hbFR5cGUgPSBmb3JtYWxUeXBlc1tpXTsKICAgICAgICAgIERhcnRUeXBlIGV4cGVjdGVkVHlwZSA9IHN1YnN0aXR1dGlvbiAhPSBudWxsCiAgICAgICAgICAgICAgPyBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoZm9ybWFsVHlwZSkKICAgICAgICAgICAgICA6IGZvcm1hbFR5cGU7CiAgICAgICAgICBEYXJ0VHlwZSBhY3R1YWxUeXBlID0gYWN0dWFsVHlwZXNbaV07CiAgICAgICAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBpIDwgbnVtUG9zaXRpb25hbEFyZ3MKICAgICAgICAgICAgICA/IGFyZ3VtZW50cy5wb3NpdGlvbmFsW2ldCiAgICAgICAgICAgICAgOiBhcmd1bWVudHMubmFtZWRbaSAtIG51bVBvc2l0aW9uYWxBcmdzXS52YWx1ZTsKICAgICAgICAgIGVuc3VyZUFzc2lnbmFibGUoCiAgICAgICAgICAgICAgZXhwZWN0ZWRUeXBlLCBhY3R1YWxUeXBlLCBleHByZXNzaW9uLCBleHByZXNzaW9uLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgaXNWb2lkQWxsb3dlZDogZXhwZWN0ZWRUeXBlIGlzIFZvaWRUeXBlLAogICAgICAgICAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZUFyZ3VtZW50VHlwZU5vdEFzc2lnbmFibGUpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwogICAgbGFzdEluZmVycmVkU3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uOwogICAgbGFzdENhbGxlZVR5cGUgPSBjYWxsZWVUeXBlOwogICAgaW5mZXJyZWRUeXBlID0gc3Vic3RpdHV0aW9uID09IG51bGwKICAgICAgICA/IHJldHVyblR5cGUKICAgICAgICA6IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShyZXR1cm5UeXBlKTsKICAgIHJldHVybiBpbmZlcnJlZFR5cGU7CiAgfQoKICBEYXJ0VHlwZSBpbmZlckxvY2FsRnVuY3Rpb24oRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCwKICAgICAgaW50IGZpbGVPZmZzZXQsIERhcnRUeXBlIHJldHVybkNvbnRleHQpIHsKICAgIGJvb2wgaGFzSW1wbGljaXRSZXR1cm5UeXBlID0gZmFsc2U7CiAgICBpZiAocmV0dXJuQ29udGV4dCA9PSBudWxsKSB7CiAgICAgIGhhc0ltcGxpY2l0UmV0dXJuVHlwZSA9IHRydWU7CiAgICAgIHJldHVybkNvbnRleHQgPSBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgfQogICAgaWYgKCFpc1RvcExldmVsKSB7CiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gcG9zaXRpb25hbFBhcmFtZXRlcnMgPQogICAgICAgICAgZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnM7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHBhcmFtZXRlciA9IHBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldOwogICAgICAgIGluZmVyTWV0YWRhdGFLZWVwaW5nSGVscGVyKHBhcmFtZXRlci5hbm5vdGF0aW9ucyk7CiAgICAgICAgaWYgKHBhcmFtZXRlci5pbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgICBpbmZlckV4cHJlc3Npb24ocGFyYW1ldGVyLmluaXRpYWxpemVyLCBwYXJhbWV0ZXIudHlwZSwgIWlzVG9wTGV2ZWwpOwogICAgICAgIH0KICAgICAgfQogICAgICBmb3IgKFZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyIGluIGZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycykgewogICAgICAgIGluZmVyTWV0YWRhdGFLZWVwaW5nSGVscGVyKHBhcmFtZXRlci5hbm5vdGF0aW9ucyk7CiAgICAgICAgaW5mZXJFeHByZXNzaW9uKHBhcmFtZXRlci5pbml0aWFsaXplciwgcGFyYW1ldGVyLnR5cGUsICFpc1RvcExldmVsKTsKICAgICAgfQogICAgfQoKICAgIC8vIExldCBgPFQwLCAuLi4sIFRuPmAgYmUgdGhlIHNldCBvZiB0eXBlIHBhcmFtZXRlcnMgb2YgdGhlIGNsb3N1cmUgKHdpdGgKICAgIC8vIGBuYD0wIGlmIHRoZXJlIGFyZSBubyB0eXBlIHBhcmFtZXRlcnMpLgogICAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycyA9IGZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzOwoKICAgIC8vIExldCBgKFAwIHgwLCAuLi4sIFBtIHhtKWAgYmUgdGhlIHNldCBvZiBmb3JtYWwgcGFyYW1ldGVycyBvZiB0aGUgY2xvc3VyZQogICAgLy8gKGluY2x1ZGluZyByZXF1aXJlZCwgcG9zaXRpb25hbCBvcHRpb25hbCwgYW5kIG5hbWVkIG9wdGlvbmFsIHBhcmFtZXRlcnMpLgogICAgLy8gSWYgYW55IHR5cGUgYFBpYCBpcyBtaXNzaW5nLCBkZW5vdGUgaXQgYXMgYF9gLgogICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBmb3JtYWxzID0gZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMudG9MaXN0KCkKICAgICAgLi5hZGRBbGwoZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzKTsKCiAgICAvLyBMZXQgYEJgIGRlbm90ZSB0aGUgY2xvc3VyZSBib2R5LiAgSWYgYEJgIGlzIGFuIGV4cHJlc3Npb24gZnVuY3Rpb24gYm9keQogICAgLy8gKGA9PiBlYCksIHRyZWF0IGl0IGFzIGVxdWl2YWxlbnQgdG8gYSBibG9jayBmdW5jdGlvbiBib2R5IGNvbnRhaW5pbmcgYQogICAgLy8gc2luZ2xlIGByZXR1cm5gIHN0YXRlbWVudCAoYHsgcmV0dXJuIGU7IH1gKS4KCiAgICAvLyBBdHRlbXB0IHRvIG1hdGNoIGBLYCBhcyBhIGZ1bmN0aW9uIHR5cGUgY29tcGF0aWJsZSB3aXRoIHRoZSBjbG9zdXJlICh0aGF0CiAgICAvLyBpcywgb25lIGhhdmluZyBuIHR5cGUgcGFyYW1ldGVycyBhbmQgYSBjb21wYXRpYmxlIHNldCBvZiBmb3JtYWwKICAgIC8vIHBhcmFtZXRlcnMpLiAgSWYgdGhlcmUgaXMgYSBzdWNjZXNzZnVsIG1hdGNoLCBsZXQgYDxTMCwgLi4uLCBTbj5gIGJlIHRoZQogICAgLy8gc2V0IG9mIG1hdGNoZWQgdHlwZSBwYXJhbWV0ZXJzIGFuZCBgKFEwLCAuLi4sIFFtKWAgYmUgdGhlIHNldCBvZiBtYXRjaGVkCiAgICAvLyBmb3JtYWwgcGFyYW1ldGVyIHR5cGVzLCBhbmQgbGV0IGBOYCBiZSB0aGUgcmV0dXJuIHR5cGUuCiAgICBTdWJzdGl0dXRpb24gc3Vic3RpdHV0aW9uOwogICAgTGlzdDxEYXJ0VHlwZT4gZm9ybWFsVHlwZXNGcm9tQ29udGV4dCA9CiAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+LmZpbGxlZChmb3JtYWxzLmxlbmd0aCwgbnVsbCk7CiAgICBpZiAodHlwZUNvbnRleHQgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm9ybWFscy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChpIDwgZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoKSB7CiAgICAgICAgICBmb3JtYWxUeXBlc0Zyb21Db250ZXh0W2ldID0KICAgICAgICAgICAgICBnZXRQb3NpdGlvbmFsUGFyYW1ldGVyVHlwZSh0eXBlQ29udGV4dCwgaSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZvcm1hbFR5cGVzRnJvbUNvbnRleHRbaV0gPQogICAgICAgICAgICAgIGdldE5hbWVkUGFyYW1ldGVyVHlwZSh0eXBlQ29udGV4dCwgZm9ybWFsc1tpXS5uYW1lKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuQ29udGV4dCA9IHR5cGVDb250ZXh0LnJldHVyblR5cGU7CgogICAgICAvLyBMZXQgYFtUL1NdYCBkZW5vdGUgdGhlIHR5cGUgc3Vic3RpdHV0aW9uIHdoZXJlIGVhY2ggYFNpYCBpcyByZXBsYWNlZAogICAgICAvLyB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGBUaWAuCiAgICAgIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gc3Vic3RpdHV0aW9uTWFwID0KICAgICAgICAgIDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlQ29udGV4dC50eXBlUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICAgIHN1YnN0aXR1dGlvbk1hcFt0eXBlQ29udGV4dC50eXBlUGFyYW1ldGVyc1tpXV0gPQogICAgICAgICAgICBpIDwgdHlwZVBhcmFtZXRlcnMubGVuZ3RoCiAgICAgICAgICAgICAgICA/IG5ldyBUeXBlUGFyYW1ldGVyVHlwZSh0eXBlUGFyYW1ldGVyc1tpXSkKICAgICAgICAgICAgICAgIDogY29uc3QgRHluYW1pY1R5cGUoKTsKICAgICAgfQogICAgICBzdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZnJvbU1hcChzdWJzdGl0dXRpb25NYXApOwogICAgfSBlbHNlIHsKICAgICAgLy8gSWYgdGhlIG1hdGNoIGlzIG5vdCBzdWNjZXNzZnVsIGJlY2F1c2UgIGBLYCBpcyBgX2AsIGxldCBhbGwgYFNpYCwgYWxsCiAgICAgIC8vIGBRaWAsIGFuZCBgTmAgYWxsIGJlIGBfYC4KCiAgICAgIC8vIElmIHRoZSBtYXRjaCBpcyBub3Qgc3VjY2Vzc2Z1bCBmb3IgYW55IG90aGVyIHJlYXNvbiwgdGhpcyB3aWxsIHJlc3VsdAogICAgICAvLyBpbiBhIHR5cGUgZXJyb3IsIHNvIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBmcmVlIHRvIGNob29zZSB0aGUgYmVzdAogICAgICAvLyBlcnJvciByZWNvdmVyeSBwYXRoLgogICAgICBzdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZW1wdHk7CiAgICB9CgogICAgLy8gRGVmaW5lIGBSaWAgYXMgZm9sbG93czogaWYgYFBpYCBpcyBub3QgYF9gLCBsZXQgYFJpYCBiZSBgUGlgLgogICAgLy8gT3RoZXJ3aXNlLCBpZiBgUWlgIGlzIG5vdCBgX2AsIGxldCBgUmlgIGJlIHRoZSBncmVhdGVzdCBjbG9zdXJlIG9mCiAgICAvLyBgUWlbVC9TXWAgd2l0aCByZXNwZWN0IHRvIGA/YC4gIE90aGVyd2lzZSwgbGV0IGBSaWAgYmUgYGR5bmFtaWNgLgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmb3JtYWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudCBmb3JtYWwgPSBmb3JtYWxzW2ldOwogICAgICBpZiAoVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50LmlzSW1wbGljaXRseVR5cGVkKGZvcm1hbCkpIHsKICAgICAgICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CiAgICAgICAgaWYgKGZvcm1hbFR5cGVzRnJvbUNvbnRleHRbaV0gPT0gY29yZVR5cGVzLm51bGxDbGFzcy5yYXdUeXBlKSB7CiAgICAgICAgICBpbmZlcnJlZFR5cGUgPSBjb3JlVHlwZXMub2JqZWN0Q2xhc3MucmF3VHlwZTsKICAgICAgICB9IGVsc2UgaWYgKGZvcm1hbFR5cGVzRnJvbUNvbnRleHRbaV0gIT0gbnVsbCkgewogICAgICAgICAgaW5mZXJyZWRUeXBlID0gZ3JlYXRlc3RDbG9zdXJlKGNvcmVUeXBlcywKICAgICAgICAgICAgICBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoZm9ybWFsVHlwZXNGcm9tQ29udGV4dFtpXSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbmZlcnJlZFR5cGUgPSBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgICAgIH0KICAgICAgICBpbnN0cnVtZW50YXRpb24/LnJlY29yZCh1cmksIGZvcm1hbC5maWxlT2Zmc2V0LCAndHlwZScsCiAgICAgICAgICAgIG5ldyBJbnN0cnVtZW50YXRpb25WYWx1ZUZvclR5cGUoaW5mZXJyZWRUeXBlKSk7CiAgICAgICAgZm9ybWFsLnR5cGUgPSBpbmZlcnJlZFR5cGU7CiAgICAgIH0KICAgIH0KCiAgICAvLyBMZXQgYE4nYCBiZSBgTltUL1NdYC4gIFRoZSBbQ2xvc3VyZUNvbnRleHRdIGNvbnN0cnVjdG9yIHdpbGwgYWRqdXN0CiAgICAvLyBhY2NvcmRpbmdseSBpZiB0aGUgY2xvc3VyZSBpcyBkZWNsYXJlZCB3aXRoIGBhc3luY2AsIGBhc3luYypgLCBvcgogICAgLy8gYHN5bmMqYC4KICAgIGlmIChyZXR1cm5Db250ZXh0IGlzISBVbmtub3duVHlwZSkgewogICAgICByZXR1cm5Db250ZXh0ID0gc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKHJldHVybkNvbnRleHQpOwogICAgfQoKICAgIC8vIEFwcGx5IHR5cGUgaW5mZXJlbmNlIHRvIGBCYCBpbiByZXR1cm4gY29udGV4dCBgTuKAmWAsIHdpdGggYW55IHJlZmVyZW5jZXMKICAgIC8vIHRvIGB4aWAgaW4gYEJgIGhhdmluZyB0eXBlIGBQaWAuICBUaGlzIHByb2R1Y2VzIGBC4oCZYC4KICAgIGJvb2wgbmVlZFRvU2V0UmV0dXJuVHlwZSA9IGhhc0ltcGxpY2l0UmV0dXJuVHlwZTsKICAgIENsb3N1cmVDb250ZXh0IG9sZENsb3N1cmVDb250ZXh0ID0gdGhpcy5jbG9zdXJlQ29udGV4dDsKICAgIENsb3N1cmVDb250ZXh0IGNsb3N1cmVDb250ZXh0ID0gbmV3IENsb3N1cmVDb250ZXh0KAogICAgICAgIHRoaXMsIGZ1bmN0aW9uLmFzeW5jTWFya2VyLCByZXR1cm5Db250ZXh0LCBuZWVkVG9TZXRSZXR1cm5UeXBlKTsKICAgIHRoaXMuY2xvc3VyZUNvbnRleHQgPSBjbG9zdXJlQ29udGV4dDsKICAgIGluZmVyU3RhdGVtZW50KGZ1bmN0aW9uLmJvZHkpOwoKICAgIC8vIElmIHRoZSBjbG9zdXJlIGlzIGRlY2xhcmVkIHdpdGggYGFzeW5jKmAgb3IgYHN5bmMqYCwgbGV0IGBNYCBiZSB0aGUKICAgIC8vIGxlYXN0IHVwcGVyIGJvdW5kIG9mIHRoZSB0eXBlcyBvZiB0aGUgYHlpZWxkYCBleHByZXNzaW9ucyBpbiBgQuKAmWAsIG9yCiAgICAvLyBgdm9pZGAgaWYgYELigJlgIGNvbnRhaW5zIG5vIGB5aWVsZGAgZXhwcmVzc2lvbnMuICBPdGhlcndpc2UsIGxldCBgTWAgYmUKICAgIC8vIHRoZSBsZWFzdCB1cHBlciBib3VuZCBvZiB0aGUgdHlwZXMgb2YgdGhlIGByZXR1cm5gIGV4cHJlc3Npb25zIGluIGBC4oCZYCwKICAgIC8vIG9yIGB2b2lkYCBpZiBgQuKAmWAgY29udGFpbnMgbm8gYHJldHVybmAgZXhwcmVzc2lvbnMuCiAgICBEYXJ0VHlwZSBpbmZlcnJlZFJldHVyblR5cGU7CiAgICBpZiAobmVlZFRvU2V0UmV0dXJuVHlwZSkgewogICAgICBpbmZlcnJlZFJldHVyblR5cGUgPSBjbG9zdXJlQ29udGV4dC5pbmZlclJldHVyblR5cGUodGhpcyk7CiAgICB9CgogICAgLy8gVGhlbiB0aGUgcmVzdWx0IG9mIGluZmVyZW5jZSBpcyBgPFQwLCAuLi4sIFRuPihSMCB4MCwgLi4uLCBSbiB4bikgQmAgd2l0aAogICAgLy8gdHlwZSBgPFQwLCAuLi4sIFRuPihSMCwgLi4uLCBSbikgLT4gTeKAmWAgKHdpdGggc29tZSBvZiB0aGUgYFJpYCBhbmQgYHhpYAogICAgLy8gZGVub3RlZCBhcyBvcHRpb25hbCBvciBuYW1lZCBwYXJhbWV0ZXJzLCBpZiBhcHByb3ByaWF0ZSkuCiAgICBpZiAobmVlZFRvU2V0UmV0dXJuVHlwZSkgewogICAgICBpbnN0cnVtZW50YXRpb24/LnJlY29yZCh1cmksIGZpbGVPZmZzZXQsICdyZXR1cm5UeXBlJywKICAgICAgICAgIG5ldyBJbnN0cnVtZW50YXRpb25WYWx1ZUZvclR5cGUoaW5mZXJyZWRSZXR1cm5UeXBlKSk7CiAgICAgIGZ1bmN0aW9uLnJldHVyblR5cGUgPSBpbmZlcnJlZFJldHVyblR5cGU7CiAgICB9CiAgICB0aGlzLmNsb3N1cmVDb250ZXh0ID0gb2xkQ2xvc3VyZUNvbnRleHQ7CiAgICByZXR1cm4gZnVuY3Rpb24uZnVuY3Rpb25UeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBpbmZlck1ldGFkYXRhKAogICAgICBJbmZlcmVuY2VIZWxwZXIgaGVscGVyLCBMaXN0PGtlcm5lbC5FeHByZXNzaW9uPiBhbm5vdGF0aW9ucykgewogICAgaWYgKGFubm90YXRpb25zICE9IG51bGwpIHsKICAgICAgdGhpcy5oZWxwZXIgPSBoZWxwZXI7CiAgICAgIGluZmVyTWV0YWRhdGFLZWVwaW5nSGVscGVyKGFubm90YXRpb25zKTsKICAgICAgdGhpcy5oZWxwZXIgPSBudWxsOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBpbmZlck1ldGFkYXRhS2VlcGluZ0hlbHBlcihMaXN0PGtlcm5lbC5FeHByZXNzaW9uPiBhbm5vdGF0aW9ucykgewogICAgaWYgKGFubm90YXRpb25zICE9IG51bGwpIHsKICAgICAgLy8gUGxhY2UgYW5ub3RhdGlvbnMgaW4gYSB0ZW1wb3JhcnkgbGlzdCBsaXRlcmFsIHNvIHRoYXQgdGhleSB3aWxsIGhhdmUgYQogICAgICAvLyBwYXJlbnQuICBUaGlzIGlzIG5lY2Vzc2FyeSBpbiBjYXNlIGFueSBvZiB0aGUgYW5ub3RhdGlvbnMgbmVlZCB0byBnZXQKICAgICAgLy8gcmVwbGFjZWQgZHVyaW5nIHR5cGUgaW5mZXJlbmNlLgogICAgICBMaXN0PFRyZWVOb2RlPiBwYXJlbnRzID0gYW5ub3RhdGlvbnMubWFwKChlKSA9PiBlLnBhcmVudCkudG9MaXN0KCk7CiAgICAgIG5ldyBMaXN0TGl0ZXJhbChhbm5vdGF0aW9ucyk7CiAgICAgIGZvciAoRXhwcmVzc2lvbiBhbm5vdGF0aW9uIGluIGFubm90YXRpb25zKSB7CiAgICAgICAgaW5mZXJFeHByZXNzaW9uKGFubm90YXRpb24sIGNvbnN0IFVua25vd25UeXBlKCksICFpc1RvcExldmVsKTsKICAgICAgfQogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFubm90YXRpb25zLmxlbmd0aDsgKytpKSB7CiAgICAgICAgYW5ub3RhdGlvbnNbaV0ucGFyZW50ID0gcGFyZW50c1tpXTsKICAgICAgfQogICAgfQogIH0KCiAgLy8vIFBlcmZvcm1zIHRoZSBjb3JlIHR5cGUgaW5mZXJlbmNlIGFsZ29yaXRobSBmb3IgbWV0aG9kIGludm9jYXRpb25zICh0aGlzCiAgLy8vIGhhbmRsZXMgYm90aCBudWxsLWF3YXJlIGFuZCBub24tbnVsbC1hd2FyZSBtZXRob2QgaW52b2NhdGlvbnMpLgogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgaW5mZXJNZXRob2RJbnZvY2F0aW9uKAogICAgICBrZXJuZWwuRXhwcmVzc2lvbiBleHByZXNzaW9uLAogICAgICBrZXJuZWwuRXhwcmVzc2lvbiByZWNlaXZlciwKICAgICAgaW50IGZpbGVPZmZzZXQsCiAgICAgIGJvb2wgaXNJbXBsaWNpdENhbGwsCiAgICAgIERhcnRUeXBlIHR5cGVDb250ZXh0LAogICAgICB7VmFyaWFibGVEZWNsYXJhdGlvbiByZWNlaXZlclZhcmlhYmxlLAogICAgICBNZXRob2RJbnZvY2F0aW9uIGRlc3VnYXJlZEludm9jYXRpb24sCiAgICAgIE9iamVjdEFjY2Vzc1RhcmdldCB0YXJnZXQsCiAgICAgIE5hbWUgbWV0aG9kTmFtZSwKICAgICAgQXJndW1lbnRzIGFyZ3VtZW50c30pIHsKICAgIGFzc2VydChkZXN1Z2FyZWRJbnZvY2F0aW9uID09IG51bGwgfHwgdGFyZ2V0ID09IG51bGwpOwogICAgYXNzZXJ0KGRlc3VnYXJlZEludm9jYXRpb24gIT0gbnVsbCB8fCB0YXJnZXQgIT0gbnVsbCk7CiAgICAvLyBGaXJzdCBpbmZlciB0aGUgcmVjZWl2ZXIgc28gd2UgY2FuIGxvb2sgdXAgdGhlIG1ldGhvZCB0aGF0IHdhcyBpbnZva2VkLgogICAgRGFydFR5cGUgcmVjZWl2ZXJUeXBlOwogICAgaWYgKHJlY2VpdmVyID09IG51bGwpIHsKICAgICAgcmVjZWl2ZXJUeXBlID0gdGhpc1R5cGU7CiAgICB9IGVsc2UgewogICAgICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHJlc3VsdCA9CiAgICAgICAgICBpbmZlckV4cHJlc3Npb24ocmVjZWl2ZXIsIGNvbnN0IFVua25vd25UeXBlKCksIHRydWUpOwogICAgICByZWNlaXZlclR5cGUgPSByZXN1bHQuaW5mZXJyZWRUeXBlOwogICAgfQogICAgcmVjZWl2ZXJWYXJpYWJsZT8udHlwZSA9IHJlY2VpdmVyVHlwZTsKICAgIGlmIChkZXN1Z2FyZWRJbnZvY2F0aW9uICE9IG51bGwpIHsKICAgICAgdGFyZ2V0ID0gZmluZE1ldGhvZEludm9jYXRpb25NZW1iZXIocmVjZWl2ZXJUeXBlLCBkZXN1Z2FyZWRJbnZvY2F0aW9uKTsKICAgICAgbWV0aG9kTmFtZSA9IGRlc3VnYXJlZEludm9jYXRpb24ubmFtZTsKICAgICAgYXJndW1lbnRzID0gZGVzdWdhcmVkSW52b2NhdGlvbi5hcmd1bWVudHM7CiAgICB9CiAgICBhc3NlcnQoCiAgICAgICAgdGFyZ2V0ICE9IG51bGwsCiAgICAgICAgIk5vIHRhcmdldCBmb3IgJHtleHByZXNzaW9ufSB3aXRoIGRlc3VnYXJlZCAiCiAgICAgICAgImludm9jYXRpb24gJHtkZXN1Z2FyZWRJbnZvY2F0aW9ufS4iKTsKICAgIGJvb2wgaXNPdmVybG9hZGVkQXJpdGhtZXRpY09wZXJhdG9yID0gdGFyZ2V0LmlzSW5zdGFuY2VNZW1iZXIgJiYKICAgICAgICB0YXJnZXQubWVtYmVyIGlzIFByb2NlZHVyZSAmJgogICAgICAgIHR5cGVTY2hlbWFFbnZpcm9ubWVudC5pc092ZXJsb2FkZWRBcml0aG1ldGljT3BlcmF0b3JBbmRUeXBlKAogICAgICAgICAgICB0YXJnZXQubWVtYmVyLCByZWNlaXZlclR5cGUpOwogICAgRGFydFR5cGUgY2FsbGVlVHlwZSA9IGdldEdldHRlclR5cGUodGFyZ2V0LCByZWNlaXZlclR5cGUpOwogICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9CiAgICAgICAgZ2V0RnVuY3Rpb25UeXBlKHRhcmdldCwgcmVjZWl2ZXJUeXBlLCAhaXNJbXBsaWNpdENhbGwpOwoKICAgIGlmICghdGFyZ2V0LmlzVW5yZXNvbHZlZCAmJgogICAgICAgIGNhbGxlZVR5cGUgaXMhIER5bmFtaWNUeXBlICYmCiAgICAgICAgY2FsbGVlVHlwZSAhPSBjb3JlVHlwZXMuZnVuY3Rpb25DbGFzcy5yYXdUeXBlICYmCiAgICAgICAgaWRlbnRpY2FsKGZ1bmN0aW9uVHlwZSwgdW5rbm93bkZ1bmN0aW9uKSkgewogICAgICBUcmVlTm9kZSBwYXJlbnQgPSBleHByZXNzaW9uLnBhcmVudDsKICAgICAga2VybmVsLkV4cHJlc3Npb24gZXJyb3IgPSBoZWxwZXIud3JhcEluUHJvYmxlbShleHByZXNzaW9uLAogICAgICAgICAgdGVtcGxhdGVJbnZva2VOb25GdW5jdGlvbi53aXRoQXJndW1lbnRzKG1ldGhvZE5hbWUubmFtZSksIG5vTGVuZ3RoKTsKICAgICAgcGFyZW50Py5yZXBsYWNlQ2hpbGQoZXhwcmVzc2lvbiwgZXJyb3IpOwogICAgICByZXR1cm4gY29uc3QgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChjb25zdCBEeW5hbWljVHlwZSgpKTsKICAgIH0KICAgIE1ldGhvZENvbnRyYXZhcmlhbmNlQ2hlY2tLaW5kIGNoZWNrS2luZCA9IHByZUNoZWNrSW52b2NhdGlvbkNvbnRyYXZhcmlhbmNlKAogICAgICAgIHJlY2VpdmVyLAogICAgICAgIHJlY2VpdmVyVHlwZSwKICAgICAgICB0YXJnZXQsCiAgICAgICAgZGVzdWdhcmVkSW52b2NhdGlvbiwKICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgZXhwcmVzc2lvbik7CiAgICBFeHByZXNzaW9uIHJlcGxhY2VtZW50OwogICAgaWYgKHRhcmdldC5pc0V4dGVuc2lvbk1lbWJlcikgewogICAgICBQcm9jZWR1cmUgcHJvY2VkdXJlID0gdGFyZ2V0Lm1lbWJlcjsKICAgICAgZXhwcmVzc2lvbi5wYXJlbnQucmVwbGFjZUNoaWxkKAogICAgICAgICAgZXhwcmVzc2lvbiwKICAgICAgICAgIHJlcGxhY2VtZW50ID0gaGVscGVyLmZvcmVzdC5jcmVhdGVTdGF0aWNJbnZvY2F0aW9uKAogICAgICAgICAgICAgIGV4cHJlc3Npb24uZmlsZU9mZnNldCwKICAgICAgICAgICAgICB0YXJnZXQubWVtYmVyLAogICAgICAgICAgICAgIGFyZ3VtZW50cyA9IGhlbHBlci5mb3Jlc3QuY3JlYXRlQXJndW1lbnRzRm9yRXh0ZW5zaW9uTWV0aG9kKAogICAgICAgICAgICAgICAgICBhcmd1bWVudHMuZmlsZU9mZnNldCwKICAgICAgICAgICAgICAgICAgdGFyZ2V0LmluZmVycmVkRXh0ZW5zaW9uVHlwZUFyZ3VtZW50cy5sZW5ndGgsCiAgICAgICAgICAgICAgICAgIHByb2NlZHVyZS5mdW5jdGlvbi50eXBlUGFyYW1ldGVycy5sZW5ndGggLQogICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmluZmVycmVkRXh0ZW5zaW9uVHlwZUFyZ3VtZW50cy5sZW5ndGgsCiAgICAgICAgICAgICAgICAgIHJlY2VpdmVyLAogICAgICAgICAgICAgICAgICBleHRlbnNpb25UeXBlQXJndW1lbnRzOiB0YXJnZXQuaW5mZXJyZWRFeHRlbnNpb25UeXBlQXJndW1lbnRzLAogICAgICAgICAgICAgICAgICBwb3NpdGlvbmFsQXJndW1lbnRzOiBhcmd1bWVudHMucG9zaXRpb25hbCwKICAgICAgICAgICAgICAgICAgbmFtZWRBcmd1bWVudHM6IGFyZ3VtZW50cy5uYW1lZCwKICAgICAgICAgICAgICAgICAgdHlwZUFyZ3VtZW50czogYXJndW1lbnRzLnR5cGVzKSkpOwogICAgfQogICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlID0gaW5mZXJJbnZvY2F0aW9uKHR5cGVDb250ZXh0LCBmaWxlT2Zmc2V0LAogICAgICAgIGZ1bmN0aW9uVHlwZSwgZnVuY3Rpb25UeXBlLnJldHVyblR5cGUsIGFyZ3VtZW50cywKICAgICAgICBpc092ZXJsb2FkZWRBcml0aG1ldGljT3BlcmF0b3I6IGlzT3ZlcmxvYWRlZEFyaXRobWV0aWNPcGVyYXRvciwKICAgICAgICByZWNlaXZlclR5cGU6IHJlY2VpdmVyVHlwZSwKICAgICAgICBpc0ltcGxpY2l0RXh0ZW5zaW9uTWVtYmVyOiB0YXJnZXQuaXNFeHRlbnNpb25NZW1iZXIpOwogICAgaWYgKG1ldGhvZE5hbWUubmFtZSA9PSAnPT0nKSB7CiAgICAgIGluZmVycmVkVHlwZSA9IGNvcmVUeXBlcy5ib29sQ2xhc3MucmF3VHlwZTsKICAgIH0KICAgIGhhbmRsZUludm9jYXRpb25Db250cmF2YXJpYW5jZShjaGVja0tpbmQsIGRlc3VnYXJlZEludm9jYXRpb24sIGFyZ3VtZW50cywKICAgICAgICBleHByZXNzaW9uLCBpbmZlcnJlZFR5cGUsIGZ1bmN0aW9uVHlwZSwgZmlsZU9mZnNldCk7CiAgICBpZiAoaXNJbXBsaWNpdENhbGwgJiYgdGFyZ2V0LmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgTWVtYmVyIG1lbWJlciA9IHRhcmdldC5tZW1iZXI7CiAgICAgIGlmICghKG1lbWJlciBpcyBQcm9jZWR1cmUgJiYgbWVtYmVyLmtpbmQgPT0gUHJvY2VkdXJlS2luZC5NZXRob2QpKSB7CiAgICAgICAgVHJlZU5vZGUgcGFyZW50ID0gZXhwcmVzc2lvbi5wYXJlbnQ7CiAgICAgICAgRXhwcmVzc2lvbiBlcnJvck5vZGUgPSBoZWxwZXIud3JhcEluUHJvYmxlbSgKICAgICAgICAgICAgZXhwcmVzc2lvbiwKICAgICAgICAgICAgdGVtcGxhdGVJbXBsaWNpdENhbGxPZk5vbk1ldGhvZC53aXRoQXJndW1lbnRzKHJlY2VpdmVyVHlwZSksCiAgICAgICAgICAgIG5vTGVuZ3RoKTsKICAgICAgICBwYXJlbnQ/LnJlcGxhY2VDaGlsZChleHByZXNzaW9uLCBlcnJvck5vZGUpOwogICAgICB9CiAgICB9CgogICAgLy8gSWYgW2FyZ3VtZW50c10gd2VyZSBpbmZlcnJlZCwgY2hlY2sgdGhlbS4KICAgIC8vIFRPRE8oZG1pdHJ5YXMpOiBGaWd1cmUgb3V0IHdoeSBbbGlicmFyeV0gaXMgc29tZXRpbWVzIG51bGw/IEFuc3dlcjoKICAgIC8vIGJlY2F1c2UgdG9wIGxldmVsIGluZmVyZW5jZSBuZXZlciBnb3QgYSBsaWJyYXJ5LiBUaGlzIGhhcyBjaGFuZ2VkIHNvCiAgICAvLyB3ZSBhbHdheXMgaGF2ZSBhIGxpYnJhcnkuIFNob3VsZCB3ZSBzdGlsbCBza2lwIHRoaXMgZm9yIHRvcCBsZXZlbAogICAgLy8gaW5mZXJlbmNlPwogICAgaWYgKCFpc1RvcExldmVsKSB7CiAgICAgIC8vIFthY3R1YWxSZWNlaXZlclR5cGVdLCBbaW50ZXJmYWNlVGFyZ2V0XSwgYW5kIFthY3R1YWxNZXRob2ROYW1lXSBiZWxvdwogICAgICAvLyBhcmUgZm9yIGEgd29ya2Fyb3VuZCBmb3IgdGhlIGNhc2VzIGxpa2UgdGhlIGZvbGxvd2luZzoKICAgICAgLy8KICAgICAgLy8gICAgIGNsYXNzIEMxIHsgdmFyIGYgPSBuZXcgQzIoKTsgfQogICAgICAvLyAgICAgY2xhc3MgQzIgeyBpbnQgY2FsbDxYIGV4dGVuZHMgbnVtPihYIHgpID0+IDQyOyB9CiAgICAgIC8vICAgICBtYWluKCkgeyBDMSBjID0gbmV3IEMxKCk7IGMuZigiZm9vYmFyIik7IH0KICAgICAgRGFydFR5cGUgYWN0dWFsUmVjZWl2ZXJUeXBlOwogICAgICBNZW1iZXIgaW50ZXJmYWNlVGFyZ2V0OwogICAgICBOYW1lIGFjdHVhbE1ldGhvZE5hbWU7CiAgICAgIGlmIChjYWxsZWVUeXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgICBhY3R1YWxSZWNlaXZlclR5cGUgPSBjYWxsZWVUeXBlOwogICAgICAgIGludGVyZmFjZVRhcmdldCA9IG51bGw7CiAgICAgICAgYWN0dWFsTWV0aG9kTmFtZSA9IGNhbGxOYW1lOwogICAgICB9IGVsc2UgewogICAgICAgIGFjdHVhbFJlY2VpdmVyVHlwZSA9IHJlY2VpdmVyVHlwZTsKICAgICAgICBpbnRlcmZhY2VUYXJnZXQgPSB0YXJnZXQuaXNJbnN0YW5jZU1lbWJlciA/IHRhcmdldC5tZW1iZXIgOiBudWxsOwogICAgICAgIGFjdHVhbE1ldGhvZE5hbWUgPSBtZXRob2ROYW1lOwogICAgICB9CiAgICAgIGxpYnJhcnkuY2hlY2tCb3VuZHNJbk1ldGhvZEludm9jYXRpb24oCiAgICAgICAgICBhY3R1YWxSZWNlaXZlclR5cGUsCiAgICAgICAgICB0eXBlU2NoZW1hRW52aXJvbm1lbnQsCiAgICAgICAgICBjbGFzc0hpZXJhcmNoeSwKICAgICAgICAgIHRoaXMsCiAgICAgICAgICBhY3R1YWxNZXRob2ROYW1lLAogICAgICAgICAgaW50ZXJmYWNlVGFyZ2V0LAogICAgICAgICAgYXJndW1lbnRzLAogICAgICAgICAgaGVscGVyLnVyaSwKICAgICAgICAgIGZpbGVPZmZzZXQsCiAgICAgICAgICBpbmZlcnJlZDogZ2V0RXhwbGljaXRUeXBlQXJndW1lbnRzKGFyZ3VtZW50cykgPT0gbnVsbCk7CiAgICB9CgogICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0KGluZmVycmVkVHlwZSwgcmVwbGFjZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBpbmZlclBhcmFtZXRlckluaXRpYWxpemVyKEluZmVyZW5jZUhlbHBlciBoZWxwZXIsCiAgICAgIGtlcm5lbC5FeHByZXNzaW9uIGluaXRpYWxpemVyLCBEYXJ0VHlwZSBkZWNsYXJlZFR5cGUpIHsKICAgIGFzc2VydChjbG9zdXJlQ29udGV4dCA9PSBudWxsKTsKICAgIHRoaXMuaGVscGVyID0gaGVscGVyOwogICAgYXNzZXJ0KGRlY2xhcmVkVHlwZSAhPSBudWxsKTsKICAgIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgcmVzdWx0ID0KICAgICAgICBpbmZlckV4cHJlc3Npb24oaW5pdGlhbGl6ZXIsIGRlY2xhcmVkVHlwZSwgdHJ1ZSk7CiAgICBlbnN1cmVBc3NpZ25hYmxlKAogICAgICAgIGRlY2xhcmVkVHlwZSwgcmVzdWx0LmluZmVycmVkVHlwZSwgaW5pdGlhbGl6ZXIsIGluaXRpYWxpemVyLmZpbGVPZmZzZXQpOwogICAgdGhpcy5oZWxwZXIgPSBudWxsOwogIH0KCiAgLy8vIFBlcmZvcm1zIHRoZSBjb3JlIHR5cGUgaW5mZXJlbmNlIGFsZ29yaXRobSBmb3IgcHJvcGVydHkgZ2V0cyAodGhpcyBoYW5kbGVzCiAgLy8vIGJvdGggbnVsbC1hd2FyZSBhbmQgbm9uLW51bGwtYXdhcmUgcHJvcGVydHkgZ2V0cykuCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCBpbmZlclByb3BlcnR5R2V0KEV4cHJlc3Npb24gZXhwcmVzc2lvbiwKICAgICAgRXhwcmVzc2lvbiByZWNlaXZlciwgaW50IGZpbGVPZmZzZXQsIERhcnRUeXBlIHR5cGVDb250ZXh0LAogICAgICB7VmFyaWFibGVEZWNsYXJhdGlvbiByZWNlaXZlclZhcmlhYmxlLAogICAgICBQcm9wZXJ0eUdldCBkZXN1Z2FyZWRHZXQsCiAgICAgIE9iamVjdEFjY2Vzc1RhcmdldCByZWFkVGFyZ2V0LAogICAgICBOYW1lIHByb3BlcnR5TmFtZSwKICAgICAgYm9vbCBhbGxvd0V4dGVuc2lvbk1ldGhvZHM6IGZhbHNlfSkgewogICAgLy8gRmlyc3QgaW5mZXIgdGhlIHJlY2VpdmVyIHNvIHdlIGNhbiBsb29rIHVwIHRoZSBnZXR0ZXIgdGhhdCB3YXMgaW52b2tlZC4KICAgIERhcnRUeXBlIHJlY2VpdmVyVHlwZTsKICAgIGlmIChyZWNlaXZlciA9PSBudWxsKSB7CiAgICAgIHJlY2VpdmVyVHlwZSA9IHRoaXNUeXBlOwogICAgfSBlbHNlIHsKICAgICAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCByZXN1bHQgPQogICAgICAgICAgaW5mZXJFeHByZXNzaW9uKHJlY2VpdmVyLCBjb25zdCBVbmtub3duVHlwZSgpLCB0cnVlKTsKICAgICAgcmVjZWl2ZXJUeXBlID0gcmVzdWx0LmluZmVycmVkVHlwZTsKICAgIH0KICAgIHJlY2VpdmVyVmFyaWFibGU/LnR5cGUgPSByZWNlaXZlclR5cGU7CiAgICBwcm9wZXJ0eU5hbWUgPz89IGRlc3VnYXJlZEdldC5uYW1lOwogICAgaWYgKGRlc3VnYXJlZEdldCAhPSBudWxsKSB7CiAgICAgIHJlYWRUYXJnZXQgPSBmaW5kSW50ZXJmYWNlTWVtYmVyKHJlY2VpdmVyVHlwZSwgcHJvcGVydHlOYW1lLCBmaWxlT2Zmc2V0LAogICAgICAgICAgZXJyb3JUZW1wbGF0ZTogdGVtcGxhdGVVbmRlZmluZWRHZXR0ZXIsCiAgICAgICAgICBleHByZXNzaW9uOiBleHByZXNzaW9uLAogICAgICAgICAgcmVjZWl2ZXI6IHJlY2VpdmVyLAogICAgICAgICAgaW5jbHVkZUV4dGVuc2lvbk1ldGhvZHM6IGFsbG93RXh0ZW5zaW9uTWV0aG9kcyk7CiAgICAgIGlmIChyZWFkVGFyZ2V0LmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgICBpZiAoaW5zdHJ1bWVudGF0aW9uICE9IG51bGwgJiYgcmVjZWl2ZXJUeXBlID09IGNvbnN0IER5bmFtaWNUeXBlKCkpIHsKICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5yZWNvcmQodXJpLCBkZXN1Z2FyZWRHZXQuZmlsZU9mZnNldCwgJ3RhcmdldCcsCiAgICAgICAgICAgICAgbmV3IEluc3RydW1lbnRhdGlvblZhbHVlRm9yTWVtYmVyKHJlYWRUYXJnZXQubWVtYmVyKSk7CiAgICAgICAgfQogICAgICAgIGRlc3VnYXJlZEdldC5pbnRlcmZhY2VUYXJnZXQgPSByZWFkVGFyZ2V0Lm1lbWJlcjsKICAgICAgfQogICAgfQogICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlID0gZ2V0R2V0dGVyVHlwZShyZWFkVGFyZ2V0LCByZWNlaXZlclR5cGUpOwogICAgRXhwcmVzc2lvbiByZXBsYWNlZEV4cHJlc3Npb24gPSBoYW5kbGVQcm9wZXJ0eUdldENvbnRyYXZhcmlhbmNlKHJlY2VpdmVyLAogICAgICAgIHJlYWRUYXJnZXQsIGRlc3VnYXJlZEdldCwgZXhwcmVzc2lvbiwgaW5mZXJyZWRUeXBlLCBmaWxlT2Zmc2V0KTsKICAgIEV4cHJlc3Npb24gcmVwbGFjZW1lbnQ7CiAgICBpZiAocmVhZFRhcmdldC5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgIE1lbWJlciBtZW1iZXIgPSByZWFkVGFyZ2V0Lm1lbWJlcjsKICAgICAgaWYgKG1lbWJlciBpcyBQcm9jZWR1cmUgJiYgbWVtYmVyLmtpbmQgPT0gUHJvY2VkdXJlS2luZC5NZXRob2QpIHsKICAgICAgICBpbmZlcnJlZFR5cGUgPQogICAgICAgICAgICBpbnN0YW50aWF0ZVRlYXJPZmYoaW5mZXJyZWRUeXBlLCB0eXBlQ29udGV4dCwgcmVwbGFjZWRFeHByZXNzaW9uKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChyZWFkVGFyZ2V0LmlzRXh0ZW5zaW9uTWVtYmVyKSB7CiAgICAgIGludCBmaWxlT2Zmc2V0ID0gZXhwcmVzc2lvbi5maWxlT2Zmc2V0OwogICAgICBzd2l0Y2ggKHJlYWRUYXJnZXQuZXh0ZW5zaW9uTWV0aG9kS2luZCkgewogICAgICAgIGNhc2Uga2VybmVsLlByb2NlZHVyZUtpbmQuR2V0dGVyOgogICAgICAgICAgZXhwcmVzc2lvbi5wYXJlbnQucmVwbGFjZUNoaWxkKAogICAgICAgICAgICAgIGV4cHJlc3Npb24sCiAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSBleHByZXNzaW9uID0gaGVscGVyLmZvcmVzdC5jcmVhdGVTdGF0aWNJbnZvY2F0aW9uKAogICAgICAgICAgICAgICAgICBmaWxlT2Zmc2V0LAogICAgICAgICAgICAgICAgICByZWFkVGFyZ2V0Lm1lbWJlciwKICAgICAgICAgICAgICAgICAgaGVscGVyLmZvcmVzdC5jcmVhdGVBcmd1bWVudHNGb3JFeHRlbnNpb25NZXRob2QoCiAgICAgICAgICAgICAgICAgICAgICBmaWxlT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgcmVhZFRhcmdldC5pbmZlcnJlZEV4dGVuc2lvblR5cGVBcmd1bWVudHMubGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVyLAogICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uVHlwZUFyZ3VtZW50czoKICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkVGFyZ2V0LmluZmVycmVkRXh0ZW5zaW9uVHlwZUFyZ3VtZW50cykpKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2Uga2VybmVsLlByb2NlZHVyZUtpbmQuTWV0aG9kOgogICAgICAgICAgZXhwcmVzc2lvbi5wYXJlbnQucmVwbGFjZUNoaWxkKAogICAgICAgICAgICAgIGV4cHJlc3Npb24sCiAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSBleHByZXNzaW9uID0gaGVscGVyLmZvcmVzdC5jcmVhdGVTdGF0aWNJbnZvY2F0aW9uKAogICAgICAgICAgICAgICAgICBmaWxlT2Zmc2V0LAogICAgICAgICAgICAgICAgICByZWFkVGFyZ2V0LnRlYXJvZmZUYXJnZXQsCiAgICAgICAgICAgICAgICAgIGhlbHBlci5mb3Jlc3QuY3JlYXRlQXJndW1lbnRzRm9yRXh0ZW5zaW9uTWV0aG9kKAogICAgICAgICAgICAgICAgICAgICAgZmlsZU9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgIHJlYWRUYXJnZXQuaW5mZXJyZWRFeHRlbnNpb25UeXBlQXJndW1lbnRzLmxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlciwKICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvblR5cGVBcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFRhcmdldC5pbmZlcnJlZEV4dGVuc2lvblR5cGVBcmd1bWVudHMpKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIGtlcm5lbC5Qcm9jZWR1cmVLaW5kLlNldHRlcjoKICAgICAgICBjYXNlIGtlcm5lbC5Qcm9jZWR1cmVLaW5kLkZhY3Rvcnk6CiAgICAgICAgY2FzZSBrZXJuZWwuUHJvY2VkdXJlS2luZC5PcGVyYXRvcjoKICAgICAgICAgIHVuaGFuZGxlZCgnJHJlYWRUYXJnZXQnLCAiaW5mZXJQcm9wZXJ0eUdldCIsIGZpbGVPZmZzZXQsIHVyaSk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgc3RvcmVJbmZlcnJlZFR5cGUoZXhwcmVzc2lvbiwgaW5mZXJyZWRUeXBlKTsKICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChpbmZlcnJlZFR5cGUsIHJlcGxhY2VtZW50KTsKICB9CgogIC8vLyBNb2RpZmllcyBhIHR5cGUgYXMgYXBwcm9wcmlhdGUgd2hlbiBpbmZlcnJpbmcgYSBjbG9zdXJlIHJldHVybiB0eXBlLgogIERhcnRUeXBlIGluZmVyUmV0dXJuVHlwZShEYXJ0VHlwZSByZXR1cm5UeXBlKSB7CiAgICByZXR1cm4gcmV0dXJuVHlwZSA/PyB0eXBlU2NoZW1hRW52aXJvbm1lbnQubnVsbFR5cGU7CiAgfQoKICAvLy8gUGVyZm9ybXMgdHlwZSBpbmZlcmVuY2Ugb24gdGhlIGdpdmVuIFtzdGF0ZW1lbnRdLgogIC8vLwogIC8vLyBEZXJpdmVkIGNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHdpdGggbG9naWMgdGhhdCBkaXNwYXRjaGVzIG9uCiAgLy8vIHRoZSBzdGF0ZW1lbnQgdHlwZSBhbmQgY2FsbHMgdGhlIGFwcHJvcHJpYXRlIHNwZWNpYWxpemVkICJpbmZlciIgbWV0aG9kLgogIHZvaWQgaW5mZXJTdGF0ZW1lbnQoU3RhdGVtZW50IHN0YXRlbWVudCk7CgogIC8vLyBQZXJmb3JtcyB0aGUgdHlwZSBpbmZlcmVuY2Ugc3RlcHMgbmVjZXNzYXJ5IHRvIGluc3RhbnRpYXRlIGEgdGVhci1vZmYKICAvLy8gKGlmIG5lY2Vzc2FyeSkuCiAgRGFydFR5cGUgaW5zdGFudGlhdGVUZWFyT2ZmKAogICAgICBEYXJ0VHlwZSB0ZWFyb2ZmVHlwZSwgRGFydFR5cGUgY29udGV4dCwgRXhwcmVzc2lvbiBleHByZXNzaW9uKSB7CiAgICBpZiAodGVhcm9mZlR5cGUgaXMgRnVuY3Rpb25UeXBlICYmCiAgICAgICAgY29udGV4dCBpcyBGdW5jdGlvblR5cGUgJiYKICAgICAgICBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkpIHsKICAgICAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycyA9IHRlYXJvZmZUeXBlLnR5cGVQYXJhbWV0ZXJzOwogICAgICBpZiAodHlwZVBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgewogICAgICAgIExpc3Q8RGFydFR5cGU+IGluZmVycmVkVHlwZXMgPSBuZXcgTGlzdDxEYXJ0VHlwZT4uZmlsbGVkKAogICAgICAgICAgICB0eXBlUGFyYW1ldGVycy5sZW5ndGgsIGNvbnN0IFVua25vd25UeXBlKCkpOwogICAgICAgIEZ1bmN0aW9uVHlwZSBpbnN0YW50aWF0ZWRUeXBlID0gdGVhcm9mZlR5cGUud2l0aG91dFR5cGVQYXJhbWV0ZXJzOwogICAgICAgIHR5cGVTY2hlbWFFbnZpcm9ubWVudC5pbmZlckdlbmVyaWNGdW5jdGlvbk9yVHlwZSgKICAgICAgICAgICAgaW5zdGFudGlhdGVkVHlwZSwgdHlwZVBhcmFtZXRlcnMsIFtdLCBbXSwgY29udGV4dCwgaW5mZXJyZWRUeXBlcyk7CiAgICAgICAgaWYgKCFpc1RvcExldmVsKSB7CiAgICAgICAgICBUcmVlTm9kZSBwYXJlbnQgPSBleHByZXNzaW9uLnBhcmVudDsKICAgICAgICAgIHBhcmVudC5yZXBsYWNlQ2hpbGQoCiAgICAgICAgICAgICAgZXhwcmVzc2lvbiwKICAgICAgICAgICAgICBuZXcgSW5zdGFudGlhdGlvbihleHByZXNzaW9uLCBpbmZlcnJlZFR5cGVzKQogICAgICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gZXhwcmVzc2lvbi5maWxlT2Zmc2V0KTsKICAgICAgICB9CiAgICAgICAgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbiA9CiAgICAgICAgICAgIFN1YnN0aXR1dGlvbi5mcm9tUGFpcnModHlwZVBhcmFtZXRlcnMsIGluZmVycmVkVHlwZXMpOwogICAgICAgIHJldHVybiBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoaW5zdGFudGlhdGVkVHlwZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0ZWFyb2ZmVHlwZTsKICB9CgogIC8vLyBUcnVlIGlmIHRoZSByZXR1cm5lZCBbdHlwZV0gaGFzIG5vbi1jb3ZhcmlhbnQgb2NjdXJyZW5jZXMgb2YgYW55IG9mCiAgLy8vIFtjbGFzc19dJ3MgdHlwZSBwYXJhbWV0ZXJzLgogIC8vLwogIC8vLyBBIG5vbi1jb3ZhcmlhbnQgb2NjdXJyZW5jZSBvZiBhIHR5cGUgcGFyYW1ldGVyIGlzIGVpdGhlciBhIGNvbnRyYXZhcmlhbnQKICAvLy8gb3IgYW4gaW52YXJpYW50IHBvc2l0aW9uLgogIC8vLwogIC8vLyBBIGNvbnRyYXZhcmlhbnQgcG9zaXRpb24gaXMgdG8gdGhlIGxlZnQgb2YgYW4gb2RkIG51bWJlciBvZiBhcnJvd3MuIEZvcgogIC8vLyBleGFtcGxlLCBUIG9jY3VycyBjb250cmF2YXJpYW50bHkgaW4gVCAtPiBUMCwgVDAgLT4gKFQgLT4gVDEpLAogIC8vLyAoVDAgLT4gVCkgLT4gVDEgYnV0IG5vdCBpbiAoVCAtPiBUMCkgLT4gVDEuCiAgLy8vCiAgLy8vIEFuIGludmFyaWFudCBwb3NpdGlvbiBpcyB3aXRob3V0IGEgYm91bmQgb2YgYSB0eXBlIHBhcmFtZXRlci4gRm9yIGV4YW1wbGUsCiAgLy8vIFQgb2NjdXJzIGludmFyaWFudGx5IGluIGBTIEZ1bmN0aW9uPFMgZXh0ZW5kcyBUPigpYCBhbmQKICAvLy8gYHZvaWQgRnVuY3Rpb248UyBleHRlbmRzIEM8VD4+KFMpYC4KICBzdGF0aWMgYm9vbCByZXR1cm5lZFR5cGVQYXJhbWV0ZXJzT2NjdXJOb25Db3ZhcmlhbnRseSgKICAgICAgQ2xhc3MgY2xhc3NfLCBEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAoY2xhc3NfLnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkpIHJldHVybiBmYWxzZTsKICAgIEluY2x1ZGVzVHlwZVBhcmFtZXRlcnNOb25Db3ZhcmlhbnRseSBjaGVja2VyID0KICAgICAgICBuZXcgSW5jbHVkZXNUeXBlUGFyYW1ldGVyc05vbkNvdmFyaWFudGx5KGNsYXNzXy50eXBlUGFyYW1ldGVycywKICAgICAgICAgICAgLy8gV2UgYXJlIGNoZWNraW5nIHRoZSByZXR1cm5lZCB0eXBlIChmaWVsZC9nZXR0ZXIgdHlwZSBvciByZXR1cm4KICAgICAgICAgICAgLy8gdHlwZSBvZiBhIG1ldGhvZCkgYW5kIHRoaXMgaXMgYSBjb3ZhcmlhbnQgcG9zaXRpb24uCiAgICAgICAgICAgIGluaXRpYWxWYXJpYW5jZTogVmFyaWFuY2UuY292YXJpYW50KTsKICAgIHJldHVybiB0eXBlLmFjY2VwdChjaGVja2VyKTsKICB9CgogIC8vLyBEZXRlcm1pbmVzIHRoZSBkaXNwYXRjaCBjYXRlZ29yeSBvZiBhIFtNZXRob2RJbnZvY2F0aW9uXSBhbmQgcmV0dXJucyBhCiAgLy8vIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGFuICJhcyIgY2hlY2sgd2lsbCBuZWVkIHRvIGJlIGFkZGVkIGR1ZSB0bwogIC8vLyBjb250cmF2YXJpYW5jZS4KICBNZXRob2RDb250cmF2YXJpYW5jZUNoZWNrS2luZCBwcmVDaGVja0ludm9jYXRpb25Db250cmF2YXJpYW5jZSgKICAgICAgRXhwcmVzc2lvbiByZWNlaXZlciwKICAgICAgRGFydFR5cGUgcmVjZWl2ZXJUeXBlLAogICAgICBPYmplY3RBY2Nlc3NUYXJnZXQgdGFyZ2V0LAogICAgICBNZXRob2RJbnZvY2F0aW9uIGRlc3VnYXJlZEludm9jYXRpb24sCiAgICAgIEFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbikgewogICAgaWYgKHRhcmdldC5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgIE1lbWJlciBpbnRlcmZhY2VNZW1iZXIgPSB0YXJnZXQubWVtYmVyOwogICAgICBpZiAoaW50ZXJmYWNlTWVtYmVyIGlzIEZpZWxkIHx8CiAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIgaXMgUHJvY2VkdXJlICYmCiAgICAgICAgICAgICAgaW50ZXJmYWNlTWVtYmVyLmtpbmQgPT0gUHJvY2VkdXJlS2luZC5HZXR0ZXIpIHsKICAgICAgICBEYXJ0VHlwZSBnZXRUeXBlID0gZ2V0R2V0dGVyVHlwZSh0YXJnZXQsIHJlY2VpdmVyVHlwZSk7CiAgICAgICAgaWYgKGdldFR5cGUgaXMgRHluYW1pY1R5cGUpIHsKICAgICAgICAgIHJldHVybiBNZXRob2RDb250cmF2YXJpYW5jZUNoZWNrS2luZC5ub25lOwogICAgICAgIH0KICAgICAgICBpZiAocmVjZWl2ZXIgIT0gbnVsbCAmJiByZWNlaXZlciBpcyEgVGhpc0V4cHJlc3Npb24pIHsKICAgICAgICAgIGlmICgoaW50ZXJmYWNlTWVtYmVyIGlzIEZpZWxkICYmCiAgICAgICAgICAgICAgICAgIHJldHVybmVkVHlwZVBhcmFtZXRlcnNPY2N1ck5vbkNvdmFyaWFudGx5KAogICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlTWVtYmVyLmVuY2xvc2luZ0NsYXNzLCBpbnRlcmZhY2VNZW1iZXIudHlwZSkpIHx8CiAgICAgICAgICAgICAgKGludGVyZmFjZU1lbWJlciBpcyBQcm9jZWR1cmUgJiYKICAgICAgICAgICAgICAgICAgcmV0dXJuZWRUeXBlUGFyYW1ldGVyc09jY3VyTm9uQ292YXJpYW50bHkoCiAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIuZW5jbG9zaW5nQ2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIuZnVuY3Rpb24ucmV0dXJuVHlwZSkpKSB7CiAgICAgICAgICAgIHJldHVybiBNZXRob2RDb250cmF2YXJpYW5jZUNoZWNrS2luZC5jaGVja0dldHRlclJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAocmVjZWl2ZXIgIT0gbnVsbCAmJgogICAgICAgICAgcmVjZWl2ZXIgaXMhIFRoaXNFeHByZXNzaW9uICYmCiAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIgaXMgUHJvY2VkdXJlICYmCiAgICAgICAgICByZXR1cm5lZFR5cGVQYXJhbWV0ZXJzT2NjdXJOb25Db3ZhcmlhbnRseSgKICAgICAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIuZW5jbG9zaW5nQ2xhc3MsCiAgICAgICAgICAgICAgaW50ZXJmYWNlTWVtYmVyLmZ1bmN0aW9uLnJldHVyblR5cGUpKSB7CiAgICAgICAgcmV0dXJuIE1ldGhvZENvbnRyYXZhcmlhbmNlQ2hlY2tLaW5kLmNoZWNrTWV0aG9kUmV0dXJuOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gTWV0aG9kQ29udHJhdmFyaWFuY2VDaGVja0tpbmQubm9uZTsKICB9CgogIC8vLyBJZiB0aGUgZ2l2ZW4gW3R5cGVdIGlzIGEgW1R5cGVQYXJhbWV0ZXJUeXBlXSwgcmVzb2x2ZSBpdCB0byBpdHMgYm91bmQuCiAgRGFydFR5cGUgcmVzb2x2ZVR5cGVQYXJhbWV0ZXIoRGFydFR5cGUgdHlwZSkgewogICAgRGFydFR5cGUgcmVzb2x2ZU9uZVN0ZXAoRGFydFR5cGUgdHlwZSkgewogICAgICBpZiAodHlwZSBpcyBUeXBlUGFyYW1ldGVyVHlwZSkgewogICAgICAgIHJldHVybiB0eXBlLmJvdW5kOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CgogICAgRGFydFR5cGUgcmVzb2x2ZWQgPSByZXNvbHZlT25lU3RlcCh0eXBlKTsKICAgIGlmIChyZXNvbHZlZCA9PSBudWxsKSByZXR1cm4gdHlwZTsKCiAgICAvLyBEZXRlY3QgY2lyY3VsYXJpdGllcyB1c2luZyB0aGUgdG9ydG9pc2UtYW5kLWhhcmUgYWxnb3JpdGhtLgogICAgdHlwZSA9IHJlc29sdmVkOwogICAgRGFydFR5cGUgaGFyZSA9IHJlc29sdmVPbmVTdGVwKHR5cGUpOwogICAgaWYgKGhhcmUgPT0gbnVsbCkgcmV0dXJuIHR5cGU7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBpZiAoaWRlbnRpY2FsKHR5cGUsIGhhcmUpKSB7CiAgICAgICAgLy8gV2UgZm91bmQgYSBjaXJjdWxhcml0eS4gIEdpdmUgdXAgYW5kIHJldHVybiBgZHluYW1pY2AuCiAgICAgICAgcmV0dXJuIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICAgIH0KCiAgICAgIC8vIEhhcmUgdGFrZXMgdHdvIHN0ZXBzCiAgICAgIERhcnRUeXBlIHN0ZXAxID0gcmVzb2x2ZU9uZVN0ZXAoaGFyZSk7CiAgICAgIGlmIChzdGVwMSA9PSBudWxsKSByZXR1cm4gaGFyZTsKICAgICAgRGFydFR5cGUgc3RlcDIgPSByZXNvbHZlT25lU3RlcChzdGVwMSk7CiAgICAgIGlmIChzdGVwMiA9PSBudWxsKSByZXR1cm4gaGFyZTsKICAgICAgaGFyZSA9IHN0ZXAyOwoKICAgICAgLy8gVG9ydG9pc2UgdGFrZXMgb25lIHN0ZXAKICAgICAgdHlwZSA9IHJlc29sdmVPbmVTdGVwKHR5cGUpOwogICAgfQogIH0KCiAgRGFydFR5cGUgd3JhcEZ1dHVyZU9yVHlwZShEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlICYmCiAgICAgICAgaWRlbnRpY2FsKHR5cGUuY2xhc3NOb2RlLCBjb3JlVHlwZXMuZnV0dXJlT3JDbGFzcykpIHsKICAgICAgcmV0dXJuIHR5cGU7CiAgICB9CiAgICAvLyBUT0RPKHBhdWxiZXJyeSk6IElmIFt0eXBlXSBpcyBhIHN1YnR5cGUgb2YgYEZ1dHVyZWAsIHNob3VsZCB3ZSBqdXN0CiAgICAvLyByZXR1cm4gaXQgdW5tb2RpZmllZD8KICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVHlwZSgKICAgICAgICBjb3JlVHlwZXMuZnV0dXJlT3JDbGFzcywgPERhcnRUeXBlPlt0eXBlID8/IGNvbnN0IER5bmFtaWNUeXBlKCldKTsKICB9CgogIERhcnRUeXBlIHdyYXBGdXR1cmVUeXBlKERhcnRUeXBlIHR5cGUpIHsKICAgIERhcnRUeXBlIHR5cGVXaXRob3V0RnV0dXJlT3IgPSB0eXBlID8/IGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUoCiAgICAgICAgY29yZVR5cGVzLmZ1dHVyZUNsYXNzLCA8RGFydFR5cGU+W3R5cGVXaXRob3V0RnV0dXJlT3JdKTsKICB9CgogIERhcnRUeXBlIHdyYXBUeXBlKERhcnRUeXBlIHR5cGUsIENsYXNzIGNsYXNzXykgewogICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlKGNsYXNzXywgPERhcnRUeXBlPlt0eXBlID8/IGNvbnN0IER5bmFtaWNUeXBlKCldKTsKICB9CgogIHZvaWQgX2ZvckVhY2hBcmd1bWVudCgKICAgICAgQXJndW1lbnRzIGFyZ3VtZW50cywgdm9pZCBjYWxsYmFjayhTdHJpbmcgbmFtZSwgRXhwcmVzc2lvbiBleHByZXNzaW9uKSkgewogICAgZm9yIChFeHByZXNzaW9uIGV4cHJlc3Npb24gaW4gYXJndW1lbnRzLnBvc2l0aW9uYWwpIHsKICAgICAgY2FsbGJhY2sobnVsbCwgZXhwcmVzc2lvbik7CiAgICB9CiAgICBmb3IgKGtlcm5lbC5OYW1lZEV4cHJlc3Npb24gbmFtZWRFeHByZXNzaW9uIGluIGFyZ3VtZW50cy5uYW1lZCkgewogICAgICBjYWxsYmFjayhuYW1lZEV4cHJlc3Npb24ubmFtZSwgbmFtZWRFeHByZXNzaW9uLnZhbHVlKTsKICAgIH0KICB9CgogIE1lbWJlciBfZ2V0SW50ZXJmYWNlTWVtYmVyKAogICAgICBDbGFzcyBjbGFzc18sIE5hbWUgbmFtZSwgYm9vbCBzZXR0ZXIsIGludCBjaGFyT2Zmc2V0KSB7CiAgICBNZW1iZXIgbWVtYmVyID0gZW5naW5lLmhpZXJhcmNoeUJ1aWxkZXIuZ2V0Q29tYmluZWRNZW1iZXJTaWduYXR1cmVLZXJuZWwoCiAgICAgICAgY2xhc3NfLCBuYW1lLCBzZXR0ZXIsIGNoYXJPZmZzZXQsIGxpYnJhcnkpOwogICAgaWYgKG1lbWJlciA9PSBudWxsICYmIGxpYnJhcnkuaXNQYXRjaCkgewogICAgICAvLyBUT0RPKGRtaXRyeWFzKTogSGFjayBmb3IgcGFydHMuCiAgICAgIG1lbWJlciA/Pz0KICAgICAgICAgIGNsYXNzSGllcmFyY2h5LmdldEludGVyZmFjZU1lbWJlcihjbGFzc18sIG5hbWUsIHNldHRlcjogc2V0dGVyKTsKICAgIH0KICAgIHJldHVybiBUeXBlSW5mZXJlbmNlRW5naW5lLnJlc29sdmVJbmZlcmVuY2VOb2RlKG1lbWJlcik7CiAgfQoKICAvLy8gRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gW2V4cHJlc3Npb25dJ3MgdHlwZSBpcyBwcmVjaXNlbHkga25vd24gYXQgY29tcGlsZQogIC8vLyB0aW1lLgogIC8vLwogIC8vLyBJZiBpdCBpcywgYW4gZXJyb3IgbWVzc2FnZSB0ZW1wbGF0ZSBpcyByZXR1cm5lZCwgd2hpY2ggY2FuIGJlIHVzZWQgYnkgdGhlCiAgLy8vIGNhbGxlciB0byByZXBvcnQgYW4gaW52YWxpZCBjYXN0LiAgT3RoZXJ3aXNlLCBgbnVsbGAgaXMgcmV0dXJuZWQuCiAgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSwgRGFydFR5cGUpPiBfZ2V0UHJlY2lzZVR5cGVFcnJvclRlbXBsYXRlKAogICAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24pIHsKICAgIGlmIChleHByZXNzaW9uIGlzIExpc3RMaXRlcmFsKSB7CiAgICAgIHJldHVybiB0ZW1wbGF0ZUludmFsaWRDYXN0TGl0ZXJhbExpc3Q7CiAgICB9CiAgICBpZiAoZXhwcmVzc2lvbiBpcyBNYXBMaXRlcmFsKSB7CiAgICAgIHJldHVybiB0ZW1wbGF0ZUludmFsaWRDYXN0TGl0ZXJhbE1hcDsKICAgIH0KICAgIGlmIChleHByZXNzaW9uIGlzIFNldExpdGVyYWwpIHsKICAgICAgcmV0dXJuIHRlbXBsYXRlSW52YWxpZENhc3RMaXRlcmFsU2V0OwogICAgfQogICAgaWYgKGV4cHJlc3Npb24gaXMgRnVuY3Rpb25FeHByZXNzaW9uKSB7CiAgICAgIHJldHVybiB0ZW1wbGF0ZUludmFsaWRDYXN0RnVuY3Rpb25FeHByOwogICAgfQogICAgaWYgKGV4cHJlc3Npb24gaXMgQ29uc3RydWN0b3JJbnZvY2F0aW9uKSB7CiAgICAgIHJldHVybiB0ZW1wbGF0ZUludmFsaWRDYXN0TmV3RXhwcjsKICAgIH0KICAgIGlmIChleHByZXNzaW9uIGlzIFN0YXRpY0dldCkgewogICAgICBNZW1iZXIgdGFyZ2V0ID0gZXhwcmVzc2lvbi50YXJnZXQ7CiAgICAgIGlmICh0YXJnZXQgaXMgUHJvY2VkdXJlICYmIHRhcmdldC5raW5kID09IFByb2NlZHVyZUtpbmQuTWV0aG9kKSB7CiAgICAgICAgaWYgKHRhcmdldC5lbmNsb3NpbmdDbGFzcyAhPSBudWxsKSB7CiAgICAgICAgICByZXR1cm4gdGVtcGxhdGVJbnZhbGlkQ2FzdFN0YXRpY01ldGhvZDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHRlbXBsYXRlSW52YWxpZENhc3RUb3BMZXZlbEZ1bmN0aW9uOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmIChleHByZXNzaW9uIGlzIFZhcmlhYmxlR2V0KSB7CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBleHByZXNzaW9uLnZhcmlhYmxlOwogICAgICBpZiAodmFyaWFibGUgaXMgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50ICYmCiAgICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQuaXNMb2NhbEZ1bmN0aW9uKHZhcmlhYmxlKSkgewogICAgICAgIHJldHVybiB0ZW1wbGF0ZUludmFsaWRDYXN0TG9jYWxGdW5jdGlvbjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBib29sIF9zaG91bGRUZWFyT2ZmQ2FsbChEYXJ0VHlwZSBleHBlY3RlZFR5cGUsIERhcnRUeXBlIGFjdHVhbFR5cGUpIHsKICAgIGlmIChleHBlY3RlZFR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJgogICAgICAgIGV4cGVjdGVkVHlwZS5jbGFzc05vZGUgPT0gdHlwZVNjaGVtYUVudmlyb25tZW50LmZ1dHVyZU9yQ2xhc3MpIHsKICAgICAgZXhwZWN0ZWRUeXBlID0gKGV4cGVjdGVkVHlwZSBhcyBJbnRlcmZhY2VUeXBlKS50eXBlQXJndW1lbnRzWzBdOwogICAgfQogICAgaWYgKGV4cGVjdGVkVHlwZSBpcyBGdW5jdGlvblR5cGUpIHJldHVybiB0cnVlOwogICAgaWYgKGV4cGVjdGVkVHlwZSA9PSB0eXBlU2NoZW1hRW52aXJvbm1lbnQucmF3RnVuY3Rpb25UeXBlKSB7CiAgICAgIGlmICghdHlwZVNjaGVtYUVudmlyb25tZW50LmlzU3VidHlwZU9mKGFjdHVhbFR5cGUsIGV4cGVjdGVkVHlwZSkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgTWl4aW5JbmZlcnJlciB7CiAgZmluYWwgQ29yZVR5cGVzIGNvcmVUeXBlczsKICBmaW5hbCBUeXBlQ29uc3RyYWludEdhdGhlcmVyIGdhdGhlcmVyOwoKICBNaXhpbkluZmVycmVyKHRoaXMuY29yZVR5cGVzLCB0aGlzLmdhdGhlcmVyKTsKCiAgU3VwZXJ0eXBlIGFzSW5zdGFudGlhdGlvbk9mKFN1cGVydHlwZSB0eXBlLCBDbGFzcyBzdXBlcmNsYXNzKTsKCiAgdm9pZCByZXBvcnRQcm9ibGVtKE1lc3NhZ2UgbWVzc2FnZSwgQ2xhc3MgY2xzKTsKCiAgdm9pZCBnZW5lcmF0ZUNvbnN0cmFpbnRzKAogICAgICBDbGFzcyBtaXhpbkNsYXNzLCBTdXBlcnR5cGUgYmFzZVR5cGUsIFN1cGVydHlwZSBtaXhpblN1cGVydHlwZSkgewogICAgaWYgKG1peGluU3VwZXJ0eXBlLnR5cGVBcmd1bWVudHMuaXNFbXB0eSkgewogICAgICAvLyBUaGUgc3VwZXJ0eXBlIGNvbnN0cmFpbnQgaXNuJ3QgZ2VuZXJpYzsgaXQgZG9lc24ndCBjb25zdHJhaW4gYW55dGhpbmcuCiAgICB9IGVsc2UgaWYgKG1peGluU3VwZXJ0eXBlLmNsYXNzTm9kZS5pc0Fub255bW91c01peGluKSB7CiAgICAgIC8vIFdlIGhhdmUgZWl0aGVyIGEgbWl4aW4gZGVjbGFyYXRpb24gYG1peGluIE08WDAsIC4uLiwgWG4+IG9uIFMwLCBTMWAgb3IKICAgICAgLy8gYSBWTS1zdHlsZSBzdXBlciBtaXhpbiBgYWJzdHJhY3QgY2xhc3MgTTxYMCwgLi4uLCBYbj4gZXh0ZW5kcyBTMCB3aXRoCiAgICAgIC8vIFMxYCB3aGVyZSBTMCBhbmQgUzEgYXJlIHN1cGVyY2xhc3MgY29uc3RyYWludHMgdGhhdCBwb3NzaWJseSBoYXZlIHR5cGUKICAgICAgLy8gYXJndW1lbnRzLgogICAgICAvLwogICAgICAvLyBJdCBoYXMgYmVlbiBjb21waWxlZCBieSBuYW1pbmcgdGhlIHN1cGVyY2xhc3MgdG8gZWl0aGVyOgogICAgICAvLwogICAgICAvLyBhYnN0cmFjdCBjbGFzcyBTMCZTMTwuLi4+IGV4dGVuZHMgT2JqZWN0IGltcGxlbWVudHMgUzAsIFMxIHt9CiAgICAgIC8vIGFic3RyYWN0IGNsYXNzIE08WDAsIC4uLiwgWG4+IGV4dGVuZHMgUzAmUzE8Li4uPiAuLi4KICAgICAgLy8KICAgICAgLy8gZm9yIGEgbWl4aW4gZGVjbGFyYXRpb24sIG9yIGVsc2U6CiAgICAgIC8vCiAgICAgIC8vIGFic3RyYWN0IGNsYXNzIFMwJlMxPC4uLj4gPSBTMCB3aXRoIFMxOwogICAgICAvLyBhYnN0cmFjdCBjbGFzcyBNPFgwLCAuLi4sIFhuPiBleHRlbmRzIFMwJlMxPC4uLj4KICAgICAgLy8KICAgICAgLy8gZm9yIGEgVk0tc3R5bGUgc3VwZXIgbWl4aW4uICBUaGUgdHlwZSBwYXJhbWV0ZXJzIG9mIFMwJlMxIGFyZSB0aGUgWDAsCiAgICAgIC8vIC4uLiwgWG4gdGhhdCBvY2N1cnJlZCBmcmVlIGluIFMwIGFuZCBTMS4gIFRyZWF0IFMwIGFuZCBTMSBhcyBzZXBhcmF0ZQogICAgICAvLyBzdXBlcnR5cGUgY29uc3RyYWludHMgYnkgcmVjdXJzaXZlbHkgY2FsbGluZyB0aGlzIGFsZ29yaXRobS4KICAgICAgLy8KICAgICAgLy8gSW4gdGhlIERhcnQgVk0gdGhlIG1peGluIGFwcGxpY2F0aW9uIGNsYXNzZXMgdGhlbXNlbHZlcyBhcmUgYWxsCiAgICAgIC8vIGVsaW1pbmF0ZWQgYnkgdHJhbnNsYXRpbmcgdGhlbSB0byBub3JtYWwgY2xhc3Nlcy4gIEluIHRoYXQgY2FzZSwgdGhlCiAgICAgIC8vIG1peGluIGFwcGVhcnMgYXMgdGhlIG9ubHkgaW50ZXJmYWNlIGluIHRoZSBpbnRyb2R1Y2VkIGNsYXNzLiAgV2UKICAgICAgLy8gc3VwcG9ydCB0aHJlZSBmb3JtcyBmb3IgdGhlIHN1cGVyY2xhc3MgY29uc3RyYWludHM6CiAgICAgIC8vCiAgICAgIC8vIGFic3RyYWN0IGNsYXNzIFMwJlMxPC4uLj4gZXh0ZW5kcyBPYmplY3QgaW1wbGVtZW50cyBTMCwgUzEge30KICAgICAgLy8gYWJzdHJhY3QgY2xhc3MgUzAmUzE8Li4uPiA9IFMwIHdpdGggUzE7CiAgICAgIC8vIGFic3RyYWN0IGNsYXNzIFMwJlMxPC4uLj4gZXh0ZW5kcyBTMCBpbXBsZW1lbnRzIFMxIHt9CiAgICAgIENsYXNzIG1peGluU3VwZXJjbGFzcyA9IG1peGluU3VwZXJ0eXBlLmNsYXNzTm9kZTsKICAgICAgaWYgKG1peGluU3VwZXJjbGFzcy5taXhlZEluVHlwZSA9PSBudWxsICYmCiAgICAgICAgICBtaXhpblN1cGVyY2xhc3MuaW1wbGVtZW50ZWRUeXBlcy5sZW5ndGggIT0gMSAmJgogICAgICAgICAgKG1peGluU3VwZXJjbGFzcy5zdXBlcmNsYXNzICE9IGNvcmVUeXBlcy5vYmplY3RDbGFzcyB8fAogICAgICAgICAgICAgIG1peGluU3VwZXJjbGFzcy5pbXBsZW1lbnRlZFR5cGVzLmxlbmd0aCAhPSAyKSkgewogICAgICAgIHVuZXhwZWN0ZWQoCiAgICAgICAgICAgICdDb21waWxlci1nZW5lcmF0ZWQgbWl4aW4gYXBwbGljYXRpb25zIGhhdmUgYSBtaXhpbiBvciBlbHNlICcKICAgICAgICAgICAgICAgICdpbXBsZW1lbnQgZXhhY3RseSBvbmUgdHlwZScsCiAgICAgICAgICAgICckbWl4aW5TdXBlcmNsYXNzIGltcGxlbWVudHMgJwogICAgICAgICAgICAgICAgJyR7bWl4aW5TdXBlcmNsYXNzLmltcGxlbWVudGVkVHlwZXMubGVuZ3RofSB0eXBlcycsCiAgICAgICAgICAgIG1peGluU3VwZXJjbGFzcy5maWxlT2Zmc2V0LAogICAgICAgICAgICBtaXhpblN1cGVyY2xhc3MuZmlsZVVyaSk7CiAgICAgIH0KICAgICAgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tU3VwZXJ0eXBlKG1peGluU3VwZXJ0eXBlKTsKICAgICAgU3VwZXJ0eXBlIHMwLCBzMTsKICAgICAgaWYgKG1peGluU3VwZXJjbGFzcy5pbXBsZW1lbnRlZFR5cGVzLmxlbmd0aCA9PSAyKSB7CiAgICAgICAgczAgPSBtaXhpblN1cGVyY2xhc3MuaW1wbGVtZW50ZWRUeXBlc1swXTsKICAgICAgICBzMSA9IG1peGluU3VwZXJjbGFzcy5pbXBsZW1lbnRlZFR5cGVzWzFdOwogICAgICB9IGVsc2UgaWYgKG1peGluU3VwZXJjbGFzcy5pbXBsZW1lbnRlZFR5cGVzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgczAgPSBtaXhpblN1cGVyY2xhc3Muc3VwZXJ0eXBlOwogICAgICAgIHMxID0gbWl4aW5TdXBlcmNsYXNzLmltcGxlbWVudGVkVHlwZXMuZmlyc3Q7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgczAgPSBtaXhpblN1cGVyY2xhc3Muc3VwZXJ0eXBlOwogICAgICAgIHMxID0gbWl4aW5TdXBlcmNsYXNzLm1peGVkSW5UeXBlOwogICAgICB9CiAgICAgIHMwID0gc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVTdXBlcnR5cGUoczApOwogICAgICBzMSA9IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlU3VwZXJ0eXBlKHMxKTsKICAgICAgZ2VuZXJhdGVDb25zdHJhaW50cyhtaXhpbkNsYXNzLCBiYXNlVHlwZSwgczApOwogICAgICBnZW5lcmF0ZUNvbnN0cmFpbnRzKG1peGluQ2xhc3MsIGJhc2VUeXBlLCBzMSk7CiAgICB9IGVsc2UgewogICAgICAvLyBGaW5kIHRoZSB0eXBlIFUwIHdoaWNoIGlzIGJhc2VUeXBlIGFzIGFuIGluc3RhbmNlIG9mIG1peGluU3VwZXJ0eXBlJ3MKICAgICAgLy8gY2xhc3MuCiAgICAgIFN1cGVydHlwZSBzdXBlcnR5cGUgPQogICAgICAgICAgYXNJbnN0YW50aWF0aW9uT2YoYmFzZVR5cGUsIG1peGluU3VwZXJ0eXBlLmNsYXNzTm9kZSk7CiAgICAgIGlmIChzdXBlcnR5cGUgPT0gbnVsbCkgewogICAgICAgIHJlcG9ydFByb2JsZW0oCiAgICAgICAgICAgIHRlbXBsYXRlTWl4aW5JbmZlcmVuY2VOb01hdGNoaW5nQ2xhc3Mud2l0aEFyZ3VtZW50cyhtaXhpbkNsYXNzLm5hbWUsCiAgICAgICAgICAgICAgICBiYXNlVHlwZS5jbGFzc05vZGUubmFtZSwgbWl4aW5TdXBlcnR5cGUuYXNJbnRlcmZhY2VUeXBlKSwKICAgICAgICAgICAgbWl4aW5DbGFzcyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIEludGVyZmFjZVR5cGUgdTAgPSBTdWJzdGl0dXRpb24uZnJvbVN1cGVydHlwZShiYXNlVHlwZSkKICAgICAgICAgIC5zdWJzdGl0dXRlU3VwZXJ0eXBlKHN1cGVydHlwZSkKICAgICAgICAgIC5hc0ludGVyZmFjZVR5cGU7CiAgICAgIC8vIFdlIHdhbnQgdG8gc29sdmUgVTAgPSBTMCB3aGVyZSBTMCBpcyBtaXhpblN1cGVydHlwZSwgYnV0IHdlIG9ubHkgaGF2ZQogICAgICAvLyBhIHN1YnR5cGUgY29uc3RyYWludHMuICBTb2x2ZSBmb3IgZXF1YWxpdHkgYnkgc29sdmluZwogICAgICAvLyBib3RoIFUwIDw6IFMwIGFuZCBTMCA8OiBVMC4KICAgICAgSW50ZXJmYWNlVHlwZSBzMCA9IG1peGluU3VwZXJ0eXBlLmFzSW50ZXJmYWNlVHlwZTsKICAgICAgZ2F0aGVyZXIudHJ5U3VidHlwZU1hdGNoKHUwLCBzMCk7CiAgICAgIGdhdGhlcmVyLnRyeVN1YnR5cGVNYXRjaChzMCwgdTApOwogICAgfQogIH0KCiAgdm9pZCBpbmZlcihDbGFzcyBjbGFzc05vZGUpIHsKICAgIFN1cGVydHlwZSBtaXhlZEluVHlwZSA9IGNsYXNzTm9kZS5taXhlZEluVHlwZTsKICAgIGFzc2VydChtaXhlZEluVHlwZS50eXBlQXJndW1lbnRzLmV2ZXJ5KCh0KSA9PiB0ID09IGNvbnN0IFVua25vd25UeXBlKCkpKTsKICAgIC8vIE5vdGUgdGhhdCB3ZSBoYXZlIG5vIGFub255bW91cyBtaXhpbiBhcHBsaWNhdGlvbnMsIHRoZXkgaGF2ZSBhbGwKICAgIC8vIGJlZW4gbmFtZWQuICBOb3RlIGFsc28gdGhhdCBtaXhpbiBjb21wb3NpdGlvbiBoYXMgYmVlbiB0cmFuc2xhdGVkCiAgICAvLyBzbyB0aGF0IHdlIG9ubHkgaGF2ZSBtaXhpbiBhcHBsaWNhdGlvbnMgb2YgdGhlIGZvcm0gYFMgd2l0aCBNYC4KICAgIFN1cGVydHlwZSBiYXNlVHlwZSA9IGNsYXNzTm9kZS5zdXBlcnR5cGU7CiAgICBDbGFzcyBtaXhpbkNsYXNzID0gbWl4ZWRJblR5cGUuY2xhc3NOb2RlOwogICAgU3VwZXJ0eXBlIG1peGluU3VwZXJ0eXBlID0gbWl4aW5DbGFzcy5zdXBlcnR5cGU7CiAgICAvLyBHZW5lcmF0ZSBjb25zdHJhaW50cyBiYXNlZCBvbiB0aGUgbWl4aW4ncyBzdXBlcnR5cGUuCiAgICBnZW5lcmF0ZUNvbnN0cmFpbnRzKG1peGluQ2xhc3MsIGJhc2VUeXBlLCBtaXhpblN1cGVydHlwZSk7CiAgICAvLyBTb2x2ZSB0aGVtIHRvIGdldCBhIG1hcCBmcm9tIHR5cGUgcGFyYW1ldGVycyB0byB1cHBlciBhbmQgbG93ZXIKICAgIC8vIGJvdW5kcy4KICAgIE1hcDxUeXBlUGFyYW1ldGVyLCBUeXBlQ29uc3RyYWludD4gcmVzdWx0ID0gZ2F0aGVyZXIuY29tcHV0ZUNvbnN0cmFpbnRzKCk7CiAgICAvLyBHZW5lcmF0ZSBuZXcgdHlwZSBwYXJhbWV0ZXJzIHdpdGggdGhlIHNvbHV0aW9uIGFzIGJvdW5kcy4KICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gcGFyYW1ldGVycyA9IG1peGluQ2xhc3MudHlwZVBhcmFtZXRlcnMubWFwKChwKSB7CiAgICAgIFR5cGVDb25zdHJhaW50IGNvbnN0cmFpbnQgPSByZXN1bHRbcF07CiAgICAgIC8vIEJlY2F1c2Ugd2Ugc29sdmVkIGZvciBlcXVhbGl0eSwgYSB2YWxpZCBzb2x1dGlvbiBoYXMgYSBwYXJhbWV0ZXIKICAgICAgLy8gZWl0aGVyIHVuY29uc3RyYWluZWQgb3IgZWxzZSB3aXRoIGlkZW50aWNhbCB1cHBlciBhbmQgbG93ZXIgYm91bmRzLgogICAgICBpZiAoY29uc3RyYWludCAhPSBudWxsICYmIGNvbnN0cmFpbnQudXBwZXIgIT0gY29uc3RyYWludC5sb3dlcikgewogICAgICAgIHJlcG9ydFByb2JsZW0oCiAgICAgICAgICAgIHRlbXBsYXRlTWl4aW5JbmZlcmVuY2VOb01hdGNoaW5nQ2xhc3Mud2l0aEFyZ3VtZW50cyhtaXhpbkNsYXNzLm5hbWUsCiAgICAgICAgICAgICAgICBiYXNlVHlwZS5jbGFzc05vZGUubmFtZSwgbWl4aW5TdXBlcnR5cGUuYXNJbnRlcmZhY2VUeXBlKSwKICAgICAgICAgICAgbWl4aW5DbGFzcyk7CiAgICAgICAgcmV0dXJuIHA7CiAgICAgIH0KICAgICAgYXNzZXJ0KGNvbnN0cmFpbnQgPT0gbnVsbCB8fCBjb25zdHJhaW50LnVwcGVyID09IGNvbnN0cmFpbnQubG93ZXIpOwogICAgICBib29sIGV4YWN0ID0KICAgICAgICAgIGNvbnN0cmFpbnQgIT0gbnVsbCAmJiBjb25zdHJhaW50LnVwcGVyICE9IGNvbnN0IFVua25vd25UeXBlKCk7CiAgICAgIHJldHVybiBuZXcgVHlwZVBhcmFtZXRlcigKICAgICAgICAgIHAubmFtZSwgZXhhY3QgPyBjb25zdHJhaW50LnVwcGVyIDogcC5ib3VuZCwgcC5kZWZhdWx0VHlwZSk7CiAgICB9KS50b0xpc3QoKTsKICAgIC8vIEJvdW5kcyBtaWdodCBtZW50aW9uIHRoZSBtaXhpbiBjbGFzcydzIHR5cGUgcGFyYW1ldGVycyBzbyB3ZSBoYXZlIHRvCiAgICAvLyBzdWJzdGl0dXRlIHRoZW0gYmVmb3JlIGNhbGxpbmcgaW5zdGFudGlhdGUgdG8gYm91bmRzLgogICAgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoCiAgICAgICAgbWl4aW5DbGFzcy50eXBlUGFyYW1ldGVycywKICAgICAgICBwYXJhbWV0ZXJzLm1hcCgocCkgPT4gbmV3IFR5cGVQYXJhbWV0ZXJUeXBlKHApKS50b0xpc3QoKSk7CiAgICBmb3IgKFR5cGVQYXJhbWV0ZXIgcCBpbiBwYXJhbWV0ZXJzKSB7CiAgICAgIHAuYm91bmQgPSBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUocC5ib3VuZCk7CiAgICB9CiAgICAvLyBVc2UgaW5zdGFudGlhdGUgdG8gYm91bmRzLgogICAgTGlzdDxEYXJ0VHlwZT4gYm91bmRzID0gY2FsY3VsYXRlQm91bmRzKHBhcmFtZXRlcnMsIGNvcmVUeXBlcy5vYmplY3RDbGFzcyk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG1peGVkSW5UeXBlLnR5cGVBcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgbWl4ZWRJblR5cGUudHlwZUFyZ3VtZW50c1tpXSA9IGJvdW5kc1tpXTsKICAgIH0KICB9Cn0KCi8vLyBUaGUgcmVzdWx0IG9mIGFuIGV4cHJlc3Npb24gaW5mZXJlbmNlLgpjbGFzcyBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IHsKICAvLy8gVGhlIGluZmVycmVkIHR5cGUgb2YgdGhlIGV4cHJlc3Npb24uCiAgZmluYWwgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwoKICAvLy8gSWYgbm90LW51bGwsIHRoZSBbcmVwbGFjZW1lbnRdIHRoYXQgcmVwbGFjZWQgdGhlIGluZmVycmVkIGV4cHJlc3Npb24uCiAgZmluYWwgRXhwcmVzc2lvbiByZXBsYWNlbWVudDsKCiAgY29uc3QgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCh0aGlzLmluZmVycmVkVHlwZSwgW3RoaXMucmVwbGFjZW1lbnRdKTsKfQoKZW51bSBPYmplY3RBY2Nlc3NUYXJnZXRLaW5kIHsKICBpbnN0YW5jZU1lbWJlciwKICBjYWxsRnVuY3Rpb24sCiAgdW5yZXNvbHZlZCwKICBleHRlbnNpb25NZW1iZXIsCn0KCi8vLyBSZXN1bHQgZm9yIHBlcmZvcm1pbmcgYW4gYWNjZXNzIG9uIGFuIG9iamVjdCwgbGlrZSBgby5mb29gLCBgby5mb28oKWAgYW5kCi8vLyBgby5mb28gPSAuLi5gLgpjbGFzcyBPYmplY3RBY2Nlc3NUYXJnZXQgewogIGZpbmFsIE9iamVjdEFjY2Vzc1RhcmdldEtpbmQga2luZDsKICBmaW5hbCBNZW1iZXIgbWVtYmVyOwoKICBjb25zdCBPYmplY3RBY2Nlc3NUYXJnZXQuaW50ZXJuYWwodGhpcy5raW5kLCB0aGlzLm1lbWJlcik7CgogIC8vLyBDcmVhdGVzIGFuIGFjY2VzcyB0byB0aGUgaW5zdGFuY2UgW21lbWJlcl0uCiAgZmFjdG9yeSBPYmplY3RBY2Nlc3NUYXJnZXQuaW50ZXJmYWNlTWVtYmVyKE1lbWJlciBtZW1iZXIpIHsKICAgIGFzc2VydChtZW1iZXIgIT0gbnVsbCk7CiAgICByZXR1cm4gbmV3IE9iamVjdEFjY2Vzc1RhcmdldC5pbnRlcm5hbCgKICAgICAgICBPYmplY3RBY2Nlc3NUYXJnZXRLaW5kLmluc3RhbmNlTWVtYmVyLCBtZW1iZXIpOwogIH0KCiAgLy8vIENyZWF0ZXMgYW4gYWNjZXNzIHRvIHRoZSBleHRlbnNpb24gW21lbWJlcl0uCiAgZmFjdG9yeSBPYmplY3RBY2Nlc3NUYXJnZXQuZXh0ZW5zaW9uTWVtYmVyKAogICAgICBNZW1iZXIgbWVtYmVyLAogICAgICBNZW1iZXIgdGVhcm9mZlRhcmdldCwKICAgICAgUHJvY2VkdXJlS2luZCBraW5kLAogICAgICBMaXN0PERhcnRUeXBlPiBpbmZlcnJlZFR5cGVBcmd1bWVudHMpID0gRXh0ZW5zaW9uQWNjZXNzVGFyZ2V0OwoKICAvLy8gQ3JlYXRlcyBhbiBhY2Nlc3MgdG8gYSAnY2FsbCcgbWV0aG9kIG9uIGEgZnVuY3Rpb24sIGkuZS4gYSBmdW5jdGlvbgogIC8vLyBpbnZvY2F0aW9uLgogIGNvbnN0IE9iamVjdEFjY2Vzc1RhcmdldC5jYWxsRnVuY3Rpb24oKQogICAgICA6IHRoaXMuaW50ZXJuYWwoT2JqZWN0QWNjZXNzVGFyZ2V0S2luZC5jYWxsRnVuY3Rpb24sIG51bGwpOwoKICAvLy8gQ3JlYXRlcyBhbiBhY2Nlc3Mgd2l0aCBubyB0YXJnZXQuCiAgLy8vCiAgLy8vIERvbmUgZGVwZW5kaW5nIG9uIGNvbnRleHQgdGhpcyBtYXkgb3IgbWF5IG5vdCBiZSBhbiBlcnJvci4gRm9yIGluc3RhbmNlCiAgLy8vIGlmIHRoZSByZWNlaXZlciBoYXMgdHlwZSBgZHluYW1pY2AgdGhpcyBpcyBub3QgYW4gZXJyb3IuCiAgY29uc3QgT2JqZWN0QWNjZXNzVGFyZ2V0LnVucmVzb2x2ZWQoKQogICAgICA6IHRoaXMuaW50ZXJuYWwoT2JqZWN0QWNjZXNzVGFyZ2V0S2luZC51bnJlc29sdmVkLCBudWxsKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoaXMgaXMgYW4gYWNjZXNzIHRvIGFuIGluc3RhbmNlIG1lbWJlci4KICBib29sIGdldCBpc0luc3RhbmNlTWVtYmVyID0+IGtpbmQgPT0gT2JqZWN0QWNjZXNzVGFyZ2V0S2luZC5pbnN0YW5jZU1lbWJlcjsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoaXMgaXMgYW4gYWNjZXNzIHRvIGFuIGV4dGVuc2lvbiBtZW1iZXIuCiAgYm9vbCBnZXQgaXNFeHRlbnNpb25NZW1iZXIgPT4ga2luZCA9PSBPYmplY3RBY2Nlc3NUYXJnZXRLaW5kLmV4dGVuc2lvbk1lbWJlcjsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoaXMgaXMgYW4gYWNjZXNzIHRvIHRoZSAnY2FsbCcgbWV0aG9kIG9uIGEgZnVuY3Rpb24uCiAgYm9vbCBnZXQgaXNDYWxsRnVuY3Rpb24gPT4ga2luZCA9PSBPYmplY3RBY2Nlc3NUYXJnZXRLaW5kLmNhbGxGdW5jdGlvbjsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoaXMgaXMgYW4gYWNjZXNzIHdpdGhvdXQgYSBrbm93biB0YXJnZXQuCiAgYm9vbCBnZXQgaXNVbnJlc29sdmVkID0+IGtpbmQgPT0gT2JqZWN0QWNjZXNzVGFyZ2V0S2luZC51bnJlc29sdmVkOwoKICAvLy8gUmV0dXJucyB0aGUgb3JpZ2luYWwgcHJvY2VkdXJlIGtpbmQsIGlmIHRoaXMgaXMgYW4gZXh0ZW5zaW9uIG1ldGhvZAogIC8vLyB0YXJnZXQuCiAgLy8vCiAgLy8vIFRoaXMgaXMgbmVlZCBiZWNhdXNlIGdldHRlcnMsIHNldHRlcnMsIGFuZCBtZXRob2RzIGFyZSBjb252ZXJ0ZWQgaW50bwogIC8vLyB0b3AgbGV2ZWwgbWV0aG9kcywgYnV0IGFjY2VzcyBhbmQgaW52b2NhdGlvbiBzaG91bGQgc3RpbGwgYmUgdHJlYXRlZCBhcwogIC8vLyBpZiB0aGV5IGFyZSB0aGUgb3JpZ2luYWwgcHJvY2VkdXJlIGtpbmQuCiAgUHJvY2VkdXJlS2luZCBnZXQgZXh0ZW5zaW9uTWV0aG9kS2luZCA9PgogICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignT2JqZWN0QWNjZXNzVGFyZ2V0LmV4dGVuc2lvbk1ldGhvZEtpbmQnKTsKCiAgLy8vIFJldHVybnMgaW5mZXJyZWQgdHlwZSBhcmd1bWVudHMgZm9yIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgYW4gZXh0ZW5zaW9uCiAgLy8vIG1ldGhvZCB0aGF0IGNvbWVzIGZyb20gdGhlIGV4dGVuc2lvbiBkZWNsYXJhdGlvbi4KICBMaXN0PERhcnRUeXBlPiBnZXQgaW5mZXJyZWRFeHRlbnNpb25UeXBlQXJndW1lbnRzID0+CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgJ09iamVjdEFjY2Vzc1RhcmdldC5pbmZlcnJlZEV4dGVuc2lvblR5cGVBcmd1bWVudHMnKTsKCiAgLy8vIFJldHVybnMgdGhlIG1lbWJlciB0byB1c2UgZm9yIGEgdGVhcm9mZi4KICAvLy8KICAvLy8gVGhpcyBpcyBjdXJyZW50bHkgdXNlZCBmb3IgZXh0ZW5zaW9uIG1ldGhvZHMuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTm9ybWFsaXplIHVzZSBieSBoYXZpbmcgYHJlYWRUYXJnZXRgIGFuZAogIC8vICBgaW52b2tlVGFyZ2V0YD8KICBNZW1iZXIgZ2V0IHRlYXJvZmZUYXJnZXQgPT4KICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ09iamVjdEFjY2Vzc1RhcmdldC50ZWFyb2ZmVGFyZ2V0Jyk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdPYmplY3RBY2Nlc3NUYXJnZXQoJGtpbmQsJG1lbWJlciknOwp9CgpjbGFzcyBFeHRlbnNpb25BY2Nlc3NUYXJnZXQgZXh0ZW5kcyBPYmplY3RBY2Nlc3NUYXJnZXQgewogIGZpbmFsIE1lbWJlciB0ZWFyb2ZmVGFyZ2V0OwogIGZpbmFsIFByb2NlZHVyZUtpbmQgZXh0ZW5zaW9uTWV0aG9kS2luZDsKICBmaW5hbCBMaXN0PERhcnRUeXBlPiBpbmZlcnJlZEV4dGVuc2lvblR5cGVBcmd1bWVudHM7CgogIEV4dGVuc2lvbkFjY2Vzc1RhcmdldChNZW1iZXIgbWVtYmVyLCB0aGlzLnRlYXJvZmZUYXJnZXQsCiAgICAgIHRoaXMuZXh0ZW5zaW9uTWV0aG9kS2luZCwgdGhpcy5pbmZlcnJlZEV4dGVuc2lvblR5cGVBcmd1bWVudHMpCiAgICAgIDogc3VwZXIuaW50ZXJuYWwoT2JqZWN0QWNjZXNzVGFyZ2V0S2luZC5leHRlbnNpb25NZW1iZXIsIG1lbWJlcik7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+CiAgICAgICdFeHRlbnNpb25BY2Nlc3NUYXJnZXQoJGtpbmQsJG1lbWJlciwkZXh0ZW5zaW9uTWV0aG9kS2luZCknOwp9CgpjbGFzcyBFeHRlbnNpb25BY2Nlc3NDYW5kaWRhdGUgewogIGZpbmFsIGJvb2wgaXNQbGF0Zm9ybTsKICBmaW5hbCBEYXJ0VHlwZSBvblR5cGU7CiAgZmluYWwgRGFydFR5cGUgb25UeXBlSW5zdGFudGlhdGVUb0JvdW5kczsKICBmaW5hbCBFeHRlbnNpb25BY2Nlc3NUYXJnZXQgdGFyZ2V0OwoKICBFeHRlbnNpb25BY2Nlc3NDYW5kaWRhdGUoRXh0ZW5zaW9uIGV4dGVuc2lvbiwgdGhpcy5vblR5cGUsCiAgICAgIHRoaXMub25UeXBlSW5zdGFudGlhdGVUb0JvdW5kcywgdGhpcy50YXJnZXQpCiAgICAgIDogaXNQbGF0Zm9ybSA9IGV4dGVuc2lvbi5lbmNsb3NpbmdMaWJyYXJ5LmltcG9ydFVyaS5zY2hlbWUgPT0gJ2RhcnQnOwoKICBib29sIGlzTW9yZVNwZWNpZmljVGhhbihUeXBlU2NoZW1hRW52aXJvbm1lbnQgdHlwZVNjaGVtYUVudmlyb25tZW50LAogICAgICBFeHRlbnNpb25BY2Nlc3NDYW5kaWRhdGUgb3RoZXIpIHsKICAgIGlmICh0aGlzLmlzUGxhdGZvcm0gPT0gb3RoZXIuaXNQbGF0Zm9ybSkgewogICAgICAvLyBCb3RoIGFyZSBwbGF0Zm9ybSBvciBub3QgcGxhdGZvcm0uCiAgICAgIGJvb2wgdGhpc0lzU3VidHlwZSA9CiAgICAgICAgICB0eXBlU2NoZW1hRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YodGhpcy5vblR5cGUsIG90aGVyLm9uVHlwZSk7CiAgICAgIGJvb2wgdGhpc0lzU3VwZXJ0eXBlID0KICAgICAgICAgIHR5cGVTY2hlbWFFbnZpcm9ubWVudC5pc1N1YnR5cGVPZihvdGhlci5vblR5cGUsIHRoaXMub25UeXBlKTsKICAgICAgaWYgKHRoaXNJc1N1YnR5cGUgJiYgIXRoaXNJc1N1cGVydHlwZSkgewogICAgICAgIC8vIFRoaXMgaXMgc3VidHlwZSBvZiBvdGhlciBhbmQgbm90IHZpY2UtdmVyc2EuCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0gZWxzZSBpZiAodGhpc0lzU3VwZXJ0eXBlICYmICF0aGlzSXNTdWJ0eXBlKSB7CiAgICAgICAgLy8gW290aGVyXSBpcyBzdWJ0eXBlIG9mIHRoaXMgYW5kIG5vdCB2aWNlLXZlcnNhLgogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfSBlbHNlIGlmICh0aGlzSXNTdWJ0eXBlIHx8IHRoaXNJc1N1cGVydHlwZSkgewogICAgICAgIHRoaXNJc1N1YnR5cGUgPSB0eXBlU2NoZW1hRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YoCiAgICAgICAgICAgIHRoaXMub25UeXBlSW5zdGFudGlhdGVUb0JvdW5kcywgb3RoZXIub25UeXBlSW5zdGFudGlhdGVUb0JvdW5kcyk7CiAgICAgICAgdGhpc0lzU3VwZXJ0eXBlID0gdHlwZVNjaGVtYUVudmlyb25tZW50LmlzU3VidHlwZU9mKAogICAgICAgICAgICBvdGhlci5vblR5cGVJbnN0YW50aWF0ZVRvQm91bmRzLCB0aGlzLm9uVHlwZUluc3RhbnRpYXRlVG9Cb3VuZHMpOwogICAgICAgIGlmICh0aGlzSXNTdWJ0eXBlICYmICF0aGlzSXNTdXBlcnR5cGUpIHsKICAgICAgICAgIC8vIFRoaXMgaXMgc3VidHlwZSBvZiBvdGhlciBhbmQgbm90IHZpY2UtdmVy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CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnIHNob3cgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1TdGFja05vdEVtcHR5OwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JyBzaG93IGludGVybmFsUHJvYmxlbTsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9zaGFkb3dfYXN0LmRhcnQnIHNob3cgU2hhZG93VHlwZVByb21vdGVyOwoKaW1wb3J0ICd0eXBlX3NjaGVtYV9lbnZpcm9ubWVudC5kYXJ0JyBzaG93IFR5cGVTY2hlbWFFbnZpcm9ubWVudDsKCi8vLyBLZWVwcyB0cmFjayBvZiB0aGUgc3RhdGUgbmVjZXNzYXJ5IHRvIHBlcmZvcm0gdHlwZSBwcm9tb3Rpb24uCi8vLwovLy8gVGhlb3J5IG9mIG9wZXJhdGlvbjogZHVyaW5nIHBhcnNpbmcsIHRoZSBCb2R5QnVpbGRlciBjYWxscyBtZXRob2RzIGluIHRoaXMKLy8vIGNsYXNzIHRvIGluZm9ybSBpdCBvZiBzeW50YWN0aWMgY29uc3RydWN0cyB0aGF0IGFyZSBlbmNvdW50ZXJlZC4gIFRob3NlCi8vLyBtZXRob2RzIG1haW50YWluIGEgbGlua2VkIGxpc3Qgb2YgW1R5cGVQcm9tb3Rpb25GYWN0XSBvYmplY3RzIHRyYWNraW5nIHdoYXQKLy8vIGlzIGtub3duIGFib3V0IHRoZSBzdGF0ZSBvZiBlYWNoIHZhcmlhYmxlIGF0IHRoZSBjdXJyZW50IHBvaW50IGluIHRoZSBjb2RlLAovLy8gYXMgd2VsbCBhcyBhIGxpbmtlZCBsaXN0IG9mIFtUeXBlUHJvbW90aW9uU2NvcGVdIG9iamVjdHMgdHJhY2tpbmcgdGhlCi8vLyBjb21wb25lbnQncyBuZXN0aW5nIHN0cnVjdHVyZS4gIFdoZW5ldmVyIGEgdmFyaWFibGUgaXMgcmVhZCwgdGhlIGN1cnJlbnQKLy8vIFtUeXBlUHJvbW90aW9uRmFjdF0gYW5kIFtUeXBlUHJvbW90aW9uU2NvcGVdIGFyZSByZWNvcmRlZCBmb3IgbGF0ZXIgdXNlLgovLy8KLy8vIER1cmluZyB0eXBlIGluZmVyZW5jZSwgdGhlIFtUeXBlSW5mZXJyZXJdIGNhbGxzIGJhY2sgaW50byB0aGlzIGNsYXNzIHRvIGFzawovLy8gd2hldGhlciBlYWNoIHZhcmlhYmxlIHJlYWQgaXMgYSBwcm9tb3RlZCByZWFkLiAgVGhpcyBpcyBkZXRlcm1pbmVkIGJ5Ci8vLyBleGFtaW5pbmcgdGhlIFtUeXBlUHJvbW90aW9uU2NvcGVdIGFuZCBbVHlwZVByb21vdGlvbkZhY3RdIG9iamVjdHMgdGhhdCB3ZXJlCi8vLyByZWNvcmRlZCBhdCB0aGUgdGltZSB0aGUgdmFyaWFibGUgcmVhZCB3YXMgcGFyc2VkLCBhcyB3ZWxsIGFzIG90aGVyIHN0YXRlCi8vLyB0aGF0IG1heSBoYXZlIGJlZW4gdXBkYXRlZCBsYXRlciBkdXJpbmcgdGhlIHBhcnNpbmcgcHJvY2Vzcy4KLy8vCi8vLyBUaGlzIGNsYXNzIGFic3RyYWN0cyBhd2F5IHRoZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdW5kZXJseWluZyBBU1QgdXNpbmcKLy8vIGdlbmVyaWMgcGFyYW1ldGVycy4gIERlcml2ZWQgY2xhc3NlcyBzaG91bGQgc2V0IEUgYW5kIFYgdG8gdGhlIGNsYXNzIHRoZXkKLy8vIHVzZSB0byByZXByZXNlbnQgZXhwcmVzc2lvbnMgYW5kIHZhcmlhYmxlIGRlY2xhcmF0aW9ucywgcmVzcGVjdGl2ZWx5LgphYnN0cmFjdCBjbGFzcyBUeXBlUHJvbW90ZXIgewogIFR5cGVQcm9tb3Rlci5wcml2YXRlKCk7CgogIGZhY3RvcnkgVHlwZVByb21vdGVyKFR5cGVTY2hlbWFFbnZpcm9ubWVudCB0eXBlU2NoZW1hRW52aXJvbm1lbnQpID0KICAgICAgU2hhZG93VHlwZVByb21vdGVyLnByaXZhdGU7CgogIGZhY3RvcnkgVHlwZVByb21vdGVyLmRpc2FibGVkKCkgPSBUeXBlUHJvbW90ZXJEaXNhYmxlZC5wcml2YXRlOwoKICAvLy8gUmV0dXJucyB0aGUgY3VycmVudCB0eXBlIHByb21vdGlvbiBzY29wZS4KICBUeXBlUHJvbW90aW9uU2NvcGUgZ2V0IGN1cnJlbnRTY29wZTsKCiAgLy8vIENvbXB1dGVzIHRoZSBwcm9tb3RlZCB0eXBlIG9mIGEgdmFyaWFibGUgcmVhZCBoYXZpbmcgdGhlIGdpdmVuIFtmYWN0XSBhbmQKICAvLy8gW3Njb3BlXS4gIFJldHVybnMgYG51bGxgIGlmIHRoZXJlIGlzIG5vIHByb21vdGlvbi4KICAvLy8KICAvLy8gW211dGF0ZWRJbkNsb3N1cmVdIGluZGljYXRlcyB3aGV0aGVyIHRoZSB2YXJpYWJsZSB3YXMgbXV0YXRlZCBpbiBhIGNsb3N1cmUKICAvLy8gc29tZXdoZXJlIGluIHRoZSBtZXRob2QuCiAgRGFydFR5cGUgY29tcHV0ZVByb21vdGVkVHlwZSgKICAgICAgVHlwZVByb21vdGlvbkZhY3QgZmFjdCwgVHlwZVByb21vdGlvblNjb3BlIHNjb3BlLCBib29sIG11dGF0ZWRJbkNsb3N1cmUpOwoKICAvLy8gVXBkYXRlcyB0aGUgc3RhdGUgdG8gcmVmbGVjdCB0aGUgZmFjdCB0aGF0IHdlIGFyZSBlbnRlcmluZyBhbiAiZWxzZSIKICAvLy8gYnJhbmNoLgogIHZvaWQgZW50ZXJFbHNlKCk7CgogIC8vLyBVcGRhdGVzIHRoZSBzdGF0ZSB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgdGhlIExIUyBvZiBhbiAiJiYiIG9yICJ8fCIKICAvLy8gZXhwcmVzc2lvbiBoYXMganVzdCBiZWVuIHBhcnNlZCwgYW5kIHdlIGFyZSBlbnRlcmluZyB0aGUgUkhTLgogIHZvaWQgZW50ZXJMb2dpY2FsRXhwcmVzc2lvbihFeHByZXNzaW9uIGxocywgU3RyaW5nIG9wZXJhdG9yKTsKCiAgLy8vIFVwZGF0ZXMgdGhlIHN0YXRlIHRvIHJlZmxlY3QgdGhlIGZhY3QgdGhhdCB0aGUgImNvbmRpdGlvbiIgcGFydCBvZiBhbiAiaWYiCiAgLy8vIHN0YXRlbWVudCBvciBjb25kaXRpb25hbCBleHByZXNzaW9uIGhhcyBqdXN0IGJlZW4gcGFyc2VkLCBhbmQgd2UgYXJlCiAgLy8vIGVudGVyaW5nIHRoZSAidGhlbiIgYnJhbmNoLgogIHZvaWQgZW50ZXJUaGVuKEV4cHJlc3Npb24gY29uZGl0aW9uKTsKCiAgLy8vIFVwZGF0ZXMgdGhlIHN0YXRlIHRvIHJlZmxlY3QgdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIGV4aXRlZCB0aGUgImVsc2UiCiAgLy8vIGJyYW5jaCBvZiBhbiAiaWYiIHN0YXRlbWVudCBvciBjb25kaXRpb25hbCBleHByZXNzaW9uLgogIHZvaWQgZXhpdENvbmRpdGlvbmFsKCk7CgogIC8vLyBVcGRhdGVzIHRoZSBzdGF0ZSB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBleGl0ZWQgdGhlIFJIUyBvZiBhbgogIC8vLyAiJiYiIG9yICJ8fCIgZXhwcmVzc2lvbi4KICB2b2lkIGV4aXRMb2dpY2FsRXhwcmVzc2lvbihFeHByZXNzaW9uIHJocywgRXhwcmVzc2lvbiBsb2dpY2FsRXhwcmVzc2lvbik7CgogIC8vLyBWZXJpZmllcyB0aGF0IGVudGVyL2V4aXQgY2FsbHMgd2VyZSBwcm9wZXJseSBuZXN0ZWQuCiAgdm9pZCBmaW5pc2hlZCgpOwoKICAvLy8gUmVjb3JkcyB0aGF0IHRoZSBnaXZlbiBbdmFyaWFibGVdIHdhcyBhY2Nlc3NlZCBmb3IgcmVhZGluZywgYW5kIHJldHVybnMgYQogIC8vLyBbVHlwZVByb21vdGlvbkZhY3RdIGRlc2NyaWJpbmcgdGhlIHZhcmlhYmxlJ3MgY3VycmVudCB0eXBlIHByb21vdGlvbgogIC8vLyBzdGF0ZS4KICAvLy8KICAvLy8gW2Z1bmN0aW9uTmVzdGluZ0xldmVsXSBzaG91bGQgYmUgdGhlIGN1cnJlbnQgbmVzdGluZyBsZXZlbCBvZiBjbG9zdXJlcy4KICAvLy8gVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSBpZiB0aGUgdmFyaWFibGUgd2FzIGFjY2Vzc2VkIGluIGEgY2xvc3VyZS4KICBUeXBlUHJvbW90aW9uRmFjdCBnZXRGYWN0Rm9yQWNjZXNzKAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBpbnQgZnVuY3Rpb25OZXN0aW5nTGV2ZWwpOwoKICAvLy8gVXBkYXRlcyB0aGUgc3RhdGUgdG8gcmVmbGVjdCB0aGUgZmFjdCB0aGF0IGFuICJpcyIgY2hlY2sgb2YgYSBsb2NhbAogIC8vLyB2YXJpYWJsZSB3YXMganVzdCBwYXJzZWQuCiAgdm9pZCBoYW5kbGVJc0NoZWNrKEV4cHJlc3Npb24gaXNFeHByZXNzaW9uLCBib29sIGlzSW52ZXJ0ZWQsCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIERhcnRUeXBlIHR5cGUsIGludCBmdW5jdGlvbk5lc3RpbmdMZXZlbCk7CgogIC8vLyBVcGRhdGVzIHRoZSBzdGF0ZSB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgdGhlIGdpdmVuIFt2YXJpYWJsZV0gd2FzCiAgLy8vIG11dGF0ZWQuCiAgdm9pZCBtdXRhdGVWYXJpYWJsZShWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBpbnQgZnVuY3Rpb25OZXN0aW5nTGV2ZWwpOwp9CgovLy8gSW1wbGVtZW50YXRpb24gb2YgW1R5cGVQcm9tb3Rlcl0gd2hpY2ggZG9lc24ndCBkbyBhbnkgdHlwZSBwcm9tb3Rpb24uCi8vLwovLy8gVGhpcyBpcyBpbnRlbmRlZCBmb3IgcHJvZmlsaW5nLCB0byBlbnN1cmUgdGhhdCB0eXBlIGluZmVyZW5jZSBhbmQgdHlwZQovLy8gcHJvbW90aW9uIGRvIG5vdCBzbG93IGRvd24gY29tcGlsYXRpb24gdG9vIG11Y2guCmNsYXNzIFR5cGVQcm9tb3RlckRpc2FibGVkIGV4dGVuZHMgVHlwZVByb21vdGVyIHsKICBUeXBlUHJvbW90ZXJEaXNhYmxlZC5wcml2YXRlKCkgOiBzdXBlci5wcml2YXRlKCk7CgogIEBvdmVycmlkZQogIFR5cGVQcm9tb3Rpb25TY29wZSBnZXQgY3VycmVudFNjb3BlID0+IG51bGw7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGNvbXB1dGVQcm9tb3RlZFR5cGUoVHlwZVByb21vdGlvbkZhY3QgZmFjdCwgVHlwZVByb21vdGlvblNjb3BlIHNjb3BlLAogICAgICAgICAgYm9vbCBtdXRhdGVkSW5DbG9zdXJlKSA9PgogICAgICBudWxsOwoKICBAb3ZlcnJpZGUKICB2b2lkIGVudGVyRWxzZSgpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgZW50ZXJMb2dpY2FsRXhwcmVzc2lvbihFeHByZXNzaW9uIGxocywgU3RyaW5nIG9wZXJhdG9yKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIGVudGVyVGhlbihFeHByZXNzaW9uIGNvbmRpdGlvbikge30KCiAgQG92ZXJyaWRlCiAgdm9pZCBleGl0Q29uZGl0aW9uYWwoKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIGV4aXRMb2dpY2FsRXhwcmVzc2lvbihFeHByZXNzaW9uIHJocywgRXhwcmVzc2lvbiBsb2dpY2FsRXhwcmVzc2lvbikge30KCiAgQG92ZXJyaWRlCiAgdm9pZCBmaW5pc2hlZCgpIHt9CgogIEBvdmVycmlkZQogIFR5cGVQcm9tb3Rpb25GYWN0IGdldEZhY3RGb3JBY2Nlc3MoCiAgICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBpbnQgZnVuY3Rpb25OZXN0aW5nTGV2ZWwpID0+CiAgICAgIG51bGw7CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSXNDaGVjayhFeHByZXNzaW9uIGlzRXhwcmVzc2lvbiwgYm9vbCBpc0ludmVydGVkLAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBEYXJ0VHlwZSB0eXBlLCBpbnQgZnVuY3Rpb25OZXN0aW5nTGV2ZWwpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgbXV0YXRlVmFyaWFibGUoVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwgaW50IGZ1bmN0aW9uTmVzdGluZ0xldmVsKSB7fQp9CgovLy8gRGVyaXZlZCBjbGFzcyBjb250YWluaW5nIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zIG9mIFtUeXBlUHJvbW90ZXJdLgovLy8KLy8vIFRoaXMgY2xhc3MgY29udGFpbnMgYXMgbXVjaCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdHlwZSBwcm9tb3Rpb24gYXMKLy8vIHBvc3NpYmxlIHdpdGhvdXQgbmVlZGluZyBhY2Nlc3MgdG8gcHJpdmF0ZSBtZW1iZXJzIG9mIHNoYWRvdyBvYmplY3RzLiAgSXQKLy8vIGRlZmVycyB0byBhYnN0cmFjdCBtZXRob2RzIGZvciBldmVyeXRoaW5nIGVsc2UuCmFic3RyYWN0IGNsYXNzIFR5cGVQcm9tb3RlckltcGwgZXh0ZW5kcyBUeXBlUHJvbW90ZXIgewogIGZpbmFsIFR5cGVTY2hlbWFFbnZpcm9ubWVudCB0eXBlU2NoZW1hRW52aXJvbm1lbnQ7CgogIC8vLyBbVHlwZVByb21vdGlvbkZhY3RdIHJlcHJlc2VudGluZyB0aGUgaW5pdGlhbCBzdGF0ZSAobm8gZmFjdHMgaGF2ZSBiZWVuCiAgLy8vIGRldGVybWluZWQgeWV0KS4KICAvLy8KICAvLy8gQWxsIGxpbmtlZCBsaXN0cyBvZiBmYWN0cyB0ZXJtaW5hdGUgaW4gdGhpcyBvYmplY3QuCiAgZmluYWwgX051bGxGYWN0IF9udWxsRmFjdHM7CgogIC8vLyBNYXAgZnJvbSB2YXJpYWJsZSBkZWNsYXJhdGlvbiB0byB0aGUgbW9zdCByZWNlbnQgW1R5cGVQcm9tb3Rpb25GYWN0XQogIC8vLyBhc3NvY2lhdGVkIHdpdGggdGhlIHZhcmlhYmxlLgogIC8vLwogIC8vLyBbVHlwZVByb21vdGlvbkZhY3RdcyB0aGF0IGFyZSBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSB2YXJpYWJsZSBzaG93IHVwIGluCiAgLy8vIHRoaXMgbWFwIHVuZGVyIHRoZSBrZXkgYG51bGxgLgogIGZpbmFsIF9mYWN0Q2FjaGUgPSA8VmFyaWFibGVEZWNsYXJhdGlvbiwgVHlwZVByb21vdGlvbkZhY3Q+e307CgogIC8vLyBMaW5rZWQgbGlzdCBvZiBbVHlwZVByb21vdGlvbkZhY3RdcyB0aGF0IHdhcyBjdXJyZW50IGF0IHRoZSB0aW1lIHRoZQogIC8vLyBbX2ZhY3RDYWNoZV0gd2FzIGxhc3QgdXBkYXRlZC4KICBUeXBlUHJvbW90aW9uRmFjdCBfZmFjdENhY2hlU3RhdGU7CgogIC8vLyBMaW5rZWQgbGlzdCBvZiBbVHlwZVByb21vdGlvbkZhY3RdcyBkZXNjcmliaW5nIHdoYXQgaXMga25vd24gdG8gYmUgdHJ1ZQogIC8vLyBhZnRlciBleGVjdXRpb24gb2YgdGhlIGV4cHJlc3Npb24gb3Igc3RhdGVtZW50IHRoYXQgd2FzIG1vc3QgcmVjZW50bHkKICAvLy8gcGFyc2VkLgogIFR5cGVQcm9tb3Rpb25GYWN0IF9jdXJyZW50RmFjdHM7CgogIC8vLyBUaGUgbW9zdCByZWNlbnRseSBwYXJzZWQgZXhwcmVzc2lvbiB3aG9zZSBvdXRjb21lIHBvdGVudGlhbGx5IGFmZmVjdHMgd2hhdAogIC8vLyBpcyBrbm93biB0byBiZSB0cnVlIChlLmcuIGFuICJpcyIgY2hlY2sgb3IgYSBsb2dpY2FsIGV4cHJlc3Npb24pLiAgTWF5IGJlCiAgLy8vIGBudWxsYCBpZiBubyBzdWNoIGV4cHJlc3Npb24gaGFzIGJlZW4gZW5jb3VudGVyZWQgeWV0LgogIEV4cHJlc3Npb24gX3Byb21vdGlvbkV4cHJlc3Npb247CgogIC8vLyBMaW5rZWQgbGlzdCBvZiBbVHlwZVByb21vdGlvbkZhY3RdcyBkZXNjcmliaW5nIHdoYXQgaXMga25vd24gdG8gYmUgdHJ1ZQogIC8vLyBhZnRlciBleGVjdXRpb24gb2YgW19wcm9tb3Rpb25FeHByZXNzaW9uXSwgYXNzdW1pbmcgdGhhdAogIC8vLyBbX3Byb21vdGlvbkV4cHJlc3Npb25dIGV2YWx1YXRlcyB0byBgdHJ1ZWAuCiAgVHlwZVByb21vdGlvbkZhY3QgX3RydWVGYWN0c0ZvclByb21vdGlvbkV4cHJlc3Npb247CgogIC8vLyBMaW5rZWQgbGlzdCBvZiBbVHlwZVByb21vdGlvblNjb3BlXXMgZGVzY3JpYmluZyB0aGUgbmVzdGluZyBzdHJ1Y3R1cmUgdGhhdAogIC8vLyBjb250YWlucyB0aGUgZXhwcmVzc2lvbiBvciBzdGF0ZW1lbnQgdGhhdCB3YXMgbW9zdCByZWNlbnRseSBwYXJzZWQuCiAgVHlwZVByb21vdGlvblNjb3BlIF9jdXJyZW50U2NvcGUgPSBjb25zdCBfVG9wTGV2ZWxTY29wZSgpOwoKICAvLy8gVGhlIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgW1R5cGVQcm9tb3Rpb25GYWN0XSB0aGF0IHdhcyBtb3N0IHJlY2VudGx5CiAgLy8vIGNyZWF0ZWQuCiAgaW50IF9sYXN0RmFjdFNlcXVlbmNlTnVtYmVyID0gMDsKCiAgVHlwZVByb21vdGVySW1wbC5wcml2YXRlKFR5cGVTY2hlbWFFbnZpcm9ubWVudCB0eXBlU2NoZW1hRW52aXJvbm1lbnQpCiAgICAgIDogdGhpcy5fKHR5cGVTY2hlbWFFbnZpcm9ubWVudCwgbmV3IF9OdWxsRmFjdCgpKTsKCiAgVHlwZVByb21vdGVySW1wbC5fKHRoaXMudHlwZVNjaGVtYUVudmlyb25tZW50LCBfTnVsbEZhY3QgdGhpcy5fbnVsbEZhY3RzKQogICAgICA6IF9mYWN0Q2FjaGVTdGF0ZSA9IF9udWxsRmFjdHMsCiAgICAgICAgX2N1cnJlbnRGYWN0cyA9IF9udWxsRmFjdHMsCiAgICAgICAgc3VwZXIucHJpdmF0ZSgpIHsKICAgIF9mYWN0Q2FjaGVbbnVsbF0gPSBfbnVsbEZhY3RzOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZVByb21vdGlvblNjb3BlIGdldCBjdXJyZW50U2NvcGUgPT4gX2N1cnJlbnRTY29wZTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgY29tcHV0ZVByb21vdGVkVHlwZSgKICAgICAgVHlwZVByb21vdGlvbkZhY3QgZmFjdCwgVHlwZVByb21vdGlvblNjb3BlIHNjb3BlLCBib29sIG11dGF0ZWRJbkNsb3N1cmUpIHsKICAgIGlmIChtdXRhdGVkSW5DbG9zdXJlKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBmYWN0Py5fY29tcHV0ZVByb21vdGVkVHlwZSh0aGlzLCBzY29wZSk7CiAgfQoKICAvLy8gRm9yIGludGVybmFsIGRlYnVnZ2luZyB1c2UsIG9wdGlvbmFsbHkgcHJpbnRzIHRoZSBjdXJyZW50IHN0YXRlIGZvbGxvd2VkCiAgLy8vIGJ5IHRoZSBldmVudCBuYW1lLiAgVW5jb21tZW50IHRoZSBjYWxsIHRvIFtfcHJpbnRFdmVudF0gdG8gc2VlIHRoZQogIC8vLyBzZXF1ZW5jZSBvZiBjYWxscyBpbnRvIHRoZSB0eXBlIHByb21vdGVyIGFuZCB0aGUgY29ycmVzcG9uZGluZyBzdGF0ZXMuCiAgdm9pZCBkZWJ1Z0V2ZW50KFN0cmluZyBuYW1lKSB7CiAgICAvLyBfcHJpbnRFdmVudChuYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW50ZXJFbHNlKCkgewogICAgZGVidWdFdmVudCgnZW50ZXJFbHNlJyk7CiAgICBfQ29uZGl0aW9uYWxTY29wZSBzY29wZSA9IF9jdXJyZW50U2NvcGU7CiAgICAvLyBSZWNvcmQgdGhlIGN1cnJlbnQgZmFjdCBzdGF0ZSBzbyB0aGF0IG9uY2Ugd2UgZXhpdCB0aGUgImVsc2UiIGJyYW5jaCwgd2UKICAgIC8vIGNhbiBtZXJnZSBmYWN0cyBmcm9tIHRoZSB0d28gYnJhbmNoZXMuCiAgICBzY29wZS5hZnRlclRydWUgPSBfY3VycmVudEZhY3RzOwogICAgLy8gV2hpbGUgcHJvY2Vzc2luZyB0aGUgImVsc2UiIGJsb2NrLCBhc3N1bWUgdGhlIGNvbmRpdGlvbiB3YXMgZmFsc2UuCiAgICBfY3VycmVudEZhY3RzID0gc2NvcGUuYmVmb3JlRWxzZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW50ZXJMb2dpY2FsRXhwcmVzc2lvbihFeHByZXNzaW9uIGxocywgU3RyaW5nIG9wZXJhdG9yKSB7CiAgICBkZWJ1Z0V2ZW50KCdlbnRlckxvZ2ljYWxFeHByZXNzaW9uJyk7CiAgICAvLyBGaWd1cmUgb3V0IHdoYXQgdGhlIGZhY3RzIGFyZSBiYXNlZCBvbiBwb3NzaWJsZSBMSFMgb3V0Y29tZXMuCiAgICBUeXBlUHJvbW90aW9uRmFjdCB0cnVlRmFjdHMgPSBfZmFjdHNXaGVuVHJ1ZShsaHMpOwogICAgVHlwZVByb21vdGlvbkZhY3QgZmFsc2VGYWN0cyA9IF9mYWN0c1doZW5GYWxzZShsaHMpOwogICAgLy8gUmVjb3JkIHRoZSBmYWN0IHRoYXQgd2UgYXJlIGVudGVyaW5nIGEgbmV3IHNjb3BlLCBhbmQgc2F2ZSB0aGUKICAgIC8vIGFwcHJvcHJpYXRlIGZhY3RzIGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgZXhwcmVzc2lvbiBnZXRzIHNob3J0LWN1dC4KICAgIGJvb2wgaXNBbmQgPSBpZGVudGljYWwob3BlcmF0b3IsICcmJicpOwogICAgX2N1cnJlbnRTY29wZSA9CiAgICAgICAgbmV3IF9Mb2dpY2FsU2NvcGUoX2N1cnJlbnRTY29wZSwgaXNBbmQsIGlzQW5kID8gZmFsc2VGYWN0cyA6IHRydWVGYWN0cyk7CiAgICAvLyBXaGlsZSBwcm9jZXNzaW5nIHRoZSBSSFMsIGFzc3VtZSB0aGUgY29uZGl0aW9uIHdhcyBmYWxzZSBvciB0cnVlLAogICAgLy8gZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGxvZ2ljYWwgZXhwcmVzc2lvbi4KICAgIF9jdXJyZW50RmFjdHMgPSBpc0FuZCA/IHRydWVGYWN0cyA6IGZhbHNlRmFjdHM7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVudGVyVGhlbihFeHByZXNzaW9uIGNvbmRpdGlvbikgewogICAgZGVidWdFdmVudCgnZW50ZXJUaGVuJyk7CiAgICAvLyBGaWd1cmUgb3V0IHdoYXQgdGhlIGZhY3RzIGFyZSBiYXNlZCBvbiBwb3NzaWJsZSBjb25kaXRpb24gb3V0Y29tZXMuCiAgICBUeXBlUHJvbW90aW9uRmFjdCB0cnVlRmFjdHMgPSBfZmFjdHNXaGVuVHJ1ZShjb25kaXRpb24pOwogICAgVHlwZVByb21vdGlvbkZhY3QgZmFsc2VGYWN0cyA9IF9mYWN0c1doZW5GYWxzZShjb25kaXRpb24pOwogICAgLy8gUmVjb3JkIHRoZSBmYWN0IHRoYXQgd2UgYXJlIGVudGVyaW5nIGEgbmV3IHNjb3BlLCBhbmQgc2F2ZSB0aGUgImZhbHNlIgogICAgLy8gZmFjdHMgZm9yIHdoZW4gd2UgZW50ZXIgdGhlICJlbHNlIiBicmFuY2guCiAgICBfY3VycmVudFNjb3BlID0gbmV3IF9Db25kaXRpb25hbFNjb3BlKF9jdXJyZW50U2NvcGUsIGZhbHNlRmFjdHMpOwogICAgLy8gV2hpbGUgcHJvY2Vzc2luZyB0aGUgInRoZW4iIGJsb2NrLCBhc3N1bWUgdGhlIGNvbmRpdGlvbiB3YXMgdHJ1ZS4KICAgIF9jdXJyZW50RmFjdHMgPSB0cnVlRmFjdHM7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGV4aXRDb25kaXRpb25hbCgpIHsKICAgIGRlYnVnRXZlbnQoJ2V4aXRDb25kaXRpb25hbCcpOwogICAgX0NvbmRpdGlvbmFsU2NvcGUgc2NvcGUgPSBfY3VycmVudFNjb3BlOwogICAgX2N1cnJlbnRTY29wZSA9IF9jdXJyZW50U2NvcGUuX2VuY2xvc2luZzsKICAgIF9jdXJyZW50RmFjdHMgPSBfbWVyZ2VGYWN0cyhzY29wZS5hZnRlclRydWUsIF9jdXJyZW50RmFjdHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBleGl0TG9naWNhbEV4cHJlc3Npb24oRXhwcmVzc2lvbiByaHMsIEV4cHJlc3Npb24gbG9naWNhbEV4cHJlc3Npb24pIHsKICAgIGRlYnVnRXZlbnQoJ2V4aXRMb2dpY2FsRXhwcmVzc2lvbicpOwogICAgX0xvZ2ljYWxTY29wZSBzY29wZSA9IF9jdXJyZW50U2NvcGU7CiAgICBfY3VycmVudFNjb3BlID0gX2N1cnJlbnRTY29wZS5fZW5jbG9zaW5nOwogICAgaWYgKHNjb3BlLmlzQW5kKSB7CiAgICAgIF9yZWNvcmRQcm9tb3Rpb25FeHByZXNzaW9uKGxvZ2ljYWxFeHByZXNzaW9uLCBfZmFjdHNXaGVuVHJ1ZShyaHMpLAogICAgICAgICAgX21lcmdlRmFjdHMoc2NvcGUuc2hvcnRjdXRGYWN0cywgX2N1cnJlbnRGYWN0cykpOwogICAgfSBlbHNlIHsKICAgICAgX3JlY29yZFByb21vdGlvbkV4cHJlc3Npb24oCiAgICAgICAgICBsb2dpY2FsRXhwcmVzc2lvbiwKICAgICAgICAgIF9tZXJnZUZhY3RzKHNjb3BlLnNob3J0Y3V0RmFjdHMsIF9jdXJyZW50RmFjdHMpLAogICAgICAgICAgX2ZhY3RzV2hlbkZhbHNlKHJocykpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmaW5pc2hlZCgpIHsKICAgIGRlYnVnRXZlbnQoJ2ZpbmlzaGVkJyk7CiAgICBpZiAoX2N1cnJlbnRTY29wZSBpcyEgX1RvcExldmVsU2NvcGUpIHsKICAgICAgaW50ZXJuYWxQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1TdGFja05vdEVtcHR5LndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgIiRydW50aW1lVHlwZSIsICIkX2N1cnJlbnRTY29wZSIpLAogICAgICAgICAgLTEsCiAgICAgICAgICBudWxsKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIFR5cGVQcm9tb3Rpb25GYWN0IGdldEZhY3RGb3JBY2Nlc3MoCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIGludCBmdW5jdGlvbk5lc3RpbmdMZXZlbCkgewogICAgZGVidWdFdmVudCgnZ2V0RmFjdEZvckFjY2VzcycpOwogICAgVHlwZVByb21vdGlvbkZhY3QgZmFjdCA9IF9jb21wdXRlQ3VycmVudEZhY3RNYXAoKVt2YXJpYWJsZV07CiAgICBUeXBlUHJvbW90aW9uRmFjdC5fcmVjb3JkQWNjZXNzZWRJblNjb3BlKAogICAgICAgIGZhY3QsIF9jdXJyZW50U2NvcGUsIGZ1bmN0aW9uTmVzdGluZ0xldmVsKTsKICAgIHJldHVybiBmYWN0OwogIH0KCiAgLy8vIFJldHVybnMgdGhlIG5lc3RpbmcgbGV2ZWwgdGhhdCB3YXMgaW4gZWZmZWN0IHdoZW4gW3ZhcmlhYmxlXSB3YXMgZGVjbGFyZWQuCiAgaW50IGdldFZhcmlhYmxlRnVuY3Rpb25OZXN0aW5nTGV2ZWwoVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSk7CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSXNDaGVjayhFeHByZXNzaW9uIGlzRXhwcmVzc2lvbiwgYm9vbCBpc0ludmVydGVkLAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBEYXJ0VHlwZSB0eXBlLCBpbnQgZnVuY3Rpb25OZXN0aW5nTGV2ZWwpIHsKICAgIGRlYnVnRXZlbnQoJ2hhbmRsZUlzQ2hlY2snKTsKICAgIGlmICghaXNQcm9tb3Rpb25DYW5kaWRhdGUodmFyaWFibGUpKSByZXR1cm47CiAgICBfSXNDaGVjayBpc0NoZWNrID0gbmV3IF9Jc0NoZWNrKAogICAgICAgICsrX2xhc3RGYWN0U2VxdWVuY2VOdW1iZXIsCiAgICAgICAgdmFyaWFibGUsCiAgICAgICAgX2N1cnJlbnRGYWN0cywKICAgICAgICBfY29tcHV0ZUN1cnJlbnRGYWN0TWFwKClbdmFyaWFibGVdLAogICAgICAgIGZ1bmN0aW9uTmVzdGluZ0xldmVsLAogICAgICAgIHR5cGUpOwogICAgaWYgKCFpc0ludmVydGVkKSB7CiAgICAgIF9yZWNvcmRQcm9tb3Rpb25FeHByZXNzaW9uKGlzRXhwcmVzc2lvbiwgaXNDaGVjaywgX2N1cnJlbnRGYWN0cyk7CiAgICB9CiAgfQoKICAvLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBnaXZlbiB2YXJpYWJsZSBzaG91bGQgYmUgY29uc2lkZXJlZCBmb3IgcHJvbW90aW9uCiAgLy8vIGF0IGFsbC4KICAvLy8KICAvLy8gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBpbiBrZXJuZWwsIFtWYXJpYWJsZURlY2xhcmF0aW9uXSBvYmplY3RzIGFyZQogIC8vLyBzb21ldGltZXMgdXNlZCB0byByZXByZXNlbnQgbG9jYWwgZnVuY3Rpb25zLCB3aGljaCBhcmUgbm90IHN1YmplY3QgdG8KICAvLy8gcHJvbW90aW9uLgogIGJvb2wgaXNQcm9tb3Rpb25DYW5kaWRhdGUoVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSk7CgogIC8vLyBVcGRhdGVzIHRoZSBzdGF0ZSB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgdGhlIGdpdmVuIFt2YXJpYWJsZV0gd2FzCiAgLy8vIG11dGF0ZWQuCiAgdm9pZCBtdXRhdGVWYXJpYWJsZShWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBpbnQgZnVuY3Rpb25OZXN0aW5nTGV2ZWwpIHsKICAgIGRlYnVnRXZlbnQoJ211dGF0ZVZhcmlhYmxlJyk7CiAgICBUeXBlUHJvbW90aW9uRmFjdCBmYWN0ID0gX2NvbXB1dGVDdXJyZW50RmFjdE1hcCgpW3ZhcmlhYmxlXTsKICAgIFR5cGVQcm9tb3Rpb25GYWN0Ll9yZWNvcmRNdXRhdGVkSW5TY29wZShmYWN0LCBfY3VycmVudFNjb3BlKTsKICAgIGlmIChnZXRWYXJpYWJsZUZ1bmN0aW9uTmVzdGluZ0xldmVsKHZhcmlhYmxlKSA8IGZ1bmN0aW9uTmVzdGluZ0xldmVsKSB7CiAgICAgIHNldFZhcmlhYmxlTXV0YXRlZEluQ2xvc3VyZSh2YXJpYWJsZSk7CiAgICB9CiAgICBzZXRWYXJpYWJsZU11dGF0ZWRBbnl3aGVyZSh2YXJpYWJsZSk7CiAgfQoKICAvLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIFthXSBhbmQgW2JdIHJlcHJlc2VudCB0aGUgc2FtZSBleHByZXNzaW9uLCBhZnRlcgogIC8vLyBkcm9wcGluZyByZWR1bmRhbnQgZW5jbG9zaW5nIHBhcmVudGhlc2VzLgogIGJvb2wgc2FtZUV4cHJlc3Npb25zKEV4cHJlc3Npb24gYSwgRXhwcmVzc2lvbiBiKTsKCiAgLy8vIFJlY29yZHMgdGhhdCB0aGUgZ2l2ZW4gdmFyaWFibGUgd2FzIG11dGF0ZWQgc29tZXdoZXJlIGluc2lkZSB0aGUgbWV0aG9kLgogIHZvaWQgc2V0VmFyaWFibGVNdXRhdGVkQW55d2hlcmUoVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSk7CgogIC8vLyBSZWNvcmRzIHRoYXQgdGhlIGdpdmVuIHZhcmlhYmxlIHdhcyBtdXRhdGVkIGluc2lkZSBhIGNsb3N1cmUuCiAgdm9pZCBzZXRWYXJpYWJsZU11dGF0ZWRJbkNsb3N1cmUoVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSk7CgogIC8vLyBJbmRpY2F0ZXMgd2hldGhlciBbc2V0VmFyaWFibGVNdXRhdGVkQW55d2hlcmVdIGhhcyBiZWVuIGNhbGxlZCBmb3IgdGhlCiAgLy8vIGdpdmVuIFt2YXJpYWJsZV0uCiAgYm9vbCB3YXNWYXJpYWJsZU11dGF0ZWRBbnl3aGVyZShWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKTsKCiAgLy8vIFJldHVybnMgYSBtYXAgZnJvbSB2YXJpYWJsZSBkZWNsYXJhdGlvbiB0byB0aGUgbW9zdCByZWNlbnQKICAvLy8gW1R5cGVQcm9tb3Rpb25GYWN0XSBhc3NvY2lhdGVkIHdpdGggdGhlIHZhcmlhYmxlLgogIE1hcDxWYXJpYWJsZURlY2xhcmF0aW9uLCBUeXBlUHJvbW90aW9uRmFjdD4gX2NvbXB1dGVDdXJyZW50RmFjdE1hcCgpIHsKICAgIC8vIFJvbGwgYmFjayBhbnkgbWFwIGVudHJpZXMgYXNzb2NpYXRlZCB3aXRoIGZhY3RzIHRoYXQgYXJlIG5vIGxvbmdlciBpbgogICAgLy8gZWZmZWN0LCBhbmQgc2V0IFtjb21tb25BbmNlc3Rvcl0gdG8gdGhlIGZhY3QgdGhhdCBpcyBhbiBhbmNlc3RvciBvZgogICAgLy8gdGhlIGN1cnJlbnQgc3RhdGUgYW5kIHRoZSBwcmV2aW91c2x5IGNhY2hlZCBzdGF0ZS4gIFRvIGRvIHRoaXMsIHdlIHNldCBhCiAgICAvLyB2YXJpYWJsZSBwb2ludGluZyB0byBbX2N1cnJlbnRGYWN0c10sIGFuZCB0aGVuIHdhbGsgYm90aCBpdCBhbmQKICAgIC8vIFtfZmFjdENhY2hlU3RhdGVdIGJhY2sgdG8gdGhlaXIgY29tbW9uIGFuY2VzdG9yLCB1cGRhdGluZyBbX2ZhY3RDYWNoZV0gYXMKICAgIC8vIHdlIGdvLgogICAgVHlwZVByb21vdGlvbkZhY3QgY29tbW9uQW5jZXN0b3IgPSBfY3VycmVudEZhY3RzOwogICAgd2hpbGUgKGNvbW1vbkFuY2VzdG9yLnNlcXVlbmNlTnVtYmVyICE9IF9mYWN0Q2FjaGVTdGF0ZS5zZXF1ZW5jZU51bWJlcikgewogICAgICBpZiAoY29tbW9uQW5jZXN0b3Iuc2VxdWVuY2VOdW1iZXIgPiBfZmFjdENhY2hlU3RhdGUuc2VxdWVuY2VOdW1iZXIpIHsKICAgICAgICAvLyBUaGUgY3VycmVudGx5IGNhY2hlZCBzdGF0ZSBpcyBvbGRlciB0aGFuIHRoZSBjb21tb24gYW5jZXN0b3IgZ3Vlc3MsCiAgICAgICAgLy8gc28gdGhlIGNvbW1vbiBhbmNlc3RvciBndWVzcyBuZWVkcyB0byBiZSB3YWxrZWQgYmFjay4KICAgICAgICBjb21tb25BbmNlc3RvciA9IGNvbW1vbkFuY2VzdG9yLnByZXZpb3VzOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRoZSBjb21tb24gYW5jZXN0b3IgZ3Vlc3MgaXMgb2xkZXIgdGhhbiB0aGUgY3VycmVudGx5IGNhY2hlZCBzdGF0ZSwKICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIHJvbGwgYmFjayB0aGUgbWFwIGVudHJ5IGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudGx5CiAgICAgICAgLy8gY2FjaGVkIHN0YXRlLgogICAgICAgIF9mYWN0Q2FjaGVbX2ZhY3RDYWNoZVN0YXRlLnZhcmlhYmxlXSA9CiAgICAgICAgICAgIF9mYWN0Q2FjaGVTdGF0ZS5wcmV2aW91c0ZvclZhcmlhYmxlOwogICAgICAgIF9mYWN0Q2FjaGVTdGF0ZSA9IF9mYWN0Q2FjaGVTdGF0ZS5wcmV2aW91czsKICAgICAgfQogICAgfQogICAgYXNzZXJ0KGlkZW50aWNhbChjb21tb25BbmNlc3RvciwgX2ZhY3RDYWNoZVN0YXRlKSk7CiAgICAvLyBSb2xsIGZvcndhcmQgYW55IG1hcCBlbnRyaWVzIGFzc29jaWF0ZWQgd2l0aCBmYWN0cyB0aGF0IGFyZSBuZXdseSBpbgogICAgLy8gZWZmZWN0LiAgU2luY2UgbmV3ZXIgZmFjdHMgbGluayB0byBvbGRlciBvbmVzLCBpdCBpcyBlYXNpZXN0IHRvIGRvIHJvbGwKICAgIC8vIGZvcndhcmQgdGhlIG1vc3QgcmVjZW50IGZhY3RzIGZpcnN0LgogICAgZm9yIChUeXBlUHJvbW90aW9uRmFjdCBuZXdTdGF0ZSA9IF9jdXJyZW50RmFjdHM7CiAgICAgICAgIWlkZW50aWNhbChuZXdTdGF0ZSwgY29tbW9uQW5jZXN0b3IpOwogICAgICAgIG5ld1N0YXRlID0gbmV3U3RhdGUucHJldmlvdXMpIHsKICAgICAgVHlwZVByb21vdGlvbkZhY3QgY3VycmVudGx5Q2FjaGVkID0gX2ZhY3RDYWNoZVtuZXdTdGF0ZS52YXJpYWJsZV07CiAgICAgIC8vIE5vdGU6IFNpbmNlIHdlIHJvbGwgZm9yd2FyZCB0aGUgbW9zdCByZWNlbnQgZmFjdHMgZmlyc3QsIHdlIG5lZWQgdG8gYmUKICAgICAgLy8gY2FyZWZ1bCBub3Qgd3JpdGUgYW4gb2xkZXIgZmFjdCBvdmVyIGEgbmV3ZXIgb25lLgogICAgICBpZiAoY3VycmVudGx5Q2FjaGVkID09IG51bGwgfHwKICAgICAgICAgIG5ld1N0YXRlLnNlcXVlbmNlTnVtYmVyID4gY3VycmVudGx5Q2FjaGVkLnNlcXVlbmNlTnVtYmVyKSB7CiAgICAgICAgX2ZhY3RDYWNoZVtuZXdTdGF0ZS52YXJpYWJsZV0gPSBuZXdTdGF0ZTsKICAgICAgfQogICAgfQogICAgX2ZhY3RDYWNoZVN0YXRlID0gX2N1cnJlbnRGYWN0czsKICAgIHJldHVybiBfZmFjdENhY2hlOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIHNldCBvZiBmYWN0cyBrbm93biB0byBiZSB0cnVlIGFmdGVyIHRoZSBleGVjdXRpb24gb2YgW2VdCiAgLy8vIGFzc3VtaW5nIGl0IGV2YWx1YXRlcyB0byBgZmFsc2VgLgogIC8vLwogIC8vLyBbZV0gbXVzdCBiZSB0aGUgbW9zdCByZWNlbnRseSBwYXJzZWQgZXhwcmVzc2lvbiBvciBzdGF0ZW1lbnQuCiAgVHlwZVByb21vdGlvbkZhY3QgX2ZhY3RzV2hlbkZhbHNlKEV4cHJlc3Npb24gZSkgewogICAgLy8gVHlwZSBwcm9tb3Rpb24gY3VycmVudGx5IG9ubHkgb2NjdXJzIHdoZW4gYW4gImlzIiBvciBsb2dpY2FsIGV4cHJlc3Npb24KICAgIC8vIGV2YWx1YXRlcyB0byBgdHJ1ZWAsIHNvIG5vIHNwZWNpYWwgbG9naWMgaXMgcmVxdWlyZWQ7IHdlIGp1c3QgdXNlCiAgICAvLyBbX2N1cnJlbnRGYWN0c10uCiAgICAvLwogICAgLy8gVE9ETyhwYXVsYmVycnkpOiBleHBlcmltZW50IHdpdGggc3VwcG9ydGluZyBwcm9tb3Rpb24gaW4gY2FzZXMgbGlrZQogICAgLy8gYGlmICh4IGlzISBUKSB7IC4uLiB9IGVsc2UgeyAuLi5hY2Nlc3MgeC4uLiB9YAogICAgcmV0dXJuIF9jdXJyZW50RmFjdHM7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgc2V0IG9mIGZhY3RzIGtub3duIHRvIGJlIHRydWUgYWZ0ZXIgdGhlIGV4ZWN1dGlvbiBvZiBbZV0KICAvLy8gYXNzdW1pbmcgaXQgZXZhbHVhdGVzIHRvIGB0cnVlYC4KICAvLy8KICAvLy8gW2VdIG11c3QgYmUgdGhlIG1vc3QgcmVjZW50bHkgcGFyc2VkIGV4cHJlc3Npb24gb3Igc3RhdGVtZW50LgogIFR5cGVQcm9tb3Rpb25GYWN0IF9mYWN0c1doZW5UcnVlKEV4cHJlc3Npb24gZSkgPT4KICAgICAgc2FtZUV4cHJlc3Npb25zKF9wcm9tb3Rpb25FeHByZXNzaW9uLCBlKQogICAgICAgICAgPyBfdHJ1ZUZhY3RzRm9yUHJvbW90aW9uRXhwcmVzc2lvbgogICAgICAgICAgOiBfY3VycmVudEZhY3RzOwoKICAvLy8gUmV0dXJucyB0aGUgc2V0IG9mIGZhY3RzIGtub3duIHRvIGJlIHRydWUgYWZ0ZXIgdHdvIGJyYW5jaGVzIG9mIGV4ZWN1dGlvbgogIC8vLyByZWpvaW4uCiAgVHlwZVByb21vdGlvbkZhY3QgX21lcmdlRmFjdHMoVHlwZVByb21vdGlvbkZhY3QgYSwgVHlwZVByb21vdGlvbkZhY3QgYikgewogICAgLy8gVHlwZSBwcm9tb3Rpb24gY3VycmVudGx5IGRvZXNuJ3Qgc3VwcG9ydCBhbnkgbWVjaGFuaXNtIGZvciBmYWN0cyB0bwogICAgLy8gYWNjdW11bGF0ZSBhbG9uZyBhIHN0cmFpZ2h0LWxpbmUgZXhlY3V0aW9uIHBhdGggKHRoZXkgY2FuIG9ubHkgYWNjdW11bGF0ZQogICAgLy8gd2hlbiBlbnRlcmluZyBhIHNjb3BlKSwgc28gd2UgY2FuIHNpbXBseSBmaW5kIHRoZSBjb21tb24gYW5jZXN0b3IgZmFjdC4KICAgIC8vCiAgICAvLyBUT0RPKHBhdWxiZXJyeSk6IGV4cGVyaW1lbnQgd2l0aCBzdXBwb3J0aW5nIHByb21vdGlvbiBpbiBjYXNlcyBsaWtlOgogICAgLy8gICAgIGlmICguLi4pIHsKICAgIC8vICAgICAgIGlmICh4IGlzISBUKSByZXR1cm47CiAgICAvLyAgICAgfSBlbHNlIHsKICAgIC8vICAgICAgIGlmICh4IGlzISBUKSByZXR1cm47CiAgICAvLyAgICAgfQogICAgLy8gICAgIC4uLmFjY2VzcyB4Li4uCiAgICB3aGlsZSAoYS5zZXF1ZW5jZU51bWJlciAhPSBiLnNlcXVlbmNlTnVtYmVyKSB7CiAgICAgIGlmIChhLnNlcXVlbmNlTnVtYmVyID4gYi5zZXF1ZW5jZU51bWJlcikgewogICAgICAgIGEgPSBhLnByZXZpb3VzOwogICAgICB9IGVsc2UgewogICAgICAgIGIgPSBiLnByZXZpb3VzOwogICAgICB9CiAgICB9CiAgICBhc3NlcnQoaWRlbnRpY2FsKGEsIGIpKTsKICAgIHJldHVybiBhOwogIH0KCiAgLy8vIEZvciBpbnRlcm5hbCBkZWJ1Z2dpbmcgdXNlLCBwcmludHMgdGhlIGN1cnJlbnQgc3RhdGUgZm9sbG93ZWQgYnkgdGhlIGV2ZW50CiAgLy8vIG5hbWUuCiAgdm9pZCBfcHJpbnRFdmVudChTdHJpbmcgbmFtZSkgewogICAgSXRlcmFibGU8VHlwZVByb21vdGlvbkZhY3Q+IGZhY3RDaGFpbihUeXBlUHJvbW90aW9uRmFjdCBmYWN0KSBzeW5jKiB7CiAgICAgIHdoaWxlIChmYWN0ICE9IG51bGwpIHsKICAgICAgICB5aWVsZCBmYWN0OwogICAgICAgIGZhY3QgPSBmYWN0LnByZXZpb3VzRm9yVmFyaWFibGU7CiAgICAgIH0KICAgIH0KCiAgICBfY29tcHV0ZUN1cnJlbnRGYWN0TWFwKCkuZm9yRWFjaCgodmFyaWFibGUsIGZhY3QpIHsKICAgICAgaWYgKGZhY3QgPT0gbnVsbCkgcmV0dXJuOwogICAgICBwcmludCgnICAke3ZhcmlhYmxlID8/ICcobnVsbCknfTogJHtmYWN0Q2hhaW4oZmFjdCkuam9pbignIC0+ICcpfScpOwogICAgfSk7CiAgICBpZiAoX3Byb21vdGlvbkV4cHJlc3Npb24gIT0gbnVsbCkgewogICAgICBwcmludCgnICBfcHJvbW90aW9uRXhwcmVzc2lvbjogJF9wcm9tb3Rpb25FeHByZXNzaW9uJyk7CiAgICAgIGlmICghaWRlbnRpY2FsKF90cnVlRmFjdHNGb3JQcm9tb3Rpb25FeHByZXNzaW9uLCBfY3VycmVudEZhY3RzKSkgewogICAgICAgIHByaW50KCcgICAgaWYgdHJ1ZTogJF90cnVlRmFjdHNGb3JQcm9tb3Rpb25FeHByZXNzaW9uJyk7CiAgICAgIH0KICAgIH0KICAgIHByaW50KG5hbWUpOwogIH0KCiAgLy8vIFJlY29yZHMgdGhhdCBhZnRlciB0aGUgZXZhbHVhdGlvbiBvZiBbZXhwcmVzc2lvbl0sIHRoZSBmYWN0cyB3aWxsIGJlCiAgLy8vIFtpZlRydWVdIG9uIGEgYnJhbmNoIHdoZXJlIHRoZSBleHByZXNzaW9uIGV2YWx1YXRlZCB0byBgdHJ1ZWAsIGFuZAogIC8vLyBbaWZGYWxzZV0gb24gYSBicmFuY2ggd2hlcmUgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGVkIHRvIGBmYWxzZWAgKG9yIHdoZXJlCiAgLy8vIHRoZSB0cnV0aCB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBkb2Vzbid0IG1hdHRlcikuCiAgLy8vCiAgLy8vIFRPRE8ocGF1bGJlcnJ5KTogd2hlbiB3ZSBzdGFydCBoYW5kbGluZyBwcm9tb3Rpb24gaW4gImVsc2UiIGNsYXVzZXMsIHdlJ2xsCiAgLy8vIG5lZWQgdG8gc3BsaXQgW2lmRmFsc2VdIGludG8gdHdvIGNhc2VzLCBvbmUgZm9yIHdoZW4gdGhlIGV4cHJlc3Npb24KICAvLy8gZXZhbHVhdGVkIHRvIGBmYWxzZWAsIGFuZCBvbmUgd2hlcmUgdGhlIHRydXRoIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uCiAgLy8vIGRvZXNuJ3QgbWF0dGVyLgogIHZvaWQgX3JlY29yZFByb21vdGlvbkV4cHJlc3Npb24oRXhwcmVzc2lvbiBleHByZXNzaW9uLAogICAgICBUeXBlUHJvbW90aW9uRmFjdCBpZlRydWUsIFR5cGVQcm9tb3Rpb25GYWN0IGlmRmFsc2UpIHsKICAgIF9wcm9tb3Rpb25FeHByZXNzaW9uID0gZXhwcmVzc2lvbjsKICAgIF90cnVlRmFjdHNGb3JQcm9tb3Rpb25FeHByZXNzaW9uID0gaWZUcnVlOwogICAgX2N1cnJlbnRGYWN0cyA9IGlmRmFsc2U7CiAgfQp9CgovLy8gQSBzaW5nbGUgZmFjdCB3aGljaCBpcyBrbm93biB0byB0aGUgdHlwZSBwcm9tb3Rpb24gZW5naW5lIGFib3V0IHRoZSBzdGF0ZSBvZgovLy8gYSB2YXJpYWJsZSAob3IgYWJvdXQgdGhlIGZsb3cgY29udHJvbCBvZiB0aGUgY29tcG9uZW50KS4KLy8vCi8vLyBUaGUgdHlwZSBhcmd1bWVudCBWIHJlcHJlc2VudHMgaXMgdGhlIGNsYXNzIHdoaWNoIHJlcHJlc2VudHMgbG9jYWwgdmFyaWFibGUKLy8vIGRlY2xhcmF0aW9ucy4KLy8vCi8vLyBGYWN0cyBhcmUgbGlua2VkIHRvZ2V0aGVyIGludG8gbGlua2VkIGxpc3RzIHZpYSB0aGUgW3ByZXZpb3VzXSBwb2ludGVyIGludG8KLy8vIGEgZGF0YSBzdHJ1Y3R1cmUgY2FsbGVkIGEgImZhY3QgY2hhaW4iIChvciBzb21ldGltZXMgYSAiZmFjdCBzdGF0ZSIpLCB3aGljaAovLy8gcmVwcmVzZW50cyBhbGwgZmFjdHMgdGhhdCBhcmUga25vd24gdG8gaG9sZCBhdCBhIGNlcnRhaW4gcG9pbnQgaW4gdGhlCi8vLyBjb21wb25lbnQuCi8vLwovLy8gVGhlIGZhY3QgaXMgc2FpZCB0byAiYXBwbHkiIHRvIGEgZ2l2ZW4gcG9pbnQgaW4gdGhlIGV4ZWN1dGlvbiBvZiB0aGUKLy8vIGNvbXBvbmVudCBpZiB0aGUgZmFjdCBpcyBwYXJ0IG9mIHRoZSBjdXJyZW50IGZhY3Qgc3RhdGUgYXQgdGhlIHBvaW50IHRoZQovLy8gcGFyc2VyIHJlYWNoZXMgdGhhdCBwb2ludCBpbiB0aGUgY29tcG9uZW50LgovLy8KLy8vIE5vdGU6IGp1c3QgYmVjYXVzZSBhIGZhY3QgImFwcGxpZXMiIHRvIGEgZ2l2ZW4gcG9pbnQgaW4gdGhlIGV4ZWN1dGlvbiBvZgovLy8gdGhlIGNvbXBvbmVudCBkb2Vzbid0IG1lYW4gYSB0eXBlIHdpbGwgYmUgcHJvbW90ZWQtLWl0IHNpbXBseSBtZWFucyB0aGF0Ci8vLyB0aGUgZmFjdCB3YXMgZGVkdWNlZCBhdCBhIHByZXZpb3VzIHBvaW50IGluIHRoZSBzdHJhaWdodCBsaW5lIGV4ZWN1dGlvbiBvZgovLy8gdGhlIGNvZGUuICBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGZhY3Qgd2lsbCBiZSBvdmVyc2hhZG93ZWQgYnkgYSBsYXRlcgovLy8gZmFjdCwgb3IgaXRzIGVmZmVjdCB3aWxsIGJlIGNhbmNlbGxlZCBieSBhIGxhdGVyIGFzc2lnbm1lbnQuICBUaGUgZmluYWwKLy8vIGRldGVybWluYXRpb24gb2Ygd2hldGhlciBwcm9tb3Rpb24gb2NjdXJzIGlzIGxlZnQgdG8gW19jb21wdXRlUHJvbW90ZWRUeXBlXS4KYWJzdHJhY3QgY2xhc3MgVHlwZVByb21vdGlvbkZhY3QgewogIC8vLyBUaGUgdmFyaWFibGUgdGhpcyBmYWN0IHJlY29yZHMgaW5mb3JtYXRpb24gYWJvdXQsIG9yIGBudWxsYCBpZiB0aGlzIGZhY3QKICAvLy8gcmVjb3JkcyBpbmZvcm1hdGlvbiBhYm91dCBnZW5lcmFsIGZsb3cgY29udHJvbC4KICBmaW5hbCBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlOwoKICAvLy8gVGhlIGZhY3QgY2hhaW4gdGhhdCB3YXMgaW4gZWZmZWN0IHByaW9yIHRvIGV4ZWN1dGlvbiBvZiB0aGUgc3RhdGVtZW50IG9yCiAgLy8vIGV4cHJlc3Npb24gdGhhdCBjYXVzZWQgdGhpcyBmYWN0IHRvIGJlIHRydWUuCiAgZmluYWwgVHlwZVByb21vdGlvbkZhY3QgcHJldmlvdXM7CgogIC8vLyBJbnRlZ2VyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZhY3QuICBFYWNoIHRpbWUgYSBmYWN0IGlzIGNyZWF0ZWQgaXQgaXMKICAvLy8gZ2l2ZW4gYSBzZXF1ZW5jZSBudW1iZXIgb25lIGdyZWF0ZXIgdGhhbiB0aGUgcHJldmlvdXNseSBnZW5lcmF0ZWQgZmFjdC4KICAvLy8gVGhpcyBzaW1wbGlmaWVzIHRoZSBhbGdvcml0aG0gZm9yIGZpbmRpbmcgdGhlIGNvbW1vbiBhbmNlc3RvciBvZiB0d28KICAvLy8gZmFjdHM7IHdlIHJlcGVhdGVkbHkgd2FsayBiYWNrd2FyZCB0aGUgZmFjdCB3aXRoIHRoZSBsYXJnZXIgc2VxdWVuY2UKICAvLy8gbnVtYmVyIHVudGlsIHRoZSBzZXF1ZW5jZSBudW1iZXJzIGFyZSB0aGUgc2FtZS4KICBmaW5hbCBpbnQgc2VxdWVuY2VOdW1iZXI7CgogIC8vLyBUaGUgbW9zdCByZWNlbnQgZmFjdCBhcHBlYXJpbmcgaW4gdGhlIGZhY3QgY2hhaW4gW3ByZXZpb3VzXSB3aG9zZQogIC8vLyBbdmFyaWFibGVdIG1hdGNoZXMgdGhpcyBvbmUsIG9yIGBudWxsYCBpZiB0aGVyZSBpcyBubyBzdWNoIGZhY3QuCiAgZmluYWwgVHlwZVByb21vdGlvbkZhY3QgcHJldmlvdXNGb3JWYXJpYWJsZTsKCiAgLy8vIFRoZSBmdW5jdGlvbiBuZXN0aW5nIGxldmVsIG9mIHRoZSBleHByZXNzaW9uIHRoYXQgbGVkIHRvIHRoaXMgZmFjdC4KICBmaW5hbCBpbnQgZnVuY3Rpb25OZXN0aW5nTGV2ZWw7CgogIC8vLyBJZiB0aGlzIGZhY3QncyB2YXJpYWJsZSB3YXMgbXV0YXRlZCB3aXRoaW4gYW55IHNjb3BlcyB0aGUKICAvLy8gZmFjdCBhcHBsaWVzIHRvLCBhIHNldCBvZiB0aGUgY29ycmVzcG9uZGluZyBzY29wZXMuICBPdGhlcndpc2UgYG51bGxgLgogIC8vLwogIC8vLyBUT0RPKHBhdWxiZXJyeSk6IHRoZSBzaXplIG9mIHRoaXMgc2V0IGlzIHByb2JhYmx5IHZlcnkgc21hbGwgbW9zdCBvZiB0aGUKICAvLy8gdGltZS4gIFdvdWxkIGl0IGJlIGJldHRlciB0byB1c2UgYSBsaXN0PwogIFNldDxUeXBlUHJvbW90aW9uU2NvcGU+IF9tdXRhdGVkSW5TY29wZXM7CgogIC8vLyBJZiB0aGlzIGZhY3QncyB2YXJpYWJsZSB3YXMgYWNjZXNzZWQgaW5zaWRlIGEgY2xvc3VyZSB3aXRoaW4gYW55IHNjb3BlcwogIC8vLyB0aGUgZmFjdCBhcHBsaWVzIHRvLCBhIHNldCBvZiB0aGUgY29ycmVzcG9uZGluZyBzY29wZXMuICBPdGhlcndpc2UgYG51bGxgLgogIC8vLwogIC8vLyBUT0RPKHBhdWxiZXJyeSk6IHRoZSBzaXplIG9mIHRoaXMgc2V0IGlzIHByb2JhYmx5IHZlcnkgc21hbGwgbW9zdCBvZiB0aGUKICAvLy8gdGltZS4gIFdvdWxkIGl0IGJlIGJldHRlciB0byB1c2UgYSBsaXN0PwogIFNldDxUeXBlUHJvbW90aW9uU2NvcGU+IF9hY2Nlc3NlZEluQ2xvc3VyZUluU2NvcGVzOwoKICBUeXBlUHJvbW90aW9uRmFjdCh0aGlzLnNlcXVlbmNlTnVtYmVyLCB0aGlzLnZhcmlhYmxlLCB0aGlzLnByZXZpb3VzLAogICAgICB0aGlzLnByZXZpb3VzRm9yVmFyaWFibGUsIHRoaXMuZnVuY3Rpb25OZXN0aW5nTGV2ZWwpOwoKICAvLy8gQ29tcHV0ZXMgdGhlIHByb21vdGVkIHR5cGUgZm9yIFt2YXJpYWJsZV0gYXQgYSBsb2NhdGlvbiBpbiB0aGUgY29kZSB3aGVyZQogIC8vLyB0aGlzIGZhY3QgYXBwbGllcy4KICAvLy8KICAvLy8gU2hvdWxkIG5vdCBiZSBjYWxsZWQgdW50aWwgYWZ0ZXIgcGFyc2luZyBvZiB0aGUgZW50aXJlIG1ldGhvZCBpcyBjb21wbGV0ZS4KICBEYXJ0VHlwZSBfY29tcHV0ZVByb21vdGVkVHlwZSgKICAgICAgVHlwZVByb21vdGVySW1wbCBwcm9tb3RlciwgVHlwZVByb21vdGlvblNjb3BlIHNjb3BlKTsKCiAgLy8vIFJlY29yZHMgdGhlIGZhY3QgdGhhdCB0aGUgdmFyaWFibGUgcmVmZXJlbmNlZCBieSBbZmFjdF0gd2FzIGFjY2Vzc2VkCiAgLy8vIHdpdGhpbiB0aGUgZ2l2ZW4gc2NvcGUsIGF0IHRoZSBnaXZlbiBmdW5jdGlvbiBuZXN0aW5nIGxldmVsLgogIC8vLwogIC8vLyBJZiBgbnVsbGAgaXMgcGFzc2VkIGluIGZvciBbZmFjdF0sIHRoZXJlIGlzIG5vIGVmZmVjdC4KICBzdGF0aWMgdm9pZCBfcmVjb3JkQWNjZXNzZWRJblNjb3BlKFR5cGVQcm9tb3Rpb25GYWN0IGZhY3QsCiAgICAgIFR5cGVQcm9tb3Rpb25TY29wZSBzY29wZSwgaW50IGZ1bmN0aW9uTmVzdGluZ0xldmVsKSB7CiAgICAvLyBUT0RPKHBhdWxiZXJyeSk6IG1ha2Ugc29tZSBpbnRlZ3JhdGlvbiB0ZXN0IGNhc2VzIHRoYXQgZXhlcmNpc2UgdGhlCiAgICAvLyBiZWhhdmlvcnMgb2YgdGhpcyBmdW5jdGlvbi4gIEluIHBhcnRpY3VsYXIgdmVyaWZ5IHRoYXQgaXQncyBjb3JyZWN0IHRvCiAgICAvLyB0ZXN0IGZ1bmN0aW9uTmVzdGluZ0xldmVsIGFnYWluc3QgZmFjdC5mdW5jdGlvbk5lc3RpbmdMZXZlbCAoYXMgb3Bwb3NlZAogICAgLy8gdG8gdGVzdGluZyBpdCBhZ2FpbnN0IGdldFZhcmlhYmxlRnVuY3Rpb25OZXN0aW5nTGV2ZWwodmFyaWFibGUpKS4KICAgIHdoaWxlIChmYWN0ICE9IG51bGwpIHsKICAgICAgaWYgKGZ1bmN0aW9uTmVzdGluZ0xldmVsID4gZmFjdC5mdW5jdGlvbk5lc3RpbmdMZXZlbCkgewogICAgICAgIGZhY3QuX2FjY2Vzc2VkSW5DbG9zdXJlSW5TY29wZXMgPz89CiAgICAgICAgICAgIG5ldyBTZXQ8VHlwZVByb21vdGlvblNjb3BlPi5pZGVudGl0eSgpOwogICAgICAgIGlmICghZmFjdC5fYWNjZXNzZWRJbkNsb3N1cmVJblNjb3Blcy5hZGQoc2NvcGUpKSByZXR1cm47CiAgICAgIH0KICAgICAgZmFjdCA9IGZhY3QucHJldmlvdXNGb3JWYXJpYWJsZTsKICAgIH0KICB9CgogIC8vLyBSZWNvcmRzIHRoZSBmYWN0IHRoYXQgdGhlIHZhcmlhYmxlIHJlZmVyZW5jZWQgYnkgW2ZhY3RdIHdhcyBtdXRhdGVkCiAgLy8vIHdpdGhpbiB0aGUgZ2l2ZW4gc2NvcGUuCiAgLy8vCiAgLy8vIElmIGBudWxsYCBpcyBwYXNzZWQgaW4gZm9yIFtmYWN0XSwgdGhlcmUgaXMgbm8gZWZmZWN0LgogIHN0YXRpYyB2b2lkIF9yZWNvcmRNdXRhdGVkSW5TY29wZSgKICAgICAgVHlwZVByb21vdGlvbkZhY3QgZmFjdCwgVHlwZVByb21vdGlvblNjb3BlIHNjb3BlKSB7CiAgICB3aGlsZSAoZmFjdCAhPSBudWxsKSB7CiAgICAgIGZhY3QuX211dGF0ZWRJblNjb3BlcyA/Pz0gbmV3IFNldDxUeXBlUHJvbW90aW9uU2NvcGU+LmlkZW50aXR5KCk7CiAgICAgIGlmICghZmFjdC5fbXV0YXRlZEluU2NvcGVzLmFkZChzY29wZSkpIHJldHVybjsKICAgICAgZmFjdCA9IGZhY3QucHJldmlvdXNGb3JWYXJpYWJsZTsKICAgIH0KICB9Cn0KCi8vLyBSZXByZXNlbnRzIGEgY29udGlndW91cyBibG9jayBvZiBwcm9ncmFtIHRleHQgaW4gd2hpY2ggdmFyaWFibGVzIG1heSBvciBtYXkKLy8vIG5vdCBiZSBwcm9tb3RlZC4gIEFsc28gdXNlZCBhcyBhIHN0YWNrIHRvIGtlZXAgdHJhY2sgb2Ygc3RhdGUgd2hpbGUgdGhlCi8vLyBtZXRob2QgaXMgYmVpbmcgcGFyc2VkLgpjbGFzcyBUeXBlUHJvbW90aW9uU2NvcGUgewogIC8vLyBUaGUgbmVzdGluZyBkZXB0aCBvZiB0aGlzIHNjb3BlLiAgVGhlIG91dGVybW9zdCBzY29wZSAocmVwcmVzZW50aW5nIHRoZQogIC8vLyB3aG9sZSBtZXRob2QgYm9keSkgaGFzIGEgZGVwdGggb2YgMC4KICBmaW5hbCBpbnQgX2RlcHRoOwoKICAvLy8gVGhlIFtUeXBlUHJvbW90aW9uU2NvcGVdIHJlcHJlc2VudGluZyB0aGUgc2NvcGUgZW5jbG9zaW5nIHRoaXMgb25lLgogIGZpbmFsIFR5cGVQcm9tb3Rpb25TY29wZSBfZW5jbG9zaW5nOwoKICBUeXBlUHJvbW90aW9uU2NvcGUodGhpcy5fZW5jbG9zaW5nKSA6IF9kZXB0aCA9IF9lbmNsb3NpbmcuX2RlcHRoICsgMTsKCiAgY29uc3QgVHlwZVByb21vdGlvblNjb3BlLl90b3BMZXZlbCgpCiAgICAgIDogX2VuY2xvc2luZyA9IG51bGwsCiAgICAgICAgX2RlcHRoID0gMDsKCiAgLy8vIERldGVybWluZXMgd2hldGhlciB0aGlzIHNjb3BlIGNvbXBsZXRlbHkgZW5jbG9zZXMgKG9yIGlzIHRoZSBzYW1lIGFzKQogIC8vLyBbb3RoZXJdLgogIGJvb2wgY29udGFpbnNTY29wZShUeXBlUHJvbW90aW9uU2NvcGUgb3RoZXIpIHsKICAgIGlmICh0aGlzLl9kZXB0aCA+IG90aGVyLl9kZXB0aCkgewogICAgICAvLyBXZSBjYW4ndCBwb3NzaWJseSBjb250YWluIGEgc2NvcGUgaWYgd2UgYXJlIGF0IGdyZWF0ZXIgbmVzdGluZyBkZXB0aAogICAgICAvLyB0aGFuIGl0IGlzLgogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICB3aGlsZSAodGhpcy5fZGVwdGggPCBvdGhlci5fZGVwdGgpIHsKICAgICAgb3RoZXIgPSBvdGhlci5fZW5jbG9zaW5nOwogICAgfQogICAgcmV0dXJuIGlkZW50aWNhbCh0aGlzLCBvdGhlcik7CiAgfQp9CgovLy8gW1R5cGVQcm9tb3Rpb25TY29wZV0gcmVwcmVzZW50aW5nIHRoZSAidGhlbiIgYW5kICJlbHNlIiBib2RpZXMgb2YgYW4gImlmIgovLy8gc3RhdGVtZW50IG9yIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24uCmNsYXNzIF9Db25kaXRpb25hbFNjb3BlIGV4dGVuZHMgVHlwZVByb21vdGlvblNjb3BlIHsKICAvLy8gVGhlIGZhY3Qgc3RhdGUgaW4gZWZmZWN0IGF0IHRoZSB0b3Agb2YgdGhlICJlbHNlIiBibG9jay4KICBmaW5hbCBUeXBlUHJvbW90aW9uRmFjdCBiZWZvcmVFbHNlOwoKICAvLy8gVGhlIGZhY3Qgc3RhdGUgd2hpY2ggd2FzIGluIGVmZmVjdCBhdCB0aGUgYm90dG9tIG9mIHRoZSAidGhlbiIgYmxvY2suCiAgVHlwZVByb21vdGlvbkZhY3QgYWZ0ZXJUcnVlOwoKICBfQ29uZGl0aW9uYWxTY29wZShUeXBlUHJvbW90aW9uU2NvcGUgZW5jbG9zaW5nLCB0aGlzLmJlZm9yZUVsc2UpCiAgICAgIDogc3VwZXIoZW5jbG9zaW5nKTsKfQoKLy8vIFtUeXBlUHJvbW90aW9uRmFjdF0gcmVwcmVzZW50aW5nIGFuICJpcyIgY2hlY2sgd2hpY2ggc3VjY2VlZGVkLgpjbGFzcyBfSXNDaGVjayBleHRlbmRzIFR5cGVQcm9tb3Rpb25GYWN0IHsKICAvLy8gVGhlIHR5cGUgYXBwZWFyaW5nIG9uIHRoZSByaWdodCBoYW5kIHNpZGUgb2YgImlzIi4KICBmaW5hbCBEYXJ0VHlwZSBjaGVja2VkVHlwZTsKCiAgX0lzQ2hlY2soCiAgICAgIGludCBzZXF1ZW5jZU51bWJlciwKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwKICAgICAgVHlwZVByb21vdGlvbkZhY3QgcHJldmlvdXMsCiAgICAgIFR5cGVQcm9tb3Rpb25GYWN0IHByZXZpb3VzRm9yVmFyaWFibGUsCiAgICAgIGludCBmdW5jdGlvbk5lc3RpbmdMZXZlbCwKICAgICAgdGhpcy5jaGVja2VkVHlwZSkKICAgICAgOiBzdXBlcihzZXF1ZW5jZU51bWJlciwgdmFyaWFibGUsIHByZXZpb3VzLCBwcmV2aW91c0ZvclZhcmlhYmxlLAogICAgICAgICAgICBmdW5jdGlvbk5lc3RpbmdMZXZlbCk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdpc0NoZWNrKCRjaGVja2VkVHlwZSknOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBfY29tcHV0ZVByb21vdGVkVHlwZSgKICAgICAgVHlwZVByb21vdGVySW1wbCBwcm9tb3RlciwgVHlwZVByb21vdGlvblNjb3BlIHNjb3BlKSB7CiAgICBEYXJ0VHlwZSBwcmV2aW91c1Byb21vdGVkVHlwZSA9CiAgICAgICAgcHJldmlvdXNGb3JWYXJpYWJsZT8uX2NvbXB1dGVQcm9tb3RlZFR5cGUocHJvbW90ZXIsIHNjb3BlKTsKCiAgICAvLyBJZiB0aGUgdmFyaWFibGUgd2FzIG11dGF0ZWQgc29tZXdoZXJlIGluIHRoZSBzY29wZSBvZiB0aGUgcG90ZW50aWFsCiAgICAvLyBwcm9tb3Rpb24sIHByb21vdGlvbiBkb2VzIG5vdCBvY2N1ci4KICAgIGlmIChfbXV0YXRlZEluU2NvcGVzICE9IG51bGwpIHsKICAgICAgZm9yIChUeXBlUHJvbW90aW9uU2NvcGUgYXNzaWdubWVudFNjb3BlIGluIF9tdXRhdGVkSW5TY29wZXMpIHsKICAgICAgICBpZiAoYXNzaWdubWVudFNjb3BlLmNvbnRhaW5zU2NvcGUoc2NvcGUpKSB7CiAgICAgICAgICByZXR1cm4gcHJldmlvdXNQcm9tb3RlZFR5cGU7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgLy8gSWYgdGhlIHZhcmlhYmxlIHdhcyBtdXRhdGVkIGFueXdoZXJlLCBhbmQgaXQgd2FzIGFjY2Vzc2VkIGluc2lkZSBhCiAgICAvLyBjbG9zdXJlIHNvbWV3aGVyZSBpbiB0aGUgc2NvcGUgb2YgdGhlIHBvdGVudGlhbCBwcm9tb3Rpb24sIHByb21vdGlvbiBkb2VzCiAgICAvLyBub3Qgb2NjdXIuCiAgICBpZiAocHJvbW90ZXIud2FzVmFyaWFibGVNdXRhdGVkQW55d2hlcmUodmFyaWFibGUpICYmCiAgICAgICAgX2FjY2Vzc2VkSW5DbG9zdXJlSW5TY29wZXMgIT0gbnVsbCkgewogICAgICBmb3IgKFR5cGVQcm9tb3Rpb25TY29wZSBhY2Nlc3NTY29wZSBpbiBfYWNjZXNzZWRJbkNsb3N1cmVJblNjb3BlcykgewogICAgICAgIGlmIChhY2Nlc3NTY29wZS5jb250YWluc1Njb3BlKHNjb3BlKSkgewogICAgICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbW90ZWRUeXBlOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIFdoYXQgd2UgZG8gbm93IGRlcGVuZHMgb24gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBwcmV2aW91cyB0eXBlIG9mCiAgICAvLyB0aGUgdmFyaWFibGUgYW5kIHRoZSB0eXBlIHdlIGFyZSBjaGVja2luZyBhZ2FpbnN0LgogICAgRGFydFR5cGUgcHJldmlvdXNUeXBlID0gcHJldmlvdXNQcm9tb3RlZFR5cGUgPz8gdmFyaWFibGUudHlwZTsKICAgIGlmIChwcm9tb3Rlci50eXBlU2NoZW1hRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YoY2hlY2tlZFR5cGUsIHByZXZpb3VzVHlwZSkpIHsKICAgICAgLy8gVGhlIHR5cGUgd2UgYXJlIGNoZWNraW5nIGFnYWluc3QgaXMgYSBzdWJ0eXBlIG9mIHRoZSBwcmV2aW91cyB0eXBlIG9mCiAgICAgIC8vIHRoZSB2YXJpYWJsZSwgc28gdGhpcyBpcyBhIHJlZmluZW1lbnQ7IHdlIGNhbiBwcm9tb3RlLgogICAgICByZXR1cm4gY2hlY2tlZFR5cGU7CiAgICB9IGVsc2UgaWYgKHByZXZpb3VzVHlwZSBpcyBUeXBlUGFyYW1ldGVyVHlwZSAmJgogICAgICAgIHByb21vdGVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudAogICAgICAgICAgICAuaXNTdWJ0eXBlT2YoY2hlY2tlZFR5cGUsIHByZXZpb3VzVHlwZS5ib3VuZCkpIHsKICAgICAgLy8gVGhlIHR5cGUgd2UgYXJlIGNoZWNraW5nIGFnYWluc3QgaXMgYSBzdWJ0eXBlIG9mIHRoZSBib3VuZCBvZiB0aGUKICAgICAgLy8gcHJldmlvdXMgdHlwZSBvZiB0aGUgdmFyaWFibGU7IHdlIGNhbiBwcm9tb3RlIHRoZSBib3VuZC4KICAgICAgcmV0dXJuIG5ldyBUeXBlUGFyYW1ldGVyVHlwZShwcmV2aW91c1R5cGUucGFyYW1ldGVyLCBjaGVja2VkVHlwZSk7CiAgICB9IGVsc2UgewogICAgICAvLyBUaGUgdHlwZXMgYXJlbid0IHN1ZmZpY2llbnRseSByZWxhdGVkOyB3ZSBjYW4ndCBwcm9tb3RlLgogICAgICByZXR1cm4gcHJldmlvdXNQcm9tb3RlZFR5cGU7CiAgICB9CiAgfQp9CgovLy8gW1R5cGVQcm9tb3Rpb25TY29wZV0gcmVwcmVzZW50aW5nIHRoZSBSSFMgb2YgYSBsb2dpY2FsIGV4cHJlc3Npb24uCmNsYXNzIF9Mb2dpY2FsU2NvcGUgZXh0ZW5kcyBUeXBlUHJvbW90aW9uU2NvcGUgewogIC8vLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgbG9naWNhbCBvcGVyYXRpb24gaXMgYW4gYCYmYCBvciBhbiBgfHxgLgogIGZpbmFsIGJvb2wgaXNBbmQ7CgogIC8vLyBUaGUgZmFjdCBzdGF0ZSBpbiBlZmZlY3QgaWYgdGhlIGxvZ2ljYWwgZXhwcmVzc2lvbiBnZXRzIHNob3J0LWN1dC4KICBmaW5hbCBUeXBlUHJvbW90aW9uRmFjdCBzaG9ydGN1dEZhY3RzOwoKICBfTG9naWNhbFNjb3BlKFR5cGVQcm9tb3Rpb25TY29wZSBlbmNsb3NpbmcsIHRoaXMuaXNBbmQsIHRoaXMuc2hvcnRjdXRGYWN0cykKICAgICAgOiBzdXBlcihlbmNsb3NpbmcpOwp9CgovLy8gSW5zdGFuY2Ugb2YgW1R5cGVQcm9tb3Rpb25GYWN0XSByZXByZXNlbnRpbmcgdGhlIGZhY3RzIHdoaWNoIGFyZSBrbm93biBvbgovLy8gZW50cnkgdG8gdGhlIG1ldGhvZCAoaS5lLiBub3RoaW5nKS4KY2xhc3MgX051bGxGYWN0IGV4dGVuZHMgVHlwZVByb21vdGlvbkZhY3QgewogIF9OdWxsRmFjdCgpIDogc3VwZXIoMCwgbnVsbCwgbnVsbCwgbnVsbCwgMCk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdudWxsJzsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgX2NvbXB1dGVQcm9tb3RlZFR5cGUoCiAgICAgIFR5cGVQcm9tb3RlciBwcm9tb3RlciwgVHlwZVByb21vdGlvblNjb3BlIHNjb3BlKSB7CiAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcignVHJpZWQgdG8gY3JlYXRlIHByb21vdGVkIHR5cGUgZm9yIG5vIHZhcmlhYmxlJyk7CiAgfQp9CgovLy8gSW5zdGFuY2Ugb2YgW1R5cGVQcm9tb3Rpb25TY29wZV0gcmVwcmVzZW50aW5nIHRoZSBlbnRpcmUgbWV0aG9kIGJvZHkuCmNsYXNzIF9Ub3BMZXZlbFNjb3BlIGV4dGVuZHMgVHlwZVByb21vdGlvblNjb3BlIHsKICBjb25zdCBfVG9wTGV2ZWxTY29wZSgpIDogc3VwZXIuX3RvcExldmVsKCk7Cn0Kgt4ATU4/ASFHAUgBMAFDAUIBQgRPTFBQSk1NBFBKUU5BBE1OSh4aAUYiAUIBMCcBUDkGUR8gUAFLDhQBTERAAVFLIigBSz0aAU4fTAE7EwFQSw0GTksmPwFKID9OAUoPTwIBSgRLNTI0AQwvAQxRJAwBDBYBDEIBDCoBDBwBDE4BDBUBDCZFDAEMP1ABDFECAUgES040NzUBTRcGOh4BSyQGUCVBAUslJQFOTA4jAVFQPSMBTj8yNgFRSj0BTA8jAUg4AUwmJBojBAEMOAEMIFEnNAQBT0lNIRoEAQwVHS1QLiVKJgQBDEEqRTc5RkssFFFJNDQEAQwpHUs9P04yRkkfBAEMGyMtLkEEAQxNKSkuF0k8DSIdOyEGBAEMFBwsFz4xDhEGBAEMJkAkQS40EQQBUUUBDD9PITElIxIXLB4PF0gGBAFPDgZKTBE7AUoPUCJBQkwtBioEAUowNAFPQQFEQgFNGEEBQThJTUtQR1EONk5MT0EyD09PGS8xNAgGOExPLDUuKElQOyVGMggGJRcEAUsoBkQ0T0kYB0s2GgQBSycGRDQvLRsBUA5MS1FPB0wWIhQiDRozMRgPGAgGHQ4EAVEMIkodFCkIBgE4IEsIKD5JQQgGEQQBS0lQOQZRSkwWOT0nLx0EAgFRPQRQEgRQUEoPBElNMARNTU9LTFEjTzYmAU8zJAFMTktLNhwBSEcvAUoiAUBNBk8vLAFOUQZPLzYBRzwBUBkGUSE8AUtDBj09PEtOT0kbPiw0QQgnBgQBSh4GPSU6G0g1JwYEAgFQTBwbTisUAUonAUgBJxsUAUwPMSZOFRQGKSAGIwQCAU4pNT8mAUwfAUMaAgFEKzkeAQwaJCItIBhHIwEMMAEMIT0kRAFLLCRFNCcKCAYBSlESOS5LMCcKCAYBTzpDUU9AGjQnPUtCSQ1CIwYEAgFHMUUUAUkpAU4aAgFOKCwvAQwfAQwhOUsEAgFKMi4CAT5wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdHlwZV9pbmZlcmVuY2UvdHlwZV9wcm9tb3Rpb24uZGFydDxzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL2NvbGxlY3Rpb25zLmRhcnSyES8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCmxpYnJhcnkgZmFzdGEuY29sbGVjdGlvbnM7CgppbXBvcnQgJ2RhcnQ6Y29yZScgaGlkZSBNYXBFbnRyeTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRXhwcmVzc2lvbiwKICAgICAgICBNYXBFbnRyeSwKICAgICAgICBOdWxsTGl0ZXJhbCwKICAgICAgICBTdGF0ZW1lbnQsCiAgICAgICAgVHJlZU5vZGUsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiwKICAgICAgICBzZXRQYXJlbnRzLAogICAgICAgIHRyYW5zZm9ybUxpc3QsCiAgICAgICAgdmlzaXRMaXN0OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnQnIHNob3cgVHlwZUVudmlyb25tZW50OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC92aXNpdG9yLmRhcnQnCiAgICBzaG93CiAgICAgICAgRXhwcmVzc2lvblZpc2l0b3IsCiAgICAgICAgRXhwcmVzc2lvblZpc2l0b3IxLAogICAgICAgIFRyYW5zZm9ybWVyLAogICAgICAgIFRyZWVWaXNpdG9yLAogICAgICAgIFZpc2l0b3I7CgppbXBvcnQgJy4uL21lc3NhZ2VzLmRhcnQnCiAgICBzaG93IHRlbXBsYXRlRXhwZWN0ZWRBZnRlckJ1dEdvdCwgdGVtcGxhdGVFeHBlY3RlZEJ1dEdvdDsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyBnZXRGaWxlVXJpLCB1bnN1cHBvcnRlZDsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvaW5mZXJlbmNlX2hlbHBlci5kYXJ0JyBzaG93IEluZmVyZW5jZUhlbHBlcjsKCi8vLyBNaXhpbiBmb3Igc3ByZWFkIGFuZCBjb250cm9sLWZsb3cgZWxlbWVudHMuCi8vLwovLy8gU3ByZWFkIGFuZCBjb250cm9sLWZsb3cgZWxlbWVudHMgYXJlIG5vdCB0cnVseSBleHByZXNzaW9ucyBhbmQgdGhleSBjYW5ub3QKLy8vIGFwcGVhciBpbiBhcmJpdHJhcnkgZXhwcmVzc2lvbiBjb250ZXh0cyBpbiB0aGUgS2VybmVsIHByb2dyYW0uICBUaGV5IGNhbgovLy8gb25seSBhcHBlYXIgYXMgZWxlbWVudHMgaW4gbGlzdCBvciBzZXQgbGl0ZXJhbHMuICBUaGV5IGFyZSB0cmFuc2xhdGVkIGludG8KLy8vIGEgbG93ZXItbGV2ZWwgcmVwcmVzZW50YXRpb24gYW5kIG5ldmVyIHNlcmlhbGl6ZWQgdG8gLmRpbGwgZmlsZXMuCm1peGluIENvbnRyb2xGbG93RWxlbWVudCBvbiBFeHByZXNzaW9uIHsKICAvLy8gU3ByZWFkIGFuZCBjb250cm9sLWZsb3cgZWxlbWVudHMgYXJlIG5vdCBleHByZXNzaW9ucyBhbmQgZG8gbm90IGhhdmUgYQogIC8vLyBzdGF0aWMgdHlwZS4KICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJnZXRTdGF0aWNUeXBlIiwgZmlsZU9mZnNldCwgZ2V0RmlsZVVyaSh0aGlzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3I8T2JqZWN0PiB2KSA9PiB2LmRlZmF1bHRFeHByZXNzaW9uKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMTxPYmplY3QsIE9iamVjdD4gdiwgYXJnKSA9PgogICAgICB2LmRlZmF1bHRFeHByZXNzaW9uKHRoaXMsIGFyZyk7Cn0KCi8vLyBBIHNwcmVhZCBlbGVtZW50IGluIGEgbGlzdCBvciBzZXQgbGl0ZXJhbC4KY2xhc3MgU3ByZWFkRWxlbWVudCBleHRlbmRzIEV4cHJlc3Npb24gd2l0aCBDb250cm9sRmxvd0VsZW1lbnQgewogIEV4cHJlc3Npb24gZXhwcmVzc2lvbjsKICBib29sIGlzTnVsbEF3YXJlOwoKICAvLy8gVGhlIHR5cGUgb2YgdGhlIGVsZW1lbnRzIG9mIHRoZSBjb2xsZWN0aW9uIHRoYXQgW2V4cHJlc3Npb25dIGV2YWx1YXRlcyB0by4KICAvLy8KICAvLy8gSXQgaXMgc2V0IGR1cmluZyB0eXBlIGluZmVyZW5jZSBhbmQgaXMgdXNlZCB0byBhZGQgYXBwcm9wcmlhdGUgdHlwZSBjYXN0cwogIC8vLyBkdXJpbmcgdGhlIGRlc3VnYXJpbmcuCiAgRGFydFR5cGUgZWxlbWVudFR5cGU7CgogIFNwcmVhZEVsZW1lbnQodGhpcy5leHByZXNzaW9uLCB0aGlzLmlzTnVsbEF3YXJlKSB7CiAgICBleHByZXNzaW9uPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yPE9iamVjdD4gdikgewogICAgZXhwcmVzc2lvbj8uYWNjZXB0KHYpOwogIH0KCiAgQG92ZXJyaWRlCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGV4cHJlc3Npb24gIT0gbnVsbCkgewogICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi5hY2NlcHQodik7CiAgICAgIGV4cHJlc3Npb24/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gQW4gJ2lmJyBlbGVtZW50IGluIGEgbGlzdCBvciBzZXQgbGl0ZXJhbC4KY2xhc3MgSWZFbGVtZW50IGV4dGVuZHMgRXhwcmVzc2lvbiB3aXRoIENvbnRyb2xGbG93RWxlbWVudCB7CiAgRXhwcmVzc2lvbiBjb25kaXRpb247CiAgRXhwcmVzc2lvbiB0aGVuOwogIEV4cHJlc3Npb24gb3RoZXJ3aXNlOwoKICBJZkVsZW1lbnQodGhpcy5jb25kaXRpb24sIHRoaXMudGhlbiwgdGhpcy5vdGhlcndpc2UpIHsKICAgIGNvbmRpdGlvbj8ucGFyZW50ID0gdGhpczsKICAgIHRoZW4/LnBhcmVudCA9IHRoaXM7CiAgICBvdGhlcndpc2U/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENoaWxkcmVuKFZpc2l0b3I8T2JqZWN0PiB2KSB7CiAgICBjb25kaXRpb24/LmFjY2VwdCh2KTsKICAgIHRoZW4/LmFjY2VwdCh2KTsKICAgIG90aGVyd2lzZT8uYWNjZXB0KHYpOwogIH0KCiAgQG92ZXJyaWRlCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGNvbmRpdGlvbiAhPSBudWxsKSB7CiAgICAgIGNvbmRpdGlvbiA9IGNvbmRpdGlvbi5hY2NlcHQodik7CiAgICAgIGNvbmRpdGlvbj8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmICh0aGVuICE9IG51bGwpIHsKICAgICAgdGhlbiA9IHRoZW4uYWNjZXB0KHYpOwogICAgICB0aGVuPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKG90aGVyd2lzZSAhPSBudWxsKSB7CiAgICAgIG90aGVyd2lzZSA9IG90aGVyd2lzZS5hY2NlcHQodik7CiAgICAgIG90aGVyd2lzZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBBICdmb3InIGVsZW1lbnQgaW4gYSBsaXN0IG9yIHNldCBsaXRlcmFsLgpjbGFzcyBGb3JFbGVtZW50IGV4dGVuZHMgRXhwcmVzc2lvbiB3aXRoIENvbnRyb2xGbG93RWxlbWVudCB7CiAgZmluYWwgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiB2YXJpYWJsZXM7IC8vIE1heSBiZSBlbXB0eSwgYnV0IG5vdCBudWxsLgogIEV4cHJlc3Npb24gY29uZGl0aW9uOyAvLyBNYXkgYmUgbnVsbC4KICBmaW5hbCBMaXN0PEV4cHJlc3Npb24+IHVwZGF0ZXM7IC8vIE1heSBiZSBlbXB0eSwgYnV0IG5vdCBudWxsLgogIEV4cHJlc3Npb24gYm9keTsKCiAgRm9yRWxlbWVudCh0aGlzLnZhcmlhYmxlcywgdGhpcy5jb25kaXRpb24sIHRoaXMudXBkYXRlcywgdGhpcy5ib2R5KSB7CiAgICBzZXRQYXJlbnRzKHZhcmlhYmxlcywgdGhpcyk7CiAgICBjb25kaXRpb24/LnBhcmVudCA9IHRoaXM7CiAgICBzZXRQYXJlbnRzKHVwZGF0ZXMsIHRoaXMpOwogICAgYm9keT8ucGFyZW50ID0gdGhpczsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvcjxPYmplY3Q+IHYpIHsKICAgIHZpc2l0TGlzdCh2YXJpYWJsZXMsIHYpOwogICAgY29uZGl0aW9uPy5hY2NlcHQodik7CiAgICB2aXNpdExpc3QodXBkYXRlcywgdik7CiAgICBib2R5Py5hY2NlcHQodik7CiAgfQoKICBAb3ZlcnJpZGUKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KHZhcmlhYmxlcywgdiwgdGhpcyk7CiAgICBpZiAoY29uZGl0aW9uICE9IG51bGwpIHsKICAgICAgY29uZGl0aW9uID0gY29uZGl0aW9uLmFjY2VwdCh2KTsKICAgICAgY29uZGl0aW9uPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgdHJhbnNmb3JtTGlzdCh1cGRhdGVzLCB2LCB0aGlzKTsKICAgIGlmIChib2R5ICE9IG51bGwpIHsKICAgICAgYm9keSA9IGJvZHkuYWNjZXB0KHYpOwogICAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIEEgJ2Zvci1pbicgZWxlbWVudCBpbiBhIGxpc3Qgb3Igc2V0IGxpdGVyYWwuCmNsYXNzIEZvckluRWxlbWVudCBleHRlbmRzIEV4cHJlc3Npb24gd2l0aCBDb250cm9sRmxvd0VsZW1lbnQgewogIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGU7IC8vIEhhcyBubyBpbml0aWFsaXplci4KICBFeHByZXNzaW9uIGl0ZXJhYmxlOwogIFN0YXRlbWVudCBwcm9sb2d1ZTsgLy8gTWF5IGJlIG51bGwuCiAgRXhwcmVzc2lvbiBib2R5OwogIEV4cHJlc3Npb24gcHJvYmxlbTsgLy8gTWF5IGJlIG51bGwuCiAgYm9vbCBpc0FzeW5jOyAvLyBUcnVlIGlmIHRoaXMgaXMgYW4gJ2F3YWl0IGZvcicgbG9vcC4KCiAgRm9ySW5FbGVtZW50KAogICAgICB0aGlzLnZhcmlhYmxlLCB0aGlzLml0ZXJhYmxlLCB0aGlzLnByb2xvZ3VlLCB0aGlzLmJvZHksIHRoaXMucHJvYmxlbSwKICAgICAge3RoaXMuaXNBc3luYzogZmFsc2V9KSB7CiAgICB2YXJpYWJsZT8ucGFyZW50ID0gdGhpczsKICAgIGl0ZXJhYmxlPy5wYXJlbnQgPSB0aGlzOwogICAgcHJvbG9ndWU/LnBhcmVudCA9IHRoaXM7CiAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogICAgcHJvYmxlbT8ucGFyZW50ID0gdGhpczsKICB9CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvcjxPYmplY3Q+IHYpIHsKICAgIHZhcmlhYmxlPy5hY2NlcHQodik7CiAgICBpdGVyYWJsZT8uYWNjZXB0KHYpOwogICAgcHJvbG9ndWU/LmFjY2VwdCh2KTsKICAgIGJvZHk/LmFjY2VwdCh2KTsKICAgIHByb2JsZW0/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmICh2YXJpYWJsZSAhPSBudWxsKSB7CiAgICAgIHZhcmlhYmxlID0gdmFyaWFibGUuYWNjZXB0KHYpOwogICAgICB2YXJpYWJsZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmIChpdGVyYWJsZSAhPSBudWxsKSB7CiAgICAgIGl0ZXJhYmxlID0gaXRlcmFibGUuYWNjZXB0KHYpOwogICAgICBpdGVyYWJsZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmIChwcm9sb2d1ZSAhPSBudWxsKSB7CiAgICAgIHByb2xvZ3VlID0gcHJvbG9ndWUuYWNjZXB0KHYpOwogICAgICBwcm9sb2d1ZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmIChib2R5ICE9IG51bGwpIHsKICAgICAgYm9keSA9IGJvZHkuYWNjZXB0KHYpOwogICAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKHByb2JsZW0gIT0gbnVsbCkgewogICAgICBwcm9ibGVtID0gcHJvYmxlbS5hY2NlcHQodik7CiAgICAgIHByb2JsZW0/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgptaXhpbiBDb250cm9sRmxvd01hcEVudHJ5IGltcGxlbWVudHMgTWFwRW50cnkgewogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZ2V0IGtleSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignQ29udHJvbEZsb3dNYXBFbnRyeS5rZXkgZ2V0dGVyJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHNldCBrZXkoRXhwcmVzc2lvbiBleHByKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignQ29udHJvbEZsb3dNYXBFbnRyeS5rZXkgc2V0dGVyJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGdldCB2YWx1ZSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignQ29udHJvbEZsb3dNYXBFbnRyeS52YWx1ZSBnZXR0ZXInKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgc2V0IHZhbHVlKEV4cHJlc3Npb24gZXhwcikgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ0NvbnRyb2xGbG93TWFwRW50cnkudmFsdWUgc2V0dGVyJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoVHJlZVZpc2l0b3I8T2JqZWN0PiB2KSA9PiB2LmRlZmF1bHRUcmVlTm9kZSh0aGlzKTsKfQoKLy8vIEEgc3ByZWFkIGVsZW1lbnQgaW4gYSBtYXAgbGl0ZXJhbC4KY2xhc3MgU3ByZWFkTWFwRW50cnkgZXh0ZW5kcyBUcmVlTm9kZSB3aXRoIENvbnRyb2xGbG93TWFwRW50cnkgewogIEV4cHJlc3Npb24gZXhwcmVzc2lvbjsKICBib29sIGlzTnVsbEF3YXJlOwoKICAvLy8gVGhlIHR5cGUgb2YgdGhlIG1hcCBlbnRyaWVzIG9mIHRoZSBtYXAgdGhhdCBbZXhwcmVzc2lvbl0gZXZhbHVhdGVzIHRvLgogIC8vLwogIC8vLyBJdCBpcyBzZXQgZHVyaW5nIHR5cGUgaW5mZXJlbmNlIGFuZCBpcyB1c2VkIHRvIGFkZCBhcHByb3ByaWF0ZSB0eXBlIGNhc3RzCiAgLy8vIGR1cmluZyB0aGUgZGVzdWdhcmluZy4KICBEYXJ0VHlwZSBlbnRyeVR5cGU7CgogIFNwcmVhZE1hcEVudHJ5KHRoaXMuZXhwcmVzc2lvbiwgdGhpcy5pc051bGxBd2FyZSkgewogICAgZXhwcmVzc2lvbj8ucGFyZW50ID0gdGhpczsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvcjxPYmplY3Q+IHYpIHsKICAgIGV4cHJlc3Npb24/LmFjY2VwdCh2KTsKICB9CgogIEBvdmVycmlkZQogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChleHByZXNzaW9uICE9IG51bGwpIHsKICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24uYWNjZXB0KHYpOwogICAgICBleHByZXNzaW9uPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIEFuICdpZicgZWxlbWVudCBpbiBhIG1hcCBsaXRlcmFsLgpjbGFzcyBJZk1hcEVudHJ5IGV4dGVuZHMgVHJlZU5vZGUgd2l0aCBDb250cm9sRmxvd01hcEVudHJ5IHsKICBFeHByZXNzaW9uIGNvbmRpdGlvbjsKICBNYXBFbnRyeSB0aGVuOwogIE1hcEVudHJ5IG90aGVyd2lzZTsKCiAgSWZNYXBFbnRyeSh0aGlzLmNvbmRpdGlvbiwgdGhpcy50aGVuLCB0aGlzLm90aGVyd2lzZSkgewogICAgY29uZGl0aW9uPy5wYXJlbnQgPSB0aGlzOwogICAgdGhlbj8ucGFyZW50ID0gdGhpczsKICAgIG90aGVyd2lzZT8ucGFyZW50ID0gdGhpczsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvcjxPYmplY3Q+IHYpIHsKICAgIGNvbmRpdGlvbj8uYWNjZXB0KHYpOwogICAgdGhlbj8uYWNjZXB0KHYpOwogICAgb3RoZXJ3aXNlPy5hY2NlcHQodik7CiAgfQoKICBAb3ZlcnJpZGUKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAoY29uZGl0aW9uICE9IG51bGwpIHsKICAgICAgY29uZGl0aW9uID0gY29uZGl0aW9uLmFjY2VwdCh2KTsKICAgICAgY29uZGl0aW9uPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKHRoZW4gIT0gbnVsbCkgewogICAgICB0aGVuID0gdGhlbi5hY2NlcHQodik7CiAgICAgIHRoZW4/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAob3RoZXJ3aXNlICE9IG51bGwpIHsKICAgICAgb3RoZXJ3aXNlID0gb3RoZXJ3aXNlLmFjY2VwdCh2KTsKICAgICAgb3RoZXJ3aXNlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIEEgJ2ZvcicgZWxlbWVudCBpbiBhIG1hcCBsaXRlcmFsLgpjbGFzcyBGb3JNYXBFbnRyeSBleHRlbmRzIFRyZWVOb2RlIHdpdGggQ29udHJvbEZsb3dNYXBFbnRyeSB7CiAgZmluYWwgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiB2YXJpYWJsZXM7IC8vIE1heSBiZSBlbXB0eSwgYnV0IG5vdCBudWxsLgogIEV4cHJlc3Npb24gY29uZGl0aW9uOyAvLyBNYXkgYmUgbnVsbC4KICBmaW5hbCBMaXN0PEV4cHJlc3Npb24+IHVwZGF0ZXM7IC8vIE1heSBiZSBlbXB0eSwgYnV0IG5vdCBudWxsLgogIE1hcEVudHJ5IGJvZHk7CgogIEZvck1hcEVudHJ5KHRoaXMudmFyaWFibGVzLCB0aGlzLmNvbmRpdGlvbiwgdGhpcy51cGRhdGVzLCB0aGlzLmJvZHkpIHsKICAgIHNldFBhcmVudHModmFyaWFibGVzLCB0aGlzKTsKICAgIGNvbmRpdGlvbj8ucGFyZW50ID0gdGhpczsKICAgIHNldFBhcmVudHModXBkYXRlcywgdGhpcyk7CiAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yPE9iamVjdD4gdikgewogICAgdmlzaXRMaXN0KHZhcmlhYmxlcywgdik7CiAgICBjb25kaXRpb24/LmFjY2VwdCh2KTsKICAgIHZpc2l0TGlzdCh1cGRhdGVzLCB2KTsKICAgIGJvZHk/LmFjY2VwdCh2KTsKICB9CgogIEBvdmVycmlkZQogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIHRyYW5zZm9ybUxpc3QodmFyaWFibGVzLCB2LCB0aGlzKTsKICAgIGlmIChjb25kaXRpb24gIT0gbnVsbCkgewogICAgICBjb25kaXRpb24gPSBjb25kaXRpb24uYWNjZXB0KHYpOwogICAgICBjb25kaXRpb24/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICB0cmFuc2Zvcm1MaXN0KHVwZGF0ZXMsIHYsIHRoaXMpOwogICAgaWYgKGJvZHkgIT0gbnVsbCkgewogICAgICBib2R5ID0gYm9keS5hY2NlcHQodik7CiAgICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gQSAnZm9yLWluJyBlbGVtZW50IGluIGEgbWFwIGxpdGVyYWwuCmNsYXNzIEZvckluTWFwRW50cnkgZXh0ZW5kcyBUcmVlTm9kZSB3aXRoIENvbnRyb2xGbG93TWFwRW50cnkgewogIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGU7IC8vIEhhcyBubyBpbml0aWFsaXplci4KICBFeHByZXNzaW9uIGl0ZXJhYmxlOwogIFN0YXRlbWVudCBwcm9sb2d1ZTsgLy8gTWF5IGJlIG51bGwuCiAgTWFwRW50cnkgYm9keTsKICBFeHByZXNzaW9uIHByb2JsZW07IC8vIE1heSBiZSBudWxsLgogIGJvb2wgaXNBc3luYzsgLy8gVHJ1ZSBpZiB0aGlzIGlzIGFuICdhd2FpdCBmb3InIGxvb3AuCgogIEZvckluTWFwRW50cnkoCiAgICAgIHRoaXMudmFyaWFibGUsIHRoaXMuaXRlcmFibGUsIHRoaXMucHJvbG9ndWUsIHRoaXMuYm9keSwgdGhpcy5wcm9ibGVtLAogICAgICB7dGhpcy5pc0FzeW5jOiBmYWxzZX0pIHsKICAgIHZhcmlhYmxlPy5wYXJlbnQgPSB0aGlzOwogICAgaXRlcmFibGU/LnBhcmVudCA9IHRoaXM7CiAgICBwcm9sb2d1ZT8ucGFyZW50ID0gdGhpczsKICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgICBwcm9ibGVtPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yPE9iamVjdD4gdikgewogICAgdmFyaWFibGU/LmFjY2VwdCh2KTsKICAgIGl0ZXJhYmxlPy5hY2NlcHQodik7CiAgICBwcm9sb2d1ZT8uYWNjZXB0KHYpOwogICAgYm9keT8uYWNjZXB0KHYpOwogICAgcHJvYmxlbT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKHZhcmlhYmxlICE9IG51bGwpIHsKICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZS5hY2NlcHQodik7CiAgICAgIHZhcmlhYmxlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKGl0ZXJhYmxlICE9IG51bGwpIHsKICAgICAgaXRlcmFibGUgPSBpdGVyYWJsZS5hY2NlcHQodik7CiAgICAgIGl0ZXJhYmxlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKHByb2xvZ3VlICE9IG51bGwpIHsKICAgICAgcHJvbG9ndWUgPSBwcm9sb2d1ZS5hY2NlcHQodik7CiAgICAgIHByb2xvZ3VlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKGJvZHkgIT0gbnVsbCkgewogICAgICBib2R5ID0gYm9keS5hY2NlcHQodik7CiAgICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAocHJvYmxlbSAhPSBudWxsKSB7CiAgICAgIHByb2JsZW0gPSBwcm9ibGVtLmFjY2VwdCh2KTsKICAgICAgcHJvYmxlbT8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCkV4cHJlc3Npb24gY29udmVydFRvRWxlbWVudChNYXBFbnRyeSBlbnRyeSwgSW5mZXJlbmNlSGVscGVyIGhlbHBlcikgewogIGlmIChlbnRyeSBpcyBTcHJlYWRNYXBFbnRyeSkgewogICAgcmV0dXJuIG5ldyBTcHJlYWRFbGVtZW50KGVudHJ5LmV4cHJlc3Npb24sIGVudHJ5LmlzTnVsbEF3YXJlKQogICAgICAuLmZpbGVPZmZzZXQgPSBlbnRyeS5leHByZXNzaW9uLmZpbGVPZmZzZXQ7CiAgfQogIGlmIChlbnRyeSBpcyBJZk1hcEVudHJ5KSB7CiAgICByZXR1cm4gbmV3IElmRWxlbWVudCgKICAgICAgICBlbnRyeS5jb25kaXRpb24sCiAgICAgICAgY29udmVydFRvRWxlbWVudChlbnRyeS50aGVuLCBoZWxwZXIpLAogICAgICAgIGVudHJ5Lm90aGVyd2lzZSA9PSBudWxsCiAgICAgICAgICAgID8gbnVsbAogICAgICAgICAgICA6IGNvbnZlcnRUb0VsZW1lbnQoZW50cnkub3RoZXJ3aXNlLCBoZWxwZXIpKQogICAgICAuLmZpbGVPZmZzZXQgPSBlbnRyeS5maWxlT2Zmc2V0OwogIH0KICBpZiAoZW50cnkgaXMgRm9yTWFwRW50cnkpIHsKICAgIHJldHVybiBuZXcgRm9yRWxlbWVudChlbnRyeS52YXJpYWJsZXMsIGVudHJ5LmNvbmRpdGlvbiwgZW50cnkudXBkYXRlcywKICAgICAgICBjb252ZXJ0VG9FbGVtZW50KGVudHJ5LmJvZHksIGhlbHBlcikpCiAgICAgIC4uZmlsZU9mZnNldCA9IGVudHJ5LmZpbGVPZmZzZXQ7CiAgfQogIGlmIChlbnRyeSBpcyBGb3JJbk1hcEVudHJ5KSB7CiAgICByZXR1cm4gbmV3IEZvckluRWxlbWVudChlbnRyeS52YXJpYWJsZSwgZW50cnkuaXRlcmFibGUsIGVudHJ5LnByb2xvZ3VlLAogICAgICAgIGNvbnZlcnRUb0VsZW1lbnQoZW50cnkuYm9keSwgaGVscGVyKSwgZW50cnkucHJvYmxlbSwKICAgICAgICBpc0FzeW5jOiBlbnRyeS5pc0FzeW5jKQogICAgICAuLmZpbGVPZmZzZXQgPSBlbnRyeS5maWxlT2Zmc2V0OwogIH0KICByZXR1cm4gaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGhlbHBlci5idWlsZFByb2JsZW0oCiAgICB0ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJywnKSwKICAgIGVudHJ5LmZpbGVPZmZzZXQsCiAgICAxLAogICkpOwp9Cgpib29sIGlzQ29udmVydGlibGVUb01hcEVudHJ5KEV4cHJlc3Npb24gZWxlbWVudCkgewogIGlmIChlbGVtZW50IGlzIFNwcmVhZEVsZW1lbnQpIHJldHVybiB0cnVlOwogIGlmIChlbGVtZW50IGlzIElmRWxlbWVudCkgewogICAgcmV0dXJuIGlzQ29udmVydGlibGVUb01hcEVudHJ5KGVsZW1lbnQudGhlbikgJiYKICAgICAgICAoZWxlbWVudC5vdGhlcndpc2UgPT0gbnVsbCB8fAogICAgICAgICAgICBpc0NvbnZlcnRpYmxlVG9NYXBFbnRyeShlbGVtZW50Lm90aGVyd2lzZSkpOwogIH0KICBpZiAoZWxlbWVudCBpcyBGb3JFbGVtZW50KSB7CiAgICByZXR1cm4gaXNDb252ZXJ0aWJsZVRvTWFwRW50cnkoZWxlbWVudC5ib2R5KTsKICB9CiAgaWYgKGVsZW1lbnQgaXMgRm9ySW5FbGVtZW50KSB7CiAgICByZXR1cm4gaXNDb252ZXJ0aWJsZVRvTWFwRW50cnkoZWxlbWVudC5ib2R5KTsKICB9CiAgcmV0dXJuIGZhbHNlOwp9CgpNYXBFbnRyeSBjb252ZXJ0VG9NYXBFbnRyeShFeHByZXNzaW9uIGVsZW1lbnQsIEluZmVyZW5jZUhlbHBlciBoZWxwZXIpIHsKICBpZiAoZWxlbWVudCBpcyBTcHJlYWRFbGVtZW50KSB7CiAgICByZXR1cm4gbmV3IFNwcmVhZE1hcEVudHJ5KGVsZW1lbnQuZXhwcmVzc2lvbiwgZWxlbWVudC5pc051bGxBd2FyZSkKICAgICAgLi5maWxlT2Zmc2V0ID0gZWxlbWVudC5leHByZXNzaW9uLmZpbGVPZmZzZXQ7CiAgfQogIGlmIChlbGVtZW50IGlzIElmRWxlbWVudCkgewogICAgcmV0dXJuIG5ldyBJZk1hcEVudHJ5KAogICAgICAgIGVsZW1lbnQuY29uZGl0aW9uLAogICAgICAgIGNvbnZlcnRUb01hcEVudHJ5KGVsZW1lbnQudGhlbiwgaGVscGVyKSwKICAgICAgICBlbGVtZW50Lm90aGVyd2lzZSA9PSBudWxsCiAgICAgICAgICAgID8gbnVsbAogICAgICAgICAgICA6IGNvbnZlcnRUb01hcEVudHJ5KGVsZW1lbnQub3RoZXJ3aXNlLCBoZWxwZXIpKQogICAgICAuLmZpbGVPZmZzZXQgPSBlbGVtZW50LmZpbGVPZmZzZXQ7CiAgfQogIGlmIChlbGVtZW50IGlzIEZvckVsZW1lbnQpIHsKICAgIHJldHVybiBuZXcgRm9yTWFwRW50cnkoZWxlbWVudC52YXJpYWJsZXMsIGVsZW1lbnQuY29uZGl0aW9uLAogICAgICAgIGVsZW1lbnQudXBkYXRlcywgY29udmVydFRvTWFwRW50cnkoZWxlbWVudC5ib2R5LCBoZWxwZXIpKQogICAgICAuLmZpbGVPZmZzZXQgPSBlbGVtZW50LmZpbGVPZmZzZXQ7CiAgfQogIGlmIChlbGVtZW50IGlzIEZvckluRWxlbWVudCkgewogICAgcmV0dXJuIG5ldyBGb3JJbk1hcEVudHJ5KAogICAgICAgIGVsZW1lbnQudmFyaWFibGUsCiAgICAgICAgZWxlbWVudC5pdGVyYWJsZSwKICAgICAgICBlbGVtZW50LnByb2xvZ3VlLAogICAgICAgIGNvbnZlcnRUb01hcEVudHJ5KGVsZW1lbnQuYm9keSwgaGVscGVyKSwKICAgICAgICBlbGVtZW50LnByb2JsZW0sCiAgICAgICAgaXNBc3luYzogZWxlbWVudC5pc0FzeW5jKQogICAgICAuLmZpbGVPZmZzZXQgPSBlbGVtZW50LmZpbGVPZmZzZXQ7CiAgfQogIHJldHVybiBuZXcgTWFwRW50cnkoCiAgICAgIGhlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihoZWxwZXIuYnVpbGRQcm9ibGVtKAogICAgICAgIHRlbXBsYXRlRXhwZWN0ZWRBZnRlckJ1dEdvdC53aXRoQXJndW1lbnRzKCc6JyksCiAgICAgICAgZWxlbWVudC5maWxlT2Zmc2V0LAogICAgICAgIC8vIFRPRE8oZGFucnViZWwpOiB3aGF0IGlzIHRoZSBsZW5ndGggb2YgdGhlIGV4cHJlc3Npb24/CiAgICAgICAgMSwKICAgICAgKSksCiAgICAgIG5ldyBOdWxsTGl0ZXJhbCgpKTsKfQqB3gBOTjwbASIBIQkSFBIVExIdFBcTAUQBJQkbHBUVEQEaPgE4AUcBMARPTU9GKU0TDDJHBAEMRAEMOCYCAS9BGRQBUQZQHRgBNR8EAQwlGwQBDCUeKSEGBAIBLj0YExgBOR4ZHgQBDCUaFRoEAQwlHScgBhgdGwYdJyAGBAIBLj5MKEETAUghHh8ZBAEMJR0aGxUEAQwlJx0nIAYlGB0bBgQCATFANxcmEyY4ARBMHx0dHRkcBAElGRkZFRgEASUcJR8GHCUfBhwlHwYYHRsGGyMeBgQCATAMF0IEAQwiQgQBDBlEBAEMJEQEAQw8AgEnQRkUAU0GUB0WATYfBAEMJRsEAQwlHikhBgQCASY9GBEWAToeGR4EAQwlGhUaBAEMJR0nIAYYHRsGHScgBgQCASY+TChBEQFJIR4fGQQBDCUdGhsVBAEMJScdJyAGJRgdGwYEAgEpQDcXJhEmOAERTB8dHR0ZHAQBJRkZGRUYBAElHCUfBhwlHwYcJR8GGB0bBhsjHgYEAgFGIUIyBB0aGS4gEzknBB5LLicEIEw9ICcEQC8WBwYCATMtHjQmOQQfMgQhMgQQAgFJIkc0BB4bGzEiEzwpBB9BQikEIR4aGhoxGSIpBBc9OBxBCwoaAgEzcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9jb2xsZWN0aW9ucy5kYXJ0OnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwvY29uc3RuZXNzLmRhcnSBMi8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmNvbnN0bmVzczsKCmVudW0gQ29uc3RuZXNzIHsKICBleHBsaWNpdENvbnN0LAogIGV4cGxpY2l0TmV3LAogIGltcGxpY2l0LAp9Cg0ATk48ARkBEREPDAIBMXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvY29uc3RuZXNzLmRhcnRFc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC9leHByZXNzaW9uX2dlbmVyYXRvci5kYXJ0wAHkVy8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gQSBsaWJyYXJ5IHRvIGhlbHAgZ2VuZXJhdGUgZXhwcmVzc2lvbi4KbGlicmFyeSBmYXN0YS5leHByZXNzaW9uX2dlbmVyYXRvcjsKCmltcG9ydCAnZGFydDpjb3JlJyBoaWRlIE1hcEVudHJ5OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBDb25zdHJ1Y3RvciwKICAgICAgICBGaWVsZCwKICAgICAgICBJbnRMaXRlcmFsLAogICAgICAgIEludmFsaWRFeHByZXNzaW9uLAogICAgICAgIExldCwKICAgICAgICBOb2RlLAogICAgICAgIFByb3BlcnR5R2V0LAogICAgICAgIFByb3BlcnR5U2V0LAogICAgICAgIFN0YXRpY1NldCwKICAgICAgICBTdXBlck1ldGhvZEludm9jYXRpb24sCiAgICAgICAgU3VwZXJQcm9wZXJ0eVNldCwKICAgICAgICBUcmVlTm9kZSwKICAgICAgICBUeXBlUGFyYW1ldGVyLAogICAgICAgIFZhcmlhYmxlR2V0LAogICAgICAgIFZhcmlhYmxlU2V0OwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJy4uL2NvbnN0YW50X2NvbnRleHQuZGFydCcgc2hvdyBDb25zdGFudENvbnRleHQ7CgppbXBvcnQgJy4uL2J1aWxkZXIvYnVpbGRlci5kYXJ0JyBzaG93IFByZWZpeEJ1aWxkZXIsIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXI7CmltcG9ydCAnLi4vYnVpbGRlci9kZWNsYXJhdGlvbl9idWlsZGVyLmRhcnQnOwppbXBvcnQgJy4uL2J1aWxkZXIvZXh0ZW5zaW9uX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnLi4vYnVpbGRlci9wcm9jZWR1cmVfYnVpbGRlci5kYXJ0JzsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCc7CgppbXBvcnQgJy4uL25hbWVzLmRhcnQnCiAgICBzaG93CiAgICAgICAgYW1wZXJzYW5kTmFtZSwKICAgICAgICBiYXJOYW1lLAogICAgICAgIGNhbGxOYW1lLAogICAgICAgIGNhcmV0TmFtZSwKICAgICAgICBkaXZpc2lvbk5hbWUsCiAgICAgICAgZXF1YWxzTmFtZSwKICAgICAgICBpbmRleEdldE5hbWUsCiAgICAgICAgaW5kZXhTZXROYW1lLAogICAgICAgIGxlZnRTaGlmdE5hbWUsCiAgICAgICAgbGVuZ3RoTmFtZSwKICAgICAgICBtaW51c05hbWUsCiAgICAgICAgbXVsdGlwbHlOYW1lLAogICAgICAgIG11c3RhY2hlTmFtZSwKICAgICAgICBwZXJjZW50TmFtZSwKICAgICAgICBwbHVzTmFtZSwKICAgICAgICByaWdodFNoaWZ0TmFtZSwKICAgICAgICB0cmlwbGVTaGlmdE5hbWU7CgppbXBvcnQgJy4uL3BhcnNlci5kYXJ0JyBzaG93IGxlbmd0aEZvclRva2VuLCBsZW5ndGhPZlNwYW4sIG9mZnNldEZvclRva2VuOwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JzsKCmltcG9ydCAnLi4vc2NvcGUuZGFydCc7CgppbXBvcnQgJy4uL3R5cGVfaW5mZXJlbmNlL3R5cGVfcHJvbW90aW9uLmRhcnQnCiAgICBzaG93IFR5cGVQcm9tb3Rpb25GYWN0LCBUeXBlUHJvbW90aW9uU2NvcGU7CgppbXBvcnQgJ2JvZHlfYnVpbGRlci5kYXJ0JyBzaG93IG5vTG9jYXRpb247CgppbXBvcnQgJ2NvbnN0bmVzcy5kYXJ0JyBzaG93IENvbnN0bmVzczsKCmltcG9ydCAnZXhwcmVzc2lvbl9nZW5lcmF0b3JfaGVscGVyLmRhcnQnIHNob3cgRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlcjsKCmltcG9ydCAnZm9yZXN0LmRhcnQnOwoKaW1wb3J0ICdrZXJuZWxfYXBpLmRhcnQnIHNob3cgTmFtZVN5c3RlbSwgcHJpbnROb2RlT24sIHByaW50UXVhbGlmaWVkTmFtZU9uOwoKaW1wb3J0ICdrZXJuZWxfYXN0X2FwaS5kYXJ0JwogICAgc2hvdwogICAgICAgIEFyZ3VtZW50cywKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBEeW5hbWljVHlwZSwKICAgICAgICBFeHByZXNzaW9uLAogICAgICAgIEluaXRpYWxpemVyLAogICAgICAgIE1lbWJlciwKICAgICAgICBOYW1lLAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uOwoKaW1wb3J0ICdrZXJuZWxfYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIEFjY2Vzc0Vycm9yQnVpbGRlciwKICAgICAgICBCdWlsZGVyLAogICAgICAgIEludmFsaWRUeXBlQnVpbGRlciwKICAgICAgICBMb2FkTGlicmFyeUJ1aWxkZXIsCiAgICAgICAgTmFtZWRUeXBlQnVpbGRlciwKICAgICAgICBUeXBlQnVpbGRlciwKICAgICAgICBVbmxpbmtlZERlY2xhcmF0aW9uLAogICAgICAgIFVucmVzb2x2ZWRUeXBlOwoKaW1wb3J0ICdrZXJuZWxfc2hhZG93X2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQsCiAgICAgICAgTG9hZExpYnJhcnlUZWFyT2ZmSnVkZ21lbnQsCiAgICAgICAgTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50LAogICAgICAgIE51bGxBd2FyZVByb3BlcnR5R2V0SnVkZ21lbnQsCiAgICAgICAgUHJvcGVydHlBc3NpZ25tZW50SnVkZ21lbnQsCiAgICAgICAgU3VwZXJNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQsCiAgICAgICAgU3VwZXJQcm9wZXJ0eUdldEp1ZGdtZW50LAogICAgICAgIFN5bnRoZXRpY1dyYXBwZXIsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50LAogICAgICAgIFZhcmlhYmxlR2V0SnVkZ21lbnQsCiAgICAgICAgZ2V0RXhwbGljaXRUeXBlQXJndW1lbnRzOwoKLy8vIEEgZ2VuZXJhdG9yIHJlcHJlc2VudHMgYSBzdWJleHByZXNzaW9uIGZvciB3aGljaCB3ZSBjYW4ndCB5ZXQgYnVpbGQgYW4KLy8vIGV4cHJlc3Npb24gYmVjYXVzZSB3ZSBkb24ndCB5ZXQga25vdyB0aGUgY29udGV4dCBpbiB3aGljaCBpdCdzIHVzZWQuCi8vLwovLy8gT25jZSB0aGUgY29udGV4dCBpcyBrbm93biwgYSBnZW5lcmF0b3IgY2FuIGJlIGNvbnZlcnRlZCBpbnRvIGFuIGV4cHJlc3Npb24KLy8vIGJ5IGNhbGxpbmcgYSBgYnVpbGRgIG1ldGhvZC4KLy8vCi8vLyBGb3IgZXhhbXBsZSwgd2hlbiBidWlsZGluZyBhIGtlcm5lbCByZXByZXNlbnRhdGlvbiBmb3IgYGFbeF0gPSBiYCwgYWZ0ZXIKLy8vIHBhcnNpbmcgYGFbeF1gIGJ1dCBiZWZvcmUgcGFyc2luZyBgPSBiYCwgd2UgZG9uJ3QgeWV0IGtub3cgd2hldGhlciB0bwovLy8gZ2VuZXJhdGUgYW4gaW52b2NhdGlvbiBvZiBgb3BlcmF0b3JbXWAgb3IgYG9wZXJhdG9yW109YCwgc28gd2UgY3JlYXRlIGEKLy8vIFtHZW5lcmF0b3JdIG9iamVjdC4gIExhdGVyLCBhZnRlciBgPSBiYCBpcyBwYXJzZWQsIFtidWlsZEFzc2lnbm1lbnRdIHdpbGwKLy8vIGJlIGNhbGxlZC4KYWJzdHJhY3QgY2xhc3MgR2VuZXJhdG9yIHsKICAvLy8gSGVscGVyIHRoYXQgcHJvdmlkZXMgYWNjZXNzIHRvIGNvbnRleHR1YWwgaW5mb3JtYXRpb24uCiAgZmluYWwgRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBfaGVscGVyOwoKICAvLy8gQSB0b2tlbiB0aGF0IGRlZmluZXMgYSBwb3NpdGlvbiBzdWJleHByZXNzaW9uIHRoYXQgYmVpbmcgYnVpbHQuCiAgZmluYWwgVG9rZW4gdG9rZW47CgogIGZpbmFsIGludCBmaWxlT2Zmc2V0OwoKICBHZW5lcmF0b3IodGhpcy5faGVscGVyLCB0aGlzLnRva2VuKSA6IGZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CgogIC8vLyBFYXN5IGFjY2VzcyB0byB0aGUgW0ZvcmVzdF0gZmFjdG9yeSBvYmplY3QuCiAgRm9yZXN0IGdldCBfZm9yZXN0ID0+IF9oZWxwZXIuZm9yZXN0OwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJbXByb3ZlIHRoZSBzZW1hbnRpYyBwcmVjaXNpb24gb2YgdGhpcyBwcm9wZXJ0eSBvcgogIC8vIHJlbW92ZSBpdC4gSXQncyB1bmNsZWFyIGlmIHRoZSBzZW1hbnRpY3MgaXMgaW5jb25zaXN0ZW50LiBJdCdzIGZvciBpbnN0YW5jZQogIC8vIHVzZWQgYm90aCBmb3IgdGhlIG5hbWUgb2YgYSB2YXJpYWJsZSBpbiBbVmFyaWFibGVVc2VHZW5lcmF0b3JdIGFuZCBmb3IKICAvLyBgW11gIGluIFtJbmRleGVkQWNjZXNzR2VuZXJhdG9yXSwgYW5kIHdoaWxlIHRoZSBmb3JtZXIgdGV4dCBvY2N1cnMgaW4gdGhlCiAgLy8gdW5kZXJseWluZyBzb3VyY2UgY29kZSwgdGhlIGxhdHRlciBkb2Vzbid0LgogIFN0cmluZyBnZXQgX3BsYWluTmFtZUZvclJlYWQ7CgogIC8vLyBJbnRlcm5hbCBuYW1lIHVzZWQgZm9yIGRlYnVnZ2luZy4KICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWU7CgogIC8vLyBUaGUgc291cmNlIHVyaSBmb3IgdXNlIGluIGVycm9yIG1lc3NhZ2luZy4KICBVcmkgZ2V0IF91cmkgPT4gX2hlbHBlci51cmk7CgogIC8vLyBCdWlsZHMgYSBbRXhwcmVzc2lvbl0gcmVwcmVzZW50aW5nIGEgcmVhZCBmcm9tIHRoZSBnZW5lcmF0b3IuCiAgLy8vCiAgLy8vIFRoZSByZWFkIG9mIHRoaXMgc3ViZXhwcmVzc2lvbiBkb2VzIF9ub3RfIG5lZWQgdG8gc3VwcG9ydCBhIHNpbXVsdGFuZW91cwogIC8vLyB3cml0ZSBvZiB0aGUgc2FtZSBzdWJleHByZXNzaW9uLgogIEV4cHJlc3Npb24gYnVpbGRTaW1wbGVSZWFkKCkgewogICAgcmV0dXJuIF9maW5pc2goX21ha2VTaW1wbGVSZWFkKCksIG51bGwpOwogIH0KCiAgLy8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIGZvciBbYnVpbGRTaW1wbGVSZWFkXS4KICAvLy8KICAvLy8gVGhlIHJlYWQgb2YgdGhlIHRoaXMgc3ViZXhwcmVzc2lvbiBkb2VzIF9ub3RfIG5lZWQgdG8gc3VwcG9ydCBhCiAgLy8vIHNpbXVsdGFuZW91cyB3cml0ZSBvZiB0aGUgc2FtZSBzdWJleHByZXNzaW9uLgogIC8vLwogIC8vLyBUaGlzIGlzIGluIGNvbnRyYXN0IHRvIFtfbWFrZVJlYWRdIHdoaWNoIGlzIHVzZWQgZm9yIGluc3RhbmNlIGluIGNvbXBvdW5kCiAgLy8vIGFzc2lnbm1lbnRzIGxpa2UgYGEuYiArPSBjYCB3aGVyZSBib3RoIGEgcmVhZCBhbmQgYSB3cml0ZSBvZiB0aGUKICAvLy8gc3ViZXhwcmVzc2lvbiBgYS5iYCBvY2N1cnMuCiAgLy8vCiAgLy8vIFN1YmNsYXNzZXMgdGhhdCBjYW4gYmVuZWZpdCBmcm9tIHRoaXMgZGlzdGluY3Rpb24gc2hvdWxkIG92ZXJyaWRlIHRoaXMKICAvLy8gbWV0aG9kLgogIEV4cHJlc3Npb24gX21ha2VTaW1wbGVSZWFkKCkgPT4gX21ha2VSZWFkKG51bGwpOwoKICAvLy8gQnVpbGRzIGEgW0V4cHJlc3Npb25dIHJlcHJlc2VudGluZyBhbiBhc3NpZ25tZW50IHdpdGggdGhlIGdlbmVyYXRvciBvbgogIC8vLyB0aGUgTEhTIGFuZCBbdmFsdWVdIG9uIHRoZSBSSFMuCiAgLy8vCiAgLy8vIFRoZSByZXR1cm5lZCBleHByZXNzaW9uIGV2YWx1YXRlcyB0byB0aGUgYXNzaWduZWQgdmFsdWUsIHVubGVzcwogIC8vLyBbdm9pZENvbnRleHRdIGlzIHRydWUsIGluIHdoaWNoIGNhc2UgaXQgbWF5IGV2YWx1YXRlIHRvIGFueXRoaW5nLgogIEV4cHJlc3Npb24gYnVpbGRBc3NpZ25tZW50KEV4cHJlc3Npb24gdmFsdWUsIHtib29sIHZvaWRDb250ZXh0OiBmYWxzZX0pIHsKICAgIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQgPSBzdGFydENvbXBsZXhBc3NpZ25tZW50KHZhbHVlKTsKICAgIHJldHVybiBfZmluaXNoKF9tYWtlU2ltcGxlV3JpdGUodmFsdWUsIHZvaWRDb250ZXh0LCBjb21wbGV4QXNzaWdubWVudCksCiAgICAgICAgY29tcGxleEFzc2lnbm1lbnQpOwogIH0KCiAgLy8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIGZvciBbYnVpbGRBc3NpZ25tZW50XS4KICBFeHByZXNzaW9uIF9tYWtlU2ltcGxlV3JpdGUoRXhwcmVzc2lvbiB2YWx1ZSwgYm9vbCB2b2lkQ29udGV4dCwKICAgICAgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgcmV0dXJuIF9tYWtlV3JpdGUodmFsdWUsIHZvaWRDb250ZXh0LCBjb21wbGV4QXNzaWdubWVudCk7CiAgfQoKICAvLy8gUmV0dXJucyBhIFtFeHByZXNzaW9uXSByZXByZXNlbnRpbmcgYSBudWxsLWF3YXJlIGFzc2lnbm1lbnQgKGA/Pz1gKSB3aXRoCiAgLy8vIHRoZSBnZW5lcmF0b3Igb24gdGhlIExIUyBhbmQgW3ZhbHVlXSBvbiB0aGUgUkhTLgogIC8vLwogIC8vLyBUaGUgcmV0dXJuZWQgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gdGhlIGFzc2lnbmVkIHZhbHVlLCB1bmxlc3MKICAvLy8gW3ZvaWRDb250ZXh0XSBpcyB0cnVlLCBpbiB3aGljaCBjYXNlIGl0IG1heSBldmFsdWF0ZSB0byBhbnl0aGluZy4KICAvLy8KICAvLy8gW3R5cGVdIGlzIHRoZSBzdGF0aWMgdHlwZSBvZiB0aGUgUkhTLgogIEV4cHJlc3Npb24gYnVpbGROdWxsQXdhcmVBc3NpZ25tZW50KAogICAgICBFeHByZXNzaW9uIHZhbHVlLCBEYXJ0VHlwZSB0eXBlLCBpbnQgb2Zmc2V0LAogICAgICB7Ym9vbCB2b2lkQ29udGV4dDogZmFsc2V9KSB7CiAgICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50ID0gc3RhcnRDb21wbGV4QXNzaWdubWVudCh2YWx1ZSk7CiAgICBpZiAodm9pZENvbnRleHQpIHsKICAgICAgRXhwcmVzc2lvbiBudWxsQXdhcmVDb21iaW5lciA9IF9mb3Jlc3QuY3JlYXRlQ29uZGl0aW9uYWxFeHByZXNzaW9uKAogICAgICAgICAgYnVpbGRJc051bGwoX21ha2VSZWFkKGNvbXBsZXhBc3NpZ25tZW50KSwgb2Zmc2V0LCBfaGVscGVyKSwKICAgICAgICAgIG51bGwsCiAgICAgICAgICBfbWFrZVdyaXRlKHZhbHVlLCBmYWxzZSwgY29tcGxleEFzc2lnbm1lbnQpLAogICAgICAgICAgbnVsbCwKICAgICAgICAgIF9mb3Jlc3QuY3JlYXRlTnVsbExpdGVyYWwobnVsbCkuLmZpbGVPZmZzZXQgPSBvZmZzZXQpCiAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjb21wbGV4QXNzaWdubWVudD8ubnVsbEF3YXJlQ29tYmluZXIgPSBudWxsQXdhcmVDb21iaW5lcjsKICAgICAgcmV0dXJuIF9maW5pc2gobnVsbEF3YXJlQ29tYmluZXIsIGNvbXBsZXhBc3NpZ25tZW50KTsKICAgIH0KICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdG1wID0KICAgICAgICBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZShfbWFrZVJlYWQoY29tcGxleEFzc2lnbm1lbnQpKTsKICAgIEV4cHJlc3Npb24gbnVsbEF3YXJlQ29tYmluZXIgPSBfZm9yZXN0LmNyZWF0ZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigKICAgICAgICBidWlsZElzTnVsbChuZXcgVmFyaWFibGVHZXQodG1wKSwgb2Zmc2V0LCBfaGVscGVyKSwKICAgICAgICBudWxsLAogICAgICAgIF9tYWtlV3JpdGUodmFsdWUsIGZhbHNlLCBjb21wbGV4QXNzaWdubWVudCksCiAgICAgICAgbnVsbCwKICAgICAgICBuZXcgVmFyaWFibGVHZXQodG1wKSkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgY29tcGxleEFzc2lnbm1lbnQ/Lm51bGxBd2FyZUNvbWJpbmVyID0gbnVsbEF3YXJlQ29tYmluZXI7CiAgICByZXR1cm4gX2ZpbmlzaChtYWtlTGV0KHRtcCwgbnVsbEF3YXJlQ29tYmluZXIpLCBjb21wbGV4QXNzaWdubWVudCk7CiAgfQoKICAvLy8gUmV0dXJucyBhIFtFeHByZXNzaW9uXSByZXByZXNlbnRpbmcgYSBjb21wb3VuZCBhc3NpZ25tZW50IChlLmcuIGArPWApCiAgLy8vIHdpdGggdGhlIGdlbmVyYXRvciBvbiB0aGUgTEhTIGFuZCBbdmFsdWVdIG9uIHRoZSBSSFMuCiAgRXhwcmVzc2lvbiBidWlsZENvbXBvdW5kQXNzaWdubWVudChOYW1lIGJpbmFyeU9wZXJhdG9yLCBFeHByZXNzaW9uIHZhbHVlLAogICAgICB7aW50IG9mZnNldDogVHJlZU5vZGUubm9PZmZzZXQsCiAgICAgIGJvb2wgdm9pZENvbnRleHQ6IGZhbHNlLAogICAgICBQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0LAogICAgICBib29sIGlzUHJlSW5jRGVjOiBmYWxzZSwKICAgICAgYm9vbCBpc1Bvc3RJbmNEZWM6IGZhbHNlfSkgewogICAgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCA9IHN0YXJ0Q29tcGxleEFzc2lnbm1lbnQodmFsdWUpOwogICAgY29tcGxleEFzc2lnbm1lbnQ/LmlzUHJlSW5jRGVjID0gaXNQcmVJbmNEZWM7CiAgICBjb21wbGV4QXNzaWdubWVudD8uaXNQb3N0SW5jRGVjID0gaXNQb3N0SW5jRGVjOwogICAgRXhwcmVzc2lvbiBjb21iaW5lciA9IG1ha2VCaW5hcnkoX21ha2VSZWFkKGNvbXBsZXhBc3NpZ25tZW50KSwKICAgICAgICBiaW5hcnlPcGVyYXRvciwgaW50ZXJmYWNlVGFyZ2V0LCB2YWx1ZSwgX2hlbHBlciwKICAgICAgICBvZmZzZXQ6IG9mZnNldCk7CiAgICBjb21wbGV4QXNzaWdubWVudD8uY29tYmluZXIgPSBjb21iaW5lcjsKICAgIHJldHVybiBfZmluaXNoKF9tYWtlV3JpdGUoY29tYmluZXIsIHZvaWRDb250ZXh0LCBjb21wbGV4QXNzaWdubWVudCksCiAgICAgICAgY29tcGxleEFzc2lnbm1lbnQpOwogIH0KCiAgLy8vIFJldHVybnMgYSBbRXhwcmVzc2lvbl0gcmVwcmVzZW50aW5nIGEgcHJlLWluY3JlbWVudCBvciBwcmUtZGVjcmVtZW50IG9mCiAgLy8vIHRoZSBnZW5lcmF0b3IuCiAgRXhwcmVzc2lvbiBidWlsZFByZWZpeEluY3JlbWVudChOYW1lIGJpbmFyeU9wZXJhdG9yLAogICAgICB7aW50IG9mZnNldDogVHJlZU5vZGUubm9PZmZzZXQsCiAgICAgIGJvb2wgdm9pZENvbnRleHQ6IGZhbHNlLAogICAgICBQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0fSkgewogICAgcmV0dXJuIGJ1aWxkQ29tcG91bmRBc3NpZ25tZW50KAogICAgICAgIGJpbmFyeU9wZXJhdG9yLCBfZm9yZXN0LmNyZWF0ZUludExpdGVyYWwoMSwgbnVsbCkuLmZpbGVPZmZzZXQgPSBvZmZzZXQsCiAgICAgICAgb2Zmc2V0OiBvZmZzZXQsCiAgICAgICAgdm9pZENvbnRleHQ6IHZvaWRDb250ZXh0LAogICAgICAgIGludGVyZmFjZVRhcmdldDogaW50ZXJmYWNlVGFyZ2V0LAogICAgICAgIGlzUHJlSW5jRGVjOiB0cnVlKTsKICB9CgogIC8vLyBSZXR1cm5zIGEgW0V4cHJlc3Npb25dIHJlcHJlc2VudGluZyBhIHBvc3QtaW5jcmVtZW50IG9yIHBvc3QtZGVjcmVtZW50IG9mCiAgLy8vIHRoZSBnZW5lcmF0b3IuCiAgRXhwcmVzc2lvbiBidWlsZFBvc3RmaXhJbmNyZW1lbnQoTmFtZSBiaW5hcnlPcGVyYXRvciwKICAgICAge2ludCBvZmZzZXQ6IFRyZWVOb2RlLm5vT2Zmc2V0LAogICAgICBib29sIHZvaWRDb250ZXh0OiBmYWxzZSwKICAgICAgUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldH0pIHsKICAgIGlmICh2b2lkQ29udGV4dCkgewogICAgICByZXR1cm4gYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQoYmluYXJ5T3BlcmF0b3IsCiAgICAgICAgICBfZm9yZXN0LmNyZWF0ZUludExpdGVyYWwoMSwgbnVsbCkuLmZpbGVPZmZzZXQgPSBvZmZzZXQsCiAgICAgICAgICBvZmZzZXQ6IG9mZnNldCwKICAgICAgICAgIHZvaWRDb250ZXh0OiB2b2lkQ29udGV4dCwKICAgICAgICAgIGludGVyZmFjZVRhcmdldDogaW50ZXJmYWNlVGFyZ2V0LAogICAgICAgICAgaXNQb3N0SW5jRGVjOiB0cnVlKTsKICAgIH0KICAgIEludExpdGVyYWwgcmhzID0gX2ZvcmVzdC5jcmVhdGVJbnRMaXRlcmFsKDEsIG51bGwpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCA9IHN0YXJ0Q29tcGxleEFzc2lnbm1lbnQocmhzKTsKICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFsdWUgPQogICAgICAgIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKF9tYWtlUmVhZChjb21wbGV4QXNzaWdubWVudCkpOwogICAgdmFsdWVBY2Nlc3MoKSA9PiBuZXcgVmFyaWFibGVHZXQodmFsdWUpOwogICAgRXhwcmVzc2lvbiBjb21iaW5lciA9IG1ha2VCaW5hcnkoCiAgICAgICAgdmFsdWVBY2Nlc3MoKSwgYmluYXJ5T3BlcmF0b3IsIGludGVyZmFjZVRhcmdldCwgcmhzLCBfaGVscGVyLAogICAgICAgIG9mZnNldDogb2Zmc2V0KTsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py5jb21iaW5lciA9IGNvbWJpbmVyOwogICAgY29tcGxleEFzc2lnbm1lbnQ/LmlzUG9zdEluY0RlYyA9IHRydWU7CiAgICBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQgZHVtbXkgPQogICAgICAgIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQuZm9yVmFsdWUoCiAgICAgICAgICAgIF9tYWtlV3JpdGUoY29tYmluZXIsIHRydWUsIGNvbXBsZXhBc3NpZ25tZW50KSk7CiAgICByZXR1cm4gX2ZpbmlzaCgKICAgICAgICBtYWtlTGV0KHZhbHVlLCBtYWtlTGV0KGR1bW15LCB2YWx1ZUFjY2VzcygpKSksIGNvbXBsZXhBc3NpZ25tZW50KTsKICB9CgogIC8vLyBSZXR1cm5zIGEgW0V4cHJlc3Npb25dIHJlcHJlc2VudGluZyBhIGNvbXBpbGUtdGltZSBlcnJvci4KICAvLy8KICAvLy8gQXQgcnVudGltZSwgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLgogIEV4cHJlc3Npb24gX21ha2VJbnZhbGlkUmVhZCgpIHsKICAgIHJldHVybiBfaGVscGVyLndyYXBTeW50aGV0aWNFeHByZXNzaW9uKAogICAgICAgIF9oZWxwZXIudGhyb3dOb1N1Y2hNZXRob2RFcnJvcigKICAgICAgICAgICAgX2ZvcmVzdC5jcmVhdGVOdWxsTGl0ZXJhbChmaWxlT2Zmc2V0KSwKICAgICAgICAgICAgX3BsYWluTmFtZUZvclJlYWQsCiAgICAgICAgICAgIF9mb3Jlc3QuY3JlYXRlQXJndW1lbnRzRW1wdHkobm9Mb2NhdGlvbiksCiAgICAgICAgICAgIGZpbGVPZmZzZXQsCiAgICAgICAgICAgIGlzR2V0dGVyOiB0cnVlKSwKICAgICAgICBmaWxlT2Zmc2V0KTsKICB9CgogIC8vLyBSZXR1cm5zIGEgW0V4cHJlc3Npb25dIHJlcHJlc2VudGluZyBhIGNvbXBpbGUtdGltZSBlcnJvciB3cmFwcGluZwogIC8vLyBbdmFsdWVdLgogIC8vLwogIC8vLyBBdCBydW50aW1lLCBbdmFsdWVdIHdpbGwgYmUgZXZhbHVhdGVkIGJlZm9yZSB0aHJvd2luZyBhbiBleGNlcHRpb24uCiAgRXhwcmVzc2lvbiBfbWFrZUludmFsaWRXcml0ZShFeHByZXNzaW9uIHZhbHVlKSB7CiAgICByZXR1cm4gX2hlbHBlci53cmFwU3ludGhldGljRXhwcmVzc2lvbigKICAgICAgICBfaGVscGVyLnRocm93Tm9TdWNoTWV0aG9kRXJyb3IoCiAgICAgICAgICAgIF9mb3Jlc3QuY3JlYXRlTnVsbExpdGVyYWwoZmlsZU9mZnNldCksCiAgICAgICAgICAgIF9wbGFpbk5hbWVGb3JSZWFkLAogICAgICAgICAgICBfZm9yZXN0LmNyZWF0ZUFyZ3VtZW50cyhub0xvY2F0aW9uLCA8RXhwcmVzc2lvbj5bdmFsdWVdKSwKICAgICAgICAgICAgZmlsZU9mZnNldCwKICAgICAgICAgICAgaXNTZXR0ZXI6IHRydWUpLAogICAgICAgIGZpbGVPZmZzZXQpOwogIH0KCiAgLy8vIFJldHVybnMgYW4gW0V4cHJlc3Npb25dIHRoZSByZWFkcyB0aGlzIHN1YmV4cHJlc3Npb24uCiAgLy8vCiAgLy8vIFRoZSBjcmVhdGVkIHJlYWQgZXhwcmVzc2lvbiBtdXN0IHN1cHBvcnQgYSBzaW11bHRhbmVvdXMgd3JpdGUgb2YgdGhlIHNhbWUKICAvLy8gZXhwcmVzc2lvbiB3aXRoIHZhbGlkIHNlbWFudGljcy4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGluIGBhLmIgKz0gY2AsIGJvdGggYSByZWFkIGFuZCBhIHdyaXRlIG9mIHRoZSBzdWJleHByZXNzaW9uCiAgLy8vIGBhLmJgIGlzIGNyZWF0ZWQsIGJ1dCBgYWAgbXVzdCBfbm90XyBiZSBldmFsdWF0ZWQgdHdpY2UuIEZvciB0aGlzIHJlYXNvbgogIC8vLyBbUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3JdIGNyZWF0ZXMgYSBzeW50aGV0aWMgbG9jYWwgdmFyaWFibGUgZm9yIGBhYCBhbmQKICAvLy8gdXNlcyB0aGlzIGZvciB0aGUgYm90aCB0aGUgW1Byb3BlcnR5R2V0XSBhbmQgW1Byb3BlcnR5U2V0XSBvZiBwcm9wZXJ0eQogIC8vLyBgYmAuCiAgLy8vCiAgLy8vIElmIFtjb21wbGV4QXNzaWdubWVudF0gaXMgcHJvdmlkZWQsIHRoZSBjcmVhdGVkIGV4cHJlc3Npb24gaXMgcmVnaXN0ZXJlZAogIC8vLyBhcyB0aGUgYHJlYWRgIG9mIHRoZSBjb21wbGV4IGFzc2lnbm1lbnQuCiAgLy8vCiAgLy8vIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGNyZWF0ZXMgdGhlIGV4cHJlc3Npb24gdGhyb3VnaAogIC8vLyBbX21ha2VJbnZhbGlkUmVhZF0uIFN1YmNsYXNzZXMgd2l0aCB2YWxpZCByZWFkIG9wZXJhdGlvbnMgbXVzdCBvdmVycmlkZQogIC8vLyB0aGlzIG1ldGhvZCB3aXRoIGEgdmFsaWQgaW1wbGVtZW50YXRpb24uCiAgRXhwcmVzc2lvbiBfbWFrZVJlYWQoQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgRXhwcmVzc2lvbiByZWFkID0gX21ha2VJbnZhbGlkUmVhZCgpOwogICAgaWYgKGNvbXBsZXhBc3NpZ25tZW50ICE9IG51bGwpIHsKICAgICAgcmVhZCA9IF9oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24ocmVhZCk7CiAgICAgIGNvbXBsZXhBc3NpZ25tZW50LnJlYWQgPSByZWFkOwogICAgfQogICAgcmV0dXJuIHJlYWQ7CiAgfQoKICAvLy8gUmV0dXJucyBhbiBbRXhwcmVzc2lvbl0gdGhlIHdyaXRlIFt2YWx1ZV0gdG8gdGhpcyBzdWJleHByZXNzaW9uLgogIC8vLwogIC8vLyBUaGUgY3JlYXRlZCByZWFkIGV4cHJlc3Npb24gbXVzdCBzdXBwb3J0IGEgc2ltdWx0YW5lb3VzIHJlYWQgb2YgdGhlIHNhbWUKICAvLy8gZXhwcmVzc2lvbiB3aXRoIHZhbGlkIHNlbWFudGljcy4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGluIGBhLmIgKz0gY2AsIGJvdGggYSByZWFkIGFuZCBhIHdyaXRlIG9mIHRoZSBzdWJleHByZXNzaW9uCiAgLy8vIGBhLmJgIGlzIGNyZWF0ZWQsIGJ1dCBgYWAgbXVzdCBfbm90XyBiZSBldmFsdWF0ZWQgdHdpY2UuIEZvciB0aGlzIHJlYXNvbgogIC8vLyBbUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3JdIGNyZWF0ZXMgYSBzeW50aGV0aWMgbG9jYWwgdmFyaWFibGUgZm9yIGBhYCBhbmQKICAvLy8gdXNlcyB0aGlzIGZvciB0aGUgYm90aCB0aGUgW1Byb3BlcnR5R2V0XSBhbmQgW1Byb3BlcnR5U2V0XSBvZiBwcm9wZXJ0eQogIC8vLyBgYmAuCiAgLy8vCiAgLy8vIElmIFtjb21wbGV4QXNzaWdubWVudF0gaXMgcHJvdmlkZWQsIHRoZSBjcmVhdGVkIGV4cHJlc3Npb24gaXMgcmVnaXN0ZXJlZAogIC8vLyBhcyB0aGUgYHdyaXRlYCBvZiB0aGUgY29tcGxleCBhc3NpZ25tZW50LgogIC8vLwogIC8vLyBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBjcmVhdGVzIHRoZSBleHByZXNzaW9uIHRocm91Z2gKICAvLy8gW19tYWtlSW52YWxpZFdyaXRlXS4gU3ViY2xhc3NlcyB3aXRoIHZhbGlkIHdyaXRlIG9wZXJhdGlvbnMgbXVzdCBvdmVycmlkZQogIC8vLyB0aGlzIG1ldGhvZCB3aXRoIGEgdmFsaWQgaW1wbGVtZW50YXRpb24uCiAgRXhwcmVzc2lvbiBfbWFrZVdyaXRlKEV4cHJlc3Npb24gdmFsdWUsIGJvb2wgdm9pZENvbnRleHQsCiAgICAgIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIEV4cHJlc3Npb24gd3JpdGUgPSBfbWFrZUludmFsaWRXcml0ZSh2YWx1ZSk7CiAgICBpZiAoY29tcGxleEFzc2lnbm1lbnQgIT0gbnVsbCkgewogICAgICB3cml0ZSA9IF9oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24od3JpdGUpOwogICAgICBjb21wbGV4QXNzaWdubWVudC53cml0ZSA9IHdyaXRlOwogICAgfQogICAgcmV0dXJuIHdyaXRlOwogIH0KCiAgRXhwcmVzc2lvbiBfZmluaXNoKAogICAgICBFeHByZXNzaW9uIGJvZHksIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIGlmICghX2hlbHBlci5sZWdhY3lNb2RlICYmIGNvbXBsZXhBc3NpZ25tZW50ICE9IG51bGwpIHsKICAgICAgY29tcGxleEFzc2lnbm1lbnQuZGVzdWdhcmVkID0gYm9keTsKICAgICAgcmV0dXJuIGNvbXBsZXhBc3NpZ25tZW50OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGJvZHk7CiAgICB9CiAgfQoKICAvLy8gQ3JlYXRlcyBhIGRhdGEgc3RydWN0dXJlIGZvciB0cmFja2luZyB0aGUgZGVzdWdhcmluZyBvZiBhIGNvbXBsZXgKICAvLy8gYXNzaWdubWVudCBleHByZXNzaW9uIHdob3NlIHJpZ2h0IGhhbmQgc2lkZSBpcyBbcmhzXS4KICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IHN0YXJ0Q29tcGxleEFzc2lnbm1lbnQoRXhwcmVzc2lvbiByaHMpID0+CiAgICAgIFN5bnRoZXRpY1dyYXBwZXIud3JhcElsbGVnYWxBc3NpZ25tZW50KHJocyk7CgogIEV4cHJlc3Npb24gYnVpbGRGb3JFZmZlY3QoKSA9PiBidWlsZFNpbXBsZVJlYWQoKTsKCiAgSW5pdGlhbGl6ZXIgYnVpbGRGaWVsZEluaXRpYWxpemVyKE1hcDxTdHJpbmcsIGludD4gaW5pdGlhbGl6ZWRGaWVsZHMpIHsKICAgIHJldHVybiBfaGVscGVyLmJ1aWxkSW52YWxpZEluaXRpYWxpemVyKAogICAgICAgIF9oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oX2hlbHBlci5idWlsZFByb2JsZW0oCiAgICAgICAgICAgIG1lc3NhZ2VJbnZhbGlkSW5pdGlhbGl6ZXIsIGZpbGVPZmZzZXQsIGxlbmd0aEZvclRva2VuKHRva2VuKSkpLAogICAgICAgIGZpbGVPZmZzZXQpOwogIH0KCiAgLy8vIFJldHVybnMgYW4gZXhwcmVzc2lvbiwgZ2VuZXJhdG9yIG9yIGluaXRpYWxpemVyIGZvciBhbiBpbnZvY2F0aW9uIG9mIHRoaXMKICAvLy8gc3ViZXhwcmVzc2lvbiB3aXRoIFthcmd1bWVudHNdIGF0IFtvZmZzZXRdLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2U6CiAgLy8vICogSWYgdGhpcyBpcyBhIFtQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcl0gZm9yIGBhLmJgLCB0aGlzIHdpbGwgY3JlYXRlCiAgLy8vICAgYSBbTWV0aG9kSW52b2NhdGlvbl0gZm9yIGBhLmIoLi4uKWAuCiAgLy8vICogSWYgdGhpcyBpcyBhIFtUaGlzQWNjZXNzR2VuZXJhdG9yXSBmb3IgYHRoaXNgIGluIGFuIGluaXRpYWxpemVyIGxpc3QsCiAgLy8vICAgdGhpcyB3aWxsIGNyZWF0ZSBhIFtSZWRpcmVjdGluZ0luaXRpYWxpemVyXSBmb3IgYHRoaXMoLi4uKWAuCiAgLy8vICogSWYgdGhpcyBpcyBhbiBbSW5jb21wbGV0ZUVycm9yR2VuZXJhdG9yXSwgdGhpcyB3aWxsIHJldHVybiB0aGUgZXJyb3IKICAvLy8gICBnZW5lcmF0b3IgaXRzZWxmLgogIC8vLwogIC8vLyBJZiB0aGUgaW52b2NhdGlvbiBoYXMgZXhwbGljaXQgdHlwZSBhcmd1bWVudHMKICAvLy8gW2J1aWxkVHlwZVdpdGhSZXNvbHZlZEFyZ3VtZW50c10gY2FsbGVkIGluc3RlYWQuCiAgLyogRXhwcmVzc2lvbiB8IEdlbmVyYXRvciB8IEluaXRpYWxpemVyICovIGRvSW52b2NhdGlvbigKICAgICAgaW50IG9mZnNldCwgQXJndW1lbnRzIGFyZ3VtZW50cyk7CgogIC8qIEV4cHJlc3Npb24gfCBHZW5lcmF0b3IgKi8gYnVpbGRQcm9wZXJ0eUFjY2VzcygKICAgICAgSW5jb21wbGV0ZVNlbmRHZW5lcmF0b3Igc2VuZCwgaW50IG9wZXJhdG9yT2Zmc2V0LCBib29sIGlzTnVsbEF3YXJlKSB7CiAgICBpZiAoc2VuZCBpcyBTZW5kQWNjZXNzR2VuZXJhdG9yKSB7CiAgICAgIHJldHVybiBfaGVscGVyLmJ1aWxkTWV0aG9kSW52b2NhdGlvbihidWlsZFNpbXBsZVJlYWQoKSwgc2VuZC5uYW1lLAogICAgICAgICAgc2VuZC5hcmd1bWVudHMsIG9mZnNldEZvclRva2VuKHNlbmQudG9rZW4pLAogICAgICAgICAgaXNOdWxsQXdhcmU6IGlzTnVsbEF3YXJlKTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChfaGVscGVyLmNvbnN0YW50Q29udGV4dCAhPSBDb25zdGFudENvbnRleHQubm9uZSAmJgogICAgICAgICAgc2VuZC5uYW1lICE9IGxlbmd0aE5hbWUpIHsKICAgICAgICBfaGVscGVyLmFkZFByb2JsZW0oCiAgICAgICAgICAgIG1lc3NhZ2VOb3RBQ29uc3RhbnRFeHByZXNzaW9uLCBmaWxlT2Zmc2V0LCB0b2tlbi5sZW5ndGgpOwogICAgICB9CiAgICAgIHJldHVybiBQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvci5tYWtlKF9oZWxwZXIsIHNlbmQudG9rZW4sCiAgICAgICAgICBidWlsZFNpbXBsZVJlYWQoKSwgc2VuZC5uYW1lLCBudWxsLCBudWxsLCBpc051bGxBd2FyZSk7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyBhIFtUeXBlQnVpbGRlcl0gZm9yIHRoaXMgc3ViZXhwcmVzc2lvbiBpbnN0YW50aWF0ZWQgd2l0aCB0aGUKICAvLy8gdHlwZSBbYXJndW1lbnRzXS4gSWYgbm8gdHlwZSBhcmd1bWVudHMgYXJlIHByb3ZpZGVkIFthcmd1bWVudHNdIGlzIGBudWxsYC4KICAvLy8KICAvLy8gVGhlIHR5cGUgYXJndW1lbnRzIGhhdmUgbm90IGJlZW4gcmVzb2x2ZWQgYW5kIHNob3VsZCBiZSByZXNvbHZlZCB0bwogIC8vLyBjcmVhdGUgYSBbVHlwZUJ1aWxkZXJdIGZvciBhIHZhbGlkIHR5cGUuCiAgVHlwZUJ1aWxkZXIgYnVpbGRUeXBlV2l0aFJlc29sdmVkQXJndW1lbnRzKExpc3Q8VW5yZXNvbHZlZFR5cGU+IGFyZ3VtZW50cykgewogICAgTmFtZWRUeXBlQnVpbGRlciByZXN1bHQgPSBuZXcgTmFtZWRUeXBlQnVpbGRlcih0b2tlbi5sZXhlbWUsIG51bGwpOwogICAgTWVzc2FnZSBtZXNzYWdlID0gdGVtcGxhdGVOb3RBVHlwZS53aXRoQXJndW1lbnRzKHRva2VuLmxleGVtZSk7CiAgICBfaGVscGVyLmxpYnJhcnlCdWlsZGVyCiAgICAgICAgLmFkZFByb2JsZW0obWVzc2FnZSwgZmlsZU9mZnNldCwgbGVuZ3RoRm9yVG9rZW4odG9rZW4pLCBfdXJpKTsKICAgIHJlc3VsdC5iaW5kKHJlc3VsdC5idWlsZEludmFsaWRUeXBlKAogICAgICAgIG1lc3NhZ2Uud2l0aExvY2F0aW9uKF91cmksIGZpbGVPZmZzZXQsIGxlbmd0aEZvclRva2VuKHRva2VuKSkpKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvKiBFeHByZXNzaW9uIHwgR2VuZXJhdG9yICovIE9iamVjdCBxdWFsaWZpZWRMb29rdXAoVG9rZW4gbmFtZSkgewogICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkUXVhbGlmaWVkVXNlR2VuZXJhdG9yKF9oZWxwZXIsIG5hbWUsIHRoaXMsIGZhbHNlKTsKICB9CgogIEV4cHJlc3Npb24gaW52b2tlQ29uc3RydWN0b3IoCiAgICAgIExpc3Q8VW5yZXNvbHZlZFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBBcmd1bWVudHMgYXJndW1lbnRzLAogICAgICBUb2tlbiBuYW1lVG9rZW4sCiAgICAgIFRva2VuIG5hbWVMYXN0VG9rZW4sCiAgICAgIENvbnN0bmVzcyBjb25zdG5lc3MpIHsKICAgIGlmICh0eXBlQXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgYXNzZXJ0KF9mb3Jlc3QuYXJndW1lbnRzVHlwZUFyZ3VtZW50cyhhcmd1bWVudHMpLmlzRW1wdHkpOwogICAgICBfZm9yZXN0LmFyZ3VtZW50c1NldFR5cGVBcmd1bWVudHMoCiAgICAgICAgICBhcmd1bWVudHMsIF9oZWxwZXIuYnVpbGREYXJ0VHlwZUFyZ3VtZW50cyh0eXBlQXJndW1lbnRzKSk7CiAgICB9CiAgICByZXR1cm4gX2hlbHBlci53cmFwSW52YWxpZENvbnN0cnVjdG9ySW52b2NhdGlvbigKICAgICAgICBfaGVscGVyLnRocm93Tm9TdWNoTWV0aG9kRXJyb3IoCiAgICAgICAgICAgIF9mb3Jlc3QuY3JlYXRlTnVsbExpdGVyYWwoZmlsZU9mZnNldCksCiAgICAgICAgICAgIF9oZWxwZXIuY29uc3RydWN0b3JOYW1lRm9yRGlhZ25vc3RpY3MobmFtZSwKICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogX3BsYWluTmFtZUZvclJlYWQpLAogICAgICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgICAgIG5hbWVUb2tlbi5jaGFyT2Zmc2V0KSwKICAgICAgICBudWxsLAogICAgICAgIGFyZ3VtZW50cywKICAgICAgICBmaWxlT2Zmc2V0KTsKICB9CgogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgYnVmZmVyLndyaXRlKF9kZWJ1Z05hbWUpOwogICAgYnVmZmVyLndyaXRlKCIob2Zmc2V0OiAiKTsKICAgIGJ1ZmZlci53cml0ZSgiJHtmaWxlT2Zmc2V0fSIpOwogICAgcHJpbnRPbihidWZmZXIpOwogICAgYnVmZmVyLndyaXRlKCIpIik7CiAgICByZXR1cm4gIiRidWZmZXIiOwogIH0KfQoKLy8vIFtWYXJpYWJsZVVzZUdlbmVyYXRvcl0gcmVwcmVzZW50cyB0aGUgc3ViZXhwcmVzc2lvbiB3aG9zZSBwcmVmaXggaXMgYQovLy8gbG9jYWwgdmFyaWFibGUgb3IgcGFyYW1ldGVyIG5hbWUuCi8vLwovLy8gRm9yIGluc3RhbmNlOgovLy8KLy8vICAgbWV0aG9kKGEpIHsKLy8vICAgICB2YXIgYjsKLy8vICAgICBhOyAgICAgICAgIC8vIGEgVmFyaWFibGVVc2VHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYGFgLgovLy8gICAgIGIgPSBhW107ICAgLy8gYSBWYXJpYWJsZVVzZUdlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgYWAgYW5kIGBiYC4KLy8vICAgICBiKCk7ICAgICAgIC8vIGEgVmFyaWFibGVVc2VHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYGJgLgovLy8gICAgIGIuYyA9IGEuZDsgLy8gYSBWYXJpYWJsZVVzZUdlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgYWAgYW5kIGBiYC4KLy8vICAgfQovLy8KLy8vIElmIHRoZSB2YXJpYWJsZSBpcyBmaW5hbCBvciByZWFkLW9ubHkgKGxpa2UgYSBwYXJhbWV0ZXIgaW4gYSBjYXRjaCBjbGF1c2UpIGEKLy8vIFtSZWFkT25seUFjY2Vzc0dlbmVyYXRvcl0gaXMgY3JlYXRlZCBpbnN0ZWFkLgpjbGFzcyBWYXJpYWJsZVVzZUdlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvciB7CiAgZmluYWwgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZTsKCiAgZmluYWwgRGFydFR5cGUgcHJvbW90ZWRUeXBlOwoKICBWYXJpYWJsZVVzZUdlbmVyYXRvcigKICAgICAgRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsIFRva2VuIHRva2VuLCB0aGlzLnZhcmlhYmxlLAogICAgICBbdGhpcy5wcm9tb3RlZFR5cGVdKQogICAgICA6IHN1cGVyKGhlbHBlciwgdG9rZW4pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIlZhcmlhYmxlVXNlR2VuZXJhdG9yIjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfcGxhaW5OYW1lRm9yUmVhZCA9PiB2YXJpYWJsZS5uYW1lOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlUmVhZChDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICBUeXBlUHJvbW90aW9uRmFjdCBmYWN0ID0gX2hlbHBlci50eXBlUHJvbW90ZXIKICAgICAgICA/LmdldEZhY3RGb3JBY2Nlc3ModmFyaWFibGUsIF9oZWxwZXIuZnVuY3Rpb25OZXN0aW5nTGV2ZWwpOwogICAgVHlwZVByb21vdGlvblNjb3BlIHNjb3BlID0gX2hlbHBlci50eXBlUHJvbW90ZXI/LmN1cnJlbnRTY29wZTsKICAgIFZhcmlhYmxlR2V0SnVkZ21lbnQgcmVhZCA9IG5ldyBWYXJpYWJsZUdldEp1ZGdtZW50KHZhcmlhYmxlLCBmYWN0LCBzY29wZSkKICAgICAgLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py5yZWFkID0gcmVhZDsKICAgIHJldHVybiByZWFkOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVdyaXRlKEV4cHJlc3Npb24gdmFsdWUsIGJvb2wgdm9pZENvbnRleHQsCiAgICAgIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIF9oZWxwZXIudHlwZVByb21vdGVyCiAgICAgICAgPy5tdXRhdGVWYXJpYWJsZSh2YXJpYWJsZSwgX2hlbHBlci5mdW5jdGlvbk5lc3RpbmdMZXZlbCk7CiAgICBFeHByZXNzaW9uIHdyaXRlOwogICAgaWYgKHZhcmlhYmxlLmlzRmluYWwgfHwgdmFyaWFibGUuaXNDb25zdCkgewogICAgICB3cml0ZSA9IF9tYWtlSW52YWxpZFdyaXRlKHZhbHVlKTsKICAgICAgaWYgKGNvbXBsZXhBc3NpZ25tZW50ICE9IG51bGwpIHsKICAgICAgICB3cml0ZSA9IF9oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24od3JpdGUpOwogICAgICAgIGNvbXBsZXhBc3NpZ25tZW50LndyaXRlID0gd3JpdGU7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlID0gbmV3IFZhcmlhYmxlU2V0KHZhcmlhYmxlLCB2YWx1ZSkuLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0OwogICAgICBjb21wbGV4QXNzaWdubWVudD8ud3JpdGUgPSB3cml0ZTsKICAgIH0KICAgIHJldHVybiB3cml0ZTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBfaGVscGVyLmJ1aWxkTWV0aG9kSW52b2NhdGlvbihidWlsZFNpbXBsZVJlYWQoKSwgY2FsbE5hbWUsIGFyZ3VtZW50cywKICAgICAgICBhZGp1c3RGb3JJbXBsaWNpdENhbGwoX3BsYWluTmFtZUZvclJlYWQsIG9mZnNldCksCiAgICAgICAgaXNJbXBsaWNpdENhbGw6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBzdGFydENvbXBsZXhBc3NpZ25tZW50KEV4cHJlc3Npb24gcmhzKSB7CiAgICByZXR1cm4gU3ludGhldGljV3JhcHBlci53cmFwVmFyaWFibGVBc3NpZ25tZW50KHJocykKICAgICAgLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIE5hbWVTeXN0ZW0gc3ludGhldGljTmFtZXMgPSBuZXcgTmFtZVN5c3RlbSgpOwogICAgc2luay53cml0ZSgiLCB2YXJpYWJsZTogIik7CiAgICBwcmludE5vZGVPbih2YXJpYWJsZSwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICAgIHNpbmsud3JpdGUoIiwgcHJvbW90ZWRUeXBlOiAiKTsKICAgIHByaW50Tm9kZU9uKHByb21vdGVkVHlwZSwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICB9Cn0KCi8vLyBBIFtQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcl0gcmVwcmVzZW50cyBhIHN1YmV4cHJlc3Npb24gd2hvc2UgcHJlZml4IGlzCi8vLyBhbiBleHBsaWNpdCBwcm9wZXJ0eSBhY2Nlc3MuCi8vLwovLy8gRm9yIGluc3RhbmNlCi8vLwovLy8gICBtZXRob2QoYSkgewovLy8gICAgIGEuYjsgICAgICAvLyBhIFByb3BlcnR5QWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBhLmJgLgovLy8gICAgIGEuYigpOyAgICAvLyBhIFByb3BlcnR5QWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBhLmJgLgovLy8gICAgIGEuYiA9IGM7ICAvLyBhIFByb3BlcnR5QWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBhLmJgLgovLy8gICAgIGEuYiArPSBjOyAvLyBhIFByb3BlcnR5QWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBhLmJgLgovLy8gICB9Ci8vLwovLy8gSWYgdGhlIHJlY2VpdmVyIGlzIGB0aGlzYCwgYSBbVGhpc1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yXSBpcyBjcmVhdGVkCi8vLyBpbnN0ZWFkLiBJZiB0aGUgYWNjZXNzIGlzIG51bGwtYXdhcmUsIGUuZy4gYGE/LmJgLCBhCi8vLyBbTnVsbEF3YXJlUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3JdIGlzIGNyZWF0ZWQgaW5zdGVhZC4KY2xhc3MgUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IgZXh0ZW5kcyBHZW5lcmF0b3IgewogIC8vLyBUaGUgcmVjZWl2ZXIgZXhwcmVzc2lvbi4gYGFgIGluIHRoZSBleGFtcGxlcyBpbiB0aGUgY2xhc3MgZG9jdW1lbnRhdGlvbi4KICBmaW5hbCBFeHByZXNzaW9uIHJlY2VpdmVyOwoKICAvLy8gVGhlIG5hbWUgZm9yIHRoZSBhY2Nlc3NlZCBwcm9wZXJ0eS4gYGJgIGluIHRoZSBleGFtcGxlcyBpbiB0aGUgY2xhc3MKICAvLy8gZG9jdW1lbnRhdGlvbi4KICBmaW5hbCBOYW1lIG5hbWU7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSBbZ2V0dGVyXSBhbmQgW3NldHRlcl0/IFRoZXNlIGFyZSBuZXZlcgogIC8vIHBhc3NlZC4KICBmaW5hbCBNZW1iZXIgZ2V0dGVyOwoKICBmaW5hbCBNZW1iZXIgc2V0dGVyOwoKICAvLy8gU3ludGhldGljIHZhcmlhYmxlIGNyZWF0ZWQgZm9yIFtyZWNlaXZlcl0gaWYgbmVlZC4KICBWYXJpYWJsZURlY2xhcmF0aW9uIF9yZWNlaXZlclZhcmlhYmxlOwoKICBQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcihFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4sCiAgICAgIHRoaXMucmVjZWl2ZXIsIHRoaXMubmFtZSwgdGhpcy5nZXR0ZXIsIHRoaXMuc2V0dGVyKQogICAgICA6IHN1cGVyKGhlbHBlciwgdG9rZW4pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIlByb3BlcnR5QWNjZXNzR2VuZXJhdG9yIjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfcGxhaW5OYW1lRm9yUmVhZCA9PiBuYW1lLm5hbWU7CgogIHJlY2VpdmVyQWNjZXNzKCkgewogICAgX3JlY2VpdmVyVmFyaWFibGUgPz89IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKHJlY2VpdmVyKTsKICAgIHJldHVybiBuZXcgVmFyaWFibGVHZXQoX3JlY2VpdmVyVmFyaWFibGUpLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBfaGVscGVyLmJ1aWxkTWV0aG9kSW52b2NhdGlvbihyZWNlaXZlciwgbmFtZSwgYXJndW1lbnRzLCBvZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBzdGFydENvbXBsZXhBc3NpZ25tZW50KEV4cHJlc3Npb24gcmhzKSA9PgogICAgICBTeW50aGV0aWNXcmFwcGVyLndyYXBQcm9wZXJ0eUFzc2lnbm1lbnQocmVjZWl2ZXIsIHJocyk7CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIE5hbWVTeXN0ZW0gc3ludGhldGljTmFtZXMgPSBuZXcgTmFtZVN5c3RlbSgpOwogICAgc2luay53cml0ZSgiLCBfcmVjZWl2ZXJWYXJpYWJsZTogIik7CiAgICBwcmludE5vZGVPbihfcmVjZWl2ZXJWYXJpYWJsZSwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICAgIHNpbmsud3JpdGUoIiwgcmVjZWl2ZXI6ICIpOwogICAgcHJpbnROb2RlT24ocmVjZWl2ZXIsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIG5hbWU6ICIpOwogICAgc2luay53cml0ZShuYW1lLm5hbWUpOwogICAgc2luay53cml0ZSgiLCBnZXR0ZXI6ICIpOwogICAgcHJpbnRRdWFsaWZpZWROYW1lT24oZ2V0dGVyLCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogICAgc2luay53cml0ZSgiLCBzZXR0ZXI6ICIpOwogICAgcHJpbnRRdWFsaWZpZWROYW1lT24oc2V0dGVyLCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVNpbXBsZVJlYWQoKSB7CiAgICByZXR1cm4gbmV3IFByb3BlcnR5R2V0KHJlY2VpdmVyLCBuYW1lLCBnZXR0ZXIpLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VTaW1wbGVXcml0ZShFeHByZXNzaW9uIHZhbHVlLCBib29sIHZvaWRDb250ZXh0LAogICAgICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICBQcm9wZXJ0eVNldCB3cml0ZSA9IG5ldyBQcm9wZXJ0eVNldChyZWNlaXZlciwgbmFtZSwgdmFsdWUsIHNldHRlcikKICAgICAgLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py53cml0ZSA9IHdyaXRlOwogICAgcmV0dXJuIHdyaXRlOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVJlYWQoQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgUHJvcGVydHlHZXQgcmVhZCA9IG5ldyBQcm9wZXJ0eUdldChyZWNlaXZlckFjY2VzcygpLCBuYW1lLCBnZXR0ZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICBjb21wbGV4QXNzaWdubWVudD8ucmVhZCA9IHJlYWQ7CiAgICByZXR1cm4gcmVhZDsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VXcml0ZShFeHByZXNzaW9uIHZhbHVlLCBib29sIHZvaWRDb250ZXh0LAogICAgICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICBQcm9wZXJ0eVNldCB3cml0ZSA9IG5ldyBQcm9wZXJ0eVNldChyZWNlaXZlckFjY2VzcygpLCBuYW1lLCB2YWx1ZSwgc2V0dGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0OwogICAgY29tcGxleEFzc2lnbm1lbnQ/LndyaXRlID0gd3JpdGU7CiAgICByZXR1cm4gd3JpdGU7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9maW5pc2goCiAgICAgIEV4cHJlc3Npb24gYm9keSwgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgcmV0dXJuIHN1cGVyLl9maW5pc2gobWFrZUxldChfcmVjZWl2ZXJWYXJpYWJsZSwgYm9keSksIGNvbXBsZXhBc3NpZ25tZW50KTsKICB9CgogIC8vLyBDcmVhdGVzIGEgW0dlbmVyYXRvcl0gZm9yIHRoZSBhY2Nlc3Mgb2YgcHJvcGVydHkgW25hbWVdIG9uIFtyZWNlaXZlcl0uCiAgc3RhdGljIEdlbmVyYXRvciBtYWtlKAogICAgICBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwKICAgICAgVG9rZW4gdG9rZW4sCiAgICAgIEV4cHJlc3Npb24gcmVjZWl2ZXIsCiAgICAgIE5hbWUgbmFtZSwKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIFtnZXR0ZXJdIGFuZCBbc2V0dGVyXT8gVGhlc2UgYXJlIG5ldmVyCiAgICAgIC8vIHBhc3NlZC4KICAgICAgTWVtYmVyIGdldHRlciwKICAgICAgTWVtYmVyIHNldHRlciwKICAgICAgYm9vbCBpc051bGxBd2FyZSkgewogICAgaWYgKGhlbHBlci5mb3Jlc3QuaXNUaGlzRXhwcmVzc2lvbihyZWNlaXZlcikpIHsKICAgICAgZ2V0dGVyID8/PSBoZWxwZXIubG9va3VwSW5zdGFuY2VNZW1iZXIobmFtZSk7CiAgICAgIHNldHRlciA/Pz0gaGVscGVyLmxvb2t1cEluc3RhbmNlTWVtYmVyKG5hbWUsIGlzU2V0dGVyOiB0cnVlKTsKICAgICAgcmV0dXJuIG5ldyBUaGlzUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IoCiAgICAgICAgICBoZWxwZXIsIHRva2VuLCBuYW1lLCBnZXR0ZXIsIHNldHRlcik7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gaXNOdWxsQXdhcmUKICAgICAgICAgID8gbmV3IE51bGxBd2FyZVByb3BlcnR5QWNjZXNzR2VuZXJhdG9yKAogICAgICAgICAgICAgIGhlbHBlciwgdG9rZW4sIHJlY2VpdmVyLCBuYW1lLCBnZXR0ZXIsIHNldHRlciwgbnVsbCkKICAgICAgICAgIDogbmV3IFByb3BlcnR5QWNjZXNzR2VuZXJhdG9yKAogICAgICAgICAgICAgIGhlbHBlciwgdG9rZW4sIHJlY2VpdmVyLCBuYW1lLCBnZXR0ZXIsIHNldHRlcik7CiAgICB9CiAgfQp9CgovLy8gQSBbVGhpc1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yXSByZXByZXNlbnRzIGEgc3ViZXhwcmVzc2lvbiB3aG9zZSBwcmVmaXggaXMKLy8vIGFuIGltcGxpY2l0IG9yIGV4cGxpY2l0IGFjY2VzcyBvbiBgdGhpc2AuCi8vLwovLy8gRm9yIGluc3RhbmNlCi8vLwovLy8gICBjbGFzcyBDIHsKLy8vICAgICB2YXIgYjsKLy8vICAgICBtZXRob2QoKSB7Ci8vLyAgICAgICBiOyAgICAgICAgICAgLy8gYSBUaGlzUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYGJgLgovLy8gICAgICAgYigpOyAgICAgICAgIC8vIGEgVGhpc1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBiYC4KLy8vICAgICAgIGIgPSBjOyAgICAgICAvLyBhIFRoaXNQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgYmAuCi8vLyAgICAgICBiICs9IGM7ICAgICAgLy8gYSBUaGlzUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYGJgLgovLy8gICAgICAgdGhpcy5iOyAgICAgIC8vIGEgVGhpc1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGB0aGlzLmJgLgovLy8gICAgICAgdGhpcy5iKCk7ICAgIC8vIGEgVGhpc1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGB0aGlzLmJgLgovLy8gICAgICAgdGhpcy5iID0gYzsgIC8vIGEgVGhpc1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGB0aGlzLmJgLgovLy8gICAgICAgdGhpcy5iICs9IGM7IC8vIGEgVGhpc1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGB0aGlzLmJgLgovLy8gICAgIH0KLy8vICAgfQovLy8KLy8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2Ugb2YgW1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yXSB0byBhdm9pZCBjcmVhdGluZyBhbgovLy8gaW5kaXJlY3QgYWNjZXNzIHRvICd0aGlzJyBpbiBmb3IgaW5zdGFuY2UgYHRoaXMuYiArPSBjYCB3aGljaCBieQovLy8gW1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yXSB3b3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBhcwovLy8KLy8vICAgICBsZXQgIzEgPSB0aGlzIGluICMuYiA9ICMuYiArIGMKLy8vCi8vLyBpbnN0ZWFkIG9mCi8vLwovLy8gICAgIHRoaXMuYiA9IHRoaXMuYiArIGMKLy8vCmNsYXNzIFRoaXNQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvciB7CiAgLy8vIFRoZSBuYW1lIGZvciB0aGUgYWNjZXNzZWQgcHJvcGVydHkuIGBiYCBpbiB0aGUgZXhhbXBsZXMgaW4gdGhlIGNsYXNzCiAgLy8vIGRvY3VtZW50YXRpb24uCiAgZmluYWwgTmFtZSBuYW1lOwoKICAvLy8gVGhlIG1lbWJlciBhY2Nlc3NlZCBpZiB0aGlzIHN1YmV4cHJlc3Npb24gaGFzIGEgcmVhZC4KICAvLy8KICAvLy8gVGhpcyBpcyBgbnVsbGAgaWYgdGhlIGB0aGlzYCBjbGFzcyBkb2VzIG5vdCBoYXZlIGEgcmVhZGFibGUgcHJvcGVydHkgbmFtZWQKICAvLy8gW25hbWVdLgogIGZpbmFsIE1lbWJlciBnZXR0ZXI7CgogIC8vLyBUaGUgbWVtYmVyIGFjY2Vzc2VkIGlmIHRoaXMgc3ViZXhwcmVzc2lvbiBoYXMgYSB3cml0ZS4KICAvLy8KICAvLy8gVGhpcyBpcyBgbnVsbGAgaWYgdGhlIGB0aGlzYCBjbGFzcyBkb2VzIG5vdCBoYXZlIGEgd3JpdGFibGUgcHJvcGVydHkgbmFtZWQKICAvLy8gW25hbWVdLgogIGZpbmFsIE1lbWJlciBzZXR0ZXI7CgogIFRoaXNQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcihFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4sCiAgICAgIHRoaXMubmFtZSwgdGhpcy5nZXR0ZXIsIHRoaXMuc2V0dGVyKQogICAgICA6IHN1cGVyKGhlbHBlciwgdG9rZW4pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIlRoaXNQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvciI7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX3BsYWluTmFtZUZvclJlYWQgPT4gbmFtZS5uYW1lOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlUmVhZChDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICBpZiAoZ2V0dGVyID09IG51bGwpIHsKICAgICAgX2hlbHBlci53YXJuVW5yZXNvbHZlZEdldChuYW1lLCBmaWxlT2Zmc2V0KTsKICAgIH0KICAgIFByb3BlcnR5R2V0IHJlYWQgPQogICAgICAgIG5ldyBQcm9wZXJ0eUdldChfZm9yZXN0LmNyZWF0ZVRoaXNFeHByZXNzaW9uKHRva2VuKSwgbmFtZSwgZ2V0dGVyKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py5yZWFkID0gcmVhZDsKICAgIHJldHVybiByZWFkOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVdyaXRlKEV4cHJlc3Npb24gdmFsdWUsIGJvb2wgdm9pZENvbnRleHQsCiAgICAgIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIGlmIChzZXR0ZXIgPT0gbnVsbCkgewogICAgICBfaGVscGVyLndhcm5VbnJlc29sdmVkU2V0KG5hbWUsIGZpbGVPZmZzZXQpOwogICAgfQogICAgUHJvcGVydHlTZXQgd3JpdGUgPSBuZXcgUHJvcGVydHlTZXQoCiAgICAgICAgX2ZvcmVzdC5jcmVhdGVUaGlzRXhwcmVzc2lvbih0b2tlbiksIG5hbWUsIHZhbHVlLCBzZXR0ZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICBjb21wbGV4QXNzaWdubWVudD8ud3JpdGUgPSB3cml0ZTsKICAgIHJldHVybiB3cml0ZTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIE1lbWJlciBpbnRlcmZhY2VUYXJnZXQgPSBnZXR0ZXI7CiAgICBpZiAoaW50ZXJmYWNlVGFyZ2V0ID09IG51bGwpIHsKICAgICAgX2hlbHBlci53YXJuVW5yZXNvbHZlZE1ldGhvZChuYW1lLCBvZmZzZXQpOwogICAgfQogICAgaWYgKGludGVyZmFjZVRhcmdldCBpcyBGaWVsZCkgewogICAgICAvLyBUT0RPKGFoZSk6IEluIHN0cm9uZyBtb2RlIHdlIHNob3VsZCBwcm9iYWJseSByZXdyaXRlIHRoaXMgdG8KICAgICAgLy8gYHRoaXMubmFtZS5jYWxsKGFyZ3VtZW50cylgLgogICAgICBpbnRlcmZhY2VUYXJnZXQgPSBudWxsOwogICAgfQogICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRNZXRob2RJbnZvY2F0aW9uKAogICAgICAgIF9mb3Jlc3QuY3JlYXRlVGhpc0V4cHJlc3Npb24obnVsbCksIG5hbWUsIGFyZ3VtZW50cywgb2Zmc2V0LAogICAgICAgIGludGVyZmFjZVRhcmdldDogaW50ZXJmYWNlVGFyZ2V0KTsKICB9CgogIEBvdmVycmlkZQogIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgc3RhcnRDb21wbGV4QXNzaWdubWVudChFeHByZXNzaW9uIHJocykgPT4KICAgICAgU3ludGhldGljV3JhcHBlci53cmFwUHJvcGVydHlBc3NpZ25tZW50KG51bGwsIHJocyk7CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIE5hbWVTeXN0ZW0gc3ludGhldGljTmFtZXMgPSBuZXcgTmFtZVN5c3RlbSgpOwogICAgc2luay53cml0ZSgiLCBuYW1lOiAiKTsKICAgIHNpbmsud3JpdGUobmFtZS5uYW1lKTsKICAgIHNpbmsud3JpdGUoIiwgZ2V0dGVyOiAiKTsKICAgIHByaW50UXVhbGlmaWVkTmFtZU9uKGdldHRlciwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICAgIHNpbmsud3JpdGUoIiwgc2V0dGVyOiAiKTsKICAgIHByaW50UXVhbGlmaWVkTmFtZU9uKHNldHRlciwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICB9Cn0KCmNsYXNzIE51bGxBd2FyZVByb3BlcnR5QWNjZXNzR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIHsKICBmaW5hbCBWYXJpYWJsZURlY2xhcmF0aW9uIHJlY2VpdmVyOwoKICBmaW5hbCBFeHByZXNzaW9uIHJlY2VpdmVyRXhwcmVzc2lvbjsKCiAgZmluYWwgTmFtZSBuYW1lOwoKICBmaW5hbCBNZW1iZXIgZ2V0dGVyOwoKICBmaW5hbCBNZW1iZXIgc2V0dGVyOwoKICBmaW5hbCBEYXJ0VHlwZSB0eXBlOwoKICBOdWxsQXdhcmVQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcigKICAgICAgRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsCiAgICAgIFRva2VuIHRva2VuLAogICAgICB0aGlzLnJlY2VpdmVyRXhwcmVzc2lvbiwKICAgICAgdGhpcy5uYW1lLAogICAgICB0aGlzLmdldHRlciwKICAgICAgdGhpcy5zZXR0ZXIsCiAgICAgIHRoaXMudHlwZSkKICAgICAgOiB0aGlzLnJlY2VpdmVyID0gbWFrZU9yUmV1c2VWYXJpYWJsZShyZWNlaXZlckV4cHJlc3Npb24pLAogICAgICAgIHN1cGVyKGhlbHBlciwgdG9rZW4pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIk51bGxBd2FyZVByb3BlcnR5QWNjZXNzR2VuZXJhdG9yIjsKCiAgRXhwcmVzc2lvbiByZWNlaXZlckFjY2VzcygpID0+IG5ldyBWYXJpYWJsZUdldChyZWNlaXZlcik7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX3BsYWluTmFtZUZvclJlYWQgPT4gbmFtZS5uYW1lOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlUmVhZChDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICBQcm9wZXJ0eUdldCByZWFkID0gbmV3IFByb3BlcnR5R2V0KHJlY2VpdmVyQWNjZXNzKCksIG5hbWUsIGdldHRlcikKICAgICAgLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py5yZWFkID0gcmVhZDsKICAgIHJldHVybiByZWFkOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVdyaXRlKEV4cHJlc3Npb24gdmFsdWUsIGJvb2wgdm9pZENvbnRleHQsCiAgICAgIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIFByb3BlcnR5U2V0IHdyaXRlID0gbmV3IFByb3BlcnR5U2V0KHJlY2VpdmVyQWNjZXNzKCksIG5hbWUsIHZhbHVlLCBzZXR0ZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICBjb21wbGV4QXNzaWdubWVudD8ud3JpdGUgPSB3cml0ZTsKICAgIHJldHVybiB3cml0ZTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX2ZpbmlzaCgKICAgICAgRXhwcmVzc2lvbiBib2R5LCBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICBFeHByZXNzaW9uIG51bGxBd2FyZUd1YXJkID0gX2ZvcmVzdC5jcmVhdGVDb25kaXRpb25hbEV4cHJlc3Npb24oCiAgICAgICAgYnVpbGRJc051bGwocmVjZWl2ZXJBY2Nlc3MoKSwgZmlsZU9mZnNldCwgX2hlbHBlciksCiAgICAgICAgbnVsbCwKICAgICAgICBfZm9yZXN0LmNyZWF0ZU51bGxMaXRlcmFsKG51bGwpLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldCwKICAgICAgICBudWxsLAogICAgICAgIGJvZHkpCiAgICAgIC4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICBpZiAoY29tcGxleEFzc2lnbm1lbnQgIT0gbnVsbCkgewogICAgICBib2R5ID0gbWFrZUxldChyZWNlaXZlciwgbnVsbEF3YXJlR3VhcmQpOwogICAgICBpZiAoX2hlbHBlci5sZWdhY3lNb2RlKSByZXR1cm4gYm9keTsKICAgICAgUHJvcGVydHlBc3NpZ25tZW50SnVkZ21lbnQga2VybmVsUHJvcGVydHlBc3NpZ24gPSBjb21wbGV4QXNzaWdubWVudDsKICAgICAga2VybmVsUHJvcGVydHlBc3NpZ24ubnVsbEF3YXJlR3VhcmQgPSBudWxsQXdhcmVHdWFyZDsKICAgICAga2VybmVsUHJvcGVydHlBc3NpZ24uZGVzdWdhcmVkID0gYm9keTsKICAgICAgcmV0dXJuIGtlcm5lbFByb3BlcnR5QXNzaWduOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBOdWxsQXdhcmVQcm9wZXJ0eUdldEp1ZGdtZW50KHJlY2VpdmVyLCBudWxsQXdhcmVHdWFyZCkKICAgICAgICAuLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0OwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBkb0ludm9jYXRpb24oaW50IG9mZnNldCwgQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJkb0ludm9jYXRpb24iLCBvZmZzZXQsIF91cmkpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBzdGFydENvbXBsZXhBc3NpZ25tZW50KEV4cHJlc3Npb24gcmhzKSA9PgogICAgICBTeW50aGV0aWNXcmFwcGVyLndyYXBQcm9wZXJ0eUFzc2lnbm1lbnQocmVjZWl2ZXJFeHByZXNzaW9uLCByaHMpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBOYW1lU3lzdGVtIHN5bnRoZXRpY05hbWVzID0gbmV3IE5hbWVTeXN0ZW0oKTsKICAgIHNpbmsud3JpdGUoIiwgcmVjZWl2ZXI6ICIpOwogICAgcHJpbnROb2RlT24ocmVjZWl2ZXIsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIHJlY2VpdmVyRXhwcmVzc2lvbjogIik7CiAgICBwcmludE5vZGVPbihyZWNlaXZlckV4cHJlc3Npb24sIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIG5hbWU6ICIpOwogICAgc2luay53cml0ZShuYW1lLm5hbWUpOwogICAgc2luay53cml0ZSgiLCBnZXR0ZXI6ICIpOwogICAgcHJpbnRRdWFsaWZpZWROYW1lT24oZ2V0dGVyLCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogICAgc2luay53cml0ZSgiLCBzZXR0ZXI6ICIpOwogICAgcHJpbnRRdWFsaWZpZWROYW1lT24oc2V0dGVyLCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogICAgc2luay53cml0ZSgiLCB0eXBlOiAiKTsKICAgIHByaW50Tm9kZU9uKHR5cGUsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgfQp9CgpjbGFzcyBTdXBlclByb3BlcnR5QWNjZXNzR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIHsKICBmaW5hbCBOYW1lIG5hbWU7CgogIGZpbmFsIE1lbWJlciBnZXR0ZXI7CgogIGZpbmFsIE1lbWJlciBzZXR0ZXI7CgogIFN1cGVyUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IoRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsIFRva2VuIHRva2VuLAogICAgICB0aGlzLm5hbWUsIHRoaXMuZ2V0dGVyLCB0aGlzLnNldHRlcikKICAgICAgOiBzdXBlcihoZWxwZXIsIHRva2VuKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfZGVidWdOYW1lID0+ICJTdXBlclByb3BlcnR5QWNjZXNzR2VuZXJhdG9yIjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfcGxhaW5OYW1lRm9yUmVhZCA9PiBuYW1lLm5hbWU7CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VSZWFkKENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIGlmIChnZXR0ZXIgPT0gbnVsbCkgewogICAgICBfaGVscGVyLndhcm5VbnJlc29sdmVkR2V0KG5hbWUsIGZpbGVPZmZzZXQsIGlzU3VwZXI6IHRydWUpOwogICAgfQogICAgLy8gVE9ETyhhaGUpOiBVc2UgW0RpcmVjdFByb3BlcnR5R2V0XSB3aGVuIHBvc3NpYmxlLgogICAgU3VwZXJQcm9wZXJ0eUdldEp1ZGdtZW50IHJlYWQgPQogICAgICAgIG5ldyBTdXBlclByb3BlcnR5R2V0SnVkZ21lbnQobmFtZSwgaW50ZXJmYWNlVGFyZ2V0OiBnZXR0ZXIpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0OwogICAgY29tcGxleEFzc2lnbm1lbnQ/LnJlYWQgPSByZWFkOwogICAgcmV0dXJuIHJlYWQ7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlV3JpdGUoRXhwcmVzc2lvbiB2YWx1ZSwgYm9vbCB2b2lkQ29udGV4dCwKICAgICAgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgaWYgKHNldHRlciA9PSBudWxsKSB7CiAgICAgIF9oZWxwZXIud2FyblVucmVzb2x2ZWRTZXQobmFtZSwgZmlsZU9mZnNldCwgaXNTdXBlcjogdHJ1ZSk7CiAgICB9CiAgICAvLyBUT0RPKGFoZSk6IFVzZSBbRGlyZWN0UHJvcGVydHlTZXRdIHdoZW4gcG9zc2libGUuCiAgICBTdXBlclByb3BlcnR5U2V0IHdyaXRlID0gbmV3IFN1cGVyUHJvcGVydHlTZXQobmFtZSwgdmFsdWUsIHNldHRlcikKICAgICAgLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py53cml0ZSA9IHdyaXRlOwogICAgcmV0dXJuIHdyaXRlOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBkb0ludm9jYXRpb24oaW50IG9mZnNldCwgQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgaWYgKF9oZWxwZXIuY29uc3RhbnRDb250ZXh0ICE9IENvbnN0YW50Q29udGV4dC5ub25lKSB7CiAgICAgIC8vIFRPRE8oYnJpYW53aWxrZXJzb24pIEZpeCB0aGUgbGVuZ3RoCiAgICAgIF9oZWxwZXIuYWRkUHJvYmxlbShtZXNzYWdlTm90QUNvbnN0YW50RXhwcmVzc2lvbiwgb2Zmc2V0LCAxKTsKICAgIH0KICAgIGlmIChnZXR0ZXIgPT0gbnVsbCB8fCBpc0ZpZWxkT3JHZXR0ZXIoZ2V0dGVyKSkgewogICAgICByZXR1cm4gX2hlbHBlci5idWlsZE1ldGhvZEludm9jYXRpb24oCiAgICAgICAgICBidWlsZFNpbXBsZVJlYWQoKSwgY2FsbE5hbWUsIGFyZ3VtZW50cywgb2Zmc2V0LAogICAgICAgICAgLy8gVGhpcyBpc24ndCBhIGNvbnN0YW50IGV4cHJlc3Npb24sIGJ1dCB3ZSBoYXZlIGNoZWNrZWQgaWYgYQogICAgICAgICAgLy8gY29uc3RhbnQgZXhwcmVzc2lvbiBlcnJvciBzaG91bGQgYmUgZW1pdHRlZCBhbHJlYWR5LgogICAgICAgICAgaXNDb25zdGFudEV4cHJlc3Npb246IHRydWUsCiAgICAgICAgICBpc0ltcGxpY2l0Q2FsbDogdHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICAvLyBUT0RPKGFoZSk6IFRoaXMgY291bGQgYmUgc29tZXRoaW5nIGxpa2UgInN1cGVyLnByb3BlcnR5KC4uLikiIHdoZXJlCiAgICAgIC8vIHByb3BlcnR5IGlzIGEgc2V0dGVyLgogICAgICByZXR1cm4gdW5oYW5kbGVkKCIke2dldHRlci5ydW50aW1lVHlwZX0iLCAiZG9JbnZvY2F0aW9uIiwgb2Zmc2V0LCBfdXJpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgc3RhcnRDb21wbGV4QXNzaWdubWVudChFeHByZXNzaW9uIHJocykgPT4KICAgICAgU3ludGhldGljV3JhcHBlci53cmFwUHJvcGVydHlBc3NpZ25tZW50KG51bGwsIHJocywgaXNTdXBlcjogdHJ1ZSk7CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIE5hbWVTeXN0ZW0gc3ludGhldGljTmFtZXMgPSBuZXcgTmFtZVN5c3RlbSgpOwogICAgc2luay53cml0ZSgiLCBuYW1lOiAiKTsKICAgIHNpbmsud3JpdGUobmFtZS5uYW1lKTsKICAgIHNpbmsud3JpdGUoIiwgZ2V0dGVyOiAiKTsKICAgIHByaW50UXVhbGlmaWVkTmFtZU9uKGdldHRlciwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICAgIHNpbmsud3JpdGUoIiwgc2V0dGVyOiAiKTsKICAgIHByaW50UXVhbGlmaWVkTmFtZU9uKHNldHRlciwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICB9Cn0KCmNsYXNzIEluZGV4ZWRBY2Nlc3NHZW5lcmF0b3IgZXh0ZW5kcyBHZW5lcmF0b3IgewogIGZpbmFsIEV4cHJlc3Npb24gcmVjZWl2ZXI7CgogIGZpbmFsIEV4cHJlc3Npb24gaW5kZXg7CgogIGZpbmFsIFByb2NlZHVyZSBnZXR0ZXI7CgogIGZpbmFsIFByb2NlZHVyZSBzZXR0ZXI7CgogIFZhcmlhYmxlRGVjbGFyYXRpb24gcmVjZWl2ZXJWYXJpYWJsZTsKCiAgVmFyaWFibGVEZWNsYXJhdGlvbiBpbmRleFZhcmlhYmxlOwoKICBJbmRleGVkQWNjZXNzR2VuZXJhdG9yKEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwKICAgICAgdGhpcy5yZWNlaXZlciwgdGhpcy5pbmRleCwgdGhpcy5nZXR0ZXIsIHRoaXMuc2V0dGVyKQogICAgICA6IHN1cGVyKGhlbHBlciwgdG9rZW4pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9wbGFpbk5hbWVGb3JSZWFkID0+ICJbXSI7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2RlYnVnTmFtZSA9PiAiSW5kZXhlZEFjY2Vzc0dlbmVyYXRvciI7CgogIEV4cHJlc3Npb24gaW5kZXhBY2Nlc3MoKSB7CiAgICBpbmRleFZhcmlhYmxlID8/PSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZShpbmRleCk7CiAgICByZXR1cm4gbmV3IFZhcmlhYmxlR2V0KGluZGV4VmFyaWFibGUpLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKICB9CgogIEV4cHJlc3Npb24gcmVjZWl2ZXJBY2Nlc3MoKSB7CiAgICAvLyBXZSBjYW5ub3QgcmV1c2UgdGhlIHJlY2VpdmVyIGlmIGl0IGlzIGEgdmFyaWFibGUgc2luY2UgaXQgbWlnaHQgYmUKICAgIC8vIHJlYXNzaWduZWQgaW4gdGhlIGluZGV4IGV4cHJlc3Npb24uCiAgICByZWNlaXZlclZhcmlhYmxlID8/PSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZShyZWNlaXZlcik7CiAgICByZXR1cm4gbmV3IFZhcmlhYmxlR2V0KHJlY2VpdmVyVmFyaWFibGUpLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VTaW1wbGVSZWFkKCkgewogICAgTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50IHJlYWQgPSBuZXcgTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KHJlY2VpdmVyLAogICAgICAgIGluZGV4R2V0TmFtZSwgX2ZvcmVzdC5jcmVhdGVBcmd1bWVudHMoZmlsZU9mZnNldCwgPEV4cHJlc3Npb24+W2luZGV4XSksCiAgICAgICAgaW50ZXJmYWNlVGFyZ2V0OiBnZXR0ZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICByZXR1cm4gcmVhZDsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VTaW1wbGVXcml0ZShFeHByZXNzaW9uIHZhbHVlLCBib29sIHZvaWRDb250ZXh0LAogICAgICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICBpZiAoIXZvaWRDb250ZXh0KSByZXR1cm4gX21ha2VXcml0ZUFuZFJldHVybih2YWx1ZSwgY29tcGxleEFzc2lnbm1lbnQpOwogICAgTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50IHdyaXRlID0gbmV3IE1ldGhvZEludm9jYXRpb25KdWRnbWVudCgKICAgICAgICByZWNlaXZlciwKICAgICAgICBpbmRleFNldE5hbWUsCiAgICAgICAgX2ZvcmVzdC5jcmVhdGVBcmd1bWVudHMoZmlsZU9mZnNldCwgPEV4cHJlc3Npb24+W2luZGV4LCB2YWx1ZV0pLAogICAgICAgIGludGVyZmFjZVRhcmdldDogc2V0dGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0OwogICAgY29tcGxleEFzc2lnbm1lbnQ/LndyaXRlID0gd3JpdGU7CiAgICByZXR1cm4gd3JpdGU7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlUmVhZChDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICBNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQgcmVhZCA9IG5ldyBNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQoCiAgICAgICAgcmVjZWl2ZXJBY2Nlc3MoKSwKICAgICAgICBpbmRleEdldE5hbWUsCiAgICAgICAgX2ZvcmVzdC5jcmVhdGVBcmd1bWVudHMoZmlsZU9mZnNldCwgPEV4cHJlc3Npb24+W2luZGV4QWNjZXNzKCldKSwKICAgICAgICBpbnRlcmZhY2VUYXJnZXQ6IGdldHRlcikKICAgICAgLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py5yZWFkID0gcmVhZDsKICAgIHJldHVybiByZWFkOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVdyaXRlKEV4cHJlc3Npb24gdmFsdWUsIGJvb2wgdm9pZENvbnRleHQsCiAgICAgIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIGlmICghdm9pZENvbnRleHQpIHJldHVybiBfbWFrZVdyaXRlQW5kUmV0dXJuKHZhbHVlLCBjb21wbGV4QXNzaWdubWVudCk7CiAgICBNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQgd3JpdGUgPSBuZXcgTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KAogICAgICAgIHJlY2VpdmVyQWNjZXNzKCksCiAgICAgICAgaW5kZXhTZXROYW1lLAogICAgICAgIF9mb3Jlc3QuY3JlYXRlQXJndW1lbnRzKGZpbGVPZmZzZXQsIDxFeHByZXNzaW9uPltpbmRleEFjY2VzcygpLCB2YWx1ZV0pLAogICAgICAgIGludGVyZmFjZVRhcmdldDogc2V0dGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0OwogICAgY29tcGxleEFzc2lnbm1lbnQ/LndyaXRlID0gd3JpdGU7CiAgICByZXR1cm4gd3JpdGU7CiAgfQoKICAvLyBUT0RPKGRtaXRyeWFzKTogcmVtb3ZlIHRoaXMgbWV0aG9kIGFmdGVyIHRoZSAiW109IiBvcGVyYXRvciBvZiB0aGUgQ29udGV4dAogIC8vIGNsYXNzIGlzIG1hZGUgdG8gcmV0dXJuIGEgdmFsdWUuCiAgRXhwcmVzc2lvbiBfbWFrZVdyaXRlQW5kUmV0dXJuKAogICAgICBFeHByZXNzaW9uIHZhbHVlLCBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICAvLyBUaGUgY2FsbCB0byBbXT0gZG9lcyBub3QgcmV0dXJuIHRoZSB2YWx1ZSBsaWtlIGRpcmVjdC1zdHlsZSBhc3NpZ25tZW50cwogICAgLy8gZG8uICBXZSBuZWVkIHRvIGJpbmQgdGhlIHZhbHVlIGluIGEgbGV0LgogICAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YWx1ZVZhcmlhYmxlID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUodmFsdWUpOwogICAgTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50IHdyaXRlID0gbmV3IE1ldGhvZEludm9jYXRpb25KdWRnbWVudCgKICAgICAgICByZWNlaXZlckFjY2VzcygpLAogICAgICAgIGluZGV4U2V0TmFtZSwKICAgICAgICBfZm9yZXN0LmNyZWF0ZUFyZ3VtZW50cyhmaWxlT2Zmc2V0LAogICAgICAgICAgICA8RXhwcmVzc2lvbj5baW5kZXhBY2Nlc3MoKSwgbmV3IFZhcmlhYmxlR2V0KHZhbHVlVmFyaWFibGUpXSksCiAgICAgICAgaW50ZXJmYWNlVGFyZ2V0OiBzZXR0ZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICBjb21wbGV4QXNzaWdubWVudD8ud3JpdGUgPSB3cml0ZTsKICAgIFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudCBkdW1teSA9CiAgICAgICAgbmV3IFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudC5mb3JWYWx1ZSh3cml0ZSk7CiAgICByZXR1cm4gbWFrZUxldCgKICAgICAgICB2YWx1ZVZhcmlhYmxlLCBtYWtlTGV0KGR1bW15LCBuZXcgVmFyaWFibGVHZXQodmFsdWVWYXJpYWJsZSkpKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX2ZpbmlzaCgKICAgICAgRXhwcmVzc2lvbiBib2R5LCBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICByZXR1cm4gc3VwZXIuX2ZpbmlzaCgKICAgICAgICBtYWtlTGV0KHJlY2VpdmVyVmFyaWFibGUsCiAgICAgICAgICAgIG1ha2VMZXQoaW5kZXhWYXJpYWJsZSwgYm9keSkuLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0KQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldCwKICAgICAgICBjb21wbGV4QXNzaWdubWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGRvSW52b2NhdGlvbihpbnQgb2Zmc2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gX2hlbHBlci5idWlsZE1ldGhvZEludm9jYXRpb24oCiAgICAgICAgYnVpbGRTaW1wbGVSZWFkKCksIGNhbGxOYW1lLCBhcmd1bWVudHMsIF9mb3Jlc3QucmVhZE9mZnNldChhcmd1bWVudHMpLAogICAgICAgIGlzSW1wbGljaXRDYWxsOiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgc3RhcnRDb21wbGV4QXNzaWdubWVudChFeHByZXNzaW9uIHJocykgPT4KICAgICAgU3ludGhldGljV3JhcHBlci53cmFwSW5kZXhBc3NpZ25tZW50KHJlY2VpdmVyLCBpbmRleCwgcmhzKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBwcmludE9uKFN0cmluZ1Npbmsgc2luaykgewogICAgTmFtZVN5c3RlbSBzeW50aGV0aWNOYW1lcyA9IG5ldyBOYW1lU3lzdGVtKCk7CiAgICBzaW5rLndyaXRlKCIsIHJlY2VpdmVyOiAiKTsKICAgIHByaW50Tm9kZU9uKHJlY2VpdmVyLCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogICAgc2luay53cml0ZSgiLCBpbmRleDogIik7CiAgICBwcmludE5vZGVPbihpbmRleCwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICAgIHNpbmsud3JpdGUoIiwgZ2V0dGVyOiAiKTsKICAgIHByaW50UXVhbGlmaWVkTmFtZU9uKGdldHRlciwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICAgIHNpbmsud3JpdGUoIiwgc2V0dGVyOiAiKTsKICAgIHByaW50UXVhbGlmaWVkTmFtZU9uKHNldHRlciwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICAgIHNpbmsud3JpdGUoIiwgcmVjZWl2ZXJWYXJpYWJsZTogIik7CiAgICBwcmludE5vZGVPbihyZWNlaXZlclZhcmlhYmxlLCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogICAgc2luay53cml0ZSgiLCBpbmRleFZhcmlhYmxlOiAiKTsKICAgIHByaW50Tm9kZU9uKGluZGV4VmFyaWFibGUsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgfQoKICBzdGF0aWMgR2VuZXJhdG9yIG1ha2UoCiAgICAgIEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLAogICAgICBUb2tlbiB0b2tlbiwKICAgICAgRXhwcmVzc2lvbiByZWNlaXZlciwKICAgICAgRXhwcmVzc2lvbiBpbmRleCwKICAgICAgUHJvY2VkdXJlIGdldHRlciwKICAgICAgUHJvY2VkdXJlIHNldHRlcikgewogICAgaWYgKGhlbHBlci5mb3Jlc3QuaXNUaGlzRXhwcmVzc2lvbihyZWNlaXZlcikpIHsKICAgICAgcmV0dXJuIG5ldyBUaGlzSW5kZXhlZEFjY2Vzc0dlbmVyYXRvcigKICAgICAgICAgIGhlbHBlciwgdG9rZW4sIGluZGV4LCBnZXR0ZXIsIHNldHRlcik7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IEluZGV4ZWRBY2Nlc3NHZW5lcmF0b3IoCiAgICAgICAgICBoZWxwZXIsIHRva2VuLCByZWNlaXZlciwgaW5kZXgsIGdldHRlciwgc2V0dGVyKTsKICAgIH0KICB9Cn0KCi8vLyBTcGVjaWFsIGNhc2Ugb2YgW0luZGV4ZWRBY2Nlc3NHZW5lcmF0b3JdIHRvIGF2b2lkIGNyZWF0aW5nIGFuIGluZGlyZWN0Ci8vLyBhY2Nlc3MgdG8gJ3RoaXMnLgpjbGFzcyBUaGlzSW5kZXhlZEFjY2Vzc0dlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvciB7CiAgZmluYWwgRXhwcmVzc2lvbiBpbmRleDsKCiAgZmluYWwgUHJvY2VkdXJlIGdldHRlcjsKCiAgZmluYWwgUHJvY2VkdXJlIHNldHRlcjsKCiAgVmFyaWFibGVEZWNsYXJhdGlvbiBpbmRleFZhcmlhYmxlOwoKICBUaGlzSW5kZXhlZEFjY2Vzc0dlbmVyYXRvcihFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4sCiAgICAgIHRoaXMuaW5kZXgsIHRoaXMuZ2V0dGVyLCB0aGlzLnNldHRlcikKICAgICAgOiBzdXBlcihoZWxwZXIsIHRva2VuKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfcGxhaW5OYW1lRm9yUmVhZCA9PiAiW10iOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIlRoaXNJbmRleGVkQWNjZXNzR2VuZXJhdG9yIjsKCiAgRXhwcmVzc2lvbiBpbmRleEFjY2VzcygpIHsKICAgIGluZGV4VmFyaWFibGUgPz89IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKGluZGV4KTsKICAgIHJldHVybiBuZXcgVmFyaWFibGVHZXQoaW5kZXhWYXJpYWJsZSk7CiAgfQoKICBFeHByZXNzaW9uIF9tYWtlV3JpdGVBbmRSZXR1cm4oCiAgICAgIEV4cHJlc3Npb24gdmFsdWUsIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFsdWVWYXJpYWJsZSA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKHZhbHVlKTsKICAgIE1ldGhvZEludm9jYXRpb25KdWRnbWVudCB3cml0ZSA9IG5ldyBNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQoCiAgICAgICAgX2ZvcmVzdC5jcmVhdGVUaGlzRXhwcmVzc2lvbih0b2tlbiksCiAgICAgICAgaW5kZXhTZXROYW1lLAogICAgICAgIF9mb3Jlc3QuY3JlYXRlQXJndW1lbnRzKGZpbGVPZmZzZXQsCiAgICAgICAgICAgIDxFeHByZXNzaW9uPltpbmRleEFjY2VzcygpLCBuZXcgVmFyaWFibGVHZXQodmFsdWVWYXJpYWJsZSldKSwKICAgICAgICBpbnRlcmZhY2VUYXJnZXQ6IHNldHRlcikKICAgICAgLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py53cml0ZSA9IHdyaXRlOwogICAgVmFyaWFibGVEZWNsYXJhdGlvbiBkdW1teSA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKHdyaXRlKTsKICAgIHJldHVybiBtYWtlTGV0KAogICAgICAgIHZhbHVlVmFyaWFibGUsIG1ha2VMZXQoZHVtbXksIG5ldyBWYXJpYWJsZUdldCh2YWx1ZVZhcmlhYmxlKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVNpbXBsZVJlYWQoKSB7CiAgICByZXR1cm4gbmV3IE1ldGhvZEludm9jYXRpb25KdWRnbWVudChfZm9yZXN0LmNyZWF0ZVRoaXNFeHByZXNzaW9uKHRva2VuKSwKICAgICAgICBpbmRleEdldE5hbWUsIF9mb3Jlc3QuY3JlYXRlQXJndW1lbnRzKGZpbGVPZmZzZXQsIDxFeHByZXNzaW9uPltpbmRleF0pLAogICAgICAgIGludGVyZmFjZVRhcmdldDogZ2V0dGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0OwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVNpbXBsZVdyaXRlKEV4cHJlc3Npb24gdmFsdWUsIGJvb2wgdm9pZENvbnRleHQsCiAgICAgIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIGlmICghdm9pZENvbnRleHQpIHJldHVybiBfbWFrZVdyaXRlQW5kUmV0dXJuKHZhbHVlLCBjb21wbGV4QXNzaWdubWVudCk7CiAgICBNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQgd3JpdGUgPSBuZXcgTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KAogICAgICAgIF9mb3Jlc3QuY3JlYXRlVGhpc0V4cHJlc3Npb24odG9rZW4pLAogICAgICAgIGluZGV4U2V0TmFtZSwKICAgICAgICBfZm9yZXN0LmNyZWF0ZUFyZ3VtZW50cyhmaWxlT2Zmc2V0LCA8RXhwcmVzc2lvbj5baW5kZXgsIHZhbHVlXSksCiAgICAgICAgaW50ZXJmYWNlVGFyZ2V0OiBzZXR0ZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICBjb21wbGV4QXNzaWdubWVudD8ud3JpdGUgPSB3cml0ZTsKICAgIHJldHVybiB3cml0ZTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VSZWFkKENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIE1ldGhvZEludm9jYXRpb25KdWRnbWVudCByZWFkID0gbmV3IE1ldGhvZEludm9jYXRpb25KdWRnbWVudCgKICAgICAgICBfZm9yZXN0LmNyZWF0ZVRoaXNFeHByZXNzaW9uKHRva2VuKSwKICAgICAgICBpbmRleEdldE5hbWUsCiAgICAgICAgX2ZvcmVzdC5jcmVhdGVBcmd1bWVudHMoZmlsZU9mZnNldCwgPEV4cHJlc3Npb24+W2luZGV4QWNjZXNzKCldKSwKICAgICAgICBpbnRlcmZhY2VUYXJnZXQ6IGdldHRlcikKICAgICAgLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py5yZWFkID0gcmVhZDsKICAgIHJldHVybiByZWFkOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVdyaXRlKEV4cHJlc3Npb24gdmFsdWUsIGJvb2wgdm9pZENvbnRleHQsCiAgICAgIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIGlmICghdm9pZENvbnRleHQpIHJldHVybiBfbWFrZVdyaXRlQW5kUmV0dXJuKHZhbHVlLCBjb21wbGV4QXNzaWdubWVudCk7CiAgICBNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQgd3JpdGUgPSBuZXcgTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KAogICAgICAgIF9mb3Jlc3QuY3JlYXRlVGhpc0V4cHJlc3Npb24odG9rZW4pLAogICAgICAgIGluZGV4U2V0TmFtZSwKICAgICAgICBfZm9yZXN0LmNyZWF0ZUFyZ3VtZW50cyhmaWxlT2Zmc2V0LCA8RXhwcmVzc2lvbj5baW5kZXhBY2Nlc3MoKSwgdmFsdWVdKSwKICAgICAgICBpbnRlcmZhY2VUYXJnZXQ6IHNldHRlcikKICAgICAgLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py53cml0ZSA9IHdyaXRlOwogICAgcmV0dXJuIHdyaXRlOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfZmluaXNoKAogICAgICBFeHByZXNzaW9uIGJvZHksIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIHJldHVybiBzdXBlci5fZmluaXNoKG1ha2VMZXQoaW5kZXhWYXJpYWJsZSwgYm9keSksIGNvbXBsZXhBc3NpZ25tZW50KTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBfaGVscGVyLmJ1aWxkTWV0aG9kSW52b2NhdGlvbigKICAgICAgICBidWlsZFNpbXBsZVJlYWQoKSwgY2FsbE5hbWUsIGFyZ3VtZW50cywgb2Zmc2V0LAogICAgICAgIGlzSW1wbGljaXRDYWxsOiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgc3RhcnRDb21wbGV4QXNzaWdubWVudChFeHByZXNzaW9uIHJocykgPT4KICAgICAgU3ludGhldGljV3JhcHBlci53cmFwSW5kZXhBc3NpZ25tZW50KG51bGwsIGluZGV4LCByaHMpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBOYW1lU3lzdGVtIHN5bnRoZXRpY05hbWVzID0gbmV3IE5hbWVTeXN0ZW0oKTsKICAgIHNpbmsud3JpdGUoIiwgaW5kZXg6ICIpOwogICAgcHJpbnROb2RlT24oaW5kZXgsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIGdldHRlcjogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbihnZXR0ZXIsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIHNldHRlcjogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbihzZXR0ZXIsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIGluZGV4VmFyaWFibGU6ICIpOwogICAgcHJpbnROb2RlT24oaW5kZXhWYXJpYWJsZSwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICB9Cn0KCmNsYXNzIFN1cGVySW5kZXhlZEFjY2Vzc0dlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvciB7CiAgZmluYWwgRXhwcmVzc2lvbiBpbmRleDsKCiAgZmluYWwgTWVtYmVyIGdldHRlcjsKCiAgZmluYWwgTWVtYmVyIHNldHRlcjsKCiAgVmFyaWFibGVEZWNsYXJhdGlvbiBpbmRleFZhcmlhYmxlOwoKICBTdXBlckluZGV4ZWRBY2Nlc3NHZW5lcmF0b3IoRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsIFRva2VuIHRva2VuLAogICAgICB0aGlzLmluZGV4LCB0aGlzLmdldHRlciwgdGhpcy5zZXR0ZXIpCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbik7CgogIFN0cmluZyBnZXQgX3BsYWluTmFtZUZvclJlYWQgPT4gIltdIjsKCiAgU3RyaW5nIGdldCBfZGVidWdOYW1lID0+ICJTdXBlckluZGV4ZWRBY2Nlc3NHZW5lcmF0b3IiOwoKICBFeHByZXNzaW9uIGluZGV4QWNjZXNzKCkgewogICAgaW5kZXhWYXJpYWJsZSA/Pz0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUoaW5kZXgpOwogICAgcmV0dXJuIG5ldyBWYXJpYWJsZUdldChpbmRleFZhcmlhYmxlKTsKICB9CgogIEV4cHJlc3Npb24gX21ha2VXcml0ZUFuZFJldHVybigKICAgICAgRXhwcmVzc2lvbiB2YWx1ZSwgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YWx1ZVZhcmlhYmxlID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUodmFsdWUpOwogICAgaWYgKHNldHRlciA9PSBudWxsKSB7CiAgICAgIF9oZWxwZXIud2FyblVucmVzb2x2ZWRNZXRob2QoaW5kZXhTZXROYW1lLCBmaWxlT2Zmc2V0LCBpc1N1cGVyOiB0cnVlKTsKICAgIH0KICAgIFN1cGVyTWV0aG9kSW52b2NhdGlvbiB3cml0ZSA9IG5ldyBTdXBlck1ldGhvZEludm9jYXRpb24oCiAgICAgICAgaW5kZXhTZXROYW1lLAogICAgICAgIF9mb3Jlc3QuY3JlYXRlQXJndW1lbnRzKGZpbGVPZmZzZXQsCiAgICAgICAgICAgIDxFeHByZXNzaW9uPltpbmRleEFjY2VzcygpLCBuZXcgVmFyaWFibGVHZXQodmFsdWVWYXJpYWJsZSldKSwKICAgICAgICBzZXR0ZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICBjb21wbGV4QXNzaWdubWVudD8ud3JpdGUgPSB3cml0ZTsKICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gZHVtbXkgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZSh3cml0ZSk7CiAgICByZXR1cm4gbWFrZUxldCgKICAgICAgICB2YWx1ZVZhcmlhYmxlLCBtYWtlTGV0KGR1bW15LCBuZXcgVmFyaWFibGVHZXQodmFsdWVWYXJpYWJsZSkpKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VTaW1wbGVSZWFkKCkgewogICAgaWYgKGdldHRlciA9PSBudWxsKSB7CiAgICAgIF9oZWxwZXIud2FyblVucmVzb2x2ZWRNZXRob2QoaW5kZXhHZXROYW1lLCBmaWxlT2Zmc2V0LCBpc1N1cGVyOiB0cnVlKTsKICAgIH0KICAgIC8vIFRPRE8oYWhlKTogVXNlIFtEaXJlY3RNZXRob2RJbnZvY2F0aW9uXSB3aGVuIHBvc3NpYmxlLgogICAgcmV0dXJuIG5ldyBTdXBlck1ldGhvZEludm9jYXRpb25KdWRnbWVudCgKICAgICAgICBpbmRleEdldE5hbWUsIF9mb3Jlc3QuY3JlYXRlQXJndW1lbnRzKGZpbGVPZmZzZXQsIDxFeHByZXNzaW9uPltpbmRleF0pLAogICAgICAgIGludGVyZmFjZVRhcmdldDogZ2V0dGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0OwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVNpbXBsZVdyaXRlKEV4cHJlc3Npb24gdmFsdWUsIGJvb2wgdm9pZENvbnRleHQsCiAgICAgIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIGlmICghdm9pZENvbnRleHQpIHJldHVybiBfbWFrZVdyaXRlQW5kUmV0dXJuKHZhbHVlLCBjb21wbGV4QXNzaWdubWVudCk7CiAgICBpZiAoc2V0dGVyID09IG51bGwpIHsKICAgICAgX2hlbHBlci53YXJuVW5yZXNvbHZlZE1ldGhvZChpbmRleFNldE5hbWUsIGZpbGVPZmZzZXQsIGlzU3VwZXI6IHRydWUpOwogICAgfQogICAgU3VwZXJNZXRob2RJbnZvY2F0aW9uIHdyaXRlID0gbmV3IFN1cGVyTWV0aG9kSW52b2NhdGlvbihpbmRleFNldE5hbWUsCiAgICAgICAgX2ZvcmVzdC5jcmVhdGVBcmd1bWVudHMoZmlsZU9mZnNldCwgPEV4cHJlc3Npb24+W2luZGV4LCB2YWx1ZV0pLCBzZXR0ZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICBjb21wbGV4QXNzaWdubWVudD8ud3JpdGUgPSB3cml0ZTsKICAgIHJldHVybiB3cml0ZTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VSZWFkKENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIGlmIChnZXR0ZXIgPT0gbnVsbCkgewogICAgICBfaGVscGVyLndhcm5VbnJlc29sdmVkTWV0aG9kKGluZGV4R2V0TmFtZSwgZmlsZU9mZnNldCwgaXNTdXBlcjogdHJ1ZSk7CiAgICB9CiAgICBTdXBlck1ldGhvZEludm9jYXRpb24gcmVhZCA9IG5ldyBTdXBlck1ldGhvZEludm9jYXRpb24oCiAgICAgICAgaW5kZXhHZXROYW1lLAogICAgICAgIF9mb3Jlc3QuY3JlYXRlQXJndW1lbnRzKGZpbGVPZmZzZXQsIDxFeHByZXNzaW9uPltpbmRleEFjY2VzcygpXSksCiAgICAgICAgZ2V0dGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0OwogICAgY29tcGxleEFzc2lnbm1lbnQ/LnJlYWQgPSByZWFkOwogICAgcmV0dXJuIHJlYWQ7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlV3JpdGUoRXhwcmVzc2lvbiB2YWx1ZSwgYm9vbCB2b2lkQ29udGV4dCwKICAgICAgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgaWYgKCF2b2lkQ29udGV4dCkgcmV0dXJuIF9tYWtlV3JpdGVBbmRSZXR1cm4odmFsdWUsIGNvbXBsZXhBc3NpZ25tZW50KTsKICAgIGlmIChzZXR0ZXIgPT0gbnVsbCkgewogICAgICBfaGVscGVyLndhcm5VbnJlc29sdmVkTWV0aG9kKGluZGV4U2V0TmFtZSwgZmlsZU9mZnNldCwgaXNTdXBlcjogdHJ1ZSk7CiAgICB9CiAgICBTdXBlck1ldGhvZEludm9jYXRpb24gd3JpdGUgPSBuZXcgU3VwZXJNZXRob2RJbnZvY2F0aW9uKAogICAgICAgIGluZGV4U2V0TmFtZSwKICAgICAgICBfZm9yZXN0LmNyZWF0ZUFyZ3VtZW50cyhmaWxlT2Zmc2V0LCA8RXhwcmVzc2lvbj5baW5kZXhBY2Nlc3MoKSwgdmFsdWVdKSwKICAgICAgICBzZXR0ZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICBjb21wbGV4QXNzaWdubWVudD8ud3JpdGUgPSB3cml0ZTsKICAgIHJldHVybiB3cml0ZTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX2ZpbmlzaCgKICAgICAgRXhwcmVzc2lvbiBib2R5LCBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICByZXR1cm4gc3VwZXIuX2ZpbmlzaChtYWtlTGV0KGluZGV4VmFyaWFibGUsIGJvZHkpLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldCwKICAgICAgICBjb21wbGV4QXNzaWdubWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGRvSW52b2NhdGlvbihpbnQgb2Zmc2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gX2hlbHBlci5idWlsZE1ldGhvZEludm9jYXRpb24oCiAgICAgICAgYnVpbGRTaW1wbGVSZWFkKCksIGNhbGxOYW1lLCBhcmd1bWVudHMsIG9mZnNldCwKICAgICAgICBpc0ltcGxpY2l0Q2FsbDogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IHN0YXJ0Q29tcGxleEFzc2lnbm1lbnQoRXhwcmVzc2lvbiByaHMpID0+CiAgICAgIFN5bnRoZXRpY1dyYXBwZXIud3JhcEluZGV4QXNzaWdubWVudChudWxsLCBpbmRleCwgcmhzLCBpc1N1cGVyOiB0cnVlKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBwcmludE9uKFN0cmluZ1Npbmsgc2luaykgewogICAgTmFtZVN5c3RlbSBzeW50aGV0aWNOYW1lcyA9IG5ldyBOYW1lU3lzdGVtKCk7CiAgICBzaW5rLndyaXRlKCIsIGluZGV4OiAiKTsKICAgIHByaW50Tm9kZU9uKGluZGV4LCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogICAgc2luay53cml0ZSgiLCBnZXR0ZXI6ICIpOwogICAgcHJpbnRRdWFsaWZpZWROYW1lT24oZ2V0dGVyLCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogICAgc2luay53cml0ZSgiLCBzZXR0ZXI6ICIpOwogICAgcHJpbnRRdWFsaWZpZWROYW1lT24oc2V0dGVyLCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogICAgc2luay53cml0ZSgiLCBpbmRleFZhcmlhYmxlOiAiKTsKICAgIHByaW50Tm9kZU9uKGluZGV4VmFyaWFibGUsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgfQp9CgovLy8gQSBbU3RhdGljQWNjZXNzR2VuZXJhdG9yXSByZXByZXNlbnRzIGEgc3ViZXhwcmVzc2lvbiB3aG9zZSBwcmVmaXggaXMKLy8vIGEgc3RhdGljIG9yIHRvcC1sZXZlbCBtZW1iZXIsIGluY2x1ZGluZyBzdGF0aWMgZXh0ZW5zaW9uIG1lbWJlcnMuCi8vLwovLy8gRm9yIGluc3RhbmNlCi8vLwovLy8gICBnZXQgcHJvcGVydHkgPT4gMDsKLy8vICAgc2V0IHByb3BlcnR5KF8pIHt9Ci8vLyAgIHZhciBmaWVsZDsKLy8vICAgbWV0aG9kKCkge30KLy8vCi8vLyAgIG1haW4oKSB7Ci8vLyAgICAgcHJvcGVydHk7ICAgICAvLyBhIFN0YXRpY0FjY2Vzc0dlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgcHJvcGVydHlgLgovLy8gICAgIHByb3BlcnR5ID0gMDsgLy8gYSBTdGF0aWNBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYHByb3BlcnR5YC4KLy8vICAgICBmaWVsZCA9IDA7ICAgIC8vIGEgU3RhdGljQWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBmaWVsZGAuCi8vLyAgICAgbWV0aG9kOyAgICAgICAvLyBhIFN0YXRpY0FjY2Vzc0dlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgbWV0aG9kYC4KLy8vICAgICBtZXRob2QoKTsgICAgIC8vIGEgU3RhdGljQWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBtZXRob2RgLgovLy8gICB9Ci8vLwovLy8gICBjbGFzcyBBIHt9Ci8vLyAgIGV4dGVuc2lvbiBCIG9uIEEgewovLy8gICAgIHN0YXRpYyBnZXQgcHJvcGVydHkgPT4gMDsKLy8vICAgICBzdGF0aWMgc2V0IHByb3BlcnR5KF8pIHt9Ci8vLyAgICAgc3RhdGljIHZhciBmaWVsZDsKLy8vICAgICBzdGF0aWMgbWV0aG9kKCkgewovLy8gICAgICAgcHJvcGVydHk7ICAgICAvLyB0aGlzIFN0YXRpY0FjY2Vzc0dlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgcHJvcGVydHlgLgovLy8gICAgICAgcHJvcGVydHkgPSAwOyAvLyB0aGlzIFN0YXRpY0FjY2Vzc0dlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgcHJvcGVydHlgLgovLy8gICAgICAgZmllbGQgPSAwOyAgICAvLyB0aGlzIFN0YXRpY0FjY2Vzc0dlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgZmllbGRgLgovLy8gICAgICAgbWV0aG9kOyAgICAgICAvLyB0aGlzIFN0YXRpY0FjY2Vzc0dlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgbWV0aG9kYC4KLy8vICAgICAgIG1ldGhvZCgpOyAgICAgLy8gdGhpcyBTdGF0aWNBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYG1ldGhvZGAuCi8vLyAgICAgfQovLy8gICB9Ci8vLwpjbGFzcyBTdGF0aWNBY2Nlc3NHZW5lcmF0b3IgZXh0ZW5kcyBHZW5lcmF0b3IgewogIC8vLyBUaGUgc3RhdGljIFtNZW1iZXJdIHVzZWQgZm9yIHBlcmZvcm1pbmcgYSByZWFkIG9yIGludm9jYXRpb24gb24gdGhpcwogIC8vLyBzdWJleHByZXNzaW9uLgogIC8vLwogIC8vLyBUaGlzIGNhbiBiZSBgbnVsbGAgaWYgdGhlIHN1YmV4cHJlc3Npb24gZG9lc24ndCBoYXZlIGEgcmVhZGFibGUgdGFyZ2V0LgogIC8vLyBGb3IgaW5zdGFuY2UgaWYgdGhlIHN1YmV4cHJlc3Npb24gaXMgYSBzZXR0ZXIgd2l0aG91dCBhIGNvcnJlc3BvbmRpbmcKICAvLy8gZ2V0dGVyLgogIGZpbmFsIE1lbWJlciByZWFkVGFyZ2V0OwoKICAvLy8gVGhlIHN0YXRpYyBbTWVtYmVyXSB1c2VkIGZvciBwZXJmb3JtaW5nIGEgd3JpdGUgb24gdGhpcyBzdWJleHByZXNzaW9uLgogIC8vLwogIC8vLyBUaGlzIGNhbiBiZSBgbnVsbGAgaWYgdGhlIHN1YmV4cHJlc3Npb24gZG9lc24ndCBoYXZlIGEgd3JpdGFibGUgdGFyZ2V0LgogIC8vLyBGb3IgaW5zdGFuY2UgaWYgdGhlIHN1YmV4cHJlc3Npb24gaXMgYSBmaW5hbCBmaWVsZCwgYSBtZXRob2QsIG9yIGEgZ2V0dGVyCiAgLy8vIHdpdGhvdXQgYSBjb3JyZXNwb25kaW5nIHNldHRlci4KICBmaW5hbCBNZW1iZXIgd3JpdGVUYXJnZXQ7CgogIFN0YXRpY0FjY2Vzc0dlbmVyYXRvcihFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4sCiAgICAgIHRoaXMucmVhZFRhcmdldCwgdGhpcy53cml0ZVRhcmdldCkKICAgICAgOiBhc3NlcnQocmVhZFRhcmdldCAhPSBudWxsIHx8IHdyaXRlVGFyZ2V0ICE9IG51bGwpLAogICAgICAgIHN1cGVyKGhlbHBlciwgdG9rZW4pOwoKICBmYWN0b3J5IFN0YXRpY0FjY2Vzc0dlbmVyYXRvci5mcm9tQnVpbGRlcihFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwKICAgICAgQnVpbGRlciBkZWNsYXJhdGlvbiwgVG9rZW4gdG9rZW4sIEJ1aWxkZXIgYnVpbGRlclNldHRlcikgewogICAgaWYgKGRlY2xhcmF0aW9uIGlzIEFjY2Vzc0Vycm9yQnVpbGRlcikgewogICAgICBBY2Nlc3NFcnJvckJ1aWxkZXIgZXJyb3IgPSBkZWNsYXJhdGlvbjsKICAgICAgZGVjbGFyYXRpb24gPSBlcnJvci5idWlsZGVyOwogICAgICAvLyBXZSBzaG91bGQgb25seSBzZWUgYW4gYWNjZXNzIGVycm9yIGhlcmUgaWYgd2UndmUgbG9va2VkIHVwIGEgc2V0dGVyCiAgICAgIC8vIHdoZW4gbm90IGV4cGxpY2l0bHkgbG9va2luZyBmb3IgYSBzZXR0ZXIuCiAgICAgIGFzc2VydChkZWNsYXJhdGlvbi5pc1NldHRlcik7CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uLnRhcmdldCA9PSBudWxsKSB7CiAgICAgIHJldHVybiB1bmhhbmRsZWQoCiAgICAgICAgICAiJHtkZWNsYXJhdGlvbi5ydW50aW1lVHlwZX0iLAogICAgICAgICAgIlN0YXRpY0FjY2Vzc0dlbmVyYXRvci5mcm9tQnVpbGRlciIsCiAgICAgICAgICBvZmZzZXRGb3JUb2tlbih0b2tlbiksCiAgICAgICAgICBoZWxwZXIudXJpKTsKICAgIH0KICAgIE1lbWJlciBnZXR0ZXIgPSBkZWNsYXJhdGlvbi50YXJnZXQuaGFzR2V0dGVyID8gZGVjbGFyYXRpb24udGFyZ2V0IDogbnVsbDsKICAgIE1lbWJlciBzZXR0ZXIgPSBkZWNsYXJhdGlvbi50YXJnZXQuaGFzU2V0dGVyID8gZGVjbGFyYXRpb24udGFyZ2V0IDogbnVsbDsKICAgIGlmIChzZXR0ZXIgPT0gbnVsbCkgewogICAgICBpZiAoYnVpbGRlclNldHRlcj8udGFyZ2V0Py5oYXNTZXR0ZXIgPz8gZmFsc2UpIHsKICAgICAgICBzZXR0ZXIgPSBidWlsZGVyU2V0dGVyLnRhcmdldDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBTdGF0aWNBY2Nlc3NHZW5lcmF0b3IoaGVscGVyLCB0b2tlbiwgZ2V0dGVyLCBzZXR0ZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfZGVidWdOYW1lID0+ICJTdGF0aWNBY2Nlc3NHZW5lcmF0b3IiOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9wbGFpbk5hbWVGb3JSZWFkID0+IChyZWFkVGFyZ2V0ID8/IHdyaXRlVGFyZ2V0KS5uYW1lLm5hbWU7CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VSZWFkKENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIEV4cHJlc3Npb24gcmVhZDsKICAgIGlmIChyZWFkVGFyZ2V0ID09IG51bGwpIHsKICAgICAgcmVhZCA9IF9tYWtlSW52YWxpZFJlYWQoKTsKICAgICAgaWYgKGNvbXBsZXhBc3NpZ25tZW50ICE9IG51bGwpIHsKICAgICAgICByZWFkID0gX2hlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihyZWFkKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmVhZCA9IF9oZWxwZXIubWFrZVN0YXRpY0dldChyZWFkVGFyZ2V0LCB0b2tlbik7CiAgICB9CiAgICBjb21wbGV4QXNzaWdubWVudD8ucmVhZCA9IHJlYWQ7CiAgICByZXR1cm4gcmVhZDsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VXcml0ZShFeHByZXNzaW9uIHZhbHVlLCBib29sIHZvaWRDb250ZXh0LAogICAgICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICBFeHByZXNzaW9uIHdyaXRlOwogICAgaWYgKHdyaXRlVGFyZ2V0ID09IG51bGwpIHsKICAgICAgd3JpdGUgPSBfbWFrZUludmFsaWRXcml0ZSh2YWx1ZSk7CiAgICAgIGlmIChjb21wbGV4QXNzaWdubWVudCAhPSBudWxsKSB7CiAgICAgICAgd3JpdGUgPSBfaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKHdyaXRlKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgd3JpdGUgPSBuZXcgU3RhdGljU2V0KHdyaXRlVGFyZ2V0LCB2YWx1ZSk7CiAgICB9CiAgICBjb21wbGV4QXNzaWdubWVudD8ud3JpdGUgPSB3cml0ZTsKICAgIHdyaXRlLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0OwogICAgcmV0dXJuIHdyaXRlOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBkb0ludm9jYXRpb24oaW50IG9mZnNldCwgQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgaWYgKF9oZWxwZXIuY29uc3RhbnRDb250ZXh0ICE9IENvbnN0YW50Q29udGV4dC5ub25lICYmCiAgICAgICAgIV9oZWxwZXIuaXNJZGVudGljYWwocmVhZFRhcmdldCkpIHsKICAgICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVOb3RDb25zdGFudEV4cHJlc3Npb24ud2l0aEFyZ3VtZW50cygnTWV0aG9kIGludm9jYXRpb24nKSwKICAgICAgICAgIG9mZnNldCwKICAgICAgICAgIHJlYWRUYXJnZXQ/Lm5hbWU/Lm5hbWU/Lmxlbmd0aCA/PyAwKTsKICAgIH0KICAgIGlmIChyZWFkVGFyZ2V0ID09IG51bGwgfHwgaXNGaWVsZE9yR2V0dGVyKHJlYWRUYXJnZXQpKSB7CiAgICAgIHJldHVybiBfaGVscGVyLmJ1aWxkTWV0aG9kSW52b2NhdGlvbihidWlsZFNpbXBsZVJlYWQoKSwgY2FsbE5hbWUsCiAgICAgICAgICBhcmd1bWVudHMsIG9mZnNldCArIChyZWFkVGFyZ2V0Py5uYW1lPy5uYW1lPy5sZW5ndGggPz8gMCksCiAgICAgICAgICAvLyBUaGlzIGlzbid0IGEgY29uc3RhbnQgZXhwcmVzc2lvbiwgYnV0IHdlIGhhdmUgY2hlY2tlZCBpZiBhCiAgICAgICAgICAvLyBjb25zdGFudCBleHByZXNzaW9uIGVycm9yIHNob3VsZCBiZSBlbWl0dGVkIGFscmVhZHkuCiAgICAgICAgICBpc0NvbnN0YW50RXhwcmVzc2lvbjogdHJ1ZSwKICAgICAgICAgIGlzSW1wbGljaXRDYWxsOiB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfaGVscGVyLmJ1aWxkU3RhdGljSW52b2NhdGlvbihyZWFkVGFyZ2V0LCBhcmd1bWVudHMsCiAgICAgICAgICBjaGFyT2Zmc2V0OiBvZmZzZXQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBzdGFydENvbXBsZXhBc3NpZ25tZW50KEV4cHJlc3Npb24gcmhzKSA9PgogICAgICBTeW50aGV0aWNXcmFwcGVyLndyYXBTdGF0aWNBc3NpZ25tZW50KHJocyk7CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIE5hbWVTeXN0ZW0gc3ludGhldGljTmFtZXMgPSBuZXcgTmFtZVN5c3RlbSgpOwogICAgc2luay53cml0ZSgiLCByZWFkVGFyZ2V0OiAiKTsKICAgIHByaW50UXVhbGlmaWVkTmFtZU9uKHJlYWRUYXJnZXQsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIHdyaXRlVGFyZ2V0OiAiKTsKICAgIHByaW50UXVhbGlmaWVkTmFtZU9uKHdyaXRlVGFyZ2V0LCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogIH0KfQoKLy8vIEFuIFtFeHRlbnNpb25JbnN0YW5jZUFjY2Vzc0dlbmVyYXRvcl0gcmVwcmVzZW50cyBhIHN1YmV4cHJlc3Npb24gd2hvc2UKLy8vIHByZWZpeCBpcyBhbiBleHRlbnNpb24gaW5zdGFuY2UgbWVtYmVyLgovLy8KLy8vIEZvciBpbnN0YW5jZQovLy8KLy8vICAgY2xhc3MgQSB7fQovLy8gICBleHRlbnNpb24gQiBvbiBBIHsKLy8vICAgICBnZXQgcHJvcGVydHkgPT4gMDsKLy8vICAgICBzZXQgcHJvcGVydHkoXykge30KLy8vICAgICBtZXRob2QoKSB7Ci8vLyAgICAgICBwcm9wZXJ0eTsgICAgIC8vIHRoaXMgZ2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBwcm9wZXJ0eWAuCi8vLyAgICAgICBwcm9wZXJ0eSA9IDA7IC8vIHRoaXMgZ2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBwcm9wZXJ0eWAuCi8vLyAgICAgICBtZXRob2Q7ICAgICAgIC8vIHRoaXMgZ2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBtZXRob2RgLgovLy8gICAgICAgbWV0aG9kKCk7ICAgICAvLyB0aGlzIGdlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgbWV0aG9kYC4KLy8vICAgICB9Ci8vLyAgIH0KLy8vCi8vLyBUaGVzZSBjYW4gb25seSBvY2N1ciB3aXRoaW4gYW4gZXh0ZW5zaW9uIGluc3RhbmNlIG1lbWJlci4KY2xhc3MgRXh0ZW5zaW9uSW5zdGFuY2VBY2Nlc3NHZW5lcmF0b3IgZXh0ZW5kcyBHZW5lcmF0b3IgewogIC8vLyBUaGUgc3RhdGljIFtNZW1iZXJdIGdlbmVyYXRlZCBmb3IgYW4gaW5zdGFuY2UgZXh0ZW5zaW9uIG1lbWJlciB3aGljaCBpcwogIC8vLyB1c2VkIGZvciBwZXJmb3JtaW5nIGEgcmVhZCBvbiB0aGlzIHN1YmV4cHJlc3Npb24uCiAgLy8vCiAgLy8vIFRoaXMgY2FuIGJlIGBudWxsYCBpZiB0aGUgc3ViZXhwcmVzc2lvbiBkb2Vzbid0IGhhdmUgYSByZWFkYWJsZSB0YXJnZXQuCiAgLy8vIEZvciBpbnN0YW5jZSBpZiB0aGUgc3ViZXhwcmVzc2lvbiBpcyBhIHNldHRlciB3aXRob3V0IGEgY29ycmVzcG9uZGluZwogIC8vLyBnZXR0ZXIuCiAgZmluYWwgUHJvY2VkdXJlIHJlYWRUYXJnZXQ7CgogIC8vLyBUaGUgc3RhdGljIFtNZW1iZXJdIGdlbmVyYXRlZCBmb3IgYW4gaW5zdGFuY2UgZXh0ZW5zaW9uIG1lbWJlciB3aGljaCBpcwogIC8vLyB1c2VkIGZvciBwZXJmb3JtaW5nIGFuIGludm9jYXRpb24gb24gdGhpcyBzdWJleHByZXNzaW9uLgogIC8vLwogIC8vLyBUaGlzIGNhbiBiZSBgbnVsbGAgaWYgdGhlIHN1YmV4cHJlc3Npb24gZG9lc24ndCBoYXZlIGFuIGludm9rYWJsZSB0YXJnZXQuCiAgLy8vIEZvciBpbnN0YW5jZSBpZiB0aGUgc3ViZXhwcmVzc2lvbiBpcyBhIGdldHRlciBvciBzZXR0ZXIuCiAgZmluYWwgUHJvY2VkdXJlIGludm9rZVRhcmdldDsKCiAgLy8vIFRoZSBzdGF0aWMgW01lbWJlcl0gZ2VuZXJhdGVkIGZvciBhbiBpbnN0YW5jZSBleHRlbnNpb24gbWVtYmVyIHdoaWNoIGlzCiAgLy8vIHVzZWQgZm9yIHBlcmZvcm1pbmcgYSB3cml0ZSBvbiB0aGlzIHN1YmV4cHJlc3Npb24uCiAgLy8vCiAgLy8vIFRoaXMgY2FuIGJlIGBudWxsYCBpZiB0aGUgc3ViZXhwcmVzc2lvbiBkb2Vzbid0IGhhdmUgYSB3cml0YWJsZSB0YXJnZXQuCiAgLy8vIEZvciBpbnN0YW5jZSBpZiB0aGUgc3ViZXhwcmVzc2lvbiBpcyBhIGZpbmFsIGZpZWxkLCBhIG1ldGhvZCwgb3IgYSBnZXR0ZXIKICAvLy8gd2l0aG91dCBhIGNvcnJlc3BvbmRpbmcgc2V0dGVyLgogIGZpbmFsIFByb2NlZHVyZSB3cml0ZVRhcmdldDsKCiAgLy8vIFRoZSBwYXJhbWV0ZXIgaG9sZGluZyB0aGUgdmFsdWUgZm9yIGB0aGlzYCB3aXRoaW4gdGhlIGN1cnJlbnQgZXh0ZW5zaW9uCiAgLy8vIGluc3RhbmNlIG1ldGhvZC4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBIYW5kbGUgc3RhdGljIGFjY2VzcyB0byBleHRlbnNpb24gaW5zdGFuY2UgbWVtYmVycywKICAvLyBpbiB3aGljaCBjYXNlIHRoZSBhY2Nlc3MgaXMgZXJyb25lb3VzIGFuZCBbZXh0ZW5zaW9uVGhpc10gaXMgYG51bGxgLgogIGZpbmFsIFZhcmlhYmxlRGVjbGFyYXRpb24gZXh0ZW5zaW9uVGhpczsKCiAgLy8vIFRoZSB0eXBlIHBhcmFtZXRlcnMgc3ludGhldGljYWxseSBhZGRlZCB0byAgdGhlIGN1cnJlbnQgZXh0ZW5zaW9uCiAgLy8vIGluc3RhbmNlIG1ldGhvZC4KICBmaW5hbCBMaXN0PFR5cGVQYXJhbWV0ZXI+IGV4dGVuc2lvblR5cGVQYXJhbWV0ZXJzOwoKICBFeHRlbnNpb25JbnN0YW5jZUFjY2Vzc0dlbmVyYXRvcigKICAgICAgRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsCiAgICAgIFRva2VuIHRva2VuLAogICAgICB0aGlzLnJlYWRUYXJnZXQsCiAgICAgIHRoaXMuaW52b2tlVGFyZ2V0LAogICAgICB0aGlzLndyaXRlVGFyZ2V0LAogICAgICB0aGlzLmV4dGVuc2lvblRoaXMsCiAgICAgIHRoaXMuZXh0ZW5zaW9uVHlwZVBhcmFtZXRlcnMpCiAgICAgIDogYXNzZXJ0KHJlYWRUYXJnZXQgIT0gbnVsbCB8fCB3cml0ZVRhcmdldCAhPSBudWxsKSwKICAgICAgICBhc3NlcnQoZXh0ZW5zaW9uVGhpcyAhPSBudWxsKSwKICAgICAgICBzdXBlcihoZWxwZXIsIHRva2VuKTsKCiAgZmFjdG9yeSBFeHRlbnNpb25JbnN0YW5jZUFjY2Vzc0dlbmVyYXRvci5mcm9tQnVpbGRlcigKICAgICAgRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gZXh0ZW5zaW9uVGhpcywKICAgICAgTGlzdDxUeXBlUGFyYW1ldGVyPiBleHRlbnNpb25UeXBlUGFyYW1ldGVycywKICAgICAgQnVpbGRlciBkZWNsYXJhdGlvbiwKICAgICAgVG9rZW4gdG9rZW4sCiAgICAgIEJ1aWxkZXIgYnVpbGRlclNldHRlcikgewogICAgaWYgKGRlY2xhcmF0aW9uIGlzIEFjY2Vzc0Vycm9yQnVpbGRlcikgewogICAgICBBY2Nlc3NFcnJvckJ1aWxkZXIgZXJyb3IgPSBkZWNsYXJhdGlvbjsKICAgICAgZGVjbGFyYXRpb24gPSBlcnJvci5idWlsZGVyOwogICAgICAvLyBXZSBzaG91bGQgb25seSBzZWUgYW4gYWNjZXNzIGVycm9yIGhlcmUgaWYgd2UndmUgbG9va2VkIHVwIGEgc2V0dGVyCiAgICAgIC8vIHdoZW4gbm90IGV4cGxpY2l0bHkgbG9va2luZyBmb3IgYSBzZXR0ZXIuCiAgICAgIGFzc2VydChkZWNsYXJhdGlvbi5pc1NldHRlcik7CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uLnRhcmdldCA9PSBudWxsKSB7CiAgICAgIHJldHVybiB1bmhhbmRsZWQoCiAgICAgICAgICAiJHtkZWNsYXJhdGlvbi5ydW50aW1lVHlwZX0iLAogICAgICAgICAgIkluc3RhbmNlRXh0ZW5zaW9uQWNjZXNzR2VuZXJhdG9yLmZyb21CdWlsZGVyIiwKICAgICAgICAgIG9mZnNldEZvclRva2VuKHRva2VuKSwKICAgICAgICAgIGhlbHBlci51cmkpOwogICAgfQogICAgUHJvY2VkdXJlIHJlYWRUYXJnZXQ7CiAgICBQcm9jZWR1cmUgaW52b2tlVGFyZ2V0OwogICAgaWYgKGRlY2xhcmF0aW9uLmlzR2V0dGVyKSB7CiAgICAgIHJlYWRUYXJnZXQgPSBkZWNsYXJhdGlvbi50YXJnZXQ7CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uLmlzUmVndWxhck1ldGhvZCkgewogICAgICBQcm9jZWR1cmVCdWlsZGVyIHByb2NlZHVyZUJ1aWxkZXIgPSBkZWNsYXJhdGlvbjsKICAgICAgcmVhZFRhcmdldCA9IHByb2NlZHVyZUJ1aWxkZXIuZXh0ZW5zaW9uVGVhck9mZjsKICAgICAgaW52b2tlVGFyZ2V0ID0gcHJvY2VkdXJlQnVpbGRlci5wcm9jZWR1cmU7CiAgICB9CiAgICBQcm9jZWR1cmUgd3JpdGVUYXJnZXQ7CiAgICBpZiAoYnVpbGRlclNldHRlciAhPSBudWxsICYmIGJ1aWxkZXJTZXR0ZXIuaXNTZXR0ZXIpIHsKICAgICAgd3JpdGVUYXJnZXQgPSBidWlsZGVyU2V0dGVyLnRhcmdldDsKICAgIH0KICAgIHJldHVybiBuZXcgRXh0ZW5zaW9uSW5zdGFuY2VBY2Nlc3NHZW5lcmF0b3IoaGVscGVyLCB0b2tlbiwgcmVhZFRhcmdldCwKICAgICAgICBpbnZva2VUYXJnZXQsIHdyaXRlVGFyZ2V0LCBleHRlbnNpb25UaGlzLCBleHRlbnNpb25UeXBlUGFyYW1ldGVycyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIkluc3RhbmNlRXh0ZW5zaW9uQWNjZXNzR2VuZXJhdG9yIjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfcGxhaW5OYW1lRm9yUmVhZCA9PiAocmVhZFRhcmdldCA/PyB3cml0ZVRhcmdldCkubmFtZS5uYW1lOwoKICBpbnQgZ2V0IF9leHRlbnNpb25UeXBlUGFyYW1ldGVyQ291bnQgPT4gZXh0ZW5zaW9uVHlwZVBhcmFtZXRlcnM/Lmxlbmd0aCA/PyAwOwoKICBMaXN0PERhcnRUeXBlPiBfY3JlYXRlRXh0ZW5zaW9uVHlwZUFyZ3VtZW50cygpIHsKICAgIExpc3Q8RGFydFR5cGU+IGV4dGVuc2lvblR5cGVBcmd1bWVudHMgPSBjb25zdCA8RGFydFR5cGU+W107CiAgICBpZiAoZXh0ZW5zaW9uVHlwZVBhcmFtZXRlcnMgIT0gbnVsbCkgewogICAgICBleHRlbnNpb25UeXBlQXJndW1lbnRzID0gW107CiAgICAgIGZvciAoVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyIGluIGV4dGVuc2lvblR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgICAgZXh0ZW5zaW9uVHlwZUFyZ3VtZW50cwogICAgICAgICAgICAuYWRkKF9mb3Jlc3QuY3JlYXRlVHlwZVBhcmFtZXRlclR5cGUodHlwZVBhcmFtZXRlcikpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZXh0ZW5zaW9uVHlwZUFyZ3VtZW50czsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VSZWFkKENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIEV4cHJlc3Npb24gcmVhZDsKICAgIGlmIChyZWFkVGFyZ2V0ID09IG51bGwpIHsKICAgICAgcmVhZCA9IF9tYWtlSW52YWxpZFJlYWQoKTsKICAgICAgaWYgKGNvbXBsZXhBc3NpZ25tZW50ICE9IG51bGwpIHsKICAgICAgICByZWFkID0gX2hlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihyZWFkKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmVhZCA9IF9oZWxwZXIuYnVpbGRFeHRlbnNpb25NZXRob2RJbnZvY2F0aW9uKAogICAgICAgICAgZmlsZU9mZnNldCwKICAgICAgICAgIHJlYWRUYXJnZXQsCiAgICAgICAgICBfaGVscGVyLmZvcmVzdC5jcmVhdGVBcmd1bWVudHNGb3JFeHRlbnNpb25NZXRob2QoCiAgICAgICAgICAgICAgZmlsZU9mZnNldCwKICAgICAgICAgICAgICBfZXh0ZW5zaW9uVHlwZVBhcmFtZXRlckNvdW50LAogICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgX2hlbHBlci5jcmVhdGVWYXJpYWJsZUdldChleHRlbnNpb25UaGlzLCBmaWxlT2Zmc2V0KSwKICAgICAgICAgICAgICBleHRlbnNpb25UeXBlQXJndW1lbnRzOiBfY3JlYXRlRXh0ZW5zaW9uVHlwZUFyZ3VtZW50cygpKSk7CiAgICB9CiAgICBjb21wbGV4QXNzaWdubWVudD8ucmVhZCA9IHJlYWQ7CiAgICByZXR1cm4gcmVhZDsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VXcml0ZShFeHByZXNzaW9uIHZhbHVlLCBib29sIHZvaWRDb250ZXh0LAogICAgICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICBFeHByZXNzaW9uIHdyaXRlOwogICAgaWYgKHdyaXRlVGFyZ2V0ID09IG51bGwpIHsKICAgICAgd3JpdGUgPSBfbWFrZUludmFsaWRXcml0ZSh2YWx1ZSk7CiAgICAgIGlmIChjb21wbGV4QXNzaWdubWVudCAhPSBudWxsKSB7CiAgICAgICAgd3JpdGUgPSBfaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKHdyaXRlKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgd3JpdGUgPSBfaGVscGVyLmJ1aWxkRXh0ZW5zaW9uTWV0aG9kSW52b2NhdGlvbigKICAgICAgICAgIGZpbGVPZmZzZXQsCiAgICAgICAgICB3cml0ZVRhcmdldCwKICAgICAgICAgIF9oZWxwZXIuZm9yZXN0LmNyZWF0ZUFyZ3VtZW50c0ZvckV4dGVuc2lvbk1ldGhvZCgKICAgICAgICAgICAgICBmaWxlT2Zmc2V0LAogICAgICAgICAgICAgIF9leHRlbnNpb25UeXBlUGFyYW1ldGVyQ291bnQsCiAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICBfaGVscGVyLmNyZWF0ZVZhcmlhYmxlR2V0KGV4dGVuc2lvblRoaXMsIGZpbGVPZmZzZXQpLAogICAgICAgICAgICAgIGV4dGVuc2lvblR5cGVBcmd1bWVudHM6IF9jcmVhdGVFeHRlbnNpb25UeXBlQXJndW1lbnRzKCksCiAgICAgICAgICAgICAgcG9zaXRpb25hbEFyZ3VtZW50czogW3ZhbHVlXSkpOwogICAgfQogICAgY29tcGxleEFzc2lnbm1lbnQ/LndyaXRlID0gd3JpdGU7CiAgICB3cml0ZS5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKICAgIHJldHVybiB3cml0ZTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIGlmIChpbnZva2VUYXJnZXQgIT0gbnVsbCkgewogICAgICByZXR1cm4gX2hlbHBlci5idWlsZEV4dGVuc2lvbk1ldGhvZEludm9jYXRpb24oCiAgICAgICAgICBvZmZzZXQsCiAgICAgICAgICBpbnZva2VUYXJnZXQsCiAgICAgICAgICBfZm9yZXN0LmNyZWF0ZUFyZ3VtZW50c0ZvckV4dGVuc2lvbk1ldGhvZCgKICAgICAgICAgICAgICBmaWxlT2Zmc2V0LAogICAgICAgICAgICAgIF9leHRlbnNpb25UeXBlUGFyYW1ldGVyQ291bnQsCiAgICAgICAgICAgICAgaW52b2tlVGFyZ2V0LmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCAtCiAgICAgICAgICAgICAgICAgIF9leHRlbnNpb25UeXBlUGFyYW1ldGVyQ291bnQsCiAgICAgICAgICAgICAgX2hlbHBlci5jcmVhdGVWYXJpYWJsZUdldChleHRlbnNpb25UaGlzLCBvZmZzZXQpLAogICAgICAgICAgICAgIGV4dGVuc2lvblR5cGVBcmd1bWVudHM6IF9jcmVhdGVFeHRlbnNpb25UeXBlQXJndW1lbnRzKCksCiAgICAgICAgICAgICAgdHlwZUFyZ3VtZW50czogYXJndW1lbnRzLnR5cGVzLAogICAgICAgICAgICAgIHBvc2l0aW9uYWxBcmd1bWVudHM6IGFyZ3VtZW50cy5wb3NpdGlvbmFsLAogICAgICAgICAgICAgIG5hbWVkQXJndW1lbnRzOiBhcmd1bWVudHMubmFtZWQpKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfaGVscGVyLmJ1aWxkTWV0aG9kSW52b2NhdGlvbihidWlsZFNpbXBsZVJlYWQoKSwgY2FsbE5hbWUsCiAgICAgICAgICBhcmd1bWVudHMsIGFkanVzdEZvckltcGxpY2l0Q2FsbChfcGxhaW5OYW1lRm9yUmVhZCwgb2Zmc2V0KSwKICAgICAgICAgIGlzSW1wbGljaXRDYWxsOiB0cnVlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgc3RhcnRDb21wbGV4QXNzaWdubWVudChFeHByZXNzaW9uIHJocykgPT4KICAgICAgU3ludGhldGljV3JhcHBlci53cmFwU3RhdGljQXNzaWdubWVudChyaHMpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBOYW1lU3lzdGVtIHN5bnRoZXRpY05hbWVzID0gbmV3IE5hbWVTeXN0ZW0oKTsKICAgIHNpbmsud3JpdGUoIiwgcmVhZFRhcmdldDogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbihyZWFkVGFyZ2V0LCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogICAgc2luay53cml0ZSgiLCB3cml0ZVRhcmdldDogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbih3cml0ZVRhcmdldCwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICB9Cn0KCi8vLyBBIFtFeHBsaWNpdEV4dGVuc2lvbkluc3RhbmNlQWNjZXNzR2VuZXJhdG9yXSByZXByZXNlbnRzIGEgc3ViZXhwcmVzc2lvbgovLy8gd2hvc2UgcHJlZml4IGlzIGEgZm9yY2VkIGV4dGVuc2lvbiBpbnN0YW5jZSBtZW1iZXIgYWNjZXNzLgovLy8KLy8vIEZvciBpbnN0YW5jZQovLy8KLy8vICAgY2xhc3MgQTxUPiB7fQovLy8gICBleHRlbnNpb24gQiBvbiBBPGludD4gewovLy8gICAgIG1ldGhvZCgpIHt9Ci8vLyAgIH0KLy8vICAgZXh0ZW5zaW9uIEM8VD4gewovLy8gICAgIFQgZ2V0IGZpZWxkID0+IDA7Ci8vLyAgICAgc2V0IGZpZWxkKFQgXykge30KLy8vICAgfQovLy8KLy8vICAgbWV0aG9kKEEgYSkgewovLy8gICAgIEIoYSkubWV0aG9kOyAgICAgLy8gdGhpcyBnZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYEIoYSkubWV0aG9kYC4KLy8vICAgICBCKGEpLm1ldGhvZCgpOyAgIC8vIHRoaXMgZ2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBCKGEpLm1ldGhvZGAuCi8vLyAgICAgQzxpbnQ+KGEpLmZpZWxkOyAvLyB0aGlzIGdlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgQzxpbnQ+KGEpLmZpZWxkYC4KLy8vICAgICBDKGEpLmZpZWxkID0gMDsgIC8vIHRoaXMgZ2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBDKGEpLmZpZWxkYC4KLy8vICAgfQovLy8KY2xhc3MgRXhwbGljaXRFeHRlbnNpb25JbnN0YW5jZUFjY2Vzc0dlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvciB7CiAgLy8vIFRoZSBzdGF0aWMgW01lbWJlcl0gZ2VuZXJhdGVkIGZvciBhbiBpbnN0YW5jZSBleHRlbnNpb24gbWVtYmVyIHdoaWNoIGlzCiAgLy8vIHVzZWQgZm9yIHBlcmZvcm1pbmcgYSByZWFkIG9uIHRoaXMgc3ViZXhwcmVzc2lvbi4KICAvLy8KICAvLy8gVGhpcyBjYW4gYmUgYG51bGxgIGlmIHRoZSBzdWJleHByZXNzaW9uIGRvZXNuJ3QgaGF2ZSBhIHJlYWRhYmxlIHRhcmdldC4KICAvLy8gRm9yIGluc3RhbmNlIGlmIHRoZSBzdWJleHByZXNzaW9uIGlzIGEgc2V0dGVyIHdpdGhvdXQgYSBjb3JyZXNwb25kaW5nCiAgLy8vIGdldHRlci4KICBmaW5hbCBQcm9jZWR1cmUgcmVhZFRhcmdldDsKCiAgLy8vIFRoZSBzdGF0aWMgW01lbWJlcl0gZ2VuZXJhdGVkIGZvciBhbiBpbnN0YW5jZSBleHRlbnNpb24gbWVtYmVyIHdoaWNoIGlzCiAgLy8vIHVzZWQgZm9yIHBlcmZvcm1pbmcgYW4gaW52b2NhdGlvbiBvbiB0aGlzIHN1YmV4cHJlc3Npb24uCiAgLy8vCiAgLy8vIFRoaXMgY2FuIGJlIGBudWxsYCBpZiB0aGUgc3ViZXhwcmVzc2lvbiBkb2Vzbid0IGhhdmUgYW4gaW52b2thYmxlIHRhcmdldC4KICAvLy8gRm9yIGluc3RhbmNlIGlmIHRoZSBzdWJleHByZXNzaW9uIGlzIGEgZ2V0dGVyIG9yIHNldHRlci4KICBmaW5hbCBQcm9jZWR1cmUgaW52b2tlVGFyZ2V0OwoKICAvLy8gVGhlIHN0YXRpYyBbTWVtYmVyXSBnZW5lcmF0ZWQgZm9yIGFuIGluc3RhbmNlIGV4dGVuc2lvbiBtZW1iZXIgd2hpY2ggaXMKICAvLy8gdXNlZCBmb3IgcGVyZm9ybWluZyBhIHdyaXRlIG9uIHRoaXMgc3ViZXhwcmVzc2lvbi4KICAvLy8KICAvLy8gVGhpcyBjYW4gYmUgYG51bGxgIGlmIHRoZSBzdWJleHByZXNzaW9uIGRvZXNuJ3QgaGF2ZSBhIHdyaXRhYmxlIHRhcmdldC4KICAvLy8gRm9yIGluc3RhbmNlIGlmIHRoZSBzdWJleHByZXNzaW9uIGlzIGEgZmluYWwgZmllbGQsIGEgbWV0aG9kLCBvciBhIGdldHRlcgogIC8vLyB3aXRob3V0IGEgY29ycmVzcG9uZGluZyBzZXR0ZXIuCiAgZmluYWwgUHJvY2VkdXJlIHdyaXRlVGFyZ2V0OwoKICAvLy8gVGhlIGV4cHJlc3Npb24gaG9sZGluZyB0aGUgcmVjZWl2ZXIgdmFsdWUgZm9yIHRoZSBleHBsaWNpdCBleHRlbnNpb24KICAvLy8gYWNjZXNzLCB0aGF0IGlzLCBgYWAgaW4gYEV4dGVuc2lvbjxpbnQ+KGEpLm1ldGhvZDxTdHJpbmc+KClgLgogIGZpbmFsIEV4cHJlc3Npb24gcmVjZWl2ZXI7CgogIC8vLyBUaGUgdHlwZSBhcmd1bWVudHMgZXhwbGljaXRseSBwYXNzZWQgdG8gdGhlIGV4cGxpY2l0IGV4dGVuc2lvbiBhY2Nlc3MsCiAgLy8vIGxpa2UgYDxpbnQ+YCBpbiBgRXh0ZW5zaW9uPGludD4oYSkubWV0aG9kPFN0cmluZz4oKWAuCiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gZXhwbGljaXRUeXBlQXJndW1lbnRzOwoKICBmaW5hbCBpbnQgZXh0ZW5zaW9uVHlwZVBhcmFtZXRlckNvdW50OwoKICBFeHBsaWNpdEV4dGVuc2lvbkluc3RhbmNlQWNjZXNzR2VuZXJhdG9yKAogICAgICBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwKICAgICAgVG9rZW4gdG9rZW4sCiAgICAgIHRoaXMucmVhZFRhcmdldCwKICAgICAgdGhpcy5pbnZva2VUYXJnZXQsCiAgICAgIHRoaXMud3JpdGVUYXJnZXQsCiAgICAgIHRoaXMucmVjZWl2ZXIsCiAgICAgIHRoaXMuZXhwbGljaXRUeXBlQXJndW1lbnRzLAogICAgICB0aGlzLmV4dGVuc2lvblR5cGVQYXJhbWV0ZXJDb3VudCkKICAgICAgOiBhc3NlcnQocmVhZFRhcmdldCAhPSBudWxsIHx8IHdyaXRlVGFyZ2V0ICE9IG51bGwpLAogICAgICAgIGFzc2VydChyZWNlaXZlciAhPSBudWxsKSwKICAgICAgICBzdXBlcihoZWxwZXIsIHRva2VuKTsKCiAgZmFjdG9yeSBFeHBsaWNpdEV4dGVuc2lvbkluc3RhbmNlQWNjZXNzR2VuZXJhdG9yLmZyb21CdWlsZGVyKAogICAgICBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwKICAgICAgVG9rZW4gdG9rZW4sCiAgICAgIEJ1aWxkZXIgZ2V0dGVyQnVpbGRlciwKICAgICAgQnVpbGRlciBzZXR0ZXJCdWlsZGVyLAogICAgICBFeHByZXNzaW9uIHJlY2VpdmVyLAogICAgICBMaXN0PERhcnRUeXBlPiBleHBsaWNpdFR5cGVBcmd1bWVudHMsCiAgICAgIGludCBleHRlbnNpb25UeXBlUGFyYW1ldGVyQ291bnQpIHsKICAgIFByb2NlZHVyZSByZWFkVGFyZ2V0OwogICAgUHJvY2VkdXJlIGludm9rZVRhcmdldDsKICAgIGlmIChnZXR0ZXJCdWlsZGVyICE9IG51bGwpIHsKICAgICAgaWYgKGdldHRlckJ1aWxkZXIgaXMgQWNjZXNzRXJyb3JCdWlsZGVyKSB7CiAgICAgICAgQWNjZXNzRXJyb3JCdWlsZGVyIGVycm9yID0gZ2V0dGVyQnVpbGRlcjsKICAgICAgICBnZXR0ZXJCdWlsZGVyID0gZXJyb3IuYnVpbGRlcjsKICAgICAgICAvLyBXZSBzaG91bGQgb25seSBzZWUgYW4gYWNjZXNzIGVycm9yIGhlcmUgaWYgd2UndmUgbG9va2VkIHVwIGEgc2V0dGVyCiAgICAgICAgLy8gd2hlbiBub3QgZXhwbGljaXRseSBsb29raW5nIGZvciBhIHNldHRlci4KICAgICAgICBhc3NlcnQoZ2V0dGVyQnVpbGRlci5pc1NldHRlcik7CiAgICAgIH0gZWxzZSBpZiAoZ2V0dGVyQnVpbGRlci5pc0dldHRlcikgewogICAgICAgIHJlYWRUYXJnZXQgPSBnZXR0ZXJCdWlsZGVyLnRhcmdldDsKICAgICAgfSBlbHNlIGlmIChnZXR0ZXJCdWlsZGVyLmlzUmVndWxhck1ldGhvZCkgewogICAgICAgIFByb2NlZHVyZUJ1aWxkZXIgcHJvY2VkdXJlQnVpbGRlciA9IGdldHRlckJ1aWxkZXI7CiAgICAgICAgcmVhZFRhcmdldCA9IHByb2NlZHVyZUJ1aWxkZXIuZXh0ZW5zaW9uVGVhck9mZjsKICAgICAgICBpbnZva2VUYXJnZXQgPSBwcm9jZWR1cmVCdWlsZGVyLnByb2NlZHVyZTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gdW5oYW5kbGVkKAogICAgICAgICAgICAiJHtnZXR0ZXJCdWlsZGVyLnJ1bnRpbWVUeXBlfSIsCiAgICAgICAgICAgICJJbnN0YW5jZUV4dGVuc2lvbkFjY2Vzc0dlbmVyYXRvci5mcm9tQnVpbGRlciIsCiAgICAgICAgICAgIG9mZnNldEZvclRva2VuKHRva2VuKSwKICAgICAgICAgICAgaGVscGVyLnVyaSk7CiAgICAgIH0KICAgIH0KICAgIFByb2NlZHVyZSB3cml0ZVRhcmdldDsKICAgIGlmIChzZXR0ZXJCdWlsZGVyICE9IG51bGwgJiYgc2V0dGVyQnVpbGRlci5pc1NldHRlcikgewogICAgICB3cml0ZVRhcmdldCA9IHNldHRlckJ1aWxkZXIudGFyZ2V0OwogICAgfQogICAgcmV0dXJuIG5ldyBFeHBsaWNpdEV4dGVuc2lvbkluc3RhbmNlQWNjZXNzR2VuZXJhdG9yKAogICAgICAgIGhlbHBlciwKICAgICAgICB0b2tlbiwKICAgICAgICByZWFkVGFyZ2V0LAogICAgICAgIGludm9rZVRhcmdldCwKICAgICAgICB3cml0ZVRhcmdldCwKICAgICAgICByZWNlaXZlciwKICAgICAgICBleHBsaWNpdFR5cGVBcmd1bWVudHMsCiAgICAgICAgZXh0ZW5zaW9uVHlwZVBhcmFtZXRlckNvdW50KTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2RlYnVnTmFtZSA9PiAiSW5zdGFuY2VFeHRlbnNpb25BY2Nlc3NHZW5lcmF0b3IiOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9wbGFpbk5hbWVGb3JSZWFkID0+IChyZWFkVGFyZ2V0ID8/IHdyaXRlVGFyZ2V0KS5uYW1lLm5hbWU7CgogIExpc3Q8RGFydFR5cGU+IF9jcmVhdGVFeHRlbnNpb25UeXBlQXJndW1lbnRzKCkgewogICAgcmV0dXJuIGV4cGxpY2l0VHlwZUFyZ3VtZW50cyA/PyBjb25zdCA8RGFydFR5cGU+W107CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlUmVhZChDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICBFeHByZXNzaW9uIHJlYWQ7CiAgICBpZiAocmVhZFRhcmdldCA9PSBudWxsKSB7CiAgICAgIHJlYWQgPSBfbWFrZUludmFsaWRSZWFkKCk7CiAgICAgIGlmIChjb21wbGV4QXNzaWdubWVudCAhPSBudWxsKSB7CiAgICAgICAgcmVhZCA9IF9oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24ocmVhZCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJlYWQgPSBfaGVscGVyLmJ1aWxkRXh0ZW5zaW9uTWV0aG9kSW52b2NhdGlvbigKICAgICAgICAgIGZpbGVPZmZzZXQsCiAgICAgICAgICByZWFkVGFyZ2V0LAogICAgICAgICAgX2hlbHBlci5mb3Jlc3QuY3JlYXRlQXJndW1lbnRzRm9yRXh0ZW5zaW9uTWV0aG9kKAogICAgICAgICAgICAgIGZpbGVPZmZzZXQsIGV4dGVuc2lvblR5cGVQYXJhbWV0ZXJDb3VudCwgMCwgcmVjZWl2ZXIsCiAgICAgICAgICAgICAgZXh0ZW5zaW9uVHlwZUFyZ3VtZW50czogX2NyZWF0ZUV4dGVuc2lvblR5cGVBcmd1bWVudHMoKSkpOwogICAgfQogICAgY29tcGxleEFzc2lnbm1lbnQ/LnJlYWQgPSByZWFkOwogICAgcmV0dXJuIHJlYWQ7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlV3JpdGUoRXhwcmVzc2lvbiB2YWx1ZSwgYm9vbCB2b2lkQ29udGV4dCwKICAgICAgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgRXhwcmVzc2lvbiB3cml0ZTsKICAgIGlmICh3cml0ZVRhcmdldCA9PSBudWxsKSB7CiAgICAgIHdyaXRlID0gX21ha2VJbnZhbGlkV3JpdGUodmFsdWUpOwogICAgICBpZiAoY29tcGxleEFzc2lnbm1lbnQgIT0gbnVsbCkgewogICAgICAgIHdyaXRlID0gX2hlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbih3cml0ZSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlID0gX2hlbHBlci5idWlsZEV4dGVuc2lvbk1ldGhvZEludm9jYXRpb24oCiAgICAgICAgICBmaWxlT2Zmc2V0LAogICAgICAgICAgd3JpdGVUYXJnZXQsCiAgICAgICAgICBfaGVscGVyLmZvcmVzdC5jcmVhdGVBcmd1bWVudHNGb3JFeHRlbnNpb25NZXRob2QoCiAgICAgICAgICAgICAgZmlsZU9mZnNldCwgZXh0ZW5zaW9uVHlwZVBhcmFtZXRlckNvdW50LCAwLCByZWNlaXZlciwKICAgICAgICAgICAgICBleHRlbnNpb25UeXBlQXJndW1lbnRzOiBfY3JlYXRlRXh0ZW5zaW9uVHlwZUFyZ3VtZW50cygpLAogICAgICAgICAgICAgIHBvc2l0aW9uYWxBcmd1bWVudHM6IFt2YWx1ZV0pKTsKICAgIH0KICAgIGNvbXBsZXhBc3NpZ25tZW50Py53cml0ZSA9IHdyaXRlOwogICAgd3JpdGUuZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICByZXR1cm4gd3JpdGU7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGRvSW52b2NhdGlvbihpbnQgb2Zmc2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICBpZiAoaW52b2tlVGFyZ2V0ICE9IG51bGwpIHsKICAgICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRFeHRlbnNpb25NZXRob2RJbnZvY2F0aW9uKAogICAgICAgICAgZmlsZU9mZnNldCwKICAgICAgICAgIGludm9rZVRhcmdldCwKICAgICAgICAgIF9mb3Jlc3QuY3JlYXRlQXJndW1lbnRzRm9yRXh0ZW5zaW9uTWV0aG9kKAogICAgICAgICAgICAgIGZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgZXh0ZW5zaW9uVHlwZVBhcmFtZXRlckNvdW50LAogICAgICAgICAgICAgIGludm9rZVRhcmdldC5mdW5jdGlvbi50eXBlUGFyYW1ldGVycy5sZW5ndGggLQogICAgICAgICAgICAgICAgICBleHRlbnNpb25UeXBlUGFyYW1ldGVyQ291bnQsCiAgICAgICAgICAgICAgcmVjZWl2ZXIsCiAgICAgICAgICAgICAgZXh0ZW5zaW9uVHlwZUFyZ3VtZW50czogX2NyZWF0ZUV4dGVuc2lvblR5cGVBcmd1bWVudHMoKSwKICAgICAgICAgICAgICB0eXBlQXJndW1lbnRzOiBhcmd1bWVudHMudHlwZXMsCiAgICAgICAgICAgICAgcG9zaXRpb25hbEFyZ3VtZW50czogYXJndW1lbnRzLnBvc2l0aW9uYWwsCiAgICAgICAgICAgICAgbmFtZWRBcmd1bWVudHM6IGFyZ3VtZW50cy5uYW1lZCkpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRNZXRob2RJbnZvY2F0aW9uKGJ1aWxkU2ltcGxlUmVhZCgpLCBjYWxsTmFtZSwKICAgICAgICAgIGFyZ3VtZW50cywgYWRqdXN0Rm9ySW1wbGljaXRDYWxsKF9wbGFpbk5hbWVGb3JSZWFkLCBvZmZzZXQpLAogICAgICAgICAgaXNJbXBsaWNpdENhbGw6IHRydWUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBzdGFydENvbXBsZXhBc3NpZ25tZW50KEV4cHJlc3Npb24gcmhzKSA9PgogICAgICBTeW50aGV0aWNXcmFwcGVyLndyYXBTdGF0aWNBc3NpZ25tZW50KHJocyk7CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIE5hbWVTeXN0ZW0gc3ludGhldGljTmFtZXMgPSBuZXcgTmFtZVN5c3RlbSgpOwogICAgc2luay53cml0ZSgiLCByZWFkVGFyZ2V0OiAiKTsKICAgIHByaW50UXVhbGlmaWVkTmFtZU9uKHJlYWRUYXJnZXQsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIHdyaXRlVGFyZ2V0OiAiKTsKICAgIHByaW50UXVhbGlmaWVkTmFtZU9uKHdyaXRlVGFyZ2V0LCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogIH0KfQoKLy8vIEEgW0V4cGxpY2l0RXh0ZW5zaW9uQWNjZXNzR2VuZXJhdG9yXSByZXByZXNlbnRzIGEgc3ViZXhwcmVzc2lvbiB3aG9zZQovLy8gcHJlZml4IGlzIGEgZm9yY2VkIGV4dGVuc2lvbiByZXNvbHV0aW9uLgovLy8KLy8vIEZvciBpbnN0YW5jZQovLy8KLy8vICAgY2xhc3MgQTxUPiB7fQovLy8gICBleHRlbnNpb24gQiBvbiBBPGludD4gewovLy8gICAgIG1ldGhvZCgpIHt9Ci8vLyAgIH0KLy8vICAgZXh0ZW5zaW9uIEM8VD4gb24gQTxUPiB7Ci8vLyAgICAgVCBnZXQgZmllbGQgPT4gMDsKLy8vICAgICBzZXQgZmllbGQoVCBfKSB7fQovLy8gICB9Ci8vLwovLy8gICBtZXRob2QoQSBhKSB7Ci8vLyAgICAgQihhKS5tZXRob2Q7ICAgICAvLyB0aGlzIGdlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgQihhKWAuCi8vLyAgICAgQihhKS5tZXRob2QoKTsgICAvLyB0aGlzIGdlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgQihhKWAuCi8vLyAgICAgQzxpbnQ+KGEpLmZpZWxkOyAvLyB0aGlzIGdlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgQzxpbnQ+KGEpYC4KLy8vICAgICBDKGEpLmZpZWxkID0gMDsgIC8vIHRoaXMgZ2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBDKGEpYC4KLy8vICAgfQovLy8KLy8vIFdoZW4gYW4gYWNjZXNzIGlzIHBlcmZvcm1lZCBvbiB0aGlzIGdlbmVyYXRvciBhCi8vLyBbRXhwbGljaXRFeHRlbnNpb25JbnN0YW5jZUFjY2Vzc0dlbmVyYXRvcl0gaXMgY3JlYXRlZC4KY2xhc3MgRXhwbGljaXRFeHRlbnNpb25BY2Nlc3NHZW5lcmF0b3IgZXh0ZW5kcyBHZW5lcmF0b3IgewogIGZpbmFsIEV4dGVuc2lvbkJ1aWxkZXIgZXh0ZW5zaW9uQnVpbGRlcjsKICBmaW5hbCBFeHByZXNzaW9uIHJlY2VpdmVyOwogIGZpbmFsIExpc3Q8RGFydFR5cGU+IGV4cGxpY2l0VHlwZUFyZ3VtZW50czsKCiAgRXhwbGljaXRFeHRlbnNpb25BY2Nlc3NHZW5lcmF0b3IoCiAgICAgIEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLAogICAgICBUb2tlbiB0b2tlbiwKICAgICAgdGhpcy5leHRlbnNpb25CdWlsZGVyLAogICAgICB0aGlzLnJlY2VpdmVyLAogICAgICB0aGlzLmV4cGxpY2l0VHlwZUFyZ3VtZW50cykKICAgICAgOiBzdXBlcihoZWxwZXIsIHRva2VuKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfcGxhaW5OYW1lRm9yUmVhZCB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoCiAgICAgICAgIkV4cGxpY2l0RXh0ZW5zaW9uQWNjZXNzR2VuZXJhdG9yLnBsYWluTmFtZUZvclJlYWQiLCBmaWxlT2Zmc2V0LCBfdXJpKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2RlYnVnTmFtZSA9PiAiRXhwbGljaXRFeHRlbnNpb25BY2Nlc3NHZW5lcmF0b3IiOwoKICAvKiBFeHByZXNzaW9uIHwgR2VuZXJhdG9yICovIGJ1aWxkUHJvcGVydHlBY2Nlc3MoCiAgICAgIEluY29tcGxldGVTZW5kR2VuZXJhdG9yIHNlbmQsIGludCBvcGVyYXRvck9mZnNldCwgYm9vbCBpc051bGxBd2FyZSkgewogICAgaWYgKF9oZWxwZXIuY29uc3RhbnRDb250ZXh0ICE9IENvbnN0YW50Q29udGV4dC5ub25lKSB7CiAgICAgIF9oZWxwZXIuYWRkUHJvYmxlbSgKICAgICAgICAgIG1lc3NhZ2VOb3RBQ29uc3RhbnRFeHByZXNzaW9uLCBmaWxlT2Zmc2V0LCB0b2tlbi5sZW5ndGgpOwogICAgfQogICAgQnVpbGRlciBnZXR0ZXIgPSBleHRlbnNpb25CdWlsZGVyLmxvb2t1cExvY2FsTWVtYmVyKHNlbmQubmFtZS5uYW1lKTsKICAgIEJ1aWxkZXIgc2V0dGVyID0KICAgICAgICBleHRlbnNpb25CdWlsZGVyLmxvb2t1cExvY2FsTWVtYmVyKHNlbmQubmFtZS5uYW1lLCBzZXR0ZXI6IHRydWUpOwogICAgaWYgKGdldHRlciA9PSBudWxsICYmIHNldHRlciA9PSBudWxsKSB7CiAgICAgIHJldHVybiBuZXcgVW5yZXNvbHZlZE5hbWVHZW5lcmF0b3IoX2hlbHBlciwgdG9rZW4sIHNlbmQubmFtZSk7CiAgICB9CiAgICBHZW5lcmF0b3IgZ2VuZXJhdG9yID0KICAgICAgICBuZXcgRXhwbGljaXRFeHRlbnNpb25JbnN0YW5jZUFjY2Vzc0dlbmVyYXRvci5mcm9tQnVpbGRlcigKICAgICAgICAgICAgX2hlbHBlciwKICAgICAgICAgICAgdG9rZW4sCiAgICAgICAgICAgIGdldHRlciwKICAgICAgICAgICAgc2V0dGVyLAogICAgICAgICAgICByZWNlaXZlciwKICAgICAgICAgICAgZXhwbGljaXRUeXBlQXJndW1lbnRzLAogICAgICAgICAgICBleHRlbnNpb25CdWlsZGVyLnR5cGVQYXJhbWV0ZXJzPy5sZW5ndGggPz8gMCk7CiAgICBpZiAoc2VuZC5hcmd1bWVudHMgIT0gbnVsbCkgewogICAgICByZXR1cm4gZ2VuZXJhdG9yLmRvSW52b2NhdGlvbihvZmZzZXRGb3JUb2tlbihzZW5kLnRva2VuKSwgc2VuZC5hcmd1bWVudHMpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGdlbmVyYXRvcjsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGRvSW52b2NhdGlvbihpbnQgb2Zmc2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gdW5pbXBsZW1lbnRlZCgKICAgICAgICAiRXhwbGljaXRFeHRlbnNpb25BY2Nlc3NHZW5lcmF0b3IuZG9JbnZvY2F0aW9uIiwgZmlsZU9mZnNldCwgX3VyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlKCIsIGV4dGVuc2lvbkJ1aWxkZXI6ICIpOwogICAgc2luay53cml0ZShleHRlbnNpb25CdWlsZGVyKTsKICAgIHNpbmsud3JpdGUoIiwgcmVjZWl2ZXI6ICIpOwogICAgc2luay53cml0ZShyZWNlaXZlcik7CiAgfQp9CgpjbGFzcyBMb2FkTGlicmFyeUdlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvciB7CiAgZmluYWwgTG9hZExpYnJhcnlCdWlsZGVyIGJ1aWxkZXI7CgogIExvYWRMaWJyYXJ5R2VuZXJhdG9yKAogICAgICBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4sIHRoaXMuYnVpbGRlcikKICAgICAgOiBzdXBlcihoZWxwZXIsIHRva2VuKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfcGxhaW5OYW1lRm9yUmVhZCA9PiAnbG9hZExpYnJhcnknOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIkxvYWRMaWJyYXJ5R2VuZXJhdG9yIjsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVJlYWQoQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgYnVpbGRlci5pbXBvcnREZXBlbmRlbmN5LnRhcmdldExpYnJhcnk7CiAgICBMb2FkTGlicmFyeVRlYXJPZmZKdWRnbWVudCByZWFkID0gbmV3IExvYWRMaWJyYXJ5VGVhck9mZkp1ZGdtZW50KAogICAgICAgIGJ1aWxkZXIuaW1wb3J0RGVwZW5kZW5jeSwgYnVpbGRlci5jcmVhdGVUZWFyb2ZmTWV0aG9kKF9oZWxwZXIuZm9yZXN0KSkKICAgICAgLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py5yZWFkID0gcmVhZDsKICAgIHJldHVybiByZWFkOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBkb0ludm9jYXRpb24oaW50IG9mZnNldCwgQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgaWYgKF9mb3Jlc3QuYXJndW1lbnRzUG9zaXRpb25hbChhcmd1bWVudHMpLmxlbmd0aCA+IDAgfHwKICAgICAgICBfZm9yZXN0LmFyZ3VtZW50c05hbWVkKGFyZ3VtZW50cykubGVuZ3RoID4gMCkgewogICAgICBfaGVscGVyLmFkZFByb2JsZW1FcnJvcklmQ29uc3QoCiAgICAgICAgICBtZXNzYWdlTG9hZExpYnJhcnlUYWtlc05vQXJndW1lbnRzLCBvZmZzZXQsICdsb2FkTGlicmFyeScubGVuZ3RoKTsKICAgIH0KICAgIHJldHVybiBidWlsZGVyLmNyZWF0ZUxvYWRMaWJyYXJ5KG9mZnNldCwgX2ZvcmVzdCwgYXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGUoIiwgYnVpbGRlcjogIik7CiAgICBzaW5rLndyaXRlKGJ1aWxkZXIpOwogIH0KfQoKY2xhc3MgRGVmZXJyZWRBY2Nlc3NHZW5lcmF0b3IgZXh0ZW5kcyBHZW5lcmF0b3IgewogIGZpbmFsIFByZWZpeFVzZUdlbmVyYXRvciBwcmVmaXhHZW5lcmF0b3I7CgogIGZpbmFsIEdlbmVyYXRvciBzdWZmaXhHZW5lcmF0b3I7CgogIERlZmVycmVkQWNjZXNzR2VuZXJhdG9yKEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwKICAgICAgdGhpcy5wcmVmaXhHZW5lcmF0b3IsIHRoaXMuc3VmZml4R2VuZXJhdG9yKQogICAgICA6IHN1cGVyKGhlbHBlciwgdG9rZW4pOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlU2ltcGxlUmVhZCgpIHsKICAgIHJldHVybiBfaGVscGVyLndyYXBJbkRlZmVycmVkQ2hlY2soc3VmZml4R2VuZXJhdG9yLl9tYWtlU2ltcGxlUmVhZCgpLAogICAgICAgIHByZWZpeEdlbmVyYXRvci5wcmVmaXgsIHRva2VuLmNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVJlYWQoQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgcmV0dXJuIF9oZWxwZXIud3JhcEluRGVmZXJyZWRDaGVjaygKICAgICAgICBzdWZmaXhHZW5lcmF0b3IuX21ha2VSZWFkKGNvbXBsZXhBc3NpZ25tZW50KSwKICAgICAgICBwcmVmaXhHZW5lcmF0b3IucHJlZml4LAogICAgICAgIHRva2VuLmNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVdyaXRlKEV4cHJlc3Npb24gdmFsdWUsIGJvb2wgdm9pZENvbnRleHQsCiAgICAgIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIHJldHVybiBfaGVscGVyLndyYXBJbkRlZmVycmVkQ2hlY2soCiAgICAgICAgc3VmZml4R2VuZXJhdG9yLl9tYWtlV3JpdGUodmFsdWUsIHZvaWRDb250ZXh0LCBjb21wbGV4QXNzaWdubWVudCksCiAgICAgICAgcHJlZml4R2VuZXJhdG9yLnByZWZpeCwKICAgICAgICB0b2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgc3RhcnRDb21wbGV4QXNzaWdubWVudChFeHByZXNzaW9uIHJocykgPT4KICAgICAgU3ludGhldGljV3JhcHBlci53cmFwU3RhdGljQXNzaWdubWVudChyaHMpOwoKICBAb3ZlcnJpZGUKICBidWlsZFByb3BlcnR5QWNjZXNzKAogICAgICBJbmNvbXBsZXRlU2VuZEdlbmVyYXRvciBzZW5kLCBpbnQgb3BlcmF0b3JPZmZzZXQsIGJvb2wgaXNOdWxsQXdhcmUpIHsKICAgIE9iamVjdCBwcm9wZXJ0eUFjY2VzcyA9CiAgICAgICAgc3VmZml4R2VuZXJhdG9yLmJ1aWxkUHJvcGVydHlBY2Nlc3Moc2VuZCwgb3BlcmF0b3JPZmZzZXQsIGlzTnVsbEF3YXJlKTsKICAgIGlmIChwcm9wZXJ0eUFjY2VzcyBpcyBHZW5lcmF0b3IpIHsKICAgICAgcmV0dXJuIG5ldyBEZWZlcnJlZEFjY2Vzc0dlbmVyYXRvcigKICAgICAgICAgIF9oZWxwZXIsIHRva2VuLCBwcmVmaXhHZW5lcmF0b3IsIHByb3BlcnR5QWNjZXNzKTsKICAgIH0gZWxzZSB7CiAgICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHByb3BlcnR5QWNjZXNzOwogICAgICByZXR1cm4gX2hlbHBlci53cmFwSW5EZWZlcnJlZENoZWNrKAogICAgICAgICAgZXhwcmVzc2lvbiwgcHJlZml4R2VuZXJhdG9yLnByZWZpeCwgdG9rZW4uY2hhck9mZnNldCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9wbGFpbk5hbWVGb3JSZWFkIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgiZGVmZXJyZWRBY2Nlc3Nvci5wbGFpbk5hbWVGb3JSZWFkIiwgZmlsZU9mZnNldCwgX3VyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIkRlZmVycmVkQWNjZXNzR2VuZXJhdG9yIjsKCiAgQG92ZXJyaWRlCiAgVHlwZUJ1aWxkZXIgYnVpbGRUeXBlV2l0aFJlc29sdmVkQXJndW1lbnRzKExpc3Q8VW5yZXNvbHZlZFR5cGU+IGFyZ3VtZW50cykgewogICAgU3RyaW5nIG5hbWUgPSAiJHtwcmVmaXhHZW5lcmF0b3IuX3BsYWluTmFtZUZvclJlYWR9LiIKICAgICAgICAiJHtzdWZmaXhHZW5lcmF0b3IuX3BsYWluTmFtZUZvclJlYWR9IjsKICAgIFR5cGVCdWlsZGVyIHR5cGUgPQogICAgICAgIHN1ZmZpeEdlbmVyYXRvci5idWlsZFR5cGVXaXRoUmVzb2x2ZWRBcmd1bWVudHMoYXJndW1lbnRzKTsKICAgIExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2U7CiAgICBpZiAodHlwZSBpcyBOYW1lZFR5cGVCdWlsZGVyICYmIHR5cGUuZGVjbGFyYXRpb24gaXMgSW52YWxpZFR5cGVCdWlsZGVyKSB7CiAgICAgIEludmFsaWRUeXBlQnVpbGRlciBkZWNsYXJhdGlvbiA9IHR5cGUuZGVjbGFyYXRpb247CiAgICAgIG1lc3NhZ2UgPSBkZWNsYXJhdGlvbi5tZXNzYWdlOwogICAgfSBlbHNlIHsKICAgICAgaW50IGNoYXJPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbihwcmVmaXhHZW5lcmF0b3IudG9rZW4pOwogICAgICBtZXNzYWdlID0gdGVtcGxhdGVEZWZlcnJlZFR5cGVBbm5vdGF0aW9uCiAgICAgICAgICAud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICBfaGVscGVyLmJ1aWxkRGFydFR5cGUobmV3IFVucmVzb2x2ZWRUeXBlKHR5cGUsIGNoYXJPZmZzZXQsIF91cmkpKSwKICAgICAgICAgICAgICBwcmVmaXhHZW5lcmF0b3IuX3BsYWluTmFtZUZvclJlYWQpCiAgICAgICAgICAud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgIF91cmksIGNoYXJPZmZzZXQsIGxlbmd0aE9mU3BhbihwcmVmaXhHZW5lcmF0b3IudG9rZW4sIHRva2VuKSk7CiAgICB9CiAgICBOYW1lZFR5cGVCdWlsZGVyIHJlc3VsdCA9IG5ldyBOYW1lZFR5cGVCdWlsZGVyKG5hbWUsIG51bGwpOwogICAgX2hlbHBlci5saWJyYXJ5QnVpbGRlci5hZGRQcm9ibGVtKAogICAgICAgIG1lc3NhZ2UubWVzc2FnZU9iamVjdCwgbWVzc2FnZS5jaGFyT2Zmc2V0LCBtZXNzYWdlLmxlbmd0aCwgbWVzc2FnZS51cmkpOwogICAgcmVzdWx0LmJpbmQocmVzdWx0LmJ1aWxkSW52YWxpZFR5cGUobWVzc2FnZSkpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBfaGVscGVyLndyYXBJbkRlZmVycmVkQ2hlY2soCiAgICAgICAgc3VmZml4R2VuZXJhdG9yLmRvSW52b2NhdGlvbihvZmZzZXQsIGFyZ3VtZW50cyksCiAgICAgICAgcHJlZml4R2VuZXJhdG9yLnByZWZpeCwKICAgICAgICB0b2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gaW52b2tlQ29uc3RydWN0b3IoCiAgICAgIExpc3Q8VW5yZXNvbHZlZFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBBcmd1bWVudHMgYXJndW1lbnRzLAogICAgICBUb2tlbiBuYW1lVG9rZW4sCiAgICAgIFRva2VuIG5hbWVMYXN0VG9rZW4sCiAgICAgIENvbnN0bmVzcyBjb25zdG5lc3MpIHsKICAgIHJldHVybiBfaGVscGVyLndyYXBJbkRlZmVycmVkQ2hlY2soCiAgICAgICAgc3VmZml4R2VuZXJhdG9yLmludm9rZUNvbnN0cnVjdG9yKHR5cGVBcmd1bWVudHMsIG5hbWUsIGFyZ3VtZW50cywKICAgICAgICAgICAgbmFtZVRva2VuLCBuYW1lTGFzdFRva2VuLCBjb25zdG5lc3MpLAogICAgICAgIHByZWZpeEdlbmVyYXRvci5wcmVmaXgsCiAgICAgICAgb2Zmc2V0Rm9yVG9rZW4oc3VmZml4R2VuZXJhdG9yLnRva2VuKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlKCIsIHByZWZpeEdlbmVyYXRvcjogIik7CiAgICBzaW5rLndyaXRlKHByZWZpeEdlbmVyYXRvcik7CiAgICBzaW5rLndyaXRlKCIsIHN1ZmZpeEdlbmVyYXRvcjogIik7CiAgICBzaW5rLndyaXRlKHN1ZmZpeEdlbmVyYXRvcik7CiAgfQp9CgovLy8gW1R5cGVVc2VHZW5lcmF0b3JdIHJlcHJlc2VudHMgdGhlIHN1YmV4cHJlc3Npb24gd2hvc2UgcHJlZml4IGlzIHRoZSBuYW1lIG9mCi8vLyBhIGNsYXNzLCBlbnVtLCB0eXBlIHZhcmlhYmxlLCB0eXBlZGVmLCBtaXhpbiBkZWNsYXJhdGlvbiwgZXh0ZW5zaW9uCi8vLyBkZWNsYXJhdGlvbiBvciBidWlsdC1pbiB0eXBlLCBsaWtlIGR5bmFtaWMgYW5kIHZvaWQuCi8vLwovLy8gRm9yIGluc3RhbmNlOgovLy8KLy8vICAgY2xhc3MgQTxUPiB7fQovLy8gICB0eXBlZGVmIEIgPSBGdW5jdGlvbigpOwovLy8gICBtaXhpbiBDPFQ+IG9uIEE8VD4ge30KLy8vICAgZXh0ZW5zaW9uIEQ8VD4gb24gQTxUPiB7fQovLy8KLy8vICAgbWV0aG9kPFQ+KCkgewovLy8gICAgIEM8Qj4gICAgICAgIC8vIGEgVHlwZVVzZUdlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgQ2AgYW5kIGBCYC4KLy8vICAgICBCIGI7ICAgICAgICAvLyBhIFR5cGVVc2VHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYEJgLgovLy8gICAgIEQuZm9vKCk7ICAgIC8vIGEgVHlwZVVzZUdlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgRGAuCi8vLyAgICAgbmV3IEE8VD4oKTsgLy8gYSBUeXBlVXNlR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBBYCBhbmQgYFRgLgovLy8gICAgIFQoKTsgICAgICAgIC8vIGEgVHlwZVVzZUdlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgVGAuCi8vLyAgIH0KLy8vCmNsYXNzIFR5cGVVc2VHZW5lcmF0b3IgZXh0ZW5kcyBSZWFkT25seUFjY2Vzc0dlbmVyYXRvciB7CiAgZmluYWwgVHlwZURlY2xhcmF0aW9uQnVpbGRlciBkZWNsYXJhdGlvbjsKCiAgVHlwZVVzZUdlbmVyYXRvcihFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4sCiAgICAgIHRoaXMuZGVjbGFyYXRpb24sIFN0cmluZyBwbGFpbk5hbWVGb3JSZWFkKQogICAgICA6IHN1cGVyKGhlbHBlciwgdG9rZW4sIG51bGwsIHBsYWluTmFtZUZvclJlYWQpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIlR5cGVVc2VHZW5lcmF0b3IiOwoKICBAb3ZlcnJpZGUKICBUeXBlQnVpbGRlciBidWlsZFR5cGVXaXRoUmVzb2x2ZWRBcmd1bWVudHMoTGlzdDxVbnJlc29sdmVkVHlwZT4gYXJndW1lbnRzKSB7CiAgICBpZiAoZGVjbGFyYXRpb24uaXNFeHRlbnNpb24pIHsKICAgICAgLy8gRXh0ZW5zaW9uIGRlY2xhcmF0aW9ucyBjYW5ub3QgYmUgdXNlZCBhcyB0eXBlcy4KICAgICAgcmV0dXJuIHN1cGVyLmJ1aWxkVHlwZVdpdGhSZXNvbHZlZEFyZ3VtZW50cyhhcmd1bWVudHMpOwogICAgfQogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGludCBleHBlY3RlZCA9IGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXNDb3VudDsKICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT0gZXhwZWN0ZWQpIHsKICAgICAgICAvLyBCdWlsZCB0aGUgdHlwZSBhcmd1bWVudHMgdG8gcmVwb3J0IGFueSBlcnJvcnMgdGhleSBtYXkgaGF2ZS4KICAgICAgICBfaGVscGVyLmJ1aWxkRGFydFR5cGVBcmd1bWVudHMoYXJndW1lbnRzKTsKICAgICAgICBfaGVscGVyLndhcm5UeXBlQXJndW1lbnRzTWlzbWF0Y2goCiAgICAgICAgICAgIGRlY2xhcmF0aW9uLm5hbWUsIGV4cGVjdGVkLCBmaWxlT2Zmc2V0KTsKICAgICAgICAvLyBXZSBpZ25vcmUgdGhlIHByb3ZpZGVkIGFyZ3VtZW50cywgd2hpY2ggd2lsbCBpbiB0dXJuIHJldHVybiB0aGUKICAgICAgICAvLyByYXcgdHlwZSBiZWxvdy4KICAgICAgICAvLyBUT0RPKHNpZ211bmQpOiBjaGFuZ2UgdG8gdXNlIGFuIEludmFsaWRUeXBlIGFuZCBpbmNsdWRlIHRoZSByYXcgdHlwZQogICAgICAgIC8vIGFzIGEgcmVjb3Zlcnkgbm9kZSBvbmNlIHRoZSBJUiBjYW4gcmVwcmVzZW50IGl0IChJc3N1ZSAjMjk4NDApLgogICAgICAgIGFyZ3VtZW50cyA9IG51bGw7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlc0NvdW50ICE9IDApIHsKICAgICAgX2hlbHBlci5hZGRQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVNaXNzaW5nRXhwbGljaXRUeXBlQXJndW1lbnRzCiAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlc0NvdW50KSwKICAgICAgICAgIGZpbGVPZmZzZXQsCiAgICAgICAgICBsZW5ndGhGb3JUb2tlbih0b2tlbikpOwogICAgfQoKICAgIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50QnVpbGRlcnM7CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgYXJndW1lbnRCdWlsZGVycyA9IG5ldyBMaXN0PFR5cGVCdWlsZGVyPihhcmd1bWVudHMubGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVudEJ1aWxkZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgYXJndW1lbnRCdWlsZGVyc1tpXSA9CiAgICAgICAgICAgIF9oZWxwZXIudmFsaWRhdGVUeXBlVXNlKGFyZ3VtZW50c1tpXSwgZmFsc2UpLmJ1aWxkZXI7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgTmFtZWRUeXBlQnVpbGRlcihfcGxhaW5OYW1lRm9yUmVhZCwgYXJndW1lbnRCdWlsZGVycykKICAgICAgLi5iaW5kKGRlY2xhcmF0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gaW52b2tlQ29uc3RydWN0b3IoCiAgICAgIExpc3Q8VW5yZXNvbHZlZFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBBcmd1bWVudHMgYXJndW1lbnRzLAogICAgICBUb2tlbiBuYW1lVG9rZW4sCiAgICAgIFRva2VuIG5hbWVMYXN0VG9rZW4sCiAgICAgIENvbnN0bmVzcyBjb25zdG5lc3MpIHsKICAgIHJldHVybiBfaGVscGVyLmJ1aWxkQ29uc3RydWN0b3JJbnZvY2F0aW9uKAogICAgICAgIGRlY2xhcmF0aW9uLAogICAgICAgIG5hbWVUb2tlbiwKICAgICAgICBuYW1lTGFzdFRva2VuLAogICAgICAgIGFyZ3VtZW50cywKICAgICAgICBuYW1lLAogICAgICAgIHR5cGVBcmd1bWVudHMsCiAgICAgICAgb2Zmc2V0Rm9yVG9rZW4obmFtZVRva2VuID8/IHRva2VuKSwKICAgICAgICBjb25zdG5lc3MpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBwcmludE9uKFN0cmluZ1Npbmsgc2luaykgewogICAgc2luay53cml0ZSgiLCBkZWNsYXJhdGlvbjogIik7CiAgICBzaW5rLndyaXRlKGRlY2xhcmF0aW9uKTsKICAgIHNpbmsud3JpdGUoIiwgcGxhaW5OYW1lRm9yUmVhZDogIik7CiAgICBzaW5rLndyaXRlKF9wbGFpbk5hbWVGb3JSZWFkKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZ2V0IGV4cHJlc3Npb24gewogICAgaWYgKHN1cGVyLmV4cHJlc3Npb24gPT0gbnVsbCkgewogICAgICBpZiAoZGVjbGFyYXRpb24gaXMgSW52YWxpZFR5cGVCdWlsZGVyKSB7CiAgICAgICAgSW52YWxpZFR5cGVCdWlsZGVyIGRlY2xhcmF0aW9uID0gdGhpcy5kZWNsYXJhdGlvbjsKICAgICAgICBfaGVscGVyLmFkZFByb2JsZW1FcnJvcklmQ29uc3QoCiAgICAgICAgICAgIGRlY2xhcmF0aW9uLm1lc3NhZ2UubWVzc2FnZU9iamVjdCwgZmlsZU9mZnNldCwgdG9rZW4ubGVuZ3RoKTsKICAgICAgICBzdXBlci5leHByZXNzaW9uID0gX2hlbHBlci53cmFwU3ludGhldGljRXhwcmVzc2lvbigKICAgICAgICAgICAgX2ZvcmVzdC5jcmVhdGVUaHJvdyhudWxsLAogICAgICAgICAgICAgICAgX2ZvcmVzdC5jcmVhdGVTdHJpbmdMaXRlcmFsKGRlY2xhcmF0aW9uLm1lc3NhZ2UubWVzc2FnZSwgdG9rZW4pKQogICAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQsCiAgICAgICAgICAgIGZpbGVPZmZzZXQpOwogICAgICB9IGVsc2UgewogICAgICAgIHN1cGVyLmV4cHJlc3Npb24gPSBfZm9yZXN0LmNyZWF0ZVR5cGVMaXRlcmFsKAogICAgICAgICAgICBfaGVscGVyLmJ1aWxkRGFydFR5cGUoCiAgICAgICAgICAgICAgICBuZXcgVW5yZXNvbHZlZFR5cGUoCiAgICAgICAgICAgICAgICAgICAgYnVpbGRUeXBlV2l0aFJlc29sdmVkQXJndW1lbnRzKG51bGwpLCBmaWxlT2Zmc2V0LCBfdXJpKSwKICAgICAgICAgICAgICAgIG5vbkluc3RhbmNlQWNjZXNzSXNFcnJvcjogdHJ1ZSksCiAgICAgICAgICAgIHRva2VuKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHN1cGVyLmV4cHJlc3Npb247CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlSW52YWxpZFdyaXRlKEV4cHJlc3Npb24gdmFsdWUpIHsKICAgIHJldHVybiBfaGVscGVyLndyYXBTeW50aGV0aWNFeHByZXNzaW9uKAogICAgICAgIF9oZWxwZXIudGhyb3dOb1N1Y2hNZXRob2RFcnJvcigKICAgICAgICAgICAgX2ZvcmVzdC5jcmVhdGVOdWxsTGl0ZXJhbChmaWxlT2Zmc2V0KSwKICAgICAgICAgICAgX3BsYWluTmFtZUZvclJlYWQsCiAgICAgICAgICAgIF9mb3Jlc3QuY3JlYXRlQXJndW1lbnRzKGZpbGVPZmZzZXQsIDxFeHByZXNzaW9uPlt2YWx1ZV0pLAogICAgICAgICAgICBmaWxlT2Zmc2V0LAogICAgICAgICAgICBpc1NldHRlcjogdHJ1ZSksCiAgICAgICAgZmlsZU9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBidWlsZFByb3BlcnR5QWNjZXNzKAogICAgICBJbmNvbXBsZXRlU2VuZEdlbmVyYXRvciBzZW5kLCBpbnQgb3BlcmF0b3JPZmZzZXQsIGJvb2wgaXNOdWxsQXdhcmUpIHsKICAgIC8vIGBTb21lVHlwZT8udG9TdHJpbmdgIGlzIHRoZSBzYW1lIGFzIGBTb21lVHlwZS50b1N0cmluZ2AsIG5vdAogICAgLy8gYChTb21lVHlwZSkudG9TdHJpbmdgLgogICAgaXNOdWxsQXdhcmUgPSBmYWxzZTsKCiAgICBOYW1lIG5hbWUgPSBzZW5kLm5hbWU7CiAgICBBcmd1bWVudHMgYXJndW1lbnRzID0gc2VuZC5hcmd1bWVudHM7CgogICAgaWYgKGRlY2xhcmF0aW9uIGlzIERlY2xhcmF0aW9uQnVpbGRlcikgewogICAgICBEZWNsYXJhdGlvbkJ1aWxkZXIgZGVjbGFyYXRpb24gPSB0aGlzLmRlY2xhcmF0aW9uOwogICAgICBCdWlsZGVyIG1lbWJlciA9IGRlY2xhcmF0aW9uLmZpbmRTdGF0aWNCdWlsZGVyKAogICAgICAgICAgbmFtZS5uYW1lLCBvZmZzZXRGb3JUb2tlbihzZW5kLnRva2VuKSwgX3VyaSwgX2hlbHBlci5saWJyYXJ5QnVpbGRlcik7CgogICAgICBHZW5lcmF0b3IgZ2VuZXJhdG9yOwogICAgICBpZiAobWVtYmVyID09IG51bGwpIHsKICAgICAgICAvLyBJZiB3ZSBmaW5kIGEgc2V0dGVyLCBbbWVtYmVyXSBpcyBhbiBbQWNjZXNzRXJyb3JCdWlsZGVyXSwgbm90IG51bGwuCiAgICAgICAgaWYgKHNlbmQgaXMgSW5jb21wbGV0ZVByb3BlcnR5QWNjZXNzR2VuZXJhdG9yKSB7CiAgICAgICAgICBnZW5lcmF0b3IgPSBuZXcgVW5yZXNvbHZlZE5hbWVHZW5lcmF0b3IoX2hlbHBlciwgc2VuZC50b2tlbiwgbmFtZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBfaGVscGVyLmJ1aWxkQ29uc3RydWN0b3JJbnZvY2F0aW9uKAogICAgICAgICAgICAgIGRlY2xhcmF0aW9uLAogICAgICAgICAgICAgIHNlbmQudG9rZW4sCiAgICAgICAgICAgICAgc2VuZC50b2tlbiwKICAgICAgICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgICAgICAgbmFtZS5uYW1lLAogICAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgICAgdG9rZW4uY2hhck9mZnNldCwKICAgICAgICAgICAgICBDb25zdG5lc3MuaW1wbGljaXQpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChtZW1iZXIgaXMgQW1iaWd1b3VzQnVpbGRlcikgewogICAgICAgIHJldHVybiBfaGVscGVyLmJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgbWVtYmVyLm1lc3NhZ2UsIG1lbWJlci5jaGFyT2Zmc2V0LCBuYW1lLm5hbWUubGVuZ3RoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBCdWlsZGVyIHNldHRlcjsKICAgICAgICBpZiAobWVtYmVyLmlzU2V0dGVyKSB7CiAgICAgICAgICBzZXR0ZXIgPSBtZW1iZXI7CiAgICAgICAgfSBlbHNlIGlmIChtZW1iZXIuaXNHZXR0ZXIpIHsKICAgICAgICAgIHNldHRlciA9IGRlY2xhcmF0aW9uLmZpbmRTdGF0aWNCdWlsZGVyKAogICAgICAgICAgICAgIG5hbWUubmFtZSwgZmlsZU9mZnNldCwgX3VyaSwgX2hlbHBlci5saWJyYXJ5QnVpbGRlciwKICAgICAgICAgICAgICBpc1NldHRlcjogdHJ1ZSk7CiAgICAgICAgfSBlbHNlIGlmIChtZW1iZXIuaXNGaWVsZCkgewogICAgICAgICAgaWYgKG1lbWJlci5pc0ZpbmFsIHx8IG1lbWJlci5pc0NvbnN0KSB7CiAgICAgICAgICAgIHNldHRlciA9IGRlY2xhcmF0aW9uLmZpbmRTdGF0aWNCdWlsZGVyKAogICAgICAgICAgICAgICAgbmFtZS5uYW1lLCBmaWxlT2Zmc2V0LCBfdXJpLCBfaGVscGVyLmxpYnJhcnlCdWlsZGVyLAogICAgICAgICAgICAgICAgaXNTZXR0ZXI6IHRydWUpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2V0dGVyID0gbWVtYmVyOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBnZW5lcmF0b3IgPSBuZXcgU3RhdGljQWNjZXNzR2VuZXJhdG9yLmZyb21CdWlsZGVyKAogICAgICAgICAgICBfaGVscGVyLCBtZW1iZXIsIHNlbmQudG9rZW4sIHNldHRlcik7CiAgICAgIH0KCiAgICAgIHJldHVybiBhcmd1bWVudHMgPT0gbnVsbAogICAgICAgICAgPyBnZW5lcmF0b3IKICAgICAgICAgIDogZ2VuZXJhdG9yLmRvSW52b2NhdGlvbihvZmZzZXRGb3JUb2tlbihzZW5kLnRva2VuKSwgYXJndW1lbnRzKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBzdXBlci5idWlsZFByb3BlcnR5QWNjZXNzKHNlbmQsIG9wZXJhdG9yT2Zmc2V0LCBpc051bGxBd2FyZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBkb0ludm9jYXRpb24oaW50IG9mZnNldCwgQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgaWYgKGRlY2xhcmF0aW9uLmlzRXh0ZW5zaW9uKSB7CiAgICAgIEV4dGVuc2lvbkJ1aWxkZXIgZXh0ZW5zaW9uQnVpbGRlciA9IGRlY2xhcmF0aW9uOwogICAgICBpZiAoYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoICE9IDEgfHwgYXJndW1lbnRzLm5hbWVkLmlzTm90RW1wdHkpIHsKICAgICAgICByZXR1cm4gX2hlbHBlci5idWlsZFByb2JsZW0obWVzc2FnZUV4cGxpY2l0RXh0ZW5zaW9uQXJndW1lbnRNaXNtYXRjaCwKICAgICAgICAgICAgZmlsZU9mZnNldCwgbGVuZ3RoRm9yVG9rZW4odG9rZW4pKTsKICAgICAgfQogICAgICBMaXN0PERhcnRUeXBlPiBleHBsaWNpdFR5cGVBcmd1bWVudHMgPQogICAgICAgICAgZ2V0RXhwbGljaXRUeXBlQXJndW1lbnRzKGFyZ3VtZW50cyk7CiAgICAgIGlmIChleHBsaWNpdFR5cGVBcmd1bWVudHMgIT0gbnVsbCkgewogICAgICAgIGludCB0eXBlUGFyYW1ldGVyQ291bnQgPSBleHRlbnNpb25CdWlsZGVyLnR5cGVQYXJhbWV0ZXJzPy5sZW5ndGggPz8gMDsKICAgICAgICBpZiAoZXhwbGljaXRUeXBlQXJndW1lbnRzLmxlbmd0aCAhPSB0eXBlUGFyYW1ldGVyQ291bnQpIHsKICAgICAgICAgIHJldHVybiBfaGVscGVyLmJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgICB0ZW1wbGF0ZUV4cGxpY2l0RXh0ZW5zaW9uVHlwZUFyZ3VtZW50TWlzbWF0Y2gud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uQnVpbGRlci5uYW1lLCB0eXBlUGFyYW1ldGVyQ291bnQpLAogICAgICAgICAgICAgIGZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgbGVuZ3RoRm9yVG9rZW4odG9rZW4pKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2hlY2sgYXJndW1lbnQgYW5kIHR5cGUgYXJndW1lbnQgY291bnQuCiAgICAgIHJldHVybiBuZXcgRXhwbGljaXRFeHRlbnNpb25BY2Nlc3NHZW5lcmF0b3IoX2hlbHBlciwgdG9rZW4sIGRlY2xhcmF0aW9uLAogICAgICAgICAgYXJndW1lbnRzLnBvc2l0aW9uYWwuc2luZ2xlLCBleHBsaWNpdFR5cGVBcmd1bWVudHMpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRDb25zdHJ1Y3Rvckludm9jYXRpb24oZGVjbGFyYXRpb24sIHRva2VuLCB0b2tlbiwKICAgICAgICAgIGFyZ3VtZW50cywgIiIsIG51bGwsIHRva2VuLmNoYXJPZmZzZXQsIENvbnN0bmVzcy5pbXBsaWNpdCk7CiAgICB9CiAgfQp9CgovLy8gW1JlYWRPbmx5QWNjZXNzR2VuZXJhdG9yXSByZXByZXNlbnRzIHRoZSBzdWJleHByZXNzaW9uIHdob3NlIHByZWZpeCBpcyB0aGUKLy8vIG5hbWUgb2YgZmluYWwgbG9jYWwgdmFyaWFibGUsIGZpbmFsIHBhcmFtZXRlciwgb3IgY2F0Y2ggY2xhdXNlIHZhcmlhYmxlIG9yCi8vLyBgdGhpc2AgaW4gYW4gaW5zdGFuY2UgbWV0aG9kIGluIGFuIGV4dGVuc2lvbiBkZWNsYXJhdGlvbi4KLy8vCi8vLyBGb3IgaW5zdGFuY2U6Ci8vLwovLy8gICBtZXRob2QoZmluYWwgYSkgewovLy8gICAgIGZpbmFsIGIgPSBudWxsOwovLy8gICAgIGE7ICAgICAgICAgLy8gYSBSZWFkT25seUFjY2Vzc0dlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgYWAuCi8vLyAgICAgYVtdOyAgICAgICAvLyBhIFJlYWRPbmx5QWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBhYC4KLy8vICAgICBiKCk7ICAgICAgIC8vIGEgUmVhZE9ubHlBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYGJgLgovLy8gICAgIGIuYyA9IGEuZDsgLy8gYSBSZWFkT25seUFjY2Vzc0dlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgYWAgYW5kIGBiYC4KLy8vCi8vLyAgICAgdHJ5IHsKLy8vICAgICB9IGNhdGNoIChhKSB7Ci8vLyAgICAgICBhOyAgICAgICAvLyBhIFJlYWRPbmx5QWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBhYC4KLy8vICAgICB9Ci8vLyAgIH0KLy8vCi8vLyAgIGV4dGVuc2lvbiBvbiBGb28gewovLy8gICAgIG1ldGhvZCgpIHsKLy8vICAgICAgIHRoaXM7ICAgICAgICAgLy8gYSBSZWFkT25seUFjY2Vzc0dlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgdGhpc2AuCi8vLyAgICAgICB0aGlzLmE7ICAgICAgIC8vIGEgUmVhZE9ubHlBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYHRoaXNgLgovLy8gICAgICAgdGhpcy5iKCk7ICAgICAvLyBhIFJlYWRPbmx5QWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGB0aGlzYC4KLy8vICAgICB9Ci8vLyAgIH0KLy8vCmNsYXNzIFJlYWRPbmx5QWNjZXNzR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgX3BsYWluTmFtZUZvclJlYWQ7CgogIEV4cHJlc3Npb24gZXhwcmVzc2lvbjsKCiAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YWx1ZTsKCiAgUmVhZE9ubHlBY2Nlc3NHZW5lcmF0b3IoRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsIFRva2VuIHRva2VuLAogICAgICB0aGlzLmV4cHJlc3Npb24sIHRoaXMuX3BsYWluTmFtZUZvclJlYWQpCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbik7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2RlYnVnTmFtZSA9PiAiUmVhZE9ubHlBY2Nlc3NHZW5lcmF0b3IiOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlU2ltcGxlUmVhZCgpID0+IGV4cHJlc3Npb247CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VSZWFkKENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIHZhbHVlID8/PSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZShleHByZXNzaW9uKTsKICAgIHJldHVybiBuZXcgVmFyaWFibGVHZXQodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfZmluaXNoKAogICAgICAgICAgRXhwcmVzc2lvbiBib2R5LCBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSA9PgogICAgICBzdXBlci5fZmluaXNoKG1ha2VMZXQodmFsdWUsIGJvZHkpLCBjb21wbGV4QXNzaWdubWVudCk7CgogIEBvdmVycmlkZQogIGRvSW52b2NhdGlvbihpbnQgb2Zmc2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gX2hlbHBlci5idWlsZE1ldGhvZEludm9jYXRpb24oYnVpbGRTaW1wbGVSZWFkKCksIGNhbGxOYW1lLCBhcmd1bWVudHMsCiAgICAgICAgYWRqdXN0Rm9ySW1wbGljaXRDYWxsKF9wbGFpbk5hbWVGb3JSZWFkLCBvZmZzZXQpLAogICAgICAgIGlzSW1wbGljaXRDYWxsOiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIE5hbWVTeXN0ZW0gc3ludGhldGljTmFtZXMgPSBuZXcgTmFtZVN5c3RlbSgpOwogICAgc2luay53cml0ZSgiLCBleHByZXNzaW9uOiAiKTsKICAgIHByaW50Tm9kZU9uKGV4cHJlc3Npb24sIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIHBsYWluTmFtZUZvclJlYWQ6ICIpOwogICAgc2luay53cml0ZShfcGxhaW5OYW1lRm9yUmVhZCk7CiAgICBzaW5rLndyaXRlKCIsIHZhbHVlOiAiKTsKICAgIHByaW50Tm9kZU9uKHZhbHVlLCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgRXJyb25lb3VzRXhwcmVzc2lvbkdlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvciB7CiAgRXJyb25lb3VzRXhwcmVzc2lvbkdlbmVyYXRvcihFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4pCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbik7CgogIC8vLyBQYXNzIFthcmd1bWVudHNdIHRoYXQgbXVzdCBiZSBldmFsdWF0ZWQgYmVmb3JlIHRocm93aW5nIGFuIGVycm9yLiAgQXQKICAvLy8gbW9zdCBvbmUgb2YgW2lzR2V0dGVyXSBhbmQgW2lzU2V0dGVyXSBzaG91bGQgYmUgdHJ1ZSBhbmQgdGhleSdyZSBwYXNzZWQKICAvLy8gdG8gW0V4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIudGhyb3dOb1N1Y2hNZXRob2RFcnJvcl0gaWYgaXQgaXMgdXNlZC4KICBFeHByZXNzaW9uIGJ1aWxkRXJyb3IoQXJndW1lbnRzIGFyZ3VtZW50cywKICAgICAge2Jvb2wgaXNHZXR0ZXI6IGZhbHNlLCBib29sIGlzU2V0dGVyOiBmYWxzZSwgaW50IG9mZnNldH0pOwoKICBOYW1lIGdldCBuYW1lID0+IHVuc3VwcG9ydGVkKCJuYW1lIiwgZmlsZU9mZnNldCwgX3VyaSk7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX3BsYWluTmFtZUZvclJlYWQgPT4gbmFtZS5uYW1lOwoKICB3aXRoUmVjZWl2ZXIoT2JqZWN0IHJlY2VpdmVyLCBpbnQgb3BlcmF0b3JPZmZzZXQsIHtib29sIGlzTnVsbEF3YXJlfSkgPT4gdGhpczsKCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXIgYnVpbGRGaWVsZEluaXRpYWxpemVyKE1hcDxTdHJpbmcsIGludD4gaW5pdGlhbGl6ZWRGaWVsZHMpIHsKICAgIHJldHVybiBfaGVscGVyLmJ1aWxkSW52YWxpZEluaXRpYWxpemVyKF9oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oCiAgICAgICAgYnVpbGRFcnJvcihfZm9yZXN0LmNyZWF0ZUFyZ3VtZW50c0VtcHR5KGZpbGVPZmZzZXQpLCBpc1NldHRlcjogdHJ1ZSkpKTsKICB9CgogIEBvdmVycmlkZQogIGRvSW52b2NhdGlvbihpbnQgb2Zmc2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gYnVpbGRFcnJvcihhcmd1bWVudHMsIG9mZnNldDogb2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIGJ1aWxkUHJvcGVydHlBY2Nlc3MoCiAgICAgIEluY29tcGxldGVTZW5kR2VuZXJhdG9yIHNlbmQsIGludCBvcGVyYXRvck9mZnNldCwgYm9vbCBpc051bGxBd2FyZSkgewogICAgcmV0dXJuIHNlbmQud2l0aFJlY2VpdmVyKGJ1aWxkU2ltcGxlUmVhZCgpLCBvcGVyYXRvck9mZnNldCwKICAgICAgICBpc051bGxBd2FyZTogaXNOdWxsQXdhcmUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZEFzc2lnbm1lbnQoRXhwcmVzc2lvbiB2YWx1ZSwge2Jvb2wgdm9pZENvbnRleHQ6IGZhbHNlfSkgewogICAgcmV0dXJuIGJ1aWxkRXJyb3IoX2ZvcmVzdC5jcmVhdGVBcmd1bWVudHMoZmlsZU9mZnNldCwgPEV4cHJlc3Npb24+W3ZhbHVlXSksCiAgICAgICAgaXNTZXR0ZXI6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZENvbXBvdW5kQXNzaWdubWVudChOYW1lIGJpbmFyeU9wZXJhdG9yLCBFeHByZXNzaW9uIHZhbHVlLAogICAgICB7aW50IG9mZnNldDogLTEsCiAgICAgIGJvb2wgdm9pZENvbnRleHQ6IGZhbHNlLAogICAgICBQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0LAogICAgICBib29sIGlzUHJlSW5jRGVjOiBmYWxzZSwKICAgICAgYm9vbCBpc1Bvc3RJbmNEZWM6IGZhbHNlfSkgewogICAgcmV0dXJuIGJ1aWxkRXJyb3IoX2ZvcmVzdC5jcmVhdGVBcmd1bWVudHMoZmlsZU9mZnNldCwgPEV4cHJlc3Npb24+W3ZhbHVlXSksCiAgICAgICAgaXNHZXR0ZXI6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZFByZWZpeEluY3JlbWVudChOYW1lIGJpbmFyeU9wZXJhdG9yLAogICAgICB7aW50IG9mZnNldDogLTEsIGJvb2wgdm9pZENvbnRleHQ6IGZhbHNlLCBQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0fSkgewogICAgcmV0dXJuIGJ1aWxkRXJyb3IoCiAgICAgICAgX2ZvcmVzdC5jcmVhdGVBcmd1bWVudHMoZmlsZU9mZnNldCwgPEV4cHJlc3Npb24+WwogICAgICAgICAgX2ZvcmVzdC5jcmVhdGVJbnRMaXRlcmFsKDEsIG51bGwpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0CiAgICAgICAgXSksCiAgICAgICAgaXNHZXR0ZXI6IHRydWUpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGRQb3N0Zml4SW5jcmVtZW50KE5hbWUgYmluYXJ5T3BlcmF0b3IsCiAgICAgIHtpbnQgb2Zmc2V0OiAtMSwgYm9vbCB2b2lkQ29udGV4dDogZmFsc2UsIFByb2NlZHVyZSBpbnRlcmZhY2VUYXJnZXR9KSB7CiAgICByZXR1cm4gYnVpbGRFcnJvcigKICAgICAgICBfZm9yZXN0LmNyZWF0ZUFyZ3VtZW50cyhmaWxlT2Zmc2V0LCA8RXhwcmVzc2lvbj5bCiAgICAgICAgICBfZm9yZXN0LmNyZWF0ZUludExpdGVyYWwoMSwgbnVsbCkuLmZpbGVPZmZzZXQgPSBvZmZzZXQKICAgICAgICBdKSwKICAgICAgICBpc0dldHRlcjogdHJ1ZSkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZE51bGxBd2FyZUFzc2lnbm1lbnQoCiAgICAgIEV4cHJlc3Npb24gdmFsdWUsIERhcnRUeXBlIHR5cGUsIGludCBvZmZzZXQsCiAgICAgIHtib29sIHZvaWRDb250ZXh0OiBmYWxzZX0pIHsKICAgIHJldHVybiBidWlsZEVycm9yKF9mb3Jlc3QuY3JlYXRlQXJndW1lbnRzKGZpbGVPZmZzZXQsIDxFeHByZXNzaW9uPlt2YWx1ZV0pLAogICAgICAgIGlzU2V0dGVyOiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGRTaW1wbGVSZWFkKCkgewogICAgcmV0dXJuIGJ1aWxkRXJyb3IoX2ZvcmVzdC5jcmVhdGVBcmd1bWVudHNFbXB0eShmaWxlT2Zmc2V0KSwgaXNHZXR0ZXI6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZUludmFsaWRSZWFkKCkgewogICAgcmV0dXJuIGJ1aWxkRXJyb3IoX2ZvcmVzdC5jcmVhdGVBcmd1bWVudHNFbXB0eShmaWxlT2Zmc2V0KSwgaXNHZXR0ZXI6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZUludmFsaWRXcml0ZShFeHByZXNzaW9uIHZhbHVlKSB7CiAgICByZXR1cm4gYnVpbGRFcnJvcihfZm9yZXN0LmNyZWF0ZUFyZ3VtZW50cyhmaWxlT2Zmc2V0LCA8RXhwcmVzc2lvbj5bdmFsdWVdKSwKICAgICAgICBpc1NldHRlcjogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGludm9rZUNvbnN0cnVjdG9yKAogICAgICBMaXN0PFVucmVzb2x2ZWRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICBTdHJpbmcgbmFtZSwKICAgICAgQXJndW1lbnRzIGFyZ3VtZW50cywKICAgICAgVG9rZW4gbmFtZVRva2VuLAogICAgICBUb2tlbiBuYW1lTGFzdFRva2VuLAogICAgICBDb25zdG5lc3MgY29uc3RuZXNzKSB7CiAgICBpZiAodHlwZUFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGFzc2VydChfZm9yZXN0LmFyZ3VtZW50c1R5cGVBcmd1bWVudHMoYXJndW1lbnRzKS5pc0VtcHR5KTsKICAgICAgX2ZvcmVzdC5hcmd1bWVudHNTZXRUeXBlQXJndW1lbnRzKAogICAgICAgICAgYXJndW1lbnRzLCBfaGVscGVyLmJ1aWxkRGFydFR5cGVBcmd1bWVudHModHlwZUFyZ3VtZW50cykpOwogICAgfQogICAgcmV0dXJuIF9oZWxwZXIud3JhcEludmFsaWRDb25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgICAgX2hlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihidWlsZEVycm9yKGFyZ3VtZW50cykpLAogICAgICAgIG51bGwsCiAgICAgICAgYXJndW1lbnRzLAogICAgICAgIGZpbGVPZmZzZXQpOwogIH0KfQoKY2xhc3MgVW5yZXNvbHZlZE5hbWVHZW5lcmF0b3IgZXh0ZW5kcyBFcnJvbmVvdXNFeHByZXNzaW9uR2VuZXJhdG9yIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBOYW1lIG5hbWU7CgogIGZhY3RvcnkgVW5yZXNvbHZlZE5hbWVHZW5lcmF0b3IoCiAgICAgIEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwgTmFtZSBuYW1lKSB7CiAgICBpZiAobmFtZS5uYW1lLmlzRW1wdHkpIHsKICAgICAgdW5oYW5kbGVkKCJlbXB0eSIsICJuYW1lIiwgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCBoZWxwZXIudXJpKTsKICAgIH0KICAgIHJldHVybiBuZXcgVW5yZXNvbHZlZE5hbWVHZW5lcmF0b3IuaW50ZXJuYWwoaGVscGVyLCB0b2tlbiwgbmFtZSk7CiAgfQoKICBVbnJlc29sdmVkTmFtZUdlbmVyYXRvci5pbnRlcm5hbCgKICAgICAgRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsIFRva2VuIHRva2VuLCB0aGlzLm5hbWUpCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbik7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2RlYnVnTmFtZSA9PiAiVW5yZXNvbHZlZE5hbWVHZW5lcmF0b3IiOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGRvSW52b2NhdGlvbihpbnQgY2hhck9mZnNldCwgQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIF9oZWxwZXIud3JhcFVucmVzb2x2ZWRUYXJnZXRJbnZvY2F0aW9uKAogICAgICAgIF9oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oCiAgICAgICAgICAgIGJ1aWxkRXJyb3IoYXJndW1lbnRzLCBvZmZzZXQ6IGNoYXJPZmZzZXQpKSwKICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgYXJndW1lbnRzLmZpbGVPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZEVycm9yKEFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIHtib29sIGlzR2V0dGVyOiBmYWxzZSwgYm9vbCBpc1NldHRlcjogZmFsc2UsIGludCBvZmZzZXR9KSB7CiAgICBvZmZzZXQgPz89IGZpbGVPZmZzZXQ7CiAgICByZXR1cm4gX2hlbHBlci53cmFwU3ludGhldGljRXhwcmVzc2lvbigKICAgICAgICBfaGVscGVyLnRocm93Tm9TdWNoTWV0aG9kRXJyb3IoCiAgICAgICAgICAgIF9mb3Jlc3QuY3JlYXRlTnVsbExpdGVyYWwobnVsbCkuLmZpbGVPZmZzZXQgPSBvZmZzZXQsCiAgICAgICAgICAgIF9wbGFpbk5hbWVGb3JSZWFkLAogICAgICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgICAgIG9mZnNldCwKICAgICAgICAgICAgaXNHZXR0ZXI6IGlzR2V0dGVyLAogICAgICAgICAgICBpc1NldHRlcjogaXNTZXR0ZXIpLAogICAgICAgIG9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICAvKiBFeHByZXNzaW9uIHwgR2VuZXJhdG9yICovIE9iamVjdCBxdWFsaWZpZWRMb29rdXAoVG9rZW4gbmFtZSkgewogICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkUXVhbGlmaWVkVXNlR2VuZXJhdG9yKF9oZWxwZXIsIG5hbWUsIHRoaXMsIHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZEFzc2lnbm1lbnQoRXhwcmVzc2lvbiB2YWx1ZSwge2Jvb2wgdm9pZENvbnRleHQ6IGZhbHNlfSkgewogICAgcmV0dXJuIF9idWlsZFVucmVzb2x2ZWRWYXJpYWJsZUFzc2lnbm1lbnQoZmFsc2UsIHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQoTmFtZSBiaW5hcnlPcGVyYXRvciwgRXhwcmVzc2lvbiB2YWx1ZSwKICAgICAge2ludCBvZmZzZXQ6IFRyZWVOb2RlLm5vT2Zmc2V0LAogICAgICBib29sIHZvaWRDb250ZXh0OiBmYWxzZSwKICAgICAgUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldCwKICAgICAgYm9vbCBpc1ByZUluY0RlYzogZmFsc2UsCiAgICAgIGJvb2wgaXNQb3N0SW5jRGVjOiBmYWxzZX0pIHsKICAgIHJldHVybiBfYnVpbGRVbnJlc29sdmVkVmFyaWFibGVBc3NpZ25tZW50KHRydWUsIHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGRTaW1wbGVSZWFkKCkgewogICAgcmV0dXJuIGJ1aWxkRXJyb3IoX2ZvcmVzdC5jcmVhdGVBcmd1bWVudHNFbXB0eShmaWxlT2Zmc2V0KSwgaXNHZXR0ZXI6IHRydWUpCiAgICAgIC4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlKCIsIG5hbWU6ICIpOwogICAgc2luay53cml0ZShuYW1lLm5hbWUpOwogIH0KCiAgRXhwcmVzc2lvbiBfYnVpbGRVbnJlc29sdmVkVmFyaWFibGVBc3NpZ25tZW50KAogICAgICBib29sIGlzQ29tcG91bmQsIEV4cHJlc3Npb24gdmFsdWUpIHsKICAgIHJldHVybiBfaGVscGVyLndyYXBVbnJlc29sdmVkVmFyaWFibGVBc3NpZ25tZW50KAogICAgICAgIF9oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oYnVpbGRFcnJvcigKICAgICAgICAgICAgX2ZvcmVzdC5jcmVhdGVBcmd1bWVudHMoZmlsZU9mZnNldCwgPEV4cHJlc3Npb24+W3ZhbHVlXSksCiAgICAgICAgICAgIGlzU2V0dGVyOiB0cnVlKSksCiAgICAgICAgaXNDb21wb3VuZCwKICAgICAgICB2YWx1ZSwKICAgICAgICB0b2tlbi5jaGFyT2Zmc2V0KTsKICB9Cn0KCmNsYXNzIFVubGlua2VkR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIHsKICBmaW5hbCBVbmxpbmtlZERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwoKICBmaW5hbCBFeHByZXNzaW9uIHJlY2VpdmVyOwoKICBmaW5hbCBOYW1lIG5hbWU7CgogIFVubGlua2VkR2VuZXJhdG9yKAogICAgICBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4sIHRoaXMuZGVjbGFyYXRpb24pCiAgICAgIDogbmFtZSA9IG5ldyBOYW1lKGRlY2xhcmF0aW9uLm5hbWUsIGhlbHBlci5saWJyYXJ5QnVpbGRlci5saWJyYXJ5KSwKICAgICAgICByZWNlaXZlciA9IG5ldyBJbnZhbGlkRXhwcmVzc2lvbihkZWNsYXJhdGlvbi5uYW1lKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLAogICAgICAgIHN1cGVyKGhlbHBlciwgdG9rZW4pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9wbGFpbk5hbWVGb3JSZWFkID0+IGRlY2xhcmF0aW9uLm5hbWU7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2RlYnVnTmFtZSA9PiAiVW5saW5rZWRHZW5lcmF0b3IiOwoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlKCIsIG5hbWU6ICIpOwogICAgc2luay53cml0ZShkZWNsYXJhdGlvbi5uYW1lKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGRBc3NpZ25tZW50KEV4cHJlc3Npb24gdmFsdWUsIHtib29sIHZvaWRDb250ZXh0OiBmYWxzZX0pIHsKICAgIHJldHVybiBuZXcgUHJvcGVydHlTZXQocmVjZWl2ZXIsIG5hbWUsIHZhbHVlKS4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGJ1aWxkU2ltcGxlUmVhZCgpIHsKICAgIHJldHVybiBuZXcgUHJvcGVydHlHZXQocmVjZWl2ZXIsIG5hbWUpLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgiZG9JbnZvY2F0aW9uIiwgb2Zmc2V0LCBfdXJpKTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIENvbnRleHRBd2FyZUdlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvciB7CiAgZmluYWwgR2VuZXJhdG9yIGdlbmVyYXRvcjsKCiAgQ29udGV4dEF3YXJlR2VuZXJhdG9yKAogICAgICBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4sIHRoaXMuZ2VuZXJhdG9yKQogICAgICA6IHN1cGVyKGhlbHBlciwgdG9rZW4pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9wbGFpbk5hbWVGb3JSZWFkIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgicGxhaW5OYW1lRm9yUmVhZCIsIHRva2VuLmNoYXJPZmZzZXQsIF9oZWxwZXIudXJpKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBjaGFyT2Zmc2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gdW5oYW5kbGVkKCIke3J1bnRpbWVUeXBlfSIsICJkb0ludm9jYXRpb24iLCBjaGFyT2Zmc2V0LCBfdXJpKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGRBc3NpZ25tZW50KEV4cHJlc3Npb24gdmFsdWUsIHtib29sIHZvaWRDb250ZXh0OiBmYWxzZX0pIHsKICAgIHJldHVybiBfbWFrZUludmFsaWRXcml0ZSh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGJ1aWxkTnVsbEF3YXJlQXNzaWdubWVudCgKICAgICAgRXhwcmVzc2lvbiB2YWx1ZSwgRGFydFR5cGUgdHlwZSwgaW50IG9mZnNldCwKICAgICAge2Jvb2wgdm9pZENvbnRleHQ6IGZhbHNlfSkgewogICAgcmV0dXJuIF9tYWtlSW52YWxpZFdyaXRlKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQoTmFtZSBiaW5hcnlPcGVyYXRvciwgRXhwcmVzc2lvbiB2YWx1ZSwKICAgICAge2ludCBvZmZzZXQ6IC0xLAogICAgICBib29sIHZvaWRDb250ZXh0OiBmYWxzZSwKICAgICAgUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldCwKICAgICAgYm9vbCBpc1ByZUluY0RlYzogZmFsc2UsCiAgICAgIGJvb2wgaXNQb3N0SW5jRGVjOiBmYWxzZX0pIHsKICAgIHJldHVybiBfbWFrZUludmFsaWRXcml0ZSh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGJ1aWxkUHJlZml4SW5jcmVtZW50KE5hbWUgYmluYXJ5T3BlcmF0b3IsCiAgICAgIHtpbnQgb2Zmc2V0OiAtMSwgYm9vbCB2b2lkQ29udGV4dDogZmFsc2UsIFByb2NlZHVyZSBpbnRlcmZhY2VUYXJnZXR9KSB7CiAgICByZXR1cm4gX21ha2VJbnZhbGlkV3JpdGUobnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGJ1aWxkUG9zdGZpeEluY3JlbWVudChOYW1lIGJpbmFyeU9wZXJhdG9yLAogICAgICB7aW50IG9mZnNldDogLTEsIGJvb2wgdm9pZENvbnRleHQ6IGZhbHNlLCBQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0fSkgewogICAgcmV0dXJuIF9tYWtlSW52YWxpZFdyaXRlKG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgX21ha2VJbnZhbGlkUmVhZCgpIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgibWFrZUludmFsaWRSZWFkIiwgdG9rZW4uY2hhck9mZnNldCwgX2hlbHBlci51cmkpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZUludmFsaWRXcml0ZShFeHByZXNzaW9uIHZhbHVlKSB7CiAgICByZXR1cm4gX2hlbHBlci5idWlsZFByb2JsZW0obWVzc2FnZUlsbGVnYWxBc3NpZ25tZW50VG9Ob25Bc3NpZ25hYmxlLAogICAgICAgIGZpbGVPZmZzZXQsIGxlbmd0aEZvclRva2VuKHRva2VuKSk7CiAgfQp9CgpjbGFzcyBEZWxheWVkQXNzaWdubWVudCBleHRlbmRzIENvbnRleHRBd2FyZUdlbmVyYXRvciB7CiAgZmluYWwgRXhwcmVzc2lvbiB2YWx1ZTsKCiAgU3RyaW5nIGFzc2lnbm1lbnRPcGVyYXRvcjsKCiAgRGVsYXllZEFzc2lnbm1lbnQoRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsIFRva2VuIHRva2VuLAogICAgICBHZW5lcmF0b3IgZ2VuZXJhdG9yLCB0aGlzLnZhbHVlLCB0aGlzLmFzc2lnbm1lbnRPcGVyYXRvcikKICAgICAgOiBzdXBlcihoZWxwZXIsIHRva2VuLCBnZW5lcmF0b3IpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIkRlbGF5ZWRBc3NpZ25tZW50IjsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZFNpbXBsZVJlYWQoKSB7CiAgICByZXR1cm4gaGFuZGxlQXNzaWdubWVudChmYWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGJ1aWxkRm9yRWZmZWN0KCkgewogICAgcmV0dXJuIGhhbmRsZUFzc2lnbm1lbnQodHJ1ZSk7CiAgfQoKICBFeHByZXNzaW9uIGhhbmRsZUFzc2lnbm1lbnQoYm9vbCB2b2lkQ29udGV4dCkgewogICAgaWYgKF9oZWxwZXIuY29uc3RhbnRDb250ZXh0ICE9IENvbnN0YW50Q29udGV4dC5ub25lKSB7CiAgICAgIHJldHVybiBfaGVscGVyLmJ1aWxkUHJvYmxlbSgKICAgICAgICAgIG1lc3NhZ2VOb3RBQ29uc3RhbnRFeHByZXNzaW9uLCBmaWxlT2Zmc2V0LCB0b2tlbi5sZW5ndGgpOwogICAgfQogICAgaWYgKGlkZW50aWNhbCgiPSIsIGFzc2lnbm1lbnRPcGVyYXRvcikpIHsKICAgICAgcmV0dXJuIGdlbmVyYXRvci5idWlsZEFzc2lnbm1lbnQodmFsdWUsIHZvaWRDb250ZXh0OiB2b2lkQ29udGV4dCk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgiKz0iLCBhc3NpZ25tZW50T3BlcmF0b3IpKSB7CiAgICAgIHJldHVybiBnZW5lcmF0b3IuYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQocGx1c05hbWUsIHZhbHVlLAogICAgICAgICAgb2Zmc2V0OiBmaWxlT2Zmc2V0LCB2b2lkQ29udGV4dDogdm9pZENvbnRleHQpOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwoIi09IiwgYXNzaWdubWVudE9wZXJhdG9yKSkgewogICAgICByZXR1cm4gZ2VuZXJhdG9yLmJ1aWxkQ29tcG91bmRBc3NpZ25tZW50KG1pbnVzTmFtZSwgdmFsdWUsCiAgICAgICAgICBvZmZzZXQ6IGZpbGVPZmZzZXQsIHZvaWRDb250ZXh0OiB2b2lkQ29udGV4dCk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgiKj0iLCBhc3NpZ25tZW50T3BlcmF0b3IpKSB7CiAgICAgIHJldHVybiBnZW5lcmF0b3IuYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQobXVsdGlwbHlOYW1lLCB2YWx1ZSwKICAgICAgICAgIG9mZnNldDogZmlsZU9mZnNldCwgdm9pZENvbnRleHQ6IHZvaWRDb250ZXh0KTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCIlPSIsIGFzc2lnbm1lbnRPcGVyYXRvcikpIHsKICAgICAgcmV0dXJuIGdlbmVyYXRvci5idWlsZENvbXBvdW5kQXNzaWdubWVudChwZXJjZW50TmFtZSwgdmFsdWUsCiAgICAgICAgICBvZmZzZXQ6IGZpbGVPZmZzZXQsIHZvaWRDb250ZXh0OiB2b2lkQ29udGV4dCk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgiJj0iLCBhc3NpZ25tZW50T3BlcmF0b3IpKSB7CiAgICAgIHJldHVybiBnZW5lcmF0b3IuYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQoYW1wZXJzYW5kTmFtZSwgdmFsdWUsCiAgICAgICAgICBvZmZzZXQ6IGZpbGVPZmZzZXQsIHZvaWRDb250ZXh0OiB2b2lkQ29udGV4dCk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgiLz0iLCBhc3NpZ25tZW50T3BlcmF0b3IpKSB7CiAgICAgIHJldHVybiBnZW5lcmF0b3IuYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQoZGl2aXNpb25OYW1lLCB2YWx1ZSwKICAgICAgICAgIG9mZnNldDogZmlsZU9mZnNldCwgdm9pZENvbnRleHQ6IHZvaWRDb250ZXh0KTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCI8PD0iLCBhc3NpZ25tZW50T3BlcmF0b3IpKSB7CiAgICAgIHJldHVybiBnZW5lcmF0b3IuYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQobGVmdFNoaWZ0TmFtZSwgdmFsdWUsCiAgICAgICAgICBvZmZzZXQ6IGZpbGVPZmZzZXQsIHZvaWRDb250ZXh0OiB2b2lkQ29udGV4dCk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgiPj49IiwgYXNzaWdubWVudE9wZXJhdG9yKSkgewogICAgICByZXR1cm4gZ2VuZXJhdG9yLmJ1aWxkQ29tcG91bmRBc3NpZ25tZW50KHJpZ2h0U2hpZnROYW1lLCB2YWx1ZSwKICAgICAgICAgIG9mZnNldDogZmlsZU9mZnNldCwgdm9pZENvbnRleHQ6IHZvaWRDb250ZXh0KTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCI+Pj49IiwgYXNzaWdubWVudE9wZXJhdG9yKSkgewogICAgICByZXR1cm4gZ2VuZXJhdG9yLmJ1aWxkQ29tcG91bmRBc3NpZ25tZW50KHRyaXBsZVNoaWZ0TmFtZSwgdmFsdWUsCiAgICAgICAgICBvZmZzZXQ6IGZpbGVPZmZzZXQsIHZvaWRDb250ZXh0OiB2b2lkQ29udGV4dCk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgiPz89IiwgYXNzaWdubWVudE9wZXJhdG9yKSkgewogICAgICByZXR1cm4gZ2VuZXJhdG9yLmJ1aWxkTnVsbEF3YXJlQXNzaWdubWVudCgKICAgICAgICAgIHZhbHVlLCBjb25zdCBEeW5hbWljVHlwZSgpLCBmaWxlT2Zmc2V0LAogICAgICAgICAgdm9pZENvbnRleHQ6IHZvaWRDb250ZXh0KTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCJePSIsIGFzc2lnbm1lbnRPcGVyYXRvcikpIHsKICAgICAgcmV0dXJuIGdlbmVyYXRvci5idWlsZENvbXBvdW5kQXNzaWdubWVudChjYXJldE5hbWUsIHZhbHVlLAogICAgICAgICAgb2Zmc2V0OiBmaWxlT2Zmc2V0LCB2b2lkQ29udGV4dDogdm9pZENvbnRleHQpOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwoInw9IiwgYXNzaWdubWVudE9wZXJhdG9yKSkgewogICAgICByZXR1cm4gZ2VuZXJhdG9yLmJ1aWxkQ29tcG91bmRBc3NpZ25tZW50KGJhck5hbWUsIHZhbHVlLAogICAgICAgICAgb2Zmc2V0OiBmaWxlT2Zmc2V0LCB2b2lkQ29udGV4dDogdm9pZENvbnRleHQpOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwoIn4vPSIsIGFzc2lnbm1lbnRPcGVyYXRvcikpIHsKICAgICAgcmV0dXJuIGdlbmVyYXRvci5idWlsZENvbXBvdW5kQXNzaWdubWVudChtdXN0YWNoZU5hbWUsIHZhbHVlLAogICAgICAgICAgb2Zmc2V0OiBmaWxlT2Zmc2V0LCB2b2lkQ29udGV4dDogdm9pZENvbnRleHQpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHVuaGFuZGxlZChhc3NpZ25tZW50T3BlcmF0b3IsICJoYW5kbGVBc3NpZ25tZW50IiwgdG9rZW4uY2hhck9mZnNldCwKICAgICAgICAgIF9oZWxwZXIudXJpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyIGJ1aWxkRmllbGRJbml0aWFsaXplcihNYXA8U3RyaW5nLCBpbnQ+IGluaXRpYWxpemVkRmllbGRzKSB7CiAgICBpZiAoIWlkZW50aWNhbCgiPSIsIGFzc2lnbm1lbnRPcGVyYXRvcikgfHwKICAgICAgICBnZW5lcmF0b3IgaXMhIFRoaXNQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcikgewogICAgICByZXR1cm4gZ2VuZXJhdG9yLmJ1aWxkRmllbGRJbml0aWFsaXplcihpbml0aWFsaXplZEZpZWxkcyk7CiAgICB9CiAgICByZXR1cm4gX2hlbHBlci5idWlsZEZpZWxkSW5pdGlhbGl6ZXIoZmFsc2UsIGdlbmVyYXRvci5fcGxhaW5OYW1lRm9yUmVhZCwKICAgICAgICBvZmZzZXRGb3JUb2tlbihnZW5lcmF0b3IudG9rZW4pLCBmaWxlT2Zmc2V0LCB2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlKCIsIHZhbHVlOiAiKTsKICAgIHByaW50Tm9kZU9uKHZhbHVlLCBzaW5rKTsKICAgIHNpbmsud3JpdGUoIiwgYXNzaWdubWVudE9wZXJhdG9yOiAiKTsKICAgIHNpbmsud3JpdGUoYXNzaWdubWVudE9wZXJhdG9yKTsKICB9Cn0KCmNsYXNzIERlbGF5ZWRQb3N0Zml4SW5jcmVtZW50IGV4dGVuZHMgQ29udGV4dEF3YXJlR2VuZXJhdG9yIHsKICBmaW5hbCBOYW1lIGJpbmFyeU9wZXJhdG9yOwoKICBmaW5hbCBQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0OwoKICBEZWxheWVkUG9zdGZpeEluY3JlbWVudChFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4sCiAgICAgIEdlbmVyYXRvciBnZW5lcmF0b3IsIHRoaXMuYmluYXJ5T3BlcmF0b3IsIHRoaXMuaW50ZXJmYWNlVGFyZ2V0KQogICAgICA6IHN1cGVyKGhlbHBlciwgdG9rZW4sIGdlbmVyYXRvcik7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2RlYnVnTmFtZSA9PiAiRGVsYXllZFBvc3RmaXhJbmNyZW1lbnQiOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGJ1aWxkU2ltcGxlUmVhZCgpIHsKICAgIHJldHVybiBnZW5lcmF0b3IuYnVpbGRQb3N0Zml4SW5jcmVtZW50KGJpbmFyeU9wZXJhdG9yLAogICAgICAgIG9mZnNldDogZmlsZU9mZnNldCwKICAgICAgICB2b2lkQ29udGV4dDogZmFsc2UsCiAgICAgICAgaW50ZXJmYWNlVGFyZ2V0OiBpbnRlcmZhY2VUYXJnZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZEZvckVmZmVjdCgpIHsKICAgIHJldHVybiBnZW5lcmF0b3IuYnVpbGRQb3N0Zml4SW5jcmVtZW50KGJpbmFyeU9wZXJhdG9yLAogICAgICAgIG9mZnNldDogZmlsZU9mZnNldCwKICAgICAgICB2b2lkQ29udGV4dDogdHJ1ZSwKICAgICAgICBpbnRlcmZhY2VUYXJnZXQ6IGludGVyZmFjZVRhcmdldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlKCIsIGJpbmFyeU9wZXJhdG9yOiAiKTsKICAgIHNpbmsud3JpdGUoYmluYXJ5T3BlcmF0b3IubmFtZSk7CiAgICBzaW5rLndyaXRlKCIsIGludGVyZmFjZVRhcmdldDogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbihpbnRlcmZhY2VUYXJnZXQsIHNpbmspOwogIH0KfQoKY2xhc3MgUHJlZml4VXNlR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIHsKICBmaW5hbCBQcmVmaXhCdWlsZGVyIHByZWZpeDsKCiAgUHJlZml4VXNlR2VuZXJhdG9yKEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwgdGhpcy5wcmVmaXgpCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbik7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX3BsYWluTmFtZUZvclJlYWQgPT4gcHJlZml4Lm5hbWU7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2RlYnVnTmFtZSA9PiAiUHJlZml4VXNlR2VuZXJhdG9yIjsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZFNpbXBsZVJlYWQoKSA9PiBfbWFrZUludmFsaWRSZWFkKCk7CgogIEBvdmVycmlkZQogIC8qIEV4cHJlc3Npb24gfCBHZW5lcmF0b3IgKi8gT2JqZWN0IHF1YWxpZmllZExvb2t1cChUb2tlbiBuYW1lKSB7CiAgICBpZiAoX2hlbHBlci5jb25zdGFudENvbnRleHQgIT0gQ29uc3RhbnRDb250ZXh0Lm5vbmUgJiYgcHJlZml4LmRlZmVycmVkKSB7CiAgICAgIF9oZWxwZXIuYWRkUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlQ2FudFVzZURlZmVycmVkUHJlZml4QXNDb25zdGFudC53aXRoQXJndW1lbnRzKHRva2VuKSwKICAgICAgICAgIGZpbGVPZmZzZXQsCiAgICAgICAgICBsZW5ndGhGb3JUb2tlbih0b2tlbikpOwogICAgfQogICAgT2JqZWN0IHJlc3VsdCA9IF9oZWxwZXIuc2NvcGVMb29rdXAocHJlZml4LmV4cG9ydFNjb3BlLCBuYW1lLmxleGVtZSwgbmFtZSwKICAgICAgICBpc1F1YWxpZmllZDogdHJ1ZSwgcHJlZml4OiBwcmVmaXgpOwogICAgaWYgKHByZWZpeC5kZWZlcnJlZCkgewogICAgICBpZiAocmVzdWx0IGlzIEdlbmVyYXRvcikgewogICAgICAgIGlmIChyZXN1bHQgaXMhIExvYWRMaWJyYXJ5R2VuZXJhdG9yKSB7CiAgICAgICAgICByZXN1bHQgPSBuZXcgRGVmZXJyZWRBY2Nlc3NHZW5lcmF0b3IoX2hlbHBlciwgbmFtZSwgdGhpcywgcmVzdWx0KTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2hlbHBlci53cmFwSW5EZWZlcnJlZENoZWNrKHJlc3VsdCwgcHJlZml4LCBmaWxlT2Zmc2V0KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIC8qIEV4cHJlc3Npb24gfCBHZW5lcmF0b3IgfCBJbml0aWFsaXplciAqLyBkb0ludm9jYXRpb24oCiAgICAgIGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBfaGVscGVyLndyYXBJbkxvY2F0ZWRQcm9ibGVtKAogICAgICAgIF9oZWxwZXIuZXZhbHVhdGVBcmd1bWVudHNCZWZvcmUoCiAgICAgICAgICAgIGFyZ3VtZW50cywgX2ZvcmVzdC5jcmVhdGVOdWxsTGl0ZXJhbChmaWxlT2Zmc2V0KSksCiAgICAgICAgbWVzc2FnZUNhbnRVc2VQcmVmaXhBc0V4cHJlc3Npb24ud2l0aExvY2F0aW9uKAogICAgICAgICAgICBfaGVscGVyLnVyaSwgZmlsZU9mZnNldCwgbGVuZ3RoRm9yVG9rZW4odG9rZW4pKSk7CiAgfQoKICBAb3ZlcnJpZGUKICAvKiBFeHByZXNzaW9uIHwgR2VuZXJhdG9yICovIGJ1aWxkUHJvcGVydHlBY2Nlc3MoCiAgICAgIEluY29tcGxldGVTZW5kR2VuZXJhdG9yIHNlbmQsIGludCBvcGVyYXRvck9mZnNldCwgYm9vbCBpc051bGxBd2FyZSkgewogICAgaWYgKHNlbmQgaXMgSW5jb21wbGV0ZVNlbmRHZW5lcmF0b3IpIHsKICAgICAgYXNzZXJ0KHNlbmQubmFtZS5uYW1lID09IHNlbmQudG9rZW4ubGV4ZW1lLAogICAgICAgICAgIicke3NlbmQubmFtZS5uYW1lfScgIT0gJHtzZW5kLnRva2VuLmxleGVtZX0iKTsKICAgICAgT2JqZWN0IHJlc3VsdCA9IHF1YWxpZmllZExvb2t1cChzZW5kLnRva2VuKTsKICAgICAgaWYgKHNlbmQgaXMgU2VuZEFjY2Vzc0dlbmVyYXRvcikgewogICAgICAgIHJlc3VsdCA9IF9oZWxwZXIuZmluaXNoU2VuZChyZXN1bHQsIHNlbmQuYXJndW1lbnRzLCBmaWxlT2Zmc2V0KTsKICAgICAgfQogICAgICBpZiAoaXNOdWxsQXdhcmUpIHsKICAgICAgICByZXN1bHQgPSBfaGVscGVyLndyYXBJbkxvY2F0ZWRQcm9ibGVtKAogICAgICAgICAgICBfaGVscGVyLnRvVmFsdWUocmVzdWx0KSwKICAgICAgICAgICAgbWVzc2FnZUNhbnRVc2VQcmVmaXhXaXRoTnVsbEF3YXJlLndpdGhMb2NhdGlvbigKICAgICAgICAgICAgICAgIF9oZWxwZXIudXJpLCBmaWxlT2Zmc2V0LCBsZW5ndGhGb3JUb2tlbih0b2tlbikpKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGJ1aWxkU2ltcGxlUmVhZCgpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZUludmFsaWRSZWFkKCkgewogICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRQcm9ibGVtKAogICAgICAgIG1lc3NhZ2VDYW50VXNlUHJlZml4QXNFeHByZXNzaW9uLCBmaWxlT2Zmc2V0LCBsZW5ndGhGb3JUb2tlbih0b2tlbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZUludmFsaWRXcml0ZShFeHByZXNzaW9uIHZhbHVlKSA9PiBfbWFrZUludmFsaWRSZWFkKCk7CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGUoIiwgcHJlZml4OiAiKTsKICAgIHNpbmsud3JpdGUocHJlZml4Lm5hbWUpOwogICAgc2luay53cml0ZSgiLCBkZWZlcnJlZDogIik7CiAgICBzaW5rLndyaXRlKHByZWZpeC5kZWZlcnJlZCk7CiAgfQp9CgpjbGFzcyBVbmV4cGVjdGVkUXVhbGlmaWVkVXNlR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIHsKICBmaW5hbCBHZW5lcmF0b3IgcHJlZml4R2VuZXJhdG9yOwoKICBmaW5hbCBib29sIGlzVW5yZXNvbHZlZDsKCiAgVW5leHBlY3RlZFF1YWxpZmllZFVzZUdlbmVyYXRvcihFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4sCiAgICAgIHRoaXMucHJlZml4R2VuZXJhdG9yLCB0aGlzLmlzVW5yZXNvbHZlZCkKICAgICAgOiBzdXBlcihoZWxwZXIsIHRva2VuKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfcGxhaW5OYW1lRm9yUmVhZCB7CiAgICByZXR1cm4gIiR7cHJlZml4R2VuZXJhdG9yLl9wbGFpbk5hbWVGb3JSZWFkfS4ke3Rva2VuLmxleGVtZX0iOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfZGVidWdOYW1lID0+ICJVbmV4cGVjdGVkUXVhbGlmaWVkVXNlR2VuZXJhdG9yIjsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZFNpbXBsZVJlYWQoKSA9PiBfbWFrZUludmFsaWRSZWFkKCk7CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBfaGVscGVyLndyYXBTeW50aGV0aWNFeHByZXNzaW9uKAogICAgICAgIF9oZWxwZXIudGhyb3dOb1N1Y2hNZXRob2RFcnJvcigKICAgICAgICAgICAgX2ZvcmVzdC5jcmVhdGVOdWxsTGl0ZXJhbChudWxsKS4uZmlsZU9mZnNldCA9IG9mZnNldCwKICAgICAgICAgICAgX3BsYWluTmFtZUZvclJlYWQsCiAgICAgICAgICAgIGFyZ3VtZW50cywKICAgICAgICAgICAgZmlsZU9mZnNldCksCiAgICAgICAgZmlsZU9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlQnVpbGRlciBidWlsZFR5cGVXaXRoUmVzb2x2ZWRBcmd1bWVudHMoTGlzdDxVbnJlc29sdmVkVHlwZT4gYXJndW1lbnRzKSB7CiAgICBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZywgU3RyaW5nKT4gdGVtcGxhdGUgPSBpc1VucmVzb2x2ZWQKICAgICAgICA/IHRlbXBsYXRlVW5yZXNvbHZlZFByZWZpeEluVHlwZUFubm90YXRpb24KICAgICAgICA6IHRlbXBsYXRlTm90QVByZWZpeEluVHlwZUFubm90YXRpb247CiAgICBOYW1lZFR5cGVCdWlsZGVyIHJlc3VsdCA9IG5ldyBOYW1lZFR5cGVCdWlsZGVyKF9wbGFpbk5hbWVGb3JSZWFkLCBudWxsKTsKICAgIE1lc3NhZ2UgbWVzc2FnZSA9CiAgICAgICAgdGVtcGxhdGUud2l0aEFyZ3VtZW50cyhwcmVmaXhHZW5lcmF0b3IudG9rZW4ubGV4ZW1lLCB0b2tlbi5sZXhlbWUpOwogICAgX2hlbHBlci5saWJyYXJ5QnVpbGRlci5hZGRQcm9ibGVtKAogICAgICAgIG1lc3NhZ2UsCiAgICAgICAgb2Zmc2V0Rm9yVG9rZW4ocHJlZml4R2VuZXJhdG9yLnRva2VuKSwKICAgICAgICBsZW5ndGhPZlNwYW4ocHJlZml4R2VuZXJhdG9yLnRva2VuLCB0b2tlbiksCiAgICAgICAgX3VyaSk7CiAgICByZXN1bHQuYmluZChyZXN1bHQuYnVpbGRJbnZhbGlkVHlwZShtZXNzYWdlLndpdGhMb2NhdGlvbigKICAgICAgICBfdXJpLAogICAgICAgIG9mZnNldEZvclRva2VuKHByZWZpeEdlbmVyYXRvci50b2tlbiksCiAgICAgICAgbGVuZ3RoT2ZTcGFuKHByZWZpeEdlbmVyYXRvci50b2tlbiwgdG9rZW4pKSkpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGUoIiwgcHJlZml4R2VuZXJhdG9yOiAiKTsKICAgIHByZWZpeEdlbmVyYXRvci5wcmludE9uKHNpbmspOwogIH0KfQoKY2xhc3MgUGFyc2VyRXJyb3JHZW5lcmF0b3IgZXh0ZW5kcyBHZW5lcmF0b3IgewogIGZpbmFsIE1lc3NhZ2UgbWVzc2FnZTsKCiAgUGFyc2VyRXJyb3JHZW5lcmF0b3IoCiAgICAgIEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwgdGhpcy5tZXNzYWdlKQogICAgICA6IHN1cGVyKGhlbHBlciwgdG9rZW4pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9wbGFpbk5hbWVGb3JSZWFkID0+ICIjcGFyc2VyLWVycm9yIjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfZGVidWdOYW1lID0+ICJQYXJzZXJFcnJvckdlbmVyYXRvciI7CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHt9CgogIEV4cHJlc3Npb24gYnVpbGRQcm9ibGVtKCkgewogICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRQcm9ibGVtKG1lc3NhZ2UsIGZpbGVPZmZzZXQsIG5vTGVuZ3RoLAogICAgICAgIHN1cHByZXNzTWVzc2FnZTogdHJ1ZSk7CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkU2ltcGxlUmVhZCgpID0+IGJ1aWxkUHJvYmxlbSgpOwoKICBFeHByZXNzaW9uIGJ1aWxkQXNzaWdubWVudChFeHByZXNzaW9uIHZhbHVlLCB7Ym9vbCB2b2lkQ29udGV4dDogZmFsc2V9KSB7CiAgICByZXR1cm4gYnVpbGRQcm9ibGVtKCk7CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkTnVsbEF3YXJlQXNzaWdubWVudCgKICAgICAgRXhwcmVzc2lvbiB2YWx1ZSwgRGFydFR5cGUgdHlwZSwgaW50IG9mZnNldCwKICAgICAge2Jvb2wgdm9pZENvbnRleHQ6IGZhbHNlfSkgewogICAgcmV0dXJuIGJ1aWxkUHJvYmxlbSgpOwogIH0KCiAgRXhwcmVzc2lvbiBidWlsZENvbXBvdW5kQXNzaWdubWVudChOYW1lIGJpbmFyeU9wZXJhdG9yLCBFeHByZXNzaW9uIHZhbHVlLAogICAgICB7aW50IG9mZnNldDogVHJlZU5vZGUubm9PZmZzZXQsCiAgICAgIGJvb2wgdm9pZENvbnRleHQ6IGZhbHNlLAogICAgICBQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0LAogICAgICBib29sIGlzUHJlSW5jRGVjOiBmYWxzZSwKICAgICAgYm9vbCBpc1Bvc3RJbmNEZWM6IGZhbHNlfSkgewogICAgcmV0dXJuIGJ1aWxkUHJvYmxlbSgpOwogIH0KCiAgRXhwcmVzc2lvbiBidWlsZFByZWZpeEluY3JlbWVudChOYW1lIGJpbmFyeU9wZXJhdG9yLAogICAgICB7aW50IG9mZnNldDogVHJlZU5vZGUubm9PZmZzZXQsCiAgICAgIGJvb2wgdm9pZENvbnRleHQ6IGZhbHNlLAogICAgICBQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0fSkgewogICAgcmV0dXJuIGJ1aWxkUHJvYmxlbSgpOwogIH0KCiAgRXhwcmVzc2lvbiBidWlsZFBvc3RmaXhJbmNyZW1lbnQoTmFtZSBiaW5hcnlPcGVyYXRvciwKICAgICAge2ludCBvZmZzZXQ6IFRyZWVOb2RlLm5vT2Zmc2V0LAogICAgICBib29sIHZvaWRDb250ZXh0OiBmYWxzZSwKICAgICAgUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldH0pIHsKICAgIHJldHVybiBidWlsZFByb2JsZW0oKTsKICB9CgogIEV4cHJlc3Npb24gX21ha2VJbnZhbGlkUmVhZCgpID0+IGJ1aWxkUHJvYmxlbSgpOwoKICBFeHByZXNzaW9uIF9tYWtlSW52YWxpZFdyaXRlKEV4cHJlc3Npb24gdmFsdWUpID0+IGJ1aWxkUHJvYmxlbSgpOwoKICBJbml0aWFsaXplciBidWlsZEZpZWxkSW5pdGlhbGl6ZXIoTWFwPFN0cmluZywgaW50PiBpbml0aWFsaXplZEZpZWxkcykgewogICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRJbnZhbGlkSW5pdGlhbGl6ZXIoCiAgICAgICAgX2hlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihidWlsZFByb2JsZW0oKSkpOwogIH0KCiAgRXhwcmVzc2lvbiBkb0ludm9jYXRpb24oaW50IG9mZnNldCwgQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIGJ1aWxkUHJvYmxlbSgpOwogIH0KCiAgRXhwcmVzc2lvbiBidWlsZFByb3BlcnR5QWNjZXNzKAogICAgICBJbmNvbXBsZXRlU2VuZEdlbmVyYXRvciBzZW5kLCBpbnQgb3BlcmF0b3JPZmZzZXQsIGJvb2wgaXNOdWxsQXdhcmUpIHsKICAgIHJldHVybiBidWlsZFByb2JsZW0oKTsKICB9CgogIFR5cGVCdWlsZGVyIGJ1aWxkVHlwZVdpdGhSZXNvbHZlZEFyZ3VtZW50cyhMaXN0PFVucmVzb2x2ZWRUeXBlPiBhcmd1bWVudHMpIHsKICAgIE5hbWVkVHlwZUJ1aWxkZXIgcmVzdWx0ID0gbmV3IE5hbWVkVHlwZUJ1aWxkZXIodG9rZW4ubGV4ZW1lLCBudWxsKTsKICAgIF9oZWxwZXIubGlicmFyeUJ1aWxkZXIuYWRkUHJvYmxlbShtZXNzYWdlLCBmaWxlT2Zmc2V0LCBub0xlbmd0aCwgX3VyaSk7CiAgICByZXN1bHQuYmluZChyZXN1bHQKICAgICAgICAuYnVpbGRJbnZhbGlkVHlwZShtZXNzYWdlLndpdGhMb2NhdGlvbihfdXJpLCBmaWxlT2Zmc2V0LCBub0xlbmd0aCkpKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBFeHByZXNzaW9uIHF1YWxpZmllZExvb2t1cChUb2tlbiBuYW1lKSB7CiAgICByZXR1cm4gYnVpbGRQcm9ibGVtKCk7CiAgfQoKICBFeHByZXNzaW9uIGludm9rZUNvbnN0cnVjdG9yKAogICAgICBMaXN0PFVucmVzb2x2ZWRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICBTdHJpbmcgbmFtZSwKICAgICAgQXJndW1lbnRzIGFyZ3VtZW50cywKICAgICAgVG9rZW4gbmFtZVRva2VuLAogICAgICBUb2tlbiBuYW1lTGFzdFRva2VuLAogICAgICBDb25zdG5lc3MgY29uc3RuZXNzKSB7CiAgICByZXR1cm4gYnVpbGRQcm9ibGVtKCk7CiAgfQp9CgovLy8gQSBbVGhpc0FjY2Vzc0dlbmVyYXRvcl0gcmVwcmVzZW50cyBhIHN1YmV4cHJlc3Npb24gd2hvc2UgcHJlZml4IGlzIGB0aGlzYAovLy8gb3IgYHN1cGVyYC4KLy8vCi8vLyBGb3IgaW5zdGFuY2UKLy8vCi8vLyAgIGNsYXNzIEMgewovLy8gICAgIHZhciBiID0gdGhpcy5jOyAvLyBhIFRoaXNBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYHRoaXNgLgovLy8gICAgIHZhciBjOwovLy8gICAgIEModGhpcy5jKSA6ICAgICAvLyBhIFRoaXNBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYHRoaXNgLgovLy8gICAgICAgdGhpcy5iID0gYzsgICAvLyBhIFRoaXNBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYHRoaXNgLgovLy8gICAgIG1ldGhvZCgpIHsKLy8vICAgICAgIHRoaXMuYjsgICAgICAgLy8gYSBUaGlzQWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGB0aGlzYC4KLy8vICAgICAgIHN1cGVyLmIoKTsgICAgLy8gYSBUaGlzQWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBzdXBlcmAuCi8vLyAgICAgICB0aGlzLmIgPSBjOyAgIC8vIGEgVGhpc0FjY2Vzc0dlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgdGhpc2AuCi8vLyAgICAgICB0aGlzLmIgKz0gYzsgIC8vIGEgVGhpc0FjY2Vzc0dlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgdGhpc2AuCi8vLyAgICAgfQovLy8gICB9Ci8vLwovLy8gSWYgdGhpcyBgdGhpc2Agb2NjdXJzIGluIGFuIGluc3RhbmNlIG1lbWJlciBvbiBhbiBleHRlbnNpb24gZGVjbGFyYXRpb24sCi8vLyBhIFtSZWFkT25seUFjY2Vzc0dlbmVyYXRvcl0gaXMgY3JlYXRlZCBpbnN0ZWFkLgovLy8KY2xhc3MgVGhpc0FjY2Vzc0dlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvciB7CiAgLy8vIGB0cnVlYCBpZiB0aGlzIGFjY2VzcyBpcyBpbiBhbiBpbml0aWFsaXplciBsaXN0LgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UgaW4gYDxpbml0PmAgaW4KICAvLy8KICAvLy8gICAgY2xhc3MgQ2xhc3MgewogIC8vLyAgICAgIENsYXNzKCkgOiA8aW5pdD47CiAgLy8vICAgIH0KICAvLy8KICBmaW5hbCBib29sIGlzSW5pdGlhbGl6ZXI7CgogIC8vLyBgdHJ1ZWAgaWYgdGhpcyBhY2Nlc3MgaXMgaW4gYSBmaWVsZCBpbml0aWFsaXplciBlaXRoZXIgZGlyZWN0bHkgb3Igd2l0aGluCiAgLy8vIGFuIGluaXRpYWxpemVyIGxpc3QuCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBpbiBgPGluaXQ+YCBpbgogIC8vLwogIC8vLyAgICB2YXIgZm9vID0gPGluaXQ+OwogIC8vLyAgICBjbGFzcyBDbGFzcyB7CiAgLy8vICAgICAgdmFyIGJhciA9IDxpbml0PjsKICAvLy8gICAgICBDbGFzcygpIDogPGluaXQ+OwogIC8vLyAgICB9CiAgLy8vCiAgZmluYWwgYm9vbCBpbkZpZWxkSW5pdGlhbGl6ZXI7CgogIC8vLyBgdHJ1ZWAgaWYgdGhpcyBzdWJleHByZXNzaW9uIHJlcHJlc2VudHMgYSBgc3VwZXJgIHByZWZpeC4KICBmaW5hbCBib29sIGlzU3VwZXI7CgogIFRoaXNBY2Nlc3NHZW5lcmF0b3IoRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsIFRva2VuIHRva2VuLAogICAgICB0aGlzLmlzSW5pdGlhbGl6ZXIsIHRoaXMuaW5GaWVsZEluaXRpYWxpemVyLAogICAgICB7dGhpcy5pc1N1cGVyOiBmYWxzZX0pCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbik7CgogIFN0cmluZyBnZXQgX3BsYWluTmFtZUZvclJlYWQgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKAogICAgICAgICIke2lzU3VwZXIgPyAnc3VwZXInIDogJ3RoaXMnfS5wbGFpbk5hbWVGb3JSZWFkIiwgZmlsZU9mZnNldCwgX3VyaSk7CiAgfQoKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIlRoaXNBY2Nlc3NHZW5lcmF0b3IiOwoKICBFeHByZXNzaW9uIGJ1aWxkU2ltcGxlUmVhZCgpIHsKICAgIGlmICghaXNTdXBlcikgewogICAgICBpZiAoaW5GaWVsZEluaXRpYWxpemVyKSB7CiAgICAgICAgcmV0dXJuIGJ1aWxkRmllbGRJbml0aWFsaXplckVycm9yKG51bGwpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBfZm9yZXN0LmNyZWF0ZVRoaXNFeHByZXNzaW9uKHRva2VuKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRQcm9ibGVtKAogICAgICAgICAgbWVzc2FnZVN1cGVyQXNFeHByZXNzaW9uLCBmaWxlT2Zmc2V0LCBsZW5ndGhGb3JUb2tlbih0b2tlbikpOwogICAgfQogIH0KCiAgRXhwcmVzc2lvbiBidWlsZEZpZWxkSW5pdGlhbGl6ZXJFcnJvcihNYXA8U3RyaW5nLCBpbnQ+IGluaXRpYWxpemVkRmllbGRzKSB7CiAgICBTdHJpbmcga2V5d29yZCA9IGlzU3VwZXIgPyAic3VwZXIiIDogInRoaXMiOwogICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRQcm9ibGVtKAogICAgICAgIHRlbXBsYXRlVGhpc09yU3VwZXJBY2Nlc3NJbkZpZWxkSW5pdGlhbGl6ZXIud2l0aEFyZ3VtZW50cyhrZXl3b3JkKSwKICAgICAgICBmaWxlT2Zmc2V0LAogICAgICAgIGtleXdvcmQubGVuZ3RoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyIGJ1aWxkRmllbGRJbml0aWFsaXplcihNYXA8U3RyaW5nLCBpbnQ+IGluaXRpYWxpemVkRmllbGRzKSB7CiAgICBFeHByZXNzaW9uIGVycm9yID0gX2hlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbigKICAgICAgICBidWlsZEZpZWxkSW5pdGlhbGl6ZXJFcnJvcihpbml0aWFsaXplZEZpZWxkcykpOwogICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRJbnZhbGlkSW5pdGlhbGl6ZXIoZXJyb3IsIGVycm9yLmZpbGVPZmZzZXQpOwogIH0KCiAgYnVpbGRQcm9wZXJ0eUFjY2VzcygKICAgICAgSW5jb21wbGV0ZVNlbmRHZW5lcmF0b3Igc2VuZCwgaW50IG9wZXJhdG9yT2Zmc2V0LCBib29sIGlzTnVsbEF3YXJlKSB7CiAgICBOYW1lIG5hbWUgPSBzZW5kLm5hbWU7CiAgICBBcmd1bWVudHMgYXJndW1lbnRzID0gc2VuZC5hcmd1bWVudHM7CiAgICBpbnQgb2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4oc2VuZC50b2tlbik7CiAgICBpZiAoaXNJbml0aWFsaXplciAmJiBzZW5kIGlzIFNlbmRBY2Nlc3NHZW5lcmF0b3IpIHsKICAgICAgaWYgKGlzTnVsbEF3YXJlKSB7CiAgICAgICAgX2hlbHBlci5hZGRQcm9ibGVtKAogICAgICAgICAgICBtZXNzYWdlSW52YWxpZFVzZU9mTnVsbEF3YXJlQWNjZXNzLCBvcGVyYXRvck9mZnNldCwgMik7CiAgICAgIH0KICAgICAgcmV0dXJuIGJ1aWxkQ29uc3RydWN0b3JJbml0aWFsaXplcihvZmZzZXQsIG5hbWUsIGFyZ3VtZW50cyk7CiAgICB9CiAgICBpZiAoaW5GaWVsZEluaXRpYWxpemVyICYmICFpc0luaXRpYWxpemVyKSB7CiAgICAgIHJldHVybiBidWlsZEZpZWxkSW5pdGlhbGl6ZXJFcnJvcihudWxsKTsKICAgIH0KICAgIE1lbWJlciBnZXR0ZXIgPSBfaGVscGVyLmxvb2t1cEluc3RhbmNlTWVtYmVyKG5hbWUsIGlzU3VwZXI6IGlzU3VwZXIpOwogICAgaWYgKHNlbmQgaXMgU2VuZEFjY2Vzc0dlbmVyYXRvcikgewogICAgICAvLyBOb3RpY2UgdGhhdCAndGhpcycgb3IgJ3N1cGVyJyBjYW4ndCBiZSBudWxsLiBTbyB3ZSBjYW4gaWdub3JlIHRoZQogICAgICAvLyB2YWx1ZSBvZiBbaXNOdWxsQXdhcmVdLgogICAgICBpZiAoZ2V0dGVyID09IG51bGwpIHsKICAgICAgICBfaGVscGVyLndhcm5VbnJlc29sdmVkTWV0aG9kKG5hbWUsIG9mZnNldEZvclRva2VuKHNlbmQudG9rZW4pLAogICAgICAgICAgICBpc1N1cGVyOiBpc1N1cGVyKTsKICAgICAgfQogICAgICByZXR1cm4gX2hlbHBlci5idWlsZE1ldGhvZEludm9jYXRpb24oX2ZvcmVzdC5jcmVhdGVUaGlzRXhwcmVzc2lvbihudWxsKSwKICAgICAgICAgIG5hbWUsIHNlbmQuYXJndW1lbnRzLCBvZmZzZXRGb3JUb2tlbihzZW5kLnRva2VuKSwKICAgICAgICAgIGlzU3VwZXI6IGlzU3VwZXIsIGludGVyZmFjZVRhcmdldDogZ2V0dGVyKTsKICAgIH0gZWxzZSB7CiAgICAgIE1lbWJlciBzZXR0ZXIgPQogICAgICAgICAgX2hlbHBlci5sb29rdXBJbnN0YW5jZU1lbWJlcihuYW1lLCBpc1N1cGVyOiBpc1N1cGVyLCBpc1NldHRlcjogdHJ1ZSk7CiAgICAgIGlmIChpc1N1cGVyKSB7CiAgICAgICAgcmV0dXJuIG5ldyBTdXBlclByb3BlcnR5QWNjZXNzR2VuZXJhdG9yKAogICAgICAgICAgICBfaGVscGVyLAogICAgICAgICAgICAvLyBUT0RPKGFoZSk6IFRoaXMgaXMgbm90IHRoZSAnc3VwZXInIHRva2VuLgogICAgICAgICAgICBzZW5kLnRva2VuLAogICAgICAgICAgICBuYW1lLAogICAgICAgICAgICBnZXR0ZXIsCiAgICAgICAgICAgIHNldHRlcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG5ldyBUaGlzUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IoCiAgICAgICAgICAgIF9oZWxwZXIsCiAgICAgICAgICAgIC8vIFRPRE8oYWhlKTogVGhpcyBpcyBub3QgdGhlICd0aGlzJyB0b2tlbi4KICAgICAgICAgICAgc2VuZC50b2tlbiwKICAgICAgICAgICAgbmFtZSwKICAgICAgICAgICAgZ2V0dGVyLAogICAgICAgICAgICBzZXR0ZXIpOwogICAgICB9CiAgICB9CiAgfQoKICBkb0ludm9jYXRpb24oaW50IG9mZnNldCwgQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgaWYgKGlzSW5pdGlhbGl6ZXIpIHsKICAgICAgcmV0dXJuIGJ1aWxkQ29uc3RydWN0b3JJbml0aWFsaXplcihvZmZzZXQsIG5ldyBOYW1lKCIiKSwgYXJndW1lbnRzKTsKICAgIH0gZWxzZSBpZiAoaXNTdXBlcikgewogICAgICByZXR1cm4gX2hlbHBlci5idWlsZFByb2JsZW0obWVzc2FnZVN1cGVyQXNFeHByZXNzaW9uLCBvZmZzZXQsIG5vTGVuZ3RoKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfaGVscGVyLmJ1aWxkTWV0aG9kSW52b2NhdGlvbigKICAgICAgICAgIF9mb3Jlc3QuY3JlYXRlVGhpc0V4cHJlc3Npb24obnVsbCksIGNhbGxOYW1lLCBhcmd1bWVudHMsIG9mZnNldCwKICAgICAgICAgIGlzSW1wbGljaXRDYWxsOiB0cnVlKTsKICAgIH0KICB9CgogIEluaXRpYWxpemVyIGJ1aWxkQ29uc3RydWN0b3JJbml0aWFsaXplcigKICAgICAgaW50IG9mZnNldCwgTmFtZSBuYW1lLCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICBDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciA9IF9oZWxwZXIubG9va3VwQ29uc3RydWN0b3IobmFtZSwgaXNTdXBlcjogaXNTdXBlcik7CiAgICBMb2NhdGVkTWVzc2FnZSBtZXNzYWdlOwogICAgaWYgKGNvbnN0cnVjdG9yICE9IG51bGwpIHsKICAgICAgbWVzc2FnZSA9IF9oZWxwZXIuY2hlY2tBcmd1bWVudHNGb3JGdW5jdGlvbigKICAgICAgICAgIGNvbnN0cnVjdG9yLmZ1bmN0aW9uLCBhcmd1bWVudHMsIG9mZnNldCwgPFR5cGVQYXJhbWV0ZXI+W10pOwogICAgfSBlbHNlIHsKICAgICAgU3RyaW5nIGZ1bGxOYW1lID0KICAgICAgICAgIF9oZWxwZXIuY29uc3RydWN0b3JOYW1lRm9yRGlhZ25vc3RpY3MobmFtZS5uYW1lLCBpc1N1cGVyOiBpc1N1cGVyKTsKICAgICAgbWVzc2FnZSA9IChpc1N1cGVyCiAgICAgICAgICAgICAgPyB0ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb0NvbnN0cnVjdG9yCiAgICAgICAgICAgICAgOiB0ZW1wbGF0ZUNvbnN0cnVjdG9yTm90Rm91bmQpCiAgICAgICAgICAud2l0aEFyZ3VtZW50cyhmdWxsTmFtZSkKICAgICAgICAgIC53aXRoTG9jYXRpb24oX3VyaSwgZmlsZU9mZnNldCwgbGVuZ3RoRm9yVG9rZW4odG9rZW4pKTsKICAgIH0KICAgIGlmIChtZXNzYWdlICE9IG51bGwpIHsKICAgICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRJbnZhbGlkSW5pdGlhbGl6ZXIoX2hlbHBlci53cmFwU3ludGhldGljRXhwcmVzc2lvbigKICAgICAgICAgIF9oZWxwZXIudGhyb3dOb1N1Y2hNZXRob2RFcnJvcigKICAgICAgICAgICAgICBfZm9yZXN0LmNyZWF0ZU51bGxMaXRlcmFsKG51bGwpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0LAogICAgICAgICAgICAgIF9oZWxwZXIuY29uc3RydWN0b3JOYW1lRm9yRGlhZ25vc3RpY3MobmFtZS5uYW1lLAogICAgICAgICAgICAgICAgICBpc1N1cGVyOiBpc1N1cGVyKSwKICAgICAgICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgICAgICAgb2Zmc2V0LAogICAgICAgICAgICAgIGlzU3VwZXI6IGlzU3VwZXIsCiAgICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZSksCiAgICAgICAgICBvZmZzZXQpKTsKICAgIH0gZWxzZSBpZiAoaXNTdXBlcikgewogICAgICByZXR1cm4gX2hlbHBlci5idWlsZFN1cGVySW5pdGlhbGl6ZXIoCiAgICAgICAgICBmYWxzZSwgY29uc3RydWN0b3IsIGFyZ3VtZW50cywgb2Zmc2V0KTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfaGVscGVyLmJ1aWxkUmVkaXJlY3RpbmdJbml0aWFsaXplcigKICAgICAgICAgIGNvbnN0cnVjdG9yLCBhcmd1bWVudHMsIG9mZnNldCk7CiAgICB9CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkQXNzaWdubWVudChFeHByZXNzaW9uIHZhbHVlLCB7Ym9vbCB2b2lkQ29udGV4dDogZmFsc2V9KSB7CiAgICByZXR1cm4gYnVpbGRBc3NpZ25tZW50RXJyb3IoKTsKICB9CgogIEV4cHJlc3Npb24gYnVpbGROdWxsQXdhcmVBc3NpZ25tZW50KAogICAgICBFeHByZXNzaW9uIHZhbHVlLCBEYXJ0VHlwZSB0eXBlLCBpbnQgb2Zmc2V0LAogICAgICB7Ym9vbCB2b2lkQ29udGV4dDogZmFsc2V9KSB7CiAgICByZXR1cm4gYnVpbGRBc3NpZ25tZW50RXJyb3IoKTsKICB9CgogIEV4cHJlc3Npb24gYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQoTmFtZSBiaW5hcnlPcGVyYXRvciwgRXhwcmVzc2lvbiB2YWx1ZSwKICAgICAge2ludCBvZmZzZXQ6IFRyZWVOb2RlLm5vT2Zmc2V0LAogICAgICBib29sIHZvaWRDb250ZXh0OiBmYWxzZSwKICAgICAgUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldCwKICAgICAgYm9vbCBpc1ByZUluY0RlYzogZmFsc2UsCiAgICAgIGJvb2wgaXNQb3N0SW5jRGVjOiBmYWxzZX0pIHsKICAgIHJldHVybiBidWlsZEFzc2lnbm1lbnRFcnJvcigpOwogIH0KCiAgRXhwcmVzc2lvbiBidWlsZFByZWZpeEluY3JlbWVudChOYW1lIGJpbmFyeU9wZXJhdG9yLAogICAgICB7aW50IG9mZnNldDogVHJlZU5vZGUubm9PZmZzZXQsCiAgICAgIGJvb2wgdm9pZENvbnRleHQ6IGZhbHNlLAogICAgICBQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0fSkgewogICAgcmV0dXJuIGJ1aWxkQXNzaWdubWVudEVycm9yKCk7CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkUG9zdGZpeEluY3JlbWVudChOYW1lIGJpbmFyeU9wZXJhdG9yLAogICAgICB7aW50IG9mZnNldDogVHJlZU5vZGUubm9PZmZzZXQsCiAgICAgIGJvb2wgdm9pZENvbnRleHQ6IGZhbHNlLAogICAgICBQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0fSkgewogICAgcmV0dXJuIGJ1aWxkQXNzaWdubWVudEVycm9yKCk7CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkQXNzaWdubWVudEVycm9yKCkgewogICAgcmV0dXJuIF9oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oX2hlbHBlci5idWlsZFByb2JsZW0oCiAgICAgICAgaXNTdXBlciA/IG1lc3NhZ2VDYW5ub3RBc3NpZ25Ub1N1cGVyIDogbWVzc2FnZU5vdEFuTHZhbHVlLAogICAgICAgIGZpbGVPZmZzZXQsCiAgICAgICAgdG9rZW4ubGVuZ3RoKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlKCIsIGlzSW5pdGlhbGl6ZXI6ICIpOwogICAgc2luay53cml0ZShpc0luaXRpYWxpemVyKTsKICAgIHNpbmsud3JpdGUoIiwgaW5GaWVsZEluaXRpYWxpemVyOiAiKTsKICAgIHNpbmsud3JpdGUoaW5GaWVsZEluaXRpYWxpemVyKTsKICAgIHNpbmsud3JpdGUoIiwgaXNTdXBlcjogIik7CiAgICBzaW5rLndyaXRlKGlzU3VwZXIpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgSW5jb21wbGV0ZVNlbmRHZW5lcmF0b3IgaW1wbGVtZW50cyBHZW5lcmF0b3IgewogIE5hbWUgZ2V0IG5hbWU7CgogIHdpdGhSZWNlaXZlcihPYmplY3QgcmVjZWl2ZXIsIGludCBvcGVyYXRvck9mZnNldCwge2Jvb2wgaXNOdWxsQXdhcmV9KTsKCiAgQXJndW1lbnRzIGdldCBhcmd1bWVudHMgPT4gbnVsbDsKfQoKY2xhc3MgSW5jb21wbGV0ZUVycm9yR2VuZXJhdG9yIGV4dGVuZHMgRXJyb25lb3VzRXhwcmVzc2lvbkdlbmVyYXRvcgogICAgd2l0aCBJbmNvbXBsZXRlU2VuZEdlbmVyYXRvciB7CiAgZmluYWwgTWVzc2FnZSBtZXNzYWdlOwoKICBJbmNvbXBsZXRlRXJyb3JHZW5lcmF0b3IoCiAgICAgIEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwgdGhpcy5tZXNzYWdlKQogICAgICA6IHN1cGVyKGhlbHBlciwgdG9rZW4pOwoKICBOYW1lIGdldCBuYW1lID0+IG51bGw7CgogIFN0cmluZyBnZXQgX3BsYWluTmFtZUZvclJlYWQgPT4gdG9rZW4ubGV4ZW1lOwoKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIkluY29tcGxldGVFcnJvckdlbmVyYXRvciI7CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGRFcnJvcihBcmd1bWVudHMgYXJndW1lbnRzLAogICAgICB7Ym9vbCBpc0dldHRlcjogZmFsc2UsIGJvb2wgaXNTZXR0ZXI6IGZhbHNlLCBpbnQgb2Zmc2V0fSkgewogICAgaW50IGxlbmd0aCA9IG5vTGVuZ3RoOwogICAgaWYgKG9mZnNldCA9PSBudWxsKSB7CiAgICAgIG9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICAgIGxlbmd0aCA9IGxlbmd0aEZvclRva2VuKHRva2VuKTsKICAgIH0KICAgIHJldHVybiBfaGVscGVyLmJ1aWxkUHJvYmxlbShtZXNzYWdlLCBvZmZzZXQsIGxlbmd0aCk7CiAgfQoKICBAb3ZlcnJpZGUKICBkb0ludm9jYXRpb24oaW50IG9mZnNldCwgQXJndW1lbnRzIGFyZ3VtZW50cykgPT4gdGhpczsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZFNpbXBsZVJlYWQoKSB7CiAgICByZXR1cm4gYnVpbGRFcnJvcihfZm9yZXN0LmNyZWF0ZUFyZ3VtZW50c0VtcHR5KGZpbGVPZmZzZXQpLCBpc0dldHRlcjogdHJ1ZSkKICAgICAgLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGUoIiwgbWVzc2FnZTogIik7CiAgICBzaW5rLndyaXRlKG1lc3NhZ2UuY29kZS5uYW1lKTsKICB9Cn0KCi8vIFRPRE8oYWhlKTogUmVuYW1lIHRvIFNlbmRHZW5lcmF0b3IuCmNsYXNzIFNlbmRBY2Nlc3NHZW5lcmF0b3IgZXh0ZW5kcyBHZW5lcmF0b3Igd2l0aCBJbmNvbXBsZXRlU2VuZEdlbmVyYXRvciB7CiAgQG92ZXJyaWRlCiAgZmluYWwgTmFtZSBuYW1lOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBBcmd1bWVudHMgYXJndW1lbnRzOwoKICBTZW5kQWNjZXNzR2VuZXJhdG9yKAogICAgICBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4sIHRoaXMubmFtZSwgdGhpcy5hcmd1bWVudHMpCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbikgewogICAgYXNzZXJ0KGFyZ3VtZW50cyAhPSBudWxsKTsKICB9CgogIFN0cmluZyBnZXQgX3BsYWluTmFtZUZvclJlYWQgPT4gbmFtZS5uYW1lOwoKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIlNlbmRBY2Nlc3NHZW5lcmF0b3IiOwoKICBFeHByZXNzaW9uIGJ1aWxkU2ltcGxlUmVhZCgpIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgiYnVpbGRTaW1wbGVSZWFkIiwgZmlsZU9mZnNldCwgX3VyaSk7CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkQXNzaWdubWVudChFeHByZXNzaW9uIHZhbHVlLCB7Ym9vbCB2b2lkQ29udGV4dDogZmFsc2V9KSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoImJ1aWxkQXNzaWdubWVudCIsIGZpbGVPZmZzZXQsIF91cmkpOwogIH0KCiAgd2l0aFJlY2VpdmVyKE9iamVjdCByZWNlaXZlciwgaW50IG9wZXJhdG9yT2Zmc2V0LCB7Ym9vbCBpc051bGxBd2FyZTogZmFsc2V9KSB7CiAgICBpZiAocmVjZWl2ZXIgaXMgR2VuZXJhdG9yKSB7CiAgICAgIHJldHVybiByZWNlaXZlci5idWlsZFByb3BlcnR5QWNjZXNzKHRoaXMsIG9wZXJhdG9yT2Zmc2V0LCBpc051bGxBd2FyZSk7CiAgICB9CiAgICByZXR1cm4gX2hlbHBlci5idWlsZE1ldGhvZEludm9jYXRpb24oCiAgICAgICAgX2hlbHBlci50b1ZhbHVlKHJlY2VpdmVyKSwgbmFtZSwgYXJndW1lbnRzLCBmaWxlT2Zmc2V0LAogICAgICAgIGlzTnVsbEF3YXJlOiBpc051bGxBd2FyZSk7CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkTnVsbEF3YXJlQXNzaWdubWVudCgKICAgICAgRXhwcmVzc2lvbiB2YWx1ZSwgRGFydFR5cGUgdHlwZSwgaW50IG9mZnNldCwKICAgICAge2Jvb2wgdm9pZENvbnRleHQ6IGZhbHNlfSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJidWlsZE51bGxBd2FyZUFzc2lnbm1lbnQiLCBvZmZzZXQsIF91cmkpOwogIH0KCiAgRXhwcmVzc2lvbiBidWlsZENvbXBvdW5kQXNzaWdubWVudChOYW1lIGJpbmFyeU9wZXJhdG9yLCBFeHByZXNzaW9uIHZhbHVlLAogICAgICB7aW50IG9mZnNldDogVHJlZU5vZGUubm9PZmZzZXQsCiAgICAgIGJvb2wgdm9pZENvbnRleHQ6IGZhbHNlLAogICAgICBQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0LAogICAgICBib29sIGlzUHJlSW5jRGVjOiBmYWxzZSwKICAgICAgYm9vbCBpc1Bvc3RJbmNEZWM6IGZhbHNlfSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJidWlsZENvbXBvdW5kQXNzaWdubWVudCIsIG9mZnNldCA/PyBmaWxlT2Zmc2V0LCBfdXJpKTsKICB9CgogIEV4cHJlc3Npb24gYnVpbGRQcmVmaXhJbmNyZW1lbnQoTmFtZSBiaW5hcnlPcGVyYXRvciwKICAgICAge2ludCBvZmZzZXQ6IFRyZWVOb2RlLm5vT2Zmc2V0LAogICAgICBib29sIHZvaWRDb250ZXh0OiBmYWxzZSwKICAgICAgUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldH0pIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgiYnVpbGRQcmVmaXhJbmNyZW1lbnQiLCBvZmZzZXQgPz8gZmlsZU9mZnNldCwgX3VyaSk7CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkUG9zdGZpeEluY3JlbWVudChOYW1lIGJpbmFyeU9wZXJhdG9yLAogICAgICB7aW50IG9mZnNldDogVHJlZU5vZGUubm9PZmZzZXQsCiAgICAgIGJvb2wgdm9pZENvbnRleHQ6IGZhbHNlLAogICAgICBQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0fSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJidWlsZFBvc3RmaXhJbmNyZW1lbnQiLCBvZmZzZXQgPz8gZmlsZU9mZnNldCwgX3VyaSk7CiAgfQoKICBFeHByZXNzaW9uIGRvSW52b2NhdGlvbihpbnQgb2Zmc2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoImRvSW52b2NhdGlvbiIsIG9mZnNldCwgX3VyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlKCIsIG5hbWU6ICIpOwogICAgc2luay53cml0ZShuYW1lLm5hbWUpOwogICAgc2luay53cml0ZSgiLCBhcmd1bWVudHM6ICIpOwogICAgQXJndW1lbnRzIG5vZGUgPSBhcmd1bWVudHM7CiAgICBpZiAobm9kZSBpcyBOb2RlKSB7CiAgICAgIHByaW50Tm9kZU9uKG5vZGUsIHNpbmspOwogICAgfSBlbHNlIHsKICAgICAgc2luay53cml0ZShub2RlKTsKICAgIH0KICB9Cn0KCmNsYXNzIEluY29tcGxldGVQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvcgogICAgd2l0aCBJbmNvbXBsZXRlU2VuZEdlbmVyYXRvciB7CiAgZmluYWwgTmFtZSBuYW1lOwoKICBJbmNvbXBsZXRlUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IoCiAgICAgIEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwgdGhpcy5uYW1lKQogICAgICA6IHN1cGVyKGhlbHBlciwgdG9rZW4pOwoKICBTdHJpbmcgZ2V0IF9wbGFpbk5hbWVGb3JSZWFkID0+IG5hbWUubmFtZTsKCiAgU3RyaW5nIGdldCBfZGVidWdOYW1lID0+ICJJbmNvbXBsZXRlUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IiOwoKICBFeHByZXNzaW9uIGJ1aWxkU2ltcGxlUmVhZCgpIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgiYnVpbGRTaW1wbGVSZWFkIiwgZmlsZU9mZnNldCwgX3VyaSk7CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkQXNzaWdubWVudChFeHByZXNzaW9uIHZhbHVlLCB7Ym9vbCB2b2lkQ29udGV4dDogZmFsc2V9KSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoImJ1aWxkQXNzaWdubWVudCIsIGZpbGVPZmZzZXQsIF91cmkpOwogIH0KCiAgd2l0aFJlY2VpdmVyKE9iamVjdCByZWNlaXZlciwgaW50IG9wZXJhdG9yT2Zmc2V0LCB7Ym9vbCBpc051bGxBd2FyZTogZmFsc2V9KSB7CiAgICBpZiAocmVjZWl2ZXIgaXMgR2VuZXJhdG9yKSB7CiAgICAgIHJldHVybiByZWNlaXZlci5idWlsZFByb3BlcnR5QWNjZXNzKHRoaXMsIG9wZXJhdG9yT2Zmc2V0LCBpc051bGxBd2FyZSk7CiAgICB9CiAgICByZXR1cm4gUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IubWFrZShfaGVscGVyLCB0b2tlbiwKICAgICAgICBfaGVscGVyLnRvVmFsdWUocmVjZWl2ZXIpLCBuYW1lLCBudWxsLCBudWxsLCBpc051bGxBd2FyZSk7CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkTnVsbEF3YXJlQXNzaWdubWVudCgKICAgICAgRXhwcmVzc2lvbiB2YWx1ZSwgRGFydFR5cGUgdHlwZSwgaW50IG9mZnNldCwKICAgICAge2Jvb2wgdm9pZENvbnRleHQ6IGZhbHNlfSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJidWlsZE51bGxBd2FyZUFzc2lnbm1lbnQiLCBvZmZzZXQsIF91cmkpOwogIH0KCiAgRXhwcmVzc2lvbiBidWlsZENvbXBvdW5kQXNzaWdubWVudChOYW1lIGJpbmFyeU9wZXJhdG9yLCBFeHByZXNzaW9uIHZhbHVlLAogICAgICB7aW50IG9mZnNldDogVHJlZU5vZGUubm9PZmZzZXQsCiAgICAgIGJvb2wgdm9pZENvbnRleHQ6IGZhbHNlLAogICAgICBQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0LAogICAgICBib29sIGlzUHJlSW5jRGVjOiBmYWxzZSwKICAgICAgYm9vbCBpc1Bvc3RJbmNEZWM6IGZhbHNlfSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJidWlsZENvbXBvdW5kQXNzaWdubWVudCIsIG9mZnNldCA/PyBmaWxlT2Zmc2V0LCBfdXJpKTsKICB9CgogIEV4cHJlc3Npb24gYnVpbGRQcmVmaXhJbmNyZW1lbnQoTmFtZSBiaW5hcnlPcGVyYXRvciwKICAgICAge2ludCBvZmZzZXQ6IFRyZWVOb2RlLm5vT2Zmc2V0LAogICAgICBib29sIHZvaWRDb250ZXh0OiBmYWxzZSwKICAgICAgUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldH0pIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgiYnVpbGRQcmVmaXhJbmNyZW1lbnQiLCBvZmZzZXQgPz8gZmlsZU9mZnNldCwgX3VyaSk7CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkUG9zdGZpeEluY3JlbWVudChOYW1lIGJpbmFyeU9wZXJhdG9yLAogICAgICB7aW50IG9mZnNldDogVHJlZU5vZGUubm9PZmZzZXQsCiAgICAgIGJvb2wgdm9pZENvbnRleHQ6IGZhbHNlLAogICAgICBQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0fSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJidWlsZFBvc3RmaXhJbmNyZW1lbnQiLCBvZmZzZXQgPz8gZmlsZU9mZnNldCwgX3VyaSk7CiAgfQoKICBFeHByZXNzaW9uIGRvSW52b2NhdGlvbihpbnQgb2Zmc2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoImRvSW52b2NhdGlvbiIsIG9mZnNldCwgX3VyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlKCIsIG5hbWU6ICIpOwogICAgc2luay53cml0ZShuYW1lLm5hbWUpOwogIH0KfQoKY2xhc3MgUGFyZW50aGVzaXplZEV4cHJlc3Npb25HZW5lcmF0b3IgZXh0ZW5kcyBSZWFkT25seUFjY2Vzc0dlbmVyYXRvciB7CiAgUGFyZW50aGVzaXplZEV4cHJlc3Npb25HZW5lcmF0b3IoCiAgICAgIEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwgRXhwcmVzc2lvbiBleHByZXNzaW9uKQogICAgICA6IHN1cGVyKGhlbHBlciwgdG9rZW4sIGV4cHJlc3Npb24sIG51bGwpOwoKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uR2VuZXJhdG9yIjsKCiAgQG92ZXJyaWRlCiAgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBzdGFydENvbXBsZXhBc3NpZ25tZW50KEV4cHJlc3Npb24gcmhzKSB7CiAgICByZXR1cm4gU3ludGhldGljV3JhcHBlci53cmFwSWxsZWdhbEFzc2lnbm1lbnQocmhzLAogICAgICAgIGFzc2lnbm1lbnRPZmZzZXQ6IGZpbGVPZmZzZXQpOwogIH0KCiAgRXhwcmVzc2lvbiBfbWFrZUludmFsaWRXcml0ZShFeHByZXNzaW9uIHZhbHVlKSB7CiAgICByZXR1cm4gX2hlbHBlci53cmFwSW52YWxpZFdyaXRlKAogICAgICAgIF9oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oX2hlbHBlci5idWlsZFByb2JsZW0oCiAgICAgICAgICAgIG1lc3NhZ2VDYW5ub3RBc3NpZ25Ub1BhcmVudGhlc2l6ZWRFeHByZXNzaW9uLAogICAgICAgICAgICBmaWxlT2Zmc2V0LAogICAgICAgICAgICBsZW5ndGhGb3JUb2tlbih0b2tlbikpKSwKICAgICAgICBleHByZXNzaW9uLAogICAgICAgIGZpbGVPZmZzZXQpOwogIH0KfQoKRXhwcmVzc2lvbiBtYWtlTGV0KFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIEV4cHJlc3Npb24gYm9keSkgewogIGlmICh2YXJpYWJsZSA9PSBudWxsKSByZXR1cm4gYm9keTsKICByZXR1cm4gbmV3IExldCh2YXJpYWJsZSwgYm9keSk7Cn0KCkV4cHJlc3Npb24gbWFrZUJpbmFyeShFeHByZXNzaW9uIGxlZnQsIE5hbWUgb3BlcmF0b3IsIFByb2NlZHVyZSBpbnRlcmZhY2VUYXJnZXQsCiAgICBFeHByZXNzaW9uIHJpZ2h0LCBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwKICAgIHtpbnQgb2Zmc2V0OiBUcmVlTm9kZS5ub09mZnNldH0pIHsKICByZXR1cm4gbmV3IE1ldGhvZEludm9jYXRpb25KdWRnbWVudChsZWZ0LCBvcGVyYXRvciwKICAgICAgaGVscGVyLmZvcmVzdC5jcmVhdGVBcmd1bWVudHMob2Zmc2V0LCA8RXhwcmVzc2lvbj5bcmlnaHRdKSwKICAgICAgaW50ZXJmYWNlVGFyZ2V0OiBpbnRlcmZhY2VUYXJnZXQpCiAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7Cn0KCkV4cHJlc3Npb24gYnVpbGRJc051bGwoCiAgICBFeHByZXNzaW9uIHZhbHVlLCBpbnQgb2Zmc2V0LCBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlcikgewogIHJldHVybiBtYWtlQmluYXJ5KHZhbHVlLCBlcXVhbHNOYW1lLCBudWxsLAogICAgICBoZWxwZXIuZm9yZXN0LmNyZWF0ZU51bGxMaXRlcmFsKG51bGwpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0LCBoZWxwZXIsCiAgICAgIG9mZnNldDogb2Zmc2V0KTsKfQoKVmFyaWFibGVEZWNsYXJhdGlvbiBtYWtlT3JSZXVzZVZhcmlhYmxlKEV4cHJlc3Npb24gdmFsdWUpIHsKICAvLyBUT0RPOiBEZXZpc2UgYSB3YXkgdG8gcmVtZW1iZXIgaWYgYSB2YXJpYWJsZSBkZWNsYXJhdGlvbiB3YXMgcmV1c2VkCiAgLy8gb3IgaXMgZnJlc2ggKGhlbmNlIG5lZWRzIGEgbGV0IGJpbmRpbmcpLgogIHJldHVybiBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZSh2YWx1ZSk7Cn0KCmludCBhZGp1c3RGb3JJbXBsaWNpdENhbGwoU3RyaW5nIG5hbWUsIGludCBvZmZzZXQpIHsKICAvLyBOb3JtYWxseSB0aGUgb2Zmc2V0IGlzIGF0IHRoZSBzdGFydCBvZiB0aGUgdG9rZW4sIGJ1dCBpbiB0aGlzIGNh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TWVzc2FnZTsKCmltcG9ydCAnLi4vc2NvcGUuZGFydCcgc2hvdyBTY29wZTsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvaW5mZXJlbmNlX2hlbHBlci5kYXJ0JyBzaG93IEluZmVyZW5jZUhlbHBlcjsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvdHlwZV9wcm9tb3Rpb24uZGFydCcgc2hvdyBUeXBlUHJvbW90ZXI7CgppbXBvcnQgJ2NvbnN0bmVzcy5kYXJ0JyBzaG93IENvbnN0bmVzczsKCmltcG9ydCAnZm9yZXN0LmRhcnQnIHNob3cgRm9yZXN0OwoKaW1wb3J0ICdrZXJuZWxfYnVpbGRlci5kYXJ0JyBzaG93IEJ1aWxkZXIsIFByZWZpeEJ1aWxkZXIsIFVucmVzb2x2ZWRUeXBlOwoKaW1wb3J0ICdrZXJuZWxfYXN0X2FwaS5kYXJ0JwogICAgc2hvdwogICAgICAgIEFyZ3VtZW50cywKICAgICAgICBDb25zdHJ1Y3RvciwKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBFeHByZXNzaW9uLAogICAgICAgIEZ1bmN0aW9uTm9kZSwKICAgICAgICBJbml0aWFsaXplciwKICAgICAgICBNZW1iZXIsCiAgICAgICAgTmFtZSwKICAgICAgICBQcm9jZWR1cmUsCiAgICAgICAgU3RhdGljR2V0LAogICAgICAgIFR5cGVQYXJhbWV0ZXIsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbjsKCmltcG9ydCAna2VybmVsX2J1aWxkZXIuZGFydCcKICAgIHNob3cgUHJlZml4QnVpbGRlciwgTGlicmFyeUJ1aWxkZXIsIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXI7CgphYnN0cmFjdCBjbGFzcyBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGltcGxlbWVudHMgSW5mZXJlbmNlSGVscGVyIHsKICBMaWJyYXJ5QnVpbGRlciBnZXQgbGlicmFyeUJ1aWxkZXI7CgogIFR5cGVQcm9tb3RlciBnZXQgdHlwZVByb21vdGVyOwoKICBpbnQgZ2V0IGZ1bmN0aW9uTmVzdGluZ0xldmVsOwoKICBDb25zdGFudENvbnRleHQgZ2V0IGNvbnN0YW50Q29udGV4dDsKCiAgRm9yZXN0IGdldCBmb3Jlc3Q7CgogIGJvb2wgZ2V0IGxlZ2FjeU1vZGU7CgogIENvbnN0cnVjdG9yIGxvb2t1cENvbnN0cnVjdG9yKE5hbWUgbmFtZSwge2Jvb2wgaXNTdXBlcn0pOwoKICBFeHByZXNzaW9uIHRvVmFsdWUobm9kZSk7CgogIE1lbWJlciBsb29rdXBJbnN0YW5jZU1lbWJlcihOYW1lIG5hbWUsIHtib29sIGlzU2V0dGVyLCBib29sIGlzU3VwZXJ9KTsKCiAgc2NvcGVMb29rdXAoU2NvcGUgc2NvcGUsIFN0cmluZyBuYW1lLCBUb2tlbiB0b2tlbiwKICAgICAge2Jvb2wgaXNRdWFsaWZpZWQ6IGZhbHNlLCBQcmVmaXhCdWlsZGVyIHByZWZpeH0pOwoKICBmaW5pc2hTZW5kKE9iamVjdCByZWNlaXZlciwgQXJndW1lbnRzIGFyZ3VtZW50cywgaW50IG9mZnNldCk7CgogIEluaXRpYWxpemVyIGJ1aWxkSW52YWxpZEluaXRpYWxpemVyKEV4cHJlc3Npb24gZXhwcmVzc2lvbiwgW2ludCBvZmZzZXRdKTsKCiAgSW5pdGlhbGl6ZXIgYnVpbGRGaWVsZEluaXRpYWxpemVyKGJvb2wgaXNTeW50aGV0aWMsIFN0cmluZyBuYW1lLAogICAgICBpbnQgZmllbGROYW1lT2Zmc2V0LCBpbnQgYXNzaWdubWVudE9mZnNldCwgRXhwcmVzc2lvbiBleHByZXNzaW9uLAogICAgICB7RGFydFR5cGUgZm9ybWFsVHlwZX0pOwoKICBJbml0aWFsaXplciBidWlsZFN1cGVySW5pdGlhbGl6ZXIoCiAgICAgIGJvb2wgaXNTeW50aGV0aWMsIENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yLCBBcmd1bWVudHMgYXJndW1lbnRzLAogICAgICBbaW50IG9mZnNldF0pOwoKICBJbml0aWFsaXplciBidWlsZFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIoCiAgICAgIENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yLCBBcmd1bWVudHMgYXJndW1lbnRzLAogICAgICBbaW50IGNoYXJPZmZzZXQgPSAtMV0pOwoKICBFeHByZXNzaW9uIGJ1aWxkU3RhdGljSW52b2NhdGlvbihQcm9jZWR1cmUgdGFyZ2V0LCBBcmd1bWVudHMgYXJndW1lbnRzLAogICAgICB7Q29uc3RuZXNzIGNvbnN0bmVzcywgaW50IGNoYXJPZmZzZXR9KTsKCiAgRXhwcmVzc2lvbiBidWlsZEV4dGVuc2lvbk1ldGhvZEludm9jYXRpb24oCiAgICAgIGludCBmaWxlT2Zmc2V0LCBQcm9jZWR1cmUgdGFyZ2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKTsKCiAgRXhwcmVzc2lvbiB0aHJvd05vU3VjaE1ldGhvZEVycm9yKAogICAgICBFeHByZXNzaW9uIHJlY2VpdmVyLCBTdHJpbmcgbmFtZSwgQXJndW1lbnRzIGFyZ3VtZW50cywgaW50IG9mZnNldCwKICAgICAge01lbWJlciBjYW5kaWRhdGUsCiAgICAgIGJvb2wgaXNTdXBlciwKICAgICAgYm9vbCBpc0dldHRlciwKICAgICAgYm9vbCBpc1NldHRlciwKICAgICAgYm9vbCBpc1N0YXRpYywKICAgICAgTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZX0pOwoKICBMb2NhdGVkTWVzc2FnZSBjaGVja0FyZ3VtZW50c0ZvckZ1bmN0aW9uKEZ1bmN0aW9uTm9kZSBmdW5jdGlvbiwKICAgICAgQXJndW1lbnRzIGFyZ3VtZW50cywgaW50IG9mZnNldCwgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycyk7CgogIFN0YXRpY0dldCBtYWtlU3RhdGljR2V0KE1lbWJlciByZWFkVGFyZ2V0LCBUb2tlbiB0b2tlbik7CgogIEV4cHJlc3Npb24gd3JhcEluRGVmZXJyZWRDaGVjaygKICAgICAgRXhwcmVzc2lvbiBleHByZXNzaW9uLCBQcmVmaXhCdWlsZGVyIHByZWZpeCwgaW50IGNoYXJPZmZzZXQpOwoKICBib29sIGlzSWRlbnRpY2FsKE1lbWJlciBtZW1iZXIpOwoKICBFeHByZXNzaW9uIGJ1aWxkTWV0aG9kSW52b2NhdGlvbigKICAgICAgRXhwcmVzc2lvbiByZWNlaXZlciwgTmFtZSBuYW1lLCBBcmd1bWVudHMgYXJndW1lbnRzLCBpbnQgb2Zmc2V0LAogICAgICB7Ym9vbCBpc0NvbnN0YW50RXhwcmVzc2lvbiwKICAgICAgYm9vbCBpc051bGxBd2FyZSwKICAgICAgYm9vbCBpc0ltcGxpY2l0Q2FsbCwKICAgICAgYm9vbCBpc1N1cGVyLAogICAgICBNZW1iZXIgaW50ZXJmYWNlVGFyZ2V0fSk7CgogIEV4cHJlc3Npb24gYnVpbGRDb25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIgdHlwZSwKICAgICAgVG9rZW4gbmFtZVRva2VuLAogICAgICBUb2tlbiBuYW1lTGFzdFRva2VuLAogICAgICBBcmd1bWVudHMgYXJndW1lbnRzLAogICAgICBTdHJpbmcgbmFtZSwKICAgICAgTGlzdDxVbnJlc29sdmVkVHlwZT4gdHlwZUFyZ3VtZW50cywKICAgICAgaW50IGNoYXJPZmZzZXQsCiAgICAgIENvbnN0bmVzcyBjb25zdG5lc3MpOwoKICBVbnJlc29sdmVkVHlwZSB2YWxpZGF0ZVR5cGVVc2UoCiAgICAgIFVucmVzb2x2ZWRUeXBlIHVucmVzb2x2ZWQsIGJvb2wgbm9uSW5zdGFuY2VBY2Nlc3NJc0Vycm9yKTsKCiAgdm9pZCBhZGRQcm9ibGVtRXJyb3JJZkNvbnN0KE1lc3NhZ2UgbWVzc2FnZSwgaW50IGNoYXJPZmZzZXQsIGludCBsZW5ndGgpOwoKICBNZXNzYWdlIHdhcm5VbnJlc29sdmVkR2V0KE5hbWUgbmFtZSwgaW50IGNoYXJPZmZzZXQsIHtib29sIGlzU3VwZXJ9KTsKCiAgTWVzc2FnZSB3YXJuVW5yZXNvbHZlZFNldChOYW1lIG5hbWUsIGludCBjaGFyT2Zmc2V0LCB7Ym9vbCBpc1N1cGVyfSk7CgogIE1lc3NhZ2Ugd2FyblVucmVzb2x2ZWRNZXRob2QoTmFtZSBuYW1lLCBpbnQgY2hhck9mZnNldCwge2Jvb2wgaXNTdXBlcn0pOwoKICB2b2lkIHdhcm5UeXBlQXJndW1lbnRzTWlzbWF0Y2goU3RyaW5nIG5hbWUsIGludCBleHBlY3RlZCwgaW50IGNoYXJPZmZzZXQpOwoKICBFeHByZXNzaW9uIHdyYXBJbkxvY2F0ZWRQcm9ibGVtKEV4cHJlc3Npb24gZXhwcmVzc2lvbiwgTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZSwKICAgICAge0xpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHR9KTsKCiAgRXhwcmVzc2lvbiBldmFsdWF0ZUFyZ3VtZW50c0JlZm9yZSgKICAgICAgQXJndW1lbnRzIGFyZ3VtZW50cywgRXhwcmVzc2lvbiBleHByZXNzaW9uKTsKCiAgRGFydFR5cGUgYnVpbGREYXJ0VHlwZShVbnJlc29sdmVkVHlwZSB1bnJlc29sdmVkVHlwZSwKICAgICAge2Jvb2wgbm9uSW5zdGFuY2VBY2Nlc3NJc0Vycm9yfSk7CgogIExpc3Q8RGFydFR5cGU+IGJ1aWxkRGFydFR5cGVBcmd1bWVudHMoTGlzdDxVbnJlc29sdmVkVHlwZT4gdW5yZXNvbHZlZFR5cGVzKTsKCiAgdm9pZCByZXBvcnREdXBsaWNhdGVkRGVjbGFyYXRpb24oCiAgICAgIEJ1aWxkZXIgZXhpc3RpbmcsIFN0cmluZyBuYW1lLCBpbnQgY2hhck9mZnNldCk7CgogIEV4cHJlc3Npb24gd3JhcFN5bnRoZXRpY0V4cHJlc3Npb24oRXhwcmVzc2lvbiBub2RlLCBpbnQgY2hhck9mZnNldCk7CgogIEV4cHJlc3Npb24gd3JhcEludmFsaWRDb25zdHJ1Y3Rvckludm9jYXRpb24oRXhwcmVzc2lvbiBkZXN1Z2FyZWQsCiAgICAgIE1lbWJlciBjb25zdHJ1Y3RvciwgQXJndW1lbnRzIGFyZ3VtZW50cywgaW50IGNoYXJPZmZzZXQpOwoKICBFeHByZXNzaW9uIHdyYXBJbnZhbGlkV3JpdGUoCiAgICAgIEV4cHJlc3Npb24gZGVzdWdhcmVkLCBFeHByZXNzaW9uIGV4cHJlc3Npb24sIGludCBjaGFyT2Zmc2V0KTsKCiAgRXhwcmVzc2lvbiB3cmFwVW5yZXNvbHZlZFRhcmdldEludm9jYXRpb24oCiAgICAgIEV4cHJlc3Npb24gZGVzdWdhcmVkLCBBcmd1bWVudHMgYXJndW1lbnRzLCBpbnQgY2hhck9mZnNldCk7CgogIEV4cHJlc3Npb24gd3JhcFVucmVzb2x2ZWRWYXJpYWJsZUFzc2lnbm1lbnQoCiAgICAgIEV4cHJlc3Npb24gZGVzdWdhcmVkLCBib29sIGlzQ29tcG91bmQsIEV4cHJlc3Npb24gcmhzLCBpbnQgY2hhck9mZnNldCk7CgogIC8vLyBDcmVhdGVzIGEgW1ZhcmlhYmxlR2V0XSBvZiB0aGUgW3ZhcmlhYmxlXSB1c2luZyBbY2hhck9mZnNldF0gYXMgdGhlIGZpbGUKICAvLy8gb2Zmc2V0IG9mIHRoZSBjcmVhdGVkIG5vZGUuCiAgRXhwcmVzc2lvbiBjcmVhdGVWYXJpYWJsZUdldChWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBpbnQgY2hhck9mZnNldCk7Cn0KgKwATk48ASsBLgE4ATIBKAEjAUcBQgEoASIBSgEdCRMVEhQWFRAOExMXHQEdQAFGJQEhASABJwEVARcBPAEcAUkBNTgBQAFMAUNIHgElRhUBKzQeAUouAS0+ASVJGRQVFRUgAUJMATsBIkQBIwEkRyIYGxQgASkjFxsbEyoWHAEiQQFMAUgBSAFLAU0BUScBJjMBOCgBTwEkNgFHAURAAR9EAS1CAS9OAU8iTgIBQ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvZXhwcmVzc2lvbl9nZW5lcmF0b3JfaGVscGVyLmRhcnQ3c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC9mb3Jlc3QuZGFydMAAbyQvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5mYW5nb3JuOwoKaW1wb3J0ICdkYXJ0OmNvcmUnIGhpZGUgTWFwRW50cnk7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JzsKCmltcG9ydCAnLi4vbmFtZXMuZGFydCc7CgppbXBvcnQgJy4uL3BhcnNlci5kYXJ0JyBzaG93IG9mZnNldEZvclRva2VuLCBvcHRpb25hbDsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyB1bnN1cHBvcnRlZDsKCmltcG9ydCAnLi4vc2Nhbm5lci5kYXJ0JyBzaG93IFRva2VuOwoKaW1wb3J0ICdjb2xsZWN0aW9ucy5kYXJ0JwogICAgc2hvdwogICAgICAgIEZvckVsZW1lbnQsCiAgICAgICAgRm9ySW5FbGVtZW50LAogICAgICAgIEZvckluTWFwRW50cnksCiAgICAgICAgRm9yTWFwRW50cnksCiAgICAgICAgSWZFbGVtZW50LAogICAgICAgIElmTWFwRW50cnksCiAgICAgICAgU3ByZWFkRWxlbWVudDsKCmltcG9ydCAna2VybmVsX3NoYWRvd19hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBBcmd1bWVudHNKdWRnbWVudCwKICAgICAgICBBc3NlcnRJbml0aWFsaXplckp1ZGdtZW50LAogICAgICAgIEFzc2VydFN0YXRlbWVudEp1ZGdtZW50LAogICAgICAgIEJsb2NrSnVkZ21lbnQsCiAgICAgICAgQ2F0Y2hKdWRnbWVudCwKICAgICAgICBEb0p1ZGdtZW50LAogICAgICAgIERvdWJsZUp1ZGdtZW50LAogICAgICAgIEVtcHR5U3RhdGVtZW50SnVkZ21lbnQsCiAgICAgICAgRXhwcmVzc2lvblN0YXRlbWVudEp1ZGdtZW50LAogICAgICAgIEZvckp1ZGdtZW50LAogICAgICAgIEZ1bmN0aW9uTm9kZUp1ZGdtZW50LAogICAgICAgIElmSnVkZ21lbnQsCiAgICAgICAgSW50SnVkZ21lbnQsCiAgICAgICAgTGlzdExpdGVyYWxKdWRnbWVudCwKICAgICAgICBMb2FkTGlicmFyeUp1ZGdtZW50LAogICAgICAgIE1hcExpdGVyYWxKdWRnbWVudCwKICAgICAgICBNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQsCiAgICAgICAgUmV0dXJuSnVkZ21lbnQsCiAgICAgICAgU2V0TGl0ZXJhbEp1ZGdtZW50LAogICAgICAgIFNoYWRvd0xhcmdlSW50TGl0ZXJhbCwKICAgICAgICBTeW1ib2xMaXRlcmFsSnVkZ21lbnQsCiAgICAgICAgU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50LAogICAgICAgIFRyeUNhdGNoSnVkZ21lbnQsCiAgICAgICAgVHJ5RmluYWxseUp1ZGdtZW50LAogICAgICAgIFR5cGVMaXRlcmFsSnVkZ21lbnQsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50LAogICAgICAgIFdoaWxlSnVkZ21lbnQsCiAgICAgICAgWWllbGRKdWRnbWVudDsKCi8vLyBBIHNoYWRvdyB0cmVlIGZhY3RvcnkuCmNsYXNzIEZvcmVzdCB7CiAgY29uc3QgRm9yZXN0KCk7CgogIEFyZ3VtZW50cyBjcmVhdGVBcmd1bWVudHMoaW50IGZpbGVPZmZzZXQsIExpc3Q8RXhwcmVzc2lvbj4gcG9zaXRpb25hbCwKICAgICAge0xpc3Q8RGFydFR5cGU+IHR5cGVzLCBMaXN0PE5hbWVkRXhwcmVzc2lvbj4gbmFtZWR9KSB7CiAgICByZXR1cm4gbmV3IEFyZ3VtZW50c0p1ZGdtZW50KHBvc2l0aW9uYWwsIHR5cGVzOiB0eXBlcywgbmFtZWQ6IG5hbWVkKQogICAgICAuLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0ID8/IFRyZWVOb2RlLm5vT2Zmc2V0OwogIH0KCiAgQXJndW1lbnRzIGNyZWF0ZUFyZ3VtZW50c0ZvckV4dGVuc2lvbk1ldGhvZCgKICAgICAgaW50IGZpbGVPZmZzZXQsCiAgICAgIGludCBleHRlbnNpb25UeXBlUGFyYW1ldGVyQ291bnQsCiAgICAgIGludCB0eXBlUGFyYW1ldGVyQ291bnQsCiAgICAgIEV4cHJlc3Npb24gcmVjZWl2ZXIsCiAgICAgIHtMaXN0PERhcnRUeXBlPiBleHRlbnNpb25UeXBlQXJndW1lbnRzID0gY29uc3QgPERhcnRUeXBlPltdLAogICAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0gY29uc3QgPERhcnRUeXBlPltdLAogICAgICBMaXN0PEV4cHJlc3Npb24+IHBvc2l0aW9uYWxBcmd1bWVudHMgPSBjb25zdCA8RXhwcmVzc2lvbj5bXSwKICAgICAgTGlzdDxOYW1lZEV4cHJlc3Npb24+IG5hbWVkQXJndW1lbnRzID0gY29uc3QgPE5hbWVkRXhwcmVzc2lvbj5bXX0pIHsKICAgIHJldHVybiBuZXcgQXJndW1lbnRzSnVkZ21lbnQuZm9yRXh0ZW5zaW9uTWV0aG9kKAogICAgICAgIGV4dGVuc2lvblR5cGVQYXJhbWV0ZXJDb3VudCwgdHlwZVBhcmFtZXRlckNvdW50LCByZWNlaXZlciwKICAgICAgICBleHRlbnNpb25UeXBlQXJndW1lbnRzOiBleHRlbnNpb25UeXBlQXJndW1lbnRzLAogICAgICAgIHR5cGVBcmd1bWVudHM6IHR5cGVBcmd1bWVudHMsCiAgICAgICAgcG9zaXRpb25hbEFyZ3VtZW50czogcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgICBuYW1lZEFyZ3VtZW50czogbmFtZWRBcmd1bWVudHMpCiAgICAgIC4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQgPz8gVHJlZU5vZGUubm9PZmZzZXQ7CiAgfQoKICBBcmd1bWVudHMgY3JlYXRlQXJndW1lbnRzRW1wdHkoaW50IGZpbGVPZmZzZXQpIHsKICAgIHJldHVybiBjcmVhdGVBcmd1bWVudHMoZmlsZU9mZnNldCwgPEV4cHJlc3Npb24+W10pOwogIH0KCiAgTGlzdDxOYW1lZEV4cHJlc3Npb24+IGFyZ3VtZW50c05hbWVkKEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBhcmd1bWVudHMubmFtZWQ7CiAgfQoKICBMaXN0PEV4cHJlc3Npb24+IGFyZ3VtZW50c1Bvc2l0aW9uYWwoQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIGFyZ3VtZW50cy5wb3NpdGlvbmFsOwogIH0KCiAgTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzVHlwZUFyZ3VtZW50cyhBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gYXJndW1lbnRzLnR5cGVzOwogIH0KCiAgdm9pZCBhcmd1bWVudHNTZXRUeXBlQXJndW1lbnRzKEFyZ3VtZW50cyBhcmd1bWVudHMsIExpc3Q8RGFydFR5cGU+IHR5cGVzKSB7CiAgICBBcmd1bWVudHNKdWRnbWVudC5zZXROb25JbmZlcnJhYmxlQXJndW1lbnRUeXBlcyhhcmd1bWVudHMsIHR5cGVzKTsKICB9CgogIFN0cmluZ0xpdGVyYWwgYXNMaXRlcmFsU3RyaW5nKEV4cHJlc3Npb24gdmFsdWUpID0+IHZhbHVlOwoKICAvLy8gUmV0dXJuIGEgcmVwcmVzZW50YXRpb24gb2YgYSBib29sZWFuIGxpdGVyYWwgYXQgdGhlIGdpdmVuIFtsb2NhdGlvbl0uIFRoZQogIC8vLyBsaXRlcmFsIGhhcyB0aGUgZ2l2ZW4gW3ZhbHVlXS4KICBCb29sTGl0ZXJhbCBjcmVhdGVCb29sTGl0ZXJhbChib29sIHZhbHVlLCBUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIG5ldyBCb29sTGl0ZXJhbCh2YWx1ZSkuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICAvLy8gUmV0dXJuIGEgcmVwcmVzZW50YXRpb24gb2YgYSBkb3VibGUgbGl0ZXJhbCBhdCB0aGUgZ2l2ZW4gW2xvY2F0aW9uXS4gVGhlCiAgLy8vIGxpdGVyYWwgaGFzIHRoZSBnaXZlbiBbdmFsdWVdLgogIERvdWJsZUxpdGVyYWwgY3JlYXRlRG91YmxlTGl0ZXJhbChkb3VibGUgdmFsdWUsIFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gbmV3IERvdWJsZUp1ZGdtZW50KHZhbHVlKS4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICB9CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyIGxpdGVyYWwgYXQgdGhlIGdpdmVuIFtsb2NhdGlvbl0uIFRoZQogIC8vLyBsaXRlcmFsIGhhcyB0aGUgZ2l2ZW4gW3ZhbHVlXS4KICBJbnRMaXRlcmFsIGNyZWF0ZUludExpdGVyYWwoaW50IHZhbHVlLCBUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIG5ldyBJbnRKdWRnbWVudCh2YWx1ZSwgdG9rZW4/LmxleGVtZSkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgSW50TGl0ZXJhbCBjcmVhdGVJbnRMaXRlcmFsTGFyZ2UoU3RyaW5nIGxpdGVyYWwsIFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gbmV3IFNoYWRvd0xhcmdlSW50TGl0ZXJhbChsaXRlcmFsLCBvZmZzZXRGb3JUb2tlbih0b2tlbikpOwogIH0KCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEgbGlzdCBsaXRlcmFsLiBUaGUgW2NvbnN0S2V5d29yZF0gaXMgdGhlCiAgLy8vIGxvY2F0aW9uIG9mIHRoZSBgY29uc3RgIGtleXdvcmQsIG9yIGBudWxsYCBpZiB0aGVyZSBpcyBubyBrZXl3b3JkLiBUaGUKICAvLy8gW2lzQ29uc3RdIGlzIGB0cnVlYCBpZiB0aGUgbGl0ZXJhbCBpcyBlaXRoZXIgZXhwbGljaXRseSBvciBpbXBsaWNpdGx5IGEKICAvLy8gY29uc3RhbnQuIFRoZSBbdHlwZUFyZ3VtZW50XSBpcyB0aGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNpbmdsZSB2YWxpZAogIC8vLyB0eXBlIGFyZ3VtZW50IHByZWNlZGluZyB0aGUgbGlzdCBsaXRlcmFsLCBvciBgbnVsbGAgaWYgdGhlcmUgaXMgbm8gdHlwZQogIC8vLyBhcmd1bWVudCwgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSB0eXBlIGFyZ3VtZW50LCBvciBpZiB0aGUgdHlwZSBhcmd1bWVudAogIC8vLyBjYW5ub3QgYmUgcmVzb2x2ZWQuIFRoZSBbdHlwZUFyZ3VtZW50c10gaXMgdGhlIHJlcHJlc2VudGF0aW9uIG9mIGFsbCBvZgogIC8vLyB0aGUgdHlwZSBhcmd1bWVudHMgcHJlY2VkaW5nIHRoZSBsaXN0IGxpdGVyYWwsIG9yIGBudWxsYCBpZiB0aGVyZSBhcmUgbm8KICAvLy8gdHlwZSBhcmd1bWVudHMuIFRoZSBbbGVmdEJyYWNrZXRdIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgYFtgLiBUaGUgbGlzdCBvZgogIC8vLyBbZXhwcmVzc2lvbnNdIGlzIGEgbGlzdCBvZiB0aGUgcmVwcmVzZW50YXRpb25zIG9mIHRoZSBsaXN0IGVsZW1lbnRzLiBUaGUKICAvLy8gW3JpZ2h0QnJhY2tldF0gaXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBgXWAuCiAgTGlzdExpdGVyYWwgY3JlYXRlTGlzdExpdGVyYWwoCiAgICAgIFRva2VuIGNvbnN0S2V5d29yZCwKICAgICAgYm9vbCBpc0NvbnN0LAogICAgICBPYmplY3QgdHlwZUFyZ3VtZW50LAogICAgICBPYmplY3QgdHlwZUFyZ3VtZW50cywKICAgICAgVG9rZW4gbGVmdEJyYWNrZXQsCiAgICAgIExpc3Q8RXhwcmVzc2lvbj4gZXhwcmVzc2lvbnMsCiAgICAgIFRva2VuIHJpZ2h0QnJhY2tldCkgewogICAgLy8gVE9ETyhicmlhbndpbGtlcnNvbik6IFRoZSBmaWxlIG9mZnNldCBjb21wdXRlZCBiZWxvdyB3aWxsIG5vdCBiZSBjb3JyZWN0CiAgICAvLyBpZiB0aGVyZSBhcmUgdHlwZSBhcmd1bWVudHMgYnV0IG5vIGBjb25zdGAga2V5d29yZC4KICAgIHJldHVybiBuZXcgTGlzdExpdGVyYWxKdWRnbWVudChleHByZXNzaW9ucywKICAgICAgICB0eXBlQXJndW1lbnQ6IHR5cGVBcmd1bWVudCwgaXNDb25zdDogaXNDb25zdCkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4oY29uc3RLZXl3b3JkID8/IGxlZnRCcmFja2V0KTsKICB9CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhIHNldCBsaXRlcmFsLiBUaGUgW2NvbnN0S2V5d29yZF0gaXMgdGhlCiAgLy8vIGxvY2F0aW9uIG9mIHRoZSBgY29uc3RgIGtleXdvcmQsIG9yIGBudWxsYCBpZiB0aGVyZSBpcyBubyBrZXl3b3JkLiBUaGUKICAvLy8gW2lzQ29uc3RdIGlzIGB0cnVlYCBpZiB0aGUgbGl0ZXJhbCBpcyBlaXRoZXIgZXhwbGljaXRseSBvciBpbXBsaWNpdGx5IGEKICAvLy8gY29uc3RhbnQuIFRoZSBbdHlwZUFyZ3VtZW50XSBpcyB0aGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNpbmdsZSB2YWxpZAogIC8vLyB0eXBlIGFyZ3VtZW50IHByZWNlZGluZyB0aGUgc2V0IGxpdGVyYWwsIG9yIGBudWxsYCBpZiB0aGVyZSBpcyBubyB0eXBlCiAgLy8vIGFyZ3VtZW50LCB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHR5cGUgYXJndW1lbnQsIG9yIGlmIHRoZSB0eXBlIGFyZ3VtZW50CiAgLy8vIGNhbm5vdCBiZSByZXNvbHZlZC4gVGhlIFt0eXBlQXJndW1lbnRzXSBpcyB0aGUgcmVwcmVzZW50YXRpb24gb2YgYWxsIG9mCiAgLy8vIHRoZSB0eXBlIGFyZ3VtZW50cyBwcmVjZWRpbmcgdGhlIHNldCBsaXRlcmFsLCBvciBgbnVsbGAgaWYgdGhlcmUgYXJlIG5vCiAgLy8vIHR5cGUgYXJndW1lbnRzLiBUaGUgW2xlZnRCcmFjZV0gaXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBge2AuIFRoZSBsaXN0IG9mCiAgLy8vIFtleHByZXNzaW9uc10gaXMgYSBsaXN0IG9mIHRoZSByZXByZXNlbnRhdGlvbnMgb2YgdGhlIHNldCBlbGVtZW50cy4gVGhlCiAgLy8vIFtyaWdodEJyYWNlXSBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIGB9YC4KICBTZXRMaXRlcmFsIGNyZWF0ZVNldExpdGVyYWwoCiAgICAgIFRva2VuIGNvbnN0S2V5d29yZCwKICAgICAgYm9vbCBpc0NvbnN0LAogICAgICBPYmplY3QgdHlwZUFyZ3VtZW50LAogICAgICBPYmplY3QgdHlwZUFyZ3VtZW50cywKICAgICAgVG9rZW4gbGVmdEJyYWNlLAogICAgICBMaXN0PEV4cHJlc3Npb24+IGV4cHJlc3Npb25zLAogICAgICBUb2tlbiByaWdodEJyYWNlKSB7CiAgICAvLyBUT0RPKGJyaWFud2lsa2Vyc29uKTogVGhlIGZpbGUgb2Zmc2V0IGNvbXB1dGVkIGJlbG93IHdpbGwgbm90IGJlIGNvcnJlY3QKICAgIC8vIGlmIHRoZXJlIGFyZSB0eXBlIGFyZ3VtZW50cyBidXQgbm8gYGNvbnN0YCBrZXl3b3JkLgogICAgcmV0dXJuIG5ldyBTZXRMaXRlcmFsSnVkZ21lbnQoZXhwcmVzc2lvbnMsCiAgICAgICAgdHlwZUFyZ3VtZW50OiB0eXBlQXJndW1lbnQsIGlzQ29uc3Q6IGlzQ29uc3QpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKGNvbnN0S2V5d29yZCA/PyBsZWZ0QnJhY2UpOwogIH0KCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEgbWFwIGxpdGVyYWwuIFRoZSBbY29uc3RLZXl3b3JkXSBpcyB0aGUKICAvLy8gbG9jYXRpb24gb2YgdGhlIGBjb25zdGAga2V5d29yZCwgb3IgYG51bGxgIGlmIHRoZXJlIGlzIG5vIGtleXdvcmQuIFRoZQogIC8vLyBbaXNDb25zdF0gaXMgYHRydWVgIGlmIHRoZSBsaXRlcmFsIGlzIGVpdGhlciBleHBsaWNpdGx5IG9yIGltcGxpY2l0bHkgYQogIC8vLyBjb25zdGFudC4gVGhlIFtrZXlUeXBlXSBpcyB0aGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGZpcnN0IHR5cGUgYXJndW1lbnQKICAvLy8gcHJlY2VkaW5nIHRoZSBtYXAgbGl0ZXJhbCwgb3IgYG51bGxgIGlmIHRoZXJlIGFyZSBub3QgZXhhY3RseSB0d28gdHlwZQogIC8vLyBhcmd1bWVudHMgb3IgaWYgdGhlIGZpcnN0IHR5cGUgYXJndW1lbnQgY2Fubm90IGJlIHJlc29sdmVkLiBUaGUKICAvLy8gW3ZhbHVlVHlwZV0gaXMgdGhlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzZWNvbmQgdHlwZSBhcmd1bWVudCBwcmVjZWRpbmcKICAvLy8gdGhlIG1hcCBsaXRlcmFsLCBvciBgbnVsbGAgaWYgdGhlcmUgYXJlIG5vdCBleGFjdGx5IHR3byB0eXBlIGFyZ3VtZW50cyBvcgogIC8vLyBpZiB0aGUgc2Vjb25kIHR5cGUgYXJndW1lbnQgY2Fubm90IGJlIHJlc29sdmVkLiBUaGUgW3R5cGVBcmd1bWVudHNdIGlzIHRoZQogIC8vLyByZXByZXNlbnRhdGlvbiBvZiBhbGwgb2YgdGhlIHR5cGUgYXJndW1lbnRzIHByZWNlZGluZyB0aGUgbWFwIGxpdGVyYWwsIG9yCiAgLy8vIGBudWxsYCBpZiB0aGVyZSBhcmUgbm8gdHlwZSBhcmd1bWVudHMuIFRoZSBbbGVmdEJyYWNlXSBpcyB0aGUgbG9jYXRpb24KICAvLy8gb2YgdGhlIGB7YC4gVGhlIGxpc3Qgb2YgW2VudHJpZXNdIGlzIGEgbGlzdCBvZiB0aGUgcmVwcmVzZW50YXRpb25zIG9mIHRoZQogIC8vLyBtYXAgZW50cmllcy4gVGhlIFtyaWdodEJyYWNlXSBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIGB9YC4KICBNYXBMaXRlcmFsIGNyZWF0ZU1hcExpdGVyYWwoCiAgICAgIFRva2VuIGNvbnN0S2V5d29yZCwKICAgICAgYm9vbCBpc0NvbnN0LAogICAgICBEYXJ0VHlwZSBrZXlUeXBlLAogICAgICBEYXJ0VHlwZSB2YWx1ZVR5cGUsCiAgICAgIE9iamVjdCB0eXBlQXJndW1lbnRzLAogICAgICBUb2tlbiBsZWZ0QnJhY2UsCiAgICAgIExpc3Q8TWFwRW50cnk+IGVudHJpZXMsCiAgICAgIFRva2VuIHJpZ2h0QnJhY2UpIHsKICAgIC8vIFRPRE8oYnJpYW53aWxrZXJzb24pOiBUaGUgZmlsZSBvZmZzZXQgY29tcHV0ZWQgYmVsb3cgd2lsbCBub3QgYmUgY29ycmVjdAogICAgLy8gaWYgdGhlcmUgYXJlIHR5cGUgYXJndW1lbnRzIGJ1dCBubyBgY29uc3RgIGtleXdvcmQuCiAgICByZXR1cm4gbmV3IE1hcExpdGVyYWxKdWRnbWVudChlbnRyaWVzLAogICAgICAgIGtleVR5cGU6IGtleVR5cGUsIHZhbHVlVHlwZTogdmFsdWVUeXBlLCBpc0NvbnN0OiBpc0NvbnN0KQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbihjb25zdEtleXdvcmQgPz8gbGVmdEJyYWNlKTsKICB9CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhIG51bGwgbGl0ZXJhbCBhdCB0aGUgZ2l2ZW4gW2ZpbGVPZmZzZXRdLgogIE51bGxMaXRlcmFsIGNyZWF0ZU51bGxMaXRlcmFsKGludCBmaWxlT2Zmc2V0KSB7CiAgICByZXR1cm4gbmV3IE51bGxMaXRlcmFsKCkuLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0ID8/IFRyZWVOb2RlLm5vT2Zmc2V0OwogIH0KCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEgc2ltcGxlIHN0cmluZyBsaXRlcmFsIGF0IHRoZSBnaXZlbgogIC8vLyBbbG9jYXRpb25dLiBUaGUgbGl0ZXJhbCBoYXMgdGhlIGdpdmVuIFt2YWx1ZV0uIFRoaXMgZG9lcyBub3QgaW5jbHVkZQogIC8vLyBlaXRoZXIgYWRqYWNlbnQgc3RyaW5ncyBvciBpbnRlcnBvbGF0ZWQgc3RyaW5ncy4KICBTdHJpbmdMaXRlcmFsIGNyZWF0ZVN0cmluZ0xpdGVyYWwoU3RyaW5nIHZhbHVlLCBUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIG5ldyBTdHJpbmdMaXRlcmFsKHZhbHVlKS4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICB9CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhIHN5bWJvbCBsaXRlcmFsIGRlZmluZWQgYnkgW3ZhbHVlXS4KICBTeW1ib2xMaXRlcmFsIGNyZWF0ZVN5bWJvbExpdGVyYWwoU3RyaW5nIHZhbHVlLCBUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIG5ldyBTeW1ib2xMaXRlcmFsSnVkZ21lbnQodmFsdWUpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgVHlwZUxpdGVyYWwgY3JlYXRlVHlwZUxpdGVyYWwoRGFydFR5cGUgdHlwZSwgVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBuZXcgVHlwZUxpdGVyYWxKdWRnbWVudCh0eXBlKS4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICB9CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhIGtleS92YWx1ZSBwYWlyIGluIGEgbGl0ZXJhbCBtYXAuIFRoZSBba2V5XSBpcwogIC8vLyB0aGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGV4cHJlc3Npb24gdXNlZCB0byBjb21wdXRlIHRoZSBrZXkuIFRoZSBbY29sb25dCiAgLy8vIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29sb24gc2VwYXJhdGluZyB0aGUga2V5IGFuZCB0aGUgdmFsdWUuIFRoZSBbdmFsdWVdCiAgLy8vIGlzIHRoZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXhwcmVzc2lvbiB1c2VkIHRvIGNvbXB1dGUgdGhlIHZhbHVlLgogIE1hcEVudHJ5IGNyZWF0ZU1hcEVudHJ5KEV4cHJlc3Npb24ga2V5LCBUb2tlbiBjb2xvbiwgRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgcmV0dXJuIG5ldyBNYXBFbnRyeShrZXksIHZhbHVlKS4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKGNvbG9uKTsKICB9CgogIGludCByZWFkT2Zmc2V0KFRyZWVOb2RlIG5vZGUpID0+IG5vZGUuZmlsZU9mZnNldDsKCiAgRXhwcmVzc2lvbiBjcmVhdGVMb2FkTGlicmFyeSgKICAgICAgTGlicmFyeURlcGVuZGVuY3kgZGVwZW5kZW5jeSwgQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIG5ldyBMb2FkTGlicmFyeUp1ZGdtZW50KGRlcGVuZGVuY3ksIGFyZ3VtZW50cyk7CiAgfQoKICBFeHByZXNzaW9uIGNoZWNrTGlicmFyeUlzTG9hZGVkKExpYnJhcnlEZXBlbmRlbmN5IGRlcGVuZGVuY3kpIHsKICAgIHJldHVybiBuZXcgQ2hlY2tMaWJyYXJ5SXNMb2FkZWQoZGVwZW5kZW5jeSk7CiAgfQoKICBFeHByZXNzaW9uIGNyZWF0ZUFzRXhwcmVzc2lvbigKICAgICAgRXhwcmVzc2lvbiBleHByZXNzaW9uLCBEYXJ0VHlwZSB0eXBlLCBUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIG5ldyBBc0V4cHJlc3Npb24oZXhwcmVzc2lvbiwgdHlwZSkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgRXhwcmVzc2lvbiBjcmVhdGVTcHJlYWRFbGVtZW50KEV4cHJlc3Npb24gZXhwcmVzc2lvbiwgVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBuZXcgU3ByZWFkRWxlbWVudChleHByZXNzaW9uLCB0b2tlbi5sZXhlbWUgPT0gJy4uLj8nKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICBFeHByZXNzaW9uIGNyZWF0ZUlmRWxlbWVudChFeHByZXNzaW9uIGNvbmRpdGlvbiwgRXhwcmVzc2lvbiB0aGVuLAogICAgICBFeHByZXNzaW9uIG90aGVyd2lzZSwgVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBuZXcgSWZFbGVtZW50KGNvbmRpdGlvbiwgdGhlbiwgb3RoZXJ3aXNlKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICBNYXBFbnRyeSBjcmVhdGVJZk1hcEVudHJ5KAogICAgICBFeHByZXNzaW9uIGNvbmRpdGlvbiwgTWFwRW50cnkgdGhlbiwgTWFwRW50cnkgb3RoZXJ3aXNlLCBUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIG5ldyBJZk1hcEVudHJ5KGNvbmRpdGlvbiwgdGhlbiwgb3RoZXJ3aXNlKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICBFeHByZXNzaW9uIGNyZWF0ZUZvckVsZW1lbnQoCiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gdmFyaWFibGVzLAogICAgICBFeHByZXNzaW9uIGNvbmRpdGlvbiwKICAgICAgTGlzdDxFeHByZXNzaW9uPiB1cGRhdGVzLAogICAgICBFeHByZXNzaW9uIGJvZHksCiAgICAgIFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gbmV3IEZvckVsZW1lbnQodmFyaWFibGVzLCBjb25kaXRpb24sIHVwZGF0ZXMsIGJvZHkpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICB9CgogIE1hcEVudHJ5IGNyZWF0ZUZvck1hcEVudHJ5KAogICAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHZhcmlhYmxlcywKICAgICAgRXhwcmVzc2lvbiBjb25kaXRpb24sCiAgICAgIExpc3Q8RXhwcmVzc2lvbj4gdXBkYXRlcywKICAgICAgTWFwRW50cnkgYm9keSwKICAgICAgVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBuZXcgRm9yTWFwRW50cnkodmFyaWFibGVzLCBjb25kaXRpb24sIHVwZGF0ZXMsIGJvZHkpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICB9CgogIEV4cHJlc3Npb24gY3JlYXRlRm9ySW5FbGVtZW50KAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLAogICAgICBFeHByZXNzaW9uIGl0ZXJhYmxlLAogICAgICBTdGF0ZW1lbnQgcHJvbG9ndWUsCiAgICAgIEV4cHJlc3Npb24gYm9keSwKICAgICAgRXhwcmVzc2lvbiBwcm9ibGVtLAogICAgICBUb2tlbiB0b2tlbiwKICAgICAge2Jvb2wgaXNBc3luYzogZmFsc2V9KSB7CiAgICByZXR1cm4gbmV3IEZvckluRWxlbWVudCh2YXJpYWJsZSwgaXRlcmFibGUsIHByb2xvZ3VlLCBib2R5LCBwcm9ibGVtLAogICAgICAgIGlzQXN5bmM6IGlzQXN5bmMpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICB9CgogIE1hcEVudHJ5IGNyZWF0ZUZvckluTWFwRW50cnkoCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsCiAgICAgIEV4cHJlc3Npb24gaXRlcmFibGUsCiAgICAgIFN0YXRlbWVudCBwcm9sb2d1ZSwKICAgICAgTWFwRW50cnkgYm9keSwKICAgICAgRXhwcmVzc2lvbiBwcm9ibGVtLAogICAgICBUb2tlbiB0b2tlbiwKICAgICAge2Jvb2wgaXNBc3luYzogZmFsc2V9KSB7CiAgICByZXR1cm4gbmV3IEZvckluTWFwRW50cnkodmFyaWFibGUsIGl0ZXJhYmxlLCBwcm9sb2d1ZSwgYm9keSwgcHJvYmxlbSwKICAgICAgICBpc0FzeW5jOiBpc0FzeW5jKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICAvLy8gUmV0dXJuIGEgcmVwcmVzZW50YXRpb24gb2YgYW4gYXNzZXJ0IHRoYXQgYXBwZWFycyBpbiBhIGNvbnN0cnVjdG9yJ3MKICAvLy8gaW5pdGlhbGl6ZXIgbGlzdC4KICBBc3NlcnRJbml0aWFsaXplciBjcmVhdGVBc3NlcnRJbml0aWFsaXplcigKICAgICAgVG9rZW4gYXNzZXJ0S2V5d29yZCwKICAgICAgVG9rZW4gbGVmdFBhcmVudGhlc2lzLAogICAgICBFeHByZXNzaW9uIGNvbmRpdGlvbiwKICAgICAgVG9rZW4gY29tbWEsCiAgICAgIEV4cHJlc3Npb24gbWVzc2FnZSkgewogICAgcmV0dXJuIG5ldyBBc3NlcnRJbml0aWFsaXplckp1ZGdtZW50KGNyZWF0ZUFzc2VydFN0YXRlbWVudCgKICAgICAgICBhc3NlcnRLZXl3b3JkLCBsZWZ0UGFyZW50aGVzaXMsIGNvbmRpdGlvbiwgY29tbWEsIG1lc3NhZ2UsIG51bGwpKTsKICB9CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhbiBhc3NlcnQgdGhhdCBhcHBlYXJzIGFzIGEgc3RhdGVtZW50LgogIFN0YXRlbWVudCBjcmVhdGVBc3NlcnRTdGF0ZW1lbnQoVG9rZW4gYXNzZXJ0S2V5d29yZCwgVG9rZW4gbGVmdFBhcmVudGhlc2lzLAogICAgICBFeHByZXNzaW9uIGNvbmRpdGlvbiwgVG9rZW4gY29tbWEsIEV4cHJlc3Npb24gbWVzc2FnZSwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICAvLyBDb21wdXRlIHN0YXJ0IGFuZCBlbmQgb2Zmc2V0cyBmb3IgdGhlIGNvbmRpdGlvbiBleHByZXNzaW9uLgogICAgLy8gVGhpcyBjb2RlIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgYmVjYXVzZSBleHByZXNzaW9ucyBkb24ndCBjYXJyeQogICAgLy8gdGhlaXIgc3RhcnQgYW5kIGVuZCBvZmZzZXRzIGN1cnJlbnRseS4KICAgIC8vCiAgICAvLyBUaGUgdG9rZW4gdGhhdCBmb2xsb3dzIGxlZnRQYXJlbnRoZXNpcyBpcyBjb25zaWRlcmVkIHRvIGJlIHRoZQogICAgLy8gZmlyc3QgdG9rZW4gb2YgdGhlIGNvbmRpdGlvbi4KICAgIC8vIFRPRE8oYWhlKTogdGhpcyByZWFsbHkgc2hvdWxkIGJlIGNvbmRpdGlvbi5maWxlT2Zmc2V0LgogICAgaW50IHN0YXJ0T2Zmc2V0ID0gbGVmdFBhcmVudGhlc2lzLm5leHQub2Zmc2V0OwogICAgaW50IGVuZE9mZnNldDsKICAgIHsKICAgICAgLy8gU2VhcmNoIGZvcndhcmQgZnJvbSBsZWZ0UGFyZW50aGVzaXMgdG8gZmluZCB0aGUgbGFzdCB0b2tlbiBvZgogICAgICAvLyB0aGUgY29uZGl0aW9uIC0gd2hpY2ggaXMgYSB0b2tlbiBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIGNvbW1hVG9rZW4sCiAgICAgIC8vIHJpZ2h0IHBhcmVudGhlc2lzIG9yIGEgdHJhaWxpbmcgY29tbWEuCiAgICAgIFRva2VuIGNvbmRpdGlvbkJvdW5kYXJ5ID0gY29tbWEgPz8gbGVmdFBhcmVudGhlc2lzLmVuZEdyb3VwOwogICAgICBUb2tlbiBjb25kaXRpb25MYXN0VG9rZW4gPSBsZWZ0UGFyZW50aGVzaXM7CiAgICAgIHdoaWxlICghY29uZGl0aW9uTGFzdFRva2VuLmlzRW9mKSB7CiAgICAgICAgVG9rZW4gbmV4dFRva2VuID0gY29uZGl0aW9uTGFzdFRva2VuLm5leHQ7CiAgICAgICAgaWYgKG5leHRUb2tlbiA9PSBjb25kaXRpb25Cb3VuZGFyeSkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25hbCgnLCcsIG5leHRUb2tlbikgJiYKICAgICAgICAgICAgbmV4dFRva2VuLm5leHQgPT0gY29uZGl0aW9uQm91bmRhcnkpIHsKICAgICAgICAgIC8vIFRoZSBuZXh0IHRva2VuIGlzIHRyYWlsaW5nIGNvbW1hLCB3aGljaCBtZWFucyBjdXJyZW50IHRva2VuIGlzCiAgICAgICAgICAvLyB0aGUgbGFzdCB0b2tlbiBvZiB0aGUgY29uZGl0aW9uLgogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNvbmRpdGlvbkxhc3RUb2tlbiA9IG5leHRUb2tlbjsKICAgICAgfQogICAgICBpZiAoY29uZGl0aW9uTGFzdFRva2VuLmlzRW9mKSB7CiAgICAgICAgZW5kT2Zmc2V0ID0gc3RhcnRPZmZzZXQgPSAtMTsKICAgICAgfSBlbHNlIHsKICAgICAgICBlbmRPZmZzZXQgPSBjb25kaXRpb25MYXN0VG9rZW4ub2Zmc2V0ICsgY29uZGl0aW9uTGFzdFRva2VuLmxlbmd0aDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBBc3NlcnRTdGF0ZW1lbnRKdWRnbWVudChjb25kaXRpb24sCiAgICAgICAgY29uZGl0aW9uU3RhcnRPZmZzZXQ6IHN0YXJ0T2Zmc2V0LAogICAgICAgIGNvbmRpdGlvbkVuZE9mZnNldDogZW5kT2Zmc2V0LAogICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UpOwogIH0KCiAgRXhwcmVzc2lvbiBjcmVhdGVBd2FpdEV4cHJlc3Npb24oRXhwcmVzc2lvbiBvcGVyYW5kLCBUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIG5ldyBBd2FpdEV4cHJlc3Npb24ob3BlcmFuZCkuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICAvLy8gUmV0dXJuIGEgcmVwcmVzZW50YXRpb24gb2YgYSBibG9jayBvZiBbc3RhdGVtZW50c10gZW5jbG9zZWQgYmV0d2VlbiB0aGUKICAvLy8gW29wZW5CcmFja2V0XSBhbmQgW2Nsb3NlQnJhY2tldF0uCiAgU3RhdGVtZW50IGNyZWF0ZUJsb2NrKAogICAgICBUb2tlbiBvcGVuQnJhY2UsIExpc3Q8U3RhdGVtZW50PiBzdGF0ZW1lbnRzLCBUb2tlbiBjbG9zZUJyYWNlKSB7CiAgICBMaXN0PFN0YXRlbWVudD4gY29weTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBTdGF0ZW1lbnQgc3RhdGVtZW50ID0gc3RhdGVtZW50c1tpXTsKICAgICAgaWYgKHN0YXRlbWVudCBpcyBfVmFyaWFibGVzRGVjbGFyYXRpb24pIHsKICAgICAgICBjb3B5ID8/PSBuZXcgTGlzdDxTdGF0ZW1lbnQ+LmZyb20oc3RhdGVtZW50cy5nZXRSYW5nZSgwLCBpKSk7CiAgICAgICAgY29weS5hZGRBbGwoc3RhdGVtZW50LmRlY2xhcmF0aW9ucyk7CiAgICAgIH0gZWxzZSBpZiAoY29weSAhPSBudWxsKSB7CiAgICAgICAgY29weS5hZGQoc3RhdGVtZW50KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBCbG9ja0p1ZGdtZW50KGNvcHkgPz8gc3RhdGVtZW50cykKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4ob3BlbkJyYWNlKTsKICB9CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhIGJyZWFrIHN0YXRlbWVudC4KICBTdGF0ZW1lbnQgY3JlYXRlQnJlYWtTdGF0ZW1lbnQoCiAgICAgIFRva2VuIGJyZWFrS2V5d29yZCwgT2JqZWN0IGxhYmVsLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIHJldHVybiBuZXcgQnJlYWtTdGF0ZW1lbnQobnVsbCkuLmZpbGVPZmZzZXQgPSBicmVha0tleXdvcmQuY2hhck9mZnNldDsKICB9CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhIGNhdGNoIGNsYXVzZS4KICBDYXRjaCBjcmVhdGVDYXRjaCgKICAgICAgVG9rZW4gb25LZXl3b3JkLAogICAgICBEYXJ0VHlwZSBleGNlcHRpb25UeXBlLAogICAgICBUb2tlbiBjYXRjaEtleXdvcmQsCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gZXhjZXB0aW9uUGFyYW1ldGVyLAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHN0YWNrVHJhY2VQYXJhbWV0ZXIsCiAgICAgIERhcnRUeXBlIHN0YWNrVHJhY2VUeXBlLAogICAgICBTdGF0ZW1lbnQgYm9keSkgewogICAgcmV0dXJuIG5ldyBDYXRjaEp1ZGdtZW50KGV4Y2VwdGlvblBhcmFtZXRlciwgYm9keSwKICAgICAgICBndWFyZDogZXhjZXB0aW9uVHlwZSwgc3RhY2tUcmFjZTogc3RhY2tUcmFjZVBhcmFtZXRlcikKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4ob25LZXl3b3JkID8/IGNhdGNoS2V5d29yZCk7CiAgfQoKICAvLy8gUmV0dXJuIGEgcmVwcmVzZW50YXRpb24gb2YgYSBjb25kaXRpb25hbCBleHByZXNzaW9uLiBUaGUgW2NvbmRpdGlvbl0gaXMKICAvLy8gdGhlIGV4cHJlc3Npb24gcHJlY2VkaW5nIHRoZSBxdWVzdGlvbiBtYXJrLiBUaGUgW3F1ZXN0aW9uXSBpcyB0aGUgYD9gLiBUaGUKICAvLy8gW3RoZW5FeHByZXNzaW9uXSBpcyB0aGUgZXhwcmVzc2lvbiBmb2xsb3dpbmcgdGhlIHF1ZXN0aW9uIG1hcmsuIFRoZQogIC8vLyBbY29sb25dIGlzIHRoZSBgOmAuIFRoZSBbZWxzZUV4cHJlc3Npb25dIGlzIHRoZSBleHByZXNzaW9uIGZvbGxvd2luZyB0aGUKICAvLy8gY29sb24uCiAgRXhwcmVzc2lvbiBjcmVhdGVDb25kaXRpb25hbEV4cHJlc3Npb24oRXhwcmVzc2lvbiBjb25kaXRpb24sIFRva2VuIHF1ZXN0aW9uLAogICAgICBFeHByZXNzaW9uIHRoZW5FeHByZXNzaW9uLCBUb2tlbiBjb2xvbiwgRXhwcmVzc2lvbiBlbHNlRXhwcmVzc2lvbikgewogICAgcmV0dXJuIG5ldyBDb25kaXRpb25hbEV4cHJlc3Npb24oCiAgICAgICAgY29uZGl0aW9uLCB0aGVuRXhwcmVzc2lvbiwgZWxzZUV4cHJlc3Npb24sIG51bGwpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHF1ZXN0aW9uKTsKICB9CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhIGNvbnRpbnVlIHN0YXRlbWVudC4KICBTdGF0ZW1lbnQgY3JlYXRlQ29udGludWVTdGF0ZW1lbnQoCiAgICAgIFRva2VuIGNvbnRpbnVlS2V5d29yZCwgT2JqZWN0IGxhYmVsLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIHJldHVybiBuZXcgQnJlYWtTdGF0ZW1lbnQobnVsbCkuLmZpbGVPZmZzZXQgPSBjb250aW51ZUtleXdvcmQuY2hhck9mZnNldDsKICB9CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhIGRvIHN0YXRlbWVudC4KICBTdGF0ZW1lbnQgY3JlYXRlRG9TdGF0ZW1lbnQoVG9rZW4gZG9LZXl3b3JkLCBTdGF0ZW1lbnQgYm9keSwKICAgICAgVG9rZW4gd2hpbGVLZXl3b3JkLCBFeHByZXNzaW9uIGNvbmRpdGlvbiwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICByZXR1cm4gbmV3IERvSnVkZ21lbnQoYm9keSwgY29uZGl0aW9uKS4uZmlsZU9mZnNldCA9IGRvS2V5d29yZC5jaGFyT2Zmc2V0OwogIH0KCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGFuIGV4cHJlc3Npb24gc3RhdGVtZW50IGNvbXBvc2VkIGZyb20gdGhlCiAgLy8vIFtleHByZXNzaW9uXSBhbmQgW3NlbWljb2xvbl0uCiAgU3RhdGVtZW50IGNyZWF0ZUV4cHJlc3Npb25TdGF0ZW1lbnQoRXhwcmVzc2lvbiBleHByZXNzaW9uLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIHJldHVybiBuZXcgRXhwcmVzc2lvblN0YXRlbWVudEp1ZGdtZW50KGV4cHJlc3Npb24pOwogIH0KCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGFuIGVtcHR5IHN0YXRlbWVudCBjb25zaXN0aW5nIG9mIHRoZSBnaXZlbgogIC8vLyBbc2VtaWNvbG9uXS4KICBTdGF0ZW1lbnQgY3JlYXRlRW1wdHlTdGF0ZW1lbnQoVG9rZW4gc2VtaWNvbG9uKSB7CiAgICByZXR1cm4gbmV3IEVtcHR5U3RhdGVtZW50SnVkZ21lbnQoKTsKICB9CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhIGZvciBzdGF0ZW1lbnQuCiAgU3RhdGVtZW50IGNyZWF0ZUZvclN0YXRlbWVudCgKICAgICAgVG9rZW4gZm9yS2V5d29yZCwKICAgICAgVG9rZW4gbGVmdFBhcmVudGhlc2lzLAogICAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHZhcmlhYmxlcywKICAgICAgVG9rZW4gbGVmdFNlcGFyYXRvciwKICAgICAgRXhwcmVzc2lvbiBjb25kaXRpb24sCiAgICAgIFN0YXRlbWVudCBjb25kaXRpb25TdGF0ZW1lbnQsCiAgICAgIExpc3Q8RXhwcmVzc2lvbj4gdXBkYXRlcnMsCiAgICAgIFRva2VuIHJpZ2h0UGFyZW50aGVzaXMsCiAgICAgIFN0YXRlbWVudCBib2R5KSB7CiAgICByZXR1cm4gbmV3IEZvckp1ZGdtZW50KHZhcmlhYmxlcywgY29uZGl0aW9uLCB1cGRhdGVycywgYm9keSkKICAgICAgLi5maWxlT2Zmc2V0ID0gZm9yS2V5d29yZC5jaGFyT2Zmc2V0OwogIH0KCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGFuIGBpZmAgc3RhdGVtZW50LgogIFN0YXRlbWVudCBjcmVhdGVJZlN0YXRlbWVudChUb2tlbiBpZktleXdvcmQsIEV4cHJlc3Npb24gY29uZGl0aW9uLAogICAgICBTdGF0ZW1lbnQgdGhlblN0YXRlbWVudCwgVG9rZW4gZWxzZUtleXdvcmQsIFN0YXRlbWVudCBlbHNlU3RhdGVtZW50KSB7CiAgICByZXR1cm4gbmV3IElmSnVkZ21lbnQoY29uZGl0aW9uLCB0aGVuU3RhdGVtZW50LCBlbHNlU3RhdGVtZW50KQogICAgICAuLmZpbGVPZmZzZXQgPSBpZktleXdvcmQuY2hhck9mZnNldDsKICB9CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhbiBgaXNgIGV4cHJlc3Npb24uIFRoZSBbb3BlcmFuZF0gaXMgdGhlCiAgLy8vIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBsZWZ0IG9wZXJhbmQuIFRoZSBbaXNPcGVyYXRvcl0gaXMgdGhlIGBpc2Agb3BlcmF0b3IuCiAgLy8vIFRoZSBbbm90T3BlcmF0b3JdIGlzIGVpdGhlciB0aGUgYCFgIG9yIGBudWxsYCBpZiB0aGUgdGVzdCBpcyBub3QgbmVnYXRlZC4KICAvLy8gVGhlIFt0eXBlXSBpcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0eXBlIHRoYXQgaXMgdGhlIHJpZ2h0IG9wZXJhbmQuCiAgRXhwcmVzc2lvbiBjcmVhdGVJc0V4cHJlc3Npb24oCiAgICAgIEV4cHJlc3Npb24gb3BlcmFuZCwgVG9rZW4gaXNPcGVyYXRvciwgVG9rZW4gbm90T3BlcmF0b3IsIERhcnRUeXBlIHR5cGUpIHsKICAgIEV4cHJlc3Npb24gcmVzdWx0ID0gbmV3IElzRXhwcmVzc2lvbihvcGVyYW5kLCB0eXBlKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbihpc09wZXJhdG9yKTsKICAgIGlmIChub3RPcGVyYXRvciAhPSBudWxsKSB7CiAgICAgIHJlc3VsdCA9IGNyZWF0ZU5vdChyZXN1bHQsIG5vdE9wZXJhdG9yLCBmYWxzZSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEgbG9naWNhbCBleHByZXNzaW9uIGhhdmluZyB0aGUgW2xlZnRPcGVyYW5kXSwKICAvLy8gW3JpZ2h0T3BlcmFuZF0gYW5kIHRoZSBbb3BlcmF0b3JdIChlaXRoZXIgYCYmYCBvciBgfHxgKS4KICBFeHByZXNzaW9uIGNyZWF0ZUxvZ2ljYWxFeHByZXNzaW9uKAogICAgICBFeHByZXNzaW9uIGxlZnRPcGVyYW5kLCBUb2tlbiBvcGVyYXRvciwgRXhwcmVzc2lvbiByaWdodE9wZXJhbmQpIHsKICAgIHJldHVybiBuZXcgTG9naWNhbEV4cHJlc3Npb24oCiAgICAgICAgbGVmdE9wZXJhbmQsIG9wZXJhdG9yLnN0cmluZ1ZhbHVlLCByaWdodE9wZXJhbmQpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKG9wZXJhdG9yKTsKICB9CgogIEV4cHJlc3Npb24gY3JlYXRlTm90KEV4cHJlc3Npb24gb3BlcmFuZCwgVG9rZW4gdG9rZW4sIGJvb2wgaXNTeW50aGV0aWMpIHsKICAgIHJldHVybiBuZXcgTm90KG9wZXJhbmQpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEgcGFyZW50aGVzaXplZCBjb25kaXRpb24gY29uc2lzdGluZyBvZiB0aGUKICAvLy8gZ2l2ZW4gW2V4cHJlc3Npb25dIGJldHdlZW4gdGhlIFtsZWZ0UGFyZW50aGVzaXNdIGFuZCBbcmlnaHRQYXJlbnRoZXNpc10uCiAgRXhwcmVzc2lvbiBjcmVhdGVQYXJlbnRoZXNpemVkQ29uZGl0aW9uKAogICAgICBUb2tlbiBsZWZ0UGFyZW50aGVzaXMsIEV4cHJlc3Npb24gZXhwcmVzc2lvbiwgVG9rZW4gcmlnaHRQYXJlbnRoZXNpcykgewogICAgcmV0dXJuIGV4cHJlc3Npb247CiAgfQoKICAvLy8gUmV0dXJuIGEgcmVwcmVzZW50YXRpb24gb2YgYSByZXRocm93IHN0YXRlbWVudCBjb25zaXN0aW5nIG9mIHRoZQogIC8vLyBbcmV0aHJvd0tleXdvcmRdIGZvbGxvd2VkIGJ5IHRoZSBbc2VtaWNvbG9uXS4KICBTdGF0ZW1lbnQgY3JlYXRlUmV0aHJvd1N0YXRlbWVudChUb2tlbiByZXRocm93S2V5d29yZCwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25TdGF0ZW1lbnRKdWRnbWVudCgKICAgICAgICBuZXcgUmV0aHJvdygpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4ocmV0aHJvd0tleXdvcmQpKTsKICB9CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhIHJldHVybiBzdGF0ZW1lbnQuCiAgU3RhdGVtZW50IGNyZWF0ZVJldHVyblN0YXRlbWVudChpbnQgZmlsZU9mZnNldCwgRXhwcmVzc2lvbiBleHByZXNzaW9uLAogICAgICB7Ym9vbCBpc0Fycm93OiB0cnVlfSkgewogICAgcmV0dXJuIG5ldyBSZXR1cm5KdWRnbWVudChpc0Fycm93LCBleHByZXNzaW9uKQogICAgICAuLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0ID8/IFRyZWVOb2RlLm5vT2Zmc2V0OwogIH0KCiAgRXhwcmVzc2lvbiBjcmVhdGVTdHJpbmdDb25jYXRlbmF0aW9uKAogICAgICBMaXN0PEV4cHJlc3Npb24+IGV4cHJlc3Npb25zLCBUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIG5ldyBTdHJpbmdDb25jYXRlbmF0aW9uKGV4cHJlc3Npb25zKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICAvLy8gVGhlIGdpdmVuIFtzdGF0ZW1lbnRdIGlzIGJlaW5nIHVzZWQgYXMgdGhlIHRhcmdldCBvZiBlaXRoZXIgYSBicmVhayBvcgogIC8vLyBjb250aW51ZSBzdGF0ZW1lbnQuIFJldHVybiB0aGUgc3RhdGVtZW50IHRoYXQgc2hvdWxkIGJlIHVzZWQgYXMgdGhlIGFjdHVhbAogIC8vLyB0YXJnZXQuCiAgU3RhdGVtZW50IGNyZWF0ZUxhYmVsZWRTdGF0ZW1lbnQoU3RhdGVtZW50IHN0YXRlbWVudCkgewogICAgcmV0dXJuIG5ldyBMYWJlbGVkU3RhdGVtZW50KHN0YXRlbWVudCk7CiAgfQoKICBFeHByZXNzaW9uIGNyZWF0ZVRoaXNFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gbmV3IFRoaXNFeHByZXNzaW9uKCkuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICAvLy8gUmV0dXJuIGEgcmVwcmVzZW50YXRpb24gb2YgYSB0aHJvdyBleHByZXNzaW9uIGNvbnNpc3Rpbmcgb2YgdGhlCiAgLy8vIFt0aHJvd0tleXdvcmRdLgogIEV4cHJlc3Npb24gY3JlYXRlVGhyb3coVG9rZW4gdGhyb3dLZXl3b3JkLCBFeHByZXNzaW9uIGV4cHJlc3Npb24pIHsKICAgIHJldHVybiBuZXcgVGhyb3coZXhwcmVzc2lvbikuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0aHJvd0tleXdvcmQpOwogIH0KCiAgYm9vbCBpc1Rocm93KE9iamVjdCBvKSA9PiBvIGlzIFRocm93OwoKICAvLy8gUmV0dXJuIGEgcmVwcmVzZW50YXRpb24gb2YgYSB0cnkgc3RhdGVtZW50LiBUaGUgc3RhdGVtZW50IGlzIGludHJvZHVjZWQgYnkKICAvLy8gdGhlIFt0cnlLZXl3b3JkXSBhbmQgdGhlIGdpdmVuIFtib2R5XS4gSWYgY2F0Y2ggY2xhdXNlcyB3ZXJlIGluY2x1ZGVkLAogIC8vLyB0aGVuIHRoZSBbY2F0Y2hDbGF1c2VzXSB3aWxsIHJlcHJlc2VudCB0aGVtLCBvdGhlcndpc2UgaXQgd2lsbCBiZSBgbnVsbGAuCiAgLy8vIFNpbWlsYXJseSwgaWYgYSBmaW5hbGx5IGJsb2NrIHdhcyBpbmNsdWRlZCwgdGhlbiB0aGUgW2ZpbmFsbHlLZXl3b3JkXSBhbmQKICAvLy8gW2ZpbmFsbHlCbG9ja10gd2lsbCBiZSBub24tYG51bGxgLCBvdGhlcndpc2UgYm90aCB3aWxsIGJlIGBudWxsYC4gSWYgdGhlcmUKICAvLy8gd2FzIGFuIGVycm9yIGluIHNvbWUgcGFydCBvZiB0aGUgdHJ5IHN0YXRlbWVudCwgdGhlbiBhbiBbZXJyb3JSZXBsYWNlbWVudF0KICAvLy8gbWlnaHQgYmUgcHJvdmlkZWQsIGluIHdoaWNoIGNhc2UgaXQgY291bGQgYmUgcmV0dXJuZWQgaW5zdGVhZCBvZiB0aGUKICAvLy8gcmVwcmVzZW50YXRpb24gb2YgdGhlIHRyeSBzdGF0ZW1lbnQuCiAgU3RhdGVtZW50IGNyZWF0ZVRyeVN0YXRlbWVudChUb2tlbiB0cnlLZXl3b3JkLCBTdGF0ZW1lbnQgYm9keSwKICAgICAgTGlzdDxDYXRjaD4gY2F0Y2hDbGF1c2VzLCBUb2tlbiBmaW5hbGx5S2V5d29yZCwgU3RhdGVtZW50IGZpbmFsbHlCbG9jaykgewogICAgU3RhdGVtZW50IHJlc3VsdCA9IGJvZHk7CiAgICBpZiAoY2F0Y2hDbGF1c2VzICE9IG51bGwpIHsKICAgICAgcmVzdWx0ID0gbmV3IFRyeUNhdGNoSnVkZ21lbnQocmVzdWx0LCBjYXRjaENsYXVzZXMpOwogICAgfQogICAgaWYgKGZpbmFsbHlCbG9jayAhPSBudWxsKSB7CiAgICAgIHJlc3VsdCA9IG5ldyBUcnlGaW5hbGx5SnVkZ21lbnQocmVzdWx0LCBmaW5hbGx5QmxvY2spOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIF9WYXJpYWJsZXNEZWNsYXJhdGlvbiB2YXJpYWJsZXNEZWNsYXJhdGlvbigKICAgICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBkZWNsYXJhdGlvbnMsIFVyaSB1cmkpIHsKICAgIHJldHVybiBuZXcgX1ZhcmlhYmxlc0RlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywgdXJpKTsKICB9CgogIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gdmFyaWFibGVzRGVjbGFyYXRpb25FeHRyYWN0RGVjbGFyYXRpb25zKAogICAgICBfVmFyaWFibGVzRGVjbGFyYXRpb24gdmFyaWFibGVzRGVjbGFyYXRpb24pIHsKICAgIHJldHVybiB2YXJpYWJsZXNEZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnM7CiAgfQoKICBTdGF0ZW1lbnQgd3JhcFZhcmlhYmxlcyhTdGF0ZW1lbnQgc3RhdGVtZW50KSB7CiAgICBpZiAoc3RhdGVtZW50IGlzIF9WYXJpYWJsZXNEZWNsYXJhdGlvbikgewogICAgICByZXR1cm4gbmV3IEJsb2NrSnVkZ21lbnQoCiAgICAgICAgICBuZXcgTGlzdDxTdGF0ZW1lbnQ+LmZyb20oc3RhdGVtZW50LmRlY2xhcmF0aW9ucywgZ3Jvd2FibGU6IHRydWUpKQogICAgICAgIC4uZmlsZU9mZnNldCA9IHN0YXRlbWVudC5maWxlT2Zmc2V0OwogICAgfSBlbHNlIGlmIChzdGF0ZW1lbnQgaXMgVmFyaWFibGVEZWNsYXJhdGlvbikgewogICAgICByZXR1cm4gbmV3IEJsb2NrSnVkZ21lbnQoPFN0YXRlbWVudD5bc3RhdGVtZW50XSkKICAgICAgICAuLmZpbGVPZmZzZXQgPSBzdGF0ZW1lbnQuZmlsZU9mZnNldDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBzdGF0ZW1lbnQ7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJuIGEgcmVwcmVzZW50YXRpb24gb2YgYSB3aGlsZSBzdGF0ZW1lbnQgaW50cm9kdWNlZCBieSB0aGUKICAvLy8gW3doaWxlS2V5d29yZF0gYW5kIGNvbnNpc3Rpbmcgb2YgdGhlIGdpdmVuIFtjb25kaXRpb25dIGFuZCBbYm9keV0uCiAgU3RhdGVtZW50IGNyZWF0ZVdoaWxlU3RhdGVtZW50KAogICAgICBUb2tlbiB3aGlsZUtleXdvcmQsIEV4cHJlc3Npb24gY29uZGl0aW9uLCBTdGF0ZW1lbnQgYm9keSkgewogICAgcmV0dXJuIG5ldyBXaGlsZUp1ZGdtZW50KGNvbmRpdGlvbiwgYm9keSkKICAgICAgLi5maWxlT2Zmc2V0ID0gd2hpbGVLZXl3b3JkLmNoYXJPZmZzZXQ7CiAgfQoKICAvLy8gUmV0dXJuIGEgcmVwcmVzZW50YXRpb24gb2YgYSB5aWVsZCBzdGF0ZW1lbnQgY29uc2lzdGluZyBvZiB0aGUKICAvLy8gW3lpZWxkS2V5d29yZF0sIFtzdGFyXSwgW2V4cHJlc3Npb25dLCBhbmQgW3NlbWljb2xvbl0uIFRoZSBbc3Rhcl0gaXMgbnVsbAogIC8vLyB3aGVuIG5vIHN0YXIgd2FzIGluY2x1ZGVkIGluIHRoZSBzb3VyY2UgY29kZS4KICBTdGF0ZW1lbnQgY3JlYXRlWWllbGRTdGF0ZW1lbnQoCiAgICAgIFRva2VuIHlpZWxkS2V5d29yZCwgVG9rZW4gc3RhciwgRXhwcmVzc2lvbiBleHByZXNzaW9uLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIHJldHVybiBuZXcgWWllbGRKdWRnbWVudChzdGFyICE9IG51bGwsIGV4cHJlc3Npb24pCiAgICAgIC4uZmlsZU9mZnNldCA9IHlpZWxkS2V5d29yZC5jaGFyT2Zmc2V0OwogIH0KCiAgLy8vIFJldHVybiB0aGUgZXhwcmVzc2lvbiBmcm9tIHRoZSBnaXZlbiBleHByZXNzaW9uIFtzdGF0ZW1lbnRdLgogIEV4cHJlc3Npb24gZ2V0RXhwcmVzc2lvbkZyb21FeHByZXNzaW9uU3RhdGVtZW50KFN0YXRlbWVudCBzdGF0ZW1lbnQpIHsKICAgIHJldHVybiAoc3RhdGVtZW50IGFzIEV4cHJlc3Npb25TdGF0ZW1lbnQpLmV4cHJlc3Npb247CiAgfQoKICBib29sIGlzQmxvY2soT2JqZWN0IG5vZGUpID0+IG5vZGUgaXMgQmxvY2s7CgogIC8vLyBSZXR1cm4gYHRydWVgIGlmIHRoZSBnaXZlbiBbc3RhdGVtZW50XSBpcyB0aGUgcmVwcmVzZW50YXRpb24gb2YgYW4gZW1wdHkKICAvLy8gc3RhdGVtZW50LgogIGJvb2wgaXNFbXB0eVN0YXRlbWVudChTdGF0ZW1lbnQgc3RhdGVtZW50KSA9PiBzdGF0ZW1lbnQgaXMgRW1wdHlTdGF0ZW1lbnQ7CgogIGJvb2wgaXNFcnJvbmVvdXNOb2RlKE9iamVjdCBub2RlKSB7CiAgICBpZiAobm9kZSBpcyBFeHByZXNzaW9uU3RhdGVtZW50KSB7CiAgICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQgc3RhdGVtZW50ID0gbm9kZTsKICAgICAgbm9kZSA9IHN0YXRlbWVudC5leHByZXNzaW9uOwogICAgfQogICAgaWYgKG5vZGUgaXMgVmFyaWFibGVEZWNsYXJhdGlvbikgewogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlID0gbm9kZTsKICAgICAgbm9kZSA9IHZhcmlhYmxlLmluaXRpYWxpemVyOwogICAgfQogICAgaWYgKG5vZGUgaXMgU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50KSB7CiAgICAgIFN5bnRoZXRpY0V4cHJlc3Npb25KdWRnbWVudCBzeW50aCA9IG5vZGU7CiAgICAgIG5vZGUgPSBzeW50aC5kZXN1Z2FyZWQ7CiAgICB9CiAgICBpZiAobm9kZSBpcyBMZXQpIHsKICAgICAgTGV0IGxldCA9IG5vZGU7CiAgICAgIG5vZGUgPSBsZXQudmFyaWFibGUuaW5pdGlhbGl6ZXI7CiAgICB9CiAgICByZXR1cm4gbm9kZSBpcyBJbnZhbGlkRXhwcmVzc2lvbjsKICB9CgogIC8vLyBSZXR1cm4gYHRydWVgIGlmIHRoZSBnaXZlbiBbc3RhdGVtZW50XSBpcyB0aGUgcmVwcmVzZW50YXRpb24gb2YgYW4KICAvLy8gZXhwcmVzc2lvbiBzdGF0ZW1lbnQuCiAgYm9vbCBpc0V4cHJlc3Npb25TdGF0ZW1lbnQoU3RhdGVtZW50IHN0YXRlbWVudCkgPT4KICAgICAgc3RhdGVtZW50IGlzIEV4cHJlc3Npb25TdGF0ZW1lbnQ7CgogIGJvb2wgaXNUaGlzRXhwcmVzc2lvbihPYmplY3Qgbm9kZSkgPT4gbm9kZSBpcyBUaGlzRXhwcmVzc2lvbjsKCiAgYm9vbCBpc1ZhcmlhYmxlc0RlY2xhcmF0aW9uKE9iamVjdCBub2RlKSA9PiBub2RlIGlzIF9WYXJpYWJsZXNEZWNsYXJhdGlvbjsKCiAgLy8vIENyZWF0ZXMgW1ZhcmlhYmxlRGVjbGFyYXRpb25dIGZvciBhIHZhcmlhYmxlIG5hbWVkIFtuYW1lXSBhdCB0aGUgZ2l2ZW4KICAvLy8gW2Z1bmN0aW9uTmVzdGluZ0xldmVsXS4KICBWYXJpYWJsZURlY2xhcmF0aW9uIGNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb24oCiAgICAgIFN0cmluZyBuYW1lLCBpbnQgZnVuY3Rpb25OZXN0aW5nTGV2ZWwsCiAgICAgIHtFeHByZXNzaW9uIGluaXRpYWxpemVyLAogICAgICBEYXJ0VHlwZSB0eXBlLAogICAgICBib29sIGlzRmluYWw6IGZhbHNlLAogICAgICBib29sIGlzQ29uc3Q6IGZhbHNlLAogICAgICBib29sIGlzRmllbGRGb3JtYWw6IGZhbHNlLAogICAgICBib29sIGlzQ292YXJpYW50OiBmYWxzZSwKICAgICAgYm9vbCBpc0xvY2FsRnVuY3Rpb246IGZhbHNlfSkgewogICAgcmV0dXJuIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQobmFtZSwgZnVuY3Rpb25OZXN0aW5nTGV2ZWwsCiAgICAgICAgdHlwZTogdHlwZSwKICAgICAgICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXIsCiAgICAgICAgaXNGaW5hbDogaXNGaW5hbCwKICAgICAgICBpc0NvbnN0OiBpc0NvbnN0LAogICAgICAgIGlzRmllbGRGb3JtYWw6IGlzRmllbGRGb3JtYWwsCiAgICAgICAgaXNDb3ZhcmlhbnQ6IGlzQ292YXJpYW50LAogICAgICAgIGlzTG9jYWxGdW5jdGlvbjogaXNMb2NhbEZ1bmN0aW9uKTsKICB9CgogIFZhcmlhYmxlRGVjbGFyYXRpb24gY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbkZvclZhbHVlKAogICAgICBpbnQgZmlsZU9mZnNldCwgRXhwcmVzc2lvbiBpbml0aWFsaXplciwKICAgICAge0RhcnRUeXBlIHR5cGUgPSBjb25zdCBEeW5hbWljVHlwZSgpfSkgewogICAgcmV0dXJuIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQuZm9yVmFsdWUoaW5pdGlhbGl6ZXIpCiAgICAgIC4udHlwZSA9IHR5cGUKICAgICAgLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldCA/PyBUcmVlTm9kZS5ub09mZnNldDsKICB9CgogIExldCBjcmVhdGVMZXQoVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwgRXhwcmVzc2lvbiBib2R5KSB7CiAgICByZXR1cm4gbmV3IExldCh2YXJpYWJsZSwgYm9keSk7CiAgfQoKICBGdW5jdGlvbk5vZGUgY3JlYXRlRnVuY3Rpb25Ob2RlKFN0YXRlbWVudCBib2R5LAogICAgICB7TGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycywKICAgICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBwb3NpdGlvbmFsUGFyYW1ldGVycywKICAgICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBuYW1lZFBhcmFtZXRlcnMsCiAgICAgIGludCByZXF1aXJlZFBhcmFtZXRlckNvdW50LAogICAgICBEYXJ0VHlwZSByZXR1cm5UeXBlOiBjb25zdCBEeW5hbWljVHlwZSgpLAogICAgICBBc3luY01hcmtlciBhc3luY01hcmtlcjogQXN5bmNNYXJrZXIuU3luYywKICAgICAgQXN5bmNNYXJrZXIgZGFydEFzeW5jTWFya2VyfSkgewogICAgcmV0dXJuIG5ldyBGdW5jdGlvbk5vZGVKdWRnbWVudChib2R5LAogICAgICAgIHR5cGVQYXJhbWV0ZXJzOiB0eXBlUGFyYW1ldGVycywKICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVyczogcG9zaXRpb25hbFBhcmFtZXRlcnMsCiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzOiBuYW1lZFBhcmFtZXRlcnMsCiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICByZXR1cm5UeXBlOiByZXR1cm5UeXBlLAogICAgICAgIGFzeW5jTWFya2VyOiBhc3luY01hcmtlciwKICAgICAgICBkYXJ0QXN5bmNNYXJrZXI6IGRhcnRBc3luY01hcmtlcik7CiAgfQoKICBUeXBlUGFyYW1ldGVyIGNyZWF0ZVR5cGVQYXJhbWV0ZXIoU3RyaW5nIG5hbWUpIHsKICAgIHJldHVybiBuZXcgVHlwZVBhcmFtZXRlcihuYW1lKTsKICB9CgogIFR5cGVQYXJhbWV0ZXJUeXBlIGNyZWF0ZVR5cGVQYXJhbWV0ZXJUeXBlKFR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlcikgewogICAgcmV0dXJuIG5ldyBUeXBlUGFyYW1ldGVyVHlwZSh0eXBlUGFyYW1ldGVyKTsKICB9CgogIEZ1bmN0aW9uRXhwcmVzc2lvbiBjcmVhdGVGdW5jdGlvbkV4cHJlc3Npb24oCiAgICAgIGludCBmaWxlT2Zmc2V0LCBGdW5jdGlvbk5vZGUgZnVuY3Rpb24pIHsKICAgIHJldHVybiBuZXcgRnVuY3Rpb25FeHByZXNzaW9uKGZ1bmN0aW9uKQogICAgICAuLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0ID8/IFRyZWVOb2RlLm5vT2Zmc2V0OwogIH0KCiAgTWV0aG9kSW52b2NhdGlvbiBjcmVhdGVGdW5jdGlvbkludm9jYXRpb24oCiAgICAgIGludCBmaWxlT2Zmc2V0LCBFeHByZXNzaW9uIGV4cHJlc3Npb24sIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBuZXcgTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KGV4cHJlc3Npb24sIGNhbGxOYW1lLCBhcmd1bWVudHMpCiAgICAgIC4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQgPz8gVHJlZU5vZGUubm9PZmZzZXQ7CiAgfQoKICBOYW1lZEV4cHJlc3Npb24gY3JlYXRlTmFtZWRFeHByZXNzaW9uKFN0cmluZyBuYW1lLCBFeHByZXNzaW9uIGV4cHJlc3Npb24pIHsKICAgIHJldHVybiBuZXcgTmFtZWRFeHByZXNzaW9uKG5hbWUsIGV4cHJlc3Npb24pOwogIH0KCiAgU3RhdGljSW52b2NhdGlvbiBjcmVhdGVTdGF0aWNJbnZvY2F0aW9uKAogICAgICBpbnQgZmlsZU9mZnNldCwgUHJvY2VkdXJlIHByb2NlZHVyZSwgQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIG5ldyBTdGF0aWNJbnZvY2F0aW9uKHByb2NlZHVyZSwgYXJndW1lbnRzKQogICAgICAuLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0ID8/IFRyZWVOb2RlLm5vT2Zmc2V0OwogIH0KfQoKY2xhc3MgX1ZhcmlhYmxlc0RlY2xhcmF0aW9uIGV4dGVuZHMgU3RhdGVtZW50IHsKICBmaW5hbCBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IGRlY2xhcmF0aW9uczsKICBmaW5hbCBVcmkgdXJpOwoKICBfVmFyaWFibGVzRGVjbGFyYXRpb24odGhpcy5kZWNsYXJhdGlvbnMsIHRoaXMudXJpKSB7CiAgICBzZXRQYXJlbnRzKGRlY2xhcmF0aW9ucywgdGhpcyk7CiAgfQoKICBhY2NlcHQodikgewogICAgdW5zdXBwb3J0ZWQoImFjY2VwdCIsIGZpbGVPZmZzZXQsIHVyaSk7CiAgfQoKICBhY2NlcHQxKHYsIGFyZykgewogICAgdW5zdXBwb3J0ZWQoImFjY2VwdDEiLCBmaWxlT2Zmc2V0LCB1cmkpOwogIH0KCiAgdmlzaXRDaGlsZHJlbih2KSB7CiAgICB1bnN1cHBvcnRlZCgidmlzaXRDaGlsZHJlbiIsIGZpbGVPZmZzZXQsIHVyaSk7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbih2KSB7CiAgICB1bnN1cHBvcnRlZCgidHJhbnNmb3JtQ2hpbGRyZW4iLCBmaWxlT2Zmc2V0LCB1cmkpOwogIH0KfQqC9QBOTjwBFwEiASIBGAE3ASwBJQEaCRQWFxUTFBcBIAkbIyEXFxQYICUVHhQVHR0cIhgcHx8lGhwdJRcXARsPEgFJPUk2BAEvFiceG0M5Q0s1QzgmMig2BAEzOAQBPhwEAT4hBAE/HAQBTkcEATwBUCU7RwQBTyVBSgQBUSU4MSwEAUJGBAFLTU5NTk5OT1BPMSEaFBscGSQcUDswNkIEAUpNTk1NTk5OTk4vHxoUGxwXJBpQOy82QAQBSk1OT01GTlBRUE1QQB8aFBgaHBceGlA7K0JABAFLMkwEAUZLN0FJBAFGQVEEAT5OBAFRUFFJS0kEATQBIDs7BAFCMQQBITsuLAQBR0EsBAFEKzUsBAEdTjYsBAEfKxwgFxU/LAQBHiscIBUVQCwEASEkGxoXGhMfSRosBAEgJBsaFRoTH0oaLAQBSxgtGx0cExxASwQBSE5QQ0suB0YlPjMTBkdQMEMyKjMuES8zTC4RCigIJiYPSwgGMisnGwQBRk0EAU4oGUcaMiswRi0hHQgGMTAEATQiO0sEATEVFx4aLi8fGDc/QAQBTlFKTw1PSyY5LwQBNyU+TgQBMT9DTwQBSyRQOAQBTBM0KQQBMiAYHSsbHCQhHhhBLAQBNEVNQysEAUpRUEwhUDgxHzYGEwQBUD8mSSI5LwQBTEEEAU1PK04XBAFHNEwsRQQBNUkeMzYEASgzMCwEAU1RDjosBAExRQQBRhZGTQQBKAFRTVBQUVFLK0FQHSA7BiA9BhMEAS45OQQBRTQuBAExLiBMLTM3LQ0YBgQBRUkiQi4uBAFFUDQiUDcuBAFDSToEAS4BTxFNASYnLCMGJysjBi8wHgYXFicGJgQBSRw1KAFAAU0BTR4xLR8VGxshHyZHFCIaGiYiKwQBOS4vQRQ2BAFBJAQBMis2MSIwMSYqKDQqOCAiKwQBMyQEAUsxBAEvLyw2BAEtREk2BAFOMgQBK0I2NgQCATAwEQE3JAQBDiwEARQtBAEVMwQBGTcEAgEucGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9mb3Jlc3QuZGFydEdzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL2ltcGxpY2l0X3R5cGVfYXJndW1lbnQuZGFydISYLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS5tZCBmaWxlLgoKbGlicmFyeSBmYXN0YS5pbXBsaWNpdF90eXBlX2FyZ3VtZW50OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cgRGFydFR5cGUsIERhcnRUeXBlVmlzaXRvciwgRGFydFR5cGVWaXNpdG9yMSwgVmlzaXRvcjsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyB1bmhhbmRsZWQsIHVuc3VwcG9ydGVkOwoKLy8vIE1hcmtlciB0eXBlIHVzZWQgYXMgdHlwZSBhcmd1bWVudCBvbiBsaXN0LCBzZXQgYW5kIG1hcCBsaXRlcmFscyB3aGVuZXZlcgovLy8gdHlwZSBhcmd1bWVudHMgYXJlIG9taXR0ZWQgaW4gdGhlIHNvdXJjZS4KLy8vCi8vLyBBbGwgb2YgdGhlc2UgdHlwZXMgYXJlIHJlcGxhY2VkIGJ5IHRoZSB0eXBlIGluZmVyZW5jZS4gSXQgaXMgYW4gaW50ZXJuYWwKLy8vIGVycm9yIGlmIG9uZSBzdXJ2aXZlcyB0byB0aGUgZmluYWwgb3V0cHV0LgpjbGFzcyBJbXBsaWNpdFR5cGVBcmd1bWVudCBleHRlbmRzIERhcnRUeXBlIHsKICBjb25zdCBJbXBsaWNpdFR5cGVBcmd1bWVudCgpOwoKICBAb3ZlcnJpZGUKICBnZXQgbnVsbGFiaWxpdHkgPT4gdW5zdXBwb3J0ZWQoIm51bGxhYmlsaXR5IiwgLTEsIG51bGwpOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoRGFydFR5cGVWaXNpdG9yPE9iamVjdD4gdikgewogICAgdW5oYW5kbGVkKCIkcnVudGltZVR5cGUiLCAiJHt2LnJ1bnRpbWVUeXBlfSIsIC0xLCBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdDEoRGFydFR5cGVWaXNpdG9yMTxPYmplY3QsIE9iamVjdD4gdiwgYXJnKSB7CiAgICB1bmhhbmRsZWQoIiRydW50aW1lVHlwZSIsICIke3YucnVudGltZVR5cGV9IiwgLTEsIG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yPE9iamVjdD4gdikgewogICAgdW5oYW5kbGVkKCIkcnVudGltZVR5cGUiLCAiJHt2LnJ1bnRpbWVUeXBlfSIsIC0xLCBudWxsKTsKICB9Cn0KJwBNTj8BJgEhPwE3AU0uBE0vLiABDDsBDCY9BAEMNT0EAQwlPQQCAT5wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2ltcGxpY2l0X3R5cGVfYXJndW1lbnQuZGFydEBzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL3R5cGVfYWxnb3JpdGhtcy5kYXJ0wAB/hi8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UubWQgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQm90dG9tVHlwZSwKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBEYXJ0VHlwZVZpc2l0b3IsCiAgICAgICAgRHluYW1pY1R5cGUsCiAgICAgICAgRnVuY3Rpb25UeXBlLAogICAgICAgIEludGVyZmFjZVR5cGUsCiAgICAgICAgSW52YWxpZFR5cGUsCiAgICAgICAgTmFtZWRUeXBlLAogICAgICAgIFR5cGVQYXJhbWV0ZXIsCiAgICAgICAgVHlwZVBhcmFtZXRlclR5cGUsCiAgICAgICAgVHlwZWRlZlR5cGUsCiAgICAgICAgVm9pZFR5cGU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0JyBzaG93IGNvbnRhaW5zVHlwZVZhcmlhYmxlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9zcmMvYm91bmRzX2NoZWNrcy5kYXJ0JyBzaG93IFZhcmlhbmNlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC91dGlsL2dyYXBoLmRhcnQnIHNob3cgR3JhcGgsIGNvbXB1dGVTdHJvbmdDb21wb25lbnRzOwoKaW1wb3J0ICdrZXJuZWxfYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIENsYXNzQnVpbGRlciwKICAgICAgICBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyLAogICAgICAgIEZ1bmN0aW9uVHlwZUJ1aWxkZXIsCiAgICAgICAgTmFtZWRUeXBlQnVpbGRlciwKICAgICAgICBUeXBlQWxpYXNCdWlsZGVyLAogICAgICAgIFR5cGVCdWlsZGVyLAogICAgICAgIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIsCiAgICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlcjsKCmltcG9ydCAnLi4vZGlsbC9kaWxsX2NsYXNzX2J1aWxkZXIuZGFydCcgc2hvdyBEaWxsQ2xhc3NCdWlsZGVyOwoKaW1wb3J0ICcuLi9kaWxsL2RpbGxfdHlwZV9hbGlhc19idWlsZGVyLmRhcnQnIHNob3cgRGlsbFR5cGVBbGlhc0J1aWxkZXI7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93CiAgICAgICAgTG9jYXRlZE1lc3NhZ2UsCiAgICAgICAgdGVtcGxhdGVCb3VuZElzc3VlVmlhQ3ljbGVOb25TaW1wbGljaXR5LAogICAgICAgIHRlbXBsYXRlQm91bmRJc3N1ZVZpYUxvb3BOb25TaW1wbGljaXR5LAogICAgICAgIHRlbXBsYXRlQm91bmRJc3N1ZVZpYVJhd1R5cGVXaXRoTm9uU2ltcGxlQm91bmRzLAogICAgICAgIHRlbXBsYXRlTm9uU2ltcGxlQm91bmRWaWFSZWZlcmVuY2UsCiAgICAgICAgdGVtcGxhdGVOb25TaW1wbGVCb3VuZFZpYVZhcmlhYmxlOwoKZXhwb3J0ICdwYWNrYWdlOmtlcm5lbC9zcmMvYm91bmRzX2NoZWNrcy5kYXJ0JyBzaG93IFZhcmlhbmNlOwoKLy8gQ29tcHV0ZXMgdGhlIHZhcmlhbmNlIG9mIGEgdmFyaWFibGUgaW4gYSB0eXBlLiAgVGhlIGZ1bmN0aW9uIGNhbiBiZSBydW4KLy8gYmVmb3JlIHRoZSB0eXBlcyBhcmUgcmVzb2x2ZWQgdG8gY29tcHV0ZSB2YXJpYW5jZXMgb2YgdHlwZWRlZnMnIHR5cGUKLy8gdmFyaWFibGVzLiAgRm9yIHRoYXQgY2FzZSBpZiB0aGUgdHlwZSBoYXMgaXRzIGRlY2xhcmF0aW9uIHNldCB0byBudWxsIGFuZCBpdHMKLy8gbmFtZSBtYXRjaGVzIHRoYXQgb2YgdGhlIHZhcmlhYmxlLCBpdCdzIGludGVycHJldGVkIGFzIGFuIG9jY3VycmVuY2Ugb2YgYQovLyB0eXBlIHZhcmlhYmxlLgppbnQgY29tcHV0ZVZhcmlhbmNlKFR5cGVWYXJpYWJsZUJ1aWxkZXIgdmFyaWFibGUsIFR5cGVCdWlsZGVyIHR5cGUpIHsKICBpZiAodHlwZSBpcyBOYW1lZFR5cGVCdWlsZGVyKSB7CiAgICBUeXBlRGVjbGFyYXRpb25CdWlsZGVyIGRlY2xhcmF0aW9uID0gdHlwZS5kZWNsYXJhdGlvbjsKICAgIGlmIChkZWNsYXJhdGlvbiA9PSBudWxsIHx8IGRlY2xhcmF0aW9uIGlzIFR5cGVWYXJpYWJsZUJ1aWxkZXIpIHsKICAgICAgaWYgKHR5cGUubmFtZSA9PSB2YXJpYWJsZS5uYW1lKSB7CiAgICAgICAgcmV0dXJuIFZhcmlhbmNlLmNvdmFyaWFudDsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gVmFyaWFuY2UudW5yZWxhdGVkOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpZiAoZGVjbGFyYXRpb24gaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgICAgaW50IHJlc3VsdCA9IFZhcmlhbmNlLnVucmVsYXRlZDsKICAgICAgICBpZiAodHlwZS5hcmd1bWVudHMgIT0gbnVsbCkgewogICAgICAgICAgZm9yIChUeXBlQnVpbGRlciBhcmd1bWVudCBpbiB0eXBlLmFyZ3VtZW50cykgewogICAgICAgICAgICByZXN1bHQgPSBWYXJpYW5jZS5tZWV0KHJlc3VsdCwgY29tcHV0ZVZhcmlhbmNlKHZhcmlhYmxlLCBhcmd1bWVudCkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIFR5cGVBbGlhc0J1aWxkZXIpIHsKICAgICAgICBpbnQgcmVzdWx0ID0gVmFyaWFuY2UudW5yZWxhdGVkOwogICAgICAgIGlmICh0eXBlLmFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGUuYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgIHJlc3VsdCA9IFZhcmlhbmNlLm1lZXQoCiAgICAgICAgICAgICAgICByZXN1bHQsCiAgICAgICAgICAgICAgICBWYXJpYW5jZS5jb21iaW5lKAogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVWYXJpYW5jZSh2YXJpYWJsZSwgdHlwZS5hcmd1bWVudHNbaV0pLAogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVWYXJpYW5jZSgKICAgICAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlc1tpXSwgZGVjbGFyYXRpb24udHlwZSkpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgfQogIH0gZWxzZSBpZiAodHlwZSBpcyBGdW5jdGlvblR5cGVCdWlsZGVyKSB7CiAgICBpbnQgcmVzdWx0ID0gVmFyaWFuY2UudW5yZWxhdGVkOwogICAgaWYgKHR5cGUucmV0dXJuVHlwZSAhPSBudWxsKSB7CiAgICAgIHJlc3VsdCA9CiAgICAgICAgICBWYXJpYW5jZS5tZWV0KHJlc3VsdCwgY29tcHV0ZVZhcmlhbmNlKHZhcmlhYmxlLCB0eXBlLnJldHVyblR5cGUpKTsKICAgIH0KICAgIGlmICh0eXBlLnR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgdHlwZVZhcmlhYmxlIGluIHR5cGUudHlwZVZhcmlhYmxlcykgewogICAgICAgIC8vIElmIFt2YXJpYWJsZV0gaXMgcmVmZXJlbmNlZCBpbiB0aGUgYm91bmQgYXQgYWxsLCBpdCBtYWtlcyB0aGUKICAgICAgICAvLyB2YXJpYW5jZSBvZiBbdmFyaWFibGVdIGluIHRoZSBlbnRpcmUgdHlwZSBpbnZhcmlhbnQuICBUaGUgaW52b2NhdGlvbgogICAgICAgIC8vIG9mIFtjb21wdXRlVmFyaWFuY2VdIGJlbG93IGlzIG1hZGUgdG8gc2ltcGx5IGZpZ3VyZSBvdXQgaWYgW3ZhcmlhYmxlXQogICAgICAgIC8vIG9jY3VycyBpbiB0aGUgYm91bmQuCiAgICAgICAgaWYgKHR5cGVWYXJpYWJsZS5ib3VuZCAhPSBudWxsICYmCiAgICAgICAgICAgIGNvbXB1dGVWYXJpYW5jZSh2YXJpYWJsZSwgdHlwZVZhcmlhYmxlLmJvdW5kKSAhPQogICAgICAgICAgICAgICAgVmFyaWFuY2UudW5yZWxhdGVkKSB7CiAgICAgICAgICByZXN1bHQgPSBWYXJpYW5jZS5pbnZhcmlhbnQ7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAodHlwZS5mb3JtYWxzICE9IG51bGwpIHsKICAgICAgZm9yIChGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIGZvcm1hbCBpbiB0eXBlLmZvcm1hbHMpIHsKICAgICAgICByZXN1bHQgPSBWYXJpYW5jZS5tZWV0KAogICAgICAgICAgICByZXN1bHQsCiAgICAgICAgICAgIFZhcmlhbmNlLmNvbWJpbmUoVmFyaWFuY2UuY29udHJhdmFyaWFudCwKICAgICAgICAgICAgICAgIGNvbXB1dGVWYXJpYW5jZSh2YXJpYWJsZSwgZm9ybWFsLnR5cGUpKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHJldHVybiBWYXJpYW5jZS51bnJlbGF0ZWQ7Cn0KClR5cGVCdWlsZGVyIHN1YnN0aXR1dGVSYW5nZSgKICAgIFR5cGVCdWlsZGVyIHR5cGUsCiAgICBNYXA8VHlwZVZhcmlhYmxlQnVpbGRlciwgVHlwZUJ1aWxkZXI+IHVwcGVyU3Vic3RpdHV0aW9uLAogICAgTWFwPFR5cGVWYXJpYWJsZUJ1aWxkZXIsIFR5cGVCdWlsZGVyPiBsb3dlclN1YnN0aXR1dGlvbiwKICAgIHtib29sIGlzQ292YXJpYW50ID0gdHJ1ZX0pIHsKICBpZiAodHlwZSBpcyBOYW1lZFR5cGVCdWlsZGVyKSB7CiAgICBpZiAodHlwZS5kZWNsYXJhdGlvbiBpcyBUeXBlVmFyaWFibGVCdWlsZGVyKSB7CiAgICAgIGlmIChpc0NvdmFyaWFudCkgewogICAgICAgIHJldHVybiB1cHBlclN1YnN0aXR1dGlvblt0eXBlLmRlY2xhcmF0aW9uXSA/PyB0eXBlOwogICAgICB9CiAgICAgIHJldHVybiBsb3dlclN1YnN0aXR1dGlvblt0eXBlLmRlY2xhcmF0aW9uXSA/PyB0eXBlOwogICAgfQogICAgaWYgKHR5cGUuYXJndW1lbnRzID09IG51bGwgfHwgdHlwZS5hcmd1bWVudHMubGVuZ3RoID09IDApIHsKICAgICAgcmV0dXJuIHR5cGU7CiAgICB9CiAgICBMaXN0PFR5cGVCdWlsZGVyPiBhcmd1bWVudHM7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGUuYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIFR5cGVCdWlsZGVyIHN1YnN0aXR1dGVkQXJndW1lbnQgPSBzdWJzdGl0dXRlUmFuZ2UoCiAgICAgICAgICB0eXBlLmFyZ3VtZW50c1tpXSwgdXBwZXJTdWJzdGl0dXRpb24sIGxvd2VyU3Vic3RpdHV0aW9uLAogICAgICAgICAgaXNDb3ZhcmlhbnQ6IGlzQ292YXJpYW50KTsKICAgICAgaWYgKHN1YnN0aXR1dGVkQXJndW1lbnQgIT0gdHlwZS5hcmd1bWVudHNbaV0pIHsKICAgICAgICBhcmd1bWVudHMgPz89IHR5cGUuYXJndW1lbnRzLnRvTGlzdCgpOwogICAgICAgIGFyZ3VtZW50c1tpXSA9IHN1YnN0aXR1dGVkQXJndW1lbnQ7CiAgICAgIH0KICAgIH0KICAgIGlmIChhcmd1bWVudHMgIT0gbnVsbCkgewogICAgICByZXR1cm4gbmV3IE5hbWVkVHlwZUJ1aWxkZXIodHlwZS5uYW1lLCBhcmd1bWVudHMpLi5iaW5kKHR5cGUuZGVjbGFyYXRpb24pOwogICAgfQogICAgcmV0dXJuIHR5cGU7CiAgfQoKICBpZiAodHlwZSBpcyBGdW5jdGlvblR5cGVCdWlsZGVyKSB7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHZhcmlhYmxlczsKICAgIGlmICh0eXBlLnR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICB2YXJpYWJsZXMgPSBuZXcgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPih0eXBlLnR5cGVWYXJpYWJsZXMubGVuZ3RoKTsKICAgIH0KICAgIExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4gZm9ybWFsczsKICAgIGlmICh0eXBlLmZvcm1hbHMgIT0gbnVsbCkgewogICAgICBmb3JtYWxzID0gbmV3IExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4odHlwZS5mb3JtYWxzLmxlbmd0aCk7CiAgICB9CiAgICBUeXBlQnVpbGRlciByZXR1cm5UeXBlOwogICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CgogICAgaWYgKHR5cGUudHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyaWFibGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlciB2YXJpYWJsZSA9IHR5cGUudHlwZVZhcmlhYmxlc1tpXTsKICAgICAgICBUeXBlQnVpbGRlciBib3VuZCA9IHN1YnN0aXR1dGVSYW5nZSgKICAgICAgICAgICAgdmFyaWFibGUuYm91bmQsIHVwcGVyU3Vic3RpdHV0aW9uLCBsb3dlclN1YnN0aXR1dGlvbiwKICAgICAgICAgICAgaXNDb3ZhcmlhbnQ6IGlzQ292YXJpYW50KTsKICAgICAgICBpZiAoYm91bmQgIT0gdmFyaWFibGUuYm91bmQpIHsKICAgICAgICAgIHZhcmlhYmxlc1tpXSA9IG5ldyBUeXBlVmFyaWFibGVCdWlsZGVyKAogICAgICAgICAgICAgIHZhcmlhYmxlLm5hbWUsIHZhcmlhYmxlLnBhcmVudCwgdmFyaWFibGUuY2hhck9mZnNldCwKICAgICAgICAgICAgICBib3VuZDogYm91bmQpOwogICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZhcmlhYmxlc1tpXSA9IHZhcmlhYmxlOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGlmICh0eXBlLmZvcm1hbHMgIT0gbnVsbCkgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZvcm1hbHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIGZvcm1hbCA9IHR5cGUuZm9ybWFsc1tpXTsKICAgICAgICBUeXBlQnVpbGRlciBwYXJhbWV0ZXJUeXBlID0gc3Vic3RpdHV0ZVJhbmdlKAogICAgICAgICAgICBmb3JtYWwudHlwZSwgdXBwZXJTdWJzdGl0dXRpb24sIGxvd2VyU3Vic3RpdHV0aW9uLAogICAgICAgICAgICBpc0NvdmFyaWFudDogIWlzQ292YXJpYW50KTsKICAgICAgICBpZiAocGFyYW1ldGVyVHlwZSAhPSBmb3JtYWwudHlwZSkgewogICAgICAgICAgZm9ybWFsc1tpXSA9IG5ldyBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyKAogICAgICAgICAgICAgIGZvcm1hbC5tZXRhZGF0YSwKICAgICAgICAgICAgICBmb3JtYWwubW9kaWZpZXJzLAogICAgICAgICAgICAgIHBhcmFtZXRlclR5cGUsCiAgICAgICAgICAgICAgZm9ybWFsLm5hbWUsCiAgICAgICAgICAgICAgZm9ybWFsLnBhcmVudCwKICAgICAgICAgICAgICBmb3JtYWwuY2hhck9mZnNldCk7CiAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZm9ybWFsc1tpXSA9IGZvcm1hbDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm5UeXBlID0gc3Vic3RpdHV0ZVJhbmdlKAogICAgICAgIHR5cGUucmV0dXJuVHlwZSwgdXBwZXJTdWJzdGl0dXRpb24sIGxvd2VyU3Vic3RpdHV0aW9uLAogICAgICAgIGlzQ292YXJpYW50OiB0cnVlKTsKICAgIGlmIChyZXR1cm5UeXBlICE9IHR5cGUucmV0dXJuVHlwZSkgewogICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgIH0KCiAgICBpZiAoY2hhbmdlZCkgewogICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uVHlwZUJ1aWxkZXIocmV0dXJuVHlwZSwgdmFyaWFibGVzLCBmb3JtYWxzKTsKICAgIH0KCiAgICByZXR1cm4gdHlwZTsKICB9CiAgcmV0dXJuIHR5cGU7Cn0KClR5cGVCdWlsZGVyIHN1YnN0aXR1dGUoCiAgICBUeXBlQnVpbGRlciB0eXBlLCBNYXA8VHlwZVZhcmlhYmxlQnVpbGRlciwgVHlwZUJ1aWxkZXI+IHN1YnN0aXR1dGlvbikgewogIHJldHVybiBzdWJzdGl0dXRlUmFuZ2UodHlwZSwgc3Vic3RpdHV0aW9uLCBzdWJzdGl0dXRpb24sIGlzQ292YXJpYW50OiB0cnVlKTsKfQoKLy8vIENhbGN1bGF0ZXMgYm91bmRzIHRvIGJlIHByb3ZpZGVkIGFzIHR5cGUgYXJndW1lbnRzIGluIHBsYWNlIG9mIG1pc3NpbmcgdHlwZQovLy8gYXJndW1lbnRzIG9uIHJhdyB0eXBlcyB3aXRoIHRoZSBnaXZlbiB0eXBlIHBhcmFtZXRlcnMuCi8vLwovLy8gU2VlIHRoZSBbZGVzY3JpcHRpb25dCi8vLyAoaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9zZGsvYmxvYi9tYXN0ZXIvZG9jcy9sYW5ndWFnZS9pbmZvcm1hbC9pbnN0YW50aWF0ZS10by1ib3VuZC5tZCkKLy8vIG9mIHRoZSBhbGdvcml0aG0gZm9yIGRldGFpbHMuCkxpc3Q8VHlwZUJ1aWxkZXI+IGNhbGN1bGF0ZUJvdW5kcyhMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHZhcmlhYmxlcywKICAgIFR5cGVCdWlsZGVyIGR5bmFtaWNUeXBlLCBUeXBlQnVpbGRlciBib3R0b21UeXBlLCBDbGFzc0J1aWxkZXIgb2JqZWN0Q2xhc3MpIHsKICBMaXN0PFR5cGVCdWlsZGVyPiBib3VuZHMgPSBuZXcgTGlzdDxUeXBlQnVpbGRlcj4odmFyaWFibGVzLmxlbmd0aCk7CgogIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyaWFibGVzLmxlbmd0aDsgaSsrKSB7CiAgICBib3VuZHNbaV0gPSB2YXJpYWJsZXNbaV0uYm91bmQgPz8gZHluYW1pY1R5cGU7CiAgfQoKICBUeXBlVmFyaWFibGVzR3JhcGggZ3JhcGggPSBuZXcgVHlwZVZhcmlhYmxlc0dyYXBoKHZhcmlhYmxlcywgYm91bmRzKTsKICBMaXN0PExpc3Q8aW50Pj4gc3Ryb25nbHlDb25uZWN0ZWQgPSBjb21wdXRlU3Ryb25nQ29tcG9uZW50cyhncmFwaCk7CiAgZm9yIChMaXN0PGludD4gY29tcG9uZW50IGluIHN0cm9uZ2x5Q29ubmVjdGVkKSB7CiAgICBNYXA8VHlwZVZhcmlhYmxlQnVpbGRlciwgVHlwZUJ1aWxkZXI+IGR5bmFtaWNTdWJzdGl0dXRpb24gPQogICAgICAgIDxUeXBlVmFyaWFibGVCdWlsZGVyLCBUeXBlQnVpbGRlcj57fTsKICAgIE1hcDxUeXBlVmFyaWFibGVCdWlsZGVyLCBUeXBlQnVpbGRlcj4gbnVsbFN1YnN0aXR1dGlvbiA9CiAgICAgICAgPFR5cGVWYXJpYWJsZUJ1aWxkZXIsIFR5cGVCdWlsZGVyPnt9OwogICAgZm9yIChpbnQgdmFyaWFibGVJbmRleCBpbiBjb21wb25lbnQpIHsKICAgICAgZHluYW1pY1N1YnN0aXR1dGlvblt2YXJpYWJsZXNbdmFyaWFibGVJbmRleF1dID0gZHluYW1pY1R5cGU7CiAgICAgIG51bGxTdWJzdGl0dXRpb25bdmFyaWFibGVzW3ZhcmlhYmxlSW5kZXhdXSA9IGJvdHRvbVR5cGU7CiAgICB9CiAgICBmb3IgKGludCB2YXJpYWJsZUluZGV4IGluIGNvbXBvbmVudCkgewogICAgICBib3VuZHNbdmFyaWFibGVJbmRleF0gPSBzdWJzdGl0dXRlUmFuZ2UoCiAgICAgICAgICBib3VuZHNbdmFyaWFibGVJbmRleF0sIGR5bmFtaWNTdWJzdGl0dXRpb24sIG51bGxTdWJzdGl0dXRpb24sCiAgICAgICAgICBpc0NvdmFyaWFudDogdHJ1ZSk7CiAgICB9CiAgfQoKICBmb3IgKGludCBpID0gMDsgaSA8IHZhcmlhYmxlcy5sZW5ndGg7IGkrKykgewogICAgTWFwPFR5cGVWYXJpYWJsZUJ1aWxkZXIsIFR5cGVCdWlsZGVyPiBzdWJzdGl0dXRpb24gPQogICAgICAgIDxUeXBlVmFyaWFibGVCdWlsZGVyLCBUeXBlQnVpbGRlcj57fTsKICAgIE1hcDxUeXBlVmFyaWFibGVCdWlsZGVyLCBUeXBlQnVpbGRlcj4gbnVsbFN1YnN0aXR1dGlvbiA9CiAgICAgICAgPFR5cGVWYXJpYWJsZUJ1aWxkZXIsIFR5cGVCdWlsZGVyPnt9OwogICAgc3Vic3RpdHV0aW9uW3ZhcmlhYmxlc1tpXV0gPSBib3VuZHNbaV07CiAgICBudWxsU3Vic3RpdHV0aW9uW3ZhcmlhYmxlc1tpXV0gPSBib3R0b21UeXBlOwogICAgZm9yIChpbnQgaiA9IDA7IGogPCB2YXJpYWJsZXMubGVuZ3RoOyBqKyspIHsKICAgICAgYm91bmRzW2pdID0gc3Vic3RpdHV0ZVJhbmdlKGJvdW5kc1tqXSwgc3Vic3RpdHV0aW9uLCBudWxsU3Vic3RpdHV0aW9uLAogICAgICAgICAgaXNDb3ZhcmlhbnQ6IHRydWUpOwogICAgfQogIH0KCiAgcmV0dXJuIGJvdW5kczsKfQoKLy8vIEdyYXBoIG9mIG11dHVhbCBkZXBlbmRlbmNpZXMgb2YgdHlwZSB2YXJpYWJsZXMgZnJvbSB0aGUgc2FtZSBkZWNsYXJhdGlvbi4KLy8vIFR5cGUgdmFyaWFibGVzIGFyZSByZXByZXNlbnRlZCBieSB0aGVpciBpbmRpY2VzIGluIHRoZSBjb3JyZXNwb25kaW5nCi8vLyBkZWNsYXJhdGlvbi4KY2xhc3MgVHlwZVZhcmlhYmxlc0dyYXBoIGltcGxlbWVudHMgR3JhcGg8aW50PiB7CiAgTGlzdDxpbnQ+IHZlcnRpY2VzOwogIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdmFyaWFibGVzOwogIExpc3Q8VHlwZUJ1aWxkZXI+IGJvdW5kczsKCiAgLy8gYGVkZ2VzW2ldYCBpcyB0aGUgbGlzdCBvZiBpbmRpY2VzIG9mIHR5cGUgdmFyaWFibGVzIHRoYXQgcmVmZXJlbmNlIHRoZSB0eXBlCiAgLy8gdmFyaWFibGUgd2l0aCB0aGUgaW5kZXggYGlgIGluIHRoZWlyIGJvdW5kcy4KICBMaXN0PExpc3Q8aW50Pj4gZWRnZXM7CgogIFR5cGVWYXJpYWJsZXNHcmFwaCh0aGlzLnZhcmlhYmxlcywgdGhpcy5ib3VuZHMpIHsKICAgIGFzc2VydCh2YXJpYWJsZXMubGVuZ3RoID09IGJvdW5kcy5sZW5ndGgpOwoKICAgIHZlcnRpY2VzID0gbmV3IExpc3Q8aW50Pih2YXJpYWJsZXMubGVuZ3RoKTsKICAgIE1hcDxUeXBlVmFyaWFibGVCdWlsZGVyLCBpbnQ+IHZhcmlhYmxlSW5kaWNlcyA9CiAgICAgICAgPFR5cGVWYXJpYWJsZUJ1aWxkZXIsIGludD57fTsKICAgIGVkZ2VzID0gbmV3IExpc3Q8TGlzdDxpbnQ+Pih2YXJpYWJsZXMubGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmVydGljZXMubGVuZ3RoOyBpKyspIHsKICAgICAgdmVydGljZXNbaV0gPSBpOwogICAgICB2YXJpYWJsZUluZGljZXNbdmFyaWFibGVzW2ldXSA9IGk7CiAgICAgIGVkZ2VzW2ldID0gPGludD5bXTsKICAgIH0KCiAgICB2b2lkIGNvbGxlY3RSZWZlcmVuY2VzRnJvbShpbnQgaW5kZXgsIFR5cGVCdWlsZGVyIHR5cGUpIHsKICAgICAgaWYgKHR5cGUgaXMgTmFtZWRUeXBlQnVpbGRlcikgewogICAgICAgIGlmICh0eXBlLmRlY2xhcmF0aW9uIGlzIFR5cGVWYXJpYWJsZUJ1aWxkZXIgJiYKICAgICAgICAgICAgdGhpcy52YXJpYWJsZXMuY29udGFpbnModHlwZS5kZWNsYXJhdGlvbikpIHsKICAgICAgICAgIGVkZ2VzW3ZhcmlhYmxlSW5kaWNlc1t0eXBlLmRlY2xhcmF0aW9uXV0uYWRkKGluZGV4KTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGUuYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgICAgIGZvciAoVHlwZUJ1aWxkZXIgYXJndW1lbnQgaW4gdHlwZS5hcmd1bWVudHMpIHsKICAgICAgICAgICAgY29sbGVjdFJlZmVyZW5jZXNGcm9tKGluZGV4LCBhcmd1bWVudCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHR5cGUgaXMgRnVuY3Rpb25UeXBlQnVpbGRlcikgewogICAgICAgIGlmICh0eXBlLnR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICAgICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIHR5cGVWYXJpYWJsZSBpbiB0eXBlLnR5cGVWYXJpYWJsZXMpIHsKICAgICAgICAgICAgY29sbGVjdFJlZmVyZW5jZXNGcm9tKGluZGV4LCB0eXBlVmFyaWFibGUuYm91bmQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAodHlwZS5mb3JtYWxzICE9IG51bGwpIHsKICAgICAgICAgIGZvciAoRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBwYXJhbWV0ZXIgaW4gdHlwZS5mb3JtYWxzKSB7CiAgICAgICAgICAgIGNvbGxlY3RSZWZlcmVuY2VzRnJvbShpbmRleCwgcGFyYW1ldGVyLnR5cGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb2xsZWN0UmVmZXJlbmNlc0Zyb20oaW5kZXgsIHR5cGUucmV0dXJuVHlwZSk7CiAgICAgIH0KICAgIH0KCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHZlcnRpY2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGNvbGxlY3RSZWZlcmVuY2VzRnJvbShpLCBib3VuZHNbaV0pOwogICAgfQogIH0KCiAgLy8vIFJldHVybnMgaW5kaWNlcyBvZiB0eXBlIHZhcmlhYmxlcyB0aGF0IGRlcGVuZCBvbiB0aGUgdHlwZSB2YXJpYWJsZSB3aXRoCiAgLy8vIFtpbmRleF0uCiAgSXRlcmFibGU8aW50PiBuZWlnaGJvcnNPZihpbnQgaW5kZXgpIHsKICAgIHJldHVybiBlZGdlc1tpbmRleF07CiAgfQp9CgovLy8gRmluZHMgYWxsIHR5cGUgYnVpbGRlcnMgZm9yIFt2YXJpYWJsZV0gaW4gW3R5cGVdLgovLy8KLy8vIFJldHVybnMgbGlzdCBvZiB0aGUgZm91bmQgdHlwZSBidWlsZGVycy4KTGlzdDxOYW1lZFR5cGVCdWlsZGVyPiBmaW5kVmFyaWFibGVVc2VzSW5UeXBlKAogIFR5cGVWYXJpYWJsZUJ1aWxkZXIgdmFyaWFibGUsCiAgVHlwZUJ1aWxkZXIgdHlwZSwKKSB7CiAgTGlzdDxOYW1lZFR5cGVCdWlsZGVyPiB1c2VzID0gPE5hbWVkVHlwZUJ1aWxkZXI+W107CiAgaWYgKHR5cGUgaXMgTmFtZWRUeXBlQnVpbGRlcikgewogICAgaWYgKHR5cGUuZGVjbGFyYXRpb24gPT0gdmFyaWFibGUpIHsKICAgICAgdXNlcy5hZGQodHlwZSk7CiAgICB9IGVsc2UgewogICAgICBpZiAodHlwZS5hcmd1bWVudHMgIT0gbnVsbCkgewogICAgICAgIGZvciAoVHlwZUJ1aWxkZXIgYXJndW1lbnQgaW4gdHlwZS5hcmd1bWVudHMpIHsKICAgICAgICAgIHVzZXMuYWRkQWxsKGZpbmRWYXJpYWJsZVVzZXNJblR5cGUodmFyaWFibGUsIGFyZ3VtZW50KSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfSBlbHNlIGlmICh0eXBlIGlzIEZ1bmN0aW9uVHlwZUJ1aWxkZXIpIHsKICAgIHVzZXMuYWRkQWxsKGZpbmRWYXJpYWJsZVVzZXNJblR5cGUodmFyaWFibGUsIHR5cGUucmV0dXJuVHlwZSkpOwogICAgaWYgKHR5cGUudHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciBkZXBlbmRlbnRWYXJpYWJsZSBpbiB0eXBlLnR5cGVWYXJpYWJsZXMpIHsKICAgICAgICBpZiAoZGVwZW5kZW50VmFyaWFibGUuYm91bmQgIT0gbnVsbCkgewogICAgICAgICAgdXNlcy5hZGRBbGwoCiAgICAgICAgICAgICAgZmluZFZhcmlhYmxlVXNlc0luVHlwZSh2YXJpYWJsZSwgZGVwZW5kZW50VmFyaWFibGUuYm91bmQpKTsKICAgICAgICB9CiAgICAgICAgaWYgKGRlcGVuZGVudFZhcmlhYmxlLmRlZmF1bHRUeXBlICE9IG51bGwpIHsKICAgICAgICAgIHVzZXMuYWRkQWxsKAogICAgICAgICAgICAgIGZpbmRWYXJpYWJsZVVzZXNJblR5cGUodmFyaWFibGUsIGRlcGVuZGVudFZhcmlhYmxlLmRlZmF1bHRUeXBlKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAodHlwZS5mb3JtYWxzICE9IG51bGwpIHsKICAgICAgZm9yIChGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIGZvcm1hbCBpbiB0eXBlLmZvcm1hbHMpIHsKICAgICAgICB1c2VzLmFkZEFsbChmaW5kVmFyaWFibGVVc2VzSW5UeXBlKHZhcmlhYmxlLCBmb3JtYWwudHlwZSkpOwogICAgICB9CiAgICB9CiAgfQogIHJldHVybiB1c2VzOwp9CgovLy8gRmluZHMgdGhvc2Ugb2YgW3ZhcmlhYmxlc10gdGhhdCByZWZlcmVuY2Ugb3RoZXIgW3ZhcmlhYmxlc10gaW4gdGhlaXIgYm91bmRzLgovLy8KLy8vIFJldHVybnMgZmxhdHRlbmVkIGxpc3Qgb2YgcGFpcnMuICBUaGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgcGFpciBpcyB0aGUgdHlwZQovLy8gdmFyaWFibGUgYnVpbGRlciBmcm9tIFt2YXJpYWJsZXNdIHRoYXQgcmVmZXJlbmNlcyBvdGhlciBbdmFyaWFibGVzXSBpbiBpdHMKLy8vIGJvdW5kLiAgVGhlIHNlY29uZCBlbGVtZW50IGluIHRoZSBwYWlyIGlzIHRoZSBsaXN0IG9mIGZvdW5kIHJlZmVyZW5jZXMKLy8vIHJlcHJlc2VudGVkIGFzIHR5cGUgYnVpbGRlcnMuCkxpc3Q8T2JqZWN0PiBmaW5kSW5ib3VuZFJlZmVyZW5jZXMoTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB2YXJpYWJsZXMpIHsKICBMaXN0PE9iamVjdD4gdmFyaWFibGVzQW5kRGVwZW5kZW5jaWVzID0gPE9iamVjdD5bXTsKICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgZGVwZW5kZW50IGluIHZhcmlhYmxlcykgewogICAgTGlzdDxOYW1lZFR5cGVCdWlsZGVyPiBkZXBlbmRlbmNpZXMgPSA8TmFtZWRUeXBlQnVpbGRlcj5bXTsKICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciBkZXBlbmRlbmNlIGluIHZhcmlhYmxlcykgewogICAgICBMaXN0PE5hbWVkVHlwZUJ1aWxkZXI+IHVzZXMgPQogICAgICAgICAgZmluZFZhcmlhYmxlVXNlc0luVHlwZShkZXBlbmRlbmNlLCBkZXBlbmRlbnQuYm91bmQpOwogICAgICBpZiAodXNlcy5sZW5ndGggIT0gMCkgewogICAgICAgIGRlcGVuZGVuY2llcy5hZGRBbGwodXNlcyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChkZXBlbmRlbmNpZXMubGVuZ3RoICE9IDApIHsKICAgICAgdmFyaWFibGVzQW5kRGVwZW5kZW5jaWVzLmFkZChkZXBlbmRlbnQpOwogICAgICB2YXJpYWJsZXNBbmREZXBlbmRlbmNpZXMuYWRkKGRlcGVuZGVuY2llcyk7CiAgICB9CiAgfQogIHJldHVybiB2YXJpYWJsZXNBbmREZXBlbmRlbmNpZXM7Cn0KCi8vLyBGaW5kcyByYXcgZ2VuZXJpYyB0eXBlcyBpbiBbdHlwZV0gd2l0aCBpbmJvdW5kIHJlZmVyZW5jZXMgaW4gdHlwZSB2YXJpYWJsZXMuCi8vLwovLy8gUmV0dXJucyBmbGF0dGVuZWQgbGlzdCBvZiBwYWlycy4gIFRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBwYWlyIGlzIHRoZSBmb3VuZAovLy8gcmF3IGdlbmVyaWMgdHlwZS4gIFRoZSBzZWNvbmQgZWxlbWVudCBpbiB0aGUgcGFpciBpcyB0aGUgbGlzdCBvZiB0eXBlCi8vLyB2YXJpYWJsZXMgb2YgdGhhdCB0eXBlIHdpdGggaW5ib3VuZCByZWZlcmVuY2VzIGluIHRoZSBmb3JtYXQgc3BlY2lmaWVkIGluCi8vLyBbZmluZEluYm91bmRSZWZlcmVuY2VzXS4KTGlzdDxPYmplY3Q+IGZpbmRSYXdUeXBlc1dpdGhJbmJvdW5kUmVmZXJlbmNlcyhUeXBlQnVpbGRlciB0eXBlKSB7CiAgTGlzdDxPYmplY3Q+IHR5cGVzQW5kRGVwZW5kZW5jaWVzID0gPE9iamVjdD5bXTsKICBpZiAodHlwZSBpcyBOYW1lZFR5cGVCdWlsZGVyKSB7CiAgICBpZiAodHlwZS5hcmd1bWVudHMgPT0gbnVsbCkgewogICAgICBUeXBlRGVjbGFyYXRpb25CdWlsZGVyIGRlY2xhcmF0aW9uID0gdHlwZS5kZWNsYXJhdGlvbjsKICAgICAgaWYgKGRlY2xhcmF0aW9uIGlzIERpbGxDbGFzc0J1aWxkZXIpIHsKICAgICAgICBib29sIGhhc0luYm91bmQgPSBmYWxzZTsKICAgICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzID0gZGVjbGFyYXRpb24uY2xzLnR5cGVQYXJhbWV0ZXJzOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVBhcmFtZXRlcnMubGVuZ3RoICYmICFoYXNJbmJvdW5kOyArK2kpIHsKICAgICAgICAgIGlmIChjb250YWluc1R5cGVWYXJpYWJsZSgKICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVyc1tpXS5ib3VuZCwgdHlwZVBhcmFtZXRlcnMudG9TZXQoKSkpIHsKICAgICAgICAgICAgaGFzSW5ib3VuZCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChoYXNJbmJvdW5kKSB7CiAgICAgICAgICB0eXBlc0FuZERlcGVuZGVuY2llcy5hZGQodHlwZSk7CiAgICAgICAgICB0eXBlc0FuZERlcGVuZGVuY2llcy5hZGQoY29uc3QgPE9iamVjdD5bXSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIERpbGxUeXBlQWxpYXNCdWlsZGVyKSB7CiAgICAgICAgYm9vbCBoYXNJbmJvdW5kID0gZmFsc2U7CiAgICAgICAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycyA9IGRlY2xhcmF0aW9uLnR5cGVkZWYudHlwZVBhcmFtZXRlcnM7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlUGFyYW1ldGVycy5sZW5ndGggJiYgIWhhc0luYm91bmQ7ICsraSkgewogICAgICAgICAgaWYgKGNvbnRhaW5zVHlwZVZhcmlhYmxlKAogICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzW2ldLmJvdW5kLCB0eXBlUGFyYW1ldGVycy50b1NldCgpKSkgewogICAgICAgICAgICBoYXNJbmJvdW5kID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGhhc0luYm91bmQpIHsKICAgICAgICAgIHR5cGVzQW5kRGVwZW5kZW5jaWVzLmFkZCh0eXBlKTsKICAgICAgICAgIHR5cGVzQW5kRGVwZW5kZW5jaWVzLmFkZChjb25zdCA8T2JqZWN0PltdKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24gaXMgQ2xhc3NCdWlsZGVyICYmCiAgICAgICAgICBkZWNsYXJhdGlvbi50eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgICBMaXN0PE9iamVjdD4gZGVwZW5kZW5jaWVzID0KICAgICAgICAgICAgZmluZEluYm91bmRSZWZlcmVuY2VzKGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXMpOwogICAgICAgIGlmIChkZXBlbmRlbmNpZXMubGVuZ3RoICE9IDApIHsKICAgICAgICAgIHR5cGVzQW5kRGVwZW5kZW5jaWVzLmFkZCh0eXBlKTsKICAgICAgICAgIHR5cGVzQW5kRGVwZW5kZW5jaWVzLmFkZChkZXBlbmRlbmNpZXMpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBUeXBlQWxpYXNCdWlsZGVyKSB7CiAgICAgICAgaWYgKGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICAgICAgTGlzdDxPYmplY3Q+IGRlcGVuZGVuY2llcyA9CiAgICAgICAgICAgICAgZmluZEluYm91bmRSZWZlcmVuY2VzKGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXMpOwogICAgICAgICAgaWYgKGRlcGVuZGVuY2llcy5sZW5ndGggIT0gMCkgewogICAgICAgICAgICB0eXBlc0FuZERlcGVuZGVuY2llcy5hZGQodHlwZSk7CiAgICAgICAgICAgIHR5cGVzQW5kRGVwZW5kZW5jaWVzLmFkZChkZXBlbmRlbmNpZXMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoZGVjbGFyYXRpb24udHlwZSBpcyBGdW5jdGlvblR5cGVCdWlsZGVyKSB7CiAgICAgICAgICBGdW5jdGlvblR5cGVCdWlsZGVyIHR5cGUgPSBkZWNsYXJhdGlvbi50eXBlOwogICAgICAgICAgaWYgKHR5cGUudHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgICAgICAgIExpc3Q8T2JqZWN0PiBkZXBlbmRlbmNpZXMgPQogICAgICAgICAgICAgICAgZmluZEluYm91bmRSZWZlcmVuY2VzKHR5cGUudHlwZVZhcmlhYmxlcyk7CiAgICAgICAgICAgIGlmIChkZXBlbmRlbmNpZXMubGVuZ3RoICE9IDApIHsKICAgICAgICAgICAgICB0eXBlc0FuZERlcGVuZGVuY2llcy5hZGQodHlwZSk7CiAgICAgICAgICAgICAgdHlwZXNBbmREZXBlbmRlbmNpZXMuYWRkKGRlcGVuZGVuY2llcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGZvciAoVHlwZUJ1aWxkZXIgYXJndW1lbnQgaW4gdHlwZS5hcmd1bWVudHMpIHsKICAgICAgICB0eXBlc0FuZERlcGVuZGVuY2llcwogICAgICAgICAgICAuYWRkQWxsKGZpbmRSYXdUeXBlc1dpdGhJbmJvdW5kUmVmZXJlbmNlcyhhcmd1bWVudCkpOwogICAgICB9CiAgICB9CiAgfSBlbHNlIGlmICh0eXBlIGlzIEZ1bmN0aW9uVHlwZUJ1aWxkZXIpIHsKICAgIHR5cGVzQW5kRGVwZW5kZW5jaWVzCiAgICAgICAgLmFkZEFsbChmaW5kUmF3VHlwZXNXaXRoSW5ib3VuZFJlZmVyZW5jZXModHlwZS5yZXR1cm5UeXBlKSk7CiAgICBpZiAodHlwZS50eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIHZhcmlhYmxlIGluIHR5cGUudHlwZVZhcmlhYmxlcykgewogICAgICAgIGlmICh2YXJpYWJsZS5ib3VuZCAhPSBudWxsKSB7CiAgICAgICAgICB0eXBlc0FuZERlcGVuZGVuY2llcwogICAgICAgICAgICAgIC5hZGRBbGwoZmluZFJhd1R5cGVzV2l0aEluYm91bmRSZWZlcmVuY2VzKHZhcmlhYmxlLmJvdW5kKSk7CiAgICAgICAgfQogICAgICAgIGlmICh2YXJpYWJsZS5kZWZhdWx0VHlwZSAhPSBudWxsKSB7CiAgICAgICAgICB0eXBlc0FuZERlcGVuZGVuY2llcwogICAgICAgICAgICAgIC5hZGRBbGwoZmluZFJhd1R5cGVzV2l0aEluYm91bmRSZWZlcmVuY2VzKHZhcmlhYmxlLmRlZmF1bHRUeXBlKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAodHlwZS5mb3JtYWxzICE9IG51bGwpIHsKICAgICAgZm9yIChGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIGZvcm1hbCBpbiB0eXBlLmZvcm1hbHMpIHsKICAgICAgICB0eXBlc0FuZERlcGVuZGVuY2llcwogICAgICAgICAgICAuYWRkQWxsKGZpbmRSYXdUeXBlc1dpdGhJbmJvdW5kUmVmZXJlbmNlcyhmb3JtYWwudHlwZSkpOwogICAgICB9CiAgICB9CiAgfQogIHJldHVybiB0eXBlc0FuZERlcGVuZGVuY2llczsKfQoKLy8vIEZpbmRzIGlzc3VlcyBieSByYXcgZ2VuZXJpYyB0eXBlcyB3aXRoIGluYm91bmQgcmVmZXJlbmNlcyBpbiB0eXBlIHZhcmlhYmxlcy4KLy8vCi8vLyBSZXR1cm5zIGZsYXR0ZW5lZCBsaXN0IG9mIHRyaXBsZXRzLiAgVGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIHRyaXBsZXQgaXMgdGhlCi8vLyBbVHlwZURlY2xhcmF0aW9uQnVpbGRlcl0gZm9yIHRoZSB0eXBlIHZhcmlhYmxlIGZyb20gW3ZhcmlhYmxlc10gdGhhdCBoYXMgcmF3Ci8vLyBnZW5lcmljIHR5cGVzIHdpdGggaW5ib3VuZCByZWZlcmVuY2VzIGluIGl0cyBib3VuZC4gIFRoZSBzZWNvbmQgZWxlbWVudCBvZgovLy8gdGhlIHRyaXBsZXQgaXMgdGhlIGVycm9yIG1lc3NhZ2UuICBUaGUgdGhpcmQgZWxlbWVudCBpcyB0aGUgY29udGV4dC4KTGlzdDxPYmplY3Q+IGdldEluYm91bmRSZWZlcmVuY2VJc3N1ZXMoTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB2YXJpYWJsZXMpIHsKICBMaXN0PE9iamVjdD4gaXNzdWVzID0gPE9iamVjdD5bXTsKICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgdmFyaWFibGUgaW4gdmFyaWFibGVzKSB7CiAgICBpZiAodmFyaWFibGUuYm91bmQgIT0gbnVsbCkgewogICAgICBMaXN0PE9iamVjdD4gcmF3VHlwZXNBbmRNdXR1YWxEZXBlbmRlbmNpZXMgPQogICAgICAgICAgZmluZFJhd1R5cGVzV2l0aEluYm91bmRSZWZlcmVuY2VzKHZhcmlhYmxlLmJvdW5kKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByYXdUeXBlc0FuZE11dHVhbERlcGVuZGVuY2llcy5sZW5ndGg7IGkgKz0gMikgewogICAgICAgIE5hbWVkVHlwZUJ1aWxkZXIgdHlwZSA9IHJhd1R5cGVzQW5kTXV0dWFsRGVwZW5kZW5jaWVzW2ldOwogICAgICAgIExpc3Q8T2JqZWN0PiB2YXJpYWJsZXNBbmREZXBlbmRlbmNpZXMgPQogICAgICAgICAgICByYXdUeXBlc0FuZE11dHVhbERlcGVuZGVuY2llc1tpICsgMV07CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB2YXJpYWJsZXNBbmREZXBlbmRlbmNpZXMubGVuZ3RoOyBqICs9IDIpIHsKICAgICAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXIgZGVwZW5kZW50ID0gdmFyaWFibGVzQW5kRGVwZW5kZW5jaWVzW2pdOwogICAgICAgICAgTGlzdDxOYW1lZFR5cGVCdWlsZGVyPiBkZXBlbmRlbmNpZXMgPSB2YXJpYWJsZXNBbmREZXBlbmRlbmNpZXNbaiArIDFdOwogICAgICAgICAgZm9yIChOYW1lZFR5cGVCdWlsZGVyIGRlcGVuZGVuY3kgaW4gZGVwZW5kZW5jaWVzKSB7CiAgICAgICAgICAgIGlzc3Vlcy5hZGQodmFyaWFibGUpOwogICAgICAgICAgICBpc3N1ZXMuYWRkKHRlbXBsYXRlQm91bmRJc3N1ZVZpYVJhd1R5cGVXaXRoTm9uU2ltcGxlQm91bmRzCiAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyh0eXBlLmRlY2xhcmF0aW9uLm5hbWUpKTsKICAgICAgICAgICAgaXNzdWVzLmFkZCg8TG9jYXRlZE1lc3NhZ2U+WwogICAgICAgICAgICAgIHRlbXBsYXRlTm9uU2ltcGxlQm91bmRWaWFWYXJpYWJsZQogICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhkZXBlbmRlbmN5LmRlY2xhcmF0aW9uLm5hbWUpCiAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24oZGVwZW5kZW50LmZpbGVVcmksIGRlcGVuZGVudC5jaGFyT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW50Lm5hbWUubGVuZ3RoKQogICAgICAgICAgICBdKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHZhcmlhYmxlc0FuZERlcGVuZGVuY2llcy5sZW5ndGggPT0gMCkgewogICAgICAgICAgLy8gVGhlIGluYm91bmQgcmVmZXJlbmNlcyBhcmUgaW4gYSBjb21waWxlZCBkZWNsYXJhdGlvbiBpbiBhIC5kaWxsLgogICAgICAgICAgaXNzdWVzLmFkZCh2YXJpYWJsZSk7CiAgICAgICAgICBpc3N1ZXMuYWRkKHRlbXBsYXRlQm91bmRJc3N1ZVZpYVJhd1R5cGVXaXRoTm9uU2ltcGxlQm91bmRzCiAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHModHlwZS5kZWNsYXJhdGlvbi5uYW1lKSk7CiAgICAgICAgICBpc3N1ZXMuYWRkKGNvbnN0IDxMb2NhdGVkTWVzc2FnZT5bXSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIHJldHVybiBpc3N1ZXM7Cn0KCi8vLyBGaW5kcyByYXcgdHlwZSBwYXRocyBzdGFydGluZyBmcm9tIHRob3NlIGluIFtzdGFydF0gYW5kIGVuZGluZyB3aXRoIFtlbmRdLgovLy8KLy8vIFJldHVybnMgbGlzdCBvZiBmb3VuZCBwYXRocy4gIEVhY2ggcGF0aCBpcyByZXByZXNlbnRlZCBhcyBhIGxpc3Qgb2YKLy8vIGFsdGVybmF0aW5nIGJ1aWxkZXJzIG9mIHRoZSByYXcgZ2VuZXJpYyB0eXBlcyBmcm9tIHRoZSBwYXRoIGFuZCBidWlsZGVycyBvZgovLy8gdHlwZSB2YXJpYWJsZXMgb2YgdGhlIGltbWVkaWF0ZWx5IHByZWNlZGluZyB0eXBlcyB0aGF0IGNvbnRhaW4gdGhlIHJlZmVyZW5jZQovLy8gdG8gdGhlIG5leHQgcmF3IGdlbmVyaWMgdHlwZSBpbiB0aGUgcGF0aC4gIFRoZSBsaXN0IGVuZHMgd2l0aCB0aGUgdHlwZQovLy8gYnVpbGRlciBmb3IgW2VuZF0uCi8vLwovLy8gVGhlIHJlYXNvbiBmb3IgcHV0dGluZyB0aGUgdHlwZSB2YXJpYWJsZXMgaW50byB0aGUgcGF0aHMgYXMgd2VsbCBhcyBmb3IKLy8vIHVzaW5nIHR5cGUgZm9yIFtzdGFydF0sIGFuZCBub3QgdGhlIGNvcnJlc3BvbmRpbmcgdHlwZSBkZWNsYXJhdGlvbiwKLy8vIGlzIGJldHRlciBlcnJvciByZXBvcnRpbmcuCkxpc3Q8TGlzdDxPYmplY3Q+PiBmaW5kUmF3VHlwZVBhdGhzVG9EZWNsYXJhdGlvbigKICAgIFR5cGVCdWlsZGVyIHN0YXJ0LCBUeXBlRGVjbGFyYXRpb25CdWlsZGVyIGVuZCwKICAgIFtTZXQ8VHlwZURlY2xhcmF0aW9uQnVpbGRlcj4gdmlzaXRlZF0pIHsKICB2aXNpdGVkID8/PSBuZXcgU2V0PFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXI+LmlkZW50aXR5KCk7CiAgTGlzdDxMaXN0PE9iamVjdD4+IHBhdGhzID0gPExpc3Q8T2JqZWN0Pj5bXTsKICBpZiAoc3RhcnQgaXMgTmFtZWRUeXBlQnVpbGRlcikgewogICAgVHlwZURlY2xhcmF0aW9uQnVpbGRlciBkZWNsYXJhdGlvbiA9IHN0YXJ0LmRlY2xhcmF0aW9uOwogICAgaWYgKHN0YXJ0LmFyZ3VtZW50cyA9PSBudWxsKSB7CiAgICAgIGlmIChzdGFydC5kZWNsYXJhdGlvbiA9PSBlbmQpIHsKICAgICAgICBwYXRocy5hZGQoPE9iamVjdD5bc3RhcnRdKTsKICAgICAgfSBlbHNlIGlmICh2aXNpdGVkLmFkZChzdGFydC5kZWNsYXJhdGlvbikpIHsKICAgICAgICBpZiAoZGVjbGFyYXRpb24gaXMgQ2xhc3NCdWlsZGVyICYmIGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICAgICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIHZhcmlhYmxlIGluIGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXMpIHsKICAgICAgICAgICAgaWYgKHZhcmlhYmxlLmJvdW5kICE9IG51bGwpIHsKICAgICAgICAgICAgICBmb3IgKExpc3Q8T2JqZWN0PiBwYXRoIGluIGZpbmRSYXdUeXBlUGF0aHNUb0RlY2xhcmF0aW9uKAogICAgICAgICAgICAgICAgICB2YXJpYWJsZS5ib3VuZCwgZW5kLCB2aXNpdGVkKSkgewogICAgICAgICAgICAgICAgcGF0aHMuYWRkKDxPYmplY3Q+W3N0YXJ0LCB2YXJpYWJsZV0uLmFkZEFsbChwYXRoKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBUeXBlQWxpYXNCdWlsZGVyKSB7CiAgICAgICAgICBpZiAoZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgICAgICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciB2YXJpYWJsZSBpbiBkZWNsYXJhdGlvbi50eXBlVmFyaWFibGVzKSB7CiAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLmJvdW5kICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIGZvciAoTGlzdDxPYmplY3Q+IGRlcGVuZGVuY3lQYXRoCiAgICAgICAgICAgICAgICAgICAgaW4gZmluZFJhd1R5cGVQYXRoc1RvRGVjbGFyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLmJvdW5kLCBlbmQsIHZpc2l0ZWQpKSB7CiAgICAgICAgICAgICAgICAgIHBhdGhzLmFkZCg8T2JqZWN0PltzdGFydCwgdmFyaWFibGVdLi5hZGRBbGwoZGVwZW5kZW5jeVBhdGgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChkZWNsYXJhdGlvbi50eXBlIGlzIEZ1bmN0aW9uVHlwZUJ1aWxkZXIpIHsKICAgICAgICAgICAgRnVuY3Rpb25UeXBlQnVpbGRlciB0eXBlID0gZGVjbGFyYXRpb24udHlwZTsKICAgICAgICAgICAgaWYgKHR5cGUudHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIHZhcmlhYmxlIGluIHR5cGUudHlwZVZhcmlhYmxlcykgewogICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLmJvdW5kICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgZm9yIChMaXN0PE9iamVjdD4gZGVwZW5kZW5jeVBhdGgKICAgICAgICAgICAgICAgICAgICAgIGluIGZpbmRSYXdUeXBlUGF0aHNUb0RlY2xhcmF0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLmJvdW5kLCBlbmQsIHZpc2l0ZWQpKSB7CiAgICAgICAgICAgICAgICAgICAgcGF0aHMKICAgICAgICAgICAgICAgICAgICAgICAgLmFkZCg8T2JqZWN0PltzdGFydCwgdmFyaWFibGVdLi5hZGRBbGwoZGVwZW5kZW5jeVBhdGgpKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2aXNpdGVkLnJlbW92ZShzdGFydC5kZWNsYXJhdGlvbik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGZvciAoVHlwZUJ1aWxkZXIgYXJndW1lbnQgaW4gc3RhcnQuYXJndW1lbnRzKSB7CiAgICAgICAgcGF0aHMuYWRkQWxsKGZpbmRSYXdUeXBlUGF0aHNUb0RlY2xhcmF0aW9uKGFyZ3VtZW50LCBlbmQsIHZpc2l0ZWQpKTsKICAgICAgfQogICAgfQogIH0gZWxzZSBpZiAoc3RhcnQgaXMgRnVuY3Rpb25UeXBlQnVpbGRlcikgewogICAgcGF0aHMuYWRkQWxsKGZpbmRSYXdUeXBlUGF0aHNUb0RlY2xhcmF0aW9uKHN0YXJ0LnJldHVyblR5cGUsIGVuZCwgdmlzaXRlZCkpOwogICAgaWYgKHN0YXJ0LnR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgdmFyaWFibGUgaW4gc3RhcnQudHlwZVZhcmlhYmxlcykgewogICAgICAgIGlmICh2YXJpYWJsZS5ib3VuZCAhPSBudWxsKSB7CiAgICAgICAgICBwYXRocy5hZGRBbGwoCiAgICAgICAgICAgICAgZmluZFJhd1R5cGVQYXRoc1RvRGVjbGFyYXRpb24odmFyaWFibGUuYm91bmQsIGVuZCwgdmlzaXRlZCkpOwogICAgICAgIH0KICAgICAgICBpZiAodmFyaWFibGUuZGVmYXVsdFR5cGUgIT0gbnVsbCkgewogICAgICAgICAgcGF0aHMuYWRkQWxsKGZpbmRSYXdUeXBlUGF0aHNUb0RlY2xhcmF0aW9uKAogICAgICAgICAgICAgIHZhcmlhYmxlLmRlZmF1bHRUeXBlLCBlbmQsIHZpc2l0ZWQpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChzdGFydC5mb3JtYWxzICE9IG51bGwpIHsKICAgICAgZm9yIChGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIGZvcm1hbCBpbiBzdGFydC5mb3JtYWxzKSB7CiAgICAgICAgcGF0aHMuYWRkQWxsKGZpbmRSYXdUeXBlUGF0aHNUb0RlY2xhcmF0aW9uKGZvcm1hbC50eXBlLCBlbmQsIHZpc2l0ZWQpKTsKICAgICAgfQogICAgfQogIH0KICByZXR1cm4gcGF0aHM7Cn0KCi8vLyBGaW5kcyByYXcgZ2VuZXJpYyB0eXBlIGN5Y2xlcyBlbmRpbmcgYW5kIHN0YXJ0aW5nIHdpdGggW2RlY2xhcmF0aW9uXS4KLy8vCi8vLyBSZXR1cm5zIGxpc3Qgb2YgZm91bmQgY3ljbGVzLiAgRWFjaCBjeWNsZSBpcyByZXByZXNlbnRlZCBhcyBhIGxpc3Qgb2YKLy8vIGFsdGVybmF0aW5nIHJhdyBnZW5lcmljIHR5cGVzIGZyb20gdGhlIGN5Y2xlIGFuZCB0eXBlIHZhcmlhYmxlcyBvZiB0aGUKLy8vIGltbWVkaWF0ZWx5IHByZWNlZGluZyB0eXBlIHRoYXQgcmVmZXJlbmNlIHRoZSBuZXh0IHR5cGUgaW4gdGhlIGN5Y2xlLiAgVGhlCi8vLyBjeWNsZSBzdGFydHMgd2l0aCBhIHR5cGUgdmFyaWFibGUgZnJvbSBbZGVjbGFyYXRpb25dIGFuZCBlbmRzIHdpdGggYSB0eXBlCi8vLyB0aGF0IGhhcyBbZGVjbGFyYXRpb25dIGFzIGl0cyBkZWNsYXJhdGlvbi4KLy8vCi8vLyBUaGUgcmVhc29uIGZvciBwdXR0aW5nIHRoZSB0eXBlIHZhcmlhYmxlcyBpbnRvIHRoZSBjeWNsZXMgaXMgYmV0dGVyIGVycm9yCi8vLyByZXBvcnRpbmcuCkxpc3Q8TGlzdDxPYmplY3Q+PiBmaW5kUmF3VHlwZUN5Y2xlcyhUeXBlRGVjbGFyYXRpb25CdWlsZGVyIGRlY2xhcmF0aW9uKSB7CiAgTGlzdDxMaXN0PE9iamVjdD4+IGN5Y2xlcyA9IDxMaXN0PE9iamVjdD4+W107CiAgaWYgKGRlY2xhcmF0aW9uIGlzIENsYXNzQnVpbGRlciAmJiBkZWNsYXJhdGlvbi50eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciB2YXJpYWJsZSBpbiBkZWNsYXJhdGlvbi50eXBlVmFyaWFibGVzKSB7CiAgICAgIGlmICh2YXJpYWJsZS5ib3VuZCAhPSBudWxsKSB7CiAgICAgICAgZm9yIChMaXN0PE9iamVjdD4gcGF0aAogICAgICAgICAgICBpbiBmaW5kUmF3VHlwZVBhdGhzVG9EZWNsYXJhdGlvbih2YXJpYWJsZS5ib3VuZCwgZGVjbGFyYXRpb24pKSB7CiAgICAgICAgICBjeWNsZXMuYWRkKDxPYmplY3Q+W3ZhcmlhYmxlXS4uYWRkQWxsKHBhdGgpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIFR5cGVBbGlhc0J1aWxkZXIpIHsKICAgIGlmIChkZWNsYXJhdGlvbi50eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIHZhcmlhYmxlIGluIGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXMpIHsKICAgICAgICBpZiAodmFyaWFibGUuYm91bmQgIT0gbnVsbCkgewogICAgICAgICAgZm9yIChMaXN0PE9iamVjdD4gZGVwZW5kZW5jeVBhdGgKICAgICAgICAgICAgICBpbiBmaW5kUmF3VHlwZVBhdGhzVG9EZWNsYXJhdGlvbih2YXJpYWJsZS5ib3VuZCwgZGVjbGFyYXRpb24pKSB7CiAgICAgICAgICAgIGN5Y2xlcy5hZGQoPE9iamVjdD5bdmFyaWFibGVdLi5hZGRBbGwoZGVwZW5kZW5jeVBhdGgpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChkZWNsYXJhdGlvbi50eXBlIGlzIEZ1bmN0aW9uVHlwZUJ1aWxkZXIpIHsKICAgICAgRnVuY3Rpb25UeXBlQnVpbGRlciB0eXBlID0gZGVjbGFyYXRpb24udHlwZTsKICAgICAgaWYgKHR5cGUudHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIHZhcmlhYmxlIGluIHR5cGUudHlwZVZhcmlhYmxlcykgewogICAgICAgICAgaWYgKHZhcmlhYmxlLmJvdW5kICE9IG51bGwpIHsKICAgICAgICAgICAgZm9yIChMaXN0PE9iamVjdD4gZGVwZW5kZW5jeVBhdGgKICAgICAgICAgICAgICAgIGluIGZpbmRSYXdUeXBlUGF0aHNUb0RlY2xhcmF0aW9uKHZhcmlhYmxlLmJvdW5kLCBkZWNsYXJhdGlvbikpIHsKICAgICAgICAgICAgICBjeWNsZXMuYWRkKDxPYmplY3Q+W3ZhcmlhYmxlXS4uYWRkQWxsKGRlcGVuZGVuY3lQYXRoKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIGN5Y2xlczsKfQoKLy8vIENvbnZlcnRzIHJhdyBnZW5lcmljIHR5cGUgW2N5Y2xlc10gZm9yIFtkZWNsYXJhdGlvbl0gaW50byByZXBvcnRhYmxlIGlzc3Vlcy4KLy8vCi8vLyBUaGUgW2N5Y2xlc10gYXJlIGV4cGVjdGVkIHRvIGJlIGluIHRoZSBmb3JtYXQgc3BlY2lmaWVkIGZvciB0aGUgcmV0dXJuIHZhbHVlCi8vLyBvZiBbZmluZFJhd1R5cGVDeWNsZXNdLgovLy8KLy8vIFJldHVybnMgZmxhdHRlbmVkIGxpc3Qgb2YgdHJpcGxldHMuICBUaGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgdHJpcGxldCBpcyB0aGUKLy8vIFtUeXBlRGVjbGFyYXRpb25CdWlsZGVyXSBmb3IgdGhlIHR5cGUgdmFyaWFibGUgZnJvbSBbdmFyaWFibGVzXSB0aGF0IGhhcyByYXcKLy8vIGdlbmVyaWMgdHlwZXMgd2l0aCBpbmJvdW5kIHJlZmVyZW5jZXMgaW4gaXRzIGJvdW5kLiAgVGhlIHNlY29uZCBlbGVtZW50IG9mCi8vLyB0aGUgdHJpcGxldCBpcyB0aGUgZXJyb3IgbWVzc2FnZS4gIFRoZSB0aGlyZCBlbGVtZW50IGlzIHRoZSBjb250ZXh0LgpMaXN0PE9iamVjdD4gY29udmVydFJhd1R5cGVDeWNsZXNJbnRvSXNzdWVzKAogICAgVHlwZURlY2xhcmF0aW9uQnVpbGRlciBkZWNsYXJhdGlvbiwgTGlzdDxMaXN0PE9iamVjdD4+IGN5Y2xlcykgewogIExpc3Q8T2JqZWN0PiBpc3N1ZXMgPSA8T2JqZWN0PltdOwogIGZvciAoTGlzdDxPYmplY3Q+IGN5Y2xlIGluIGN5Y2xlcykgewogICAgaWYgKGN5Y2xlLmxlbmd0aCA9PSAyKSB7CiAgICAgIC8vIExvb3AuCiAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXIgdmFyaWFibGUgPSBjeWNsZVswXTsKICAgICAgTmFtZWRUeXBlQnVpbGRlciB0eXBlID0gY3ljbGVbMV07CiAgICAgIGlzc3Vlcy5hZGQodmFyaWFibGUpOwogICAgICBpc3N1ZXMuYWRkKHRlbXBsYXRlQm91bmRJc3N1ZVZpYUxvb3BOb25TaW1wbGljaXR5CiAgICAgICAgICAud2l0aEFyZ3VtZW50cyh0eXBlLmRlY2xhcmF0aW9uLm5hbWUpKTsKICAgICAgaXNzdWVzLmFkZChudWxsKTsgLy8gQ29udGV4dC4KICAgIH0gZWxzZSB7CiAgICAgIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQgPSA8TG9jYXRlZE1lc3NhZ2U+W107CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY3ljbGUubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyIHZhcmlhYmxlID0gY3ljbGVbaV07CiAgICAgICAgTmFtZWRUeXBlQnVpbGRlciB0eXBlID0gY3ljbGVbaSArIDFdOwogICAgICAgIGNvbnRleHQuYWRkKHRlbXBsYXRlTm9uU2ltcGxlQm91bmRWaWFSZWZlcmVuY2UKICAgICAgICAgICAgLndpdGhBcmd1bWVudHModHlwZS5kZWNsYXJhdGlvbi5uYW1lKQogICAgICAgICAgICAud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgICAgdmFyaWFibGUuZmlsZVVyaSwgdmFyaWFibGUuY2hhck9mZnNldCwgdmFyaWFibGUubmFtZS5sZW5ndGgpKTsKICAgICAgfQogICAgICBOYW1lZFR5cGVCdWlsZGVyIGZpcnN0RW5jb3VudGVyZWRUeXBlID0gY3ljbGVbMV07CgogICAgICBpc3N1ZXMuYWRkKGRlY2xhcmF0aW9uKTsKICAgICAgaXNzdWVzLmFkZCh0ZW1wbGF0ZUJvdW5kSXNzdWVWaWFDeWNsZU5vblNpbXBsaWNpdHkud2l0aEFyZ3VtZW50cygKICAgICAgICAgIGRlY2xhcmF0aW9uLm5hbWUsIGZpcnN0RW5jb3VudGVyZWRUeXBlLmRlY2xhcmF0aW9uLm5hbWUpKTsKICAgICAgaXNzdWVzLmFkZChjb250ZXh0KTsKICAgIH0KICB9CiAgcmV0dXJuIGlzc3VlczsKfQoKLy8vIEZpbmRzIG5vbi1zaW1wbGljaXR5IGlzc3VlcyBmb3IgdGhlIGdpdmVuIHNldCBvZiBbdmFyaWFibGVzXS4KLy8vCi8vLyBUaGUgaXNzdWVzIGFyZSB0aG9zZSBjYXVzZWQgYnkgcmF3IHR5cGVzIHdpdGggaW5ib3VuZCByZWZlcmVuY2VzIGluIHRoZQovLy8gYm91bmRzIG9mIHRoZWlyIHR5cGUgdmFyaWFibGVzLgovLy8KLy8vIFJldHVybnMgZmxhdHRlbmVkIGxpc3Qgb2YgdHJpcGxldHMsIGVhY2ggdHJpcGxldCByZXByZXNlbnRpbmcgYW4gaXNzdWUuICBUaGUKLy8vIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHRyaXBsZXQgaXMgdGhlIHR5cGUgZGVjbGFyYXRpb24gdGhhdCBoYXMgdGhlIGlzc3VlLgovLy8gVGhlIHNlY29uZCBlbGVtZW50IGluIHRoZSB0cmlwbGV0IGlzIHRoZSBlcnJvciBtZXNzYWdlLiAgVGhlIHRoaXJkIGVsZW1lbnQKLy8vIGluIHRoZSB0cmlwbGV0IGlzIHRoZSBjb250ZXh0LgpMaXN0PE9iamVjdD4gZ2V0Tm9uU2ltcGxpY2l0eUlzc3Vlc0ZvclR5cGVWYXJpYWJsZXMoCiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHZhcmlhYmxlcykgewogIGlmICh2YXJpYWJsZXMgPT0gbnVsbCkgcmV0dXJuIDxPYmplY3Q+W107CiAgcmV0dXJuIGdldEluYm91bmRSZWZlcmVuY2VJc3N1ZXModmFyaWFibGVzKTsKfQoKLy8vIEZpbmRzIG5vbi1zaW1wbGljaXR5IGlzc3VlcyBmb3IgdGhlIGdpdmVuIFtkZWNsYXJhdGlvbl0uCi8vLwovLy8gVGhlIGlzc3VlcyBhcmUgdGhvc2UgY2F1c2VkIGJ5IHJhdyB0eXBlcyB3aXRoIGluYm91bmQgcmVmZXJlbmNlcyBpbiB0aGUKLy8vIGJvdW5kcyBvZiB0eXBlIHZhcmlhYmxlcyBmcm9tIFtkZWNsYXJhdGlvbl0gYW5kIGJ5IGN5Y2xlcyBvZiByYXcgdHlwZXMKLy8vIGNvbnRhaW5pbmcgW2RlY2xhcmF0aW9uXS4KLy8vCi8vLyBSZXR1cm5zIGZsYXR0ZW5lZCBsaXN0IG9mIHRyaXBsZXRzLCBlYWNoIHRyaXBsZXQgcmVwcmVzZW50aW5nIGFuIGlzc3VlLiAgVGhlCi8vLyBmaXJzdCBlbGVtZW50IGluIHRoZSB0cmlwbGV0IGlzIHRoZSB0eXBlIGRlY2xhcmF0aW9uIHRoYXQgaGFzIHRoZSBpc3N1ZS4KLy8vIFRoZSBzZWNvbmQgZWxlbWVudCBpbiB0aGUgdHJpcGxldCBpcyB0aGUgZXJyb3IgbWVzc2FnZS4gIFRoZSB0aGlyZCBlbGVtZW50Ci8vLyBpbiB0aGUgdHJpcGxldCBpcyB0aGUgY29udGV4dC4KTGlzdDxPYmplY3Q+IGdldE5vblNpbXBsaWNpdHlJc3N1ZXNGb3JEZWNsYXJhdGlvbigKICAgIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIgZGVjbGFyYXRpb24sCiAgICB7Ym9vbCBwZXJmb3JtRXJyb3JSZWNvdmVyeTogdHJ1ZX0pIHsKICBMaXN0PE9iamVjdD4gaXNzdWVzID0gPE9iamVjdD5bXTsKICBpZiAoZGVjbGFyYXRpb24gaXMgQ2xhc3NCdWlsZGVyICYmIGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgaXNzdWVzLmFkZEFsbChnZXRJbmJvdW5kUmVmZXJlbmNlSXNzdWVzKGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXMpKTsKICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIFR5cGVBbGlhc0J1aWxkZXIgJiYKICAgICAgZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICBpc3N1ZXMuYWRkQWxsKGdldEluYm91bmRSZWZlcmVuY2VJc3N1ZXMoZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlcykpOwogIH0KICBMaXN0PExpc3Q8T2JqZWN0Pj4gY3ljbGVzVG9SZXBvcnQgPSA8TGlzdDxPYmplY3Q+PltdOwogIGZvciAoTGlzdDxPYmplY3Q+IGN5Y2xlIGluIGZpbmRSYXdUeXBlQ3ljbGVzKGRlY2xhcmF0aW9uKSkgewogICAgLy8gVG8gYXZvaWQgcmVwb3J0aW5nIHRoZSBzYW1lIGVycm9yIGZvciBlYWNoIGVsZW1lbnQgb2YgdGhlIGN5Y2xlLCB3ZSBvbmx5CiAgICAvLyBkbyBzbyBpZiBpdCBjb21lcyB0aGUgZmlyc3QgaW4gdGhlIGxleGljb2dyYXBoaWNhbCBvcmRlci4gIE5vdGUgdGhhdAogICAgLy8gb25lLWVsZW1lbnQgY3ljbGVzIHNob3VsZG4ndCBiZSBjaGVja2VkLCBhcyB0aGV5IGFyZSBsb29wcy4KICAgIGlmIChjeWNsZS5sZW5ndGggPT0gMikgewogICAgICBjeWNsZXNUb1JlcG9ydC5hZGQoY3ljbGUpOwogICAgfSBlbHNlIHsKICAgICAgU3RyaW5nIGRlY2xhcmF0aW9uUGF0aEFuZE5hbWUgPQogICAgICAgICAgIiR7ZGVjbGFyYXRpb24uZmlsZVVyaX06JHtkZWNsYXJhdGlvbi5uYW1lfSI7CiAgICAgIFN0cmluZyBsZXhNaW5QYXRoQW5kTmFtZSA9IG51bGw7CiAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgY3ljbGUubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgICBOYW1lZFR5cGVCdWlsZGVyIHR5cGUgPSBjeWNsZVtpXTsKICAgICAgICBTdHJpbmcgcGF0aEFuZE5hbWUgPQogICAgICAgICAgICAiJHt0eXBlLmRlY2xhcmF0aW9uLmZpbGVVcml9OiR7dHlwZS5kZWNsYXJhdGlvbi5uYW1lfSI7CiAgICAgICAgaWYgKGxleE1pblBhdGhBbmROYW1lID09IG51bGwgfHwKICAgICAgICAgICAgbGV4TWluUGF0aEFuZE5hbWUuY29tcGFyZVRvKHBhdGhBbmROYW1lKSA+IDApIHsKICAgICAgICAgIGxleE1pblBhdGhBbmROYW1lID0gcGF0aEFuZE5hbWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChkZWNsYXJhdGlvblBhdGhBbmROYW1lID09IGxleE1pblBhdGhBbmROYW1lKSB7CiAgICAgICAgY3ljbGVzVG9SZXBvcnQuYWRkKGN5Y2xlKTsKICAgICAgfQogICAgfQogIH0KICBMaXN0PE9iamVjdD4gcmF3VHlwZUN5Y2xlc0FzSXNzdWVzID0KICAgICAgY29udmVydFJhd1R5cGVDeWNsZXNJbnRvSXNzdWVzKGRlY2xhcmF0aW9uLCBjeWNsZXNUb1JlcG9ydCk7CiAgaXNzdWVzLmFkZEFsbChyYXdUeXBlQ3ljbGVzQXNJc3N1ZXMpOwoKICBpZiAocGVyZm9ybUVycm9yUmVjb3ZlcnkpIHsKICAgIGJyZWFrQ3ljbGVzKGN5Y2xlc1RvUmVwb3J0KTsKICB9CgogIHJldHVybiBpc3N1ZXM7Cn0KCi8vLyBCcmVhayByYXcgZ2VuZXJpYyB0eXBlIFtjeWNsZXNdIGFzIGVycm9yIHJlY292ZXJ5LgovLy8KLy8vIFRoZSBbY3ljbGVzXSBhcmUgZXhwZWN0ZWQgdG8gYmUgaW4gdGhlIGZvcm1hdCBzcGVjaWZpZWQgZm9yIHRoZSByZXR1cm4gdmFsdWUKLy8vIG9mIFtmaW5kUmF3VHlwZUN5Y2xlc10uCnZvaWQgYnJlYWtDeWNsZXMoTGlzdDxMaXN0PE9iamVjdD4+IGN5Y2xlcykgewogIGZvciAoTGlzdDxPYmplY3Q+IGN5Y2xlIGluIGN5Y2xlcykgewogICAgVHlwZVZhcmlhYmxlQnVpbGRlciB2YXJpYWJsZSA9IGN5Y2xlWzBdOwogICAgdmFyaWFibGUuYm91bmQgPSBudWxsOwogIH0KfQoKdm9pZCBmaW5kR2VuZXJpY0Z1bmN0aW9uVHlwZXMoVHlwZUJ1aWxkZXIgdHlwZSwge0xpc3Q8VHlwZUJ1aWxkZXI+IHJlc3VsdH0pIHsKICByZXN1bHQgPz89IDxUeXBlQnVpbGRlcj5bXTsKICBpZiAodHlwZSBpcyBGdW5jdGlvblR5cGVCdWlsZGVyKSB7CiAgICBpZiAodHlwZS50eXBlVmFyaWFibGVzICE9IG51bGwgJiYgdHlwZS50eXBlVmFyaWFibGVzLmxlbmd0aCA+IDApIHsKICAgICAgcmVzdWx0LmFkZCh0eXBlKTsKCiAgICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciB0eXBlVmFyaWFibGUgaW4gdHlwZS50eXBlVmFyaWFibGVzKSB7CiAgICAgICAgZmluZEdlbmVyaWNGdW5jdGlvblR5cGVzKHR5cGVWYXJpYWJsZS5ib3VuZCwgcmVzdWx0OiByZXN1bHQpOwogICAgICAgIGZpbmRHZW5lcmljRnVuY3Rpb25UeXBlcyh0eXBlVmFyaWFibGUuZGVmYXVsdFR5cGUsIHJlc3VsdDogcmVzdWx0KTsKICAgICAgfQogICAgfQogICAgZmluZEdlbmVyaWNGdW5jdGlvblR5cGVzKHR5cGUucmV0dXJuVHlwZSwgcmVzdWx0OiByZXN1bHQpOwogICAgaWYgKHR5cGUuZm9ybWFscyAhPSBudWxsKSB7CiAgICAgIGZvciAoRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBmb3JtYWwgaW4gdHlwZS5mb3JtYWxzKSB7CiAgICAgICAgZmluZEdlbmVyaWNGdW5jdGlvblR5cGVzKGZvcm1hbC50eXBlLCByZXN1bHQ6IHJlc3VsdCk7CiAgICAgIH0KICAgIH0KICB9IGVsc2UgaWYgKHR5cGUgaXMgTmFtZWRUeXBlQnVpbGRlciAmJiB0eXBlLmFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICBmb3IgKFR5cGVCdWlsZGVyIGFyZ3VtZW50IGluIHR5cGUuYXJndW1lbnRzKSB7CiAgICAgIGZpbmRHZW5lcmljRnVuY3Rpb25UeXBlcyhhcmd1bWVudCwgcmVzdWx0OiByZXN1bHQpOwogICAgfQogIH0KfQoKLy8vIFJldHVybnMgdHJ1ZSBpZiBbdHlwZV0gY29udGFpbnMgYW55IHR5cGUgdmFyaWFibGVzIHdoYXRzb2V2ZXIuIFRoaXMgc2hvdWxkCi8vLyBvbmx5IGJlIHVzZWQgZm9yIHdvcmtpbmcgYXJvdW5kIHRyYW5zaXRpb25hbCBpc3N1ZXMuCi8vIFRPRE8oYWhlKTogUmVtb3ZlIHRoaXMgbWV0aG9kLgpib29sIGhhc0FueVR5cGVWYXJpYWJsZXMoRGFydFR5cGUgdHlwZSkgewogIHJldHVybiB0eXBlLmFjY2VwdChjb25zdCBUeXBlVmFyaWFibGVTZWFyY2goKSk7Cn0KCi8vLyBEb24ndCB1c2UgdGhpcyBkaXJlY3RseSwgdXNlIFtoYXNBbnlUeXBlVmFyaWFibGVzXSBpbnN0ZWFkLiBCdXQgZG9uJ3QgdXNlCi8vLyB0aGF0IGVpdGhlci4KLy8gVE9ETyhhaGUpOiBSZW1vdmUgdGhpcyBjbGFzcy4KY2xhc3MgVHlwZVZhcmlhYmxlU2VhcmNoIGltcGxlbWVudHMgRGFydFR5cGVWaXNpdG9yPGJvb2w+IHsKICBjb25zdCBUeXBlVmFyaWFibGVTZWFyY2goKTsKCiAgYm9vbCBkZWZhdWx0RGFydFR5cGUoRGFydFR5cGUgbm9kZSkgPT4gdGhyb3cgInVuc3VwcG9ydGVkIjsKCiAgYm9vbCBhbnlUeXBlVmFyaWFibGVzKExpc3Q8RGFydFR5cGU+IHR5cGVzKSB7CiAgICBmb3IgKERhcnRUeXBlIHR5cGUgaW4gdHlwZXMpIHsKICAgICAgaWYgKHR5cGUuYWNjZXB0KHRoaXMpKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgdmlzaXRJbnZhbGlkVHlwZShJbnZhbGlkVHlwZSBub2RlKSA9PiBmYWxzZTsKCiAgYm9vbCB2aXNpdER5bmFtaWNUeXBlKER5bmFtaWNUeXBlIG5vZGUpID0+IGZhbHNlOwoKICBib29sIHZpc2l0Vm9pZFR5cGUoVm9pZFR5cGUgbm9kZSkgPT4gZmFsc2U7CgogIGJvb2wgdmlzaXRCb3R0b21UeXBlKEJvdHRvbVR5cGUgbm9kZSkgPT4gZmFsc2U7CgogIGJvb2wgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgbm9kZSkgewogICAgcmV0dXJuIGFueVR5cGVWYXJpYWJsZXMobm9kZS50eXBlQXJndW1lbnRzKTsKICB9CgogIGJvb2wgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIG5vZGUpIHsKICAgIGlmIChhbnlUeXBlVmFyaWFibGVzKG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMpKSByZXR1cm4gdHJ1ZTsKICAgIGZvciAoVHlwZVBhcmFtZXRlciB2YXJpYWJsZSBpbiBub2RlLnR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgIGlmICh2YXJpYWJsZS5ib3VuZC5hY2NlcHQodGhpcykpIHJldHVybiB0cnVlOwogICAgfQogICAgZm9yIChOYW1lZFR5cGUgdHlwZSBpbiBub2RlLm5hbWVkUGFyYW1ldGVycykgewogICAgICBpZiAodHlwZS50eXBlLmFjY2VwdCh0aGlzKSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBib29sIHZpc2l0VHlwZVBhcmFtZXRlclR5cGUoVHlwZVBhcmFtZXRlclR5cGUgbm9kZSkgPT4gdHJ1ZTsKCiAgYm9vbCB2aXNpdFR5cGVkZWZUeXBlKFR5cGVkZWZUeXBlIG5vZGUpIHsKICAgIHJldHVybiBhbnlUeXBlVmFyaWFibGVzKG5vZGUudHlwZUFyZ3VtZW50cyk7CiAgfQp9CoNwAE1OPwEhCRQSGRUWFxUTFxsVEgFFAT4BTQEdCRYgHRoaFSAdAUABSQEdCRgxMDksKwE+AUtIUU0SRiI7RSgjDyMIDSkpJjlRDAoXNCkmPCQYIkIlSwwKFwgGLCUjD00GJkVJUFEgKj0mJwoIBiA8IBQ1OggGEwQdAgEdFj09ISIzGTwIOgZAEwYhNjlDJTYvLAgGHVEGEQQBJSkmTAYqIEcGHBoBJjM+LUInJzJDHRoRIwoIBgEgMTk1PygsMx8gHRsdIhoRHwoIBgEiPxwpFgYBE0YGAREEDwIBGExPAgFQOwQaYiJHUUYBLzMEAUhGM0AuPS4rQz8GKy9IHgYEAS85Lj0uLDExTR4GBAERAgFOSRExFiccAVEyGQE0LwEwNCYzMBcpGgYBPiY3OT8KJjk0DAowKkk+DAokQzoMCjcIBgEwKwYEAU4PKRkEAgE2BC0vIBQENiIoFg0kN0MKCAYsRCZKLxdKCjUXUAoIBiA8RAgGBA8CAVEEUE9LIko2NUA4JD8eIwgGJC8yBgQjAgFRBFFKTh1DMiIiPS0hTUkkQh8MChoqNgo4IVFJJEIfDAoaKjYKMC8kPigqMgo0MSZAKiw0DAo3NywoOywuNg4MCggNNR1CCAYsGUUmQSYfSgosH1AKCAYgPB1FCAYEHwIBUQRRUU9JTiQ0IjM9SkIwMkdHUT4iRzgpMD5JLRAMCjROIEU2MAoIBgQRAgFPBEhQUUsXBExIHzIzLTovIzwjJiQzUEwqRzNEEA4MNjNOLDE2OVASEA4MOTkuSS4zODsaURQSEA4MCisIDTZNCAYtUSdCJhhMCiw2NAoIBiE9UAgGBBACAUoESktPTi8ETg9LMEpGJB9NOAoIBjAtSCYrT0QMCggGMzMoQygtUUYODAoIBgQRAgFRBFEcBFFRT0ktRSQnHQ8vKBw4MiQNOTIxLjcyG08IOAEfSEUbBgQRAgFCBEwkBFFNTyM1KywvAgE9BExLHgRRTU8jMygpJEpJMCtJBDg/UExDHSENJjgnMiodRCk8KwoIOSMIBgQnQygBHiEEARECATcEURwuJy0bBAIBTh4lRxgBRUZMCAY/IDw/CAZDMzoGBAIBTzkiKjICAU4RITweAT4BMCMqBhIEATQBNAEuATIBMDEEAS5COjQGMy8GEgQBPwEsMQQCATdwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL3R5cGVfYWxnb3JpdGhtcy5kYXJ0P3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwva2VybmVsX2FzdF9hcGkuZGFydIxOLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBUaGlzIGxpYnJhcnkgZXhwb3J0cyBhbGwgQVBJIGZyb20gS2VybmVsJ3MgYXN0LmRhcnQgdGhhdCBjYW4gYmUgdXNlZAovLy8gdGhyb3VnaG91dCBmYXN0YS4KbGlicmFyeSBmYXN0YS5rZXJuZWxfYXN0X2FwaTsKCmV4cG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQXJndW1lbnRzLAogICAgICAgIEFzRXhwcmVzc2lvbiwKICAgICAgICBBc3NlcnRTdGF0ZW1lbnQsCiAgICAgICAgQXN5bmNNYXJrZXIsCiAgICAgICAgQmxvY2ssCiAgICAgICAgQm90dG9tVHlwZSwKICAgICAgICBCcmVha1N0YXRlbWVudCwKICAgICAgICBDYXRjaCwKICAgICAgICBDaGVja0xpYnJhcnlJc0xvYWRlZCwKICAgICAgICBDbGFzcywKICAgICAgICBDb21wb25lbnQsCiAgICAgICAgQ29uc3RydWN0b3IsCiAgICAgICAgQ29uc3RydWN0b3JJbnZvY2F0aW9uLAogICAgICAgIENvbnRpbnVlU3dpdGNoU3RhdGVtZW50LAogICAgICAgIERhcnRUeXBlLAogICAgICAgIER5bmFtaWNUeXBlLAogICAgICAgIEVtcHR5U3RhdGVtZW50LAogICAgICAgIEV4cHJlc3Npb24sCiAgICAgICAgRXhwcmVzc2lvblN0YXRlbWVudCwKICAgICAgICBGaWVsZCwKICAgICAgICBGb3JJblN0YXRlbWVudCwKICAgICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uLAogICAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbiwKICAgICAgICBGdW5jdGlvbk5vZGUsCiAgICAgICAgRnVuY3Rpb25UeXBlLAogICAgICAgIEluaXRpYWxpemVyLAogICAgICAgIEludGVyZmFjZVR5cGUsCiAgICAgICAgSW52YWxpZEV4cHJlc3Npb24sCiAgICAgICAgSW52YWxpZFR5cGUsCiAgICAgICAgSXNFeHByZXNzaW9uLAogICAgICAgIExhYmVsZWRTdGF0ZW1lbnQsCiAgICAgICAgTGV0LAogICAgICAgIExpYnJhcnksCiAgICAgICAgTGlicmFyeURlcGVuZGVuY3ksCiAgICAgICAgTGlicmFyeVBhcnQsCiAgICAgICAgTGlzdExpdGVyYWwsCiAgICAgICAgTG9jYWxJbml0aWFsaXplciwKICAgICAgICBMb2NhdGlvbiwKICAgICAgICBNYXBFbnRyeSwKICAgICAgICBNYXBMaXRlcmFsLAogICAgICAgIE1lbWJlciwKICAgICAgICBNZXRob2RJbnZvY2F0aW9uLAogICAgICAgIE5hbWUsCiAgICAgICAgTmFtZWRFeHByZXNzaW9uLAogICAgICAgIE5hbWVkVHlwZSwKICAgICAgICBOb2RlLAogICAgICAgIE51bGxMaXRlcmFsLAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBQcm9jZWR1cmVLaW5kLAogICAgICAgIFByb3BlcnR5R2V0LAogICAgICAgIFByb3BlcnR5U2V0LAogICAgICAgIFJldGhyb3csCiAgICAgICAgUmV0dXJuU3RhdGVtZW50LAogICAgICAgIFN0YXRlbWVudCwKICAgICAgICBTdGF0aWNHZXQsCiAgICAgICAgU3RhdGljSW52b2NhdGlvbiwKICAgICAgICBTdGF0aWNTZXQsCiAgICAgICAgU3RyaW5nQ29uY2F0ZW5hdGlvbiwKICAgICAgICBTdXBlckluaXRpYWxpemVyLAogICAgICAgIFN1cGVyTWV0aG9kSW52b2NhdGlvbiwKICAgICAgICBTdXBlclByb3BlcnR5U2V0LAogICAgICAgIFN3aXRjaENhc2UsCiAgICAgICAgVGhpc0V4cHJlc3Npb24sCiAgICAgICAgVHJlZU5vZGUsCiAgICAgICAgVHlwZVBhcmFtZXRlciwKICAgICAgICBUeXBlUGFyYW1ldGVyVHlwZSwKICAgICAgICBUeXBlZGVmLAogICAgICAgIFR5cGVkZWZUeXBlLAogICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24sCiAgICAgICAgVmFyaWFibGVHZXQsCiAgICAgICAgVmFyaWFibGVTZXQsCiAgICAgICAgVm9pZFR5cGUsCiAgICAgICAgc2V0UGFyZW50czsKCmV4cG9ydCAna2VybmVsX3NoYWRvd19hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBBcmd1bWVudHNKdWRnbWVudCwKICAgICAgICBBc3NlcnRJbml0aWFsaXplckp1ZGdtZW50LAogICAgICAgIEFzc2VydFN0YXRlbWVudEp1ZGdtZW50LAogICAgICAgIEJsb2NrSnVkZ21lbnQsCiAgICAgICAgQ2FzY2FkZUp1ZGdtZW50LAogICAgICAgIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQsCiAgICAgICAgQ29udGludWVTd2l0Y2hKdWRnbWVudCwKICAgICAgICBEZWZlcnJlZENoZWNrSnVkZ21lbnQsCiAgICAgICAgRXhwcmVzc2lvblN0YXRlbWVudEp1ZGdtZW50LAogICAgICAgIEZhY3RvcnlDb25zdHJ1Y3Rvckludm9jYXRpb25KdWRnbWVudCwKICAgICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uSnVkZ21lbnQsCiAgICAgICAgRnVuY3Rpb25Ob2RlSnVkZ21lbnQsCiAgICAgICAgSWZKdWRnbWVudCwKICAgICAgICBJZk51bGxKdWRnbWVudCwKICAgICAgICBJbnZhbGlkU3VwZXJJbml0aWFsaXplckp1ZGdtZW50LAogICAgICAgIExvYWRMaWJyYXJ5VGVhck9mZkp1ZGdtZW50LAogICAgICAgIE1ldGhvZEludm9jYXRpb25KdWRnbWVudCwKICAgICAgICBOYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbkp1ZGdtZW50LAogICAgICAgIE51bGxBd2FyZU1ldGhvZEludm9jYXRpb25KdWRnbWVudCwKICAgICAgICBOdWxsQXdhcmVQcm9wZXJ0eUdldEp1ZGdtZW50LAogICAgICAgIFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXJKdWRnbWVudCwKICAgICAgICBSZXR1cm5KdWRnbWVudCwKICAgICAgICBTaGFkb3dGaWVsZEluaXRpYWxpemVyLAogICAgICAgIFNoYWRvd0ludmFsaWRGaWVsZEluaXRpYWxpemVyLAogICAgICAgIFNoYWRvd0ludmFsaWRJbml0aWFsaXplciwKICAgICAgICBTaGFkb3dMYXJnZUludExpdGVyYWwsCiAgICAgICAgU3VwZXJJbml0aWFsaXplckp1ZGdtZW50LAogICAgICAgIFN1cGVyTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50LAogICAgICAgIFN1cGVyUHJvcGVydHlHZXRKdWRnbWVudCwKICAgICAgICBTd2l0Y2hDYXNlSnVkZ21lbnQsCiAgICAgICAgU3dpdGNoU3RhdGVtZW50SnVkZ21lbnQsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50LAogICAgICAgIFZhcmlhYmxlR2V0SnVkZ21lbnQsCiAgICAgICAgWWllbGRKdWRnbWVudDsKegBOTjwBSRYeASEJExYZFQ8UGA8eDxMVHyESFRgUHQ8YHRwWFhUXGxUWGg0RGxUVGhISFBAaDhkTDhUTFxUVERkTExoTHRofGhQYEhcbERUdFRUSFAEgCRsjIRcZIyAfJS4lHhQYKSQiKSsmKBggJyIfIiciHCElHRcBNnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwva2VybmVsX2FzdF9hcGkuZGFydE5zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvYXBpX3Byb3RvdHlwZS9pbmNyZW1lbnRhbF9rZXJuZWxfZ2VuZXJhdG9yLmRhcnSSzC8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6YXN5bmMnIHNob3cgRnV0dXJlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbGFzc19oaWVyYXJjaHkuZGFydCcgc2hvdyBDbGFzc0hpZXJhcmNoeTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0JyBzaG93IENvcmVUeXBlczsKCmltcG9ydCAncGFja2FnZTprZXJuZWwva2VybmVsLmRhcnQnCiAgICBzaG93IENvbXBvbmVudCwgUHJvY2VkdXJlLCBEYXJ0VHlwZSwgVHlwZVBhcmFtZXRlcjsKCmltcG9ydCAnLi4vYmFzZS9wcm9jZXNzZWRfb3B0aW9ucy5kYXJ0JyBzaG93IFByb2Nlc3NlZE9wdGlvbnM7CgppbXBvcnQgJy4uL2Zhc3RhL2NvbXBpbGVyX2NvbnRleHQuZGFydCcgc2hvdyBDb21waWxlckNvbnRleHQ7CgppbXBvcnQgJy4uL2Zhc3RhL2luY3JlbWVudGFsX2NvbXBpbGVyLmRhcnQnIHNob3cgSW5jcmVtZW50YWxDb21waWxlcjsKCmltcG9ydCAnLi4vZmFzdGEvc2Nhbm5lci9zdHJpbmdfc2Nhbm5lci5kYXJ0JyBzaG93IFN0cmluZ1NjYW5uZXI7CgppbXBvcnQgJ2NvbXBpbGVyX29wdGlvbnMuZGFydCcgc2hvdyBDb21waWxlck9wdGlvbnM7CgphYnN0cmFjdCBjbGFzcyBJbmNyZW1lbnRhbEtlcm5lbEdlbmVyYXRvciB7CiAgZmFjdG9yeSBJbmNyZW1lbnRhbEtlcm5lbEdlbmVyYXRvcihDb21waWxlck9wdGlvbnMgb3B0aW9ucywgVXJpIGVudHJ5UG9pbnQsCiAgICAgIFtVcmkgaW5pdGlhbGl6ZUZyb21EaWxsVXJpLCBib29sIG91dGxpbmVPbmx5XSkgewogICAgcmV0dXJuIG5ldyBJbmNyZW1lbnRhbENvbXBpbGVyKAogICAgICAgIG5ldyBDb21waWxlckNvbnRleHQoCiAgICAgICAgICAgIG5ldyBQcm9jZXNzZWRPcHRpb25zKG9wdGlvbnM6IG9wdGlvbnMsIGlucHV0czogW2VudHJ5UG9pbnRdKSksCiAgICAgICAgaW5pdGlhbGl6ZUZyb21EaWxsVXJpLAogICAgICAgIG91dGxpbmVPbmx5KTsKICB9CgogIC8vLyBJbml0aWFsaXplIHRoZSBpbmNyZW1lbnRhbCBjb21waWxlciBmcm9tIGEgY29tcG9uZW50LgogIC8vLwogIC8vLyBOb3RpY2UgdGhhdCB0aGUgY29tcG9uZW50IGhhcyB0byBpbmNsdWRlIHRoZSBwbGF0Zm9ybSwgYW5kIHRoYXQgbm8gb3RoZXIKICAvLy8gcGxhdGZvcm0gd2lsbCBiZSBsb2FkZWQuCiAgZmFjdG9yeSBJbmNyZW1lbnRhbEtlcm5lbEdlbmVyYXRvci5mcm9tQ29tcG9uZW50KAogICAgICBDb21waWxlck9wdGlvbnMgb3B0aW9ucywgVXJpIGVudHJ5UG9pbnQsIENvbXBvbmVudCBjb21wb25lbnQsCiAgICAgIFtib29sIG91dGxpbmVPbmx5XSkgewogICAgcmV0dXJuIG5ldyBJbmNyZW1lbnRhbENvbXBpbGVyLmZyb21Db21wb25lbnQoCiAgICAgICAgbmV3IENvbXBpbGVyQ29udGV4dCgKICAgICAgICAgICAgbmV3IFByb2Nlc3NlZE9wdGlvbnMob3B0aW9uczogb3B0aW9ucywgaW5wdXRzOiBbZW50cnlQb2ludF0pKSwKICAgICAgICBjb21wb25lbnQsCiAgICAgICAgb3V0bGluZU9ubHkpOwogIH0KCiAgLy8vIFJldHVybnMgYSBjb21wb25lbnQgd2hvc2UgbGlicmFyaWVzIGFyZSB0aGUgcmVjb21waWxlZCBsaWJyYXJpZXMsCiAgLy8vIG9yIC0gaW4gdGhlIGNhc2Ugb2YgW2Z1bGxDb21wb25lbnRdIC0gYSBmdWxsIENvbXBvbmVudC4KICBGdXR1cmU8Q29tcG9uZW50PiBjb21wdXRlRGVsdGEoe0xpc3Q8VXJpPiBlbnRyeVBvaW50cywgYm9vbCBmdWxsQ29tcG9uZW50fSk7CgogIC8vLyBSZXR1cm5zIFtDb3JlVHlwZXNdIHVzZWQgZHVyaW5nIGNvbXBpbGF0aW9uLgogIC8vLyBWYWxpZCBhZnRlciBbY29tcHV0ZURlbHRhXSBpcyBjYWxsZWQuCiAgQ29yZVR5cGVzIGdldENvcmVUeXBlcygpOwoKICAvLy8gUmV0dXJucyBbQ2xhc3NIaWVyYXJjaHldIHVzZWQgZHVyaW5nIGNvbXBpbGF0aW9uLgogIC8vLyBWYWxpZCBhZnRlciBbY29tcHV0ZURlbHRhXSBpcyBjYWxsZWQuCiAgQ2xhc3NIaWVyYXJjaHkgZ2V0Q2xhc3NIaWVyYXJjaHkoKTsKCiAgLy8vIFJlbW92ZSB0aGUgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGZpbGUgW3VyaV0gZnJvbSB0aGUgc2V0IG9mCiAgLy8vIHZhbGlkIGZpbGVzLiAgVGhpcyBndWFyYW50ZWVzIHRoYXQgdGhvc2UgZmlsZXMgd2lsbCBiZSByZS1yZWFkIG9uIHRoZQogIC8vLyBuZXh0IGNhbGwgdG8gW2NvbXB1dGVEZWx0YV0pLgogIHZvaWQgaW52YWxpZGF0ZShVcmkgdXJpKTsKCiAgLy8vIEludmFsaWRhdGUgYWxsIGxpYnJhcmllcyB0aGF0IHdlcmUgYnVpbGQgZnJvbSBzb3VyY2UuCiAgLy8vCiAgLy8vIFRoaXMgaXMgZXF1aXZhbGVudCB0byBhIG51bWJlciBvZiBjYWxscyB0byBbaW52YWxpZGF0ZV06IE9uZSBmb3IgZWFjaCBVUkkKICAvLy8gdGhhdCBoYXBwZW5zIHRvIGhhdmUgYmVlbiByZWFkIGZyb20gc291cmNlLgogIC8vLyBTYWlkIGFub3RoZXIgd2F5LCB0aGlzIGludmFsaWRhdGVzIGV2ZXJ5dGhpbmcgbm90IGxvYWRlZCBmcm9tIGRpbGwKICAvLy8gKGF0IHN0YXJ0dXApIG9yIHZpYSBbc2V0TW9kdWxlc1RvTG9hZE9uTmV4dENvbXB1dGVEZWx0YV0uCiAgdm9pZCBpbnZhbGlkYXRlQWxsU291cmNlcygpOwoKICAvLy8gU2V0IHRoZSBnaXZlbiBbY29tcG9uZW50c10gYXMgY29tcG9uZW50cyB0byBsb2FkIG9uIHRoZSBuZXh0IGl0ZXJhdGlvbgogIC8vLyBvZiBbY29tcHV0ZURlbHRhXS4KICAvLy8KICAvLy8gSWYgc3BlY2lmaWVkLCBhbGwgbGlicmFyaWVzIG5vdCBjb21waWxlZCBmcm9tIHNvdXJjZSBhbmQgbm90IGluY2x1ZGVkIGluCiAgLy8vIHRoZXNlIGNvbXBvbmVudHMgd2lsbCBiZSBpbnZhbGlkYXRlZCBhbmQgdGhlIGxpYnJhcmllcyBpbnNpZGUgdGhlc2UKICAvLy8gY29tcG9uZW50cyB3aWxsIGJlIGxvYWRlZCBpbnN0ZWFkLgogIC8vLwogIC8vLyBVc2VmdWwgZm9yLCBmb3IgaW5zdGFuY2UsIG1vZHVsYXIgY29tcGlsYXRpb24sIHdoZXJlIG1vZHVsZXMKICAvLy8gKGNyZWF0ZWQgZXh0ZXJuYWxseSkgdmlhIHRoaXMgZnVuY3Rpb25hbGl0eSBjYW4gYmUgYWRkZWQsIGNoYW5nZWQgb3IKICAvLy8gcmVtb3ZlZC4KICB2b2lkIHNldE1vZHVsZXNUb0xvYWRPbk5leHRDb21wdXRlRGVsdGEoTGlzdDxDb21wb25lbnQ+IGNvbXBvbmVudHMpOwoKICAvLy8gQ29tcGlsZSBbZXhwcmVzc2lvbl0gYXMgYW4gW0V4cHJlc3Npb25dLiBBIGZ1bmN0aW9uIHJldHVybmluZyB0aGF0CiAgLy8vIGV4cHJlc3Npb24gaXMgY29tcGlsZWQuCiAgLy8vCiAgLy8vIFtleHByZXNzaW9uXSBtYXkgdXNlIHRoZSB2YXJpYWJsZXMgc3VwcGxpZWQgaW4gW2RlZmluaXRpb25zXSBhcyBmcmVlCiAgLy8vIHZhcmlhYmxlcyBhbmQgW3R5cGVEZWZpbml0aW9uc10gYXMgZnJlZSB0eXBlIHZhcmlhYmxlcy4gVGhlc2Ugd2lsbCBiZWNvbWUKICAvLy8gcmVxdWlyZWQgcGFyYW1ldGVycyB0byB0aGUgY29tcGlsZWQgZnVuY3Rpb24uIEFsbCBlbGVtZW50cyBvZgogIC8vLyBbZGVmaW5pdGlvbnNdIGFuZCBbdHlwZURlZmluaXRpb25zXSB3aWxsIGJlY29tZSBwYXJhbWV0ZXJzL3R5cGUKICAvLy8gcGFyYW1ldGVycywgd2hldGhlciBvciBub3QgdGhleSBhcHBlYXIgZnJlZSBpbiBbZXhwcmVzc2lvbl0uIFRoZSB0eXBlCiAgLy8vIHBhcmFtZXRlcnMgc2hvdWxkIGhhdmUgYSBudWxsIHBhcmVudCBwb2ludGVyLgogIC8vLwogIC8vLyBbbGlicmFyeVVyaV0gbXVzdCByZWZlciB0byBlaXRoZXIgYSBwcmV2aW91c2x5IGNvbXBpbGVkIGxpYnJhcnkuCiAgLy8vIFtjbGFzc05hbWVdIG1heSBvcHRpb25hbGx5IHJlZmVyIHRvIGEgY2xhc3Mgd2l0aGluIHN1Y2ggbGlicmFyeSB0byB1c2UgZm9yCiAgLy8vIHRoZSBzY29wZSBvZiB0aGUgZXhwcmVzc2lvbi4gSW4gdGhhdCBjYXNlLCBbaXNTdGF0aWNdIGluZGljYXRlcyB3aGV0aGVyCiAgLy8vIHRoZSBzY29wZSBjYW4gYWNjZXNzIFt0aGlzXS4KICAvLy8KICAvLy8gSXQgaXMgaWxsZWdhbCB0byB1c2UgImF3YWl0IiBpbiBbZXhwcmVzc2lvbl0gYW5kIHRoZSBjb21waWxlZCBmdW5jdGlvbgogIC8vLyB3aWxsIGFsd2F5cyBiZSBzeW5jaHJvbm91cy4KICAvLy8KICAvLy8gW2NvbXB1dGVEZWx0YV0gbXVzdCBoYXZlIGJlZW4gY2FsbGVkIGF0IGxlYXN0IG9uY2UgcHJpb3IuCiAgLy8vCiAgLy8vIFtjb21waWxlRXhwcmVzc2lvbl0gd2lsbCByZXR1cm4gW251bGxdIGlmIHRoZSBsaWJyYXJ5IG9yIGNsYXNzIGZvcgogIC8vLyBbZW5jbG9zaW5nTm9kZV0gY291bGQgbm90IGJlIGZvdW5kLiBPdGhlcndpc2UsIGVycm9ycyBhcmUgcmVwb3J0ZWQgaW4gdGhlCiAgLy8vIG5vcm1hbCB3YXkuCiAgRnV0dXJlPFByb2NlZHVyZT4gY29tcGlsZUV4cHJlc3Npb24oCiAgICAgIFN0cmluZyBleHByZXNzaW9uLAogICAgICBNYXA8U3RyaW5nLCBEYXJ0VHlwZT4gZGVmaW5pdGlvbnMsCiAgICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZURlZmluaXRpb25zLAogICAgICBTdHJpbmcgc3ludGhldGljUHJvY2VkdXJlTmFtZSwKICAgICAgVXJpIGxpYnJhcnlVcmksCiAgICAgIFtTdHJpbmcgY2xhc3NOYW1lLAogICAgICBib29sIGlzU3RhdGljID0gZmFsc2VdKTsKfQoKYm9vbCBpc0xlZ2FsSWRlbnRpZmllcihTdHJpbmcgaWRlbnRpZmllcikgewogIHJldHVybiBTdHJpbmdTY2FubmVyLmlzTGVnYWxJZGVudGlmaWVyKGlkZW50aWZpZXIpOwp9CnoATk48ASEBQgE4ASQ4AT8BPgFGAUIBNQEsTjckHUsfFgQBPAZPHzREHDIdSxMWBAFIPk8BMywcATgsJgFLTCQcATwGUDJJQB8BTRkGT0opBkNLD0cBSR4GS1BERkw0BkdRTiMGTSIGQAZJUBInGSkrJRYZHwIBLDYCAUVwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9pbmNyZW1lbnRhbF9rZXJuZWxfZ2VuZXJhdG9yLmRhcnREc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2FwaV9wcm90b3R5cGUvbWVtb3J5X2ZpbGVfc3lzdGVtLmRhcnSPaS8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZyb250X2VuZC5tZW1vcnlfZmlsZV9zeXN0ZW07CgppbXBvcnQgJ2RhcnQ6YXN5bmMnOwppbXBvcnQgJ2RhcnQ6Y29udmVydCc7CmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJzsKCmltcG9ydCAnZmlsZV9zeXN0ZW0uZGFydCc7CgovLy8gQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgW0ZpbGVTeXN0ZW1dIHdoaWNoIHBlcmZvcm1zIGl0cyBvcGVyYXRpb25zIG9uIGFuCi8vLyBpbi1tZW1vcnkgdmlydHVhbCBmaWxlIHN5c3RlbS4KLy8vCi8vLyBOb3QgaW50ZW5kZWQgdG8gYmUgaW1wbGVtZW50ZWQgb3IgZXh0ZW5kZWQgYnkgY2xpZW50cy4KY2xhc3MgTWVtb3J5RmlsZVN5c3RlbSBpbXBsZW1lbnRzIEZpbGVTeXN0ZW0gewogIGZpbmFsIE1hcDxVcmksIFVpbnQ4TGlzdD4gX2ZpbGVzID0ge307CiAgZmluYWwgU2V0PFVyaT4gX2RpcmVjdG9yaWVzID0gbmV3IFNldDxVcmk+KCk7CgogIC8vLyBUaGUgImN1cnJlbnQgZGlyZWN0b3J5IiBpbiB0aGUgaW4tbWVtb3J5IHZpcnR1YWwgZmlsZSBzeXN0ZW0uCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCB0byBjb252ZXJ0IHJlbGF0aXZlIFVSSXMgdG8gYWJzb2x1dGUgVVJJcy4KICAvLy8KICAvLy8gQWx3YXlzIGVuZHMgaW4gYSB0cmFpbGluZyAnLycuCiAgVXJpIGN1cnJlbnREaXJlY3Rvcnk7CgogIE1lbW9yeUZpbGVTeXN0ZW0oVXJpIGN1cnJlbnREaXJlY3RvcnkpCiAgICAgIDogY3VycmVudERpcmVjdG9yeSA9IF9hZGRUcmFpbGluZ1NsYXNoKGN1cnJlbnREaXJlY3RvcnkpOwoKICBAb3ZlcnJpZGUKICBNZW1vcnlGaWxlU3lzdGVtRW50aXR5IGVudGl0eUZvclVyaShVcmkgdXJpKSB7CiAgICByZXR1cm4gbmV3IE1lbW9yeUZpbGVTeXN0ZW1FbnRpdHkuXygKICAgICAgICB0aGlzLCBjdXJyZW50RGlyZWN0b3J5LnJlc29sdmVVcmkodXJpKS5ub3JtYWxpemVQYXRoKCkpOwogIH0KCiAgU3RyaW5nIGdldCBkZWJ1Z1N0cmluZyB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBfZmlsZXMuZm9yRWFjaCgodXJpLCBfKSA9PiBzYi53cml0ZSgiLSAkdXJpXG4iKSk7CiAgICBfZGlyZWN0b3JpZXMuZm9yRWFjaCgodXJpKSA9PiBzYi53cml0ZSgiLSAkdXJpXG4iKSk7CiAgICByZXR1cm4gJyRzYic7CiAgfQoKICBzdGF0aWMgVXJpIF9hZGRUcmFpbGluZ1NsYXNoKFVyaSB1cmkpIHsKICAgIGlmICghdXJpLnBhdGguZW5kc1dpdGgoJy8nKSkgewogICAgICB1cmkgPSB1cmkucmVwbGFjZShwYXRoOiB1cmkucGF0aCArICcvJyk7CiAgICB9CiAgICByZXR1cm4gdXJpOwogIH0KfQoKLy8vIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIFtGaWxlU3lzdGVtRW50aXR5XSBmb3IgdXNlIGJ5Ci8vLyBbTWVtb3J5RmlsZVN5c3RlbV0uCmNsYXNzIE1lbW9yeUZpbGVTeXN0ZW1FbnRpdHkgaW1wbGVtZW50cyBGaWxlU3lzdGVtRW50aXR5IHsKICBmaW5hbCBNZW1vcnlGaWxlU3lzdGVtIF9maWxlU3lzdGVtOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBVcmkgdXJpOwoKICBNZW1vcnlGaWxlU3lzdGVtRW50aXR5Ll8odGhpcy5fZmlsZVN5c3RlbSwgdGhpcy51cmkpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHVyaS5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpID0+CiAgICAgIG90aGVyIGlzIE1lbW9yeUZpbGVTeXN0ZW1FbnRpdHkgJiYKICAgICAgb3RoZXIudXJpID09IHVyaSAmJgogICAgICBpZGVudGljYWwob3RoZXIuX2ZpbGVTeXN0ZW0sIF9maWxlU3lzdGVtKTsKCiAgLy8vIENyZWF0ZSBhIGRpcmVjdG9yeSBmb3IgdGhpcyBmaWxlIHN5c3RlbSBlbnRyeS4KICAvLy8KICAvLy8gSWYgdGhlIGVudHJ5IGlzIGFuIGV4aXN0aW5nIGZpbGUsIHRoaXMgaXMgYW4gZXJyb3IuCiAgdm9pZCBjcmVhdGVEaXJlY3RvcnkoKSB7CiAgICBpZiAoX2ZpbGVTeXN0ZW0uX2ZpbGVzW3VyaV0gIT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbih1cmksICdFbnRyeSAkdXJpIGlzIGEgZmlsZS4nKTsKICAgIH0KICAgIF9maWxlU3lzdGVtLl9kaXJlY3Rvcmllcy5hZGQodXJpKTsKICB9CgogIEBvdmVycmlkZQogIEZ1dHVyZTxib29sPiBleGlzdHMoKSBhc3luYyB7CiAgICByZXR1cm4gX2ZpbGVTeXN0ZW0uX2ZpbGVzW3VyaV0gIT0gbnVsbCB8fAogICAgICAgIF9maWxlU3lzdGVtLl9kaXJlY3Rvcmllcy5jb250YWlucyh1cmkpOwogIH0KCiAgQG92ZXJyaWRlCiAgRnV0dXJlPExpc3Q8aW50Pj4gcmVhZEFzQnl0ZXMoKSBhc3luYyB7CiAgICBVaW50OExpc3QgY29udGVudHMgPSBfZmlsZVN5c3RlbS5fZmlsZXNbdXJpXTsKICAgIGlmIChjb250ZW50cyA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKHVyaSwgJ0ZpbGUgJHVyaSBkb2VzIG5vdCBleGlzdC4nKTsKICAgIH0KICAgIHJldHVybiBjb250ZW50czsKICB9CgogIEBvdmVycmlkZQogIEZ1dHVyZTxTdHJpbmc+IHJlYWRBc1N0cmluZygpIGFzeW5jIHsKICAgIExpc3Q8aW50PiBieXRlcyA9IGF3YWl0IHJlYWRBc0J5dGVzKCk7CiAgICB0cnkgewogICAgICByZXR1cm4gdXRmOC5kZWNvZGUoYnl0ZXMpOwogICAgfSBvbiBGb3JtYXRFeGNlcHRpb24gY2F0Y2ggKGUpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24odXJpLCBlLm1lc3NhZ2UpOwogICAgfQogIH0KCiAgLy8vIFdyaXRlcyB0aGUgZ2l2ZW4gcmF3IGJ5dGVzIHRvIHRoaXMgZmlsZSBzeXN0ZW0gZW50aXR5LgogIC8vLwogIC8vLyBJZiBubyBmaWxlIGV4aXN0cywgb25lIGlzIGNyZWF0ZWQuICBJZiBhIGZpbGUgZXhpc3RzIGFscmVhZHksIGl0IGlzCiAgLy8vIG92ZXJ3cml0dGVuLgogIHZvaWQgd3JpdGVBc0J5dGVzU3luYyhMaXN0PGludD4gYnl0ZXMpIHsKICAgIGlmIChieXRlcyBpcyBVaW50OExpc3QpIHsKICAgICAgX3VwZGF0ZSh1cmksIGJ5dGVzKTsKICAgIH0gZWxzZSB7CiAgICAgIF91cGRhdGUodXJpLCBuZXcgVWludDhMaXN0LmZyb21MaXN0KGJ5dGVzKSk7CiAgICB9CiAgfQoKICAvLy8gV3JpdGVzIHRoZSBnaXZlbiBzdHJpbmcgdG8gdGhpcyBmaWxlIHN5c3RlbSBlbnRpdHkuCiAgLy8vCiAgLy8vIFRoZSBzdHJpbmcgaXMgZW5jb2RlZCBhcyBVVEYtOC4KICAvLy8KICAvLy8gSWYgbm8gZmlsZSBleGlzdHMsIG9uZSBpcyBjcmVhdGVkLiAgSWYgYSBmaWxlIGV4aXN0cyBhbHJlYWR5LCBpdCBpcwogIC8vLyBvdmVyd3JpdHRlbi4KICB2b2lkIHdyaXRlQXNTdHJpbmdTeW5jKFN0cmluZyBzKSB7CiAgICAvLyBOb3RlOiB0aGUgcmV0dXJuIHR5cGUgb2YgdXRmOC5lbmNvZGUgaXMgTGlzdDxpbnQ+LCBidXQgaW4gcHJhY3RpY2UgaXQKICAgIC8vIGFsd2F5cyByZXR1cm5zIFVpbnQ4TGlzdC4gIFdlIHJlbHkgb24gdGhhdCBmb3IgZWZmaWNpZW5jeSwgc28gdGhhdCB3ZQogICAgLy8gZG9uJ3QgaGF2ZSB0byBtYWtlIGFuIGV4dHJhIGNvcHkuCiAgICBfdXBkYXRlKHVyaSwgdXRmOC5lbmNvZGUocykgYXMgVWludDhMaXN0KTsKICB9CgogIHZvaWQgX3VwZGF0ZShVcmkgdXJpLCBVaW50OExpc3QgZGF0YSkgewogICAgaWYgKF9maWxlU3lzdGVtLl9kaXJlY3Rvcmllcy5jb250YWlucyh1cmkpKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKHVyaSwgJ0VudHJ5ICR1cmkgaXMgYSBkaXJlY3RvcnkuJyk7CiAgICB9CiAgICBfZmlsZVN5c3RlbS5fZmlsZXNbdXJpXSA9IGRhdGE7CiAgfQp9CoCLAE5OPAEmARUXGgEbAVAjBDsvKTABRAY+BiUYASlAAQwxKUEEARsqNjkSBAEqIy8GEAQCAT0YOyYBDBEBOAEMJAEMJCkaMQE1BjobK0MGJwQBDCAuMAQBDCoyHEcGFQQBDCgrCiElNQYEAT0GShMrHhsNMwYEAToGJgZKEyVNTSkvBAEqMkgGJAQCATtwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9tZW1vcnlfZmlsZV9zeXN0ZW0uZGFydDdzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlcl9ncmFwaC5kYXJ0iF4vLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5idWlsZGVyX2dyYXBoOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9rZXJuZWwuZGFydCcgc2hvdyBMaWJyYXJ5RGVwZW5kZW5jeSwgTGlicmFyeVBhcnQ7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3V0aWwvZ3JhcGguZGFydCcgc2hvdyBHcmFwaDsKCmltcG9ydCAnYnVpbGRlci9idWlsZGVyLmRhcnQnIHNob3cgTGlicmFyeUJ1aWxkZXI7CgppbXBvcnQgJ2V4cG9ydC5kYXJ0JyBzaG93IEV4cG9ydDsKCmltcG9ydCAnaW1wb3J0LmRhcnQnIHNob3cgSW1wb3J0OwoKaW1wb3J0ICdkaWxsL2RpbGxfbGlicmFyeV9idWlsZGVyLmRhcnQnIHNob3cgRGlsbExpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICdzb3VyY2Uvc291cmNlX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZUxpYnJhcnlCdWlsZGVyOwoKY2xhc3MgQnVpbGRlckdyYXBoIGltcGxlbWVudHMgR3JhcGg8VXJpPiB7CiAgZmluYWwgTWFwPFVyaSwgTGlicmFyeUJ1aWxkZXI+IGJ1aWxkZXJzOwoKICBCdWlsZGVyR3JhcGgodGhpcy5idWlsZGVycyk7CgogIEl0ZXJhYmxlPFVyaT4gZ2V0IHZlcnRpY2VzID0+IGJ1aWxkZXJzLmtleXM7CgogIEl0ZXJhYmxlPFVyaT4gbmVpZ2hib3JzT2YoVXJpIHZlcnRleCkgc3luYyogewogICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IGJ1aWxkZXJzW3ZlcnRleF07CiAgICBpZiAobGlicmFyeSA9PSBudWxsKSB7CiAgICAgIHRocm93ICJMaWJyYXJ5IG5vdCBmb3VuZDogJHZlcnRleCI7CiAgICB9CiAgICBpZiAobGlicmFyeSBpcyBTb3VyY2VMaWJyYXJ5QnVpbGRlcikgewogICAgICBmb3IgKEltcG9ydCBpbXBvcnQgaW4gbGlicmFyeS5pbXBvcnRzKSB7CiAgICAgICAgLy8gJ2ltcG9ydGVkJyBjYW4gYmUgbnVsbCBmb3IgZmFrZSBpbXBvcnRzLCBzdWNoIGFzIGRhcnQtZXh0Oi4KICAgICAgICBpZiAoaW1wb3J0LmltcG9ydGVkICE9IG51bGwpIHsKICAgICAgICAgIFVyaSB1cmkgPSBpbXBvcnQuaW1wb3J0ZWQudXJpOwogICAgICAgICAgaWYgKGJ1aWxkZXJzLmNvbnRhaW5zS2V5KHVyaSkpIHsKICAgICAgICAgICAgeWllbGQgdXJpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBmb3IgKEV4cG9ydCBleHBvcnQgaW4gbGlicmFyeS5leHBvcnRzKSB7CiAgICAgICAgVXJpIHVyaSA9IGV4cG9ydC5leHBvcnRlZC51cmk7CiAgICAgICAgaWYgKGJ1aWxkZXJzLmNvbnRhaW5zS2V5KHVyaSkpIHsKICAgICAgICAgIHlpZWxkIHVyaTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZm9yIChTb3VyY2VMaWJyYXJ5QnVpbGRlciBwYXJ0IGluIGxpYnJhcnkucGFydHMpIHsKICAgICAgICBVcmkgdXJpID0gcGFydC51cmk7CiAgICAgICAgaWYgKGJ1aWxkZXJzLmNvbnRhaW5zS2V5KHVyaSkpIHsKICAgICAgICAgIHlpZWxkIHVyaTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAobGlicmFyeSBpcyBEaWxsTGlicmFyeUJ1aWxkZXIpIHsKICAgICAgLy8gSW1wb3J0cyBhbmQgZXhwb3J0cwogICAgICBmb3IgKExpYnJhcnlEZXBlbmRlbmN5IGRlcGVuZGVuY3kgaW4gbGlicmFyeS5saWJyYXJ5LmRlcGVuZGVuY2llcykgewogICAgICAgIFVyaSB1cmkgPSBkZXBlbmRlbmN5LnRhcmdldExpYnJhcnkuaW1wb3J0VXJpOwogICAgICAgIGlmIChidWlsZGVycy5jb250YWluc0tleSh1cmkpKSB7CiAgICAgICAgICB5aWVsZCB1cmk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvLyBQYXJ0cwogICAgICBmb3IgKExpYnJhcnlQYXJ0IHBhcnQgaW4gbGlicmFyeS5saWJyYXJ5LnBhcnRzKSB7CiAgICAgICAgVXJpIHVyaSA9IGxpYnJhcnkudXJpLnJlc29sdmUocGFydC5wYXJ0VXJpKTsKICAgICAgICBpZiAoYnVpbGRlcnMuY29udGFpbnNLZXkodXJpKSkgewogICAgICAgICAgeWllbGQgdXJpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQpLAE5OPAEdAUkBNAEzASIBIgFBAUcBKysBHwEvATAvGyoGKy9HJykrFwwKCC8nKRUKCDkcKRUKCDAdSzYpFQoIAQ84NSkVCggGBAIBLnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyX2dyYXBoLmRhcnQ0c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2NvbWJpbmF0b3IuZGFydIK7Ly8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuY29tYmluYXRvcjsKCmNsYXNzIENvbWJpbmF0b3IgewogIGZpbmFsIGJvb2wgaXNTaG93OwoKICBmaW5hbCBTZXQ8U3RyaW5nPiBuYW1lczsKCiAgQ29tYmluYXRvcih0aGlzLmlzU2hvdywgdGhpcy5uYW1lcywgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpKTsKCiAgQ29tYmluYXRvci5zaG93KEl0ZXJhYmxlPFN0cmluZz4gbmFtZXMsIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSkKICAgICAgOiB0aGlzKHRydWUsIG5ldyBTZXQ8U3RyaW5nPi5mcm9tKG5hbWVzKSwgY2hhck9mZnNldCwgZmlsZVVyaSk7CgogIENvbWJpbmF0b3IuaGlkZShJdGVyYWJsZTxTdHJpbmc+IG5hbWVzLCBpbnQgY2hhck9mZnNldCwgVXJpIGZpbGVVcmkpCiAgICAgIDogdGhpcyhmYWxzZSwgbmV3IFNldDxTdHJpbmc+LmZyb20obmFtZXMpLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKCiAgYm9vbCBnZXQgaXNIaWRlID0+ICFpc1Nob3c7Cn0KFwBOTjwBGgETFQEbAUQBR0YBR0cBHgIBK3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9jb21iaW5hdG9yLmRhcnRJc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3V0aWwvZXJyb3JfcmVwb3J0ZXJfZmlsZV9jb3BpZXIuZGFydILlLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDppbycgc2hvdyBEaXJlY3RvcnksIEZpbGUsIEdaaXBDb2RlYzsKClVyaSBzYXZlQXNHemlwKExpc3Q8aW50PiBkYXRhLCBTdHJpbmcgZmlsZW5hbWUpIHsKICAvLyBUT0RPKGplbnNqKTogVGhpcyBzaG91bGQgYmUgZG9uZSB2aWEgdGhlIEZpbGVTeXN0ZW0gaW5zdGVhZCwgYnV0IGl0CiAgLy8gY3VycmVudGx5IGRvZXNuJ3Qgc3VwcG9ydCB3cml0aW5nLgogIEdaaXBDb2RlYyBnWmlwQ29kZWMgPSBuZXcgR1ppcENvZGVjKCk7CiAgTGlzdDxpbnQ+IGd6aXBwZWRJbml0aWFsaXplZEZyb21EYXRhID0gZ1ppcENvZGVjLmVuY29kZShkYXRhKTsKICBEaXJlY3RvcnkgdGVtcERpciA9IERpcmVjdG9yeS5zeXN0ZW1UZW1wLmNyZWF0ZVRlbXBTeW5jKCIkZmlsZW5hbWUiKTsKICBGaWxlIGZpbGUgPSBuZXcgRmlsZSgiJHt0ZW1wRGlyLnBhdGh9LyR7ZmlsZW5hbWV9Lmd6Iik7CiAgZmlsZS53cml0ZUFzQnl0ZXNTeW5jKGd6aXBwZWRJbml0aWFsaXplZEZyb21EYXRhKTsKICByZXR1cm4gZmlsZS51cmk7Cn0KEgBOTjwBMgEySSgpQUg6NRMCAUBwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdXRpbC9lcnJvcl9yZXBvcnRlcl9maWxlX2NvcGllci5kYXJ0PHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9oeWJyaWRfZmlsZV9zeXN0ZW0uZGFydIeSLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBBIG1lbW9yeSArIHBoeXNpY2FsIGZpbGUgc3lzdGVtIHVzZWQgdG8gbW9jayBpbnB1dCBmb3IgdGVzdHMgYnV0IHByb3ZpZGUKLy8vIHNkayBzb3VyY2VzIGZyb20gZGlzay4KbGlicmFyeSBmcm9udF9lbmQuc3JjLmh5YnJpZF9maWxlX3N5c3RlbTsKCmltcG9ydCAnZGFydDphc3luYyc7CgppbXBvcnQgJy4uL2FwaV9wcm90b3R5cGUvZmlsZV9zeXN0ZW0uZGFydCc7CmltcG9ydCAnLi4vYXBpX3Byb3RvdHlwZS9tZW1vcnlfZmlsZV9zeXN0ZW0uZGFydCc7CmltcG9ydCAnLi4vYXBpX3Byb3RvdHlwZS9zdGFuZGFyZF9maWxlX3N5c3RlbS5kYXJ0JzsKCi8vLyBBIGZpbGUgc3lzdGVtIHRoYXQgbWl4ZXMgZmlsZXMgZnJvbSBtZW1vcnkgYW5kIGEgcGh5c2ljYWwgZmlsZSBzeXN0ZW0uIEFsbAovLy8gbWVtb3J5IGVudGl0aWVzIHRha2UgcHJpb3JpdHkgb3ZlciBmaWxlIHN5c3RlbSBlbnRpdGllcy4KY2xhc3MgSHlicmlkRmlsZVN5c3RlbSBpbXBsZW1lbnRzIEZpbGVTeXN0ZW0gewogIGZpbmFsIE1lbW9yeUZpbGVTeXN0ZW0gbWVtb3J5OwogIGZpbmFsIEZpbGVTeXN0ZW0gcGh5c2ljYWw7CgogIEh5YnJpZEZpbGVTeXN0ZW0odGhpcy5tZW1vcnksIFtGaWxlU3lzdGVtIF9waHlzaWNhbF0pCiAgICAgIDogcGh5c2ljYWwgPSBfcGh5c2ljYWwgPz8gU3RhbmRhcmRGaWxlU3lzdGVtLmluc3RhbmNlOwoKICBAb3ZlcnJpZGUKICBGaWxlU3lzdGVtRW50aXR5IGVudGl0eUZvclVyaShVcmkgdXJpKSA9PgogICAgICBuZXcgSHlicmlkRmlsZVN5c3RlbUVudGl0eSh1cmksIHRoaXMpOwp9CgovLy8gRW50aXR5IHRoYXQgZGVsZWdhdGVzIHRvIGFuIHVuZGVybHlpbmcgbWVtb3J5IG9yIHBoeXNpY2FsIGZpbGUgc3lzdGVtCi8vLyBlbnRpdHkuCmNsYXNzIEh5YnJpZEZpbGVTeXN0ZW1FbnRpdHkgaW1wbGVtZW50cyBGaWxlU3lzdGVtRW50aXR5IHsKICBmaW5hbCBVcmkgdXJpOwogIEZpbGVTeXN0ZW1FbnRpdHkgX2RlbGVnYXRlOwogIGZpbmFsIEh5YnJpZEZpbGVTeXN0ZW0gX2ZzOwoKICBIeWJyaWRGaWxlU3lzdGVtRW50aXR5KHRoaXMudXJpLCB0aGlzLl9mcyk7CgogIEZ1dHVyZTxGaWxlU3lzdGVtRW50aXR5PiBnZXQgZGVsZWdhdGUgYXN5bmMgewogICAgaWYgKF9kZWxlZ2F0ZSAhPSBudWxsKSByZXR1cm4gX2RlbGVnYXRlOwogICAgRmlsZVN5c3RlbUVudGl0eSBlbnRpdHkgPSBfZnMubWVtb3J5LmVudGl0eUZvclVyaSh1cmkpOwogICAgaWYgKCgodXJpLnNjaGVtZSAhPSAnZmlsZScgJiYgdXJpLnNjaGVtZSAhPSAnZGF0YScpICYmCiAgICAgICAgICAgIF9mcy5waHlzaWNhbCBpcyBTdGFuZGFyZEZpbGVTeXN0ZW0pIHx8CiAgICAgICAgYXdhaXQgZW50aXR5LmV4aXN0cygpKSB7CiAgICAgIF9kZWxlZ2F0ZSA9IGVudGl0eTsKICAgICAgcmV0dXJuIF9kZWxlZ2F0ZTsKICAgIH0KICAgIHJldHVybiBfZGVsZWdhdGUgPSBfZnMucGh5c2ljYWwuZW50aXR5Rm9yVXJpKHVyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICBGdXR1cmU8Ym9vbD4gZXhpc3RzKCkgYXN5bmMgPT4gKGF3YWl0IGRlbGVnYXRlKS5leGlzdHMoKTsKCiAgQG92ZXJyaWRlCiAgRnV0dXJlPExpc3Q8aW50Pj4gcmVhZEFzQnl0ZXMoKSBhc3luYyA9PiAoYXdhaXQgZGVsZWdhdGUpLnJlYWRBc0J5dGVzKCk7CgogIEBvdmVycmlkZQogIEZ1dHVyZTxTdHJpbmc+IHJlYWRBc1N0cmluZygpIGFzeW5jID0+IChhd2FpdCBkZWxlZ2F0ZSkucmVhZEFzU3RyaW5nKCk7Cn0KPABOTjwBTRsqARUBLDM1AU89LyEdATg9AQwsLQIBSgw7ER4eAS4BMC08OzMhGhgGNwQBDDwBDEsBDEoCATNwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvaHlicmlkX2ZpbGVfc3lzdGVtLmRhcnQ3c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2xpYnJhcnlfZ3JhcGguZGFydIY9Ly8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEubGlicmFyeV9ncmFwaDsKCmltcG9ydCAncGFja2FnZTprZXJuZWwva2VybmVsLmRhcnQnCiAgICBzaG93IExpYnJhcnksIExpYnJhcnlEZXBlbmRlbmN5LCBMaWJyYXJ5UGFydDsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdXRpbC9ncmFwaC5kYXJ0JyBzaG93IEdyYXBoOwoKY2xhc3MgTGlicmFyeUdyYXBoIGltcGxlbWVudHMgR3JhcGg8VXJpPiB7CiAgZmluYWwgTWFwPFVyaSwgTGlicmFyeT4gbGlicmFyaWVzOwoKICBMaWJyYXJ5R3JhcGgodGhpcy5saWJyYXJpZXMpOwoKICBJdGVyYWJsZTxVcmk+IGdldCB2ZXJ0aWNlcyA9PiBsaWJyYXJpZXMua2V5czsKCiAgSXRlcmFibGU8VXJpPiBuZWlnaGJvcnNPZihVcmkgdmVydGV4KSBzeW5jKiB7CiAgICBMaWJyYXJ5IGxpYnJhcnkgPSBsaWJyYXJpZXNbdmVydGV4XTsKICAgIGlmIChsaWJyYXJ5ID09IG51bGwpIHsKICAgICAgdGhyb3cgIkxpYnJhcnkgbm90IGZvdW5kOiAkdmVydGV4IjsKICAgIH0KCiAgICAvLyBJbXBvcnRzIGFuZCBleHBvcnRzLgogICAgZm9yIChMaWJyYXJ5RGVwZW5kZW5jeSBkZXBlbmRlbmN5IGluIGxpYnJhcnkuZGVwZW5kZW5jaWVzKSB7CiAgICAgIFVyaSB1cmkxID0gZGVwZW5kZW5jeS50YXJnZXRMaWJyYXJ5LmltcG9ydFVyaTsKICAgICAgVXJpIHVyaTIgPSBkZXBlbmRlbmN5LnRhcmdldExpYnJhcnkuZmlsZVVyaTsKICAgICAgaWYgKGxpYnJhcmllcy5jb250YWluc0tleSh1cmkxKSkgewogICAgICAgIHlpZWxkIHVyaTE7CiAgICAgIH0gZWxzZSBpZiAodXJpMiAhPSBudWxsKSB7CiAgICAgICAgaWYgKGxpYnJhcmllcy5jb250YWluc0tleSh1cmkyKSkgewogICAgICAgICAgeWllbGQgdXJpMjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBQYXJ0cy4KICAgIC8vIE5vcm1hbGx5IHRoZXJlIHdvbid0IGJlIGxpYnJhcmllcyBmb3IgdGhlc2UsIGJ1dCBpZiwgZm9yIGluc3RhbmNlLAogICAgLy8gdGhlIHBhcnQgZGlkbid0IGV4aXN0IHRoZXJlIHdpbGwgYmUgYSBzeW50aGV0aWMgbGlicmFyeS4KICAgIGZvciAoTGlicmFyeVBhcnQgcGFydCBpbiBsaWJyYXJ5LnBhcnRzKSB7CiAgICAgIFVyaSBwYXJ0VXJpID0gbGlicmFyeS5pbXBvcnRVcmkucmVzb2x2ZShwYXJ0LnBhcnRVcmkpOwogICAgICBVcmkgZmlsZVVyaSA9IGxpYnJhcnkuZmlsZVVyaS5yZXNvbHZlKHBhcnQucGFydFVyaSk7CiAgICAgIGlmIChsaWJyYXJpZXMuY29udGFpbnNLZXkocGFydFVyaSkpIHsKICAgICAgICB5aWVsZCBwYXJ0VXJpOwogICAgICB9IGVsc2UgaWYgKGZpbGVVcmkgIT0gcGFydFVyaSAmJiBsaWJyYXJpZXMuY29udGFpbnNLZXkoZmlsZVVyaSkpIHsKICAgICAgICB5aWVsZCBmaWxlVXJpOwogICAgICB9CiAgICB9CiAgfQp9CjUATk48AR0BJDIBNAErJQEgATABMCkbKgYBHEE1MykUISsWCggGAQ5KQC49OywXSRcIBgQCAS5wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvbGlicmFyeV9ncmFwaC5kYXJ0N3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL251bGxfY29tcGlsZXJfb3V0cHV0LmRhcnSFwS8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gTnVsbCBwYXR0ZXJuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBbQ29tcGlsZXJPdXRwdXRdIGludGVyZmFjZS4KCmxpYnJhcnkgY29tcGlsZXIubnVsbF9hcGk7CgppbXBvcnQgJy4uL2NvbXBpbGVyX25ldy5kYXJ0JzsKCi8vLyBOdWxsIHBhdHRlcm4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFtDb21waWxlck91dHB1dF0gaW50ZXJmYWNlLgpjbGFzcyBOdWxsQ29tcGlsZXJPdXRwdXQgaW1wbGVtZW50cyBDb21waWxlck91dHB1dCB7CiAgY29uc3QgTnVsbENvbXBpbGVyT3V0cHV0KCk7CgogIEBvdmVycmlkZQogIE91dHB1dFNpbmsgY3JlYXRlT3V0cHV0U2luayhTdHJpbmcgbmFtZSwgU3RyaW5nIGV4dGVuc2lvbiwgT3V0cHV0VHlwZSB0eXBlKSB7CiAgICByZXR1cm4gTnVsbFNpbmsub3V0cHV0UHJvdmlkZXIobmFtZSwgZXh0ZW5zaW9uLCB0eXBlKTsKICB9CgogIEBvdmVycmlkZQogIEJpbmFyeU91dHB1dFNpbmsgY3JlYXRlQmluYXJ5U2luayhVcmkgdXJpKSB7CiAgICByZXR1cm4gbmV3IE51bGxCaW5hcnlTaW5rKHVyaSk7CiAgfQp9CgovLy8gQSBzaW5rIHRoYXQgZHJhaW5zIGludG8gL2Rldi9udWxsLgpjbGFzcyBOdWxsU2luayBpbXBsZW1lbnRzIE91dHB1dFNpbmsgewogIGZpbmFsIFN0cmluZyBuYW1lOwoKICBOdWxsU2luayh0aGlzLm5hbWUpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZChTdHJpbmcgdmFsdWUpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgY2xvc2UoKSB7fQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBuYW1lOwoKICAvLy8gQ29udmVuaWVuY2UgbWV0aG9kIGZvciBnZXR0aW5nIGFuIFthcGkuQ29tcGlsZXJPdXRwdXRQcm92aWRlcl0uCiAgc3RhdGljIE51bGxTaW5rIG91dHB1dFByb3ZpZGVyKAogICAgICBTdHJpbmcgbmFtZSwgU3RyaW5nIGV4dGVuc2lvbiwgT3V0cHV0VHlwZSB0eXBlKSB7CiAgICByZXR1cm4gbmV3IE51bGxTaW5rKCckbmFtZS4kZXh0ZW5zaW9uLiR0eXBlJyk7CiAgfQp9CgpjbGFzcyBOdWxsQmluYXJ5U2luayBpbXBsZW1lbnRzIEJpbmFyeU91dHB1dFNpbmsgewogIGZpbmFsIFVyaSB1cmk7CgogIE51bGxCaW5hcnlTaW5rKHRoaXMudXJpKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZShMaXN0PGludD4gYnVmZmVyLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHt9CgogIEBvdmVycmlkZQogIHZvaWQgY2xvc2UoKSB7fQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnTnVsbEJpbmFyeVNpbmsoJHVyaSknOwp9Cj8ATk48AUMBGwEfAUM1HgEMUDsEAQwvJAQCAScnFQEXAQwcAQwSAQwdAUYiODMEAgEzEQEcAQw8AQwSAQwvAgEucGFja2FnZTpjb21waWxlci9zcmMvbnVsbF9jb21waWxlcl9vdXRwdXQuZGFydEJzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9kaWFnbm9zdGljcy9kaWFnbm9zdGljX2xpc3RlbmVyLmRhcnSK2i8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuZGlhZ25vc3RpY19saXN0ZW5lcjsKCmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JyBzaG93IERpYWdub3N0aWNPcHRpb25zOwppbXBvcnQgJ21lc3NhZ2VzLmRhcnQnOwppbXBvcnQgJ3NvdXJjZV9zcGFuLmRhcnQnIHNob3cgU291cmNlU3BhbjsKaW1wb3J0ICdzcGFubmFibGUuZGFydCcgc2hvdyBTcGFubmFibGU7CgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW5hbWUgYW5kIGNsZWFudXAgdGhpcyBpbnRlcmZhY2UuIEFkZCBzZXZlcml0eSBlbnVtLgphYnN0cmFjdCBjbGFzcyBEaWFnbm9zdGljUmVwb3J0ZXIgewogIERpYWdub3N0aWNPcHRpb25zIGdldCBvcHRpb25zOwoKICAvLyBUT0RPKGthcmxrbG9zZSk6IHJlbmFtZSBsb2cgdG8gc29tZXRoaW5nIGxpa2UgcmVwb3J0SW5mby4KICB2b2lkIGxvZyhtZXNzYWdlKTsKCiAgaW50ZXJuYWxFcnJvcihTcGFubmFibGUgc3Bhbm5hYmxlLCBtZXNzYWdlKTsKCiAgLy8vIENyZWF0ZXMgYSBbU291cmNlU3Bhbl0gZm9yIFtub2RlXSBpbiBzY29wZSBvZiB0aGUgY3VycmVudCBlbGVtZW50LgogIC8vLwogIC8vLyBJZiBbbm9kZV0gaXMgYSBbTm9kZV0gd2UgYXNzZXJ0IGluIGNoZWNrZWQgbW9kZSB0aGF0IHRoZSBjb3JyZXNwb25kaW5nCiAgLy8vIHRva2VucyBjYW4gYmUgZm91bmQgd2l0aGluIHRoZSB0b2tlbnMgb2YgdGhlIGN1cnJlbnQgZWxlbWVudC4KICBTb3VyY2VTcGFuIHNwYW5Gcm9tU3Bhbm5hYmxlKFNwYW5uYWJsZSBub2RlKTsKCiAgdm9pZCByZXBvcnRFcnJvck1lc3NhZ2UoU3Bhbm5hYmxlIHNwYW5uYWJsZSwgTWVzc2FnZUtpbmQgbWVzc2FnZUtpbmQsCiAgICAgIFtNYXAgYXJndW1lbnRzID0gY29uc3Qge31dKSB7CiAgICByZXBvcnRFcnJvcihjcmVhdGVNZXNzYWdlKHNwYW5uYWJsZSwgbWVzc2FnZUtpbmQsIGFyZ3VtZW50cykpOwogIH0KCiAgdm9pZCByZXBvcnRFcnJvcihEaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlLAogICAgICBbTGlzdDxEaWFnbm9zdGljTWVzc2FnZT4gaW5mb3MgPSBjb25zdCA8RGlhZ25vc3RpY01lc3NhZ2U+W11dKTsKCiAgdm9pZCByZXBvcnRXYXJuaW5nTWVzc2FnZShTcGFubmFibGUgc3Bhbm5hYmxlLCBNZXNzYWdlS2luZCBtZXNzYWdlS2luZCwKICAgICAgW01hcCBhcmd1bWVudHMgPSBjb25zdCB7fV0pIHsKICAgIHJlcG9ydFdhcm5pbmcoY3JlYXRlTWVzc2FnZShzcGFubmFibGUsIG1lc3NhZ2VLaW5kLCBhcmd1bWVudHMpKTsKICB9CgogIHZvaWQgcmVwb3J0V2FybmluZyhEaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlLAogICAgICBbTGlzdDxEaWFnbm9zdGljTWVzc2FnZT4gaW5mb3MgPSBjb25zdCA8RGlhZ25vc3RpY01lc3NhZ2U+W11dKTsKCiAgdm9pZCByZXBvcnRIaW50TWVzc2FnZShTcGFubmFibGUgc3Bhbm5hYmxlLCBNZXNzYWdlS2luZCBtZXNzYWdlS2luZCwKICAgICAgW01hcCBhcmd1bWVudHMgPSBjb25zdCB7fV0pIHsKICAgIHJlcG9ydEhpbnQoY3JlYXRlTWVzc2FnZShzcGFubmFibGUsIG1lc3NhZ2VLaW5kLCBhcmd1bWVudHMpKTsKICB9CgogIHZvaWQgcmVwb3J0SGludChEaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlLAogICAgICBbTGlzdDxEaWFnbm9zdGljTWVzc2FnZT4gaW5mb3MgPSBjb25zdCA8RGlhZ25vc3RpY01lc3NhZ2U+W11dKTsKCiAgQGRlcHJlY2F0ZWQKICB2b2lkIHJlcG9ydEluZm8oU3Bhbm5hYmxlIG5vZGUsIE1lc3NhZ2VLaW5kIGVycm9yQ29kZSwKICAgICAgW01hcCBhcmd1bWVudHMgPSBjb25zdCB7fV0pOwoKICAvLy8gU2V0IGN1cnJlbnQgZWxlbWVudCBvZiB0aGlzIHJlcG9ydGVyIHRvIFtlbGVtZW50XS4gVGhpcyBpcyB1c2VkIGZvcgogIC8vLyBjcmVhdGluZyBbU291cmNlU3Bhbl0gaW4gW3NwYW5Gcm9tU3Bhbm5hYmxlXS4KICB3aXRoQ3VycmVudEVsZW1lbnQoRW50aXR5IGVsZW1lbnQsIGYoKSk7CgogIERpYWdub3N0aWNNZXNzYWdlIGNyZWF0ZU1lc3NhZ2UoU3Bhbm5hYmxlIHNwYW5uYWJsZSwgTWVzc2FnZUtpbmQgbWVzc2FnZUtpbmQsCiAgICAgIFtNYXAgYXJndW1lbnRzID0gY29uc3Qge31dKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGEgY3Jhc2gsIGFuIGVycm9yIG9yIGEgZmF0YWwgd2FybmluZyBoYXMgYmVlbiByZXBvcnRlZC4KICBib29sIGdldCBoYXNSZXBvcnRlZEVycm9yOwoKICAvLy8gQ2FsbGVkIHdoZW4gYW4gW2V4Y2VwdGlvbl0gaXMgdGhyb3duIGZyb20gdXNlci1wcm92aWRlZCBjb2RlLCBsaWtlIGZyb20KICAvLy8gdGhlIGlucHV0IHByb3ZpZGVyIG9yIGRpYWdub3N0aWNzIGhhbmRsZXIuCiAgdm9pZCBvbkNyYXNoSW5Vc2VyQ29kZShTdHJpbmcgbWVzc2FnZSwgZXhjZXB0aW9uLCBzdGFja1RyYWNlKSB7fQp9CgpjbGFzcyBEaWFnbm9zdGljTWVzc2FnZSB7CiAgZmluYWwgU291cmNlU3BhbiBzb3VyY2VTcGFuOwogIGZpbmFsIFNwYW5uYWJsZSBzcGFubmFibGU7CiAgZmluYWwgTWVzc2FnZSBtZXNzYWdlOwoKICBEaWFnbm9zdGljTWVzc2FnZSh0aGlzLnNvdXJjZVNwYW4sIHRoaXMuc3Bhbm5hYmxlLCB0aGlzLm1lc3NhZ2UpOwp9Ck8ATk48ASUBJDEYKygBTiQhAT8VAS8BSQZNRDABSCRDBAEuRgFKJEUEATBGAUckQgQBLUYBDjkjAUo0KwFQIwFQHQFOMUMCARofHRkBRAIBOXBhY2thZ2U6Y29tcGlsZXIvc3JjL2RpYWdub3N0aWNzL2RpYWdub3N0aWNfbGlzdGVuZXIuZGFydDhzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9kaWFnbm9zdGljcy9pbnZhcmlhbnQuZGFydIcpLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5kaWFnbm9zdGljcy5pbnZhcmlhbnQ7CgppbXBvcnQgJ3NwYW5uYWJsZS5kYXJ0JzsKCi8vLyBGbGFnIHRoYXQgY2FuIGJlIHVzZWQgaW4gYXNzZXJ0aW9ucyB0byBhc3NlcnQgdGhhdCBhIGNvZGUgcGF0aCBpcyBvbmx5Ci8vLyBleGVjdXRlZCBhcyBwYXJ0IG9mIGRldmVsb3BtZW50LgovLy8KLy8vIFRoaXMgZmxhZyBpcyBhdXRvbWF0aWNhbGx5IHNldCB0byB0cnVlIGlmIGhlbHBlciBtZXRob2RzIGxpa2UsIFtkZWJ1Z1ByaW50XSwKLy8vIFtkZWJ1Z1dyYXBQcmludF0sIFt0cmFjZV0sIGFuZCBbcmVwb3J0SGVyZV0gYXJlIGNhbGxlZC4KYm9vbCBERUJVR19NT0RFID0gZmFsc2U7CgovLy8gQXNzZXJ0IHRoYXQgW0RFQlVHX01PREVdIGlzIGB0cnVlYCBhbmQgcHJvdmlkZSBbbWVzc2FnZV0gYXMgcGFydCBvZiB0aGUKLy8vIGVycm9yIG1lc3NhZ2UuCmFzc2VydERlYnVnTW9kZShTdHJpbmcgbWVzc2FnZSkgewogIGFzc2VydChERUJVR19NT0RFLAogICAgICBmYWlsZWRBdChOT19MT0NBVElPTl9TUEFOTkFCTEUsICdEZWJ1ZyBtb2RlIGlzIG5vdCBlbmFibGVkOiAkbWVzc2FnZScpKTsKfQoKLy8vIFRocm93cyBhIFtTcGFubmFibGVBc3NlcnRpb25GYWlsdXJlXS4KLy8vCi8vLyBVc2UgdGhpcyBtZXRob2QgdG8gcHJvdmlkZSBiZXR0ZXIgaW5mb3JtYXRpb24gZm9yIGFzc2VydGlvbiBieSBjYWxsaW5nCi8vLyBbZmFpbGVkQXRdIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYW4gYGFzc2VydGAgc3RhdGVtZW50OgovLy8KLy8vICAgICBhc3NlcnQoY29uZGl0aW9uLCBmYWlsZWRBdChwb3NpdGlvbiwgbWVzc2FnZSkpOwovLy8KLy8vIFtzcGFubmFibGVdIG11c3QgYmUgbm9uLW51bGwgYW5kIHdpbGwgYmUgdXNlZCB0byBwcm92aWRlIHBvc2l0aW9uYWwKLy8vIGluZm9ybWF0aW9uIGluIHRoZSBnZW5lcmF0ZWQgZXJyb3IgbWVzc2FnZS4KLy8vCi8vLyBUaGlzIG1ldGhvZCBjYW4gYWxzbyBiZSB1c2VkIHRvIHRocm93IGEgW1NwYW5uYWJsZUFzc2VydGlvbkZhaWx1cmVdIG91dHNpZGUKLy8vIGFuIGFzc2VydDoKLy8vCi8vLyAgICAgZmFpbGVkQXQocG9zaXRpb24sIG1lc3NhZ2UpOwovLy8KLy8vIG9yLCBpZiB0aGUgZW5jbG9zaW5nIGZ1bmN0aW9uIHJlcXVpcmVzIGEgcmVzdWx0IG9yIGNvbnRyb2wgZmxvdzoKLy8vCi8vLyAgICAgdGhyb3cgZmFpbGVkQXQocG9zaXRpb24sIG1lc3NhZ2UpOwovLy8KYm9vbCBmYWlsZWRBdChTcGFubmFibGUgc3Bhbm5hYmxlLCBbU3RyaW5nIG1lc3NhZ2VdKSB7CiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIFtzcGFubmFibGVdIGFuZCBbbWVzc2FnZV0gdG8gcHJvdmlkZSBiZXR0ZXIKICAvLyBpbmZvcm1hdGlvbiBvbiBhc3NlcnRpb24gZXJyb3JzLgogIGlmIChzcGFubmFibGUgPT0gbnVsbCkgewogICAgdGhyb3cgbmV3IFNwYW5uYWJsZUFzc2VydGlvbkZhaWx1cmUoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAnU3Bhbm5hYmxlIHdhcyBudWxsIGZvciBmYWlsZWRBdC4gVXNlIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUuJyk7CiAgfQogIHRocm93IG5ldyBTcGFubmFibGVBc3NlcnRpb25GYWlsdXJlKHNwYW5uYWJsZSwgbWVzc2FnZSk7Cn0KNABOTjwBJwEZAUslBFE8GQFMEyIVTwIBKgRLQAQ4BEgwBFAPBCUERQQrBDdKJhtDTAQ7AgEvcGFja2FnZTpjb21waWxlci9zcmMvZGlhZ25vc3RpY3MvaW52YXJpYW50LmRhcnQ6c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvZGlhZ25vc3RpY3Mvc291cmNlX3NwYW4uZGFydINDLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5kaWFnbm9zdGljcy5zb3VyY2Vfc3BhbjsKCmltcG9ydCAnc3Bhbm5hYmxlLmRhcnQnIHNob3cgU3Bhbm5hYmxlOwoKY2xhc3MgU291cmNlU3BhbiBpbXBsZW1lbnRzIFNwYW5uYWJsZSB7CiAgZmluYWwgVXJpIHVyaTsKICBmaW5hbCBpbnQgYmVnaW47CiAgZmluYWwgaW50IGVuZDsKCiAgY29uc3QgU291cmNlU3Bhbih0aGlzLnVyaSwgdGhpcy5iZWdpbiwgdGhpcy5lbmQpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiAxMyAqIHVyaS5oYXNoQ29kZSArIDE3ICogYmVnaW4uaGFzaENvZGUgKyAxOSAqIGVuZC5oYXNoQ29kZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgU291cmNlU3BhbikgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHVyaSA9PSBvdGhlci51cmkgJiYgYmVnaW4gPT0gb3RoZXIuYmVnaW4gJiYgZW5kID09IG90aGVyLmVuZDsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdTb3VyY2VTcGFuKCR1cmksICRiZWdpbiwgJGVuZCknOwp9CiAATk48ASkBKAEoERMRATQBDBVIBAEMHC0sSQQBDDkCATFwYWNrYWdlOmNvbXBpbGVyL3NyYy9kaWFnbm9zdGljcy9zb3VyY2Vfc3Bhbi5kYXJ0OHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2RpYWdub3N0aWNzL3NwYW5uYWJsZS5kYXJ0hUgvLyBDb3B5cmlnaHQgKGMpIDIwMTEsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmRpYWdub3N0aWNzLnNwYW5uYWJsZTsKCi8vLyBUYWdnaW5nIGludGVyZmFjZSBmb3IgY2xhc3NlcyBmcm9tIHdoaWNoIHNvdXJjZSBzcGFucyBjYW4gYmUgZ2VuZXJhdGVkLgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBGaW5kIGEgYmV0dGVyIG5hbWUuCi8vIFRPRE8oYWhlKTogSG93IGFib3V0ICJCb2x0Ij8KYWJzdHJhY3QgY2xhc3MgU3Bhbm5hYmxlIHt9CgpjbGFzcyBfU3Bhbm5hYmxlU2VudGluZWwgaW1wbGVtZW50cyBTcGFubmFibGUgewogIGZpbmFsIFN0cmluZyBuYW1lOwoKICBjb25zdCBfU3Bhbm5hYmxlU2VudGluZWwodGhpcy5uYW1lKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gbmFtZTsKfQoKLy8vIFNlbnRpbmVsIHNwYW5uYWJsZSB1c2VkIHRvIG1hcmsgdGhhdCBkaWFnbm9zdGljcyBzaG91bGQgcG9pbnQgdG8gdGhlCi8vLyBjdXJyZW50IGVsZW1lbnQuIE5vdGUgdGhhdCB0aGUgZGlhZ25vc3RpYyByZXBvcnRpbmcgd2lsbCBmYWlsIGlmIHRoZSBjdXJyZW50Ci8vLyBlbGVtZW50IGlzIGBudWxsYC4KY29uc3QgU3Bhbm5hYmxlIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUgPQogICAgY29uc3QgX1NwYW5uYWJsZVNlbnRpbmVsKCJDdXJyZW50IGVsZW1lbnQiKTsKCi8vLyBTZW50aW5lbCBzcGFubmFibGUgdXNlZCB0byBtYXJrIHRoYXQgdGhlcmUgbWlnaHQgYmUgbm8gbG9jYXRpb24gZm9yIHRoZQovLy8gZGlhZ25vc3RpYy4gVXNlIHRoaXMgb25seSB3aGVuIGl0IGlzIG5vdCBhbiBlcnJvciBub3QgdG8gaGF2ZSBhIGN1cnJlbnQKLy8vIGVsZW1lbnQuCmNvbnN0IFNwYW5uYWJsZSBOT19MT0NBVElPTl9TUEFOTkFCTEUgPSBjb25zdCBfU3Bhbm5hYmxlU2VudGluZWwoIk5vIGxvY2F0aW9uIik7CgpjbGFzcyBTcGFubmFibGVBc3NlcnRpb25GYWlsdXJlIHsKICBmaW5hbCBTcGFubmFibGUgbm9kZTsKICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKICBTcGFubmFibGVBc3NlcnRpb25GYWlsdXJlKHRoaXMubm9kZSwgdGhpcy5tZXNzYWdlKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0Fzc2VydGlvbiBmYWlsdXJlJwogICAgICAnJHttZXNzYWdlICE9IG51bGwgPyAnOiAkbWVzc2FnZScgOiAnJ30nOwp9CioATk48AScBTCwgHAEwFQEnAQwdAgFJURcsMQFMTA1RASIYGDYBDCswAgEvcGFja2FnZTpjb21waWxlci9zcmMvZGlhZ25vc3RpY3Mvc3Bhbm5hYmxlLmRhcnQyc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaGVscGVycy9oZWxwZXJzLmRhcnSQvi8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gTGlicmFyeSBmb3IgZGVidWdnaW5nIGhlbHBlcnMuIFRoZSB1bml0dGVzdCBhbmFseXplX3VudXNlZF90ZXN0IGNoZWNrcyB0aGF0Ci8vLyB0aGUgaGVscGVyIGFyZSBub3QgdXNlZCBpbiBwcm9kdWN0aW9uIGNvZGUuCgpsaWJyYXJ5IGRhcnQyanMuaGVscGVyczsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2RpYWdub3N0aWNzL2ludmFyaWFudC5kYXJ0JyBzaG93IERFQlVHX01PREU7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnOwppbXBvcnQgJ3RyYWNlLmRhcnQnOwoKZXhwb3J0ICdkZWJ1Z19jb2xsZWN0aW9uLmRhcnQnOwpleHBvcnQgJ2V4cGVuc2l2ZV9tYXAuZGFydCc7CmV4cG9ydCAnZXhwZW5zaXZlX3NldC5kYXJ0JzsKZXhwb3J0ICdzdGF0cy5kYXJ0JzsKZXhwb3J0ICd0cmFjZS5kYXJ0JzsKZXhwb3J0ICd0cmFja19tYXAuZGFydCc7CgovLy8gR2xvYmFsIGZsYWcgdG8gZW5hYmxlIFtkZWJ1Z1ByaW50XS4gVGhpcyBzaG91bGQgYWx3YXlzIGJlIGB0cnVlYCBieSBkZWZhdWx0Ci8vLyBhbmQgYmUgc2V0IHRvIGBmYWxzZWAgYXMgYSBtZWFucyB0byB0ZW1wb3JhcmlseSB0dXJuIG9mZiBhbGwgZGVidWdnaW5nCi8vLyBwcmludG91dHMuCmNvbnN0IGJvb2wgREVCVUdfUFJJTlRfRU5BQkxFRCA9IHRydWU7CgovLy8gRW5hYmxlcyBkZWJ1ZyBtb2RlLgovLy8KLy8vIFNldHMgdGhlIFtERUJVR19NT0RFXSB0byBgdHJ1ZWAuCnZvaWQgZW5hYmxlRGVidWdNb2RlKCkgewogIERFQlVHX01PREUgPSB0cnVlOwp9CgpjbGFzcyBfRGVidWdJbmRlbnRhdGlvbiBleHRlbmRzIEluZGVudGF0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgaW5kZW50YXRpb25Vbml0ID0gIiAiOwp9CgpfRGVidWdJbmRlbnRhdGlvbiBfaW5kZW50YXRpb24gPSBuZXcgX0RlYnVnSW5kZW50YXRpb24oKTsKCi8vLyBGdW5jdGlvbiBzaWduYXR1cmUgb2YgW2RlYnVnUHJpbnRdLgp0eXBlZGVmIERlYnVnUHJpbnQocyk7CgovLy8gSWYgW0RFQlVHX1BSSU5UX0VOQUJMRURdIGlzIGB0cnVlYCBwcmludCBbc10gdXNpbmcgdGhlIGN1cnJlbnQgaW5kZW50YXRpb24uCkRlYnVnUHJpbnQgZ2V0IGRlYnVnUHJpbnQgewogIGVuYWJsZURlYnVnTW9kZSgpOwogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1heWJlIGRpc2FibGUgZGVidWcgbW9kZSBhZnRlciB0aGUgY2FsbC4KICByZXR1cm4gX2RlYnVnUHJpbnQ7Cn0KCi8vLyBJbXBsZW1lbnRhdGlvbiBvZiBbZGVidWdQcmludF0uCl9kZWJ1Z1ByaW50KHMpIHsKICBpZiAoREVCVUdfUFJJTlRfRU5BQkxFRCkgcHJpbnQoJyR7X2luZGVudGF0aW9uLmluZGVudGF0aW9ufSRzJyk7Cn0KCi8vLyBGdW5jdGlvbiBzaWduYXR1cmUgb2YgW2RlYnVnV3JhcFByaW50XS4KdHlwZWRlZiBEZWJ1Z1dyYXBQcmludChzLCBmKCkpOwoKLy8vIFdyYXBzIHRoZSBjYWxsIHRvIFtmXSB3aXRoIGEgcHJpbnQgb2YgJ3N0YXJ0OiRzJyBhbmQgJ2VuZDokcycgaW5jcmVtZW50aW5nCi8vLyB0aGUgY3VycmVudCBpbmRlbnRhdGlvbiB1c2VkIGJ5IFtkZWJ1Z1ByaW50XSBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiBbZl0uCi8vLwovLy8gVXNlIHRoaXMgdG8gZ2V0IGEgdHJlZS1saWtlIGRlYnVnIHByaW50b3V0IGZvciBuZXN0ZWQgY2FsbHMuCkRlYnVnV3JhcFByaW50IGdldCBkZWJ1Z1dyYXBQcmludCB7CiAgZW5hYmxlRGVidWdNb2RlKCk7CiAgcmV0dXJuIF9kZWJ1Z1dyYXBQcmludDsKfQoKLy8vIEltcGxlbWVudGF0aW9uIG9mIFtkZWJ1Z1dyYXBQcmludF0uCl9kZWJ1Z1dyYXBQcmludChzLCBmKCkpIHsKICBkZWJ1Z1ByaW50KCdzdGFydDokcycpOwogIHZhciByZXN1bHQgPSBfaW5kZW50YXRpb24uaW5kZW50QmxvY2soZik7CiAgZGVidWdQcmludCgnZW5kOiRzJyk7CiAgcmV0dXJuIHJlc3VsdDsKfQoKLy8vIER1bW15IG1ldGhvZCB0byBtYXJrIGJyZWFrcG9pbnRzLgpkZWJ1Z0JyZWFrKCkgewogIGVuYWJsZURlYnVnTW9kZSgpOwp9CgovLy8gRnVuY3Rpb24gc2lnbmF0dXJlIG9mIFtyZXBvcnRIZXJlXS4KdHlwZWRlZiBSZXBvcnRIZXJlKAogICAgRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyLCBTcGFubmFibGUgbm9kZSwgU3RyaW5nIGRlYnVnTWVzc2FnZSk7CgovLy8gUHJpbnQgYSBtZXNzYWdlIHdpdGggYSBzb3VyY2UgbG9jYXRpb24uClJlcG9ydEhlcmUgZ2V0IHJlcG9ydEhlcmUgewogIGVuYWJsZURlYnVnTW9kZSgpOwogIHJldHVybiBfcmVwb3J0SGVyZTsKfQoKLy8vIEltcGxlbWVudGF0aW9uIG9mIFtyZXBvcnRIZXJlXQpfcmVwb3J0SGVyZShEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIsIFNwYW5uYWJsZSBub2RlLCBTdHJpbmcgZGVidWdNZXNzYWdlKSB7CiAgcmVwb3J0ZXIKICAgICAgLnJlcG9ydEluZm8obm9kZSwgTWVzc2FnZUtpbmQuR0VORVJJQywgeyd0ZXh0JzogJ0hFUkU6ICRkZWJ1Z01lc3NhZ2UnfSk7Cn0KCi8vLyBTZXQgb2YgdHJhY2tlZCBvYmplY3RzIHVzZWQgYnkgW3RyYWNrXSBhbmQgW2lmVHJhY2tlZF0uCnZhciBfdHJhY2tlZE9iamVjdHMgPSBuZXcgU2V0PE9iamVjdD4oKTsKCi8vLyBHbG9iYWwgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGBwcmludFRyYWNlYCBvcHRpb24gb2YgW3RyYWNrXSBhbmQgW2lmVHJhY2tlZF0uCmJvb2wgdHJhY2tXaXRoVHJhY2UgPSBmYWxzZTsKCi8vLyBJZiBbZG9UcmFja10gaXMgYHRydWVgLCBhZGQgW29iamVjdF0gdG8gdGhlIHNldCBvZiB0cmFja2VkIG9iamVjdHMuCi8vLwovLy8gSWYgdHJhY2tlZCwgW21lc3NhZ2VdIGlzIHByaW50ZWQgYWxvbmcgdGhlIGhhc2ggY29kZSBhbmQgdG9TdHJpbmcgb2YKLy8vIFtvYmplY3RdLiBJZiBbcHJpbnRUcmFjZV0gaXMgYHRydWVgIGEgdHJhY2UgcHJpbnRlZCBhZGRpdGlvbmFsbHkuCi8vLyBJZiBbcHJpbnRUcmFjZV0gaXMgYG51bGxgLCBbdHJhY2tXaXRoVHJhY2VdIGRldGVybWluZXMgd2hldGhlciBhIHRyYWNlIGlzCi8vLyBwcmludGVkLgovLy8KLy8vIFtvYmplY3RdIGlzIHJldHVybmVkIGFzIHRoZSByZXN1bHQgb2YgdGhlIG1ldGhvZC4KdHJhY2soYm9vbCBkb1RyYWNrLCBPYmplY3Qgb2JqZWN0LCBTdHJpbmcgbWVzc2FnZSwge2Jvb2wgcHJpbnRUcmFjZX0pIHsKICBpZiAoIWRvVHJhY2spIHJldHVybiBvYmplY3Q7CiAgX3RyYWNrZWRPYmplY3RzLmFkZChvYmplY3QpOwogIFN0cmluZyBtc2cgPSAndHJhY2s6ICR7b2JqZWN0Lmhhc2hDb2RlfTokb2JqZWN0OiRtZXNzYWdlJzsKICBpZiAocHJpbnRUcmFjZSA9PSBudWxsKSBwcmludFRyYWNlID0gdHJhY2tXaXRoVHJhY2U7CiAgaWYgKHByaW50VHJhY2UpIHsKICAgIHRyYWNlKG1zZyk7CiAgfSBlbHNlIHsKICAgIGRlYnVnUHJpbnQobXNnKTsKICB9CiAgcmV0dXJuIG9iamVjdDsKfQoKLy8vIFJldHVybnMgYHRydWVgIGlmIFtvYmplY3RdIGlzIGluIHRoZSBzZXQgb2YgdHJhY2tlZCBvYmplY3RzLgovLy8KLy8vIElmIFttZXNzYWdlXSBpcyBwcm92aWRlZCBpdCBpcyBwcmludGVkIGFsb25nIHRoZSBoYXNoIGNvZGUgYW5kIHRvU3RyaW5nIG9mCi8vLyBbb2JqZWN0XS4gSWYgW3ByaW50VHJhY2VdIGlzIGB0cnVlYCBhIHRyYWNlIHByaW50ZWQgYWRkaXRpb25hbGx5LiBJZgovLy8gW3ByaW50VHJhY2VdIGlzIGBudWxsYCwgW3RyYWNrV2l0aFRyYWNlXSBkZXRlcm1pbmVzIHdoZXRoZXIgYSB0cmFjZSBpcwovLy8gcHJpbnRlZC4KYm9vbCBpZlRyYWNrZWQoT2JqZWN0IG9iamVjdCwge1N0cmluZyBtZXNzYWdlLCBib29sIHByaW50VHJhY2V9KSB7CiAgaWYgKF90cmFja2VkT2JqZWN0cy5jb250YWlucyhvYmplY3QpKSB7CiAgICBpZiAobWVzc2FnZSAhPSBudWxsKSB7CiAgICAgIFN0cmluZyBtc2cgPSAndHJhY2tlZDogJHtvYmplY3QuaGFzaENvZGV9OiRvYmplY3Q6JG1lc3NhZ2UnOwogICAgICBpZiAocHJpbnRUcmFjZSA9PSBudWxsKSBwcmludFRyYWNlID0gdHJhY2tXaXRoVHJhY2U7CiAgICAgIGlmIChwcmludFRyYWNlKSB7CiAgICAgICAgdHJhY2UobXNnKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBkZWJ1Z1ByaW50KG1zZyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KgJIATk48AVAwARkBGTgcFQEgHR0VFRkBUEsPJwEYBCUZFQIBLgwmAgE6ASgXAVAcFUMWAgEkEUMCASwgAU9OBEEkFRoCASgaGiwYEQIBJg8VAgEoFEcBLBwVFgIBI1ALTwIBPCkBUR0BSARJRk4NBDZIHx89NxQQCxUEEQIBQQRPSUsNQyobQzsYFA8ZCAYRBBACASlwYWNrYWdlOmNvbXBpbGVyL3NyYy9oZWxwZXJzL2hlbHBlcnMuZGFydDNzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9iYWNrZW5kX3N0cmF0ZWd5LmRhcnSMzS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuYmFja2VuZF9zdHJhdGVneTsKCmltcG9ydCAnY29tbW9uLmRhcnQnOwppbXBvcnQgJ2NvbW1vbi9jb2RlZ2VuLmRhcnQnOwppbXBvcnQgJ2NvbW1vbi90YXNrcy5kYXJ0JzsKaW1wb3J0ICdkZWZlcnJlZF9sb2FkLmRhcnQnIHNob3cgT3V0cHV0VW5pdERhdGE7CmltcG9ydCAnZW5xdWV1ZS5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICdpbmZlcnJlci90eXBlcy5kYXJ0JzsKaW1wb3J0ICdpby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydCc7CmltcG9ydCAnanNfYmFja2VuZC9iYWNrZW5kLmRhcnQnOwppbXBvcnQgJ2pzX2JhY2tlbmQvZW5xdWV1ZXIuZGFydCc7CmltcG9ydCAnanNfYmFja2VuZC9pbmZlcnJlZF9kYXRhLmRhcnQnOwppbXBvcnQgJ2pzX2VtaXR0ZXIvY29kZV9lbWl0dGVyX3Rhc2suZGFydCc7CmltcG9ydCAnc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJ3NzYS9zc2EuZGFydCc7CmltcG9ydCAndW5pdmVyc2UvY29kZWdlbl93b3JsZF9idWlsZGVyLmRhcnQnOwppbXBvcnQgJ3dvcmxkLmRhcnQnOwoKLy8vIFN0cmF0ZWd5IHBhdHRlcm4gdGhhdCBkZWZpbmVzIHRoZSBlbGVtZW50IG1vZGVsIHVzZWQgaW4gdHlwZSBpbmZlcmVuY2UKLy8vIGFuZCBjb2RlIGdlbmVyYXRpb24uCmFic3RyYWN0IGNsYXNzIEJhY2tlbmRTdHJhdGVneSB7CiAgTGlzdDxDb21waWxlclRhc2s+IGdldCB0YXNrczsKCiAgRnVuY3Rpb25Db21waWxlciBnZXQgZnVuY3Rpb25Db21waWxlcjsKCiAgQ29kZUVtaXR0ZXJUYXNrIGdldCBlbWl0dGVyVGFzazsKCiAgLy8vIENyZWF0ZSB0aGUgW0pDbG9zZWRXb3JsZF0gZnJvbSBbY2xvc2VkV29ybGRdLgogIEpDbG9zZWRXb3JsZCBjcmVhdGVKQ2xvc2VkV29ybGQoCiAgICAgIEtDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwgT3V0cHV0VW5pdERhdGEgb3V0cHV0VW5pdERhdGEpOwoKICAvLy8gUmVnaXN0ZXJzIFtjbG9zZWRXb3JsZF0gYXMgdGhlIGN1cnJlbnQgY2xvc2VkIHdvcmxkIHVzZWQgYnkgdGhpcyBiYWNrZW5kCiAgLy8vIHN0cmF0ZWd5LgogIC8vLwogIC8vLyBUaGlzIGlzIHVzZWQgdG8gc3VwcG9ydCBzZXJpYWxpemF0aW9uIGFmdGVyIHR5cGUgaW5mZXJlbmNlLgogIHZvaWQgcmVnaXN0ZXJKQ2xvc2VkV29ybGQoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKTsKCiAgLy8vIENhbGxlZCB3aGVuIHRoZSBjb21waWxlciBzdGFydHMgcnVubmluZyB0aGUgY29kZWdlbi4KICAvLy8KICAvLy8gUmV0dXJucyB0aGUgW0NvZGVnZW5JbnB1dHNdIG9iamVjdHMgd2l0aCB0aGUgbmVlZGVkIGRhdGEuCiAgQ29kZWdlbklucHV0cyBvbkNvZGVnZW5TdGFydCgKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgZ2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMpOwoKICAvLy8gQ3JlYXRlcyBhbiBbRW5xdWV1ZXJdIGZvciBjb2RlIGdlbmVyYXRpb24gc3BlY2lmaWMgdG8gdGhpcyBiYWNrZW5kLgogIENvZGVnZW5FbnF1ZXVlciBjcmVhdGVDb2RlZ2VuRW5xdWV1ZXIoCiAgICAgIENvbXBpbGVyVGFzayB0YXNrLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGdsb2JhbEluZmVyZW5jZVJlc3VsdHMsCiAgICAgIENvZGVnZW5JbnB1dHMgY29kZWdlbiwKICAgICAgQ29kZWdlblJlc3VsdHMgY29kZWdlblJlc3VsdHMpOwoKICAvLy8gQ2FsbGVkIHdoZW4gY29kZSBnZW5lcmF0aW9uIGhhcyBiZWVuIGNvbXBsZXRlZC4KICB2b2lkIG9uQ29kZWdlbkVuZChDb2RlZ2VuSW5wdXRzIGNvZGVnZW4pOwoKICAvLy8gQ3JlYXRlcyB0aGUgW1NzYUJ1aWxkZXJdIHVzZWQgZm9yIHRoZSBlbGVtZW50IG1vZGVsLgogIFNzYUJ1aWxkZXIgY3JlYXRlU3NhQnVpbGRlcigKICAgICAgQ29tcGlsZXJUYXNrIHRhc2ssIFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kgc291cmNlSW5mb3JtYXRpb25TdHJhdGVneSk7CgogIC8vLyBDcmVhdGVzIGEgW1NvdXJjZVNwYW5dIGZyb20gW3NwYW5uYWJsZV0gaW4gY29udGV4dCBvZiBbY3VycmVudEVsZW1lbnRdLgogIFNvdXJjZVNwYW4gc3BhbkZyb21TcGFubmFibGUoU3Bhbm5hYmxlIHNwYW5uYWJsZSwgRW50aXR5IGN1cnJlbnRFbGVtZW50KTsKCiAgLy8vIENyZWF0ZXMgdGhlIFtUeXBlc0luZmVycmVyXSB1c2VkIGJ5IHRoaXMgc3RyYXRlZ3kuCiAgVHlwZXNJbmZlcnJlciBjcmVhdGVUeXBlc0luZmVycmVyKAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsIEluZmVycmVkRGF0YUJ1aWxkZXIgaW5mZXJyZWREYXRhQnVpbGRlcik7CgogIC8vLyBDYWxscyBbZl0gZm9yIGV2ZXJ5IG1lbWJlciB0aGF0IG5lZWRzIHRvIGJlIHNlcmlhbGl6ZWQgZm9yIG1vZHVsYXIgY29kZQogIC8vLyBnZW5lcmF0aW9uIGFuZCByZXR1cm5zIGFuIFtFbnRpdHlXcml0ZXJdIGZvciBlbmNvZGluZyB0aGVzZSBtZW1iZXJzIGluCiAgLy8vIHRoZSBzZXJpYWxpemVkIGRhdGEuCiAgLy8vCiAgLy8vIFRoZSBuZWVkZWQgbWVtYmVycyBpbmNsdWRlIG1lbWJlcnMgY29tcHV0ZWQgb24gZGVtYW5kIGR1cmluZyBub24tbW9kdWxhcgogIC8vLyBjb2RlIGdlbmVyYXRpb24sIHN1Y2ggYXMgY29uc3RydWN0b3IgYm9kaWVzIGFuZCBhbmQgZ2VuZXJhdG9yIGJvZGllcy4KICBFbnRpdHlXcml0ZXIgZm9yRWFjaENvZGVnZW5NZW1iZXIodm9pZCBGdW5jdGlvbihNZW1iZXJFbnRpdHkgbWVtYmVyKSBmKTsKCiAgLy8vIFByZXBhcmUgW3NvdXJjZV0gdG8gZGVzZXJpYWxpemUgbW9kdWxhciBjb2RlIGdlbmVyYXRpb24gZGF0YS4KICB2b2lkIHByZXBhcmVDb2RlZ2VuUmVhZGVyKERhdGFTb3VyY2Ugc291cmNlKTsKCiAgLy8vIEdlbmVyYXRlcyB0aGUgb3V0cHV0IGFuZCByZXR1cm5zIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBnZW5lcmF0ZWQgY29kZS4KICBpbnQgYXNzZW1ibGVQcm9ncmFtKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwgSW5mZXJyZWREYXRhIGluZmVycmVkRGF0YSwKICAgICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuSW5wdXRzLCBDb2RlZ2VuV29ybGQgY29kZWdlbldvcmxkKTsKfQpXAE5OPAEiARYeHDEXIR4lIiMoLCsXLhUBSxkhIAEpASMBNCNAAU8QBkI3ATsGQCA+AUopGSA5HSYBNiwBOx9PAU5MATklSgFOTRsGT0xLAUQwAU1LPwIBKnBhY2thZ2U6Y29tcGlsZXIvc3JjL2JhY2tlbmRfc3RyYXRlZ3kuZGFydDFzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9jb21tb24vY29kZWdlbi5kYXJ0wAEQFy8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuY29tbW9uLmNvZGVnZW47CgppbXBvcnQgJ3BhY2thZ2U6anNfYXN0L3NyYy9wcmVjZWRlbmNlLmRhcnQnIGFzIGpzIHNob3cgUFJJTUFSWTsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2RlZmVycmVkX2xvYWQuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCcgc2hvdyBEYXJ0VHlwZSwgSW50ZXJmYWNlVHlwZTsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaW8vc291cmNlX2luZm9ybWF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIGFzIGpzOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvYmFja2VuZC5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hbWVyLmRhcnQnOwppbXBvcnQgJy4uL2pzX2VtaXR0ZXIvY29kZV9lbWl0dGVyX3Rhc2suZGFydCcgc2hvdyBFbWl0dGVyOwppbXBvcnQgJy4uL25hdGl2ZS9iZWhhdmlvci5kYXJ0JzsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vc3NhL3NzYS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9mZWF0dXJlLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3VzZS5kYXJ0JyBzaG93IENvbnN0YW50VXNlLCBEeW5hbWljVXNlLCBTdGF0aWNVc2UsIFR5cGVVc2U7CmltcG9ydCAnLi4vdW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnQnCiAgICBzaG93IFdvcmxkSW1wYWN0LCBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsLCBXb3JsZEltcGFjdFZpc2l0b3I7CmltcG9ydCAnLi4vdXRpbC9lbnVtc2V0LmRhcnQnOwppbXBvcnQgJy4uL3V0aWwvdXRpbC5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JzsKCmNsYXNzIENvZGVnZW5JbXBhY3QgZXh0ZW5kcyBXb3JsZEltcGFjdCB7CiAgY29uc3QgQ29kZWdlbkltcGFjdCgpOwoKICBmYWN0b3J5IENvZGVnZW5JbXBhY3QucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSA9CiAgICAgIF9Db2RlZ2VuSW1wYWN0LnJlYWRGcm9tRGF0YVNvdXJjZTsKCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ0NvZGVnZW5JbXBhY3Qud3JpdGVUb0RhdGFTaW5rJyk7CiAgfQoKICBJdGVyYWJsZTxQYWlyPERhcnRUeXBlLCBEYXJ0VHlwZT4+IGdldCB0eXBlVmFyaWFibGVCb3VuZHNTdWJ0eXBlQ2hlY2tzIHsKICAgIHJldHVybiBjb25zdCA8UGFpcjxEYXJ0VHlwZSwgRGFydFR5cGU+PltdOwogIH0KCiAgSXRlcmFibGU8U3RyaW5nPiBnZXQgY29uc3RTeW1ib2xzID0+IGNvbnN0IDxTdHJpbmc+W107CgogIEl0ZXJhYmxlPFNldDxDbGFzc0VudGl0eT4+IGdldCBzcGVjaWFsaXplZEdldEludGVyY2VwdG9ycyB7CiAgICByZXR1cm4gY29uc3QgPFNldDxDbGFzc0VudGl0eT4+W107CiAgfQoKICBib29sIGdldCB1c2VzSW50ZXJjZXB0b3IgPT4gZmFsc2U7CgogIEl0ZXJhYmxlPEFzeW5jTWFya2VyPiBnZXQgYXN5bmNNYXJrZXJzID0+IGNvbnN0IDxBc3luY01hcmtlcj5bXTsKCiAgSXRlcmFibGU8R2VuZXJpY0luc3RhbnRpYXRpb24+IGdldCBnZW5lcmljSW5zdGFudGlhdGlvbnMgPT4KICAgICAgY29uc3QgPEdlbmVyaWNJbnN0YW50aWF0aW9uPltdOwoKICBJdGVyYWJsZTxOYXRpdmVCZWhhdmlvcj4gZ2V0IG5hdGl2ZUJlaGF2aW9ycyA9PiBjb25zdCBbXTsKCiAgSXRlcmFibGU8RnVuY3Rpb25FbnRpdHk+IGdldCBuYXRpdmVNZXRob2RzID0+IGNvbnN0IFtdOwoKICBJdGVyYWJsZTxTZWxlY3Rvcj4gZ2V0IG9uZVNob3RJbnRlcmNlcHRvcnMgPT4gY29uc3QgW107Cn0KCmNsYXNzIF9Db2RlZ2VuSW1wYWN0IGV4dGVuZHMgV29ybGRJbXBhY3RCdWlsZGVySW1wbCBpbXBsZW1lbnRzIENvZGVnZW5JbXBhY3QgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2NvZGVnZW4taW1wYWN0JzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgTWVtYmVyRW50aXR5IG1lbWJlcjsKICBTZXQ8UGFpcjxEYXJ0VHlwZSwgRGFydFR5cGU+PiBfdHlwZVZhcmlhYmxlQm91bmRzU3VidHlwZUNoZWNrczsKICBTZXQ8U3RyaW5nPiBfY29uc3RTeW1ib2xzOwogIExpc3Q8U2V0PENsYXNzRW50aXR5Pj4gX3NwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3JzOwogIGJvb2wgX3VzZXNJbnRlcmNlcHRvciA9IGZhbHNlOwogIEVudW1TZXQ8QXN5bmNNYXJrZXI+IF9hc3luY01hcmtlcnM7CiAgU2V0PEdlbmVyaWNJbnN0YW50aWF0aW9uPiBfZ2VuZXJpY0luc3RhbnRpYXRpb25zOwogIExpc3Q8TmF0aXZlQmVoYXZpb3I+IF9uYXRpdmVCZWhhdmlvcnM7CiAgU2V0PEZ1bmN0aW9uRW50aXR5PiBfbmF0aXZlTWV0aG9kczsKICBTZXQ8U2VsZWN0b3I+IF9vbmVTaG90SW50ZXJjZXB0b3JzOwoKICBfQ29kZWdlbkltcGFjdCh0aGlzLm1lbWJlcik7CgogIF9Db2RlZ2VuSW1wYWN0LmludGVybmFsKAogICAgICB0aGlzLm1lbWJlciwKICAgICAgU2V0PER5bmFtaWNVc2U+IGR5bmFtaWNVc2VzLAogICAgICBTZXQ8U3RhdGljVXNlPiBzdGF0aWNVc2VzLAogICAgICBTZXQ8VHlwZVVzZT4gdHlwZVVzZXMsCiAgICAgIFNldDxDb25zdGFudFVzZT4gY29uc3RhbnRVc2VzLAogICAgICB0aGlzLl90eXBlVmFyaWFibGVCb3VuZHNTdWJ0eXBlQ2hlY2tzLAogICAgICB0aGlzLl9jb25zdFN5bWJvbHMsCiAgICAgIHRoaXMuX3NwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3JzLAogICAgICB0aGlzLl91c2VzSW50ZXJjZXB0b3IsCiAgICAgIHRoaXMuX2FzeW5jTWFya2VycywKICAgICAgdGhpcy5fZ2VuZXJpY0luc3RhbnRpYXRpb25zLAogICAgICB0aGlzLl9uYXRpdmVCZWhhdmlvcnMsCiAgICAgIHRoaXMuX25hdGl2ZU1ldGhvZHMsCiAgICAgIHRoaXMuX29uZVNob3RJbnRlcmNlcHRvcnMpCiAgICAgIDogc3VwZXIuaW50ZXJuYWwoZHluYW1pY1VzZXMsIHN0YXRpY1VzZXMsIHR5cGVVc2VzLCBjb25zdGFudFVzZXMpOwoKICBmYWN0b3J5IF9Db2RlZ2VuSW1wYWN0LnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gc291cmNlLnJlYWRNZW1iZXIoKTsKICAgIFNldDxEeW5hbWljVXNlPiBkeW5hbWljVXNlcyA9IHNvdXJjZQogICAgICAgIC5yZWFkTGlzdCgoKSA9PiBEeW5hbWljVXNlLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSkKICAgICAgICA/LnRvU2V0KCk7CiAgICBTZXQ8U3RhdGljVXNlPiBzdGF0aWNVc2VzID0gc291cmNlCiAgICAgICAgLnJlYWRMaXN0KCgpID0+IFN0YXRpY1VzZS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKSwgZW1wdHlBc051bGw6IHRydWUpCiAgICAgICAgPy50b1NldCgpOwogICAgU2V0PFR5cGVVc2U+IHR5cGVVc2VzID0gc291cmNlCiAgICAgICAgLnJlYWRMaXN0KCgpID0+IFR5cGVVc2UucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSksIGVtcHR5QXNOdWxsOiB0cnVlKQogICAgICAgID8udG9TZXQoKTsKICAgIFNldDxDb25zdGFudFVzZT4gY29uc3RhbnRVc2VzID0gc291cmNlCiAgICAgICAgLnJlYWRMaXN0KCgpID0+IENvbnN0YW50VXNlLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSkKICAgICAgICA/LnRvU2V0KCk7CiAgICBTZXQ8UGFpcjxEYXJ0VHlwZSwgRGFydFR5cGU+PiB0eXBlVmFyaWFibGVCb3VuZHNTdWJ0eXBlQ2hlY2tzID0KICAgICAgICBzb3VyY2UucmVhZExpc3QoKCkgewogICAgICByZXR1cm4gbmV3IFBhaXIoc291cmNlLnJlYWREYXJ0VHlwZSgpLCBzb3VyY2UucmVhZERhcnRUeXBlKCkpOwogICAgfSwgZW1wdHlBc051bGw6IHRydWUpPy50b1NldCgpOwogICAgU2V0PFN0cmluZz4gY29uc3RTeW1ib2xzID0gc291cmNlLnJlYWRTdHJpbmdzKGVtcHR5QXNOdWxsOiB0cnVlKT8udG9TZXQoKTsKICAgIExpc3Q8U2V0PENsYXNzRW50aXR5Pj4gc3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcnMgPSBzb3VyY2UucmVhZExpc3QoKCkgewogICAgICByZXR1cm4gc291cmNlLnJlYWRDbGFzc2VzKCkudG9TZXQoKTsKICAgIH0sIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIGJvb2wgdXNlc0ludGVyY2VwdG9yID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBpbnQgYXN5bmNNYXJrZXJzVmFsdWUgPSBzb3VyY2UucmVhZEludE9yTnVsbCgpOwogICAgRW51bVNldDxBc3luY01hcmtlcj4gYXN5bmNNYXJrZXJzID0gYXN5bmNNYXJrZXJzVmFsdWUgIT0gbnVsbAogICAgICAgID8gbmV3IEVudW1TZXQuZnJvbVZhbHVlKGFzeW5jTWFya2Vyc1ZhbHVlKQogICAgICAgIDogbnVsbDsKICAgIFNldDxHZW5lcmljSW5zdGFudGlhdGlvbj4gZ2VuZXJpY0luc3RhbnRpYXRpb25zID0gc291cmNlCiAgICAgICAgLnJlYWRMaXN0KCgpID0+IEdlbmVyaWNJbnN0YW50aWF0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSkKICAgICAgICA/LnRvU2V0KCk7CiAgICBMaXN0PE5hdGl2ZUJlaGF2aW9yPiBuYXRpdmVCZWhhdmlvcnMgPSBzb3VyY2UucmVhZExpc3QoCiAgICAgICAgKCkgPT4gTmF0aXZlQmVoYXZpb3IucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgU2V0PEZ1bmN0aW9uRW50aXR5PiBuYXRpdmVNZXRob2RzID0KICAgICAgICBzb3VyY2UucmVhZE1lbWJlcnM8RnVuY3Rpb25FbnRpdHk+KGVtcHR5QXNOdWxsOiB0cnVlKT8udG9TZXQoKTsKICAgIFNldDxTZWxlY3Rvcj4gb25lU2hvdEludGVyY2VwdG9ycyA9IHNvdXJjZQogICAgICAgIC5yZWFkTGlzdCgoKSA9PiBTZWxlY3Rvci5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKSwgZW1wdHlBc051bGw6IHRydWUpCiAgICAgICAgPy50b1NldCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBfQ29kZWdlbkltcGFjdC5pbnRlcm5hbCgKICAgICAgICBtZW1iZXIsCiAgICAgICAgZHluYW1pY1VzZXMsCiAgICAgICAgc3RhdGljVXNlcywKICAgICAgICB0eXBlVXNlcywKICAgICAgICBjb25zdGFudFVzZXMsCiAgICAgICAgdHlwZVZhcmlhYmxlQm91bmRzU3VidHlwZUNoZWNrcywKICAgICAgICBjb25zdFN5bWJvbHMsCiAgICAgICAgc3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcnMsCiAgICAgICAgdXNlc0ludGVyY2VwdG9yLAogICAgICAgIGFzeW5jTWFya2VycywKICAgICAgICBnZW5lcmljSW5zdGFudGlhdGlvbnMsCiAgICAgICAgbmF0aXZlQmVoYXZpb3JzLAogICAgICAgIG5hdGl2ZU1ldGhvZHMsCiAgICAgICAgb25lU2hvdEludGVyY2VwdG9ycyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTWVtYmVyKG1lbWJlcik7CiAgICBzaW5rLndyaXRlTGlzdChkeW5hbWljVXNlcywgKER5bmFtaWNVc2UgdXNlKSA9PiB1c2Uud3JpdGVUb0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdChzdGF0aWNVc2VzLCAoU3RhdGljVXNlIHVzZSkgPT4gdXNlLndyaXRlVG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QodHlwZVVzZXMsIChUeXBlVXNlIHVzZSkgPT4gdXNlLndyaXRlVG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoY29uc3RhbnRVc2VzLCAoQ29uc3RhbnRVc2UgdXNlKSA9PiB1c2Uud3JpdGVUb0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdDxQYWlyPERhcnRUeXBlLCBEYXJ0VHlwZT4+KF90eXBlVmFyaWFibGVCb3VuZHNTdWJ0eXBlQ2hlY2tzLAogICAgICAgIChwYWlyKSB7CiAgICAgIHNpbmsud3JpdGVEYXJ0VHlwZShwYWlyLmEpOwogICAgICBzaW5rLndyaXRlRGFydFR5cGUocGFpci5iKTsKICAgIH0sIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlU3RyaW5ncyhfY29uc3RTeW1ib2xzLCBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoX3NwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3JzLCBzaW5rLndyaXRlQ2xhc3NlcywKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUJvb2woX3VzZXNJbnRlcmNlcHRvcik7CiAgICBzaW5rLndyaXRlSW50T3JOdWxsKF9hc3luY01hcmtlcnM/LnZhbHVlKTsKICAgIHNpbmsud3JpdGVMaXN0KAogICAgICAgIF9nZW5lcmljSW5zdGFudGlhdGlvbnMsCiAgICAgICAgKEdlbmVyaWNJbnN0YW50aWF0aW9uIGluc3RhbnRpYXRpb24pID0+CiAgICAgICAgICAgIGluc3RhbnRpYXRpb24ud3JpdGVUb0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdChfbmF0aXZlQmVoYXZpb3JzLAogICAgICAgIChOYXRpdmVCZWhhdmlvciBiZWhhdmlvcikgPT4gYmVoYXZpb3Iud3JpdGVUb0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTWVtYmVycyhfbmF0aXZlTWV0aG9kcywgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KF9vbmVTaG90SW50ZXJjZXB0b3JzLAogICAgICAgIChTZWxlY3RvciBzZWxlY3RvcikgPT4gc2VsZWN0b3Iud3JpdGVUb0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhcHBseShXb3JsZEltcGFjdFZpc2l0b3IgdmlzaXRvcikgewogICAgc3RhdGljVXNlcy5mb3JFYWNoKChTdGF0aWNVc2UgdXNlKSA9PiB2aXNpdG9yLnZpc2l0U3RhdGljVXNlKG1lbWJlciwgdXNlKSk7CiAgICBkeW5hbWljVXNlcy5mb3JFYWNoKChEeW5hbWljVXNlIHVzZSkgPT4gdmlzaXRvci52aXNpdER5bmFtaWNVc2UpOwogICAgdHlwZVVzZXMuZm9yRWFjaCgoVHlwZVVzZSB1c2UpID0+IHZpc2l0b3IudmlzaXRUeXBlVXNlKG1lbWJlciwgdXNlKSk7CiAgICBjb25zdGFudFVzZXMKICAgICAgICAuZm9yRWFjaCgoQ29uc3RhbnRVc2UgdXNlKSA9PiB2aXNpdG9yLnZpc2l0Q29uc3RhbnRVc2UobWVtYmVyLCB1c2UpKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJUeXBlVmFyaWFibGVCb3VuZHNTdWJ0eXBlQ2hlY2soCiAgICAgIERhcnRUeXBlIHN1YnR5cGUsIERhcnRUeXBlIHN1cGVydHlwZSkgewogICAgX3R5cGVWYXJpYWJsZUJvdW5kc1N1YnR5cGVDaGVja3MgPz89IHt9OwogICAgX3R5cGVWYXJpYWJsZUJvdW5kc1N1YnR5cGVDaGVja3MKICAgICAgICAuYWRkKG5ldyBQYWlyPERhcnRUeXBlLCBEYXJ0VHlwZT4oc3VidHlwZSwgc3VwZXJ0eXBlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxQYWlyPERhcnRUeXBlLCBEYXJ0VHlwZT4+IGdldCB0eXBlVmFyaWFibGVCb3VuZHNTdWJ0eXBlQ2hlY2tzIHsKICAgIHJldHVybiBfdHlwZVZhcmlhYmxlQm91bmRzU3VidHlwZUNoZWNrcyAhPSBudWxsCiAgICAgICAgPyBfdHlwZVZhcmlhYmxlQm91bmRzU3VidHlwZUNoZWNrcwogICAgICAgIDogY29uc3QgPFBhaXI8RGFydFR5cGUsIERhcnRUeXBlPj5bXTsKICB9CgogIHZvaWQgcmVnaXN0ZXJDb25zdFN5bWJvbChTdHJpbmcgbmFtZSkgewogICAgX2NvbnN0U3ltYm9scyA/Pz0ge307CiAgICBfY29uc3RTeW1ib2xzLmFkZChuYW1lKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPFN0cmluZz4gZ2V0IGNvbnN0U3ltYm9scyB7CiAgICByZXR1cm4gX2NvbnN0U3ltYm9scyAhPSBudWxsID8gX2NvbnN0U3ltYm9scyA6IGNvbnN0IDxTdHJpbmc+W107CiAgfQoKICB2b2lkIHJlZ2lzdGVyU3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcihTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXMpIHsKICAgIF9zcGVjaWFsaXplZEdldEludGVyY2VwdG9ycyA/Pz0gPFNldDxDbGFzc0VudGl0eT4+W107CiAgICBfc3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcnMuYWRkKGNsYXNzZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8U2V0PENsYXNzRW50aXR5Pj4gZ2V0IHNwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3JzIHsKICAgIHJldHVybiBfc3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcnMgIT0gbnVsbAogICAgICAgID8gX3NwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3JzCiAgICAgICAgOiBjb25zdCA8U2V0PENsYXNzRW50aXR5Pj5bXTsKICB9CgogIHZvaWQgcmVnaXN0ZXJVc2VJbnRlcmNlcHRvcigpIHsKICAgIF91c2VzSW50ZXJjZXB0b3IgPSB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgdXNlc0ludGVyY2VwdG9yID0+IF91c2VzSW50ZXJjZXB0b3I7CgogIHZvaWQgcmVnaXN0ZXJBc3luY01hcmtlcihBc3luY01hcmtlciBhc3luY01hcmtlcikgewogICAgX2FzeW5jTWFya2VycyA/Pz0gbmV3IEVudW1TZXQ8QXN5bmNNYXJrZXI+KCk7CiAgICBfYXN5bmNNYXJrZXJzLmFkZChhc3luY01hcmtlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxBc3luY01hcmtlcj4gZ2V0IGFzeW5jTWFya2VycyB7CiAgICByZXR1cm4gX2FzeW5jTWFya2VycyAhPSBudWxsCiAgICAgICAgPyBfYXN5bmNNYXJrZXJzLml0ZXJhYmxlKEFzeW5jTWFya2VyLnZhbHVlcykKICAgICAgICA6IGNvbnN0IDxBc3luY01hcmtlcj5bXTsKICB9CgogIHZvaWQgcmVnaXN0ZXJHZW5lcmljSW5zdGFudGlhdGlvbihHZW5lcmljSW5zdGFudGlhdGlvbiBpbnN0YW50aWF0aW9uKSB7CiAgICBfZ2VuZXJpY0luc3RhbnRpYXRpb25zID8/PSB7fTsKICAgIF9nZW5lcmljSW5zdGFudGlhdGlvbnMuYWRkKGluc3RhbnRpYXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8R2VuZXJpY0luc3RhbnRpYXRpb24+IGdldCBnZW5lcmljSW5zdGFudGlhdGlvbnMgewogICAgcmV0dXJuIF9nZW5lcmljSW5zdGFudGlhdGlvbnMgPz8gY29uc3QgPEdlbmVyaWNJbnN0YW50aWF0aW9uPltdOwogIH0KCiAgdm9pZCByZWdpc3Rlck5hdGl2ZUJlaGF2aW9yKE5hdGl2ZUJlaGF2aW9yIG5hdGl2ZUJlaGF2aW9yKSB7CiAgICBfbmF0aXZlQmVoYXZpb3JzID8/PSBbXTsKICAgIF9uYXRpdmVCZWhhdmlvcnMuYWRkKG5hdGl2ZUJlaGF2aW9yKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPE5hdGl2ZUJlaGF2aW9yPiBnZXQgbmF0aXZlQmVoYXZpb3JzIHsKICAgIHJldHVybiBfbmF0aXZlQmVoYXZpb3JzID8/IGNvbnN0IDxOYXRpdmVCZWhhdmlvcj5bXTsKICB9CgogIHZvaWQgcmVnaXN0ZXJOYXRpdmVNZXRob2QoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pIHsKICAgIF9uYXRpdmVNZXRob2RzID8/PSB7fTsKICAgIF9uYXRpdmVNZXRob2RzLmFkZChmdW5jdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxGdW5jdGlvbkVudGl0eT4gZ2V0IG5hdGl2ZU1ldGhvZHMgewogICAgcmV0dXJuIF9uYXRpdmVNZXRob2RzID8/IGNvbnN0IFtdOwogIH0KCiAgdm9pZCByZWdpc3Rlck9uZVNob3RJbnRlcmNlcHRvcihTZWxlY3RvciBzZWxlY3RvcikgewogICAgX29uZVNob3RJbnRlcmNlcHRvcnMgPz89IHt9OwogICAgX29uZVNob3RJbnRlcmNlcHRvcnMuYWRkKHNlbGVjdG9yKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPFNlbGVjdG9yPiBnZXQgb25lU2hvdEludGVyY2VwdG9ycyB7CiAgICByZXR1cm4gX29uZVNob3RJbnRlcmNlcHRvcnMgPz8gY29uc3QgW107CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnQ29kZWdlbkltcGFjdDonKTsKICAgIFdvcmxkSW1wYWN0LnByaW50T24oc2IsIHRoaXMpOwoKICAgIHZvaWQgYWRkKFN0cmluZyB0aXRsZSwgSXRlcmFibGUgaXRlcmFibGUpIHsKICAgICAgaWYgKGl0ZXJhYmxlLmlzTm90RW1wdHkpIHsKICAgICAgICBzYi53cml0ZSgnXG4gJHRpdGxlOicpOwogICAgICAgIGl0ZXJhYmxlLmZvckVhY2goKGUpID0+IHNiLndyaXRlKCdcbiAgJGUnKSk7CiAgICAgIH0KICAgIH0KCiAgICBhZGQoJ3R5cGVWYXJpYWJsZUJvdW5kc1N1YnR5cGVDaGVja3MnLCB0eXBlVmFyaWFibGVCb3VuZHNTdWJ0eXBlQ2hlY2tzKTsKICAgIGFkZCgnY29uc3RTeW1ib2xzJywgY29uc3RTeW1ib2xzKTsKICAgIGFkZCgnc3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcnMnLCBzcGVjaWFsaXplZEdldEludGVyY2VwdG9ycyk7CiAgICBpZiAodXNlc0ludGVyY2VwdG9yKSB7CiAgICAgIHNiLndyaXRlKCdcbiB1c2VzSW50ZXJjZXB0b3I6IHRydWUnKTsKICAgIH0KICAgIGFkZCgnYXN5bmNNYXJrZXJzJywgYXN5bmNNYXJrZXJzKTsKICAgIGFkZCgnZ2VuZXJpY0luc3RhbnRpYXRpb25zJywgZ2VuZXJpY0luc3RhbnRpYXRpb25zKTsKICAgIGFkZCgnbmF0aXZlQmVoYXZpb3JzJywgbmF0aXZlQmVoYXZpb3JzKTsKICAgIGFkZCgnbmF0aXZlTWV0aG9kcycsIG5hdGl2ZU1ldGhvZHMpOwogICAgYWRkKCdvbmVTaG90SW50ZXJjZXB0b3JzJywgb25lU2hvdEludGVyY2VwdG9ycyk7CgogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTcGxpdCB0aGlzIGNsYXNzIGludG8gaW50ZXJmYWNlIGFuZCBpbXBsZW1lbnRhdGlvbi4KLy8gVE9ETyhqb2hubml3aW50aGVyKTogTW92ZSB0aGlzIGltcGxlbWVudGF0aW9uIHRvIHRoZSBKUyBiYWNrZW5kLgpjbGFzcyBDb2RlZ2VuUmVnaXN0cnkgewogIGZpbmFsIEVsZW1lbnRFbnZpcm9ubWVudCBfZWxlbWVudEVudmlyb25tZW50OwogIGZpbmFsIE1lbWJlckVudGl0eSBfY3VycmVudEVsZW1lbnQ7CiAgZmluYWwgX0NvZGVnZW5JbXBhY3QgX3dvcmxkSW1wYWN0OwogIExpc3Q8TW9kdWxhck5hbWU+IF9uYW1lczsKICBMaXN0PE1vZHVsYXJFeHByZXNzaW9uPiBfZXhwcmVzc2lvbnM7CgogIENvZGVnZW5SZWdpc3RyeSh0aGlzLl9lbGVtZW50RW52aXJvbm1lbnQsIHRoaXMuX2N1cnJlbnRFbGVtZW50KQogICAgICA6IHRoaXMuX3dvcmxkSW1wYWN0ID0gbmV3IF9Db2RlZ2VuSW1wYWN0KF9jdXJyZW50RWxlbWVudCk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdDb2RlZ2VuUmVnaXN0cnkgZm9yICRfY3VycmVudEVsZW1lbnQnOwoKICBAZGVwcmVjYXRlZAogIHZvaWQgcmVnaXN0ZXJJbnN0YW50aWF0ZWRDbGFzcyhDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRSYXdUeXBlKGVsZW1lbnQpKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJTdGF0aWNVc2UoU3RhdGljVXNlIHN0YXRpY1VzZSkgewogICAgX3dvcmxkSW1wYWN0LnJlZ2lzdGVyU3RhdGljVXNlKHN0YXRpY1VzZSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyRHluYW1pY1VzZShEeW5hbWljVXNlIGR5bmFtaWNVc2UpIHsKICAgIF93b3JsZEltcGFjdC5yZWdpc3RlckR5bmFtaWNVc2UoZHluYW1pY1VzZSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyVHlwZVVzZShUeXBlVXNlIHR5cGVVc2UpIHsKICAgIF93b3JsZEltcGFjdC5yZWdpc3RlclR5cGVVc2UodHlwZVVzZSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyQ29uc3RhbnRVc2UoQ29uc3RhbnRVc2UgY29uc3RhbnRVc2UpIHsKICAgIF93b3JsZEltcGFjdC5yZWdpc3RlckNvbnN0YW50VXNlKGNvbnN0YW50VXNlKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJUeXBlVmFyaWFibGVCb3VuZHNTdWJ0eXBlQ2hlY2soCiAgICAgIERhcnRUeXBlIHN1YnR5cGUsIERhcnRUeXBlIHN1cGVydHlwZSkgewogICAgX3dvcmxkSW1wYWN0LnJlZ2lzdGVyVHlwZVZhcmlhYmxlQm91bmRzU3VidHlwZUNoZWNrKHN1YnR5cGUsIHN1cGVydHlwZSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVySW5zdGFudGlhdGVkQ2xvc3VyZShGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICBfd29ybGRJbXBhY3QucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5jYWxsTWV0aG9kKGVsZW1lbnQpKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJDb25zdFN5bWJvbChTdHJpbmcgbmFtZSkgewogICAgX3dvcmxkSW1wYWN0LnJlZ2lzdGVyQ29uc3RTeW1ib2wobmFtZSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyU3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcihTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXMpIHsKICAgIF93b3JsZEltcGFjdC5yZWdpc3RlclNwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3IoY2xhc3Nlcyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyT25lU2hvdEludGVyY2VwdG9yKFNlbGVjdG9yIHNlbGVjdG9yKSB7CiAgICBfd29ybGRJbXBhY3QucmVnaXN0ZXJPbmVTaG90SW50ZXJjZXB0b3Ioc2VsZWN0b3IpOwogIH0KCiAgdm9pZCByZWdpc3RlclVzZUludGVyY2VwdG9yKCkgewogICAgX3dvcmxkSW1wYWN0LnJlZ2lzdGVyVXNlSW50ZXJjZXB0b3IoKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKEludGVyZmFjZVR5cGUgdHlwZSkgewogICAgcmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLmluc3RhbnRpYXRpb24odHlwZSkpOwogIH0KCiAgdm9pZCByZWdpc3RlckFzeW5jTWFya2VyKEFzeW5jTWFya2VyIGFzeW5jTWFya2VyKSB7CiAgICBfd29ybGRJbXBhY3QucmVnaXN0ZXJBc3luY01hcmtlcihhc3luY01hcmtlcik7CiAgfQoKICB2b2lkIHJlZ2lzdGVyR2VuZXJpY0luc3RhbnRpYXRpb24oR2VuZXJpY0luc3RhbnRpYXRpb24gaW5zdGFudGlhdGlvbikgewogICAgX3dvcmxkSW1wYWN0LnJlZ2lzdGVyR2VuZXJpY0luc3RhbnRpYXRpb24oaW5zdGFudGlhdGlvbik7CiAgfQoKICB2b2lkIHJlZ2lzdGVyTmF0aXZlQmVoYXZpb3IoTmF0aXZlQmVoYXZpb3IgbmF0aXZlQmVoYXZpb3IpIHsKICAgIF93b3JsZEltcGFjdC5yZWdpc3Rlck5hdGl2ZUJlaGF2aW9yKG5hdGl2ZUJlaGF2aW9yKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJOYXRpdmVNZXRob2QoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pIHsKICAgIF93b3JsZEltcGFjdC5yZWdpc3Rlck5hdGl2ZU1ldGhvZChmdW5jdGlvbik7CiAgfQoKICB2b2lkIHJlZ2lzdGVyTW9kdWxhck5hbWUoTW9kdWxhck5hbWUgbmFtZSkgewogICAgX25hbWVzID8/PSBbXTsKICAgIF9uYW1lcy5hZGQobmFtZSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyTW9kdWxhckV4cHJlc3Npb24oTW9kdWxhckV4cHJlc3Npb24gZXhwcmVzc2lvbikgewogICAgX2V4cHJlc3Npb25zID8/PSBbXTsKICAgIF9leHByZXNzaW9ucy5hZGQoZXhwcmVzc2lvbik7CiAgfQoKICBDb2RlZ2VuUmVzdWx0IGNsb3NlKGpzLkZ1biBjb2RlKSB7CiAgICByZXR1cm4gbmV3IENvZGVnZW5SZXN1bHQoCiAgICAgICAgY29kZSwgX3dvcmxkSW1wYWN0LCBfbmFtZXMgPz8gY29uc3QgW10sIF9leHByZXNzaW9ucyA/PyBjb25zdCBbXSk7CiAgfQp9CgovLy8gSW50ZXJmYWNlIGZvciByZWFkaW5nIHRoZSBjb2RlIGdlbmVyYXRpb24gcmVzdWx0cyBmb3IgYWxsIFtNZW1iZXJFbnRpdHldcy4KYWJzdHJhY3QgY2xhc3MgQ29kZWdlblJlc3VsdHMgewogIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGdldCBnbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0czsKICBDb2RlZ2VuSW5wdXRzIGdldCBjb2RlZ2VuSW5wdXRzOwogIENvZGVnZW5SZXN1bHQgZ2V0Q29kZWdlblJlc3VsdHMoTWVtYmVyRW50aXR5IG1lbWJlcik7Cn0KCi8vLyBDb2RlIGdlbmVyYXRpb24gcmVzdWx0cyBjb21wdXRlZCBvbi1kZW1hbmQuCi8vLwovLy8gVGhpcyBpcyB1c2VkIGluIHRoZSBub24tbW9kdWxhciBjb2RlZ2VuIGVucXVldWVyIGRyaXZpbmcgY29kZSBnZW5lcmF0aW9uLgpjbGFzcyBPbkRlbWFuZENvZGVnZW5SZXN1bHRzIGV4dGVuZHMgQ29kZWdlblJlc3VsdHMgewogIEBvdmVycmlkZQogIGZpbmFsIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzOwogIEBvdmVycmlkZQogIGZpbmFsIENvZGVnZW5JbnB1dHMgY29kZWdlbklucHV0czsKICBmaW5hbCBTc2FGdW5jdGlvbkNvbXBpbGVyIF9mdW5jdGlvbkNvbXBpbGVyOwoKICBPbkRlbWFuZENvZGVnZW5SZXN1bHRzKHRoaXMuZ2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMsIHRoaXMuY29kZWdlbklucHV0cywKICAgICAgdGhpcy5fZnVuY3Rpb25Db21waWxlcik7CgogIEBvdmVycmlkZQogIENvZGVnZW5SZXN1bHQgZ2V0Q29kZWdlblJlc3VsdHMoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgcmV0dXJuIF9mdW5jdGlvbkNvbXBpbGVyLmNvbXBpbGUobWVtYmVyKTsKICB9Cn0KCi8vLyBEZXNlcmlhbGl6ZWQgY29kZSBnZW5lcmF0aW9uIHJlc3VsdHMuCi8vLwovLy8gVGhpcyBpcyB1c2VkIGZvciBtb2R1bGFyIGNvZGUgZ2VuZXJhdGlvbi4KY2xhc3MgRGVzZXJpYWxpemVkQ29kZWdlblJlc3VsdHMgZXh0ZW5kcyBDb2RlZ2VuUmVzdWx0cyB7CiAgQG92ZXJyaWRlCiAgZmluYWwgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgZ2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHM7CiAgQG92ZXJyaWRlCiAgZmluYWwgQ29kZWdlbklucHV0cyBjb2RlZ2VuSW5wdXRzOwoKICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBDb2RlZ2VuUmVzdWx0PiBfbWFwOwoKICBEZXNlcmlhbGl6ZWRDb2RlZ2VuUmVzdWx0cygKICAgICAgdGhpcy5nbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cywgdGhpcy5jb2RlZ2VuSW5wdXRzLCB0aGlzLl9tYXApOwoKICBAb3ZlcnJpZGUKICBDb2RlZ2VuUmVzdWx0IGdldENvZGVnZW5SZXN1bHRzKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIENvZGVnZW5SZXN1bHQgcmVzdWx0ID0gX21hcFttZW1iZXJdOwogICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CiAgICAgIGZhaWxlZEF0KG1lbWJlciwKICAgICAgICAgICJObyBjb2RlZ2VuIHJlc3VsdHMgZnJvbSAkbWVtYmVyICgke2lkZW50aXR5SGFzaENvZGUobWVtYmVyKX0pLiIpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KCi8vLyBUaGUgY29kZSBnZW5lcmF0aW9uIHJlc3VsdCBmb3IgYSBzaW5nbGUgW01lbWJlckVudGl0eV0uCmNsYXNzIENvZGVnZW5SZXN1bHQgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2NvZGVnZW4tcmVzdWx0JzsKCiAgZmluYWwganMuRnVuIGNvZGU7CiAgZmluYWwgQ29kZWdlbkltcGFjdCBpbXBhY3Q7CiAgZmluYWwgSXRlcmFibGU8TW9kdWxhck5hbWU+IG1vZHVsYXJOYW1lczsKICBmaW5hbCBJdGVyYWJsZTxNb2R1bGFyRXhwcmVzc2lvbj4gbW9kdWxhckV4cHJlc3Npb25zOwoKICBDb2RlZ2VuUmVzdWx0KAogICAgICB0aGlzLmNvZGUsIHRoaXMuaW1wYWN0LCB0aGlzLm1vZHVsYXJOYW1lcywgdGhpcy5tb2R1bGFyRXhwcmVzc2lvbnMpOwoKICAvLy8gUmVhZHMgYSBbQ29kZWdlblJlc3VsdF0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgLy8vCiAgLy8vIFRoZSBbTW9kdWxhck5hbWVdIGFuZCBbTW9kdWxhckV4cHJlc3Npb25dIG5vZGVzIHJlYWQgZHVyaW5nCiAgLy8vIGRlc2VyaWFsaXphdGlvbiBhcmUgY29sbGVjdGVkIGluIFttb2R1bGFyTmFtZXNdIGFuZCBbbW9kdWxhckV4cHJlc3Npb25zXQogIC8vLyB0byBhdm9pZCB0aGUgbmVlZCBmb3IgdmlzaXRpbmcgdGhlIFtjb2RlXSBub2RlIHBvc3QgZGVzZXJpYWxpemF0aW9uLgogIGZhY3RvcnkgQ29kZWdlblJlc3VsdC5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLAogICAgICBMaXN0PE1vZHVsYXJOYW1lPiBtb2R1bGFyTmFtZXMsCiAgICAgIExpc3Q8TW9kdWxhckV4cHJlc3Npb24+IG1vZHVsYXJFeHByZXNzaW9ucykgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBqcy5GdW4gY29kZSA9IHNvdXJjZS5yZWFkSnNOb2RlT3JOdWxsKCk7CiAgICBDb2RlZ2VuSW1wYWN0IGltcGFjdCA9IENvZGVnZW5JbXBhY3QucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IENvZGVnZW5SZXN1bHQoY29kZSwgaW1wYWN0LCBtb2R1bGFyTmFtZXMsIG1vZHVsYXJFeHByZXNzaW9ucyk7CiAgfQoKICAvLy8gV3JpdGVzIHRoZSBbQ29kZWdlblJlc3VsdF0gb2JqZWN0IHRvIFtzaW5rXS4KICAvLy8KICAvLy8gVGhlIFttb2R1bGFyTmFtZXNdIGFuZCBbbW9kdWxhckV4cHJlc3Npb25zXSBmaWVsZHMgYXJlIG5vdCBkaXJlY3RseQogIC8vLyBzZXJpYWxpemVzIGJlY2F1c2UgdGhlc2UgYXJlIGVtYmVkZGVkIGluIHRoZSBbY29kZV0gbm9kZSBhbmQgY29sbGVjdGVkCiAgLy8vIHRocm91Z2ggdGhpcyBkdXJpbmcgZGVzZXJpYWxpemF0aW9uLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVKc05vZGVPck51bGwoY29kZSk7CiAgICBpbXBhY3Qud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIHZvaWQgYXBwbHlNb2R1bGFyU3RhdGUoTmFtZXIgbmFtZXIsIEVtaXR0ZXIgZW1pdHRlcikgewogICAgZm9yIChNb2R1bGFyTmFtZSBuYW1lIGluIG1vZHVsYXJOYW1lcykgewogICAgICBzd2l0Y2ggKG5hbWUua2luZCkgewogICAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLnJ0aUZpZWxkOgogICAgICAgICAgbmFtZS52YWx1ZSA9IG5hbWVyLnJ0aUZpZWxkSnNOYW1lOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQucnVudGltZVR5cGVOYW1lOgogICAgICAgICAgbmFtZS52YWx1ZSA9IG5hbWVyLnJ1bnRpbWVUeXBlTmFtZShuYW1lLmRhdGEpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQuY2xhc3NOYW1lOgogICAgICAgICAgbmFtZS52YWx1ZSA9IG5hbWVyLmNsYXNzTmFtZShuYW1lLmRhdGEpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQuYWxpYXNlZFN1cGVyTWVtYmVyOgogICAgICAgICAgbmFtZS52YWx1ZSA9IG5hbWVyLmFsaWFzZWRTdXBlck1lbWJlclByb3BlcnR5TmFtZShuYW1lLmRhdGEpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQuc3RhdGljQ2xvc3VyZToKICAgICAgICAgIG5hbWUudmFsdWUgPSBuYW1lci5zdGF0aWNDbG9zdXJlTmFtZShuYW1lLmRhdGEpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQubWV0aG9kUHJvcGVydHk6CiAgICAgICAgICBuYW1lLnZhbHVlID0gbmFtZXIubWV0aG9kUHJvcGVydHlOYW1lKG5hbWUuZGF0YSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5vcGVyYXRvcklzOgogICAgICAgICAgbmFtZS52YWx1ZSA9IG5hbWVyLm9wZXJhdG9ySXMobmFtZS5kYXRhKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLm9wZXJhdG9ySXNUeXBlOgogICAgICAgICAgbmFtZS52YWx1ZSA9IG5hbWVyLm9wZXJhdG9ySXNUeXBlKG5hbWUuZGF0YSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5zdWJzdGl0dXRpb246CiAgICAgICAgICBuYW1lLnZhbHVlID0gbmFtZXIuc3Vic3RpdHV0aW9uTmFtZShuYW1lLmRhdGEpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQuaW5zdGFuY2VNZXRob2Q6CiAgICAgICAgICBuYW1lLnZhbHVlID0gbmFtZXIuaW5zdGFuY2VNZXRob2ROYW1lKG5hbWUuZGF0YSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5pbnN0YW5jZUZpZWxkOgogICAgICAgICAgbmFtZS52YWx1ZSA9IG5hbWVyLmluc3RhbmNlRmllbGRQcm9wZXJ0eU5hbWUobmFtZS5kYXRhKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLmludm9jYXRpb246CiAgICAgICAgICBuYW1lLnZhbHVlID0gbmFtZXIuaW52b2NhdGlvbk5hbWUobmFtZS5kYXRhKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLmxhenlJbml0aWFsaXplcjoKICAgICAgICAgIG5hbWUudmFsdWUgPSBuYW1lci5sYXp5SW5pdGlhbGl6ZXJOYW1lKG5hbWUuZGF0YSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5nbG9iYWxQcm9wZXJ0eU5hbWVGb3JDbGFzczoKICAgICAgICAgIG5hbWUudmFsdWUgPSBuYW1lci5nbG9iYWxQcm9wZXJ0eU5hbWVGb3JDbGFzcyhuYW1lLmRhdGEpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQuZ2xvYmFsUHJvcGVydHlOYW1lRm9yVHlwZToKICAgICAgICAgIG5hbWUudmFsdWUgPSBuYW1lci5nbG9iYWxQcm9wZXJ0eU5hbWVGb3JUeXBlKG5hbWUuZGF0YSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5nbG9iYWxQcm9wZXJ0eU5hbWVGb3JNZW1iZXI6CiAgICAgICAgICBuYW1lLnZhbHVlID0gbmFtZXIuZ2xvYmFsUHJvcGVydHlOYW1lRm9yTWVtYmVyKG5hbWUuZGF0YSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5nbG9iYWxOYW1lRm9ySW50ZXJmYWNlVHlwZVZhcmlhYmxlOgogICAgICAgICAgbmFtZS52YWx1ZSA9IG5hbWVyLmdsb2JhbE5hbWVGb3JJbnRlcmZhY2VUeXBlVmFyaWFibGUobmFtZS5kYXRhKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLm5hbWVGb3JHZXRJbnRlcmNlcHRvcjoKICAgICAgICAgIG5hbWUudmFsdWUgPSBuYW1lci5uYW1lRm9yR2V0SW50ZXJjZXB0b3IobmFtZS5zZXQpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQubmFtZUZvck9uZVNob3RJbnRlcmNlcHRvcjoKICAgICAgICAgIG5hbWUudmFsdWUgPSBuYW1lci5uYW1lRm9yT25lU2hvdEludGVyY2VwdG9yKG5hbWUuZGF0YSwgbmFtZS5zZXQpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQuYXNOYW1lOgogICAgICAgICAgbmFtZS52YWx1ZSA9IG5hbWVyLmFzTmFtZShuYW1lLmRhdGEpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGZvciAoTW9kdWxhckV4cHJlc3Npb24gZXhwcmVzc2lvbiBpbiBtb2R1bGFyRXhwcmVzc2lvbnMpIHsKICAgICAgc3dpdGNoIChleHByZXNzaW9uLmtpbmQpIHsKICAgICAgICBjYXNlIE1vZHVsYXJFeHByZXNzaW9uS2luZC5nbG9iYWxPYmplY3RGb3JMaWJyYXJ5OgogICAgICAgICAgZXhwcmVzc2lvbi52YWx1ZSA9IG5hbWVyCiAgICAgICAgICAgICAgLnJlYWRHbG9iYWxPYmplY3RGb3JMaWJyYXJ5KGV4cHJlc3Npb24uZGF0YSkKICAgICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKGV4cHJlc3Npb24uc291cmNlSW5mb3JtYXRpb24pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNb2R1bGFyRXhwcmVzc2lvbktpbmQuZ2xvYmFsT2JqZWN0Rm9yQ2xhc3M6CiAgICAgICAgICBleHByZXNzaW9uLnZhbHVlID0gbmFtZXIKICAgICAgICAgICAgICAucmVhZEdsb2JhbE9iamVjdEZvckNsYXNzKGV4cHJlc3Npb24uZGF0YSkKICAgICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKGV4cHJlc3Npb24uc291cmNlSW5mb3JtYXRpb24pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNb2R1bGFyRXhwcmVzc2lvbktpbmQuZ2xvYmFsT2JqZWN0Rm9yVHlwZToKICAgICAgICAgIGV4cHJlc3Npb24udmFsdWUgPSBuYW1lcgogICAgICAgICAgICAgIC5yZWFkR2xvYmFsT2JqZWN0Rm9yVHlwZShleHByZXNzaW9uLmRhdGEpCiAgICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihleHByZXNzaW9uLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTW9kdWxhckV4cHJlc3Npb25LaW5kLmdsb2JhbE9iamVjdEZvck1lbWJlcjoKICAgICAgICAgIGV4cHJlc3Npb24udmFsdWUgPSBuYW1lcgogICAgICAgICAgICAgIC5yZWFkR2xvYmFsT2JqZWN0Rm9yTWVtYmVyKGV4cHJlc3Npb24uZGF0YSkKICAgICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKGV4cHJlc3Npb24uc291cmNlSW5mb3JtYXRpb24pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNb2R1bGFyRXhwcmVzc2lvbktpbmQuY29uc3RhbnQ6CiAgICAgICAgICBleHByZXNzaW9uLnZhbHVlID0gZW1pdHRlcgogICAgICAgICAgICAgIC5jb25zdGFudFJlZmVyZW5jZShleHByZXNzaW9uLmRhdGEpCiAgICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihleHByZXNzaW9uLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTW9kdWxhckV4cHJlc3Npb25LaW5kLmVtYmVkZGVkR2xvYmFsQWNjZXNzOgogICAgICAgICAgZXhwcmVzc2lvbi52YWx1ZSA9IGVtaXR0ZXIKICAgICAgICAgICAgICAuZ2VuZXJhdGVFbWJlZGRlZEdsb2JhbEFjY2VzcyhleHByZXNzaW9uLmRhdGEpCiAgICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihleHByZXNzaW9uLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnQ29kZWdlblJlc3VsdChjb2RlPScpOwogICAgc2Iud3JpdGUoY29kZSAhPSBudWxsID8ganMuRGVidWdQcmludChjb2RlKSA6ICc8bnVsbD4sJyk7CiAgICBzYi53cml0ZSgnaW1wYWN0PSRpbXBhY3QsJyk7CiAgICBzYi53cml0ZSgnbW9kdWxhck5hbWVzPSRtb2R1bGFyTmFtZXMsJyk7CiAgICBzYi53cml0ZSgnbW9kdWxhckV4cHJlc3Npb25zPSRtb2R1bGFyRXhwcmVzc2lvbnMnKTsKICAgIHNiLndyaXRlKCcpJyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCmVudW0gTW9kdWxhck5hbWVLaW5kIHsKICBydGlGaWVsZCwKICBydW50aW1lVHlwZU5hbWUsCiAgY2xhc3NOYW1lLAogIGFsaWFzZWRTdXBlck1lbWJlciwKICBzdGF0aWNDbG9zdXJlLAogIG1ldGhvZFByb3BlcnR5LAogIG9wZXJhdG9ySXMsCiAgb3BlcmF0b3JJc1R5cGUsCiAgc3Vic3RpdHV0aW9uLAogIGluc3RhbmNlTWV0aG9kLAogIGluc3RhbmNlRmllbGQsCiAgaW52b2NhdGlvbiwKICBsYXp5SW5pdGlhbGl6ZXIsCiAgZ2xvYmFsUHJvcGVydHlOYW1lRm9yQ2xhc3MsCiAgZ2xvYmFsUHJvcGVydHlOYW1lRm9yVHlwZSwKICBnbG9iYWxQcm9wZXJ0eU5hbWVGb3JNZW1iZXIsCiAgZ2xvYmFsTmFtZUZvckludGVyZmFjZVR5cGVWYXJpYWJsZSwKICBuYW1lRm9yR2V0SW50ZXJjZXB0b3IsCiAgbmFtZUZvck9uZVNob3RJbnRlcmNlcHRvciwKICBhc05hbWUsCn0KCmNsYXNzIE1vZHVsYXJOYW1lIGV4dGVuZHMganMuTmFtZSBpbXBsZW1lbnRzIGpzLkFzdENvbnRhaW5lciB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnbW9kdWxhci1uYW1lJzsKCiAgZmluYWwgTW9kdWxhck5hbWVLaW5kIGtpbmQ7CiAganMuTmFtZSBfdmFsdWU7CiAgZmluYWwgT2JqZWN0IGRhdGE7CiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBzZXQ7CgogIE1vZHVsYXJOYW1lKHRoaXMua2luZCwge3RoaXMuZGF0YSwgdGhpcy5zZXR9KTsKCiAgZmFjdG9yeSBNb2R1bGFyTmFtZS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgTW9kdWxhck5hbWVLaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oTW9kdWxhck5hbWVLaW5kLnZhbHVlcyk7CiAgICBPYmplY3QgZGF0YTsKICAgIFNldDxDbGFzc0VudGl0eT4gc2V0OwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLnJ0aUZpZWxkOgogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5nbG9iYWxQcm9wZXJ0eU5hbWVGb3JUeXBlOgogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5ydW50aW1lVHlwZU5hbWU6CiAgICAgICAgYm9vbCBkYXRhSXNDbGFzc0VudGl0eSA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgICAgIGlmIChkYXRhSXNDbGFzc0VudGl0eSkgewogICAgICAgICAgZGF0YSA9IHNvdXJjZS5yZWFkQ2xhc3MoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGF0YSA9IHNvdXJjZS5yZWFkVHlwZWRlZigpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQuY2xhc3NOYW1lOgogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5vcGVyYXRvcklzOgogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5zdWJzdGl0dXRpb246CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLmdsb2JhbFByb3BlcnR5TmFtZUZvckNsYXNzOgogICAgICAgIGRhdGEgPSBzb3VyY2UucmVhZENsYXNzKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLmFsaWFzZWRTdXBlck1lbWJlcjoKICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQuc3RhdGljQ2xvc3VyZToKICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQubWV0aG9kUHJvcGVydHk6CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLmluc3RhbmNlRmllbGQ6CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLmluc3RhbmNlTWV0aG9kOgogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5sYXp5SW5pdGlhbGl6ZXI6CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLmdsb2JhbFByb3BlcnR5TmFtZUZvck1lbWJlcjoKICAgICAgICBkYXRhID0gc291cmNlLnJlYWRNZW1iZXIoKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQub3BlcmF0b3JJc1R5cGU6CiAgICAgICAgZGF0YSA9IHNvdXJjZS5yZWFkRGFydFR5cGUoKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQuaW52b2NhdGlvbjoKICAgICAgICBkYXRhID0gU2VsZWN0b3IucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLmdsb2JhbE5hbWVGb3JJbnRlcmZhY2VUeXBlVmFyaWFibGU6CiAgICAgICAgZGF0YSA9IHNvdXJjZS5yZWFkVHlwZVZhcmlhYmxlKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLm5hbWVGb3JHZXRJbnRlcmNlcHRvcjoKICAgICAgICBzZXQgPSBzb3VyY2UucmVhZENsYXNzZXMoKS50b1NldCgpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5uYW1lRm9yT25lU2hvdEludGVyY2VwdG9yOgogICAgICAgIGRhdGEgPSBTZWxlY3Rvci5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgICBzZXQgPSBzb3VyY2UucmVhZENsYXNzZXMoKS50b1NldCgpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5hc05hbWU6CiAgICAgICAgZGF0YSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IE1vZHVsYXJOYW1lKGtpbmQsIGRhdGE6IGRhdGEsIHNldDogc2V0KTsKICB9CgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVFbnVtKGtpbmQpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLnJ0aUZpZWxkOgogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5nbG9iYWxQcm9wZXJ0eU5hbWVGb3JUeXBlOgogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5ydW50aW1lVHlwZU5hbWU6CiAgICAgICAgc2luay53cml0ZUJvb2woZGF0YSBpcyBDbGFzc0VudGl0eSk7CiAgICAgICAgaWYgKGRhdGEgaXMgQ2xhc3NFbnRpdHkpIHsKICAgICAgICAgIHNpbmsud3JpdGVDbGFzcyhkYXRhKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc2luay53cml0ZVR5cGVkZWYoZGF0YSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5jbGFzc05hbWU6CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLm9wZXJhdG9ySXM6CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLnN1YnN0aXR1dGlvbjoKICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQuZ2xvYmFsUHJvcGVydHlOYW1lRm9yQ2xhc3M6CiAgICAgICAgc2luay53cml0ZUNsYXNzKGRhdGEpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5hbGlhc2VkU3VwZXJNZW1iZXI6CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLnN0YXRpY0Nsb3N1cmU6CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLm1ldGhvZFByb3BlcnR5OgogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5pbnN0YW5jZUZpZWxkOgogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5pbnN0YW5jZU1ldGhvZDoKICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQubGF6eUluaXRpYWxpemVyOgogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5nbG9iYWxQcm9wZXJ0eU5hbWVGb3JNZW1iZXI6CiAgICAgICAgc2luay53cml0ZU1lbWJlcihkYXRhKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQub3BlcmF0b3JJc1R5cGU6CiAgICAgICAgc2luay53cml0ZURhcnRUeXBlKGRhdGEpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5pbnZvY2F0aW9uOgogICAgICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gZGF0YTsKICAgICAgICBzZWxlY3Rvci53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLmdsb2JhbE5hbWVGb3JJbnRlcmZhY2VUeXBlVmFyaWFibGU6CiAgICAgICAgVHlwZVZhcmlhYmxlRW50aXR5IHR5cGVWYXJpYWJsZSA9IGRhdGE7CiAgICAgICAgc2luay53cml0ZVR5cGVWYXJpYWJsZSh0eXBlVmFyaWFibGUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1vZHVsYXJOYW1lS2luZC5uYW1lRm9yR2V0SW50ZXJjZXB0b3I6CiAgICAgICAgc2luay53cml0ZUNsYXNzZXMoc2V0KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBNb2R1bGFyTmFtZUtpbmQubmFtZUZvck9uZVNob3RJbnRlcmNlcHRvcjoKICAgICAgICBTZWxlY3RvciBzZWxlY3RvciA9IGRhdGE7CiAgICAgICAgc2VsZWN0b3Iud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgICAgIHNpbmsud3JpdGVDbGFzc2VzKHNldCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTW9kdWxhck5hbWVLaW5kLmFzTmFtZToKICAgICAgICBzaW5rLndyaXRlU3RyaW5nKGRhdGEpOwogICAgICAgIGJyZWFrOwogICAgfQogICAgc2luay5lbmQodGFnKTsKICB9CgogIGpzLk5hbWUgZ2V0IHZhbHVlIHsKICAgIGFzc2VydChfdmFsdWUgIT0gbnVsbCwgJ3ZhbHVlIG5vdCBzZXQgZm9yICR0aGlzJyk7CiAgICByZXR1cm4gX3ZhbHVlOwogIH0KCiAgdm9pZCBzZXQgdmFsdWUoanMuTmFtZSBub2RlKSB7CiAgICBhc3NlcnQoX3ZhbHVlID09IG51bGwpOwogICAgYXNzZXJ0KG5vZGUgIT0gbnVsbCk7CiAgICBfdmFsdWUgPSBub2RlLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGtleSB7CiAgICBhc3NlcnQoX3ZhbHVlICE9IG51bGwpOwogICAgcmV0dXJuIF92YWx1ZS5rZXk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgewogICAgYXNzZXJ0KF92YWx1ZSAhPSBudWxsLCAndmFsdWUgbm90IHNldCBmb3IgJHRoaXMnKTsKICAgIHJldHVybiBfdmFsdWUubmFtZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGFsbG93UmVuYW1lIHsKICAgIGFzc2VydChfdmFsdWUgIT0gbnVsbCwgJ3ZhbHVlIG5vdCBzZXQgZm9yICR0aGlzJyk7CiAgICByZXR1cm4gX3ZhbHVlLmFsbG93UmVuYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGNvbXBhcmVUbyhqcy5OYW1lIG90aGVyKSB7CiAgICBhc3NlcnQoX3ZhbHVlICE9IG51bGwsICd2YWx1ZSBub3Qgc2V0IGZvciAkdGhpcycpOwogICAgcmV0dXJuIF92YWx1ZS5jb21wYXJlVG8ob3RoZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8anMuTm9kZT4gZ2V0IGNvbnRhaW5lZE5vZGVzIHsKICAgIHJldHVybiBfdmFsdWUgIT0gbnVsbCA/IFtfdmFsdWVdIDogY29uc3QgW107CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiBIYXNoaW5nLnNldEhhc2goc2V0LCBIYXNoaW5nLm9iamVjdHNIYXNoKGtpbmQsIGRhdGEpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gb3RoZXIgaXMgTW9kdWxhck5hbWUgJiYKICAgICAgICBraW5kID09IG90aGVyLmtpbmQgJiYKICAgICAgICBkYXRhID09IG90aGVyLmRhdGEgJiYKICAgICAgICBlcXVhbFNldHMoc2V0LCBvdGhlci5zZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgJ01vZHVsYXJOYW1lKGtpbmQ9JGtpbmQsIGRhdGE9JGRhdGEsIHZhbHVlPSR7X3ZhbHVlPy5rZXl9KSc7Cn0KCmVudW0gTW9kdWxhckV4cHJlc3Npb25LaW5kIHsKICBnbG9iYWxPYmplY3RGb3JMaWJyYXJ5LAogIGdsb2JhbE9iamVjdEZvckNsYXNzLAogIGdsb2JhbE9iamVjdEZvclR5cGUsCiAgZ2xvYmFsT2JqZWN0Rm9yTWVtYmVyLAogIGNvbnN0YW50LAogIGVtYmVkZGVkR2xvYmFsQWNjZXNzLAp9CgpjbGFzcyBNb2R1bGFyRXhwcmVzc2lvbiBleHRlbmRzIGpzLkRlZmVycmVkRXhwcmVzc2lvbgogICAgaW1wbGVtZW50cyBqcy5Bc3RDb250YWluZXIgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ21vZHVsYXItZXhwcmVzc2lvbic7CgogIGZpbmFsIE1vZHVsYXJFeHByZXNzaW9uS2luZCBraW5kOwogIGZpbmFsIE9iamVjdCBkYXRhOwogIGpzLkV4cHJlc3Npb24gX3ZhbHVlOwoKICBNb2R1bGFyRXhwcmVzc2lvbih0aGlzLmtpbmQsIHRoaXMuZGF0YSk7CgogIGZhY3RvcnkgTW9kdWxhckV4cHJlc3Npb24ucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIE1vZHVsYXJFeHByZXNzaW9uS2luZCBraW5kID0gc291cmNlLnJlYWRFbnVtKE1vZHVsYXJFeHByZXNzaW9uS2luZC52YWx1ZXMpOwogICAgT2JqZWN0IGRhdGE7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBNb2R1bGFyRXhwcmVzc2lvbktpbmQuZ2xvYmFsT2JqZWN0Rm9yTGlicmFyeToKICAgICAgICBkYXRhID0gc291cmNlLnJlYWRMaWJyYXJ5KCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTW9kdWxhckV4cHJlc3Npb25LaW5kLmdsb2JhbE9iamVjdEZvckNsYXNzOgogICAgICAgIGRhdGEgPSBzb3VyY2UucmVhZENsYXNzKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTW9kdWxhckV4cHJlc3Npb25LaW5kLmdsb2JhbE9iamVjdEZvclR5cGU6CiAgICAgICAgYm9vbCBkYXRhSXNDbGFzc0VudGl0eSA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgICAgIGlmIChkYXRhSXNDbGFzc0VudGl0eSkgewogICAgICAgICAgZGF0YSA9IHNvdXJjZS5yZWFkQ2xhc3MoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGF0YSA9IHNvdXJjZS5yZWFkVHlwZWRlZigpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBNb2R1bGFyRXhwcmVzc2lvbktpbmQuZ2xvYmFsT2JqZWN0Rm9yTWVtYmVyOgogICAgICAgIGRhdGEgPSBzb3VyY2UucmVhZE1lbWJlcigpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1vZHVsYXJFeHByZXNzaW9uS2luZC5jb25zdGFudDoKICAgICAgICBkYXRhID0gc291cmNlLnJlYWRDb25zdGFudCgpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1vZHVsYXJFeHByZXNzaW9uS2luZC5lbWJlZGRlZEdsb2JhbEFjY2VzczoKICAgICAgICBkYXRhID0gc291cmNlLnJlYWRTdHJpbmcoKTsKICAgICAgICBicmVhazsKICAgIH0KICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgTW9kdWxhckV4cHJlc3Npb24oa2luZCwgZGF0YSk7CiAgfQoKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlRW51bShraW5kKTsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIE1vZHVsYXJFeHByZXNzaW9uS2luZC5nbG9iYWxPYmplY3RGb3JMaWJyYXJ5OgogICAgICAgIHNpbmsud3JpdGVMaWJyYXJ5KGRhdGEpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1vZHVsYXJFeHByZXNzaW9uS2luZC5nbG9iYWxPYmplY3RGb3JDbGFzczoKICAgICAgICBzaW5rLndyaXRlQ2xhc3MoZGF0YSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTW9kdWxhckV4cHJlc3Npb25LaW5kLmdsb2JhbE9iamVjdEZvclR5cGU6CiAgICAgICAgc2luay53cml0ZUJvb2woZGF0YSBpcyBDbGFzc0VudGl0eSk7CiAgICAgICAgaWYgKGRhdGEgaXMgQ2xhc3NFbnRpdHkpIHsKICAgICAgICAgIHNpbmsud3JpdGVDbGFzcyhkYXRhKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc2luay53cml0ZVR5cGVkZWYoZGF0YSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1vZHVsYXJFeHByZXNzaW9uS2luZC5nbG9iYWxPYmplY3RGb3JNZW1iZXI6CiAgICAgICAgc2luay53cml0ZU1lbWJlcihkYXRhKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBNb2R1bGFyRXhwcmVzc2lvbktpbmQuY29uc3RhbnQ6CiAgICAgICAgc2luay53cml0ZUNvbnN0YW50KGRhdGEpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1vZHVsYXJFeHByZXNzaW9uS2luZC5lbWJlZGRlZEdsb2JhbEFjY2VzczoKICAgICAgICBzaW5rLndyaXRlU3RyaW5nKGRhdGEpOwogICAgICAgIGJyZWFrOwogICAgfQogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIGpzLkV4cHJlc3Npb24gZ2V0IHZhbHVlIHsKICAgIGFzc2VydChfdmFsdWUgIT0gbnVsbCk7CiAgICByZXR1cm4gX3ZhbHVlOwogIH0KCiAgdm9pZCBzZXQgdmFsdWUoanMuRXhwcmVzc2lvbiBub2RlKSB7CiAgICBhc3NlcnQoX3ZhbHVlID09IG51bGwpOwogICAgYXNzZXJ0KG5vZGUgIT0gbnVsbCk7CiAgICBfdmFsdWUgPSBub2RlLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IHByZWNlZGVuY2VMZXZlbCA9PiBfdmFsdWU/LnByZWNlZGVuY2VMZXZlbCA/PyBqcy5QUklNQVJZOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxqcy5Ob2RlPiBnZXQgY29udGFpbmVkTm9kZXMgewogICAgcmV0dXJuIF92YWx1ZSAhPSBudWxsID8gW192YWx1ZV0gOiBjb25zdCBbXTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgewogICAgcmV0dXJuIEhhc2hpbmcub2JqZWN0c0hhc2goa2luZCwgZGF0YSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIG90aGVyIGlzIE1vZHVsYXJFeHByZXNzaW9uICYmCiAgICAgICAga2luZCA9PSBvdGhlci5raW5kICYmCiAgICAgICAgZGF0YSA9PSBvdGhlci5kYXRhOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoJ01vZHVsYXJFeHByZXNzaW9uKGtpbmQ9JGtpbmQsZGF0YT0nKTsKICAgIGlmIChkYXRhIGlzIENvbnN0YW50VmFsdWUpIHsKICAgICAgc2Iud3JpdGUoKGRhdGEgYXMgQ29uc3RhbnRWYWx1ZSkudG9TdHJ1Y3R1cmVkVGV4dCgpKTsKICAgIH0gZWxzZSB7CiAgICAgIHNiLndyaXRlKGRhdGEpOwogICAgfQogICAgc2Iud3JpdGUoJyx2YWx1ZT0kX3ZhbHVlKScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgplbnVtIEpzTm9kZUtpbmQgewogIGNvbW1lbnQsCiAgYXdhaXQsCiAgcmVnRXhwTGl0ZXJhbCwKICBwcm9wZXJ0eSwKICBvYmplY3RJbml0aWFsaXplciwKICBhcnJheUhvbGUsCiAgYXJyYXlJbml0aWFsaXplciwKICBwYXJlbnRoZXNlcywKICBtb2R1bGFyTmFtZSwKICBhc3luY05hbWUsCiAgc3RyaW5nQmFja2VkTmFtZSwKICBzdHJpbmdDb25jYXRlbmF0aW9uLAogIGxpdGVyYWxOdWxsLAogIGxpdGVyYWxOdW1iZXIsCiAgbGl0ZXJhbFN0cmluZywKICBsaXRlcmFsU3RyaW5nRnJvbU5hbWUsCiAgbGl0ZXJhbEJvb2wsCiAgbW9kdWxhckV4cHJlc3Npb24sCiAgZnVuY3Rpb24sCiAgbmFtZWRGdW5jdGlvbiwKICBhY2Nlc3MsCiAgcGFyYW1ldGVyLAogIHZhcmlhYmxlRGVjbGFyYXRpb24sCiAgdGhpc0V4cHJlc3Npb24sCiAgdmFyaWFibGVVc2UsCiAgcG9zdGZpeCwKICBwcmVmaXgsCiAgYmluYXJ5LAogIGNhbGxFeHByZXNzaW9uLAogIG5ld0V4cHJlc3Npb24sCiAgY29uZGl0aW9uYWwsCiAgdmFyaWFibGVJbml0aWFsaXphdGlvbiwKICBhc3NpZ25tZW50LAogIHZhcmlhYmxlRGVjbGFyYXRpb25MaXN0LAogIGxpdGVyYWxFeHByZXNzaW9uLAogIGRhcnRZaWVsZCwKICBsaXRlcmFsU3RhdGVtZW50LAogIGxhYmVsZWRTdGF0ZW1lbnQsCiAgZnVuY3Rpb25EZWNsYXJhdGlvbiwKICBzd2l0Y2hEZWZhdWx0LAogIHN3aXRjaENhc2UsCiAgc3dpdGNoU3RhdGVtZW50LAogIGNhdGNoQ2xhdXNlLAogIHRyeVN0YXRlbWVudCwKICB0aHJvd1N0YXRlbWVudCwKICByZXR1cm5TdGF0ZW1lbnQsCiAgYnJlYWtTdGF0ZW1lbnQsCiAgY29udGludWVTdGF0ZW1lbnQsCiAgZG9TdGF0ZW1lbnQsCiAgd2hpbGVTdGF0ZW1lbnQsCiAgZm9ySW5TdGF0ZW1lbnQsCiAgZm9yU3RhdGVtZW50LAogIGlmU3RhdGVtZW50LAogIGVtcHR5U3RhdGVtZW50LAogIGV4cHJlc3Npb25TdGF0ZW1lbnQsCiAgYmxvY2ssCiAgcHJvZ3JhbSwKfQoKLy8vIFRhZ3MgdXNlZCBmb3IgZGVidWdnaW5nIHNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uIGJvdW5kYXJ5IG1pc21hdGNoZXMuCmNsYXNzIEpzTm9kZVRhZ3MgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2pzLW5vZGUnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgY29tbWVudCA9ICdqcy1jb21tZW50JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGF3YWl0ID0gJ2pzLWF3YWl0JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHJlZ0V4cExpdGVyYWwgPSAnanMtcmVnRXhwTGl0ZXJhbCc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBwcm9wZXJ0eSA9ICdqcy1wcm9wZXJ0eSc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBvYmplY3RJbml0aWFsaXplciA9ICdqcy1vYmplY3RJbml0aWFsaXplcic7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBhcnJheUhvbGUgPSAnanMtYXJyYXlIb2xlJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGFycmF5SW5pdGlhbGl6ZXIgPSAnanMtYXJyYXlJbml0aWFsaXplcic7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBwYXJlbnRoZXNlcyA9ICdqcy1wYXJlbnRoZXNlcyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBtb2R1bGFyTmFtZSA9ICdqcy1tb2R1bGFyTmFtZSc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBhc3luY05hbWUgPSAnanMtYXN5bmNOYW1lJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHN0cmluZ0JhY2tlZE5hbWUgPSAnanMtc3RyaW5nQmFja2VkTmFtZSc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBzdHJpbmdDb25jYXRlbmF0aW9uID0gJ2pzLXN0cmluZ0NvbmNhdGVuYXRpb24nOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgbGl0ZXJhbE51bGwgPSAnanMtbGl0ZXJhbE51bGwnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgbGl0ZXJhbE51bWJlciA9ICdqcy1saXRlcmFsTnVtYmVyJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGxpdGVyYWxTdHJpbmcgPSAnanMtbGl0ZXJhbFN0cmluZyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBsaXRlcmFsU3RyaW5nRnJvbU5hbWUgPSAnanMtbGl0ZXJhbFN0cmluZ0Zyb21OYW1lJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGxpdGVyYWxCb29sID0gJ2pzLWxpdGVyYWxCb29sJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIG1vZHVsYXJFeHByZXNzaW9uID0gJ2pzLW1vZHVsYXJFeHByZXNzaW9uJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGZ1bmN0aW9uID0gJ2pzLWZ1bmN0aW9uJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIG5hbWVkRnVuY3Rpb24gPSAnanMtbmFtZWRGdW5jdGlvbic7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBhY2Nlc3MgPSAnanMtYWNjZXNzJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHBhcmFtZXRlciA9ICdqcy1wYXJhbWV0ZXInOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdmFyaWFibGVEZWNsYXJhdGlvbiA9ICdqcy12YXJpYWJsZURlY2xhcmF0aW9uJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRoaXNFeHByZXNzaW9uID0gJ2pzLXRoaXNFeHByZXNzaW9uJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHZhcmlhYmxlVXNlID0gJ2pzLXZhcmlhYmxlVXNlJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHBvc3RmaXggPSAnanMtcG9zdGZpeCc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBwcmVmaXggPSAnanMtcHJlZml4JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGJpbmFyeSA9ICdqcy1iaW5hcnknOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgY2FsbEV4cHJlc3Npb24gPSAnanMtY2FsbEV4cHJlc3Npb24nOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgbmV3RXhwcmVzc2lvbiA9ICdqcy1uZXdFeHByZXNzaW9uJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGNvbmRpdGlvbmFsID0gJ2pzLWNvbmRpdGlvbmFsJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHZhcmlhYmxlSW5pdGlhbGl6YXRpb24gPSAnanMtdmFyaWFibGVJbml0aWFsaXphdGlvbic7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBhc3NpZ25tZW50ID0gJ2pzLWFzc2lnbm1lbnQnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdmFyaWFibGVEZWNsYXJhdGlvbkxpc3QgPSAnanMtdmFyaWFibGVEZWNsYXJhdGlvbkxpc3QnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgbGl0ZXJhbEV4cHJlc3Npb24gPSAnanMtbGl0ZXJhbEV4cHJlc3Npb24nOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgZGFydFlpZWxkID0gJ2pzLWRhcnRZaWVsZCc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBsaXRlcmFsU3RhdGVtZW50ID0gJ2pzLWxpdGVyYWxTdGF0ZW1lbnQnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgbGFiZWxlZFN0YXRlbWVudCA9ICdqcy1sYWJlbGVkU3RhdGVtZW50JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGZ1bmN0aW9uRGVjbGFyYXRpb24gPSAnanMtZnVuY3Rpb25EZWNsYXJhdGlvbic7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBzd2l0Y2hEZWZhdWx0ID0gJ2pzLXN3aXRjaERlZmF1bHQnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgc3dpdGNoQ2FzZSA9ICdqcy1zd2l0Y2hDYXNlJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHN3aXRjaFN0YXRlbWVudCA9ICdqcy1zd2l0Y2hTdGF0ZW1lbnQnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgY2F0Y2hDbGF1c2UgPSAnanMtY2F0Y2hDbGF1c2UnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdHJ5U3RhdGVtZW50ID0gJ2pzLXRyeVN0YXRlbWVudCc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0aHJvd1N0YXRlbWVudCA9ICdqcy10aHJvd1N0YXRlbWVudCc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyByZXR1cm5TdGF0ZW1lbnQgPSAnanMtcmV0dXJuU3RhdGVtZW50JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGJyZWFrU3RhdGVtZW50ID0gJ2pzLWJyZWFrU3RhdGVtZW50JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGNvbnRpbnVlU3RhdGVtZW50ID0gJ2pzLWNvbnRpbnVlU3RhdGVtZW50JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGRvU3RhdGVtZW50ID0gJ2pzLWRvU3RhdGVtZW50JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHdoaWxlU3RhdGVtZW50ID0gJ2pzLXdoaWxlU3RhdGVtZW50JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGZvckluU3RhdGVtZW50ID0gJ2pzLWZvckluU3RhdGVtZW50JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGZvclN0YXRlbWVudCA9ICdqcy1mb3JTdGF0ZW1lbnQnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgaWZTdGF0ZW1lbnQgPSAnanMtaWZTdGF0ZW1lbnQnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgZW1wdHlTdGF0ZW1lbnQgPSAnanMtZW1wdHlTdGF0ZW1lbnQnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgZXhwcmVzc2lvblN0YXRlbWVudCA9ICdqcy1leHByZXNzaW9uU3RhdGVtZW50JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGJsb2NrID0gJ2pzLWJsb2NrJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHByb2dyYW0gPSAnanMtcHJvZ3JhbSc7Cn0KCi8vLyBWaXNpdG9yIHRoYXQgc2VyaWFsaXplcyBhIFtqcy5Ob2RlXSBpbnRvIGEgW0RhdGFTaW5rXS4KY2xhc3MgSnNOb2RlU2VyaWFsaXplciBpbXBsZW1lbnRzIGpzLk5vZGVWaXNpdG9yPHZvaWQ+IHsKICBmaW5hbCBEYXRhU2luayBzaW5rOwoKICBKc05vZGVTZXJpYWxpemVyLl8odGhpcy5zaW5rKTsKCiAgc3RhdGljIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmssIGpzLk5vZGUgbm9kZSkgewogICAgc2luay5iZWdpbihKc05vZGVUYWdzLnRhZyk7CiAgICBKc05vZGVTZXJpYWxpemVyIHNlcmlhbGl6ZXIgPSBuZXcgSnNOb2RlU2VyaWFsaXplci5fKHNpbmspOwogICAgc2VyaWFsaXplci52aXNpdChub2RlKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MudGFnKTsKICB9CgogIHZvaWQgdmlzaXQoanMuTm9kZSBub2RlLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKGFsbG93TnVsbCkgewogICAgICBzaW5rLndyaXRlQm9vbChub2RlICE9IG51bGwpOwogICAgICBpZiAobm9kZSAhPSBudWxsKSB7CiAgICAgICAgbm9kZS5hY2NlcHQodGhpcyk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIG5vZGUuYWNjZXB0KHRoaXMpOwogICAgfQogIH0KCiAgdm9pZCB2aXNpdExpc3QoSXRlcmFibGU8anMuTm9kZT4gbm9kZXMpIHsKICAgIHNpbmsud3JpdGVMaXN0KG5vZGVzLCB2aXNpdCk7CiAgfQoKICB2b2lkIF93cml0ZUluZm8oanMuTm9kZSBub2RlKSB7CiAgICBzaW5rLndyaXRlQ2FjaGVkPFNvdXJjZUluZm9ybWF0aW9uPihub2RlLnNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgIChTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgICBTb3VyY2VJbmZvcm1hdGlvbi53cml0ZVRvRGF0YVNpbmsoc2luaywgc291cmNlSW5mb3JtYXRpb24pOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50ZXJwb2xhdGVkRGVjbGFyYXRpb24oanMuSW50ZXJwb2xhdGVkRGVjbGFyYXRpb24gbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ0pzTm9kZVNlcmlhbGl6ZXIudmlzaXRJbnRlcnBvbGF0ZWREZWNsYXJhdGlvbicpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludGVycG9sYXRlZFN0YXRlbWVudChqcy5JbnRlcnBvbGF0ZWRTdGF0ZW1lbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ0pzTm9kZVNlcmlhbGl6ZXIudmlzaXRJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRlcnBvbGF0ZWRTZWxlY3Rvcihqcy5JbnRlcnBvbGF0ZWRTZWxlY3RvciBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignSnNOb2RlU2VyaWFsaXplci52aXNpdEludGVycG9sYXRlZERlY2xhcmF0aW9uJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50ZXJwb2xhdGVkUGFyYW1ldGVyKGpzLkludGVycG9sYXRlZFBhcmFtZXRlciBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignSnNOb2RlU2VyaWFsaXplci52aXNpdEludGVycG9sYXRlZFBhcmFtZXRlcicpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludGVycG9sYXRlZExpdGVyYWwoanMuSW50ZXJwb2xhdGVkTGl0ZXJhbCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignSnNOb2RlU2VyaWFsaXplci52aXNpdEludGVycG9sYXRlZExpdGVyYWwnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRlcnBvbGF0ZWRFeHByZXNzaW9uKGpzLkludGVycG9sYXRlZEV4cHJlc3Npb24gbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ0pzTm9kZVNlcmlhbGl6ZXIudmlzaXRJbnRlcnBvbGF0ZWRFeHByZXNzaW9uJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29tbWVudChqcy5Db21tZW50IG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQuY29tbWVudCk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MuY29tbWVudCk7CiAgICBzaW5rLndyaXRlU3RyaW5nKG5vZGUuY29tbWVudCk7CiAgICBzaW5rLmVuZChKc05vZGVUYWdzLmNvbW1lbnQpOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBd2FpdChqcy5Bd2FpdCBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLmF3YWl0KTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5hd2FpdCk7CiAgICB2aXNpdChub2RlLmV4cHJlc3Npb24pOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5hd2FpdCk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFJlZ0V4cExpdGVyYWwoanMuUmVnRXhwTGl0ZXJhbCBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLnJlZ0V4cExpdGVyYWwpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLnJlZ0V4cExpdGVyYWwpOwogICAgc2luay53cml0ZVN0cmluZyhub2RlLnBhdHRlcm4pOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5yZWdFeHBMaXRlcmFsKTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UHJvcGVydHkoanMuUHJvcGVydHkgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5wcm9wZXJ0eSk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MucHJvcGVydHkpOwogICAgdmlzaXQobm9kZS5uYW1lKTsKICAgIHZpc2l0KG5vZGUudmFsdWUpOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5wcm9wZXJ0eSk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE9iamVjdEluaXRpYWxpemVyKGpzLk9iamVjdEluaXRpYWxpemVyIG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQub2JqZWN0SW5pdGlhbGl6ZXIpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLm9iamVjdEluaXRpYWxpemVyKTsKICAgIHZpc2l0TGlzdChub2RlLnByb3BlcnRpZXMpOwogICAgc2luay53cml0ZUJvb2wobm9kZS5pc09uZUxpbmVyKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3Mub2JqZWN0SW5pdGlhbGl6ZXIpOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBcnJheUhvbGUoanMuQXJyYXlIb2xlIG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQuYXJyYXlIb2xlKTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5hcnJheUhvbGUpOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5hcnJheUhvbGUpOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBcnJheUluaXRpYWxpemVyKGpzLkFycmF5SW5pdGlhbGl6ZXIgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5hcnJheUluaXRpYWxpemVyKTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5hcnJheUluaXRpYWxpemVyKTsKICAgIHZpc2l0TGlzdChub2RlLmVsZW1lbnRzKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MuYXJyYXlJbml0aWFsaXplcik7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFBhcmVudGhlc2VzKGpzLlBhcmVudGhlc2VzIG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQucGFyZW50aGVzZXMpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLnBhcmVudGhlc2VzKTsKICAgIHZpc2l0KG5vZGUuZW5jbG9zZWQpOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5wYXJlbnRoZXNlcyk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE5hbWUoanMuTmFtZSBub2RlKSB7CiAgICBpZiAobm9kZSBpcyBNb2R1bGFyTmFtZSkgewogICAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLm1vZHVsYXJOYW1lKTsKICAgICAgc2luay5iZWdpbihKc05vZGVUYWdzLm1vZHVsYXJOYW1lKTsKICAgICAgbm9kZS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MubW9kdWxhck5hbWUpOwogICAgICBfd3JpdGVJbmZvKG5vZGUpOwogICAgfSBlbHNlIGlmIChub2RlIGlzIEFzeW5jTmFtZSkgewogICAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLmFzeW5jTmFtZSk7CiAgICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5hc3luY05hbWUpOwogICAgICB2aXNpdChub2RlLnByZWZpeCk7CiAgICAgIHZpc2l0KG5vZGUuYmFzZSk7CiAgICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MuYXN5bmNOYW1lKTsKICAgICAgX3dyaXRlSW5mbyhub2RlKTsKICAgIH0gZWxzZSBpZiAobm9kZSBpcyBTdHJpbmdCYWNrZWROYW1lKSB7CiAgICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQuc3RyaW5nQmFja2VkTmFtZSk7CiAgICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5zdHJpbmdCYWNrZWROYW1lKTsKICAgICAgc2luay53cml0ZVN0cmluZyhub2RlLm5hbWUpOwogICAgICBzaW5rLmVuZChKc05vZGVUYWdzLnN0cmluZ0JhY2tlZE5hbWUpOwogICAgICBfd3JpdGVJbmZvKG5vZGUpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAnVW5leHBlY3RlZCBkZWZlcnJlZCBleHByZXNzaW9uOiAke25vZGUucnVudGltZVR5cGV9LicpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0cmluZ0NvbmNhdGVuYXRpb24oanMuU3RyaW5nQ29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLnN0cmluZ0NvbmNhdGVuYXRpb24pOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLnN0cmluZ0NvbmNhdGVuYXRpb24pOwogICAgdmlzaXRMaXN0KG5vZGUucGFydHMpOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5zdHJpbmdDb25jYXRlbmF0aW9uKTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGl0ZXJhbE51bGwoanMuTGl0ZXJhbE51bGwgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5saXRlcmFsTnVsbCk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MubGl0ZXJhbE51bGwpOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5saXRlcmFsTnVsbCk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpdGVyYWxOdW1iZXIoanMuTGl0ZXJhbE51bWJlciBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLmxpdGVyYWxOdW1iZXIpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLmxpdGVyYWxOdW1iZXIpOwogICAgc2luay53cml0ZVN0cmluZyhub2RlLnZhbHVlKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MubGl0ZXJhbE51bWJlcik7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpdGVyYWxTdHJpbmcoanMuTGl0ZXJhbFN0cmluZyBub2RlKSB7CiAgICBpZiAobm9kZSBpcyBqcy5MaXRlcmFsU3RyaW5nRnJvbU5hbWUpIHsKICAgICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5saXRlcmFsU3RyaW5nRnJvbU5hbWUpOwogICAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MubGl0ZXJhbFN0cmluZ0Zyb21OYW1lKTsKICAgICAgdmlzaXQobm9kZS5uYW1lKTsKICAgICAgc2luay5lbmQoSnNOb2RlVGFncy5saXRlcmFsU3RyaW5nRnJvbU5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5saXRlcmFsU3RyaW5nKTsKICAgICAgc2luay5iZWdpbihKc05vZGVUYWdzLmxpdGVyYWxTdHJpbmcpOwogICAgICBzaW5rLndyaXRlU3RyaW5nKG5vZGUudmFsdWUpOwogICAgICBzaW5rLmVuZChKc05vZGVUYWdzLmxpdGVyYWxTdHJpbmcpOwogICAgfQogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXRlcmFsQm9vbChqcy5MaXRlcmFsQm9vbCBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLmxpdGVyYWxCb29sKTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5saXRlcmFsQm9vbCk7CiAgICBzaW5rLndyaXRlQm9vbChub2RlLnZhbHVlKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MubGl0ZXJhbEJvb2wpOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREZWZlcnJlZFN0cmluZyhqcy5EZWZlcnJlZFN0cmluZyBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignSnNOb2RlU2VyaWFsaXplci52aXNpdERlZmVycmVkU3RyaW5nJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RGVmZXJyZWROdW1iZXIoanMuRGVmZXJyZWROdW1iZXIgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ0pzTm9kZVNlcmlhbGl6ZXIudmlzaXREZWZlcnJlZE51bWJlcicpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERlZmVycmVkRXhwcmVzc2lvbihqcy5EZWZlcnJlZEV4cHJlc3Npb24gbm9kZSkgewogICAgaWYgKG5vZGUgaXMgTW9kdWxhckV4cHJlc3Npb24pIHsKICAgICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5tb2R1bGFyRXhwcmVzc2lvbik7CiAgICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5tb2R1bGFyRXhwcmVzc2lvbik7CiAgICAgIG5vZGUud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgICBzaW5rLmVuZChKc05vZGVUYWdzLm1vZHVsYXJFeHByZXNzaW9uKTsKICAgICAgX3dyaXRlSW5mbyhub2RlKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgJ1VuZXhwZWN0ZWQgZGVmZXJyZWQgZXhwcmVzc2lvbjogJHtub2RlLnJ1bnRpbWVUeXBlfS4nKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGdW4oanMuRnVuIG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQuZnVuY3Rpb24pOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLmZ1bmN0aW9uKTsKICAgIHZpc2l0TGlzdChub2RlLnBhcmFtcyk7CiAgICB2aXNpdChub2RlLmJvZHkpOwogICAgc2luay53cml0ZUVudW0obm9kZS5hc3luY01vZGlmaWVyKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MuZnVuY3Rpb24pOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXROYW1lZEZ1bmN0aW9uKGpzLk5hbWVkRnVuY3Rpb24gbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5uYW1lZEZ1bmN0aW9uKTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5uYW1lZEZ1bmN0aW9uKTsKICAgIHZpc2l0KG5vZGUubmFtZSk7CiAgICB2aXNpdChub2RlLmZ1bmN0aW9uKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MubmFtZWRGdW5jdGlvbik7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEFjY2Vzcyhqcy5Qcm9wZXJ0eUFjY2VzcyBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLmFjY2Vzcyk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MuYWNjZXNzKTsKICAgIHZpc2l0KG5vZGUucmVjZWl2ZXIpOwogICAgdmlzaXQobm9kZS5zZWxlY3Rvcik7CiAgICBzaW5rLmVuZChKc05vZGVUYWdzLmFjY2Vzcyk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFBhcmFtZXRlcihqcy5QYXJhbWV0ZXIgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5wYXJhbWV0ZXIpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLnBhcmFtZXRlcik7CiAgICBzaW5rLndyaXRlU3RyaW5nKG5vZGUubmFtZSk7CiAgICBzaW5rLmVuZChKc05vZGVUYWdzLnBhcmFtZXRlcik7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24oanMuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLnZhcmlhYmxlRGVjbGFyYXRpb24pOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLnZhcmlhYmxlRGVjbGFyYXRpb24pOwogICAgc2luay53cml0ZVN0cmluZyhub2RlLm5hbWUpOwogICAgc2luay53cml0ZUJvb2wobm9kZS5hbGxvd1JlbmFtZSk7CiAgICBzaW5rLmVuZChKc05vZGVUYWdzLnZhcmlhYmxlRGVjbGFyYXRpb24pOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUaGlzKGpzLlRoaXMgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC50aGlzRXhwcmVzc2lvbik7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MudGhpc0V4cHJlc3Npb24pOwogICAgc2luay5lbmQoSnNOb2RlVGFncy50aGlzRXhwcmVzc2lvbik7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFZhcmlhYmxlVXNlKGpzLlZhcmlhYmxlVXNlIG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQudmFyaWFibGVVc2UpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLnZhcmlhYmxlVXNlKTsKICAgIHNpbmsud3JpdGVTdHJpbmcobm9kZS5uYW1lKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MudmFyaWFibGVVc2UpOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQb3N0Zml4KGpzLlBvc3RmaXggbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5wb3N0Zml4KTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5wb3N0Zml4KTsKICAgIHNpbmsud3JpdGVTdHJpbmcobm9kZS5vcCk7CiAgICB2aXNpdChub2RlLmFyZ3VtZW50KTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MucG9zdGZpeCk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFByZWZpeChqcy5QcmVmaXggbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5wcmVmaXgpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLnByZWZpeCk7CiAgICBzaW5rLndyaXRlU3RyaW5nKG5vZGUub3ApOwogICAgdmlzaXQobm9kZS5hcmd1bWVudCk7CiAgICBzaW5rLmVuZChKc05vZGVUYWdzLnByZWZpeCk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJpbmFyeShqcy5CaW5hcnkgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5iaW5hcnkpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLmJpbmFyeSk7CiAgICBzaW5rLndyaXRlU3RyaW5nKG5vZGUub3ApOwogICAgdmlzaXQobm9kZS5sZWZ0KTsKICAgIHZpc2l0KG5vZGUucmlnaHQpOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5iaW5hcnkpOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDYWxsKGpzLkNhbGwgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5jYWxsRXhwcmVzc2lvbik7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MuY2FsbEV4cHJlc3Npb24pOwogICAgdmlzaXQobm9kZS50YXJnZXQpOwogICAgdmlzaXRMaXN0KG5vZGUuYXJndW1lbnRzKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MuY2FsbEV4cHJlc3Npb24pOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXROZXcoanMuTmV3IG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQubmV3RXhwcmVzc2lvbik7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MubmV3RXhwcmVzc2lvbik7CiAgICB2aXNpdChub2RlLnRhcmdldCk7CiAgICB2aXNpdExpc3Qobm9kZS5hcmd1bWVudHMpOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5uZXdFeHByZXNzaW9uKTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29uZGl0aW9uYWwoanMuQ29uZGl0aW9uYWwgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5jb25kaXRpb25hbCk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MuY29uZGl0aW9uYWwpOwogICAgdmlzaXQobm9kZS5jb25kaXRpb24pOwogICAgdmlzaXQobm9kZS50aGVuKTsKICAgIHZpc2l0KG5vZGUub3RoZXJ3aXNlKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MuY29uZGl0aW9uYWwpOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRWYXJpYWJsZUluaXRpYWxpemF0aW9uKGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24gbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC52YXJpYWJsZUluaXRpYWxpemF0aW9uKTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy52YXJpYWJsZUluaXRpYWxpemF0aW9uKTsKICAgIHZpc2l0KG5vZGUuZGVjbGFyYXRpb24pOwogICAgdmlzaXQobm9kZS52YWx1ZSwgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MudmFyaWFibGVJbml0aWFsaXphdGlvbik7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEFzc2lnbm1lbnQoanMuQXNzaWdubWVudCBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLmFzc2lnbm1lbnQpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLmFzc2lnbm1lbnQpOwogICAgdmlzaXQobm9kZS5sZWZ0SGFuZFNpZGUpOwogICAgc2luay53cml0ZVN0cmluZ09yTnVsbChub2RlLm9wKTsKICAgIHZpc2l0KG5vZGUudmFsdWUpOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5hc3NpZ25tZW50KTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoanMuVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC52YXJpYWJsZURlY2xhcmF0aW9uTGlzdCk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MudmFyaWFibGVEZWNsYXJhdGlvbkxpc3QpOwogICAgdmlzaXRMaXN0KG5vZGUuZGVjbGFyYXRpb25zKTsKICAgIHNpbmsud3JpdGVCb29sKG5vZGUuaW5kZW50U3BsaXRzKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MudmFyaWFibGVEZWNsYXJhdGlvbkxpc3QpOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXRlcmFsRXhwcmVzc2lvbihqcy5MaXRlcmFsRXhwcmVzc2lvbiBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLmxpdGVyYWxFeHByZXNzaW9uKTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5saXRlcmFsRXhwcmVzc2lvbik7CiAgICBzaW5rLndyaXRlU3RyaW5nKG5vZGUudGVtcGxhdGUpOwogICAgdmlzaXRMaXN0KG5vZGUuaW5wdXRzKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MubGl0ZXJhbEV4cHJlc3Npb24pOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREYXJ0WWllbGQoanMuRGFydFlpZWxkIG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQuZGFydFlpZWxkKTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5kYXJ0WWllbGQpOwogICAgdmlzaXQobm9kZS5leHByZXNzaW9uKTsKICAgIHNpbmsud3JpdGVCb29sKG5vZGUuaGFzU3Rhcik7CiAgICBzaW5rLmVuZChKc05vZGVUYWdzLmRhcnRZaWVsZCk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpdGVyYWxTdGF0ZW1lbnQoanMuTGl0ZXJhbFN0YXRlbWVudCBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLmxpdGVyYWxTdGF0ZW1lbnQpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLmxpdGVyYWxTdGF0ZW1lbnQpOwogICAgc2luay53cml0ZVN0cmluZyhub2RlLmNvZGUpOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5saXRlcmFsU3RhdGVtZW50KTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGFiZWxlZFN0YXRlbWVudChqcy5MYWJlbGVkU3RhdGVtZW50IG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQubGFiZWxlZFN0YXRlbWVudCk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MubGFiZWxlZFN0YXRlbWVudCk7CiAgICBzaW5rLndyaXRlU3RyaW5nKG5vZGUubGFiZWwpOwogICAgdmlzaXQobm9kZS5ib2R5KTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MubGFiZWxlZFN0YXRlbWVudCk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24oanMuRnVuY3Rpb25EZWNsYXJhdGlvbiBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLmZ1bmN0aW9uRGVjbGFyYXRpb24pOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLmZ1bmN0aW9uRGVjbGFyYXRpb24pOwogICAgdmlzaXQobm9kZS5uYW1lKTsKICAgIHZpc2l0KG5vZGUuZnVuY3Rpb24pOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5mdW5jdGlvbkRlY2xhcmF0aW9uKTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RGVmYXVsdChqcy5EZWZhdWx0IG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQuc3dpdGNoRGVmYXVsdCk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3Muc3dpdGNoRGVmYXVsdCk7CiAgICB2aXNpdChub2RlLmJvZHkpOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5zd2l0Y2hEZWZhdWx0KTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q2FzZShqcy5DYXNlIG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQuc3dpdGNoQ2FzZSk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3Muc3dpdGNoQ2FzZSk7CiAgICB2aXNpdChub2RlLmV4cHJlc3Npb24pOwogICAgdmlzaXQobm9kZS5ib2R5KTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3Muc3dpdGNoQ2FzZSk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN3aXRjaChqcy5Td2l0Y2ggbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5zd2l0Y2hTdGF0ZW1lbnQpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLnN3aXRjaFN0YXRlbWVudCk7CiAgICB2aXNpdChub2RlLmtleSk7CiAgICB2aXNpdExpc3Qobm9kZS5jYXNlcyk7CiAgICBzaW5rLmVuZChKc05vZGVUYWdzLnN3aXRjaFN0YXRlbWVudCk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENhdGNoKGpzLkNhdGNoIG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQuY2F0Y2hDbGF1c2UpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLmNhdGNoQ2xhdXNlKTsKICAgIHZpc2l0KG5vZGUuZGVjbGFyYXRpb24pOwogICAgdmlzaXQobm9kZS5ib2R5KTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MuY2F0Y2hDbGF1c2UpOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUcnkoanMuVHJ5IG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQudHJ5U3RhdGVtZW50KTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy50cnlTdGF0ZW1lbnQpOwogICAgdmlzaXQobm9kZS5ib2R5KTsKICAgIHZpc2l0KG5vZGUuY2F0Y2hQYXJ0LCBhbGxvd051bGw6IHRydWUpOwogICAgdmlzaXQobm9kZS5maW5hbGx5UGFydCwgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MudHJ5U3RhdGVtZW50KTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VGhyb3coanMuVGhyb3cgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC50aHJvd1N0YXRlbWVudCk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MudGhyb3dTdGF0ZW1lbnQpOwogICAgdmlzaXQobm9kZS5leHByZXNzaW9uKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MudGhyb3dTdGF0ZW1lbnQpOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRSZXR1cm4oanMuUmV0dXJuIG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQucmV0dXJuU3RhdGVtZW50KTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5yZXR1cm5TdGF0ZW1lbnQpOwogICAgdmlzaXQobm9kZS52YWx1ZSwgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MucmV0dXJuU3RhdGVtZW50KTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QnJlYWsoanMuQnJlYWsgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5icmVha1N0YXRlbWVudCk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MuYnJlYWtTdGF0ZW1lbnQpOwogICAgc2luay53cml0ZVN0cmluZ09yTnVsbChub2RlLnRhcmdldExhYmVsKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MuYnJlYWtTdGF0ZW1lbnQpOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb250aW51ZShqcy5Db250aW51ZSBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLmNvbnRpbnVlU3RhdGVtZW50KTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5jb250aW51ZVN0YXRlbWVudCk7CiAgICBzaW5rLndyaXRlU3RyaW5nT3JOdWxsKG5vZGUudGFyZ2V0TGFiZWwpOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5jb250aW51ZVN0YXRlbWVudCk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERvKGpzLkRvIG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQuZG9TdGF0ZW1lbnQpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLmRvU3RhdGVtZW50KTsKICAgIHZpc2l0KG5vZGUuYm9keSk7CiAgICB2aXNpdChub2RlLmNvbmRpdGlvbik7CiAgICBzaW5rLmVuZChKc05vZGVUYWdzLmRvU3RhdGVtZW50KTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0V2hpbGUoanMuV2hpbGUgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC53aGlsZVN0YXRlbWVudCk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3Mud2hpbGVTdGF0ZW1lbnQpOwogICAgdmlzaXQobm9kZS5jb25kaXRpb24pOwogICAgdmlzaXQobm9kZS5ib2R5KTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3Mud2hpbGVTdGF0ZW1lbnQpOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGb3JJbihqcy5Gb3JJbiBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLmZvckluU3RhdGVtZW50KTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5mb3JJblN0YXRlbWVudCk7CiAgICB2aXNpdChub2RlLmxlZnRIYW5kU2lkZSk7CiAgICB2aXNpdChub2RlLm9iamVjdCk7CiAgICB2aXNpdChub2RlLmJvZHkpOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5mb3JJblN0YXRlbWVudCk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZvcihqcy5Gb3Igbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5mb3JTdGF0ZW1lbnQpOwogICAgc2luay5iZWdpbihKc05vZGVUYWdzLmZvclN0YXRlbWVudCk7CiAgICB2aXNpdChub2RlLmluaXQsIGFsbG93TnVsbDogdHJ1ZSk7CiAgICB2aXNpdChub2RlLmNvbmRpdGlvbiwgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHZpc2l0KG5vZGUudXBkYXRlLCBhbGxvd051bGw6IHRydWUpOwogICAgdmlzaXQobm9kZS5ib2R5KTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MuZm9yU3RhdGVtZW50KTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SWYoanMuSWYgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5pZlN0YXRlbWVudCk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MuaWZTdGF0ZW1lbnQpOwogICAgdmlzaXQobm9kZS5jb25kaXRpb24pOwogICAgdmlzaXQobm9kZS50aGVuKTsKICAgIHZpc2l0KG5vZGUub3RoZXJ3aXNlKTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MuaWZTdGF0ZW1lbnQpOwogICAgX3dyaXRlSW5mbyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRFbXB0eVN0YXRlbWVudChqcy5FbXB0eVN0YXRlbWVudCBub2RlKSB7CiAgICBzaW5rLndyaXRlRW51bShKc05vZGVLaW5kLmVtcHR5U3RhdGVtZW50KTsKICAgIHNpbmsuYmVnaW4oSnNOb2RlVGFncy5lbXB0eVN0YXRlbWVudCk7CiAgICBzaW5rLmVuZChKc05vZGVUYWdzLmVtcHR5U3RhdGVtZW50KTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChqcy5FeHByZXNzaW9uU3RhdGVtZW50IG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQuZXhwcmVzc2lvblN0YXRlbWVudCk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MuZXhwcmVzc2lvblN0YXRlbWVudCk7CiAgICB2aXNpdChub2RlLmV4cHJlc3Npb24pOwogICAgc2luay5lbmQoSnNOb2RlVGFncy5leHByZXNzaW9uU3RhdGVtZW50KTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QmxvY2soanMuQmxvY2sgbm9kZSkgewogICAgc2luay53cml0ZUVudW0oSnNOb2RlS2luZC5ibG9jayk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MuYmxvY2spOwogICAgdmlzaXRMaXN0KG5vZGUuc3RhdGVtZW50cyk7CiAgICBzaW5rLmVuZChKc05vZGVUYWdzLmJsb2NrKTsKICAgIF93cml0ZUluZm8obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UHJvZ3JhbShqcy5Qcm9ncmFtIG5vZGUpIHsKICAgIHNpbmsud3JpdGVFbnVtKEpzTm9kZUtpbmQucHJvZ3JhbSk7CiAgICBzaW5rLmJlZ2luKEpzTm9kZVRhZ3MucHJvZ3JhbSk7CiAgICB2aXNpdExpc3Qobm9kZS5ib2R5KTsKICAgIHNpbmsuZW5kKEpzTm9kZVRhZ3MucHJvZ3JhbSk7CiAgICBfd3JpdGVJbmZvKG5vZGUpOwogIH0KfQoKLy8vIEhlbHBlciBjbGFzcyB0aGF0IGRlc2VyaWFsaXplcyBhIFtqcy5Ob2RlXSBmcm9tIFtEYXRhU291cmNlXS4KLy8vCi8vLyBEZXNlcmlhbGl6ZWQgW01vZHVsYXJOYW1lXXMgYW5kIFtNb2R1bGFyRXhwcmVzc2lvbl1zIGFyZSBjb2xsZWN0ZWQgaW4gdGhlCi8vLyBbbW9kdWxhck5hbWVzXSBhbmQgW21vZHVsYXJFeHByZXNzaW9uc10gbGlzdHMuCmNsYXNzIEpzTm9kZURlc2VyaWFsaXplciB7CiAgZmluYWwgRGF0YVNvdXJjZSBzb3VyY2U7CiAgZmluYWwgTGlzdDxNb2R1bGFyTmFtZT4gbW9kdWxhck5hbWVzOwogIGZpbmFsIExpc3Q8TW9kdWxhckV4cHJlc3Npb24+IG1vZHVsYXJFeHByZXNzaW9uczsKCiAgSnNOb2RlRGVzZXJpYWxpemVyLl8odGhpcy5zb3VyY2UsIHRoaXMubW9kdWxhck5hbWVzLCB0aGlzLm1vZHVsYXJFeHByZXNzaW9ucyk7CgogIHN0YXRpYyBqcy5Ob2RlIHJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsCiAgICAgIExpc3Q8TW9kdWxhck5hbWU+IG1vZHVsYXJOYW1lcywKICAgICAgTGlzdDxNb2R1bGFyRXhwcmVzc2lvbj4gbW9kdWxhckV4cHJlc3Npb25zKSB7CiAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy50YWcpOwogICAgSnNOb2RlRGVzZXJpYWxpemVyIGRlc2VyaWFsaXplciA9CiAgICAgICAgbmV3IEpzTm9kZURlc2VyaWFsaXplci5fKHNvdXJjZSwgbW9kdWxhck5hbWVzLCBtb2R1bGFyRXhwcmVzc2lvbnMpOwogICAganMuTm9kZSBub2RlID0gZGVzZXJpYWxpemVyLnJlYWQoKTsKICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy50YWcpOwogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBUIHJlYWQ8VCBleHRlbmRzIGpzLk5vZGU+KHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBpZiAoYWxsb3dOdWxsKSB7CiAgICAgIGJvb2wgaGFzVmFsdWUgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgICAgaWYgKCFoYXNWYWx1ZSkgcmV0dXJuIG51bGw7CiAgICB9CiAgICBKc05vZGVLaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oSnNOb2RlS2luZC52YWx1ZXMpOwogICAganMuTm9kZSBub2RlOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5jb21tZW50OgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLmNvbW1lbnQpOwogICAgICAgIG5vZGUgPSBuZXcganMuQ29tbWVudChzb3VyY2UucmVhZFN0cmluZygpKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MuY29tbWVudCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5hd2FpdDoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5hd2FpdCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5Bd2FpdChyZWFkKCkpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5hd2FpdCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5yZWdFeHBMaXRlcmFsOgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLnJlZ0V4cExpdGVyYWwpOwogICAgICAgIG5vZGUgPSBuZXcganMuUmVnRXhwTGl0ZXJhbChzb3VyY2UucmVhZFN0cmluZygpKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MucmVnRXhwTGl0ZXJhbCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5wcm9wZXJ0eToKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5wcm9wZXJ0eSk7CiAgICAgICAganMuRXhwcmVzc2lvbiBuYW1lID0gcmVhZCgpOwogICAgICAgIGpzLkV4cHJlc3Npb24gdmFsdWUgPSByZWFkKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5Qcm9wZXJ0eShuYW1lLCB2YWx1ZSk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLnByb3BlcnR5KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLm9iamVjdEluaXRpYWxpemVyOgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLm9iamVjdEluaXRpYWxpemVyKTsKICAgICAgICBMaXN0PGpzLlByb3BlcnR5PiBwcm9wZXJ0aWVzID0gcmVhZExpc3QoKTsKICAgICAgICBib29sIGlzT25lTGluZXIgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgICAgICBub2RlID0gbmV3IGpzLk9iamVjdEluaXRpYWxpemVyKHByb3BlcnRpZXMsIGlzT25lTGluZXI6IGlzT25lTGluZXIpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5vYmplY3RJbml0aWFsaXplcik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5hcnJheUhvbGU6CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MuYXJyYXlIb2xlKTsKICAgICAgICBub2RlID0gbmV3IGpzLkFycmF5SG9sZSgpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5hcnJheUhvbGUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQuYXJyYXlJbml0aWFsaXplcjoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5hcnJheUluaXRpYWxpemVyKTsKICAgICAgICBMaXN0PGpzLkV4cHJlc3Npb24+IGVsZW1lbnRzID0gcmVhZExpc3QoKTsKICAgICAgICBub2RlID0gbmV3IGpzLkFycmF5SW5pdGlhbGl6ZXIoZWxlbWVudHMpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5hcnJheUluaXRpYWxpemVyKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLnBhcmVudGhlc2VzOgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLnBhcmVudGhlc2VzKTsKICAgICAgICBub2RlID0gbmV3IGpzLlBhcmVudGhlc2VzKHJlYWQoKSk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLnBhcmVudGhlc2VzKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLm1vZHVsYXJOYW1lOgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLm1vZHVsYXJOYW1lKTsKICAgICAgICBNb2R1bGFyTmFtZSBtb2R1bGFyTmFtZSA9IE1vZHVsYXJOYW1lLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICAgIG1vZHVsYXJOYW1lcy5hZGQobW9kdWxhck5hbWUpOwogICAgICAgIG5vZGUgPSBtb2R1bGFyTmFtZTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MubW9kdWxhck5hbWUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQuYXN5bmNOYW1lOgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLmFzeW5jTmFtZSk7CiAgICAgICAganMuTmFtZSBwcmVmaXggPSByZWFkKCk7CiAgICAgICAganMuTmFtZSBiYXNlID0gcmVhZCgpOwogICAgICAgIG5vZGUgPSBuZXcgQXN5bmNOYW1lKHByZWZpeCwgYmFzZSk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLmFzeW5jTmFtZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5zdHJpbmdCYWNrZWROYW1lOgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLnN0cmluZ0JhY2tlZE5hbWUpOwogICAgICAgIG5vZGUgPSBuZXcgU3RyaW5nQmFja2VkTmFtZShzb3VyY2UucmVhZFN0cmluZygpKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3Muc3RyaW5nQmFja2VkTmFtZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5zdHJpbmdDb25jYXRlbmF0aW9uOgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLnN0cmluZ0NvbmNhdGVuYXRpb24pOwogICAgICAgIExpc3Q8anMuTGl0ZXJhbD4gcGFydHMgPSByZWFkTGlzdCgpOwogICAgICAgIG5vZGUgPSBuZXcganMuU3RyaW5nQ29uY2F0ZW5hdGlvbihwYXJ0cyk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLnN0cmluZ0NvbmNhdGVuYXRpb24pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQubGl0ZXJhbE51bGw6CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MubGl0ZXJhbE51bGwpOwogICAgICAgIG5vZGUgPSBuZXcganMuTGl0ZXJhbE51bGwoKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MubGl0ZXJhbE51bGwpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQubGl0ZXJhbE51bWJlcjoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5saXRlcmFsTnVtYmVyKTsKICAgICAgICBub2RlID0gbmV3IGpzLkxpdGVyYWxOdW1iZXIoc291cmNlLnJlYWRTdHJpbmcoKSk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLmxpdGVyYWxOdW1iZXIpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQubGl0ZXJhbFN0cmluZzoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5saXRlcmFsU3RyaW5nKTsKICAgICAgICBub2RlID0gbmV3IGpzLkxpdGVyYWxTdHJpbmcoc291cmNlLnJlYWRTdHJpbmcoKSk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLmxpdGVyYWxTdHJpbmcpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQubGl0ZXJhbFN0cmluZ0Zyb21OYW1lOgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLmxpdGVyYWxTdHJpbmdGcm9tTmFtZSk7CiAgICAgICAganMuTmFtZSBuYW1lID0gcmVhZCgpOwogICAgICAgIG5vZGUgPSBuZXcganMuTGl0ZXJhbFN0cmluZ0Zyb21OYW1lKG5hbWUpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5saXRlcmFsU3RyaW5nRnJvbU5hbWUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQubGl0ZXJhbEJvb2w6CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MubGl0ZXJhbEJvb2wpOwogICAgICAgIG5vZGUgPSBuZXcganMuTGl0ZXJhbEJvb2woc291cmNlLnJlYWRCb29sKCkpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5saXRlcmFsQm9vbCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5tb2R1bGFyRXhwcmVzc2lvbjoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5tb2R1bGFyRXhwcmVzc2lvbik7CiAgICAgICAgTW9kdWxhckV4cHJlc3Npb24gbW9kdWxhckV4cHJlc3Npb24gPQogICAgICAgICAgICBNb2R1bGFyRXhwcmVzc2lvbi5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgICBtb2R1bGFyRXhwcmVzc2lvbnMuYWRkKG1vZHVsYXJFeHByZXNzaW9uKTsKICAgICAgICBub2RlID0gbW9kdWxhckV4cHJlc3Npb247CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLm1vZHVsYXJFeHByZXNzaW9uKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLmZ1bmN0aW9uOgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLmZ1bmN0aW9uKTsKICAgICAgICBMaXN0PGpzLlBhcmFtZXRlcj4gcGFyYW1zID0gcmVhZExpc3QoKTsKICAgICAgICBqcy5CbG9jayBib2R5ID0gcmVhZCgpOwogICAgICAgIGpzLkFzeW5jTW9kaWZpZXIgYXN5bmNNb2RpZmllciA9CiAgICAgICAgICAgIHNvdXJjZS5yZWFkRW51bShqcy5Bc3luY01vZGlmaWVyLnZhbHVlcyk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5GdW4ocGFyYW1zLCBib2R5LCBhc3luY01vZGlmaWVyOiBhc3luY01vZGlmaWVyKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MuZnVuY3Rpb24pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQubmFtZWRGdW5jdGlvbjoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5uYW1lZEZ1bmN0aW9uKTsKICAgICAgICBqcy5EZWNsYXJhdGlvbiBuYW1lID0gcmVhZCgpOwogICAgICAgIGpzLkZ1biBmdW5jdGlvbiA9IHJlYWQoKTsKICAgICAgICBub2RlID0gbmV3IGpzLk5hbWVkRnVuY3Rpb24obmFtZSwgZnVuY3Rpb24pOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5uYW1lZEZ1bmN0aW9uKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLmFjY2VzczoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5hY2Nlc3MpOwogICAgICAgIGpzLkV4cHJlc3Npb24gcmVjZWl2ZXIgPSByZWFkKCk7CiAgICAgICAganMuRXhwcmVzc2lvbiBzZWxlY3RvciA9IHJlYWQoKTsKICAgICAgICBub2RlID0gbmV3IGpzLlByb3BlcnR5QWNjZXNzKHJlY2VpdmVyLCBzZWxlY3Rvcik7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLmFjY2Vzcyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5wYXJhbWV0ZXI6CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MucGFyYW1ldGVyKTsKICAgICAgICBub2RlID0gbmV3IGpzLlBhcmFtZXRlcihzb3VyY2UucmVhZFN0cmluZygpKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MucGFyYW1ldGVyKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLnZhcmlhYmxlRGVjbGFyYXRpb246CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MudmFyaWFibGVEZWNsYXJhdGlvbik7CiAgICAgICAgU3RyaW5nIG5hbWUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgICAgIGJvb2wgYWxsb3dSZW5hbWUgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgICAgICBub2RlID0gbmV3IGpzLlZhcmlhYmxlRGVjbGFyYXRpb24obmFtZSwgYWxsb3dSZW5hbWU6IGFsbG93UmVuYW1lKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MudmFyaWFibGVEZWNsYXJhdGlvbik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC50aGlzRXhwcmVzc2lvbjoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy50aGlzRXhwcmVzc2lvbik7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5UaGlzKCk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLnRoaXNFeHByZXNzaW9uKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLnZhcmlhYmxlVXNlOgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLnZhcmlhYmxlVXNlKTsKICAgICAgICBub2RlID0gbmV3IGpzLlZhcmlhYmxlVXNlKHNvdXJjZS5yZWFkU3RyaW5nKCkpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy52YXJpYWJsZVVzZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5wb3N0Zml4OgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLnBvc3RmaXgpOwogICAgICAgIFN0cmluZyBvcCA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICAgICAganMuRXhwcmVzc2lvbiBhcmd1bWVudCA9IHJlYWQoKTsKICAgICAgICBub2RlID0gbmV3IGpzLlBvc3RmaXgob3AsIGFyZ3VtZW50KTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MucG9zdGZpeCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5wcmVmaXg6CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MucHJlZml4KTsKICAgICAgICBTdHJpbmcgb3AgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgICAgIGpzLkV4cHJlc3Npb24gYXJndW1lbnQgPSByZWFkKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5QcmVmaXgob3AsIGFyZ3VtZW50KTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MucHJlZml4KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLmJpbmFyeToKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5iaW5hcnkpOwogICAgICAgIFN0cmluZyBvcCA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICAgICAganMuRXhwcmVzc2lvbiBsZWZ0ID0gcmVhZCgpOwogICAgICAgIGpzLkV4cHJlc3Npb24gcmlnaHQgPSByZWFkKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5CaW5hcnkob3AsIGxlZnQsIHJpZ2h0KTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MuYmluYXJ5KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLmNhbGxFeHByZXNzaW9uOgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLmNhbGxFeHByZXNzaW9uKTsKICAgICAgICBqcy5FeHByZXNzaW9uIHRhcmdldCA9IHJlYWQoKTsKICAgICAgICBMaXN0PGpzLkV4cHJlc3Npb24+IGFyZ3VtZW50cyA9IHJlYWRMaXN0KCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5DYWxsKHRhcmdldCwgYXJndW1lbnRzKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MuY2FsbEV4cHJlc3Npb24pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQubmV3RXhwcmVzc2lvbjoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5uZXdFeHByZXNzaW9uKTsKICAgICAgICBqcy5FeHByZXNzaW9uIGNscyA9IHJlYWQoKTsKICAgICAgICBMaXN0PGpzLkV4cHJlc3Npb24+IGFyZ3VtZW50cyA9IHJlYWRMaXN0KCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5OZXcoY2xzLCBhcmd1bWVudHMpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5uZXdFeHByZXNzaW9uKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLmNvbmRpdGlvbmFsOgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLmNvbmRpdGlvbmFsKTsKICAgICAgICBqcy5FeHByZXNzaW9uIGNvbmRpdGlvbiA9IHJlYWQoKTsKICAgICAgICBqcy5FeHByZXNzaW9uIHRoZW4gPSByZWFkKCk7CiAgICAgICAganMuRXhwcmVzc2lvbiBvdGhlcndpc2UgPSByZWFkKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5Db25kaXRpb25hbChjb25kaXRpb24sIHRoZW4sIG90aGVyd2lzZSk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLmNvbmRpdGlvbmFsKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLnZhcmlhYmxlSW5pdGlhbGl6YXRpb246CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MudmFyaWFibGVJbml0aWFsaXphdGlvbik7CiAgICAgICAganMuRGVjbGFyYXRpb24gZGVjbGFyYXRpb24gPSByZWFkKCk7CiAgICAgICAganMuRXhwcmVzc2lvbiB2YWx1ZSA9IHNvdXJjZS5yZWFkVmFsdWVPck51bGwocmVhZCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uKGRlY2xhcmF0aW9uLCB2YWx1ZSk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLnZhcmlhYmxlSW5pdGlhbGl6YXRpb24pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQuYXNzaWdubWVudDoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5hc3NpZ25tZW50KTsKICAgICAgICBqcy5FeHByZXNzaW9uIGxlZnRIYW5kU2lkZSA9IHJlYWQoKTsKICAgICAgICBTdHJpbmcgb3AgPSBzb3VyY2UucmVhZFN0cmluZ09yTnVsbCgpOwogICAgICAgIGpzLkV4cHJlc3Npb24gdmFsdWUgPSByZWFkKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5Bc3NpZ25tZW50LmNvbXBvdW5kKGxlZnRIYW5kU2lkZSwgb3AsIHZhbHVlKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MuYXNzaWdubWVudCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC52YXJpYWJsZURlY2xhcmF0aW9uTGlzdDoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy52YXJpYWJsZURlY2xhcmF0aW9uTGlzdCk7CiAgICAgICAgTGlzdDxqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uPiBkZWNsYXJhdGlvbnMgPSByZWFkTGlzdCgpOwogICAgICAgIGJvb2wgaW5kZW50U3BsaXRzID0gc291cmNlLnJlYWRCb29sKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5WYXJpYWJsZURlY2xhcmF0aW9uTGlzdChkZWNsYXJhdGlvbnMsCiAgICAgICAgICAgIGluZGVudFNwbGl0czogaW5kZW50U3BsaXRzKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MudmFyaWFibGVEZWNsYXJhdGlvbkxpc3QpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQubGl0ZXJhbEV4cHJlc3Npb246CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MubGl0ZXJhbEV4cHJlc3Npb24pOwogICAgICAgIFN0cmluZyB0ZW1wbGF0ZSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICAgICAgTGlzdDxqcy5FeHByZXNzaW9uPiBpbnB1dHMgPSByZWFkTGlzdCgpOwogICAgICAgIG5vZGUgPSBuZXcganMuTGl0ZXJhbEV4cHJlc3Npb24ud2l0aERhdGEodGVtcGxhdGUsIGlucHV0cyk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLmxpdGVyYWxFeHByZXNzaW9uKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLmRhcnRZaWVsZDoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5kYXJ0WWllbGQpOwogICAgICAgIGpzLkV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHJlYWQoKTsKICAgICAgICBib29sIGhhc1N0YXIgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgICAgICBub2RlID0gbmV3IGpzLkRhcnRZaWVsZChleHByZXNzaW9uLCBoYXNTdGFyKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MuZGFydFlpZWxkKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLmxpdGVyYWxTdGF0ZW1lbnQ6CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MubGl0ZXJhbFN0YXRlbWVudCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5MaXRlcmFsU3RhdGVtZW50KHNvdXJjZS5yZWFkU3RyaW5nKCkpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5saXRlcmFsU3RhdGVtZW50KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLmxhYmVsZWRTdGF0ZW1lbnQ6CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MubGFiZWxlZFN0YXRlbWVudCk7CiAgICAgICAgU3RyaW5nIGxhYmVsID0gc291cmNlLnJlYWRTdHJpbmcoKTsKICAgICAgICBqcy5TdGF0ZW1lbnQgYm9keSA9IHJlYWQoKTsKICAgICAgICBub2RlID0gbmV3IGpzLkxhYmVsZWRTdGF0ZW1lbnQobGFiZWwsIGJvZHkpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5sYWJlbGVkU3RhdGVtZW50KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLmZ1bmN0aW9uRGVjbGFyYXRpb246CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MuZnVuY3Rpb25EZWNsYXJhdGlvbik7CiAgICAgICAganMuRGVjbGFyYXRpb24gbmFtZSA9IHJlYWQoKTsKICAgICAgICBqcy5GdW4gZnVuY3Rpb24gPSByZWFkKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5GdW5jdGlvbkRlY2xhcmF0aW9uKG5hbWUsIGZ1bmN0aW9uKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MuZnVuY3Rpb25EZWNsYXJhdGlvbik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5zd2l0Y2hEZWZhdWx0OgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLnN3aXRjaERlZmF1bHQpOwogICAgICAgIGpzLkJsb2NrIGJvZHkgPSByZWFkKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5EZWZhdWx0KGJvZHkpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5zd2l0Y2hEZWZhdWx0KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLnN3aXRjaENhc2U6CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3Muc3dpdGNoQ2FzZSk7CiAgICAgICAganMuRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcmVhZCgpOwogICAgICAgIGpzLkJsb2NrIGJvZHkgPSByZWFkKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5DYXNlKGV4cHJlc3Npb24sIGJvZHkpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5zd2l0Y2hDYXNlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLnN3aXRjaFN0YXRlbWVudDoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5zd2l0Y2hTdGF0ZW1lbnQpOwogICAgICAgIGpzLkV4cHJlc3Npb24ga2V5ID0gcmVhZCgpOwogICAgICAgIExpc3Q8anMuU3dpdGNoQ2xhdXNlPiBjYXNlcyA9IHJlYWRMaXN0KCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5Td2l0Y2goa2V5LCBjYXNlcyk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLnN3aXRjaFN0YXRlbWVudCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5jYXRjaENsYXVzZToKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5jYXRjaENsYXVzZSk7CiAgICAgICAganMuRGVjbGFyYXRpb24gZGVjbGFyYXRpb24gPSByZWFkKCk7CiAgICAgICAganMuQmxvY2sgYm9keSA9IHJlYWQoKTsKICAgICAgICBub2RlID0gbmV3IGpzLkNhdGNoKGRlY2xhcmF0aW9uLCBib2R5KTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MuY2F0Y2hDbGF1c2UpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQudHJ5U3RhdGVtZW50OgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLnRyeVN0YXRlbWVudCk7CiAgICAgICAganMuQmxvY2sgYm9keSA9IHJlYWQoKTsKICAgICAgICBqcy5DYXRjaCBjYXRjaFBhcnQgPSBzb3VyY2UucmVhZFZhbHVlT3JOdWxsKHJlYWQpOwogICAgICAgIGpzLkJsb2NrIGZpbmFsbHlQYXJ0ID0gc291cmNlLnJlYWRWYWx1ZU9yTnVsbChyZWFkKTsKICAgICAgICBub2RlID0gbmV3IGpzLlRyeShib2R5LCBjYXRjaFBhcnQsIGZpbmFsbHlQYXJ0KTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MudHJ5U3RhdGVtZW50KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLnRocm93U3RhdGVtZW50OgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLnRocm93U3RhdGVtZW50KTsKICAgICAgICBqcy5FeHByZXNzaW9uIGV4cHJlc3Npb24gPSByZWFkKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5UaHJvdyhleHByZXNzaW9uKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MudGhyb3dTdGF0ZW1lbnQpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQucmV0dXJuU3RhdGVtZW50OgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLnJldHVyblN0YXRlbWVudCk7CiAgICAgICAganMuRXhwcmVzc2lvbiB2YWx1ZSA9IHNvdXJjZS5yZWFkVmFsdWVPck51bGwocmVhZCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5SZXR1cm4odmFsdWUpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5yZXR1cm5TdGF0ZW1lbnQpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQuYnJlYWtTdGF0ZW1lbnQ6CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MuYnJlYWtTdGF0ZW1lbnQpOwogICAgICAgIFN0cmluZyB0YXJnZXRMYWJlbCA9IHNvdXJjZS5yZWFkU3RyaW5nT3JOdWxsKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5CcmVhayh0YXJnZXRMYWJlbCk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLmJyZWFrU3RhdGVtZW50KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLmNvbnRpbnVlU3RhdGVtZW50OgogICAgICAgIHNvdXJjZS5iZWdpbihKc05vZGVUYWdzLmNvbnRpbnVlU3RhdGVtZW50KTsKICAgICAgICBTdHJpbmcgdGFyZ2V0TGFiZWwgPSBzb3VyY2UucmVhZFN0cmluZ09yTnVsbCgpOwogICAgICAgIG5vZGUgPSBuZXcganMuQ29udGludWUodGFyZ2V0TGFiZWwpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5jb250aW51ZVN0YXRlbWVudCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5kb1N0YXRlbWVudDoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5kb1N0YXRlbWVudCk7CiAgICAgICAganMuU3RhdGVtZW50IGJvZHkgPSByZWFkKCk7CiAgICAgICAganMuRXhwcmVzc2lvbiBjb25kaXRpb24gPSByZWFkKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5Ebyhib2R5LCBjb25kaXRpb24pOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy5kb1N0YXRlbWVudCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC53aGlsZVN0YXRlbWVudDoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy53aGlsZVN0YXRlbWVudCk7CiAgICAgICAganMuRXhwcmVzc2lvbiBjb25kaXRpb24gPSByZWFkKCk7CiAgICAgICAganMuU3RhdGVtZW50IGJvZHkgPSByZWFkKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5XaGlsZShjb25kaXRpb24sIGJvZHkpOwogICAgICAgIHNvdXJjZS5lbmQoSnNOb2RlVGFncy53aGlsZVN0YXRlbWVudCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5mb3JJblN0YXRlbWVudDoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5mb3JJblN0YXRlbWVudCk7CiAgICAgICAganMuRXhwcmVzc2lvbiBsZWZ0SGFuZFNpZGUgPSByZWFkKCk7CiAgICAgICAganMuRXhwcmVzc2lvbiBvYmplY3QgPSByZWFkKCk7CiAgICAgICAganMuU3RhdGVtZW50IGJvZHkgPSByZWFkKCk7CiAgICAgICAgbm9kZSA9IG5ldyBqcy5Gb3JJbihsZWZ0SGFuZFNpZGUsIG9iamVjdCwgYm9keSk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLmZvckluU3RhdGVtZW50KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLmZvclN0YXRlbWVudDoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5mb3JTdGF0ZW1lbnQpOwogICAgICAgIGpzLkV4cHJlc3Npb24gaW5pdCA9IHJlYWQoYWxsb3dOdWxsOiB0cnVlKTsKICAgICAgICBqcy5FeHByZXNzaW9uIGNvbmRpdGlvbiA9IHJlYWQoYWxsb3dOdWxsOiB0cnVlKTsKICAgICAgICBqcy5FeHByZXNzaW9uIHVwZGF0ZSA9IHJlYWQoYWxsb3dOdWxsOiB0cnVlKTsKICAgICAgICBqcy5TdGF0ZW1lbnQgYm9keSA9IHJlYWQoKTsKICAgICAgICBub2RlID0gbmV3IGpzLkZvcihpbml0LCBjb25kaXRpb24sIHVwZGF0ZSwgYm9keSk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLmZvclN0YXRlbWVudCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5pZlN0YXRlbWVudDoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5pZlN0YXRlbWVudCk7CiAgICAgICAganMuRXhwcmVzc2lvbiBjb25kaXRpb24gPSByZWFkKCk7CiAgICAgICAganMuU3RhdGVtZW50IHRoZW4gPSByZWFkKCk7CiAgICAgICAganMuU3RhdGVtZW50IG90aGVyd2lzZSA9IHJlYWQoKTsKICAgICAgICBub2RlID0gbmV3IGpzLklmKGNvbmRpdGlvbiwgdGhlbiwgb3RoZXJ3aXNlKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MuaWZTdGF0ZW1lbnQpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQuZW1wdHlTdGF0ZW1lbnQ6CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MuZW1wdHlTdGF0ZW1lbnQpOwogICAgICAgIG5vZGUgPSBuZXcganMuRW1wdHlTdGF0ZW1lbnQoKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MuZW1wdHlTdGF0ZW1lbnQpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEpzTm9kZUtpbmQuZXhwcmVzc2lvblN0YXRlbWVudDoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5leHByZXNzaW9uU3RhdGVtZW50KTsKICAgICAgICBub2RlID0gbmV3IGpzLkV4cHJlc3Npb25TdGF0ZW1lbnQocmVhZCgpKTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MuZXhwcmVzc2lvblN0YXRlbWVudCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSnNOb2RlS2luZC5ibG9jazoKICAgICAgICBzb3VyY2UuYmVnaW4oSnNOb2RlVGFncy5ibG9jayk7CiAgICAgICAgTGlzdDxqcy5TdGF0ZW1lbnQ+IHN0YXRlbWVudHMgPSByZWFkTGlzdCgpOwogICAgICAgIG5vZGUgPSBuZXcganMuQmxvY2soc3RhdGVtZW50cyk7CiAgICAgICAgc291cmNlLmVuZChKc05vZGVUYWdzLmJsb2NrKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKc05vZGVLaW5kLnByb2dyYW06CiAgICAgICAgc291cmNlLmJlZ2luKEpzTm9kZVRhZ3MucHJvZ3JhbSk7CiAgICAgICAgTGlzdDxqcy5TdGF0ZW1lbnQ+IGJvZHkgPSByZWFkTGlzdCgpOwogICAgICAgIG5vZGUgPSBuZXcganMuUHJvZ3JhbShib2R5KTsKICAgICAgICBzb3VyY2UuZW5kKEpzTm9kZVRhZ3MucHJvZ3JhbSk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9CiAgICAgICAgc291cmNlLnJlYWRDYWNoZWQ8U291cmNlSW5mb3JtYXRpb24+KCgpIHsKICAgICAgcmV0dXJuIFNvdXJjZUluZm9ybWF0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgfSk7CiAgICBpZiAoc291cmNlSW5mb3JtYXRpb24gIT0gbnVsbCkgewogICAgICBub2RlID0gbm9kZS53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pOwogICAgfQogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBMaXN0PFQ+IHJlYWRMaXN0PFQgZXh0ZW5kcyBqcy5Ob2RlPih7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICByZXR1cm4gc291cmNlLnJlYWRMaXN0KHJlYWQsIGVtcHR5QXNOdWxsOiBlbXB0eUFzTnVsbCk7CiAgfQp9CgpjbGFzcyBDb2RlZ2VuUmVhZGVySW1wbCBpbXBsZW1lbnRzIENvZGVnZW5SZWFkZXIgewogIGZpbmFsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZDsKICBmaW5hbCBMaXN0PE1vZHVsYXJOYW1lPiBtb2R1bGFyTmFtZXM7CiAgZmluYWwgTGlzdDxNb2R1bGFyRXhwcmVzc2lvbj4gbW9kdWxhckV4cHJlc3Npb25zOwoKICBDb2RlZ2VuUmVhZGVySW1wbCgKICAgICAgdGhpcy5jbG9zZWRXb3JsZCwgdGhpcy5tb2R1bGFyTmFtZXMsIHRoaXMubW9kdWxhckV4cHJlc3Npb25zKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSByZWFkQWJzdHJhY3RWYWx1ZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAucmVhZEFic3RyYWN0VmFsdWVGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogIH0KCiAgQG92ZXJyaWRlCiAganMuTm9kZSByZWFkSnNOb2RlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICByZXR1cm4gSnNOb2RlRGVzZXJpYWxpemVyLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgICBzb3VyY2UsIG1vZHVsYXJOYW1lcywgbW9kdWxhckV4cHJlc3Npb25zKTsKICB9CgogIEBvdmVycmlkZQogIE91dHB1dFVuaXQgcmVhZE91dHB1dFVuaXRSZWZlcmVuY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHJldHVybiBjbG9zZWRXb3JsZC5vdXRwdXRVbml0RGF0YS5vdXRwdXRVbml0c1tzb3VyY2UucmVhZEludCgpXTsKICB9Cn0KCmNsYXNzIENvZGVnZW5Xcml0ZXJJbXBsIGltcGxlbWVudHMgQ29kZWdlbldyaXRlciB7CiAgZmluYWwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkOwoKICBDb2RlZ2VuV3JpdGVySW1wbCh0aGlzLmNsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB3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MiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGpzX2FzdDsKCmFic3RyYWN0IGNsYXNzIE5vZGVWaXNpdG9yPFQ+IHsKICBUIHZpc2l0UHJvZ3JhbShQcm9ncmFtIG5vZGUpOwoKICBUIHZpc2l0QmxvY2soQmxvY2sgbm9kZSk7CiAgVCB2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnQoRXhwcmVzc2lvblN0YXRlbWVudCBub2RlKTsKICBUIHZpc2l0RW1wdHlTdGF0ZW1lbnQoRW1wdHlTdGF0ZW1lbnQgbm9kZSk7CiAgVCB2aXNpdElmKElmIG5vZGUpOwogIFQgdmlzaXRGb3IoRm9yIG5vZGUpOwogIFQgdmlzaXRGb3JJbihGb3JJbiBub2RlKTsKICBUIHZpc2l0V2hpbGUoV2hpbGUgbm9kZSk7CiAgVCB2aXNpdERvKERvIG5vZGUpOwogIFQgdmlzaXRDb250aW51ZShDb250aW51ZSBub2RlKTsKICBUIHZpc2l0QnJlYWsoQnJlYWsgbm9kZSk7CiAgVCB2aXNpdFJldHVybihSZXR1cm4gbm9kZSk7CiAgVCB2aXNpdFRocm93KFRocm93IG5vZGUpOwogIFQgdmlzaXRUcnkoVHJ5IG5vZGUpOwogIFQgdmlzaXRDYXRjaChDYXRjaCBub2RlKTsKICBUIHZpc2l0U3dpdGNoKFN3aXRjaCBub2RlKTsKICBUIHZpc2l0Q2FzZShDYXNlIG5vZGUpOwogIFQgdmlzaXREZWZhdWx0KERlZmF1bHQgbm9kZSk7CiAgVCB2aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiBub2RlKTsKICBUIHZpc2l0TGFiZWxlZFN0YXRlbWVudChMYWJlbGVkU3RhdGVtZW50IG5vZGUpOwogIFQgdmlzaXRMaXRlcmFsU3RhdGVtZW50KExpdGVyYWxTdGF0ZW1lbnQgbm9kZSk7CiAgVCB2aXNpdERhcnRZaWVsZChEYXJ0WWllbGQgbm9kZSk7CgogIFQgdmlzaXRMaXRlcmFsRXhwcmVzc2lvbihMaXRlcmFsRXhwcmVzc2lvbiBub2RlKTsKICBUIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qgbm9kZSk7CiAgVCB2aXNpdEFzc2lnbm1lbnQoQXNzaWdubWVudCBub2RlKTsKICBUIHZpc2l0VmFyaWFibGVJbml0aWFsaXphdGlvbihWYXJpYWJsZUluaXRpYWxpemF0aW9uIG5vZGUpOwogIFQgdmlzaXRDb25kaXRpb25hbChDb25kaXRpb25hbCBjb25kKTsKICBUIHZpc2l0TmV3KE5ldyBub2RlKTsKICBUIHZpc2l0Q2FsbChDYWxsIG5vZGUpOwogIFQgdmlzaXRCaW5hcnkoQmluYXJ5IG5vZGUpOwogIFQgdmlzaXRQcmVmaXgoUHJlZml4IG5vZGUpOwogIFQgdmlzaXRQb3N0Zml4KFBvc3RmaXggbm9kZSk7CgogIFQgdmlzaXRWYXJpYWJsZVVzZShWYXJpYWJsZVVzZSBub2RlKTsKICBUIHZpc2l0VGhpcyhUaGlzIG5vZGUpOwogIFQgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSk7CiAgVCB2aXNpdFBhcmFtZXRlcihQYXJhbWV0ZXIgbm9kZSk7CiAgVCB2aXNpdEFjY2VzcyhQcm9wZXJ0eUFjY2VzcyBub2RlKTsKCiAgVCB2aXNpdE5hbWVkRnVuY3Rpb24oTmFtZWRGdW5jdGlvbiBub2RlKTsKICBUIHZpc2l0RnVuKEZ1biBub2RlKTsKCiAgVCB2aXNpdERlZmVycmVkRXhwcmVzc2lvbihEZWZlcnJlZEV4cHJlc3Npb24gbm9kZSk7CiAgVCB2aXNpdERlZmVycmVkTnVtYmVyKERlZmVycmVkTnVtYmVyIG5vZGUpOwogIFQgdmlzaXREZWZlcnJlZFN0cmluZyhEZWZlcnJlZFN0cmluZyBub2RlKTsKCiAgVCB2aXNpdExpdGVyYWxCb29sKExpdGVyYWxCb29sIG5vZGUpOwogIFQgdmlzaXRMaXRlcmFsU3RyaW5nKExpdGVyYWxTdHJpbmcgbm9kZSk7CiAgVCB2aXNpdExpdGVyYWxOdW1iZXIoTGl0ZXJhbE51bWJlciBub2RlKTsKICBUIHZpc2l0TGl0ZXJhbE51bGwoTGl0ZXJhbE51bGwgbm9kZSk7CgogIFQgdmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKFN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSk7CgogIFQgdmlzaXROYW1lKE5hbWUgbm9kZSk7CgogIFQgdmlzaXRQYXJlbnRoZXNlcyhQYXJlbnRoZXNlcyBub2RlKTsKCiAgVCB2aXNpdEFycmF5SW5pdGlhbGl6ZXIoQXJyYXlJbml0aWFsaXplciBub2RlKTsKICBUIHZpc2l0QXJyYXlIb2xlKEFycmF5SG9sZSBub2RlKTsKICBUIHZpc2l0T2JqZWN0SW5pdGlhbGl6ZXIoT2JqZWN0SW5pdGlhbGl6ZXIgbm9kZSk7CiAgVCB2aXNpdFByb3BlcnR5KFByb3BlcnR5IG5vZGUpOwogIFQgdmlzaXRSZWdFeHBMaXRlcmFsKFJlZ0V4cExpdGVyYWwgbm9kZSk7CgogIFQgdmlzaXRBd2FpdChBd2FpdCBub2RlKTsKCiAgVCB2aXNpdENvbW1lbnQoQ29tbWVudCBub2RlKTsKCiAgVCB2aXNpdEludGVycG9sYXRlZEV4cHJlc3Npb24oSW50ZXJwb2xhdGVkRXhwcmVzc2lvbiBub2RlKTsKICBUIHZpc2l0SW50ZXJwb2xhdGVkTGl0ZXJhbChJbnRlcnBvbGF0ZWRMaXRlcmFsIG5vZGUpOwogIFQgdmlzaXRJbnRlcnBvbGF0ZWRQYXJhbWV0ZXIoSW50ZXJwb2xhdGVkUGFyYW1ldGVyIG5vZGUpOwogIFQgdmlzaXRJbnRlcnBvbGF0ZWRTZWxlY3RvcihJbnRlcnBvbGF0ZWRTZWxlY3RvciBub2RlKTsKICBUIHZpc2l0SW50ZXJwb2xhdGVkU3RhdGVtZW50KEludGVycG9sYXRlZFN0YXRlbWVudCBub2RlKTsKICBUIHZpc2l0SW50ZXJwb2xhdGVkRGVjbGFyYXRpb24oSW50ZXJwb2xhdGVkRGVjbGFyYXRpb24gbm9kZSk7Cn0KCmNsYXNzIEJhc2VWaXNpdG9yPFQ+IGltcGxlbWVudHMgTm9kZVZpc2l0b3I8VD4gewogIGNvbnN0IEJhc2VWaXNpdG9yKCk7CgogIFQgdmlzaXROb2RlKE5vZGUgbm9kZSkgewogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBUIHZpc2l0UHJvZ3JhbShQcm9ncmFtIG5vZGUpID0+IHZpc2l0Tm9kZShub2RlKTsKCiAgVCB2aXNpdFN0YXRlbWVudChTdGF0ZW1lbnQgbm9kZSkgPT4gdmlzaXROb2RlKG5vZGUpOwogIFQgdmlzaXRMb29wKExvb3Agbm9kZSkgPT4gdmlzaXRTdGF0ZW1lbnQobm9kZSk7CiAgVCB2aXNpdEp1bXAoU3RhdGVtZW50IG5vZGUpID0+IHZpc2l0U3RhdGVtZW50KG5vZGUpOwoKICBUIHZpc2l0QmxvY2soQmxvY2sgbm9kZSkgPT4gdmlzaXRTdGF0ZW1lbnQobm9kZSk7CiAgVCB2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnQoRXhwcmVzc2lvblN0YXRlbWVudCBub2RlKSA9PiB2aXNpdFN0YXRlbWVudChub2RlKTsKICBUIHZpc2l0RW1wdHlTdGF0ZW1lbnQoRW1wdHlTdGF0ZW1lbnQgbm9kZSkgPT4gdmlzaXRTdGF0ZW1lbnQobm9kZSk7CiAgVCB2aXNpdElmKElmIG5vZGUpID0+IHZpc2l0U3RhdGVtZW50KG5vZGUpOwogIFQgdmlzaXRGb3IoRm9yIG5vZGUpID0+IHZpc2l0TG9vcChub2RlKTsKICBUIHZpc2l0Rm9ySW4oRm9ySW4gbm9kZSkgPT4gdmlzaXRMb29wKG5vZGUpOwogIFQgdmlzaXRXaGlsZShXaGlsZSBub2RlKSA9PiB2aXNpdExvb3Aobm9kZSk7CiAgVCB2aXNpdERvKERvIG5vZGUpID0+IHZpc2l0TG9vcChub2RlKTsKICBUIHZpc2l0Q29udGludWUoQ29udGludWUgbm9kZSkgPT4gdmlzaXRKdW1wKG5vZGUpOwogIFQgdmlzaXRCcmVhayhCcmVhayBub2RlKSA9PiB2aXNpdEp1bXAobm9kZSk7CiAgVCB2aXNpdFJldHVybihSZXR1cm4gbm9kZSkgPT4gdmlzaXRKdW1wKG5vZGUpOwogIFQgdmlzaXRUaHJvdyhUaHJvdyBub2RlKSA9PiB2aXNpdEp1bXAobm9kZSk7CiAgVCB2aXNpdFRyeShUcnkgbm9kZSkgPT4gdmlzaXRTdGF0ZW1lbnQobm9kZSk7CiAgVCB2aXNpdFN3aXRjaChTd2l0Y2ggbm9kZSkgPT4gdmlzaXRTdGF0ZW1lbnQobm9kZSk7CiAgVCB2aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiBub2RlKSA9PiB2aXNpdFN0YXRlbWVudChub2RlKTsKICBUIHZpc2l0TGFiZWxlZFN0YXRlbWVudChMYWJlbGVkU3RhdGVtZW50IG5vZGUpID0+IHZpc2l0U3RhdGVtZW50KG5vZGUpOwogIFQgdmlzaXRMaXRlcmFsU3RhdGVtZW50KExpdGVyYWxTdGF0ZW1lbnQgbm9kZSkgPT4gdmlzaXRTdGF0ZW1lbnQobm9kZSk7CgogIFQgdmlzaXRDYXRjaChDYXRjaCBub2RlKSA9PiB2aXNpdE5vZGUobm9kZSk7CiAgVCB2aXNpdENhc2UoQ2FzZSBub2RlKSA9PiB2aXNpdE5vZGUobm9kZSk7CiAgVCB2aXNpdERlZmF1bHQoRGVmYXVsdCBub2RlKSA9PiB2aXNpdE5vZGUobm9kZSk7CgogIFQgdmlzaXRFeHByZXNzaW9uKEV4cHJlc3Npb24gbm9kZSkgPT4gdmlzaXROb2RlKG5vZGUpOwogIFQgdmlzaXRWYXJpYWJsZVJlZmVyZW5jZShWYXJpYWJsZVJlZmVyZW5jZSBub2RlKSA9PiB2aXNpdEV4cHJlc3Npb24obm9kZSk7CgogIFQgdmlzaXRMaXRlcmFsRXhwcmVzc2lvbihMaXRlcmFsRXhwcmVzc2lvbiBub2RlKSA9PiB2aXNpdEV4cHJlc3Npb24obm9kZSk7CiAgVCB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0IG5vZGUpID0+CiAgICAgIHZpc2l0RXhwcmVzc2lvbihub2RlKTsKICBUIHZpc2l0QXNzaWdubWVudChBc3NpZ25tZW50IG5vZGUpID0+IHZpc2l0RXhwcmVzc2lvbihub2RlKTsKICBUIHZpc2l0VmFyaWFibGVJbml0aWFsaXphdGlvbihWYXJpYWJsZUluaXRpYWxpemF0aW9uIG5vZGUpIHsKICAgIGlmIChub2RlLnZhbHVlICE9IG51bGwpIHsKICAgICAgcmV0dXJuIHZpc2l0QXNzaWdubWVudChub2RlKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB2aXNpdEV4cHJlc3Npb24obm9kZSk7CiAgICB9CiAgfQoKICBUIHZpc2l0Q29uZGl0aW9uYWwoQ29uZGl0aW9uYWwgbm9kZSkgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUpOwogIFQgdmlzaXROZXcoTmV3IG5vZGUpID0+IHZpc2l0RXhwcmVzc2lvbihub2RlKTsKICBUIHZpc2l0Q2FsbChDYWxsIG5vZGUpID0+IHZpc2l0RXhwcmVzc2lvbihub2RlKTsKICBUIHZpc2l0QmluYXJ5KEJpbmFyeSBub2RlKSA9PiB2aXNpdEV4cHJlc3Npb24obm9kZSk7CiAgVCB2aXNpdFByZWZpeChQcmVmaXggbm9kZSkgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUpOwogIFQgdmlzaXRQb3N0Zml4KFBvc3RmaXggbm9kZSkgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUpOwogIFQgdmlzaXRBY2Nlc3MoUHJvcGVydHlBY2Nlc3Mgbm9kZSkgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUpOwoKICBUIHZpc2l0VmFyaWFibGVVc2UoVmFyaWFibGVVc2Ugbm9kZSkgPT4gdmlzaXRWYXJpYWJsZVJlZmVyZW5jZShub2RlKTsKICBUIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpID0+CiAgICAgIHZpc2l0VmFyaWFibGVSZWZlcmVuY2Uobm9kZSk7CiAgVCB2aXNpdFBhcmFtZXRlcihQYXJhbWV0ZXIgbm9kZSkgPT4gdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUpOwogIFQgdmlzaXRUaGlzKFRoaXMgbm9kZSkgPT4gdmlzaXRQYXJhbWV0ZXIobm9kZSk7CgogIFQgdmlzaXROYW1lZEZ1bmN0aW9uKE5hbWVkRnVuY3Rpb24gbm9kZSkgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUpOwogIFQgdmlzaXRGdW4oRnVuIG5vZGUpID0+IHZpc2l0RXhwcmVzc2lvbihub2RlKTsKCiAgVCB2aXNpdFRva2VuKERlZmVycmVkVG9rZW4gbm9kZSkgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUpOwoKICBUIHZpc2l0RGVmZXJyZWRFeHByZXNzaW9uKERlZmVycmVkRXhwcmVzc2lvbiBub2RlKSA9PiB2aXNpdEV4cHJlc3Npb24obm9kZSk7CiAgVCB2aXNpdERlZmVycmVkTnVtYmVyKERlZmVycmVkTnVtYmVyIG5vZGUpID0+IHZpc2l0VG9rZW4obm9kZSk7CiAgVCB2aXNpdERlZmVycmVkU3RyaW5nKERlZmVycmVkU3RyaW5nIG5vZGUpID0+IHZpc2l0VG9rZW4obm9kZSk7CgogIFQgdmlzaXRMaXRlcmFsKExpdGVyYWwgbm9kZSkgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUpOwoKICBUIHZpc2l0TGl0ZXJhbEJvb2woTGl0ZXJhbEJvb2wgbm9kZSkgPT4gdmlzaXRMaXRlcmFsKG5vZGUpOwogIFQgdmlzaXRMaXRlcmFsU3RyaW5nKExpdGVyYWxTdHJpbmcgbm9kZSkgPT4gdmlzaXRMaXRlcmFsKG5vZGUpOwogIFQgdmlzaXRMaXRlcmFsTnVtYmVyKExpdGVyYWxOdW1iZXIgbm9kZSkgPT4gdmlzaXRMaXRlcmFsKG5vZGUpOwogIFQgdmlzaXRMaXRlcmFsTnVsbChMaXRlcmFsTnVsbCBub2RlKSA9PiB2aXNpdExpdGVyYWwobm9kZSk7CgogIFQgdmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKFN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSkgPT4gdmlzaXRMaXRlcmFsKG5vZGUpOwoKICBUIHZpc2l0TmFtZShOYW1lIG5vZGUpID0+IHZpc2l0Tm9kZShub2RlKTsKCiAgVCB2aXNpdFBhcmVudGhlc2VzKFBhcmVudGhlc2VzIG5vZGUpID0+IHZpc2l0RXhwcmVzc2lvbihub2RlKTsKCiAgVCB2aXNpdEFycmF5SW5pdGlhbGl6ZXIoQXJyYXlJbml0aWFsaXplciBub2RlKSA9PiB2aXNpdEV4cHJlc3Npb24obm9kZSk7CiAgVCB2aXNpdEFycmF5SG9sZShBcnJheUhvbGUgbm9kZSkgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUpOwogIFQgdmlzaXRPYmplY3RJbml0aWFsaXplcihPYmplY3RJbml0aWFsaXplciBub2RlKSA9PiB2aXNpdEV4cHJlc3Npb24obm9kZSk7CiAgVCB2aXNpdFByb3BlcnR5KFByb3BlcnR5IG5vZGUpID0+IHZpc2l0Tm9kZShub2RlKTsKICBUIHZpc2l0UmVnRXhwTGl0ZXJhbChSZWdFeHBMaXRlcmFsIG5vZGUpID0+IHZpc2l0RXhwcmVzc2lvbihub2RlKTsKCiAgVCB2aXNpdEludGVycG9sYXRlZE5vZGUoSW50ZXJwb2xhdGVkTm9kZSBub2RlKSA9PiB2aXNpdE5vZGUobm9kZSk7CgogIFQgdmlzaXRJbnRlcnBvbGF0ZWRFeHByZXNzaW9uKEludGVycG9sYXRlZEV4cHJlc3Npb24gbm9kZSkgPT4KICAgICAgdmlzaXRJbnRlcnBvbGF0ZWROb2RlKG5vZGUpOwogIFQgdmlzaXRJbnRlcnBvbGF0ZWRMaXRlcmFsKEludGVycG9sYXRlZExpdGVyYWwgbm9kZSkgPT4KICAgICAgdmlzaXRJbnRlcnBvbGF0ZWROb2RlKG5vZGUpOwogIFQgdmlzaXRJbnRlcnBvbGF0ZWRQYXJhbWV0ZXIoSW50ZXJwb2xhdGVkUGFyYW1ldGVyIG5vZGUpID0+CiAgICAgIHZpc2l0SW50ZXJwb2xhdGVkTm9kZShub2RlKTsKICBUIHZpc2l0SW50ZXJwb2xhdGVkU2VsZWN0b3IoSW50ZXJwb2xhdGVkU2VsZWN0b3Igbm9kZSkgPT4KICAgICAgdmlzaXRJbnRlcnBvbGF0ZWROb2RlKG5vZGUpOwogIFQgdmlzaXRJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQoSW50ZXJwb2xhdGVkU3RhdGVtZW50IG5vZGUpID0+CiAgICAgIHZpc2l0SW50ZXJwb2xhdGVkTm9kZShub2RlKTsKICBUIHZpc2l0SW50ZXJwb2xhdGVkRGVjbGFyYXRpb24oSW50ZXJwb2xhdGVkRGVjbGFyYXRpb24gbm9kZSkgewogICAgcmV0dXJuIHZpc2l0SW50ZXJwb2xhdGVkTm9kZShub2RlKTsKICB9CgogIC8vIElnbm9yZSBjb21tZW50cyBieSBkZWZhdWx0LgogIFQgdmlzaXRDb21tZW50KENvbW1lbnQgbm9kZSkgPT4gbnVsbDsKCiAgVCB2aXNpdEF3YWl0KEF3YWl0IG5vZGUpID0+IHZpc2l0RXhwcmVzc2lvbihub2RlKTsKICBUIHZpc2l0RGFydFlpZWxkKERhcnRZaWVsZCBub2RlKSA9PiB2aXNpdFN0YXRlbWVudChub2RlKTsKfQoKYWJzdHJhY3QgY2xhc3MgTm9kZVZpc2l0b3IxPFIsIEE+IHsKICBSIHZpc2l0UHJvZ3JhbShQcm9ncmFtIG5vZGUsIEEgYXJnKTsKCiAgUiB2aXNpdEJsb2NrKEJsb2NrIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChFeHByZXNzaW9uU3RhdGVtZW50IG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0RW1wdHlTdGF0ZW1lbnQoRW1wdHlTdGF0ZW1lbnQgbm9kZSwgQSBhcmcpOwogIFIgdmlzaXRJZihJZiBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdEZvcihGb3Igbm9kZSwgQSBhcmcpOwogIFIgdmlzaXRGb3JJbihGb3JJbiBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdFdoaWxlKFdoaWxlIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0RG8oRG8gbm9kZSwgQSBhcmcpOwogIFIgdmlzaXRDb250aW51ZShDb250aW51ZSBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdEJyZWFrKEJyZWFrIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0UmV0dXJuKFJldHVybiBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdFRocm93KFRocm93IG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0VHJ5KFRyeSBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdENhdGNoKENhdGNoIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0U3dpdGNoKFN3aXRjaCBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdENhc2UoQ2FzZSBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdERlZmF1bHQoRGVmYXVsdCBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdExhYmVsZWRTdGF0ZW1lbnQoTGFiZWxlZFN0YXRlbWVudCBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdExpdGVyYWxTdGF0ZW1lbnQoTGl0ZXJhbFN0YXRlbWVudCBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdERhcnRZaWVsZChEYXJ0WWllbGQgbm9kZSwgQSBhcmcpOwoKICBSIHZpc2l0TGl0ZXJhbEV4cHJlc3Npb24oTGl0ZXJhbEV4cHJlc3Npb24gbm9kZSwgQSBhcmcpOwogIFIgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdEFzc2lnbm1lbnQoQXNzaWdubWVudCBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdFZhcmlhYmxlSW5pdGlhbGl6YXRpb24oVmFyaWFibGVJbml0aWFsaXphdGlvbiBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdENvbmRpdGlvbmFsKENvbmRpdGlvbmFsIGNvbmQsIEEgYXJnKTsKICBSIHZpc2l0TmV3KE5ldyBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdENhbGwoQ2FsbCBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdEJpbmFyeShCaW5hcnkgbm9kZSwgQSBhcmcpOwogIFIgdmlzaXRQcmVmaXgoUHJlZml4IG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0UG9zdGZpeChQb3N0Zml4IG5vZGUsIEEgYXJnKTsKCiAgUiB2aXNpdFZhcmlhYmxlVXNlKFZhcmlhYmxlVXNlIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0VGhpcyhUaGlzIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0UGFyYW1ldGVyKFBhcmFtZXRlciBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdEFjY2VzcyhQcm9wZXJ0eUFjY2VzcyBub2RlLCBBIGFyZyk7CgogIFIgdmlzaXROYW1lZEZ1bmN0aW9uKE5hbWVkRnVuY3Rpb24gbm9kZSwgQSBhcmcpOwogIFIgdmlzaXRGdW4oRnVuIG5vZGUsIEEgYXJnKTsKCiAgUiB2aXNpdERlZmVycmVkRXhwcmVzc2lvbihEZWZlcnJlZEV4cHJlc3Npb24gbm9kZSwgQSBhcmcpOwogIFIgdmlzaXREZWZlcnJlZE51bWJlcihEZWZlcnJlZE51bWJlciBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdERlZmVycmVkU3RyaW5nKERlZmVycmVkU3RyaW5nIG5vZGUsIEEgYXJnKTsKCiAgUiB2aXNpdExpdGVyYWxCb29sKExpdGVyYWxCb29sIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0TGl0ZXJhbFN0cmluZyhMaXRlcmFsU3RyaW5nIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0TGl0ZXJhbE51bWJlcihMaXRlcmFsTnVtYmVyIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0TGl0ZXJhbE51bGwoTGl0ZXJhbE51bGwgbm9kZSwgQSBhcmcpOwoKICBSIHZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbihTdHJpbmdDb25jYXRlbmF0aW9uIG5vZGUsIEEgYXJnKTsKCiAgUiB2aXNpdE5hbWUoTmFtZSBub2RlLCBBIGFyZyk7CgogIFIgdmlzaXRQYXJlbnRoZXNlcyhQYXJlbnRoZXNlcyBub2RlLCBBIGFyZyk7CgogIFIgdmlzaXRBcnJheUluaXRpYWxpemVyKEFycmF5SW5pdGlhbGl6ZXIgbm9kZSwgQSBhcmcpOwogIFIgdmlzaXRBcnJheUhvbGUoQXJyYXlIb2xlIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0T2JqZWN0SW5pdGlhbGl6ZXIoT2JqZWN0SW5pdGlhbGl6ZXIgbm9kZSwgQSBhcmcpOwogIFIgdmlzaXRQcm9wZXJ0eShQcm9wZXJ0eSBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdFJlZ0V4cExpdGVyYWwoUmVnRXhwTGl0ZXJhbCBub2RlLCBBIGFyZyk7CgogIFIgdmlzaXRBd2FpdChBd2FpdCBub2RlLCBBIGFyZyk7CgogIFIgdmlzaXRDb21tZW50KENvbW1lbnQgbm9kZSwgQSBhcmcpOwoKICBSIHZpc2l0SW50ZXJwb2xhdGVkRXhwcmVzc2lvbihJbnRlcnBvbGF0ZWRFeHByZXNzaW9uIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0SW50ZXJwb2xhdGVkTGl0ZXJhbChJbnRlcnBvbGF0ZWRMaXRlcmFsIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0SW50ZXJwb2xhdGVkUGFyYW1ldGVyKEludGVycG9sYXRlZFBhcmFtZXRlciBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdEludGVycG9sYXRlZFNlbGVjdG9yKEludGVycG9sYXRlZFNlbGVjdG9yIG5vZGUsIEEgYXJnKTsKICBSIHZpc2l0SW50ZXJwb2xhdGVkU3RhdGVtZW50KEludGVycG9sYXRlZFN0YXRlbWVudCBub2RlLCBBIGFyZyk7CiAgUiB2aXNpdEludGVycG9sYXRlZERlY2xhcmF0aW9uKEludGVycG9sYXRlZERlY2xhcmF0aW9uIG5vZGUsIEEgYXJnKTsKfQoKY2xhc3MgQmFzZVZpc2l0b3IxPFIsIEE+IGltcGxlbWVudHMgTm9kZVZpc2l0b3IxPFIsIEE+IHsKICBjb25zdCBCYXNlVmlzaXRvcjEoKTsKCiAgUiB2aXNpdE5vZGUoTm9kZSBub2RlLCBBIGFyZykgewogICAgbm9kZS52aXNpdENoaWxkcmVuMSh0aGlzLCBhcmcpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBSIHZpc2l0UHJvZ3JhbShQcm9ncmFtIG5vZGUsIEEgYXJnKSA9PiB2aXNpdE5vZGUobm9kZSwgYXJnKTsKCiAgUiB2aXNpdFN0YXRlbWVudChTdGF0ZW1lbnQgbm9kZSwgQSBhcmcpID0+IHZpc2l0Tm9kZShub2RlLCBhcmcpOwogIFIgdmlzaXRMb29wKExvb3Agbm9kZSwgQSBhcmcpID0+IHZpc2l0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdEp1bXAoU3RhdGVtZW50IG5vZGUsIEEgYXJnKSA9PiB2aXNpdFN0YXRlbWVudChub2RlLCBhcmcpOwoKICBSIHZpc2l0QmxvY2soQmxvY2sgbm9kZSwgQSBhcmcpID0+IHZpc2l0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnQoRXhwcmVzc2lvblN0YXRlbWVudCBub2RlLCBBIGFyZykgPT4KICAgICAgdmlzaXRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0RW1wdHlTdGF0ZW1lbnQoRW1wdHlTdGF0ZW1lbnQgbm9kZSwgQSBhcmcpID0+CiAgICAgIHZpc2l0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdElmKElmIG5vZGUsIEEgYXJnKSA9PiB2aXNpdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRGb3IoRm9yIG5vZGUsIEEgYXJnKSA9PiB2aXNpdExvb3Aobm9kZSwgYXJnKTsKICBSIHZpc2l0Rm9ySW4oRm9ySW4gbm9kZSwgQSBhcmcpID0+IHZpc2l0TG9vcChub2RlLCBhcmcpOwogIFIgdmlzaXRXaGlsZShXaGlsZSBub2RlLCBBIGFyZykgPT4gdmlzaXRMb29wKG5vZGUsIGFyZyk7CiAgUiB2aXNpdERvKERvIG5vZGUsIEEgYXJnKSA9PiB2aXNpdExvb3Aobm9kZSwgYXJnKTsKICBSIHZpc2l0Q29udGludWUoQ29udGludWUgbm9kZSwgQSBhcmcpID0+IHZpc2l0SnVtcChub2RlLCBhcmcpOwogIFIgdmlzaXRCcmVhayhCcmVhayBub2RlLCBBIGFyZykgPT4gdmlzaXRKdW1wKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFJldHVybihSZXR1cm4gbm9kZSwgQSBhcmcpID0+IHZpc2l0SnVtcChub2RlLCBhcmcpOwogIFIgdmlzaXRUaHJvdyhUaHJvdyBub2RlLCBBIGFyZykgPT4gdmlzaXRKdW1wKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFRyeShUcnkgbm9kZSwgQSBhcmcpID0+IHZpc2l0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdFN3aXRjaChTd2l0Y2ggbm9kZSwgQSBhcmcpID0+IHZpc2l0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiBub2RlLCBBIGFyZykgPT4KICAgICAgdmlzaXRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0TGFiZWxlZFN0YXRlbWVudChMYWJlbGVkU3RhdGVtZW50IG5vZGUsIEEgYXJnKSA9PgogICAgICB2aXNpdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRMaXRlcmFsU3RhdGVtZW50KExpdGVyYWxTdGF0ZW1lbnQgbm9kZSwgQSBhcmcpID0+CiAgICAgIHZpc2l0U3RhdGVtZW50KG5vZGUsIGFyZyk7CgogIFIgdmlzaXRDYXRjaChDYXRjaCBub2RlLCBBIGFyZykgPT4gdmlzaXROb2RlKG5vZGUsIGFyZyk7CiAgUiB2aXNpdENhc2UoQ2FzZSBub2RlLCBBIGFyZykgPT4gdmlzaXROb2RlKG5vZGUsIGFyZyk7CiAgUiB2aXNpdERlZmF1bHQoRGVmYXVsdCBub2RlLCBBIGFyZykgPT4gdmlzaXROb2RlKG5vZGUsIGFyZyk7CgogIFIgdmlzaXRFeHByZXNzaW9uKEV4cHJlc3Npb24gbm9kZSwgQSBhcmcpID0+IHZpc2l0Tm9kZShub2RlLCBhcmcpOwogIFIgdmlzaXRWYXJpYWJsZVJlZmVyZW5jZShWYXJpYWJsZVJlZmVyZW5jZSBub2RlLCBBIGFyZykgPT4KICAgICAgdmlzaXRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CgogIFIgdmlzaXRMaXRlcmFsRXhwcmVzc2lvbihMaXRlcmFsRXhwcmVzc2lvbiBub2RlLCBBIGFyZykgPT4KICAgICAgdmlzaXRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0IG5vZGUsIEEgYXJnKSA9PgogICAgICB2aXNpdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0QXNzaWdubWVudChBc3NpZ25tZW50IG5vZGUsIEEgYXJnKSA9PiB2aXNpdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0VmFyaWFibGVJbml0aWFsaXphdGlvbihWYXJpYWJsZUluaXRpYWxpemF0aW9uIG5vZGUsIEEgYXJnKSB7CiAgICBpZiAobm9kZS52YWx1ZSAhPSBudWxsKSB7CiAgICAgIHJldHVybiB2aXNpdEFzc2lnbm1lbnQobm9kZSwgYXJnKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB2aXNpdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICAgIH0KICB9CgogIFIgdmlzaXRDb25kaXRpb25hbChDb25kaXRpb25hbCBub2RlLCBBIGFyZykgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdE5ldyhOZXcgbm9kZSwgQSBhcmcpID0+IHZpc2l0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRDYWxsKENhbGwgbm9kZSwgQSBhcmcpID0+IHZpc2l0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRCaW5hcnkoQmluYXJ5IG5vZGUsIEEgYXJnKSA9PiB2aXNpdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0UHJlZml4KFByZWZpeCBub2RlLCBBIGFyZykgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFBvc3RmaXgoUG9zdGZpeCBub2RlLCBBIGFyZykgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdEFjY2VzcyhQcm9wZXJ0eUFjY2VzcyBub2RlLCBBIGFyZykgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CgogIFIgdmlzaXRWYXJpYWJsZVVzZShWYXJpYWJsZVVzZSBub2RlLCBBIGFyZykgPT4KICAgICAgdmlzaXRWYXJpYWJsZVJlZmVyZW5jZShub2RlLCBhcmcpOwogIFIgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSwgQSBhcmcpID0+CiAgICAgIHZpc2l0VmFyaWFibGVSZWZlcmVuY2Uobm9kZSwgYXJnKTsKICBSIHZpc2l0UGFyYW1ldGVyKFBhcmFtZXRlciBub2RlLCBBIGFyZykgPT4KICAgICAgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFRoaXMoVGhpcyBub2RlLCBBIGFyZykgPT4gdmlzaXRQYXJhbWV0ZXIobm9kZSwgYXJnKTsKCiAgUiB2aXNpdE5hbWVkRnVuY3Rpb24oTmFtZWRGdW5jdGlvbiBub2RlLCBBIGFyZykgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdEZ1bihGdW4gbm9kZSwgQSBhcmcpID0+IHZpc2l0RXhwcmVzc2lvbihub2RlLCBhcmcpOwoKICBSIHZpc2l0VG9rZW4oRGVmZXJyZWRUb2tlbiBub2RlLCBBIGFyZykgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CgogIFIgdmlzaXREZWZlcnJlZEV4cHJlc3Npb24oRGVmZXJyZWRFeHByZXNzaW9uIG5vZGUsIEEgYXJnKSA9PgogICAgICB2aXNpdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0RGVmZXJyZWROdW1iZXIoRGVmZXJyZWROdW1iZXIgbm9kZSwgQSBhcmcpID0+IHZpc2l0VG9rZW4obm9kZSwgYXJnKTsKICBSIHZpc2l0RGVmZXJyZWRTdHJpbmcoRGVmZXJyZWRTdHJpbmcgbm9kZSwgQSBhcmcpID0+IHZpc2l0VG9rZW4obm9kZSwgYXJnKTsKCiAgUiB2aXNpdExpdGVyYWwoTGl0ZXJhbCBub2RlLCBBIGFyZykgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CgogIFIgdmlzaXRMaXRlcmFsQm9vbChMaXRlcmFsQm9vbCBub2RlLCBBIGFyZykgPT4gdmlzaXRMaXRlcmFsKG5vZGUsIGFyZyk7CiAgUiB2aXNpdExpdGVyYWxTdHJpbmcoTGl0ZXJhbFN0cmluZyBub2RlLCBBIGFyZykgPT4gdmlzaXRMaXRlcmFsKG5vZGUsIGFyZyk7CiAgUiB2aXNpdExpdGVyYWxOdW1iZXIoTGl0ZXJhbE51bWJlciBub2RlLCBBIGFyZykgPT4gdmlzaXRMaXRlcmFsKG5vZGUsIGFyZyk7CiAgUiB2aXNpdExpdGVyYWxOdWxsKExpdGVyYWxOdWxsIG5vZGUsIEEgYXJnKSA9PiB2aXNpdExpdGVyYWwobm9kZSwgYXJnKTsKCiAgUiB2aXNpdFN0cmluZ0NvbmNhdGVuYXRpb24oU3RyaW5nQ29uY2F0ZW5hdGlvbiBub2RlLCBBIGFyZykgPT4KICAgICAgdmlzaXRMaXRlcmFsKG5vZGUsIGFyZyk7CgogIFIgdmlzaXROYW1lKE5hbWUgbm9kZSwgQSBhcmcpID0+IHZpc2l0Tm9kZShub2RlLCBhcmcpOwoKICBSIHZpc2l0UGFyZW50aGVzZXMoUGFyZW50aGVzZXMgbm9kZSwgQSBhcmcpID0+IHZpc2l0RXhwcmVzc2lvbihub2RlLCBhcmcpOwoKICBSIHZpc2l0QXJyYXlJbml0aWFsaXplcihBcnJheUluaXRpYWxpemVyIG5vZGUsIEEgYXJnKSA9PgogICAgICB2aXNpdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0QXJyYXlIb2xlKEFycmF5SG9sZSBub2RlLCBBIGFyZykgPT4gdmlzaXRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdE9iamVjdEluaXRpYWxpemVyKE9iamVjdEluaXRpYWxpemVyIG5vZGUsIEEgYXJnKSA9PgogICAgICB2aXNpdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0UHJvcGVydHkoUHJvcGVydHkgbm9kZSwgQSBhcmcpID0+IHZpc2l0Tm9kZShub2RlLCBhcmcpOwogIFIgdmlzaXRSZWdFeHBMaXRlcmFsKFJlZ0V4cExpdGVyYWwgbm9kZSwgQSBhcmcpID0+IHZpc2l0RXhwcmVzc2lvbihub2RlLCBhcmcpOwoKICBSIHZpc2l0SW50ZXJwb2xhdGVkTm9kZShJbnRlcnBvbGF0ZWROb2RlIG5vZGUsIEEgYXJnKSA9PiB2aXNpdE5vZGUobm9kZSwgYXJnKTsKCiAgUiB2aXNpdEludGVycG9sYXRlZEV4cHJlc3Npb24oSW50ZXJwb2xhdGVkRXhwcmVzc2lvbiBub2RlLCBBIGFyZykgPT4KICAgICAgdmlzaXRJbnRlcnBvbGF0ZWROb2RlKG5vZGUsIGFyZyk7CiAgUiB2aXNpdEludGVycG9sYXRlZExpdGVyYWwoSW50ZXJwb2xhdGVkTGl0ZXJhbCBub2RlLCBBIGFyZykgPT4KICAgICAgdmlzaXRJbnRlcnBvbGF0ZWROb2RlKG5vZGUsIGFyZyk7CiAgUiB2aXNpdEludGVycG9sYXRlZFBhcmFtZXRlcihJbnRlcnBvbGF0ZWRQYXJhbWV0ZXIgbm9kZSwgQSBhcmcpID0+CiAgICAgIHZpc2l0SW50ZXJwb2xhdGVkTm9kZShub2RlLCBhcmcpOwogIFIgdmlzaXRJbnRlcnBvbGF0ZWRTZWxlY3RvcihJbnRlcnBvbGF0ZWRTZWxlY3RvciBub2RlLCBBIGFyZykgPT4KICAgICAgdmlzaXRJbnRlcnBvbGF0ZWROb2RlKG5vZGUsIGFyZyk7CiAgUiB2aXNpdEludGVycG9sYXRlZFN0YXRlbWVudChJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQgbm9kZSwgQSBhcmcpID0+CiAgICAgIHZpc2l0SW50ZXJwb2xhdGVkTm9kZShub2RlLCBhcmcpOwogIFIgdmlzaXRJbnRlcnBvbGF0ZWREZWNsYXJhdGlvbihJbnRlcnBvbGF0ZWREZWNsYXJhdGlvbiBub2RlLCBBIGFyZykgewogICAgcmV0dXJuIHZpc2l0SW50ZXJwb2xhdGVkTm9kZShub2RlLCBhcmcpOwogIH0KCiAgLy8gSWdub3JlIGNvbW1lbnRzIGJ5IGRlZmF1bHQuCiAgUiB2aXNpdENvbW1lbnQoQ29tbWVudCBub2RlLCBBIGFyZykgPT4gbnVsbDsKCiAgUiB2aXNpdEF3YWl0KEF3YWl0IG5vZGUsIEEgYXJnKSA9PiB2aXNpdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0RGFydFlpZWxkKERhcnRZaWVsZCBub2RlLCBBIGFyZykgPT4gdmlzaXRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKfQoKLy8vIFRoaXMgdGFnIGludGVyZmFjZSBoYXMgbm8gYmVoYXZpb3VyIGJ1dCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGFueSBjbGFzcwovLy8gdGhhdCBpcyB0byBiZSBzdG9yZWQgb24gYSBbTm9kZV0gYXMgc291cmNlIGluZm9ybWF0aW9uLgphYnN0cmFjdCBjbGFzcyBKYXZhU2NyaXB0Tm9kZVNvdXJjZUluZm9ybWF0aW9uIHsKICBjb25zdCBKYXZhU2NyaXB0Tm9kZVNvdXJjZUluZm9ybWF0aW9uKCk7Cn0KCmFic3RyYWN0IGNsYXNzIE5vZGUgewogIEphdmFTY3JpcHROb2RlU291cmNlSW5mb3JtYXRpb24gZ2V0IHNvdXJjZUluZm9ybWF0aW9uID0+IF9zb3VyY2VJbmZvcm1hdGlvbjsKCiAgSmF2YVNjcmlwdE5vZGVTb3VyY2VJbmZvcm1hdGlvbiBfc291cmNlSW5mb3JtYXRpb247CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpOwogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZyk7CiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpOwoKICAvLyBTaGFsbG93IGNsb25lIG9mIG5vZGUuICBEb2VzIG5vdCBjbG9uZSBwb3NpdGlvbnMgc2luY2UgdGhlIG9ubHkgdXNlIG9mIHRoaXMKICAvLyBwcml2YXRlIG1ldGhvZCBpcyBjcmVhdGUgYSBjb3B5IHdpdGggYSBuZXcgcG9zaXRpb24uCiAgTm9kZSBfY2xvbmUoKTsKCiAgLy8gUmV0dXJucyBhIG5vZGUgZXF1aXZhbGVudCB0byBbdGhpc10sIGJ1dCB3aXRoIG5ldyBzb3VyY2UgcG9zaXRpb24gYW5kIGVuZAogIC8vIHNvdXJjZSBwb3NpdGlvbi4KICBOb2RlIHdpdGhTb3VyY2VJbmZvcm1hdGlvbigKICAgICAgSmF2YVNjcmlwdE5vZGVTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgaWYgKHNvdXJjZUluZm9ybWF0aW9uID09IF9zb3VyY2VJbmZvcm1hdGlvbikgewogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIE5vZGUgY2xvbmUgPSBfY2xvbmUoKTsKICAgIC8vIFRPRE8oc3JhKTogU2hvdWxkIGV4aXN0aW5nIGRhdGEgYmUgJ3N0aWNreScgaWYgd2UgdHJ5IHRvIG92ZXJ3cml0ZSB3aXRoCiAgICAvLyBgbnVsbGA/CiAgICBjbG9uZS5fc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgIHJldHVybiBjbG9uZTsKICB9CgogIFZhcmlhYmxlVXNlIGFzVmFyaWFibGVVc2UoKSA9PiBudWxsOwoKICBib29sIGdldCBpc0NvbW1hT3BlcmF0b3IgPT4gZmFsc2U7CgogIFN0YXRlbWVudCB0b1N0YXRlbWVudCgpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCd0b1N0YXRlbWVudCcpOwogIH0KCiAgU3RyaW5nIGRlYnVnUHJpbnQoKSA9PiBEZWJ1Z1ByaW50KHRoaXMpOwp9CgpjbGFzcyBQcm9ncmFtIGV4dGVuZHMgTm9kZSB7CiAgZmluYWwgTGlzdDxTdGF0ZW1lbnQ+IGJvZHk7CiAgUHJvZ3JhbSh0aGlzLmJvZHkpOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0UHJvZ3JhbSh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdFByb2dyYW0odGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIGZvciAoU3RhdGVtZW50IHN0YXRlbWVudCBpbiBib2R5KSBzdGF0ZW1lbnQuYWNjZXB0KHZpc2l0b3IpOwogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIGZvciAoU3RhdGVtZW50IHN0YXRlbWVudCBpbiBib2R5KSBzdGF0ZW1lbnQuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogIH0KCiAgUHJvZ3JhbSBfY2xvbmUoKSA9PiBuZXcgUHJvZ3JhbShib2R5KTsKfQoKYWJzdHJhY3QgY2xhc3MgU3RhdGVtZW50IGV4dGVuZHMgTm9kZSB7CiAgU3RhdGVtZW50IHRvU3RhdGVtZW50KCkgPT4gdGhpczsKfQoKY2xhc3MgQmxvY2sgZXh0ZW5kcyBTdGF0ZW1lbnQgewogIGZpbmFsIExpc3Q8U3RhdGVtZW50PiBzdGF0ZW1lbnRzOwoKICBCbG9jayh0aGlzLnN0YXRlbWVudHMpOwoKICBCbG9jay5lbXB0eSgpIDogdGhpcy5zdGF0ZW1lbnRzID0gPFN0YXRlbWVudD5bXTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEJsb2NrKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0QmxvY2sodGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIGZvciAoU3RhdGVtZW50IHN0YXRlbWVudCBpbiBzdGF0ZW1lbnRzKSBzdGF0ZW1lbnQuYWNjZXB0KHZpc2l0b3IpOwogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIGZvciAoU3RhdGVtZW50IHN0YXRlbWVudCBpbiBzdGF0ZW1lbnRzKSBzdGF0ZW1lbnQuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogIH0KCiAgQmxvY2sgX2Nsb25lKCkgPT4gbmV3IEJsb2NrKHN0YXRlbWVudHMpOwp9CgpjbGFzcyBFeHByZXNzaW9uU3RhdGVtZW50IGV4dGVuZHMgU3RhdGVtZW50IHsKICBmaW5hbCBFeHByZXNzaW9uIGV4cHJlc3Npb247CgogIEV4cHJlc3Npb25TdGF0ZW1lbnQodGhpcy5leHByZXNzaW9uKSB7CiAgICBhc3NlcnQodGhpcy5leHByZXNzaW9uICE9IG51bGwpOwogIH0KCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnQodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRFeHByZXNzaW9uU3RhdGVtZW50KHRoaXMsIGFyZyk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7CiAgICBleHByZXNzaW9uLmFjY2VwdCh2aXNpdG9yKTsKICB9CgogIHZvaWQgdmlzaXRDaGlsZHJlbjE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSB7CiAgICBleHByZXNzaW9uLmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICB9CgogIEV4cHJlc3Npb25TdGF0ZW1lbnQgX2Nsb25lKCkgPT4gbmV3IEV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcmVzc2lvbik7Cn0KCmNsYXNzIEVtcHR5U3RhdGVtZW50IGV4dGVuZHMgU3RhdGVtZW50IHsKICBFbXB0eVN0YXRlbWVudCgpOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0RW1wdHlTdGF0ZW1lbnQodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRFbXB0eVN0YXRlbWVudCh0aGlzLCBhcmcpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikge30KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHt9CgogIEVtcHR5U3RhdGVtZW50IF9jbG9uZSgpID0+IG5ldyBFbXB0eVN0YXRlbWVudCgpOwp9CgpjbGFzcyBJZiBleHRlbmRzIFN0YXRlbWVudCB7CiAgZmluYWwgRXhwcmVzc2lvbiBjb25kaXRpb247CiAgZmluYWwgU3RhdGVtZW50IHRoZW47CiAgZmluYWwgU3RhdGVtZW50IG90aGVyd2lzZTsKCiAgSWYodGhpcy5jb25kaXRpb24sIHRoaXMudGhlbiwgdGhpcy5vdGhlcndpc2UpOwoKICBJZi5ub0Vsc2UodGhpcy5jb25kaXRpb24sIHRoaXMudGhlbikgOiB0aGlzLm90aGVyd2lzZSA9IG5ldyBFbXB0eVN0YXRlbWVudCgpOwoKICBib29sIGdldCBoYXNFbHNlID0+IG90aGVyd2lzZSBpcyEgRW1wdHlTdGF0ZW1lbnQ7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRJZih0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdElmKHRoaXMsIGFyZyk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7CiAgICBjb25kaXRpb24uYWNjZXB0KHZpc2l0b3IpOwogICAgdGhlbi5hY2NlcHQodmlzaXRvcik7CiAgICBvdGhlcndpc2UuYWNjZXB0KHZpc2l0b3IpOwogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIGNvbmRpdGlvbi5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgICB0aGVuLmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICAgIG90aGVyd2lzZS5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgfQoKICBJZiBfY2xvbmUoKSA9PiBuZXcgSWYoY29uZGl0aW9uLCB0aGVuLCBvdGhlcndpc2UpOwp9CgphYnN0cmFjdCBjbGFzcyBMb29wIGV4dGVuZHMgU3RhdGVtZW50IHsKICBmaW5hbCBTdGF0ZW1lbnQgYm9keTsKCiAgTG9vcCh0aGlzLmJvZHkpOwp9CgpjbGFzcyBGb3IgZXh0ZW5kcyBMb29wIHsKICBmaW5hbCBFeHByZXNzaW9uIGluaXQ7CiAgZmluYWwgRXhwcmVzc2lvbiBjb25kaXRpb247CiAgZmluYWwgRXhwcmVzc2lvbiB1cGRhdGU7CgogIEZvcih0aGlzLmluaXQsIHRoaXMuY29uZGl0aW9uLCB0aGlzLnVwZGF0ZSwgU3RhdGVtZW50IGJvZHkpIDogc3VwZXIoYm9keSk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRGb3IodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRGb3IodGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIGlmIChpbml0ICE9IG51bGwpIGluaXQuYWNjZXB0KHZpc2l0b3IpOwogICAgaWYgKGNvbmRpdGlvbiAhPSBudWxsKSBjb25kaXRpb24uYWNjZXB0KHZpc2l0b3IpOwogICAgaWYgKHVwZGF0ZSAhPSBudWxsKSB1cGRhdGUuYWNjZXB0KHZpc2l0b3IpOwogICAgYm9keS5hY2NlcHQodmlzaXRvcik7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgaWYgKGluaXQgIT0gbnVsbCkgaW5pdC5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgICBpZiAoY29uZGl0aW9uICE9IG51bGwpIGNvbmRpdGlvbi5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgICBpZiAodXBkYXRlICE9IG51bGwpIHVwZGF0ZS5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgICBib2R5LmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICB9CgogIEZvciBfY2xvbmUoKSA9PiBuZXcgRm9yKGluaXQsIGNvbmRpdGlvbiwgdXBkYXRlLCBib2R5KTsKfQoKY2xhc3MgRm9ySW4gZXh0ZW5kcyBMb29wIHsKICAvLyBOb3RlIHRoYXQgW1ZhcmlhYmxlRGVjbGFyYXRpb25MaXN0XSBpcyBhIHN1YmNsYXNzIG9mIFtFeHByZXNzaW9uXS4KICAvLyBUaGVyZWZvcmUgd2UgY2FuIHR5cGUgdGhlIGxlZnRIYW5kU2lkZSBhcyBbRXhwcmVzc2lvbl0uCiAgZmluYWwgRXhwcmVzc2lvbiBsZWZ0SGFuZFNpZGU7CiAgZmluYWwgRXhwcmVzc2lvbiBvYmplY3Q7CgogIEZvckluKHRoaXMubGVmdEhhbmRTaWRlLCB0aGlzLm9iamVjdCwgU3RhdGVtZW50IGJvZHkpIDogc3VwZXIoYm9keSk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRGb3JJbih0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdEZvckluKHRoaXMsIGFyZyk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7CiAgICBsZWZ0SGFuZFNpZGUuYWNjZXB0KHZpc2l0b3IpOwogICAgb2JqZWN0LmFjY2VwdCh2aXNpdG9yKTsKICAgIGJvZHkuYWNjZXB0KHZpc2l0b3IpOwogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIGxlZnRIYW5kU2lkZS5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgICBvYmplY3QuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogICAgYm9keS5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgfQoKICBGb3JJbiBfY2xvbmUoKSA9PiBuZXcgRm9ySW4obGVmdEhhbmRTaWRlLCBvYmplY3QsIGJvZHkpOwp9CgpjbGFzcyBXaGlsZSBleHRlbmRzIExvb3AgewogIGZpbmFsIE5vZGUgY29uZGl0aW9uOwoKICBXaGlsZSh0aGlzLmNvbmRpdGlvbiwgU3RhdGVtZW50IGJvZHkpIDogc3VwZXIoYm9keSk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRXaGlsZSh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdFdoaWxlKHRoaXMsIGFyZyk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7CiAgICBjb25kaXRpb24uYWNjZXB0KHZpc2l0b3IpOwogICAgYm9keS5hY2NlcHQodmlzaXRvcik7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgY29uZGl0aW9uLmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICAgIGJvZHkuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogIH0KCiAgV2hpbGUgX2Nsb25lKCkgPT4gbmV3IFdoaWxlKGNvbmRpdGlvbiwgYm9keSk7Cn0KCmNsYXNzIERvIGV4dGVuZHMgTG9vcCB7CiAgZmluYWwgRXhwcmVzc2lvbiBjb25kaXRpb247CgogIERvKFN0YXRlbWVudCBib2R5LCB0aGlzLmNvbmRpdGlvbikgOiBzdXBlcihib2R5KTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdERvKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0RG8odGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIGJvZHkuYWNjZXB0KHZpc2l0b3IpOwogICAgY29uZGl0aW9uLmFjY2VwdCh2aXNpdG9yKTsKICB9CgogIHZvaWQgdmlzaXRDaGlsZHJlbjE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSB7CiAgICBib2R5LmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICAgIGNvbmRpdGlvbi5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgfQoKICBEbyBfY2xvbmUoKSA9PiBuZXcgRG8oYm9keSwgY29uZGl0aW9uKTsKfQoKY2xhc3MgQ29udGludWUgZXh0ZW5kcyBTdGF0ZW1lbnQgewogIGZpbmFsIFN0cmluZyB0YXJnZXRMYWJlbDsgLy8gQ2FuIGJlIG51bGwuCgogIENvbnRpbnVlKHRoaXMudGFyZ2V0TGFiZWwpOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0Q29udGludWUodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRDb250aW51ZSh0aGlzLCBhcmcpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikge30KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHt9CgogIENvbnRpbnVlIF9jbG9uZSgpID0+IG5ldyBDb250aW51ZSh0YXJnZXRMYWJlbCk7Cn0KCmNsYXNzIEJyZWFrIGV4dGVuZHMgU3RhdGVtZW50IHsKICBmaW5hbCBTdHJpbmcgdGFyZ2V0TGFiZWw7IC8vIENhbiBiZSBudWxsLgoKICBCcmVhayh0aGlzLnRhcmdldExhYmVsKTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEJyZWFrKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0QnJlYWsodGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHt9CgogIHZvaWQgdmlzaXRDaGlsZHJlbjE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSB7fQoKICBCcmVhayBfY2xvbmUoKSA9PiBuZXcgQnJlYWsodGFyZ2V0TGFiZWwpOwp9CgpjbGFzcyBSZXR1cm4gZXh0ZW5kcyBTdGF0ZW1lbnQgewogIGZpbmFsIEV4cHJlc3Npb24gdmFsdWU7IC8vIENhbiBiZSBudWxsLgoKICBSZXR1cm4oW3RoaXMudmFsdWUgPSBudWxsXSk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRSZXR1cm4odGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRSZXR1cm4odGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIGlmICh2YWx1ZSAhPSBudWxsKSB2YWx1ZS5hY2NlcHQodmlzaXRvcik7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgaWYgKHZhbHVlICE9IG51bGwpIHZhbHVlLmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICB9CgogIFJldHVybiBfY2xvbmUoKSA9PiBuZXcgUmV0dXJuKHZhbHVlKTsKfQoKY2xhc3MgVGhyb3cgZXh0ZW5kcyBTdGF0ZW1lbnQgewogIGZpbmFsIEV4cHJlc3Npb24gZXhwcmVzc2lvbjsKCiAgVGhyb3codGhpcy5leHByZXNzaW9uKTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFRocm93KHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0VGhyb3codGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIGV4cHJlc3Npb24uYWNjZXB0KHZpc2l0b3IpOwogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIGV4cHJlc3Npb24uYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogIH0KCiAgVGhyb3cgX2Nsb25lKCkgPT4gbmV3IFRocm93KGV4cHJlc3Npb24pOwp9CgpjbGFzcyBUcnkgZXh0ZW5kcyBTdGF0ZW1lbnQgewogIGZpbmFsIEJsb2NrIGJvZHk7CiAgZmluYWwgQ2F0Y2ggY2F0Y2hQYXJ0OyAvLyBDYW4gYmUgbnVsbCBpZiBbZmluYWxseVBhcnRdIGlzIG5vbi1udWxsLgogIGZpbmFsIEJsb2NrIGZpbmFsbHlQYXJ0OyAvLyBDYW4gYmUgbnVsbCBpZiBbY2F0Y2hQYXJ0XSBpcyBub24tbnVsbC4KCiAgVHJ5KHRoaXMuYm9keSwgdGhpcy5jYXRjaFBhcnQsIHRoaXMuZmluYWxseVBhcnQpIHsKICAgIGFzc2VydChjYXRjaFBhcnQgIT0gbnVsbCB8fCBmaW5hbGx5UGFydCAhPSBudWxsKTsKICB9CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRUcnkodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRUcnkodGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIGJvZHkuYWNjZXB0KHZpc2l0b3IpOwogICAgaWYgKGNhdGNoUGFydCAhPSBudWxsKSBjYXRjaFBhcnQuYWNjZXB0KHZpc2l0b3IpOwogICAgaWYgKGZpbmFsbHlQYXJ0ICE9IG51bGwpIGZpbmFsbHlQYXJ0LmFjY2VwdCh2aXNpdG9yKTsKICB9CgogIHZvaWQgdmlzaXRDaGlsZHJlbjE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSB7CiAgICBib2R5LmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICAgIGlmIChjYXRjaFBhcnQgIT0gbnVsbCkgY2F0Y2hQYXJ0LmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICAgIGlmIChmaW5hbGx5UGFydCAhPSBudWxsKSBmaW5hbGx5UGFydC5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgfQoKICBUcnkgX2Nsb25lKCkgPT4gbmV3IFRyeShib2R5LCBjYXRjaFBhcnQsIGZpbmFsbHlQYXJ0KTsKfQoKY2xhc3MgQ2F0Y2ggZXh0ZW5kcyBOb2RlIHsKICBmaW5hbCBEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbjsKICBmaW5hbCBCbG9jayBib2R5OwoKICBDYXRjaCh0aGlzLmRlY2xhcmF0aW9uLCB0aGlzLmJvZHkpOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0Q2F0Y2godGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRDYXRjaCh0aGlzLCBhcmcpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgewogICAgZGVjbGFyYXRpb24uYWNjZXB0KHZpc2l0b3IpOwogICAgYm9keS5hY2NlcHQodmlzaXRvcik7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgZGVjbGFyYXRpb24uYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogICAgYm9keS5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgfQoKICBDYXRjaCBfY2xvbmUoKSA9PiBuZXcgQ2F0Y2goZGVjbGFyYXRpb24sIGJvZHkpOwp9CgpjbGFzcyBTd2l0Y2ggZXh0ZW5kcyBTdGF0ZW1lbnQgewogIGZpbmFsIEV4cHJlc3Npb24ga2V5OwogIGZpbmFsIExpc3Q8U3dpdGNoQ2xhdXNlPiBjYXNlczsKCiAgU3dpdGNoKHRoaXMua2V5LCB0aGlzLmNhc2VzKTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFN3aXRjaCh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdFN3aXRjaCh0aGlzLCBhcmcpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgewogICAga2V5LmFjY2VwdCh2aXNpdG9yKTsKICAgIGZvciAoU3dpdGNoQ2xhdXNlIGNsYXVzZSBpbiBjYXNlcykgY2xhdXNlLmFjY2VwdCh2aXNpdG9yKTsKICB9CgogIHZvaWQgdmlzaXRDaGlsZHJlbjE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSB7CiAgICBrZXkuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogICAgZm9yIChTd2l0Y2hDbGF1c2UgY2xhdXNlIGluIGNhc2VzKSBjbGF1c2UuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogIH0KCiAgU3dpdGNoIF9jbG9uZSgpID0+IG5ldyBTd2l0Y2goa2V5LCBjYXNlcyk7Cn0KCmFic3RyYWN0IGNsYXNzIFN3aXRjaENsYXVzZSBleHRlbmRzIE5vZGUgewogIGZpbmFsIEJsb2NrIGJvZHk7CgogIFN3aXRjaENsYXVzZSh0aGlzLmJvZHkpOwp9CgpjbGFzcyBDYXNlIGV4dGVuZHMgU3dpdGNoQ2xhdXNlIHsKICBmaW5hbCBFeHByZXNzaW9uIGV4cHJlc3Npb247CgogIENhc2UodGhpcy5leHByZXNzaW9uLCBCbG9jayBib2R5KSA6IHN1cGVyKGJvZHkpOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0Q2FzZSh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdENhc2UodGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIGV4cHJlc3Npb24uYWNjZXB0KHZpc2l0b3IpOwogICAgYm9keS5hY2NlcHQodmlzaXRvcik7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgZXhwcmVzc2lvbi5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgICBib2R5LmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICB9CgogIENhc2UgX2Nsb25lKCkgPT4gbmV3IENhc2UoZXhwcmVzc2lvbiwgYm9keSk7Cn0KCmNsYXNzIERlZmF1bHQgZXh0ZW5kcyBTd2l0Y2hDbGF1c2UgewogIERlZmF1bHQoQmxvY2sgYm9keSkgOiBzdXBlcihib2R5KTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdERlZmF1bHQodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXREZWZhdWx0KHRoaXMsIGFyZyk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7CiAgICBib2R5LmFjY2VwdCh2aXNpdG9yKTsKICB9CgogIHZvaWQgdmlzaXRDaGlsZHJlbjE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSB7CiAgICBib2R5LmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICB9CgogIERlZmF1bHQgX2Nsb25lKCkgPT4gbmV3IERlZmF1bHQoYm9keSk7Cn0KCmNsYXNzIEZ1bmN0aW9uRGVjbGFyYXRpb24gZXh0ZW5kcyBTdGF0ZW1lbnQgewogIGZpbmFsIERlY2xhcmF0aW9uIG5hbWU7CiAgZmluYWwgRnVuIGZ1bmN0aW9uOwoKICBGdW5jdGlvbkRlY2xhcmF0aW9uKHRoaXMubmFtZSwgdGhpcy5mdW5jdGlvbik7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRGdW5jdGlvbkRlY2xhcmF0aW9uKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbih0aGlzLCBhcmcpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgewogICAgbmFtZS5hY2NlcHQodmlzaXRvcik7CiAgICBmdW5jdGlvbi5hY2NlcHQodmlzaXRvcik7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgbmFtZS5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgICBmdW5jdGlvbi5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgfQoKICBGdW5jdGlvbkRlY2xhcmF0aW9uIF9jbG9uZSgpID0+IG5ldyBGdW5jdGlvbkRlY2xhcmF0aW9uKG5hbWUsIGZ1bmN0aW9uKTsKfQoKY2xhc3MgTGFiZWxlZFN0YXRlbWVudCBleHRlbmRzIFN0YXRlbWVudCB7CiAgZmluYWwgU3RyaW5nIGxhYmVsOwogIGZpbmFsIFN0YXRlbWVudCBib2R5OwoKICBMYWJlbGVkU3RhdGVtZW50KHRoaXMubGFiZWwsIHRoaXMuYm9keSk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRMYWJlbGVkU3RhdGVtZW50KHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0TGFiZWxlZFN0YXRlbWVudCh0aGlzLCBhcmcpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgewogICAgYm9keS5hY2NlcHQodmlzaXRvcik7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgYm9keS5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgfQoKICBMYWJlbGVkU3RhdGVtZW50IF9jbG9uZSgpID0+IG5ldyBMYWJlbGVkU3RhdGVtZW50KGxhYmVsLCBib2R5KTsKfQoKY2xhc3MgTGl0ZXJhbFN0YXRlbWVudCBleHRlbmRzIFN0YXRlbWVudCB7CiAgZmluYWwgU3RyaW5nIGNvZGU7CgogIExpdGVyYWxTdGF0ZW1lbnQodGhpcy5jb2RlKTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdExpdGVyYWxTdGF0ZW1lbnQodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRMaXRlcmFsU3RhdGVtZW50KHRoaXMsIGFyZyk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7fQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykge30KCiAgTGl0ZXJhbFN0YXRlbWVudCBfY2xvbmUoKSA9PiBuZXcgTGl0ZXJhbFN0YXRlbWVudChjb2RlKTsKfQoKLy8gTm90IGEgcmVhbCBKYXZhU2NyaXB0IG5vZGUsIGJ1dCByZXByZXNlbnRzIHRoZSB5aWVsZCBzdGF0ZW1lbnQgZnJvbSBhIGRhcnQKLy8gcHJvZ3JhbSB0cmFuc2xhdGVkIHRvIEphdmFTY3JpcHQuCmNsYXNzIERhcnRZaWVsZCBleHRlbmRzIFN0YXRlbWVudCB7CiAgZmluYWwgRXhwcmVzc2lvbiBleHByZXNzaW9uOwoKICBmaW5hbCBib29sIGhhc1N0YXI7CgogIERhcnRZaWVsZCh0aGlzLmV4cHJlc3Npb24sIHRoaXMuaGFzU3Rhcik7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXREYXJ0WWllbGQodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXREYXJ0WWllbGQodGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIGV4cHJlc3Npb24uYWNjZXB0KHZpc2l0b3IpOwogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIGV4cHJlc3Npb24uYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogIH0KCiAgRGFydFlpZWxkIF9jbG9uZSgpID0+IG5ldyBEYXJ0WWllbGQoZXhwcmVzc2lvbiwgaGFzU3Rhcik7Cn0KCmFic3RyYWN0IGNsYXNzIEV4cHJlc3Npb24gZXh0ZW5kcyBOb2RlIHsKICBpbnQgZ2V0IHByZWNlZGVuY2VMZXZlbDsKCiAgU3RhdGVtZW50IHRvU3RhdGVtZW50KCkgPT4gbmV3IEV4cHJlc3Npb25TdGF0ZW1lbnQodGhpcyk7Cn0KCmFic3RyYWN0IGNsYXNzIERlY2xhcmF0aW9uIGltcGxlbWVudHMgVmFyaWFibGVSZWZlcmVuY2Uge30KCi8vLyBBbiBpbXBsZW1lbnRhdGlvbiBvZiBbTmFtZV0gcmVwcmVzZW50cyBhIHBvdGVudGlhbGx5IGxhdGUgYm91bmQgbmFtZSBpbgovLy8gdGhlIGdlbmVyYXRlZCBhc3QuCi8vLwovLy8gV2hpbGUgW05hbWVdIGltcGxlbWVudHMgY29tcGFyYWJsZSwgdGhlcmUgaXMgbm8gcmVxdWlyZW1lbnQgb24gdGhlIGFjdHVhbAovLy8gaW1wbGVtZW50YXRpb24gb2YgW2NvbXBhcmVUb10gb3RoZXIgdGhhbiB0aGF0IGl0IG5lZWRzIHRvIGJlIHN0YWJsZS4KLy8vIEluIHBhcnRpY3VsYXIsIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGltcGxlbWVudGF0aW9ucyBvZiBbY29tcGFyZVRvXQovLy8gd2lsbCBpbXBsZW1lbnQgc29tZSBmb3JtIG9mIGxleGljb2dyYXBoaWMgb3JkZXJpbmcgbGlrZSBbU3RyaW5nLmNvbXBhcmVUb10uCmFic3RyYWN0IGNsYXNzIE5hbWUgZXh0ZW5kcyBMaXRlcmFsCiAgICBpbXBsZW1lbnRzIERlY2xhcmF0aW9uLCBQYXJhbWV0ZXIsIENvbXBhcmFibGU8TmFtZT4gewogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXROYW1lKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0TmFtZSh0aGlzLCBhcmcpOwoKICBOYW1lIF9jbG9uZSgpOwoKICAvLy8gUmV0dXJucyBhIHVuaXF1ZSBba2V5XSBmb3IgdGhpcyBuYW1lLgogIC8vLwogIC8vLyBUaGUga2V5IGlzIHVucmVsYXRlZCB0byB0aGUgYWN0dWFsIG5hbWUgYW5kIGlzIG5vdCBpbnRlbmRlZCBmb3IgaHVtYW4KICAvLy8gY29uc3VtcHRpb24uIEFzIHN1Y2gsIGl0IG1pZ2h0IGJlIGxvbmcgb3IgY3J5cHRpYy4KICBTdHJpbmcgZ2V0IGtleTsKCiAgYm9vbCBnZXQgYWxsb3dSZW5hbWUgPT4gZmFsc2U7Cn0KCmNsYXNzIExpdGVyYWxTdHJpbmdGcm9tTmFtZSBleHRlbmRzIExpdGVyYWxTdHJpbmcgewogIE5hbWUgbmFtZTsKCiAgTGl0ZXJhbFN0cmluZ0Zyb21OYW1lKHRoaXMubmFtZSkgOiBzdXBlcihudWxsKTsKCiAgU3RyaW5nIGdldCB2YWx1ZSA9PiAnIiR7bmFtZS5uYW1lfSInOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgewogICAgbmFtZS5hY2NlcHQodmlzaXRvcik7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgbmFtZS5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgfQp9CgpjbGFzcyBMaXRlcmFsRXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24gewogIGZpbmFsIFN0cmluZyB0ZW1wbGF0ZTsKICBmaW5hbCBMaXN0PEV4cHJlc3Npb24+IGlucHV0czsKCiAgTGl0ZXJhbEV4cHJlc3Npb24odGhpcy50ZW1wbGF0ZSkgOiBpbnB1dHMgPSBjb25zdCBbXTsKCiAgTGl0ZXJhbEV4cHJlc3Npb24ud2l0aERhdGEodGhpcy50ZW1wbGF0ZSwgdGhpcy5pbnB1dHMpOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0TGl0ZXJhbEV4cHJlc3Npb24odGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRMaXRlcmFsRXhwcmVzc2lvbih0aGlzLCBhcmcpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgewogICAgaWYgKGlucHV0cyAhPSBudWxsKSB7CiAgICAgIGZvciAoRXhwcmVzc2lvbiBleHByIGluIGlucHV0cykgZXhwci5hY2NlcHQodmlzaXRvcik7CiAgICB9CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgaWYgKGlucHV0cyAhPSBudWxsKSB7CiAgICAgIGZvciAoRXhwcmVzc2lvbiBleHByIGluIGlucHV0cykgZXhwci5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgICB9CiAgfQoKICBMaXRlcmFsRXhwcmVzc2lvbiBfY2xvbmUoKSA9PgogICAgICBuZXcgTGl0ZXJhbEV4cHJlc3Npb24ud2l0aERhdGEodGVtcGxhdGUsIGlucHV0cyk7CgogIC8vIENvZGUgdGhhdCB1c2VzIEpTIG11c3QgdGFrZSBjYXJlIG9mIG9wZXJhdG9yIHByZWNlZGVuY2VzLCBhbmQKICAvLyBwdXQgcGFyZW50aGVzaXMgaWYgbmVlZGVkLgogIGludCBnZXQgcHJlY2VkZW5jZUxldmVsID0+IFBSSU1BUlk7Cn0KCi8qKgogKiBbVmFyaWFibGVEZWNsYXJhdGlvbkxpc3RdIGlzIGEgc3ViY2xhc3Mgb2YgW0V4cHJlc3Npb25dIHRvIHNpbXBsaWZ5IHRoZQogKiBBU1QuCiAqLwpjbGFzcyBWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCBleHRlbmRzIEV4cHJlc3Npb24gewogIGZpbmFsIExpc3Q8VmFyaWFibGVJbml0aWFsaXphdGlvbj4gZGVjbGFyYXRpb25zOwoKICAvLy8gV2hlbiBwcmV0dHktcHJpbnRpbmcgYSBkZWNsYXJhdGlvbiBsaXN0IHdpdGggbXVsdGlwbGUgZGVjbGFyYXRpb25zIG92ZXIKICAvLy8gc2V2ZXJhbCBsaW5lcywgdGhlIGRlY2xhcmF0aW9ucyBhcmUgdXN1YWxseSBpbmRlbnRlZCB3aXRoIHJlc3BlY3QgdG8gdGhlCiAgLy8vIGB2YXJgIGtleXdvcmQuIFNldCBbaW5kZW50U3BsaXRzXSB0byBgZmFsc2VgIHRvIHN1cHByZXNzIHRoZSBpbmRlbnRhdGlvbi4KICBmaW5hbCBib29sIGluZGVudFNwbGl0czsKCiAgVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QodGhpcy5kZWNsYXJhdGlvbnMsIHt0aGlzLmluZGVudFNwbGl0cyA9IHRydWV9KTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4KICAgICAgdmlzaXRvci52aXNpdFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbkxpc3QodGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIGZvciAoVmFyaWFibGVJbml0aWFsaXphdGlvbiBkZWNsYXJhdGlvbiBpbiBkZWNsYXJhdGlvbnMpIHsKICAgICAgZGVjbGFyYXRpb24uYWNjZXB0KHZpc2l0b3IpOwogICAgfQogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIGZvciAoVmFyaWFibGVJbml0aWFsaXphdGlvbiBkZWNsYXJhdGlvbiBpbiBkZWNsYXJhdGlvbnMpIHsKICAgICAgZGVjbGFyYXRpb24uYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogICAgfQogIH0KCiAgVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QgX2Nsb25lKCkgPT4gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGRlY2xhcmF0aW9ucyk7CgogIGludCBnZXQgcHJlY2VkZW5jZUxldmVsID0+IEVYUFJFU1NJT047Cn0KCi8vLyBGb3JjZWQgcGFyZW50aGVzaXplZCBleHByZXNzaW9uLiBQcmV0dHktcHJpbnRpbmcgd2lsbCBlbWl0IHBhcmVudGhlc2VzIGJhc2VkCi8vLyBvbiBuZWVkLCBzbyB0aGlzIG5vZGUgaXMgdmVyeSByYXJlbHkgbmVlZGVkLgpjbGFzcyBQYXJlbnRoZXNlcyBleHRlbmRzIEV4cHJlc3Npb24gewogIGZpbmFsIEV4cHJlc3Npb24gZW5jbG9zZWQ7CgogIFBhcmVudGhlc2VzKHRoaXMuZW5jbG9zZWQpOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0UGFyZW50aGVzZXModGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRQYXJlbnRoZXNlcyh0aGlzLCBhcmcpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgewogICAgZW5jbG9zZWQuYWNjZXB0KHZpc2l0b3IpOwogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIGVuY2xvc2VkLmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICB9CgogIFBhcmVudGhlc2VzIF9jbG9uZSgpID0+IG5ldyBQYXJlbnRoZXNlcyhlbmNsb3NlZCk7CgogIGludCBnZXQgcHJlY2VkZW5jZUxldmVsID0+IFBSSU1BUlk7Cn0KCmNsYXNzIEFzc2lnbm1lbnQgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBmaW5hbCBFeHByZXNzaW9uIGxlZnRIYW5kU2lkZTsKICBmaW5hbCBTdHJpbmcgb3A7IC8vIE51bGwsIGlmIHRoZSBhc3NpZ25tZW50IGlzIG5vdCBjb21wb3VuZC4KICBmaW5hbCBFeHByZXNzaW9uIHZhbHVlOyAvLyBNYXkgYmUgbnVsbCwgZm9yIFtWYXJpYWJsZUluaXRpYWxpemF0aW9uXXMuCgogIEFzc2lnbm1lbnQobGVmdEhhbmRTaWRlLCB2YWx1ZSkgOiB0aGlzLmNvbXBvdW5kKGxlZnRIYW5kU2lkZSwgbnVsbCwgdmFsdWUpOwoKICAvLyBJZiBgdGhpcy5vcCA9PSBudWxsYCB0aGlzIHdpbGwgYmUgYSBub24tY29tcG91bmQgYXNzaWdubWVudC4KICBBc3NpZ25tZW50LmNvbXBvdW5kKHRoaXMubGVmdEhhbmRTaWRlLCB0aGlzLm9wLCB0aGlzLnZhbHVlKTsKCiAgaW50IGdldCBwcmVjZWRlbmNlTGV2ZWwgPT4gQVNTSUdOTUVOVDsKCiAgYm9vbCBnZXQgaXNDb21wb3VuZCA9PiBvcCAhPSBudWxsOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0QXNzaWdubWVudCh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdEFzc2lnbm1lbnQodGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIGxlZnRIYW5kU2lkZS5hY2NlcHQodmlzaXRvcik7CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgdmFsdWUuYWNjZXB0KHZpc2l0b3IpOwogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIGxlZnRIYW5kU2lkZS5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgdmFsdWUuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogIH0KCiAgQXNzaWdubWVudCBfY2xvbmUoKSA9PiBuZXcgQXNzaWdubWVudC5jb21wb3VuZChsZWZ0SGFuZFNpZGUsIG9wLCB2YWx1ZSk7Cn0KCmNsYXNzIFZhcmlhYmxlSW5pdGlhbGl6YXRpb24gZXh0ZW5kcyBBc3NpZ25tZW50IHsKICAvKiogW3ZhbHVlXSBtYXkgYmUgbnVsbC4gKi8KICBWYXJpYWJsZUluaXRpYWxpemF0aW9uKERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uLCBFeHByZXNzaW9uIHZhbHVlKQogICAgICA6IHN1cGVyKGRlY2xhcmF0aW9uLCB2YWx1ZSk7CgogIERlY2xhcmF0aW9uIGdldCBkZWNsYXJhdGlvbiA9PiBsZWZ0SGFuZFNpZGU7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+CiAgICAgIHZpc2l0b3IudmlzaXRWYXJpYWJsZUluaXRpYWxpemF0aW9uKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0VmFyaWFibGVJbml0aWFsaXphdGlvbih0aGlzLCBhcmcpOwoKICBWYXJpYWJsZUluaXRpYWxpemF0aW9uIF9jbG9uZSgpID0+CiAgICAgIG5ldyBWYXJpYWJsZUluaXRpYWxpemF0aW9uKGRlY2xhcmF0aW9uLCB2YWx1ZSk7Cn0KCmNsYXNzIENvbmRpdGlvbmFsIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgZmluYWwgRXhwcmVzc2lvbiBjb25kaXRpb247CiAgZmluYWwgRXhwcmVzc2lvbiB0aGVuOwogIGZpbmFsIEV4cHJlc3Npb24gb3RoZXJ3aXNlOwoKICBDb25kaXRpb25hbCh0aGlzLmNvbmRpdGlvbiwgdGhpcy50aGVuLCB0aGlzLm90aGVyd2lzZSk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRDb25kaXRpb25hbCh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdENvbmRpdGlvbmFsKHRoaXMsIGFyZyk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7CiAgICBjb25kaXRpb24uYWNjZXB0KHZpc2l0b3IpOwogICAgdGhlbi5hY2NlcHQodmlzaXRvcik7CiAgICBvdGhlcndpc2UuYWNjZXB0KHZpc2l0b3IpOwogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIGNvbmRpdGlvbi5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgICB0aGVuLmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICAgIG90aGVyd2lzZS5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgfQoKICBDb25kaXRpb25hbCBfY2xvbmUoKSA9PiBuZXcgQ29uZGl0aW9uYWwoY29uZGl0aW9uLCB0aGVuLCBvdGhlcndpc2UpOwoKICBpbnQgZ2V0IHByZWNlZGVuY2VMZXZlbCA9PiBBU1NJR05NRU5UOwp9CgpjbGFzcyBDYWxsIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgRXhwcmVzc2lvbiB0YXJnZXQ7CiAgTGlzdDxFeHByZXNzaW9uPiBhcmd1bWVudHM7CgogIENhbGwodGhpcy50YXJnZXQsIHRoaXMuYXJndW1lbnRzLAogICAgICB7SmF2YVNjcmlwdE5vZGVTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbn0pIHsKICAgIHRoaXMuX3NvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgfQoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0Q2FsbCh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdENhbGwodGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIHRhcmdldC5hY2NlcHQodmlzaXRvcik7CiAgICBmb3IgKEV4cHJlc3Npb24gYXJnIGluIGFyZ3VtZW50cykgewogICAgICBhcmcuYWNjZXB0KHZpc2l0b3IpOwogICAgfQogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIHRhcmdldC5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgICBmb3IgKEV4cHJlc3Npb24gYXJnIGluIGFyZ3VtZW50cykgewogICAgICBhcmcuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogICAgfQogIH0KCiAgQ2FsbCBfY2xvbmUoKSA9PiBuZXcgQ2FsbCh0YXJnZXQsIGFyZ3VtZW50cyk7CgogIGludCBnZXQgcHJlY2VkZW5jZUxldmVsID0+IENBTEw7Cn0KCmNsYXNzIE5ldyBleHRlbmRzIENhbGwgewogIE5ldyhFeHByZXNzaW9uIGNscywgTGlzdDxFeHByZXNzaW9uPiBhcmd1bWVudHMpIDogc3VwZXIoY2xzLCBhcmd1bWVudHMpOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0TmV3KHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0TmV3KHRoaXMsIGFyZyk7CgogIE5ldyBfY2xvbmUoKSA9PiBuZXcgTmV3KHRhcmdldCwgYXJndW1lbnRzKTsKfQoKY2xhc3MgQmluYXJ5IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgZmluYWwgU3RyaW5nIG9wOwogIGZpbmFsIEV4cHJlc3Npb24gbGVmdDsKICBmaW5hbCBFeHByZXNzaW9uIHJpZ2h0OwoKICBCaW5hcnkodGhpcy5vcCwgdGhpcy5sZWZ0LCB0aGlzLnJpZ2h0KTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEJpbmFyeSh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdEJpbmFyeSh0aGlzLCBhcmcpOwoKICBCaW5hcnkgX2Nsb25lKCkgPT4gbmV3IEJpbmFyeShvcCwgbGVmdCwgcmlnaHQpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgewogICAgbGVmdC5hY2NlcHQodmlzaXRvcik7CiAgICByaWdodC5hY2NlcHQodmlzaXRvcik7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgbGVmdC5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgICByaWdodC5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgfQoKICBib29sIGdldCBpc0NvbW1hT3BlcmF0b3IgPT4gb3AgPT0gJywnOwoKICBpbnQgZ2V0IHByZWNlZGVuY2VMZXZlbCB7CiAgICAvLyBUT0RPKGZsb2l0c2NoKTogc3dpdGNoIHRvIGNvbnN0YW50IG1hcC4KICAgIHN3aXRjaCAob3ApIHsKICAgICAgY2FzZSAiKiI6CiAgICAgIGNhc2UgIi8iOgogICAgICBjYXNlICIlIjoKICAgICAgICByZXR1cm4gTVVMVElQTElDQVRJVkU7CiAgICAgIGNhc2UgIisiOgogICAgICBjYXNlICItIjoKICAgICAgICByZXR1cm4gQURESVRJVkU7CiAgICAgIGNhc2UgIjw8IjoKICAgICAgY2FzZSAiPj4iOgogICAgICBjYXNlICI+Pj4iOgogICAgICAgIHJldHVybiBTSElGVDsKICAgICAgY2FzZSAiPCI6CiAgICAgIGNhc2UgIj4iOgogICAgICBjYXNlICI8PSI6CiAgICAgIGNhc2UgIj49IjoKICAgICAgY2FzZSAiaW5zdGFuY2VvZiI6CiAgICAgIGNhc2UgImluIjoKICAgICAgICByZXR1cm4gUkVMQVRJT05BTDsKICAgICAgY2FzZSAiPT0iOgogICAgICBjYXNlICI9PT0iOgogICAgICBjYXNlICIhPSI6CiAgICAgIGNhc2UgIiE9PSI6CiAgICAgICAgcmV0dXJuIEVRVUFMSVRZOwogICAgICBjYXNlICImIjoKICAgICAgICByZXR1cm4gQklUX0FORDsKICAgICAgY2FzZSAiXiI6CiAgICAgICAgcmV0dXJuIEJJVF9YT1I7CiAgICAgIGNhc2UgInwiOgogICAgICAgIHJldHVybiBCSVRfT1I7CiAgICAgIGNhc2UgIiYmIjoKICAgICAgICByZXR1cm4gTE9HSUNBTF9BTkQ7CiAgICAgIGNhc2UgInx8IjoKICAgICAgICByZXR1cm4gTE9HSUNBTF9PUjsKICAgICAgY2FzZSAnLCc6CiAgICAgICAgcmV0dXJuIEVYUFJFU1NJT047CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgIkludGVybmFsIEVycm9yOiBVbmhhbmRsZWQgYmluYXJ5IG9wZXJhdG9yOiAkb3AiOwogICAgfQogIH0KfQoKY2xhc3MgUHJlZml4IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgZmluYWwgU3RyaW5nIG9wOwogIGZpbmFsIEV4cHJlc3Npb24gYXJndW1lbnQ7CgogIFByZWZpeCh0aGlzLm9wLCB0aGlzLmFyZ3VtZW50KTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFByZWZpeCh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdFByZWZpeCh0aGlzLCBhcmcpOwoKICBQcmVmaXggX2Nsb25lKCkgPT4gbmV3IFByZWZpeChvcCwgYXJndW1lbnQpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgewogICAgYXJndW1lbnQuYWNjZXB0KHZpc2l0b3IpOwogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIGFyZ3VtZW50LmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICB9CgogIGludCBnZXQgcHJlY2VkZW5jZUxldmVsID0+IFVOQVJZOwp9CgpjbGFzcyBQb3N0Zml4IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgZmluYWwgU3RyaW5nIG9wOwogIGZpbmFsIEV4cHJlc3Npb24gYXJndW1lbnQ7CgogIFBvc3RmaXgodGhpcy5vcCwgdGhpcy5hcmd1bWVudCk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRQb3N0Zml4KHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0UG9zdGZpeCh0aGlzLCBhcmcpOwoKICBQb3N0Zml4IF9jbG9uZSgpID0+IG5ldyBQb3N0Zml4KG9wLCBhcmd1bWVudCk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7CiAgICBhcmd1bWVudC5hY2NlcHQodmlzaXRvcik7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgYXJndW1lbnQuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogIH0KCiAgaW50IGdldCBwcmVjZWRlbmNlTGV2ZWwgPT4gVU5BUlk7Cn0KCmFic3RyYWN0IGNsYXNzIFZhcmlhYmxlUmVmZXJlbmNlIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIFZhcmlhYmxlUmVmZXJlbmNlKHRoaXMubmFtZSkgewogICAgYXNzZXJ0KF9pZGVudGlmaWVyUkUuaGFzTWF0Y2gobmFtZSksICJOb24taWRlbnRpZmllciBuYW1lICckbmFtZSciKTsKICB9CgogIHN0YXRpYyBSZWdFeHAgX2lkZW50aWZpZXJSRSA9IG5ldyBSZWdFeHAocideW0EtWmEtel8kXVtBLVphLXpfJDAtOV0qJCcpOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKTsKCiAgaW50IGdldCBwcmVjZWRlbmNlTGV2ZWwgPT4gUFJJTUFSWTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHt9CgogIHZvaWQgdmlzaXRDaGlsZHJlbjE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSB7fQp9CgpjbGFzcyBWYXJpYWJsZVVzZSBleHRlbmRzIFZhcmlhYmxlUmVmZXJlbmNlIHsKICBWYXJpYWJsZVVzZShTdHJpbmcgbmFtZSkgOiBzdXBlcihuYW1lKTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFZhcmlhYmxlVXNlKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0VmFyaWFibGVVc2UodGhpcywgYXJnKTsKCiAgVmFyaWFibGVVc2UgX2Nsb25lKCkgPT4gbmV3IFZhcmlhYmxlVXNlKG5hbWUpOwoKICBWYXJpYWJsZVVzZSBhc1ZhcmlhYmxlVXNlKCkgPT4gdGhpczsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1ZhcmlhYmxlVXNlKCRuYW1lKSc7Cn0KCmNsYXNzIFZhcmlhYmxlRGVjbGFyYXRpb24gZXh0ZW5kcyBWYXJpYWJsZVJlZmVyZW5jZSBpbXBsZW1lbnRzIERlY2xhcmF0aW9uIHsKICBmaW5hbCBib29sIGFsbG93UmVuYW1lOwoKICBWYXJpYWJsZURlY2xhcmF0aW9uKFN0cmluZyBuYW1lLCB7dGhpcy5hbGxvd1JlbmFtZTogdHJ1ZX0pIDogc3VwZXIobmFtZSk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbih0aGlzLCBhcmcpOwoKICBWYXJpYWJsZURlY2xhcmF0aW9uIF9jbG9uZSgpID0+IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKG5hbWUpOwp9CgpjbGFzcyBQYXJhbWV0ZXIgZXh0ZW5kcyBWYXJpYWJsZURlY2xhcmF0aW9uIHsKICBQYXJhbWV0ZXIoU3RyaW5nIG5hbWUpIDogc3VwZXIobmFtZSk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRQYXJhbWV0ZXIodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRQYXJhbWV0ZXIodGhpcywgYXJnKTsKCiAgUGFyYW1ldGVyIF9jbG9uZSgpID0+IG5ldyBQYXJhbWV0ZXIobmFtZSk7Cn0KCmNsYXNzIFRoaXMgZXh0ZW5kcyBQYXJhbWV0ZXIgewogIFRoaXMoKSA6IHN1cGVyKCJ0aGlzIik7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRUaGlzKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0VGhpcyh0aGlzLCBhcmcpOwoKICBUaGlzIF9jbG9uZSgpID0+IG5ldyBUaGlzKCk7Cn0KCmNsYXNzIE5hbWVkRnVuY3Rpb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBmaW5hbCBEZWNsYXJhdGlvbiBuYW1lOwogIGZpbmFsIEZ1biBmdW5jdGlvbjsKCiAgTmFtZWRGdW5jdGlvbih0aGlzLm5hbWUsIHRoaXMuZnVuY3Rpb24pOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0TmFtZWRGdW5jdGlvbih0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdE5hbWVkRnVuY3Rpb24odGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIG5hbWUuYWNjZXB0KHZpc2l0b3IpOwogICAgZnVuY3Rpb24uYWNjZXB0KHZpc2l0b3IpOwogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIG5hbWUuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogICAgZnVuY3Rpb24uYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogIH0KCiAgTmFtZWRGdW5jdGlvbiBfY2xvbmUoKSA9PiBuZXcgTmFtZWRGdW5jdGlvbihuYW1lLCBmdW5jdGlvbik7CgogIGludCBnZXQgcHJlY2VkZW5jZUxldmVsID0+IExFRlRfSEFORF9TSURFOwp9CgpjbGFzcyBGdW4gZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBmaW5hbCBMaXN0PFBhcmFtZXRlcj4gcGFyYW1zOwogIGZpbmFsIEJsb2NrIGJvZHk7CiAgZmluYWwgQXN5bmNNb2RpZmllciBhc3luY01vZGlmaWVyOwoKICBGdW4odGhpcy5wYXJhbXMsIHRoaXMuYm9keSwge3RoaXMuYXN5bmNNb2RpZmllcjogQXN5bmNNb2RpZmllci5zeW5jfSk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRGdW4odGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRGdW4odGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIGZvciAoUGFyYW1ldGVyIHBhcmFtIGluIHBhcmFtcykgcGFyYW0uYWNjZXB0KHZpc2l0b3IpOwogICAgYm9keS5hY2NlcHQodmlzaXRvcik7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgZm9yIChQYXJhbWV0ZXIgcGFyYW0gaW4gcGFyYW1zKSBwYXJhbS5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgICBib2R5LmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICB9CgogIEZ1biBfY2xvbmUoKSA9PiBuZXcgRnVuKHBhcmFtcywgYm9keSwgYXN5bmNNb2RpZmllcjogYXN5bmNNb2RpZmllcik7CgogIGludCBnZXQgcHJlY2VkZW5jZUxldmVsID0+IExFRlRfSEFORF9TSURFOwp9CgpjbGFzcyBBc3luY01vZGlmaWVyIHsKICBmaW5hbCBpbnQgaW5kZXg7CiAgZmluYWwgYm9vbCBpc0FzeW5jOwogIGZpbmFsIGJvb2wgaXNZaWVsZGluZzsKICBmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb247CgogIGNvbnN0IEFzeW5jTW9kaWZpZXIodGhpcy5pbmRleCwgdGhpcy5kZXNjcmlwdGlvbiwKICAgICAge3RoaXMuaXNBc3luYywgdGhpcy5pc1lpZWxkaW5nfSk7CgogIHN0YXRpYyBjb25zdCBBc3luY01vZGlmaWVyIHN5bmMgPQogICAgICBjb25zdCBBc3luY01vZGlmaWVyKDAsICJzeW5jIiwgaXNBc3luYzogZmFsc2UsIGlzWWllbGRpbmc6IGZhbHNlKTsKICBzdGF0aWMgY29uc3QgQXN5bmNNb2RpZmllciBhc3luYyA9CiAgICAgIGNvbnN0IEFzeW5jTW9kaWZpZXIoMSwgImFzeW5jIiwgaXNBc3luYzogdHJ1ZSwgaXNZaWVsZGluZzogZmFsc2UpOwogIHN0YXRpYyBjb25zdCBBc3luY01vZGlmaWVyIGFzeW5jU3RhciA9CiAgICAgIGNvbnN0IEFzeW5jTW9kaWZpZXIoMiwgImFzeW5jKiIsIGlzQXN5bmM6IHRydWUsIGlzWWllbGRpbmc6IHRydWUpOwogIHN0YXRpYyBjb25zdCBBc3luY01vZGlmaWVyIHN5bmNTdGFyID0KICAgICAgY29uc3QgQXN5bmNNb2RpZmllcigzLCAic3luYyoiLCBpc0FzeW5jOiBmYWxzZSwgaXNZaWVsZGluZzogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBMaXN0PEFzeW5jTW9kaWZpZXI+IHZhbHVlcyA9IFtzeW5jLCBhc3luYywgYXN5bmNTdGFyLCBzeW5jU3Rhcl07CgogIFN0cmluZyB0b1N0cmluZygpID0+IGRlc2NyaXB0aW9uOwp9CgpjbGFzcyBQcm9wZXJ0eUFjY2VzcyBleHRlbmRzIEV4cHJlc3Npb24gewogIGZpbmFsIEV4cHJlc3Npb24gcmVjZWl2ZXI7CiAgZmluYWwgRXhwcmVzc2lvbiBzZWxlY3RvcjsKCiAgUHJvcGVydHlBY2Nlc3ModGhpcy5yZWNlaXZlciwgdGhpcy5zZWxlY3Rvcik7CgogIFByb3BlcnR5QWNjZXNzLmZpZWxkKHRoaXMucmVjZWl2ZXIsIFN0cmluZyBmaWVsZE5hbWUpCiAgICAgIDogc2VsZWN0b3IgPSBuZXcgTGl0ZXJhbFN0cmluZygnIiRmaWVsZE5hbWUiJyk7CgogIFByb3BlcnR5QWNjZXNzLmluZGV4ZWQodGhpcy5yZWNlaXZlciwgaW50IGluZGV4KQogICAgICA6IHNlbGVjdG9yID0gbmV3IExpdGVyYWxOdW1iZXIoJyRpbmRleCcpOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0QWNjZXNzKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0QWNjZXNzKHRoaXMsIGFyZyk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7CiAgICByZWNlaXZlci5hY2NlcHQodmlzaXRvcik7CiAgICBzZWxlY3Rvci5hY2NlcHQodmlzaXRvcik7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgcmVjZWl2ZXIuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogICAgc2VsZWN0b3IuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogIH0KCiAgUHJvcGVydHlBY2Nlc3MgX2Nsb25lKCkgPT4gbmV3IFByb3BlcnR5QWNjZXNzKHJlY2VpdmVyLCBzZWxlY3Rvcik7CgogIGludCBnZXQgcHJlY2VkZW5jZUxldmVsID0+IExFRlRfSEFORF9TSURFOwp9CgovLy8gQSBbRGVmZXJyZWRUb2tlbl0gaXMgYSBwbGFjZWhvbGRlciBmb3Igc29tZSBbRXhwcmVzc2lvbl0gdGhhdCBpcyBub3Qga25vd24KLy8vIGF0IGNvbnN0cnVjdGlvbiB0aW1lIG9mIGFuIGFzdC4gVW5saWtlIFtJbnRlcnBvbGF0ZWRFeHByZXNzaW9uXSwKLy8vIFtEZWZlcnJlZFRva2VuXSBpcyBub3QgbGltaXRlZCB0byB0ZW1wbGF0ZXMgYnV0IG1heSBhbHNvIG9jY3VyIGluCi8vLyBmdWxseSBpbnN0YW50aWF0ZWQgYXN0cy4KYWJzdHJhY3QgY2xhc3MgRGVmZXJyZWRUb2tlbiBleHRlbmRzIEV4cHJlc3Npb24gewogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7fQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykge30KCiAgRGVmZXJyZWRUb2tlbiBfY2xvbmUoKSA9PiB0aGlzOwp9CgovLy8gSW50ZXJmYWNlIGZvciBhIGRlZmVycmVkIGludGVnZXIgdmFsdWUuIEFuIGltcGxlbWVudGF0aW9uIGhhcyB0byBwcm92aWRlCi8vLyBhIHZhbHVlIHZpYSB0aGUgW3ZhbHVlXSBnZXR0ZXIgdGhlIGxhdGVzdCB3aGVuIHRoZSBhc3QgaXMgcHJpbnRlZC4KYWJzdHJhY3QgY2xhc3MgRGVmZXJyZWROdW1iZXIgZXh0ZW5kcyBEZWZlcnJlZFRva2VuIGltcGxlbWVudHMgTGl0ZXJhbCB7CiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdERlZmVycmVkTnVtYmVyKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0RGVmZXJyZWROdW1iZXIodGhpcywgYXJnKTsKCiAgaW50IGdldCB2YWx1ZTsKCiAgaW50IGdldCBwcmVjZWRlbmNlTGV2ZWwgPT4gdmFsdWUuaXNOZWdhdGl2ZSA/IFVOQVJZIDogUFJJTUFSWTsKfQoKLy8vIEludGVyZmFjZSBmb3IgYSBkZWZlcnJlZCBzdHJpbmcgdmFsdWUuIEFuIGltcGxlbWVudGF0aW9uIGhhcyB0byBwcm92aWRlCi8vLyBhIHZhbHVlIHZpYSB0aGUgW3ZhbHVlXSBnZXR0ZXIgdGhlIGxhdGVzdCB3aGVuIHRoZSBhc3QgaXMgcHJpbnRlZC4KYWJzdHJhY3QgY2xhc3MgRGVmZXJyZWRTdHJpbmcgZXh0ZW5kcyBEZWZlcnJlZFRva2VuIGltcGxlbWVudHMgTGl0ZXJhbCB7CiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdERlZmVycmVkU3RyaW5nKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0RGVmZXJyZWRTdHJpbmcodGhpcywgYXJnKTsKCiAgU3RyaW5nIGdldCB2YWx1ZTsKCiAgaW50IGdldCBwcmVjZWRlbmNlTGV2ZWwgPT4gUFJJTUFSWTsKfQoKLy8vIEludGVyZmFjZSBmb3IgYSBkZWZlcnJlZCBbRXhwcmVzc2lvbl0gdmFsdWUuIEFuIGltcGxlbWVudGF0aW9uIGhhcyB0byBwcm92aWRlCi8vLyBhIHZhbHVlIHZpYSB0aGUgW3ZhbHVlXSBnZXR0ZXIgdGhlIGxhdGVzdCB3aGVuIHRoZSBhc3QgaXMgcHJpbnRlZC4KLy8vIEFsc28sIFtwcmVjZWRlbmNlTGV2ZWxdIGhhcyB0byByZXR1cm4gdGhlIHNhbWUgdmFsdWUgdGhhdAovLy8gW3ZhbHVlLnByZWNlZGVuY2VMZXZlbF0gcmV0dXJucyBvbmNlIFt2YWx1ZV0gaXMgYm91bmQgdG8gYW4gW0V4cHJlc3Npb25dLgphYnN0cmFjdCBjbGFzcyBEZWZlcnJlZEV4cHJlc3Npb24gZXh0ZW5kcyBEZWZlcnJlZFRva2VuIHsKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0RGVmZXJyZWRFeHByZXNzaW9uKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0RGVmZXJyZWRFeHByZXNzaW9uKHRoaXMsIGFyZyk7CgogIEV4cHJlc3Npb24gZ2V0IHZhbHVlOwp9CgphYnN0cmFjdCBjbGFzcyBMaXRlcmFsIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHt9CgogIHZvaWQgdmlzaXRDaGlsZHJlbjE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSB7fQoKICBpbnQgZ2V0IHByZWNlZGVuY2VMZXZlbCA9PiBQUklNQVJZOwp9CgpjbGFzcyBMaXRlcmFsQm9vbCBleHRlbmRzIExpdGVyYWwgewogIGZpbmFsIGJvb2wgdmFsdWU7CgogIExpdGVyYWxCb29sKHRoaXMudmFsdWUpOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0TGl0ZXJhbEJvb2wodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRMaXRlcmFsQm9vbCh0aGlzLCBhcmcpOwoKICAvLyBbdmlzaXRDaGlsZHJlbl0gaW5oZXJpdGVkIGZyb20gW0xpdGVyYWxdLgoKICBMaXRlcmFsQm9vbCBfY2xvbmUoKSA9PiBuZXcgTGl0ZXJhbEJvb2wodmFsdWUpOwp9CgpjbGFzcyBMaXRlcmFsTnVsbCBleHRlbmRzIExpdGVyYWwgewogIExpdGVyYWxOdWxsKCk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRMaXRlcmFsTnVsbCh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdExpdGVyYWxOdWxsKHRoaXMsIGFyZyk7CgogIExpdGVyYWxOdWxsIF9jbG9uZSgpID0+IG5ldyBMaXRlcmFsTnVsbCgpOwp9CgpjbGFzcyBMaXRlcmFsU3RyaW5nIGV4dGVuZHMgTGl0ZXJhbCB7CiAgZmluYWwgU3RyaW5nIHZhbHVlOwoKICAvKioKICAgKiBDb25zdHJ1Y3RzIGEgTGl0ZXJhbFN0cmluZyBmcm9tIGEgc3RyaW5nIHZhbHVlLgogICAqCiAgICogVGhlIGNvbnN0cnVjdG9yIGRvZXMgbm90IGFkZCB0aGUgcmVxdWlyZWQgcXVvdGVzLiAgSWYgW3ZhbHVlXSBpcyBub3QKICAgKiBzdXJyb3VuZGVkIGJ5IHF1b3RlcyBhbmQgcHJvcGVybHkgZXNjYXBlZCwgdGhlIHJlc3VsdGluZyBvYmplY3QgaXMgaW52YWxpZAogICAqIGFzIGEgSlMgdmFsdWUuCiAgICoKICAgKiBUT0RPKHNyYSk6IEludHJvZHVjZSB2YXJpYW50cyBmb3Iga25vd24gdmFsaWQgc3RyaW5ncyB0aGF0IGRvbid0IGFsbG9jYXRlIGEKICAgKiBuZXcgc3RyaW5nIGp1c3QgdG8gYWRkIHF1b3Rlcy4KICAgKi8KICBMaXRlcmFsU3RyaW5nKHRoaXMudmFsdWUpOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0TGl0ZXJhbFN0cmluZyh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdExpdGVyYWxTdHJpbmcodGhpcywgYXJnKTsKCiAgTGl0ZXJhbFN0cmluZyBfY2xvbmUoKSA9PiBuZXcgTGl0ZXJhbFN0cmluZyh2YWx1ZSk7Cn0KCmNsYXNzIFN0cmluZ0NvbmNhdGVuYXRpb24gZXh0ZW5kcyBMaXRlcmFsIHsKICBmaW5hbCBMaXN0PExpdGVyYWw+IHBhcnRzOwoKICAvKioKICAgKiBDb25zdHJ1Y3RzIGEgU3RyaW5nQ29uY2F0ZW5hdGlvbiBmcm9tIGEgbGlzdCBvZiBMaXRlcmFsIGVsZW1lbnRzLgogICAqIFRoZSBjb25zdHJ1Y3RvciBkb2VzIG5vdCBhZGQgc3Vycm91bmRpbmcgcXVvdGVzIHRvIHRoZSByZXN1bHRpbmcKICAgKiBjb25jYXRlbmF0ZWQgc3RyaW5nLgogICAqLwogIFN0cmluZ0NvbmNhdGVuYXRpb24odGhpcy5wYXJ0cyk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbih0aGlzLCBhcmcpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgewogICAgZm9yIChMaXRlcmFsIHBhcnQgaW4gcGFydHMpIHBhcnQuYWNjZXB0KHZpc2l0b3IpOwogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIGZvciAoTGl0ZXJhbCBwYXJ0IGluIHBhcnRzKSBwYXJ0LmFjY2VwdDEodmlzaXRvciwgYXJnKTsKICB9CgogIFN0cmluZ0NvbmNhdGVuYXRpb24gX2Nsb25lKCkgPT4gbmV3IFN0cmluZ0NvbmNhdGVuYXRpb24odGhpcy5wYXJ0cyk7Cn0KCmNsYXNzIExpdGVyYWxOdW1iZXIgZXh0ZW5kcyBMaXRlcmFsIHsKICBmaW5hbCBTdHJpbmcgdmFsdWU7IC8vIE11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IG51bWJlciBsaXRlcmFsLgoKICBMaXRlcmFsTnVtYmVyKHRoaXMudmFsdWUpOwoKICBpbnQgZ2V0IHByZWNlZGVuY2VMZXZlbCA9PiB2YWx1ZS5zdGFydHNXaXRoKCctJykgPyBVTkFSWSA6IFBSSU1BUlk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRMaXRlcmFsTnVtYmVyKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0TGl0ZXJhbE51bWJlcih0aGlzLCBhcmcpOwoKICBMaXRlcmFsTnVtYmVyIF9jbG9uZSgpID0+IG5ldyBMaXRlcmFsTnVtYmVyKHZhbHVlKTsKfQoKY2xhc3MgQXJyYXlJbml0aWFsaXplciBleHRlbmRzIEV4cHJlc3Npb24gewogIGZpbmFsIExpc3Q8RXhwcmVzc2lvbj4gZWxlbWVudHM7CgogIEFycmF5SW5pdGlhbGl6ZXIodGhpcy5lbGVtZW50cykgOiBhc3NlcnQoIWVsZW1lbnRzLmNvbnRhaW5zKG51bGwpKTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEFycmF5SW5pdGlhbGl6ZXIodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRBcnJheUluaXRpYWxpemVyKHRoaXMsIGFyZyk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7CiAgICBmb3IgKEV4cHJlc3Npb24gZWxlbWVudCBpbiBlbGVtZW50cykgZWxlbWVudC5hY2NlcHQodmlzaXRvcik7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgewogICAgZm9yIChFeHByZXNzaW9uIGVsZW1lbnQgaW4gZWxlbWVudHMpIGVsZW1lbnQuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogIH0KCiAgQXJyYXlJbml0aWFsaXplciBfY2xvbmUoKSA9PiBuZXcgQXJyYXlJbml0aWFsaXplcihlbGVtZW50cyk7CgogIGludCBnZXQgcHJlY2VkZW5jZUxldmVsID0+IFBSSU1BUlk7Cn0KCi8qKgogKiBBbiBlbXB0eSBwbGFjZSBpbiBhbiBbQXJyYXlJbml0aWFsaXplcl0uCiAqIEZvciBleGFtcGxlIHRoZSBsaXN0IFsxLCAsICwgMl0gd291bGQgY29udGFpbiB0d28gaG9sZXMuCiAqLwpjbGFzcyBBcnJheUhvbGUgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0QXJyYXlIb2xlKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0QXJyYXlIb2xlKHRoaXMsIGFyZyk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7fQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykge30KCiAgQXJyYXlIb2xlIF9jbG9uZSgpID0+IG5ldyBBcnJheUhvbGUoKTsKCiAgaW50IGdldCBwcmVjZWRlbmNlTGV2ZWwgPT4gUFJJTUFSWTsKfQoKY2xhc3MgT2JqZWN0SW5pdGlhbGl6ZXIgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBmaW5hbCBMaXN0PFByb3BlcnR5PiBwcm9wZXJ0aWVzOwogIGZpbmFsIGJvb2wgaXNPbmVMaW5lcjsKCiAgLyoqCiAgICogQ29uc3RydWN0cyBhIG5ldyBvYmplY3QtaW5pdGlhbGl6ZXIgY29udGFpbmluZyB0aGUgZ2l2ZW4gW3Byb3BlcnRpZXNdLgogICAqCiAgICogW2lzT25lTGluZXJdIGRlc2NyaWJlcyB0aGUgYmVoYXZpb3VyIHdoZW4gcHJldHR5LXByaW50aW5nIChub24tbWluaWZpZWQpLgogICAqIElmIHRydWUgcHJpbnQgYWxsIHByb3BlcnRpZXMgb24gdGhlIHNhbWUgbGluZS4KICAgKiBJZiBmYWxzZSBwcmludCBlYWNoIHByb3BlcnR5IG9uIGEgc2VwZXJhdGUgbGluZS4KICAgKi8KICBPYmplY3RJbml0aWFsaXplcih0aGlzLnByb3BlcnRpZXMsIHt0aGlzLmlzT25lTGluZXI6IHRydWV9KTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdE9iamVjdEluaXRpYWxpemVyKHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0T2JqZWN0SW5pdGlhbGl6ZXIodGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIGZvciAoUHJvcGVydHkgaW5pdCBpbiBwcm9wZXJ0aWVzKSBpbml0LmFjY2VwdCh2aXNpdG9yKTsKICB9CgogIHZvaWQgdmlzaXRDaGlsZHJlbjE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSB7CiAgICBmb3IgKFByb3BlcnR5IGluaXQgaW4gcHJvcGVydGllcykgaW5pdC5hY2NlcHQxKHZpc2l0b3IsIGFyZyk7CiAgfQoKICBPYmplY3RJbml0aWFsaXplciBfY2xvbmUoKSA9PgogICAgICBuZXcgT2JqZWN0SW5pdGlhbGl6ZXIocHJvcGVydGllcywgaXNPbmVMaW5lcjogaXNPbmVMaW5lcik7CgogIGludCBnZXQgcHJlY2VkZW5jZUxldmVsID0+IFBSSU1BUlk7Cn0KCmNsYXNzIFByb3BlcnR5IGV4dGVuZHMgTm9kZSB7CiAgZmluYWwgRXhwcmVzc2lvbiBuYW1lOwogIGZpbmFsIEV4cHJlc3Npb24gdmFsdWU7CgogIFByb3BlcnR5KHRoaXMubmFtZSwgdGhpcy52YWx1ZSkKICAgICAgOiBhc3NlcnQobmFtZSBpcyBMaXRlcmFsIHx8IG5hbWUgaXMgRGVmZXJyZWRFeHByZXNzaW9uKTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFByb3BlcnR5KHRoaXMpOwoKICBSIGFjY2VwdDE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0UHJvcGVydHkodGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHsKICAgIG5hbWUuYWNjZXB0KHZpc2l0b3IpOwogICAgdmFsdWUuYWNjZXB0KHZpc2l0b3IpOwogIH0KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHsKICAgIG5hbWUuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogICAgdmFsdWUuYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwogIH0KCiAgUHJvcGVydHkgX2Nsb25lKCkgPT4gbmV3IFByb3BlcnR5KG5hbWUsIHZhbHVlKTsKfQoKLy8vIFRhZyBjbGFzcyBmb3IgYWxsIGludGVycG9sYXRlZCBwb3NpdGlvbnMuCmFic3RyYWN0IGNsYXNzIEludGVycG9sYXRlZE5vZGUgaW1wbGVtZW50cyBOb2RlIHsKICBnZXQgbmFtZU9yUG9zaXRpb247CgogIGJvb2wgZ2V0IGlzTmFtZWQgPT4gbmFtZU9yUG9zaXRpb24gaXMgU3RyaW5nOwoKICBib29sIGdldCBpc1Bvc2l0aW9uYWwgPT4gbmFtZU9yUG9zaXRpb24gaXMgaW50Owp9CgpjbGFzcyBJbnRlcnBvbGF0ZWRFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB3aXRoIEludGVycG9sYXRlZE5vZGUgewogIGZpbmFsIG5hbWVPclBvc2l0aW9uOwoKICBJbnRlcnBvbGF0ZWRFeHByZXNzaW9uKHRoaXMubmFtZU9yUG9zaXRpb24pOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PgogICAgICB2aXNpdG9yLnZpc2l0SW50ZXJwb2xhdGVkRXhwcmVzc2lvbih0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdEludGVycG9sYXRlZEV4cHJlc3Npb24odGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHt9CgogIHZvaWQgdmlzaXRDaGlsZHJlbjE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSB7fQoKICBJbnRlcnBvbGF0ZWRFeHByZXNzaW9uIF9jbG9uZSgpID0+IG5ldyBJbnRlcnBvbGF0ZWRFeHByZXNzaW9uKG5hbWVPclBvc2l0aW9uKTsKCiAgaW50IGdldCBwcmVjZWRlbmNlTGV2ZWwgPT4gUFJJTUFSWTsKfQoKY2xhc3MgSW50ZXJwb2xhdGVkTGl0ZXJhbCBleHRlbmRzIExpdGVyYWwgd2l0aCBJbnRlcnBvbGF0ZWROb2RlIHsKICBmaW5hbCBuYW1lT3JQb3NpdGlvbjsKCiAgSW50ZXJwb2xhdGVkTGl0ZXJhbCh0aGlzLm5hbWVPclBvc2l0aW9uKTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEludGVycG9sYXRlZExpdGVyYWwodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRJbnRlcnBvbGF0ZWRMaXRlcmFsKHRoaXMsIGFyZyk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7fQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykge30KCiAgSW50ZXJwb2xhdGVkTGl0ZXJhbCBfY2xvbmUoKSA9PiBuZXcgSW50ZXJwb2xhdGVkTGl0ZXJhbChuYW1lT3JQb3NpdGlvbik7Cn0KCmNsYXNzIEludGVycG9sYXRlZFBhcmFtZXRlciBleHRlbmRzIEV4cHJlc3Npb24KICAgIHdpdGggSW50ZXJwb2xhdGVkTm9kZQogICAgaW1wbGVtZW50cyBQYXJhbWV0ZXIgewogIGZpbmFsIG5hbWVPclBvc2l0aW9uOwoKICBJbnRlcnBvbGF0ZWRQYXJhbWV0ZXIodGhpcy5uYW1lT3JQb3NpdGlvbik7CgogIFN0cmluZyBnZXQgbmFtZSB7CiAgICB0aHJvdyAiSW50ZXJwb2xhdGVkUGFyYW1ldGVyLm5hbWUgbXVzdCBub3QgYmUgaW52b2tlZCI7CiAgfQoKICBib29sIGdldCBhbGxvd1JlbmFtZSA9PiBmYWxzZTsKCiAgVCBhY2NlcHQ8VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikgPT4KICAgICAgdmlzaXRvci52aXNpdEludGVycG9sYXRlZFBhcmFtZXRlcih0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdEludGVycG9sYXRlZFBhcmFtZXRlcih0aGlzLCBhcmcpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikge30KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHt9CgogIEludGVycG9sYXRlZFBhcmFtZXRlciBfY2xvbmUoKSA9PiBuZXcgSW50ZXJwb2xhdGVkUGFyYW1ldGVyKG5hbWVPclBvc2l0aW9uKTsKCiAgaW50IGdldCBwcmVjZWRlbmNlTGV2ZWwgPT4gUFJJTUFSWTsKfQoKY2xhc3MgSW50ZXJwb2xhdGVkU2VsZWN0b3IgZXh0ZW5kcyBFeHByZXNzaW9uIHdpdGggSW50ZXJwb2xhdGVkTm9kZSB7CiAgZmluYWwgbmFtZU9yUG9zaXRpb247CgogIEludGVycG9sYXRlZFNlbGVjdG9yKHRoaXMubmFtZU9yUG9zaXRpb24pOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PgogICAgICB2aXNpdG9yLnZpc2l0SW50ZXJwb2xhdGVkU2VsZWN0b3IodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRJbnRlcnBvbGF0ZWRTZWxlY3Rvcih0aGlzLCBhcmcpOwoKICB2b2lkIHZpc2l0Q2hpbGRyZW48VD4oTm9kZVZpc2l0b3I8VD4gdmlzaXRvcikge30KCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpIHt9CgogIEludGVycG9sYXRlZFNlbGVjdG9yIF9jbG9uZSgpID0+IG5ldyBJbnRlcnBvbGF0ZWRTZWxlY3RvcihuYW1lT3JQb3NpdGlvbik7CgogIGludCBnZXQgcHJlY2VkZW5jZUxldmVsID0+IFBSSU1BUlk7Cn0KCmNsYXNzIEludGVycG9sYXRlZFN0YXRlbWVudCBleHRlbmRzIFN0YXRlbWVudCB3aXRoIEludGVycG9sYXRlZE5vZGUgewogIGZpbmFsIG5hbWVPclBvc2l0aW9uOwoKICBJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQodGhpcy5uYW1lT3JQb3NpdGlvbik7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+CiAgICAgIHZpc2l0b3IudmlzaXRJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQodGhpcyk7CgogIFIgYWNjZXB0MTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQodGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHt9CgogIHZvaWQgdmlzaXRDaGlsZHJlbjE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSB7fQoKICBJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQgX2Nsb25lKCkgPT4gbmV3IEludGVycG9sYXRlZFN0YXRlbWVudChuYW1lT3JQb3NpdGlvbik7Cn0KCmNsYXNzIEludGVycG9sYXRlZERlY2xhcmF0aW9uIGV4dGVuZHMgRXhwcmVzc2lvbgogICAgd2l0aCBJbnRlcnBvbGF0ZWROb2RlCiAgICBpbXBsZW1lbnRzIERlY2xhcmF0aW9uIHsKICBmaW5hbCBuYW1lT3JQb3NpdGlvbjsKCiAgSW50ZXJwb2xhdGVkRGVjbGFyYXRpb24odGhpcy5uYW1lT3JQb3NpdGlvbik7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+CiAgICAgIHZpc2l0b3IudmlzaXRJbnRlcnBvbGF0ZWREZWNsYXJhdGlvbih0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdEludGVycG9sYXRlZERlY2xhcmF0aW9uKHRoaXMsIGFyZyk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSB7fQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4xPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykge30KCiAgSW50ZXJwb2xhdGVkRGVjbGFyYXRpb24gX2Nsb25lKCkgewogICAgcmV0dXJuIG5ldyBJbnRlcnBvbGF0ZWREZWNsYXJhdGlvbihuYW1lT3JQb3NpdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gdGhyb3cgIk5vIG5hbWUgZm9yIHRoZSBpbnRlcnBvbGF0ZWQgbm9kZSI7CgogIEBvdmVycmlkZQogIGludCBnZXQgcHJlY2VkZW5jZUxldmVsID0+IFBSSU1BUlk7Cn0KCi8qKgogKiBbUmVnRXhwTGl0ZXJhbF1zLCBkZXNwaXRlIGJlaW5nIGNhbGxlZCAiTGl0ZXJhbCIsIGRvIG5vdCBpbmhlcml0IGZyb20KICogW0xpdGVyYWxdLiBJbmRlZWQsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW4gSmF2YVNjcmlwdCBoYXZlIGEgc2lkZS1lZmZlY3QgYW5kCiAqIGFyZSB0aHVzIG5vdCBpbiB0aGUgc2FtZSBjYXRlZ29yeSBhcyBudW1iZXJzIG9yIHN0cmluZ3MuCiAqLwpjbGFzcyBSZWdFeHBMaXRlcmFsIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgLyoqIENvbnRhaW5zIHRoZSBwYXR0ZXJuIGFuZCB0aGUgZmxhZ3MuKi8KICBmaW5hbCBTdHJpbmcgcGF0dGVybjsKCiAgUmVnRXhwTGl0ZXJhbCh0aGlzLnBhdHRlcm4pOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0UmVnRXhwTGl0ZXJhbCh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdFJlZ0V4cExpdGVyYWwodGhpcywgYXJnKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHt9CgogIHZvaWQgdmlzaXRDaGlsZHJlbjE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+IHZpc2l0b3IsIEEgYXJnKSB7fQoKICBSZWdFeHBMaXRlcmFsIF9jbG9uZSgpID0+IG5ldyBSZWdFeHBMaXRlcmFsKHBhdHRlcm4pOwoKICBpbnQgZ2V0IHByZWNlZGVuY2VMZXZlbCA9PiBQUklNQVJZOwp9CgovKioKICogQW4gYXN5bmNocm9ub3VzIGF3YWl0LgogKgogKiBOb3QgcGFydCBvZiBKYXZhU2NyaXB0LiBXZSBkZXN1Z2FyIHRoaXMgZXhwcmVzc2lvbiBiZWZvcmUgb3V0cHV0dGluZy4KICogU2hvdWxkIG9ubHkgb2NjdXIgaW4gYSBbRnVuXSB3aXRoIGBhc3luY01vZGlmaWVyYCBhc3luYyBvciBhc3luY1N0YXIuCiAqLwpjbGFzcyBBd2FpdCBleHRlbmRzIEV4cHJlc3Npb24gewogIC8qKiBUaGUgYXdhaXRlZCBleHByZXNzaW9uLiAqLwogIGZpbmFsIEV4cHJlc3Npb24gZXhwcmVzc2lvbjsKCiAgQXdhaXQodGhpcy5leHByZXNzaW9uKTsKCiAgaW50IGdldCBwcmVjZWRlbmNlTGV2ZWwgPT4gVU5BUlk7CgogIFQgYWNjZXB0PFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRBd2FpdCh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdEF3YWl0KHRoaXMsIGFyZyk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbjxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiBleHByZXNzaW9uLmFjY2VwdCh2aXNpdG9yKTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuMTxSLCBBPihOb2RlVmlzaXRvcjE8UiwgQT4gdmlzaXRvciwgQSBhcmcpID0+CiAgICAgIGV4cHJlc3Npb24uYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwoKICBBd2FpdCBfY2xvbmUoKSA9PiBuZXcgQXdhaXQoZXhwcmVzc2lvbik7Cn0KCi8qKgogKiBBIGNvbW1lbnQuCiAqCiAqIEV4dGVuZHMgW1N0YXRlbWVudF0gc28gd2UgY2FuIGFkZCBjb21tZW50cyBiZWZvcmUgc3RhdGVtZW50cyBpbgogKiBbQmxvY2tdIGFuZCBbUHJvZ3JhbV0uCiAqLwpjbGFzcyBDb21tZW50IGV4dGVuZHMgU3RhdGVtZW50IHsKICBmaW5hbCBTdHJpbmcgY29tbWVudDsKCiAgQ29tbWVudCh0aGlzLmNvbW1lbnQpOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0Q29tbWVudCh0aGlzKTsKCiAgUiBhY2NlcHQxPFIsIEE+KE5vZGVWaXNpdG9yMTxSLCBBPiB2aXNpdG9yLCBBIGFyZykgPT4KICAgICAgdmlzaXRvci52aXNpdENvbW1lbnQodGhpcywgYXJnKTsKCiAgQ29tbWVudCBfY2xvbmUoKSA9PiBuZXcgQ29tbWVudChjb21tZW50KTsKCiAgdm9pZCB2aXNpdENoaWxkcmVuPFQ+KE5vZGVWaXNpdG9yPFQ+IHZpc2l0b3IpIHt9CgogIHZvaWQgdmlzaXRDaGlsZHJlbjE8UiwgQT4oTm9kZVZpc2l0b3IxPFIsIEE+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CmltcG9ydCAnLi4vdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydCcgc2hvdyBDYWxsU3RydWN0dXJlOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CgovLy8gW1N0cmluZ11zIGNvbW1vbmx5IHVzZWQuCmNsYXNzIElkZW50aWZpZXJzIHsKICAvLy8gVGhlIG5hbWUgb2YgdGhlIGNhbGwgb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBjYWxsID0gJ2NhbGwnOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZWxlbWVudCBwcm9wZXJ0eSB1c2VkIG9uIGl0ZXJhdG9ycyBpbiBmb3ItZWFjaAogIC8vLyBsb29wcy4KICBzdGF0aWMgY29uc3QgU3RyaW5nIGN1cnJlbnQgPSAnY3VycmVudCc7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGUgZnJvbSBlbnZpcm9ubWVudCBjb25zdHJ1Y3RvcnMgb24gJ2ludCcsICdib29sJyBhbmQKICAvLy8gJ1N0cmluZycuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBmcm9tRW52aXJvbm1lbnQgPSAnZnJvbUVudmlyb25tZW50JzsKCiAgLy8vIFRoZSBuYW1lIG9mIHRoZSBpdGVyYXRvciBwcm9wZXJ0eSB1c2VkIGluIGZvci1lYWNoIGxvb3BzLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgaXRlcmF0b3IgPSAnaXRlcmF0b3InOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlIGBsb2FkTGlicmFyeWAgZ2V0dGVyIGRlZmluZWQgb24gZGVmZXJyZWQgcHJlZml4ZXMuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBsb2FkTGlicmFyeSA9ICdsb2FkTGlicmFyeSc7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGUgbWFpbiBtZXRob2QuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBtYWluID0gJ21haW4nOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlIG5vIHN1Y2ggbWV0aG9kIGhhbmRsZXIgb24gJ09iamVjdCcuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBub1N1Y2hNZXRob2RfID0gJ25vU3VjaE1ldGhvZCc7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGUgcnVudGltZSB0eXBlIHByb3BlcnR5IG9uICdPYmplY3QnLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgcnVudGltZVR5cGVfID0gJ3J1bnRpbWVUeXBlJzsKCiAgLy8vIFRoZSBuYW1lIG9mIHRoZSBnZXR0ZXIgcmV0dXJuaW5nIHRoZSBzaXplIG9mIGNvbnRhaW5lcnMgYW5kIHN0cmluZ3MuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBsZW5ndGggPSAnbGVuZ3RoJzsKCiAgLy8vIFRoZSBuYW1lIG9mIHRoZSBzaWduYXR1cmUgZnVuY3Rpb24gaW4gY2xvc3VyZSBjbGFzc2VzLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgc2lnbmF0dXJlID0gJzpzaWduYXR1cmUnOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlICdKUycgZm9yZWlnbiBmdW5jdGlvbi4KICBzdGF0aWMgY29uc3QgU3RyaW5nIEpTID0gJ0pTJzsKCiAgLy8vIFRoZSBuYW1lIG9mIHRoZSAnSlNfQlVJTFRJTicgZm9yZWlnbiBmdW5jdGlvbi4KICBzdGF0aWMgY29uc3QgU3RyaW5nIEpTX0JVSUxUSU4gPSAnSlNfQlVJTFRJTic7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGUgJ0pTX0VNQkVEREVEX0dMT0JBTCcgZm9yZWlnbiBmdW5jdGlvbi4KICBzdGF0aWMgY29uc3QgU3RyaW5nIEpTX0VNQkVEREVEX0dMT0JBTCA9ICdKU19FTUJFRERFRF9HTE9CQUwnOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlICdKU19JTlRFUkNFUFRPUl9DT05TVEFOVCcgZm9yZWlnbiBmdW5jdGlvbi4KICBzdGF0aWMgY29uc3QgU3RyaW5nIEpTX0lOVEVSQ0VQVE9SX0NPTlNUQU5UID0gJ0pTX0lOVEVSQ0VQVE9SX0NPTlNUQU5UJzsKCiAgLy8vIFRoZSBuYW1lIG9mIHRoZSAnSlNfU1RSSU5HX0NPTkNBVCcgZm9yZWlnbiBmdW5jdGlvbi4KICBzdGF0aWMgY29uc3QgU3RyaW5nIEpTX1NUUklOR19DT05DQVQgPSAnSlNfU1RSSU5HX0NPTkNBVCc7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGUgJ0RBUlRfQ0xPU1VSRV9UT19KUycgZm9yZWlnbiBmdW5jdGlvbi4KICBzdGF0aWMgY29uc3QgU3RyaW5nIERBUlRfQ0xPU1VSRV9UT19KUyA9ICdEQVJUX0NMT1NVUkVfVE9fSlMnOwp9CgovLy8gW05hbWVdcyBjb21tb25seSB1c2VkLgpjbGFzcyBOYW1lcyB7CiAgLy8vIFRoZSBuYW1lIG9mIHRoZSBjYWxsIG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBOYW1lIGNhbGwgPSBjb25zdCBQdWJsaWNOYW1lKElkZW50aWZpZXJzLmNhbGwpOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZWxlbWVudCBwcm9wZXJ0eSB1c2VkIG9uIGl0ZXJhdG9ycyBpbiBmb3ItZWFjaAogIC8vLyBsb29wcy4KICBzdGF0aWMgY29uc3QgTmFtZSBjdXJyZW50ID0gY29uc3QgUHVibGljTmFtZShJZGVudGlmaWVycy5jdXJyZW50KTsKCiAgLy8vIFRoZSBuYW1lIG9mIHRoZSBkeW5hbWljIHR5cGUuCiAgc3RhdGljIGNvbnN0IE5hbWUgZHluYW1pY18gPSBjb25zdCBQdWJsaWNOYW1lKCdkeW5hbWljJyk7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGUgaXRlcmF0b3IgcHJvcGVydHkgdXNlZCBpbiBmb3ItZWFjaCBsb29wcy4KICBzdGF0aWMgY29uc3QgTmFtZSBpdGVyYXRvciA9IGNvbnN0IFB1YmxpY05hbWUoSWRlbnRpZmllcnMuaXRlcmF0b3IpOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlIG1vdmUgbmV4dCBtZXRob2QgdXNlZCBvbiBpdGVyYXRvcnMgaW4gZm9yLWVhY2ggbG9vcHMuCiAgc3RhdGljIGNvbnN0IE5hbWUgbW92ZU5leHQgPSBjb25zdCBQdWJsaWNOYW1lKCdtb3ZlTmV4dCcpOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlIG5vIHN1Y2ggbWV0aG9kIGhhbmRsZXIgb24gJ09iamVjdCcuCiAgc3RhdGljIGNvbnN0IE5hbWUgbm9TdWNoTWV0aG9kXyA9IGNvbnN0IFB1YmxpY05hbWUoSWRlbnRpZmllcnMubm9TdWNoTWV0aG9kXyk7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGUgdG8tc3RyaW5nIG1ldGhvZCBvbiAnT2JqZWN0Jy4KICBzdGF0aWMgY29uc3QgTmFtZSB0b1N0cmluZ18gPSBjb25zdCBQdWJsaWNOYW1lKCd0b1N0cmluZycpOwoKICBzdGF0aWMgY29uc3QgTmFtZSBJTkRFWF9OQU1FID0gY29uc3QgUHVibGljTmFtZSgiW10iKTsKICBzdGF0aWMgY29uc3QgTmFtZSBJTkRFWF9TRVRfTkFNRSA9IGNvbnN0IFB1YmxpY05hbWUoIltdPSIpOwogIHN0YXRpYyBjb25zdCBOYW1lIENBTExfTkFNRSA9IE5hbWVzLmNhbGw7CgogIHN0YXRpYyBjb25zdCBOYW1lIGxlbmd0aCA9IGNvbnN0IFB1YmxpY05hbWUoSWRlbnRpZmllcnMubGVuZ3RoKTsKCiAgc3RhdGljIGNvbnN0IE5hbWUgcnVudGltZVR5cGVfID0gY29uc3QgUHVibGljTmFtZShJZGVudGlmaWVycy5ydW50aW1lVHlwZV8pOwoKICBzdGF0aWMgY29uc3QgTmFtZSBnZW5lcmljSW5zdGFudGlhdGlvbiA9IGNvbnN0IFB1YmxpY05hbWUoJ2luc3RhbnRpYXRlJyk7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGUgc2lnbmF0dXJlIGZ1bmN0aW9uIGluIGNsb3N1cmUgY2xhc3Nlcy4KICBzdGF0aWMgY29uc3QgTmFtZSBzaWduYXR1cmUgPSBjb25zdCBQdWJsaWNOYW1lKElkZW50aWZpZXJzLnNpZ25hdHVyZSk7Cn0KCi8vLyBbU2VsZWN0b3JdcyBjb21tb25seSB1c2VkLgpjbGFzcyBTZWxlY3RvcnMgewogIC8vLyBUaGUgc2VsZWN0b3IgZm9yIGNhbGxpbmcgdGhlIGNhbmNlbCBtZXRob2Qgb24gJ1N0cmVhbUl0ZXJhdG9yJy4KICBzdGF0aWMgZmluYWwgU2VsZWN0b3IgY2FuY2VsID0KICAgICAgbmV3IFNlbGVjdG9yLmNhbGwoY29uc3QgUHVibGljTmFtZSgnY2FuY2VsJyksIENhbGxTdHJ1Y3R1cmUuTk9fQVJHUyk7CgogIC8vLyBUaGUgc2VsZWN0b3IgZm9yIGdldHRpbmcgdGhlIGN1cnJlbnQgZWxlbWVudCBwcm9wZXJ0eSB1c2VkIGluIGZvci1lYWNoCiAgLy8vIGxvb3BzLgogIHN0YXRpYyBmaW5hbCBTZWxlY3RvciBjdXJyZW50ID0gbmV3IFNlbGVjdG9yLmdldHRlcihOYW1lcy5jdXJyZW50KTsKCiAgLy8vIFRoZSBzZWxlY3RvciBmb3IgZ2V0dGluZyB0aGUgaXRlcmF0b3IgcHJvcGVydHkgdXNlZCBpbiBmb3ItZWFjaCBsb29wcy4KICBzdGF0aWMgZmluYWwgU2VsZWN0b3IgaXRlcmF0b3IgPSBuZXcgU2VsZWN0b3IuZ2V0dGVyKE5hbWVzLml0ZXJhdG9yKTsKCiAgLy8vIFRoZSBzZWxlY3RvciBmb3IgY2FsbGluZyB0aGUgbW92ZSBuZXh0IG1ldGhvZCB1c2VkIGluIGZvci1lYWNoIGxvb3BzLgogIHN0YXRpYyBmaW5hbCBTZWxlY3RvciBtb3ZlTmV4dCA9CiAgICAgIG5ldyBTZWxlY3Rvci5jYWxsKE5hbWVzLm1vdmVOZXh0LCBDYWxsU3RydWN0dXJlLk5PX0FSR1MpOwoKICAvLy8gVGhlIHNlbGVjdG9yIGZvciBjYWxsaW5nIHRoZSBubyBzdWNoIG1ldGhvZCBoYW5kbGVyIG9uICdPYmplY3QnLgogIHN0YXRpYyBmaW5hbCBTZWxlY3RvciBub1N1Y2hNZXRob2RfID0KICAgICAgbmV3IFNlbGVjdG9yLmNhbGwoTmFtZXMubm9TdWNoTWV0aG9kXywgQ2FsbFN0cnVjdHVyZS5PTkVfQVJHKTsKCiAgLy8vIFRoZSBzZWxlY3RvciBmb3IgdGVhcmluZyBvZmYgbm9TdWNoTWV0aG9kLgogIHN0YXRpYyBmaW5hbCBTZWxlY3RvciBub1N1Y2hNZXRob2RHZXR0ZXIgPQogICAgICBuZXcgU2VsZWN0b3IuZ2V0dGVyKE5hbWVzLm5vU3VjaE1ldGhvZF8pOwoKICAvLy8gVGhlIHNlbGVjdG9yIGZvciBjYWxsaW5nIHRoZSB0by1zdHJpbmcgbWV0aG9kIG9uICdPYmplY3QnLgogIHN0YXRpYyBmaW5hbCBTZWxlY3RvciB0b1N0cmluZ18gPQogICAgICBuZXcgU2VsZWN0b3IuY2FsbChOYW1lcy50b1N0cmluZ18sIENhbGxTdHJ1Y3R1cmUuTk9fQVJHUyk7CgogIC8vLyBUaGUgc2VsZWN0b3IgZm9yIHRlYXJpbmcgb2ZmIHRvU3RyaW5nLgogIHN0YXRpYyBmaW5hbCBTZWxlY3RvciB0b1N0cmluZ0dldHRlciA9IG5ldyBTZWxlY3Rvci5nZXR0ZXIoTmFtZXMudG9TdHJpbmdfKTsKCiAgc3RhdGljIGZpbmFsIFNlbGVjdG9yIGhhc2hDb2RlXyA9CiAgICAgIG5ldyBTZWxlY3Rvci5nZXR0ZXIoY29uc3QgUHVibGljTmFtZSgnaGFzaENvZGUnKSk7CgogIHN0YXRpYyBmaW5hbCBTZWxlY3RvciBjb21wYXJlVG8gPQogICAgICBuZXcgU2VsZWN0b3IuY2FsbChjb25zdCBQdWJsaWNOYW1lKCJjb21wYXJlVG8iKSwgQ2FsbFN0cnVjdHVyZS5PTkVfQVJHKTsKCiAgc3RhdGljIGZpbmFsIFNlbGVjdG9yIGVxdWFscyA9IG5ldyBTZWxlY3Rvci5iaW5hcnlPcGVyYXRvcignPT0nKTsKCiAgc3RhdGljIGZpbmFsIFNlbGVjdG9yIGxlbmd0aCA9IG5ldyBTZWxlY3Rvci5nZXR0ZXIoTmFtZXMubGVuZ3RoKTsKCiAgc3RhdGljIGZpbmFsIFNlbGVjdG9yIGNvZGVVbml0QXQgPQogICAgICBuZXcgU2VsZWN0b3IuY2FsbChjb25zdCBQdWJsaWNOYW1lKCdjb2RlVW5pdEF0JyksIENhbGxTdHJ1Y3R1cmUuT05FX0FSRyk7CgogIHN0YXRpYyBmaW5hbCBTZWxlY3RvciBpbmRleCA9IG5ldyBTZWxlY3Rvci5pbmRleCgpOwoKICBzdGF0aWMgZmluYWwgU2VsZWN0b3IgcnVudGltZVR5cGVfID0gbmV3IFNlbGVjdG9yLmdldHRlcihOYW1lcy5ydW50aW1lVHlwZV8pOwoKICAvLy8gTGlzdCBvZiBhbGwgdGhlIHNlbGVjdG9ycyBoZWxkIGluIHN0YXRpYyBmaWVsZHMuCiAgLy8vCiAgLy8vIFRoZXNlIG9iamVjdHMgYXJlIHNoYXJlZCBiZXR3ZWVuIGRpZmZlcmVudCBydW5zIGluIGJhdGNoLW1vZGUgYW5kIG11c3QKICAvLy8gdGh1cyByZW1haW4gaW4gdGhlIFtTZWxlY3Rvci5jYW5vbmljYWxpemVkVmFsdWVzXSBtYXAuCiAgc3RhdGljIGZpbmFsIExpc3Q8U2VsZWN0b3I+IEFMTCA9IDxTZWxlY3Rvcj5bCiAgICBjYW5jZWwsCiAgICBjdXJyZW50LAogICAgaXRlcmF0b3IsCiAgICBtb3ZlTmV4dCwKICAgIG5vU3VjaE1ldGhvZF8sCiAgICBub1N1Y2hNZXRob2RHZXR0ZXIsCiAgICB0b1N0cmluZ18sCiAgICB0b1N0cmluZ0dldHRlciwKICAgIGhhc2hDb2RlXywKICAgIGNvbXBhcmVUbywKICAgIGVxdWFscywKICAgIGxlbmd0aCwKICAgIGNvZGVVbml0QXQsCiAgICBpbmRleCwKICAgIHJ1bnRpbWVUeXBlXwogIF07Cn0KCi8vLyBbVXJpXXMgY29tbW9ubHkgdXNlZC4KY2xhc3MgVXJpcyB7CiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OmFzeW5jJy4KICBzdGF0aWMgZmluYWwgVXJpIGRhcnRfYXN5bmMgPSBuZXcgVXJpKHNjaGVtZTogJ2RhcnQnLCBwYXRoOiAnYXN5bmMnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OmNvbGxlY3Rpb24nLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9jb2xsZWN0aW9uID0KICAgICAgbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ2NvbGxlY3Rpb24nKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OmNvcmUnLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9jb3JlID0gbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ2NvcmUnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Omh0bWwnLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9odG1sID0gbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ2h0bWwnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Omh0bWxfY29tbW9uJy4KICBzdGF0aWMgZmluYWwgVXJpIGRhcnRfaHRtbF9jb21tb24gPQogICAgICBuZXcgVXJpKHNjaGVtZTogJ2RhcnQnLCBwYXRoOiAnaHRtbF9jb21tb24nKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OmluZGV4ZWRfZGInLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9pbmRleGVkX2RiID0KICAgICAgbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ2luZGV4ZWRfZGInKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Omlzb2xhdGUnLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9pc29sYXRlID0gbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ2lzb2xhdGUnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Om1hdGgnLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9tYXRoID0gbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ21hdGgnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Om1pcnJvcnMnLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9taXJyb3JzID0gbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ21pcnJvcnMnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Ol9pbnRlcm5hbCcuCiAgc3RhdGljIGZpbmFsIFVyaSBkYXJ0X19pbnRlcm5hbCA9IG5ldyBVcmkoc2NoZW1lOiAnZGFydCcsIHBhdGg6ICdfaW50ZXJuYWwnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Ol9uYXRpdmVfdHlwZWRfZGF0YScuCiAgc3RhdGljIGZpbmFsIFVyaSBkYXJ0X19uYXRpdmVfdHlwZWRfZGF0YSA9CiAgICAgIG5ldyBVcmkoc2NoZW1lOiAnZGFydCcsIHBhdGg6ICdfbmF0aXZlX3R5cGVkX2RhdGEnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OnR5cGVkX2RhdGEnLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF90eXBlZF9kYXRhID0KICAgICAgbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ3R5cGVkX2RhdGEnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OnN2ZycuCiAgc3RhdGljIGZpbmFsIFVyaSBkYXJ0X3N2ZyA9IG5ldyBVcmkoc2NoZW1lOiAnZGFydCcsIHBhdGg6ICdzdmcnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OndlYl9hdWRpbycuCiAgc3RhdGljIGZpbmFsIFVyaSBkYXJ0X3dlYl9hdWRpbyA9IG5ldyBVcmkoc2NoZW1lOiAnZGFydCcsIHBhdGg6ICd3ZWJfYXVkaW8nKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OndlYl9nbCcuCiAgc3RhdGljIGZpbmFsIFVyaSBkYXJ0X3dlYl9nbCA9IG5ldyBVcmkoc2NoZW1lOiAnZGFydCcsIHBhdGg6ICd3ZWJfZ2wnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OndlYl9zcWwnLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF93ZWJfc3FsID0gbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ3dlYl9zcWwnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Ol9qc19oZWxwZXInLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9fanNfaGVscGVyID0KICAgICAgbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ19qc19oZWxwZXInKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Ol9ydGknLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9fcnRpID0gbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ19ydGknKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Ol9pbnRlcmNlcHRvcnMnLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9faW50ZXJjZXB0b3JzID0KICAgICAgbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ19pbnRlcmNlcHRvcnMnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Ol9mb3JlaWduX2hlbHBlcicuCiAgc3RhdGljIGZpbmFsIFVyaSBkYXJ0X19mb3JlaWduX2hlbHBlciA9CiAgICAgIG5ldyBVcmkoc2NoZW1lOiAnZGFydCcsIHBhdGg6ICdfZm9yZWlnbl9oZWxwZXInKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Ol9qc19uYW1lcycuCiAgc3RhdGljIGZpbmFsIFVyaSBkYXJ0X19qc19uYW1lcyA9IG5ldyBVcmkoc2NoZW1lOiAnZGFydCcsIHBhdGg6ICdfanNfbmFtZXMnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Ol9qc19lbWJlZGRlZF9uYW1lcycuCiAgc3RhdGljIGZpbmFsIFVyaSBkYXJ0X19qc19lbWJlZGRlZF9uYW1lcyA9CiAgICAgIG5ldyBVcmkoc2NoZW1lOiAnZGFydCcsIHBhdGg6ICdfanNfZW1iZWRkZWRfbmFtZXMnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OmpzJy4KICBzdGF0aWMgZmluYWwgVXJpIGRhcnRfanMgPSBVcmkoc2NoZW1lOiAnZGFydCcsIHBhdGg6ICdqcycpOwoKICAvLy8gVGhlIFVSSSBmb3IgJ3BhY2thZ2U6anMnLgogIHN0YXRpYyBmaW5hbCBVcmkgcGFja2FnZV9qcyA9IG5ldyBVcmkoc2NoZW1lOiAncGFja2FnZScsIHBhdGg6ICdqcy9qcy5kYXJ0Jyk7CgogIC8vLyBUaGUgVVJJIGZvciAncGFja2FnZTptZXRhL2RhcnQyanMuZGFydCcuCiAgc3RhdGljIGZpbmFsIFVyaSBwYWNrYWdlX21ldGFfZGFydDJqcyA9CiAgICAgIG5ldyBVcmkoc2NoZW1lOiAncGFja2FnZScsIHBhdGg6ICdtZXRhL2RhcnQyanMuZGFydCcpOwp9CoEIAE5OPAFOEh4BNz0yAR0UJSUBTQ0rAUkQOwFALQFJMwEjJQE6NgE5NAFLKQE9MAEtIQE1MQE9QQFCSwE7PQE9QQIBGw4lPwFNDUUBJDwBQEcBTD0BOlEBND4BOT4sAUMBTwFMAT1JAgEfEkYhTAFNDUYBTUgBTCNAAUcoRQExLTABQSRBAS1PASQ5ASRPAUQBRAElUAE2AVABNwZNPTAMDQ4OExgPFA8PDAwQCxEFAgEaDSBIASUlMwEfRgEfRgEmJjQBJSUzASJMAR9GASJMASRQAS0tOwElJTMBHkQBJFABIUoBIkwBJSUzAR9GASgoNgEqKjgBJFABLS07AR0+ASBQAS8qPQIBJnBhY2thZ2U6Y29tcGlsZXIvc3JjL2NvbW1vbi9uYW1lcy5kYXJ0LnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2NvbW1vbi93b3JrLmRhcnSB4y8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuY29tbW9uLndvcms7CgppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnIHNob3cgTWVtYmVyRW50aXR5OwppbXBvcnQgJy4uL3VuaXZlcnNlL3dvcmxkX2ltcGFjdC5kYXJ0JyBzaG93IFdvcmxkSW1wYWN0OwoKYWJzdHJhY3QgY2xhc3MgV29ya0l0ZW0gewogIC8vLyBFbGVtZW50IG9uIHdoaWNoIHRoZSB3b3JrIHdpbGwgYmUgZG9uZS4KICBNZW1iZXJFbnRpdHkgZ2V0IGVsZW1lbnQ7CgogIFdvcmxkSW1wYWN0IHJ1bigpOwp9ChEATk48AR0BNjkBGi4cARUCASVwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb21tb24vd29yay5kYXJ0MnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2NvbW1vbl9lbGVtZW50cy5kYXJ0wAEley8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBUT0RPKHNpZ211bmQpOiByZW5hbWUgYW5kIG1vdmUgdG8gY29tbW9uL2VsZW1lbnRzLmRhcnQKbGlicmFyeSBkYXJ0MmpzLnR5cGVfc3lzdGVtOwoKaW1wb3J0ICdjb21tb24uZGFydCc7CmltcG9ydCAnY29tbW9uL25hbWVzLmRhcnQnIHNob3cgSWRlbnRpZmllcnMsIFVyaXM7CmltcG9ydCAnY29uc3RhbnRzL2NvbnN0YW50X3N5c3RlbS5kYXJ0JyBhcyBjb25zdGFudF9zeXN0ZW07CmltcG9ydCAnY29uc3RhbnRzL2V4cHJlc3Npb25zLmRhcnQnIHNob3cgQ29uc3RhbnRFeHByZXNzaW9uOwppbXBvcnQgJ2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJ2pzX2JhY2tlbmQvbmF0aXZlX2RhdGEuZGFydCcgc2hvdyBOYXRpdmVCYXNpY0RhdGE7CmltcG9ydCAnanNfbW9kZWwvbG9jYWxzLmRhcnQnOwppbXBvcnQgJ2tlcm5lbC9kYXJ0MmpzX3RhcmdldC5kYXJ0JzsKaW1wb3J0ICdvcHRpb25zLmRhcnQnOwppbXBvcnQgJ3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CgovLy8gVGhlIGNvbW1vbiBlbGVtZW50cyBhbmQgdHlwZXMgaW4gRGFydC4KYWJzdHJhY3QgY2xhc3MgQ29tbW9uRWxlbWVudHMgewogIC8vLyBUaGUgYE9iamVjdGAgY2xhc3MgZGVmaW5lZCBpbiAnZGFydDpjb3JlJy4KICBDbGFzc0VudGl0eSBnZXQgb2JqZWN0Q2xhc3M7CgogIC8vLyBUaGUgYGJvb2xgIGNsYXNzIGRlZmluZWQgaW4gJ2RhcnQ6Y29yZScuCiAgQ2xhc3NFbnRpdHkgZ2V0IGJvb2xDbGFzczsKCiAgLy8vIFRoZSBgbnVtYCBjbGFzcyBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIENsYXNzRW50aXR5IGdldCBudW1DbGFzczsKCiAgLy8vIFRoZSBgaW50YCBjbGFzcyBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIENsYXNzRW50aXR5IGdldCBpbnRDbGFzczsKCiAgLy8vIFRoZSBgZG91YmxlYCBjbGFzcyBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIENsYXNzRW50aXR5IGdldCBkb3VibGVDbGFzczsKCiAgLy8vIFRoZSBgU3RyaW5nYCBjbGFzcyBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIENsYXNzRW50aXR5IGdldCBzdHJpbmdDbGFzczsKCiAgLy8vIFRoZSBgRnVuY3Rpb25gIGNsYXNzIGRlZmluZWQgaW4gJ2RhcnQ6Y29yZScuCiAgQ2xhc3NFbnRpdHkgZ2V0IGZ1bmN0aW9uQ2xhc3M7CgogIC8vLyBUaGUgYFJlc291cmNlYCBjbGFzcyBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIENsYXNzRW50aXR5IGdldCByZXNvdXJjZUNsYXNzOwoKICAvLy8gVGhlIGBTeW1ib2xgIGNsYXNzIGRlZmluZWQgaW4gJ2RhcnQ6Y29yZScuCiAgQ2xhc3NFbnRpdHkgZ2V0IHN5bWJvbENsYXNzOwoKICAvLy8gVGhlIGBOdWxsYCBjbGFzcyBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIENsYXNzRW50aXR5IGdldCBudWxsQ2xhc3M7CgogIC8vLyBUaGUgYFR5cGVgIGNsYXNzIGRlZmluZWQgaW4gJ2RhcnQ6Y29yZScuCiAgQ2xhc3NFbnRpdHkgZ2V0IHR5cGVDbGFzczsKCiAgLy8vIFRoZSBgU3RhY2tUcmFjZWAgY2xhc3MgZGVmaW5lZCBpbiAnZGFydDpjb3JlJzsKICBDbGFzc0VudGl0eSBnZXQgc3RhY2tUcmFjZUNsYXNzOwoKICAvLy8gVGhlIGBMaXN0YCBjbGFzcyBkZWZpbmVkIGluICdkYXJ0OmNvcmUnOwogIENsYXNzRW50aXR5IGdldCBsaXN0Q2xhc3M7CgogIC8vLyBUaGUgYFNldGAgY2xhc3MgZGVmaW5lZCBpbiAnZGFydDpjb3JlJzsKICBDbGFzc0VudGl0eSBnZXQgc2V0Q2xhc3M7CgogIC8vLyBUaGUgYE1hcGAgY2xhc3MgZGVmaW5lZCBpbiAnZGFydDpjb3JlJzsKICBDbGFzc0VudGl0eSBnZXQgbWFwQ2xhc3M7CgogIC8vLyBUaGUgYFNldGAgY2xhc3MgZGVmaW5lZCBpbiAnZGFydDpjb3JlJzsKICBDbGFzc0VudGl0eSBnZXQgdW5tb2RpZmlhYmxlU2V0Q2xhc3M7CgogIC8vLyBUaGUgYEl0ZXJhYmxlYCBjbGFzcyBkZWZpbmVkIGluICdkYXJ0OmNvcmUnOwogIENsYXNzRW50aXR5IGdldCBpdGVyYWJsZUNsYXNzOwoKICAvLy8gVGhlIGBGdXR1cmVgIGNsYXNzIGRlZmluZWQgaW4gJ2FzeW5jJzsuCiAgQ2xhc3NFbnRpdHkgZ2V0IGZ1dHVyZUNsYXNzOwoKICAvLy8gVGhlIGBTdHJlYW1gIGNsYXNzIGRlZmluZWQgaW4gJ2FzeW5jJzsKICBDbGFzc0VudGl0eSBnZXQgc3RyZWFtQ2xhc3M7CgogIC8vLyBUaGUgZGFydDpjb3JlIGxpYnJhcnkuCiAgTGlicmFyeUVudGl0eSBnZXQgY29yZUxpYnJhcnk7CgogIC8vLyBUaGUgZGFydDphc3luYyBsaWJyYXJ5LgogIExpYnJhcnlFbnRpdHkgZ2V0IGFzeW5jTGlicmFyeTsKCiAgLy8vIFRoZSBkYXJ0Om1pcnJvcnMgbGlicmFyeS4KICBMaWJyYXJ5RW50aXR5IGdldCBtaXJyb3JzTGlicmFyeTsKCiAgLy8vIFRoZSBkYXJ0OnR5cGVkX2RhdGEgbGlicmFyeS4KICBMaWJyYXJ5RW50aXR5IGdldCB0eXBlZERhdGFMaWJyYXJ5OwoKICAvLy8gVGhlIGRhcnQ6X2pzX2hlbHBlciBsaWJyYXJ5LgogIExpYnJhcnlFbnRpdHkgZ2V0IGpzSGVscGVyTGlicmFyeTsKCiAgLy8vIFRoZSBkYXJ0Ol9pbnRlcmNlcHRvcnMgbGlicmFyeS4KICBMaWJyYXJ5RW50aXR5IGdldCBpbnRlcmNlcHRvcnNMaWJyYXJ5OwoKICAvLy8gVGhlIGRhcnQ6X2ZvcmVpZ25faGVscGVyIGxpYnJhcnkuCiAgTGlicmFyeUVudGl0eSBnZXQgZm9yZWlnbkxpYnJhcnk7CgogIC8vLyBUaGUgZGFydDpfaW50ZXJuYWwgbGlicmFyeS4KICBMaWJyYXJ5RW50aXR5IGdldCBydGlMaWJyYXJ5OwoKICAvLy8gVGhlIGRhcnQ6X2ludGVybmFsIGxpYnJhcnkuCiAgTGlicmFyeUVudGl0eSBnZXQgaW50ZXJuYWxMaWJyYXJ5OwoKICAvLy8gVGhlIGRhcnQ6anMgbGlicmFyeS4KICBMaWJyYXJ5RW50aXR5IGdldCBkYXJ0SnNMaWJyYXJ5OwoKICAvLy8gVGhlIHBhY2thZ2U6anMgbGlicmFyeS4KICBMaWJyYXJ5RW50aXR5IGdldCBwYWNrYWdlSnNMaWJyYXJ5OwoKICAvLy8gVGhlIGBOYXRpdmVUeXBlZERhdGFgIGNsYXNzIGZyb20gZGFydDp0eXBlZF9kYXRhLgogIENsYXNzRW50aXR5IGdldCB0eXBlZERhdGFDbGFzczsKCiAgLy8vIENvbnN0cnVjdG9yIG9mIHRoZSBgU3ltYm9sYCBjbGFzcyBpbiBkYXJ0OmludGVybmFsLgogIC8vLwogIC8vLyBUaGlzIGdldHRlciB3aWxsIGVuc3VyZSB0aGF0IGBTeW1ib2xgIGlzIHJlc29sdmVkIGFuZCBsb29rdXAgdGhlCiAgLy8vIGNvbnN0cnVjdG9yIG9uIGRlbWFuZC4KICBDb25zdHJ1Y3RvckVudGl0eSBnZXQgc3ltYm9sQ29uc3RydWN0b3JUYXJnZXQ7CgogIC8vLyBXaGV0aGVyIFtlbGVtZW50XSBpcyB0aGUgc2FtZSBhcyBbc3ltYm9sQ29uc3RydWN0b3JdLgogIC8vLwogIC8vLyBVc2VkIHRvIGNoZWNrIGZvciB0aGUgY29uc3RydWN0b3Igd2l0aG91dCBjb21wdXRpbmcgaXQgdW50aWwgaXQgaXMgbGlrZWx5CiAgLy8vIHRvIGJlIHNlZW4uCiAgYm9vbCBpc1N5bWJvbENvbnN0cnVjdG9yKENvbnN0cnVjdG9yRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gVGhlIGZ1bmN0aW9uIGBpZGVudGljYWxgIGluIGRhcnQ6Y29yZS4KICBGdW5jdGlvbkVudGl0eSBnZXQgaWRlbnRpY2FsRnVuY3Rpb247CgogIC8vLyBXaGV0aGVyIFtlbGVtZW50XSBpcyB0aGUgYEZ1bmN0aW9uLmFwcGx5YCBtZXRob2QuCiAgLy8vCiAgLy8vIFRoaXMgd2lsbCBub3QgcmVzb2x2ZSB0aGUgYXBwbHkgbWV0aG9kIGlmIGl0IGhhc24ndCBiZWVuIHNlZW4geWV0IGR1cmluZwogIC8vLyBjb21waWxhdGlvbi4KICBib29sIGlzRnVuY3Rpb25BcHBseU1ldGhvZChNZW1iZXJFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBUaGUgYGR5bmFtaWNgIHR5cGUuCiAgRHluYW1pY1R5cGUgZ2V0IGR5bmFtaWNUeXBlOwoKICAvLy8gVGhlIGBPYmplY3RgIHR5cGUgZGVmaW5lZCBpbiAnZGFydDpjb3JlJy4KICBJbnRlcmZhY2VUeXBlIGdldCBvYmplY3RUeXBlOwoKICAvLy8gVGhlIGBib29sYCB0eXBlIGRlZmluZWQgaW4gJ2RhcnQ6Y29yZScuCiAgSW50ZXJmYWNlVHlwZSBnZXQgYm9vbFR5cGU7CgogIC8vLyBUaGUgYG51bWAgdHlwZSBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIEludGVyZmFjZVR5cGUgZ2V0IG51bVR5cGU7CgogIC8vLyBUaGUgYGludGAgdHlwZSBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIEludGVyZmFjZVR5cGUgZ2V0IGludFR5cGU7CgogIC8vLyBUaGUgYGRvdWJsZWAgdHlwZSBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIEludGVyZmFjZVR5cGUgZ2V0IGRvdWJsZVR5cGU7CgogIC8vLyBUaGUgYFN0cmluZ2AgdHlwZSBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIEludGVyZmFjZVR5cGUgZ2V0IHN0cmluZ1R5cGU7CgogIC8vLyBUaGUgYFN5bWJvbGAgdHlwZSBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIEludGVyZmFjZVR5cGUgZ2V0IHN5bWJvbFR5cGU7CgogIC8vLyBUaGUgYEZ1bmN0aW9uYCB0eXBlIGRlZmluZWQgaW4gJ2RhcnQ6Y29yZScuCiAgSW50ZXJmYWNlVHlwZSBnZXQgZnVuY3Rpb25UeXBlOwoKICAvLy8gVGhlIGBOdWxsYCB0eXBlIGRlZmluZWQgaW4gJ2RhcnQ6Y29yZScuCiAgSW50ZXJmYWNlVHlwZSBnZXQgbnVsbFR5cGU7CgogIC8vLyBUaGUgYFR5cGVgIHR5cGUgZGVmaW5lZCBpbiAnZGFydDpjb3JlJy4KICBJbnRlcmZhY2VUeXBlIGdldCB0eXBlVHlwZTsKCiAgSW50ZXJmYWNlVHlwZSBnZXQgdHlwZUxpdGVyYWxUeXBlOwoKICAvLy8gVGhlIGBTdGFja1RyYWNlYCB0eXBlIGRlZmluZWQgaW4gJ2RhcnQ6Y29yZSc7CiAgSW50ZXJmYWNlVHlwZSBnZXQgc3RhY2tUcmFjZVR5cGU7CgogIC8vLyBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSBgTGlzdGAgdHlwZSBkZWZpbmVkIGluICdkYXJ0OmNvcmUnIHdpdGgKICAvLy8gW2VsZW1lbnRUeXBlXSBhcyBpdHMgdHlwZSBhcmd1bWVudC4KICAvLy8KICAvLy8gSWYgbm8gdHlwZSBhcmd1bWVudCBpcyBwcm92aWRlZCwgdGhlIGNhbm9uaWNhbCByYXcgdHlwZSBpcyByZXR1cm5lZC4KICBJbnRlcmZhY2VUeXBlIGxpc3RUeXBlKFtEYXJ0VHlwZSBlbGVtZW50VHlwZV0pOwoKICAvLy8gUmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgYFNldGAgdHlwZSBkZWZpbmVkIGluICdkYXJ0OmNvcmUnIHdpdGgKICAvLy8gW2VsZW1lbnRUeXBlXSBhcyBpdHMgdHlwZSBhcmd1bWVudC4KICAvLy8KICAvLy8gSWYgbm8gdHlwZSBhcmd1bWVudCBpcyBwcm92aWRlZCwgdGhlIGNhbm9uaWNhbCByYXcgdHlwZSBpcyByZXR1cm5lZC4KICBJbnRlcmZhY2VUeXBlIHNldFR5cGUoW0RhcnRUeXBlIGVsZW1lbnRUeXBlXSk7CgogIC8vLyBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSBgTWFwYCB0eXBlIGRlZmluZWQgaW4gJ2RhcnQ6Y29yZScgd2l0aAogIC8vLyBba2V5VHlwZV0gYW5kIFt2YWx1ZVR5cGVdIGFzIGl0cyB0eXBlIGFyZ3VtZW50cy4KICAvLy8KICAvLy8gSWYgbm8gdHlwZSBhcmd1bWVudHMgYXJlIHByb3ZpZGVkLCB0aGUgY2Fub25pY2FsIHJhdyB0eXBlIGlzIHJldHVybmVkLgogIEludGVyZmFjZVR5cGUgbWFwVHlwZShbRGFydFR5cGUga2V5VHlwZSwgRGFydFR5cGUgdmFsdWVUeXBlXSk7CgogIC8vLyBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSBgSXRlcmFibGVgIHR5cGUgZGVmaW5lZCBpbiAnZGFydDpjb3JlJyB3aXRoCiAgLy8vIFtlbGVtZW50VHlwZV0gYXMgaXRzIHR5cGUgYXJndW1lbnQuCiAgLy8vCiAgLy8vIElmIG5vIHR5cGUgYXJndW1lbnQgaXMgcHJvdmlkZWQsIHRoZSBjYW5vbmljYWwgcmF3IHR5cGUgaXMgcmV0dXJuZWQuCiAgSW50ZXJmYWNlVHlwZSBpdGVyYWJsZVR5cGUoW0RhcnRUeXBlIGVsZW1lbnRUeXBlXSk7CgogIC8vLyBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSBgRnV0dXJlYCB0eXBlIGRlZmluZWQgaW4gJ2RhcnQ6YXN5bmMnIHdpdGgKICAvLy8gW2VsZW1lbnRUeXBlXSBhcyBpdHMgdHlwZSBhcmd1bWVudC4KICAvLy8KICAvLy8gSWYgbm8gdHlwZSBhcmd1bWVudCBpcyBwcm92aWRlZCwgdGhlIGNhbm9uaWNhbCByYXcgdHlwZSBpcyByZXR1cm5lZC4KICBJbnRlcmZhY2VUeXBlIGZ1dHVyZVR5cGUoW0RhcnRUeXBlIGVsZW1lbnRUeXBlXSk7CgogIC8vLyBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSBgU3RyZWFtYCB0eXBlIGRlZmluZWQgaW4gJ2RhcnQ6YXN5bmMnIHdpdGgKICAvLy8gW2VsZW1lbnRUeXBlXSBhcyBpdHMgdHlwZSBhcmd1bWVudC4KICAvLy8KICAvLy8gSWYgbm8gdHlwZSBhcmd1bWVudCBpcyBwcm92aWRlZCwgdGhlIGNhbm9uaWNhbCByYXcgdHlwZSBpcyByZXR1cm5lZC4KICBJbnRlcmZhY2VUeXBlIHN0cmVhbVR5cGUoW0RhcnRUeXBlIGVsZW1lbnRUeXBlXSk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbZWxlbWVudF0gaXMgYSBzdXBlcmNsYXNzIG9mIGBTdHJpbmdgIG9yIGBudW1gLgogIGJvb2wgaXNOdW1iZXJPclN0cmluZ1N1cGVydHlwZShDbGFzc0VudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtlbGVtZW50XSBpcyBhIHN1cGVyY2xhc3Mgb2YgYFN0cmluZ2AuCiAgYm9vbCBpc1N0cmluZ09ubHlTdXBlcnR5cGUoQ2xhc3NFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbZWxlbWVudF0gaXMgYSBzdXBlcmNsYXNzIG9mIGBMaXN0YC4KICBib29sIGlzTGlzdFN1cGVydHlwZShDbGFzc0VudGl0eSBlbGVtZW50KTsKCiAgSW50ZXJmYWNlVHlwZSBnZXRDb25zdGFudE1hcFR5cGVGb3IoSW50ZXJmYWNlVHlwZSBzb3VyY2VUeXBlLAogICAgICB7Ym9vbCBoYXNQcm90b0tleTogZmFsc2UsIGJvb2wgb25seVN0cmluZ0tleXM6IGZhbHNlfSk7CgogIEludGVyZmFjZVR5cGUgZ2V0Q29uc3RhbnRTZXRUeXBlRm9yKEludGVyZmFjZVR5cGUgc291cmNlVHlwZSk7CgogIEZpZWxkRW50aXR5IGdldCBzeW1ib2xGaWVsZDsKCiAgSW50ZXJmYWNlVHlwZSBnZXQgc3ltYm9sSW1wbGVtZW50YXRpb25UeXBlOwoKICAvLyBGcm9tIGRhcnQ6Y29yZQogIENsYXNzRW50aXR5IGdldCBtYXBMaXRlcmFsQ2xhc3M7CiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0IG1hcExpdGVyYWxDb25zdHJ1Y3RvcjsKICBDb25zdHJ1Y3RvckVudGl0eSBnZXQgbWFwTGl0ZXJhbENvbnN0cnVjdG9yRW1wdHk7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IG1hcExpdGVyYWxVbnR5cGVkTWFrZXI7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IG1hcExpdGVyYWxVbnR5cGVkRW1wdHlNYWtlcjsKCiAgQ2xhc3NFbnRpdHkgZ2V0IHNldExpdGVyYWxDbGFzczsKICBDb25zdHJ1Y3RvckVudGl0eSBnZXQgc2V0TGl0ZXJhbENvbnN0cnVjdG9yOwogIENvbnN0cnVjdG9yRW50aXR5IGdldCBzZXRMaXRlcmFsQ29uc3RydWN0b3JFbXB0eTsKICBGdW5jdGlvbkVudGl0eSBnZXQgc2V0TGl0ZXJhbFVudHlwZWRNYWtlcjsKICBGdW5jdGlvbkVudGl0eSBnZXQgc2V0TGl0ZXJhbFVudHlwZWRFbXB0eU1ha2VyOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgb2JqZWN0Tm9TdWNoTWV0aG9kOwoKICBib29sIGlzRGVmYXVsdE5vU3VjaE1ldGhvZEltcGxlbWVudGF0aW9uKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpOwoKICAvLyBGcm9tIGRhcnQ6YXN5bmMKICBGdW5jdGlvbkVudGl0eSBnZXQgYXN5bmNIZWxwZXJTdGFydFN5bmM7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGFzeW5jSGVscGVyQXdhaXQ7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGFzeW5jSGVscGVyUmV0dXJuOwogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3luY0hlbHBlclJldGhyb3c7CgogIEZ1bmN0aW9uRW50aXR5IGdldCB3cmFwQm9keTsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHlpZWxkU3RhcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHlpZWxkU2luZ2xlOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgc3luY1N0YXJVbmNhdWdodEVycm9yOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgYXN5bmNTdGFySGVscGVyOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgc3RyZWFtT2ZDb250cm9sbGVyOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgZW5kT2ZJdGVyYXRpb247CgogIENsYXNzRW50aXR5IGdldCBzeW5jU3Rhckl0ZXJhYmxlOwoKICBDbGFzc0VudGl0eSBnZXQgZnV0dXJlSW1wbGVtZW50YXRpb247CgogIENsYXNzRW50aXR5IGdldCBjb250cm9sbGVyU3RyZWFtOwoKICBDbGFzc0VudGl0eSBnZXQgc3RyZWFtSXRlcmF0b3I7CgogIENvbnN0cnVjdG9yRW50aXR5IGdldCBzdHJlYW1JdGVyYXRvckNvbnN0cnVjdG9yOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgc3luY1N0YXJJdGVyYWJsZUZhY3Rvcnk7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3luY0F3YWl0Q29tcGxldGVyRmFjdG9yeTsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGFzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJGYWN0b3J5OwoKICBDbGFzc0VudGl0eSBnZXQganNJbnRlcmNlcHRvckNsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQganNTdHJpbmdDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzQXJyYXlDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzTnVtYmVyQ2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBqc0ludENsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQganNEb3VibGVDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzTnVsbENsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQganNCb29sQ2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBqc1BsYWluSmF2YVNjcmlwdE9iamVjdENsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQganNVbmtub3duSmF2YVNjcmlwdE9iamVjdENsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQganNKYXZhU2NyaXB0RnVuY3Rpb25DbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzSmF2YVNjcmlwdE9iamVjdENsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQganNJbmRleGFibGVDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzTXV0YWJsZUluZGV4YWJsZUNsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQganNNdXRhYmxlQXJyYXlDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzRml4ZWRBcnJheUNsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQganNFeHRlbmRhYmxlQXJyYXlDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzVW5tb2RpZmlhYmxlQXJyYXlDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzUG9zaXRpdmVJbnRDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzVUludDMyQ2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBqc1VJbnQzMUNsYXNzOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgbWVtYmVyIGlzIHRoZSAnZmluZEluZGV4Rm9yTmF0aXZlU3ViY2xhc3NUeXBlJyBtZXRob2QKICAvLy8gZGVjbGFyZWQgaW4gYGRhcnQ6X2ludGVyY2VwdG9yc2AuCiAgYm9vbCBpc0ZpbmRJbmRleEZvck5hdGl2ZVN1YmNsYXNzVHlwZShNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGdldE5hdGl2ZUludGVyY2VwdG9yTWV0aG9kOwoKICBDb25zdHJ1Y3RvckVudGl0eSBnZXQganNBcnJheVR5cGVkQ29uc3RydWN0b3I7CgogIC8vIEZyb20gZGFydDpfanNfaGVscGVyCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQXZvaWQgdGhlIG5lZWQgZm9yIHRoaXMgKGZyb20gW0NoZWNrZWRNb2RlSGVscGVyXSkuCiAgRnVuY3Rpb25FbnRpdHkgZmluZEhlbHBlckZ1bmN0aW9uKFN0cmluZyBuYW1lKTsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGNsb3N1cmVDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGJvdW5kQ2xvc3VyZUNsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQgdHlwZUxpdGVyYWxDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGNvbnN0TWFwTGl0ZXJhbENsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQgY29uc3RTZXRMaXRlcmFsQ2xhc3M7CgogIENsYXNzRW50aXR5IGdldCB0eXBlVmFyaWFibGVDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzSW52b2NhdGlvbk1pcnJvckNsYXNzOwoKICBNZW1iZXJFbnRpdHkgZ2V0IGludm9jYXRpb25UeXBlQXJndW1lbnRHZXR0ZXI7CgogIC8vLyBJbnRlcmZhY2UgdXNlZCB0byBkZXRlcm1pbmUgaWYgYW4gb2JqZWN0IGhhcyB0aGUgSmF2YVNjcmlwdAogIC8vLyBpbmRleGluZyBiZWhhdmlvci4gVGhlIGludGVyZmFjZSBpcyBvbmx5IHZpc2libGUgdG8gc3BlY2lmaWMgbGlicmFyaWVzLgogIENsYXNzRW50aXR5IGdldCBqc0luZGV4aW5nQmVoYXZpb3JJbnRlcmZhY2U7CgogIENsYXNzRW50aXR5IGdldCBzdGFja1RyYWNlSGVscGVyQ2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBjb25zdGFudE1hcENsYXNzOwogIENsYXNzRW50aXR5IGdldCBjb25zdGFudFN0cmluZ01hcENsYXNzOwogIENsYXNzRW50aXR5IGdldCBjb25zdGFudFByb3RvTWFwQ2xhc3M7CiAgQ2xhc3NFbnRpdHkgZ2V0IGdlbmVyYWxDb25zdGFudE1hcENsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQgYW5ub3RhdGlvbkNyZWF0ZXNDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGFubm90YXRpb25SZXR1cm5zQ2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBhbm5vdGF0aW9uSlNOYW1lQ2xhc3M7CgogIC8vLyBUaGUgY2xhc3MgZm9yIG5hdGl2ZSBhbm5vdGF0aW9ucyBkZWZpbmVkIGluIGRhcnQ6X2pzX2hlbHBlci4KICBDbGFzc0VudGl0eSBnZXQgbmF0aXZlQW5ub3RhdGlvbkNsYXNzOwoKICBDb25zdHJ1Y3RvckVudGl0eSBnZXQgdHlwZVZhcmlhYmxlQ29uc3RydWN0b3I7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3NlcnRUZXN0OwoKICBGdW5jdGlvbkVudGl0eSBnZXQgYXNzZXJ0VGhyb3c7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3NlcnRIZWxwZXI7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3NlcnRVbnJlYWNoYWJsZU1ldGhvZDsKCiAgLy8vIEhvbGRzIHRoZSBtZXRob2QgImdldElzb2xhdGVBZmZpbml0eVRhZyIgd2hlbiBkYXJ0Ol9qc19oZWxwZXIgaGFzIGJlZW4KICAvLy8gbG9hZGVkLgogIEZ1bmN0aW9uRW50aXR5IGdldCBnZXRJc29sYXRlQWZmaW5pdHlUYWdNYXJrZXI7CgogIC8vLyBIb2xkcyB0aGUgbWV0aG9kICJyZXF1aXJlc1ByZWFtYmxlIiBpbiBfanNfaGVscGVyLgogIEZ1bmN0aW9uRW50aXR5IGdldCByZXF1aXJlc1ByZWFtYmxlTWFya2VyOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgbG9hZExpYnJhcnlXcmFwcGVyOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgbG9hZERlZmVycmVkTGlicmFyeTsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGJvb2xDb252ZXJzaW9uQ2hlY2s7CgogIEZ1bmN0aW9uRW50aXR5IGdldCB0cmFjZUhlbHBlcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGNsb3N1cmVGcm9tVGVhck9mZjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGlzSnNJbmRleGFibGU7CgogIEZ1bmN0aW9uRW50aXR5IGdldCB0aHJvd0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHRocm93SW5kZXhPdXRPZlJhbmdlRXhjZXB0aW9uOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgZXhjZXB0aW9uVW53cmFwcGVyOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgdGhyb3dSdW50aW1lRXJyb3I7CgogIEZ1bmN0aW9uRW50aXR5IGdldCB0aHJvd1Vuc3VwcG9ydGVkRXJyb3I7CgogIEZ1bmN0aW9uRW50aXR5IGdldCB0aHJvd1R5cGVFcnJvcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHRocm93QWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGNoZWNrQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgdGhyb3dDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3I7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBzdHJpbmdJbnRlcnBvbGF0aW9uSGVscGVyOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgd3JhcEV4Y2VwdGlvbkhlbHBlcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHRocm93RXhwcmVzc2lvbkhlbHBlcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGNsb3N1cmVDb252ZXJ0ZXI7CgogIEZ1bmN0aW9uRW50aXR5IGdldCB0cmFjZUZyb21FeGNlcHRpb247CgogIEZ1bmN0aW9uRW50aXR5IGdldCBzZXRSdW50aW1lVHlwZUluZm87CgogIEZ1bmN0aW9uRW50aXR5IGdldCBnZXRSdW50aW1lVHlwZUluZm87CgogIEZ1bmN0aW9uRW50aXR5IGdldCBnZXRUeXBlQXJndW1lbnRCeUluZGV4OwoKICBGdW5jdGlvbkVudGl0eSBnZXQgY29tcHV0ZVNpZ25hdHVyZTsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGdldFJ1bnRpbWVUeXBlQXJndW1lbnRzOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgZ2V0UnVudGltZVR5cGVBcmd1bWVudDsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGdldFJ1bnRpbWVUeXBlQXJndW1lbnRJbnRlcmNlcHRlZDsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGFzc2VydElzU3VidHlwZTsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGNoZWNrU3VidHlwZTsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGFzc2VydFN1YnR5cGU7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBzdWJ0eXBlQ2FzdDsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGZ1bmN0aW9uVHlwZVRlc3Q7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBmdXR1cmVPclRlc3Q7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBjaGVja1N1YnR5cGVPZlJ1bnRpbWVUeXBlOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgYXNzZXJ0U3VidHlwZU9mUnVudGltZVR5cGU7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBzdWJ0eXBlT2ZSdW50aW1lVHlwZUNhc3Q7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBjaGVja0RlZmVycmVkSXNMb2FkZWQ7CgogIEZ1bmN0aW9uRW50aXR5IGdldCB0aHJvd05vU3VjaE1ldGhvZDsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGNyZWF0ZVJ1bnRpbWVUeXBlOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgZmFsbFRocm91Z2hFcnJvcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGNyZWF0ZUludm9jYXRpb25NaXJyb3I7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBjcmVhdGVVbm1hbmdsZWRJbnZvY2F0aW9uTWlycm9yOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgY3ljbGljVGhyb3dIZWxwZXI7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBkZWZpbmVQcm9wZXJ0eTsKCiAgYm9vbCBpc0V4dHJhY3RUeXBlQXJndW1lbnRzKEZ1bmN0aW9uRW50aXR5IG1lbWJlcik7CgogIENsYXNzRW50aXR5IGdldEluc3RhbnRpYXRpb25DbGFzcyhpbnQgdHlwZUFyZ3VtZW50Q291bnQpOwoKICBGdW5jdGlvbkVudGl0eSBnZXRJbnN0YW50aWF0ZUZ1bmN0aW9uKGludCB0eXBlQXJndW1lbnRDb3VudCk7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBpbnN0YW50aWF0ZWRHZW5lcmljRnVuY3Rpb25UeXBlOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgZXh0cmFjdEZ1bmN0aW9uVHlwZU9iamVjdEZyb21JbnRlcm5hbDsKCiAgLy8gRnJvbSBkYXJ0Ol9ydGkKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGZpbmRUeXBlOwogIEZ1bmN0aW9uRW50aXR5IGdldCBpbnN0YW5jZVR5cGU7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGFycmF5SW5zdGFuY2VUeXBlOwogIEZ1bmN0aW9uRW50aXR5IGdldCBzaW1wbGVJbnN0YW5jZVR5cGU7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHR5cGVMaXRlcmFsTWFrZXI7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGNoZWNrVHlwZUJvdW5kOwogIEZpZWxkRW50aXR5IGdldCBydGlBc0ZpZWxkOwogIEZpZWxkRW50aXR5IGdldCBydGlDaGVja0ZpZWxkOwogIEZpZWxkRW50aXR5IGdldCBydGlJc0ZpZWxkOwogIEZpZWxkRW50aXR5IGdldCBydGlSZXN0RmllbGQ7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHJ0aUV2YWxNZXRob2Q7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHJ0aUJpbmRNZXRob2Q7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHJ0aUFkZFJ1bGVzTWV0aG9kOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgZ2VuZXJhbElzVGVzdEltcGxlbWVudGF0aW9uOwogIEZ1bmN0aW9uRW50aXR5IGdldCBnZW5lcmFsQXNDaGVja0ltcGxlbWVudGF0aW9uOwogIEZ1bmN0aW9uRW50aXR5IGdldCBnZW5lcmFsVHlwZUNoZWNrSW1wbGVtZW50YXRpb247CgogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZElzQm9vbDsKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRBc0Jvb2xOdWxsYWJsZTsKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRDaGVja0Jvb2xOdWxsYWJsZTsKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRBc0RvdWJsZU51bGxhYmxlOwogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZENoZWNrRG91YmxlTnVsbGFibGU7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkSXNJbnQ7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkQXNJbnROdWxsYWJsZTsKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRDaGVja0ludE51bGxhYmxlOwogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZElzTnVtOwogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZEFzTnVtTnVsbGFibGU7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkQ2hlY2tOdW1OdWxsYWJsZTsKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRJc1N0cmluZzsKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRBc1N0cmluZ051bGxhYmxlOwogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZENoZWNrU3RyaW5nTnVsbGFibGU7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBpbnN0YW50aWF0ZWRHZW5lcmljRnVuY3Rpb25UeXBlTmV3UnRpOwogIEZ1bmN0aW9uRW50aXR5IGdldCBjbG9zdXJlRnVuY3Rpb25UeXBlOwoKICAvLyBGcm9tIGRhcnQ6X2ludGVybmFsCgogIENsYXNzRW50aXR5IGdldCBzeW1ib2xJbXBsZW1lbnRhdGlvbkNsYXNzOwoKICAvLy8gVXNlZCB0byBhbm5vdGF0ZSBpdGVtcyB0aGF0IGhhdmUgdGhlIGtleXdvcmQgIm5hdGl2ZSIuCiAgQ2xhc3NFbnRpdHkgZ2V0IGV4dGVybmFsTmFtZUNsYXNzOwoKICBJbnRlcmZhY2VUeXBlIGdldCBleHRlcm5hbE5hbWVUeXBlOwoKICBDb25zdHJ1Y3RvckVudGl0eSBnZXQgc3ltYm9sVmFsaWRhdGVkQ29uc3RydWN0b3I7CgogIC8vIEZyb20gZGFydDpfanNfZW1iZWRkZWRfbmFtZXMKCiAgLy8vIEhvbGRzIHRoZSBjbGFzcyBmb3IgdGhlIFtKc0dldE5hbWVdIGVudW0uCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzR2V0TmFtZUVudW07CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbbWVtYmVyXSBpcyBhICJmb3JlaWduIGhlbHBlciIsIHRoYXQgaXMsIGEgbWVtYmVyIHdob3NlCiAgLy8vIHNlbWFudGljcyBpcyBkZWZpbmVkIHN5bnRoZXRpY2FsbHkgYW5kIG5vdCB0aHJvdWdoIERhcnQgY29kZS4KICAvLy8KICAvLy8gTW9zdCBmb3JlaWduIGhlbHBlcnMgYXJlIGxvY2F0ZWQgaW4gdGhlIGBkYXJ0Ol9mb3JlaWduX2hlbHBlcmAgbGlicmFyeS4KICBib29sIGlzRm9yZWlnbkhlbHBlcihNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgQ2xhc3NFbnRpdHkgZ2V0RGVmYXVsdFN1cGVyY2xhc3MoCiAgICAgIENsYXNzRW50aXR5IGNscywgTmF0aXZlQmFzaWNEYXRhIG5hdGl2ZUJhc2ljRGF0YSk7CgogIC8vIEZyb20gcGFja2FnZTpqcwogIEZ1bmN0aW9uRW50aXR5IGdldCBqc0FsbG93SW50ZXJvcDsKfQoKYWJzdHJhY3QgY2xhc3MgS0NvbW1vbkVsZW1lbnRzIGltcGxlbWVudHMgQ29tbW9uRWxlbWVudHMgewogIC8vIEZyb20gcGFja2FnZTpqcwogIENsYXNzRW50aXR5IGdldCBqc0Fubm90YXRpb25DbGFzczsKICBDbGFzc0VudGl0eSBnZXQganNBbm9ueW1vdXNDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IHByYWdtYUNsYXNzOwogIEZpZWxkRW50aXR5IGdldCBwcmFnbWFDbGFzc05hbWVGaWVsZDsKICBGaWVsZEVudGl0eSBnZXQgcHJhZ21hQ2xhc3NPcHRpb25zRmllbGQ7CgogIGJvb2wgaXNDcmVhdGVJbnZvY2F0aW9uTWlycm9ySGVscGVyKE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICBib29sIGlzU3ltYm9sVmFsaWRhdGVkQ29uc3RydWN0b3IoQ29uc3RydWN0b3JFbnRpdHkgZWxlbWVudCk7CgogIENsYXNzRW50aXR5IGdldCBtZXRhTm9JbmxpbmVDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IG1ldGFUcnlJbmxpbmVDbGFzczsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtmdW5jdGlvbl0gaXMgYWxsb3dlZCB0byBiZSBleHRlcm5hbC4KICAvLy8KICAvLy8gVGhpcyByZXR1cm5zIGB0cnVlYCBmb3IgZm9yZWlnbiBoZWxwZXJzLCBmcm9tIGVudmlyb25tZW50IGNvbnN0cnVjdG9ycyBhbmQKICAvLy8gbWVtYmVycyBvZiBsaWJyYXJpZXMgdGhhdCBzdXBwb3J0IG5hdGl2ZS4KICAvLy8KICAvLy8gVGhpcyByZXR1cm5zIGBmYWxzZWAgZm9yIEpTIGludGVyb3AgbWVtYmVycyB3aGljaCB0aGVyZWZvcmUgbXVzdCBiZQogIC8vLyBhbGxvd2VkIHRvIGJlIGV4dGVybmFsIHRocm91Z2ggdGhlIEpTIGludGVyb3AgYW5ub3RhdGlvbiBoYW5kbGluZy4KICBib29sIGlzRXh0ZXJuYWxBbGxvd2VkKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKTsKfQoKYWJzdHJhY3QgY2xhc3MgSkNvbW1vbkVsZW1lbnRzIGltcGxlbWVudHMgQ29tbW9uRWxlbWVudHMgewogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbZWxlbWVudF0gaXMgdGhlIHVubmFtZWQgY29uc3RydWN0b3Igb2YgYExpc3RgLgogIC8vLwogIC8vLyBUaGlzIHdpbGwgbm90IHJlc29sdmUgdGhlIGNvbnN0cnVjdG9yIGlmIGl0IGhhc24ndCBiZWVuIHNlZW4geWV0IGR1cmluZwogIC8vLyBjb21waWxhdGlvbi4KICBib29sIGlzVW5uYW1lZExpc3RDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvckVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtlbGVtZW50XSBpcyB0aGUgJ2ZpbGxlZCcgY29uc3RydWN0b3Igb2YgYExpc3RgLgogIC8vLwogIC8vLyBUaGlzIHdpbGwgbm90IHJlc29sdmUgdGhlIGNvbnN0cnVjdG9yIGlmIGl0IGhhc24ndCBiZWVuIHNlZW4geWV0IGR1cmluZwogIC8vLyBjb21waWxhdGlvbi4KICBib29sIGlzRmlsbGVkTGlzdENvbnN0cnVjdG9yKENvbnN0cnVjdG9yRW50aXR5IGVsZW1lbnQpOwoKICBib29sIGlzRGVmYXVsdEVxdWFsaXR5SW1wbGVtZW50YXRpb24oTWVtYmVyRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW3NlbGVjdG9yXSBhcHBsaWVzIHRvIGBKU0luZGV4YWJsZS5sZW5ndGhgLgogIGJvb2wgYXBwbGllc1RvSnNJbmRleGFibGVMZW5ndGgoU2VsZWN0b3Igc2VsZWN0b3IpOwoKICBGdW5jdGlvbkVudGl0eSBnZXQganNBcnJheVJlbW92ZUxhc3Q7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBqc0FycmF5QWRkOwoKICBib29sIGlzSnNTdHJpbmdTcGxpdChNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtzZWxlY3Rvcl0gYXBwbGllcyB0byBgSlNTdHJpbmcuc3BsaXRgIG9uIFtyZWNlaXZlcl0KICAvLy8gaW4gdGhlIGdpdmVuIFt3b3JsZF0uCiAgLy8vCiAgLy8vIFJldHVybnMgYGZhbHNlYCBpZiBgSlNTdHJpbmcuc3BsaXRgIGlzIG5vdCBhdmFpbGFibGUuCiAgYm9vbCBhcHBsaWVzVG9Kc1N0cmluZ1NwbGl0KFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyLAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4pOwoKICBGdW5jdGlvbkVudGl0eSBnZXQganNTdHJpbmdTcGxpdDsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGpzU3RyaW5nVG9TdHJpbmc7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBqc1N0cmluZ09wZXJhdG9yQWRkOwoKICBDbGFzc0VudGl0eSBnZXQganNDb25zdENsYXNzOwoKICAvLy8gUmV0dXJuIGB0cnVlYCBpZiBbbWVtYmVyXSBpcyB0aGUgJ2NoZWNrSW50JyBmdW5jdGlvbiBkZWZpbmVkIGluCiAgLy8vIGRhcnQ6X2pzX2hlbHBlcnMuCiAgYm9vbCBpc0NoZWNrSW50KE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICAvLy8gUmV0dXJuIGB0cnVlYCBpZiBbbWVtYmVyXSBpcyB0aGUgJ2NoZWNrTnVtJyBmdW5jdGlvbiBkZWZpbmVkIGluCiAgLy8vIGRhcnQ6X2pzX2hlbHBlcnMuCiAgYm9vbCBpc0NoZWNrTnVtKE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICAvLy8gUmV0dXJuIGB0cnVlYCBpZiBbbWVtYmVyXSBpcyB0aGUgJ2NoZWNrU3RyaW5nJyBmdW5jdGlvbiBkZWZpbmVkIGluCiAgLy8vIGRhcnQ6X2pzX2hlbHBlcnMuCiAgYm9vbCBpc0NoZWNrU3RyaW5nKE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICBib29sIGlzSW5zdGFudGlhdGlvbkNsYXNzKENsYXNzRW50aXR5IGNscyk7CgogIC8vIEZyb20gZGFydDpfbmF0aXZlX3R5cGVkX2RhdGEKCiAgQ2xhc3NFbnRpdHkgZ2V0IHR5cGVkQXJyYXlPZkludENsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQgdHlwZWRBcnJheU9mRG91YmxlQ2xhc3M7CgogIC8vLyBIb2xkcyB0aGUgY2xhc3MgZm9yIHRoZSBbSnNCdWlsdGluc10gZW51bS4KICBDbGFzc0VudGl0eSBnZXQganNCdWlsdGluRW51bTsKCiAgYm9vbCBpc0ZvcmVpZ24oTWVtYmVyRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSAnb3BlcmF0b3IgPT0nIFtmdW5jdGlvbl0gaXMKICAvLy8ga25vd24gdG8gaGFuZGxlIGBudWxsYCBhcyBhcmd1bWVudC4KICBib29sIG9wZXJhdG9yRXFIYW5kbGVzTnVsbEFyZ3VtZW50KEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKTsKfQoKY2xhc3MgQ29tbW9uRWxlbWVudHNJbXBsCiAgICBpbXBsZW1lbnRzIENvbW1vbkVsZW1lbnRzLCBLQ29tbW9uRWxlbWVudHMsIEpDb21tb25FbGVtZW50cyB7CiAgZmluYWwgRWxlbWVudEVudmlyb25tZW50IF9lbnY7CiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwoKICBDb21tb25FbGVtZW50c0ltcGwodGhpcy5fZW52LCB0aGlzLl9vcHRpb25zKTsKCiAgQ2xhc3NFbnRpdHkgX29iamVjdENsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBvYmplY3RDbGFzcyA9PgogICAgICBfb2JqZWN0Q2xhc3MgPz89IF9maW5kQ2xhc3MoY29yZUxpYnJhcnksICdPYmplY3QnKTsKCiAgQ2xhc3NFbnRpdHkgX2Jvb2xDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgYm9vbENsYXNzID0+IF9ib29sQ2xhc3MgPz89IF9maW5kQ2xhc3MoY29yZUxpYnJhcnksICdib29sJyk7CgogIENsYXNzRW50aXR5IF9udW1DbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgbnVtQ2xhc3MgPT4gX251bUNsYXNzID8/PSBfZmluZENsYXNzKGNvcmVMaWJyYXJ5LCAnbnVtJyk7CgogIENsYXNzRW50aXR5IF9pbnRDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgaW50Q2xhc3MgPT4gX2ludENsYXNzID8/PSBfZmluZENsYXNzKGNvcmVMaWJyYXJ5LCAnaW50Jyk7CgogIENsYXNzRW50aXR5IF9kb3VibGVDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgZG91YmxlQ2xhc3MgPT4KICAgICAgX2RvdWJsZUNsYXNzID8/PSBfZmluZENsYXNzKGNvcmVMaWJyYXJ5LCAnZG91YmxlJyk7CgogIENsYXNzRW50aXR5IF9zdHJpbmdDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgc3RyaW5nQ2xhc3MgPT4KICAgICAgX3N0cmluZ0NsYXNzID8/PSBfZmluZENsYXNzKGNvcmVMaWJyYXJ5LCAnU3RyaW5nJyk7CgogIENsYXNzRW50aXR5IF9mdW5jdGlvbkNsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBmdW5jdGlvbkNsYXNzID0+CiAgICAgIF9mdW5jdGlvbkNsYXNzID8/PSBfZmluZENsYXNzKGNvcmVMaWJyYXJ5LCAnRnVuY3Rpb24nKTsKCiAgQ2xhc3NFbnRpdHkgX3Jlc291cmNlQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IHJlc291cmNlQ2xhc3MgPT4KICAgICAgX3Jlc291cmNlQ2xhc3MgPz89IF9maW5kQ2xhc3MoY29yZUxpYnJhcnksICdSZXNvdXJjZScpOwoKICBDbGFzc0VudGl0eSBfc3ltYm9sQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IHN5bWJvbENsYXNzID0+CiAgICAgIF9zeW1ib2xDbGFzcyA/Pz0gX2ZpbmRDbGFzcyhjb3JlTGlicmFyeSwgJ1N5bWJvbCcpOwoKICBDbGFzc0VudGl0eSBfbnVsbENsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBudWxsQ2xhc3MgPT4gX251bGxDbGFzcyA/Pz0gX2ZpbmRDbGFzcyhjb3JlTGlicmFyeSwgJ051bGwnKTsKCiAgQ2xhc3NFbnRpdHkgX3R5cGVDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgdHlwZUNsYXNzID0+IF90eXBlQ2xhc3MgPz89IF9maW5kQ2xhc3MoY29yZUxpYnJhcnksICdUeXBlJyk7CgogIENsYXNzRW50aXR5IF9zdGFja1RyYWNlQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IHN0YWNrVHJhY2VDbGFzcyA9PgogICAgICBfc3RhY2tUcmFjZUNsYXNzID8/PSBfZmluZENsYXNzKGNvcmVMaWJyYXJ5LCAnU3RhY2tUcmFjZScpOwoKICBDbGFzc0VudGl0eSBfbGlzdENsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBsaXN0Q2xhc3MgPT4gX2xpc3RDbGFzcyA/Pz0gX2ZpbmRDbGFzcyhjb3JlTGlicmFyeSwgJ0xpc3QnKTsKCiAgQ2xhc3NFbnRpdHkgX3NldENsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBzZXRDbGFzcyA9PiBfc2V0Q2xhc3MgPz89IF9maW5kQ2xhc3MoY29yZUxpYnJhcnksICdTZXQnKTsKCiAgQ2xhc3NFbnRpdHkgX21hcENsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBtYXBDbGFzcyA9PiBfbWFwQ2xhc3MgPz89IF9maW5kQ2xhc3MoY29yZUxpYnJhcnksICdNYXAnKTsKCiAgQ2xhc3NFbnRpdHkgX3VubW9kaWZpYWJsZVNldENsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCB1bm1vZGlmaWFibGVTZXRDbGFzcyA9PiBfdW5tb2RpZmlhYmxlU2V0Q2xhc3MgPz89CiAgICAgIF9maW5kQ2xhc3MoX2Vudi5sb29rdXBMaWJyYXJ5KFVyaXMuZGFydF9jb2xsZWN0aW9uKSwgJ19Vbm1vZGlmaWFibGVTZXQnKTsKCiAgQ2xhc3NFbnRpdHkgX2l0ZXJhYmxlQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGl0ZXJhYmxlQ2xhc3MgPT4KICAgICAgX2l0ZXJhYmxlQ2xhc3MgPz89IF9maW5kQ2xhc3MoY29yZUxpYnJhcnksICdJdGVyYWJsZScpOwoKICBDbGFzc0VudGl0eSBfZnV0dXJlQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGZ1dHVyZUNsYXNzID0+CiAgICAgIF9mdXR1cmVDbGFzcyA/Pz0gX2ZpbmRDbGFzcyhhc3luY0xpYnJhcnksICdGdXR1cmUnKTsKCiAgQ2xhc3NFbnRpdHkgX3N0cmVhbUNsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBzdHJlYW1DbGFzcyA9PgogICAgICBfc3RyZWFtQ2xhc3MgPz89IF9maW5kQ2xhc3MoYXN5bmNMaWJyYXJ5LCAnU3RyZWFtJyk7CgogIExpYnJhcnlFbnRpdHkgX2NvcmVMaWJyYXJ5OwogIEBvdmVycmlkZQogIExpYnJhcnlFbnRpdHkgZ2V0IGNvcmVMaWJyYXJ5ID0+CiAgICAgIF9jb3JlTGlicmFyeSA/Pz0gX2Vudi5sb29rdXBMaWJyYXJ5KFVyaXMuZGFydF9jb3JlLCByZXF1aXJlZDogdHJ1ZSk7CgogIExpYnJhcnlFbnRpdHkgX2FzeW5jTGlicmFyeTsKICBAb3ZlcnJpZGUKICBMaWJyYXJ5RW50aXR5IGdldCBhc3luY0xpYnJhcnkgPT4KICAgICAgX2FzeW5jTGlicmFyeSA/Pz0gX2Vudi5sb29rdXBMaWJyYXJ5KFVyaXMuZGFydF9hc3luYyk7CgogIC8vLyBUaGUgZGFydDptaXJyb3JzIGxpYnJhcnkuCiAgLy8vCiAgLy8vIE51bGwgaWYgdGhlIHByb2dyYW0gZG9lc24ndCBhY2Nlc3MgZGFydDptaXJyb3JzLgogIExpYnJhcnlFbnRpdHkgX21pcnJvcnNMaWJyYXJ5OwogIEBvdmVycmlkZQogIExpYnJhcnlFbnRpdHkgZ2V0IG1pcnJvcnNMaWJyYXJ5ID0+CiAgICAgIF9taXJyb3JzTGlicmFyeSA/Pz0gX2Vudi5sb29rdXBMaWJyYXJ5KFVyaXMuZGFydF9taXJyb3JzKTsKCiAgTGlicmFyeUVudGl0eSBfdHlwZWREYXRhTGlicmFyeTsKICBAb3ZlcnJpZGUKICBMaWJyYXJ5RW50aXR5IGdldCB0eXBlZERhdGFMaWJyYXJ5ID0+CiAgICAgIF90eXBlZERhdGFMaWJyYXJ5ID8/PSBfZW52Lmxvb2t1cExpYnJhcnkoVXJpcy5kYXJ0X19uYXRpdmVfdHlwZWRfZGF0YSk7CgogIExpYnJhcnlFbnRpdHkgX2pzSGVscGVyTGlicmFyeTsKICBAb3ZlcnJpZGUKICBMaWJyYXJ5RW50aXR5IGdldCBqc0hlbHBlckxpYnJhcnkgPT4KICAgICAgX2pzSGVscGVyTGlicmFyeSA/Pz0gX2Vudi5sb29rdXBMaWJyYXJ5KFVyaXMuZGFydF9fanNfaGVscGVyKTsKCiAgTGlicmFyeUVudGl0eSBfaW50ZXJjZXB0b3JzTGlicmFyeTsKICBAb3ZlcnJpZGUKICBMaWJyYXJ5RW50aXR5IGdldCBpbnRlcmNlcHRvcnNMaWJyYXJ5ID0+CiAgICAgIF9pbnRlcmNlcHRvcnNMaWJyYXJ5ID8/PSBfZW52Lmxvb2t1cExpYnJhcnkoVXJpcy5kYXJ0X19pbnRlcmNlcHRvcnMpOwoKICBMaWJyYXJ5RW50aXR5IF9mb3JlaWduTGlicmFyeTsKICBAb3ZlcnJpZGUKICBMaWJyYXJ5RW50aXR5IGdldCBmb3JlaWduTGlicmFyeSA9PgogICAgICBfZm9yZWlnbkxpYnJhcnkgPz89IF9lbnYubG9va3VwTGlicmFyeShVcmlzLmRhcnRfX2ZvcmVpZ25faGVscGVyKTsKCiAgTGlicmFyeUVudGl0eSBfcnRpTGlicmFyeTsKICBAb3ZlcnJpZGUKICBMaWJyYXJ5RW50aXR5IGdldCBydGlMaWJyYXJ5ID0+CiAgICAgIF9ydGlMaWJyYXJ5ID8/PSBfZW52Lmxvb2t1cExpYnJhcnkoVXJpcy5kYXJ0X19ydGksIHJlcXVpcmVkOiB0cnVlKTsKCiAgLy8vIFJlZmVyZW5jZSB0byB0aGUgaW50ZXJuYWwgbGlicmFyeSB0byBsb29rdXAgZnVuY3Rpb25zIHRvIGFsd2F5cyBpbmxpbmUuCiAgTGlicmFyeUVudGl0eSBfaW50ZXJuYWxMaWJyYXJ5OwogIEBvdmVycmlkZQogIExpYnJhcnlFbnRpdHkgZ2V0IGludGVybmFsTGlicmFyeSA9PiBfaW50ZXJuYWxMaWJyYXJ5ID8/PQogICAgICBfZW52Lmxvb2t1cExpYnJhcnkoVXJpcy5kYXJ0X19pbnRlcm5hbCwgcmVxdWlyZWQ6IHRydWUpOwoKICBMaWJyYXJ5RW50aXR5IF9kYXJ0SnNMaWJyYXJ5OwogIEBvdmVycmlkZQogIExpYnJhcnlFbnRpdHkgZ2V0IGRhcnRKc0xpYnJhcnkgPT4KICAgICAgX2RhcnRKc0xpYnJhcnkgPz89IF9lbnYubG9va3VwTGlicmFyeShVcmlzLmRhcnRfanMpOwoKICBMaWJyYXJ5RW50aXR5IF9wYWNrYWdlSnNMaWJyYXJ5OwogIEBvdmVycmlkZQogIExpYnJhcnlFbnRpdHkgZ2V0IHBhY2thZ2VKc0xpYnJhcnkgPT4KICAgICAgX3BhY2thZ2VKc0xpYnJhcnkgPz89IF9lbnYubG9va3VwTGlicmFyeShVcmlzLnBhY2thZ2VfanMpOwoKICBDbGFzc0VudGl0eSBfdHlwZWREYXRhQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IHR5cGVkRGF0YUNsYXNzID0+CiAgICAgIF90eXBlZERhdGFDbGFzcyA/Pz0gX2ZpbmRDbGFzcyh0eXBlZERhdGFMaWJyYXJ5LCAnTmF0aXZlVHlwZWREYXRhJyk7CgogIENvbnN0cnVjdG9yRW50aXR5IF9zeW1ib2xDb25zdHJ1Y3RvclRhcmdldDsKICBAb3ZlcnJpZGUKICBDb25zdHJ1Y3RvckVudGl0eSBnZXQgc3ltYm9sQ29uc3RydWN0b3JUYXJnZXQgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogS2VybmVsIGRvZXMgbm90IGluY2x1ZGUgcmVkaXJlY3RpbmcgZmFjdG9yaWVzCiAgICAvLyBzbyB0aGlzIGNhbm5vdCBiZSBmb3VuZCBpbiBrZXJuZWwuIEZpbmQgYSBjb25zaXN0ZW50IHdheSB0byBoYW5kbGUKICAgIC8vIHRoaXMgYW5kIHNpbWlsYXIgY2FzZXMuCiAgICByZXR1cm4gX3N5bWJvbENvbnN0cnVjdG9yVGFyZ2V0ID8/PQogICAgICAgIF9maW5kQ29uc3RydWN0b3Ioc3ltYm9sSW1wbGVtZW50YXRpb25DbGFzcywgJycpOwogIH0KCiAgYm9vbCBfY29tcHV0ZWRTeW1ib2xDb25zdHJ1Y3RvckRlcGVuZGVuY2llcyA9IGZhbHNlOwogIENvbnN0cnVjdG9yRW50aXR5IF9zeW1ib2xDb25zdHJ1Y3RvckltcGxlbWVudGF0aW9uVGFyZ2V0OwoKICB2b2lkIF9lbnN1cmVTeW1ib2xDb25zdHJ1Y3RvckRlcGVuZGVuY2llcygpIHsKICAgIGlmIChfY29tcHV0ZWRTeW1ib2xDb25zdHJ1Y3RvckRlcGVuZGVuY2llcykgcmV0dXJuOwogICAgX2NvbXB1dGVkU3ltYm9sQ29uc3RydWN0b3JEZXBlbmRlbmNpZXMgPSB0cnVlOwogICAgaWYgKF9zeW1ib2xDb25zdHJ1Y3RvclRhcmdldCA9PSBudWxsKSB7CiAgICAgIGlmIChfc3ltYm9sSW1wbGVtZW50YXRpb25DbGFzcyA9PSBudWxsKSB7CiAgICAgICAgX3N5bWJvbEltcGxlbWVudGF0aW9uQ2xhc3MgPQogICAgICAgICAgICBfZmluZENsYXNzKGludGVybmFsTGlicmFyeSwgJ1N5bWJvbCcsIHJlcXVpcmVkOiBmYWxzZSk7CiAgICAgIH0KICAgICAgaWYgKF9zeW1ib2xJbXBsZW1lbnRhdGlvbkNsYXNzICE9IG51bGwpIHsKICAgICAgICBfc3ltYm9sQ29uc3RydWN0b3JUYXJnZXQgPQogICAgICAgICAgICBfZmluZENvbnN0cnVjdG9yKF9zeW1ib2xJbXBsZW1lbnRhdGlvbkNsYXNzLCAnJywgcmVxdWlyZWQ6IGZhbHNlKTsKICAgICAgfQogICAgfQogICAgaWYgKF9zeW1ib2xDbGFzcyA9PSBudWxsKSB7CiAgICAgIF9zeW1ib2xDbGFzcyA9IF9maW5kQ2xhc3MoY29yZUxpYnJhcnksICdTeW1ib2wnLCByZXF1aXJlZDogZmFsc2UpOwogICAgfQogICAgaWYgKF9zeW1ib2xDbGFzcyA9PSBudWxsKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIF9zeW1ib2xDb25zdHJ1Y3RvckltcGxlbWVudGF0aW9uVGFyZ2V0ID0KICAgICAgICBfZmluZENvbnN0cnVjdG9yKHN5bWJvbENsYXNzLCAnJywgcmVxdWlyZWQ6IGZhbHNlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNTeW1ib2xDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvckVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoZWxlbWVudCAhPSBudWxsKTsKICAgIF9lbnN1cmVTeW1ib2xDb25zdHJ1Y3RvckRlcGVuZGVuY2llcygpOwogICAgcmV0dXJuIGVsZW1lbnQgPT0gX3N5bWJvbENvbnN0cnVjdG9ySW1wbGVtZW50YXRpb25UYXJnZXQgfHwKICAgICAgICBlbGVtZW50ID09IF9zeW1ib2xDb25zdHJ1Y3RvclRhcmdldDsKICB9CgogIEZ1bmN0aW9uRW50aXR5IF9pZGVudGljYWxGdW5jdGlvbjsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgaWRlbnRpY2FsRnVuY3Rpb24gPT4KICAgICAgX2lkZW50aWNhbEZ1bmN0aW9uID8/PSBfZmluZExpYnJhcnlNZW1iZXIoY29yZUxpYnJhcnksICdpZGVudGljYWwnKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Z1bmN0aW9uQXBwbHlNZXRob2QoTWVtYmVyRW50aXR5IGVsZW1lbnQpID0+CiAgICAgIGVsZW1lbnQubmFtZSA9PSAnYXBwbHknICYmIGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MgPT0gZnVuY3Rpb25DbGFzczsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtlbGVtZW50XSBpcyB0aGUgdW5uYW1lZCBjb25zdHJ1Y3RvciBvZiBgTGlzdGAuCiAgLy8vCiAgLy8vIFRoaXMgd2lsbCBub3QgcmVzb2x2ZSB0aGUgY29uc3RydWN0b3IgaWYgaXQgaGFzbid0IGJlZW4gc2VlbiB5ZXQgZHVyaW5nCiAgLy8vIGNvbXBpbGF0aW9uLgogIEBvdmVycmlkZQogIGJvb2wgaXNVbm5hbWVkTGlzdENvbnN0cnVjdG9yKENvbnN0cnVjdG9yRW50aXR5IGVsZW1lbnQpID0+CiAgICAgIChlbGVtZW50Lm5hbWUgPT0gJycgJiYgZWxlbWVudC5lbmNsb3NpbmdDbGFzcyA9PSBsaXN0Q2xhc3MpIHx8CiAgICAgIChlbGVtZW50Lm5hbWUgPT0gJ2xpc3QnICYmIGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MgPT0ganNBcnJheUNsYXNzKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtlbGVtZW50XSBpcyB0aGUgJ2ZpbGxlZCcgY29uc3RydWN0b3Igb2YgYExpc3RgLgogIC8vLwogIC8vLyBUaGlzIHdpbGwgbm90IHJlc29sdmUgdGhlIGNvbnN0cnVjdG9yIGlmIGl0IGhhc24ndCBiZWVuIHNlZW4geWV0IGR1cmluZwogIC8vLyBjb21waWxhdGlvbi4KICBAb3ZlcnJpZGUKICBib29sIGlzRmlsbGVkTGlzdENvbnN0cnVjdG9yKENvbnN0cnVjdG9yRW50aXR5IGVsZW1lbnQpID0+CiAgICAgIGVsZW1lbnQubmFtZSA9PSAnZmlsbGVkJyAmJiBlbGVtZW50LmVuY2xvc2luZ0NsYXNzID09IGxpc3RDbGFzczsKCiAgQG92ZXJyaWRlCiAgRHluYW1pY1R5cGUgZ2V0IGR5bmFtaWNUeXBlID0+IF9lbnYuZHluYW1pY1R5cGU7CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0IG9iamVjdFR5cGUgPT4gX2dldFJhd1R5cGUob2JqZWN0Q2xhc3MpOwoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldCBib29sVHlwZSA9PiBfZ2V0UmF3VHlwZShib29sQ2xhc3MpOwoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldCBudW1UeXBlID0+IF9nZXRSYXdUeXBlKG51bUNsYXNzKTsKCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXQgaW50VHlwZSA9PiBfZ2V0UmF3VHlwZShpbnRDbGFzcyk7CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0IGRvdWJsZVR5cGUgPT4gX2dldFJhd1R5cGUoZG91YmxlQ2xhc3MpOwoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldCBzdHJpbmdUeXBlID0+IF9nZXRSYXdUeXBlKHN0cmluZ0NsYXNzKTsKCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXQgc3ltYm9sVHlwZSA9PiBfZ2V0UmF3VHlwZShzeW1ib2xDbGFzcyk7CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0IGZ1bmN0aW9uVHlwZSA9PiBfZ2V0UmF3VHlwZShmdW5jdGlvbkNsYXNzKTsKCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXQgbnVsbFR5cGUgPT4gX2dldFJhd1R5cGUobnVsbENsYXNzKTsKCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXQgdHlwZVR5cGUgPT4gX2dldFJhd1R5cGUodHlwZUNsYXNzKTsKCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXQgdHlwZUxpdGVyYWxUeXBlID0+IF9nZXRSYXdUeXBlKHR5cGVMaXRlcmFsQ2xhc3MpOwoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldCBzdGFja1RyYWNlVHlwZSA9PiBfZ2V0UmF3VHlwZShzdGFja1RyYWNlQ2xhc3MpOwoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGxpc3RUeXBlKFtEYXJ0VHlwZSBlbGVtZW50VHlwZV0pIHsKICAgIGlmIChlbGVtZW50VHlwZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfZ2V0UmF3VHlwZShsaXN0Q2xhc3MpOwogICAgfQogICAgcmV0dXJuIF9jcmVhdGVJbnRlcmZhY2VUeXBlKGxpc3RDbGFzcywgW2VsZW1lbnRUeXBlXSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIHNldFR5cGUoW0RhcnRUeXBlIGVsZW1lbnRUeXBlXSkgewogICAgaWYgKGVsZW1lbnRUeXBlID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9nZXRSYXdUeXBlKHNldENsYXNzKTsKICAgIH0KICAgIHJldHVybiBfY3JlYXRlSW50ZXJmYWNlVHlwZShzZXRDbGFzcywgW2VsZW1lbnRUeXBlXSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIG1hcFR5cGUoW0RhcnRUeXBlIGtleVR5cGUsIERhcnRUeXBlIHZhbHVlVHlwZV0pIHsKICAgIGlmIChrZXlUeXBlID09IG51bGwgJiYgdmFsdWVUeXBlID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9nZXRSYXdUeXBlKG1hcENsYXNzKTsKICAgIH0gZWxzZSBpZiAoa2V5VHlwZSA9PSBudWxsKSB7CiAgICAgIGtleVR5cGUgPSBkeW5hbWljVHlwZTsKICAgIH0gZWxzZSBpZiAodmFsdWVUeXBlID09IG51bGwpIHsKICAgICAgdmFsdWVUeXBlID0gZHluYW1pY1R5cGU7CiAgICB9CiAgICByZXR1cm4gX2NyZWF0ZUludGVyZmFjZVR5cGUobWFwQ2xhc3MsIFtrZXlUeXBlLCB2YWx1ZVR5cGVdKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgaXRlcmFibGVUeXBlKFtEYXJ0VHlwZSBlbGVtZW50VHlwZV0pIHsKICAgIGlmIChlbGVtZW50VHlwZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfZ2V0UmF3VHlwZShpdGVyYWJsZUNsYXNzKTsKICAgIH0KICAgIHJldHVybiBfY3JlYXRlSW50ZXJmYWNlVHlwZShpdGVyYWJsZUNsYXNzLCBbZWxlbWVudFR5cGVdKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZnV0dXJlVHlwZShbRGFydFR5cGUgZWxlbWVudFR5cGVdKSB7CiAgICBpZiAoZWxlbWVudFR5cGUgPT0gbnVsbCkgewogICAgICByZXR1cm4gX2dldFJhd1R5cGUoZnV0dXJlQ2xhc3MpOwogICAgfQogICAgcmV0dXJuIF9jcmVhdGVJbnRlcmZhY2VUeXBlKGZ1dHVyZUNsYXNzLCBbZWxlbWVudFR5cGVdKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgc3RyZWFtVHlwZShbRGFydFR5cGUgZWxlbWVudFR5cGVdKSB7CiAgICBpZiAoZWxlbWVudFR5cGUgPT0gbnVsbCkgewogICAgICByZXR1cm4gX2dldFJhd1R5cGUoc3RyZWFtQ2xhc3MpOwogICAgfQogICAgcmV0dXJuIF9jcmVhdGVJbnRlcmZhY2VUeXBlKHN0cmVhbUNsYXNzLCBbZWxlbWVudFR5cGVdKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNOdW1iZXJPclN0cmluZ1N1cGVydHlwZShDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gZWxlbWVudCA9PSBfZmluZENsYXNzKGNvcmVMaWJyYXJ5LCAnQ29tcGFyYWJsZScsIHJlcXVpcmVkOiBmYWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzU3RyaW5nT25seVN1cGVydHlwZShDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gZWxlbWVudCA9PSBfZmluZENsYXNzKGNvcmVMaWJyYXJ5LCAnUGF0dGVybicsIHJlcXVpcmVkOiBmYWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzTGlzdFN1cGVydHlwZShDbGFzc0VudGl0eSBlbGVtZW50KSA9PiBlbGVtZW50ID09IGl0ZXJhYmxlQ2xhc3M7CgogIENsYXNzRW50aXR5IF9maW5kQ2xhc3MoTGlicmFyeUVudGl0eSBsaWJyYXJ5LCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgcmVxdWlyZWQ6IHRydWV9KSB7CiAgICBpZiAobGlicmFyeSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfZW52Lmxvb2t1cENsYXNzKGxpYnJhcnksIG5hbWUsIHJlcXVpcmVkOiByZXF1aXJlZCk7CiAgfQoKICBNZW1iZXJFbnRpdHkgX2ZpbmRMaWJyYXJ5TWVtYmVyKExpYnJhcnlFbnRpdHkgbGlicmFyeSwgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIHNldHRlcjogZmFsc2UsIGJvb2wgcmVxdWlyZWQ6IHRydWV9KSB7CiAgICBpZiAobGlicmFyeSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfZW52Lmxvb2t1cExpYnJhcnlNZW1iZXIobGlicmFyeSwgbmFtZSwKICAgICAgICBzZXR0ZXI6IHNldHRlciwgcmVxdWlyZWQ6IHJlcXVpcmVkKTsKICB9CgogIE1lbWJlckVudGl0eSBfZmluZENsYXNzTWVtYmVyKENsYXNzRW50aXR5IGNscywgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIHNldHRlcjogZmFsc2UsIGJvb2wgcmVxdWlyZWQ6IHRydWV9KSB7CiAgICByZXR1cm4gX2Vudi5sb29rdXBMb2NhbENsYXNzTWVtYmVyKGNscywgbmFtZSwKICAgICAgICBzZXR0ZXI6IHNldHRlciwgcmVxdWlyZWQ6IHJlcXVpcmVkKTsKICB9CgogIENvbnN0cnVjdG9yRW50aXR5IF9maW5kQ29uc3RydWN0b3IoQ2xhc3NFbnRpdHkgY2xzLCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgcmVxdWlyZWQ6IHRydWV9KSB7CiAgICByZXR1cm4gX2Vudi5sb29rdXBDb25zdHJ1Y3RvcihjbHMsIG5hbWUsIHJlcXVpcmVkOiByZXF1aXJlZCk7CiAgfQoKICAvLy8gUmV0dXJuIHRoZSByYXcgdHlwZSBvZiBbY2xzXS4KICBJbnRlcmZhY2VUeXBlIF9nZXRSYXdUeXBlKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIF9lbnYuZ2V0UmF3VHlwZShjbHMpOwogIH0KCiAgLy8vIENyZWF0ZSB0aGUgaW5zdGFudGlhdGlvbiBvZiBbY2xzXSB3aXRoIHRoZSBnaXZlbiBbdHlwZUFyZ3VtZW50c10uCiAgSW50ZXJmYWNlVHlwZSBfY3JlYXRlSW50ZXJmYWNlVHlwZSgKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICByZXR1cm4gX2Vudi5jcmVhdGVJbnRlcmZhY2VUeXBlKGNscywgdHlwZUFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldENvbnN0YW50TWFwVHlwZUZvcihJbnRlcmZhY2VUeXBlIHNvdXJjZVR5cGUsCiAgICAgIHtib29sIGhhc1Byb3RvS2V5OiBmYWxzZSwgYm9vbCBvbmx5U3RyaW5nS2V5czogZmFsc2V9KSB7CiAgICBDbGFzc0VudGl0eSBjbGFzc0VsZW1lbnQgPSBvbmx5U3RyaW5nS2V5cwogICAgICAgID8gKGhhc1Byb3RvS2V5ID8gY29uc3RhbnRQcm90b01hcENsYXNzIDogY29uc3RhbnRTdHJpbmdNYXBDbGFzcykKICAgICAgICA6IGdlbmVyYWxDb25zdGFudE1hcENsYXNzOwogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50ID0gc291cmNlVHlwZS50eXBlQXJndW1lbnRzOwogICAgaWYgKHNvdXJjZVR5cGUudHJlYXRBc1JhdykgewogICAgICByZXR1cm4gX2Vudi5nZXRSYXdUeXBlKGNsYXNzRWxlbWVudCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX2Vudi5jcmVhdGVJbnRlcmZhY2VUeXBlKGNsYXNzRWxlbWVudCwgdHlwZUFyZ3VtZW50KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0Q29uc3RhbnRTZXRUeXBlRm9yKEludGVyZmFjZVR5cGUgc291cmNlVHlwZSkgPT4KICAgICAgc291cmNlVHlwZS50cmVhdEFzUmF3CiAgICAgICAgICA/IF9lbnYuZ2V0UmF3VHlwZShjb25zdFNldExpdGVyYWxDbGFzcykKICAgICAgICAgIDogX2Vudi5jcmVhdGVJbnRlcmZhY2VUeXBlKAogICAgICAgICAgICAgIGNvbnN0U2V0TGl0ZXJhbENsYXNzLCBzb3VyY2VUeXBlLnR5cGVBcmd1bWVudHMpOwoKICBAb3ZlcnJpZGUKICBGaWVsZEVudGl0eSBnZXQgc3ltYm9sRmllbGQgPT4gc3ltYm9sSW1wbGVtZW50YXRpb25GaWVsZDsKCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXQgc3ltYm9sSW1wbGVtZW50YXRpb25UeXBlID0+CiAgICAgIF9lbnYuZ2V0UmF3VHlwZShzeW1ib2xJbXBsZW1lbnRhdGlvbkNsYXNzKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0RlZmF1bHRFcXVhbGl0eUltcGxlbWVudGF0aW9uKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoZWxlbWVudC5uYW1lID09ICc9PScpOwogICAgQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50ID0gZWxlbWVudC5lbmNsb3NpbmdDbGFzczsKICAgIHJldHVybiBjbGFzc0VsZW1lbnQgPT0gb2JqZWN0Q2xhc3MgfHwKICAgICAgICBjbGFzc0VsZW1lbnQgPT0ganNJbnRlcmNlcHRvckNsYXNzIHx8CiAgICAgICAgY2xhc3NFbGVtZW50ID09IGpzTnVsbENsYXNzOwogIH0KCiAgLy8gRnJvbSBkYXJ0OmNvcmUKCiAgQ2xhc3NFbnRpdHkgX21hcExpdGVyYWxDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgbWFwTGl0ZXJhbENsYXNzIHsKICAgIGlmIChfbWFwTGl0ZXJhbENsYXNzID09IG51bGwpIHsKICAgICAgX21hcExpdGVyYWxDbGFzcyA9IF9lbnYubG9va3VwQ2xhc3MoY29yZUxpYnJhcnksICdMaW5rZWRIYXNoTWFwJyk7CiAgICAgIGlmIChfbWFwTGl0ZXJhbENsYXNzID09IG51bGwpIHsKICAgICAgICBfbWFwTGl0ZXJhbENsYXNzID0gX2ZpbmRDbGFzcygKICAgICAgICAgICAgX2Vudi5sb29rdXBMaWJyYXJ5KFVyaXMuZGFydF9jb2xsZWN0aW9uKSwgJ0xpbmtlZEhhc2hNYXAnKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIF9tYXBMaXRlcmFsQ2xhc3M7CiAgfQoKICBDb25zdHJ1Y3RvckVudGl0eSBfbWFwTGl0ZXJhbENvbnN0cnVjdG9yOwogIENvbnN0cnVjdG9yRW50aXR5IF9tYXBMaXRlcmFsQ29uc3RydWN0b3JFbXB0eTsKICBGdW5jdGlvbkVudGl0eSBfbWFwTGl0ZXJhbFVudHlwZWRNYWtlcjsKICBGdW5jdGlvbkVudGl0eSBfbWFwTGl0ZXJhbFVudHlwZWRFbXB0eU1ha2VyOwogIHZvaWQgX2Vuc3VyZU1hcExpdGVyYWxIZWxwZXJzKCkgewogICAgaWYgKF9tYXBMaXRlcmFsQ29uc3RydWN0b3IgIT0gbnVsbCkgcmV0dXJuOwoKICAgIF9tYXBMaXRlcmFsQ29uc3RydWN0b3IgPQogICAgICAgIF9lbnYubG9va3VwQ29uc3RydWN0b3IobWFwTGl0ZXJhbENsYXNzLCAnX2xpdGVyYWwnKTsKICAgIF9tYXBMaXRlcmFsQ29uc3RydWN0b3JFbXB0eSA9CiAgICAgICAgX2Vudi5sb29rdXBDb25zdHJ1Y3RvcihtYXBMaXRlcmFsQ2xhc3MsICdfZW1wdHknKTsKICAgIF9tYXBMaXRlcmFsVW50eXBlZE1ha2VyID0KICAgICAgICBfZW52Lmxvb2t1cExvY2FsQ2xhc3NNZW1iZXIobWFwTGl0ZXJhbENsYXNzLCAnX21ha2VMaXRlcmFsJyk7CiAgICBfbWFwTGl0ZXJhbFVudHlwZWRFbXB0eU1ha2VyID0KICAgICAgICBfZW52Lmxvb2t1cExvY2FsQ2xhc3NNZW1iZXIobWFwTGl0ZXJhbENsYXNzLCAnX21ha2VFbXB0eScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0IG1hcExpdGVyYWxDb25zdHJ1Y3RvciB7CiAgICBfZW5zdXJlTWFwTGl0ZXJhbEhlbHBlcnMoKTsKICAgIHJldHVybiBfbWFwTGl0ZXJhbENvbnN0cnVjdG9yOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0IG1hcExpdGVyYWxDb25zdHJ1Y3RvckVtcHR5IHsKICAgIF9lbnN1cmVNYXBMaXRlcmFsSGVscGVycygpOwogICAgcmV0dXJuIF9tYXBMaXRlcmFsQ29uc3RydWN0b3JFbXB0eTsKICB9CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBtYXBMaXRlcmFsVW50eXBlZE1ha2VyIHsKICAgIF9lbnN1cmVNYXBMaXRlcmFsSGVscGVycygpOwogICAgcmV0dXJuIF9tYXBMaXRlcmFsVW50eXBlZE1ha2VyOwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IG1hcExpdGVyYWxVbnR5cGVkRW1wdHlNYWtlciB7CiAgICBfZW5zdXJlTWFwTGl0ZXJhbEhlbHBlcnMoKTsKICAgIHJldHVybiBfbWFwTGl0ZXJhbFVudHlwZWRFbXB0eU1ha2VyOwogIH0KCiAgQ2xhc3NFbnRpdHkgX3NldExpdGVyYWxDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgc2V0TGl0ZXJhbENsYXNzID0+IF9zZXRMaXRlcmFsQ2xhc3MgPz89CiAgICAgIF9maW5kQ2xhc3MoX2Vudi5sb29rdXBMaWJyYXJ5KFVyaXMuZGFydF9jb2xsZWN0aW9uKSwgJ0xpbmtlZEhhc2hTZXQnKTsKCiAgQ29uc3RydWN0b3JFbnRpdHkgX3NldExpdGVyYWxDb25zdHJ1Y3RvcjsKICBDb25zdHJ1Y3RvckVudGl0eSBfc2V0TGl0ZXJhbENvbnN0cnVjdG9yRW1wdHk7CiAgRnVuY3Rpb25FbnRpdHkgX3NldExpdGVyYWxVbnR5cGVkTWFrZXI7CiAgRnVuY3Rpb25FbnRpdHkgX3NldExpdGVyYWxVbnR5cGVkRW1wdHlNYWtlcjsKCiAgdm9pZCBfZW5zdXJlU2V0TGl0ZXJhbEhlbHBlcnMoKSB7CiAgICBpZiAoX3NldExpdGVyYWxDb25zdHJ1Y3RvciAhPSBudWxsKSByZXR1cm47CgogICAgX3NldExpdGVyYWxDb25zdHJ1Y3RvciA9CiAgICAgICAgX2Vudi5sb29rdXBDb25zdHJ1Y3RvcihzZXRMaXRlcmFsQ2xhc3MsICdfbGl0ZXJhbCcpOwogICAgX3NldExpdGVyYWxDb25zdHJ1Y3RvckVtcHR5ID0KICAgICAgICBfZW52Lmxvb2t1cENvbnN0cnVjdG9yKHNldExpdGVyYWxDbGFzcywgJ19lbXB0eScpOwogICAgX3NldExpdGVyYWxVbnR5cGVkTWFrZXIgPQogICAgICAgIF9lbnYubG9va3VwTG9jYWxDbGFzc01lbWJlcihzZXRMaXRlcmFsQ2xhc3MsICdfbWFrZUxpdGVyYWwnKTsKICAgIF9zZXRMaXRlcmFsVW50eXBlZEVtcHR5TWFrZXIgPQogICAgICAgIF9lbnYubG9va3VwTG9jYWxDbGFzc01lbWJlcihzZXRMaXRlcmFsQ2xhc3MsICdfbWFrZUVtcHR5Jyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdHJ1Y3RvckVudGl0eSBnZXQgc2V0TGl0ZXJhbENvbnN0cnVjdG9yIHsKICAgIF9lbnN1cmVTZXRMaXRlcmFsSGVscGVycygpOwogICAgcmV0dXJuIF9zZXRMaXRlcmFsQ29uc3RydWN0b3I7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdHJ1Y3RvckVudGl0eSBnZXQgc2V0TGl0ZXJhbENvbnN0cnVjdG9yRW1wdHkgewogICAgX2Vuc3VyZVNldExpdGVyYWxIZWxwZXJzKCk7CiAgICByZXR1cm4gX3NldExpdGVyYWxDb25zdHJ1Y3RvckVtcHR5OwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNldExpdGVyYWxVbnR5cGVkTWFrZXIgewogICAgX2Vuc3VyZVNldExpdGVyYWxIZWxwZXJzKCk7CiAgICByZXR1cm4gX3NldExpdGVyYWxVbnR5cGVkTWFrZXI7CiAgfQoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgc2V0TGl0ZXJhbFVudHlwZWRFbXB0eU1ha2VyIHsKICAgIF9lbnN1cmVTZXRMaXRlcmFsSGVscGVycygpOwogICAgcmV0dXJuIF9zZXRMaXRlcmFsVW50eXBlZEVtcHR5TWFrZXI7CiAgfQoKICBGdW5jdGlvbkVudGl0eSBfb2JqZWN0Tm9TdWNoTWV0aG9kOwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBvYmplY3ROb1N1Y2hNZXRob2QgewogICAgcmV0dXJuIF9vYmplY3ROb1N1Y2hNZXRob2QgPz89CiAgICAgICAgX2Vudi5sb29rdXBMb2NhbENsYXNzTWVtYmVyKG9iamVjdENsYXNzLCBJZGVudGlmaWVycy5ub1N1Y2hNZXRob2RfKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNEZWZhdWx0Tm9TdWNoTWV0aG9kSW1wbGVtZW50YXRpb24oRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50ID0gZWxlbWVudC5lbmNsb3NpbmdDbGFzczsKICAgIHJldHVybiBjbGFzc0VsZW1lbnQgPT0gb2JqZWN0Q2xhc3MgfHwKICAgICAgICBjbGFzc0VsZW1lbnQgPT0ganNJbnRlcmNlcHRvckNsYXNzIHx8CiAgICAgICAgY2xhc3NFbGVtZW50ID09IGpzTnVsbENsYXNzOwogIH0KCiAgLy8gRnJvbSBkYXJ0OmFzeW5jCiAgQ2xhc3NFbnRpdHkgX2ZpbmRBc3luY0hlbHBlckNsYXNzKFN0cmluZyBuYW1lKSA9PgogICAgICBfZmluZENsYXNzKGFzeW5jTGlicmFyeSwgbmFtZSk7CgogIEZ1bmN0aW9uRW50aXR5IF9maW5kQXN5bmNIZWxwZXJGdW5jdGlvbihTdHJpbmcgbmFtZSkgPT4KICAgICAgX2ZpbmRMaWJyYXJ5TWVtYmVyKGFzeW5jTGlicmFyeSwgbmFtZSk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3luY0hlbHBlclN0YXJ0U3luYyA9PgogICAgICBfZmluZEFzeW5jSGVscGVyRnVuY3Rpb24oIl9hc3luY1N0YXJ0U3luYyIpOwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3luY0hlbHBlckF3YWl0ID0+CiAgICAgIF9maW5kQXN5bmNIZWxwZXJGdW5jdGlvbigiX2FzeW5jQXdhaXQiKTsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgYXN5bmNIZWxwZXJSZXR1cm4gPT4KICAgICAgX2ZpbmRBc3luY0hlbHBlckZ1bmN0aW9uKCJfYXN5bmNSZXR1cm4iKTsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgYXN5bmNIZWxwZXJSZXRocm93ID0+CiAgICAgIF9maW5kQXN5bmNIZWxwZXJGdW5jdGlvbigiX2FzeW5jUmV0aHJvdyIpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgd3JhcEJvZHkgPT4KICAgICAgX2ZpbmRBc3luY0hlbHBlckZ1bmN0aW9uKCJfd3JhcEpzRnVuY3Rpb25Gb3JBc3luYyIpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgeWllbGRTdGFyID0+IF9lbnYubG9va3VwTG9jYWxDbGFzc01lbWJlcigKICAgICAgX2ZpbmRBc3luY0hlbHBlckNsYXNzKCJfSXRlcmF0aW9uTWFya2VyIiksICJ5aWVsZFN0YXIiKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHlpZWxkU2luZ2xlID0+IF9lbnYubG9va3VwTG9jYWxDbGFzc01lbWJlcigKICAgICAgX2ZpbmRBc3luY0hlbHBlckNsYXNzKCJfSXRlcmF0aW9uTWFya2VyIiksICJ5aWVsZFNpbmdsZSIpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgc3luY1N0YXJVbmNhdWdodEVycm9yID0+IF9lbnYubG9va3VwTG9jYWxDbGFzc01lbWJlcigKICAgICAgX2ZpbmRBc3luY0hlbHBlckNsYXNzKCJfSXRlcmF0aW9uTWFya2VyIiksICJ1bmNhdWdodEVycm9yIik7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3luY1N0YXJIZWxwZXIgPT4KICAgICAgX2ZpbmRBc3luY0hlbHBlckZ1bmN0aW9uKCJfYXN5bmNTdGFySGVscGVyIik7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBzdHJlYW1PZkNvbnRyb2xsZXIgPT4KICAgICAgX2ZpbmRBc3luY0hlbHBlckZ1bmN0aW9uKCJfc3RyZWFtT2ZDb250cm9sbGVyIik7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBlbmRPZkl0ZXJhdGlvbiA9PiBfZW52Lmxvb2t1cExvY2FsQ2xhc3NNZW1iZXIoCiAgICAgIF9maW5kQXN5bmNIZWxwZXJDbGFzcygiX0l0ZXJhdGlvbk1hcmtlciIpLCAiZW5kT2ZJdGVyYXRpb24iKTsKCiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IHN5bmNTdGFySXRlcmFibGUgPT4KICAgICAgX2ZpbmRBc3luY0hlbHBlckNsYXNzKCJfU3luY1N0YXJJdGVyYWJsZSIpOwoKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgZnV0dXJlSW1wbGVtZW50YXRpb24gPT4gX2ZpbmRBc3luY0hlbHBlckNsYXNzKCdfRnV0dXJlJyk7CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBjb250cm9sbGVyU3RyZWFtID0+CiAgICAgIF9maW5kQXN5bmNIZWxwZXJDbGFzcygiX0NvbnRyb2xsZXJTdHJlYW0iKTsKCiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IHN0cmVhbUl0ZXJhdG9yID0+IF9maW5kQXN5bmNIZWxwZXJDbGFzcygiU3RyZWFtSXRlcmF0b3IiKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0IHN0cmVhbUl0ZXJhdG9yQ29uc3RydWN0b3IgPT4KICAgICAgX2Vudi5sb29rdXBDb25zdHJ1Y3RvcihzdHJlYW1JdGVyYXRvciwgIiIpOwoKICBGdW5jdGlvbkVudGl0eSBfc3luY1N0YXJJdGVyYWJsZUZhY3Rvcnk7CiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHN5bmNTdGFySXRlcmFibGVGYWN0b3J5ID0+IF9zeW5jU3Rhckl0ZXJhYmxlRmFjdG9yeSA/Pz0KICAgICAgX2ZpbmRBc3luY0hlbHBlckZ1bmN0aW9uKCdfbWFrZVN5bmNTdGFySXRlcmFibGUnKTsKCiAgRnVuY3Rpb25FbnRpdHkgX2FzeW5jQXdhaXRDb21wbGV0ZXJGYWN0b3J5OwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3luY0F3YWl0Q29tcGxldGVyRmFjdG9yeSA9PgogICAgICBfYXN5bmNBd2FpdENvbXBsZXRlckZhY3RvcnkgPz89CiAgICAgICAgICBfZmluZEFzeW5jSGVscGVyRnVuY3Rpb24oJ19tYWtlQXN5bmNBd2FpdENvbXBsZXRlcicpOwoKICBGdW5jdGlvbkVudGl0eSBfYXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlckZhY3Rvcnk7CiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGFzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJGYWN0b3J5ID0+CiAgICAgIF9hc3luY1N0YXJTdHJlYW1Db250cm9sbGVyRmFjdG9yeSA/Pz0KICAgICAgICAgIF9maW5kQXN5bmNIZWxwZXJGdW5jdGlvbignX21ha2VBc3luY1N0YXJTdHJlYW1Db250cm9sbGVyJyk7CgogIC8vIEZyb20gZGFydDpfaW50ZXJjZXB0b3JzCiAgQ2xhc3NFbnRpdHkgX2ZpbmRJbnRlcmNlcHRvcnNDbGFzcyhTdHJpbmcgbmFtZSkgPT4KICAgICAgX2ZpbmRDbGFzcyhpbnRlcmNlcHRvcnNMaWJyYXJ5LCBuYW1lKTsKCiAgRnVuY3Rpb25FbnRpdHkgX2ZpbmRJbnRlcmNlcHRvcnNGdW5jdGlvbihTdHJpbmcgbmFtZSkgPT4KICAgICAgX2ZpbmRMaWJyYXJ5TWVtYmVyKGludGVyY2VwdG9yc0xpYnJhcnksIG5hbWUpOwoKICBDbGFzc0VudGl0eSBfanNJbnRlcmNlcHRvckNsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBqc0ludGVyY2VwdG9yQ2xhc3MgPT4KICAgICAgX2pzSW50ZXJjZXB0b3JDbGFzcyA/Pz0gX2ZpbmRJbnRlcmNlcHRvcnNDbGFzcygnSW50ZXJjZXB0b3InKTsKCiAgQ2xhc3NFbnRpdHkgX2pzU3RyaW5nQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzU3RyaW5nQ2xhc3MgPT4KICAgICAgX2pzU3RyaW5nQ2xhc3MgPz89IF9maW5kSW50ZXJjZXB0b3JzQ2xhc3MoJ0pTU3RyaW5nJyk7CgogIENsYXNzRW50aXR5IF9qc0FycmF5Q2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzQXJyYXlDbGFzcyA9PgogICAgICBfanNBcnJheUNsYXNzID8/PSBfZmluZEludGVyY2VwdG9yc0NsYXNzKCdKU0FycmF5Jyk7CgogIENsYXNzRW50aXR5IF9qc051bWJlckNsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBqc051bWJlckNsYXNzID0+CiAgICAgIF9qc051bWJlckNsYXNzID8/PSBfZmluZEludGVyY2VwdG9yc0NsYXNzKCdKU051bWJlcicpOwoKICBDbGFzc0VudGl0eSBfanNJbnRDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQganNJbnRDbGFzcyA9PiBfanNJbnRDbGFzcyA/Pz0gX2ZpbmRJbnRlcmNlcHRvcnNDbGFzcygnSlNJbnQnKTsKCiAgQ2xhc3NFbnRpdHkgX2pzRG91YmxlQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzRG91YmxlQ2xhc3MgPT4KICAgICAgX2pzRG91YmxlQ2xhc3MgPz89IF9maW5kSW50ZXJjZXB0b3JzQ2xhc3MoJ0pTRG91YmxlJyk7CgogIENsYXNzRW50aXR5IF9qc051bGxDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQganNOdWxsQ2xhc3MgPT4KICAgICAgX2pzTnVsbENsYXNzID8/PSBfZmluZEludGVyY2VwdG9yc0NsYXNzKCdKU051bGwnKTsKCiAgQ2xhc3NFbnRpdHkgX2pzQm9vbENsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBqc0Jvb2xDbGFzcyA9PgogICAgICBfanNCb29sQ2xhc3MgPz89IF9maW5kSW50ZXJjZXB0b3JzQ2xhc3MoJ0pTQm9vbCcpOwoKICBDbGFzc0VudGl0eSBfanNQbGFpbkphdmFTY3JpcHRPYmplY3RDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQganNQbGFpbkphdmFTY3JpcHRPYmplY3RDbGFzcyA9PgogICAgICBfanNQbGFpbkphdmFTY3JpcHRPYmplY3RDbGFzcyA/Pz0KICAgICAgICAgIF9maW5kSW50ZXJjZXB0b3JzQ2xhc3MoJ1BsYWluSmF2YVNjcmlwdE9iamVjdCcpOwoKICBDbGFzc0VudGl0eSBfanNVbmtub3duSmF2YVNjcmlwdE9iamVjdENsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBqc1Vua25vd25KYXZhU2NyaXB0T2JqZWN0Q2xhc3MgPT4KICAgICAgX2pzVW5rbm93bkphdmFTY3JpcHRPYmplY3RDbGFzcyA/Pz0KICAgICAgICAgIF9maW5kSW50ZXJjZXB0b3JzQ2xhc3MoJ1Vua25vd25KYXZhU2NyaXB0T2JqZWN0Jyk7CgogIENsYXNzRW50aXR5IF9qc0phdmFTY3JpcHRGdW5jdGlvbkNsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBqc0phdmFTY3JpcHRGdW5jdGlvbkNsYXNzID0+IF9qc0phdmFTY3JpcHRGdW5jdGlvbkNsYXNzID8/PQogICAgICBfZmluZEludGVyY2VwdG9yc0NsYXNzKCdKYXZhU2NyaXB0RnVuY3Rpb24nKTsKCiAgQ2xhc3NFbnRpdHkgX2pzSmF2YVNjcmlwdE9iamVjdENsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBqc0phdmFTY3JpcHRPYmplY3RDbGFzcyA9PgogICAgICBfanNKYXZhU2NyaXB0T2JqZWN0Q2xhc3MgPz89IF9maW5kSW50ZXJjZXB0b3JzQ2xhc3MoJ0phdmFTY3JpcHRPYmplY3QnKTsKCiAgQ2xhc3NFbnRpdHkgX2pzSW5kZXhhYmxlQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzSW5kZXhhYmxlQ2xhc3MgPT4KICAgICAgX2pzSW5kZXhhYmxlQ2xhc3MgPz89IF9maW5kSW50ZXJjZXB0b3JzQ2xhc3MoJ0pTSW5kZXhhYmxlJyk7CgogIENsYXNzRW50aXR5IF9qc011dGFibGVJbmRleGFibGVDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQganNNdXRhYmxlSW5kZXhhYmxlQ2xhc3MgPT4KICAgICAgX2pzTXV0YWJsZUluZGV4YWJsZUNsYXNzID8/PSBfZmluZEludGVyY2VwdG9yc0NsYXNzKCdKU011dGFibGVJbmRleGFibGUnKTsKCiAgQ2xhc3NFbnRpdHkgX2pzTXV0YWJsZUFycmF5Q2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzTXV0YWJsZUFycmF5Q2xhc3MgPT4KICAgICAgX2pzTXV0YWJsZUFycmF5Q2xhc3MgPz89IF9maW5kSW50ZXJjZXB0b3JzQ2xhc3MoJ0pTTXV0YWJsZUFycmF5Jyk7CgogIENsYXNzRW50aXR5IF9qc0ZpeGVkQXJyYXlDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQganNGaXhlZEFycmF5Q2xhc3MgPT4KICAgICAgX2pzRml4ZWRBcnJheUNsYXNzID8/PSBfZmluZEludGVyY2VwdG9yc0NsYXNzKCdKU0ZpeGVkQXJyYXknKTsKCiAgQ2xhc3NFbnRpdHkgX2pzRXh0ZW5kYWJsZUFycmF5Q2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzRXh0ZW5kYWJsZUFycmF5Q2xhc3MgPT4KICAgICAgX2pzRXh0ZW5kYWJsZUFycmF5Q2xhc3MgPz89IF9maW5kSW50ZXJjZXB0b3JzQ2xhc3MoJ0pTRXh0ZW5kYWJsZUFycmF5Jyk7CgogIENsYXNzRW50aXR5IF9qc1VubW9kaWZpYWJsZUFycmF5Q2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzVW5tb2RpZmlhYmxlQXJyYXlDbGFzcyA9PiBfanNVbm1vZGlmaWFibGVBcnJheUNsYXNzID8/PQogICAgICBfZmluZEludGVyY2VwdG9yc0NsYXNzKCdKU1VubW9kaWZpYWJsZUFycmF5Jyk7CgogIENsYXNzRW50aXR5IF9qc1Bvc2l0aXZlSW50Q2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzUG9zaXRpdmVJbnRDbGFzcyA9PgogICAgICBfanNQb3NpdGl2ZUludENsYXNzID8/PSBfZmluZEludGVyY2VwdG9yc0NsYXNzKCdKU1Bvc2l0aXZlSW50Jyk7CgogIENsYXNzRW50aXR5IF9qc1VJbnQzMkNsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBqc1VJbnQzMkNsYXNzID0+CiAgICAgIF9qc1VJbnQzMkNsYXNzID8/PSBfZmluZEludGVyY2VwdG9yc0NsYXNzKCdKU1VJbnQzMicpOwoKICBDbGFzc0VudGl0eSBfanNVSW50MzFDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQganNVSW50MzFDbGFzcyA9PgogICAgICBfanNVSW50MzFDbGFzcyA/Pz0gX2ZpbmRJbnRlcmNlcHRvcnNDbGFzcygnSlNVSW50MzEnKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0ZpbmRJbmRleEZvck5hdGl2ZVN1YmNsYXNzVHlwZShNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICByZXR1cm4gbWVtYmVyLm5hbWUgPT0gJ2ZpbmRJbmRleEZvck5hdGl2ZVN1YmNsYXNzVHlwZScgJiYKICAgICAgICBtZW1iZXIuaXNUb3BMZXZlbCAmJgogICAgICAgIG1lbWJlci5saWJyYXJ5ID09IGludGVyY2VwdG9yc0xpYnJhcnk7CiAgfQoKICBGdW5jdGlvbkVudGl0eSBfZ2V0TmF0aXZlSW50ZXJjZXB0b3JNZXRob2Q7CiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGdldE5hdGl2ZUludGVyY2VwdG9yTWV0aG9kID0+CiAgICAgIF9nZXROYXRpdmVJbnRlcmNlcHRvck1ldGhvZCA/Pz0KICAgICAgICAgIF9maW5kSW50ZXJjZXB0b3JzRnVuY3Rpb24oJ2dldE5hdGl2ZUludGVyY2VwdG9yJyk7CgogIEBvdmVycmlkZQogIGJvb2wgYXBwbGllc1RvSnNJbmRleGFibGVMZW5ndGgoU2VsZWN0b3Igc2VsZWN0b3IpIHsKICAgIHJldHVybiBzZWxlY3Rvci5uYW1lID09ICdsZW5ndGgnICYmIChzZWxlY3Rvci5pc0dldHRlciB8fCBzZWxlY3Rvci5pc0NhbGwpOwogIH0KCiAgQ29uc3RydWN0b3JFbnRpdHkgX2pzQXJyYXlUeXBlZENvbnN0cnVjdG9yOwogIEBvdmVycmlkZQogIENvbnN0cnVjdG9yRW50aXR5IGdldCBqc0FycmF5VHlwZWRDb25zdHJ1Y3RvciA9PgogICAgICBfanNBcnJheVR5cGVkQ29uc3RydWN0b3IgPz89IF9maW5kQ29uc3RydWN0b3IoanNBcnJheUNsYXNzLCAndHlwZWQnKTsKCiAgRnVuY3Rpb25FbnRpdHkgX2pzQXJyYXlSZW1vdmVMYXN0OwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBqc0FycmF5UmVtb3ZlTGFzdCA9PgogICAgICBfanNBcnJheVJlbW92ZUxhc3QgPz89IF9maW5kQ2xhc3NNZW1iZXIoanNBcnJheUNsYXNzLCAncmVtb3ZlTGFzdCcpOwoKICBGdW5jdGlvbkVudGl0eSBfanNBcnJheUFkZDsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQganNBcnJheUFkZCA9PgogICAgICBfanNBcnJheUFkZCA/Pz0gX2ZpbmRDbGFzc01lbWJlcihqc0FycmF5Q2xhc3MsICdhZGQnKTsKCiAgYm9vbCBfaXNKc1N0cmluZ0NsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGNscy5uYW1lID09ICdKU1N0cmluZycgJiYgY2xzLmxpYnJhcnkgPT0gaW50ZXJjZXB0b3JzTGlicmFyeTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNKc1N0cmluZ1NwbGl0KE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIHJldHVybiBtZW1iZXIubmFtZSA9PSAnc3BsaXQnICYmCiAgICAgICAgbWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIgJiYKICAgICAgICBfaXNKc1N0cmluZ0NsYXNzKG1lbWJlci5lbmNsb3NpbmdDbGFzcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGFwcGxpZXNUb0pzU3RyaW5nU3BsaXQoU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXIsCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbikgewogICAgaWYgKF9qc1N0cmluZ1NwbGl0ID09IG51bGwpIHsKICAgICAgQ2xhc3NFbnRpdHkgY2xzID0KICAgICAgICAgIF9maW5kQ2xhc3MoaW50ZXJjZXB0b3JzTGlicmFyeSwgJ0pTU3RyaW5nJywgcmVxdWlyZWQ6IGZhbHNlKTsKICAgICAgaWYgKGNscyA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgIF9qc1N0cmluZ1NwbGl0ID0gX2ZpbmRDbGFzc01lbWJlcihjbHMsICdzcGxpdCcsIHJlcXVpcmVkOiBmYWxzZSk7CiAgICAgIGlmIChfanNTdHJpbmdTcGxpdCA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gc2VsZWN0b3IuYXBwbGllcyhfanNTdHJpbmdTcGxpdCkgJiYKICAgICAgICAocmVjZWl2ZXIgPT0gbnVsbCB8fAogICAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAgICAgICAuaXNUYXJnZXRpbmdNZW1iZXIocmVjZWl2ZXIsIGpzU3RyaW5nU3BsaXQsIHNlbGVjdG9yLm1lbWJlck5hbWUpCiAgICAgICAgICAgICAgICAuaXNQb3RlbnRpYWxseVRydWUpOwogIH0KCiAgRnVuY3Rpb25FbnRpdHkgX2pzU3RyaW5nU3BsaXQ7CiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGpzU3RyaW5nU3BsaXQgPT4KICAgICAgX2pzU3RyaW5nU3BsaXQgPz89IF9maW5kQ2xhc3NNZW1iZXIoanNTdHJpbmdDbGFzcywgJ3NwbGl0Jyk7CgogIEZ1bmN0aW9uRW50aXR5IF9qc1N0cmluZ1RvU3RyaW5nOwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBqc1N0cmluZ1RvU3RyaW5nID0+CiAgICAgIF9qc1N0cmluZ1RvU3RyaW5nID8/PSBfZmluZENsYXNzTWVtYmVyKGpzU3RyaW5nQ2xhc3MsICd0b1N0cmluZycpOwoKICBGdW5jdGlvbkVudGl0eSBfanNTdHJpbmdPcGVyYXRvckFkZDsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQganNTdHJpbmdPcGVyYXRvckFkZCA9PgogICAgICBfanNTdHJpbmdPcGVyYXRvckFkZCA/Pz0gX2ZpbmRDbGFzc01lbWJlcihqc1N0cmluZ0NsYXNzLCAnKycpOwoKICBDbGFzc0VudGl0eSBfanNDb25zdENsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBqc0NvbnN0Q2xhc3MgPT4KICAgICAgX2pzQ29uc3RDbGFzcyA/Pz0gX2ZpbmRDbGFzcyhmb3JlaWduTGlicmFyeSwgJ0pTX0NPTlNUJyk7CgogIC8vIEZyb20gZGFydDpqcwogIEZ1bmN0aW9uRW50aXR5IF9qc0FsbG93SW50ZXJvcDsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQganNBbGxvd0ludGVyb3AgPT4gX2pzQWxsb3dJbnRlcm9wID8/PQogICAgICBfZmluZExpYnJhcnlNZW1iZXIoZGFydEpzTGlicmFyeSwgJ2FsbG93SW50ZXJvcCcsIHJlcXVpcmVkOiBmYWxzZSk7CgogIC8vIEZyb20gcGFja2FnZTpqcwogIENsYXNzRW50aXR5IF9qc0Fubm90YXRpb25DbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQganNBbm5vdGF0aW9uQ2xhc3MgPT4gX2pzQW5ub3RhdGlvbkNsYXNzID8/PQogICAgICBfZmluZENsYXNzKHBhY2thZ2VKc0xpYnJhcnksICdKUycsIHJlcXVpcmVkOiBmYWxzZSk7CgogIENsYXNzRW50aXR5IF9qc0Fub255bW91c0NsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBqc0Fub255bW91c0NsYXNzID0+IF9qc0Fub255bW91c0NsYXNzID8/PQogICAgICBfZmluZENsYXNzKHBhY2thZ2VKc0xpYnJhcnksICdfQW5vbnltb3VzJywgcmVxdWlyZWQ6IGZhbHNlKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZmluZEhlbHBlckZ1bmN0aW9uKFN0cmluZyBuYW1lKSA9PiBfZmluZEhlbHBlckZ1bmN0aW9uKG5hbWUpOwoKICBGdW5jdGlvbkVudGl0eSBfZmluZEhlbHBlckZ1bmN0aW9uKFN0cmluZyBuYW1lKSA9PgogICAgICBfZmluZExpYnJhcnlNZW1iZXIoanNIZWxwZXJMaWJyYXJ5LCBuYW1lKTsKCiAgQ2xhc3NFbnRpdHkgX2ZpbmRIZWxwZXJDbGFzcyhTdHJpbmcgbmFtZSkgPT4KICAgICAgX2ZpbmRDbGFzcyhqc0hlbHBlckxpYnJhcnksIG5hbWUpOwoKICBDbGFzc0VudGl0eSBfY2xvc3VyZUNsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBjbG9zdXJlQ2xhc3MgPT4gX2Nsb3N1cmVDbGFzcyA/Pz0gX2ZpbmRIZWxwZXJDbGFzcygnQ2xvc3VyZScpOwoKICBDbGFzc0VudGl0eSBfYm91bmRDbG9zdXJlQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGJvdW5kQ2xvc3VyZUNsYXNzID0+CiAgICAgIF9ib3VuZENsb3N1cmVDbGFzcyA/Pz0gX2ZpbmRIZWxwZXJDbGFzcygnQm91bmRDbG9zdXJlJyk7CgogIENsYXNzRW50aXR5IF90eXBlTGl0ZXJhbENsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCB0eXBlTGl0ZXJhbENsYXNzID0+CiAgICAgIF90eXBlTGl0ZXJhbENsYXNzID8/PSBfb3B0aW9ucy5leHBlcmltZW50TmV3UnRpCiAgICAgICAgICA/IF9maW5kUnRpQ2xhc3MoJ19UeXBlJykKICAgICAgICAgIDogX2ZpbmRIZWxwZXJDbGFzcygnVHlwZUltcGwnKTsKCiAgQ2xhc3NFbnRpdHkgX2NvbnN0TWFwTGl0ZXJhbENsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBjb25zdE1hcExpdGVyYWxDbGFzcyA9PgogICAgICBfY29uc3RNYXBMaXRlcmFsQ2xhc3MgPz89IF9maW5kSGVscGVyQ2xhc3MoJ0NvbnN0YW50TWFwJyk7CgogIC8vIFRPRE8oZmlzaHl0aGVmaXNoKTogSW1wbGVtZW50IGEgYENvbnN0YW50U2V0YCBjbGFzcyBhbmQgdXBkYXRlIHRoZSBiYWNrZW5kCiAgLy8gaW1wYWN0cyArIGNvbnN0YW50IGVtaXR0ZXIgYWNjb3JkaW5nbHkuCiAgQ2xhc3NFbnRpdHkgX2NvbnN0U2V0TGl0ZXJhbENsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBjb25zdFNldExpdGVyYWxDbGFzcyA9PgogICAgICBfY29uc3RTZXRMaXRlcmFsQ2xhc3MgPz89IHVubW9kaWZpYWJsZVNldENsYXNzOwoKICBDbGFzc0VudGl0eSBfdHlwZVZhcmlhYmxlQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IHR5cGVWYXJpYWJsZUNsYXNzID0+CiAgICAgIF90eXBlVmFyaWFibGVDbGFzcyA/Pz0gX2ZpbmRIZWxwZXJDbGFzcygnVHlwZVZhcmlhYmxlJyk7CgogIENsYXNzRW50aXR5IF9wcmFnbWFDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgcHJhZ21hQ2xhc3MgPT4KICAgICAgX3ByYWdtYUNsYXNzID8/PSBfZmluZENsYXNzKGNvcmVMaWJyYXJ5LCAncHJhZ21hJyk7CgogIEZpZWxkRW50aXR5IF9wcmFnbWFDbGFzc05hbWVGaWVsZDsKICBAb3ZlcnJpZGUKICBGaWVsZEVudGl0eSBnZXQgcHJhZ21hQ2xhc3NOYW1lRmllbGQgPT4KICAgICAgX3ByYWdtYUNsYXNzTmFtZUZpZWxkID8/PSBfZmluZENsYXNzTWVtYmVyKHByYWdtYUNsYXNzLCAnbmFtZScpOwoKICBGaWVsZEVudGl0eSBfcHJhZ21hQ2xhc3NPcHRpb25zRmllbGQ7CiAgQG92ZXJyaWRlCiAgRmllbGRFbnRpdHkgZ2V0IHByYWdtYUNsYXNzT3B0aW9uc0ZpZWxkID0+CiAgICAgIF9wcmFnbWFDbGFzc09wdGlvbnNGaWVsZCA/Pz0gX2ZpbmRDbGFzc01lbWJlcihwcmFnbWFDbGFzcywgJ29wdGlvbnMnKTsKCiAgQ2xhc3NFbnRpdHkgX2pzSW52b2NhdGlvbk1pcnJvckNsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBqc0ludm9jYXRpb25NaXJyb3JDbGFzcyA9PgogICAgICBfanNJbnZvY2F0aW9uTWlycm9yQ2xhc3MgPz89IF9maW5kSGVscGVyQ2xhc3MoJ0pTSW52b2NhdGlvbk1pcnJvcicpOwoKICBNZW1iZXJFbnRpdHkgX2ludm9jYXRpb25UeXBlQXJndW1lbnRHZXR0ZXI7CiAgQG92ZXJyaWRlCiAgTWVtYmVyRW50aXR5IGdldCBpbnZvY2F0aW9uVHlwZUFyZ3VtZW50R2V0dGVyID0+CiAgICAgIF9pbnZvY2F0aW9uVHlwZUFyZ3VtZW50R2V0dGVyID8/PQogICAgICAgICAgX2ZpbmRDbGFzc01lbWJlcihqc0ludm9jYXRpb25NaXJyb3JDbGFzcywgJ3R5cGVBcmd1bWVudHMnKTsKCiAgQ2xhc3NFbnRpdHkgX2pzSW5kZXhpbmdCZWhhdmlvckludGVyZmFjZTsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQganNJbmRleGluZ0JlaGF2aW9ySW50ZXJmYWNlID0+CiAgICAgIF9qc0luZGV4aW5nQmVoYXZpb3JJbnRlcmZhY2UgPz89CiAgICAgICAgICBfZmluZEhlbHBlckNsYXNzKCdKYXZhU2NyaXB0SW5kZXhpbmdCZWhhdmlvcicpOwoKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgc3RhY2tUcmFjZUhlbHBlckNsYXNzID0+IF9maW5kSGVscGVyQ2xhc3MoJ19TdGFja1RyYWNlJyk7CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBjb25zdGFudE1hcENsYXNzID0+CiAgICAgIF9maW5kSGVscGVyQ2xhc3MoY29uc3RhbnRfc3lzdGVtLkphdmFTY3JpcHRNYXBDb25zdGFudC5EQVJUX0NMQVNTKTsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgY29uc3RhbnRTdHJpbmdNYXBDbGFzcyA9PgogICAgICBfZmluZEhlbHBlckNsYXNzKGNvbnN0YW50X3N5c3RlbS5KYXZhU2NyaXB0TWFwQ29uc3RhbnQuREFSVF9TVFJJTkdfQ0xBU1MpOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBjb25zdGFudFByb3RvTWFwQ2xhc3MgPT4KICAgICAgX2ZpbmRIZWxwZXJDbGFzcyhjb25zdGFudF9zeXN0ZW0uSmF2YVNjcmlwdE1hcENvbnN0YW50LkRBUlRfUFJPVE9fQ0xBU1MpOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBnZW5lcmFsQ29uc3RhbnRNYXBDbGFzcyA9PiBfZmluZEhlbHBlckNsYXNzKAogICAgICBjb25zdGFudF9zeXN0ZW0uSmF2YVNjcmlwdE1hcENvbnN0YW50LkRBUlRfR0VORVJBTF9DTEFTUyk7CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBhbm5vdGF0aW9uQ3JlYXRlc0NsYXNzID0+IF9maW5kSGVscGVyQ2xhc3MoJ0NyZWF0ZXMnKTsKCiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGFubm90YXRpb25SZXR1cm5zQ2xhc3MgPT4gX2ZpbmRIZWxwZXJDbGFzcygnUmV0dXJucycpOwoKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgYW5ub3RhdGlvbkpTTmFtZUNsYXNzID0+IF9maW5kSGVscGVyQ2xhc3MoJ0pTTmFtZScpOwoKICBDbGFzc0VudGl0eSBfbmF0aXZlQW5ub3RhdGlvbkNsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBuYXRpdmVBbm5vdGF0aW9uQ2xhc3MgPT4KICAgICAgX25hdGl2ZUFubm90YXRpb25DbGFzcyA/Pz0gX2ZpbmRIZWxwZXJDbGFzcygnTmF0aXZlJyk7CgogIENvbnN0cnVjdG9yRW50aXR5IF90eXBlVmFyaWFibGVDb25zdHJ1Y3RvcjsKICBAb3ZlcnJpZGUKICBDb25zdHJ1Y3RvckVudGl0eSBnZXQgdHlwZVZhcmlhYmxlQ29uc3RydWN0b3IgPT4gX3R5cGVWYXJpYWJsZUNvbnN0cnVjdG9yID8/PQogICAgICBfZW52Lmxvb2t1cENvbnN0cnVjdG9yKHR5cGVWYXJpYWJsZUNsYXNzLCAnJyk7CgogIEZ1bmN0aW9uRW50aXR5IF9hc3NlcnRUZXN0OwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3NlcnRUZXN0ID0+CiAgICAgIF9hc3NlcnRUZXN0ID8/PSBfZmluZEhlbHBlckZ1bmN0aW9uKCdhc3NlcnRUZXN0Jyk7CgogIEZ1bmN0aW9uRW50aXR5IF9hc3NlcnRUaHJvdzsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgYXNzZXJ0VGhyb3cgPT4KICAgICAgX2Fzc2VydFRocm93ID8/PSBfZmluZEhlbHBlckZ1bmN0aW9uKCdhc3NlcnRUaHJvdycpOwoKICBGdW5jdGlvbkVudGl0eSBfYXNzZXJ0SGVscGVyOwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3NlcnRIZWxwZXIgPT4KICAgICAgX2Fzc2VydEhlbHBlciA/Pz0gX2ZpbmRIZWxwZXJGdW5jdGlvbignYXNzZXJ0SGVscGVyJyk7CgogIEZ1bmN0aW9uRW50aXR5IF9hc3NlcnRVbnJlYWNoYWJsZU1ldGhvZDsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgYXNzZXJ0VW5yZWFjaGFibGVNZXRob2QgPT4KICAgICAgX2Fzc2VydFVucmVhY2hhYmxlTWV0aG9kID8/PSBfZmluZEhlbHBlckZ1bmN0aW9uKCdhc3NlcnRVbnJlYWNoYWJsZScpOwoKICBGdW5jdGlvbkVudGl0eSBfZ2V0SXNvbGF0ZUFmZmluaXR5VGFnTWFya2VyOwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBnZXRJc29sYXRlQWZmaW5pdHlUYWdNYXJrZXIgPT4KICAgICAgX2dldElzb2xhdGVBZmZpbml0eVRhZ01hcmtlciA/Pz0KICAgICAgICAgIF9maW5kSGVscGVyRnVuY3Rpb24oJ2dldElzb2xhdGVBZmZpbml0eVRhZycpOwoKICBGdW5jdGlvbkVudGl0eSBfcmVxdWlyZXNQcmVhbWJsZU1hcmtlcjsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgcmVxdWlyZXNQcmVhbWJsZU1hcmtlciA9PgogICAgICBfcmVxdWlyZXNQcmVhbWJsZU1hcmtlciA/Pz0gX2ZpbmRIZWxwZXJGdW5jdGlvbigncmVxdWlyZXNQcmVhbWJsZScpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgbG9hZExpYnJhcnlXcmFwcGVyID0+CiAgICAgIF9maW5kSGVscGVyRnVuY3Rpb24oIl9sb2FkTGlicmFyeVdyYXBwZXIiKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGxvYWREZWZlcnJlZExpYnJhcnkgPT4KICAgICAgX2ZpbmRIZWxwZXJGdW5jdGlvbigibG9hZERlZmVycmVkTGlicmFyeSIpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgYm9vbENvbnZlcnNpb25DaGVjayA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCdib29sQ29udmVyc2lvbkNoZWNrJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCB0cmFjZUhlbHBlciA9PiBfZmluZEhlbHBlckZ1bmN0aW9uKCd0cmFjZUhlbHBlcicpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgY2xvc3VyZUZyb21UZWFyT2ZmID0+CiAgICAgIF9maW5kSGVscGVyRnVuY3Rpb24oJ2Nsb3N1cmVGcm9tVGVhck9mZicpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgaXNKc0luZGV4YWJsZSA9PiBfZmluZEhlbHBlckZ1bmN0aW9uKCdpc0pzSW5kZXhhYmxlJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCB0aHJvd0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCdpYWUnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHRocm93SW5kZXhPdXRPZlJhbmdlRXhjZXB0aW9uID0+CiAgICAgIF9maW5kSGVscGVyRnVuY3Rpb24oJ2lvb3JlJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBleGNlcHRpb25VbndyYXBwZXIgPT4KICAgICAgX2ZpbmRIZWxwZXJGdW5jdGlvbigndW53cmFwRXhjZXB0aW9uJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCB0aHJvd1J1bnRpbWVFcnJvciA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCd0aHJvd1J1bnRpbWVFcnJvcicpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgdGhyb3dVbnN1cHBvcnRlZEVycm9yID0+CiAgICAgIF9maW5kSGVscGVyRnVuY3Rpb24oJ3Rocm93VW5zdXBwb3J0ZWRFcnJvcicpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgdGhyb3dUeXBlRXJyb3IgPT4gX2ZpbmRIZWxwZXJGdW5jdGlvbigndGhyb3dUeXBlRXJyb3InKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHRocm93QWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvciA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCd0aHJvd0Fic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3InKTsKCiAgRnVuY3Rpb25FbnRpdHkgX2NhY2hlZENoZWNrQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yOwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBjaGVja0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvciA9PgogICAgICBfY2FjaGVkQ2hlY2tDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IgPz89CiAgICAgICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCdjaGVja0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcicpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgdGhyb3dDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IgPT4KICAgICAgX2ZpbmRIZWxwZXJGdW5jdGlvbigndGhyb3dDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3InKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NoZWNrSW50KE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIHJldHVybiBtZW1iZXIuaXNGdW5jdGlvbiAmJgogICAgICAgIG1lbWJlci5pc1RvcExldmVsICYmCiAgICAgICAgbWVtYmVyLmxpYnJhcnkgPT0ganNIZWxwZXJMaWJyYXJ5ICYmCiAgICAgICAgbWVtYmVyLm5hbWUgPT0gJ2NoZWNrSW50JzsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNDaGVja051bShNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICByZXR1cm4gbWVtYmVyLmlzRnVuY3Rpb24gJiYKICAgICAgICBtZW1iZXIuaXNUb3BMZXZlbCAmJgogICAgICAgIG1lbWJlci5saWJyYXJ5ID09IGpzSGVscGVyTGlicmFyeSAmJgogICAgICAgIG1lbWJlci5uYW1lID09ICdjaGVja051bSc7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzQ2hlY2tTdHJpbmcoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgcmV0dXJuIG1lbWJlci5pc0Z1bmN0aW9uICYmCiAgICAgICAgbWVtYmVyLmlzVG9wTGV2ZWwgJiYKICAgICAgICBtZW1iZXIubGlicmFyeSA9PSBqc0hlbHBlckxpYnJhcnkgJiYKICAgICAgICBtZW1iZXIubmFtZSA9PSAnY2hlY2tTdHJpbmcnOwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHN0cmluZ0ludGVycG9sYXRpb25IZWxwZXIgPT4gX2ZpbmRIZWxwZXJGdW5jdGlvbignUycpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgd3JhcEV4Y2VwdGlvbkhlbHBlciA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCd3cmFwRXhjZXB0aW9uJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCB0aHJvd0V4cHJlc3Npb25IZWxwZXIgPT4KICAgICAgX2ZpbmRIZWxwZXJGdW5jdGlvbigndGhyb3dFeHByZXNzaW9uJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBjbG9zdXJlQ29udmVydGVyID0+CiAgICAgIF9maW5kSGVscGVyRnVuY3Rpb24oJ2NvbnZlcnREYXJ0Q2xvc3VyZVRvSlMnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHRyYWNlRnJvbUV4Y2VwdGlvbiA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCdnZXRUcmFjZUZyb21FeGNlcHRpb24nKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNldFJ1bnRpbWVUeXBlSW5mbyA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCdzZXRSdW50aW1lVHlwZUluZm8nKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGdldFJ1bnRpbWVUeXBlSW5mbyA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCdnZXRSdW50aW1lVHlwZUluZm8nKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGdldFR5cGVBcmd1bWVudEJ5SW5kZXggPT4KICAgICAgX2ZpbmRIZWxwZXJGdW5jdGlvbignZ2V0VHlwZUFyZ3VtZW50QnlJbmRleCcpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgY29tcHV0ZVNpZ25hdHVyZSA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCdjb21wdXRlU2lnbmF0dXJlJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBnZXRSdW50aW1lVHlwZUFyZ3VtZW50cyA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCdnZXRSdW50aW1lVHlwZUFyZ3VtZW50cycpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgZ2V0UnVudGltZVR5cGVBcmd1bWVudCA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCdnZXRSdW50aW1lVHlwZUFyZ3VtZW50Jyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBnZXRSdW50aW1lVHlwZUFyZ3VtZW50SW50ZXJjZXB0ZWQgPT4KICAgICAgX2ZpbmRIZWxwZXJGdW5jdGlvbignZ2V0UnVudGltZVR5cGVBcmd1bWVudEludGVyY2VwdGVkJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3NlcnRJc1N1YnR5cGUgPT4gX2ZpbmRIZWxwZXJGdW5jdGlvbignYXNzZXJ0SXNTdWJ0eXBlJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBjaGVja1N1YnR5cGUgPT4gX2ZpbmRIZWxwZXJGdW5jdGlvbignY2hlY2tTdWJ0eXBlJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3NlcnRTdWJ0eXBlID0+IF9maW5kSGVscGVyRnVuY3Rpb24oJ2Fzc2VydFN1YnR5cGUnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHN1YnR5cGVDYXN0ID0+IF9maW5kSGVscGVyRnVuY3Rpb24oJ3N1YnR5cGVDYXN0Jyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBmdW5jdGlvblR5cGVUZXN0ID0+CiAgICAgIF9maW5kSGVscGVyRnVuY3Rpb24oJ2Z1bmN0aW9uVHlwZVRlc3QnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGZ1dHVyZU9yVGVzdCA9PiBfZmluZEhlbHBlckZ1bmN0aW9uKCdmdXR1cmVPclRlc3QnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGNoZWNrU3VidHlwZU9mUnVudGltZVR5cGUgPT4KICAgICAgX2ZpbmRIZWxwZXJGdW5jdGlvbignY2hlY2tTdWJ0eXBlT2ZSdW50aW1lVHlwZScpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgYXNzZXJ0U3VidHlwZU9mUnVudGltZVR5cGUgPT4KICAgICAgX2ZpbmRIZWxwZXJGdW5jdGlvbignYXNzZXJ0U3VidHlwZU9mUnVudGltZVR5cGUnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHN1YnR5cGVPZlJ1bnRpbWVUeXBlQ2FzdCA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCdzdWJ0eXBlT2ZSdW50aW1lVHlwZUNhc3QnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGNoZWNrRGVmZXJyZWRJc0xvYWRlZCA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCdjaGVja0RlZmVycmVkSXNMb2FkZWQnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHRocm93Tm9TdWNoTWV0aG9kID0+CiAgICAgIF9maW5kSGVscGVyRnVuY3Rpb24oJ3Rocm93Tm9TdWNoTWV0aG9kJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBjcmVhdGVSdW50aW1lVHlwZSA9PiBfb3B0aW9ucy5leHBlcmltZW50TmV3UnRpCiAgICAgID8gX2ZpbmRSdGlGdW5jdGlvbignY3JlYXRlUnVudGltZVR5cGUnKQogICAgICA6IF9maW5kSGVscGVyRnVuY3Rpb24oJ2NyZWF0ZVJ1bnRpbWVUeXBlJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBmYWxsVGhyb3VnaEVycm9yID0+CiAgICAgIF9maW5kSGVscGVyRnVuY3Rpb24oImdldEZhbGxUaHJvdWdoRXJyb3IiKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGNyZWF0ZUludm9jYXRpb25NaXJyb3IgPT4KICAgICAgX2ZpbmRIZWxwZXJGdW5jdGlvbignY3JlYXRlSW52b2NhdGlvbk1pcnJvcicpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzQ3JlYXRlSW52b2NhdGlvbk1pcnJvckhlbHBlcihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICByZXR1cm4gbWVtYmVyLmlzVG9wTGV2ZWwgJiYKICAgICAgICBtZW1iZXIubmFtZSA9PSAnX2NyZWF0ZUludm9jYXRpb25NaXJyb3InICYmCiAgICAgICAgbWVtYmVyLmxpYnJhcnkgPT0gY29yZUxpYnJhcnk7CiAgfQoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgY3JlYXRlVW5tYW5nbGVkSW52b2NhdGlvbk1pcnJvciA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCdjcmVhdGVVbm1hbmdsZWRJbnZvY2F0aW9uTWlycm9yJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBjeWNsaWNUaHJvd0hlbHBlciA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCJ0aHJvd0N5Y2xpY0luaXQiKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGRlZmluZVByb3BlcnR5ID0+IF9maW5kSGVscGVyRnVuY3Rpb24oJ2RlZmluZVByb3BlcnR5Jyk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNFeHRyYWN0VHlwZUFyZ3VtZW50cyhGdW5jdGlvbkVudGl0eSBtZW1iZXIpIHsKICAgIHJldHVybiBtZW1iZXIubmFtZSA9PSAnZXh0cmFjdFR5cGVBcmd1bWVudHMnICYmCiAgICAgICAgbWVtYmVyLmxpYnJhcnkgPT0gaW50ZXJuYWxMaWJyYXJ5OwogIH0KCiAgLy8gVE9ETyhqb2hubml3aW50aGVyLHNyYSk6IFN1cHBvcnQgYXJiaXRyYXJ5IHR5cGUgYXJndW1lbnQgY291bnQuCiAgdm9pZCBfY2hlY2tUeXBlQXJndW1lbnRDb3VudChpbnQgdHlwZUFyZ3VtZW50Q291bnQpIHsKICAgIGFzc2VydCh0eXBlQXJndW1lbnRDb3VudCA+IDApOwogICAgaWYgKHR5cGVBcmd1bWVudENvdW50ID4gMjApIHsKICAgICAgZmFpbGVkQXQoCiAgICAgICAgICBOT19MT0NBVElPTl9TUEFOTkFCTEUsCiAgICAgICAgICAiVW5zdXBwb3J0ZWQgaW5zdGFudGlhdGlvbiBhcmd1bWVudCBjb3VudDogIgogICAgICAgICAgIiR7dHlwZUFyZ3VtZW50Q291bnR9Iik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXRJbnN0YW50aWF0aW9uQ2xhc3MoaW50IHR5cGVBcmd1bWVudENvdW50KSB7CiAgICBfY2hlY2tUeXBlQXJndW1lbnRDb3VudCh0eXBlQXJndW1lbnRDb3VudCk7CiAgICByZXR1cm4gX2ZpbmRIZWxwZXJDbGFzcygnSW5zdGFudGlhdGlvbiR0eXBlQXJndW1lbnRDb3VudCcpOwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0SW5zdGFudGlhdGVGdW5jdGlvbihpbnQgdHlwZUFyZ3VtZW50Q291bnQpIHsKICAgIF9jaGVja1R5cGVBcmd1bWVudENvdW50KHR5cGVBcmd1bWVudENvdW50KTsKICAgIHJldHVybiBfZmluZEhlbHBlckZ1bmN0aW9uKCdpbnN0YW50aWF0ZSR0eXBlQXJndW1lbnRDb3VudCcpOwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGluc3RhbnRpYXRlZEdlbmVyaWNGdW5jdGlvblR5cGUgPT4KICAgICAgX2ZpbmRIZWxwZXJGdW5jdGlvbignaW5zdGFudGlhdGVkR2VuZXJpY0Z1bmN0aW9uVHlwZScpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgZXh0cmFjdEZ1bmN0aW9uVHlwZU9iamVjdEZyb21JbnRlcm5hbCA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCdleHRyYWN0RnVuY3Rpb25UeXBlT2JqZWN0RnJvbUludGVybmFsJyk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbnN0YW50aWF0aW9uQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gY2xzLmxpYnJhcnkgPT0gX2pzSGVscGVyTGlicmFyeSAmJgogICAgICAgIGNscy5uYW1lICE9ICdJbnN0YW50aWF0aW9uJyAmJgogICAgICAgIGNscy5uYW1lLnN0YXJ0c1dpdGgoJ0luc3RhbnRpYXRpb24nKTsKICB9CgogIC8vIEZyb20gZGFydDpfcnRpCgogIENsYXNzRW50aXR5IF9maW5kUnRpQ2xhc3MoU3RyaW5nIG5hbWUpID0+IF9maW5kQ2xhc3MocnRpTGlicmFyeSwgbmFtZSk7CgogIEZ1bmN0aW9uRW50aXR5IF9maW5kUnRpRnVuY3Rpb24oU3RyaW5nIG5hbWUpID0+CiAgICAgIF9maW5kTGlicmFyeU1lbWJlcihydGlMaWJyYXJ5LCBuYW1lKTsKCiAgRnVuY3Rpb25FbnRpdHkgX2ZpbmRUeXBlOwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBmaW5kVHlwZSA9PiBfZmluZFR5cGUgPz89IF9maW5kUnRpRnVuY3Rpb24oJ2ZpbmRUeXBlJyk7CgogIEZ1bmN0aW9uRW50aXR5IF9pbnN0YW5jZVR5cGU7CiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGluc3RhbmNlVHlwZSA9PgogICAgICBfaW5zdGFuY2VUeXBlID8/PSBfZmluZFJ0aUZ1bmN0aW9uKCdpbnN0YW5jZVR5cGUnKTsKCiAgRnVuY3Rpb25FbnRpdHkgX2FycmF5SW5zdGFuY2VUeXBlOwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBhcnJheUluc3RhbmNlVHlwZSA9PgogICAgICBfYXJyYXlJbnN0YW5jZVR5cGUgPz89IF9maW5kUnRpRnVuY3Rpb24oJ19hcnJheUluc3RhbmNlVHlwZScpOwoKICBGdW5jdGlvbkVudGl0eSBfc2ltcGxlSW5zdGFuY2VUeXBlOwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBzaW1wbGVJbnN0YW5jZVR5cGUgPT4KICAgICAgX3NpbXBsZUluc3RhbmNlVHlwZSA/Pz0gX2ZpbmRSdGlGdW5jdGlvbignX2luc3RhbmNlVHlwZScpOwoKICBGdW5jdGlvbkVudGl0eSBfdHlwZUxpdGVyYWxNYWtlcjsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgdHlwZUxpdGVyYWxNYWtlciA9PgogICAgICBfdHlwZUxpdGVyYWxNYWtlciA/Pz0gX2ZpbmRSdGlGdW5jdGlvbigndHlwZUxpdGVyYWwnKTsKCiAgRnVuY3Rpb25FbnRpdHkgX2NoZWNrVHlwZUJvdW5kOwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBjaGVja1R5cGVCb3VuZCA9PgogICAgICBfY2hlY2tUeXBlQm91bmQgPz89IF9maW5kUnRpRnVuY3Rpb24oJ2NoZWNrVHlwZUJvdW5kJyk7CgogIENsYXNzRW50aXR5IGdldCBfcnRpSW1wbENsYXNzID0+IF9maW5kQ2xhc3MocnRpTGlicmFyeSwgJ1J0aScpOwogIENsYXNzRW50aXR5IGdldCBfcnRpVW5pdmVyc2VDbGFzcyA9PiBfZmluZENsYXNzKHJ0aUxpYnJhcnksICdfVW5pdmVyc2UnKTsKICBGaWVsZEVudGl0eSBfZmluZFJ0aUNsYXNzRmllbGQoU3RyaW5nIG5hbWUpID0+CiAgICAgIF9maW5kQ2xhc3NNZW1iZXIoX3J0aUltcGxDbGFzcywgbmFtZSk7CgogIEZpZWxkRW50aXR5IF9ydGlBc0ZpZWxkOwogIEBvdmVycmlkZQogIEZpZWxkRW50aXR5IGdldCBydGlBc0ZpZWxkID0+IF9ydGlBc0ZpZWxkID8/PSBfZmluZFJ0aUNsYXNzRmllbGQoJ19hcycpOwoKICBGaWVsZEVudGl0eSBfcnRpSXNGaWVsZDsKICBAb3ZlcnJpZGUKICBGaWVsZEVudGl0eSBnZXQgcnRpSXNGaWVsZCA9PiBfcnRpSXNGaWVsZCA/Pz0gX2ZpbmRSdGlDbGFzc0ZpZWxkKCdfaXMnKTsKCiAgRmllbGRFbnRpdHkgX3J0aUNoZWNrRmllbGQ7CiAgQG92ZXJyaWRlCiAgRmllbGRFbnRpdHkgZ2V0IHJ0aUNoZWNrRmllbGQgPT4KICAgICAgX3J0aUNoZWNrRmllbGQgPz89IF9maW5kUnRpQ2xhc3NGaWVsZCgnX2NoZWNrJyk7CgogIEZpZWxkRW50aXR5IF9ydGlSZXN0RmllbGQ7CiAgQG92ZXJyaWRlCiAgRmllbGRFbnRpdHkgZ2V0IHJ0aVJlc3RGaWVsZCA9PiBfcnRpUmVzdEZpZWxkID8/PSBfZmluZFJ0aUNsYXNzRmllbGQoJ19yZXN0Jyk7CgogIEZ1bmN0aW9uRW50aXR5IF9ydGlFdmFsTWV0aG9kOwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBydGlFdmFsTWV0aG9kID0+CiAgICAgIF9ydGlFdmFsTWV0aG9kID8/PSBfZmluZENsYXNzTWVtYmVyKF9ydGlJbXBsQ2xhc3MsICdfZXZhbCcpOwoKICBGdW5jdGlvbkVudGl0eSBfcnRpQmluZE1ldGhvZDsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgcnRpQmluZE1ldGhvZCA9PgogICAgICBfcnRpQmluZE1ldGhvZCA/Pz0gX2ZpbmRDbGFzc01lbWJlcihfcnRpSW1wbENsYXNzLCAnX2JpbmQnKTsKCiAgRnVuY3Rpb25FbnRpdHkgX3J0aUFkZFJ1bGVzTWV0aG9kOwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBydGlBZGRSdWxlc01ldGhvZCA9PgogICAgICBfcnRpQWRkUnVsZXNNZXRob2QgPz89IF9maW5kQ2xhc3NNZW1iZXIoX3J0aVVuaXZlcnNlQ2xhc3MsICdhZGRSdWxlcycpOwoKICBGdW5jdGlvbkVudGl0eSBfZ2VuZXJhbElzVGVzdEltcGxlbWVudGF0aW9uOwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBnZW5lcmFsSXNUZXN0SW1wbGVtZW50YXRpb24gPT4KICAgICAgX2dlbmVyYWxJc1Rlc3RJbXBsZW1lbnRhdGlvbiA/Pz0KICAgICAgICAgIF9maW5kUnRpRnVuY3Rpb24oJ19nZW5lcmFsSXNUZXN0SW1wbGVtZW50YXRpb24nKTsKCiAgRnVuY3Rpb25FbnRpdHkgX2dlbmVyYWxBc0NoZWNrSW1wbGVtZW50YXRpb247CiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGdlbmVyYWxBc0NoZWNrSW1wbGVtZW50YXRpb24gPT4KICAgICAgX2dlbmVyYWxBc0NoZWNrSW1wbGVtZW50YXRpb24gPz89CiAgICAgICAgICBfZmluZFJ0aUZ1bmN0aW9uKCdfZ2VuZXJhbEFzQ2hlY2tJbXBsZW1lbnRhdGlvbicpOwoKICBGdW5jdGlvbkVudGl0eSBfZ2VuZXJhbFR5cGVDaGVja0ltcGxlbWVudGF0aW9uOwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBnZW5lcmFsVHlwZUNoZWNrSW1wbGVtZW50YXRpb24gPT4KICAgICAgX2dlbmVyYWxUeXBlQ2hlY2tJbXBsZW1lbnRhdGlvbiA/Pz0KICAgICAgICAgIF9maW5kUnRpRnVuY3Rpb24oJ19nZW5lcmFsVHlwZUNoZWNrSW1wbGVtZW50YXRpb24nKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkSXNCb29sID0+IF9maW5kUnRpRnVuY3Rpb24oJ19pc0Jvb2wnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkQXNCb29sTnVsbGFibGUgPT4KICAgICAgX2ZpbmRSdGlGdW5jdGlvbignX2FzQm9vbE51bGxhYmxlJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZENoZWNrQm9vbE51bGxhYmxlID0+CiAgICAgIF9maW5kUnRpRnVuY3Rpb24oJ19jaGVja0Jvb2xOdWxsYWJsZScpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRBc0RvdWJsZU51bGxhYmxlID0+CiAgICAgIF9maW5kUnRpRnVuY3Rpb24oJ19hc0RvdWJsZU51bGxhYmxlJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZENoZWNrRG91YmxlTnVsbGFibGUgPT4KICAgICAgX2ZpbmRSdGlGdW5jdGlvbignX2NoZWNrRG91YmxlTnVsbGFibGUnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkSXNJbnQgPT4gX2ZpbmRSdGlGdW5jdGlvbignX2lzSW50Jyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZEFzSW50TnVsbGFibGUgPT4KICAgICAgX2ZpbmRSdGlGdW5jdGlvbignX2FzSW50TnVsbGFibGUnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkQ2hlY2tJbnROdWxsYWJsZSA9PgogICAgICBfZmluZFJ0aUZ1bmN0aW9uKCdfY2hlY2tJbnROdWxsYWJsZScpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRJc051bSA9PiBfZmluZFJ0aUZ1bmN0aW9uKCdfaXNOdW0nKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkQXNOdW1OdWxsYWJsZSA9PgogICAgICBfZmluZFJ0aUZ1bmN0aW9uKCdfYXNOdW1OdWxsYWJsZScpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRDaGVja051bU51bGxhYmxlID0+CiAgICAgIF9maW5kUnRpRnVuY3Rpb24oJ19jaGVja051bU51bGxhYmxlJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZElzU3RyaW5nID0+IF9maW5kUnRpRnVuY3Rpb24oJ19pc1N0cmluZycpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRBc1N0cmluZ051bGxhYmxlID0+CiAgICAgIF9maW5kUnRpRnVuY3Rpb24oJ19hc1N0cmluZ051bGxhYmxlJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZENoZWNrU3RyaW5nTnVsbGFibGUgPT4KICAgICAgX2ZpbmRSdGlGdW5jdGlvbignX2NoZWNrU3RyaW5nTnVsbGFibGUnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGluc3RhbnRpYXRlZEdlbmVyaWNGdW5jdGlvblR5cGVOZXdSdGkgPT4KICAgICAgX2ZpbmRSdGlGdW5jdGlvbignaW5zdGFudGlhdGVkR2VuZXJpY0Z1bmN0aW9uVHlwZScpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgY2xvc3VyZUZ1bmN0aW9uVHlwZSA9PgogICAgICBfZmluZFJ0aUZ1bmN0aW9uKCdjbG9zdXJlRnVuY3Rpb25UeXBlJyk7CgogIC8vIEZyb20gZGFydDpfaW50ZXJuYWwKCiAgQ2xhc3NFbnRpdHkgX3N5bWJvbEltcGxlbWVudGF0aW9uQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IHN5bWJvbEltcGxlbWVudGF0aW9uQ2xhc3MgPT4KICAgICAgX3N5bWJvbEltcGxlbWVudGF0aW9uQ2xhc3MgPz89IF9maW5kQ2xhc3MoaW50ZXJuYWxMaWJyYXJ5LCAnU3ltYm9sJyk7CgogIENsYXNzRW50aXR5IF9leHRlcm5hbE5hbWVDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgZXh0ZXJuYWxOYW1lQ2xhc3MgPT4KICAgICAgX2V4dGVybmFsTmFtZUNsYXNzID8/PSBfZmluZENsYXNzKGludGVybmFsTGlicmFyeSwgJ0V4dGVybmFsTmFtZScpOwogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0IGV4dGVybmFsTmFtZVR5cGUgPT4gX2dldFJhd1R5cGUoZXh0ZXJuYWxOYW1lQ2xhc3MpOwoKICBAb3ZlcnJpZGUKICBDb25zdHJ1Y3RvckVudGl0eSBnZXQgc3ltYm9sVmFsaWRhdGVkQ29uc3RydWN0b3IgPT4KICAgICAgX3N5bWJvbFZhbGlkYXRlZENvbnN0cnVjdG9yID8/PQogICAgICAgICAgX2ZpbmRDb25zdHJ1Y3RvcihzeW1ib2xJbXBsZW1lbnRhdGlvbkNsYXNzLCAndmFsaWRhdGVkJyk7CgogIC8vLyBSZXR1cm5zIHRoZSBmaWVsZCB0aGF0IGhvbGRzIHRoZSBpbnRlcm5hbCBuYW1lIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcwogIC8vLyBmb3IgYFN5bWJvbGAuCiAgRmllbGRFbnRpdHkgX3N5bWJvbEltcGxlbWVudGF0aW9uRmllbGQ7CiAgRmllbGRFbnRpdHkgZ2V0IHN5bWJvbEltcGxlbWVudGF0aW9uRmllbGQgPT4gX3N5bWJvbEltcGxlbWVudGF0aW9uRmllbGQgPz89CiAgICAgIF9lbnYubG9va3VwTG9jYWxDbGFzc01lbWJlcihzeW1ib2xJbXBsZW1lbnRhdGlvbkNsYXNzLCAnX25hbWUnLAogICAgICAgICAgcmVxdWlyZWQ6IHRydWUpOwoKICBDb25zdHJ1Y3RvckVudGl0eSBfc3ltYm9sVmFsaWRhdGVkQ29uc3RydWN0b3I7CiAgQG92ZXJyaWRlCiAgYm9vbCBpc1N5bWJvbFZhbGlkYXRlZENvbnN0cnVjdG9yKENvbnN0cnVjdG9yRW50aXR5IGVsZW1lbnQpIHsKICAgIGlmIChfc3ltYm9sVmFsaWRhdGVkQ29uc3RydWN0b3IgIT0gbnVsbCkgewogICAgICByZXR1cm4gZWxlbWVudCA9PSBfc3ltYm9sVmFsaWRhdGVkQ29uc3RydWN0b3I7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLyBGcm9tIGRhcnQ6X25hdGl2ZV90eXBlZF9kYXRhCgogIENsYXNzRW50aXR5IF90eXBlZEFycmF5T2ZJbnRDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgdHlwZWRBcnJheU9mSW50Q2xhc3MgPT4gX3R5cGVkQXJyYXlPZkludENsYXNzID8/PSBfZmluZENsYXNzKAogICAgICBfZW52Lmxvb2t1cExpYnJhcnkoVXJpcy5kYXJ0X19uYXRpdmVfdHlwZWRfZGF0YSwgcmVxdWlyZWQ6IHRydWUpLAogICAgICAnTmF0aXZlVHlwZWRBcnJheU9mSW50Jyk7CgogIENsYXNzRW50aXR5IF90eXBlZEFycmF5T2ZEb3VibGVDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgdHlwZWRBcnJheU9mRG91YmxlQ2xhc3MgPT4KICAgICAgX3R5cGVkQXJyYXlPZkRvdWJsZUNsYXNzID8/PSBfZmluZENsYXNzKAogICAgICAgICAgX2Vudi5sb29rdXBMaWJyYXJ5KFVyaXMuZGFydF9fbmF0aXZlX3R5cGVkX2RhdGEsIHJlcXVpcmVkOiB0cnVlKSwKICAgICAgICAgICdOYXRpdmVUeXBlZEFycmF5T2ZEb3VibGUnKTsKCiAgLy8gRnJvbSBkYXJ0Ol9qc19lbWJlZGRlZF9uYW1lcwoKICBDbGFzc0VudGl0eSBfanNHZXROYW1lRW51bTsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQganNHZXROYW1lRW51bSA9PiBfanNHZXROYW1lRW51bSA/Pz0gX2ZpbmRDbGFzcygKICAgICAgX2Vudi5sb29rdXBMaWJyYXJ5KFVyaXMuZGFydF9fanNfZW1iZWRkZWRfbmFtZXMsIHJlcXVpcmVkOiB0cnVlKSwKICAgICAgJ0pzR2V0TmFtZScpOwoKICBDbGFzc0VudGl0eSBfanNCdWlsdGluRW51bTsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQganNCdWlsdGluRW51bSA9PiBfanNCdWlsdGluRW51bSA/Pz0gX2ZpbmRDbGFzcygKICAgICAgX2Vudi5sb29rdXBMaWJyYXJ5KFVyaXMuZGFydF9fanNfZW1iZWRkZWRfbmFtZXMsIHJlcXVpcmVkOiB0cnVlKSwKICAgICAgJ0pzQnVpbHRpbicpOwoKICBib29sIF9tZXRhQW5ub3RhdGlvbkNoZWNrZWQgPSBmYWxzZTsKICBDbGFzc0VudGl0eSBfbWV0YU5vSW5saW5lQ2xhc3M7CiAgQ2xhc3NFbnRpdHkgX21ldGFUcnlJbmxpbmVDbGFzczsKCiAgdm9pZCBfZW5zdXJlTWV0YUFubm90YXRpb25zKCkgewogICAgaWYgKCFfbWV0YUFubm90YXRpb25DaGVja2VkKSB7CiAgICAgIF9tZXRhQW5ub3RhdGlvbkNoZWNrZWQgPSB0cnVlOwogICAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnkgPSBfZW52Lmxvb2t1cExpYnJhcnkoVXJpcy5wYWNrYWdlX21ldGFfZGFydDJqcyk7CiAgICAgIGlmIChsaWJyYXJ5ICE9IG51bGwpIHsKICAgICAgICBfbWV0YU5vSW5saW5lQ2xhc3MgPSBfZW52Lmxvb2t1cENsYXNzKGxpYnJhcnksICdfTm9JbmxpbmUnKTsKICAgICAgICBfbWV0YVRyeUlubGluZUNsYXNzID0gX2Vudi5sb29rdXBDbGFzcyhsaWJyYXJ5LCAnX1RyeUlubGluZScpOwogICAgICAgIGlmIChfbWV0YU5vSW5saW5lQ2xhc3MgPT0gbnVsbCB8fCBfbWV0YVRyeUlubGluZUNsYXNzID09IG51bGwpIHsKICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBwYWNrYWdlIHlvdSdyZSBsb29raW5nIGZvci4KICAgICAgICAgIF9tZXRhTm9JbmxpbmVDbGFzcyA9IG51bGw7CiAgICAgICAgICBfbWV0YVRyeUlubGluZUNsYXNzID0gbnVsbDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBtZXRhTm9JbmxpbmVDbGFzcyB7CiAgICBfZW5zdXJlTWV0YUFubm90YXRpb25zKCk7CiAgICByZXR1cm4gX21ldGFOb0lubGluZUNsYXNzOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IG1ldGFUcnlJbmxpbmVDbGFzcyB7CiAgICBfZW5zdXJlTWV0YUFubm90YXRpb25zKCk7CiAgICByZXR1cm4gX21ldGFUcnlJbmxpbmVDbGFzczsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNGb3JlaWduKE1lbWJlckVudGl0eSBlbGVtZW50KSA9PiBlbGVtZW50LmxpYnJhcnkgPT0gZm9yZWlnbkxpYnJhcnk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNGb3JlaWduSGVscGVyKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIHJldHVybiBtZW1iZXIubGlicmFyeSA9PSBmb3JlaWduTGlicmFyeSB8fAogICAgICAgIGlzQ3JlYXRlSW52b2NhdGlvbk1pcnJvckhlbHBlcihtZW1iZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0V4dGVybmFsQWxsb3dlZChGdW5jdGlvbkVudGl0eSBmdW5jdGlvbikgewogICAgcmV0dXJuIGlzRm9yZWlnbkhlbHBlcihmdW5jdGlvbikgfHwKICAgICAgICAoZnVuY3Rpb24gaXMgQ29uc3RydWN0b3JFbnRpdHkgJiYKICAgICAgICAgICAgZnVuY3Rpb24uaXNGcm9tRW52aXJvbm1lbnRDb25zdHJ1Y3RvcikgfHwKICAgICAgICBtYXliZUVuYWJsZU5hdGl2ZShmdW5jdGlvbi5saWJyYXJ5LmNhbm9uaWNhbFVyaSkgfHwKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhpcyB3aGVuIGltcG9ydGluZyBkYXJ0Om1pcnJvcnMgaXMKICAgICAgICAvLyBhIGNvbXBpbGUtdGltZSBlcnJvci4KICAgICAgICBmdW5jdGlvbi5saWJyYXJ5LmNhbm9uaWNhbFVyaSA9PSBVcmlzLmRhcnRfbWlycm9yczsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3JFcUhhbmRsZXNOdWxsQXJndW1lbnQoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pIHsKICAgIGFzc2VydChmdW5jdGlvbi5uYW1lID09ICc9PScsCiAgICAgICAgZmFpbGVkQXQoZnVuY3Rpb24sICJVbmV4cGVjdGVkIGZ1bmN0aW9uICRmdW5jdGlvbi4iKSk7CiAgICBDbGFzc0VudGl0eSBjbHMgPSBmdW5jdGlvbi5lbmNsb3NpbmdDbGFzczsKICAgIHJldHVybiBjbHMgPT0gb2JqZWN0Q2xhc3MgfHwKICAgICAgICBjbHMgPT0ganNJbnRlcmNlcHRvckNsYXNzIHx8CiAgICAgICAgY2xzID09IGpzTnVsbENsYXNzOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0RGVmYXVsdFN1cGVyY2xhc3MoCiAgICAgIENsYXNzRW50aXR5IGNscywgTmF0aXZlQmFzaWNEYXRhIG5hdGl2ZUJhc2ljRGF0YSkgewogICAgaWYgKG5hdGl2ZUJhc2ljRGF0YS5pc0pzSW50ZXJvcENsYXNzKGNscykpIHsKICAgICAgcmV0dXJuIGpzSmF2YVNjcmlwdE9iamVjdENsYXNzOwogICAgfQogICAgLy8gTmF0aXZlIGNsYXNzZXMgaW5oZXJpdCBmcm9tIEludGVyY2VwdG9yLgogICAgcmV0dXJuIG5hdGl2ZUJhc2ljRGF0YS5pc05hdGl2ZUNsYXNzKGNscykKICAgICAgICA/IGpzSW50ZXJjZXB0b3JDbGFzcwogICAgICAgIDogb2JqZWN0Q2xhc3M7CiAgfQp9CgovLy8gSW50ZXJmYWNlIGZvciBhY2Nlc3NpbmcgbGlicmFyaWVzLCBjbGFzc2VzIGFuZCBtZW1iZXJzLgovLy8KLy8vIFRoZSBlbGVtZW50IGVudmlyb25tZW50IG1ha2VzIHByaXZhdGUgYW5kIGluamVjdGVkIG1lbWJlcnMgZGlyZWN0bHkKLy8vIGF2YWlsYWJsZSBhbmQgc2hvdWxkIHRoZXJlZm9yZSBub3QgYmUgdXNlZCB0byBkZXRlcm1pbmUgc2NvcGVzLgovLy8KLy8vIFRoZSBwcm9wZXJ0aWVzIGV4cG9zZWQgYXJlIERhcnQtY2VudHJpYyBhbmQgc2hvdWxkIHRoZXJlZm9yZSwgbG9uZy10ZXJtLCBub3QKLy8vIGJlIHVzZWQgZHVyaW5nIGNvZGVnZW4sIGV4cGVjdCBmb3IgbWlycm9ycy4KLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3BsaXQgdGhpcyBpbnRvIGFuIGVsZW1lbnQgZW52aXJvbm1lbnQgYW5kIGEgdHlwZSBxdWVyeQovLyBpbnRlcmZhY2UsIHRoZSBmaXJzdCBzaG91bGQgb25seSBiZSB1c2VkIGR1cmluZyByZXNvbHV0aW9uIGFuZCB0aGUgbGF0dGVyIGluCi8vIGJvdGggcmVzb2x1dGlvbiBhbmQgY29kZWdlbi4KYWJzdHJhY3QgY2xhc3MgRWxlbWVudEVudmlyb25tZW50IHsKICAvLy8gUmV0dXJucyB0aGUgbWFpbiBsaWJyYXJ5IGZvciB0aGUgY29tcGlsYXRpb24uCiAgTGlicmFyeUVudGl0eSBnZXQgbWFpbkxpYnJhcnk7CgogIC8vLyBSZXR1cm5zIHRoZSBtYWluIG1ldGhvZCBmb3IgdGhlIGNvbXBpbGF0aW9uLgogIEZ1bmN0aW9uRW50aXR5IGdldCBtYWluRnVuY3Rpb247CgogIC8vLyBSZXR1cm5zIGFsbCBrbm93biBsaWJyYXJpZXMuCiAgSXRlcmFibGU8TGlicmFyeUVudGl0eT4gZ2V0IGxpYnJhcmllczsKCiAgLy8vIFJldHVybnMgdGhlIGxpYnJhcnkgbmFtZSBvZiBbbGlicmFyeV0gb3IgJycgaWYgdGhlIGxpYnJhcnkgaXMgdW5uYW1lZC4KICBTdHJpbmcgZ2V0TGlicmFyeU5hbWUoTGlicmFyeUVudGl0eSBsaWJyYXJ5KTsKCiAgLy8vIExvb2t1cCB0aGUgbGlicmFyeSB3aXRoIHRoZSBjYW5vbmljYWwgW3VyaV0sIGZhaWwgaWYgdGhlIGxpYnJhcnkgaXMKICAvLy8gbWlzc2luZyBhbmQgW3JlcXVpcmVkXTsKICBMaWJyYXJ5RW50aXR5IGxvb2t1cExpYnJhcnkoVXJpIHVyaSwge2Jvb2wgcmVxdWlyZWQ6IGZhbHNlfSk7CgogIC8vLyBDYWxscyBbZl0gZm9yIGV2ZXJ5IGNsYXNzIGRlY2xhcmVkIGluIFtsaWJyYXJ5XS4KICB2b2lkIGZvckVhY2hDbGFzcyhMaWJyYXJ5RW50aXR5IGxpYnJhcnksIHZvaWQgZihDbGFzc0VudGl0eSBjbHMpKTsKCiAgLy8vIExvb2t1cCB0aGUgY2xhc3MgW25hbWVdIGluIFtsaWJyYXJ5XSwgZmFpbCBpZiB0aGUgY2xhc3MgaXMgbWlzc2luZyBhbmQKICAvLy8gW3JlcXVpcmVkXS4KICBDbGFzc0VudGl0eSBsb29rdXBDbGFzcyhMaWJyYXJ5RW50aXR5IGxpYnJhcnksIFN0cmluZyBuYW1lLAogICAgICB7Ym9vbCByZXF1aXJlZDogZmFsc2V9KTsKCiAgLy8vIENhbGxzIFtmXSBmb3IgZXZlcnkgdG9wIGxldmVsIG1lbWJlciBpbiBbbGlicmFyeV0uCiAgdm9pZCBmb3JFYWNoTGlicmFyeU1lbWJlcihMaWJyYXJ5RW50aXR5IGxpYnJhcnksIHZvaWQgZihNZW1iZXJFbnRpdHkgbWVtYmVyKSk7CgogIC8vLyBMb29rdXAgdGhlIG1lbWJlciBbbmFtZV0gaW4gW2xpYnJhcnldLCBmYWlsIGlmIHRoZSBjbGFzcyBpcyBtaXNzaW5nIGFuZAogIC8vLyBbcmVxdWlyZWRdLgogIE1lbWJlckVudGl0eSBsb29rdXBMaWJyYXJ5TWVtYmVyKExpYnJhcnlFbnRpdHkgbGlicmFyeSwgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIHNldHRlcjogZmFsc2UsIGJvb2wgcmVxdWlyZWQ6IGZhbHNlfSk7CgogIC8vLyBMb29rdXAgdGhlIG1lbWJlciBbbmFtZV0gaW4gW2Nsc10sIGZhaWwgaWYgdGhlIGNsYXNzIGlzIG1pc3NpbmcgYW5kCiAgLy8vIFtyZXF1aXJlZF0uCiAgTWVtYmVyRW50aXR5IGxvb2t1cExvY2FsQ2xhc3NNZW1iZXIoQ2xhc3NFbnRpdHkgY2xzLCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgc2V0dGVyOiBmYWxzZSwgYm9vbCByZXF1aXJlZDogZmFsc2V9KTsKCiAgLy8vIExvb2t1cCB0aGUgbWVtYmVyIFtuYW1lXSBpbiBbY2xzXSBhbmQgaXRzIHN1cGVyY2xhc3Nlcy4KICAvLy8KICAvLy8gUmV0dXJuIGBudWxsYCBpZiB0aGUgbWVtYmVyIGlzIG5vdCBmb3VuZCBpbiB0aGUgY2xhc3Mgb3IgYW55IHN1cGVyY2xhc3MuCiAgTWVtYmVyRW50aXR5IGxvb2t1cENsYXNzTWVtYmVyKENsYXNzRW50aXR5IGNscywgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIHNldHRlcjogZmFsc2V9KSB7CiAgICB2YXIgZW50aXR5ID0gbG9va3VwTG9jYWxDbGFzc01lbWJlcihjbHMsIG5hbWUsIHNldHRlcjogc2V0dGVyKTsKICAgIGlmIChlbnRpdHkgIT0gbnVsbCkgcmV0dXJuIGVudGl0eTsKCiAgICB2YXIgc3VwZXJjbGFzcyA9IGdldFN1cGVyQ2xhc3MoY2xzKTsKICAgIGlmIChzdXBlcmNsYXNzID09IG51bGwpIHJldHVybiBudWxsOwoKICAgIHJldHVybiBsb29rdXBDbGFzc01lbWJlcihzdXBlcmNsYXNzLCBuYW1lLCBzZXR0ZXI6IHNldHRlcik7CiAgfQoKICAvLy8gTG9va3VwIHRoZSBjb25zdHJ1Y3RvciBbbmFtZV0gaW4gW2Nsc10sIGZhaWwgaWYgdGhlIGNsYXNzIGlzIG1pc3NpbmcgYW5kCiAgLy8vIFtyZXF1aXJlZF0uCiAgQ29uc3RydWN0b3JFbnRpdHkgbG9va3VwQ29uc3RydWN0b3IoQ2xhc3NFbnRpdHkgY2xzLCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgcmVxdWlyZWQ6IGZhbHNlfSk7CgogIC8vLyBDYWxscyBbZl0gZm9yIGVhY2ggY2xhc3MgbWVtYmVyIGRlY2xhcmVkIGluIFtjbHNdLgogIHZvaWQgZm9yRWFjaExvY2FsQ2xhc3NNZW1iZXIoQ2xhc3NFbnRpdHkgY2xzLCB2b2lkIGYoTWVtYmVyRW50aXR5IG1lbWJlcikpOwoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIGNsYXNzIG1lbWJlciBkZWNsYXJlZCBvciBpbmhlcml0ZWQgaW4gW2Nsc10gdG9nZXRoZXIKICAvLy8gd2l0aCB0aGUgY2xhc3MgdGhhdCBkZWNsYXJlZCB0aGUgbWVtYmVyLgogIC8vLwogIC8vLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBUaGlzIHNob3VsZCBub3QgaW5jbHVkZSBzdGF0aWMgbWVtYmVycyBvZgogIC8vLyBzdXBlcmNsYXNzZXMuCiAgdm9pZCBmb3JFYWNoQ2xhc3NNZW1iZXIoCiAgICAgIENsYXNzRW50aXR5IGNscywgdm9pZCBmKENsYXNzRW50aXR5IGRlY2xhcmVyLCBNZW1iZXJFbnRpdHkgbWVtYmVyKSk7CgogIC8vLyBDYWxscyBbZl0gZm9yIGV2ZXJ5IGNvbnN0cnVjdG9yIGRlY2xhcmVkIGluIFtjbHNdLgogIC8vLwogIC8vLyBXaWxsIGVuc3VyZSB0aGF0IHRoZSBjbGFzcyBhbmQgYWxsIGNvbnN0cnVjdG9ycyBhcmUgcmVzb2x2ZWQgaWYKICAvLy8gW2Vuc3VyZVJlc29sdmVkXSBpcyBgdHJ1ZWAuCiAgdm9pZCBmb3JFYWNoQ29uc3RydWN0b3IoCiAgICAgIENsYXNzRW50aXR5IGNscywgdm9pZCBmKENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yKSk7CgogIC8vLyBSZXR1cm5zIHRoZSBzdXBlcmNsYXNzIG9mIFtjbHNdLgogIC8vLwogIC8vLyBJZiBbc2tpcFVubmFtZWRNaXhpbkFwcGxpY2F0aW9uc10gaXMgYHRydWVgLCB1bm5hbWVkIG1peGluIGFwcGxpY2F0aW9ucwogIC8vLyBhcmUgZXhjbHVkZWQsIGZvciBpbnN0YW5jZSBmb3IgdGhlc2UgY2xhc3NlcwogIC8vLwogIC8vLyAgICAgY2xhc3MgUyB7fQogIC8vLyAgICAgY2xhc3MgTSB7fQogIC8vLyAgICAgY2xhc3MgQyBleHRlbmRzIFMgd2l0aCBNIHt9CiAgLy8vCiAgLy8vIHRoZSByZXN1bHQgb2YgYGdldFN1cGVyQ2xhc3MoQylgIGlzIHRoZSB1bm5hbWVkIG1peGluIGFwcGxpY2F0aW9uCiAgLy8vIHR5cGljYWxseSBuYW1lZCBgUytNYCBhbmQgYGdldFN1cGVyQ2xhc3MoUytNKWAgaXMgYFNgLCB3aGVyZWFzCiAgLy8vIHRoZSByZXN1bHQgb2YgYGdldFN1cGVyQ2xhc3MoQywgc2tpcFVubmFtZWRNaXhpbkFwcGxpY2F0aW9uczogZmFsc2UpYCBpcwogIC8vLyBgU2AuCiAgQ2xhc3NFbnRpdHkgZ2V0U3VwZXJDbGFzcyhDbGFzc0VudGl0eSBjbHMsCiAgICAgIHtib29sIHNraXBVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbnM6IGZhbHNlfSk7CgogIC8vLyBDYWxscyBbZl0gZm9yIGVhY2ggc3VwZXJ0eXBlIG9mIFtjbHNdLgogIHZvaWQgZm9yRWFjaFN1cGVydHlwZShDbGFzc0VudGl0eSBjbHMsIHZvaWQgZihJbnRlcmZhY2VUeXBlIHN1cGVydHlwZSkpOwoKICAvLy8gQ3JlYXRlIHRoZSBpbnN0YW50aWF0aW9uIG9mIFtjbHNdIHdpdGggdGhlIGdpdmVuIFt0eXBlQXJndW1lbnRzXS4KICBJbnRlcmZhY2VUeXBlIGNyZWF0ZUludGVyZmFjZVR5cGUoCiAgICAgIENsYXNzRW50aXR5IGNscywgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyk7CgogIC8vLyBSZXR1cm5zIHRoZSBgZHluYW1pY2AgdHlwZS4KICBEYXJ0VHlwZSBnZXQgZHluYW1pY1R5cGU7CgogIC8vLyBSZXR1cm5zIHRoZSAncmF3IHR5cGUnIG9mIFtjbHNdLiBUaGF0IGlzLCB0aGUgaW5zdGFudGlhdGlvbiBvZiBbY2xzXQogIC8vLyB3aGVyZSBhbGwgdHlwZXMgYXJndW1lbnRzIGFyZSBgZHluYW1pY2AuCiAgSW50ZXJmYWNlVHlwZSBnZXRSYXdUeXBlKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIHRoZSAndGhpcyB0eXBlJyBvZiBbY2xzXS4gVGhhdCBpcywgdGhlIGluc3RhbnRpYXRpb24gb2YgW2Nsc10KICAvLy8gd2hlcmUgdGhlIHR5cGUgYXJndW1lbnRzIGFyZSB0aGUgdHlwZSB2YXJpYWJsZXMgb2YgW2Nsc10uCiAgSW50ZXJmYWNlVHlwZSBnZXRUaGlzVHlwZShDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2Nsc10gaXMgZ2VuZXJpYy4KICBib29sIGlzR2VuZXJpY0NsYXNzKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbY2xzXSBpcyBhIG1peGluIGFwcGxpY2F0aW9uIChuYW1lZCBvciB1bm5hbWVkKS4KICBib29sIGlzTWl4aW5BcHBsaWNhdGlvbihDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2Nsc10gaXMgYW4gdW5uYW1lZCBtaXhpbiBhcHBsaWNhdGlvbi4KICBib29sIGlzVW5uYW1lZE1peGluQXBwbGljYXRpb24oQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFRoZSB1cHBlciBib3VuZCBvbiB0aGUgW3R5cGVWYXJpYWJsZV0uIElmIG5vdCBleHBsaWNpdGx5IGRlY2xhcmVkLCB0aGlzIGlzCiAgLy8vIGBPYmplY3RgLgogIERhcnRUeXBlIGdldFR5cGVWYXJpYWJsZUJvdW5kKFR5cGVWYXJpYWJsZUVudGl0eSB0eXBlVmFyaWFibGUpOwoKICAvLy8gUmV0dXJucyB0aGUgdHlwZSBvZiBbZnVuY3Rpb25dLgogIEZ1bmN0aW9uVHlwZSBnZXRGdW5jdGlvblR5cGUoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pOwoKICAvLy8gUmV0dXJucyB0aGUgZnVuY3Rpb24gdHlwZSB2YXJpYWJsZXMgZGVmaW5lZCBvbiBbZnVuY3Rpb25dLgogIExpc3Q8VHlwZVZhcmlhYmxlVHlwZT4gZ2V0RnVuY3Rpb25UeXBlVmFyaWFibGVzKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKTsKCiAgLy8vIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIFtsb2NhbF0gZnVuY3Rpb24uCiAgRnVuY3Rpb25UeXBlIGdldExvY2FsRnVuY3Rpb25UeXBlKExvY2FsIGxvY2FsKTsKCiAgLy8vIFJldHVybnMgdGhlIHR5cGUgb2YgW2ZpZWxkXS4KICBEYXJ0VHlwZSBnZXRGaWVsZFR5cGUoRmllbGRFbnRpdHkgZmllbGQpOwoKICAvLy8gUmV0dXJucyB0aGUgJ3VuYWxpYXNlZCcgdHlwZSBvZiBbdHlwZV0uIEZvciB0eXBlZGVmcyB0aGlzIGlzIHRoZSBmdW5jdGlvbgogIC8vLyB0eXBlIGl0IGlzIGFuIGFsaWFzIG9mLCBmb3Igb3RoZXIgdHlwZXMgaXQgaXMgdGhlIHR5cGUgaXRzZWxmLgogIC8vLwogIC8vLyBVc2UgdGhpcyBkdXJpbmcgcmVzb2x1dGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgYWxpYXMgaGFzIGJlZW4gY29tcHV0ZWQuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgd2hlbiB0aGUgcmVzb2x2ZXIgaXMgcmVtb3ZlZC4KICBEYXJ0VHlwZSBnZXRVbmFsaWFzZWRUeXBlKERhcnRUeXBlIHR5cGUpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2Nsc10gaXMgYSBEYXJ0IGVudW0gY2xhc3MuCiAgYm9vbCBpc0VudW1DbGFzcyhDbGFzc0VudGl0eSBjbHMpOwp9CgphYnN0cmFjdCBjbGFzcyBLRWxlbWVudEVudmlyb25tZW50IGV4dGVuZHMgRWxlbWVudEVudmlyb25tZW50IHsKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIGNsYXNzIHRoYXQgaXMgbWl4ZWQgaW50byBbY2xzXSBvciBvbmUgb2YgaXRzCiAgLy8vIHN1cGVyY2xhc3Nlcy4KICB2b2lkIGZvckVhY2hNaXhpbihDbGFzc0VudGl0eSBjbHMsIHZvaWQgZihDbGFzc0VudGl0eSBtaXhpbikpOwoKICAvLy8gR2V0cyB0aGUgY29uc3RhbnQgdmFsdWUgb2YgW2ZpZWxkXSwgb3IgYG51bGxgIGlmIFtmaWVsZF0gaXMgbm9uLWNvbnN0LgogIENvbnN0YW50RXhwcmVzc2lvbiBnZXRGaWVsZENvbnN0YW50Rm9yVGVzdGluZyhGaWVsZEVudGl0eSBmaWVsZCk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbbWVtYmVyXSBhIHRoZSBzeW50aGV0aWMgZ2V0dGVyIGBsb2FkTGlicmFyeWAgaW5qZWN0ZWQKICAvLy8gb24gZGVmZXJyZWQgbGlicmFyaWVzLgogIGJvb2wgaXNEZWZlcnJlZExvYWRMaWJyYXJ5R2V0dGVyKE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICAvLy8gUmV0dXJucyB0aGUgaW1wb3J0cyBzZWVuIGluIFtsaWJyYXJ5XQogIEl0ZXJhYmxlPEltcG9ydEVudGl0eT4gZ2V0SW1wb3J0cyhMaWJyYXJ5RW50aXR5IGxpYnJhcnkpOwoKICAvLy8gUmV0dXJucyB0aGUgbWV0YWRhdGEgY29uc3RhbnRzIGRlY2xhcmVkIG9uIFtsaWJyYXJ5XS4KICBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBnZXRMaWJyYXJ5TWV0YWRhdGEoTGlicmFyeUVudGl0eSBsaWJyYXJ5KTsKCiAgLy8vIFJldHVybnMgdGhlIG1ldGFkYXRhIGNvbnN0YW50cyBkZWNsYXJlZCBvbiBbY2xzXS4KICBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBnZXRDbGFzc01ldGFkYXRhKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIHRoZSBtZXRhZGF0YSBjb25zdGFudHMgZGVjbGFyZWQgb24gW21lbWJlcl0uCiAgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gZ2V0TWVtYmVyTWV0YWRhdGEoTWVtYmVyRW50aXR5IG1lbWJlciwKICAgICAge2Jvb2wgaW5jbHVkZVBhcmFtZXRlck1ldGFkYXRhOiBmYWxzZX0pOwp9CgphYnN0cmFjdCBjbGFzcyBKRWxlbWVudEVudmlyb25tZW50IGV4dGVuZHMgRWxlbWVudEVudmlyb25tZW50IHsKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIGNsYXNzIG1lbWJlciBhZGRlZCB0byBbY2xzXSBkdXJpbmcgY29tcGlsYXRpb24uCiAgdm9pZCBmb3JFYWNoSW5qZWN0ZWRDbGFzc01lbWJlcihDbGFzc0VudGl0eSBjbHMsIHZvaWQgZihNZW1iZXJFbnRpdHkgbWVtYmVyKSk7CgogIC8vLyBDYWxscyBbZl0gZm9yIGV2ZXJ5IGNvbnN0cnVjdG9yIGJvZHkgaW4gW2Nsc10uCiAgdm9pZCBmb3JFYWNoQ29uc3RydWN0b3JCb2R5KAogICAgICBDbGFzc0VudGl0eSBjbHMsIHZvaWQgZihDb25zdHJ1Y3RvckJvZHlFbnRpdHkgY29uc3RydWN0b3JCb2R5KSk7CgogIC8vLyBDYWxscyBbZl0gZm9yIGVhY2ggbmVzdGVkIGNsb3N1cmUgaW4gW21lbWJlcl0uCiAgdm9pZCBmb3JFYWNoTmVzdGVkQ2xvc3VyZSgKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciwgdm9pZCBmKEZ1bmN0aW9uRW50aXR5IGNsb3N1cmUpKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtjbHNdIGlzIGEgbWl4aW4gYXBwbGljYXRpb24gdGhhdCBtaXhlcyBpbiBtZXRob2RzIHdpdGgKICAvLy8gc3VwZXIgY2FsbHMuCiAgYm9vbCBpc1N1cGVyTWl4aW5BcHBsaWNhdGlvbihDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyB0aGUgJ2VmZmVjdGl2ZScgbWl4aW4gY2xhc3MgaWYgW2Nsc10gaXMgYSBtaXhpbiBhcHBsaWNhdGlvbiwgYW5kCiAgLy8vIGBudWxsYCBvdGhlcndpc2UuCiAgLy8vCiAgLy8vIFRoZSAnZWZmZWN0aXZlJyBtaXhpbiBjbGFzcyBpcyB0aGUgY2xhc3MgZnJvbSB3aGljaCBtZW1iZXJzIGFyZSBtaXhlZCBpbi4KICAvLy8gTm9ybWFsbHkgdGhpcyBpcyB0aGUgbWl4aW4gY2xhc3MgaXRzZWxmLCBidXQgbm90IGlmIHRoZSBtaXhpbiBjbGFzcyBpdHNlbGYKICAvLy8gaXMgYSBtaXhpbiBhcHBsaWNhdGlvbi4KICAvLy8KICAvLy8gQ29uc2lkZXIgdGhpcyBoaWVyYXJjaHk6CiAgLy8vCiAgLy8vICAgICBjbGFzcyBBIHt9CiAgLy8vICAgICBjbGFzcyBCID0gT2JqZWN0IHdpdGggQSB7fQogIC8vLyAgICAgY2xhc3MgQyA9IE9iamVjdCB3aXRoIEIge30KICAvLy8KICAvLy8gVGhlIG1peGluIGNsYXNzZXMgb2YgYEJgIGFuZCBgQ2AgYXJlIGBBYCBhbmQgYEJgLCByZXNwZWN0aXZlbHksIGJ1dCB0aGUKICAvLy8gX2VmZmVjdGl2ZV8gbWl4aW4gY2xhc3Mgb2YgYm90aCBpcyBgQWAuCiAgQ2xhc3NFbnRpdHkgZ2V0RWZmZWN0aXZlTWl4aW5DbGFzcyhDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gVGhlIGRlZmF1bHQgdHlwZSBvZiB0aGUgW3R5cGVWYXJpYWJsZV0uCiAgLy8vCiAgLy8vIFRoaXMgaXMgdGhlIHR5cGUgdXNlZCBhcyB0aGUgZGVmYXVsdCB0eXBlIGFyZ3VtZW50IHdoZW4gbm8gZXhwbGljaXQgdHlwZQogIC8vLyBhcmd1bWVudCBpcyBwYXNzZWQuCiAgRGFydFR5cGUgZ2V0VHlwZVZhcmlhYmxlRGVmYXVsdFR5cGUoVHlwZVZhcmlhYmxlRW50aXR5IHR5cGVWYXJpYWJsZSk7CgogIC8vLyBSZXR1cm5zIHRoZSAnZWxlbWVudCcgdHlwZSBvZiBhIGZ1bmN0aW9uIHdpdGggdGhlIGFzeW5jLCBhc3luYyogb3Igc3luYyoKICAvLy8gbWFya2VyIFttYXJrZXJdLiBbcmV0dXJuVHlwZV0gaXMgdGhlIHJldHVybiB0eXBlIG1hcmtlZCBmdW5jdGlvbi4KICBEYXJ0VHlwZSBnZXRBc3luY09yU3luY1N0YXJFbGVtZW50VHlwZSgKICAgICAgQXN5bmNNYXJrZXIgbWFya2VyLCBEYXJ0VHlwZSByZXR1cm5UeXBlKTsKCiAgLy8vIFJldHVybnMgdGhlICdlbGVtZW50JyB0eXBlIG9mIGEgZnVuY3Rpb24gd2l0aCBhbiBhc3luYywgYXN5bmMqIG9yIHN5bmMqCiAgLy8vIG1hcmtlci4gVGhlIHJldHVybiB0eXBlIG9mIHRoZSBtZXRob2QgaXMgaW5zcGVjdGVkIHRvIGRldGVybWluZSB0aGUgdHlwZQogIC8vLyBwYXJhbWV0ZXIgb2YgdGhlIEZ1dHVyZSwgU3RyZWFtIG9yIEl0ZXJhYmxlLgogIERhcnRUeXBlIGdldEZ1bmN0aW9uQXN5bmNPclN5bmNTdGFyRWxlbWVudFR5cGUoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pOwoKICAvLy8gQ2FsbHMgW2ZdIHdpdGggZXZlcnkgaW5zdGFuY2UgZmllbGQsIHRvZ2V0aGVyIHdpdGggaXRzIGRlY2xhcmVyLCBpbiBhbgogIC8vLyBpbnN0YW5jZSBvZiBbY2xzXS4gQWxsIGZpZWxkcyBpbmhlcml0ZWQgZnJvbSBzdXBlcmNsYXNzZXMgYW5kIG1peGlucyBhcmUKICAvLy8gaW5jbHVkZWQuCiAgLy8vCiAgLy8vIElmIFtpc0VsaWRlZF0gaXMgYHRydWVgLCB0aGUgZmllbGQgaXMgbm90IHJlYWQgYW5kIHNob3VsZCB0aGVyZWZvcmUgbm90CiAgLy8vIGJlIGVtaXR0ZWQuCiAgdm9pZCBmb3JFYWNoSW5zdGFuY2VGaWVsZCgKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCB2b2lkIGYoQ2xhc3NFbnRpdHkgZGVjbGFyZXIsIEZpZWxkRW50aXR5IGZpZWxkKSk7CgogIC8vLyBDYWxscyBbZl0gd2l0aCBldmVyeSBpbnN0YW5jZSBmaWVsZCBkZWNsYXJlZCBkaXJlY3RseSBpbiBjbGFzcyBbY2xzXQogIC8vLyAoaS5lLiBubyBpbmhlcml0ZWQgZmllbGRzKS4gRmllbGRzIGFyZSBwcmVzZW50ZWQgaW4gaW5pdGlhbGl6YXRpb24KICAvLy8gKGkuZS4gdGV4dHVhbCkgb3JkZXIuCiAgLy8vCiAgLy8vIElmIFtpc0VsaWRlZF0gaXMgYHRydWVgLCB0aGUgZmllbGQgaXMgbm90IHJlYWQgYW5kIHNob3VsZCB0aGVyZWZvcmUgbm90CiAgLy8vIGJlIGVtaXR0ZWQuCiAgdm9pZCBmb3JFYWNoRGlyZWN0SW5zdGFuY2VGaWVsZChDbGFzc0VudGl0eSBjbHMsIHZvaWQgZihGaWVsZEVudGl0eSBmaWVsZCkpOwoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIHBhcmFtZXRlciBvZiBbZnVuY3Rpb25dIHByb3ZpZGluZyB0aGUgdHlwZSBhbmQgbmFtZSBvZgogIC8vLyB0aGUgcGFyYW1ldGVyIGFuZCB0aGUgW2RlZmF1bHRWYWx1ZV0gaWYgdGhlIHBhcmFtZXRlciBp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SAFPSCowAU5PM0sBTU8QBk4SHUkBS0kcBk4STwFQSTtHAUlAOQIBKXBhY2thZ2U6Y29tcGlsZXIvc3JjL2NvbW1vbl9lbGVtZW50cy5kYXJ0MHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2RlZmVycmVkX2xvYWQuZGFydMABAdcvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkZWZlcnJlZF9sb2FkOwoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nIHNob3cgUXVldWU7CgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JyBhcyBmZTsKCmltcG9ydCAnY29tbW9uL3Rhc2tzLmRhcnQnIHNob3cgQ29tcGlsZXJUYXNrOwppbXBvcnQgJ2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICdjb21tb25fZWxlbWVudHMuZGFydCcKICAgIHNob3cgQ29tbW9uRWxlbWVudHMsIEVsZW1lbnRFbnZpcm9ubWVudCwgS0VsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICdjb21waWxlci5kYXJ0JyBzaG93IENvbXBpbGVyOwppbXBvcnQgJ2NvbnN0YW50cy92YWx1ZXMuZGFydCcKICAgIHNob3cKICAgICAgICBDb25zdGFudFZhbHVlLAogICAgICAgIENvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZSwKICAgICAgICBUeXBlQ29uc3RhbnRWYWx1ZSwKICAgICAgICBEZWZlcnJlZEdsb2JhbENvbnN0YW50VmFsdWUsCiAgICAgICAgSW5zdGFudGlhdGlvbkNvbnN0YW50VmFsdWU7CmltcG9ydCAnZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAna2VybmVsL2tlbGVtZW50cy5kYXJ0JyBzaG93IEtMb2NhbEZ1bmN0aW9uOwppbXBvcnQgJ3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICdvcHRpb25zLmRhcnQnOwppbXBvcnQgJ3VuaXZlcnNlL3VzZS5kYXJ0JzsKaW1wb3J0ICd1bml2ZXJzZS93b3JsZF9pbXBhY3QuZGFydCcKICAgIHNob3cgSW1wYWN0VXNlQ2FzZSwgV29ybGRJbXBhY3QsIFdvcmxkSW1wYWN0VmlzaXRvckltcGw7CmltcG9ydCAndXRpbC91dGlsLmRhcnQnIHNob3cgbWFrZVVuaXF1ZTsKaW1wb3J0ICd3b3JsZC5kYXJ0JyBzaG93IEtDbG9zZWRXb3JsZDsKCi8vLyBBICJodW5rIiBvZiB0aGUgcHJvZ3JhbSB0aGF0IHdpbGwgYmUgbG9hZGVkIHdoZW5ldmVyIG9uZSBvZiBpdHMgW2ltcG9ydHNdCi8vLyBhcmUgbG9hZGVkLgovLy8KLy8vIEVsZW1lbnRzIHRoYXQgYXJlIG9ubHkgdXNlZCBpbiBvbmUgZGVmZXJyZWQgaW1wb3J0LCBpcyBpbiBhbiBPdXRwdXRVbml0IHdpdGgKLy8vIHRoZSBkZWZlcnJlZCBpbXBvcnQgYXMgc2luZ2xlIGVsZW1lbnQgaW4gdGhlIFtpbXBvcnRzXSBzZXQuCi8vLwovLy8gV2hlbmV2ZXIgYSBkZWZlcnJlZCBFbGVtZW50IGlzIHNoYXJlZCBiZXR3ZWVuIHNldmVyYWwgZGVmZXJyZWQgaW1wb3J0cyBpdCBpcwovLy8gaW4gYW4gb3V0cHV0IHVuaXQgd2l0aCB0aG9zZSBpbXBvcnRzIGluIHRoZSBbaW1wb3J0c10gU2V0LgovLy8KLy8vIFdlIG5ldmVyIGNyZWF0ZSB0d28gT3V0cHV0VW5pdHMgc2hhcmluZyB0aGUgc2FtZSBzZXQgb2YgW2ltcG9ydHNdLgpjbGFzcyBPdXRwdXRVbml0IGltcGxlbWVudHMgQ29tcGFyYWJsZTxPdXRwdXRVbml0PiB7CiAgLy8vIGB0cnVlYCBpZiB0aGlzIG91dHB1dCB1bml0IGlzIGZvciB0aGUgbWFpbiBvdXRwdXQgZmlsZS4KICBmaW5hbCBib29sIGlzTWFpbk91dHB1dDsKCiAgLy8vIEEgdW5pcXVlIG5hbWUgcmVwcmVzZW50aW5nIHRoaXMgW091dHB1dFVuaXRdLgogIGZpbmFsIFN0cmluZyBuYW1lOwoKICAvLy8gVGhlIGRlZmVycmVkIGltcG9ydHMgdGhhdCB1c2UgdGhlIGVsZW1lbnRzIGluIHRoaXMgb3V0cHV0IHVuaXQuCiAgZmluYWwgU2V0PEltcG9ydEVudGl0eT4gX2ltcG9ydHM7CgogIE91dHB1dFVuaXQodGhpcy5pc01haW5PdXRwdXQsIHRoaXMubmFtZSwgdGhpcy5faW1wb3J0cyk7CgogIEBvdmVycmlkZQogIGludCBjb21wYXJlVG8oT3V0cHV0VW5pdCBvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiAwOwogICAgaWYgKGlzTWFpbk91dHB1dCAmJiAhb3RoZXIuaXNNYWluT3V0cHV0KSByZXR1cm4gLTE7CiAgICBpZiAoIWlzTWFpbk91dHB1dCAmJiBvdGhlci5pc01haW5PdXRwdXQpIHJldHVybiAxOwogICAgdmFyIHNpemUgPSBfaW1wb3J0cy5sZW5ndGg7CiAgICB2YXIgb3RoZXJTaXplID0gb3RoZXIuX2ltcG9ydHMubGVuZ3RoOwogICAgaWYgKHNpemUgIT0gb3RoZXJTaXplKSByZXR1cm4gc2l6ZS5jb21wYXJlVG8ob3RoZXJTaXplKTsKICAgIHZhciBpbXBvcnRzID0gX2ltcG9ydHMudG9MaXN0KCk7CiAgICB2YXIgb3RoZXJJbXBvcnRzID0gb3RoZXIuX2ltcG9ydHMudG9MaXN0KCk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykgewogICAgICBpZiAoaW1wb3J0c1tpXSA9PSBvdGhlckltcG9ydHNbaV0pIGNvbnRpbnVlOwogICAgICB2YXIgYSA9IGltcG9ydHNbaV0udXJpLnBhdGg7CiAgICAgIHZhciBiID0gb3RoZXJJbXBvcnRzW2ldLnVyaS5wYXRoOwogICAgICB2YXIgY21wID0gYS5jb21wYXJlVG8oYik7CiAgICAgIGlmIChjbXAgIT0gMCkgcmV0dXJuIGNtcDsKICAgIH0KICAgIC8vIFRPRE8oc2lnbXVuZCk6IG1ha2UgY29tcGFyZSBzdGFibGUuICBJZiB3ZSBoaXQgdGhpcyBwb2ludCwgYWxsIGltcG9ydGVkCiAgICAvLyBsaWJyYXJpZXMgYXJlIHRoZSBzYW1lLCBob3dldmVyIFt0aGlzXSBhbmQgW290aGVyXSB1c2UgZGlmZmVyZW50IGRlZmVycmVkCiAgICAvLyBpbXBvcnRzIGluIHRoZSBwcm9ncmFtLiBXZSBjYW4gbWFrZSB0aGlzIHN0YWJsZSBpZiB3ZSBzb3J0IGJhc2VkIG9uIHRoZQogICAgLy8gZGVmZXJyZWQgaW1wb3J0cyB0aGVtc2VsdmVzIChlLmcuIHRoZWlyIGRlY2xhcmF0aW9uIGxvY2F0aW9uKS4KICAgIHJldHVybiBuYW1lLmNvbXBhcmVUbyhvdGhlci5uYW1lKTsKICB9CgogIFNldDxJbXBvcnRFbnRpdHk+IGdldCBpbXBvcnRzRm9yVGVzdGluZyA9PiBfaW1wb3J0czsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIk91dHB1dFVuaXQoJG5hbWUsICRfaW1wb3J0cykiOwp9CgovLy8gRm9yIGVhY2ggZGVmZXJyZWQgaW1wb3J0LCBmaW5kIGVsZW1lbnRzIGFuZCBjb25zdGFudHMgdG8gYmUgbG9hZGVkIHdoZW4gdGhhdAovLy8gaW1wb3J0IGlzIGxvYWRlZC4gRWxlbWVudHMgdGhhdCBhcmUgdXNlZCBieSBzZXZlcmFsIGRlZmVycmVkIGltcG9ydHMgYXJlIGluCi8vLyBzaGFyZWQgT3V0cHV0VW5pdHMuCmFic3RyYWN0IGNsYXNzIERlZmVycmVkTG9hZFRhc2sgZXh0ZW5kcyBDb21waWxlclRhc2sgewogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgbmFtZSA9PiAnRGVmZXJyZWQgTG9hZGluZyc7CgogIC8vLyBUaGUgT3V0cHV0VW5pdCB0aGF0IHdpbGwgYmUgbG9hZGVkIHdoZW4gdGhlIHByb2dyYW0gc3RhcnRzLgogIE91dHB1dFVuaXQgX21haW5PdXRwdXRVbml0OwoKICAvLy8gQSBzZXQgY29udGFpbmluZyAoZXZlbnR1YWxseSkgYWxsIG91dHB1dCB1bml0cyB0aGF0IHdpbGwgcmVzdWx0IGZyb20gdGhlCiAgLy8vIHByb2dyYW0uCiAgZmluYWwgTGlzdDxPdXRwdXRVbml0PiBfYWxsT3V0cHV0VW5pdHMgPSBuZXcgTGlzdDxPdXRwdXRVbml0PigpOwoKICAvLy8gV2lsbCBiZSBgdHJ1ZWAgaWYgdGhlIHByb2dyYW0gY29udGFpbnMgZGVmZXJyZWQgbGlicmFyaWVzLgogIGJvb2wgaXNQcm9ncmFtU3BsaXQgPSBmYWxzZTsKCiAgc3RhdGljIGNvbnN0IEltcGFjdFVzZUNhc2UgSU1QQUNUX1VTRSA9IGNvbnN0IEltcGFjdFVzZUNhc2UoJ0RlZmVycmVkIGxvYWQnKTsKCiAgLy8vIEEgY2FjaGUgb2YgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIGBjb21wdXRlSW1wb3J0RGVmZXJOYW1lYCBvbiB0aGUga2V5cyBvZgogIC8vLyB0aGlzIG1hcC4KICBmaW5hbCBNYXA8SW1wb3J0RW50aXR5LCBTdHJpbmc+IF9pbXBvcnREZWZlck5hbWUgPSA8SW1wb3J0RW50aXR5LCBTdHJpbmc+e307CgogIC8vLyBBIG1hcHBpbmcgZnJvbSBjbGFzc2VzIHRvIHRoZWlyIGltcG9ydCBzZXQuCiAgTWFwPENsYXNzRW50aXR5LCBJbXBvcnRTZXQ+IF9jbGFzc1RvU2V0ID0gbmV3IE1hcDxDbGFzc0VudGl0eSwgSW1wb3J0U2V0PigpOwoKICAvLy8gQSBtYXBwaW5nIGZyb20gbWVtYmVycyB0byB0aGVpciBpbXBvcnQgc2V0LgogIE1hcDxNZW1iZXJFbnRpdHksIEltcG9ydFNldD4gX21lbWJlclRvU2V0ID0KICAgICAgbmV3IE1hcDxNZW1iZXJFbnRpdHksIEltcG9ydFNldD4oKTsKCiAgLy8vIEEgbWFwcGluZyBmcm9tIGxvY2FsIGZ1bmN0aW9ucyB0byB0aGVpciBpbXBvcnQgc2V0LgogIE1hcDxMb2NhbCwgSW1wb3J0U2V0PiBfbG9jYWxGdW5jdGlvblRvU2V0ID0gbmV3IE1hcDxMb2NhbCwgSW1wb3J0U2V0PigpOwoKICAvLy8gQSBtYXBwaW5nIGZyb20gY29uc3RhbnRzIHRvIHRoZWlyIGltcG9ydCBzZXQuCiAgTWFwPENvbnN0YW50VmFsdWUsIEltcG9ydFNldD4gX2NvbnN0YW50VG9TZXQgPQogICAgICBuZXcgTWFwPENvbnN0YW50VmFsdWUsIEltcG9ydFNldD4oKTsKCiAgSXRlcmFibGU8SW1wb3J0RW50aXR5PiBnZXQgX2FsbERlZmVycmVkSW1wb3J0cyA9PgogICAgICBfZGVmZXJyZWRJbXBvcnREZXNjcmlwdGlvbnMua2V5czsKCiAgLy8vIEJlY2F1c2UgdGhlIHRva2VuLXN0cmVhbSBpcyBmb3Jnb3R0ZW4gbGF0ZXIgaW4gdGhlIHByb2dyYW0sIHdlIGNhY2hlIGEKICAvLy8gZGVzY3JpcHRpb24gb2YgZWFjaCBkZWZlcnJlZCBpbXBvcnQuCiAgZmluYWwgTWFwPEltcG9ydEVudGl0eSwgSW1wb3J0RGVzY3JpcHRpb24+IF9kZWZlcnJlZEltcG9ydERlc2NyaXB0aW9ucyA9CiAgICAgIDxJbXBvcnRFbnRpdHksIEltcG9ydERlc2NyaXB0aW9uPnt9OwoKICAvLy8gQSBsYXR0aWNlIHRvIGNvbXBhY3RseSByZXByZXNlbnQgbXVsdGlwbGUgc3Vic2V0cyBvZiBpbXBvcnRzLgogIGZpbmFsIEltcG9ydFNldExhdHRpY2UgaW1wb3J0U2V0cyA9IG5ldyBJbXBvcnRTZXRMYXR0aWNlKCk7CgogIGZpbmFsIENvbXBpbGVyIGNvbXBpbGVyOwoKICBib29sIGdldCBkaXNhYmxlUHJvZ3JhbVNwbGl0ID0+IGNvbXBpbGVyLm9wdGlvbnMuZGlzYWJsZVByb2dyYW1TcGxpdDsKICBib29sIGdldCBuZXdEZWZlcnJlZFNwbGl0ID0+IGNvbXBpbGVyLm9wdGlvbnMubmV3RGVmZXJyZWRTcGxpdDsKICBib29sIGdldCByZXBvcnRJbnZhbGlkSW5mZXJyZWREZWZlcnJlZFR5cGVzID0+CiAgICAgIGNvbXBpbGVyLm9wdGlvbnMucmVwb3J0SW52YWxpZEluZmVycmVkRGVmZXJyZWRUeXBlczsKCiAgRGVmZXJyZWRMb2FkVGFzayh0aGlzLmNvbXBpbGVyKSA6IHN1cGVyKGNvbXBpbGVyLm1lYXN1cmVyKSB7CiAgICBfbWFpbk91dHB1dFVuaXQgPSBuZXcgT3V0cHV0VW5pdCh0cnVlLCAnbWFpbicsIG5ldyBTZXQ8SW1wb3J0RW50aXR5PigpKTsKICAgIGltcG9ydFNldHMubWFpblNldC51bml0ID0gX21haW5PdXRwdXRVbml0OwogICAgX2FsbE91dHB1dFVuaXRzLmFkZChfbWFpbk91dHB1dFVuaXQpOwogIH0KCiAgS0VsZW1lbnRFbnZpcm9ubWVudCBnZXQgZWxlbWVudEVudmlyb25tZW50ID0+CiAgICAgIGNvbXBpbGVyLmZyb250ZW5kU3RyYXRlZ3kuZWxlbWVudEVudmlyb25tZW50OwoKICBDb21tb25FbGVtZW50cyBnZXQgY29tbW9uRWxlbWVudHMgPT4gY29tcGlsZXIuZnJvbnRlbmRTdHJhdGVneS5jb21tb25FbGVtZW50czsKCiAgRGlhZ25vc3RpY1JlcG9ydGVyIGdldCByZXBvcnRlciA9PiBjb21waWxlci5yZXBvcnRlcjsKCiAgLy8vIEdpdmVuIFtpbXBvcnRzXSB0aGF0IHJlZmVyIHRvIGFuIGVsZW1lbnQgZnJvbSBhIGxpYnJhcnksIGRldGVybWluZSB3aGV0aGVyCiAgLy8vIHRoZSBlbGVtZW50IGlzIGV4cGxpY2l0bHkgZGVmZXJyZWQuCiAgc3RhdGljIGJvb2wgX2lzRXhwbGljaXRseURlZmVycmVkKEl0ZXJhYmxlPEltcG9ydEVudGl0eT4gaW1wb3J0cykgewogICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgbm90IGltcG9ydGVkIGV4cGxpY2l0bHksIGl0IGlzIGltcGxpY2l0bHkgaW1wb3J0ZWQKICAgIC8vIG5vdCBkZWZlcnJlZC4KICAgIGlmIChpbXBvcnRzLmlzRW1wdHkpIHJldHVybiBmYWxzZTsKICAgIC8vIEFuIGVsZW1lbnQgY291bGQgcG90ZW50aWFsbHkgYmUgbG9hZGVkIGJ5IHNldmVyYWwgaW1wb3J0cy4gSWYgYWxsIG9mIHRoZW0KICAgIC8vIGlzIGV4cGxpY2l0bHkgZGVmZXJyZWQsIHdlIHNheSB0aGUgZWxlbWVudCBpcyBleHBsaWNpdGx5IGRlZmVycmVkLgogICAgLy8gVE9ETyhzaWd1cmRtKTogV2UgbWlnaHQgd2FudCB0byBnaXZlIGEgd2FybmluZyBpZiB0aGUgaW1wb3J0cyBkbyBub3QKICAgIC8vIGFncmVlLgogICAgcmV0dXJuIGltcG9ydHMuZXZlcnkoKEltcG9ydEVudGl0eSBpbXBvcnQpID0+IGltcG9ydC5pc0RlZmVycmVkKTsKICB9CgogIC8vLyBSZXR1cm5zIGV2ZXJ5IFtJbXBvcnRFbnRpdHldIHRoYXQgaW1wb3J0cyBbZWxlbWVudF0gaW50byBbbGlicmFyeV0uCiAgSXRlcmFibGU8SW1wb3J0RW50aXR5PiBjbGFzc0ltcG9ydHNUbygKICAgICAgQ2xhc3NFbnRpdHkgZWxlbWVudCwgTGlicmFyeUVudGl0eSBsaWJyYXJ5KTsKCiAgLy8vIFJldHVybnMgZXZlcnkgW0ltcG9ydEVudGl0eV0gdGhhdCBpbXBvcnRzIFtlbGVtZW50XSBpbnRvIFtsaWJyYXJ5XS4KICBJdGVyYWJsZTxJbXBvcnRFbnRpdHk+IG1lbWJlckltcG9ydHNUbygKICAgICAgTWVtYmVyRW50aXR5IGVsZW1lbnQsIExpYnJhcnlFbnRpdHkgbGlicmFyeSk7CgogIC8vLyBSZXR1cm5zIGV2ZXJ5IFtJbXBvcnRFbnRpdHldIHRoYXQgaW1wb3J0cyBbZWxlbWVudF0gaW50byBbbGlicmFyeV0uCiAgSXRlcmFibGU8SW1wb3J0RW50aXR5PiB0eXBlZGVmSW1wb3J0c1RvKAogICAgICBUeXBlZGVmRW50aXR5IGVsZW1lbnQsIExpYnJhcnlFbnRpdHkgbGlicmFyeSk7CgogIC8vLyBDb2xsZWN0cyBhbGwgZGlyZWN0IGRlcGVuZGVuY2llcyBvZiBbZWxlbWVudF0uCiAgLy8vCiAgLy8vIFRoZSBjb2xsZWN0ZWQgZGVwZW5kZW50IGVsZW1lbnRzIGFuZCBjb25zdGFudHMgYXJlIGFyZSBhZGRlZCB0bwogIC8vLyBbZWxlbWVudHNdIGFuZCBbY29uc3RhbnRzXSByZXNwZWN0aXZlbHkuCiAgdm9pZCBfY29sbGVjdERpcmVjdE1lbWJlckRlcGVuZGVuY2llcyhLQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIE1lbWJlckVudGl0eSBlbGVtZW50LCBEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzKSB7CiAgICAvLyBUT0RPKHNpZ3VyZG0pOiBXZSB3YW50IHRvIGJlIG1vcmUgc3BlY2lmaWMgYWJvdXQgdGhpcyAtIG5lZWQgYSBiZXR0ZXIKICAgIC8vIHdheSB0byBxdWVyeSAibGl2ZW5lc3MiLgogICAgaWYgKCFjb21waWxlci5yZXNvbHV0aW9uV29ybGRCdWlsZGVyLmlzTWVtYmVyVXNlZChlbGVtZW50KSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBfY29sbGVjdERlcGVuZGVuY2llc0Zyb21JbXBhY3QoY2xvc2VkV29ybGQsIGVsZW1lbnQsIGRlcGVuZGVuY2llcyk7CiAgICBjb2xsZWN0Q29uc3RhbnRzSW5Cb2R5KGVsZW1lbnQsIGRlcGVuZGVuY2llcyk7CiAgfQoKICAvLy8gRmluZHMgYWxsIGVsZW1lbnRzIGFuZCBjb25zdGFudHMgdGhhdCBbZWxlbWVudF0gZGVwZW5kcyBkaXJlY3RseSBvbi4KICAvLy8gKG5vdCB0aGUgdHJhbnNpdGl2ZSBjbG9zdXJlLikKICAvLy8KICAvLy8gQWRkcyB0aGUgcmVzdWx0cyB0byBbZWxlbWVudHNdIGFuZCBbY29uc3RhbnRzXS4KICB2b2lkIF9jb2xsZWN0QWxsRWxlbWVudHNBbmRDb25zdGFudHNSZXNvbHZlZEZyb21DbGFzcygKICAgICAgS0Nsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBDbGFzc0VudGl0eSBlbGVtZW50LAogICAgICBEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzKSB7CiAgICAvLyBJZiB3ZSBzZWUgYSBjbGFzcywgYWRkIGV2ZXJ5dGhpbmcgaXRzIGxpdmUgaW5zdGFuY2UgbWVtYmVycyByZWZlcgogICAgLy8gdG8uICBTdGF0aWMgbWVtYmVycyBhcmUgbm90IHJlbGV2YW50LCB1bmxlc3Mgd2UgYXJlIHByb2Nlc3NpbmcKICAgIC8vIGV4dHJhIGRlcGVuZGVuY2llcyBkdWUgdG8gbWlycm9ycy4KICAgIHZvaWQgYWRkTGl2ZUluc3RhbmNlTWVtYmVyKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgICAgaWYgKCFjb21waWxlci5yZXNvbHV0aW9uV29ybGRCdWlsZGVyLmlzTWVtYmVyVXNlZChtZW1iZXIpKSByZXR1cm47CiAgICAgIGlmICghbWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIpIHJldHVybjsKICAgICAgZGVwZW5kZW5jaWVzLmFkZE1lbWJlcihtZW1iZXIpOwogICAgICBfY29sbGVjdERpcmVjdE1lbWJlckRlcGVuZGVuY2llcyhjbG9zZWRXb3JsZCwgbWVtYmVyLCBkZXBlbmRlbmNpZXMpOwogICAgfQoKICAgIENsYXNzRW50aXR5IGNscyA9IGVsZW1lbnQ7CiAgICBlbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaExvY2FsQ2xhc3NNZW1iZXIoY2xzLCBhZGRMaXZlSW5zdGFuY2VNZW1iZXIpOwogICAgZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hTdXBlcnR5cGUoY2xzLCAoSW50ZXJmYWNlVHlwZSB0eXBlKSB7CiAgICAgIF9jb2xsZWN0VHlwZURlcGVuZGVuY2llcyh0eXBlLCBkZXBlbmRlbmNpZXMpOwogICAgfSk7CiAgICBkZXBlbmRlbmNpZXMuYWRkQ2xhc3MoY2xzKTsKICB9CgogIC8vLyBGaW5kcyBhbGwgZWxlbWVudHMgYW5kIGNvbnN0YW50cyB0aGF0IFtlbGVtZW50XSBkZXBlbmRzIGRpcmVjdGx5IG9uLgogIC8vLyAobm90IHRoZSB0cmFuc2l0aXZlIGNsb3N1cmUuKQogIC8vLwogIC8vLyBBZGRzIHRoZSByZXN1bHRzIHRvIFtlbGVtZW50c10gYW5kIFtjb25zdGFudHNdLgogIHZvaWQgX2NvbGxlY3RBbGxFbGVtZW50c0FuZENvbnN0YW50c1Jlc29sdmVkRnJvbU1lbWJlcigKICAgICAgS0Nsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCwKICAgICAgRGVwZW5kZW5jaWVzIGRlcGVuZGVuY2llcykgewogICAgaWYgKGVsZW1lbnQgaXMgRnVuY3Rpb25FbnRpdHkpIHsKICAgICAgX2NvbGxlY3RUeXBlRGVwZW5kZW5jaWVzKAogICAgICAgICAgZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZShlbGVtZW50KSwgZGVwZW5kZW5jaWVzKTsKICAgIH0KICAgIGlmIChlbGVtZW50LmlzU3RhdGljIHx8IGVsZW1lbnQuaXNUb3BMZXZlbCB8fCBlbGVtZW50LmlzQ29uc3RydWN0b3IpIHsKICAgICAgZGVwZW5kZW5jaWVzLmFkZE1lbWJlcihlbGVtZW50KTsKICAgICAgX2NvbGxlY3REaXJlY3RNZW1iZXJEZXBlbmRlbmNpZXMoY2xvc2VkV29ybGQsIGVsZW1lbnQsIGRlcGVuZGVuY2llcyk7CiAgICB9CiAgICBpZiAoZWxlbWVudCBpcyBDb25zdHJ1Y3RvckVudGl0eSAmJiBlbGVtZW50LmlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yKSB7CiAgICAgIC8vIFdoZW4gaW5zdGFudGlhdGluZyBhIGNsYXNzLCB3ZSByZWNvcmQgYSByZWZlcmVuY2UgdG8gdGhlCiAgICAgIC8vIGNvbnN0cnVjdG9yLCBub3QgdGhlIGNsYXNzIGl0c2VsZi4gIFdlIG11c3QgYWRkIGFsbCB0aGUKICAgICAgLy8gaW5zdGFuY2UgbWVtYmVycyBvZiB0aGUgY29uc3RydWN0b3IncyBjbGFzcy4KICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gZWxlbWVudC5lbmNsb3NpbmdDbGFzczsKICAgICAgX2NvbGxlY3RBbGxFbGVtZW50c0FuZENvbnN0YW50c1Jlc29sdmVkRnJvbUNsYXNzKAogICAgICAgICAgY2xvc2VkV29ybGQsIGNscywgZGVwZW5kZW5jaWVzKTsKICAgIH0KCiAgICAvLyBPdGhlciBlbGVtZW50cywgaW4gcGFydGljdWxhciBpbnN0YW5jZSBtZW1iZXJzLCBhcmUgaWdub3JlZCBhcwogICAgLy8gdGhleSBhcmUgcHJvY2Vzc2VkIGFzIHBhcnQgb2YgdGhlIGNsYXNzLgogIH0KCiAgLy8vIEV4dHJhY3QgdGhlIHNldCBvZiBjb25zdGFudHMgdGhhdCBhcmUgdXNlZCBpbiBhbm5vdGF0aW9ucyBvZiBbZWxlbWVudF0uCiAgLy8vCiAgLy8vIElmIHRoZSB1bmRlcmx5aW5nIHN5c3RlbSBkb2Vzbid0IHN1cHBvcnQgbWlycm9ycywgdGhlbiBubyBjb25zdGFudHMgYXJlCiAgLy8vIGFkZGVkLgogIHZvaWQgY29sbGVjdENvbnN0YW50c0Zyb21NZXRhZGF0YSgKICAgICAgRW50aXR5IGVsZW1lbnQsIFNldDxDb25zdGFudFZhbHVlPiBjb25zdGFudHMpOwoKICAvLy8gRXh0cmFjdCB0aGUgc2V0IG9mIGNvbnN0YW50cyB0aGF0IGFyZSB1c2VkIGluIHRoZSBib2R5IG9mIFtlbGVtZW50XS4KICB2b2lkIGNvbGxlY3RDb25zdGFudHNJbkJvZHkoTWVtYmVyRW50aXR5IGVsZW1lbnQsIERlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMpOwoKICAvLy8gUmVjdXJzaXZlbHkgY29sbGVjdHMgYWxsIHRoZSBkZXBlbmRlbmNpZXMgb2YgW3R5cGVdLgogIHZvaWQgX2NvbGxlY3RUeXBlRGVwZW5kZW5jaWVzKERhcnRUeXBlIHR5cGUsIERlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMsCiAgICAgIFtJbXBvcnRFbnRpdHkgaW1wb3J0XSkgewogICAgbmV3IFR5cGVEZXBlbmRlbmN5VmlzaXRvcihkZXBlbmRlbmNpZXMsIGltcG9ydCwgY29tbW9uRWxlbWVudHMpLnZpc2l0KHR5cGUpOwogIH0KCiAgdm9pZCBfY29sbGVjdFR5cGVBcmd1bWVudERlcGVuZGVuY2llcygKICAgICAgSXRlcmFibGU8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMsIERlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMsCiAgICAgIFtJbXBvcnRFbnRpdHkgaW1wb3J0XSkgewogICAgaWYgKHR5cGVBcmd1bWVudHMgPT0gbnVsbCkgcmV0dXJuOwogICAgbmV3IFR5cGVEZXBlbmRlbmN5VmlzaXRvcihkZXBlbmRlbmNpZXMsIGltcG9ydCwgY29tbW9uRWxlbWVudHMpCiAgICAgICAgLnZpc2l0TGlzdCh0eXBlQXJndW1lbnRzKTsKICB9CgogIC8vLyBFeHRyYWN0IGFueSBkZXBlbmRlbmNpZXMgdGhhdCBhcmUga25vd24gZnJvbSB0aGUgaW1wYWN0IG9mIFtlbGVtZW50XS4KICB2b2lkIF9jb2xsZWN0RGVwZW5kZW5jaWVzRnJvbUltcGFjdChLQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIE1lbWJlckVudGl0eSBlbGVtZW50LCBEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzKSB7CiAgICBXb3JsZEltcGFjdCB3b3JsZEltcGFjdCA9IGNvbXBpbGVyLmltcGFjdENhY2hlW2VsZW1lbnRdOwogICAgY29tcGlsZXIuaW1wYWN0U3RyYXRlZ3kudmlzaXRJbXBhY3QoCiAgICAgICAgZWxlbWVudCwKICAgICAgICB3b3JsZEltcGFjdCwKICAgICAgICBuZXcgV29ybGRJbXBhY3RWaXNpdG9ySW1wbCgKICAgICAgICAgICAgdmlzaXRTdGF0aWNVc2U6IChNZW1iZXJFbnRpdHkgbWVtYmVyLCBTdGF0aWNVc2Ugc3RhdGljVXNlKSB7CiAgICAgICAgICBFbnRpdHkgdXNlZEVudGl0eSA9IHN0YXRpY1VzZS5lbGVtZW50OwogICAgICAgICAgaWYgKHVzZWRFbnRpdHkgaXMgTWVtYmVyRW50aXR5KSB7CiAgICAgICAgICAgIGRlcGVuZGVuY2llcy5hZGRNZW1iZXIodXNlZEVudGl0eSwgc3RhdGljVXNlLmRlZmVycmVkSW1wb3J0KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFzc2VydCh1c2VkRW50aXR5IGlzIEtMb2NhbEZ1bmN0aW9uLAogICAgICAgICAgICAgICAgZmFpbGVkQXQodXNlZEVudGl0eSwgIlVuZXhwZWN0ZWQgc3RhdGljIHVzZSAkc3RhdGljVXNlLiIpKTsKICAgICAgICAgICAgS0xvY2FsRnVuY3Rpb24gbG9jYWxGdW5jdGlvbiA9IHVzZWRFbnRpdHk7CiAgICAgICAgICAgIC8vIFRPRE8oc3JhKTogQ29uc3VsdCBLQ2xvc2VkV29ybGQgdG8gc2VlIGlmIHNpZ25hdHVyZSBpcyBuZWVkZWQuCiAgICAgICAgICAgIF9jb2xsZWN0VHlwZURlcGVuZGVuY2llcyhsb2NhbEZ1bmN0aW9uLmZ1bmN0aW9uVHlwZSwgZGVwZW5kZW5jaWVzKTsKICAgICAgICAgICAgZGVwZW5kZW5jaWVzLmxvY2FsRnVuY3Rpb25zLmFkZChsb2NhbEZ1bmN0aW9uKTsKICAgICAgICAgIH0KICAgICAgICAgIHN3aXRjaCAoc3RhdGljVXNlLmtpbmQpIHsKICAgICAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNPTlNUUlVDVE9SX0lOVk9LRToKICAgICAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNPTlNUX0NPTlNUUlVDVE9SX0lOVk9LRToKICAgICAgICAgICAgICAvLyBUaGUgcmVjZWl2ZXIgdHlwZSBvZiBnZW5lcmF0aXZlIGNvbnN0cnVjdG9ycyBpcyBhIGRlcGVuZGVuY3kgb2YKICAgICAgICAgICAgICAvLyB0aGUgY29uc3RydWN0b3IgKGhhbmRsZWQgYnkgYGFkZE1lbWJlcmAgYWJvdmUpIGFuZCBub3QgYQogICAgICAgICAgICAgIC8vIGRlcGVuZGVuY3kgYXQgdGhlIGNhbGwgc2l0ZS4KICAgICAgICAgICAgICAvLyBGYWN0b3J5IG1ldGhvZHMsIG9uIHRoZSBvdGhlciBoYW5kLCBhcmUgbGlrZSBzdGF0aWMgbWV0aG9kcyBzbwogICAgICAgICAgICAgIC8vIHRoZSB0YXJnZXQgdHlwZSBpcyBub3QgcmVsZXZhbnQuCiAgICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIHJ0aSBuZWVkIGRhdGEgdG8gc2tpcCB1bm5lZWRlZCB0eXBlCiAgICAgICAgICAgICAgLy8gYXJndW1lbnRzLgogICAgICAgICAgICAgIF9jb2xsZWN0VHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzKAogICAgICAgICAgICAgICAgICBzdGF0aWNVc2UudHlwZS50eXBlQXJndW1lbnRzLCBkZXBlbmRlbmNpZXMpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1RBVElDX0lOVk9LRToKICAgICAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNMT1NVUkVfQ0FMTDoKICAgICAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkRJUkVDVF9JTlZPS0U6CiAgICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIHJ0aSBuZWVkIGRhdGEgdG8gc2tpcCB1bm5lZWRlZCB0eXBlCiAgICAgICAgICAgICAgLy8gYXJndW1lbnRzLgogICAgICAgICAgICAgIF9jb2xsZWN0VHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzKAogICAgICAgICAgICAgICAgICBzdGF0aWNVc2UudHlwZUFyZ3VtZW50cywgZGVwZW5kZW5jaWVzKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIH0KICAgICAgICB9LCB2aXNpdFR5cGVVc2U6IChNZW1iZXJFbnRpdHkgbWVtYmVyLCBUeXBlVXNlIHR5cGVVc2UpIHsKICAgICAgICAgIERhcnRUeXBlIHR5cGUgPSB0eXBlVXNlLnR5cGU7CiAgICAgICAgICBzd2l0Y2ggKHR5cGVVc2Uua2luZCkgewogICAgICAgICAgICBjYXNlIFR5cGVVc2VLaW5kLlRZUEVfTElURVJBTDoKICAgICAgICAgICAgICBpZiAodHlwZS5pc0ludGVyZmFjZVR5cGUpIHsKICAgICAgICAgICAgICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlID0gdHlwZTsKICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcy5hZGRDbGFzcygKICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UuZWxlbWVudCwgdHlwZVVzZS5kZWZlcnJlZEltcG9ydCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIFR5cGVVc2VLaW5kLkNPTlNUX0lOU1RBTlRJQVRJT046CiAgICAgICAgICAgICAgX2NvbGxlY3RUeXBlRGVwZW5kZW5jaWVzKAogICAgICAgICAgICAgICAgICB0eXBlLCBkZXBlbmRlbmNpZXMsIHR5cGVVc2UuZGVmZXJyZWRJbXBvcnQpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIFR5cGVVc2VLaW5kLklOU1RBTlRJQVRJT046CiAgICAgICAgICAgIGNhc2UgVHlwZVVzZUtpbmQuTkFUSVZFX0lOU1RBTlRJQVRJT046CiAgICAgICAgICAgIGNhc2UgVHlwZVVzZUtpbmQuSVNfQ0hFQ0s6CiAgICAgICAgICAgIGNhc2UgVHlwZVVzZUtpbmQuQ0FUQ0hfVFlQRToKICAgICAgICAgICAgICBfY29sbGVjdFR5cGVEZXBlbmRlbmNpZXModHlwZSwgZGVwZW5kZW5jaWVzKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBUeXBlVXNlS2luZC5BU19DQVNUOgogICAgICAgICAgICAgIGlmIChjbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGEKICAgICAgICAgICAgICAgICAgLmdldEV4cGxpY2l0Q2FzdENoZWNrUG9saWN5KGVsZW1lbnQpCiAgICAgICAgICAgICAgICAgIC5pc0VtaXR0ZWQpIHsKICAgICAgICAgICAgICAgIF9jb2xsZWN0VHlwZURlcGVuZGVuY2llcyh0eXBlLCBkZXBlbmRlbmNpZXMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBUeXBlVXNlS2luZC5JTVBMSUNJVF9DQVNUOgogICAgICAgICAgICAgIGlmIChjbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGEKICAgICAgICAgICAgICAgICAgLmdldEltcGxpY2l0RG93bmNhc3RDaGVja1BvbGljeShlbGVtZW50KQogICAgICAgICAgICAgICAgICAuaXNFbWl0dGVkKSB7CiAgICAgICAgICAgICAgICBfY29sbGVjdFR5cGVEZXBlbmRlbmNpZXModHlwZSwgZGVwZW5kZW5jaWVzKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgVHlwZVVzZUtpbmQuUEFSQU1FVEVSX0NIRUNLOgogICAgICAgICAgICAgIGlmIChjbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGEKICAgICAgICAgICAgICAgICAgLmdldFBhcmFtZXRlckNoZWNrUG9saWN5KGVsZW1lbnQpCiAgICAgICAgICAgICAgICAgIC5pc0VtaXR0ZWQpIHsKICAgICAgICAgICAgICAgIF9jb2xsZWN0VHlwZURlcGVuZGVuY2llcyh0eXBlLCBkZXBlbmRlbmNpZXMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBUeXBlVXNlS2luZC5SVElfVkFMVUU6CiAgICAgICAgICAgIGNhc2UgVHlwZVVzZUtpbmQuVFlQRV9BUkdVTUVOVDoKICAgICAgICAgICAgY2FzZSBUeXBlVXNlS2luZC5OQU1FRF9UWVBFX1ZBUklBQkxFX05FV19SVEk6CiAgICAgICAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwgIlVuZXhwZWN0ZWQgdHlwZSB1c2U6ICR0eXBlVXNlLiIpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0sIHZpc2l0RHluYW1pY1VzZTogKE1lbWJlckVudGl0eSBtZW1iZXIsIER5bmFtaWNVc2UgZHluYW1pY1VzZSkgewogICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIHJ0aSBuZWVkIGRhdGEgdG8gc2tpcCB1bm5lZWRlZCB0eXBlCiAgICAgICAgICAvLyBhcmd1bWVudHMuCiAgICAgICAgICBfY29sbGVjdFR5cGVBcmd1bWVudERlcGVuZGVuY2llcygKICAgICAgICAgICAgICBkeW5hbWljVXNlLnR5cGVBcmd1bWVudHMsIGRlcGVuZGVuY2llcyk7CiAgICAgICAgfSksCiAgICAgICAgRGVmZXJyZWRMb2FkVGFzay5JTVBBQ1RfVVNFKTsKICB9CgogIC8vLyBVcGRhdGUgdGhlIGltcG9ydCBzZXQgb2YgYWxsIGNvbnN0YW50cyByZWFjaGFibGUgZnJvbSBbY29uc3RhbnRdLCBhcyBsb25nCiAgLy8vIGFzIHRoZXkgaGFkIHRoZSBbb2xkU2V0XS4gQXMgc29vbiBhcyB3ZSBzZWUgYSBjb25zdGFudCB3aXRoIGEgZGlmZmVyZW50CiAgLy8vIGltcG9ydCBzZXQsIHdlIHN0b3AgYW5kIGVucXVldWUgYSBuZXcgcmVjdXJzaXZlIHVwZGF0ZSBpbiBbcXVldWVdLgogIC8vLwogIC8vLyBJbnZhcmlhbnRzOiBvbGRTZXQgaXMgZWl0aGVyIG51bGwgb3IgYSBzdWJzZXQgb2YgbmV3U2V0LgogIHZvaWQgX3VwZGF0ZUNvbnN0YW50UmVjdXJzaXZlKAogICAgICBLQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQsCiAgICAgIEltcG9ydFNldCBvbGRTZXQsCiAgICAgIEltcG9ydFNldCBuZXdTZXQsCiAgICAgIFdvcmtRdWV1ZSBxdWV1ZSkgewogICAgaWYgKGNvbnN0YW50ID09IG51bGwpIHJldHVybjsKICAgIHZhciBjdXJyZW50U2V0ID0gX2NvbnN0YW50VG9TZXRbY29uc3RhbnRdOwoKICAgIC8vIEFscmVhZHkgdmlzaXRlZC4KICAgIGlmIChjdXJyZW50U2V0ID09IG5ld1NldCkgcmV0dXJuOwoKICAgIC8vIEVsZW1lbnRzIGluIHRoZSBtYWluIG91dHB1dCB1bml0IGFsd2F5cyByZW1haW4gdGhlcmUuCiAgICBpZiAoY3VycmVudFNldCA9PSBpbXBvcnRTZXRzLm1haW5TZXQpIHJldHVybjsKCiAgICBpZiAoY3VycmVudFNldCA9PSBvbGRTZXQpIHsKICAgICAgX2NvbnN0YW50VG9TZXRbY29uc3RhbnRdID0gbmV3U2V0OwogICAgICBpZiAoY29uc3RhbnQgaXMgQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlKSB7CiAgICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gY29uc3RhbnQudHlwZS5lbGVtZW50OwogICAgICAgIF91cGRhdGVDbGFzc1JlY3Vyc2l2ZShjbG9zZWRXb3JsZCwgY2xzLCBvbGRTZXQsIG5ld1NldCwgcXVldWUpOwogICAgICB9CiAgICAgIGlmIChjb25zdGFudCBpcyBJbnN0YW50aWF0aW9uQ29uc3RhbnRWYWx1ZSkgewogICAgICAgIGZvciAoRGFydFR5cGUgdHlwZSBpbiBjb25zdGFudC50eXBlQXJndW1lbnRzKSB7CiAgICAgICAgICBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgICAgIF91cGRhdGVDbGFzc1JlY3Vyc2l2ZSgKICAgICAgICAgICAgICAgIGNsb3NlZFdvcmxkLCB0eXBlLmVsZW1lbnQsIG9sZFNldCwgbmV3U2V0LCBxdWV1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0YW50LmdldERlcGVuZGVuY2llcygpLmZvckVhY2goKENvbnN0YW50VmFsdWUgZGVwZW5kZW5jeSkgewogICAgICAgIC8vIENvbnN0YW50cyBhcmUgbm90IGFsbG93ZWQgdG8gcmVmZXIgdG8gZGVmZXJyZWQgY29uc3RhbnRzLCBzbwogICAgICAgIC8vIG5vIG5lZWQgdG8gY2hlY2sgZm9yIGEgZGVmZXJyZWQgdHlwZSBsaXRlcmFsIGhlcmUuCiAgICAgICAgX3VwZGF0ZUNvbnN0YW50UmVjdXJzaXZlKAogICAgICAgICAgICBjbG9zZWRXb3JsZCwgZGVwZW5kZW5jeSwgb2xkU2V0LCBuZXdTZXQsIHF1ZXVlKTsKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoCiAgICAgICAgICAvLyBJbnZhcmlhbnQ6IHdlIG11c3QgbWFyayBtYWluIGJlZm9yZSB3ZSBtYXJrIGFueSBkZWZlcnJlZCBpbXBvcnQuCiAgICAgICAgICBuZXdTZXQgIT0gaW1wb3J0U2V0cy5tYWluU2V0IHx8IG9sZFNldCAhPSBudWxsLAogICAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgICAgTk9fTE9DQVRJT05fU1BBTk5BQkxFLAogICAgICAgICAgICAgICJUcmllZCB0byBhc3NpZ24gJHtjb25zdGFudC50b0RhcnRUZXh0KCl9IHRvIHRoZSBtYWluIG91dHB1dCAiCiAgICAgICAgICAgICAgInVuaXQsIGJ1dCBpdCB3YXMgYXNzaWduZWQgdG8gJGN1cnJlbnRTZXQuIikpOwogICAgICBxdWV1ZS5hZGRDb25zdGFudChjb25zdGFudCwgbmV3U2V0KTsKICAgIH0KICB9CgogIHZvaWQgX3VwZGF0ZUNsYXNzUmVjdXJzaXZlKEtDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwgQ2xhc3NFbnRpdHkgZWxlbWVudCwKICAgICAgSW1wb3J0U2V0IG9sZFNldCwgSW1wb3J0U2V0IG5ld1NldCwgV29ya1F1ZXVlIHF1ZXVlKSB7CiAgICBpZiAoZWxlbWVudCA9PSBudWxsKSByZXR1cm47CgogICAgSW1wb3J0U2V0IGN1cnJlbnRTZXQgPSBfY2xhc3NUb1NldFtlbGVtZW50XTsKCiAgICAvLyBBbHJlYWR5IHZpc2l0ZWQuIFdlIG1heSB2aXNpdCBzb21lIHJvb3Qgbm9kZXMgYSBzZWNvbmQgdGltZSB3aXRoCiAgICAvLyBbaXNNaXJyb3JVc2FnZV0gaW4gb3JkZXIgdG8gbWFyayBzdGF0aWMgbWVtYmVycyB1c2VkIHJlZmxlY3RpdmVseS4KICAgIGlmIChjdXJyZW50U2V0ID09IG5ld1NldCkgcmV0dXJuOwoKICAgIC8vIEVsZW1lbnRzIGluIHRoZSBtYWluIG91dHB1dCB1bml0IGFsd2F5cyByZW1haW4gdGhlcmUuCiAgICBpZiAoY3VycmVudFNldCA9PSBpbXBvcnRTZXRzLm1haW5TZXQpIHJldHVybjsKCiAgICBpZiAoY3VycmVudFNldCA9PSBvbGRTZXQpIHsKICAgICAgLy8gQ29udGludWUgcmVjdXJzaXZlbHkgdXBkYXRpbmcgZnJvbSBbb2xkU2V0XSB0byBbbmV3U2V0XS4KICAgICAgX2NsYXNzVG9TZXRbZWxlbWVudF0gPSBuZXdTZXQ7CgogICAgICBEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzID0gbmV3IERlcGVuZGVuY2llcygpOwogICAgICBfY29sbGVjdEFsbEVsZW1lbnRzQW5kQ29uc3RhbnRzUmVzb2x2ZWRGcm9tQ2xhc3MoCiAgICAgICAgICBjbG9zZWRXb3JsZCwgZWxlbWVudCwgZGVwZW5kZW5jaWVzKTsKICAgICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5ID0gZWxlbWVudC5saWJyYXJ5OwogICAgICBfcHJvY2Vzc0RlcGVuZGVuY2llcygKICAgICAgICAgIGNsb3NlZFdvcmxkLCBsaWJyYXJ5LCBkZXBlbmRlbmNpZXMsIG9sZFNldCwgbmV3U2V0LCBxdWV1ZSwgZWxlbWVudCk7CiAgICB9IGVsc2UgewogICAgICBxdWV1ZS5hZGRDbGFzcyhlbGVtZW50LCBuZXdTZXQpOwogICAgfQogIH0KCiAgdm9pZCBfdXBkYXRlTWVtYmVyUmVjdXJzaXZlKEtDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwgTWVtYmVyRW50aXR5IGVsZW1lbnQsCiAgICAgIEltcG9ydFNldCBvbGRTZXQsIEltcG9ydFNldCBuZXdTZXQsIFdvcmtRdWV1ZSBxdWV1ZSkgewogICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkgcmV0dXJuOwoKICAgIEltcG9ydFNldCBjdXJyZW50U2V0ID0gX21lbWJlclRvU2V0W2VsZW1lbnRdOwoKICAgIC8vIEFscmVhZHkgdmlzaXRlZC4gV2UgbWF5IHZpc2l0IHNvbWUgcm9vdCBub2RlcyBhIHNlY29uZCB0aW1lIHdpdGgKICAgIC8vIFtpc01pcnJvclVzYWdlXSBpbiBvcmRlciB0byBtYXJrIHN0YXRpYyBtZW1iZXJzIHVzZWQgcmVmbGVjdGl2ZWx5LgogICAgaWYgKGN1cnJlbnRTZXQgPT0gbmV3U2V0KSByZXR1cm47CgogICAgLy8gRWxlbWVudHMgaW4gdGhlIG1haW4gb3V0cHV0IHVuaXQgYWx3YXlzIHJlbWFpbiB0aGVyZS4KICAgIGlmIChjdXJyZW50U2V0ID09IGltcG9ydFNldHMubWFpblNldCkgcmV0dXJuOwoKICAgIGlmIChjdXJyZW50U2V0ID09IG9sZFNldCkgewogICAgICAvLyBDb250aW51ZSByZWN1cnNpdmVseSB1cGRhdGluZyBmcm9tIFtvbGRTZXRdIHRvIFtuZXdTZXRdLgogICAgICBfbWVtYmVyVG9TZXRbZWxlbWVudF0gPSBuZXdTZXQ7CgogICAgICBEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzID0gbmV3IERlcGVuZGVuY2llcygpOwogICAgICBfY29sbGVjdEFsbEVsZW1lbnRzQW5kQ29uc3RhbnRzUmVzb2x2ZWRGcm9tTWVtYmVyKAogICAgICAgICAgY2xvc2VkV29ybGQsIGVsZW1lbnQsIGRlcGVuZGVuY2llcyk7CgogICAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnkgPSBlbGVtZW50LmxpYnJhcnk7CiAgICAgIF9wcm9jZXNzRGVwZW5kZW5jaWVzKAogICAgICAgICAgY2xvc2VkV29ybGQsIGxpYnJhcnksIGRlcGVuZGVuY2llcywgb2xkU2V0LCBuZXdTZXQsIHF1ZXVlLCBlbGVtZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIHF1ZXVlLmFkZE1lbWJlcihlbGVtZW50LCBuZXdTZXQpOwogICAgfQogIH0KCiAgdm9pZCBfdXBkYXRlTG9jYWxGdW5jdGlvbigKICAgICAgTG9jYWwgbG9jYWxGdW5jdGlvbiwgSW1wb3J0U2V0IG9sZFNldCwgSW1wb3J0U2V0IG5ld1NldCkgewogICAgSW1wb3J0U2V0IGN1cnJlbnRTZXQgPSBfbG9jYWxGdW5jdGlvblRvU2V0W2xvY2FsRnVuY3Rpb25dOwogICAgaWYgKGN1cnJlbnRTZXQgPT0gbmV3U2V0KSByZXR1cm47CgogICAgLy8gRWxlbWVudHMgaW4gdGhlIG1haW4gb3V0cHV0IHVuaXQgYWx3YXlzIHJlbWFpbiB0aGVyZS4KICAgIGlmIChjdXJyZW50U2V0ID09IGltcG9ydFNldHMubWFpblNldCkgcmV0dXJuOwoKICAgIGlmIChjdXJyZW50U2V0ID09IG9sZFNldCkgewogICAgICBfbG9jYWxGdW5jdGlvblRvU2V0W2xvY2FsRnVuY3Rpb25dID0gbmV3U2V0OwogICAgfSBlbHNlIHsKICAgICAgX2xvY2FsRnVuY3Rpb25Ub1NldFtsb2NhbEZ1bmN0aW9uXSA9IGltcG9ydFNldHMudW5pb24oY3VycmVudFNldCwgbmV3U2V0KTsKICAgIH0KICAgIC8vIE5vdGU6IGxvY2FsIGZ1bmN0aW9ucyBhcmUgbm90IHVwZGF0ZWQgcmVjdXJzaXZlbHkgYmVjYXVzZSB0aGUKICAgIC8vIGRlcGVuZGVuY2llcyBhcmUgYWxyZWFkeSB2aXNpdGVkIGFzIGRlcGVuZGVuY2llcyBvZiB0aGUgZW5jbG9zaW5nIG1lbWJlci4KICB9CgogIC8vLyBXaGV0aGVyIHRvIGVucXVldWUgYSBkZWZlcnJlZCBkZXBlbmRlbmN5LgogIC8vLwogIC8vLyBEdWUgdG8gdGhlIG5hdHVyZSBvZiB0aGUgYWxnb3JpdGhtLCBzb21lIGRlcGVuZGVuY2llcyBtYXkgYmUgdmlzaXRlZCBtb3JlCiAgLy8vIHRoYW4gb25jZS4gSG93ZXZlciwgd2Uga25vdyB0aGF0IG5ldyBkZWZlcnJlZC1pbXBvcnRzIGFyZSBvbmx5IGRpc2NvdmVyZWQKICAvLy8gd2hlbiB3ZSBhcmUgdmlzaXRpbmcgdGhlIG1haW4gb3V0cHV0IHVuaXQgKHNpemUgPT0gMCkgb3IgY29kZSByZWFjaGFibGUKICAvLy8gZnJvbSBhIGRlZmVycmVkIGltcG9ydCAoc2l6ZSA9PSAxKS4gQWZ0ZXIgdGhhdCwgd2UgYXJlIHJlZGlzY292ZXJpbmcgdGhlCiAgLy8vIHNhbWUgbm9kZXMgd2UgaGF2ZSBhbHJlYWR5IHNlZW4uCiAgX3Nob3VsZEFkZERlZmVycmVkRGVwZW5kZW5jeShJbXBvcnRTZXQgbmV3U2V0KSA9PiBuZXdTZXQubGVuZ3RoIDw9IDE7CgogIHZvaWQgX2ZpeERlcGVuZGVuY3lJbmZvKERlcGVuZGVuY3lJbmZvIGluZm8sIExpc3Q8SW1wb3J0RW50aXR5PiBpbXBvcnRzLAogICAgICBTdHJpbmcgcHJlZml4LCBTdHJpbmcgbmFtZSwgU3Bhbm5hYmxlIGNvbnRleHQpIHsKICAgIHZhciBpc0RlZmVycmVkID0gX2lzRXhwbGljaXRseURlZmVycmVkKGltcG9ydHMpOwogICAgaWYgKGlzRGVmZXJyZWQpIHsKICAgICAgaWYgKCFuZXdEZWZlcnJlZFNwbGl0KSB7CiAgICAgICAgaW5mby5pc0RlZmVycmVkID0gdHJ1ZTsKICAgICAgICBpbmZvLmltcG9ydHMgPSBpbXBvcnRzOwogICAgICB9CiAgICAgIGlmIChyZXBvcnRJbnZhbGlkSW5mZXJyZWREZWZlcnJlZFR5cGVzKSB7CiAgICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKGNvbnRleHQsIE1lc3NhZ2VLaW5kLkdFTkVSSUMsIHsKICAgICAgICAgICd0ZXh0JzogIiRwcmVmaXggJyRuYW1lJyBpcyBkZWZlcnJlZCBidXQgYXBwZWFycyB0byBiZSBpbmZlcnJlZCBhcyIKICAgICAgICAgICAgICAiIGEgcmV0dXJuIHR5cGUgb3IgYSB0eXBlIHBhcmFtZXRlciAoZGFydGJ1Zy5jb20vMzUzMTEpLiIKICAgICAgICB9KTsKICAgICAgfQogICAgfQogIH0KCiAgLy8gVGhlIGZvbGxvd2luZyAzIG1ldGhvZHMgYXJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgbmV3IGRlZmVycmVkIHNwbGl0CiAgLy8gYWxnb3JpdGhtIGFuZCB0aGUgb2xkIG9uZSBtYXRjaC4gQmVjYXVzZSBvZiBhIHNvdW5kbmVzcyBidWcgaW4gdGhlIG9sZAogIC8vIGFsZ29yaXRobSB0aGUgbmV3IGFsZ29yaXRobSBjYW4gcHVsbCBpbiBhIGxvdCBvZiBjb2RlIHRvIHRoZSBtYWluIG91dHB1dAogIC8vIHVuaXQuIFRoaXMgbG9naWMgZGV0ZWN0cyBpdCBhbmQgd2lsbCBtYWtlIGl0IGVhc2llciBmb3IgdXMgdG8gbWlncmF0ZSBjb2RlCiAgLy8gb2ZmIGl0IGluY3JlbWVudGFsbHkuCiAgLy8gTm90ZTogd2Ugb25seSBleHBlY3QgZGlzY3JlcGFuY2llcyBvbiBjbGFzcy1kZXBlbmRlbmN5LWluZm8gZHVlIHRvIGhvdwogIC8vIGluZmVycmVkIHR5cGVzIGV4cG9zZSBkZWZlcnJlZCB0eXBlcyBpbiB0eXBlLXZhcmlhYmxlcyBhbmQgcmV0dXJuIHR5cGVzCiAgLy8gKElzc3VlICMzNTMxMSkuIFdlIGFkZGVkIHRoZSBvdGhlciB0d28gbWV0aG9kcyB0byB0ZXN0IG91ciB0cmFuc2l0aW9uLCBidXQKICAvLyB3ZSBkb24ndCBleHBlY3QgdG8gZGV0ZWN0IGFueSBtaXNtYXRjaGVzIHRoZXJlLgogIC8vCiAgLy8gVE9ETyhzaWdtdW5kKTogZGVsZXRlIG9uY2UgdGhlIG5ldyBpbXBsZW1lbnRhdGlvbiBpcyBvbiBieSBkZWZhdWx0LgogIHZvaWQgX2ZpeENsYXNzRGVwZW5kZW5jeUluZm8oRGVwZW5kZW5jeUluZm8gaW5mbywgQ2xhc3NFbnRpdHkgY2xzLAogICAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnksIFNwYW5uYWJsZSBjb250ZXh0KSB7CiAgICBpZiAoaW5mby5pc0RlZmVycmVkKSByZXR1cm47CiAgICBpZiAobmV3RGVmZXJyZWRTcGxpdCAmJiAhcmVwb3J0SW52YWxpZEluZmVycmVkRGVmZXJyZWRUeXBlcykgcmV0dXJuOwogICAgdmFyIGltcG9ydHMgPSBjbGFzc0ltcG9ydHNUbyhjbHMsIGxpYnJhcnkpOwogICAgX2ZpeERlcGVuZGVuY3lJbmZvKGluZm8sIGltcG9ydHMsICJDbGFzcyIsIGNscy5uYW1lLCBjb250ZXh0KTsKICB9CgogIHZvaWQgX2ZpeE1lbWJlckRlcGVuZGVuY3lJbmZvKERlcGVuZGVuY3lJbmZvIGluZm8sIE1lbWJlckVudGl0eSBtZW1iZXIsCiAgICAgIExpYnJhcnlFbnRpdHkgbGlicmFyeSwgU3Bhbm5hYmxlIGNvbnRleHQpIHsKICAgIGlmIChpbmZvLmlzRGVmZXJyZWQgfHwgY29tcGlsZXIub3B0aW9ucy5uZXdEZWZlcnJlZFNwbGl0KSByZXR1cm47CiAgICB2YXIgaW1wb3J0cyA9IG1lbWJlckltcG9ydHNUbyhtZW1iZXIsIGxpYnJhcnkpOwogICAgX2ZpeERlcGVuZGVuY3lJbmZvKGluZm8sIGltcG9ydHMsICJNZW1iZXIiLCBtZW1iZXIubmFtZSwgY29udGV4dCk7CiAgfQoKICB2b2lkIF9maXhDb25zdGFudERlcGVuZGVuY3lJbmZvKERlcGVuZGVuY3lJbmZvIGluZm8sIENvbnN0YW50VmFsdWUgY29uc3RhbnQsCiAgICAgIExpYnJhcnlFbnRpdHkgbGlicmFyeSwgU3Bhbm5hYmxlIGNvbnRleHQpIHsKICAgIGlmIChpbmZvLmlzRGVmZXJyZWQgfHwgY29tcGlsZXIub3B0aW9ucy5uZXdEZWZlcnJlZFNwbGl0KSByZXR1cm47CiAgICBpZiAoY29uc3RhbnQgaXMgVHlwZUNvbnN0YW50VmFsdWUpIHsKICAgICAgdmFyIHR5cGUgPSBjb25zdGFudC5yZXByZXNlbnRlZFR5cGU7CiAgICAgIGlmICh0eXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgICB2YXIgaW1wb3J0cyA9IGNsYXNzSW1wb3J0c1RvKHR5cGUuZWxlbWVudCwgbGlicmFyeSk7CiAgICAgICAgX2ZpeERlcGVuZGVuY3lJbmZvKAogICAgICAgICAgICBpbmZvLCBpbXBvcnRzLCAiQ2xhc3MgKGluIGNvbnN0YW50KSAiLCB0eXBlLmVsZW1lbnQubmFtZSwgY29udGV4dCk7CiAgICAgIH0gZWxzZSBpZiAodHlwZSBpcyBUeXBlZGVmVHlwZSkgewogICAgICAgIHZhciBpbXBvcnRzID0gdHlwZWRlZkltcG9ydHNUbyh0eXBlLmVsZW1lbnQsIGxpYnJhcnkpOwogICAgICAgIF9maXhEZXBlbmRlbmN5SW5mbygKICAgICAgICAgICAgaW5mbywgaW1wb3J0cywgIlR5cGVkZWYgIiwgdHlwZS5lbGVtZW50Lm5hbWUsIGNvbnRleHQpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIF9wcm9jZXNzRGVwZW5kZW5jaWVzKAogICAgICBLQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIExpYnJhcnlFbnRpdHkgbGlicmFyeSwKICAgICAgRGVwZW5kZW5jaWVzIGRlcGVuZGVuY2llcywKICAgICAgSW1wb3J0U2V0IG9sZFNldCwKICAgICAgSW1wb3J0U2V0IG5ld1NldCwKICAgICAgV29ya1F1ZXVlIHF1ZXVlLAogICAgICBTcGFubmFibGUgY29udGV4dCkgewogICAgZGVwZW5kZW5jaWVzLmNsYXNzZXMuZm9yRWFjaCgoQ2xhc3NFbnRpdHkgY2xzLCBEZXBlbmRlbmN5SW5mbyBpbmZvKSB7CiAgICAgIF9maXhDbGFzc0RlcGVuZGVuY3lJbmZvKGluZm8sIGNscywgbGlicmFyeSwgY29udGV4dCk7CiAgICAgIGlmIChpbmZvLmlzRGVmZXJyZWQpIHsKICAgICAgICBpZiAoX3Nob3VsZEFkZERlZmVycmVkRGVwZW5kZW5jeShuZXdTZXQpKSB7CiAgICAgICAgICBmb3IgKEltcG9ydEVudGl0eSBkZWZlcnJlZEltcG9ydCBpbiBpbmZvLmltcG9ydHMpIHsKICAgICAgICAgICAgcXVldWUuYWRkQ2xhc3MoY2xzLCBpbXBvcnRTZXRzLnNpbmdsZXRvbihkZWZlcnJlZEltcG9ydCkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBfdXBkYXRlQ2xhc3NSZWN1cnNpdmUoY2xvc2VkV29ybGQsIGNscywgb2xkU2V0LCBuZXdTZXQsIHF1ZXVlKTsKICAgICAgfQogICAgfSk7CgogICAgZGVwZW5kZW5jaWVzLm1lbWJlcnMuZm9yRWFjaCgoTWVtYmVyRW50aXR5IG1lbWJlciwgRGVwZW5kZW5jeUluZm8gaW5mbykgewogICAgICBfZml4TWVtYmVyRGVwZW5kZW5jeUluZm8oaW5mbywgbWVtYmVyLCBsaWJyYXJ5LCBjb250ZXh0KTsKICAgICAgaWYgKGluZm8uaXNEZWZlcnJlZCkgewogICAgICAgIGlmIChfc2hvdWxkQWRkRGVmZXJyZWREZXBlbmRlbmN5KG5ld1NldCkpIHsKICAgICAgICAgIGZvciAoSW1wb3J0RW50aXR5IGRlZmVycmVkSW1wb3J0IGluIGluZm8uaW1wb3J0cykgewogICAgICAgICAgICBxdWV1ZS5hZGRNZW1iZXIobWVtYmVyLCBpbXBvcnRTZXRzLnNpbmdsZXRvbihkZWZlcnJlZEltcG9ydCkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBfdXBkYXRlTWVtYmVyUmVjdXJzaXZlKGNsb3NlZFdvcmxkLCBtZW1iZXIsIG9sZFNldCwgbmV3U2V0LCBxdWV1ZSk7CiAgICAgIH0KICAgIH0pOwoKICAgIGZvciAoTG9jYWwgbG9jYWxGdW5jdGlvbiBpbiBkZXBlbmRlbmNpZXMubG9jYWxGdW5jdGlvbnMpIHsKICAgICAgX3VwZGF0ZUxvY2FsRnVuY3Rpb24obG9jYWxGdW5jdGlvbiwgb2xkU2V0LCBuZXdTZXQpOwogICAgfQoKICAgIGRlcGVuZGVuY2llcy5jb25zdGFudHMKICAgICAgICAuZm9yRWFjaCgoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgRGVwZW5kZW5jeUluZm8gaW5mbykgewogICAgICBfZml4Q29uc3RhbnREZXBlbmRlbmN5SW5mbyhpbmZvLCBjb25zdGFudCwgbGlicmFyeSwgY29udGV4dCk7CiAgICAgIGlmIChpbmZvLmlzRGVmZXJyZWQpIHsKICAgICAgICBpZiAoX3Nob3VsZEFkZERlZmVycmVkRGVwZW5kZW5jeShuZXdTZXQpKSB7CiAgICAgICAgICBmb3IgKEltcG9ydEVudGl0eSBkZWZlcnJlZEltcG9ydCBpbiBpbmZvLmltcG9ydHMpIHsKICAgICAgICAgICAgcXVldWUuYWRkQ29uc3RhbnQoY29uc3RhbnQsIGltcG9ydFNldHMuc2luZ2xldG9uKGRlZmVycmVkSW1wb3J0KSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIF91cGRhdGVDb25zdGFudFJlY3Vyc2l2ZShjbG9zZWRXb3JsZCwgY29uc3RhbnQsIG9sZFNldCwgbmV3U2V0LCBxdWV1ZSk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgLy8vIENvbXB1dGVzIGEgdW5pcXVlIHN0cmluZyBmb3IgdGhlIG5hbWUgZmllbGQgZm9yIGVhY2ggb3V0cHV0VW5pdC4KICB2b2lkIF9jcmVhdGVPdXRwdXRVbml0cygpIHsKICAgIGludCBjb3VudGVyID0gMTsKICAgIHZvaWQgYWRkVW5pdChJbXBvcnRTZXQgaW1wb3J0U2V0KSB7CiAgICAgIGlmIChpbXBvcnRTZXQudW5pdCAhPSBudWxsKSByZXR1cm47CiAgICAgIHZhciB1bml0ID0gbmV3IE91dHB1dFVuaXQoZmFsc2UsICckY291bnRlcicsCiAgICAgICAgICBpbXBvcnRTZXQuX2ltcG9ydHMubWFwKChpKSA9PiBpLmRlY2xhcmF0aW9uKS50b1NldCgpKTsKICAgICAgY291bnRlcisrOwogICAgICBpbXBvcnRTZXQudW5pdCA9IHVuaXQ7CiAgICAgIF9hbGxPdXRwdXRVbml0cy5hZGQodW5pdCk7CiAgICB9CgogICAgLy8gR2VuZXJhdGUgYW4gb3V0cHV0IHVuaXQgZm9yIGFsbCBpbXBvcnQgc2V0cyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggYW4KICAgIC8vIGVsZW1lbnQgb3IgY29uc3RhbnQuCiAgICBfY2xhc3NUb1NldC52YWx1ZXMuZm9yRWFjaChhZGRVbml0KTsKICAgIF9tZW1iZXJUb1NldC52YWx1ZXMuZm9yRWFjaChhZGRVbml0KTsKICAgIF9sb2NhbEZ1bmN0aW9uVG9TZXQudmFsdWVzLmZvckVhY2goYWRkVW5pdCk7CiAgICBfY29uc3RhbnRUb1NldC52YWx1ZXMuZm9yRWFjaChhZGRVbml0KTsKCiAgICAvLyBTb3J0IG91dHB1dCB1bml0cyB0byBtYWtlIHRoZSBvdXRwdXQgb2YgdGhlIGNvbXBpbGVyIG1vcmUgc3RhYmxlLgogICAgX2FsbE91dHB1dFVuaXRzLnNvcnQoKTsKICB9CgogIE1hcDxTdHJpbmcsIExpc3Q8T3V0cHV0VW5pdD4+IF9zZXR1cEh1bmtzVG9Mb2FkKCkgewogICAgTWFwPFN0cmluZywgTGlzdDxPdXRwdXRVbml0Pj4gaHVua3NUb0xvYWQgPSB7fTsKICAgIFNldDxTdHJpbmc+IHVzZWRJbXBvcnROYW1lcyA9IG5ldyBTZXQ8U3RyaW5nPigpOwoKICAgIGZvciAoSW1wb3J0RW50aXR5IGltcG9ydCBpbiBfYWxsRGVmZXJyZWRJbXBvcnRzKSB7CiAgICAgIFN0cmluZyByZXN1bHQgPSBjb21wdXRlSW1wb3J0RGVmZXJOYW1lKGltcG9ydCwgY29tcGlsZXIpOwogICAgICBhc3NlcnQocmVzdWx0ICE9IG51bGwpOwogICAgICAvLyBOb3RlOiB0b29scyB0aGF0IHByb2Nlc3MgdGhlIGpzb24gZmlsZSB0byBidWlsZCBtdWx0aS1wYXJ0IGluaXRpYWwgbG9hZAogICAgICAvLyBidW5kbGVzIGRlcGVuZCBvbiB0aGUgZmFjdCB0aGF0IG1ha2VVbmlxdWUgYXBwZW5kcyBvbmx5IGRpZ2l0cywgb3IgYQogICAgICAvLyBwZXJpb2QgZm9sbG93ZWQgYnkgZGlnaXRzLgogICAgICBfaW1wb3J0RGVmZXJOYW1lW2ltcG9ydF0gPSBtYWtlVW5pcXVlKHJlc3VsdCwgdXNlZEltcG9ydE5hbWVzLCAnLicpOwogICAgfQoKICAgIC8vIFNvcnQgdGhlIG91dHB1dCB1bml0cyBpbiBkZXNjZW5kaW5nIG9yZGVyIG9mIHRoZSBudW1iZXIgb2YgaW1wb3J0cyB0aGV5CiAgICAvLyBpbmNsdWRlLgoKICAgIC8vIFRoZSBsb2FkaW5nIG9mIHRoZSBvdXRwdXQgdW5pdHMgbXVzdCBiZSBvcmRlcmVkIGJlY2F1c2UgYSBzdXBlcmNsYXNzCiAgICAvLyBuZWVkcyB0byBiZSBpbml0aWFsaXplZCBiZWZvcmUgaXRzIHN1YmNsYXNzLgogICAgLy8gQnV0IGEgY2xhc3MgY2FuIG9ubHkgZGVwZW5kIG9uIGFub3RoZXIgY2xhc3MgaW4gYW4gb3V0cHV0IHVuaXQgc2hhcmVkIGJ5CiAgICAvLyBhIHN0cmljdCBzdXBlcnNldCBvZiB0aGUgaW1wb3J0czoKICAgIC8vIEJ5IGNvbnRyYWRpY3Rpb246IEFzc3VtZSBhIGNsYXNzIEMgaW4gb3V0cHV0IHVuaXQgc2hhcmVkIGJ5IGltcG9ydHMgaW4KICAgIC8vIHRoZSBzZXQgUzEgPSAobGliMSwuLiwgbGliX24pIGRlcGVuZHMgb24gYSBjbGFzcyBEIGluIGFuIG91dHB1dCB1bml0CiAgICAvLyBzaGFyZWQgYnkgUzIgc3VjaCB0aGF0IFMyIG5vdCBhIHN1cGVyc2V0IG9mIFMxLiBMZXQgbGliX3MgYmUgYSBsaWJyYXJ5IGluCiAgICAvLyBTMSBub3QgaW4gUzIuIGxpYl9zIG11c3QgZGVwZW5kIG9uIEMsIGFuZCB0aGVuIGluIHR1cm4gb24gRC4gVGhlcmVmb3JlIEQKICAgIC8vIGlzIG5vdCBpbiB0aGUgcmlnaHQgb3V0cHV0IHVuaXQuCiAgICBMaXN0PE91dHB1dFVuaXQ+IHNvcnRlZE91dHB1dFVuaXRzID0gX2FsbE91dHB1dFVuaXRzLnJldmVyc2VkLnRvTGlzdCgpOwoKICAgIC8vIEZvciBlYWNoIGRlZmVycmVkIGltcG9ydCB3ZSBmaW5kIG91dCB3aGljaCBvdXRwdXRVbml0cyB0byBsb2FkLgogICAgZm9yIChJbXBvcnRFbnRpdHkgaW1wb3J0IGluIF9hbGxEZWZlcnJlZEltcG9ydHMpIHsKICAgICAgLy8gV2UgZXhwZWN0IHRvIGZpbmQgYW4gZW50cnkgZm9yIGFueSBjYWxsIHRvIGBsb2FkTGlicmFyeWAsIGV2ZW4gaWYKICAgICAgLy8gdGhlcmUgaXMgbm8gY29kZSB0byBsb2FkLiBJbiB0aGF0IGNhc2UsIHRoZSBlbnRyeSB3aWxsIGJlIGFuIGVtcHR5CiAgICAgIC8vIGxpc3QuCiAgICAgIGh1bmtzVG9Mb2FkW19pbXBvcnREZWZlck5hbWVbaW1wb3J0XV0gPSBuZXcgTGlzdDxPdXRwdXRVbml0PigpOwogICAgICBmb3IgKE91dHB1dFVuaXQgb3V0cHV0VW5pdCBpbiBzb3J0ZWRPdXRwdXRVbml0cykgewogICAgICAgIGlmIChvdXRwdXRVbml0ID09IF9tYWluT3V0cHV0VW5pdCkgY29udGludWU7CiAgICAgICAgaWYgKG91dHB1dFVuaXQuX2ltcG9ydHMuY29udGFpbnMoaW1wb3J0KSkgewogICAgICAgICAgaHVua3NUb0xvYWRbX2ltcG9ydERlZmVyTmFtZVtpbXBvcnRdXS5hZGQob3V0cHV0VW5pdCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gaHVua3NUb0xvYWQ7CiAgfQoKICAvLy8gUmV0dXJucyBhIG5hbWUgZm9yIGEgZGVmZXJyZWQgaW1wb3J0LgogIFN0cmluZyBjb21wdXRlSW1wb3J0RGVmZXJOYW1lKEltcG9ydEVudGl0eSBkZWNsYXJhdGlvbiwgQ29tcGlsZXIgY29tcGlsZXIpIHsKICAgIGFzc2VydChkZWNsYXJhdGlvbi5pc0RlZmVycmVkKTsKICAgIGlmIChkZWNsYXJhdGlvbi5uYW1lICE9IG51bGwpIHsKICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uLm5hbWU7CiAgICB9IGVsc2UgewogICAgICAvLyBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgZGVmZXJyZWQgaW1wb3J0IGlzbid0IGRlY2xhcmVkIHdpdGggYSBwcmVmaXguCiAgICAgIGFzc2VydChjb21waWxlci5jb21waWxhdGlvbkZhaWxlZCk7CiAgICAgIHJldHVybiAnJzsKICAgIH0KICB9CgogIC8vLyBQZXJmb3JtcyB0aGUgZGVmZXJyZWQgbG9hZGluZyBhbGdvcml0aG0uCiAgLy8vCiAgLy8vIFRoZSBkZWZlcnJlZCBsb2FkaW5nIGFsZ29yaXRobSBtYXBzIGVsZW1lbnRzIGFuZCBjb25zdGFudHMgdG8gYW4gb3V0cHV0CiAgLy8vIHVuaXQuIEVhY2ggb3V0cHV0IHVuaXQgaXMgaWRlbnRpZmllZCBieSBhIHN1YnNldCBvZiBkZWZlcnJlZCBpbXBvcnRzIChhbgogIC8vLyBbSW1wb3J0U2V0XSksIGFuZCB0aGV5IHdpbGwgY29udGFpbiB0aGUgZWxlbWVudHMgdGhhdCBhcmUgaW5oZXJlbnRseSB1c2VkCiAgLy8vIGJ5IGFsbCB0aG9zZSBkZWZlcnJlZCBpbXBvcnRzLiBBbiBlbGVtZW50IGlzIHVzZWQgYnkgYSBkZWZlcnJlZCBpbXBvcnQgaWYKICAvLy8gaXQgaXMgZWl0aGVyIGxvYWRlZCBieSB0aGF0IGltcG9ydCBvciB0cmFuc2l0aXZlbHkgYWNjZXNzZWQgYnkgYW4gZWxlbWVudAogIC8vLyB0aGF0IHRoZSBpbXBvcnQgbG9hZHMuICBBbiBlbXB0eSBzZXQgcmVwcmVzZW50cyB0aGUgbWFpbiBvdXRwdXQgdW5pdCwKICAvLy8gd2hpY2ggY29udGFpbnMgYW55IGVsZW1lbnRzIHRoYXQgYXJlIGFjY2Vzc2VkIGRpcmVjdGx5IGFuZCBhcmUgbm90CiAgLy8vIGRlZmVycmVkLgogIC8vLwogIC8vLyBUaGUgYWxnb3JpdGhtIHRyYXZlcnNlcyB0aGUgZWxlbWVudCBtb2RlbCByZWN1cnNpdmVseSBsb29raW5nIGZvcgogIC8vLyBkZXBlbmRlbmNpZXMgYmV0d2VlbiBlbGVtZW50cy4gVGhlc2UgZGVwZW5kZW5jaWVzIG1heSBiZSBkZWZlcnJlZCBvcgogIC8vLyBub24tZGVmZXJyZWQuIERlZmVycmVkIGRlcGVuZGVuY2llcyBhcmUgbWFpbmx5IHVzZWQgdG8gZGlzY292ZXIgdGhlIHJvb3QKICAvLy8gZWxlbWVudHMgdGhhdCBhcmUgbG9hZGVkIGZyb20gZGVmZXJyZWQgaW1wb3J0cywgd2hpbGUgbm9uLWRlZmVycmVkCiAgLy8vIGRlcGVuZGVuY2llcyBhcmUgdXNlZCB0byByZWN1cnNpdmVseSBhc3NvY2lhdGUgbW9yZSBlbGVtZW50cyB0byBvdXRwdXQKICAvLy8gdW5pdHMuCiAgLy8vCiAgLy8vIE5haXZlbHksIHRoZSBhbGdvcml0aG0gdHJhdmVyc2VzIGVhY2ggcm9vdCBvZiBhIGRlZmVycmVkIGltcG9ydCBhbmQgbWFya3MKICAvLy8gZXZlcnl0aGluZyBpdCBjYW4gcmVhY2ggYXMgYmVpbmcgdXNlZCBieSB0aGF0IGltcG9ydC4gVG8gcmVkdWNlIGhvdyBtYW55CiAgLy8vIHRpbWVzIHdlIHZpc2l0IGFuIGVsZW1lbnQsIHdlIHVzZSBhbiBhbGdvcml0aG0gdGhhdCB3b3JrcyBpbiBzZWdtZW50czogaXQKICAvLy8gbWFya3MgZWxlbWVudHMgd2l0aCBhIHN1YnNldCBvZiBkZWZlcnJlZCBpbXBvcnRzIGF0IGEgdGltZSwgdW50aWwgaXQKICAvLy8gZGV0ZWN0cyBhIG1lcmdlIHBvaW50IHdoZXJlIG1vcmUgZGVmZXJyZWQgaW1wb3J0cyBjb3VsZCBiZSBjb25zaWRlcmVkIGF0CiAgLy8vIG9uY2UuCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGlzIGRlcGVuZGVuY3kgZ3JhcGggKGlnbm9yaW5nIGVsZW1lbnRzIGluIHRoZSBtYWluCiAgLy8vIG91dHB1dCB1bml0KToKICAvLy8KICAvLy8gICBkZWZlcnJlZCBpbXBvcnQgQTogYTEgLS0tPiBzMSAtLS0+IHMyICAtPiBzMwogIC8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgXgogIC8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfAogIC8vLyAgIGRlZmVycmVkIGltcG9ydCBCOiBiMSAtLS0tLSsgICAgICAgfAogIC8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogIC8vLyAgIGRlZmVycmVkIGltcG9ydCBDOiBjMSAtLS0+IGMyIC0tLT4gYzMKICAvLy8KICAvLy8gVGhlIGFsZ29yaXRobSB3aWxsIGNvbXB1dGUgYSByZXN1bHQgd2l0aCA1IGRlZmVycmVkIG91dHB1dCB1bml0czoKICAvLwogIC8vLyAgICogdW5pdCB7QX06ICAgICAgICBjb250YWlucyBhMQogIC8vLyAgICogdW5pdCB7Qn06ICAgICAgICBjb250YWlucyBiMQogIC8vLyAgICogdW5pdCB7Q306ICAgICAgICBjb250YWlucyBjMSwgYzIsIGFuZCBjMwogIC8vLyAgICogdW5pdCB7QSwgQn06ICAgICBjb250YWlucyBzMQogIC8vLyAgICogdW5pdCB7QSwgQiwgQ306ICBjb250YWlucyBzMiwgYW5kIHMzCiAgLy8vCiAgLy8vIEFmdGVyIG1hcmtpbmcgZXZlcnl0aGluZyByZWFjaGFibGUgZnJvbSBtYWluIGFzIHBhcnQgb2YgdGhlIG1haW4gb3V0cHV0CiAgLy8vIHVuaXQsIG91ciBhbGdvcml0aG0gd2lsbCB3b3JrIGFzIGZvbGxvd3M6CiAgLy8vCiAgLy8vICAgKiBJbml0aWFsbHkgYWxsIGRlZmVycmVkIGVsZW1lbnRzIGhhdmUgbm8gbWFwcGluZy4KICAvLy8gICAqIFdlIG1ha2Ugbm90ZSBvZiB3b3JrIHRvIGRvLCBpbml0aWFsbHkgdG8gbWFyayB0aGUgcm9vdCBvZiBlYWNoCiAgLy8vICAgICBkZWZlcnJlZCBpbXBvcnQ6CiAgLy8vICAgICAgICAqIGExIHdpdGggQSwgYW5kIHJlY3Vyc2UgZnJvbSB0aGVyZS4KICAvLy8gICAgICAgICogYjEgd2l0aCBCLCBhbmQgcmVjdXJzZSBmcm9tIHRoZXJlLgogIC8vLyAgICAgICAgKiBjMSB3aXRoIEMsIGFuZCByZWN1cnNlIGZyb20gdGhlcmUuCiAgLy8vICAgKiB3ZSB1cGRhdGUgYTEsIHMxLCBzMiwgczMgZnJvbSBubyBtYXBwaW5nIHRvIHtBfQogIC8vLyAgICogd2UgdXBkYXRlIGIxIGZyb20gbm8gbWFwcGluZyB0byB7Qn0sIGFuZCB3aGVuIHdlIGZpbmQgczEgd2Ugbm90aWNlCiAgLy8vICAgICB0aGF0IHMxIGlzIGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIGFub3RoZXIgaW1wb3J0IHNldCB7QX0sIHNvIHdlIG1ha2UKICAvLy8gICAgIG5vdGUgb2YgYWRkaXRpb25hbCB3b3JrIGZvciBsYXRlciB0byBtYXJrIHMxIHdpdGgge0EsIEJ9CiAgLy8vICAgKiB3ZSB1cGRhdGUgYzEsIGMyLCBjMyB0byB7Q30sIGFuZCBtYWtlIGEgbm90ZSB0byB1cGRhdGUgczIgd2l0aCB7QSwgQ30KICAvLy8gICAqIHdlIHVwZGF0ZSBzMSB0byB7QSwgQn0sIGFuZCB1cGRhdGUgdGhlIGV4aXN0aW5nIG5vdGUgdG8gdXBkYXRlIHMyLCBub3cKICAvLy8gICAgIHdpdGgge0EsIEIsIEN9CiAgLy8vICAgKiBmaW5hbGx5IHdlIHVwZGF0ZSBzMiBhbmQgczMgd2l0aCB7QSwgQiwgQ30gaW4gb25lIGdvLCB3aXRob3V0IGV2ZXIKICAvLy8gICAgIHVwZGF0aW5nIHRoZW0gdG8gdGhlIGludGVybWVkaWF0ZSBzdGF0ZSB7QSwgQ30uCiAgLy8vCiAgLy8vIFRoZSBpbXBsZW1lbnRhdGlvbiBiZWxvdyBkb2VzIGF0b21pYyB1cGRhdGVzIGZyb20gb25lIGltcG9ydC1zZXQgdG8KICAvLy8gYW5vdGhlci4gIEF0IGZpcnN0IHdlIGFkZCBvbmUgZGVmZXJyZWQgaW1wb3J0IGF0IGEgdGltZSwgYnV0IGFzIHRoZQogIC8vLyBhbGdvcml0aG0gcHJvZ2Vzc2VzIGl0IG1heSB1cGRhdGUgYSBzbWFsbCBpbXBvcnQtc2V0IHdpdGggYSBsYXJnZXIKICAvLy8gaW1wb3J0LXNldCBpbiBvbmUgZ28uIFRoZSBrZXkgb2YgdGhpcyBhbGdvcml0aG0gaXMgdG8gZGV0ZWN0IHdoZW4gc2hhcmluZwogIC8vLyBiZWdpbnMsIHNvIHdlIGNhbiB1cGRhdGUgdGhvc2UgZWxlbWVudHMgbW9yZSBlZmZpY2VudGx5LgogIC8vLwogIC8vLyBUbyBkZXRlY3QgdGhlc2UgbWVyZ2UgcG9pbnRzIHdoZXJlIHNoYXJpbmcgYmVnaW5zLCB0aGUgaW1wbGVtZW50YXRpb24KICAvLy8gYmVsb3cgdXNlcyBgYSBzd2FwIG9wZXJhdGlvbmA6IHdlIGZpcnN0IGNvbXBhcmUgd2hhdCB0aGUgb2xkIGltcG9ydC1zZXQKICAvLy8gaXMsIGFuZCBpZiBpdCBtYXRjaGVzIG91ciBleHBlY3RhdGlvbiwgdGhlIHN3YXAgaXMgZG9uZSBhbmQgd2UgcmVjdXJzZSwKICAvLy8gb3RoZXJ3aXNlIGEgbWVyZ2Ugcm9vdCB3YXMgZGV0ZWN0ZWQgYW5kIHdlIGVucXVldWUgYSBuZXcgc2VnbWVudCBvZgogIC8vLyB1cGRhdGVzIGZvciBsYXRlci4KICAvLy8KICAvLy8gVE9ETyhzaWdtdW5kKTogaW52ZXN0aWdhdGUgZGlmZmVyZW50IGhldXJpc3RpY3MgZm9yIGhvdyB0byBzZWxlY3QgdGhlIG5leHQKICAvLy8gd29yayBpdGVtIChlLmcuIHdlIG1pZ2h0IGNvbnZlcmdlIGZhc3RlciBpZiB3ZSBwaWNrIGZpcnN0IHRoZSB1cGRhdGUgdGhhdAogIC8vLyBjb250YWlucyBhIGJpZ2dlciBkZWx0YS4pCiAgT3V0cHV0VW5pdERhdGEgcnVuKEZ1bmN0aW9uRW50aXR5IG1haW4sIEtDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgaWYgKCFpc1Byb2dyYW1TcGxpdCB8fCBtYWluID09IG51bGwgfHwgZGlzYWJsZVByb2dyYW1TcGxpdCkgewogICAgICByZXR1cm4gX2J1aWxkUmVzdWx0KCk7CiAgICB9CgogICAgd29yaygpIHsKICAgICAgdmFyIHF1ZXVlID0gbmV3IFdvcmtRdWV1ZSh0aGlzLmltcG9ydFNldHMpOwoKICAgICAgLy8gQWRkIGBtYWluYCBhbmQgdGhlaXIgcmVjdXJzaXZlIGRlcGVuZGVuY2llcyB0byB0aGUgbWFpbiBvdXRwdXQgdW5pdC4KICAgICAgLy8gV2UgZG8gdGhpcyB1cGZyb250IHRvIGF2b2lkIHdhc3RpbmcgdGltZSB2aXNpdGluZyB0aGVzZSBlbGVtZW50cyB3aGVuCiAgICAgIC8vIGFuYWx5emluZyBkZWZlcnJlZCBpbXBvcnRzLgogICAgICBxdWV1ZS5hZGRNZW1iZXIobWFpbiwgaW1wb3J0U2V0cy5tYWluU2V0KTsKCiAgICAgIC8vIEFsc28gYWRkICJnbG9iYWwiIGRlcGVuZGVuY2llcyB0byB0aGUgbWFpbiBvdXRwdXQgdW5pdC4gIFRoZXNlIGFyZQogICAgICAvLyB0aGluZ3MgdGhhdCB0aGUgYmFja2VuZCBuZWVkcyBidXQgY2Fubm90IGFzc29jaWF0ZSB3aXRoIGEgcGFydGljdWxhcgogICAgICAvLyBlbGVtZW50LiBUaGlzIHNldCBhbHNvIGNvbnRhaW5zIGVsZW1lbnRzIGZvciB3aGljaCB3ZSBsYWNrIHByZWNpc2UKICAgICAgLy8gaW5mb3JtYXRpb24uCiAgICAgIGZvciAoTWVtYmVyRW50aXR5IGVsZW1lbnQKICAgICAgICAgIGluIGNsb3NlZFdvcmxkLmJhY2tlbmRVc2FnZS5nbG9iYWxGdW5jdGlvbkRlcGVuZGVuY2llcykgewogICAgICAgIHF1ZXVlLmFkZE1lbWJlcihlbGVtZW50LCBpbXBvcnRTZXRzLm1haW5TZXQpOwogICAgICB9CiAgICAgIGZvciAoQ2xhc3NFbnRpdHkgZWxlbWVudAogICAgICAgICAgaW4gY2xvc2VkV29ybGQuYmFja2VuZFVzYWdlLmdsb2JhbENsYXNzRGVwZW5kZW5jaWVzKSB7CiAgICAgICAgcXVldWUuYWRkQ2xhc3MoZWxlbWVudCwgaW1wb3J0U2V0cy5tYWluU2V0KTsKICAgICAgfQoKICAgICAgdm9pZCBlbXB0eVF1ZXVlKCkgewogICAgICAgIHdoaWxlIChxdWV1ZS5pc05vdEVtcHR5KSB7CiAgICAgICAgICBXb3JrSXRlbSBpdGVtID0gcXVldWUubmV4dEl0ZW0oKTsKICAgICAgICAgIGl0ZW0udXBkYXRlKHRoaXMsIGNsb3NlZFdvcmxkLCBxdWV1ZSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBlbXB0eVF1ZXVlKCk7CiAgICB9CgogICAgcmVwb3J0ZXIud2l0aEN1cnJlbnRFbGVtZW50KG1haW4ubGlicmFyeSwgKCkgPT4gbWVhc3VyZSh3b3JrKSk7CgogICAgLy8gTm90aWZ5IHRoYXQgd2Ugbm8gbG9uZ2VyIG5lZWQgaW1wYWN0cyBmb3IgZGVmZXJyZWQgbG9hZCwgc28gdGhleSBjYW4gYmUKICAgIC8vIGRpc2NhcmRlZCBhdCB0aGlzIHRpbWUuCiAgICBjb21waWxlci5pbXBhY3RTdHJhdGVneS5vbkltcGFjdFVzZWQoRGVmZXJyZWRMb2FkVGFzay5JTVBBQ1RfVVNFKTsKICAgIHJldHVybiBfYnVpbGRSZXN1bHQoKTsKICB9CgogIE91dHB1dFVuaXREYXRhIF9idWlsZFJlc3VsdCgpIHsKICAgIF9jcmVhdGVPdXRwdXRVbml0cygpOwogICAgTWFwPFN0cmluZywgTGlzdDxPdXRwdXRVbml0Pj4gaHVua3NUb0xvYWQgPSBfc2V0dXBIdW5rc1RvTG9hZCgpOwogICAgTWFwPENsYXNzRW50aXR5LCBPdXRwdXRVbml0PiBjbGFzc01hcCA9IDxDbGFzc0VudGl0eSwgT3V0cHV0VW5pdD57fTsKICAgIE1hcDxNZW1iZXJFbnRpdHksIE91dHB1dFVuaXQ+IG1lbWJlck1hcCA9IDxNZW1iZXJFbnRpdHksIE91dHB1dFVuaXQ+e307CiAgICBNYXA8TG9jYWwsIE91dHB1dFVuaXQ+IGxvY2FsRnVuY3Rpb25NYXAgPSA8TG9jYWwsIE91dHB1dFVuaXQ+e307CiAgICBNYXA8Q29uc3RhbnRWYWx1ZSwgT3V0cHV0VW5pdD4gY29uc3RhbnRNYXAgPSA8Q29uc3RhbnRWYWx1ZSwgT3V0cHV0VW5pdD57fTsKICAgIF9jbGFzc1RvU2V0LmZvckVhY2goKGNscywgcykgPT4gY2xhc3NNYXBbY2xzXSA9IHMudW5pdCk7CiAgICBfbWVtYmVyVG9TZXQuZm9yRWFjaCgobWVtYmVyLCBzKSA9PiBtZW1iZXJNYXBbbWVtYmVyXSA9IHMudW5pdCk7CiAgICBfbG9jYWxGdW5jdGlvblRvU2V0LmZvckVhY2goCiAgICAgICAgKGxvY2FsRnVuY3Rpb24sIHMpID0+IGxvY2FsRnVuY3Rpb25NYXBbbG9jYWxGdW5jdGlvbl0gPSBzLnVuaXQpOwogICAgX2NvbnN0YW50VG9TZXQuZm9yRWFjaCgoY29uc3RhbnQsIHMpID0+IGNvbnN0YW50TWFwW2NvbnN0YW50XSA9IHMudW5pdCk7CgogICAgX2NsYXNzVG9TZXQgPSBudWxsOwogICAgX21lbWJlclRvU2V0ID0gbnVsbDsKICAgIF9sb2NhbEZ1bmN0aW9uVG9TZXQgPSBudWxsOwogICAgX2NvbnN0YW50VG9TZXQgPSBudWxsOwogICAgY2xlYW51cCgpOwogICAgcmV0dXJuIG5ldyBPdXRwdXRVbml0RGF0YSgKICAgICAgICB0aGlzLmlzUHJvZ3JhbVNwbGl0ICYmICFkaXNhYmxlUHJvZ3JhbVNwbGl0LAogICAgICAgIHRoaXMuX21haW5PdXRwdXRVbml0LAogICAgICAgIGNsYXNzTWFwLAogICAgICAgIG1lbWJlck1hcCwKICAgICAgICBsb2NhbEZ1bmN0aW9uTWFwLAogICAgICAgIGNvbnN0YW50TWFwLAogICAgICAgIF9hbGxPdXRwdXRVbml0cywKICAgICAgICBfaW1wb3J0RGVmZXJOYW1lLAogICAgICAgIGh1bmtzVG9Mb2FkLAogICAgICAgIF9kZWZlcnJlZEltcG9ydERlc2NyaXB0aW9ucyk7CiAgfQoKICAvLy8gRnJlZXMgdXAgc3RyYXRlZ3ktc3BlY2lmaWMgdGVtcG9yYXJ5IGRhdGEuCiAgdm9pZCBjbGVhbnVwKCkge30KCiAgdm9pZCBiZWZvcmVSZXNvbHV0aW9uKFVyaSByb290TGlicmFyeVVyaSwgSXRlcmFibGU8VXJpPiBsaWJyYXJpZXMpIHsKICAgIG1lYXN1cmVTdWJ0YXNrKCdwcmVwYXJlJywgKCkgewogICAgICBmb3IgKFVyaSB1cmkgaW4gbGlicmFyaWVzKSB7CiAgICAgICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5ID0gZWxlbWVudEVudmlyb25tZW50Lmxvb2t1cExpYnJhcnkodXJpKTsKICAgICAgICByZXBvcnRlci53aXRoQ3VycmVudEVsZW1lbnQobGlicmFyeSwgKCkgewogICAgICAgICAgY2hlY2tGb3JEZWZlcnJlZEVycm9yQ2FzZXMobGlicmFyeSk7CiAgICAgICAgICBmb3IgKEltcG9ydEVudGl0eSBpbXBvcnQgaW4gZWxlbWVudEVudmlyb25tZW50LmdldEltcG9ydHMobGlicmFyeSkpIHsKICAgICAgICAgICAgaWYgKGltcG9ydC5pc0RlZmVycmVkKSB7CiAgICAgICAgICAgICAgX2RlZmVycmVkSW1wb3J0RGVzY3JpcHRpb25zW2ltcG9ydF0gPQogICAgICAgICAgICAgICAgICBuZXcgSW1wb3J0RGVzY3JpcHRpb24oaW1wb3J0LCBsaWJyYXJ5LCByb290TGlicmFyeVVyaSk7CiAgICAgICAgICAgICAgaXNQcm9ncmFtU3BsaXQgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgLy8vIERldGVjdHMgZXJyb3JzIGxpa2UgZHVwbGljYXRlIHVzZXMgb2YgYSBwcmVmaXggb3IgdXNpbmcgdGhlIG9sZCBkZWZlcnJlZAogIC8vLyBsb2FkaW5nIHN5bnRheC4KICAvLy8KICAvLy8gVGhlc2UgY2hlY2tzIGFyZSBhbHJlYWR5IGRvbmUgYnkgdGhlIHNoYXJlZCBmcm9udC1lbmQsIHNvIHRoZXkgY2FuIGJlCiAgLy8vIHNraXBwZWQgYnkgdGhlIG5ldyBjb21waWxlciBwaXBlbGluZS4KICB2b2lkIGNoZWNrRm9yRGVmZXJyZWRFcnJvckNhc2VzKExpYnJhcnlFbnRpdHkgbGlicmFyeSk7CgogIGJvb2wgaWdub3JlRW50aXR5SW5EdW1wKEVudGl0eSBlbGVtZW50KSA9PiBmYWxzZTsKCiAgLy8vIENyZWF0ZXMgYSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvdXRwdXQgdW5pdCBjb250ZW50LgogIFN0cmluZyBkdW1wKCkgewogICAgTWFwPE91dHB1dFVuaXQsIExpc3Q8U3RyaW5nPj4gZWxlbWVudE1hcCA9IDxPdXRwdXRVbml0LCBMaXN0PFN0cmluZz4+e307CiAgICBNYXA8T3V0cHV0VW5pdCwgTGlzdDxTdHJpbmc+PiBjb25zdGFudE1hcCA9IDxPdXRwdXRVbml0LCBMaXN0PFN0cmluZz4+e307CiAgICBfY2xhc3NUb1NldC5mb3JFYWNoKChDbGFzc0VudGl0eSBlbGVtZW50LCBJbXBvcnRTZXQgaW1wb3J0U2V0KSB7CiAgICAgIGlmIChpZ25vcmVFbnRpdHlJbkR1bXAoZWxlbWVudCkpIHJldHVybjsKICAgICAgdmFyIGVsZW1lbnRzID0gZWxlbWVudE1hcC5wdXRJZkFic2VudChpbXBvcnRTZXQudW5pdCwgKCkgPT4gPFN0cmluZz5bXSk7CiAgICAgIHZhciBpZCA9IGVsZW1lbnQubmFtZSA/PyAnJGVsZW1lbnQnOwogICAgICBpZCA9ICckaWQgY2xzJzsKICAgICAgZWxlbWVudHMuYWRkKGlkKTsKICAgIH0pOwogICAgX21lbWJlclRvU2V0LmZvckVhY2goKE1lbWJlckVudGl0eSBlbGVtZW50LCBJbXBvcnRTZXQgaW1wb3J0U2V0KSB7CiAgICAgIGlmIChpZ25vcmVFbnRpdHlJbkR1bXAoZWxlbWVudCkpIHJldHVybjsKICAgICAgdmFyIGVsZW1lbnRzID0gZWxlbWVudE1hcC5wdXRJZkFic2VudChpbXBvcnRTZXQudW5pdCwgKCkgPT4gPFN0cmluZz5bXSk7CiAgICAgIHZhciBpZCA9IGVsZW1lbnQubmFtZSA/PyAnJGVsZW1lbnQnOwogICAgICB2YXIgY2xzID0gZWxlbWVudC5lbmNsb3NpbmdDbGFzcz8ubmFtZTsKICAgICAgaWYgKGNscyAhPSBudWxsKSBpZCA9ICckY2xzLiRpZCc7CiAgICAgIGlmIChlbGVtZW50LmlzU2V0dGVyKSBpZCA9ICckaWQ9JzsKICAgICAgaWQgPSAnJGlkIG1lbWJlcic7CiAgICAgIGVsZW1lbnRzLmFkZChpZCk7CiAgICB9KTsKICAgIF9sb2NhbEZ1bmN0aW9uVG9TZXQuZm9yRWFjaCgoTG9jYWwgZWxlbWVudCwgSW1wb3J0U2V0IGltcG9ydFNldCkgewogICAgICBpZiAoaWdub3JlRW50aXR5SW5EdW1wKGVsZW1lbnQpKSByZXR1cm47CiAgICAgIHZhciBlbGVtZW50cyA9IGVsZW1lbnRNYXAucHV0SWZBYnNlbnQoaW1wb3J0U2V0LnVuaXQsICgpID0+IDxTdHJpbmc+W10pOwogICAgICB2YXIgaWQgPSBlbGVtZW50Lm5hbWUgPz8gJyRlbGVtZW50JzsKICAgICAgdmFyIGNvbnRleHQgPSAoZWxlbWVudCBhcyBkeW5hbWljKS5tZW1iZXJDb250ZXh0Lm5hbWU7CiAgICAgIGlkID0gZWxlbWVudC5uYW1lID09IG51bGwgfHwgZWxlbWVudC5uYW1lID09ICcnID8gJzxhbm9ueW1vdXM+JyA6IGlkOwogICAgICBpZCA9ICckY29udGV4dC4kaWQnOwogICAgICBpZCA9ICckaWQgbG9jYWwnOwogICAgICBlbGVtZW50cy5hZGQoaWQpOwogICAgfSk7CiAgICBfY29uc3RhbnRUb1NldC5mb3JFYWNoKChDb25zdGFudFZhbHVlIHZhbHVlLCBJbXBvcnRTZXQgaW1wb3J0U2V0KSB7CiAgICAgIC8vIFNraXAgcHJpbWl0aXZlIHZhbHVlczogdGhleSBhcmUgbm90IHN0b3JlZCBpbiB0aGUgY29uc3RhbnQgdGFibGVzIGFuZAogICAgICAvLyBpZiB0aGV5IGFyZSBzaGFyZWQsIHRoZXkgZW5kIHVwIGR1cGxpY2F0ZWQgYW55d2F5cyBhY3Jvc3Mgb3V0cHV0IHVuaXRzLgogICAgICBpZiAodmFsdWUuaXNQcmltaXRpdmUpIHJldHVybjsKICAgICAgY29uc3RhbnRNYXAKICAgICAgICAgIC5wdXRJZkFic2VudChpbXBvcnRTZXQudW5pdCwgKCkgPT4gPFN0cmluZz5bXSkKICAgICAgICAgIC5hZGQodmFsdWUudG9TdHJ1Y3R1cmVkVGV4dCgpKTsKICAgIH0pOwoKICAgIE1hcDxPdXRwdXRVbml0LCBTdHJpbmc+IHRleHQgPSB7fTsKICAgIGZvciAoT3V0cHV0VW5pdCBvdXRwdXRVbml0IGluIF9hbGxPdXRwdXRVbml0cykgewogICAgICBTdHJpbmdCdWZmZXIgdW5pdFRleHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgIGlmIChvdXRwdXRVbml0LmlzTWFpbk91dHB1dCkgewogICAgICAgIHVuaXRUZXh0LndyaXRlKCcgPE1BSU4gVU5JVD4nKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB1bml0VGV4dC53cml0ZSgnIGltcG9ydHM6Jyk7CiAgICAgICAgdmFyIGltcG9ydHMgPSBvdXRwdXRVbml0Ll9pbXBvcnRzCiAgICAgICAgICAgIC5tYXAoKGkpID0+ICcke2kuZW5jbG9zaW5nTGlicmFyeVVyaS5yZXNvbHZlVXJpKGkudXJpKX0nKQogICAgICAgICAgICAudG9MaXN0KCk7CiAgICAgICAgZm9yICh2YXIgaSBpbiBpbXBvcnRzLi5zb3J0KCkpIHsKICAgICAgICAgIHVuaXRUZXh0LndyaXRlKCdcbiAgICRpOicpOwogICAgICAgIH0KICAgICAgfQogICAgICBMaXN0PFN0cmluZz4gZWxlbWVudHMgPSBlbGVtZW50TWFwW291dHB1dFVuaXRdOwogICAgICBpZiAoZWxlbWVudHMgIT0gbnVsbCkgewogICAgICAgIHVuaXRUZXh0LndyaXRlKCdcbiBlbGVtZW50czonKTsKICAgICAgICBmb3IgKFN0cmluZyBlbGVtZW50IGluIGVsZW1lbnRzLi5zb3J0KCkpIHsKICAgICAgICAgIHVuaXRUZXh0LndyaXRlKCdcbiAgJGVsZW1lbnQnKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgTGlzdDxTdHJpbmc+IGNvbnN0YW50cyA9IGNvbnN0YW50TWFwW291dHB1dFVuaXRdOwogICAgICBpZiAoY29uc3RhbnRzICE9IG51bGwpIHsKICAgICAgICB1bml0VGV4dC53cml0ZSgnXG4gY29uc3RhbnRzOicpOwogICAgICAgIGZvciAoU3RyaW5nIHZhbHVlIGluIGNvbnN0YW50cy4uc29ydCgpKSB7CiAgICAgICAgICB1bml0VGV4dC53cml0ZSgnXG4gICR2YWx1ZScpOwogICAgICAgIH0KICAgICAgfQogICAgICB0ZXh0W291dHB1dFVuaXRdID0gJyR1bml0VGV4dCc7CiAgICB9CgogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgZm9yIChPdXRwdXRVbml0IG91dHB1dFVuaXQgaW4gX2FsbE91dHB1dFVuaXRzLnRvTGlzdCgpCiAgICAgIC4uc29ydCgoYSwgYikgPT4gdGV4dFthXS5jb21wYXJlVG8odGV4dFtiXSkpKSB7CiAgICAgIHNiLndyaXRlKCdcblxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJyk7CiAgICAgIHNiLndyaXRlKCdPdXRwdXQgdW5pdDogJHtvdXRwdXRVbml0Lm5hbWV9Jyk7CiAgICAgIHNiLndyaXRlKCdcbiAke3RleHRbb3V0cHV0VW5pdF19Jyk7CiAgICB9CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCmNsYXNzIEltcG9ydERlc2NyaXB0aW9uIHsKICAvLy8gUmVsYXRpdmUgdXJpIHRvIHRoZSBpbXBvcnRpbmcgbGlicmFyeS4KICBmaW5hbCBTdHJpbmcgaW1wb3J0aW5nVXJpOwoKICAvLy8gVGhlIHByZWZpeCB0aGlzIGltcG9ydCBpcyBpbXBvcnRlZCBhcy4KICBmaW5hbCBTdHJpbmcgcHJlZml4OwoKICBmaW5hbCBMaWJyYXJ5RW50aXR5IF9pbXBvcnRpbmdMaWJyYXJ5OwoKICBJbXBvcnREZXNjcmlwdGlvbi5pbnRlcm5hbCgKICAgICAgdGhpcy5pbXBvcnRpbmdVcmksIHRoaXMucHJlZml4LCB0aGlzLl9pbXBvcnRpbmdMaWJyYXJ5KTsKCiAgSW1wb3J0RGVzY3JpcHRpb24oCiAgICAgIEltcG9ydEVudGl0eSBpbXBvcnQsIExpYnJhcnlFbnRpdHkgaW1wb3J0aW5nTGlicmFyeSwgVXJpIG1haW5MaWJyYXJ5VXJpKQogICAgICA6IHRoaXMuaW50ZXJuYWwoCiAgICAgICAgICAgIGZlLnJlbGF0aXZpemVVcmkoCiAgICAgICAgICAgICAgICBtYWluTGlicmFyeVVyaSwgaW1wb3J0aW5nTGlicmFyeS5jYW5vbmljYWxVcmksIGZhbHNlKSwKICAgICAgICAgICAgaW1wb3J0Lm5hbWUsCiAgICAgICAgICAgIGltcG9ydGluZ0xpYnJhcnkpOwp9CgovLy8gSW5kaXJlY3RseSByZXByZXNlbnRzIGEgZGVmZXJyZWQgaW1wb3J0IGluIGFuIFtJbXBvcnRTZXRdLgovLy8KLy8vIFdlIGNvdWxkIGRpcmVjdGx5IHN0b3JlIHRoZSBbZGVjbGFyYXRpb25dIGluIFtJbXBvcnRTZXRdLCBidXQgYWRkaW5nIHRoaXMKLy8vIGNsYXNzIG1ha2VzIHNvbWUgb2YgdGhlIGltcG9ydCBzZXQgb3BlcmF0aW9ucyBtb3JlIGVmZmljaWVudC4KY2xhc3MgX0RlZmVycmVkSW1wb3J0IHsKICBmaW5hbCBJbXBvcnRFbnRpdHkgZGVjbGFyYXRpb247CgogIC8vLyBDYW5vbmljYWwgaW5kZXggYXNzb2NpYXRlZCB3aXRoIFtkZWNsYXJhdGlvbl0uIFRoaXMgaXMgdXNlZCB0byBlZmZpY2llbnRseQogIC8vLyBpbXBsZW1lbnQgW0ltcG9ydFNldExhdHRpY2UudW5pb25dLgogIGZpbmFsIGludCBpbmRleDsKCiAgX0RlZmVycmVkSW1wb3J0KHRoaXMuZGVjbGFyYXRpb24sIHRoaXMuaW5kZXgpOwp9CgovLy8gQSBjb21wYWN0IGxhdHRpY2UgcmVwcmVzZW50YXRpb24gb2YgaW1wb3J0IHNldHMgYW5kIHN1YnNldHMuCi8vLwovLy8gV2UgdXNlIGEgZ3JhcGggb2Ygbm9kZXMgdG8gcmVwcmVzZW50IGVsZW1lbnRzIG9mIHRoZSBsYXR0aWNlLCBidXQgb25seQovLy8gY3JlYXRlIG5ldyBub2RlcyBvbi1kZW1hbmQgYXMgdGhleSBhcmUgbmVlZGVkIGJ5IHRoZSBkZWZlcnJlZCBsb2FkaW5nCi8vLyBhbGdvcml0aG0uCi8vLwovLy8gVGhlIGNvbnN0cnVjdGlvbnMgb2Ygbm9kZXMgaXMgY2FyZWZ1bGx5IGRvbmUgYnkgc3RvcmluZyBpbXBvcnRzIGluIGEKLy8vIHNwZWNpZmljIG9yZGVyLiBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBoYXZlIGEgdW5pcXVlIGFuZCBjYW5vbmljYWwKLy8vIHJlcHJlc2VudGF0aW9uIGZvciBlYWNoIHN1YnNldC4KY2xhc3MgSW1wb3J0U2V0TGF0dGljZSB7CiAgLy8vIEluZGV4IG9mIGRlZmVycmVkIGltcG9ydHMgdGhhdCBkZWZpbmVzIHRoZSBjYW5vbmljYWwgb3JkZXIgdXNlZCBieSB0aGUKICAvLy8gb3BlcmF0aW9ucyBiZWxvdy4KICBNYXA8SW1wb3J0RW50aXR5LCBfRGVmZXJyZWRJbXBvcnQ+IF9pbXBvcnRJbmRleCA9IHt9OwoKICAvLy8gVGhlIGNhbm9uaWNhbCBpbnN0YW5jZSByZXByZXNlbnRpbmcgdGhlIGVtcHR5IGltcG9ydCBzZXQuCiAgSW1wb3J0U2V0IF9lbXB0eVNldCA9IG5ldyBJbXBvcnRTZXQoKTsKCiAgLy8vIFRoZSBpbXBvcnQgc2V0IHJlcHJlc2VudGluZyB0aGUgbWFpbiBvdXRwdXQgdW5pdCwgd2hpY2ggaGFwcGVucyB0byBiZQogIC8vLyBpbXBsZW1lbnRlZCBhcyBhbiBlbXB0eSBzZXQgaW4gb3VyIGFsZ29yaXRobS4KICBJbXBvcnRTZXQgZ2V0IG1haW5TZXQgPT4gX2VtcHR5U2V0OwoKICAvLy8gR2V0IHRoZSBzaW5nbGV0b24gaW1wb3J0IHNldCB0aGF0IG9ubHkgY29udGFpbnMgW2ltcG9ydF0uCiAgSW1wb3J0U2V0IHNpbmdsZXRvbihJbXBvcnRFbnRpdHkgaW1wb3J0KSB7CiAgICAvLyBFbnN1cmUgd2UgaGF2ZSBpbXBvcnQgaW4gdGhlIGluZGV4LgogICAgcmV0dXJuIF9lbXB0eVNldC5fYWRkKF93cmFwKGltcG9ydCkpOwogIH0KCiAgLy8vIEdldCB0aGUgaW1wb3J0IHNldCB0aGF0IGluY2x1ZGVzIHRoZSB1bmlvbiBvZiBbYV0gYW5kIFtiXS4KICBJbXBvcnRTZXQgdW5pb24oSW1wb3J0U2V0IGEsIEltcG9ydFNldCBiKSB7CiAgICBpZiAoYSA9PSBudWxsIHx8IGEgPT0gX2VtcHR5U2V0KSByZXR1cm4gYjsKICAgIGlmIChiID09IG51bGwgfHwgYiA9PSBfZW1wdHlTZXQpIHJldHVybiBhOwoKICAgIC8vIFdlIGNyZWF0ZSB0aGUgdW5pb24gYnkgbWVyZ2luZyB0aGUgaW1wb3J0cyBpbiBjYW5vbmljYWwgb3JkZXIgZmlyc3QsIGFuZAogICAgLy8gdGhlbiBnZXR0aW5nIChvciBjcmVhdGluZykgdGhlIGNhbm9uaWNhbCBzZXRzIGJ5IGFkZGluZyBhbiBpbXBvcnQgYXQgYQogICAgLy8gdGltZS4KICAgIExpc3Q8X0RlZmVycmVkSW1wb3J0PiBhSW1wb3J0cyA9IGEuX2ltcG9ydHM7CiAgICBMaXN0PF9EZWZlcnJlZEltcG9ydD4gYkltcG9ydHMgPSBiLl9pbXBvcnRzOwogICAgaW50IGkgPSAwLCBqID0gMCwgbGFzdEFJbmRleCA9IDAsIGxhc3RCSW5kZXggPSAwOwogICAgdmFyIHJlc3VsdCA9IF9lbXB0eVNldDsKICAgIHdoaWxlIChpIDwgYUltcG9ydHMubGVuZ3RoICYmIGogPCBiSW1wb3J0cy5sZW5ndGgpIHsKICAgICAgdmFyIGltcG9ydEEgPSBhSW1wb3J0c1tpXTsKICAgICAgdmFyIGltcG9ydEIgPSBiSW1wb3J0c1tqXTsKICAgICAgYXNzZXJ0KGxhc3RBSW5kZXggPD0gaW1wb3J0QS5pbmRleCk7CiAgICAgIGFzc2VydChsYXN0QkluZGV4IDw9IGltcG9ydEIuaW5kZXgpOwogICAgICBpZiAoaW1wb3J0QS5pbmRleCA8IGltcG9ydEIuaW5kZXgpIHsKICAgICAgICByZXN1bHQgPSByZXN1bHQuX2FkZChpbXBvcnRBKTsKICAgICAgICBpKys7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzdWx0ID0gcmVzdWx0Ll9hZGQoaW1wb3J0Qik7CiAgICAgICAgaisrOwogICAgICB9CiAgICB9CiAgICBmb3IgKDsgaSA8IGFJbXBvcnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHJlc3VsdCA9IHJlc3VsdC5fYWRkKGFJbXBvcnRzW2ldKTsKICAgIH0KICAgIGZvciAoOyBqIDwgYkltcG9ydHMubGVuZ3RoOyBqKyspIHsKICAgICAgcmVzdWx0ID0gcmVzdWx0Ll9hZGQoYkltcG9ydHNbal0pOwogICAgfQoKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gR2V0IHRoZSBpbmRleCBmb3IgYW4gW2ltcG9ydF0gYWNjb3JkaW5nIHRvIHRoZSBjYW5vbmljYWwgb3JkZXIuCiAgX0RlZmVycmVkSW1wb3J0IF93cmFwKEltcG9ydEVudGl0eSBpbXBvcnQpIHsKICAgIHJldHVybiBfaW1wb3J0SW5kZXgucHV0SWZBYnNlbnQoCiAgICAgICAgaW1wb3J0LCAoKSA9PiBuZXcgX0RlZmVycmVkSW1wb3J0KGltcG9ydCwgX2ltcG9ydEluZGV4Lmxlbmd0aCkpOwogIH0KfQoKLy8vIEEgY2Fub25pY2FsIHNldCBvZiBkZWZlcnJlZCBpbXBvcnRzLgpjbGFzcyBJbXBvcnRTZXQgewogIC8vLyBJbXBvcnRzIHRoYXQgYXJlIHBhcnQgb2YgdGhpcyBzZXQuCiAgLy8vCiAgLy8vIEludmFyaWFudDogdGhlIG9yZGVyIGluIHdoaWNoIGVsZW1lbnRzIGFyZSBhZGRlZCBtdXN0IHJlc3BlY3QgdGhlCiAgLy8vIGNhbm9uaWNhbCBvcmRlciBvZiBhbGwgaW1wb3J0cyBpbiBbSW1wb3J0U2V0TGF0dGljZV0uCiAgZmluYWwgTGlzdDxfRGVmZXJyZWRJbXBvcnQ+IF9pbXBvcnRzOwoKICAvLy8gTGlua3MgdG8gb3RoZXIgaW1wb3J0IHNldHMgaW4gdGhlIGxhdHRpY2UgYnkgYWRkaW5nIG9uZSBpbXBvcnQuCiAgZmluYWwgTWFwPF9EZWZlcnJlZEltcG9ydCwgSW1wb3J0U2V0PiBfdHJhbnNpdGlvbnMgPQogICAgICA8X0RlZmVycmVkSW1wb3J0LCBJbXBvcnRTZXQ+e307CgogIEltcG9ydFNldChbdGhpcy5faW1wb3J0cyA9IGNvbnN0IDxfRGVmZXJyZWRJbXBvcnQ+W11dKTsKCiAgLy8vIFRoZSBvdXRwdXQgdW5pdCBjb3JyZXNwb25kaW5nIHRvIHRoaXMgc2V0IG9mIGltcG9ydHMsIGlmIGFueS4KICBPdXRwdXRVbml0IHVuaXQ7CgogIGludCBnZXQgbGVuZ3RoID0+IF9pbXBvcnRzLmxlbmd0aDsKCiAgLy8vIENyZWF0ZSBhbiBpbXBvcnQgc2V0IHRoYXQgYWRkcyBbaW1wb3J0XSB0byBhbGwgdGhlIGltcG9ydHMgb24gdGhpcyBzZXQuCiAgLy8vIFRoaXMgYXNzdW1lcyB0aGF0IGltcG9ydCdzIGNhbm9uaWNhbCBvcmRlciBjb21lcyBhZnRlciBhbGwgaW1wb3J0cyBpbgogIC8vLyB0aGlzIGN1cnJlbnQgc2V0LiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIFtJbXBvcnRTZXRMYXR0aWNlXSwKICAvLy8gc2luY2UgaXQgaXMgd2hlcmUgd2UgcHJlc2VydmUgdGhpcyBpbnZhcmlhbnQuCiAgSW1wb3J0U2V0IF9hZGQoX0RlZmVycmVkSW1wb3J0IGltcG9ydCkgewogICAgSW1wb3J0U2V0IHJlc3VsdCA9IF90cmFuc2l0aW9uc1tpbXBvcnRdOwogICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CiAgICAgIHJlc3VsdCA9IG5ldyBJbXBvcnRTZXQobmV3IExpc3QuZnJvbShfaW1wb3J0cykuLmFkZChpbXBvcnQpKTsKICAgICAgcmVzdWx0Ll90cmFuc2l0aW9uc1tpbXBvcnRdID0gcmVzdWx0OwogICAgICBfdHJhbnNpdGlvbnNbaW1wb3J0XSA9IHJlc3VsdDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnSW1wb3J0U2V0KHNpemU6ICRsZW5ndGgsICcpOwogICAgZm9yICh2YXIgaW1wb3J0IGluIF9pbXBvcnRzKSB7CiAgICAgIHNiLndyaXRlKCcke2ltcG9ydC5kZWNsYXJhdGlvbi5uYW1lfSAnKTsKICAgIH0KICAgIHNiLndyaXRlKCcpJyk7CiAgICByZXR1cm4gJyRzYic7CiAgfQp9CgovLy8gVGhlIGFsZ29yaXRobSB3b3JrIHF1ZXVlLgpjbGFzcyBXb3JrUXVldWUgewogIC8vLyBUaGUgYWN0dWFsIHF1ZXVlIG9mIHdvcmsgdGhhdCBuZWVkcyB0byBiZSBkb25lLgogIGZpbmFsIFF1ZXVlPFdvcmtJdGVtPiBxdWV1ZSA9IG5ldyBRdWV1ZTxXb3JrSXRlbT4oKTsKCiAgLy8vIEFuIGluZGV4IHRvIGZpbmQgd29yayBpdGVtcyBpbiB0aGUgcXVldWUgY29ycmVzcG9uZGluZyB0byBhIGNsYXNzLgogIGZpbmFsIE1hcDxDbGFzc0VudGl0eSwgV29ya0l0ZW0+IHBlbmRpbmdDbGFzc2VzID0gPENsYXNzRW50aXR5LCBXb3JrSXRlbT57fTsKCiAgLy8vIEFuIGluZGV4IHRvIGZpbmQgd29yayBpdGVtcyBpbiB0aGUgcXVldWUgY29ycmVzcG9uZGluZyB0byBhIG1lbWJlci4KICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBXb3JrSXRlbT4gcGVuZGluZ01lbWJlcnMgPSA8TWVtYmVyRW50aXR5LCBXb3JrSXRlbT57fTsKCiAgLy8vIEFuIGluZGV4IHRvIGZpbmQgd29yayBpdGVtcyBpbiB0aGUgcXVldWUgY29ycmVzcG9uZGluZyB0byBhIGNvbnN0YW50LgogIGZpbmFsIE1hcDxDb25zdGFudFZhbHVlLCBXb3JrSXRlbT4gcGVuZGluZ0NvbnN0YW50cyA9CiAgICAgIDxDb25zdGFudFZhbHVlLCBXb3JrSXRlbT57fTsKCiAgLy8vIExhdHRpY2UgdXNlZCB0byBjb21wdXRlIHVuaW9ucyBvZiBbSW1wb3J0U2V0XXMuCiAgZmluYWwgSW1wb3J0U2V0TGF0dGljZSBfaW1wb3J0U2V0czsKCiAgV29ya1F1ZXVlKHRoaXMuX2ltcG9ydFNldHMpOwoKICAvLy8gV2hldGhlciB0aGVyZSBhcmUgbm8gbW9yZSB3b3JrIGl0ZW1zIGluIHRoZSBxdWV1ZS4KICBib29sIGdldCBpc05vdEVtcHR5ID0+IHF1ZXVlLmlzTm90RW1wdHk7CgogIC8vLyBQb3AgdGhlIG5leHQgZWxlbWVudCBpbiB0aGUgcXVldWUuCiAgV29ya0l0ZW0gbmV4dEl0ZW0oKSB7CiAgICBhc3NlcnQoaXNOb3RFbXB0eSk7CiAgICByZXR1cm4gcXVldWUucmVtb3ZlRmlyc3QoKTsKICB9CgogIC8vLyBBZGQgdG8gdGhlIHF1ZXVlIHRoYXQgW2VsZW1lbnRdIHNob3VsZCBiZSB1cGRhdGVkIHRvIGluY2x1ZGUgYWxsIGltcG9ydHMKICAvLy8gaW4gW2ltcG9ydFNldF0uIElmIHRoZXJlIGlzIGFscmVhZHkgYSB3b3JrIGl0ZW0gaW4gdGhlIHF1ZXVlIGZvcgogIC8vLyBbZWxlbWVudF0sIHRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSB3b3JrIGl0ZW0gbm93IGluY2x1ZGVzIHRoZSB1bmlvbiBvZgogIC8vLyBbaW1wb3J0U2V0XSBhbmQgdGhlIGV4aXN0aW5nIHdvcmsgaXRlbSdzIGltcG9ydCBzZXQuCiAgdm9pZCBhZGRDbGFzcyhDbGFzc0VudGl0eSBlbGVtZW50LCBJbXBvcnRTZXQgaW1wb3J0U2V0KSB7CiAgICB2YXIgaXRlbSA9IHBlbmRpbmdDbGFzc2VzW2VsZW1lbnRdOwogICAgaWYgKGl0ZW0gPT0gbnVsbCkgewogICAgICBpdGVtID0gbmV3IENsYXNzV29ya0l0ZW0oZWxlbWVudCwgaW1wb3J0U2V0KTsKICAgICAgcGVuZGluZ0NsYXNzZXNbZWxlbWVudF0gPSBpdGVtOwogICAgICBxdWV1ZS5hZGQoaXRlbSk7CiAgICB9IGVsc2UgewogICAgICBpdGVtLmltcG9ydHNUb0FkZCA9IF9pbXBvcnRTZXRzLnVuaW9uKGl0ZW0uaW1wb3J0c1RvQWRkLCBpbXBvcnRTZXQpOwogICAgfQogIH0KCiAgLy8vIEFkZCB0byB0aGUgcXVldWUgdGhhdCBbZWxlbWVudF0gc2hvdWxkIGJlIHVwZGF0ZWQgdG8gaW5jbHVkZSBhbGwgaW1wb3J0cwogIC8vLyBpbiBbaW1wb3J0U2V0XS4gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHdvcmsgaXRlbSBpbiB0aGUgcXVldWUgZm9yCiAgLy8vIFtlbGVtZW50XSwgdGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhlIHdvcmsgaXRlbSBub3cgaW5jbHVkZXMgdGhlIHVuaW9uIG9mCiAgLy8vIFtpbXBvcnRTZXRdIGFuZCB0aGUgZXhpc3Rpbmcgd29yayBpdGVtJ3MgaW1wb3J0IHNldC4KICB2b2lkIGFkZE1lbWJlcihNZW1iZXJFbnRpdHkgZWxlbWVudCwgSW1wb3J0U2V0IGltcG9ydFNldCkgewogICAgdmFyIGl0ZW0gPSBwZW5kaW5nTWVtYmVyc1tlbGVtZW50XTsKICAgIGlmIChpdGVtID09IG51bGwpIHsKICAgICAgaXRlbSA9IG5ldyBNZW1iZXJXb3JrSXRlbShlbGVtZW50LCBpbXBvcnRTZXQpOwogICAgICBwZW5kaW5nTWVtYmVyc1tlbGVtZW50XSA9IGl0ZW07CiAgICAgIHF1ZXVlLmFkZChpdGVtKTsKICAgIH0gZWxzZSB7CiAgICAgIGl0ZW0uaW1wb3J0c1RvQWRkID0gX2ltcG9ydFNldHMudW5pb24oaXRlbS5pbXBvcnRzVG9BZGQsIGltcG9ydFNldCk7CiAgICB9CiAgfQoKICAvLy8gQWRkIHRvIHRoZSBxdWV1ZSB0aGF0IFtjb25zdGFudF0gc2hvdWxkIGJlIHVwZGF0ZWQgdG8gaW5jbHVkZSBhbGwgaW1wb3J0cwogIC8vLyBpbiBbaW1wb3J0U2V0XS4gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHdvcmsgaXRlbSBpbiB0aGUgcXVldWUgZm9yCiAgLy8vIFtjb25zdGFudF0sIHRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSB3b3JrIGl0ZW0gbm93IGluY2x1ZGVzIHRoZSB1bmlvbiBvZgogIC8vLyBbaW1wb3J0U2V0XSBhbmQgdGhlIGV4aXN0aW5nIHdvcmsgaXRlbSdzIGltcG9ydCBzZXQuCiAgdm9pZCBhZGRDb25zdGFudChDb25zdGFudFZhbHVlIGNvbnN0YW50LCBJbXBvcnRTZXQgaW1wb3J0U2V0KSB7CiAgICB2YXIgaXRlbSA9IHBlbmRpbmdDb25zdGFudHNbY29uc3RhbnRdOwogICAgaWYgKGl0ZW0gPT0gbnVsbCkgewogICAgICBpdGVtID0gbmV3IENvbnN0YW50V29ya0l0ZW0oY29uc3RhbnQsIGltcG9ydFNldCk7CiAgICAgIHBlbmRpbmdDb25zdGFudHNbY29uc3RhbnRdID0gaXRlbTsKICAgICAgcXVldWUuYWRkKGl0ZW0pOwogICAgfSBlbHNlIHsKICAgICAgaXRlbS5pbXBvcnRzVG9BZGQgPSBfaW1wb3J0U2V0cy51bmlvbihpdGVtLmltcG9ydHNUb0FkZCwgaW1wb3J0U2V0KTsKICAgIH0KICB9Cn0KCi8vLyBTdW1tYXJ5IG9mIHRoZSB3b3JrIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBvbiBhIGNsYXNzLCBtZW1iZXIsIG9yIGNvbnN0YW50LgphYnN0cmFjdCBjbGFzcyBXb3JrSXRlbSB7CiAgLy8vIEFkZGl0aW9uYWwgaW1wb3J0cyB0aGF0IHVzZSBbZWxlbWVudF0gb3IgW3ZhbHVlXSBhbmQgbmVlZCB0byBiZSBhZGRlZCBieQogIC8vLyB0aGUgYWxnb3JpdGhtLgogIC8vLwogIC8vLyBUaGlzIGlzIG5vbi1maW5hbCBpbiBjYXNlIHdlIGFkZCBtb3JlIGRlZmVycmVkIGltcG9ydHMgdG8gdGhlIHNldCBiZWZvcmUKICAvLy8gdGhlIHdvcmsgaXRlbSBpcyBhcHBsaWVkIChzZWUgW1dvcmtRdWV1ZS5hZGRFbGVtZW50XSBhbmQKICAvLy8gW1dvcmtRdWV1ZS5hZGRDb25zdGFudF0pLgogIEltcG9ydFNldCBpbXBvcnRzVG9BZGQ7CgogIFdvcmtJdGVtKHRoaXMuaW1wb3J0c1RvQWRkKTsKCiAgdm9pZCB1cGRhdGUoRGVmZXJyZWRMb2FkVGFzayB0YXNrLCBLQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsIFdvcmtRdWV1ZSBxdWV1ZSk7Cn0KCi8vLyBTdW1tYXJ5IG9mIHRoZSB3b3JrIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBvbiBhIGNsYXNzLgpjbGFzcyBDbGFzc1dvcmtJdGVtIGV4dGVuZHMgV29ya0l0ZW0gewogIC8vLyBDbGFzcyB0byBiZSByZWN1cnNpdmVseSB1cGRhdGVkLgogIGZpbmFsIENsYXNzRW50aXR5IGNsczsKCiAgQ2xhc3NXb3JrSXRlbSh0aGlzLmNscywgSW1wb3J0U2V0IG5ld1NldCkgOiBzdXBlcihuZXdTZXQpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHVwZGF0ZSgKICAgICAgRGVmZXJyZWRMb2FkVGFzayB0YXNrLCBLQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsIFdvcmtRdWV1ZSBxdWV1ZSkgewogICAgcXVldWUucGVuZGluZ0NsYXNzZXMucmVtb3ZlKGNscyk7CiAgICBJbXBvcnRTZXQgb2xkU2V0ID0gdGFzay5fY2xhc3NUb1NldFtjbHNdOwogICAgSW1wb3J0U2V0IG5ld1NldCA9IHRhc2suaW1wb3J0U2V0cy51bmlvbihvbGRTZXQsIGltcG9ydHNUb0FkZCk7CiAgICB0YXNrLl91cGRhdGVDbGFzc1JlY3Vyc2l2ZShjbG9zZWRXb3JsZCwgY2xzLCBvbGRTZXQsIG5ld1NldCwgcXVldWUpOwogIH0KfQoKLy8vIFN1bW1hcnkgb2YgdGhlIHdvcmsgdGhhdCBuZWVkcyB0byBiZSBkb25lIG9uIGEgbWVtYmVyLgpjbGFzcyBNZW1iZXJXb3JrSXRlbSBleHRlbmRzIFdvcmtJdGVtIHsKICAvLy8gTWVtYmVyIHRvIGJlIHJlY3Vyc2l2ZWx5IHVwZGF0ZWQuCiAgZmluYWwgTWVtYmVyRW50aXR5IG1lbWJlcjsKCiAgTWVtYmVyV29ya0l0ZW0odGhpcy5tZW1iZXIsIEltcG9ydFNldCBuZXdTZXQpIDogc3VwZXIobmV3U2V0KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB1cGRhdGUoCiAgICAgIERlZmVycmVkTG9hZFRhc2sgdGFzaywgS0Nsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLCBXb3JrUXVldWUgcXVldWUpIHsKICAgIHF1ZXVlLnBlbmRpbmdNZW1iZXJzLnJlbW92ZShtZW1iZXIpOwogICAgSW1wb3J0U2V0IG9sZFNldCA9IHRhc2suX21lbWJlclRvU2V0W21lbWJlcl07CiAgICBJbXBvcnRTZXQgbmV3U2V0ID0gdGFzay5pbXBvcnRTZXRzLnVuaW9uKG9sZFNldCwgaW1wb3J0c1RvQWRkKTsKICAgIHRhc2suX3VwZGF0ZU1lbWJlclJlY3Vyc2l2ZShjbG9zZWRXb3JsZCwgbWVtYmVyLCBvbGRTZXQsIG5ld1NldCwgcXVldWUpOwogIH0KfQoKLy8vIFN1bW1hcnkgb2YgdGhlIHdvcmsgdGhhdCBuZWVkcyB0byBiZSBkb25lIG9uIGEgY29uc3RhbnQuCmNsYXNzIENvbnN0YW50V29ya0l0ZW0gZXh0ZW5kcyBXb3JrSXRlbSB7CiAgLy8vIENvbnN0YW50IHRvIGJlIHJlY3Vyc2l2ZWx5IHVwZGF0ZWQuCiAgZmluYWwgQ29uc3RhbnRWYWx1ZSBjb25zdGFudDsKCiAgQ29uc3RhbnRXb3JrSXRlbSh0aGlzLmNvbnN0YW50LCBJbXBvcnRTZXQgbmV3U2V0KSA6IHN1cGVyKG5ld1NldCk7CgogIEBvdmVycmlkZQogIHZvaWQgdXBkYXRlKAogICAgICBEZWZlcnJlZExvYWRUYXNrIHRhc2ssIEtDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwgV29ya1F1ZXVlIHF1ZXVlKSB7CiAgICBxdWV1ZS5wZW5kaW5nQ29uc3RhbnRzLnJlbW92ZShjb25zdGFudCk7CiAgICBJbXBvcnRTZXQgb2xkU2V0ID0gdGFzay5fY29uc3RhbnRUb1NldFtjb25zdGFudF07CiAgICBJbXBvcnRTZXQgbmV3U2V0ID0gdGFzay5pbXBvcnRTZXRzLnVuaW9uKG9sZFNldCwgaW1wb3J0c1RvQWRkKTsKICAgIHRhc2suX3VwZGF0ZUNvbnN0YW50UmVjdXJzaXZlKGNsb3NlZFdvcmxkLCBjb25zdGFudCwgb2xkU2V0LCBuZXdTZXQsIHF1ZXVlKTsKICB9Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIHVwZGF0aW5nIGFuIFtPdXRwdXRVbml0RGF0YV0gb2JqZWN0IHdpdGggZGF0YSBmb3IgbGF0ZQovLy8gbWVtYmVycywgdGhhdCBpcywgbWVtYmVycyBjcmVhdGVkIG9uIGRlbWFuZCBkdXJpbmcgY29kZSBnZW5lcmF0aW9uLgpjbGFzcyBMYXRlT3V0cHV0VW5pdERhdGFCdWlsZGVyIHsKICBmaW5hbCBPdXRwdXRVbml0RGF0YSBfb3V0cHV0VW5pdERhdGE7CgogIExhdGVPdXRwdXRVbml0RGF0YUJ1aWxkZXIodGhpcy5fb3V0cHV0VW5pdERhdGEpOwoKICAvLy8gUmVnaXN0ZXJzIFtuZXdFbnRpdHldIHRvIGJlIGVtaXR0ZWQgaW4gdGhlIHNhbWUgb3V0cHV0IHVuaXQgYXMKICAvLy8gW2V4aXN0aW5nRW50aXR5XTsKICB2b2lkIHJlZ2lzdGVyQ29sb2NhdGVkTWVtYmVycygKICAgICAgTWVtYmVyRW50aXR5IGV4aXN0aW5nRW50aXR5LCBNZW1iZXJFbnRpdHkgbmV3RW50aXR5KSB7CiAgICBhc3NlcnQoX291dHB1dFVuaXREYXRhLl9tZW1iZXJUb1VuaXRbbmV3RW50aXR5XSA9PSBudWxsKTsKICAgIF9vdXRwdXRVbml0RGF0YS5fbWVtYmVyVG9Vbml0W25ld0VudGl0eV0gPQogICAgICAgIF9vdXRwdXRVbml0RGF0YS5vdXRwdXRVbml0Rm9yTWVtYmVyKGV4aXN0aW5nRW50aXR5KTsKICB9Cn0KCi8vLyBSZXN1bHRzIG9mIHRoZSBkZWZlcnJlZCBsb2FkaW5nIGFsZ29yaXRobS4KLy8vCi8vLyBQcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3V0cHV0IHVuaXQgYXNzb2NpYXRlZCB3aXRoIGVudGl0aWVzIGFuZAovLy8gY29uc3RhbnRzLCBhcyB3ZWxsIGFzIG90aGVyIGhlbHBlciBtZXRob2RzLgovLyBUT0RPKHNpZ211bmQpOiBjb25zaWRlciBtb3ZpbmcgaGVyZSBldmVyeSBwaWVjZSBvZiBkYXRhIHVzZWQgYXMgYSByZXN1bHQgb2YKLy8gZGVmZXJyZWQgbG9hZGluZyAoaW5jbHVkaW5nIGh1bmtzVG9Mb2FkLCBldGMpLgpjbGFzcyBPdXRwdXRVbml0RGF0YSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtPdXRwdXRVbml0RGF0YV0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdvdXRwdXQtdW5pdC1kYXRhJzsKCiAgZmluYWwgYm9vbCBpc1Byb2dyYW1TcGxpdDsKICBmaW5hbCBPdXRwdXRVbml0IG1haW5PdXRwdXRVbml0OwogIGZpbmFsIE1hcDxDbGFzc0VudGl0eSwgT3V0cHV0VW5pdD4gX2NsYXNzVG9Vbml0OwogIGZpbmFsIE1hcDxNZW1iZXJFbnRpdHksIE91dHB1dFVuaXQ+IF9tZW1iZXJUb1VuaXQ7CiAgZmluYWwgTWFwPExvY2FsLCBPdXRwdXRVbml0PiBfbG9jYWxGdW5jdGlvblRvVW5pdDsKICBmaW5hbCBNYXA8Q29uc3RhbnRWYWx1ZSwgT3V0cHV0VW5pdD4gX2NvbnN0YW50VG9Vbml0OwogIGZpbmFsIExpc3Q8T3V0cHV0VW5pdD4gb3V0cHV0VW5pdHM7CiAgZmluYWwgTWFwPEltcG9ydEVudGl0eSwgU3RyaW5nPiBfaW1wb3J0RGVmZXJOYW1lOwoKICAvLy8gQSBtYXBwaW5nIGZyb20gdGhlIG5hbWUgb2YgYSBkZWZlciBpbXBvcnQgdG8gYWxsIHRoZSBvdXRwdXQgdW5pdHMgaXQKICAvLy8gZGVwZW5kcyBvbiBpbiBhIGxpc3Qgb2YgbGlzdHMgdG8gYmUgbG9hZGVkIGluIHRoZSBvcmRlciB0aGV5IGFwcGVhci4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGUgeyJsaWIxIjogW1tsaWIxX2xpYjJfbGliM10sIFtsaWIxX2xpYjIsIGxpYjFfbGliM10sCiAgLy8vIFtsaWIxXV19IHdvdWxkIG1lYW4gdGhhdCBpbiBvcmRlciB0byBsb2FkICJsaWIxIiBmaXJzdCB0aGUgaHVuawogIC8vLyBsaWIxX2xpYjJfbGliMiBzaG91bGQgYmUgbG9hZGVkLCB0aGVuIHRoZSBodW5rcyBsaWIxX2xpYjIgYW5kIGxpYjFfbGliMwogIC8vLyBjYW4gYmUgbG9hZGVkIGluIHBhcmFsbGVsLiBBbmQgZmluYWxseSBsaWIxIGNhbiBiZSBsb2FkZWQuCiAgZmluYWwgTWFwPFN0cmluZywgTGlzdDxPdXRwdXRVbml0Pj4gaHVua3NUb0xvYWQ7CgogIC8vLyBCZWNhdXNlIHRoZSB0b2tlbi1zdHJlYW0gaXMgZm9yZ290dGVuIGxhdGVyIGluIHRoZSBwcm9ncmFtLCB3ZSBjYWNoZSBhCiAgLy8vIGRlc2NyaXB0aW9uIG9mIGVhY2ggZGVmZXJyZWQgaW1wb3J0LgogIGZpbmFsIE1hcDxJbXBvcnRFbnRpdHksIEltcG9ydERlc2NyaXB0aW9uPiBfZGVmZXJyZWRJbXBvcnREZXNjcmlwdGlvbnM7CgogIE91dHB1dFVuaXREYXRhKAogICAgICB0aGlzLmlzUHJvZ3JhbVNwbGl0LAogICAgICB0aGlzLm1haW5PdXRwdXRVbml0LAogICAgICB0aGlzLl9jbGFzc1RvVW5pdCwKICAgICAgdGhpcy5fbWVtYmVyVG9Vbml0LAogICAgICB0aGlzLl9sb2NhbEZ1bmN0aW9uVG9Vbml0LAogICAgICB0aGlzLl9jb25zdGFudFRvVW5pdCwKICAgICAgdGhpcy5vdXRwdXRVbml0cywKICAgICAgdGhpcy5faW1wb3J0RGVmZXJOYW1lLAogICAgICB0aGlzLmh1bmtzVG9Mb2FkLAogICAgICB0aGlzLl9kZWZlcnJlZEltcG9ydERlc2NyaXB0aW9ucyk7CgogIC8vIENyZWF0ZXMgSi13b3JsZCBkYXRhIGZyb20gdGhlIEstd29ybGQgZGF0YS4KICBmYWN0b3J5IE91dHB1dFVuaXREYXRhLmZyb20oCiAgICAgIE91dHB1dFVuaXREYXRhIG90aGVyLAogICAgICBMaWJyYXJ5RW50aXR5IGNvbnZlcnRMaWJyYXJ5KExpYnJhcnlFbnRpdHkgbGlicmFyeSksCiAgICAgIE1hcDxDbGFzc0VudGl0eSwgT3V0cHV0VW5pdD4gRnVuY3Rpb24oCiAgICAgICAgICAgICAgTWFwPENsYXNzRW50aXR5LCBPdXRwdXRVbml0PiwgTWFwPExvY2FsLCBPdXRwdXRVbml0PikKICAgICAgICAgIGNvbnZlcnRDbGFzc01hcCwKICAgICAgTWFwPE1lbWJlckVudGl0eSwgT3V0cHV0VW5pdD4gRnVuY3Rpb24oCiAgICAgICAgICAgICAgTWFwPE1lbWJlckVudGl0eSwgT3V0cHV0VW5pdD4sIE1hcDxMb2NhbCwgT3V0cHV0VW5pdD4pCiAgICAgICAgICBjb252ZXJ0TWVtYmVyTWFwLAogICAgICBNYXA8Q29uc3RhbnRWYWx1ZSwgT3V0cHV0VW5pdD4gRnVuY3Rpb24oTWFwPENvbnN0YW50VmFsdWUsIE91dHB1dFVuaXQ+KQogICAgICAgICAgY29udmVydENvbnN0YW50TWFwKSB7CiAgICBNYXA8Q2xhc3NFbnRpdHksIE91dHB1dFVuaXQ+IGNsYXNzVG9Vbml0ID0KICAgICAgICBjb252ZXJ0Q2xhc3NNYXAob3RoZXIuX2NsYXNzVG9Vbml0LCBvdGhlci5fbG9jYWxGdW5jdGlvblRvVW5pdCk7CiAgICBNYXA8TWVtYmVyRW50aXR5LCBPdXRwdXRVbml0PiBtZW1iZXJUb1VuaXQgPQogICAgICAgIGNvbnZlcnRNZW1iZXJNYXAob3RoZXIuX21lbWJlclRvVW5pdCwgb3RoZXIuX2xvY2FsRnVuY3Rpb25Ub1VuaXQpOwogICAgTWFwPENvbnN0YW50VmFsdWUsIE91dHB1dFVuaXQ+IGNvbnN0YW50VG9Vbml0ID0KICAgICAgICBjb252ZXJ0Q29uc3RhbnRNYXAob3RoZXIuX2NvbnN0YW50VG9Vbml0KTsKICAgIE1hcDxJbXBvcnRFbnRpdHksIEltcG9ydERlc2NyaXB0aW9uPiBkZWZlcnJlZEltcG9ydERlc2NyaXB0aW9ucyA9IHt9OwogICAgb3RoZXIuX2RlZmVycmVkSW1wb3J0RGVzY3JpcHRpb25zCiAgICAgICAgLmZvckVhY2goKEltcG9ydEVudGl0eSBpbXBvcnQsIEltcG9ydERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSB7CiAgICAgIGRlZmVycmVkSW1wb3J0RGVzY3JpcHRpb25zW2ltcG9ydF0gPSBuZXcgSW1wb3J0RGVzY3JpcHRpb24uaW50ZXJuYWwoCiAgICAgICAgICBkZXNjcmlwdGlvbi5pbXBvcnRpbmdVcmksCiAgICAgICAgICBkZXNjcmlwdGlvbi5wcmVmaXgsCiAgICAgICAgICBjb252ZXJ0TGlicmFyeShkZXNjcmlwdGlvbi5faW1wb3J0aW5nTGlicmFyeSkpOwogICAgfSk7CgogICAgcmV0dXJuIG5ldyBPdXRwdXRVbml0RGF0YSgKICAgICAgICBvdGhlci5pc1Byb2dyYW1TcGxpdCwKICAgICAgICBvdGhlci5tYWluT3V0cHV0VW5pdCwKICAgICAgICBjbGFzc1RvVW5pdCwKICAgICAgICBtZW1iZXJUb1VuaXQsCiAgICAgICAgLy8gTG9jYWwgZnVuY3Rpb25zIG9ubHkgbWFrZSBzZW5zZSBpbiB0aGUgSy13b3JsZCBtb2RlbC4KICAgICAgICBjb25zdCA8TG9jYWwsIE91dHB1dFVuaXQ+e30sCiAgICAgICAgY29uc3RhbnRUb1VuaXQsCiAgICAgICAgb3RoZXIub3V0cHV0VW5pdHMsCiAgICAgICAgb3RoZXIuX2ltcG9ydERlZmVyTmFtZSwKICAgICAgICBvdGhlci5odW5rc1RvTG9hZCwKICAgICAgICBkZWZlcnJlZEltcG9ydERlc2NyaXB0aW9ucyk7CiAgfQoKICAvLy8gRGVzZXJpYWxpemVzIGFuIFtPdXRwdXRVbml0RGF0YV0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBPdXRwdXRVbml0RGF0YS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgYm9vbCBpc1Byb2dyYW1TcGxpdCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgTGlzdDxPdXRwdXRVbml0PiBvdXRwdXRVbml0cyA9IHNvdXJjZS5yZWFkTGlzdCgoKSB7CiAgICAgIGJvb2wgaXNNYWluT3V0cHV0ID0gc291cmNlLnJlYWRCb29sKCk7CiAgICAgIFN0cmluZyBuYW1lID0gc291cmNlLnJlYWRTdHJpbmcoKTsKICAgICAgU2V0PEltcG9ydEVudGl0eT4gaW1wb3J0U2V0ID0gc291cmNlLnJlYWRJbXBvcnRzKCkudG9TZXQoKTsKICAgICAgcmV0dXJuIG5ldyBPdXRwdXRVbml0KGlzTWFpbk91dHB1dCwgbmFtZSwgaW1wb3J0U2V0KTsKICAgIH0pOwogICAgT3V0cHV0VW5pdCBtYWluT3V0cHV0VW5pdCA9IG91dHB1dFVuaXRzW3NvdXJjZS5yZWFkSW50KCldOwoKICAgIE1hcDxDbGFzc0VudGl0eSwgT3V0cHV0VW5pdD4gY2xhc3NUb1VuaXQgPSBzb3VyY2UucmVhZENsYXNzTWFwKCgpIHsKICAgICAgcmV0dXJuIG91dHB1dFVuaXRzW3NvdXJjZS5yZWFkSW50KCldOwogICAgfSk7CiAgICBNYXA8TWVtYmVyRW50aXR5LCBPdXRwdXRVbml0PiBtZW1iZXJUb1VuaXQgPQogICAgICAgIHNvdXJjZS5yZWFkTWVtYmVyTWFwKChNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgIHJldHVybiBvdXRwdXRVbml0c1tzb3VyY2UucmVhZEludCgpXTsKICAgIH0pOwogICAgTWFwPENvbnN0YW50VmFsdWUsIE91dHB1dFVuaXQ+IGNvbnN0YW50VG9Vbml0ID0gc291cmNlLnJlYWRDb25zdGFudE1hcCgoKSB7CiAgICAgIHJldHVybiBvdXRwdXRVbml0c1tzb3VyY2UucmVhZEludCgpXTsKICAgIH0pOwogICAgTWFwPEltcG9ydEVudGl0eSwgU3RyaW5nPiBpbXBvcnREZWZlck5hbWUgPQogICAgICAgIHNvdXJjZS5yZWFkSW1wb3J0TWFwKHNvdXJjZS5yZWFkU3RyaW5nKTsKICAgIE1hcDxTdHJpbmcsIExpc3Q8T3V0cHV0VW5pdD4+IGh1bmtzVG9Mb2FkID0gc291cmNlLnJlYWRTdHJpbmdNYXAoKCkgewogICAgICByZXR1cm4gc291cmNlLnJlYWRMaXN0KCgpIHsKICAgICAgICByZXR1cm4gb3V0cHV0VW5pdHNbc291cmNlLnJlYWRJbnQoKV07CiAgICAgIH0pOwogICAgfSk7CiAgICBNYXA8SW1wb3J0RW50aXR5LCBJbXBvcnREZXNjcmlwdGlvbj4gZGVmZXJyZWRJbXBvcnREZXNjcmlwdGlvbnMgPQogICAgICAgIHNvdXJjZS5yZWFkSW1wb3J0TWFwKCgpIHsKICAgICAgU3RyaW5nIGltcG9ydGluZ1VyaSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICAgIFN0cmluZyBwcmVmaXggPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgICBMaWJyYXJ5RW50aXR5IGltcG9ydGluZ0xpYnJhcnkgPSBzb3VyY2UucmVhZExpYnJhcnkoKTsKICAgICAgcmV0dXJuIG5ldyBJbXBvcnREZXNjcmlwdGlvbi5pbnRlcm5hbCgKICAgICAgICAgIGltcG9ydGluZ1VyaSwgcHJlZml4LCBpbXBvcnRpbmdMaWJyYXJ5KTsKICAgIH0pOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBPdXRwdXRVbml0RGF0YSgKICAgICAgICBpc1Byb2dyYW1TcGxpdCwKICAgICAgICBtYWluT3V0cHV0VW5pdCwKICAgICAgICBjbGFzc1RvVW5pdCwKICAgICAgICBtZW1iZXJUb1VuaXQsCiAgICAgICAgLy8gTG9jYWwgZnVuY3Rpb25zIG9ubHkgbWFrZSBzZW5zZSBpbiB0aGUgSy13b3JsZCBtb2RlbC4KICAgICAgICBjb25zdCA8TG9jYWwsIE91dHB1dFVuaXQ+e30sCiAgICAgICAgY29uc3RhbnRUb1VuaXQsCiAgICAgICAgb3V0cHV0VW5pdHMsCiAgICAgICAgaW1wb3J0RGVmZXJOYW1lLAogICAgICAgIGh1bmtzVG9Mb2FkLAogICAgICAgIGRlZmVycmVkSW1wb3J0RGVzY3JpcHRpb25zKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW091dHB1dFVuaXREYXRhXSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUJvb2woaXNQcm9ncmFtU3BsaXQpOwogICAgTWFwPE91dHB1dFVuaXQsIGludD4gb3V0cHV0VW5pdEluZGljZXMgPSB7fTsKICAgIHNpbmsud3JpdGVMaXN0KG91dHB1dFVuaXRzLCAoT3V0cHV0VW5pdCBvdXRwdXRVbml0KSB7CiAgICAgIG91dHB1dFVuaXRJbmRpY2VzW291dHB1dFVuaXRdID0gb3V0cHV0VW5pdEluZGljZXMubGVuZ3RoOwogICAgICBzaW5rLndyaXRlQm9vbChvdXRwdXRVbml0LmlzTWFpbk91dHB1dCk7CiAgICAgIHNpbmsud3JpdGVTdHJpbmcob3V0cHV0VW5pdC5uYW1lKTsKICAgICAgc2luay53cml0ZUltcG9ydHMob3V0cHV0VW5pdC5faW1wb3J0cyk7CiAgICB9KTsKICAgIHNpbmsud3JpdGVJbnQob3V0cHV0VW5pdEluZGljZXNbbWFpbk91dHB1dFVuaXRdKTsKICAgIHNpbmsud3JpdGVDbGFzc01hcChfY2xhc3NUb1VuaXQsIChPdXRwdXRVbml0IG91dHB1dFVuaXQpIHsKICAgICAgc2luay53cml0ZUludChvdXRwdXRVbml0SW5kaWNlc1tvdXRwdXRVbml0XSk7CiAgICB9KTsKICAgIHNpbmsud3JpdGVNZW1iZXJNYXAoX21lbWJlclRvVW5pdCwKICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlciwgT3V0cHV0VW5pdCBvdXRwdXRVbml0KSB7CiAgICAgIHNpbmsud3JpdGVJbnQob3V0cHV0VW5pdEluZGljZXNbb3V0cHV0VW5pdF0pOwogICAgfSk7CiAgICBzaW5rLndyaXRlQ29uc3RhbnRNYXAoX2NvbnN0YW50VG9Vbml0LCAoT3V0cHV0VW5pdCBvdXRwdXRVbml0KSB7CiAgICAgIHNpbmsud3JpdGVJbnQob3V0cHV0VW5pdEluZGljZXNbb3V0cHV0VW5pdF0pOwogICAgfSk7CiAgICBzaW5rLndyaXRlSW1wb3J0TWFwKF9pbXBvcnREZWZlck5hbWUsIHNpbmsud3JpdGVTdHJpbmcpOwogICAgc2luay53cml0ZVN0cmluZ01hcChodW5rc1RvTG9hZCwgKExpc3Q8T3V0cHV0VW5pdD4gb3V0cHV0VW5pdHMpIHsKICAgICAgc2luay53cml0ZUxpc3QoCiAgICAgICAgICBvdXRwdXRVbml0cywKICAgICAgICAgIChPdXRwdXRVbml0IG91dHB1dFVuaXQpID0+CiAgICAgICAgICAgICAgc2luay53cml0ZUludChvdXRwdXRVbml0SW5kaWNlc1tvdXRwdXRVbml0XSkpOwogICAgfSk7CiAgICBzaW5rLndyaXRlSW1wb3J0TWFwKF9kZWZlcnJlZEltcG9ydERlc2NyaXB0aW9ucywKICAgICAgICAoSW1wb3J0RGVzY3JpcHRpb24gaW1wb3J0RGVzY3JpcHRpb24pIHsKICAgICAgc2luay53cml0ZVN0cmluZyhpbXBvcnREZXNjcmlwdGlvbi5pbXBvcnRpbmdVcmkpOwogICAgICBzaW5rLndyaXRlU3RyaW5nKGltcG9ydERlc2NyaXB0aW9uLnByZWZpeCk7CiAgICAgIHNpbmsud3JpdGVMaWJyYXJ5KGltcG9ydERlc2NyaXB0aW9uLl9pbXBvcnRpbmdMaWJyYXJ5KTsKICAgIH0pOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBbT3V0cHV0VW5pdF0gd2hlcmUgW2Nsc10gYmVsb25ncy4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhlIG5lZWQgZm9yIFthbGxvd051bGxdLiBEdW1wLWluZm8gY3VycmVudGx5CiAgLy8gbmVlZHMgaXQuCiAgT3V0cHV0VW5pdCBvdXRwdXRVbml0Rm9yQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKCFpc1Byb2dyYW1TcGxpdCkgcmV0dXJuIG1haW5PdXRwdXRVbml0OwogICAgT3V0cHV0VW5pdCB1bml0ID0gX2NsYXNzVG9Vbml0W2Nsc107CiAgICBhc3NlcnQoYWxsb3dOdWxsIHx8IHVuaXQgIT0gbnVsbCwgJ05vIG91dHB1dCB1bml0IGZvciBjbGFzcyAkY2xzJyk7CiAgICByZXR1cm4gdW5pdCA/PyBtYWluT3V0cHV0VW5pdDsKICB9CgogIE91dHB1dFVuaXQgb3V0cHV0VW5pdEZvckNsYXNzRm9yVGVzdGluZyhDbGFzc0VudGl0eSBjbHMpID0+IF9jbGFzc1RvVW5pdFtjbHNdOwoKICAvLy8gUmV0dXJucyB0aGUgW091dHB1dFVuaXRdIHdoZXJlIFttZW1iZXJdIGJlbG9uZ3MuCiAgT3V0cHV0VW5pdCBvdXRwdXRVbml0Rm9yTWVtYmVyKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIGlmICghaXNQcm9ncmFtU3BsaXQpIHJldHVybiBtYWluT3V0cHV0VW5pdDsKICAgIE91dHB1dFVuaXQgdW5pdCA9IF9tZW1iZXJUb1VuaXRbbWVtYmVyXTsKICAgIGFzc2VydCh1bml0ICE9IG51bGwsICdObyBvdXRwdXQgdW5pdCBmb3IgbWVtYmVyICRtZW1iZXInKTsKICAgIHJldHVybiB1bml0ID8/IG1haW5PdXRwdXRVbml0OwogIH0KCiAgT3V0cHV0VW5pdCBvdXRwdXRVbml0Rm9yTWVtYmVyRm9yVGVzdGluZyhNZW1iZXJFbnRpdHkgbWVtYmVyKSA9PgogICAgICBfbWVtYmVyVG9Vbml0W21lbWJlcl07CgogIC8vLyBEaXJlY3QgYWNjZXNzIHRvIHRoZSBvdXRwdXQtdW5pdCB0byBjb25zdGFudHMgbWFwIHVzZWQgZm9yIHRlc3RpbmcuCiAgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gZ2V0IGNvbnN0YW50c0ZvclRlc3RpbmcgPT4gX2NvbnN0YW50VG9Vbml0LmtleXM7CgogIC8vLyBSZXR1cm5zIHRoZSBbT3V0cHV0VW5pdF0gd2hlcmUgW2NvbnN0YW50XSBiZWxvbmdzLgogIE91dHB1dFVuaXQgb3V0cHV0VW5pdEZvckNvbnN0YW50KENvbnN0YW50VmFsdWUgY29uc3RhbnQpIHsKICAgIGlmICghaXNQcm9ncmFtU3BsaXQpIHJldHVybiBtYWluT3V0cHV0VW5pdDsKICAgIHJldHVybiBfY29uc3RhbnRUb1VuaXRbY29uc3RhbnRdOwogIH0KCiAgT3V0cHV0VW5pdCBvdXRwdXRVbml0Rm9yQ29uc3RhbnRGb3JUZXN0aW5nKENvbnN0YW50VmFsdWUgY29uc3RhbnQpID0+CiAgICAgIF9jb25zdGFudFRvVW5pdFtjb25zdGFudF07CgogIC8vLyBJbmRpY2F0ZXMgd2hldGhlciBbZWxlbWVudF0gaXMgZGVmZXJyZWQuCiAgYm9vbCBpc0RlZmVycmVkQ2xhc3MoQ2xhc3NFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIG91dHB1dFVuaXRGb3JDbGFzcyhlbGVtZW50KSAhPSBtYWluT3V0cHV0VW5pdDsKICB9CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBlbGVtZW50IFt0b10gaXMgcmVhY2hhYmxlIGZyb20gZWxlbWVudCBbZnJvbV0gd2l0aG91dAogIC8vLyBjcm9zc2luZyBhIGRlZmVycmVkIGltcG9ydC4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGUsIGlmIHdlIGhhdmUgdHdvIGRlZmVycmVkIGxpYnJhcmllcyBgQWAgYW5kIGBCYCB0aGF0IGJvdGgKICAvLy8gaW1wb3J0IGEgbGlicmFyeSBgQ2AsIHRoZW4gZXZlbiB0aG91Z2ggZWxlbWVudHMgZnJvbSBgQWAgYW5kIGBDYCBlbmQgdXAgaW4KICAvLy8gZGlmZmVyZW50IG91dHB1dCB1bml0cywgdGhlcmUgaXMgYSBub24tZGVmZXJyZWQgcGF0aCBiZXR3ZWVuIGBBYCBhbmQgYENgLgogIGJvb2wgaGFzT25seU5vbkRlZmVycmVkSW1wb3J0UGF0aHMoTWVtYmVyRW50aXR5IGZyb20sIE1lbWJlckVudGl0eSB0bykgewogICAgT3V0cHV0VW5pdCBvdXRwdXRVbml0RnJvbSA9IG91dHB1dFVuaXRGb3JNZW1iZXIoZnJvbSk7CiAgICBPdXRwdXRVbml0IG91dHB1dFVuaXRUbyA9IG91dHB1dFVuaXRGb3JNZW1iZXIodG8pOwogICAgaWYgKG91dHB1dFVuaXRUbyA9PSBtYWluT3V0cHV0VW5pdCkgcmV0dXJuIHRydWU7CiAgICBpZiAob3V0cHV0VW5pdEZyb20gPT0gbWFpbk91dHB1dFVuaXQpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBvdXRwdXRVbml0VG8uX2ltcG9ydHMuY29udGFpbnNBbGwob3V0cHV0VW5pdEZyb20uX2ltcG9ydHMpOwogIH0KCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGNvbnN0YW50IFt0b10gaXMgcmVhY2hhYmxlIGZyb20gZWxlbWVudCBbZnJvbV0gd2l0aG91dAogIC8vLyBjcm9zc2luZyBhIGRlZmVycmVkIGltcG9ydC4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGUsIGlmIHdlIGhhdmUgdHdvIGRlZmVycmVkIGxpYnJhcmllcyBgQWAgYW5kIGBCYCB0aGF0IGJvdGgKICAvLy8gaW1wb3J0IGEgbGlicmFyeSBgQ2AsIHRoZW4gZXZlbiB0aG91Z2ggZWxlbWVudHMgZnJvbSBgQWAgYW5kIGBDYCBlbmQgdXAgaW4KICAvLy8gZGlmZmVyZW50IG91dHB1dCB1bml0cywgdGhlcmUgaXMgYSBub24tZGVmZXJyZWQgcGF0aCBiZXR3ZWVuIGBBYCBhbmQgYENgLgogIGJvb2wgaGFzT25seU5vbkRlZmVycmVkSW1wb3J0UGF0aHNUb0NvbnN0YW50KAogICAgICBNZW1iZXJFbnRpdHkgZnJvbSwgQ29uc3RhbnRWYWx1ZSB0bykgewogICAgT3V0cHV0VW5pdCBvdXRwdXRVbml0RnJvbSA9IG91dHB1dFVuaXRGb3JNZW1iZXIoZnJvbSk7CiAgICBPdXRwdXRVbml0IG91dHB1dFVuaXRUbyA9IG91dHB1dFVuaXRGb3JDb25zdGFudCh0byk7CiAgICBpZiAob3V0cHV0VW5pdFRvID09IG1haW5PdXRwdXRVbml0KSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdXRwdXRVbml0RnJvbSA9PSBtYWluT3V0cHV0VW5pdCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIG91dHB1dFVuaXRUby5faW1wb3J0cy5jb250YWluc0FsbChvdXRwdXRVbml0RnJvbS5faW1wb3J0cyk7CiAgfQoKICAvLy8gUmVnaXN0ZXJzIHRoYXQgYSBjb25zdGFudCBpcyB1c2VkIGluIHRoZSBzYW1lIGRlZmVycmVkIG91dHB1dCB1bml0IGFzCiAgLy8vIFtmaWVsZF0uCiAgdm9pZCByZWdpc3RlckNvbnN0YW50RGVmZXJyZWRVc2UoRGVmZXJyZWRHbG9iYWxDb25zdGFudFZhbHVlIGNvbnN0YW50KSB7CiAgICBpZiAoIWlzUHJvZ3JhbVNwbGl0KSByZXR1cm47CiAgICBPdXRwdXRVbml0IHVuaXQgPSBjb25zdGFudC51bml0OwogICAgYXNzZXJ0KAogICAgICAgIF9jb25zdGFudFRvVW5pdFtjb25zdGFudF0gPT0gbnVsbCB8fCBfY29uc3RhbnRUb1VuaXRbY29uc3RhbnRdID09IHVuaXQpOwogICAgX2NvbnN0YW50VG9Vbml0W2NvbnN0YW50XSA9IHVuaXQ7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgdW5pcXVlIG5hbWUgZm9yIHRoZSBnaXZlbiBkZWZlcnJlZCBbaW1wb3J0XS4KICBTdHJpbmcgZ2V0SW1wb3J0RGVmZXJOYW1lKFNwYW5uYWJsZSBub2RlLCBJbXBvcnRFbnRpdHkgaW1wb3J0KSB7CiAgICBTdHJpbmcgbmFtZSA9IF9pbXBvcnREZWZlck5hbWVbaW1wb3J0XTsKICAgIGlmIChuYW1lID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IFNwYW5uYWJsZUFzc2VydGlvbkZhaWx1cmUoCiAgICAgICAgICBub2RlLCAiTm8gZGVmZXJyZWQgbmFtZSBmb3IgJGltcG9ydC4iKTsKICAgIH0KICAgIHJldHVybiBuYW1lOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIG5hbWVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGRlZmVycmVkIGltcG9ydCBpbiBbdW5pdF0uCiAgSXRlcmFibGU8U3RyaW5nPiBnZXRJbXBvcnROYW1lcyhPdXRwdXRVbml0IHVuaXQpIHsKICAgIHJldHVybiB1bml0Ll9pbXBvcnRzLm1hcCgoaSkgPT4gX2ltcG9ydERlZmVyTmFtZVtpXSk7CiAgfQoKICAvLy8gUmV0dXJucyBhIGpzb24tc3R5bGUgbWFwIGZvciBkZXNjcmliaW5nIHdoYXQgZmlsZXMgdGhhdCBhcmUgbG9hZGVkIGJ5IGEKICAvLy8gZ2l2ZW4gZGVmZXJyZWQgaW1wb3J0LgogIC8vLyBUaGUgbWFwcGluZyBpcyBzdHJ1Y3R1cmVkIGFzOgogIC8vLyBsaWJyYXJ5IHVyaSAtPiB7Im5hbWUiOiBsaWJyYXJ5IG5hbWUsICJmaWxlcyI6IChwcmVmaXggLT4gbGlzdCBvZiBmaWxlcyl9CiAgLy8vIFdoZXJlCiAgLy8vCiAgLy8vIC0gPGxpYnJhcnkgdXJpPiBpcyB0aGUgcmVsYXRpdmUgdXJpIG9mIHRoZSBsaWJyYXJ5IG1ha2luZyBhIGRlZmVycmVkCiAgLy8vICAgaW1wb3J0LgogIC8vLyAtIDxsaWJyYXJ5IG5hbWU+IGlzIHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBvciAiPHVubmFtZWQ+IiBpZiBpdCBpcwogIC8vLyAgIHVubmFtZWQuCiAgLy8vIC0gPHByZWZpeD4gaXMgdGhlIGBhc2AgcHJlZml4IHVzZWQgZm9yIGEgZ2l2ZW4gZGVmZXJyZWQgaW1wb3J0LgogIC8vLyAtIDxsaXN0IG9mIGZpbGVzPiBpcyBhIGxpc3Qgb2YgdGhlIGZpbGVuYW1lcyB0aGUgbXVzdCBiZSBsb2FkZWQgd2hlbiB0aGF0CiAgLy8vICAgaW1wb3J0IGlzIGxvYWRlZC4KICBNYXA8U3RyaW5nLCBNYXA8U3RyaW5nLCBkeW5hbWljPj4gY29tcHV0ZURlZmVycmVkTWFwKAogICAgICBDb21waWxlck9wdGlvbnMgb3B0aW9ucywgRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAge1NldDxPdXRwdXRVbml0PiBvbWl0dGVkVW5pdHN9KSB7CiAgICBvbWl0dGVkVW5pdHMgPz89IFNldCgpOwogICAgTWFwPFN0cmluZywgTWFwPFN0cmluZywgZHluYW1pYz4+IG1hcHBpbmcgPSB7fTsKCiAgICBfZGVmZXJyZWRJbXBvcnREZXNjcmlwdGlvbnMua2V5cy5mb3JFYWNoKChJbXBvcnRFbnRpdHkgaW1wb3J0KSB7CiAgICAgIExpc3Q8T3V0cHV0VW5pdD4gb3V0cHV0VW5pdHMgPSBodW5rc1RvTG9hZFtfaW1wb3J0RGVmZXJOYW1lW2ltcG9ydF1dOwogICAgICBJbXBvcnREZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IF9kZWZlcnJlZEltcG9ydERlc2NyaXB0aW9uc1tpbXBvcnRdOwogICAgICBTdHJpbmcgZ2V0TmFtZShMaWJyYXJ5RW50aXR5IGxpYnJhcnkpIHsKICAgICAgICB2YXIgbmFtZSA9IGVsZW1lbnRFbnZpcm9ubWVudC5nZXRMaWJyYXJ5TmFtZShsaWJyYXJ5KTsKICAgICAgICByZXR1cm4gbmFtZSA9PSAnJyA/ICc8dW5uYW1lZD4nIDogbmFtZTsKICAgICAgfQoKICAgICAgTWFwPFN0cmluZywgZHluYW1pYz4gbGlicmFyeU1hcCA9IG1hcHBpbmcucHV0SWZBYnNlbnQoCiAgICAgICAgICBkZXNjcmlwdGlvbi5pbXBvcnRpbmdVcmksCiAgICAgICAgICAoKSA9PiA8U3RyaW5nLCBkeW5hbWljPnsKICAgICAgICAgICAgICAgICJuYW1lIjogZ2V0TmFtZShkZXNjcmlwdGlvbi5faW1wb3J0aW5nTGlicmFyeSksCiAgICAgICAgICAgICAgICAiaW1wb3J0cyI6IDxTdHJpbmcsIExpc3Q8U3RyaW5nPj57fQogICAgICAgICAgICAgIH0pOwoKICAgICAgTGlzdDxTdHJpbmc+IHBhcnRGaWxlTmFtZXMgPSBvdXRwdXRVbml0cwogICAgICAgICAgLndoZXJlKChvdXRwdXRVbml0KSA9PiAhb21pdHRlZFVuaXRzLmNvbnRhaW5zKG91dHB1dFVuaXQpKQogICAgICAgICAgLm1hcCgob3V0cHV0VW5pdCkgPT4gZGVmZXJyZWRQYXJ0RmlsZU5hbWUob3B0aW9ucywgb3V0cHV0VW5pdC5uYW1lKSkKICAgICAgICAgIC50b0xpc3QoKTsKICAgICAgbGlicmFyeU1hcFsiaW1wb3J0cyJdW19pbXBvcnREZWZlck5hbWVbaW1wb3J0XV0gPSBwYXJ0RmlsZU5hbWVzOwogICAgfSk7CiAgICByZXR1cm4gbWFwcGluZzsKICB9Cn0KCi8vLyBSZXR1cm5zIHRoZSBmaWxlbmFtZSBmb3IgdGhlIG91dHB1dC11bml0IG5hbWVkIFtuYW1lXS4KLy8vCi8vLyBUaGUgZmlsZW5hbWUgaXMgb2YgdGhlIGZvcm0gIjxtYWluIG91dHB1dCBmaWxlPl88bmFtZT4ucGFydC5qcyIuCi8vLyBJZiBbYWRkRXh0ZW5zaW9uXSBpcyBmYWxzZSwgdGhlICIucGFydC5qcyIgc3VmZml4IGlzIGxlZnQgb3V0LgpTdHJpbmcgZGVmZXJyZWRQYXJ0RmlsZU5hbWUoQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMsIFN0cmluZyBuYW1lLAogICAge2Jvb2wgYWRkRXh0ZW5zaW9uOiB0cnVlfSkgewogIGFzc2VydChuYW1lICE9ICIiKTsKICBTdHJpbmcgb3V0UGF0aCA9IG9wdGlvbnMub3V0cHV0VXJpICE9IG51bGwgPyBvcHRpb25zLm91dHB1dFVyaS5wYXRoIDogIm91dCI7CiAgU3RyaW5nIG91dE5hbWUgPSBvdXRQYXRoLnN1YnN0cmluZyhvdXRQYXRoLmxhc3RJbmRleE9mKCcvJykgKyAxKTsKICBTdHJpbmcgZXh0ZW5zaW9uID0gYWRkRXh0ZW5zaW9uID8gIi5wYXJ0LmpzIiA6ICIiOwogIHJldHVybiAiJHtvdXROYW1lfV8kbmFtZSRleHRlbnNpb24iOwp9CgpjbGFzcyBEZXBlbmRlbmNpZXMgewogIGZpbmFsIE1hcDxDbGFzc0VudGl0eSwgRGVwZW5kZW5jeUluZm8+IGNsYXNzZXMgPSB7fTsKICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBEZXBlbmRlbmN5SW5mbz4gbWVtYmVycyA9IHt9OwogIGZpbmFsIFNldDxMb2NhbD4gbG9jYWxGdW5jdGlvbnMgPSBuZXcgU2V0PExvY2FsPigpOwogIGZpbmFsIE1hcDxDb25zdGFudFZhbHVlLCBEZXBlbmRlbmN5SW5mbz4gY29uc3RhbnRzID0ge307CgogIHZvaWQgYWRkQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzLCBbSW1wb3J0RW50aXR5IGltcG9ydF0pIHsKICAgIChjbGFzc2VzW2Nsc10gPz89IG5ldyBEZXBlbmRlbmN5SW5mbygpKS5yZWdpc3RlckltcG9ydChpbXBvcnQpOwogIH0KCiAgdm9pZCBhZGRNZW1iZXIoTWVtYmVyRW50aXR5IG0sIFtJbXBvcnRFbnRpdHkgaW1wb3J0XSkgewogICAgKG1lbWJlcnNbbV0gPz89IG5ldyBEZXBlbmRlbmN5SW5mbygpKS5yZWdpc3RlckltcG9ydChpbXBvcnQpOwogIH0KCiAgdm9pZCBhZGRDb25zdGFudChDb25zdGFudFZhbHVlIGMsIFtJbXBvcnRFbnRpdHkgaW1wb3J0XSkgewogICAgKGNvbnN0YW50c1tjXSA/Pz0gbmV3IERlcGVuZGVuY3lJbmZvKCkpLnJlZ2lzdGVySW1wb3J0KGltcG9ydCk7CiAgfQp9CgpjbGFzcyBEZXBlbmRlbmN5SW5mbyB7CiAgYm9vbCBpc0RlZmVycmVkID0gdHJ1ZTsKICBMaXN0PEltcG9ydEVudGl0eT4gaW1wb3J0czsKCiAgcmVnaXN0ZXJJbXBvcnQoSW1wb3J0RW50aXR5IGltcG9ydCkgewogICAgaWYgKCFpc0RlZmVycmVkKSByZXR1cm47CiAgICAvLyBBIG51bGwgaW1wb3J0IHJlcHJlc2VudHMgYSBkaXJlY3Qgbm9uLWRlZmVycmVkIGRlcGVuZGVuY3kuCiAgICBpZiAoaW1wb3J0ICE9IG51bGwpIHsKICAgICAgKGltcG9ydHMgPz89IFtdKS5hZGQoaW1wb3J0KTsKICAgIH0gZWxzZSB7CiAgICAgIGltcG9ydHMgPSBudWxsOwogICAgICBpc0RlZmVycmVkID0gZmFsc2U7CiAgICB9CiAgfQp9CgpjbGFzcyBUeXBlRGVwZW5kZW5jeVZpc2l0b3IgaW1wbGVtZW50cyBEYXJ0VHlwZVZpc2l0b3I8dm9pZCwgTnVsbD4gewogIGZpbmFsIERlcGVuZGVuY2llcyBfZGVwZW5kZW5jaWVzOwogIGZpbmFsIEltcG9ydEVudGl0eSBfaW1wb3J0OwogIGZpbmFsIENvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKCiAgVHlwZURlcGVuZGVuY3lWaXNpdG9yKHRoaXMuX2RlcGVuZGVuY2llcywgdGhpcy5faW1wb3J0LCB0aGlzLl9jb21tb25FbGVtZW50cyk7CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXQoRGFydFR5cGUgdHlwZSwgW19dKSB7CiAgICB0eXBlLmFjY2VwdCh0aGlzLCBudWxsKTsKICB9CgogIHZvaWQgdmlzaXRMaXN0KExpc3Q8RGFydFR5cGU+IHR5cGVzKSB7CiAgICB0eXBlcy5mb3JFYWNoKHZpc2l0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGdXR1cmVPclR5cGUoRnV0dXJlT3JUeXBlIHR5cGUsIE51bGwgYXJndW1lbnQpIHsKICAgIF9kZXBlbmRlbmNpZXMuYWRkQ2xhc3MoX2NvbW1vbkVsZW1lbnRzLmZ1dHVyZUNsYXNzKTsKICAgIHZpc2l0KHR5cGUudHlwZUFyZ3VtZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREeW5hbWljVHlwZShEeW5hbWljVHlwZSB0eXBlLCBOdWxsIGFyZ3VtZW50KSB7CiAgICAvLyBOb3RoaW5nIHRvIGFkZC4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBbnlUeXBlKEFueVR5cGUgdHlwZSwgTnVsbCBhcmd1bWVudCkgewogICAgLy8gTm90aGluZyB0byBhZGQuCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZWRlZlR5cGUoVHlwZWRlZlR5cGUgdHlwZSwgTnVsbCBhcmd1bWVudCkgewogICAgdmlzaXRMaXN0KHR5cGUudHlwZUFyZ3VtZW50cyk7CiAgICB2aXNpdCh0eXBlLnVuYWxpYXNlZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50ZXJmYWNlVHlwZShJbnRlcmZhY2VUeXBlIHR5cGUsIE51bGwgYXJndW1lbnQpIHsKICAgIHZpc2l0TGlzdCh0eXBlLnR5cGVBcmd1bWVudHMpOwogICAgLy8gVE9ETyhzaWdtdW5kKTogd2hlbiB3ZSBhcmUgYWJsZSB0byBzcGxpdCBjbGFzc2VzIGZyb20gdHlwZXMgaW4gb3VyCiAgICAvLyBydW50aW1lLXR5cGUgcmVwcmVzZW50YXRpb24sIHRoaXMgc2hvdWxkIHRyYWNrIHR5cGUuZWxlbWVudCBhcyBhIHR5cGUKICAgIC8vIGRlcGVuZGVuY3kgaW5zdGVhZC4KICAgIF9kZXBlbmRlbmNpZXMuYWRkQ2xhc3ModHlwZS5lbGVtZW50LCBfaW1wb3J0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIHR5cGUsIE51bGwgYXJndW1lbnQpIHsKICAgIGZvciAoRnVuY3Rpb25UeXBlVmFyaWFibGUgdHlwZVZhcmlhYmxlIGluIHR5cGUudHlwZVZhcmlhYmxlcykgewogICAgICB2aXNpdCh0eXBlVmFyaWFibGUuYm91bmQpOwogICAgfQogICAgdmlzaXRMaXN0KHR5cGUucGFyYW1ldGVyVHlwZXMpOwogICAgdmlzaXRMaXN0KHR5cGUub3B0aW9uYWxQYXJhbWV0ZXJUeXBlcyk7CiAgICB2aXNpdExpc3QodHlwZS5uYW1l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cmllcyBhbmQKLy8vIHBhY2thZ2VzLgphYnN0cmFjdCBjbGFzcyBDb2RlTG9jYXRpb24gewogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbdXJpXSBpcyBpbiB0aGlzIGNvZGUgbG9jYXRpb24uCiAgYm9vbCBpblNhbWVMb2NhdGlvbihVcmkgdXJpKTsKCiAgLy8vIFJldHVybnMgdGhlIHVyaSBvZiB0aGlzIGxvY2F0aW9uIHJlbGF0aXZlIHRvIFtiYXNlVXJpXS4KICBTdHJpbmcgcmVsYXRpdml6ZShVcmkgYmFzZVVyaSk7CgogIGZhY3RvcnkgQ29kZUxvY2F0aW9uKFVyaSB1cmkpIHsKICAgIGlmICh1cmkuc2NoZW1lID09ICdwYWNrYWdlJykgewogICAgICBpbnQgc2xhc2hQb3MgPSB1cmkucGF0aC5pbmRleE9mKCcvJyk7CiAgICAgIGlmIChzbGFzaFBvcyAhPSAtMSkgewogICAgICAgIFN0cmluZyBwYWNrYWdlTmFtZSA9IHVyaS5wYXRoLnN1YnN0cmluZygwLCBzbGFzaFBvcyk7CiAgICAgICAgcmV0dXJuIG5ldyBQYWNrYWdlTG9jYXRpb24ocGFja2FnZU5hbWUpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBuZXcgVXJpTG9jYXRpb24odXJpKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBTY2hlbWVMb2NhdGlvbih1cmkpOwogICAgfQogIH0KfQoKLy8vIEEgY29kZSBsb2NhdGlvbiBkZWZpbmVkIGJ5IHRoZSBzY2hlbWUgb2YgdGhlIHVyaS4KLy8vCi8vLyBVc2VkIGZvciBub24tcGFja2FnZSB1cmlzLCBzdWNoIGFzICdkYXJ0JywgJ2ZpbGUnLCBhbmQgJ2h0dHAnLgpjbGFzcyBTY2hlbWVMb2NhdGlvbiBpbXBsZW1lbnRzIENvZGVMb2NhdGlvbiB7CiAgZmluYWwgVXJpIHVyaTsKCiAgU2NoZW1lTG9jYXRpb24odGhpcy51cmkpOwoKICBAb3ZlcnJpZGUKICBib29sIGluU2FtZUxvY2F0aW9uKFVyaSB1cmkpIHsKICAgIHJldHVybiB0aGlzLnVyaS5zY2hlbWUgPT0gdXJpLnNjaGVtZTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyByZWxhdGl2aXplKFVyaSBiYXNlVXJpKSB7CiAgICByZXR1cm4gZmUucmVsYXRpdml6ZVVyaShiYXNlVXJpLCB1cmksIGZhbHNlKTsKICB9Cn0KCi8vLyBBIGNvZGUgbG9jYXRpb24gZGVmaW5lZCBieSB0aGUgcGFja2FnZSBuYW1lLgovLy8KLy8vIFVzZWQgZm9yIHBhY2thZ2UgdXJpcywgc2VwYXJhdGVkIGJ5IHRoZWlyIGBwYWNrYWdlIG5hbWVzYCwgdGhhdCBpcywgdGhlCi8vLyAnZm9vJyBvZiAncGFja2FnZTpmb28vYmFyLmRhcnQnLgpjbGFzcyBQYWNrYWdlTG9jYXRpb24gaW1wbGVtZW50cyBDb2RlTG9jYXRpb24gewogIGZpbmFsIFN0cmluZyBwYWNrYWdlTmFtZTsKCiAgUGFja2FnZUxvY2F0aW9uKHRoaXMucGFja2FnZU5hbWUpOwoKICBAb3ZlcnJpZGUKICBib29sIGluU2FtZUxvY2F0aW9uKFVyaSB1cmkpIHsKICAgIHJldHVybiB1cmkuc2NoZW1lID09ICdwYWNrYWdlJyAmJiB1cmkucGF0aC5zdGFydHNXaXRoKCckcGFja2FnZU5hbWUvJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgcmVsYXRpdml6ZShVcmkgYmFzZVVyaSkgPT4gJ3BhY2thZ2U6JHBhY2thZ2VOYW1lJzsKfQoKLy8vIEEgY29kZSBsb2NhdGlvbiBkZWZpbmVkIGJ5IHRoZSB3aG9sZSB1cmkuCi8vLwovLy8gVXNlZCBmb3IgcGFja2FnZSB1cmlzIHdpdGggbm8gcGFja2FnZSBuYW1lLiBGb3IgaW5zdGFuY2UgJ3BhY2thZ2U6Zm9vLmRhcnQnLgpjbGFzcyBVcmlMb2NhdGlvbiBpbXBsZW1lbnRzIENvZGVMb2NhdGlvbiB7CiAgZmluYWwgVXJpIHVyaTsKCiAgVXJpTG9jYXRpb24odGhpcy51cmkpOwoKICBAb3ZlcnJpZGUKICBib29sIGluU2FtZUxvY2F0aW9uKFVyaSB1cmkpID0+IHRoaXMudXJpID09IHVyaTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHJlbGF0aXZpemUoVXJpIGJhc2VVcmkpIHsKICAgIHJldHVybiBmZS5yZWxhdGl2aXplVXJpKGJhc2VVcmksIHVyaSwgZmFsc2UpOwogIH0KfQoKLy8vIEEgY29kZSBsb2NhdGlvbiB0aGF0IGNvbnRhaW5zIGFueSB1cmkuCmNsYXNzIEFueUxvY2F0aW9uIGltcGxlbWVudHMgQ29kZUxvY2F0aW9uIHsKICBjb25zdCBBbnlMb2NhdGlvbigpOwoKICBAb3ZlcnJpZGUKICBib29sIGluU2FtZUxvY2F0aW9uKFVyaSB1cmkpID0+IHRydWU7CgogIEBvdmVycmlkZQogIFN0cmluZyByZWxhdGl2aXplKFVyaSBiYXNlVXJpKSA9PiAnJGJhc2VVcmknOwp9CmQATk48ASsBQAE4BEgOHjggAT4iASIjLBw+MQ8lCA0mBgQCATYEQy8RARwBDCEqBAEMIzIEAgExBEwlMBwBJQEMIUwEAQw8AgEuBFEsEQEZAQwzAQwjMgQCASssFwEMKAEMMAIBM3BhY2thZ2U6Y29tcGlsZXIvc3JjL2RpYWdub3N0aWNzL2NvZGVfbG9jYXRpb24uZGFydCxzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9kdW1wX2luZm8uZGFydMAAYM4vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkdW1wX2luZm87CgppbXBvcnQgJ2RhcnQ6Y29udmVydCcKICAgIHNob3cgQ2h1bmtlZENvbnZlcnNpb25TaW5rLCBKc29uRW5jb2RlciwgU3RyaW5nQ29udmVyc2lvblNpbms7CgppbXBvcnQgJ3BhY2thZ2U6ZGFydDJqc19pbmZvL2luZm8uZGFydCc7CmltcG9ydCAncGFja2FnZTpkYXJ0MmpzX2luZm8vanNvbl9pbmZvX2NvZGVjLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6ZGFydDJqc19pbmZvL2JpbmFyeV9zZXJpYWxpemF0aW9uLmRhcnQnIGFzIGR1bXBfaW5mbzsKCmltcG9ydCAnLi4vY29tcGlsZXJfbmV3LmRhcnQnOwppbXBvcnQgJ2JhY2tlbmRfc3RyYXRlZ3kuZGFydCc7CmltcG9ydCAnY29tbW9uL25hbWVzLmRhcnQnOwppbXBvcnQgJ2NvbW1vbi90YXNrcy5kYXJ0JyBzaG93IENvbXBpbGVyVGFzazsKaW1wb3J0ICdjb21tb24uZGFydCc7CmltcG9ydCAnY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgSkVsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICdjb21waWxlci5kYXJ0JyBzaG93IENvbXBpbGVyOwppbXBvcnQgJ2NvbnN0YW50cy92YWx1ZXMuZGFydCcgc2hvdyBDb25zdGFudFZhbHVlLCBJbnRlcmNlcHRvckNvbnN0YW50VmFsdWU7CmltcG9ydCAnZGVmZXJyZWRfbG9hZC5kYXJ0JyBzaG93IE91dHB1dFVuaXQsIGRlZmVycmVkUGFydEZpbGVOYW1lOwppbXBvcnQgJ2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJ2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICdpbmZlcnJlci90eXBlcy5kYXJ0JwogICAgc2hvdyBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0LCBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0czsKaW1wb3J0ICdqcy9qcy5kYXJ0JyBhcyBqc0FzdDsKaW1wb3J0ICdqc19iYWNrZW5kL2ZpZWxkX2FuYWx5c2lzLmRhcnQnOwppbXBvcnQgJ3VuaXZlcnNlL2NvZGVnZW5fd29ybGRfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICd1bml2ZXJzZS93b3JsZF9pbXBhY3QuZGFydCcKICAgIHNob3cgSW1wYWN0VXNlQ2FzZSwgV29ybGRJbXBhY3QsIFdvcmxkSW1wYWN0VmlzaXRvckltcGw7CmltcG9ydCAndXRpbC9zaW5rX2FkYXB0ZXIuZGFydCc7CmltcG9ydCAnd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CgpjbGFzcyBFbGVtZW50SW5mb0NvbGxlY3RvciB7CiAgZmluYWwgQ29tcGlsZXIgY29tcGlsZXI7CiAgZmluYWwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkOwogIGZpbmFsIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIF9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzOwogIGZpbmFsIER1bXBJbmZvVGFzayBkdW1wSW5mb1Rhc2s7CgogIEpFbGVtZW50RW52aXJvbm1lbnQgZ2V0IGVudmlyb25tZW50ID0+IGNsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudDsKICBDb2RlZ2VuV29ybGRCdWlsZGVyIGdldCBjb2RlZ2VuV29ybGRCdWlsZGVyID0+IGNvbXBpbGVyLmNvZGVnZW5Xb3JsZEJ1aWxkZXI7CgogIGZpbmFsIEFsbEluZm8gcmVzdWx0ID0gbmV3IEFsbEluZm8oKTsKICBmaW5hbCBNYXA8RW50aXR5LCBJbmZvPiBfZW50aXR5VG9JbmZvID0gPEVudGl0eSwgSW5mbz57fTsKICBmaW5hbCBNYXA8Q29uc3RhbnRWYWx1ZSwgSW5mbz4gX2NvbnN0YW50VG9JbmZvID0gPENvbnN0YW50VmFsdWUsIEluZm8+e307CiAgZmluYWwgTWFwPE91dHB1dFVuaXQsIE91dHB1dFVuaXRJbmZvPiBfb3V0cHV0VG9JbmZvID0ge307CgogIEVsZW1lbnRJbmZvQ29sbGVjdG9yKHRoaXMuY29tcGlsZXIsIHRoaXMuZHVtcEluZm9UYXNrLCB0aGlzLmNsb3NlZFdvcmxkLAogICAgICB0aGlzLl9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzKTsKCiAgdm9pZCBydW4oKSB7CiAgICBkdW1wSW5mb1Rhc2suX2NvbnN0YW50VG9Ob2RlLmZvckVhY2goKGNvbnN0YW50LCBub2RlKSB7CiAgICAgIC8vIFRPRE8oc2lnbXVuZCk6IGFkZCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgY29uc3RhbnRzCiAgICAgIHZhciBzcGFuID0gZHVtcEluZm9UYXNrLl9ub2RlRGF0YVtub2RlXTsKICAgICAgdmFyIGluZm8gPSBuZXcgQ29uc3RhbnRJbmZvKAogICAgICAgICAgc2l6ZTogc3Bhbi5lbmQgLSBzcGFuLnN0YXJ0LAogICAgICAgICAgY29kZTogW3NwYW5dLAogICAgICAgICAgb3V0cHV0VW5pdDogX3VuaXRJbmZvRm9yQ29uc3RhbnQoY29uc3RhbnQpKTsKICAgICAgX2NvbnN0YW50VG9JbmZvW2NvbnN0YW50XSA9IGluZm87CiAgICAgIHJlc3VsdC5jb25zdGFudHMuYWRkKGluZm8pOwogICAgfSk7CiAgICBlbnZpcm9ubWVudC5saWJyYXJpZXMuZm9yRWFjaCh2aXNpdExpYnJhcnkpOwogIH0KCiAgLy8vIFdoZXRoZXIgdG8gZW1pdCBpbmZvcm1hdGlvbiBhYm91dCBbZW50aXR5XS4KICAvLy8KICAvLy8gQnkgZGVmYXVsdCB3ZSBlbWl0IGluZm9ybWF0aW9uIGZvciBhbnkgZW50aXR5IHRoYXQgY29udHJpYnV0ZXMgdG8gdGhlCiAgLy8vIG91dHB1dCBzaXplLiBFaXRoZXIgYmVjYXVzZSBpdCBpcyBhIGZ1bmN0aW9uIGJlaW5nIGVtaXR0ZWQgb3IgaW5saW5lZCwKICAvLy8gb3IgYmVjYXVzZSBpdCBpcyBhbiBlbnRpdHkgdGhhdCBob2xkcyBkZXBlbmRlbmNpZXMgdG8gb3RoZXIgZW50aXRpZXMuCiAgYm9vbCBzaG91bGRLZWVwKEVudGl0eSBlbnRpdHkpIHsKICAgIHJldHVybiBkdW1wSW5mb1Rhc2suaW1wYWN0cy5jb250YWluc0tleShlbnRpdHkpIHx8CiAgICAgICAgZHVtcEluZm9UYXNrLmlubGluZUNvdW50LmNvbnRhaW5zS2V5KGVudGl0eSk7CiAgfQoKICBMaWJyYXJ5SW5mbyB2aXNpdExpYnJhcnkoTGlicmFyeUVudGl0eSBsaWIpIHsKICAgIFN0cmluZyBsaWJuYW1lID0gZW52aXJvbm1lbnQuZ2V0TGlicmFyeU5hbWUobGliKTsKICAgIGlmIChsaWJuYW1lLmlzRW1wdHkpIHsKICAgICAgbGlibmFtZSA9ICc8dW5uYW1lZD4nOwogICAgfQogICAgaW50IHNpemUgPSBkdW1wSW5mb1Rhc2suc2l6ZU9mKGxpYik7CiAgICBMaWJyYXJ5SW5mbyBpbmZvID0gbmV3IExpYnJhcnlJbmZvKGxpYm5hbWUsIGxpYi5jYW5vbmljYWxVcmksIG51bGwsIHNpemUpOwogICAgX2VudGl0eVRvSW5mb1tsaWJdID0gaW5mbzsKCiAgICBlbnZpcm9ubWVudC5mb3JFYWNoTGlicmFyeU1lbWJlcihsaWIsIChNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgIGlmIChtZW1iZXIuaXNGdW5jdGlvbiB8fCBtZW1iZXIuaXNHZXR0ZXIgfHwgbWVtYmVyLmlzU2V0dGVyKSB7CiAgICAgICAgRnVuY3Rpb25JbmZvIGZ1bmN0aW9uSW5mbyA9IHZpc2l0RnVuY3Rpb24obWVtYmVyKTsKICAgICAgICBpZiAoZnVuY3Rpb25JbmZvICE9IG51bGwpIHsKICAgICAgICAgIGluZm8udG9wTGV2ZWxGdW5jdGlvbnMuYWRkKGZ1bmN0aW9uSW5mbyk7CiAgICAgICAgICBmdW5jdGlvbkluZm8ucGFyZW50ID0gaW5mbzsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAobWVtYmVyLmlzRmllbGQpIHsKICAgICAgICBGaWVsZEluZm8gZmllbGRJbmZvID0gdmlzaXRGaWVsZChtZW1iZXIpOwogICAgICAgIGlmIChmaWVsZEluZm8gIT0gbnVsbCkgewogICAgICAgICAgaW5mby50b3BMZXZlbFZhcmlhYmxlcy5hZGQoZmllbGRJbmZvKTsKICAgICAgICAgIGZpZWxkSW5mby5wYXJlbnQgPSBpbmZvOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CgogICAgZW52aXJvbm1lbnQuZm9yRWFjaENsYXNzKGxpYiwgKENsYXNzRW50aXR5IGNsYXp6KSB7CiAgICAgIENsYXNzSW5mbyBjbGFzc0luZm8gPSB2aXNpdENsYXNzKGNsYXp6KTsKICAgICAgaWYgKGNsYXNzSW5mbyAhPSBudWxsKSB7CiAgICAgICAgaW5mby5jbGFzc2VzLmFkZChjbGFzc0luZm8pOwogICAgICAgIGNsYXNzSW5mby5wYXJlbnQgPSBpbmZvOwogICAgICB9CiAgICB9KTsKCiAgICBpZiAoaW5mby5pc0VtcHR5ICYmICFzaG91bGRLZWVwKGxpYikpIHJldHVybiBudWxsOwogICAgcmVzdWx0LmxpYnJhcmllcy5hZGQoaW5mbyk7CiAgICByZXR1cm4gaW5mbzsKICB9CgogIEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHQgX3Jlc3VsdE9mTWVtYmVyKE1lbWJlckVudGl0eSBlKSA9PgogICAgICBfZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cy5yZXN1bHRPZk1lbWJlcihlKTsKCiAgQWJzdHJhY3RWYWx1ZSBfcmVzdWx0T2ZQYXJhbWV0ZXIoTG9jYWwgZSkgPT4KICAgICAgX2dsb2JhbEluZmVyZW5jZVJlc3VsdHMucmVzdWx0T2ZQYXJhbWV0ZXIoZSk7CgogIEZpZWxkSW5mbyB2aXNpdEZpZWxkKEZpZWxkRW50aXR5IGZpZWxkLCB7Q2xhc3NFbnRpdHkgY29udGFpbmluZ0NsYXNzfSkgewogICAgQWJzdHJhY3RWYWx1ZSBpbmZlcnJlZFR5cGUgPSBfcmVzdWx0T2ZNZW1iZXIoZmllbGQpLnR5cGU7CiAgICAvLyBJZiBhIGZpZWxkIGhhcyBhbiBlbXB0eSBpbmZlcnJlZCB0eXBlIGl0IGlzIG5ldmVyIHVzZWQuCiAgICBpZiAoaW5mZXJyZWRUeXBlID09IG51bGwgfHwKICAgICAgICBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAgIC5pc0VtcHR5KGluZmVycmVkVHlwZSkKICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgaW50IHNpemUgPSBkdW1wSW5mb1Rhc2suc2l6ZU9mKGZpZWxkKTsKICAgIExpc3Q8Q29kZVNwYW4+IGNvZGUgPSBkdW1wSW5mb1Rhc2suY29kZU9mKGZpZWxkKTsKCiAgICAvLyBUT0RPKGhldCk6IFdoeSBkb2Vzbid0IGBzaXplYCBhY2NvdW50IGZvciB0aGUgY29kZSBzaXplIGFscmVhZHk/CiAgICBpZiAoY29kZSAhPSBudWxsKSBzaXplICs9IGNvZGUubGVuZ3RoOwoKICAgIEZpZWxkSW5mbyBpbmZvID0gbmV3IEZpZWxkSW5mbygKICAgICAgICBuYW1lOiBmaWVsZC5uYW1lLAogICAgICAgIHR5cGU6ICcke2Vudmlyb25tZW50LmdldEZpZWxkVHlwZShmaWVsZCl9JywKICAgICAgICBpbmZlcnJlZFR5cGU6ICckaW5mZXJyZWRUeXBlJywKICAgICAgICBjb2RlOiBjb2RlLAogICAgICAgIG91dHB1dFVuaXQ6IF91bml0SW5mb0Zvck1lbWJlcihmaWVsZCksCiAgICAgICAgaXNDb25zdDogZmllbGQuaXNDb25zdCk7CiAgICBfZW50aXR5VG9JbmZvW2ZpZWxkXSA9IGluZm87CiAgICBGaWVsZEFuYWx5c2lzRGF0YSBmaWVsZERhdGEgPSBjbG9zZWRXb3JsZC5maWVsZEFuYWx5c2lzLmdldEZpZWxkRGF0YShmaWVsZCk7CiAgICBpZiAoZmllbGREYXRhLmluaXRpYWxWYWx1ZSAhPSBudWxsKSB7CiAgICAgIGluZm8uaW5pdGlhbGl6ZXIgPSBfY29uc3RhbnRUb0luZm9bZmllbGREYXRhLmluaXRpYWxWYWx1ZV07CiAgICB9CgogICAgaWYgKGNvbXBpbGVyLm9wdGlvbnMuZXhwZXJpbWVudENhbGxJbnN0cnVtZW50YXRpb24pIHsKICAgICAgLy8gV2UgdXNlIGZpZWxkLmhhc2hDb2RlIGJlY2F1c2UgaXQgaXMgZ2xvYmFsbHkgdW5pcXVlIGFuZCBpdCBpcwogICAgICAvLyBhdmFpbGFibGUgd2hpbGUgd2UgYXJlIGRvaW5nIGNvZGVnZW4uCiAgICAgIGluZm8uY292ZXJhZ2VJZCA9ICcke2ZpZWxkLmhhc2hDb2RlfSc7CiAgICB9CgogICAgaW50IGNsb3N1cmVTaXplID0gX2FkZENsb3N1cmVJbmZvKGluZm8sIGZpZWxkKTsKICAgIGluZm8uc2l6ZSA9IHNpemUgKyBjbG9zdXJlU2l6ZTsKCiAgICByZXN1bHQuZmllbGRzLmFkZChpbmZvKTsKICAgIHJldHVybiBpbmZvOwogIH0KCiAgQ2xhc3NJbmZvIHZpc2l0Q2xhc3MoQ2xhc3NFbnRpdHkgY2xhenopIHsKICAgIC8vIE9taXQgY2xhc3MgaWYgaXQgaXMgbm90IG5lZWRlZC4KICAgIENsYXNzSW5mbyBjbGFzc0luZm8gPSBuZXcgQ2xhc3NJbmZvKAogICAgICAgIG5hbWU6IGNsYXp6Lm5hbWUsCiAgICAgICAgaXNBYnN0cmFjdDogY2xhenouaXNBYnN0cmFjdCwKICAgICAgICBvdXRwdXRVbml0OiBfdW5pdEluZm9Gb3JDbGFzcyhjbGF6eikpOwogICAgX2VudGl0eVRvSW5mb1tjbGF6el0gPSBjbGFzc0luZm87CgogICAgaW50IHNpemUgPSBkdW1wSW5mb1Rhc2suc2l6ZU9mKGNsYXp6KTsKICAgIGVudmlyb25tZW50LmZvckVhY2hMb2NhbENsYXNzTWVtYmVyKGNsYXp6LCAobWVtYmVyKSB7CiAgICAgIGlmIChtZW1iZXIuaXNGdW5jdGlvbiB8fCBtZW1iZXIuaXNHZXR0ZXIgfHwgbWVtYmVyLmlzU2V0dGVyKSB7CiAgICAgICAgRnVuY3Rpb25JbmZvIGZ1bmN0aW9uSW5mbyA9IHZpc2l0RnVuY3Rpb24obWVtYmVyKTsKICAgICAgICBpZiAoZnVuY3Rpb25JbmZvICE9IG51bGwpIHsKICAgICAgICAgIGNsYXNzSW5mby5mdW5jdGlvbnMuYWRkKGZ1bmN0aW9uSW5mbyk7CiAgICAgICAgICBmdW5jdGlvbkluZm8ucGFyZW50ID0gY2xhc3NJbmZvOwogICAgICAgICAgZm9yICh2YXIgY2xvc3VyZUluZm8gaW4gZnVuY3Rpb25JbmZvLmNsb3N1cmVzKSB7CiAgICAgICAgICAgIHNpemUgKz0gY2xvc3VyZUluZm8uc2l6ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAobWVtYmVyLmlzRmllbGQpIHsKICAgICAgICBGaWVsZEluZm8gZmllbGRJbmZvID0gdmlzaXRGaWVsZChtZW1iZXIsIGNvbnRhaW5pbmdDbGFzczogY2xhenopOwogICAgICAgIGlmIChmaWVsZEluZm8gIT0gbnVsbCkgewogICAgICAgICAgY2xhc3NJbmZvLmZpZWxkcy5hZGQoZmllbGRJbmZvKTsKICAgICAgICAgIGZpZWxkSW5mby5wYXJlbnQgPSBjbGFzc0luZm87CiAgICAgICAgICBmb3IgKHZhciBjbG9zdXJlSW5mbyBpbiBmaWVsZEluZm8uY2xvc3VyZXMpIHsKICAgICAgICAgICAgc2l6ZSArPSBjbG9zdXJlSW5mby5zaXplOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcignQ2xhc3MgbWVtYmVyIG5vdCBhIGZ1bmN0aW9uIG9yIGZpZWxkJyk7CiAgICAgIH0KICAgIH0pOwogICAgZW52aXJvbm1lbnQuZm9yRWFjaENvbnN0cnVjdG9yKGNsYXp6LCAoY29uc3RydWN0b3IpIHsKICAgICAgRnVuY3Rpb25JbmZvIGZ1bmN0aW9uSW5mbyA9IHZpc2l0RnVuY3Rpb24oY29uc3RydWN0b3IpOwogICAgICBpZiAoZnVuY3Rpb25JbmZvICE9IG51bGwpIHsKICAgICAgICBjbGFzc0luZm8uZnVuY3Rpb25zLmFkZChmdW5jdGlvbkluZm8pOwogICAgICAgIGZ1bmN0aW9uSW5mby5wYXJlbnQgPSBjbGFzc0luZm87CiAgICAgICAgZm9yICh2YXIgY2xvc3VyZUluZm8gaW4gZnVuY3Rpb25JbmZvLmNsb3N1cmVzKSB7CiAgICAgICAgICBzaXplICs9IGNsb3N1cmVJbmZvLnNpemU7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKCiAgICBjbGFzc0luZm8uc2l6ZSA9IHNpemU7CgogICAgaWYgKCFjb21waWxlci5iYWNrZW5kU3RyYXRlZ3kuZW1pdHRlclRhc2submVlZGVkQ2xhc3Nlcy5jb250YWlucyhjbGF6eikgJiYKICAgICAgICBjbGFzc0luZm8uZmllbGRzLmlzRW1wdHkgJiYKICAgICAgICBjbGFzc0luZm8uZnVuY3Rpb25zLmlzRW1wdHkpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcmVzdWx0LmNsYXNzZXMuYWRkKGNsYXNzSW5mbyk7CiAgICByZXR1cm4gY2xhc3NJbmZvOwogIH0KCiAgQ2xvc3VyZUluZm8gdmlzaXRDbG9zdXJlQ2xhc3MoQ2xhc3NFbnRpdHkgZWxlbWVudCkgewogICAgQ2xvc3VyZUluZm8gY2xvc3VyZUluZm8gPSBuZXcgQ2xvc3VyZUluZm8oCiAgICAgICAgbmFtZTogZWxlbWVudC5uYW1lLAogICAgICAgIG91dHB1dFVuaXQ6IF91bml0SW5mb0ZvckNsYXNzKGVsZW1lbnQpLAogICAgICAgIHNpemU6IGR1bXBJbmZvVGFzay5zaXplT2YoZWxlbWVudCkpOwogICAgX2VudGl0eVRvSW5mb1tlbGVtZW50XSA9IGNsb3N1cmVJbmZvOwoKICAgIEZ1bmN0aW9uRW50aXR5IGNhbGxNZXRob2QgPSBjbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQKICAgICAgICAubG9va3VwQ2xhc3NNZW1iZXIoZWxlbWVudCwgSWRlbnRpZmllcnMuY2FsbCk7CgogICAgRnVuY3Rpb25JbmZvIGZ1bmN0aW9uSW5mbyA9IHZpc2l0RnVuY3Rpb24oY2FsbE1ldGhvZCk7CiAgICBpZiAoZnVuY3Rpb25JbmZvID09IG51bGwpIHJldHVybiBudWxsOwogICAgY2xvc3VyZUluZm8uZnVuY3Rpb24gPSBmdW5jdGlvbkluZm87CiAgICBmdW5jdGlvbkluZm8ucGFyZW50ID0gY2xvc3VyZUluZm87CgogICAgcmVzdWx0LmNsb3N1cmVzLmFkZChjbG9zdXJlSW5mbyk7CiAgICByZXR1cm4gY2xvc3VyZUluZm87CiAgfQoKICBGdW5jdGlvbkluZm8gdmlzaXRGdW5jdGlvbihGdW5jdGlvbkVudGl0eSBmdW5jdGlvbikgewogICAgaW50IHNpemUgPSBkdW1wSW5mb1Rhc2suc2l6ZU9mKGZ1bmN0aW9uKTsKICAgIC8vIFRPRE8oc2lnbXVuZCk6IGNvbnNpZGVyIGFkZGluZyBhIHNtYWxsIGluZm8gdG8gcmVwcmVzZW50IHVucmVhY2hhYmxlCiAgICAvLyBjb2RlIGhlcmUuCiAgICBpZiAoc2l6ZSA9PSAwICYmICFzaG91bGRLZWVwKGZ1bmN0aW9uKSkgcmV0dXJuIG51bGw7CgogICAgLy8gVE9ETyhoZXQpOiB1c2UgJ3RvU3RyaW5nJyBpbnN0ZWFkIG9mICd0ZXh0Jz8gSXQgd2lsbCBhZGQgJz0nIGZvciBzZXR0ZXJzCiAgICBTdHJpbmcgbmFtZSA9IGZ1bmN0aW9uLm1lbWJlck5hbWUudGV4dDsKICAgIGludCBraW5kOwogICAgaWYgKGZ1bmN0aW9uLmlzU3RhdGljIHx8IGZ1bmN0aW9uLmlzVG9wTGV2ZWwpIHsKICAgICAga2luZCA9IEZ1bmN0aW9uSW5mby5UT1BfTEVWRUxfRlVOQ1RJT05fS0lORDsKICAgIH0gZWxzZSBpZiAoZnVuY3Rpb24uZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCkgewogICAgICBraW5kID0gRnVuY3Rpb25JbmZvLk1FVEhPRF9GVU5DVElPTl9LSU5EOwogICAgfQoKICAgIGlmIChmdW5jdGlvbi5pc0NvbnN0cnVjdG9yKSB7CiAgICAgIG5hbWUgPSBuYW1lID09ICIiCiAgICAgICAgICA/ICIke2Z1bmN0aW9uLmVuY2xvc2luZ0NsYXNzLm5hbWV9IgogICAgICAgICAgOiAiJHtmdW5jdGlvbi5lbmNsb3NpbmdDbGFzcy5uYW1lfS4ke2Z1bmN0aW9uLm5hbWV9IjsKICAgICAga2luZCA9IEZ1bmN0aW9uSW5mby5DT05TVFJVQ1RPUl9GVU5DVElPTl9LSU5EOwogICAgfQoKICAgIGFzc2VydChraW5kICE9IG51bGwpOwoKICAgIEZ1bmN0aW9uTW9kaWZpZXJzIG1vZGlmaWVycyA9IG5ldyBGdW5jdGlvbk1vZGlmaWVycygKICAgICAgaXNTdGF0aWM6IGZ1bmN0aW9uLmlzU3RhdGljLAogICAgICBpc0NvbnN0OiBmdW5jdGlvbi5pc0NvbnN0LAogICAgICBpc0ZhY3Rvcnk6IGZ1bmN0aW9uLmlzQ29uc3RydWN0b3IKICAgICAgICAgID8gKGZ1bmN0aW9uIGFzIENvbnN0cnVjdG9yRW50aXR5KS5pc0ZhY3RvcnlDb25zdHJ1Y3RvcgogICAgICAgICAgOiBmYWxzZSwKICAgICAgaXNFeHRlcm5hbDogZnVuY3Rpb24uaXNFeHRlcm5hbCwKICAgICk7CiAgICBMaXN0PENvZGVTcGFuPiBjb2RlID0gZHVtcEluZm9UYXNrLmNvZGVPZihmdW5jdGlvbik7CgogICAgTGlzdDxQYXJhbWV0ZXJJbmZvPiBwYXJhbWV0ZXJzID0gPFBhcmFtZXRlckluZm8+W107CiAgICBMaXN0PFN0cmluZz4gaW5mZXJyZWRQYXJhbWV0ZXJUeXBlcyA9IDxTdHJpbmc+W107CgogICAgY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hQYXJhbWV0ZXJBc0xvY2FsKAogICAgICAgIGNsb3NlZFdvcmxkLmdsb2JhbExvY2Fsc01hcCwgZnVuY3Rpb24sIChwYXJhbWV0ZXIpIHsKICAgICAgaW5mZXJyZWRQYXJhbWV0ZXJUeXBlcy5hZGQoJyR7X3Jlc3VsdE9mUGFyYW1ldGVyKHBhcmFtZXRlcil9Jyk7CiAgICB9KTsKICAgIGludCBwYXJhbWV0ZXJJbmRleCA9IDA7CiAgICBjbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaFBhcmFtZXRlcihmdW5jdGlvbiwgKHR5cGUsIG5hbWUsIF8pIHsKICAgICAgcGFyYW1ldGVycy5hZGQobmV3IFBhcmFtZXRlckluZm8oCiAgICAgICAgICBuYW1lLCBpbmZlcnJlZFBhcmFtZXRlclR5cGVzW3BhcmFtZXRlckluZGV4KytdLCAnJHR5cGUnKSk7CiAgICB9KTsKCiAgICB2YXIgZnVuY3Rpb25UeXBlID0gZW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlKGZ1bmN0aW9uKTsKICAgIFN0cmluZyByZXR1cm5UeXBlID0gJyR7ZnVuY3Rpb25UeXBlLnJldHVyblR5cGV9JzsKCiAgICBTdHJpbmcgaW5mZXJyZWRSZXR1cm5UeXBlID0gJyR7X3Jlc3VsdE9mTWVtYmVyKGZ1bmN0aW9uKS5yZXR1cm5UeXBlfSc7CiAgICBTdHJpbmcgc2lkZUVmZmVjdHMgPQogICAgICAgICcke19nbG9iYWxJbmZlcmVuY2VSZXN1bHRzLmluZmVycmVkRGF0YS5nZXRTaWRlRWZmZWN0c09mRWxlbWVudChmdW5jdGlvbil9JzsKCiAgICBpbnQgaW5saW5lZENvdW50ID0gZHVtcEluZm9UYXNrLmlubGluZUNvdW50W2Z1bmN0aW9uXTsKICAgIGlmIChpbmxpbmVkQ291bnQgPT0gbnVsbCkgaW5saW5lZENvdW50ID0gMDsKCiAgICBGdW5jdGlvbkluZm8gaW5mbyA9IG5ldyBGdW5jdGlvbkluZm8oCiAgICAgICAgbmFtZTogbmFtZSwKICAgICAgICBmdW5jdGlvbktpbmQ6IGtpbmQsCiAgICAgICAgbW9kaWZpZXJzOiBtb2RpZmllcnMsCiAgICAgICAgcmV0dXJuVHlwZTogcmV0dXJuVHlwZSwKICAgICAgICBpbmZlcnJlZFJldHVyblR5cGU6IGluZmVycmVkUmV0dXJuVHlwZSwKICAgICAgICBwYXJhbWV0ZXJzOiBwYXJhbWV0ZXJzLAogICAgICAgIHNpZGVFZmZlY3RzOiBzaWRlRWZmZWN0cywKICAgICAgICBpbmxpbmVkQ291bnQ6IGlubGluZWRDb3VudCwKICAgICAgICBjb2RlOiBjb2RlLAogICAgICAgIHR5cGU6IGZ1bmN0aW9uVHlwZS50b1N0cmluZygpLAogICAgICAgIG91dHB1dFVuaXQ6IF91bml0SW5mb0Zvck1lbWJlcihmdW5jdGlvbikpOwogICAgX2VudGl0eVRvSW5mb1tmdW5jdGlvbl0gPSBpbmZvOwoKICAgIGludCBjbG9zdXJlU2l6ZSA9IF9hZGRDbG9zdXJlSW5mbyhpbmZvLCBmdW5jdGlvbik7CiAgICBzaXplICs9IGNsb3N1cmVTaXplOwoKICAgIGlmIChjb21waWxlci5vcHRpb25zLmV4cGVyaW1lbnRDYWxsSW5zdHJ1bWVudGF0aW9uKSB7CiAgICAgIC8vIFdlIHVzZSBmdW5jdGlvbi5oYXNoQ29kZSBiZWNhdXNlIGl0IGlzIGdsb2JhbGx5IHVuaXF1ZSBhbmQgaXQgaXMKICAgICAgLy8gYXZhaWxhYmxlIHdoaWxlIHdlIGFyZSBkb2luZyBjb2RlZ2VuLgogICAgICBpbmZvLmNvdmVyYWdlSWQgPSAnJHtmdW5jdGlvbi5oYXNoQ29kZX0nOwogICAgfQoKICAgIGluZm8uc2l6ZSA9IHNpemU7CgogICAgcmVzdWx0LmZ1bmN0aW9ucy5hZGQoaW5mbyk7CiAgICByZXR1cm4gaW5mbzsKICB9CgogIC8vLyBBZGRzIGNsb3N1cmUgaW5mb3JtYXRpb24gdG8gW2luZm9dLCB1c2luZyBhbGwgbmVzdGVkIGNsb3N1cmVzIGluIFttZW1iZXJdLgogIC8vLwogIC8vLyBSZXR1cm5zIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBuZXN0ZWQgY2xvc3VyZXMsIHRvIGFkZCB0byB0aGUgaW5mbyBzaXplLgogIGludCBfYWRkQ2xvc3VyZUluZm8oSW5mbyBpbmZvLCBNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBhc3NlcnQoaW5mbyBpcyBGdW5jdGlvbkluZm8gfHwgaW5mbyBpcyBGaWVsZEluZm8pOwogICAgaW50IHNpemUgPSAwOwogICAgTGlzdDxDbG9zdXJlSW5mbz4gbmVzdGVkQ2xvc3VyZXMgPSA8Q2xvc3VyZUluZm8+W107CiAgICBlbnZpcm9ubWVudC5mb3JFYWNoTmVzdGVkQ2xvc3VyZShtZW1iZXIsIChjbG9zdXJlKSB7CiAgICAgIENsb3N1cmVJbmZvIGNsb3N1cmVJbmZvID0gdmlzaXRDbG9zdXJlQ2xhc3MoY2xvc3VyZS5lbmNsb3NpbmdDbGFzcyk7CiAgICAgIGlmIChjbG9zdXJlSW5mbyAhPSBudWxsKSB7CiAgICAgICAgY2xvc3VyZUluZm8ucGFyZW50ID0gaW5mbzsKICAgICAgICBuZXN0ZWRDbG9zdXJlcy5hZGQoY2xvc3VyZUluZm8pOwogICAgICAgIHNpemUgKz0gY2xvc3VyZUluZm8uc2l6ZTsKICAgICAgfQogICAgfSk7CiAgICBpZiAoaW5mbyBpcyBGdW5jdGlvbkluZm8pIGluZm8uY2xvc3VyZXMgPSBuZXN0ZWRDbG9zdXJlczsKICAgIGlmIChpbmZvIGlzIEZpZWxkSW5mbykgaW5mby5jbG9zdXJlcyA9IG5lc3RlZENsb3N1cmVzOwoKICAgIHJldHVybiBzaXplOwogIH0KCiAgT3V0cHV0VW5pdEluZm8gX2luZm9Gcm9tT3V0cHV0VW5pdChPdXRwdXRVbml0IG91dHB1dFVuaXQpIHsKICAgIHJldHVybiBfb3V0cHV0VG9JbmZvLnB1dElmQWJzZW50KG91dHB1dFVuaXQsICgpIHsKICAgICAgLy8gRHVtcC1pbmZvIGN1cnJlbnRseSBvbmx5IHdvcmtzIHdpdGggdGhlIGZ1bGwgZW1pdHRlci4gSWYgYW5vdGhlcgogICAgICAvLyBlbWl0dGVyIGlzIHVzZWQgaXQgd2lsbCBmYWlsIGhlcmUuCiAgICAgIEJhY2tlbmRTdHJhdGVneSBiYWNrZW5kU3RyYXRlZ3kgPSBjb21waWxlci5iYWNrZW5kU3RyYXRlZ3k7CiAgICAgIGFzc2VydChvdXRwdXRVbml0Lm5hbWUgIT0gbnVsbCB8fCBvdXRwdXRVbml0LmlzTWFpbk91dHB1dCk7CiAgICAgIHZhciBmaWxlbmFtZSA9IG91dHB1dFVuaXQuaXNNYWluT3V0cHV0CiAgICAgICAgICA/IGNvbXBpbGVyLm9wdGlvbnMub3V0cHV0VXJpLnBhdGhTZWdtZW50cy5sYXN0CiAgICAgICAgICA6IGRlZmVycmVkUGFydEZpbGVOYW1lKGNvbXBpbGVyLm9wdGlvbnMsIG91dHB1dFVuaXQubmFtZSk7CiAgICAgIE91dHB1dFVuaXRJbmZvIGluZm8gPSBuZXcgT3V0cHV0VW5pdEluZm8oZmlsZW5hbWUsIG91dHB1dFVuaXQubmFtZSwKICAgICAgICAgIGJhY2tlbmRTdHJhdGVneS5lbWl0dGVyVGFzay5lbWl0dGVyLmdlbmVyYXRlZFNpemUob3V0cHV0VW5pdCkpOwogICAgICBpbmZvLmltcG9ydHMKICAgICAgICAgIC5hZGRBbGwoY2xvc2VkV29ybGQub3V0cHV0VW5pdERhdGEuZ2V0SW1wb3J0TmFtZXMob3V0cHV0VW5pdCkpOwogICAgICByZXN1bHQub3V0cHV0VW5pdHMuYWRkKGluZm8pOwogICAgICByZXR1cm4gaW5mbzsKICAgIH0pOwogIH0KCiAgT3V0cHV0VW5pdEluZm8gX3VuaXRJbmZvRm9yTWVtYmVyKE1lbWJlckVudGl0eSBlbnRpdHkpIHsKICAgIHJldHVybiBfaW5mb0Zyb21PdXRwdXRVbml0KAogICAgICAgIGNsb3NlZFdvcmxkLm91dHB1dFVuaXREYXRhLm91dHB1dFVuaXRGb3JNZW1iZXIoZW50aXR5KSk7CiAgfQoKICBPdXRwdXRVbml0SW5mbyBfdW5pdEluZm9Gb3JDbGFzcyhDbGFzc0VudGl0eSBlbnRpdHkpIHsKICAgIHJldHVybiBfaW5mb0Zyb21PdXRwdXRVbml0KAogICAgICAgIGNsb3NlZFdvcmxkLm91dHB1dFVuaXREYXRhLm91dHB1dFVuaXRGb3JDbGFzcyhlbnRpdHksIGFsbG93TnVsbDogdHJ1ZSkpOwogIH0KCiAgT3V0cHV0VW5pdEluZm8gX3VuaXRJbmZvRm9yQ29uc3RhbnQoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgewogICAgT3V0cHV0VW5pdCBvdXRwdXRVbml0ID0KICAgICAgICBjbG9zZWRXb3JsZC5vdXRwdXRVbml0RGF0YS5vdXRwdXRVbml0Rm9yQ29uc3RhbnQoY29uc3RhbnQpOwogICAgaWYgKG91dHB1dFVuaXQgPT0gbnVsbCkgewogICAgICBhc3NlcnQoY29uc3RhbnQgaXMgSW50ZXJjZXB0b3JDb25zdGFudFZhbHVlKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gX2luZm9Gcm9tT3V0cHV0VW5pdChvdXRwdXRVbml0KTsKICB9Cn0KCmNsYXNzIFNlbGVjdGlvbiB7CiAgZmluYWwgRW50aXR5IHNlbGVjdGVkRW50aXR5OwogIGZpbmFsIE9iamVjdCByZWNlaXZlckNvbnN0cmFpbnQ7CiAgU2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWRFbnRpdHksIHRoaXMucmVjZWl2ZXJDb25zdHJhaW50KTsKfQoKLy8vIEludGVyZmFjZSB1c2VkIHRvIHJlY29yZCBpbmZvcm1hdGlvbiBmcm9tIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgY29tcGlsZXIgc28KLy8vIHdlIGNhbiBlbWl0IHRoZW0gaW4gdGhlIGR1bXAtaW5mbyB0YXNrLgovLyBUT0RPKHNpZ211bmQsaGV0KTogbW92ZSBtb3JlIGZlYXR1cmVzIGhlcmUuIElkZWFsbHkgdGhlIGR1bXAtaW5mbyB0YXNrCi8vIHNob3VsZG4ndCByZWFjaCBpbnRvIGludGVybmFscyBvZiBvdGhlciBwYXJ0cyBvZiB0aGUgY29tcGlsZXIuIEZvciBleGFtcGxlLAovLyB3ZSBjdXJyZW50bHkgcmVhY2ggaW50byB0aGUgZnVsbCBlbWl0dGVyIGFuZCBhcyBhIHJlc3VsdCB3ZSBkb24ndCBzdXBwb3J0Ci8vIGR1bXAtaW5mbyB3aGVuIHVzaW5nIHRoZSBzdGFydHVwLWVtaXR0ZXIgKGlzc3VlICMyNDE5MCkuCmFic3RyYWN0IGNsYXNzIEluZm9SZXBvcnRlciB7CiAgdm9pZCByZXBvcnRJbmxpbmVkKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQsIE1lbWJlckVudGl0eSBpbmxpbmVkRnJvbSk7Cn0KCmNsYXNzIER1bXBJbmZvVGFzayBleHRlbmRzIENvbXBpbGVyVGFzayBpbXBsZW1lbnRzIEluZm9SZXBvcnRlciB7CiAgc3RhdGljIGNvbnN0IEltcGFjdFVzZUNhc2UgSU1QQUNUX1VTRSA9IGNvbnN0IEltcGFjdFVzZUNhc2UoJ0R1bXAgaW5mbycpOwogIGZpbmFsIENvbXBpbGVyIGNvbXBpbGVyOwogIGZpbmFsIGJvb2wgdXNlQmluYXJ5Rm9ybWF0OwoKICBEdW1wSW5mb1Rhc2sodGhpcy5jb21waWxlcikKICAgICAgOiB1c2VCaW5hcnlGb3JtYXQgPSBjb21waWxlci5vcHRpb25zLnVzZUR1bXBJbmZvQmluYXJ5Rm9ybWF0LAogICAgICAgIHN1cGVyKGNvbXBpbGVyLm1lYXN1cmVyKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBuYW1lID0+ICJEdW1wIEluZm8iOwoKICBFbGVtZW50SW5mb0NvbGxlY3RvciBpbmZvQ29sbGVjdG9yOwoKICAvLy8gVGhlIHNpemUgb2YgdGhlIGdlbmVyYXRlZCBvdXRwdXQuCiAgaW50IF9wcm9ncmFtU2l6ZTsKCiAgLy8vIERhdGEgYXNzb2NpYXRlZCB3aXRoIGphdmFzY3JpcHQgQVNUIG5vZGVzLiBUaGUgbWFwIG9ubHkgY29udGFpbnMga2V5cyBmb3IKICAvLy8gbm9kZXMgdGhhdCB3ZSBjYXJlIGFib3V0LiAgS2V5cyBhcmUgYXV0b21hdGljYWxseSBhZGRlZCB3aGVuCiAgLy8vIFtyZWdpc3RlckVudGl0eUFzdF0gaXMgY2FsbGVkLgogIGZpbmFsIE1hcDxqc0FzdC5Ob2RlLCBDb2RlU3Bhbj4gX25vZGVEYXRhID0gPGpzQXN0Lk5vZGUsIENvZGVTcGFuPnt9OwoKICAvLyBBIG1hcHBpbmcgZnJvbSBEYXJ0IEVudGl0aWVzIHRvIEphdmFzY3JpcHQgQVNUIE5vZGVzLgogIGZpbmFsIE1hcDxFbnRpdHksIExpc3Q8anNBc3QuTm9kZT4+IF9lbnRpdHlUb05vZGVzID0KICAgICAgPEVudGl0eSwgTGlzdDxqc0FzdC5Ob2RlPj57fTsKICBmaW5hbCBNYXA8Q29uc3RhbnRWYWx1ZSwganNBc3QuTm9kZT4gX2NvbnN0YW50VG9Ob2RlID0KICAgICAgPENvbnN0YW50VmFsdWUsIGpzQXN0Lk5vZGU+e307CgogIGZpbmFsIE1hcDxFbnRpdHksIGludD4gaW5saW5lQ291bnQgPSA8RW50aXR5LCBpbnQ+e307CgogIC8vIEEgbWFwcGluZyBmcm9tIGFuIGVudGl0eSB0byBhIGxpc3Qgb2YgZW50aXRpZXMgdGhhdCBhcmUKICAvLyBpbmxpbmVkIGluc2lkZSBvZiBpdC4KICBmaW5hbCBNYXA8RW50aXR5LCBMaXN0PEVudGl0eT4+IGlubGluZU1hcCA9IDxFbnRpdHksIExpc3Q8RW50aXR5Pj57fTsKCiAgZmluYWwgTWFwPE1lbWJlckVudGl0eSwgV29ybGRJbXBhY3Q+IGltcGFjdHMgPSA8TWVtYmVyRW50aXR5LCBXb3JsZEltcGFjdD57fTsKCiAgLy8vIFJlZ2lzdGVyIHRoZSBzaXplIG9mIHRoZSBnZW5lcmF0ZWQgb3V0cHV0LgogIHZvaWQgcmVwb3J0U2l6ZShpbnQgcHJvZ3JhbVNpemUpIHsKICAgIF9wcm9ncmFtU2l6ZSA9IHByb2dyYW1TaXplOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZXBvcnRJbmxpbmVkKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQsIE1lbWJlckVudGl0eSBpbmxpbmVkRnJvbSkgewogICAgaW5saW5lQ291bnQucHV0SWZBYnNlbnQoZWxlbWVudCwgKCkgPT4gMCk7CiAgICBpbmxpbmVDb3VudFtlbGVtZW50XSArPSAxOwogICAgaW5saW5lTWFwLnB1dElmQWJzZW50KGlubGluZWRGcm9tLCAoKSA9PiBuZXcgTGlzdDxFbnRpdHk+KCkpOwogICAgaW5saW5lTWFwW2lubGluZWRGcm9tXS5hZGQoZWxlbWVudCk7CiAgfQoKICB2b2lkIHJlZ2lzdGVySW1wYWN0KE1lbWJlckVudGl0eSBtZW1iZXIsIFdvcmxkSW1wYWN0IGltcGFjdCkgewogICAgaWYgKGNvbXBpbGVyLm9wdGlvbnMuZHVtcEluZm8pIHsKICAgICAgaW1wYWN0c1ttZW1iZXJdID0gaW1wYWN0OwogICAgfQogIH0KCiAgdm9pZCB1bnJlZ2lzdGVySW1wYWN0KHZhciBpbXBhY3RTb3VyY2UpIHsKICAgIGltcGFjdHMucmVtb3ZlKGltcGFjdFNvdXJjZSk7CiAgfQoKICAvLy8gUmV0dXJucyBhbiBpdGVyYWJsZSBvZiBbU2VsZWN0aW9uXXMgdGhhdCBhcmUgdXNlZCBieSBbZW50aXR5XS4gRWFjaAogIC8vLyBbU2VsZWN0aW9uXSBjb250YWlucyBhbiBlbnRpdHkgdGhhdCBpcyB1c2VkIGFuZCB0aGUgc2VsZWN0b3IgdGhhdAogIC8vLyBzZWxlY3RlZCB0aGUgZW50aXR5LgogIEl0ZXJhYmxlPFNlbGVjdGlvbj4gZ2V0UmV0YWluaW5nKEVudGl0eSBlbnRpdHksIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgV29ybGRJbXBhY3QgaW1wYWN0ID0gaW1wYWN0c1tlbnRpdHldOwogICAgaWYgKGltcGFjdCA9PSBudWxsKSByZXR1cm4gY29uc3QgPFNlbGVjdGlvbj5bXTsKCiAgICB2YXIgc2VsZWN0aW9ucyA9IDxTZWxlY3Rpb24+W107CiAgICBjb21waWxlci5pbXBhY3RTdHJhdGVneS52aXNpdEltcGFjdCgKICAgICAgICBlbnRpdHksCiAgICAgICAgaW1wYWN0LAogICAgICAgIG5ldyBXb3JsZEltcGFjdFZpc2l0b3JJbXBsKHZpc2l0RHluYW1pY1VzZTogKG1lbWJlciwgZHluYW1pY1VzZSkgewogICAgICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrID0gZHluYW1pY1VzZS5yZWNlaXZlckNvbnN0cmFpbnQ7CiAgICAgICAgICBzZWxlY3Rpb25zLmFkZEFsbChjbG9zZWRXb3JsZAogICAgICAgICAgICAgIC8vIFRPRE8oaGV0KTogSGFuZGxlIGBjYWxsYCBvbiBgQ2xvc3VyZWAgdGhyb3VnaAogICAgICAgICAgICAgIC8vIGB3b3JsZC5pbmNsdWRlc0Nsb3N1cmVDYWxsYC4KICAgICAgICAgICAgICAubG9jYXRlTWVtYmVycyhkeW5hbWljVXNlLnNlbGVjdG9yLCBtYXNrKQogICAgICAgICAgICAgIC5tYXAoKE1lbWJlckVudGl0eSBlKSA9PiBuZXcgU2VsZWN0aW9uKGUsIG1hc2spKSk7CiAgICAgICAgfSwgdmlzaXRTdGF0aWNVc2U6IChtZW1iZXIsIHN0YXRpY1VzZSkgewogICAgICAgICAgc2VsZWN0aW9ucy5hZGQobmV3IFNlbGVjdGlvbihzdGF0aWNVc2UuZWxlbWVudCwgbnVsbCkpOwogICAgICAgIH0pLAogICAgICAgIElNUEFDVF9VU0UpOwogICAgcmV0dXJuIHNlbGVjdGlvbnM7CiAgfQoKICAvLy8gUmVnaXN0ZXJzIHRoYXQgYSBqYXZhc2NyaXB0IEFTVCBub2RlIFtjb2RlXSB3YXMgcHJvZHVjZWQgYnkgdGhlIGRhcnQKICAvLy8gRW50aXR5IFtlbnRpdHldLgogIHZvaWQgcmVnaXN0ZXJFbnRpdHlBc3QoRW50aXR5IGVudGl0eSwganNBc3QuTm9kZSBjb2RlLAogICAgICB7TGlicmFyeUVudGl0eSBsaWJyYXJ5fSkgewogICAgaWYgKGNvbXBpbGVyLm9wdGlvbnMuZHVtcEluZm8pIHsKICAgICAgX2VudGl0eVRvTm9kZXMKICAgICAgICAgIC5wdXRJZkFic2VudChlbnRpdHksICgpID0+IG5ldyBMaXN0PGpzQXN0Lk5vZGU+KCkpCiAgICAgICAgICAuYWRkKGNvZGUpOwogICAgICBfbm9kZURhdGFbY29kZV0gPz89IHVzZUJpbmFyeUZvcm1hdCA/IG5ldyBDb2RlU3BhbigpIDogbmV3IF9Db2RlRGF0YSgpOwogICAgfQogIH0KCiAgdm9pZCByZWdpc3RlckNvbnN0YW50QXN0KENvbnN0YW50VmFsdWUgY29uc3RhbnQsIGpzQXN0Lk5vZGUgY29kZSkgewogICAgaWYgKGNvbXBpbGVyLm9wdGlvbnMuZHVtcEluZm8pIHsKICAgICAgYXNzZXJ0KF9jb25zdGFudFRvTm9kZVtjb25zdGFudF0gPT0gbnVsbCB8fAogICAgICAgICAgX2NvbnN0YW50VG9Ob2RlW2NvbnN0YW50XSA9PSBjb2RlKTsKICAgICAgX2NvbnN0YW50VG9Ob2RlW2NvbnN0YW50XSA9IGNvZGU7CiAgICAgIF9ub2RlRGF0YVtjb2RlXSA/Pz0gdXNlQmluYXJ5Rm9ybWF0ID8gbmV3IENvZGVTcGFuKCkgOiBuZXcgX0NvZGVEYXRhKCk7CiAgICB9CiAgfQoKICBib29sIGdldCBzaG91bGRFbWl0VGV4dCA9PiAhdXNlQmluYXJ5Rm9ybWF0OwogIC8vIFRPRE8oc2lnbXVuZCk6IGRlbGV0ZSB0aGUgc3RhY2sgb25jZSB3ZSBzdG9wIGVtaXR0aW5nIHRoZSBzb3VyY2UgdGV4dC4KICBMaXN0PF9Db2RlRGF0YT4gX3N0YWNrID0gW107CiAgdm9pZCBlbnRlck5vZGUoanNBc3QuTm9kZSBub2RlLCBpbnQgc3RhcnQpIHsKICAgIHZhciBkYXRhID0gX25vZGVEYXRhW25vZGVdOwogICAgZGF0YT8uc3RhcnQgPSBzdGFydDsKCiAgICBpZiAoc2hvdWxkRW1pdFRleHQgJiYgZGF0YSAhPSBudWxsKSB7CiAgICAgIF9zdGFjay5hZGQoZGF0YSk7CiAgICB9CiAgfQoKICB2b2lkIGVtaXQoU3RyaW5nIHN0cmluZykgewogICAgaWYgKHNob3VsZEVtaXRUZXh0KSB7CiAgICAgIC8vIE5vdGU6IGhpc3RvcmljYWxseSB3ZSBlbWl0dGVkIHRoZSBmdWxsIGJvZHkgb2YgY2xhc3NlcyBhbmQgbWV0aG9kcywgc28KICAgICAgLy8gaW5zdGFuY2UgbWV0aG9kcyBlbmRlZCB1cCBlbWl0dGVkIHR3aWNlLiAgT25jZSB3ZSB1c2UgYSBkaWZmZXJlbnQKICAgICAgLy8gZW5jb2Rpbmcgb2YgZHVtcCBpbmZvLCB3ZSBhbHNvIHBsYW4gdG8gcmVtb3ZlIHRoaXMgZHVwbGljYXRpb24uCiAgICAgIF9zdGFjay5mb3JFYWNoKChmKSA9PiBmLl90ZXh0LndyaXRlKHN0cmluZykpOwogICAgfQogIH0KCiAgdm9pZCBleGl0Tm9kZShqc0FzdC5Ob2RlIG5vZGUsIGludCBzdGFydCwgaW50IGVuZCwgaW50IGNsb3NpbmcpIHsKICAgIHZhciBkYXRhID0gX25vZGVEYXRhW25vZGVdOwogICAgZGF0YT8uZW5kID0gZW5kOwogICAgaWYgKHNob3VsZEVtaXRUZXh0ICYmIGRhdGEgIT0gbnVsbCkgewogICAgICB2YXIgbGFzdCA9IF9zdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgIGFzc2VydChkYXRhID09IGxhc3QpOwogICAgICBhc3NlcnQoZGF0YS5zdGFydCA9PSBzdGFydCk7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgc291cmNlIGNvZGUgdGhhdCB3YXMgZ2VuZXJhdGVkIGZvciBhbiBlbnRpdHkuCiAgLy8vIElmIG5vIHNvdXJjZSBjb2RlIHdhcyBwcm9kdWNlZCwgcmV0dXJuIDAuCiAgaW50IHNpemVPZihFbnRpdHkgZW50aXR5KSB7CiAgICBpZiAoX2VudGl0eVRvTm9kZXMuY29udGFpbnNLZXkoZW50aXR5KSkgewogICAgICByZXR1cm4gX2VudGl0eVRvTm9kZXNbZW50aXR5XS5tYXAoc2l6ZU9mTm9kZSkuZm9sZCgwLCAoYSwgYikgPT4gYSArIGIpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgfQoKICBpbnQgc2l6ZU9mTm9kZShqc0FzdC5Ob2RlIG5vZGUpIHsKICAgIENvZGVTcGFuIHNwYW4gPSBfbm9kZURhdGFbbm9kZV07CiAgICBpZiAoc3BhbiA9PSBudWxsKSByZXR1cm4gMDsKICAgIHJldHVybiBzcGFuLmVuZCAtIHNwYW4uc3RhcnQ7CiAgfQoKICBMaXN0PENvZGVTcGFuPiBjb2RlT2YoTWVtYmVyRW50aXR5IGVudGl0eSkgewogICAgTGlzdDxqc0FzdC5Ob2RlPiBjb2RlID0gX2VudGl0eVRvTm9kZXNbZW50aXR5XTsKICAgIGlmIChjb2RlID09IG51bGwpIHJldHVybiBjb25zdCBbXTsKICAgIHJldHVybiBjb2RlLm1hcCgoYXN0KSA9PiBfbm9kZURhdGFbYXN0XSkudG9MaXN0KCk7CiAgfQoKICB2b2lkIGR1bXBJbmZvKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cykgewogICAgbWVhc3VyZSgoKSB7CiAgICAgIGluZm9Db2xsZWN0b3IgPSBuZXcgRWxlbWVudEluZm9Db2xsZWN0b3IoCiAgICAgICAgICBjb21waWxlciwgdGhpcywgY2xvc2VkV29ybGQsIGdsb2JhbEluZmVyZW5jZVJlc3VsdHMpCiAgICAgICAgLi5ydW4oKTsKCiAgICAgIHZhciBhbGxJbmZvID0gYnVpbGREdW1wSW5mb0RhdGEoY2xvc2VkV29ybGQpOwogICAgICBpZiAodXNlQmluYXJ5Rm9ybWF0KSB7CiAgICAgICAgZHVtcEluZm9CaW5hcnkoYWxsSW5mbyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZHVtcEluZm9Kc29uKGFsbEluZm8pOwogICAgICB9CiAgICB9KTsKICB9CgogIHZvaWQgZHVtcEluZm9Kc29uKEFsbEluZm8gZGF0YSkgewogICAgU3RyaW5nQnVmZmVyIGpzb25CdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBKc29uRW5jb2RlciBlbmNvZGVyID0gY29uc3QgSnNvbkVuY29kZXIud2l0aEluZGVudCgnICAnKTsKICAgIENodW5rZWRDb252ZXJzaW9uU2luazxPYmplY3Q+IHNpbmsgPSBlbmNvZGVyLnN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oCiAgICAgICAgbmV3IFN0cmluZ0NvbnZlcnNpb25TaW5rLmZyb21TdHJpbmdTaW5rKGpzb25CdWZmZXIpKTsKICAgIHNpbmsuYWRkKG5ldyBBbGxJbmZvSnNvbkNvZGVjKGlzQmFja3dhcmRDb21wYXRpYmxlOiB0cnVlKS5lbmNvZGUoZGF0YSkpOwogICAgY29tcGlsZXIub3V0cHV0UHJvdmlkZXIuY3JlYXRlT3V0cHV0U2luaygKICAgICAgICBjb21waWxlci5vcHRpb25zLm91dHB1dFVyaS5wYXRoU2VnbWVudHMubGFzdCwKICAgICAgICAnaW5mby5qc29uJywKICAgICAgICBPdXRwdXRUeXBlLmR1bXBJbmZvKQogICAgICAuLmFkZChqc29uQnVmZmVyLnRvU3RyaW5nKCkpCiAgICAgIC4uY2xvc2UoKTsKICAgIGNvbXBpbGVyLnJlcG9ydGVyLnJlcG9ydEluZm8oTk9fTE9DQVRJT05fU1BBTk5BQkxFLCBNZXNzYWdlS2luZC5HRU5FUklDLCB7CiAgICAgICd0ZXh0JzogIlZpZXcgdGhlIGR1bXBlZCAuaW5mby5qc29uIGZpbGUgYXQgIgogICAgICAgICAgImh0dHBzOi8vZGFydC1sYW5nLmdpdGh1Yi5pby9kdW1wLWluZm8tdmlzdWFsaXplciIKICAgIH0pOwogIH0KCiAgdm9pZCBkdW1wSW5mb0JpbmFyeShBbGxJbmZvIGRhdGEpIHsKICAgIHZhciBuYW1lID0gY29tcGlsZXIub3B0aW9ucy5vdXRwdXRVcmkucGF0aFNlZ21lbnRzLmxhc3QgKyAiLmluZm8uZGF0YSI7CiAgICBTaW5rPExpc3Q8aW50Pj4gc2luayA9IG5ldyBCaW5hcnlPdXRwdXRTaW5rQWRhcHRlcihjb21waWxlci5vdXRwdXRQcm92aWRlcgogICAgICAgIC5jcmVhdGVCaW5hcnlTaW5rKGNvbXBpbGVyLm9wdGlvbnMub3V0cHV0VXJpLnJlc29sdmUobmFtZSkpKTsKICAgIGR1bXBfaW5mby5lbmNvZGUoZGF0YSwgc2luayk7CiAgICBjb21waWxlci5yZXBvcnRlci5yZXBvcnRJbmZvKE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwgTWVzc2FnZUtpbmQuR0VORVJJQywgewogICAgICAndGV4dCc6ICJVc2UgYHBhY2thZ2U6ZGFydDJqc19pbmZvYCB0byBwYXJzZSBhbmQgcHJvY2VzcyB0aGUgZHVtcGVkICIKICAgICAgICAgICIuaW5mby5kYXRhIGZpbGUuIgogICAgfSk7CiAgfQoKICBBbGxJbmZvIGJ1aWxkRHVtcEluZm9EYXRhKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgU3RvcHdhdGNoIHN0b3B3YXRjaCA9IG5ldyBTdG9wd2F0Y2goKTsKICAgIHN0b3B3YXRjaC5zdGFydCgpOwoKICAgIEFsbEluZm8gcmVzdWx0ID0gaW5mb0NvbGxlY3Rvci5yZXN1bHQ7CgogICAgLy8gUmVjdXJzaXZlbHkgYnVpbGQgbGlua3MgdG8gZnVuY3Rpb24gdXNlcwogICAgSXRlcmFibGU8RW50aXR5PiBmdW5jdGlvbkVudGl0aWVzID0KICAgICAgICBpbmZvQ29sbGVjdG9yLl9lbnRpdHlUb0luZm8ua2V5cy53aGVyZSgoaykgPT4gayBpcyBGdW5jdGlvbkVudGl0eSk7CiAgICBmb3IgKEZ1bmN0aW9uRW50aXR5IGVudGl0eSBpbiBmdW5jdGlvbkVudGl0aWVzKSB7CiAgICAgIEZ1bmN0aW9uSW5mbyBpbmZvID0gaW5mb0NvbGxlY3Rvci5fZW50aXR5VG9JbmZvW2VudGl0eV07CiAgICAgIEl0ZXJhYmxlPFNlbGVjdGlvbj4gdXNlcyA9IGdldFJldGFpbmluZyhlbnRpdHksIGNsb3NlZFdvcmxkKTsKICAgICAgLy8gRG9uJ3QgYm90aGVyIHJlY29yZGluZyBhbiBlbXB0eSBsaXN0IG9mIGRlcGVuZGVuY2llcy4KICAgICAgZm9yIChTZWxlY3Rpb24gc2VsZWN0aW9uIGluIHVzZXMpIHsKICAgICAgICAvLyBEb24ndCByZWdpc3RlciBkYXJ0MmpzIGJ1aWx0aW4gZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCByZWNvcmRlZC4KICAgICAgICBJbmZvIHVzZUluZm8gPSBpbmZvQ29sbGVjdG9yLl9lbnRpdHlUb0luZm9bc2VsZWN0aW9uLnNlbGVjdGVkRW50aXR5XTsKICAgICAgICBpZiAodXNlSW5mbyA9PSBudWxsKSBjb250aW51ZTsKICAgICAgICBpbmZvLnVzZXMuYWRkKG5ldyBEZXBlbmRlbmN5SW5mbygKICAgICAgICAgICAgdXNlSW5mbywgc2VsZWN0aW9uLnJlY2VpdmVyQ29uc3RyYWludD8udG9TdHJpbmcoKSkpOwogICAgICB9CiAgICB9CgogICAgLy8gUmVjdXJzaXZlbHkgYnVpbGQgbGlua3MgdG8gZmllbGQgdXNlcwogICAgSXRlcmFibGU8RW50aXR5PiBmaWVsZEVudGl0eSA9CiAgICAgICAgaW5mb0NvbGxlY3Rvci5fZW50aXR5VG9JbmZvLmtleXMud2hlcmUoKGspID0+IGsgaXMgRmllbGRFbnRpdHkpOwogICAgZm9yIChGaWVsZEVudGl0eSBlbnRpdHkgaW4gZmllbGRFbnRpdHkpIHsKICAgICAgRmllbGRJbmZvIGluZm8gPSBpbmZvQ29sbGVjdG9yLl9lbnRpdHlUb0luZm9bZW50aXR5XTsKICAgICAgSXRlcmFibGU8U2VsZWN0aW9uPiB1c2VzID0gZ2V0UmV0YWluaW5nKGVudGl0eSwgY2xvc2VkV29ybGQpOwogICAgICAvLyBEb24ndCBib3RoZXIgcmVjb3JkaW5nIGFuIGVtcHR5IGxpc3Qgb2YgZGVwZW5kZW5jaWVzLgogICAgICBmb3IgKFNlbGVjdGlvbiBzZWxlY3Rpb24gaW4gdXNlcykgewogICAgICAgIEluZm8gdXNlSW5mbyA9IGluZm9Db2xsZWN0b3IuX2VudGl0eVRvSW5mb1tzZWxlY3Rpb24uc2VsZWN0ZWRFbnRpdHldOwogICAgICAgIGlmICh1c2VJbmZvID09IG51bGwpIGNvbnRpbnVlOwogICAgICAgIGluZm8udXNlcy5hZGQobmV3IERlcGVuZGVuY3lJbmZvKAogICAgICAgICAgICB1c2VJbmZvLCBzZWxlY3Rpb24ucmVjZWl2ZXJDb25zdHJhaW50Py50b1N0cmluZygpKSk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBOb3RpZnkgdGhlIGltcGFjdCBzdHJhdGVneSBpbXBhY3RzIGFyZSBubyBsb25nZXIgbmVlZGVkIGZvciBkdW1wIGluZm8uCiAgICBjb21waWxlci5pbXBhY3RTdHJhdGVneS5vbkltcGFjdFVzZWQoSU1QQUNUX1VTRSk7CgogICAgLy8gVHJhY2sgZGVwZW5kZW5jaWVzIHRoYXQgY29tZSBmcm9tIGlubGluaW5nLgogICAgZm9yIChFbnRpdHkgZW50aXR5IGluIGlubGluZU1hcC5rZXlzKSB7CiAgICAgIENvZGVJbmZvIG91dGVySW5mbyA9IGluZm9Db2xsZWN0b3IuX2VudGl0eVRvSW5mb1tlbnRpdHldOwogICAgICBpZiAob3V0ZXJJbmZvID09IG51bGwpIGNvbnRpbnVlOwogICAgICBmb3IgKEVudGl0eSBpbmxpbmVkIGluIGlubGluZU1hcFtlbnRpdHldKSB7CiAgICAgICAgSW5mbyBpbmxpbmVkSW5mbyA9IGluZm9Db2xsZWN0b3IuX2VudGl0eVRvSW5mb1tpbmxpbmVkXTsKICAgICAgICBpZiAoaW5saW5lZEluZm8gPT0gbnVsbCkgY29udGludWU7CiAgICAgICAgb3V0ZXJJbmZvLnVzZXMuYWRkKG5ldyBEZXBlbmRlbmN5SW5mbyhpbmxpbmVkSW5mbywgJ2lubGluZWQnKSk7CiAgICAgIH0KICAgIH0KCiAgICByZXN1bHQuZGVmZXJyZWRGaWxlcyA9IGNsb3NlZFdvcmxkLm91dHB1dFVuaXREYXRhCiAgICAgICAgLmNvbXB1dGVEZWZlcnJlZE1hcChjb21waWxlci5vcHRpb25zLCBjbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQpOwogICAgc3RvcHdhdGNoLnN0b3AoKTsKCiAgICByZXN1bHQucHJvZ3JhbSA9IG5ldyBQcm9ncmFtSW5mbygKICAgICAgICBlbnRyeXBvaW50OiBpbmZvQ29sbGVjdG9yCiAgICAgICAgICAgIC5fZW50aXR5VG9JbmZvW2Nsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudC5tYWluRnVuY3Rpb25dLAogICAgICAgIHNpemU6IF9wcm9ncmFtU2l6ZSwKICAgICAgICBkYXJ0MmpzVmVyc2lvbjoKICAgICAgICAgICAgY29tcGlsZXIub3B0aW9ucy5oYXNCdWlsZElkID8gY29tcGlsZXIub3B0aW9ucy5idWlsZElkIDogbnVsbCwKICAgICAgICBjb21waWxhdGlvbk1vbWVudDogbmV3IERhdGVUaW1lLm5vdygpLAogICAgICAgIGNvbXBpbGF0aW9uRHVyYXRpb246IGNvbXBpbGVyLm1lYXN1cmVyLmVsYXBzZWRXYWxsQ2xvY2ssCiAgICAgICAgdG9Kc29uRHVyYXRpb246CiAgICAgICAgICAgIG5ldyBEdXJhdGlvbihtaWxsaXNlY29uZHM6IHN0b3B3YXRjaC5lbGFwc2VkTWlsbGlzZWNvbmRzKSwKICAgICAgICBkdW1wSW5mb0R1cmF0aW9uOiBuZXcgRHVyYXRpb24obWlsbGlzZWNvbmRzOiB0aGlzLnRpbWluZyksCiAgICAgICAgbm9TdWNoTWV0aG9kRW5hYmxlZDogY2xvc2VkV29ybGQuYmFja2VuZFVzYWdlLmlzTm9TdWNoTWV0aG9kVXNlZCwKICAgICAgICBpc1J1bnRpbWVUeXBlVXNlZDogY2xvc2VkV29ybGQuYmFja2VuZFVzYWdlLmlzUnVudGltZVR5cGVVc2VkLAogICAgICAgIGlzSXNvbGF0ZUluVXNlOiBmYWxzZSwKICAgICAgICBpc0Z1bmN0aW9uQXBwbHlVc2VkOiBjbG9zZWRXb3JsZC5iYWNrZW5kVXNhZ2UuaXNGdW5jdGlvbkFwcGx5VXNlZCwKICAgICAgICBpc01pcnJvcnNVc2VkOiBjbG9zZWRXb3JsZC5iYWNrZW5kVXNhZ2UuaXNNaXJyb3JzVXNlZCwKICAgICAgICBtaW5pZmllZDogY29tcGlsZXIub3B0aW9ucy5lbmFibGVNaW5pZmljYXRpb24pOwoKICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CgovLy8gSGVscGVyIGNsYXNzIHRvIHN0b3JlIHdoYXQgZHVtcC1pbmZvIHdpbGwgc2hvdyBmb3IgYSBwaWVjZSBvZiBjb2RlLgovLyBUT0RPKHNpZ211bmQpOiBkZWxldGUgb25jZSB3ZSBubyBsb25nZXIgZW1pdCB0ZXh0IGJ5IGRlZmF1bHQuCmNsYXNzIF9Db2RlRGF0YSBleHRlbmRzIENvZGVTcGFuIHsKICBTdHJpbmdCdWZmZXIgX3RleHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCB0ZXh0ID0+ICckX3RleHQnOwogIGludCBnZXQgbGVuZ3RoID0+IGVuZCAtIHN0YXJ0Owp9CoKvAE5OPAETARZDASk0RgEfIBwuFjgmTUMhLh1GHikuJD0hJwEdGyI8IwFJTwEoPEw8AUslAQ88PC8jJxg3KCIIMQQBMgZMTUwjNzYEATA2Gx0GKU8fAUJFOyQ0JgojMiExIwoICAE4Lx8lIQgIATcgEQQBRTEBLzQBSz4/ICgjIRMGASs2AUgrASQaNCcULyEhUSpCBgE6Ry8tBgE0JAEdEQQBLCcpGiYvJgErOkU7JDErOyYMCiNKISsoOCYMCg9GCAg6PiIvKTkkCggIARsBTyQnEwYBIxYEATcvHDAtKgE/NwE7KyknASYYBAE4LkwSOQFQLA40MzIwBgEiGC5ANQYBGgE5IyEoQRMnBzkBODYBPD1GCBxQKEUIAT42AUsZVQE7MAEqFBweIDAgIiQUJzMkATcZATpKLzAGARYBIBEEAVEGTjg3Ejg5SyEjKSIICD47AREEAT42SixCQi05RUpKE0okEwgEATsgQQQBOSBRBAFAHEQeNBMGLAQCARIfIzsCAVEsSk9NPB5IAgFCTBseAR5EIgEMIgEmASgUAVBDJUgBOzckOSUBOAE9G0gBUAExJSAEAQxJLx9CKQQBQSUgBgQBLCIEAUpIG04qNAEkKRAQSz4oPy44QTFCDBUXBAFLFzkhJRU9Fk4GBAFGJTIuKE4GBAEvTB8vIBkBKhgGBAEdGlBLSTQGBAFEIBUqJhwjBgQBTDAeLk4NEAYEASQlICIEAS80JzcEASo7ETA/EQE0HSEPHwgIBAEkMj5JPk0uNhUdIxFPND0IBAEmTE9GIk9MHQgEATgrFwErATAoTDY/RD8qS04nKkEIBgEtI0kuPEQ/Kk4nKkEIBgFONgEzLEAnMkErSAgGATZPFgEmIkkcGEsvQRhHQ0pHH0s/OAETBAIBSEEjKwwfIQIBI3BhY2thZ2U6Y29tcGlsZXIvc3JjL2R1bXBfaW5mby5kYXJ0NHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2VsZW1lbnRzL2VudGl0aWVzLmRhcnSygy8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGVudGl0aWVzOwoKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Vuc3RhYmxlL2RhcnQyanMuZGFydCcgc2hvdyBBc3luY01vZGlmaWVyOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NhbGxfc3RydWN0dXJlLmRhcnQnIHNob3cgQ2FsbFN0cnVjdHVyZTsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCc7CmltcG9ydCAnbmFtZXMuZGFydCc7CmltcG9ydCAndHlwZXMuZGFydCc7CgovLy8gQWJzdHJhY3QgaW50ZXJmYWNlIGZvciBlbnRpdGllcy4KLy8vCi8vLyBJbXBsZW1lbnQgdGhpcyBkaXJlY3RseSBpZiB0aGUgZW50aXR5IGlzIG5vdCBhIERhcnQgbGFuZ3VhZ2UgZW50aXR5LgovLy8gRW50aXRpZXMgZGVmaW5lZCB3aXRoaW4gdGhlIERhcnQgbGFuZ3VhZ2Ugc2hvdWxkIGltcGxlbWVudCBbRWxlbWVudF0uCi8vLwovLy8gRm9yIGluc3RhbmNlLCB0aGUgSmF2YVNjcmlwdCBiYWNrZW5kIG5lZWQgdG8gY3JlYXRlIHN5bnRoZXRpYyB2YXJpYWJsZXMgZm9yCi8vLyBjYWxsaW5nIGludGVyY2VwdGVkIGNsYXNzZXMgYW5kIHN1Y2ggdmFyaWFibGVzIGRvIG5vdCBjb3JyZXNwb25kIHRvIGFuCi8vLyBlbnRpdHkgaW4gdGhlIERhcnQgc291cmNlIGNvZGUgbm9yIGluIHRoZSB0ZXJtaW5vbG9neSBvZiB0aGUgRGFydCBsYW5ndWFnZQovLy8gYW5kIHNob3VsZCB0aGVyZWZvcmUgaW1wbGVtZW50IFtFbnRpdHldIGRpcmVjdGx5LgphYnN0cmFjdCBjbGFzcyBFbnRpdHkgaW1wbGVtZW50cyBTcGFubmFibGUgewogIFN0cmluZyBnZXQgbmFtZTsKfQoKLy8vIFN0cmlwcGVkIGRvd24gc3VwZXIgaW50ZXJmYWNlIGZvciBsaWJyYXJ5IGxpa2UgZW50aXRpZXMuCi8vLwovLy8gQ3VycmVudGx5IG9ubHkgW0xpYnJhcnlFbGVtZW50XSBidXQgbGF0ZXIgYWxzbyBrZXJuZWwgYmFzZWQgRGFydCBjbGFzc2VzCi8vLyBhbmQvb3IgRGFydC1pbi1KUyBjbGFzc2VzLgphYnN0cmFjdCBjbGFzcyBMaWJyYXJ5RW50aXR5IGV4dGVuZHMgRW50aXR5IHsKICAvLy8gUmV0dXJuIHRoZSBjYW5vbmljYWwgdXJpIHRoYXQgaWRlbnRpZmllcyB0aGlzIGxpYnJhcnkuCiAgVXJpIGdldCBjYW5vbmljYWxVcmk7Cn0KCi8vLyBTdHJpcHBlZCBkb3duIHN1cGVyIGludGVyZmFjZSBmb3IgaW1wb3J0IGVudGl0aWVzLgovLy8KLy8vIFRoZSBbbmFtZV0gcHJvcGVydHkgY29ycmVzcG9uZHMgdG8gdGhlIHByZWZpeCBuYW1lLCBpZiBhbnkuCmNsYXNzIEltcG9ydEVudGl0eSB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIC8vLyBUaGUgY2Fub25pY2FsIFVSSSBvZiB0aGUgbGlicmFyeSB3aGVyZSB0aGlzIGltcG9ydCBvY2N1cnMKICAvLy8gKHdoZXJlIHRoZSBpbXBvcnQgaXMgZGVjbGFyZWQpLgogIGZpbmFsIFVyaSBlbmNsb3NpbmdMaWJyYXJ5VXJpOwoKICAvLy8gV2hldGhlciB0aGUgaW1wb3J0IGlzIGEgZGVmZXJyZWQgaW1wb3J0LgogIGZpbmFsIGJvb2wgaXNEZWZlcnJlZDsKCiAgLy8vIFRoZSB0YXJnZXQgaW1wb3J0IFVSSS4KICBmaW5hbCBVcmkgdXJpOwoKICBJbXBvcnRFbnRpdHkodGhpcy5pc0RlZmVycmVkLCB0aGlzLm5hbWUsIHRoaXMudXJpLCB0aGlzLmVuY2xvc2luZ0xpYnJhcnlVcmkpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnaW1wb3J0KCRuYW1lOiR7aXNEZWZlcnJlZCA/ICcgZGVmZXJyZWQnIDogJyd9KSc7Cn0KCi8vLyBTdHJpcHBlZCBkb3duIHN1cGVyIGludGVyZmFjZSBmb3IgY2xhc3MgbGlrZSBlbnRpdGllcy4KLy8vCi8vLyBDdXJyZW50bHkgb25seSBbQ2xhc3NFbGVtZW50XSBidXQgbGF0ZXIgYWxzbyBrZXJuZWwgYmFzZWQgRGFydCBjbGFzc2VzCi8vLyBhbmQvb3IgRGFydC1pbi1KUyBjbGFzc2VzLgphYnN0cmFjdCBjbGFzcyBDbGFzc0VudGl0eSBleHRlbmRzIEVudGl0eSB7CiAgLy8vIElmIHRoaXMgaXMgYSBub3JtYWwgY2xhc3MsIHRoZSBlbmNsb3NpbmcgbGlicmFyeSBmb3IgdGhpcyBjbGFzcy4gSWYgdGhpcwogIC8vLyBpcyBhIGNsb3N1cmUgY2xhc3MsIHRoZSBlbmNsb3NpbmcgY2xhc3Mgb2YgdGhlIGNsb3N1cmUgZm9yIHdoaWNoIGl0IHdhcwogIC8vLyBjcmVhdGVkLgogIExpYnJhcnlFbnRpdHkgZ2V0IGxpYnJhcnk7CgogIC8vLyBXaGV0aGVyIHRoaXMgaXMgYSBzeW50aGVzaXplZCBjbGFzcyBmb3IgYSBjbG9zdXJpemVkIG1ldGhvZCBvciBsb2NhbAogIC8vLyBmdW5jdGlvbi4KICBib29sIGdldCBpc0Nsb3N1cmU7CgogIC8vLyBXaGV0aGVyIHRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MuCiAgYm9vbCBnZXQgaXNBYnN0cmFjdDsKfQoKYWJzdHJhY3QgY2xhc3MgVHlwZWRlZkVudGl0eSBleHRlbmRzIEVudGl0eSB7CiAgLy8vIFRoZSBsaWJyYXJ5IGluIHdoaWNoIHRoZSB0eXBlZGVmIHdhcyBkZWNsYXJlZC4KICBMaWJyYXJ5RW50aXR5IGdldCBsaWJyYXJ5Owp9CgphYnN0cmFjdCBjbGFzcyBUeXBlVmFyaWFibGVFbnRpdHkgZXh0ZW5kcyBFbnRpdHkgewogIC8vLyBUaGUgY2xhc3Mgb3IgZ2VuZXJpYyBtZXRob2QgdGhhdCBkZWNsYXJlZCB0aGlzIHR5cGUgdmFyaWFibGUuCiAgRW50aXR5IGdldCB0eXBlRGVjbGFyYXRpb247CgogIC8vLyBUaGUgaW5kZXggb2YgdGhpcyB0eXBlIHZhcmlhYmxlIGluIHRoZSB0eXBlIHZhcmlhYmxlcyBvZiBpdHMKICAvLy8gW3R5cGVEZWNsYXJhdGlvbl0uCiAgaW50IGdldCBpbmRleDsKfQoKLy8vIFN0cmlwcGVkIGRvd24gc3VwZXIgaW50ZXJmYWNlIGZvciBtZW1iZXIgbGlrZSBlbnRpdGllcywgdGhhdCBpcywKLy8vIGNvbnN0cnVjdG9ycywgbWV0aG9kcywgZmllbGRzIGV0Yy4KLy8vCi8vLyBDdXJyZW50bHkgb25seSBbTWVtYmVyRWxlbWVudF0gYnV0IGxhdGVyIGFsc28ga2VybmVsIGJhc2VkIERhcnQgbWVtYmVycwovLy8gYW5kL29yIERhcnQtaW4tSlMgcHJvcGVydGllcy4KYWJzdHJhY3QgY2xhc3MgTWVtYmVyRW50aXR5IGV4dGVuZHMgRW50aXR5IHsKICAvLy8gVGhlIFtOYW1lXSBvZiBtZW1iZXIgd2hpY2ggdGFrZXMgcHJpdmFjeSBhbmQgZ2V0dGVyL3NldHRlciBuYW1pbmcgaW50bwogIC8vLyBhY2NvdW50LgogIE5hbWUgZ2V0IG1lbWJlck5hbWU7CgogIC8vLyBXaGV0aGVyIHRoaXMgaXMgYSBtZW1iZXIgb2YgYSBsaWJyYXJ5LgogIGJvb2wgZ2V0IGlzVG9wTGV2ZWw7CgogIC8vLyBXaGV0aGVyIHRoaXMgaXMgYSBzdGF0aWMgbWVtYmVyIG9mIGEgY2xhc3MuCiAgYm9vbCBnZXQgaXNTdGF0aWM7CgogIC8vLyBXaGV0aGVyIHRoaXMgaXMgYW4gaW5zdGFuY2UgbWVtYmVyIG9mIGEgY2xhc3MuCiAgYm9vbCBnZXQgaXNJbnN0YW5jZU1lbWJlcjsKCiAgLy8vIFdoZXRoZXIgdGhpcyBpcyBhIGNvbnN0cnVjdG9yLgogIGJvb2wgZ2V0IGlzQ29uc3RydWN0b3I7CgogIC8vLyBXaGV0aGVyIHRoaXMgaXMgYSBmaWVsZC4KICBib29sIGdldCBpc0ZpZWxkOwoKICAvLy8gV2hldGhlciB0aGlzIGlzIGEgbm9ybWFsIG1ldGhvZCAobmVpdGhlciBjb25zdHJ1Y3RvciwgZ2V0dGVyIG9yIHNldHRlcikKICAvLy8gb3Igb3BlcmF0b3IgbWV0aG9kLgogIGJvb2wgZ2V0IGlzRnVuY3Rpb247CgogIC8vLyBXaGV0aGVyIHRoaXMgaXMgYSBnZXR0ZXIuCiAgYm9vbCBnZXQgaXNHZXR0ZXI7CgogIC8vLyBXaGV0aGVyIHRoaXMgaXMgYSBzZXR0ZXIuCiAgYm9vbCBnZXQgaXNTZXR0ZXI7CgogIC8vLyBXaGV0aGVyIHRoaXMgbWVtYmVyIGlzIGFzc2lnbmFibGUsIGkuZS4gYSBub24tZmluYWwsIG5vbi1jb25zdCBmaWVsZC4KICBib29sIGdldCBpc0Fzc2lnbmFibGU7CgogIC8vLyBXaGV0aGVyIHRoaXMgbWVtYmVyIGlzIGNvbnN0YW50LCBpLmUuIGEgY29uc3RhbnQgZmllbGQgb3IgY29uc3RydWN0b3IuCiAgYm9vbCBnZXQgaXNDb25zdDsKCiAgLy8vIFdoZXRoZXIgdGhpcyBtZW1iZXIgaXMgYWJzdHJhY3QsIGkuZS4gYW4gYWJzdHJhY3QgbWV0aG9kLCBnZXR0ZXIgb3IKICAvLy8gc2V0dGVyLgogIGJvb2wgZ2V0IGlzQWJzdHJhY3Q7CgogIC8vLyBUaGUgZW5jbG9zaW5nIGNsYXNzIGlmIHRoaXMgaXMgYSBjb25zdHJ1Y3RvciwgaW5zdGFuY2UgbWVtYmVyIG9yCiAgLy8vIHN0YXRpYyBtZW1iZXIgb2YgYSBjbGFzcy4KICBDbGFzc0VudGl0eSBnZXQgZW5jbG9zaW5nQ2xhc3M7CgogIC8vLyBUaGUgZW5jbG9zaW5nIGxpYnJhcnkgaWYgdGhpcyBpcyBhIGxpYnJhcnkgbWVtYmVyLCBvdGhlcndpc2UgdGhlCiAgLy8vIGVuY2xvc2luZyBsaWJyYXJ5IG9mIHRoZSBbZW5jbG9zaW5nQ2xhc3NdLgogIExpYnJhcnlFbnRpdHkgZ2V0IGxpYnJhcnk7Cn0KCi8vLyBTdHJpcHBlZCBkb3duIHN1cGVyIGludGVyZmFjZSBmb3IgZmllbGQgbGlrZSBlbnRpdGllcy4KLy8vCi8vLyBDdXJyZW50bHkgb25seSBbRmllbGRFbGVtZW50XSBidXQgbGF0ZXIgYWxzbyBrZXJuZWwgYmFzZWQgRGFydCBmaWVsZHMKLy8vIGFuZC9vciBEYXJ0LWluLUpTIGZpZWxkLWxpa2UgcHJvcGVydGllcy4KYWJzdHJhY3QgY2xhc3MgRmllbGRFbnRpdHkgZXh0ZW5kcyBNZW1iZXJFbnRpdHkge30KCi8vLyBTdHJpcHBlZCBkb3duIHN1cGVyIGludGVyZmFjZSBmb3IgZnVuY3Rpb24gbGlrZSBlbnRpdGllcy4KLy8vCi8vLyBDdXJyZW50bHkgb25seSBbTWV0aG9kRWxlbWVudF0gYnV0IGxhdGVyIGFsc28ga2VybmVsIGJhc2VkIERhcnQgY29uc3RydWN0b3JzCi8vLyBhbmQgbWV0aG9kcyBhbmQvb3IgRGFydC1pbi1KUyBmdW5jdGlvbi1saWtlIHByb3BlcnRpZXMuCmFic3RyYWN0IGNsYXNzIEZ1bmN0aW9uRW50aXR5IGV4dGVuZHMgTWVtYmVyRW50aXR5IHsKICAvLy8gV2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIGV4dGVybmFsLCBpLmUuIHRoZSBib2R5IGlzIG5vdCBkZWZpbmVkIGluIHRlcm1zCiAgLy8vIG9mIERhcnQgY29kZS4KICBib29sIGdldCBpc0V4dGVybmFsOwoKICAvLy8gVGhlIHN0cnVjdHVyZSBvZiB0aGUgZnVuY3Rpb24gcGFyYW1ldGVycy4KICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgZ2V0IHBhcmFtZXRlclN0cnVjdHVyZTsKCiAgLy8vIFRoZSBzeW5jaHJvbm91cy9hc3luY2hyb25vdXMgbWFya2VyIG9uIHRoaXMgZnVuY3Rpb24uCiAgQXN5bmNNYXJrZXIgZ2V0IGFzeW5jTWFya2VyOwp9CgovLy8gRW51bSBmb3IgdGhlIHN5bmNocm9ub3VzL2FzeW5jaHJvbm91cyBmdW5jdGlvbiBib2R5IG1vZGlmaWVycy4KY2xhc3MgQXN5bmNNYXJrZXIgewogIC8vLyBUaGUgZGVmYXVsdCBmdW5jdGlvbiBib2R5IG1hcmtlci4KICBzdGF0aWMgY29uc3QgQXN5bmNNYXJrZXIgU1lOQyA9IGNvbnN0IEFzeW5jTWFya2VyLl8oQXN5bmNNb2RpZmllci5TeW5jKTsKCiAgLy8vIFRoZSBgc3luYypgIGZ1bmN0aW9uIGJvZHkgbWFya2VyLgogIHN0YXRpYyBjb25zdCBBc3luY01hcmtlciBTWU5DX1NUQVIgPQogICAgICBjb25zdCBBc3luY01hcmtlci5fKEFzeW5jTW9kaWZpZXIuU3luY1N0YXIsIGlzWWllbGRpbmc6IHRydWUpOwoKICAvLy8gVGhlIGBhc3luY2AgZnVuY3Rpb24gYm9keSBtYXJrZXIuCiAgc3RhdGljIGNvbnN0IEFzeW5jTWFya2VyIEFTWU5DID0KICAgICAgY29uc3QgQXN5bmNNYXJrZXIuXyhBc3luY01vZGlmaWVyLkFzeW5jLCBpc0FzeW5jOiB0cnVlKTsKCiAgLy8vIFRoZSBgYXN5bmMqYCBmdW5jdGlvbiBib2R5IG1hcmtlci4KICBzdGF0aWMgY29uc3QgQXN5bmNNYXJrZXIgQVNZTkNfU1RBUiA9IGNvbnN0IEFzeW5jTWFya2VyLl8oCiAgICAgIEFzeW5jTW9kaWZpZXIuQXN5bmNTdGFyLAogICAgICBpc0FzeW5jOiB0cnVlLAogICAgICBpc1lpZWxkaW5nOiB0cnVlKTsKCiAgLy8vIElzIGB0cnVlYCBpZiB0aGlzIG1hcmtlciBkZWZpbmVzIHRoZSBmdW5jdGlvbiBib2R5IHRvIGhhdmUgYW4KICAvLy8gYXN5bmNocm9ub3VzIHJlc3VsdCwgdGhhdCBpcywgZWl0aGVyIGEgW0Z1dHVyZV0gb3IgYSBbU3RyZWFtXS4KICBmaW5hbCBib29sIGlzQXN5bmM7CgogIC8vLyBJcyBgdHJ1ZWAgaWYgdGhpcyBtYXJrZXIgZGVmaW5lcyB0aGUgZnVuY3Rpb24gYm9keSB0byBoYXZlIGEgcGx1cmFsCiAgLy8vIHJlc3VsdCwgdGhhdCBpcywgZWl0aGVyIGFuIFtJdGVyYWJsZV0gb3IgYSBbU3RyZWFtXS4KICBmaW5hbCBib29sIGlzWWllbGRpbmc7CgogIGZpbmFsIEFzeW5jTW9kaWZpZXIgYXN5bmNQYXJzZXJTdGF0ZTsKCiAgY29uc3QgQXN5bmNNYXJrZXIuXyh0aGlzLmFzeW5jUGFyc2VyU3RhdGUsCiAgICAgIHt0aGlzLmlzQXN5bmM6IGZhbHNlLCB0aGlzLmlzWWllbGRpbmc6IGZhbHNlfSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnJHtpc0FzeW5jID8gJ2FzeW5jJyA6ICdzeW5jJ30ke2lzWWllbGRpbmcgPyAnKicgOiAnJ30nOwogIH0KCiAgLy8vIENhbm9uaWNhbCBsaXN0IG9mIG1hcmtlciB2YWx1ZXMuCiAgLy8vCiAgLy8vIEFkZGVkIHRvIG1ha2UgW0FzeW5jTWFya2VyXSBlbnVtLWxpa2UuCiAgc3RhdGljIGNvbnN0IExpc3Q8QXN5bmNNYXJrZXI+IHZhbHVlcyA9IGNvbnN0IDxBc3luY01hcmtlcj5bCiAgICBTWU5DLAogICAgU1lOQ19TVEFSLAogICAgQVNZTkMsCiAgICBBU1lOQ19TVEFSCiAgXTsKCiAgLy8vIEluZGV4IHRvIHRoaXMgbWFya2VyIHdpdGhpbiBbdmFsdWVzXS4KICAvLy8KICAvLy8gQWRkZWQgdG8gbWFrZSBbQXN5bmNNYXJrZXJdIGVudW0tbGlrZS4KICBpbnQgZ2V0IGluZGV4ID0+IHZhbHVlcy5pbmRleE9mKHRoaXMpOwp9CgovLy8gU3RyaXBwZWQgZG93biBzdXBlciBpbnRlcmZhY2UgZm9yIGNvbnN0cnVjdG9yIGxpa2UgZW50aXRpZXMuCi8vLwovLy8gQ3VycmVudGx5IG9ubHkgW0NvbnN0cnVjdG9yRWxlbWVudF0gYnV0IGxhdGVyIGFsc28ga2VybmVsIGJhc2VkIERhcnQKLy8vIGNvbnN0cnVjdG9ycyBhbmQvb3IgRGFydC1pbi1KUyBjb25zdHJ1Y3Rvci1saWtlIHByb3BlcnRpZXMuCi8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSBmYWN0b3J5IGNvbnN0cnVjdG9ycyBmcm9tIHRoZSBzZXQgb2YKLy8gY29uc3RydWN0b3JzLgphYnN0cmFjdCBjbGFzcyBDb25zdHJ1Y3RvckVudGl0eSBleHRlbmRzIEZ1bmN0aW9uRW50aXR5IHsKICAvLy8gV2hldGhlciB0aGlzIGlzIGEgZ2VuZXJhdGl2ZSBjb25zdHJ1Y3RvciwgcG9zc2libHkgcmVkaXJlY3RpbmcuCiAgYm9vbCBnZXQgaXNHZW5lcmF0aXZlQ29uc3RydWN0b3I7CgogIC8vLyBXaGV0aGVyIHRoaXMgaXMgYSBmYWN0b3J5IGNvbnN0cnVjdG9yLCBwb3NzaWJseSByZWRpcmVjdGluZy4KICBib29sIGdldCBpc0ZhY3RvcnlDb25zdHJ1Y3RvcjsKCiAgLy8vIFdoZXRoZXIgdGhpcyBpcyBhIGBmcm9tRW52aXJvbm1lbnRgIGNvbnN0IGNvbnN0cnVjdG9yIGluIGBpbnRgLCBgYm9vbGAgb3IKICAvLy8gYFN0cmluZ2AuCiAgYm9vbCBnZXQgaXNGcm9tRW52aXJvbm1lbnRDb25zdHJ1Y3RvcjsKfQoKLy8vIFRoZSBjb25zdHJ1Y3RvciBib2R5IGZvciBhIFtDb25zdHJ1Y3RvckVudGl0eV0uCi8vLwovLy8gVGhpcyBpcyB1c2VkIG9ubHkgaW4gdGhlIGJhY2tlbmQgdG8gc3BsaXQgZW5jb2Rpbmcgb2YgYSBEYXJ0IGNvbnN0cnVjdG9yCi8vLyBpbnRvIHR3byBKYXZhU2NyaXB0IGZ1bmN0aW9uczsgdGhlIGNvbnN0cnVjdG9yIGFuZCB0aGUgY29uc3RydWN0b3IgYm9keS4KLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgd2hlbiBtb2RlbHggaXMgcmVtb3ZlZC4gQ29uc3RydWN0b3IgYm9kaWVzCi8vIHNob3VsZCB0aGVuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgd2l0aCB0aGUgSi1tb2RlbC4KYWJzdHJhY3QgY2xhc3MgQ29uc3RydWN0b3JCb2R5RW50aXR5IGV4dGVuZHMgRnVuY3Rpb25FbnRpdHkgewogIC8vLyBUaGUgY29uc3RydWN0b3IgZm9yIHdoaWNoIHRoaXMgY29uc3RydWN0b3IgYm9keSB3YXMgY3JlYXRlZC4KICBDb25zdHJ1Y3RvckVudGl0eSBnZXQgY29uc3RydWN0b3I7Cn0KCi8vLyBBbiBlbnRpdHkgdGhhdCBkZWZpbmVzIGEgbG9jYWwgZW50aXR5IChtZW1vcnkgc2xvdCkgaW4gZ2VuZXJhdGVkIGNvZGUuCi8vLwovLy8gUGFyYW1ldGVycywgbG9jYWwgdmFyaWFibGVzIGFuZCBsb2NhbCBmdW5jdGlvbnMgKGNhbikgZGVmaW5lIGxvY2FsIGVudGl0eQovLy8gYW5kIHRodXMgaW1wbGVtZW50IFtMb2NhbF0gdGhyb3VnaCBbTG9jYWxFbGVtZW50XS4gRm9yIG5vbi1lbGVtZW50IGxvY2FscywKLy8vIGxpa2UgYHRoaXNgIGFuZCBib3hlcywgc3BlY2lhbGl6ZWQgW0xvY2FsXSBjbGFzc2VzIGFyZSBjcmVhdGVkLgovLy8KLy8vIFR5cGUgdmFyaWFibGVzIGNhbiBpbnRyb2R1Y2UgbG9jYWxzIGluIGZhY3RvcmllcyBhbmQgY29uc3RydWN0b3JzCi8vLyBidXQgc2luY2Ugb25lIHR5cGUgdmFyaWFibGUgY2FuIGludHJvZHVjZSBkaWZmZXJlbnQgbG9jYWxzIGluIGRpZmZlcmVudAovLy8gZmFjdG9yaWVzIGFuZCBjb25zdHJ1Y3RvcnMgaXQgaXMgbm90IGl0c2VsZiBhIFtMb2NhbF0gYnV0IGluc3RlYWQKLy8vIGEgbm9uLWVsZW1lbnQgW0xvY2FsXSBpcyBjcmVhdGVkIHRocm91Z2ggYSBzcGVjaWFsaXplZCBjbGFzcy4KYWJzdHJhY3QgY2xhc3MgTG9jYWwgZXh0ZW5kcyBFbnRpdHkge30KCi8vLyBUaGUgc3RydWN0dXJlIG9mIGZ1bmN0aW9uIHBhcmFtZXRlcnMuCmNsYXNzIFBhcmFtZXRlclN0cnVjdHVyZSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtQYXJhbWV0ZXJTdHJ1Y3R1cmVdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAncGFyYW1ldGVyLXN0cnVjdHVyZSc7CgogIC8vLyBUaGUgbnVtYmVyIG9mIHJlcXVpcmVkIChwb3NpdGlvbmFsKSBwYXJhbWV0ZXJzLgogIGZpbmFsIGludCByZXF1aXJlZFBhcmFtZXRlcnM7CgogIC8vLyBUaGUgbnVtYmVyIG9mIHBvc2l0aW9uYWwgcGFyYW1ldGVycy4KICBmaW5hbCBpbnQgcG9zaXRpb25hbFBhcmFtZXRlcnM7CgogIC8vLyBUaGUgbmFtZWQgcGFyYW1ldGVycyBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkuCiAgZmluYWwgTGlzdDxTdHJpbmc+IG5hbWVkUGFyYW1ldGVyczsKCiAgLy8vIFRoZSBudW1iZXIgb2YgdHlwZSBwYXJhbWV0ZXJzLgogIGZpbmFsIGludCB0eXBlUGFyYW1ldGVyczsKCiAgY29uc3QgUGFyYW1ldGVyU3RydWN0dXJlKHRoaXMucmVxdWlyZWRQYXJhbWV0ZXJzLCB0aGlzLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLAogICAgICB0aGlzLm5hbWVkUGFyYW1ldGVycywgdGhpcy50eXBlUGFyYW1ldGVycyk7CgogIGNvbnN0IFBhcmFtZXRlclN0cnVjdHVyZS5nZXR0ZXIoKSA6IHRoaXMoMCwgMCwgY29uc3QgPFN0cmluZz5bXSwgMCk7CgogIGNvbnN0IFBhcmFtZXRlclN0cnVjdHVyZS5zZXR0ZXIoKSA6IHRoaXMoMSwgMSwgY29uc3QgPFN0cmluZz5bXSwgMCk7CgogIGZhY3RvcnkgUGFyYW1ldGVyU3RydWN0dXJlLmZyb21UeXBlKEZ1bmN0aW9uVHlwZSB0eXBlKSB7CiAgICByZXR1cm4gbmV3IFBhcmFtZXRlclN0cnVjdHVyZSgKICAgICAgICB0eXBlLnBhcmFtZXRlclR5cGVzLmxlbmd0aCwKICAgICAgICB0eXBlLnBhcmFtZXRlclR5cGVzLmxlbmd0aCArIHR5cGUub3B0aW9uYWxQYXJhbWV0ZXJUeXBlcy5sZW5ndGgsCiAgICAgICAgdHlwZS5uYW1lZFBhcmFtZXRlcnMsCiAgICAgICAgdHlwZS50eXBlVmFyaWFibGVzLmxlbmd0aCk7CiAgfQoKICAvLy8gRGVzZXJpYWxpemVzIGEgW1BhcmFtZXRlclN0cnVjdHVyZV0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBQYXJhbWV0ZXJTdHJ1Y3R1cmUucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGludCByZXF1aXJlZFBhcmFtZXRlcnMgPSBzb3VyY2UucmVhZEludCgpOwogICAgaW50IHBvc2l0aW9uYWxQYXJhbWV0ZXJzID0gc291cmNlLnJlYWRJbnQoKTsKICAgIExpc3Q8U3RyaW5nPiBuYW1lZFBhcmFtZXRlcnMgPSBzb3VyY2UucmVhZFN0cmluZ3MoKTsKICAgIGludCB0eXBlUGFyYW1ldGVycyA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IFBhcmFtZXRlclN0cnVjdHVyZShyZXF1aXJlZFBhcmFtZXRlcnMsIHBvc2l0aW9uYWxQYXJhbWV0ZXJzLAogICAgICAgIG5hbWVkUGFyYW1ldGVycywgdHlwZVBhcmFtZXRlcnMpOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbUGFyYW1ldGVyU3RydWN0dXJlXSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUludChyZXF1aXJlZFBhcmFtZXRlcnMpOwogICAgc2luay53cml0ZUludChwb3NpdGlvbmFsUGFyYW1ldGVycyk7CiAgICBzaW5rLndyaXRlU3RyaW5ncyhuYW1lZFBhcmFtZXRlcnMpOwogICAgc2luay53cml0ZUludCh0eXBlUGFyYW1ldGVycyk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgLy8vIFRoZSBudW1iZXIgb2Ygb3B0aW9uYWwgcGFyYW1ldGVycyAocG9zaXRpb25hbCBvciBuYW1lZCkuCiAgaW50IGdldCBvcHRpb25hbFBhcmFtZXRlcnMgPT4KICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnMgLSByZXF1aXJlZFBhcmFtZXRlcnMgKyBuYW1lZFBhcmFtZXRlcnMubGVuZ3RoOwoKICAvLy8gVGhlIHRvdGFsIG51bWJlciBvZiBwYXJhbWV0ZXJzIChyZXF1aXJlZCBvciBvcHRpb25hbCkuCiAgaW50IGdldCB0b3RhbFBhcmFtZXRlcnMgPT4gcG9zaXRpb25hbFBhcmFtZXRlcnMgKyBuYW1lZFBhcmFtZXRlcnMubGVuZ3RoOwoKICAvLy8gUmV0dXJucyB0aGUgW0NhbGxTdHJ1Y3R1cmVdIGNvcnJlc3BvbmRpbmcgdG8gYSBjYWxsIHNpdGUgcGFzc2luZyBhbGwKICAvLy8gcGFyYW1ldGVycyBib3RoIHJlcXVpcmVkIGFuZCBvcHRpb25hbC4KICBDYWxsU3RydWN0dXJlIGdldCBjYWxsU3RydWN0dXJlIHsKICAgIHJldHVybiBuZXcgQ2FsbFN0cnVjdHVyZShwb3NpdGlvbmFsUGFyYW1ldGVycyArIG5hbWVkUGFyYW1ldGVycy5sZW5ndGgsCiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzLCB0eXBlUGFyYW1ldGVycyk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IEhhc2hpbmcubGlzdEhhc2goCiAgICAgIG5hbWVkUGFyYW1ldGVycywKICAgICAgSGFzaGluZy5vYmplY3RIYXNoKAogICAgICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnMsCiAgICAgICAgICBIYXNoaW5nLm9iamVjdEhhc2goCiAgICAgICAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJzLCBIYXNoaW5nLm9iamVjdEhhc2godHlwZVBhcmFtZXRlcnMpKSkpOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIFBhcmFtZXRlclN0cnVjdHVyZSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKHJlcXVpcmVkUGFyYW1ldGVycyAhPSBvdGhlci5yZXF1aXJlZFBhcmFtZXRlcnMgfHwKICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVycyAhPSBvdGhlci5wb3NpdGlvbmFsUGFyYW1ldGVycyB8fAogICAgICAgIHR5cGVQYXJhbWV0ZXJzICE9IG90aGVyLnR5cGVQYXJhbWV0ZXJzIHx8CiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCAhPSBvdGhlci5uYW1lZFBhcmFtZXRlcnMubGVuZ3RoKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZWRQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChuYW1lZFBhcmFtZXRlcnNbaV0gIT0gb3RoZXIubmFtZWRQYXJhbWV0ZXJzW2ldKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8vLyBTaG9ydCB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIHVzZSBmb3IgdGVzdGluZy4KICBTdHJpbmcgZ2V0IHNob3J0VGV4dCB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBpZiAodHlwZVBhcmFtZXRlcnMgIT0gMCkgewogICAgICBzYi53cml0ZSgnPCcpOwogICAgICBzYi53cml0ZSh0eXBlUGFyYW1ldGVycyk7CiAgICAgIHNiLndyaXRlKCc+Jyk7CiAgICB9CiAgICBzYi53cml0ZSgnKCcpOwogICAgc2Iud3JpdGUocG9zaXRpb25hbFBhcmFtZXRlcnMpOwogICAgaWYgKG5hbWVkUGFyYW1ldGVycy5sZW5ndGggPiAwKSB7CiAgICAgIHNiLndyaXRlKCcsJyk7CiAgICAgIHNiLndyaXRlKG5hbWVkUGFyYW1ldGVycy5qb2luKCcsJykpOwogICAgfQogICAgc2Iud3JpdGUoJyknKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoJ1BhcmFtZXRlclN0cnVjdHVyZSgnKTsKICAgIHNiLndyaXRlKCdyZXF1aXJlZFBhcmFtZXRlcnM9JHJlcXVpcmVkUGFyYW1ldGVycywnKTsKICAgIHNiLndyaXRlKCdwb3NpdGlvbmFsUGFyYW1ldGVycz0kcG9zaXRpb25hbFBhcmFtZXRlcnMsJyk7CiAgICBzYi53cml0ZSgnbmFtZWRQYXJhbWV0ZXJzPXske25hbWVkUGFyYW1ldGVycy5qb2luKCcsJyl9fSwnKTsKICAgIHNiLndyaXRlKCd0eXBlUGFyYW1ldGVycz0kdHlwZVBhcmFtZXRlcnMpJyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIGludCBnZXQgc2l6ZSA9PgogICAgICBwb3NpdGlvbmFsUGFyYW1ldGVycyArIHR5cGVQYXJhbWV0ZXJzICsgbmFtZWRQYXJhbWV0ZXJzLmxlbmd0aDsKfQqBhgBOTjwBEgFNARkuPRwVFQElBElKBFBLTzYtEwIBPQRNHy49GAIBNwRAFRUBQCYhAS8ZAR0RAVABDEkCATsESx8sT04PHQFLEBYBKRcCAS41HQIBM0QeAUMZEQIBRScETCItTQ8XAS0XATIVATUdASUaAR8UAU4aFwEgFQEgFQFMGQFNFAFKDhcBRyAiAUcxHQIBOwRKLTMBPgRRPDVPFBcBMC0BPB8CAUMUKEsBKCdFASgjPwEpPR8VGQFERRYBSjsZASgBLTYBDBZEBAEnBi0/Cg8LDwUBLAYtKQIBQQRJQEQROkYkAUMhAVAQKQIBNARNTU81PkMlAgFLBE5PRARGTEZCJwEqG0wdMwE2IAErIgEyJgElHAFPMgFHAUcBOyMkSR4kBAFARRcvMTkrFUwqBAE2KBUnKSgjEwQBPyBKAT1MAUstJEwqBAEMKBcaIB5JAQwcLTQ6PjJCFAY3PBYIBhEEATQZKh8VIBUGEyQmFSsGExoEAQwWKiU5PUExGgQBEkYCAStwYWNrYWdlOmNvbXBpbGVyL3NyYy9lbGVtZW50cy9lbnRpdGllcy5kYXJ0KnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2VucXVldWUuZGFydMAASZQvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmVucXVldWU7CgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbicgc2hvdyBRdWV1ZTsKCmltcG9ydCAnY29tbW9uL2NvZGVnZW4uZGFydCc7CmltcG9ydCAnY29tbW9uL3Rhc2tzLmRhcnQnIHNob3cgQ29tcGlsZXJUYXNrOwppbXBvcnQgJ2NvbW1vbi93b3JrLmRhcnQnIHNob3cgV29ya0l0ZW07CmltcG9ydCAnY29tbW9uLmRhcnQnOwppbXBvcnQgJ2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IEVsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICdjb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJ2NvbXBpbGVyLmRhcnQnIHNob3cgQ29tcGlsZXI7CmltcG9ydCAnZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnaW5mZXJyZXIvdHlwZXMuZGFydCc7CmltcG9ydCAnanNfYmFja2VuZC9hbm5vdGF0aW9ucy5kYXJ0JzsKaW1wb3J0ICdqc19iYWNrZW5kL2JhY2tlbmQuZGFydCcgc2hvdyBDb2RlZ2VuSW5wdXRzOwppbXBvcnQgJ2pzX2JhY2tlbmQvZW5xdWV1ZXIuZGFydCc7CmltcG9ydCAndW5pdmVyc2UvbWVtYmVyX3VzYWdlLmRhcnQnOwppbXBvcnQgJ3VuaXZlcnNlL3Jlc29sdXRpb25fd29ybGRfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICd1bml2ZXJzZS93b3JsZF9idWlsZGVyLmRhcnQnOwppbXBvcnQgJ3VuaXZlcnNlL3VzZS5kYXJ0JwogICAgc2hvdwogICAgICAgIENvbnN0YW50VXNlLAogICAgICAgIER5bmFtaWNVc2UsCiAgICAgICAgU3RhdGljVXNlLAogICAgICAgIFN0YXRpY1VzZUtpbmQsCiAgICAgICAgVHlwZVVzZSwKICAgICAgICBUeXBlVXNlS2luZDsKaW1wb3J0ICd1bml2ZXJzZS93b3JsZF9pbXBhY3QuZGFydCcKICAgIHNob3cgSW1wYWN0U3RyYXRlZ3ksIEltcGFjdFVzZUNhc2UsIFdvcmxkSW1wYWN0LCBXb3JsZEltcGFjdFZpc2l0b3I7CmltcG9ydCAndXRpbC9lbnVtc2V0LmRhcnQnOwppbXBvcnQgJ3V0aWwvdXRpbC5kYXJ0JyBzaG93IFNldGxldDsKaW1wb3J0ICd3b3JsZC5kYXJ0JyBzaG93IEpDbG9zZWRXb3JsZDsKCmNsYXNzIEVucXVldWVUYXNrIGV4dGVuZHMgQ29tcGlsZXJUYXNrIHsKICBSZXNvbHV0aW9uRW5xdWV1ZXIgX3Jlc29sdXRpb247CiAgQ29kZWdlbkVucXVldWVyIGNvZGVnZW5FbnF1ZXVlckZvclRlc3Rpbmc7CiAgZmluYWwgQ29tcGlsZXIgY29tcGlsZXI7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgbmFtZSA9PiAnRW5xdWV1ZSc7CgogIEVucXVldWVUYXNrKENvbXBpbGVyIGNvbXBpbGVyKQogICAgICA6IHRoaXMuY29tcGlsZXIgPSBjb21waWxlciwKICAgICAgICBzdXBlcihjb21waWxlci5tZWFzdXJlcik7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGUgbmVlZCBmb3IgdGhpcy4KICBib29sIGdldCBoYXNSZXNvbHV0aW9uID0+IF9yZXNvbHV0aW9uICE9IG51bGw7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGUgbmVlZCBmb3IgdGhpcy4KICBSZXNvbHV0aW9uRW5xdWV1ZXIgZ2V0IHJlc29sdXRpb24gewogICAgYXNzZXJ0KAogICAgICAgIF9yZXNvbHV0aW9uICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoTk9fTE9DQVRJT05fU1BBTk5BQkxFLAogICAgICAgICAgICAiUmVzb2x1dGlvbkVucXVldWVyIGhhcyBub3QgYmVlbiBjcmVhdGVkIHlldC4iKSk7CiAgICByZXR1cm4gX3Jlc29sdXRpb247CiAgfQoKICBSZXNvbHV0aW9uRW5xdWV1ZXIgY3JlYXRlUmVzb2x1dGlvbkVucXVldWVyKCkgewogICAgcmV0dXJuIF9yZXNvbHV0aW9uID8/PSBjb21waWxlci5mcm9udGVuZFN0cmF0ZWd5CiAgICAgICAgLmNyZWF0ZVJlc29sdXRpb25FbnF1ZXVlcih0aGlzLCBjb21waWxlcikKICAgICAgICAgIC4ub25FbXB0eUZvclRlc3RpbmcgPSBjb21waWxlci5vblJlc29sdXRpb25RdWV1ZUVtcHR5Rm9yVGVzdGluZzsKICB9CgogIEVucXVldWVyIGNyZWF0ZUNvZGVnZW5FbnF1ZXVlcigKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLAogICAgICBDb2RlZ2VuSW5wdXRzIGNvZGVnZW5JbnB1dHMsCiAgICAgIENvZGVnZW5SZXN1bHRzIGNvZGVnZW5SZXN1bHRzKSB7CiAgICBFbnF1ZXVlciBlbnF1ZXVlciA9IGNvbXBpbGVyLmJhY2tlbmRTdHJhdGVneS5jcmVhdGVDb2RlZ2VuRW5xdWV1ZXIodGhpcywKICAgICAgICBjbG9zZWRXb3JsZCwgZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cywgY29kZWdlbklucHV0cywgY29kZWdlblJlc3VsdHMpCiAgICAgIC4ub25FbXB0eUZvclRlc3RpbmcgPSBjb21waWxlci5vbkNvZGVnZW5RdWV1ZUVtcHR5Rm9yVGVzdGluZzsKICAgIGlmIChyZXRhaW5EYXRhRm9yVGVzdGluZykgewogICAgICBjb2RlZ2VuRW5xdWV1ZXJGb3JUZXN0aW5nID0gZW5xdWV1ZXI7CiAgICB9CiAgICByZXR1cm4gZW5xdWV1ZXI7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBFbnF1ZXVlciB7CiAgLy8vIElmIGB0cnVlYCB0aGUgY2hlY2tpbmcgZm9yIHVuZW5xdWV1ZWQgbWVtYmVycyBpcyBza2lwcGVkLiBUaGUgY3VycmVudAogIC8vLyBpbXBsZW1lbnRhdGlvbiByZWdpc3RlcnMgcGFyYW1ldGVyIHVzYWdlcyBhcyBhIHNpZGUtZWZmZWN0IHNvIHVuaXQKICAvLy8gdGVzdGluZyBvZiBtZW1iZXIgdXNhZ2Ugd2UgbmVlZCB0byB0ZXN0IGJvdGggd2l0aCBhbmQgd2l0aG91dCB0aGUKICAvLy8gZW5xdWV1ZXIgY2hlY2suCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogW2NoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeV0gc2hvdWxkIG5vdCBoYXZlCiAgLy8gc2lkZS1lZmZlY3RzLgogIHN0YXRpYyBib29sIHNraXBFbnF1ZXVlckNoZWNrRm9yVGVzdGluZyA9IGZhbHNlOwoKICBXb3JsZEJ1aWxkZXIgZ2V0IHdvcmxkQnVpbGRlcjsKCiAgdm9pZCBvcGVuKEltcGFjdFN0cmF0ZWd5IGltcGFjdFN0cmF0ZWd5LCBGdW5jdGlvbkVudGl0eSBtYWluTWV0aG9kLAogICAgICBJdGVyYWJsZTxVcmk+IGxpYnJhcmllcyk7CiAgdm9pZCBjbG9zZSgpOwoKICAvLy8gUmV0dXJucyBbOnRydWU6XSBpZiB0aGlzIGVucXVldWVyIGlzIHRoZSByZXNvbHV0aW9uIGVucXVldWVyLgogIGJvb2wgZ2V0IGlzUmVzb2x1dGlvblF1ZXVlOwoKICBib29sIHF1ZXVlSXNDbG9zZWQ7CgogIGJvb2wgZ2V0IHF1ZXVlSXNFbXB0eTsKCiAgSW1wYWN0VXNlQ2FzZSBnZXQgaW1wYWN0VXNlOwoKICB2b2lkIGZvckVhY2godm9pZCBmKFdvcmtJdGVtIHdvcmspKTsKCiAgLy8vIEFwcGx5IHRoZSBbd29ybGRJbXBhY3RdIHRvIHRoaXMgZW5xdWV1ZXIuIElmIHRoZSBbaW1wYWN0U291cmNlXSBpcwogIC8vLyBwcm92aWRlZCB0aGUgaW1wYWN0IHN0cmF0ZWd5IHdpbGwgcmVtb3ZlIGl0IGZyb20gdGhlIGVsZW1lbnQgaW1wYWN0IGNhY2hlLAogIC8vLyBpZiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLgogIHZvaWQgYXBwbHlJbXBhY3QoV29ybGRJbXBhY3Qgd29ybGRJbXBhY3QsIHt2YXIgaW1wYWN0U291cmNlfSk7CiAgYm9vbCBjaGVja05vRW5xdWV1ZWRJbnZva2VkSW5zdGFuY2VNZXRob2RzKAogICAgICBFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50KTsKCiAgLy8vIENoZWNrIHRoZSBlbnF1ZXVlciBxdWV1ZSBpcyBlbXB0eSBvciBmYWlsIG90aGVyd2lzZS4KICB2b2lkIGNoZWNrUXVldWVJc0VtcHR5KCk7CiAgdm9pZCBsb2dTdW1tYXJ5KHZvaWQgbG9nKFN0cmluZyBtZXNzYWdlKSk7CgogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZ2V0IHByb2Nlc3NlZEVudGl0aWVzOwoKICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gZ2V0IHByb2Nlc3NlZENsYXNzZXM7Cn0KCmFic3RyYWN0IGNsYXNzIEVucXVldWVyTGlzdGVuZXIgewogIC8vLyBDYWxsZWQgdG8gaW5zdHJ1Y3QgdG8gdGhlIGJhY2tlbmQgdGhhdCBbdHlwZV0gaGFzIGJlZW4gaW5zdGFudGlhdGVkLgogIHZvaWQgcmVnaXN0ZXJJbnN0YW50aWF0ZWRUeXBlKEludGVyZmFjZVR5cGUgdHlwZSwKICAgICAge2Jvb2wgaXNHbG9iYWw6IGZhbHNlLCBib29sIG5hdGl2ZVVzYWdlOiBmYWxzZX0pOwoKICAvLy8gQ2FsbGVkIHRvIG5vdGlmeSB0byB0aGUgYmFja2VuZCB0aGF0IGEgY2xhc3MgaXMgYmVpbmcgaW5zdGFudGlhdGVkLiBBbnkKICAvLy8gYmFja2VuZCBzcGVjaWZpYyBbV29ybGRJbXBhY3RdIG9mIHRoaXMgaXMgcmV0dXJuZWQuCiAgV29ybGRJbXBhY3QgcmVnaXN0ZXJJbnN0YW50aWF0ZWRDbGFzcyhDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gQ2FsbGVkIHRvIG5vdGlmeSB0byB0aGUgYmFja2VuZCB0aGF0IGEgY2xhc3MgaXMgaW1wbGVtZW50ZWQgYnkgYW4KICAvLy8gaW5zdGFudGlhdGVkIGNsYXNzLiBBbnkgYmFja2VuZCBzcGVjaWZpYyBbV29ybGRJbXBhY3RdIG9mIHRoaXMgaXMKICAvLy8gcmV0dXJuZWQuCiAgV29ybGRJbXBhY3QgcmVnaXN0ZXJJbXBsZW1lbnRlZENsYXNzKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBDYWxsZWQgdG8gcmVnaXN0ZXIgdGhhdCBhIHN0YXRpYyBmdW5jdGlvbiBoYXMgYmVlbiBjbG9zdXJpemVkLiBBbnkgYmFja2VuZAogIC8vLyBzcGVjaWZpYyBbV29ybGRJbXBhY3RdIG9mIHRoaXMgaXMgcmV0dXJuZWQuCiAgV29ybGRJbXBhY3QgcmVnaXN0ZXJHZXRPZlN0YXRpY0Z1bmN0aW9uKCk7CgogIC8vLyBDYWxsZWQgdG8gcmVnaXN0ZXIgdGhhdCBbZnVuY3Rpb25dIGhhcyBiZWVuIGNsb3N1cml6ZWQuIEFueSBiYWNrZW5kCiAgLy8vIHNwZWNpZmljIFtXb3JsZEltcGFjdF0gb2YgdGhpcyBpcyByZXR1cm5lZC4KICBXb3JsZEltcGFjdCByZWdpc3RlckNsb3N1cml6ZWRNZW1iZXIoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pOwoKICAvLy8gQ2FsbGVkIHRvIHJlZ2lzdGVyIHRoYXQgW2VsZW1lbnRdIGlzIHN0YXRpY2FsbHkga25vd24gdG8gYmUgdXNlZC4gQW55CiAgLy8vIGJhY2tlbmQgc3BlY2lmaWMgW1dvcmxkSW1wYWN0XSBvZiB0aGlzIGlzIHJldHVybmVkLgogIFdvcmxkSW1wYWN0IHJlZ2lzdGVyVXNlZEVsZW1lbnQoTWVtYmVyRW50aXR5IG1lbWJlcik7CgogIC8vLyBDYWxsZWQgdG8gcmVnaXN0ZXIgdGhhdCBbdmFsdWVdIGlzIHN0YXRpY2FsbHkga25vd24gdG8gYmUgdXNlZC4gQW55CiAgLy8vIGJhY2tlbmQgc3BlY2lmaWMgW1dvcmxkSW1wYWN0XSBvZiB0aGlzIGlzIHJldHVybmVkLgogIFdvcmxkSW1wYWN0IHJlZ2lzdGVyVXNlZENvbnN0YW50KENvbnN0YW50VmFsdWUgdmFsdWUpOwoKICB2b2lkIG9uUXVldWVPcGVuKAogICAgICBFbnF1ZXVlciBlbnF1ZXVlciwgRnVuY3Rpb25FbnRpdHkgbWFpbk1ldGhvZCwgSXRlcmFibGU8VXJpPiBsaWJyYXJpZXMpOwoKICAvLy8gQ2FsbGVkIHdoZW4gW2VucXVldWVyXSdzIHF1ZXVlIGlzIGVtcHR5LCBidXQgYmVmb3JlIGl0IGlzIGNsb3NlZC4KICAvLy8KICAvLy8gVGhpcyBpcyB1c2VkLCBmb3IgZXhhbXBsZSwgYnkgdGhlIEpTIGJhY2tlbmQgdG8gZW5xdWV1ZSBhZGRpdGlvbmFsCiAgLy8vIGVsZW1lbnRzIG5lZWRlZCBmb3IgcmVmbGVjdGlvbi4gW3JlY2VudENsYXNzZXNdIGlzIGEgY29sbGVjdGlvbiBvZgogIC8vLyBhbGwgY2xhc3NlcyBzZWVuIGZvciB0aGUgZmlyc3QgdGltZSBieSB0aGUgW2VucXVldWVyXSBzaW5jZSB0aGUgbGFzdCBjYWxsCiAgLy8vIHRvIFtvblF1ZXVlRW1wdHldLgogIC8vLwogIC8vLyBBIHJldHVybiB2YWx1ZSBvZiBgdHJ1ZWAgaW5kaWNhdGVzIHRoYXQgW3JlY2VudENsYXNzZXNdIGhhcyBiZWVuCiAgLy8vIHByb2Nlc3NlZCBhbmQgaXRzIGVsZW1lbnRzIGRvIG5vdCBuZWVkIHRvIGJlIHNlZW4gaW4gdGhlIG5leHQgcm91bmQuIFdoZW4KICAvLy8gYGZhbHNlYCBpcyByZXR1cm5lZCwgW29uUXVldWVFbXB0eV0gd2lsbCBiZSBjYWxsZWQgYWdhaW4gb25jZSB0aGUKICAvLy8gcmVzb2x1dGlvbiBxdWV1ZSBoYXMgZHJhaW5lZCBhbmQgW3JlY2VudENsYXNzZXNdIHdpbGwgYmUgYSBzdXBlcnNldCBvZiB0aGUKICAvLy8gY3VycmVudCB2YWx1ZS4KICAvLy8KICAvLy8gVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYSBjbGFzcyBpcyBvbmx5IHByZXNlbnQgb25jZSBpbgogIC8vLyBbcmVjZW50Q2xhc3Nlc10sIGJ1dCBldmVyeSBjbGFzcyBzZWVuIGJ5IHRoZSBbZW5xdWV1ZXJdIHdpbGwgYmUgcHJlc2VudCBpbgogIC8vLyBbcmVjZW50Q2xhc3Nlc10gYXQgbGVhc3Qgb25jZS4KICBib29sIG9uUXVldWVFbXB0eShFbnF1ZXVlciBlbnF1ZXVlciwgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IHJlY2VudENsYXNzZXMpOwoKICAvLy8gQ2FsbGVkIHdoZW4gdG8gdGhlIHF1ZXVlIGhhcyBiZWVuIGNsb3NlZC4KICB2b2lkIG9uUXVldWVDbG9zZWQoKTsKCiAgLy8vIENhbGxlZCBhZnRlciB0aGUgcXVldWUgaGFzIGJlZW4gZW1wdGllZC4KICB2b2lkIGxvZ1N1bW1hcnkodm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UpKTsKfQoKYWJzdHJhY3QgY2xhc3MgRW5xdWV1ZXJJbXBsIGV4dGVuZHMgRW5xdWV1ZXIgewogIENvbXBpbGVyVGFzayBnZXQgdGFzazsKICB2b2lkIGNoZWNrQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKTsKICB2b2lkIHByb2Nlc3NTdGF0aWNVc2UoTWVtYmVyRW50aXR5IG1lbWJlciwgU3RhdGljVXNlIHN0YXRpY1VzZSk7CiAgdm9pZCBwcm9jZXNzVHlwZVVzZShNZW1iZXJFbnRpdHkgbWVtYmVyLCBUeXBlVXNlIHR5cGVVc2UpOwogIHZvaWQgcHJvY2Vzc0R5bmFtaWNVc2UoRHluYW1pY1VzZSBkeW5hbWljVXNlKTsKICB2b2lkIHByb2Nlc3NDb25zdGFudFVzZShDb25zdGFudFVzZSBjb25zdGFudFVzZSk7CiAgRW5xdWV1ZXJMaXN0ZW5lciBnZXQgbGlzdGVuZXI7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEluaXRpYWxpemUgW19pbXBhY3RTdHJhdGVneV0gdG8gYG51bGxgLgogIEltcGFjdFN0cmF0ZWd5IF9pbXBhY3RTdHJhdGVneSA9IGNvbnN0IEltcGFjdFN0cmF0ZWd5KCk7CgogIEltcGFjdFN0cmF0ZWd5IGdldCBpbXBhY3RTdHJhdGVneSA9PiBfaW1wYWN0U3RyYXRlZ3k7CgogIEBvdmVycmlkZQogIHZvaWQgb3BlbihJbXBhY3RTdHJhdGVneSBpbXBhY3RTdHJhdGVneSwgRnVuY3Rpb25FbnRpdHkgbWFpbk1ldGhvZCwKICAgICAgSXRlcmFibGU8VXJpPiBsaWJyYXJpZXMpIHsKICAgIF9pbXBhY3RTdHJhdGVneSA9IGltcGFjdFN0cmF0ZWd5OwogICAgbGlzdGVuZXIub25RdWV1ZU9wZW4odGhpcywgbWFpbk1ldGhvZCwgbGlicmFyaWVzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2xvc2UoKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTZXQgW19pbXBhY3RTdHJhdGVneV0gdG8gYG51bGxgIGFuZCBbcXVldWVJc0Nsb3NlZF0KICAgIC8vIHRvIGB0cnVlYCBoZXJlLgogICAgX2ltcGFjdFN0cmF0ZWd5ID0gY29uc3QgSW1wYWN0U3RyYXRlZ3koKTsKICAgIGxpc3RlbmVyLm9uUXVldWVDbG9zZWQoKTsKICB9CgogIC8vLyBDaGVjayBlbnF1ZXVlciBjb25zaXN0ZW5jeSBhZnRlciB0aGUgcXVldWUgaGFzIGJlZW4gY2xvc2VkLgogIGJvb2wgY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5KEVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQpIHsKICAgIHRhc2subWVhc3VyZVN1YnRhc2soJ3Jlc29sdXRpb24uY2hlY2snLCAoKSB7CiAgICAgIC8vIFJ1biB0aHJvdWdoIHRoZSBjbGFzc2VzIGFuZCBzZWUgaWYgd2UgbmVlZCB0byBlbnF1ZXVlIG1vcmUgbWV0aG9kcy4KICAgICAgZm9yIChDbGFzc0VudGl0eSBjbGFzc0VsZW1lbnQKICAgICAgICAgIGluIHdvcmxkQnVpbGRlci5kaXJlY3RseUluc3RhbnRpYXRlZENsYXNzZXMpIHsKICAgICAgICBmb3IgKENsYXNzRW50aXR5IGN1cnJlbnRDbGFzcyA9IGNsYXNzRWxlbWVudDsKICAgICAgICAgICAgY3VycmVudENsYXNzICE9IG51bGw7CiAgICAgICAgICAgIGN1cnJlbnRDbGFzcyA9IGVsZW1lbnRFbnZpcm9ubWVudC5nZXRTdXBlckNsYXNzKGN1cnJlbnRDbGFzcykpIHsKICAgICAgICAgIGNoZWNrQ2xhc3MoY3VycmVudENsYXNzKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIHRydWU7CiAgfQp9CgovLy8gW0VucXVldWVyXSB3aGljaCBpcyBzcGVjaWZpYyB0byByZXNvbHV0aW9uLgpjbGFzcyBSZXNvbHV0aW9uRW5xdWV1ZXIgZXh0ZW5kcyBFbnF1ZXVlckltcGwgewogIHN0YXRpYyBjb25zdCBJbXBhY3RVc2VDYXNlIElNUEFDVF9VU0UgPQogICAgICBjb25zdCBJbXBhY3RVc2VDYXNlKCdSZXNvbHV0aW9uRW5xdWV1ZXInKTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgQ29tcGlsZXJUYXNrIHRhc2s7CiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgQG92ZXJyaWRlCiAgZmluYWwgRW5xdWV1ZXJMaXN0ZW5lciBsaXN0ZW5lcjsKCiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBfcmVjZW50Q2xhc3NlcyA9IG5ldyBTZXRsZXQ8Q2xhc3NFbnRpdHk+KCk7CiAgYm9vbCBfcmVjZW50Q29uc3RhbnRzID0gZmFsc2U7CiAgZmluYWwgUmVzb2x1dGlvbkVucXVldWVyV29ybGRCdWlsZGVyIF93b3JsZEJ1aWxkZXI7CiAgZmluYWwgV29ya0l0ZW1CdWlsZGVyIF93b3JrSXRlbUJ1aWxkZXI7CiAgZmluYWwgRGlhZ25vc3RpY1JlcG9ydGVyIF9yZXBvcnRlcjsKICBmaW5hbCBBbm5vdGF0aW9uc0RhdGEgX2Fubm90YXRpb25zRGF0YTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBxdWV1ZUlzQ2xvc2VkID0gZmFsc2U7CgogIFdvcmxkSW1wYWN0VmlzaXRvciBfaW1wYWN0VmlzaXRvcjsKCiAgZmluYWwgUXVldWU8V29ya0l0ZW0+IF9xdWV1ZSA9IG5ldyBRdWV1ZTxXb3JrSXRlbT4oKTsKCiAgLy8gSWYgbm90IGBudWxsYCB0aGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBxdWV1ZSBoYXMgYmVlbiBlbXB0aWVkLiBJdCBhbGxvd3MgZm9yCiAgLy8gYXBwbHlpbmcgYWRkaXRpb25hbCBpbXBhY3RzIGJlZm9yZSByZS1lbXB0eWluZyB0aGUgcXVldWUuCiAgdm9pZCBGdW5jdGlvbigpIG9uRW1wdHlGb3JUZXN0aW5nOwoKICBSZXNvbHV0aW9uRW5xdWV1ZXIodGhpcy50YXNrLCB0aGlzLl9yZXBvcnRlciwgdGhpcy5saXN0ZW5lciwKICAgICAgdGhpcy5fd29ybGRCdWlsZGVyLCB0aGlzLl93b3JrSXRlbUJ1aWxkZXIsIHRoaXMuX2Fubm90YXRpb25zRGF0YSwKICAgICAgW3RoaXMubmFtZSA9ICdyZXNvbHV0aW9uIGVucXVldWVyJ10pIHsKICAgIF9pbXBhY3RWaXNpdG9yID0gbmV3IEVucXVldWVySW1wbEltcGFjdFZpc2l0b3IodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBSZXNvbHV0aW9uV29ybGRCdWlsZGVyIGdldCB3b3JsZEJ1aWxkZXIgPT4gX3dvcmxkQnVpbGRlcjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgcXVldWVJc0VtcHR5ID0+IF9xdWV1ZS5pc0VtcHR5OwoKICBAb3ZlcnJpZGUKICB2b2lkIGNoZWNrUXVldWVJc0VtcHR5KCkgewogICAgaWYgKF9xdWV1ZS5pc05vdEVtcHR5KSB7CiAgICAgIGZhaWxlZEF0KF9xdWV1ZS5maXJzdC5lbGVtZW50LCAiJG5hbWUgcXVldWUgaXMgbm90IGVtcHR5LiIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBwcm9jZXNzZWRDbGFzc2VzID0+IF93b3JsZEJ1aWxkZXIucHJvY2Vzc2VkQ2xhc3NlczsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhcHBseUltcGFjdChXb3JsZEltcGFjdCB3b3JsZEltcGFjdCwge3ZhciBpbXBhY3RTb3VyY2V9KSB7CiAgICBpZiAod29ybGRJbXBhY3QuaXNFbXB0eSkgcmV0dXJuOwogICAgaW1wYWN0U3RyYXRlZ3kudmlzaXRJbXBhY3QoCiAgICAgICAgaW1wYWN0U291cmNlLCB3b3JsZEltcGFjdCwgX2ltcGFjdFZpc2l0b3IsIGltcGFjdFVzZSk7CiAgfQoKICB2b2lkIF9yZWdpc3Rlckluc3RhbnRpYXRlZFR5cGUoSW50ZXJmYWNlVHlwZSB0eXBlLAogICAgICB7Q29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IsCiAgICAgIGJvb2wgbmF0aXZlVXNhZ2U6IGZhbHNlLAogICAgICBib29sIGdsb2JhbERlcGVuZGVuY3k6IGZhbHNlfSkgewogICAgdGFzay5tZWFzdXJlU3VidGFzaygncmVzb2x1dGlvbi50eXBlVXNlJywgKCkgewogICAgICBfd29ybGRCdWlsZGVyLnJlZ2lzdGVyVHlwZUluc3RhbnRpYXRpb24odHlwZSwgX2FwcGx5Q2xhc3NVc2UsCiAgICAgICAgICBjb25zdHJ1Y3RvcjogY29uc3RydWN0b3IpOwogICAgICBsaXN0ZW5lci5yZWdpc3Rlckluc3RhbnRpYXRlZFR5cGUodHlwZSwKICAgICAgICAgIGlzR2xvYmFsOiBnbG9iYWxEZXBlbmRlbmN5LCBuYXRpdmVVc2FnZTogbmF0aXZlVXNhZ2UpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNoZWNrTm9FbnF1ZXVlZEludm9rZWRJbnN0YW5jZU1ldGhvZHMoCiAgICAgIEVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQpIHsKICAgIGlmIChFbnF1ZXVlci5za2lwRW5xdWV1ZXJDaGVja0ZvclRlc3RpbmcpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeShlbGVtZW50RW52aXJvbm1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjaGVja0NsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgX3dvcmxkQnVpbGRlci5wcm9jZXNzQ2xhc3NNZW1iZXJzKGNscywKICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlciwgRW51bVNldDxNZW1iZXJVc2U+IHVzZVNldCkgewogICAgICBpZiAodXNlU2V0LmlzTm90RW1wdHkpIHsKICAgICAgICBfcmVwb3J0ZXIuaW50ZXJuYWxFcnJvcihtZW1iZXIsCiAgICAgICAgICAgICdVbmVucXVldWVkIHVzZSBvZiAkbWVtYmVyOiAke3VzZVNldC5pdGVyYWJsZShNZW1iZXJVc2UudmFsdWVzKX0nKTsKICAgICAgfQogICAgfSwgY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5OiB0cnVlKTsKICB9CgogIC8vLyBDYWxsYmFjayBmb3IgYXBwbHlpbmcgdGhlIHVzZSBvZiBhIFttZW1iZXJdLgogIHZvaWQgX2FwcGx5TWVtYmVyVXNlKEVudGl0eSBtZW1iZXIsIEVudW1TZXQ8TWVtYmVyVXNlPiB1c2VTZXQpIHsKICAgIGlmICh1c2VTZXQuY29udGFpbnMoTWVtYmVyVXNlLk5PUk1BTCkpIHsKICAgICAgX2FkZFRvV29ya0xpc3QobWVtYmVyKTsKICAgIH0KICAgIGlmICh1c2VTZXQuY29udGFpbnMoTWVtYmVyVXNlLkNMT1NVUklaRV9JTlNUQU5DRSkpIHsKICAgICAgX3JlZ2lzdGVyQ2xvc3VyaXplZE1lbWJlcihtZW1iZXIpOwogICAgfQogICAgaWYgKHVzZVNldC5jb250YWlucyhNZW1iZXJVc2UuQ0xPU1VSSVpFX1NUQVRJQykpIHsKICAgICAgYXBwbHlJbXBhY3QobGlzdGVuZXIucmVnaXN0ZXJHZXRPZlN0YXRpY0Z1bmN0aW9uKCksCiAgICAgICAgICBpbXBhY3RTb3VyY2U6ICdnZXQgb2Ygc3RhdGljIGZ1bmN0aW9uJyk7CiAgICB9CiAgfQoKICAvLy8gQ2FsbGJhY2sgZm9yIGFwcGx5aW5nIHRoZSB1c2Ugb2YgYSBbY2xzXS4KICB2b2lkIF9hcHBseUNsYXNzVXNlKENsYXNzRW50aXR5IGNscywgRW51bVNldDxDbGFzc1VzZT4gdXNlU2V0KSB7CiAgICBpZiAodXNlU2V0LmNvbnRhaW5zKENsYXNzVXNlLklOU1RBTlRJQVRFRCkpIHsKICAgICAgX3JlY2VudENsYXNzZXMuYWRkKGNscyk7CiAgICAgIF93b3JsZEJ1aWxkZXIucHJvY2Vzc0NsYXNzTWVtYmVycyhjbHMsIF9hcHBseU1lbWJlclVzZSk7CiAgICAgIC8vIFdlIG9ubHkgdGVsbCB0aGUgYmFja2VuZCBvbmNlIHRoYXQgW2Nsc10gd2FzIGluc3RhbnRpYXRlZCwgc28KICAgICAgLy8gYW55IGFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzIG11c3QgYmUgdHJlYXRlZCBhcyBnbG9iYWwKICAgICAgLy8gZGVwZW5kZW5jaWVzLgogICAgICBhcHBseUltcGFjdChsaXN0ZW5lci5yZWdpc3Rlckluc3RhbnRpYXRlZENsYXNzKGNscyksCiAgICAgICAgICBpbXBhY3RTb3VyY2U6ICdpbnN0YW50aWF0ZWQgY2xhc3MnKTsKICAgIH0KICAgIGlmICh1c2VTZXQuY29udGFpbnMoQ2xhc3NVc2UuSU1QTEVNRU5URUQpKSB7CiAgICAgIGFwcGx5SW1wYWN0KGxpc3RlbmVyLnJlZ2lzdGVySW1wbGVtZW50ZWRDbGFzcyhjbHMpLAogICAgICAgICAgaW1wYWN0U291cmNlOiAnaW1wbGVtZW50ZWQgY2xhc3MnKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJvY2Vzc0R5bmFtaWNVc2UoRHluYW1pY1VzZSBkeW5hbWljVXNlKSB7CiAgICB0YXNrLm1lYXN1cmVTdWJ0YXNrKCdyZXNvbHV0aW9uLmR5bmFtaWNVc2UnLCAoKSB7CiAgICAgIF93b3JsZEJ1aWxkZXIucmVnaXN0ZXJEeW5hbWljVXNlKGR5bmFtaWNVc2UsIF9hcHBseU1lbWJlclVzZSk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJvY2Vzc0NvbnN0YW50VXNlKENvbnN0YW50VXNlIGNvbnN0YW50VXNlKSB7CiAgICB0YXNrLm1lYXN1cmVTdWJ0YXNrKCdyZXNvbHV0aW9uLmNvbnN0YW50VXNlJywgKCkgewogICAgICBpZiAoX3dvcmxkQnVpbGRlci5yZWdpc3RlckNvbnN0YW50VXNlKGNvbnN0YW50VXNlKSkgewogICAgICAgIGFwcGx5SW1wYWN0KGxpc3RlbmVyLnJlZ2lzdGVyVXNlZENvbnN0YW50KGNvbnN0YW50VXNlLnZhbHVlKSwKICAgICAgICAgICAgaW1wYWN0U291cmNlOiAnY29uc3RhbnQgdXNlJyk7CiAgICAgICAgX3JlY2VudENvbnN0YW50cyA9IHRydWU7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBwcm9jZXNzU3RhdGljVXNlKE1lbWJlckVudGl0eSBtZW1iZXIsIFN0YXRpY1VzZSBzdGF0aWNVc2UpIHsKICAgIHRhc2subWVhc3VyZVN1YnRhc2soJ3Jlc29sdXRpb24uc3RhdGljVXNlJywgKCkgewogICAgICBfd29ybGRCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKHN0YXRpY1VzZSwgX2FwcGx5TWVtYmVyVXNlKTsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQWRkIGBSZXNvbHV0aW9uV29ybGRCdWlsZGVyLnJlZ2lzdGVyQ29uc3RydWN0b3JVc2VgCiAgICAgIC8vIGZvciB0aGVzZToKICAgICAgc3dpdGNoIChzdGF0aWNVc2Uua2luZCkgewogICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5DT05TVFJVQ1RPUl9JTlZPS0U6CiAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNPTlNUX0NPTlNUUlVDVE9SX0lOVk9LRToKICAgICAgICAgIF9yZWdpc3Rlckluc3RhbnRpYXRlZFR5cGUoc3RhdGljVXNlLnR5cGUsCiAgICAgICAgICAgICAgY29uc3RydWN0b3I6IHN0YXRpY1VzZS5lbGVtZW50LCBnbG9iYWxEZXBlbmRlbmN5OiBmYWxzZSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBwcm9jZXNzVHlwZVVzZShNZW1iZXJFbnRpdHkgbWVtYmVyLCBUeXBlVXNlIHR5cGVVc2UpIHsKICAgIERhcnRUeXBlIHR5cGUgPSB0eXBlVXNlLnR5cGU7CiAgICBzd2l0Y2ggKHR5cGVVc2Uua2luZCkgewogICAgICBjYXNlIFR5cGVVc2VLaW5kLklOU1RBTlRJQVRJT046CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuQ09OU1RfSU5TVEFOVElBVElPTjoKICAgICAgICBfcmVnaXN0ZXJJbnN0YW50aWF0ZWRUeXBlKHR5cGUsIGdsb2JhbERlcGVuZGVuY3k6IGZhbHNlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5OQVRJVkVfSU5TVEFOVElBVElPTjoKICAgICAgICBfcmVnaXN0ZXJJbnN0YW50aWF0ZWRUeXBlKHR5cGUsCiAgICAgICAgICAgIG5hdGl2ZVVzYWdlOiB0cnVlLCBnbG9iYWxEZXBlbmRlbmN5OiB0cnVlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5JU19DSEVDSzoKICAgICAgY2FzZSBUeXBlVXNlS2luZC5DQVRDSF9UWVBFOgogICAgICAgIF9yZWdpc3RlcklzQ2hlY2sodHlwZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuQVNfQ0FTVDoKICAgICAgICBpZiAoX2Fubm90YXRpb25zRGF0YS5nZXRFeHBsaWNpdENhc3RDaGVja1BvbGljeShtZW1iZXIpLmlzRW1pdHRlZCkgewogICAgICAgICAgX3JlZ2lzdGVySXNDaGVjayh0eXBlKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuSU1QTElDSVRfQ0FTVDoKICAgICAgICBpZiAoX2Fubm90YXRpb25zRGF0YS5nZXRJbXBsaWNpdERvd25jYXN0Q2hlY2tQb2xpY3kobWVtYmVyKS5pc0VtaXR0ZWQpIHsKICAgICAgICAgIF9yZWdpc3RlcklzQ2hlY2sodHlwZSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLlBBUkFNRVRFUl9DSEVDSzoKICAgICAgICBpZiAoX2Fubm90YXRpb25zRGF0YS5nZXRQYXJhbWV0ZXJDaGVja1BvbGljeShtZW1iZXIpLmlzRW1pdHRlZCkgewogICAgICAgICAgX3JlZ2lzdGVySXNDaGVjayh0eXBlKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuVFlQRV9MSVRFUkFMOgogICAgICAgIGlmICh0eXBlIGlzIFR5cGVWYXJpYWJsZVR5cGUpIHsKICAgICAgICAgIF93b3JsZEJ1aWxkZXIucmVnaXN0ZXJUeXBlVmFyaWFibGVUeXBlTGl0ZXJhbCh0eXBlKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuUlRJX1ZBTFVFOgogICAgICBjYXNlIFR5cGVVc2VLaW5kLlRZUEVfQVJHVU1FTlQ6CiAgICAgICAgZmFpbGVkQXQoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwgIlVuZXhwZWN0ZWQgdHlwZSB1c2U6ICR0eXBlVXNlLiIpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLk5BTUVEX1RZUEVfVkFSSUFCTEVfTkVXX1JUSToKICAgICAgICBhc3NlcnQodHlwZSBpcyBUeXBlVmFyaWFibGVUeXBlKTsKICAgICAgICBfcmVnaXN0ZXJOYW1lZFR5cGVWYXJpYWJsZU5ld1J0aSh0eXBlKTsKICAgICAgICBicmVhazsKICAgIH0KICB9CgogIHZvaWQgX3JlZ2lzdGVySXNDaGVjayhEYXJ0VHlwZSB0eXBlKSB7CiAgICBfd29ybGRCdWlsZGVyLnJlZ2lzdGVySXNDaGVjayh0eXBlKTsKICB9CgogIHZvaWQgX3JlZ2lzdGVyTmFtZWRUeXBlVmFyaWFibGVOZXdSdGkoVHlwZVZhcmlhYmxlVHlwZSB0eXBlKSB7CiAgICBfd29ybGRCdWlsZGVyLnJlZ2lzdGVyTmFtZWRUeXBlVmFyaWFibGVOZXdSdGkodHlwZSk7CiAgfQoKICB2b2lkIF9yZWdpc3RlckNsb3N1cml6ZWRNZW1iZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydChlbGVtZW50LmlzSW5zdGFuY2VNZW1iZXIpOwogICAgYXBwbHlJbXBhY3QobGlzdGVuZXIucmVnaXN0ZXJDbG9zdXJpemVkTWVtYmVyKGVsZW1lbnQpLAogICAgICAgIGltcGFjdFNvdXJjZTogJ2Nsb3N1cml6ZWQgbWVtYmVyJyk7CiAgICBfd29ybGRCdWlsZGVyLnJlZ2lzdGVyQ2xvc3VyaXplZE1lbWJlcihlbGVtZW50KTsKICB9CgogIHZvaWQgX2ZvckVhY2godm9pZCBmKFdvcmtJdGVtIHdvcmspKSB7CiAgICBkbyB7CiAgICAgIHdoaWxlIChfcXVldWUuaXNOb3RFbXB0eSkgewogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEZpbmQgYW4gb3B0aW1hbCBwcm9jZXNzIG9yZGVyLgogICAgICAgIFdvcmtJdGVtIHdvcmsgPSBfcXVldWUucmVtb3ZlTGFzdCgpOwogICAgICAgIGlmICghX3dvcmxkQnVpbGRlci5pc01lbWJlclByb2Nlc3NlZCh3b3JrLmVsZW1lbnQpKSB7CiAgICAgICAgICBmKHdvcmspOwogICAgICAgICAgX3dvcmxkQnVpbGRlci5yZWdpc3RlclByb2Nlc3NlZE1lbWJlcih3b3JrLmVsZW1lbnQpOwogICAgICAgIH0KICAgICAgfQogICAgICBMaXN0PENsYXNzRW50aXR5PiByZWNlbnRzID0gX3JlY2VudENsYXNzZXMudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgICAgIF9yZWNlbnRDbGFzc2VzLmNsZWFyKCk7CiAgICAgIF9yZWNlbnRDb25zdGFudHMgPSBmYWxzZTsKICAgICAgaWYgKCFfb25RdWV1ZUVtcHR5KHJlY2VudHMpKSB7CiAgICAgICAgX3JlY2VudENsYXNzZXMuYWRkQWxsKHJlY2VudHMpOwogICAgICB9CiAgICB9IHdoaWxlICgKICAgICAgICBfcXVldWUuaXNOb3RFbXB0eSB8fCBfcmVjZW50Q2xhc3Nlcy5pc05vdEVtcHR5IHx8IF9yZWNlbnRDb25zdGFudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihXb3JrSXRlbSB3b3JrKSkgewogICAgX2ZvckVhY2goZik7CiAgICBpZiAob25FbXB0eUZvclRlc3RpbmcgIT0gbnVsbCkgewogICAgICBvbkVtcHR5Rm9yVGVzdGluZygpOwogICAgICBfZm9yRWFjaChmKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgbG9nU3VtbWFyeSh2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSkpIHsKICAgIGxvZygnUmVzb2x2ZWQgJHtwcm9jZXNzZWRFbnRpdGllcy5sZW5ndGh9IGVsZW1lbnRzLicpOwogICAgbGlzdGVuZXIubG9nU3VtbWFyeShsb2cpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0VucXVldWVyKCRuYW1lKSc7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZ2V0IHByb2Nlc3NlZEVudGl0aWVzID0+CiAgICAgIF93b3JsZEJ1aWxkZXIucHJvY2Vzc2VkTWVtYmVyczsKCiAgQG92ZXJyaWRlCiAgSW1wYWN0VXNlQ2FzZSBnZXQgaW1wYWN0VXNlID0+IElNUEFDVF9VU0U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUmVzb2x1dGlvblF1ZXVlID0+IHRydWU7CgogIC8vLyBSZWdpc3RlcnMgW2VudGl0eV0gYXMgcHJvY2Vzc2VkIGJ5IHRoZSByZXNvbHV0aW9uIGVucXVldWVyLiBVc2VkIG9ubHkgZm9yCiAgLy8vIHRlc3RpbmcuCiAgdm9pZCByZWdpc3RlclByb2Nlc3NlZEVsZW1lbnRJbnRlcm5hbChNZW1iZXJFbnRpdHkgZW50aXR5KSB7CiAgICBfd29ybGRCdWlsZGVyLnJlZ2lzdGVyUHJvY2Vzc2VkTWVtYmVyKGVudGl0eSk7CiAgfQoKICAvLy8gQ3JlYXRlIGEgW1dvcmtJdGVtXSBmb3IgW2VudGl0eV0gYW5kIGFkZCBpdCB0byB0aGUgd29yayBsaXN0IGlmIGl0IGhhcyBub3QKICAvLy8gYWxyZWFkeSBiZWVuIHByb2Nlc3NlZC4KICB2b2lkIF9hZGRUb1dvcmtMaXN0KE1lbWJlckVudGl0eSBlbnRpdHkpIHsKICAgIGlmIChfd29ybGRCdWlsZGVyLmlzTWVtYmVyUHJvY2Vzc2VkKGVudGl0eSkpIHJldHVybjsKICAgIFdvcmtJdGVtIHdvcmtJdGVtID0gX3dvcmtJdGVtQnVpbGRlci5jcmVhdGVXb3JrSXRlbShlbnRpdHkpOwogICAgaWYgKHdvcmtJdGVtID09IG51bGwpIHJldHVybjsKCiAgICBpZiAocXVldWVJc0Nsb3NlZCkgewogICAgICBmYWlsZWRBdCgKICAgICAgICAgIGVudGl0eSwgIlJlc29sdXRpb24gd29yayBsaXN0IGlzIGNsb3NlZC4gVHJ5aW5nIHRvIGFkZCAkZW50aXR5LiIpOwogICAgfQoKICAgIGFwcGx5SW1wYWN0KGxpc3RlbmVyLnJlZ2lzdGVyVXNlZEVsZW1lbnQoZW50aXR5KSwKICAgICAgICBpbXBhY3RTb3VyY2U6ICd1c2VkIGVsZW1lbnQnKTsKICAgIF93b3JsZEJ1aWxkZXIucmVnaXN0ZXJVc2VkRWxlbWVudChlbnRpdHkpOwogICAgX3F1ZXVlLmFkZCh3b3JrSXRlbSk7CiAgfQoKICAvLy8gW19vblF1ZXVlRW1wdHldIGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgcXVldWUgaXMgZHJhaW5lZC4gW3JlY2VudENsYXNzZXNdCiAgLy8vIGNvbnRhaW5zIHRoZSBzZXQgb2YgYWxsIGNsYXNzZXMgc2VlbiBmb3IgdGhlIGZpcnN0IHRpbWUgc2luY2UKICAvLy8gW19vblF1ZXVlRW1wdHldIHdhcyBjYWxsZWQgbGFzdC4gQSByZXR1cm4gdmFsdWUgb2YgW3RydWVdIGluZGljYXRlcyB0aGF0CiAgLy8vIHRoZSBbcmVjZW50Q2xhc3Nlc10gaGF2ZSBiZWVuIHByb2Nlc3NlZCBhbmQgbWF5IGJlIGNsZWFyZWQuIElmIFtmYWxzZV0gaXMKICAvLy8gcmV0dXJuZWQsIFtfb25RdWV1ZUVtcHR5XSB3aWxsIGJlIGNhbGxlZCBvbmNlIHRoZSBxdWV1ZSBpcyBlbXB0eSBhZ2FpbiAob3IKICAvLy8gc3RpbGwgZW1wdHkpIGFuZCBbcmVjZW50Q2xhc3Nlc10gd2lsbCBiZSBhIHN1cGVyc2V0IG9mIHRoZSBjdXJyZW50IHZhbHVlLgogIGJvb2wgX29uUXVldWVFbXB0eShJdGVyYWJsZTxDbGFzc0VudGl0eT4gcmVjZW50Q2xhc3NlcykgewogICAgcmV0dXJuIGxpc3RlbmVyLm9uUXVldWVFbXB0eSh0aGlzLCByZWNlbnRDbGFzc2VzKTsKICB9Cn0KCmNsYXNzIEVucXVldWVySW1wbEltcGFjdFZpc2l0b3IgaW1wbGVtZW50cyBXb3JsZEltcGFjdFZpc2l0b3IgewogIGZpbmFsIEVucXVldWVySW1wbCBlbnF1ZXVlcjsKCiAgRW5xdWV1ZXJJbXBsSW1wYWN0VmlzaXRvcih0aGlzLmVucXVldWVyKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdER5bmFtaWNVc2UoTWVtYmVyRW50aXR5IG1lbWJlciwgRHluYW1pY1VzZSBkeW5hbWljVXNlKSB7CiAgICBlbnF1ZXVlci5wcm9jZXNzRHluYW1pY1VzZShkeW5hbWljVXNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdGF0aWNVc2UoTWVtYmVyRW50aXR5IG1lbWJlciwgU3RhdGljVXNlIHN0YXRpY1VzZSkgewogICAgZW5xdWV1ZXIucHJvY2Vzc1N0YXRpY1VzZShtZW1iZXIsIHN0YXRpY1VzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZVVzZShNZW1iZXJFbnRpdHkgbWVtYmVyLCBUeXBlVXNlIHR5cGVVc2UpIHsKICAgIGVucXVldWVyLnByb2Nlc3NUeXBlVXNlKG1lbWJlciwgdHlwZVVzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29uc3RhbnRVc2UoTWVtYmVyRW50aXR5IG1lbWJlciwgQ29uc3RhbnRVc2UgY29uc3RhbnRVc2UpIHsKICAgIGVucXVldWVyLnByb2Nlc3NDb25zdGFudFVzZShjb25zdGFudFVzZSk7CiAgfQp9CgovLy8gSW50ZXJmYWNlIGZvciBjcmVhdGluZyB3b3JrIGl0ZW1zIGZvciBlbnF1ZXVlZCBtZW1iZXIgZW50aXRpZXMuCmFic3RyYWN0IGNsYXNzIFdvcmtJdGVtQnVpbGRlciB7CiAgV29ya0l0ZW0gY3JlYXRlV29ya0l0ZW0oY292YXJpYW50IE1lbWJlckVudGl0eSBlbnRpdHkpOwp9CoIxAE5OPAEZASUBHi4pFjcgJiEeHiY1IyUxJhsJFRQTFxEVJEkcJScBKSItGwEMIAEhIiIBNDEBNCYMHSg+GAQBMjUySwQBIiA5IydNTEQgLAYVBAIBGkxJSBZFEzMBIQFGIBABRB4BFgEZAR8BJwFJUSFBLi4BOxwtATABLgIBIks0OAFOOjoBSEgQOQFRMi0BSjJBAUw6OAFKOjkBFE4BSAZJSVAZBkdQSFEVBkFRJU0BMBgBLy0CAS8ZJEM9MTQhAUI7ATgBDEYhJjcEAQwRUBcuHgQBQkkxTSQ5NiJNJAoICBEEAgEwMCoxAQwbFQwjAUUhNiomKgEMHgElATgBUT8lAT9ILToEAQw8AQwrAQwdHUMGBAEMUAEMQiUgPwQBNSYfJzNEJS5BCAQBDC4vOzkEAQwlKzsfKFAIKAQBM0MtHgY5KQY3OjMGBAEwQzIfP0c/FzsvBjE6LgYEAQwyNkUIBAEMNTc8RishCAgEAQxENUNSFCAvNTRIERERCAgEAQw+IhwmLEIPLSg4DyEjIA8gTSIKDyZRIgoPKEoiCg8lKD8KDyImTw80KjAPBgQBKSkEAUE5BAE5JjwsNQQBKQkiPy0+Ez8KCEoeICUoCA5NBAEMKBElGxMGBAEMLjseBAEMKgEMMiYBDC0BDCYBUA8/MwQBUR4tOUEiARkQTQYBNicvGgQBT0RPUFFQPDcEAgFAHwEsAQxFLAQBDEIyBAEMPC4EAQxILgQCAUQhOgIBIXBhY2thZ2U6Y29tcGlsZXIvc3JjL2VucXVldWUuZGFydDRzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9mcm9udGVuZF9zdHJhdGVneS5kYXJ0i50vLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmZyb250ZW5kX3N0cmF0ZWd5OwoKaW1wb3J0ICdjb21tb24uZGFydCc7CmltcG9ydCAnY29tbW9uL3Rhc2tzLmRhcnQnOwppbXBvcnQgJ2NvbW1vbl9lbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICdjb21waWxlci5kYXJ0JyBzaG93IENvbXBpbGVyOwppbXBvcnQgJ2RlZmVycmVkX2xvYWQuZGFydCcgc2hvdyBEZWZlcnJlZExvYWRUYXNrOwppbXBvcnQgJ2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJ2VucXVldWUuZGFydCc7CmltcG9ydCAnanNfYmFja2VuZC9uYXRpdmVfZGF0YS5kYXJ0JzsKaW1wb3J0ICdqc19iYWNrZW5kL25vX3N1Y2hfbWV0aG9kX3JlZ2lzdHJ5LmRhcnQnOwppbXBvcnQgJ2tlcm5lbC9sb2FkZXIuZGFydCc7CmltcG9ydCAndW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnQnOwoKLy8vIFN0cmF0ZWd5IHBhdHRlcm4gdGhhdCBkZWZpbmVzIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGlucHV0IGZvcm1hdCBhbmQKLy8vIHRoZSByZXNvbHZlZCBlbGVtZW50IG1vZGVsLgphYnN0cmFjdCBjbGFzcyBGcm9udGVuZFN0cmF0ZWd5IHsKICAvLy8gUmVnaXN0ZXJzIGEgc2V0IG9mIGxvYWRlZCBsaWJyYXJpZXMgd2l0aCB0aGlzIHN0cmF0ZWd5LgogIHZvaWQgcmVnaXN0ZXJMb2FkZWRMaWJyYXJpZXMoS2VybmVsUmVzdWx0IHJlc3VsdCk7CgogIC8vLyBSZXR1cm5zIHRoZSBbRWxlbWVudEVudmlyb25tZW50XSBmb3IgdGhlIGVsZW1lbnQgbW9kZWwgdXNlZCBpbiB0aGlzCiAgLy8vIHN0cmF0ZWd5LgogIEVsZW1lbnRFbnZpcm9ubWVudCBnZXQgZWxlbWVudEVudmlyb25tZW50OwoKICAvLy8gUmV0dXJucyB0aGUgW0NvbW1vbkVsZW1lbnRzXSBmb3IgdGhlIGVsZW1lbnQgbW9kZWwgdXNlZCBpbiB0aGlzCiAgLy8vIHN0cmF0ZWd5LgogIENvbW1vbkVsZW1lbnRzIGdldCBjb21tb25FbGVtZW50czsKCiAgTmF0aXZlQmFzaWNEYXRhIGdldCBuYXRpdmVCYXNpY0RhdGE7CgogIC8vLyBDcmVhdGVzIGEgW0RlZmVycmVkTG9hZFRhc2tdIGZvciB0aGUgZWxlbWVudCBtb2RlbCB1c2VkIGluIHRoaXMgc3RyYXRlZ3kuCiAgRGVmZXJyZWRMb2FkVGFzayBjcmVhdGVEZWZlcnJlZExvYWRUYXNrKENvbXBpbGVyIGNvbXBpbGVyKTsKCiAgLy8vIFN1cHBvcnQgZm9yIGNsYXNzaWZ5aW5nIGBub1N1Y2hNZXRob2RgIGltcGxlbWVudGF0aW9ucy4KICBOb1N1Y2hNZXRob2RSZWdpc3RyeSBnZXQgbm9TdWNoTWV0aG9kUmVnaXN0cnk7CgogIC8vLyBDYWxsZWQgYmVmb3JlIHByb2Nlc3Npbmcgb2YgdGhlIHJlc29sdXRpb24gcXVldWUgaXMgc3RhcnRlZC4KICB2b2lkIG9uUmVzb2x1dGlvblN0YXJ0KCk7CgogIFJlc29sdXRpb25FbnF1ZXVlciBjcmVhdGVSZXNvbHV0aW9uRW5xdWV1ZXIoCiAgICAgIENvbXBpbGVyVGFzayB0YXNrLCBDb21waWxlciBjb21waWxlcik7CgogIC8vLyBDYWxsZWQgd2hlbiB0aGUgcmVzb2x1dGlvbiBxdWV1ZSBoYXMgYmVlbiBjbG9zZWQuCiAgdm9pZCBvblJlc29sdXRpb25FbmQoKTsKCiAgLy8vIENvbXB1dGVzIHRoZSBtYWluIGZ1bmN0aW9uIGZyb20gW21haW5MaWJyYXJ5XSBhZGRpbmcgYWRkaXRpb25hbCB3b3JsZAogIC8vLyBpbXBhY3QgdG8gW2ltcGFjdEJ1aWxkZXJdLgogIEZ1bmN0aW9uRW50aXR5IGNvbXB1dGVNYWluKFdvcmxkSW1wYWN0QnVpbGRlciBpbXBhY3RCdWlsZGVyKTsKCiAgLy8vIENyZWF0ZXMgYSBbU291cmNlU3Bhbl0gZnJvbSBbc3Bhbm5hYmxlXSBpbiBjb250ZXh0IG9mIFtjdXJyZW50RWxlbWVudF0uCiAgU291cmNlU3BhbiBzcGFuRnJvbVNwYW5uYWJsZShTcGFubmFibGUgc3Bhbm5hYmxlLCBFbnRpdHkgY3VycmVudEVsZW1lbnQpOwp9CgovLy8gQ2xhc3MgdGhhdCBwZXJmb3JtcyB0aGUgbWVjaGFuaWNzIHRvIGludmVzdGlnYXRlIGFubm90YXRpb25zIGluIHRoZSBjb2RlLgphYnN0cmFjdCBjbGFzcyBBbm5vdGF0aW9uUHJvY2Vzc29yIHsKICB2b2lkIGV4dHJhY3ROYXRpdmVBbm5vdGF0aW9ucyhMaWJyYXJ5RW50aXR5IGxpYnJhcnkpOwoKICB2b2lkIGV4dHJhY3RKc0ludGVyb3BBbm5vdGF0aW9ucyhMaWJyYXJ5RW50aXR5IGxpYnJhcnkpOwoKICB2b2lkIHByb2Nlc3NKc0ludGVyb3BBbm5vdGF0aW9ucygKICAgICAgTmF0aXZlQmFzaWNEYXRhIG5hdGl2ZUJhc2ljRGF0YSwgTmF0aXZlRGF0YUJ1aWxkZXIgbmF0aXZlRGF0YUJ1aWxkZXIpOwp9CgovLy8gQ2xhc3MgdGhhdCBkZWxldGVzIHRoZSBjb250ZW50cyBvZiBhbiBbV29ybGRJbXBhY3RdIGNhY2hlLgovLyBUT0RPKHJlZGVtcHRpb24pOiB0aGlzIGNhbiBiZSBkZWxldGVkIHdoZW4gd2Ugc3Vuc2V0IHRoZSBvbGQgZnJvbnQgZW5kLgphYnN0cmFjdCBjbGFzcyBJbXBhY3RDYWNoZURlbGV0ZXIgewogIC8vLyBSZW1vdmVzIHRoZSBbV29ybGRJbXBhY3RdIGZvciBbZWxlbWVudF0gZnJvbSB0aGUgcmVzb2x1dGlvbiBjYWNoZS4gTGF0ZXIKICAvLy8gY2FsbHMgdG8gW2dldFdvcmxkSW1wYWN0XSBvciBbY29tcHV0ZVdvcmxkSW1wYWN0XSByZXR1cm5zIGFuIGVtcHR5IGltcGFjdC4KICB2b2lkIHVuY2FjaGVXb3JsZEltcGFjdChFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZW1vdmVzIHRoZSBbV29ybGRJbXBhY3RdcyBmb3IgYWxsIFtFbGVtZW50XXMgaW4gdGhlIHJlc29sdXRpb24gY2FjaGUuICwKICAvLy8gTGF0ZXIgY2FsbHMgdG8gW2dldFdvcmxkSW1wYWN0XSBvciBbY29tcHV0ZVdvcmxkSW1wYWN0XSByZXR1cm5zIGFuIGVtcHR5CiAgLy8vIGltcGFjdC4KICB2b2lkIGVtcHR5Q2FjaGUoKTsKfQpRAE5OPAEjARYcHyYzIRcmMh0lAU4gIj41AUoQLQFGECUBJwFQPgE+MQFDHAEvLQE4GgFMIUABTkwCAU4lOAE7ASRNAgE/SyRPUSsBT08OFQIBK3BhY2thZ2U6Y29tcGlsZXIvc3JjL2Zyb250ZW5kX3N0cmF0ZWd5LmRhcnRBc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnTAAGGHLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5hYnN0cmFjdF92YWx1ZV9kb21haW47CgppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCcgc2hvdyBDb25zdGFudFZhbHVlLCBQcmltaXRpdmVDb25zdGFudFZhbHVlOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnIHNob3cgRGFydFR5cGU7CmltcG9ydCAnLi4vaXIvc3RhdGljX3R5cGUuZGFydCc7CmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3dvcmxkX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnLi4vd29ybGQuZGFydCc7CgovLy8gRW51bS1saWtlIHZhbHVlcyB1c2VkIGZvciByZXBvcnRpbmcga25vd24gYW5kIHVua25vd24gdHJ1dGggdmFsdWVzLgpjbGFzcyBBYnN0cmFjdEJvb2wgewogIGZpbmFsIGJvb2wgX3ZhbHVlOwoKICBjb25zdCBBYnN0cmFjdEJvb2wuXyh0aGlzLl92YWx1ZSk7CgogIGJvb2wgZ2V0IGlzRGVmaW5pdGVseVRydWUgPT4gX3ZhbHVlID09IHRydWU7CgogIGJvb2wgZ2V0IGlzUG90ZW50aWFsbHlUcnVlID0+IF92YWx1ZSAhPSBmYWxzZTsKCiAgYm9vbCBnZXQgaXNEZWZpbml0ZWx5RmFsc2UgPT4gX3ZhbHVlID09IGZhbHNlOwoKICBib29sIGdldCBpc1BvdGVudGlhbGx5RmFsc2UgPT4gX3ZhbHVlICE9IHRydWU7CgogIC8vLyBBIHZhbHVlIG9mIGBBYnN0cmFjdC5UcnVlYCBpcyB1c2VkIHdoZW4gdGhlIHByb3BlcnR5IGlzIGtub3duIF9hbHdheXNfIHRvCiAgLy8vIGJlIHRydWUuCiAgc3RhdGljIGNvbnN0IEFic3RyYWN0Qm9vbCBUcnVlID0gY29uc3QgQWJzdHJhY3RCb29sLl8odHJ1ZSk7CgogIC8vLyBBIHZhbHVlIG9mIGBBYnN0cmFjdC5GYWxzZWAgaXMgdXNlZCB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBrbm93biBfbmV2ZXJfIHRvCiAgLy8vIGJlIHRydWUuCiAgc3RhdGljIGNvbnN0IEFic3RyYWN0Qm9vbCBGYWxzZSA9IGNvbnN0IEFic3RyYWN0Qm9vbC5fKGZhbHNlKTsKCiAgLy8vIEEgdmFsdWUgb2YgYEFic3RyYWN0Lk1heWJlYCBpcyB1c2VkIHdoZW4gdGhlIHByb3BlcnR5IG1pZ2h0IG9yIG1pZ2h0IG5vdAogIC8vLyBiZSB0cnVlLgogIHN0YXRpYyBjb25zdCBBYnN0cmFjdEJvb2wgTWF5YmUgPSBjb25zdCBBYnN0cmFjdEJvb2wuXyhudWxsKTsKCiAgc3RhdGljIEFic3RyYWN0Qm9vbCB0cnVlT3JNYXliZShib29sIHZhbHVlKSA9PiB2YWx1ZSA/IFRydWUgOiBNYXliZTsKCiAgc3RhdGljIEFic3RyYWN0Qm9vbCB0cnVlT3JGYWxzZShib29sIHZhbHVlKSA9PiB2YWx1ZSA/IFRydWUgOiBGYWxzZTsKCiAgc3RhdGljIEFic3RyYWN0Qm9vbCBtYXliZU9yRmFsc2UoYm9vbCB2YWx1ZSkgPT4gdmFsdWUgPyBNYXliZSA6IEZhbHNlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PgogICAgICAnQWJzdHJhY3RCb29sLiR7X3ZhbHVlID09IG51bGwgPyAnTWF5YmUnIDogKF92YWx1ZSA/ICdUcnVlJyA6ICdGYWxzZScpfSc7Cn0KCi8vLyBTdHJhdGVneSBmb3IgdGhlIGFic3RyYWN0aW9uIG9mIHJ1bnRpbWUgdmFsdWVzIHVzZWQgYnkgdGhlIGdsb2JhbCB0eXBlCi8vLyBpbmZlcmVuY2UuCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0VmFsdWVTdHJhdGVneSB7CiAgLy8vIENyZWF0ZXMgdGhlIGFic3RyYWN0IHZhbHVlIGRvbWFpbiBmb3IgW2Nsb3NlZFdvcmxkXS4KICBBYnN0cmFjdFZhbHVlRG9tYWluIGNyZWF0ZURvbWFpbihKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpOwoKICAvLy8gQ3JlYXRlcyB0aGUgW1NlbGVjdG9yQ29uc3RyYWludHNTdHJhdGVneV0gdXNlZCBieSB0aGUgYmFja2VuZCBlbnF1ZXVlci4KICBTZWxlY3RvckNvbnN0cmFpbnRzU3RyYXRlZ3kgY3JlYXRlU2VsZWN0b3JTdHJhdGVneSgpOwp9CgovLy8gQSB2YWx1ZSBpbiBhbiBhYnN0cmFjdGlvbiBvZiBydW50aW1lIHZhbHVlcy4KYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RWYWx1ZSB7fQoKLy8vIEEgcGFpciBvZiBhbiBBYnN0cmFjdFZhbHVlIGFuZCBhIHByZWNpc2lvbiBmbGFnLiBTZWUKLy8vIFtBYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZUZyb21TdGF0aWNUeXBlXSBmb3Igc2VtYW50aWNzIG9mIFtpc1ByZWNpc2VdLgpjbGFzcyBBYnN0cmFjdFZhbHVlV2l0aFByZWNpc2lvbiB7CiAgZmluYWwgQWJzdHJhY3RWYWx1ZSBhYnN0cmFjdFZhbHVlOwogIGZpbmFsIGJvb2wgaXNQcmVjaXNlOwoKICBjb25zdCBBYnN0cmFjdFZhbHVlV2l0aFByZWNpc2lvbih0aGlzLmFic3RyYWN0VmFsdWUsIHRoaXMuaXNQcmVjaXNlKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgJ0Fic3RyYWN0VmFsdWVXaXRoUHJlY2lzaW9uKCRhYnN0cmFjdFZhbHVlLCBpc1ByZWNpc2U6ICRpc1ByZWNpc2UpJzsKfQoKLy8vIEEgc3lzdGVtIHRoYXQgaW1wbGVtZW50cyBhbiBhYnN0cmFjdGlvbiBvdmVyIHJ1bnRpbWUgdmFsdWVzLgphYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFZhbHVlRG9tYWluIHsKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgYW4gdW5rbm93biBydW50aW1lIHZhbHVlLgogIEFic3RyYWN0VmFsdWUgZ2V0IGR5bmFtaWNUeXBlOwoKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgYSBub24tbnVsbCBzdWJ0eXBlIG9mIGBUeXBlYCBhdAogIC8vLyBydW50aW1lLgogIEFic3RyYWN0VmFsdWUgZ2V0IHR5cGVUeXBlOwoKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgYSBub24tbnVsbCBzdWJ0eXBlIG9mIGBGdW5jdGlvbmAgYXQKICAvLy8gcnVudGltZS4KICBBYnN0cmFjdFZhbHVlIGdldCBmdW5jdGlvblR5cGU7CgogIC8vLyBUaGUgW0Fic3RyYWN0VmFsdWVdIHRoYXQgcmVwcmVzZW50cyBhIG5vbi1udWxsIHN1YnR5cGUgb2YgYGJvb2xgIGF0CiAgLy8vIHJ1bnRpbWUuCiAgQWJzdHJhY3RWYWx1ZSBnZXQgYm9vbFR5cGU7CgogIC8vLyBUaGUgW0Fic3RyYWN0VmFsdWVdIHRoYXQgcmVwcmVzZW50cyBhIG5vbi1udWxsIHN1YnR5cGUgb2YgYGludGAgYXQKICAvLy8gcnVudGltZS4KICBBYnN0cmFjdFZhbHVlIGdldCBpbnRUeXBlOwoKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgYSBub24tbnVsbCBzdWJ0eXBlIG9mIGBkb3VibGVgIGF0CiAgLy8vIHJ1bnRpbWUuCiAgQWJzdHJhY3RWYWx1ZSBnZXQgZG91YmxlVHlwZTsKCiAgLy8vIFRoZSBbQWJzdHJhY3RWYWx1ZV0gdGhhdCByZXByZXNlbnRzIGEgbm9uLW51bGwgc3VidHlwZSBvZiBgbnVtYCBhdAogIC8vLyBydW50aW1lLgogIEFic3RyYWN0VmFsdWUgZ2V0IG51bVR5cGU7CgogIC8vLyBUaGUgW0Fic3RyYWN0VmFsdWVdIHRoYXQgcmVwcmVzZW50cyBhIG5vbi1udWxsIHN1YnR5cGUgb2YgYFN0cmluZ2AgYXQKICAvLy8gcnVudGltZS4KICBBYnN0cmFjdFZhbHVlIGdldCBzdHJpbmdUeXBlOwoKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgYSBub24tbnVsbCBzdWJ0eXBlIG9mIGBMaXN0YCBhdAogIC8vLyBydW50aW1lLgogIEFic3RyYWN0VmFsdWUgZ2V0IGxpc3RUeXBlOwoKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgYSBub24tbnVsbCBzdWJ0eXBlIG9mIGBTZXRgIGF0CiAgLy8vIHJ1bnRpbWUuCiAgQWJzdHJhY3RWYWx1ZSBnZXQgc2V0VHlwZTsKCiAgLy8vIFRoZSBbQWJzdHJhY3RWYWx1ZV0gdGhhdCByZXByZXNlbnRzIGEgbm9uLW51bGwgc3VidHlwZSBvZiBgTWFwYCBhdAogIC8vLyBydW50aW1lLgogIEFic3RyYWN0VmFsdWUgZ2V0IG1hcFR5cGU7CgogIC8vLyBUaGUgW0Fic3RyYWN0VmFsdWVdIHRoYXQgcmVwcmVzZW50cyBhIG5vbi1udWxsIHZhbHVlIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RWYWx1ZSBnZXQgbm9uTnVsbFR5cGU7CgogIC8vLyBUaGUgW0Fic3RyYWN0VmFsdWVdIHRoYXQgcmVwcmVzZW50cyB0aGUgYG51bGxgIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RWYWx1ZSBnZXQgbnVsbFR5cGU7CgogIC8vLyBUaGUgW0Fic3RyYWN0VmFsdWVdIHRoYXQgcmVwcmVzZW50cyBhIG5vbi1udWxsIGdyb3dhYmxlIEphdmFTY3JpcHQgYXJyYXkKICAvLy8gYXQgcnVudGltZS4KICBBYnN0cmFjdFZhbHVlIGdldCBncm93YWJsZUxpc3RUeXBlOwoKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgYSBub24tbnVsbCBmaXhlZCBzaXplIEphdmFTY3JpcHQgYXJyYXkKICAvLy8gYXQgcnVudGltZS4KICBBYnN0cmFjdFZhbHVlIGdldCBmaXhlZExpc3RUeXBlOwoKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgYSBub24tbnVsbCAzMS1iaXQgdW5zaWduZWQgaW50ZWdlciBhdAogIC8vLyBydW50aW1lLgogIEFic3RyYWN0VmFsdWUgZ2V0IHVpbnQzMVR5cGU7CgogIC8vLyBUaGUgW0Fic3RyYWN0VmFsdWVdIHRoYXQgcmVwcmVzZW50cyBhIG5vbi1udWxsIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGF0CiAgLy8vIHJ1bnRpbWUuCiAgQWJzdHJhY3RWYWx1ZSBnZXQgdWludDMyVHlwZTsKCiAgLy8vIFRoZSBbQWJzdHJhY3RWYWx1ZV0gdGhhdCByZXByZXNlbnRzIGEgbm9uLW51bGwgdW5zaWduZWQgaW50ZWdlciBhdAogIC8vLyBydW50aW1lLgogIEFic3RyYWN0VmFsdWUgZ2V0IHBvc2l0aXZlSW50VHlwZTsKCiAgLy8vIFRoZSBbQWJzdHJhY3RWYWx1ZV0gdGhhdCByZXByZXNlbnRzIGEgbm9uLW51bGwgY29uc3RhbnQgbGlzdCBsaXRlcmFsIGF0CiAgLy8vIHJ1bnRpbWUuCiAgQWJzdHJhY3RWYWx1ZSBnZXQgY29uc3RMaXN0VHlwZTsKCiAgLy8vIFRoZSBbQWJzdHJhY3RWYWx1ZV0gdGhhdCByZXByZXNlbnRzIGEgbm9uLW51bGwgY29uc3RhbnQgc2V0IGxpdGVyYWwgYXQKICAvLy8gcnVudGltZS4KICBBYnN0cmFjdFZhbHVlIGdldCBjb25zdFNldFR5cGU7CgogIC8vLyBUaGUgW0Fic3RyYWN0VmFsdWVdIHRoYXQgcmVwcmVzZW50cyBhIG5vbi1udWxsIGNvbnN0YW50IG1hcCBsaXRlcmFsIGF0CiAgLy8vIHJ1bnRpbWUuCiAgQWJzdHJhY3RWYWx1ZSBnZXQgY29uc3RNYXBUeXBlOwoKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgdGhlIGVtcHR5IHNldCBvZiBydW50aW1lIHZhbHVlcy4KICBBYnN0cmFjdFZhbHVlIGdldCBlbXB0eVR5cGU7CgogIC8vLyBUaGUgW0Fic3RyYWN0VmFsdWVdIHRoYXQgcmVwcmVzZW50cyBhIG5vbi1udWxsIGluc3RhbmNlIGF0IHJ1bnRpbWUgb2YgdGhlCiAgLy8vIGBJdGVyYWJsZWAgY2xhc3MgdXNlZCBmb3IgdGhlIGBzeW5jKmAgaW1wbGVtZW50YXRpb24uCiAgQWJzdHJhY3RWYWx1ZSBnZXQgc3luY1N0YXJJdGVyYWJsZVR5cGU7CgogIC8vLyBUaGUgW0Fic3RyYWN0VmFsdWVdIHRoYXQgcmVwcmVzZW50cyBhIG5vbi1udWxsIGluc3RhbmNlIGF0IHJ1bnRpbWUgb2YgdGhlCiAgLy8vIGBGdXR1cmVgIGNsYXNzIHVzZWQgZm9yIHRoZSBgYXN5bmNgIGltcGxlbWVudGF0aW9uLgogIEFic3RyYWN0VmFsdWUgZ2V0IGFzeW5jRnV0dXJlVHlwZTsKCiAgLy8vIFRoZSBbQWJzdHJhY3RWYWx1ZV0gdGhhdCByZXByZXNlbnRzIGEgbm9uLW51bGwgaW5zdGFuY2UgYXQgcnVudGltZSBvZiB0aGUKICAvLy8gYFN0cmVhbWAgY2xhc3MgdXNlZCBmb3IgdGhlIGBhc3luYypgIGltcGxlbWVudGF0aW9uLgogIEFic3RyYWN0VmFsdWUgZ2V0IGFzeW5jU3RhclN0cmVhbVR5cGU7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdFZhbHVlXSBhbmQgYSBwcmVjaXNpb24gZmxhZy4KICAvLy8KICAvLy8gQ3JlYXRlcyBhbiBbQWJzdHJhY3RWYWx1ZV0gY29ycmVzcG9uZGluZyB0byBhbiBleHByZXNzaW9uIG9mIHRoZSBnaXZlbgogIC8vLyBzdGF0aWMgW3R5cGVdIGFuZCBbY2xhc3NSZWxhdGlvbl0sIGFuZCBhbiBgaXNQcmVjaXNlYCBmbGFnIHRoYXQgaXMgYHRydWVgCiAgLy8vIGlmIHRoZSBbQWJzdHJhY3RWYWx1ZV0gcHJlY2lzZWx5IHJlcHJlc2VudHMgdGhlIFt0eXBlXSwgb3IgYGZhbHNlYCBpZiB0aGUKICAvLy8gW0Fic3RyYWN0VmFsdWVdIGlzIGFuIGFwcHJveGltYXRpb24uCiAgLy8vCiAgLy8vIElmIGBpc1ByZWNpc2VgIGlzIGB0cnVlYCwgdGhlbiB0aGUgYWJzdHJhY3QgdmFsdWUgaXMgZXF1aXZhbGVudCB0byBbdHlwZV0uCiAgLy8vCiAgLy8vIElmIGBpc1ByZWNpc2VgIGlzIGBmYWxzZWAgdGhlbiB0aGUgYWJzdHJhY3QgdmFsdWUgY29udGFpbnMgYWxsIHR5cGVzIGluCiAgLy8vIFt0eXBlXSBidXQgbWlnaHQgY29udGFpbiBtb3JlLiBUd28gZGlmZmVyZW50IERhcnQgdHlwZXMgY2FuIGhhdmUgdGhlIHNhbWUKICAvLy8gYXBwcm94aW1hdGlvbiwgc28gY2FyZSBtdXN0IGJlIHRha2VuIG5vdCB0byBtYWtlIHN1YnR5cGUganVkZ2VtZW50cyBmcm9tCiAgLy8vIGltcHJlY2lzZSBhYnN0cmFjdCB2YWx1ZXMuCiAgLy8vCiAgLy8vIFRoZSB0eXBlIGBUYCB3aGVyZSBgVGAgaXMgYSB0eXBlIHBhcmFtZXRlciB3b3VsZCBiZSBtb2RlbGxlZCBieSBhbgogIC8vLyBpbXByZWNpc2UgYWJzdHJhY3QgdmFsdWUgdHlwZSBzaW5jZSB3ZSBkb24ndCBrbm93IGhvdyBgVGAgaXMKICAvLy8gaW5zdGFudGlhdGVkLiBJdCBtaWdodCBiZSBhcHByb3hpbWF0ZWQgYnkgdGhlIGJvdW5kIG9mIGBUYC4gIGBMaXN0PFQ+YAogIC8vLyB3aGVyZSBgVGAgaXMgYSB0eXBlIHBhcmFtZXRlciB3b3VsZCBiZSBtb2RlbGxlZCBhcyBpbXByZWNpc2UgZm9yIHRoZSBzYW1lCiAgLy8vIHJlYXNvbi4KICAvLy8KICAvLy8gSWYgdGhlIGFic3RyYWN0IHZhbHVlIGRvbWFpbiBkb2VzIG5vdCB0cmFjayBnZW5lcmljIHR5cGUgcGFyYW1ldGVycyAoZS5nLgogIC8vLyB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0eXBlLW1hc2tzKSwgdGhlbiBgTGlzdDxpbnQ+YCB3b3VsZCBuZWVkIHRvCiAgLy8vIGJlIG1vZGVsbGVkIGJ5IGFuIGltcHJlY2lzZSBhYnN0cmFjdCB2YWx1ZS4gYExpc3Q8ZHluYW1pYz5gIG1pZ2h0IGJlIHRoZQogIC8vLyBpbXByZWNpc2UgYXBwcm94aW1hdGlvbi4KICAvLy8KICAvLy8gSW4gdGhlIGNvbnRleHQgb2YgYSBydW4tdGltZSB0eXBlIGNoZWNrLCBhbiBpbXByZWNpc2UgYWJzdHJhY3QgdmFsdWUgY2FuCiAgLy8vIGJlIHVzZWQgdG8gY29tcHV0ZSBhbiBvdXRwdXQgdHlwZSBieSBuYXJyb3dpbmcgdGhlIGlucHV0IHR5cGUsIGJ1dCBvbmx5IGEKICAvLy8gcHJlY2lzZSBhYnN0cmFjdCB2YWx1ZSBjb3VsZCBiZSB1c2VkIHRvIHJlbW92ZSB0aGUgY2hlY2sgb24gdGhlIGJhc2lzIG9mCiAgLy8vIHRoZSBpbnB1dCdzIGFic3RyYWN0IHR5cGUuIFRoZSBjaGVjayBjYW4gb25seSBiZSByZW1vdmVkIHdpdGggYWRkaXRpb25hbAogIC8vLyByZWFzb25pbmcsIGZvciBleGFtcGxlLCB0aGF0IGEgZG9taW5hdGluZyBjaGVjayB1c2VzIHRoZSBzYW1lIHR5cGUKICAvLy8gZXhwcmVzc2lvbi4KICBBYnN0cmFjdFZhbHVlV2l0aFByZWNpc2lvbiBjcmVhdGVGcm9tU3RhdGljVHlwZShEYXJ0VHlwZSB0eXBlLAogICAgICB7Q2xhc3NSZWxhdGlvbiBjbGFzc1JlbGF0aW9uID0gQ2xhc3NSZWxhdGlvbi5zdWJ0eXBlLCBib29sIG51bGxhYmxlfSk7CgogIC8vLyBDcmVhdGVzIGFuIFtBYnN0cmFjdFZhbHVlXSBmb3IgYSBub24tbnVsbCBleGFjdCBpbnN0YW5jZSBvZiBbY2xzXS4KICBBYnN0cmFjdFZhbHVlIGNyZWF0ZU5vbk51bGxFeGFjdChDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gQ3JlYXRlcyBhbiBbQWJzdHJhY3RWYWx1ZV0gZm9yIGEgcG90ZW50aWFsbHkgbnVsbCBleGFjdCBpbnN0YW5jZSBvZiBbY2xzXS4KICBBYnN0cmFjdFZhbHVlIGNyZWF0ZU51bGxhYmxlRXhhY3QoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIENyZWF0ZXMgYW4gW0Fic3RyYWN0VmFsdWVdIGZvciBhIG5vbi1udWxsIGluc3RhbmNlIHRoYXQgZXh0ZW5kcyBbY2xzXS4KICBBYnN0cmFjdFZhbHVlIGNyZWF0ZU5vbk51bGxTdWJjbGFzcyhDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gQ3JlYXRlcyBhbiBbQWJzdHJhY3RWYWx1ZV0gZm9yIGEgbm9uLW51bGwgaW5zdGFuY2UgdGhhdCBpbXBsZW1lbnRzIFtjbHNdLgogIEFic3RyYWN0VmFsdWUgY3JlYXRlTm9uTnVsbFN1YnR5cGUoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIENyZWF0ZXMgYW4gW0Fic3RyYWN0VmFsdWVdIGZvciBhIHBvdGVudGlhbGx5IG51bGwgaW5zdGFuY2UgdGhhdCBpbXBsZW1lbnRzCiAgLy8vIFtjbHNdLgogIEFic3RyYWN0VmFsdWUgY3JlYXRlTnVsbGFibGVTdWJ0eXBlKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhIG5hdGl2ZSB0eXBlZAogIC8vLyBhcnJheSBvciBgbnVsbGAgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNUeXBlZEFycmF5KGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIGNvdWxkIGJlIGEgbmF0aXZlCiAgLy8vIHR5cGVkIGFycmF5IGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RCb29sIGNvdWxkQmVUeXBlZEFycmF5KGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgdGhlIHZlcnNpb24gb2YgdGhlIGFic3RyYWN0IFt2YWx1ZV0gdGhhdCBleGNsdWRlcyBgbnVsbGAuCiAgQWJzdHJhY3RWYWx1ZSBleGNsdWRlTnVsbChjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIHRoZSB2ZXJzaW9uIG9mIHRoZSBhYnN0cmFjdCBbdmFsdWVdIHRoYXQgaW5jbHVkZXMgYG51bGxgLgogIEFic3RyYWN0VmFsdWUgaW5jbHVkZU51bGwoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gY29udGFpbnMKICAvLy8gaW5zdGFuY2VzIG9mIFtjbHNdIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RCb29sIGNvbnRhaW5zVHlwZShjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSwgQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIG9ubHkgY29udGFpbnMKICAvLy8gc3VidHlwZXMgb2YgW2Nsc10gb3IgYG51bGxgIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RCb29sIGNvbnRhaW5zT25seVR5cGUoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUsIENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhbiBpbnN0YW5jZSBvZgogIC8vLyBbY2xzXSBvciBgbnVsbGAgYXQgcnVudGltZS4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNZXJnZSB0aGlzIHdpdGggW2lzSW5zdGFuY2VPZl0uCiAgQWJzdHJhY3RCb29sIGlzSW5zdGFuY2VPZk9yTnVsbCgKICAgICAgY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUsIENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBrbm93biB0byBiZSBhbgogIC8vLyBpbnN0YW5jZSBvZiBbY2xzXSBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc0luc3RhbmNlT2YoQWJzdHJhY3RWYWx1ZSB2YWx1ZSwgQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIGlzIGVtcHR5IHNldCBvZgogIC8vLyBydW50aW1lIHZhbHVlcy4KICBBYnN0cmFjdEJvb2wgaXNFbXB0eShjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhIG5vbi1udWxsCiAgLy8vIGV4YWN0IGNsYXNzIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RCb29sIGlzRXhhY3QoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYW4gZXhhY3QgY2xhc3MKICAvLy8gb3IgYG51bGxgIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RCb29sIGlzRXhhY3RPck51bGwoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyB0aGUgW0NsYXNzRW50aXR5XSBpZiB0aGlzIFt2YWx1ZV0gaXMgYSBub24tbnVsbCBpbnN0YW5jZSBvZiBhbgogIC8vLyBleGFjdCBjbGFzcyBhdCBydW50aW1lLCBhbmQgYG51bGxgIG90aGVyd2lzZS4KICBDbGFzc0VudGl0eSBnZXRFeGFjdENsYXNzKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIGlzIGBudWxsYCBhdAogIC8vLyBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc051bGwoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBKYXZhU2NyaXB0CiAgLy8vIGJvb2wsIG51bWJlciwgc3RyaW5nLCBhcnJheSBvciBgbnVsbGAgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNQcmltaXRpdmUoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBKYXZhU2NyaXB0CiAgLy8vIG51bWJlciBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc1ByaW1pdGl2ZU51bWJlcihjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhIEphdmFTY3JpcHQKICAvLy8gYm9vbCBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc1ByaW1pdGl2ZUJvb2xlYW4oY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBKYXZhU2NyaXB0CiAgLy8vIGFycmF5IGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RCb29sIGlzUHJpbWl0aXZlQXJyYXkoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBKYXZhU2NyaXB0CiAgLy8vIHN0cmluZywgYXJyYXksIG5hdGl2ZSBIVE1MIGxpc3Qgb3IgYG51bGxgIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RCb29sIGlzSW5kZXhhYmxlUHJpbWl0aXZlKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIGlzIGEgZml4ZWQtc2l6ZQogIC8vLyBvciBjb25zdGFudCBKYXZhU2NyaXB0IGFycmF5IG9yIGBudWxsYCBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc0ZpeGVkQXJyYXkoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBncm93YWJsZQogIC8vLyBKYXZhU2NyaXB0IGFycmF5IG9yIGBudWxsYCBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc0V4dGVuZGFibGVBcnJheShjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhIG11dGFibGUKICAvLy8gSmF2YVNjcmlwdCBhcnJheSBvciBgbnVsbGAgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNNdXRhYmxlQXJyYXkoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBtdXRhYmxlCiAgLy8vIEphdmFTY3JpcHQgYXJyYXksIG5hdGl2ZSBIVE1MIGxpc3Qgb3IgYG51bGxgIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RCb29sIGlzTXV0YWJsZUluZGV4YWJsZShjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhIEphdmFTY3JpcHQKICAvLy8gYXJyYXkgb3IgYG51bGxgIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RCb29sIGlzQXJyYXkoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBKYXZhU2NyaXB0CiAgLy8vIHN0cmluZyBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc1ByaW1pdGl2ZVN0cmluZyhjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhbiBpbnRlcmNlcHRvcgogIC8vLyBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc0ludGVyY2VwdG9yKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIGlzIGEgbm9uLW51bGwKICAvLy8gaW50ZWdlciB2YWx1ZSBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc0ludGVnZXIoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBub24tbnVsbCAzMgogIC8vLyBiaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc1VJbnQzMihjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhIG5vbi1udWxsIDMxCiAgLy8vIGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RCb29sIGlzVUludDMxKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIGlzIGEgbm9uLW51bGwKICAvLy8gdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc1Bvc2l0aXZlSW50ZWdlcihjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhbiB1bnNpZ25lZAogIC8vLyBpbnRlZ2VyIHZhbHVlIG9yIGBudWxsYCBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc1Bvc2l0aXZlSW50ZWdlck9yTnVsbChjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhbiBpbnRlZ2VyCiAgLy8vIHZhbHVlIG9yIGBudWxsYCBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc0ludGVnZXJPck51bGwoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBub24tbnVsbAogIC8vLyBKYXZhU2NyaXB0IG51bWJlciBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc051bWJlcihjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhIEphdmFTY3JpcHQKICAvLy8gbnVtYmVyIG9yIGBudWxsYCBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc051bWJlck9yTnVsbChjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhIG5vbi1pbnRlZ2VyCiAgLy8vIG51bWJlciBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc0RvdWJsZShjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhIG5vbi1pbnRlZ2VyCiAgLy8vIG51bWJlciBvciBgbnVsbGAgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNEb3VibGVPck51bGwoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBKYXZhU2NyaXB0CiAgLy8vIGJvb2wgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNCb29sZWFuKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIGlzIGEgSmF2YVNjcmlwdAogIC8vLyBib29sIG9yIGBudWxsYCBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc0Jvb2xlYW5Pck51bGwoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBKYXZhU2NyaXB0CiAgLy8vIHN0cmluZyBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc1N0cmluZyhjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhIEphdmFTY3JpcHQKICAvLy8gc3RyaW5nIG9yIGBudWxsYCBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc1N0cmluZ09yTnVsbChjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBhIEphdmFTY3JpcHQKICAvLy8gcHJpbWl0aXZlLCBwb3NzaWJsZSBgbnVsbGAuCiAgQWJzdHJhY3RCb29sIGlzUHJpbWl0aXZlT3JOdWxsKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgW0Fic3RyYWN0VmFsdWVdIGZvciB0aGUgcnVudGltZSB2YWx1ZXMgY29udGFpbmVkIGluIGVpdGhlciBbYV0gb3IKICAvLy8gW2JdLgogIEFic3RyYWN0VmFsdWUgdW5pb24oY292YXJpYW50IEFic3RyYWN0VmFsdWUgYSwgY292YXJpYW50IEFic3RyYWN0VmFsdWUgYik7CgogIC8vLyBSZXR1cm5zIFtBYnN0cmFjdFZhbHVlXSBmb3IgdGhlIHJ1bnRpbWUgdmFsdWVzIGNvbnRhaW5lZCBpbiBhdCBsZWFzdCBvbmUKICAvLy8gb2YgW3ZhbHVlc10uCiAgQWJzdHJhY3RWYWx1ZSB1bmlvbk9mTWFueShJdGVyYWJsZTxBYnN0cmFjdFZhbHVlPiB2YWx1ZXMpOwoKICAvLy8gUmV0dXJucyBbQWJzdHJhY3RWYWx1ZV0gZm9yIHRoZSBydW50aW1lIHZhbHVlcyB0aGF0IFthXSBhbmQgW2JdIGhhdmUgaW4KICAvLy8gY29tbW9uLgogIEFic3RyYWN0VmFsdWUgaW50ZXJzZWN0aW9uKAogICAgICBjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSBhLCBjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSBiKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbYV0gYW5kIFtiXSBoYXZlIG5vCiAgLy8vIHJ1bnRpbWUgdmFsdWVzIGluIGNvbW1vbi4KICBBYnN0cmFjdEJvb2wgYXJlRGlzam9pbnQoCiAgICAgIGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIGEsIGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIGIpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFthXSBjb250YWlucyBhbGwgbm9uLW51bGwKICAvLy8gcnVudGltZSB2YWx1ZXMuCiAgQWJzdHJhY3RCb29sIGNvbnRhaW5zQWxsKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIGEpOwoKICAvLy8gQ29tcHV0ZXMgdGhlIFtBYnN0cmFjdFZhbHVlXSBjb3JyZXNwb25kaW5nIHRvIHRoZSBjb25zdGFudCBbdmFsdWVdLgogIEFic3RyYWN0VmFsdWUgY29tcHV0ZUFic3RyYWN0VmFsdWVGb3JDb25zdGFudChDb25zdGFudFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFt2YWx1ZV0gcmVwcmVzZW50cyBhIGNvbnRhaW5lciB2YWx1ZSBhdCBydW50aW1lLgogIGJvb2wgaXNDb250YWluZXIoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gQ3JlYXRlcyBhIGNvbnRhaW5lciB2YWx1ZSBzcGVjaWFsaXphdGlvbiBvZiBbb3JpZ2luYWxWYWx1ZV0gd2l0aCB0aGUKICAvLy8gaW5mZXJyZWQgW2VsZW1lbnRdIHJ1bnRpbWUgdmFsdWUgYW5kIGluZmVycmVkIHJ1bnRpbWUgW2xlbmd0aF0uCiAgLy8vCiAgLy8vIFRoZSBbYWxsb2NhdGlvbk5vZGVdIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhpcyBwYXJ0aWN1bGFyIG1hcCBhbGxvY2F0aW9uLgogIC8vLyBUaGUgW2FsbG9jYXRpb25FbGVtZW50XSBpcyB1c2VkIG9ubHkgZm9yIGRlYnVnZ2luZy4KICBBYnN0cmFjdFZhbHVlIGNyZWF0ZUNvbnRhaW5lclZhbHVlKAogICAgICBBYnN0cmFjdFZhbHVlIG9yaWdpbmFsVmFsdWUsCiAgICAgIE9iamVjdCBhbGxvY2F0aW9uTm9kZSwKICAgICAgTWVtYmVyRW50aXR5IGFsbG9jYXRpb25FbGVtZW50LAogICAgICBBYnN0cmFjdFZhbHVlIGVsZW1lbnRUeXBlLAogICAgICBpbnQgbGVuZ3RoKTsKCiAgLy8vIFJldHVybnMgdGhlIGVsZW1lbnQgdHlwZSBvZiBbdmFsdWVdIGlmIGl0IHJlcHJlc2VudHMgYSBjb250YWluZXIgdmFsdWUKICAvLy8gYXQgcnVudGltZS4gUmV0dXJucyBbZHluYW1pY1R5cGVdIG90aGVyd2lzZS4KICBBYnN0cmFjdFZhbHVlIGdldENvbnRhaW5lckVsZW1lbnRUeXBlKEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJuIHRoZSBrbm93biBsZW5ndGggb2YgW3ZhbHVlXSBpZiBpdCByZXByZXNlbnRzIGEgY29udGFpbmVyIHZhbHVlCiAgLy8vIGF0IHJ1bnRpbWUuIFJldHVybnMgYG51bGxgIGlmIHRoZSBsZW5ndGggaXMgdW5rbm93biBvciBpZiBbdmFsdWVdIGRvZXNuJ3QKICAvLy8gcmVwcmVzZW50IGEgY29udGFpbmVyIHZhbHVlIGF0IHJ1bnRpbWUuCiAgaW50IGdldENvbnRhaW5lckxlbmd0aChBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFt2YWx1ZV0gcmVwcmVzZW50cyBhIHNldCB2YWx1ZSBhdCBydW50aW1lLgogIGJvb2wgaXNTZXQoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gQ3JlYXRlcyBhIHNldCB2YWx1ZSBzcGVjaWFsaXphdGlvbiBvZiBbb3JpZ2luYWxWYWx1ZV0gd2l0aCB0aGUgaW5mZXJyZWQKICAvLy8gW2VsZW1lbnRUeXBlXSBydW50aW1lIHZhbHVlLgogIC8vLwogIC8vLyBUaGUgW2FsbG9jYXRpb25Ob2RlXSBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoaXMgcGFydGljdWxhciBzZXQgYWxsb2NhdGlvbi4KICAvLy8gVGhlIFthbGxvY2F0aW9uRWxlbWVudF0gaXMgdXNlZCBvbmx5IGZvciBkZWJ1Z2dpbmcuCiAgQWJzdHJhY3RWYWx1ZSBjcmVhdGVTZXRWYWx1ZSgKICAgICAgQWJzdHJhY3RWYWx1ZSBvcmlnaW5hbFZhbHVlLAogICAgICBPYmplY3QgYWxsb2NhdGlvbk5vZGUsCiAgICAgIE1lbWJlckVudGl0eSBhbGxvY2F0aW9uRWxlbWVudCwKICAgICAgQWJzdHJhY3RWYWx1ZSBlbGVtZW50VHlwZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBlbGVtZW50IHR5cGUgb2YgW3ZhbHVlXSBpZiBpdCByZXByZXNlbnRzIGEgc2V0IHZhbHVlIGF0CiAgLy8vIHJ1bnRpbWUuIFJldHVybnMgW2R5bmFtaWNUeXBlXSBvdGhlcndpc2UuCiAgQWJzdHJhY3RWYWx1ZSBnZXRTZXRFbGVtZW50VHlwZShBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFt2YWx1ZV0gcmVwcmVzZW50cyBhIG1hcCB2YWx1ZSBhdCBydW50aW1lLgogIGJvb2wgaXNNYXAoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gQ3JlYXRlcyBhIG1hcCB2YWx1ZSBzcGVjaWFsaXphdGlvbiBvZiBbb3JpZ2luYWxWYWx1ZV0gd2l0aCB0aGUgaW5mZXJyZWQKICAvLy8gW2tleV0gYW5kIFt2YWx1ZV0gcnVudGltZSB2YWx1ZXMuCiAgLy8vCiAgLy8vIFRoZSBbYWxsb2NhdGlvbk5vZGVdIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhpcyBwYXJ0aWN1bGFyIG1hcCBhbGxvY2F0aW9uLgogIC8vLyBUaGUgW2FsbG9jYXRpb25FbGVtZW50XSBpcyB1c2VkIG9ubHkgZm9yIGRlYnVnZ2luZy4KICBBYnN0cmFjdFZhbHVlIGNyZWF0ZU1hcFZhbHVlKAogICAgICBBYnN0cmFjdFZhbHVlIG9yaWdpbmFsVmFsdWUsCiAgICAgIE9iamVjdCBhbGxvY2F0aW9uTm9kZSwKICAgICAgTWVtYmVyRW50aXR5IGFsbG9jYXRpb25FbGVtZW50LAogICAgICBBYnN0cmFjdFZhbHVlIGtleSwKICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBrZXkgdHlwZSBvZiBbdmFsdWVdIGlmIGl0IHJlcHJlc2VudHMgYSBtYXAgdmFsdWUgYXQgcnVudGltZS4KICAvLy8gUmV0dXJucyBbZHluYW1pY1R5cGVdIG90aGVyd2lzZS4KICBBYnN0cmFjdFZhbHVlIGdldE1hcEtleVR5cGUoQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIHRoZSB2YWx1ZSB0eXBlIG9mIFt2YWx1ZV0gaWYgaXQgcmVwcmVzZW50cyBhIG1hcCB2YWx1ZSBhdCBydW50aW1lLgogIC8vLyBSZXR1cm5zIFtkeW5hbWljVHlwZV0gb3RoZXJ3aXNlLgogIEFic3RyYWN0VmFsdWUgZ2V0TWFwVmFsdWVUeXBlKEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW3ZhbHVlXSByZXByZXNlbnRzIGEgZGljdGlvbmFyeSB2YWx1ZSwgdGhhdCBpcywgYSBtYXAKICAvLy8gd2l0aCBzdHJpbmdzIGFzIGtleXMsIGF0IHJ1bnRpbWUuCiAgYm9vbCBpc0RpY3Rpb25hcnkoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gQ3JlYXRlcyBhIGRpY3Rpb25hcnkgdmFsdWUgc3BlY2lhbGl6YXRpb24gb2YgW29yaWdpbmFsVmFsdWVdIHdpdGggdGhlCiAgLy8vIGluZmVycmVkIFtrZXldIGFuZCBbdmFsdWVdIHJ1bnRpbWUgdmFsdWVzLgogIC8vLwogIC8vLyBUaGUgW2FsbG9jYXRpb25Ob2RlXSBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoaXMgcGFydGljdWxhciBtYXAgYWxsb2NhdGlvbi4KICAvLy8gVGhlIFthbGxvY2F0aW9uRWxlbWVudF0gaXMgdXNlZCBvbmx5IGZvciBkZWJ1Z2dpbmcuCiAgQWJzdHJhY3RWYWx1ZSBjcmVhdGVEaWN0aW9uYXJ5VmFsdWUoCiAgICAgIEFic3RyYWN0VmFsdWUgb3JpZ2luYWxWYWx1ZSwKICAgICAgT2JqZWN0IGFsbG9jYXRpb25Ob2RlLAogICAgICBNZW1iZXJFbnRpdHkgYWxsb2NhdGlvbkVsZW1lbnQsCiAgICAgIEFic3RyYWN0VmFsdWUga2V5LAogICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlLAogICAgICBNYXA8U3RyaW5nLCBBYnN0cmFjdFZhbHVlPiBtYXBwaW5ncyk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbdmFsdWVdIGlzIGEgZGljdGlvbmFyeSB2YWx1ZSB3aGljaCBjb250YWlucyBba2V5XSBhcwogIC8vLyBhIGtleS4KICBib29sIGNvbnRhaW5zRGljdGlvbmFyeUtleShBYnN0cmFjdFZhbHVlIHZhbHVlLCBTdHJpbmcga2V5KTsKCiAgLy8vIFJldHVybnMgdGhlIHZhbHVlIHR5cGUgZm9yIFtrZXldIGluIFt2YWx1ZV0gaWYgaXQgcmVwcmVzZW50cyBhIGRpY3Rpb25hcnkKICAvLy8gdmFsdWUgYXQgcnVudGltZS4gUmV0dXJucyBbZHluYW1pY1R5cGVdIG90aGVyd2lzZS4KICBBYnN0cmFjdFZhbHVlIGdldERpY3Rpb25hcnlWYWx1ZUZvcktleShBYnN0cmFjdFZhbHVlIHZhbHVlLCBTdHJpbmcga2V5KTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtzcGVjaWFsaXphdGlvbl0gaXMgYSBzcGVjaWFsaXphdGlvbiBvZgogIC8vLyBbZ2VuZXJhbGl6YXRpb25dLgogIC8vLwogIC8vLyBTcGVjaWFsaXphdGlvbnMgYXJlIGNyZWF0ZWQgdGhyb3VnaCBbY3JlYXRlUHJpbWl0aXZlVmFsdWVdLAogIC8vLyBbY3JlYXRlTWFwVmFsdWVdLCBbY3JlYXRlRGljdGlvbmFyeVZhbHVlXSBhbmQgW2NyZWF0ZUNvbnRhaW5lclZhbHVlXS4KICBib29sIGlzU3BlY2lhbGl6YXRpb25PZigKICAgICAgQWJzdHJhY3RWYWx1ZSBzcGVjaWFsaXphdGlvbiwgQWJzdHJhY3RWYWx1ZSBnZW5lcmFsaXphdGlvbik7CgogIC8vLyBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB3aGljaCBbdmFsdWVdIGlzIGEgc3BlY2lhbGl6YXRpb24uIFJldHVybiBgbnVsbGAgaWYKICAvLy8gW3ZhbHVlXSBpcyBub3QgYSBzcGVjaWFsaXphdGlvbi4KICAvLy8KICAvLy8gU3BlY2lhbGl6YXRpb25zIGFyZSBjcmVhdGVkIHRocm91Z2ggW2NyZWF0ZVByaW1pdGl2ZVZhbHVlXSwKICAvLy8gW2NyZWF0ZU1hcFZhbHVlXSwgW2NyZWF0ZURpY3Rpb25hcnlWYWx1ZV0gYW5kIFtjcmVhdGVDb250YWluZXJWYWx1ZV0uCiAgQWJzdHJhY3RWYWx1ZSBnZXRHZW5lcmFsaXphdGlvbihBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybiB0aGUgb2JqZWN0IGlkZW50aWZ5aW5nIHRoZSBhbGxvY2F0aW9uIG9mIFt2YWx1ZV0gaWYgaXQgaXMgYW4KICAvLy8gYWxsb2NhdGlvbiBiYXNlZCBzcGVjaWFsaXphdGlvbi4gT3RoZXJ3aXNlIHJldHVybnMgYG51bGxgLgogIC8vLwogIC8vLyBBbGxvY2F0aW9uIGJhc2VkIHNwZWNpYWxpemF0aW9ucyBhcmUgY3JlYXRlZCB0aHJvdWdoIFtjcmVhdGVNYXBWYWx1ZV0sCiAgLy8vIFtjcmVhdGVEaWN0aW9uYXJ5VmFsdWVdIGFuZCBbY3JlYXRlQ29udGFpbmVyVmFsdWVdCiAgT2JqZWN0IGdldEFsbG9jYXRpb25Ob2RlKEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJuIHRoZSBhbGxvY2F0aW9uIGVsZW1lbnQgb2YgW3ZhbHVlXSBpZiBpdCBpcyBhbiBhbGxvY2F0aW9uIGJhc2VkCiAgLy8vIHNwZWNpYWxpemF0aW9uLiBPdGhlcndpc2UgcmV0dXJucyBgbnVsbGAuCiAgLy8vCiAgLy8vIEFsbG9jYXRpb24gYmFzZWQgc3BlY2lhbGl6YXRpb25zIGFyZSBjcmVhdGVkIHRocm91Z2ggW2NyZWF0ZU1hcFZhbHVlXSwKICAvLy8gW2NyZWF0ZURpY3Rpb25hcnlWYWx1ZV0gYW5kIFtjcmVhdGVDb250YWluZXJWYWx1ZV0KICBNZW1iZXJFbnRpdHkgZ2V0QWxsb2NhdGlvbkVsZW1lbnQoQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbdmFsdWVdIGEga25vd24gcHJpbWl0aXZlIEphdmFTY3JpcHQgdmFsdWUgYXQgcnVudGltZS4KICBib29sIGlzUHJpbWl0aXZlVmFsdWUoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gQ3JlYXRlcyBhIHByaW1pdGl2ZSB2YWx1ZSBzcGVjaWFsaXphdGlvbiBvZiBbb3JpZ2luYWxWYWx1ZV0gd2l0aCB0aGUKICAvLy8gaW5mZXJyZWQgcHJpbWl0aXZlIGNvbnN0YW50IFt2YWx1ZV0uCiAgQWJzdHJhY3RWYWx1ZSBjcmVhdGVQcmltaXRpdmVWYWx1ZSgKICAgICAgQWJzdHJhY3RWYWx1ZSBvcmlnaW5hbFZhbHVlLCBQcmltaXRpdmVDb25zdGFudFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgdGhlIHByaW1pdGl2ZSBKYXZhU2NyaXB0IHZhbHVlIG9mIFt2YWx1ZV0gaWYgaXQgcmVwcmVzZW50cyBhCiAgLy8vIHByaW1pdGl2ZSBKYXZhU2NyaXB0IHZhbHVlIGF0IHJ1bnRpbWUsIHZhbHVlIGF0IHJ1bnRpbWUuIFJldHVybnMgYG51bGxgCiAgLy8vIG90aGVyd2lzZS4KICBQcmltaXRpdmVDb25zdGFudFZhbHVlIGdldFByaW1pdGl2ZVZhbHVlKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIENvbXB1dGUgdGhlIHR5cGUgb2YgYWxsIHBvdGVudGlhbCByZWNlaXZlcnMgb2YgdGhlIHNldCBvZiBsaXZlIFttZW1iZXJzXS4KICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVSZWNlaXZlcihJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IG1lbWJlcnMpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFttZW1iZXJdIGlzIGEgcG90ZW50aWFsCiAgLy8vIHRhcmdldCB3aGVuIGJlaW5nIGludm9rZWQgb24gYSBbcmVjZWl2ZXJdLiBbbmFtZV0gaXMgdXNlZCB0byBlbnN1cmUKICAvLy8gbGlicmFyeSBwcml2YWN5IGlzIHRha2VuIGludG8gYWNjb3VudC4KICBBYnN0cmFjdEJvb2wgaXNUYXJnZXRpbmdNZW1iZXIoCiAgICAgIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXIsIE1lbWJlckVudGl0eSBtZW1iZXIsIE5hbWUgbmFtZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3NlbGVjdG9yXSBpbnZva2VkIG9uIGEKICAvLy8gW3JlY2VpdmVyXSBjYW4gaGl0IGEgW25vU3VjaE1ldGhvZF0uCiAgQWJzdHJhY3RCb29sIG5lZWRzTm9TdWNoTWV0aG9kSGFuZGxpbmcoCiAgICAgIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXIsIFNlbGVjdG9yIHNlbGVjdG9yKTsKCiAgLy8vIFJldHVybnMgdGhlIFtBYnN0cmFjdFZhbHVlXSBmb3IgdGhlIFtwYXJhbWV0ZXJUeXBlXSBvZiBhIG5hdGl2ZQogIC8vLyBtZXRob2QuIE1heSByZXR1cm4gYG51bGxgLCBmb3IgZXhhbXBsZSwgaWYgW3BhcmFtZXRlclR5cGVdIGlzIG5vdCBtb2RlbGxlZAogIC8vLyBwcmVjaXNlbHkgYnkgYW4gW0Fic3RyYWN0VmFsdWVdLgogIEFic3RyYWN0VmFsdWUgZ2V0QWJzdHJhY3RWYWx1ZUZvck5hdGl2ZU1ldGhvZFBhcmFtZXRlclR5cGUoRGFydFR5cGUgdHlwZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIGlmIHRoZSBzZXQgb2YgcnVudGltZSB2YWx1ZXMgb2YKICAvLy8gW3N1YnNldF0gYXJlIGtub3duIHRvIGFsbCBiZSBpbiB0aGUgc2V0IG9mIHJ1bnRpbWUgdmFsdWVzIG9mIFtzdXBlcnNldF0uCiAgQWJzdHJhY3RCb29sIGNvbnRhaW5zKEFic3RyYWN0VmFsdWUgc3VwZXJzZXQsIEFic3RyYWN0VmFsdWUgc3Vic2V0KTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgaWYgdGhlIHNldCBvZiBydW50aW1lIHZhbHVlcyBvZgogIC8vLyBbc3Vic2V0XSBhcmUga25vd24gdG8gYWxsIGJlIGluIHRoZSBzZXQgb2YgcnVudGltZSB2YWx1ZXMgb2YgW3N1cGVyc2V0XS4KICBBYnN0cmFjdEJvb2wgaXNJbihBYnN0cmFjdFZhbHVlIHN1YnNldCwgQWJzdHJhY3RWYWx1ZSBzdXBlcnNldCk7CgogIC8vLyBSZXR1cm5zIHRoZSBbTWVtYmVyRW50aXR5XSB0aGF0IGlzIGtub3duIHRvIGFsd2F5cyBiZSBoaXQgYXQgcnVudGltZQogIC8vLyBbcmVjZWl2ZXJdLgogIC8vLwogIC8vLyBSZXR1cm5zIGBudWxsYCBpZiAwIG9yIG1vcmUgdGhhbiAxIG1lbWJlciBjYW4gYmUgaGl0IGF0IHJ1bnRpbWUuCiAgTWVtYmVyRW50aXR5IGxvY2F0ZVNpbmdsZU1lbWJlcihBYnN0cmFjdFZhbHVlIHJlY2VpdmVyLCBTZWxlY3RvciBzZWxlY3Rvcik7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIGlmIFt2YWx1ZV0gaXMga25vd24gdG8gYmUgYW4KICAvLy8gaW5kZXhhYmxlIEphdmFTY3JpcHQgdmFsdWUgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNKc0luZGV4YWJsZShjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyBpZiBbdmFsdWVdIGlzIGtub3duIHRvIGJlIGFuCiAgLy8vIGluZGV4YWJsZSBvciBpdGVyYWJsZSBKYXZhU2NyaXB0IHZhbHVlIGF0IHJ1bnRpbWUuCiAgLy8vCiAgLy8vIEphdmFTY3JpcHQgYXJyYXlzIGFyZSBib3RoIGluZGV4YWJsZSBhbmQgaXRlcmFibGUgd2hlcmVhcyBKYXZhU2NyaXB0CiAgLy8vIHN0cmluZ3MgYXJlIGluZGV4YWJsZSBidXQgbm90IGl0ZXJhYmxlLgogIEFic3RyYWN0Qm9vbCBpc0pzSW5kZXhhYmxlQW5kSXRlcmFibGUoQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIGlmIFt2YWx1ZV0gaXMga25vd24gdG8gYmUgYQogIC8vLyBKYXZhU2NyaXB0IGluZGV4YWJsZSBvZiBmaXhlZCBsZW5ndGguCiAgQWJzdHJhY3RCb29sIGlzRml4ZWRMZW5ndGhKc0luZGV4YWJsZShBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgY29tcGFjdCBhIHRleHR1YWwgcmVwcmVzZW50YXRpb24gZm9yIFt2YWx1ZV0gdXNlZCBmb3IgZGVidWdnaW5nLgogIFN0cmluZyBnZXRDb21wYWN0VGV4dChBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIERlc2VyaWFsaXplcyBhbiBbQWJzdHJhY3RWYWx1ZV0gZm9yIHRoaXMgZG9tYWluIGZyb20gW3NvdXJjZV0uCiAgQWJzdHJhY3RWYWx1ZSByZWFkQWJzdHJhY3RWYWx1ZUZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKTsKCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbdmFsdWVdIGZvciB0aGlzIGRvbWFpbiB0byBbc2lua10uCiAgdm9pZCB3cml0ZUFic3RyYWN0VmFsdWVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmssIEFic3RyYWN0VmFsdWUgdmFsdWUpOwp9CoJbAE5OPAEnAU4kIS8hLiQpGAFIFRUBJQEvATEBMQExAVAPPwFQD0EBTw9AAUcBRwFJAQwXUAIBSw8nOz4BTjgCATEgATlNIyUYAUgBDBdLAgFBJUQhAUoPHgFODyIBSg8eAUkPHQFMDyABSQ8dAUwPIAFKDx4BSQ8dAUkPHQFHIQFBHgFPEiYBURIjAVAPIAFQDyABSQ8lAU4PIwFNDyIBTQ8iAUsfAVA8KgFQOiUBUDspATcGTVBQKwZRBk5QTyEGSUNNUA4GUFBPHwZPUE9PSRJBTQFJNQFRNgFNOAFQNwFRDTgBUSI8AVEeQQFIPAFIPAFIJU0BTS5RAVEiOiM3AVEkQwFPFjcBTR43AVEcPQFNNDwBTA82AU84OwFPGUEBTxdCAU8YQAFPPEQBTzk8AU0tQQFMLT4BTD9CAU8iNwFPGUEBURI9AU0gOQFQLTgBUC04AU0pQQFOKkcBTSI/AU0kOAFPIz4BUBk4AVAjPgFPFzkBTyE/AU8ZOAFPIz4BTCJBAVALTQFPEz0BTg4ePQFLIBw9AVEWNwFKRgFJMwFLRgZPOiYjHSYhEwFNMz4BTFAuLwFDLQFOIwZPOiAjHSYiAUowOAFDLQFOKAZPOiAjHSYZHAFPJzQBUSc2AU4oNAFMMQZPOicjHSYZGywBTg0/AVA5SwFAGAZCTBtDAU8nBkJMOAFKQQZNOTEBTDAGTTk6AU84AUsrJkIBS04RSwFQQQFPSi0iPwFPKyoyAUZRJ00BT09HAU9PQwFLEgZHTgFMLT0BTTkGSy4+AUssPgFPLgFFRAE5SQIBOHBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0M3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2luZmVycmVyL3RyaXZpYWwuZGFydLUWLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JyBzaG93IENvbnN0YW50VmFsdWUsIFByaW1pdGl2ZUNvbnN0YW50VmFsdWU7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCcgc2hvdyBEYXJ0VHlwZTsKaW1wb3J0ICcuLi9pci9zdGF0aWNfdHlwZS5kYXJ0JzsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvd29ybGRfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS91c2UuZGFydCc7CmltcG9ydCAnLi4vd29ybGQuZGFydCc7CmltcG9ydCAnYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwoKY2xhc3MgVHJpdmlhbEFic3RyYWN0VmFsdWUgaW1wbGVtZW50cyBBYnN0cmFjdFZhbHVlIHsKICBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnPyc7Cn0KCmNsYXNzIFRyaXZpYWxBYnN0cmFjdFZhbHVlRG9tYWluIGltcGxlbWVudHMgQWJzdHJhY3RWYWx1ZURvbWFpbiB7CiAgY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWVEb21haW4oKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgZHluYW1pY1R5cGUgPT4gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUFic3RyYWN0VmFsdWVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmssIEFic3RyYWN0VmFsdWUgdmFsdWUpIHt9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgcmVhZEFic3RyYWN0VmFsdWVGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgPT4KICAgICAgY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldENvbXBhY3RUZXh0KEFic3RyYWN0VmFsdWUgdmFsdWUpID0+ICc/JzsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzRml4ZWRMZW5ndGhKc0luZGV4YWJsZShBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PgogICAgICBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0pzSW5kZXhhYmxlQW5kSXRlcmFibGUoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4KICAgICAgQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNKc0luZGV4YWJsZShBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIE1lbWJlckVudGl0eSBsb2NhdGVTaW5nbGVNZW1iZXIoQWJzdHJhY3RWYWx1ZSByZWNlaXZlciwgU2VsZWN0b3Igc2VsZWN0b3IpID0+CiAgICAgIG51bGw7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0luKEFic3RyYWN0VmFsdWUgc3Vic2V0LCBBYnN0cmFjdFZhbHVlIHN1cGVyc2V0KSA9PgogICAgICBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBjb250YWlucyhBYnN0cmFjdFZhbHVlIHN1cGVyc2V0LCBBYnN0cmFjdFZhbHVlIHN1YnNldCkgPT4KICAgICAgQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgbmVlZHNOb1N1Y2hNZXRob2RIYW5kbGluZygKICAgICAgICAgIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXIsIFNlbGVjdG9yIHNlbGVjdG9yKSA9PgogICAgICBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1RhcmdldGluZ01lbWJlcigKICAgICAgICAgIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXIsIE1lbWJlckVudGl0eSBtZW1iZXIsIE5hbWUgbmFtZSkgPT4KICAgICAgQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVSZWNlaXZlcihJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IG1lbWJlcnMpID0+CiAgICAgIGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIFByaW1pdGl2ZUNvbnN0YW50VmFsdWUgZ2V0UHJpbWl0aXZlVmFsdWUoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjcmVhdGVQcmltaXRpdmVWYWx1ZSgKICAgICAgICAgIEFic3RyYWN0VmFsdWUgb3JpZ2luYWxWYWx1ZSwgUHJpbWl0aXZlQ29uc3RhbnRWYWx1ZSB2YWx1ZSkgPT4KICAgICAgY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1ByaW1pdGl2ZVZhbHVlKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBNZW1iZXJFbnRpdHkgZ2V0QWxsb2NhdGlvbkVsZW1lbnQoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgT2JqZWN0IGdldEFsbG9jYXRpb25Ob2RlKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0R2VuZXJhbGl6YXRpb24oQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4KICAgICAgY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1NwZWNpYWxpemF0aW9uT2YoCiAgICAgICAgICBBYnN0cmFjdFZhbHVlIHNwZWNpYWxpemF0aW9uLCBBYnN0cmFjdFZhbHVlIGdlbmVyYWxpemF0aW9uKSA9PgogICAgICBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXREaWN0aW9uYXJ5VmFsdWVGb3JLZXkoQWJzdHJhY3RWYWx1ZSB2YWx1ZSwgU3RyaW5nIGtleSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIlRyaXZpYWxBYnN0cmFjdFZhbHVlRG9tYWluLmdldERpY3Rpb25hcnlWYWx1ZUZvcktleSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc0RpY3Rpb25hcnlLZXkoQWJzdHJhY3RWYWx1ZSB2YWx1ZSwgU3RyaW5nIGtleSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIlRyaXZpYWxBYnN0cmFjdFZhbHVlRG9tYWluLmNvbnRhaW5zRGljdGlvbmFyeUtleSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjcmVhdGVEaWN0aW9uYXJ5VmFsdWUoCiAgICAgICAgICBBYnN0cmFjdFZhbHVlIG9yaWdpbmFsVmFsdWUsCiAgICAgICAgICBPYmplY3QgYWxsb2NhdGlvbk5vZGUsCiAgICAgICAgICBNZW1iZXJFbnRpdHkgYWxsb2NhdGlvbkVsZW1lbnQsCiAgICAgICAgICBBYnN0cmFjdFZhbHVlIGtleSwKICAgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUsCiAgICAgICAgICBNYXA8U3RyaW5nLCBBYnN0cmFjdFZhbHVlPiBtYXBwaW5ncykgPT4KICAgICAgY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0RpY3Rpb25hcnkoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0TWFwVmFsdWVUeXBlKEFic3RyYWN0VmFsdWUgdmFsdWUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJUcml2aWFsQWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRNYXBWYWx1ZVR5cGUiKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0TWFwS2V5VHlwZShBYnN0cmFjdFZhbHVlIHZhbHVlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVHJpdmlhbEFic3RyYWN0VmFsdWVEb21haW4uZ2V0TWFwS2V5VHlwZSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjcmVhdGVNYXBWYWx1ZSgKICAgICAgICAgIEFic3RyYWN0VmFsdWUgb3JpZ2luYWxWYWx1ZSwKICAgICAgICAgIE9iamVjdCBhbGxvY2F0aW9uTm9kZSwKICAgICAgICAgIE1lbWJlckVudGl0eSBhbGxvY2F0aW9uRWxlbWVudCwKICAgICAgICAgIEFic3RyYWN0VmFsdWUga2V5LAogICAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4KICAgICAgY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc01hcChBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXRTZXRFbGVtZW50VHlwZShBYnN0cmFjdFZhbHVlIHZhbHVlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVHJpdmlhbEFic3RyYWN0VmFsdWVEb21haW4uZ2V0U2V0RWxlbWVudFR5cGUiKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY3JlYXRlU2V0VmFsdWUoCiAgICAgICAgICBBYnN0cmFjdFZhbHVlIG9yaWdpbmFsVmFsdWUsCiAgICAgICAgICBPYmplY3QgYWxsb2NhdGlvbk5vZGUsCiAgICAgICAgICBNZW1iZXJFbnRpdHkgYWxsb2NhdGlvbkVsZW1lbnQsCiAgICAgICAgICBBYnN0cmFjdFZhbHVlIGVsZW1lbnRUeXBlKSA9PgogICAgICBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzU2V0KEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0Q29udGFpbmVyTGVuZ3RoKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0Q29udGFpbmVyRWxlbWVudFR5cGUoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIlRyaXZpYWxBYnN0cmFjdFZhbHVlRG9tYWluLmdldENvbnRhaW5lckVsZW1lbnRUeXBlIik7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNyZWF0ZUNvbnRhaW5lclZhbHVlKAogICAgICAgICAgQWJzdHJhY3RWYWx1ZSBvcmlnaW5hbFZhbHVlLAogICAgICAgICAgT2JqZWN0IGFsbG9jYXRpb25Ob2RlLAogICAgICAgICAgTWVtYmVyRW50aXR5IGFsbG9jYXRpb25FbGVtZW50LAogICAgICAgICAgQWJzdHJhY3RWYWx1ZSBlbGVtZW50VHlwZSwKICAgICAgICAgIGludCBsZW5ndGgpID0+CiAgICAgIGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNDb250YWluZXIoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZUFic3RyYWN0VmFsdWVGb3JDb25zdGFudChDb25zdGFudFZhbHVlIHZhbHVlKSA9PgogICAgICBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldEFic3RyYWN0VmFsdWVGb3JOYXRpdmVNZXRob2RQYXJhbWV0ZXJUeXBlKERhcnRUeXBlIHR5cGUpID0+CiAgICAgIG51bGw7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBjb250YWluc0FsbChBYnN0cmFjdFZhbHVlIGEpID0+IEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGFyZURpc2pvaW50KEFic3RyYWN0VmFsdWUgYSwgQWJzdHJhY3RWYWx1ZSBiKSA9PgogICAgICBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgaW50ZXJzZWN0aW9uKEFic3RyYWN0VmFsdWUgYSwgQWJzdHJhY3RWYWx1ZSBiKSA9PgogICAgICBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHVuaW9uT2ZNYW55KEl0ZXJhYmxlPEFic3RyYWN0VmFsdWU+IHZhbHVlcykgPT4KICAgICAgY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB1bmlvbihBYnN0cmFjdFZhbHVlIGEsIEFic3RyYWN0VmFsdWUgYikgPT4KICAgICAgY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzUHJpbWl0aXZlT3JOdWxsKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzU3RyaW5nT3JOdWxsKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzU3RyaW5nKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzQm9vbGVhbk9yTnVsbChBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0Jvb2xlYW4oQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4gQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNEb3VibGVPck51bGwoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4gQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNEb3VibGUoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4gQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNOdW1iZXJPck51bGwoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4gQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNOdW1iZXIoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4gQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNJbnRlZ2VyT3JOdWxsKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzUG9zaXRpdmVJbnRlZ2VyT3JOdWxsKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+CiAgICAgIEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzUG9zaXRpdmVJbnRlZ2VyKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzVUludDMxKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzVUludDMyKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzSW50ZWdlcihBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0ludGVyY2VwdG9yKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzUHJpbWl0aXZlU3RyaW5nKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzQXJyYXkoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4gQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNNdXRhYmxlSW5kZXhhYmxlKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzTXV0YWJsZUFycmF5KEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzRXh0ZW5kYWJsZUFycmF5KEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzRml4ZWRBcnJheShBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0luZGV4YWJsZVByaW1pdGl2ZShBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1ByaW1pdGl2ZUFycmF5KEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzUHJpbWl0aXZlQm9vbGVhbihBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1ByaW1pdGl2ZU51bWJlcihBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1ByaW1pdGl2ZShBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc051bGwoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4gQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXRFeGFjdENsYXNzKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0V4YWN0T3JOdWxsKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzRXhhY3QoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4gQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNFbXB0eShBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0luc3RhbmNlT2YoQWJzdHJhY3RWYWx1ZSB2YWx1ZSwgQ2xhc3NFbnRpdHkgY2xzKSA9PgogICAgICBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0luc3RhbmNlT2ZPck51bGwoQWJzdHJhY3RWYWx1ZSB2YWx1ZSwgQ2xhc3NFbnRpdHkgY2xzKSA9PgogICAgICBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBjb250YWluc09ubHlUeXBlKEFic3RyYWN0VmFsdWUgdmFsdWUsIENsYXNzRW50aXR5IGNscykgPT4KICAgICAgQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgY29udGFpbnNUeXBlKEFic3RyYWN0VmFsdWUgdmFsdWUsIENsYXNzRW50aXR5IGNscykgPT4KICAgICAgQWJzdHJhY3RCb29sLk1heWJlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGluY2x1ZGVOdWxsKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+CiAgICAgIGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZXhjbHVkZU51bGwoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4KICAgICAgY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGNvdWxkQmVUeXBlZEFycmF5KEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IEFic3RyYWN0Qm9vbC5NYXliZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzVHlwZWRBcnJheShBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBBYnN0cmFjdEJvb2wuTWF5YmU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY3JlYXRlTnVsbGFibGVTdWJ0eXBlKENsYXNzRW50aXR5IGNscykgPT4KICAgICAgY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjcmVhdGVOb25OdWxsU3VidHlwZShDbGFzc0VudGl0eSBjbHMpID0+CiAgICAgIGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY3JlYXRlTm9uTnVsbFN1YmNsYXNzKENsYXNzRW50aXR5IGNscykgPT4KICAgICAgY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjcmVhdGVOdWxsYWJsZUV4YWN0KENsYXNzRW50aXR5IGNscykgPT4KICAgICAgY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjcmVhdGVOb25OdWxsRXhhY3QoQ2xhc3NFbnRpdHkgY2xzKSA9PgogICAgICBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlV2l0aFByZWNpc2lvbiBjcmVhdGVGcm9tU3RhdGljVHlwZShEYXJ0VHlwZSB0eXBlLAogICAgICB7Q2xhc3NSZWxhdGlvbiBjbGFzc1JlbGF0aW9uID0gQ2xhc3NSZWxhdGlvbi5zdWJ0eXBlLCBib29sIG51bGxhYmxlfSkgewogICAgYXNzZXJ0KG51bGxhYmxlICE9IG51bGwpOwogICAgcmV0dXJuIGNvbnN0IEFic3RyYWN0VmFsdWVXaXRoUHJlY2lzaW9uKAogICAgICAgIGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCksIGZhbHNlKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IGFzeW5jU3RhclN0cmVhbVR5cGUgPT4gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgYXN5bmNGdXR1cmVUeXBlID0+IGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IHN5bmNTdGFySXRlcmFibGVUeXBlID0+IGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IGVtcHR5VHlwZSA9PiBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCBjb25zdE1hcFR5cGUgPT4gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgY29uc3RTZXRUeXBlID0+IGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IGNvbnN0TGlzdFR5cGUgPT4gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgcG9zaXRpdmVJbnRUeXBlID0+IGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IHVpbnQzMlR5cGUgPT4gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgdWludDMxVHlwZSA9PiBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCBmaXhlZExpc3RUeXBlID0+IGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IGdyb3dhYmxlTGlzdFR5cGUgPT4gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgbnVsbFR5cGUgPT4gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgbm9uTnVsbFR5cGUgPT4gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgbWFwVHlwZSA9PiBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCBzZXRUeXBlID0+IGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IGxpc3RUeXBlID0+IGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IHN0cmluZ1R5cGUgPT4gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgbnVtVHlwZSA9PiBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCBkb3VibGVUeXBlID0+IGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IGludFR5cGUgPT4gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgYm9vbFR5cGUgPT4gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgZnVuY3Rpb25UeXBlID0+IGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IHR5cGVUeXBlID0+IGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7Cn0KCmNsYXNzIFRyaXZpYWxBYnN0cmFjdFZhbHVlU3RyYXRlZ3kgaW1wbGVtZW50cyBBYnN0cmFjdFZhbHVlU3RyYXRlZ3kgewogIGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlU3RyYXRlZ3koKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZURvbWFpbiBjcmVhdGVEb21haW4oSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWVEb21haW4oKTsKICB9CgogIEBvdmVycmlkZQogIFNlbGVjdG9yQ29uc3RyYWludHNTdHJhdGVneSBjcmVhdGVTZWxlY3RvclN0cmF0ZWd5KCkgewogICAgcmV0dXJuIGNvbnN0IFRyaXZpYWxTZWxlY3RvclN0cmF0ZWd5KCk7CiAgfQp9CgpjbGFzcyBUcml2aWFsU2VsZWN0b3JTdHJhdGVneSBpbXBsZW1lbnRzIFNlbGVjdG9yQ29uc3RyYWludHNTdHJhdGVneSB7CiAgY29uc3QgVHJpdmlhbFNlbGVjdG9yU3RyYXRlZ3koKTsKCiAgQG92ZXJyaWRlCiAgVW5pdmVyc2VTZWxlY3RvckNvbnN0cmFpbnRzIGNyZWF0ZVNlbGVjdG9yQ29uc3RyYWludHMoCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLCBPYmplY3QgaW5pdGlhbENvbnN0cmFpbnQpIHsKICAgIHJldHVybiBjb25zdCBUcml2aWFsVW5pdmVyc2VTZWxlY3RvckNvbnN0cmFpbnRzKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGFwcGxpZWRVbm5hbWVkKER5bmFtaWNVc2UgZHluYW1pY1VzZSwgTWVtYmVyRW50aXR5IG1lbWJlciwKICAgICAgY292YXJpYW50IEpDbG9zZWRXb3JsZCB3b3JsZCkgewogICAgcmV0dXJuIGR5bmFtaWNVc2Uuc2VsZWN0b3IuYXBwbGllc1VubmFtZWQobWVtYmVyKTsKICB9Cn0KCmNsYXNzIFRyaXZpYWxVbml2ZXJzZVNlbGVjdG9yQ29uc3RyYWludHMKICAgIGltcGxlbWVudHMgVW5pdmVyc2VTZWxlY3RvckNvbnN0cmFpbnRzIHsKICBjb25zdCBUcml2aWFsVW5pdmVyc2VTZWxlY3RvckNvbnN0cmFpbnRzKCk7CgogIEBvdmVycmlkZQogIGJvb2wgYWRkUmVjZWl2ZXJDb25zdHJhaW50KE9iamVjdCBjb25zdHJhaW50KSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBuZWVkc05vU3VjaE1ldGhvZEhhbmRsaW5nKFNlbGVjdG9yIHNlbGVjdG9yLCBXb3JsZCB3b3JsZCkgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5IaXQoTWVtYmVyRW50aXR5IGVsZW1lbnQsIE5hbWUgbmFtZSwgV29ybGQgd29ybGQpID0+IHRydWU7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdUcml2aWFsVW5pdmVyc2VTZWxlY3RvckNvbnN0cmFpbnRzOiRoYXNoQ29kZSc7Cn0KgekATk48AU4kIS8hLiQpHxglATYgAQwcAgFCJgEMQQEMSwEMRiQBDDUBDEAaAQxAGgEMSQEMUAwBDEUaAQxJGgEMKjgaAQwiRRoBDEMkAQxJAQwmSCQBDDcBDEIBDDkBDDokAQwbSQ0BDEwgQAQBDEAgPQQBDCcnISodHzIkAQwzAQw3TgQBDDVMBAEMICchKh0iJAEMLAEMOVAEAQwgJyEqKCQBDCwBDDcBDD8gPwQBDCYnISolGSQBDDIBDEgkAQxPDAEMQwEMQBoBDEIkAQw/JAEMOyQBDE0BDEoBDEQBDEsBDEUBDEoBDEQBDEoBDEQBDEsBDD8aAQxNAQxEAQxEAQxFAQxJAQxNAQxDAQxOAQxKAQxNAQxIAQxQAQxMAQxOAQxNAQxHAQxCAQw6AQxJAQxDAQxDAQxFGgEMSxoBDEkaAQxFGgEMNCQBDDQkAQxNAQxIAQw6JAEMOSQBDDokAQw4JAEMNyQBDEFOHi0uBAEMSQEMRQEMSgEMPwEMQgEMQgEMQwEMRQEMQAEMQAEMQwEMRgEMPgEMQQEMPQEMPQEMPgEMQAEMPQEMQAEMPQEMPgEMQgEMPgIBRigBDD8vBAEMOSwEAgFHIwEMOTU3BAEMQiY3BAIBKS0uAQw6AQxKAQxFAQxHAgEqcGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvdHJpdmlhbC5kYXJ0O3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2luZmVycmVyL3R5cGVtYXNrcy9tYXNrcy5kYXJ0wAB0/C8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IG1hc2tzOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uLy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBDb21tb25FbGVtZW50czsKaW1wb3J0ICcuLi8uLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uLy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uLy4uL2VsZW1lbnRzL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uLy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uLy4uL2lyL3N0YXRpY190eXBlLmRhcnQnOwppbXBvcnQgJy4uLy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi8uLi91bml2ZXJzZS9jbGFzc19oaWVyYXJjaHkuZGFydCc7CmltcG9ydCAnLi4vLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvcjsKaW1wb3J0ICcuLi8uLi91bml2ZXJzZS91c2UuZGFydCcgc2hvdyBEeW5hbWljVXNlOwppbXBvcnQgJy4uLy4uL3VuaXZlcnNlL3dvcmxkX2J1aWxkZXIuZGFydCcKICAgIHNob3cgVW5pdmVyc2VTZWxlY3RvckNvbnN0cmFpbnRzLCBTZWxlY3RvckNvbnN0cmFpbnRzU3RyYXRlZ3k7CmltcG9ydCAnLi4vLi4vdXRpbC91dGlsLmRhcnQnOwppbXBvcnQgJy4uLy4uL3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwppbXBvcnQgJy4uL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi90eXBlX2dyYXBoX2luZmVycmVyLmRhcnQnIHNob3cgVHlwZUdyYXBoSW5mZXJyZXI7CmltcG9ydCAnY29uc3RhbnRzLmRhcnQnOwoKcGFydCAnY29udGFpbmVyX3R5cGVfbWFzay5kYXJ0JzsKcGFydCAnZGljdGlvbmFyeV90eXBlX21hc2suZGFydCc7CnBhcnQgJ2ZsYXRfdHlwZV9tYXNrLmRhcnQnOwpwYXJ0ICdmb3J3YXJkaW5nX3R5cGVfbWFzay5kYXJ0JzsKcGFydCAnbWFwX3R5cGVfbWFzay5kYXJ0JzsKcGFydCAnc2V0X3R5cGVfbWFzay5kYXJ0JzsKcGFydCAndHlwZV9tYXNrLmRhcnQnOwpwYXJ0ICd1bmlvbl90eXBlX21hc2suZGFydCc7CnBhcnQgJ3ZhbHVlX3R5cGVfbWFzay5kYXJ0JzsKCmNsYXNzIENvbW1vbk1hc2tzIGltcGxlbWVudHMgQWJzdHJhY3RWYWx1ZURvbWFpbiB7CiAgLy8gVE9ETyhzaWdtdW5kKTogb25jZSB3ZSBzcGxpdCBvdXQgdGhlIGJhY2tlbmQgY29tbW9uIGVsZW1lbnRzLCBkZXBlbmQKICAvLyBkaXJlY3RseSBvbiB0aG9zZSBpbnN0ZWFkLgogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CgogIENvbW1vbk1hc2tzKHRoaXMuX2Nsb3NlZFdvcmxkKTsKCiAgQ29tbW9uRWxlbWVudHMgZ2V0IGNvbW1vbkVsZW1lbnRzID0+IF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50czsKCiAgVHlwZU1hc2sgX2R5bmFtaWNUeXBlOwogIFR5cGVNYXNrIF9ub25OdWxsVHlwZTsKICBUeXBlTWFzayBfbnVsbFR5cGU7CiAgVHlwZU1hc2sgX2ludFR5cGU7CiAgVHlwZU1hc2sgX3VpbnQzMlR5cGU7CiAgVHlwZU1hc2sgX3VpbnQzMVR5cGU7CiAgVHlwZU1hc2sgX3Bvc2l0aXZlSW50VHlwZTsKICBUeXBlTWFzayBfZG91YmxlVHlwZTsKICBUeXBlTWFzayBfbnVtVHlwZTsKICBUeXBlTWFzayBfYm9vbFR5cGU7CiAgVHlwZU1hc2sgX2Z1bmN0aW9uVHlwZTsKICBUeXBlTWFzayBfbGlzdFR5cGU7CiAgVHlwZU1hc2sgX2NvbnN0TGlzdFR5cGU7CiAgVHlwZU1hc2sgX2ZpeGVkTGlzdFR5cGU7CiAgVHlwZU1hc2sgX2dyb3dhYmxlTGlzdFR5cGU7CiAgVHlwZU1hc2sgX3NldFR5cGU7CiAgVHlwZU1hc2sgX2NvbnN0U2V0VHlwZTsKICBUeXBlTWFzayBfbWFwVHlwZTsKICBUeXBlTWFzayBfY29uc3RNYXBUeXBlOwogIFR5cGVNYXNrIF9zdHJpbmdUeXBlOwogIFR5cGVNYXNrIF90eXBlVHlwZTsKICBUeXBlTWFzayBfc3luY1N0YXJJdGVyYWJsZVR5cGU7CiAgVHlwZU1hc2sgX2FzeW5jRnV0dXJlVHlwZTsKICBUeXBlTWFzayBfYXN5bmNTdGFyU3RyZWFtVHlwZTsKICBUeXBlTWFzayBfaW5kZXhhYmxlUHJpbWl0aXZlVHlwZTsKICBUeXBlTWFzayBfcmVhZGFibGVBcnJheVR5cGU7CiAgVHlwZU1hc2sgX211dGFibGVBcnJheVR5cGU7CiAgVHlwZU1hc2sgX3VubW9kaWZpYWJsZUFycmF5VHlwZTsKICBUeXBlTWFzayBfaW50ZXJjZXB0b3JUeXBlOwoKICAvLy8gQ2FjaGUgb2YgW0ZsYXRUeXBlTWFza11zIGdyb3VwZWQgYnkgdGhlIDggcG9zc2libGUgdmFsdWVzIG9mIHRoZQogIC8vLyBgRmxhdFR5cGVNYXNrLmZsYWdzYCBwcm9wZXJ0eS4KICBmaW5hbCBMaXN0PE1hcDxDbGFzc0VudGl0eSwgVHlwZU1hc2s+PiBfY2Fub25pY2FsaXplZFR5cGVNYXNrcyA9CiAgICAgIG5ldyBMaXN0PE1hcDxDbGFzc0VudGl0eSwgVHlwZU1hc2s+Pi5maWxsZWQoOCwgbnVsbCk7CgogIC8vLyBSZXR1cm4gdGhlIGNhY2hlZCBtYXNrIGZvciBbYmFzZV0gd2l0aCB0aGUgZ2l2ZW4gZmxhZ3MsIG9yCiAgLy8vIGNhbGxzIFtjcmVhdGVNYXNrXSB0byBjcmVhdGUgdGhlIG1hc2sgYW5kIGNhY2hlIGl0LgogIFR5cGVNYXNrIGdldENhY2hlZE1hc2soQ2xhc3NFbnRpdHkgYmFzZSwgaW50IGZsYWdzLCBUeXBlTWFzayBjcmVhdGVNYXNrKCkpIHsKICAgIE1hcDxDbGFzc0VudGl0eSwgVHlwZU1hc2s+IGNhY2hlZE1hc2tzID0KICAgICAgICBfY2Fub25pY2FsaXplZFR5cGVNYXNrc1tmbGFnc10gPz89IDxDbGFzc0VudGl0eSwgVHlwZU1hc2s+e307CiAgICByZXR1cm4gY2FjaGVkTWFza3MucHV0SWZBYnNlbnQoYmFzZSwgY3JlYXRlTWFzayk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBnZXQgZHluYW1pY1R5cGUgPT4gX2R5bmFtaWNUeXBlID8/PSBuZXcgVHlwZU1hc2suc3ViY2xhc3MoCiAgICAgIF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcywgX2Nsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgZ2V0IG5vbk51bGxUeXBlID0+IF9ub25OdWxsVHlwZSA/Pz0gbmV3IFR5cGVNYXNrLm5vbk51bGxTdWJjbGFzcygKICAgICAgX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzLCBfY2xvc2VkV29ybGQpOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBnZXQgaW50VHlwZSA9PiBfaW50VHlwZSA/Pz0KICAgICAgbmV3IFR5cGVNYXNrLm5vbk51bGxTdWJjbGFzcyhjb21tb25FbGVtZW50cy5qc0ludENsYXNzLCBfY2xvc2VkV29ybGQpOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBnZXQgdWludDMyVHlwZSA9PiBfdWludDMyVHlwZSA/Pz0KICAgICAgbmV3IFR5cGVNYXNrLm5vbk51bGxTdWJjbGFzcyhjb21tb25FbGVtZW50cy5qc1VJbnQzMkNsYXNzLCBfY2xvc2VkV29ybGQpOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBnZXQgdWludDMxVHlwZSA9PiBfdWludDMxVHlwZSA/Pz0KICAgICAgbmV3IFR5cGVNYXNrLm5vbk51bGxFeGFjdChjb21tb25FbGVtZW50cy5qc1VJbnQzMUNsYXNzLCBfY2xvc2VkV29ybGQpOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBnZXQgcG9zaXRpdmVJbnRUeXBlID0+CiAgICAgIF9wb3NpdGl2ZUludFR5cGUgPz89IG5ldyBUeXBlTWFzay5ub25OdWxsU3ViY2xhc3MoCiAgICAgICAgICBjb21tb25FbGVtZW50cy5qc1Bvc2l0aXZlSW50Q2xhc3MsIF9jbG9zZWRXb3JsZCk7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGdldCBkb3VibGVUeXBlID0+IF9kb3VibGVUeXBlID8/PQogICAgICBuZXcgVHlwZU1hc2subm9uTnVsbEV4YWN0KGNvbW1vbkVsZW1lbnRzLmpzRG91YmxlQ2xhc3MsIF9jbG9zZWRXb3JsZCk7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGdldCBudW1UeXBlID0+IF9udW1UeXBlID8/PQogICAgICBuZXcgVHlwZU1hc2subm9uTnVsbFN1YmNsYXNzKGNvbW1vbkVsZW1lbnRzLmpzTnVtYmVyQ2xhc3MsIF9jbG9zZWRXb3JsZCk7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGdldCBib29sVHlwZSA9PiBfYm9vbFR5cGUgPz89CiAgICAgIG5ldyBUeXBlTWFzay5ub25OdWxsRXhhY3QoY29tbW9uRWxlbWVudHMuanNCb29sQ2xhc3MsIF9jbG9zZWRXb3JsZCk7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGdldCBmdW5jdGlvblR5cGUgPT4gX2Z1bmN0aW9uVHlwZSA/Pz0KICAgICAgbmV3IFR5cGVNYXNrLm5vbk51bGxTdWJ0eXBlKGNvbW1vbkVsZW1lbnRzLmZ1bmN0aW9uQ2xhc3MsIF9jbG9zZWRXb3JsZCk7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGdldCBsaXN0VHlwZSA9PiBfbGlzdFR5cGUgPz89CiAgICAgIG5ldyBUeXBlTWFzay5ub25OdWxsRXhhY3QoY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzLCBfY2xvc2VkV29ybGQpOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBnZXQgY29uc3RMaXN0VHlwZSA9PiBfY29uc3RMaXN0VHlwZSA/Pz0gbmV3IFR5cGVNYXNrLm5vbk51bGxFeGFjdCgKICAgICAgY29tbW9uRWxlbWVudHMuanNVbm1vZGlmaWFibGVBcnJheUNsYXNzLCBfY2xvc2VkV29ybGQpOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBnZXQgZml4ZWRMaXN0VHlwZSA9PiBfZml4ZWRMaXN0VHlwZSA/Pz0KICAgICAgbmV3IFR5cGVNYXNrLm5vbk51bGxFeGFjdChjb21tb25FbGVtZW50cy5qc0ZpeGVkQXJyYXlDbGFzcywgX2Nsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgZ2V0IGdyb3dhYmxlTGlzdFR5cGUgPT4KICAgICAgX2dyb3dhYmxlTGlzdFR5cGUgPz89IG5ldyBUeXBlTWFzay5ub25OdWxsRXhhY3QoCiAgICAgICAgICBjb21tb25FbGVtZW50cy5qc0V4dGVuZGFibGVBcnJheUNsYXNzLCBfY2xvc2VkV29ybGQpOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBnZXQgc2V0VHlwZSA9PiBfc2V0VHlwZSA/Pz0KICAgICAgbmV3IFR5cGVNYXNrLm5vbk51bGxTdWJ0eXBlKGNvbW1vbkVsZW1lbnRzLnNldExpdGVyYWxDbGFzcywgX2Nsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgZ2V0IGNvbnN0U2V0VHlwZSA9PiBfY29uc3RTZXRUeXBlID8/PSBuZXcgVHlwZU1hc2subm9uTnVsbFN1YnR5cGUoCiAgICAgIGNvbW1vbkVsZW1lbnRzLmNvbnN0U2V0TGl0ZXJhbENsYXNzLCBfY2xvc2VkV29ybGQpOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBnZXQgbWFwVHlwZSA9PiBfbWFwVHlwZSA/Pz0KICAgICAgbmV3IFR5cGVNYXNrLm5vbk51bGxTdWJ0eXBlKGNvbW1vbkVsZW1lbnRzLm1hcExpdGVyYWxDbGFzcywgX2Nsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgZ2V0IGNvbnN0TWFwVHlwZSA9PiBfY29uc3RNYXBUeXBlID8/PSBuZXcgVHlwZU1hc2subm9uTnVsbFN1YnR5cGUoCiAgICAgIGNvbW1vbkVsZW1lbnRzLmNvbnN0TWFwTGl0ZXJhbENsYXNzLCBfY2xvc2VkV29ybGQpOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBnZXQgc3RyaW5nVHlwZSA9PiBfc3RyaW5nVHlwZSA/Pz0KICAgICAgbmV3IFR5cGVNYXNrLm5vbk51bGxFeGFjdChjb21tb25FbGVtZW50cy5qc1N0cmluZ0NsYXNzLCBfY2xvc2VkV29ybGQpOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBnZXQgdHlwZVR5cGUgPT4gX3R5cGVUeXBlID8/PQogICAgICBuZXcgVHlwZU1hc2subm9uTnVsbEV4YWN0KGNvbW1vbkVsZW1lbnRzLnR5cGVMaXRlcmFsQ2xhc3MsIF9jbG9zZWRXb3JsZCk7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGdldCBzeW5jU3Rhckl0ZXJhYmxlVHlwZSA9PiBfc3luY1N0YXJJdGVyYWJsZVR5cGUgPz89CiAgICAgIG5ldyBUeXBlTWFzay5ub25OdWxsRXhhY3QoY29tbW9uRWxlbWVudHMuc3luY1N0YXJJdGVyYWJsZSwgX2Nsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgZ2V0IGFzeW5jRnV0dXJlVHlwZSA9PgogICAgICBfYXN5bmNGdXR1cmVUeXBlID8/PSBuZXcgVHlwZU1hc2subm9uTnVsbEV4YWN0KAogICAgICAgICAgY29tbW9uRWxlbWVudHMuZnV0dXJlSW1wbGVtZW50YXRpb24sIF9jbG9zZWRXb3JsZCk7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGdldCBhc3luY1N0YXJTdHJlYW1UeXBlID0+IF9hc3luY1N0YXJTdHJlYW1UeXBlID8/PQogICAgICBuZXcgVHlwZU1hc2subm9uTnVsbEV4YWN0KGNvbW1vbkVsZW1lbnRzLmNvbnRyb2xsZXJTdHJlYW0sIF9jbG9zZWRXb3JsZCk7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEFzc2VydCB0aGF0IHRoZSBudWxsIHR5cGUgaGFzIGJlZW4gcmVzb2x2ZWQuCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgZ2V0IG51bGxUeXBlID0+IF9udWxsVHlwZSA/Pz0gY29uc3QgVHlwZU1hc2suZW1wdHkoKTsKCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgZ2V0IGVtcHR5VHlwZSA9PiBjb25zdCBUeXBlTWFzay5ub25OdWxsRW1wdHkoKTsKCiAgVHlwZU1hc2sgZ2V0IGluZGV4YWJsZVByaW1pdGl2ZVR5cGUgPT4KICAgICAgX2luZGV4YWJsZVByaW1pdGl2ZVR5cGUgPz89IG5ldyBUeXBlTWFzay5ub25OdWxsU3VidHlwZSgKICAgICAgICAgIGNvbW1vbkVsZW1lbnRzLmpzSW5kZXhhYmxlQ2xhc3MsIF9jbG9zZWRXb3JsZCk7CgogIFR5cGVNYXNrIGdldCByZWFkYWJsZUFycmF5VHlwZSA9PiBfcmVhZGFibGVBcnJheVR5cGUgPz89CiAgICAgIG5ldyBUeXBlTWFzay5ub25OdWxsU3ViY2xhc3MoY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzLCBfY2xvc2VkV29ybGQpOwoKICBUeXBlTWFzayBnZXQgbXV0YWJsZUFycmF5VHlwZSA9PgogICAgICBfbXV0YWJsZUFycmF5VHlwZSA/Pz0gbmV3IFR5cGVNYXNrLm5vbk51bGxTdWJjbGFzcygKICAgICAgICAgIGNvbW1vbkVsZW1lbnRzLmpzTXV0YWJsZUFycmF5Q2xhc3MsIF9jbG9zZWRXb3JsZCk7CgogIFR5cGVNYXNrIGdldCB1bm1vZGlmaWFibGVBcnJheVR5cGUgPT4KICAgICAgX3VubW9kaWZpYWJsZUFycmF5VHlwZSA/Pz0gbmV3IFR5cGVNYXNrLm5vbk51bGxFeGFjdCgKICAgICAgICAgIGNvbW1vbkVsZW1lbnRzLmpzVW5tb2RpZmlhYmxlQXJyYXlDbGFzcywgX2Nsb3NlZFdvcmxkKTsKCiAgVHlwZU1hc2sgZ2V0IGludGVyY2VwdG9yVHlwZSA9PgogICAgICBfaW50ZXJjZXB0b3JUeXBlID8/PSBuZXcgVHlwZU1hc2subm9uTnVsbFN1YmNsYXNzKAogICAgICAgICAgY29tbW9uRWxlbWVudHMuanNJbnRlcmNlcHRvckNsYXNzLCBfY2xvc2VkV29ybGQpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNUeXBlZEFycmF5KFR5cGVNYXNrIG1hc2spIHsKICAgIC8vIEp1c3QgY2hlY2tpbmcgZm9yIGBUeXBlZERhdGFgIGlzIG5vdCBzdWZmaWNpZW50LCBhcyBpdCBpcyBhbiBhYnN0cmFjdAogICAgLy8gY2xhc3MgYW55IHVzZXItZGVmaW5lZCBjbGFzcyBjYW4gaW1wbGVtZW50LiBTbyB3ZSBhbHNvIGNoZWNrIGZvciB0aGUKICAgIC8vIGludGVyZmFjZSBgSmF2YVNjcmlwdEluZGV4aW5nQmVoYXZpb3JgLgogICAgQ2xhc3NFbnRpdHkgdHlwZWREYXRhQ2xhc3MgPSBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMudHlwZWREYXRhQ2xhc3M7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLnRydWVPck1heWJlKHR5cGVkRGF0YUNsYXNzICE9IG51bGwgJiYKICAgICAgICBfY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNJbnN0YW50aWF0ZWQodHlwZWREYXRhQ2xhc3MpICYmCiAgICAgICAgbWFzay5zYXRpc2ZpZXModHlwZWREYXRhQ2xhc3MsIF9jbG9zZWRXb3JsZCkgJiYKICAgICAgICBtYXNrLnNhdGlzZmllcyhfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuanNJbmRleGluZ0JlaGF2aW9ySW50ZXJmYWNlLAogICAgICAgICAgICBfY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBjb3VsZEJlVHlwZWRBcnJheShUeXBlTWFzayBtYXNrKSB7CiAgICBib29sIGludGVyc2VjdHMoVHlwZU1hc2sgdHlwZTEsIFR5cGVNYXNrIHR5cGUyKSA9PgogICAgICAgICF0eXBlMS5pbnRlcnNlY3Rpb24odHlwZTIsIF9jbG9zZWRXb3JsZCkuaXNFbXB0eTsKICAgIC8vIFRPRE8oaGVyaHV0KTogTWF5YmUgY2FjaGUgdGhlIFR5cGVNYXNrIGZvciB0eXBlZERhdGFDbGFzcyBhbmQKICAgIC8vICAgICAgICAgICAgICAganNJbmRleGluZ0JlaGF2aW91ckludGVyZmFjZS4KICAgIENsYXNzRW50aXR5IHR5cGVkRGF0YUNsYXNzID0gX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLnR5cGVkRGF0YUNsYXNzOwogICAgcmV0dXJuIEFic3RyYWN0Qm9vbC5tYXliZU9yRmFsc2UodHlwZWREYXRhQ2xhc3MgIT0gbnVsbCAmJgogICAgICAgIF9jbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc0luc3RhbnRpYXRlZCh0eXBlZERhdGFDbGFzcykgJiYKICAgICAgICBpbnRlcnNlY3RzKG1hc2ssIG5ldyBUeXBlTWFzay5zdWJ0eXBlKHR5cGVkRGF0YUNsYXNzLCBfY2xvc2VkV29ybGQpKSAmJgogICAgICAgIGludGVyc2VjdHMoCiAgICAgICAgICAgIG1hc2ssCiAgICAgICAgICAgIG5ldyBUeXBlTWFzay5zdWJ0eXBlKAogICAgICAgICAgICAgICAgX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmpzSW5kZXhpbmdCZWhhdmlvckludGVyZmFjZSwKICAgICAgICAgICAgICAgIF9jbG9zZWRXb3JsZCkpKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGNyZWF0ZU5vbk51bGxFeGFjdChDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBuZXcgVHlwZU1hc2subm9uTnVsbEV4YWN0KGNscywgX2Nsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGNyZWF0ZU51bGxhYmxlRXhhY3QoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gbmV3IFR5cGVNYXNrLmV4YWN0KGNscywgX2Nsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGNyZWF0ZU5vbk51bGxTdWJjbGFzcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBuZXcgVHlwZU1hc2subm9uTnVsbFN1YmNsYXNzKGNscywgX2Nsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGNyZWF0ZU5vbk51bGxTdWJ0eXBlKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIG5ldyBUeXBlTWFzay5ub25OdWxsU3VidHlwZShjbHMsIF9jbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBjcmVhdGVOdWxsYWJsZVN1YnR5cGUoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gbmV3IFR5cGVNYXNrLnN1YnR5cGUoY2xzLCBfY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZVdpdGhQcmVjaXNpb24gY3JlYXRlRnJvbVN0YXRpY1R5cGUoRGFydFR5cGUgdHlwZSwKICAgICAge0NsYXNzUmVsYXRpb24gY2xhc3NSZWxhdGlvbiA9IENsYXNzUmVsYXRpb24uc3VidHlwZSwgYm9vbCBudWxsYWJsZX0pIHsKICAgIGFzc2VydChudWxsYWJsZSAhPSBudWxsKTsKICAgIEFic3RyYWN0VmFsdWVXaXRoUHJlY2lzaW9uIGZpbmlzaChUeXBlTWFzayB2YWx1ZSwgYm9vbCBpc1ByZWNpc2UpIHsKICAgICAgcmV0dXJuIEFic3RyYWN0VmFsdWVXaXRoUHJlY2lzaW9uKAogICAgICAgICAgbnVsbGFibGUgPyB2YWx1ZSA6IHZhbHVlLm5vbk51bGxhYmxlKCksIGlzUHJlY2lzZSk7CiAgICB9CgogICAgYm9vbCBpc1ByZWNpc2UgPSB0cnVlOwogICAgd2hpbGUgKHR5cGUgaXMgVHlwZVZhcmlhYmxlVHlwZSkgewogICAgICBUeXBlVmFyaWFibGVUeXBlIHR5cGVWYXJpYWJsZSA9IHR5cGU7CiAgICAgIHR5cGUgPSBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50CiAgICAgICAgICAuZ2V0VHlwZVZhcmlhYmxlQm91bmQodHlwZVZhcmlhYmxlLmVsZW1lbnQpOwogICAgICBjbGFzc1JlbGF0aW9uID0gQ2xhc3NSZWxhdGlvbi5zdWJ0eXBlOwogICAgICBpc1ByZWNpc2UgPSBmYWxzZTsKICAgIH0KCiAgICBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgIGlmIChpc1ByZWNpc2UpIHsKICAgICAgICAvLyBUT0RPKHNyYSk6IENvdWxkIGJlIHByZWNpc2UgaWYgaW5zdGFudGlhdGVkLXRvLWJvdW5kcy4KICAgICAgICBmb3IgKERhcnRUeXBlIGFyZ3VtZW50IGluIHR5cGUudHlwZUFyZ3VtZW50cykgewogICAgICAgICAgaWYgKGFyZ3VtZW50IGlzIER5bmFtaWNUeXBlKSBjb250aW51ZTsKICAgICAgICAgIGlzUHJlY2lzZSA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBzd2l0Y2ggKGNsYXNzUmVsYXRpb24pIHsKICAgICAgICBjYXNlIENsYXNzUmVsYXRpb24uZXhhY3Q6CiAgICAgICAgICByZXR1cm4gZmluaXNoKFR5cGVNYXNrLmV4YWN0KHR5cGUuZWxlbWVudCwgX2Nsb3NlZFdvcmxkKSwgaXNQcmVjaXNlKTsKICAgICAgICBjYXNlIENsYXNzUmVsYXRpb24udGhpc0V4cHJlc3Npb246CiAgICAgICAgICBpZiAoIV9jbG9zZWRXb3JsZC5pc1VzZWRBc01peGluKHR5cGUuZWxlbWVudCkpIHsKICAgICAgICAgICAgcmV0dXJuIGZpbmlzaCgKICAgICAgICAgICAgICAgIFR5cGVNYXNrLnN1YmNsYXNzKHR5cGUuZWxlbWVudCwgX2Nsb3NlZFdvcmxkKSwgaXNQcmVjaXNlKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQ2xhc3NSZWxhdGlvbi5zdWJ0eXBlOgogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgcmV0dXJuIGZpbmlzaChUeXBlTWFzay5zdWJ0eXBlKHR5cGUuZWxlbWVudCwgX2Nsb3NlZFdvcmxkKSwgaXNQcmVjaXNlKTsKICAgIH0gZWxzZSBpZiAodHlwZSBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgcmV0dXJuIGZpbmlzaCgKICAgICAgICAgIFR5cGVNYXNrLnN1YnR5cGUoY29tbW9uRWxlbWVudHMuZnVuY3Rpb25DbGFzcywgX2Nsb3NlZFdvcmxkKSwgZmFsc2UpOwogICAgfSBlbHNlIGlmICh0eXBlIGlzIER5bmFtaWNUeXBlKSB7CiAgICAgIHJldHVybiBBYnN0cmFjdFZhbHVlV2l0aFByZWNpc2lvbihkeW5hbWljVHlwZSwgdHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZmluaXNoKGR5bmFtaWNUeXBlLCBmYWxzZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBleGNsdWRlTnVsbChUeXBlTWFzayBtYXNrKSA9PiBtYXNrLm5vbk51bGxhYmxlKCk7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGluY2x1ZGVOdWxsKFR5cGVNYXNrIG1hc2spID0+IG1hc2subnVsbGFibGUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGNvbnRhaW5zVHlwZShUeXBlTWFzayB0eXBlTWFzaywgQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLnRydWVPck1heWJlKF9jb250YWluc1R5cGUodHlwZU1hc2ssIGNscykpOwogIH0KCiAgYm9vbCBfY29udGFpbnNUeXBlKFR5cGVNYXNrIHR5cGVNYXNrLCBDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBfY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNJbnN0YW50aWF0ZWQoY2xzKSAmJgogICAgICAgIHR5cGVNYXNrLmNvbnRhaW5zKGNscywgX2Nsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBjb250YWluc09ubHlUeXBlKFR5cGVNYXNrIHR5cGVNYXNrLCBDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUoX2NvbnRhaW5zT25seVR5cGUodHlwZU1hc2ssIGNscykpOwogIH0KCiAgYm9vbCBfY29udGFpbnNPbmx5VHlwZShUeXBlTWFzayB0eXBlTWFzaywgQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gX2Nsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzSW5zdGFudGlhdGVkKGNscykgJiYKICAgICAgICB0eXBlTWFzay5jb250YWluc09ubHkoY2xzKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0luc3RhbmNlT2ZPck51bGwoVHlwZU1hc2sgdHlwZU1hc2ssIENsYXNzRW50aXR5IGNscykgPT4KICAgICAgQWJzdHJhY3RCb29sLnRydWVPck1heWJlKF9pc0luc3RhbmNlT2ZPck51bGwodHlwZU1hc2ssIGNscykpOwoKICBib29sIF9pc0luc3RhbmNlT2ZPck51bGwoVHlwZU1hc2sgdHlwZU1hc2ssIENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIF9jbG9zZWRXb3JsZC5pc0ltcGxlbWVudGVkKGNscykgJiYKICAgICAgICB0eXBlTWFzay5zYXRpc2ZpZXMoY2xzLCBfY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzSW5zdGFuY2VPZigKICAgICAgY292YXJpYW50IFR5cGVNYXNrIGV4cHJlc3Npb25NYXNrLCBDbGFzc0VudGl0eSBjbHMpIHsKICAgIEFic3RyYWN0VmFsdWUgdHlwZU1hc2sgPSAoY2xzID09IGNvbW1vbkVsZW1lbnRzLm51bGxDbGFzcykKICAgICAgICA/IGNyZWF0ZU51bGxhYmxlU3VidHlwZShjbHMpCiAgICAgICAgOiBjcmVhdGVOb25OdWxsU3VidHlwZShjbHMpOwogICAgaWYgKGV4cHJlc3Npb25NYXNrLnVuaW9uKHR5cGVNYXNrLCBfY2xvc2VkV29ybGQpID09IHR5cGVNYXNrKSB7CiAgICAgIHJldHVybiBBYnN0cmFjdEJvb2wuVHJ1ZTsKICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbk1hc2suaXNEaXNqb2ludCh0eXBlTWFzaywgX2Nsb3NlZFdvcmxkKSkgewogICAgICByZXR1cm4gQWJzdHJhY3RCb29sLkZhbHNlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIEFic3RyYWN0Qm9vbC5NYXliZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0VtcHR5KFR5cGVNYXNrIHZhbHVlKSA9PgogICAgICBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUodmFsdWUuaXNFbXB0eSk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0V4YWN0KFR5cGVNYXNrIHZhbHVlKSA9PgogICAgICBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUodmFsdWUuaXNFeGFjdCAmJiAhdmFsdWUuaXNOdWxsYWJsZSk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0V4YWN0T3JOdWxsKFR5cGVNYXNrIHZhbHVlKSA9PgogICAgICBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUodmFsdWUuaXNFeGFjdCB8fCBfaXNOdWxsKHZhbHVlKSk7CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldEV4YWN0Q2xhc3MoVHlwZU1hc2sgbWFzaykgewogICAgcmV0dXJuIG1hc2suc2luZ2xlQ2xhc3MoX2Nsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNQcmltaXRpdmVWYWx1ZShUeXBlTWFzayB2YWx1ZSkgPT4gdmFsdWUuaXNWYWx1ZTsKCiAgQG92ZXJyaWRlCiAgUHJpbWl0aXZlQ29uc3RhbnRWYWx1ZSBnZXRQcmltaXRpdmVWYWx1ZShUeXBlTWFzayBtYXNrKSB7CiAgICBpZiAobWFzay5pc1ZhbHVlKSB7CiAgICAgIFZhbHVlVHlwZU1hc2sgdmFsdWVNYXNrID0gbWFzazsKICAgICAgcmV0dXJuIHZhbHVlTWFzay52YWx1ZTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjcmVhdGVQcmltaXRpdmVWYWx1ZSgKICAgICAgY292YXJpYW50IFR5cGVNYXNrIG9yaWdpbmFsVmFsdWUsIFByaW1pdGl2ZUNvbnN0YW50VmFsdWUgdmFsdWUpIHsKICAgIHJldHVybiBuZXcgVmFsdWVUeXBlTWFzayhvcmlnaW5hbFZhbHVlLCB2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNOdWxsKFR5cGVNYXNrIHZhbHVlKSB7CiAgICBpZiAodmFsdWUuaXNOdWxsKSB7CiAgICAgIHJldHVybiBBYnN0cmFjdEJvb2wuVHJ1ZTsKICAgIH0gZWxzZSBpZiAodmFsdWUuaXNOdWxsYWJsZSkgewogICAgICByZXR1cm4gQWJzdHJhY3RCb29sLk1heWJlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIEFic3RyYWN0Qm9vbC5GYWxzZTsKICAgIH0KICB9CgogIGJvb2wgX2lzTnVsbChUeXBlTWFzayB2YWx1ZSkgPT4gdmFsdWUuaXNOdWxsOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNQcmltaXRpdmUoVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wubWF5YmVPckZhbHNlKF9jYW5CZVByaW1pdGl2ZU51bWJlcih2YWx1ZSkgfHwKICAgICAgICBfY2FuQmVQcmltaXRpdmVBcnJheSh2YWx1ZSkgfHwKICAgICAgICBfY2FuQmVQcmltaXRpdmVCb29sZWFuKHZhbHVlKSB8fAogICAgICAgIF9jYW5CZVByaW1pdGl2ZVN0cmluZyh2YWx1ZSkgfHwKICAgICAgICBfaXNOdWxsKHZhbHVlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNQcmltaXRpdmVOdW1iZXIoVHlwZU1hc2sgdmFsdWUpID0+CiAgICAgIEFic3RyYWN0Qm9vbC5tYXliZU9yRmFsc2UoX2NhbkJlUHJpbWl0aXZlTnVtYmVyKHZhbHVlKSk7CgogIGJvb2wgX2NhbkJlUHJpbWl0aXZlTnVtYmVyKFR5cGVNYXNrIHZhbHVlKSB7CiAgICAvLyBUT0RPKHNyYSk6IEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byB0ZXN0IG9ubHkganNEb3VibGVDbGFzcyBhbmQKICAgIC8vIGpzVUludDMxQ2xhc3MsIHNpbmNlIGFsbCBvdGhlcnMgYXJlIHN1cGVyY2xhc3NlcyBvZiB0aGVzZSB0d28uCiAgICByZXR1cm4gX2NvbnRhaW5zVHlwZSh2YWx1ZSwgY29tbW9uRWxlbWVudHMuanNOdW1iZXJDbGFzcykgfHwKICAgICAgICBfY29udGFpbnNUeXBlKHZhbHVlLCBjb21tb25FbGVtZW50cy5qc0ludENsYXNzKSB8fAogICAgICAgIF9jb250YWluc1R5cGUodmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzUG9zaXRpdmVJbnRDbGFzcykgfHwKICAgICAgICBfY29udGFpbnNUeXBlKHZhbHVlLCBjb21tb25FbGVtZW50cy5qc1VJbnQzMkNsYXNzKSB8fAogICAgICAgIF9jb250YWluc1R5cGUodmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzVUludDMxQ2xhc3MpIHx8CiAgICAgICAgX2NvbnRhaW5zVHlwZSh2YWx1ZSwgY29tbW9uRWxlbWVudHMuanNEb3VibGVDbGFzcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNQcmltaXRpdmVCb29sZWFuKFR5cGVNYXNrIHZhbHVlKSA9PgogICAgICBBYnN0cmFjdEJvb2wubWF5YmVPckZhbHNlKF9jYW5CZVByaW1pdGl2ZUJvb2xlYW4odmFsdWUpKTsKCiAgYm9vbCBfY2FuQmVQcmltaXRpdmVCb29sZWFuKFR5cGVNYXNrIHZhbHVlKSB7CiAgICByZXR1cm4gX2NvbnRhaW5zVHlwZSh2YWx1ZSwgY29tbW9uRWxlbWVudHMuanNCb29sQ2xhc3MpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzUHJpbWl0aXZlQXJyYXkoVHlwZU1hc2sgdmFsdWUpID0+CiAgICAgIEFic3RyYWN0Qm9vbC5tYXliZU9yRmFsc2UoX2NhbkJlUHJpbWl0aXZlQXJyYXkodmFsdWUpKTsKCiAgYm9vbCBfY2FuQmVQcmltaXRpdmVBcnJheShUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIF9jb250YWluc1R5cGUodmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcykgfHwKICAgICAgICBfY29udGFpbnNUeXBlKHZhbHVlLCBjb21tb25FbGVtZW50cy5qc0ZpeGVkQXJyYXlDbGFzcykgfHwKICAgICAgICBfY29udGFpbnNUeXBlKHZhbHVlLCBjb21tb25FbGVtZW50cy5qc0V4dGVuZGFibGVBcnJheUNsYXNzKSB8fAogICAgICAgIF9jb250YWluc1R5cGUodmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzVW5tb2RpZmlhYmxlQXJyYXlDbGFzcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNJbmRleGFibGVQcmltaXRpdmUoVHlwZU1hc2sgdmFsdWUpID0+CiAgICAgIEFic3RyYWN0Qm9vbC50cnVlT3JNYXliZShfaXNJbmRleGFibGVQcmltaXRpdmUodmFsdWUpKTsKCiAgYm9vbCBfaXNJbmRleGFibGVQcmltaXRpdmUoVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiB2YWx1ZS5jb250YWluc09ubHlTdHJpbmcoX2Nsb3NlZFdvcmxkKSB8fAogICAgICAgIF9pc0luc3RhbmNlT2ZPck51bGwodmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzSW5kZXhhYmxlQ2xhc3MpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzRml4ZWRBcnJheShUeXBlTWFzayB2YWx1ZSkgewogICAgLy8gVE9ETyhzcmEpOiBSZWNvZ25pemUgdGhlIHVuaW9uIG9mIHRoZXNlIHR5cGVzIGFzIHdlbGwuCiAgICByZXR1cm4gQWJzdHJhY3RCb29sLnRydWVPck1heWJlKAogICAgICAgIF9jb250YWluc09ubHlUeXBlKHZhbHVlLCBjb21tb25FbGVtZW50cy5qc0ZpeGVkQXJyYXlDbGFzcykgfHwKICAgICAgICAgICAgX2NvbnRhaW5zT25seVR5cGUodmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzVW5tb2RpZmlhYmxlQXJyYXlDbGFzcykpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzRXh0ZW5kYWJsZUFycmF5KFR5cGVNYXNrIHZhbHVlKSB7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLnRydWVPck1heWJlKAogICAgICAgIF9jb250YWluc09ubHlUeXBlKHZhbHVlLCBjb21tb25FbGVtZW50cy5qc0V4dGVuZGFibGVBcnJheUNsYXNzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNNdXRhYmxlQXJyYXkoVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUoCiAgICAgICAgX2lzSW5zdGFuY2VPZk9yTnVsbCh2YWx1ZSwgY29tbW9uRWxlbWVudHMuanNNdXRhYmxlQXJyYXlDbGFzcykpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzTXV0YWJsZUluZGV4YWJsZShUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIEFic3RyYWN0Qm9vbC50cnVlT3JNYXliZSgKICAgICAgICBfaXNJbnN0YW5jZU9mT3JOdWxsKHZhbHVlLCBjb21tb25FbGVtZW50cy5qc011dGFibGVJbmRleGFibGVDbGFzcykpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzQXJyYXkoVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUoCiAgICAgICAgX2lzSW5zdGFuY2VPZk9yTnVsbCh2YWx1ZSwgY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNQcmltaXRpdmVTdHJpbmcoVHlwZU1hc2sgdmFsdWUpID0+CiAgICAgIEFic3RyYWN0Qm9vbC5tYXliZU9yRmFsc2UoX2NhbkJlUHJpbWl0aXZlU3RyaW5nKHZhbHVlKSk7CgogIGJvb2wgX2NhbkJlUHJpbWl0aXZlU3RyaW5nKFR5cGVNYXNrIHZhbHVlKSB7CiAgICByZXR1cm4gX2NvbnRhaW5zVHlwZSh2YWx1ZSwgY29tbW9uRWxlbWVudHMuanNTdHJpbmdDbGFzcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNJbnRlZ2VyKFR5cGVNYXNrIHZhbHVlKSB7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLnRydWVPck1heWJlKAogICAgICAgIHZhbHVlLmNvbnRhaW5zT25seUludChfY2xvc2VkV29ybGQpICYmICF2YWx1ZS5pc051bGxhYmxlKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1VJbnQzMihUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIEFic3RyYWN0Qm9vbC50cnVlT3JNYXliZSghdmFsdWUuaXNOdWxsYWJsZSAmJgogICAgICAgIF9pc0luc3RhbmNlT2ZPck51bGwodmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzVUludDMyQ2xhc3MpKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1VJbnQzMShUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIEFic3RyYWN0Qm9vbC50cnVlT3JNYXliZSghdmFsdWUuaXNOdWxsYWJsZSAmJgogICAgICAgIF9pc0luc3RhbmNlT2ZPck51bGwodmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzVUludDMxQ2xhc3MpKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1Bvc2l0aXZlSW50ZWdlcihUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIEFic3RyYWN0Qm9vbC50cnVlT3JNYXliZSghdmFsdWUuaXNOdWxsYWJsZSAmJgogICAgICAgIF9pc0luc3RhbmNlT2ZPck51bGwodmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzUG9zaXRpdmVJbnRDbGFzcykpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzUG9zaXRpdmVJbnRlZ2VyT3JOdWxsKFR5cGVNYXNrIHZhbHVlKSB7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLnRydWVPck1heWJlKAogICAgICAgIF9pc0luc3RhbmNlT2ZPck51bGwodmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzUG9zaXRpdmVJbnRDbGFzcykpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzSW50ZWdlck9yTnVsbChUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIEFic3RyYWN0Qm9vbC50cnVlT3JNYXliZSh2YWx1ZS5jb250YWluc09ubHlJbnQoX2Nsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNOdW1iZXIoVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUoCiAgICAgICAgdmFsdWUuY29udGFpbnNPbmx5TnVtKF9jbG9zZWRXb3JsZCkgJiYgIXZhbHVlLmlzTnVsbGFibGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzTnVtYmVyT3JOdWxsKFR5cGVNYXNrIHZhbHVlKSA9PgogICAgICBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUoX2lzTnVtYmVyT3JOdWxsKHZhbHVlKSk7CgogIGJvb2wgX2lzTnVtYmVyT3JOdWxsKFR5cGVNYXNrIHZhbHVlKSB7CiAgICByZXR1cm4gdmFsdWUuY29udGFpbnNPbmx5TnVtKF9jbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNEb3VibGUoVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUoCiAgICAgICAgdmFsdWUuY29udGFpbnNPbmx5RG91YmxlKF9jbG9zZWRXb3JsZCkgJiYgIXZhbHVlLmlzTnVsbGFibGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzRG91YmxlT3JOdWxsKFR5cGVNYXNrIHZhbHVlKSB7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLnRydWVPck1heWJlKHZhbHVlLmNvbnRhaW5zT25seURvdWJsZShfY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0Jvb2xlYW4oVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUoCiAgICAgICAgdmFsdWUuY29udGFpbnNPbmx5Qm9vbChfY2xvc2VkV29ybGQpICYmICF2YWx1ZS5pc051bGxhYmxlKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0Jvb2xlYW5Pck51bGwoVHlwZU1hc2sgdmFsdWUpID0+CiAgICAgIEFic3RyYWN0Qm9vbC50cnVlT3JNYXliZShfaXNCb29sZWFuT3JOdWxsKHZhbHVlKSk7CgogIGJvb2wgX2lzQm9vbGVhbk9yTnVsbChUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlLmNvbnRhaW5zT25seUJvb2woX2Nsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1N0cmluZyhUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIEFic3RyYWN0Qm9vbC50cnVlT3JNYXliZSgKICAgICAgICB2YWx1ZS5jb250YWluc09ubHlTdHJpbmcoX2Nsb3NlZFdvcmxkKSAmJiAhdmFsdWUuaXNOdWxsYWJsZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNTdHJpbmdPck51bGwoVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUodmFsdWUuY29udGFpbnNPbmx5U3RyaW5nKF9jbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzUHJpbWl0aXZlT3JOdWxsKFR5cGVNYXNrIHZhbHVlKSA9PgogICAgICBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUoX2lzUHJpbWl0aXZlT3JOdWxsKHZhbHVlKSk7CgogIGJvb2wgX2lzUHJpbWl0aXZlT3JOdWxsKFR5cGVNYXNrIHZhbHVlKSB7CiAgICByZXR1cm4gX2lzSW5kZXhhYmxlUHJpbWl0aXZlKHZhbHVlKSB8fAogICAgICAgIF9pc051bWJlck9yTnVsbCh2YWx1ZSkgfHwKICAgICAgICBfaXNCb29sZWFuT3JOdWxsKHZhbHVlKSB8fAogICAgICAgIF9pc051bGwodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgdW5pb24oVHlwZU1hc2sgYSwgVHlwZU1hc2sgYikgPT4gYS51bmlvbihiLCBfY2xvc2VkV29ybGQpOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBpbnRlcnNlY3Rpb24oVHlwZU1hc2sgYSwgVHlwZU1hc2sgYikgPT4KICAgICAgYS5pbnRlcnNlY3Rpb24oYiwgX2Nsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGFyZURpc2pvaW50KFR5cGVNYXNrIGEsIFR5cGVNYXNrIGIpID0+CiAgICAgIEFic3RyYWN0Qm9vbC50cnVlT3JNYXliZShhLmlzRGlzam9pbnQoYiwgX2Nsb3NlZFdvcmxkKSk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBjb250YWluc0FsbChUeXBlTWFzayBhKSA9PgogICAgICBBYnN0cmFjdEJvb2wubWF5YmVPckZhbHNlKGEuY29udGFpbnNBbGwoX2Nsb3NlZFdvcmxkKSk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZUFic3RyYWN0VmFsdWVGb3JDb25zdGFudChDb25zdGFudFZhbHVlIHZhbHVlKSB7CiAgICByZXR1cm4gY29tcHV0ZVR5cGVNYXNrKF9jbG9zZWRXb3JsZCwgdmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXRNYXBLZXlUeXBlKEFic3RyYWN0VmFsdWUgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSBpcyBNYXBUeXBlTWFzaykgewogICAgICByZXR1cm4gdmFsdWUua2V5VHlwZTsKICAgIH0KICAgIHJldHVybiBkeW5hbWljVHlwZTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0TWFwVmFsdWVUeXBlKEFic3RyYWN0VmFsdWUgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSBpcyBNYXBUeXBlTWFzaykgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBc3NlcnQgdGhlIGB2YWx1ZS52YWx1ZVR5cGVgIGlzIG5vdCBudWxsLgogICAgICByZXR1cm4gdmFsdWUudmFsdWVUeXBlID8/IGR5bmFtaWNUeXBlOwogICAgfQogICAgcmV0dXJuIGR5bmFtaWNUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXRDb250YWluZXJFbGVtZW50VHlwZShBYnN0cmFjdFZhbHVlIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgaXMgQ29udGFpbmVyVHlwZU1hc2spIHsKICAgICAgcmV0dXJuIHZhbHVlLmVsZW1lbnRUeXBlID8/IGR5bmFtaWNUeXBlOwogICAgfQogICAgcmV0dXJuIGR5bmFtaWNUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldENvbnRhaW5lckxlbmd0aChBYnN0cmFjdFZhbHVlIHZhbHVlKSB7CiAgICByZXR1cm4gdmFsdWUgaXMgQ29udGFpbmVyVHlwZU1hc2sgPyB2YWx1ZS5sZW5ndGggOiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjcmVhdGVDb250YWluZXJWYWx1ZSgKICAgICAgQWJzdHJhY3RWYWx1ZSBmb3J3YXJkVG8sCiAgICAgIE9iamVjdCBhbGxvY2F0aW9uTm9kZSwKICAgICAgTWVtYmVyRW50aXR5IGFsbG9jYXRpb25FbGVtZW50LAogICAgICBBYnN0cmFjdFZhbHVlIGVsZW1lbnRUeXBlLAogICAgICBpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IENvbnRhaW5lclR5cGVNYXNrKAogICAgICAgIGZvcndhcmRUbywgYWxsb2NhdGlvbk5vZGUsIGFsbG9jYXRpb25FbGVtZW50LCBlbGVtZW50VHlwZSwgbGVuZ3RoKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdW5pb25PZk1hbnkoSXRlcmFibGU8QWJzdHJhY3RWYWx1ZT4gdmFsdWVzKSB7CiAgICBUeXBlTWFzayByZXN1bHQgPSBjb25zdCBUeXBlTWFzay5ub25OdWxsRW1wdHkoKTsKICAgIGZvciAoVHlwZU1hc2sgdmFsdWUgaW4gdmFsdWVzKSB7CiAgICAgIHJlc3VsdCA9IHJlc3VsdC51bmlvbih2YWx1ZSwgX2Nsb3NlZFdvcmxkKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVSZWNlaXZlcihJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IG1lbWJlcnMpIHsKICAgIGFzc2VydChfY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkKICAgICAgICAuaGFzQW55U3RyaWN0U3ViY2xhc3MoX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzKSk7CiAgICByZXR1cm4gbmV3IFR5cGVNYXNrLnVuaW9uT2YoCiAgICAgICAgbWVtYmVycy5leHBhbmQoKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICAgICAgICBDbGFzc0VudGl0eSBjbHMgPSBlbGVtZW50LmVuY2xvc2luZ0NsYXNzOwogICAgICAgICAgcmV0dXJuIFtjbHNdLi5hZGRBbGwoX2Nsb3NlZFdvcmxkLm1peGluVXNlc09mKGNscykpOwogICAgICAgIH0pLm1hcCgoY2xzKSB7CiAgICAgICAgICBpZiAoX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmpzTnVsbENsYXNzID09IGNscykgewogICAgICAgICAgICByZXR1cm4gY29uc3QgVHlwZU1hc2suZW1wdHkoKTsKICAgICAgICAgIH0gZWxzZSBpZiAoX2Nsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzSW5zdGFudGlhdGVkKGNscykpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBUeXBlTWFzay5ub25OdWxsU3ViY2xhc3MoY2xzLCBfY2xvc2VkV29ybGQpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQXZvaWQgdGhlIG5lZWQgZm9yIHRoaXMgY2FzZS4KICAgICAgICAgICAgcmV0dXJuIGNvbnN0IFR5cGVNYXNrLmVtcHR5KCk7CiAgICAgICAgICB9CiAgICAgICAgfSksCiAgICAgICAgX2Nsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1RhcmdldGluZ01lbWJlcigKICAgICAgY292YXJpYW50IFR5cGVNYXNrIHJlY2VpdmVyLCBNZW1iZXJFbnRpdHkgbWVtYmVyLCBOYW1lIG5hbWUpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wubWF5YmVPckZhbHNlKAogICAgICAgIHJlY2VpdmVyLmNhbkhpdChtZW1iZXIsIG5hbWUsIF9jbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIG5lZWRzTm9TdWNoTWV0aG9kSGFuZGxpbmcoCiAgICAgIGNvdmFyaWFudCBUeXBlTWFzayByZWNlaXZlciwgU2VsZWN0b3Igc2VsZWN0b3IpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wudHJ1ZU9yRmFsc2UoCiAgICAgICAgcmVjZWl2ZXIubmVlZHNOb1N1Y2hNZXRob2RIYW5kbGluZyhzZWxlY3RvciwgX2Nsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgY29udGFpbnMoCiAgICAgIGNvdmFyaWFudCBUeXBlTWFzayBzdXBlcnNldCwgY292YXJpYW50IFR5cGVNYXNrIHN1YnNldCkgewogICAgcmV0dXJuIEFic3RyYWN0Qm9vbC5tYXliZU9yRmFsc2UoCiAgICAgICAgc3VwZXJzZXQuY29udGFpbnNNYXNrKHN1YnNldCwgX2Nsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNJbihjb3ZhcmlhbnQgVHlwZU1hc2sgc3Vic2V0LCBjb3ZhcmlhbnQgVHlwZU1hc2sgc3VwZXJzZXQpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUoc3Vic2V0LmlzSW5NYXNrKHN1cGVyc2V0LCBfY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIE1lbWJlckVudGl0eSBsb2NhdGVTaW5nbGVNZW1iZXIoCiAgICAgIGNvdmFyaWFudCBUeXBlTWFzayByZWNlaXZlciwgU2VsZWN0b3Igc2VsZWN0b3IpIHsKICAgIHJldHVybiByZWNlaXZlci5sb2NhdGVTaW5nbGVNZW1iZXIoc2VsZWN0b3IsIF9jbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNKc0luZGV4YWJsZShUeXBlTWFzayBtYXNrKSB7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLnRydWVPck1heWJlKG1hc2suc2F0aXNmaWVzKAogICAgICAgIF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5qc0luZGV4YWJsZUNsYXNzLCBfY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0pzSW5kZXhhYmxlQW5kSXRlcmFibGUoY292YXJpYW50IFR5cGVNYXNrIG1hc2spIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUobWFzayAhPSBudWxsICYmCiAgICAgICAgbWFzay5zYXRpc2ZpZXMoCiAgICAgICAgICAgIF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5qc0luZGV4YWJsZUNsYXNzLCBfY2xvc2VkV29ybGQpICYmCiAgICAgICAgLy8gU3RyaW5nIGlzIGluZGV4YWJsZSBidXQgbm90IGl0ZXJhYmxlLgogICAgICAgICFtYXNrLnNhdGlzZmllcygKICAgICAgICAgICAgX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmpzU3RyaW5nQ2xhc3MsIF9jbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzRml4ZWRMZW5ndGhKc0luZGV4YWJsZShjb3ZhcmlhbnQgVHlwZU1hc2sgbWFzaykgewogICAgaWYgKG1hc2suaXNDb250YWluZXIgJiYgKG1hc2sgYXMgQ29udGFpbmVyVHlwZU1hc2spLmxlbmd0aCAhPSBudWxsKSB7CiAgICAgIC8vIEEgY29udGFpbmVyIG9uIHdoaWNoIHdlIGhhdmUgaW5mZXJyZWQgdGhlIGxlbmd0aC4KICAgICAgcmV0dXJuIEFic3RyYWN0Qm9vbC5UcnVlOwogICAgfQogICAgLy8gVE9ETyhzcmEpOiBSZWNvZ25pemUgYW55IGNvbWJpbmF0aW9uIG9mIGZpeGVkIGxlbmd0aCBpbmRleGFibGVzLgogICAgaWYgKG1hc2suY29udGFpbnNPbmx5KF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5qc0ZpeGVkQXJyYXlDbGFzcykgfHwKICAgICAgICBtYXNrLmNvbnRhaW5zT25seSgKICAgICAgICAgICAgX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmpzVW5tb2RpZmlhYmxlQXJyYXlDbGFzcykgfHwKICAgICAgICBtYXNrLmNvbnRhaW5zT25seVN0cmluZyhfY2xvc2VkV29ybGQpIHx8CiAgICAgICAgX2Nsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uaXNUeXBlZEFycmF5KG1hc2spLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIEFic3RyYWN0Qm9vbC5UcnVlOwogICAgfQogICAgcmV0dXJuIEFic3RyYWN0Qm9vbC5NYXliZTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0ludGVyY2VwdG9yKFR5cGVNYXNrIHZhbHVlKSB7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLm1heWJlT3JGYWxzZSgKICAgICAgICAhaW50ZXJjZXB0b3JUeXBlLmlzRGlzam9pbnQodmFsdWUsIF9jbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc01hcChUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlLmlzTWFwOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1NldChUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlLmlzU2V0OwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvbnRhaW5lcihUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlLmlzQ29udGFpbmVyOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0RpY3Rpb25hcnkoVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiB2YWx1ZS5pc0RpY3Rpb25hcnk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zRGljdGlvbmFyeUtleShBYnN0cmFjdFZhbHVlIHZhbHVlLCBTdHJpbmcga2V5KSB7CiAgICByZXR1cm4gdmFsdWUgaXMgRGljdGlvbmFyeVR5cGVNYXNrICYmIHZhbHVlLmNvbnRhaW5zS2V5KGtleSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldERpY3Rpb25hcnlWYWx1ZUZvcktleShBYnN0cmFjdFZhbHVlIHZhbHVlLCBTdHJpbmcga2V5KSB7CiAgICBpZiAodmFsdWUgaXMgRGljdGlvbmFyeVR5cGVNYXNrKSByZXR1cm4gdmFsdWUuZ2V0VmFsdWVGb3JLZXkoa2V5KTsKICAgIHJldHVybiBkeW5hbWljVHlwZTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY3JlYXRlTWFwVmFsdWUoQWJzdHJhY3RWYWx1ZSBmb3J3YXJkVG8sIE9iamVjdCBhbGxvY2F0aW9uTm9kZSwKICAgICAgTWVtYmVyRW50aXR5IGFsbG9jYXRpb25FbGVtZW50LCBBYnN0cmFjdFZhbHVlIGtleSwgQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgewogICAgcmV0dXJuIG5ldyBNYXBUeXBlTWFzaygKICAgICAgICBmb3J3YXJkVG8sIGFsbG9jYXRpb25Ob2RlLCBhbGxvY2F0aW9uRWxlbWVudCwga2V5LCB2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNyZWF0ZURpY3Rpb25hcnlWYWx1ZSgKICAgICAgQWJzdHJhY3RWYWx1ZSBmb3J3YXJkVG8sCiAgICAgIE9iamVjdCBhbGxvY2F0aW9uTm9kZSwKICAgICAgTWVtYmVyRW50aXR5IGFsbG9jYXRpb25FbGVtZW50LAogICAgICBBYnN0cmFjdFZhbHVlIGtleSwKICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSwKICAgICAgTWFwPFN0cmluZywgQWJzdHJhY3RWYWx1ZT4gbWFwcGluZ3MpIHsKICAgIHJldHVybiBuZXcgRGljdGlvbmFyeVR5cGVNYXNrKAogICAgICAgIGZvcndhcmRUbywgYWxsb2NhdGlvbk5vZGUsIGFsbG9jYXRpb25FbGVtZW50LCBrZXksIHZhbHVlLCBtYXBwaW5ncyk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNyZWF0ZVNldFZhbHVlKEFic3RyYWN0VmFsdWUgZm9yd2FyZFRvLCBPYmplY3QgYWxsb2NhdGlvbk5vZGUsCiAgICAgIE1lbWJlckVudGl0eSBhbGxvY2F0aW9uRWxlbWVudCwgQWJzdHJhY3RWYWx1ZSBlbGVtZW50VHlwZSkgewogICAgcmV0dXJuIG5ldyBTZXRUeXBlTWFzaygKICAgICAgICBmb3J3YXJkVG8sIGFsbG9jYXRpb25Ob2RlLCBhbGxvY2F0aW9uRWxlbWVudCwgZWxlbWVudFR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXRTZXRFbGVtZW50VHlwZShBYnN0cmFjdFZhbHVlIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgaXMgU2V0VHlwZU1hc2spIHsKICAgICAgcmV0dXJuIHZhbHVlLmVsZW1lbnRUeXBlID8/IGR5bmFtaWNUeXBlOwogICAgfQogICAgcmV0dXJuIGR5bmFtaWNUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1NwZWNpYWxpemF0aW9uT2YoCiAgICAgIEFic3RyYWN0VmFsdWUgc3BlY2lhbGl6YXRpb24sIEFic3RyYWN0VmFsdWUgZ2VuZXJhbGl6YXRpb24pIHsKICAgIHJldHVybiBzcGVjaWFsaXphdGlvbiBpcyBGb3J3YXJkaW5nVHlwZU1hc2sgJiYKICAgICAgICBzcGVjaWFsaXphdGlvbi5mb3J3YXJkVG8gPT0gZ2VuZXJhbGl6YXRpb247CiAgfQoKICBAb3ZlcnJpZGUKICBPYmplY3QgZ2V0QWxsb2NhdGlvbk5vZGUoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgewogICAgaWYgKHZhbHVlIGlzIEFsbG9jYXRpb25UeXBlTWFzaykgewogICAgICByZXR1cm4gdmFsdWUuYWxsb2NhdGlvbk5vZGU7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIE1lbWJlckVudGl0eSBnZXRBbGxvY2F0aW9uRWxlbWVudChBYnN0cmFjdFZhbHVlIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgaXMgQWxsb2NhdGlvblR5cGVNYXNrKSB7CiAgICAgIHJldHVybiB2YWx1ZS5hbGxvY2F0aW9uRWxlbWVudDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXRHZW5lcmFsaXphdGlvbihBYnN0cmFjdFZhbHVlIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgaXMgQWxsb2NhdGlvblR5cGVNYXNrKSB7CiAgICAgIHJldHVybiB2YWx1ZS5mb3J3YXJkVG87CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0QWJzdHJhY3RWYWx1ZUZvck5hdGl2ZU1ldGhvZFBhcmFtZXRlclR5cGUoRGFydFR5cGUgdHlwZSkgewogICAgaWYgKHR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICBpZiAodHlwZS50eXBlQXJndW1lbnRzLmlzTm90RW1wdHkpIHJldHVybiBudWxsOwogICAgICAvLyBUT0RPKHNyYSk6IENvbnNpZGVyIHVzaW5nIGEgc3RyZW5ndGhlbmVkIHR5cGUgY2hlY2sgdG8gYXZvaWQgcGFzc2luZwogICAgICAvLyBgbnVsbGAgdG8gcHJpbWl0aXZlIHR5cGVzIHNpbmNlIHRoZSBuYXRpdmUgbWV0aG9kcyB1c3VhbGx5IGhhdmUKICAgICAgLy8gbm9uLW51bGxhYmxlIHByaW1pdGl2ZSBwYXJhbWV0ZXIgdHlwZXMuCiAgICAgIHJldHVybiBjcmVhdGVOdWxsYWJsZVN1YnR5cGUodHlwZS5lbGVtZW50KTsKICAgIH0KICAgIGlmICh0eXBlIGlzIER5bmFtaWNUeXBlKSByZXR1cm4gZHluYW1pY1R5cGU7CiAgICAvLyBUT0RPKHNyYSk6IENvbnZlcnQgb3RoZXIgW0RhcnRUeXBlXXMgdG8gW0Fic3RyYWN0VmFsdWVdcwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0Q29tcGFjdFRleHQoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgewogICAgcmV0dXJuIGZvcm1hdFR5cGUodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgcmVhZEFic3RyYWN0VmFsdWVGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgcmV0dXJuIHNvdXJjZS5yZWFkQ2FjaGVkPFR5cGVNYXNrPigKICAgICAgICAoKSA9PiBuZXcgVHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgX2Nsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlQWJzdHJhY3RWYWx1ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaywgY292YXJpYW50IFR5cGVNYXNrIHZhbHVlKSB7CiAgICBzaW5rLndyaXRlQ2FjaGVkPFR5cGVNYXNrPigKICAgICAgICB2YWx1ZSwgKFR5cGVNYXNrIHZhbHVlKSA9PiB2YWx1ZS53cml0ZVRvRGF0YVNpbmsoc2luaykpOwogIH0KfQoKLy8vIENvbnZlcnQgdGhlIGdpdmVuIFR5cGVNYXNrIHRvIGEgY29tcGFjdCBzdHJpbmcgZm9ybWF0LgovLy8KLy8vIFRoZSBkZWZhdWx0IGZvcm1hdCBpcyB0b28gdmVyYm9zZSBmb3IgdGhlIGdyYXBoIGZvcm1hdCBzaW5jZSBsb25nIHN0cmluZ3MKLy8vIGNyZWF0ZSBvYmxvbmcgbm9kZXMgdGhhdCBvYnN0cnVjdCB0aGUgZ3JhcGggbGF5b3V0LgpTdHJpbmcgZm9ybWF0VHlwZShUeXBlTWFzayB0eXBlKSB7CiAgaWYgKHR5cGUgaXMgRmxhdFR5cGVNYXNrKSB7CiAgICAvLyBUT0RPKGFzZ2VyZik6IERpc2FtYmlndWF0ZSBjbGFzc2VzIHdob3NlIG5hbWUgaXMgbm90IHVuaXF1ZS4gVXNpbmcgdGhlCiAgICAvLyAgICAgbGlicmFyeSBuYW1lIGZvciBhbGwgY2xhc3NlcyBpcyBub3QgYSBnb29kIGlkZWEsIHNpbmNlIGxpYnJhcnkgbmFtZXMKICAgIC8vICAgICBjYW4gYmUgcmVhbGx5IGxvbmcgYW5kIG1lc3MgdXAgdGhlIGxheW91dC4KICAgIC8vIENhcGl0YWxpemUgTnVsbCB0byBlbXBoYXNpemUgdGhhdCBpdCdzIHRoZSBudWxsIHR5cGUgbWFzayBhbmQgbm90CiAgICAvLyBhIG51bGwgdmFsdWUgd2UgYWNjaWRlbnRhbGx5IHByaW50ZWQgb3V0LgogICAgaWYgKHR5cGUuaXNFbXB0eU9yTnVsbCkgcmV0dXJuIHR5cGUuaXNOdWxsYWJsZSA/ICdOdWxsJyA6ICdFbXB0eSc7CiAgICBTdHJpbmcgbnVsbEZsYWcgPSB0eXBlLmlzTnVsbGFibGUgPyAnPycgOiAnJzsKICAgIFN0cmluZyBzdWJGbGFnID0gdHlwZS5pc0V4YWN0ID8gJycgOiB0eXBlLmlzU3ViY2xhc3MgPyAnKycgOiAnKic7CiAgICByZXR1cm4gJyR7dHlwZS5iYXNlLm5hbWV9JG51bGxGbGFnJHN1YkZsYWcnOwogIH0KICBpZiAodHlwZSBpcyBVbmlvblR5cGVNYXNrKSB7CiAgICByZXR1cm4gdHlwZS5kaXNqb2ludE1hc2tzLm1hcChmb3JtYXRUeXBlKS5qb2luKCcgfCAnKTsKICB9CiAgaWYgKHR5cGUgaXMgQ29udGFpbmVyVHlwZU1hc2spIHsKICAgIFN0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c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBtYXNrczsKCi8vLyBBIFtUeXBlTWFza10gZm9yIGEgc3BlY2lmaWMgYWxsb2NhdGlvbiBzaXRlIG9mIGEgY29udGFpbmVyIChjdXJyZW50bHkgb25seQovLy8gTGlzdCkgdGhhdCB3aWxsIGdldCBzcGVjaWFsaXplZCBvbmNlIHRoZSBbVHlwZUdyYXBoSW5mZXJyZXJdIHBoYXNlIGZpbmRzIGFuCi8vLyBlbGVtZW50IHR5cGUgZm9yIGl0LgpjbGFzcyBDb250YWluZXJUeXBlTWFzayBleHRlbmRzIEFsbG9jYXRpb25UeXBlTWFzayB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtDb250YWluZXJUeXBlTWFza10gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdjb250YWluZXItdHlwZS1tYXNrJzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgVHlwZU1hc2sgZm9yd2FyZFRvOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBpci5Ob2RlIGFsbG9jYXRpb25Ob2RlOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBNZW1iZXJFbnRpdHkgYWxsb2NhdGlvbkVsZW1lbnQ7CgogIC8vIFRoZSBlbGVtZW50IHR5cGUgb2YgdGhpcyBjb250YWluZXIuCiAgZmluYWwgVHlwZU1hc2sgZWxlbWVudFR5cGU7CgogIC8vIFRoZSBsZW5ndGggb2YgdGhlIGNvbnRhaW5lci4KICBmaW5hbCBpbnQgbGVuZ3RoOwoKICBDb250YWluZXJUeXBlTWFzayh0aGlzLmZvcndhcmRUbywgdGhpcy5hbGxvY2F0aW9uTm9kZSwgdGhpcy5hbGxvY2F0aW9uRWxlbWVudCwKICAgICAgdGhpcy5lbGVtZW50VHlwZSwgdGhpcy5sZW5ndGgpOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW0NvbnRhaW5lclR5cGVNYXNrXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IENvbnRhaW5lclR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBUeXBlTWFzayBmb3J3YXJkVG8gPSBuZXcgVHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgY2xvc2VkV29ybGQpOwogICAgaXIuVHJlZU5vZGUgYWxsb2NhdGlvbk5vZGUgPSBzb3VyY2UucmVhZFRyZWVOb2RlT3JOdWxsKCk7CiAgICBNZW1iZXJFbnRpdHkgYWxsb2NhdGlvbkVsZW1lbnQgPSBzb3VyY2UucmVhZE1lbWJlck9yTnVsbCgpOwogICAgVHlwZU1hc2sgZWxlbWVudFR5cGUgPSBuZXcgVHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgY2xvc2VkV29ybGQpOwogICAgaW50IGxlbmd0aCA9IHNvdXJjZS5yZWFkSW50T3JOdWxsKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IENvbnRhaW5lclR5cGVNYXNrKAogICAgICAgIGZvcndhcmRUbywgYWxsb2NhdGlvbk5vZGUsIGFsbG9jYXRpb25FbGVtZW50LCBlbGVtZW50VHlwZSwgbGVuZ3RoKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0NvbnRhaW5lclR5cGVNYXNrXSB0byBbc2lua10uCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oVHlwZU1hc2tLaW5kLmNvbnRhaW5lcik7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBmb3J3YXJkVG8ud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc2luay53cml0ZVRyZWVOb2RlT3JOdWxsKGFsbG9jYXRpb25Ob2RlKTsKICAgIHNpbmsud3JpdGVNZW1iZXJPck51bGwoYWxsb2NhdGlvbkVsZW1lbnQpOwogICAgZWxlbWVudFR5cGUud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc2luay53cml0ZUludE9yTnVsbChsZW5ndGgpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIG51bGxhYmxlKCkgewogICAgcmV0dXJuIGlzTnVsbGFibGUKICAgICAgICA/IHRoaXMKICAgICAgICA6IG5ldyBDb250YWluZXJUeXBlTWFzayhmb3J3YXJkVG8ubnVsbGFibGUoKSwgYWxsb2NhdGlvbk5vZGUsCiAgICAgICAgICAgIGFsbG9jYXRpb25FbGVtZW50LCBlbGVtZW50VHlwZSwgbGVuZ3RoKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIG5vbk51bGxhYmxlKCkgewogICAgcmV0dXJuIGlzTnVsbGFibGUKICAgICAgICA/IG5ldyBDb250YWluZXJUeXBlTWFzayhmb3J3YXJkVG8ubm9uTnVsbGFibGUoKSwgYWxsb2NhdGlvbk5vZGUsCiAgICAgICAgICAgIGFsbG9jYXRpb25FbGVtZW50LCBlbGVtZW50VHlwZSwgbGVuZ3RoKQogICAgICAgIDogdGhpczsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQ29udGFpbmVyID0+IHRydWU7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFeGFjdCA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGVxdWFsc0Rpc3JlZ2FyZE51bGwob3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyEgQ29udGFpbmVyVHlwZU1hc2spIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBzdXBlci5lcXVhbHNEaXNyZWdhcmROdWxsKG90aGVyKSAmJgogICAgICAgIGFsbG9jYXRpb25Ob2RlID09IG90aGVyLmFsbG9jYXRpb25Ob2RlICYmCiAgICAgICAgZWxlbWVudFR5cGUgPT0gb3RoZXIuZWxlbWVudFR5cGUgJiYKICAgICAgICBsZW5ndGggPT0gb3RoZXIubGVuZ3RoOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgaW50ZXJzZWN0aW9uKFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIFR5cGVNYXNrIGZvcndhcmRJbnRlcnNlY3Rpb24gPSBmb3J3YXJkVG8uaW50ZXJzZWN0aW9uKG90aGVyLCBjbG9zZWRXb3JsZCk7CiAgICBpZiAoZm9yd2FyZEludGVyc2VjdGlvbi5pc0VtcHR5T3JOdWxsKSByZXR1cm4gZm9yd2FyZEludGVyc2VjdGlvbjsKICAgIHJldHVybiBmb3J3YXJkSW50ZXJzZWN0aW9uLmlzTnVsbGFibGUgPyBudWxsYWJsZSgpIDogbm9uTnVsbGFibGUoKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIHVuaW9uKGR5bmFtaWMgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgaWYgKHRoaXMgPT0gb3RoZXIpIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9IGVsc2UgaWYgKGVxdWFsc0Rpc3JlZ2FyZE51bGwob3RoZXIpKSB7CiAgICAgIHJldHVybiBvdGhlci5pc051bGxhYmxlID8gb3RoZXIgOiB0aGlzOwogICAgfSBlbHNlIGlmIChvdGhlci5pc0VtcHR5T3JOdWxsKSB7CiAgICAgIHJldHVybiBvdGhlci5pc051bGxhYmxlID8gdGhpcy5udWxsYWJsZSgpIDogdGhpczsKICAgIH0gZWxzZSBpZiAob3RoZXIuaXNDb250YWluZXIgJiYKICAgICAgICBlbGVtZW50VHlwZSAhPSBudWxsICYmCiAgICAgICAgb3RoZXIuZWxlbWVudFR5cGUgIT0gbnVsbCkgewogICAgICBUeXBlTWFzayBuZXdFbGVtZW50VHlwZSA9CiAgICAgICAgICBlbGVtZW50VHlwZS51bmlvbihvdGhlci5lbGVtZW50VHlwZSwgY2xvc2VkV29ybGQpOwogICAgICBpbnQgbmV3TGVuZ3RoID0gKGxlbmd0aCA9PSBvdGhlci5sZW5ndGgpID8gbGVuZ3RoIDogbnVsbDsKICAgICAgVHlwZU1hc2sgbmV3Rm9yd2FyZFRvID0gZm9yd2FyZFRvLnVuaW9uKG90aGVyLmZvcndhcmRUbywgY2xvc2VkV29ybGQpOwogICAgICByZXR1cm4gbmV3IENvbnRhaW5lclR5cGVNYXNrKAogICAgICAgICAgbmV3Rm9yd2FyZFRvLAogICAgICAgICAgYWxsb2NhdGlvbk5vZGUgPT0gb3RoZXIuYWxsb2NhdGlvbk5vZGUgPyBhbGxvY2F0aW9uTm9kZSA6IG51bGwsCiAgICAgICAgICBhbGxvY2F0aW9uRWxlbWVudCA9PSBvdGhlci5hbGxvY2F0aW9uRWxlbWVudAogICAgICAgICAgICAgID8gYWxsb2NhdGlvbkVsZW1lbnQKICAgICAgICAgICAgICA6IG51bGwsCiAgICAgICAgICBuZXdFbGVtZW50VHlwZSwKICAgICAgICAgIG5ld0xlbmd0aCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZm9yd2FyZFRvLnVuaW9uKG90aGVyLCBjbG9zZWRXb3JsZCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSA9PiBzdXBlciA9PSBvdGhlcjsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gY29tcHV0ZUhhc2hDb2RlKAogICAgICAgIGFsbG9jYXRpb25Ob2RlLCBpc051bGxhYmxlLCBlbGVtZW50VHlwZSwgbGVuZ3RoLCBmb3J3YXJkVG8pOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdDb250YWluZXIoJGZvcndhcmRUbywgZWxlbWVudDogJGVsZW1lbnRUeXBlLCBsZW5ndGg6ICRsZW5ndGgpJzsKICB9Cn0KgIwATk48AQ8BT1AZNUsdMwEMHAEMIAEMKAEpHgEiFAFRJgE/MDUXTz5AUSkVIkwEATUMKCwVJS4vJyETBAEMGBYPRjUEAQwbFkk0EAQBDCAMHAEMJDMvMiwgBAEMRE9HSAQBDDwZEy0uJjgkHyUgPUBNJBhKNyIWGhYNMgYEAQwtAQwVHEUEAQwWTAQCAUBwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci90eXBlbWFza3MvY29udGFpbmVyX3R5cGVfbWFzay5kYXJ0SnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2luZmVycmVyL3R5cGVtYXNrcy9kaWN0aW9uYXJ5X3R5cGVfbWFzay5kYXJ0lrsvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBtYXNrczsKCi8vLyBBIFtEaWN0aW9uYXJ5VHlwZU1hc2tdIGlzIGEgW1R5cGVNYXNrXSBmb3IgYSBzcGVjaWZpYyBhbGxvY2F0aW9uCi8vLyBzaXRlIG9mIGEgbWFwIChjdXJyZW50bHkgb25seSBpbnRlcm5hbCBNYXAgY2xhc3MpIHRoYXQgaXMgdXNlZCBhcwovLy8gYSBkaWN0aW9uYXJ5LCBpLmUuIGEgbWFwcGluZyBmcm9tIGEgc2V0IG9mIHN0YXRpY2FsbHkga25vd24gc3RyaW5ncwovLy8gdG8gdmFsdWVzLiBUaGVzZSB0eXBlbWFza3Mgb25seSBjb21lIGludG8gZXhpc3RlbmNlIGFmdGVyIHRoZQovLy8gW1R5cGVHcmFwaEluZmVycmVyXSBoYXMgc3VjY2Vzc2Z1bGx5IGlkZW50aWZpZWQgc3VjaCBhIHVzYWdlLiBPdGhlcndpc2UsCi8vLyB0aGUgbW9yZSBnZW5lcmFsIFtNYXBUeXBlTWFza10gaXMgdXNlZC4KY2xhc3MgRGljdGlvbmFyeVR5cGVNYXNrIGV4dGVuZHMgTWFwVHlwZU1hc2sgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbRGljdGlvbmFyeVR5cGVNYXNrXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2RpY3Rpb25hcnktdHlwZS1tYXNrJzsKCiAgLy8gVGhlIHVuZGVybHlpbmcga2V5L3ZhbHVlIG1hcCBvZiB0aGlzIGRpY3Rpb25hcnkuCiAgZmluYWwgTWFwPFN0cmluZywgQWJzdHJhY3RWYWx1ZT4gX3R5cGVNYXA7CgogIERpY3Rpb25hcnlUeXBlTWFzaygKICAgICAgVHlwZU1hc2sgZm9yd2FyZFRvLAogICAgICBpci5Ob2RlIGFsbG9jYXRpb25Ob2RlLAogICAgICBNZW1iZXJFbnRpdHkgYWxsb2NhdGlvbkVsZW1lbnQsCiAgICAgIFR5cGVNYXNrIGtleVR5cGUsCiAgICAgIFR5cGVNYXNrIHZhbHVlVHlwZSwKICAgICAgdGhpcy5fdHlwZU1hcCkKICAgICAgOiBzdXBlcihmb3J3YXJkVG8sIGFsbG9jYXRpb25Ob2RlLCBhbGxvY2F0aW9uRWxlbWVudCwga2V5VHlwZSwgdmFsdWVUeXBlKTsKCiAgLy8vIERlc2VyaWFsaXplcyBhIFtEaWN0aW9uYXJ5VHlwZU1hc2tdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgRGljdGlvbmFyeVR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBUeXBlTWFzayBmb3J3YXJkVG8gPSBuZXcgVHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgY2xvc2VkV29ybGQpOwogICAgaXIuVHJlZU5vZGUgYWxsb2NhdGlvbk5vZGUgPSBzb3VyY2UucmVhZFRyZWVOb2RlT3JOdWxsKCk7CiAgICBNZW1iZXJFbnRpdHkgYWxsb2NhdGlvbkVsZW1lbnQgPSBzb3VyY2UucmVhZE1lbWJlck9yTnVsbCgpOwogICAgVHlwZU1hc2sga2V5VHlwZSA9IG5ldyBUeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlLCBjbG9zZWRXb3JsZCk7CiAgICBUeXBlTWFzayB2YWx1ZVR5cGUgPSBuZXcgVHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgY2xvc2VkV29ybGQpOwogICAgTWFwPFN0cmluZywgQWJzdHJhY3RWYWx1ZT4gdHlwZU1hcCA9IHNvdXJjZS5yZWFkU3RyaW5nTWFwKAogICAgICAgICgpID0+IG5ldyBUeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlLCBjbG9zZWRXb3JsZCkpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBEaWN0aW9uYXJ5VHlwZU1hc2soZm9yd2FyZFRvLCBhbGxvY2F0aW9uTm9kZSwgYWxsb2NhdGlvbkVsZW1lbnQsCiAgICAgICAga2V5VHlwZSwgdmFsdWVUeXBlLCB0eXBlTWFwKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0RpY3Rpb25hcnlUeXBlTWFza10gdG8gW3NpbmtdLgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKFR5cGVNYXNrS2luZC5kaWN0aW9uYXJ5KTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIGZvcndhcmRUby53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLndyaXRlVHJlZU5vZGVPck51bGwoYWxsb2NhdGlvbk5vZGUpOwogICAgc2luay53cml0ZU1lbWJlck9yTnVsbChhbGxvY2F0aW9uRWxlbWVudCk7CiAgICBrZXlUeXBlLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHZhbHVlVHlwZS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLndyaXRlU3RyaW5nTWFwKF90eXBlTWFwLCAoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgewogICAgICBUeXBlTWFzayB0eXBlTWFzayA9IHZhbHVlOwogICAgICB0eXBlTWFzay53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICB9KTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBudWxsYWJsZSgpIHsKICAgIHJldHVybiBpc051bGxhYmxlCiAgICAgICAgPyB0aGlzCiAgICAgICAgOiBuZXcgRGljdGlvbmFyeVR5cGVNYXNrKGZvcndhcmRUby5udWxsYWJsZSgpLCBhbGxvY2F0aW9uTm9kZSwKICAgICAgICAgICAgYWxsb2NhdGlvbkVsZW1lbnQsIGtleVR5cGUsIHZhbHVlVHlwZSwgX3R5cGVNYXApOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgbm9uTnVsbGFibGUoKSB7CiAgICByZXR1cm4gaXNOdWxsYWJsZQogICAgICAgID8gbmV3IERpY3Rpb25hcnlUeXBlTWFzayhmb3J3YXJkVG8ubm9uTnVsbGFibGUoKSwgYWxsb2NhdGlvbk5vZGUsCiAgICAgICAgICAgIGFsbG9jYXRpb25FbGVtZW50LCBrZXlUeXBlLCB2YWx1ZVR5cGUsIF90eXBlTWFwKQogICAgICAgIDogdGhpczsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRGljdGlvbmFyeSA9PiB0cnVlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRXhhY3QgPT4gdHJ1ZTsKCiAgYm9vbCBjb250YWluc0tleShTdHJpbmcga2V5KSA9PiBfdHlwZU1hcC5jb250YWluc0tleShrZXkpOwoKICBUeXBlTWFzayBnZXRWYWx1ZUZvcktleShTdHJpbmcga2V5KSA9PiBfdHlwZU1hcFtrZXldOwoKICBAb3ZlcnJpZGUKICBib29sIGVxdWFsc0Rpc3JlZ2FyZE51bGwob3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyEgRGljdGlvbmFyeVR5cGVNYXNrKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gYWxsb2NhdGlvbk5vZGUgPT0gb3RoZXIuYWxsb2NhdGlvbk5vZGUgJiYKICAgICAgICBrZXlUeXBlID09IG90aGVyLmtleVR5cGUgJiYKICAgICAgICB2YWx1ZVR5cGUgPT0gb3RoZXIudmFsdWVUeXBlICYmCiAgICAgICAgX3R5cGVNYXAua2V5cy5ldmVyeSgoaykgPT4gb3RoZXIuX3R5cGVNYXAuY29udGFpbnNLZXkoaykpICYmCiAgICAgICAgb3RoZXIuX3R5cGVNYXAua2V5cy5ldmVyeSgKICAgICAgICAgICAgKGspID0+IF90eXBlTWFwLmNvbnRhaW5zS2V5KGspICYmIF90eXBlTWFwW2tdID09IG90aGVyLl90eXBlTWFwW2tdKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGludGVyc2VjdGlvbihUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBUeXBlTWFzayBmb3J3YXJkSW50ZXJzZWN0aW9uID0gZm9yd2FyZFRvLmludGVyc2VjdGlvbihvdGhlciwgY2xvc2VkV29ybGQpOwogICAgaWYgKGZvcndhcmRJbnRlcnNlY3Rpb24uaXNFbXB0eU9yTnVsbCkgcmV0dXJuIGZvcndhcmRJbnRlcnNlY3Rpb247CiAgICByZXR1cm4gZm9yd2FyZEludGVyc2VjdGlvbi5pc051bGxhYmxlID8gbnVsbGFibGUoKSA6IG5vbk51bGxhYmxlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayB1bmlvbihkeW5hbWljIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmICh0aGlzID09IG90aGVyKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSBlbHNlIGlmIChlcXVhbHNEaXNyZWdhcmROdWxsKG90aGVyKSkgewogICAgICByZXR1cm4gb3RoZXIuaXNOdWxsYWJsZSA/IG90aGVyIDogdGhpczsKICAgIH0gZWxzZSBpZiAob3RoZXIuaXNFbXB0eU9yTnVsbCkgewogICAgICByZXR1cm4gb3RoZXIuaXNOdWxsYWJsZSA/IHRoaXMubnVsbGFibGUoKSA6IHRoaXM7CiAgICB9IGVsc2UgaWYgKG90aGVyLmlzRGljdGlvbmFyeSkgewogICAgICBUeXBlTWFzayBuZXdGb3J3YXJkVG8gPSBmb3J3YXJkVG8udW5pb24ob3RoZXIuZm9yd2FyZFRvLCBjbG9zZWRXb3JsZCk7CiAgICAgIFR5cGVNYXNrIG5ld0tleVR5cGUgPSBrZXlUeXBlLnVuaW9uKG90aGVyLmtleVR5cGUsIGNsb3NlZFdvcmxkKTsKICAgICAgVHlwZU1hc2sgbmV3VmFsdWVUeXBlID0gdmFsdWVUeXBlLnVuaW9uKG90aGVyLnZhbHVlVHlwZSwgY2xvc2VkV29ybGQpOwogICAgICBNYXA8U3RyaW5nLCBUeXBlTWFzaz4gbWFwcGluZ3MgPSA8U3RyaW5nLCBUeXBlTWFzaz57fTsKICAgICAgX3R5cGVNYXAuZm9yRWFjaCgoaywgZHluYW1pYyB2KSB7CiAgICAgICAgaWYgKCFvdGhlci5fdHlwZU1hcC5jb250YWluc0tleShrKSkgewogICAgICAgICAgbWFwcGluZ3Nba10gPSB2Lm51bGxhYmxlKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgb3RoZXIuX3R5cGVNYXAuZm9yRWFjaCgoaywgdikgewogICAgICAgIGlmIChfdHlwZU1hcC5jb250YWluc0tleShrKSkgewogICAgICAgICAgbWFwcGluZ3Nba10gPSB2LnVuaW9uKF90eXBlTWFwW2tdLCBjbG9zZWRXb3JsZCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG1hcHBpbmdzW2tdID0gdi5udWxsYWJsZSgpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHJldHVybiBuZXcgRGljdGlvbmFyeVR5cGVNYXNrKAogICAgICAgICAgbmV3Rm9yd2FyZFRvLCBudWxsLCBudWxsLCBuZXdLZXlUeXBlLCBuZXdWYWx1ZVR5cGUsIG1hcHBpbmdzKTsKICAgIH0gZWxzZSBpZiAob3RoZXIuaXNNYXAgJiYKICAgICAgICAob3RoZXIua2V5VHlwZSAhPSBudWxsKSAmJgogICAgICAgIChvdGhlci52YWx1ZVR5cGUgIT0gbnVsbCkpIHsKICAgICAgVHlwZU1hc2sgbmV3Rm9yd2FyZFRvID0gZm9yd2FyZFRvLnVuaW9uKG90aGVyLmZvcndhcmRUbywgY2xvc2VkV29ybGQpOwogICAgICBUeXBlTWFzayBuZXdLZXlUeXBlID0ga2V5VHlwZS51bmlvbihvdGhlci5rZXlUeXBlLCBjbG9zZWRXb3JsZCk7CiAgICAgIFR5cGVNYXNrIG5ld1ZhbHVlVHlwZSA9IHZhbHVlVHlwZS51bmlvbihvdGhlci52YWx1ZVR5cGUsIGNsb3NlZFdvcmxkKTsKICAgICAgcmV0dXJuIG5ldyBNYXBUeXBlTWFzaygKICAgICAgICAgIG5ld0ZvcndhcmRUbywgbnVsbCwgbnVsbCwgbmV3S2V5VHlwZSwgbmV3VmFsdWVUeXBlKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmb3J3YXJkVG8udW5pb24ob3RoZXIsIGNsb3NlZFdvcmxkKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpID0+IHN1cGVyID09IG90aGVyOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiBjb21wdXRlSGFzaENvZGUoYWxsb2NhdGlvbk5vZGUsIGlzTnVsbGFibGUsIF90eXBlTWFwLCBmb3J3YXJkVG8pOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdEaWN0aW9uYXJ5KCRmb3J3YXJkVG8sIGtleTogJGtleVR5cGUsICcKICAgICAgICAndmFsdWU6ICR2YWx1ZVR5cGUsIG1hcDogJF90eXBlTWFwKSc7CiAgfQp9CoChAE5OPAEPAUVGSEJNLC9MHTQBNi0BFhoeJhgaFVEBQDE1F08+QE1PP0UVUCYEATYMKC0VJS4vIyU6ISYIEwQBDBgWD0c+BAEMGxZKPRAEAQwhDBwBPQE4AQwkNDUkKEUjUQQBDERPR0gEAQw8GRMtLiY4JU1HTT0oLiYKCiYnOxEmCgolSR4jJU1HTR4/DTIGBAEMLQEMFU0EAQwWNC4EAgFBcGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvdHlwZW1hc2tzL2RpY3Rpb25hcnlfdHlwZV9tYXNrLmRhcnREc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvdHlwZW1hc2tzL2ZsYXRfdHlwZV9tYXNrLmRhcnTAAF6zLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgbWFza3M7CgovLy8gQSBmbGF0IHR5cGUgbWFzayBpcyBhIHR5cGUgbWFzayB0aGF0IGhhcyBiZWVuIGZsYXR0ZW5lZCB0byBjb250YWluIGEKLy8vIGJhc2UgdHlwZS4KY2xhc3MgRmxhdFR5cGVNYXNrIGltcGxlbWVudHMgVHlwZU1hc2sgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbRmxhdFR5cGVNYXNrXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2ZsYXQtdHlwZS1tYXNrJzsKCiAgc3RhdGljIGNvbnN0IGludCBFTVBUWSA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBFWEFDVCA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBTVUJDTEFTUyA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBTVUJUWVBFID0gMzsKCiAgZmluYWwgQ2xhc3NFbnRpdHkgYmFzZTsKICBmaW5hbCBpbnQgZmxhZ3M7CgogIEZsYXRUeXBlTWFzayhDbGFzc0VudGl0eSBiYXNlLCBpbnQga2luZCwgYm9vbCBpc051bGxhYmxlKQogICAgICA6IHRoaXMuaW50ZXJuYWwoYmFzZSwgKGtpbmQgPDwgMSkgfCAoaXNOdWxsYWJsZSA/IDEgOiAwKSk7CgogIEZsYXRUeXBlTWFzay5leGFjdChDbGFzc0VudGl0eSBiYXNlKSA6IHRoaXMuaW50ZXJuYWwoYmFzZSwgKEVYQUNUIDw8IDEpIHwgMSk7CiAgRmxhdFR5cGVNYXNrLnN1YmNsYXNzKENsYXNzRW50aXR5IGJhc2UpCiAgICAgIDogdGhpcy5pbnRlcm5hbChiYXNlLCAoU1VCQ0xBU1MgPDwgMSkgfCAxKTsKICBGbGF0VHlwZU1hc2suc3VidHlwZShDbGFzc0VudGl0eSBiYXNlKQogICAgICA6IHRoaXMuaW50ZXJuYWwoYmFzZSwgKFNVQlRZUEUgPDwgMSkgfCAxKTsKCiAgY29uc3QgRmxhdFR5cGVNYXNrLm5vbk51bGxFbXB0eSgpCiAgICAgIDogYmFzZSA9IG51bGwsCiAgICAgICAgZmxhZ3MgPSAwOwogIGNvbnN0IEZsYXRUeXBlTWFzay5lbXB0eSgpCiAgICAgIDogYmFzZSA9IG51bGwsCiAgICAgICAgZmxhZ3MgPSAxOwoKICBGbGF0VHlwZU1hc2subm9uTnVsbEV4YWN0KENsYXNzRW50aXR5IGJhc2UpIDogdGhpcy5pbnRlcm5hbChiYXNlLCBFWEFDVCA8PCAxKTsKICBGbGF0VHlwZU1hc2subm9uTnVsbFN1YmNsYXNzKENsYXNzRW50aXR5IGJhc2UpCiAgICAgIDogdGhpcy5pbnRlcm5hbChiYXNlLCBTVUJDTEFTUyA8PCAxKTsKICBGbGF0VHlwZU1hc2subm9uTnVsbFN1YnR5cGUoQ2xhc3NFbnRpdHkgYmFzZSkKICAgICAgOiB0aGlzLmludGVybmFsKGJhc2UsIFNVQlRZUEUgPDwgMSk7CgogIEZsYXRUeXBlTWFzay5pbnRlcm5hbCh0aGlzLmJhc2UsIHRoaXMuZmxhZ3MpOwoKICAvLy8gRW5zdXJlcyB0aGF0IHRoZSBnZW5lcmF0ZWQgbWFzayBpcyBub3JtYWxpemVkLCBpLmUuLCBhIGNhbGwgdG8KICAvLy8gW1R5cGVNYXNrLmFzc2VydElzTm9ybWFsaXplZF0gd2l0aCB0aGUgZmFjdG9yeSdzIHJlc3VsdCByZXR1cm5zIGB0cnVlYC4KICBmYWN0b3J5IEZsYXRUeXBlTWFzay5ub3JtYWxpemVkKAogICAgICBDbGFzc0VudGl0eSBiYXNlLCBpbnQgZmxhZ3MsIEpDbG9zZWRXb3JsZCB3b3JsZCkgewogICAgaWYgKChmbGFncyA+PiAxKSA9PSBFTVBUWSB8fCAoKGZsYWdzID4+IDEpID09IEVYQUNUKSkgewogICAgICByZXR1cm4gbmV3IEZsYXRUeXBlTWFzay5pbnRlcm5hbChiYXNlLCBmbGFncyk7CiAgICB9CiAgICBpZiAoKGZsYWdzID4+IDEpID09IFNVQlRZUEUpIHsKICAgICAgaWYgKCF3b3JsZC5jbGFzc0hpZXJhcmNoeS5oYXNBbnlTdHJpY3RTdWJ0eXBlKGJhc2UpIHx8CiAgICAgICAgICB3b3JsZC5jbGFzc0hpZXJhcmNoeS5oYXNPbmx5U3ViY2xhc3NlcyhiYXNlKSkgewogICAgICAgIGZsYWdzID0gKGZsYWdzICYgMHgxKSB8IChTVUJDTEFTUyA8PCAxKTsKICAgICAgfQogICAgfQogICAgaWYgKCgoZmxhZ3MgPj4gMSkgPT0gU1VCQ0xBU1MpICYmCiAgICAgICAgIXdvcmxkLmNsYXNzSGllcmFyY2h5Lmhhc0FueVN0cmljdFN1YmNsYXNzKGJhc2UpKSB7CiAgICAgIGZsYWdzID0gKGZsYWdzICYgMHgxKSB8IChFWEFDVCA8PCAxKTsKICAgIH0KICAgIENvbW1vbk1hc2tzIGNvbW1vbk1hc2tzID0gd29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKICAgIHJldHVybiBjb21tb25NYXNrcy5nZXRDYWNoZWRNYXNrKAogICAgICAgIGJhc2UsIGZsYWdzLCAoKSA9PiBuZXcgRmxhdFR5cGVNYXNrLmludGVybmFsKGJhc2UsIGZsYWdzKSk7CiAgfQoKICAvLy8gRGVzZXJpYWxpemVzIGEgW0ZsYXRUeXBlTWFza10gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBGbGF0VHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIENsYXNzRW50aXR5IGJhc2UgPSBzb3VyY2UucmVhZENsYXNzT3JOdWxsKCk7CiAgICBpbnQgZmxhZ3MgPSBzb3VyY2UucmVhZEludCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgQ29tbW9uTWFza3MgY29tbW9uTWFza3MgPSBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwogICAgcmV0dXJuIGNvbW1vbk1hc2tzLmdldENhY2hlZE1hc2soCiAgICAgICAgYmFzZSwgZmxhZ3MsICgpID0+IG5ldyBGbGF0VHlwZU1hc2suaW50ZXJuYWwoYmFzZSwgZmxhZ3MpKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0ZsYXRUeXBlTWFza10gdG8gW3NpbmtdLgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKFR5cGVNYXNrS2luZC5mbGF0KTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVDbGFzc09yTnVsbChiYXNlKTsKICAgIHNpbmsud3JpdGVJbnQoZmxhZ3MpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIENsYXNzUXVlcnkgZ2V0IF9jbGFzc1F1ZXJ5ID0+IGlzRXhhY3QKICAgICAgPyBDbGFzc1F1ZXJ5LkVYQUNUCiAgICAgIDogKGlzU3ViY2xhc3MgPyBDbGFzc1F1ZXJ5LlNVQkNMQVNTIDogQ2xhc3NRdWVyeS5TVUJUWVBFKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBpc0VtcHR5T3JOdWxsICYmICFpc051bGxhYmxlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTnVsbCA9PiBpc0VtcHR5T3JOdWxsICYmIGlzTnVsbGFibGU7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFbXB0eU9yTnVsbCA9PiAoZmxhZ3MgPj4gMSkgPT0gRU1QVFk7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFeGFjdCA9PiAoZmxhZ3MgPj4gMSkgPT0gRVhBQ1Q7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOdWxsYWJsZSA9PiAoZmxhZ3MgJiAxKSAhPSAwOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1VuaW9uID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQ29udGFpbmVyID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU2V0ID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTWFwID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRGljdGlvbmFyeSA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0ZvcndhcmRpbmcgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNWYWx1ZSA9PiBmYWxzZTsKCiAgLy8gVE9ETyhrYXNwZXJsKTogR2V0IHJpZCBvZiB0aGVzZS4gVGhleSBzaG91bGQgbm90IGJlIGEgdmlzaWJsZQogIC8vIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIGJlY2F1c2UgdGhleSBtYWtlIGl0IGhhcmQgdG8gYWRkCiAgLy8gcHJvcGVyIHVuaW9uIHR5cGVzIGlmIHdlIGV2ZXIgd2FudCB0by4KICBib29sIGdldCBpc1N1YmNsYXNzID0+IChmbGFncyA+PiAxKSA9PSBTVUJDTEFTUzsKICBib29sIGdldCBpc1N1YnR5cGUgPT4gKGZsYWdzID4+IDEpID09IFNVQlRZUEU7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIG51bGxhYmxlKCkgewogICAgcmV0dXJuIGlzTnVsbGFibGUgPyB0aGlzIDogbmV3IEZsYXRUeXBlTWFzay5pbnRlcm5hbChiYXNlLCBmbGFncyB8IDEpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgbm9uTnVsbGFibGUoKSB7CiAgICByZXR1cm4gaXNOdWxsYWJsZSA/IG5ldyBGbGF0VHlwZU1hc2suaW50ZXJuYWwoYmFzZSwgZmxhZ3MgJiB+MSkgOiB0aGlzOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWlucyhDbGFzc0VudGl0eSBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBpZiAoaXNFbXB0eU9yTnVsbCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbChiYXNlLCBvdGhlcikpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgaWYgKGlzRXhhY3QpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSBlbHNlIGlmIChpc1N1YmNsYXNzKSB7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc1N1YmNsYXNzT2Yob3RoZXIsIGJhc2UpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KGlzU3VidHlwZSk7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc1N1YnR5cGVPZihvdGhlciwgYmFzZSk7CiAgICB9CiAgfQoKICBib29sIGlzU2luZ2xlSW1wbGVtZW50YXRpb25PZihDbGFzc0VudGl0eSBjbHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgLy8gU3BlY2lhbCBjYXNlIGJhc2ljIHR5cGVzIHNvIHRoYXQsIGZvciBleGFtcGxlLCBKU1N0cmluZyBpcyB0aGUKICAgIC8vIHNpbmdsZSBpbXBsZW1lbnRhdGlvbiBvZiBTdHJpbmcuCiAgICAvLyBUaGUgZ2VuZXJhbCBvcHRpbWl6YXRpb24gaXMgdG8gcmVhbGl6ZSB0aGVyZSBpcyBvbmx5IG9uZSBjbGFzcyB0aGF0CiAgICAvLyBpbXBsZW1lbnRzIFtiYXNlXSBhbmQgW2Jhc2VdIGlzIG5vdCBpbnN0YW50aWF0ZWQuIFdlIGhvd2V2ZXIgZG8KICAgIC8vIG5vdCB0cmFjayBjb3JyZWN0bHkgdGhlIGxpc3Qgb2YgdHJ1bHkgaW5zdGFudGlhdGVkIGNsYXNzZXMuCiAgICBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cyA9IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzOwogICAgaWYgKGNvbnRhaW5zT25seVN0cmluZyhjbG9zZWRXb3JsZCkpIHsKICAgICAgcmV0dXJuIGNscyA9PSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5zdHJpbmdDbGFzcyB8fAogICAgICAgICAgY2xzID09IGNvbW1vbkVsZW1lbnRzLmpzU3RyaW5nQ2xhc3M7CiAgICB9CiAgICBpZiAoY29udGFpbnNPbmx5Qm9vbChjbG9zZWRXb3JsZCkpIHsKICAgICAgcmV0dXJuIGNscyA9PSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5ib29sQ2xhc3MgfHwKICAgICAgICAgIGNscyA9PSBjb21tb25FbGVtZW50cy5qc0Jvb2xDbGFzczsKICAgIH0KICAgIGlmIChjb250YWluc09ubHlJbnQoY2xvc2VkV29ybGQpKSB7CiAgICAgIHJldHVybiBjbHMgPT0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuaW50Q2xhc3MgfHwKICAgICAgICAgIGNscyA9PSBjb21tb25FbGVtZW50cy5qc0ludENsYXNzIHx8CiAgICAgICAgICBjbHMgPT0gY29tbW9uRWxlbWVudHMuanNQb3NpdGl2ZUludENsYXNzIHx8CiAgICAgICAgICBjbHMgPT0gY29tbW9uRWxlbWVudHMuanNVSW50MzJDbGFzcyB8fAogICAgICAgICAgY2xzID09IGNvbW1vbkVsZW1lbnRzLmpzVUludDMxQ2xhc3M7CiAgICB9CiAgICBpZiAoY29udGFpbnNPbmx5RG91YmxlKGNsb3NlZFdvcmxkKSkgewogICAgICByZXR1cm4gY2xzID09IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmRvdWJsZUNsYXNzIHx8CiAgICAgICAgICBjbHMgPT0gY29tbW9uRWxlbWVudHMuanNEb3VibGVDbGFzczsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbk1hc2soVHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgaWYgKGlzRW1wdHlPck51bGwpIHJldHVybiBpc051bGxhYmxlID8gb3RoZXIuaXNOdWxsYWJsZSA6IHRydWU7CiAgICAvLyBUaGUgZW1wdHkgdHlwZSBjb250YWlucyBubyBjbGFzc2VzLgogICAgaWYgKG90aGVyLmlzRW1wdHlPck51bGwpIHJldHVybiBmYWxzZTsKICAgIC8vIFF1aWNrIGNoZWNrIHdoZXRoZXIgdG8gaGFuZGxlIG51bGwuCiAgICBpZiAoaXNOdWxsYWJsZSAmJiAhb3RoZXIuaXNOdWxsYWJsZSkgcmV0dXJuIGZhbHNlOwogICAgb3RoZXIgPSBUeXBlTWFzay5ub25Gb3J3YXJkaW5nTWFzayhvdGhlcik7CiAgICAvLyBJZiBvdGhlciBpcyB1bmlvbiwgZGVsZWdhdGUgdG8gVW5pb25UeXBlTWFzay5jb250YWluc01hc2suCiAgICBpZiAob3RoZXIgaXMhIEZsYXRUeXBlTWFzaykgcmV0dXJuIG90aGVyLmNvbnRhaW5zTWFzayh0aGlzLCBjbG9zZWRXb3JsZCk7CiAgICAvLyBUaGUgb3RoZXIgbXVzdCBiZSBmbGF0LCBzbyBjb21wYXJlIGJhc2UgYW5kIGZsYWdzLgogICAgRmxhdFR5cGVNYXNrIGZsYXRPdGhlciA9IG90aGVyOwogICAgQ2xhc3NFbnRpdHkgb3RoZXJCYXNlID0gZmxhdE90aGVyLmJhc2U7CiAgICAvLyBJZiBvdGhlciBpcyBleGFjdCwgaXQgb25seSBjb250YWlucyBpdHMgYmFzZS4KICAgIC8vIFRPRE8oaGVyaHV0KTogR2V0IHJpZCBvZiBpc1NpbmdsZUltcGxlbWVudGF0aW9uT2YuCiAgICBpZiAoZmxhdE90aGVyLmlzRXhhY3QpIHsKICAgICAgcmV0dXJuIChpc0V4YWN0ICYmIGJhc2UgPT0gb3RoZXJCYXNlKSB8fAogICAgICAgICAgaXNTaW5nbGVJbXBsZW1lbnRhdGlvbk9mKG90aGVyQmFzZSwgY2xvc2VkV29ybGQpOwogICAgfQogICAgLy8gSWYgb3RoZXIgaXMgc3ViY2xhc3MsIHRoaXMgaGFzIHRvIGJlIHN1YmNsYXNzLCBhcyB3ZWxsLiBVbmxlc3MKICAgIC8vIGZsYXRPdGhlci5iYXNlIGNvdmVycyBhbGwgc3VidHlwZXMgb2YgdGhpcy4gQ3VycmVudGx5LCB3ZSBvbmx5CiAgICAvLyBjb25zaWRlciBvYmplY3QgdG8gYmVoYXZlIHRoYXQgd2F5LgogICAgLy8gVE9ETyhoZXJodXQpOiBBZGQgY2hlY2sgd2hldGhlciBmbGF0T3RoZXIuYmFzZSBpcyBzdXBlcmNsYXNzIG9mCiAgICAvLyAgICAgICAgICAgICAgIGFsbCBzdWJjbGFzc2VzIG9mIHRoaXMuYmFzZS4KICAgIGlmIChmbGF0T3RoZXIuaXNTdWJjbGFzcykgewogICAgICBpZiAoaXNTdWJ0eXBlKQogICAgICAgIHJldHVybiAob3RoZXJCYXNlID09IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzKTsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzU3ViY2xhc3NPZihiYXNlLCBvdGhlckJhc2UpOwogICAgfQogICAgYXNzZXJ0KGZsYXRPdGhlci5pc1N1YnR5cGUpOwogICAgLy8gQ2hlY2sgd2hldGhlciB0aGlzIFR5cGVNYXNrIHNhdGlzZmllcyBvdGhlckJhc2UncyBpbnRlcmZhY2UuCiAgICByZXR1cm4gc2F0aXNmaWVzKG90aGVyQmFzZSwgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc01hc2soVHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIG90aGVyLmlzSW5NYXNrKHRoaXMsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNPbmx5SW50KEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMgPSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50czsKICAgIHJldHVybiBiYXNlID09IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmludENsYXNzIHx8CiAgICAgICAgYmFzZSA9PSBjb21tb25FbGVtZW50cy5qc0ludENsYXNzIHx8CiAgICAgICAgYmFzZSA9PSBjb21tb25FbGVtZW50cy5qc1Bvc2l0aXZlSW50Q2xhc3MgfHwKICAgICAgICBiYXNlID09IGNvbW1vbkVsZW1lbnRzLmpzVUludDMxQ2xhc3MgfHwKICAgICAgICBiYXNlID09IGNvbW1vbkVsZW1lbnRzLmpzVUludDMyQ2xhc3M7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zT25seURvdWJsZShKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBiYXNlID09IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmRvdWJsZUNsYXNzIHx8CiAgICAgICAgYmFzZSA9PSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5qc0RvdWJsZUNsYXNzOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc09ubHlOdW0oSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gY29udGFpbnNPbmx5SW50KGNsb3NlZFdvcmxkKSB8fAogICAgICAgIGNvbnRhaW5zT25seURvdWJsZShjbG9zZWRXb3JsZCkgfHwKICAgICAgICBiYXNlID09IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLm51bUNsYXNzIHx8CiAgICAgICAgYmFzZSA9PSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5qc051bWJlckNsYXNzOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc09ubHlCb29sKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGJhc2UgPT0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuYm9vbENsYXNzIHx8CiAgICAgICAgYmFzZSA9PSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5qc0Jvb2xDbGFzczsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNPbmx5U3RyaW5nKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGJhc2UgPT0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuc3RyaW5nQ2xhc3MgfHwKICAgICAgICBiYXNlID09IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmpzU3RyaW5nQ2xhc3M7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zT25seShDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBiYXNlID09IGNsczsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgc2F0aXNmaWVzKENsYXNzRW50aXR5IGNscywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBpZiAoaXNFbXB0eU9yTnVsbCkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzU3VidHlwZU9mKGJhc2UsIGNscykpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgc2luZ2xlQ2xhc3MoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBpZiAoaXNFbXB0eU9yTnVsbCkgcmV0dXJuIG51bGw7CiAgICBpZiAoaXNOdWxsYWJsZSkgcmV0dXJuIG51bGw7IC8vIEl0IGlzIE51bGwgYW5kIHNvbWUgb3RoZXIgY2xhc3MuCiAgICBpZiAoaXNFeGFjdCkgewogICAgICByZXR1cm4gYmFzZTsKICAgIH0gZWxzZSBpZiAoaXNTdWJjbGFzcykgewogICAgICByZXR1cm4gY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaGFzQW55U3RyaWN0U3ViY2xhc3MoYmFzZSkKICAgICAgICAgID8gbnVsbAogICAgICAgICAgOiBiYXNlOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KGlzU3VidHlwZSk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc0FsbChKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmIChpc0VtcHR5T3JOdWxsIHx8IGlzRXhhY3QpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBpZGVudGljYWwoYmFzZSwgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgdW5pb24oVHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgYXNzZXJ0KG90aGVyICE9IG51bGwpOwogICAgYXNzZXJ0KFR5cGVNYXNrLmFzc2VydElzTm9ybWFsaXplZCh0aGlzLCBjbG9zZWRXb3JsZCkpOwogICAgYXNzZXJ0KFR5cGVNYXNrLmFzc2VydElzTm9ybWFsaXplZChvdGhlciwgY2xvc2VkV29ybGQpKTsKICAgIGlmIChvdGhlciBpcyEgRmxhdFR5cGVNYXNrKSByZXR1cm4gb3RoZXIudW5pb24odGhpcywgY2xvc2VkV29ybGQpOwogICAgRmxhdFR5cGVNYXNrIGZsYXRPdGhlciA9IG90aGVyOwogICAgaWYgKGlzRW1wdHlPck51bGwpIHsKICAgICAgcmV0dXJuIGlzTnVsbGFibGUgPyBmbGF0T3RoZXIubnVsbGFibGUoKSA6IGZsYXRPdGhlcjsKICAgIH0gZWxzZSBpZiAoZmxhdE90aGVyLmlzRW1wdHlPck51bGwpIHsKICAgICAgcmV0dXJuIGZsYXRPdGhlci5pc051bGxhYmxlID8gbnVsbGFibGUoKSA6IHRoaXM7CiAgICB9IGVsc2UgaWYgKGJhc2UgPT0gZmxhdE90aGVyLmJhc2UpIHsKICAgICAgcmV0dXJuIHVuaW9uU2FtZShmbGF0T3RoZXIsIGNsb3NlZFdvcmxkKTsKICAgIH0gZWxzZSBpZiAoY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNTdWJjbGFzc09mKGZsYXRPdGhlci5iYXNlLCBiYXNlKSkgewogICAgICByZXR1cm4gdW5pb25TdHJpY3RTdWJjbGFzcyhmbGF0T3RoZXIsIGNsb3NlZFdvcmxkKTsKICAgIH0gZWxzZSBpZiAoY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNTdWJjbGFzc09mKGJhc2UsIGZsYXRPdGhlci5iYXNlKSkgewogICAgICByZXR1cm4gZmxhdE90aGVyLnVuaW9uU3RyaWN0U3ViY2xhc3ModGhpcywgY2xvc2VkV29ybGQpOwogICAgfSBlbHNlIGlmIChjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc1N1YnR5cGVPZihmbGF0T3RoZXIuYmFzZSwgYmFzZSkpIHsKICAgICAgcmV0dXJuIHVuaW9uU3RyaWN0U3VidHlwZShmbGF0T3RoZXIsIGNsb3NlZFdvcmxkKTsKICAgIH0gZWxzZSBpZiAoY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNTdWJ0eXBlT2YoYmFzZSwgZmxhdE90aGVyLmJhc2UpKSB7CiAgICAgIHJldHVybiBmbGF0T3RoZXIudW5pb25TdHJpY3RTdWJ0eXBlKHRoaXMsIGNsb3NlZFdvcmxkKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgVW5pb25UeXBlTWFzay5faW50ZXJuYWwoPEZsYXRUeXBlTWFzaz5bdGhpcywgZmxhdE90aGVyXSk7CiAgICB9CiAgfQoKICBUeXBlTWFzayB1bmlvblNhbWUoRmxhdFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGFzc2VydChiYXNlID09IG90aGVyLmJhc2UpOwogICAgYXNzZXJ0KFR5cGVNYXNrLmFzc2VydElzTm9ybWFsaXplZCh0aGlzLCBjbG9zZWRXb3JsZCkpOwogICAgYXNzZXJ0KFR5cGVNYXNrLmFzc2VydElzTm9ybWFsaXplZChvdGhlciwgY2xvc2VkV29ybGQpKTsKICAgIC8vIFRoZSB0d28gbWFza3Mgc2hhcmUgdGhlIGJhc2UgdHlwZSwgc28gd2UgbXVzdCBjaG9zZSB0aGUgbGVhc3QKICAgIC8vIGNvbnN0cmFpbmluZyBraW5kICh0aGUgaGlnaGVzdCkgb2YgdGhlIHR3by4gSWYgZWl0aGVyIG9uZSBvZgogICAgLy8gdGhlIG1hc2tzIGFyZSBudWxsYWJsZSB0aGUgcmVzdWx0IHNob3VsZCBiZSBudWxsYWJsZSB0b28uCiAgICAvLyBBcyBib3RoIG1hc2tzIGFyZSBub3JtYWxpemVkLCB0aGUgcmVzdWx0IHdpbGwgYmUsIHRvby4KICAgIGludCBjb21iaW5lZCA9IChmbGFncyA+IG90aGVyLmZsYWdzKQogICAgICAgID8gZmxhZ3MgfCAob3RoZXIuZmxhZ3MgJiAxKQogICAgICAgIDogb3RoZXIuZmxhZ3MgfCAoZmxhZ3MgJiAxKTsKICAgIGlmIChmbGFncyA9PSBjb21iaW5lZCkgewogICAgICByZXR1cm4gdGhpczsKICAgIH0gZWxzZSBpZiAob3RoZXIuZmxhZ3MgPT0gY29tYmluZWQpIHsKICAgICAgcmV0dXJuIG90aGVyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBGbGF0VHlwZU1hc2subm9ybWFsaXplZChiYXNlLCBjb21iaW5lZCwgY2xvc2VkV29ybGQpOwogICAgfQogIH0KCiAgVHlwZU1hc2sgdW5pb25TdHJpY3RTdWJjbGFzcyhGbGF0VHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgYXNzZXJ0KGJhc2UgIT0gb3RoZXIuYmFzZSk7CiAgICBhc3NlcnQoY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNTdWJjbGFzc09mKG90aGVyLmJhc2UsIGJhc2UpKTsKICAgIGFzc2VydChUeXBlTWFzay5hc3NlcnRJc05vcm1hbGl6ZWQodGhpcywgY2xvc2VkV29ybGQpKTsKICAgIGFzc2VydChUeXBlTWFzay5hc3NlcnRJc05vcm1hbGl6ZWQob3RoZXIsIGNsb3NlZFdvcmxkKSk7CiAgICBpbnQgY29tYmluZWQ7CiAgICBpZiAoKGlzRXhhY3QgJiYgb3RoZXIuaXNFeGFjdCkgfHwKICAgICAgICBiYXNlID09IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzKSB7CiAgICAgIC8vIFNpbmNlIHRoZSBvdGhlciBtYXNrIGlzIGEgc3ViY2xhc3Mgb2YgdGhpcyBtYXNrLCB3ZSBuZWVkIHRoZQogICAgICAvLyByZXN1bHRpbmcgdW5pb24gdG8gYmUgYSBzdWJjbGFzcyB0b28uIElmIGVpdGhlciBvbmUgb2YgdGhlCiAgICAgIC8vIG1hc2tzIGFyZSBudWxsYWJsZSB0aGUgcmVzdWx0IHNob3VsZCBiZSBudWxsYWJsZSB0b28uCiAgICAgIGNvbWJpbmVkID0gKFNVQkNMQVNTIDw8IDEpIHwgKChmbGFncyB8IG90aGVyLmZsYWdzKSAmIDEpOwogICAgfSBlbHNlIHsKICAgICAgLy8gQm90aCBtYXNrcyBhcmUgYXQgbGVhc3Qgc3ViY2xhc3MgbWFza3MsIHNvIHdlIHBpY2sgdGhlIGxlYXN0CiAgICAgIC8vIGNvbnN0cmFpbmluZyBraW5kICh0aGUgaGlnaGVzdCkgb2YgdGhlIHR3by4gSWYgZWl0aGVyIG9uZSBvZgogICAgICAvLyB0aGUgbWFza3MgYXJlIG51bGxhYmxlIHRoZSByZXN1bHQgc2hvdWxkIGJlIG51bGxhYmxlIHRvby4KICAgICAgY29tYmluZWQgPSAoZmxhZ3MgPiBvdGhlci5mbGFncykKICAgICAgICAgID8gZmxhZ3MgfCAob3RoZXIuZmxhZ3MgJiAxKQogICAgICAgICAgOiBvdGhlci5mbGFncyB8IChmbGFncyAmIDEpOwogICAgfQogICAgLy8gSWYgd2Ugd2Vha2VuIHRoZSBjb25zdHJhaW50IG9uIHRoaXMgdHlwZSwgd2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdAogICAgLy8gdGhlIHJlc3VsdCBpcyBub3JtYWxpemVkLgogICAgcmV0dXJuIChmbGFncyAhPSBjb21iaW5lZCkKICAgICAgICA/IG5ldyBGbGF0VHlwZU1hc2subm9ybWFsaXplZChiYXNlLCBjb21iaW5lZCwgY2xvc2VkV29ybGQpCiAgICAgICAgOiB0aGlzOwogIH0KCiAgVHlwZU1hc2sgdW5pb25TdHJpY3RTdWJ0eXBlKEZsYXRUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBhc3NlcnQoYmFzZSAhPSBvdGhlci5iYXNlKTsKICAgIGFzc2VydCghY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNTdWJjbGFzc09mKG90aGVyLmJhc2UsIGJhc2UpKTsKICAgIGFzc2VydChjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc1N1YnR5cGVPZihvdGhlci5iYXNlLCBiYXNlKSk7CiAgICBhc3NlcnQoVHlwZU1hc2suYXNzZXJ0SXNOb3JtYWxpemVkKHRoaXMsIGNsb3NlZFdvcmxkKSk7CiAgICBhc3NlcnQoVHlwZU1hc2suYXNzZXJ0SXNOb3JtYWxpemVkKG90aGVyLCBjbG9zZWRXb3JsZCkpOwogICAgLy8gU2luY2UgdGhlIG90aGVyIG1hc2sgaXMgYSBzdWJ0eXBlIG9mIHRoaXMgbWFzaywgd2UgbmVlZCB0aGUKICAgIC8vIHJlc3VsdGluZyB1bmlvbiB0byBiZSBhIHN1YnR5cGUgdG9vLiBJZiBlaXRoZXIgb25lIG9mIHRoZSBtYXNrcwogICAgLy8gYXJlIG51bGxhYmxlIHRoZSByZXN1bHQgc2hvdWxkIGJlIG51bGxhYmxlIHRvby4KICAgIGludCBjb21iaW5lZCA9IChTVUJUWVBFIDw8IDEpIHwgKChmbGFncyB8IG90aGVyLmZsYWdzKSAmIDEpOwogICAgLy8gV2Uga25vdyB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgc3VidHlwZSwgW290aGVyLmJhc2VdLCBzbyBubyBuZWVkCiAgICAvLyB0byBub3JtYWxpemUuCiAgICByZXR1cm4gKGZsYWdzICE9IGNvbWJpbmVkKQogICAgICAgID8gbmV3IEZsYXRUeXBlTWFzay5ub3JtYWxpemVkKGJhc2UsIGNvbWJpbmVkLCBjbG9zZWRXb3JsZCkKICAgICAgICA6IHRoaXM7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBpbnRlcnNlY3Rpb24oVHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgYXNzZXJ0KG90aGVyICE9IG51bGwpOwogICAgaWYgKG90aGVyIGlzISBGbGF0VHlwZU1hc2spIHJldHVybiBvdGhlci5pbnRlcnNlY3Rpb24odGhpcywgY2xvc2VkV29ybGQpOwogICAgYXNzZXJ0KFR5cGVNYXNrLmFzc2VydElzTm9ybWFsaXplZCh0aGlzLCBjbG9zZWRXb3JsZCkpOwogICAgYXNzZXJ0KFR5cGVNYXNrLmFzc2VydElzTm9ybWFsaXplZChvdGhlciwgY2xvc2VkV29ybGQpKTsKICAgIEZsYXRUeXBlTWFzayBmbGF0T3RoZXIgPSBvdGhlcjsKCiAgICBDbGFzc0VudGl0eSBvdGhlckJhc2UgPSBmbGF0T3RoZXIuYmFzZTsKCiAgICBib29sIGluY2x1ZGVOdWxsID0gaXNOdWxsYWJsZSAmJiBmbGF0T3RoZXIuaXNOdWxsYWJsZTsKCiAgICBpZiAoaXNFbXB0eU9yTnVsbCkgewogICAgICByZXR1cm4gaW5jbHVkZU51bGwgPyB0aGlzIDogbm9uTnVsbGFibGUoKTsKICAgIH0gZWxzZSBpZiAoZmxhdE90aGVyLmlzRW1wdHlPck51bGwpIHsKICAgICAgcmV0dXJuIGluY2x1ZGVOdWxsID8gb3RoZXIgOiBvdGhlci5ub25OdWxsYWJsZSgpOwogICAgfQoKICAgIFN1YmNsYXNzUmVzdWx0IHJlc3VsdCA9IGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5CiAgICAgICAgLmNvbW1vblN1YmNsYXNzZXMoYmFzZSwgX2NsYXNzUXVlcnksIG90aGVyQmFzZSwgZmxhdE90aGVyLl9jbGFzc1F1ZXJ5KTsKCiAgICBzd2l0Y2ggKHJlc3VsdC5raW5kKSB7CiAgICAgIGNhc2UgU3ViY2xhc3NSZXN1bHRLaW5kLkVNUFRZOgogICAgICAgIHJldHVybiBpbmNsdWRlTnVsbAogICAgICAgICAgICA/IGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4ubnVsbFR5cGUKICAgICAgICAgICAgOiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmVtcHR5VHlwZTsKICAgICAgY2FzZSBTdWJjbGFzc1Jlc3VsdEtpbmQuRVhBQ1QxOgogICAgICAgIGFzc2VydChpc0V4YWN0KTsKICAgICAgICByZXR1cm4gaW5jbHVkZU51bGwgPyB0aGlzIDogbm9uTnVsbGFibGUoKTsKICAgICAgY2FzZSBTdWJjbGFzc1Jlc3VsdEtpbmQuRVhBQ1QyOgogICAgICAgIGFzc2VydChvdGhlci5pc0V4YWN0KTsKICAgICAgICByZXR1cm4gaW5jbHVkZU51bGwgPyBvdGhlciA6IG90aGVyLm5vbk51bGxhYmxlKCk7CiAgICAgIGNhc2UgU3ViY2xhc3NSZXN1bHRLaW5kLlNVQkNMQVNTMToKICAgICAgICBhc3NlcnQoaXNTdWJjbGFzcyk7CiAgICAgICAgcmV0dXJuIGluY2x1ZGVOdWxsID8gdGhpcyA6IG5vbk51bGxhYmxlKCk7CiAgICAgIGNhc2UgU3ViY2xhc3NSZXN1bHRLaW5kLlNVQkNMQVNTMjoKICAgICAgICBhc3NlcnQoZmxhdE90aGVyLmlzU3ViY2xhc3MpOwogICAgICAgIHJldHVybiBpbmNsdWRlTnVsbCA/IG90aGVyIDogb3RoZXIubm9uTnVsbGFibGUoKTsKICAgICAgY2FzZSBTdWJjbGFzc1Jlc3VsdEtpbmQuU1VCVFlQRTE6CiAgICAgICAgYXNzZXJ0KGlzU3VidHlwZSk7CiAgICAgICAgcmV0dXJuIGluY2x1ZGVOdWxsID8gdGhpcyA6IG5vbk51bGxhYmxlKCk7CiAgICAgIGNhc2UgU3ViY2xhc3NSZXN1bHRLaW5kLlNVQlRZUEUyOgogICAgICAgIGFzc2VydChmbGF0T3RoZXIuaXNTdWJ0eXBlKTsKICAgICAgICByZXR1cm4gaW5jbHVkZU51bGwgPyBvdGhlciA6IG90aGVyLm5vbk51bGxhYmxlKCk7CiAgICAgIGNhc2UgU3ViY2xhc3NSZXN1bHRLaW5kLlNFVDoKICAgICAgZGVmYXVsdDoKICAgICAgICBpZiAocmVzdWx0LmNsYXNzZXMuaXNFbXB0eSkgewogICAgICAgICAgcmV0dXJuIGluY2x1ZGVOdWxsCiAgICAgICAgICAgICAgPyBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLm51bGxUeXBlCiAgICAgICAgICAgICAgOiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmVtcHR5VHlwZTsKICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5jbGFzc2VzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICBDbGFzc0VudGl0eSBjbHMgPSByZXN1bHQuY2xhc3Nlcy5maXJzdDsKICAgICAgICAgIHJldHVybiBpbmNsdWRlTnVsbAogICAgICAgICAgICAgID8gbmV3IFR5cGVNYXNrLnN1YmNsYXNzKGNscywgY2xvc2VkV29ybGQpCiAgICAgICAgICAgICAgOiBuZXcgVHlwZU1hc2subm9uTnVsbFN1YmNsYXNzKGNscywgY2xvc2VkV29ybGQpOwogICAgICAgIH0KCiAgICAgICAgTGlzdDxGbGF0VHlwZU1hc2s+IG1hc2tzID0gPEZsYXRUeXBlTWFzaz5bXTsKICAgICAgICBpZiAoaW5jbHVkZU51bGwpIHsKICAgICAgICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xzIGluIHJlc3VsdC5jbGFzc2VzKSB7CiAgICAgICAgICAgIG1hc2tzLmFkZChuZXcgVHlwZU1hc2suc3ViY2xhc3MoY2xzLCBjbG9zZWRXb3JsZCkpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmb3IgKENsYXNzRW50aXR5IGNscyBpbiByZXN1bHQuY2xhc3NlcykgewogICAgICAgICAgICBtYXNrcy5hZGQobmV3IFR5cGVNYXNrLm5vbk51bGxTdWJjbGFzcyhjbHMsIGNsb3NlZFdvcmxkKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChtYXNrcy5sZW5ndGggPiBVbmlvblR5cGVNYXNrLk1BWF9VTklPTl9MRU5HVEgpIHsKICAgICAgICAgIHJldHVybiBVbmlvblR5cGVNYXNrLmZsYXR0ZW4obWFza3MsIGNsb3NlZFdvcmxkKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBVbmlvblR5cGVNYXNrLl9pbnRlcm5hbChtYXNrcyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRGlzam9pbnQoVHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgaWYgKG90aGVyIGlzISBGbGF0VHlwZU1hc2spIHJldHVybiBvdGhlci5pc0Rpc2pvaW50KHRoaXMsIGNsb3NlZFdvcmxkKTsKICAgIEZsYXRUeXBlTWFzayBmbGF0T3RoZXIgPSBvdGhlcjsKCiAgICBpZiAoaXNOdWxsYWJsZSAmJiBmbGF0T3RoZXIuaXNOdWxsYWJsZSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGlzRW1wdHlPck51bGwgfHwgZmxhdE90aGVyLmlzRW1wdHlPck51bGwpIHJldHVybiB0cnVlOwogICAgaWYgKGJhc2UgPT0gZmxhdE90aGVyLmJhc2UpIHJldHVybiBmYWxzZTsKICAgIGlmIChpc0V4YWN0ICYmIGZsYXRPdGhlci5pc0V4YWN0KSByZXR1cm4gdHJ1ZTsKCiAgICBpZiAoaXNFeGFjdCkgcmV0dXJuICFmbGF0T3RoZXIuY29udGFpbnMoYmFzZSwgY2xvc2VkV29ybGQpOwogICAgaWYgKGZsYXRPdGhlci5pc0V4YWN0KSByZXR1cm4gIWNvbnRhaW5zKGZsYXRPdGhlci5iYXNlLCBjbG9zZWRXb3JsZCk7CgogICAgLy8gTm9ybWFsaXphdGlvbiBndWFyYW50ZWVzIHRoYXQgaXNFeGFjdCA9PT0gIWlzU3ViY2xhc3MgJiYgIWlzU3VidHlwZS4KICAgIC8vIEJvdGggYXJlIHN1YmNsYXNzIG9yIHN1YnR5cGUgbWFza3MsIHNvIGlmIHRoZXJlIGlzIGEgc3ViY2xhc3MKICAgIC8vIHJlbGF0aW9uc2hpcCwgdGhleSBhcmUgbm90IGRpc2pvaW50LgogICAgaWYgKGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzU3ViY2xhc3NPZihmbGF0T3RoZXIuYmFzZSwgYmFzZSkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzU3ViY2xhc3NPZihiYXNlLCBmbGF0T3RoZXIuYmFzZSkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8vIFR3byBkaWZmZXJlbnQgYmFzZSBjbGFzc2VzIGhhdmUgbm8gY29tbW9uIHN1YmNsYXNzIHVubGVzcyBvbmUgaXMgYQogICAgLy8gc3ViY2xhc3Mgb2YgdGhlIG90aGVyIChjaGVja2VkIGFib3ZlKS4KICAgIGlmIChpc1N1YmNsYXNzICYmIGZsYXRPdGhlci5pc1N1YmNsYXNzKSByZXR1cm4gdHJ1ZTsKCiAgICByZXR1cm4gX2lzRGlzam9pbnRIZWxwZXIodGhpcywgZmxhdE90aGVyLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBzdGF0aWMgYm9vbCBfaXNEaXNqb2ludEhlbHBlcigKICAgICAgRmxhdFR5cGVNYXNrIGEsIEZsYXRUeXBlTWFzayBiLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmICghYS5pc1N1YmNsYXNzICYmIGIuaXNTdWJjbGFzcykgewogICAgICByZXR1cm4gX2lzRGlzam9pbnRIZWxwZXIoYiwgYSwgY2xvc2VkV29ybGQpOwogICAgfQogICAgYXNzZXJ0KGEuaXNTdWJjbGFzcyB8fCBhLmlzU3VidHlwZSk7CiAgICBhc3NlcnQoYi5pc1N1YnR5cGUpOwogICAgdmFyIGVsZW1lbnRzID0gYS5pc1N1YmNsYXNzCiAgICAgICAgPyBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5zdHJpY3RTdWJjbGFzc2VzT2YoYS5iYXNlKQogICAgICAgIDogY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuc3RyaWN0U3VidHlwZXNPZihhLmJhc2UpOwogICAgZm9yICh2YXIgZWxlbWVudCBpbiBlbGVtZW50cykgewogICAgICBpZiAoY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNTdWJ0eXBlT2YoZWxlbWVudCwgYi5iYXNlKSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBUeXBlTWFzayBpbnRlcnNlY3Rpb25TYW1lKEZsYXRUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBhc3NlcnQoYmFzZSA9PSBvdGhlci5iYXNlKTsKICAgIC8vIFRoZSB0d28gbWFza3Mgc2hhcmUgdGhlIGJhc2UgdHlwZSwgc28gd2UgbXVzdCBjaG9zZSB0aGUgbW9zdAogICAgLy8gY29uc3RyYWluaW5nIGtpbmQgKHRoZSBsb3dlc3QpIG9mIHRoZSB0d28uIE9ubHkgaWYgYm90aCBtYXNrcwogICAgLy8gYXJlIG51bGxhYmxlLCB3aWxsIHRoZSByZXN1bHQgYmUgbnVsbGFibGUgdG9vLgogICAgLy8gVGhlIHJlc3VsdCB3aWxsIGJlIG5vcm1hbGl6ZWQsIGFzIHRoZSB0d28gaW5wdXRzIGFyZSBub3JtYWxpemVkLCB0b28uCiAgICBpbnQgY29tYmluZWQgPSAoZmxhZ3MgPCBvdGhlci5mbGFncykKICAgICAgICA/IGZsYWdzICYgKChvdGhlci5mbGFncyAmIDEpIHwgfjEpCiAgICAgICAgOiBvdGhlci5mbGFncyAmICgoZmxhZ3MgJiAxKSB8IH4xKTsKICAgIGlmIChmbGFncyA9PSBjb21iaW5lZCkgewogICAgICByZXR1cm4gdGhpczsKICAgIH0gZWxzZSBpZiAob3RoZXIuZmxhZ3MgPT0gY29tYmluZWQpIHsKICAgICAgcmV0dXJuIG90aGVyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBGbGF0VHlwZU1hc2subm9ybWFsaXplZChiYXNlLCBjb21iaW5lZCwgY2xvc2VkV29ybGQpOwogICAgfQogIH0KCiAgVHlwZU1hc2sgaW50ZXJzZWN0aW9uU3RyaWN0U3ViY2xhc3MoCiAgICAgIEZsYXRUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBhc3NlcnQoYmFzZSAhPSBvdGhlci5iYXNlKTsKICAgIGFzc2VydChjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc1N1YmNsYXNzT2Yob3RoZXIuYmFzZSwgYmFzZSkpOwogICAgLy8gSWYgdGhpcyBtYXNrIGlzbid0IGF0IGxlYXN0IGEgc3ViY2xhc3MgbWFzaywgdGhlbiB0aGUKICAgIC8vIGludGVyc2VjdGlvbiB3aXRoIHRoZSBvdGhlciBtYXNrIGlzIGVtcHR5LgogICAgaWYgKGlzRXhhY3QpIHJldHVybiBpbnRlcnNlY3Rpb25FbXB0eShvdGhlcik7CiAgICAvLyBPbmx5IHRoZSBvdGhlciBtYXNrIHB1dHMgY29uc3RyYWludHMgb24gdGhlIGludGVyc2VjdGlvbiBtYXNrLAogICAgLy8gc28gYmFzZSB0aGUgY29tYmluZWQgZmxhZ3Mgb24gdGhlIG90aGVyIG1hc2suIE9ubHkgaWYgYm90aAogICAgLy8gbWFza3MgYXJlIG51bGxhYmxlLCB3aWxsIHRoZSByZXN1bHQgYmUgbnVsbGFibGUgdG9vLgogICAgLy8gVGhlIHJlc3VsdCBpcyBndWFyYW50ZWVkIHRvIGJlIG5vcm1hbGl6ZWQsIGFzIHRoZSBvdGhlciB0eXBlCiAgICAvLyB3YXMgbm9ybWFsaXplZC4KICAgIGludCBjb21iaW5lZCA9IG90aGVyLmZsYWdzICYgKChmbGFncyAmIDEpIHwgfjEpOwogICAgaWYgKG90aGVyLmZsYWdzID09IGNvbWJpbmVkKSB7CiAgICAgIHJldHVybiBvdGhlcjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgRmxhdFR5cGVNYXNrLm5vcm1hbGl6ZWQob3RoZXIuYmFzZSwgY29tYmluZWQsIGNsb3NlZFdvcmxkKTsKICAgIH0KICB9CgogIFR5cGVNYXNrIGludGVyc2VjdGlvbkVtcHR5KEZsYXRUeXBlTWFzayBvdGhlcikgewogICAgcmV0dXJuIGlzTnVsbGFibGUgJiYgb3RoZXIuaXNOdWxsYWJsZQogICAgICAgID8gbmV3IFR5cGVNYXNrLmVtcHR5KCkKICAgICAgICA6IG5ldyBUeXBlTWFzay5ub25OdWxsRW1wdHkoKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY2FuSGl0KE1lbWJlckVudGl0eSBlbGVtZW50LCBOYW1lIG5hbWUsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMgPSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50czsKICAgIGFzc2VydChlbGVtZW50Lm5hbWUgPT0gbmFtZS50ZXh0KTsKICAgIGlmIChpc0VtcHR5KSByZXR1cm4gZmFsc2U7CiAgICBpZiAoaXNOdWxsKSB7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5oYXNFbGVtZW50SW4oCiAgICAgICAgICBjb21tb25FbGVtZW50cy5qc051bGxDbGFzcywgbmFtZSwgZWxlbWVudCk7CiAgICB9CgogICAgQ2xhc3NFbnRpdHkgb3RoZXIgPSBlbGVtZW50LmVuY2xvc2luZ0NsYXNzOwogICAgaWYgKG90aGVyID09IGNvbW1vbkVsZW1lbnRzLmpzTnVsbENsYXNzKSB7CiAgICAgIHJldHVybiBpc051bGxhYmxlOwogICAgfSBlbHNlIGlmIChpc0V4YWN0KSB7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5oYXNFbGVtZW50SW4oYmFzZSwgbmFtZSwgZWxlbWVudCk7CiAgICB9IGVsc2UgaWYgKGlzU3ViY2xhc3MpIHsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmhhc0VsZW1lbnRJbihiYXNlLCBuYW1lLCBlbGVtZW50KSB8fAogICAgICAgICAgY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNTdWJjbGFzc09mKG90aGVyLCBiYXNlKSB8fAogICAgICAgICAgY2xvc2VkV29ybGQuaGFzQW55U3ViY2xhc3NUaGF0TWl4ZXMoYmFzZSwgb3RoZXIpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KGlzU3VidHlwZSk7CiAgICAgIGJvb2wgcmVzdWx0ID0gY2xvc2VkV29ybGQuaGFzRWxlbWVudEluKGJhc2UsIG5hbWUsIGVsZW1lbnQpIHx8CiAgICAgICAgICBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc1N1YnR5cGVPZihvdGhlciwgYmFzZSkgfHwKICAgICAgICAgIGNsb3NlZFdvcmxkLmhhc0FueVN1YmNsYXNzVGhhdEltcGxlbWVudHMob3RoZXIsIGJhc2UpIHx8CiAgICAgICAgICBjbG9zZWRXb3JsZC5oYXNBbnlTdWJjbGFzc09mTWl4aW5Vc2VUaGF0SW1wbGVtZW50cyhvdGhlciwgYmFzZSk7CiAgICAgIGlmIChyZXN1bHQpIHJldHVybiB0cnVlOwogICAgICAvLyBJZiB0aGUgY2xhc3MgaXMgdXNlZCBhcyBhIG1peGluLCB3ZSBoYXZlIHRvIGNoZWNrIGlmIHRoZSBlbGVtZW50CiAgICAgIC8vIGNhbiBiZSBoaXQgZnJvbSBhbnkgb2YgdGhlIG1peGluIGFwcGxpY2F0aW9ucy4KICAgICAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IG1peGluVXNlcyA9IGNsb3NlZFdvcmxkLm1peGluVXNlc09mKGJhc2UpOwogICAgICByZXR1cm4gbWl4aW5Vc2VzLmFueSgobWl4aW5BcHBsaWNhdGlvbikgPT4KICAgICAgICAgIGNsb3NlZFdvcmxkLmhhc0VsZW1lbnRJbihtaXhpbkFwcGxpY2F0aW9uLCBuYW1lLCBlbGVtZW50KSB8fAogICAgICAgICAgY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNTdWJjbGFzc09mKG90aGVyLCBtaXhpbkFwcGxpY2F0aW9uKSB8fAogICAgICAgICAgY2xvc2VkV29ybGQuaGFzQW55U3ViY2xhc3NUaGF0TWl4ZXMobWl4aW5BcHBsaWNhdGlvbiwgb3RoZXIpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGJvb2wgbmVlZHNOb1N1Y2hNZXRob2RIYW5kbGluZygKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIGNvdmFyaWFudCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIC8vIEEgY2FsbCBvbiBhbiBlbXB0eSB0eXBlIG1hc2sgaXMgZWl0aGVyIGRlYWQgY29kZSwgb3IgYSBjYWxsIG9uCiAgICAvLyBgbnVsbGAuCiAgICBpZiAoaXNFbXB0eU9yTnVsbCkgcmV0dXJuIGZhbHNlOwogICAgLy8gQSBjYWxsIG9uIGFuIGV4YWN0IG1hc2sgZm9yIGFuIGFic3RyYWN0IGNsYXNzIGlzIGRlYWQgY29kZS4KICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEEgdHlwZSBtYXNrIGNhbm5vdCBiZSBhYnN0cmFjdC4gUmVtb3ZlIHRoZSBuZWVkCiAgICAvLyBmb3IgdGhpcyBub2lzZSAoY3VycmVudGx5IHVzZWQgZm9yIHN1cGVyLWNhbGxzIGluIGluZmVyZW5jZSBhbmQgbWlycm9yCiAgICAvLyB1c2FnZSkuCiAgICBpZiAoaXNFeGFjdCAmJiBiYXNlLmlzQWJzdHJhY3QpIHJldHVybiBmYWxzZTsKCiAgICByZXR1cm4gY2xvc2VkV29ybGQubmVlZHNOb1N1Y2hNZXRob2QoYmFzZSwgc2VsZWN0b3IsIF9jbGFzc1F1ZXJ5KTsKICB9CgogIEBvdmVycmlkZQogIE1lbWJlckVudGl0eSBsb2NhdGVTaW5nbGVNZW1iZXIoU2VsZWN0b3Igc2VsZWN0b3IsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgaWYgKGlzRW1wdHlPck51bGwpIHJldHVybiBudWxsOwogICAgaWYgKGNsb3NlZFdvcmxkLmluY2x1ZGVzQ2xvc3VyZUNhbGwoc2VsZWN0b3IsIHRoaXMpKSByZXR1cm4gbnVsbDsKICAgIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gdGFyZ2V0cyA9IGNsb3NlZFdvcmxkLmxvY2F0ZU1lbWJlcnMoc2VsZWN0b3IsIHRoaXMpOwogICAgaWYgKHRhcmdldHMubGVuZ3RoICE9IDEpIHJldHVybiBudWxsOwogICAgTWVtYmVyRW50aXR5IHJlc3VsdCA9IHRhcmdldHMuZmlyc3Q7CiAgICBDbGFzc0VudGl0eSBlbmNsb3NpbmcgPSByZXN1bHQuZW5jbG9zaW5nQ2xhc3M7CiAgICAvLyBXZSBvbmx5IHJldHVybiB0aGUgZm91bmQgZWxlbWVudCBpZiBpdCBpcyBndWFyYW50ZWVkIHRvIGJlIGltcGxlbWVudGVkIG9uCiAgICAvLyBhbGwgY2xhc3NlcyBpbiB0aGUgcmVjZWl2ZXIgdHlwZSBbdGhpc10uIEl0IGNvdWxkIGJlIGZvdW5kIG9ubHkgaW4gYQogICAgLy8gc3ViY2xhc3Mgb3IgaW4gYW4gaW5oZXJpdGFuY2Utd2lzZSB1bnJlbGF0ZWQgY2xhc3MgaW4gY2FzZSBvZiBzdWJ0eXBlCiAgICAvLyBzZWxlY3RvcnMuCiAgICBpZiAoaXNTdWJ0eXBlKSB7CiAgICAgIC8vIGlmIChjbG9zZWRXb3JsZC5pc1VzZWRBc01peGluKGVuY2xvc2luZykpIHsKICAgICAgaWYgKGNsb3NlZFdvcmxkLmV2ZXJ5U3VidHlwZUlzU3ViY2xhc3NPZk9yTWl4aW5Vc2VPZihiYXNlLCBlbmNsb3NpbmcpKSB7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICAvL30KICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgewogICAgICBpZiAoY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNTdWJjbGFzc09mKGJhc2UsIGVuY2xvc2luZykpIHsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICAgIGlmIChjbG9zZWRXb3JsZC5pc1N1YmNsYXNzT2ZNaXhpblVzZU9mKGJhc2UsIGVuY2xvc2luZykpIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsK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IGRlbGVnYXRlIGFsbCBpdHMKLy8vIGltcGxlbWVudGF0aW9uIG1ldGhvZHMgdG8gaXQuCmFic3RyYWN0IGNsYXNzIEZvcndhcmRpbmdUeXBlTWFzayBpbXBsZW1lbnRzIFR5cGVNYXNrIHsKICBUeXBlTWFzayBnZXQgZm9yd2FyZFRvOwoKICBGb3J3YXJkaW5nVHlwZU1hc2soKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFbXB0eU9yTnVsbCA9PiBmb3J3YXJkVG8uaXNFbXB0eU9yTnVsbDsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0VtcHR5ID0+IGZvcndhcmRUby5pc0VtcHR5OwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTnVsbGFibGUgPT4gZm9yd2FyZFRvLmlzTnVsbGFibGU7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOdWxsID0+IGZvcndhcmRUby5pc051bGw7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFeGFjdCA9PiBmb3J3YXJkVG8uaXNFeGFjdDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNVbmlvbiA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0NvbnRhaW5lciA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1NldCA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc01hcCA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0RpY3Rpb25hcnkgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNWYWx1ZSA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0ZvcndhcmRpbmcgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0luTWFzayhUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gZm9yd2FyZFRvLmlzSW5NYXNrKG90aGVyLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zTWFzayhUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gZm9yd2FyZFRvLmNvbnRhaW5zTWFzayhvdGhlciwgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc09ubHlJbnQoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gZm9yd2FyZFRvLmNvbnRhaW5zT25seUludChjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zT25seURvdWJsZShKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBmb3J3YXJkVG8uY29udGFpbnNPbmx5RG91YmxlKGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNPbmx5TnVtKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGZvcndhcmRUby5jb250YWluc09ubHlOdW0oY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc09ubHlCb29sKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGZvcndhcmRUby5jb250YWluc09ubHlCb29sKGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNPbmx5U3RyaW5nKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGZvcndhcmRUby5jb250YWluc09ubHlTdHJpbmcoY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc09ubHkoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gZm9yd2FyZFRvLmNvbnRhaW5zT25seShjbHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBzYXRpc2ZpZXMoQ2xhc3NFbnRpdHkgY2xzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBmb3J3YXJkVG8uc2F0aXNmaWVzKGNscywgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWlucyhDbGFzc0VudGl0eSBjbHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGZvcndhcmRUby5jb250YWlucyhjbHMsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNBbGwoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gZm9yd2FyZFRvLmNvbnRhaW5zQWxsKGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IHNpbmdsZUNsYXNzKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGZvcndhcmRUby5zaW5nbGVDbGFzcyhjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayB1bmlvbihvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBpZiAodGhpcyA9PSBvdGhlcikgewogICAgICByZXR1cm4gdGhpczsKICAgIH0gZWxzZSBpZiAoZXF1YWxzRGlzcmVnYXJkTnVsbChvdGhlcikpIHsKICAgICAgcmV0dXJuIG90aGVyLmlzTnVsbGFibGUgPyBvdGhlciA6IHRoaXM7CiAgICB9IGVsc2UgaWYgKG90aGVyLmlzRW1wdHlPck51bGwpIHsKICAgICAgcmV0dXJuIG90aGVyLmlzTnVsbGFibGUgPyB0aGlzLm51bGxhYmxlKCkgOiB0aGlzOwogICAgfQogICAgcmV0dXJuIGZvcndhcmRUby51bmlvbihvdGhlciwgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Rpc2pvaW50KFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBmb3J3YXJkVG8uaXNEaXNqb2ludChvdGhlciwgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgaW50ZXJzZWN0aW9uKFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBmb3J3YXJkVG8uaW50ZXJzZWN0aW9uKG90aGVyLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG5lZWRzTm9TdWNoTWV0aG9kSGFuZGxpbmcoCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLCBjb3ZhcmlhbnQgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gZm9yd2FyZFRvLm5lZWRzTm9TdWNoTWV0aG9kSGFuZGxpbmcoc2VsZWN0b3IsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY2FuSGl0KE1lbWJlckVudGl0eSBlbGVtZW50LCBOYW1lIG5hbWUsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGZvcndhcmRUby5jYW5IaXQoZWxlbWVudCwgbmFtZSwgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyRW50aXR5IGxvY2F0ZVNpbmdsZU1lbWJlcihTZWxlY3RvciBzZWxlY3RvciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gZm9yd2FyZFRvLmxvY2F0ZVNpbmdsZU1lbWJlcihzZWxlY3RvciwgY2xvc2VkV29ybGQpOwogIH0KCiAgYm9vbCBlcXVhbHNEaXNyZWdhcmROdWxsKG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIEZvcndhcmRpbmdUeXBlTWFzaykgcmV0dXJuIGZhbHNlOwogICAgaWYgKGZvcndhcmRUby5pc051bGxhYmxlKSB7CiAgICAgIHJldHVybiBmb3J3YXJkVG8gPT0gb3RoZXIuZm9yd2FyZFRvLm51bGxhYmxlKCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZm9yd2FyZFRvID09IG90aGVyLmZvcndhcmRUby5ub25OdWxsYWJsZSgpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgcmV0dXJuIGVxdWFsc0Rpc3JlZ2FyZE51bGwob3RoZXIpICYmIGlzTnVsbGFibGUgPT0gb3RoZXIuaXNOdWxsYWJsZTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gdGhyb3cgIlN1YmNsYXNzIHNob3VsZCBpbXBsZW1lbnQgaGFzaENvZGUgZ2V0dGVyIjsKfQoKYWJzdHJhY3QgY2xhc3MgQWxsb2NhdGlvblR5cGVNYXNrIGV4dGVuZHMgRm9yd2FyZGluZ1R5cGVNYXNrIHsKICAvLyBUaGUgW2lyLk5vZGVdIHdoZXJlIHRoaXMgdHlwZSBtYXNrIHdhcyBjcmVhdGVkLgogIGlyLk5vZGUgZ2V0IGFsbG9jYXRpb25Ob2RlOwoKICAvLyBUaGUgW0VudGl0eV0gd2hlcmUgdGhpcyB0eXBlIG1hc2sgd2FzIGNyZWF0ZWQuCiAgTWVtYmVyRW50aXR5IGdldCBhbGxvY2F0aW9uRWxlbWVudDsKfQqApABOTjwBDwE+IjgaARgBDDUMKQwvDCcMKQEMHQwhDBsMGwwiDB0MIQEMPDMEAQxANwQBDDMzBAEMNjYEAQwzMwQBDDQ0BAEMNjYEAQwnKAQBDD4yBAEMPTEEAQwvLwQBDDYvBAEMNBkTLS4mOAYwBAEMPjUEAQxENwQBDCI/RwQBDEs5BAEMUUAEASQ0IDYNOQYEAQwcSQQBDEkCAT81HgE0JgIBQXBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL3R5cGVtYXNrcy9mb3J3YXJkaW5nX3R5cGVfbWFzay5kYXJ0Q3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2luZmVycmVyL3R5cGVtYXNrcy9tYXBfdHlwZV9tYXNrLmRhcnSUQC8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIG1hc2tzOwoKLy8vIEEgW01hcFR5cGVNYXNrXSBpcyBhIFtUeXBlTWFza10gZm9yIGEgc3BlY2lmaWMgYWxsb2NhdGlvbgovLy8gc2l0ZSBvZiBhIG1hcCAoY3VycmVudGx5IG9ubHkgaW50ZXJuYWwgTWFwIGNsYXNzKSB0aGF0IHdpbGwgZ2V0IHNwZWNpYWxpemVkCi8vLyBvbmNlIHRoZSBbVHlwZUdyYXBoSW5mZXJyZXJdIHBoYXNlIGZpbmRzIGEga2V5IGFuZC9vciB2YWx1ZSB0eXBlIGZvciBpdC4KY2xhc3MgTWFwVHlwZU1hc2sgZXh0ZW5kcyBBbGxvY2F0aW9uVHlwZU1hc2sgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbTWFwVHlwZU1hc2tdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnbWFwLXR5cGUtbWFzayc7CgogIEBvdmVycmlkZQogIGZpbmFsIFR5cGVNYXNrIGZvcndhcmRUbzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgaXIuTm9kZSBhbGxvY2F0aW9uTm9kZTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgTWVtYmVyRW50aXR5IGFsbG9jYXRpb25FbGVtZW50OwoKICAvLyBUaGUgdmFsdWUgdHlwZSBvZiB0aGlzIG1hcC4KICBmaW5hbCBUeXBlTWFzayB2YWx1ZVR5cGU7CgogIC8vIFRoZSBrZXkgdHlwZSBvZiB0aGlzIG1hcC4KICBmaW5hbCBUeXBlTWFzayBrZXlUeXBlOwoKICBNYXBUeXBlTWFzayh0aGlzLmZvcndhcmRUbywgdGhpcy5hbGxvY2F0aW9uTm9kZSwgdGhpcy5hbGxvY2F0aW9uRWxlbWVudCwKICAgICAgdGhpcy5rZXlUeXBlLCB0aGlzLnZhbHVlVHlwZSk7CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbTWFwVHlwZU1hc2tdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgTWFwVHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIFR5cGVNYXNrIGZvcndhcmRUbyA9IG5ldyBUeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlLCBjbG9zZWRXb3JsZCk7CiAgICBpci5UcmVlTm9kZSBhbGxvY2F0aW9uTm9kZSA9IHNvdXJjZS5yZWFkVHJlZU5vZGVPck51bGwoKTsKICAgIE1lbWJlckVudGl0eSBhbGxvY2F0aW9uRWxlbWVudCA9IHNvdXJjZS5yZWFkTWVtYmVyT3JOdWxsKCk7CiAgICBUeXBlTWFzayBrZXlUeXBlID0gbmV3IFR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIGNsb3NlZFdvcmxkKTsKICAgIFR5cGVNYXNrIHZhbHVlVHlwZSA9IG5ldyBUeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlLCBjbG9zZWRXb3JsZCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IE1hcFR5cGVNYXNrKAogICAgICAgIGZvcndhcmRUbywgYWxsb2NhdGlvbk5vZGUsIGFsbG9jYXRpb25FbGVtZW50LCBrZXlUeXBlLCB2YWx1ZVR5cGUpOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbTWFwVHlwZU1hc2tdIHRvIFtzaW5rXS4KICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShUeXBlTWFza0tpbmQubWFwKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIGZvcndhcmRUby53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLndyaXRlVHJlZU5vZGVPck51bGwoYWxsb2NhdGlvbk5vZGUpOwogICAgc2luay53cml0ZU1lbWJlck9yTnVsbChhbGxvY2F0aW9uRWxlbWVudCk7CiAgICBrZXlUeXBlLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHZhbHVlVHlwZS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgbnVsbGFibGUoKSB7CiAgICByZXR1cm4gaXNOdWxsYWJsZQogICAgICAgID8gdGhpcwogICAgICAgIDogbmV3IE1hcFR5cGVNYXNrKGZvcndhcmRUby5udWxsYWJsZSgpLCBhbGxvY2F0aW9uTm9kZSwKICAgICAgICAgICAgYWxsb2NhdGlvbkVsZW1lbnQsIGtleVR5cGUsIHZhbHVlVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBub25OdWxsYWJsZSgpIHsKICAgIHJldHVybiBpc051bGxhYmxlCiAgICAgICAgPyBuZXcgTWFwVHlwZU1hc2soZm9yd2FyZFRvLm5vbk51bGxhYmxlKCksIGFsbG9jYXRpb25Ob2RlLAogICAgICAgICAgICBhbGxvY2F0aW9uRWxlbWVudCwga2V5VHlwZSwgdmFsdWVUeXBlKQogICAgICAgIDogdGhpczsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQ29udGFpbmVyID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTWFwID0+IHRydWU7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFeGFjdCA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGVxdWFsc0Rpc3JlZ2FyZE51bGwob3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyEgTWFwVHlwZU1hc2spIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBzdXBlci5lcXVhbHNEaXNyZWdhcmROdWxsKG90aGVyKSAmJgogICAgICAgIGFsbG9jYXRpb25Ob2RlID09IG90aGVyLmFsbG9jYXRpb25Ob2RlICYmCiAgICAgICAga2V5VHlwZSA9PSBvdGhlci5rZXlUeXBlICYmCiAgICAgICAgdmFsdWVUeXBlID09IG90aGVyLnZhbHVlVHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGludGVyc2VjdGlvbihUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBUeXBlTWFzayBmb3J3YXJkSW50ZXJzZWN0aW9uID0gZm9yd2FyZFRvLmludGVyc2VjdGlvbihvdGhlciwgY2xvc2VkV29ybGQpOwogICAgaWYgKGZvcndhcmRJbnRlcnNlY3Rpb24uaXNFbXB0eU9yTnVsbCkgcmV0dXJuIGZvcndhcmRJbnRlcnNlY3Rpb247CiAgICByZXR1cm4gZm9yd2FyZEludGVyc2VjdGlvbi5pc051bGxhYmxlID8gbnVsbGFibGUoKSA6IG5vbk51bGxhYmxlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayB1bmlvbihkeW5hbWljIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmICh0aGlzID09IG90aGVyKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSBlbHNlIGlmIChlcXVhbHNEaXNyZWdhcmROdWxsKG90aGVyKSkgewogICAgICByZXR1cm4gb3RoZXIuaXNOdWxsYWJsZSA/IG90aGVyIDogdGhpczsKICAgIH0gZWxzZSBpZiAob3RoZXIuaXNFbXB0eU9yTnVsbCkgewogICAgICByZXR1cm4gb3RoZXIuaXNOdWxsYWJsZSA/IHRoaXMubnVsbGFibGUoKSA6IHRoaXM7CiAgICB9IGVsc2UgaWYgKG90aGVyLmlzTWFwICYmCiAgICAgICAga2V5VHlwZSAhPSBudWxsICYmCiAgICAgICAgb3RoZXIua2V5VHlwZSAhPSBudWxsICYmCiAgICAgICAgdmFsdWVUeXBlICE9IG51bGwgJiYKICAgICAgICBvdGhlci52YWx1ZVR5cGUgIT0gbnVsbCkgewogICAgICBUeXBlTWFzayBuZXdLZXlUeXBlID0ga2V5VHlwZS51bmlvbihvdGhlci5rZXlUeXBlLCBjbG9zZWRXb3JsZCk7CiAgICAgIFR5cGVNYXNrIG5ld1ZhbHVlVHlwZSA9IHZhbHVlVHlwZS51bmlvbihvdGhlci52YWx1ZVR5cGUsIGNsb3NlZFdvcmxkKTsKICAgICAgVHlwZU1hc2sgbmV3Rm9yd2FyZFRvID0gZm9yd2FyZFRvLnVuaW9uKG90aGVyLmZvcndhcmRUbywgY2xvc2VkV29ybGQpOwogICAgICByZXR1cm4gbmV3IE1hcFR5cGVNYXNrKAogICAgICAgICAgbmV3Rm9yd2FyZFRvLCBudWxsLCBudWxsLCBuZXdLZXlUeXBlLCBuZXdWYWx1ZVR5cGUpOwogICAgfSBlbHNlIGlmIChvdGhlci5pc0RpY3Rpb25hcnkpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogRmluZCBhbm90aGVyIHdheSB0byBjaGVjayB0aGlzIGludmFyaWFudCB0aGF0CiAgICAgIC8vIGRvZXNuJ3QgbmVlZCB0aGUgY29tcGlsZXIuCiAgICAgIGFzc2VydChvdGhlci5rZXlUeXBlID09CiAgICAgICAgICBuZXcgVHlwZU1hc2subm9uTnVsbEV4YWN0KAogICAgICAgICAgICAgIGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmpzU3RyaW5nQ2xhc3MsIGNsb3NlZFdvcmxkKSk7CiAgICAgIFR5cGVNYXNrIG5ld0tleVR5cGUgPSBrZXlUeXBlLnVuaW9uKG90aGVyLmtleVR5cGUsIGNsb3NlZFdvcmxkKTsKICAgICAgVHlwZU1hc2sgbmV3VmFsdWVUeXBlID0KICAgICAgICAgIG90aGVyLnR5cGVNYXAudmFsdWVzLmZvbGQoa2V5VHlwZSwgKHAsIG4pID0+IHAudW5pb24obiwgY2xvc2VkV29ybGQpKTsKICAgICAgVHlwZU1hc2sgbmV3Rm9yd2FyZFRvID0gZm9yd2FyZFRvLnVuaW9uKG90aGVyLmZvcndhcmRUbywgY2xvc2VkV29ybGQpOwogICAgICBNYXBUeXBlTWFzayBuZXdNYXBUeXBlTWFzayA9IG5ldyBNYXBUeXBlTWFzaygKICAgICAgICAgIG5ld0ZvcndhcmRUbywKICAgICAgICAgIGFsbG9jYXRpb25Ob2RlID09IG90aGVyLmFsbG9jYXRpb25Ob2RlID8gYWxsb2NhdGlvbk5vZGUgOiBudWxsLAogICAgICAgICAgYWxsb2NhdGlvbkVsZW1lbnQgPT0gb3RoZXIuYWxsb2NhdGlvbkVsZW1lbnQKICAgICAgICAgICAgICA/IGFsbG9jYXRpb25FbGVtZW50CiAgICAgICAgICAgICAgOiBudWxsLAogICAgICAgICAgbmV3S2V5VHlwZSwKICAgICAgICAgIG5ld1ZhbHVlVHlwZSk7CiAgICAgIHJldHVybiBuZXdNYXBUeXBlTWFzazsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmb3J3YXJkVG8udW5pb24ob3RoZXIsIGNsb3NlZFdvcmxkKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpID0+IHN1cGVyID09IG90aGVyOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiBjb21wdXRlSGFzaENvZGUoCiAgICAgICAgYWxsb2NhdGlvbk5vZGUsIGlzTnVsbGFibGUsIGtleVR5cGUsIHZhbHVlVHlwZSwgZm9yd2FyZFRvKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnTWFwKCRmb3J3YXJkVG8sIGtleTogJGtleVR5cGUsIHZhbHVlOiAkdmFsdWVUeXBlKSc7CiAgfQp9CoCcAE5OPAEPAT5QTS9FHS0BDBwBDCABDCgBIRwBHxoBSyUBOSo1F08+QE1PFRxLBAEvDCgmFSUuLyMlEwQBDBgWD0A0BAEMGxZDMxAEAQwhDBoMHAEMJC0vMiQmBAEMRE9HSAQBDDwZEy0uJjgeGyEdI0dNTR4/JUwkHiVHRx5RTTQYSjciFhYZHQ0yBgQBDC0BDBUcRAQBDBZABAIBOnBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL3R5cGVtYXNrcy9tYXBfdHlwZV9tYXNrLmRhcnRDc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvdHlwZW1hc2tzL3NldF90eXBlX21hc2suZGFydI7eLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgbWFza3M7CgovLy8gQSBbU2V0VHlwZU1hc2tdIGlzIGEgW1R5cGVNYXNrXSBmb3IgYSBzcGVjaWZpYyBhbGxvY2F0aW9uIHNpdGUgb2YgYSBzZXQKLy8vIChjdXJyZW50bHkgb25seSB0aGUgaW50ZXJuYWwgU2V0IGNsYXNzKSB0aGF0IHdpbGwgZ2V0IHNwZWNpYWxpemVkIG9uY2UgdGhlCi8vLyBbVHlwZUdyYXBoSW5mZXJyZXJdIHBoYXNlIGZpbmRzIGFuIGVsZW1lbnQgdHlwZSBmb3IgaXQuCmNsYXNzIFNldFR5cGVNYXNrIGV4dGVuZHMgQWxsb2NhdGlvblR5cGVNYXNrIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW1NldFR5cGVNYXNrXSBvYmplY3RzIGluIGEgZGVidWdnaW5nCiAgLy8vIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ3NldC10eXBlLW1hc2snOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBUeXBlTWFzayBmb3J3YXJkVG87CgogIEBvdmVycmlkZQogIGZpbmFsIGlyLk5vZGUgYWxsb2NhdGlvbk5vZGU7CgogIEBvdmVycmlkZQogIGZpbmFsIE1lbWJlckVudGl0eSBhbGxvY2F0aW9uRWxlbWVudDsKCiAgLy8gVGhlIGVsZW1lbnQgdHlwZSBvZiB0aGlzIHNldC4KICBmaW5hbCBUeXBlTWFzayBlbGVtZW50VHlwZTsKCiAgU2V0VHlwZU1hc2sodGhpcy5mb3J3YXJkVG8sIHRoaXMuYWxsb2NhdGlvbk5vZGUsIHRoaXMuYWxsb2NhdGlvbkVsZW1lbnQsCiAgICAgIHRoaXMuZWxlbWVudFR5cGUpOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW1NldFR5cGVNYXNrXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IFNldFR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBUeXBlTWFzayBmb3J3YXJkVG8gPSBuZXcgVHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgY2xvc2VkV29ybGQpOwogICAgaXIuVHJlZU5vZGUgYWxsb2NhdGlvbk5vZGUgPSBzb3VyY2UucmVhZFRyZWVOb2RlT3JOdWxsKCk7CiAgICBNZW1iZXJFbnRpdHkgYWxsb2NhdGlvbkVsZW1lbnQgPSBzb3VyY2UucmVhZE1lbWJlck9yTnVsbCgpOwogICAgVHlwZU1hc2sgZWxlbWVudFR5cGUgPSBuZXcgVHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgY2xvc2VkV29ybGQpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBTZXRUeXBlTWFzaygKICAgICAgICBmb3J3YXJkVG8sIGFsbG9jYXRpb25Ob2RlLCBhbGxvY2F0aW9uRWxlbWVudCwgZWxlbWVudFR5cGUpOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbU2V0VHlwZU1hc2tdIHRvIFtzaW5rXS4KICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShUeXBlTWFza0tpbmQuc2V0KTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIGZvcndhcmRUby53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLndyaXRlVHJlZU5vZGVPck51bGwoYWxsb2NhdGlvbk5vZGUpOwogICAgc2luay53cml0ZU1lbWJlck9yTnVsbChhbGxvY2F0aW9uRWxlbWVudCk7CiAgICBlbGVtZW50VHlwZS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgbnVsbGFibGUoKSA9PiBpc051bGxhYmxlCiAgICAgID8gdGhpcwogICAgICA6IG5ldyBTZXRUeXBlTWFzaygKICAgICAgICAgIGZvcndhcmRUby5udWxsYWJsZSgpLCBhbGxvY2F0aW9uTm9kZSwgYWxsb2NhdGlvbkVsZW1lbnQsIGVsZW1lbnRUeXBlKTsKCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgbm9uTnVsbGFibGUoKSA9PiBpc051bGxhYmxlCiAgICAgID8gbmV3IFNldFR5cGVNYXNrKGZvcndhcmRUby5ub25OdWxsYWJsZSgpLCBhbGxvY2F0aW9uTm9kZSwKICAgICAgICAgIGFsbG9jYXRpb25FbGVtZW50LCBlbGVtZW50VHlwZSkKICAgICAgOiB0aGlzOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1NldCA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0V4YWN0ID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgZXF1YWxzRGlzcmVnYXJkTnVsbChvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBTZXRUeXBlTWFzaykgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHN1cGVyLmVxdWFsc0Rpc3JlZ2FyZE51bGwob3RoZXIpICYmCiAgICAgICAgYWxsb2NhdGlvbk5vZGUgPT0gb3RoZXIuYWxsb2NhdGlvbk5vZGUgJiYKICAgICAgICBlbGVtZW50VHlwZSA9PSBvdGhlci5lbGVtZW50VHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGludGVyc2VjdGlvbihUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBUeXBlTWFzayBmb3J3YXJkSW50ZXJzZWN0aW9uID0gZm9yd2FyZFRvLmludGVyc2VjdGlvbihvdGhlciwgY2xvc2VkV29ybGQpOwogICAgaWYgKGZvcndhcmRJbnRlcnNlY3Rpb24uaXNFbXB0eU9yTnVsbCkgcmV0dXJuIGZvcndhcmRJbnRlcnNlY3Rpb247CiAgICByZXR1cm4gZm9yd2FyZEludGVyc2VjdGlvbi5pc051bGxhYmxlID8gbnVsbGFibGUoKSA6IG5vbk51bGxhYmxlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayB1bmlvbihkeW5hbWljIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmICh0aGlzID09IG90aGVyKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSBlbHNlIGlmIChlcXVhbHNEaXNyZWdhcmROdWxsKG90aGVyKSkgewogICAgICByZXR1cm4gb3RoZXIuaXNOdWxsYWJsZSA/IG90aGVyIDogdGhpczsKICAgIH0gZWxzZSBpZiAob3RoZXIuaXNFbXB0eU9yTnVsbCkgewogICAgICByZXR1cm4gb3RoZXIuaXNOdWxsYWJsZSA/IHRoaXMubnVsbGFibGUoKSA6IHRoaXM7CiAgICB9IGVsc2UgaWYgKG90aGVyLmlzU2V0ICYmCiAgICAgICAgZWxlbWVudFR5cGUgIT0gbnVsbCAmJgogICAgICAgIG90aGVyLmVsZW1lbnRUeXBlICE9IG51bGwpIHsKICAgICAgVHlwZU1hc2sgbmV3RWxlbWVudFR5cGUgPQogICAgICAgICAgZWxlbWVudFR5cGUudW5pb24ob3RoZXIuZWxlbWVudFR5cGUsIGNsb3NlZFdvcmxkKTsKICAgICAgVHlwZU1hc2sgbmV3Rm9yd2FyZFRvID0gZm9yd2FyZFRvLnVuaW9uKG90aGVyLmZvcndhcmRUbywgY2xvc2VkV29ybGQpOwogICAgICByZXR1cm4gbmV3IFNldFR5cGVNYXNrKG5ld0ZvcndhcmRUbywgbnVsbCwgbnVsbCwgbmV3RWxlbWVudFR5cGUpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGZvcndhcmRUby51bmlvbihvdGhlciwgY2xvc2VkV29ybGQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgPT4gc3VwZXIgPT0gb3RoZXI7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4KICAgICAgY29tcHV0ZUhhc2hDb2RlKGFsbG9jYXRpb25Ob2RlLCBpc051bGxhYmxlLCBlbGVtZW50VHlwZSwgZm9yd2FyZFRvKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1NldCgkZm9yd2FyZFRvLCBlbGVtZW50OiAkZWxlbWVudFR5cGUpJzsKfQp3AE5OPAEPAUxPPC9PEy0BDBwBDCABDCgBIx4BSxkBOSo1F08+QFEVHEQEAS8MKCYVJS4vJxMEAQwkDRlRAQwnQSoOAQwaAQwcAQwkLS8yKgQBDERPR0gEAQw8GRMtLiY4Hh8lID1NSA0yBgQBDC0BDBZLAQxBAgE6cGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvdHlwZW1hc2tzL3NldF90eXBlX21hc2suZGFydD9zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pbmZlcnJlci90eXBlbWFza3MvdHlwZV9tYXNrLmRhcnS5Wi8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIG1hc2tzOwoKLy8vIEFuIGltcGxlbWVudGF0aW9uIG9mIGEgW1VuaXZlcnNlU2VsZWN0b3JDb25zdHJhaW50c10gdGhhdCBpcyBjb25zaXN0cyBpZiBhbgovLy8gb25seSBpbmNyZWFzaW5nIHNldCBvZiBbVHlwZU1hc2tdcywgdGhhdCBpcywgb25jZSBhIG1hc2sgaXMgYWRkZWQgaXQgY2Fubm90Ci8vLyBiZSByZW1vdmVkLgpjbGFzcyBJbmNyZWFzaW5nVHlwZU1hc2tTZXQgZXh0ZW5kcyBVbml2ZXJzZVNlbGVjdG9yQ29uc3RyYWludHMgewogIGJvb2wgaXNBbGwgPSBmYWxzZTsKICBTZXQ8VHlwZU1hc2s+IF9tYXNrczsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5IaXQoTWVtYmVyRW50aXR5IGVsZW1lbnQsIE5hbWUgbmFtZSwgSkNsb3NlZFdvcmxkIHdvcmxkKSB7CiAgICBpZiAoaXNBbGwpIHJldHVybiB0cnVlOwogICAgaWYgKF9tYXNrcyA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICBmb3IgKFR5cGVNYXNrIG1hc2sgaW4gX21hc2tzKSB7CiAgICAgIGlmIChtYXNrLmNhbkhpdChlbGVtZW50LCBuYW1lLCB3b3JsZCkpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBuZWVkc05vU3VjaE1ldGhvZEhhbmRsaW5nKFNlbGVjdG9yIHNlbGVjdG9yLCBKQ2xvc2VkV29ybGQgd29ybGQpIHsKICAgIGlmIChpc0FsbCkgewogICAgICBUeXBlTWFzayBtYXNrID0KICAgICAgICAgIG5ldyBUeXBlTWFzay5zdWJjbGFzcyh3b3JsZC5jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcywgd29ybGQpOwogICAgICByZXR1cm4gbWFzay5uZWVkc05vU3VjaE1ldGhvZEhhbmRsaW5nKHNlbGVjdG9yLCB3b3JsZCk7CiAgICB9CiAgICBmb3IgKFR5cGVNYXNrIG1hc2sgaW4gX21hc2tzKSB7CiAgICAgIGlmIChtYXNrLm5lZWRzTm9TdWNoTWV0aG9kSGFuZGxpbmcoc2VsZWN0b3IsIHdvcmxkKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGFkZFJlY2VpdmVyQ29uc3RyYWludChUeXBlTWFzayBtYXNrKSB7CiAgICBpZiAoaXNBbGwpIHJldHVybiBmYWxzZTsKICAgIGlmIChtYXNrID09IG51bGwpIHsKICAgICAgaXNBbGwgPSB0cnVlOwogICAgICBfbWFza3MgPSBudWxsOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIF9tYXNrcyA/Pz0gbmV3IFNldDxUeXBlTWFzaz4oKTsKICAgIHJldHVybiBfbWFza3MuYWRkKG1hc2spOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgaWYgKGlzQWxsKSB7CiAgICAgIHJldHVybiAnPGFsbD4nOwogICAgfSBlbHNlIGlmIChfbWFza3MgIT0gbnVsbCkgewogICAgICByZXR1cm4gJyRfbWFza3MnOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICc8bm9uZT4nOwogICAgfQogIH0KfQoKY2xhc3MgVHlwZU1hc2tTdHJhdGVneSBpbXBsZW1lbnRzIEFic3RyYWN0VmFsdWVTdHJhdGVneSB7CiAgY29uc3QgVHlwZU1hc2tTdHJhdGVneSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlRG9tYWluIGNyZWF0ZURvbWFpbihKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBuZXcgQ29tbW9uTWFza3MoY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgU2VsZWN0b3JDb25zdHJhaW50c1N0cmF0ZWd5IGNyZWF0ZVNlbGVjdG9yU3RyYXRlZ3koKSB7CiAgICByZXR1cm4gbmV3IFR5cGVNYXNrU2VsZWN0b3JTdHJhdGVneSgpOwogIH0KfQoKY2xhc3MgVHlwZU1hc2tTZWxlY3RvclN0cmF0ZWd5IGltcGxlbWVudHMgU2VsZWN0b3JDb25zdHJhaW50c1N0cmF0ZWd5IHsKICBjb25zdCBUeXBlTWFza1NlbGVjdG9yU3RyYXRlZ3koKTsKCiAgQG92ZXJyaWRlCiAgVW5pdmVyc2VTZWxlY3RvckNvbnN0cmFpbnRzIGNyZWF0ZVNlbGVjdG9yQ29uc3RyYWludHMoCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLCBPYmplY3QgaW5pdGlhbENvbnN0cmFpbnQpIHsKICAgIHJldHVybiBuZXcgSW5jcmVhc2luZ1R5cGVNYXNrU2V0KCkKICAgICAgLi5hZGRSZWNlaXZlckNvbnN0cmFpbnQoaW5pdGlhbENvbnN0cmFpbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBhcHBsaWVkVW5uYW1lZChEeW5hbWljVXNlIGR5bmFtaWNVc2UsIE1lbWJlckVudGl0eSBtZW1iZXIsCiAgICAgIGNvdmFyaWFudCBKQ2xvc2VkV29ybGQgd29ybGQpIHsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gZHluYW1pY1VzZS5zZWxlY3RvcjsKICAgIFR5cGVNYXNrIG1hc2sgPSBkeW5hbWljVXNlLnJlY2VpdmVyQ29uc3RyYWludDsKICAgIHJldHVybiBzZWxlY3Rvci5hcHBsaWVzVW5uYW1lZChtZW1iZXIpICYmCiAgICAgICAgKG1hc2sgPT0gbnVsbCB8fCBtYXNrLmNhbkhpdChtZW1iZXIsIHNlbGVjdG9yLm1lbWJlck5hbWUsIHdvcmxkKSk7CiAgfQp9CgovLy8gRW51bSB1c2VkIGZvciBpZGVudGlmeWluZyBbVHlwZU1hc2tdIHN1YmNsYXNzZXMgaW4gc2VyaWFsaXphdGlvbi4KZW51bSBUeXBlTWFza0tpbmQgewogIGZsYXQsCiAgdW5pb24sCiAgY29udGFpbmVyLAogIHNldCwKICBtYXAsCiAgZGljdGlvbmFyeSwKICB2YWx1ZSwKfQoKLy8vIEEgdHlwZSBtYXNrIHJlcHJlc2VudHMgYSBzZXQgb2YgY29udGFpbmVkIGNsYXNzZXMsIGJ1dCB0aGUKLy8vIG9wZXJhdGlvbnMgb24gaXQgYXJlIG5vdCBndWFyYW50ZWVkIHRvIGJlIHByZWNpc2UgYW5kIHRoZXkgbWF5Ci8vLyB5aWVsZCBjb25zZXJ2YXRpdmUgYW5zd2VycyB0aGF0IGNvbnRhaW4gdG9vIG1hbnkgY2xhc3Nlcy4KYWJzdHJhY3QgY2xhc3MgVHlwZU1hc2sgaW1wbGVtZW50cyBBYnN0cmFjdFZhbHVlIHsKICBmYWN0b3J5IFR5cGVNYXNrKAogICAgICBDbGFzc0VudGl0eSBiYXNlLCBpbnQga2luZCwgYm9vbCBpc051bGxhYmxlLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBuZXcgRmxhdFR5cGVNYXNrLm5vcm1hbGl6ZWQoCiAgICAgICAgYmFzZSwgKGtpbmQgPDwgMSkgfCAoaXNOdWxsYWJsZSA/IDEgOiAwKSwgY2xvc2VkV29ybGQpOwogIH0KCiAgY29uc3QgZmFjdG9yeSBUeXBlTWFzay5lbXB0eSgpID0gRmxhdFR5cGVNYXNrLmVtcHR5OwoKICBmYWN0b3J5IFR5cGVNYXNrLmV4YWN0KENsYXNzRW50aXR5IGJhc2UsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgYXNzZXJ0KAogICAgICAgIGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzSW5zdGFudGlhdGVkKGJhc2UpLAogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBiYXNlID8/IENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAgICJDYW5ub3QgY3JlYXRlIGV4YWN0IHR5cGUgbWFzayBmb3IgdW5pbnN0YW50aWF0ZWQgIgogICAgICAgICAgICAiY2xhc3MgJGJhc2UuXG4ke2Nsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmR1bXAoYmFzZSl9IikpOwogICAgcmV0dXJuIG5ldyBGbGF0VHlwZU1hc2suZXhhY3QoYmFzZSk7CiAgfQoKICBmYWN0b3J5IFR5cGVNYXNrLmV4YWN0T3JFbXB0eShDbGFzc0VudGl0eSBiYXNlLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmIChjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc0luc3RhbnRpYXRlZChiYXNlKSkKICAgICAgcmV0dXJuIG5ldyBGbGF0VHlwZU1hc2suZXhhY3QoYmFzZSk7CiAgICByZXR1cm4gY29uc3QgVHlwZU1hc2suZW1wdHkoKTsKICB9CgogIGZhY3RvcnkgVHlwZU1hc2suc3ViY2xhc3MoQ2xhc3NFbnRpdHkgYmFzZSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBhc3NlcnQoCiAgICAgICAgY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNJbnN0YW50aWF0ZWQoYmFzZSksCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGJhc2UgPz8gQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICAgIkNhbm5vdCBjcmVhdGUgc3ViY2xhc3MgdHlwZSBtYXNrIGZvciB1bmluc3RhbnRpYXRlZCAiCiAgICAgICAgICAgICJjbGFzcyAkYmFzZS5cbiR7Y2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuZHVtcChiYXNlKX0iKSk7CiAgICBDbGFzc0VudGl0eSB0b3Btb3N0ID0gY2xvc2VkV29ybGQuZ2V0THViT2ZJbnN0YW50aWF0ZWRTdWJjbGFzc2VzKGJhc2UpOwogICAgaWYgKHRvcG1vc3QgPT0gbnVsbCkgewogICAgICByZXR1cm4gbmV3IFR5cGVNYXNrLmVtcHR5KCk7CiAgICB9IGVsc2UgaWYgKGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5Lmhhc0FueVN0cmljdFN1YmNsYXNzKHRvcG1vc3QpKSB7CiAgICAgIHJldHVybiBuZXcgRmxhdFR5cGVNYXNrLnN1YmNsYXNzKHRvcG1vc3QpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBUeXBlTWFzay5leGFjdCh0b3Btb3N0LCBjbG9zZWRXb3JsZCk7CiAgICB9CiAgfQoKICBmYWN0b3J5IFR5cGVNYXNrLnN1YnR5cGUoQ2xhc3NFbnRpdHkgYmFzZSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBDbGFzc0VudGl0eSB0b3Btb3N0ID0gY2xvc2VkV29ybGQuZ2V0THViT2ZJbnN0YW50aWF0ZWRTdWJ0eXBlcyhiYXNlKTsKICAgIGlmICh0b3Btb3N0ID09IG51bGwpIHsKICAgICAgcmV0dXJuIG5ldyBUeXBlTWFzay5lbXB0eSgpOwogICAgfQogICAgaWYgKGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5Lmhhc09ubHlTdWJjbGFzc2VzKHRvcG1vc3QpKSB7CiAgICAgIHJldHVybiBuZXcgVHlwZU1hc2suc3ViY2xhc3ModG9wbW9zdCwgY2xvc2VkV29ybGQpOwogICAgfQogICAgaWYgKGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5Lmhhc0FueVN0cmljdFN1YnR5cGUodG9wbW9zdCkpIHsKICAgICAgcmV0dXJuIG5ldyBGbGF0VHlwZU1hc2suc3VidHlwZSh0b3Btb3N0KTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgVHlwZU1hc2suZXhhY3QodG9wbW9zdCwgY2xvc2VkV29ybGQpOwogICAgfQogIH0KCiAgY29uc3QgZmFjdG9yeSBUeXBlTWFzay5ub25OdWxsRW1wdHkoKSA9IEZsYXRUeXBlTWFzay5ub25OdWxsRW1wdHk7CgogIGZhY3RvcnkgVHlwZU1hc2subm9uTnVsbEV4YWN0KENsYXNzRW50aXR5IGJhc2UsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgYXNzZXJ0KAogICAgICAgIGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzSW5zdGFudGlhdGVkKGJhc2UpLAogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBiYXNlID8/IENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAgICJDYW5ub3QgY3JlYXRlIGV4YWN0IHR5cGUgbWFzayBmb3IgdW5pbnN0YW50aWF0ZWQgIgogICAgICAgICAgICAiY2xhc3MgJGJhc2UuXG4ke2Nsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmR1bXAoYmFzZSl9IikpOwogICAgcmV0dXJuIG5ldyBGbGF0VHlwZU1hc2subm9uTnVsbEV4YWN0KGJhc2UpOwogIH0KCiAgZmFjdG9yeSBUeXBlTWFzay5ub25OdWxsRXhhY3RPckVtcHR5KAogICAgICBDbGFzc0VudGl0eSBiYXNlLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmIChjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc0luc3RhbnRpYXRlZChiYXNlKSkgewogICAgICByZXR1cm4gbmV3IEZsYXRUeXBlTWFzay5ub25OdWxsRXhhY3QoYmFzZSk7CiAgICB9CiAgICByZXR1cm4gY29uc3QgVHlwZU1hc2subm9uTnVsbEVtcHR5KCk7CiAgfQoKICBmYWN0b3J5IFR5cGVNYXNrLm5vbk51bGxTdWJjbGFzcyhDbGFzc0VudGl0eSBiYXNlLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGFzc2VydCgKICAgICAgICBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc0luc3RhbnRpYXRlZChiYXNlKSwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgYmFzZSA/PyBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICAgICAiQ2Fubm90IGNyZWF0ZSBzdWJjbGFzcyB0eXBlIG1hc2sgZm9yIHVuaW5zdGFudGlhdGVkICIKICAgICAgICAgICAgImNsYXNzICRiYXNlLlxuJHtjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5kdW1wKGJhc2UpfSIpKTsKICAgIENsYXNzRW50aXR5IHRvcG1vc3QgPSBjbG9zZWRXb3JsZC5nZXRMdWJPZkluc3RhbnRpYXRlZFN1YmNsYXNzZXMoYmFzZSk7CiAgICBpZiAodG9wbW9zdCA9PSBudWxsKSB7CiAgICAgIHJldHVybiBuZXcgVHlwZU1hc2subm9uTnVsbEVtcHR5KCk7CiAgICB9IGVsc2UgaWYgKGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5Lmhhc0FueVN0cmljdFN1YmNsYXNzKHRvcG1vc3QpKSB7CiAgICAgIHJldHVybiBuZXcgRmxhdFR5cGVNYXNrLm5vbk51bGxTdWJjbGFzcyh0b3Btb3N0KTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgVHlwZU1hc2subm9uTnVsbEV4YWN0KHRvcG1vc3QsIGNsb3NlZFdvcmxkKTsKICAgIH0KICB9CgogIGZhY3RvcnkgVHlwZU1hc2subm9uTnVsbFN1YnR5cGUoQ2xhc3NFbnRpdHkgYmFzZSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBDbGFzc0VudGl0eSB0b3Btb3N0ID0gY2xvc2VkV29ybGQuZ2V0THViT2ZJbnN0YW50aWF0ZWRTdWJ0eXBlcyhiYXNlKTsKICAgIGlmICh0b3Btb3N0ID09IG51bGwpIHsKICAgICAgcmV0dXJuIG5ldyBUeXBlTWFzay5ub25OdWxsRW1wdHkoKTsKICAgIH0KICAgIGlmIChjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5oYXNPbmx5U3ViY2xhc3Nlcyh0b3Btb3N0KSkgewogICAgICByZXR1cm4gbmV3IFR5cGVNYXNrLm5vbk51bGxTdWJjbGFzcyh0b3Btb3N0LCBjbG9zZWRXb3JsZCk7CiAgICB9CiAgICBpZiAoY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaGFzQW55U3RyaWN0U3VidHlwZSh0b3Btb3N0KSkgewogICAgICByZXR1cm4gbmV3IEZsYXRUeXBlTWFzay5ub25OdWxsU3VidHlwZSh0b3Btb3N0KTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgVHlwZU1hc2subm9uTnVsbEV4YWN0KHRvcG1vc3QsIGNsb3NlZFdvcmxkKTsKICAgIH0KICB9CgogIGZhY3RvcnkgVHlwZU1hc2sudW5pb25PZihJdGVyYWJsZTxUeXBlTWFzaz4gbWFza3MsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIFVuaW9uVHlwZU1hc2sudW5pb25PZihtYXNrcywgY2xvc2VkV29ybGQpOwogIH0KCiAgLy8vIERlc2VyaWFsaXplcyBhIFtUeXBlTWFza10gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBUeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIFR5cGVNYXNrS2luZCBraW5kID0gc291cmNlLnJlYWRFbnVtKFR5cGVNYXNrS2luZC52YWx1ZXMpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgVHlwZU1hc2tLaW5kLmZsYXQ6CiAgICAgICAgcmV0dXJuIG5ldyBGbGF0VHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgY2xvc2VkV29ybGQpOwogICAgICBjYXNlIFR5cGVNYXNrS2luZC51bmlvbjoKICAgICAgICByZXR1cm4gbmV3IFVuaW9uVHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgY2xvc2VkV29ybGQpOwogICAgICBjYXNlIFR5cGVNYXNrS2luZC5jb250YWluZXI6CiAgICAgICAgcmV0dXJuIG5ldyBDb250YWluZXJUeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlLCBjbG9zZWRXb3JsZCk7CiAgICAgIGNhc2UgVHlwZU1hc2tLaW5kLnNldDoKICAgICAgICByZXR1cm4gbmV3IFNldFR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIGNsb3NlZFdvcmxkKTsKICAgICAgY2FzZSBUeXBlTWFza0tpbmQubWFwOgogICAgICAgIHJldHVybiBuZXcgTWFwVHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgY2xvc2VkV29ybGQpOwogICAgICBjYXNlIFR5cGVNYXNrS2luZC5kaWN0aW9uYXJ5OgogICAgICAgIHJldHVybiBuZXcgRGljdGlvbmFyeVR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIGNsb3NlZFdvcmxkKTsKICAgICAgY2FzZSBUeXBlTWFza0tpbmQudmFsdWU6CiAgICAgICAgcmV0dXJuIG5ldyBWYWx1ZVR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIGNsb3NlZFdvcmxkKTsKICAgIH0KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJVbmV4cGVjdGVkIFR5cGVNYXNrS2luZCAka2luZC4iKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW1R5cGVNYXNrXSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luayk7CgogIC8vLyBJZiBbbWFza10gaXMgZm9yd2FyZGluZywgcmV0dXJucyB0aGUgZmlyc3Qgbm9uLWZvcndhcmRpbmcgW1R5cGVNYXNrXSBpbgogIC8vLyBbbWFza10ncyBmb3J3YXJkaW5nIGNoYWluLgogIHN0YXRpYyBUeXBlTWFzayBub25Gb3J3YXJkaW5nTWFzayhtYXNrKSB7CiAgICB3aGlsZSAobWFzay5pc0ZvcndhcmRpbmcpIHsKICAgICAgbWFzayA9IG1hc2suZm9yd2FyZFRvOwogICAgfQogICAgcmV0dXJuIG1hc2s7CiAgfQoKICAvLy8gQXNzZXJ0cyB0aGF0IHRoaXMgbWFzayB1c2VzIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSByZXByZXNlbnRhdGlvbiBmb3IKICAvLy8gaXRzIHR5cGVzLiBDdXJyZW50bHksIHdlIG5vcm1hbGl6ZSBzdWJ0eXBlIGFuZCBzdWJjbGFzcyB0byBleGFjdCBpZiBubwogIC8vLyBzdWJ0eXBlcyBvciBzdWJjbGFzc2VzIGFyZSBwcmVzZW50IGFuZCBzdWJ0eXBlIHRvIHN1YmNsYXNzIGlmIG9ubHkKICAvLy8gc3ViY2xhc3NlcyBleGlzdC4gV2UgYWxzbyBub3JtYWxpemUgZXhhY3QgdG8gZW1wdHkgaWYgdGhlIGNvcnJlc3BvbmRpbmcKICAvLy8gYmFzZWNsYXNzIHdhcyBuZXZlciBpbnN0YW50aWF0ZWQuCiAgc3RhdGljIGJvb2wgYXNzZXJ0SXNOb3JtYWxpemVkKFR5cGVNYXNrIG1hc2ssIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgU3RyaW5nIHJlYXNvbiA9IGdldE5vdE5vcm1hbGl6ZWRSZWFzb24obWFzaywgY2xvc2VkV29ybGQpOwogICAgYXNzZXJ0KHJlYXNvbiA9PSBudWxsLAogICAgICAgIGZhaWxlZEF0KE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwgJyRtYXNrIGlzIG5vdCBub3JtYWxpemVkOiAkcmVhc29uJykpOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBzdGF0aWMgU3RyaW5nIGdldE5vdE5vcm1hbGl6ZWRSZWFzb24oCiAgICAgIFR5cGVNYXNrIG1hc2ssIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgbWFzayA9IG5vbkZvcndhcmRpbmdNYXNrKG1hc2spOwogICAgaWYgKG1hc2sgaXMgRmxhdFR5cGVNYXNrKSB7CiAgICAgIGlmIChtYXNrLmlzRW1wdHlPck51bGwpIHJldHVybiBudWxsOwogICAgICBpZiAobWFzay5pc0V4YWN0KSB7CiAgICAgICAgaWYgKCFjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc0luc3RhbnRpYXRlZChtYXNrLmJhc2UpKSB7CiAgICAgICAgICByZXR1cm4gJ0V4YWN0ICR7bWFzay5iYXNlfSBpcyBub3QgaW5zdGFudGlhdGVkLic7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGlmIChtYXNrLmlzU3ViY2xhc3MpIHsKICAgICAgICBpZiAoIWNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5Lmhhc0FueVN0cmljdFN1YmNsYXNzKG1hc2suYmFzZSkpIHsKICAgICAgICAgIHJldHVybiAnU3ViY2xhc3MgJHttYXNrLmJhc2V9IGRvZXMgbm90IGhhdmUgYW55IHN1YmNsYXNzZXMuJzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgYXNzZXJ0KG1hc2suaXNTdWJ0eXBlKTsKICAgICAgaWYgKCFjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5oYXNBbnlTdHJpY3RTdWJ0eXBlKG1hc2suYmFzZSkpIHsKICAgICAgICByZXR1cm4gJ1N1YnR5cGUgJHttYXNrLmJhc2V9IGRvZXMgbm90IGhhdmUgYW55IHN1YmNsYXNzZXMuJzsKICAgICAgfQogICAgICBpZiAoY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaGFzT25seVN1YmNsYXNzZXMobWFzay5iYXNlKSkgewogICAgICAgIHJldHVybiAnU3VidHlwZSAke21hc2suYmFzZX0gb25seSBoYXMgc3ViY2xhc3Nlcy4nOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIGlmIChtYXNrIGlzIFVuaW9uVHlwZU1hc2spIHsKICAgICAgZm9yIChUeXBlTWFzayBzdWJtYXNrIGluIG1hc2suZGlzam9pbnRNYXNrcykgewogICAgICAgIFN0cmluZyBzdWJtYXNrUmVhc29uID0gZ2V0Tm90Tm9ybWFsaXplZFJlYXNvbihzdWJtYXNrLCBjbG9zZWRXb3JsZCk7CiAgICAgICAgaWYgKHN1Ym1hc2tSZWFzb24gIT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuICdTdWJtYXNrICRzdWJtYXNrIGluICRtYXNrOiAkc3VibWFza1JlYXNvbi4nOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHJldHVybiAnVW5rbm93biB0eXBlIG1hc2sgJG1hc2suJzsKICB9CgogIC8vLyBSZXR1cm5zIGEgbnVsbGFibGUgdmFyaWFudCBvZiBbdGhpc10gdHlwZSBtYXNrLgogIFR5cGVNYXNrIG51bGxhYmxlKCk7CgogIC8vLyBSZXR1cm5zIGEgbm9uLW51bGxhYmxlIHZhcmlhbnQgb2YgW3RoaXNdIHR5cGUgbWFzay4KICBUeXBlTWFzayBub25OdWxsYWJsZSgpOwoKICAvLy8gV2hldGhlciBub3RoaW5nIG1hdGNoZXMgdGhpcyBtYXNrLCBub3QgZXZlbiBudWxsLgogIGJvb2wgZ2V0IGlzRW1wdHk7CgogIC8vLyBXaGV0aGVyIG51bGwgaXMgYSB2YWxpZCB2YWx1ZSBvZiB0aGlzIG1hc2suCiAgYm9vbCBnZXQgaXNOdWxsYWJsZTsKCiAgLy8vIFdoZXRoZXIgdGhlIG9ubHkgcG9zc2libGUgdmFsdWUgaW4gdGhpcyBtYXNrIGlzIE51bGwuCiAgYm9vbCBnZXQgaXNOdWxsOwoKICAvLy8gV2hldGhlciBbaXNFbXB0eV0gb3IgW2lzTnVsbF0gaXMgdHJ1ZS4KICBib29sIGdldCBpc0VtcHR5T3JOdWxsOwoKICAvLy8gV2hldGhlciB0aGlzIG1hc2sgb25seSBpbmNsdWRlcyBpbnN0YW5jZXMgb2YgYW4gZXhhY3QgY2xhc3MsIGFuZCBub25lIG9mCiAgLy8vIGl0J3Mgc3ViY2xhc3NlcyBvciBzdWJ0eXBlcy4KICBib29sIGdldCBpc0V4YWN0OwoKICAvLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgbWFzayBpcyBhIHVuaW9uIHR5cGUuCiAgYm9vbCBnZXQgaXNVbmlvbjsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoaXMgbWFzayBpcyBhIFtDb250YWluZXJUeXBlTWFza10uCiAgYm9vbCBnZXQgaXNDb250YWluZXI7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIG1hc2sgaXMgYSBbU2V0VHlwZU1hc2tdLgogIGJvb2wgZ2V0IGlzU2V0OwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBtYXNrIGlzIGEgW01hcFR5cGVNYXNrXS4KICBib29sIGdldCBpc01hcDsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoaXMgbWFzayBpcyBhIFtNYXBUeXBlTWFza10gaW4gZGljdGlvbmFyeSBtb2RlLCBpLmUuLAogIC8vLyBhbGwga2V5cyBhcmUga25vd24gc3RyaW5nIHZhbHVlcyBhbmQgd2UgaGF2ZSBzcGVjaWZpYyB0eXBlIGluZm9ybWF0aW9uIGZvcgogIC8vLyBjb3JyZXNwb25kaW5nIHZhbHVlcy4KICBib29sIGdldCBpc0RpY3Rpb25hcnk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIG1hc2sgaXMgd3JhcHBpbmcgYW5vdGhlciBtYXNrIGZvciB0aGUgcHVycG9zZSBvZgogIC8vLyB0cmFjaW5nLgogIGJvb2wgZ2V0IGlzRm9yd2FyZGluZzsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoaXMgbWFzayBob2xkcyBlbmNvZGVzIGFuIGV4YWN0IHZhbHVlIHdpdGhpbiBhIHR5cGUuCiAgYm9vbCBnZXQgaXNWYWx1ZTsKCiAgYm9vbCBjb250YWluc09ubHlJbnQoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKTsKICBib29sIGNvbnRhaW5zT25seURvdWJsZShKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpOwogIGJvb2wgY29udGFpbnNPbmx5TnVtKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCk7CiAgYm9vbCBjb250YWluc09ubHlCb29sKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCk7CiAgYm9vbCBjb250YWluc09ubHlTdHJpbmcoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKTsKICBib29sIGNvbnRhaW5zT25seShDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gQ29tcGFyZXMgdHdvIFtUeXBlTWFza10gb2JqZWN0cyBmb3Igc3RydWN0dXJhbCBlcXVhbGl0eS4KICAvLy8KICAvLy8gTm90ZTogVGhpcyBtYXkgZGlmZmVyIGZyb20gc2VtYW50aWMgZXF1YWxpdHkgaW4gdGhlIHNldCBjb250YWlubWVudCBzZW5zZS4KICAvLy8gICBVc2UgW2NvbnRhaW5zTWFza10gYW5kIFtpc0luTWFza10gZm9yIHRoYXQsIGluc3RlYWQuCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcik7CgogIC8vLyBJZiB0aGlzIHJldHVybnMgYHRydWVgLCBbb3RoZXJdIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBzdXBlcnR5cGUgb2YgdGhpcwogIC8vLyBtYXNrLCBpLmUuLCB0aGlzIG1hc2sgaXMgaW4gW290aGVyXS4gSG93ZXZlciwgdGhlIGludmVyc2UgZG9lcyBub3QgaG9sZC4KICAvLy8gRW5hYmxlIFtVbmlvblR5cGVNYXNrLlBFUkZPUk1fRVhUUkFfQ09OVEFJTlNfQ0hFQ0tdIHRvIGJlIG5vdGlmaWVkIG9mCiAgLy8vIGZhbHNlIG5lZ2F0aXZlcy4KICBib29sIGlzSW5NYXNrKFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpOwoKICAvLy8gSWYgdGhpcyByZXR1cm5zIGB0cnVlYCwgW290aGVyXSBpcyBndWFyYW50ZWVkIHRvIGJlIGEgc3VidHlwZSBvZiB0aGlzCiAgLy8vIG1hc2ssIGkuZS4gdGhpcyBtYXNrIGNvbnRhaW5zIFtvdGhlcl0uIEhvd2V2ZXIsIHRoZSBpbnZlcnNlIGRvZXMgbm90IGhvbGQuCiAgLy8vIEVuYWJsZSBbVW5pb25UeXBlTWFzay5QRVJGT1JNX0VYVFJBX0NPTlRBSU5TX0NIRUNLXSB0byBiZSBub3RpZmllZCBvZgogIC8vLyBmYWxzZSBuZWdhdGl2ZXMuCiAgYm9vbCBjb250YWluc01hc2soVHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCk7CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgdGhpcyB0eXBlIG1hc2sgaXMgYW4gaW5zdGFuY2Ugb2YgW2Nsc10uCiAgYm9vbCBzYXRpc2ZpZXMoQ2xhc3NFbnRpdHkgY2xzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpOwoKICAvLy8gUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGlzIHR5cGUgbWFzayBjb250YWlucyB0aGUgZ2l2ZW4gY2xhc3MgW2Nsc10uCiAgYm9vbCBjb250YWlucyhDbGFzc0VudGl0eSBjbHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCk7CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoaXMgdHlwZSBtYXNrIGNvbnRhaW5zIGFsbCB0eXBlcy4KICBib29sIGNvbnRhaW5zQWxsKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCk7CgogIC8vLyBSZXR1cm5zIHRoZSBbQ2xhc3NFbnRpdHldIGlmIHRoaXMgdHlwZSByZXByZXNlbnRzIGEgc2luZ2xlIGNsYXNzLAogIC8vLyBvdGhlcndpc2UgcmV0dXJucyBgbnVsbGAuICBUaGlzIG1ldGhvZCBpcyBjb25zZXJ2YXRpdmUuCiAgQ2xhc3NFbnRpdHkgc2luZ2xlQ2xhc3MoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKTsKCiAgLy8vIFJldHVybnMgYSB0eXBlIG1hc2sgcmVwcmVzZW50aW5nIHRoZSB1bmlvbiBvZiBbdGhpc10gYW5kIFtvdGhlcl0uCiAgVHlwZU1hc2sgdW5pb24oVHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCk7CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGludGVyc2VjdGlvbiBvZiB0aGlzIGFuZCBbb3RoZXJdIGlzIGVtcHR5LgogIGJvb2wgaXNEaXNqb2ludChUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKTsKCiAgLy8vIFJldHVybnMgYSB0eXBlIG1hc2sgcmVwcmVzZW50aW5nIHRoZSBpbnRlcnNlY3Rpb24gb2YgW3RoaXNdIGFuZCBbb3RoZXJdLgogIFR5cGVNYXNrIGludGVyc2VjdGlvbihUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKTsKCiAgLy8vIFJldHVybnMgd2hldGhlciBbZWxlbWVudF0gaXMgYSBwb3RlbnRpYWwgdGFyZ2V0IHdoZW4gYmVpbmcgaW52b2tlZCBvbiB0aGlzCiAgLy8vIHR5cGUgbWFzay4KICAvLy8KICAvLy8KICAvLy8gW25hbWVdIGlzIHVzZWQgdG8gZW5zdXJlIGxpYnJhcnkgcHJpdmFjeSBpcyB0YWtlbiBpbnRvIGFjY291bnQuCiAgYm9vbCBjYW5IaXQoTWVtYmVyRW50aXR5IGVsZW1lbnQsIE5hbWUgbmFtZSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKTsKCiAgLy8vIFJldHVybnMgd2hldGhlciB0aGlzIFtUeXBlTWFza10gYXBwbGllZCB0byBbc2VsZWN0b3JdIGNhbiBoaXQgYQogIC8vLyBbbm9TdWNoTWV0aG9kXS4KICBib29sIG5lZWRzTm9TdWNoTWV0aG9kSGFuZGxpbmcoU2VsZWN0b3Igc2VsZWN0b3IsIEpDbG9zZWRXb3JsZCB3b3JsZCk7CgogIC8vLyBSZXR1cm5zIHRoZSBbZWxlbWVudF0gdGhhdCBpcyBrbm93biB0byBhbHdheXMgYmUgaGl0IGF0IHJ1bnRpbWUKICAvLy8gb24gdGhpcyBtYXNrLiBSZXR1cm5zIG51bGwgaWYgdGhlcmUgaXMgbm9uZS4KICBNZW1iZXJFbnRpdHkgbG9jYXRlU2luZ2xlTWVtYmVyKFNlbGVjdG9yIHNlbGVjdG9yLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpOwp9CoGiAE5OPAEPAVBQEEIWGAEMRRwmJDoGEgQBDEoRFko+BiQ9FQgGEgQBDC4dGBQVEwYkHQQBDBYRFiEYDRcGBAIBOhwBDD8pBAEMOSsEAgFIJAEMOTUnMgQBDEImLTMuSwQCAUYUCAkNBwcOCQIBP0M+MxRPKEAEATcBRww5Ei9ASCkEAU45KyMEAUoMORIvQ0hMGyNLMQ03BgQBSUobIwZBOgZDMA03BgQBRQFODDkSL0BIMAQBKDQ7MgYqBAFRDDkSL0NITBsqSzgNPgYEAVBKGyoGQUEGQzcNPgYEAVE2BAE2JzU+FB5JH0ojTh1IHUgkTx9KBkIEASwnAU4hLCAdBhEEAUtNSU4oTD8bThEEASgxJCArGkU8ChUIHUtIChUIHkhFCEU8CBMoNU0lPwoIEwYnBAE2FwE6GgE4FAEyFwE8EwEtGgFPIxQBMRQBPBgBNhIBNhIBT1EcGQFODxkBThQBMjUyMzUmAT8GUT0MGwFOT0wXOwFMUUwXPwE+PQFMPAFALgFIPjUBSDwBRT0BT0MBUREGBkZKAUYWSQFGM1ACATZwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci90eXBlbWFza3MvdHlwZV9tYXNrLmRhcnRFc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvdHlwZW1hc2tzL3VuaW9uX3R5cGVfbWFzay5kYXJ0vIEvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBtYXNrczsKCmNsYXNzIFVuaW9uVHlwZU1hc2sgaW1wbGVtZW50cyBUeXBlTWFzayB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtVbmlvblR5cGVNYXNrXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ3VuaW9uLXR5cGUtbWFzayc7CgogIHN0YXRpYyBjb25zdCBpbnQgTUFYX1VOSU9OX0xFTkdUSCA9IDQ7CgogIC8vIFNldCB0aGlzIGZsYWcgdG8gYHRydWVgIHRvIHBlcmZvcm0gYSBzZXQtbWVtYmVyc2hpcCBiYXNlZCBjb250YWlubWVudCBjaGVjawogIC8vIGluc3RlYWQgb2YgcmVseWluZyBvbiBub3JtYWxpemVkIHR5cGVzLiBUaGlzIGlzIHF1aXRlIHNsb3cgYnV0IGNhbiBiZQogIC8vIGhlbHBmdWwgaW4gZGVidWdnaW5nLgogIHN0YXRpYyBjb25zdCBib29sIFBFUkZPUk1fRVhUUkFfQ09OVEFJTlNfQ0hFQ0sgPSBmYWxzZTsKCiAgZmluYWwgTGlzdDxGbGF0VHlwZU1hc2s+IGRpc2pvaW50TWFza3M7CgogIFVuaW9uVHlwZU1hc2suX2ludGVybmFsKHRoaXMuZGlzam9pbnRNYXNrcykgewogICAgYXNzZXJ0KGRpc2pvaW50TWFza3MubGVuZ3RoID4gMSk7CiAgICBhc3NlcnQoZGlzam9pbnRNYXNrcy5ldmVyeSgoVHlwZU1hc2sgbWFzaykgPT4gIW1hc2suaXNVbmlvbikpOwogIH0KCiAgLy8vIERlc2VyaWFsaXplcyBhIFtVbmlvblR5cGVNYXNrXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IFVuaW9uVHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIExpc3Q8RmxhdFR5cGVNYXNrPiBkaXNqb2ludE1hc2tzID0gc291cmNlCiAgICAgICAgLnJlYWRMaXN0KCgpID0+IG5ldyBUeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlLCBjbG9zZWRXb3JsZCkpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBVbmlvblR5cGVNYXNrLl9pbnRlcm5hbChkaXNqb2ludE1hc2tzKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW1VuaW9uVHlwZU1hc2tdIHRvIFtzaW5rXS4KICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShUeXBlTWFza0tpbmQudW5pb24pOwogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUxpc3QoCiAgICAgICAgZGlzam9pbnRNYXNrcywgKEZsYXRUeXBlTWFzayBtYXNrKSA9PiBtYXNrLndyaXRlVG9EYXRhU2luayhzaW5rKSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgc3RhdGljIFR5cGVNYXNrIHVuaW9uT2YoSXRlcmFibGU8VHlwZU1hc2s+IG1hc2tzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGFzc2VydCgKICAgICAgICBtYXNrcy5ldmVyeSgobWFzaykgPT4gVHlwZU1hc2suYXNzZXJ0SXNOb3JtYWxpemVkKG1hc2ssIGNsb3NlZFdvcmxkKSkpOwogICAgTGlzdDxGbGF0VHlwZU1hc2s+IGRpc2pvaW50ID0gPEZsYXRUeXBlTWFzaz5bXTsKICAgIHVuaW9uT2ZIZWxwZXIobWFza3MsIGRpc2pvaW50LCBjbG9zZWRXb3JsZCk7CiAgICBpZiAoZGlzam9pbnQuaXNFbXB0eSkgcmV0dXJuIG5ldyBUeXBlTWFzay5ub25OdWxsRW1wdHkoKTsKICAgIGlmIChkaXNqb2ludC5sZW5ndGggPiBNQVhfVU5JT05fTEVOR1RIKSB7CiAgICAgIHJldHVybiBmbGF0dGVuKGRpc2pvaW50LCBjbG9zZWRXb3JsZCk7CiAgICB9CiAgICBpZiAoZGlzam9pbnQubGVuZ3RoID09IDEpIHJldHVybiBkaXNqb2ludFswXTsKICAgIFVuaW9uVHlwZU1hc2sgdW5pb24gPSBuZXcgVW5pb25UeXBlTWFzay5faW50ZXJuYWwoZGlzam9pbnQpOwogICAgYXNzZXJ0KFR5cGVNYXNrLmFzc2VydElzTm9ybWFsaXplZCh1bmlvbiwgY2xvc2VkV29ybGQpKTsKICAgIHJldHVybiB1bmlvbjsKICB9CgogIHN0YXRpYyB2b2lkIHVuaW9uT2ZIZWxwZXIoSXRlcmFibGU8VHlwZU1hc2s+IG1hc2tzLAogICAgICBMaXN0PEZsYXRUeXBlTWFzaz4gZGlzam9pbnQsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSW1wb3NlIGFuIG9yZGVyIG9uIHRoZSBtYXNrIHRvIGVuc3VyZSBzdWJjbGFzcyBtYXNrcwogICAgLy8gYXJlIHByZWZlcnJlZCB0byBzdWJ0eXBlIG1hc2tzLgogICAgZm9yIChUeXBlTWFzayBtYXNrIGluIG1hc2tzKSB7CiAgICAgIG1hc2sgPSBUeXBlTWFzay5ub25Gb3J3YXJkaW5nTWFzayhtYXNrKTsKICAgICAgaWYgKG1hc2suaXNVbmlvbikgewogICAgICAgIFVuaW9uVHlwZU1hc2sgdW5pb24gPSBtYXNrOwogICAgICAgIHVuaW9uT2ZIZWxwZXIodW5pb24uZGlzam9pbnRNYXNrcywgZGlzam9pbnQsIGNsb3NlZFdvcmxkKTsKICAgICAgfSBlbHNlIGlmIChtYXNrLmlzRW1wdHkpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBGbGF0VHlwZU1hc2sgZmxhdE1hc2sgPSBtYXNrOwogICAgICAgIGludCBpbkxpc3RJbmRleCA9IC0xOwogICAgICAgIGJvb2wgY292ZXJlZCA9IGZhbHNlOwoKICAgICAgICAvLyBJdGVyYXRlIG92ZXIgW2Rpc2pvaW50XSB0byBmaW5kIG91dCBpZiBvbmUgb2YgdGhlIG1hc2sKICAgICAgICAvLyBhbHJlYWR5IGNvdmVycyBbbWFza10uCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkaXNqb2ludC5sZW5ndGg7IGkrKykgewogICAgICAgICAgRmxhdFR5cGVNYXNrIGN1cnJlbnQgPSBkaXNqb2ludFtpXTsKICAgICAgICAgIGlmIChjdXJyZW50ID09IG51bGwpIGNvbnRpbnVlOwogICAgICAgICAgVHlwZU1hc2sgbmV3TWFzayA9IGZsYXRNYXNrLnVuaW9uKGN1cnJlbnQsIGNsb3NlZFdvcmxkKTsKICAgICAgICAgIC8vIElmIHdlIGhhdmUgZm91bmQgYSBkaXNqb2ludCB1bmlvbiwgY29udGludWUgaXRlcmF0aW5nLgogICAgICAgICAgaWYgKG5ld01hc2suaXNVbmlvbikgY29udGludWU7CiAgICAgICAgICBjb3ZlcmVkID0gdHJ1ZTsKICAgICAgICAgIC8vIFdlIGZvdW5kIGEgbWFzayB0aGF0IGlzIGVpdGhlciBlcXVhbCB0byBbbWFza10gb3IgaXMgYQogICAgICAgICAgLy8gc3VwZXJ0eXBlIG9mIFttYXNrXS4KICAgICAgICAgIGlmIChjdXJyZW50ID09IG5ld01hc2spIGJyZWFrOwoKICAgICAgICAgIC8vIFttYXNrXSBpcyBhIHN1cGVydHlwZSBvZiBbY3VycmVudF0sIHJlcGxhY2UgdGhlIFtkaXNqb2ludF0KICAgICAgICAgIC8vIGxpc3Qgd2l0aCBbbmV3TWFza10gaW5zdGVhZCBvZiBbY3VycmVudF0uIE5vdGUgdGhhdAogICAgICAgICAgLy8gW25ld01hc2tdIG1heSBjb250YWluIGRpZmZlcmVudCBpbmZvcm1hdGlvbiB0aGFuIFttYXNrXSwKICAgICAgICAgIC8vIGxpa2UgbnVsbGFiaWxpdHkuCiAgICAgICAgICBkaXNqb2ludFtpXSA9IG5ld01hc2s7CiAgICAgICAgICBmbGF0TWFzayA9IG5ld01hc2s7CgogICAgICAgICAgaWYgKGluTGlzdEluZGV4ICE9IC0xKSB7CiAgICAgICAgICAgIC8vIElmIHRoZSBtYXNrIHdhcyBhbHJlYWR5IGNvdmVyZWQsIHdlIHJlbW92ZSB0aGUgcHJldmlvdXMKICAgICAgICAgICAgLy8gcGxhY2Ugd2hlcmUgaXQgd2FzIGluc2VydGVkLiBUaGlzIG5ldyBtYXNrIHN1YnN1bWVzIHRoZQogICAgICAgICAgICAvLyBwcmV2aW91c2x5IGNvdmVyZWQgb25lLgogICAgICAgICAgICBkaXNqb2ludC5yZW1vdmVBdChpbkxpc3RJbmRleCk7CiAgICAgICAgICAgIGktLTsKICAgICAgICAgIH0KICAgICAgICAgIC8vIFJlY29yZCB3aGVyZSB0aGUgbWFzayB3YXMgaW5zZXJ0ZWQuCiAgICAgICAgICBpbkxpc3RJbmRleCA9IGk7CiAgICAgICAgfQogICAgICAgIC8vIElmIG5vbmUgb2YgdGhlIG1hc2tzIGluIFtkaXNqb2ludF0gY292ZXJzIFttYXNrXSwgd2UganVzdAogICAgICAgIC8vIGFkZCBbbWFza10gdG8gdGhlIGxpc3QuCiAgICAgICAgaWYgKCFjb3ZlcmVkKSBkaXNqb2ludC5hZGQoZmxhdE1hc2spOwogICAgICB9CiAgICB9CiAgfQoKICBzdGF0aWMgVHlwZU1hc2sgZmxhdHRlbihMaXN0PEZsYXRUeXBlTWFzaz4gbWFza3MsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTW92ZSB0aGlzIGNvbXB1dGF0aW9uIHRvIFtDbG9zZWRXb3JsZF0gYW5kIHVzZSB0aGUKICAgIC8vIGNsYXNzIHNldCBzdHJ1Y3R1cmVzLgogICAgaWYgKG1hc2tzLmlzRW1wdHkpIHRocm93IEFyZ3VtZW50RXJyb3IudmFsdWUobWFza3MsICdtYXNrcycpOwogICAgLy8gSWYgZWl0aGVyIHR5cGUgbWFzayBpcyBhIHN1YnR5cGUgdHlwZSBtYXNrLCB3ZSBjYW5ub3QgdXNlIGEKICAgIC8vIHN1YmNsYXNzIHR5cGUgbWFzayB0byByZXByZXNlbnQgdGhlaXIgdW5pb24uCiAgICBib29sIHVzZVN1YmNsYXNzID0gbWFza3MuZXZlcnkoKGUpID0+ICFlLmlzU3VidHlwZSk7CiAgICBib29sIGlzTnVsbGFibGUgPSBtYXNrcy5hbnkoKGUpID0+IGUuaXNOdWxsYWJsZSk7CgogICAgTGlzdDxDbGFzc0VudGl0eT4gbWFza3NCYXNlcyA9IG1hc2tzLm1hcCgobWFzaykgPT4gbWFzay5iYXNlKS50b0xpc3QoKTsKICAgIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBjYW5kaWRhdGVzID0KICAgICAgICBjbG9zZWRXb3JsZC5jb21tb25TdXBlcnR5cGVzT2YobWFza3NCYXNlcyk7CgogICAgLy8gQ29tcHV0ZSB0aGUgYmVzdCBjYW5kaWRhdGUgYW5kIGl0cyBraW5kLgogICAgQ2xhc3NFbnRpdHkgYmVzdEVsZW1lbnQ7CiAgICBpbnQgYmVzdEtpbmQ7CiAgICBpbnQgYmVzdFNpemU7CiAgICBmb3IgKENsYXNzRW50aXR5IGNhbmRpZGF0ZSBpbiBjYW5kaWRhdGVzKSB7CiAgICAgIGJvb2wgaXNJbnN0YW50aWF0ZWRTdHJpY3RTdWJjbGFzcyhjbHMpID0+CiAgICAgICAgICBjbHMgIT0gY2FuZGlkYXRlICYmCiAgICAgICAgICBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc0V4cGxpY2l0bHlJbnN0YW50aWF0ZWQoY2xzKSAmJgogICAgICAgICAgY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNTdWJjbGFzc09mKGNscywgY2FuZGlkYXRlKTsKCiAgICAgIGludCBzaXplOwogICAgICBpbnQga2luZDsKICAgICAgaWYgKHVzZVN1YmNsYXNzICYmIG1hc2tzQmFzZXMuZXZlcnkoaXNJbnN0YW50aWF0ZWRTdHJpY3RTdWJjbGFzcykpIHsKICAgICAgICAvLyBJZiBib3RoIFt0aGlzXSBhbmQgW290aGVyXSBhcmUgc3ViY2xhc3NlcyBvZiB0aGUgc3VwZXJ0eXBlLAogICAgICAgIC8vIHRoZW4gd2UgcHJlZmVyIHRvIGNvbnN0cnVjdCBhIHN1YmNsYXNzIHR5cGUgbWFzayBiZWNhdXNlIGl0CiAgICAgICAgLy8gd2lsbCBhbHdheXMgYmUgYXQgbGVhc3QgYXMgc21hbGwgYXMgdGhlIGNvcnJlc3BvbmRpbmcKICAgICAgICAvLyBzdWJ0eXBlIHR5cGUgbWFzay4KICAgICAgICBraW5kID0gRmxhdFR5cGVNYXNrLlNVQkNMQVNTOwogICAgICAgIC8vIFRPRE8oc2lnbXVuZCwgam9obm5pd2ludGhlcik6IGNvbXB1dGluZyBsZW5ndGggaGVyZSAoYW5kIGJlbG93KSBpcwogICAgICAgIC8vIGV4cGVuc2l2ZS4gSWYgd2UgY2FuJ3QgcHJldmVudCBgZmxhdHRlbmAgZnJvbSBiZWluZyBjYWxsZWQgYSBsb3QsIGl0CiAgICAgICAgLy8gbWlnaHQgYmUgd29ydGggY2FjaGluZyByZXN1bHRzLgogICAgICAgIHNpemUgPSBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5zdHJpY3RTdWJjbGFzc0NvdW50KGNhbmRpZGF0ZSk7CiAgICAgICAgYXNzZXJ0KAogICAgICAgICAgICBzaXplIDw9IGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LnN0cmljdFN1YnR5cGVDb3VudChjYW5kaWRhdGUpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBraW5kID0gRmxhdFR5cGVNYXNrLlNVQlRZUEU7CiAgICAgICAgc2l6ZSA9IGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LnN0cmljdFN1YnR5cGVDb3VudChjYW5kaWRhdGUpOwogICAgICB9CiAgICAgIC8vIFVwZGF0ZSB0aGUgYmVzdCBjYW5kaWRhdGUgaWYgdGhlIG5ldyBvbmUgaXMgYmV0dGVyLgogICAgICBpZiAoYmVzdEVsZW1lbnQgPT0gbnVsbCB8fCBzaXplIDwgYmVzdFNpemUpIHsKICAgICAgICBiZXN0RWxlbWVudCA9IGNhbmRpZGF0ZTsKICAgICAgICBiZXN0U2l6ZSA9IHNpemU7CiAgICAgICAgYmVzdEtpbmQgPSBraW5kOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IFR5cGVNYXNrKGJlc3RFbGVtZW50LCBiZXN0S2luZCwgaXNOdWxsYWJsZSwgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgdW5pb24oZHluYW1pYyBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBvdGhlciA9IFR5cGVNYXNrLm5vbkZvcndhcmRpbmdNYXNrKG90aGVyKTsKICAgIGlmICghb3RoZXIuaXNVbmlvbiAmJiBkaXNqb2ludE1hc2tzLmNvbnRhaW5zKG90aGVyKSkgcmV0dXJuIHRoaXM7CgogICAgTGlzdDxGbGF0VHlwZU1hc2s+IG5ld0xpc3QgPSBuZXcgTGlzdDxGbGF0VHlwZU1hc2s+LmZyb20oZGlzam9pbnRNYXNrcyk7CiAgICBpZiAoIW90aGVyLmlzVW5pb24pIHsKICAgICAgbmV3TGlzdC5hZGQob3RoZXIpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KG90aGVyIGlzIFVuaW9uVHlwZU1hc2spOwogICAgICBuZXdMaXN0LmFkZEFsbChvdGhlci5kaXNqb2ludE1hc2tzKTsKICAgIH0KICAgIHJldHVybiBuZXcgVHlwZU1hc2sudW5pb25PZihuZXdMaXN0LCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBpbnRlcnNlY3Rpb24oZHluYW1pYyBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBvdGhlciA9IFR5cGVNYXNrLm5vbkZvcndhcmRpbmdNYXNrKG90aGVyKTsKICAgIGlmICghb3RoZXIuaXNVbmlvbiAmJiBkaXNqb2ludE1hc2tzLmNvbnRhaW5zKG90aGVyKSkgcmV0dXJuIG90aGVyOwogICAgaWYgKG90aGVyLmlzVW5pb24gJiYgdGhpcyA9PSBvdGhlcikgcmV0dXJuIHRoaXM7CgogICAgTGlzdDxUeXBlTWFzaz4gaW50ZXJzZWN0aW9ucyA9IDxUeXBlTWFzaz5bXTsKICAgIGZvciAoVHlwZU1hc2sgY3VycmVudCBpbiBkaXNqb2ludE1hc2tzKSB7CiAgICAgIGlmIChvdGhlci5pc1VuaW9uKSB7CiAgICAgICAgaWYgKG90aGVyLmRpc2pvaW50TWFza3MuY29udGFpbnMoY3VycmVudCkpIHsKICAgICAgICAgIGludGVyc2VjdGlvbnMuYWRkKGN1cnJlbnQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmb3IgKEZsYXRUeXBlTWFzayBmbGF0T3RoZXIgaW4gb3RoZXIuZGlzam9pbnRNYXNrcykgewogICAgICAgICAgICBpbnRlcnNlY3Rpb25zLmFkZChjdXJyZW50LmludGVyc2VjdGlvbihmbGF0T3RoZXIsIGNsb3NlZFdvcmxkKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGludGVyc2VjdGlvbnMuYWRkKGN1cnJlbnQuaW50ZXJzZWN0aW9uKG90aGVyLCBjbG9zZWRXb3JsZCkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IFR5cGVNYXNrLnVuaW9uT2YoaW50ZXJzZWN0aW9ucywgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Rpc2pvaW50KFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGZvciAodmFyIGN1cnJlbnQgaW4gZGlzam9pbnRNYXNrcykgewogICAgICBpZiAoIWN1cnJlbnQuaXNEaXNqb2ludChvdGhlciwgY2xvc2VkV29ybGQpKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIG51bGxhYmxlKCkgewogICAgaWYgKGlzTnVsbGFibGUpIHJldHVybiB0aGlzOwogICAgTGlzdDxGbGF0VHlwZU1hc2s+IG5ld0xpc3QgPSBuZXcgTGlzdDxGbGF0VHlwZU1hc2s+LmZyb20oZGlzam9pbnRNYXNrcyk7CiAgICBuZXdMaXN0WzBdID0gbmV3TGlzdFswXS5udWxsYWJsZSgpOwogICAgcmV0dXJuIG5ldyBVbmlvblR5cGVNYXNrLl9pbnRlcm5hbChuZXdMaXN0KTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIG5vbk51bGxhYmxlKCkgewogICAgaWYgKCFpc051bGxhYmxlKSByZXR1cm4gdGhpczsKICAgIEl0ZXJhYmxlPEZsYXRUeXBlTWFzaz4gbmV3SXRlcmFibGUgPSBkaXNqb2ludE1hc2tzLm1hcCgoZSkgewogICAgICBGbGF0VHlwZU1hc2sgciA9IGUubm9uTnVsbGFibGUoKTsKICAgICAgcmV0dXJuIHI7CiAgICB9KS50b0xpc3QoKTsKICAgIHJldHVybiBuZXcgVW5pb25UeXBlTWFzay5faW50ZXJuYWwobmV3SXRlcmFibGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFbXB0eU9yTnVsbCA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0VtcHR5ID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTnVsbCA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc051bGxhYmxlID0+IGRpc2pvaW50TWFza3MuYW55KChlKSA9PiBlLmlzTnVsbGFibGUpOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRXhhY3QgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNVbmlvbiA9PiB0cnVlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQ29udGFpbmVyID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU2V0ID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTWFwID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRGljdGlvbmFyeSA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0ZvcndhcmRpbmcgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNWYWx1ZSA9PiBmYWxzZTsKCiAgLy8vIENoZWNrcyB3aGV0aGVyIFtvdGhlcl0gaXMgY29udGFpbmVkIGluIHRoaXMgdW5pb24uCiAgLy8vCiAgLy8vIEludmFyaWFudHM6CiAgLy8vIC0gW290aGVyXSBtYXkgbm90IGJlIGEgW1VuaW9uVHlwZU1hc2tdIGl0c2VsZgogIC8vLyAtIHRoZSBjaGVhcCB0ZXN0IG1hdGNoaW5nIGFnYWluc3QgaW5kaXZpZHVhbCBtZW1iZXJzIG9mIFtkaXNqb2ludE1hc2tzXQogIC8vLyAgIG11c3QgaGF2ZSBmYWlsZWQuCiAgYm9vbCBzbG93Q29udGFpbnNDaGVjayhUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICAvLyBVbmlvbnMgc2hvdWxkIG5ldmVyIG1ha2UgaXQgaGVyZS4KICAgIGFzc2VydCghb3RoZXIuaXNVbmlvbik7CiAgICAvLyBFbnN1cmUgdGhlIGNoZWFwIHRlc3QgZmFpbHMuCiAgICBhc3NlcnQoIWRpc2pvaW50TWFza3MuYW55KChtYXNrKSA9PiBtYXNrLmNvbnRhaW5zTWFzayhvdGhlciwgY2xvc2VkV29ybGQpKSk7CiAgICAvLyBJZiB3ZSBjb3ZlciBvYmplY3QsIHdlIHNob3VsZCBuZXZlciBnZXQgaGVyZS4KICAgIGFzc2VydCghY29udGFpbnMoY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MsIGNsb3NlZFdvcmxkKSk7CiAgICAvLyBMaWtld2lzZSwgbnVsbG5lc3Mgc2hvdWxkIGJlIGNvdmVyZWQuCiAgICBhc3NlcnQoaXNOdWxsYWJsZSB8fCAhb3RoZXIuaXNOdWxsYWJsZSk7CiAgICAvLyBUaGUgZmFzdCB0ZXN0IGlzIHByZWNpc2UgZm9yIGV4YWN0IHR5cGVzLgogICAgaWYgKG90aGVyLmlzRXhhY3QpIHJldHVybiBmYWxzZTsKICAgIC8vIFdlIGNhbm5vdCBjb250YWluIG9iamVjdC4KICAgIGlmIChvdGhlci5jb250YWlucyhjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcywgY2xvc2VkV29ybGQpKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIEZsYXRUeXBlTWFzayBmbGF0ID0gVHlwZU1hc2subm9uRm9yd2FyZGluZ01hc2sob3RoZXIpOwogICAgLy8gQ2hlY2sgd2UgY292ZXIgdGhlIGJhc2UgY2xhc3MuCiAgICBpZiAoIWNvbnRhaW5zKGZsYXQuYmFzZSwgY2xvc2VkV29ybGQpKSByZXR1cm4gZmFsc2U7CiAgICAvLyBDaGVjayBmb3Igb3RoZXIgbWVtYmVycy4KICAgIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBtZW1iZXJzOwogICAgaWYgKGZsYXQuaXNTdWJjbGFzcykgewogICAgICBtZW1iZXJzID0gY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuc3RyaWN0U3ViY2xhc3Nlc09mKGZsYXQuYmFzZSk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoZmxhdC5pc1N1YnR5cGUpOwogICAgICBtZW1iZXJzID0gY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuc3RyaWN0U3VidHlwZXNPZihmbGF0LmJhc2UpOwogICAgfQogICAgcmV0dXJuIG1lbWJlcnMuZXZlcnkoKENsYXNzRW50aXR5IGNscykgPT4gdGhpcy5jb250YWlucyhjbHMsIGNsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSW5NYXNrKFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIG90aGVyID0gVHlwZU1hc2subm9uRm9yd2FyZGluZ01hc2sob3RoZXIpOwogICAgaWYgKGlzTnVsbGFibGUgJiYgIW90aGVyLmlzTnVsbGFibGUpIHJldHVybiBmYWxzZTsKICAgIGlmIChvdGhlci5pc1VuaW9uKSB7CiAgICAgIFVuaW9uVHlwZU1hc2sgdW5pb24gPSBvdGhlcjsKICAgICAgYm9vbCBjb250YWluZWRJbkFueU9mKEZsYXRUeXBlTWFzayBtYXNrLCBJdGVyYWJsZTxGbGF0VHlwZU1hc2s+IG1hc2tzKSB7CiAgICAgICAgLy8gbnVsbCBpcyBub3QgY2Fub25pY2FsaXplZCBmb3IgdGhlIHVuaW9uIGJ1dCBzdG9yZWQgb25seSBvbiBzb21lCiAgICAgICAgLy8gbWFza3MgaW4gW2Rpc2pvaW50TWFza10uIEl0IGhhcyBiZWVuIGNoZWNrZWQgaW4gdGhlIHN1cnJvdW5kaW5nCiAgICAgICAgLy8gY29udGV4dCwgc28gd2UgY2FuIHNhZmVseSBpZ25vcmUgaXQgaGVyZS4KICAgICAgICBGbGF0VHlwZU1hc2sgbWFza0Rpc3JlZ2FyZE51bGwgPSBtYXNrLm5vbk51bGxhYmxlKCk7CiAgICAgICAgcmV0dXJuIG1hc2tzLmFueSgoRmxhdFR5cGVNYXNrIG90aGVyKSB7CiAgICAgICAgICByZXR1cm4gb3RoZXIuY29udGFpbnNNYXNrKG1hc2tEaXNyZWdhcmROdWxsLCBjbG9zZWRXb3JsZCk7CiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIHJldHVybiBkaXNqb2ludE1hc2tzLmV2ZXJ5KChGbGF0VHlwZU1hc2sgZGlzam9pbnRNYXNrKSB7CiAgICAgICAgYm9vbCBjb250YWluZWQgPSBjb250YWluZWRJbkFueU9mKGRpc2pvaW50TWFzaywgdW5pb24uZGlzam9pbnRNYXNrcyk7CiAgICAgICAgaWYgKFBFUkZPUk1fRVhUUkFfQ09OVEFJTlNfQ0hFQ0sgJiYKICAgICAgICAgICAgIWNvbnRhaW5lZCAmJgogICAgICAgICAgICB1bmlvbi5zbG93Q29udGFpbnNDaGVjayhkaXNqb2ludE1hc2ssIGNsb3NlZFdvcmxkKSkgewogICAgICAgICAgdGhyb3cgIlR5cGVNYXNrIGJhc2VkIGNvbnRhaW5tZW50IGNoZWNrIGZhaWxlZCBmb3IgJHRoaXMgYW5kICRvdGhlci4iOwogICAgICAgIH0KICAgICAgICByZXR1cm4gY29udGFpbmVkOwogICAgICB9KTsKICAgIH0KICAgIHJldHVybiBkaXNqb2ludE1hc2tzLmV2ZXJ5KChtYXNrKSA9PiBtYXNrLmlzSW5NYXNrKG90aGVyLCBjbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc01hc2soVHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgb3RoZXIgPSBUeXBlTWFzay5ub25Gb3J3YXJkaW5nTWFzayhvdGhlcik7CiAgICBpZiAob3RoZXIuaXNOdWxsYWJsZSAmJiAhaXNOdWxsYWJsZSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKG90aGVyLmlzVW5pb24pIHJldHVybiBvdGhlci5pc0luTWFzayh0aGlzLCBjbG9zZWRXb3JsZCk7CiAgICBvdGhlciA9IG90aGVyLm5vbk51bGxhYmxlKCk7IC8vIG51bGxhYmxlIGlzIG5vdCBjYW5vbmljYWxpemVkLCBzbyBkcm9wIGl0LgogICAgYm9vbCBjb250YWluZWQgPQogICAgICAgIGRpc2pvaW50TWFza3MuYW55KChtYXNrKSA9PiBtYXNrLmNvbnRhaW5zTWFzayhvdGhlciwgY2xvc2VkV29ybGQpKTsKICAgIGlmIChQRVJGT1JNX0VYVFJBX0NPTlRBSU5TX0NIRUNLICYmCiAgICAgICAgIWNvbnRhaW5lZCAmJgogICAgICAgIHNsb3dDb250YWluc0NoZWNrKG90aGVyLCBjbG9zZWRXb3JsZCkpIHsKICAgICAgdGhyb3cgIlR5cGVNYXNrIGJhc2VkIGNvbnRhaW5tZW50IGNoZWNrIGZhaWxlZCBmb3IgJHRoaXMgYW5kICRvdGhlci4iOwogICAgfQogICAgcmV0dXJuIGNvbnRhaW5lZDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNPbmx5SW50KEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGRpc2pvaW50TWFza3MuZXZlcnkoKG1hc2spID0+IG1hc2suY29udGFpbnNPbmx5SW50KGNsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zT25seURvdWJsZShKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBkaXNqb2ludE1hc2tzLmV2ZXJ5KChtYXNrKSA9PiBtYXNrLmNvbnRhaW5zT25seURvdWJsZShjbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc09ubHlOdW0oSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gZGlzam9pbnRNYXNrcy5ldmVyeSgobWFzaykgewogICAgICByZXR1cm4gbWFzay5jb250YWluc09ubHlOdW0oY2xvc2VkV29ybGQpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zT25seUJvb2woSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gZGlzam9pbnRNYXNrcy5ldmVyeSgobWFzaykgPT4gbWFzay5jb250YWluc09ubHlCb29sKGNsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zT25seVN0cmluZyhKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBkaXNqb2ludE1hc2tzLmV2ZXJ5KChtYXNrKSA9PiBtYXNrLmNvbnRhaW5zT25seVN0cmluZyhjbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc09ubHkoQ2xhc3NFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIGRpc2pvaW50TWFza3MuZXZlcnkoKG1hc2spID0+IG1hc2suY29udGFpbnNPbmx5KGVsZW1lbnQpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgc2F0aXNmaWVzKENsYXNzRW50aXR5IGNscywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gZGlzam9pbnRNYXNrcy5ldmVyeSgobWFzaykgPT4gbWFzay5zYXRpc2ZpZXMoY2xzLCBjbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWlucyhDbGFzc0VudGl0eSBjbHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGRpc2pvaW50TWFza3MuYW55KChlKSA9PiBlLmNvbnRhaW5zKGNscywgY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNBbGwoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gZGlzam9pbnRNYXNrcy5hbnkoKG1hc2spID0+IG1hc2suY29udGFpbnNBbGwoY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IHNpbmdsZUNsYXNzKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBuZWVkc05vU3VjaE1ldGhvZEhhbmRsaW5nKFNlbGVjdG9yIHNlbGVjdG9yLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBkaXNqb2ludE1hc2tzCiAgICAgICAgLmFueSgoZSkgPT4gZS5uZWVkc05vU3VjaE1ldGhvZEhhbmRsaW5nKHNlbGVjdG9yLCBjbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5IaXQoTWVtYmVyRW50aXR5IGVsZW1lbnQsIE5hbWUgbmFtZSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gZGlzam9pbnRNYXNrcy5hbnkoKGUpID0+IGUuY2FuSGl0KGVsZW1lbnQsIG5hbWUsIGNsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXJFbnRpdHkgbG9jYXRlU2luZ2xlTWVtYmVyKFNlbGVjdG9yIHNlbGVjdG9yLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIE1lbWJlckVudGl0eSBjYW5kaWRhdGU7CiAgICBmb3IgKEZsYXRUeXBlTWFzayBtYXNrIGluIGRpc2pvaW50TWFza3MpIHsKICAgICAgTWVtYmVyRW50aXR5IGN1cnJlbnQgPSBtYXNrLmxvY2F0ZVNpbmdsZU1lbWJlcihzZWxlY3RvciwgY2xvc2VkV29ybGQpOwogICAgICBpZiAoY3VycmVudCA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0gZWxzZSBpZiAoY2FuZGlkYXRlID09IG51bGwpIHsKICAgICAgICBjYW5kaWRhdGUgPSBjdXJyZW50OwogICAgICB9IGVsc2UgaWYgKGNhbmRpZGF0ZSAhPSBjdXJyZW50KSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBjYW5kaWRhdGU7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmcgbWFza3NTdHJpbmcgPQogICAgICAgIChkaXNqb2ludE1hc2tzLm1hcCgoVHlwZU1hc2sgbWFzaykgPT4gbWFzay50b1N0cmluZygpKS50b0xpc3QoKS4uc29ydCgpKQogICAgICAgICAgICAuam9pbigiLCAiKTsKICAgIHJldHVybiAnVW5pb24oJG1hc2tzU3RyaW5nKSc7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CgogICAgYm9vbCBjb250YWluc0FsbCgpIHsKICAgICAgcmV0dXJuIG90aGVyLmRpc2pvaW50TWFza3MuZXZlcnkoKGUpIHsKICAgICAgICB2YXIgbWFwID0gZGlzam9pbnRNYXNrcy5tYXAoKGUpID0+IGUubm9uTnVsbGFibGUoKSk7CiAgICAgICAgcmV0dXJuIG1hcC5jb250YWlucyhlLm5vbk51bGxhYmxlKCkpOwogICAgICB9KTsKICAgIH0KCiAgICByZXR1cm4gb3RoZXIgaXMgVW5pb25UeXBlTWFzayAmJgogICAgICAgIG90aGVyLmlzTnVsbGFibGUgPT0gaXNOdWxsYWJsZSAmJgogICAgICAgIG90aGVyLmRpc2pvaW50TWFza3MubGVuZ3RoID09IGRpc2pvaW50TWFza3MubGVuZ3RoICYmCiAgICAgICAgY29udGFpbnNBbGwoKTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgewogICAgaW50IGhhc2hDb2RlID0gaXNOdWxsYWJsZSA/IDg2IDogNDM7CiAgICAvLyBUaGUgb3JkZXIgb2YgdGhlIG1hc2tzIGluIFtkaXNqb2ludE1hc2tzXSBtdXN0IG5vdCBhZmZlY3QgdGhlCiAgICAvLyBoYXNoQ29kZS4KICAgIGZvciAodmFyIG1hc2sgaW4gZGlzam9pbnRNYXNrcykgewogICAgICBoYXNoQ29kZSA9IChoYXNoQ29kZSBeIG1hc2subm9uTnVsbGFibGUoKS5oYXNoQ29kZSkgJiAweDNmZmZmZmZmOwogICAgfQogICAgcmV0dXJuIGhhc2hDb2RlOwogIH0KfQqBwABOTjwBDwEqRx0vASkBUUsbOgEqATAmQwQBOyw1Fy5PFTcEATEMKCgVFEsTBAFQDFA0MT4uLQYyQT0SBAE2P1EnIy8aJEMhEg8mHh4BQiI0LilDRCkaRCIpAUhBRh8hHgEjR0cnLBEMMRsKRSMuCAYEAVBPHUJDNDk2AUwnNAEwHRISMDAeRkMBEBBLR0dBHiZOUCtKEE8PJUkIPTQhGRkIBkkEAQw8L0YBTRoaDSYrBjcEAQxDL0c1ATEuGzUmEUBNDAoPRQgGPQQBDD4pQQYRBAEMGCFNKDEEAQwbIkEoEBE1BAEMIwwdDBwMQQwdDBwMIQwbDBsMIgwiDB0BOQYSNE4aRSkcJFE1TC0tMSUhTxQGOyY5ICMbSg0eSAZQBAEMPC83GSNPS0s1PTBFDAgBP04sGkJRChoKBk0EAQxALzdBTxVMKBYxTQYWBAEMM00EAQw2UAQBDDMoMAgEAQw0TgQBDDZQBAEMK0YEAQw+TAQBDD1DBAEML0cEAQw9AQxQGUkEAQxLSwQBDFEcL00dFSYdKRUIBhYEAQwWGVEZIgQBDBwtARktPS4KBgElKj4XBAEMFSlFESZIBhUEAgE8cGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvdHlwZW1hc2tzL3VuaW9uX3R5cGVfbWFzay5kYXJ0RXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2luZmVycmVyL3R5cGVtYXNrcy92YWx1ZV90eXBlX21hc2suZGFydIi3Ly8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgbWFza3M7CgpjbGFzcyBWYWx1ZVR5cGVNYXNrIGV4dGVuZHMgRm9yd2FyZGluZ1R5cGVNYXNrIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW1ZhbHVlVHlwZU1hc2tdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAndmFsdWUtdHlwZS1tYXNrJzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgVHlwZU1hc2sgZm9yd2FyZFRvOwogIGZpbmFsIFByaW1pdGl2ZUNvbnN0YW50VmFsdWUgdmFsdWU7CgogIFZhbHVlVHlwZU1hc2sodGhpcy5mb3J3YXJkVG8sIHRoaXMudmFsdWUpOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW1ZhbHVlVHlwZU1hc2tdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgVmFsdWVUeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgVHlwZU1hc2sgZm9yd2FyZFRvID0gbmV3IFR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIGNsb3NlZFdvcmxkKTsKICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSBzb3VyY2UucmVhZENvbnN0YW50KCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IFZhbHVlVHlwZU1hc2soZm9yd2FyZFRvLCBjb25zdGFudCk7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtWYWx1ZVR5cGVNYXNrXSB0byBbc2lua10uCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oVHlwZU1hc2tLaW5kLnZhbHVlKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIGZvcndhcmRUby53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLndyaXRlQ29uc3RhbnQodmFsdWUpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIG51bGxhYmxlKCkgewogICAgcmV0dXJuIGlzTnVsbGFibGUgPyB0aGlzIDogbmV3IFZhbHVlVHlwZU1hc2soZm9yd2FyZFRvLm51bGxhYmxlKCksIHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIG5vbk51bGxhYmxlKCkgewogICAgcmV0dXJuIGlzTnVsbGFibGUKICAgICAgICA/IG5ldyBWYWx1ZVR5cGVNYXNrKGZvcndhcmRUby5ub25OdWxsYWJsZSgpLCB2YWx1ZSkKICAgICAgICA6IHRoaXM7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1ZhbHVlID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgZXF1YWxzRGlzcmVnYXJkTnVsbChvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBWYWx1ZVR5cGVNYXNrKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gc3VwZXIuZXF1YWxzRGlzcmVnYXJkTnVsbChvdGhlcikgJiYgdmFsdWUgPT0gb3RoZXIudmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBpbnRlcnNlY3Rpb24oVHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgVHlwZU1hc2sgZm9yd2FyZEludGVyc2VjdGlvbiA9IGZvcndhcmRUby5pbnRlcnNlY3Rpb24ob3RoZXIsIGNsb3NlZFdvcmxkKTsKICAgIGlmIChmb3J3YXJkSW50ZXJzZWN0aW9uLmlzRW1wdHlPck51bGwpIHJldHVybiBmb3J3YXJkSW50ZXJzZWN0aW9uOwogICAgcmV0dXJuIGZvcndhcmRJbnRlcnNlY3Rpb24uaXNOdWxsYWJsZSA/IG51bGxhYmxlKCkgOiBub25OdWxsYWJsZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgPT4gc3VwZXIgPT0gb3RoZXI7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgewogICAgcmV0dXJuIGNvbXB1dGVIYXNoQ29kZSh2YWx1ZSwgaXNOdWxsYWJsZSwgZm9yd2FyZFRvKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnVmFsdWUoJGZvcndhcmRUbywgdmFsdWU6ICR7dmFsdWUudG9EYXJ0VGV4dCgpfSknOwogIH0KfQpQAE5OPAEPATFHHS8BDBwmAS0BOyw1F080FTMEATEMKCgVJR8TBAEMGE8EAQwbFjwQBAEMHAEMJC9FBAEMRE9HSAQBDC0BDBU6BAEMFj4EAgE8cGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvdHlwZW1hc2tzL3ZhbHVlX3R5cGVfbWFzay5kYXJ0MXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2luZmVycmVyL3R5cGVzLmRhcnTAAFeELy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgdHlwZXM7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKaW1wb3J0ICcuLi9jb21tb24uZGFydCcgc2hvdyBmYWlsZWRBdCwgcmV0YWluRGF0YUZvclRlc3Rpbmc7CmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi90YXNrcy5kYXJ0JyBzaG93IENvbXBpbGVyVGFzazsKaW1wb3J0ICcuLi9jb21waWxlci5kYXJ0JyBzaG93IENvbXBpbGVyOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvaW5mZXJyZWRfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19tb2RlbC9lbGVtZW50X21hcC5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci90eXBlX2dyYXBoX2luZmVycmVyLmRhcnQnIHNob3cgVHlwZUdyYXBoSW5mZXJyZXI7CmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CmltcG9ydCAnLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CmltcG9ydCAnYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2luZmVycmVyX2VuZ2luZS5kYXJ0JzsKCi8vLyBSZXN1bHRzIGFib3V0IGEgc2luZ2xlIGVsZW1lbnQgKGUuZy4gYSBtZXRob2QsIHBhcmFtZXRlciwgb3IgZmllbGQpCi8vLyBwcm9kdWNlZCBieSB0aGUgZ2xvYmFsIHR5cGUtaW5mZXJlbmNlIGFsZ29yaXRobS4KLy8vCi8vLyBBbGwgcXVlcmllcyBpbiB0aGlzIGNsYXNzIG1heSBjb250YWluIHJlc3VsdHMgdGhhdCBhc3N1bWUgd2hvbGUtcHJvZ3JhbQovLy8gY2xvc2VkLXdvcmxkIHNlbWFudGljcy4gQW55IFtUeXBlTWFza10gZm9yIGFuIGVsZW1lbnQgb3Igbm9kZSB0aGF0IHdlIHJldHVybgovLy8gd2FzIGluZmVycmVkIHRvIGJlIGEgImd1YXJhbnRlZWQgdHlwZSIsIHRoYXQgbWVhbnMsIGl0IGlzIGEgdHlwZSB0aGF0IHdlCi8vLyBjYW4gcHJvdmUgdG8gYmUgY29ycmVjdCBmb3IgYWxsIGV4ZWN1dGlvbnMgb2YgdGhlIHByb2dyYW0uICBBIHRyaXZpYWwKLy8vIGltcGxlbWVudGF0aW9uIHdvdWxkIHJldHVybiBmYWxzZSBvbiBhbGwgYm9vbGVhbiBwcm9wZXJ0aWVzIChnaXZpbmcgbm8KLy8vIGd1YXJhbnRlZXMpIGFuZCB0aGUgYHN1YmNsYXNzIG9mIE9iamVjdCBvciBudWxsYCB0eXBlIG1hc2sgZm9yIHRoZSB0eXBlCi8vLyBiYXNlZCBxdWVyaWVzICh0aGUgcnVudGltZSB2YWx1ZSBjb3VsZCBiZSBhbnl0aGluZykuCmFic3RyYWN0IGNsYXNzIEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHQgewogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdF0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0LnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSwKICAgICAgICAgIGlyLk1lbWJlciBjb250ZXh0LCBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4pID0KICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdEltcGwucmVhZEZyb21EYXRhU291cmNlOwoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0XSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaywgaXIuTWVtYmVyIGNvbnRleHQsCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbik7CgogIC8vLyBUaGUgaW5mZXJyZWQgdHlwZSB3aGVuIHRoaXMgcmVzdWx0IGJlbG9uZ3MgdG8gYSBmaWVsZCwgbnVsbCBvdGhlcndpc2UuCiAgQWJzdHJhY3RWYWx1ZSBnZXQgdHlwZTsKCiAgLy8vIFdoZXRoZXIgdGhlIG1lbWJlciBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXN1bHQgaXMgb25seSBjYWxsZWQgb25jZSBpbiBvbmUKICAvLy8gbG9jYXRpb24gaW4gdGhlIGVudGlyZSBwcm9ncmFtLgogIGJvb2wgZ2V0IGlzQ2FsbGVkT25jZTsKCiAgLy8vIFdoZXRoZXIgdGhlIG1ldGhvZCBlbGVtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlc3VsdCBhbHdheXMgdGhyb3dzLgogIGJvb2wgZ2V0IHRocm93c0Fsd2F5czsKCiAgLy8vIFRoZSBpbmZlcnJlZCByZXR1cm4gdHlwZSB3aGVuIHRoaXMgcmVzdWx0IGJlbG9uZ3MgdG8gYSBmdW5jdGlvbiBlbGVtZW50LgogIEFic3RyYWN0VmFsdWUgZ2V0IHJldHVyblR5cGU7CgogIC8vLyBSZXR1cm5zIHRoZSB0eXBlIG9mIGEgc2VuZCBbbm9kZV0uCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVuYW1lIHRoaXMuCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZTZW5kKGlyLlRyZWVOb2RlIG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgZ2V0dGVyIGluIGEgY29tcGxleCBzZW5kLXNldCBbbm9kZV0sIGZvciBleGFtcGxlLAogIC8vLyB0aGUgdHlwZSBvZiB0aGUgYGEuZmAgZ2V0dGVyIGluIGBhLmYgKz0gYmAuCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZHZXR0ZXIoaXIuVHJlZU5vZGUgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBpdGVyYXRvciBpbiBhIFtsb29wXS4KICBBYnN0cmFjdFZhbHVlIHR5cGVPZkl0ZXJhdG9yKGlyLlRyZWVOb2RlIG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgYG1vdmVOZXh0YCBjYWxsIG9mIGFuIGl0ZXJhdG9yIGluIGEgW2xvb3BdLgogIEFic3RyYWN0VmFsdWUgdHlwZU9mSXRlcmF0b3JNb3ZlTmV4dChpci5UcmVlTm9kZSBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIGBjdXJyZW50YCBnZXR0ZXIgb2YgYW4gaXRlcmF0b3IgaW4gYSBbbG9vcF0uCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZJdGVyYXRvckN1cnJlbnQoaXIuVHJlZU5vZGUgbm9kZSk7Cn0KCi8vLyBJbnRlcm5hbCBkYXRhIHVzZWQgZHVyaW5nIHR5cGUtaW5mZXJlbmNlIHRvIHN0b3JlIGludGVybWVkaWF0ZSByZXN1bHRzIGFib3V0Ci8vLyBhIHNpbmdsZSBlbGVtZW50LgphYnN0cmFjdCBjbGFzcyBHbG9iYWxUeXBlSW5mZXJlbmNlRWxlbWVudERhdGEgewogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbR2xvYmFsVHlwZUluZmVyZW5jZUVsZW1lbnREYXRhXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IEdsb2JhbFR5cGVJbmZlcmVuY2VFbGVtZW50RGF0YS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UsCiAgICAgICAgICBpci5NZW1iZXIgY29udGV4dCwgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluKSA9CiAgICAgIEtlcm5lbEdsb2JhbFR5cGVJbmZlcmVuY2VFbGVtZW50RGF0YS5yZWFkRnJvbURhdGFTb3VyY2U7CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0dsb2JhbFR5cGVJbmZlcmVuY2VFbGVtZW50RGF0YV0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmssIGlyLk1lbWJlciBjb250ZXh0LAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4pOwoKICAvLy8gQ29tcHJlc3NlcyB0aGUgaW5uZXIgcmVwcmVzZW50YXRpb24gYnkgcmVtb3ZpbmcgW0Fic3RyYWN0VmFsdWVdIG1hcHBpbmdzCiAgLy8vIHRvIGBudWxsYC4gUmV0dXJucyB0aGUgZGF0YSBvYmplY3QgaXRzZWxmIG9yIGBudWxsYCBpZiB0aGUgZGF0YSBvYmplY3QKICAvLy8gd2FzIGVtcHR5IGFmdGVyIGNvbXByZXNzaW9uLgogIEdsb2JhbFR5cGVJbmZlcmVuY2VFbGVtZW50RGF0YSBjb21wcmVzcygpOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhpcy4gTWF5YmUgc3BsaXQgYnkgYWNjZXNzL2ludm9rZS4KICBBYnN0cmFjdFZhbHVlIHR5cGVPZlNlbmQoaXIuVHJlZU5vZGUgbm9kZSk7CiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZHZXR0ZXIoaXIuVHJlZU5vZGUgbm9kZSk7CgogIEFic3RyYWN0VmFsdWUgdHlwZU9mSXRlcmF0b3IoaXIuVHJlZU5vZGUgbm9kZSk7CgogIEFic3RyYWN0VmFsdWUgdHlwZU9mSXRlcmF0b3JNb3ZlTmV4dChpci5UcmVlTm9kZSBub2RlKTsKCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZJdGVyYXRvckN1cnJlbnQoaXIuVHJlZU5vZGUgbm9kZSk7Cn0KCi8vLyBBUEkgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgZ2xvYmFsIHR5cGUtaW5mZXJlbmNlIGVuZ2luZS4KYWJzdHJhY3QgY2xhc3MgVHlwZXNJbmZlcnJlciB7CiAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgYW5hbHl6ZU1haW4oRnVuY3Rpb25FbnRpdHkgZWxlbWVudCk7Cn0KCi8vLyBSZXN1bHRzIHByb2R1Y2VkIGJ5IHRoZSBnbG9iYWwgdHlwZS1pbmZlcmVuY2UgYWxnb3JpdGhtLgovLy8KLy8vIEFsbCBxdWVyaWVzIGluIHRoaXMgY2xhc3MgbWF5IGNvbnRhaW4gcmVzdWx0cyB0aGF0IGFzc3VtZSB3aG9sZS1wcm9ncmFtCi8vLyBjbG9zZWQtd29ybGQgc2VtYW50aWNzLiBBbnkgW0Fic3RyYWN0VmFsdWVdIGZvciBhbiBlbGVtZW50IG9yIG5vZGUgdGhhdCB3ZQovLy8gcmV0dXJuIHdhcyBpbmZlcnJlZCB0byBiZSBhICJndWFyYW50ZWVkIHR5cGUiLCB0aGF0IG1lYW5zLCBpdCBpcyBhIHR5cGUgdGhhdAovLy8gd2UgY2FuIHByb3ZlIHRvIGJlIGNvcnJlY3QgZm9yIGFsbCBleGVjdXRpb25zIG9mIHRoZSBwcm9ncmFtLgphYnN0cmFjdCBjbGFzcyBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyB7CiAgLy8vIERlc2VyaWFsaXplcyBhIFtHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0c10gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cy5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLAogICAgICBKc1RvRWxlbWVudE1hcCBlbGVtZW50TWFwLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIEluZmVycmVkRGF0YSBpbmZlcnJlZERhdGEpIHsKICAgIGJvb2wgaXNUcml2aWFsID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBpZiAoaXNUcml2aWFsKSB7CiAgICAgIHJldHVybiBuZXcgVHJpdmlhbEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzKGNsb3NlZFdvcmxkKTsKICAgIH0KICAgIHJldHVybiBuZXcgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHNJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgICBzb3VyY2UsIGVsZW1lbnRNYXAsIGNsb3NlZFdvcmxkLCBpbmZlcnJlZERhdGEpOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHNdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rLCBKc1RvRWxlbWVudE1hcCBlbGVtZW50TWFwKTsKCiAgSkNsb3NlZFdvcmxkIGdldCBjbG9zZWRXb3JsZDsKCiAgSW5mZXJyZWREYXRhIGdldCBpbmZlcnJlZERhdGE7CgogIEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHQgcmVzdWx0T2ZNZW1iZXIoTWVtYmVyRW50aXR5IG1lbWJlcik7CgogIEFic3RyYWN0VmFsdWUgcmVzdWx0T2ZQYXJhbWV0ZXIoTG9jYWwgcGFyYW1ldGVyKTsKCiAgLy8vIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBbc2VsZWN0b3JdIHRvIGEgcmVjZWl2ZXIgd2l0aAogIC8vLyB0aGUgZ2l2ZW4gW3JlY2VpdmVyXSB0eXBlLgogIEFic3RyYWN0VmFsdWUgcmVzdWx0VHlwZU9mU2VsZWN0b3IoU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXIpOwoKICAvLy8gUmV0dXJucyB3aGV0aGVyIGEgZml4ZWQtbGVuZ3RoIGNvbnN0cnVjdG9yIGNhbGwgZ29lcyB0aHJvdWdoIGEgZ3Jvd2FibGUKICAvLy8gY2hlY2suCiAgYm9vbCBpc0ZpeGVkQXJyYXlDaGVja2VkRm9yR3Jvd2FibGUoaXIuVHJlZU5vZGUgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSB0eXBlIG9mIGEgbGlzdCBuZXcgZXhwcmVzc2lvbiBbbm9kZV0uCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZOZXdMaXN0KGlyLlRyZWVOb2RlIG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgdHlwZSBvZiBhIGxpc3QgbGl0ZXJhbCBbbm9kZV0uCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZMaXN0TGl0ZXJhbChpci5UcmVlTm9kZSBub2RlKTsKfQoKLy8vIEdsb2JhbCBhbmFseXNpcyB0aGF0IGluZmVycyBjb25jcmV0ZSB0eXBlcy4KY2xhc3MgR2xvYmFsVHlwZUluZmVyZW5jZVRhc2sgZXh0ZW5kcyBDb21waWxlclRhc2sgewogIC8vIFRPRE8oc2lnbXVuZCk6IHJlbmFtZSBhdCB0aGUgc2FtZSB0aW1lIGFzIG91ciBiZW5jaG1hcmtpbmcgdG9vbHMuCiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAnVHlwZSBpbmZlcmVuY2UnOwoKICBmaW5hbCBDb21waWxlciBjb21waWxlcjsKCiAgLy8vIFRoZSBbVHlwZUdyYXBoSW5mZXJyZXJdIHVzZWQgYnkgdGhlIGdsb2JhbCB0eXBlIGluZmVyZW5jZS4gVGhpcyBzaG91bGQgYnkKICAvLy8gYWNjZXNzZWQgZnJvbSBvdXRzaWRlIHRoaXMgY2xhc3MgZm9yIHRlc3Rpbmcgb25seS4KICBUeXBlR3JhcGhJbmZlcnJlciB0eXBlc0luZmVycmVySW50ZXJuYWw7CgogIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHNGb3JUZXN0aW5nOwoKICBHbG9iYWxUeXBlSW5mZXJlbmNlVGFzayhDb21waWxlciBjb21waWxlcikKICAgICAgOiBjb21waWxlciA9IGNvbXBpbGVyLAogICAgICAgIHN1cGVyKGNvbXBpbGVyLm1lYXN1cmVyKTsKCiAgLy8vIFJ1bnMgdGhlIGdsb2JhbCB0eXBlLWluZmVyZW5jZSBhbGdvcml0aG0gb25jZS4KICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBydW5HbG9iYWxUeXBlSW5mZXJlbmNlKEZ1bmN0aW9uRW50aXR5IG1haW5FbGVtZW50LAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsIEluZmVycmVkRGF0YUJ1aWxkZXIgaW5mZXJyZWREYXRhQnVpbGRlcikgewogICAgcmV0dXJuIG1lYXN1cmUoKCkgewogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzOwogICAgICBpZiAoY29tcGlsZXIuZGlzYWJsZVR5cGVJbmZlcmVuY2UpIHsKICAgICAgICByZXN1bHRzID0gbmV3IFRyaXZpYWxHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyhjbG9zZWRXb3JsZCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdHlwZXNJbmZlcnJlckludGVybmFsID8/PSBjb21waWxlci5iYWNrZW5kU3RyYXRlZ3kKICAgICAgICAgICAgLmNyZWF0ZVR5cGVzSW5mZXJyZXIoY2xvc2VkV29ybGQsIGluZmVycmVkRGF0YUJ1aWxkZXIpOwogICAgICAgIHJlc3VsdHMgPSB0eXBlc0luZmVycmVySW50ZXJuYWwuYW5hbHl6ZU1haW4obWFpbkVsZW1lbnQpOwogICAgICB9CiAgICAgIGNsb3NlZFdvcmxkLm5vU3VjaE1ldGhvZERhdGEuY2F0ZWdvcml6ZUNvbXBsZXhJbXBsZW1lbnRhdGlvbnMocmVzdWx0cyk7CiAgICAgIGlmIChyZXRhaW5EYXRhRm9yVGVzdGluZykgewogICAgICAgIHJlc3VsdHNGb3JUZXN0aW5nID0gcmVzdWx0czsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0pOwogIH0KfQoKY2xhc3MgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHNJbXBsIGltcGxlbWVudHMgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHNdIG9iamVjdHMKICAvLy8gaW4gYSBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnZ2xvYmFsLXR5cGUtaW5mZXJlbmNlLXJlc3VsdHMnOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQ7CiAgQG92ZXJyaWRlCiAgZmluYWwgSW5mZXJyZWREYXRhIGluZmVycmVkRGF0YTsKICBmaW5hbCBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0IF9kZWFkRmllbGRSZXN1bHQ7CiAgZmluYWwgR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdCBfZGVhZE1ldGhvZFJlc3VsdDsKICBmaW5hbCBBYnN0cmFjdFZhbHVlIF90cml2aWFsUGFyYW1ldGVyUmVzdWx0OwoKICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0PiBtZW1iZXJSZXN1bHRzOwogIGZpbmFsIE1hcDxMb2NhbCwgQWJzdHJhY3RWYWx1ZT4gcGFyYW1ldGVyUmVzdWx0czsKICBmaW5hbCBTZXQ8aXIuVHJlZU5vZGU+IGNoZWNrZWRGb3JHcm93YWJsZUxpc3RzOwogIGZpbmFsIFNldDxTZWxlY3Rvcj4gcmV0dXJuc0xpc3RFbGVtZW50VHlwZVNldDsKICBmaW5hbCBNYXA8aXIuVHJlZU5vZGUsIEFic3RyYWN0VmFsdWU+IF9hbGxvY2F0ZWRMaXN0czsKCiAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHNJbXBsKAogICAgICB0aGlzLmNsb3NlZFdvcmxkLAogICAgICB0aGlzLmluZmVycmVkRGF0YSwKICAgICAgdGhpcy5tZW1iZXJSZXN1bHRzLAogICAgICB0aGlzLnBhcmFtZXRlclJlc3VsdHMsCiAgICAgIHRoaXMuY2hlY2tlZEZvckdyb3dhYmxlTGlzdHMsCiAgICAgIHRoaXMucmV0dXJuc0xpc3RFbGVtZW50VHlwZVNldCwKICAgICAgdGhpcy5fYWxsb2NhdGVkTGlzdHMpCiAgICAgIDogX2RlYWRGaWVsZFJlc3VsdCA9IG5ldyBEZWFkRmllbGRHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0KAogICAgICAgICAgICBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKSwKICAgICAgICBfZGVhZE1ldGhvZFJlc3VsdCA9IG5ldyBEZWFkTWV0aG9kR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdCgKICAgICAgICAgICAgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbiksCiAgICAgICAgX3RyaXZpYWxQYXJhbWV0ZXJSZXN1bHQgPSBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlOwoKICBmYWN0b3J5IEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzSW1wbC5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLAogICAgICBKc1RvRWxlbWVudE1hcCBlbGVtZW50TWFwLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIEluZmVycmVkRGF0YSBpbmZlcnJlZERhdGEpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgTWFwPE1lbWJlckVudGl0eSwgR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdD4gbWVtYmVyUmVzdWx0cyA9CiAgICAgICAgc291cmNlLnJlYWRNZW1iZXJNYXAoKE1lbWJlckVudGl0eSBtZW1iZXIpID0+CiAgICAgICAgICAgIG5ldyBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0LnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgICAgICAgICAgIHNvdXJjZSwKICAgICAgICAgICAgICAgIGVsZW1lbnRNYXAuZ2V0TWVtYmVyQ29udGV4dE5vZGUobWVtYmVyKSwKICAgICAgICAgICAgICAgIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pKTsKICAgIE1hcDxMb2NhbCwgQWJzdHJhY3RWYWx1ZT4gcGFyYW1ldGVyUmVzdWx0cyA9IHNvdXJjZS5yZWFkTG9jYWxNYXAoKCkgPT4KICAgICAgICBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAgIC5yZWFkQWJzdHJhY3RWYWx1ZUZyb21EYXRhU291cmNlKHNvdXJjZSkpOwogICAgU2V0PGlyLlRyZWVOb2RlPiBjaGVja2VkRm9yR3Jvd2FibGVMaXN0cyA9IHNvdXJjZS5yZWFkVHJlZU5vZGVzKCkudG9TZXQoKTsKICAgIFNldDxTZWxlY3Rvcj4gcmV0dXJuc0xpc3RFbGVtZW50VHlwZVNldCA9CiAgICAgICAgc291cmNlLnJlYWRMaXN0KCgpID0+IG5ldyBTZWxlY3Rvci5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKSkudG9TZXQoKTsKICAgIE1hcDxpci5UcmVlTm9kZSwgQWJzdHJhY3RWYWx1ZT4gYWxsb2NhdGVkTGlzdHMgPSBzb3VyY2UucmVhZFRyZWVOb2RlTWFwKAogICAgICAgICgpID0+IGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAgICAgLnJlYWRBYnN0cmFjdFZhbHVlRnJvbURhdGFTb3VyY2Uoc291cmNlKSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzSW1wbCgKICAgICAgICBjbG9zZWRXb3JsZCwKICAgICAgICBpbmZlcnJlZERhdGEsCiAgICAgICAgbWVtYmVyUmVzdWx0cywKICAgICAgICBwYXJhbWV0ZXJSZXN1bHRzLAogICAgICAgIGNoZWNrZWRGb3JHcm93YWJsZUxpc3RzLAogICAgICAgIHJldHVybnNMaXN0RWxlbWVudFR5cGVTZXQsCiAgICAgICAgYWxsb2NhdGVkTGlzdHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaywgSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgc2luay53cml0ZUJvb2woZmFsc2UpOyAvLyBJcyBfbm90XyB0cml2aWFsLgogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZU1lbWJlck1hcCgKICAgICAgICBtZW1iZXJSZXN1bHRzLAogICAgICAgIChNZW1iZXJFbnRpdHkgbWVtYmVyLCBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0IHJlc3VsdCkgPT4KICAgICAgICAgICAgcmVzdWx0LndyaXRlVG9EYXRhU2luaygKICAgICAgICAgICAgICAgIHNpbmssCiAgICAgICAgICAgICAgICBlbGVtZW50TWFwLmdldE1lbWJlckNvbnRleHROb2RlKG1lbWJlciksCiAgICAgICAgICAgICAgICBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKSk7CiAgICBzaW5rLndyaXRlTG9jYWxNYXAoCiAgICAgICAgcGFyYW1ldGVyUmVzdWx0cywKICAgICAgICAoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgICAgICAud3JpdGVBYnN0cmFjdFZhbHVlVG9EYXRhU2luayhzaW5rLCB2YWx1ZSkpOwogICAgc2luay53cml0ZVRyZWVOb2RlcyhjaGVja2VkRm9yR3Jvd2FibGVMaXN0cyk7CiAgICBzaW5rLndyaXRlTGlzdChyZXR1cm5zTGlzdEVsZW1lbnRUeXBlU2V0LAogICAgICAgIChTZWxlY3RvciBzZWxlY3RvcikgPT4gc2VsZWN0b3Iud3JpdGVUb0RhdGFTaW5rKHNpbmspKTsKICAgIHNpbmsud3JpdGVUcmVlTm9kZU1hcCgKICAgICAgICBfYWxsb2NhdGVkTGlzdHMsCiAgICAgICAgKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAgICAgLndyaXRlQWJzdHJhY3RWYWx1ZVRvRGF0YVNpbmsoc2luaywgdmFsdWUpKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0IHJlc3VsdE9mTWVtYmVyKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIGFzc2VydCgKICAgICAgICBtZW1iZXIgaXMhIENvbnN0cnVjdG9yQm9keUVudGl0eSwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgbWVtYmVyLAogICAgICAgICAgICAidW5leHBlY3RlZCBpbnB1dDogQ29uc3RydWN0b3JCb2R5RWxlbWVudHMgYXJlIGNyZWF0ZWQiCiAgICAgICAgICAgICIgYWZ0ZXIgZ2xvYmFsIHR5cGUgaW5mZXJlbmNlLCBubyBkYXRhIGlzIGF2YWlhYmxlIGZvciB0aGVtLiIpKTsKICAgIC8vIFRPRE8oc2lnbXVuZCxqb2hubml3aW50aGVyKTogTWFrZSBpdCBhbiBlcnJvciB0byBxdWVyeSBmb3IgcmVzdWx0cyB0aGF0CiAgICAvLyBkb24ndCBleGlzdC4uCiAgICAvKmFzc2VydChtZW1iZXJSZXN1bHRzLmNvbnRhaW5zS2V5KG1lbWJlcikgfHwgbWVtYmVyIGlzIEpTaWduYXR1cmVNZXRob2QsCiAgICAgICAgIk5vIGluZmVyZW5jZSByZXN1bHQgZm9yIG1lbWJlciAkbWVtYmVyIik7Ki8KICAgIHJldHVybiBtZW1iZXJSZXN1bHRzW21lbWJlcl0gPz8KICAgICAgICAobWVtYmVyIGlzIEZ1bmN0aW9uRW50aXR5ID8gX2RlYWRNZXRob2RSZXN1bHQgOiBfZGVhZEZpZWxkUmVzdWx0KTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgcmVzdWx0T2ZQYXJhbWV0ZXIoTG9jYWwgcGFyYW1ldGVyKSB7CiAgICAvLyBUT0RPKHNpZ211bmQsam9obm5pd2ludGhlcik6IE1ha2UgaXQgYW4gZXJyb3IgdG8gcXVlcnkgZm9yIHJlc3VsdHMgdGhhdAogICAgLy8gZG9uJ3QgZXhpc3QuCiAgICAvKmFzc2VydChwYXJhbWV0ZXJSZXN1bHRzLmNvbnRhaW5zS2V5KHBhcmFtZXRlciksCiAgICAgICAgIk5vIGluZmVyZW5jZSByZXN1bHQgZm9yIHBhcmFtZXRlciAkcGFyYW1ldGVyIik7Ki8KICAgIHJldHVybiBwYXJhbWV0ZXJSZXN1bHRzW3BhcmFtZXRlcl0gPz8gX3RyaXZpYWxQYXJhbWV0ZXJSZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHJlc3VsdFR5cGVPZlNlbGVjdG9yKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSByZWNlaXZlcikgewogICAgLy8gQmFpbG91dCBmb3IgY2xvc3VyZSBjYWxscy4gV2UncmUgbm90IHRyYWNraW5nIHR5cGVzIG9mCiAgICAvLyBjbG9zdXJlcy4KICAgIGlmIChzZWxlY3Rvci5pc0Nsb3N1cmVDYWxsKQogICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZTsKICAgIGlmIChzZWxlY3Rvci5pc1NldHRlciB8fCBzZWxlY3Rvci5pc0luZGV4U2V0KSB7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlOwogICAgfQogICAgaWYgKHJldHVybnNMaXN0RWxlbWVudFR5cGUoc2VsZWN0b3IsIHJlY2VpdmVyKSkgewogICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRDb250YWluZXJFbGVtZW50VHlwZShyZWNlaXZlcik7CiAgICB9CiAgICBpZiAocmV0dXJuc01hcFZhbHVlVHlwZShzZWxlY3RvciwgcmVjZWl2ZXIpKSB7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmdldE1hcFZhbHVlVHlwZShyZWNlaXZlcik7CiAgICB9CgogICAgaWYgKGNsb3NlZFdvcmxkLmluY2x1ZGVzQ2xvc3VyZUNhbGwoc2VsZWN0b3IsIHJlY2VpdmVyKSkgewogICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZTsKICAgIH0gZWxzZSB7CiAgICAgIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZWxlbWVudHMgPQogICAgICAgICAgY2xvc2VkV29ybGQubG9jYXRlTWVtYmVycyhzZWxlY3RvciwgcmVjZWl2ZXIpOwogICAgICBMaXN0PEFic3RyYWN0VmFsdWU+IHR5cGVzID0gPEFic3RyYWN0VmFsdWU+W107CiAgICAgIGZvciAoTWVtYmVyRW50aXR5IGVsZW1lbnQgaW4gZWxlbWVudHMpIHsKICAgICAgICBBYnN0cmFjdFZhbHVlIHR5cGUgPSB0eXBlT2ZNZW1iZXJXaXRoU2VsZWN0b3IoZWxlbWVudCwgc2VsZWN0b3IpOwogICAgICAgIHR5cGVzLmFkZCh0eXBlKTsKICAgICAgfQogICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi51bmlvbk9mTWFueSh0eXBlcyk7CiAgICB9CiAgfQoKICBib29sIHJldHVybnNMaXN0RWxlbWVudFR5cGUoU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgbWFzaykgewogICAgcmV0dXJuIG1hc2sgIT0gbnVsbCAmJgogICAgICAgIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uaXNDb250YWluZXIobWFzaykgJiYKICAgICAgICByZXR1cm5zTGlzdEVsZW1lbnRUeXBlU2V0LmNvbnRhaW5zKHNlbGVjdG9yKTsKICB9CgogIGJvb2wgcmV0dXJuc01hcFZhbHVlVHlwZShTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSBtYXNrKSB7CiAgICByZXR1cm4gbWFzayAhPSBudWxsICYmCiAgICAgICAgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5pc01hcChtYXNrKSAmJgogICAgICAgIHNlbGVjdG9yLmlzSW5kZXg7CiAgfQoKICBBYnN0cmFjdFZhbHVlIHR5cGVPZk1lbWJlcldpdGhTZWxlY3RvcigKICAgICAgTWVtYmVyRW50aXR5IGVsZW1lbnQsIFNlbGVjdG9yIHNlbGVjdG9yKSB7CiAgICBpZiAoZWxlbWVudC5uYW1lID09IElkZW50aWZpZXJzLm5vU3VjaE1ldGhvZF8gJiYKICAgICAgICBzZWxlY3Rvci5uYW1lICE9IGVsZW1lbnQubmFtZSkgewogICAgICAvLyBBbiBpbnZvY2F0aW9uIGNhbiByZXNvbHZlIHRvIGEgW25vU3VjaE1ldGhvZF0sIGluIHdoaWNoIGNhc2UKICAgICAgLy8gd2UgZ2V0IHRoZSByZXR1cm4gdHlwZSBvZiBbbm9TdWNoTWV0aG9kXS4KICAgICAgcmV0dXJuIHJlc3VsdE9mTWVtYmVyKGVsZW1lbnQpLnJldHVyblR5cGU7CiAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLmlzR2V0dGVyKSB7CiAgICAgIGlmIChlbGVtZW50LmlzRnVuY3Rpb24pIHsKICAgICAgICAvLyBbZnVuY3Rpb25UeXBlXSBpcyBudWxsIGlmIHRoZSBpbmZlcnJlciBkaWQgbm90IHJ1bi4KICAgICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5mdW5jdGlvblR5cGU7CiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5pc0ZpZWxkKSB7CiAgICAgICAgcmV0dXJuIHJlc3VsdE9mTWVtYmVyKGVsZW1lbnQpLnR5cGU7CiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5pc0dldHRlcikgewogICAgICAgIHJldHVybiByZXN1bHRPZk1lbWJlcihlbGVtZW50KS5yZXR1cm5UeXBlOwogICAgICB9IGVsc2UgewogICAgICAgIGFzc2VydChmYWxzZSwgZmFpbGVkQXQoZWxlbWVudCwgIlVuZXhwZWN0ZWQgbWVtYmVyICRlbGVtZW50IikpOwogICAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQuaXNHZXR0ZXIgfHwgZWxlbWVudC5pc0ZpZWxkKSB7CiAgICAgIGFzc2VydChzZWxlY3Rvci5pc0NhbGwgfHwgc2VsZWN0b3IuaXNTZXR0ZXIpOwogICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiByZXN1bHRPZk1lbWJlcihlbGVtZW50KS5yZXR1cm5UeXBlOwogICAgfQogIH0KCiAgLy8vIFJldHVybnMgd2hldGhlciBhIGZpeGVkLWxlbmd0aCBjb25zdHJ1Y3RvciBjYWxsIGdvZXMgdGhyb3VnaCBhIGdyb3dhYmxlCiAgLy8vIGNoZWNrLgogIC8vIFRPRE8oc2lnbXVuZCk6IG1vdmUgaW50byB0aGUgcmVzdWx0IG9mIHRoZSBlbGVtZW50IGNvbnRhaW5pbmcgc3VjaAogIC8vIGNvbnN0cnVjdG9yIGNhbGwuCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0ZpeGVkQXJyYXlDaGVja2VkRm9yR3Jvd2FibGUoaXIuTm9kZSBjdG9yQ2FsbCkgPT4KICAgICAgY2hlY2tlZEZvckdyb3dhYmxlTGlzdHMuY29udGFpbnMoY3RvckNhbGwpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZk5ld0xpc3QoaXIuTm9kZSBub2RlKSA9PiBfYWxsb2NhdGVkTGlzdHNbbm9kZV07CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mTGlzdExpdGVyYWwoaXIuTm9kZSBub2RlKSA9PiBfYWxsb2NhdGVkTGlzdHNbbm9kZV07Cn0KCmNsYXNzIEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHRJbXBsCiAgICBpbXBsZW1lbnRzIEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHQgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdF0KICAvLy8gb2JqZWN0cyBpbiBhIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdnbG9iYWwtdHlwZS1pbmZlcmVuY2UtbWVtYmVyLXJlc3VsdCc7CgogIGZpbmFsIEdsb2JhbFR5cGVJbmZlcmVuY2VFbGVtZW50RGF0YSBfZGF0YTsKICBAb3ZlcnJpZGUKICBmaW5hbCBBYnN0cmFjdFZhbHVlIHJldHVyblR5cGU7CiAgQG92ZXJyaWRlCiAgZmluYWwgQWJzdHJhY3RWYWx1ZSB0eXBlOwogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgdGhyb3dzQWx3YXlzOwogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgaXNDYWxsZWRPbmNlOwoKICBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0SW1wbCh0aGlzLl9kYXRhLCB0aGlzLnJldHVyblR5cGUsIHRoaXMudHlwZSwKICAgICAge3RoaXMudGhyb3dzQWx3YXlzLCB0aGlzLmlzQ2FsbGVkT25jZX0pOwoKICBmYWN0b3J5IEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHRJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsCiAgICAgIGlyLk1lbWJlciBjb250ZXh0LAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4pIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgR2xvYmFsVHlwZUluZmVyZW5jZUVsZW1lbnREYXRhIGRhdGEgPSBzb3VyY2UucmVhZFZhbHVlT3JOdWxsKCgpIHsKICAgICAgcmV0dXJuIG5ldyBHbG9iYWxUeXBlSW5mZXJlbmNlRWxlbWVudERhdGEucmVhZEZyb21EYXRhU291cmNlKAogICAgICAgICAgc291cmNlLCBjb250ZXh0LCBhYnN0cmFjdFZhbHVlRG9tYWluKTsKICAgIH0pOwogICAgQWJzdHJhY3RWYWx1ZSByZXR1cm5UeXBlID0KICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLnJlYWRBYnN0cmFjdFZhbHVlRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIEFic3RyYWN0VmFsdWUgdHlwZSA9CiAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5yZWFkQWJzdHJhY3RWYWx1ZUZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBib29sIHRocm93c0Fsd2F5cyA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgYm9vbCBpc0NhbGxlZE9uY2UgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdEltcGwoZGF0YSwgcmV0dXJuVHlwZSwgdHlwZSwKICAgICAgICB0aHJvd3NBbHdheXM6IHRocm93c0Fsd2F5cywgaXNDYWxsZWRPbmNlOiBpc0NhbGxlZE9uY2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaywgaXIuTWVtYmVyIGNvbnRleHQsCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbikgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZVZhbHVlT3JOdWxsKF9kYXRhLCAoR2xvYmFsVHlwZUluZmVyZW5jZUVsZW1lbnREYXRhIGRhdGEpIHsKICAgICAgZGF0YS53cml0ZVRvRGF0YVNpbmsoc2luaywgY29udGV4dCwgYWJzdHJhY3RWYWx1ZURvbWFpbik7CiAgICB9KTsKICAgIGFic3RyYWN0VmFsdWVEb21haW4ud3JpdGVBYnN0cmFjdFZhbHVlVG9EYXRhU2luayhzaW5rLCByZXR1cm5UeXBlKTsKICAgIGFic3RyYWN0VmFsdWVEb21haW4ud3JpdGVBYnN0cmFjdFZhbHVlVG9EYXRhU2luayhzaW5rLCB0eXBlKTsKICAgIHNpbmsud3JpdGVCb29sKHRocm93c0Fsd2F5cyk7CiAgICBzaW5rLndyaXRlQm9vbChpc0NhbGxlZE9uY2UpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mU2VuZChpci5Ob2RlIG5vZGUpID0+IF9kYXRhPy50eXBlT2ZTZW5kKG5vZGUpOwogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mR2V0dGVyKGlyLk5vZGUgbm9kZSkgPT4gX2RhdGE/LnR5cGVPZkdldHRlcihub2RlKTsKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkl0ZXJhdG9yKGlyLk5vZGUgbm9kZSkgPT4gX2RhdGE/LnR5cGVPZkl0ZXJhdG9yKG5vZGUpOwogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mSXRlcmF0b3JNb3ZlTmV4dChpci5Ob2RlIG5vZGUpID0+CiAgICAgIF9kYXRhPy50eXBlT2ZJdGVyYXRvck1vdmVOZXh0KG5vZGUpOwogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mSXRlcmF0b3JDdXJyZW50KGlyLk5vZGUgbm9kZSkgPT4KICAgICAgX2RhdGE/LnR5cGVPZkl0ZXJhdG9yQ3VycmVudChub2RlKTsKfQoKY2xhc3MgVHJpdmlhbEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGltcGxlbWVudHMgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgewogIEBvdmVycmlkZQogIGZpbmFsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZDsKICBmaW5hbCBUcml2aWFsR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdCBfdHJpdmlhbE1lbWJlclJlc3VsdDsKICBmaW5hbCBBYnN0cmFjdFZhbHVlIF90cml2aWFsUGFyYW1ldGVyUmVzdWx0OwogIEBvdmVycmlkZQogIGZpbmFsIEluZmVycmVkRGF0YSBpbmZlcnJlZERhdGEgPSBuZXcgVHJpdmlhbEluZmVycmVkRGF0YSgpOwoKICBUcml2aWFsR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHModGhpcy5jbG9zZWRXb3JsZCkKICAgICAgOiBfdHJpdmlhbE1lbWJlclJlc3VsdCA9IG5ldyBUcml2aWFsR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdCgKICAgICAgICAgICAgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSksCiAgICAgICAgX3RyaXZpYWxQYXJhbWV0ZXJSZXN1bHQgPSBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlOwoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rLCBKc1RvRWxlbWVudE1hcCBlbGVtZW50TWFwKSB7CiAgICBzaW5rLndyaXRlQm9vbCh0cnVlKTsgLy8gSXMgdHJpdmlhbC4KICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNGaXhlZEFycmF5Q2hlY2tlZEZvckdyb3dhYmxlKGlyLk5vZGUgbm9kZSkgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgcmVzdWx0VHlwZU9mU2VsZWN0b3IoU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgbWFzaykgewogICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHJlc3VsdE9mUGFyYW1ldGVyKExvY2FsIHBhcmFtZXRlcikgewogICAgcmV0dXJuIF90cml2aWFsUGFyYW1ldGVyUmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdCByZXN1bHRPZk1lbWJlcihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICByZXR1cm4gX3RyaXZpYWxNZW1iZXJSZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkxpc3RMaXRlcmFsKGlyLlRyZWVOb2RlIG5vZGUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mTmV3TGlzdChpci5UcmVlTm9kZSBub2RlKSA9PiBudWxsOwp9CgpjbGFzcyBUcml2aWFsR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdAogICAgaW1wbGVtZW50cyBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0IHsKICBmaW5hbCBBYnN0cmFjdFZhbHVlIGR5bmFtaWNUeXBlOwoKICBUcml2aWFsR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdCh0aGlzLmR5bmFtaWNUeXBlKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgdHlwZSA9PiBkeW5hbWljVHlwZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgcmV0dXJuVHlwZSA9PiBkeW5hbWljVHlwZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgdGhyb3dzQWx3YXlzID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkl0ZXJhdG9yQ3VycmVudChpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mSXRlcmF0b3JNb3ZlTmV4dChpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mSXRlcmF0b3IoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkdldHRlcihpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mU2VuZChpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQ2FsbGVkT25jZSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaywgaXIuTWVtYmVyIGNvbnRleHQsCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbikgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIlRyaXZpYWxHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0LndyaXRlVG9EYXRhU2luayIpOwogIH0KfQoKY2xhc3MgRGVhZEZpZWxkR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdAogICAgaW1wbGVtZW50cyBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0IHsKICBmaW5hbCBBYnN0cmFjdFZhbHVlIGR5bmFtaWNUeXBlOwogIGZpbmFsIEFic3RyYWN0VmFsdWUgZW1wdHlUeXBlOwoKICBEZWFkRmllbGRHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKQogICAgICA6IHRoaXMuZHluYW1pY1R5cGUgPSBkb21haW4uZHluYW1pY1R5cGUsCiAgICAgICAgdGhpcy5lbXB0eVR5cGUgPSBkb21haW4uZW1wdHlUeXBlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCB0eXBlID0+IGVtcHR5VHlwZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgcmV0dXJuVHlwZSA9PiBkeW5hbWljVHlwZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgdGhyb3dzQWx3YXlzID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkl0ZXJhdG9yQ3VycmVudChpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mSXRlcmF0b3JNb3ZlTmV4dChpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mSXRlcmF0b3IoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkdldHRlcihpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mU2VuZChpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQ2FsbGVkT25jZSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaywgaXIuTWVtYmVyIGNvbnRleHQsCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbikgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIkRlYWRGaWVsZEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHQud3JpdGVUb0RhdGFTaW5rIik7CiAgfQp9CgpjbGFzcyBEZWFkTWV0aG9kR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdAogICAgaW1wbGVtZW50cyBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0IHsKICBmaW5hbCBBYnN0cmFjdFZhbHVlIGVtcHR5VHlwZTsKICBmaW5hbCBBYnN0cmFjdFZhbHVlIGZ1bmN0aW9uVHlwZTsKCiAgRGVhZE1ldGhvZEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHQoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pCiAgICAgIDogdGhpcy5mdW5jdGlvblR5cGUgPSBkb21haW4uZnVuY3Rpb25UeXBlLAogICAgICAgIHRoaXMuZW1wdHlUeXBlID0gZG9tYWluLmVtcHR5VHlwZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgdHlwZSA9PiBmdW5jdGlvblR5cGU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IHJldHVyblR5cGUgPT4gZW1wdHlUeXBlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCB0aHJvd3NBbHdheXMgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mSXRlcmF0b3JDdXJyZW50KGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZJdGVyYXRvck1vdmVOZXh0KGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZJdGVyYXRvcihpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mR2V0dGVyKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZTZW5kKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNDYWxsZWRPbmNlID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rLCBpci5NZW1iZXIgY29udGV4dCwKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiRGVhZEZpZWxkR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdC53cml0ZVRvRGF0YVNpbmsiKTsKICB9Cn0KgncATk48AQ8BKD0fMSkkKydGLjIqJSsBSDUETFFNSktMOTFNUEg+AUM5MAFNGgFQJhkBTBkBTyABKScuAVAyMAE0MgFKOgFLOQIBURYwTE9IPwFCOTABT00jLQFFLjABMgE6ATkCATsfQgIBPQRMT1FCLEg5GSEgIygVQQZCOAQBPkIBIAEhAUcBNAFPIVEBTg05ATgxATE1AgEwNUcMKAEbAVA5KwEwAS0dIgE1UEsYKitGDztEQghOIiUIFggEAgFNTyI9AQwiDCM6Oy8BSjQyMTkBIhgZGh0kJhxDLkUuTwE9GSEgIxdHNkQYOTNLKDdPLlBNLjcVLxUWFxohIxkEAQxDMBUZF0kkFjkzGBpBOTIuQBsZQTkTBAEMSAwqEhRETU8VTjUkSwQBDDVPFDY7QwQBDCYzPhEgOjQ6BjZQBjNIBgE/Og0oOTUvShkIQQYEAUcbPTYEAUQbNxoEASoxNSlGMzEkID89JC0lMw9IPAg2NDoNMQYEAU4NSBcMOzIBDEYBDEoCASoxTCpDAS4MIgwcDBsMGwFOLwFCGRkxF0ZEMQgfRRlFKysVS0EEAQw5MRVJQAhIQiIiEwQBDEUMSQxNDDgrDDcqAgFQDCJFLww/ATZLOk8BDEMpBAEMPgEMTjgEAQw1JAQBDEghBAEMPQEMOQIBLTEjATwBDCkBDC8BDCIBDD0BDD4BDDYBDDQBDDIBDCIBDDkxIEMEAgEpMSMhAUEvKwEMJwEMLwEMIgEMPQEMPgEMNgEMNAEMMgEMIgEMOTEgPwQCASoxISQBQjErAQwqAQwtAQwiAQw9AQw+AQw2AQw0AQwyAQwiAQw5MSA/BAIBKHBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL3R5cGVzLmRhcnQ4c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW8vc291cmNlX2luZm9ybWF0aW9uLmRhcnTAAEBdLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5zb3VyY2VfaW5mb3JtYXRpb247CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vanMvanMuZGFydCcgc2hvdyBKYXZhU2NyaXB0Tm9kZVNvdXJjZUluZm9ybWF0aW9uOwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0JzsKaW1wb3J0ICdzb3VyY2VfZmlsZS5kYXJ0JzsKaW1wb3J0ICdwb3NpdGlvbl9pbmZvcm1hdGlvbi5kYXJ0JzsKCi8vLyBJbnRlcmZhY2UgZm9yIHBhc3Npbmcgc291cmNlIGluZm9ybWF0aW9uLCBmb3IgaW5zdGFuY2UgZm9yIHVzZSBpbiBzb3VyY2UKLy8vIG1hcHMsIHRocm91Z2ggdGhlIGJhY2tlbmQuCmFic3RyYWN0IGNsYXNzIFNvdXJjZUluZm9ybWF0aW9uIGV4dGVuZHMgSmF2YVNjcmlwdE5vZGVTb3VyY2VJbmZvcm1hdGlvbiB7CiAgY29uc3QgU291cmNlSW5mb3JtYXRpb24oKTsKCiAgc3RhdGljIFNvdXJjZUluZm9ybWF0aW9uIHJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgaW50IGhhc1NvdXJjZUluZm9ybWF0aW9uID0gc291cmNlLnJlYWRJbnQoKTsKICAgIGlmIChoYXNTb3VyY2VJbmZvcm1hdGlvbiA9PSAwKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIGlmIChoYXNTb3VyY2VJbmZvcm1hdGlvbiA9PSAxKSB7CiAgICAgIHJldHVybiBjb25zdCBTb3VyY2VNYXBwZWRNYXJrZXIoKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChoYXNTb3VyY2VJbmZvcm1hdGlvbiA9PSAyKTsKICAgICAgcmV0dXJuIFBvc2l0aW9uU291cmNlSW5mb3JtYXRpb24ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICB9CiAgfQoKICBzdGF0aWMgdm9pZCB3cml0ZVRvRGF0YVNpbmsoCiAgICAgIERhdGFTaW5rIHNpbmssIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBpZiAoc291cmNlSW5mb3JtYXRpb24gPT0gbnVsbCkgewogICAgICBzaW5rLndyaXRlSW50KDApOwogICAgfSBlbHNlIGlmIChzb3VyY2VJbmZvcm1hdGlvbiBpcyBTb3VyY2VNYXBwZWRNYXJrZXIpIHsKICAgICAgc2luay53cml0ZUludCgxKTsKICAgIH0gZWxzZSB7CiAgICAgIHNpbmsud3JpdGVJbnQoMik7CiAgICAgIFBvc2l0aW9uU291cmNlSW5mb3JtYXRpb24gcG9zaXRpb25Tb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogICAgICBwb3NpdGlvblNvdXJjZUluZm9ybWF0aW9uLndyaXRlVG9EYXRhU2lua0ludGVybmFsKHNpbmspOwogICAgfQogIH0KCiAgU291cmNlU3BhbiBnZXQgc291cmNlU3BhbjsKCiAgLy8vIFRoZSBzb3VyY2UgbG9jYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGFydCBvZiB0aGUgSlMgbm9kZS4KICBTb3VyY2VMb2NhdGlvbiBnZXQgc3RhcnRQb3NpdGlvbiA9PiBudWxsOwoKICAvLy8gVGhlIHNvdXJjZSBsb2NhdGlvbiBhc3NvY2lhdGVkIHdpdGggYW4gaW5uZXIgb2YgdGhlIEpTIG5vZGUuCiAgLy8vCiAgLy8vIFRoZSBpbm5lciBwb3NpdGlvbiBpcyBmb3IgaW5zdGFuY2UgYGZvbygpYCBpbiBgby5mb28oKWAuCiAgU291cmNlTG9jYXRpb24gZ2V0IGlubmVyUG9zaXRpb24gPT4gbnVsbDsKCiAgLy8vIFRoZSBzb3VyY2UgbG9jYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBlbmQgb2YgdGhlIEpTIG5vZGUuCiAgU291cmNlTG9jYXRpb24gZ2V0IGVuZFBvc2l0aW9uID0+IG51bGw7CgogIC8vLyBBIGxpc3QgY29udGFpbmluZyBzdGFydCwgaW5uZXIsIGFuZCBlbmQgcG9zaXRpb25zLgogIExpc3Q8U291cmNlTG9jYXRpb24+IGdldCBzb3VyY2VMb2NhdGlvbnM7CgogIC8vLyBBIGxpc3Qgb2YgaW5saW5pbmcgY29udGV4dCBsb2NhdGlvbnMuCiAgTGlzdDxGcmFtZUNvbnRleHQ+IGdldCBpbmxpbmluZ0NvbnRleHQgPT4gbnVsbDsKCiAgLy8vIFJldHVybiBhIHNob3J0IHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNvdXJjZSBsb2NhdGlvbi4KICBTdHJpbmcgZ2V0IHNob3J0VGV4dDsKfQoKLy8vIENvbnRleHQgaW5mb3JtYXRpb24gYWJvdXQgaW5saW5lZCBjYWxscy4KLy8vCi8vLyBUaGlzIGlzIGFzc29jaWF0ZWQgd2l0aCBTb3VyY2VJbmZvcm1hdGlvbiBvYmplY3RzIHRvIGJlIGFibGUgdG8gZW1pdAovLy8gcHJlY2lzZSBkYXRhIGFib3V0IGlubGluaW5nIHRoYXQgY2FuIHRoZW4gYmUgdXNlZCBieSBkZWZvYnVzY2F0aW9uIHRvb2xzCi8vLyB3aGVuIHJlY29uc3RydWN0aW5nIGEgc291cmNlIHN0YWNrIGZyb20gYSBwcm9kdWN0aW9uIHN0YWNrIHRyYWNlLgpjbGFzcyBGcmFtZUNvbnRleHQgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2ZyYW1lLWNvbnRleHQnOwoKICAvLy8gTG9jYXRpb24gb2YgdGhlIGNhbGwgdGhhdCB3YXMgaW5saW5lZC4KICBmaW5hbCBTb3VyY2VJbmZvcm1hdGlvbiBjYWxsSW5mb3JtYXRpb247CgogIC8vLyBOYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3YXMgaW5saW5lZC4KICBmaW5hbCBTdHJpbmcgaW5saW5lZE1ldGhvZE5hbWU7CgogIEZyYW1lQ29udGV4dCh0aGlzLmNhbGxJbmZvcm1hdGlvbiwgdGhpcy5pbmxpbmVkTWV0aG9kTmFtZSk7CgogIGZhY3RvcnkgRnJhbWVDb250ZXh0LnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBTb3VyY2VJbmZvcm1hdGlvbiBjYWxsSW5mb3JtYXRpb24gPSBzb3VyY2UucmVhZENhY2hlZDxTb3VyY2VJbmZvcm1hdGlvbj4oCiAgICAgICAgKCkgPT4gU291cmNlSW5mb3JtYXRpb24ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSkpOwogICAgU3RyaW5nIGlubGluZWRNZXRob2ROYW1lID0gc291cmNlLnJlYWRTdHJpbmcoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgRnJhbWVDb250ZXh0KGNhbGxJbmZvcm1hdGlvbiwgaW5saW5lZE1ldGhvZE5hbWUpOwogIH0KCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUNhY2hlZDxTb3VyY2VJbmZvcm1hdGlvbj4oCiAgICAgICAgY2FsbEluZm9ybWF0aW9uLAogICAgICAgIChTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgPT4KICAgICAgICAgICAgU291cmNlSW5mb3JtYXRpb24ud3JpdGVUb0RhdGFTaW5rKHNpbmssIHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICBzaW5rLndyaXRlU3RyaW5nKGlubGluZWRNZXRob2ROYW1lKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiKEZyYW1lQ29udGV4dDogJGNhbGxJbmZvcm1hdGlvbiwgJGlubGluZWRNZXRob2ROYW1lKSI7Cn0KCi8vLyBTdHJhdGVneSBmb3IgY3JlYXRpbmcsIHByb2Nlc3NpbmcgYW5kIGFwcGx5aW5nIFtTb3VyY2VJbmZvcm1hdGlvbl0uCmNsYXNzIFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kgewogIGNvbnN0IFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3koKTsKCiAgLy8vIENyZWF0ZSBhIFtTb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXJdIGZvciBbbWVtYmVyXS4KICBTb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIgY3JlYXRlQnVpbGRlckZvckNvbnRleHQoCiAgICAgIGNvdmFyaWFudCBNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICByZXR1cm4gbmV3IFNvdXJjZUluZm9ybWF0aW9uQnVpbGRlcigpOwogIH0KCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gbWFya2VyIGZvciBub24tcHJlYW1ibGUgY29kZS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFNvdXJjZU1hcHBlZE1hcmtlcigpID0+IG51bGw7CgogIC8vLyBDYWxsZWQgd2hlbiBjb21waWxhdGlvbiBoYXMgY29tcGxldGVkLgogIHZvaWQgb25Db21wbGV0ZSgpIHt9Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIGdlbmVyYXRpbmcgW1NvdXJjZUluZm9ybWF0aW9uXS4KY2xhc3MgU291cmNlSW5mb3JtYXRpb25CdWlsZGVyIHsKICBjb25zdCBTb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIoKTsKCiAgLy8vIENyZWF0ZSBhIFtTb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXJdIGZvciBbbWVtYmVyXSB3aXRoIGFkZGl0aW9uYWwgaW5saW5pbmcKICAvLy8gW2NvbnRleHRdLgogIFNvdXJjZUluZm9ybWF0aW9uQnVpbGRlciBmb3JDb250ZXh0KAogICAgICAgICAgY292YXJpYW50IE1lbWJlckVudGl0eSBtZW1iZXIsIFNvdXJjZUluZm9ybWF0aW9uIGNvbnRleHQpID0+CiAgICAgIHRoaXM7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgZGVjbGFyYXRpb24gb2YgdGhlIFttZW1iZXJdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkRGVjbGFyYXRpb24oY292YXJpYW50IE1lbWJlckVudGl0eSBtZW1iZXIpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgc3R1YiBvZiBbY2FsbFN0cnVjdHVyZV0gZm9yIFttZW1iZXJdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkU3R1YigKICAgICAgICAgIGNvdmFyaWFudCBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlKSA9PgogICAgICBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIGdlbmVyaWMgW25vZGVdLgogIEBkZXByZWNhdGVkCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRHZW5lcmljKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIGFuIGluc3RhbnRpYXRpb24gb2YgYSBjbGFzcyB1c2luZyBbbm9kZV0KICAvLy8gZm9yIHRoZSBzb3VyY2UgcG9zaXRpb24uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRDcmVhdGUoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIHJldHVybiBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRSZXR1cm4oaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgYW4gaW1wbGljaXQgcmV0dXJuIGluIFtlbGVtZW50XS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEltcGxpY2l0UmV0dXJuKGNvdmFyaWFudCBNZW1iZXJFbnRpdHkgZWxlbWVudCkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSBsb29wIFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZExvb3AoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgYSByZWFkIGFjY2VzcyBsaWtlIGBhLmJgLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkR2V0KGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIGEgd3JpdGUgYWNjZXNzIGxpa2UgYGEuYiA9IDNgLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkU2V0KGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIGEgY2FsbCBpbiBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRDYWxsKGlyLk5vZGUgcmVjZWl2ZXIsIGlyLk5vZGUgY2FsbCkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSBpZiBzdGF0ZW1lbnQgaW4gW25vZGVdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkSWYoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIGNvbnN0cnVjdG9yIGludm9jYXRpb24gaW4gW25vZGVdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkTmV3KGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSB0aHJvdyBpbiBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRUaHJvdyhpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgYXNzZXJ0IGluIFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEFzc2VydChpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgYXNzaWdubWVudCBpbiBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRBc3NpZ25tZW50KGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSB2YXJpYWJsZSBkZWNsYXJhdGlvbiBpbnNlcnRlZCBhcwogIC8vLyBmaXJzdCBzdGF0ZW1lbnQgb2YgYSBmdW5jdGlvbi4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFZhcmlhYmxlRGVjbGFyYXRpb24oKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIGF3YWl0IFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEF3YWl0KGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSB5aWVsZCBvciB5aWVsZCogW25vZGVdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkWWllbGQoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgYXN5bmMvYXdhaXQgYm9pbGVyIHBsYXRlIGNvZGUuCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRBc3luY0JvZHkoKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgZXhpdGluZyBhc3luYy9hd2FpdCBjb2RlLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkQXN5bmNFeGl0KCkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIGFuIGludm9jYXRpb24gb2YgYSBmb3JlaWduIG1ldGhvZC4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEZvcmVpZ25Db2RlKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIGEgc3RyaW5nIGludGVycG9sYXRpb24gb2YgW25vZGVdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkU3RyaW5nSW50ZXJwb2xhdGlvbihpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgZm9yLWluIGBpdGVyYXRvcmAgYWNjZXNzIGluIFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEZvckluSXRlcmF0b3IoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIGZvci1pbiBgbW92ZU5leHRgIGNhbGwgaW4gW25vZGVdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkRm9ySW5Nb3ZlTmV4dChpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgZm9yLWluIGBjdXJyZW50YCBhY2Nlc3MgaW4gW25vZGVdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkRm9ySW5DdXJyZW50KGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSBmb3ItaW4gdmFyaWFibGUgYXNzaWdubWVudCBpbiBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRGb3JJblNldChpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgb3BlcmF0b3IgYFtdYCBhY2Nlc3MgaW4gW25vZGVdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkSW5kZXgoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIG9wZXJhdG9yIGBbXT1gIGFzc2lnbm1lbnQgaW4gW25vZGVdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkSW5kZXhTZXQoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIGJpbmFyeSBvcGVyYXRpb24gaW4gW25vZGVdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkQmluYXJ5KGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSB1bmFyeSBvcGVyYXRpb24gaW4gW25vZGVdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkVW5hcnkoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIHRyeSBzdGF0ZW1lbnQgaW4gW25vZGVdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkVHJ5KGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSB1bmFyeSBvcGVyYXRvciBpbiBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRDYXRjaChpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgaXMtdGVzdCBpbiBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRJcyhpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgYXMtY2FzdCBpbiBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRBcyhpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgc3dpdGNoIHN0YXRlbWVudCBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRTd2l0Y2goaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIHN3aXRjaCBjYXNlIGluIFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFN3aXRjaENhc2UoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIGxpc3QgbGl0ZXJhbCBpbiBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRMaXN0TGl0ZXJhbChpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgYnJlYWsvY29udGludWUgaW4gW25vZGVdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkR290byhpci5Ob2RlIG5vZGUpID0+IG51bGw7Cn0KCi8vLyBBIGxvY2F0aW9uIGluIGEgc291cmNlIGZpbGUuCmFic3RyYWN0IGNsYXNzIFNvdXJjZUxvY2F0aW9uIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdzb3VyY2UtbG9jYXRpb24nOwoKICBjb25zdCBTb3VyY2VMb2NhdGlvbigpOwoKICAvLy8gVGhlIGFic29sdXRlIFVSSSBvZiB0aGUgc291cmNlIGZpbGUgb2YgdGhpcyBzb3VyY2UgbG9jYXRpb24uCiAgVXJpIGdldCBzb3VyY2VVcmk7CgogIC8vLyBUaGUgY2hhcmFjdGVyIG9mZnNldCBvZiB0aGUgdGhpcyBzb3VyY2UgbG9jYXRpb24gaW50byB0aGUgc291cmNlIGZpbGUuCiAgaW50IGdldCBvZmZzZXQ7CgogIC8vLyBUaGUgMS1iYXNlZCBsaW5lIG51bWJlciBvZiB0aGUgW29mZnNldF0uCiAgaW50IGdldCBsaW5lOwoKICAvLy8gVGhlIDEtYmFzZWQgY29sdW1uIG51bWJlciBvZiB0aGUgW29mZnNldF0gd2l0aCBpdHMgbGluZS4KICBpbnQgZ2V0IGNvbHVtbjsKCiAgLy8vIFRoZSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNvdXJjZSBsb2NhdGlvbiwgaWYgYW55LgogIFN0cmluZyBnZXQgc291cmNlTmFtZTsKCiAgc3RhdGljIFNvdXJjZUxvY2F0aW9uIHJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgaW50IGhhc1NvdXJjZUxvY2F0aW9uID0gc291cmNlLnJlYWRJbnQoKTsKICAgIGlmIChoYXNTb3VyY2VMb2NhdGlvbiA9PSAwKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIGlmIChoYXNTb3VyY2VMb2NhdGlvbiA9PSAxKSB7CiAgICAgIHJldHVybiBjb25zdCBOb1NvdXJjZUxvY2F0aW9uTWFya2VyKCk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoaGFzU291cmNlTG9jYXRpb24gPT0gMik7CiAgICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgICBVcmkgc291cmNlVXJpID0gc291cmNlLnJlYWRVcmkoKTsKICAgICAgaW50IG9mZnNldCA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICAgIGludCBsaW5lID0gc291cmNlLnJlYWRJbnQoKTsKICAgICAgaW50IGNvbHVtbiA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICAgIFN0cmluZyBzb3VyY2VOYW1lID0gc291cmNlLnJlYWRTdHJpbmcoKTsKICAgICAgc291cmNlLmVuZCh0YWcpOwogICAgICByZXR1cm4gbmV3IERpcmVjdFNvdXJjZUxvY2F0aW9uKAogICAgICAgICAgc291cmNlVXJpLCBvZmZzZXQsIGxpbmUsIGNvbHVtbiwgc291cmNlTmFtZSk7CiAgICB9CiAgfQoKICBzdGF0aWMgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaywgU291cmNlTG9jYXRpb24gc291cmNlTG9jYXRpb24pIHsKICAgIGlmIChzb3VyY2VMb2NhdGlvbiA9PSBudWxsKSB7CiAgICAgIHNpbmsud3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgaWYgKHNvdXJjZUxvY2F0aW9uIGlzIE5vU291cmNlTG9jYXRpb25NYXJrZXIpIHsKICAgICAgc2luay53cml0ZUludCgxKTsKICAgIH0gZWxzZSB7CiAgICAgIHNpbmsud3JpdGVJbnQoMik7CiAgICAgIHNpbmsuYmVnaW4odGFnKTsKICAgICAgc2luay53cml0ZVVyaShzb3VyY2VMb2NhdGlvbi5zb3VyY2VVcmkpOwogICAgICBzaW5rLndyaXRlSW50KHNvdXJjZUxvY2F0aW9uLm9mZnNldCk7CiAgICAgIHNpbmsud3JpdGVJbnQoc291cmNlTG9jYXRpb24ubGluZSk7CiAgICAgIHNpbmsud3JpdGVJbnQoc291cmNlTG9jYXRpb24uY29sdW1uKTsKICAgICAgc2luay53cml0ZVN0cmluZyhzb3VyY2VMb2NhdGlvbi5zb3VyY2VOYW1lKTsKICAgICAgc2luay5lbmQodGFnKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgewogICAgcmV0dXJuIHNvdXJjZVVyaS5oYXNoQ29kZSAqIDE3ICsKICAgICAgICBvZmZzZXQuaGFzaENvZGUgKiAxOSArCiAgICAgICAgc291cmNlTmFtZS5oYXNoQ29kZSAqIDIzOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIG90aGVyIGlzIFNvdXJjZUxvY2F0aW9uICYmCiAgICAgICAgc291cmNlVXJpID09IG90aGVyLnNvdXJjZVVyaSAmJgogICAgICAgIG9mZnNldCA9PSBvdGhlci5vZmZzZXQgJiYKICAgICAgICBzb3VyY2VOYW1lID09IG90aGVyLnNvdXJjZU5hbWU7CiAgfQoKICBTdHJpbmcgZ2V0IHNob3J0VGV4dCA9PiAnJHtzb3VyY2VVcmk/LnBhdGhTZWdtZW50cz8ubGFzdH06WyRsaW5lLCRjb2x1bW5dJzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyR7c291cmNlVXJpfTpbJHtsaW5lfSwke2NvbHVtbn1dJzsKfQoKY2xhc3MgRGlyZWN0U291cmNlTG9jYXRpb24gZXh0ZW5kcyBTb3VyY2VMb2NhdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgVXJpIHNvdXJjZVVyaTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IG9mZnNldDsKCiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGxpbmU7CgogIEBvdmVycmlkZQogIGZpbmFsIGludCBjb2x1bW47CgogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBzb3VyY2VOYW1lOwoKICBEaXJlY3RTb3VyY2VMb2NhdGlvbigKICAgICAgdGhpcy5zb3VyY2VVcmksIHRoaXMub2Zmc2V0LCB0aGlzLmxpbmUsIHRoaXMuY29sdW1uLCB0aGlzLnNvdXJjZU5hbWUpOwp9CgovLy8gQSBsb2NhdGlvbiBpbiBhIHNvdXJjZSBmaWxlLgphYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFNvdXJjZUxvY2F0aW9uIGV4dGVuZHMgU291cmNlTG9jYXRpb24gewogIGZpbmFsIFNvdXJjZUZpbGUgX3NvdXJjZUZpbGU7CiAgaXIuTG9jYXRpb24gX2xvY2F0aW9uOwoKICBBYnN0cmFjdFNvdXJjZUxvY2F0aW9uKHRoaXMuX3NvdXJjZUZpbGUpIHsKICAgIGFzc2VydCgKICAgICAgICBvZmZzZXQgPCBfc291cmNlRmlsZS5sZW5ndGgsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIG5ldyBTb3VyY2VTcGFuKHNvdXJjZVVyaSwgMCwgMCksCiAgICAgICAgICAgICJJbnZhbGlkIHNvdXJjZSBsb2NhdGlvbiBpbiAke3NvdXJjZVVyaX06ICIKICAgICAgICAgICAgIm9mZnNldD0kb2Zmc2V0LCBsZW5ndGg9JHtfc291cmNlRmlsZS5sZW5ndGh9LiIpKTsKICB9CgogIEFic3RyYWN0U291cmNlTG9jYXRpb24uZnJvbUxvY2F0aW9uKHRoaXMuX2xvY2F0aW9uKSA6IF9zb3VyY2VGaWxlID0gbnVsbDsKCiAgQWJzdHJhY3RTb3VyY2VMb2NhdGlvbi5mcm9tT3RoZXIoQWJzdHJhY3RTb3VyY2VMb2NhdGlvbiBsb2NhdGlvbikKICAgICAgOiB0aGlzLmZyb21Mb2NhdGlvbihsb2NhdGlvbi5fbG9jYXRpb24pOwoKICBAb3ZlcnJpZGUKICBVcmkgZ2V0IHNvdXJjZVVyaSA9PiBfc291cmNlRmlsZS51cmk7CgogIEBvdmVycmlkZQogIGludCBnZXQgb2Zmc2V0OwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGxpbmUgPT4gKF9sb2NhdGlvbiA/Pz0gX3NvdXJjZUZpbGUuZ2V0TG9jYXRpb24ob2Zmc2V0KSkubGluZTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBjb2x1bW4gPT4gKF9sb2NhdGlvbiA/Pz0gX3NvdXJjZUZpbGUuZ2V0TG9jYXRpb24ob2Zmc2V0KSkuY29sdW1uOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IHNvdXJjZU5hbWU7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgc2hvcnRUZXh0ID0+ICcke3NvdXJjZVVyaS5wYXRoU2VnbWVudHMubGFzdH06WyRsaW5lLCRjb2x1bW5dJzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyR7c291cmNlVXJpfTpbJGxpbmUsJGNvbHVtbl0nOwp9CgpjbGFzcyBPZmZzZXRTb3VyY2VMb2NhdGlvbiBleHRlbmRzIEFic3RyYWN0U291cmNlTG9jYXRpb24gewogIEBvdmVycmlkZQogIGZpbmFsIGludCBvZmZzZXQ7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIHNvdXJjZU5hbWU7CgogIE9mZnNldFNvdXJjZUxvY2F0aW9uKFNvdXJjZUZpbGUgc291cmNlRmlsZSwgdGhpcy5vZmZzZXQsIHRoaXMuc291cmNlTmFtZSkKICAgICAgOiBzdXBlcihzb3VyY2VGaWxlKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBzaG9ydFRleHQgPT4gJyR7c3VwZXIuc2hvcnRUZXh0fTokc291cmNlTmFtZSc7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICcke3N1cGVyLnRvU3RyaW5nKCl9OiRzb3VyY2VOYW1lJzsKfQoKLy8vIENvbXB1dGUgdGhlIHNvdXJjZSBtYXAgbmFtZSBmb3IgW2VsZW1lbnRdLiBJZiBbY2FsbFN0cnVjdHVyZV0gaXMgbm9uLW51bGwKLy8vIGl0IGlzIHVzZWQgdG8gbmFtZSB0aGUgcGFyYW1ldGVyIHN0dWIgZm9yIFtlbGVtZW50XS4KLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWVyZ2UgdGhpcyB3aXRoIGBjb21wdXRlS2VybmVsRWxlbWVudE5hbWVGb3JTb3VyY2VNYXBzYAovLyB3aGVuIHRoZSBvbGQgZnJvbnRlbmQgaXMgcmVtb3ZlZC4KU3RyaW5nIGNvbXB1dGVFbGVtZW50TmFtZUZvclNvdXJjZU1hcHMoRW50aXR5IGVsZW1lbnQsCiAgICBbQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlXSkgewogIGlmIChlbGVtZW50IGlzIENsYXNzRW50aXR5KSB7CiAgICByZXR1cm4gZWxlbWVudC5uYW1lOwogIH0gZWxzZSBpZiAoZWxlbWVudCBpcyBNZW1iZXJFbnRpdHkpIHsKICAgIFN0cmluZyBzdWZmaXggPSBjb21wdXRlU3R1YlN1ZmZpeChjYWxsU3RydWN0dXJlKTsKICAgIGlmIChlbGVtZW50IGlzIENvbnN0cnVjdG9yRW50aXR5IHx8IGVsZW1lbnQgaXMgQ29uc3RydWN0b3JCb2R5RW50aXR5KSB7CiAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBlbGVtZW50LmVuY2xvc2luZ0NsYXNzLm5hbWU7CiAgICAgIGlmIChlbGVtZW50Lm5hbWUgPT0gJycpIHsKICAgICAgICByZXR1cm4gY2xhc3NOYW1lOwogICAgICB9CiAgICAgIHJldHVybiAnJGNsYXNzTmFtZS4ke2VsZW1lbnQubmFtZX0kc3VmZml4JzsKICAgIH0gZWxzZSBpZiAoZWxlbWVudC5lbmNsb3NpbmdDbGFzcyAhPSBudWxsKSB7CiAgICAgIGlmIChlbGVtZW50LmVuY2xvc2luZ0NsYXNzLmlzQ2xvc3VyZSkgewogICAgICAgIHJldHVybiBjb21wdXRlRWxlbWVudE5hbWVGb3JTb3VyY2VNYXBzKAogICAgICAgICAgICBlbGVtZW50LmVuY2xvc2luZ0NsYXNzLCBjYWxsU3RydWN0dXJlKTsKICAgICAgfQogICAgICByZXR1cm4gJyR7ZWxlbWVudC5lbmNsb3NpbmdDbGFzcy5uYW1lfS4ke2VsZW1lbnQubmFtZX0kc3VmZml4JzsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAnJHtlbGVtZW50Lm5hbWV9JHN1ZmZpeCc7CiAgICB9CiAgfQogIC8vIFRPRE8ocmVkZW1wdGlvbik6IENyZWF0ZSBlbGVtZW50IG5hbWVzIGZyb20ga2VybmVsIGxvY2FscyBhbmQgY2xvc3VyZXMuCiAgcmV0dXJuIGVsZW1lbnQubmFtZTsKfQoKLy8vIENvbXB1dGUgdGhlIHN1ZmZpeCB1c2VkIGZvciBhIHBhcmFtZXRlciBzdHViIGZvciBbY2FsbFN0cnVjdHVyZV0uClN0cmluZyBjb21wdXRlU3R1YlN1ZmZpeChDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUpIHsKICBpZiAoY2FsbFN0cnVjdHVyZSA9PSBudWxsKSByZXR1cm4gJyc7CiAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogIHNiLndyaXRlKHInW2Z1bmN0aW9uLWVudHJ5JCcpOwogIHNiLndyaXRlKGNhbGxTdHJ1Y3R1cmUucG9zaXRpb25hbEFyZ3VtZW50Q291bnQpOwogIGlmIChjYWxsU3RydWN0dXJlLm5hbWVkQXJndW1lbnRzLmlzTm90RW1wdHkpIHsKICAgIHNiLndyaXRlKHInJCcpOwogICAgc2Iud3JpdGUoY2FsbFN0cnVjdHVyZS5nZXRPcmRlcmVkTmFtZWRBcmd1bWVudHMoKS5qb2luKHInJCcpKTsKICB9CiAgc2Iud3JpdGUoJ10nKTsKICByZXR1cm4gc2IudG9TdHJpbmcoKTsKfQoKY2xhc3MgTm9Tb3VyY2VMb2NhdGlvbk1hcmtlciBleHRlbmRzIFNvdXJjZUxvY2F0aW9uIHsKICBjb25zdCBOb1NvdXJjZUxvY2F0aW9uTWFya2VyKCk7CgogIEBvdmVycmlkZQogIFVyaSBnZXQgc291cmNlVXJpID0+IG51bGw7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgc291cmNlTmFtZSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGNvbHVtbiA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGxpbmUgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBvZmZzZXQgPT4gbnVsbDsKCiAgU3RyaW5nIGdldCBzaG9ydE5hbWUgPT4gJzxuby1sb2NhdGlvbj4nOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnPG5vLWxvY2F0aW9uPic7Cn0KCi8vLyBJbmZvcm1hdGlvbiB0cmFja2VkIGFib3V0IGlubGluZWQgZnJhbWVzLgovLy8KLy8vIERhcnQyanMgYWRkcyBhbiBleHRlbnNpb24gdG8gc291cmNlLW1hcCBmaWxlcyB0byB0cmFjayB3aGVyZSBjYWxscyBhcmUKLy8vIGlubGluZWQuIFRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZCB0byBpbXByb3ZlIHRoZSBwcmVjaXNpb24gb2YgdG9vbHMgdGhhdAovLy8gZGVvYmZ1c2NhdGUgcHJvZHVjdGlvbiBzdGFjayB0cmFjZXMuCmNsYXNzIEZyYW1lRW50cnkgewogIC8vLyBGb3IgcHVzaCBvcGVyYXRpb25zLCB0aGUgbG9jYXRpb24gb2YgdGhlIGlubGluaW5nIGNhbGwsIG90aGVyd2lzZSBudWxsLgogIGZpbmFsIFNvdXJjZUxvY2F0aW9uIHB1c2hMb2NhdGlvbjsKCiAgLy8vIEZvciBwdXNoIG9wZXJhdGlvbnMsIHRoZSBpbmxpbmVkIG1ldGhvZCBuYW1lLCBvdGhlcndpc2UgbnVsbC4KICBmaW5hbCBTdHJpbmcgaW5saW5lZE1ldGhvZE5hbWU7CgogIC8vLyBXaGV0aGVyIGEgcG9wIGlzIHRoZSBsYXN0IHBvcCB0aGF0IG1ha2VzIHRoZSBpbmxpbmluZyBzdGFjayBlbXB0eS4KICBmaW5hbCBib29sIGlzRW1wdHlQb3A7CgogIEZyYW1lRW50cnkucHVzaCh0aGlzLnB1c2hMb2NhdGlvbiwgdGhpcy5pbmxpbmVkTWV0aG9kTmFtZSkKICAgICAgOiBpc0VtcHR5UG9wID0gZmFsc2U7CgogIEZyYW1lRW50cnkucG9wKHRoaXMuaXNFbXB0eVBvcCkKICAgICAgOiBwdXNoTG9jYXRpb24gPSBudWxsLAogICAgICAgIGlubGluZWRNZXRob2ROYW1lID0gbnVsbDsKCiAgYm9vbCBnZXQgaXNQdXNoID0+IHB1c2hMb2NhdGlvbiAhPSBudWxsOwogIGJvb2wgZ2V0IGlzUG9wID0+IHB1c2hMb2NhdGlvbiA9PSBudWxsOwp9CoH6AE5OPAEkASgZJD0uKhskAU0fSx0BQzElEywpDSlDBgQBHzwlGDoYDRhPPwYEAR0BRCwBQwY/LAFCKgE5LAEsMgFEGAIBLQRJTUYVLQEtKwErIgE+AT8XTj00FUEEASgVKRkxSSkTBAEMTwIBSCIlATg0JysEAUE3AS0XAgEyISQBUBEnRwwBSE0BUR9NDAE7DjgBUB83ATo3AUhRATg1AUE0AUY0ATlHAUMzAU00ATw2AT03AUE7AUwlOAE5NgFDNgFGLgFBLgFKPAFJRAFPPgFNPgFOPQFROQFLNgFQOQFHNwFGNgFENAFFNgE+MwE+MwFENwFCOwFDPAFFNQIBISAvARoBQxUBTRIBLxABPxIBPRkBQC4iEyktDSYZKCUjJS8XJzgGBAFOIhg7GA0YFy8sKiwzFQYEAQwVJR8iBAEMHC0mKCIoBAFOAQw7AgE0DBcBDBQBDBIBDBQBDBsBGE0CASE/IBkBLQwlEi04PwQBTAFELwEMKAEMEgEMSAEMTAEMGQEMTAEMNwIBPAwUDBsBTBsBDDwBDDoCAU45UCU3JSAZKDZMNiAaCDIxLjA0CEYNJwYETRcCAUY4KCghMzEUQwQRGAIBNiIBDB0BDCEBDBoBDBgBDBoBKwEMKAIBLgRLTSkTTiUBRCIBSRkBPRwBIh0iASsqAgEvcGFja2FnZTpjb21waWxlci9zcmMvaW8vc291cmNlX2luZm9ybWF0aW9uLmRhcnQ1c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfYmFja2VuZC9iYWNrZW5kLmRhcnSpyy8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGpzX2JhY2tlbmQuYmFja2VuZDsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi9jb2RlZ2VuLmRhcnQnOwppbXBvcnQgJy4uL2RlZmVycmVkX2xvYWQuZGFydCcgc2hvdyBEZWZlcnJlZExvYWRUYXNrOwppbXBvcnQgJy4uL2R1bXBfaW5mby5kYXJ0JyBzaG93IER1bXBJbmZvVGFzazsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbnF1ZXVlLmRhcnQnIHNob3cgUmVzb2x1dGlvbkVucXVldWVyOwppbXBvcnQgJy4uL2Zyb250ZW5kX3N0cmF0ZWd5LmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL3RyYWNlci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS93b3JsZF9pbXBhY3QuZGFydCcKICAgIHNob3cgSW1wYWN0U3RyYXRlZ3ksIEltcGFjdFVzZUNhc2UsIFdvcmxkSW1wYWN0LCBXb3JsZEltcGFjdFZpc2l0b3I7CmltcG9ydCAnYW5ub3RhdGlvbnMuZGFydCc7CmltcG9ydCAnY2hlY2tlZF9tb2RlX2hlbHBlcnMuZGFydCc7CmltcG9ydCAnbmFtZXIuZGFydCc7CmltcG9ydCAncnVudGltZV90eXBlcy5kYXJ0JzsKaW1wb3J0ICdydW50aW1lX3R5cGVzX2NvZGVnZW4uZGFydCc7CmltcG9ydCAncnVudGltZV90eXBlc19uZXcuZGFydCc7CgphYnN0cmFjdCBjbGFzcyBGdW5jdGlvbkNvbXBpbGVyIHsKICB2b2lkIGluaXRpYWxpemUoCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGdsb2JhbEluZmVyZW5jZVJlc3VsdHMsIENvZGVnZW5JbnB1dHMgY29kZWdlbik7CgogIC8vLyBHZW5lcmF0ZXMgSmF2YVNjcmlwdCBjb2RlIGZvciBbbWVtYmVyXS4KICBDb2RlZ2VuUmVzdWx0IGNvbXBpbGUoTWVtYmVyRW50aXR5IG1lbWJlcik7CgogIEl0ZXJhYmxlIGdldCB0YXNrczsKfQoKLyoKICogSW52YXJpYW50czoKICogICBjYW5JbmxpbmUoZnVuY3Rpb24pIGltcGxpZXMgY2FuSW5saW5lKGZ1bmN0aW9uLCBpbnNpZGVMb29wOnRydWUpCiAqICAgIWNhbklubGluZShmdW5jdGlvbiwgaW5zaWRlTG9vcDogdHJ1ZSkgaW1wbGllcyAhY2FuSW5saW5lKGZ1bmN0aW9uKQogKi8KY2xhc3MgRnVuY3Rpb25JbmxpbmVDYWNoZSB7CiAgc3RhdGljIGNvbnN0IGludCBfdW5rbm93biA9IC0xOwogIHN0YXRpYyBjb25zdCBpbnQgX211c3ROb3RJbmxpbmUgPSAwOwogIC8vIE1heS1pbmxpbmUtaW4tbG9vcCBtZWFucyB0aGF0IHRoZSBmdW5jdGlvbiBtYXkgbm90IGJlIGlubGluZWQgb3V0c2lkZSBsb29wcwogIC8vIGJ1dCBtYXkgYmUgaW5saW5lZCBpbiBhIGxvb3AuCiAgc3RhdGljIGNvbnN0IGludCBfbWF5SW5saW5lSW5Mb29wTXVzdE5vdE91dHNpZGUgPSAxOwogIC8vIFRoZSBmdW5jdGlvbiBjYW4gYmUgaW5saW5lZCBpbiBhIGxvb3AsIGJ1dCBub3Qgb3V0c2lkZS4KICBzdGF0aWMgY29uc3QgaW50IF9jYW5JbmxpbmVJbkxvb3BNdXN0Tm90T3V0c2lkZSA9IDI7CiAgLy8gTWF5LWlubGluZSBtZWFucyB0aGF0IHdlIGtub3cgdGhhdCBpdCBjYW4gYmUgaW5saW5lZCBpbnNpZGUgYSBsb29wLCBidXQKICAvLyBkb24ndCBrbm93IGFib3V0IHRoZSBnZW5lcmFsIGNhc2UgeWV0LgogIHN0YXRpYyBjb25zdCBpbnQgX2NhbklubGluZUluTG9vcE1heUlubGluZU91dHNpZGUgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgX2NhbklubGluZSA9IDQ7CgogIGZpbmFsIE1hcDxGdW5jdGlvbkVudGl0eSwgaW50PiBfY2FjaGVkRGVjaXNpb25zID0KICAgICAgbmV3IE1hcDxGdW5jdGlvbkVudGl0eSwgaW50PigpOwoKICBmaW5hbCBTZXQ8RnVuY3Rpb25FbnRpdHk+IF9ub0lubGluZUZ1bmN0aW9ucyA9IG5ldyBTZXQ8RnVuY3Rpb25FbnRpdHk+KCk7CiAgZmluYWwgU2V0PEZ1bmN0aW9uRW50aXR5PiBfdHJ5SW5saW5lRnVuY3Rpb25zID0gbmV3IFNldDxGdW5jdGlvbkVudGl0eT4oKTsKCiAgRnVuY3Rpb25JbmxpbmVDYWNoZShBbm5vdGF0aW9uc0RhdGEgYW5ub3RhdGlvbnNEYXRhKSB7CiAgICBhbm5vdGF0aW9uc0RhdGEuZm9yRWFjaE5vSW5saW5lKChGdW5jdGlvbkVudGl0eSBmdW5jdGlvbikgewogICAgICBtYXJrQXNOb0lubGluZShmdW5jdGlvbik7CiAgICB9KTsKICAgIGFubm90YXRpb25zRGF0YS5mb3JFYWNoVHJ5SW5saW5lKChGdW5jdGlvbkVudGl0eSBmdW5jdGlvbikgewogICAgICBtYXJrQXNUcnlJbmxpbmUoZnVuY3Rpb24pOwogICAgfSk7CiAgfQoKICAvLy8gQ2hlY2tzIHRoYXQgW21ldGhvZF0gaXMgdGhlIGNhbm9uaWNhbCByZXByZXNlbnRhdGl2ZSBmb3IgdGhpcyBtZXRob2QuCiAgLy8vCiAgLy8vIEZvciBhIFtNZXRob2RFbGVtZW50XSB0aGlzIG1lYW5zIGl0IG11c3QgYmUgdGhlIGRlY2xhcmF0aW9uIGVsZW1lbnQuCiAgYm9vbCBjaGVja0Z1bmN0aW9uKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCkgewogICAgcmV0dXJuICckbWV0aG9kJy5zdGFydHNXaXRoKGpzRWxlbWVudFByZWZpeCk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgY3VycmVudCBjYWNoZSBkZWNpc2lvbi4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGZvciB0ZXN0aW5nLgogIGludCBnZXRDdXJyZW50Q2FjaGVEZWNpc2lvbkZvclRlc3RpbmcoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KGNoZWNrRnVuY3Rpb24oZWxlbWVudCksIGZhaWxlZEF0KGVsZW1lbnQpKTsKICAgIHJldHVybiBfY2FjaGVkRGVjaXNpb25zW2VsZW1lbnRdOwogIH0KCiAgLy8gUmV0dXJucyBgdHJ1ZWAvYGZhbHNlYCBpZiB3ZSBoYXZlIGEgY2FjaGVkIGRlY2lzaW9uLgogIC8vIFJldHVybnMgYG51bGxgIG90aGVyd2lzZS4KICBib29sIGNhbklubGluZShGdW5jdGlvbkVudGl0eSBlbGVtZW50LCB7Ym9vbCBpbnNpZGVMb29wfSkgewogICAgYXNzZXJ0KGNoZWNrRnVuY3Rpb24oZWxlbWVudCksIGZhaWxlZEF0KGVsZW1lbnQpKTsKICAgIGludCBkZWNpc2lvbiA9IF9jYWNoZWREZWNpc2lvbnNbZWxlbWVudF07CgogICAgaWYgKGRlY2lzaW9uID09IG51bGwpIHsKICAgICAgLy8gVE9ETyhzcmEpOiBIYXZlIGFubm90YXRpb25zIGZvciBtdXN0SW5saW5lIC8gbm9JbmxpbmUgZm9yIGNvbnN0cnVjdG9yCiAgICAgIC8vIGJvZGllcy4gKFRoZXJlIHVzZWQgdG8gYmUgc29tZSBsb2dpYyBoZXJlIHRvIGhhdmUgY29uc3RydWN0b3IgYm9kaWVzLAogICAgICAvLyBpbmhlcml0IHRoZSBzZXR0aW5ncyBmcm9tIGFubm90YXRpb25zIG9uIHRoZSBnZW5lcmF0aXZlCiAgICAgIC8vIGNvbnN0cnVjdG9yLiBUaGlzIHdhcyBjb25mbGF0ZWQgd2l0aCB0aGUgaGV1cmlzdGljIGRlY2lzaW9ucywgbGVhZGluZwogICAgICAvLyB0byBsYWNrIG9mIGlubGluaW5nIHdoZXJlIGl0IHdhcyBiZW5lZmljaWFsLikKICAgICAgZGVjaXNpb24gPSBfdW5rbm93bjsKICAgIH0KCiAgICBpZiAoaW5zaWRlTG9vcCkgewogICAgICBzd2l0Y2ggKGRlY2lzaW9uKSB7CiAgICAgICAgY2FzZSBfbXVzdE5vdElubGluZToKICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgY2FzZSBfdW5rbm93bjoKICAgICAgICBjYXNlIF9tYXlJbmxpbmVJbkxvb3BNdXN0Tm90T3V0c2lkZToKICAgICAgICAgIC8vIFdlIGtub3cgd2UgY2FuJ3QgaW5saW5lIG91dHNpZGUgYSBsb29wLCBidXQgZG9uJ3Qga25vdyBmb3IgdGhlCiAgICAgICAgICAvLyBsb29wIGNhc2UuIFJldHVybiBgbnVsbGAgdG8gaW5kaWNhdGUgdGhhdCB3ZSBkb24ndCBrbm93IHlldC4KICAgICAgICAgIHJldHVybiBudWxsOwoKICAgICAgICBjYXNlIF9jYW5JbmxpbmVJbkxvb3BNdXN0Tm90T3V0c2lkZToKICAgICAgICBjYXNlIF9jYW5JbmxpbmVJbkxvb3BNYXlJbmxpbmVPdXRzaWRlOgogICAgICAgIGNhc2UgX2NhbklubGluZToKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBzd2l0Y2ggKGRlY2lzaW9uKSB7CiAgICAgICAgY2FzZSBfbXVzdE5vdElubGluZToKICAgICAgICBjYXNlIF9tYXlJbmxpbmVJbkxvb3BNdXN0Tm90T3V0c2lkZToKICAgICAgICBjYXNlIF9jYW5JbmxpbmVJbkxvb3BNdXN0Tm90T3V0c2lkZToKICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgY2FzZSBfdW5rbm93bjoKICAgICAgICBjYXNlIF9jYW5JbmxpbmVJbkxvb3BNYXlJbmxpbmVPdXRzaWRlOgogICAgICAgICAgLy8gV2Uga25vdyB3ZSBjYW4gaW5saW5lIGluc2lkZSBhIGxvb3AsIGJ1dCBkb24ndCBrbm93IGZvciB0aGUKICAgICAgICAgIC8vIG5vbi1sb29wIGNhc2UuIFJldHVybiBgbnVsbGAgdG8gaW5kaWNhdGUgdGhhdCB3ZSBkb24ndCBrbm93IHlldC4KICAgICAgICAgIHJldHVybiBudWxsOwoKICAgICAgICBjYXNlIF9jYW5JbmxpbmU6CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQoKICAgIC8vIFF1aWV0IHN0YXRpYyBjaGVja2VyLgogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIG1hcmtBc0lubGluYWJsZShGdW5jdGlvbkVudGl0eSBlbGVtZW50LCB7Ym9vbCBpbnNpZGVMb29wfSkgewogICAgYXNzZXJ0KGNoZWNrRnVuY3Rpb24oZWxlbWVudCksIGZhaWxlZEF0KGVsZW1lbnQpKTsKICAgIGludCBvbGREZWNpc2lvbiA9IF9jYWNoZWREZWNpc2lvbnNbZWxlbWVudF07CgogICAgaWYgKG9sZERlY2lzaW9uID09IG51bGwpIHsKICAgICAgb2xkRGVjaXNpb24gPSBfdW5rbm93bjsKICAgIH0KCiAgICBpZiAoaW5zaWRlTG9vcCkgewogICAgICBzd2l0Y2ggKG9sZERlY2lzaW9uKSB7CiAgICAgICAgY2FzZSBfbXVzdE5vdElubGluZToKICAgICAgICAgIHRocm93IGZhaWxlZEF0KAogICAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICAgIkNhbid0IG1hcmsgJGVsZW1lbnQgYXMgbm9uLWlubGluYWJsZSBhbmQgaW5saW5hYmxlIGF0IHRoZSAiCiAgICAgICAgICAgICAgInNhbWUgdGltZS4iKTsKCiAgICAgICAgY2FzZSBfdW5rbm93bjoKICAgICAgICAgIC8vIFdlIGtub3cgdGhhdCBpdCBjYW4gYmUgaW5saW5lZCBpbiBhIGxvb3AsIGJ1dCBkb24ndCBrbm93IGFib3V0IHRoZQogICAgICAgICAgLy8gbm9uLWxvb3AgY2FzZSB5ZXQuCiAgICAgICAgICBfY2FjaGVkRGVjaXNpb25zW2VsZW1lbnRdID0gX2NhbklubGluZUluTG9vcE1heUlubGluZU91dHNpZGU7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfbWF5SW5saW5lSW5Mb29wTXVzdE5vdE91dHNpZGU6CiAgICAgICAgICBfY2FjaGVkRGVjaXNpb25zW2VsZW1lbnRdID0gX2NhbklubGluZUluTG9vcE11c3ROb3RPdXRzaWRlOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX2NhbklubGluZUluTG9vcE11c3ROb3RPdXRzaWRlOgogICAgICAgIGNhc2UgX2NhbklubGluZUluTG9vcE1heUlubGluZU91dHNpZGU6CiAgICAgICAgY2FzZSBfY2FuSW5saW5lOgogICAgICAgICAgLy8gRG8gbm90aGluZy4KICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBzd2l0Y2ggKG9sZERlY2lzaW9uKSB7CiAgICAgICAgY2FzZSBfbXVzdE5vdElubGluZToKICAgICAgICBjYXNlIF9tYXlJbmxpbmVJbkxvb3BNdXN0Tm90T3V0c2lkZToKICAgICAgICBjYXNlIF9jYW5JbmxpbmVJbkxvb3BNdXN0Tm90T3V0c2lkZToKICAgICAgICAgIHRocm93IGZhaWxlZEF0KAogICAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICAgIkNhbid0IG1hcmsgJGVsZW1lbnQgYXMgbm9uLWlubGluYWJsZSBhbmQgaW5saW5hYmxlIGF0IHRoZSAiCiAgICAgICAgICAgICAgInNhbWUgdGltZS4iKTsKCiAgICAgICAgY2FzZSBfdW5rbm93bjoKICAgICAgICBjYXNlIF9jYW5JbmxpbmVJbkxvb3BNYXlJbmxpbmVPdXRzaWRlOgogICAgICAgICAgX2NhY2hlZERlY2lzaW9uc1tlbGVtZW50XSA9IF9jYW5JbmxpbmU7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfY2FuSW5saW5lOgogICAgICAgICAgLy8gRG8gbm90aGluZy4KICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIG1hcmtBc05vbklubGluYWJsZShGdW5jdGlvbkVudGl0eSBlbGVtZW50LCB7Ym9vbCBpbnNpZGVMb29wOiB0cnVlfSkgewogICAgYXNzZXJ0KGNoZWNrRnVuY3Rpb24oZWxlbWVudCksIGZhaWxlZEF0KGVsZW1lbnQpKTsKICAgIGludCBvbGREZWNpc2lvbiA9IF9jYWNoZWREZWNpc2lvbnNbZWxlbWVudF07CgogICAgaWYgKG9sZERlY2lzaW9uID09IG51bGwpIHsKICAgICAgb2xkRGVjaXNpb24gPSBfdW5rbm93bjsKICAgIH0KCiAgICBpZiAoaW5zaWRlTG9vcCkgewogICAgICBzd2l0Y2ggKG9sZERlY2lzaW9uKSB7CiAgICAgICAgY2FzZSBfY2FuSW5saW5lSW5Mb29wTXVzdE5vdE91dHNpZGU6CiAgICAgICAgY2FzZSBfY2FuSW5saW5lSW5Mb29wTWF5SW5saW5lT3V0c2lkZToKICAgICAgICBjYXNlIF9jYW5JbmxpbmU6CiAgICAgICAgICB0aHJvdyBmYWlsZWRBdCgKICAgICAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgICAgICJDYW4ndCBtYXJrICRlbGVtZW50IGFzIG5vbi1pbmxpbmFibGUgYW5kIGlubGluYWJsZSBhdCB0aGUgIgogICAgICAgICAgICAgICJzYW1lIHRpbWUuIik7CgogICAgICAgIGNhc2UgX21heUlubGluZUluTG9vcE11c3ROb3RPdXRzaWRlOgogICAgICAgIGNhc2UgX3Vua25vd246CiAgICAgICAgICBfY2FjaGVkRGVjaXNpb25zW2VsZW1lbnRdID0gX211c3ROb3RJbmxpbmU7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfbXVzdE5vdElubGluZToKICAgICAgICAgIC8vIERvIG5vdGhpbmcuCiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgc3dpdGNoIChvbGREZWNpc2lvbikgewogICAgICAgIGNhc2UgX2NhbklubGluZToKICAgICAgICAgIHRocm93IGZhaWxlZEF0KAogICAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICAgIkNhbid0IG1hcmsgJGVsZW1lbnQgYXMgbm9uLWlubGluYWJsZSBhbmQgaW5saW5hYmxlIGF0IHRoZSAiCiAgICAgICAgICAgICAgInNhbWUgdGltZS4iKTsKCiAgICAgICAgY2FzZSBfdW5rbm93bjoKICAgICAgICAgIC8vIFdlIGNhbid0IGlubGluZSBvdXRzaWRlIGEgbG9vcCwgYnV0IHdlIG1pZ2h0IHN0aWxsIGJlIGFsbG93ZWQgdG8gZG8KICAgICAgICAgIC8vIHNvIG91dHNpZGUuCiAgICAgICAgICBfY2FjaGVkRGVjaXNpb25zW2VsZW1lbnRdID0gX21heUlubGluZUluTG9vcE11c3ROb3RPdXRzaWRlOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX2NhbklubGluZUluTG9vcE1heUlubGluZU91dHNpZGU6CiAgICAgICAgICAvLyBXZSBhbHJlYWR5IGtuZXcgdGhhdCB0aGUgZnVuY3Rpb24gY291bGQgYmUgaW5saW5lZCBpbnNpZGUgYSBsb29wLAogICAgICAgICAgLy8gYnV0IGRpZG4ndCBoYXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBub24tbG9vcCBjYXNlLiBOb3cgd2Uga25vdwogICAgICAgICAgLy8gdGhhdCBpdCBjYW4ndCBiZSBpbmxpbmVkIG91dHNpZGUgYSBsb29wLgogICAgICAgICAgX2NhY2hlZERlY2lzaW9uc1tlbGVtZW50XSA9IF9jYW5JbmxpbmVJbkxvb3BNdXN0Tm90T3V0c2lkZTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9tYXlJbmxpbmVJbkxvb3BNdXN0Tm90T3V0c2lkZToKICAgICAgICBjYXNlIF9jYW5JbmxpbmVJbkxvb3BNdXN0Tm90T3V0c2lkZToKICAgICAgICBjYXNlIF9tdXN0Tm90SW5saW5lOgogICAgICAgICAgLy8gRG8gbm90aGluZy4KICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIG1hcmtBc05vSW5saW5lKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydChjaGVja0Z1bmN0aW9uKGVsZW1lbnQpLCBmYWlsZWRBdChlbGVtZW50KSk7CiAgICBfbm9JbmxpbmVGdW5jdGlvbnMuYWRkKGVsZW1lbnQpOwogIH0KCiAgYm9vbCBtYXJrZWRBc05vSW5saW5lKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydChjaGVja0Z1bmN0aW9uKGVsZW1lbnQpLCBmYWlsZWRBdChlbGVtZW50KSk7CiAgICByZXR1cm4gX25vSW5saW5lRnVuY3Rpb25zLmNvbnRhaW5zKGVsZW1lbnQpOwogIH0KCiAgdm9pZCBtYXJrQXNUcnlJbmxpbmUoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KGNoZWNrRnVuY3Rpb24oZWxlbWVudCksIGZhaWxlZEF0KGVsZW1lbnQpKTsKICAgIF90cnlJbmxpbmVGdW5jdGlvbnMuYWRkKGVsZW1lbnQpOwogIH0KCiAgYm9vbCBtYXJrZWRBc1RyeUlubGluZShGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoY2hlY2tGdW5jdGlvbihlbGVtZW50KSwgZmFpbGVkQXQoZWxlbWVudCkpOwogICAgcmV0dXJuIF90cnlJbmxpbmVGdW5jdGlvbnMuY29udGFpbnMoZWxlbWVudCk7CiAgfQp9CgpjbGFzcyBKYXZhU2NyaXB0SW1wYWN0U3RyYXRlZ3kgZXh0ZW5kcyBJbXBhY3RTdHJhdGVneSB7CiAgZmluYWwgSW1wYWN0Q2FjaGVEZWxldGVyIGltcGFjdENhY2hlRGVsZXRlcjsKICBmaW5hbCBEdW1wSW5mb1Rhc2sgZHVtcEluZm9UYXNrOwogIGZpbmFsIGJvb2wgc3VwcG9ydERlZmVycmVkTG9hZDsKICBmaW5hbCBib29sIHN1cHBvcnREdW1wSW5mbzsKCiAgSmF2YVNjcmlwdEltcGFjdFN0cmF0ZWd5KHRoaXMuaW1wYWN0Q2FjaGVEZWxldGVyLCB0aGlzLmR1bXBJbmZvVGFzaywKICAgICAge3RoaXMuc3VwcG9ydERlZmVycmVkTG9hZCwgdGhpcy5zdXBwb3J0RHVtcEluZm99KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEltcGFjdCh2YXIgaW1wYWN0U291cmNlLCBXb3JsZEltcGFjdCBpbXBhY3QsCiAgICAgIFdvcmxkSW1wYWN0VmlzaXRvciB2aXNpdG9yLCBJbXBhY3RVc2VDYXNlIGltcGFjdFVzZSkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ29tcHV0ZSB0aGUgYXBwbGljYXRpb24gc3RyYXRlZ3kgb25jZSBmb3IgZWFjaCB1c2UuCiAgICBpZiAoaW1wYWN0VXNlID09IFJlc29sdXRpb25FbnF1ZXVlci5JTVBBQ1RfVVNFKSB7CiAgICAgIGlmIChzdXBwb3J0RGVmZXJyZWRMb2FkKSB7CiAgICAgICAgaW1wYWN0LmFwcGx5KHZpc2l0b3IpOwogICAgICB9IGVsc2UgewogICAgICAgIGltcGFjdC5hcHBseSh2aXNpdG9yKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChpbXBhY3RVc2UgPT0gRGVmZXJyZWRMb2FkVGFzay5JTVBBQ1RfVVNFKSB7CiAgICAgIGltcGFjdC5hcHBseSh2aXNpdG9yKTsKICAgICAgLy8gSW1wYWN0cyBhcmUgdW5jYWNoZWQgZ2xvYmFsbHkgaW4gW29uSW1wYWN0VXNlZF0uCiAgICB9IGVsc2UgaWYgKGltcGFjdFVzZSA9PSBEdW1wSW5mb1Rhc2suSU1QQUNUX1VTRSkgewogICAgICBpbXBhY3QuYXBwbHkodmlzaXRvcik7CiAgICAgIGR1bXBJbmZvVGFzay51bnJlZ2lzdGVySW1wYWN0KGltcGFjdFNvdXJjZSk7CiAgICB9IGVsc2UgewogICAgICBpbXBhY3QuYXBwbHkodmlzaXRvcik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIG9uSW1wYWN0VXNlZChJbXBhY3RVc2VDYXNlIGltcGFjdFVzZSkgewogICAgaWYgKGltcGFjdFVzZSA9PSBEZWZlcnJlZExvYWRUYXNrLklNUEFDVF9VU0UpIHsKICAgICAgaW1wYWN0Q2FjaGVEZWxldGVyLmVtcHR5Q2FjaGUoKTsKICAgIH0KICB9Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIHJlc291cmNlcyBvbmx5IHVzZWQgZHVyaW5nIGNvZGUgZ2VuZXJhdGlvbi4KYWJzdHJhY3QgY2xhc3MgQ29kZWdlbklucHV0cyB7CiAgQ2hlY2tlZE1vZGVIZWxwZXJzIGdldCBjaGVja2VkTW9kZUhlbHBlcnM7CiAgUnVudGltZVR5cGVzU3Vic3RpdHV0aW9ucyBnZXQgcnRpU3Vic3RpdHV0aW9uczsKICBSdW50aW1lVHlwZXNFbmNvZGVyIGdldCBydGlFbmNvZGVyOwogIFJlY2lwZUVuY29kZXIgZ2V0IHJ0aVJlY2lwZUVuY29kZXI7CiAgVHJhY2VyIGdldCB0cmFjZXI7CiAgUnVudGltZVR5cGVUYWdzIGdldCBydGlUYWdzOwogIEZpeGVkTmFtZXMgZ2V0IGZpeGVkTmFtZXM7Cn0KCmNsYXNzIENvZGVnZW5JbnB1dHNJbXBsIGltcGxlbWVudHMgQ29kZWdlbklucHV0cyB7CiAgQG92ZXJyaWRlCiAgZmluYWwgQ2hlY2tlZE1vZGVIZWxwZXJzIGNoZWNrZWRNb2RlSGVscGVycyA9IG5ldyBDaGVja2VkTW9kZUhlbHBlcnMoKTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgUnVudGltZVR5cGVzU3Vic3RpdHV0aW9ucyBydGlTdWJzdGl0dXRpb25zOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBSdW50aW1lVHlwZXNFbmNvZGVyIHJ0aUVuY29kZXI7CgogIEBvdmVycmlkZQogIGZpbmFsIFJlY2lwZUVuY29kZXIgcnRpUmVjaXBlRW5jb2RlcjsKCiAgQG92ZXJyaWRlCiAgZmluYWwgVHJhY2VyIHRyYWNlcjsKCiAgQG92ZXJyaWRlCiAgZmluYWwgUnVudGltZVR5cGVUYWdzIHJ0aVRhZ3M7CgogIEBvdmVycmlkZQogIGZpbmFsIEZpeGVkTmFtZXMgZml4ZWROYW1lczsKCiAgQ29kZWdlbklucHV0c0ltcGwodGhpcy5ydGlTdWJzdGl0dXRpb25zLCB0aGlzLnJ0aUVuY29kZXIsCiAgICAgIHRoaXMucnRpUmVjaXBlRW5jb2RlciwgdGhpcy50cmFjZXIsIHRoaXMucnRpVGFncywgdGhpcy5maXhlZE5hbWVzKTsKfQqBVgBOTjwBHAEZITYuJDIkISQZJ0kbJBUdJSEBIhNRAS4uARYCAQMPRkkEHCInUSM3PTdNLDkjATQmAUxNATlAIAhBIQgEAUwGSy4yBAFQQjcmBAE6Hz43LgEcT09BTzcbBgEWGh0YARctTEoXAS0vGRcIDRodLS0YARcvSU4XARkXCAYBHREEAUQ3MQEfHgYBFh0dGhdLHQEXUCBIEQEtRhEBLS8ZGREIDR0dLS0aF0sdARcvMhEBGRkRCAYEAU03MQEfHgYBFh0tLxkaF0sdAS0XNhEBHRkRCA0dGRoXSx0BF1EZRhEBL09ONkYRAS0tHRkRCAYEATA3JQQBMjcxBAExNyYEATM3MgQCATgvIyIeAUc5AQw5PVA2IR8PHwg7HTo3HTMNHQYEAQwvNCcGBAIBPh8tMiYmFR8dAgEzDEoBDDQBDCgBDCgBDBcBDCEBDB8BPEoCASxwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2JhY2tlbmQuZGFydDtzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19iYWNrZW5kL2luZmVycmVkX2RhdGEuZGFydK3qLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJyBzaG93IFF1ZXVlOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zaWRlX2VmZmVjdHMuZGFydCc7CmltcG9ydCAnLi4vd29ybGQuZGFydCc7CmltcG9ydCAnYW5ub3RhdGlvbnMuZGFydCc7CgphYnN0cmFjdCBjbGFzcyBJbmZlcnJlZERhdGEgewogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbSW5mZXJyZWREYXRhXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IEluZmVycmVkRGF0YS5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGJvb2wgaXNUcml2aWFsID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBpZiAoaXNUcml2aWFsKSB7CiAgICAgIHJldHVybiBuZXcgVHJpdmlhbEluZmVycmVkRGF0YSgpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBJbmZlcnJlZERhdGFJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIGNsb3NlZFdvcmxkKTsKICAgIH0KICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0luZmVycmVkRGF0YV0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspOwoKICAvLy8gUmV0dXJucyB0aGUgc2lkZSBlZmZlY3RzIG9mIGV4ZWN1dGluZyBbZWxlbWVudF0uCiAgU2lkZUVmZmVjdHMgZ2V0U2lkZUVmZmVjdHNPZkVsZW1lbnQoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIHRoZSBzaWRlIGVmZmVjdHMgb2YgY2FsbGluZyBbc2VsZWN0b3JdIG9uIHRoZSBbcmVjZWl2ZXJdLgogIFNpZGVFZmZlY3RzIGdldFNpZGVFZmZlY3RzT2ZTZWxlY3RvcigKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXIpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2VsZW1lbnRdIGlzIGd1YXJhbnRlZWQgbm90IHRvIHRocm93IGFuIGV4Y2VwdGlvbi4KICBib29sIGdldENhbm5vdFRocm93KEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2VsZW1lbnRdIGlzIGNhbGxlZCBpbiBhIGxvb3AuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSXMgdGhpcyAncG90ZW50aWFsbHkgY2FsbGVkJyBvciAna25vd24gdG8gYmUgY2FsbGVkJz8KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDaGFuZ2UgW01lbWJlckVudGl0eV0gdG8gW0Z1bmN0aW9uRW50aXR5XS4KICBib29sIGlzQ2FsbGVkSW5Mb29wKE1lbWJlckVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtlbGVtZW50XSBtaWdodCBiZSBwYXNzZWQgdG8gYEZ1bmN0aW9uLmFwcGx5YC4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJcyB0aGlzICdwYXNzZWQgaW52b2NhdGlvbiB0YXJnZXRgIG9yCiAgLy8gYHBhc3NlZCBhcyBhcmd1bWVudGA/CiAgYm9vbCBnZXRNaWdodEJlUGFzc2VkVG9BcHBseShGdW5jdGlvbkVudGl0eSBlbGVtZW50KTsKfQoKYWJzdHJhY3QgY2xhc3MgSW5mZXJyZWREYXRhQnVpbGRlciB7CiAgLy8vIFJlZ2lzdGVycyB0aGUgZXhlY3V0aW5nIG9mIFtlbGVtZW50XSBhcyB3aXRob3V0IHNpZGUgZWZmZWN0cy4KICB2b2lkIHJlZ2lzdGVyU2lkZUVmZmVjdHNGcmVlKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyB0aGUgW1NpZGVFZmZlY3RCdWlsZGVyXSBhc3NvY2lhdGVkIHdpdGggW2VsZW1lbnRdLgogIFNpZGVFZmZlY3RzQnVpbGRlciBnZXRTaWRlRWZmZWN0c0J1aWxkZXIoRnVuY3Rpb25FbnRpdHkgbWVtYmVyKTsKCiAgLy8vIFJlZ2lzdGVycyB0aGF0IFtlbGVtZW50XSBtaWdodCBiZSBwYXNzZWQgdG8gYEZ1bmN0aW9uLmFwcGx5YC4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJcyB0aGlzICdwYXNzZWQgaW52b2NhdGlvbiB0YXJnZXRgIG9yCiAgLy8gYHBhc3NlZCBhcyBhcmd1bWVudGA/CiAgdm9pZCByZWdpc3Rlck1pZ2h0QmVQYXNzZWRUb0FwcGx5KEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2VsZW1lbnRdIG1pZ2h0IGJlIHBhc3NlZCB0byBgRnVuY3Rpb24uYXBwbHlgIGdpdmVuIHRoZQogIC8vLyBjdXJyZW50bHkgaW5mZXJyZWQgaW5mb3JtYXRpb24uCiAgYm9vbCBnZXRDdXJyZW50bHlLbm93bk1pZ2h0QmVQYXNzZWRUb0FwcGx5KEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmVnaXN0ZXJzIHRoYXQgW2VsZW1lbnRdIGlzIGNhbGxlZCBpbiBhIGxvb3AuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSXMgdGhpcyAncG90ZW50aWFsbHkgY2FsbGVkJyBvciAna25vd24gdG8gYmUgY2FsbGVkJz8KICB2b2lkIGFkZEZ1bmN0aW9uQ2FsbGVkSW5Mb29wKE1lbWJlckVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJlZ2lzdGVycyB0aGF0IFtlbGVtZW50XSBpcyBndWFyYW50ZWVkIG5vdCB0byB0aHJvdyBhbiBleGNlcHRpb24uCiAgdm9pZCByZWdpc3RlckNhbm5vdFRocm93KEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gQ3JlYXRlIGEgW0luZmVycmVkRGF0YV0gb2JqZWN0IGZvciB0aGUgY29sbGVjdGVkIGluZm9ybWF0aW9uLgogIEluZmVycmVkRGF0YSBjbG9zZShKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpOwp9CgpjbGFzcyBJbmZlcnJlZERhdGFJbXBsIGltcGxlbWVudHMgSW5mZXJyZWREYXRhIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0luZmVycmVkRGF0YV0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdpbmZlcnJlZC1kYXRhJzsKCiAgZmluYWwgSkNsb3NlZFdvcmxkIF9jbG9zZWRXb3JsZDsKICBmaW5hbCBTZXQ8TWVtYmVyRW50aXR5PiBfZnVuY3Rpb25zQ2FsbGVkSW5Mb29wOwogIGZpbmFsIE1hcDxGdW5jdGlvbkVudGl0eSwgU2lkZUVmZmVjdHM+IF9zaWRlRWZmZWN0czsKCiAgZmluYWwgU2V0PEZ1bmN0aW9uRW50aXR5PiBfc2lkZUVmZmVjdHNGcmVlRWxlbWVudHM7CgogIGZpbmFsIFNldDxGdW5jdGlvbkVudGl0eT4gX2VsZW1lbnRzVGhhdENhbm5vdFRocm93OwoKICBmaW5hbCBTZXQ8RnVuY3Rpb25FbnRpdHk+IF9mdW5jdGlvbnNUaGF0TWlnaHRCZVBhc3NlZFRvQXBwbHk7CgogIEluZmVycmVkRGF0YUltcGwoCiAgICAgIHRoaXMuX2Nsb3NlZFdvcmxkLAogICAgICB0aGlzLl9mdW5jdGlvbnNDYWxsZWRJbkxvb3AsCiAgICAgIHRoaXMuX3NpZGVFZmZlY3RzLAogICAgICB0aGlzLl9zaWRlRWZmZWN0c0ZyZWVFbGVtZW50cywKICAgICAgdGhpcy5fZWxlbWVudHNUaGF0Q2Fubm90VGhyb3csCiAgICAgIHRoaXMuX2Z1bmN0aW9uc1RoYXRNaWdodEJlUGFzc2VkVG9BcHBseSk7CgogIGZhY3RvcnkgSW5mZXJyZWREYXRhSW1wbC5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgU2V0PE1lbWJlckVudGl0eT4gZnVuY3Rpb25zQ2FsbGVkSW5Mb29wID0gc291cmNlLnJlYWRNZW1iZXJzKCkudG9TZXQoKTsKICAgIE1hcDxGdW5jdGlvbkVudGl0eSwgU2lkZUVmZmVjdHM+IHNpZGVFZmZlY3RzID0gc291cmNlLnJlYWRNZW1iZXJNYXAoCiAgICAgICAgKE1lbWJlckVudGl0eSBtZW1iZXIpID0+IG5ldyBTaWRlRWZmZWN0cy5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKSk7CiAgICBTZXQ8RnVuY3Rpb25FbnRpdHk+IHNpZGVFZmZlY3RzRnJlZUVsZW1lbnRzID0KICAgICAgICBzb3VyY2UucmVhZE1lbWJlcnM8RnVuY3Rpb25FbnRpdHk+KCkudG9TZXQoKTsKICAgIFNldDxGdW5jdGlvbkVudGl0eT4gZWxlbWVudHNUaGF0Q2Fubm90VGhyb3cgPQogICAgICAgIHNvdXJjZS5yZWFkTWVtYmVyczxGdW5jdGlvbkVudGl0eT4oKS50b1NldCgpOwogICAgU2V0PEZ1bmN0aW9uRW50aXR5PiBmdW5jdGlvbnNUaGF0TWlnaHRCZVBhc3NlZFRvQXBwbHkgPQogICAgICAgIHNvdXJjZS5yZWFkTWVtYmVyczxGdW5jdGlvbkVudGl0eT4oKS50b1NldCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBJbmZlcnJlZERhdGFJbXBsKAogICAgICAgIGNsb3NlZFdvcmxkLAogICAgICAgIGZ1bmN0aW9uc0NhbGxlZEluTG9vcCwKICAgICAgICBzaWRlRWZmZWN0cywKICAgICAgICBzaWRlRWZmZWN0c0ZyZWVFbGVtZW50cywKICAgICAgICBlbGVtZW50c1RoYXRDYW5ub3RUaHJvdywKICAgICAgICBmdW5jdGlvbnNUaGF0TWlnaHRCZVBhc3NlZFRvQXBwbHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUJvb2woZmFsc2UpOyAvLyBJcyBfbm90XyB0cml2aWFsLgogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZU1lbWJlcnMoX2Z1bmN0aW9uc0NhbGxlZEluTG9vcCk7CiAgICBzaW5rLndyaXRlTWVtYmVyTWFwKAogICAgICAgIF9zaWRlRWZmZWN0cywKICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlciwgU2lkZUVmZmVjdHMgc2lkZUVmZmVjdHMpID0+CiAgICAgICAgICAgIHNpZGVFZmZlY3RzLndyaXRlVG9EYXRhU2luayhzaW5rKSk7CiAgICBzaW5rLndyaXRlTWVtYmVycyhfc2lkZUVmZmVjdHNGcmVlRWxlbWVudHMpOwogICAgc2luay53cml0ZU1lbWJlcnMoX2VsZW1lbnRzVGhhdENhbm5vdFRocm93KTsKICAgIHNpbmsud3JpdGVNZW1iZXJzKF9mdW5jdGlvbnNUaGF0TWlnaHRCZVBhc3NlZFRvQXBwbHkpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIFNpZGVFZmZlY3RzIGdldFNpZGVFZmZlY3RzT2ZTZWxlY3RvcigKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXIpIHsKICAgIC8vIFdlJ3JlIG5vdCB0cmFja2luZyBzaWRlIGVmZmVjdHMgb2YgY2xvc3VyZXMuCiAgICBpZiAoc2VsZWN0b3IuaXNDbG9zdXJlQ2FsbCB8fAogICAgICAgIF9jbG9zZWRXb3JsZC5pbmNsdWRlc0Nsb3N1cmVDYWxsKHNlbGVjdG9yLCByZWNlaXZlcikpIHsKICAgICAgcmV0dXJuIG5ldyBTaWRlRWZmZWN0cygpOwogICAgfQogICAgU2lkZUVmZmVjdHMgc2lkZUVmZmVjdHMgPSBuZXcgU2lkZUVmZmVjdHMuZW1wdHkoKTsKICAgIGZvciAoTWVtYmVyRW50aXR5IGUgaW4gX2Nsb3NlZFdvcmxkLmxvY2F0ZU1lbWJlcnMoc2VsZWN0b3IsIHJlY2VpdmVyKSkgewogICAgICBpZiAoZS5pc0ZpZWxkKSB7CiAgICAgICAgaWYgKHNlbGVjdG9yLmlzR2V0dGVyKSB7CiAgICAgICAgICBpZiAoIV9jbG9zZWRXb3JsZC5maWVsZE5ldmVyQ2hhbmdlcyhlKSkgewogICAgICAgICAgICBzaWRlRWZmZWN0cy5zZXREZXBlbmRzT25JbnN0YW5jZVByb3BlcnR5U3RvcmUoKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLmlzU2V0dGVyKSB7CiAgICAgICAgICBzaWRlRWZmZWN0cy5zZXRDaGFuZ2VzSW5zdGFuY2VQcm9wZXJ0eSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhc3NlcnQoc2VsZWN0b3IuaXNDYWxsKTsKICAgICAgICAgIHNpZGVFZmZlY3RzLnNldEFsbFNpZGVFZmZlY3RzKCk7CiAgICAgICAgICBzaWRlRWZmZWN0cy5zZXREZXBlbmRzT25Tb21ldGhpbmcoKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2lkZUVmZmVjdHMuYWRkKGdldFNpZGVFZmZlY3RzT2ZFbGVtZW50KGUpKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHNpZGVFZmZlY3RzOwogIH0KCiAgQG92ZXJyaWRlCiAgU2lkZUVmZmVjdHMgZ2V0U2lkZUVmZmVjdHNPZkVsZW1lbnQoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KF9zaWRlRWZmZWN0cyAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsICJTaWRlIGVmZmVjdHMgaGF2ZSBub3QgYmVlbiBjb21wdXRlZCB5ZXQuIikpOwogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2hlY2sgdGhhdCBbX21ha2VTaWRlRWZmZWN0c10gaXMgb25seSBjYWxsZWQgaWYKICAgIC8vIHR5cGUgaW5mZXJlbmNlIGhhcyBiZWVuIGRpc2FibGVkIChleHBsaWNpdGx5IG9yIGJlY2F1c2Ugb2YgY29tcGlsZSB0aW1lCiAgICAvLyBlcnJvcnMpLgogICAgcmV0dXJuIF9zaWRlRWZmZWN0cy5wdXRJZkFic2VudChlbGVtZW50LCBfbWFrZVNpZGVFZmZlY3RzKTsKICB9CgogIHN0YXRpYyBTaWRlRWZmZWN0cyBfbWFrZVNpZGVFZmZlY3RzKCkgPT4gbmV3IFNpZGVFZmZlY3RzKCk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNDYWxsZWRJbkxvb3AoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBfZnVuY3Rpb25zQ2FsbGVkSW5Mb29wLmNvbnRhaW5zKGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXRDYW5ub3RUaHJvdyhGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gX2VsZW1lbnRzVGhhdENhbm5vdFRocm93LmNvbnRhaW5zKGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXRNaWdodEJlUGFzc2VkVG9BcHBseShGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICAvLyBXZSBhc3N1bWUgYWxsIGZ1bmN0aW9ucyByZWFjaCBGdW5jdGlvbi5hcHBseSBpZiBubyBmdW5jdGlvbnMgYXJlCiAgICAvLyByZWdpc3RlcmVkIHNvLiAgV2UgZ2V0IGFuIGVtcHR5IHNldCBpbiB0d28gY2lyY3Vtc3RhbmNlcyAoMSkgYSB0cml2aWFsCiAgICAvLyBwcm9ncmFtIGFuZCAoMikgd2hlbiBjb21waWxpbmcgd2l0aG91dCB0eXBlIGluZmVyZW5jZQogICAgLy8gKGkuZS4gLS1kaXNhYmxlLXR5cGUtaW5mZXJlbmNlKS4gUmV0dXJuaW5nIGB0cnVlYCBoYXMgY29uc2VxdWVuY2VzIChleHRyYQogICAgLy8gbWV0YWRhdGEgZm9yIEZ1bmN0aW9uLmFwcGx5KSBvbmx5IHdoZW4gRnVuY3Rpb24uYXBwbHkgaXMgYWxzbyBwYXJ0IG9mIHRoZQogICAgLy8gcHJvZ3JhbS4gSXQgaXMgYW4gdW51c3VhbCB0cml2aWFsIHByb2dyYW0gdGhhdCBpbmNsdWRlcyBGdW5jdGlvbi5hcHBseQogICAgLy8gYnV0IGRvZXMgbm90IGNhbGwgaXQgb24gYSBmdW5jdGlvbi4KICAgIC8vCiAgICAvLyBUT0RPKHNyYSk6IFdlIHNob3VsZCByZXZlcnNlIHRoZSBzZW5zZSBvZiB0aGlzIHNldCBhbmQgcmVnaXN0ZXIgZnVuY3Rpb25zCiAgICAvLyB0aGF0IHdlIGhhdmUgcHJvdmVuIGRvIG5vdCByZWFjaCBGdW5jdGlvbi5hcHBseS4KICAgIGlmIChfZnVuY3Rpb25zVGhhdE1pZ2h0QmVQYXNzZWRUb0FwcGx5LmlzRW1wdHkpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIF9mdW5jdGlvbnNUaGF0TWlnaHRCZVBhc3NlZFRvQXBwbHkuY29udGFpbnMoZWxlbWVudCk7CiAgfQp9CgpjbGFzcyBJbmZlcnJlZERhdGFCdWlsZGVySW1wbCBpbXBsZW1lbnRzIEluZmVycmVkRGF0YUJ1aWxkZXIgewogIGZpbmFsIFNldDxNZW1iZXJFbnRpdHk+IF9mdW5jdGlvbnNDYWxsZWRJbkxvb3AgPSBuZXcgU2V0PE1lbWJlckVudGl0eT4oKTsKICBNYXA8TWVtYmVyRW50aXR5LCBTaWRlRWZmZWN0c0J1aWxkZXI+IF9zaWRlRWZmZWN0c0J1aWxkZXJzID0KICAgICAgPE1lbWJlckVudGl0eSwgU2lkZUVmZmVjdHNCdWlsZGVyPnt9OwogIGZpbmFsIFNldDxGdW5jdGlvbkVudGl0eT4gcHJlbWF0dXJlU2lkZUVmZmVjdEFjY2Vzc2VzID0KICAgICAgbmV3IFNldDxGdW5jdGlvbkVudGl0eT4oKTsKCiAgZmluYWwgU2V0PEZ1bmN0aW9uRW50aXR5PiBfc2lkZUVmZmVjdHNGcmVlRWxlbWVudHMgPQogICAgICBuZXcgU2V0PEZ1bmN0aW9uRW50aXR5PigpOwoKICBmaW5hbCBTZXQ8RnVuY3Rpb25FbnRpdHk+IF9lbGVtZW50c1RoYXRDYW5ub3RUaHJvdyA9CiAgICAgIG5ldyBTZXQ8RnVuY3Rpb25FbnRpdHk+KCk7CgogIGZpbmFsIFNldDxGdW5jdGlvbkVudGl0eT4gX2Z1bmN0aW9uc1RoYXRNaWdodEJlUGFzc2VkVG9BcHBseSA9CiAgICAgIG5ldyBTZXQ8RnVuY3Rpb25FbnRpdHk+KCk7CgogIEluZmVycmVkRGF0YUJ1aWxkZXJJbXBsKEFubm90YXRpb25zRGF0YSBhbm5vdGF0aW9uc0RhdGEpIHsKICAgIGFubm90YXRpb25zRGF0YS5mb3JFYWNoTm9UaHJvd3MocmVnaXN0ZXJDYW5ub3RUaHJvdyk7CiAgICBhbm5vdGF0aW9uc0RhdGEuZm9yRWFjaE5vU2lkZUVmZmVjdHMocmVnaXN0ZXJTaWRlRWZmZWN0c0ZyZWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU2lkZUVmZmVjdHNCdWlsZGVyIGdldFNpZGVFZmZlY3RzQnVpbGRlcihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICByZXR1cm4gX3NpZGVFZmZlY3RzQnVpbGRlcnNbbWVtYmVyXSA/Pz0gbmV3IFNpZGVFZmZlY3RzQnVpbGRlcihtZW1iZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclNpZGVFZmZlY3RzRnJlZShGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICBfc2lkZUVmZmVjdHNGcmVlRWxlbWVudHMuYWRkKGVsZW1lbnQpOwogICAgYXNzZXJ0KCFfc2lkZUVmZmVjdHNCdWlsZGVycy5jb250YWluc0tleShlbGVtZW50KSk7CiAgICBfc2lkZUVmZmVjdHNCdWlsZGVyc1tlbGVtZW50XSA9IG5ldyBTaWRlRWZmZWN0c0J1aWxkZXIuZnJlZShlbGVtZW50KTsKICB9CgogIC8vLyBDb21wdXRlIFtTaWRlRWZmZWN0c10gZm9yIGFsbCByZWdpc3RlcmVkIFtTaWRlRWZmZWN0QnVpbGRlcl1zLgogIEBvdmVycmlkZQogIEluZmVycmVkRGF0YSBjbG9zZShKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGFzc2VydChfc2lkZUVmZmVjdHNCdWlsZGVycyAhPSBudWxsLAogICAgICAgICJJbmZlcnJlZCBkYXRhIGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0ZWQuIik7CiAgICBNYXA8RnVuY3Rpb25FbnRpdHksIFNpZGVFZmZlY3RzPiBfc2lkZUVmZmVjdHMgPQogICAgICAgIDxGdW5jdGlvbkVudGl0eSwgU2lkZUVmZmVjdHM+e307CiAgICBJdGVyYWJsZTxTaWRlRWZmZWN0c0J1aWxkZXI+IHNpZGVFZmZlY3RzQnVpbGRlcnMgPQogICAgICAgIF9zaWRlRWZmZWN0c0J1aWxkZXJzLnZhbHVlczsKICAgIGVtcHR5V29ya0xpc3Qoc2lkZUVmZmVjdHNCdWlsZGVycyk7CiAgICBmb3IgKFNpZGVFZmZlY3RzQnVpbGRlciBzaWRlRWZmZWN0c0J1aWxkZXIgaW4gc2lkZUVmZmVjdHNCdWlsZGVycykgewogICAgICBfc2lkZUVmZmVjdHNbc2lkZUVmZmVjdHNCdWlsZGVyLm1lbWJlcl0gPSBzaWRlRWZmZWN0c0J1aWxkZXIuc2lkZUVmZmVjdHM7CiAgICB9CiAgICBfc2lkZUVmZmVjdHNCdWlsZGVycyA9IG51bGw7CgogICAgcmV0dXJuIG5ldyBJbmZlcnJlZERhdGFJbXBsKAogICAgICAgIGNsb3NlZFdvcmxkLAogICAgICAgIF9mdW5jdGlvbnNDYWxsZWRJbkxvb3AsCiAgICAgICAgX3NpZGVFZmZlY3RzLAogICAgICAgIF9zaWRlRWZmZWN0c0ZyZWVFbGVtZW50cywKICAgICAgICBfZWxlbWVudHNUaGF0Q2Fubm90VGhyb3csCiAgICAgICAgX2Z1bmN0aW9uc1RoYXRNaWdodEJlUGFzc2VkVG9BcHBseSk7CiAgfQoKICBzdGF0aWMgdm9pZCBlbXB0eVdvcmtMaXN0KEl0ZXJhYmxlPFNpZGVFZmZlY3RzQnVpbGRlcj4gc2lkZUVmZmVjdHNCdWlsZGVycykgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogT3B0aW1pemUgdGhpcyBhbGdvcml0aG0uCiAgICBRdWV1ZTxTaWRlRWZmZWN0c0J1aWxkZXI+IHF1ZXVlID0gbmV3IFF1ZXVlPFNpZGVFZmZlY3RzQnVpbGRlcj4oKTsKICAgIFNldDxTaWRlRWZmZWN0c0J1aWxkZXI+IGluUXVldWUgPSBuZXcgU2V0PFNpZGVFZmZlY3RzQnVpbGRlcj4oKTsKCiAgICBmb3IgKFNpZGVFZmZlY3RzQnVpbGRlciBidWlsZGVyIGluIHNpZGVFZmZlY3RzQnVpbGRlcnMpIHsKICAgICAgcXVldWUuYWRkTGFzdChidWlsZGVyKTsKICAgICAgaW5RdWV1ZS5hZGQoYnVpbGRlcik7CiAgICB9CiAgICB3aGlsZSAocXVldWUuaXNOb3RFbXB0eSkgewogICAgICBTaWRlRWZmZWN0c0J1aWxkZXIgc2lkZUVmZmVjdHNCdWlsZGVyID0gcXVldWUucmVtb3ZlRmlyc3QoKTsKICAgICAgaW5RdWV1ZS5yZW1vdmUoc2lkZUVmZmVjdHNCdWlsZGVyKTsKICAgICAgZm9yIChTaWRlRWZmZWN0c0J1aWxkZXIgZGVwZW5kZW50IGluIHNpZGVFZmZlY3RzQnVpbGRlci5kZXBlbmRpbmcpIHsKICAgICAgICBpZiAoZGVwZW5kZW50LmFkZChzaWRlRWZmZWN0c0J1aWxkZXIuc2lkZUVmZmVjdHMpKSB7CiAgICAgICAgICBpZiAoaW5RdWV1ZS5hZGQoZGVwZW5kZW50KSkgewogICAgICAgICAgICBxdWV1ZS5hZGRMYXN0KGRlcGVuZGVudCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZEZ1bmN0aW9uQ2FsbGVkSW5Mb29wKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBfZnVuY3Rpb25zQ2FsbGVkSW5Mb29wLmFkZChlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJDYW5ub3RUaHJvdyhGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICBfZWxlbWVudHNUaGF0Q2Fubm90VGhyb3cuYWRkKGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck1pZ2h0QmVQYXNzZWRUb0FwcGx5KEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIF9mdW5jdGlvbnNUaGF0TWlnaHRCZVBhc3NlZFRvQXBwbHkuYWRkKGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXRDdXJyZW50bHlLbm93bk1pZ2h0QmVQYXNzZWRUb0FwcGx5KEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBfZnVuY3Rpb25zVGhhdE1pZ2h0QmVQYXNzZWRUb0FwcGx5LmNvbnRhaW5zKGVsZW1lbnQpOwogIH0KfQoKY2xhc3MgVHJpdmlhbEluZmVycmVkRGF0YSBpbXBsZW1lbnRzIEluZmVycmVkRGF0YSB7CiAgZmluYWwgU2lkZUVmZmVjdHMgX2FsbFNpZGVFZmZlY3RzID0gbmV3IFNpZGVFZmZlY3RzKCk7CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVCb29sKHRydWUpOyAvLyBJcyB0cml2aWFsLgogIH0KCiAgQG92ZXJyaWRlCiAgU2lkZUVmZmVjdHMgZ2V0U2lkZUVmZmVjdHNPZkVsZW1lbnQoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIF9hbGxTaWRlRWZmZWN0czsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0TWlnaHRCZVBhc3NlZFRvQXBwbHkoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NhbGxlZEluTG9vcChNZW1iZXJFbnRpdHkgZWxlbWVudCkgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXRDYW5ub3RUaHJvdyhGdW5jdGlvbkVudGl0eSBlbGVtZW50KSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgU2lkZUVmZmVjdHMgZ2V0U2lkZUVmZmVjdHNPZlNlbGVjdG9yKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSByZWNlaXZlcikgewogICAgcmV0dXJuIF9hbGxTaWRlRWZmZWN0czsKICB9Cn0KgVAATk48ASUBGSQxLiQoGBsBHjorNSgVKA1LBgQBMCcBNz8BSCgyAUsvATdQRS0BR0AbOAIBJUQ4AUFDAURAGz0BUCZGATRQNgFINAFEMAIBMUYdLQEjMjcBNgE2AUABFBkjGSUlMAEvNRdMSU4yNjI2PDYVIRUfFSEhLAQBDCgwFS8ZFjowMTE7EwQBDCgzNCJAIAY3TRchND0MKDQRIysvCg81CAYYBAEMQCFITE8QQAQBPgEMLjUEAQwwNwQBDDlITj1RUU4rB1E4QUEEAgE/TD8sOiEBNyEBNyEBQSEBPTpDBAEMQkwEAQw5KzhKBAFFDDEpNTQpNyUoSVAGIQEhFSAWIiItBAFQNUdFAT4eHAYfQypLPSgmDAoIBgQBDDcpBAEMNSsEAQw+NQQBDEdBBAIBNDkBDCgpBAEMQBwEAQxAAQw1AQw4AQwoMxwEAgEycGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9pbmZlcnJlZF9kYXRhLmRhcnQ3c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfbW9kZWwvanNfc3RyYXRlZ3kuZGFydMAAVFovLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmpzX21vZGVsLnN0cmF0ZWd5OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2JhY2tlbmRfc3RyYXRlZ3kuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi9jb2RlZ2VuLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi90YXNrcy5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vd29yay5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBDb21tb25FbGVtZW50cywgRWxlbWVudEVudmlyb25tZW50OwppbXBvcnQgJy4uL2NvbXBpbGVyLmRhcnQnOwppbXBvcnQgJy4uL2RlZmVycmVkX2xvYWQuZGFydCcgaGlkZSBXb3JrSXRlbTsKaW1wb3J0ICcuLi9kdW1wX2luZm8uZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZW5xdWV1ZS5kYXJ0JzsKaW1wb3J0ICcuLi9pby9rZXJuZWxfc291cmNlX2luZm9ybWF0aW9uLmRhcnQnCiAgICBzaG93IEtlcm5lbFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3k7CmltcG9ydCAnLi4vaW8vc291cmNlX2luZm9ybWF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci90eXBlX2dyYXBoX2luZmVycmVyLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2pzL2pzX3NvdXJjZV9tYXBwaW5nLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvYmFja2VuZC5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2JhY2tlbmRfaW1wYWN0LmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvY29kZWdlbl9saXN0ZW5lci5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2N1c3RvbV9lbGVtZW50c19hbmFseXNpcy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2VucXVldWVyLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvaW1wYWN0X3RyYW5zZm9ybWVyLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvaW5mZXJyZWRfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2ludGVyY2VwdG9yX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYW1lci5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzX2NvZGVnZW4uZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzX25ldy5kYXJ0JwogICAgc2hvdyBSZWNpcGVFbmNvZGVyLCBSZWNpcGVFbmNvZGVySW1wbDsKaW1wb3J0ICcuLi9qc19lbWl0dGVyL2NvZGVfZW1pdHRlcl90YXNrLmRhcnQnIHNob3cgTW9kdWxhckVtaXR0ZXI7CmltcG9ydCAnLi4vanNfZW1pdHRlci9qc19lbWl0dGVyLmRhcnQnIHNob3cgQ29kZUVtaXR0ZXJUYXNrOwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIGFzIGpzOwppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfc3RyYXRlZ3kuZGFydCc7CmltcG9ydCAnLi4vbmF0aXZlL2JlaGF2aW9yLmRhcnQnOwppbXBvcnQgJy4uL25hdGl2ZS9lbnF1ZXVlLmRhcnQnOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL3NzYS9idWlsZGVyX2tlcm5lbC5kYXJ0JzsKaW1wb3J0ICcuLi9zc2Evbm9kZXMuZGFydCc7CmltcG9ydCAnLi4vc3NhL3NzYS5kYXJ0JzsKaW1wb3J0ICcuLi9zc2EvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vdHJhY2VyLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NvZGVnZW5fd29ybGRfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS93b3JsZF9pbXBhY3QuZGFydCc7CmltcG9ydCAnLi4vd29ybGQuZGFydCc7CmltcG9ydCAnY2xvc3VyZS5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50X21hcC5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50X21hcF9pbXBsLmRhcnQnOwppbXBvcnQgJ2pzX3dvcmxkLmRhcnQnOwppbXBvcnQgJ2pzX3dvcmxkX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnbG9jYWxzLmRhcnQnOwoKY2xhc3MgSnNCYWNrZW5kU3RyYXRlZ3kgaW1wbGVtZW50cyBCYWNrZW5kU3RyYXRlZ3kgewogIGZpbmFsIENvbXBpbGVyIF9jb21waWxlcjsKICBKc0tlcm5lbFRvRWxlbWVudE1hcCBfZWxlbWVudE1hcDsKCiAgLy8vIENvZGVnZW4gc3VwcG9ydCBmb3IgZ2VuZXJhdGluZyB0YWJsZSBvZiBpbnRlcmNlcHRvcnMgYW5kCiAgLy8vIGNvbnN0cnVjdG9ycyBmb3IgY3VzdG9tIGVsZW1lbnRzLgogIEN1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzIF9jdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpczsKCiAgTmF0aXZlQ29kZWdlbkVucXVldWVyIF9uYXRpdmVDb2RlZ2VuRW5xdWV1ZXI7CgogIE5hbWVyIF9uYW1lcjsKCiAgQ29kZWdlbkltcGFjdFRyYW5zZm9ybWVyIF9jb2RlZ2VuSW1wYWN0VHJhbnNmb3JtZXI7CgogIENvZGVFbWl0dGVyVGFzayBfZW1pdHRlclRhc2s7CgogIFJ1bnRpbWVUeXBlc0NoZWNrc0J1aWxkZXIgX3J0aUNoZWNrc0J1aWxkZXI7CgogIEZ1bmN0aW9uQ29tcGlsZXIgX2Z1bmN0aW9uQ29tcGlsZXI7CgogIFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kgc291cmNlSW5mb3JtYXRpb25TdHJhdGVneTsKCiAgLy8vIFRoZSBnZW5lcmF0ZWQgY29kZSBhcyBhIGpzIEFTVCBmb3IgY29tcGlsZWQgbWV0aG9kcy4KICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBqcy5FeHByZXNzaW9uPiBnZW5lcmF0ZWRDb2RlID0KICAgICAgPE1lbWJlckVudGl0eSwganMuRXhwcmVzc2lvbj57fTsKCiAgSnNCYWNrZW5kU3RyYXRlZ3kodGhpcy5fY29tcGlsZXIpIHsKICAgIGJvb2wgZ2VuZXJhdGVTb3VyY2VNYXAgPSBfY29tcGlsZXIub3B0aW9ucy5nZW5lcmF0ZVNvdXJjZU1hcDsKICAgIGlmICghZ2VuZXJhdGVTb3VyY2VNYXApIHsKICAgICAgc291cmNlSW5mb3JtYXRpb25TdHJhdGVneSA9IGNvbnN0IEphdmFTY3JpcHRTb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5KCk7CiAgICB9IGVsc2UgewogICAgICBzb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5ID0gbmV3IEtlcm5lbFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kodGhpcyk7CiAgICB9CiAgICBfZW1pdHRlclRhc2sgPSBuZXcgQ29kZUVtaXR0ZXJUYXNrKF9jb21waWxlciwgZ2VuZXJhdGVTb3VyY2VNYXApOwogICAgX2Z1bmN0aW9uQ29tcGlsZXIgPSBuZXcgU3NhRnVuY3Rpb25Db21waWxlcigKICAgICAgICBfY29tcGlsZXIub3B0aW9ucywKICAgICAgICBfY29tcGlsZXIucmVwb3J0ZXIsCiAgICAgICAgdGhpcywKICAgICAgICBfY29tcGlsZXIubWVhc3VyZXIsCiAgICAgICAgc291cmNlSW5mb3JtYXRpb25TdHJhdGVneSk7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PENvbXBpbGVyVGFzaz4gZ2V0IHRhc2tzIHsKICAgIExpc3Q8Q29tcGlsZXJUYXNrPiByZXN1bHQgPSBmdW5jdGlvbkNvbXBpbGVyLnRhc2tzOwogICAgcmVzdWx0LmFkZChlbWl0dGVyVGFzayk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25Db21waWxlciBnZXQgZnVuY3Rpb25Db21waWxlciA9PiBfZnVuY3Rpb25Db21waWxlcjsKCiAgQG92ZXJyaWRlCiAgQ29kZUVtaXR0ZXJUYXNrIGdldCBlbWl0dGVyVGFzayA9PiBfZW1pdHRlclRhc2s7CgogIE5hbWVyIGdldCBuYW1lckZvclRlc3RpbmcgPT4gX25hbWVyOwoKICBOYXRpdmVFbnF1ZXVlciBnZXQgbmF0aXZlQ29kZWdlbkVucXVldWVyID0+IF9uYXRpdmVDb2RlZ2VuRW5xdWV1ZXI7CgogIFJ1bnRpbWVUeXBlc0NoZWNrc0J1aWxkZXIgZ2V0IHJ0aUNoZWNrc0J1aWxkZXJGb3JUZXN0aW5nID0+IF9ydGlDaGVja3NCdWlsZGVyOwoKICBNYXA8TWVtYmVyRW50aXR5LCBXb3JsZEltcGFjdD4gY29kZWdlbkltcGFjdHNGb3JUZXN0aW5nOwoKICBTdHJpbmcgZ2V0R2VuZXJhdGVkQ29kZUZvclRlc3RpbmcoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBqcy5wcmV0dHlQcmludChnZW5lcmF0ZWRDb2RlW2VsZW1lbnRdLAogICAgICAgIGVuYWJsZU1pbmlmaWNhdGlvbjogX2NvbXBpbGVyLm9wdGlvbnMuZW5hYmxlTWluaWZpY2F0aW9uKTsKICB9CgogIEBkZXByZWNhdGVkCiAgSnNUb0VsZW1lbnRNYXAgZ2V0IGVsZW1lbnRNYXAgewogICAgYXNzZXJ0KF9lbGVtZW50TWFwICE9IG51bGwsCiAgICAgICAgIkpzQmFja2VuZFN0cmF0ZWd5LmVsZW1lbnRNYXAgaGFzIG5vdCBiZWVuIGNyZWF0ZWQgeWV0LiIpOwogICAgcmV0dXJuIF9lbGVtZW50TWFwOwogIH0KCiAgLy8vIENvZGVnZW4gc3VwcG9ydCBmb3IgZ2VuZXJhdGluZyB0YWJsZSBvZiBpbnRlcmNlcHRvcnMgYW5kCiAgLy8vIGNvbnN0cnVjdG9ycyBmb3IgY3VzdG9tIGVsZW1lbnRzLgogIEN1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzIGdldCBjdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpcyB7CiAgICBhc3NlcnQoCiAgICAgICAgX2N1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoTk9fTE9DQVRJT05fU1BBTk5BQkxFLAogICAgICAgICAgICAiQ3VzdG9tRWxlbWVudHNDb2RlZ2VuQW5hbHlzaXMgaGFzIG5vdCBiZWVuIGNyZWF0ZWQgeWV0LiIpKTsKICAgIHJldHVybiBfY3VzdG9tRWxlbWVudHNDb2RlZ2VuQW5hbHlzaXM7CiAgfQoKICBSdW50aW1lVHlwZXNDaGVja3NCdWlsZGVyIGdldCBydGlDaGVja3NCdWlsZGVyIHsKICAgIGFzc2VydCgKICAgICAgICBfcnRpQ2hlY2tzQnVpbGRlciAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwKICAgICAgICAgICAgIlJ1bnRpbWVUeXBlc0NoZWNrc0J1aWxkZXIgaGFzIG5vdCBiZWVuIGNyZWF0ZWQgeWV0LiIpKTsKICAgIGFzc2VydCgKICAgICAgICAhX3J0aUNoZWNrc0J1aWxkZXIucnRpQ2hlY2tzQnVpbGRlckNsb3NlZCwKICAgICAgICBmYWlsZWRBdChOT19MT0NBVElPTl9TUEFOTkFCTEUsCiAgICAgICAgICAgICJSdW50aW1lVHlwZXNDaGVja3MgaGFzIGFscmVhZHkgYmVlbiBjb21wdXRlZC4iKSk7CiAgICByZXR1cm4gX3J0aUNoZWNrc0J1aWxkZXI7CiAgfQoKICBAb3ZlcnJpZGUKICBKQ2xvc2VkV29ybGQgY3JlYXRlSkNsb3NlZFdvcmxkKAogICAgICBLQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsIE91dHB1dFVuaXREYXRhIG91dHB1dFVuaXREYXRhKSB7CiAgICBLZXJuZWxGcm9udGVuZFN0cmF0ZWd5IHN0cmF0ZWd5ID0gX2NvbXBpbGVyLmZyb250ZW5kU3RyYXRlZ3k7CiAgICBfZWxlbWVudE1hcCA9IG5ldyBKc0tlcm5lbFRvRWxlbWVudE1hcCgKICAgICAgICBfY29tcGlsZXIucmVwb3J0ZXIsCiAgICAgICAgX2NvbXBpbGVyLmVudmlyb25tZW50LAogICAgICAgIHN0cmF0ZWd5LmVsZW1lbnRNYXAsCiAgICAgICAgY2xvc2VkV29ybGQubGl2ZU1lbWJlclVzYWdlLAogICAgICAgIGNsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YSk7CiAgICBHbG9iYWxMb2NhbHNNYXAgX2dsb2JhbExvY2Fsc01hcCA9IG5ldyBHbG9iYWxMb2NhbHNNYXAoKTsKICAgIENsb3N1cmVEYXRhQnVpbGRlciBjbG9zdXJlRGF0YUJ1aWxkZXIgPSBuZXcgQ2xvc3VyZURhdGFCdWlsZGVyKAogICAgICAgIF9lbGVtZW50TWFwLCBfZ2xvYmFsTG9jYWxzTWFwLCBjbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGEpOwogICAgSnNDbG9zZWRXb3JsZEJ1aWxkZXIgY2xvc2VkV29ybGRCdWlsZGVyID0gbmV3IEpzQ2xvc2VkV29ybGRCdWlsZGVyKAogICAgICAgIF9lbGVtZW50TWFwLAogICAgICAgIF9nbG9iYWxMb2NhbHNNYXAsCiAgICAgICAgY2xvc3VyZURhdGFCdWlsZGVyLAogICAgICAgIF9jb21waWxlci5vcHRpb25zLAogICAgICAgIF9jb21waWxlci5hYnN0cmFjdFZhbHVlU3RyYXRlZ3kpOwogICAgSkNsb3NlZFdvcmxkIGpDbG9zZWRXb3JsZCA9IGNsb3NlZFdvcmxkQnVpbGRlci5jb252ZXJ0Q2xvc2VkV29ybGQoCiAgICAgICAgY2xvc2VkV29ybGQsIHN0cmF0ZWd5LmNsb3N1cmVNb2RlbHMsIG91dHB1dFVuaXREYXRhKTsKICAgIF9lbGVtZW50TWFwLmxhdGVPdXRwdXRVbml0RGF0YUJ1aWxkZXIgPQogICAgICAgIG5ldyBMYXRlT3V0cHV0VW5pdERhdGFCdWlsZGVyKGpDbG9zZWRXb3JsZC5vdXRwdXRVbml0RGF0YSk7CiAgICByZXR1cm4gakNsb3NlZFdvcmxkOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckpDbG9zZWRXb3JsZChjb3ZhcmlhbnQgSnNDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgX2VsZW1lbnRNYXAgPSBjbG9zZWRXb3JsZC5lbGVtZW50TWFwOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29kZWdlbklucHV0cyBvbkNvZGVnZW5TdGFydCgKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgZ2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMpIHsKICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCA9IGdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzLmNsb3NlZFdvcmxkOwogICAgUnVudGltZVR5cGVUYWdzIHJ0aVRhZ3MgPSBjb25zdCBSdW50aW1lVHlwZVRhZ3MoKTsKICAgIEZpeGVkTmFtZXMgZml4ZWROYW1lcyA9IF9jb21waWxlci5vcHRpb25zLmVuYWJsZU1pbmlmaWNhdGlvbgogICAgICAgID8gY29uc3QgTWluaWZpZWRGaXhlZE5hbWVzKCkKICAgICAgICA6IGNvbnN0IEZpeGVkTmFtZXMoKTsKCiAgICBUcmFjZXIgdHJhY2VyID0gbmV3IFRyYWNlcihjbG9zZWRXb3JsZCwgX2NvbXBpbGVyLm91dHB1dFByb3ZpZGVyKTsKICAgIFJ1bnRpbWVUeXBlc0VuY29kZXIgcnRpRW5jb2RlciA9IG5ldyBSdW50aW1lVHlwZXNFbmNvZGVySW1wbCgKICAgICAgICBydGlUYWdzLAogICAgICAgIGNsb3NlZFdvcmxkLm5hdGl2ZURhdGEsCiAgICAgICAgY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LAogICAgICAgIGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLAogICAgICAgIGNsb3NlZFdvcmxkLnJ0aU5lZWQpOwoKICAgIFJ1bnRpbWVUeXBlc1N1YnN0aXR1dGlvbnMgcnRpU3Vic3RpdHV0aW9uczsKICAgIGlmIChfY29tcGlsZXIub3B0aW9ucy5kaXNhYmxlUnRpT3B0aW1pemF0aW9uKSB7CiAgICAgIHJ0aVN1YnN0aXR1dGlvbnMgPSBuZXcgVHJpdmlhbFJ1bnRpbWVUeXBlc1N1YnN0aXR1dGlvbnMoY2xvc2VkV29ybGQpOwogICAgICBfcnRpQ2hlY2tzQnVpbGRlciA9CiAgICAgICAgICBuZXcgVHJpdmlhbFJ1bnRpbWVUeXBlc0NoZWNrc0J1aWxkZXIoY2xvc2VkV29ybGQsIHJ0aVN1YnN0aXR1dGlvbnMpOwogICAgfSBlbHNlIHsKICAgICAgUnVudGltZVR5cGVzSW1wbCBydW50aW1lVHlwZXNJbXBsID0gbmV3IFJ1bnRpbWVUeXBlc0ltcGwoY2xvc2VkV29ybGQpOwogICAgICBfcnRpQ2hlY2tzQnVpbGRlciA9IHJ1bnRpbWVUeXBlc0ltcGw7CiAgICAgIHJ0aVN1YnN0aXR1dGlvbnMgPSBydW50aW1lVHlwZXNJbXBsOwogICAgfQoKICAgIFJlY2lwZUVuY29kZXIgcnRpUmVjaXBlRW5jb2RlciA9IF9jb21waWxlci5vcHRpb25zLmV4cGVyaW1lbnROZXdSdGkKICAgICAgICA/IG5ldyBSZWNpcGVFbmNvZGVySW1wbCgKICAgICAgICAgICAgY2xvc2VkV29ybGQsCiAgICAgICAgICAgIHJ0aVN1YnN0aXR1dGlvbnMsCiAgICAgICAgICAgIGNsb3NlZFdvcmxkLm5hdGl2ZURhdGEsCiAgICAgICAgICAgIGNsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMsCiAgICAgICAgICAgIGNsb3NlZFdvcmxkLnJ0aU5lZWQpCiAgICAgICAgOiBudWxsOwoKICAgIENvZGVnZW5JbnB1dHMgY29kZWdlbiA9IG5ldyBDb2RlZ2VuSW5wdXRzSW1wbChydGlTdWJzdGl0dXRpb25zLCBydGlFbmNvZGVyLAogICAgICAgIHJ0aVJlY2lwZUVuY29kZXIsIHRyYWNlciwgcnRpVGFncywgZml4ZWROYW1lcyk7CgogICAgZnVuY3Rpb25Db21waWxlci5pbml0aWFsaXplKGdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzLCBjb2RlZ2VuKTsKICAgIHJldHVybiBjb2RlZ2VuOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29kZWdlbkVucXVldWVyIGNyZWF0ZUNvZGVnZW5FbnF1ZXVlcigKICAgICAgQ29tcGlsZXJUYXNrIHRhc2ssCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cywKICAgICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuLAogICAgICBDb2RlZ2VuUmVzdWx0cyBjb2RlZ2VuUmVzdWx0cykgewogICAgYXNzZXJ0KF9lbGVtZW50TWFwICE9IG51bGwsCiAgICAgICAgIkpzQmFja2VuZFN0cmF0ZWd5LmVsZW1lbnRNYXAgaGFzIG5vdCBiZWVuIGNyZWF0ZWQgeWV0LiIpOwogICAgT25lU2hvdEludGVyY2VwdG9yRGF0YSBvbmVTaG90SW50ZXJjZXB0b3JEYXRhID0gbmV3IE9uZVNob3RJbnRlcmNlcHRvckRhdGEoCiAgICAgICAgY2xvc2VkV29ybGQuaW50ZXJjZXB0b3JEYXRhLAogICAgICAgIGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLAogICAgICAgIGNsb3NlZFdvcmxkLm5hdGl2ZURhdGEpOwogICAgX29uQ29kZWdlbkVucXVldWVyU3RhcnQoCiAgICAgICAgZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cywgY29kZWdlbiwgb25lU2hvdEludGVyY2VwdG9yRGF0YSk7CiAgICBFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50ID0gY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50OwogICAgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMgPSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50czsKICAgIEJhY2tlbmRJbXBhY3RzIGltcGFjdHMgPQogICAgICAgIG5ldyBCYWNrZW5kSW1wYWN0cyhjb21tb25FbGVtZW50cywgX2NvbXBpbGVyLm9wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSk7CiAgICBfY3VzdG9tRWxlbWVudHNDb2RlZ2VuQW5hbHlzaXMgPSBuZXcgQ3VzdG9tRWxlbWVudHNDb2RlZ2VuQW5hbHlzaXMoCiAgICAgICAgY29tbW9uRWxlbWVudHMsIGVsZW1lbnRFbnZpcm9ubWVudCwgY2xvc2VkV29ybGQubmF0aXZlRGF0YSk7CiAgICByZXR1cm4gbmV3IENvZGVnZW5FbnF1ZXVlcigKICAgICAgICB0YXNrLAogICAgICAgIG5ldyBDb2RlZ2VuV29ybGRCdWlsZGVySW1wbCgKICAgICAgICAgICAgY2xvc2VkV29ybGQsCiAgICAgICAgICAgIF9jb21waWxlci5hYnN0cmFjdFZhbHVlU3RyYXRlZ3kuY3JlYXRlU2VsZWN0b3JTdHJhdGVneSgpLAogICAgICAgICAgICBvbmVTaG90SW50ZXJjZXB0b3JEYXRhKSwKICAgICAgICBuZXcgS2VybmVsQ29kZWdlbldvcmtJdGVtQnVpbGRlcigKICAgICAgICAgICAgdGhpcywKICAgICAgICAgICAgY2xvc2VkV29ybGQsCiAgICAgICAgICAgIGNvZGVnZW5SZXN1bHRzLAogICAgICAgICAgICBuZXcgQ2xvc2VkRW50aXR5TG9va3VwKF9lbGVtZW50TWFwKSwKICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQXZvaWQgdGhlIG5lZWQgZm9yIGEgW0NvbXBvbmVudExvb2t1cF0uIFRoaXMKICAgICAgICAgICAgLy8gaXMgY2F1c2VkIGJ5IHNvbWUgdHlwZSBtYXNrcyBob2xkaW5nIGEga2VybmVsIG5vZGUgZm9yIHVzaW5nIGluCiAgICAgICAgICAgIC8vIHRyYWNpbmcuCiAgICAgICAgICAgIG5ldyBDb21wb25lbnRMb29rdXAoX2VsZW1lbnRNYXAucHJvZ3JhbUVudi5tYWluQ29tcG9uZW50KSksCiAgICAgICAgbmV3IENvZGVnZW5FbnF1ZXVlckxpc3RlbmVyKAogICAgICAgICAgICBfY29tcGlsZXIub3B0aW9ucywKICAgICAgICAgICAgZWxlbWVudEVudmlyb25tZW50LAogICAgICAgICAgICBjb21tb25FbGVtZW50cywKICAgICAgICAgICAgaW1wYWN0cywKICAgICAgICAgICAgY2xvc2VkV29ybGQuYmFja2VuZFVzYWdlLAogICAgICAgICAgICBjbG9zZWRXb3JsZC5ydGlOZWVkLAogICAgICAgICAgICBjdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpcywKICAgICAgICAgICAgbmF0aXZlQ29kZWdlbkVucXVldWVyKSwKICAgICAgICBjbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGEpOwogIH0KCiAgLy8vIENhbGxlZCBiZWZvcmUgdGhlIGNvbXBpbGVyIHN0YXJ0cyBydW5uaW5nIHRoZSBjb2RlZ2VuIGVucXVldWVyLgogIHZvaWQgX29uQ29kZWdlbkVucXVldWVyU3RhcnQoCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzLAogICAgICBDb2RlZ2VuSW5wdXRzIGNvZGVnZW4sCiAgICAgIE9uZVNob3RJbnRlcmNlcHRvckRhdGEgb25lU2hvdEludGVyY2VwdG9yRGF0YSkgewogICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkID0gZ2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMuY2xvc2VkV29ybGQ7CiAgICBSdW50aW1lVHlwZVRhZ3MgcnRpVGFncyA9IGNvZGVnZW4ucnRpVGFnczsKICAgIEZpeGVkTmFtZXMgZml4ZWROYW1lcyA9IGNvZGVnZW4uZml4ZWROYW1lczsKICAgIF9uYW1lciA9IF9jb21waWxlci5vcHRpb25zLmVuYWJsZU1pbmlmaWNhdGlvbgogICAgICAgID8gX2NvbXBpbGVyLm9wdGlvbnMudXNlRnJlcXVlbmN5TmFtZXIKICAgICAgICAgICAgPyBuZXcgRnJlcXVlbmN5QmFzZWROYW1lcihjbG9zZWRXb3JsZCwgcnRpVGFncywgZml4ZWROYW1lcykKICAgICAgICAgICAgOiBuZXcgTWluaWZ5TmFtZXIoY2xvc2VkV29ybGQsIHJ0aVRhZ3MsIGZpeGVkTmFtZXMpCiAgICAgICAgOiBuZXcgTmFtZXIoY2xvc2VkV29ybGQsIHJ0aVRhZ3MsIGZpeGVkTmFtZXMpOwogICAgX25hdGl2ZUNvZGVnZW5FbnF1ZXVlciA9IG5ldyBOYXRpdmVDb2RlZ2VuRW5xdWV1ZXIoCiAgICAgICAgX2NvbXBpbGVyLm9wdGlvbnMsCiAgICAgICAgY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LAogICAgICAgIGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLAogICAgICAgIGNsb3NlZFdvcmxkLmRhcnRUeXBlcywKICAgICAgICBlbWl0dGVyVGFzaywKICAgICAgICBjbG9zZWRXb3JsZC5saXZlTmF0aXZlQ2xhc3NlcywKICAgICAgICBjbG9zZWRXb3JsZC5uYXRpdmVEYXRhKTsKICAgIGVtaXR0ZXJUYXNrLmNyZWF0ZUVtaXR0ZXIoX25hbWVyLCBjb2RlZ2VuLCBjbG9zZWRXb3JsZCk7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTaGFyZSB0aGUgaW1wYWN0IG9iamVjdCBjcmVhdGVkIGluCiAgICAvLyBjcmVhdGVDb2RlZ2VuRW5xdWV1ZXIuCiAgICBCYWNrZW5kSW1wYWN0cyBpbXBhY3RzID0gbmV3IEJhY2tlbmRJbXBhY3RzKAogICAgICAgIGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLCBfY29tcGlsZXIub3B0aW9ucy5leHBlcmltZW50TmV3UnRpKTsKCiAgICBfY29kZWdlbkltcGFjdFRyYW5zZm9ybWVyID0gbmV3IENvZGVnZW5JbXBhY3RUcmFuc2Zvcm1lcigKICAgICAgICBjbG9zZWRXb3JsZCwKICAgICAgICBjbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQsCiAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMsCiAgICAgICAgaW1wYWN0cywKICAgICAgICBjbG9zZWRXb3JsZC5uYXRpdmVEYXRhLAogICAgICAgIGNsb3NlZFdvcmxkLmJhY2tlbmRVc2FnZSwKICAgICAgICBjbG9zZWRXb3JsZC5ydGlOZWVkLAogICAgICAgIG5hdGl2ZUNvZGVnZW5FbnF1ZXVlciwKICAgICAgICBfbmFtZXIsCiAgICAgICAgb25lU2hvdEludGVyY2VwdG9yRGF0YSwKICAgICAgICBydGlDaGVja3NCdWlsZGVyLAogICAgICAgIGVtaXR0ZXJUYXNrLm5hdGl2ZUVtaXR0ZXIpOwogIH0KCiAgV29ybGRJbXBhY3QgZ2VuZXJhdGVDb2RlKAogICAgICBXb3JrSXRlbSB3b3JrLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIENvZGVnZW5SZXN1bHRzIGNvZGVnZW5SZXN1bHRzLAogICAgICBFbnRpdHlMb29rdXAgZW50aXR5TG9va3VwLAogICAgICBDb21wb25lbnRMb29rdXAgY29tcG9uZW50TG9va3VwKSB7CiAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gd29yay5lbGVtZW50OwogICAgQ29kZWdlblJlc3VsdCByZXN1bHQgPSBjb2RlZ2VuUmVzdWx0cy5nZXRDb2RlZ2VuUmVzdWx0cyhtZW1iZXIpOwogICAgaWYgKF9jb21waWxlci5vcHRpb25zLnRlc3RNb2RlKSB7CiAgICAgIGJvb2wgdXNlRGF0YUtpbmRzID0gdHJ1ZTsKICAgICAgTGlzdDxPYmplY3Q+IGRhdGEgPSBbXTsKICAgICAgRGF0YVNpbmsgc2luayA9IG5ldyBPYmplY3RTaW5rKGRhdGEsIHVzZURhdGFLaW5kczogdXNlRGF0YUtpbmRzKTsKICAgICAgc2luay5yZWdpc3RlckNvZGVnZW5Xcml0ZXIobmV3IENvZGVnZW5Xcml0ZXJJbXBsKGNsb3NlZFdvcmxkKSk7CiAgICAgIHJlc3VsdC53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICAgIERhdGFTb3VyY2Ugc291cmNlID0gbmV3IE9iamVjdFNvdXJjZShkYXRhLCB1c2VEYXRhS2luZHM6IHVzZURhdGFLaW5kcyk7CiAgICAgIExpc3Q8TW9kdWxhck5hbWU+IG1vZHVsYXJOYW1lcyA9IFtdOwogICAgICBMaXN0PE1vZHVsYXJFeHByZXNzaW9uPiBtb2R1bGFyRXhwcmVzc2lvbiA9IFtdOwogICAgICBzb3VyY2UucmVnaXN0ZXJDb2RlZ2VuUmVhZGVyKAogICAgICAgICAgbmV3IENvZGVnZW5SZWFkZXJJbXBsKGNsb3NlZFdvcmxkLCBtb2R1bGFyTmFtZXMsIG1vZHVsYXJFeHByZXNzaW9uKSk7CiAgICAgIHNvdXJjZS5yZWdpc3RlckVudGl0eUxvb2t1cChlbnRpdHlMb29rdXApOwogICAgICBzb3VyY2UucmVnaXN0ZXJDb21wb25lbnRMb29rdXAoY29tcG9uZW50TG9va3VwKTsKICAgICAgcmVzdWx0ID0gQ29kZWdlblJlc3VsdC5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgICAgICBzb3VyY2UsIG1vZHVsYXJOYW1lcywgbW9kdWxhckV4cHJlc3Npb24pOwogICAgfQogICAgaWYgKHJlc3VsdC5jb2RlICE9IG51bGwpIHsKICAgICAgZ2VuZXJhdGVkQ29kZVttZW1iZXJdID0gcmVzdWx0LmNvZGU7CiAgICB9CiAgICBpZiAocmV0YWluRGF0YUZvclRlc3RpbmcpIHsKICAgICAgY29kZWdlbkltcGFjdHNGb3JUZXN0aW5nID8/PSA8TWVtYmVyRW50aXR5LCBXb3JsZEltcGFjdD57fTsKICAgICAgY29kZWdlbkltcGFjdHNGb3JUZXN0aW5nW21lbWJlcl0gPSByZXN1bHQuaW1wYWN0OwogICAgfQogICAgV29ybGRJbXBhY3Qgd29ybGRJbXBhY3QgPQogICAgICAgIF9jb2RlZ2VuSW1wYWN0VHJhbnNmb3JtZXIudHJhbnNmb3JtQ29kZWdlbkltcGFjdChyZXN1bHQuaW1wYWN0KTsKICAgIF9jb21waWxlci5kdW1wSW5mb1Rhc2sucmVnaXN0ZXJJbXBhY3QobWVtYmVyLCB3b3JsZEltcGFjdCk7CiAgICByZXN1bHQuYXBwbHlNb2R1bGFyU3RhdGUoX25hbWVyLCBlbWl0dGVyVGFzay5lbWl0dGVyKTsKICAgIHJldHVybiB3b3JsZEltcGFjdDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgb25Db2RlZ2VuRW5kKENvZGVnZW5JbnB1dHMgY29kZWdlbikgewogICAgc291cmNlSW5mb3JtYXRpb25TdHJhdGVneS5vbkNvbXBsZXRlKCk7CiAgICBjb2RlZ2VuLnRyYWNlci5jbG9zZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGFzc2VtYmxlUHJvZ3JhbShKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsIEluZmVycmVkRGF0YSBpbmZlcnJlZERhdGEsCiAgICAgIENvZGVnZW5JbnB1dHMgY29kZWdlbklucHV0cywgQ29kZWdlbldvcmxkIGNvZGVnZW5Xb3JsZCkgewogICAgaW50IHByb2dyYW1TaXplID0gZW1pdHRlclRhc2suYXNzZW1ibGVQcm9ncmFtKAogICAgICAgIF9uYW1lciwgY2xvc2VkV29ybGQsIGluZmVycmVkRGF0YSwgY29kZWdlbklucHV0cywgY29kZWdlbldvcmxkKTsKICAgIGNsb3NlZFdvcmxkLm5vU3VjaE1ldGhvZERhdGEuZW1pdERpYWdub3N0aWMoX2NvbXBpbGVyLnJlcG9ydGVyKTsKICAgIHJldHVybiBwcm9ncmFtU2l6ZTsKICB9CgogIEBvdmVycmlkZQogIFNzYUJ1aWxkZXIgY3JlYXRlU3NhQnVpbGRlcigKICAgICAgQ29tcGlsZXJUYXNrIHRhc2ssIFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kgc291cmNlSW5mb3JtYXRpb25TdHJhdGVneSkgewogICAgcmV0dXJuIG5ldyBLZXJuZWxTc2FCdWlsZGVyKAogICAgICAgIHRhc2ssCiAgICAgICAgX2NvbXBpbGVyLm9wdGlvbnMsCiAgICAgICAgX2NvbXBpbGVyLnJlcG9ydGVyLAogICAgICAgIF9jb21waWxlci5kdW1wSW5mb1Rhc2ssCiAgICAgICAgLy8gaWdub3JlOmRlcHJlY2F0ZWRfbWVtYmVyX3VzZV9mcm9tX3NhbWVfcGFja2FnZQogICAgICAgIGVsZW1lbnRNYXAsCiAgICAgICAgc291cmNlSW5mb3JtYXRpb25TdHJhdGVneSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VTcGFuIHNwYW5Gcm9tU3Bhbm5hYmxlKFNwYW5uYWJsZSBzcGFubmFibGUsIEVudGl0eSBjdXJyZW50RWxlbWVudCkgewogICAgcmV0dXJuIF9lbGVtZW50TWFwLmdldFNvdXJjZVNwYW4oc3Bhbm5hYmxlLCBjdXJyZW50RWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlc0luZmVycmVyIGNyZWF0ZVR5cGVzSW5mZXJyZXIoCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwgSW5mZXJyZWREYXRhQnVpbGRlciBpbmZlcnJlZERhdGFCdWlsZGVyKSB7CiAgICByZXR1cm4gbmV3IFR5cGVHcmFwaEluZmVycmVyKF9jb21waWxlciwgY2xvc2VkV29ybGQsIGluZmVycmVkRGF0YUJ1aWxkZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBwcmVwYXJlQ29kZWdlblJlYWRlcihEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLnJlZ2lzdGVyRW50aXR5UmVhZGVyKG5ldyBDbG9zZWRFbnRpdHlSZWFkZXIoX2VsZW1lbnRNYXApKTsKICAgIHNvdXJjZS5yZWdpc3RlckVudGl0eUxvb2t1cChuZXcgQ2xvc2VkRW50aXR5TG9va3VwKF9lbGVtZW50TWFwKSk7CiAgICBzb3VyY2UucmVnaXN0ZXJDb21wb25lbnRMb29rdXAoCiAgICAgICAgbmV3IENvbXBvbmVudExvb2t1cChfZWxlbWVudE1hcC5wcm9ncmFtRW52Lm1haW5Db21wb25lbnQpKTsKICB9CgogIEBvdmVycmlkZQogIEVudGl0eVdyaXRlciBmb3JFYWNoQ29kZWdlbk1lbWJlcih2b2lkIEZ1bmN0aW9uKE1lbWJlckVudGl0eSBtZW1iZXIpIGYpIHsKICAgIGludCBlYXJseU1lbWJlckluZGV4TGltaXQgPSBfZWxlbWVudE1hcC5wcmVwYXJlRm9yQ29kZWdlblNlcmlhbGl6YXRpb24oKTsKICAgIENsb3NlZEVudGl0eVdyaXRlciBlbnRpdHlXcml0ZXIgPQogICAgICAgIG5ldyBDbG9zZWRFbnRpdHlXcml0ZXIoX2VsZW1lbnRNYXAsIGVhcmx5TWVtYmVySW5kZXhMaW1pdCk7CiAgICBmb3IgKGludCBtZW1iZXJJbmRleCA9IDA7CiAgICAgICAgbWVtYmVySW5kZXggPCBfZWxlbWVudE1hcC5tZW1iZXJzLmxlbmd0aDsKICAgICAgICBtZW1iZXJJbmRleCsrKSB7CiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBfZWxlbWVudE1hcC5tZW1iZXJzLmdldEVudGl0eShtZW1iZXJJbmRleCk7CiAgICAgIGlmIChtZW1iZXIgPT0gbnVsbCB8fCBtZW1iZXIuaXNBYnN0cmFjdCkgY29udGludWU7CiAgICAgIGYobWVtYmVyKTsKICAgIH0KICAgIHJldHVybiBlbnRpdHlXcml0ZXI7CiAgfQp9CgpjbGFzcyBLZXJuZWxDb2RlZ2VuV29ya0l0ZW1CdWlsZGVyIGltcGxlbWVudHMgV29ya0l0ZW1CdWlsZGVyIHsKICBmaW5hbCBKc0JhY2tlbmRTdHJhdGVneSBfYmFja2VuZFN0cmF0ZWd5OwogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CiAgZmluYWwgQ29kZWdlblJlc3VsdHMgX2NvZGVnZW5SZXN1bHRzOwogIGZpbmFsIEVudGl0eUxvb2t1cCBfZW50aXR5TG9va3VwOwogIGZpbmFsIENvbXBvbmVudExvb2t1cCBfY29tcG9uZW50TG9va3VwOwoKICBLZXJuZWxDb2RlZ2VuV29ya0l0ZW1CdWlsZGVyKHRoaXMuX2JhY2tlbmRTdHJhdGVneSwgdGhpcy5fY2xvc2VkV29ybGQsCiAgICAgIHRoaXMuX2NvZGVnZW5SZXN1bHRzLCB0aGlzLl9lbnRpdHlMb29rdXAsIHRoaXMuX2NvbXBvbmVudExvb2t1cCk7CgogIEBvdmVycmlkZQogIFdvcmtJdGVtIGNyZWF0ZVdvcmtJdGVtKE1lbWJlckVudGl0eSBlbnRpdHkpIHsKICAgIGlmIChlbnRpdHkuaXNBYnN0cmFjdCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gbmV3IEtlcm5lbENvZGVnZW5Xb3JrSXRlbShfYmFja2VuZFN0cmF0ZWd5LCBfY2xvc2VkV29ybGQsCiAgICAgICAgX2NvZGVnZW5SZXN1bHRzLCBfZW50aXR5TG9va3VwLCBfY29tcG9uZW50TG9va3VwLCBlbnRpdHkpOwogIH0KfQoKY2xhc3MgS2VybmVsQ29kZWdlbldvcmtJdGVtIGV4dGVuZHMgV29ya0l0ZW0gewogIGZpbmFsIEpzQmFja2VuZFN0cmF0ZWd5IF9iYWNrZW5kU3RyYXRlZ3k7CiAgZmluYWwgSkNsb3NlZFdvcmxkIF9jbG9zZWRXb3JsZDsKICBmaW5hbCBDb2RlZ2VuUmVzdWx0cyBfY29kZWdlblJlc3VsdHM7CiAgZmluYWwgRW50aXR5TG9va3VwIF9lbnRpdHlMb29rdXA7CiAgZmluYWwgQ29tcG9uZW50TG9va3VwIF9jb21wb25lbnRMb29rdXA7CiAgQG92ZXJyaWRlCiAgZmluYWwgTWVtYmVyRW50aXR5IGVsZW1lbnQ7CgogIEtlcm5lbENvZGVnZW5Xb3JrSXRlbSgKICAgICAgdGhpcy5fYmFja2VuZFN0cmF0ZWd5LAogICAgICB0aGlzLl9jbG9zZWRXb3JsZCwKICAgICAgdGhpcy5fY29kZWdlblJlc3VsdHMsCiAgICAgIHRoaXMuX2VudGl0eUxvb2t1cCwKICAgICAgdGhpcy5fY29tcG9uZW50TG9va3VwLAogICAgICB0aGlzLmVsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICBXb3JsZEltcGFjdCBydW4oKSB7CiAgICByZXR1cm4gX2JhY2tlbmRTdHJhdGVneS5nZW5lcmF0ZUNvZGUoCiAgICAgICAgdGhpcywgX2Nsb3NlZFdvcmxkLCBfY29kZWdlblJlc3VsdHMsIF9lbnRpdHlMb29rdXAsIF9jb21wb25lbnRMb29rdXApOwogIH0KfQoKLy8vIFRhc2sgZm9yIGJ1aWxkaW5nIFNTQSBmcm9tIGtlcm5lbCBJUiBsb2FkZWQgZnJvbSAuZGlsbC4KY2xhc3MgS2VybmVsU3NhQnVpbGRlciBpbXBsZW1lbnRzIFNzYUJ1aWxkZXIgewogIGZpbmFsIENvbXBpbGVyVGFzayBfdGFzazsKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CiAgZmluYWwgRGlhZ25vc3RpY1JlcG9ydGVyIF9yZXBvcnRlcjsKICBmaW5hbCBEdW1wSW5mb1Rhc2sgX2R1bXBJbmZvVGFzazsKICBmaW5hbCBKc1RvRWxlbWVudE1hcCBfZWxlbWVudE1hcDsKICBmaW5hbCBTb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5IF9zb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5OwoKICBGdW5jdGlvbklubGluZUNhY2hlIF9pbmxpbmVDYWNoZTsKICBJbmxpbmVEYXRhQ2FjaGUgX2lubGluZURhdGFDYWNoZTsKCiAgS2VybmVsU3NhQnVpbGRlcih0aGlzLl90YXNrLCB0aGlzLl9vcHRpb25zLCB0aGlzLl9yZXBvcnRlciwKICAgICAgdGhpcy5fZHVtcEluZm9UYXNrLCB0aGlzLl9lbGVtZW50TWFwLCB0aGlzLl9zb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5KTsKCiAgQG92ZXJyaWRlCiAgSEdyYXBoIGJ1aWxkKAogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsCiAgICAgIENvZGVnZW5JbnB1dHMgY29kZWdlbiwKICAgICAgQ29kZWdlblJlZ2lzdHJ5IHJlZ2lzdHJ5LAogICAgICBNb2R1bGFyTmFtZXIgbmFtZXIsCiAgICAgIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIpIHsKICAgIF9pbmxpbmVDYWNoZSA/Pz0gbmV3IEZ1bmN0aW9uSW5saW5lQ2FjaGUoY2xvc2VkV29ybGQuYW5ub3RhdGlvbnNEYXRhKTsKICAgIF9pbmxpbmVEYXRhQ2FjaGUgPz89IG5ldyBJbmxpbmVEYXRhQ2FjaGUoCiAgICAgICAgZW5hYmxlVXNlckFzc2VydGlvbnM6IF9vcHRpb25zLmVuYWJsZVVzZXJBc3NlcnRpb25zLAogICAgICAgIG9taXRJbXBsaWNpdENhc3RzOiBfb3B0aW9ucy5vbWl0SW1wbGljaXRDaGVja3MpOwogICAgcmV0dXJuIF90YXNrLm1lYXN1cmUoKCkgewogICAgICBLZXJuZWxTc2FHcmFwaEJ1aWxkZXIgYnVpbGRlciA9IG5ldyBLZXJuZWxTc2FHcmFwaEJ1aWxkZXIoCiAgICAgICAgICBfb3B0aW9ucywKICAgICAgICAgIF9yZXBvcnRlciwKICAgICAgICAgIG1lbWJlciwKICAgICAgICAgIF9lbGVtZW50TWFwLmdldE1lbWJlclRoaXNUeXBlKG1lbWJlciksCiAgICAgICAgICBfZHVtcEluZm9UYXNrLAogICAgICAgICAgX2VsZW1lbnRNYXAsCiAgICAgICAgICByZXN1bHRzLAogICAgICAgICAgY2xvc2VkV29ybGQsCiAgICAgICAgICByZWdpc3RyeSwKICAgICAgICAgIG5hbWVyLAogICAgICAgICAgZW1pdHRlciwKICAgICAgICAgIGNvZGVnZW4udHJhY2VyLAogICAgICAgICAgY29kZWdlbi5ydGlFbmNvZGVyLAogICAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3ksCiAgICAgICAgICBfaW5saW5lQ2FjaGUsCiAgICAgICAgICBfaW5saW5lRGF0YUNhY2hlKTsKICAgICAgcmV0dXJuIGJ1aWxkZXIuYnVpbGQoKTsKICAgIH0pOwogIH0KfQoKY2xhc3MgS2VybmVsVG9UeXBlSW5mZXJlbmNlTWFwSW1wbCBpbXBsZW1lbnRzIEtlcm5lbFRvVHlwZUluZmVyZW5jZU1hcCB7CiAgZmluYWwgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgX2dsb2JhbEluZmVyZW5jZVJlc3VsdHM7CiAgR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdCBfdGFyZ2V0UmVzdWx0czsKCiAgS2VybmVsVG9UeXBlSW5mZXJlbmNlTWFwSW1wbCgKICAgICAgTWVtYmVyRW50aXR5IHRhcmdldCwgdGhpcy5fZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cykgewogICAgX3RhcmdldFJlc3VsdHMgPSBfcmVzdWx0T2YodGFyZ2V0KTsKICB9CgogIEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHQgX3Jlc3VsdE9mKE1lbWJlckVudGl0eSBlKSA9PgogICAgICBfZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cwogICAgICAgICAgLnJlc3VsdE9mTWVtYmVyKGUgaXMgQ29uc3RydWN0b3JCb2R5RW50aXR5ID8gZS5jb25zdHJ1Y3RvciA6IGUpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldFJldHVyblR5cGVPZihGdW5jdGlvbkVudGl0eSBmdW5jdGlvbikgewogICAgcmV0dXJuIEFic3RyYWN0VmFsdWVGYWN0b3J5LmluZmVycmVkUmV0dXJuVHlwZUZvckVsZW1lbnQoCiAgICAgICAgZnVuY3Rpb24sIF9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXJUeXBlT2ZJbnZvY2F0aW9uKAogICAgICBpci5NZXRob2RJbnZvY2F0aW9uIG5vZGUsIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbikgewogICAgcmV0dXJuIF90YXJnZXRSZXN1bHRzLnR5cGVPZlNlbmQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZU9mR2V0KGlyLlByb3BlcnR5R2V0IG5vZGUpIHsKICAgIHJldHVybiBfdGFyZ2V0UmVzdWx0cy50eXBlT2ZTZW5kKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSByZWNlaXZlclR5cGVPZkRpcmVjdEdldChpci5EaXJlY3RQcm9wZXJ0eUdldCBub2RlKSB7CiAgICByZXR1cm4gX3RhcmdldFJlc3VsdHMudHlwZU9mU2VuZChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXJUeXBlT2ZTZXQoCiAgICAgIGlyLlByb3BlcnR5U2V0IG5vZGUsIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbikgewogICAgcmV0dXJuIF90YXJnZXRSZXN1bHRzLnR5cGVPZlNlbmQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkxpc3RMaXRlcmFsKAogICAgICBpci5MaXN0TGl0ZXJhbCBsaXN0TGl0ZXJhbCwgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluKSB7CiAgICByZXR1cm4gX2dsb2JhbEluZmVyZW5jZVJlc3VsdHMudHlwZU9mTGlzdExpdGVyYWwobGlzdExpdGVyYWwpID8/CiAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mSXRlcmF0b3IoaXIuRm9ySW5TdGF0ZW1lbnQgbm9kZSkgewogICAgcmV0dXJuIF90YXJnZXRSZXN1bHRzLnR5cGVPZkl0ZXJhdG9yKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZJdGVyYXRvckN1cnJlbnQoaXIuRm9ySW5TdGF0ZW1lbnQgbm9kZSkgewogICAgcmV0dXJuIF90YXJnZXRSZXN1bHRzLnR5cGVPZkl0ZXJhdG9yQ3VycmVudChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mSXRlcmF0b3JNb3ZlTmV4dChpci5Gb3JJblN0YXRlbWVudCBub2RlKSB7CiAgICByZXR1cm4gX3RhcmdldFJlc3VsdHMudHlwZU9mSXRlcmF0b3JNb3ZlTmV4dChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNKc0luZGV4YWJsZUl0ZXJhdG9yKAogICAgICBpci5Gb3JJblN0YXRlbWVudCBub2RlLCBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4pIHsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IHR5cGVPZkl0ZXJhdG9yKG5vZGUpOwogICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4uaXNKc0luZGV4YWJsZUFuZEl0ZXJhYmxlKG1hc2spLmlzRGVmaW5pdGVseVRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGluZmVycmVkSW5kZXhUeXBlKGlyLkZvckluU3RhdGVtZW50IG5vZGUpIHsKICAgIHJldHVybiBBYnN0cmFjdFZhbHVlRmFjdG9yeS5pbmZlcnJlZFJlc3VsdFR5cGVGb3JTZWxlY3RvcigKICAgICAgICBuZXcgU2VsZWN0b3IuaW5kZXgoKSwgdHlwZU9mSXRlcmF0b3Iobm9kZSksIF9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0SW5mZXJyZWRUeXBlT2YoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgcmV0dXJuIEFic3RyYWN0VmFsdWVGYWN0b3J5LmluZmVycmVkVHlwZUZvck1lbWJlcigKICAgICAgICBtZW1iZXIsIF9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0SW5mZXJyZWRUeXBlT2ZQYXJhbWV0ZXIoTG9jYWwgcGFyYW1ldGVyKSB7CiAgICByZXR1cm4gQWJzdHJhY3RWYWx1ZUZhY3RvcnkuaW5mZXJyZWRUeXBlRm9yUGFyYW1ldGVyKAogICAgICAgIHBhcmFtZXRlciwgX2dsb2JhbEluZmVyZW5jZVJlc3VsdHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSByZXN1bHRUeXBlT2ZTZWxlY3RvcihTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSBtYXNrKSB7CiAgICByZXR1cm4gQWJzdHJhY3RWYWx1ZUZhY3RvcnkuaW5mZXJyZWRSZXN1bHRUeXBlRm9yU2VsZWN0b3IoCiAgICAgICAgc2VsZWN0b3IsIG1hc2ssIF9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZUZyb21OYXRpdmVCZWhhdmlvcigKICAgICAgTmF0aXZlQmVoYXZpb3IgbmF0aXZlQmVoYXZpb3IsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIEFic3RyYWN0VmFsdWVGYWN0b3J5LmZyb21OYXRpdmVCZWhhdmlvcihuYXRpdmVCZWhhdmlvciwgY2xvc2VkV29ybGQpOwogIH0KfQqCbgBOTjwBIwEoASMZIR8eShsuHCQaLiooMS8hJyUsLjYmMCsuIyszLitDPR4pIiEaLiUcGhwZMSQoGBcbIBggFgE1HCQBPyhAATABEAE2ASABLwEmATcBOzknASZCHk8NTQZGMRscDhwkBAEMITgdEwQBDD4BDDMBJwFGAVEBOwE8MkMEAQ4iIEMYBAE/KEQMMChJKwQBMwwjKEUMMyg/HgQBDCNBQiwcHx0lJj5ERUgVGhwbKkc+LEQZBAEMQyoEAQwgP0c3QSUeAUdCESAoJB4BMDRMGk8NTSwrBgFIIRkeJCwoIRABUDgBRhQEAQwpGSA5HScgQ1AlJCEdQkxAHVBIRSAOJRlGJSoSGRwxUU8YSCUfIBwVJiErJCYEAUYgPR03Ry8wMi5IQDc4GygkHxUnIT0/HjFJAT4VKCQRICIdHxAgGiQEARwVICUhKShFJiAeSEYkTis2JFAxNzE0Bh8rBiBCOAYeSUA7GAQBDC0sHAQBDEtAM0lFGAQBDB9QIQ4bHCA6FCQEAQxNQQQBDCVLTwQBDDFGRiREBAEMTE4mRB4yGUg5EQYZBAIBQCwjKCQqAUlIAQwxKEVDBAIBLywjKCQqDB4BGR0ZHBodFQEMFipPBAIBPC8cIiYkJD4BJCQBPk4BDBAbICodIBogSy49OR5BFBUSMRkXExcUERMaHiYYHR4IBAIBSTwyASA7KAQBPx5LAQw7PiwEAQwqSywEAQw5LAQBDEUsBAEMI0YsBAEMI01FKQQBDDkwBAEMQDcEAQxBOAQBDB5JL1AEAQw8P04EAQw5NyoEAQw+Oi0EAQxOPzIEAQwoQVEEAgEucGFja2FnZTpjb21waWxlci9zcmMvanNfbW9kZWwvanNfc3RyYXRlZ3kuZGFydDlzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9rZXJuZWwva2VybmVsX3N0cmF0ZWd5LmRhcnTAAEPjLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5rZXJuZWwuZnJvbnRlbmRfc3RyYXRlZ3k7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi9iYWNrZW5kX2FwaS5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCcgc2hvdyBVcmlzOwppbXBvcnQgJy4uL2NvbW1vbi9yZXNvbHV0aW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi90YXNrcy5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vd29yay5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vY29tcGlsZXIuZGFydCc7CmltcG9ydCAnLi4vZGVmZXJyZWRfbG9hZC5kYXJ0JyBzaG93IERlZmVycmVkTG9hZFRhc2s7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZW5xdWV1ZS5kYXJ0JzsKaW1wb3J0ICcuLi9lbnZpcm9ubWVudC5kYXJ0JyBhcyBlbnY7CmltcG9ydCAnLi4vZnJvbnRlbmRfc3RyYXRlZ3kuZGFydCc7CmltcG9ydCAnLi4vaXIvYW5ub3RhdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vaXIvY2xvc3VyZS5kYXJ0JyBzaG93IENsb3N1cmVTY29wZU1vZGVsOwppbXBvcnQgJy4uL2lyL2ltcGFjdC5kYXJ0JzsKaW1wb3J0ICcuLi9pci9tb2R1bGFyLmRhcnQnOwppbXBvcnQgJy4uL2lyL3Njb3BlLmRhcnQnIHNob3cgU2NvcGVNb2RlbDsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2Fubm90YXRpb25zLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvYmFja2VuZF9pbXBhY3QuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9iYWNrZW5kX3VzYWdlLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvY3VzdG9tX2VsZW1lbnRzX2FuYWx5c2lzLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvZmllbGRfYW5hbHlzaXMuZGFydCcgc2hvdyBLRmllbGRBbmFseXNpczsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2ltcGFjdF90cmFuc2Zvcm1lci5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2ludGVyY2VwdG9yX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYXRpdmVfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25vX3N1Y2hfbWV0aG9kX3JlZ2lzdHJ5LmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvcmVzb2x1dGlvbl9saXN0ZW5lci5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfcmVzb2x1dGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi9rZXJuZWwvZGFydDJqc190YXJnZXQuZGFydCc7CmltcG9ydCAnLi4vbmF0aXZlL2VucXVldWUuZGFydCcgc2hvdyBOYXRpdmVSZXNvbHV0aW9uRW5xdWV1ZXI7CmltcG9ydCAnLi4vbmF0aXZlL3Jlc29sdmVyLmRhcnQnOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2xhc3NfaGllcmFyY2h5LmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3Jlc29sdXRpb25fd29ybGRfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS93b3JsZF9idWlsZGVyLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3dvcmxkX2ltcGFjdC5kYXJ0JzsKaW1wb3J0ICcuLi91dGlsL2VudW1zZXQuZGFydCc7CmltcG9ydCAnZGVmZXJyZWRfbG9hZC5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50X21hcC5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50X21hcF9pbXBsLmRhcnQnOwppbXBvcnQgJ2xvYWRlci5kYXJ0JzsKCi8vLyBGcm9udCBlbmQgc3RyYXRlZ3kgdGhhdCBsb2FkcyAnLmRpbGwnIGZpbGVzIGFuZCBidWlsZHMgYSByZXNvbHZlZCBlbGVtZW50Ci8vLyBtb2RlbCBmcm9tIGtlcm5lbCBJUiBub2Rlcy4KY2xhc3MgS2VybmVsRnJvbnRlbmRTdHJhdGVneSBleHRlbmRzIEZyb250ZW5kU3RyYXRlZ3kgewogIGZpbmFsIE5hdGl2ZUJhc2ljRGF0YUJ1aWxkZXJJbXBsIG5hdGl2ZUJhc2ljRGF0YUJ1aWxkZXIgPQogICAgICBuZXcgTmF0aXZlQmFzaWNEYXRhQnVpbGRlckltcGwoKTsKICBOYXRpdmVCYXNpY0RhdGEgX25hdGl2ZUJhc2ljRGF0YTsKICBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CiAgQ29tcGlsZXJUYXNrIF9jb21waWxlclRhc2s7CiAgS2VybmVsVG9FbGVtZW50TWFwSW1wbCBfZWxlbWVudE1hcDsKICBSdW50aW1lVHlwZXNOZWVkQnVpbGRlciBfcnVudGltZVR5cGVzTmVlZEJ1aWxkZXI7CgogIEtlcm5lbEFubm90YXRpb25Qcm9jZXNzb3IgX2Fubm90YXRpb25Qcm9jZXNzb3I7CgogIGZpbmFsIE1hcDxNZW1iZXJFbnRpdHksIENsb3N1cmVTY29wZU1vZGVsPiBjbG9zdXJlTW9kZWxzID0ge307CgogIE1vZHVsYXJTdHJhdGVneSBfbW9kdWxhclN0cmF0ZWd5OwogIElyQW5ub3RhdGlvbkRhdGEgX2lyQW5ub3RhdGlvbkRhdGE7CgogIE5hdGl2ZURhdGFCdWlsZGVySW1wbCBfbmF0aXZlRGF0YUJ1aWxkZXI7CiAgTmF0aXZlRGF0YUJ1aWxkZXIgZ2V0IG5hdGl2ZURhdGFCdWlsZGVyID0+IF9uYXRpdmVEYXRhQnVpbGRlcjsKCiAgQmFja2VuZFVzYWdlQnVpbGRlciBfYmFja2VuZFVzYWdlQnVpbGRlcjsKCiAgTmF0aXZlUmVzb2x1dGlvbkVucXVldWVyIF9uYXRpdmVSZXNvbHV0aW9uRW5xdWV1ZXI7CgogIC8vLyBSZXNvbHV0aW9uIHN1cHBvcnQgZm9yIGdlbmVyYXRpbmcgdGFibGUgb2YgaW50ZXJjZXB0b3JzIGFuZAogIC8vLyBjb25zdHJ1Y3RvcnMgZm9yIGN1c3RvbSBlbGVtZW50cy4KICBDdXN0b21FbGVtZW50c1Jlc29sdXRpb25BbmFseXNpcyBfY3VzdG9tRWxlbWVudHNSZXNvbHV0aW9uQW5hbHlzaXM7CgogIEtGaWVsZEFuYWx5c2lzIF9maWVsZEFuYWx5c2lzOwoKICAvLy8gQmFja2VuZCB0cmFuc2Zvcm1hdGlvbiBtZXRob2RzIGZvciB0aGUgd29ybGQgaW1wYWN0cy4KICBJbXBhY3RUcmFuc2Zvcm1lciBpbXBhY3RUcmFuc2Zvcm1lcjsKCiAgQG92ZXJyaWRlCiAgTm9TdWNoTWV0aG9kUmVnaXN0cnkgbm9TdWNoTWV0aG9kUmVnaXN0cnk7CgogIEtlcm5lbEZyb250ZW5kU3RyYXRlZ3kodGhpcy5fY29tcGlsZXJUYXNrLCB0aGlzLl9vcHRpb25zLAogICAgICBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIsIGVudi5FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgYXNzZXJ0KF9jb21waWxlclRhc2sgIT0gbnVsbCk7CiAgICBfZWxlbWVudE1hcCA9CiAgICAgICAgbmV3IEtlcm5lbFRvRWxlbWVudE1hcEltcGwocmVwb3J0ZXIsIGVudmlyb25tZW50LCB0aGlzLCBfb3B0aW9ucyk7CiAgICBfbW9kdWxhclN0cmF0ZWd5ID0gbmV3IEtlcm5lbE1vZHVsYXJTdHJhdGVneShfY29tcGlsZXJUYXNrLCBfZWxlbWVudE1hcCk7CiAgICBfYmFja2VuZFVzYWdlQnVpbGRlciA9IG5ldyBCYWNrZW5kVXNhZ2VCdWlsZGVySW1wbCh0aGlzKTsKICAgIG5vU3VjaE1ldGhvZFJlZ2lzdHJ5ID0gbmV3IE5vU3VjaE1ldGhvZFJlZ2lzdHJ5SW1wbCgKICAgICAgICBjb21tb25FbGVtZW50cywgbmV3IEtlcm5lbE5vU3VjaE1ldGhvZFJlc29sdmVyKF9lbGVtZW50TWFwKSk7CiAgfQoKICBOYXRpdmVSZXNvbHV0aW9uRW5xdWV1ZXIgZ2V0IG5hdGl2ZVJlc29sdXRpb25FbnF1ZXVlckZvclRlc3RpbmcgPT4KICAgICAgX25hdGl2ZVJlc29sdXRpb25FbnF1ZXVlcjsKCiAgS0ZpZWxkQW5hbHlzaXMgZ2V0IGZpZWxkQW5hbHlzaXNGb3JUZXN0aW5nID0+IF9maWVsZEFuYWx5c2lzOwoKICBAb3ZlcnJpZGUKICB2b2lkIG9uUmVzb2x1dGlvblN0YXJ0KCkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQXZvaWQgdGhlIGNvbXBpbGVyLmVsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZQogICAgLy8gY2FsbHMuIEN1cnJlbnRseSBuZWVkZWQgdG8gZW5zdXJlIHJlc29sdXRpb24gb2YgdGhlIGNsYXNzZXMgZm9yIHZhcmlvdXMKICAgIC8vIHF1ZXJpZXMgaW4gbmF0aXZlIGJlaGF2aW9yIGNvbXB1dGF0aW9uLCBpbmZlcmVuY2UgYW5kIGNvZGVnZW4uCiAgICBlbGVtZW50RW52aXJvbm1lbnQuZ2V0VGhpc1R5cGUoY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzKTsKICAgIGVsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShjb21tb25FbGVtZW50cy5qc0V4dGVuZGFibGVBcnJheUNsYXNzKTsKCiAgICBfdmFsaWRhdGVJbnRlcmNlcHRvckltcGxlbWVudHNBbGxPYmplY3RNZXRob2RzKAogICAgICAgIGNvbW1vbkVsZW1lbnRzLmpzSW50ZXJjZXB0b3JDbGFzcyk7CiAgICAvLyBUaGUgbnVsbC1pbnRlcmNlcHRvciBtdXN0IGFsc28gaW1wbGVtZW50ICphbGwqIG1ldGhvZHMuCiAgICBfdmFsaWRhdGVJbnRlcmNlcHRvckltcGxlbWVudHNBbGxPYmplY3RNZXRob2RzKGNvbW1vbkVsZW1lbnRzLmpzTnVsbENsYXNzKTsKICB9CgogIHZvaWQgX3ZhbGlkYXRlSW50ZXJjZXB0b3JJbXBsZW1lbnRzQWxsT2JqZWN0TWV0aG9kcygKICAgICAgQ2xhc3NFbnRpdHkgaW50ZXJjZXB0b3JDbGFzcykgewogICAgaWYgKGludGVyY2VwdG9yQ2xhc3MgPT0gbnVsbCkgcmV0dXJuOwogICAgQ2xhc3NFbnRpdHkgb2JqZWN0Q2xhc3MgPSBjb21tb25FbGVtZW50cy5vYmplY3RDbGFzczsKICAgIGVsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoQ2xhc3NNZW1iZXIob2JqZWN0Q2xhc3MsCiAgICAgICAgKF8sIE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgICAgTWVtYmVyRW50aXR5IGludGVyY2VwdG9yTWVtYmVyID0gZWxlbWVudEVudmlyb25tZW50CiAgICAgICAgICAubG9va3VwTG9jYWxDbGFzc01lbWJlcihpbnRlcmNlcHRvckNsYXNzLCBtZW1iZXIubmFtZSk7CiAgICAgIC8vIEludGVyY2VwdG9ycyBtdXN0IG92ZXJyaWRlIGFsbCBPYmplY3QgbWV0aG9kcyBkdWUgdG8gY2FsbGluZyBjb252ZW50aW9uCiAgICAgIC8vIGRpZmZlcmVuY2VzLgogICAgICBhc3NlcnQoCiAgICAgICAgICBpbnRlcmNlcHRvck1lbWJlci5lbmNsb3NpbmdDbGFzcyA9PSBpbnRlcmNlcHRvckNsYXNzLAogICAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgICAgaW50ZXJjZXB0b3JNZW1iZXIsCiAgICAgICAgICAgICAgIk1lbWJlciAke21lbWJlci5uYW1lfSBub3Qgb3ZlcnJpZGRlbiBpbiAke2ludGVyY2VwdG9yQ2xhc3N9LiAiCiAgICAgICAgICAgICAgIkZvdW5kICRpbnRlcmNlcHRvck1lbWJlciBmcm9tICIKICAgICAgICAgICAgICAiJHtpbnRlcmNlcHRvck1lbWJlci5lbmNsb3NpbmdDbGFzc30uIikpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBSZXNvbHV0aW9uRW5xdWV1ZXIgY3JlYXRlUmVzb2x1dGlvbkVucXVldWVyKAogICAgICBDb21waWxlclRhc2sgdGFzaywgQ29tcGlsZXIgY29tcGlsZXIpIHsKICAgIFJ1bnRpbWVUeXBlc05lZWRCdWlsZGVyIHJ0aU5lZWRCdWlsZGVyID0gX2NyZWF0ZVJ1bnRpbWVUeXBlc05lZWRCdWlsZGVyKCk7CiAgICBCYWNrZW5kSW1wYWN0cyBpbXBhY3RzID0KICAgICAgICBuZXcgQmFja2VuZEltcGFjdHMoY29tbW9uRWxlbWVudHMsIGNvbXBpbGVyLm9wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSk7CiAgICBfbmF0aXZlUmVzb2x1dGlvbkVucXVldWVyID0gbmV3IE5hdGl2ZVJlc29sdXRpb25FbnF1ZXVlcigKICAgICAgICBjb21waWxlci5vcHRpb25zLAogICAgICAgIGVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgICBjb21tb25FbGVtZW50cywKICAgICAgICBfZWxlbWVudE1hcC50eXBlcywKICAgICAgICBuZXcgQmFzZU5hdGl2ZUNsYXNzRmluZGVyKGVsZW1lbnRFbnZpcm9ubWVudCwgbmF0aXZlQmFzaWNEYXRhKSk7CiAgICBfbmF0aXZlRGF0YUJ1aWxkZXIgPSBuZXcgTmF0aXZlRGF0YUJ1aWxkZXJJbXBsKG5hdGl2ZUJhc2ljRGF0YSk7CiAgICBfY3VzdG9tRWxlbWVudHNSZXNvbHV0aW9uQW5hbHlzaXMgPSBuZXcgQ3VzdG9tRWxlbWVudHNSZXNvbHV0aW9uQW5hbHlzaXMoCiAgICAgICAgZWxlbWVudEVudmlyb25tZW50LAogICAgICAgIGNvbW1vbkVsZW1lbnRzLAogICAgICAgIG5hdGl2ZUJhc2ljRGF0YSwKICAgICAgICBfYmFja2VuZFVzYWdlQnVpbGRlcik7CiAgICBfZmllbGRBbmFseXNpcyA9IG5ldyBLRmllbGRBbmFseXNpcyh0aGlzKTsKICAgIENsYXNzUXVlcmllcyBjbGFzc1F1ZXJpZXMgPSBuZXcgS2VybmVsQ2xhc3NRdWVyaWVzKGVsZW1lbnRNYXApOwogICAgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGNsYXNzSGllcmFyY2h5QnVpbGRlciA9CiAgICAgICAgbmV3IENsYXNzSGllcmFyY2h5QnVpbGRlcihjb21tb25FbGVtZW50cywgY2xhc3NRdWVyaWVzKTsKICAgIEFubm90YXRpb25zRGF0YUJ1aWxkZXIgYW5ub3RhdGlvbnNEYXRhQnVpbGRlciA9CiAgICAgICAgbmV3IEFubm90YXRpb25zRGF0YUJ1aWxkZXIoKTsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFRoaXMgaXMgYSBoYWNrLiBUaGUgYW5ub3RhdGlvbiBkYXRhIGlzIGJ1aWx0IHdoaWxlCiAgICAvLyB1c2luZyBpdC4gV2l0aCBDRkUgY29uc3RhbnRzIHRoZSBhbm5vdGF0aW9ucyBkYXRhIGNhbiBiZSBidWlsdCBmdWxseQogICAgLy8gYmVmb3JlIGNyZWF0aW5nIHRoZSByZXNvbHV0aW9uIGVucXVldWVyLgogICAgQW5ub3RhdGlvbnNEYXRhIGFubm90YXRpb25zRGF0YSA9IG5ldyBBbm5vdGF0aW9uc0RhdGFJbXBsKAogICAgICAgIGNvbXBpbGVyLm9wdGlvbnMsIGFubm90YXRpb25zRGF0YUJ1aWxkZXIucHJhZ21hQW5ub3RhdGlvbnMpOwogICAgaW1wYWN0VHJhbnNmb3JtZXIgPSBuZXcgSmF2YVNjcmlwdEltcGFjdFRyYW5zZm9ybWVyKAogICAgICAgIGVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgICBjb21tb25FbGVtZW50cywKICAgICAgICBpbXBhY3RzLAogICAgICAgIG5hdGl2ZUJhc2ljRGF0YSwKICAgICAgICBfbmF0aXZlUmVzb2x1dGlvbkVucXVldWVyLAogICAgICAgIF9iYWNrZW5kVXNhZ2VCdWlsZGVyLAogICAgICAgIF9jdXN0b21FbGVtZW50c1Jlc29sdXRpb25BbmFseXNpcywKICAgICAgICBydGlOZWVkQnVpbGRlciwKICAgICAgICBjbGFzc0hpZXJhcmNoeUJ1aWxkZXIsCiAgICAgICAgYW5ub3RhdGlvbnNEYXRhKTsKICAgIEludGVyY2VwdG9yRGF0YUJ1aWxkZXIgaW50ZXJjZXB0b3JEYXRhQnVpbGRlciA9CiAgICAgICAgbmV3IEludGVyY2VwdG9yRGF0YUJ1aWxkZXJJbXBsKAogICAgICAgICAgICBuYXRpdmVCYXNpY0RhdGEsIGVsZW1lbnRFbnZpcm9ubWVudCwgY29tbW9uRWxlbWVudHMpOwogICAgcmV0dXJuIG5ldyBSZXNvbHV0aW9uRW5xdWV1ZXIoCiAgICAgICAgdGFzaywKICAgICAgICBjb21waWxlci5yZXBvcnRlciwKICAgICAgICBuZXcgUmVzb2x1dGlvbkVucXVldWVyTGlzdGVuZXIoCiAgICAgICAgICAgIGNvbXBpbGVyLm9wdGlvbnMsCiAgICAgICAgICAgIGVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgICAgICAgY29tbW9uRWxlbWVudHMsCiAgICAgICAgICAgIGltcGFjdHMsCiAgICAgICAgICAgIG5hdGl2ZUJhc2ljRGF0YSwKICAgICAgICAgICAgaW50ZXJjZXB0b3JEYXRhQnVpbGRlciwKICAgICAgICAgICAgX2JhY2tlbmRVc2FnZUJ1aWxkZXIsCiAgICAgICAgICAgIG5vU3VjaE1ldGhvZFJlZ2lzdHJ5LAogICAgICAgICAgICBfY3VzdG9tRWxlbWVudHNSZXNvbHV0aW9uQW5hbHlzaXMsCiAgICAgICAgICAgIF9uYXRpdmVSZXNvbHV0aW9uRW5xdWV1ZXIsCiAgICAgICAgICAgIF9maWVsZEFuYWx5c2lzLAogICAgICAgICAgICBjb21waWxlci5kZWZlcnJlZExvYWRUYXNrKSwKICAgICAgICBuZXcgUmVzb2x1dGlvbldvcmxkQnVpbGRlckltcGwoCiAgICAgICAgICAgIF9vcHRpb25zLAogICAgICAgICAgICBlbGVtZW50TWFwLAogICAgICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQsCiAgICAgICAgICAgIF9lbGVtZW50TWFwLnR5cGVzLAogICAgICAgICAgICBjb21tb25FbGVtZW50cywKICAgICAgICAgICAgbmF0aXZlQmFzaWNEYXRhLAogICAgICAgICAgICBuYXRpdmVEYXRhQnVpbGRlciwKICAgICAgICAgICAgaW50ZXJjZXB0b3JEYXRhQnVpbGRlciwKICAgICAgICAgICAgX2JhY2tlbmRVc2FnZUJ1aWxkZXIsCiAgICAgICAgICAgIHJ0aU5lZWRCdWlsZGVyLAogICAgICAgICAgICBfZmllbGRBbmFseXNpcywKICAgICAgICAgICAgX25hdGl2ZVJlc29sdXRpb25FbnF1ZXVlciwKICAgICAgICAgICAgbm9TdWNoTWV0aG9kUmVnaXN0cnksCiAgICAgICAgICAgIGFubm90YXRpb25zRGF0YUJ1aWxkZXIsCiAgICAgICAgICAgIGNvbnN0IFN0cm9uZ01vZGVXb3JsZFN0cmF0ZWd5KCksCiAgICAgICAgICAgIGNsYXNzSGllcmFyY2h5QnVpbGRlciwKICAgICAgICAgICAgY2xhc3NRdWVyaWVzKSwKICAgICAgICBuZXcgS2VybmVsV29ya0l0ZW1CdWlsZGVyKAogICAgICAgICAgICBfY29tcGlsZXJUYXNrLAogICAgICAgICAgICBlbGVtZW50TWFwLAogICAgICAgICAgICBuYXRpdmVCYXNpY0RhdGEsCiAgICAgICAgICAgIG5hdGl2ZURhdGFCdWlsZGVyLAogICAgICAgICAgICBhbm5vdGF0aW9uc0RhdGFCdWlsZGVyLAogICAgICAgICAgICBpbXBhY3RUcmFuc2Zvcm1lciwKICAgICAgICAgICAgY2xvc3VyZU1vZGVscywKICAgICAgICAgICAgY29tcGlsZXIuaW1wYWN0Q2FjaGUsCiAgICAgICAgICAgIF9maWVsZEFuYWx5c2lzLAogICAgICAgICAgICBfbW9kdWxhclN0cmF0ZWd5LAogICAgICAgICAgICBfaXJBbm5vdGF0aW9uRGF0YSksCiAgICAgICAgYW5ub3RhdGlvbnNEYXRhKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgb25SZXNvbHV0aW9uRW5kKCkgewogICAgYXNzZXJ0KF9hbm5vdGF0aW9uUHJvY2Vzc29yICE9IG51bGwsCiAgICAgICAgIkFubm90YXRpb25Qcm9jZXNzb3IgaGFzIG5vdCBiZWVuIGNyZWF0ZWQuIik7CiAgICBfYW5ub3RhdGlvblByb2Nlc3Nvci5wcm9jZXNzSnNJbnRlcm9wQW5ub3RhdGlvbnMoCiAgICAgICAgbmF0aXZlQmFzaWNEYXRhLCBuYXRpdmVEYXRhQnVpbGRlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVCYXNpY0RhdGEgZ2V0IG5hdGl2ZUJhc2ljRGF0YSB7CiAgICBpZiAoX25hdGl2ZUJhc2ljRGF0YSA9PSBudWxsKSB7CiAgICAgIF9uYXRpdmVCYXNpY0RhdGEgPSBuYXRpdmVCYXNpY0RhdGFCdWlsZGVyLmNsb3NlKGVsZW1lbnRFbnZpcm9ubWVudCk7CiAgICAgIGFzc2VydCgKICAgICAgICAgIF9uYXRpdmVCYXNpY0RhdGEgIT0gbnVsbCwKICAgICAgICAgIGZhaWxlZEF0KE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwKICAgICAgICAgICAgICAiTmF0aXZlQmFzaWNEYXRhIGhhcyBub3QgYmVlbiBjb21wdXRlZCB5ZXQuIikpOwogICAgfQogICAgcmV0dXJuIF9uYXRpdmVCYXNpY0RhdGE7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTG9hZGVkTGlicmFyaWVzKEtlcm5lbFJlc3VsdCBrZXJuZWxSZXN1bHQpIHsKICAgIF9lbGVtZW50TWFwLmFkZENvbXBvbmVudChrZXJuZWxSZXN1bHQuY29tcG9uZW50KTsKICAgIGlmIChfb3B0aW9ucy51c2VDRkVDb25zdGFudHMpIHsKICAgICAgX2lyQW5ub3RhdGlvbkRhdGEgPSBwcm9jZXNzQW5ub3RhdGlvbnMobmV3IE1vZHVsYXJDb3JlKAogICAgICAgICAga2VybmVsUmVzdWx0LmNvbXBvbmVudCwgX2VsZW1lbnRNYXAuY29uc3RhbnRFdmFsdWF0b3IpKTsKICAgIH0KICAgIF9hbm5vdGF0aW9uUHJvY2Vzc29yID0gbmV3IEtlcm5lbEFubm90YXRpb25Qcm9jZXNzb3IoCiAgICAgICAgZWxlbWVudE1hcCwgbmF0aXZlQmFzaWNEYXRhQnVpbGRlciwgX2lyQW5ub3RhdGlvbkRhdGEpOwogICAgZm9yIChVcmkgdXJpIGluIGtlcm5lbFJlc3VsdC5saWJyYXJpZXMpIHsKICAgICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5ID0gZWxlbWVudEVudmlyb25tZW50Lmxvb2t1cExpYnJhcnkodXJpKTsKICAgICAgaWYgKG1heWJlRW5hYmxlTmF0aXZlKGxpYnJhcnkuY2Fub25pY2FsVXJpKSkgewogICAgICAgIF9hbm5vdGF0aW9uUHJvY2Vzc29yLmV4dHJhY3ROYXRpdmVBbm5vdGF0aW9ucyhsaWJyYXJ5KTsKICAgICAgfQogICAgICBfYW5ub3RhdGlvblByb2Nlc3Nvci5leHRyYWN0SnNJbnRlcm9wQW5ub3RhdGlvbnMobGlicmFyeSk7CiAgICAgIGlmICh1cmkgPT0gVXJpcy5kYXJ0X2h0bWwpIHsKICAgICAgICBfYmFja2VuZFVzYWdlQnVpbGRlci5yZWdpc3Rlckh0bWxJc0xvYWRlZCgpOwogICAgICB9CiAgICB9CiAgfQoKICBJckFubm90YXRpb25EYXRhIGdldCBpckFubm90YXRpb25EYXRhRm9yVGVzdGluZyA9PiBfaXJBbm5vdGF0aW9uRGF0YTsKCiAgTW9kdWxhclN0cmF0ZWd5IGdldCBtb2R1bGFyU3RyYXRlZ3lGb3JUZXN0aW5nID0+IF9tb2R1bGFyU3RyYXRlZ3k7CgogIEBvdmVycmlkZQogIEVsZW1lbnRFbnZpcm9ubWVudCBnZXQgZWxlbWVudEVudmlyb25tZW50ID0+IF9lbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudDsKCiAgQG92ZXJyaWRlCiAgQ29tbW9uRWxlbWVudHMgZ2V0IGNvbW1vbkVsZW1lbnRzID0+IF9lbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzOwoKICBLZXJuZWxUb0VsZW1lbnRNYXAgZ2V0IGVsZW1lbnRNYXAgPT4gX2VsZW1lbnRNYXA7CgogIEBvdmVycmlkZQogIERlZmVycmVkTG9hZFRhc2sgY3JlYXRlRGVmZXJyZWRMb2FkVGFzayhDb21waWxlciBjb21waWxlcikgPT4KICAgICAgbmV3IEtlcm5lbERlZmVycmVkTG9hZFRhc2soY29tcGlsZXIsIF9lbGVtZW50TWFwKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgY29tcHV0ZU1haW4oV29ybGRJbXBhY3RCdWlsZGVyIGltcGFjdEJ1aWxkZXIpIHsKICAgIHJldHVybiBlbGVtZW50RW52aXJvbm1lbnQubWFpbkZ1bmN0aW9uOwogIH0KCiAgUnVudGltZVR5cGVzTmVlZEJ1aWxkZXIgX2NyZWF0ZVJ1bnRpbWVUeXBlc05lZWRCdWlsZGVyKCkgewogICAgcmV0dXJuIF9ydW50aW1lVHlwZXNOZWVkQnVpbGRlciA/Pz0gX29wdGlvbnMuZGlzYWJsZVJ0aU9wdGltaXphdGlvbgogICAgICAgID8gY29uc3QgVHJpdmlhbFJ1bnRpbWVUeXBlc05lZWRCdWlsZGVyKCkKICAgICAgICA6IG5ldyBSdW50aW1lVHlwZXNOZWVkQnVpbGRlckltcGwoZWxlbWVudEVudmlyb25tZW50KTsKICB9CgogIFJ1bnRpbWVUeXBlc05lZWRCdWlsZGVyIGdldCBydW50aW1lVHlwZXNOZWVkQnVpbGRlckZvclRlc3RpbmcgPT4KICAgICAgX3J1bnRpbWVUeXBlc05lZWRCdWlsZGVyOwoKICBAb3ZlcnJpZGUKICBTb3VyY2VTcGFuIHNwYW5Gcm9tU3Bhbm5hYmxlKFNwYW5uYWJsZSBzcGFubmFibGUsIEVudGl0eSBjdXJyZW50RWxlbWVudCkgewogICAgcmV0dXJuIF9lbGVtZW50TWFwLmdldFNvdXJjZVNwYW4oc3Bhbm5hYmxlLCBjdXJyZW50RWxlbWVudCk7CiAgfQp9CgpjbGFzcyBLZXJuZWxXb3JrSXRlbUJ1aWxkZXIgaW1wbGVtZW50cyBXb3JrSXRlbUJ1aWxkZXIgewogIGZpbmFsIENvbXBpbGVyVGFzayBfY29tcGlsZXJUYXNrOwogIGZpbmFsIEtlcm5lbFRvRWxlbWVudE1hcEltcGwgX2VsZW1lbnRNYXA7CiAgZmluYWwgSW1wYWN0VHJhbnNmb3JtZXIgX2ltcGFjdFRyYW5zZm9ybWVyOwogIGZpbmFsIE5hdGl2ZU1lbWJlclJlc29sdmVyIF9uYXRpdmVNZW1iZXJSZXNvbHZlcjsKICBmaW5hbCBBbm5vdGF0aW9uc0RhdGFCdWlsZGVyIF9hbm5vdGF0aW9uc0RhdGFCdWlsZGVyOwogIGZpbmFsIE1hcDxNZW1iZXJFbnRpdHksIENsb3N1cmVTY29wZU1vZGVsPiBfY2xvc3VyZU1vZGVsczsKICBmaW5hbCBNYXA8RW50aXR5LCBXb3JsZEltcGFjdD4gX2ltcGFjdENhY2hlOwogIGZpbmFsIEtGaWVsZEFuYWx5c2lzIF9maWVsZEFuYWx5c2lzOwogIGZpbmFsIE1vZHVsYXJTdHJhdGVneSBfbW9kdWxhclN0cmF0ZWd5OwogIGZpbmFsIElyQW5ub3RhdGlvbkRhdGEgX2lyQW5ub3RhdGlvbkRhdGE7CgogIEtlcm5lbFdvcmtJdGVtQnVpbGRlcigKICAgICAgdGhpcy5fY29tcGlsZXJUYXNrLAogICAgICB0aGlzLl9lbGVtZW50TWFwLAogICAgICBOYXRpdmVCYXNpY0RhdGEgbmF0aXZlQmFzaWNEYXRhLAogICAgICBOYXRpdmVEYXRhQnVpbGRlciBuYXRpdmVEYXRhQnVpbGRlciwKICAgICAgdGhpcy5fYW5ub3RhdGlvbnNEYXRhQnVpbGRlciwKICAgICAgdGhpcy5faW1wYWN0VHJhbnNmb3JtZXIsCiAgICAgIHRoaXMuX2Nsb3N1cmVNb2RlbHMsCiAgICAgIHRoaXMuX2ltcGFjdENhY2hlLAogICAgICB0aGlzLl9maWVsZEFuYWx5c2lzLAogICAgICB0aGlzLl9tb2R1bGFyU3RyYXRlZ3ksCiAgICAgIHRoaXMuX2lyQW5ub3RhdGlvbkRhdGEpCiAgICAgIDogX25hdGl2ZU1lbWJlclJlc29sdmVyID0gbmV3IEtlcm5lbE5hdGl2ZU1lbWJlclJlc29sdmVyKAogICAgICAgICAgICBfZWxlbWVudE1hcCwgbmF0aXZlQmFzaWNEYXRhLCBuYXRpdmVEYXRhQnVpbGRlcik7CgogIEBvdmVycmlkZQogIFdvcmtJdGVtIGNyZWF0ZVdvcmtJdGVtKE1lbWJlckVudGl0eSBlbnRpdHkpIHsKICAgIHJldHVybiBuZXcgS2VybmVsV29ya0l0ZW0oCiAgICAgICAgX2NvbXBpbGVyVGFzaywKICAgICAgICBfZWxlbWVudE1hcCwKICAgICAgICBfaW1wYWN0VHJhbnNmb3JtZXIsCiAgICAgICAgX25hdGl2ZU1lbWJlclJlc29sdmVyLAogICAgICAgIF9hbm5vdGF0aW9uc0RhdGFCdWlsZGVyLAogICAgICAgIGVudGl0eSwKICAgICAgICBfY2xvc3VyZU1vZGVscywKICAgICAgICBfaW1wYWN0Q2FjaGUsCiAgICAgICAgX2ZpZWxkQW5hbHlzaXMsCiAgICAgICAgX21vZHVsYXJTdHJhdGVneSwKICAgICAgICBfaXJBbm5vdGF0aW9uRGF0YSk7CiAgfQp9CgpjbGFzcyBLZXJuZWxXb3JrSXRlbSBpbXBsZW1lbnRzIFdvcmtJdGVtIHsKICBmaW5hbCBDb21waWxlclRhc2sgX2NvbXBpbGVyVGFzazsKICBmaW5hbCBLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIF9lbGVtZW50TWFwOwogIGZpbmFsIEltcGFjdFRyYW5zZm9ybWVyIF9pbXBhY3RUcmFuc2Zvcm1lcjsKICBmaW5hbCBOYXRpdmVNZW1iZXJSZXNvbHZlciBfbmF0aXZlTWVtYmVyUmVzb2x2ZXI7CiAgZmluYWwgQW5ub3RhdGlvbnNEYXRhQnVpbGRlciBfYW5ub3RhdGlvbnNEYXRhQnVpbGRlcjsKICBAb3ZlcnJpZGUKICBmaW5hbCBNZW1iZXJFbnRpdHkgZWxlbWVudDsKICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBDbG9zdXJlU2NvcGVNb2RlbD4gX2Nsb3N1cmVNb2RlbHM7CiAgZmluYWwgTWFwPEVudGl0eSwgV29ybGRJbXBhY3Q+IF9pbXBhY3RDYWNoZTsKICBmaW5hbCBLRmllbGRBbmFseXNpcyBfZmllbGRBbmFseXNpczsKICBmaW5hbCBNb2R1bGFyU3RyYXRlZ3kgX21vZHVsYXJTdHJhdGVneTsKICBmaW5hbCBJckFubm90YXRpb25EYXRhIF9pckFubm90YXRpb25EYXRhOwoKICBLZXJuZWxXb3JrSXRlbSgKICAgICAgdGhpcy5fY29tcGlsZXJUYXNrLAogICAgICB0aGlzLl9lbGVtZW50TWFwLAogICAgICB0aGlzLl9pbXBhY3RUcmFuc2Zvcm1lciwKICAgICAgdGhpcy5fbmF0aXZlTWVtYmVyUmVzb2x2ZXIsCiAgICAgIHRoaXMuX2Fubm90YXRpb25zRGF0YUJ1aWxkZXIsCiAgICAgIHRoaXMuZWxlbWVudCwKICAgICAgdGhpcy5fY2xvc3VyZU1vZGVscywKICAgICAgdGhpcy5faW1wYWN0Q2FjaGUsCiAgICAgIHRoaXMuX2ZpZWxkQW5hbHlzaXMsCiAgICAgIHRoaXMuX21vZHVsYXJTdHJhdGVneSwKICAgICAgdGhpcy5faXJBbm5vdGF0aW9uRGF0YSk7CgogIEBvdmVycmlkZQogIFdvcmxkSW1wYWN0IHJ1bigpIHsKICAgIHJldHVybiBfY29tcGlsZXJUYXNrLm1lYXN1cmUoKCkgewogICAgICBpci5NZW1iZXIgbm9kZSA9IF9lbGVtZW50TWFwLmdldE1lbWJlck5vZGUoZWxlbWVudCk7CiAgICAgIF9uYXRpdmVNZW1iZXJSZXNvbHZlci5yZXNvbHZlTmF0aXZlTWVtYmVyKG5vZGUsIF9pckFubm90YXRpb25EYXRhKTsKCiAgICAgIExpc3Q8UHJhZ21hQW5ub3RhdGlvbkRhdGE+IHByYWdtYUFubm90YXRpb25EYXRhID0KICAgICAgICAgIF9tb2R1bGFyU3RyYXRlZ3kuZ2V0UHJhZ21hQW5ub3RhdGlvbkRhdGEobm9kZSk7CgogICAgICBFbnVtU2V0PFByYWdtYUFubm90YXRpb24+IGFubm90YXRpb25zID0gcHJvY2Vzc01lbWJlckFubm90YXRpb25zKAogICAgICAgICAgX2VsZW1lbnRNYXAub3B0aW9ucywKICAgICAgICAgIF9lbGVtZW50TWFwLnJlcG9ydGVyLAogICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0TWVtYmVyTm9kZShlbGVtZW50KSwKICAgICAgICAgIHByYWdtYUFubm90YXRpb25EYXRhKTsKICAgICAgX2Fubm90YXRpb25zRGF0YUJ1aWxkZXIucmVnaXN0ZXJQcmFnbWFBbm5vdGF0aW9ucyhlbGVtZW50LCBhbm5vdGF0aW9ucyk7CgogICAgICBNb2R1bGFyTWVtYmVyRGF0YSBtb2R1bGFyTWVtYmVyRGF0YSA9CiAgICAgICAgICBfbW9kdWxhclN0cmF0ZWd5LmdldE1vZHVsYXJNZW1iZXJEYXRhKG5vZGUsIGFubm90YXRpb25zKTsKICAgICAgU2NvcGVNb2RlbCBzY29wZU1vZGVsID0gbW9kdWxhck1lbWJlckRhdGEuc2NvcGVNb2RlbDsKICAgICAgaWYgKHNjb3BlTW9kZWwuY2xvc3VyZVNjb3BlTW9kZWwgIT0gbnVsbCkgewogICAgICAgIF9jbG9zdXJlTW9kZWxzW2VsZW1lbnRdID0gc2NvcGVNb2RlbC5jbG9zdXJlU2NvcGVNb2RlbDsKICAgICAgfQogICAgICBpZiAoZWxlbWVudC5pc0ZpZWxkICYmICFlbGVtZW50LmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgICBfZmllbGRBbmFseXNpcy5yZWdpc3RlclN0YXRpY0ZpZWxkKAogICAgICAgICAgICBlbGVtZW50LCBzY29wZU1vZGVsLmluaXRpYWxpemVyQ29tcGxleGl0eSk7CiAgICAgIH0KICAgICAgSW1wYWN0QnVpbGRlckRhdGEgaW1wYWN0QnVpbGRlckRhdGEgPSBtb2R1bGFyTWVtYmVyRGF0YS5pbXBhY3RCdWlsZGVyRGF0YTsKICAgICAgcmV0dXJuIF9jb21waWxlclRhc2subWVhc3VyZVN1YnRhc2soJ3dvcmxkSW1wYWN0JywgKCkgewogICAgICAgIFJlc29sdXRpb25JbXBhY3QgaW1wYWN0ID0gX2VsZW1lbnRNYXAuY29tcHV0ZVdvcmxkSW1wYWN0KAogICAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgICBzY29wZU1vZGVsLnZhcmlhYmxlU2NvcGVNb2RlbCwKICAgICAgICAgICAgbmV3IFNldDxQcmFnbWFBbm5vdGF0aW9uPi5mcm9tKAogICAgICAgICAgICAgICAgYW5ub3RhdGlvbnMuaXRlcmFibGUoUHJhZ21hQW5ub3RhdGlvbi52YWx1ZXMpKSwKICAgICAgICAgICAgaW1wYWN0QnVpbGRlckRhdGE6IGltcGFjdEJ1aWxkZXJEYXRhKTsKICAgICAgICBXb3JsZEltcGFjdCB3b3JsZEltcGFjdCA9CiAgICAgICAgICAgIF9pbXBhY3RUcmFuc2Zvcm1lci50cmFuc2Zvcm1SZXNvbHV0aW9uSW1wYWN0KGltcGFjdCk7CiAgICAgICAgaWYgKF9pbXBhY3RDYWNoZSAhPSBudWxsKSB7CiAgICAgICAgICBfaW1wYWN0Q2FjaGVbZWxlbWVudF0gPSB3b3JsZEltcGFjdDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHdvcmxkSW1wYWN0OwogICAgICB9KTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0tlcm5lbFdvcmtJdGVtKCRlbGVtZW50KSc7Cn0KCi8vLyBJZiBgdHJ1ZWAga2VybmVsIGltcGFjdHMgYXJlIGNvbXB1dGVkIGFzIFtJbXBhY3REYXRhXSBkaXJlY3RseSBvbiBrZXJuZWwKLy8vIGFuZCBjb252ZXJ0ZWQgdG8gdGhlIEsgbW9kZWwgYWZ0ZXJ3YXJkcy4gVGhpcyBpcyBhIHByZS1zdGVwIHRvIG1vZHVsYXJpemluZwovLy8gdGhlIHdvcmxkIGltcGFjdCBjb21wdXRhdGlvbi4KYm9vbCB1c2VJbXBhY3REYXRhRm9yVGVzdGluZyA9IGZhbHNlOwoKY2xhc3MgS2VybmVsTW9kdWxhclN0cmF0ZWd5IGV4dGVuZHMgTW9kdWxhclN0cmF0ZWd5IHsKICBmaW5hbCBDb21waWxlclRhc2sgX2NvbXBpbGVyVGFzazsKICBmaW5hbCBLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIF9lbGVtZW50TWFwOwoKICBLZXJuZWxNb2R1bGFyU3RyYXRlZ3kodGhpcy5fY29tcGlsZXJUYXNrLCB0aGlzLl9lbGVtZW50TWFwKTsKCiAgQG92ZXJyaWRlCiAgTGlzdDxQcmFnbWFBbm5vdGF0aW9uRGF0YT4gZ2V0UHJhZ21hQW5ub3RhdGlvbkRhdGEoaXIuTWVtYmVyIG5vZGUpIHsKICAgIGlmIChfZWxlbWVudE1hcC5vcHRpb25zLnVzZUNGRUNvbnN0YW50cykgewogICAgICByZXR1cm4gY29tcHV0ZVByYWdtYUFubm90YXRpb25EYXRhRnJvbUlyKG5vZGUpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGNvbXB1dGVQcmFnbWFBbm5vdGF0aW9uRGF0YShfZWxlbWVudE1hcC5jb21tb25FbGVtZW50cywKICAgICAgICAgIF9lbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudCwgX2VsZW1lbnRNYXAuZ2V0TWVtYmVyKG5vZGUpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIE1vZHVsYXJNZW1iZXJEYXRhIGdldE1vZHVsYXJNZW1iZXJEYXRhKAogICAgICBpci5NZW1iZXIgbm9kZSwgRW51bVNldDxQcmFnbWFBbm5vdGF0aW9uPiBhbm5vdGF0aW9ucykgewogICAgU2NvcGVNb2RlbCBzY29wZU1vZGVsID0gX2NvbXBpbGVyVGFzay5tZWFzdXJlU3VidGFzaygnY2xvc3VyZXMnLAogICAgICAgICgpID0+IG5ldyBTY29wZU1vZGVsLmZyb20obm9kZSwgX2VsZW1lbnRNYXAuY29uc3RhbnRFdmFsdWF0b3IpKTsKICAgIEltcGFjdEJ1aWxkZXJEYXRhIGltcGFjdEJ1aWxkZXJEYXRhOwogICAgaWYgKHVzZUltcGFjdERhdGFGb3JUZXN0aW5nKSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEFsd2F5cyBjcmVhdGUgYW5kIHVzZSB0aGUgW0ltcGFjdEJ1aWxkZXJEYXRhXS4KICAgICAgLy8gQ3VycmVudGx5IGl0IGlzIGEgYml0IGhhbGYtYmFrZWQgc2luY2Ugd2UgY2Fubm90IGNvbXB1dGUgZGF0YSB0aGF0CiAgICAgIC8vIGRlcGVuZCBvbiBtZXRhZGF0YSwgc28gdGhlc2UgcGFydHMgb2YgdGhlIGltcGFjdCBkYXRhIG5lZWQgdG8gYmUKICAgICAgLy8gY29tcHV0ZWQgZHVyaW5nIGNvbnZlcnNpb24gdG8gW1Jlc29sdXRpb25JbXBhY3RdLgogICAgICBpbXBhY3RCdWlsZGVyRGF0YSA9IF9jb21waWxlclRhc2subWVhc3VyZVN1YnRhc2soJ3dvcmxkSW1wYWN0JywgKCkgewogICAgICAgIEltcGFjdEJ1aWxkZXIgYnVpbGRlciA9IG5ldyBJbXBhY3RCdWlsZGVyKF9lbGVtZW50TWFwLnR5cGVFbnZpcm9ubWVudCwKICAgICAgICAgICAgX2VsZW1lbnRNYXAuY2xhc3NIaWVyYXJjaHksIHNjb3BlTW9kZWwudmFyaWFibGVTY29wZU1vZGVsLAogICAgICAgICAgICB1c2VBc3NlcnRzOiBfZWxlbWVudE1hcC5vcHRpb25zLmVuYWJsZVVzZXJBc3NlcnRpb25zLAogICAgICAgICAgICBpbmZlckVmZmVjdGl2ZWx5RmluYWxWYXJpYWJsZVR5cGVzOgogICAgICAgICAgICAgICAgIWFubm90YXRpb25zLmNvbnRhaW5zKFByYWdtYUFubm90YXRpb24uZGlzYWJsZUZpbmFsKSk7CiAgICAgICAgcmV0dXJuIGJ1aWxkZXIuY29tcHV0ZUltcGFjdChub2RlKTsKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gbmV3IE1vZHVsYXJNZW1iZXJEYXRhKHNjb3BlTW9kZWwsIGltcGFjdEJ1aWxkZXJEYXRhKTsKICB9Cn0KgdgATk48ASoBKAEZJSkkHx4iGzYkGiUkITQcHSspLCs2QDAuKTUxNig/IhorNCkoHx0bIBYBTiA4PCgkHB4mNAEyAUEBJCYBLEEBLAE2AUIoRgEhATwnAQwtATxCIxJLTj45RgQBRSEBQAEMHU5PRkFLATQsP1AEATcmKjo3IzpCURYOQBQhTi84CAQBDC8uTx1PPhocGBtJRU4cGBkfL0QyQTQmT0wwP0U5HBgRGSMeKxgfGjQoQiMOGygeIBwVHSQiIi8nHCgoFhggHxwdHyQiHBwnIiQtIxsjGxgdHyQfGyIcHiAaBAEMGyk2Ni0EAQwoJEsOJCo+Bh0EAQw8NiQ+QwY6QC5FNUAIQSM1CAYEAUgBRQEMTwEMQwE0AQxAOQEMQSwEAT1IMT8EAUMgAQxNQQQCATkkLC40OD0vJyosARkaGCcrJB8bGRsdHkA+AQwxHxcVHB8hEBgWGBocBAIBKyQsLjQ4DB49LycqLAESGhgfIiQUGxkbHR8BDBYmO0oBODoBSB8gLiFPASxEPDJACDosOAhRPkIVKyxAMyJCJC8KHAoIBAEMMwIBTVAiJgE2JCwBPwEMRy82DUVIBgQBDCo/RUkpI01MSjtLT0dCMEcsCgZBBAIBMHBhY2thZ2U6Y29tcGlsZXIvc3JjL2tlcm5lbC9rZXJuZWxfc3RyYXRlZ3kuZGFydDBzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9rZXJuZWwvbG9hZGVyLmRhcnScSC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMubGlicmFyeV9sb2FkZXI7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnOwoKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL3V0aWxzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9iaW5hcnkvYXN0X2Zyb21fYmluYXJ5LmRhcnQnIHNob3cgQmluYXJ5QnVpbGRlcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9iaW5hcnkvYXN0X3RvX2JpbmFyeS5kYXJ0JyBzaG93IEJpbmFyeVByaW50ZXI7CgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JyBhcyBmZTsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9rZXJuZWwuZGFydCcgaGlkZSBMaWJyYXJ5RGVwZW5kZW5jeSwgQ29tYmluYXRvcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90YXJnZXQvdGFyZ2V0cy5kYXJ0JyBoaWRlIERpYWdub3N0aWNSZXBvcnRlcjsKCmltcG9ydCAnLi4vLi4vY29tcGlsZXJfbmV3LmRhcnQnIGFzIGFwaTsKaW1wb3J0ICcuLi9jb21tb24vdGFza3MuZGFydCcgc2hvdyBDb21waWxlclRhc2ssIE1lYXN1cmVyOwppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3V0aWwvc2lua19hZGFwdGVyLmRhcnQnOwoKaW1wb3J0ICdmcm9udF9lbmRfYWRhcHRlci5kYXJ0JzsKaW1wb3J0ICdkYXJ0MmpzX3RhcmdldC5kYXJ0JyBzaG93IERhcnQyanNUYXJnZXQ7CgovLy8gQSB0YXNrIHRoYXQgcHJvZHVjZXMgdGhlIGtlcm5lbCBJUiByZXByZXNlbnRhdGlvbiBvZiB0aGUgYXBwbGljYXRpb24uCi8vLwovLy8gSXQgc3VwcG9ydHMgbG9hZGluZyBib3RoIC5kYXJ0IHNvdXJjZSBmaWxlcyBvciBwcmUtY29tcGlsZWQgLmRpbGwgZmlsZXMuCi8vLyBXaGVuIGdpdmVuIC5kYXJ0IHNvdXJjZSBmaWxlcywgaXQgaW52b2tlcyB0aGUgY29tbW9uIGZyb250LWVuZCAoQ0ZFKQovLy8gdG8gcHJvZHVjZSB0aGUgY29ycmVzcG9uZGluZyBrZXJuZWwgSVIgcmVwcmVzZW50YXRpb24uCmNsYXNzIEtlcm5lbExvYWRlclRhc2sgZXh0ZW5kcyBDb21waWxlclRhc2sgewogIGZpbmFsIERpYWdub3N0aWNSZXBvcnRlciBfcmVwb3J0ZXI7CgogIGZpbmFsIGFwaS5Db21waWxlcklucHV0IF9jb21waWxlcklucHV0OwogIGZpbmFsIGFwaS5Db21waWxlck91dHB1dCBfY29tcGlsZXJPdXRwdXQ7CgogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBfb3B0aW9uczsKCiAgLy8vIFNoYXJlZCBzdGF0ZSBiZXR3ZWVuIGNvbXBpbGF0aW9ucy4KICBmZS5Jbml0aWFsaXplZENvbXBpbGVyU3RhdGUgaW5pdGlhbGl6ZWRDb21waWxlclN0YXRlOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhpcyB3aGVuICMzNDk0MiBpcyBmaXhlZC4KICAvLy8gRm9yY2UgaW4tbWVtb3J5IHNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uIG9mIHRoZSBsb2FkZWQgY29tcG9uZW50LgogIC8vLwogIC8vLyBUaGlzIGlzIHVzZWQgZm9yIHRlc3RpbmcuCiAgYm9vbCBmb3JjZVNlcmlhbGl6YXRpb24gPSBmYWxzZTsKCiAgS2VybmVsTG9hZGVyVGFzayh0aGlzLl9vcHRpb25zLCB0aGlzLl9jb21waWxlcklucHV0LCB0aGlzLl9jb21waWxlck91dHB1dCwKICAgICAgdGhpcy5fcmVwb3J0ZXIsIE1lYXN1cmVyIG1lYXN1cmVyKQogICAgICA6IGluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZSA9IF9vcHRpb25zLmtlcm5lbEluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZSwKICAgICAgICBzdXBlcihtZWFzdXJlcik7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgbmFtZSA9PiAna2VybmVsIGxvYWRlcic7CgogIC8vLyBMb2FkcyBhbiBlbnRpcmUgS2VybmVsIFtDb21wb25lbnRdIGZyb20gYSBmaWxlIG9uIGRpc2suCiAgRnV0dXJlPEtlcm5lbFJlc3VsdD4gbG9hZChVcmkgcmVzb2x2ZWRVcmkpIHsKICAgIHJldHVybiBtZWFzdXJlKCgpIGFzeW5jIHsKICAgICAgU3RyaW5nIHRhcmdldE5hbWUgPQogICAgICAgICAgX29wdGlvbnMuY29tcGlsZUZvclNlcnZlciA/ICJkYXJ0MmpzX3NlcnZlciIgOiAiZGFydDJqcyI7CiAgICAgIFN0cmluZyBwbGF0Zm9ybSA9ICcke3RhcmdldE5hbWV9X3BsYXRmb3JtLmRpbGwnOwogICAgICB2YXIgaXNEaWxsID0gcmVzb2x2ZWRVcmkucGF0aC5lbmRzV2l0aCgnLmRpbGwnKTsKICAgICAgaXIuQ29tcG9uZW50IGNvbXBvbmVudDsKICAgICAgaWYgKGlzRGlsbCkgewogICAgICAgIGNvbXBvbmVudCA9IG5ldyBpci5Db21wb25lbnQoKTsKICAgICAgICBGdXR1cmU8dm9pZD4gcmVhZChVcmkgdXJpKSBhc3luYyB7CiAgICAgICAgICBhcGkuSW5wdXQgaW5wdXQgPSBhd2FpdCBfY29tcGlsZXJJbnB1dC5yZWFkRnJvbVVyaSh1cmksCiAgICAgICAgICAgICAgaW5wdXRLaW5kOiBhcGkuSW5wdXRLaW5kLmJpbmFyeSk7CiAgICAgICAgICBuZXcgQmluYXJ5QnVpbGRlcihpbnB1dC5kYXRhKS5yZWFkQ29tcG9uZW50KGNvbXBvbmVudCk7CiAgICAgICAgfQoKICAgICAgICBhd2FpdCByZWFkKHJlc29sdmVkVXJpKTsKICAgICAgICBpZiAoX29wdGlvbnMuZGlsbERlcGVuZGVuY2llcyAhPSBudWxsKSB7CiAgICAgICAgICAvLyBNb2R1bGFyIGNvbXBpbGVzIGRvIG5vdCBpbmNsdWRlIHRoZSBwbGF0Zm9ybSBvbiB0aGUgaW5wdXQgZGlsbAogICAgICAgICAgLy8gZWl0aGVyLgogICAgICAgICAgaWYgKF9vcHRpb25zLnBsYXRmb3JtQmluYXJpZXMgIT0gbnVsbCkgewogICAgICAgICAgICBhd2FpdCByZWFkKF9vcHRpb25zLnBsYXRmb3JtQmluYXJpZXMucmVzb2x2ZShwbGF0Zm9ybSkpOwogICAgICAgICAgfQogICAgICAgICAgZm9yIChVcmkgZGVwZW5kZW5jeSBpbiBfb3B0aW9ucy5kaWxsRGVwZW5kZW5jaWVzKSB7CiAgICAgICAgICAgIGF3YWl0IHJlYWQoZGVwZW5kZW5jeSk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBUaGlzIGlzIG5vdCBleHBlY3RlZCB0byBiZSBudWxsIHdoZW4gY3JlYXRpbmcgYSB3aG9sZS1wcm9ncmFtIC5kaWxsCiAgICAgICAgLy8gZmlsZSwgYnV0IG5lZWRzIHRvIGJlIGNoZWNrZWQgZm9yIG1vZHVsYXIgaW5wdXRzLgogICAgICAgIGlmIChjb21wb25lbnQubWFpbk1ldGhvZCA9PSBudWxsKSB7CiAgICAgICAgICAvLyBUT0RPKHNpZ211bmQpOiBtb3ZlIHRoaXMgc28gdGhhdCB3ZSB1c2UgdGhlIHNhbWUgZXJyb3IgdGVtcGxhdGUKICAgICAgICAgIC8vIGZyb20gdGhlIENGRS4KICAgICAgICAgIF9yZXBvcnRlci5yZXBvcnRFcnJvcihfcmVwb3J0ZXIuY3JlYXRlTWVzc2FnZShOT19MT0NBVElPTl9TUEFOTkFCTEUsCiAgICAgICAgICAgICAgTWVzc2FnZUtpbmQuR0VORVJJQywgeyd0ZXh0JzogIk5vICdtYWluJyBtZXRob2QgZm91bmQuIn0pKTsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBMaXN0PFVyaT4gZGVwZW5kZW5jaWVzID0gW107CiAgICAgICAgaWYgKF9vcHRpb25zLnBsYXRmb3JtQmluYXJpZXMgIT0gbnVsbCkgewogICAgICAgICAgZGVwZW5kZW5jaWVzLmFkZChfb3B0aW9ucy5wbGF0Zm9ybUJpbmFyaWVzLnJlc29sdmUocGxhdGZvcm0pKTsKICAgICAgICB9CiAgICAgICAgaWYgKF9vcHRpb25zLmRpbGxEZXBlbmRlbmNpZXMgIT0gbnVsbCkgewogICAgICAgICAgZGVwZW5kZW5jaWVzLmFkZEFsbChfb3B0aW9ucy5kaWxsRGVwZW5kZW5jaWVzKTsKICAgICAgICB9CiAgICAgICAgaW5pdGlhbGl6ZWRDb21waWxlclN0YXRlID0gZmUuaW5pdGlhbGl6ZUNvbXBpbGVyKAogICAgICAgICAgICBpbml0aWFsaXplZENvbXBpbGVyU3RhdGUsCiAgICAgICAgICAgIG5ldyBEYXJ0MmpzVGFyZ2V0KHRhcmdldE5hbWUsIG5ldyBUYXJnZXRGbGFncygpKSwKICAgICAgICAgICAgX29wdGlvbnMubGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaSwKICAgICAgICAgICAgZGVwZW5kZW5jaWVzLAogICAgICAgICAgICBfb3B0aW9ucy5wYWNrYWdlQ29uZmlnLAogICAgICAgICAgICBleHBlcmltZW50YWxGbGFnczogX29wdGlvbnMubGFuZ3VhZ2VFeHBlcmltZW50cyk7CiAgICAgICAgY29tcG9uZW50ID0gYXdhaXQgZmUuY29tcGlsZSgKICAgICAgICAgICAgaW5pdGlhbGl6ZWRDb21waWxlclN0YXRlLAogICAgICAgICAgICBmYWxzZSwKICAgICAgICAgICAgbmV3IENvbXBpbGVyRmlsZVN5c3RlbShfY29tcGlsZXJJbnB1dCksCiAgICAgICAgICAgIChlKSA9PiByZXBvcnRGcm9udEVuZE1lc3NhZ2UoX3JlcG9ydGVyLCBlKSwKICAgICAgICAgICAgcmVzb2x2ZWRVcmkpOwogICAgICB9CiAgICAgIGlmIChjb21wb25lbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CgogICAgICBpZiAoX29wdGlvbnMuY2ZlT25seSkgewogICAgICAgIG1lYXN1cmVTdWJ0YXNrKCdzZXJpYWxpemUgZGlsbCcsICgpIHsKICAgICAgICAgIF9yZXBvcnRlci5sb2coJ1dyaXRpbmcgZGlsbCB0byAke19vcHRpb25zLm91dHB1dFVyaX0nKTsKICAgICAgICAgIGFwaS5CaW5hcnlPdXRwdXRTaW5rIGRpbGxPdXRwdXQgPQogICAgICAgICAgICAgIF9jb21waWxlck91dHB1dC5jcmVhdGVCaW5hcnlTaW5rKF9vcHRpb25zLm91dHB1dFVyaSk7CiAgICAgICAgICBCaW5hcnlPdXRwdXRTaW5rQWRhcHRlciBpclNpbmsgPQogICAgICAgICAgICAgIG5ldyBCaW5hcnlPdXRwdXRTaW5rQWRhcHRlcihkaWxsT3V0cHV0KTsKICAgICAgICAgIEJpbmFyeVByaW50ZXIgcHJpbnRlciA9IG5ldyBCaW5hcnlQcmludGVyKGlyU2luayk7CiAgICAgICAgICBwcmludGVyLndyaXRlQ29tcG9uZW50RmlsZShjb21wb25lbnQpOwogICAgICAgICAgaXJTaW5rLmNsb3NlKCk7CiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIGlmIChmb3JjZVNlcmlhbGl6YXRpb24pIHsKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhpcyB3aGVuICMzNDk0MiBpcyBmaXhlZC4KICAgICAgICBMaXN0PGludD4gZGF0YSA9IHNlcmlhbGl6ZUNvbXBvbmVudChjb21wb25lbnQpOwogICAgICAgIGNvbXBvbmVudCA9IG5ldyBpci5Db21wb25lbnQoKTsKICAgICAgICBuZXcgQmluYXJ5QnVpbGRlcihkYXRhKS5yZWFkQ29tcG9uZW50KGNvbXBvbmVudCk7CiAgICAgIH0KICAgICAgcmV0dXJuIF90b1Jlc3VsdChjb21wb25lbnQpOwogICAgfSk7CiAgfQoKICBLZXJuZWxSZXN1bHQgX3RvUmVzdWx0KGlyLkNvbXBvbmVudCBjb21wb25lbnQpIHsKICAgIFVyaSByb290TGlicmFyeVVyaSA9IG51bGw7CiAgICBJdGVyYWJsZTxpci5MaWJyYXJ5PiBsaWJyYXJpZXMgPSBjb21wb25lbnQubGlicmFyaWVzOwogICAgaWYgKGNvbXBvbmVudC5tYWluTWV0aG9kICE9IG51bGwpIHsKICAgICAgdmFyIHJvb3QgPSBjb21wb25lbnQubWFpbk1ldGhvZC5lbmNsb3NpbmdMaWJyYXJ5OwogICAgICByb290TGlicmFyeVVyaSA9IHJvb3QuaW1wb3J0VXJpOwoKICAgICAgLy8gRmlsdGVyIHVucmVhY2hhYmxlIGxpYnJhcmllczogW0NvbXBvbmVudF0gd2FzIGJ1aWx0IGJ5IGxpbmtpbmcgaW4gdGhlCiAgICAgIC8vIGVudGlyZSBTREsgbGlicmFyaWVzLCBub3QgYWxsIG9mIHRoZW0gYXJlIHVzZWQuIFdlIGluY2x1ZGUgYW55dGhpbmcKICAgICAgLy8gdGhhdCBpcyByZWFjaGFibGUgZnJvbSBgbWFpbmAuIE5vdGUgdGhhdCBhbGwgaW50ZXJuYWwgbGlicmFyaWVzIHRoYXQKICAgICAgLy8gdGhlIGNvbXBpbGVyIHJlbGllcyBvbiBhcmUgcmVhY2hhYmxlIGZyb20gYGRhcnQ6Y29yZWAuCiAgICAgIHZhciBzZWVuID0gbmV3IFNldDxMaWJyYXJ5PigpOwogICAgICBzZWFyY2goaXIuTGlicmFyeSBjdXJyZW50KSB7CiAgICAgICAgaWYgKCFzZWVuLmFkZChjdXJyZW50KSkgcmV0dXJuOwogICAgICAgIGZvciAoaXIuTGlicmFyeURlcGVuZGVuY3kgZGVwIGluIGN1cnJlbnQuZGVwZW5kZW5jaWVzKSB7CiAgICAgICAgICBzZWFyY2goZGVwLnRhcmdldExpYnJhcnkpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgc2VhcmNoKHJvb3QpOwoKICAgICAgLy8gTGlicmFyaWVzIGRlcGVuZGVuY2llcyBkbyBub3Qgc2hvdyBpbXBsaWNpdCBpbXBvcnRzIHRvIGBkYXJ0OmNvcmVgLgogICAgICB2YXIgZGFydENvcmUgPSBjb21wb25lbnQubGlicmFyaWVzLmZpcnN0V2hlcmUoKGxpYikgewogICAgICAgIHJldHVybiBsaWIuaW1wb3J0VXJpLnNjaGVtZSA9PSAnZGFydCcgJiYgbGliLmltcG9ydFVyaS5wYXRoID09ICdjb3JlJzsKICAgICAgfSk7CiAgICAgIHNlYXJjaChkYXJ0Q29yZSk7CgogICAgICBsaWJyYXJpZXMgPSBsaWJyYXJpZXMud2hlcmUoc2Vlbi5jb250YWlucyk7CiAgICB9CiAgICByZXR1cm4gbmV3IEtlcm5lbFJlc3VsdChjb21wb25lbnQsIHJvb3RMaWJyYXJ5VXJpLAogICAgICAgIGxpYnJhcmllcy5tYXAoKGxpYikgPT4gbGliLmltcG9ydFVyaSkudG9MaXN0KCkpOwogIH0KfQoKLy8vIFJlc3VsdCBvZiBpbnZva2luZyB0aGUgQ0ZFIHRvIHByb2R1Y2UgdGhlIGtlcm5lbCBJUi4KY2xhc3MgS2VybmVsUmVzdWx0IHsKICBmaW5hbCBpci5Db21wb25lbnQgY29tcG9uZW50OwoKICAvLy8gVGhlIFtVcmldIG9mIHRoZSByb290IGxpYnJhcnkgY29udGFpbmluZyBtYWluLgogIGZpbmFsIFVyaSByb290TGlicmFyeVVyaTsKCiAgLy8vIFJldHVybnMgdGhlIFtVcmldcyBvZiBhbGwgbGlicmFyaWVzIHRoYXQgaGF2ZSBiZWVuIGxvYWRlZCB0aGF0IGFyZQogIC8vLyByZWFjaGFibGUgZnJvbSB0aGUgW3Jvb3RMaWJyYXJ5VXJpXS4KICAvLy8KICAvLy8gTm90ZSB0aGF0IFtjb21wb25lbnRdIG1heSBjb250YWluIHNvbWUgbGlicmFyaWVzIHRoYXQgYXJlIGV4Y2x1ZGVkIGhlcmUuCiAgZmluYWwgSXRlcmFibGU8VXJpPiBsaWJyYXJpZXM7CgogIEtlcm5lbFJlc3VsdCh0aGlzLmNvbXBvbmVudCwgdGhpcy5yb290TGlicmFyeVVyaSwgdGhpcy5saWJyYXJpZXMpIHsKICAgIGFzc2VydChyb290TGlicmFyeVVyaSAhPSBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdyb290PSRyb290TGlicmFyeVVyaSxsaWJyYXJpZXM9JHtsaWJyYXJpZXN9JzsKfQqAxABOTjwBIAEVATgoSEYBQEhFASk7GRokASExAUoETUk7LiYBKiwBIgEpOAE8TQYgIwFNKUwZAQwmAT4vHhpENzceFCgrQjBCCgEhMUwVM0UMPiQMCgFPPSxNG09KFwoPJTFJCjE6CjomPjAaJD4mJhM0OBoIKgEeLkIsRCs3PTEaDAgBIEI4KDoIIwgEATMfOig4JwFPTU5AJSMoQSUKCAEUAU08TwoYATIGNzkEAgE5FSABNRwBSSsGTyEBRiQEAQxGAgEncGFja2FnZTpjb21waWxlci9zcmMva2VybmVsL2xvYWRlci5kYXJ0NXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NlcmlhbGl6YXRpb24vdGFzay5kYXJ0nfIvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OmFzeW5jJzsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvYmluYXJ5L2FzdF9mcm9tX2JpbmFyeS5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9iaW5hcnkvYXN0X3RvX2JpbmFyeS5kYXJ0JyBhcyBpcjsKaW1wb3J0ICcuLi8uLi9jb21waWxlcl9uZXcuZGFydCcgYXMgYXBpOwppbXBvcnQgJy4uL2JhY2tlbmRfc3RyYXRlZ3kuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uL2NvZGVnZW4uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uL3Rhc2tzLmRhcnQnOwppbXBvcnQgJy4uL2RpYWdub3N0aWNzL2RpYWdub3N0aWNfbGlzdGVuZXIuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZW52aXJvbm1lbnQuZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvYmFja2VuZC5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2luZmVycmVkX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvanNfd29ybGQuZGFydCc7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi91dGlsL3NpbmtfYWRhcHRlci5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JzsKaW1wb3J0ICdzZXJpYWxpemF0aW9uLmRhcnQnOwoKdm9pZCBzZXJpYWxpemVHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cygKICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIERhdGFTaW5rIHNpbmspIHsKICBKc0Nsb3NlZFdvcmxkIGNsb3NlZFdvcmxkID0gcmVzdWx0cy5jbG9zZWRXb3JsZDsKICBJbmZlcnJlZERhdGEgaW5mZXJyZWREYXRhID0gcmVzdWx0cy5pbmZlcnJlZERhdGE7CiAgY2xvc2VkV29ybGQud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogIGluZmVycmVkRGF0YS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgcmVzdWx0cy53cml0ZVRvRGF0YVNpbmsoc2luaywgY2xvc2VkV29ybGQuZWxlbWVudE1hcCk7CiAgc2luay5jbG9zZSgpOwp9CgpHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBkZXNlcmlhbGl6ZUdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzKAogICAgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMsCiAgICBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIsCiAgICBFbnZpcm9ubWVudCBlbnZpcm9ubWVudCwKICAgIEFic3RyYWN0VmFsdWVTdHJhdGVneSBhYnN0cmFjdFZhbHVlU3RyYXRlZ3ksCiAgICBpci5Db21wb25lbnQgY29tcG9uZW50LAogICAgRGF0YVNvdXJjZSBzb3VyY2UpIHsKICBKc0Nsb3NlZFdvcmxkIG5ld0Nsb3NlZFdvcmxkID0gbmV3IEpzQ2xvc2VkV29ybGQucmVhZEZyb21EYXRhU291cmNlKAogICAgICBvcHRpb25zLCByZXBvcnRlciwgZW52aXJvbm1lbnQsIGFic3RyYWN0VmFsdWVTdHJhdGVneSwgY29tcG9uZW50LCBzb3VyY2UpOwogIEluZmVycmVkRGF0YSBuZXdJbmZlcnJlZERhdGEgPQogICAgICBuZXcgSW5mZXJyZWREYXRhLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIG5ld0Nsb3NlZFdvcmxkKTsKICByZXR1cm4gbmV3IEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgc291cmNlLCBuZXdDbG9zZWRXb3JsZC5lbGVtZW50TWFwLCBuZXdDbG9zZWRXb3JsZCwgbmV3SW5mZXJyZWREYXRhKTsKfQoKY2xhc3MgU2VyaWFsaXphdGlvblRhc2sgZXh0ZW5kcyBDb21waWxlclRhc2sgewogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBfb3B0aW9uczsKICBmaW5hbCBEaWFnbm9zdGljUmVwb3J0ZXIgX3JlcG9ydGVyOwogIGZpbmFsIGFwaS5Db21waWxlcklucHV0IF9wcm92aWRlcjsKICBmaW5hbCBhcGkuQ29tcGlsZXJPdXRwdXQgX291dHB1dFByb3ZpZGVyOwoKICBTZXJpYWxpemF0aW9uVGFzayh0aGlzLl9vcHRpb25zLCB0aGlzLl9yZXBvcnRlciwgdGhpcy5fcHJvdmlkZXIsCiAgICAgIHRoaXMuX291dHB1dFByb3ZpZGVyLCBNZWFzdXJlciBtZWFzdXJlcikKICAgICAgOiBzdXBlcihtZWFzdXJlcik7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgbmFtZSA9PiAnU2VyaWFsaXphdGlvbic7CgogIHZvaWQgc2VyaWFsaXplR2xvYmFsVHlwZUluZmVyZW5jZShHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzKSB7CiAgICBtZWFzdXJlU3VidGFzaygnc2VyaWFsaXplIGRpbGwnLCAoKSB7CiAgICAgIC8vIFRPRE8oc2lnbXVuZCk6IHJlbW92ZSBlbnRpcmVseTogd2Ugd2lsbCBkbyB0aGlzIGltbWVkaWF0ZWx5IGFzIHNvb24gYXMKICAgICAgLy8gd2UgZ2V0IHRoZSBjb21wb25lbnQgaW4gdGhlIGtlcm5lbC9sb2FkZXIuZGFydCB0YXNrIG9uY2Ugd2UgcmVmYWN0b3IKICAgICAgLy8gaG93IHdlIGFwcGx5IG91ciBtb2R1bGFyIGtlcm5lbCB0cmFuc2Zvcm1hdGlvbiBmb3Igc3VwZXIgbWl4aW4gY2FsbHMuCiAgICAgIF9yZXBvcnRlci5sb2coJ1dyaXRpbmcgZGlsbCB0byAke19vcHRpb25zLm91dHB1dFVyaX0nKTsKICAgICAgYXBpLkJpbmFyeU91dHB1dFNpbmsgZGlsbE91dHB1dCA9CiAgICAgICAgICBfb3V0cHV0UHJvdmlkZXIuY3JlYXRlQmluYXJ5U2luayhfb3B0aW9ucy5vdXRwdXRVcmkpOwogICAgICBKc0Nsb3NlZFdvcmxkIGNsb3NlZFdvcmxkID0gcmVzdWx0cy5jbG9zZWRXb3JsZDsKICAgICAgaXIuQ29tcG9uZW50IGNvbXBvbmVudCA9IGNsb3NlZFdvcmxkLmVsZW1lbnRNYXAucHJvZ3JhbUVudi5tYWluQ29tcG9uZW50OwogICAgICBCaW5hcnlPdXRwdXRTaW5rQWRhcHRlciBpclNpbmsgPSBuZXcgQmluYXJ5T3V0cHV0U2lua0FkYXB0ZXIoZGlsbE91dHB1dCk7CiAgICAgIGlyLkJpbmFyeVByaW50ZXIgcHJpbnRlciA9IG5ldyBpci5CaW5hcnlQcmludGVyKGlyU2luayk7CiAgICAgIHByaW50ZXIud3JpdGVDb21wb25lbnRGaWxlKGNvbXBvbmVudCk7CiAgICAgIGlyU2luay5jbG9zZSgpOwogICAgfSk7CgogICAgbWVhc3VyZVN1YnRhc2soJ3NlcmlhbGl6ZSBkYXRhJywgKCkgewogICAgICBfcmVwb3J0ZXIubG9nKCdXcml0aW5nIGRhdGEgdG8gJHtfb3B0aW9ucy53cml0ZURhdGFVcml9Jyk7CiAgICAgIGFwaS5CaW5hcnlPdXRwdXRTaW5rIGRhdGFPdXRwdXQgPQogICAgICAgICAgX291dHB1dFByb3ZpZGVyLmNyZWF0ZUJpbmFyeVNpbmsoX29wdGlvbnMud3JpdGVEYXRhVXJpKTsKICAgICAgRGF0YVNpbmsgc2luayA9IG5ldyBCaW5hcnlTaW5rKG5ldyBCaW5hcnlPdXRwdXRTaW5rQWRhcHRlcihkYXRhT3V0cHV0KSk7CiAgICAgIHNlcmlhbGl6ZUdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzKHJlc3VsdHMsIHNpbmspOwogICAgfSk7CiAgfQoKICBGdXR1cmU8R2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHM+IGRlc2VyaWFsaXplR2xvYmFsVHlwZUluZmVyZW5jZSgKICAgICAgRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsCiAgICAgIEFic3RyYWN0VmFsdWVTdHJhdGVneSBhYnN0cmFjdFZhbHVlU3RyYXRlZ3kpIGFzeW5jIHsKICAgIGlyLkNvbXBvbmVudCBjb21wb25lbnQgPQogICAgICAgIGF3YWl0IG1lYXN1cmVJb1N1YnRhc2soJ2Rlc2VyaWFsaXplIGRpbGwnLCAoKSBhc3luYyB7CiAgICAgIF9yZXBvcnRlci5sb2coJ1JlYWRpbmcgZGlsbCBmcm9tICR7X29wdGlvbnMuZW50cnlQb2ludH0nKTsKICAgICAgYXBpLklucHV0PExpc3Q8aW50Pj4gZGlsbElucHV0ID0gYXdhaXQgX3Byb3ZpZGVyCiAgICAgICAgICAucmVhZEZyb21VcmkoX29wdGlvbnMuZW50cnlQb2ludCwgaW5wdXRLaW5kOiBhcGkuSW5wdXRLaW5kLmJpbmFyeSk7CiAgICAgIGlyLkNvbXBvbmVudCBjb21wb25lbnQgPSBuZXcgaXIuQ29tcG9uZW50KCk7CiAgICAgIG5ldyBpci5CaW5hcnlCdWlsZGVyKGRpbGxJbnB1dC5kYXRhKS5yZWFkQ29tcG9uZW50KGNvbXBvbmVudCk7CiAgICAgIHJldHVybiBjb21wb25lbnQ7CiAgICB9KTsKCiAgICByZXR1cm4gYXdhaXQgbWVhc3VyZUlvU3VidGFzaygnZGVzZXJpYWxpemUgZGF0YScsICgpIGFzeW5jIHsKICAgICAgX3JlcG9ydGVyLmxvZygnUmVhZGluZyBkYXRhIGZyb20gJHtfb3B0aW9ucy5yZWFkRGF0YVVyaX0nKTsKICAgICAgYXBpLklucHV0PExpc3Q8aW50Pj4gZGF0YUlucHV0ID0gYXdhaXQgX3Byb3ZpZGVyCiAgICAgICAgICAucmVhZEZyb21VcmkoX29wdGlvbnMucmVhZERhdGFVcmksIGlucHV0S2luZDogYXBpLklucHV0S2luZC5iaW5hcnkpOwogICAgICBEYXRhU291cmNlIHNvdXJjZSA9IG5ldyBCaW5hcnlTb3VyY2VJbXBsKGRhdGFJbnB1dC5kYXRhKTsKICAgICAgcmV0dXJuIGRlc2VyaWFsaXplR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMoX29wdGlvbnMsIF9yZXBvcnRlciwKICAgICAgICAgIGVudmlyb25tZW50LCBhYnN0cmFjdFZhbHVlU3RyYXRlZ3ksIGNvbXBvbmVudCwgc291cmNlKTsKICAgIH0pOwogIH0KCiAgdm9pZCBzZXJpYWxpemVDb2RlZ2VuKAogICAgICBCYWNrZW5kU3RyYXRlZ3kgYmFja2VuZFN0cmF0ZWd5LCBDb2RlZ2VuUmVzdWx0cyBjb2RlZ2VuUmVzdWx0cykgewogICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgZ2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgPQogICAgICAgIGNvZGVnZW5SZXN1bHRzLmdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzOwogICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkID0gZ2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMuY2xvc2VkV29ybGQ7CiAgICBpbnQgc2hhcmQgPSBfb3B0aW9ucy5jb2RlZ2VuU2hhcmQ7CiAgICBpbnQgc2hhcmRzID0gX29wdGlvbnMuY29kZWdlblNoYXJkczsKICAgIE1hcDxNZW1iZXJFbnRpdHksIENvZGVnZW5SZXN1bHQ+IHJlc3VsdHMgPSB7fTsKICAgIGludCBpbmRleCA9IDA7CiAgICBFbnRpdHlXcml0ZXIgZW50aXR5V3JpdGVyID0KICAgICAgICBiYWNrZW5kU3RyYXRlZ3kuZm9yRWFjaENvZGVnZW5NZW1iZXIoKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgICAgaWYgKGluZGV4ICUgc2hhcmRzID09IHNoYXJkKSB7CiAgICAgICAgQ29kZWdlblJlc3VsdCBjb2RlZ2VuUmVzdWx0ID0gY29kZWdlblJlc3VsdHMuZ2V0Q29kZWdlblJlc3VsdHMobWVtYmVyKTsKICAgICAgICByZXN1bHRzW21lbWJlcl0gPSBjb2RlZ2VuUmVzdWx0OwogICAgICB9CiAgICAgIGluZGV4Kys7CiAgICB9KTsKICAgIG1lYXN1cmVTdWJ0YXNrKCdzZXJpYWxpemUgY29kZWdlbicsICgpIHsKICAgICAgVXJpIHVyaSA9IFVyaS5wYXJzZSgnJHtfb3B0aW9ucy53cml0ZUNvZGVnZW5Vcml9JHNoYXJkJyk7CiAgICAgIGFwaS5CaW5hcnlPdXRwdXRTaW5rIGRhdGFPdXRwdXQgPSBfb3V0cHV0UHJvdmlkZXIuY3JlYXRlQmluYXJ5U2luayh1cmkpOwogICAgICBEYXRhU2luayBzaW5rID0gbmV3IEJpbmFyeVNpbmsobmV3IEJpbmFyeU91dHB1dFNpbmtBZGFwdGVyKGRhdGFPdXRwdXQpKTsKICAgICAgX3JlcG9ydGVyLmxvZygnV3JpdGluZyBkYXRhIHRvICR7dXJpfScpOwogICAgICBzaW5rLnJlZ2lzdGVyRW50aXR5V3JpdGVyKGVudGl0eVdyaXRlcik7CiAgICAgIHNpbmsucmVnaXN0ZXJDb2RlZ2VuV3JpdGVyKG5ldyBDb2RlZ2VuV3JpdGVySW1wbChjbG9zZWRXb3JsZCkpOwogICAgICBzaW5rLndyaXRlTWVtYmVyTWFwKAogICAgICAgICAgcmVzdWx0cywKICAgICAgICAgIChNZW1iZXJFbnRpdHkgbWVtYmVyLCBDb2RlZ2VuUmVzdWx0IHJlc3VsdCkgPT4KICAgICAgICAgICAgICByZXN1bHQud3JpdGVUb0RhdGFTaW5rKHNpbmspKTsKICAgICAgc2luay5jbG9zZSgpOwogICAgfSk7CiAgfQoKICBGdXR1cmU8Q29kZWdlblJlc3VsdHM+IGRlc2VyaWFsaXplQ29kZWdlbigKICAgICAgQmFja2VuZFN0cmF0ZWd5IGJhY2tlbmRTdHJhdGVneSwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgZ2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMsCiAgICAgIENvZGVnZW5JbnB1dHMgY29kZWdlbklucHV0cykgYXN5bmMgewogICAgaW50IHNoYXJkcyA9IF9vcHRpb25zLmNvZGVnZW5TaGFyZHM7CiAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQgPSBnbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cy5jbG9zZWRXb3JsZDsKICAgIE1hcDxNZW1iZXJFbnRpdHksIENvZGVnZW5SZXN1bHQ+IHJlc3VsdHMgPSB7fTsKICAgIGZvciAoaW50IHNoYXJkID0gMDsgc2hhcmQgPCBzaGFyZHM7IHNoYXJkKyspIHsKICAgICAgVXJpIHVyaSA9IFVyaS5wYXJzZSgnJHtfb3B0aW9ucy5yZWFkQ29kZWdlblVyaX0kc2hhcmQnKTsKICAgICAgYXdhaXQgbWVhc3VyZUlvU3VidGFzaygnZGVzZXJpYWxpemUgY29kZWdlbicsICgpIGFzeW5jIHsKICAgICAgICBfcmVwb3J0ZXIubG9nKCdSZWFkaW5nIGRhdGEgZnJvbSAke3VyaX0nKTsKICAgICAgICBhcGkuSW5wdXQ8TGlzdDxpbnQ+PiBkYXRhSW5wdXQgPQogICAgICAgICAgICBhd2FpdCBfcHJvdmlkZXIucmVhZEZyb21VcmkodXJpLCBpbnB1dEtpbmQ6IGFwaS5JbnB1dEtpbmQuYmluYXJ5KTsKICAgICAgICBEYXRhU291cmNlIHNvdXJjZSA9IG5ldyBCaW5hcnlTb3VyY2VJbXBsKGRhdGFJbnB1dC5kYXRhKTsKICAgICAgICBiYWNrZW5kU3RyYXRlZ3kucHJlcGFyZUNvZGVnZW5SZWFkZXIoc291cmNlKTsKICAgICAgICBNYXA8TWVtYmVyRW50aXR5LCBDb2RlZ2VuUmVzdWx0PiBjb2RlZ2VuUmVzdWx0cyA9CiAgICAgICAgICAgIHNvdXJjZS5yZWFkTWVtYmVyTWFwKChNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgICAgICBMaXN0PE1vZHVsYXJOYW1lPiBtb2R1bGFyTmFtZXMgPSBbXTsKICAgICAgICAgIExpc3Q8TW9kdWxhckV4cHJlc3Npb24+IG1vZHVsYXJFeHByZXNzaW9ucyA9IFtdOwogICAgICAgICAgQ29kZWdlblJlYWRlciByZWFkZXIgPSBuZXcgQ29kZWdlblJlYWRlckltcGwoCiAgICAgICAgICAgICAgY2xvc2VkV29ybGQsIG1vZHVsYXJOYW1lcywgbW9kdWxhckV4cHJlc3Npb25zKTsKICAgICAgICAgIHNvdXJjZS5yZWdpc3RlckNvZGVnZW5SZWFkZXIocmVhZGVyKTsKICAgICAgICAgIENvZGVnZW5SZXN1bHQgcmVzdWx0ID0gQ29kZWdlblJlc3VsdC5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgICAgICAgICAgc291cmNlLCBtb2R1bGFyTmFtZXMsIG1vZHVsYXJFeHByZXNzaW9ucyk7CiAgICAgICAgICBzb3VyY2UuZGVyZWdpc3RlckNvZGVnZW5SZWFkZXIocmVhZGVyKTsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfSk7CiAgICAgICAgX3JlcG9ydGVyLmxvZygnUmVhZCAke2NvZGVnZW5SZXN1bHRzLmxlbmd0aH0gbWVtYmVycyBmcm9tICR7dXJpfScpOwogICAgICAgIHJlc3VsdHMuYWRkQWxsKGNvZGVnZW5SZXN1bHRzKTsKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gbmV3IERlc2VyaWFsaXplZENvZGVnZW5SZXN1bHRzKAogICAgICAgIGdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzLCBjb2RlZ2VuSW5wdXRzLCByZXN1bHRzKTsKICB9Cn0KgLQATk48ARUoOzkpIyEfMiQeMSElKyQaJBgdASo5MzQlJjkQAgFCHSEdMRwZR1EhQzxLAgEvIiYlLAFDLxkBDCYBSipQTk8+KEA3UFA/LRYIASpBKENPOggEAUUfOx0+QTdOM0UYCAFBQjdPQEhCCAQBGUg8M0cnKTMTIEUlUCkIDwgtQE9PLy9GGxM5LRQIBAEtJz0rKUczMz8/MylPQjY6OS87OD4wQzkyGQxMKAoGKz0EAgEscGFja2FnZTpjb21waWxlci9zcmMvc2VyaWFsaXphdGlvbi90YXNrLmRhcnQ7c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc2VyaWFsaXphdGlvbi9zdHJhdGVnaWVzLmRhcnSR3S8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6aW8nOwoKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL3V0aWxzLmRhcnQnIGFzIGlyCiAgICBzaG93IHNlcmlhbGl6ZUNvbXBvbmVudDsKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL3V0aWxzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9iaW5hcnkvYXN0X2Zyb21fYmluYXJ5LmRhcnQnIHNob3cgQmluYXJ5QnVpbGRlcjsKCmltcG9ydCAnLi4vZGlhZ25vc3RpY3MvZGlhZ25vc3RpY19saXN0ZW5lci5kYXJ0JzsKaW1wb3J0ICcuLi9lbnZpcm9ubWVudC5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvanNfd29ybGQuZGFydCc7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi9zb3VyY2VfZmlsZV9wcm92aWRlci5kYXJ0JzsKaW1wb3J0ICcuLi91dGlsL3NpbmtfYWRhcHRlci5kYXJ0JzsKaW1wb3J0ICdzZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJ3Rhc2suZGFydCc7CgphYnN0cmFjdCBjbGFzcyBTZXJpYWxpemF0aW9uU3RyYXRlZ3k8VD4gewogIGNvbnN0IFNlcmlhbGl6YXRpb25TdHJhdGVneSgpOwoKICBMaXN0PGludD4gc2VyaWFsaXplQ29tcG9uZW50KEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMpIHsKICAgIEpzQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQgPSByZXN1bHRzLmNsb3NlZFdvcmxkOwogICAgaXIuQ29tcG9uZW50IGNvbXBvbmVudCA9IGNsb3NlZFdvcmxkLmVsZW1lbnRNYXAucHJvZ3JhbUVudi5tYWluQ29tcG9uZW50OwogICAgcmV0dXJuIGlyLnNlcmlhbGl6ZUNvbXBvbmVudChjb21wb25lbnQpOwogIH0KCiAgTGlzdDxUPiBzZXJpYWxpemVEYXRhKEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMpOwoKICBpci5Db21wb25lbnQgZGVzZXJpYWxpemVDb21wb25lbnQoTGlzdDxpbnQ+IGRhdGEpIHsKICAgIGlyLkNvbXBvbmVudCBjb21wb25lbnQgPSBuZXcgaXIuQ29tcG9uZW50KCk7CiAgICBuZXcgQmluYXJ5QnVpbGRlcihkYXRhKS5yZWFkQ29tcG9uZW50KGNvbXBvbmVudCk7CiAgICByZXR1cm4gY29tcG9uZW50OwogIH0KCiAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgZGVzZXJpYWxpemVEYXRhKAogICAgICBDb21waWxlck9wdGlvbnMgb3B0aW9ucywKICAgICAgRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyLAogICAgICBFbnZpcm9ubWVudCBlbnZpcm9ubWVudCwKICAgICAgQWJzdHJhY3RWYWx1ZVN0cmF0ZWd5IGFic3RyYWN0VmFsdWVTdHJhdGVneSwKICAgICAgaXIuQ29tcG9uZW50IGNvbXBvbmVudCwKICAgICAgTGlzdDxUPiBkYXRhKTsKfQoKY2xhc3MgQnl0ZXNJbk1lbW9yeVNlcmlhbGl6YXRpb25TdHJhdGVneSBleHRlbmRzIFNlcmlhbGl6YXRpb25TdHJhdGVneTxpbnQ+IHsKICBmaW5hbCBib29sIHVzZURhdGFLaW5kczsKCiAgY29uc3QgQnl0ZXNJbk1lbW9yeVNlcmlhbGl6YXRpb25TdHJhdGVneSh7dGhpcy51c2VEYXRhS2luZHM6IGZhbHNlfSk7CgogIEBvdmVycmlkZQogIExpc3Q8aW50PiBzZXJpYWxpemVEYXRhKEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMpIHsKICAgIEJ5dGVTaW5rIGJ5dGVTaW5rID0gbmV3IEJ5dGVTaW5rKCk7CiAgICBEYXRhU2luayBzaW5rID0gbmV3IEJpbmFyeVNpbmsoYnl0ZVNpbmssIHVzZURhdGFLaW5kczogdXNlRGF0YUtpbmRzKTsKICAgIHNlcmlhbGl6ZUdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzKHJlc3VsdHMsIHNpbmspOwogICAgcmV0dXJuIGJ5dGVTaW5rLmJ1aWxkZXIudGFrZUJ5dGVzKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBkZXNlcmlhbGl6ZURhdGEoCiAgICAgIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zLAogICAgICBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIsCiAgICAgIEVudmlyb25tZW50IGVudmlyb25tZW50LAogICAgICBBYnN0cmFjdFZhbHVlU3RyYXRlZ3kgYWJzdHJhY3RWYWx1ZVN0cmF0ZWd5LAogICAgICBpci5Db21wb25lbnQgY29tcG9uZW50LAogICAgICBMaXN0PGludD4gZGF0YSkgewogICAgRGF0YVNvdXJjZSBzb3VyY2UgPSBuZXcgQmluYXJ5U291cmNlSW1wbChkYXRhLCB1c2VEYXRhS2luZHM6IHVzZURhdGFLaW5kcyk7CiAgICByZXR1cm4gZGVzZXJpYWxpemVHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyhvcHRpb25zLCByZXBvcnRlciwgZW52aXJvbm1lbnQsCiAgICAgICAgYWJzdHJhY3RWYWx1ZVN0cmF0ZWd5LCBjb21wb25lbnQsIHNvdXJjZSk7CiAgfQp9CgpjbGFzcyBCeXRlc09uRGlza1NlcmlhbGl6YXRpb25TdHJhdGVneSBleHRlbmRzIFNlcmlhbGl6YXRpb25TdHJhdGVneTxpbnQ+IHsKICBmaW5hbCBib29sIHVzZURhdGFLaW5kczsKCiAgY29uc3QgQnl0ZXNPbkRpc2tTZXJpYWxpemF0aW9uU3RyYXRlZ3koe3RoaXMudXNlRGF0YUtpbmRzOiBmYWxzZX0pOwoKICBAb3ZlcnJpZGUKICBMaXN0PGludD4gc2VyaWFsaXplRGF0YShHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzKSB7CiAgICBVcmkgdXJpID0gVXJpLmJhc2UucmVzb2x2ZSgnd29ybGQuZGF0YScpOwogICAgRGF0YVNpbmsgc2luayA9IG5ldyBCaW5hcnlTaW5rKAogICAgICAgIG5ldyBCaW5hcnlPdXRwdXRTaW5rQWRhcHRlcihuZXcgUmFuZG9tQWNjZXNzQmluYXJ5T3V0cHV0U2luayh1cmkpKSwKICAgICAgICB1c2VEYXRhS2luZHM6IHVzZURhdGFLaW5kcyk7CiAgICBzZXJpYWxpemVHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyhyZXN1bHRzLCBzaW5rKTsKICAgIHJldHVybiBuZXcgRmlsZS5mcm9tVXJpKHVyaSkucmVhZEFzQnl0ZXNTeW5jKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBkZXNlcmlhbGl6ZURhdGEoCiAgICAgIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zLAogICAgICBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIsCiAgICAgIEVudmlyb25tZW50IGVudmlyb25tZW50LAogICAgICBBYnN0cmFjdFZhbHVlU3RyYXRlZ3kgYWJzdHJhY3RWYWx1ZVN0cmF0ZWd5LAogICAgICBpci5Db21wb25lbnQgY29tcG9uZW50LAogICAgICBMaXN0PGludD4gZGF0YSkgewogICAgRGF0YVNvdXJjZSBzb3VyY2UgPSBuZXcgQmluYXJ5U291cmNlSW1wbChkYXRhLCB1c2VEYXRhS2luZHM6IHVzZURhdGFLaW5kcyk7CiAgICByZXR1cm4gZGVzZXJpYWxpemVHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyhvcHRpb25zLCByZXBvcnRlciwgZW52aXJvbm1lbnQsCiAgICAgICAgYWJzdHJhY3RWYWx1ZVN0cmF0ZWd5LCBjb21wb25lbnQsIHNvdXJjZSk7CiAgfQp9CgpjbGFzcyBPYmplY3RzSW5NZW1vcnlTZXJpYWxpemF0aW9uU3RyYXRlZ3kKICAgIGV4dGVuZHMgU2VyaWFsaXphdGlvblN0cmF0ZWd5PE9iamVjdD4gewogIGZpbmFsIGJvb2wgdXNlRGF0YUtpbmRzOwoKICBjb25zdCBPYmplY3RzSW5NZW1vcnlTZXJpYWxpemF0aW9uU3RyYXRlZ3koe3RoaXMudXNlRGF0YUtpbmRzOiB0cnVlfSk7CgogIEBvdmVycmlkZQogIExpc3Q8T2JqZWN0PiBzZXJpYWxpemVEYXRhKEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMpIHsKICAgIExpc3Q8T2JqZWN0PiBkYXRhID0gW107CiAgICBEYXRhU2luayBzaW5rID0gbmV3IE9iamVjdFNpbmsoZGF0YSwgdXNlRGF0YUtpbmRzOiB1c2VEYXRhS2luZHMpOwogICAgc2VyaWFsaXplR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMocmVzdWx0cywgc2luayk7CiAgICByZXR1cm4gZGF0YTsKICB9CgogIEBvdmVycmlkZQogIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGRlc2VyaWFsaXplRGF0YSgKICAgICAgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMsCiAgICAgIERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlciwKICAgICAgRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsCiAgICAgIEFic3RyYWN0VmFsdWVTdHJhdGVneSBhYnN0cmFjdFZhbHVlU3RyYXRlZ3ksCiAgICAgIGlyLkNvbXBvbmVudCBjb21wb25lbnQsCiAgICAgIExpc3Q8T2JqZWN0PiBkYXRhKSB7CiAgICBEYXRhU291cmNlIHNvdXJjZSA9IG5ldyBPYmplY3RTb3VyY2UoZGF0YSwgdXNlRGF0YUtpbmRzOiB1c2VEYXRhS2luZHMpOwogICAgcmV0dXJuIGRlc2VyaWFsaXplR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMob3B0aW9ucywgcmVwb3J0ZXIsIGVudmlyb25tZW50LAogICAgICAgIGFic3RyYWN0VmFsdWVTdHJhdGVneSwgY29tcG9uZW50LCBzb3VyY2UpOwogIH0KfQqAhgBOTjwBEgE9HTgoSAEyHjEhJBonJB0UASohAUU1Ti0EAT0BNjE2FgQBLh8jHzMeFQIBThsBSAEMQChKOCkEAQwuHyMfMx4YUFEzBAIBTBsBRgEMQC4kTCU4NAQBDC4fIx8zHhhQUTMEAgErLBsBSQEMQxxGOBEEAQwuHyMfMx4bTFEzBAIBMnBhY2thZ2U6Y29tcGlsZXIvc3JjL3NlcmlhbGl6YXRpb24vc3RyYXRlZ2llcy5kYXJ0LHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NzYS9ub2Rlcy5kYXJ0wAI9Ey8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JyBzaG93IExpbms7CgppbXBvcnQgJy4uL2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbnN0YW50cy9jb25zdGFudF9zeXN0ZW0uZGFydCcgYXMgY29uc3RhbnRfc3lzdGVtOwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvanVtcHMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJy4uL2lvL3NvdXJjZV9pbmZvcm1hdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqczsKaW1wb3J0ICcuLi9qc19tb2RlbC90eXBlX3JlY2lwZS5kYXJ0JyBzaG93IFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSwgVHlwZVJlY2lwZTsKaW1wb3J0ICcuLi9uYXRpdmUvYmVoYXZpb3IuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvcjsKaW1wb3J0ICcuLi91bml2ZXJzZS9zaWRlX2VmZmVjdHMuZGFydCcgc2hvdyBTaWRlRWZmZWN0czsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCc7CmltcG9ydCAnLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CmltcG9ydCAnaW52b2tlX2R5bmFtaWNfc3BlY2lhbGl6ZXJzLmRhcnQnOwppbXBvcnQgJ3ZhbGlkYXRlLmRhcnQnOwoKYWJzdHJhY3QgY2xhc3MgSFZpc2l0b3I8Uj4gewogIFIgdmlzaXRBYnMoSEFicyBub2RlKTsKICBSIHZpc2l0QWRkKEhBZGQgbm9kZSk7CiAgUiB2aXNpdEF3YWl0KEhBd2FpdCBub2RlKTsKICBSIHZpc2l0Qml0QW5kKEhCaXRBbmQgbm9kZSk7CiAgUiB2aXNpdEJpdE5vdChIQml0Tm90IG5vZGUpOwogIFIgdmlzaXRCaXRPcihIQml0T3Igbm9kZSk7CiAgUiB2aXNpdEJpdFhvcihIQml0WG9yIG5vZGUpOwogIFIgdmlzaXRCb3VuZHNDaGVjayhIQm91bmRzQ2hlY2sgbm9kZSk7CiAgUiB2aXNpdEJyZWFrKEhCcmVhayBub2RlKTsKICBSIHZpc2l0Q29uc3RhbnQoSENvbnN0YW50IG5vZGUpOwogIFIgdmlzaXRDb250aW51ZShIQ29udGludWUgbm9kZSk7CiAgUiB2aXNpdENyZWF0ZShIQ3JlYXRlIG5vZGUpOwogIFIgdmlzaXRDcmVhdGVCb3goSENyZWF0ZUJveCBub2RlKTsKICBSIHZpc2l0RGl2aWRlKEhEaXZpZGUgbm9kZSk7CiAgUiB2aXNpdEV4aXQoSEV4aXQgbm9kZSk7CiAgUiB2aXNpdEV4aXRUcnkoSEV4aXRUcnkgbm9kZSk7CiAgUiB2aXNpdEZpZWxkR2V0KEhGaWVsZEdldCBub2RlKTsKICBSIHZpc2l0RmllbGRTZXQoSEZpZWxkU2V0IG5vZGUpOwogIFIgdmlzaXRGb3JlaWduQ29kZShIRm9yZWlnbkNvZGUgbm9kZSk7CiAgUiB2aXNpdEdldExlbmd0aChIR2V0TGVuZ3RoIG5vZGUpOwogIFIgdmlzaXRHb3RvKEhHb3RvIG5vZGUpOwogIFIgdmlzaXRHcmVhdGVyKEhHcmVhdGVyIG5vZGUpOwogIFIgdmlzaXRHcmVhdGVyRXF1YWwoSEdyZWF0ZXJFcXVhbCBub2RlKTsKICBSIHZpc2l0SWRlbnRpdHkoSElkZW50aXR5IG5vZGUpOwogIFIgdmlzaXRJZihISWYgbm9kZSk7CiAgUiB2aXNpdEluZGV4KEhJbmRleCBub2RlKTsKICBSIHZpc2l0SW5kZXhBc3NpZ24oSEluZGV4QXNzaWduIG5vZGUpOwogIFIgdmlzaXRJbnRlcmNlcHRvcihISW50ZXJjZXB0b3Igbm9kZSk7CiAgUiB2aXNpdEludm9rZUNsb3N1cmUoSEludm9rZUNsb3N1cmUgbm9kZSk7CiAgUiB2aXNpdEludm9rZUR5bmFtaWNHZXR0ZXIoSEludm9rZUR5bmFtaWNHZXR0ZXIgbm9kZSk7CiAgUiB2aXNpdEludm9rZUR5bmFtaWNNZXRob2QoSEludm9rZUR5bmFtaWNNZXRob2Qgbm9kZSk7CiAgUiB2aXNpdEludm9rZUR5bmFtaWNTZXR0ZXIoSEludm9rZUR5bmFtaWNTZXR0ZXIgbm9kZSk7CiAgUiB2aXNpdEludm9rZVN0YXRpYyhISW52b2tlU3RhdGljIG5vZGUpOwogIFIgdmlzaXRJbnZva2VTdXBlcihISW52b2tlU3VwZXIgbm9kZSk7CiAgUiB2aXNpdEludm9rZUNvbnN0cnVjdG9yQm9keShISW52b2tlQ29uc3RydWN0b3JCb2R5IG5vZGUpOwogIFIgdmlzaXRJbnZva2VHZW5lcmF0b3JCb2R5KEhJbnZva2VHZW5lcmF0b3JCb2R5IG5vZGUpOwogIFIgdmlzaXRJcyhISXMgbm9kZSk7CiAgUiB2aXNpdElzVmlhSW50ZXJjZXB0b3IoSElzVmlhSW50ZXJjZXB0b3Igbm9kZSk7CiAgUiB2aXNpdExhdGVWYWx1ZShITGF0ZVZhbHVlIG5vZGUpOwogIFIgdmlzaXRMYXp5U3RhdGljKEhMYXp5U3RhdGljIG5vZGUpOwogIFIgdmlzaXRMZXNzKEhMZXNzIG5vZGUpOwogIFIgdmlzaXRMZXNzRXF1YWwoSExlc3NFcXVhbCBub2RlKTsKICBSIHZpc2l0TGl0ZXJhbExpc3QoSExpdGVyYWxMaXN0IG5vZGUpOwogIFIgdmlzaXRMb2NhbEdldChITG9jYWxHZXQgbm9kZSk7CiAgUiB2aXNpdExvY2FsU2V0KEhMb2NhbFNldCBub2RlKTsKICBSIHZpc2l0TG9jYWxWYWx1ZShITG9jYWxWYWx1ZSBub2RlKTsKICBSIHZpc2l0TG9vcEJyYW5jaChITG9vcEJyYW5jaCBub2RlKTsKICBSIHZpc2l0TXVsdGlwbHkoSE11bHRpcGx5IG5vZGUpOwogIFIgdmlzaXROZWdhdGUoSE5lZ2F0ZSBub2RlKTsKICBSIHZpc2l0Tm90KEhOb3Qgbm9kZSk7CiAgUiB2aXNpdE9uZVNob3RJbnRlcmNlcHRvcihIT25lU2hvdEludGVyY2VwdG9yIG5vZGUpOwogIFIgdmlzaXRQYXJhbWV0ZXJWYWx1ZShIUGFyYW1ldGVyVmFsdWUgbm9kZSk7CiAgUiB2aXNpdFBoaShIUGhpIG5vZGUpOwogIFIgdmlzaXRSYW5nZUNvbnZlcnNpb24oSFJhbmdlQ29udmVyc2lvbiBub2RlKTsKICBSIHZpc2l0UmVhZE1vZGlmeVdyaXRlKEhSZWFkTW9kaWZ5V3JpdGUgbm9kZSk7CiAgUiB2aXNpdFJlZihIUmVmIG5vZGUpOwogIFIgdmlzaXRSZW1haW5kZXIoSFJlbWFpbmRlciBub2RlKTsKICBSIHZpc2l0UmV0dXJuKEhSZXR1cm4gbm9kZSk7CiAgUiB2aXNpdFNoaWZ0TGVmdChIU2hpZnRMZWZ0IG5vZGUpOwogIFIgdmlzaXRTaGlmdFJpZ2h0KEhTaGlmdFJpZ2h0IG5vZGUpOwogIFIgdmlzaXRTdGF0aWMoSFN0YXRpYyBub2RlKTsKICBSIHZpc2l0U3RhdGljU3RvcmUoSFN0YXRpY1N0b3JlIG5vZGUpOwogIFIgdmlzaXRTdHJpbmdDb25jYXQoSFN0cmluZ0NvbmNhdCBub2RlKTsKICBSIHZpc2l0U3RyaW5naWZ5KEhTdHJpbmdpZnkgbm9kZSk7CiAgUiB2aXNpdFN1YnRyYWN0KEhTdWJ0cmFjdCBub2RlKTsKICBSIHZpc2l0U3dpdGNoKEhTd2l0Y2ggbm9kZSk7CiAgUiB2aXNpdFRoaXMoSFRoaXMgbm9kZSk7CiAgUiB2aXNpdFRocm93KEhUaHJvdyBub2RlKTsKICBSIHZpc2l0VGhyb3dFeHByZXNzaW9uKEhUaHJvd0V4cHJlc3Npb24gbm9kZSk7CiAgUiB2aXNpdFRydW5jYXRpbmdEaXZpZGUoSFRydW5jYXRpbmdEaXZpZGUgbm9kZSk7CiAgUiB2aXNpdFRyeShIVHJ5IG5vZGUpOwogIFIgdmlzaXRUeXBlQ29udmVyc2lvbihIVHlwZUNvbnZlcnNpb24gbm9kZSk7CiAgUiB2aXNpdFByaW1pdGl2ZUNoZWNrKEhQcmltaXRpdmVDaGVjayBub2RlKTsKICBSIHZpc2l0Qm9vbENvbnZlcnNpb24oSEJvb2xDb252ZXJzaW9uIG5vZGUpOwogIFIgdmlzaXRUeXBlS25vd24oSFR5cGVLbm93biBub2RlKTsKICBSIHZpc2l0WWllbGQoSFlpZWxkIG5vZGUpOwoKICBSIHZpc2l0VHlwZUluZm9SZWFkUmF3KEhUeXBlSW5mb1JlYWRSYXcgbm9kZSk7CiAgUiB2aXNpdFR5cGVJbmZvUmVhZFZhcmlhYmxlKEhUeXBlSW5mb1JlYWRWYXJpYWJsZSBub2RlKTsKICBSIHZpc2l0VHlwZUluZm9FeHByZXNzaW9uKEhUeXBlSW5mb0V4cHJlc3Npb24gbm9kZSk7CgogIC8vIEluc3RydWN0aW9ucyBmb3IgJ2RhcnQ6X3J0aScuCiAgUiB2aXNpdElzVGVzdChISXNUZXN0IG5vZGUpOwogIFIgdmlzaXRBc0NoZWNrKEhBc0NoZWNrIG5vZGUpOwogIFIgdmlzaXRBc0NoZWNrU2ltcGxlKEhBc0NoZWNrU2ltcGxlIG5vZGUpOwogIFIgdmlzaXRTdWJ0eXBlQ2hlY2soSFN1YnR5cGVDaGVjayBub2RlKTsKICBSIHZpc2l0TG9hZFR5cGUoSExvYWRUeXBlIG5vZGUpOwogIFIgdmlzaXRJbnN0YW5jZUVudmlyb25tZW50KEhJbnN0YW5jZUVudmlyb25tZW50IG5vZGUpOwogIFIgdmlzaXRUeXBlRXZhbChIVHlwZUV2YWwgbm9kZSk7CiAgUiB2aXNpdFR5cGVCaW5kKEhUeXBlQmluZCBub2RlKTsKfQoKYWJzdHJhY3QgY2xhc3MgSEdyYXBoVmlzaXRvciB7CiAgdmlzaXREb21pbmF0b3JUcmVlKEhHcmFwaCBncmFwaCkgewogICAgLy8gUmVjdXJzaW9uIGZyZWUgdmVyc2lvbiBvZjoKICAgIC8vCiAgICAvLyAgICAgdm9pZCB2aXNpdEJhc2ljQmxvY2tBbmRTdWNjZXNzb3JzKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICAvLyAgICAgICB2aXNpdEJhc2ljQmxvY2soYmxvY2spOwogICAgLy8gICAgICAgTGlzdCBkb21pbmF0ZWQgPSBibG9jay5kb21pbmF0ZWRCbG9ja3M7CiAgICAvLyAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRvbWluYXRlZC5sZW5ndGg7IGkrKykgewogICAgLy8gICAgICAgICB2aXNpdEJhc2ljQmxvY2tBbmRTdWNjZXNzb3JzKGRvbWluYXRlZFtpXSk7CiAgICAvLyAgICAgICB9CiAgICAvLyAgICAgfQogICAgLy8gICAgIHZpc2l0QmFzaWNCbG9ja0FuZFN1Y2Nlc3NvcnMoZ3JhcGguZW50cnkpOwoKICAgIF9GcmFtZSBmcmFtZSA9IG5ldyBfRnJhbWUobnVsbCk7CiAgICBmcmFtZS5ibG9jayA9IGdyYXBoLmVudHJ5OwogICAgZnJhbWUuaW5kZXggPSAwOwoKICAgIHZpc2l0QmFzaWNCbG9jayhmcmFtZS5ibG9jayk7CgogICAgd2hpbGUgKGZyYW1lICE9IG51bGwpIHsKICAgICAgSEJhc2ljQmxvY2sgYmxvY2sgPSBmcmFtZS5ibG9jazsKICAgICAgaW50IGluZGV4ID0gZnJhbWUuaW5kZXg7CiAgICAgIGlmIChpbmRleCA8IGJsb2NrLmRvbWluYXRlZEJsb2Nrcy5sZW5ndGgpIHsKICAgICAgICBmcmFtZS5pbmRleCA9IGluZGV4ICsgMTsKICAgICAgICBmcmFtZSA9IGZyYW1lLm5leHQgPz89IG5ldyBfRnJhbWUoZnJhbWUpOwogICAgICAgIGZyYW1lLmJsb2NrID0gYmxvY2suZG9taW5hdGVkQmxvY2tzW2luZGV4XTsKICAgICAgICBmcmFtZS5pbmRleCA9IDA7CiAgICAgICAgdmlzaXRCYXNpY0Jsb2NrKGZyYW1lLmJsb2NrKTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBmcmFtZSA9IGZyYW1lLnByZXZpb3VzOwogICAgfQogIH0KCiAgdmlzaXRQb3N0RG9taW5hdG9yVHJlZShIR3JhcGggZ3JhcGgpIHsKICAgIC8vIFJlY3VzaW9uIGZyZWUgdmVyc2lvbiBvZjoKICAgIC8vCiAgICAvLyAgICAgdm9pZCB2aXNpdEJhc2ljQmxvY2tBbmRTdWNjZXNzb3JzKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICAvLyAgICAgICBMaXN0IGRvbWluYXRlZCA9IGJsb2NrLmRvbWluYXRlZEJsb2NrczsKICAgIC8vICAgICAgIGZvciAoaW50IGkgPSBkb21pbmF0ZWQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgIC8vICAgICAgICAgdmlzaXRCYXNpY0Jsb2NrQW5kU3VjY2Vzc29ycyhkb21pbmF0ZWRbaV0pOwogICAgLy8gICAgICAgfQogICAgLy8gICAgICAgdmlzaXRCYXNpY0Jsb2NrKGJsb2NrKTsKICAgIC8vICAgICB9CiAgICAvLyAgICAgdmlzaXRCYXNpY0Jsb2NrQW5kU3VjY2Vzc29ycyhncmFwaC5lbnRyeSk7CgogICAgX0ZyYW1lIGZyYW1lID0gbmV3IF9GcmFtZShudWxsKTsKICAgIGZyYW1lLmJsb2NrID0gZ3JhcGguZW50cnk7CiAgICBmcmFtZS5pbmRleCA9IGZyYW1lLmJsb2NrLmRvbWluYXRlZEJsb2Nrcy5sZW5ndGg7CgogICAgd2hpbGUgKGZyYW1lICE9IG51bGwpIHsKICAgICAgSEJhc2ljQmxvY2sgYmxvY2sgPSBmcmFtZS5ibG9jazsKICAgICAgaW50IGluZGV4ID0gZnJhbWUuaW5kZXg7CiAgICAgIGlmIChpbmRleCA+IDApIHsKICAgICAgICBmcmFtZS5pbmRleCA9IGluZGV4IC0gMTsKICAgICAgICBmcmFtZSA9IGZyYW1lLm5leHQgPz89IG5ldyBfRnJhbWUoZnJhbWUpOwogICAgICAgIGZyYW1lLmJsb2NrID0gYmxvY2suZG9taW5hdGVkQmxvY2tzW2luZGV4IC0gMV07CiAgICAgICAgZnJhbWUuaW5kZXggPSBmcmFtZS5ibG9jay5kb21pbmF0ZWRCbG9ja3MubGVuZ3RoOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIHZpc2l0QmFzaWNCbG9jayhibG9jayk7CiAgICAgIGZyYW1lID0gZnJhbWUucHJldmlvdXM7CiAgICB9CiAgfQoKICB2aXNpdEJhc2ljQmxvY2soSEJhc2ljQmxvY2sgYmxvY2spOwp9CgpjbGFzcyBfRnJhbWUgewogIGZpbmFsIF9GcmFtZSBwcmV2aW91czsKICBfRnJhbWUgbmV4dDsKICBIQmFzaWNCbG9jayBibG9jazsKICBpbnQgaW5kZXg7CiAgX0ZyYW1lKHRoaXMucHJldmlvdXMpOwp9CgphYnN0cmFjdCBjbGFzcyBISW5zdHJ1Y3Rpb25WaXNpdG9yIGV4dGVuZHMgSEdyYXBoVmlzaXRvciB7CiAgSEJhc2ljQmxvY2sgY3VycmVudEJsb2NrOwoKICB2aXNpdEluc3RydWN0aW9uKEhJbnN0cnVjdGlvbiBub2RlKTsKCiAgQG92ZXJyaWRlCiAgdmlzaXRCYXNpY0Jsb2NrKEhCYXNpY0Jsb2NrIG5vZGUpIHsKICAgIHZvaWQgdmlzaXRJbnN0cnVjdGlvbkxpc3QoSEluc3RydWN0aW9uTGlzdCBsaXN0KSB7CiAgICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IGxpc3QuZmlyc3Q7CiAgICAgIHdoaWxlIChpbnN0cnVjdGlvbiAhPSBudWxsKSB7CiAgICAgICAgdmlzaXRJbnN0cnVjdGlvbihpbnN0cnVjdGlvbik7CiAgICAgICAgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbi5uZXh0OwogICAgICAgIGFzc2VydChpbnN0cnVjdGlvbiAhPSBsaXN0LmZpcnN0KTsKICAgICAgfQogICAgfQoKICAgIGN1cnJlbnRCbG9jayA9IG5vZGU7CiAgICB2aXNpdEluc3RydWN0aW9uTGlzdChub2RlKTsKICB9Cn0KCmNsYXNzIEhHcmFwaCB7CiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWF5YmUgdGhpcyBzaG91bGQgYmUgW01lbWJlckxpa2VdLgogIEVudGl0eSBlbGVtZW50OyAvLyBVc2VkIGZvciBkZWJ1ZyBwcmludGluZy4KICBIQmFzaWNCbG9jayBlbnRyeTsKICBIQmFzaWNCbG9jayBleGl0OwogIEhUaGlzIHRoaXNJbnN0cnVjdGlvbjsKCiAgLy8vIGB0cnVlYCBpZiB0aGlzIGdyYXBoIHNob3VsZCBiZSB0cmFuc2Zvcm1lZCBieSBhIHN5bmMqL2FzeW5jL2FzeW5jKgogIC8vLyByZXdyaXRlLgogIGJvb2wgbmVlZHNBc3luY1Jld3JpdGUgPSBmYWxzZTsKCiAgLy8vIElmIHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgYW4gYXN5bmMgcmV3cml0ZSwgdGhpcyBpcyB0aGUgZWxlbWVudCB0eXBlIG9mCiAgLy8vIHRoZSBnZW5lcmF0b3IuCiAgRGFydFR5cGUgYXN5bmNFbGVtZW50VHlwZTsKCiAgLy8vIFJlY2VpdmVyIHBhcmFtZXRlciwgc2V0IGZvciBtZXRob2RzIHVzaW5nIGludGVyY2VwdG9yIGNhbGxpbmcgY29udmVudGlvbi4KICBIUGFyYW1ldGVyVmFsdWUgZXhwbGljaXRSZWNlaXZlclBhcmFtZXRlcjsKICBib29sIGlzUmVjdXJzaXZlTWV0aG9kID0gZmFsc2U7CiAgYm9vbCBjYWxsZWRJbkxvb3AgPSBmYWxzZTsKCiAgZmluYWwgTGlzdDxIQmFzaWNCbG9jaz4gYmxvY2tzID0gPEhCYXNpY0Jsb2NrPltdOwoKICAvLy8gTm9kZXMgY29udGFpbmluZyBsaXN0IGFsbG9jYXRpb25zIGZvciB3aGljaCB0aGVyZSBpcyBhIGtub3duIGZpeGVkIGxlbmd0aC4KICAvLyBUT0RPKHNpZ211bmQsc3JhKTogY29uc2lkZXIgbm90IHN0b3JpbmcgdGhpcyBleHBsaWNpdGx5IGhlcmUgKGUuZy4gbWF5YmUKICAvLyBzdG9yZSBpdCBvbiBISW5zdHJ1Y3Rpb24sIG9yIG1heWJlIHRoaXMgY2FuIGJlIGNvbXB1dGVkIG9uIGRlbWFuZCkuCiAgZmluYWwgU2V0PEhJbnN0cnVjdGlvbj4gYWxsb2NhdGVkRml4ZWRMaXN0cyA9IG5ldyBTZXQ8SEluc3RydWN0aW9uPigpOwoKICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbjsKCiAgLy8gV2UgY2Fub25pY2FsaXplIGFsbCBjb25zdGFudHMgdXNlZCB3aXRoaW4gYSBncmFwaCBzbyB3ZSBkbyBub3QKICAvLyBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZW0gZm9yIGdsb2JhbCB2YWx1ZSBudW1iZXJpbmcuCiAgTWFwPENvbnN0YW50VmFsdWUsIEhDb25zdGFudD4gY29uc3RhbnRzID0gbmV3IE1hcDxDb25zdGFudFZhbHVlLCBIQ29uc3RhbnQ+KCk7CgogIEhHcmFwaCgpIHsKICAgIGVudHJ5ID0gYWRkTmV3QmxvY2soKTsKICAgIC8vIFRoZSBleGl0IGJsb2NrIHdpbGwgYmUgYWRkZWQgbGF0ZXIsIHNvIGl0IGhhcyBhbiBpZCB0aGF0IGlzCiAgICAvLyBhZnRlciBhbGwgb3RoZXJzIGluIHRoZSBzeXN0ZW0uCiAgICBleGl0ID0gbmV3IEhCYXNpY0Jsb2NrKCk7CiAgfQoKICB2b2lkIGFkZEJsb2NrKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICBpbnQgaWQgPSBibG9ja3MubGVuZ3RoOwogICAgYmxvY2suaWQgPSBpZDsKICAgIGJsb2Nrcy5hZGQoYmxvY2spOwogICAgYXNzZXJ0KGlkZW50aWNhbChibG9ja3NbaWRdLCBibG9jaykpOwogIH0KCiAgSEJhc2ljQmxvY2sgYWRkTmV3QmxvY2soKSB7CiAgICBIQmFzaWNCbG9jayByZXN1bHQgPSBuZXcgSEJhc2ljQmxvY2soKTsKICAgIGFkZEJsb2NrKHJlc3VsdCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgSEJhc2ljQmxvY2sgYWRkTmV3TG9vcEhlYWRlckJsb2NrKAogICAgICBKdW1wVGFyZ2V0IHRhcmdldCwgTGlzdDxMYWJlbERlZmluaXRpb24+IGxhYmVscykgewogICAgSEJhc2ljQmxvY2sgcmVzdWx0ID0gYWRkTmV3QmxvY2soKTsKICAgIHJlc3VsdC5sb29wSW5mb3JtYXRpb24gPSBuZXcgSExvb3BJbmZvcm1hdGlvbihyZXN1bHQsIHRhcmdldCwgbGFiZWxzKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBIQ29uc3RhbnQgYWRkQ29uc3RhbnQoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICB7U291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb259KSB7CiAgICBIQ29uc3RhbnQgcmVzdWx0ID0gY29uc3RhbnRzW2NvbnN0YW50XTsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1cHBvcnQgc291cmNlIGluZm9ybWF0aW9uIHBlciBjb25zdGFudCByZWZlcmVuY2UuCiAgICBpZiAocmVzdWx0ID09IG51bGwpIHsKICAgICAgaWYgKCFjb25zdGFudC5pc0NvbnN0YW50KSB7CiAgICAgICAgLy8gV2UgdXNlIGBudWxsYCBhcyB0aGUgdmFsdWUgZm9yIGludmFsaWQgY29uc3RhbnQgZXhwcmVzc2lvbnMuCiAgICAgICAgY29uc3RhbnQgPSBjb25zdCBOdWxsQ29uc3RhbnRWYWx1ZSgpOwogICAgICB9CiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSA9IGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAgIC5jb21wdXRlQWJzdHJhY3RWYWx1ZUZvckNvbnN0YW50KGNvbnN0YW50KTsKICAgICAgcmVzdWx0ID0gbmV3IEhDb25zdGFudC5pbnRlcm5hbChjb25zdGFudCwgdHlwZSkKICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgICAgIGVudHJ5LmFkZEF0RXhpdChyZXN1bHQpOwogICAgICBjb25zdGFudHNbY29uc3RhbnRdID0gcmVzdWx0OwogICAgfSBlbHNlIGlmIChyZXN1bHQuYmxvY2sgPT0gbnVsbCkgewogICAgICAvLyBUaGUgY29uc3RhbnQgd2FzIG5vdCB1c2VkIGFueW1vcmUuCiAgICAgIGVudHJ5LmFkZEF0RXhpdChyZXN1bHQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEhDb25zdGFudCBhZGREZWZlcnJlZENvbnN0YW50KERlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGFkZENvbnN0YW50KGNvbnN0YW50LCBjbG9zZWRXb3JsZCwKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgSENvbnN0YW50IGFkZENvbnN0YW50SW50KGludCBpLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBhZGRDb25zdGFudChjb25zdGFudF9zeXN0ZW0uY3JlYXRlSW50RnJvbUludChpKSwgY2xvc2VkV29ybGQpOwogIH0KCiAgSENvbnN0YW50IGFkZENvbnN0YW50SW50QXNVbnNpZ25lZChpbnQgaSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gYWRkQ29uc3RhbnQoCiAgICAgICAgY29uc3RhbnRfc3lzdGVtLmNyZWF0ZUludChuZXcgQmlnSW50LmZyb20oaSkudG9VbnNpZ25lZCg2NCkpLAogICAgICAgIGNsb3NlZFdvcmxkKTsKICB9CgogIEhDb25zdGFudCBhZGRDb25zdGFudERvdWJsZShkb3VibGUgZCwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gYWRkQ29uc3RhbnQoY29uc3RhbnRfc3lzdGVtLmNyZWF0ZURvdWJsZShkKSwgY2xvc2VkV29ybGQpOwogIH0KCiAgSENvbnN0YW50IGFkZENvbnN0YW50U3RyaW5nKFN0cmluZyBzdHIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGFkZENvbnN0YW50KGNvbnN0YW50X3N5c3RlbS5jcmVhdGVTdHJpbmcoc3RyKSwgY2xvc2VkV29ybGQpOwogIH0KCiAgSENvbnN0YW50IGFkZENvbnN0YW50U3RyaW5nRnJvbU5hbWUoanMuTmFtZSBuYW1lLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBhZGRDb25zdGFudCgKICAgICAgICBuZXcgSnNOYW1lQ29uc3RhbnRWYWx1ZShqcy5xdW90ZU5hbWUobmFtZSkpLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBIQ29uc3RhbnQgYWRkQ29uc3RhbnRCb29sKGJvb2wgdmFsdWUsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGFkZENvbnN0YW50KGNvbnN0YW50X3N5c3RlbS5jcmVhdGVCb29sKHZhbHVlKSwgY2xvc2VkV29ybGQpOwogIH0KCiAgSENvbnN0YW50IGFkZENvbnN0YW50TnVsbChKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBhZGRDb25zdGFudChjb25zdGFudF9zeXN0ZW0uY3JlYXRlTnVsbCgpLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBIQ29uc3RhbnQgYWRkQ29uc3RhbnRVbnJlYWNoYWJsZShKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIC8vIEEgY29uc3RhbnQgd2l0aCBhbiBlbXB0eSB0eXBlIHVzZWQgYXMgdGhlIEhJbnN0cnVjdGlvbiBvZiBhbiBleHByZXNzaW9uCiAgICAvLyBpbiBhbiB1bnJlYWNoYWJsZSBjb250ZXh0LgogICAgcmV0dXJuIGFkZENvbnN0YW50KGNvbnN0IFVucmVhY2hhYmxlQ29uc3RhbnRWYWx1ZSgpLCBjbG9zZWRXb3JsZCk7CiAgfQoKICB2b2lkIGZpbmFsaXplKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSB7CiAgICBhZGRCbG9jayhleGl0KTsKICAgIGV4aXQub3BlbigpOwogICAgZXhpdC5jbG9zZShuZXcgSEV4aXQoZG9tYWluKSk7CiAgICBhc3NpZ25Eb21pbmF0b3JzKCk7CiAgfQoKICB2b2lkIGFzc2lnbkRvbWluYXRvcnMoKSB7CiAgICAvLyBSdW4gdGhyb3VnaCB0aGUgYmxvY2tzIGluIG9yZGVyIG9mIGluY3JlYXNpbmcgaWRzIHNvIHdlIGFyZQogICAgLy8gZ3VhcmFudGVlZCB0aGF0IHdlIGhhdmUgY29tcHV0ZWQgZG9taW5hdG9ycyBmb3IgYWxsIGJsb2NrcwogICAgLy8gaGlnaGVyIHVwIGluIHRoZSBkb21pbmF0b3IgdHJlZS4KICAgIGZvciAoaW50IGkgPSAwLCBsZW5ndGggPSBibG9ja3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgSEJhc2ljQmxvY2sgYmxvY2sgPSBibG9ja3NbaV07CiAgICAgIExpc3Q8SEJhc2ljQmxvY2s+IHByZWRlY2Vzc29ycyA9IGJsb2NrLnByZWRlY2Vzc29yczsKICAgICAgaWYgKGJsb2NrLmlzTG9vcEhlYWRlcigpKSB7CiAgICAgICAgYmxvY2suYXNzaWduQ29tbW9uRG9taW5hdG9yKHByZWRlY2Vzc29yc1swXSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZm9yIChpbnQgaiA9IHByZWRlY2Vzc29ycy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkgewogICAgICAgICAgYmxvY2suYXNzaWduQ29tbW9uRG9taW5hdG9yKHByZWRlY2Vzc29yc1tqXSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBhc3NpZ25Eb21pbmF0b3JSYW5nZXMoKTsKICB9CgogIHZvaWQgYXNzaWduRG9taW5hdG9yUmFuZ2VzKCkgewogICAgLy8gREZTIHdhbGsgb2YgZG9taW5hdG9yIHRyZWUgdG8gYXNzaWduIGRmcy1pbiBhbmQgZGZzLW91dCBudW1iZXJzIHRvIGJhc2ljCiAgICAvLyBibG9ja3MuIEEgZG9taW5hdG9yIGhhcyBhIGRmcy1pbi4uZGZzLW91dCByYW5nZSB0aGF0IGluY2x1ZGVzIHRoZSByYW5nZQogICAgLy8gb2YgdGhlIGRvbWluYXRlZCBibG9jay4gU2VlIFtIR3JhcGhWaXNpdG9yLnZpc2l0RG9taW5hdG9yVHJlZV0gZm9yCiAgICAvLyByZWN1cnNpb24tZnJlZSBzY2hlbWEuCiAgICBfRnJhbWUgZnJhbWUgPSBuZXcgX0ZyYW1lKG51bGwpOwogICAgZnJhbWUuYmxvY2sgPSBlbnRyeTsKICAgIGZyYW1lLmluZGV4ID0gMDsKCiAgICBpbnQgZGZzTnVtYmVyID0gMDsKICAgIGZyYW1lLmJsb2NrLmRvbWluYXRvckRmc0luID0gZGZzTnVtYmVyOwoKICAgIHdoaWxlIChmcmFtZSAhPSBudWxsKSB7CiAgICAgIEhCYXNpY0Jsb2NrIGJsb2NrID0gZnJhbWUuYmxvY2s7CiAgICAgIGludCBpbmRleCA9IGZyYW1lLmluZGV4OwogICAgICBpZiAoaW5kZXggPCBibG9jay5kb21pbmF0ZWRCbG9ja3MubGVuZ3RoKSB7CiAgICAgICAgZnJhbWUuaW5kZXggPSBpbmRleCArIDE7CiAgICAgICAgZnJhbWUgPSBmcmFtZS5uZXh0ID8/PSBuZXcgX0ZyYW1lKGZyYW1lKTsKICAgICAgICBmcmFtZS5ibG9jayA9IGJsb2NrLmRvbWluYXRlZEJsb2Nrc1tpbmRleF07CiAgICAgICAgZnJhbWUuaW5kZXggPSAwOwogICAgICAgIGZyYW1lLmJsb2NrLmRvbWluYXRvckRmc0luID0gKytkZnNOdW1iZXI7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgYmxvY2suZG9taW5hdG9yRGZzT3V0ID0gZGZzTnVtYmVyOwogICAgICBmcmFtZSA9IGZyYW1lLnByZXZpb3VzOwogICAgfQogIH0KCiAgYm9vbCBpc1ZhbGlkKCkgewogICAgSFZhbGlkYXRvciB2YWxpZGF0b3IgPSBuZXcgSFZhbGlkYXRvcigpOwogICAgdmFsaWRhdG9yLnZpc2l0R3JhcGgodGhpcyk7CiAgICByZXR1cm4gdmFsaWRhdG9yLmlzVmFsaWQ7CiAgfQoKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICdIR3JhcGgoJGVsZW1lbnQpJzsKfQoKY2xhc3MgSEJhc2VWaXNpdG9yIGV4dGVuZHMgSEdyYXBoVmlzaXRvciBpbXBsZW1lbnRzIEhWaXNpdG9yIHsKICBIQmFzaWNCbG9jayBjdXJyZW50QmxvY2s7CgogIEBvdmVycmlkZQogIHZpc2l0QmFzaWNCbG9jayhIQmFzaWNCbG9jayBub2RlKSB7CiAgICBjdXJyZW50QmxvY2sgPSBub2RlOwoKICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IG5vZGUuZmlyc3Q7CiAgICB3aGlsZSAoaW5zdHJ1Y3Rpb24gIT0gbnVsbCkgewogICAgICBpbnN0cnVjdGlvbi5hY2NlcHQodGhpcyk7CiAgICAgIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb24ubmV4dDsKICAgIH0KICB9CgogIHZpc2l0SW5zdHJ1Y3Rpb24oSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7fQoKICB2aXNpdEJpbmFyeUFyaXRobWV0aWMoSEJpbmFyeUFyaXRobWV0aWMgbm9kZSkgPT4gdmlzaXRJbnZva2VCaW5hcnkobm9kZSk7CiAgdmlzaXRCaW5hcnlCaXRPcChIQmluYXJ5Qml0T3Agbm9kZSkgPT4gdmlzaXRJbnZva2VCaW5hcnkobm9kZSk7CiAgdmlzaXRJbnZva2UoSEludm9rZSBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIHZpc2l0SW52b2tlQmluYXJ5KEhJbnZva2VCaW5hcnkgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICB2aXNpdEludm9rZUR5bmFtaWMoSEludm9rZUR5bmFtaWMgbm9kZSkgPT4gdmlzaXRJbnZva2Uobm9kZSk7CiAgdmlzaXRJbnZva2VEeW5hbWljRmllbGQoSEludm9rZUR5bmFtaWNGaWVsZCBub2RlKSA9PiB2aXNpdEludm9rZUR5bmFtaWMobm9kZSk7CiAgdmlzaXRJbnZva2VVbmFyeShISW52b2tlVW5hcnkgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICB2aXNpdENvbmRpdGlvbmFsQnJhbmNoKEhDb25kaXRpb25hbEJyYW5jaCBub2RlKSA9PiB2aXNpdENvbnRyb2xGbG93KG5vZGUpOwogIHZpc2l0Q29udHJvbEZsb3coSENvbnRyb2xGbG93IG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgdmlzaXRGaWVsZEFjY2VzcyhIRmllbGRBY2Nlc3Mgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICB2aXNpdFJlbGF0aW9uYWwoSFJlbGF0aW9uYWwgbm9kZSkgPT4gdmlzaXRJbnZva2VCaW5hcnkobm9kZSk7CgogIEBvdmVycmlkZQogIHZpc2l0QWJzKEhBYnMgbm9kZSkgPT4gdmlzaXRJbnZva2VVbmFyeShub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEFkZChIQWRkIG5vZGUpID0+IHZpc2l0QmluYXJ5QXJpdGhtZXRpYyhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEJpdEFuZChIQml0QW5kIG5vZGUpID0+IHZpc2l0QmluYXJ5Qml0T3Aobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRCaXROb3QoSEJpdE5vdCBub2RlKSA9PiB2aXNpdEludm9rZVVuYXJ5KG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0Qml0T3IoSEJpdE9yIG5vZGUpID0+IHZpc2l0QmluYXJ5Qml0T3Aobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRCaXRYb3IoSEJpdFhvciBub2RlKSA9PiB2aXNpdEJpbmFyeUJpdE9wKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0Qm91bmRzQ2hlY2soSEJvdW5kc0NoZWNrIG5vZGUpID0+IHZpc2l0Q2hlY2sobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRCcmVhayhIQnJlYWsgbm9kZSkgPT4gdmlzaXRKdW1wKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0Q29udGludWUoSENvbnRpbnVlIG5vZGUpID0+IHZpc2l0SnVtcChub2RlKTsKICB2aXNpdENoZWNrKEhDaGVjayBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0Q29uc3RhbnQoSENvbnN0YW50IG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRDcmVhdGUoSENyZWF0ZSBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0Q3JlYXRlQm94KEhDcmVhdGVCb3ggbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdERpdmlkZShIRGl2aWRlIG5vZGUpID0+IHZpc2l0QmluYXJ5QXJpdGhtZXRpYyhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEV4aXQoSEV4aXQgbm9kZSkgPT4gdmlzaXRDb250cm9sRmxvdyhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEV4aXRUcnkoSEV4aXRUcnkgbm9kZSkgPT4gdmlzaXRDb250cm9sRmxvdyhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEZpZWxkR2V0KEhGaWVsZEdldCBub2RlKSA9PiB2aXNpdEZpZWxkQWNjZXNzKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0RmllbGRTZXQoSEZpZWxkU2V0IG5vZGUpID0+IHZpc2l0RmllbGRBY2Nlc3Mobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRGb3JlaWduQ29kZShIRm9yZWlnbkNvZGUgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEdldExlbmd0aChIR2V0TGVuZ3RoIG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRHb3RvKEhHb3RvIG5vZGUpID0+IHZpc2l0Q29udHJvbEZsb3cobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRHcmVhdGVyKEhHcmVhdGVyIG5vZGUpID0+IHZpc2l0UmVsYXRpb25hbChub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEdyZWF0ZXJFcXVhbChIR3JlYXRlckVxdWFsIG5vZGUpID0+IHZpc2l0UmVsYXRpb25hbChub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdElkZW50aXR5KEhJZGVudGl0eSBub2RlKSA9PiB2aXNpdFJlbGF0aW9uYWwobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRJZihISWYgbm9kZSkgPT4gdmlzaXRDb25kaXRpb25hbEJyYW5jaChub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEluZGV4KEhJbmRleCBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0SW5kZXhBc3NpZ24oSEluZGV4QXNzaWduIG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRJbnRlcmNlcHRvcihISW50ZXJjZXB0b3Igbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEludm9rZUNsb3N1cmUoSEludm9rZUNsb3N1cmUgbm9kZSkgPT4gdmlzaXRJbnZva2VEeW5hbWljKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0SW52b2tlQ29uc3RydWN0b3JCb2R5KEhJbnZva2VDb25zdHJ1Y3RvckJvZHkgbm9kZSkgPT4KICAgICAgdmlzaXRJbnZva2VTdGF0aWMobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRJbnZva2VHZW5lcmF0b3JCb2R5KEhJbnZva2VHZW5lcmF0b3JCb2R5IG5vZGUpID0+CiAgICAgIHZpc2l0SW52b2tlU3RhdGljKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0SW52b2tlRHluYW1pY01ldGhvZChISW52b2tlRHluYW1pY01ldGhvZCBub2RlKSA9PgogICAgICB2aXNpdEludm9rZUR5bmFtaWMobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRJbnZva2VEeW5hbWljR2V0dGVyKEhJbnZva2VEeW5hbWljR2V0dGVyIG5vZGUpID0+CiAgICAgIHZpc2l0SW52b2tlRHluYW1pY0ZpZWxkKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0SW52b2tlRHluYW1pY1NldHRlcihISW52b2tlRHluYW1pY1NldHRlciBub2RlKSA9PgogICAgICB2aXNpdEludm9rZUR5bmFtaWNGaWVsZChub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEludm9rZVN0YXRpYyhISW52b2tlU3RhdGljIG5vZGUpID0+IHZpc2l0SW52b2tlKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0SW52b2tlU3VwZXIoSEludm9rZVN1cGVyIG5vZGUpID0+IHZpc2l0SW52b2tlU3RhdGljKG5vZGUpOwogIHZpc2l0SnVtcChISnVtcCBub2RlKSA9PiB2aXNpdENvbnRyb2xGbG93KG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0TGF6eVN0YXRpYyhITGF6eVN0YXRpYyBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0TGVzcyhITGVzcyBub2RlKSA9PiB2aXNpdFJlbGF0aW9uYWwobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRMZXNzRXF1YWwoSExlc3NFcXVhbCBub2RlKSA9PiB2aXNpdFJlbGF0aW9uYWwobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRMaXRlcmFsTGlzdChITGl0ZXJhbExpc3Qgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICB2aXNpdExvY2FsQWNjZXNzKEhMb2NhbEFjY2VzcyBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0TG9jYWxHZXQoSExvY2FsR2V0IG5vZGUpID0+IHZpc2l0TG9jYWxBY2Nlc3Mobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRMb2NhbFNldChITG9jYWxTZXQgbm9kZSkgPT4gdmlzaXRMb2NhbEFjY2Vzcyhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdExvY2FsVmFsdWUoSExvY2FsVmFsdWUgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdExvb3BCcmFuY2goSExvb3BCcmFuY2ggbm9kZSkgPT4gdmlzaXRDb25kaXRpb25hbEJyYW5jaChub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdE5lZ2F0ZShITmVnYXRlIG5vZGUpID0+IHZpc2l0SW52b2tlVW5hcnkobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXROb3QoSE5vdCBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0T25lU2hvdEludGVyY2VwdG9yKEhPbmVTaG90SW50ZXJjZXB0b3Igbm9kZSkgPT4gdmlzaXRJbnZva2VEeW5hbWljKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0UGhpKEhQaGkgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdE11bHRpcGx5KEhNdWx0aXBseSBub2RlKSA9PiB2aXNpdEJpbmFyeUFyaXRobWV0aWMobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRQYXJhbWV0ZXJWYWx1ZShIUGFyYW1ldGVyVmFsdWUgbm9kZSkgPT4gdmlzaXRMb2NhbFZhbHVlKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0UmFuZ2VDb252ZXJzaW9uKEhSYW5nZUNvbnZlcnNpb24gbm9kZSkgPT4gdmlzaXRDaGVjayhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdFJlYWRNb2RpZnlXcml0ZShIUmVhZE1vZGlmeVdyaXRlIG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRSZWYoSFJlZiBub2RlKSA9PiBub2RlLnZhbHVlLmFjY2VwdCh0aGlzKTsKICBAb3ZlcnJpZGUKICB2aXNpdFJlbWFpbmRlcihIUmVtYWluZGVyIG5vZGUpID0+IHZpc2l0QmluYXJ5QXJpdGhtZXRpYyhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdFJldHVybihIUmV0dXJuIG5vZGUpID0+IHZpc2l0Q29udHJvbEZsb3cobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRTaGlmdExlZnQoSFNoaWZ0TGVmdCBub2RlKSA9PiB2aXNpdEJpbmFyeUJpdE9wKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0U2hpZnRSaWdodChIU2hpZnRSaWdodCBub2RlKSA9PiB2aXNpdEJpbmFyeUJpdE9wKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0U3VidHJhY3QoSFN1YnRyYWN0IG5vZGUpID0+IHZpc2l0QmluYXJ5QXJpdGhtZXRpYyhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdFN3aXRjaChIU3dpdGNoIG5vZGUpID0+IHZpc2l0Q29udHJvbEZsb3cobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRTdGF0aWMoSFN0YXRpYyBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0U3RhdGljU3RvcmUoSFN0YXRpY1N0b3JlIG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRTdHJpbmdDb25jYXQoSFN0cmluZ0NvbmNhdCBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0U3RyaW5naWZ5KEhTdHJpbmdpZnkgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdFRoaXMoSFRoaXMgbm9kZSkgPT4gdmlzaXRQYXJhbWV0ZXJWYWx1ZShub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdFRocm93KEhUaHJvdyBub2RlKSA9PiB2aXNpdENvbnRyb2xGbG93KG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0VGhyb3dFeHByZXNzaW9uKEhUaHJvd0V4cHJlc3Npb24gbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdFRydW5jYXRpbmdEaXZpZGUoSFRydW5jYXRpbmdEaXZpZGUgbm9kZSkgPT4gdmlzaXRCaW5hcnlBcml0aG1ldGljKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0VHJ5KEhUcnkgbm9kZSkgPT4gdmlzaXRDb250cm9sRmxvdyhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdElzKEhJcyBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0TGF0ZVZhbHVlKEhMYXRlVmFsdWUgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdElzVmlhSW50ZXJjZXB0b3IoSElzVmlhSW50ZXJjZXB0b3Igbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdFR5cGVDb252ZXJzaW9uKEhUeXBlQ29udmVyc2lvbiBub2RlKSA9PiB2aXNpdENoZWNrKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0Qm9vbENvbnZlcnNpb24oSEJvb2xDb252ZXJzaW9uIG5vZGUpID0+IHZpc2l0Q2hlY2sobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRQcmltaXRpdmVDaGVjayhIUHJpbWl0aXZlQ2hlY2sgbm9kZSkgPT4gdmlzaXRDaGVjayhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdFR5cGVLbm93bihIVHlwZUtub3duIG5vZGUpID0+IHZpc2l0Q2hlY2sobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRBd2FpdChIQXdhaXQgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdFlpZWxkKEhZaWVsZCBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwoKICBAb3ZlcnJpZGUKICB2aXNpdFR5cGVJbmZvUmVhZFJhdyhIVHlwZUluZm9SZWFkUmF3IG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRUeXBlSW5mb1JlYWRWYXJpYWJsZShIVHlwZUluZm9SZWFkVmFyaWFibGUgbm9kZSkgPT4KICAgICAgdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKCiAgQG92ZXJyaWRlCiAgdmlzaXRUeXBlSW5mb0V4cHJlc3Npb24oSFR5cGVJbmZvRXhwcmVzc2lvbiBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwoKICBAb3ZlcnJpZGUKICB2aXNpdElzVGVzdChISXNUZXN0IG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRBc0NoZWNrKEhBc0NoZWNrIG5vZGUpID0+IHZpc2l0Q2hlY2sobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRBc0NoZWNrU2ltcGxlKEhBc0NoZWNrU2ltcGxlIG5vZGUpID0+IHZpc2l0Q2hlY2sobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRTdWJ0eXBlQ2hlY2soSFN1YnR5cGVDaGVjayBub2RlKSA9PiB2aXNpdENoZWNrKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0TG9hZFR5cGUoSExvYWRUeXBlIG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRJbnN0YW5jZUVudmlyb25tZW50KEhJbnN0YW5jZUVudmlyb25tZW50IG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRUeXBlRXZhbChIVHlwZUV2YWwgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdFR5cGVCaW5kKEhUeXBlQmluZCBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwp9CgpjbGFzcyBTdWJHcmFwaCB7CiAgLy8gVGhlIGZpcnN0IGFuZCBsYXN0IGJsb2NrIG9mIHRoZSBzdWItZ3JhcGguCiAgZmluYWwgSEJhc2ljQmxvY2sgc3RhcnQ7CiAgZmluYWwgSEJhc2ljQmxvY2sgZW5kOwoKICBjb25zdCBTdWJHcmFwaCh0aGlzLnN0YXJ0LCB0aGlzLmVuZCk7CgogIGJvb2wgY29udGFpbnMoSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIGFzc2VydChzdGFydCAhPSBudWxsKTsKICAgIGFzc2VydChlbmQgIT0gbnVsbCk7CiAgICBhc3NlcnQoYmxvY2sgIT0gbnVsbCk7CiAgICByZXR1cm4gc3RhcnQuaWQgPD0gYmxvY2suaWQgJiYgYmxvY2suaWQgPD0gZW5kLmlkOwogIH0KfQoKY2xhc3MgU3ViRXhwcmVzc2lvbiBleHRlbmRzIFN1YkdyYXBoIHsKICBjb25zdCBTdWJFeHByZXNzaW9uKEhCYXNpY0Jsb2NrIHN0YXJ0LCBIQmFzaWNCbG9jayBlbmQpIDogc3VwZXIoc3RhcnQsIGVuZCk7CgogIC8vLyBGaW5kIHRoZSBjb25kaXRpb24gZXhwcmVzc2lvbiBpZiB0aGlzIHN1Yi1leHByZXNzaW9uIGlzIGEgY29uZGl0aW9uLgogIEhJbnN0cnVjdGlvbiBnZXQgY29uZGl0aW9uRXhwcmVzc2lvbiB7CiAgICBISW5zdHJ1Y3Rpb24gbGFzdCA9IGVuZC5sYXN0OwogICAgaWYgKGxhc3QgaXMgSENvbmRpdGlvbmFsQnJhbmNoIHx8IGxhc3QgaXMgSFN3aXRjaCkgcmV0dXJuIGxhc3QuaW5wdXRzWzBdOwogICAgcmV0dXJuIG51bGw7CiAgfQp9CgpjbGFzcyBISW5zdHJ1Y3Rpb25MaXN0IHsKICBISW5zdHJ1Y3Rpb24gZmlyc3QgPSBudWxsOwogIEhJbnN0cnVjdGlvbiBsYXN0ID0gbnVsbDsKCiAgYm9vbCBnZXQgaXNFbXB0eSB7CiAgICByZXR1cm4gZmlyc3QgPT0gbnVsbDsKICB9CgogIHZvaWQgaW50ZXJuYWxBZGRBZnRlcihISW5zdHJ1Y3Rpb24gY3Vyc29yLCBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGlmIChjdXJzb3IgPT0gbnVsbCkgewogICAgICBhc3NlcnQoaXNFbXB0eSk7CiAgICAgIGZpcnN0ID0gbGFzdCA9IGluc3RydWN0aW9uOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwoY3Vyc29yLCBsYXN0KSkgewogICAgICBsYXN0Lm5leHQgPSBpbnN0cnVjdGlvbjsKICAgICAgaW5zdHJ1Y3Rpb24ucHJldmlvdXMgPSBsYXN0OwogICAgICBsYXN0ID0gaW5zdHJ1Y3Rpb247CiAgICB9IGVsc2UgewogICAgICBpbnN0cnVjdGlvbi5wcmV2aW91cyA9IGN1cnNvcjsKICAgICAgaW5zdHJ1Y3Rpb24ubmV4dCA9IGN1cnNvci5uZXh0OwogICAgICBjdXJzb3IubmV4dC5wcmV2aW91cyA9IGluc3RydWN0aW9uOwogICAgICBjdXJzb3IubmV4dCA9IGluc3RydWN0aW9uOwogICAgfQogIH0KCiAgdm9pZCBpbnRlcm5hbEFkZEJlZm9yZShISW5zdHJ1Y3Rpb24gY3Vyc29yLCBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGlmIChjdXJzb3IgPT0gbnVsbCkgewogICAgICBhc3NlcnQoaXNFbXB0eSk7CiAgICAgIGZpcnN0ID0gbGFzdCA9IGluc3RydWN0aW9uOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwoY3Vyc29yLCBmaXJzdCkpIHsKICAgICAgZmlyc3QucHJldmlvdXMgPSBpbnN0cnVjdGlvbjsKICAgICAgaW5zdHJ1Y3Rpb24ubmV4dCA9IGZpcnN0OwogICAgICBmaXJzdCA9IGluc3RydWN0aW9uOwogICAgfSBlbHNlIHsKICAgICAgaW5zdHJ1Y3Rpb24ubmV4dCA9IGN1cnNvcjsKICAgICAgaW5zdHJ1Y3Rpb24ucHJldmlvdXMgPSBjdXJzb3IucHJldmlvdXM7CiAgICAgIGN1cnNvci5wcmV2aW91cy5uZXh0ID0gaW5zdHJ1Y3Rpb247CiAgICAgIGN1cnNvci5wcmV2aW91cyA9IGluc3RydWN0aW9uOwogICAgfQogIH0KCiAgdm9pZCBkZXRhY2goSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBhc3NlcnQoX3RydW5jYXRlZENvbnRhaW5zRm9yQXNzZXJ0KGluc3RydWN0aW9uKSk7CiAgICBhc3NlcnQoaW5zdHJ1Y3Rpb24uaXNJbkJhc2ljQmxvY2soKSk7CiAgICBpZiAoaW5zdHJ1Y3Rpb24ucHJldmlvdXMgPT0gbnVsbCkgewogICAgICBmaXJzdCA9IGluc3RydWN0aW9uLm5leHQ7CiAgICB9IGVsc2UgewogICAgICBpbnN0cnVjdGlvbi5wcmV2aW91cy5uZXh0ID0gaW5zdHJ1Y3Rpb24ubmV4dDsKICAgIH0KICAgIGlmIChpbnN0cnVjdGlvbi5uZXh0ID09IG51bGwpIHsKICAgICAgbGFzdCA9IGluc3RydWN0aW9uLnByZXZpb3VzOwogICAgfSBlbHNlIHsKICAgICAgaW5zdHJ1Y3Rpb24ubmV4dC5wcmV2aW91cyA9IGluc3RydWN0aW9uLnByZXZpb3VzOwogICAgfQogICAgaW5zdHJ1Y3Rpb24ucHJldmlvdXMgPSBudWxsOwogICAgaW5zdHJ1Y3Rpb24ubmV4dCA9IG51bGw7CiAgfQoKICB2b2lkIHJlbW92ZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGFzc2VydChpbnN0cnVjdGlvbi51c2VkQnkuaXNFbXB0eSk7CiAgICBkZXRhY2goaW5zdHJ1Y3Rpb24pOwogIH0KCiAgLy8vIExpbmVhciBzZWFyY2ggZm9yIFtpbnN0cnVjdGlvbl0uCiAgYm9vbCBjb250YWlucyhISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIEhJbnN0cnVjdGlvbiBjdXJzb3IgPSBmaXJzdDsKICAgIHdoaWxlIChjdXJzb3IgIT0gbnVsbCkgewogICAgICBpZiAoaWRlbnRpY2FsKGN1cnNvciwgaW5zdHJ1Y3Rpb24pKSByZXR1cm4gdHJ1ZTsKICAgICAgY3Vyc29yID0gY3Vyc29yLm5leHQ7CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8vIExpbmVhciBzZWFyY2ggZm9yIFtpbnN0cnVjdGlvbl0sIHVwIHRvIGEgbGltaXQgb2YgMTAwLiBSZXR1cm5zIHdoZXRoZXIKICAvLy8gdGhlIGluc3RydWN0aW9uIGlzIGZvdW5kIG9yIHRoZSBsaXN0IGlzIHRvbyBiaWcuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCBmb3IgYXNzZXJ0aW9ucyBvbmx5OiBzb21lIHRlc3RzIGhhdmUgcGF0aG9sb2dpY2FsIGNhc2VzIHdoZXJlCiAgLy8vIHRoZSBiYXNpYyBibG9ja3MgYXJlIGh1Z2UgKDUwSyBub2RlcyEpLCBhbmQgd2UgZm91bmQgdGhhdCBjaGVja2luZyBmb3IKICAvLy8gW2NvbnRhaW5zXSB3aXRoaW4gb3VyIGFzc2VydGlvbnMgbWFkZSBjb21waWxhdGlvbiByZWFsbHkgc2xvdy4KICBib29sIF90cnVuY2F0ZWRDb250YWluc0ZvckFzc2VydChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIEhJbnN0cnVjdGlvbiBjdXJzb3IgPSBmaXJzdDsKICAgIGludCBjb3VudCA9IDA7CiAgICB3aGlsZSAoY3Vyc29yICE9IG51bGwpIHsKICAgICAgY291bnQrKzsKICAgICAgaWYgKGNvdW50ID4gMTAwKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGlkZW50aWNhbChjdXJzb3IsIGluc3RydWN0aW9uKSkgcmV0dXJuIHRydWU7CiAgICAgIGN1cnNvciA9IGN1cnNvci5uZXh0OwogICAgfQoKICAgIHJldHVybiBmYWxzZTsKICB9Cn0KCmNsYXNzIEhCYXNpY0Jsb2NrIGV4dGVuZHMgSEluc3RydWN0aW9uTGlzdCB7CiAgLy8gVGhlIFtpZF0gbXVzdCBiZSBzdWNoIHRoYXQgYW55IHN1Y2Nlc3NvcidzIGlkIGlzIGdyZWF0ZXIgdGhhbgogIC8vIHRoaXMgW2lkXS4gVGhlIGV4Y2VwdGlvbiBhcmUgYmFjay1lZGdlcy4KICBpbnQgaWQ7CgogIHN0YXRpYyBjb25zdCBpbnQgU1RBVFVTX05FVyA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBTVEFUVVNfT1BFTiA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBTVEFUVVNfQ0xPU0VEID0gMjsKICBpbnQgc3RhdHVzID0gU1RBVFVTX05FVzsKCiAgSEluc3RydWN0aW9uTGlzdCBwaGlzOwoKICBITG9vcEluZm9ybWF0aW9uIGxvb3BJbmZvcm1hdGlvbiA9IG51bGw7CiAgSEJsb2NrRmxvdyBibG9ja0Zsb3cgPSBudWxsOwogIEhCYXNpY0Jsb2NrIHBhcmVudExvb3BIZWFkZXIgPSBudWxsOwogIGJvb2wgaXNMaXZlID0gdHJ1ZTsKCiAgZmluYWwgTGlzdDxIQmFzaWNCbG9jaz4gcHJlZGVjZXNzb3JzOwogIExpc3Q8SEJhc2ljQmxvY2s+IHN1Y2Nlc3NvcnM7CgogIEhCYXNpY0Jsb2NrIGRvbWluYXRvciA9IG51bGw7CiAgZmluYWwgTGlzdDxIQmFzaWNCbG9jaz4gZG9taW5hdGVkQmxvY2tzOwogIGludCBkb21pbmF0b3JEZnNJbjsKICBpbnQgZG9taW5hdG9yRGZzT3V0OwoKICBIQmFzaWNCbG9jaygpIDogdGhpcy53aXRoSWQobnVsbCk7CiAgSEJhc2ljQmxvY2sud2l0aElkKHRoaXMuaWQpCiAgICAgIDogcGhpcyA9IG5ldyBISW5zdHJ1Y3Rpb25MaXN0KCksCiAgICAgICAgcHJlZGVjZXNzb3JzID0gPEhCYXNpY0Jsb2NrPltdLAogICAgICAgIHN1Y2Nlc3NvcnMgPSBjb25zdCA8SEJhc2ljQmxvY2s+W10sCiAgICAgICAgZG9taW5hdGVkQmxvY2tzID0gPEhCYXNpY0Jsb2NrPltdOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IGlkOwoKICBib29sIGlzTmV3KCkgPT4gc3RhdHVzID09IFNUQVRVU19ORVc7CiAgYm9vbCBpc09wZW4oKSA9PiBzdGF0dXMgPT0gU1RBVFVTX09QRU47CiAgYm9vbCBpc0Nsb3NlZCgpID0+IHN0YXR1cyA9PSBTVEFUVVNfQ0xPU0VEOwoKICBib29sIGlzTG9vcEhlYWRlcigpIHsKICAgIHJldHVybiBsb29wSW5mb3JtYXRpb24gIT0gbnVsbDsKICB9CgogIHZvaWQgc2V0QmxvY2tGbG93KEhCbG9ja0luZm9ybWF0aW9uIGJsb2NrSW5mbywgSEJhc2ljQmxvY2sgY29udGludWF0aW9uKSB7CiAgICBibG9ja0Zsb3cgPSBuZXcgSEJsb2NrRmxvdyhibG9ja0luZm8sIGNvbnRpbnVhdGlvbik7CiAgfQoKICBib29sIGlzTGFiZWxlZEJsb2NrKCkgPT4KICAgICAgYmxvY2tGbG93ICE9IG51bGwgJiYgYmxvY2tGbG93LmJvZHkgaXMgSExhYmVsZWRCbG9ja0luZm9ybWF0aW9uOwoKICBIQmFzaWNCbG9jayBnZXQgZW5jbG9zaW5nTG9vcEhlYWRlciB7CiAgICBpZiAoaXNMb29wSGVhZGVyKCkpIHJldHVybiB0aGlzOwogICAgcmV0dXJuIHBhcmVudExvb3BIZWFkZXI7CiAgfQoKICB2b2lkIG9wZW4oKSB7CiAgICBhc3NlcnQoaXNOZXcoKSk7CiAgICBzdGF0dXMgPSBTVEFUVVNfT1BFTjsKICB9CgogIHZvaWQgY2xvc2UoSENvbnRyb2xGbG93IGVuZCkgewogICAgYXNzZXJ0KGlzT3BlbigpKTsKICAgIGFkZEFmdGVyKGxhc3QsIGVuZCk7CiAgICBzdGF0dXMgPSBTVEFUVVNfQ0xPU0VEOwogIH0KCiAgdm9pZCBhZGRBdEVudHJ5KEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgYXNzZXJ0KGluc3RydWN0aW9uIGlzISBIUGhpKTsKICAgIGludGVybmFsQWRkQmVmb3JlKGZpcnN0LCBpbnN0cnVjdGlvbik7CiAgICBpbnN0cnVjdGlvbi5ub3RpZnlBZGRlZFRvQmxvY2sodGhpcyk7CiAgfQoKICB2b2lkIGFkZEF0RXhpdChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGFzc2VydChpc0Nsb3NlZCgpKTsKICAgIGFzc2VydChsYXN0IGlzIEhDb250cm9sRmxvdyk7CiAgICBhc3NlcnQoaW5zdHJ1Y3Rpb24gaXMhIEhQaGkpOwogICAgaW50ZXJuYWxBZGRCZWZvcmUobGFzdCwgaW5zdHJ1Y3Rpb24pOwogICAgaW5zdHJ1Y3Rpb24ubm90aWZ5QWRkZWRUb0Jsb2NrKHRoaXMpOwogIH0KCiAgdm9pZCBtb3ZlQXRFeGl0KEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgYXNzZXJ0KGluc3RydWN0aW9uIGlzISBIUGhpKTsKICAgIGFzc2VydChpbnN0cnVjdGlvbi5pc0luQmFzaWNCbG9jaygpKTsKICAgIGFzc2VydChpc0Nsb3NlZCgpKTsKICAgIGFzc2VydChsYXN0IGlzIEhDb250cm9sRmxvdyk7CiAgICBpbnRlcm5hbEFkZEJlZm9yZShsYXN0LCBpbnN0cnVjdGlvbik7CiAgICBpbnN0cnVjdGlvbi5ibG9jayA9IHRoaXM7CiAgICBhc3NlcnQoaXNWYWxpZCgpKTsKICB9CgogIHZvaWQgYWRkKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgYXNzZXJ0KGluc3RydWN0aW9uIGlzISBIQ29udHJvbEZsb3cpOwogICAgYXNzZXJ0KGluc3RydWN0aW9uIGlzISBIUGhpKTsKICAgIGludGVybmFsQWRkQWZ0ZXIobGFzdCwgaW5zdHJ1Y3Rpb24pOwogICAgaW5zdHJ1Y3Rpb24ubm90aWZ5QWRkZWRUb0Jsb2NrKHRoaXMpOwogIH0KCiAgdm9pZCBhZGRQaGkoSFBoaSBwaGkpIHsKICAgIGFzc2VydChwaGkuaW5wdXRzLmxlbmd0aCA9PSAwIHx8IHBoaS5pbnB1dHMubGVuZ3RoID09IHByZWRlY2Vzc29ycy5sZW5ndGgpOwogICAgYXNzZXJ0KHBoaS5ibG9jayA9PSBudWxsKTsKICAgIHBoaXMuaW50ZXJuYWxBZGRBZnRlcihwaGlzLmxhc3QsIHBoaSk7CiAgICBwaGkubm90aWZ5QWRkZWRUb0Jsb2NrKHRoaXMpOwogIH0KCiAgdm9pZCByZW1vdmVQaGkoSFBoaSBwaGkpIHsKICAgIHBoaXMucmVtb3ZlKHBoaSk7CiAgICBhc3NlcnQocGhpLmJsb2NrID09IHRoaXMpOwogICAgcGhpLm5vdGlmeVJlbW92ZWRGcm9tQmxvY2soKTsKICB9CgogIHZvaWQgYWRkQWZ0ZXIoSEluc3RydWN0aW9uIGN1cnNvciwgSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBhc3NlcnQoY3Vyc29yIGlzISBIUGhpKTsKICAgIGFzc2VydChpbnN0cnVjdGlvbiBpcyEgSFBoaSk7CiAgICBhc3NlcnQoaXNPcGVuKCkgfHwgaXNDbG9zZWQoKSk7CiAgICBpbnRlcm5hbEFkZEFmdGVyKGN1cnNvciwgaW5zdHJ1Y3Rpb24pOwogICAgaW5zdHJ1Y3Rpb24ubm90aWZ5QWRkZWRUb0Jsb2NrKHRoaXMpOwogIH0KCiAgdm9pZCBhZGRCZWZvcmUoSEluc3RydWN0aW9uIGN1cnNvciwgSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBhc3NlcnQoY3Vyc29yIGlzISBIUGhpKTsKICAgIGFzc2VydChpbnN0cnVjdGlvbiBpcyEgSFBoaSk7CiAgICBhc3NlcnQoaXNPcGVuKCkgfHwgaXNDbG9zZWQoKSk7CiAgICBpbnRlcm5hbEFkZEJlZm9yZShjdXJzb3IsIGluc3RydWN0aW9uKTsKICAgIGluc3RydWN0aW9uLm5vdGlmeUFkZGVkVG9CbG9jayh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVtb3ZlKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgYXNzZXJ0KGlzT3BlbigpIHx8IGlzQ2xvc2VkKCkpOwogICAgYXNzZXJ0KGluc3RydWN0aW9uIGlzISBIUGhpKTsKICAgIHN1cGVyLnJlbW92ZShpbnN0cnVjdGlvbik7CiAgICBhc3NlcnQoaW5zdHJ1Y3Rpb24uYmxvY2sgPT0gdGhpcyk7CiAgICBpbnN0cnVjdGlvbi5ub3RpZnlSZW1vdmVkRnJvbUJsb2NrKCk7CiAgfQoKICB2b2lkIGFkZFN1Y2Nlc3NvcihIQmFzaWNCbG9jayBibG9jaykgewogICAgaWYgKHN1Y2Nlc3NvcnMuaXNFbXB0eSkgewogICAgICBzdWNjZXNzb3JzID0gW2Jsb2NrXTsKICAgIH0gZWxzZSB7CiAgICAgIHN1Y2Nlc3NvcnMuYWRkKGJsb2NrKTsKICAgIH0KICAgIGJsb2NrLnByZWRlY2Vzc29ycy5hZGQodGhpcyk7CiAgfQoKICB2b2lkIHBvc3RQcm9jZXNzTG9vcEhlYWRlcigpIHsKICAgIGFzc2VydChpc0xvb3BIZWFkZXIoKSk7CiAgICAvLyBPbmx5IHRoZSBmaXJzdCBlbnRyeSBpbnRvIHRoZSBsb29wIGlzIGZyb20gb3V0c2lkZSB0aGUKICAgIC8vIGxvb3AuIEFsbCBvdGhlciBlbnRyaWVzIG11c3QgYmUgYmFjayBlZGdlcy4KICAgIGZvciAoaW50IGkgPSAxLCBsZW5ndGggPSBwcmVkZWNlc3NvcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgbG9vcEluZm9ybWF0aW9uLmFkZEJhY2tFZGdlKHByZWRlY2Vzc29yc1tpXSk7CiAgICB9CiAgfQoKICAvLy8gUmV3cml0ZXMgYWxsIHVzZXMgb2YgdGhlIFtmcm9tXSBpbnN0cnVjdGlvbiB0byB1c2luZyB0aGUgW3RvXQogIC8vLyBpbnN0cnVjdGlvbiBpbnN0ZWFkLgogIHZvaWQgcmV3cml0ZShISW5zdHJ1Y3Rpb24gZnJvbSwgSEluc3RydWN0aW9uIHRvKSB7CiAgICBmb3IgKEhJbnN0cnVjdGlvbiB1c2UgaW4gZnJvbS51c2VkQnkpIHsKICAgICAgdXNlLnJld3JpdGVJbnB1dChmcm9tLCB0byk7CiAgICB9CiAgICB0by51c2VkQnkuYWRkQWxsKGZyb20udXNlZEJ5KTsKICAgIGZyb20udXNlZEJ5LmNsZWFyKCk7CiAgfQoKICAvLy8gUmV3cml0ZXMgYWxsIHVzZXMgb2YgdGhlIFtmcm9tXSBpbnN0cnVjdGlvbiB0byB1c2luZyBlaXRoZXIgdGhlCiAgLy8vIFt0b10gaW5zdHJ1Y3Rpb24sIG9yIGEgW0hDaGVja10gaW5zdHJ1Y3Rpb24gdGhhdCBoYXMgYmV0dGVyIHR5cGUKICAvLy8gaW5mb3JtYXRpb24gb24gW3RvXSwgYW5kIHRoYXQgZG9taW5hdGVzIHRoZSB1c2VyLgogIHZvaWQgcmV3cml0ZVdpdGhCZXR0ZXJVc2VyKEhJbnN0cnVjdGlvbiBmcm9tLCBISW5zdHJ1Y3Rpb24gdG8pIHsKICAgIC8vIEJVRygxMTg0MSk6IFR1cm4gdGhpcyBtZXRob2QgaW50byBhIHBoYXNlIHRvIGJlIHJ1biBhZnRlciBHVk4gcGhhc2VzLgogICAgTGluazxIQ2hlY2s+IGJldHRlciA9IGNvbnN0IExpbms8SENoZWNrPigpOwogICAgZm9yIChISW5zdHJ1Y3Rpb24gdXNlciBpbiB0by51c2VkQnkpIHsKICAgICAgaWYgKHVzZXIgPT0gZnJvbSB8fCB1c2VyIGlzISBIQ2hlY2spIGNvbnRpbnVlOwogICAgICBIQ2hlY2sgY2hlY2sgPSB1c2VyOwogICAgICBpZiAoY2hlY2suY2hlY2tlZElucHV0ID09IHRvKSB7CiAgICAgICAgYmV0dGVyID0gYmV0dGVyLnByZXBlbmQodXNlcik7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoYmV0dGVyLmlzRW1wdHkpIHJldHVybiByZXdyaXRlKGZyb20sIHRvKTsKCiAgICBMMToKICAgIGZvciAoSEluc3RydWN0aW9uIHVzZXIgaW4gZnJvbS51c2VkQnkpIHsKICAgICAgZm9yIChIQ2hlY2sgY2hlY2sgaW4gYmV0dGVyKSB7CiAgICAgICAgaWYgKGNoZWNrLmRvbWluYXRlcyh1c2VyKSkgewogICAgICAgICAgdXNlci5yZXdyaXRlSW5wdXQoZnJvbSwgY2hlY2spOwogICAgICAgICAgY2hlY2sudXNlZEJ5LmFkZCh1c2VyKTsKICAgICAgICAgIGNvbnRpbnVlIEwxOwogICAgICAgIH0KICAgICAgfQogICAgICB1c2VyLnJld3JpdGVJbnB1dChmcm9tLCB0byk7CiAgICAgIHRvLnVzZWRCeS5hZGQodXNlcik7CiAgICB9CiAgICBmcm9tLnVzZWRCeS5jbGVhcigpOwogIH0KCiAgYm9vbCBpc0V4aXRCbG9jaygpIHsKICAgIHJldHVybiBpZGVudGljYWwoZmlyc3QsIGxhc3QpICYmIGZpcnN0IGlzIEhFeGl0OwogIH0KCiAgdm9pZCBhZGREb21pbmF0ZWRCbG9jayhIQmFzaWNCbG9jayBibG9jaykgewogICAgYXNzZXJ0KGlzQ2xvc2VkKCkpOwogICAgYXNzZXJ0KGlkICE9IG51bGwgJiYgYmxvY2suaWQgIT0gbnVsbCk7CiAgICBhc3NlcnQoZG9taW5hdGVkQmxvY2tzLmluZGV4T2YoYmxvY2spIDwgMCk7CiAgICAvLyBLZWVwIHRoZSBsaXN0IG9mIGRvbWluYXRlZCBibG9ja3Mgc29ydGVkIHN1Y2ggdGhhdCBpZiB0aGVyZSBhcmUgdHdvCiAgICAvLyBzdWNjZWVkaW5nIGJsb2NrcyBpbiB0aGUgbGlzdCwgdGhlIHByZWRlY2Vzc29yIGlzIGJlZm9yZSB0aGUgc3VjY2Vzc29yLgogICAgLy8gQXNzdW1lIHRoYXQgd2UgYWRkIHRoZSBkb21pbmF0ZWQgYmxvY2tzIGluIHRoZSByaWdodCBvcmRlci4KICAgIGludCBpbmRleCA9IGRvbWluYXRlZEJsb2Nrcy5sZW5ndGg7CiAgICB3aGlsZSAoaW5kZXggPiAwICYmIGRvbWluYXRlZEJsb2Nrc1tpbmRleCAtIDFdLmlkID4gYmxvY2suaWQpIHsKICAgICAgaW5kZXgtLTsKICAgIH0KICAgIGlmIChpbmRleCA9PSBkb21pbmF0ZWRCbG9ja3MubGVuZ3RoKSB7CiAgICAgIGRvbWluYXRlZEJsb2Nrcy5hZGQoYmxvY2spOwogICAgfSBlbHNlIHsKICAgICAgZG9taW5hdGVkQmxvY2tzLmluc2VydChpbmRleCwgYmxvY2spOwogICAgfQogICAgYXNzZXJ0KGJsb2NrLmRvbWluYXRvciA9PSBudWxsKTsKICAgIGJsb2NrLmRvbWluYXRvciA9IHRoaXM7CiAgfQoKICB2b2lkIHJlbW92ZURvbWluYXRlZEJsb2NrKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICBhc3NlcnQoaXNDbG9zZWQoKSk7CiAgICBhc3NlcnQoaWQgIT0gbnVsbCAmJiBibG9jay5pZCAhPSBudWxsKTsKICAgIGludCBpbmRleCA9IGRvbWluYXRlZEJsb2Nrcy5pbmRleE9mKGJsb2NrKTsKICAgIGFzc2VydChpbmRleCA+PSAwKTsKICAgIGlmIChpbmRleCA9PSBkb21pbmF0ZWRCbG9ja3MubGVuZ3RoIC0gMSkgewogICAgICBkb21pbmF0ZWRCbG9ja3MucmVtb3ZlTGFzdCgpOwogICAgfSBlbHNlIHsKICAgICAgZG9taW5hdGVkQmxvY2tzLnJlbW92ZVJhbmdlKGluZGV4LCBpbmRleCArIDEpOwogICAgfQogICAgYXNzZXJ0KGlkZW50aWNhbChibG9jay5kb21pbmF0b3IsIHRoaXMpKTsKICAgIGJsb2NrLmRvbWluYXRvciA9IG51bGw7CiAgfQoKICB2b2lkIGFzc2lnbkNvbW1vbkRvbWluYXRvcihIQmFzaWNCbG9jayBwcmVkZWNlc3NvcikgewogICAgYXNzZXJ0KGlzQ2xvc2VkKCkpOwogICAgaWYgKGRvbWluYXRvciA9PSBudWxsKSB7CiAgICAgIC8vIElmIHRoaXMgYmFzaWMgYmxvY2sgZG9lc24ndCBoYXZlIGEgZG9taW5hdG9yIHlldCB3ZSB1c2UgdGhlCiAgICAgIC8vIGdpdmVuIHByZWRlY2Vzc29yIGFzIHRoZSBkb21pbmF0b3IuCiAgICAgIHByZWRlY2Vzc29yLmFkZERvbWluYXRlZEJsb2NrKHRoaXMpOwogICAgfSBlbHNlIGlmIChwcmVkZWNlc3Nvci5kb21pbmF0b3IgIT0gbnVsbCkgewogICAgICAvLyBJZiB0aGUgcHJlZGVjZXNzb3IgaGFzIGEgZG9taW5hdG9yIGFuZCB0aGlzIGJhc2ljIGJsb2NrIGhhcyBhCiAgICAgIC8vIGRvbWluYXRvciwgd2UgZmluZCBhIGNvbW1vbiBwYXJlbnQgaW4gdGhlIGRvbWluYXRvciB0cmVlIGFuZAogICAgICAvLyB1c2UgdGhhdCBhcyB0aGUgZG9taW5hdG9yLgogICAgICBIQmFzaWNCbG9jayBibG9jazAgPSBkb21pbmF0b3I7CiAgICAgIEhCYXNpY0Jsb2NrIGJsb2NrMSA9IHByZWRlY2Vzc29yOwogICAgICB3aGlsZSAoIWlkZW50aWNhbChibG9jazAsIGJsb2NrMSkpIHsKICAgICAgICBpZiAoYmxvY2swLmlkID4gYmxvY2sxLmlkKSB7CiAgICAgICAgICBibG9jazAgPSBibG9jazAuZG9taW5hdG9yOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBibG9jazEgPSBibG9jazEuZG9taW5hdG9yOwogICAgICAgIH0KICAgICAgICBhc3NlcnQoYmxvY2swICE9IG51bGwgJiYgYmxvY2sxICE9IG51bGwpOwogICAgICB9CiAgICAgIGlmICghaWRlbnRpY2FsKGRvbWluYXRvciwgYmxvY2swKSkgewogICAgICAgIGRvbWluYXRvci5yZW1vdmVEb21pbmF0ZWRCbG9jayh0aGlzKTsKICAgICAgICBibG9jazAuYWRkRG9taW5hdGVkQmxvY2sodGhpcyk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgZm9yRWFjaFBoaSh2b2lkIGYoSFBoaSBwaGkpKSB7CiAgICBIUGhpIGN1cnJlbnQgPSBwaGlzLmZpcnN0OwogICAgd2hpbGUgKGN1cnJlbnQgIT0gbnVsbCkgewogICAgICBISW5zdHJ1Y3Rpb24gc2F2ZWQgPSBjdXJyZW50Lm5leHQ7CiAgICAgIGYoY3VycmVudCk7CiAgICAgIGN1cnJlbnQgPSBzYXZlZDsKICAgIH0KICB9CgogIHZvaWQgZm9yRWFjaEluc3RydWN0aW9uKHZvaWQgZihISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pKSB7CiAgICBISW5zdHJ1Y3Rpb24gY3VycmVudCA9IGZpcnN0OwogICAgd2hpbGUgKGN1cnJlbnQgIT0gbnVsbCkgewogICAgICBISW5zdHJ1Y3Rpb24gc2F2ZWQgPSBjdXJyZW50Lm5leHQ7CiAgICAgIGYoY3VycmVudCk7CiAgICAgIGN1cnJlbnQgPSBzYXZlZDsKICAgIH0KICB9CgogIGJvb2wgaXNWYWxpZCgpIHsKICAgIGFzc2VydChpc0Nsb3NlZCgpKTsKICAgIEhWYWxpZGF0b3IgdmFsaWRhdG9yID0gbmV3IEhWYWxpZGF0b3IoKTsKICAgIHZhbGlkYXRvci52aXNpdEJhc2ljQmxvY2sodGhpcyk7CiAgICByZXR1cm4gdmFsaWRhdG9yLmlzVmFsaWQ7CiAgfQoKICBib29sIGRvbWluYXRlcyhIQmFzaWNCbG9jayBvdGhlcikgewogICAgcmV0dXJuIHRoaXMuZG9taW5hdG9yRGZzSW4gPD0gb3RoZXIuZG9taW5hdG9yRGZzSW4gJiYKICAgICAgICBvdGhlci5kb21pbmF0b3JEZnNPdXQgPD0gdGhpcy5kb21pbmF0b3JEZnNPdXQ7CiAgfQoKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICdIQmFzaWNCbG9jaygkaWQpJzsKfQoKYWJzdHJhY3QgY2xhc3MgSEluc3RydWN0aW9uIGltcGxlbWVudHMgU3Bhbm5hYmxlIHsKICBFbnRpdHkgc291cmNlRWxlbWVudDsKICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbjsKCiAgZmluYWwgaW50IGlkOwogIHN0YXRpYyBpbnQgaWRDb3VudGVyOwoKICBmaW5hbCBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzOwogIGZpbmFsIExpc3Q8SEluc3RydWN0aW9uPiB1c2VkQnk7CgogIEhCYXNpY0Jsb2NrIGJsb2NrOwogIEhJbnN0cnVjdGlvbiBwcmV2aW91cyA9IG51bGw7CiAgSEluc3RydWN0aW9uIG5leHQgPSBudWxsOwoKICBTaWRlRWZmZWN0cyBzaWRlRWZmZWN0cyA9IG5ldyBTaWRlRWZmZWN0cy5lbXB0eSgpOwogIGJvb2wgX3VzZUd2biA9IGZhbHNlOwoKICAvLyBUeXBlIGNvZGVzLgogIHN0YXRpYyBjb25zdCBpbnQgVU5ERUZJTkVEX1RZUEVDT0RFID0gLTE7CiAgc3RhdGljIGNvbnN0IGludCBUWVBFX0dVQVJEX1RZUEVDT0RFID0gMTsKICBzdGF0aWMgY29uc3QgaW50IEJPVU5EU19DSEVDS19UWVBFQ09ERSA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBJTlRFR0VSX0NIRUNLX1RZUEVDT0RFID0gMzsKICBzdGF0aWMgY29uc3QgaW50IElOVEVSQ0VQVE9SX1RZUEVDT0RFID0gNDsKICBzdGF0aWMgY29uc3QgaW50IEFERF9UWVBFQ09ERSA9IDU7CiAgc3RhdGljIGNvbnN0IGludCBESVZJREVfVFlQRUNPREUgPSA2OwogIHN0YXRpYyBjb25zdCBpbnQgTVVMVElQTFlfVFlQRUNPREUgPSA3OwogIHN0YXRpYyBjb25zdCBpbnQgU1VCVFJBQ1RfVFlQRUNPREUgPSA4OwogIHN0YXRpYyBjb25zdCBpbnQgU0hJRlRfTEVGVF9UWVBFQ09ERSA9IDk7CiAgc3RhdGljIGNvbnN0IGludCBCSVRfT1JfVFlQRUNPREUgPSAxMDsKICBzdGF0aWMgY29uc3QgaW50IEJJVF9BTkRfVFlQRUNPREUgPSAxMTsKICBzdGF0aWMgY29uc3QgaW50IEJJVF9YT1JfVFlQRUNPREUgPSAxMjsKICBzdGF0aWMgY29uc3QgaW50IE5FR0FURV9UWVBFQ09ERSA9IDEzOwogIHN0YXRpYyBjb25zdCBpbnQgQklUX05PVF9UWVBFQ09ERSA9IDE0OwogIHN0YXRpYyBjb25zdCBpbnQgTk9UX1RZUEVDT0RFID0gMTU7CiAgc3RhdGljIGNvbnN0IGludCBJREVOVElUWV9UWVBFQ09ERSA9IDE2OwogIHN0YXRpYyBjb25zdCBpbnQgR1JFQVRFUl9UWVBFQ09ERSA9IDE3OwogIHN0YXRpYyBjb25zdCBpbnQgR1JFQVRFUl9FUVVBTF9UWVBFQ09ERSA9IDE4OwogIHN0YXRpYyBjb25zdCBpbnQgTEVTU19UWVBFQ09ERSA9IDE5OwogIHN0YXRpYyBjb25zdCBpbnQgTEVTU19FUVVBTF9UWVBFQ09ERSA9IDIwOwogIHN0YXRpYyBjb25zdCBpbnQgU1RBVElDX1RZUEVDT0RFID0gMjE7CiAgc3RhdGljIGNvbnN0IGludCBTVEFUSUNfU1RPUkVfVFlQRUNPREUgPSAyMjsKICBzdGF0aWMgY29uc3QgaW50IEZJRUxEX0dFVF9UWVBFQ09ERSA9IDIzOwogIHN0YXRpYyBjb25zdCBpbnQgVFlQRV9DT05WRVJTSU9OX1RZUEVDT0RFID0gMjQ7CiAgc3RhdGljIGNvbnN0IGludCBUWVBFX0tOT1dOX1RZUEVDT0RFID0gMjU7CiAgc3RhdGljIGNvbnN0IGludCBJTlZPS0VfU1RBVElDX1RZUEVDT0RFID0gMjY7CiAgc3RhdGljIGNvbnN0IGludCBJTkRFWF9UWVBFQ09ERSA9IDI3OwogIHN0YXRpYyBjb25zdCBpbnQgSVNfVFlQRUNPREUgPSAyODsKICBzdGF0aWMgY29uc3QgaW50IElOVk9LRV9EWU5BTUlDX1RZUEVDT0RFID0gMjk7CiAgc3RhdGljIGNvbnN0IGludCBTSElGVF9SSUdIVF9UWVBFQ09ERSA9IDMwOwoKICBzdGF0aWMgY29uc3QgaW50IFRSVU5DQVRJTkdfRElWSURFX1RZUEVDT0RFID0gMzY7CiAgc3RhdGljIGNvbnN0IGludCBJU19WSUFfSU5URVJDRVBUT1JfVFlQRUNPREUgPSAzNzsKCiAgc3RhdGljIGNvbnN0IGludCBUWVBFX0lORk9fUkVBRF9SQVdfVFlQRUNPREUgPSAzODsKICBzdGF0aWMgY29uc3QgaW50IFRZUEVfSU5GT19SRUFEX1ZBUklBQkxFX1RZUEVDT0RFID0gMzk7CiAgc3RhdGljIGNvbnN0IGludCBUWVBFX0lORk9fRVhQUkVTU0lPTl9UWVBFQ09ERSA9IDQwOwoKICBzdGF0aWMgY29uc3QgaW50IEZPUkVJR05fQ09ERV9UWVBFQ09ERSA9IDQxOwogIHN0YXRpYyBjb25zdCBpbnQgUkVNQUlOREVSX1RZUEVDT0RFID0gNDI7CiAgc3RhdGljIGNvbnN0IGludCBHRVRfTEVOR1RIX1RZUEVDT0RFID0gNDM7CiAgc3RhdGljIGNvbnN0IGludCBBQlNfVFlQRUNPREUgPSA0NDsKICBzdGF0aWMgY29uc3QgaW50IEJPT0xfQ09OVkVSU0lPTl9UWVBFQ09ERSA9IDQ1OwogIHN0YXRpYyBjb25zdCBpbnQgUFJJTUlUSVZFX0NIRUNLX1RZUEVDT0RFID0gNDY7CgogIHN0YXRpYyBjb25zdCBpbnQgSVNfVEVTVF9UWVBFQ09ERSA9IDQ3OwogIHN0YXRpYyBjb25zdCBpbnQgQVNfQ0hFQ0tfVFlQRUNPREUgPSA0ODsKICBzdGF0aWMgY29uc3QgaW50IEFTX0NIRUNLX1NJTVBMRV9UWVBFQ09ERSA9IDQ5OwogIHN0YXRpYyBjb25zdCBpbnQgU1VCVFlQRV9DSEVDS19UWVBFQ09ERSA9IDUwOwogIHN0YXRpYyBjb25zdCBpbnQgTE9BRF9UWVBFX1RZUEVDT0RFID0gNTE7CiAgc3RhdGljIGNvbnN0IGludCBJTlNUQU5DRV9FTlZJUk9OTUVOVF9UWVBFQ09ERSA9IDUyOwogIHN0YXRpYyBjb25zdCBpbnQgVFlQRV9FVkFMX1RZUEVDT0RFID0gNTM7CiAgc3RhdGljIGNvbnN0IGludCBUWVBFX0JJTkRfVFlQRUNPREUgPSA1NDsKCiAgSEluc3RydWN0aW9uKHRoaXMuaW5wdXRzLCB0aGlzLmluc3RydWN0aW9uVHlwZSkKICAgICAgOiBpZCA9IGlkQ291bnRlcisrLAogICAgICAgIHVzZWRCeSA9IDxISW5zdHJ1Y3Rpb24+W10gewogICAgYXNzZXJ0KGlucHV0cy5ldmVyeSgoZSkgPT4gZSAhPSBudWxsKSwgImlucHV0czogJGlucHV0cyIpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBpZDsKCiAgYm9vbCB1c2VHdm4oKSA9PiBfdXNlR3ZuOwogIHZvaWQgc2V0VXNlR3ZuKCkgewogICAgX3VzZUd2biA9IHRydWU7CiAgfQoKICBib29sIGdldCBpc01vdmFibGUgPT4gdXNlR3ZuKCk7CgogIC8vLyBBIHB1cmUgaW5zdHJ1Y3Rpb24gaXMgYW4gaW5zdHJ1Y3Rpb24gdGhhdCBkb2VzIG5vdCBoYXZlIGFueSBzaWRlCiAgLy8vIGVmZmVjdCwgbm9yIGFueSBkZXBlbmRlbmN5LiBUaGV5IGNhbiBiZSBtb3ZlZCBhbnl3aGVyZSBpbiB0aGUKICAvLy8gZ3JhcGguCiAgYm9vbCBpc1B1cmUoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pIHsKICAgIHJldHVybiAhc2lkZUVmZmVjdHMuaGFzU2lkZUVmZmVjdHMoKSAmJgogICAgICAgICFzaWRlRWZmZWN0cy5kZXBlbmRzT25Tb21ldGhpbmcoKSAmJgogICAgICAgICFjYW5UaHJvdyhkb21haW4pOwogIH0KCiAgLy8vIEFuIGluc3RydWN0aW9uIGlzIGFuICdhbGxvY2F0aW9uJyBpcyBpdCBpcyB0aGUgc29sZSBhbGlhcyBmb3IgYW4gb2JqZWN0LgogIC8vLyBUaGlzIGFwcGxpZXMgdG8gaW5zdHJ1Y3Rpb25zIHRoYXQgYWxsb2NhdGUgbmV3IG9iamVjdHMgYW5kIGNhbiBiZSBleHRlbmRlZAogIC8vLyB0byBtZXRob2RzIHRoYXQgcmV0dXJuIG90aGVyIGFsbG9jYXRpb25zIHdpdGhvdXQgZXNjYXBpbmcgdGhlbS4KICBib29sIGlzQWxsb2NhdGlvbihBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4gZmFsc2U7CgogIC8vLyBPdmVycmlkZGVuIGJ5IFtIQ2hlY2tdIHRvIHJldHVybiB0aGUgYWN0dWFsIG5vbi1bSENoZWNrXQogIC8vLyBpbnN0cnVjdGlvbiBpdCBjaGVja3MgYWdhaW5zdC4KICBISW5zdHJ1Y3Rpb24gbm9uQ2hlY2soKSA9PiB0aGlzOwoKICAvLy8gQ2FuIHRoaXMgbm9kZSB0aHJvdyBhbiBleGNlcHRpb24/CiAgYm9vbCBjYW5UaHJvdyhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4gZmFsc2U7CgogIC8vLyBEb2VzIHRoaXMgbm9kZSBwb3RlbnRpYWxseSBhZmZlY3QgY29udHJvbCBmbG93LgogIGJvb2wgaXNDb250cm9sRmxvdygpID0+IGZhbHNlOwoKICBib29sIGlzVmFsdWUoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc1ByaW1pdGl2ZVZhbHVlKGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc051bGwoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc051bGwoaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzQ29uZmxpY3RpbmcoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc0VtcHR5KGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc1ByaW1pdGl2ZShBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzUHJpbWl0aXZlKGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc1ByaW1pdGl2ZU51bWJlcihBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzUHJpbWl0aXZlTnVtYmVyKGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc1ByaW1pdGl2ZUJvb2xlYW4oQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc1ByaW1pdGl2ZUJvb2xlYW4oaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzUHJpbWl0aXZlQXJyYXkoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc1ByaW1pdGl2ZUFycmF5KGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc0luZGV4YWJsZVByaW1pdGl2ZShBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzSW5kZXhhYmxlUHJpbWl0aXZlKGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc0ZpeGVkQXJyYXkoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc0ZpeGVkQXJyYXkoaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzRXh0ZW5kYWJsZUFycmF5KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNFeHRlbmRhYmxlQXJyYXkoaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzTXV0YWJsZUFycmF5KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNNdXRhYmxlQXJyYXkoaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzTXV0YWJsZUluZGV4YWJsZShBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzTXV0YWJsZUluZGV4YWJsZShpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNBcnJheShBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzQXJyYXkoaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzUHJpbWl0aXZlU3RyaW5nKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNQcmltaXRpdmVTdHJpbmcoaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzSW50ZWdlcihBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzSW50ZWdlcihpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNVSW50MzIoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc1VJbnQzMihpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNVSW50MzEoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc1VJbnQzMShpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNQb3NpdGl2ZUludGVnZXIoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc1Bvc2l0aXZlSW50ZWdlcihpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNQb3NpdGl2ZUludGVnZXJPck51bGwoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc1Bvc2l0aXZlSW50ZWdlck9yTnVsbChpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNJbnRlZ2VyT3JOdWxsKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNJbnRlZ2VyT3JOdWxsKGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc051bWJlcihBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzTnVtYmVyKGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc051bWJlck9yTnVsbChBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzTnVtYmVyT3JOdWxsKGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc0RvdWJsZShBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzRG91YmxlKGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc0RvdWJsZU9yTnVsbChBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzRG91YmxlT3JOdWxsKGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc0Jvb2xlYW4oQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc0Jvb2xlYW4oaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzQm9vbGVhbk9yTnVsbChBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzQm9vbGVhbk9yTnVsbChpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNTdHJpbmcoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc1N0cmluZyhpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNTdHJpbmdPck51bGwoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc1N0cmluZ09yTnVsbChpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNQcmltaXRpdmVPck51bGwoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc1ByaW1pdGl2ZU9yTnVsbChpbnN0cnVjdGlvblR5cGUpOwoKICAvLy8gVHlwZSBvZiB0aGUgaW5zdHJ1Y3Rpb24uCiAgQWJzdHJhY3RWYWx1ZSBpbnN0cnVjdGlvblR5cGU7CgogIFNlbGVjdG9yIGdldCBzZWxlY3RvciA9PiBudWxsOwogIEhJbnN0cnVjdGlvbiBnZXREYXJ0UmVjZWl2ZXIoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSA9PiBudWxsOwogIGJvb2wgb25seVRocm93c05TTSgpID0+IGZhbHNlOwoKICBib29sIGlzSW5CYXNpY0Jsb2NrKCkgPT4gYmxvY2sgIT0gbnVsbDsKCiAgYm9vbCBndm5FcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSB7CiAgICBhc3NlcnQodXNlR3ZuKCkgJiYgb3RoZXIudXNlR3ZuKCkpOwogICAgLy8gQ2hlY2sgdGhhdCB0aGUgdHlwZSBhbmQgdGhlIHNpZGVFZmZlY3RzIG1hdGNoLgogICAgYm9vbCBoYXNTYW1lVHlwZSA9IHR5cGVFcXVhbHMob3RoZXIpOwogICAgYXNzZXJ0KGhhc1NhbWVUeXBlID09ICh0eXBlQ29kZSgpID09IG90aGVyLnR5cGVDb2RlKCkpKTsKICAgIGlmICghaGFzU2FtZVR5cGUpIHJldHVybiBmYWxzZTsKICAgIGlmIChzaWRlRWZmZWN0cyAhPSBvdGhlci5zaWRlRWZmZWN0cykgcmV0dXJuIGZhbHNlOwogICAgLy8gQ2hlY2sgdGhhdCB0aGUgaW5wdXRzIG1hdGNoLgogICAgZmluYWwgaW50IGlucHV0c0xlbmd0aCA9IGlucHV0cy5sZW5ndGg7CiAgICBmaW5hbCBMaXN0PEhJbnN0cnVjdGlvbj4gb3RoZXJJbnB1dHMgPSBvdGhlci5pbnB1dHM7CiAgICBpZiAoaW5wdXRzTGVuZ3RoICE9IG90aGVySW5wdXRzLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dHNMZW5ndGg7IGkrKykgewogICAgICBpZiAoIWlkZW50aWNhbChpbnB1dHNbaV0ubm9uQ2hlY2soKSwgb3RoZXJJbnB1dHNbaV0ubm9uQ2hlY2soKSkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIC8vIENoZWNrIHRoYXQgdGhlIGRhdGEgaW4gdGhlIGluc3RydWN0aW9uIG1hdGNoZXMuCiAgICByZXR1cm4gZGF0YUVxdWFscyhvdGhlcik7CiAgfQoKICBpbnQgZ3ZuSGFzaENvZGUoKSB7CiAgICBpbnQgcmVzdWx0ID0gdHlwZUNvZGUoKTsKICAgIGludCBsZW5ndGggPSBpbnB1dHMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICByZXN1bHQgPSAocmVzdWx0ICogMTkpICsgKGlucHV0c1tpXS5ub25DaGVjaygpLmlkKSArIChyZXN1bHQgPj4gNyk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8gVGhlc2UgbWV0aG9kcyBzaG91bGQgYmUgb3ZlcndyaXR0ZW4gYnkgaW5zdHJ1Y3Rpb25zIHRoYXQKICAvLyBwYXJ0aWNpcGF0ZSBpbiBnbG9iYWwgdmFsdWUgbnVtYmVyaW5nLgogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5VTkRFRklORURfVFlQRUNPREU7CiAgYm9vbCB0eXBlRXF1YWxzKGNvdmFyaWFudCBISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IGZhbHNlOwogIGJvb2wgZGF0YUVxdWFscyhjb3ZhcmlhbnQgSEluc3RydWN0aW9uIG90aGVyKSA9PiBmYWxzZTsKCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpOwoKICB2b2lkIG5vdGlmeUFkZGVkVG9CbG9jayhIQmFzaWNCbG9jayB0YXJnZXRCbG9jaykgewogICAgYXNzZXJ0KCFpc0luQmFzaWNCbG9jaygpKTsKICAgIGFzc2VydChibG9jayA9PSBudWxsKTsKICAgIC8vIEFkZCBbdGhpc10gdG8gdGhlIGlucHV0cycgdXNlcy4KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGFzc2VydChpbnB1dHNbaV0uaXNJbkJhc2ljQmxvY2soKSk7CiAgICAgIGlucHV0c1tpXS51c2VkQnkuYWRkKHRoaXMpOwogICAgfQogICAgYmxvY2sgPSB0YXJnZXRCbG9jazsKICAgIGFzc2VydChpc1ZhbGlkKCkpOwogIH0KCiAgdm9pZCBub3RpZnlSZW1vdmVkRnJvbUJsb2NrKCkgewogICAgYXNzZXJ0KGlzSW5CYXNpY0Jsb2NrKCkpOwogICAgYXNzZXJ0KHVzZWRCeS5pc0VtcHR5KTsKCiAgICAvLyBSZW1vdmUgW3RoaXNdIGZyb20gdGhlIGlucHV0cycgdXNlcy4KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlucHV0c1tpXS5yZW1vdmVVc2VyKHRoaXMpOwogICAgfQogICAgdGhpcy5ibG9jayA9IG51bGw7CiAgICBhc3NlcnQoaXNWYWxpZCgpKTsKICB9CgogIC8vLyBEbyBhIGluLXBsYWNlIGNoYW5nZSBvZiBbZnJvbV0gdG8gW3RvXS4gV2FybmluZzogdGhpcyBmdW5jdGlvbgogIC8vLyBkb2VzIG5vdCB1cGRhdGUgW2lucHV0c10gYW5kIFt1c2VkQnldLiBVc2UgW2NoYW5nZVVzZV0gaW5zdGVhZC4KICB2b2lkIHJld3JpdGVJbnB1dChISW5zdHJ1Y3Rpb24gZnJvbSwgSEluc3RydWN0aW9uIHRvKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaWRlbnRpY2FsKGlucHV0c1tpXSwgZnJvbSkpIGlucHV0c1tpXSA9IHRvOwogICAgfQogIH0KCiAgLy8vIFJlbW92ZXMgYWxsIG9jY3VycmVuY2VzIG9mIFtpbnN0cnVjdGlvbl0gZnJvbSBbbGlzdF0uCiAgdm9pZCByZW1vdmVGcm9tTGlzdChMaXN0PEhJbnN0cnVjdGlvbj4gbGlzdCwgSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBpbnQgbGVuZ3RoID0gbGlzdC5sZW5ndGg7CiAgICBpbnQgaSA9IDA7CiAgICB3aGlsZSAoaSA8IGxlbmd0aCkgewogICAgICBpZiAoaW5zdHJ1Y3Rpb24gPT0gbGlzdFtpXSkgewogICAgICAgIGxpc3RbaV0gPSBsaXN0W2xlbmd0aCAtIDFdOwogICAgICAgIGxlbmd0aC0tOwogICAgICB9IGVsc2UgewogICAgICAgIGkrKzsKICAgICAgfQogICAgfQogICAgbGlzdC5sZW5ndGggPSBsZW5ndGg7CiAgfQoKICAvLy8gUmVtb3ZlcyBhbGwgb2NjdXJyZW5jZXMgb2YgW3VzZXJdIGZyb20gW3VzZWRCeV0uCiAgdm9pZCByZW1vdmVVc2VyKEhJbnN0cnVjdGlvbiB1c2VyKSB7CiAgICByZW1vdmVGcm9tTGlzdCh1c2VkQnksIHVzZXIpOwogIH0KCiAgLy8gQ2hhbmdlIGFsbCB1c2VzIG9mIFtvbGRJbnB1dF0gYnkgW3RoaXNdIHRvIFtuZXdJbnB1dF0uIEFsc28KICAvLyB1cGRhdGVzIHRoZSBbdXNlZEJ5XSBvZiBbb2xkSW5wdXRdIGFuZCBbbmV3SW5wdXRdLgogIHZvaWQgY2hhbmdlVXNlKEhJbnN0cnVjdGlvbiBvbGRJbnB1dCwgSEluc3RydWN0aW9uIG5ld0lucHV0KSB7CiAgICBhc3NlcnQobmV3SW5wdXQgIT0gbnVsbCAmJiAhaWRlbnRpY2FsKG9sZElucHV0LCBuZXdJbnB1dCkpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGlkZW50aWNhbChpbnB1dHNbaV0sIG9sZElucHV0KSkgewogICAgICAgIGlucHV0c1tpXSA9IG5ld0lucHV0OwogICAgICAgIG5ld0lucHV0LnVzZWRCeS5hZGQodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIHJlbW92ZUZyb21MaXN0KG9sZElucHV0LnVzZWRCeSwgdGhpcyk7CiAgfQoKICB2b2lkIHJlcGxhY2VBbGxVc2Vyc0RvbWluYXRlZEJ5KAogICAgICBISW5zdHJ1Y3Rpb24gY3Vyc29yLCBISW5zdHJ1Y3Rpb24gbmV3SW5zdHJ1Y3Rpb24pIHsKICAgIERvbWluYXRlZFVzZXMub2YodGhpcywgY3Vyc29yKS5yZXBsYWNlV2l0aChuZXdJbnN0cnVjdGlvbik7CiAgfQoKICB2b2lkIG1vdmVCZWZvcmUoSEluc3RydWN0aW9uIG90aGVyKSB7CiAgICBhc3NlcnQodGhpcyBpcyEgSENvbnRyb2xGbG93KTsKICAgIGFzc2VydCh0aGlzIGlzISBIUGhpKTsKICAgIGFzc2VydChvdGhlciBpcyEgSFBoaSk7CiAgICBibG9jay5kZXRhY2godGhpcyk7CiAgICBvdGhlci5ibG9jay5pbnRlcm5hbEFkZEJlZm9yZShvdGhlciwgdGhpcyk7CiAgICBibG9jayA9IG90aGVyLmJsb2NrOwogIH0KCiAgYm9vbCBpc0NvbnN0YW50KCkgPT4gZmFsc2U7CiAgYm9vbCBpc0NvbnN0YW50Qm9vbGVhbigpID0+IGZhbHNlOwogIGJvb2wgaXNDb25zdGFudE51bGwoKSA9PiBmYWxzZTsKICBib29sIGlzQ29uc3RhbnROdW1iZXIoKSA9PiBmYWxzZTsKICBib29sIGlzQ29uc3RhbnRJbnRlZ2VyKCkgPT4gZmFsc2U7CiAgYm9vbCBpc0NvbnN0YW50U3RyaW5nKCkgPT4gZmFsc2U7CiAgYm9vbCBpc0NvbnN0YW50TGlzdCgpID0+IGZhbHNlOwogIGJvb2wgaXNDb25zdGFudE1hcCgpID0+IGZhbHNlOwogIGJvb2wgaXNDb25zdGFudEZhbHNlKCkgPT4gZmFsc2U7CiAgYm9vbCBpc0NvbnN0YW50VHJ1ZSgpID0+IGZhbHNlOwoKICBib29sIGlzSW50ZXJjZXB0b3IoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSA9PiBmYWxzZTsKCiAgYm9vbCBpc1ZhbGlkKCkgewogICAgSFZhbGlkYXRvciB2YWxpZGF0b3IgPSBuZXcgSFZhbGlkYXRvcigpOwogICAgdmFsaWRhdG9yLmN1cnJlbnRCbG9jayA9IGJsb2NrOwogICAgdmFsaWRhdG9yLnZpc2l0SW5zdHJ1Y3Rpb24odGhpcyk7CiAgICByZXR1cm4gdmFsaWRhdG9yLmlzVmFsaWQ7CiAgfQoKICBib29sIGlzQ29kZU1vdGlvbkludmFyaWFudCgpID0+IGZhbHNlOwoKICBib29sIGlzSnNTdGF0ZW1lbnQoKSA9PiBmYWxzZTsKCiAgYm9vbCBkb21pbmF0ZXMoSEluc3RydWN0aW9uIG90aGVyKSB7CiAgICAvLyBBbiBpbnN0cnVjdGlvbiBkb2VzIG5vdCBkb21pbmF0ZXMgaXRzZWxmLgogICAgaWYgKHRoaXMgPT0gb3RoZXIpIHJldHVybiBmYWxzZTsKICAgIGlmIChibG9jayAhPSBvdGhlci5ibG9jaykgcmV0dXJuIGJsb2NrLmRvbWluYXRlcyhvdGhlci5ibG9jayk7CgogICAgSEluc3RydWN0aW9uIGN1cnJlbnQgPSB0aGlzLm5leHQ7CiAgICB3aGlsZSAoY3VycmVudCAhPSBudWxsKSB7CiAgICAgIGlmIChjdXJyZW50ID09IG90aGVyKSByZXR1cm4gdHJ1ZTsKICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEhJbnN0cnVjdGlvbiBjb252ZXJ0VHlwZShKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsIERhcnRUeXBlIHR5cGUsIGludCBraW5kKSB7CiAgICBpZiAodHlwZSA9PSBudWxsKSByZXR1cm4gdGhpczsKICAgIHR5cGUgPSB0eXBlLnVuYWxpYXNlZDsKICAgIC8vIE9ubHkgdGhlIGJ1aWxkZXIga25vd3MgaG93IHRvIGNyZWF0ZSBbSFR5cGVDb252ZXJzaW9uXQogICAgLy8gaW5zdHJ1Y3Rpb25zIHdpdGggZ2VuZXJpY3MuIEl0IGhhcyB0aGUgZ2VuZXJpYyB0eXBlIGNvbnRleHQKICAgIC8vIGF2YWlsYWJsZS4KICAgIGFzc2VydCghdHlwZS5pc1R5cGVWYXJpYWJsZSk7CiAgICBhc3NlcnQodHlwZS50cmVhdEFzUmF3IHx8IHR5cGUuaXNGdW5jdGlvblR5cGUpOwogICAgaWYgKHR5cGUuaXNEeW5hbWljKSByZXR1cm4gdGhpczsKICAgIGlmICh0eXBlLmlzVm9pZCkgcmV0dXJuIHRoaXM7CiAgICBpZiAodHlwZSA9PSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5vYmplY3RUeXBlKSByZXR1cm4gdGhpczsKICAgIGlmICh0eXBlLmlzRnVuY3Rpb25UeXBlIHx8IHR5cGUuaXNGdXR1cmVPcikgewogICAgICByZXR1cm4gbmV3IEhUeXBlQ29udmVyc2lvbih0eXBlLCBraW5kLAogICAgICAgICAgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSwgdGhpcywgc291cmNlSW5mb3JtYXRpb24pOwogICAgfQogICAgYXNzZXJ0KHR5cGUuaXNJbnRlcmZhY2VUeXBlKTsKICAgIGlmIChraW5kID09IEhUeXBlQ29udmVyc2lvbi5UWVBFX0NIRUNLICYmICF0eXBlLnRyZWF0QXNSYXcpIHsKICAgICAgdGhyb3cgJ2NyZWF0aW5nIGNvbXBvdW5kIGNoZWNrIHRvICR0eXBlICh0aGlzID0gJHt0aGlzfSknOwogICAgfSBlbHNlIHsKICAgICAgSW50ZXJmYWNlVHlwZSBpbnRlcmZhY2VUeXBlID0gdHlwZTsKICAgICAgQWJzdHJhY3RWYWx1ZSBzdWJ0eXBlID0gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgICAgLmNyZWF0ZU51bGxhYmxlU3VidHlwZShpbnRlcmZhY2VUeXBlLmVsZW1lbnQpOwogICAgICByZXR1cm4gbmV3IEhUeXBlQ29udmVyc2lvbih0eXBlLCBraW5kLCBzdWJ0eXBlLCB0aGlzLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJuIHdoZXRoZXIgdGhlIGluc3RydWN0aW9ucyBkbyBub3QgYmVsb25nIHRvIGEgbG9vcCBvcgogIC8vLyBiZWxvbmcgdG8gdGhlIHNhbWUgbG9vcC4KICBib29sIGhhc1NhbWVMb29wSGVhZGVyQXMoSEluc3RydWN0aW9uIG90aGVyKSB7CiAgICByZXR1cm4gYmxvY2suZW5jbG9zaW5nTG9vcEhlYWRlciA9PSBvdGhlci5ibG9jay5lbmNsb3NpbmdMb29wSGVhZGVyOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyR7dGhpcy5ydW50aW1lVHlwZX0oKSc7Cn0KCi8vLyBUaGUgc2V0IG9mIHVzZXMgb2YgW3NvdXJjZV0gdGhhdCBhcmUgZG9taW5hdGVkIGJ5IFtkb21pbmF0b3JdLgpjbGFzcyBEb21pbmF0ZWRVc2VzIHsKICBmaW5hbCBISW5zdHJ1Y3Rpb24gX3NvdXJjZTsKCiAgLy8gVHdvIGxpc3Qgb2YgbWF0Y2hpbmcgbGVuZ3RoIGhvbGRpbmcgKGluc3RydWN0aW9uLCBpbnB1dC1pbmRleCkgcGFpcnMgZm9yCiAgLy8gdGhlIGRvbWluYXRlZCB1c2VzLgogIGZpbmFsIExpc3Q8SEluc3RydWN0aW9uPiBfaW5zdHJ1Y3Rpb25zID0gPEhJbnN0cnVjdGlvbj5bXTsKICBmaW5hbCBMaXN0PGludD4gX2luZGV4ZXMgPSA8aW50PltdOwoKICBEb21pbmF0ZWRVc2VzLl8odGhpcy5fc291cmNlKTsKCiAgLy8vIFRoZSB1c2VzIG9mIFtzb3VyY2VdIHRoYXQgYXJlIGRvbWluYXRlZCBieSBbZG9taW5hdG9yXS4KICAvLy8KICAvLy8gVGhlIHVzZXMgYnkgW2RvbWluYXRvcl0gYXJlIGluY2x1ZGVkIGluIHRoZSByZXN1bHQsIHVubGVzcwogIC8vLyBbZXhjbHVkZURvbWluYXRvcl0gaXMgYHRydWVgLCBzbyBgdHJ1ZWAgc2VsZWN0cyB1c2VzIGZvbGxvd2luZwogIC8vLyBbZG9taW5hdG9yXS4KICAvLy8KICAvLy8gVGhlIHVzZXMgaW5jbHVkZSB0aGUgaW4tZWRnZXMgb2YgYSBIUGhpIG5vZGUgdGhhdCBjb3JyZXNwb25kcyB0byBhCiAgLy8vIGRvbWluYXRlZCBibG9jay4gKFRoZXJlIGNhbiBiZSBtYW55IHN1Y2ggZWRnZXMgb24gYSBzaW5nbGUgcGhpIGF0IHRoZSBleGl0CiAgLy8vIG9mIGEgbG9vcCB3aXRoIG1hbnkgYnJlYWsgc3RhdGVtZW50cykuICBJZiBbZXhjbHVkZVBoaU91dEVkZ2VzXSBpcyBgdHJ1ZWAKICAvLy8gdGhlbiB0aGVzZSBlZGdlIHVzZXMgYXJlIG5vdCBpbmNsdWRlZC4KICBzdGF0aWMgRG9taW5hdGVkVXNlcyBvZihISW5zdHJ1Y3Rpb24gc291cmNlLCBISW5zdHJ1Y3Rpb24gZG9taW5hdG9yLAogICAgICB7Ym9vbCBleGNsdWRlRG9taW5hdG9yOiBmYWxzZSwgYm9vbCBleGNsdWRlUGhpT3V0RWRnZXM6IGZhbHNlfSkgewogICAgcmV0dXJuIG5ldyBEb21pbmF0ZWRVc2VzLl8oc291cmNlKQogICAgICAuLl9jb21wdXRlKHNvdXJjZSwgZG9taW5hdG9yLCBleGNsdWRlRG9taW5hdG9yLCBleGNsdWRlUGhpT3V0RWRnZXMpOwogIH0KCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfaW5zdHJ1Y3Rpb25zLmlzRW1wdHk7CiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiAhaXNFbXB0eTsKICBpbnQgZ2V0IGxlbmd0aCA9PiBfaW5zdHJ1Y3Rpb25zLmxlbmd0aDsKCiAgLy8vIENoYW5nZXMgYWxsIHRoZSB1c2VzIGluIHRoZSBzZXQgdG8gW25ld0luc3RydWN0aW9uXS4KICB2b2lkIHJlcGxhY2VXaXRoKEhJbnN0cnVjdGlvbiBuZXdJbnN0cnVjdGlvbikgewogICAgYXNzZXJ0KCFpZGVudGljYWwobmV3SW5zdHJ1Y3Rpb24sIF9zb3VyY2UpKTsKICAgIGlmIChpc0VtcHR5KSByZXR1cm47CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9pbnN0cnVjdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgSEluc3RydWN0aW9uIHVzZXIgPSBfaW5zdHJ1Y3Rpb25zW2ldOwogICAgICBpbnQgaW5kZXggPSBfaW5kZXhlc1tpXTsKICAgICAgSEluc3RydWN0aW9uIG9sZEluc3RydWN0aW9uID0gdXNlci5pbnB1dHNbaW5kZXhdOwogICAgICBhc3NlcnQoCiAgICAgICAgICBpZGVudGljYWwob2xkSW5zdHJ1Y3Rpb24sIF9zb3VyY2UpLAogICAgICAgICAgJ0lucHV0ICR7aW5kZXh9IG9mICR7dXNlcn0gY2hhbmdlZC4nCiAgICAgICAgICAnXG4gIEZvdW5kOiAke29sZEluc3RydWN0aW9ufVxuICBFeHBlY3RlZDogJHtfc291cmNlfScpOwogICAgICB1c2VyLmlucHV0c1tpbmRleF0gPSBuZXdJbnN0cnVjdGlvbjsKICAgICAgb2xkSW5zdHJ1Y3Rpb24udXNlZEJ5LnJlbW92ZSh1c2VyKTsKICAgICAgbmV3SW5zdHJ1Y3Rpb24udXNlZEJ5LmFkZCh1c2VyKTsKICAgIH0KICB9CgogIGJvb2wgZ2V0IGlzU2luZ2xldG9uID0+IF9pbnN0cnVjdGlvbnMubGVuZ3RoID09IDE7CgogIEhJbnN0cnVjdGlvbiBnZXQgc2luZ2xlID0+IF9pbnN0cnVjdGlvbnMuc2luZ2xlOwoKICBJdGVyYWJsZTxISW5zdHJ1Y3Rpb24+IGdldCBpbnN0cnVjdGlvbnMgPT4gX2luc3RydWN0aW9uczsKCiAgdm9pZCBfYWRkVXNlKEhJbnN0cnVjdGlvbiB1c2VyLCBpbnQgaW5wdXRJbmRleCkgewogICAgX2luc3RydWN0aW9ucy5hZGQodXNlcik7CiAgICBfaW5kZXhlcy5hZGQoaW5wdXRJbmRleCk7CiAgfQoKICB2b2lkIF9jb21wdXRlKEhJbnN0cnVjdGlvbiBzb3VyY2UsIEhJbnN0cnVjdGlvbiBkb21pbmF0b3IsCiAgICAgIGJvb2wgZXhjbHVkZURvbWluYXRvciwgYm9vbCBleGNsdWRlUGhpT3V0RWRnZXMpIHsKICAgIC8vIEtlZXAgdHJhY2sgb2YgYWxsIGluc3RydWN0aW9ucyB0aGF0IHdlIGhhdmUgdG8gZGVhbCB3aXRoIGxhdGVyIGFuZCBjb3VudAogICAgLy8gdGhlIG51bWJlciBvZiB0aGVtIHRoYXQgYXJlIGluIHRoZSBjdXJyZW50IGJsb2NrLgogICAgU2V0PEhJbnN0cnVjdGlvbj4gdXNlcnMgPSBuZXcgU2V0bGV0PEhJbnN0cnVjdGlvbj4oKTsKICAgIFNldDxISW5zdHJ1Y3Rpb24+IHNlZW4gPSBuZXcgU2V0bGV0PEhJbnN0cnVjdGlvbj4oKTsKICAgIGludCB1c2Vyc0luQ3VycmVudEJsb2NrID0gMDsKCiAgICBIQmFzaWNCbG9jayBkb21pbmF0b3JCbG9jayA9IGRvbWluYXRvci5ibG9jazsKCiAgICAvLyBSdW4gdGhyb3VnaCBhbGwgdGhlIHVzZXJzIGFuZCBzZWUgaWYgdGhleSBhcmUgZG9taW5hdGVkLCBvciBwb3RlbnRpYWxseQogICAgLy8gZG9taW5hdGVkLCBvciBwYXJ0aWFsbHkgZG9taW5hdGVkIGJ5IFtkb21pbmF0b3JdLiBJdCBpcyBlYXNpZXIgdG8KICAgIC8vIGRlLWR1cGxpY2F0ZSBbdXNlZEJ5XSBhbmQgcHJvY2VzcyBhbGwgaW5wdXRzIG9mIGFuIGluc3RydWN0aW9uIHRoYW4gdG8KICAgIC8vIHRyYWNrIHRoZSByZXBlYXRlZCBlbGVtZW50cyBvZiB1c2VkQnkgYW5kIG1hdGNoIHRoZW0gdXAgYnkgaW5kZXguCiAgICBmb3IgKEhJbnN0cnVjdGlvbiBjdXJyZW50IGluIHNvdXJjZS51c2VkQnkpIHsKICAgICAgaWYgKCFzZWVuLmFkZChjdXJyZW50KSkgY29udGludWU7CiAgICAgIEhCYXNpY0Jsb2NrIGN1cnJlbnRCbG9jayA9IGN1cnJlbnQuYmxvY2s7CiAgICAgIGlmIChkb21pbmF0b3JCbG9jay5kb21pbmF0ZXMoY3VycmVudEJsb2NrKSkgewogICAgICAgIHVzZXJzLmFkZChjdXJyZW50KTsKICAgICAgICBpZiAoaWRlbnRpY2FsKGN1cnJlbnRCbG9jaywgZG9taW5hdG9yQmxvY2spKSB1c2Vyc0luQ3VycmVudEJsb2NrKys7CiAgICAgIH0gZWxzZSBpZiAoIWV4Y2x1ZGVQaGlPdXRFZGdlcyAmJiBjdXJyZW50IGlzIEhQaGkpIHsKICAgICAgICAvLyBBIG5vbi1kb21pbmF0ZWQgSFBoaS4KICAgICAgICAvLyBTZWUgaWYgdGhlcmUgYSBkb21pbmF0ZWQgZWRnZSBpbnRvIHRoZSBwaGkuIFRoZSBpbnB1dCBtdXN0IGJlCiAgICAgICAgLy8gW3NvdXJjZV0gYW5kIHRoZSBwb3NpdGlvbiBtdXN0IGNvcnJlc3BvbmQgdG8gYSBkb21pbmF0ZWQgYmxvY2suCiAgICAgICAgTGlzdDxIQmFzaWNCbG9jaz4gcHJlZGVjZXNzb3JzID0gY3VycmVudEJsb2NrLnByZWRlY2Vzc29yczsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHByZWRlY2Vzc29ycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgaWYgKGN1cnJlbnQuaW5wdXRzW2ldICE9IHNvdXJjZSkgY29udGludWU7CiAgICAgICAgICBIQmFzaWNCbG9jayBwcmVkZWNlc3NvciA9IHByZWRlY2Vzc29yc1tpXTsKICAgICAgICAgIGlmIChkb21pbmF0b3JCbG9jay5kb21pbmF0ZXMocHJlZGVjZXNzb3IpKSB7CiAgICAgICAgICAgIF9hZGRVc2UoY3VycmVudCwgaSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgLy8gUnVuIHRocm91Z2ggYWxsIHRoZSBwaGlzIGluIHRoZSBzYW1lIGJsb2NrIGFzIFtkb21pbmF0b3JdIGFuZCByZW1vdmUgdGhlbQogICAgLy8gZnJvbSB0aGUgdXNlcnMgc2V0LiBUaGVzZSBjb21lIGJlZm9yZSBbZG9taW5hdG9yXS4KICAgIC8vIFRPRE8oc3JhKTogQ291bGQgd2Ugc2ltcGx5IG5vdCBhZGQgdGhlbSBpbiB0aGUgZmlyc3QgcGxhY2U/CiAgICBpZiAodXNlcnNJbkN1cnJlbnRCbG9jayA+IDApIHsKICAgICAgZm9yIChIUGhpIHBoaSA9IGRvbWluYXRvckJsb2NrLnBoaXMuZmlyc3Q7IHBoaSAhPSBudWxsOyBwaGkgPSBwaGkubmV4dCkgewogICAgICAgIGlmICh1c2Vycy5yZW1vdmUocGhpKSkgewogICAgICAgICAgaWYgKC0tdXNlcnNJbkN1cnJlbnRCbG9jayA9PSAwKSBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBSdW4gdGhyb3VnaCBhbGwgdGhlIGluc3RydWN0aW9ucyBiZWZvcmUgW2RvbWluYXRvcl0gYW5kIHJlbW92ZSB0aGVtIGZyb20KICAgIC8vIHRoZSB1c2VycyBzZXQuCiAgICBpZiAodXNlcnNJbkN1cnJlbnRCbG9jayA+IDApIHsKICAgICAgSEluc3RydWN0aW9uIGN1cnJlbnQgPSBkb21pbmF0b3JCbG9jay5maXJzdDsKICAgICAgd2hpbGUgKCFpZGVudGljYWwoY3VycmVudCwgZG9taW5hdG9yKSkgewogICAgICAgIGlmICh1c2Vycy5jb250YWlucyhjdXJyZW50KSkgewogICAgICAgICAgLy8gVE9ETygyOTMwMik6IFVzZSAndXNlci5yZW1vdmUoY3VycmVudCknIGFzIHRoZSBjb25kaXRpb24uCiAgICAgICAgICB1c2Vycy5yZW1vdmUoY3VycmVudCk7CiAgICAgICAgICBpZiAoLS11c2Vyc0luQ3VycmVudEJsb2NrID09IDApIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0OwogICAgICB9CiAgICAgIGlmIChleGNsdWRlRG9taW5hdG9yKSB7CiAgICAgICAgdXNlcnMucmVtb3ZlKGRvbWluYXRvcik7CiAgICAgIH0KICAgIH0KCiAgICAvLyBDb252ZXJ0IHVzZXJzIGludG8gYSBsaXN0IG9mICh1c2VyLCBpbnB1dC1pbmRleCkgdXNlcy4KICAgIGZvciAoSEluc3RydWN0aW9uIHVzZXIgaW4gdXNlcnMpIHsKICAgICAgdmFyIGlucHV0cyA9IHVzZXIuaW5wdXRzOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChpbnB1dHNbaV0gPT0gc291cmNlKSB7CiAgICAgICAgICBfYWRkVXNlKHVzZXIsIGkpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQoKLy8vIEEgcmVmZXJlbmNlIHRvIGEgW0hJbnN0cnVjdGlvbl0gdGhhdCBjYW4gaG9sZCBpdHMgb3duIHNvdXJjZSBpbmZvcm1hdGlvbi4KLy8vCi8vLyBUaGlzIHVzZWQgZm9yIGF0dGFjaGluZyBzb3VyY2UgaW5mb3JtYXRpb24gdG8gcmVhZHMgb2YgbG9jYWxzLgpjbGFzcyBIUmVmIGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBIUmVmKEhJbnN0cnVjdGlvbiB2YWx1ZSwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pCiAgICAgIDogc3VwZXIoW3ZhbHVlXSwgdmFsdWUuaW5zdHJ1Y3Rpb25UeXBlKSB7CiAgICB0aGlzLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgfQoKICBISW5zdHJ1Y3Rpb24gZ2V0IHZhbHVlID0+IGlucHV0c1swXTsKCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIGNvbnZlcnRUeXBlKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwgRGFydFR5cGUgdHlwZSwgaW50IGtpbmQpIHsKICAgIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQgPSB2YWx1ZS5jb252ZXJ0VHlwZShjbG9zZWRXb3JsZCwgdHlwZSwga2luZCk7CiAgICBpZiAoY29udmVydGVkID09IHZhbHVlKSByZXR1cm4gdGhpczsKICAgIEhUeXBlQ29udmVyc2lvbiBjb252ZXJzaW9uID0gY29udmVydGVkOwogICAgY29udmVyc2lvbi5pbnB1dHNbMF0gPSB0aGlzOwogICAgcmV0dXJuIGNvbnZlcnNpb247CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFJlZih0aGlzKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0hSZWYoJHt2YWx1ZX0pJzsKfQoKLy8vIExhdGUgaW5zdHJ1Y3Rpb25zIGFyZSB1c2VkIGFmdGVyIHRoZSBtYWluIG9wdGltaXphdGlvbiBwaGFzZXMuICBUaGV5IGNhcHR1cmUKLy8vIGNvZGVnZW4gZGVjaXNpb25zIGp1c3QgcHJpb3IgdG8gZ2VuZXJhdGluZyBKYXZhU2NyaXB0LgphYnN0cmFjdCBjbGFzcyBITGF0ZUluc3RydWN0aW9uIGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBITGF0ZUluc3RydWN0aW9uKExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMsIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcihpbnB1dHMsIHR5cGUpOwp9CgovLy8gQSBbSENoZWNrXSBpbnN0cnVjdGlvbiBpcyBhbiBpbnN0cnVjdGlvbiB0aGF0IG1pZ2h0IGRvIGEgZHluYW1pYwovLy8gY2hlY2sgYXQgcnVudGltZSBvbiBhbm90aGVyIGluc3RydWN0aW9uLiBUbyBoYXZlIHByb3BlciBpbnN0cnVjdGlvbgovLy8gZGVwZW5kZW5jaWVzIGluIHRoZSBncmFwaCwgaW5zdHJ1Y3Rpb25zIHRoYXQgZGVwZW5kIG9uIHRoZSBjaGVjawovLy8gYmVpbmcgZG9uZSByZWZlcmVuY2UgdGhlIFtIQ2hlY2tdIGluc3RydWN0aW9uIGluc3RlYWQgb2YgdGhlCi8vLyBpbnN0cnVjdGlvbiBpdHNlbGYuCmFic3RyYWN0IGNsYXNzIEhDaGVjayBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgSENoZWNrKGlucHV0cywgdHlwZSkgOiBzdXBlcihpbnB1dHMsIHR5cGUpIHsKICAgIHNldFVzZUd2bigpOwogIH0KICBISW5zdHJ1Y3Rpb24gZ2V0IGNoZWNrZWRJbnB1dCA9PiBpbnB1dHNbMF07CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0pzU3RhdGVtZW50KCkgPT4gdHJ1ZTsKICBAb3ZlcnJpZGUKICBib29sIGNhblRocm93KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gbm9uQ2hlY2soKSA9PiBjaGVja2VkSW5wdXQubm9uQ2hlY2soKTsKfQoKY2xhc3MgSEJvdW5kc0NoZWNrIGV4dGVuZHMgSENoZWNrIHsKICBzdGF0aWMgY29uc3QgaW50IEFMV0FZU19GQUxTRSA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBGVUxMX0NIRUNLID0gMTsKICBzdGF0aWMgY29uc3QgaW50IEFMV0FZU19BQk9WRV9aRVJPID0gMjsKICBzdGF0aWMgY29uc3QgaW50IEFMV0FZU19CRUxPV19MRU5HVEggPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgQUxXQVlTX1RSVUUgPSA0OwoKICAvLy8gRGV0YWlscyB3aGljaCB0ZXN0cyBoYXZlIGJlZW4gZG9uZSBzdGF0aWNhbGx5IGR1cmluZyBjb21waWxhdGlvbi4KICAvLy8gRGVmYXVsdCBpcyB0aGF0IGFsbCBjaGVja3MgbXVzdCBiZSBwZXJmb3JtZWQgZHluYW1pY2FsbHkuCiAgaW50IHN0YXRpY0NoZWNrcyA9IEZVTExfQ0hFQ0s7CgogIEhCb3VuZHNDaGVjayhsZW5ndGgsIGluZGV4LCBhcnJheSwgdHlwZSkKICAgICAgOiBzdXBlcig8SEluc3RydWN0aW9uPltsZW5ndGgsIGluZGV4LCBhcnJheV0sIHR5cGUpOwoKICBISW5zdHJ1Y3Rpb24gZ2V0IGxlbmd0aCA9PiBpbnB1dHNbMV07CiAgSEluc3RydWN0aW9uIGdldCBpbmRleCA9PiBpbnB1dHNbMF07CiAgSEluc3RydWN0aW9uIGdldCBhcnJheSA9PiBpbnB1dHNbMl07CiAgLy8gVGhlcmUgY2FuIGJlIGFuIGFkZGl0aW9uYWwgZm91cnRoIGlucHV0IHdoaWNoIGlzIHRoZSBpbmRleCB0byByZXBvcnQgdG8KICAvLyBbaW9vcmVdLiBUaGlzIGlzIHVzZWQgYnkgdGhlIGV4cGFuc2lvbiBvZiBbSlNBcnJheS5yZW1vdmVMYXN0XS4KICBISW5zdHJ1Y3Rpb24gZ2V0IHJlcG9ydGVkSW5kZXggPT4gaW5wdXRzLmxlbmd0aCA+IDMgPyBpbnB1dHNbM10gOiBpbmRleDsKICBAb3ZlcnJpZGUKICBib29sIGlzQ29udHJvbEZsb3coKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEJvdW5kc0NoZWNrKHRoaXMpOwogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5CT1VORFNfQ0hFQ0tfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBIQm91bmRzQ2hlY2s7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gdHJ1ZTsKfQoKYWJzdHJhY3QgY2xhc3MgSENvbmRpdGlvbmFsQnJhbmNoIGV4dGVuZHMgSENvbnRyb2xGbG93IHsKICBIQ29uZGl0aW9uYWxCcmFuY2goQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4sIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMpCiAgICAgIDogc3VwZXIoZG9tYWluLCBpbnB1dHMpOwogIEhJbnN0cnVjdGlvbiBnZXQgY29uZGl0aW9uID0+IGlucHV0c1swXTsKICBIQmFzaWNCbG9jayBnZXQgdHJ1ZUJyYW5jaCA9PiBibG9jay5zdWNjZXNzb3JzWzBdOwogIEhCYXNpY0Jsb2NrIGdldCBmYWxzZUJyYW5jaCA9PiBibG9jay5zdWNjZXNzb3JzWzFdOwp9CgphYnN0cmFjdCBjbGFzcyBIQ29udHJvbEZsb3cgZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIEhDb250cm9sRmxvdyhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbiwgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cykKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWF5IG9ubHkgZXhwcmVzc2lvbi1saWtlIFtISW5zdHJ1Y3Rpb25dcyBzaG91bGQKICAgICAgLy8gaGF2ZSBhbiBgaW5zdHJ1Y3Rpb25UeXBlYCwgb3Igc3RhdGVtZW50LWxpa2UgW0hJbnN0cnVjdGlvbl1zIHNob3VsZAogICAgICAvLyBoYXZlIGEgdGhyb3dpbmcgZ2V0dGVyLgogICAgICA6IHN1cGVyKGlucHV0cywgZG9tYWluLmVtcHR5VHlwZSk7CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvbnRyb2xGbG93KCkgPT4gdHJ1ZTsKICBAb3ZlcnJpZGUKICBib29sIGlzSnNTdGF0ZW1lbnQoKSA9PiB0cnVlOwp9CgovLyBBbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIGFuIGluc3RhbmNlLgpjbGFzcyBIQ3JlYXRlIGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBmaW5hbCBDbGFzc0VudGl0eSBlbGVtZW50OwoKICAvLy8gRG9lcyB0aGlzIGluc3RydWN0aW9uIGhhdmUgcmVpZmllZCB0eXBlIGluZm9ybWF0aW9uIGFzIHRoZSBsYXN0IGlucHV0PwogIGZpbmFsIGJvb2wgaGFzUnRpSW5wdXQ7CgogIC8vLyBJZiB0aGlzIGZpZWxkIGlzIG5vdCBgbnVsbGAsIHRoaXMgY2FsbCBpcyBmcm9tIGFuIGlubGluZWQgY29uc3RydWN0b3IgYW5kCiAgLy8vIHdlIGhhdmUgdG8gcmVnaXN0ZXIgdGhlIGluc3RhbnRpYXRlZCB0eXBlIGluIHRoZSBjb2RlIGdlbmVyYXRvci4gVGhlCiAgLy8vIFtpbnN0cnVjdGlvblR5cGVdIG9mIHRoaXMgbm9kZSBpcyBub3QgZW5vdWdoLCBiZWNhdXNlIHdlIGFsc28gbmVlZCB0aGUKICAvLy8gdHlwZSBhcmd1bWVudHMuIFNlZSBhbHNvIFtTc2FGcm9tQXN0TWl4aW4uY3VycmVudElubGluZWRJbnN0YW50aWF0aW9uc10uCiAgTGlzdDxJbnRlcmZhY2VUeXBlPiBpbnN0YW50aWF0ZWRUeXBlczsKCiAgLy8vIElmIHRoaXMgbm9kZSBjcmVhdGVzIGEgY2xvc3VyZSBjbGFzcywgW2NhbGxNZXRob2RdIGlzIHRoZSBjYWxsIG1ldGhvZCBvZgogIC8vLyB0aGUgY2xvc3VyZSBjbGFzcy4KICBGdW5jdGlvbkVudGl0eSBjYWxsTWV0aG9kOwoKICBIQ3JlYXRlKHRoaXMuZWxlbWVudCwgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cywgQWJzdHJhY3RWYWx1ZSB0eXBlLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAge3RoaXMuaW5zdGFudGlhdGVkVHlwZXMsIHRoaXMuaGFzUnRpSW5wdXQ6IGZhbHNlLCB0aGlzLmNhbGxNZXRob2R9KQogICAgICA6IHN1cGVyKGlucHV0cywgdHlwZSkgewogICAgdGhpcy5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0FsbG9jYXRpb24oQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+IHRydWU7CgogIEhJbnN0cnVjdGlvbiBnZXQgcnRpSW5wdXQgewogICAgYXNzZXJ0KGhhc1J0aUlucHV0KTsKICAgIHJldHVybiBpbnB1dHMubGFzdDsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0Q3JlYXRlKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnSENyZWF0ZSgkZWxlbWVudCwgJHtpbnN0YW50aWF0ZWRUeXBlc30pJzsKfQoKLy8gQWxsb2NhdGVzIGEgYm94IHRvIGhvbGQgbXV0YXRlZCBjYXB0dXJlZCB2YXJpYWJsZXMuCmNsYXNzIEhDcmVhdGVCb3ggZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIEhDcmVhdGVCb3goQWJzdHJhY3RWYWx1ZSB0eXBlKSA6IHN1cGVyKDxISW5zdHJ1Y3Rpb24+W10sIHR5cGUpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzQWxsb2NhdGlvbihBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRDcmVhdGVCb3godGhpcyk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdIQ3JlYXRlQm94KCknOwp9CgphYnN0cmFjdCBjbGFzcyBISW52b2tlIGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBib29sIF9pc0FsbG9jYXRpb24gPSBmYWxzZTsKCiAgLy8vIFtpc0ludGVyY2VwdGVkQ2FsbF0gaXMgdHJ1ZSBpZiB0aGlzIGludm9jYXRpb24gdXNlcyB0aGUgaW50ZXJjZXB0b3IKICAvLy8gY2FsbGluZyBjb252ZW50aW9uIHdoZXJlIHRoZSBmaXJzdCBpbnB1dCBpcyB0aGUgbWV0aG9kcyBhbmQgdGhlIHNlY29uZAogIC8vLyBpbnB1dCBpcyB0aGUgRGFydCByZWNlaXZlci4KICBib29sIGlzSW50ZXJjZXB0ZWRDYWxsID0gZmFsc2U7CgogIEhJbnZva2UoTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cywgQWJzdHJhY3RWYWx1ZSByZXN1bHRUeXBlKQogICAgICA6IHN1cGVyKGlucHV0cywgcmVzdWx0VHlwZSkgewogICAgc2lkZUVmZmVjdHMuc2V0QWxsU2lkZUVmZmVjdHMoKTsKICAgIHNpZGVFZmZlY3RzLnNldERlcGVuZHNPblNvbWV0aGluZygpOwogIH0KICBzdGF0aWMgY29uc3QgaW50IEFSR1VNRU5UU19PRkZTRVQgPSAxOwoKICBAb3ZlcnJpZGUKICBib29sIGNhblRocm93KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGlzQWxsb2NhdGlvbihBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4gX2lzQWxsb2NhdGlvbjsKCiAgdm9pZCBzZXRBbGxvY2F0aW9uKGJvb2wgdmFsdWUpIHsKICAgIF9pc0FsbG9jYXRpb24gPSB2YWx1ZTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIEhJbnZva2VEeW5hbWljIGV4dGVuZHMgSEludm9rZSB7CiAgZmluYWwgSW52b2tlRHluYW1pY1NwZWNpYWxpemVyIHNwZWNpYWxpemVyOwogIEBvdmVycmlkZQogIFNlbGVjdG9yIHNlbGVjdG9yOwogIEFic3RyYWN0VmFsdWUgX3JlY2VpdmVyVHlwZTsKICBmaW5hbCBBYnN0cmFjdFZhbHVlIF9vcmlnaW5hbFJlY2VpdmVyVHlwZTsKICBNZW1iZXJFbnRpdHkgZWxlbWVudDsKCiAgSEludm9rZUR5bmFtaWMoU2VsZWN0b3Igc2VsZWN0b3IsIHRoaXMuX3JlY2VpdmVyVHlwZSwgdGhpcy5lbGVtZW50LAogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzLCBib29sIGlzSW50ZXJjZXB0ZWQsIEFic3RyYWN0VmFsdWUgcmVzdWx0VHlwZSkKICAgICAgOiB0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3IsCiAgICAgICAgdGhpcy5fb3JpZ2luYWxSZWNlaXZlclR5cGUgPSBfcmVjZWl2ZXJUeXBlLAogICAgICAgIHNwZWNpYWxpemVyID0gaXNJbnRlcmNlcHRlZAogICAgICAgICAgICA/IEludm9rZUR5bmFtaWNTcGVjaWFsaXplci5sb29rdXBTcGVjaWFsaXplcihzZWxlY3RvcikKICAgICAgICAgICAgOiBjb25zdCBJbnZva2VEeW5hbWljU3BlY2lhbGl6ZXIoKSwKICAgICAgICBzdXBlcihpbnB1dHMsIHJlc3VsdFR5cGUpIHsKICAgIGFzc2VydChpc0ludGVyY2VwdGVkICE9IG51bGwpOwogICAgYXNzZXJ0KF9yZWNlaXZlclR5cGUgIT0gbnVsbCk7CiAgICBpc0ludGVyY2VwdGVkQ2FsbCA9IGlzSW50ZXJjZXB0ZWQ7CiAgfQoKICBBYnN0cmFjdFZhbHVlIGdldCByZWNlaXZlclR5cGUgPT4gX3JlY2VpdmVyVHlwZTsKCiAgdm9pZCB1cGRhdGVSZWNlaXZlclR5cGUoCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwgQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgewogICAgX3JlY2VpdmVyVHlwZSA9CiAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5pbnRlcnNlY3Rpb24oX29yaWdpbmFsUmVjZWl2ZXJUeXBlLCB2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnaW52b2tlIGR5bmFtaWM6IHNlbGVjdG9yPSRzZWxlY3RvciwgbWFzaz0kcmVjZWl2ZXJUeXBlJzsKCiAgSEluc3RydWN0aW9uIGdldCByZWNlaXZlciA9PiBpbnB1dHNbMF07CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBnZXREYXJ0UmVjZWl2ZXIoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gaXNDYWxsT25JbnRlcmNlcHRvcihjbG9zZWRXb3JsZCkgPyBpbnB1dHNbMV0gOiBpbnB1dHNbMF07CiAgfQoKICAvLy8gVGhlIHR5cGUgYXJndW1lbnRzIHBhc3NlZCBpbiB0aGlzIGR5bmFtaWMgaW52b2NhdGlvbi4KICBMaXN0PERhcnRUeXBlPiBnZXQgdHlwZUFyZ3VtZW50czsKCiAgLy8vIFJldHVybnMgd2hldGhlciB0aGlzIGNhbGwgaXMgb24gYW4gaW50ZXJjZXB0b3Igb2JqZWN0LgogIGJvb2wgaXNDYWxsT25JbnRlcmNlcHRvcihKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBpc0ludGVyY2VwdGVkQ2FsbCAmJiByZWNlaXZlci5pc0ludGVyY2VwdG9yKGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5JTlZPS0VfRFlOQU1JQ19UWVBFQ09ERTsKCiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBISW52b2tlRHluYW1pYzsKCiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhJbnZva2VEeW5hbWljIG90aGVyKSB7CiAgICAvLyBVc2UgdGhlIG5hbWUgYW5kIHRoZSBraW5kIGluc3RlYWQgb2YgW1NlbGVjdG9yLm9wZXJhdG9yPT1dCiAgICAvLyBiZWNhdXNlIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhlIGFyaXR5IChhbHJlYWR5IGNoZWNrZWQgaW4KICAgIC8vIFtndm5FcXVhbHNdKSwgYW5kIHRoZSByZWNlaXZlciB0eXBlcyBtYXkgbm90IGJlIGluIHN5bmMuCiAgICByZXR1cm4gc2VsZWN0b3IubmFtZSA9PSBvdGhlci5zZWxlY3Rvci5uYW1lICYmCiAgICAgICAgc2VsZWN0b3Iua2luZCA9PSBvdGhlci5zZWxlY3Rvci5raW5kOwogIH0KfQoKY2xhc3MgSEludm9rZUNsb3N1cmUgZXh0ZW5kcyBISW52b2tlRHluYW1pYyB7CiAgQG92ZXJyaWRlCiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50czsKCiAgSEludm9rZUNsb3N1cmUoU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXJUeXBlLAogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzLCBBYnN0cmFjdFZhbHVlIHJlc3VsdFR5cGUsIHRoaXMudHlwZUFyZ3VtZW50cykKICAgICAgOiBzdXBlcihzZWxlY3RvciwgcmVjZWl2ZXJUeXBlLCBudWxsLCBpbnB1dHMsIGZhbHNlLCByZXN1bHRUeXBlKSB7CiAgICBhc3NlcnQoc2VsZWN0b3IuaXNDbG9zdXJlQ2FsbCk7CiAgICBhc3NlcnQoc2VsZWN0b3IuY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRDb3VudCA9PSB0eXBlQXJndW1lbnRzLmxlbmd0aCk7CiAgICBhc3NlcnQoIWlzSW50ZXJjZXB0ZWRDYWxsKTsKICB9CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRJbnZva2VDbG9zdXJlKHRoaXMpOwp9CgpjbGFzcyBISW52b2tlRHluYW1pY01ldGhvZCBleHRlbmRzIEhJbnZva2VEeW5hbWljIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzOwoKICBISW52b2tlRHluYW1pY01ldGhvZCgKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXJUeXBlLAogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzLAogICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdFR5cGUsCiAgICAgIHRoaXMudHlwZUFyZ3VtZW50cywKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIHtib29sIGlzSW50ZXJjZXB0ZWQ6IGZhbHNlfSkKICAgICAgOiBzdXBlcihzZWxlY3RvciwgcmVjZWl2ZXJUeXBlLCBudWxsLCBpbnB1dHMsIGlzSW50ZXJjZXB0ZWQsIHJlc3VsdFR5cGUpIHsKICAgIHRoaXMuc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgIGFzc2VydChzZWxlY3Rvci5jYWxsU3RydWN0dXJlLnR5cGVBcmd1bWVudENvdW50ID09IHR5cGVBcmd1bWVudHMubGVuZ3RoKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+CiAgICAgICdpbnZva2UgZHluYW1pYyBtZXRob2Q6IHNlbGVjdG9yPSRzZWxlY3RvciwgbWFzaz0kcmVjZWl2ZXJUeXBlJzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEludm9rZUR5bmFtaWNNZXRob2QodGhpcyk7Cn0KCmFic3RyYWN0IGNsYXNzIEhJbnZva2VEeW5hbWljRmllbGQgZXh0ZW5kcyBISW52b2tlRHluYW1pYyB7CiAgSEludm9rZUR5bmFtaWNGaWVsZCgKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXJUeXBlLAogICAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCwKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cywKICAgICAgYm9vbCBpc0ludGVyY2VwdGVkLAogICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdFR5cGUpCiAgICAgIDogc3VwZXIoCiAgICAgICAgICAgIHNlbGVjdG9yLCByZWNlaXZlclR5cGUsIGVsZW1lbnQsIGlucHV0cywgaXNJbnRlcmNlcHRlZCwgcmVzdWx0VHlwZSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+CiAgICAgICdpbnZva2UgZHluYW1pYyBmaWVsZDogc2VsZWN0b3I9JHNlbGVjdG9yLCBtYXNrPSRyZWNlaXZlclR5cGUnOwp9CgpjbGFzcyBISW52b2tlRHluYW1pY0dldHRlciBleHRlbmRzIEhJbnZva2VEeW5hbWljRmllbGQgewogIEhJbnZva2VEeW5hbWljR2V0dGVyKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSByZWNlaXZlclR5cGUsCiAgICAgIE1lbWJlckVudGl0eSBlbGVtZW50LAogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzLAogICAgICBib29sIGlzSW50ZXJjZXB0ZWQsCiAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0VHlwZSwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pCiAgICAgIDogc3VwZXIoc2VsZWN0b3IsIHJlY2VpdmVyVHlwZSwgZWxlbWVudCwgaW5wdXRzLCBpc0ludGVyY2VwdGVkLAogICAgICAgICAgICByZXN1bHRUeXBlKSB7CiAgICB0aGlzLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEludm9rZUR5bmFtaWNHZXR0ZXIodGhpcyk7CgogIGJvb2wgZ2V0IGlzVGVhck9mZiA9PiBlbGVtZW50ICE9IG51bGwgJiYgZWxlbWVudC5pc0Z1bmN0aW9uOwoKICBAb3ZlcnJpZGUKICBMaXN0PERhcnRUeXBlPiBnZXQgdHlwZUFyZ3VtZW50cyA9PiBjb25zdCA8RGFydFR5cGU+W107CgogIC8vIFRoZXJlIG1pZ2h0IGJlIGFuIGludGVyY2VwdG9yIGlucHV0LCBzbyBgaW5wdXRzLmxhc3RgIGlzIHRoZSBkYXJ0IHJlY2VpdmVyLgogIEBvdmVycmlkZQogIGJvb2wgY2FuVGhyb3coQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+IGlzVGVhck9mZgogICAgICA/IGlucHV0cy5sYXN0LmlzTnVsbChkb21haW4pLmlzUG90ZW50aWFsbHlUcnVlCiAgICAgIDogc3VwZXIuY2FuVGhyb3coZG9tYWluKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgJ2ludm9rZSBkeW5hbWljIGdldHRlcjogc2VsZWN0b3I9JHNlbGVjdG9yLCBtYXNrPSRyZWNlaXZlclR5cGUnOwp9CgpjbGFzcyBISW52b2tlRHluYW1pY1NldHRlciBleHRlbmRzIEhJbnZva2VEeW5hbWljRmllbGQgewogIC8vLyBJZiBgdHJ1ZWAgYSBjYWxsIHRvIHRoZSBzZXR0ZXIgaXMgbmVlZGVkIGZvciBjaGVja2luZyB0aGUgdHlwZSBldmVuCiAgLy8vIHRob3VnaCB0aGUgdGFyZ2V0IGZpZWxkIGlzIGtub3duLgogIGJvb2wgbmVlZHNDaGVjayA9IGZhbHNlOwoKICBISW52b2tlRHluYW1pY1NldHRlcigKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXJUeXBlLAogICAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCwKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cywKICAgICAgYm9vbCBpc0ludGVyY2VwdGVkLAogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBUaGUgcmVzdWx0IHR5cGUgZm9yIGEgc2V0dGVyIHNob3VsZCBiZSB0aGUgZW1wdHkKICAgICAgLy8gdHlwZS4KICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHRUeXBlLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikKICAgICAgOiBzdXBlcihzZWxlY3RvciwgcmVjZWl2ZXJUeXBlLCBlbGVtZW50LCBpbnB1dHMsIGlzSW50ZXJjZXB0ZWQsCiAgICAgICAgICAgIHJlc3VsdFR5cGUpIHsKICAgIHRoaXMuc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0SW52b2tlRHluYW1pY1NldHRlcih0aGlzKTsKCiAgQG92ZXJyaWRlCiAgTGlzdDxEYXJ0VHlwZT4gZ2V0IHR5cGVBcmd1bWVudHMgPT4gY29uc3QgPERhcnRUeXBlPltdOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PgogICAgICAnaW52b2tlIGR5bmFtaWMgc2V0dGVyOiBzZWxlY3Rvcj0kc2VsZWN0b3IsIG1hc2s9JHJlY2VpdmVyVHlwZSwgZWxlbWVudD0kZWxlbWVudCc7Cn0KCmNsYXNzIEhJbnZva2VTdGF0aWMgZXh0ZW5kcyBISW52b2tlIHsKICBmaW5hbCBNZW1iZXJFbnRpdHkgZWxlbWVudDsKCiAgLy8vIFRoZSB0eXBlIGFyZ3VtZW50cyBwYXNzZWQgaW4gdGhpcyBzdGF0aWMgaW52b2NhdGlvbi4KICBmaW5hbCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzOwoKICBmaW5hbCBib29sIHRhcmdldENhblRocm93OwoKICBAb3ZlcnJpZGUKICBib29sIGNhblRocm93KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PiB0YXJnZXRDYW5UaHJvdzsKCiAgLy8vIElmIHRoaXMgaW5zdHJ1Y3Rpb24gaXMgYSBjYWxsIHRvIGEgY29uc3RydWN0b3IsIFtpbnN0YW50aWF0ZWRUeXBlc10KICAvLy8gY29udGFpbnMgdGhlIHR5cGUocykgdXNlZCBpbiB0aGUgKERhcnQpIGBOZXdgIGV4cHJlc3Npb24ocykuIFRoZQogIC8vLyBbaW5zdHJ1Y3Rpb25UeXBlXSBvZiB0aGlzIG5vZGUgaXMgbm90IGVub3VnaCwgYmVjYXVzZSB3ZSBhbHNvIG5lZWQgdGhlCiAgLy8vIHR5cGUgYXJndW1lbnRzLiBTZWUgYWxzbyBbU3NhRnJvbUFzdE1peGluLmN1cnJlbnRJbmxpbmVkSW5zdGFudGlhdGlvbnNdLgogIExpc3Q8SW50ZXJmYWNlVHlwZT4gaW5zdGFudGlhdGVkVHlwZXM7CgogIC8vLyBUaGUgZmlyc3QgaW5wdXQgbXVzdCBiZSB0aGUgdGFyZ2V0LgogIEhJbnZva2VTdGF0aWModGhpcy5lbGVtZW50LCBpbnB1dHMsIEFic3RyYWN0VmFsdWUgdHlwZSwgdGhpcy50eXBlQXJndW1lbnRzLAogICAgICB7dGhpcy50YXJnZXRDYW5UaHJvdzogdHJ1ZSwgYm9vbCBpc0ludGVyY2VwdGVkOiBmYWxzZX0pCiAgICAgIDogc3VwZXIoaW5wdXRzLCB0eXBlKSB7CiAgICBpc0ludGVyY2VwdGVkQ2FsbCA9IGlzSW50ZXJjZXB0ZWQ7CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEludm9rZVN0YXRpYyh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLklOVk9LRV9TVEFUSUNfVFlQRUNPREU7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdpbnZva2Ugc3RhdGljOiAkZWxlbWVudCc7Cn0KCmNsYXNzIEhJbnZva2VTdXBlciBleHRlbmRzIEhJbnZva2VTdGF0aWMgewogIC8vLyBUaGUgY2xhc3Mgd2hlcmUgdGhlIGNhbGwgdG8gc3VwZXIgaXMgYmVpbmcgZG9uZS4KICBmaW5hbCBDbGFzc0VudGl0eSBjYWxsZXI7CiAgZmluYWwgYm9vbCBpc1NldHRlcjsKICBAb3ZlcnJpZGUKICBmaW5hbCBTZWxlY3RvciBzZWxlY3RvcjsKCiAgSEludm9rZVN1cGVyKAogICAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCwKICAgICAgdGhpcy5jYWxsZXIsCiAgICAgIHRoaXMuc2VsZWN0b3IsCiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMsCiAgICAgIGJvb2wgaXNJbnRlcmNlcHRlZCwKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlLAogICAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAge3RoaXMuaXNTZXR0ZXJ9KQogICAgICA6IHN1cGVyKGVsZW1lbnQsIGlucHV0cywgdHlwZSwgdHlwZUFyZ3VtZW50cywKICAgICAgICAgICAgaXNJbnRlcmNlcHRlZDogaXNJbnRlcmNlcHRlZCkgewogICAgdGhpcy5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogIH0KCiAgSEluc3RydWN0aW9uIGdldCByZWNlaXZlciA9PiBpbnB1dHNbMF07CiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIGdldERhcnRSZWNlaXZlcihKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBpc0NhbGxPbkludGVyY2VwdG9yKGNsb3NlZFdvcmxkKSA/IGlucHV0c1sxXSA6IGlucHV0c1swXTsKICB9CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgdGhpcyBjYWxsIGlzIG9uIGFuIGludGVyY2VwdG9yIG9iamVjdC4KICBib29sIGlzQ2FsbE9uSW50ZXJjZXB0b3IoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gaXNJbnRlcmNlcHRlZENhbGwgJiYgcmVjZWl2ZXIuaXNJbnRlcmNlcHRvcihjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICdpbnZva2Ugc3VwZXI6ICRlbGVtZW50JzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEludm9rZVN1cGVyKHRoaXMpOwoKICBISW5zdHJ1Y3Rpb24gZ2V0IHZhbHVlIHsKICAgIGFzc2VydChpc1NldHRlcik7CiAgICAvLyBUaGUgJ2lucHV0cycgYXJlIFtyZWNlaXZlciwgdmFsdWVdIG9yIFtpbnRlcmNlcHRvciwgcmVjZWl2ZXIsIHZhbHVlXS4KICAgIHJldHVybiBpbnB1dHMubGFzdDsKICB9Cn0KCmNsYXNzIEhJbnZva2VDb25zdHJ1Y3RvckJvZHkgZXh0ZW5kcyBISW52b2tlU3RhdGljIHsKICAvLyBUaGUgJ2lucHV0cycgYXJlCiAgLy8gICAgIFtyZWNlaXZlciwgYXJnMSwgLi4uLCBhcmdOXSBvcgogIC8vICAgICBbaW50ZXJjZXB0b3IsIHJlY2VpdmVyLCBhcmcxLCAuLi4gYXJnTl0uCiAgSEludm9rZUNvbnN0cnVjdG9yQm9keSgKICAgICAgQ29uc3RydWN0b3JCb2R5RW50aXR5IGVsZW1lbnQsCiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMsCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pCiAgICAgIDogc3VwZXIoZWxlbWVudCwgaW5wdXRzLCB0eXBlLCBjb25zdCA8RGFydFR5cGU+W10pIHsKICAgIHRoaXMuc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdpbnZva2UgY29uc3RydWN0b3IgYm9keTogJHtlbGVtZW50Lm5hbWV9JzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEludm9rZUNvbnN0cnVjdG9yQm9keSh0aGlzKTsKfQoKY2xhc3MgSEludm9rZUdlbmVyYXRvckJvZHkgZXh0ZW5kcyBISW52b2tlU3RhdGljIHsKICAvLyBEaXJlY3RseSBjYWxsIHRoZSBKR2VuZXJhdG9yQm9keSBtZXRob2QuIFRoZSBnZW5lcmF0b3IgYm9keSBjYW4gYmUgYSBzdGF0aWMKICAvLyBtZXRob2Qgb3IgYSBtZW1iZXIuIFRoZSB0YXJnZXQgaXMgZGlyZWN0bHkgY2FsbGVkLgogIC8vIFRoZSAnaW5wdXRzJyBhcmUKICAvLyAgICAgW2FyZzEsIC4uLiwgYXJnTl0gb3IKICAvLyAgICAgW3JlY2VpdmVyLCBhcmcxLCAuLi4sIGFyZ05dIG9yCiAgLy8gICAgIFtpbnRlcmNlcHRvciwgcmVjZWl2ZXIsIGFyZzEsIC4uLiBhcmdOXS4KICAvLyBUaGUgJ2lucHV0cycgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBhZGRpdGlvbmFsIHR5cGUgYXJndW1lbnQgdXNlZCBmb3IKICAvLyBjcmVhdGluZyB0aGUgZ2VuZXJhdG9yIChUIGZvciBuZXcgQ29tcGxldGVyPFQ+KCkgaW5zaWRlIHRoZSBib2R5KS4KICBISW52b2tlR2VuZXJhdG9yQm9keShGdW5jdGlvbkVudGl0eSBlbGVtZW50LCBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzLAogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKQogICAgICA6IHN1cGVyKGVsZW1lbnQsIGlucHV0cywgdHlwZSwgY29uc3QgPERhcnRUeXBlPltdKSB7CiAgICB0aGlzLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnSEludm9rZUdlbmVyYXRvckJvZHkoJHtlbGVtZW50Lm5hbWV9KSc7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRJbnZva2VHZW5lcmF0b3JCb2R5KHRoaXMpOwp9CgphYnN0cmFjdCBjbGFzcyBIRmllbGRBY2Nlc3MgZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIGZpbmFsIEZpZWxkRW50aXR5IGVsZW1lbnQ7CgogIEhGaWVsZEFjY2Vzcyh0aGlzLmVsZW1lbnQsIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMsIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcihpbnB1dHMsIHR5cGUpOwoKICBISW5zdHJ1Y3Rpb24gZ2V0IHJlY2VpdmVyID0+IGlucHV0c1swXTsKfQoKY2xhc3MgSEZpZWxkR2V0IGV4dGVuZHMgSEZpZWxkQWNjZXNzIHsKICBmaW5hbCBib29sIGlzQXNzaWduYWJsZTsKCiAgSEZpZWxkR2V0KEZpZWxkRW50aXR5IGVsZW1lbnQsIEhJbnN0cnVjdGlvbiByZWNlaXZlciwgQWJzdHJhY3RWYWx1ZSB0eXBlLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAge2Jvb2wgaXNBc3NpZ25hYmxlfSkKICAgICAgOiB0aGlzLmlzQXNzaWduYWJsZSA9CiAgICAgICAgICAgIChpc0Fzc2lnbmFibGUgIT0gbnVsbCkgPyBpc0Fzc2lnbmFibGUgOiBlbGVtZW50LmlzQXNzaWduYWJsZSwKICAgICAgICBzdXBlcihlbGVtZW50LCA8SEluc3RydWN0aW9uPltyZWNlaXZlcl0sIHR5cGUpIHsKICAgIHRoaXMuc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgIHNpZGVFZmZlY3RzLmNsZWFyQWxsU2lkZUVmZmVjdHMoKTsKICAgIHNpZGVFZmZlY3RzLmNsZWFyQWxsRGVwZW5kZW5jaWVzKCk7CiAgICBzZXRVc2VHdm4oKTsKICAgIGlmICh0aGlzLmlzQXNzaWduYWJsZSkgewogICAgICBzaWRlRWZmZWN0cy5zZXREZXBlbmRzT25JbnN0YW5jZVByb3BlcnR5U3RvcmUoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbnRlcmNlcHRvcihKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmIChzb3VyY2VFbGVtZW50ID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIC8vIEluIGNhc2Ugb2YgYSBjbG9zdXJlIGluc2lkZSBhbiBpbnRlcmNlcHRvciBjbGFzcywgWzp0aGlzOl0gaXMKICAgIC8vIHN0b3JlZCBpbiB0aGUgZ2VuZXJhdGVkIGNsb3N1cmUgY2xhc3MsIGFuZCBhY2Nlc3NlZCB0aHJvdWdoIGEKICAgIC8vIFtIRmllbGRHZXRdLgogICAgaWYgKHNvdXJjZUVsZW1lbnQgaXMgVGhpc0xvY2FsKSB7CiAgICAgIFRoaXNMb2NhbCB0aGlzTG9jYWwgPSBzb3VyY2VFbGVtZW50OwogICAgICByZXR1cm4gY2xvc2VkV29ybGQuaW50ZXJjZXB0b3JEYXRhCiAgICAgICAgICAuaXNJbnRlcmNlcHRlZENsYXNzKHRoaXNMb2NhbC5lbmNsb3NpbmdDbGFzcyk7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNhblRocm93KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICByZWNlaXZlci5pc051bGwoZG9tYWluKS5pc1BvdGVudGlhbGx5VHJ1ZTsKCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIGdldERhcnRSZWNlaXZlcihKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpID0+IHJlY2VpdmVyOwogIEBvdmVycmlkZQogIGJvb2wgb25seVRocm93c05TTSgpID0+IHRydWU7CiAgYm9vbCBnZXQgaXNOdWxsQ2hlY2sgPT4gZWxlbWVudCA9PSBudWxsOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEZpZWxkR2V0KHRoaXMpOwoKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uRklFTERfR0VUX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSEZpZWxkR2V0OwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhIRmllbGRHZXQgb3RoZXIpID0+IGVsZW1lbnQgPT0gb3RoZXIuZWxlbWVudDsKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiRmllbGRHZXQoZWxlbWVudD0kZWxlbWVudCx0eXBlPSRpbnN0cnVjdGlvblR5cGUpIjsKfQoKY2xhc3MgSEZpZWxkU2V0IGV4dGVuZHMgSEZpZWxkQWNjZXNzIHsKICBIRmllbGRTZXQoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4sIEZpZWxkRW50aXR5IGVsZW1lbnQsCiAgICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciwgSEluc3RydWN0aW9uIHZhbHVlKQogICAgICA6IHN1cGVyKGVsZW1lbnQsIDxISW5zdHJ1Y3Rpb24+W3JlY2VpdmVyLCB2YWx1ZV0sIGRvbWFpbi5lbXB0eVR5cGUpIHsKICAgIHNpZGVFZmZlY3RzLmNsZWFyQWxsU2lkZUVmZmVjdHMoKTsKICAgIHNpZGVFZmZlY3RzLmNsZWFyQWxsRGVwZW5kZW5jaWVzKCk7CiAgICBzaWRlRWZmZWN0cy5zZXRDaGFuZ2VzSW5zdGFuY2VQcm9wZXJ0eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5UaHJvdyhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgcmVjZWl2ZXIuaXNOdWxsKGRvbWFpbikuaXNQb3RlbnRpYWxseVRydWU7CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBnZXREYXJ0UmVjZWl2ZXIoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSA9PiByZWNlaXZlcjsKICBAb3ZlcnJpZGUKICBib29sIG9ubHlUaHJvd3NOU00oKSA9PiB0cnVlOwoKICBISW5zdHJ1Y3Rpb24gZ2V0IHZhbHVlID0+IGlucHV0c1sxXTsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEZpZWxkU2V0KHRoaXMpOwoKICAvLyBIRmllbGRTZXQgaXMgYW4gZXhwcmVzc2lvbiBpZiBpdCBoYXMgYSB1c2VyLgogIEBvdmVycmlkZQogIGJvb2wgaXNKc1N0YXRlbWVudCgpID0+IHVzZWRCeS5pc0VtcHR5OwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiRmllbGRTZXQoZWxlbWVudD0kZWxlbWVudCx0eXBlPSRpbnN0cnVjdGlvblR5cGUpIjsKfQoKY2xhc3MgSEdldExlbmd0aCBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgZmluYWwgYm9vbCBpc0Fzc2lnbmFibGU7CiAgSEdldExlbmd0aChISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIsIEFic3RyYWN0VmFsdWUgdHlwZSwKICAgICAge2Jvb2wgdGhpcy5pc0Fzc2lnbmFibGV9KQogICAgICA6IHN1cGVyKDxISW5zdHJ1Y3Rpb24+W3JlY2VpdmVyXSwgdHlwZSkgewogICAgYXNzZXJ0KGlzQXNzaWduYWJsZSAhPSBudWxsKTsKICAgIHNpZGVFZmZlY3RzLmNsZWFyQWxsU2lkZUVmZmVjdHMoKTsKICAgIHNpZGVFZmZlY3RzLmNsZWFyQWxsRGVwZW5kZW5jaWVzKCk7CiAgICBzZXRVc2VHdm4oKTsKICAgIGlmICh0aGlzLmlzQXNzaWduYWJsZSkgewogICAgICBzaWRlRWZmZWN0cy5zZXREZXBlbmRzT25JbnN0YW5jZVByb3BlcnR5U3RvcmUoKTsKICAgIH0KICB9CgogIEhJbnN0cnVjdGlvbiBnZXQgcmVjZWl2ZXIgPT4gaW5wdXRzLnNpbmdsZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5UaHJvdyhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgcmVjZWl2ZXIuaXNOdWxsKGRvbWFpbikuaXNQb3RlbnRpYWxseVRydWU7CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBnZXREYXJ0UmVjZWl2ZXIoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSA9PiByZWNlaXZlcjsKICBAb3ZlcnJpZGUKICBib29sIG9ubHlUaHJvd3NOU00oKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEdldExlbmd0aCh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLkdFVF9MRU5HVEhfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBIR2V0TGVuZ3RoOwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhIR2V0TGVuZ3RoIG90aGVyKSA9PiB0cnVlOwogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICJHZXRMZW5ndGgoKSI7Cn0KCi8vLyBIUmVhZE1vZGlmeVdyaXRlIGlzIGEgbGF0ZSBzdGFnZSBpbnN0cnVjdGlvbiBmb3IgYSBmaWVsZCAocHJvcGVydHkpIHVwZGF0ZQovLy8gdmlhIGFuIGFzc2lnbm1lbnQgb3BlcmF0aW9uIG9yIHByZS0gb3IgcG9zdC1pbmNyZW1lbnQuCmNsYXNzIEhSZWFkTW9kaWZ5V3JpdGUgZXh0ZW5kcyBITGF0ZUluc3RydWN0aW9uIHsKICBzdGF0aWMgY29uc3QgQVNTSUdOX09QID0gMDsKICBzdGF0aWMgY29uc3QgUFJFX09QID0gMTsKICBzdGF0aWMgY29uc3QgUE9TVF9PUCA9IDI7CiAgZmluYWwgRmllbGRFbnRpdHkgZWxlbWVudDsKICBmaW5hbCBTdHJpbmcganNPcDsKICBmaW5hbCBpbnQgb3BLaW5kOwoKICBIUmVhZE1vZGlmeVdyaXRlLl8odGhpcy5lbGVtZW50LCB0aGlzLmpzT3AsIHRoaXMub3BLaW5kLAogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIoaW5wdXRzLCB0eXBlKSB7CiAgICBzaWRlRWZmZWN0cy5jbGVhckFsbFNpZGVFZmZlY3RzKCk7CiAgICBzaWRlRWZmZWN0cy5jbGVhckFsbERlcGVuZGVuY2llcygpOwogICAgc2lkZUVmZmVjdHMuc2V0Q2hhbmdlc0luc3RhbmNlUHJvcGVydHkoKTsKICAgIHNpZGVFZmZlY3RzLnNldERlcGVuZHNPbkluc3RhbmNlUHJvcGVydHlTdG9yZSgpOwogIH0KCiAgSFJlYWRNb2RpZnlXcml0ZS5hc3NpZ25PcChGaWVsZEVudGl0eSBlbGVtZW50LCBTdHJpbmcganNPcCwKICAgICAgSEluc3RydWN0aW9uIHJlY2VpdmVyLCBISW5zdHJ1Y3Rpb24gb3BlcmFuZCwgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHRoaXMuXygKICAgICAgICAgICAgZWxlbWVudCwganNPcCwgQVNTSUdOX09QLCA8SEluc3RydWN0aW9uPltyZWNlaXZlciwgb3BlcmFuZF0sIHR5cGUpOwoKICBIUmVhZE1vZGlmeVdyaXRlLnByZU9wKEZpZWxkRW50aXR5IGVsZW1lbnQsIFN0cmluZyBqc09wLAogICAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIsIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiB0aGlzLl8oZWxlbWVudCwganNPcCwgUFJFX09QLCA8SEluc3RydWN0aW9uPltyZWNlaXZlcl0sIHR5cGUpOwoKICBIUmVhZE1vZGlmeVdyaXRlLnBvc3RPcChGaWVsZEVudGl0eSBlbGVtZW50LCBTdHJpbmcganNPcCwKICAgICAgSEluc3RydWN0aW9uIHJlY2VpdmVyLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogdGhpcy5fKGVsZW1lbnQsIGpzT3AsIFBPU1RfT1AsIDxISW5zdHJ1Y3Rpb24+W3JlY2VpdmVyXSwgdHlwZSk7CgogIEhJbnN0cnVjdGlvbiBnZXQgcmVjZWl2ZXIgPT4gaW5wdXRzWzBdOwoKICBib29sIGdldCBpc1ByZU9wID0+IG9wS2luZCA9PSBQUkVfT1A7CiAgYm9vbCBnZXQgaXNQb3N0T3AgPT4gb3BLaW5kID09IFBPU1RfT1A7CiAgYm9vbCBnZXQgaXNBc3NpZ25PcCA9PiBvcEtpbmQgPT0gQVNTSUdOX09QOwoKICBAb3ZlcnJpZGUKICBib29sIGNhblRocm93KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICByZWNlaXZlci5pc051bGwoZG9tYWluKS5pc1BvdGVudGlhbGx5VHJ1ZTsKCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIGdldERhcnRSZWNlaXZlcihKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpID0+IHJlY2VpdmVyOwogIEBvdmVycmlkZQogIGJvb2wgb25seVRocm93c05TTSgpID0+IHRydWU7CgogIEhJbnN0cnVjdGlvbiBnZXQgdmFsdWUgPT4gaW5wdXRzWzFdOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0UmVhZE1vZGlmeVdyaXRlKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzSnNTdGF0ZW1lbnQoKSA9PiBpc0Fzc2lnbk9wOwogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICJSZWFkTW9kaWZ5V3JpdGUgJGpzT3AgJG9wS2luZCAkZWxlbWVudCI7Cn0KCmFic3RyYWN0IGNsYXNzIEhMb2NhbEFjY2VzcyBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgZmluYWwgTG9jYWwgdmFyaWFibGU7CgogIEhMb2NhbEFjY2Vzcyh0aGlzLnZhcmlhYmxlLCBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIoaW5wdXRzLCB0eXBlKTsKCiAgSEluc3RydWN0aW9uIGdldCByZWNlaXZlciA9PiBpbnB1dHNbMF07Cn0KCmNsYXNzIEhMb2NhbEdldCBleHRlbmRzIEhMb2NhbEFjY2VzcyB7CiAgLy8gTm8gbmVlZCB0byB1c2UgR1ZOIGZvciBhIFtITG9jYWxHZXRdLCBpdCBpcyBqdXN0IGEgbG9jYWwKICAvLyBhY2Nlc3MuCiAgSExvY2FsR2V0KExvY2FsIHZhcmlhYmxlLCBITG9jYWxWYWx1ZSBsb2NhbCwgQWJzdHJhY3RWYWx1ZSB0eXBlLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikKICAgICAgOiBzdXBlcih2YXJpYWJsZSwgPEhJbnN0cnVjdGlvbj5bbG9jYWxdLCB0eXBlKSB7CiAgICB0aGlzLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdExvY2FsR2V0KHRoaXMpOwoKICBITG9jYWxWYWx1ZSBnZXQgbG9jYWwgPT4gaW5wdXRzWzBdOwp9CgpjbGFzcyBITG9jYWxTZXQgZXh0ZW5kcyBITG9jYWxBY2Nlc3MgewogIEhMb2NhbFNldChBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbiwgTG9jYWwgdmFyaWFibGUsIEhMb2NhbFZhbHVlIGxvY2FsLAogICAgICBISW5zdHJ1Y3Rpb24gdmFsdWUpCiAgICAgIDogc3VwZXIodmFyaWFibGUsIDxISW5zdHJ1Y3Rpb24+W2xvY2FsLCB2YWx1ZV0sIGRvbWFpbi5lbXB0eVR5cGUpOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdExvY2FsU2V0KHRoaXMpOwoKICBITG9jYWxWYWx1ZSBnZXQgbG9jYWwgPT4gaW5wdXRzWzBdOwogIEhJbnN0cnVjdGlvbiBnZXQgdmFsdWUgPT4gaW5wdXRzWzFdOwogIEBvdmVycmlkZQogIGJvb2wgaXNKc1N0YXRlbWVudCgpID0+IHRydWU7Cn0KCmFic3RyYWN0IGNsYXNzIEhGb3JlaWduIGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBIRm9yZWlnbihBYnN0cmFjdFZhbHVlIHR5cGUsIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMpIDogc3VwZXIoaW5wdXRzLCB0eXBlKTsKCiAgYm9vbCBnZXQgaXNTdGF0ZW1lbnQgPT4gZmFsc2U7CiAgTmF0aXZlQmVoYXZpb3IgZ2V0IG5hdGl2ZUJlaGF2aW9yID0+IG51bGw7CgogIEBvdmVycmlkZQogIGJvb2wgY2FuVGhyb3coQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pIHsKICAgIHJldHVybiBzaWRlRWZmZWN0cy5oYXNTaWRlRWZmZWN0cygpIHx8IHNpZGVFZmZlY3RzLmRlcGVuZHNPblNvbWV0aGluZygpOwogIH0KfQoKY2xhc3MgSEZvcmVpZ25Db2RlIGV4dGVuZHMgSEZvcmVpZ24gewogIGZpbmFsIGpzLlRlbXBsYXRlIGNvZGVUZW1wbGF0ZTsKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzU3RhdGVtZW50OwogIEBvdmVycmlkZQogIGZpbmFsIE5hdGl2ZUJlaGF2aW9yIG5hdGl2ZUJlaGF2aW9yOwogIE5hdGl2ZVRocm93QmVoYXZpb3IgdGhyb3dCZWhhdmlvcjsKICBmaW5hbCBGdW5jdGlvbkVudGl0eSBmb3JlaWduRnVuY3Rpb247CgogIEhGb3JlaWduQ29kZSh0aGlzLmNvZGVUZW1wbGF0ZSwgQWJzdHJhY3RWYWx1ZSB0eXBlLCBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzLAogICAgICB7dGhpcy5pc1N0YXRlbWVudDogZmFsc2UsCiAgICAgIFNpZGVFZmZlY3RzIGVmZmVjdHMsCiAgICAgIE5hdGl2ZUJlaGF2aW9yIG5hdGl2ZUJlaGF2aW9yLAogICAgICBOYXRpdmVUaHJvd0JlaGF2aW9yIHRocm93QmVoYXZpb3IsCiAgICAgIHRoaXMuZm9yZWlnbkZ1bmN0aW9ufSkKICAgICAgOiB0aGlzLm5hdGl2ZUJlaGF2aW9yID0gbmF0aXZlQmVoYXZpb3IsCiAgICAgICAgdGhpcy50aHJvd0JlaGF2aW9yID0gdGhyb3dCZWhhdmlvciwKICAgICAgICBzdXBlcih0eXBlLCBpbnB1dHMpIHsKICAgIGFzc2VydChjb2RlVGVtcGxhdGUgIT0gbnVsbCk7CiAgICBpZiAoZWZmZWN0cyA9PSBudWxsICYmIG5hdGl2ZUJlaGF2aW9yICE9IG51bGwpIHsKICAgICAgZWZmZWN0cyA9IG5hdGl2ZUJlaGF2aW9yLnNpZGVFZmZlY3RzOwogICAgfQogICAgaWYgKHRoaXMudGhyb3dCZWhhdmlvciA9PSBudWxsKSB7CiAgICAgIHRoaXMudGhyb3dCZWhhdmlvciA9IChuYXRpdmVCZWhhdmlvciA9PSBudWxsKQogICAgICAgICAgPyBOYXRpdmVUaHJvd0JlaGF2aW9yLk1BWQogICAgICAgICAgOiBuYXRpdmVCZWhhdmlvci50aHJvd0JlaGF2aW9yOwogICAgfQogICAgYXNzZXJ0KHRoaXMudGhyb3dCZWhhdmlvciAhPSBudWxsKTsKCiAgICBpZiAoZWZmZWN0cyAhPSBudWxsKSBzaWRlRWZmZWN0cy5hZGQoZWZmZWN0cyk7CiAgICBpZiAobmF0aXZlQmVoYXZpb3IgIT0gbnVsbCAmJiBuYXRpdmVCZWhhdmlvci51c2VHdm4pIHsKICAgICAgc2V0VXNlR3ZuKCk7CiAgICB9CiAgfQoKICBIRm9yZWlnbkNvZGUuc3RhdGVtZW50KGpzLlRlbXBsYXRlIGNvZGVUZW1wbGF0ZSwgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cywKICAgICAgU2lkZUVmZmVjdHMgZWZmZWN0cywgTmF0aXZlQmVoYXZpb3IgbmF0aXZlQmVoYXZpb3IsIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiB0aGlzKGNvZGVUZW1wbGF0ZSwgdHlwZSwgaW5wdXRzLAogICAgICAgICAgICBpc1N0YXRlbWVudDogdHJ1ZSwKICAgICAgICAgICAgZWZmZWN0czogZWZmZWN0cywKICAgICAgICAgICAgbmF0aXZlQmVoYXZpb3I6IG5hdGl2ZUJlaGF2aW9yKTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRGb3JlaWduQ29kZSh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0pzU3RhdGVtZW50KCkgPT4gaXNTdGF0ZW1lbnQ7CiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5UaHJvdyhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgewogICAgaWYgKGlucHV0cy5sZW5ndGggPiAwKSB7CiAgICAgIHJldHVybiBpbnB1dHMuZmlyc3QuaXNOdWxsKGRvbWFpbikuaXNQb3RlbnRpYWxseVRydWUKICAgICAgICAgID8gdGhyb3dCZWhhdmlvci5jYW5UaHJvdwogICAgICAgICAgOiB0aHJvd0JlaGF2aW9yLm9uTm9uTnVsbC5jYW5UaHJvdzsKICAgIH0KICAgIHJldHVybiB0aHJvd0JlaGF2aW9yLmNhblRocm93OwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvbmx5VGhyb3dzTlNNKCkgPT4gdGhyb3dCZWhhdmlvci5pc09ubHlOdWxsTlNNR3VhcmQ7CgogIEBvdmVycmlkZQogIGJvb2wgaXNBbGxvY2F0aW9uKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBuYXRpdmVCZWhhdmlvciAhPSBudWxsICYmCiAgICAgIG5hdGl2ZUJlaGF2aW9yLmlzQWxsb2NhdGlvbiAmJgogICAgICBpc051bGwoZG9tYWluKS5pc0RlZmluaXRlbHlGYWxzZTsKCiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLkZPUkVJR05fQ09ERV9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhGb3JlaWduQ29kZTsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEZvcmVpZ25Db2RlIG90aGVyKSB7CiAgICByZXR1cm4gY29kZVRlbXBsYXRlLnNvdXJjZSAhPSBudWxsICYmCiAgICAgICAgY29kZVRlbXBsYXRlLnNvdXJjZSA9PSBvdGhlci5jb2RlVGVtcGxhdGUuc291cmNlOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0hGb3JlaWduQ29kZSgiJHtjb2RlVGVtcGxhdGUuc291cmNlfSIpJzsKfQoKYWJzdHJhY3QgY2xhc3MgSEludm9rZUJpbmFyeSBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU2VsZWN0b3Igc2VsZWN0b3I7CiAgSEludm9rZUJpbmFyeSgKICAgICAgSEluc3RydWN0aW9uIGxlZnQsIEhJbnN0cnVjdGlvbiByaWdodCwgdGhpcy5zZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKDxISW5zdHJ1Y3Rpb24+W2xlZnQsIHJpZ2h0XSwgdHlwZSkgewogICAgc2lkZUVmZmVjdHMuY2xlYXJBbGxTaWRlRWZmZWN0cygpOwogICAgc2lkZUVmZmVjdHMuY2xlYXJBbGxEZXBlbmRlbmNpZXMoKTsKICAgIHNldFVzZUd2bigpOwogIH0KCiAgSEluc3RydWN0aW9uIGdldCBsZWZ0ID0+IGlucHV0c1swXTsKICBISW5zdHJ1Y3Rpb24gZ2V0IHJpZ2h0ID0+IGlucHV0c1sxXTsKCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKTsKfQoKYWJzdHJhY3QgY2xhc3MgSEJpbmFyeUFyaXRobWV0aWMgZXh0ZW5kcyBISW52b2tlQmluYXJ5IHsKICBIQmluYXJ5QXJpdGhtZXRpYyhISW5zdHJ1Y3Rpb24gbGVmdCwgSEluc3RydWN0aW9uIHJpZ2h0LCBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKGxlZnQsIHJpZ2h0LCBzZWxlY3RvciwgdHlwZSk7CiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKTsKfQoKY2xhc3MgSEFkZCBleHRlbmRzIEhCaW5hcnlBcml0aG1ldGljIHsKICBIQWRkKEhJbnN0cnVjdGlvbiBsZWZ0LCBISW5zdHJ1Y3Rpb24gcmlnaHQsIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIobGVmdCwgcmlnaHQsIHNlbGVjdG9yLCB0eXBlKTsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEFkZCh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSA9PiBjb25zdGFudF9zeXN0ZW0uYWRkOwogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5BRERfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBIQWRkOwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IHRydWU7Cn0KCmNsYXNzIEhEaXZpZGUgZXh0ZW5kcyBIQmluYXJ5QXJpdGhtZXRpYyB7CiAgSERpdmlkZShISW5zdHJ1Y3Rpb24gbGVmdCwgSEluc3RydWN0aW9uIHJpZ2h0LCBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKGxlZnQsIHJpZ2h0LCBzZWxlY3RvciwgdHlwZSk7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXREaXZpZGUodGhpcyk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgPT4gY29uc3RhbnRfc3lzdGVtLmRpdmlkZTsKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uRElWSURFX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSERpdmlkZTsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiB0cnVlOwp9CgpjbGFzcyBITXVsdGlwbHkgZXh0ZW5kcyBIQmluYXJ5QXJpdGhtZXRpYyB7CiAgSE11bHRpcGx5KEhJbnN0cnVjdGlvbiBsZWZ0LCBISW5zdHJ1Y3Rpb24gcmlnaHQsIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIobGVmdCwgcmlnaHQsIHNlbGVjdG9yLCB0eXBlKTsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdE11bHRpcGx5KHRoaXMpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpID0+IGNvbnN0YW50X3N5c3RlbS5tdWx0aXBseTsKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uTVVMVElQTFlfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBITXVsdGlwbHk7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gdHJ1ZTsKfQoKY2xhc3MgSFN1YnRyYWN0IGV4dGVuZHMgSEJpbmFyeUFyaXRobWV0aWMgewogIEhTdWJ0cmFjdChISW5zdHJ1Y3Rpb24gbGVmdCwgSEluc3RydWN0aW9uIHJpZ2h0LCBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKGxlZnQsIHJpZ2h0LCBzZWxlY3RvciwgdHlwZSk7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRTdWJ0cmFjdCh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSA9PiBjb25zdGFudF9zeXN0ZW0uc3VidHJhY3Q7CiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLlNVQlRSQUNUX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSFN1YnRyYWN0OwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IHRydWU7Cn0KCmNsYXNzIEhUcnVuY2F0aW5nRGl2aWRlIGV4dGVuZHMgSEJpbmFyeUFyaXRobWV0aWMgewogIEhUcnVuY2F0aW5nRGl2aWRlKEhJbnN0cnVjdGlvbiBsZWZ0LCBISW5zdHJ1Y3Rpb24gcmlnaHQsIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIobGVmdCwgcmlnaHQsIHNlbGVjdG9yLCB0eXBlKTsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFRydW5jYXRpbmdEaXZpZGUodGhpcyk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgPT4KICAgICAgY29uc3RhbnRfc3lzdGVtLnRydW5jYXRpbmdEaXZpZGU7CiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLlRSVU5DQVRJTkdfRElWSURFX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSFRydW5jYXRpbmdEaXZpZGU7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gdHJ1ZTsKfQoKY2xhc3MgSFJlbWFpbmRlciBleHRlbmRzIEhCaW5hcnlBcml0aG1ldGljIHsKICBIUmVtYWluZGVyKEhJbnN0cnVjdGlvbiBsZWZ0LCBISW5zdHJ1Y3Rpb24gcmlnaHQsIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIobGVmdCwgcmlnaHQsIHNlbGVjdG9yLCB0eXBlKTsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFJlbWFpbmRlcih0aGlzKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSA9PiBjb25zdGFudF9zeXN0ZW0ucmVtYWluZGVyOwogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5SRU1BSU5ERVJfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBIUmVtYWluZGVyOwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IHRydWU7Cn0KCi8vLyBBbiBbSFN3aXRjaF0gaW5zdHJ1Y3Rpb24gaGFzIG9uZSBpbnB1dCBmb3IgdGhlIGluY29taW5nCi8vLyB2YWx1ZSwgYW5kIG9uZSBpbnB1dCBwZXIgY29uc3RhbnQgdGhhdCBpdCBjYW4gc3dpdGNoIG9uLgovLy8gSXRzIGJsb2NrIGhhcyBvbmUgc3VjY2Vzc29yIHBlciBjb25zdGFudCwgYW5kIG9uZSBmb3IgdGhlIGRlZmF1bHQuCmNsYXNzIEhTd2l0Y2ggZXh0ZW5kcyBIQ29udHJvbEZsb3cgewogIEhTd2l0Y2goQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4sIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMpCiAgICAgIDogc3VwZXIoZG9tYWluLCBpbnB1dHMpOwoKICBIQ29uc3RhbnQgY29uc3RhbnQoaW50IGluZGV4KSA9PiBpbnB1dHNbaW5kZXggKyAxXTsKICBISW5zdHJ1Y3Rpb24gZ2V0IGV4cHJlc3Npb24gPT4gaW5wdXRzWzBdOwoKICAvLy8gUHJvdmlkZXMgdGhlIHRhcmdldCB0byBqdW1wIHRvIGlmIG5vbmUgb2YgdGhlIGNvbnN0YW50cyBtYXRjaAogIC8vLyB0aGUgZXhwcmVzc2lvbi4gSWYgdGhlIHN3aXRjaCBoYWQgbm8gZGVmYXVsdCBjYXNlLCB0aGlzIGlzIHRoZQogIC8vLyBmb2xsb3dpbmcgam9pbi1ibG9jay4KICBIQmFzaWNCbG9jayBnZXQgZGVmYXVsdFRhcmdldCA9PiBibG9jay5zdWNjZXNzb3JzLmxhc3Q7CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0U3dpdGNoKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiSFN3aXRjaCBjYXNlcyA9ICRpbnB1dHMiOwp9CgphYnN0cmFjdCBjbGFzcyBIQmluYXJ5Qml0T3AgZXh0ZW5kcyBISW52b2tlQmluYXJ5IHsKICBIQmluYXJ5Qml0T3AoSEluc3RydWN0aW9uIGxlZnQsIEhJbnN0cnVjdGlvbiByaWdodCwgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcihsZWZ0LCByaWdodCwgc2VsZWN0b3IsIHR5cGUpOwp9CgpjbGFzcyBIU2hpZnRMZWZ0IGV4dGVuZHMgSEJpbmFyeUJpdE9wIHsKICBIU2hpZnRMZWZ0KEhJbnN0cnVjdGlvbiBsZWZ0LCBISW5zdHJ1Y3Rpb24gcmlnaHQsIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIobGVmdCwgcmlnaHQsIHNlbGVjdG9yLCB0eXBlKTsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFNoaWZ0TGVmdCh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSA9PiBjb25zdGFudF9zeXN0ZW0uc2hpZnRMZWZ0OwogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5TSElGVF9MRUZUX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSFNoaWZ0TGVmdDsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiB0cnVlOwp9CgpjbGFzcyBIU2hpZnRSaWdodCBleHRlbmRzIEhCaW5hcnlCaXRPcCB7CiAgSFNoaWZ0UmlnaHQoSEluc3RydWN0aW9uIGxlZnQsIEhJbnN0cnVjdGlvbiByaWdodCwgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcihsZWZ0LCByaWdodCwgc2VsZWN0b3IsIHR5cGUpOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0U2hpZnRSaWdodCh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSA9PiBjb25zdGFudF9zeXN0ZW0uc2hpZnRSaWdodDsKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uU0hJRlRfUklHSFRfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBIU2hpZnRSaWdodDsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiB0cnVlOwp9CgpjbGFzcyBIQml0T3IgZXh0ZW5kcyBIQmluYXJ5Qml0T3AgewogIEhCaXRPcihISW5zdHJ1Y3Rpb24gbGVmdCwgSEluc3RydWN0aW9uIHJpZ2h0LCBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKGxlZnQsIHJpZ2h0LCBzZWxlY3RvciwgdHlwZSk7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRCaXRPcih0aGlzKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSA9PiBjb25zdGFudF9zeXN0ZW0uYml0T3I7CiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLkJJVF9PUl9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhCaXRPcjsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiB0cnVlOwp9CgpjbGFzcyBIQml0QW5kIGV4dGVuZHMgSEJpbmFyeUJpdE9wIHsKICBIQml0QW5kKEhJbnN0cnVjdGlvbiBsZWZ0LCBISW5zdHJ1Y3Rpb24gcmlnaHQsIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIobGVmdCwgcmlnaHQsIHNlbGVjdG9yLCB0eXBlKTsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEJpdEFuZCh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSA9PiBjb25zdGFudF9zeXN0ZW0uYml0QW5kOwogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5CSVRfQU5EX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSEJpdEFuZDsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiB0cnVlOwp9CgpjbGFzcyBIQml0WG9yIGV4dGVuZHMgSEJpbmFyeUJpdE9wIHsKICBIQml0WG9yKEhJbnN0cnVjdGlvbiBsZWZ0LCBISW5zdHJ1Y3Rpb24gcmlnaHQsIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIobGVmdCwgcmlnaHQsIHNlbGVjdG9yLCB0eXBlKTsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEJpdFhvcih0aGlzKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSA9PiBjb25zdGFudF9zeXN0ZW0uYml0WG9yOwogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5CSVRfWE9SX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSEJpdFhvcjsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiB0cnVlOwp9CgphYnN0cmFjdCBjbGFzcyBISW52b2tlVW5hcnkgZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIEBvdmVycmlkZQogIGZpbmFsIFNlbGVjdG9yIHNlbGVjdG9yOwogIEhJbnZva2VVbmFyeShISW5zdHJ1Y3Rpb24gaW5wdXQsIHRoaXMuc2VsZWN0b3IsIHR5cGUpCiAgICAgIDogc3VwZXIoPEhJbnN0cnVjdGlvbj5baW5wdXRdLCB0eXBlKSB7CiAgICBzaWRlRWZmZWN0cy5jbGVhckFsbFNpZGVFZmZlY3RzKCk7CiAgICBzaWRlRWZmZWN0cy5jbGVhckFsbERlcGVuZGVuY2llcygpOwogICAgc2V0VXNlR3ZuKCk7CiAgfQoKICBISW5zdHJ1Y3Rpb24gZ2V0IG9wZXJhbmQgPT4gaW5wdXRzWzBdOwoKICBjb25zdGFudF9zeXN0ZW0uVW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCk7Cn0KCmNsYXNzIEhOZWdhdGUgZXh0ZW5kcyBISW52b2tlVW5hcnkgewogIEhOZWdhdGUoSEluc3RydWN0aW9uIGlucHV0LCBTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKGlucHV0LCBzZWxlY3RvciwgdHlwZSk7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXROZWdhdGUodGhpcyk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5VbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSA9PiBjb25zdGFudF9zeXN0ZW0ubmVnYXRlOwogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5ORUdBVEVfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBITmVnYXRlOwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IHRydWU7Cn0KCmNsYXNzIEhBYnMgZXh0ZW5kcyBISW52b2tlVW5hcnkgewogIEhBYnMoSEluc3RydWN0aW9uIGlucHV0LCBTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKGlucHV0LCBzZWxlY3RvciwgdHlwZSk7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRBYnModGhpcyk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5VbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSA9PiBjb25zdGFudF9zeXN0ZW0uYWJzOwogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5BQlNfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBIQWJzOwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IHRydWU7Cn0KCmNsYXNzIEhCaXROb3QgZXh0ZW5kcyBISW52b2tlVW5hcnkgewogIEhCaXROb3QoSEluc3RydWN0aW9uIGlucHV0LCBTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKGlucHV0LCBzZWxlY3RvciwgdHlwZSk7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRCaXROb3QodGhpcyk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5VbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSA9PiBjb25zdGFudF9zeXN0ZW0uYml0Tm90OwogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5CSVRfTk9UX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSEJpdE5vdDsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiB0cnVlOwp9CgpjbGFzcyBIRXhpdCBleHRlbmRzIEhDb250cm9sRmxvdyB7CiAgSEV4aXQoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pIDogc3VwZXIoZG9tYWluLCBjb25zdCA8SEluc3RydWN0aW9uPltdKTsKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICdleGl0JzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEV4aXQodGhpcyk7Cn0KCmNsYXNzIEhHb3RvIGV4dGVuZHMgSENvbnRyb2xGbG93IHsKICBIR290byhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgOiBzdXBlcihkb21haW4sIGNvbnN0IDxISW5zdHJ1Y3Rpb24+W10pOwogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gJ2dvdG8nOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0R290byh0aGlzKTsKfQoKYWJzdHJhY3QgY2xhc3MgSEp1bXAgZXh0ZW5kcyBIQ29udHJvbEZsb3cgewogIGZpbmFsIEp1bXBUYXJnZXQgdGFyZ2V0OwogIGZpbmFsIExhYmVsRGVmaW5pdGlvbiBsYWJlbDsKICBISnVtcChBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbiwgdGhpcy50YXJnZXQsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKQogICAgICA6IGxhYmVsID0gbnVsbCwKICAgICAgICBzdXBlcihkb21haW4sIGNvbnN0IDxISW5zdHJ1Y3Rpb24+W10pIHsKICAgIHRoaXMuc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICB9CiAgSEp1bXAudG9MYWJlbChBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbiwgTGFiZWxEZWZpbml0aW9uIGxhYmVsLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikKICAgICAgOiBsYWJlbCA9IGxhYmVsLAogICAgICAgIHRhcmdldCA9IGxhYmVsLnRhcmdldCwKICAgICAgICBzdXBlcihkb21haW4sIGNvbnN0IDxISW5zdHJ1Y3Rpb24+W10pIHsKICAgIHRoaXMuc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICB9Cn0KCmNsYXNzIEhCcmVhayBleHRlbmRzIEhKdW1wIHsKICAvLy8gU2lnbmFscyB0aGF0IHRoaXMgaXMgYSBzcGVjaWFsIGJyZWFrIGluc3RydWN0aW9uIGZvciB0aGUgc3ludGhldGljIGxvb3AKICAvLy8gZ2VuZXJhdGVkIGZvciBhIHN3aXRjaCBzdGF0ZW1lbnQgd2l0aCBjb250aW51ZSBzdGF0ZW1lbnRzLiBTZWUKICAvLy8gW1NzYUZyb21Bc3RNaXhpbi5idWlsZENvbXBsZXhTd2l0Y2hTdGF0ZW1lbnRdIGZvciBkZXRhaWwuCiAgZmluYWwgYm9vbCBicmVha1N3aXRjaENvbnRpbnVlTG9vcDsKCiAgSEJyZWFrKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluLCBKdW1wVGFyZ2V0IHRhcmdldCwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIHtib29sIHRoaXMuYnJlYWtTd2l0Y2hDb250aW51ZUxvb3A6IGZhbHNlfSkKICAgICAgOiBzdXBlcihkb21haW4sIHRhcmdldCwgc291cmNlSW5mb3JtYXRpb24pOwoKICBIQnJlYWsudG9MYWJlbChBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbiwgTGFiZWxEZWZpbml0aW9uIGxhYmVsLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikKICAgICAgOiBicmVha1N3aXRjaENvbnRpbnVlTG9vcCA9IGZhbHNlLAogICAgICAgIHN1cGVyLnRvTGFiZWwoZG9tYWluLCBsYWJlbCwgc291cmNlSW5mb3JtYXRpb24pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAobGFiZWwgIT0gbnVsbCkgPyAnYnJlYWsgJHtsYWJlbC5sYWJlbE5hbWV9JyA6ICdicmVhayc7CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0QnJlYWsodGhpcyk7Cn0KCmNsYXNzIEhDb250aW51ZSBleHRlbmRzIEhKdW1wIHsKICBIQ29udGludWUoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4sIEp1bXBUYXJnZXQgdGFyZ2V0LAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikKICAgICAgOiBzdXBlcihkb21haW4sIHRhcmdldCwgc291cmNlSW5mb3JtYXRpb24pOwoKICBIQ29udGludWUudG9MYWJlbChBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbiwgTGFiZWxEZWZpbml0aW9uIGxhYmVsLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikKICAgICAgOiBzdXBlci50b0xhYmVsKGRvbWFpbiwgbGFiZWwsIHNvdXJjZUluZm9ybWF0aW9uKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgKGxhYmVsICE9IG51bGwpID8gJ2NvbnRpbnVlICR7bGFiZWwubGFiZWxOYW1lfScgOiAnY29udGludWUnOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdENvbnRpbnVlKHRoaXMpOwp9CgpjbGFzcyBIVHJ5IGV4dGVuZHMgSENvbnRyb2xGbG93IHsKICBITG9jYWxWYWx1ZSBleGNlcHRpb247CiAgSEJhc2ljQmxvY2sgY2F0Y2hCbG9jazsKICBIQmFzaWNCbG9jayBmaW5hbGx5QmxvY2s7CiAgSFRyeShBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgOiBzdXBlcihkb21haW4sIGNvbnN0IDxISW5zdHJ1Y3Rpb24+W10pOwogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gJ3RyeSc7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRUcnkodGhpcyk7CiAgSEJhc2ljQmxvY2sgZ2V0IGpvaW5CbG9jayA9PiB0aGlzLmJsb2NrLnN1Y2Nlc3NvcnMubGFzdDsKfQoKLy8gQW4gW0hFeGl0VHJ5XSBjb250cm9sIGZsb3cgbm9kZSBpcyB1c2VkIHdoZW4gdGhlIGJvZHkgb2YgYSB0cnkgb3IKLy8gdGhlIGJvZHkgb2YgYSBjYXRjaCBjb250YWlucyBhIHJldHVybiwgYnJlYWsgb3IgY29udGludWUuIFRvIGJ1aWxkCi8vIHRoZSBjb250cm9sIGZsb3cgZ3JhcGgsIHdlIGV4cGxpY2l0bHkgbWFyayB0aGUgYm9keSB0aGF0Ci8vIGxlYWRzIHRvIG9uZSBvZiB0aGlzIGluc3RydWN0aW9uIGEgcHJlZGVjZXNzb3Igb2YgY2F0Y2ggYW5kCi8vIGZpbmFsbHkuCmNsYXNzIEhFeGl0VHJ5IGV4dGVuZHMgSENvbnRyb2xGbG93IHsKICBIRXhpdFRyeShBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgOiBzdXBlcihkb21haW4sIGNvbnN0IDxISW5zdHJ1Y3Rpb24+W10pOwogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gJ2V4aXQgdHJ5JzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEV4aXRUcnkodGhpcyk7CiAgSEJhc2ljQmxvY2sgZ2V0IGJvZHlUcnlTdWNjZXNzb3IgPT4gYmxvY2suc3VjY2Vzc29yc1swXTsKfQoKY2xhc3MgSElmIGV4dGVuZHMgSENvbmRpdGlvbmFsQnJhbmNoIHsKICBIQmxvY2tGbG93IGJsb2NrSW5mb3JtYXRpb24gPSBudWxsOwogIEhJZihBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbiwgSEluc3RydWN0aW9uIGNvbmRpdGlvbikKICAgICAgOiBzdXBlcihkb21haW4sIDxISW5zdHJ1Y3Rpb24+W2NvbmRpdGlvbl0pOwogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gJ2lmJzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdElmKHRoaXMpOwoKICBIQmFzaWNCbG9jayBnZXQgdGhlbkJsb2NrIHsKICAgIGFzc2VydChpZGVudGljYWwoYmxvY2suZG9taW5hdGVkQmxvY2tzWzBdLCBibG9jay5zdWNjZXNzb3JzWzBdKSk7CiAgICByZXR1cm4gYmxvY2suc3VjY2Vzc29yc1swXTsKICB9CgogIEhCYXNpY0Jsb2NrIGdldCBlbHNlQmxvY2sgewogICAgYXNzZXJ0KGlkZW50aWNhbChibG9jay5kb21pbmF0ZWRCbG9ja3NbMV0sIGJsb2NrLnN1Y2Nlc3NvcnNbMV0pKTsKICAgIHJldHVybiBibG9jay5zdWNjZXNzb3JzWzFdOwogIH0KCiAgSEJhc2ljQmxvY2sgZ2V0IGpvaW5CbG9jayA9PiBibG9ja0luZm9ybWF0aW9uLmNvbnRpbnVhdGlvbjsKfQoKY2xhc3MgSExvb3BCcmFuY2ggZXh0ZW5kcyBIQ29uZGl0aW9uYWxCcmFuY2ggewogIHN0YXRpYyBjb25zdCBpbnQgQ09ORElUSU9OX0ZJUlNUX0xPT1AgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgRE9fV0hJTEVfTE9PUCA9IDE7CgogIGZpbmFsIGludCBraW5kOwogIEhMb29wQnJhbmNoKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluLCBISW5zdHJ1Y3Rpb24gY29uZGl0aW9uLAogICAgICBbdGhpcy5raW5kID0gQ09ORElUSU9OX0ZJUlNUX0xPT1BdKQogICAgICA6IHN1cGVyKGRvbWFpbiwgPEhJbnN0cnVjdGlvbj5bY29uZGl0aW9uXSk7CiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAnbG9vcC1icmFuY2gnOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0TG9vcEJyYW5jaCh0aGlzKTsKfQoKY2xhc3MgSENvbnN0YW50IGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBmaW5hbCBDb25zdGFudFZhbHVlIGNvbnN0YW50OwogIEhDb25zdGFudC5pbnRlcm5hbCh0aGlzLmNvbnN0YW50LCBBYnN0cmFjdFZhbHVlIGNvbnN0YW50VHlwZSkKICAgICAgOiBzdXBlcig8SEluc3RydWN0aW9uPltdLCBjb25zdGFudFR5cGUpOwoKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICdsaXRlcmFsOiAke2NvbnN0YW50LnRvU3RydWN0dXJlZFRleHQoKX0nOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0Q29uc3RhbnQodGhpcyk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNDb25zdGFudCgpID0+IHRydWU7CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvbnN0YW50Qm9vbGVhbigpID0+IGNvbnN0YW50LmlzQm9vbDsKICBAb3ZlcnJpZGUKICBib29sIGlzQ29uc3RhbnROdWxsKCkgPT4gY29uc3RhbnQuaXNOdWxsOwogIEBvdmVycmlkZQogIGJvb2wgaXNDb25zdGFudE51bWJlcigpID0+IGNvbnN0YW50LmlzTnVtOwogIEBvdmVycmlkZQogIGJvb2wgaXNDb25zdGFudEludGVnZXIoKSA9PiBjb25zdGFudC5pc0ludDsKICBAb3ZlcnJpZGUKICBib29sIGlzQ29uc3RhbnRTdHJpbmcoKSA9PiBjb25zdGFudC5pc1N0cmluZzsKICBAb3ZlcnJpZGUKICBib29sIGlzQ29uc3RhbnRMaXN0KCkgPT4gY29uc3RhbnQuaXNMaXN0OwogIEBvdmVycmlkZQogIGJvb2wgaXNDb25zdGFudE1hcCgpID0+IGNvbnN0YW50LmlzTWFwOwogIEBvdmVycmlkZQogIGJvb2wgaXNDb25zdGFudEZhbHNlKCkgPT4gY29uc3RhbnQuaXNGYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGlzQ29uc3RhbnRUcnVlKCkgPT4gY29uc3RhbnQuaXNUcnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGlzSW50ZXJjZXB0b3IoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSA9PiBjb25zdGFudC5pc0ludGVyY2VwdG9yOwoKICAvLyBNYXliZSBhdm9pZCB0aGlzIGlmIHRoZSBsaXRlcmFsIGlzIGJpZz8KICBAb3ZlcnJpZGUKICBib29sIGlzQ29kZU1vdGlvbkludmFyaWFudCgpID0+IHRydWU7CgogIEBvdmVycmlkZQogIHNldCBpbnN0cnVjdGlvblR5cGUodHlwZSkgewogICAgLy8gT25seSBsaXN0cyBjYW4gYmUgc3BlY2lhbGl6ZWQuIFRoZSBTU0EgYnVpbGRlciB1c2VzIHRoZQogICAgLy8gaW5mZXJyZXIgZm9yIGZpbmRpbmcgdGhlIHR5cGUgb2YgYSBjb25zdGFudCBsaXN0LiBXZSBzaG91bGQKICAgIC8vIGhhdmUgdGhlIGNvbnN0YW50IGtub3cgaXRzIHR5cGUgaW5zdGVhZC4KICAgIGlmICghaXNDb25zdGFudExpc3QoKSkgcmV0dXJuOwogICAgc3VwZXIuaW5zdHJ1Y3Rpb25UeXBlID0gdHlwZTsKICB9Cn0KCmNsYXNzIEhOb3QgZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIEhOb3QoSEluc3RydWN0aW9uIHZhbHVlLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIoPEhJbnN0cnVjdGlvbj5bdmFsdWVdLCB0eXBlKSB7CiAgICBzZXRVc2VHdm4oKTsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0Tm90KHRoaXMpOwogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5OT1RfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBITm90OwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IHRydWU7Cn0KCi8vLyBBbiBbSExvY2FsVmFsdWVdIHJlcHJlc2VudHMgYSBsb2NhbC4gVW5saWtlIFtIUGFyYW1ldGVyVmFsdWVdcyBpdHMKLy8vIGZpcnN0IHVzZSBtdXN0IGJlIGluIGFuIEhMb2NhbFNldC4gVGhhdCBpcywgW0hQYXJhbWV0ZXJWYWx1ZV1zIGhhdmUgYQovLy8gdmFsdWUgZnJvbSB0aGUgc3RhcnQsIHdoZXJlYXMgW0hMb2NhbFZhbHVlXXMgbmVlZCB0byBiZSBpbml0aWFsaXplZCBmaXJzdC4KY2xhc3MgSExvY2FsVmFsdWUgZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIEhMb2NhbFZhbHVlKEVudGl0eSB2YXJpYWJsZSwgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKDxISW5zdHJ1Y3Rpb24+W10sIHR5cGUpIHsKICAgIHNvdXJjZUVsZW1lbnQgPSB2YXJpYWJsZTsKICB9CgogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gJ2xvY2FsICR7c291cmNlRWxlbWVudC5uYW1lfSc7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRMb2NhbFZhbHVlKHRoaXMpOwp9CgpjbGFzcyBIUGFyYW1ldGVyVmFsdWUgZXh0ZW5kcyBITG9jYWxWYWx1ZSB7CiAgSFBhcmFtZXRlclZhbHVlKEVudGl0eSB2YXJpYWJsZSwgQWJzdHJhY3RWYWx1ZSB0eXBlKSA6IHN1cGVyKHZhcmlhYmxlLCB0eXBlKTsKCiAgLy8gW0hQYXJhbWV0ZXJWYWx1ZV1zIGFyZSBlaXRoZXIgdGhlIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIgKGluIGZ1bGx5IFNTQQogIC8vIGNvbnZlcnRlZCBjb2RlKSwgb3IgdGhlIG11dGFibGUgdmFyaWFibGUgY29udGFpbmluZyB0aGUgdmFsdWUgKGluCiAgLy8gaW5jb21wbGV0ZWx5IFNTQSBjb252ZXJ0ZWQgY29kZSwgZS5nLiBtZXRob2RzIGNvbnRhaW5pbmcgZXhjZXB0aW9ucykuCiAgYm9vbCB1c2VkQXNWYXJpYWJsZSgpIHsKICAgIGZvciAoSEluc3RydWN0aW9uIHVzZXIgaW4gdXNlZEJ5KSB7CiAgICAgIGlmICh1c2VyIGlzIEhMb2NhbEdldCkgcmV0dXJuIHRydWU7CiAgICAgIGlmICh1c2VyIGlzIEhMb2NhbFNldCAmJiB1c2VyLmxvY2FsID09IHRoaXMpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAncGFyYW1ldGVyICR7c291cmNlRWxlbWVudC5uYW1lfSc7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRQYXJhbWV0ZXJWYWx1ZSh0aGlzKTsKfQoKY2xhc3MgSFRoaXMgZXh0ZW5kcyBIUGFyYW1ldGVyVmFsdWUgewogIEhUaGlzKFRoaXNMb2NhbCBlbGVtZW50LCBBYnN0cmFjdFZhbHVlIHR5cGUpIDogc3VwZXIoZWxlbWVudCwgdHlwZSk7CgogIEBvdmVycmlkZQogIFRoaXNMb2NhbCBnZXQgc291cmNlRWxlbWVudCA9PiBzdXBlci5zb3VyY2VFbGVtZW50OwoKICBAb3ZlcnJpZGUKICB2b2lkIHNldCBzb3VyY2VFbGVtZW50KGNvdmFyaWFudCBUaGlzTG9jYWwgbG9jYWwpIHsKICAgIHN1cGVyLnNvdXJjZUVsZW1lbnQgPSBsb2NhbDsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0VGhpcyh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvZGVNb3Rpb25JbnZhcmlhbnQoKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGlzSW50ZXJjZXB0b3IoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gY2xvc2VkV29ybGQuaW50ZXJjZXB0b3JEYXRhCiAgICAgICAgLmlzSW50ZXJjZXB0ZWRDbGFzcyhzb3VyY2VFbGVtZW50LmVuY2xvc2luZ0NsYXNzKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICd0aGlzJzsKfQoKY2xhc3MgSFBoaSBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgc3RhdGljIGNvbnN0IElTX05PVF9MT0dJQ0FMX09QRVJBVE9SID0gMDsKICBzdGF0aWMgY29uc3QgSVNfQU5EID0gMTsKICBzdGF0aWMgY29uc3QgSVNfT1IgPSAyOwoKICBpbnQgbG9naWNhbE9wZXJhdG9yVHlwZSA9IElTX05PVF9MT0dJQ0FMX09QRVJBVE9SOwoKICAvLyBUaGUgb3JkZXIgb2YgdGhlIFtpbnB1dHNdIG11c3QgY29ycmVzcG9uZCB0byB0aGUgb3JkZXIgb2YgdGhlCiAgLy8gcHJlZGVjZXNzb3ItZWRnZXMuIFRoYXQgaXMgaWYgYW4gaW5wdXQgY29tZXMgZnJvbSB0aGUgZmlyc3QgcHJlZGVjZXNzb3IKICAvLyBvZiB0aGUgc3Vycm91bmRpbmcgYmxvY2ssIHRoZW4gdGhlIGlucHV0IG11c3QgYmUgdGhlIGZpcnN0IGluIHRoZSBbSFBoaV0uCiAgSFBoaShMb2NhbCB2YXJpYWJsZSwgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cywgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKGlucHV0cywgdHlwZSkgewogICAgc291cmNlRWxlbWVudCA9IHZhcmlhYmxlOwogIH0KICBIUGhpLm5vSW5wdXRzKExvY2FsIHZhcmlhYmxlLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogdGhpcyh2YXJpYWJsZSwgPEhJbnN0cnVjdGlvbj5bXSwgdHlwZSk7CiAgSFBoaS5zaW5nbGVJbnB1dChMb2NhbCB2YXJpYWJsZSwgSEluc3RydWN0aW9uIGlucHV0LCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogdGhpcyh2YXJpYWJsZSwgPEhJbnN0cnVjdGlvbj5baW5wdXRdLCB0eXBlKTsKICBIUGhpLm1hbnlJbnB1dHMoTG9jYWwgdmFyaWFibGUsIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMsIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiB0aGlzKHZhcmlhYmxlLCBpbnB1dHMsIHR5cGUpOwoKICB2b2lkIGFkZElucHV0KEhJbnN0cnVjdGlvbiBpbnB1dCkgewogICAgYXNzZXJ0KGlzSW5CYXNpY0Jsb2NrKCkpOwogICAgaW5wdXRzLmFkZChpbnB1dCk7CiAgICBhc3NlcnQoaW5wdXRzLmxlbmd0aCA8PSBibG9jay5wcmVkZWNlc3NvcnMubGVuZ3RoKTsKICAgIGlucHV0LnVzZWRCeS5hZGQodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICdwaGkgJGlkJzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFBoaSh0aGlzKTsKfQoKYWJzdHJhY3QgY2xhc3MgSFJlbGF0aW9uYWwgZXh0ZW5kcyBISW52b2tlQmluYXJ5IHsKICBib29sIHVzZXNCb29saWZpZWRJbnRlcmNlcHRvciA9IGZhbHNlOwogIEhSZWxhdGlvbmFsKGxlZnQsIHJpZ2h0LCBzZWxlY3RvciwgdHlwZSkgOiBzdXBlcihsZWZ0LCByaWdodCwgc2VsZWN0b3IsIHR5cGUpOwp9CgpjbGFzcyBISWRlbnRpdHkgZXh0ZW5kcyBIUmVsYXRpb25hbCB7CiAgLy8gQ2FjaGVkIGNvZGVnZW4gZGVjaXNpb24uCiAgU3RyaW5nIHNpbmdsZUNvbXBhcmlzb25PcDsgLy8gbnVsbCwgJz09PScsICc9PScKCiAgSElkZW50aXR5KGxlZnQsIHJpZ2h0LCBzZWxlY3RvciwgdHlwZSkgOiBzdXBlcihsZWZ0LCByaWdodCwgc2VsZWN0b3IsIHR5cGUpOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0SWRlbnRpdHkodGhpcyk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgPT4gY29uc3RhbnRfc3lzdGVtLmlkZW50aXR5OwogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5JREVOVElUWV9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhJZGVudGl0eTsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiB0cnVlOwp9CgpjbGFzcyBIR3JlYXRlciBleHRlbmRzIEhSZWxhdGlvbmFsIHsKICBIR3JlYXRlcihsZWZ0LCByaWdodCwgc2VsZWN0b3IsIHR5cGUpIDogc3VwZXIobGVmdCwgcmlnaHQsIHNlbGVjdG9yLCB0eXBlKTsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEdyZWF0ZXIodGhpcyk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgPT4gY29uc3RhbnRfc3lzdGVtLmdyZWF0ZXI7CiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLkdSRUFURVJfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBIR3JlYXRlcjsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiB0cnVlOwp9CgpjbGFzcyBIR3JlYXRlckVxdWFsIGV4dGVuZHMgSFJlbGF0aW9uYWwgewogIEhHcmVhdGVyRXF1YWwobGVmdCwgcmlnaHQsIHNlbGVjdG9yLCB0eXBlKQogICAgICA6IHN1cGVyKGxlZnQsIHJpZ2h0LCBzZWxlY3RvciwgdHlwZSk7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRHcmVhdGVyRXF1YWwodGhpcyk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgPT4gY29uc3RhbnRfc3lzdGVtLmdyZWF0ZXJFcXVhbDsKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uR1JFQVRFUl9FUVVBTF9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhHcmVhdGVyRXF1YWw7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gdHJ1ZTsKfQoKY2xhc3MgSExlc3MgZXh0ZW5kcyBIUmVsYXRpb25hbCB7CiAgSExlc3MobGVmdCwgcmlnaHQsIHNlbGVjdG9yLCB0eXBlKSA6IHN1cGVyKGxlZnQsIHJpZ2h0LCBzZWxlY3RvciwgdHlwZSk7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRMZXNzKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpID0+IGNvbnN0YW50X3N5c3RlbS5sZXNzOwogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5MRVNTX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSExlc3M7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gdHJ1ZTsKfQoKY2xhc3MgSExlc3NFcXVhbCBleHRlbmRzIEhSZWxhdGlvbmFsIHsKICBITGVzc0VxdWFsKGxlZnQsIHJpZ2h0LCBzZWxlY3RvciwgdHlwZSkgOiBzdXBlcihsZWZ0LCByaWdodCwgc2VsZWN0b3IsIHR5cGUpOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0TGVzc0VxdWFsKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpID0+IGNvbnN0YW50X3N5c3RlbS5sZXNzRXF1YWw7CiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLkxFU1NfRVFVQUxfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBITGVzc0VxdWFsOwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IHRydWU7Cn0KCmNsYXNzIEhSZXR1cm4gZXh0ZW5kcyBIQ29udHJvbEZsb3cgewogIEhSZXR1cm4oQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4sIEhJbnN0cnVjdGlvbiB2YWx1ZSwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pCiAgICAgIDogc3VwZXIoZG9tYWluLCA8SEluc3RydWN0aW9uPlt2YWx1ZV0pIHsKICAgIHRoaXMuc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICB9CiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAncmV0dXJuJzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFJldHVybih0aGlzKTsKfQoKY2xhc3MgSFRocm93RXhwcmVzc2lvbiBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgSFRocm93RXhwcmVzc2lvbihBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbiwgSEluc3RydWN0aW9uIHZhbHVlLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikKICAgICAgOiBzdXBlcig8SEluc3RydWN0aW9uPlt2YWx1ZV0sIGRvbWFpbi5lbXB0eVR5cGUpIHsKICAgIHRoaXMuc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICB9CiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAndGhyb3cgZXhwcmVzc2lvbic7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRUaHJvd0V4cHJlc3Npb24odGhpcyk7CiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5UaHJvdyhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4gdHJ1ZTsKfQoKY2xhc3MgSEF3YWl0IGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBIQXdhaXQoSEluc3RydWN0aW9uIHZhbHVlLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIoPEhJbnN0cnVjdGlvbj5bdmFsdWVdLCB0eXBlKTsKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICdhd2FpdCc7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRBd2FpdCh0aGlzKTsKICAvLyBBbiBhd2FpdCB3aWxsIHRocm93IGlmIGl0cyBhcmd1bWVudCBpcyBub3QgYSByZWFsIGZ1dHVyZS4KICBAb3ZlcnJpZGUKICBib29sIGNhblRocm93KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PiB0cnVlOwogIEBvdmVycmlkZQogIFNpZGVFZmZlY3RzIHNpZGVFZmZlY3RzID0gbmV3IFNpZGVFZmZlY3RzKCk7Cn0KCmNsYXNzIEhZaWVsZCBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgSFlpZWxkKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluLCBISW5zdHJ1Y3Rpb24gdmFsdWUsIHRoaXMuaGFzU3RhciwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pCiAgICAgIDogc3VwZXIoPEhJbnN0cnVjdGlvbj5bdmFsdWVdLCBkb21haW4uZW1wdHlUeXBlKSB7CiAgICB0aGlzLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgfQogIGJvb2wgaGFzU3RhcjsKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICd5aWVsZCc7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRZaWVsZCh0aGlzKTsKICBAb3ZlcnJpZGUKICBib29sIGNhblRocm93KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBTaWRlRWZmZWN0cyBzaWRlRWZmZWN0cyA9IG5ldyBTaWRlRWZmZWN0cygpOwp9CgpjbGFzcyBIVGhyb3cgZXh0ZW5kcyBIQ29udHJvbEZsb3cgewogIGZpbmFsIGJvb2wgaXNSZXRocm93OwogIEhUaHJvdyhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbiwgSEluc3RydWN0aW9uIHZhbHVlLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAge3RoaXMuaXNSZXRocm93OiBmYWxzZX0pCiAgICAgIDogc3VwZXIoZG9tYWluLCA8SEluc3RydWN0aW9uPlt2YWx1ZV0pIHsKICAgIHRoaXMuc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICB9CiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAndGhyb3cnOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0VGhyb3codGhpcyk7Cn0KCi8vIFRPRE8oam9obm5pd2ludGhlcik6IENoYW5nZSB0aGlzIHRvIGEgIkhTdGF0aWNMb2FkIiBvZiBhIGZpZWxkIHdoZW4gd2UgdXNlCi8vIENGRSBjb25zdGFudHMuIEl0IGhhcyBiZWVuIHVzZWQgZm9yIHN0YXRpYyB0ZWFyLW9mZnMgZXZlbiB0aG91Z2ggdGhlc2Ugc2hvdWxkCi8vIGhhdmUgYmVlbiBjb25zdGFudHMuCmNsYXNzIEhTdGF0aWMgZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIGZpbmFsIE1lbWJlckVudGl0eSBlbGVtZW50OwoKICBIU3RhdGljKHRoaXMuZWxlbWVudCwgQWJzdHJhY3RWYWx1ZSB0eXBlLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikKICAgICAgOiBzdXBlcig8SEluc3RydWN0aW9uPltdLCB0eXBlKSB7CiAgICBhc3NlcnQoZWxlbWVudCAhPSBudWxsKTsKICAgIHNpZGVFZmZlY3RzLmNsZWFyQWxsU2lkZUVmZmVjdHMoKTsKICAgIHNpZGVFZmZlY3RzLmNsZWFyQWxsRGVwZW5kZW5jaWVzKCk7CiAgICBpZiAoZWxlbWVudC5pc0Fzc2lnbmFibGUpIHsKICAgICAgc2lkZUVmZmVjdHMuc2V0RGVwZW5kc09uU3RhdGljUHJvcGVydHlTdG9yZSgpOwogICAgfQogICAgc2V0VXNlR3ZuKCk7CiAgICB0aGlzLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgfQogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gJ3N0YXRpYyAke2VsZW1lbnQubmFtZX0nOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0U3RhdGljKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ3ZuSGFzaENvZGUoKSA9PiBzdXBlci5ndm5IYXNoQ29kZSgpIF4gZWxlbWVudC5oYXNoQ29kZTsKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uU1RBVElDX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSFN0YXRpYzsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSFN0YXRpYyBvdGhlcikgPT4gZWxlbWVudCA9PSBvdGhlci5lbGVtZW50OwogIEBvdmVycmlkZQogIGJvb2wgaXNDb2RlTW90aW9uSW52YXJpYW50KCkgPT4gIWVsZW1lbnQuaXNBc3NpZ25hYmxlOwp9CgpjbGFzcyBISW50ZXJjZXB0b3IgZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIC8vIFRoaXMgZmllbGQgc2hvdWxkIG9yaWdpbmFsbHkgYmUgbnVsbCB0byBhbGxvdyBHVk4naW5nIGFsbAogIC8vIFtISW50ZXJjZXB0b3JdIG9uIHRoZSBzYW1lIGlucHV0LgogIFNldDxDbGFzc0VudGl0eT4gaW50ZXJjZXB0ZWRDbGFzc2VzOwoKICAvLyBpbnB1dHNbMF0gaXMgaW5pdGlhbGx5IHRoZSBvbmx5IGlucHV0LCB0aGUgcmVjZWl2ZXIuCgogIC8vIGlucHV0c1sxXSBpcyBhIGNvbnN0YW50IGludGVyY2VwdG9yIHdoZW4gdGhlIGludGVyY2VwdG9yIGlzIGEgY29uc3RhbnQKICAvLyBleGNlcHQgZm9yIGEgYG51bGxgIHJlY2VpdmVyLiAgVGhpcyBpcyB1c2VkIHdoZW4gdGhlIHJlY2VpdmVyIGNhbid0IGJlCiAgLy8gZmFsc3ksIGV4Y2VwdCBmb3IgYG51bGxgLCBhbGxvd2luZyB0aGUgZ2VuZXJhdGlvbiBvZiBjb2RlIGxpa2UKICAvLwogIC8vICAgICAoYSAmJiBDLkpTQXJyYXlfbWV0aG9kcykuZ2V0JGZpcnN0KGEpCiAgLy8KCiAgSEludGVyY2VwdG9yKEhJbnN0cnVjdGlvbiByZWNlaXZlciwgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKDxISW5zdHJ1Y3Rpb24+W3JlY2VpdmVyXSwgdHlwZSkgewogICAgdGhpcy5zb3VyY2VJbmZvcm1hdGlvbiA9IHJlY2VpdmVyLnNvdXJjZUluZm9ybWF0aW9uOwogICAgc2lkZUVmZmVjdHMuY2xlYXJBbGxTaWRlRWZmZWN0cygpOwogICAgc2lkZUVmZmVjdHMuY2xlYXJBbGxEZXBlbmRlbmNpZXMoKTsKICAgIHNldFVzZUd2bigpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ2ludGVyY2VwdG9yIG9uICRpbnRlcmNlcHRlZENsYXNzZXMnOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0SW50ZXJjZXB0b3IodGhpcyk7CiAgSEluc3RydWN0aW9uIGdldCByZWNlaXZlciA9PiBpbnB1dHNbMF07CgogIGJvb2wgZ2V0IGlzQ29uZGl0aW9uYWxDb25zdGFudEludGVyY2VwdG9yID0+IGlucHV0cy5sZW5ndGggPT0gMjsKICBISW5zdHJ1Y3Rpb24gZ2V0IGNvbmRpdGlvbmFsQ29uc3RhbnRJbnRlcmNlcHRvciA9PiBpbnB1dHNbMV07CiAgdm9pZCBzZXQgY29uZGl0aW9uYWxDb25zdGFudEludGVyY2VwdG9yKEhDb25zdGFudCBjb25zdGFudCkgewogICAgYXNzZXJ0KCFpc0NvbmRpdGlvbmFsQ29uc3RhbnRJbnRlcmNlcHRvcik7CiAgICBpbnB1dHMuYWRkKGNvbnN0YW50KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbnRlcmNlcHRvcihKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5JTlRFUkNFUFRPUl9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhJbnRlcmNlcHRvcjsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEludGVyY2VwdG9yIG90aGVyKSB7CiAgICByZXR1cm4gaW50ZXJjZXB0ZWRDbGFzc2VzID09IG90aGVyLmludGVyY2VwdGVkQ2xhc3NlcyB8fAogICAgICAgIChpbnRlcmNlcHRlZENsYXNzZXMubGVuZ3RoID09IG90aGVyLmludGVyY2VwdGVkQ2xhc3Nlcy5sZW5ndGggJiYKICAgICAgICAgICAgaW50ZXJjZXB0ZWRDbGFzc2VzLmNvbnRhaW5zQWxsKG90aGVyLmludGVyY2VwdGVkQ2xhc3NlcykpOwogIH0KfQoKLy8vIEEgIm9uZS1zaG90IiBpbnRlcmNlcHRvciBpcyBhIGNhbGwgdG8gYSBzeW50aGV0aXplZCBtZXRob2QgdGhhdAovLy8gd2lsbCBmZXRjaCB0aGUgaW50ZXJjZXB0b3Igb2YgaXRzIGZpcnN0IHBhcmFtZXRlciwgYW5kIG1ha2UgYSBjYWxsCi8vLyBvbiBhIGdpdmVuIHNlbGVjdG9yIHdpdGggdGhlIHJlbWFpbmluZyBwYXJhbWV0ZXJzLgovLy8KLy8vIEluIG9yZGVyIHRvIHNoYXJlIHRoZSBzYW1lIG9wdGltaXphdGlvbnMgd2l0aCByZWd1bGFyIGludGVyY2VwdG9yCi8vLyBjYWxscywgdGhpcyBjbGFzcyBleHRlbmRzIFtISW52b2tlRHluYW1pY10gYW5kIGFsc28gaGFzIHRoZSBudWxsCi8vLyBjb25zdGFudCBhcyB0aGUgZmlyc3QgaW5wdXQuCmNsYXNzIEhPbmVTaG90SW50ZXJjZXB0b3IgZXh0ZW5kcyBISW52b2tlRHluYW1pYyB7CiAgQG92ZXJyaWRlCiAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50czsKICBTZXQ8Q2xhc3NFbnRpdHk+IGludGVyY2VwdGVkQ2xhc3NlczsKCiAgSE9uZVNob3RJbnRlcmNlcHRvcigKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4sCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZSwKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cywKICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHRUeXBlLAogICAgICB0aGlzLnR5cGVBcmd1bWVudHMsCiAgICAgIHRoaXMuaW50ZXJjZXB0ZWRDbGFzc2VzKQogICAgICA6IHN1cGVyKHNlbGVjdG9yLCByZWNlaXZlclR5cGUsIG51bGwsIGlucHV0cywgdHJ1ZSwgcmVzdWx0VHlwZSkgewogICAgYXNzZXJ0KGlucHV0c1swXSBpcyBIQ29uc3RhbnQpOwogICAgYXNzZXJ0KGlucHV0c1swXS5pbnN0cnVjdGlvblR5cGUgPT0gZG9tYWluLm51bGxUeXBlKTsKICAgIGFzc2VydChzZWxlY3Rvci5jYWxsU3RydWN0dXJlLnR5cGVBcmd1bWVudENvdW50ID09IHR5cGVBcmd1bWVudHMubGVuZ3RoKTsKICB9CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NhbGxPbkludGVyY2VwdG9yKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgJ29uZSBzaG90IGludGVyY2VwdG9yOiBzZWxlY3Rvcj0kc2VsZWN0b3IsIG1hc2s9JHJlY2VpdmVyVHlwZSc7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRPbmVTaG90SW50ZXJjZXB0b3IodGhpcyk7Cn0KCi8vLyBBbiBbSExhenlTdGF0aWNdIGlzIGEgc3RhdGljIHRoYXQgaXMgaW5pdGlhbGl6ZWQgbGF6aWx5IGF0IGZpcnN0IHJlYWQuCmNsYXNzIEhMYXp5U3RhdGljIGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBmaW5hbCBGaWVsZEVudGl0eSBlbGVtZW50OwoKICBITGF6eVN0YXRpYygKICAgICAgdGhpcy5lbGVtZW50LCBBYnN0cmFjdFZhbHVlIHR5cGUsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKQogICAgICA6IHN1cGVyKDxISW5zdHJ1Y3Rpb24+W10sIHR5cGUpIHsKICAgIC8vIFRPRE8oNDkzMSk6IFRoZSBmaXJzdCBhY2Nlc3MgaGFzIHNpZGUtZWZmZWN0cywgYnV0IHdlIGFmdGVyd2FyZHMgd2UKICAgIC8vIHNob3VsZCBiZSBhYmxlIHRvIEdWTi4KICAgIHNpZGVFZmZlY3RzLnNldEFsbFNpZGVFZmZlY3RzKCk7CiAgICBzaWRlRWZmZWN0cy5zZXREZXBlbmRzT25Tb21ldGhpbmcoKTsKICAgIHRoaXMuc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICB9CgogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gJ2xhenkgc3RhdGljICR7ZWxlbWVudC5uYW1lfSc7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRMYXp5U3RhdGljKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiAzMDsKICAvLyBUT0RPKDQ5MzEpOiBjYW4gd2UgZG8gYmV0dGVyIGhlcmU/CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvZGVNb3Rpb25JbnZhcmlhbnQoKSA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGNhblRocm93KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PiB0cnVlOwp9CgpjbGFzcyBIU3RhdGljU3RvcmUgZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIE1lbWJlckVudGl0eSBlbGVtZW50OwogIEhTdGF0aWNTdG9yZShBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbiwgdGhpcy5lbGVtZW50LCBISW5zdHJ1Y3Rpb24gdmFsdWUpCiAgICAgIDogc3VwZXIoPEhJbnN0cnVjdGlvbj5bdmFsdWVdLCBkb21haW4uZW1wdHlUeXBlKSB7CiAgICBzaWRlRWZmZWN0cy5jbGVhckFsbFNpZGVFZmZlY3RzKCk7CiAgICBzaWRlRWZmZWN0cy5jbGVhckFsbERlcGVuZGVuY2llcygpOwogICAgc2lkZUVmZmVjdHMuc2V0Q2hhbmdlc1N0YXRpY1Byb3BlcnR5KCk7CiAgfQogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gJ3N0YXRpYyBzdG9yZSAke2VsZW1lbnQubmFtZX0nOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0U3RhdGljU3RvcmUodGhpcyk7CgogIEhJbnN0cnVjdGlvbiBnZXQgdmFsdWUgPT4gaW5wdXRzLnNpbmdsZTsKCiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLlNUQVRJQ19TVE9SRV9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhTdGF0aWNTdG9yZTsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSFN0YXRpY1N0b3JlIG90aGVyKSA9PiBlbGVtZW50ID09IG90aGVyLmVsZW1lbnQ7CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0pzU3RhdGVtZW50KCkgPT4gdXNlZEJ5LmlzRW1wdHk7Cn0KCmNsYXNzIEhMaXRlcmFsTGlzdCBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgSExpdGVyYWxMaXN0KExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMsIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcihpbnB1dHMsIHR5cGUpOwogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gJ2xpdGVyYWwgbGlzdCc7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRMaXRlcmFsTGlzdCh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0FsbG9jYXRpb24oQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+IHRydWU7Cn0KCi8vLyBUaGUgcHJpbWl0aXZlIGFycmF5IGluZGV4aW5nIG9wZXJhdGlvbi4gTm90ZSB0aGF0IHRoaXMgaW5zdHJ1Y3Rpb24KLy8vIGRvZXMgbm90IHRocm93IGJlY2F1c2Ugd2UgZ2VuZXJhdGUgdGhlIGNoZWNrcyBleHBsaWNpdGx5LgpjbGFzcyBISW5kZXggZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIEBvdmVycmlkZQogIGZpbmFsIFNlbGVjdG9yIHNlbGVjdG9yOwogIEhJbmRleChISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIsIEhJbnN0cnVjdGlvbiBpbmRleCwgdGhpcy5zZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKDxISW5zdHJ1Y3Rpb24+W3JlY2VpdmVyLCBpbmRleF0sIHR5cGUpIHsKICAgIHNpZGVFZmZlY3RzLmNsZWFyQWxsU2lkZUVmZmVjdHMoKTsKICAgIHNpZGVFZmZlY3RzLmNsZWFyQWxsRGVwZW5kZW5jaWVzKCk7CiAgICBzaWRlRWZmZWN0cy5zZXREZXBlbmRzT25JbmRleFN0b3JlKCk7CiAgICBzZXRVc2VHdm4oKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdpbmRleCBvcGVyYXRvcic7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRJbmRleCh0aGlzKTsKCiAgSEluc3RydWN0aW9uIGdldCByZWNlaXZlciA9PiBpbnB1dHNbMF07CiAgSEluc3RydWN0aW9uIGdldCBpbmRleCA9PiBpbnB1dHNbMV07CgogIC8vIEltcGxpY2l0IGRlcGVuZGVuY3kgb24gSEJvdW5kc0NoZWNrIG9yIGNvbnN0cmFpbnRzIG9uIGluZGV4LgogIC8vIFRPRE8oMjcyNzIpOiBNYWtlIEhJbmRleCBkZXBlbmRlbnQgb24gYm91bmRzIGNoZWNraW5nLgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTW92YWJsZSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIGdldERhcnRSZWNlaXZlcihKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpID0+IHJlY2VpdmVyOwogIEBvdmVycmlkZQogIGJvb2wgb25seVRocm93c05TTSgpID0+IHRydWU7CiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5UaHJvdyhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgcmVjZWl2ZXIuaXNOdWxsKGRvbWFpbikuaXNQb3RlbnRpYWxseVRydWU7CgogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5JTkRFWF9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiBvdGhlciBpcyBISW5kZXg7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhJbmRleCBvdGhlcikgPT4gdHJ1ZTsKfQoKLy8vIFRoZSBwcmltaXRpdmUgYXJyYXkgYXNzaWdubWVudCBvcGVyYXRpb24uIE5vdGUgdGhhdCB0aGlzIGluc3RydWN0aW9uCi8vLyBkb2VzIG5vdCB0aHJvdyBiZWNhdXNlIHdlIGdlbmVyYXRlIHRoZSBjaGVja3MgZXhwbGljaXRseS4KY2xhc3MgSEluZGV4QXNzaWduIGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTZWxlY3RvciBzZWxlY3RvcjsKICBISW5kZXhBc3NpZ24oQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4sIEhJbnN0cnVjdGlvbiByZWNlaXZlciwKICAgICAgSEluc3RydWN0aW9uIGluZGV4LCBISW5zdHJ1Y3Rpb24gdmFsdWUsIHRoaXMuc2VsZWN0b3IpCiAgICAgIDogc3VwZXIoPEhJbnN0cnVjdGlvbj5bcmVjZWl2ZXIsIGluZGV4LCB2YWx1ZV0sIGRvbWFpbi5lbXB0eVR5cGUpIHsKICAgIHNpZGVFZmZlY3RzLmNsZWFyQWxsU2lkZUVmZmVjdHMoKTsKICAgIHNpZGVFZmZlY3RzLmNsZWFyQWxsRGVwZW5kZW5jaWVzKCk7CiAgICBzaWRlRWZmZWN0cy5zZXRDaGFuZ2VzSW5kZXgoKTsKICB9CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ2luZGV4IGFzc2lnbiBvcGVyYXRvcic7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRJbmRleEFzc2lnbih0aGlzKTsKCiAgSEluc3RydWN0aW9uIGdldCByZWNlaXZlciA9PiBpbnB1dHNbMF07CiAgSEluc3RydWN0aW9uIGdldCBpbmRleCA9PiBpbnB1dHNbMV07CiAgSEluc3RydWN0aW9uIGdldCB2YWx1ZSA9PiBpbnB1dHNbMl07CgogIC8vIEltcGxpY2l0IGRlcGVuZGVuY3kgb24gSEJvdW5kc0NoZWNrIG9yIGNvbnN0cmFpbnRzIG9uIGluZGV4LgogIC8vIFRPRE8oMjcyNzIpOiBNYWtlIEhJbmRleCBkZXBlbmRlbnQgb24gYm91bmRzIGNoZWNraW5nLgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTW92YWJsZSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIGdldERhcnRSZWNlaXZlcihKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpID0+IHJlY2VpdmVyOwogIEBvdmVycmlkZQogIGJvb2wgb25seVRocm93c05TTSgpID0+IHRydWU7CiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5UaHJvdyhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgcmVjZWl2ZXIuaXNOdWxsKGRvbWFpbikuaXNQb3RlbnRpYWxseVRydWU7Cn0KCi8vLyBJcy10ZXN0IHVzaW5nIGxlZ2FjeSBjb25zdHJ1Y3RvciBiYXNlZCB0eXAgcmVwcmVzZW50YXRpb24uCmNsYXNzIEhJcyBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgLy8vIEEgY2hlY2sgYWdhaW5zdCBhIHJhdyB0eXBlOiAnbyBpcyBpbnQnLCAnbyBpcyBBJy4KICBzdGF0aWMgY29uc3QgaW50IFJBV19DSEVDSyA9IDA7CgogIC8vLyBBIGNoZWNrIGFnYWluc3QgYSB0eXBlIHdpdGggdHlwZSBhcmd1bWVudHM6ICdvIGlzIExpc3Q8aW50PicsICdvIGlzIEM8VD4nLgogIHN0YXRpYyBjb25zdCBpbnQgQ09NUE9VTkRfQ0hFQ0sgPSAxOwoKICAvLy8gQSBjaGVjayBhZ2FpbnN0IGEgc2luZ2xlIHR5cGUgdmFyaWFibGU6ICdvIGlzIFQnLgogIHN0YXRpYyBjb25zdCBpbnQgVkFSSUFCTEVfQ0hFQ0sgPSAyOwoKICBmaW5hbCBEYXJ0VHlwZSB0eXBlRXhwcmVzc2lvbjsKICBmaW5hbCBpbnQga2luZDsKICBmaW5hbCBib29sIHVzZUluc3RhbmNlT2Y7CgogIEhJcy5kaXJlY3QoRGFydFR5cGUgdHlwZUV4cHJlc3Npb24sIEhJbnN0cnVjdGlvbiBleHByZXNzaW9uLAogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKQogICAgICA6IHRoaXMuaW50ZXJuYWwoCiAgICAgICAgICAgIHR5cGVFeHByZXNzaW9uLCBbZXhwcmVzc2lvbl0sIFJBV19DSEVDSywgdHlwZSwgc291cmNlSW5mb3JtYXRpb24pOwoKICAvLyBQcmUtdmVyaWZpZWQgdGhhdCB0aGUgY2hlY2sgY2FuIGJlIGRvbmUgdXNpbmcgJ2luc3RhbmNlb2YnLgogIEhJcy5pbnN0YW5jZU9mKERhcnRUeXBlIHR5cGVFeHByZXNzaW9uLCBISW5zdHJ1Y3Rpb24gZXhwcmVzc2lvbiwKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikKICAgICAgOiB0aGlzLmludGVybmFsKAogICAgICAgICAgICB0eXBlRXhwcmVzc2lvbiwgW2V4cHJlc3Npb25dLCBSQVdfQ0hFQ0ssIHR5cGUsIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgICAgICB1c2VJbnN0YW5jZU9mOiB0cnVlKTsKCiAgZmFjdG9yeSBISXMucmF3KAogICAgICBEYXJ0VHlwZSB0eXBlRXhwcmVzc2lvbiwKICAgICAgSEluc3RydWN0aW9uIGV4cHJlc3Npb24sCiAgICAgIEhJbnRlcmNlcHRvciBpbnRlcmNlcHRvciwKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgLy8gVE9ETyhzaWdtdW5kKTogcmUtYWRkIGAmJiB0eXBlRXhwcmVzc2lvbi50cmVhdEFzUmF3YCBvciBzb21ldGhpbmcKICAgIC8vIGVxdWl2YWxlbnQgKHdoaWNoIHN0YXJ0ZWQgZmFpbGluZyBvbmNlIHdlIGFsbG93ZWQgdHlwZUV4cHJlc3Npb25zIHRoYXQKICAgIC8vIGNvbnRhaW4gdHlwZSBwYXJhbWV0ZXJzIG1hdGNoaW5nIHRoZSBvcmlnaW5hbCBib3VuZHMgb2YgdGhlIHR5cGUpLgogICAgYXNzZXJ0KCh0eXBlRXhwcmVzc2lvbi5pc0Z1bmN0aW9uVHlwZSB8fCB0eXBlRXhwcmVzc2lvbi5pc0ludGVyZmFjZVR5cGUpLAogICAgICAgICJVbmV4cGVjdGVkIHJhdyBpcy10ZXN0IHR5cGU6ICR0eXBlRXhwcmVzc2lvbiIpOwogICAgcmV0dXJuIG5ldyBISXMuaW50ZXJuYWwodHlwZUV4cHJlc3Npb24sIFtleHByZXNzaW9uLCBpbnRlcmNlcHRvcl0sCiAgICAgICAgUkFXX0NIRUNLLCB0eXBlLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICBISXMuY29tcG91bmQoCiAgICAgIERhcnRUeXBlIHR5cGVFeHByZXNzaW9uLAogICAgICBISW5zdHJ1Y3Rpb24gZXhwcmVzc2lvbiwKICAgICAgSEluc3RydWN0aW9uIGNhbGwsCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pCiAgICAgIDogdGhpcy5pbnRlcm5hbCh0eXBlRXhwcmVzc2lvbiwgW2V4cHJlc3Npb24sIGNhbGxdLCBDT01QT1VORF9DSEVDSywgdHlwZSwKICAgICAgICAgICAgc291cmNlSW5mb3JtYXRpb24pOwoKICBISXMudmFyaWFibGUoCiAgICAgIERhcnRUeXBlIHR5cGVFeHByZXNzaW9uLAogICAgICBISW5zdHJ1Y3Rpb24gZXhwcmVzc2lvbiwKICAgICAgSEluc3RydWN0aW9uIGNhbGwsCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pCiAgICAgIDogdGhpcy5pbnRlcm5hbCh0eXBlRXhwcmVzc2lvbiwgW2V4cHJlc3Npb24sIGNhbGxdLCBWQVJJQUJMRV9DSEVDSywgdHlwZSwKICAgICAgICAgICAgc291cmNlSW5mb3JtYXRpb24pOwoKICBISXMuaW50ZXJuYWwodGhpcy50eXBlRXhwcmVzc2lvbiwgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cywgdGhpcy5raW5kLAogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICB7Ym9vbCB0aGlzLnVzZUluc3RhbmNlT2Y6IGZhbHNlfSkKICAgICAgOiBzdXBlcihpbnB1dHMsIHR5cGUpIHsKICAgIGFzc2VydChraW5kID49IFJBV19DSEVDSyAmJiBraW5kIDw9IFZBUklBQkxFX0NIRUNLKTsKICAgIHNldFVzZUd2bigpOwogICAgdGhpcy5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogIH0KCiAgSEluc3RydWN0aW9uIGdldCBleHByZXNzaW9uID0+IGlucHV0c1swXTsKCiAgSEluc3RydWN0aW9uIGdldCBpbnRlcmNlcHRvciB7CiAgICBhc3NlcnQoa2luZCA9PSBSQVdfQ0hFQ0spOwogICAgcmV0dXJuIGlucHV0cy5sZW5ndGggPiAxID8gaW5wdXRzWzFdIDogbnVsbDsKICB9CgogIEhJbnN0cnVjdGlvbiBnZXQgY2hlY2tDYWxsIHsKICAgIGFzc2VydChraW5kID09IFZBUklBQkxFX0NIRUNLIHx8IGtpbmQgPT0gQ09NUE9VTkRfQ0hFQ0spOwogICAgcmV0dXJuIGlucHV0c1sxXTsKICB9CgogIGJvb2wgZ2V0IGlzUmF3Q2hlY2sgPT4ga2luZCA9PSBSQVdfQ0hFQ0s7CiAgYm9vbCBnZXQgaXNWYXJpYWJsZUNoZWNrID0+IGtpbmQgPT0gVkFSSUFCTEVfQ0hFQ0s7CiAgYm9vbCBnZXQgaXNDb21wb3VuZENoZWNrID0+IGtpbmQgPT0gQ09NUE9VTkRfQ0hFQ0s7CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0SXModGhpcyk7CgogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gIiRleHByZXNzaW9uIGlzICR0eXBlRXhwcmVzc2lvbiI7CgogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5JU19UWVBFQ09ERTsKCiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gb3RoZXIgaXMgSElzOwoKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSElzIG90aGVyKSB7CiAgICByZXR1cm4gdHlwZUV4cHJlc3Npb24gPT0gb3RoZXIudHlwZUV4cHJlc3Npb24gJiYga2luZCA9PSBvdGhlci5raW5kOwogIH0KfQoKLy8vIEhJc1ZpYUludGVyY2VwdG9yIGlzIGEgbGF0ZS1zdGFnZSBpbnN0cnVjdGlvbiBmb3IgYSB0eXBlIHRlc3QgdGhhdCBjYW4gYmUKLy8vIGRvbmUgZW50aXJlbHkgb24gYW4gaW50ZXJjZXB0b3IuICBJdCBpcyBub3QgYSBIQ2hlY2sgYmVjYXVzZSB0aGUgY2hlY2tlZAovLy8gaW5wdXQgaXMgbm90IG9uZSBvZiB0aGUgaW5wdXRzLgpjbGFzcyBISXNWaWFJbnRlcmNlcHRvciBleHRlbmRzIEhMYXRlSW5zdHJ1Y3Rpb24gewogIGZpbmFsIERhcnRUeXBlIHR5cGVFeHByZXNzaW9uOwogIEhJc1ZpYUludGVyY2VwdG9yKAogICAgICB0aGlzLnR5cGVFeHByZXNzaW9uLCBISW5zdHJ1Y3Rpb24gaW50ZXJjZXB0b3IsIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcig8SEluc3RydWN0aW9uPltpbnRlcmNlcHRvcl0sIHR5cGUpIHsKICAgIHNldFVzZUd2bigpOwogIH0KCiAgSEluc3RydWN0aW9uIGdldCBpbnRlcmNlcHRvciA9PiBpbnB1dHNbMF07CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0SXNWaWFJbnRlcmNlcHRvcih0aGlzKTsKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICIkaW50ZXJjZXB0b3IgaXMgJHR5cGVFeHByZXNzaW9uIjsKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uSVNfVklBX0lOVEVSQ0VQVE9SX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IG90aGVyIGlzIEhJc1ZpYUludGVyY2VwdG9yOwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISXMgb3RoZXIpIHsKICAgIHJldHVybiB0eXBlRXhwcmVzc2lvbiA9PSBvdGhlci50eXBlRXhwcmVzc2lvbjsKICB9Cn0KCi8vLyBITGF0ZVZhbHVlIGlzIGEgbGF0ZS1zdGFnZSBpbnN0cnVjdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGZvcmNlIGEgdmFsdWUKLy8vIGludG8gYSB0ZW1wb3JhcnkuCi8vLwovLy8gSExhdGVWYWx1ZSBpcyB1c2VmdWwgZm9yIG5hbWluZyB2YWx1ZXMgdGhhdCB3b3VsZCBvdGhlcndpc2UgYmUgZ2VuZXJhdGVkIGF0Ci8vLyB1c2Ugc2l0ZSwgZm9yIGV4YW1wbGUsIGlmICd0aGlzJyBpcyB1c2VkIG1hbnkgdGltZXMsIHJlcGxhY2luZyB1c2VzIG9mCi8vLyAndGhpcycgd2l0aCBITGF0ZVZhbHVlKEhUaGlzKSB3aWxsIGhhdmUgdGhlIGVmZmVjdCBvZiBjb3B5aW5nICd0aGlzJyB0byBhCi8vLyB0ZW1wb3Jhcnkgd2lsbCByZWR1Y2UgdGhlIHNpemUgb2YgbWluaWZpZWQgY29kZS4KY2xhc3MgSExhdGVWYWx1ZSBleHRlbmRzIEhMYXRlSW5zdHJ1Y3Rpb24gewogIEhMYXRlVmFsdWUoSEluc3RydWN0aW9uIHRhcmdldCkgOiBzdXBlcihbdGFyZ2V0XSwgdGFyZ2V0Lmluc3RydWN0aW9uVHlwZSk7CgogIEhJbnN0cnVjdGlvbiBnZXQgdGFyZ2V0ID0+IGlucHV0cy5zaW5nbGU7CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0TGF0ZVZhbHVlKHRoaXMpOwogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gJ0hMYXRlVmFsdWUoJHRhcmdldCknOwp9CgovLy8gVHlwZSBjaGVjayBvciBjYXN0IHVzaW5nIGxlZ2FjeSBjb25zdHJ1Y3Rvci1iYXNlZCB0eXBlIHJlcHJlc2VudGF0aW9uLgpjbGFzcyBIVHlwZUNvbnZlcnNpb24gZXh0ZW5kcyBIQ2hlY2sgewogIC8vIFZhbHVlcyBmb3IgW2tpbmRdLgogIHN0YXRpYyBjb25zdCBpbnQgVFlQRV9DSEVDSyA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBDQVNUX0NIRUNLID0gMTsKCiAgZmluYWwgRGFydFR5cGUgdHlwZUV4cHJlc3Npb247CiAgZmluYWwgaW50IGtpbmQ7CgogIEFic3RyYWN0VmFsdWUgY2hlY2tlZFR5cGU7IC8vIE5vdCBmaW5hbCBiZWNhdXNlIHdlIHJlZmluZSBpdC4KICBBYnN0cmFjdFZhbHVlCiAgICAgIGlucHV0VHlwZTsgLy8gSG9sZHMgaW5wdXQgdHlwZSBmb3IgY29kZWdlbiBhZnRlciBIVHlwZUtub3duIHJlbW92YWwuCgogIEhUeXBlQ29udmVyc2lvbih0aGlzLnR5cGVFeHByZXNzaW9uLCB0aGlzLmtpbmQsIEFic3RyYWN0VmFsdWUgdHlwZSwKICAgICAgSEluc3RydWN0aW9uIGlucHV0LCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikKICAgICAgOiBjaGVja2VkVHlwZSA9IHR5cGUsCiAgICAgICAgc3VwZXIoPEhJbnN0cnVjdGlvbj5baW5wdXRdLCB0eXBlKSB7CiAgICBhc3NlcnQodHlwZUV4cHJlc3Npb24gPT0gbnVsbCB8fCAhdHlwZUV4cHJlc3Npb24uaXNUeXBlZGVmKTsKICAgIHRoaXMuc291cmNlRWxlbWVudCA9IGlucHV0LnNvdXJjZUVsZW1lbnQ7CiAgICB0aGlzLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgfQoKICBIVHlwZUNvbnZlcnNpb24ud2l0aFR5cGVSZXByZXNlbnRhdGlvbih0aGlzLnR5cGVFeHByZXNzaW9uLCB0aGlzLmtpbmQsCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSwgSEluc3RydWN0aW9uIGlucHV0LCBISW5zdHJ1Y3Rpb24gdHlwZVJlcHJlc2VudGF0aW9uKQogICAgICA6IGNoZWNrZWRUeXBlID0gdHlwZSwKICAgICAgICBzdXBlcig8SEluc3RydWN0aW9uPltpbnB1dCwgdHlwZVJlcHJlc2VudGF0aW9uXSwgdHlwZSkgewogICAgYXNzZXJ0KCF0eXBlRXhwcmVzc2lvbi5pc1R5cGVkZWYpOwogICAgc291cmNlRWxlbWVudCA9IGlucHV0LnNvdXJjZUVsZW1lbnQ7CiAgfQoKICBib29sIGdldCBoYXNUeXBlUmVwcmVzZW50YXRpb24gewogICAgcmV0dXJuIHR5cGVFeHByZXNzaW9uICE9IG51bGwgJiYKICAgICAgICB0eXBlRXhwcmVzc2lvbi5pc0ludGVyZmFjZVR5cGUgJiYKICAgICAgICBpbnB1dHMubGVuZ3RoID4gMTsKICB9CgogIEhJbnN0cnVjdGlvbiBnZXQgdHlwZVJlcHJlc2VudGF0aW9uID0+IGlucHV0c1sxXTsKCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIGdldCBjaGVja2VkSW5wdXQgPT4gc3VwZXIuY2hlY2tlZElucHV0OwoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gY29udmVydFR5cGUoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLCBEYXJ0VHlwZSB0eXBlLCBpbnQga2luZCkgewogICAgaWYgKHR5cGVFeHByZXNzaW9uID09IHR5cGUpIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuY29udmVydFR5cGUoY2xvc2VkV29ybGQsIHR5cGUsIGtpbmQpOwogIH0KCiAgYm9vbCBnZXQgaXNUeXBlQ2hlY2sgPT4ga2luZCA9PSBUWVBFX0NIRUNLOwogIGJvb2wgZ2V0IGlzQ2FzdENoZWNrID0+IGtpbmQgPT0gQ0FTVF9DSEVDSzsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRUeXBlQ29udmVyc2lvbih0aGlzKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0pzU3RhdGVtZW50KCkgPT4gaXNDb250cm9sRmxvdygpOwogIEBvdmVycmlkZQogIGJvb2wgaXNDb250cm9sRmxvdygpID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uVFlQRV9DT05WRVJTSU9OX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IG90aGVyIGlzIEhUeXBlQ29udmVyc2lvbjsKICBAb3ZlcnJpZGUKICBib29sIGlzQ29kZU1vdGlvbkludmFyaWFudCgpID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSFR5cGVDb252ZXJzaW9uIG90aGVyKSB7CiAgICByZXR1cm4ga2luZCA9PSBvdGhlci5raW5kICYmCiAgICAgICAgdHlwZUV4cHJlc3Npb24gPT0gb3RoZXIudHlwZUV4cHJlc3Npb24gJiYKICAgICAgICBjaGVja2VkVHlwZSA9PSBvdGhlci5jaGVja2VkVHlwZTsKICB9CgogIGJvb2wgaXNSZWR1bmRhbnQoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4gPSBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwogICAgRGFydFR5cGUgdHlwZSA9IHR5cGVFeHByZXNzaW9uOwogICAgaWYgKHR5cGUgIT0gbnVsbCkgewogICAgICBpZiAodHlwZS5pc1R5cGVWYXJpYWJsZSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBpZiAodHlwZS5pc0Z1dHVyZU9yKSB7CiAgICAgICAgLy8gYG51bGxgIGFsd2F5cyBwYXNzZXMgdHlwZSBjb252ZXJzaW9uLgogICAgICAgIGlmIChjaGVja2VkSW5wdXQuaXNOdWxsKGFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBPcHRpbWl6ZSBGdXR1cmVPciB0eXBlIGNvbnZlcnNpb25zLgogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBpZiAoIXR5cGUudHJlYXRBc1JhdykgewogICAgICAgIC8vIGBudWxsYCBhbHdheXMgcGFzc2VzIHR5cGUgY29udmVyc2lvbi4KICAgICAgICBpZiAoY2hlY2tlZElucHV0LmlzTnVsbChhYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmICh0eXBlLmlzRnVuY3Rpb25UeXBlKSB7CiAgICAgICAgLy8gYG51bGxgIGFsd2F5cyBwYXNzZXMgdHlwZSBjb252ZXJzaW9uLgogICAgICAgIGlmIChjaGVja2VkSW5wdXQuaXNOdWxsKGFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBPcHRpbWl6ZSBmdW5jdGlvbiB0eXBlIGNvbnZlcnNpb25zLgogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogICAgLy8gVHlwZSBpcyByZWZpbmVkIGZyb20gYGR5bmFtaWNgLCBzbyBpdCBtaWdodCBiZWNvbWUgbm9uLXJlZHVuZGFudC4KICAgIGlmIChhYnN0cmFjdFZhbHVlRG9tYWluLmNvbnRhaW5zQWxsKGNoZWNrZWRUeXBlKS5pc1BvdGVudGlhbGx5VHJ1ZSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBBYnN0cmFjdFZhbHVlIGlucHV0VHlwZSA9IGNoZWNrZWRJbnB1dC5pbnN0cnVjdGlvblR5cGU7CiAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0luKGlucHV0VHlwZSwgY2hlY2tlZFR5cGUpLmlzRGVmaW5pdGVseVRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnSFR5cGVDb252ZXJzaW9uKHR5cGU9JHR5cGVFeHByZXNzaW9uLCBraW5kPSRraW5kLCAnCiAgICAgICcke2hhc1R5cGVSZXByZXNlbnRhdGlvbiA/ICdyZXByZXNlbnRhdGlvbj0kdHlwZVJlcHJlc2VudGF0aW9uLCAnIDogJyd9JwogICAgICAnY2hlY2tlZElucHV0PSRjaGVja2VkSW5wdXQpJzsKfQoKLy8vIENoZWNrIGZvciByZWNlaXZlciBvciBhcmd1bWVudCB0eXBlIHdoZW4gbG93ZXJpbmcgb3BlcmF0aW9uIHRvIGEgcHJpbWl0aXZlLAovLy8gZS5nLiBsb3dlcmluZyBgK2AgdG8gW0hBZGRdLgovLy8KLy8vIEFmdGVyIE5OQkQsIGBhICsgYmAgd2lsbCByZXF1aXJlIGBhYCBhbmQgYGJgIGFyZSBub24tbnVsbGFibGUgYW5kIHRoZXNlCi8vLyBjaGVja3Mgd2lsbCBiZWNvbWUgZXhwbGljaXQgaW4gdGhlIHNvdXJjZSAoZS5nLiBgYSEgKyBiIWApLiBBdCB0aGF0IHRpbWUsCi8vLyB0aGlzIGNoZWNrIHNob3VsZCBiZSByZW1vdmVkLiAgSWYgbmVlZGVkLCB0aGUgYCFgIGNoZWNrIGNhbiBiZSBvcHRpbWl6ZWQKLy8vIGdpdmUgdGhlIHNhbWUgc2lnbmFscyB0byB0aGUgSmF2YVNjcmlwdCBWTS4KY2xhc3MgSFByaW1pdGl2ZUNoZWNrIGV4dGVuZHMgSENoZWNrIHsKICAvLyBWYWx1ZXMgZm9yIFtraW5kXS4KICBzdGF0aWMgY29uc3QgaW50IEFSR1VNRU5UX1RZUEVfQ0hFQ0sgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgUkVDRUlWRVJfVFlQRV9DSEVDSyA9IDM7CgogIGZpbmFsIERhcnRUeXBlIHR5cGVFeHByZXNzaW9uOwogIGZpbmFsIGludCBraW5kOwoKICAvLyBbcmVjZWl2ZXJUeXBlQ2hlY2tTZWxlY3Rvcl0gaXMgdGhlIHNlbGVjdG9yIHVzZWQgZm9yIGEgcmVjZWl2ZXIgdHlwZSBjaGVjawogIC8vIG9uIG9wZW4tY29kZWQgb3BlcmF0b3JzLCBlLmcuIHRoZSBub3QtbnVsbCBjaGVjayBvbiBgeGAgaW4gYHggKyAxYCB3b3VsZCBiZQogIC8vIGNvbXBpbGVkIHRvIHRoZSBmb2xsb3dpbmcsIGZvciB3aGljaCB3ZSBuZWVkIHRoZSBzZWxlY3RvciBgJGFkZGAuCiAgLy8KICAvLyAgICAgaWYgKHR5cGVvZiB4ICE9ICJudW1iZXIiKSB4LiRhZGQoKTsKICAvLwogIGZpbmFsIFNlbGVjdG9yIHJlY2VpdmVyVHlwZUNoZWNrU2VsZWN0b3I7CgogIEFic3RyYWN0VmFsdWUgY2hlY2tlZFR5cGU7IC8vIE5vdCBmaW5hbCBiZWNhdXNlIHdlIHJlZmluZSBpdC4KICBBYnN0cmFjdFZhbHVlCiAgICAgIGlucHV0VHlwZTsgLy8gSG9sZHMgaW5wdXQgdHlwZSBmb3IgY29kZWdlbiBhZnRlciBIVHlwZUtub3duIHJlbW92YWwuCgogIEhQcmltaXRpdmVDaGVjayh0aGlzLnR5cGVFeHByZXNzaW9uLCB0aGlzLmtpbmQsIEFic3RyYWN0VmFsdWUgdHlwZSwKICAgICAgSEluc3RydWN0aW9uIGlucHV0LCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAge3RoaXMucmVjZWl2ZXJUeXBlQ2hlY2tTZWxlY3Rvcn0pCiAgICAgIDogY2hlY2tlZFR5cGUgPSB0eXBlLAogICAgICAgIHN1cGVyKDxISW5zdHJ1Y3Rpb24+W2lucHV0XSwgdHlwZSkgewogICAgYXNzZXJ0KGlzUmVjZWl2ZXJUeXBlQ2hlY2sgPT0gKHJlY2VpdmVyVHlwZUNoZWNrU2VsZWN0b3IgIT0gbnVsbCkpOwogICAgdGhpcy5zb3VyY2VFbGVtZW50ID0gaW5wdXQuc291cmNlRWxlbWVudDsKICAgIHRoaXMuc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBjb252ZXJ0VHlwZShKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsIERhcnRUeXBlIHR5cGUsIGludCBraW5kKSB7CiAgICBpZiAodHlwZUV4cHJlc3Npb24gPT0gdHlwZSkgewogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIHJldHVybiBzdXBlci5jb252ZXJ0VHlwZShjbG9zZWRXb3JsZCwgdHlwZSwga2luZCk7CiAgfQoKICBib29sIGdldCBpc0FyZ3VtZW50VHlwZUNoZWNrID0+IGtpbmQgPT0gQVJHVU1FTlRfVFlQRV9DSEVDSzsKICBib29sIGdldCBpc1JlY2VpdmVyVHlwZUNoZWNrID0+IGtpbmQgPT0gUkVDRUlWRVJfVFlQRV9DSEVDSzsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRQcmltaXRpdmVDaGVjayh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0pzU3RhdGVtZW50KCkgPT4gdHJ1ZTsKICBAb3ZlcnJpZGUKICBib29sIGlzQ29udHJvbEZsb3coKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uUFJJTUlUSVZFX0NIRUNLX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IG90aGVyIGlzIEhQcmltaXRpdmVDaGVjazsKICBAb3ZlcnJpZGUKICBib29sIGlzQ29kZU1vdGlvbkludmFyaWFudCgpID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSFByaW1pdGl2ZUNoZWNrIG90aGVyKSB7CiAgICByZXR1cm4ga2luZCA9PSBvdGhlci5raW5kICYmCiAgICAgICAgY2hlY2tlZFR5cGUgPT0gb3RoZXIuY2hlY2tlZFR5cGUgJiYKICAgICAgICByZWNlaXZlclR5cGVDaGVja1NlbGVjdG9yID09IG90aGVyLnJlY2VpdmVyVHlwZUNoZWNrU2VsZWN0b3I7CiAgfQoKICBib29sIGlzUmVkdW5kYW50KEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluID0gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKICAgIC8vIFR5cGUgaXMgcmVmaW5lZCBmcm9tIGBkeW5hbWljYCwgc28gaXQgbWlnaHQgYmVjb21lIG5vbi1yZWR1bmRhbnQuCiAgICBpZiAoYWJzdHJhY3RWYWx1ZURvbWFpbi5jb250YWluc0FsbChjaGVja2VkVHlwZSkuaXNQb3RlbnRpYWxseVRydWUpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgQWJzdHJhY3RWYWx1ZSBpbnB1dFR5cGUgPSBjaGVja2VkSW5wdXQuaW5zdHJ1Y3Rpb25UeXBlOwogICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4uaXNJbihpbnB1dFR5cGUsIGNoZWNrZWRUeXBlKS5pc0RlZmluaXRlbHlUcnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0hQcmltaXRpdmVDaGVjayhjaGVja2VkVHlwZT0kY2hlY2tlZFR5cGUsIGtpbmQ9JGtpbmQsICcKICAgICAgJ2NoZWNrZWRJbnB1dD0kY2hlY2tlZElucHV0KSc7Cn0KCi8vLyBBIGNoZWNrIHRoYXQgdGhlIGlucHV0IHRvIGEgY29uZGl0aW9uIChpZiwgPzosIHdoaWxlLCBldGMpIGlzIG5vbi1udWxsLiBUaGUKLy8vIGZyb250LWVuZCBnZW5lcmF0ZXMgJ2FzIGJvb2wnIGNoZWNrcywgYnV0IHVudGlsIHRoZSB0cmFuc2l0aW9uIHRvIE5OQkQgaXMKLy8vIGNvbXBsZXRlLCB0aGlzIGFsbG93cyBgbnVsbGAgdG8gYmUgcGFzc2VkIHRvIHRoZSBjb25kaXRpb24uCi8vLwovLyBUT0RPKHNyYSk6IE9uY2UgTk5EQiBpcyBmYXIgZW5vdWdoIGFsb25nIHRoYXQgdGhlIGZyb250LWVuZCBjYW4gZ2VuZXJhdGUgYGFzCi8vIGJvb2whYCBjaGVja3MgYW5kIHRoZSBiYWNrZW5kIGNoZWNrcyB0aGVtIGNvcnJlY3RseSwgdGhpcyBpbnN0cnVjdGlvbiB3aWxsCi8vIGJlY29tZSB1bm5lY2Vzc2FyeSBhbmQgc2hvdWxkIGJlIHJlbW92ZWQuCmNsYXNzIEhCb29sQ29udmVyc2lvbiBleHRlbmRzIEhDaGVjayB7CiAgSEJvb2xDb252ZXJzaW9uKEhJbnN0cnVjdGlvbiBpbnB1dCwgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKDxISW5zdHJ1Y3Rpb24+W2lucHV0XSwgdHlwZSk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNKc1N0YXRlbWVudCgpID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGlzQ29kZU1vdGlvbkludmFyaWFudCgpID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEJvb2xDb252ZXJzaW9uKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uQk9PTF9DT05WRVJTSU9OX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IG90aGVyIGlzIEhCb29sQ29udmVyc2lvbjsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEJvb2xDb252ZXJzaW9uIG90aGVyKSA9PiB0cnVlOwoKICBib29sIGlzUmVkdW5kYW50KEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluID0gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKICAgIEFic3RyYWN0VmFsdWUgaW5wdXRUeXBlID0gY2hlY2tlZElucHV0Lmluc3RydWN0aW9uVHlwZTsKICAgIHJldHVybiBhYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgLmlzSW4oaW5wdXRUeXBlLCBpbnN0cnVjdGlvblR5cGUpCiAgICAgICAgLmlzRGVmaW5pdGVseVRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICdIQm9vbENvbnZlcnNpb24oJGNoZWNrZWRJbnB1dCknOwp9CgovLy8gVGhlIFtIVHlwZUtub3duXSBpbnN0cnVjdGlvbiBtYXJrcyBhIHZhbHVlIHdpdGggYSByZWZpbmVkIHR5cGUuCmNsYXNzIEhUeXBlS25vd24gZXh0ZW5kcyBIQ2hlY2sgewogIEFic3RyYWN0VmFsdWUga25vd25UeXBlOwogIGZpbmFsIGJvb2wgX2lzTW92YWJsZTsKCiAgSFR5cGVLbm93bi5waW5uZWQoQWJzdHJhY3RWYWx1ZSBrbm93blR5cGUsIEhJbnN0cnVjdGlvbiBpbnB1dCkKICAgICAgOiB0aGlzLmtub3duVHlwZSA9IGtub3duVHlwZSwKICAgICAgICB0aGlzLl9pc01vdmFibGUgPSBmYWxzZSwKICAgICAgICBzdXBlcig8SEluc3RydWN0aW9uPltpbnB1dF0sIGtub3duVHlwZSk7CgogIEhUeXBlS25vd24ud2l0bmVzc2VkKAogICAgICBBYnN0cmFjdFZhbHVlIGtub3duVHlwZSwgSEluc3RydWN0aW9uIGlucHV0LCBISW5zdHJ1Y3Rpb24gd2l0bmVzcykKICAgICAgOiB0aGlzLmtub3duVHlwZSA9IGtub3duVHlwZSwKICAgICAgICB0aGlzLl9pc01vdmFibGUgPSB0cnVlLAogICAgICAgIHN1cGVyKDxISW5zdHJ1Y3Rpb24+W2lucHV0LCB3aXRuZXNzXSwga25vd25UeXBlKTsKCiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAnVHlwZUtub3duICRrbm93blR5cGUnOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0VHlwZUtub3duKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzSnNTdGF0ZW1lbnQoKSA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGlzQ29udHJvbEZsb3coKSA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGNhblRocm93KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PiBmYWxzZTsKCiAgYm9vbCBnZXQgaXNQaW5uZWQgPT4gaW5wdXRzLmxlbmd0aCA9PSAxOwoKICBISW5zdHJ1Y3Rpb24gZ2V0IHdpdG5lc3MgPT4gaW5wdXRzLmxlbmd0aCA9PSAyID8gaW5wdXRzWzFdIDogbnVsbDsKCiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLlRZUEVfS05PV05fVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gb3RoZXIgaXMgSFR5cGVLbm93bjsKICBAb3ZlcnJpZGUKICBib29sIGlzQ29kZU1vdGlvbkludmFyaWFudCgpID0+IHRydWU7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNNb3ZhYmxlID0+IF9pc01vdmFibGUgJiYgdXNlR3ZuKCk7CgogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhIVHlwZUtub3duIG90aGVyKSB7CiAgICByZXR1cm4ga25vd25UeXBlID09IG90aGVyLmtub3duVHlwZSAmJgogICAgICAgIGluc3RydWN0aW9uVHlwZSA9PSBvdGhlci5pbnN0cnVjdGlvblR5cGU7CiAgfQoKICBib29sIGlzUmVkdW5kYW50KEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluID0gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKICAgIGlmIChhYnN0cmFjdFZhbHVlRG9tYWluLmNvbnRhaW5zQWxsKGtub3duVHlwZSkuaXNQb3RlbnRpYWxseVRydWUpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgQWJzdHJhY3RWYWx1ZSBpbnB1dFR5cGUgPSBjaGVja2VkSW5wdXQuaW5zdHJ1Y3Rpb25UeXBlOwogICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4uaXNJbihpbnB1dFR5cGUsIGtub3duVHlwZSkuaXNEZWZpbml0ZWx5VHJ1ZTsKICB9Cn0KCmNsYXNzIEhSYW5nZUNvbnZlcnNpb24gZXh0ZW5kcyBIQ2hlY2sgewogIEhSYW5nZUNvbnZlcnNpb24oSEluc3RydWN0aW9uIGlucHV0LCB0eXBlKQogICAgICA6IHN1cGVyKDxISW5zdHJ1Y3Rpb24+W2lucHV0XSwgdHlwZSkgewogICAgc291cmNlRWxlbWVudCA9IGlucHV0LnNvdXJjZUVsZW1lbnQ7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc01vdmFibGUgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0UmFuZ2VDb252ZXJzaW9uKHRoaXMpOwp9CgpjbGFzcyBIU3RyaW5nQ29uY2F0IGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBIU3RyaW5nQ29uY2F0KEhJbnN0cnVjdGlvbiBsZWZ0LCBISW5zdHJ1Y3Rpb24gcmlnaHQsIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcig8SEluc3RydWN0aW9uPltsZWZ0LCByaWdodF0sIHR5cGUpIHsKICAgIC8vIFRPRE8oc3JhKTogVW50aWwgSXNzdWUgOTI5MyBpcyBmaXhlZCwgdGhpcyBmYWxzZSBkZXBlbmRlbmN5IGtlZXBzIHRoZQogICAgLy8gY29uY2F0cyBidW5jaGVkIHdpdGggc3RyaW5naWZpZWQgaW5wdXRzIGZvciBtdWNoIGJldHRlciBsb29raW5nIGNvZGUgd2l0aAogICAgLy8gZmV3ZXIgdGVtcHMuCiAgICBzaWRlRWZmZWN0cy5zZXREZXBlbmRzT25Tb21ldGhpbmcoKTsKICB9CgogIEhJbnN0cnVjdGlvbiBnZXQgbGVmdCA9PiBpbnB1dHNbMF07CiAgSEluc3RydWN0aW9uIGdldCByaWdodCA9PiBpbnB1dHNbMV07CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0U3RyaW5nQ29uY2F0KHRoaXMpOwogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gInN0cmluZyBjb25jYXQiOwp9CgovLy8gVGhlIHBhcnQgb2Ygc3RyaW5nIGludGVycG9sYXRpb24gd2hpY2ggY29udmVydHMgYW5kIGludGVycG9sYXRlZCBleHByZXNzaW9uCi8vLyBpbnRvIGEgU3RyaW5nIHZhbHVlLgpjbGFzcyBIU3RyaW5naWZ5IGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBIU3RyaW5naWZ5KEhJbnN0cnVjdGlvbiBpbnB1dCwgQWJzdHJhY3RWYWx1ZSByZXN1bHRUeXBlKQogICAgICA6IHN1cGVyKDxISW5zdHJ1Y3Rpb24+W2lucHV0XSwgcmVzdWx0VHlwZSkgewogICAgc2lkZUVmZmVjdHMuc2V0QWxsU2lkZUVmZmVjdHMoKTsKICAgIHNpZGVFZmZlY3RzLnNldERlcGVuZHNPblNvbWV0aGluZygpOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRTdHJpbmdpZnkodGhpcyk7CiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAic3RyaW5naWZ5IjsKfQoKLy8vIE5vbi1ibG9jay1iYXNlZCAoYWthLiB0cmFkaXRpb25hbCkgbG9vcCBpbmZvcm1hdGlvbi4KY2xhc3MgSExvb3BJbmZvcm1hdGlvbiB7CiAgZmluYWwgSEJhc2ljQmxvY2sgaGVhZGVyOwogIGZpbmFsIExpc3Q8SEJhc2ljQmxvY2s+IGJsb2NrczsKICBmaW5hbCBMaXN0PEhCYXNpY0Jsb2NrPiBiYWNrRWRnZXM7CiAgZmluYWwgTGlzdDxMYWJlbERlZmluaXRpb24+IGxhYmVsczsKICBmaW5hbCBKdW1wVGFyZ2V0IHRhcmdldDsKCiAgLy8vIENvcnJlc3BvbmRpbmcgYmxvY2sgaW5mb3JtYXRpb24gZm9yIHRoZSBsb29wLgogIEhMb29wQmxvY2tJbmZvcm1hdGlvbiBsb29wQmxvY2tJbmZvcm1hdGlvbjsKCiAgSExvb3BJbmZvcm1hdGlvbih0aGlzLmhlYWRlciwgdGhpcy50YXJnZXQsIHRoaXMubGFiZWxzKQogICAgICA6IGJsb2NrcyA9IG5ldyBMaXN0PEhCYXNpY0Jsb2NrPigpLAogICAgICAgIGJhY2tFZGdlcyA9IG5ldyBMaXN0PEhCYXNpY0Jsb2NrPigpOwoKICB2b2lkIGFkZEJhY2tFZGdlKEhCYXNpY0Jsb2NrIHByZWRlY2Vzc29yKSB7CiAgICBiYWNrRWRnZXMuYWRkKHByZWRlY2Vzc29yKTsKICAgIExpc3Q8SEJhc2ljQmxvY2s+IHdvcmtRdWV1ZSA9IDxIQmFzaWNCbG9jaz5bcHJlZGVjZXNzb3JdOwogICAgZG8gewogICAgICBIQmFzaWNCbG9jayBjdXJyZW50ID0gd29ya1F1ZXVlLnJlbW92ZUxhc3QoKTsKICAgICAgYWRkQmxvY2soY3VycmVudCwgd29ya1F1ZXVlKTsKICAgIH0gd2hpbGUgKCF3b3JrUXVldWUuaXNFbXB0eSk7CiAgfQoKICAvLyBBZGRzIGEgYmxvY2sgYW5kIHRyYW5zaXRpdmVseSBhbGwgaXRzIHByZWRlY2Vzc29ycyBpbiB0aGUgbG9vcCBhcwogIC8vIGxvb3AgYmxvY2tzLgogIHZvaWQgYWRkQmxvY2soSEJhc2ljQmxvY2sgYmxvY2ssIExpc3Q8SEJhc2ljQmxvY2s+IHdvcmtRdWV1ZSkgewogICAgaWYgKGlkZW50aWNhbChibG9jaywgaGVhZGVyKSkgcmV0dXJuOwogICAgSEJhc2ljQmxvY2sgcGFyZW50SGVhZGVyID0gYmxvY2sucGFyZW50TG9vcEhlYWRlcjsKICAgIGlmIChpZGVudGljYWwocGFyZW50SGVhZGVyLCBoZWFkZXIpKSB7CiAgICAgIC8vIE5vdGhpbmcgdG8gZG8gaW4gdGhpcyBjYXNlLgogICAgfSBlbHNlIGlmIChwYXJlbnRIZWFkZXIgIT0gbnVsbCkgewogICAgICB3b3JrUXVldWUuYWRkKHBhcmVudEhlYWRlcik7CiAgICB9IGVsc2UgewogICAgICBibG9jay5wYXJlbnRMb29wSGVhZGVyID0gaGVhZGVyOwogICAgICBibG9ja3MuYWRkKGJsb2NrKTsKICAgICAgd29ya1F1ZXVlLmFkZEFsbChibG9jay5wcmVkZWNlc3NvcnMpOwogICAgfQogIH0KfQoKLy8vIEVtYmVkZGluZyBvZiBhIFtIQmxvY2tJbmZvcm1hdGlvbl0gZm9yIGJsb2NrLXN0cnVjdHVyZSBiYXNlZCB0cmF2ZXJzYWwKLy8vIGluIGEgZG9taW5hdG9yIGJhc2VkIGZsb3cgdHJhdmVyc2FsIGJ5IGF0dGFjaGluZyBpdCB0byBhIGJhc2ljIGJsb2NrLgovLy8gVG8gZ28gYmFjayB0byBkb21pbmF0b3ItYmFzZWQgdHJhdmVyc2FsLCBhIFtIU3ViR3JhcGhCbG9ja0luZm9ybWF0aW9uXQovLy8gc3RydWN0dXJlIGNhbiBiZSBhZGRlZCBpbiB0aGUgYmxvY2sgc3RydWN0dXJlLgpjbGFzcyBIQmxvY2tGbG93IHsKICBmaW5hbCBIQmxvY2tJbmZvcm1hdGlvbiBib2R5OwogIGZpbmFsIEhCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbjsKICBIQmxvY2tGbG93KHRoaXMuYm9keSwgdGhpcy5jb250aW51YXRpb24pOwp9CgovLy8gSW5mb3JtYXRpb24gYWJvdXQgYSBzeW50YWN0aWMtbGlrZSBzdHJ1Y3R1cmUuCmFic3RyYWN0IGNsYXNzIEhCbG9ja0luZm9ybWF0aW9uIHsKICBIQmFzaWNCbG9jayBnZXQgc3RhcnQ7CiAgSEJhc2ljQmxvY2sgZ2V0IGVuZDsKICBib29sIGFjY2VwdChIQmxvY2tJbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcik7Cn0KCi8vLyBJbmZvcm1hdGlvbiBhYm91dCBhIHN0YXRlbWVudC1saWtlIHN0cnVjdHVyZS4KYWJzdHJhY3QgY2xhc3MgSFN0YXRlbWVudEluZm9ybWF0aW9uIGV4dGVuZHMgSEJsb2NrSW5mb3JtYXRpb24gewogIEBvdmVycmlkZQogIGJvb2wgYWNjZXB0KEhTdGF0ZW1lbnRJbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcik7Cn0KCi8vLyBJbmZvcm1hdGlvbiBhYm91dCBhbiBleHByZXNzaW9uLWxpa2Ugc3RydWN0dXJlLgphYnN0cmFjdCBjbGFzcyBIRXhwcmVzc2lvbkluZm9ybWF0aW9uIGV4dGVuZHMgSEJsb2NrSW5mb3JtYXRpb24gewogIEBvdmVycmlkZQogIGJvb2wgYWNjZXB0KEhFeHByZXNzaW9uSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpOwogIEhJbnN0cnVjdGlvbiBnZXQgY29uZGl0aW9uRXhwcmVzc2lvbjsKfQoKYWJzdHJhY3QgY2xhc3MgSFN0YXRlbWVudEluZm9ybWF0aW9uVmlzaXRvciB7CiAgYm9vbCB2aXNpdExhYmVsZWRCbG9ja0luZm8oSExhYmVsZWRCbG9ja0luZm9ybWF0aW9uIGluZm8pOwogIGJvb2wgdmlzaXRMb29wSW5mbyhITG9vcEJsb2NrSW5mb3JtYXRpb24gaW5mbyk7CiAgYm9vbCB2aXNpdElmSW5mbyhISWZCbG9ja0luZm9ybWF0aW9uIGluZm8pOwogIGJvb2wgdmlzaXRUcnlJbmZvKEhUcnlCbG9ja0luZm9ybWF0aW9uIGluZm8pOwogIGJvb2wgdmlzaXRTd2l0Y2hJbmZvKEhTd2l0Y2hCbG9ja0luZm9ybWF0aW9uIGluZm8pOwogIGJvb2wgdmlzaXRTZXF1ZW5jZUluZm8oSFN0YXRlbWVudFNlcXVlbmNlSW5mb3JtYXRpb24gaW5mbyk7CiAgLy8gUHNldWRvLXN0cnVjdHVyZSBlbWJlZGRpbmcgYSBkb21pbmF0b3ItYmFzZWQgdHJhdmVyc2FsIGludG8KICAvLyB0aGUgYmxvY2stc3RydWN0dXJlIHRyYXZlcnNhbC4gVGhpcyB3aWxsIGV2ZW50dWFsbHkgZ28gYXdheS4KICBib29sIHZpc2l0U3ViR3JhcGhJbmZvKEhTdWJHcmFwaEJsb2NrSW5mb3JtYXRpb24gaW5mbyk7Cn0KCmFic3RyYWN0IGNsYXNzIEhFeHByZXNzaW9uSW5mb3JtYXRpb25WaXNpdG9yIHsKICBib29sIHZpc2l0QW5kT3JJbmZvKEhBbmRPckJsb2NrSW5mb3JtYXRpb24gaW5mbyk7CiAgYm9vbCB2aXNpdFN1YkV4cHJlc3Npb25JbmZvKEhTdWJFeHByZXNzaW9uQmxvY2tJbmZvcm1hdGlvbiBpbmZvKTsKfQoKYWJzdHJhY3QgY2xhc3MgSEJsb2NrSW5mb3JtYXRpb25WaXNpdG9yCiAgICBpbXBsZW1lbnRzIEhTdGF0ZW1lbnRJbmZvcm1hdGlvblZpc2l0b3IsIEhFeHByZXNzaW9uSW5mb3JtYXRpb25WaXNpdG9yIHt9CgovLy8gR2VuZXJpYyBjbGFzcyB3cmFwcGluZyBhIFtTdWJHcmFwaF0gYXMgYSBibG9jay1pbmZvcm1hdGlvbiB1bnRpbAovLy8gYWxsIHN0cnVjdHVyZXMgYXJlIGhhbmRsZWQgcHJvcGVybHkuCmNsYXNzIEhTdWJHcmFwaEJsb2NrSW5mb3JtYXRpb24gaW1wbGVtZW50cyBIU3RhdGVtZW50SW5mb3JtYXRpb24gewogIGZpbmFsIFN1YkdyYXBoIHN1YkdyYXBoOwogIEhTdWJHcmFwaEJsb2NrSW5mb3JtYXRpb24odGhpcy5zdWJHcmFwaCk7CgogIEBvdmVycmlkZQogIEhCYXNpY0Jsb2NrIGdldCBzdGFydCA9PiBzdWJHcmFwaC5zdGFydDsKICBAb3ZlcnJpZGUKICBIQmFzaWNCbG9jayBnZXQgZW5kID0+IHN1YkdyYXBoLmVuZDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBhY2NlcHQoSFN0YXRlbWVudEluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSA9PgogICAgICB2aXNpdG9yLnZpc2l0U3ViR3JhcGhJbmZvKHRoaXMpOwp9CgovLy8gR2VuZXJpYyBjbGFzcyB3cmFwcGluZyBhIFtTdWJFeHByZXNzaW9uXSBhcyBhIGJsb2NrLWluZm9ybWF0aW9uIHVudGlsCi8vLyBleHByZXNzaW9ucyBzdHJ1Y3R1cmVzIGFyZSBoYW5kbGVkIHByb3Blcmx5LgpjbGFzcyBIU3ViRXhwcmVzc2lvbkJsb2NrSW5mb3JtYXRpb24gaW1wbGVtZW50cyBIRXhwcmVzc2lvbkluZm9ybWF0aW9uIHsKICBmaW5hbCBTdWJFeHByZXNzaW9uIHN1YkV4cHJlc3Npb247CiAgSFN1YkV4cHJlc3Npb25CbG9ja0luZm9ybWF0aW9uKHRoaXMuc3ViRXhwcmVzc2lvbik7CgogIEBvdmVycmlkZQogIEhCYXNpY0Jsb2NrIGdldCBzdGFydCA9PiBzdWJFeHByZXNzaW9uLnN0YXJ0OwogIEBvdmVycmlkZQogIEhCYXNpY0Jsb2NrIGdldCBlbmQgPT4gc3ViRXhwcmVzc2lvbi5lbmQ7CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBnZXQgY29uZGl0aW9uRXhwcmVzc2lvbiA9PiBzdWJFeHByZXNzaW9uLmNvbmRpdGlvbkV4cHJlc3Npb247CgogIEBvdmVycmlkZQogIGJvb2wgYWNjZXB0KEhFeHByZXNzaW9uSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpID0+CiAgICAgIHZpc2l0b3IudmlzaXRTdWJFeHByZXNzaW9uSW5mbyh0aGlzKTsKfQoKLy8vIEEgc2VxdWVuY2Ugb2Ygc2VwYXJhdGUgc3RhdGVtZW50cy4KY2xhc3MgSFN0YXRlbWVudFNlcXVlbmNlSW5mb3JtYXRpb24gaW1wbGVtZW50cyBIU3RhdGVtZW50SW5mb3JtYXRpb24gewogIGZpbmFsIExpc3Q8SFN0YXRlbWVudEluZm9ybWF0aW9uPiBzdGF0ZW1lbnRzOwogIEhTdGF0ZW1lbnRTZXF1ZW5jZUluZm9ybWF0aW9uKHRoaXMuc3RhdGVtZW50cyk7CgogIEBvdmVycmlkZQogIEhCYXNpY0Jsb2NrIGdldCBzdGFydCA9PiBzdGF0ZW1lbnRzWzBdLnN0YXJ0OwogIEBvdmVycmlkZQogIEhCYXNpY0Jsb2NrIGdldCBlbmQgPT4gc3RhdGVtZW50cy5sYXN0LmVuZDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBhY2NlcHQoSFN0YXRlbWVudEluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSA9PgogICAgICB2aXNpdG9yLnZpc2l0U2VxdWVuY2VJbmZvKHRoaXMpOwp9CgpjbGFzcyBITGFiZWxlZEJsb2NrSW5mb3JtYXRpb24gaW1wbGVtZW50cyBIU3RhdGVtZW50SW5mb3JtYXRpb24gewogIGZpbmFsIEhTdGF0ZW1lbnRJbmZvcm1hdGlvbiBib2R5OwogIGZpbmFsIExpc3Q8TGFiZWxEZWZpbml0aW9uPiBsYWJlbHM7CiAgZmluYWwgSnVtcFRhcmdldCB0YXJnZXQ7CiAgZmluYWwgYm9vbCBpc0NvbnRpbnVlOwoKICBITGFiZWxlZEJsb2NrSW5mb3JtYXRpb24odGhpcy5ib2R5LCBMaXN0PExhYmVsRGVmaW5pdGlvbj4gbGFiZWxzLAogICAgICB7dGhpcy5pc0NvbnRpbnVlOiBmYWxzZX0pCiAgICAgIDogdGhpcy5sYWJlbHMgPSBsYWJlbHMsCiAgICAgICAgdGhpcy50YXJnZXQgPSBsYWJlbHNbMF0udGFyZ2V0OwoKICBITGFiZWxlZEJsb2NrSW5mb3JtYXRpb24uaW1wbGljaXQodGhpcy5ib2R5LCB0aGlzLnRhcmdldCwKICAgICAge3RoaXMuaXNDb250aW51ZTogZmFsc2V9KQogICAgICA6IHRoaXMubGFiZWxzID0gY29uc3QgPExhYmVsRGVmaW5pdGlvbj5bXTsKCiAgQG92ZXJyaWRlCiAgSEJhc2ljQmxvY2sgZ2V0IHN0YXJ0ID0+IGJvZHkuc3RhcnQ7CiAgQG92ZXJyaWRlCiAgSEJhc2ljQmxvY2sgZ2V0IGVuZCA9PiBib2R5LmVuZDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBhY2NlcHQoSFN0YXRlbWVudEluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSA9PgogICAgICB2aXNpdG9yLnZpc2l0TGFiZWxlZEJsb2NrSW5mbyh0aGlzKTsKfQoKY2xhc3MgSExvb3BCbG9ja0luZm9ybWF0aW9uIGltcGxlbWVudHMgSFN0YXRlbWVudEluZm9ybWF0aW9uIHsKICBzdGF0aWMgY29uc3QgaW50IFdISUxFX0xPT1AgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgRk9SX0xPT1AgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgRE9fV0hJTEVfTE9PUCA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBGT1JfSU5fTE9PUCA9IDM7CiAgc3RhdGljIGNvbnN0IGludCBTV0lUQ0hfQ09OVElOVUVfTE9PUCA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBOT1RfQV9MT09QID0gLTE7CgogIGZpbmFsIGludCBraW5kOwogIGZpbmFsIEhFeHByZXNzaW9uSW5mb3JtYXRpb24gaW5pdGlhbGl6ZXI7CiAgZmluYWwgSEV4cHJlc3Npb25JbmZvcm1hdGlvbiBjb25kaXRpb247CiAgZmluYWwgSFN0YXRlbWVudEluZm9ybWF0aW9uIGJvZHk7CiAgZmluYWwgSEV4cHJlc3Npb25JbmZvcm1hdGlvbiB1cGRhdGVzOwogIGZpbmFsIEp1bXBUYXJnZXQgdGFyZ2V0OwogIGZpbmFsIExpc3Q8TGFiZWxEZWZpbml0aW9uPiBsYWJlbHM7CiAgZmluYWwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb247CgogIEhMb29wQmxvY2tJbmZvcm1hdGlvbih0aGlzLmtpbmQsIHRoaXMuaW5pdGlhbGl6ZXIsIHRoaXMuY29uZGl0aW9uLCB0aGlzLmJvZHksCiAgICAgIHRoaXMudXBkYXRlcywgdGhpcy50YXJnZXQsIHRoaXMubGFiZWxzLCB0aGlzLnNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBhc3NlcnQoCiAgICAgICAgKGtpbmQgPT0gRE9fV0hJTEVfTE9PUCA/IGJvZHkuc3RhcnQgOiBjb25kaXRpb24uc3RhcnQpLmlzTG9vcEhlYWRlcigpKTsKICB9CgogIEBvdmVycmlkZQogIEhCYXNpY0Jsb2NrIGdldCBzdGFydCB7CiAgICBpZiAoaW5pdGlhbGl6ZXIgIT0gbnVsbCkgcmV0dXJuIGluaXRpYWxpemVyLnN0YXJ0OwogICAgaWYgKGtpbmQgPT0gRE9fV0hJTEVfTE9PUCkgewogICAgICByZXR1cm4gYm9keS5zdGFydDsKICAgIH0KICAgIHJldHVybiBjb25kaXRpb24uc3RhcnQ7CiAgfQoKICBIQmFzaWNCbG9jayBnZXQgbG9vcEhlYWRlciB7CiAgICByZXR1cm4ga2luZCA9PSBET19XSElMRV9MT09QID8gYm9keS5zdGFydCA6IGNvbmRpdGlvbi5zdGFydDsKICB9CgogIEBvdmVycmlkZQogIEhCYXNpY0Jsb2NrIGdldCBlbmQgewogICAgaWYgKHVwZGF0ZXMgIT0gbnVsbCkgcmV0dXJuIHVwZGF0ZXMuZW5kOwogICAgaWYgKGtpbmQgPT0gRE9fV0hJTEVfTE9PUCAmJiBjb25kaXRpb24gIT0gbnVsbCkgewogICAgICByZXR1cm4gY29uZGl0aW9uLmVuZDsKICAgIH0KICAgIHJldHVybiBib2R5LmVuZDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgYWNjZXB0KEhTdGF0ZW1lbnRJbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcikgPT4KICAgICAgdmlzaXRvci52aXNpdExvb3BJbmZvKHRoaXMpOwp9CgpjbGFzcyBISWZCbG9ja0luZm9ybWF0aW9uIGltcGxlbWVudHMgSFN0YXRlbWVudEluZm9ybWF0aW9uIHsKICBmaW5hbCBIRXhwcmVzc2lvbkluZm9ybWF0aW9uIGNvbmRpdGlvbjsKICBmaW5hbCBIU3RhdGVtZW50SW5mb3JtYXRpb24gdGhlbkdyYXBoOwogIGZpbmFsIEhTdGF0ZW1lbnRJbmZvcm1hdGlvbiBlbHNlR3JhcGg7CiAgSElmQmxvY2tJbmZvcm1hdGlvbih0aGlzLmNvbmRpdGlvbiwgdGhpcy50aGVuR3JhcGgsIHRoaXMuZWxzZUdyYXBoKTsKCiAgQG92ZXJyaWRlCiAgSEJhc2ljQmxvY2sgZ2V0IHN0YXJ0ID0+IGNvbmRpdGlvbi5zdGFydDsKICBAb3ZlcnJpZGUKICBIQmFzaWNCbG9jayBnZXQgZW5kID0+IGVsc2VHcmFwaCA9PSBudWxsID8gdGhlbkdyYXBoLmVuZCA6IGVsc2VHcmFwaC5lbmQ7CgogIEBvdmVycmlkZQogIGJvb2wgYWNjZXB0KEhTdGF0ZW1lbnRJbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcikgPT4KICAgICAgdmlzaXRvci52aXNpdElmSW5mbyh0aGlzKTsKfQoKY2xhc3MgSEFuZE9yQmxvY2tJbmZvcm1hdGlvbiBpbXBsZW1lbnRzIEhFeHByZXNzaW9uSW5mb3JtYXRpb24gewogIGZpbmFsIGJvb2wgaXNBbmQ7CiAgZmluYWwgSEV4cHJlc3Npb25JbmZvcm1hdGlvbiBsZWZ0OwogIGZpbmFsIEhFeHByZXNzaW9uSW5mb3JtYXRpb24gcmlnaHQ7CiAgSEFuZE9yQmxvY2tJbmZvcm1hdGlvbih0aGlzLmlzQW5kLCB0aGlzLmxlZnQsIHRoaXMucmlnaHQpOwoKICBAb3ZlcnJpZGUKICBIQmFzaWNCbG9jayBnZXQgc3RhcnQgPT4gbGVmdC5zdGFydDsKICBAb3ZlcnJpZGUKICBIQmFzaWNCbG9jayBnZXQgZW5kID0+IHJpZ2h0LmVuZDsKCiAgLy8gV2UgZG9uJ3QgY3VycmVudGx5IHVzZSBIQW5kT3JCbG9ja0luZm9ybWF0aW9uLgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBnZXQgY29uZGl0aW9uRXhwcmVzc2lvbiB7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgYWNjZXB0KEhFeHByZXNzaW9uSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpID0+CiAgICAgIHZpc2l0b3IudmlzaXRBbmRPckluZm8odGhpcyk7Cn0KCmNsYXNzIEhUcnlCbG9ja0luZm9ybWF0aW9uIGltcGxlbWVudHMgSFN0YXRlbWVudEluZm9ybWF0aW9uIHsKICBmaW5hbCBIU3RhdGVtZW50SW5mb3JtYXRpb24gYm9keTsKICBmaW5hbCBITG9jYWxWYWx1ZSBjYXRjaFZhcmlhYmxlOwogIGZpbmFsIEhTdGF0ZW1lbnRJbmZvcm1hdGlvbiBjYXRjaEJsb2NrOwogIGZpbmFsIEhTdGF0ZW1lbnRJbmZvcm1hdGlvbiBmaW5hbGx5QmxvY2s7CiAgSFRyeUJsb2NrSW5mb3JtYXRpb24oCiAgICAgIHRoaXMuYm9keSwgdGhpcy5jYXRjaFZhcmlhYmxlLCB0aGlzLmNhdGNoQmxvY2ssIHRoaXMuZmluYWxseUJsb2NrKTsKCiAgQG92ZXJyaWRlCiAgSEJhc2ljQmxvY2sgZ2V0IHN0YXJ0ID0+IGJvZHkuc3RhcnQ7CiAgQG92ZXJyaWRlCiAgSEJhc2ljQmxvY2sgZ2V0IGVuZCA9PgogICAgICBmaW5hbGx5QmxvY2sgPT0gbnVsbCA/IGNhdGNoQmxvY2suZW5kIDogZmluYWxseUJsb2NrLmVuZDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBhY2NlcHQoSFN0YXRlbWVudEluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSA9PgogICAgICB2aXNpdG9yLnZpc2l0VHJ5SW5mbyh0aGlzKTsKfQoKY2xhc3MgSFN3aXRjaEJsb2NrSW5mb3JtYXRpb24gaW1wbGVtZW50cyBIU3RhdGVtZW50SW5mb3JtYXRpb24gewogIGZpbmFsIEhFeHByZXNzaW9uSW5mb3JtYXRpb24gZXhwcmVzc2lvbjsKICBmaW5hbCBMaXN0PEhTdGF0ZW1lbnRJbmZvcm1hdGlvbj4gc3RhdGVtZW50czsKICBmaW5hbCBKdW1wVGFyZ2V0IHRhcmdldDsKICBmaW5hbCBMaXN0PExhYmVsRGVmaW5pdGlvbj4gbGFiZWxzOwogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uOwoKICBIU3dpdGNoQmxvY2tJbmZvcm1hdGlvbih0aGlzLmV4cHJlc3Npb24sIHRoaXMuc3RhdGVtZW50cywgdGhpcy50YXJnZXQsCiAgICAgIHRoaXMubGFiZWxzLCB0aGlzLnNvdXJjZUluZm9ybWF0aW9uKTsKCiAgQG92ZXJyaWRlCiAgSEJhc2ljQmxvY2sgZ2V0IHN0YXJ0ID0+IGV4cHJlc3Npb24uc3RhcnQ7CiAgQG92ZXJyaWRlCiAgSEJhc2ljQmxvY2sgZ2V0IGVuZCB7CiAgICAvLyBXZSBkb24ndCBjcmVhdGUgYSBzd2l0Y2ggYmxvY2sgaWYgdGhlcmUgYXJlIG5vIGNhc2VzLgogICAgYXNzZXJ0KCFzdGF0ZW1lbnRzLmlzRW1wdHkpOwogICAgcmV0dXJuIHN0YXRlbWVudHMubGFzdC5lbmQ7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGFjY2VwdChIU3RhdGVtZW50SW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpID0+CiAgICAgIHZpc2l0b3IudmlzaXRTd2l0Y2hJbmZvKHRoaXMpOwp9CgovLy8gUmVhZHMgcmF3IHJlaWZpZWQgdHlwZSBpbmZvIGZyb20gYW4gb2JqZWN0LgpjbGFzcyBIVHlwZUluZm9SZWFkUmF3IGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBIVHlwZUluZm9SZWFkUmF3KEhJbnN0cnVjdGlvbiByZWNlaXZlciwgQWJzdHJhY3RWYWx1ZSBpbnN0cnVjdGlvblR5cGUpCiAgICAgIDogc3VwZXIoPEhJbnN0cnVjdGlvbj5bcmVjZWl2ZXJdLCBpbnN0cnVjdGlvblR5cGUpIHsKICAgIHNldFVzZUd2bigpOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRUeXBlSW5mb1JlYWRSYXcodGhpcyk7CgogIEBvdmVycmlkZQogIGJvb2wgY2FuVGhyb3coQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uVFlQRV9JTkZPX1JFQURfUkFXX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IG90aGVyIGlzIEhUeXBlSW5mb1JlYWRSYXc7CgogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhIVHlwZUluZm9SZWFkUmF3IG90aGVyKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCi8vLyBSZWFkcyBhIHR5cGUgdmFyaWFibGUgZnJvbSBhbiBvYmplY3QuIFRoZSByZWFkIG1heSBiZSBhIHNpbXBsZSBpbmRleGluZyBvZgovLy8gdGhlIHR5cGUgcGFyYW1ldGVycyBvciBpdCBtYXkgcmVxdWlyZSAnc3Vic3RpdHV0aW9uJy4gVGhlcmUgbWF5IGJlIGFuCi8vLyBpbnRlcmNlcHRvciBhcmd1bWVudCB0byBhY2Nlc3MgdGhlIHN1YnN0aXR1dGlvbiBvZiBuYXRpdmUgY2xhc3Nlcy4KY2xhc3MgSFR5cGVJbmZvUmVhZFZhcmlhYmxlIGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICAvLy8gVGhlIHR5cGUgdmFyaWFibGUgYmVpbmcgcmVhZC4KICBmaW5hbCBUeXBlVmFyaWFibGVUeXBlIHZhcmlhYmxlOwogIGZpbmFsIGJvb2wgaXNJbnRlcmNlcHRlZDsKCiAgSFR5cGVJbmZvUmVhZFZhcmlhYmxlLmludGVyY2VwdGVkKHRoaXMudmFyaWFibGUsIEhJbnN0cnVjdGlvbiBpbnRlcmNlcHRvciwKICAgICAgSEluc3RydWN0aW9uIHJlY2VpdmVyLCBBYnN0cmFjdFZhbHVlIGluc3RydWN0aW9uVHlwZSkKICAgICAgOiBpc0ludGVyY2VwdGVkID0gdHJ1ZSwKICAgICAgICBzdXBlcig8SEluc3RydWN0aW9uPltpbnRlcmNlcHRvciwgcmVjZWl2ZXJdLCBpbnN0cnVjdGlvblR5cGUpIHsKICAgIHNldFVzZUd2bigpOwogIH0KCiAgSFR5cGVJbmZvUmVhZFZhcmlhYmxlLm5vSW50ZXJjZXB0b3IoCiAgICAgIHRoaXMudmFyaWFibGUsIEhJbnN0cnVjdGlvbiByZWNlaXZlciwgQWJzdHJhY3RWYWx1ZSBpbnN0cnVjdGlvblR5cGUpCiAgICAgIDogaXNJbnRlcmNlcHRlZCA9IGZhbHNlLAogICAgICAgIHN1cGVyKDxISW5zdHJ1Y3Rpb24+W3JlY2VpdmVyXSwgaW5zdHJ1Y3Rpb25UeXBlKSB7CiAgICBzZXRVc2VHdm4oKTsKICB9CgogIEhJbnN0cnVjdGlvbiBnZXQgaW50ZXJjZXB0b3IgewogICAgYXNzZXJ0KGlzSW50ZXJjZXB0ZWQpOwogICAgcmV0dXJuIGlucHV0cy5maXJzdDsKICB9CgogIEhJbnN0cnVjdGlvbiBnZXQgb2JqZWN0ID0+IGlucHV0cy5sYXN0OwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFR5cGVJbmZvUmVhZFZhcmlhYmxlKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBib29sIGNhblRocm93KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLlRZUEVfSU5GT19SRUFEX1ZBUklBQkxFX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IG90aGVyIGlzIEhUeXBlSW5mb1JlYWRWYXJpYWJsZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhUeXBlSW5mb1JlYWRWYXJpYWJsZSBvdGhlcikgewogICAgcmV0dXJuIHZhcmlhYmxlID09IG90aGVyLnZhcmlhYmxlOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0hUeXBlSW5mb1JlYWRWYXJpYWJsZSgkdmFyaWFibGUpJzsKfQoKZW51bSBUeXBlSW5mb0V4cHJlc3Npb25LaW5kIHsgQ09NUExFVEUsIElOU1RBTkNFIH0KCi8vLyBDb25zdHJ1Y3RzIGEgcmVwcmVzZW50YXRpb24gb2YgYSBjbG9zZWQgb3IgZ3JvdW5kLXRlcm0gdHlwZSAodGhhdCBpcywgYSB0eXBlCi8vLyB3aXRob3V0IHR5cGUgdmFyaWFibGVzKS4KLy8vCi8vLyBUaGVyZSBhcmUgdHdvIGZvcm1zOgovLy8KLy8vIC0gQ09NUExFVEU6IEEgY29tcGxldGUgZm9ybSB0aGF0IGlzIHNlbGYgY29udGFpbmVkLCB1c2VkIGZvciB0aGUgdmFsdWVzIG9mCi8vLyAgIHR5cGUgcGFyYW1ldGVycyBhbmQgbm9uLXJhdyBpcy1jaGVja3MuCi8vLwovLy8gLSBJTlNUQU5DRTogQSBoZWFkbGVzcyBmbGF0IGZvcm0gZm9yIHJlcHJlc2VudGluZyB0aGUgc2VxdWVuY2Ugb2YgdmFsdWVzIG9mCi8vLyAgIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgYW4gaW5zdGFuY2Ugb2YgYSBnZW5lcmljIHR5cGUuCi8vLwovLy8gVGhlIENPTVBMRVRFIGZvcm0gdmFsdWUgaXMgY29uc3RydWN0ZWQgZnJvbSBbZGFydFR5cGVdIGJ5IHJlcGxhY2luZyB0aGUgdHlwZQovLy8gdmFyaWFibGVzIHdpdGggY29uc2VjdXRpdmUgdmFsdWVzIGZyb20gW2lucHV0c10sIGluIHRoZSBvcmRlciBnZW5lcmF0ZWQgYnkKLy8vIFtEYXJ0VHlwZS5mb3JFYWNoVHlwZVZhcmlhYmxlXS4gIFRoZSB0eXBlIHZhcmlhYmxlcyBpbiBbZGFydFR5cGVdIGFyZQovLy8gdHJlYXRlZCBhcyAnaG9sZXMnIGluIHRoZSB0ZXJtLCB3aGljaCBtZWFucyB0aGF0IGl0IG11c3QgYmUgZW5zdXJlZCBhdAovLy8gY29uc3RydWN0aW9uLCB0aGF0IGR1cGxpY2F0ZSBvY2N1cmVuY2VzIG9mIGEgdHlwZSB2YXJpYWJsZSBpbiBbZGFydFR5cGVdIGFyZQovLy8gYXNzaWduZWQgdGhlIHNhbWUgdmFsdWUuCi8vLwovLy8gVGhlIElOU1RBTkNFIGZvcm0gaXMgY29uc3RydWN0ZWQgYXMgYSBsaXN0IG9mIFtpbnB1dHNdLiBUaGlzIGlzIHRoZSBzYW1lIGFzCi8vLyB0aGUgQ09NUExFVEUgZm9ybSBmb3IgdGhlICd0aGlzVHlwZScsIGV4Y2VwdCB0aGUgcm9vdCB0ZXJtJ3MgdHlwZSBpcwovLy8gbWlzc2luZzsgdGhpcyBpcyBpbXBsaWNpdCBhcyB0aGUgcmF3IHR5cGUgb2YgaW5zdGFuY2UuICBUaGUgW2RhcnRUeXBlXSBvZgovLy8gdGhlIElOU1RBTkNFIGZvcm0gbXVzdCBiZSB0aGUgdGhpc1R5cGUgb2Ygc29tZSBjbGFzcy4KLy8vCi8vLyBXZSB3YW50IHRvIHJlbW92ZSB0aGUgY29uc3RyYWlucyBvbiB0aGUgSU5TVEFOQ0UgZm9ybS4gSW4gdGhlIG1lYW50aW1lIHdlCi8vLyBnZXQgYnkgd2l0aCBhIHRyZWUgb2YgVHlwZUV4cHJlc3Npb25zLiAgQ29uc2lkZXI6Ci8vLwovLy8gICAgIGNsYXNzIEZvbzxUPiB7Ci8vLyAgICAgICAuLi4gbmV3IFNldDxMaXN0PFQ+PigpCi8vLyAgICAgfQovLy8gICAgIGNsYXNzIFNldDxFMT4gewovLy8gICAgICAgZmFjdG9yeSBTZXQoKSA9PiBuZXcgX0xpbmtlZEhhc2hTZXQ8RTE+KCk7Ci8vLyAgICAgfQovLy8gICAgIGNsYXNzIExpc3Q8RTI+IHsgLi4uIH0KLy8vICAgICBjbGFzcyBfTGlua2VkSGFzaFNldDxFMz4geyAuLi4gfQovLy8KLy8vIEFmdGVyIGlubGluaW5nIHRoZSBmYWN0b3J5IGNvbnN0cnVjdG9yIGZvciBgU2V0PEUxPmAsIHRoZSBIQ3JlYXRlIHNob3VsZAovLy8gaGF2ZSB0eXBlIGBfTGlua2VkSGFzaFNldDxMaXN0PFQ+PmAgYW5kIHRoZSBUeXBlRXhwcmVzc2lvbiBzaG91bGQgYmUgYSB0cmVlOgovLy8KLy8vICAgIEhDcmVhdGUoZGFydFR5cGU6IF9MaW5rZWRIYXNoU2V0PExpc3Q8VD4+LAovLy8gICAgICAgIFtdLCAvLyBObyBhcmd1bWVudHMKLy8vICAgICAgICBIVHlwZUluZm9FeHByZXNzaW9uKElOU1RBTkNFLAovLy8gICAgICAgICAgICBkYXJ0VHlwZTogX0xpbmtlZEhhc2hTZXQ8RTM+LCAvLyBfTGlua2VkSGFzaFNldCdzIHRoaXNUeXBlCi8vLyAgICAgICAgICAgIEhUeXBlSW5mb0V4cHJlc3Npb24oQ09NUExFVEUsICAvLyBFMyA9IExpc3Q8VD4KLy8vICAgICAgICAgICAgICAgIGRhcnRUeXBlOiBMaXN0PEUyPiwKLy8vICAgICAgICAgICAgICAgIEhUeXBlSW5mb1JlYWRWYXJpYWJsZSh0aGlzLCBUKSkpKSAvLyBFMiA9IFQKCi8vIFRPRE8oc3JhKTogVGhlIElOU1RBTkNFIGZvcm0gcmVxdWlyZXMgdGhlIGFjdHVhbCBpbnN0YW5jZSBmb3IgZnVsbAovLyBpbnRlcnByZXRhdGlvbi4gSWYgdGhlIENPTVBMRVRFIGZvcm0gd2FzIHVzZWQgb24gaW5zdGFuY2VzLCB0aGVuIHdlIGNvdWxkCi8vIHNpbXBsaWZ5IEhUeXBlSW5mb1JlYWRWYXJpYWJsZSB3aXRob3V0IGFuIG9iamVjdC4KCmNsYXNzIEhUeXBlSW5mb0V4cHJlc3Npb24gZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIGZpbmFsIFR5cGVJbmZvRXhwcmVzc2lvbktpbmQga2luZDsKICBmaW5hbCBEYXJ0VHlwZSBkYXJ0VHlwZTsKCiAgLy8vIGB0cnVlYCBpZiB0aGlzCiAgZmluYWwgYm9vbCBpc1R5cGVWYXJpYWJsZVJlcGxhY2VtZW50OwoKICBIVHlwZUluZm9FeHByZXNzaW9uKHRoaXMua2luZCwgdGhpcy5kYXJ0VHlwZSwgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cywKICAgICAgQWJzdHJhY3RWYWx1ZSBpbnN0cnVjdGlvblR5cGUsCiAgICAgIHt0aGlzLmlzVHlwZVZhcmlhYmxlUmVwbGFjZW1lbnQ6IGZhbHNlfSkKICAgICAgOiBzdXBlcihpbnB1dHMsIGluc3RydWN0aW9uVHlwZSkgewogICAgc2V0VXNlR3ZuKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFR5cGVJbmZvRXhwcmVzc2lvbih0aGlzKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5UaHJvdyhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5UWVBFX0lORk9fRVhQUkVTU0lPTl9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiBvdGhlciBpcyBIVHlwZUluZm9FeHByZXNzaW9uOwoKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSFR5cGVJbmZvRXhwcmVzc2lvbiBvdGhlcikgewogICAgcmV0dXJuIGtpbmQgPT0gb3RoZXIua2luZCAmJiBkYXJ0VHlwZSA9PSBvdGhlci5kYXJ0VHlwZTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdIVHlwZUluZm9FeHByZXNzaW9uKCRraW5kQXNTdHJpbmcsICRkYXJ0VHlwZSknOwoKICAvLyBpZ25vcmU6IE1JU1NJTkdfUkVUVVJOCiAgU3RyaW5nIGdldCBraW5kQXNTdHJpbmcgewogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgVHlwZUluZm9FeHByZXNzaW9uS2luZC5DT01QTEVURToKICAgICAgICByZXR1cm4gJ0NPTVBMRVRFJzsKICAgICAgY2FzZSBUeXBlSW5mb0V4cHJlc3Npb25LaW5kLklOU1RBTkNFOgogICAgICAgIHJldHVybiAnSU5TVEFOQ0UnOwogICAgfQogIH0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vLyBJcy10ZXN0IHVzaW5nIFJ0aSBmb3JtIG9mIHR5cGUgZXhwcmVzc2lvbi4KLy8vCi8vLyBUaGlzIGluc3RydWN0aW9uIGNhbiBiZSB1c2VkIGZvciBhbnkgdHlwZS4gVGVzdHMgZm9yIHNpbXBsZSB0eXBlcyBhcmUKLy8vIGxvd2VyZWQgdG8gb3RoZXIgaW5zdHJ1Y3Rpb25zLCBzbyB0aGlzIGluc3RydWN0aW9uIHJlbWFpbnMgZm9yIHR5cGVzIHRoYXQKLy8vIGRlcGVuZCBvbiB0eXBlIHZhcmlhYmxlcyBhbmQgY29tcGxleCB0eXBlcy4KY2xhc3MgSElzVGVzdCBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgZmluYWwgQWJzdHJhY3RWYWx1ZVdpdGhQcmVjaXNpb24gY2hlY2tlZEFic3RyYWN0VmFsdWU7CiAgZmluYWwgRGFydFR5cGUgZGFydFR5cGU7CgogIEhJc1Rlc3QodGhpcy5kYXJ0VHlwZSwgdGhpcy5jaGVja2VkQWJzdHJhY3RWYWx1ZSwgSEluc3RydWN0aW9uIGNoZWNrZWQsCiAgICAgIEhJbnN0cnVjdGlvbiBydGksIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcihbcnRpLCBjaGVja2VkXSwgdHlwZSkgewogICAgc2V0VXNlR3ZuKCk7CiAgfQoKICAvLyBUaGUgdHlwZSBpbnB1dCBpcyBmaXJzdCB0byBmYWNpbGl0YXRlIHRoZSBgdHlwZS5pcyh2YWx1ZSlgIGNvZGVnZW4gcGF0dGVybi4KICBISW5zdHJ1Y3Rpb24gZ2V0IHR5cGVJbnB1dCA9PiBpbnB1dHNbMF07CiAgSEluc3RydWN0aW9uIGdldCBjaGVja2VkSW5wdXQgPT4gaW5wdXRzWzFdOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdElzVGVzdCh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLklTX1RFU1RfVFlQRUNPREU7CgogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IG90aGVyIGlzIEhJc1Rlc3Q7CgogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISXNUZXN0IG90aGVyKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnSElzVGVzdCgpJzsKfQoKLy8vIFR5cGUgY2FzdCBvciB0eXBlIGNoZWNrIHVzaW5nIFJ0aSBmb3JtIG9mIHR5cGUgZXhwcmVzc2lvbi4KY2xhc3MgSEFzQ2hlY2sgZXh0ZW5kcyBIQ2hlY2sgewogIGZpbmFsIEFic3RyYWN0VmFsdWVXaXRoUHJlY2lzaW9uIGNoZWNrZWRUeXBlOwogIGZpbmFsIERhcnRUeXBlIGNoZWNrZWRUeXBlRXhwcmVzc2lvbjsKICBmaW5hbCBib29sIGlzVHlwZUVycm9yOwoKICBIQXNDaGVjaygKICAgICAgSEluc3RydWN0aW9uIGNoZWNrZWQsCiAgICAgIEhJbnN0cnVjdGlvbiBydGksCiAgICAgIHRoaXMuY2hlY2tlZFR5cGUsCiAgICAgIHRoaXMuY2hlY2tlZFR5cGVFeHByZXNzaW9uLAogICAgICB0aGlzLmlzVHlwZUVycm9yLAogICAgICBBYnN0cmFjdFZhbHVlIGluc3RydWN0aW9uVHlwZSkKICAgICAgOiBhc3NlcnQoaXNUeXBlRXJyb3IgIT0gbnVsbCksCiAgICAgICAgc3VwZXIoW3J0aSwgY2hlY2tlZF0sIGluc3RydWN0aW9uVHlwZSk7CgogIC8vIFRoZSB0eXBlIGlucHV0IGlzIGZpcnN0IHRvIGZhY2lsaXRhdGUgdGhlIGB0eXBlLmFzKHZhbHVlKWAgY29kZWdlbiBwYXR0ZXJuLgogIEhJbnN0cnVjdGlvbiBnZXQgdHlwZUlucHV0ID0+IGlucHV0c1swXTsKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gZ2V0IGNoZWNrZWRJbnB1dCA9PiBpbnB1dHNbMV07CgogIEBvdmVycmlkZQogIGJvb2wgaXNKc1N0YXRlbWVudCgpID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEFzQ2hlY2sodGhpcyk7CgogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5BU19DSEVDS19UWVBFQ09ERTsKCiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gb3RoZXIgaXMgSEFzQ2hlY2s7CgogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhIQXNDaGVjayBvdGhlcikgewogICAgcmV0dXJuIGlzVHlwZUVycm9yID09IG90aGVyLmlzVHlwZUVycm9yOwogIH0KCiAgYm9vbCBpc1JlZHVuZGFudChKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmICghY2hlY2tlZFR5cGUuaXNQcmVjaXNlKSByZXR1cm4gZmFsc2U7CiAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4gPSBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwogICAgQWJzdHJhY3RWYWx1ZSBpbnB1dFR5cGUgPSBjaGVja2VkSW5wdXQuaW5zdHJ1Y3Rpb25UeXBlOwogICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAuaXNJbihpbnB1dFR5cGUsIGNoZWNrZWRUeXBlLmFic3RyYWN0VmFsdWUpCiAgICAgICAgLmlzRGVmaW5pdGVseVRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmcgZXJyb3IgPSBpc1R5cGVFcnJvciA/ICdUeXBlRXJyb3InIDogJ0Nhc3RFcnJvcic7CiAgICByZXR1cm4gJ0hBc0NoZWNrKCRlcnJvciknOwogIH0KfQoKLy8vIFR5cGUgY2FzdCBvciB0eXBlIGNoZWNrIGZvciBzaW1wbGUga25vd24gdHlwZXMgdGhhdCBhcmUgYWNoaWV2ZWQgdmlhIGEKLy8vIHNpbXBsZSBzdGF0aWMgY2FsbC4KY2xhc3MgSEFzQ2hlY2tTaW1wbGUgZXh0ZW5kcyBIQ2hlY2sgewogIGZpbmFsIERhcnRUeXBlIGRhcnRUeXBlOwogIGZpbmFsIEFic3RyYWN0VmFsdWVXaXRoUHJlY2lzaW9uIGNoZWNrZWRUeXBlOwogIGZpbmFsIGJvb2wgaXNUeXBlRXJyb3I7CiAgZmluYWwgTWVtYmVyRW50aXR5IG1ldGhvZDsKCiAgSEFzQ2hlY2tTaW1wbGUoSEluc3RydWN0aW9uIGNoZWNrZWQsIHRoaXMuZGFydFR5cGUsIHRoaXMuY2hlY2tlZFR5cGUsCiAgICAgIHRoaXMuaXNUeXBlRXJyb3IsIHRoaXMubWV0aG9kLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogYXNzZXJ0KGlzVHlwZUVycm9yICE9IG51bGwpLAogICAgICAgIHN1cGVyKFtjaGVja2VkXSwgdHlwZSk7CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBnZXQgY2hlY2tlZElucHV0ID0+IGlucHV0c1swXTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0pzU3RhdGVtZW50KCkgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0QXNDaGVja1NpbXBsZSh0aGlzKTsKCiAgYm9vbCBpc1JlZHVuZGFudChKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmICghY2hlY2tlZFR5cGUuaXNQcmVjaXNlKSByZXR1cm4gZmFsc2U7CiAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4gPSBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwogICAgQWJzdHJhY3RWYWx1ZSBpbnB1dFR5cGUgPSBjaGVja2VkSW5wdXQuaW5zdHJ1Y3Rpb25UeXBlOwogICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAuaXNJbihpbnB1dFR5cGUsIGNoZWNrZWRUeXBlLmFic3RyYWN0VmFsdWUpCiAgICAgICAgLmlzRGVmaW5pdGVseVRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uQVNfQ0hFQ0tfU0lNUExFX1RZUEVDT0RFOwoKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiBvdGhlciBpcyBIQXNDaGVja1NpbXBsZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhBc0NoZWNrU2ltcGxlIG90aGVyKSB7CiAgICByZXR1cm4gaXNUeXBlRXJyb3IgPT0gb3RoZXIuaXNUeXBlRXJyb3IgJiYgZGFydFR5cGUgPT0gb3RoZXIuZGFydFR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmcgZXJyb3IgPSBpc1R5cGVFcnJvciA/ICdUeXBlRXJyb3InIDogJ0Nhc3RFcnJvcic7CiAgICByZXR1cm4gJ0hBc0NoZWNrKCRlcnJvciknOwogIH0KfQoKLy8vIFN1YnR5cGUgY2hlY2sgY29tcGFyaW5nIHR3byBSdGkgdHlwZXMuCmNsYXNzIEhTdWJ0eXBlQ2hlY2sgZXh0ZW5kcyBIQ2hlY2sgewogIEhTdWJ0eXBlQ2hlY2soCiAgICAgIEhJbnN0cnVjdGlvbiBzdWJ0eXBlLCBISW5zdHJ1Y3Rpb24gc3VwZXJ0eXBlLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIoW3N1YnR5cGUsIHN1cGVydHlwZV0sIHR5cGUpIHsKICAgIHNldFVzZUd2bigpOwogIH0KCiAgSEluc3RydWN0aW9uIGdldCB0eXBlSW5wdXQgPT4gaW5wdXRzWzFdOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFN1YnR5cGVDaGVjayh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLlNVQlRZUEVfQ0hFQ0tfVFlQRUNPREU7CgogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IG90aGVyIGlzIEhTdWJ0eXBlQ2hlY2s7CgogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhIU3VidHlwZUNoZWNrIG90aGVyKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnSFN1YnR5cGVDaGVjaygpJzsKfQoKLy8vIENvbW1vbiBzdXBlcmNsYXNzIGZvciBpbnN0cnVjdGlvbnMgdGhhdCBnZW5lcmF0ZSBSdGkgdmFsdWVzLgphYnN0cmFjdCBjbGFzcyBIUnRpSW5zdHJ1Y3Rpb24gZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIEhSdGlJbnN0cnVjdGlvbihMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIoaW5wdXRzLCB0eXBlKTsKfQoKLy8vIEV2YWx1YXRlcyBhbiBSdGkgdHlwZSByZWNpcGUgaW4gdGhlIGdsb2JhbCBlbnZpcm9ubWVudC4KY2xhc3MgSExvYWRUeXBlIGV4dGVuZHMgSFJ0aUluc3RydWN0aW9uIHsKICBEYXJ0VHlwZSB0eXBlRXhwcmVzc2lvbjsgLy8gVE9ETyhzcmEpOiBBbGxvdyBhIHR5cGUgZW52aXJvbm1lbnQgZXhwcmVzc2lvbi4KCiAgSExvYWRUeXBlKHRoaXMudHlwZUV4cHJlc3Npb24sIEFic3RyYWN0VmFsdWUgdHlwZSkgOiBzdXBlcihbXSwgdHlwZSkgewogICAgc2V0VXNlR3ZuKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdExvYWRUeXBlKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uTE9BRF9UWVBFX1RZUEVDT0RFOwoKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiBvdGhlciBpcyBITG9hZFR5cGU7CgogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhITG9hZFR5cGUgb3RoZXIpIHsKICAgIHJldHVybiB0eXBlRXhwcmVzc2lvbiA9PSBvdGhlci50eXBlRXhwcmVzc2lvbjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdITG9hZFR5cGUoJHR5cGVFeHByZXNzaW9uKSc7Cn0KCi8vLyBUaGUgcmVpZmllZCBSdGkgZW52aXJvbm1lbnQgc3RvcmVkIG9uIGEgY2xhc3MgaW5zdGFuY2UuCi8vLwovLy8gQ2xhc3NlcyB3aXRoIHJlaWZpZWQgdHlwZSBhcmd1bWVudHMgaGF2ZSB0aGUgdHlwZSBlbnZpcm9ubWVudCBzdG9yZWQgb24gdGhlCi8vLyBpbnN0YW5jZS4gVGhlIHJlaWZpZWQgZW52aXJvbm1lbnQgaXMgdHlwaWNhbGx5IHN0b3JlZCBhcyB0aGUgaW5zdGFuY2UgdHlwZSwKLy8vIGUuZy4gIlVubW9kaWZpYWJsZUxpc3RWaWV3PGludD4iLgpjbGFzcyBISW5zdGFuY2VFbnZpcm9ubWVudCBleHRlbmRzIEhSdGlJbnN0cnVjdGlvbiB7CiAgSEluc3RhbmNlRW52aXJvbm1lbnQoSEluc3RydWN0aW9uIGluc3RhbmNlLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIoW2luc3RhbmNlXSwgdHlwZSkgewogICAgc2V0VXNlR3ZuKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEluc3RhbmNlRW52aXJvbm1lbnQodGhpcyk7CgogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5JTlNUQU5DRV9FTlZJUk9OTUVOVF9UWVBFQ09ERTsKCiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gb3RoZXIgaXMgSEluc3RhbmNlRW52aXJvbm1lbnQ7CgogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISW5zdGFuY2VFbnZpcm9ubWVudCBvdGhlcikgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0hJbnN0YW5jZUVudmlyb25tZW50KCknOwp9CgovLy8gRXZhbHVhdGVzIGFuIFJ0aSB0eXBlIHJlY2lwZSBpbiBhbiBSdGkgZW52aXJvbm1lbnQuCmNsYXNzIEhUeXBlRXZhbCBleHRlbmRzIEhSdGlJbnN0cnVjdGlvbiB7CiAgVHlwZUVudmlyb25tZW50U3RydWN0dXJlIGVudlN0cnVjdHVyZTsKICBUeXBlUmVjaXBlIHR5cGVFeHByZXNzaW9uOwoKICBIVHlwZUV2YWwoSEluc3RydWN0aW9uIGVudmlyb25tZW50LCB0aGlzLmVudlN0cnVjdHVyZSwgdGhpcy50eXBlRXhwcmVzc2lvbiwKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKFtlbnZpcm9ubWVudF0sIHR5cGUpIHsKICAgIHNldFVzZUd2bigpOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRUeXBlRXZhbCh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLlRZUEVfRVZBTF9UWVBFQ09ERTsKCiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gb3RoZXIgaXMgSFR5cGVFdmFsOwoKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSFR5cGVFdmFsIG90aGVyKSB7CiAgICByZXR1cm4gVHlwZVJlY2lwZS55aWVsZHNTYW1lVHlwZSgKICAgICAgICB0eXBlRXhwcmVzc2lvbiwgZW52U3RydWN0dXJlLCBvdGhlci50eXBlRXhwcmVzc2lvbiwgb3RoZXIuZW52U3RydWN0dXJlKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdIVHlwZUV2YWwoJHR5cGVFeHByZXNzaW9uKSc7Cn0KCi8vLyBFeHRlbmRzIGFuIFJ0aSB0eXBlIGVudmlyb25tZW50IHdpdGggZ2VuZXJpYyBmdW5jdGlvbiB0eXBlcy4KY2xhc3MgSFR5cGVCaW5kIGV4dGVuZHMgSFJ0aUluc3RydWN0aW9uIHsKICBIVHlwZUJpbmQoCiAgICAgIEhJbnN0cnVjdGlvbiBlbnZpcm9ubWVudCwgSEluc3RydWN0aW9uIHR5cGVBcmd1bWVudHMsIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcihbZW52aXJvbm1lbnQsIHR5cGVBcmd1bWVudHNdLCB0eXBlKSB7CiAgICBzZXRVc2VHdm4oKTsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0VHlwZUJpbmQodGhpcyk7CgogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5UWVBFX0JJTkRfVFlQRUNPREU7CgogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IG90aGVyIGlzIEhUeXBlQmluZDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhUeXBlQmluZCBvdGhlcikgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0hUeXBlQmluZCgpJzsKfQqSEgBOTjwBRAEaGT8jJCEhMSgeUSIyORwqKxgBHRkZHR8fHR8pHSMjHyUfGyEjIyklGyErIxcdKSktOTk5Kyk9ORczJScbJSkjIycnIx8ZNy8ZMTEZJR8lJx8pKyUjHxsdMTMZLy8vJR0BMTs3ASMfIS0rIzkjIwIBHyUiB0IlNTo7Dw02ASUfFQEiARwnHzIhMjQZJhIIHgYEASkhB0I1PzsPJQ02ASUfNgEcJx8XITI4OhIIHh4GBAEmAgEPGQ8VDRkCATscAScBDCY3LSQnKCsIBgEZIAQCAQ89LhUUGQFJDyIBThUdAVAtIh0BNAFRTklJAScBRDpRAQ0bQyceBAElHBMXKgQBHiwWEwQBJTkoSxMEAUovLE8aIkguCDs2NjEfJCcsHwYTBAFGRy4vBAE+SgQBSBhGFgQBREYEAUZIBAFQGEMEAURIBAE4QwQBP08iRwQBLhQRIxgEARxDQig/JTsiNg89OAoIBh0EASFQT0oeJRkVARcsARwnHzIhMjQZMhIIKR4GBAETLSAeBAEMJAIBPxwBDCYZASsiICYGBAEwAUxCN0NAUUFNQUFAAQwxDDYMNww3DDUMNww7DC4MNDUMOww3DD0MPAwzDDkMOww7DEEMPQwzDDgMQgw6DDUMNQxBDEEMRww9Hww5Hww5IAw5JQw5JQw+DEIzDD8MMgw8DEFBDDsMOww/DEUMNwwxDFEMMQxADEYMQwxJDDIMQgw3DD0MPwxADDcMNwxBDEMMPQw2DDUMSQxQDDEMLww9DEsMQQxBDEEMNww1DDUBDEkMOx4BDE8BDDcMMww/DD0MOwxRDDsMOwIBETAbGQEoASUbGRs3BAIBJ08BSykiThEEAgEZHRwBFRoEAUkaFyIqHyMaDSUmKiEGBAFKGhciKyQgGw0hLiolBgQBKjYqKCANNAYkIw04BiEdBAEqKBkEAScsIR03HAYBEgQBTTcGUU1FPyETHQ8kNxwGARIEAgEtQy4KASMkJhsBGQErHycWASggASArFhcBJR4nKCwrAQwaASgqLgEYJAQBTTkEARtHASglHQQBEBUaBAEhFhkcBAEuIisqBAEtGCIiKioEAS4iKhgiKh4XBAEnKiIpKgQBGlAfKyIEAR0WHyIEAUEdIiQrKgQBQh0iJCwqBAEMKiQiHycqBAEpHhwNHQYiBAEhHD4zRTQGBAFEGzUsIgYjGQQBRkc4Q00wKzUbJicIBgEyAQgtJSUqIhcKCCMbBhkEARc1BAEuGCwwS09DKEQPBisiDSwGJRwEATEYLDAYLyQNNQYuHAQBOBgdRS0rMEdGJCYoKyUlESUKMggrLigIBgQBJh8eKRIXBgQBPiIeKRIXBgQBExgtJR4EASY6NwQBDCQCATMYJwEQGAEjIwEVIBwBNRgBESwsLi8tJSgqKiwpKiopKiYrKjAnLSkvLDItMCglMS4BNDUBNTo3AS8sLSYyMgEqKzIwLDcsLAEyGiQ/BAEMGgEcFRQEASIBR0QNLCwtGwQBT1FGOgE/JSMBKDYBNiEBLjABNSYBPCcBOisBQDEBQTIBPzABQzQBOywBQDEBPS4BQTIBNicBQDEBOCkBNygBNygBQDEBRjcBPi8BNygBPS4BNygBPS4BOCkBPi8BNygBPS4BQDEBHyEBIUIhASoBJyg2Kj0kOCQsOTotSRYIBjceBAEWHSAnSgYTBAE+LDU6OgEcATUfGycuKiIGGRcEASIeHAEsLiIGFxcEAUVGOi42BgQBPEseDxkkJBIPDQgGGgQBNyciBAFBOEFALiweIwgGKwQBIzpABAEoIxscGDAZBAEeJSIkJSQiISMiATkBEy0kJh4EASkBIQEnMSVDASYeKR4GEgQBUCMbPkMSIjQlIkQyLVEGIkJBDSo+OVAGBAFBHzFJBAEMMAIBQxYeAU4ZPSYBIQE+BkFFEwZJUVAtR0gnSwQBLSMqATsyMRk1LB84Di4vQysqJwYEATUBMwE8ATQdHgQBPThQOTo5IQEyAU9JTkkyKDA0HEw7IUlLRDg1NTchDAoIBgFROkMjUCExCggGAVAWIzMvJ0chMQogCB4hCAYBPicgMCMcCggGBAIBTgRDIkAwMAQBJwEMUEkpLCEXBAEMNgEMKQIBUTs3Qh0CAUVIRUEYLS8RBC4MIAw1AQw2AgEkJSMqLCQBSEAhASs7ASgnJ01FSwwgAQw+DDgMMwwvAgE5TB8rNTYCATNGTk0hKQwgDCACASolHQFNGgFQS01PKQFPGR0BRytKHjAEAQw5AR4ZGAQBDDkBDEICATcoQgEMOQEMPAEMJwIBLh4BSk0iIgE/JCUpBCkBDDUBDEIBIxsEAgEwLgwVHy0YAUZPIjQkQzAkIyMnBAEzARtGFEgEAQxRASoBDDtFBAE8JAE9N0UEAQw6AQw1AQwqQkRAMy4EAgEuDCYBQE9JJE4gBAxAAgE0DCYBGBkiISAaKyNRME4EAQwXRwxGAgE8FxkiHCEaIA9RAQwXRgIBORgZIhwhGiArRhowBAEMRgE/AQw6AVEMOTUgAQwXRwIBOUooGwEYGSIcIRpPDyArRhowBAEMRgEMOgEMF1kCASYeATsmAR0BDD8BSkdNTykBKk4+HicEAQw/AQw5AQwyAgErNxwXDBsBEBwTFSEaGiQrFzQsMAQBKgw7RQQBPTdFBAEMKgw+ARsWTRgEAgE1FigyGiUhGis7MAQBDEMMSAIBM1E4Fh4oMktISj87MAQBDEAMRgIBMx0BTB0BKgIBJxsBTCsbHEo5MCcoER03BgQBDDEtRUUUJispOQYSBAEMLzEBDEYMICsBDDsBDDUMMAxADEsCASc9MUwnKC4EAQwvMQEMRgwgAScMOwEyDCoBDEsCASgbOCAwIicoER03BgQBLgEMLzEBDEYMIAEMPAEMNgwxDC0MJgIBTzsyHhscHRUUATs1HicoLjUEAT5HEFABOzFHATwxSAEqASgqLgEMLzEBDEYMIAEnDEIBDCYMQQIBMxgBTR0BKgIBJz4NQys3MAQBDDsBJgIBJ0saSQEMOwEmJwwgAgEvUQEhLQEMLk0EAgEmIgwaDCclKAFRIBslKR0uLB4iNSwGJjQkKgYoATM7EwYEAU5OKR8eLQEMPgEMJwwuHTsjLgYjBAEMPAEMMyAlKAEMOAwzDCgqOgQBDEECATQMGxFQMycoEQQBJicBLwIBOU4aLAwvAgEnQRosDDYBDEYMLwwrDC8CASpEGiwMOQEMSQwyDC4MLwIBLEYaLAw7AQxLDDQMMAwvAgEsRhosDDsBDEsMNAwwDC8CATROGiwMQwEMMSgMPQw4DC8CAS1HGiwMPAEMTAw1DDEMLwIBPD1HJUEfATYsAURFHDoBDDkBDDICATRJGiwCAShHGiwMPAEMTAw2DDEMLwIBKUgaLAw9AQxNDDcMMgwvAgEkQxosDDgBDEgMMgwtDC8CASVEGiwMOQEMSQwzDC4MLwIBJUQaLAw5AQxJDDMMLgwvAgEzDBs4LScoEQQBKQEuAgElRSYMOQEMSAwyDC4MLwIBIkImDDYBDEUMLwwrDC8CASVFJgw5AQxIDDMMLgwvAgEjTQwYDDcCASNNDBgMNwIBLBsfMSsWMDAEQysXHzAwBAIBHU5FQCYBOCsyMgFEKyk5AQxPAQw4AgEgOysyAUcrOQEMF0QBDDsCASIZGhxMDBcMNjsCAUVGPD8MJlAMHAw6OwIBJyY6MgwWDDUBHkYgBAEeRiAEAT4CAS8tJgESQioyDB8MPQIBJyBALwEMOww7AQwdDC8MLAwtDC4MMAwsDCoMLgwsAQxKAS0MKAEMHj9DMCMiBAIBIi8tEQQBDDYMLwwrDC8CAUdKTykzKB4EAQwvDD0CASxQAUxHSxooKkAGEgQBDDMMQQIBJkcBDDYBDDYhBAEMNwEMKAEMMSc7BAEMHwIBIiwbGgE1AUNNT0YeHgQ0MEs1USYBJh4XOBwEAQwbDDYCATMpUQIBJh4yAU8MOwEMSww0DDAMLwIBJU4MOgEMSgwzDC8MLwIBKi0sDD8BDE8MOQw0DC8CASJLDDcBDEcMMAwsDC8CASdQDDwBDEwMNgwxDC8CASU6Ky8wBAwaDDkCAS5DKzkwBAwkDEIMNQIBJDEsDBkMOD8MNQwvAgEkRys5MAQQDBkMOAw2DC8CASQYOSsfLzAEDBkMOAIBTlEYJR4BUSgdJyggNQYRMAQMKgw5AQw/DDIMLgw+DDkCASo/JycBOgFMTEQFLwUBOjA5JygRBAEMPQw+KgFDQEAvGgQBDDgBDDcMMwwoPUlHBAIBREc3BEZFITMMICcBFyIZIiEgGh9IJDpOBAw+AQwXRgxFAgFLKR0BD00oSx4lKTAEAQwvDD0BDBgoDCkMNQIBKhhNOScoLAQMMAw+ASsBDDgMMwxDDCoCASo+HQwgDD4BDDkCAUc+JAwbQxo3JygqEQQBDCkMOAEqJwFCPAwfAQxGDCAMLzEBDDEMOgwpAgFJPioMG0I9SicoIwQMMAw+ASonJwFCPAwfAQxGDCAMLzECAT8hOCIBUScBOCcBIRIcAT8/F08BQUM/F04iARMfHyAaLUlOSk45Ry0EARAfHxkaK1AgARAfHxkaK1AgAUo/KB45ETAEASwBIR8xBAEfPhYEASw2NgEMNQEMMgEMLgEMNwEMH0kEAgFOTSQzIRVJMxEEAS0BDEMMMww+DEUMHzMEAgFNFgRQS041LE0BLAEMPAwnAgFLJxgjIwEhEgFAEEsBRj8cLUEuMAQBSU8cQScpBAEjJSobBAE0AQw3AQxQIhMGNwQBLi4BDEEBDCsMIQEMOwxDDCkBDCshMioEAS9PJBghFggdMUkXCkQWCB4xSRcKFgghMUkXCkQWCAZJShQGPE4EAQxMTyUCAVAhBExOTTAnGCwsASESAVBRRwUtBSwBQBBLAUY/KBwtSC4wBAEMUCITBjcEAT8/AQxBAQwgDCABDDsMQwwpAQwrISxGBAEvT0lKFAY8TgQBDFAlAgFQTkAEUE4tJzosAQwhAQwpAQxBAQw7DEMMMgEvTzwfKhsEAQwyAgFEIhsZAUEkITEBGEkkIDoBDCgMPAEMIQwhDDYBKwFFAQw2DD4MKAwwAQwmKzIEAS9PSBQGPEwEAgEoLS0pBAEMHwEMQgIBK0szTVEUKQQBJicBDD8MIQIBUBkoOzMlKQQBDDwMHQIBORkcIiUmGwE0LgE6Ki0BLiA+CTQkIgQBRxJCKjcrJScjDScZLAYEAgFLSkszEyAiLAIBMiMZFzECATJBDDUCATRCDDYoAgEuPTIuMDY+QUI6AgEvNEQCAShOAUUpQxssAQwrDCcBDDcnAgFKMUklNgEMMAwsAQxNAQw4LAIBJ0cwMgEMMAwuAQw3JwIBQiQmGxkBRCAeKAE8IDEBDCcMIwEMNysCAT8jISYkLSQBEiwqJCgbJi0BUEgMUAQBDBo3IRkGHAQBH0EEAQwYLTYcBhUEAQw3IwIBPSopKUcBDCwMTAEMNyECAUEUJSY9AQwnDCQBNAwpEQQBDDgkAgE+JCMqLBhKAQwnDBlAAQw3IgIBQSswGyYtAUksAQwtDBg9ISAEAQw3JQIBMC5JOxEEAQxCAQw2AQw+DEQBDCwRBAIBT0pHMyQjHAFNPB5IEQQBJ0sfOxEEASEbGQQBKgEMRwEMNgEMQwxJAQwxJwQBDDsCATMBUR0EGQRPLQRQPARRT0pLUR0EUElOOgRONgQXIQoYNQofKQRNUQQyHylKPic/AUZNNQExJRsBFSgBSyUvKREEAQxFAQw2AQxADEcBDC89BAEMSAEcHBQsGywbBgQCAVEBLwRKTjAlORsBSiwmEQQBUSsuAQw5AQwzAQw7AQwqAQwkAgE/IDAoGgEMHBgYIhglJTABUSsMLgEMIQEMOgEMNAEMPAEMJC0EAS8uTzwfNBsEAQwWPB8EAgFLGCYbMBodAUg5JSABDC4BDCEBDEABLy5PPB80GwQBDDsBDEIBDCpLBAEMFjwfBAIBKyURSCwRBAErAQw/AQw5AQxBAQwwAQwqAgFBNkEdAgE8Kk4BSREEAQw7AQw1AQw9AQwlMwQBDDUCATwEUFAmNUIiEQQBDEYBDEABDEgBDDcBDDECATgqKR0BTholEQQBDDsBDDUBDD0BDCUmUQQBDDUCAUEqDVA0EQQBDDsBDDUBDD0BDCwBDCYCASNwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2Evbm9kZXMuZGFydDRzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0rrEvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLnNlbGVjdG9yOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnIHNob3cgTmFtZXM7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXR5X3V0aWxzLmRhcnQnIGFzIHV0aWxzOwppbXBvcnQgJy4uL2VsZW1lbnRzL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL29wZXJhdG9ycy5kYXJ0JzsKaW1wb3J0ICcuLi9rZXJuZWwvaW52b2NhdGlvbl9taXJyb3JfY29uc3RhbnRzLmRhcnQnOwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCcgc2hvdyBIYXNoaW5nOwppbXBvcnQgJ2NhbGxfc3RydWN0dXJlLmRhcnQnIHNob3cgQ2FsbFN0cnVjdHVyZTsKCmNsYXNzIFNlbGVjdG9yS2luZCB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGhhc2hDb2RlOwogIGNvbnN0IFNlbGVjdG9yS2luZCh0aGlzLm5hbWUsIHRoaXMuaGFzaENvZGUpOwoKICBzdGF0aWMgY29uc3QgU2VsZWN0b3JLaW5kIEdFVFRFUiA9IGNvbnN0IFNlbGVjdG9yS2luZCgnZ2V0dGVyJywgMCk7CiAgc3RhdGljIGNvbnN0IFNlbGVjdG9yS2luZCBTRVRURVIgPSBjb25zdCBTZWxlY3RvcktpbmQoJ3NldHRlcicsIDEpOwogIHN0YXRpYyBjb25zdCBTZWxlY3RvcktpbmQgQ0FMTCA9IGNvbnN0IFNlbGVjdG9yS2luZCgnY2FsbCcsIDIpOwogIHN0YXRpYyBjb25zdCBTZWxlY3RvcktpbmQgT1BFUkFUT1IgPSBjb25zdCBTZWxlY3RvcktpbmQoJ29wZXJhdG9yJywgMyk7CiAgc3RhdGljIGNvbnN0IFNlbGVjdG9yS2luZCBJTkRFWCA9IGNvbnN0IFNlbGVjdG9yS2luZCgnaW5kZXgnLCA0KTsKICBzdGF0aWMgY29uc3QgU2VsZWN0b3JLaW5kIFNQRUNJQUwgPSBjb25zdCBTZWxlY3RvcktpbmQoJ3NwZWNpYWwnLCA1KTsKCiAgaW50IGdldCBpbmRleCA9PiBoYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gbmFtZTsKCiAgc3RhdGljIExpc3Q8U2VsZWN0b3JLaW5kPiB2YWx1ZXMgPSBjb25zdCA8U2VsZWN0b3JLaW5kPlsKICAgIEdFVFRFUiwKICAgIFNFVFRFUiwKICAgIENBTEwsCiAgICBPUEVSQVRPUiwKICAgIElOREVYLAogICAgU1BFQ0lBTAogIF07Cn0KCmNsYXNzIFNlbGVjdG9yIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW1NlbGVjdG9yXSBvYmplY3RzIGluIGEgZGVidWdnaW5nCiAgLy8vIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ3NlbGVjdG9yJzsKCiAgZmluYWwgU2VsZWN0b3JLaW5kIGtpbmQ7CiAgZmluYWwgTmFtZSBtZW1iZXJOYW1lOwogIGZpbmFsIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGhhc2hDb2RlOwoKICBpbnQgZ2V0IGFyZ3VtZW50Q291bnQgPT4gY2FsbFN0cnVjdHVyZS5hcmd1bWVudENvdW50OwogIGludCBnZXQgbmFtZWRBcmd1bWVudENvdW50ID0+IGNhbGxTdHJ1Y3R1cmUubmFtZWRBcmd1bWVudENvdW50OwogIGludCBnZXQgcG9zaXRpb25hbEFyZ3VtZW50Q291bnQgPT4gY2FsbFN0cnVjdHVyZS5wb3NpdGlvbmFsQXJndW1lbnRDb3VudDsKICBpbnQgZ2V0IHR5cGVBcmd1bWVudENvdW50ID0+IGNhbGxTdHJ1Y3R1cmUudHlwZUFyZ3VtZW50Q291bnQ7CiAgTGlzdDxTdHJpbmc+IGdldCBuYW1lZEFyZ3VtZW50cyA9PiBjYWxsU3RydWN0dXJlLm5hbWVkQXJndW1lbnRzOwoKICBTdHJpbmcgZ2V0IG5hbWUgPT4gbWVtYmVyTmFtZS50ZXh0OwoKICBMaWJyYXJ5RW50aXR5IGdldCBsaWJyYXJ5ID0+IG1lbWJlck5hbWUubGlicmFyeTsKCiAgc3RhdGljIGJvb2wgaXNPcGVyYXRvck5hbWUoU3RyaW5nIG5hbWUpIHsKICAgIGlmIChuYW1lID09IE5hbWVzLklOREVYX1NFVF9OQU1FLnRleHQpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gVW5hcnlPcGVyYXRvci5ORUdBVEUuc2VsZWN0b3JOYW1lKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIGlmIChuYW1lID09IFVuYXJ5T3BlcmF0b3IuQ09NUExFTUVOVC5zZWxlY3Rvck5hbWUpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gQmluYXJ5T3BlcmF0b3IucGFyc2VVc2VyRGVmaW5hYmxlKG5hbWUpICE9IG51bGw7CiAgICB9CiAgfQoKICBTZWxlY3Rvci5pbnRlcm5hbCgKICAgICAgdGhpcy5raW5kLCB0aGlzLm1lbWJlck5hbWUsIHRoaXMuY2FsbFN0cnVjdHVyZSwgdGhpcy5oYXNoQ29kZSkgewogICAgYXNzZXJ0KAogICAgICAgIGtpbmQgPT0gU2VsZWN0b3JLaW5kLklOREVYIHx8CiAgICAgICAgICAgIChtZW1iZXJOYW1lICE9IE5hbWVzLklOREVYX05BTUUgJiYKICAgICAgICAgICAgICAgIG1lbWJlck5hbWUgIT0gTmFtZXMuSU5ERVhfU0VUX05BTUUpLAogICAgICAgIGZhaWxlZEF0KE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwKICAgICAgICAgICAgImtpbmQ9JGtpbmQsbWVtYmVyTmFtZT0kbWVtYmVyTmFtZSxjYWxsU3RydWN0dXJlOiRjYWxsU3RydWN0dXJlIikpOwogICAgYXNzZXJ0KAogICAgICAgIGtpbmQgPT0gU2VsZWN0b3JLaW5kLk9QRVJBVE9SIHx8CiAgICAgICAgICAgIGtpbmQgPT0gU2VsZWN0b3JLaW5kLklOREVYIHx8CiAgICAgICAgICAgICFpc09wZXJhdG9yTmFtZShtZW1iZXJOYW1lLnRleHQpIHx8CiAgICAgICAgICAgIG1lbWJlck5hbWUudGV4dCA9PSAnPz8nLAogICAgICAgIGZhaWxlZEF0KE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwKICAgICAgICAgICAgImtpbmQ9JGtpbmQsbWVtYmVyTmFtZT0kbWVtYmVyTmFtZSxjYWxsU3RydWN0dXJlOiRjYWxsU3RydWN0dXJlIikpOwogICAgYXNzZXJ0KAogICAgICAgIGtpbmQgPT0gU2VsZWN0b3JLaW5kLkNBTEwgfHwKICAgICAgICAgICAga2luZCA9PSBTZWxlY3RvcktpbmQuR0VUVEVSIHx8CiAgICAgICAgICAgIGtpbmQgPT0gU2VsZWN0b3JLaW5kLlNFVFRFUiB8fAogICAgICAgICAgICBpc09wZXJhdG9yTmFtZShtZW1iZXJOYW1lLnRleHQpIHx8CiAgICAgICAgICAgIG1lbWJlck5hbWUudGV4dCA9PSAnPz8nLAogICAgICAgIGZhaWxlZEF0KE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwKICAgICAgICAgICAgImtpbmQ9JGtpbmQsbWVtYmVyTmFtZT0kbWVtYmVyTmFtZSxjYWxsU3RydWN0dXJlOiRjYWxsU3RydWN0dXJlIikpOwogIH0KCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogRXh0cmFjdCBjYWNoaW5nLgogIHN0YXRpYyBNYXA8aW50LCBMaXN0PFNlbGVjdG9yPj4gY2Fub25pY2FsaXplZFZhbHVlcyA9CiAgICAgIG5ldyBNYXA8aW50LCBMaXN0PFNlbGVjdG9yPj4oKTsKCiAgZmFjdG9yeSBTZWxlY3RvcihTZWxlY3RvcktpbmQga2luZCwgTmFtZSBuYW1lLCBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1heWJlIHVzZSBlcXVhbGl0eSBpbnN0ZWFkIG9mIGltcGxpY2l0IGhhc2hpbmcuCiAgICBpbnQgaGFzaENvZGUgPSBjb21wdXRlSGFzaENvZGUoa2luZCwgbmFtZSwgY2FsbFN0cnVjdHVyZSk7CiAgICBMaXN0PFNlbGVjdG9yPiBsaXN0ID0KICAgICAgICBjYW5vbmljYWxpemVkVmFsdWVzLnB1dElmQWJzZW50KGhhc2hDb2RlLCAoKSA9PiA8U2VsZWN0b3I+W10pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgIFNlbGVjdG9yIGV4aXN0aW5nID0gbGlzdFtpXTsKICAgICAgaWYgKGV4aXN0aW5nLm1hdGNoKGtpbmQsIG5hbWUsIGNhbGxTdHJ1Y3R1cmUpKSB7CiAgICAgICAgYXNzZXJ0KGV4aXN0aW5nLmhhc2hDb2RlID09IGhhc2hDb2RlKTsKICAgICAgICByZXR1cm4gZXhpc3Rpbmc7CiAgICAgIH0KICAgIH0KICAgIFNlbGVjdG9yIHJlc3VsdCA9CiAgICAgICAgbmV3IFNlbGVjdG9yLmludGVybmFsKGtpbmQsIG5hbWUsIGNhbGxTdHJ1Y3R1cmUsIGhhc2hDb2RlKTsKICAgIGxpc3QuYWRkKHJlc3VsdCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgZmFjdG9yeSBTZWxlY3Rvci5mcm9tRWxlbWVudChNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgTmFtZSBuYW1lID0gZWxlbWVudC5tZW1iZXJOYW1lOwogICAgaWYgKGVsZW1lbnQuaXNGdW5jdGlvbikgewogICAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiA9IGVsZW1lbnQ7CiAgICAgIGlmIChuYW1lID09IE5hbWVzLklOREVYX05BTUUpIHsKICAgICAgICByZXR1cm4gbmV3IFNlbGVjdG9yLmluZGV4KCk7CiAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBOYW1lcy5JTkRFWF9TRVRfTkFNRSkgewogICAgICAgIHJldHVybiBuZXcgU2VsZWN0b3IuaW5kZXhTZXQoKTsKICAgICAgfQogICAgICBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUgPSBmdW5jdGlvbi5wYXJhbWV0ZXJTdHJ1Y3R1cmUuY2FsbFN0cnVjdHVyZTsKICAgICAgaWYgKGlzT3BlcmF0b3JOYW1lKGVsZW1lbnQubmFtZSkpIHsKICAgICAgICAvLyBPcGVyYXRvcnMgY2Fubm90IGhhdmUgbmFtZWQgYXJndW1lbnRzLCBob3dldmVyLCB0aGF0IGRvZXNuJ3QgcHJldmVudAogICAgICAgIC8vIGEgdXNlciBmcm9tIGRlY2xhcmluZyBzdWNoIGFuIG9wZXJhdG9yLgogICAgICAgIHJldHVybiBuZXcgU2VsZWN0b3IoU2VsZWN0b3JLaW5kLk9QRVJBVE9SLCBuYW1lLCBjYWxsU3RydWN0dXJlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IFNlbGVjdG9yLmNhbGwobmFtZSwgY2FsbFN0cnVjdHVyZSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoZWxlbWVudC5pc1NldHRlcikgewogICAgICByZXR1cm4gbmV3IFNlbGVjdG9yLnNldHRlcihuYW1lKTsKICAgIH0gZWxzZSBpZiAoZWxlbWVudC5pc0dldHRlcikgewogICAgICByZXR1cm4gbmV3IFNlbGVjdG9yLmdldHRlcihuYW1lKTsKICAgIH0gZWxzZSBpZiAoZWxlbWVudC5pc0ZpZWxkKSB7CiAgICAgIHJldHVybiBuZXcgU2VsZWN0b3IuZ2V0dGVyKG5hbWUpOwogICAgfSBlbHNlIGlmIChlbGVtZW50LmlzQ29uc3RydWN0b3IpIHsKICAgICAgcmV0dXJuIG5ldyBTZWxlY3Rvci5jYWxsQ29uc3RydWN0b3IobmFtZSk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBmYWlsZWRBdChlbGVtZW50LCAiQ2FuJ3QgZ2V0IHNlbGVjdG9yIGZyb20gJGVsZW1lbnQiKTsKICAgIH0KICB9CgogIGZhY3RvcnkgU2VsZWN0b3IuZ2V0dGVyKE5hbWUgbmFtZSkgPT4KICAgICAgbmV3IFNlbGVjdG9yKFNlbGVjdG9yS2luZC5HRVRURVIsIG5hbWUuZ2V0dGVyLCBDYWxsU3RydWN0dXJlLk5PX0FSR1MpOwoKICBmYWN0b3J5IFNlbGVjdG9yLnNldHRlcihOYW1lIG5hbWUpID0+CiAgICAgIG5ldyBTZWxlY3RvcihTZWxlY3RvcktpbmQuU0VUVEVSLCBuYW1lLnNldHRlciwgQ2FsbFN0cnVjdHVyZS5PTkVfQVJHKTsKCiAgZmFjdG9yeSBTZWxlY3Rvci51bmFyeU9wZXJhdG9yKFN0cmluZyBuYW1lKSA9PiBuZXcgU2VsZWN0b3IoCiAgICAgIFNlbGVjdG9yS2luZC5PUEVSQVRPUiwKICAgICAgbmV3IFB1YmxpY05hbWUodXRpbHMuY29uc3RydWN0T3BlcmF0b3JOYW1lKG5hbWUsIHRydWUpKSwKICAgICAgQ2FsbFN0cnVjdHVyZS5OT19BUkdTKTsKCiAgZmFjdG9yeSBTZWxlY3Rvci5iaW5hcnlPcGVyYXRvcihTdHJpbmcgbmFtZSkgPT4gbmV3IFNlbGVjdG9yKAogICAgICBTZWxlY3RvcktpbmQuT1BFUkFUT1IsCiAgICAgIG5ldyBQdWJsaWNOYW1lKHV0aWxzLmNvbnN0cnVjdE9wZXJhdG9yTmFtZShuYW1lLCBmYWxzZSkpLAogICAgICBDYWxsU3RydWN0dXJlLk9ORV9BUkcpOwoKICBmYWN0b3J5IFNlbGVjdG9yLmluZGV4KCkgPT4KICAgICAgbmV3IFNlbGVjdG9yKFNlbGVjdG9yS2luZC5JTkRFWCwgTmFtZXMuSU5ERVhfTkFNRSwgQ2FsbFN0cnVjdHVyZS5PTkVfQVJHKTsKCiAgZmFjdG9yeSBTZWxlY3Rvci5pbmRleFNldCgpID0+IG5ldyBTZWxlY3RvcigKICAgICAgU2VsZWN0b3JLaW5kLklOREVYLCBOYW1lcy5JTkRFWF9TRVRfTkFNRSwgQ2FsbFN0cnVjdHVyZS5UV09fQVJHUyk7CgogIGZhY3RvcnkgU2VsZWN0b3IuY2FsbChOYW1lIG5hbWUsIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSkgPT4KICAgICAgbmV3IFNlbGVjdG9yKFNlbGVjdG9yS2luZC5DQUxMLCBuYW1lLCBjYWxsU3RydWN0dXJlKTsKCiAgZmFjdG9yeSBTZWxlY3Rvci5jYWxsQ2xvc3VyZShpbnQgYXJpdHksCiAgICAgICAgICBbTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLCBpbnQgdHlwZUFyZ3VtZW50Q291bnQgPSAwXSkgPT4KICAgICAgbmV3IFNlbGVjdG9yKFNlbGVjdG9yS2luZC5DQUxMLCBOYW1lcy5jYWxsLAogICAgICAgICAgbmV3IENhbGxTdHJ1Y3R1cmUoYXJpdHksIG5hbWVkQXJndW1lbnRzLCB0eXBlQXJndW1lbnRDb3VudCkpOwoKICBmYWN0b3J5IFNlbGVjdG9yLmNhbGxDbG9zdXJlRnJvbShTZWxlY3RvciBzZWxlY3RvcikgPT4KICAgICAgbmV3IFNlbGVjdG9yKFNlbGVjdG9yS2luZC5DQUxMLCBOYW1lcy5jYWxsLCBzZWxlY3Rvci5jYWxsU3RydWN0dXJlKTsKCiAgZmFjdG9yeSBTZWxlY3Rvci5jYWxsQ29uc3RydWN0b3IoTmFtZSBuYW1lLAogICAgICAgICAgW2ludCBhcml0eSA9IDAsIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50c10pID0+CiAgICAgIG5ldyBTZWxlY3RvcigKICAgICAgICAgIFNlbGVjdG9yS2luZC5DQUxMLCBuYW1lLCBuZXcgQ2FsbFN0cnVjdHVyZShhcml0eSwgbmFtZWRBcmd1bWVudHMpKTsKCiAgZmFjdG9yeSBTZWxlY3Rvci5jYWxsRGVmYXVsdENvbnN0cnVjdG9yKCkgPT4gbmV3IFNlbGVjdG9yKAogICAgICBTZWxlY3RvcktpbmQuQ0FMTCwgY29uc3QgUHVibGljTmFtZSgnJyksIENhbGxTdHJ1Y3R1cmUuTk9fQVJHUyk7CgogIC8vIFRPRE8oMzE5NTMpOiBSZW1vdmUgdGhpcyBpZiB3ZSBjYW4gaW1wbGVtZW50IHZpYSBzdGF0aWMgY2FsbHMuCiAgZmFjdG9yeSBTZWxlY3Rvci5nZW5lcmljSW5zdGFudGlhdGlvbihpbnQgdHlwZUFyZ3VtZW50cykgPT4gbmV3IFNlbGVjdG9yKAogICAgICBTZWxlY3RvcktpbmQuU1BFQ0lBTCwKICAgICAgTmFtZXMuZ2VuZXJpY0luc3RhbnRpYXRpb24sCiAgICAgIG5ldyBDYWxsU3RydWN0dXJlKDAsIG51bGwsIHR5cGVBcmd1bWVudHMpKTsKCiAgLy8vIERlc2VyaWFsaXplcyBhIFtTZWxlY3Rvcl0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBTZWxlY3Rvci5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgU2VsZWN0b3JLaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oU2VsZWN0b3JLaW5kLnZhbHVlcyk7CiAgICBib29sIGlzU2V0dGVyID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnkgPSBzb3VyY2UucmVhZExpYnJhcnlPck51bGwoKTsKICAgIFN0cmluZyB0ZXh0ID0gc291cmNlLnJlYWRTdHJpbmcoKTsKICAgIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSA9IG5ldyBDYWxsU3RydWN0dXJlLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBTZWxlY3RvcigKICAgICAgICBraW5kLCBuZXcgTmFtZSh0ZXh0LCBsaWJyYXJ5LCBpc1NldHRlcjogaXNTZXR0ZXIpLCBjYWxsU3RydWN0dXJlKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW1NlbGVjdG9yXSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUVudW0oa2luZCk7CiAgICBzaW5rLndyaXRlQm9vbChtZW1iZXJOYW1lLmlzU2V0dGVyKTsKICAgIHNpbmsud3JpdGVMaWJyYXJ5T3JOdWxsKG1lbWJlck5hbWUubGlicmFyeSk7CiAgICBzaW5rLndyaXRlU3RyaW5nKG1lbWJlck5hbWUudGV4dCk7CiAgICBjYWxsU3RydWN0dXJlLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBib29sIGdldCBpc0dldHRlciA9PiBraW5kID09IFNlbGVjdG9yS2luZC5HRVRURVI7CiAgYm9vbCBnZXQgaXNTZXR0ZXIgPT4ga2luZCA9PSBTZWxlY3RvcktpbmQuU0VUVEVSOwogIGJvb2wgZ2V0IGlzQ2FsbCA9PiBraW5kID09IFNlbGVjdG9yS2luZC5DQUxMOwogIGJvb2wgZ2V0IGlzQ2xvc3VyZUNhbGwgPT4gaXNDYWxsICYmIG1lbWJlck5hbWUgPT0gTmFtZXMuQ0FMTF9OQU1FOwoKICBib29sIGdldCBpc0luZGV4ID0+IGtpbmQgPT0gU2VsZWN0b3JLaW5kLklOREVYICYmIGFyZ3VtZW50Q291bnQgPT0gMTsKICBib29sIGdldCBpc0luZGV4U2V0ID0+IGtpbmQgPT0gU2VsZWN0b3JLaW5kLklOREVYICYmIGFyZ3VtZW50Q291bnQgPT0gMjsKCiAgYm9vbCBnZXQgaXNPcGVyYXRvciA9PiBraW5kID09IFNlbGVjdG9yS2luZC5PUEVSQVRPUjsKICBib29sIGdldCBpc1VuYXJ5T3BlcmF0b3IgPT4gaXNPcGVyYXRvciAmJiBhcmd1bWVudENvdW50ID09IDA7CgogIC8vLyBUaGUgbWVtYmVyIG5hbWUgZm9yIGludm9jYXRpb24gbWlycm9ycyBjcmVhdGVkIGZyb20gdGhpcyBzZWxlY3Rvci4KICBTdHJpbmcgZ2V0IGludm9jYXRpb25NaXJyb3JNZW1iZXJOYW1lID0+IGlzU2V0dGVyID8gJyRuYW1lPScgOiBuYW1lOwoKICBpbnQgZ2V0IGludm9jYXRpb25NaXJyb3JLaW5kIHsKICAgIGludCBraW5kID0gaW52b2NhdGlvbk1pcnJvck1ldGhvZEtpbmQ7CiAgICBpZiAoaXNHZXR0ZXIpIHsKICAgICAga2luZCA9IGludm9jYXRpb25NaXJyb3JHZXR0ZXJLaW5kOwogICAgfSBlbHNlIGlmIChpc1NldHRlcikgewogICAgICBraW5kID0gaW52b2NhdGlvbk1pcnJvclNldHRlcktpbmQ7CiAgICB9CiAgICByZXR1cm4ga2luZDsKICB9CgogIGJvb2wgYXBwbGllc1VubmFtZWQoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydChuYW1lID09IGVsZW1lbnQubmFtZSk7CiAgICBpZiAobWVtYmVyTmFtZS5pc1ByaXZhdGUgJiYgbWVtYmVyTmFtZS5saWJyYXJ5ICE9IGVsZW1lbnQubGlicmFyeSkgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNYXliZSB0aGlzIHNob3VsZCBiZQogICAgICAvLyBgbWVtYmVyTmFtZSAhPSBlbGVtZW50Lm1lbWJlck5hbWVgLgogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoZWxlbWVudC5pc1NldHRlcikgcmV0dXJuIGlzU2V0dGVyOwogICAgaWYgKGVsZW1lbnQuaXNHZXR0ZXIpIHJldHVybiBpc0dldHRlciB8fCBpc0NhbGw7CiAgICBpZiAoZWxlbWVudC5pc0ZpZWxkKSB7CiAgICAgIHJldHVybiBpc1NldHRlciA/IGVsZW1lbnQuaXNBc3NpZ25hYmxlIDogaXNHZXR0ZXIgfHwgaXNDYWxsOwogICAgfQogICAgaWYgKGlzR2V0dGVyKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChpc1NldHRlcikgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHNpZ25hdHVyZUFwcGxpZXMoZWxlbWVudCk7CiAgfQoKICAvLy8gV2hldGhlciBbdGhpc10gY291bGQgYmUgYSB2YWxpZCBzZWxlY3RvciBvbiBgTnVsbGAgd2l0aG91dCB0aHJvd2luZy4KICBib29sIGFwcGxpZXNUb051bGxXaXRob3V0VGhyb3coKSB7CiAgICB2YXIgbmFtZSA9IHRoaXMubmFtZTsKICAgIGlmIChpc09wZXJhdG9yICYmIG5hbWUgPT0gIj09IikgcmV0dXJuIHRydWU7CiAgICAvLyBLbm93biBnZXR0ZXJzIGFuZCB2YWxpZCB0ZWFyLW9mZnMuCiAgICBpZiAoaXNHZXR0ZXIgJiYKICAgICAgICAobmFtZSA9PSAiaGFzaENvZGUiIHx8CiAgICAgICAgICAgIG5hbWUgPT0gInJ1bnRpbWVUeXBlIiB8fAogICAgICAgICAgICBuYW1lID09ICJ0b1N0cmluZyIgfHwKICAgICAgICAgICAgbmFtZSA9PSAibm9TdWNoTWV0aG9kIikpIHJldHVybiB0cnVlOwogICAgLy8gQ2FsbGluZyB0b1N0cmluZyBhbHdheXMgc3VjY2VlZHMsIGNhbGxzIHRvIGBub1N1Y2hNZXRob2RgIChldmVuIHdlbGwKICAgIC8vIGZvcm1lZCBjYWxscykgYWx3YXlzIHRocm93LgogICAgaWYgKGlzQ2FsbCAmJgogICAgICAgIG5hbWUgPT0gInRvU3RyaW5nIiAmJgogICAgICAgIHBvc2l0aW9uYWxBcmd1bWVudENvdW50ID09IDAgJiYKICAgICAgICBuYW1lZEFyZ3VtZW50Q291bnQgPT0gMCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgc2lnbmF0dXJlQXBwbGllcyhGdW5jdGlvbkVudGl0eSBmdW5jdGlvbikgewogICAgcmV0dXJuIGNhbGxTdHJ1Y3R1cmUuc2lnbmF0dXJlQXBwbGllcyhmdW5jdGlvbi5wYXJhbWV0ZXJTdHJ1Y3R1cmUpOwogIH0KCiAgYm9vbCBhcHBsaWVzKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBpZiAobmFtZSAhPSBlbGVtZW50Lm5hbWUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBhcHBsaWVzVW5uYW1lZChlbGVtZW50KTsKICB9CgogIGJvb2wgbWF0Y2goU2VsZWN0b3JLaW5kIGtpbmQsIE5hbWUgbWVtYmVyTmFtZSwgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlKSB7CiAgICByZXR1cm4gdGhpcy5raW5kID09IGtpbmQgJiYKICAgICAgICB0aGlzLm1lbWJlck5hbWUgPT0gbWVtYmVyTmFtZSAmJgogICAgICAgIHRoaXMuY2FsbFN0cnVjdHVyZS5tYXRjaChjYWxsU3RydWN0dXJlKTsKICB9CgogIHN0YXRpYyBpbnQgY29tcHV0ZUhhc2hDb2RlKAogICAgICBTZWxlY3RvcktpbmQga2luZCwgTmFtZSBuYW1lLCBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUpIHsKICAgIC8vIEFkZCBiaXRzIGZyb20gbmFtZSBhbmQga2luZC4KICAgIGludCBoYXNoID0gSGFzaGluZy5taXhIYXNoQ29kZUJpdHMobmFtZS5oYXNoQ29kZSwga2luZC5oYXNoQ29kZSk7CiAgICAvLyBBZGQgYml0cyBmcm9tIHRoZSBjYWxsIHN0cnVjdHVyZS4KICAgIHJldHVybiBIYXNoaW5nLm1peEhhc2hDb2RlQml0cyhoYXNoLCBjYWxsU3RydWN0dXJlLmhhc2hDb2RlKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnU2VsZWN0b3IoJGtpbmQsICRuYW1lLCAke2NhbGxTdHJ1Y3R1cmUuc3RydWN0dXJlVG9TdHJpbmcoKX0pJzsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBub3JtYWxpemVkIHZlcnNpb24gb2YgdGhpcyBzZWxlY3Rvci4KICAvLy8KICAvLy8gQSBzZWxlY3RvciBpcyBub3JtYWxpemVkIGlmIGl0cyBjYWxsIHN0cnVjdHVyZSBpcyBub3JtYWxpemVkLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSBub3JtYWxpemVkIHNlbGVjdG9ycyBhcyBtdWNoIGFzIHBvc3NpYmxlLAogIC8vIGVzcGVjaWFsbHkgd2hlcmUgc2VsZWN0b3JzIGFyZSB1c2VkIGluIHNldHMgb3IgYXMga2V5cyBpbiBtYXBzLgogIFNlbGVjdG9yIHRvTm9ybWFsaXplZCgpID0+IGNhbGxTdHJ1Y3R1cmUuaXNOb3JtYWxpemVkCiAgICAgID8gdGhpcwogICAgICA6IG5ldyBTZWxlY3RvcihraW5kLCBtZW1iZXJOYW1lLCBjYWxsU3RydWN0dXJlLnRvTm9ybWFsaXplZCgpKTsKCiAgU2VsZWN0b3IgdG9DYWxsU2VsZWN0b3IoKSA9PiBuZXcgU2VsZWN0b3IuY2FsbENsb3N1cmVGcm9tKHRoaXMpOwoKICAvLy8gUmV0dXJucyB0aGUgbm9uLWdlbmVyaWMgW1NlbGVjdG9yXSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgc2VsZWN0b3IuCiAgU2VsZWN0b3IgdG9Ob25HZW5lcmljKCkgewogICAgcmV0dXJuIGNhbGxTdHJ1Y3R1cmUudHlwZUFyZ3VtZW50Q291bnQgPiAwCiAgICAgICAgPyBuZXcgU2VsZWN0b3Ioa2luZCwgbWVtYmVyTmFtZSwgY2FsbFN0cnVjdHVyZS5ub25HZW5lcmljKQogICAgICAgIDogdGhpczsKICB9Cn0KgVEATk48ARoBGSokMSElNS4pMQEVFQwWMAFGRkJKREgBHQEMHQE7DAwKDgsMBQIBEUwTKAEbGSUBDBYBOEJMQEMBJgEzASwtEzwTQBMNPgYEARVHDCYvNShQDCkqMCUoUAwlKysvJShQBAErOCYBUEw/GkcsIzcvGQgGFkQWEwQBNyQeKSYlMSgITypQM0kPNwgjKCMoIigoMQ1DBgQBKE0BKE0BPx0/HgFAHUAeAR5RAS9JAUM8ASpHMkgBOUsBLjsUTgE9RwFETBwiMgE2Oxc+JzgnUBUZSwQBLCgVGikxJykTBAE0NDBFAUhLAThAAUlHASErFCkbKQYRBAEuIkkzLRQGKzUbQwYfICYEAUslGjEqFB8lIjJMIxIeKCMTBhIEATNIBAEnLCQEAVAgKTEEAR5DJEYpQgQBDBZLBAE3BkRIRTgNRgFDAUkcL0MQBAIBK3BhY2thZ2U6Y29tcGlsZXIvc3JjL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnRBc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvdW5pdmVyc2UvY29kZWdlbl93b3JsZF9idWlsZGVyLmRhcnTAAH0ZLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJzsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JyBzaG93IElkZW50aWZpZXJzOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvaW50ZXJjZXB0b3JfZGF0YS5kYXJ0JyBzaG93IE9uZVNob3RJbnRlcmNlcHRvckRhdGE7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYXRpdmVfZGF0YS5kYXJ0JyBzaG93IE5hdGl2ZUJhc2ljRGF0YTsKaW1wb3J0ICcuLi9qc19tb2RlbC9lbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICcuLi91dGlsL2VudW1zZXQuZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnOwppbXBvcnQgJ2NhbGxfc3RydWN0dXJlLmRhcnQnOwppbXBvcnQgJ21lbWJlcl91c2FnZS5kYXJ0JzsKaW1wb3J0ICdzZWxlY3Rvci5kYXJ0JyBzaG93IFNlbGVjdG9yOwppbXBvcnQgJ3VzZS5kYXJ0JwogICAgc2hvdyBDb25zdGFudFVzZSwgRHluYW1pY1VzZSwgRHluYW1pY1VzZUtpbmQsIFN0YXRpY1VzZSwgU3RhdGljVXNlS2luZDsKaW1wb3J0ICd3b3JsZF9idWlsZGVyLmRhcnQnOwoKLy8vIFdvcmxkIGJ1aWxkZXIgc3BlY2lmaWMgdG8gY29kZWdlbi4KLy8vCi8vLyBUaGlzIGFkZHMgYWRkaXRpb25hbCBhY2Nlc3MgdG8gbGl2ZW5lc3Mgb2Ygc2VsZWN0b3JzIGFuZCBlbGVtZW50cy4KYWJzdHJhY3QgY2xhc3MgQ29kZWdlbldvcmxkQnVpbGRlciBpbXBsZW1lbnRzIFdvcmxkQnVpbGRlciB7CiAgLy8vIFJlZ2lzdGVyIFtjb25zdGFudF0gYXMgbmVlZGVkIGZvciBlbWlzc2lvbi4KICB2b2lkIGFkZENvbXBpbGVUaW1lQ29uc3RhbnRGb3JFbWlzc2lvbihDb25zdGFudFZhbHVlIGNvbnN0YW50KTsKCiAgLy8vIENsb3NlIHRoZSBjb2RlZ2VuIHdvcmxkIGJ1aWxkZXIgYW5kIHJldHVybiB0aGUgaW1tdXRhYmxlIFtDb2RlZ2VuV29ybGRdCiAgLy8vIGFzIHRoZSByZXN1bHQuCiAgQ29kZWdlbldvcmxkIGNsb3NlKCk7Cn0KCi8vIFRoZSBpbW11dGFibGUgcmVzdWx0IG9mIHRoZSBbQ29kZWdlbldvcmxkQnVpbGRlcl0uCmFic3RyYWN0IGNsYXNzIENvZGVnZW5Xb3JsZCBleHRlbmRzIEJ1aWx0V29ybGQgewogIC8vLyBDYWxscyBbZl0gZm9yIGVhY2ggZ2VuZXJpYyBjYWxsIG1ldGhvZCBvbiBhIGxpdmUgY2xvc3VyZSBjbGFzcy4KICB2b2lkIGZvckVhY2hHZW5lcmljQ2xvc3VyZUNhbGxNZXRob2Qodm9pZCBGdW5jdGlvbihGdW5jdGlvbkVudGl0eSkgZik7CgogIGJvb2wgaGFzSW52b2tlZEdldHRlcihNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFttZW1iZXJdIGlzIGludm9rZWQgYXMgYSBzZXR0ZXIuCiAgYm9vbCBoYXNJbnZva2VkU2V0dGVyKE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+IGludm9jYXRpb25zQnlOYW1lKFN0cmluZyBuYW1lKTsKCiAgSXRlcmFibGU8U2VsZWN0b3I+IGdldHRlckludm9jYXRpb25zQnlOYW1lKFN0cmluZyBuYW1lKTsKCiAgSXRlcmFibGU8U2VsZWN0b3I+IHNldHRlckludm9jYXRpb25zQnlOYW1lKFN0cmluZyBuYW1lKTsKCiAgdm9pZCBmb3JFYWNoSW52b2tlZE5hbWUoCiAgICAgIGYoU3RyaW5nIG5hbWUsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4gc2VsZWN0b3JzKSk7CgogIHZvaWQgZm9yRWFjaEludm9rZWRHZXR0ZXIoCiAgICAgIGYoU3RyaW5nIG5hbWUsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4gc2VsZWN0b3JzKSk7CgogIHZvaWQgZm9yRWFjaEludm9rZWRTZXR0ZXIoCiAgICAgIGYoU3RyaW5nIG5hbWUsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4gc2VsZWN0b3JzKSk7CgogIC8vLyBBbGwgZGlyZWN0bHkgaW5zdGFudGlhdGVkIGNsYXNzZXMsIHRoYXQgaXMsIGNsYXNzZXMgd2l0aCBhIGdlbmVyYXRpdmUKICAvLy8gY29uc3RydWN0b3IgdGhhdCBoYXMgYmVlbiBjYWxsZWQgZGlyZWN0bHkgYW5kIG5vdCBvbmx5IHRocm91Z2ggYQogIC8vLyBzdXBlci1jYWxsLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEltcHJvdmUgc2VtYW50aWMgcHJlY2lzaW9uLgogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgZGlyZWN0bHlJbnN0YW50aWF0ZWRDbGFzc2VzOwoKICAvLy8gQWxsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5zdGFudGlhdGVkIGNsYXNzZXMuCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBpbnN0YW50aWF0ZWRDbGFzc2VzOwoKICBib29sIG1ldGhvZHNOZWVkc1N1cGVyR2V0dGVyKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKTsKCiAgLy8vIFRoZSBjYWxscyBbZl0gZm9yIGFsbCBzdGF0aWMgZmllbGRzLgogIHZvaWQgZm9yRWFjaFN0YXRpY0ZpZWxkKHZvaWQgRnVuY3Rpb24oRmllbGRFbnRpdHkpIGYpOwoKICAvLy8gUmV0dXJucyB0aGUgdHlwZXMgdGhhdCBhcmUgbGl2ZSBhcyBjb25zdGFudCB0eXBlIGxpdGVyYWxzLgogIEl0ZXJhYmxlPERhcnRUeXBlPiBnZXQgY29uc3RUeXBlTGl0ZXJhbHM7CgogIC8vLyBSZXR1cm5zIHRoZSB0eXBlcyB0aGF0IGFyZSBsaXZlIGFzIGNvbnN0YW50IHR5cGUgYXJndW1lbnRzLgogIEl0ZXJhYmxlPERhcnRUeXBlPiBnZXQgbGl2ZVR5cGVBcmd1bWVudHM7CgogIC8vLyBSZXR1cm5zIGEgbGlzdCBvZiBjb25zdGFudHMgdG9wb2xvZ2ljYWxseSBzb3J0ZWQgc28gdGhhdCBkZXBlbmRlbmNpZXMKICAvLy8gYXBwZWFyIGJlZm9yZSB0aGUgZGVwZW5kZW50IGNvbnN0YW50LgogIC8vLwogIC8vLyBbcHJlU29ydENvbXBhcmVdIGlzIGEgY29tcGFyYXRvciBmdW5jdGlvbiB0aGF0IGdpdmVzIHRoZSBjb25zdGFudHMgYQogIC8vLyBjb25zaXN0ZW50IG9yZGVyIHByaW9yIHRvIHRoZSB0b3BvbG9naWNhbCBzb3J0IHdoaWNoIGdpdmVzIHRoZSBjb25zdGFudHMKICAvLy8gYW4gb3JkZXJpbmcgdGhhdCBpcyBsZXNzIHNlbnNpdGl2ZSB0byBwZXJ0dXJiYXRpb25zIGluIHRoZSBzb3VyY2UgY29kZS4KICBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBnZXRDb25zdGFudHNGb3JFbWlzc2lvbigKICAgICAgW0NvbXBhcmF0b3I8Q29uc3RhbnRWYWx1ZT4gcHJlU29ydENvbXBhcmVdKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFttZW1iZXJdIGlzIGNhbGxlZCBmcm9tIGEgc3ViY2xhc3MgdmlhIGBzdXBlcmAuCiAgYm9vbCBpc0FsaWFzZWRTdXBlck1lbWJlcihNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgT25lU2hvdEludGVyY2VwdG9yRGF0YSBnZXQgb25lU2hvdEludGVyY2VwdG9yRGF0YTsKfQoKY2xhc3MgQ29kZWdlbldvcmxkQnVpbGRlckltcGwgZXh0ZW5kcyBXb3JsZEJ1aWxkZXJCYXNlCiAgICBpbXBsZW1lbnRzIENvZGVnZW5Xb3JsZEJ1aWxkZXIgewogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CiAgZmluYWwgT25lU2hvdEludGVyY2VwdG9yRGF0YSBfb25lU2hvdEludGVyY2VwdG9yRGF0YTsKCiAgLy8vIFRoZSBzZXQgb2YgYWxsIGRpcmVjdGx5IGluc3RhbnRpYXRlZCBjbGFzc2VzLCB0aGF0IGlzLCBjbGFzc2VzIHdpdGggYQogIC8vLyBnZW5lcmF0aXZlIGNvbnN0cnVjdG9yIHRoYXQgaGFzIGJlZW4gY2FsbGVkIGRpcmVjdGx5IGFuZCBub3Qgb25seSB0aHJvdWdoCiAgLy8vIGEgc3VwZXItY2FsbC4KICAvLy8KICAvLy8gSW52YXJpYW50OiBFbGVtZW50cyBhcmUgZGVjbGFyYXRpb24gZWxlbWVudHMuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogW19kaXJlY3RseUluc3RhbnRpYXRlZENsYXNzZXNdIGFuZAogIC8vIFtfaW5zdGFudGlhdGVkVHlwZXNdIHNldHMgc2hvdWxkIGJlIG1lcmdlZC4KICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IF9kaXJlY3RseUluc3RhbnRpYXRlZENsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICAvLy8gVGhlIHNldCBvZiBhbGwgZGlyZWN0bHkgaW5zdGFudGlhdGVkIHR5cGVzLCB0aGF0IGlzLCB0aGUgdHlwZXMgb2YgdGhlCiAgLy8vIGRpcmVjdGx5IGluc3RhbnRpYXRlZCBjbGFzc2VzLgogIC8vLwogIC8vLyBTZWUgW19kaXJlY3RseUluc3RhbnRpYXRlZENsYXNzZXNdLgogIGZpbmFsIFNldDxJbnRlcmZhY2VUeXBlPiBfaW5zdGFudGlhdGVkVHlwZXMgPSBuZXcgU2V0PEludGVyZmFjZVR5cGU+KCk7CgogIC8vLyBDbGFzc2VzIGltcGxlbWVudGVkIGJ5IGRpcmVjdGx5IGluc3RhbnRpYXRlZCBjbGFzc2VzLgogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gX2ltcGxlbWVudGVkQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CgogIGZpbmFsIE1hcDxTdHJpbmcsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4+IF9pbnZva2VkTmFtZXMgPQogICAgICA8U3RyaW5nLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+Pnt9OwogIGZpbmFsIE1hcDxTdHJpbmcsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4+IF9pbnZva2VkR2V0dGVycyA9CiAgICAgIDxTdHJpbmcsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4+e307CiAgZmluYWwgTWFwPFN0cmluZywgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPj4gX2ludm9rZWRTZXR0ZXJzID0KICAgICAgPFN0cmluZywgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPj57fTsKCiAgZmluYWwgTWFwPENsYXNzRW50aXR5LCBDbGFzc1VzYWdlPiBfcHJvY2Vzc2VkQ2xhc3NlcyA9CiAgICAgIDxDbGFzc0VudGl0eSwgQ2xhc3NVc2FnZT57fTsKCiAgTWFwPENsYXNzRW50aXR5LCBDbGFzc1VzYWdlPiBnZXQgY2xhc3NVc2FnZUZvclRlc3RpbmcgPT4gX3Byb2Nlc3NlZENsYXNzZXM7CgogIC8vLyBNYXAgb2YgcmVnaXN0ZXJlZCB1c2FnZSBvZiBzdGF0aWMgYW5kIGluc3RhbmNlIG1lbWJlcnMuCiAgZmluYWwgTWFwPE1lbWJlckVudGl0eSwgTWVtYmVyVXNhZ2U+IF9tZW1iZXJVc2FnZSA9CiAgICAgIDxNZW1iZXJFbnRpdHksIE1lbWJlclVzYWdlPnt9OwoKICAvLy8gTWFwIGNvbnRhaW5pbmcgaW5zdGFuY2UgbWVtYmVycyBvZiBsaXZlIGNsYXNzZXMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbgogIC8vLyBmdWxseSBpbnZva2VkIGR5bmFtaWNhbGx5LgogIC8vLwogIC8vLyBBIG1ldGhvZCBpcyBmdWxseSBpbnZva2VkIGlmIGFsbCBpcyBvcHRpb25hbCBwYXJhbWV0ZXIgaGF2ZSBiZWVuIHBhc3NlZAogIC8vLyBpbiBzb21lIGludm9jYXRpb24uCiAgZmluYWwgTWFwPFN0cmluZywgU2V0PE1lbWJlclVzYWdlPj4gX2ludm9rYWJsZUluc3RhbmNlTWVtYmVyc0J5TmFtZSA9CiAgICAgIDxTdHJpbmcsIFNldDxNZW1iZXJVc2FnZT4+e307CgogIC8vLyBNYXAgY29udGFpbmluZyBpbnN0YW5jZSBtZW1iZXJzIG9mIGxpdmUgY2xhc3NlcyB0aGF0IGhhdmUgbm90IHlldCBiZWVuCiAgLy8vIHJlYWQgZnJvbSBkeW5hbWljYWxseS4KICBmaW5hbCBNYXA8U3RyaW5nLCBTZXQ8TWVtYmVyVXNhZ2U+PiBfcmVhZGFibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWUgPQogICAgICA8U3RyaW5nLCBTZXQ8TWVtYmVyVXNhZ2U+Pnt9OwoKICAvLy8gTWFwIGNvbnRhaW5pbmcgaW5zdGFuY2UgbWVtYmVycyBvZiBsaXZlIGNsYXNzZXMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbgogIC8vLyB3cml0dGVuIHRvIGR5bmFtaWNhbGx5LgogIGZpbmFsIE1hcDxTdHJpbmcsIFNldDxNZW1iZXJVc2FnZT4+IF93cml0YWJsZUluc3RhbmNlTWVtYmVyc0J5TmFtZSA9CiAgICAgIDxTdHJpbmcsIFNldDxNZW1iZXJVc2FnZT4+e307CgogIGZpbmFsIFNldDxEYXJ0VHlwZT4gX2lzQ2hlY2tzID0gbmV3IFNldDxEYXJ0VHlwZT4oKTsKCiAgZmluYWwgU2VsZWN0b3JDb25zdHJhaW50c1N0cmF0ZWd5IF9zZWxlY3RvckNvbnN0cmFpbnRzU3RyYXRlZ3k7CgogIGZpbmFsIFNldDxDb25zdGFudFZhbHVlPiBfY29uc3RhbnRWYWx1ZXMgPSBuZXcgU2V0PENvbnN0YW50VmFsdWU+KCk7CgogIGZpbmFsIFNldDxEYXJ0VHlwZT4gX2NvbnN0VHlwZUxpdGVyYWxzID0gbmV3IFNldDxEYXJ0VHlwZT4oKTsKICBmaW5hbCBTZXQ8RGFydFR5cGU+IF9saXZlVHlwZUFyZ3VtZW50cyA9IG5ldyBTZXQ8RGFydFR5cGU+KCk7CiAgZmluYWwgU2V0PFR5cGVWYXJpYWJsZVR5cGU+IF9uYW1lZFR5cGVWYXJpYWJsZXNOZXdSdGkgPSB7fTsKCiAgQ29kZWdlbldvcmxkQnVpbGRlckltcGwodGhpcy5fY2xvc2VkV29ybGQsIHRoaXMuX3NlbGVjdG9yQ29uc3RyYWludHNTdHJhdGVneSwKICAgICAgdGhpcy5fb25lU2hvdEludGVyY2VwdG9yRGF0YSk7CgogIEVsZW1lbnRFbnZpcm9ubWVudCBnZXQgX2VsZW1lbnRFbnZpcm9ubWVudCA9PiBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50OwoKICBOYXRpdmVCYXNpY0RhdGEgZ2V0IF9uYXRpdmVCYXNpY0RhdGEgPT4gX2Nsb3NlZFdvcmxkLm5hdGl2ZURhdGE7CgogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgaW5zdGFudGlhdGVkQ2xhc3NlcyA9PiBfcHJvY2Vzc2VkQ2xhc3Nlcy5rZXlzCiAgICAgIC53aGVyZSgoY2xzKSA9PiBfcHJvY2Vzc2VkQ2xhc3Nlc1tjbHNdLmlzSW5zdGFudGlhdGVkKTsKCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSW1wcm92ZSBzZW1hbnRpYyBwcmVjaXNpb24uCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBkaXJlY3RseUluc3RhbnRpYXRlZENsYXNzZXMgewogICAgcmV0dXJuIF9kaXJlY3RseUluc3RhbnRpYXRlZENsYXNzZXM7CiAgfQoKICAvLy8gUmVnaXN0ZXIgW3R5cGVdIGFzIChkaXJlY3RseSkgaW5zdGFudGlhdGVkLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEZ1bGx5IGVuZm9yY2UgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBleGFjdCwgdGhyb3VnaAogIC8vIHN1YmNsYXNzIGFuZCB0aHJvdWdoIHN1YnR5cGUgaW5zdGFudGlhdGVkIHR5cGVzL2NsYXNzZXMuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3VwcG9ydCB1bmtub3duIHR5cGUgYXJndW1lbnRzIGZvciBnZW5lcmljIHR5cGVzLgogIHZvaWQgcmVnaXN0ZXJUeXBlSW5zdGFudGlhdGlvbigKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlLCBDbGFzc1VzZWRDYWxsYmFjayBjbGFzc1VzZWQpIHsKICAgIENsYXNzRW50aXR5IGNscyA9IHR5cGUuZWxlbWVudDsKICAgIGJvb2wgaXNOYXRpdmUgPSBfbmF0aXZlQmFzaWNEYXRhLmlzTmF0aXZlQ2xhc3MoY2xzKTsKICAgIF9pbnN0YW50aWF0ZWRUeXBlcy5hZGQodHlwZSk7CiAgICAvLyBXZSBjYW4ndCB1c2UgdGhlIGNsb3NlZC13b3JsZCBhc3N1bXB0aW9uIHdpdGggbmF0aXZlIGFic3RyYWN0CiAgICAvLyBjbGFzc2VzOyBhIG5hdGl2ZSBhYnN0cmFjdCBjbGFzcyBtYXkgaGF2ZSBub24tYWJzdHJhY3Qgc3ViY2xhc3NlcwogICAgLy8gbm90IGRlY2xhcmVkIHRvIHRoZSBwcm9ncmFtLiAgSW5zdGFuY2VzIG9mIHRoZXNlIGNsYXNzZXMgYXJlCiAgICAvLyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIHRoZSBhYnN0cmFjdCBjbGFzcy4KICAgIGlmICghY2xzLmlzQWJzdHJhY3QgfHwgaXNOYXRpdmUpIHsKICAgICAgX2RpcmVjdGx5SW5zdGFudGlhdGVkQ2xhc3Nlcy5hZGQoY2xzKTsKICAgICAgX3Byb2Nlc3NJbnN0YW50aWF0ZWRDbGFzcyhjbHMsIGNsYXNzVXNlZCk7CiAgICB9CgogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVwbGFjZSB0aGlzIGJ5IHNlcGFyYXRlIG1vcmUgc3BlY2lmaWMgbWFwcGluZ3MgdGhhdAogICAgLy8gaW5jbHVkZSB0aGUgdHlwZSBhcmd1bWVudHMuCiAgICBpZiAoX2ltcGxlbWVudGVkQ2xhc3Nlcy5hZGQoY2xzKSkgewogICAgICBjbGFzc1VzZWQoY2xzLCBfZ2V0Q2xhc3NVc2FnZShjbHMpLmltcGxlbWVudCgpKTsKICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoU3VwZXJ0eXBlKGNscywgKEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlKSB7CiAgICAgICAgaWYgKF9pbXBsZW1lbnRlZENsYXNzZXMuYWRkKHN1cGVydHlwZS5lbGVtZW50KSkgewogICAgICAgICAgY2xhc3NVc2VkKAogICAgICAgICAgICAgIHN1cGVydHlwZS5lbGVtZW50LCBfZ2V0Q2xhc3NVc2FnZShzdXBlcnR5cGUuZWxlbWVudCkuaW1wbGVtZW50KCkpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfQoKICBib29sIF9oYXNNYXRjaGluZ1NlbGVjdG9yKE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4gc2VsZWN0b3JzLAogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyLCBKQ2xvc2VkV29ybGQgd29ybGQpIHsKICAgIGlmIChzZWxlY3RvcnMgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChTZWxlY3RvciBzZWxlY3RvciBpbiBzZWxlY3RvcnMua2V5cykgewogICAgICBpZiAoc2VsZWN0b3IuYXBwbGllc1VubmFtZWQobWVtYmVyKSkgewogICAgICAgIFNlbGVjdG9yQ29uc3RyYWludHMgbWFza3MgPSBzZWxlY3RvcnNbc2VsZWN0b3JdOwogICAgICAgIGlmIChtYXNrcy5jYW5IaXQobWVtYmVyLCBzZWxlY3Rvci5tZW1iZXJOYW1lLCB3b3JsZCkpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgSXRlcmFibGU8Q2FsbFN0cnVjdHVyZT4gX2dldE1hdGNoaW5nQ2FsbFN0cnVjdHVyZXMoCiAgICAgIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4gc2VsZWN0b3JzLCBNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBpZiAoc2VsZWN0b3JzID09IG51bGwpIHJldHVybiBjb25zdCA8Q2FsbFN0cnVjdHVyZT5bXTsKICAgIFNldDxDYWxsU3RydWN0dXJlPiBjYWxsU3RydWN0dXJlczsKICAgIGZvciAoU2VsZWN0b3Igc2VsZWN0b3IgaW4gc2VsZWN0b3JzLmtleXMpIHsKICAgICAgaWYgKHNlbGVjdG9yLmFwcGxpZXNVbm5hbWVkKG1lbWJlcikpIHsKICAgICAgICBTZWxlY3RvckNvbnN0cmFpbnRzIG1hc2tzID0gc2VsZWN0b3JzW3NlbGVjdG9yXTsKICAgICAgICBpZiAobWFza3MuY2FuSGl0KG1lbWJlciwgc2VsZWN0b3IubWVtYmVyTmFtZSwgX2Nsb3NlZFdvcmxkKSkgewogICAgICAgICAgY2FsbFN0cnVjdHVyZXMgPz89IG5ldyBTZXQ8Q2FsbFN0cnVjdHVyZT4oKTsKICAgICAgICAgIGNhbGxTdHJ1Y3R1cmVzLmFkZChzZWxlY3Rvci5jYWxsU3RydWN0dXJlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBjYWxsU3RydWN0dXJlcyA/PyBjb25zdCA8Q2FsbFN0cnVjdHVyZT5bXTsKICB9CgogIEl0ZXJhYmxlPENhbGxTdHJ1Y3R1cmU+IF9nZXRJbnZvY2F0aW9uQ2FsbFN0cnVjdHVyZXMoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgcmV0dXJuIF9nZXRNYXRjaGluZ0NhbGxTdHJ1Y3R1cmVzKF9pbnZva2VkTmFtZXNbbWVtYmVyLm5hbWVdLCBtZW1iZXIpOwogIH0KCiAgYm9vbCBfaGFzSW52b2tlZEdldHRlcihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICByZXR1cm4gX2hhc01hdGNoaW5nU2VsZWN0b3IoCiAgICAgICAgX2ludm9rZWRHZXR0ZXJzW21lbWJlci5uYW1lXSwgbWVtYmVyLCBfY2xvc2VkV29ybGQpOwogIH0KCiAgYm9vbCBfaGFzSW52b2tlZFNldHRlcihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICByZXR1cm4gX2hhc01hdGNoaW5nU2VsZWN0b3IoCiAgICAgICAgX2ludm9rZWRTZXR0ZXJzW21lbWJlci5uYW1lXSwgbWVtYmVyLCBfY2xvc2VkV29ybGQpOwogIH0KCiAgdm9pZCByZWdpc3RlckR5bmFtaWNVc2UoCiAgICAgIER5bmFtaWNVc2UgZHluYW1pY1VzZSwgTWVtYmVyVXNlZENhbGxiYWNrIG1lbWJlclVzZWQpIHsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gZHluYW1pY1VzZS5zZWxlY3RvcjsKICAgIFN0cmluZyBtZXRob2ROYW1lID0gc2VsZWN0b3IubmFtZTsKCiAgICB2b2lkIF9wcm9jZXNzKAogICAgICAgIE1hcDxTdHJpbmcsIFNldDxNZW1iZXJVc2FnZT4+IG1lbWJlck1hcCwKICAgICAgICBFbnVtU2V0PE1lbWJlclVzZT4gYWN0aW9uKE1lbWJlclVzYWdlIHVzYWdlKSwKICAgICAgICBib29sIHNob3VsZEJlUmVtb3ZlZChNZW1iZXJVc2FnZSB1c2FnZSkpIHsKICAgICAgX3Byb2Nlc3NTZXQobWVtYmVyTWFwLCBtZXRob2ROYW1lLCAoTWVtYmVyVXNhZ2UgdXNhZ2UpIHsKICAgICAgICBpZiAoc2VsZWN0b3IuYXBwbGllc1VubmFtZWQodXNhZ2UuZW50aXR5KSAmJgogICAgICAgICAgICBfc2VsZWN0b3JDb25zdHJhaW50c1N0cmF0ZWd5LmFwcGxpZWRVbm5hbWVkKAogICAgICAgICAgICAgICAgZHluYW1pY1VzZSwgdXNhZ2UuZW50aXR5LCBfY2xvc2VkV29ybGQpKSB7CiAgICAgICAgICBtZW1iZXJVc2VkKHVzYWdlLmVudGl0eSwgYWN0aW9uKHVzYWdlKSk7CiAgICAgICAgICByZXR1cm4gc2hvdWxkQmVSZW1vdmVkKHVzYWdlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9KTsKICAgIH0KCiAgICBzd2l0Y2ggKGR5bmFtaWNVc2Uua2luZCkgewogICAgICBjYXNlIER5bmFtaWNVc2VLaW5kLklOVk9LRToKICAgICAgICByZWdpc3RlckR5bmFtaWNJbnZvY2F0aW9uKAogICAgICAgICAgICBkeW5hbWljVXNlLnNlbGVjdG9yLCBkeW5hbWljVXNlLnR5cGVBcmd1bWVudHMpOwogICAgICAgIGlmIChfcmVnaXN0ZXJOZXdTZWxlY3RvcihkeW5hbWljVXNlLCBfaW52b2tlZE5hbWVzKSkgewogICAgICAgICAgX3Byb2Nlc3MoCiAgICAgICAgICAgICAgX2ludm9rYWJsZUluc3RhbmNlTWVtYmVyc0J5TmFtZSwKICAgICAgICAgICAgICAobSkgPT4gbS5pbnZva2UoQWNjZXNzZXMuZHluYW1pY0FjY2Vzcywgc2VsZWN0b3IuY2FsbFN0cnVjdHVyZSksCiAgICAgICAgICAgICAgLy8gSWYgbm90IGFsbCBvcHRpb25hbCBwYXJhbWV0ZXJzIGhhdmUgYmVlbiBwYXNzZWQgaW4gaW52b2NhdGlvbnMKICAgICAgICAgICAgICAvLyB3ZSBtdXN0IGtlZXAgdGhlIG1lbWJlciBpbiBbX2ludm9rYWJsZUluc3RhbmNlTWVtYmVyc0J5TmFtZV0uCiAgICAgICAgICAgICAgKHUpID0+ICF1Lmhhc1BlbmRpbmdEeW5hbWljSW52b2tlKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgRHluYW1pY1VzZUtpbmQuR0VUOgogICAgICAgIGlmIChfcmVnaXN0ZXJOZXdTZWxlY3RvcihkeW5hbWljVXNlLCBfaW52b2tlZEdldHRlcnMpKSB7CiAgICAgICAgICBfcHJvY2VzcygKICAgICAgICAgICAgICBfcmVhZGFibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWUsCiAgICAgICAgICAgICAgKG0pID0+IG0ucmVhZChBY2Nlc3Nlcy5keW5hbWljQWNjZXNzKSwKICAgICAgICAgICAgICAodSkgPT4gIXUuaGFzUGVuZGluZ0R5bmFtaWNSZWFkKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgRHluYW1pY1VzZUtpbmQuU0VUOgogICAgICAgIGlmIChfcmVnaXN0ZXJOZXdTZWxlY3RvcihkeW5hbWljVXNlLCBfaW52b2tlZFNldHRlcnMpKSB7CiAgICAgICAgICBfcHJvY2VzcygKICAgICAgICAgICAgICBfd3JpdGFibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWUsCiAgICAgICAgICAgICAgKG0pID0+IG0ud3JpdGUoQWNjZXNzZXMuZHluYW1pY0FjY2VzcyksCiAgICAgICAgICAgICAgKHUpID0+ICF1Lmhhc1BlbmRpbmdEeW5hbWljV3JpdGUpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgIH0KICB9CgogIGJvb2wgX3JlZ2lzdGVyTmV3U2VsZWN0b3IoRHluYW1pY1VzZSBkeW5hbWljVXNlLAogICAgICBNYXA8U3RyaW5nLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+PiBzZWxlY3Rvck1hcCkgewogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBkeW5hbWljVXNlLnNlbGVjdG9yOwogICAgU3RyaW5nIG5hbWUgPSBzZWxlY3Rvci5uYW1lOwogICAgT2JqZWN0IGNvbnN0cmFpbnQgPSBkeW5hbWljVXNlLnJlY2VpdmVyQ29uc3RyYWludDsKICAgIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4gc2VsZWN0b3JzID0KICAgICAgICBzZWxlY3Rvck1hcFtuYW1lXSA/Pz0gbmV3IE1hcGxldDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4oKTsKICAgIFVuaXZlcnNlU2VsZWN0b3JDb25zdHJhaW50cyBjb25zdHJhaW50cyA9IHNlbGVjdG9yc1tzZWxlY3Rvcl07CiAgICBpZiAoY29uc3RyYWludHMgPT0gbnVsbCkgewogICAgICBzZWxlY3RvcnNbc2VsZWN0b3JdID0gX3NlbGVjdG9yQ29uc3RyYWludHNTdHJhdGVneQogICAgICAgICAgLmNyZWF0ZVNlbGVjdG9yQ29uc3RyYWludHMoc2VsZWN0b3IsIGNvbnN0cmFpbnQpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBjb25zdHJhaW50cy5hZGRSZWNlaXZlckNvbnN0cmFpbnQoY29uc3RyYWludCk7CiAgfQoKICB2b2lkIHJlZ2lzdGVySXNDaGVjayhjb3ZhcmlhbnQgRGFydFR5cGUgdHlwZSkgewogICAgX2lzQ2hlY2tzLmFkZCh0eXBlLnVuYWxpYXNlZCk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyTmFtZWRUeXBlVmFyaWFibGVOZXdSdGkoVHlwZVZhcmlhYmxlVHlwZSB0eXBlKSB7CiAgICBfbmFtZWRUeXBlVmFyaWFibGVzTmV3UnRpLmFkZCh0eXBlKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJTdGF0aWNVc2UoU3RhdGljVXNlIHN0YXRpY1VzZSwgTWVtYmVyVXNlZENhbGxiYWNrIG1lbWJlclVzZWQpIHsKICAgIE1lbWJlckVudGl0eSBlbGVtZW50ID0gc3RhdGljVXNlLmVsZW1lbnQ7CiAgICBFbnVtU2V0PE1lbWJlclVzZT4gdXNlU2V0ID0gbmV3IEVudW1TZXQ8TWVtYmVyVXNlPigpOwogICAgTWVtYmVyVXNhZ2UgdXNhZ2UgPSBfZ2V0TWVtYmVyVXNhZ2UoZWxlbWVudCwgdXNlU2V0KTsKICAgIHN3aXRjaCAoc3RhdGljVXNlLmtpbmQpIHsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLlNUQVRJQ19URUFSX09GRjoKICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLnJlYWQoQWNjZXNzZXMuc3RhdGljQWNjZXNzKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5JTlNUQU5DRV9GSUVMRF9HRVQ6CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5JTlNUQU5DRV9GSUVMRF9TRVQ6CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5DQUxMX01FVEhPRDoKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBdm9pZCB0aGlzLiBDdXJyZW50bHkgW0ZJRUxEX0dFVF0gYW5kCiAgICAgICAgLy8gW0ZJRUxEX1NFVF0gY29udGFpbnMgW0JveEZpZWxkRWxlbWVudF1zIHdoaWNoIHdlIGNhbm5vdCBlbnF1ZXVlLgogICAgICAgIC8vIEFsc28gW0NMT1NVUkVdIGNvbnRhaW5zIFtMb2NhbEZ1bmN0aW9uRWxlbWVudF0gd2hpY2ggd2UgY2Fubm90CiAgICAgICAgLy8gZW5xdWV1ZS4KICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLlNVUEVSX0lOVk9LRToKICAgICAgICByZWdpc3RlclN0YXRpY0ludm9jYXRpb24oc3RhdGljVXNlKTsKICAgICAgICB1c2VTZXQuYWRkQWxsKAogICAgICAgICAgICB1c2FnZS5pbnZva2UoQWNjZXNzZXMuc3VwZXJBY2Nlc3MsIHN0YXRpY1VzZS5jYWxsU3RydWN0dXJlKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVEFUSUNfSU5WT0tFOgogICAgICAgIHJlZ2lzdGVyU3RhdGljSW52b2NhdGlvbihzdGF0aWNVc2UpOwogICAgICAgIHVzZVNldC5hZGRBbGwoCiAgICAgICAgICAgIHVzYWdlLmludm9rZShBY2Nlc3Nlcy5zdGF0aWNBY2Nlc3MsIHN0YXRpY1VzZS5jYWxsU3RydWN0dXJlKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVVBFUl9GSUVMRF9TRVQ6CiAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS53cml0ZShBY2Nlc3Nlcy5zdXBlckFjY2VzcykpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1VQRVJfU0VUVEVSX1NFVDoKICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLndyaXRlKEFjY2Vzc2VzLnN1cGVyQWNjZXNzKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVEFUSUNfU0VUOgogICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2Uud3JpdGUoQWNjZXNzZXMuc3RhdGljQWNjZXNzKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVVBFUl9URUFSX09GRjoKICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLnJlYWQoQWNjZXNzZXMuc3VwZXJBY2Nlc3MpKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLlNVUEVSX0dFVDoKICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLnJlYWQoQWNjZXNzZXMuc3VwZXJBY2Nlc3MpKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLlNUQVRJQ19HRVQ6CiAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS5yZWFkKEFjY2Vzc2VzLnN0YXRpY0FjY2VzcykpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuRklFTERfSU5JVDoKICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLmluaXQoKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5GSUVMRF9DT05TVEFOVF9JTklUOgogICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2UuY29uc3RhbnRJbml0KHN0YXRpY1VzZS5jb25zdGFudCkpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuQ09OU1RSVUNUT1JfSU5WT0tFOgogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuQ09OU1RfQ09OU1RSVUNUT1JfSU5WT0tFOgogICAgICAgIC8vIFdlIGRvbid0IHRyYWNrIHBhcmFtZXRlcnMgaW4gdGhlIGNvZGVnZW4gd29ybGQgYnVpbGRlciwgc28gd2UKICAgICAgICAvLyBwYXNzIGBudWxsYCBpbnN0ZWFkIG9mIHRoZSBjb25jcmV0ZSBjYWxsIHN0cnVjdHVyZS4KICAgICAgICB1c2VTZXQuYWRkQWxsKAogICAgICAgICAgICB1c2FnZS5pbnZva2UoQWNjZXNzZXMuc3RhdGljQWNjZXNzLCBzdGF0aWNVc2UuY2FsbFN0cnVjdHVyZSkpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuRElSRUNUX0lOVk9LRToKICAgICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gc3RhdGljVXNlLmVsZW1lbnQ7CiAgICAgICAgLy8gV2UgZG9uJ3QgdHJhY2sgcGFyYW1ldGVycyBpbiB0aGUgY29kZWdlbiB3b3JsZCBidWlsZGVyLCBzbyB3ZQogICAgICAgIC8vIHBhc3MgYG51bGxgIGluc3RlYWQgb2YgdGhlIGNvbmNyZXRlIGNhbGwgc3RydWN0dXJlLgogICAgICAgIHVzZVNldC5hZGRBbGwoCiAgICAgICAgICAgIHVzYWdlLmludm9rZShBY2Nlc3Nlcy5zdGF0aWNBY2Nlc3MsIHN0YXRpY1VzZS5jYWxsU3RydWN0dXJlKSk7CiAgICAgICAgaWYgKHN0YXRpY1VzZS50eXBlQXJndW1lbnRzPy5pc05vdEVtcHR5ID8/IGZhbHNlKSB7CiAgICAgICAgICByZWdpc3RlckR5bmFtaWNJbnZvY2F0aW9uKAogICAgICAgICAgICAgIG5ldyBTZWxlY3Rvci5jYWxsKG1lbWJlci5tZW1iZXJOYW1lLCBzdGF0aWNVc2UuY2FsbFN0cnVjdHVyZSksCiAgICAgICAgICAgICAgc3RhdGljVXNlLnR5cGVBcmd1bWVudHMpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLklOTElOSU5HOgogICAgICAgIHJlZ2lzdGVyU3RhdGljSW52b2NhdGlvbihzdGF0aWNVc2UpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuQ0xPU1VSRToKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNMT1NVUkVfQ0FMTDoKICAgICAgICBmYWlsZWRBdChDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICAgICAiU3RhdGljIHVzZSAke3N0YXRpY1VzZS5raW5kfSBpcyBub3Qgc3VwcG9ydGVkIGR1cmluZyBjb2RlZ2VuLiIpOwogICAgfQogICAgaWYgKHVzZVNldC5pc05vdEVtcHR5KSB7CiAgICAgIG1lbWJlclVzZWQodXNhZ2UuZW50aXR5LCB1c2VTZXQpOwogICAgfQogIH0KCiAgdm9pZCBwcm9jZXNzQ2xhc3NNZW1iZXJzKENsYXNzRW50aXR5IGNscywgTWVtYmVyVXNlZENhbGxiYWNrIG1lbWJlclVzZWQsCiAgICAgIHtib29sIGNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeTogZmFsc2V9KSB7CiAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hDbGFzc01lbWJlcihjbHMsCiAgICAgICAgKENsYXNzRW50aXR5IGNscywgTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICBfcHJvY2Vzc0luc3RhbnRpYXRlZENsYXNzTWVtYmVyKGNscywgbWVtYmVyLCBtZW1iZXJVc2VkLAogICAgICAgICAgY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5OiBjaGVja0VucXVldWVyQ29uc2lzdGVuY3kpOwogICAgfSk7CiAgfQoKICB2b2lkIF9wcm9jZXNzSW5zdGFudGlhdGVkQ2xhc3NNZW1iZXIoCiAgICAgIENsYXNzRW50aXR5IGNscywgTWVtYmVyRW50aXR5IG1lbWJlciwgTWVtYmVyVXNlZENhbGxiYWNrIG1lbWJlclVzZWQsCiAgICAgIHtib29sIGNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeTogZmFsc2V9KSB7CiAgICBpZiAoIW1lbWJlci5pc0luc3RhbmNlTWVtYmVyKSByZXR1cm47CiAgICBFbnVtU2V0PE1lbWJlclVzZT4gdXNlU2V0ID0gbmV3IEVudW1TZXQ8TWVtYmVyVXNlPigpOwogICAgTWVtYmVyVXNhZ2UgdXNhZ2UgPSBfZ2V0TWVtYmVyVXNhZ2UobWVtYmVyLCB1c2VTZXQpOwogICAgaWYgKHVzZVNldC5pc05vdEVtcHR5KSB7CiAgICAgIGlmIChjaGVja0VucXVldWVyQ29uc2lzdGVuY3kpIHsKICAgICAgICB0aHJvdyBuZXcgU3Bhbm5hYmxlQXNzZXJ0aW9uRmFpbHVyZShtZW1iZXIsCiAgICAgICAgICAgICdVbmVucXVldWVkIHVzYWdlIG9mICRtZW1iZXI6IFxuYmVmb3JlOiA8bm9uZT5cbmFmdGVyIDogJHVzYWdlJyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWVtYmVyVXNlZChtZW1iZXIsIHVzZVNldCk7CiAgICAgIH0KICAgIH0KICB9CgogIE1lbWJlclVzYWdlIF9nZXRNZW1iZXJVc2FnZShNZW1iZXJFbnRpdHkgbWVtYmVyLCBFbnVtU2V0PE1lbWJlclVzZT4gdXNlU2V0LAogICAgICB7Ym9vbCBjaGVja0VucXVldWVyQ29uc2lzdGVuY3k6IGZhbHNlfSkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2hhbmdlIFtUeXBlTWFza10gdG8gbm90IGFwcGx5IHRvIGEgc3VwZXJjbGFzcwogICAgLy8gbWVtYmVyIHVubGVzcyB0aGUgY2xhc3MgaGFzIGJlZW4gaW5zdGFudGlhdGVkLiBTaW1pbGFyIHRvCiAgICAvLyBbU3Ryb25nTW9kZUNvbnN0cmFpbnRdLgogICAgTWVtYmVyVXNhZ2UgdXNhZ2UgPSBfbWVtYmVyVXNhZ2VbbWVtYmVyXTsKICAgIGlmICh1c2FnZSA9PSBudWxsKSB7CiAgICAgIE1lbWJlckFjY2VzcyBwb3RlbnRpYWxBY2Nlc3MgPSBfY2xvc2VkV29ybGQuZ2V0TWVtYmVyQWNjZXNzKG1lbWJlcik7CiAgICAgIGlmIChtZW1iZXIuaXNJbnN0YW5jZU1lbWJlcikgewogICAgICAgIFN0cmluZyBtZW1iZXJOYW1lID0gbWVtYmVyLm5hbWU7CiAgICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gbWVtYmVyLmVuY2xvc2luZ0NsYXNzOwogICAgICAgIGJvb2wgaXNOYXRpdmUgPSBfbmF0aXZlQmFzaWNEYXRhLmlzTmF0aXZlQ2xhc3MoY2xzKTsKICAgICAgICB1c2FnZSA9IG5ldyBNZW1iZXJVc2FnZShtZW1iZXIsIHBvdGVudGlhbEFjY2VzczogcG90ZW50aWFsQWNjZXNzKTsKICAgICAgICBpZiAobWVtYmVyLmlzRmllbGQgJiYgIWlzTmF0aXZlKSB7CiAgICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLmluaXQoKSk7CiAgICAgICAgfQogICAgICAgIGlmIChtZW1iZXIgaXMgSlNpZ25hdHVyZU1ldGhvZCkgewogICAgICAgICAgLy8gV2UgbWFyayBzaWduYXR1cmUgbWV0aG9kcyBhcyAiYWx3YXlzIHVzZWQiIHRvIHByZXZlbnQgdGhlbSBmcm9tCiAgICAgICAgICAvLyBiZWluZyBvcHRpbWl6ZWQgYXdheS4KICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1ha2UgdGhpcyBhIHBhcnQgb2YgdGhlIHJlZ3VsYXIgZW5xdWV1ZWluZy4KICAgICAgICAgIHVzZVNldC5hZGRBbGwoCiAgICAgICAgICAgICAgdXNhZ2UuaW52b2tlKEFjY2Vzc2VzLmR5bmFtaWNBY2Nlc3MsIENhbGxTdHJ1Y3R1cmUuTk9fQVJHUykpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHVzYWdlLmhhc1BlbmRpbmdEeW5hbWljUmVhZCAmJiBfaGFzSW52b2tlZEdldHRlcihtZW1iZXIpKSB7CiAgICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLnJlYWQoQWNjZXNzZXMuZHluYW1pY0FjY2VzcykpOwogICAgICAgIH0KICAgICAgICBpZiAodXNhZ2UuaGFzUGVuZGluZ0R5bmFtaWNXcml0ZSAmJiBfaGFzSW52b2tlZFNldHRlcihtZW1iZXIpKSB7CiAgICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLndyaXRlKEFjY2Vzc2VzLmR5bmFtaWNBY2Nlc3MpKTsKICAgICAgICB9CiAgICAgICAgaWYgKHVzYWdlLmhhc1BlbmRpbmdEeW5hbWljSW52b2tlKSB7CiAgICAgICAgICBJdGVyYWJsZTxDYWxsU3RydWN0dXJlPiBjYWxsU3RydWN0dXJlcyA9CiAgICAgICAgICAgICAgX2dldEludm9jYXRpb25DYWxsU3RydWN0dXJlcyhtZW1iZXIpOwogICAgICAgICAgZm9yIChDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUgaW4gY2FsbFN0cnVjdHVyZXMpIHsKICAgICAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS5pbnZva2UoQWNjZXNzZXMuZHluYW1pY0FjY2VzcywgY2FsbFN0cnVjdHVyZSkpOwogICAgICAgICAgICBpZiAoIXVzYWdlLmhhc1BlbmRpbmdEeW5hbWljSW52b2tlKSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5KSB7CiAgICAgICAgICBpZiAodXNhZ2UuaGFzUGVuZGluZ0R5bmFtaWNJbnZva2UpIHsKICAgICAgICAgICAgX2ludm9rYWJsZUluc3RhbmNlTWVtYmVyc0J5TmFtZQogICAgICAgICAgICAgICAgLnB1dElmQWJzZW50KG1lbWJlck5hbWUsICgpID0+IHt9KQogICAgICAgICAgICAgICAgLmFkZCh1c2FnZSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodXNhZ2UuaGFzUGVuZGluZ0R5bmFtaWNSZWFkKSB7CiAgICAgICAgICAgIF9yZWFkYWJsZUluc3RhbmNlTWVtYmVyc0J5TmFtZQogICAgICAgICAgICAgICAgLnB1dElmQWJzZW50KG1lbWJlck5hbWUsICgpID0+IHt9KQogICAgICAgICAgICAgICAgLmFkZCh1c2FnZSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodXNhZ2UuaGFzUGVuZGluZ0R5bmFtaWNXcml0ZSkgewogICAgICAgICAgICBfd3JpdGFibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWUKICAgICAgICAgICAgICAgIC5wdXRJZkFic2VudChtZW1iZXJOYW1lLCAoKSA9PiB7fSkKICAgICAgICAgICAgICAgIC5hZGQodXNhZ2UpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB1c2FnZSA9IG5ldyBNZW1iZXJVc2FnZShtZW1iZXIsIHBvdGVudGlhbEFjY2VzczogcG90ZW50aWFsQWNjZXNzKTsKICAgICAgICBpZiAobWVtYmVyLmlzRmllbGQpIHsKICAgICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2UuaW5pdCgpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFjaGVja0VucXVldWVyQ29uc2lzdGVuY3kpIHsKICAgICAgICBfbWVtYmVyVXNhZ2VbbWVtYmVyXSA9IHVzYWdlOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpZiAoY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5KSB7CiAgICAgICAgdXNhZ2UgPSB1c2FnZS5jbG9uZSgpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdXNhZ2U7CiAgfQoKICB2b2lkIF9wcm9jZXNzU2V0KE1hcDxTdHJpbmcsIFNldDxNZW1iZXJVc2FnZT4+IG1hcCwgU3RyaW5nIG1lbWJlck5hbWUsCiAgICAgIGJvb2wgZihNZW1iZXJVc2FnZSBlKSkgewogICAgU2V0PE1lbWJlclVzYWdlPiBtZW1iZXJzID0gbWFwW21lbWJlck5hbWVdOwogICAgaWYgKG1lbWJlcnMgPT0gbnVsbCkgcmV0dXJuOwogICAgLy8gW2ZdIG1pZ2h0IGFkZCBlbGVtZW50cyB0byBbOiBtYXBbbWVtYmVyTmFtZV0gOl0gZHVyaW5nIHRoZSBsb29wIGJlbG93CiAgICAvLyBzbyB3ZSBjcmVhdGUgYSBuZXcgbGlzdCBmb3IgWzogbWFwW21lbWJlck5hbWVdIDpdIGFuZCBwcmVwZW5kIHRoZQogICAgLy8gW3JlbWFpbmluZ10gbWVtYmVycyBhZnRlciB0aGUgbG9vcC4KICAgIG1hcFttZW1iZXJOYW1lXSA9IG5ldyBTZXQ8TWVtYmVyVXNhZ2U+KCk7CiAgICBTZXQ8TWVtYmVyVXNhZ2U+IHJlbWFpbmluZyA9IG5ldyBTZXQ8TWVtYmVyVXNhZ2U+KCk7CiAgICBmb3IgKE1lbWJlclVzYWdlIG1lbWJlciBpbiBtZW1iZXJzKSB7CiAgICAgIGlmICghZihtZW1iZXIpKSByZW1haW5pbmcuYWRkKG1lbWJlcik7CiAgICB9CiAgICBtYXBbbWVtYmVyTmFtZV0uYWRkQWxsKHJlbWFpbmluZyk7CiAgfQoKICAvLy8gUmV0dXJuIHRoZSBjYW5vbmljYWwgW0NsYXNzVXNhZ2VdIGZvciBbY2xzXS4KICBDbGFzc1VzYWdlIF9nZXRDbGFzc1VzYWdlKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIF9wcm9jZXNzZWRDbGFzc2VzLnB1dElmQWJzZW50KGNscywgKCkgPT4gbmV3IENsYXNzVXNhZ2UoY2xzKSk7CiAgfQoKICB2b2lkIF9wcm9jZXNzSW5zdGFudGlhdGVkQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzLCBDbGFzc1VzZWRDYWxsYmFjayBjbGFzc1VzZWQpIHsKICAgIC8vIFJlZ2lzdGVycyBbc3VwZXJjbGFzc10gYXMgaW5zdGFudGlhdGVkLiBSZXR1cm5zIGB0cnVlYCBpZiBpdCB3YXNuJ3QKICAgIC8vIGFscmVhZHkgaW5zdGFudGlhdGVkIGFuZCB3ZSB0aGVyZWZvcmUgaGF2ZSB0byBwcm9jZXNzIGl0cyBzdXBlcmNsYXNzIGFzCiAgICAvLyB3ZWxsLgogICAgYm9vbCBwcm9jZXNzQ2xhc3MoQ2xhc3NFbnRpdHkgc3VwZXJjbGFzcykgewogICAgICBDbGFzc1VzYWdlIHVzYWdlID0gX2dldENsYXNzVXNhZ2Uoc3VwZXJjbGFzcyk7CiAgICAgIGlmICghdXNhZ2UuaXNJbnN0YW50aWF0ZWQpIHsKICAgICAgICBjbGFzc1VzZWQodXNhZ2UuY2xzLCB1c2FnZS5pbnN0YW50aWF0ZSgpKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgd2hpbGUgKGNscyAhPSBudWxsICYmIHByb2Nlc3NDbGFzcyhjbHMpKSB7CiAgICAgIGNscyA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0U3VwZXJDbGFzcyhjbHMpOwogICAgfQogIH0KCiAgLy8vIFNldCBvZiBhbGwgcmVnaXN0ZXJlZCBjb21waWxlZCBjb25zdGFudHMuCiAgZmluYWwgU2V0PENvbnN0YW50VmFsdWU+IF9jb21waWxlZENvbnN0YW50cyA9IG5ldyBTZXQ8Q29uc3RhbnRWYWx1ZT4oKTsKCiAgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gZ2V0IGNvbXBpbGVkQ29uc3RhbnRzRm9yVGVzdGluZyA9PiBfY29tcGlsZWRDb25zdGFudHM7CgogIEBvdmVycmlkZQogIHZvaWQgYWRkQ29tcGlsZVRpbWVDb25zdGFudEZvckVtaXNzaW9uKENvbnN0YW50VmFsdWUgY29uc3RhbnQpIHsKICAgIF9jb21waWxlZENvbnN0YW50cy5hZGQoY29uc3RhbnQpOwogIH0KCiAgLy8vIFJlZ2lzdGVyIHRoZSBjb25zdGFudCBbdXNlXSB3aXRoIHRoaXMgd29ybGQgYnVpbGRlci4gUmV0dXJucyBgdHJ1ZWAgaWYKICAvLy8gdGhlIGNvbnN0YW50IHVzZSB3YXMgbmV3IHRvIHRoZSB3b3JsZC4KICBib29sIHJlZ2lzdGVyQ29uc3RhbnRVc2UoQ29uc3RhbnRVc2UgdXNlKSB7CiAgICBhZGRDb21waWxlVGltZUNvbnN0YW50Rm9yRW1pc3Npb24odXNlLnZhbHVlKTsKICAgIHJldHVybiBfY29uc3RhbnRWYWx1ZXMuYWRkKHVzZS52YWx1ZSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyQ29uc3RUeXBlTGl0ZXJhbChEYXJ0VHlwZSB0eXBlKSB7CiAgICBfY29uc3RUeXBlTGl0ZXJhbHMuYWRkKHR5cGUpOwogIH0KCiAgdm9pZCByZWdpc3RlclR5cGVBcmd1bWVudChEYXJ0VHlwZSB0eXBlKSB7CiAgICBfbGl2ZVR5cGVBcmd1bWVudHMuYWRkKHR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29kZWdlbldvcmxkIGNsb3NlKCkgewogICAgTWFwPE1lbWJlckVudGl0eSwgTWVtYmVyVXNhZ2U+IGxpdmVNZW1iZXJVc2FnZSA9IHt9OwogICAgX21lbWJlclVzYWdlLmZvckVhY2goKE1lbWJlckVudGl0eSBtZW1iZXIsIE1lbWJlclVzYWdlIHVzYWdlKSB7CiAgICAgIGlmICh1c2FnZS5oYXNVc2UpIHsKICAgICAgICBsaXZlTWVtYmVyVXNhZ2VbbWVtYmVyXSA9IHVzYWdlOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBuZXcgQ29kZWdlbldvcmxkSW1wbChfY2xvc2VkV29ybGQsIGxpdmVNZW1iZXJVc2FnZSwKICAgICAgICBjb25zdFR5cGVMaXRlcmFsczogX2NvbnN0VHlwZUxpdGVyYWxzLAogICAgICAgIGRpcmVjdGx5SW5zdGFudGlhdGVkQ2xhc3NlczogZGlyZWN0bHlJbnN0YW50aWF0ZWRDbGFzc2VzLAogICAgICAgIHR5cGVWYXJpYWJsZVR5cGVMaXRlcmFsczogdHlwZVZhcmlhYmxlVHlwZUxpdGVyYWxzLAogICAgICAgIGluc3RhbnRpYXRlZENsYXNzZXM6IGluc3RhbnRpYXRlZENsYXNzZXMsCiAgICAgICAgaXNDaGVja3M6IF9pc0NoZWNrcywKICAgICAgICBuYW1lZFR5cGVWYXJpYWJsZXNOZXdSdGk6IF9uYW1lZFR5cGVWYXJpYWJsZXNOZXdSdGksCiAgICAgICAgaW5zdGFudGlhdGVkVHlwZXM6IF9pbnN0YW50aWF0ZWRUeXBlcywKICAgICAgICBsaXZlVHlwZUFyZ3VtZW50czogX2xpdmVUeXBlQXJndW1lbnRzLAogICAgICAgIGNvbXBpbGVkQ29uc3RhbnRzOiBfY29tcGlsZWRDb25zdGFudHMsCiAgICAgICAgaW52b2tlZE5hbWVzOiBfaW52b2tlZE5hbWVzLAogICAgICAgIGludm9rZWRHZXR0ZXJzOiBfaW52b2tlZEdldHRlcnMsCiAgICAgICAgaW52b2tlZFNldHRlcnM6IF9pbnZva2VkU2V0dGVycywKICAgICAgICBzdGF0aWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXM6IHN0YXRpY1R5cGVBcmd1bWVudERlcGVuZGVuY2llcywKICAgICAgICBkeW5hbWljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzOiBkeW5hbWljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzLAogICAgICAgIG9uZVNob3RJbnRlcmNlcHRvckRhdGE6IF9vbmVTaG90SW50ZXJjZXB0b3JEYXRhKTsKICB9Cn0KCmNsYXNzIENvZGVnZW5Xb3JsZEltcGwgaW1wbGVtZW50cyBDb2RlZ2VuV29ybGQgewogIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CgogIGZpbmFsIE1hcDxNZW1iZXJFbnRpdHksIE1lbWJlclVzYWdlPiBfbGl2ZU1lbWJlclVzYWdlOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBJdGVyYWJsZTxEYXJ0VHlwZT4gY29uc3RUeXBlTGl0ZXJhbHM7CgogIEBvdmVycmlkZQogIGZpbmFsIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBkaXJlY3RseUluc3RhbnRpYXRlZENsYXNzZXM7CgogIEBvdmVycmlkZQogIGZpbmFsIEl0ZXJhYmxlPFR5cGVWYXJpYWJsZVR5cGU+IHR5cGVWYXJpYWJsZVR5cGVMaXRlcmFsczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGluc3RhbnRpYXRlZENsYXNzZXM7CgogIEBvdmVycmlkZQogIGZpbmFsIEl0ZXJhYmxlPERhcnRUeXBlPiBpc0NoZWNrczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgU2V0PFR5cGVWYXJpYWJsZVR5cGU+IG5hbWVkVHlwZVZhcmlhYmxlc05ld1J0aTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgSXRlcmFibGU8SW50ZXJmYWNlVHlwZT4gaW5zdGFudGlhdGVkVHlwZXM7CgogIEBvdmVycmlkZQogIGZpbmFsIEl0ZXJhYmxlPERhcnRUeXBlPiBsaXZlVHlwZUFyZ3VtZW50czsKCiAgZmluYWwgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gX2NvbXBpbGVkQ29uc3RhbnRzOwoKICBmaW5hbCBNYXA8U3RyaW5nLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+PiBfaW52b2tlZE5hbWVzOwoKICBmaW5hbCBNYXA8U3RyaW5nLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+PiBfaW52b2tlZEdldHRlcnM7CgogIGZpbmFsIE1hcDxTdHJpbmcsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4+IF9pbnZva2VkU2V0dGVyczsKCiAgZmluYWwgTWFwPEVudGl0eSwgU2V0PERhcnRUeXBlPj4gX3N0YXRpY1R5cGVBcmd1bWVudERlcGVuZGVuY2llczsKCiAgZmluYWwgTWFwPFNlbGVjdG9yLCBTZXQ8RGFydFR5cGU+PiBfZHluYW1pY1R5cGVBcmd1bWVudERlcGVuZGVuY2llczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgT25lU2hvdEludGVyY2VwdG9yRGF0YSBvbmVTaG90SW50ZXJjZXB0b3JEYXRhOwoKICBDb2RlZ2VuV29ybGRJbXBsKHRoaXMuX2Nsb3NlZFdvcmxkLCB0aGlzLl9saXZlTWVtYmVyVXNhZ2UsCiAgICAgIHt0aGlzLmNvbnN0VHlwZUxpdGVyYWxzLAogICAgICB0aGlzLmRpcmVjdGx5SW5zdGFudGlhdGVkQ2xhc3NlcywKICAgICAgdGhpcy50eXBlVmFyaWFibGVUeXBlTGl0ZXJhbHMsCiAgICAgIHRoaXMuaW5zdGFudGlhdGVkQ2xhc3NlcywKICAgICAgdGhpcy5pc0NoZWNrcywKICAgICAgdGhpcy5uYW1lZFR5cGVWYXJpYWJsZXNOZXdSdGksCiAgICAgIHRoaXMuaW5zdGFudGlhdGVkVHlwZXMsCiAgICAgIHRoaXMubGl2ZVR5cGVBcmd1bWVudHMsCiAgICAgIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IGNvbXBpbGVkQ29uc3RhbnRzLAogICAgICBNYXA8U3RyaW5nLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+PiBpbnZva2VkTmFtZXMsCiAgICAgIE1hcDxTdHJpbmcsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4+IGludm9rZWRHZXR0ZXJzLAogICAgICBNYXA8U3RyaW5nLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+PiBpbnZva2VkU2V0dGVycywKICAgICAgTWFwPEVudGl0eSwgU2V0PERhcnRUeXBlPj4gc3RhdGljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzLAogICAgICBNYXA8U2VsZWN0b3IsIFNldDxEYXJ0VHlwZT4+IGR5bmFtaWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXMsCiAgICAgIHRoaXMub25lU2hvdEludGVyY2VwdG9yRGF0YX0pCiAgICAgIDogX2NvbXBpbGVkQ29uc3RhbnRzID0gY29tcGlsZWRDb25zdGFudHMsCiAgICAgICAgX2ludm9rZWROYW1lcyA9IGludm9rZWROYW1lcywKICAgICAgICBfaW52b2tlZEdldHRlcnMgPSBpbnZva2VkR2V0dGVycywKICAgICAgICBfaW52b2tlZFNldHRlcnMgPSBpbnZva2VkU2V0dGVycywKICAgICAgICBfc3RhdGljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzID0gc3RhdGljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzLAogICAgICAgIF9keW5hbWljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzID0gZHluYW1pY1R5cGVBcmd1bWVudERlcGVuZGVuY2llczsKCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoU3RhdGljRmllbGQodm9pZCBGdW5jdGlvbihGaWVsZEVudGl0eSkgZikgewogICAgYm9vbCBmYWlsdXJlID0gZmFsc2U7CiAgICBfbGl2ZU1lbWJlclVzYWdlLmZvckVhY2goKE1lbWJlckVudGl0eSBtZW1iZXIsIE1lbWJlclVzYWdlIHVzYWdlKSB7CiAgICAgIGlmIChtZW1iZXIgaXMgRmllbGRFbnRpdHkgJiYgKG1lbWJlci5pc1N0YXRpYyB8fCBtZW1iZXIuaXNUb3BMZXZlbCkpIHsKICAgICAgICBmKG1lbWJlcik7CiAgICAgIH0KICAgIH0pOwogICAgaWYgKGZhaWx1cmUpIHRocm93ICdmYWlsdXJlJzsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaEdlbmVyaWNNZXRob2QoRnVuY3Rpb24gZikgewogICAgX2xpdmVNZW1iZXJVc2FnZS5mb3JFYWNoKChNZW1iZXJFbnRpdHkgbWVtYmVyLCBNZW1iZXJVc2FnZSB1c2FnZSkgewogICAgICBpZiAobWVtYmVyIGlzIEZ1bmN0aW9uRW50aXR5ICYmCiAgICAgICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50CiAgICAgICAgICAgICAgLmdldEZ1bmN0aW9uVHlwZVZhcmlhYmxlcyhtZW1iZXIpCiAgICAgICAgICAgICAgLmlzTm90RW1wdHkpIHsKICAgICAgICBmKG1lbWJlcik7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoR2VuZXJpY0luc3RhbmNlTWV0aG9kKEZ1bmN0aW9uIGYpIHsKICAgIF9saXZlTWVtYmVyVXNhZ2UuZm9yRWFjaCgoTWVtYmVyRW50aXR5IG1lbWJlciwgTWVtYmVyVXNhZ2UgdXNhZ2UpIHsKICAgICAgaWYgKG1lbWJlciBpcyBGdW5jdGlvbkVudGl0eSAmJgogICAgICAgICAgbWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIgJiYKICAgICAgICAgIF9jbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQKICAgICAgICAgICAgICAuZ2V0RnVuY3Rpb25UeXBlVmFyaWFibGVzKG1lbWJlcikKICAgICAgICAgICAgICAuaXNOb3RFbXB0eSkgewogICAgICAgIGYobWVtYmVyKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hHZW5lcmljQ2xvc3VyZUNhbGxNZXRob2QoRnVuY3Rpb24gZikgewogICAgX2xpdmVNZW1iZXJVc2FnZS5mb3JFYWNoKChNZW1iZXJFbnRpdHkgbWVtYmVyLCBNZW1iZXJVc2FnZSB1c2FnZSkgewogICAgICBpZiAobWVtYmVyLm5hbWUgPT0gSWRlbnRpZmllcnMuY2FsbCAmJgogICAgICAgICAgbWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIgJiYKICAgICAgICAgIG1lbWJlci5lbmNsb3NpbmdDbGFzcy5pc0Nsb3N1cmUgJiYKICAgICAgICAgIG1lbWJlciBpcyBGdW5jdGlvbkVudGl0eSAmJgogICAgICAgICAgX2Nsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudAogICAgICAgICAgICAgIC5nZXRGdW5jdGlvblR5cGVWYXJpYWJsZXMobWVtYmVyKQogICAgICAgICAgICAgIC5pc05vdEVtcHR5KSB7CiAgICAgICAgZihtZW1iZXIpOwogICAgICB9CiAgICB9KTsKICB9CgogIExpc3Q8RnVuY3Rpb25FbnRpdHk+IF91c2VyTm9TdWNoTWV0aG9kc0NhY2hlOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxGdW5jdGlvbkVudGl0eT4gZ2V0IHVzZXJOb1N1Y2hNZXRob2RzIHsKICAgIGlmIChfdXNlck5vU3VjaE1ldGhvZHNDYWNoZSA9PSBudWxsKSB7CiAgICAgIF91c2VyTm9TdWNoTWV0aG9kc0NhY2hlID0gPEZ1bmN0aW9uRW50aXR5PltdOwoKICAgICAgX2xpdmVNZW1iZXJVc2FnZS5mb3JFYWNoKChNZW1iZXJFbnRpdHkgbWVtYmVyLCBNZW1iZXJVc2FnZSBtZW1iZXJVc2FnZSkgewogICAgICAgIGlmIChtZW1iZXIgaXMgRnVuY3Rpb25FbnRpdHkpIHsKICAgICAgICAgIGlmIChtZW1iZXIuaXNJbnN0YW5jZU1lbWJlciAmJgogICAgICAgICAgICAgIG1lbWJlci5uYW1lID09IElkZW50aWZpZXJzLm5vU3VjaE1ldGhvZF8gJiYKICAgICAgICAgICAgICAhX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzCiAgICAgICAgICAgICAgICAgIC5pc0RlZmF1bHROb1N1Y2hNZXRob2RJbXBsZW1lbnRhdGlvbihtZW1iZXIpKSB7CiAgICAgICAgICAgIF91c2VyTm9TdWNoTWV0aG9kc0NhY2hlLmFkZChtZW1iZXIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CgogICAgcmV0dXJuIF91c2VyTm9TdWNoTWV0aG9kc0NhY2hlOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8TG9jYWw+IGdldCBnZW5lcmljTG9jYWxGdW5jdGlvbnMgPT4gY29uc3QgW107CgogIFNldDxGdW5jdGlvbkVudGl0eT4gX2Nsb3N1cml6ZWRNZW1iZXJzQ2FjaGU7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPEZ1bmN0aW9uRW50aXR5PiBnZXQgY2xvc3VyaXplZE1lbWJlcnMgewogICAgaWYgKF9jbG9zdXJpemVkTWVtYmVyc0NhY2hlID09IG51bGwpIHsKICAgICAgX2Nsb3N1cml6ZWRNZW1iZXJzQ2FjaGUgPSB7fTsKICAgICAgX2xpdmVNZW1iZXJVc2FnZS5mb3JFYWNoKChNZW1iZXJFbnRpdHkgbWVtYmVyLCBNZW1iZXJVc2FnZSB1c2FnZSkgewogICAgICAgIGlmICgobWVtYmVyLmlzRnVuY3Rpb24gfHwgbWVtYmVyIGlzIEpHZW5lcmF0b3JCb2R5KSAmJgogICAgICAgICAgICBtZW1iZXIuaXNJbnN0YW5jZU1lbWJlciAmJgogICAgICAgICAgICB1c2FnZS5oYXNSZWFkKSB7CiAgICAgICAgICBfY2xvc3VyaXplZE1lbWJlcnNDYWNoZS5hZGQobWVtYmVyKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIF9jbG9zdXJpemVkTWVtYmVyc0NhY2hlOwogIH0KCiAgU2V0PEZ1bmN0aW9uRW50aXR5PiBfY2xvc3VyaXplZFN0YXRpY3NDYWNoZTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8RnVuY3Rpb25FbnRpdHk+IGdldCBjbG9zdXJpemVkU3RhdGljcyB7CiAgICBpZiAoX2Nsb3N1cml6ZWRTdGF0aWNzQ2FjaGUgPT0gbnVsbCkgewogICAgICBfY2xvc3VyaXplZFN0YXRpY3NDYWNoZSA9IHt9OwogICAgICBfbGl2ZU1lbWJlclVzYWdlLmZvckVhY2goKE1lbWJlckVudGl0eSBtZW1iZXIsIE1lbWJlclVzYWdlIHVzYWdlKSB7CiAgICAgICAgaWYgKG1lbWJlci5pc0Z1bmN0aW9uICYmCiAgICAgICAgICAgIChtZW1iZXIuaXNTdGF0aWMgfHwgbWVtYmVyLmlzVG9wTGV2ZWwpICYmCiAgICAgICAgICAgIHVzYWdlLmhhc1JlYWQpIHsKICAgICAgICAgIF9jbG9zdXJpemVkU3RhdGljc0NhY2hlLmFkZChtZW1iZXIpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gX2Nsb3N1cml6ZWRTdGF0aWNzQ2FjaGU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hTdGF0aWNUeXBlQXJndW1lbnQoCiAgICAgIHZvaWQgZihFbnRpdHkgZnVuY3Rpb24sIFNldDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykpIHsKICAgIF9zdGF0aWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXMuZm9yRWFjaChmKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaER5bmFtaWNUeXBlQXJndW1lbnQoCiAgICAgIHZvaWQgZihTZWxlY3RvciBzZWxlY3RvciwgU2V0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSkgewogICAgX2R5bmFtaWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXMuZm9yRWFjaChmKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaEludm9rZWROYW1lKAogICAgICBmKFN0cmluZyBuYW1lLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+IHNlbGVjdG9ycykpIHsKICAgIF9pbnZva2VkTmFtZXMuZm9yRWFjaChmKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaEludm9rZWRHZXR0ZXIoCiAgICAgIGYoU3RyaW5nIG5hbWUsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4gc2VsZWN0b3JzKSkgewogICAgX2ludm9rZWRHZXR0ZXJzLmZvckVhY2goZik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hJbnZva2VkU2V0dGVyKAogICAgICBmKFN0cmluZyBuYW1lLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+IHNlbGVjdG9ycykpIHsKICAgIF9pbnZva2VkU2V0dGVycy5mb3JFYWNoKGYpOwogIH0KCiAgYm9vbCBfaGFzTWF0Y2hpbmdTZWxlY3RvcihNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+IHNlbGVjdG9ycywKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciwgSkNsb3NlZFdvcmxkIHdvcmxkKSB7CiAgICBpZiAoc2VsZWN0b3JzID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIGZvciAoU2VsZWN0b3Igc2VsZWN0b3IgaW4gc2VsZWN0b3JzLmtleXMpIHsKICAgICAgaWYgKHNlbGVjdG9yLmFwcGxpZXNVbm5hbWVkKG1lbWJlcikpIHsKICAgICAgICBTZWxlY3RvckNvbnN0cmFpbnRzIG1hc2tzID0gc2VsZWN0b3JzW3NlbGVjdG9yXTsKICAgICAgICBpZiAobWFza3MuY2FuSGl0KG1lbWJlciwgc2VsZWN0b3IubWVtYmVyTmFtZSwgd29ybGQpKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaGFzSW52b2tlZEdldHRlcihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBNZW1iZXJVc2FnZSBtZW1iZXJVc2FnZSA9IF9saXZlTWVtYmVyVXNhZ2VbbWVtYmVyXTsKICAgIGlmIChtZW1iZXJVc2FnZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gbWVtYmVyVXNhZ2UucmVhZHMuY29udGFpbnMoQWNjZXNzLmR5bmFtaWNBY2Nlc3MpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBtZXRob2RzTmVlZHNTdXBlckdldHRlcihGdW5jdGlvbkVudGl0eSBmdW5jdGlvbikgewogICAgTWVtYmVyVXNhZ2UgbWVtYmVyVXNhZ2UgPSBfbGl2ZU1lbWJlclVzYWdlW2Z1bmN0aW9uXTsKICAgIGlmIChtZW1iZXJVc2FnZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gbWVtYmVyVXNhZ2UucmVhZHMuY29udGFpbnMoQWNjZXNzLnN1cGVyQWNjZXNzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaGFzSW52b2tlZFNldHRlcihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBNZW1iZXJVc2FnZSBtZW1iZXJVc2FnZSA9IF9saXZlTWVtYmVyVXNhZ2VbbWVtYmVyXTsKICAgIGlmIChtZW1iZXJVc2FnZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gbWVtYmVyVXNhZ2Uud3JpdGVzLmNvbnRhaW5zKEFjY2Vzcy5keW5hbWljQWNjZXNzKTsKICB9CgogIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4gX2FzVW5tb2RpZmlhYmxlKAogICAgICBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+IG1hcCkgewogICAgaWYgKG1hcCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBuZXcgVW5tb2RpZmlhYmxlTWFwVmlldyhtYXApOwogIH0KCiAgQG92ZXJyaWRlCiAgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPiBpbnZvY2F0aW9uc0J5TmFtZShTdHJpbmcgbmFtZSkgewogICAgcmV0dXJuIF9hc1VubW9kaWZpYWJsZShfaW52b2tlZE5hbWVzW25hbWVdKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPFNlbGVjdG9yPiBnZXR0ZXJJbnZvY2F0aW9uc0J5TmFtZShTdHJpbmcgbmFtZSkgewogICAgcmV0dXJuIF9pbnZva2VkR2V0dGVyc1tuYW1lXT8ua2V5czsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPFNlbGVjdG9yPiBzZXR0ZXJJbnZvY2F0aW9uc0J5TmFtZShTdHJpbmcgbmFtZSkgewogICAgcmV0dXJuIF9pbnZva2VkU2V0dGVyc1tuYW1lXT8ua2V5czsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IGdldENvbnN0YW50c0ZvckVtaXNzaW9uKAogICAgICBbQ29tcGFyYXRvcjxDb25zdGFudFZhbHVlPiBwcmVTb3J0Q29tcGFyZV0pIHsKICAgIC8vIFdlIG11c3QgZW1pdCBkZXBlbmRlbmNpZXMgYmVmb3JlIHRoZWlyIHVzZXMuCiAgICBTZXQ8Q29uc3RhbnRWYWx1ZT4gc2VlbkNvbnN0YW50cyA9IG5ldyBTZXQ8Q29uc3RhbnRWYWx1ZT4oKTsKICAgIExpc3Q8Q29uc3RhbnRWYWx1ZT4gcmVzdWx0ID0gbmV3IExpc3Q8Q29uc3RhbnRWYWx1ZT4oKTsKCiAgICB2b2lkIGFkZENvbnN0YW50KENvbnN0YW50VmFsdWUgY29uc3RhbnQpIHsKICAgICAgaWYgKCFzZWVuQ29uc3RhbnRzLmNvbnRhaW5zKGNvbnN0YW50KSkgewogICAgICAgIGNvbnN0YW50LmdldERlcGVuZGVuY2llcygpLmZvckVhY2goYWRkQ29uc3RhbnQpOwogICAgICAgIGFzc2VydCghc2VlbkNvbnN0YW50cy5jb250YWlucyhjb25zdGFudCkpOwogICAgICAgIHJlc3VsdC5hZGQoY29uc3RhbnQpOwogICAgICAgIHNlZW5Db25zdGFudHMuYWRkKGNvbnN0YW50KTsKICAgICAgfQogICAgfQoKICAgIGlmIChwcmVTb3J0Q29tcGFyZSAhPSBudWxsKSB7CiAgICAgIExpc3Q8Q29uc3RhbnRWYWx1ZT4gc29ydGVkID0gX2NvbXBpbGVkQ29uc3RhbnRzLnRvTGlzdCgpOwogICAgICBzb3J0ZWQuc29ydChwcmVTb3J0Q29tcGFyZSk7CiAgICAgIHNvcnRlZC5mb3JFYWNoKGFkZENvbnN0YW50KTsKICAgIH0gZWxzZSB7CiAgICAgIF9jb21waWxlZENvbnN0YW50cy5mb3JFYWNoKGFkZENvbnN0YW50KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzQWxpYXNlZFN1cGVyTWVtYmVyKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIE1lbWJlclVzYWdlIHVzYWdlID0gX2xpdmVNZW1iZXJVc2FnZVttZW1iZXJdOwogICAgaWYgKHVzYWdlID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB1c2FnZS5pbnZva2VzLmNvbnRhaW5zKEFjY2Vzcy5zdXBlckFjY2VzcykgfHwKICAgICAgICB1c2FnZS53cml0ZXMuY29udGFpbnMoQWNjZXNzLnN1cGVyQWNjZXNzKTsKICB9Cn0Kg4YATk48ARoBGTAiIyQhSj4kHxwYHhwmEkwdAScERz0yQgFOFRgCATYxRkkBLgE5LgFFATsBOwEbRQEdRQEdRQFMRxI2OQE3MQE5ASs5AUEsAUIsAUwsBktPTjMzAUgyATUCATclIzgBTFAUBjQ9MVABTCUGKkoBPEcBSDZKNko2ATkjAU4BPjYlAU0hBk4aSCQBTR1HJAFNHkckATcBQgFHAUBAPgFQJQFRAUMBSj4BNgw6KQQBMk4+TCI5JDkiRUlEMictMQYBUSMoN0w6FVEKCgYEAUoxKTAtOUAXCggGEgQBNks7JzAtOUc3NgoIBjYEAU5LBAEwIT0EATAhPQQBGz4tJwETMTYzPzU5OzMpChYKBgEfIiM8PxQvT1BPMgoPH0EULjUwCg8fQRQuNjEKDwYEATNFLSE3M0tDHzk8EwY6BAEyIwQBQCkEAU8uOjoeKjoPLS0mRkxKFA8nLRdKDygtF0sPKjoPKzoPJTsPKTkPJDkPJToPJSUPLj8PLTNJPxdLDygxST8XSzwlTSgKDyMtDyInLE4GHSgGBAFLMDAxPz8IBAEoSzAqOjkdJjRODyQIBgQBTjBLQR8uGUslKTE9SysnCipNI04ZTAoBSD0KST4KLTM0QFAyFQ4MCgEpLywzHQwtKzMdDC4rMx0MCg9LHicKCCcmCA0mHwgGEgQBSR8wIU1JKy45Ki0GJwQBMy9KBAFRS08NMDUjMxUIFAYBLzQGBAEwSgFRAQxDJgQBTS0uMisEATEiBAEtIgQBDBk5RBopCAg/L0I8Mh09Ly8vJSkpSEo6BAIBMR0BOQEMLgEMOwEMPQEMMwEMJQEMOAEMMwEMLgE0AUcBSQFJAUQBRwEMNwE9HyglIBUlHh4xREZGQUQkMCYqKkpMAQw6GkhNEwgIIgQBDCpIJiowHRMICAQBDDJIJiUqMB0TCAgEAQw1SC0lLSYqMB0TCAgEATABDDMrNAFQKCk6K0IxDAoKBgEkBAEMOQEvAQwzKyRKPycdLwoKBiQEAS8BDDMrJEohNh0vCgoGJAQBDCI+MAQBDCNAMQQBDBtGHgQBDB1GIAQBDB1GIAQBSjEpMC05QBcKCAYSBAEMLzgrPQQBDDo6KzsEAQwvOCs+BAE2MCIpBAEMRjEEAQw8KAQBDDwoBAEMMzQ0QTwBLy85Mx4lCAYBIkAjIw0vBhMEAQwzMiU5MwQCAThwYWNrYWdlOmNvbXBpbGVyL3NyYy91bml2ZXJzZS9jb2RlZ2VuX3dvcmxkX2J1aWxkZXIuZGFydERzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy91bml2ZXJzZS9yZXNvbHV0aW9uX3dvcmxkX2J1aWxkZXIuZGFydMAAm68vLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnIHNob3cgSWRlbnRpZmllcnMsIE5hbWVzOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2lyL3N0YXRpY190eXBlLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvYW5ub3RhdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9maWVsZF9hbmFseXNpcy5kYXJ0JyBzaG93IEtGaWVsZEFuYWx5c2lzOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvYmFja2VuZF91c2FnZS5kYXJ0JwogICAgc2hvdyBCYWNrZW5kVXNhZ2UsIEJhY2tlbmRVc2FnZUJ1aWxkZXI7CmltcG9ydCAnLi4vanNfYmFja2VuZC9pbnRlcmNlcHRvcl9kYXRhLmRhcnQnIHNob3cgSW50ZXJjZXB0b3JEYXRhQnVpbGRlcjsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hdGl2ZV9kYXRhLmRhcnQnIHNob3cgTmF0aXZlQmFzaWNEYXRhLCBOYXRpdmVEYXRhQnVpbGRlcjsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25vX3N1Y2hfbWV0aG9kX3JlZ2lzdHJ5LmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19yZXNvbHV0aW9uLmRhcnQnOwppbXBvcnQgJy4uL2tlcm5lbC9lbGVtZW50X21hcF9pbXBsLmRhcnQnOwppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfd29ybGQuZGFydCc7CmltcG9ydCAnLi4vbmF0aXZlL2VucXVldWUuZGFydCcgc2hvdyBOYXRpdmVSZXNvbHV0aW9uRW5xdWV1ZXI7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi91dGlsL2VudW1zZXQuZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnIHNob3cgS0Nsb3NlZFdvcmxkLCBPcGVuV29ybGQ7CmltcG9ydCAnY2FsbF9zdHJ1Y3R1cmUuZGFydCc7CmltcG9ydCAnY2xhc3NfaGllcmFyY2h5LmRhcnQnIHNob3cgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyLCBDbGFzc1F1ZXJpZXM7CmltcG9ydCAnY2xhc3Nfc2V0LmRhcnQnOwppbXBvcnQgJ21lbWJlcl91c2FnZS5kYXJ0JzsKaW1wb3J0ICdzZWxlY3Rvci5kYXJ0JyBzaG93IFNlbGVjdG9yOwppbXBvcnQgJ3VzZS5kYXJ0JwogICAgc2hvdyBDb25zdGFudFVzZSwgRHluYW1pY1VzZSwgRHluYW1pY1VzZUtpbmQsIFN0YXRpY1VzZSwgU3RhdGljVXNlS2luZDsKaW1wb3J0ICd3b3JsZF9idWlsZGVyLmRhcnQnOwoKYWJzdHJhY3QgY2xhc3MgUmVzb2x1dGlvbldvcmxkQnVpbGRlciBpbXBsZW1lbnRzIFdvcmxkQnVpbGRlciwgT3BlbldvcmxkIHsKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW21lbWJlcl0gaGFzIGJlZW4gbWFya2VkIGFzIHVzZWQgKGNhbGxlZCwgcmVhZCwgZXRjLikgaW4KICAvLy8gdGhpcyB3b3JsZCBidWlsZGVyLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1heWJlIHRoaXMgc2hvdWxkIGJlIHBhcnQgb2YgW0Nsb3NlZFdvcmxkXSAoaW5zdGVhZCkuCiAgYm9vbCBpc01lbWJlclVzZWQoTWVtYmVyRW50aXR5IG1lbWJlcik7CgogIC8vLyBUaGUgY2xvc2VkIHdvcmxkIGNvbXB1dGVkIGJ5IHRoaXMgd29ybGQgYnVpbGRlci4KICAvLy8KICAvLy8gVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBhZnRlciB0aGUgd29ybGQgYnVpbGRlciBoYXMgYmVlbiBjbG9zZWQuCiAgS0Nsb3NlZFdvcmxkIGdldCBjbG9zZWRXb3JsZEZvclRlc3Rpbmc7CgogIHZvaWQgcmVnaXN0ZXJDbGFzcyhDbGFzc0VudGl0eSBjbHMpOwp9CgovLy8gRXh0ZW5kZWQgW1Jlc29sdXRpb25Xb3JsZEJ1aWxkZXJdIGludGVyZmFjZSB1c2VkIGJ5IHRoZQovLy8gW1Jlc29sdXRpb25FbnF1ZXVlcl0uCmFic3RyYWN0IGNsYXNzIFJlc29sdXRpb25FbnF1ZXVlcldvcmxkQnVpbGRlciBleHRlbmRzIFJlc29sdXRpb25Xb3JsZEJ1aWxkZXIgewogIC8vLyBSZXR1cm5zIHRoZSBjbGFzc2VzIHJlZ2lzdGVyZWQgYXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbnN0YW50aWF0ZWQuCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBwcm9jZXNzZWRDbGFzc2VzOwoKICAvLy8gUmVnaXN0ZXJzIHRoYXQgW2VsZW1lbnRdIGhhcyBiZWVuIGNsb3N1cml6ZWQuCiAgdm9pZCByZWdpc3RlckNsb3N1cml6ZWRNZW1iZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmVnaXN0ZXIgW3R5cGVdIGFzIChkaXJlY3RseSkgaW5zdGFudGlhdGVkLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEZ1bGx5IGVuZm9yY2UgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBleGFjdCwgdGhyb3VnaAogIC8vIHN1YmNsYXNzIGFuZCB0aHJvdWdoIHN1YnR5cGUgaW5zdGFudGlhdGVkIHR5cGVzL2NsYXNzZXMuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3VwcG9ydCB1bmtub3duIHR5cGUgYXJndW1lbnRzIGZvciBnZW5lcmljIHR5cGVzLgogIHZvaWQgcmVnaXN0ZXJUeXBlSW5zdGFudGlhdGlvbigKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlLCBDbGFzc1VzZWRDYWxsYmFjayBjbGFzc1VzZWQsCiAgICAgIHtDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3Rvcn0pOwoKICAvLy8gQ29tcHV0ZXMgdXNhZ2UgZm9yIGFsbCBtZW1iZXJzIGRlY2xhcmVkIGJ5IFtjbHNdLiBDYWxscyBbbWVtYmVyc1VzZWRdIHdpdGgKICAvLy8gdGhlIHVzYWdlIGNoYW5nZXMgZm9yIGVhY2ggbWVtYmVyLgogIC8vLwogIC8vLyBJZiBbY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5XSBpcyBgdHJ1ZWAgd2UgY2hlY2sgdGhhdCBubyBuZXcgbWVtYmVyCiAgLy8vIHVzYWdlIGNhbiBiZSBmb3VuZC4gVGhpcyBjaGVjayBpcyBwZXJmb3JtZWQgd2l0aG91dCBjaGFuZ2luZyB0aGUgYWxyZWFkeQogIC8vLyBjb2xsZWN0ZWQgbWVtYmVyIHVzYWdlLgogIHZvaWQgcHJvY2Vzc0NsYXNzTWVtYmVycyhDbGFzc0VudGl0eSBjbHMsIE1lbWJlclVzZWRDYWxsYmFjayBtZW1iZXJVc2VkLAogICAgICB7Ym9vbCBjaGVja0VucXVldWVyQ29uc2lzdGVuY3k6IGZhbHNlfSk7CgogIC8vLyBBcHBsaWVzIHRoZSBbZHluYW1pY1VzZV0gdG8gYXBwbGljYWJsZSBpbnN0YW5jZSBtZW1iZXJzLiBDYWxscwogIC8vLyBbbWVtYmVyc1VzZWRdIHdpdGggdGhlIHVzYWdlIGNoYW5nZXMgZm9yIGVhY2ggbWVtYmVyLgogIHZvaWQgcmVnaXN0ZXJEeW5hbWljVXNlKER5bmFtaWNVc2UgZHluYW1pY1VzZSwgTWVtYmVyVXNlZENhbGxiYWNrIG1lbWJlclVzZWQpOwoKICAvLy8gQXBwbGllcyB0aGUgW3N0YXRpY1VzZV0gdG8gYXBwbGljYWJsZSBtZW1iZXJzLiBDYWxscyBbbWVtYmVyc1VzZWRdIHdpdGgKICAvLy8gdGhlIHVzYWdlIGNoYW5nZXMgZm9yIGVhY2ggbWVtYmVyLgogIHZvaWQgcmVnaXN0ZXJTdGF0aWNVc2UoU3RhdGljVXNlIHN0YXRpY1VzZSwgTWVtYmVyVXNlZENhbGxiYWNrIG1lbWJlclVzZWQpOwoKICAvLy8gUmVnaXN0ZXIgdGhlIGNvbnN0YW50IFt1c2VdIHdpdGggdGhpcyB3b3JsZCBidWlsZGVyLiBSZXR1cm5zIGB0cnVlYCBpZgogIC8vLyB0aGUgY29uc3RhbnQgdXNlIHdhcyBuZXcgdG8gdGhlIHdvcmxkLgogIGJvb2wgcmVnaXN0ZXJDb25zdGFudFVzZShDb25zdGFudFVzZSB1c2UpOwoKICBib29sIGlzTWVtYmVyUHJvY2Vzc2VkKE1lbWJlckVudGl0eSBtZW1iZXIpOwogIHZvaWQgcmVnaXN0ZXJQcm9jZXNzZWRNZW1iZXIoTWVtYmVyRW50aXR5IG1lbWJlcik7CiAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBnZXQgcHJvY2Vzc2VkTWVtYmVyczsKCiAgLy8vIFJlZ2lzdGVycyB0aGF0IFt0eXBlXSBpcyBjaGVja2VkIGluIHRoaXMgd29ybGQgYnVpbGRlci4gVGhlIHVuYWxpYXNlZCB0eXBlCiAgLy8vIGlzIHJldHVybmVkLgogIHZvaWQgcmVnaXN0ZXJJc0NoZWNrKERhcnRUeXBlIHR5cGUpOwoKICB2b2lkIHJlZ2lzdGVyTmFtZWRUeXBlVmFyaWFibGVOZXdSdGkoVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGUpOwoKICB2b2lkIHJlZ2lzdGVyVHlwZVZhcmlhYmxlVHlwZUxpdGVyYWwoVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGUpOwp9CgovLy8gVGhlIHR5cGUgYW5kIGtpbmQgb2YgYW4gaW5zdGFudGlhdGlvbiByZWdpc3RlcmVkIHRocm91Z2gKLy8vIGBSZXNvbHV0aW9uV29ybGRCdWlsZGVyLnJlZ2lzdGVyVHlwZUluc3RhbnRpYXRpb25gLgpjbGFzcyBJbnN0YW5jZSB7CiAgZmluYWwgSW50ZXJmYWNlVHlwZSB0eXBlOwogIGZpbmFsIEluc3RhbnRpYXRpb24ga2luZDsKCiAgSW5zdGFuY2UodGhpcy50eXBlLCB0aGlzLmtpbmQpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiBIYXNoaW5nLm9iamVjdEhhc2godHlwZSwgSGFzaGluZy5vYmplY3RIYXNoKGtpbmQpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgSW5zdGFuY2UpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0eXBlID09IG90aGVyLnR5cGUgJiYga2luZCA9PSBvdGhlci5raW5kOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUodHlwZSk7CiAgICBpZiAoa2luZCA9PSBJbnN0YW50aWF0aW9uLkRJUkVDVExZX0lOU1RBTlRJQVRFRCkgewogICAgICBzYi53cml0ZSgnIGRpcmVjdGx5Jyk7CiAgICB9IGVsc2UgaWYgKGtpbmQgPT0gSW5zdGFudGlhdGlvbi5BQlNUUkFDVExZX0lOU1RBTlRJQVRFRCkgewogICAgICBzYi53cml0ZSgnIGFic3RyYWN0bHknKTsKICAgIH0gZWxzZSBpZiAoa2luZCA9PSBJbnN0YW50aWF0aW9uLlVOSU5TVEFOVElBVEVEKSB7CiAgICAgIHNiLndyaXRlKCcgbm9uZScpOwogICAgfQogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgovLy8gSW5mb3JtYXRpb24gYWJvdXQgaW5zdGFudGlhdGlvbnMgb2YgYSBjbGFzcy4KY2xhc3MgSW5zdGFudGlhdGlvbkluZm8gewogIC8vLyBBIG1hcCBmcm9tIGNvbnN0cnVjdG9yIG9mIHRoZSBjbGFzcyB0byB0aGVpciBpbnN0YW50aWF0ZWQgdHlwZXMuCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZQogIC8vLwogIC8vLyAgICBpbXBvcnQgJ2RhcnQ6aHRtbCc7CiAgLy8vCiAgLy8vICAgIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0Q2xhc3M8Uz4gewogIC8vLyAgICAgIGZhY3RvcnkgQWJzdHJhY3RDbGFzcy5hKCkgPSBDbGFzczxTPi5hOwogIC8vLyAgICAgIGZhY3RvcnkgQWJzdHJhY3RDbGFzcy5iKCkgPT4gbmV3IENsYXNzPFM+LmIoKTsKICAvLy8gICAgfQogIC8vLyAgICBjbGFzcyBDbGFzczxUPiBpbXBsZW1lbnRzIEFic3RyYWN0Q2xhc3M8VD4gewogIC8vLyAgICAgIENsYXNzLmEoKTsKICAvLy8gICAgICBDbGFzcy5iKCk7CiAgLy8vICAgICAgZmFjdG9yeSBDbGFzcy5jKCkgPSBDbGFzcy5iPFQ+OwogIC8vLyAgICB9CiAgLy8vCiAgLy8vCiAgLy8vICAgIG1haW4oKSB7CiAgLy8vICAgICAgbmV3IENsYXNzLmEoKTsKICAvLy8gICAgICBuZXcgQ2xhc3M8aW50Pi5hKCk7CiAgLy8vICAgICAgbmV3IENsYXNzPFN0cmluZz4uYigpOwogIC8vLyAgICAgIG5ldyBDbGFzczxudW0+LmMoKTsKICAvLy8gICAgICBuZXcgQWJzdHJhY3RDbGFzczxkb3VibGU+LmEoKTsKICAvLy8gICAgICBuZXcgQWJzdHJhY3RDbGFzczxib29sPi5iKCk7CiAgLy8vICAgICAgbmV3IERpdkVsZW1lbnQoKTsgLy8gbmF0aXZlIGluc3RhbnRpYXRpb24KICAvLy8gICAgfQogIC8vLwogIC8vLyB3aWxsIGdlbmVyYXRlIHRoZSBtYXBwaW5ncwogIC8vLwogIC8vLyAgICBBYnN0cmFjdENsYXNzOiB7CiAgLy8vICAgICAgQWJzdHJhY3RDbGFzcy5hOiB7CiAgLy8vICAgICAgICBBYnN0cmFjdENsYXNzPGRvdWJsZT4gbm9uZSwgLy8gZnJvbSBgbmV3IEFic3RyYWN0Q2xhc3M8ZG91YmxlPi5hKClgCiAgLy8vICAgICAgfSwKICAvLy8gICAgICBBYnN0cmFjdENsYXNzLmI6IHsKICAvLy8gICAgICAgIEFic3RyYWN0Q2xhc3M8Ym9vbD4gbm9uZSwgLy8gZnJvbSBgbmV3IEFic3RyYWN0Q2xhc3M8Ym9vbD4uYigpYAogIC8vLyAgICAgIH0sCiAgLy8vICAgIH0sCiAgLy8vICAgIENsYXNzOiB7CiAgLy8vICAgICAgQ2xhc3MuYTogewogIC8vLyAgICAgICAgQ2xhc3MgZGlyZWN0bHksIC8vIGZyb20gYG5ldyBDbGFzcy5hKClgCiAgLy8vICAgICAgICBDbGFzczxpbnQ+IGRpcmVjdGx5LCAvLyBmcm9tIGBuZXcgQ2xhc3M8aW50Pi5hKClgCiAgLy8vICAgICAgICBDbGFzczxTPiBkaXJlY3RseSByZWRpcmVjdCwgLy8gZnJvbSBgZmFjdG9yeSBBYnN0cmFjdENsYXNzLmFgCiAgLy8vICAgICAgfSwKICAvLy8gICAgICBDbGFzcy5iOiB7CiAgLy8vICAgICAgICBDbGFzczxTdHJpbmc+IGRpcmVjdGx5LCAvLyBmcm9tIGBuZXcgQ2xhc3M8U3RyaW5nPi5iKClgCiAgLy8vICAgICAgICBDbGFzczxUPiBkaXJlY3RseSByZWRpcmVjdCwgLy8gZnJvbSBgZmFjdG9yeSBDbGFzcy5jYAogIC8vLyAgICAgICAgQ2xhc3M8Uz4gZGlyZWN0bHksIC8vIGZyb20gYGZhY3RvcnkgQWJzdHJhY3RDbGFzcy5iYAogIC8vLyAgICAgIH0sCiAgLy8vICAgICAgQ2xhc3MuYzogewogIC8vLyAgICAgICAgQ2xhc3M8bnVtPiBkaXJlY3RseSwgLy8gZnJvbSBgbmV3IENsYXNzPG51bT4uYygpYAogIC8vLyAgICAgIH0sCiAgLy8vICAgIH0sCiAgLy8vICAgIERpdkVsZW1lbnQ6IHsKICAvLy8gICAgICBEaXZFbGVtZW50OiB7CiAgLy8vICAgICAgICBEaXZFbGVtZW50IGFic3RyYWN0bHksIC8vIGZyb20gYG5ldyBEaXZFbGVtZW50KClgCiAgLy8vICAgICAgfSwKICAvLy8gICAgfQogIC8vLwogIC8vLyBJZiB0aGUgY29uc3RydWN0b3IgaXMgdW5rbm93biwgZm9yIGluc3RhbmNlIGZvciBuYXRpdmUgb3IgbWlycm9yIHVzYWdlLAogIC8vLyBgbnVsbGAgaXMgdXNlZCBhcyBrZXkuCiAgTWFwPENvbnN0cnVjdG9yRW50aXR5LCBTZXQ8SW5zdGFuY2U+PiBpbnN0YW50aWF0aW9uTWFwOwoKICAvLy8gUmVnaXN0ZXIgW3R5cGVdIGFzIHRoZSBpbnN0YW50aWF0aW9uIFtraW5kXSB1c2luZyBbY29uc3RydWN0b3JdLgogIHZvaWQgYWRkSW5zdGFudGlhdGlvbigKICAgICAgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IsIEludGVyZmFjZVR5cGUgdHlwZSwgSW5zdGFudGlhdGlvbiBraW5kKSB7CiAgICBpbnN0YW50aWF0aW9uTWFwID8/PSA8Q29uc3RydWN0b3JFbnRpdHksIFNldDxJbnN0YW5jZT4+e307CiAgICBpbnN0YW50aWF0aW9uTWFwCiAgICAgICAgLnB1dElmQWJzZW50KGNvbnN0cnVjdG9yLCAoKSA9PiBuZXcgU2V0PEluc3RhbmNlPigpKQogICAgICAgIC5hZGQobmV3IEluc3RhbmNlKHR5cGUsIGtpbmQpKTsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIEluc3RhbnRpYXRpb24uRElSRUNUTFlfSU5TVEFOVElBVEVEOgogICAgICAgIGlzRGlyZWN0bHlJbnN0YW50aWF0ZWQgPSB0cnVlOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEluc3RhbnRpYXRpb24uQUJTVFJBQ1RMWV9JTlNUQU5USUFURUQ6CiAgICAgICAgaXNBYnN0cmFjdGx5SW5zdGFudGlhdGVkID0gdHJ1ZTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBJbnN0YW50aWF0aW9uLlVOSU5TVEFOVElBVEVEOgogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJJbnN0YW50aWF0aW9uICRraW5kIGlzIG5vdCBhbGxvd2VkLiIpOwogICAgfQogIH0KCiAgLy8vIGB0cnVlYCBpZiB0aGUgY2xhc3MgaXMgZWl0aGVyIGRpcmVjdGx5IG9yIGFic3RyYWN0bHkgaW5zdGFudGlhdGVkLgogIGJvb2wgZ2V0IGhhc0luc3RhbnRpYXRpb24gPT4KICAgICAgaXNEaXJlY3RseUluc3RhbnRpYXRlZCB8fCBpc0Fic3RyYWN0bHlJbnN0YW50aWF0ZWQ7CgogIC8vLyBgdHJ1ZWAgaWYgdGhlIGNsYXNzIGlzIGRpcmVjdGx5IGluc3RhbnRpYXRlZC4KICBib29sIGlzRGlyZWN0bHlJbnN0YW50aWF0ZWQgPSBmYWxzZTsKCiAgLy8vIGB0cnVlYCBpZiB0aGUgY2xhc3MgaXMgYWJzdHJhY3RseSBpbnN0YW50aWF0ZWQuCiAgYm9vbCBpc0Fic3RyYWN0bHlJbnN0YW50aWF0ZWQgPSBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoJ0luc3RhbnRpYXRpb25JbmZvWycpOwogICAgaWYgKGluc3RhbnRpYXRpb25NYXAgIT0gbnVsbCkgewogICAgICBib29sIG5lZWRzQ29tbWEgPSBmYWxzZTsKICAgICAgaW5zdGFudGlhdGlvbk1hcAogICAgICAgICAgLmZvckVhY2goKENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yLCBTZXQ8SW5zdGFuY2U+IHNldCkgewogICAgICAgIGlmIChuZWVkc0NvbW1hKSB7CiAgICAgICAgICBzYi53cml0ZSgnLCAnKTsKICAgICAgICB9CiAgICAgICAgaWYgKGNvbnN0cnVjdG9yICE9IG51bGwpIHsKICAgICAgICAgIHNiLndyaXRlKGNvbnN0cnVjdG9yKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc2Iud3JpdGUoJzx1bmtub3duPicpOwogICAgICAgIH0KICAgICAgICBzYi53cml0ZSgnOiAnKTsKICAgICAgICBzYi53cml0ZShzZXQpOwogICAgICAgIG5lZWRzQ29tbWEgPSB0cnVlOwogICAgICB9KTsKICAgIH0KICAgIHNiLndyaXRlKCddJyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCi8vLyBJbXBsZW1lbnRhdGlvbiBvZiBbUmVzb2x1dGlvbkVucXVldWVyV29ybGRCdWlsZGVyXS4KY2xhc3MgUmVzb2x1dGlvbldvcmxkQnVpbGRlckltcGwgZXh0ZW5kcyBXb3JsZEJ1aWxkZXJCYXNlCiAgICBpbXBsZW1lbnRzIFJlc29sdXRpb25FbnF1ZXVlcldvcmxkQnVpbGRlciB7CiAgLy8vIEluc3RhbnRpYXRpb24gaW5mb3JtYXRpb24gZm9yIGFsbCBjbGFzc2VzIHdpdGggaW5zdGFudGlhdGVkIHR5cGVzLgogIC8vLwogIC8vLyBJbnZhcmlhbnQ6IEVsZW1lbnRzIGFyZSBkZWNsYXJhdGlvbiBlbGVtZW50cy4KICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIEluc3RhbnRpYXRpb25JbmZvPiBfaW5zdGFudGlhdGlvbkluZm8gPQogICAgICA8Q2xhc3NFbnRpdHksIEluc3RhbnRpYXRpb25JbmZvPnt9OwoKICAvLy8gQ2xhc3NlcyBpbXBsZW1lbnRlZCBieSBkaXJlY3RseSBpbnN0YW50aWF0ZWQgY2xhc3Nlcy4KICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IF9pbXBsZW1lbnRlZENsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICAvLy8gVGhlIHNldCBvZiBhbGwgcmVmZXJlbmNlZCBzdGF0aWMgZmllbGRzLgogIC8vLwogIC8vLyBJbnZhcmlhbnQ6IEVsZW1lbnRzIGFyZSBkZWNsYXJhdGlvbiBlbGVtZW50cy4KICBmaW5hbCBTZXQ8RmllbGRFbnRpdHk+IF9hbGxSZWZlcmVuY2VkU3RhdGljRmllbGRzID0gbmV3IFNldDxGaWVsZEVudGl0eT4oKTsKCiAgLy8vIERvY3VtZW50YXRpb24gd2FudGVkIC0tIGpvaG5uaXdpbnRoZXIKICAvLy8KICAvLy8gSW52YXJpYW50OiBFbGVtZW50cyBhcmUgZGVjbGFyYXRpb24gZWxlbWVudHMuCiAgZmluYWwgU2V0PEZ1bmN0aW9uRW50aXR5PiBfbWV0aG9kc05lZWRpbmdTdXBlckdldHRlciA9CiAgICAgIG5ldyBTZXQ8RnVuY3Rpb25FbnRpdHk+KCk7CiAgZmluYWwgTWFwPFN0cmluZywgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPj4gX2ludm9rZWROYW1lcyA9CiAgICAgIDxTdHJpbmcsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4+e307CiAgZmluYWwgTWFwPFN0cmluZywgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPj4gX2ludm9rZWRHZXR0ZXJzID0KICAgICAgPFN0cmluZywgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPj57fTsKICBmaW5hbCBNYXA8U3RyaW5nLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+PiBfaW52b2tlZFNldHRlcnMgPQogICAgICA8U3RyaW5nLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+Pnt9OwoKICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIENsYXNzVXNhZ2U+IF9wcm9jZXNzZWRDbGFzc2VzID0KICAgICAgPENsYXNzRW50aXR5LCBDbGFzc1VzYWdlPnt9OwoKICBNYXA8Q2xhc3NFbnRpdHksIENsYXNzVXNhZ2U+IGdldCBjbGFzc1VzYWdlRm9yVGVzdGluZyA9PiBfcHJvY2Vzc2VkQ2xhc3NlczsKCiAgLy8vIE1hcCBvZiByZWdpc3RlcmVkIHVzYWdlIG9mIG1lbWJlcnMgb2YgbGl2ZSBjbGFzc2VzLgogIGZpbmFsIE1hcDxNZW1iZXJFbnRpdHksIE1lbWJlclVzYWdlPiBfbWVtYmVyVXNhZ2UgPQogICAgICA8TWVtYmVyRW50aXR5LCBNZW1iZXJVc2FnZT57fTsKCiAgTWFwPE1lbWJlckVudGl0eSwgTWVtYmVyVXNhZ2U+IGdldCBtZW1iZXJVc2FnZUZvclRlc3RpbmcgPT4gX21lbWJlclVzYWdlOwoKICAvLy8gTWFwIGNvbnRhaW5pbmcgaW5zdGFuY2UgbWVtYmVycyBvZiBsaXZlIGNsYXNzZXMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbgogIC8vLyBmdWxseSBpbnZva2VkIGR5bmFtaWNhbGx5LgogIC8vLwogIC8vLyBBIG1ldGhvZCBpcyBmdWxseSBpbnZva2VkIGlmIGFsbCBpcyBvcHRpb25hbCBwYXJhbWV0ZXIgaGF2ZSBiZWVuIHBhc3NlZAogIC8vLyBpbiBzb21lIGludm9jYXRpb24uCiAgZmluYWwgTWFwPFN0cmluZywgU2V0PE1lbWJlclVzYWdlPj4gX2ludm9rYWJsZUluc3RhbmNlTWVtYmVyc0J5TmFtZSA9CiAgICAgIDxTdHJpbmcsIFNldDxNZW1iZXJVc2FnZT4+e307CgogIC8vLyBNYXAgY29udGFpbmluZyBpbnN0YW5jZSBtZW1iZXJzIG9mIGxpdmUgY2xhc3NlcyB0aGF0IGhhdmUgbm90IHlldCBiZWVuCiAgLy8vIHJlYWQgZnJvbSBkeW5hbWljYWxseS4KICBmaW5hbCBNYXA8U3RyaW5nLCBTZXQ8TWVtYmVyVXNhZ2U+PiBfcmVhZGFibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWUgPQogICAgICA8U3RyaW5nLCBTZXQ8TWVtYmVyVXNhZ2U+Pnt9OwoKICAvLy8gTWFwIGNvbnRhaW5pbmcgaW5zdGFuY2UgbWVtYmVycyBvZiBsaXZlIGNsYXNzZXMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbgogIC8vLyB3cml0dGVuIHRvIGR5bmFtaWNhbGx5LgogIGZpbmFsIE1hcDxTdHJpbmcsIFNldDxNZW1iZXJVc2FnZT4+IF93cml0YWJsZUluc3RhbmNlTWVtYmVyc0J5TmFtZSA9CiAgICAgIDxTdHJpbmcsIFNldDxNZW1iZXJVc2FnZT4+e307CgogIGZpbmFsIFNldDxGaWVsZEVudGl0eT4gX2ZpZWxkU2V0dGVycyA9IG5ldyBTZXQ8RmllbGRFbnRpdHk+KCk7CgogIGZpbmFsIFNldDxEYXJ0VHlwZT4gX2lzQ2hlY2tzID0gbmV3IFNldDxEYXJ0VHlwZT4oKTsKICBmaW5hbCBTZXQ8VHlwZVZhcmlhYmxlVHlwZT4gX25hbWVkVHlwZVZhcmlhYmxlc05ld1J0aSA9IHt9OwoKICAvLy8gU2V0IG9mIGFsbCBjbG9zdXJlcyBpbiB0aGUgcHJvZ3JhbS4gVXNlZCBieSB0aGUgbWlycm9yIHRyYWNraW5nIHN5c3RlbQogIC8vLyB0byBmaW5kIGFsbCBsaXZlIGNsb3N1cmUgaW5zdGFuY2VzLgogIGZpbmFsIFNldDxMb2NhbD4gX2xvY2FsRnVuY3Rpb25zID0gbmV3IFNldDxMb2NhbD4oKTsKCiAgZmluYWwgU2V0PEZ1bmN0aW9uRW50aXR5PiBfY2xvc3VyaXplZE1lbWJlcnNXaXRoRnJlZVR5cGVWYXJpYWJsZXMgPQogICAgICBuZXcgU2V0PEZ1bmN0aW9uRW50aXR5PigpOwoKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CiAgZmluYWwgRWxlbWVudEVudmlyb25tZW50IF9lbGVtZW50RW52aXJvbm1lbnQ7CiAgZmluYWwgRGFydFR5cGVzIF9kYXJ0VHlwZXM7CiAgZmluYWwgQ29tbW9uRWxlbWVudHMgX2NvbW1vbkVsZW1lbnRzOwoKICBmaW5hbCBOYXRpdmVCYXNpY0RhdGEgX25hdGl2ZUJhc2ljRGF0YTsKICBmaW5hbCBOYXRpdmVEYXRhQnVpbGRlciBfbmF0aXZlRGF0YUJ1aWxkZXI7CiAgZmluYWwgSW50ZXJjZXB0b3JEYXRhQnVpbGRlciBfaW50ZXJjZXB0b3JEYXRhQnVpbGRlcjsKICBmaW5hbCBCYWNrZW5kVXNhZ2VCdWlsZGVyIF9iYWNrZW5kVXNhZ2VCdWlsZGVyOwogIGZpbmFsIFJ1bnRpbWVUeXBlc05lZWRCdWlsZGVyIF9ydGlOZWVkQnVpbGRlcjsKICBmaW5hbCBLRmllbGRBbmFseXNpcyBfYWxsb2NhdG9yQW5hbHlzaXM7CiAgZmluYWwgTmF0aXZlUmVzb2x1dGlvbkVucXVldWVyIF9uYXRpdmVSZXNvbHV0aW9uRW5xdWV1ZXI7CiAgZmluYWwgTm9TdWNoTWV0aG9kUmVnaXN0cnkgX25vU3VjaE1ldGhvZFJlZ2lzdHJ5OwogIGZpbmFsIEFubm90YXRpb25zRGF0YUJ1aWxkZXIgX2Fubm90YXRpb25zRGF0YUJ1aWxkZXI7CgogIGZpbmFsIFNlbGVjdG9yQ29uc3RyYWludHNTdHJhdGVneSBfc2VsZWN0b3JDb25zdHJhaW50c1N0cmF0ZWd5OwogIGZpbmFsIENsYXNzSGllcmFyY2h5QnVpbGRlciBfY2xhc3NIaWVyYXJjaHlCdWlsZGVyOwogIGZpbmFsIENsYXNzUXVlcmllcyBfY2xhc3NRdWVyaWVzOwoKICBib29sIF9jbG9zZWQgPSBmYWxzZTsKICBLQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkQ2FjaGU7CiAgZmluYWwgU2V0PE1lbWJlckVudGl0eT4gX2xpdmVJbnN0YW5jZU1lbWJlcnMgPSBuZXcgU2V0PE1lbWJlckVudGl0eT4oKTsKCiAgZmluYWwgU2V0PENvbnN0YW50VmFsdWU+IF9jb25zdGFudFZhbHVlcyA9IG5ldyBTZXQ8Q29uc3RhbnRWYWx1ZT4oKTsKCiAgZmluYWwgU2V0PExvY2FsPiBfZ2VuZXJpY0xvY2FsRnVuY3Rpb25zID0gbmV3IFNldDxMb2NhbD4oKTsKCiAgU2V0PE1lbWJlckVudGl0eT4gX3Byb2Nlc3NlZE1lbWJlcnMgPSBuZXcgU2V0PE1lbWJlckVudGl0eT4oKTsKCiAgYm9vbCBnZXQgaXNDbG9zZWQgPT4gX2Nsb3NlZDsKCiAgZmluYWwgS2VybmVsVG9FbGVtZW50TWFwSW1wbCBfZWxlbWVudE1hcDsKCiAgUmVzb2x1dGlvbldvcmxkQnVpbGRlckltcGwoCiAgICAgIHRoaXMuX29wdGlvbnMsCiAgICAgIHRoaXMuX2VsZW1lbnRNYXAsCiAgICAgIHRoaXMuX2VsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgdGhpcy5fZGFydFR5cGVzLAogICAgICB0aGlzLl9jb21tb25FbGVtZW50cywKICAgICAgdGhpcy5fbmF0aXZlQmFzaWNEYXRhLAogICAgICB0aGlzLl9uYXRpdmVEYXRhQnVpbGRlciwKICAgICAgdGhpcy5faW50ZXJjZXB0b3JEYXRhQnVpbGRlciwKICAgICAgdGhpcy5fYmFja2VuZFVzYWdlQnVpbGRlciwKICAgICAgdGhpcy5fcnRpTmVlZEJ1aWxkZXIsCiAgICAgIHRoaXMuX2FsbG9jYXRvckFuYWx5c2lzLAogICAgICB0aGlzLl9uYXRpdmVSZXNvbHV0aW9uRW5xdWV1ZXIsCiAgICAgIHRoaXMuX25vU3VjaE1ldGhvZFJlZ2lzdHJ5LAogICAgICB0aGlzLl9hbm5vdGF0aW9uc0RhdGFCdWlsZGVyLAogICAgICB0aGlzLl9zZWxlY3RvckNvbnN0cmFpbnRzU3RyYXRlZ3ksCiAgICAgIHRoaXMuX2NsYXNzSGllcmFyY2h5QnVpbGRlciwKICAgICAgdGhpcy5fY2xhc3NRdWVyaWVzKTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBwcm9jZXNzZWRDbGFzc2VzID0+IF9wcm9jZXNzZWRDbGFzc2VzLmtleXMKICAgICAgLndoZXJlKChjbHMpID0+IF9wcm9jZXNzZWRDbGFzc2VzW2Nsc10uaXNJbnN0YW50aWF0ZWQpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzTWVtYmVyUHJvY2Vzc2VkKE1lbWJlckVudGl0eSBtZW1iZXIpID0+CiAgICAgIF9wcm9jZXNzZWRNZW1iZXJzLmNvbnRhaW5zKG1lbWJlcik7CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJQcm9jZXNzZWRNZW1iZXIoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgX3Byb2Nlc3NlZE1lbWJlcnMuYWRkKG1lbWJlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGdldCBwcm9jZXNzZWRNZW1iZXJzID0+IF9wcm9jZXNzZWRNZW1iZXJzOwoKICBAb3ZlcnJpZGUKICBLQ2xvc2VkV29ybGQgZ2V0IGNsb3NlZFdvcmxkRm9yVGVzdGluZyB7CiAgICBpZiAoIV9jbG9zZWQpIHsKICAgICAgZmFpbGVkQXQoCiAgICAgICAgICBOT19MT0NBVElPTl9TUEFOTkFCTEUsICJUaGUgd29ybGQgYnVpbGRlciBoYXMgbm90IHlldCBiZWVuIGNsb3NlZC4iKTsKICAgIH0KICAgIHJldHVybiBfY2xvc2VkV29ybGRDYWNoZTsKICB9CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEltcHJvdmUgc2VtYW50aWMgcHJlY2lzaW9uLgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgZGlyZWN0bHlJbnN0YW50aWF0ZWRDbGFzc2VzIHsKICAgIFNldDxDbGFzc0VudGl0eT4gY2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CiAgICBnZXRJbnN0YW50aWF0aW9uTWFwKCkuZm9yRWFjaCgoQ2xhc3NFbnRpdHkgY2xzLCBJbnN0YW50aWF0aW9uSW5mbyBpbmZvKSB7CiAgICAgIGlmIChpbmZvLmhhc0luc3RhbnRpYXRpb24pIHsKICAgICAgICBjbGFzc2VzLmFkZChjbHMpOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBjbGFzc2VzOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckNsb3N1cml6ZWRNZW1iZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIEZ1bmN0aW9uVHlwZSB0eXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvblR5cGUoZWxlbWVudCk7CiAgICBpZiAodHlwZS5jb250YWluc1R5cGVWYXJpYWJsZXMpIHsKICAgICAgX2Nsb3N1cml6ZWRNZW1iZXJzV2l0aEZyZWVUeXBlVmFyaWFibGVzLmFkZChlbGVtZW50KTsKICAgIH0KICB9CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEZ1bGx5IGVuZm9yY2UgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBleGFjdCwgdGhyb3VnaAogIC8vIHN1YmNsYXNzIGFuZCB0aHJvdWdoIHN1YnR5cGUgaW5zdGFudGlhdGVkIHR5cGVzL2NsYXNzZXMuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3VwcG9ydCB1bmtub3duIHR5cGUgYXJndW1lbnRzIGZvciBnZW5lcmljIHR5cGVzLgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJUeXBlSW5zdGFudGlhdGlvbigKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlLCBDbGFzc1VzZWRDYWxsYmFjayBjbGFzc1VzZWQsCiAgICAgIHtDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3Rvcn0pIHsKICAgIENsYXNzRW50aXR5IGNscyA9IHR5cGUuZWxlbWVudDsKICAgIEluc3RhbnRpYXRpb25JbmZvIGluZm8gPQogICAgICAgIF9pbnN0YW50aWF0aW9uSW5mby5wdXRJZkFic2VudChjbHMsICgpID0+IG5ldyBJbnN0YW50aWF0aW9uSW5mbygpKTsKICAgIEluc3RhbnRpYXRpb24ga2luZCA9IEluc3RhbnRpYXRpb24uVU5JTlNUQU5USUFURUQ7CiAgICBib29sIGlzTmF0aXZlID0gX25hdGl2ZUJhc2ljRGF0YS5pc05hdGl2ZUNsYXNzKGNscyk7CiAgICAvLyBXZSBjYW4ndCB1c2UgdGhlIGNsb3NlZC13b3JsZCBhc3N1bXB0aW9uIHdpdGggbmF0aXZlIGFic3RyYWN0CiAgICAvLyBjbGFzc2VzOyBhIG5hdGl2ZSBhYnN0cmFjdCBjbGFzcyBtYXkgaGF2ZSBub24tYWJzdHJhY3Qgc3ViY2xhc3NlcwogICAgLy8gbm90IGRlY2xhcmVkIHRvIHRoZSBwcm9ncmFtLiAgSW5zdGFuY2VzIG9mIHRoZXNlIGNsYXNzZXMgYXJlCiAgICAvLyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIHRoZSBhYnN0cmFjdCBjbGFzcy4KICAgIGlmICghY2xzLmlzQWJzdHJhY3QgfHwgaXNOYXRpdmUpIHsKICAgICAgaWYgKGlzTmF0aXZlKSB7CiAgICAgICAga2luZCA9IEluc3RhbnRpYXRpb24uQUJTVFJBQ1RMWV9JTlNUQU5USUFURUQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAga2luZCA9IEluc3RhbnRpYXRpb24uRElSRUNUTFlfSU5TVEFOVElBVEVEOwogICAgICB9CiAgICB9CiAgICBpbmZvLmFkZEluc3RhbnRpYXRpb24oY29uc3RydWN0b3IsIHR5cGUsIGtpbmQpOwogICAgaWYgKGtpbmQgIT0gSW5zdGFudGlhdGlvbi5VTklOU1RBTlRJQVRFRCkgewogICAgICBfY2xhc3NIaWVyYXJjaHlCdWlsZGVyLnVwZGF0ZUNsYXNzSGllcmFyY2h5Tm9kZUZvckNsYXNzKGNscywKICAgICAgICAgIGRpcmVjdGx5SW5zdGFudGlhdGVkOiBpbmZvLmlzRGlyZWN0bHlJbnN0YW50aWF0ZWQsCiAgICAgICAgICBhYnN0cmFjdGx5SW5zdGFudGlhdGVkOiBpbmZvLmlzQWJzdHJhY3RseUluc3RhbnRpYXRlZCk7CiAgICAgIF9wcm9jZXNzSW5zdGFudGlhdGVkQ2xhc3MoY2xzLCBjbGFzc1VzZWQpOwogICAgfQoKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSBbX2luc3RhbnRpYXRpb25JbmZvXSB0byBjb21wdXRlIHRoaXMgaW5mb3JtYXRpb24KICAgIC8vIGluc3RlYWQuCiAgICBpZiAoX2ltcGxlbWVudGVkQ2xhc3Nlcy5hZGQoY2xzKSkgewogICAgICBjbGFzc1VzZWQoY2xzLCBfZ2V0Q2xhc3NVc2FnZShjbHMpLmltcGxlbWVudCgpKTsKICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoU3VwZXJ0eXBlKGNscywgKEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlKSB7CiAgICAgICAgaWYgKF9pbXBsZW1lbnRlZENsYXNzZXMuYWRkKHN1cGVydHlwZS5lbGVtZW50KSkgewogICAgICAgICAgY2xhc3NVc2VkKAogICAgICAgICAgICAgIHN1cGVydHlwZS5lbGVtZW50LCBfZ2V0Q2xhc3NVc2FnZShzdXBlcnR5cGUuZWxlbWVudCkuaW1wbGVtZW50KCkpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfQoKICBJdGVyYWJsZTxDYWxsU3RydWN0dXJlPiBfZ2V0TWF0Y2hpbmdDYWxsU3RydWN0dXJlcygKICAgICAgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPiBzZWxlY3RvcnMsIE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIGlmIChzZWxlY3RvcnMgPT0gbnVsbCkgcmV0dXJuIGNvbnN0IDxDYWxsU3RydWN0dXJlPltdOwogICAgU2V0PENhbGxTdHJ1Y3R1cmU+IGNhbGxTdHJ1Y3R1cmVzOwogICAgZm9yIChTZWxlY3RvciBzZWxlY3RvciBpbiBzZWxlY3RvcnMua2V5cykgewogICAgICBpZiAoc2VsZWN0b3IuYXBwbGllc1VubmFtZWQobWVtYmVyKSkgewogICAgICAgIFNlbGVjdG9yQ29uc3RyYWludHMgbWFza3MgPSBzZWxlY3RvcnNbc2VsZWN0b3JdOwogICAgICAgIGlmIChtYXNrcy5jYW5IaXQobWVtYmVyLCBzZWxlY3Rvci5tZW1iZXJOYW1lLCB0aGlzKSkgewogICAgICAgICAgY2FsbFN0cnVjdHVyZXMgPz89IG5ldyBTZXQ8Q2FsbFN0cnVjdHVyZT4oKTsKICAgICAgICAgIGNhbGxTdHJ1Y3R1cmVzLmFkZChzZWxlY3Rvci5jYWxsU3RydWN0dXJlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBjYWxsU3RydWN0dXJlcyA/PyBjb25zdCA8Q2FsbFN0cnVjdHVyZT5bXTsKICB9CgogIGJvb2wgX2hhc01hdGNoaW5nU2VsZWN0b3IoCiAgICAgIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4gc2VsZWN0b3JzLCBNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBpZiAoc2VsZWN0b3JzID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIGZvciAoU2VsZWN0b3Igc2VsZWN0b3IgaW4gc2VsZWN0b3JzLmtleXMpIHsKICAgICAgaWYgKHNlbGVjdG9yLmFwcGxpZXNVbm5hbWVkKG1lbWJlcikpIHsKICAgICAgICBTZWxlY3RvckNvbnN0cmFpbnRzIG1hc2tzID0gc2VsZWN0b3JzW3NlbGVjdG9yXTsKICAgICAgICBpZiAobWFza3MuY2FuSGl0KG1lbWJlciwgc2VsZWN0b3IubWVtYmVyTmFtZSwgdGhpcykpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGluc3RhbnRpYXRpb24gbWFwIHVzZWQgZm9yIGNvbXB1dGluZyB0aGUgY2xvc2VkIHdvcmxkLgogIE1hcDxDbGFzc0VudGl0eSwgSW5zdGFudGlhdGlvbkluZm8+IGdldEluc3RhbnRpYXRpb25NYXAoKSB7CiAgICByZXR1cm4gX2luc3RhbnRpYXRpb25JbmZvOwogIH0KCiAgSXRlcmFibGU8Q2FsbFN0cnVjdHVyZT4gX2dldEludm9jYXRpb25DYWxsU3RydWN0dXJlcyhNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICByZXR1cm4gX2dldE1hdGNoaW5nQ2FsbFN0cnVjdHVyZXMoX2ludm9rZWROYW1lc1ttZW1iZXIubmFtZV0sIG1lbWJlcik7CiAgfQoKICBib29sIF9oYXNJbnZva2VkR2V0dGVyKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIHJldHVybiBfaGFzTWF0Y2hpbmdTZWxlY3RvcihfaW52b2tlZEdldHRlcnNbbWVtYmVyLm5hbWVdLCBtZW1iZXIpOwogIH0KCiAgYm9vbCBfaGFzSW52b2tlZFNldHRlcihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICByZXR1cm4gX2hhc01hdGNoaW5nU2VsZWN0b3IoX2ludm9rZWRTZXR0ZXJzW21lbWJlci5uYW1lXSwgbWVtYmVyKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJEeW5hbWljVXNlKAogICAgICBEeW5hbWljVXNlIGR5bmFtaWNVc2UsIE1lbWJlclVzZWRDYWxsYmFjayBtZW1iZXJVc2VkKSB7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IGR5bmFtaWNVc2Uuc2VsZWN0b3I7CiAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IHNlbGVjdG9yLm5hbWU7CgogICAgdm9pZCBfcHJvY2VzcygKICAgICAgICBNYXA8U3RyaW5nLCBTZXQ8TWVtYmVyVXNhZ2U+PiBtZW1iZXJNYXAsCiAgICAgICAgRW51bVNldDxNZW1iZXJVc2U+IGFjdGlvbihNZW1iZXJVc2FnZSB1c2FnZSksCiAgICAgICAgYm9vbCBzaG91bGRCZVJlbW92ZWQoTWVtYmVyVXNhZ2UgdXNhZ2UpKSB7CiAgICAgIF9wcm9jZXNzU2V0KG1lbWJlck1hcCwgbWV0aG9kTmFtZSwgKE1lbWJlclVzYWdlIHVzYWdlKSB7CiAgICAgICAgaWYgKHNlbGVjdG9yLmFwcGxpZXNVbm5hbWVkKHVzYWdlLmVudGl0eSkgJiYKICAgICAgICAgICAgX3NlbGVjdG9yQ29uc3RyYWludHNTdHJhdGVneS5hcHBsaWVkVW5uYW1lZCgKICAgICAgICAgICAgICAgIGR5bmFtaWNVc2UsIHVzYWdlLmVudGl0eSwgdGhpcykpIHsKICAgICAgICAgIG1lbWJlclVzZWQodXNhZ2UuZW50aXR5LCBhY3Rpb24odXNhZ2UpKTsKICAgICAgICAgIHJldHVybiBzaG91bGRCZVJlbW92ZWQodXNhZ2UpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0pOwogICAgfQoKICAgIHN3aXRjaCAoZHluYW1pY1VzZS5raW5kKSB7CiAgICAgIGNhc2UgRHluYW1pY1VzZUtpbmQuSU5WT0tFOgogICAgICAgIHJlZ2lzdGVyRHluYW1pY0ludm9jYXRpb24oCiAgICAgICAgICAgIGR5bmFtaWNVc2Uuc2VsZWN0b3IsIGR5bmFtaWNVc2UudHlwZUFyZ3VtZW50cyk7CiAgICAgICAgaWYgKF9yZWdpc3Rlck5ld1NlbGVjdG9yKGR5bmFtaWNVc2UsIF9pbnZva2VkTmFtZXMpKSB7CiAgICAgICAgICBfcHJvY2VzcygKICAgICAgICAgICAgICBfaW52b2thYmxlSW5zdGFuY2VNZW1iZXJzQnlOYW1lLAogICAgICAgICAgICAgIChtKSA9PiBtLmludm9rZSgKICAgICAgICAgICAgICAgICAgQWNjZXNzZXMuZHluYW1pY0FjY2VzcywgZHluYW1pY1VzZS5zZWxlY3Rvci5jYWxsU3RydWN0dXJlKSwKICAgICAgICAgICAgICAvLyBJZiBub3QgYWxsIG9wdGlvbmFsIHBhcmFtZXRlcnMgaGF2ZSBiZWVuIHBhc3NlZCBpbiBpbnZvY2F0aW9ucwogICAgICAgICAgICAgIC8vIHdlIG11c3Qga2VlcCB0aGUgbWVtYmVyIGluIFtfaW52b2thYmxlSW5zdGFuY2VNZW1iZXJzQnlOYW1lXS4KICAgICAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBbHNvIHJlbW92ZSBmcm9tCiAgICAgICAgICAgICAgLy8gW19yZWFkYWJsZUluc3RhbmNlTWVtYmVyc0J5TmFtZV0gaW4gY2FzZSBvZiBnZXR0ZXJzL3NldHRlcnMuCiAgICAgICAgICAgICAgKHUpID0+ICF1Lmhhc1BlbmRpbmdEeW5hbWljSW52b2tlKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgRHluYW1pY1VzZUtpbmQuR0VUOgogICAgICAgIGlmIChfcmVnaXN0ZXJOZXdTZWxlY3RvcihkeW5hbWljVXNlLCBfaW52b2tlZEdldHRlcnMpKSB7CiAgICAgICAgICBfcHJvY2VzcygKICAgICAgICAgICAgICBfcmVhZGFibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWUsCiAgICAgICAgICAgICAgKG0pID0+IG0ucmVhZChBY2Nlc3Nlcy5keW5hbWljQWNjZXNzKSwKICAgICAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNZW1iZXJzIGNhbm5vdCBiZSBwYXJ0aWFsbHkgcmVhZCBzbwogICAgICAgICAgICAgIC8vIHdlIHNob3VsZCBhbHdheXMgcmVtb3ZlIHRoZW0uCiAgICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQWxzbyByZW1vdmUgZnJvbQogICAgICAgICAgICAgIC8vIFtfaW52b2thYmxlSW5zdGFuY2VNZW1iZXJzQnlOYW1lXSBpbiBjYXNlIG9mIG1ldGhvZHMuCiAgICAgICAgICAgICAgKHUpID0+ICF1Lmhhc1BlbmRpbmdEeW5hbWljUmVhZCk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIER5bmFtaWNVc2VLaW5kLlNFVDoKICAgICAgICBpZiAoX3JlZ2lzdGVyTmV3U2VsZWN0b3IoZHluYW1pY1VzZSwgX2ludm9rZWRTZXR0ZXJzKSkgewogICAgICAgICAgX3Byb2Nlc3MoCiAgICAgICAgICAgICAgX3dyaXRhYmxlSW5zdGFuY2VNZW1iZXJzQnlOYW1lLAogICAgICAgICAgICAgIChtKSA9PiBtLndyaXRlKEFjY2Vzc2VzLmR5bmFtaWNBY2Nlc3MpLAogICAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1lbWJlcnMgY2Fubm90IGJlIHBhcnRpYWxseSB3cml0dGVuIHNvCiAgICAgICAgICAgICAgLy8gd2Ugc2hvdWxkIGFsd2F5cyByZW1vdmUgdGhlbS4KICAgICAgICAgICAgICAodSkgPT4gIXUuaGFzUGVuZGluZ0R5bmFtaWNXcml0ZSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgfQogIH0KCiAgYm9vbCBfcmVnaXN0ZXJOZXdTZWxlY3RvcihEeW5hbWljVXNlIGR5bmFtaWNVc2UsCiAgICAgIE1hcDxTdHJpbmcsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4+IHNlbGVjdG9yTWFwKSB7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IGR5bmFtaWNVc2Uuc2VsZWN0b3I7CiAgICBTdHJpbmcgbmFtZSA9IHNlbGVjdG9yLm5hbWU7CiAgICBPYmplY3QgY29uc3RyYWludCA9IGR5bmFtaWNVc2UucmVjZWl2ZXJDb25zdHJhaW50OwogICAgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPiBzZWxlY3RvcnMgPSBzZWxlY3Rvck1hcC5wdXRJZkFic2VudCgKICAgICAgICBuYW1lLCAoKSA9PiBuZXcgTWFwbGV0PFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPigpKTsKICAgIFVuaXZlcnNlU2VsZWN0b3JDb25zdHJhaW50cyBjb25zdHJhaW50cyA9IHNlbGVjdG9yc1tzZWxlY3Rvcl07CiAgICBpZiAoY29uc3RyYWludHMgPT0gbnVsbCkgewogICAgICBzZWxlY3RvcnNbc2VsZWN0b3JdID0gX3NlbGVjdG9yQ29uc3RyYWludHNTdHJhdGVneQogICAgICAgICAgLmNyZWF0ZVNlbGVjdG9yQ29uc3RyYWludHMoc2VsZWN0b3IsIGNvbnN0cmFpbnQpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBjb25zdHJhaW50cy5hZGRSZWNlaXZlckNvbnN0cmFpbnQoY29uc3RyYWludCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVySXNDaGVjayhjb3ZhcmlhbnQgRGFydFR5cGUgdHlwZSkgewogICAgX2lzQ2hlY2tzLmFkZCh0eXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJOYW1lZFR5cGVWYXJpYWJsZU5ld1J0aShUeXBlVmFyaWFibGVUeXBlIHR5cGUpIHsKICAgIF9uYW1lZFR5cGVWYXJpYWJsZXNOZXdSdGkuYWRkKHR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCByZWdpc3RlckNvbnN0YW50VXNlKENvbnN0YW50VXNlIHVzZSkgewogICAgcmV0dXJuIF9jb25zdGFudFZhbHVlcy5hZGQodXNlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdGF0aWNVc2UoU3RhdGljVXNlIHN0YXRpY1VzZSwgTWVtYmVyVXNlZENhbGxiYWNrIG1lbWJlclVzZWQpIHsKICAgIGlmIChzdGF0aWNVc2Uua2luZCA9PSBTdGF0aWNVc2VLaW5kLkNMT1NVUkUpIHsKICAgICAgTG9jYWwgbG9jYWxGdW5jdGlvbiA9IHN0YXRpY1VzZS5lbGVtZW50OwogICAgICBGdW5jdGlvblR5cGUgdHlwZSA9CiAgICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmdldExvY2FsRnVuY3Rpb25UeXBlKGxvY2FsRnVuY3Rpb24pOwogICAgICBpZiAodHlwZS50eXBlVmFyaWFibGVzLmlzTm90RW1wdHkpIHsKICAgICAgICBfZ2VuZXJpY0xvY2FsRnVuY3Rpb25zLmFkZChsb2NhbEZ1bmN0aW9uKTsKICAgICAgfQogICAgICBfbG9jYWxGdW5jdGlvbnMuYWRkKHN0YXRpY1VzZS5lbGVtZW50KTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmIChzdGF0aWNVc2Uua2luZCA9PSBTdGF0aWNVc2VLaW5kLkNMT1NVUkVfQ0FMTCkgewogICAgICBpZiAoc3RhdGljVXNlLnR5cGVBcmd1bWVudHM/LmlzTm90RW1wdHkgPz8gZmFsc2UpIHsKICAgICAgICByZWdpc3RlckR5bmFtaWNJbnZvY2F0aW9uKAogICAgICAgICAgICBuZXcgU2VsZWN0b3IuY2FsbChOYW1lcy5jYWxsLCBzdGF0aWNVc2UuY2FsbFN0cnVjdHVyZSksCiAgICAgICAgICAgIHN0YXRpY1VzZS50eXBlQXJndW1lbnRzKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CgogICAgTWVtYmVyRW50aXR5IGVsZW1lbnQgPSBzdGF0aWNVc2UuZWxlbWVudDsKICAgIEVudW1TZXQ8TWVtYmVyVXNlPiB1c2VTZXQgPSBuZXcgRW51bVNldDxNZW1iZXJVc2U+KCk7CiAgICBNZW1iZXJVc2FnZSB1c2FnZSA9IF9nZXRNZW1iZXJVc2FnZShlbGVtZW50LCB1c2VTZXQpOwoKICAgIGlmICgoZWxlbWVudC5pc1N0YXRpYyB8fCBlbGVtZW50LmlzVG9wTGV2ZWwpICYmIGVsZW1lbnQuaXNGaWVsZCkgewogICAgICBfYWxsUmVmZXJlbmNlZFN0YXRpY0ZpZWxkcy5hZGQoc3RhdGljVXNlLmVsZW1lbnQpOwogICAgfQogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQXZvaWQgdGhpcy4gQ3VycmVudGx5IFtGSUVMRF9HRVRdIGFuZAogICAgLy8gW0ZJRUxEX1NFVF0gY29udGFpbnMgW0JveEZpZWxkRWxlbWVudF1zIHdoaWNoIHdlIGNhbm5vdCBlbnF1ZXVlLgogICAgLy8gQWxzbyBbQ0xPU1VSRV0gY29udGFpbnMgW0xvY2FsRnVuY3Rpb25FbGVtZW50XSB3aGljaCB3ZSBjYW5ub3QKICAgIC8vIGVucXVldWUuCgogICAgc3dpdGNoIChzdGF0aWNVc2Uua2luZCkgewogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuSU5TVEFOQ0VfRklFTERfR0VUOgogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuSU5TVEFOQ0VfRklFTERfU0VUOgogICAgICAgIF9maWVsZFNldHRlcnMuYWRkKHN0YXRpY1VzZS5lbGVtZW50KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNMT1NVUkU6CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5DTE9TVVJFX0NBTEw6CiAgICAgICAgLy8gQWxyZWFkeSBoYW5kbGVkIGFib3ZlLgogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1VQRVJfVEVBUl9PRkY6CiAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS5yZWFkKEFjY2Vzc2VzLnN1cGVyQWNjZXNzKSk7CiAgICAgICAgX21ldGhvZHNOZWVkaW5nU3VwZXJHZXR0ZXIuYWRkKHN0YXRpY1VzZS5lbGVtZW50KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLlNVUEVSX0ZJRUxEX1NFVDoKICAgICAgICBfZmllbGRTZXR0ZXJzLmFkZChzdGF0aWNVc2UuZWxlbWVudCk7CiAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS53cml0ZShBY2Nlc3Nlcy5zdXBlckFjY2VzcykpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1VQRVJfR0VUOgogICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2UucmVhZChBY2Nlc3Nlcy5zdXBlckFjY2VzcykpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1RBVElDX0dFVDoKICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLnJlYWQoQWNjZXNzZXMuc3RhdGljQWNjZXNzKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVEFUSUNfVEVBUl9PRkY6CiAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS5yZWFkKEFjY2Vzc2VzLnN0YXRpY0FjY2VzcykpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1VQRVJfU0VUVEVSX1NFVDoKICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLndyaXRlKEFjY2Vzc2VzLnN1cGVyQWNjZXNzKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVEFUSUNfU0VUOgogICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2Uud3JpdGUoQWNjZXNzZXMuc3RhdGljQWNjZXNzKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5GSUVMRF9JTklUOgogICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2UuaW5pdCgpKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkZJRUxEX0NPTlNUQU5UX0lOSVQ6CiAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS5jb25zdGFudEluaXQoc3RhdGljVXNlLmNvbnN0YW50KSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVVBFUl9JTlZPS0U6CiAgICAgICAgcmVnaXN0ZXJTdGF0aWNJbnZvY2F0aW9uKHN0YXRpY1VzZSk7CiAgICAgICAgdXNlU2V0LmFkZEFsbCgKICAgICAgICAgICAgdXNhZ2UuaW52b2tlKEFjY2Vzc2VzLnN1cGVyQWNjZXNzLCBzdGF0aWNVc2UuY2FsbFN0cnVjdHVyZSkpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1RBVElDX0lOVk9LRToKICAgICAgICByZWdpc3RlclN0YXRpY0ludm9jYXRpb24oc3RhdGljVXNlKTsKICAgICAgICB1c2VTZXQuYWRkQWxsKAogICAgICAgICAgICB1c2FnZS5pbnZva2UoQWNjZXNzZXMuc3RhdGljQWNjZXNzLCBzdGF0aWNVc2UuY2FsbFN0cnVjdHVyZSkpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuQ09OU1RSVUNUT1JfSU5WT0tFOgogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuQ09OU1RfQ09OU1RSVUNUT1JfSU5WT0tFOgogICAgICAgIHVzZVNldC5hZGRBbGwoCiAgICAgICAgICAgIHVzYWdlLmludm9rZShBY2Nlc3Nlcy5zdGF0aWNBY2Nlc3MsIHN0YXRpY1VzZS5jYWxsU3RydWN0dXJlKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5ESVJFQ1RfSU5WT0tFOgogICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsICdEaXJlY3Qgc3RhdGljIHVzZSBpcyBub3Qgc3VwcG9ydGVkIGZvciByZXNvbHV0aW9uLicpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuSU5MSU5JTkc6CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5DQUxMX01FVEhPRDoKICAgICAgICBmYWlsZWRBdChDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICAgICAiU3RhdGljIHVzZSAke3N0YXRpY1VzZS5raW5kfSBpcyBub3Qgc3VwcG9ydGVkIGR1cmluZyByZXNvbHV0aW9uLiIpOwogICAgfQogICAgaWYgKHVzZVNldC5pc05vdEVtcHR5KSB7CiAgICAgIG1lbWJlclVzZWQodXNhZ2UuZW50aXR5LCB1c2VTZXQpOwogICAgfQogIH0KCiAgLy8vIENhbGxlZCB0byBjcmVhdGUgYSBbQ2xhc3NVc2FnZV0gZm9yIFtjbHNdLgogIC8vLwogIC8vLyBTdWJjbGFzc2VzIG92ZXJyaWRlIHRoaXMgdG8gZW5zdXJlIG5lZWRlZCBpbnZhcmlhbnRzIG9uIFtjbHNdLgogIENsYXNzVXNhZ2UgX2NyZWF0ZUNsYXNzVXNhZ2UoY292YXJpYW50IENsYXNzRW50aXR5IGNscykgPT4KICAgICAgbmV3IENsYXNzVXNhZ2UoY2xzKTsKCiAgLy8vIFJldHVybiB0aGUgY2Fub25pY2FsIFtDbGFzc1VzYWdlXSBmb3IgW2Nsc10uCiAgQ2xhc3NVc2FnZSBfZ2V0Q2xhc3NVc2FnZShDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBfcHJvY2Vzc2VkQ2xhc3Nlcy5wdXRJZkFic2VudChjbHMsICgpIHsKICAgICAgcmV0dXJuIF9jcmVhdGVDbGFzc1VzYWdlKGNscyk7CiAgICB9KTsKICB9CgogIC8vLyBSZWdpc3RlciBbY2xzXSBhbmQgYWxsIGl0cyBzdXBlcmNsYXNzZXMgYXMgaW5zdGFudGlhdGVkLgogIHZvaWQgX3Byb2Nlc3NJbnN0YW50aWF0ZWRDbGFzcyhDbGFzc0VudGl0eSBjbHMsIENsYXNzVXNlZENhbGxiYWNrIGNsYXNzVXNlZCkgewogICAgLy8gUmVnaXN0ZXJzIFtzdXBlcmNsYXNzXSBhcyBpbnN0YW50aWF0ZWQuIFJldHVybnMgYHRydWVgIGlmIGl0IHdhc24ndAogICAgLy8gYWxyZWFkeSBpbnN0YW50aWF0ZWQgYW5kIHdlIHRoZXJlZm9yZSBoYXZlIHRvIHByb2Nlc3MgaXRzIHN1cGVyY2xhc3MgYXMKICAgIC8vIHdlbGwuCiAgICBib29sIHByb2Nlc3NDbGFzcyhDbGFzc0VudGl0eSBzdXBlcmNsYXNzKSB7CiAgICAgIENsYXNzVXNhZ2UgdXNhZ2UgPSBfZ2V0Q2xhc3NVc2FnZShzdXBlcmNsYXNzKTsKICAgICAgaWYgKCF1c2FnZS5pc0luc3RhbnRpYXRlZCkgewogICAgICAgIGNsYXNzVXNlZCh1c2FnZS5jbHMsIHVzYWdlLmluc3RhbnRpYXRlKCkpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICB3aGlsZSAoY2xzICE9IG51bGwgJiYgcHJvY2Vzc0NsYXNzKGNscykpIHsKICAgICAgY2xzID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRTdXBlckNsYXNzKGNscyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByb2Nlc3NDbGFzc01lbWJlcnMoQ2xhc3NFbnRpdHkgY2xzLCBNZW1iZXJVc2VkQ2FsbGJhY2sgbWVtYmVyVXNlZCwKICAgICAge2Jvb2wgY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5OiBmYWxzZX0pIHsKICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaENsYXNzTWVtYmVyKGNscywKICAgICAgICAoQ2xhc3NFbnRpdHkgY2xzLCBNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgIF9wcm9jZXNzSW5zdGFudGlhdGVkQ2xhc3NNZW1iZXIoY2xzLCBtZW1iZXIsIG1lbWJlclVzZWQsCiAgICAgICAgICBjaGVja0VucXVldWVyQ29uc2lzdGVuY3k6IGNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeSk7CiAgICB9KTsKICB9CgogIC8vLyBDYWxsIFt1cGRhdGVVc2FnZV0gb24gYWxsIFtNZW1iZXJVc2FnZV1zIGluIHRoZSBzZXQgaW4gW21hcF0gZm9yCiAgLy8vIFttZW1iZXJOYW1lXS4gSWYgW3VwZGF0ZVVzYWdlXSByZXR1cm5zIGB0cnVlYCB0aGUgdXNhZ2UgaXMgcmVtb3ZlZCBmcm9tCiAgLy8vIHRoZSBzZXQuCiAgdm9pZCBfcHJvY2Vzc1NldChNYXA8U3RyaW5nLCBTZXQ8TWVtYmVyVXNhZ2U+PiBtYXAsIFN0cmluZyBtZW1iZXJOYW1lLAogICAgICBib29sIHVwZGF0ZVVzYWdlKE1lbWJlclVzYWdlIGUpKSB7CiAgICBTZXQ8TWVtYmVyVXNhZ2U+IG1lbWJlcnMgPSBtYXBbbWVtYmVyTmFtZV07CiAgICBpZiAobWVtYmVycyA9PSBudWxsKSByZXR1cm47CiAgICAvLyBbZl0gbWlnaHQgYWRkIGVsZW1lbnRzIHRvIFs6IG1hcFttZW1iZXJOYW1lXSA6XSBkdXJpbmcgdGhlIGxvb3AgYmVsb3cKICAgIC8vIHNvIHdlIGNyZWF0ZSBhIG5ldyBsaXN0IGZvciBbOiBtYXBbbWVtYmVyTmFtZV0gOl0gYW5kIHByZXBlbmQgdGhlCiAgICAvLyBbcmVtYWluaW5nXSBtZW1iZXJzIGFmdGVyIHRoZSBsb29wLgogICAgbWFwW21lbWJlck5hbWVdID0gbmV3IFNldDxNZW1iZXJVc2FnZT4oKTsKICAgIFNldDxNZW1iZXJVc2FnZT4gcmVtYWluaW5nID0gbmV3IFNldDxNZW1iZXJVc2FnZT4oKTsKICAgIGZvciAoTWVtYmVyVXNhZ2UgdXNhZ2UgaW4gbWVtYmVycykgewogICAgICBpZiAoIXVwZGF0ZVVzYWdlKHVzYWdlKSkgewogICAgICAgIHJlbWFpbmluZy5hZGQodXNhZ2UpOwogICAgICB9CiAgICB9CiAgICBtYXBbbWVtYmVyTmFtZV0uYWRkQWxsKHJlbWFpbmluZyk7CiAgfQoKICBNZW1iZXJVc2FnZSBfZ2V0TWVtYmVyVXNhZ2UoTWVtYmVyRW50aXR5IG1lbWJlciwgRW51bVNldDxNZW1iZXJVc2U+IHVzZVNldCwKICAgICAge2Jvb2wgY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5OiBmYWxzZX0pIHsKICAgIE1lbWJlclVzYWdlIHVzYWdlID0gX21lbWJlclVzYWdlW21lbWJlcl07CiAgICBpZiAodXNhZ2UgPT0gbnVsbCkgewogICAgICBpZiAobWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgICBTdHJpbmcgbWVtYmVyTmFtZSA9IG1lbWJlci5uYW1lOwogICAgICAgIENsYXNzRW50aXR5IGNscyA9IG1lbWJlci5lbmNsb3NpbmdDbGFzczsKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDaGFuZ2UgdGhpcyB0byB1c2UgaXNOYXRpdmVNZW1iZXIgd2hlbiB3ZSB1c2UKICAgICAgICAvLyBDRkUgY29uc3RhbnRzLgogICAgICAgIC8vIFRoZSBvYnZpb3VzIHRoaW5nIHRvIHRlc3QgaGVyZSB3b3VsZCBiZSAibWVtYmVyLmlzTmF0aXZlIiwKICAgICAgICAvLyBob3dldmVyLCB0aGF0IG9ubHkgd29ya3MgYWZ0ZXIgbWV0YWRhdGEgaGFzIGJlZW4gcGFyc2VkL2FuYWx5emVkLAogICAgICAgIC8vIGFuZCB0aGF0IG1heSBub3QgaGF2ZSBoYXBwZW5lZCB5ZXQuCiAgICAgICAgLy8gU28gaW5zdGVhZCB3ZSB1c2UgdGhlIGVuY2xvc2luZyBjbGFzcywgd2hpY2ggd2Uga25vdyBoYXZlIGhhZAogICAgICAgIC8vIGl0cyBtZXRhZGF0YSBwYXJzZWQgYW5kIGFuYWx5emVkLgogICAgICAgIC8vIE5vdGU6IHRoaXMgYXNzdW1lcyB0aGF0IHRoZXJlIGFyZSBubyBub24tbmF0aXZlIGZpZWxkcyBvbiBuYXRpdmUKICAgICAgICAvLyBjbGFzc2VzLCB3aGljaCBtYXkgbm90IGJlIHRoZSBjYXNlIHdoZW4gYSBuYXRpdmUgY2xhc3MgaXMgc3ViY2xhc3NlZC4KICAgICAgICBib29sIGlzTmF0aXZlID0gX25hdGl2ZUJhc2ljRGF0YS5pc05hdGl2ZUNsYXNzKGNscyk7CiAgICAgICAgdXNhZ2UgPSBuZXcgTWVtYmVyVXNhZ2UobWVtYmVyKTsKICAgICAgICBpZiAobWVtYmVyLmlzRmllbGQgJiYgIWlzTmF0aXZlKSB7CiAgICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLmluaXQoKSk7CiAgICAgICAgfQogICAgICAgIGlmICghY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5KSB7CiAgICAgICAgICBpZiAobWVtYmVyLmlzRmllbGQgJiYgaXNOYXRpdmUpIHsKICAgICAgICAgICAgcmVnaXN0ZXJVc2VkRWxlbWVudChtZW1iZXIpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG1lbWJlci5pc0Z1bmN0aW9uICYmCiAgICAgICAgICAgICAgbWVtYmVyLm5hbWUgPT0gSWRlbnRpZmllcnMuY2FsbCAmJgogICAgICAgICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuaXNHZW5lcmljQ2xhc3MoY2xzKSkgewogICAgICAgICAgICBfY2xvc3VyaXplZE1lbWJlcnNXaXRoRnJlZVR5cGVWYXJpYWJsZXMuYWRkKG1lbWJlcik7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAodXNhZ2UuaGFzUGVuZGluZ0R5bmFtaWNSZWFkICYmIF9oYXNJbnZva2VkR2V0dGVyKG1lbWJlcikpIHsKICAgICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2UucmVhZChBY2Nlc3Nlcy5keW5hbWljQWNjZXNzKSk7CiAgICAgICAgfQogICAgICAgIGlmICh1c2FnZS5oYXNQZW5kaW5nRHluYW1pY0ludm9rZSkgewogICAgICAgICAgSXRlcmFibGU8Q2FsbFN0cnVjdHVyZT4gY2FsbFN0cnVjdHVyZXMgPQogICAgICAgICAgICAgIF9nZXRJbnZvY2F0aW9uQ2FsbFN0cnVjdHVyZXMobWVtYmVyKTsKICAgICAgICAgIGZvciAoQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlIGluIGNhbGxTdHJ1Y3R1cmVzKSB7CiAgICAgICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2UuaW52b2tlKEFjY2Vzc2VzLmR5bmFtaWNBY2Nlc3MsIGNhbGxTdHJ1Y3R1cmUpKTsKICAgICAgICAgICAgaWYgKCF1c2FnZS5oYXNQZW5kaW5nRHluYW1pY0ludm9rZSkgewogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh1c2FnZS5oYXNQZW5kaW5nRHluYW1pY1dyaXRlICYmIF9oYXNJbnZva2VkU2V0dGVyKG1lbWJlcikpIHsKICAgICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2Uud3JpdGUoQWNjZXNzZXMuZHluYW1pY0FjY2VzcykpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFjaGVja0VucXVldWVyQ29uc2lzdGVuY3kpIHsKICAgICAgICAgIGlmICh1c2FnZS5oYXNQZW5kaW5nRHluYW1pY0ludm9rZSkgewogICAgICAgICAgICBfaW52b2thYmxlSW5zdGFuY2VNZW1iZXJzQnlOYW1lCiAgICAgICAgICAgICAgICAucHV0SWZBYnNlbnQobWVtYmVyTmFtZSwgKCkgPT4ge30pCiAgICAgICAgICAgICAgICAuYWRkKHVzYWdlKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh1c2FnZS5oYXNQZW5kaW5nRHluYW1pY1JlYWQpIHsKICAgICAgICAgICAgX3JlYWRhYmxlSW5zdGFuY2VNZW1iZXJzQnlOYW1lCiAgICAgICAgICAgICAgICAucHV0SWZBYnNlbnQobWVtYmVyTmFtZSwgKCkgPT4ge30pCiAgICAgICAgICAgICAgICAuYWRkKHVzYWdlKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh1c2FnZS5oYXNQZW5kaW5nRHluYW1pY1dyaXRlKSB7CiAgICAgICAgICAgIF93cml0YWJsZUluc3RhbmNlTWVtYmVyc0J5TmFtZQogICAgICAgICAgICAgICAgLnB1dElmQWJzZW50KG1lbWJlck5hbWUsICgpID0+IHt9KQogICAgICAgICAgICAgICAgLmFkZCh1c2FnZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHVzYWdlID0gbmV3IE1lbWJlclVzYWdlKG1lbWJlcik7CiAgICAgICAgaWYgKG1lbWJlci5pc0ZpZWxkKSB7CiAgICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLmluaXQoKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5KSB7CiAgICAgICAgX21lbWJlclVzYWdlW21lbWJlcl0gPSB1c2FnZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHVzYWdlOwogIH0KCiAgdm9pZCBfcHJvY2Vzc0luc3RhbnRpYXRlZENsYXNzTWVtYmVyKAogICAgICBDbGFzc0VudGl0eSBjbHMsIE1lbWJlckVudGl0eSBtZW1iZXIsIE1lbWJlclVzZWRDYWxsYmFjayBtZW1iZXJVc2VkLAogICAgICB7Ym9vbCBjaGVja0VucXVldWVyQ29uc2lzdGVuY3k6IGZhbHNlfSkgewogICAgaWYgKCFtZW1iZXIuaXNJbnN0YW5jZU1lbWJlcikgcmV0dXJuOwogICAgU3RyaW5nIG1lbWJlck5hbWUgPSBtZW1iZXIubmFtZTsKCiAgICBNZW1iZXJVc2FnZSB1c2FnZSA9IF9tZW1iZXJVc2FnZVttZW1iZXJdOwogICAgaWYgKHVzYWdlID09IG51bGwpIHsKICAgICAgRW51bVNldDxNZW1iZXJVc2U+IHVzZVNldCA9IG5ldyBFbnVtU2V0PE1lbWJlclVzZT4oKTsKICAgICAgdXNhZ2UgPSBfZ2V0TWVtYmVyVXNhZ2UobWVtYmVyLCB1c2VTZXQsCiAgICAgICAgICBjaGVja0VucXVldWVyQ29uc2lzdGVuY3k6IGNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeSk7CiAgICAgIGlmICh1c2VTZXQuaXNOb3RFbXB0eSkgewogICAgICAgIGlmIChjaGVja0VucXVldWVyQ29uc2lzdGVuY3kpIHsKICAgICAgICAgIHRocm93IG5ldyBTcGFubmFibGVBc3NlcnRpb25GYWlsdXJlKG1lbWJlciwKICAgICAgICAgICAgICAnVW5lbnF1ZXVlZCB1c2FnZSBvZiAkbWVtYmVyOiBcbmJlZm9yZTogPG5vbmU+XG5hZnRlciA6ICR1c2FnZScpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBtZW1iZXJVc2VkKHVzYWdlLmVudGl0eSwgdXNlU2V0KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIE1lbWJlclVzYWdlIG9yaWdpbmFsID0gdXNhZ2U7CiAgICAgIGlmIChjaGVja0VucXVldWVyQ29uc2lzdGVuY3kpIHsKICAgICAgICB1c2FnZSA9IHVzYWdlLmNsb25lKCk7CiAgICAgIH0KICAgICAgaWYgKHVzYWdlLmhhc1BlbmRpbmdEeW5hbWljVXNlKSB7CiAgICAgICAgRW51bVNldDxNZW1iZXJVc2U+IHVzZVNldCA9IG5ldyBFbnVtU2V0PE1lbWJlclVzZT4oKTsKICAgICAgICBpZiAodXNhZ2UuaGFzUGVuZGluZ0R5bmFtaWNSZWFkICYmIF9oYXNJbnZva2VkR2V0dGVyKG1lbWJlcikpIHsKICAgICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2UucmVhZChBY2Nlc3Nlcy5keW5hbWljQWNjZXNzKSk7CiAgICAgICAgfQogICAgICAgIGlmICh1c2FnZS5oYXNQZW5kaW5nRHluYW1pY0ludm9rZSkgewogICAgICAgICAgSXRlcmFibGU8Q2FsbFN0cnVjdHVyZT4gY2FsbFN0cnVjdHVyZXMgPQogICAgICAgICAgICAgIF9nZXRJbnZvY2F0aW9uQ2FsbFN0cnVjdHVyZXMobWVtYmVyKTsKICAgICAgICAgIGZvciAoQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlIGluIGNhbGxTdHJ1Y3R1cmVzKSB7CiAgICAgICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2UuaW52b2tlKEFjY2Vzc2VzLmR5bmFtaWNBY2Nlc3MsIGNhbGxTdHJ1Y3R1cmUpKTsKICAgICAgICAgICAgaWYgKCF1c2FnZS5oYXNQZW5kaW5nRHluYW1pY0ludm9rZSkgewogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh1c2FnZS5oYXNQZW5kaW5nRHluYW1pY1dyaXRlICYmIF9oYXNJbnZva2VkU2V0dGVyKG1lbWJlcikpIHsKICAgICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2Uud3JpdGUoQWNjZXNzZXMuZHluYW1pY0FjY2VzcykpOwogICAgICAgIH0KICAgICAgICBpZiAoIWNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeSkgewogICAgICAgICAgaWYgKCF1c2FnZS5oYXNQZW5kaW5nRHluYW1pY1JlYWQpIHsKICAgICAgICAgICAgX3JlYWRhYmxlSW5zdGFuY2VNZW1iZXJzQnlOYW1lW21lbWJlck5hbWVdPy5yZW1vdmUodXNhZ2UpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCF1c2FnZS5oYXNQZW5kaW5nRHluYW1pY0ludm9rZSkgewogICAgICAgICAgICBfaW52b2thYmxlSW5zdGFuY2VNZW1iZXJzQnlOYW1lW21lbWJlck5hbWVdPy5yZW1vdmUodXNhZ2UpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCF1c2FnZS5oYXNQZW5kaW5nRHluYW1pY1dyaXRlKSB7CiAgICAgICAgICAgIF93cml0YWJsZUluc3RhbmNlTWVtYmVyc0J5TmFtZVttZW1iZXJOYW1lXT8ucmVtb3ZlKHVzYWdlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeSAmJiAhb3JpZ2luYWwuZGF0YUVxdWFscyh1c2FnZSkpIHsKICAgICAgICAgIF9lbGVtZW50TWFwLnJlcG9ydGVyLmludGVybmFsRXJyb3IoCiAgICAgICAgICAgICAgbWVtYmVyLAogICAgICAgICAgICAgICdVbmVucXVldWVkIHVzYWdlIG9mICRtZW1iZXI6IFxuJwogICAgICAgICAgICAgICdiZWZvcmU6ICRvcmlnaW5hbFxuYWZ0ZXIgOiAkdXNhZ2UnKTsKICAgICAgICB9CiAgICAgICAgbWVtYmVyVXNlZCh1c2FnZS5lbnRpdHksIHVzZVNldCk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBhbGxNaXhpblVzZXNPZihDbGFzc0VudGl0eSBjbHMpIHsKICAgIEl0ZXJhYmxlPENsYXNzRW50aXR5PiB1c2VzID0gX2NsYXNzSGllcmFyY2h5QnVpbGRlci5taXhpblVzZXNbY2xzXTsKICAgIHJldHVybiB1c2VzICE9IG51bGwgPyB1c2VzIDogY29uc3QgPENsYXNzRW50aXR5PltdOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclVzZWRFbGVtZW50KE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoZWxlbWVudC5pc0luc3RhbmNlTWVtYmVyICYmICFlbGVtZW50LmlzQWJzdHJhY3QpIHsKICAgICAgX2xpdmVJbnN0YW5jZU1lbWJlcnMuYWRkKGVsZW1lbnQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc01lbWJlclVzZWQoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgcmV0dXJuIF9tZW1iZXJVc2FnZVttZW1iZXJdPy5oYXNVc2UgPz8gZmFsc2U7CiAgfQoKICBNYXA8Q2xhc3NFbnRpdHksIFNldDxDbGFzc0VudGl0eT4+IHBvcHVsYXRlSGllcmFyY2h5Tm9kZXMoKSB7CiAgICBNYXA8Q2xhc3NFbnRpdHksIFNldDxDbGFzc0VudGl0eT4+IHR5cGVzSW1wbGVtZW50ZWRCeVN1YmNsYXNzZXMgPQogICAgICAgIG5ldyBNYXA8Q2xhc3NFbnRpdHksIFNldDxDbGFzc0VudGl0eT4+KCk7CgogICAgLy8gVXBkYXRlcyB0aGUgYGlzRGlyZWN0bHlJbnN0YW50aWF0ZWRgIGFuZCBgaXNJbmRpcmVjdGx5SW5zdGFudGlhdGVkYAogICAgLy8gcHJvcGVydGllcyBvZiB0aGUgW0NsYXNzSGllcmFyY2h5Tm9kZV0gZm9yIFtjbHNdLgoKICAgIHZvaWQgYWRkU3VidHlwZXMoQ2xhc3NFbnRpdHkgY2xzLCBJbnN0YW50aWF0aW9uSW5mbyBpbmZvKSB7CiAgICAgIGlmICghaW5mby5oYXNJbnN0YW50aWF0aW9uKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9jbGFzc0hpZXJhcmNoeUJ1aWxkZXIudXBkYXRlQ2xhc3NIaWVyYXJjaHlOb2RlRm9yQ2xhc3MoY2xzLAogICAgICAgICAgZGlyZWN0bHlJbnN0YW50aWF0ZWQ6IGluZm8uaXNEaXJlY3RseUluc3RhbnRpYXRlZCwKICAgICAgICAgIGFic3RyYWN0bHlJbnN0YW50aWF0ZWQ6IGluZm8uaXNBYnN0cmFjdGx5SW5zdGFudGlhdGVkKTsKCiAgICAgIC8vIFdhbGsgdGhyb3VnaCB0aGUgc3VwZXJjbGFzc2VzLCBhbmQgcmVjb3JkIHRoZSB0eXBlcwogICAgICAvLyBpbXBsZW1lbnRlZCBieSB0aGF0IHR5cGUgb24gdGhlIHN1cGVyY2xhc3Nlcy4KICAgICAgQ2xhc3NFbnRpdHkgc3VwZXJjbGFzcyA9IF9jbGFzc1F1ZXJpZXMuZ2V0U3VwZXJDbGFzcyhjbHMpOwogICAgICB3aGlsZSAoc3VwZXJjbGFzcyAhPSBudWxsKSB7CiAgICAgICAgU2V0PENsYXNzRW50aXR5PiB0eXBlc0ltcGxlbWVudGVkQnlTdWJjbGFzc2VzT2ZDbHMgPQogICAgICAgICAgICB0eXBlc0ltcGxlbWVudGVkQnlTdWJjbGFzc2VzLnB1dElmQWJzZW50KAogICAgICAgICAgICAgICAgc3VwZXJjbGFzcywgKCkgPT4gbmV3IFNldDxDbGFzc0VudGl0eT4oKSk7CiAgICAgICAgZm9yIChJbnRlcmZhY2VUeXBlIGN1cnJlbnQgaW4gX2NsYXNzUXVlcmllcy5nZXRTdXBlcnR5cGVzKGNscykpIHsKICAgICAgICAgIHR5cGVzSW1wbGVtZW50ZWRCeVN1YmNsYXNzZXNPZkNscy5hZGQoY3VycmVudC5lbGVtZW50KTsKICAgICAgICB9CiAgICAgICAgc3VwZXJjbGFzcyA9IF9jbGFzc1F1ZXJpZXMuZ2V0U3VwZXJDbGFzcyhzdXBlcmNsYXNzKTsKICAgICAgfQogICAgfQoKICAgIC8vIFVzZSB0aGUgWzpzZWVuQ2xhc3NlczpdIHNldCB0byBpbmNsdWRlIG5vbi1pbnN0YW50aWF0ZWQKICAgIC8vIGNsYXNzZXM6IGlmIHRoZSBzdXBlcmNsYXNzIG9mIHRoZXNlIGNsYXNzZXMgcmVxdWlyZSBSVEksIHRoZW4KICAgIC8vIHRoZXkgYWxzbyBuZWVkIFJUSSwgc28gdGhhdCBhIGNvbnN0cnVjdG9yIHBhc3NlcyB0aGUgdHlwZQogICAgLy8gdmFyaWFibGVzIHRvIHRoZSBzdXBlciBjb25zdHJ1Y3Rvci4KICAgIGdldEluc3RhbnRpYXRpb25NYXAoKS5mb3JFYWNoKGFkZFN1YnR5cGVzKTsKCiAgICByZXR1cm4gdHlwZXNJbXBsZW1lbnRlZEJ5U3ViY2xhc3NlczsKICB9CgogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gY29tcHV0ZUFzc2lnbmVkSW5zdGFuY2VNZW1iZXJzKCkgewogICAgU2V0PE1lbWJlckVudGl0eT4gYXNzaWduZWRJbnN0YW5jZU1lbWJlcnMgPSBuZXcgU2V0PE1lbWJlckVudGl0eT4oKTsKICAgIGZvciAoTWVtYmVyRW50aXR5IGluc3RhbmNlTWVtYmVyIGluIF9saXZlSW5zdGFuY2VNZW1iZXJzKSB7CiAgICAgIGlmIChfaGFzSW52b2tlZFNldHRlcihpbnN0YW5jZU1lbWJlcikpIHsKICAgICAgICBhc3NpZ25lZEluc3RhbmNlTWVtYmVycy5hZGQoaW5zdGFuY2VNZW1iZXIpOwogICAgICB9CiAgICB9CiAgICBhc3NpZ25lZEluc3RhbmNlTWVtYmVycy5hZGRBbGwoX2ZpZWxkU2V0dGVycyk7CiAgICByZXR1cm4gYXNzaWduZWRJbnN0YW5jZU1lbWJlcnM7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBfY2xhc3NIaWVyYXJjaHlCdWlsZGVyLnJlZ2lzdGVyQ2xhc3MoY2xzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbmhlcml0ZWRJbigKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciwgQ2xhc3NFbnRpdHkgdHlwZSwgQ2xhc3NSZWxhdGlvbiByZWxhdGlvbikgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIHRoZSBbbWVtYmVyXSBpdHNlbGYgdG8gYXZvaWQgZW5xdWV1ZWluZyBtZW1iZXJzCiAgICAvLyB0aGF0IGFyZSBvdmVycmlkZGVuLgogICAgcmV0dXJuIGlzSW5oZXJpdGVkSW5DbGFzcyhtZW1iZXIuZW5jbG9zaW5nQ2xhc3MsIHR5cGUsIHJlbGF0aW9uKTsKICB9CgogIGJvb2wgaXNJbmhlcml0ZWRJbkNsYXNzKENsYXNzRW50aXR5IG1lbWJlckhvbGRpbmdDbGFzcywgQ2xhc3NFbnRpdHkgdHlwZSwKICAgICAgQ2xhc3NSZWxhdGlvbiByZWxhdGlvbikgewogICAgc3dpdGNoIChyZWxhdGlvbikgewogICAgICBjYXNlIENsYXNzUmVsYXRpb24uZXhhY3Q6CiAgICAgICAgcmV0dXJuIF9jbGFzc0hpZXJhcmNoeUJ1aWxkZXIuaXNJbmhlcml0ZWRJbkV4YWN0Q2xhc3MoCiAgICAgICAgICAgIG1lbWJlckhvbGRpbmdDbGFzcywgdHlwZSk7CiAgICAgIGNhc2UgQ2xhc3NSZWxhdGlvbi50aGlzRXhwcmVzc2lvbjoKICAgICAgICByZXR1cm4gX2NsYXNzSGllcmFyY2h5QnVpbGRlci5pc0luaGVyaXRlZEluVGhpc0NsYXNzKAogICAgICAgICAgICBtZW1iZXJIb2xkaW5nQ2xhc3MsIHR5cGUpOwogICAgICBjYXNlIENsYXNzUmVsYXRpb24uc3VidHlwZToKICAgICAgICBpZiAobWVtYmVySG9sZGluZ0NsYXNzID09IF9jb21tb25FbGVtZW50cy5udWxsQ2xhc3MgfHwKICAgICAgICAgICAgbWVtYmVySG9sZGluZ0NsYXNzID09IF9jb21tb25FbGVtZW50cy5qc051bGxDbGFzcykgewogICAgICAgICAgLy8gTWVtYmVycyBvZiBgTnVsbGAgYW5kIGBKU051bGxgIGFyZSBhbHdheXMgcG90ZW50aWFsIHRhcmdldHMuCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9jbGFzc0hpZXJhcmNoeUJ1aWxkZXIuaXNJbmhlcml0ZWRJblN1YnR5cGVPZigKICAgICAgICAgICAgbWVtYmVySG9sZGluZ0NsYXNzLCB0eXBlKTsKICAgIH0KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJVbmV4cGVjdGVkIENsYXNzUmVsYXRpb24gJHJlbGF0aW9uLiIpOwogIH0KCiAgQG92ZXJyaWRlCiAgS0Nsb3NlZFdvcmxkIGNsb3NlV29ybGQoRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyKSB7CiAgICBNYXA8Q2xhc3NFbnRpdHksIFNldDxDbGFzc0VudGl0eT4+IHR5cGVzSW1wbGVtZW50ZWRCeVN1YmNsYXNzZXMgPQogICAgICAgIHBvcHVsYXRlSGllcmFyY2h5Tm9kZXMoKTsKCiAgICBCYWNrZW5kVXNhZ2UgYmFja2VuZFVzYWdlID0gX2JhY2tlbmRVc2FnZUJ1aWxkZXIuY2xvc2UoKTsKICAgIF9jbG9zZWQgPSB0cnVlOwoKICAgIE1hcDxNZW1iZXJFbnRpdHksIE1lbWJlclVzYWdlPiBsaXZlTWVtYmVyVXNhZ2UgPSB7fTsKICAgIF9tZW1iZXJVc2FnZS5mb3JFYWNoKChNZW1iZXJFbnRpdHkgbWVtYmVyLCBNZW1iZXJVc2FnZSBtZW1iZXJVc2FnZSkgewogICAgICBpZiAobWVtYmVyVXNhZ2UuaGFzVXNlKSB7CiAgICAgICAgbGl2ZU1lbWJlclVzYWdlW21lbWJlcl0gPSBtZW1iZXJVc2FnZTsKICAgICAgICBhc3NlcnQoX3Byb2Nlc3NlZE1lbWJlcnMuY29udGFpbnMobWVtYmVyKSwKICAgICAgICAgICAgIk1lbWJlciAkbWVtYmVyIGlzIHVzZWQgYnV0IG5vdCBwcm9jZXNzZWQ6ICRtZW1iZXJVc2FnZS4iKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQoIV9wcm9jZXNzZWRNZW1iZXJzLmNvbnRhaW5zKG1lbWJlciksCiAgICAgICAgICAgICJNZW1iZXIgJG1lbWJlciBpcyBwcm9jZXNzZWQgYnV0IG5vdCB1c2VkOiAkbWVtYmVyVXNhZ2UuIik7CiAgICAgIH0KICAgIH0pOwogICAgZm9yIChNZW1iZXJFbnRpdHkgbWVtYmVyIGluIF9wcm9jZXNzZWRNZW1iZXJzKSB7CiAgICAgIGFzc2VydChfbWVtYmVyVXNhZ2UuY29udGFpbnNLZXkobWVtYmVyKSwKICAgICAgICAgICJNZW1iZXIgJG1lbWJlciBpcyBwcm9jZXNzZWQgYnV0IGhhcyBub3QgdXNhZ2UuIik7CiAgICB9CgogICAgU2V0PEludGVyZmFjZVR5cGU+IGluc3RhbnRpYXRlZFR5cGVzID0gbmV3IFNldDxJbnRlcmZhY2VUeXBlPigpOwogICAgZ2V0SW5zdGFudGlhdGlvbk1hcCgpLmZvckVhY2goKF8sIEluc3RhbnRpYXRpb25JbmZvIGluZm8pIHsKICAgICAgaWYgKGluZm8uaW5zdGFudGlhdGlvbk1hcCAhPSBudWxsKSB7CiAgICAgICAgZm9yIChTZXQ8SW5zdGFuY2U+IGluc3RhbmNlcyBpbiBpbmZvLmluc3RhbnRpYXRpb25NYXAudmFsdWVzKSB7CiAgICAgICAgICBmb3IgKEluc3RhbmNlIGluc3RhbmNlIGluIGluc3RhbmNlcykgewogICAgICAgICAgICBpbnN0YW50aWF0ZWRUeXBlcy5hZGQoaW5zdGFuY2UudHlwZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKCiAgICBLQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQgPSBuZXcgS0Nsb3NlZFdvcmxkSW1wbChfZWxlbWVudE1hcCwKICAgICAgICBvcHRpb25zOiBfb3B0aW9ucywKICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQ6IF9lbGVtZW50RW52aXJvbm1lbnQsCiAgICAgICAgZGFydFR5cGVzOiBfZGFydFR5cGVzLAogICAgICAgIGNvbW1vbkVsZW1lbnRzOiBfY29tbW9uRWxlbWVudHMsCiAgICAgICAgbmF0aXZlRGF0YTogX25hdGl2ZURhdGFCdWlsZGVyLmNsb3NlKCksCiAgICAgICAgaW50ZXJjZXB0b3JEYXRhOiBfaW50ZXJjZXB0b3JEYXRhQnVpbGRlci5jbG9zZSgpLAogICAgICAgIGJhY2tlbmRVc2FnZTogYmFja2VuZFVzYWdlLAogICAgICAgIG5vU3VjaE1ldGhvZERhdGE6IF9ub1N1Y2hNZXRob2RSZWdpc3RyeS5jbG9zZSgpLAogICAgICAgIHJ0aU5lZWRCdWlsZGVyOiBfcnRpTmVlZEJ1aWxkZXIsCiAgICAgICAgZmllbGRBbmFseXNpczogX2FsbG9jYXRvckFuYWx5c2lzLAogICAgICAgIGltcGxlbWVudGVkQ2xhc3NlczogX2ltcGxlbWVudGVkQ2xhc3NlcywKICAgICAgICBsaXZlTmF0aXZlQ2xhc3NlczogX25hdGl2ZVJlc29sdXRpb25FbnF1ZXVlci5saXZlTmF0aXZlQ2xhc3NlcywKICAgICAgICBsaXZlSW5zdGFuY2VNZW1iZXJzOiBfbGl2ZUluc3RhbmNlTWVtYmVycywKICAgICAgICBhc3NpZ25lZEluc3RhbmNlTWVtYmVyczogY29tcHV0ZUFzc2lnbmVkSW5zdGFuY2VNZW1iZXJzKCksCiAgICAgICAgbGl2ZU1lbWJlclVzYWdlOiBsaXZlTWVtYmVyVXNhZ2UsCiAgICAgICAgbWl4aW5Vc2VzOiBfY2xhc3NIaWVyYXJjaHlCdWlsZGVyLm1peGluVXNlcywKICAgICAgICB0eXBlc0ltcGxlbWVudGVkQnlTdWJjbGFzc2VzOiB0eXBlc0ltcGxlbWVudGVkQnlTdWJjbGFzc2VzLAogICAgICAgIGNsYXNzSGllcmFyY2h5OiBfY2xhc3NIaWVyYXJjaHlCdWlsZGVyLmNsb3NlKCksCiAgICAgICAgYW5ub3RhdGlvbnNEYXRhOiBfYW5ub3RhdGlvbnNEYXRhQnVpbGRlci5jbG9zZShfb3B0aW9ucyksCiAgICAgICAgaXNDaGVja3M6IF9pc0NoZWNrcywKICAgICAgICBzdGF0aWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXM6IHN0YXRpY1R5cGVBcmd1bWVudERlcGVuZGVuY2llcywKICAgICAgICBkeW5hbWljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzOiBkeW5hbWljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzLAogICAgICAgIHR5cGVWYXJpYWJsZVR5cGVMaXRlcmFsczogdHlwZVZhcmlhYmxlVHlwZUxpdGVyYWxzLAogICAgICAgIGdlbmVyaWNMb2NhbEZ1bmN0aW9uczogX2dlbmVyaWNMb2NhbEZ1bmN0aW9ucywKICAgICAgICBjbG9zdXJpemVkTWVtYmVyc1dpdGhGcmVlVHlwZVZhcmlhYmxlczoKICAgICAgICAgICAgX2Nsb3N1cml6ZWRNZW1iZXJzV2l0aEZyZWVUeXBlVmFyaWFibGVzLAogICAgICAgIGxvY2FsRnVuY3Rpb25zOiBfbG9jYWxGdW5jdGlvbnMsCiAgICAgICAgaW5zdGFudGlhdGVkVHlwZXM6IGluc3RhbnRpYXRlZFR5cGVzKTsKICAgIGlmIChyZXRhaW5EYXRhRm9yVGVzdGluZykgewogICAgICBfY2xvc2VkV29ybGRDYWNoZSA9IGNsb3NlZFdvcmxkOwogICAgfQogICAgcmV0dXJuIGNsb3NlZFdvcmxkOwogIH0KfQqEPABOTjwBGTciIyQhISlAKixKUTU2KiY/Gh8cNR5IGRwmEkwdAUtRGlAqATcGRioBJwIBPBpPTS4BNDcBMk4+TCI3KAFRKQZKTx5LLwFFPFEBTilOAU0tLQEvNS8BURMnAUcBRwIBPTgRHBwBIgEMFT8EAQwcLSo1BAEMFioUNx1AHzcZBhoEAgExGkcGEwYdBiszOgs2FhYrCwYGEhofIh8qKDULBiEGGh5RDh5NDgwSFjU/Sw4WRUNCDhY/DgwXGT8OCwZOHToBRxlPPxU9KBQwJw8yKQ8pDw9FBgQBSR86ATQnATYpAQwWKiQkHxdIGhoKIyERIQoYFxsKBhMaBAIBODowSQY0QSoBPEcBLwY0TgEsBjQ5IUg2SjZKNgE5IwFOATo2JQFMAU0hBk4aSCQBTR1HJAFNHkckAUEBNz4BTSo3AUYhASIwHigBKi44MjErPDQ4AUI2JAEYIkoBRwE+AUEBIAEsAR4VGCAXHB0fJCEcHyYiJCkjGwEMRz4BDDEqAQw2IwQBDEQBDCsUEFAGHgQBNgw6N04jGggIFAQBDDhGJjwGBAFOPkwMIjcpJB1MNzlFSUQyJxY2DzQIBjQwQz1CMQYBURAoN0w6FVEKCgYEATZLOycwLTk/NzYKCAY2BAEdSykwLTk/FwoIBhIEAUk+HwQBTksEATBHBAEwRwQBDBs+LScBEzE2Mz81OTMzKQoWCgYBHyIjPD8ULx9OUE83TjIKDx9BFC41Si83RzAKDx9BFC42TS8xCg8GBAEzRS0hN0xCQx85PBMGOgQBDDIZBAEMQCkEAQwuKwQBDE8zLxpDKzMILg4/OiNEJggOBgEuOjoBRzkGQkhGEAEeLQ8tLg8iJyIPKTk7DyouOg8kOQ8lOg8qOg8rOg8lOw8lJQ8uPw8nLRdKDygtF0sPLTMXSw8oUQ8jJixRBh0oBgQBMQZFPRsBMy8zJQgEAT9RS08NMDUjMxUIFAYBLzQGBAEMSzAwMT8/CAQBR04PSSkwIU1JKy45KSEeCAYnBAFOMC4ZJSkxThpGTS9JLUxRPSkrJwopLCkMIzE5QQwKAUg9Ci0zNEBQMhUODApJPgoBKS8sMx0MLSszHQwuKzMdDAoPKR4nCggnJggGEgQBKEswKiUBLhk8Lj8fKDZQESwKCA0kJh8IKD5IPQotMzRAUDIVDgwKST4KKS5HDDBIDC9HDApHLhYwNAoqCAYEAQw6SDgEAQwzOykGBAEMKzIEAUBGMgFLOQFAJBAIQz1CAT03QSM9NjtKQgo+CAYBP0VBKzABKQQBPElALzUIBjMkBAEMKC8EAQwWR1AcRgQBTCAYID8nKT4nIj9BShcKPicGRwQBDDlGIgE+FAE5SiAvM0gPNEgICDUvPQYBRUArSDEyDAoICAFBGzEfKTA6JDkpKzFIM0MqNUQ4Qh1ISjw3MDUpLyAnBhgEAgE7cGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2UvcmVzb2x1dGlvbl93b3JsZF9idWlsZGVyLmRhcnQ4c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvdW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnSt9S8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMudW5pdmVyc2Uud29ybGRfaW1wYWN0OwoKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCcgc2hvdyBTZXRsZXQ7CmltcG9ydCAndXNlLmRhcnQnOwoKLy8vIERlc2NyaWJlcyBob3cgYW4gZWxlbWVudCAoZS5nLiBhIG1ldGhvZCkgaW1wYWN0cyB0aGUgY2xvc2VkLXdvcmxkCi8vLyBzZW1hbnRpY3Mgb2YgYSBwcm9ncmFtLgovLy8KLy8vIEEgW1dvcmxkSW1wYWN0XSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBob3cgYSBwcm9ncmFtIGVsZW1lbnQgYWZmZWN0cyBvdXIKLy8vIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCdzIGxpdmUgaW4gYSBwcm9ncmFtLiBGb3IgZXhhbXBsZSwgaXQgY2FuIGluZGljYXRlCi8vLyB0aGF0IGEgbWV0aG9kIHVzZXMgYSBjZXJ0YWluIGZlYXR1cmUsIG9yIGFsbG9jYXRlcyBhIHNwZWNpZmljIHR5cGUuCi8vLwovLy8gVGhlIGltcGFjdCBvYmplY3QgY2FuIGJlIGNvbXB1dGVkIGxvY2FsbHkgYnkgaW5zcGVjdGluZyBqdXN0IHRoZSByZXNvbHV0aW9uCi8vLyBpbmZvcm1hdGlvbiBvZiB0aGF0IGVsZW1lbnQgYWxvbmUuIFRoZSBjb21waWxlciB1c2VzIFtVbml2ZXJzZV0gYW5kCi8vLyBbV29ybGRdIHRvIGNvbWJpbmUgdGhlIGluZm9ybWF0aW9uIGRpc2NvdmVyZWQgaW4gdGhlIGltcGFjdCBvYmplY3RzIG9mCi8vLyBhbGwgZWxlbWVudHMgcmVhY2hhYmxlIGluIGFuIGFwcGxpY2F0aW9uLgpjbGFzcyBXb3JsZEltcGFjdCB7CiAgY29uc3QgV29ybGRJbXBhY3QoKTsKCiAgTWVtYmVyRW50aXR5IGdldCBtZW1iZXIgPT4gbnVsbDsKCiAgSXRlcmFibGU8RHluYW1pY1VzZT4gZ2V0IGR5bmFtaWNVc2VzID0+IGNvbnN0IDxEeW5hbWljVXNlPltdOwoKICBJdGVyYWJsZTxTdGF0aWNVc2U+IGdldCBzdGF0aWNVc2VzID0+IGNvbnN0IDxTdGF0aWNVc2U+W107CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlcGxhY2UgdGhpcyBieSBjYWxsZWQgY29uc3RydWN0b3JzIHdpdGggdHlwZQogIC8vIGFyZ3VtZW50cy4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDb2xsZWN0IGFsbCBjaGVja2VkIHR5cGVzIGZvciBjaGVja2VkIG1vZGUgc2VwYXJhdGVseQogIC8vIHRvIHN1cHBvcnQgc2VyaWFsaXphdGlvbi4KCiAgSXRlcmFibGU8VHlwZVVzZT4gZ2V0IHR5cGVVc2VzID0+IGNvbnN0IDxUeXBlVXNlPltdOwoKICBJdGVyYWJsZTxDb25zdGFudFVzZT4gZ2V0IGNvbnN0YW50VXNlcyA9PiBjb25zdCA8Q29uc3RhbnRVc2U+W107CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gdHJ1ZTsKCiAgdm9pZCBhcHBseShXb3JsZEltcGFjdFZpc2l0b3IgdmlzaXRvcikgewogICAgc3RhdGljVXNlcy5mb3JFYWNoKChTdGF0aWNVc2UgdXNlKSA9PiB2aXNpdG9yLnZpc2l0U3RhdGljVXNlKG1lbWJlciwgdXNlKSk7CiAgICBkeW5hbWljVXNlcwogICAgICAgIC5mb3JFYWNoKChEeW5hbWljVXNlIHVzZSkgPT4gdmlzaXRvci52aXNpdER5bmFtaWNVc2UobWVtYmVyLCB1c2UpKTsKICAgIHR5cGVVc2VzLmZvckVhY2goKFR5cGVVc2UgdXNlKSA9PiB2aXNpdG9yLnZpc2l0VHlwZVVzZShtZW1iZXIsIHVzZSkpOwogICAgY29uc3RhbnRVc2VzCiAgICAgICAgLmZvckVhY2goKENvbnN0YW50VXNlIHVzZSkgPT4gdmlzaXRvci52aXNpdENvbnN0YW50VXNlKG1lbWJlciwgdXNlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBkdW1wKHRoaXMpOwoKICBzdGF0aWMgU3RyaW5nIGR1bXAoV29ybGRJbXBhY3Qgd29ybGRJbXBhY3QpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHByaW50T24oc2IsIHdvcmxkSW1wYWN0KTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgc3RhdGljIHZvaWQgcHJpbnRPbihTdHJpbmdCdWZmZXIgc2IsIFdvcmxkSW1wYWN0IHdvcmxkSW1wYWN0KSB7CiAgICBzYi53cml0ZSgnbWVtYmVyOiAke3dvcmxkSW1wYWN0Lm1lbWJlcn0nKTsKCiAgICB2b2lkIGFkZChTdHJpbmcgdGl0bGUsIEl0ZXJhYmxlIGl0ZXJhYmxlKSB7CiAgICAgIGlmIChpdGVyYWJsZS5pc05vdEVtcHR5KSB7CiAgICAgICAgc2Iud3JpdGUoJ1xuICR0aXRsZTonKTsKICAgICAgICBpdGVyYWJsZS5mb3JFYWNoKChlKSA9PiBzYi53cml0ZSgnXG4gICRlJykpOwogICAgICB9CiAgICB9CgogICAgYWRkKCdkeW5hbWljIHVzZXMnLCB3b3JsZEltcGFjdC5keW5hbWljVXNlcyk7CiAgICBhZGQoJ3N0YXRpYyB1c2VzJywgd29ybGRJbXBhY3Quc3RhdGljVXNlcyk7CiAgICBhZGQoJ3R5cGUgdXNlcycsIHdvcmxkSW1wYWN0LnR5cGVVc2VzKTsKICAgIGFkZCgnY29uc3RhbnQgdXNlcycsIHdvcmxkSW1wYWN0LmNvbnN0YW50VXNlcyk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBXb3JsZEltcGFjdEJ1aWxkZXIgewogIHZvaWQgcmVnaXN0ZXJEeW5hbWljVXNlKER5bmFtaWNVc2UgZHluYW1pY1VzZSk7CiAgdm9pZCByZWdpc3RlclR5cGVVc2UoVHlwZVVzZSB0eXBlVXNlKTsKICB2b2lkIHJlZ2lzdGVyU3RhdGljVXNlKFN0YXRpY1VzZSBzdGF0aWNVc2UpOwogIHZvaWQgcmVnaXN0ZXJDb25zdGFudFVzZShDb25zdGFudFVzZSBjb25zdGFudFVzZSk7Cn0KCmNsYXNzIFdvcmxkSW1wYWN0QnVpbGRlckltcGwgZXh0ZW5kcyBXb3JsZEltcGFjdCBpbXBsZW1lbnRzIFdvcmxkSW1wYWN0QnVpbGRlciB7CiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogRG8gd2UgYmVuZWZpdCBmcm9tIGxhenkgaW5pdGlhbGl6YXRpb24gb2YgdGhlCiAgLy8gW1NldGxldF1zPwogIFNldDxEeW5hbWljVXNlPiBfZHluYW1pY1VzZXM7CiAgU2V0PFN0YXRpY1VzZT4gX3N0YXRpY1VzZXM7CiAgU2V0PFR5cGVVc2U+IF90eXBlVXNlczsKICBTZXQ8Q29uc3RhbnRVc2U+IF9jb25zdGFudFVzZXM7CgogIFdvcmxkSW1wYWN0QnVpbGRlckltcGwoKTsKCiAgV29ybGRJbXBhY3RCdWlsZGVySW1wbC5pbnRlcm5hbCgKICAgICAgdGhpcy5fZHluYW1pY1VzZXMsIHRoaXMuX3N0YXRpY1VzZXMsIHRoaXMuX3R5cGVVc2VzLCB0aGlzLl9jb25zdGFudFVzZXMpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0VtcHR5ID0+CiAgICAgIF9keW5hbWljVXNlcyA9PSBudWxsICYmCiAgICAgIF9zdGF0aWNVc2VzID09IG51bGwgJiYKICAgICAgX3R5cGVVc2VzID09IG51bGwgJiYKICAgICAgX2NvbnN0YW50VXNlcyA9PSBudWxsOwoKICAvLy8gQ29weSB1c2VzIGluIFtpbXBhY3RdIHRvIHRoaXMgaW1wYWN0IGJ1aWxkZXIuCiAgdm9pZCBhZGRJbXBhY3QoV29ybGRJbXBhY3QgaW1wYWN0KSB7CiAgICBpZiAoaW1wYWN0LmlzRW1wdHkpIHJldHVybjsKICAgIGltcGFjdC5keW5hbWljVXNlcy5mb3JFYWNoKHJlZ2lzdGVyRHluYW1pY1VzZSk7CiAgICBpbXBhY3Quc3RhdGljVXNlcy5mb3JFYWNoKHJlZ2lzdGVyU3RhdGljVXNlKTsKICAgIGltcGFjdC50eXBlVXNlcy5mb3JFYWNoKHJlZ2lzdGVyVHlwZVVzZSk7CiAgICBpbXBhY3QuY29uc3RhbnRVc2VzLmZvckVhY2gocmVnaXN0ZXJDb25zdGFudFVzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyRHluYW1pY1VzZShEeW5hbWljVXNlIGR5bmFtaWNVc2UpIHsKICAgIGFzc2VydChkeW5hbWljVXNlICE9IG51bGwpOwogICAgX2R5bmFtaWNVc2VzID8/PSBuZXcgU2V0bGV0PER5bmFtaWNVc2U+KCk7CiAgICBfZHluYW1pY1VzZXMuYWRkKGR5bmFtaWNVc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8RHluYW1pY1VzZT4gZ2V0IGR5bmFtaWNVc2VzIHsKICAgIHJldHVybiBfZHluYW1pY1VzZXMgIT0gbnVsbCA/IF9keW5hbWljVXNlcyA6IGNvbnN0IDxEeW5hbWljVXNlPltdOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclR5cGVVc2UoVHlwZVVzZSB0eXBlVXNlKSB7CiAgICBhc3NlcnQodHlwZVVzZSAhPSBudWxsKTsKICAgIF90eXBlVXNlcyA/Pz0gbmV3IFNldGxldDxUeXBlVXNlPigpOwogICAgX3R5cGVVc2VzLmFkZCh0eXBlVXNlKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPFR5cGVVc2U+IGdldCB0eXBlVXNlcyB7CiAgICByZXR1cm4gX3R5cGVVc2VzICE9IG51bGwgPyBfdHlwZVVzZXMgOiBjb25zdCA8VHlwZVVzZT5bXTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdGF0aWNVc2UoU3RhdGljVXNlIHN0YXRpY1VzZSkgewogICAgYXNzZXJ0KHN0YXRpY1VzZSAhPSBudWxsKTsKICAgIF9zdGF0aWNVc2VzID8/PSBuZXcgU2V0bGV0PFN0YXRpY1VzZT4oKTsKICAgIF9zdGF0aWNVc2VzLmFkZChzdGF0aWNVc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8U3RhdGljVXNlPiBnZXQgc3RhdGljVXNlcyB7CiAgICByZXR1cm4gX3N0YXRpY1VzZXMgIT0gbnVsbCA/IF9zdGF0aWNVc2VzIDogY29uc3QgPFN0YXRpY1VzZT5bXTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJDb25zdGFudFVzZShDb25zdGFudFVzZSBjb25zdGFudFVzZSkgewogICAgYXNzZXJ0KGNvbnN0YW50VXNlICE9IG51bGwpOwogICAgX2NvbnN0YW50VXNlcyA/Pz0gbmV3IFNldGxldDxDb25zdGFudFVzZT4oKTsKICAgIF9jb25zdGFudFVzZXMuYWRkKGNvbnN0YW50VXNlKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENvbnN0YW50VXNlPiBnZXQgY29uc3RhbnRVc2VzIHsKICAgIHJldHVybiBfY29uc3RhbnRVc2VzICE9IG51bGwgPyBfY29uc3RhbnRVc2VzIDogY29uc3QgPENvbnN0YW50VXNlPltdOwogIH0KfQoKLy8vIFtXb3JsZEltcGFjdEJ1aWxkZXJdIHRoYXQgY2FuIGNyZWF0ZSBhbmQgY29sbGVjdCBhIHNlcXVlbmNlIG9mCi8vLyBbV29ybGRJbXBhY3Rdcy4KY2xhc3MgU3RhZ2VkV29ybGRJbXBhY3RCdWlsZGVyIGltcGxlbWVudHMgV29ybGRJbXBhY3RCdWlsZGVyIHsKICBmaW5hbCBib29sIGNvbGxlY3RJbXBhY3RzOwogIFdvcmxkSW1wYWN0QnVpbGRlckltcGwgX2N1cnJlbnRCdWlsZGVyOwogIExpc3Q8V29ybGRJbXBhY3RCdWlsZGVySW1wbD4gX2J1aWxkZXJzID0gPFdvcmxkSW1wYWN0QnVpbGRlckltcGw+W107CgogIFN0YWdlZFdvcmxkSW1wYWN0QnVpbGRlcih7dGhpcy5jb2xsZWN0SW1wYWN0czogZmFsc2V9KTsKCiAgdm9pZCBfZW5zdXJlQnVpbGRlcigpIHsKICAgIGlmIChfY3VycmVudEJ1aWxkZXIgPT0gbnVsbCkgewogICAgICBfY3VycmVudEJ1aWxkZXIgPSBuZXcgV29ybGRJbXBhY3RCdWlsZGVySW1wbCgpOwogICAgICBpZiAoY29sbGVjdEltcGFjdHMpIHsKICAgICAgICBfYnVpbGRlcnMuYWRkKF9jdXJyZW50QnVpbGRlcik7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJUeXBlVXNlKFR5cGVVc2UgdHlwZVVzZSkgewogICAgX2Vuc3VyZUJ1aWxkZXIoKTsKICAgIF9jdXJyZW50QnVpbGRlci5yZWdpc3RlclR5cGVVc2UodHlwZVVzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyRHluYW1pY1VzZShEeW5hbWljVXNlIGR5bmFtaWNVc2UpIHsKICAgIF9lbnN1cmVCdWlsZGVyKCk7CiAgICBfY3VycmVudEJ1aWxkZXIucmVnaXN0ZXJEeW5hbWljVXNlKGR5bmFtaWNVc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN0YXRpY1VzZShTdGF0aWNVc2Ugc3RhdGljVXNlKSB7CiAgICBfZW5zdXJlQnVpbGRlcigpOwogICAgX2N1cnJlbnRCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKHN0YXRpY1VzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQ29uc3RhbnRVc2UoQ29uc3RhbnRVc2UgY29uc3RhbnRVc2UpIHsKICAgIF9lbnN1cmVCdWlsZGVyKCk7CiAgICBfY3VycmVudEJ1aWxkZXIucmVnaXN0ZXJDb25zdGFudFVzZShjb25zdGFudFVzZSk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgW1dvcmxkSW1wYWN0XSBidWlsdCBzbyBmYXIgd2l0aCB0aGlzIGJ1aWxkZXIuIFRoZSBidWlsZGVyCiAgLy8vIGlzIHJlc2V0LCBhbmQgaWYgW2NvbGxlY3RJbXBhY3RzXSBpcyBgdHJ1ZWAgdGhlIGltcGFjdCBpcyBjYWNoZWQgZm9yCiAgLy8vIFt3b3JsZEltcGFjdHNdLgogIFdvcmxkSW1wYWN0IGZsdXNoKCkgewogICAgaWYgKF9jdXJyZW50QnVpbGRlciA9PSBudWxsKSByZXR1cm4gY29uc3QgV29ybGRJbXBhY3QoKTsKICAgIFdvcmxkSW1wYWN0IHdvcmxkSW1wYWN0ID0gX2N1cnJlbnRCdWlsZGVyOwogICAgX2N1cnJlbnRCdWlsZGVyID0gbnVsbDsKICAgIHJldHVybiB3b3JsZEltcGFjdDsKICB9CgogIC8vLyBJZiBbY29sbGVjdEltcGFjdHNdIGlzIGB0cnVlYCB0aGlzIHJldHVybnMgYWxsIFtXb3JsZEltcGFjdF1zIGJ1aWx0IHdpdGgKICAvLy8gdGhpcyBidWlsZGVyLgogIEl0ZXJhYmxlPFdvcmxkSW1wYWN0PiBnZXQgd29ybGRJbXBhY3RzID0+IF9idWlsZGVyczsKfQoKLy8vIE11dGFibGUgaW1wbGVtZW50YXRpb24gb2YgW1dvcmxkSW1wYWN0XSB1c2VkIHRvIHRyYW5zZm9ybQovLy8gW1Jlc29sdXRpb25JbXBhY3RdIG9yIFtDb2RlZ2VuSW1wYWN0XSB0byBbV29ybGRJbXBhY3RdLgpjbGFzcyBUcmFuc2Zvcm1lZFdvcmxkSW1wYWN0IGltcGxlbWVudHMgV29ybGRJbXBhY3QsIFdvcmxkSW1wYWN0QnVpbGRlciB7CiAgZmluYWwgV29ybGRJbXBhY3Qgd29ybGRJbXBhY3Q7CgogIFNldGxldDxTdGF0aWNVc2U+IF9zdGF0aWNVc2VzOwogIFNldGxldDxUeXBlVXNlPiBfdHlwZVVzZXM7CiAgU2V0bGV0PER5bmFtaWNVc2U+IF9keW5hbWljVXNlczsKICBTZXRsZXQ8Q29uc3RhbnRVc2U+IF9jb25zdGFudFVzZXM7CgogIFRyYW5zZm9ybWVkV29ybGRJbXBhY3QodGhpcy53b3JsZEltcGFjdCk7CgogIEBvdmVycmlkZQogIE1lbWJlckVudGl0eSBnZXQgbWVtYmVyID0+IHdvcmxkSW1wYWN0Lm1lbWJlcjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFbXB0eSB7CiAgICByZXR1cm4gd29ybGRJbXBhY3QuaXNFbXB0eSAmJgogICAgICAgIF9zdGF0aWNVc2VzID09IG51bGwgJiYKICAgICAgICBfdHlwZVVzZXMgPT0gbnVsbCAmJgogICAgICAgIF9keW5hbWljVXNlcyA9PSBudWxsICYmCiAgICAgICAgX2NvbnN0YW50VXNlcyA9PSBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8RHluYW1pY1VzZT4gZ2V0IGR5bmFtaWNVc2VzIHsKICAgIHJldHVybiBfZHluYW1pY1VzZXMgIT0gbnVsbCA/IF9keW5hbWljVXNlcyA6IHdvcmxkSW1wYWN0LmR5bmFtaWNVc2VzOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckR5bmFtaWNVc2UoRHluYW1pY1VzZSBkeW5hbWljVXNlKSB7CiAgICBpZiAoX2R5bmFtaWNVc2VzID09IG51bGwpIHsKICAgICAgX2R5bmFtaWNVc2VzID0gbmV3IFNldGxldDxEeW5hbWljVXNlPigpOwogICAgICBfZHluYW1pY1VzZXMuYWRkQWxsKHdvcmxkSW1wYWN0LmR5bmFtaWNVc2VzKTsKICAgIH0KICAgIF9keW5hbWljVXNlcy5hZGQoZHluYW1pY1VzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyVHlwZVVzZShUeXBlVXNlIHR5cGVVc2UpIHsKICAgIGlmIChfdHlwZVVzZXMgPT0gbnVsbCkgewogICAgICBfdHlwZVVzZXMgPSBuZXcgU2V0bGV0PFR5cGVVc2U+KCk7CiAgICAgIF90eXBlVXNlcy5hZGRBbGwod29ybGRJbXBhY3QudHlwZVVzZXMpOwogICAgfQogICAgX3R5cGVVc2VzLmFkZCh0eXBlVXNlKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPFR5cGVVc2U+IGdldCB0eXBlVXNlcyB7CiAgICByZXR1cm4gX3R5cGVVc2VzICE9IG51bGwgPyBfdHlwZVVzZXMgOiB3b3JsZEltcGFjdC50eXBlVXNlczsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdGF0aWNVc2UoU3RhdGljVXNlIHN0YXRpY1VzZSkgewogICAgaWYgKF9zdGF0aWNVc2VzID09IG51bGwpIHsKICAgICAgX3N0YXRpY1VzZXMgPSBuZXcgU2V0bGV0PFN0YXRpY1VzZT4oKTsKICAgICAgX3N0YXRpY1VzZXMuYWRkQWxsKHdvcmxkSW1wYWN0LnN0YXRpY1VzZXMpOwogICAgfQogICAgX3N0YXRpY1VzZXMuYWRkKHN0YXRpY1VzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxTdGF0aWNVc2U+IGdldCBzdGF0aWNVc2VzIHsKICAgIHJldHVybiBfc3RhdGljVXNlcyAhPSBudWxsID8gX3N0YXRpY1VzZXMgOiB3b3JsZEltcGFjdC5zdGF0aWNVc2VzOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q29uc3RhbnRVc2U+IGdldCBjb25zdGFudFVzZXMgewogICAgcmV0dXJuIF9jb25zdGFudFVzZXMgIT0gbnVsbCA/IF9jb25zdGFudFVzZXMgOiB3b3JsZEltcGFjdC5jb25zdGFudFVzZXM7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQ29uc3RhbnRVc2UoQ29uc3RhbnRVc2UgY29uc3RhbnRVc2UpIHsKICAgIGlmIChfY29uc3RhbnRVc2VzID09IG51bGwpIHsKICAgICAgX2NvbnN0YW50VXNlcyA9IG5ldyBTZXRsZXQ8Q29uc3RhbnRVc2U+KCk7CiAgICAgIF9jb25zdGFudFVzZXMuYWRkQWxsKHdvcmxkSW1wYWN0LmNvbnN0YW50VXNlcyk7CiAgICB9CiAgICBfY29uc3RhbnRVc2VzLmFkZChjb25zdGFudFVzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFwcGx5KFdvcmxkSW1wYWN0VmlzaXRvciB2aXNpdG9yKSB7CiAgICBzdGF0aWNVc2VzLmZvckVhY2goKFN0YXRpY1VzZSB1c2UpID0+IHZpc2l0b3IudmlzaXRTdGF0aWNVc2UobWVtYmVyLCB1c2UpKTsKICAgIGR5bmFtaWNVc2VzCiAgICAgICAgLmZvckVhY2goKER5bmFtaWNVc2UgdXNlKSA9PiB2aXNpdG9yLnZpc2l0RHluYW1pY1VzZShtZW1iZXIsIHVzZSkpOwogICAgdHlwZVVzZXMuZm9yRWFjaCgoVHlwZVVzZSB1c2UpID0+IHZpc2l0b3IudmlzaXRUeXBlVXNlKG1lbWJlciwgdXNlKSk7CiAgICBjb25zdGFudFVzZXMKICAgICAgICAuZm9yRWFjaCgoQ29uc3RhbnRVc2UgdXNlKSA9PiB2aXNpdG9yLnZpc2l0Q29uc3RhbnRVc2UobWVtYmVyLCB1c2UpKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdUcmFuc2Zvcm1lZFdvcmxkSW1wYWN0KCR3b3JsZEltcGFjdCknKTsKICAgIFdvcmxkSW1wYWN0LnByaW50T24oc2IsIHRoaXMpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgovLy8gQ29uc3RhbnQgdXNlZCB0byBkZW5vdGUgYSBzcGVjaWZpYyB1c2Ugb2YgYSBbV29ybGRJbXBhY3RdLgpjbGFzcyBJbXBhY3RVc2VDYXNlIHsKICBmaW5hbCBTdHJpbmcgbmFtZTsKCiAgY29uc3QgSW1wYWN0VXNlQ2FzZSh0aGlzLm5hbWUpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnSW1wYWN0VXNlQ2FzZSgkbmFtZSknOwp9CgovLy8gU3RyYXRlZ3kgdXNlZCBmb3IgcHJvY2Vzc2luZyBbV29ybGRJbXBhY3RdIG9iamVjdCBpbiB2YXJpb3VzIHVzZSBjYXNlcy4KY2xhc3MgSW1wYWN0U3RyYXRlZ3kgewogIGNvbnN0IEltcGFjdFN0cmF0ZWd5KCk7CgogIC8vLyBBcHBsaWVzIFtpbXBhY3RdIHRvIFt2aXNpdG9yXSBmb3IgdGhlIFtpbXBhY3RVc2VDYXNlXSBvZiBbaW1wYWN0U291cmNlXS4KICB2b2lkIHZpc2l0SW1wYWN0KHZhciBpbXBhY3RTb3VyY2UsIFdvcmxkSW1wYWN0IGltcGFjdCwKICAgICAgV29ybGRJbXBhY3RWaXNpdG9yIHZpc2l0b3IsIEltcGFjdFVzZUNhc2UgaW1wYWN0VXNlQ2FzZSkgewogICAgLy8gQXBwbHkgdW5jb25kaXRpb25hbGx5LgogICAgaW1wYWN0LmFwcGx5KHZpc2l0b3IpOwogIH0KCiAgLy8vIE5vdGlmaWVzIHRoZSBzdHJhdGVneSB0aGF0IG5vIG1vcmUgaW1wYWN0cyBvZiBbaW1wYWN0VXNlQ2FzZV0gd2lsbCBiZQogIC8vLyBhcHBsaWVkLgogIHZvaWQgb25JbXBhY3RVc2VkKEltcGFjdFVzZUNhc2UgaW1wYWN0VXNlQ2FzZSkgewogICAgLy8gRG8gbm90aGluZy4KICB9Cn0KCi8vLyBWaXNpdG9yIHVzZWQgdG8gcHJvY2VzcyB0aGUgdXNlcyBvZiBhIFtXb3JsZEltcGFjdF0uCmFic3RyYWN0IGNsYXNzIFdvcmxkSW1wYWN0VmlzaXRvciB7CiAgdm9pZCB2aXNpdFN0YXRpY1VzZShNZW1iZXJFbnRpdHkgbWVtYmVyLCBTdGF0aWNVc2Ugc3RhdGljVXNlKTsKICB2b2lkIHZpc2l0RHluYW1pY1VzZShNZW1iZXJFbnRpdHkgbWVtYmVyLCBEeW5hbWljVXNlIGR5bmFtaWNVc2UpOwogIHZvaWQgdmlzaXRUeXBlVXNlKE1lbWJlckVudGl0eSBtZW1iZXIsIFR5cGVVc2UgdHlwZVVzZSk7CiAgdm9pZCB2aXNpdENvbnN0YW50VXNlKE1lbWJlckVudGl0eSBtZW1iZXIsIENvbnN0YW50VXNlIHR5cGVVc2UpOwp9CgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhlc2Ugd2hlbiB3ZSBnZXQgYW5vbnltb3VzIGxvY2FsIGNsYXNzZXMuCnR5cGVkZWYgdm9pZCBWaXNpdFVzZTxVPihNZW1iZXJFbnRpdHkgbWVtYmVyLCBVIHVzZSk7CgpjbGFzcyBXb3JsZEltcGFjdFZpc2l0b3JJbXBsIGltcGxlbWVudHMgV29ybGRJbXBhY3RWaXNpdG9yIHsKICBmaW5hbCBWaXNpdFVzZTxTdGF0aWNVc2U+IF92aXNpdFN0YXRpY1VzZTsKICBmaW5hbCBWaXNpdFVzZTxEeW5hbWljVXNlPiBfdmlzaXREeW5hbWljVXNlOwogIGZpbmFsIFZpc2l0VXNlPFR5cGVVc2U+IF92aXNpdFR5cGVVc2U7CiAgZmluYWwgVmlzaXRVc2U8Q29uc3RhbnRVc2U+IF92aXNpdENvbnN0YW50VXNlOwoKICBXb3JsZEltcGFjdFZpc2l0b3JJbXBsKAogICAgICB7VmlzaXRVc2U8U3RhdGljVXNlPiB2aXNpdFN0YXRpY1VzZSwKICAgICAgVmlzaXRVc2U8RHluYW1pY1VzZT4gdmlzaXREeW5hbWljVXNlLAogICAgICBWaXNpdFVzZTxUeXBlVXNlPiB2aXNpdFR5cGVVc2UsCiAgICAgIFZpc2l0VXNlPENvbnN0YW50VXNlPiB2aXNpdENvbnN0YW50VXNlfSkKICAgICAgOiBfdmlzaXRTdGF0aWNVc2UgPSB2aXNpdFN0YXRpY1VzZSwKICAgICAgICBfdmlzaXREeW5hbWljVXNlID0gdmlzaXREeW5hbWljVXNlLAogICAgICAgIF92aXNpdFR5cGVVc2UgPSB2aXNpdFR5cGVVc2UsCiAgICAgICAgX3Zpc2l0Q29uc3RhbnRVc2UgPSB2aXNpdENvbnN0YW50VXNlOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RhdGljVXNlKE1lbWJlckVudGl0eSBtZW1iZXIsIFN0YXRpY1VzZSB1c2UpIHsKICAgIGlmIChfdmlzaXRTdGF0aWNVc2UgIT0gbnVsbCkgewogICAgICBfdmlzaXRTdGF0aWNVc2UobWVtYmVyLCB1c2UpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdER5bmFtaWNVc2UoTWVtYmVyRW50aXR5IG1lbWJlciwgRHluYW1pY1VzZSB1c2UpIHsKICAgIGlmIChfdmlzaXREeW5hbWljVXNlICE9IG51bGwpIHsKICAgICAgX3Zpc2l0RHluYW1pY1VzZShtZW1iZXIsIHVzZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZVVzZShNZW1iZXJFbnRpdHkgbWVtYmVyLCBUeXBlVXNlIHVzZSkgewogICAgaWYgKF92aXNpdFR5cGVVc2UgIT0gbnVsbCkgewogICAgICBfdmlzaXRUeXBlVXNlKG1lbWJlciwgdXNlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb25zdGFudFVzZShNZW1iZXJFbnRpdHkgbWVtYmVyLCBDb25zdGFudFVzZSB1c2UpIHsKICAgIGlmIChfdmlzaXRDb25zdGFudFVzZSAhPSBudWxsKSB7CiAgICAgIF92aXNpdENvbnN0YW50VXNlKG1lbWJlciwgdXNlKTsKICAgIH0KICB9Cn0KgZIATk48AScBJCgTAUYcBFFMSARQSEsuFBcBIwFAAT0BSBBQHwE3AUMBHAErUBBMShFOBAEMIwEwKh4aBAFCLwEwISA1CAYBMjAsNAQCASQyKS81AgFRSBAgHhoiARwBI1ABDBYeHRsdATQnIDQyLjYEAQwzIC8iBAEMKUcEAQwqHSkcBAEMIz4EAQwwHy0gBAEMJ0QEAQw2ITEkBAEMK0oEAgFDFD8dKkcBOgEaIzYcKAgGBAEMKhYuBAEMMxY0BAEMMBYyBAEMNhY2BAFMSxYYPS8cGAQBTxQ3AgE+PEohASEdIyUBLAEMMQEMFSIfHSAfBAEMKUoEAQwzIC80BiIEAQwqHSkuBhwEAQwjQQQBDDAfLTIGIAQBDCdHBAEMK00EAQw2ITE2BiQEAQwrUBBMShFOBAEMFio2IxoEAgE/FhUBIgEMLwIBTBcaAU85QR4bBAFMDzMTBAIBOSRBRDtDAgFKNgE9LS8pMQEaKywmLyosJi4BDDwjJAYEAQw+JCUGBAEMOCEiBgQBDEAlJgYEAgEvcGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnQoc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvd29ybGQuZGFydLKRLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy53b3JsZDsKCmltcG9ydCAnY2xvc3VyZS5kYXJ0JzsKaW1wb3J0ICdjb21tb24uZGFydCc7CmltcG9ydCAnY29tbW9uX2VsZW1lbnRzLmRhcnQnCiAgICBzaG93CiAgICAgICAgSkNvbW1vbkVsZW1lbnRzLAogICAgICAgIEpFbGVtZW50RW52aXJvbm1lbnQsCiAgICAgICAgS0NvbW1vbkVsZW1lbnRzLAogICAgICAgIEtFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnZGVmZXJyZWRfbG9hZC5kYXJ0JzsKaW1wb3J0ICdkaWFnbm9zdGljcy9kaWFnbm9zdGljX2xpc3RlbmVyLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRzL25hbWVzLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJ2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICdpci9zdGF0aWNfdHlwZS5kYXJ0JzsKaW1wb3J0ICdqc19iYWNrZW5kL2Fubm90YXRpb25zLmRhcnQnOwppbXBvcnQgJ2pzX2JhY2tlbmQvZmllbGRfYW5hbHlzaXMuZGFydCcgc2hvdyBKRmllbGRBbmFseXNpcywgS0ZpZWxkQW5hbHlzaXM7CmltcG9ydCAnanNfYmFja2VuZC9iYWNrZW5kX3VzYWdlLmRhcnQnIHNob3cgQmFja2VuZFVzYWdlOwppbXBvcnQgJ2pzX2JhY2tlbmQvaW50ZXJjZXB0b3JfZGF0YS5kYXJ0JyBzaG93IEludGVyY2VwdG9yRGF0YTsKaW1wb3J0ICdqc19iYWNrZW5kL25hdGl2ZV9kYXRhLmRhcnQnIHNob3cgTmF0aXZlRGF0YTsKaW1wb3J0ICdqc19iYWNrZW5kL25vX3N1Y2hfbWV0aG9kX3JlZ2lzdHJ5LmRhcnQnIHNob3cgTm9TdWNoTWV0aG9kRGF0YTsKaW1wb3J0ICdqc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfcmVzb2x1dGlvbi5kYXJ0JyBzaG93IFJ1bnRpbWVUeXBlc05lZWQ7CmltcG9ydCAnanNfbW9kZWwvbG9jYWxzLmRhcnQnOwppbXBvcnQgJ2pzX2VtaXR0ZXIvc29ydGVyLmRhcnQnOwppbXBvcnQgJ3VuaXZlcnNlL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JzsKaW1wb3J0ICd1bml2ZXJzZS9tZW1iZXJfdXNhZ2UuZGFydCc7CmltcG9ydCAndW5pdmVyc2Uvc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvcjsKCi8vLyBDb21tb24gc3VwZXJpbnRlcmZhY2UgZm9yIFtPcGVuV29ybGRdIGFuZCBbSkNsb3NlZFdvcmxkXS4KYWJzdHJhY3QgY2xhc3MgV29ybGQge30KCi8vLyBUaGUgW0pDbG9zZWRXb3JsZF0gcmVwcmVzZW50cyB0aGUgaW5mb3JtYXRpb24ga25vd24gYWJvdXQgYSBwcm9ncmFtIHdoZW4KLy8vIGNvbXBpbGluZyB3aXRoIGNsb3NlZC13b3JsZCBzZW1hbnRpY3MuCi8vLwovLy8gR2l2ZW4gdGhlIGVudHJ5cG9pbnQgb2YgYW4gYXBwbGljYXRpb24sIHdlIGNhbiB0cmFjayB3aGF0J3MgcmVhY2hhYmxlIGZyb20KLy8vIGl0LCB3aGF0IGZ1bmN0aW9ucyBhcmUgY2FsbGVkLCB3aGF0IGNsYXNzZXMgYXJlIGFsbG9jYXRlZCwgd2hpY2ggbmF0aXZlCi8vLyBKYXZhU2NyaXB0IHR5cGVzIGFyZSB0b3VjaGVkLCB3aGF0IGxhbmd1YWdlIGZlYXR1cmVzIGFyZSB1c2VkLCBhbmQgc28gb24uCi8vLyBUaGlzIHByZWNpc2Uga25vd2xlZGdlIGFib3V0IHdoYXQncyBsaXZlIGluIHRoZSBwcm9ncmFtIGlzIGxhdGVyIHVzZWQgaW4KLy8vIG9wdGltaXphdGlvbnMgYW5kIG90aGVyIGNvbXBpbGVyIGRlY2lzaW9ucyBkdXJpbmcgY29kZSBnZW5lcmF0aW9uLgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNYXliZSB0aGlzIHNob3VsZCBqdXN0IGJlIGNhbGxlZCB0aGUgSldvcmxkLgphYnN0cmFjdCBjbGFzcyBKQ2xvc2VkV29ybGQgaW1wbGVtZW50cyBXb3JsZCB7CiAgSkZpZWxkQW5hbHlzaXMgZ2V0IGZpZWxkQW5hbHlzaXM7CgogIEJhY2tlbmRVc2FnZSBnZXQgYmFja2VuZFVzYWdlOwoKICBOYXRpdmVEYXRhIGdldCBuYXRpdmVEYXRhOwoKICBJbnRlcmNlcHRvckRhdGEgZ2V0IGludGVyY2VwdG9yRGF0YTsKCiAgSkVsZW1lbnRFbnZpcm9ubWVudCBnZXQgZWxlbWVudEVudmlyb25tZW50OwoKICBEYXJ0VHlwZXMgZ2V0IGRhcnRUeXBlczsKCiAgSkNvbW1vbkVsZW1lbnRzIGdldCBjb21tb25FbGVtZW50czsKCiAgLy8vIFJldHVybnMgdGhlIFtBYnN0cmFjdFZhbHVlRG9tYWluXSB1c2VkIGluIHRoZSBnbG9iYWwgdHlwZSBpbmZlcmVuY2UuCiAgQWJzdHJhY3RWYWx1ZURvbWFpbiBnZXQgYWJzdHJhY3RWYWx1ZURvbWFpbjsKCiAgUnVudGltZVR5cGVzTmVlZCBnZXQgcnRpTmVlZDsKCiAgTm9TdWNoTWV0aG9kRGF0YSBnZXQgbm9TdWNoTWV0aG9kRGF0YTsKCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBsaXZlTmF0aXZlQ2xhc3NlczsKCiAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBnZXQgcHJvY2Vzc2VkTWVtYmVyczsKCiAgQ2xhc3NIaWVyYXJjaHkgZ2V0IGNsYXNzSGllcmFyY2h5OwoKICBBbm5vdGF0aW9uc0RhdGEgZ2V0IGFubm90YXRpb25zRGF0YTsKCiAgR2xvYmFsTG9jYWxzTWFwIGdldCBnbG9iYWxMb2NhbHNNYXA7CiAgQ2xvc3VyZURhdGEgZ2V0IGNsb3N1cmVEYXRhTG9va3VwOwoKICBPdXRwdXRVbml0RGF0YSBnZXQgb3V0cHV0VW5pdERhdGE7CgogIC8vLyBUaGUgW1NvcnRlcl0gdXNlZCBmb3Igc29ydGluZyBlbGVtZW50cyBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUuCiAgU29ydGVyIGdldCBzb3J0ZXI7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbY2xzXSBpcyBpbXBsZW1lbnRlZCBieSBhbiBpbnN0YW50aWF0ZWQgY2xhc3MuCiAgYm9vbCBpc0ltcGxlbWVudGVkKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIHRoZSBtb3N0IHNwZWNpZmljIHN1YmNsYXNzIG9mIFtjbHNdIChpbmNsdWRpbmcgW2Nsc10pIHRoYXQgaXMKICAvLy8gZGlyZWN0bHkgaW5zdGFudGlhdGVkIG9yIGEgc3VwZXJjbGFzcyBvZiBhbGwgZGlyZWN0bHkgaW5zdGFudGlhdGVkCiAgLy8vIHN1YmNsYXNzZXMuIElmIFtjbHNdIGlzIG5vdCBpbnN0YW50aWF0ZWQsIGBudWxsYCBpcyByZXR1cm5lZC4KICBDbGFzc0VudGl0eSBnZXRMdWJPZkluc3RhbnRpYXRlZFN1YmNsYXNzZXMoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgdGhlIG1vc3Qgc3BlY2lmaWMgc3VidHlwZSBvZiBbY2xzXSAoaW5jbHVkaW5nIFtjbHNdKSB0aGF0IGlzCiAgLy8vIGRpcmVjdGx5IGluc3RhbnRpYXRlZCBvciBhIHN1cGVyY2xhc3Mgb2YgYWxsIGRpcmVjdGx5IGluc3RhbnRpYXRlZAogIC8vLyBzdWJ0eXBlcy4gSWYgbm8gc3VidHlwZXMgb2YgW2Nsc10gYXJlIGluc3RhbnRpYXRlZCwgYG51bGxgIGlzIHJldHVybmVkLgogIENsYXNzRW50aXR5IGdldEx1Yk9mSW5zdGFudGlhdGVkU3VidHlwZXMoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYW4gaXRlcmFibGUgb3ZlciB0aGUgY29tbW9uIHN1cGVydHlwZXMgb2YgdGhlIFtjbGFzc2VzXS4KICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gY29tbW9uU3VwZXJ0eXBlc09mKEl0ZXJhYmxlPENsYXNzRW50aXR5PiBjbGFzc2VzKTsKCiAgLy8vIFJldHVybnMgYW4gaXRlcmFibGUgb3ZlciB0aGUgbGl2ZSBtaXhpbiBhcHBsaWNhdGlvbnMgdGhhdCBtaXhpbiBbY2xzXS4KICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gbWl4aW5Vc2VzT2YoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtjbHNdIGlzIG1peGVkIGludG8gYSBsaXZlIGNsYXNzLgogIGJvb2wgaXNVc2VkQXNNaXhpbihDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGxpdmUgY2xhc3MgdGhhdCBtaXhlcyBpbiBbY2xzXSBpbXBsZW1lbnRzIFt0eXBlXS4KICBib29sIGhhc0FueVN1YmNsYXNzT2ZNaXhpblVzZVRoYXRJbXBsZW1lbnRzKAogICAgICBDbGFzc0VudGl0eSBjbHMsIENsYXNzRW50aXR5IHR5cGUpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGxpdmUgY2xhc3MgdGhhdCBtaXhlcyBpbiBbbWl4aW5dIGlzIGFsc28gYSBzdWJjbGFzcwogIC8vLyBvZiBbc3VwZXJjbGFzc10uCiAgYm9vbCBoYXNBbnlTdWJjbGFzc1RoYXRNaXhlcyhDbGFzc0VudGl0eSBzdXBlcmNsYXNzLCBDbGFzc0VudGl0eSBtaXhpbik7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbY2xzXSBvciBhbnkgc3VwZXJjbGFzcyBtaXhlcyBpbiBbbWl4aW5dLgogIGJvb2wgaXNTdWJjbGFzc09mTWl4aW5Vc2VPZihDbGFzc0VudGl0eSBjbHMsIENsYXNzRW50aXR5IG1peGluKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGV2ZXJ5IHN1YnR5cGUgb2YgW3hdIGlzIGEgc3ViY2xhc3Mgb2YgW3ldIG9yIGEgc3ViY2xhc3MKICAvLy8gb2YgYSBtaXhpbiBhcHBsaWNhdGlvbiBvZiBbeV0uCiAgYm9vbCBldmVyeVN1YnR5cGVJc1N1YmNsYXNzT2ZPck1peGluVXNlT2YoQ2xhc3NFbnRpdHkgeCwgQ2xhc3NFbnRpdHkgeSk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgc3ViY2xhc3Mgb2YgW3N1cGVyY2xhc3NdIGltcGxlbWVudHMgW3R5cGVdLgogIGJvb2wgaGFzQW55U3ViY2xhc3NUaGF0SW1wbGVtZW50cyhDbGFzc0VudGl0eSBzdXBlcmNsYXNzLCBDbGFzc0VudGl0eSB0eXBlKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGEgY2FsbCBvZiBbc2VsZWN0b3JdIG9uIFtjbHNdIGFuZC9vciBzdWJjbGFzc2VzL3N1YnR5cGVzCiAgLy8vIG5lZWQgbm9TdWNoTWV0aG9kIGhhbmRsaW5nLgogIC8vLwogIC8vLyBJZiB0aGUgcmVjZWl2ZXIgaXMgZ3VhcmFudGVlZCB0byBoYXZlIGEgbWVtYmVyIHRoYXQgbWF0Y2hlcyB3aGF0IHdlJ3JlCiAgLy8vIGxvb2tpbmcgZm9yLCB0aGVyZSdzIG5vIG5lZWQgdG8gaW50cm9kdWNlIGEgbm9TdWNoTWV0aG9kIGhhbmRsZXIuIEl0IHdpbGwKICAvLy8gbmV2ZXIgYmUgY2FsbGVkLgogIC8vLwogIC8vLyBBcyBhbiBleGFtcGxlLCBjb25zaWRlciB0aGlzIGNsYXNzIGhpZXJhcmNoeToKICAvLy8KICAvLy8gICAgICAgICAgICAgICAgICAgQSAgICA8LS0gbm9TdWNoTWV0aG9kCiAgLy8vICAgICAgICAgICAgICAgICAgLyBcCiAgLy8vICAgICAgICAgICAgICAgICBDICAgQiAgPC0tIGZvbwogIC8vLwogIC8vLyBJZiB3ZSBrbm93IHdlJ3JlIGNhbGxpbmcgZm9vIG9uIGFuIG9iamVjdCBvZiB0eXBlIEIgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeQogIC8vLyBhYm91dCB0aGUgbm9TdWNoTWV0aG9kIG1ldGhvZCBpbiBBIGJlY2F1c2Ugb2JqZWN0cyBvZiB0eXBlIEIgaW1wbGVtZW50CiAgLy8vIGZvby4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHdlIGVuZCB1cCBjYWxsaW5nIGZvbyBvbiBzb21ldGhpbmcgb2YgdHlwZSBDIHdlCiAgLy8vIGhhdmUgdG8gYWRkIGEgaGFuZGxlciBmb3IgaXQuCiAgLy8vCiAgLy8vIElmIHRoZSBob2xkZXJzIG9mIGFsbCB1c2VyLWRlZmluZWQgbm9TdWNoTWV0aG9kIGltcGxlbWVudGF0aW9ucyB0aGF0IG1pZ2h0CiAgLy8vIGJlIGFwcGxpY2FibGUgdG8gdGhlIHJlY2VpdmVyIHR5cGUgaGF2ZSBhIG1hdGNoaW5nIG1lbWJlciBmb3IgdGhlIGN1cnJlbnQKICAvLy8gbmFtZSBhbmQgc2VsZWN0b3IsIHdlIGF2b2lkIGludHJvZHVjaW5nIGEgbm9TdWNoTWV0aG9kIGhhbmRsZXIuCiAgLy8vCiAgLy8vIEFzIGFuIGV4YW1wbGUsIGNvbnNpZGVyIHRoaXMgY2xhc3MgaGllcmFyY2h5OgogIC8vLwogIC8vLyAgICAgICAgICAgICAgICAgICAgICAgIEEgICAgPC0tIGZvbwogIC8vLyAgICAgICAgICAgICAgICAgICAgICAgLyBcCiAgLy8vICAgIG5vU3VjaE1ldGhvZCAtLT4gIEIgICBDICA8LS0gYmFyCiAgLy8vICAgICAgICAgICAgICAgICAgICAgIHwgICB8CiAgLy8vICAgICAgICAgICAgICAgICAgICAgIEMgICBEICA8LS0gbm9TdWNoTWV0aG9kCiAgLy8vCiAgLy8vIFdoZW4gY2FsbGluZyBmb28gb24gYW4gb2JqZWN0IG9mIHR5cGUgQSwgd2Uga25vdyB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbnMKICAvLy8gb2Ygbm9TdWNoTWV0aG9kIGFyZSBpbiB0aGUgY2xhc3NlcyBCIGFuZCBEIHRoYXQgYWxzbyAoaW5kaXJlY3RseSkKICAvLy8gaW1wbGVtZW50IGZvbywgc28gd2UgZG8gbm90IG5lZWQgYSBoYW5kbGVyIGZvciBpdC4KICAvLy8KICAvLy8gSWYgd2UncmUgY2FsbGluZyBiYXIgb24gYW4gb2JqZWN0IG9mIHR5cGUgRCwgd2UgZG9uJ3QgbmVlZCB0aGUgaGFuZGxlcgogIC8vLyBlaXRoZXIgYmVjYXVzZSBhbGwgb2JqZWN0cyBvZiB0eXBlIEQgaW1wbGVtZW50IGJhciB0aHJvdWdoIGluaGVyaXRhbmNlLgogIC8vLwogIC8vLyBJZiB3ZSdyZSBjYWxsaW5nIGJhciBvbiBhbiBvYmplY3Qgb2YgdHlwZSBBIHdlIGRvIG5lZWQgdGhlIGhhbmRsZXIgYmVjYXVzZQogIC8vLyB3ZSBtYXkgaGF2ZSB0byBjYWxsIEIubm9TdWNoTWV0aG9kIHNpbmNlIEIgZG9lcyBub3QgaW1wbGVtZW50IGJhci4KICBib29sIG5lZWRzTm9TdWNoTWV0aG9kKENsYXNzRW50aXR5IGNscywgU2VsZWN0b3Igc2VsZWN0b3IsIENsYXNzUXVlcnkgcXVlcnkpOwoKICAvLy8gUmV0dXJucyB3aGV0aGVyIFtlbGVtZW50XSB3aWxsIGJlIHRoZSBvbmUgdXNlZCBhdCBydW50aW1lIHdoZW4gYmVpbmcKICAvLy8gaW52b2tlZCBvbiBhbiBpbnN0YW5jZSBvZiBbY2xzXS4gW25hbWVdIGlzIHVzZWQgdG8gZW5zdXJlIGxpYnJhcnkKICAvLy8gcHJpdmFjeSBpcyB0YWtlbiBpbnRvIGFjY291bnQuCiAgYm9vbCBoYXNFbGVtZW50SW4oQ2xhc3NFbnRpdHkgY2xzLCBOYW1lIG5hbWUsIE1lbWJlckVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoZSBmaWVsZCBbZWxlbWVudF0gaXMga25vd24gdG8gYmUgZWZmZWN0aXZlbHkgZmluYWwuCiAgYm9vbCBmaWVsZE5ldmVyQ2hhbmdlcyhNZW1iZXJFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbc2VsZWN0b3JdIG9uIFtyZWNlaXZlcl0gY2FuIGhpdCBhIGBjYWxsYCBtZXRob2Qgb24gYQogIC8vLyBzdWJjbGFzcyBvZiBgQ2xvc3VyZWAuCiAgLy8vCiAgLy8vIEV2ZXJ5IGltcGxlbWVudGF0aW9uIG9mIGBDbG9zdXJlYCBoYXMgYSAnY2FsbCcgbWV0aG9kIHdpdGggaXRzIG93bgogIC8vLyBzaWduYXR1cmUgc28gaXQgY2Fubm90IGJlIG1vZGVsbGVkIGJ5IGEgW0Z1bmN0aW9uRW50aXR5XS4gQWxzbywKICAvLy8gY2FsbC1tZXRob2RzIGZvciB0ZWFyLW9mZiBhcmUgbm90IHBhcnQgb2YgdGhlIGVsZW1lbnQgbW9kZWwuCiAgYm9vbCBpbmNsdWRlc0Nsb3N1cmVDYWxsKFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyKTsKCiAgLy8vIFJldHVybnMgdGhlIG1hc2sgZm9yIHRoZSBwb3RlbnRpYWwgcmVjZWl2ZXJzIG9mIGEgZHluYW1pYyBjYWxsIHRvCiAgLy8vIFtzZWxlY3Rvcl0gb24gW3JlY2VpdmVyXS4KICAvLy8KICAvLy8gVGhpcyB3aWxsIG5hcnJvdyB0aGUgY29uc3RyYWludHMgb2YgW3JlY2VpdmVyXSB0byBhbiBbQWJzdHJhY3RWYWx1ZV0gb2YKICAvLy8gdGhlIHNldCBvZiBjbGFzc2VzIHRoYXQgYWN0dWFsbHkgaW1wbGVtZW50IHRoZSBzZWxlY3RlZCBtZW1iZXIgb3IKICAvLy8gaW1wbGVtZW50IHRoZSBoYW5kbGluZyAnbm9TdWNoTWV0aG9kJyB3aGVyZSB0aGUgc2VsZWN0ZWQgbWVtYmVyIGlzCiAgLy8vIHVuaW1wbGVtZW50ZWQuCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlUmVjZWl2ZXJUeXBlKFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyKTsKCiAgLy8vIFJldHVybnMgYWxsIHRoZSBpbnN0YW5jZSBtZW1iZXJzIHRoYXQgbWF5IGJlIGludm9rZWQgd2l0aCB0aGUgW3NlbGVjdG9yXQogIC8vLyBvbiB0aGUgZ2l2ZW4gW3JlY2VpdmVyXS4gVGhlIHJldHVybmVkIGVsZW1lbnRzIG1heSBpbmNsdWRlIG5vU3VjaE1ldGhvZAogIC8vLyBoYW5kbGVycyB0aGF0IGFyZSBwb3RlbnRpYWwgdGFyZ2V0cyBpbmRpcmVjdGx5IHRocm91Z2ggdGhlIG5vU3VjaE1ldGhvZAogIC8vLyBtZWNoYW5pc20uCiAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBsb2NhdGVNZW1iZXJzKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSByZWNlaXZlcik7CgogIC8vLyBSZXR1cm5zIHRoZSBzaW5nbGUgW01lbWJlckVudGl0eV0gdGhhdCBtYXRjaGVzIGEgY2FsbCB0byBbc2VsZWN0b3JdIG9uIHRoZQogIC8vLyBbcmVjZWl2ZXJdLiBJZiBtdWx0aXBsZSB0YXJnZXRzIGV4aXN0LCBgbnVsbGAgaXMgcmV0dXJuZWQuCiAgTWVtYmVyRW50aXR5IGxvY2F0ZVNpbmdsZU1lbWJlcihTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSByZWNlaXZlcik7CgogIC8vLyBSZXR1cm5zIHRoZSBzZXQgb2YgcmVhZCwgd3JpdGUsIGFuZCBpbnZvY2F0aW9uIGFjY2Vzc2VzIGZvdW5kIG9uIFttZW1iZXJdCiAgLy8vIGR1cmluZyB0aGUgY2xvc2VkIHdvcmxkIGNvbXB1dGF0aW9uLgogIE1lbWJlckFjY2VzcyBnZXRNZW1iZXJBY2Nlc3MoTWVtYmVyRW50aXR5IG1lbWJlcik7Cn0KCmFic3RyYWN0IGNsYXNzIE9wZW5Xb3JsZCBpbXBsZW1lbnRzIFdvcmxkIHsKICB2b2lkIHJlZ2lzdGVyVXNlZEVsZW1lbnQoTWVtYmVyRW50aXR5IGVsZW1lbnQpOwoKICBLQ2xvc2VkV29ybGQgY2xvc2VXb3JsZChEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIpOwoKICAvLy8gUmV0dXJucyBhbiBpdGVyYWJsZSBvdmVyIGFsbCBtaXhpbiBhcHBsaWNhdGlvbnMgdGhhdCBtaXhpbiBbY2xzXS4KICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gYWxsTWl4aW5Vc2VzT2YoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFttZW1iZXJdIGlzIGluaGVyaXRlZCBpbnRvIGEgc3VidHlwZSBvZiBbdHlwZV0uCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZToKICAvLy8KICAvLy8gICAgIGNsYXNzIEEgeyBtKCkge30gfQogIC8vLyAgICAgY2xhc3MgQiBleHRlbmRzIEEgaW1wbGVtZW50cyBJIHt9CiAgLy8vICAgICBjbGFzcyBDIGV4dGVuZHMgT2JqZWN0IHdpdGggQSBpbXBsZW1lbnRzIEkge30KICAvLy8gICAgIGFic3RyYWN0IGNsYXNzIEkgeyBtKCk7IH0KICAvLy8gICAgIGFic3RyYWN0IGNsYXNzIEogaW1wbGVtZW50cyBBIHsgfQogIC8vLwogIC8vLyBIZXJlIGBBLm1gIGlzIGluaGVyaXRlZCBpbnRvIGBBYCwgYEJgLCBhbmQgYENgLiBCZWNhdXNlIGBCYCBhbmQKICAvLy8gYENgIGltcGxlbWVudCBgSWAsIGBpc0luaGVyaXRlZEluU3VidHlwZU9mKEEubSwgSSlgIGlzIHRydWUsIGJ1dAogIC8vLyBgaXNJbmhlcml0ZWRJblN1YnR5cGVPZihBLm0sIEopYCBpcyBmYWxzZS4KICBib29sIGlzSW5oZXJpdGVkSW4oCiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIsIENsYXNzRW50aXR5IHR5cGUsIENsYXNzUmVsYXRpb24gcmVsYXRpb24pOwp9CgovLy8gQSBbQnVpbHRXb3JsZF0gaXMgYW4gaW1tdXRhYmxlIHJlc3VsdCBvZiBhIFtXb3JsZEJ1aWxkZXJdLgphYnN0cmFjdCBjbGFzcyBCdWlsdFdvcmxkIHsKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIGxpdmUgZ2VuZXJpYyBtZXRob2QuCiAgdm9pZCBmb3JFYWNoR2VuZXJpY01ldGhvZCh2b2lkIEZ1bmN0aW9uKEZ1bmN0aW9uRW50aXR5KSBmKTsKCiAgLy8vIEFsbCB0eXBlcyB0aGF0IGFyZSBjaGVja2VkIGVpdGhlciB0aHJvdWdoIGlzLCBhcyBvciBjaGVja2VkIG1vZGUgY2hlY2tzLgogIEl0ZXJhYmxlPERhcnRUeXBlPiBnZXQgaXNDaGVja3M7CgogIC8vLyBBbGwgdHlwZSB2YXJpYWJsZXMgbmFtZWQgaW4gcmVjaXBlcy4KICBTZXQ8VHlwZVZhcmlhYmxlVHlwZT4gZ2V0IG5hbWVkVHlwZVZhcmlhYmxlc05ld1J0aTsKCiAgLy8vIEFsbCBkaXJlY3RseSBpbnN0YW50aWF0ZWQgdHlwZXMsIHRoYXQgaXMsIHRoZSB0eXBlcyBvZgogIC8vLyBbZGlyZWN0bHlJbnN0YW50aWF0ZWRDbGFzc2VzXS4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJbXByb3ZlIHNlbWFudGljIHByZWNpc2lvbi4KICBJdGVyYWJsZTxJbnRlcmZhY2VUeXBlPiBnZXQgaW5zdGFudGlhdGVkVHlwZXM7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENsZWFuIHVwIHRoZXNlIGdldHRlcnMuCiAgLy8vIE1ldGhvZHMgaW4gaW5zdGFudGlhdGVkIGNsYXNzZXMgdGhhdCBhcmUgcG90ZW50aWFsbHkgY2xvc3VyaXplZC4KICBJdGVyYWJsZTxGdW5jdGlvbkVudGl0eT4gZ2V0IGNsb3N1cml6ZWRNZW1iZXJzOwoKICAvLy8gU3RhdGljIG9yIHRvcCBsZXZlbCBtZXRob2RzIHRoYXQgYXJlIGNsb3N1cml6ZWQuCiAgSXRlcmFibGU8RnVuY3Rpb25FbnRpdHk+IGdldCBjbG9zdXJpemVkU3RhdGljczsKCiAgLy8vIFR5cGUgdmFyaWFibGVzIHVzZWQgYXMgdHlwZSBsaXRlcmFscy4KICBJdGVyYWJsZTxUeXBlVmFyaWFibGVUeXBlPiBnZXQgdHlwZVZhcmlhYmxlVHlwZUxpdGVyYWxzOwoKICAvLy8gTGl2ZSB1c2VyLWRlZmluZWQgJ25vU3VjaE1ldGhvZCcgaW1wbGVtZW50YXRpb25zLgogIEl0ZXJhYmxlPEZ1bmN0aW9uRW50aXR5PiBnZXQgdXNlck5vU3VjaE1ldGhvZHM7CgogIC8vLyBDYWxscyBbZl0gZm9yIGVhY2ggbGl2ZSBnZW5lcmljIGluc3RhbmNlIG1ldGhvZHMuCiAgdm9pZCBmb3JFYWNoR2VuZXJpY0luc3RhbmNlTWV0aG9kKHZvaWQgRnVuY3Rpb24oRnVuY3Rpb25FbnRpdHkpIGYpOwoKICAvLy8gTGl2ZSBnZW5lcmljIGxvY2FsIGZ1bmN0aW9ucy4KICBJdGVyYWJsZTxMb2NhbD4gZ2V0IGdlbmVyaWNMb2NhbEZ1bmN0aW9uczsKCiAgLy8vIENhbGwgW2ZdIGZvciBlYWNoIGdlbmVyaWMgW2Z1bmN0aW9uXSB3aXRoIHRoZSB0eXBlIGFyZ3VtZW50cyBwYXNzZWQKICAvLy8gdGhyb3VnaCBzdGF0aWMgY2FsbHMgdG8gW2Z1bmN0aW9uXS4KICB2b2lkIGZvckVhY2hTdGF0aWNUeXBlQXJndW1lbnQoCiAgICAgIHZvaWQgZihFbnRpdHkgZnVuY3Rpb24sIFNldDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykpOwoKICAvLy8gQ2FsbCBbZl0gZm9yIGVhY2ggZ2VuZXJpYyBbc2VsZWN0b3JdIHdpdGggdGhlIHR5cGUgYXJndW1lbnRzIHBhc3NlZAogIC8vLyB0aHJvdWdoIGR5bmFtaWMgY2FsbHMgdG8gW3NlbGVjdG9yXS4KICB2b2lkIGZvckVhY2hEeW5hbWljVHlwZUFyZ3VtZW50KAogICAgICB2b2lkIGYoU2VsZWN0b3Igc2VsZWN0b3IsIFNldDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykpOwp9CgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW5hbWUgdGhpcyB0byBgUmVzb2x1dGlvbldvcmxkYCBvciBgS1dvcmxkYD8KLy8gVGhlIGltbXV0YWJsZSByZXN1bHQgb2YgdGhlIFtSZXNvbHV0aW9uV29ybGRCdWlsZGVyXS4KYWJzdHJhY3QgY2xhc3MgS0Nsb3NlZFdvcmxkIGltcGxlbWVudHMgQnVpbHRXb3JsZCB7CiAgRGFydFR5cGVzIGdldCBkYXJ0VHlwZXM7CiAgS0ZpZWxkQW5hbHlzaXMgZ2V0IGZpZWxkQW5hbHlzaXM7CiAgQmFja2VuZFVzYWdlIGdldCBiYWNrZW5kVXNhZ2U7CiAgTmF0aXZlRGF0YSBnZXQgbmF0aXZlRGF0YTsKICBJbnRlcmNlcHRvckRhdGEgZ2V0IGludGVyY2VwdG9yRGF0YTsKICBLRWxlbWVudEVudmlyb25tZW50IGdldCBlbGVtZW50RW52aXJvbm1lbnQ7CiAgS0NvbW1vbkVsZW1lbnRzIGdldCBjb21tb25FbGVtZW50czsKICBDbGFzc0hpZXJhcmNoeSBnZXQgY2xhc3NIaWVyYXJjaHk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbY2xzXSBpcyBpbXBsZW1lbnRlZCBieSBhbiBpbnN0YW50aWF0ZWQgY2xhc3MuCiAgYm9vbCBpc0ltcGxlbWVudGVkKENsYXNzRW50aXR5IGNscyk7CgogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZ2V0IGxpdmVJbnN0YW5jZU1lbWJlcnM7CiAgTWFwPENsYXNzRW50aXR5LCBTZXQ8Q2xhc3NFbnRpdHk+PiBnZXQgbWl4aW5Vc2VzOwogIE1hcDxDbGFzc0VudGl0eSwgU2V0PENsYXNzRW50aXR5Pj4gZ2V0IHR5cGVzSW1wbGVtZW50ZWRCeVN1YmNsYXNzZXM7CgogIC8vLyBNZW1iZXJzIHRoYXQgYXJlIHdyaXR0ZW4gZWl0aGVyIGRpcmVjdGx5IG9yIHRocm91Z2ggYSBzZXR0ZXIgc2VsZWN0b3IuCiAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBnZXQgYXNzaWduZWRJbnN0YW5jZU1lbWJlcnM7CgogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgbGl2ZU5hdGl2ZUNsYXNzZXM7CiAgTWFwPE1lbWJlckVudGl0eSwgTWVtYmVyVXNhZ2U+IGdldCBsaXZlTWVtYmVyVXNhZ2U7CiAgUnVudGltZVR5cGVzTmVlZCBnZXQgcnRpTmVlZDsKICBOb1N1Y2hNZXRob2REYXRhIGdldCBub1N1Y2hNZXRob2REYXRhOwoKICBBbm5vdGF0aW9uc0RhdGEgZ2V0IGFubm90YXRpb25zRGF0YTsKCiAgLy8vIFNldCBvZiBsaXZlIGNsb3N1cml6ZWQgbWVtYmVycyB3aG9zZSBzaWduYXR1cmVzIHJlZmVyZW5jZSB0eXBlIHZhcmlhYmxlcy4KICAvLy8KICAvLy8gQSBjbG9zdXJpemVkIG1ldGhvZCBpcyBjb25zaWRlcmVkIGxpdmUgaWYgdGhlIGVuY2xvc2luZyBjbGFzcyBoYXMgYmVlbgogIC8vLyBpbnN0YW50aWF0ZWQuCiAgSXRlcmFibGU8RnVuY3Rpb25FbnRpdHk+IGdldCBjbG9zdXJpemVkTWVtYmVyc1dpdGhGcmVlVHlwZVZhcmlhYmxlczsKCiAgLy8vIFNldCBvZiAobGl2ZSkgbG9jYWwgZnVuY3Rpb25zIChjbG9zdXJlcykuCiAgLy8vCiAgLy8vIEEgbGl2ZSBmdW5jdGlvbiBpcyBvbmUgd2hvc2UgZW5jbG9zaW5nIG1lbWJlciBmdW5jdGlvbiBoYXMgYmVlbiBlbnF1ZXVlZC4KICBJdGVyYWJsZTxMb2NhbD4gZ2V0IGxvY2FsRnVuY3Rpb25zOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW21lbWJlcl0gaGFzIGJlZW4gbWFya2VkIGFzIHVzZWQgKGNhbGxlZCwgcmVhZCwgZXRjLikgaW4KICAvLy8gdGhpcyB3b3JsZCBidWlsZGVyLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1heWJlIHRoaXMgc2hvdWxkIGJlIHBhcnQgb2YgW0Nsb3NlZFdvcmxkXSAoaW5zdGVhZCkuCiAgYm9vbCBpc01lbWJlclVzZWQoTWVtYmVyRW50aXR5IG1lbWJlcik7Cn0KgUQATk48ARcBFxYeCRkdGR0dLyEeHi4eJk06QDZISR8hKCUvAT4YAU0rBE9MTk1HRS8kASEBHQEnAS4BGwEmAUsvASABKQEvAS8BJQEnASclASUBRBUBRycBTElEPwFLSU49AUdLAU02ATonAU4vKgFQF0sBQkMBUCVLAUhPAVEiBk1QFwY0Bi4bJQZRTVEkBlFQRgY0BiogKiEzBlBIOQZNTgZRSVABS0glRwFOMAFOHQZJRkNHAUggBk5ISRVQAU9OThEoMgFRQU4BUCs1AgEsMgE4AUg5AUgGFAYdLDgkLAZGRzEWRgIBPxwuPgFPIwErNgE9JTYxATJHMgE3MgEsOwE4MgE4RgEkLQFKKiI9AUorIz8CAUY5NBskIR0nLiYlAUcnATI0RwFNNgEvNiApAScBUAZNFEcBMAZQJgFRGlAqAgEfcGFja2FnZTpjb21waWxlci9zcmMvd29ybGQuZGFydEhzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9kaWFnbm9zdGljcy9nZW5lcmF0ZWQvc2hhcmVkX21lc3NhZ2VzLmRhcnSgrS8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi8qCkRPTidUIEVESVQuIEdFTkVSQVRFRC4gRE9OJ1QgRURJVC4KVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSAncHVibGlzaC5kYXJ0JyBpbiB0aGUgZGFydF9tZXNzYWdlcyBwYWNrYWdlLgoKTWVzc2FnZXMgYXJlIG1haW50YWluZWQgaW4gYGxpYi9zaGFyZWRfbWVzc2FnZXMuZGFydGAgb2YgdGhhdCBzYW1lIHBhY2thZ2UuCkFmdGVyIGFueSBjaGFuZ2UgdG8gdGhhdCBmaWxlLCBydW4gYGJpbi9wdWJsaXNoLmRhcnRgIHRvIGdlbmVyYXRlIGEgbmV3IHZlcnNpb24Kb2YgdGhlIGpzb24sIGRhcnQyanMgYW5kIGFuYWx5emVyIHJlcHJlc2VudGF0aW9ucy4KKi8KaW1wb3J0ICcuLi9tZXNzYWdlcy5kYXJ0JyBzaG93IE1lc3NhZ2VLaW5kLCBNZXNzYWdlVGVtcGxhdGU7Cgpjb25zdCBNYXA8TWVzc2FnZUtpbmQsIE1lc3NhZ2VUZW1wbGF0ZT4gVEVNUExBVEVTID0KICAgIGNvbnN0IDxNZXNzYWdlS2luZCwgTWVzc2FnZVRlbXBsYXRlPnsKICBNZXNzYWdlS2luZC5DT05TVF9DT05TVFJVQ1RPUl9XSVRIX0JPRFk6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgTWVzc2FnZUtpbmQuQ09OU1RfQ09OU1RSVUNUT1JfV0lUSF9CT0RZLAogICAgICAiQ29uc3QgY29uc3RydWN0b3IgY2FuJ3QgaGF2ZSBhIGJvZHkuIiwKICAgICAgaG93VG9GaXg6ICJUcnkgcmVtb3ZpbmcgdGhlICdjb25zdCcga2V5d29yZCBvciB0aGUgYm9keS4iLAogICAgICBleGFtcGxlczogY29uc3QgWwogICAgICAgIHIiIiIKICAgICAgICAgY2xhc3MgQyB7CiAgICAgICAgICAgY29uc3QgQygpIHt9CiAgICAgICAgIH0KCiAgICAgICAgIG1haW4oKSA9PiBuZXcgQygpOyIiIiwKICAgICAgXSksIC8vIEdlbmVyYXRlZC4gRG9uJ3QgZWRpdC4KICBNZXNzYWdlS2luZC5DT05TVF9GQUNUT1JZOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoTWVzc2FnZUtpbmQuQ09OU1RfRkFDVE9SWSwKICAgICAgIk9ubHkgcmVkaXJlY3RpbmcgZmFjdG9yeSBjb25zdHJ1Y3RvcnMgY2FuIGJlIGRlY2xhcmVkIHRvIGJlICdjb25zdCcuIiwKICAgICAgaG93VG9GaXg6CiAgICAgICAgICAiVHJ5IHJlbW92aW5nIHRoZSAnY29uc3QnIGtleXdvcmQgb3IgcmVwbGFjaW5nIHRoZSBib2R5IHdpdGggJz0nIGZvbGxvd2VkIGJ5IGEgdmFsaWQgdGFyZ2V0LiIsCiAgICAgIGV4YW1wbGVzOiBjb25zdCBbCiAgICAgICAgciIiIgogICAgICAgICBjbGFzcyBDIHsKICAgICAgICAgICBjb25zdCBmYWN0b3J5IEMoKSB7fQogICAgICAgICB9CgogICAgICAgICBtYWluKCkgPT4gbmV3IEMoKTsiIiIsCiAgICAgIF0pLCAvLyBHZW5lcmF0ZWQuIERvbid0IGVkaXQuCiAgTWVzc2FnZUtpbmQuRVhUUkFORU9VU19NT0RJRklFUjogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICBNZXNzYWdlS2luZC5FWFRSQU5FT1VTX01PRElGSUVSLAogICAgICAiQ2FuJ3QgaGF2ZSBtb2RpZmllciAnI3ttb2RpZmllcn0nIGhlcmUuIiwKICAgICAgaG93VG9GaXg6ICJUcnkgcmVtb3ZpbmcgJyN7bW9kaWZpZXJ9Jy4iLAogICAgICBleGFtcGxlczogY29uc3QgWwogICAgICAgICJ2YXIgU3RyaW5nIGZvbzsgbWFpbigpe30iLAogICAgICAgICJ2YXIgZmluYWwgZm9vOyBtYWluKCl7fSIsCiAgICAgICAgInZhciB2YXIgZm9vOyBtYWluKCl7fSIsCiAgICAgICAgInZhciBjb25zdCBmb287IG1haW4oKXt9IiwKICAgICAgICAidmFyIGFic3RyYWN0IGZvbzsgbWFpbigpe30iLAogICAgICAgICJ2YXIgc3RhdGljIGZvbzsgbWFpbigpe30iLAogICAgICAgICJ2YXIgZXh0ZXJuYWwgZm9vOyBtYWluKCl7fSIsCiAgICAgICAgImZpbmFsIHZhciBmb287IG1haW4oKXt9IiwKICAgICAgICAidmFyIHZhciBmb287IG1haW4oKXt9IiwKICAgICAgICAiY29uc3QgdmFyIGZvbzsgbWFpbigpe30iLAogICAgICAgICJhYnN0cmFjdCB2YXIgZm9vOyBtYWluKCl7fSIsCiAgICAgICAgInN0YXRpYyB2YXIgZm9vOyBtYWluKCl7fSIsCiAgICAgICAgImV4dGVybmFsIHZhciBmb287IG1haW4oKXt9IiwKICAgICAgXSksIC8vIEdlbmVyYXRlZC4gRG9uJ3QgZWRpdC4KICBNZXNzYWdlS2luZC5FWFRSQU5FT1VTX01PRElGSUVSX1JFUExBQ0U6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgTWVzc2FnZUtpbmQuRVhUUkFORU9VU19NT0RJRklFUl9SRVBMQUNFLAogICAgICAiQ2FuJ3QgaGF2ZSBtb2RpZmllciAnI3ttb2RpZmllcn0nIGhlcmUuIiwKICAgICAgaG93VG9GaXg6CiAgICAgICAgICAiVHJ5IHJlcGxhY2luZyBtb2RpZmllciAnI3ttb2RpZmllcn0nIHdpdGggJ3ZhcicsICdmaW5hbCcsIG9yIGEgdHlwZS4iLAogICAgICBleGFtcGxlczogY29uc3QgWwogICAgICAgICJzZXQgZm9vOyBtYWluKCl7fSIsCiAgICAgICAgImFic3RyYWN0IGZvbzsgbWFpbigpe30iLAogICAgICAgICJzdGF0aWMgZm9vOyBtYWluKCl7fSIsCiAgICAgICAgImV4dGVybmFsIGZvbzsgbWFpbigpe30iLAogICAgICBdKSwgLy8gR2VuZXJhdGVkLiBEb24ndCBlZGl0LgogIE1lc3NhZ2VLaW5kLkNPTlNUUlVDVE9SX1dJVEhfUkVUVVJOX1RZUEU6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgTWVzc2FnZUtpbmQuQ09OU1RSVUNUT1JfV0lUSF9SRVRVUk5fVFlQRSwKICAgICAgIkNvbnN0cnVjdG9ycyBjYW4ndCBoYXZlIGEgcmV0dXJuIHR5cGUuIiwKICAgICAgaG93VG9GaXg6ICJUcnkgcmVtb3ZpbmcgdGhlIHJldHVybiB0eXBlLiIsCiAgICAgIGV4YW1wbGVzOiBjb25zdCBbCiAgICAgICAgImNsYXNzIEEgeyBpbnQgQSgpIHt9IH0gbWFpbigpIHsgbmV3IEEoKTsgfSIsCiAgICAgIF0pLCAvLyBHZW5lcmF0ZWQuIERvbid0IGVkaXQuCiAgTWVzc2FnZUtpbmQuTUlTU0lOR19FWFBSRVNTSU9OX0lOX1RIUk9XOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgIE1lc3NhZ2VLaW5kLk1JU1NJTkdfRVhQUkVTU0lPTl9JTl9USFJPVywKICAgICAgIk1pc3NpbmcgZXhwcmVzc2lvbiBhZnRlciAndGhyb3cnLiIsCiAgICAgIGhvd1RvRml4OiAiRGlkIHlvdSBtZWFuICdyZXRocm93Jz8iKSwgLy8gR2VuZXJhdGVkLiBEb24ndCBlZGl0LgogIE1lc3NhZ2VLaW5kLlJFVEhST1dfT1VUU0lERV9DQVRDSDogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICBNZXNzYWdlS2luZC5SRVRIUk9XX09VVFNJREVfQ0FUQ0gsCiAgICAgICJSZXRocm93IG11c3QgYmUgaW5zaWRlIG9mIGNhdGNoIGNsYXVzZS4iLAogICAgICBob3dUb0ZpeDoKICAgICAgICAgICJUcnkgbW92aW5nIHRoZSBleHByZXNzaW9uIGludG8gYSBjYXRjaCBjbGF1c2UsIG9yIHVzaW5nIGEgJ3Rocm93JyBleHByZXNzaW9uLiIsCiAgICAgIGV4YW1wbGVzOiBjb25zdCBbCiAgICAgICAgIm1haW4oKSB7IHJldGhyb3c7IH0iLAogICAgICBdKSwgLy8gR2VuZXJhdGVkLiBEb24ndCBlZGl0LgogIE1lc3NhZ2VLaW5kLlJFVFVSTl9JTl9HRU5FUkFUSVZFX0NPTlNUUlVDVE9SOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgIE1lc3NhZ2VLaW5kLlJFVFVSTl9JTl9HRU5FUkFUSVZFX0NPTlNUUlVDVE9SLAogICAgICAiQ29uc3RydWN0b3JzIGNhbid0IHJldHVybiB2YWx1ZXMuIiwKICAgICAgaG93VG9GaXg6CiAgICAgICAgICAiVHJ5IHJlbW92aW5nIHRoZSByZXR1cm4gc3RhdGVtZW50IG9yIHVzaW5nIGEgZmFjdG9yeSBjb25zdHJ1Y3Rvci4iLAogICAgICBleGFtcGxlczogY29uc3QgWwogICAgICAgIHIiIiIKICAgICAgICBjbGFzcyBDIHsKICAgICAgICAgIEMoKSB7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbWFpbigpID0+IG5ldyBDKCk7IiIiLAogICAgICBdKSwgLy8gR2VuZXJhdGVkLiBEb24ndCBlZGl0LgogIE1lc3NhZ2VLaW5kLlJFVFVSTl9JTl9HRU5FUkFUT1I6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgTWVzc2FnZUtpbmQuUkVUVVJOX0lOX0dFTkVSQVRPUiwKICAgICAgIkNhbid0IHJldHVybiBhIHZhbHVlIGZyb20gYSBnZW5lcmF0b3IgZnVuY3Rpb24gKHVzaW5nIHRoZSAnI3ttb2RpZmllcn0nIG1vZGlmaWVyKS4iLAogICAgICBob3dUb0ZpeDoKICAgICAgICAgICJUcnkgcmVtb3ZpbmcgdGhlIHZhbHVlLCByZXBsYWNpbmcgJ3JldHVybicgd2l0aCAneWllbGQnIG9yIGNoYW5naW5nIHRoZSBtZXRob2QgYm9keSBtb2RpZmllci4iLAogICAgICBleGFtcGxlczogY29uc3QgWwogICAgICAgIHIiIiIKICAgICAgICBmb28oKSBhc3luYyogeyByZXR1cm4gMDsgfQogICAgICAgIG1haW4oKSA9PiBmb28oKTsKICAgICAgICAiIiIsCiAgICAgICAgciIiIgogICAgICAgIGZvbygpIHN5bmMqIHsgcmV0dXJuIDA7IH0KICAgICAgICBtYWluKCkgPT4gZm9vKCk7CiAgICAgICAgIiIiLAogICAgICBdKSwgLy8gR2VuZXJhdGVkLiBEb24ndCBlZGl0LgogIE1lc3NhZ2VLaW5kLk5PVF9BU1NJR05BQkxFOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoTWVzc2FnZUtpbmQuTk9UX0FTU0lHTkFCTEUsCiAgICAgICInI3tmcm9tVHlwZX0nIGlzIG5vdCBhc3NpZ25hYmxlIHRvICcje3RvVHlwZX0nLiIpLCAvLyBHZW5lcmF0ZWQuIERvbid0IGVkaXQuCiAgTWVzc2FnZUtpbmQuRk9SSU5fTk9UX0FTU0lHTkFCTEU6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgTWVzc2FnZUtpbmQuRk9SSU5fTk9UX0FTU0lHTkFCTEUsCiAgICAgICJUaGUgZWxlbWVudCB0eXBlICcje2N1cnJlbnRUeXBlfScgb2YgJyN7ZXhwcmVzc2lvblR5cGV9JyBpcyBub3QgYXNzaWduYWJsZSB0byAnI3tlbGVtZW50VHlwZX0nLiIsCiAgICAgIGV4YW1wbGVzOiBjb25zdCBbCiAgICAgICAgciIiIgogICAgICAgIG1haW4oKSB7CiAgICAgICAgICBMaXN0PGludD4gbGlzdCA9IDxpbnQ+WzEsIDJdOwogICAgICAgICAgZm9yIChTdHJpbmcgeCBpbiBsaXN0KSB4OwogICAgICAgIH0KICAgICAgICAiIiIsCiAgICAgIF0pLCAvLyBHZW5lcmF0ZWQuIERvbid0IGVkaXQuCiAgTWVzc2FnZUtpbmQuQ0FOTk9UX1JFU09MVkU6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZShNZXNzYWdlS2luZC5DQU5OT1RfUkVTT0xWRSwKICAgICAgIkNhbid0IHJlc29sdmUgJyN7bmFtZX0nLiIpLCAvLyBHZW5lcmF0ZWQuIERvbid0IGVkaXQuCiAgTWVzc2FnZUtpbmQuVU5ERUZJTkVEX01FVEhPRDogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICBNZXNzYWdlS2luZC5VTkRFRklORURfTUVUSE9ELAogICAgICAiVGhlIG1ldGhvZCAnI3ttZW1iZXJOYW1lfScgaXMgbm90IGRlZmluZWQgZm9yIHRoZSBjbGFzcyAnI3tjbGFzc05hbWV9Jy4iLAogICAgICBleGFtcGxlczogY29uc3QgWwogICAgICAgIHIiIiIKICAgICAgICBjbGFzcyBBIHsKICAgICAgICAgIGZvbygpIHsgYmFyKCk7IH0KICAgICAgICB9CiAgICAgICAgbWFpbigpIHsgbmV3IEEoKS5mb28oKTsgfQogICAgICAgICIiIiwKICAgICAgXSksIC8vIEdlbmVyYXRlZC4gRG9uJ3QgZWRpdC4KICBNZXNzYWdlS2luZC5VTkRFRklORURfR0VUVEVSOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgIE1lc3NhZ2VLaW5kLlVOREVGSU5FRF9HRVRURVIsCiAgICAgICJUaGUgZ2V0dGVyICcje21lbWJlck5hbWV9JyBpcyBub3QgZGVmaW5lZCBmb3IgdGhlIGNsYXNzICcje2NsYXNzTmFtZX0nLiIsCiAgICAgIGV4YW1wbGVzOiBjb25zdCBbCiAgICAgICAgImNsYXNzIEEge30gbWFpbigpIHsgbmV3IEEoKS54OyB9IiwKICAgICAgICAiY2xhc3MgQSB7fSBtYWluKCkgeyBBLng7IH0iLAogICAgICBdKSwgLy8gR2VuZXJhdGVkLiBEb24ndCBlZGl0LgogIE1lc3NhZ2VLaW5kLlVOREVGSU5FRF9JTlNUQU5DRV9HRVRURVJfQlVUX1NFVFRFUjogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICBNZXNzYWdlS2luZC5VTkRFRklORURfSU5TVEFOQ0VfR0VUVEVSX0JVVF9TRVRURVIsCiAgICAgICJUaGUgc2V0dGVyICcje21lbWJlck5hbWV9JyBpbiBjbGFzcyAnI3tjbGFzc05hbWV9JyBjYW4gbm90IGJlIHVzZWQgYXMgYSBnZXR0ZXIuIiwKICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICAiY2xhc3MgQSB7IHNldCB4KHkpIHt9IH0gbWFpbigpIHsgbmV3IEEoKS54OyB9IiwKICAgICAgXSksIC8vIEdlbmVyYXRlZC4gRG9uJ3QgZWRpdC4KICBNZXNzYWdlS2luZC5VTkRFRklORURfT1BFUkFUT1I6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgTWVzc2FnZUtpbmQuVU5ERUZJTkVEX09QRVJBVE9SLAogICAgICAiVGhlIG9wZXJhdG9yICcje21lbWJlck5hbWV9JyBpcyBub3QgZGVmaW5lZCBmb3IgdGhlIGNsYXNzICcje2NsYXNzTmFtZX0nLiIsCiAgICAgIGV4YW1wbGVzOiBjb25zdCBbCiAgICAgICAgImNsYXNzIEEge30gbWFpbigpIHsgbmV3IEEoKSArIDM7IH0iLAogICAgICBdKSwgLy8gR2VuZXJhdGVkLiBEb24ndCBlZGl0LgogIE1lc3NhZ2VLaW5kLlVOREVGSU5FRF9TRVRURVI6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgTWVzc2FnZUtpbmQuVU5ERUZJTkVEX1NFVFRFUiwKICAgICAgIlRoZSBzZXR0ZXIgJyN7bWVtYmVyTmFtZX0nIGlzIG5vdCBkZWZpbmVkIGZvciB0aGUgY2xhc3MgJyN7Y2xhc3NOYW1lfScuIiwKICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICAiY2xhc3MgQSB7fSBtYWluKCkgeyBuZXcgQSgpLnggPSA0OTk7IH0iLAogICAgICBdKSwgLy8gR2VuZXJhdGVkLiBEb24ndCBlZGl0LgogIE1lc3NhZ2VLaW5kLk5PX1NVQ0hfU1VQRVJfTUVNQkVSOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgIE1lc3NhZ2VLaW5kLk5PX1NVQ0hfU1VQRVJfTUVNQkVSLAogICAgICAiQ2FuJ3QgcmVzb2x2ZSAnI3ttZW1iZXJOYW1lfScgaW4gYSBzdXBlcmNsYXNzIG9mICcje2NsYXNzTmFtZX0nLiIpLCAvLyBHZW5lcmF0ZWQuIERvbid0IGVkaXQuCiAgTWVzc2FnZUtpbmQuVU5ERUZJTkVEX1NVUEVSX1NFVFRFUjogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICBNZXNzYWdlS2luZC5VTkRFRklORURfU1VQRVJfU0VUVEVSLAogICAgICAiVGhlIHNldHRlciAnI3ttZW1iZXJOYW1lfScgaXMgbm90IGRlZmluZWQgaW4gYSBzdXBlcmNsYXNzIG9mICcje2NsYXNzTmFtZX0nLiIsCiAgICAgIGV4YW1wbGVzOiBjb25zdCBbCiAgICAgICAgciIiIgogICAgICAgIGNsYXNzIEEge30KICAgICAgICBjbGFzcyBCIGV4dGVuZHMgQSB7CiAgICAgICAgICBmb28oKSB7IHN1cGVyLnggPSA0OTk7IH0KICAgICAgICB9CiAgICAgICAgbWFpbigpIHsgbmV3IEIoKS5mb28oKTsgfQogICAgICAgICIiIiwKICAgICAgXSksIC8vIEdlbmVyYXRlZC4gRG9uJ3QgZWRpdC4KICBNZXNzYWdlS2luZC5VTkRFRklORURfU1RBVElDX0dFVFRFUl9CVVRfU0VUVEVSOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgIE1lc3NhZ2VLaW5kLlVOREVGSU5FRF9TVEFUSUNfR0VUVEVSX0JVVF9TRVRURVIsCiAgICAgICJDYW5ub3QgcmVzb2x2ZSBnZXR0ZXIgJyN7bmFtZX0nLiIsCiAgICAgIGV4YW1wbGVzOiBjb25zdCBbCiAgICAgICAgInNldCBmb28oeCkge30gIG1haW4oKSB7IGZvbzsgfSIsCiAgICAgIF0pLCAvLyBHZW5lcmF0ZWQuIERvbid0IGVkaXQuCiAgTWVzc2FnZUtpbmQuVU5ERUZJTkVEX1NUQVRJQ19TRVRURVJfQlVUX0dFVFRFUjogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICBNZXNzYWdlS2luZC5VTkRFRklORURfU1RBVElDX1NFVFRFUl9CVVRfR0VUVEVSLAogICAgICAiQ2Fubm90IHJlc29sdmUgc2V0dGVyICcje25hbWV9Jy4iLAogICAgICBleGFtcGxlczogY29uc3QgWwogICAgICAgIHIiIiIKICAgICAgICBtYWluKCkgewogICAgICAgICAgZmluYWwgeCA9IDE7CiAgICAgICAgICB4ID0gMjsKICAgICAgICB9IiIiLAogICAgICAgIHIiIiIKICAgICAgICBtYWluKCkgewogICAgICAgICAgY29uc3QgeCA9IDE7CiAgICAgICAgICB4ID0gMjsKICAgICAgICB9CiAgICAgICAgIiIiLAogICAgICAgIHIiIiIKICAgICAgICBmaW5hbCB4ID0gMTsKICAgICAgICBtYWluKCkgeyB4ID0gMzsgfQogICAgICAgICIiIiwKICAgICAgICByIiIiCiAgICAgICAgY29uc3QgeCA9IDE7CiAgICAgICAgbWFpbigpIHsgeCA9IDM7IH0KICAgICAgICAiIiIsCiAgICAgICAgImdldCBmb28gPT4gbnVsbCAgbWFpbigpIHsgZm9vID0gNTsgfSIsCiAgICAgICAgImNvbnN0IGZvbyA9IDAgIG1haW4oKSB7IGZvbyA9IDU7IH0iLAogICAgICBdKSwgLy8gR2VuZXJhdGVkLiBEb24ndCBlZGl0Lgp9OwqA2wBOTjwDI00BTFAzAz0BNCpCLy5BGA0TGAsBICROThBpGA0TIAsBICQ6JzEvGCQjISMmJCYjISMmJCYkQi8xEFIYHSIgIiRDMDAxGDYkQi8rRjwpMRBbGB8kRzQrEE8YDRIQFgwKAR8kOidcEGsYDSMZDQ0iGQ0kUFQ7KGkYDREoJAoNJFA9NyRRGA0SGwoiDSQ3JFEYLCYkSzhZGDkkOSZTGC4kNyRRGDIkOyhlPSpWGA0THCMKIg0kSTYqGCokSTYqGA0RFxEODREXEQoNDRUaDQ0VGg0wLiQDAT9wYWNrYWdlOmNvbXBpbGVyL3NyYy9kaWFnbm9zdGljcy9nZW5lcmF0ZWQvc2hhcmVkX21lc3NhZ2VzLmRhcnQ4c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvY29uc3RhbnRzL2V4cHJlc3Npb25zLmRhcnTAASeyLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5jb25zdGFudHMuZXhwcmVzc2lvbnM7CgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbic7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL2NvbnN0YW50X3N5c3RlbS5kYXJ0JyBhcyBjb25zdGFudF9zeXN0ZW07CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvb3BlcmF0b3JzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NhbGxfc3RydWN0dXJlLmRhcnQnIHNob3cgQ2FsbFN0cnVjdHVyZTsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCc7CmltcG9ydCAnY29uc3RydWN0b3JzLmRhcnQnOwppbXBvcnQgJ2V2YWx1YXRpb24uZGFydCc7CmltcG9ydCAndmFsdWVzLmRhcnQnOwoKZW51bSBDb25zdGFudEV4cHJlc3Npb25LaW5kIHsKICBBUywKICBCSU5BUlksCiAgQk9PTCwKICBCT09MX0ZST01fRU5WSVJPTk1FTlQsCiAgQ09OQ0FURU5BVEUsCiAgQ09ORElUSU9OQUwsCiAgQ09OU1RSVUNURUQsCiAgRE9VQkxFLAogIEVSUk9ORU9VUywKICBGVU5DVElPTiwKICBGSUVMRCwKICBJREVOVElDQUwsCiAgSU5ULAogIElOVF9GUk9NX0VOVklST05NRU5ULAogIExJU1QsCiAgU0VULAogIE1BUCwKICBOVUxMLAogIFNUUklORywKICBTVFJJTkdfRlJPTV9FTlZJUk9OTUVOVCwKICBTVFJJTkdfTEVOR1RILAogIFNZTUJPTCwKICBUWVBFLAogIFVOQVJZLAogIExPQ0FMX1ZBUklBQkxFLAogIFBPU0lUSU9OQUxfUkVGRVJFTkNFLAogIE5BTUVEX1JFRkVSRU5DRSwKICBBU1NFUlQsCiAgSU5TVEFOVElBVElPTiwKfQoKLy8vIEFuIGV4cHJlc3Npb24gdGhhdCBpcyBhIGNvbXBpbGUtdGltZSBjb25zdGFudC4KLy8vCi8vLyBXaGVyZWFzIFtDb25zdGFudFZhbHVlXSByZXByZXNlbnQgYSBjb21waWxlLXRpbWUgdmFsdWUsIGEKLy8vIFtDb25zdGFudEV4cHJlc3Npb25dIHJlcHJlc2VudHMgYW4gZXhwcmVzc2lvbiBmb3IgY3JlYXRpbmcgYSBjb25zdGFudC4KLy8vCi8vLyBUaGVyZSBpcyBubyBvbmUtdG8tb25lIG1hcHBpbmcgYmV0d2VlbiBbQ29uc3RhbnRFeHByZXNzaW9uXSBhbmQKLy8vIFtDb25zdGFudFZhbHVlXSwgYmVjYXVzZSBkaWZmZXJlbnQgZXhwcmVzc2lvbnMgY2FuIGRlbm90ZSB0aGUgc2FtZSBjb25zdGFudC4KLy8vIEZvciBpbnN0YW5jZSwgbXVsdGlwbGUgYGNvbnN0YCBjb25zdHJ1Y3RvcnMgbWF5IGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBzYW1lCi8vLyBvYmplY3QsIGFuZCBkaWZmZXJlbnQgYGNvbnN0YCB2YXJpYWJsZXMgbWF5IGhvbGQgdGhlIHNhbWUgdmFsdWUuCmFic3RyYWN0IGNsYXNzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgaW50IF9oYXNoQ29kZTsKCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZDsKCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVW5pZnkgcHJlY2VkZW5jZSBoYW5kbGVkIGJldHdlZW4gY29uc3RhbnRzLCBmcm9udC1lbmQKICAvLyBhbmQgYmFjay1lbmQuCiAgaW50IGdldCBwcmVjZWRlbmNlID0+IDE2OwoKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pOwoKICAvLy8gU3Vic3RpdHV0ZSBmcmVlIHZhcmlhYmxlcyB1c2luZyBhcmd1bWVudHMuCiAgQ29uc3RhbnRFeHByZXNzaW9uIGFwcGx5KE5vcm1hbGl6ZWRBcmd1bWVudHMgYXJndW1lbnRzKSA9PiB0aGlzOwoKICAvLy8gQ29tcHV0ZSB0aGUgW0NvbnN0YW50VmFsdWVdIGZvciB0aGlzIGV4cHJlc3Npb24gdXNpbmcgdGhlIFtlbnZpcm9ubWVudF0uCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpOwoKICAvLy8gUmV0dXJucyB0aGUgdHlwZSBvZiB0aGlzIGNvbnN0YW50IGV4cHJlc3Npb24sIGlmIGl0IGlzIGluZGVwZW5kZW50IG9mIHRoZQogIC8vLyBlbnZpcm9ubWVudCB2YWx1ZXMuCiAgRGFydFR5cGUgZ2V0S25vd25UeXBlKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSA9PiBudWxsOwoKICAvLy8gUmV0dXJucyBhIHRleHQgc3RyaW5nIHJlc2VtYmxpbmcgdGhlIERhcnQgY29kZSBjcmVhdGluZyB0aGlzIGNvbnN0YW50LgogIFN0cmluZyB0b0RhcnRUZXh0KCkgewogICAgQ29uc3RFeHBQcmludGVyIHByaW50ZXIgPSBuZXcgQ29uc3RFeHBQcmludGVyKCk7CiAgICBhY2NlcHQocHJpbnRlcik7CiAgICByZXR1cm4gcHJpbnRlci50b1N0cmluZygpOwogIH0KCiAgLy8vIFJldHVybnMgYSB0ZXh0IHN0cmluZyBzaG93aW5nIHRoZSBzdHJ1Y3R1cmUgb2YgdGhpcyBjb25zdGFudC4KICBTdHJpbmcgdG9TdHJ1Y3R1cmVkVGV4dCgpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChzYik7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIC8vLyBXcml0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0aGUgY29uc3RhbnQgaW50byBbc2JdLgogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYik7CgogIGludCBfY29tcHV0ZUhhc2hDb2RlKCk7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gX2hhc2hDb2RlID8/PSBfY29tcHV0ZUhhc2hDb2RlKCk7CgogIGJvb2wgX2VxdWFscyhjb3ZhcmlhbnQgQ29uc3RhbnRFeHByZXNzaW9uIG90aGVyKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBDb25zdGFudEV4cHJlc3Npb24pIHJldHVybiBmYWxzZTsKICAgIGlmIChraW5kICE9IG90aGVyLmtpbmQpIHJldHVybiBmYWxzZTsKICAgIGlmIChoYXNoQ29kZSAhPSBvdGhlci5oYXNoQ29kZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIF9lcXVhbHMob3RoZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgYXNzZXJ0RGVidWdNb2RlKCdVc2UgQ29uc3RhbnRFeHByZXNzaW9uLnRvRGFydFRleHQoKSBvciAnCiAgICAgICAgJ0NvbnN0YW50RXhwcmVzc2lvbi50b1N0cnVjdHVyZWRUZXh0KCkgaW5zdGVhZCBvZiAnCiAgICAgICAgJ0NvbnN0YW50RXhwcmVzc2lvbi50b1N0cmluZygpJyk7CiAgICByZXR1cm4gdG9EYXJ0VGV4dCgpOwogIH0KCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoaXMgZXhwcmVzc2lvbiBpcyBpbXBsaWNpdGx5IGNvbnN0YW50LCB0aGF0IGlzLCB0aGF0CiAgLy8vIGl0IGRvZXNuJ3QgZGVjbGFyZSBpdHMgY29uc3RuZXNzIHdpdGggdGhlICdjb25zdCcga2V5d29yZC4KICAvLy8KICAvLy8gSW1wbGljaXQgY29uc3RhbnRzIGFyZSBzaW1wbGUgbGl0ZXJhbHMsIGxpa2UgYm9vbCwgaW50IGFuZCBzdHJpbmcKICAvLy8gbGl0ZXJhbHMsIGNvbnN0YW50IHJlZmVyZW5jZXMgYW5kIGNvbXBvc2l0aW9ucyBvZiBpbXBsaWNpdCBjb25zdGFudHMuCiAgLy8vIEV4cGxpY2l0IGNvbnN0YW50cyBhcmUgY29uc3RydWN0b3IgY29uc3RhbnRzLCBhbmQgY29uc3RhbnQgbWFwIGFuZCBsaXN0CiAgLy8vIGxpdGVyYWxzLgogIGJvb2wgZ2V0IGlzSW1wbGljaXQgPT4gdHJ1ZTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoaXMgZXhwcmVzc2lvbiBpcyBvbmx5IHBvdGVudGlhbGx5IGNvbnN0YW50LCB0aGF0IGlzLAogIC8vLyBpZiBpdCBjb250YWlucyBwb3NpdGlvbmFsIG9yIG5hbWVkIHJlZmVyZW5jZXMsIHVzZWQgdG8gZGVmaW5lIGNvbnN0YW50CiAgLy8vIGNvbnN0cnVjdG9ycy4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNYXliZSBtYWtlIHRoaXMgZmluYWwgaWYgd2UgdXNlIGl0IG91dHNpZGUgYXNzZXJ0aW9ucy4KICBib29sIGdldCBpc1BvdGVudGlhbCA9PiBmYWxzZTsKfQoKLy8vIEEgc3ludGhldGljIGNvbnN0YW50IHVzZWQgdG8gcmVjb3ZlciBmcm9tIGVycm9ycy4KY2xhc3MgRXJyb25lb3VzQ29uc3RhbnRFeHByZXNzaW9uIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uIHsKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kID0+IENvbnN0YW50RXhwcmVzc2lvbktpbmQuRVJST05FT1VTOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIC8vIERvIG5vdGhpbmcuIFRoaXMgaXMgYW4gZXJyb3IuCiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIG5vbi1jb25zdGFudCB2YWx1ZXMgZm9yIGVycm9ycy4KICAgIHJldHVybiBuZXcgTm9uQ29uc3RhbnRWYWx1ZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnRXJyb25lb3VzKCknKTsKICB9CgogIEBvdmVycmlkZQogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgPT4gMTM7CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhFcnJvbmVvdXNDb25zdGFudEV4cHJlc3Npb24gb3RoZXIpID0+IHRydWU7Cn0KCi8vLyBCb29sZWFuIGxpdGVyYWwgY29uc3RhbnQuCmNsYXNzIEJvb2xDb25zdGFudEV4cHJlc3Npb24gZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb24gewogIGZpbmFsIGJvb2wgYm9vbFZhbHVlOwoKICBCb29sQ29uc3RhbnRFeHByZXNzaW9uKHRoaXMuYm9vbFZhbHVlKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCA9PiBDb25zdGFudEV4cHJlc3Npb25LaW5kLkJPT0w7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRCb29sKHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnQm9vbCh2YWx1ZT0ke2Jvb2xWYWx1ZX0pJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVCb29sKGJvb2xWYWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpID0+IDEzICogYm9vbFZhbHVlLmhhc2hDb2RlOwoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoQm9vbENvbnN0YW50RXhwcmVzc2lvbiBvdGhlcikgewogICAgcmV0dXJuIGJvb2xWYWx1ZSA9PSBvdGhlci5ib29sVmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldEtub3duVHlwZShDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgPT4KICAgICAgY29tbW9uRWxlbWVudHMuYm9vbFR5cGU7Cn0KCi8vLyBJbnRlZ2VyIGxpdGVyYWwgY29uc3RhbnQuCmNsYXNzIEludENvbnN0YW50RXhwcmVzc2lvbiBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgZmluYWwgQmlnSW50IGludFZhbHVlOwoKICBJbnRDb25zdGFudEV4cHJlc3Npb24odGhpcy5pbnRWYWx1ZSk7CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5JTlQ7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRJbnQodGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdJbnQodmFsdWU9JHtpbnRWYWx1ZX0pJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVJbnQoaW50VmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKSA9PiAxNyAqIGludFZhbHVlLmhhc2hDb2RlOwoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoSW50Q29uc3RhbnRFeHByZXNzaW9uIG90aGVyKSB7CiAgICByZXR1cm4gaW50VmFsdWUgPT0gb3RoZXIuaW50VmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldEtub3duVHlwZShDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgPT4KICAgICAgY29tbW9uRWxlbWVudHMuaW50VHlwZTsKfQoKLy8vIERvdWJsZSBsaXRlcmFsIGNvbnN0YW50LgpjbGFzcyBEb3VibGVDb25zdGFudEV4cHJlc3Npb24gZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb24gewogIGZpbmFsIGRvdWJsZSBkb3VibGVWYWx1ZTsKCiAgRG91YmxlQ29uc3RhbnRFeHByZXNzaW9uKHRoaXMuZG91YmxlVmFsdWUpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kID0+IENvbnN0YW50RXhwcmVzc2lvbktpbmQuRE9VQkxFOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0RG91YmxlKHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnRG91YmxlKHZhbHVlPSR7ZG91YmxlVmFsdWV9KScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uY3JlYXRlRG91YmxlKGRvdWJsZVZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgPT4gMTkgKiBkb3VibGVWYWx1ZS5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKERvdWJsZUNvbnN0YW50RXhwcmVzc2lvbiBvdGhlcikgewogICAgcmV0dXJuIGRvdWJsZVZhbHVlID09IG90aGVyLmRvdWJsZVZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRLbm93blR5cGUoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpID0+CiAgICAgIGNvbW1vbkVsZW1lbnRzLmRvdWJsZVR5cGU7Cn0KCi8vLyBTdHJpbmcgbGl0ZXJhbCBjb25zdGFudC4KY2xhc3MgU3RyaW5nQ29uc3RhbnRFeHByZXNzaW9uIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uIHsKICBmaW5hbCBTdHJpbmcgc3RyaW5nVmFsdWU7CgogIFN0cmluZ0NvbnN0YW50RXhwcmVzc2lvbih0aGlzLnN0cmluZ1ZhbHVlKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCA9PiBDb25zdGFudEV4cHJlc3Npb25LaW5kLlNUUklORzsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFN0cmluZyh0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ1N0cmluZyh2YWx1ZT0ke3N0cmluZ1ZhbHVlfSknKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZVN0cmluZyhzdHJpbmdWYWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpID0+IDIzICogc3RyaW5nVmFsdWUuaGFzaENvZGU7CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhTdHJpbmdDb25zdGFudEV4cHJlc3Npb24gb3RoZXIpIHsKICAgIHJldHVybiBzdHJpbmdWYWx1ZSA9PSBvdGhlci5zdHJpbmdWYWx1ZTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0S25vd25UeXBlKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSA9PgogICAgICBjb21tb25FbGVtZW50cy5zdHJpbmdUeXBlOwp9CgovLy8gTnVsbCBsaXRlcmFsIGNvbnN0YW50LgpjbGFzcyBOdWxsQ29uc3RhbnRFeHByZXNzaW9uIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uIHsKICBOdWxsQ29uc3RhbnRFeHByZXNzaW9uKCk7CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5OVUxMOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0TnVsbCh0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ051bGwoKScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uY3JlYXRlTnVsbCgpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKSA9PiAyOTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKE51bGxDb25zdGFudEV4cHJlc3Npb24gb3RoZXIpID0+IHRydWU7CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0S25vd25UeXBlKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSA9PgogICAgICBjb21tb25FbGVtZW50cy5udWxsVHlwZTsKfQoKLy8vIExpdGVyYWwgbGlzdCBjb25zdGFudC4KY2xhc3MgTGlzdENvbnN0YW50RXhwcmVzc2lvbiBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgZmluYWwgSW50ZXJmYWNlVHlwZSB0eXBlOwogIGZpbmFsIExpc3Q8Q29uc3RhbnRFeHByZXNzaW9uPiB2YWx1ZXM7CgogIExpc3RDb25zdGFudEV4cHJlc3Npb24odGhpcy50eXBlLCB0aGlzLnZhbHVlcyk7CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5MSVNUOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0TGlzdCh0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ0xpc3QodHlwZT0kdHlwZSx2YWx1ZXM9WycpOwogICAgU3RyaW5nIGRlbGltaXRlciA9ICcnOwogICAgZm9yIChDb25zdGFudEV4cHJlc3Npb24gdmFsdWUgaW4gdmFsdWVzKSB7CiAgICAgIHNiLndyaXRlKGRlbGltaXRlcik7CiAgICAgIHZhbHVlLl9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChzYik7CiAgICAgIGRlbGltaXRlciA9ICcsJzsKICAgIH0KICAgIHNiLndyaXRlKCddKScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uY3JlYXRlTGlzdCgKICAgICAgICB0eXBlLCB2YWx1ZXMubWFwKCh2KSA9PiB2LmV2YWx1YXRlKGVudmlyb25tZW50KSkudG9MaXN0KCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIGFwcGx5KE5vcm1hbGl6ZWRBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IExpc3RDb25zdGFudEV4cHJlc3Npb24oCiAgICAgICAgdHlwZSwgdmFsdWVzLm1hcCgodikgPT4gdi5hcHBseShhcmd1bWVudHMpKS50b0xpc3QoKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpIHsKICAgIGludCBoYXNoQ29kZSA9IDEzICogdHlwZS5oYXNoQ29kZSArIDE3ICogdmFsdWVzLmxlbmd0aDsKICAgIGZvciAoQ29uc3RhbnRFeHByZXNzaW9uIHZhbHVlIGluIHZhbHVlcykgewogICAgICBoYXNoQ29kZSBePSAxOSAqIHZhbHVlLmhhc2hDb2RlOwogICAgfQogICAgcmV0dXJuIGhhc2hDb2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKExpc3RDb25zdGFudEV4cHJlc3Npb24gb3RoZXIpIHsKICAgIGlmICh0eXBlICE9IG90aGVyLnR5cGUpIHJldHVybiBmYWxzZTsKICAgIGlmICh2YWx1ZXMubGVuZ3RoICE9IG90aGVyLnZhbHVlcy5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICh2YWx1ZXNbaV0gIT0gb3RoZXIudmFsdWVzW2ldKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldEtub3duVHlwZShDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgPT4gdHlwZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNJbXBsaWNpdCA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNQb3RlbnRpYWwgPT4gdmFsdWVzLmFueSgoZSkgPT4gZS5pc1BvdGVudGlhbCk7Cn0KCi8vLyBMaXRlcmFsIHNldCBjb25zdGFudC4KY2xhc3MgU2V0Q29uc3RhbnRFeHByZXNzaW9uIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uIHsKICBmaW5hbCBJbnRlcmZhY2VUeXBlIHR5cGU7CiAgZmluYWwgTGlzdDxDb25zdGFudEV4cHJlc3Npb24+IHZhbHVlczsKCiAgU2V0Q29uc3RhbnRFeHByZXNzaW9uKHRoaXMudHlwZSwgdGhpcy52YWx1ZXMpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kID0+IENvbnN0YW50RXhwcmVzc2lvbktpbmQuU0VUOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0U2V0KHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIGFwcGx5KE5vcm1hbGl6ZWRBcmd1bWVudHMgYXJndW1lbnRzKSA9PgogICAgICBuZXcgU2V0Q29uc3RhbnRFeHByZXNzaW9uKAogICAgICAgICAgdHlwZSwgdmFsdWVzLm1hcCgodikgPT4gdi5hcHBseShhcmd1bWVudHMpKS50b0xpc3QoKSk7CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICAvLyBUT0RPKGZpc2h5dGhlZmlzaCk6IERlbGV0ZSBvbmNlIHRoZSBDRkUgcHJvdmlkZXMgdGhlc2UgZXJyb3IgbWVzc2FnZXMuCiAgICBTZXQ8Q29uc3RhbnRWYWx1ZT4gc2V0ID0gbmV3IExpbmtlZEhhc2hTZXQ8Q29uc3RhbnRWYWx1ZT4oKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPSB2YWx1ZXNbaV0uZXZhbHVhdGUoZW52aXJvbm1lbnQpOwogICAgICBpZiAoIXZhbHVlLmlzQ29uc3RhbnQpIHJldHVybiBuZXcgTm9uQ29uc3RhbnRWYWx1ZSgpOwogICAgICBpZiAoIXNldC5hZGQodmFsdWUpKSB7CiAgICAgICAgZW52aXJvbm1lbnQucmVwb3J0RXJyb3IodmFsdWVzW2ldLCBNZXNzYWdlS2luZC5FUVVBTF9TRVRfRU5UUlksIHt9KTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uY3JlYXRlU2V0KAogICAgICAgIGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzLCB0eXBlLCBzZXQudG9MaXN0KCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0S25vd25UeXBlKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSA9PiB0eXBlOwoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdTZXQodHlwZT0kdHlwZSx2YWx1ZXM9WycpOwogICAgU3RyaW5nIGRlbGltaXRlciA9ICcnOwogICAgZm9yIChDb25zdGFudEV4cHJlc3Npb24gdmFsdWUgaW4gdmFsdWVzKSB7CiAgICAgIHNiLndyaXRlKGRlbGltaXRlcik7CiAgICAgIHZhbHVlLl9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChzYik7CiAgICAgIGRlbGltaXRlciA9ICcsJzsKICAgIH0KICAgIHNiLndyaXRlKCddKScpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKSA9PiBIYXNoaW5nLmxpc3RIYXNoKHZhbHVlcywgSGFzaGluZy5vYmplY3RIYXNoKHR5cGUpKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKFNldENvbnN0YW50RXhwcmVzc2lvbiBvdGhlcikgewogICAgaWYgKHR5cGUgIT0gb3RoZXIudHlwZSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKHZhbHVlcy5sZW5ndGggIT0gb3RoZXIudmFsdWVzLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHZhbHVlc1tpXSAhPSBvdGhlci52YWx1ZXNbaV0pIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNJbXBsaWNpdCA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNQb3RlbnRpYWwgPT4gdmFsdWVzLmFueSgodikgPT4gdi5pc1BvdGVudGlhbCk7Cn0KCi8vLyBMaXRlcmFsIG1hcCBjb25zdGFudC4KY2xhc3MgTWFwQ29uc3RhbnRFeHByZXNzaW9uIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uIHsKICBmaW5hbCBJbnRlcmZhY2VUeXBlIHR5cGU7CiAgZmluYWwgTGlzdDxDb25zdGFudEV4cHJlc3Npb24+IGtleXM7CiAgZmluYWwgTGlzdDxDb25zdGFudEV4cHJlc3Npb24+IHZhbHVlczsKCiAgTWFwQ29uc3RhbnRFeHByZXNzaW9uKHRoaXMudHlwZSwgdGhpcy5rZXlzLCB0aGlzLnZhbHVlcyk7CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5NQVA7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRNYXAodGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdNYXAodHlwZT0kdHlwZSxlbnRyaWVzPVsnKTsKICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBrZXlzLmxlbmd0aDsgaW5kZXgrKykgewogICAgICBpZiAoaW5kZXggPiAwKSB7CiAgICAgICAgc2Iud3JpdGUoJywnKTsKICAgICAgfQogICAgICBrZXlzW2luZGV4XS5fY3JlYXRlU3RydWN0dXJlZFRleHQoc2IpOwogICAgICBzYi53cml0ZSgnLT4nKTsKICAgICAgdmFsdWVzW2luZGV4XS5fY3JlYXRlU3RydWN0dXJlZFRleHQoc2IpOwogICAgfQogICAgc2Iud3JpdGUoJ10pJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgLy8gVE9ETyhzaWdtdW5kKTogZGVsZXRlIG9uY2UgdGhlIENGRSBwcm92aWRlcyB0aGVzZSBlcnJvciBtZXNzYWdlcy4KICAgIHJldHVybiBlbnZpcm9ubWVudC5ldmFsdWF0ZU1hcEJvZHkoKCkgewogICAgICBNYXA8Q29uc3RhbnRWYWx1ZSwgQ29uc3RhbnRWYWx1ZT4gbWFwID0gPENvbnN0YW50VmFsdWUsIENvbnN0YW50VmFsdWU+e307CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykgewogICAgICAgIENvbnN0YW50VmFsdWUga2V5ID0ga2V5c1tpXS5ldmFsdWF0ZShlbnZpcm9ubWVudCk7CiAgICAgICAgaWYgKCFrZXkuaXNDb25zdGFudCkgewogICAgICAgICAgcmV0dXJuIG5ldyBOb25Db25zdGFudFZhbHVlKCk7CiAgICAgICAgfQogICAgICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPSB2YWx1ZXNbaV0uZXZhbHVhdGUoZW52aXJvbm1lbnQpOwogICAgICAgIGlmICghdmFsdWUuaXNDb25zdGFudCkgewogICAgICAgICAgcmV0dXJuIG5ldyBOb25Db25zdGFudFZhbHVlKCk7CiAgICAgICAgfQogICAgICAgIGlmIChtYXAuY29udGFpbnNLZXkoa2V5KSkgewogICAgICAgICAgZW52aXJvbm1lbnQucmVwb3J0RXJyb3Ioa2V5c1tpXSwgTWVzc2FnZUtpbmQuRVFVQUxfTUFQX0VOVFJZX0tFWSwge30pOwogICAgICAgIH0KICAgICAgICBtYXBba2V5XSA9IHZhbHVlOwogICAgICB9CiAgICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uY3JlYXRlTWFwKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzLCB0eXBlLAogICAgICAgICAgbWFwLmtleXMudG9MaXN0KCksIG1hcC52YWx1ZXMudG9MaXN0KCkpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gYXBwbHkoTm9ybWFsaXplZEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBuZXcgTWFwQ29uc3RhbnRFeHByZXNzaW9uKAogICAgICAgIHR5cGUsCiAgICAgICAga2V5cy5tYXAoKGspID0+IGsuYXBwbHkoYXJndW1lbnRzKSkudG9MaXN0KCksCiAgICAgICAgdmFsdWVzLm1hcCgodikgPT4gdi5hcHBseShhcmd1bWVudHMpKS50b0xpc3QoKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpIHsKICAgIGludCBoYXNoQ29kZSA9IDEzICogdHlwZS5oYXNoQ29kZSArIDE3ICogdmFsdWVzLmxlbmd0aDsKICAgIGZvciAoQ29uc3RhbnRFeHByZXNzaW9uIHZhbHVlIGluIHZhbHVlcykgewogICAgICBoYXNoQ29kZSBePSAxOSAqIHZhbHVlLmhhc2hDb2RlOwogICAgfQogICAgcmV0dXJuIGhhc2hDb2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKE1hcENvbnN0YW50RXhwcmVzc2lvbiBvdGhlcikgewogICAgaWYgKHR5cGUgIT0gb3RoZXIudHlwZSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKHZhbHVlcy5sZW5ndGggIT0gb3RoZXIudmFsdWVzLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGtleXNbaV0gIT0gb3RoZXIua2V5c1tpXSkgcmV0dXJuIGZhbHNlOwogICAgICBpZiAodmFsdWVzW2ldICE9IG90aGVyLnZhbHVlc1tpXSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRLbm93blR5cGUoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpID0+IHR5cGU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzSW1wbGljaXQgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUG90ZW50aWFsIHsKICAgIHJldHVybiBrZXlzLmFueSgoZSkgPT4gZS5pc1BvdGVudGlhbCkgfHwgdmFsdWVzLmFueSgoZSkgPT4gZS5pc1BvdGVudGlhbCk7CiAgfQp9CgovLy8gSW52b2NhdGlvbiBvZiBhIGNvbnN0IGNvbnN0cnVjdG9yLgpjbGFzcyBDb25zdHJ1Y3RlZENvbnN0YW50RXhwcmVzc2lvbiBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgZmluYWwgSW50ZXJmYWNlVHlwZSB0eXBlOwogIGZpbmFsIENvbnN0cnVjdG9yRW50aXR5IHRhcmdldDsKICBmaW5hbCBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmU7CiAgZmluYWwgTGlzdDxDb25zdGFudEV4cHJlc3Npb24+IGFyZ3VtZW50czsKCiAgQ29uc3RydWN0ZWRDb25zdGFudEV4cHJlc3Npb24oCiAgICAgIHRoaXMudHlwZSwgdGhpcy50YXJnZXQsIHRoaXMuY2FsbFN0cnVjdHVyZSwgdGhpcy5hcmd1bWVudHMpIHsKICAgIGFzc2VydCh0eXBlLmVsZW1lbnQgPT0gdGFyZ2V0LmVuY2xvc2luZ0NsYXNzKTsKICAgIGFzc2VydCghYXJndW1lbnRzLmNvbnRhaW5zKG51bGwpKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5DT05TVFJVQ1RFRDsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdENvbnN0cnVjdGVkKHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnQ29uc3RydWN0ZWQodHlwZT0kdHlwZSxjb25zdHJ1Y3Rvcj0kdGFyZ2V0LCcKICAgICAgICAnY2FsbFN0cnVjdHVyZT0kY2FsbFN0cnVjdHVyZSxhcmd1bWVudHM9WycpOwogICAgU3RyaW5nIGRlbGltaXRlciA9ICcnOwogICAgZm9yIChDb25zdGFudEV4cHJlc3Npb24gdmFsdWUgaW4gYXJndW1lbnRzKSB7CiAgICAgIHNiLndyaXRlKGRlbGltaXRlcik7CiAgICAgIHZhbHVlLl9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChzYik7CiAgICAgIGRlbGltaXRlciA9ICcsJzsKICAgIH0KICAgIHNiLndyaXRlKCddKScpOwogIH0KCiAgSW5zdGFuY2VEYXRhIGNvbXB1dGVJbnN0YW5jZURhdGEoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICBDb25zdGFudENvbnN0cnVjdG9yIGNvbnN0YW50Q29uc3RydWN0b3IgPQogICAgICAgIGVudmlyb25tZW50LmdldENvbnN0cnVjdG9yQ29uc3RhbnQodGFyZ2V0KTsKICAgIGFzc2VydChjb25zdGFudENvbnN0cnVjdG9yICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQodGFyZ2V0LCAiTm8gY29uc3RhbnQgY29uc3RydWN0b3IgY29tcHV0ZWQgZm9yICR0YXJnZXQuIikpOwogICAgcmV0dXJuIGNvbnN0YW50Q29uc3RydWN0b3IuY29tcHV0ZUluc3RhbmNlRGF0YSgKICAgICAgICBlbnZpcm9ubWVudCwgYXJndW1lbnRzLCBjYWxsU3RydWN0dXJlKTsKICB9CgogIEludGVyZmFjZVR5cGUgY29tcHV0ZUluc3RhbmNlVHlwZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIHJldHVybiBlbnZpcm9ubWVudAogICAgICAgIC5nZXRDb25zdHJ1Y3RvckNvbnN0YW50KHRhcmdldCkKICAgICAgICAuY29tcHV0ZUluc3RhbmNlVHlwZShlbnZpcm9ubWVudCwgdHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdHJ1Y3RlZENvbnN0YW50RXhwcmVzc2lvbiBhcHBseShOb3JtYWxpemVkQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RlZENvbnN0YW50RXhwcmVzc2lvbih0eXBlLCB0YXJnZXQsIGNhbGxTdHJ1Y3R1cmUsCiAgICAgICAgdGhpcy5hcmd1bWVudHMubWFwKChhKSA9PiBhLmFwcGx5KGFyZ3VtZW50cykpLnRvTGlzdCgpKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICBJbnRlcmZhY2VUeXBlIGluc3RhbmNlVHlwZSA9IGNvbXB1dGVJbnN0YW5jZVR5cGUoZW52aXJvbm1lbnQpOwogICAgcmV0dXJuIGVudmlyb25tZW50LmV2YWx1YXRlQ29uc3RydWN0b3IodGFyZ2V0LCBpbnN0YW5jZVR5cGUsICgpIHsKICAgICAgSW5zdGFuY2VEYXRhIGluc3RhbmNlRGF0YSA9IGNvbXB1dGVJbnN0YW5jZURhdGEoZW52aXJvbm1lbnQpOwogICAgICBpZiAoaW5zdGFuY2VEYXRhID09IG51bGwpIHsKICAgICAgICByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICAgICAgfQogICAgICBib29sIGlzVmFsaWRBc0NvbnN0YW50ID0gdHJ1ZTsKICAgICAgTWFwPEZpZWxkRW50aXR5LCBDb25zdGFudFZhbHVlPiBmaWVsZFZhbHVlcyA9CiAgICAgICAgICA8RmllbGRFbnRpdHksIENvbnN0YW50VmFsdWU+e307CiAgICAgIGluc3RhbmNlRGF0YS5maWVsZE1hcAogICAgICAgICAgLmZvckVhY2goKEZpZWxkRW50aXR5IGZpZWxkLCBDb25zdGFudEV4cHJlc3Npb24gY29uc3RhbnQpIHsKICAgICAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gY29uc3RhbnQuZXZhbHVhdGUoZW52aXJvbm1lbnQpOwogICAgICAgIGFzc2VydCgKICAgICAgICAgICAgdmFsdWUgIT0gbnVsbCwKICAgICAgICAgICAgZmFpbGVkQXQoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICAgICAgICJObyB2YWx1ZSBjb21wdXRlZCBmb3IgJHtjb25zdGFudC50b1N0cnVjdHVyZWRUZXh0KCl9LiIpKTsKICAgICAgICBpZiAodmFsdWUuaXNDb25zdGFudCkgewogICAgICAgICAgZmllbGRWYWx1ZXNbZmllbGRdID0gdmFsdWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlzVmFsaWRBc0NvbnN0YW50ID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgZm9yIChBc3NlcnRDb25zdGFudEV4cHJlc3Npb24gYXNzZXJ0aW9uIGluIGluc3RhbmNlRGF0YS5hc3NlcnRpb25zKSB7CiAgICAgICAgaWYgKCFhc3NlcnRpb24uZXZhbHVhdGUoZW52aXJvbm1lbnQpLmlzQ29uc3RhbnQpIHsKICAgICAgICAgIGlzVmFsaWRBc0NvbnN0YW50ID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChpc1ZhbGlkQXNDb25zdGFudCkgewogICAgICAgIHJldHVybiBuZXcgQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlKGluc3RhbmNlVHlwZSwgZmllbGRWYWx1ZXMpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBuZXcgTm9uQ29uc3RhbnRWYWx1ZSgpOwogICAgICB9CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgewogICAgaW50IGhhc2hDb2RlID0KICAgICAgICAxMyAqIHR5cGUuaGFzaENvZGUgKyAxNyAqIHRhcmdldC5oYXNoQ29kZSArIDE5ICogY2FsbFN0cnVjdHVyZS5oYXNoQ29kZTsKICAgIGZvciAoQ29uc3RhbnRFeHByZXNzaW9uIHZhbHVlIGluIGFyZ3VtZW50cykgewogICAgICBoYXNoQ29kZSBePSAyMyAqIHZhbHVlLmhhc2hDb2RlOwogICAgfQogICAgcmV0dXJuIGhhc2hDb2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKENvbnN0cnVjdGVkQ29uc3RhbnRFeHByZXNzaW9uIG90aGVyKSB7CiAgICBpZiAodHlwZSAhPSBvdGhlci50eXBlKSByZXR1cm4gZmFsc2U7CiAgICBpZiAodGFyZ2V0ICE9IG90aGVyLnRhcmdldCkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGNhbGxTdHJ1Y3R1cmUgIT0gb3RoZXIuY2FsbFN0cnVjdHVyZSkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGFyZ3VtZW50c1tpXSAhPSBvdGhlci5hcmd1bWVudHNbaV0pIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNJbXBsaWNpdCA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNQb3RlbnRpYWwgewogICAgcmV0dXJuIGFyZ3VtZW50cy5hbnkoKGUpID0+IGUuaXNQb3RlbnRpYWwpOwogIH0KfQoKLy8vIFN0cmluZyBsaXRlcmFsIHdpdGgganV4dGFwb3NpdGlvbiBhbmQvb3IgaW50ZXJwb2xhdGlvbnMuCmNsYXNzIENvbmNhdGVuYXRlQ29uc3RhbnRFeHByZXNzaW9uIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uIHsKICBmaW5hbCBMaXN0PENvbnN0YW50RXhwcmVzc2lvbj4gZXhwcmVzc2lvbnM7CgogIENvbmNhdGVuYXRlQ29uc3RhbnRFeHByZXNzaW9uKHRoaXMuZXhwcmVzc2lvbnMpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kID0+IENvbnN0YW50RXhwcmVzc2lvbktpbmQuQ09OQ0FURU5BVEU7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRDb25jYXRlbmF0ZSh0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ0NvbmNhdGVuYXRlKGV4cHJlc3Npb25zPVsnKTsKICAgIFN0cmluZyBkZWxpbWl0ZXIgPSAnJzsKICAgIGZvciAoQ29uc3RhbnRFeHByZXNzaW9uIHZhbHVlIGluIGV4cHJlc3Npb25zKSB7CiAgICAgIHNiLndyaXRlKGRlbGltaXRlcik7CiAgICAgIHZhbHVlLl9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChzYik7CiAgICAgIGRlbGltaXRlciA9ICcsJzsKICAgIH0KICAgIHNiLndyaXRlKCddKScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIGFwcGx5KE5vcm1hbGl6ZWRBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IENvbmNhdGVuYXRlQ29uc3RhbnRFeHByZXNzaW9uKAogICAgICAgIGV4cHJlc3Npb25zLm1hcCgoYSkgPT4gYS5hcHBseShhcmd1bWVudHMpKS50b0xpc3QoKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGZvciAoQ29uc3RhbnRFeHByZXNzaW9uIGV4cHJlc3Npb24gaW4gZXhwcmVzc2lvbnMpIHsKICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IGV4cHJlc3Npb24uZXZhbHVhdGUoZW52aXJvbm1lbnQpOwogICAgICBpZiAoIXZhbHVlLmlzQ29uc3RhbnQpIHsKICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgLy8gVXNlIGBjb250aW51ZWAgaW5zdGVhZCBvZiBgcmV0dXJuYCBoZXJlIHRvIHJlcG9ydCBhbGwgZXJyb3JzIGluIHRoZQogICAgICAgIC8vIGV4cHJlc3Npb24gYW5kIG5vdCBqdXN0IHRoZSBmaXJzdC4KICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAodmFsdWUuaXNQcmltaXRpdmUpIHsKICAgICAgICBpZiAodmFsdWUgaXMgU3RyaW5nQ29uc3RhbnRWYWx1ZSkgewogICAgICAgICAgc2Iud3JpdGUodmFsdWUuc3RyaW5nVmFsdWUpOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaXMgSW50Q29uc3RhbnRWYWx1ZSkgewogICAgICAgICAgc2Iud3JpdGUodmFsdWUuaW50VmFsdWUpOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaXMgRG91YmxlQ29uc3RhbnRWYWx1ZSkgewogICAgICAgICAgc2Iud3JpdGUodmFsdWUuZG91YmxlVmFsdWUpOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaXMgQm9vbENvbnN0YW50VmFsdWUpIHsKICAgICAgICAgIHNiLndyaXRlKHZhbHVlLmJvb2xWYWx1ZSk7CiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpcyBOdWxsQ29uc3RhbnRWYWx1ZSkgewogICAgICAgICAgc2Iud3JpdGUobnVsbCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGVudmlyb25tZW50LnJlcG9ydEVycm9yKAogICAgICAgICAgICBleHByZXNzaW9uLCBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0lOVEVSUE9MQVRJT05fVFlQRSwgewogICAgICAgICAgJ2NvbnN0YW50JzogZXhwcmVzc2lvbiwKICAgICAgICAgICd0eXBlJzogdmFsdWUuZ2V0VHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cykKICAgICAgICB9KTsKICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgLy8gVXNlIGBjb250aW51ZWAgaW5zdGVhZCBvZiBgcmV0dXJuYCBoZXJlIHRvIHJlcG9ydCBhbGwgZXJyb3JzIGluIHRoZQogICAgICAgIC8vIGV4cHJlc3Npb24gYW5kIG5vdCBqdXN0IHRoZSBmaXJzdC4KICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgfQogICAgaWYgKGlzVmFsaWQpIHsKICAgICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVTdHJpbmcoc2IudG9TdHJpbmcoKSk7CiAgICB9CiAgICByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICB9CgogIEBvdmVycmlkZQogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgewogICAgaW50IGhhc2hDb2RlID0gMTcgKiBleHByZXNzaW9ucy5sZW5ndGg7CiAgICBmb3IgKENvbnN0YW50RXhwcmVzc2lvbiB2YWx1ZSBpbiBleHByZXNzaW9ucykgewogICAgICBoYXNoQ29kZSBePSAxOSAqIHZhbHVlLmhhc2hDb2RlOwogICAgfQogICAgcmV0dXJuIGhhc2hDb2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKENvbmNhdGVuYXRlQ29uc3RhbnRFeHByZXNzaW9uIG90aGVyKSB7CiAgICBpZiAoZXhwcmVzc2lvbnMubGVuZ3RoICE9IG90aGVyLmV4cHJlc3Npb25zLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHByZXNzaW9ucy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoZXhwcmVzc2lvbnNbaV0gIT0gb3RoZXIuZXhwcmVzc2lvbnNbaV0pIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRLbm93blR5cGUoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpID0+CiAgICAgIGNvbW1vbkVsZW1lbnRzLnN0cmluZ1R5cGU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUG90ZW50aWFsIHsKICAgIHJldHVybiBleHByZXNzaW9ucy5hbnkoKGUpID0+IGUuaXNQb3RlbnRpYWwpOwogIH0KfQoKLy8vIFN5bWJvbCBsaXRlcmFsLgpjbGFzcyBTeW1ib2xDb25zdGFudEV4cHJlc3Npb24gZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb24gewogIGZpbmFsIFN0cmluZyBuYW1lOwoKICBTeW1ib2xDb25zdGFudEV4cHJlc3Npb24odGhpcy5uYW1lKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCA9PiBDb25zdGFudEV4cHJlc3Npb25LaW5kLlNZTUJPTDsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFN5bWJvbCh0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ1N5bWJvbChuYW1lPSRuYW1lKScpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKSA9PiAxMyAqIG5hbWUuaGFzaENvZGU7CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhTeW1ib2xDb25zdGFudEV4cHJlc3Npb24gb3RoZXIpIHsKICAgIHJldHVybiBuYW1lID09IG90aGVyLm5hbWU7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVTeW1ib2woZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMsIG5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRLbm93blR5cGUoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpID0+CiAgICAgIGNvbW1vbkVsZW1lbnRzLnN5bWJvbFR5cGU7Cn0KCi8vLyBUeXBlIGxpdGVyYWwuCmNsYXNzIFR5cGVDb25zdGFudEV4cHJlc3Npb24gZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb24gewogIC8vLyBFaXRoZXIgW0R5bmFtaWNUeXBlXSBvciBhIHJhdyBbR2VuZXJpY1R5cGVdLgogIGZpbmFsIERhcnRUeXBlIHR5cGU7CiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIFR5cGVDb25zdGFudEV4cHJlc3Npb24odGhpcy50eXBlLCB0aGlzLm5hbWUpIHsKICAgIGFzc2VydCh0eXBlLmlzSW50ZXJmYWNlVHlwZSB8fCB0eXBlLmlzVHlwZWRlZiB8fCB0eXBlLmlzRHluYW1pYywKICAgICAgICAiVW5leHBlY3RlZCB0eXBlIGNvbnN0YW50IHR5cGU6ICR0eXBlIik7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kID0+IENvbnN0YW50RXhwcmVzc2lvbktpbmQuVFlQRTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFR5cGUodGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdUeXBlKHR5cGU9JHR5cGUpJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzLCB0eXBlKTsKICB9CgogIEBvdmVycmlkZQogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgPT4gMTMgKiB0eXBlLmhhc2hDb2RlOwoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoVHlwZUNvbnN0YW50RXhwcmVzc2lvbiBvdGhlcikgewogICAgcmV0dXJuIHR5cGUgPT0gb3RoZXIudHlwZTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0S25vd25UeXBlKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSA9PgogICAgICBjb21tb25FbGVtZW50cy50eXBlVHlwZTsKfQoKLy8vIENhc3QgZXhwcmVzc2lvbnM6IHRoZXNlIG1heSBiZSBmcm9tIGVpdGhlciBleHBsaWNpdCBvciBpbXBsaWNpdCBgYXNgCi8vLyBjaGVja3MuCmNsYXNzIEFzQ29uc3RhbnRFeHByZXNzaW9uIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uIHsKICBmaW5hbCBDb25zdGFudEV4cHJlc3Npb24gZXhwcmVzc2lvbjsKICBmaW5hbCBEYXJ0VHlwZSB0eXBlOwoKICBBc0NvbnN0YW50RXhwcmVzc2lvbih0aGlzLmV4cHJlc3Npb24sIHRoaXMudHlwZSk7CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5BUzsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdEFzKHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnQXModmFsdWU9Jyk7CiAgICBleHByZXNzaW9uLl9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChzYik7CiAgICBzYi53cml0ZSgnLHR5cGU9JHR5cGUpJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgLy8gUnVubmluZyBleGFtcGxlIGZvciBjb21tZW50czoKICAgIC8vCiAgICAvLyAgICAgY2xhc3MgQTxUPiB7CiAgICAvLyAgICAgICBmaW5hbCBUIHQ7CiAgICAvLyAgICAgICBjb25zdCBBKGR5bmFtaWMgdCkgOiB0aGlzLnQgPSB0OyAvLyBpbXBsaWNpdGx5IGB0IGFzIEEuVGAKICAgIC8vICAgICB9CiAgICAvLyAgICAgY2xhc3MgQjxTPiBleHRlbmRzIEE8Uz4gewogICAgLy8gICAgICAgY29uc3QgQihkeW5hbWljIHMpIDogc3VwZXIocyk7CiAgICAvLyAgICAgfQogICAgLy8gICAgIG1haW4oKSA9PiBjb25zdCBCPG51bT4oMCk7CiAgICAvLwogICAgLy8gV2UgdmlzaXQgYHQgYXMgQS5UYCB3aGlsZSBldmFsdWF0aW5nIGBjb25zdCBCPG51bT4oMClgLgoKICAgIC8vIFRoZSBleHByZXNzaW9uIHZhbHVlIGlzIGAwYC4KICAgIENvbnN0YW50VmFsdWUgZXhwcmVzc2lvblZhbHVlID0gZXhwcmVzc2lvbi5ldmFsdWF0ZShlbnZpcm9ubWVudCk7CgogICAgaWYgKCFlbnZpcm9ubWVudC5jaGVja0Nhc3RzKSByZXR1cm4gZXhwcmVzc2lvblZhbHVlOwoKICAgIC8vIFRoZSBleHByZXNzaW9uIHR5cGUgaXMgYGludGAuCiAgICBEYXJ0VHlwZSBleHByZXNzaW9uVHlwZSA9CiAgICAgICAgZXhwcmVzc2lvblZhbHVlLmdldFR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMpOwoKICAgIC8vIFRoZSBgYXNgIHR5cGUgYEEuVGAgaW4gdGhlIGNvbnRleHQgb2YgYEI8bnVtPmAgaXMgYG51bWAuCiAgICBEYXJ0VHlwZSB0eXBlSW5Db250ZXh0ID0gZW52aXJvbm1lbnQuZ2V0VHlwZUluQ29udGV4dCh0eXBlKTsKCiAgICAvLyBDaGVjayB0aGF0IHRoZSBleHByZXNzaW9uIHR5cGUsIGBpbnRgLCBpcyBhIHN1YnR5cGUgb2YgdGhlIHR5cGUgaW4KICAgIC8vIGNvbnRleHQsIGBudW1gLgogICAgaWYgKCFjb25zdGFudF9zeXN0ZW0uaXNTdWJ0eXBlKAogICAgICAgIGVudmlyb25tZW50LnR5cGVzLCBleHByZXNzaW9uVHlwZSwgdHlwZUluQ29udGV4dCkpIHsKICAgICAgLy8gVE9ETyhzaWdtdW5kKTogY29uc2lkZXIgcmVwb3J0aW5nIGRpZmZlcmVudCBtZXNzYWdlcyBhbmQgZXJyb3IKICAgICAgLy8gbG9jYXRpb25zIGZvciBpbXBsaWNpdCB2cyBleHBsaWNpdCBjYXN0cy4KICAgICAgZW52aXJvbm1lbnQucmVwb3J0RXJyb3IoZXhwcmVzc2lvbiwgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9DQVNULAogICAgICAgICAgeydjb25zdGFudCc6IGV4cHJlc3Npb24sICd0eXBlJzogZXhwcmVzc2lvblR5cGUsICdjYXN0VHlwZSc6IHR5cGV9KTsKICAgICAgcmV0dXJuIG5ldyBOb25Db25zdGFudFZhbHVlKCk7CiAgICB9CiAgICByZXR1cm4gZXhwcmVzc2lvblZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIGFwcGx5KE5vcm1hbGl6ZWRBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IEFzQ29uc3RhbnRFeHByZXNzaW9uKGV4cHJlc3Npb24uYXBwbHkoYXJndW1lbnRzKSwgdHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpID0+IDEzICogdHlwZS5oYXNoQ29kZSArIDE3ICogZXhwcmVzc2lvbi5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKEFzQ29uc3RhbnRFeHByZXNzaW9uIG90aGVyKSB7CiAgICByZXR1cm4gZXhwcmVzc2lvbiA9PSBvdGhlci5leHByZXNzaW9uICYmIHR5cGUgPT0gb3RoZXIudHlwZTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0S25vd25UeXBlKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSA9PgogICAgICBleHByZXNzaW9uLmdldEtub3duVHlwZShjb21tb25FbGVtZW50cyk7Cn0KCi8vLyBSZWZlcmVuY2UgdG8gYSBjb25zdGFudCB0b3AtbGV2ZWwgb3Igc3RhdGljIGZpZWxkLgpjbGFzcyBGaWVsZENvbnN0YW50RXhwcmVzc2lvbiBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgZmluYWwgRmllbGRFbnRpdHkgZWxlbWVudDsKCiAgRmllbGRDb25zdGFudEV4cHJlc3Npb24odGhpcy5lbGVtZW50KTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCA9PiBDb25zdGFudEV4cHJlc3Npb25LaW5kLkZJRUxEOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0RmllbGQodGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdGaWVsZChlbGVtZW50PSRlbGVtZW50KScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIHJldHVybiBlbnZpcm9ubWVudC5ldmFsdWF0ZUZpZWxkKGVsZW1lbnQsICgpIHsKICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIGNvbnN0YW50ID0gZW52aXJvbm1lbnQuZ2V0RmllbGRDb25zdGFudChlbGVtZW50KTsKICAgICAgcmV0dXJuIGNvbnN0YW50LmV2YWx1YXRlKGVudmlyb25tZW50KTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKSA9PiAxMyAqIGVsZW1lbnQuaGFzaENvZGU7CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhGaWVsZENvbnN0YW50RXhwcmVzc2lvbiBvdGhlcikgewogICAgcmV0dXJuIGVsZW1lbnQgPT0gb3RoZXIuZWxlbWVudDsKICB9Cn0KCi8vLyBSZWZlcmVuY2UgdG8gYSBjb25zdGFudCBsb2NhbCB2YXJpYWJsZS4KY2xhc3MgTG9jYWxWYXJpYWJsZUNvbnN0YW50RXhwcmVzc2lvbiBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgZmluYWwgTG9jYWwgZWxlbWVudDsKCiAgTG9jYWxWYXJpYWJsZUNvbnN0YW50RXhwcmVzc2lvbih0aGlzLmVsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kID0+IENvbnN0YW50RXhwcmVzc2lvbktpbmQuTE9DQUxfVkFSSUFCTEU7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRMb2NhbFZhcmlhYmxlKHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnTG9jYWxWYXJpYWJsZShlbGVtZW50PSRlbGVtZW50KScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIENvbnN0YW50RXhwcmVzc2lvbiBjb25zdGFudCA9IGVudmlyb25tZW50LmdldExvY2FsQ29uc3RhbnQoZWxlbWVudCk7CiAgICByZXR1cm4gY29uc3RhbnQuZXZhbHVhdGUoZW52aXJvbm1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKSA9PiAxMyAqIGVsZW1lbnQuaGFzaENvZGU7CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhMb2NhbFZhcmlhYmxlQ29uc3RhbnRFeHByZXNzaW9uIG90aGVyKSB7CiAgICByZXR1cm4gZWxlbWVudCA9PSBvdGhlci5lbGVtZW50OwogIH0KfQoKLy8vIFJlZmVyZW5jZSB0byBhIHRvcC1sZXZlbCBvciBzdGF0aWMgZnVuY3Rpb24uCmNsYXNzIEZ1bmN0aW9uQ29uc3RhbnRFeHByZXNzaW9uIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uIHsKICBmaW5hbCBGdW5jdGlvbkVudGl0eSBlbGVtZW50OwogIGZpbmFsIEZ1bmN0aW9uVHlwZSB0eXBlOwoKICBGdW5jdGlvbkNvbnN0YW50RXhwcmVzc2lvbih0aGlzLmVsZW1lbnQsIHRoaXMudHlwZSk7CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5GVU5DVElPTjsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdEZ1bmN0aW9uKHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnRnVuY3Rpb24oZWxlbWVudD0kZWxlbWVudCknKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZShlbGVtZW50LCB0eXBlKTsKICB9CgogIEBvdmVycmlkZQogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgPT4gMTMgKiBlbGVtZW50Lmhhc2hDb2RlOwoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoRnVuY3Rpb25Db25zdGFudEV4cHJlc3Npb24gb3RoZXIpIHsKICAgIHJldHVybiBlbGVtZW50ID09IG90aGVyLmVsZW1lbnQ7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldEtub3duVHlwZShDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgPT4KICAgICAgY29tbW9uRWxlbWVudHMuZnVuY3Rpb25UeXBlOwp9CgovLy8gQSBjb25zdGFudCBiaW5hcnkgZXhwcmVzc2lvbiBsaWtlIGBhICogYmAuCmNsYXNzIEJpbmFyeUNvbnN0YW50RXhwcmVzc2lvbiBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgZmluYWwgQ29uc3RhbnRFeHByZXNzaW9uIGxlZnQ7CiAgZmluYWwgQmluYXJ5T3BlcmF0b3Igb3BlcmF0b3I7CiAgZmluYWwgQ29uc3RhbnRFeHByZXNzaW9uIHJpZ2h0OwoKICBCaW5hcnlDb25zdGFudEV4cHJlc3Npb24odGhpcy5sZWZ0LCB0aGlzLm9wZXJhdG9yLCB0aGlzLnJpZ2h0KSB7CiAgICBhc3NlcnQoUFJFQ0VERU5DRV9NQVBbb3BlcmF0b3Iua2luZF0gIT0gbnVsbCwKICAgICAgICAiTWlzc2luZyBwcmVjZW5kZW5jZSBmb3IgYmluYXJ5IG9wZXJhdG9yOiAnJG9wZXJhdG9yJy4iKTsKICB9CgogIHN0YXRpYyBib29sIHBvdGVudGlhbE9wZXJhdG9yKEJpbmFyeU9wZXJhdG9yIG9wZXJhdG9yKSA9PgogICAgICBQUkVDRURFTkNFX01BUFtvcGVyYXRvci5raW5kXSAhPSBudWxsOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kID0+IENvbnN0YW50RXhwcmVzc2lvbktpbmQuQklOQVJZOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0QmluYXJ5KHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnQmluYXJ5KGxlZnQ9Jyk7CiAgICBsZWZ0Ll9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChzYik7CiAgICBzYi53cml0ZSgnLG9wPSRvcGVyYXRvcixyaWdodD0nKTsKICAgIHJpZ2h0Ll9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChzYik7CiAgICBzYi53cml0ZSgnKScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIENvbnN0YW50VmFsdWUgbGVmdFZhbHVlID0gbGVmdC5ldmFsdWF0ZShlbnZpcm9ubWVudCk7CiAgICBpZiAoIWxlZnRWYWx1ZS5pc0NvbnN0YW50KSByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICAgIENvbnN0YW50VmFsdWUgcmlnaHRWYWx1ZTsKICAgIC8vIFNob3J0LWNpcmN1aXQgJiYgYW5kIHx8IG9wZXJhdG9ycy4KICAgIHN3aXRjaCAob3BlcmF0b3Iua2luZCkgewogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5MT0dJQ0FMX0FORDoKICAgICAgICBpZiAobGVmdFZhbHVlLmlzQm9vbCAmJiBsZWZ0VmFsdWUuaXNGYWxzZSkgewogICAgICAgICAgcmlnaHRWYWx1ZSA9IG5ldyBGYWxzZUNvbnN0YW50VmFsdWUoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmlnaHRWYWx1ZSA9IHJpZ2h0LmV2YWx1YXRlKGVudmlyb25tZW50KTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5MT0dJQ0FMX09SOgogICAgICAgIGlmIChsZWZ0VmFsdWUuaXNCb29sICYmIGxlZnRWYWx1ZS5pc1RydWUpIHsKICAgICAgICAgIHJpZ2h0VmFsdWUgPSBuZXcgVHJ1ZUNvbnN0YW50VmFsdWUoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmlnaHRWYWx1ZSA9IHJpZ2h0LmV2YWx1YXRlKGVudmlyb25tZW50KTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmlnaHRWYWx1ZSA9IHJpZ2h0LmV2YWx1YXRlKGVudmlyb25tZW50KTsKICAgIH0KCiAgICBpZiAoIXJpZ2h0VmFsdWUuaXNDb25zdGFudCkgcmV0dXJuIG5ldyBOb25Db25zdGFudFZhbHVlKCk7CiAgICBib29sIGlzVmFsaWQgPSB0cnVlOwogICAgc3dpdGNoIChvcGVyYXRvci5raW5kKSB7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkVROgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5OT1RfRVE6CiAgICAgICAgaWYgKCFsZWZ0VmFsdWUuaXNQcmltaXRpdmUpIHsKICAgICAgICAgIGlmICghcmlnaHRWYWx1ZS5pc051bGwpIHsKICAgICAgICAgICAgZW52aXJvbm1lbnQucmVwb3J0RXJyb3IoCiAgICAgICAgICAgICAgICBsZWZ0LCBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0JJTkFSWV9QUklNSVRJVkVfVFlQRSwgewogICAgICAgICAgICAgICdjb25zdGFudCc6IGxlZnQsCiAgICAgICAgICAgICAgJ3R5cGUnOiBsZWZ0VmFsdWUuZ2V0VHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cyksCiAgICAgICAgICAgICAgJ29wZXJhdG9yJzogb3BlcmF0b3IKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCFyaWdodFZhbHVlLmlzUHJpbWl0aXZlKSB7CiAgICAgICAgICBpZiAoIWxlZnRWYWx1ZS5pc051bGwpIHsKICAgICAgICAgICAgZW52aXJvbm1lbnQucmVwb3J0RXJyb3IoCiAgICAgICAgICAgICAgICByaWdodCwgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9CSU5BUllfUFJJTUlUSVZFX1RZUEUsIHsKICAgICAgICAgICAgICAnY29uc3RhbnQnOiByaWdodCwKICAgICAgICAgICAgICAndHlwZSc6IHJpZ2h0VmFsdWUuZ2V0VHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cyksCiAgICAgICAgICAgICAgJ29wZXJhdG9yJzogb3BlcmF0b3IKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkFERDoKICAgICAgICBpZiAobGVmdFZhbHVlLmlzU3RyaW5nKSB7CiAgICAgICAgICBpZiAoIXJpZ2h0VmFsdWUuaXNTdHJpbmcpIHsKICAgICAgICAgICAgZW52aXJvbm1lbnQucmVwb3J0RXJyb3IoCiAgICAgICAgICAgICAgICByaWdodCwgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9TVFJJTkdfQUREX1RZUEUsIHsKICAgICAgICAgICAgICAnY29uc3RhbnQnOiByaWdodCwKICAgICAgICAgICAgICAndHlwZSc6IHJpZ2h0VmFsdWUuZ2V0VHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cykKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGxlZnRWYWx1ZS5pc051bSkgewogICAgICAgICAgaWYgKCFyaWdodFZhbHVlLmlzTnVtKSB7CiAgICAgICAgICAgIGVudmlyb25tZW50LnJlcG9ydEVycm9yKAogICAgICAgICAgICAgICAgcmlnaHQsIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfTlVNX0FERF9UWVBFLCB7CiAgICAgICAgICAgICAgJ2NvbnN0YW50JzogcmlnaHQsCiAgICAgICAgICAgICAgJ3R5cGUnOiByaWdodFZhbHVlLmdldFR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMpCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChyaWdodFZhbHVlLmlzU3RyaW5nKSB7CiAgICAgICAgICBpZiAoIWxlZnRWYWx1ZS5pc1N0cmluZykgewogICAgICAgICAgICBlbnZpcm9ubWVudC5yZXBvcnRFcnJvcigKICAgICAgICAgICAgICAgIGxlZnQsIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfU1RSSU5HX0FERF9UWVBFLCB7CiAgICAgICAgICAgICAgJ2NvbnN0YW50JzogbGVmdCwKICAgICAgICAgICAgICAndHlwZSc6IGxlZnRWYWx1ZS5nZXRUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzKQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAocmlnaHRWYWx1ZS5pc051bSkgewogICAgICAgICAgaWYgKCFsZWZ0VmFsdWUuaXNOdW0pIHsKICAgICAgICAgICAgZW52aXJvbm1lbnQucmVwb3J0RXJyb3IoCiAgICAgICAgICAgICAgICBsZWZ0LCBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX05VTV9BRERfVFlQRSwgewogICAgICAgICAgICAgICdjb25zdGFudCc6IGxlZnQsCiAgICAgICAgICAgICAgJ3R5cGUnOiBsZWZ0VmFsdWUuZ2V0VHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cykKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgZW52aXJvbm1lbnQKICAgICAgICAgICAgICAucmVwb3J0RXJyb3IodGhpcywgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9BRERfVFlQRVMsIHsKICAgICAgICAgICAgJ2xlZnRDb25zdGFudCc6IGxlZnQsCiAgICAgICAgICAgICdsZWZ0VHlwZSc6IGxlZnRWYWx1ZS5nZXRUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzKSwKICAgICAgICAgICAgJ3JpZ2h0Q29uc3RhbnQnOiByaWdodCwKICAgICAgICAgICAgJ3JpZ2h0VHlwZSc6IHJpZ2h0VmFsdWUuZ2V0VHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cykKICAgICAgICAgIH0pOwogICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuU1VCOgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5NVUw6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkRJVjoKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuSURJVjoKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTU9EOgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5HVEVROgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5HVDoKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTFRFUToKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTFQ6CiAgICAgICAgaWYgKCFsZWZ0VmFsdWUuaXNOdW0pIHsKICAgICAgICAgIGVudmlyb25tZW50CiAgICAgICAgICAgICAgLnJlcG9ydEVycm9yKGxlZnQsIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQklOQVJZX05VTV9UWVBFLCB7CiAgICAgICAgICAgICdjb25zdGFudCc6IGxlZnQsCiAgICAgICAgICAgICd0eXBlJzogbGVmdFZhbHVlLmdldFR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMpLAogICAgICAgICAgICAnb3BlcmF0b3InOiBvcGVyYXRvcgogICAgICAgICAgfSk7CiAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICghcmlnaHRWYWx1ZS5pc051bSkgewogICAgICAgICAgZW52aXJvbm1lbnQucmVwb3J0RXJyb3IoCiAgICAgICAgICAgICAgcmlnaHQsIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQklOQVJZX05VTV9UWVBFLCB7CiAgICAgICAgICAgICdjb25zdGFudCc6IHJpZ2h0LAogICAgICAgICAgICAndHlwZSc6IHJpZ2h0VmFsdWUuZ2V0VHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cyksCiAgICAgICAgICAgICdvcGVyYXRvcic6IG9wZXJhdG9yCiAgICAgICAgICB9KTsKICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzVmFsaWQgJiYKICAgICAgICAgICAgKG9wZXJhdG9yLmtpbmQgPT0gQmluYXJ5T3BlcmF0b3JLaW5kLklESVYgfHwKICAgICAgICAgICAgICAgIG9wZXJhdG9yLmtpbmQgPT0gQmluYXJ5T3BlcmF0b3JLaW5kLk1PRCkpIHsKICAgICAgICAgIGlmIChyaWdodFZhbHVlLmlzWmVybykgewogICAgICAgICAgICBlbnZpcm9ubWVudC5yZXBvcnRFcnJvcihyaWdodCwgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9ESVYsCiAgICAgICAgICAgICAgICB7J2xlZnQnOiBsZWZ0LCAncmlnaHQnOiByaWdodCwgJ29wZXJhdG9yJzogb3BlcmF0b3J9KTsKICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuU0hMOgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5TSFI6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLlNIUlU6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkFORDoKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuT1I6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLlhPUjoKICAgICAgICBpZiAoIWxlZnRWYWx1ZS5pc0ludCkgewogICAgICAgICAgZW52aXJvbm1lbnQKICAgICAgICAgICAgICAucmVwb3J0RXJyb3IobGVmdCwgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9CSU5BUllfSU5UX1RZUEUsIHsKICAgICAgICAgICAgJ2NvbnN0YW50JzogbGVmdCwKICAgICAgICAgICAgJ3R5cGUnOiBsZWZ0VmFsdWUuZ2V0VHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cyksCiAgICAgICAgICAgICdvcGVyYXRvcic6IG9wZXJhdG9yCiAgICAgICAgICB9KTsKICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKCFyaWdodFZhbHVlLmlzSW50KSB7CiAgICAgICAgICBlbnZpcm9ubWVudC5yZXBvcnRFcnJvcigKICAgICAgICAgICAgICByaWdodCwgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9CSU5BUllfSU5UX1RZUEUsIHsKICAgICAgICAgICAgJ2NvbnN0YW50JzogcmlnaHQsCiAgICAgICAgICAgICd0eXBlJzogcmlnaHRWYWx1ZS5nZXRUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzKSwKICAgICAgICAgICAgJ29wZXJhdG9yJzogb3BlcmF0b3IKICAgICAgICAgIH0pOwogICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoaXNWYWxpZCAmJgogICAgICAgICAgICAob3BlcmF0b3Iua2luZCA9PSBCaW5hcnlPcGVyYXRvcktpbmQuU0hMIHx8CiAgICAgICAgICAgICAgICBvcGVyYXRvci5raW5kID09IEJpbmFyeU9wZXJhdG9yS2luZC5TSFIgfHwKICAgICAgICAgICAgICAgIG9wZXJhdG9yLmtpbmQgPT0gQmluYXJ5T3BlcmF0b3JLaW5kLlNIUlUpKSB7CiAgICAgICAgICBJbnRDb25zdGFudFZhbHVlIHNoaWZ0ID0gcmlnaHRWYWx1ZTsKICAgICAgICAgIGlmIChzaGlmdC5pbnRWYWx1ZSA8IEJpZ0ludC56ZXJvKSB7CiAgICAgICAgICAgIGVudmlyb25tZW50LnJlcG9ydEVycm9yKHJpZ2h0LCBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX1NISUZULAogICAgICAgICAgICAgICAgeydsZWZ0JzogbGVmdCwgJ3JpZ2h0JzogcmlnaHQsICdvcGVyYXRvcic6IG9wZXJhdG9yfSk7CiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkxPR0lDQUxfQU5EOgogICAgICAgIGlmICghbGVmdFZhbHVlLmlzQm9vbCkgewogICAgICAgICAgZW52aXJvbm1lbnQKICAgICAgICAgICAgICAucmVwb3J0RXJyb3IobGVmdCwgTWVzc2FnZUtpbmQuSU5WQUxJRF9MT0dJQ0FMX0FORF9PUEVSQU5EX1RZUEUsIHsKICAgICAgICAgICAgJ2NvbnN0YW50JzogbGVmdCwKICAgICAgICAgICAgJ3R5cGUnOiBsZWZ0VmFsdWUuZ2V0VHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cyksCiAgICAgICAgICAgICdvcGVyYXRvcic6IG9wZXJhdG9yCiAgICAgICAgICB9KTsKICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKCFyaWdodFZhbHVlLmlzQm9vbCkgewogICAgICAgICAgZW52aXJvbm1lbnQucmVwb3J0RXJyb3IoCiAgICAgICAgICAgICAgcmlnaHQsIE1lc3NhZ2VLaW5kLklOVkFMSURfTE9HSUNBTF9BTkRfT1BFUkFORF9UWVBFLCB7CiAgICAgICAgICAgICdjb25zdGFudCc6IHJpZ2h0LAogICAgICAgICAgICAndHlwZSc6IHJpZ2h0VmFsdWUuZ2V0VHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cyksCiAgICAgICAgICAgICdvcGVyYXRvcic6IG9wZXJhdG9yCiAgICAgICAgICB9KTsKICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkxPR0lDQUxfT1I6CiAgICAgICAgaWYgKCFsZWZ0VmFsdWUuaXNCb29sKSB7CiAgICAgICAgICBlbnZpcm9ubWVudAogICAgICAgICAgICAgIC5yZXBvcnRFcnJvcihsZWZ0LCBNZXNzYWdlS2luZC5JTlZBTElEX0xPR0lDQUxfT1JfT1BFUkFORF9UWVBFLCB7CiAgICAgICAgICAgICdjb25zdGFudCc6IGxlZnQsCiAgICAgICAgICAgICd0eXBlJzogbGVmdFZhbHVlLmdldFR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMpLAogICAgICAgICAgICAnb3BlcmF0b3InOiBvcGVyYXRvcgogICAgICAgICAgfSk7CiAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICghcmlnaHRWYWx1ZS5pc0Jvb2wpIHsKICAgICAgICAgIGVudmlyb25tZW50CiAgICAgICAgICAgICAgLnJlcG9ydEVycm9yKHJpZ2h0LCBNZXNzYWdlS2luZC5JTlZBTElEX0xPR0lDQUxfT1JfT1BFUkFORF9UWVBFLCB7CiAgICAgICAgICAgICdjb25zdGFudCc6IHJpZ2h0LAogICAgICAgICAgICAndHlwZSc6IHJpZ2h0VmFsdWUuZ2V0VHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cyksCiAgICAgICAgICAgICdvcGVyYXRvcic6IG9wZXJhdG9yCiAgICAgICAgICB9KTsKICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLklOREVYOgogICAgICAgIGVudmlyb25tZW50LnJlcG9ydEVycm9yKHRoaXMsIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfSU5ERVgsIHt9KTsKICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLklGX05VTEw6CiAgICAgICAgLy8gVmFsaWQgc2luY2UgW2xlZnRWYWx1ZV0gYW5kIFtyaWdodFZhbHVlXSBhcmUgY29uc3RhbnRzLgogICAgICAgIGJyZWFrOwogICAgfQogICAgaWYgKGlzVmFsaWQpIHsKICAgICAgc3dpdGNoIChvcGVyYXRvci5raW5kKSB7CiAgICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTk9UX0VROgogICAgICAgICAgQm9vbENvbnN0YW50VmFsdWUgZXF1YWxzID0KICAgICAgICAgICAgICBjb25zdGFudF9zeXN0ZW0uZXF1YWwuZm9sZChsZWZ0VmFsdWUsIHJpZ2h0VmFsdWUpOwogICAgICAgICAgcmV0dXJuIGVxdWFscy5uZWdhdGUoKTsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IGNvbnN0YW50X3N5c3RlbQogICAgICAgICAgICAgIC5sb29rdXBCaW5hcnkob3BlcmF0b3IpCiAgICAgICAgICAgICAgLmZvbGQobGVmdFZhbHVlLCByaWdodFZhbHVlKTsKICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGVudmlyb25tZW50CiAgICAgICAgICAgICAgLnJlcG9ydEVycm9yKHRoaXMsIE1lc3NhZ2VLaW5kLk5PVF9BX0NPTVBJTEVfVElNRV9DT05TVEFOVCwge30pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiBhcHBseShOb3JtYWxpemVkQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIG5ldyBCaW5hcnlDb25zdGFudEV4cHJlc3Npb24oCiAgICAgICAgbGVmdC5hcHBseShhcmd1bWVudHMpLCBvcGVyYXRvciwgcmlnaHQuYXBwbHkoYXJndW1lbnRzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICAvLyBpZ25vcmU6IE1JU1NJTkdfUkVUVVJOCiAgSW50ZXJmYWNlVHlwZSBnZXRLbm93blR5cGUoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpIHsKICAgIERhcnRUeXBlIGtub3duTGVmdFR5cGUgPSBsZWZ0LmdldEtub3duVHlwZShjb21tb25FbGVtZW50cyk7CiAgICBEYXJ0VHlwZSBrbm93blJpZ2h0VHlwZSA9IHJpZ2h0LmdldEtub3duVHlwZShjb21tb25FbGVtZW50cyk7CiAgICBzd2l0Y2ggKG9wZXJhdG9yLmtpbmQpIHsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuRVE6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLk5PVF9FUToKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTE9HSUNBTF9BTkQ6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkxPR0lDQUxfT1I6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkdUOgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5MVDoKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuR1RFUToKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTFRFUToKICAgICAgICByZXR1cm4gY29tbW9uRWxlbWVudHMuYm9vbFR5cGU7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkFERDoKICAgICAgICBpZiAoa25vd25MZWZ0VHlwZSA9PSBjb21tb25FbGVtZW50cy5zdHJpbmdUeXBlKSB7CiAgICAgICAgICBhc3NlcnQoa25vd25SaWdodFR5cGUgPT0gY29tbW9uRWxlbWVudHMuc3RyaW5nVHlwZSk7CiAgICAgICAgICByZXR1cm4gY29tbW9uRWxlbWVudHMuc3RyaW5nVHlwZTsKICAgICAgICB9IGVsc2UgaWYgKGtub3duTGVmdFR5cGUgPT0gY29tbW9uRWxlbWVudHMuaW50VHlwZSAmJgogICAgICAgICAgICBrbm93blJpZ2h0VHlwZSA9PSBjb21tb25FbGVtZW50cy5pbnRUeXBlKSB7CiAgICAgICAgICByZXR1cm4gY29tbW9uRWxlbWVudHMuaW50VHlwZTsKICAgICAgICB9CiAgICAgICAgYXNzZXJ0KGtub3duTGVmdFR5cGUgPT0gY29tbW9uRWxlbWVudHMuZG91YmxlVHlwZSB8fAogICAgICAgICAgICBrbm93blJpZ2h0VHlwZSA9PSBjb21tb25FbGVtZW50cy5kb3VibGVUeXBlKTsKICAgICAgICByZXR1cm4gY29tbW9uRWxlbWVudHMuZG91YmxlVHlwZTsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuU1VCOgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5NVUw6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLk1PRDoKICAgICAgICBpZiAoa25vd25MZWZ0VHlwZSA9PSBjb21tb25FbGVtZW50cy5pbnRUeXBlICYmCiAgICAgICAgICAgIGtub3duUmlnaHRUeXBlID09IGNvbW1vbkVsZW1lbnRzLmludFR5cGUpIHsKICAgICAgICAgIHJldHVybiBjb21tb25FbGVtZW50cy5pbnRUeXBlOwogICAgICAgIH0KICAgICAgICBhc3NlcnQoa25vd25MZWZ0VHlwZSA9PSBjb21tb25FbGVtZW50cy5kb3VibGVUeXBlIHx8CiAgICAgICAgICAgIGtub3duUmlnaHRUeXBlID09IGNvbW1vbkVsZW1lbnRzLmRvdWJsZVR5cGUpOwogICAgICAgIHJldHVybiBjb21tb25FbGVtZW50cy5kb3VibGVUeXBlOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5ESVY6CiAgICAgICAgcmV0dXJuIGNvbW1vbkVsZW1lbnRzLmRvdWJsZVR5cGU7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLklESVY6CiAgICAgICAgcmV0dXJuIGNvbW1vbkVsZW1lbnRzLmludFR5cGU7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkFORDoKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuT1I6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLlhPUjoKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuU0hMOgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5TSFI6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLlNIUlU6CiAgICAgICAgcmV0dXJuIGNvbW1vbkVsZW1lbnRzLmludFR5cGU7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLklGX05VTEw6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLklOREVYOgogICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgICAnVW5leHBlY3RlZCBjb25zdGFudCBiaW5hcnkgb3BlcmF0b3I6ICRvcGVyYXRvcicpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBwcmVjZWRlbmNlID0+IFBSRUNFREVOQ0VfTUFQW29wZXJhdG9yLmtpbmRdOwoKICBAb3ZlcnJpZGUKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpIHsKICAgIHJldHVybiAxMyAqIG9wZXJhdG9yLmhhc2hDb2RlICsgMTcgKiBsZWZ0Lmhhc2hDb2RlICsgMTkgKiByaWdodC5oYXNoQ29kZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhCaW5hcnlDb25zdGFudEV4cHJlc3Npb24gb3RoZXIpIHsKICAgIHJldHVybiBvcGVyYXRvciA9PSBvdGhlci5vcGVyYXRvciAmJgogICAgICAgIGxlZnQgPT0gb3RoZXIubGVmdCAmJgogICAgICAgIHJpZ2h0ID09IG90aGVyLnJpZ2h0OwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNQb3RlbnRpYWwgewogICAgcmV0dXJuIGxlZnQuaXNQb3RlbnRpYWwgfHwgcmlnaHQuaXNQb3RlbnRpYWw7CiAgfQoKICBzdGF0aWMgY29uc3QgTWFwPEJpbmFyeU9wZXJhdG9yS2luZCwgaW50PiBQUkVDRURFTkNFX01BUCA9IGNvbnN0IHsKICAgIEJpbmFyeU9wZXJhdG9yS2luZC5FUTogNiwKICAgIEJpbmFyeU9wZXJhdG9yS2luZC5OT1RfRVE6IDYsCiAgICBCaW5hcnlPcGVyYXRvcktpbmQuTE9HSUNBTF9BTkQ6IDUsCiAgICBCaW5hcnlPcGVyYXRvcktpbmQuTE9HSUNBTF9PUjogNCwKICAgIEJpbmFyeU9wZXJhdG9yS2luZC5YT1I6IDksCiAgICBCaW5hcnlPcGVyYXRvcktpbmQuQU5EOiAxMCwKICAgIEJpbmFyeU9wZXJhdG9yS2luZC5PUjogOCwKICAgIEJpbmFyeU9wZXJhdG9yS2luZC5TSEw6IDExLAogICAgQmluYXJ5T3BlcmF0b3JLaW5kLlNIUjogMTEsCiAgICBCaW5hcnlPcGVyYXRvcktpbmQuU0hSVTogMTEsCiAgICBCaW5hcnlPcGVyYXRvcktpbmQuQUREOiAxMiwKICAgIEJpbmFyeU9wZXJhdG9yS2luZC5TVUI6IDEyLAogICAgQmluYXJ5T3BlcmF0b3JLaW5kLk1VTDogMTMsCiAgICBCaW5hcnlPcGVyYXRvcktpbmQuRElWOiAxMywKICAgIEJpbmFyeU9wZXJhdG9yS2luZC5JRElWOiAxMywKICAgIEJpbmFyeU9wZXJhdG9yS2luZC5HVDogNywKICAgIEJpbmFyeU9wZXJhdG9yS2luZC5MVDogNywKICAgIEJpbmFyeU9wZXJhdG9yS2luZC5HVEVROiA3LAogICAgQmluYXJ5T3BlcmF0b3JLaW5kLkxURVE6IDcsCiAgICBCaW5hcnlPcGVyYXRvcktpbmQuTU9EOiAxMywKICAgIEJpbmFyeU9wZXJhdG9yS2luZC5JRl9OVUxMOiAzLAogICAgQmluYXJ5T3BlcmF0b3JLaW5kLklOREVYOiAzLAogIH07Cn0KCi8vLyBBIGNvbnN0YW50IGlkZW50aWNhbCBpbnZvY2F0aW9uIGxpa2UgYGlkZW50aWNhbChhLCBiKWAuCmNsYXNzIElkZW50aWNhbENvbnN0YW50RXhwcmVzc2lvbiBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgZmluYWwgQ29uc3RhbnRFeHByZXNzaW9uIGxlZnQ7CiAgZmluYWwgQ29uc3RhbnRFeHByZXNzaW9uIHJpZ2h0OwoKICBJZGVudGljYWxDb25zdGFudEV4cHJlc3Npb24odGhpcy5sZWZ0LCB0aGlzLnJpZ2h0KTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCA9PiBDb25zdGFudEV4cHJlc3Npb25LaW5kLklERU5USUNBTDsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdElkZW50aWNhbCh0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ0lkZW50aWNhbChsZWZ0PScpOwogICAgbGVmdC5fY3JlYXRlU3RydWN0dXJlZFRleHQoc2IpOwogICAgc2Iud3JpdGUoJyxyaWdodD0nKTsKICAgIHJpZ2h0Ll9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChzYik7CiAgICBzYi53cml0ZSgnKScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIENvbnN0YW50VmFsdWUgbGVmdFZhbHVlID0gbGVmdC5ldmFsdWF0ZShlbnZpcm9ubWVudCk7CiAgICBDb25zdGFudFZhbHVlIHJpZ2h0VmFsdWUgPSByaWdodC5ldmFsdWF0ZShlbnZpcm9ubWVudCk7CiAgICBpZiAobGVmdFZhbHVlLmlzQ29uc3RhbnQgJiYgcmlnaHRWYWx1ZS5pc0NvbnN0YW50KSB7CiAgICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uaWRlbnRpdHkuZm9sZChsZWZ0VmFsdWUsIHJpZ2h0VmFsdWUpOwogICAgfQogICAgcmV0dXJuIG5ldyBOb25Db25zdGFudFZhbHVlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gYXBwbHkoTm9ybWFsaXplZEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBuZXcgSWRlbnRpY2FsQ29uc3RhbnRFeHByZXNzaW9uKAogICAgICAgIGxlZnQuYXBwbHkoYXJndW1lbnRzKSwgcmlnaHQuYXBwbHkoYXJndW1lbnRzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IHByZWNlZGVuY2UgPT4gMTU7CgogIEBvdmVycmlkZQogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgewogICAgcmV0dXJuIDE3ICogbGVmdC5oYXNoQ29kZSArIDE5ICogcmlnaHQuaGFzaENvZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoSWRlbnRpY2FsQ29uc3RhbnRFeHByZXNzaW9uIG90aGVyKSB7CiAgICByZXR1cm4gbGVmdCA9PSBvdGhlci5sZWZ0ICYmIHJpZ2h0ID09IG90aGVyLnJpZ2h0OwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRLbm93blR5cGUoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpID0+CiAgICAgIGNvbW1vbkVsZW1lbnRzLmJvb2xUeXBlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1BvdGVudGlhbCB7CiAgICByZXR1cm4gbGVmdC5pc1BvdGVudGlhbCB8fCByaWdodC5pc1BvdGVudGlhbDsKICB9Cn0KCi8vLyBBIHVuYXJ5IGNvbnN0YW50IGV4cHJlc3Npb24gbGlrZSBgLWFgLgpjbGFzcyBVbmFyeUNvbnN0YW50RXhwcmVzc2lvbiBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgZmluYWwgVW5hcnlPcGVyYXRvciBvcGVyYXRvcjsKICBmaW5hbCBDb25zdGFudEV4cHJlc3Npb24gZXhwcmVzc2lvbjsKCiAgVW5hcnlDb25zdGFudEV4cHJlc3Npb24odGhpcy5vcGVyYXRvciwgdGhpcy5leHByZXNzaW9uKSB7CiAgICBhc3NlcnQoUFJFQ0VERU5DRV9NQVBbb3BlcmF0b3Iua2luZF0gIT0gbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kID0+IENvbnN0YW50RXhwcmVzc2lvbktpbmQuVU5BUlk7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRVbmFyeSh0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ1VuYXJ5KG9wPSRvcGVyYXRvcixleHByZXNzaW9uPScpOwogICAgZXhwcmVzc2lvbi5fY3JlYXRlU3RydWN0dXJlZFRleHQoc2IpOwogICAgc2Iud3JpdGUoJyknKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICBDb25zdGFudFZhbHVlIGV4cHJlc3Npb25WYWx1ZSA9IGV4cHJlc3Npb24uZXZhbHVhdGUoZW52aXJvbm1lbnQpOwogICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKICAgIHN3aXRjaCAob3BlcmF0b3Iua2luZCkgewogICAgICBjYXNlIFVuYXJ5T3BlcmF0b3JLaW5kLk5PVDoKICAgICAgICBpZiAoIWV4cHJlc3Npb25WYWx1ZS5pc0Jvb2wpIHsKICAgICAgICAgIGVudmlyb25tZW50CiAgICAgICAgICAgICAgLnJlcG9ydEVycm9yKGV4cHJlc3Npb24sIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfTk9UX1RZUEUsIHsKICAgICAgICAgICAgJ2NvbnN0YW50JzogZXhwcmVzc2lvbiwKICAgICAgICAgICAgJ3R5cGUnOiBleHByZXNzaW9uVmFsdWUuZ2V0VHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cyksCiAgICAgICAgICAgICdvcGVyYXRvcic6IG9wZXJhdG9yCiAgICAgICAgICB9KTsKICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVW5hcnlPcGVyYXRvcktpbmQuTkVHQVRFOgogICAgICAgIGlmICghZXhwcmVzc2lvblZhbHVlLmlzTnVtKSB7CiAgICAgICAgICBlbnZpcm9ubWVudC5yZXBvcnRFcnJvcigKICAgICAgICAgICAgICBleHByZXNzaW9uLCBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX05FR0FURV9UWVBFLCB7CiAgICAgICAgICAgICdjb25zdGFudCc6IGV4cHJlc3Npb24sCiAgICAgICAgICAgICd0eXBlJzogZXhwcmVzc2lvblZhbHVlLmdldFR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMpLAogICAgICAgICAgICAnb3BlcmF0b3InOiBvcGVyYXRvcgogICAgICAgICAgfSk7CiAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFVuYXJ5T3BlcmF0b3JLaW5kLkNPTVBMRU1FTlQ6CiAgICAgICAgaWYgKCFleHByZXNzaW9uVmFsdWUuaXNJbnQpIHsKICAgICAgICAgIGVudmlyb25tZW50LnJlcG9ydEVycm9yKAogICAgICAgICAgICAgIGV4cHJlc3Npb24sIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQ09NUExFTUVOVF9UWVBFLCB7CiAgICAgICAgICAgICdjb25zdGFudCc6IGV4cHJlc3Npb24sCiAgICAgICAgICAgICd0eXBlJzogZXhwcmVzc2lvblZhbHVlLmdldFR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMpLAogICAgICAgICAgICAnb3BlcmF0b3InOiBvcGVyYXRvcgogICAgICAgICAgfSk7CiAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgfQogICAgaWYgKGlzVmFsaWQpIHsKICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9CiAgICAgICAgICBjb25zdGFudF9zeXN0ZW0ubG9va3VwVW5hcnkob3BlcmF0b3IpLmZvbGQoZXhwcmVzc2lvblZhbHVlKTsKICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgTm9uQ29uc3RhbnRWYWx1ZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIGFwcGx5KE5vcm1hbGl6ZWRBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IFVuYXJ5Q29uc3RhbnRFeHByZXNzaW9uKG9wZXJhdG9yLCBleHByZXNzaW9uLmFwcGx5KGFyZ3VtZW50cykpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBwcmVjZWRlbmNlID0+IFBSRUNFREVOQ0VfTUFQW29wZXJhdG9yLmtpbmRdOwoKICBAb3ZlcnJpZGUKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpIHsKICAgIHJldHVybiAxMyAqIG9wZXJhdG9yLmhhc2hDb2RlICsgMTcgKiBleHByZXNzaW9uLmhhc2hDb2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKFVuYXJ5Q29uc3RhbnRFeHByZXNzaW9uIG90aGVyKSB7CiAgICByZXR1cm4gb3BlcmF0b3IgPT0gb3RoZXIub3BlcmF0b3IgJiYgZXhwcmVzc2lvbiA9PSBvdGhlci5leHByZXNzaW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0S25vd25UeXBlKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSB7CiAgICByZXR1cm4gZXhwcmVzc2lvbi5nZXRLbm93blR5cGUoY29tbW9uRWxlbWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNQb3RlbnRpYWwgewogICAgcmV0dXJuIGV4cHJlc3Npb24uaXNQb3RlbnRpYWw7CiAgfQoKICBzdGF0aWMgY29uc3QgTWFwPFVuYXJ5T3BlcmF0b3JLaW5kLCBpbnQ+IFBSRUNFREVOQ0VfTUFQID0gY29uc3QgewogICAgVW5hcnlPcGVyYXRvcktpbmQuTk9UOiAxNCwKICAgIFVuYXJ5T3BlcmF0b3JLaW5kLkNPTVBMRU1FTlQ6IDE0LAogICAgVW5hcnlPcGVyYXRvcktpbmQuTkVHQVRFOiAxNCwKICB9Owp9CgovLy8gQSBzdHJpbmcgbGVuZ3RoIGNvbnN0YW50IGV4cHJlc3Npb24gbGlrZSBgYS5sZW5ndGhgLgpjbGFzcyBTdHJpbmdMZW5ndGhDb25zdGFudEV4cHJlc3Npb24gZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb24gewogIGZpbmFsIENvbnN0YW50RXhwcmVzc2lvbiBleHByZXNzaW9uOwoKICBTdHJpbmdMZW5ndGhDb25zdGFudEV4cHJlc3Npb24odGhpcy5leHByZXNzaW9uKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCA9PiBDb25zdGFudEV4cHJlc3Npb25LaW5kLlNUUklOR19MRU5HVEg7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRTdHJpbmdMZW5ndGgodGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdTdHJpbmdMZW5ndGgoZXhwcmVzc2lvbj0nKTsKICAgIGV4cHJlc3Npb24uX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KHNiKTsKICAgIHNiLndyaXRlKCcpJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IGV4cHJlc3Npb24uZXZhbHVhdGUoZW52aXJvbm1lbnQpOwogICAgaWYgKCF2YWx1ZS5pc1N0cmluZykgewogICAgICBlbnZpcm9ubWVudC5yZXBvcnRFcnJvcigKICAgICAgICAgIGV4cHJlc3Npb24sIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfU1RSSU5HX0xFTkdUSF9UWVBFLCB7CiAgICAgICAgJ2NvbnN0YW50JzogZXhwcmVzc2lvbiwKICAgICAgICAndHlwZSc6IHZhbHVlLmdldFR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMpCiAgICAgIH0pOwogICAgICByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICAgIH0gZWxzZSB7CiAgICAgIFN0cmluZ0NvbnN0YW50VmFsdWUgc3RyaW5nVmFsdWUgPSB2YWx1ZTsKICAgICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbQogICAgICAgICAgLmNyZWF0ZUludChuZXcgQmlnSW50LmZyb20oc3RyaW5nVmFsdWUuc3RyaW5nVmFsdWUubGVuZ3RoKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gYXBwbHkoTm9ybWFsaXplZEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBuZXcgU3RyaW5nTGVuZ3RoQ29uc3RhbnRFeHByZXNzaW9uKGV4cHJlc3Npb24uYXBwbHkoYXJndW1lbnRzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IHByZWNlZGVuY2UgPT4gMTU7CgogIEBvdmVycmlkZQogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgewogICAgcmV0dXJuIDIzICogZXhwcmVzc2lvbi5oYXNoQ29kZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhTdHJpbmdMZW5ndGhDb25zdGFudEV4cHJlc3Npb24gb3RoZXIpIHsKICAgIHJldHVybiBleHByZXNzaW9uID09IG90aGVyLmV4cHJlc3Npb247CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldEtub3duVHlwZShDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgPT4KICAgICAgY29tbW9uRWxlbWVudHMuaW50VHlwZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNQb3RlbnRpYWwgewogICAgcmV0dXJuIGV4cHJlc3Npb24uaXNQb3RlbnRpYWw7CiAgfQp9CgovLy8gQSBjb25zdGFudCBjb25kaXRpb25hbCBleHByZXNzaW9uIGxpa2UgYGEgPyBiIDogY2AuCmNsYXNzIENvbmRpdGlvbmFsQ29uc3RhbnRFeHByZXNzaW9uIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uIHsKICBmaW5hbCBDb25zdGFudEV4cHJlc3Npb24gY29uZGl0aW9uOwogIGZpbmFsIENvbnN0YW50RXhwcmVzc2lvbiB0cnVlRXhwOwogIGZpbmFsIENvbnN0YW50RXhwcmVzc2lvbiBmYWxzZUV4cDsKCiAgQ29uZGl0aW9uYWxDb25zdGFudEV4cHJlc3Npb24odGhpcy5jb25kaXRpb24sIHRoaXMudHJ1ZUV4cCwgdGhpcy5mYWxzZUV4cCk7CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5DT05ESVRJT05BTDsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdENvbmRpdGlvbmFsKHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnQ29uZGl0aW9uYWwoY29uZGl0aW9uPScpOwogICAgY29uZGl0aW9uLl9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChzYik7CiAgICBzYi53cml0ZSgnLHRydWU9Jyk7CiAgICB0cnVlRXhwLl9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChzYik7CiAgICBzYi53cml0ZSgnLGZhbHNlPScpOwogICAgZmFsc2VFeHAuX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KHNiKTsKICAgIHNiLndyaXRlKCcpJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gYXBwbHkoTm9ybWFsaXplZEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBuZXcgQ29uZGl0aW9uYWxDb25zdGFudEV4cHJlc3Npb24oY29uZGl0aW9uLmFwcGx5KGFyZ3VtZW50cyksCiAgICAgICAgdHJ1ZUV4cC5hcHBseShhcmd1bWVudHMpLCBmYWxzZUV4cC5hcHBseShhcmd1bWVudHMpKTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgcHJlY2VkZW5jZSA9PiAzOwoKICBAb3ZlcnJpZGUKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpIHsKICAgIHJldHVybiAxMyAqIGNvbmRpdGlvbi5oYXNoQ29kZSArCiAgICAgICAgMTcgKiB0cnVlRXhwLmhhc2hDb2RlICsKICAgICAgICAxOSAqIGZhbHNlRXhwLmhhc2hDb2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKENvbmRpdGlvbmFsQ29uc3RhbnRFeHByZXNzaW9uIG90aGVyKSB7CiAgICByZXR1cm4gY29uZGl0aW9uID09IG90aGVyLmNvbmRpdGlvbiAmJgogICAgICAgIHRydWVFeHAgPT0gb3RoZXIudHJ1ZUV4cCAmJgogICAgICAgIGZhbHNlRXhwID09IG90aGVyLmZhbHNlRXhwOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIENvbnN0YW50VmFsdWUgY29uZGl0aW9uVmFsdWUgPSBjb25kaXRpb24uZXZhbHVhdGUoZW52aXJvbm1lbnQpOwogICAgQ29uc3RhbnRWYWx1ZSB0cnVlVmFsdWUgPSB0cnVlRXhwLmV2YWx1YXRlKGVudmlyb25tZW50KTsKICAgIENvbnN0YW50VmFsdWUgZmFsc2VWYWx1ZSA9IGZhbHNlRXhwLmV2YWx1YXRlKGVudmlyb25tZW50KTsKICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7CiAgICBpZiAoIWNvbmRpdGlvblZhbHVlLmlzQm9vbCkgewogICAgICBlbnZpcm9ubWVudC5yZXBvcnRFcnJvcigKICAgICAgICAgIGNvbmRpdGlvbiwgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9DT05ESVRJT05BTF9UWVBFLCB7CiAgICAgICAgJ2NvbnN0YW50JzogY29uZGl0aW9uLAogICAgICAgICd0eXBlJzogY29uZGl0aW9uVmFsdWUuZ2V0VHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cykKICAgICAgfSk7CiAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgIH0KICAgIGlmIChpc1ZhbGlkKSB7CiAgICAgIGlmIChjb25kaXRpb25WYWx1ZS5pc1RydWUpIHsKICAgICAgICByZXR1cm4gdHJ1ZVZhbHVlOwogICAgICB9IGVsc2UgaWYgKGNvbmRpdGlvblZhbHVlLmlzRmFsc2UpIHsKICAgICAgICByZXR1cm4gZmFsc2VWYWx1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBOb25Db25zdGFudFZhbHVlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRLbm93blR5cGUoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpIHsKICAgIERhcnRUeXBlIHRydWVUeXBlID0gdHJ1ZUV4cC5nZXRLbm93blR5cGUoY29tbW9uRWxlbWVudHMpOwogICAgRGFydFR5cGUgZmFsc2VUeXBlID0gZmFsc2VFeHAuZ2V0S25vd25UeXBlKGNvbW1vbkVsZW1lbnRzKTsKICAgIGlmICh0cnVlVHlwZSA9PSBmYWxzZVR5cGUpIHsKICAgICAgcmV0dXJuIHRydWVUeXBlOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1BvdGVudGlhbCB7CiAgICByZXR1cm4gY29uZGl0aW9uLmlzUG90ZW50aWFsIHx8IHRydWVFeHAuaXNQb3RlbnRpYWwgfHwgZmFsc2VFeHAuaXNQb3RlbnRpYWw7CiAgfQp9CgovLy8gQSByZWZlcmVuY2UgdG8gYSBwb3NpdGlvbiBwYXJhbWV0ZXIuCmNsYXNzIFBvc2l0aW9uYWxBcmd1bWVudFJlZmVyZW5jZSBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgZmluYWwgaW50IGluZGV4OwoKICBQb3NpdGlvbmFsQXJndW1lbnRSZWZlcmVuY2UodGhpcy5pbmRleCk7CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgewogICAgcmV0dXJuIENvbnN0YW50RXhwcmVzc2lvbktpbmQuUE9TSVRJT05BTF9SRUZFUkVOQ0U7CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0UG9zaXRpb25hbCh0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ1Bvc2l0aW9uYWwoaW5kZXg9JGluZGV4KScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIGFwcGx5KE5vcm1hbGl6ZWRBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gYXJndW1lbnRzLmdldFBvc2l0aW9uYWxBcmd1bWVudChpbmRleCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpID0+IDEzICogaW5kZXguaGFzaENvZGU7CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhQb3NpdGlvbmFsQXJndW1lbnRSZWZlcmVuY2Ugb3RoZXIpID0+IGluZGV4ID09IG90aGVyLmluZGV4OwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgcmV0dXJuIG5ldyBOb25Db25zdGFudFZhbHVlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1BvdGVudGlhbCA9PiB0cnVlOwp9CgovLy8gQSByZWZlcmVuY2UgdG8gYSBuYW1lZCBwYXJhbWV0ZXIuCmNsYXNzIE5hbWVkQXJndW1lbnRSZWZlcmVuY2UgZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb24gewogIGZpbmFsIFN0cmluZyBuYW1lOwoKICBOYW1lZEFyZ3VtZW50UmVmZXJlbmNlKHRoaXMubmFtZSk7CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgewogICAgcmV0dXJuIENvbnN0YW50RXhwcmVzc2lvbktpbmQuTkFNRURfUkVGRVJFTkNFOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdE5hbWVkKHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnTmFtZWQobmFtZT0kbmFtZSknKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiBhcHBseShOb3JtYWxpemVkQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIGFyZ3VtZW50cy5nZXROYW1lZEFyZ3VtZW50KG5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKSA9PiAxMyAqIG5hbWUuaGFzaENvZGU7CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhOYW1lZEFyZ3VtZW50UmVmZXJlbmNlIG90aGVyKSA9PiBuYW1lID09IG90aGVyLm5hbWU7CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUG90ZW50aWFsID0+IHRydWU7Cn0KCmFic3RyYWN0IGNsYXNzIEZyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbiBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgZmluYWwgQ29uc3RhbnRFeHByZXNzaW9uIG5hbWU7CiAgZmluYWwgQ29uc3RhbnRFeHByZXNzaW9uIGRlZmF1bHRWYWx1ZTsKCiAgRnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9uKHRoaXMubmFtZSwgdGhpcy5kZWZhdWx0VmFsdWUpOwoKICBib29sIF9jaGVja05hbWVGcm9tRW52aXJvbm1lbnQoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50LAogICAgICBDb25zdGFudEV4cHJlc3Npb24gbmFtZSwgQ29uc3RhbnRWYWx1ZSBuYW1lVmFsdWUpIHsKICAgIGlmICghbmFtZVZhbHVlLmlzU3RyaW5nKSB7CiAgICAgIGVudmlyb25tZW50LnJlcG9ydEVycm9yKAogICAgICAgICAgbmFtZSwgTWVzc2FnZUtpbmQuSU5WQUxJRF9GUk9NX0VOVklST05NRU5UX05BTUVfVFlQRSwgewogICAgICAgICdjb25zdGFudCc6IG5hbWUsCiAgICAgICAgJ3R5cGUnOiBuYW1lVmFsdWUuZ2V0VHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cykKICAgICAgfSk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKSB7CiAgICByZXR1cm4gMTMgKiBuYW1lLmhhc2hDb2RlICsgMTcgKiBkZWZhdWx0VmFsdWUuaGFzaENvZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoRnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9uIG90aGVyKSB7CiAgICByZXR1cm4gbmFtZSA9PSBvdGhlci5uYW1lICYmIGRlZmF1bHRWYWx1ZSA9PSBvdGhlci5kZWZhdWx0VmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0ltcGxpY2l0IHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUG90ZW50aWFsIHsKICAgIHJldHVybiBuYW1lLmlzUG90ZW50aWFsIHx8CiAgICAgICAgKGRlZmF1bHRWYWx1ZSAhPSBudWxsICYmIGRlZmF1bHRWYWx1ZS5pc1BvdGVudGlhbCk7CiAgfQp9CgovLy8gQSBgY29uc3QgYm9vbC5mcm9tRW52aXJvbm1lbnRgIGNvbnN0YW50LgpjbGFzcyBCb29sRnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9uCiAgICBleHRlbmRzIEZyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbiB7CiAgQm9vbEZyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbigKICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIG5hbWUsIENvbnN0YW50RXhwcmVzc2lvbiBkZWZhdWx0VmFsdWUpCiAgICAgIDogc3VwZXIobmFtZSwgZGVmYXVsdFZhbHVlKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCB7CiAgICByZXR1cm4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5CT09MX0ZST01fRU5WSVJPTk1FTlQ7CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Qm9vbEZyb21FbnZpcm9ubWVudCh0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ2Jvb2wuZnJvbUVudmlyb25tZW50KG5hbWU9Jyk7CiAgICBuYW1lLl9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChzYik7CiAgICBzYi53cml0ZSgnLGRlZmF1bHRWYWx1ZT0nKTsKICAgIGlmIChkZWZhdWx0VmFsdWUgIT0gbnVsbCkgewogICAgICBkZWZhdWx0VmFsdWUuX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KHNiKTsKICAgIH0gZWxzZSB7CiAgICAgIHNiLndyaXRlKCdudWxsJyk7CiAgICB9CiAgICBzYi53cml0ZSgnKScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIENvbnN0YW50VmFsdWUgbmFtZUNvbnN0YW50VmFsdWUgPSBuYW1lLmV2YWx1YXRlKGVudmlyb25tZW50KTsKICAgIENvbnN0YW50VmFsdWUgZGVmYXVsdENvbnN0YW50VmFsdWU7CiAgICBpZiAoZGVmYXVsdFZhbHVlICE9IG51bGwpIHsKICAgICAgZGVmYXVsdENvbnN0YW50VmFsdWUgPSBkZWZhdWx0VmFsdWUuZXZhbHVhdGUoZW52aXJvbm1lbnQpOwogICAgfSBlbHNlIHsKICAgICAgZGVmYXVsdENvbnN0YW50VmFsdWUgPSBjb25zdGFudF9zeXN0ZW0uY3JlYXRlQm9vbChmYWxzZSk7CiAgICB9CiAgICBpZiAoIW5hbWVDb25zdGFudFZhbHVlLmlzQ29uc3RhbnQgfHwgIWRlZmF1bHRDb25zdGFudFZhbHVlLmlzQ29uc3RhbnQpIHsKICAgICAgcmV0dXJuIG5ldyBOb25Db25zdGFudFZhbHVlKCk7CiAgICB9CiAgICBib29sIGlzVmFsaWQgPQogICAgICAgIF9jaGVja05hbWVGcm9tRW52aXJvbm1lbnQoZW52aXJvbm1lbnQsIG5hbWUsIG5hbWVDb25zdGFudFZhbHVlKTsKICAgIGlmIChkZWZhdWx0VmFsdWUgIT0gbnVsbCkgewogICAgICBpZiAoIWRlZmF1bHRDb25zdGFudFZhbHVlLmlzQm9vbCAmJiAhZGVmYXVsdENvbnN0YW50VmFsdWUuaXNOdWxsKSB7CiAgICAgICAgZW52aXJvbm1lbnQucmVwb3J0RXJyb3IoZGVmYXVsdFZhbHVlLAogICAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0JPT0xfRlJPTV9FTlZJUk9OTUVOVF9ERUZBVUxUX1ZBTFVFX1RZUEUsIHsKICAgICAgICAgICdjb25zdGFudCc6IGRlZmF1bHRWYWx1ZSwKICAgICAgICAgICd0eXBlJzogZGVmYXVsdENvbnN0YW50VmFsdWUuZ2V0VHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cykKICAgICAgICB9KTsKICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGlmIChpc1ZhbGlkKSB7CiAgICAgIFN0cmluZ0NvbnN0YW50VmFsdWUgbmFtZVN0cmluZ0NvbnN0YW50VmFsdWUgPSBuYW1lQ29uc3RhbnRWYWx1ZTsKICAgICAgU3RyaW5nIHRleHQgPQogICAgICAgICAgZW52aXJvbm1lbnQucmVhZEZyb21FbnZpcm9ubWVudChuYW1lU3RyaW5nQ29uc3RhbnRWYWx1ZS5zdHJpbmdWYWx1ZSk7CiAgICAgIGlmICh0ZXh0ID09ICd0cnVlJykgewogICAgICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uY3JlYXRlQm9vbCh0cnVlKTsKICAgICAgfSBlbHNlIGlmICh0ZXh0ID09ICdmYWxzZScpIHsKICAgICAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZUJvb2woZmFsc2UpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBkZWZhdWx0Q29uc3RhbnRWYWx1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBOb25Db25zdGFudFZhbHVlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gYXBwbHkoTm9ybWFsaXplZEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBuZXcgQm9vbEZyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbihuYW1lLmFwcGx5KGFyZ3VtZW50cyksCiAgICAgICAgZGVmYXVsdFZhbHVlICE9IG51bGwgPyBkZWZhdWx0VmFsdWUuYXBwbHkoYXJndW1lbnRzKSA6IG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRLbm93blR5cGUoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpID0+CiAgICAgIGNvbW1vbkVsZW1lbnRzLmJvb2xUeXBlOwp9CgovLy8gQSBgY29uc3QgaW50LmZyb21FbnZpcm9ubWVudGAgY29uc3RhbnQuCmNsYXNzIEludEZyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbgogICAgZXh0ZW5kcyBGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb24gewogIEludEZyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbigKICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIG5hbWUsIENvbnN0YW50RXhwcmVzc2lvbiBkZWZhdWx0VmFsdWUpCiAgICAgIDogc3VwZXIobmFtZSwgZGVmYXVsdFZhbHVlKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCB7CiAgICByZXR1cm4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5JTlRfRlJPTV9FTlZJUk9OTUVOVDsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRJbnRGcm9tRW52aXJvbm1lbnQodGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdpbnQuZnJvbUVudmlyb25tZW50KG5hbWU9Jyk7CiAgICBuYW1lLl9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChzYik7CiAgICBzYi53cml0ZSgnLGRlZmF1bHRWYWx1ZT0nKTsKICAgIGlmIChkZWZhdWx0VmFsdWUgIT0gbnVsbCkgewogICAgICBkZWZhdWx0VmFsdWUuX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KHNiKTsKICAgIH0gZWxzZSB7CiAgICAgIHNiLndyaXRlKCdudWxsJyk7CiAgICB9CiAgICBzYi53cml0ZSgnKScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIENvbnN0YW50VmFsdWUgbmFtZUNvbnN0YW50VmFsdWUgPSBuYW1lLmV2YWx1YXRlKGVudmlyb25tZW50KTsKICAgIENvbnN0YW50VmFsdWUgZGVmYXVsdENvbnN0YW50VmFsdWU7CiAgICBpZiAoZGVmYXVsdFZhbHVlICE9IG51bGwpIHsKICAgICAgZGVmYXVsdENvbnN0YW50VmFsdWUgPSBkZWZhdWx0VmFsdWUuZXZhbHVhdGUoZW52aXJvbm1lbnQpOwogICAgfSBlbHNlIHsKICAgICAgZGVmYXVsdENvbnN0YW50VmFsdWUgPSBjb25zdGFudF9zeXN0ZW0uY3JlYXRlTnVsbCgpOwogICAgfQogICAgaWYgKCFuYW1lQ29uc3RhbnRWYWx1ZS5pc0NvbnN0YW50IHx8ICFkZWZhdWx0Q29uc3RhbnRWYWx1ZS5pc0NvbnN0YW50KSB7CiAgICAgIHJldHVybiBuZXcgTm9uQ29uc3RhbnRWYWx1ZSgpOwogICAgfQogICAgYm9vbCBpc1ZhbGlkID0KICAgICAgICBfY2hlY2tOYW1lRnJvbUVudmlyb25tZW50KGVudmlyb25tZW50LCBuYW1lLCBuYW1lQ29uc3RhbnRWYWx1ZSk7CiAgICBpZiAoZGVmYXVsdFZhbHVlICE9IG51bGwpIHsKICAgICAgaWYgKCFkZWZhdWx0Q29uc3RhbnRWYWx1ZS5pc0ludCAmJiAhZGVmYXVsdENvbnN0YW50VmFsdWUuaXNOdWxsKSB7CiAgICAgICAgZW52aXJvbm1lbnQucmVwb3J0RXJyb3IoZGVmYXVsdFZhbHVlLAogICAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0lOVF9GUk9NX0VOVklST05NRU5UX0RFRkFVTFRfVkFMVUVfVFlQRSwgewogICAgICAgICAgJ2NvbnN0YW50JzogZGVmYXVsdFZhbHVlLAogICAgICAgICAgJ3R5cGUnOiBkZWZhdWx0Q29uc3RhbnRWYWx1ZS5nZXRUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzKQogICAgICAgIH0pOwogICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaWYgKGlzVmFsaWQpIHsKICAgICAgU3RyaW5nQ29uc3RhbnRWYWx1ZSBuYW1lU3RyaW5nQ29uc3RhbnRWYWx1ZSA9IG5hbWVDb25zdGFudFZhbHVlOwogICAgICBTdHJpbmcgdGV4dCA9CiAgICAgICAgICBlbnZpcm9ubWVudC5yZWFkRnJvbUVudmlyb25tZW50KG5hbWVTdHJpbmdDb25zdGFudFZhbHVlLnN0cmluZ1ZhbHVlKTsKICAgICAgQmlnSW50IHZhbHVlOwogICAgICBpZiAodGV4dCAhPSBudWxsKSB7CiAgICAgICAgdmFsdWUgPSBCaWdJbnQudHJ5UGFyc2UodGV4dCk7CiAgICAgIH0KICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsKICAgICAgICByZXR1cm4gZGVmYXVsdENvbnN0YW50VmFsdWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVJbnQodmFsdWUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiBhcHBseShOb3JtYWxpemVkQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIG5ldyBJbnRGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb24obmFtZS5hcHBseShhcmd1bWVudHMpLAogICAgICAgIGRlZmF1bHRWYWx1ZSAhPSBudWxsID8gZGVmYXVsdFZhbHVlLmFwcGx5KGFyZ3VtZW50cykgOiBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0S25vd25UeXBlKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSA9PgogICAgICBjb21tb25FbGVtZW50cy5pbnRUeXBlOwp9CgovLy8gQSBgY29uc3QgU3RyaW5nLmZyb21FbnZpcm9ubWVudGAgY29uc3RhbnQuCmNsYXNzIFN0cmluZ0Zyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbgogICAgZXh0ZW5kcyBGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb24gewogIFN0cmluZ0Zyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbigKICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIG5hbWUsIENvbnN0YW50RXhwcmVzc2lvbiBkZWZhdWx0VmFsdWUpCiAgICAgIDogc3VwZXIobmFtZSwgZGVmYXVsdFZhbHVlKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCB7CiAgICByZXR1cm4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5TVFJJTkdfRlJPTV9FTlZJUk9OTUVOVDsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRTdHJpbmdGcm9tRW52aXJvbm1lbnQodGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdTdHJpbmcuZnJvbUVudmlyb25tZW50KG5hbWU9Jyk7CiAgICBuYW1lLl9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChzYik7CiAgICBzYi53cml0ZSgnLGRlZmF1bHRWYWx1ZT0nKTsKICAgIGlmIChkZWZhdWx0VmFsdWUgIT0gbnVsbCkgewogICAgICBkZWZhdWx0VmFsdWUuX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KHNiKTsKICAgIH0gZWxzZSB7CiAgICAgIHNiLndyaXRlKCdudWxsJyk7CiAgICB9CiAgICBzYi53cml0ZSgnKScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIENvbnN0YW50VmFsdWUgbmFtZUNvbnN0YW50VmFsdWUgPSBuYW1lLmV2YWx1YXRlKGVudmlyb25tZW50KTsKICAgIENvbnN0YW50VmFsdWUgZGVmYXVsdENvbnN0YW50VmFsdWU7CiAgICBpZiAoZGVmYXVsdFZhbHVlICE9IG51bGwpIHsKICAgICAgZGVmYXVsdENvbnN0YW50VmFsdWUgPSBkZWZhdWx0VmFsdWUuZXZhbHVhdGUoZW52aXJvbm1lbnQpOwogICAgfSBlbHNlIHsKICAgICAgZGVmYXVsdENvbnN0YW50VmFsdWUgPSBjb25zdGFudF9zeXN0ZW0uY3JlYXRlTnVsbCgpOwogICAgfQogICAgaWYgKCFuYW1lQ29uc3RhbnRWYWx1ZS5pc0NvbnN0YW50IHx8ICFkZWZhdWx0Q29uc3RhbnRWYWx1ZS5pc0NvbnN0YW50KSB7CiAgICAgIHJldHVybiBuZXcgTm9uQ29uc3RhbnRWYWx1ZSgpOwogICAgfQogICAgYm9vbCBpc1ZhbGlkID0KICAgICAgICBfY2hlY2tOYW1lRnJvbUVudmlyb25tZW50KGVudmlyb25tZW50LCBuYW1lLCBuYW1lQ29uc3RhbnRWYWx1ZSk7CiAgICBpZiAoZGVmYXVsdFZhbHVlICE9IG51bGwpIHsKICAgICAgaWYgKCFkZWZhdWx0Q29uc3RhbnRWYWx1ZS5pc1N0cmluZyAmJiAhZGVmYXVsdENvbnN0YW50VmFsdWUuaXNOdWxsKSB7CiAgICAgICAgZW52aXJvbm1lbnQucmVwb3J0RXJyb3IoZGVmYXVsdFZhbHVlLAogICAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX1NUUklOR19GUk9NX0VOVklST05NRU5UX0RFRkFVTFRfVkFMVUVfVFlQRSwgewogICAgICAgICAgJ2NvbnN0YW50JzogZGVmYXVsdFZhbHVlLAogICAgICAgICAgJ3R5cGUnOiBkZWZhdWx0Q29uc3RhbnRWYWx1ZS5nZXRUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzKQogICAgICAgIH0pOwogICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaWYgKGlzVmFsaWQpIHsKICAgICAgU3RyaW5nQ29uc3RhbnRWYWx1ZSBuYW1lU3RyaW5nQ29uc3RhbnRWYWx1ZSA9IG5hbWVDb25zdGFudFZhbHVlOwogICAgICBTdHJpbmcgdGV4dCA9CiAgICAgICAgICBlbnZpcm9ubWVudC5yZWFkRnJvbUVudmlyb25tZW50KG5hbWVTdHJpbmdDb25zdGFudFZhbHVlLnN0cmluZ1ZhbHVlKTsKICAgICAgaWYgKHRleHQgPT0gbnVsbCkgewogICAgICAgIHJldHVybiBkZWZhdWx0Q29uc3RhbnRWYWx1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZVN0cmluZyh0ZXh0KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBOb25Db25zdGFudFZhbHVlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gYXBwbHkoTm9ybWFsaXplZEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBuZXcgU3RyaW5nRnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9uKG5hbWUuYXBwbHkoYXJndW1lbnRzKSwKICAgICAgICBkZWZhdWx0VmFsdWUgIT0gbnVsbCA/IGRlZmF1bHRWYWx1ZS5hcHBseShhcmd1bWVudHMpIDogbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldEtub3duVHlwZShDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgPT4KICAgICAgY29tbW9uRWxlbWVudHMuc3RyaW5nVHlwZTsKfQoKY2xhc3MgQXNzZXJ0Q29uc3RhbnRFeHByZXNzaW9uIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uIHsKICBmaW5hbCBDb25zdGFudEV4cHJlc3Npb24gY29uZGl0aW9uOwogIGZpbmFsIENvbnN0YW50RXhwcmVzc2lvbiBtZXNzYWdlOwoKICBBc3NlcnRDb25zdGFudEV4cHJlc3Npb24odGhpcy5jb25kaXRpb24sIHRoaXMubWVzc2FnZSk7CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5BU1NFUlQ7CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhBc3NlcnRDb25zdGFudEV4cHJlc3Npb24gb3RoZXIpIHsKICAgIHJldHVybiBjb25kaXRpb24gPT0gb3RoZXIuY29uZGl0aW9uICYmIG1lc3NhZ2UgPT0gb3RoZXIubWVzc2FnZTsKICB9CgogIEBvdmVycmlkZQogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgewogICAgcmV0dXJuIDEzICogY29uZGl0aW9uLmhhc2hDb2RlICsgMTcgKiBtZXNzYWdlLmhhc2hDb2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnYXNzZXJ0KCcpOwogICAgY29uZGl0aW9uLl9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChzYik7CiAgICBzYi53cml0ZSgnLG1lc3NhZ2U9Jyk7CiAgICBpZiAobWVzc2FnZSAhPSBudWxsKSB7CiAgICAgIG1lc3NhZ2UuX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KHNiKTsKICAgIH0gZWxzZSB7CiAgICAgIHNiLndyaXRlKCdudWxsJyk7CiAgICB9CiAgICBzYi53cml0ZSgnKScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIENvbnN0YW50VmFsdWUgY29uZGl0aW9uVmFsdWUgPSBjb25kaXRpb24uZXZhbHVhdGUoZW52aXJvbm1lbnQpOwogICAgYm9vbCB2YWxpZEFzc2VydDsKICAgIGlmIChlbnZpcm9ubWVudC5lbmFibGVBc3NlcnRpb25zKSB7CiAgICAgIC8vIEJvb2xlYW4gY29udmVyc2lvbjoKICAgICAgdmFsaWRBc3NlcnQgPQogICAgICAgICAgY29uZGl0aW9uVmFsdWUgaXMgQm9vbENvbnN0YW50VmFsdWUgJiYgY29uZGl0aW9uVmFsdWUuYm9vbFZhbHVlOwogICAgfSBlbHNlIHsKICAgICAgdmFsaWRBc3NlcnQgPSB0cnVlOwogICAgfQogICAgaWYgKCF2YWxpZEFzc2VydCkgewogICAgICBpZiAobWVzc2FnZSAhPSBudWxsKSB7CiAgICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IG1lc3NhZ2UuZXZhbHVhdGUoZW52aXJvbm1lbnQpOwogICAgICAgIGlmICh2YWx1ZSBpcyBTdHJpbmdDb25zdGFudFZhbHVlKSB7CiAgICAgICAgICBTdHJpbmcgdGV4dCA9ICcke3ZhbHVlLnN0cmluZ1ZhbHVlfSc7CiAgICAgICAgICBlbnZpcm9ubWVudC5yZXBvcnRFcnJvcih0aGlzLAogICAgICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQVNTRVJUX1ZBTFVFX01FU1NBR0UsIHsnbWVzc2FnZSc6IHRleHR9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZW52aXJvbm1lbnQucmVwb3J0RXJyb3IodGhpcywgTWVzc2FnZUtpbmQuSU5WQUxJRF9BU1NFUlRfVkFMVUUsCiAgICAgICAgICAgICAgeydhc3NlcnRpb24nOiBjb25kaXRpb24udG9EYXJ0VGV4dCgpfSk7CiAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZXBvcnQgaW52YWxpZCBjb25zdGFudCBtZXNzYWdlPwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBlbnZpcm9ubWVudC5yZXBvcnRFcnJvcih0aGlzLCBNZXNzYWdlS2luZC5JTlZBTElEX0FTU0VSVF9WQUxVRSwKICAgICAgICAgICAgeydhc3NlcnRpb24nOiBjb25kaXRpb24udG9EYXJ0VGV4dCgpfSk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBOb25Db25zdGFudFZhbHVlKCk7CiAgICB9CgogICAgLy8gUmV0dXJuIGEgdmFsaWQgY29uc3RhbnQgdmFsdWUgdG8gc2lnbmFsIHRoYXQgYXNzZXJ0aW9uIGRpZG4ndCBmYWlsLgogICAgcmV0dXJuIG5ldyBOdWxsQ29uc3RhbnRWYWx1ZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdEFzc2VydCh0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiBhcHBseShOb3JtYWxpemVkQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIG5ldyBBc3NlcnRDb25zdGFudEV4cHJlc3Npb24oCiAgICAgICAgY29uZGl0aW9uLmFwcGx5KGFyZ3VtZW50cyksIG1lc3NhZ2U/LmFwcGx5KGFyZ3VtZW50cykpOwogIH0KfQoKY2xhc3MgSW5zdGFudGlhdGlvbkNvbnN0YW50RXhwcmVzc2lvbiBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50czsKICBmaW5hbCBDb25zdGFudEV4cHJlc3Npb24gZXhwcmVzc2lvbjsKCiAgSW5zdGFudGlhdGlvbkNvbnN0YW50RXhwcmVzc2lvbih0aGlzLnR5cGVBcmd1bWVudHMsIHRoaXMuZXhwcmVzc2lvbik7CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5JTlNUQU5USUFUSU9OOwoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdJbnN0YW50aWF0aW9uKHR5cGVBcmd1bWVudHM9JHR5cGVBcmd1bWVudHMsZXhwcmVzc2lvbj0nKTsKICAgIGV4cHJlc3Npb24uX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KHNiKTsKICAgIHNiLndyaXRlKCcpJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50c0luQ29udGV4dCA9CiAgICAgICAgdHlwZUFyZ3VtZW50cy5tYXAoZW52aXJvbm1lbnQuZ2V0VHlwZUluQ29udGV4dCkudG9MaXN0KCk7CiAgICByZXR1cm4gbmV3IEluc3RhbnRpYXRpb25Db25zdGFudFZhbHVlKAogICAgICAgIHR5cGVBcmd1bWVudHNJbkNvbnRleHQsIGV4cHJlc3Npb24uZXZhbHVhdGUoZW52aXJvbm1lbnQpKTsKICB9CgogIEBvdmVycmlkZQogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgewogICAgcmV0dXJuIEhhc2hpbmcub2JqZWN0SGFzaChleHByZXNzaW9uLCBIYXNoaW5nLmxpc3RIYXNoKHR5cGVBcmd1bWVudHMpKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiBhcHBseShOb3JtYWxpemVkQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIG5ldyBJbnN0YW50aWF0aW9uQ29uc3RhbnRFeHByZXNzaW9uKAogICAgICAgIHR5cGVBcmd1bWVudHMsIGV4cHJlc3Npb24uYXBwbHkoYXJndW1lbnRzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoSW5zdGFudGlhdGlvbkNvbnN0YW50RXhwcmVzc2lvbiBvdGhlcikgewogICAgcmV0dXJuIGVxdWFsRWxlbWVudHModHlwZUFyZ3VtZW50cywgb3RoZXIudHlwZUFyZ3VtZW50cykgJiYKICAgICAgICBleHByZXNzaW9uID09IG90aGVyLmV4cHJlc3Npb247CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0SW5zdGFudGlhdGlvbih0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUG90ZW50aWFsIHsKICAgIHJldHVybiBleHByZXNzaW9uLmlzUG90ZW50aWFsOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvcjxSLCBBPiB7CiAgY29uc3QgQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvcigpOwoKICBSIHZpc2l0KENvbnN0YW50RXhwcmVzc2lvbiBjb25zdGFudCwgQSBjb250ZXh0KSB7CiAgICByZXR1cm4gY29uc3RhbnQuYWNjZXB0KHRoaXMsIGNvbnRleHQpOwogIH0KCiAgUiB2aXNpdEFzKEFzQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgQSBjb250ZXh0KTsKICBSIHZpc2l0Qm9vbChCb29sQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgQSBjb250ZXh0KTsKICBSIHZpc2l0SW50KEludENvbnN0YW50RXhwcmVzc2lvbiBleHAsIEEgY29udGV4dCk7CiAgUiB2aXNpdERvdWJsZShEb3VibGVDb25zdGFudEV4cHJlc3Npb24gZXhwLCBBIGNvbnRleHQpOwogIFIgdmlzaXRTdHJpbmcoU3RyaW5nQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgQSBjb250ZXh0KTsKICBSIHZpc2l0TnVsbChOdWxsQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgQSBjb250ZXh0KTsKICBSIHZpc2l0TGlzdChMaXN0Q29uc3RhbnRFeHByZXNzaW9uIGV4cCwgQSBjb250ZXh0KTsKICBSIHZpc2l0U2V0KFNldENvbnN0YW50RXhwcmVzc2lvbiBleHAsIEEgY29udGV4dCk7CiAgUiB2aXNpdE1hcChNYXBDb25zdGFudEV4cHJlc3Npb24gZXhwLCBBIGNvbnRleHQpOwogIFIgdmlzaXRDb25zdHJ1Y3RlZChDb25zdHJ1Y3RlZENvbnN0YW50RXhwcmVzc2lvbiBleHAsIEEgY29udGV4dCk7CiAgUiB2aXNpdENvbmNhdGVuYXRlKENvbmNhdGVuYXRlQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgQSBjb250ZXh0KTsKICBSIHZpc2l0U3ltYm9sKFN5bWJvbENvbnN0YW50RXhwcmVzc2lvbiBleHAsIEEgY29udGV4dCk7CiAgUiB2aXNpdFR5cGUoVHlwZUNvbnN0YW50RXhwcmVzc2lvbiBleHAsIEEgY29udGV4dCk7CiAgUiB2aXNpdExvY2FsVmFyaWFibGUoTG9jYWxWYXJpYWJsZUNvbnN0YW50RXhwcmVzc2lvbiBleHAsIEEgY29udGV4dCk7CiAgUiB2aXNpdEZpZWxkKEZpZWxkQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgQSBjb250ZXh0KTsKICBSIHZpc2l0RnVuY3Rpb24oRnVuY3Rpb25Db25zdGFudEV4cHJlc3Npb24gZXhwLCBBIGNvbnRleHQpOwogIFIgdmlzaXRCaW5hcnkoQmluYXJ5Q29uc3RhbnRFeHByZXNzaW9uIGV4cCwgQSBjb250ZXh0KTsKICBSIHZpc2l0SWRlbnRpY2FsKElkZW50aWNhbENvbnN0YW50RXhwcmVzc2lvbiBleHAsIEEgY29udGV4dCk7CiAgUiB2aXNpdFVuYXJ5KFVuYXJ5Q29uc3RhbnRFeHByZXNzaW9uIGV4cCwgQSBjb250ZXh0KTsKICBSIHZpc2l0U3RyaW5nTGVuZ3RoKFN0cmluZ0xlbmd0aENvbnN0YW50RXhwcmVzc2lvbiBleHAsIEEgY29udGV4dCk7CiAgUiB2aXNpdENvbmRpdGlvbmFsKENvbmRpdGlvbmFsQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgQSBjb250ZXh0KTsKICBSIHZpc2l0Qm9vbEZyb21FbnZpcm9ubWVudCgKICAgICAgQm9vbEZyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbiBleHAsIEEgY29udGV4dCk7CiAgUiB2aXNpdEludEZyb21FbnZpcm9ubWVudCgKICAgICAgSW50RnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9uIGV4cCwgQSBjb250ZXh0KTsKICBSIHZpc2l0U3RyaW5nRnJvbUVudmlyb25tZW50KAogICAgICBTdHJpbmdGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb24gZXhwLCBBIGNvbnRleHQpOwogIFIgdmlzaXRBc3NlcnQoQXNzZXJ0Q29uc3RhbnRFeHByZXNzaW9uIGV4cCwgQSBjb250ZXh0KTsKICBSIHZpc2l0SW5zdGFudGlhdGlvbihJbnN0YW50aWF0aW9uQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgQSBjb250ZXh0KTsKCiAgUiB2aXNpdFBvc2l0aW9uYWwoUG9zaXRpb25hbEFyZ3VtZW50UmVmZXJlbmNlIGV4cCwgQSBjb250ZXh0KTsKICBSIHZpc2l0TmFtZWQoTmFtZWRBcmd1bWVudFJlZmVyZW5jZSBleHAsIEEgY29udGV4dCk7Cn0KCmNsYXNzIENvbnN0RXhwUHJpbnRlciBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgewogIGZpbmFsIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKCiAgdm9pZCB3cml0ZShDb25zdGFudEV4cHJlc3Npb24gcGFyZW50LCBDb25zdGFudEV4cHJlc3Npb24gY2hpbGQsCiAgICAgIHtib29sIGxlZnRBc3NvY2lhdGl2ZTogdHJ1ZX0pIHsKICAgIGlmIChjaGlsZC5wcmVjZWRlbmNlIDwgcGFyZW50LnByZWNlZGVuY2UgfHwKICAgICAgICAhbGVmdEFzc29jaWF0aXZlICYmIGNoaWxkLnByZWNlZGVuY2UgPT0gcGFyZW50LnByZWNlZGVuY2UpIHsKICAgICAgc2Iud3JpdGUoJygnKTsKICAgICAgY2hpbGQuYWNjZXB0KHRoaXMpOwogICAgICBzYi53cml0ZSgnKScpOwogICAgfSBlbHNlIHsKICAgICAgY2hpbGQuYWNjZXB0KHRoaXMpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZVR5cGVBcmd1bWVudHMoSW50ZXJmYWNlVHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZS50cmVhdEFzUmF3KSByZXR1cm47CiAgICBzYi53cml0ZSgnPCcpOwogICAgYm9vbCBuZWVkc0NvbW1hID0gZmFsc2U7CiAgICBmb3IgKERhcnRUeXBlIHZhbHVlIGluIHR5cGUudHlwZUFyZ3VtZW50cykgewogICAgICBpZiAobmVlZHNDb21tYSkgewogICAgICAgIHNiLndyaXRlKCcsICcpOwogICAgICB9CiAgICAgIHNiLndyaXRlKHZhbHVlKTsKICAgICAgbmVlZHNDb21tYSA9IHRydWU7CiAgICB9CiAgICBzYi53cml0ZSgnPicpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdChDb25zdGFudEV4cHJlc3Npb24gY29uc3RhbnQsIFtfXSkgewogICAgcmV0dXJuIGNvbnN0YW50LmFjY2VwdCh0aGlzLCBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBcyhBc0NvbnN0YW50RXhwcmVzc2lvbiBleHAsIFtfXSkgewogICAgdmlzaXQoZXhwLmV4cHJlc3Npb24pOwogICAgc2Iud3JpdGUoJyBhcyAnKTsKICAgIHNiLndyaXRlKGV4cC50eXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCb29sKEJvb2xDb25zdGFudEV4cHJlc3Npb24gZXhwLCBbX10pIHsKICAgIHNiLndyaXRlKGV4cC5ib29sVmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERvdWJsZShEb3VibGVDb25zdGFudEV4cHJlc3Npb24gZXhwLCBbX10pIHsKICAgIHNiLndyaXRlKGV4cC5kb3VibGVWYWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50KEludENvbnN0YW50RXhwcmVzc2lvbiBleHAsIFtfXSkgewogICAgc2Iud3JpdGUoZXhwLmludFZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXROdWxsKE51bGxDb25zdGFudEV4cHJlc3Npb24gZXhwLCBbX10pIHsKICAgIHNiLndyaXRlKG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0cmluZyhTdHJpbmdDb25zdGFudEV4cHJlc3Npb24gZXhwLCBbX10pIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEVuc3VyZSBjb3JyZWN0IGVzY2FwaW5nLgogICAgc2Iud3JpdGUoJyIke2V4cC5zdHJpbmdWYWx1ZX0iJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGlzdChMaXN0Q29uc3RhbnRFeHByZXNzaW9uIGV4cCwgW19dKSB7CiAgICBzYi53cml0ZSgnY29uc3QgJyk7CiAgICB3cml0ZVR5cGVBcmd1bWVudHMoZXhwLnR5cGUpOwogICAgc2Iud3JpdGUoJ1snKTsKICAgIGJvb2wgbmVlZHNDb21tYSA9IGZhbHNlOwogICAgZm9yIChDb25zdGFudEV4cHJlc3Npb24gdmFsdWUgaW4gZXhwLnZhbHVlcykgewogICAgICBpZiAobmVlZHNDb21tYSkgewogICAgICAgIHNiLndyaXRlKCcsICcpOwogICAgICB9CiAgICAgIHZpc2l0KHZhbHVlKTsKICAgICAgbmVlZHNDb21tYSA9IHRydWU7CiAgICB9CiAgICBzYi53cml0ZSgnXScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFNldChTZXRDb25zdGFudEV4cHJlc3Npb24gZXhwLCBbX10pIHsKICAgIHNiLndyaXRlKCdjb25zdCAnKTsKICAgIHdyaXRlVHlwZUFyZ3VtZW50cyhleHAudHlwZSk7CiAgICBzYi53cml0ZSgneycpOwogICAgc2Iud3JpdGVBbGwoZXhwLnZhbHVlcywgJywgJyk7CiAgICBzYi53cml0ZSgnfScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE1hcChNYXBDb25zdGFudEV4cHJlc3Npb24gZXhwLCBbX10pIHsKICAgIHNiLndyaXRlKCdjb25zdCAnKTsKICAgIHdyaXRlVHlwZUFyZ3VtZW50cyhleHAudHlwZSk7CiAgICBzYi53cml0ZSgneycpOwogICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4cC5rZXlzLmxlbmd0aDsgaW5kZXgrKykgewogICAgICBpZiAoaW5kZXggPiAwKSB7CiAgICAgICAgc2Iud3JpdGUoJywgJyk7CiAgICAgIH0KICAgICAgdmlzaXQoZXhwLmtleXNbaW5kZXhdKTsKICAgICAgc2Iud3JpdGUoJzogJyk7CiAgICAgIHZpc2l0KGV4cC52YWx1ZXNbaW5kZXhdKTsKICAgIH0KICAgIHNiLndyaXRlKCd9Jyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29uc3RydWN0ZWQoQ29uc3RydWN0ZWRDb25zdGFudEV4cHJlc3Npb24gZXhwLCBbX10pIHsKICAgIHNiLndyaXRlKCdjb25zdCAnKTsKICAgIHNiLndyaXRlKGV4cC50YXJnZXQuZW5jbG9zaW5nQ2xhc3MubmFtZSk7CiAgICB3cml0ZVR5cGVBcmd1bWVudHMoZXhwLnR5cGUpOwogICAgaWYgKGV4cC50YXJnZXQubmFtZSAhPSAnJykgewogICAgICBzYi53cml0ZSgnLicpOwogICAgICBzYi53cml0ZShleHAudGFyZ2V0Lm5hbWUpOwogICAgfQogICAgc2Iud3JpdGUoJygnKTsKICAgIGJvb2wgbmVlZHNDb21tYSA9IGZhbHNlOwoKICAgIGludCBuYW1lZE9mZnNldCA9IGV4cC5jYWxsU3RydWN0dXJlLnBvc2l0aW9uYWxBcmd1bWVudENvdW50OwogICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IG5hbWVkT2Zmc2V0OyBpbmRleCsrKSB7CiAgICAgIGlmIChuZWVkc0NvbW1hKSB7CiAgICAgICAgc2Iud3JpdGUoJywgJyk7CiAgICAgIH0KICAgICAgdmlzaXQoZXhwLmFyZ3VtZW50c1tpbmRleF0pOwogICAgICBuZWVkc0NvbW1hID0gdHJ1ZTsKICAgIH0KICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleHAuY2FsbFN0cnVjdHVyZS5uYW1lZEFyZ3VtZW50Q291bnQ7IGluZGV4KyspIHsKICAgICAgaWYgKG5lZWRzQ29tbWEpIHsKICAgICAgICBzYi53cml0ZSgnLCAnKTsKICAgICAgfQogICAgICBzYi53cml0ZShleHAuY2FsbFN0cnVjdHVyZS5uYW1lZEFyZ3VtZW50c1tpbmRleF0pOwogICAgICBzYi53cml0ZSgnOiAnKTsKICAgICAgdmlzaXQoZXhwLmFyZ3VtZW50c1tuYW1lZE9mZnNldCArIGluZGV4XSk7CiAgICAgIG5lZWRzQ29tbWEgPSB0cnVlOwogICAgfQogICAgc2Iud3JpdGUoJyknKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb25jYXRlbmF0ZShDb25jYXRlbmF0ZUNvbnN0YW50RXhwcmVzc2lvbiBleHAsIFtfXSkgewogICAgc2Iud3JpdGUoJyInKTsKICAgIGZvciAoQ29uc3RhbnRFeHByZXNzaW9uIGV4cHJlc3Npb24gaW4gZXhwLmV4cHJlc3Npb25zKSB7CiAgICAgIGlmIChleHByZXNzaW9uLmtpbmQgPT0gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5TVFJJTkcpIHsKICAgICAgICBTdHJpbmdDb25zdGFudEV4cHJlc3Npb24gc3RyaW5nID0gZXhwcmVzc2lvbjsKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBFbnN1cmUgY29ycmVjdCBlc2NhcGluZy4KICAgICAgICBzYi53cml0ZSgnJHtzdHJpbmcuc3RyaW5nVmFsdWV9Jyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2Iud3JpdGUociIkeyIpOwogICAgICAgIHZpc2l0KGV4cHJlc3Npb24pOwogICAgICAgIHNiLndyaXRlKCJ9Iik7CiAgICAgIH0KICAgIH0KICAgIHNiLndyaXRlKCciJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3ltYm9sKFN5bWJvbENvbnN0YW50RXhwcmVzc2lvbiBleHAsIFtfXSkgewogICAgc2Iud3JpdGUoJyMnKTsKICAgIHNiLndyaXRlKGV4cC5uYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlKFR5cGVDb25zdGFudEV4cHJlc3Npb24gZXhwLCBbX10pIHsKICAgIHNiLndyaXRlKGV4cC5uYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGaWVsZChGaWVsZENvbnN0YW50RXhwcmVzc2lvbiBleHAsIFtfXSkgewogICAgaWYgKGV4cC5lbGVtZW50LmlzU3RhdGljKSB7CiAgICAgIHNiLndyaXRlKGV4cC5lbGVtZW50LmVuY2xvc2luZ0NsYXNzLm5hbWUpOwogICAgICBzYi53cml0ZSgnLicpOwogICAgfQogICAgc2Iud3JpdGUoZXhwLmVsZW1lbnQubmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TG9jYWxWYXJpYWJsZShMb2NhbFZhcmlhYmxlQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgW19dKSB7CiAgICBzYi53cml0ZShleHAuZWxlbWVudC5uYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGdW5jdGlvbihGdW5jdGlvbkNvbnN0YW50RXhwcmVzc2lvbiBleHAsIFtfXSkgewogICAgaWYgKGV4cC5lbGVtZW50LmlzU3RhdGljKSB7CiAgICAgIHNiLndyaXRlKGV4cC5lbGVtZW50LmVuY2xvc2luZ0NsYXNzLm5hbWUpOwogICAgICBzYi53cml0ZSgnLicpOwogICAgfQogICAgc2Iud3JpdGUoZXhwLmVsZW1lbnQubmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QmluYXJ5KEJpbmFyeUNvbnN0YW50RXhwcmVzc2lvbiBleHAsIFtfXSkgewogICAgd3JpdGUoZXhwLCBleHAubGVmdCk7CiAgICBzYi53cml0ZSgnICcpOwogICAgc2Iud3JpdGUoZXhwLm9wZXJhdG9yLm5hbWUpOwogICAgc2Iud3JpdGUoJyAnKTsKICAgIHdyaXRlKGV4cCwgZXhwLnJpZ2h0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJZGVudGljYWwoSWRlbnRpY2FsQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgW19dKSB7CiAgICBzYi53cml0ZSgnaWRlbnRpY2FsKCcpOwogICAgdmlzaXQoZXhwLmxlZnQpOwogICAgc2Iud3JpdGUoJywgJyk7CiAgICB2aXNpdChleHAucmlnaHQpOwogICAgc2Iud3JpdGUoJyknKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRVbmFyeShVbmFyeUNvbnN0YW50RXhwcmVzc2lvbiBleHAsIFtfXSkgewogICAgc2Iud3JpdGUoZXhwLm9wZXJhdG9yKTsKICAgIHdyaXRlKGV4cCwgZXhwLmV4cHJlc3Npb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0cmluZ0xlbmd0aChTdHJpbmdMZW5ndGhDb25zdGFudEV4cHJlc3Npb24gZXhwLCBbX10pIHsKICAgIHdyaXRlKGV4cCwgZXhwLmV4cHJlc3Npb24sIGxlZnRBc3NvY2lhdGl2ZTogZmFsc2UpOwogICAgc2Iud3JpdGUoJy5sZW5ndGgnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb25kaXRpb25hbChDb25kaXRpb25hbENvbnN0YW50RXhwcmVzc2lvbiBleHAsIFtfXSkgewogICAgd3JpdGUoZXhwLCBleHAuY29uZGl0aW9uLCBsZWZ0QXNzb2NpYXRpdmU6IGZhbHNlKTsKICAgIHNiLndyaXRlKCcgPyAnKTsKICAgIHdyaXRlKGV4cCwgZXhwLnRydWVFeHApOwogICAgc2Iud3JpdGUoJyA6ICcpOwogICAgd3JpdGUoZXhwLCBleHAuZmFsc2VFeHApOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFBvc2l0aW9uYWwoUG9zaXRpb25hbEFyZ3VtZW50UmVmZXJlbmNlIGV4cCwgW19dKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNYXliZSB0aGlzIHNob3VsZCB0aHJvdy4KICAgIHNiLndyaXRlKCdhcmdzWyR7ZXhwLmluZGV4fV0nKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXROYW1lZChOYW1lZEFyZ3VtZW50UmVmZXJlbmNlIGV4cCwgW19dKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNYXliZSB0aGlzIHNob3VsZCB0aHJvdy4KICAgIHNiLndyaXRlKCdhcmdzWyR7ZXhwLm5hbWV9XScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJvb2xGcm9tRW52aXJvbm1lbnQoQm9vbEZyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbiBleHAsCiAgICAgIFtfXSkgewogICAgc2Iud3JpdGUoJ2NvbnN0IGJvb2wuZnJvbUVudmlyb25tZW50KCcpOwogICAgdmlzaXQoZXhwLm5hbWUpOwogICAgaWYgKGV4cC5kZWZhdWx0VmFsdWUgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgnLCBkZWZhdWx0VmFsdWU6ICcpOwogICAgICB2aXNpdChleHAuZGVmYXVsdFZhbHVlKTsKICAgIH0KICAgIHNiLndyaXRlKCcpJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50RnJvbUVudmlyb25tZW50KEludEZyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbiBleHAsIFtfXSkgewogICAgc2Iud3JpdGUoJ2NvbnN0IGludC5mcm9tRW52aXJvbm1lbnQoJyk7CiAgICB2aXNpdChleHAubmFtZSk7CiAgICBpZiAoZXhwLmRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCcsIGRlZmF1bHRWYWx1ZTogJyk7CiAgICAgIHZpc2l0KGV4cC5kZWZhdWx0VmFsdWUpOwogICAgfQogICAgc2Iud3JpdGUoJyknKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdHJpbmdGcm9tRW52aXJvbm1lbnQoU3RyaW5nRnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9uIGV4cCwKICAgICAgW19dKSB7CiAgICBzYi53cml0ZSgnY29uc3QgU3RyaW5nLmZyb21FbnZpcm9ubWVudCgnKTsKICAgIHZpc2l0KGV4cC5uYW1lKTsKICAgIGlmIChleHAuZGVmYXVsdFZhbHVlICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJywgZGVmYXVsdFZhbHVlOiAnKTsKICAgICAgdmlzaXQoZXhwLmRlZmF1bHRWYWx1ZSk7CiAgICB9CiAgICBzYi53cml0ZSgnKScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEFzc2VydChBc3NlcnRDb25zdGFudEV4cHJlc3Npb24gZXhwLCBbX10pIHsKICAgIHNi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VGV4dChTdHJpbmcgdGV4dCk7CgogIC8vLyBDYWxsZWQgd2hlbiB0aGUgb3V0cHV0IGlzIGNsb3NlZCB3aXRoIGEgZmluYWwgbGVuZ3RoIG9mIFtsZW5ndGhdLgogIHZvaWQgb25Eb25lKGludCBsZW5ndGgpOwp9CgovLy8gSW50ZXJmYWNlIGZvciBhIG1hcHBpbmcgb2YgdGFyZ2V0IG9mZnNldHMgdG8gc291cmNlIGxvY2F0aW9ucyBhbmQgZm9yCi8vLyB0cmFja2luZyBpbmxpbmluZyBmcmFtZSBkYXRhLgovLy8KLy8vIFNvdXJjZS1sb2NhdGlvbiBtYXBwaW5nIGlzIHVzZWQgdG8gYnVpbGQgc3RhbmRhcmQgc291cmNlLW1hcHMgZmlsZXMuCi8vLyBJbmxpbmluZyBmcmFtZXMgaXMgdXNlZCB0byBhdHRhY2ggYW4gZXh0ZW5zaW9uIHRvIHNvdXJjZS1tYXAgZmlsZXMgdG8KLy8vIGltcHJvdmUgZGVvYmZ1c2NhdGlvbiBvZiBwcm9kdWN0aW9uIHN0YWNrIHRyYWNlcy4KYWJzdHJhY3QgY2xhc3MgU291cmNlTG9jYXRpb25zIHsKICAvLy8gVGhlIG5hbWUgaWRlbnRpZnlpbmcgdGhpcyBzb3VyY2UgbWFwcGluZy4KICBTdHJpbmcgZ2V0IG5hbWU7CgogIC8vLyBBZGRzIGEgW3NvdXJjZUxvY2F0aW9uXSBhdCB0aGUgc3BlY2lmaWVkIFt0YXJnZXRPZmZzZXRdLgogIHZvaWQgYWRkU291cmNlTG9jYXRpb24oaW50IHRhcmdldE9mZnNldCwgU291cmNlTG9jYXRpb24gc291cmNlUG9zaXRpb24pOwoKICAvLy8gUmVjb3JkIGFuIGlubGluaW5nIGNhbGwgYXQgdGhlIFt0YXJnZXRPZmZzZXRdLgogIC8vLwogIC8vLyBUaGUgaW5saW5pbmcgY2FsbC1zaXRlIHdhcyBtYWRlIGZyb20gW3B1c2hMb2NhdGlvbl0gYW5kIGNhbGxzCiAgLy8vIFtpbmxpbmVkTWV0aG9kTmFtZV0uCiAgdm9pZCBhZGRQdXNoKAogICAgICBpbnQgdGFyZ2V0T2Zmc2V0LCBTb3VyY2VMb2NhdGlvbiBwdXNoUG9zaXRpb24sIFN0cmluZyBpbmxpbmVkTWV0aG9kTmFtZSk7CgogIC8vLyBSZWNvcmQgYSByZXR1cm4gb2YgYW4gaW5saW5pbmcgY2FsbCBhdCB0aGUgW3RhcmdldE9mZnNldF0uCiAgLy8vCiAgLy8vIFtpc0VtcHR5XSBpbmRpY2F0ZXMgdGhhdCB0aGlzIHJldHVybiBhbHNvIG1ha2VzIHRoZSBpbmxpbmluZyBzdGFjayBlbXB0eS4KICB2b2lkIGFkZFBvcChpbnQgdGFyZ2V0T2Zmc2V0LCBib29sIGlzRW1wdHkpOwoKICAvLy8gQXBwbGllcyBbZl0gdG8gZXZlcnkgdGFyZ2V0IG9mZnNldCBhbmQgYXNzb2NpYXRlZCBzb3VyY2UgbG9jYXRpb24uCiAgdm9pZCBmb3JFYWNoU291cmNlTG9jYXRpb24oCiAgICAgIHZvaWQgZihpbnQgdGFyZ2V0T2Zmc2V0LCBTb3VyY2VMb2NhdGlvbiBzb3VyY2VMb2NhdGlvbikpOwoKICAvLy8gUmVjb3JkZWQgaW5saW5pbmcgZGF0YSBwZXIgdGFyZ2V0LW9mZnNldC4KICBNYXA8aW50LCBMaXN0PEZyYW1lRW50cnk+PiBnZXQgZnJhbWVNYXJrZXJzOwp9CgpjbGFzcyBfU291cmNlTG9jYXRpb25zSW1wbCBpbXBsZW1lbnRzIFNvdXJjZUxvY2F0aW9ucyB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgZmluYWwgQWJzdHJhY3RDb2RlT3V0cHV0IGNvZGVPdXRwdXQ7CiAgTWFwPGludCwgTGlzdDxTb3VyY2VMb2NhdGlvbj4+IG1hcmtlcnMgPSA8aW50LCBMaXN0PFNvdXJjZUxvY2F0aW9uPj57fTsKICBAb3ZlcnJpZGUKICBNYXA8aW50LCBMaXN0PEZyYW1lRW50cnk+PiBmcmFtZU1hcmtlcnMgPSA8aW50LCBMaXN0PEZyYW1lRW50cnk+Pnt9OwoKICBfU291cmNlTG9jYXRpb25zSW1wbCh0aGlzLm5hbWUsIHRoaXMuY29kZU91dHB1dCk7CgogIEBvdmVycmlkZQogIHZvaWQgYWRkU291cmNlTG9jYXRpb24oaW50IHRhcmdldE9mZnNldCwgU291cmNlTG9jYXRpb24gc291cmNlTG9jYXRpb24pIHsKICAgIGFzc2VydCh0YXJnZXRPZmZzZXQgPD0gY29kZU91dHB1dC5sZW5ndGgpOwogICAgTGlzdDxTb3VyY2VMb2NhdGlvbj4gc291cmNlTG9jYXRpb25zID0KICAgICAgICBtYXJrZXJzLnB1dElmQWJzZW50KHRhcmdldE9mZnNldCwgKCkgPT4gPFNvdXJjZUxvY2F0aW9uPltdKTsKICAgIHNvdXJjZUxvY2F0aW9ucy5hZGQoc291cmNlTG9jYXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRQdXNoKGludCB0YXJnZXRPZmZzZXQsIFNvdXJjZUxvY2F0aW9uIHNvdXJjZUxvY2F0aW9uLAogICAgICBTdHJpbmcgaW5saW5lZE1ldGhvZE5hbWUpIHsKICAgIGFzc2VydCh0YXJnZXRPZmZzZXQgPD0gY29kZU91dHB1dC5sZW5ndGgpOwogICAgTGlzdDxGcmFtZUVudHJ5PiBmcmFtZXMgPSBmcmFtZU1hcmtlcnNbdGFyZ2V0T2Zmc2V0XSA/Pz0gW107CiAgICBmcmFtZXMuYWRkKG5ldyBGcmFtZUVudHJ5LnB1c2goc291cmNlTG9jYXRpb24sIGlubGluZWRNZXRob2ROYW1lKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZFBvcChpbnQgdGFyZ2V0T2Zmc2V0LCBib29sIGlzRW1wdHkpIHsKICAgIGFzc2VydCh0YXJnZXRPZmZzZXQgPD0gY29kZU91dHB1dC5sZW5ndGgpOwogICAgTGlzdDxGcmFtZUVudHJ5PiBmcmFtZXMgPSBmcmFtZU1hcmtlcnNbdGFyZ2V0T2Zmc2V0XSA/Pz0gW107CiAgICBmcmFtZXMuYWRkKG5ldyBGcmFtZUVudHJ5LnBvcChpc0VtcHR5KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hTb3VyY2VMb2NhdGlvbigKICAgICAgdm9pZCBmKGludCB0YXJnZXRPZmZzZXQsIFNvdXJjZUxvY2F0aW9uIHNvdXJjZUxvY2F0aW9uKSkgewogICAgbWFya2Vycy5mb3JFYWNoKChpbnQgdGFyZ2V0T2Zmc2V0LCBMaXN0PFNvdXJjZUxvY2F0aW9uPiBzb3VyY2VMb2NhdGlvbnMpIHsKICAgICAgZm9yIChTb3VyY2VMb2NhdGlvbiBzb3VyY2VMb2NhdGlvbiBpbiBzb3VyY2VMb2NhdGlvbnMpIHsKICAgICAgICBmKHRhcmdldE9mZnNldCwgc291cmNlTG9jYXRpb24pOwogICAgICB9CiAgICB9KTsKICB9CgogIHZvaWQgX21lcmdlKF9Tb3VyY2VMb2NhdGlvbnNJbXBsIG90aGVyKSB7CiAgICBhc3NlcnQobmFtZSA9PSBvdGhlci5uYW1lKTsKICAgIGludCBsZW5ndGggPSBjb2RlT3V0cHV0Lmxlbmd0aDsKICAgIGlmIChvdGhlci5tYXJrZXJzLmxlbmd0aCA+IDApIHsKICAgICAgb3RoZXIubWFya2VycwogICAgICAgICAgLmZvckVhY2goKGludCB0YXJnZXRPZmZzZXQsIExpc3Q8U291cmNlTG9jYXRpb24+IHNvdXJjZUxvY2F0aW9ucykgewogICAgICAgIChtYXJrZXJzW2xlbmd0aCArIHRhcmdldE9mZnNldF0gPz89IDxTb3VyY2VMb2NhdGlvbj5bXSkKICAgICAgICAgICAgLmFkZEFsbChzb3VyY2VMb2NhdGlvbnMpOwogICAgICB9KTsKICAgIH0KCiAgICBpZiAob3RoZXIuZnJhbWVNYXJrZXJzLmxlbmd0aCA+IDApIHsKICAgICAgb3RoZXIuZnJhbWVNYXJrZXJzLmZvckVhY2goKGludCB0YXJnZXRPZmZzZXQsIExpc3Q8RnJhbWVFbnRyeT4gZnJhbWVzKSB7CiAgICAgICAgKGZyYW1lTWFya2Vyc1tsZW5ndGggKyB0YXJnZXRPZmZzZXRdID8/PSA8RnJhbWVFbnRyeT5bXSkuYWRkQWxsKGZyYW1lcyk7CiAgICAgIH0pOwogICAgfQogIH0KfQoKYWJzdHJhY3QgY2xhc3MgU291cmNlTG9jYXRpb25zUHJvdmlkZXIgewogIC8vLyBDcmVhdGVzIGEgW1NvdXJjZUxvY2F0aW9uc10gbWFwcGluZyBpZGVudGlmaWVkIGJ5IFtuYW1lXSBhbmQgYXNzb2NpYXRlcwogIC8vLyBpdCB3aXRoIHRoaXMgY29kZSBvdXRwdXQuCiAgU291cmNlTG9jYXRpb25zIGNyZWF0ZVNvdXJjZUxvY2F0aW9ucyhTdHJpbmcgbmFtZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBzb3VyY2UgbG9jYXRpb24gbWFwcGluZ3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29kZSBvdXRwdXQuCiAgSXRlcmFibGU8U291cmNlTG9jYXRpb25zPiBnZXQgc291cmNlTG9jYXRpb25zOwp9CgphYnN0cmFjdCBjbGFzcyBDb2RlT3V0cHV0IGltcGxlbWVudHMgU291cmNlTG9jYXRpb25zUHJvdmlkZXIgewogIC8vLyBXcml0ZSBbdGV4dF0gdG8gdGhpcyBvdXRwdXQuCiAgLy8vCiAgLy8vIElmIHRoZSBvdXRwdXQgaXMgY2xvc2VkLCBhIFtTdGF0ZUVycm9yXSBpcyB0aHJvd24uCiAgdm9pZCBhZGQoU3RyaW5nIHRleHQpOwoKICAvLy8gQWRkcyB0aGUgY29udGVudCBvZiBbYnVmZmVyXSB0byB0aGUgb3V0cHV0IGFuZCBhZGRzIGl0cyBtYXJrZXJzIHRvCiAgLy8vIFttYXJrZXJzXS4KICAvLy8KICAvLy8gSWYgdGhlIG91dHB1dCBpcyBjbG9zZWQsIGEgW1N0YXRlRXJyb3JdIGlzIHRocm93bi4KICB2b2lkIGFkZEJ1ZmZlcihDb2RlQnVmZmVyIGJ1ZmZlcik7CgogIC8vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBjdXJyZW50bHkgd3JpdHRlbiB0byB0aGlzIG91dHB1dC4KICBpbnQgZ2V0IGxlbmd0aDsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoaXMgb3V0cHV0IGhhcyBiZWVuIGNsb3NlZC4KICBib29sIGdldCBpc0Nsb3NlZDsKCiAgLy8vIENsb3NlcyB0aGUgb3V0cHV0LiBGdXJ0aGVyIHdyaXRlcyB3aWxsIGNhdXNlIGEgW1N0YXRlRXJyb3JdLgogIHZvaWQgY2xvc2UoKTsKfQoKYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RDb2RlT3V0cHV0IGV4dGVuZHMgQ29kZU91dHB1dCB7CiAgTWFwPFN0cmluZywgX1NvdXJjZUxvY2F0aW9uc0ltcGw+IHNvdXJjZUxvY2F0aW9uc01hcCA9CiAgICAgIDxTdHJpbmcsIF9Tb3VyY2VMb2NhdGlvbnNJbXBsPnt9OwogIEBvdmVycmlkZQogIGJvb2wgaXNDbG9zZWQgPSBmYWxzZTsKCiAgdm9pZCBfYWRkSW50ZXJuYWwoU3RyaW5nIHRleHQpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZChTdHJpbmcgdGV4dCkgewogICAgaWYgKGlzQ2xvc2VkKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJDb2RlIG91dHB1dCBpcyBjbG9zZWQuIFRyeWluZyB0byB3cml0ZSAnJHRleHQnLiIpOwogICAgfQogICAgX2FkZEludGVybmFsKHRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRCdWZmZXIoQ29kZUJ1ZmZlciBvdGhlcikgewogICAgb3RoZXIuc291cmNlTG9jYXRpb25zTWFwLmZvckVhY2goKFN0cmluZyBuYW1lLCBfU291cmNlTG9jYXRpb25zSW1wbCBvdGhlcikgewogICAgICBjcmVhdGVTb3VyY2VMb2NhdGlvbnMobmFtZSkuX21lcmdlKG90aGVyKTsKICAgIH0pOwogICAgaWYgKCFvdGhlci5pc0Nsb3NlZCkgewogICAgICBvdGhlci5jbG9zZSgpOwogICAgfQogICAgX2FkZEludGVybmFsKG90aGVyLmdldFRleHQoKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsb3NlKCkgewogICAgaWYgKGlzQ2xvc2VkKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJDb2RlIG91dHB1dCBpcyBhbHJlYWR5IGNsb3NlZC4iKTsKICAgIH0KICAgIGlzQ2xvc2VkID0gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPFNvdXJjZUxvY2F0aW9ucz4gZ2V0IHNvdXJjZUxvY2F0aW9ucyA9PiBzb3VyY2VMb2NhdGlvbnNNYXAudmFsdWVzOwoKICBAb3ZlcnJpZGUKICBfU291cmNlTG9jYXRpb25zSW1wbCBjcmVhdGVTb3VyY2VMb2NhdGlvbnMoU3RyaW5nIG5hbWUpIHsKICAgIHJldHVybiBzb3VyY2VMb2NhdGlvbnNNYXBbbmFtZV0gPz89IG5ldyBfU291cmNlTG9jYXRpb25zSW1wbChuYW1lLCB0aGlzKTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIEJ1ZmZlcmVkQ29kZU91dHB1dCB7CiAgU3RyaW5nIGdldFRleHQoKTsKfQoKLy8vIFtDb2RlT3V0cHV0XSB1c2luZyBhIFtTdHJpbmdCdWZmZXJdIGFzIGJhY2tlbmQuCmNsYXNzIENvZGVCdWZmZXIgZXh0ZW5kcyBBYnN0cmFjdENvZGVPdXRwdXQgaW1wbGVtZW50cyBCdWZmZXJlZENvZGVPdXRwdXQgewogIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CgogIEBvdmVycmlkZQogIHZvaWQgX2FkZEludGVybmFsKFN0cmluZyB0ZXh0KSB7CiAgICBidWZmZXIud3JpdGUodGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGxlbmd0aCA9PiBidWZmZXIubGVuZ3RoOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0VGV4dCgpIHsKICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHRocm93ICJEb24ndCB1c2UgQ29kZUJ1ZmZlci50b1N0cmluZygpIHNpbmNlIGl0IGRyb3BzIHNvdXJjZW1hcCBkYXRhLiI7CiAgfQp9CgovLy8gW0NvZGVPdXRwdXRdIHVzaW5nIGEgW0NvbXBpbGF0aW9uT3V0cHV0XSBhcyBiYWNrZW5kLgpjbGFzcyBTdHJlYW1Db2RlT3V0cHV0IGV4dGVuZHMgQWJzdHJhY3RDb2RlT3V0cHV0IHsKICBAb3ZlcnJpZGUKICBpbnQgbGVuZ3RoID0gMDsKICBmaW5hbCBPdXRwdXRTaW5rIG91dHB1dDsKICBmaW5hbCBMaXN0PENvZGVPdXRwdXRMaXN0ZW5lcj4gX2xpc3RlbmVyczsKCiAgU3RyZWFtQ29kZU91dHB1dCh0aGlzLm91dHB1dCwgW3RoaXMuX2xpc3RlbmVyc10pOwoKICBAb3ZlcnJpZGUKICB2b2lkIF9hZGRJbnRlcm5hbChTdHJpbmcgdGV4dCkgewogICAgb3V0cHV0LmFkZCh0ZXh0KTsKICAgIGxlbmd0aCArPSB0ZXh0Lmxlbmd0aDsKICAgIGlmIChfbGlzdGVuZXJzICE9IG51bGwpIHsKICAgICAgX2xpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4gbGlzdGVuZXIub25UZXh0KHRleHQpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2xvc2UoKSB7CiAgICBvdXRwdXQuY2xvc2UoKTsKICAgIHN1cGVyLmNsb3NlKCk7CiAgICBpZiAoX2xpc3RlbmVycyAhPSBudWxsKSB7CiAgICAgIF9saXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IGxpc3RlbmVyLm9uRG9uZShsZW5ndGgpKTsKICAgIH0KICB9Cn0KgPQATk48AR0BIiIBMiQxHAFIGwIBSiIESUo2ITATAT9LATUGRBsQUAFBBlAvAUkeQAEwLwIBOAwVJ0oMRwE0AQxMLytFKQQBDEAiL0FIBAEMMC9BLQQBDB5BTz8pCAgEASwgJCQUTkAmCgYBKU9RCgYEAgEpTiA2AU0xAgE/IwY5GQFJEQY5JQFJEgE1FQFDEAIBNzkoDBkBIgEMGhRPBhgEAQwlUTEIGxUGIwQBDBEUPgYVBAEMTgEMPE4EAgEkFAIBNEwsAQwjGAQBDCMBDBUeBAEMFkwEAgE5NAwSGy0BNAEMIxYbHj8GBAEMERQTHkEGBAIBKHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lvL2NvZGVfb3V0cHV0LmRhcnQ0c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL3NjYW5uZXIvaW50ZXJuZXIuZGFydILhLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8qKgogKiBUaGUgaW50ZXJmYWNlIGBJbnRlcm5lcmAgZGVmaW5lcyB0aGUgYmVoYXZpb3Igb2Ygb2JqZWN0cyB0aGF0IGNhbiBpbnRlcm4KICogc3RyaW5ncy4KICovCmFic3RyYWN0IGNsYXNzIEludGVybmVyIHsKICAvKioKICAgKiBSZXR1cm4gYSBzdHJpbmcgdGhhdCBpcyBpZGVudGljYWwgdG8gYWxsIG9mIHRoZSBvdGhlciBzdHJpbmdzIHRoYXQgaGF2ZQogICAqIGJlZW4gaW50ZXJuZWQgdGhhdCBhcmUgZXF1YWwgdG8gdGhlIGdpdmVuIFtzdHJpbmddLgogICAqLwogIFN0cmluZyBpbnRlcm4oU3RyaW5nIHN0cmluZyk7Cn0KCi8qKgogKiBUaGUgY2xhc3MgYE51bGxJbnRlcm5lcmAgaW1wbGVtZW50cyBhbiBpbnRlcm5lciB0aGF0IGRvZXMgbm90aGluZyAoZG9lcyBub3QKICogYWN0dWFsbHkgaW50ZXJuIGFueSBzdHJpbmdzKS4KICovCmNsYXNzIE51bGxJbnRlcm5lciBpbXBsZW1lbnRzIEludGVybmVyIHsKICBAb3ZlcnJpZGUKICBTdHJpbmcgaW50ZXJuKFN0cmluZyBzdHJpbmcpID0+IHN0cmluZzsKfQoaAE5OPAEETAwEGgZNOQYgAgEETyEEKQwqAgErcGFja2FnZTpmcm9udF9lbmQvc3JjL3NjYW5uZXIvaW50ZXJuZXIuZGFydCdzZGtyb290Oi9wa2cva2VybmVsL2xpYi91dGlsL2dyYXBoLmRhcnSKkC8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UubWQgZmlsZS4KCmxpYnJhcnkgZmFzdGEuZ3JhcGg7CgphYnN0cmFjdCBjbGFzcyBHcmFwaDxUPiB7CiAgSXRlcmFibGU8VD4gZ2V0IHZlcnRpY2VzOwoKICBJdGVyYWJsZTxUPiBuZWlnaGJvcnNPZihUIHZlcnRleCk7Cn0KCi8vLyBDb21wdXRlcyB0aGUgc3Ryb25nbHkgY29ubmVjdGVkIGNvbXBvbmVudHMgb2YgW2dyYXBoXS4KLy8vCi8vLyBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIFtEaWprc3RyYSdzIHBhdGgtYmFzZWQgc3Ryb25nIGNvbXBvbmVudAovLy8gYWxnb3JpdGhtXQovLy8gKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1BhdGgtYmFzZWRfc3Ryb25nX2NvbXBvbmVudF9hbGdvcml0aG0jRGVzY3JpcHRpb24pLgpMaXN0PExpc3Q8VD4+IGNvbXB1dGVTdHJvbmdDb21wb25lbnRzPFQ+KEdyYXBoPFQ+IGdyYXBoKSB7CiAgTGlzdDxMaXN0PFQ+PiByZXN1bHQgPSA8TGlzdDxUPj5bXTsKICBpbnQgY291bnQgPSAwOwogIE1hcDxULCBpbnQ+IHByZW9yZGVyTnVtYmVycyA9IDxULCBpbnQ+e307CiAgTGlzdDxUPiB1bmFzc2lnbmVkID0gPFQ+W107CiAgTGlzdDxUPiBjYW5kaWRhdGVzID0gPFQ+W107CiAgU2V0PFQ+IGFzc2lnbmVkID0gbmV3IFNldDxUPigpOwoKICB2b2lkIHJlY3Vyc2l2ZWx5U2VhcmNoKFQgdmVydGV4KSB7CiAgICAvLyBTdGVwIDE6IFNldCB0aGUgcHJlb3JkZXIgbnVtYmVyIG9mIFt2ZXJ0ZXhdIHRvIFtjb3VudF0sIGFuZCBpbmNyZW1lbnQKICAgIC8vIFtjb3VudF0uCiAgICBwcmVvcmRlck51bWJlcnNbdmVydGV4XSA9IGNvdW50Kys7CgogICAgLy8gU3RlcCAyOiBQdXNoIFt2ZXJ0ZXhdIG9udG8gW3VuYXNzaWduZWRdIGFuZCBhbHNvIG9udG8gW2NhbmRpZGF0ZXNdLgogICAgdW5hc3NpZ25lZC5hZGQodmVydGV4KTsKICAgIGNhbmRpZGF0ZXMuYWRkKHZlcnRleCk7CgogICAgLy8gU3RlcCAzOiBGb3IgZWFjaCBlZGdlIGZyb20gW3ZlcnRleF0gdG8gYSBuZWlnaGJvcmluZyB2ZXJ0ZXggW25laWdoYm9yXToKICAgIGZvciAoVCBuZWlnaGJvciBpbiBncmFwaC5uZWlnaGJvcnNPZih2ZXJ0ZXgpKSB7CiAgICAgIGludCBuZWlnaGJvclByZW9yZGVyTnVtYmVyID0gcHJlb3JkZXJOdW1iZXJzW25laWdoYm9yXTsKICAgICAgaWYgKG5laWdoYm9yUHJlb3JkZXJOdW1iZXIgPT0gbnVsbCkgewogICAgICAgIC8vIElmIHRoZSBwcmVvcmRlciBudW1iZXIgb2YgW25laWdoYm9yXSBoYXMgbm90IHlldCBiZWVuIGFzc2lnbmVkLAogICAgICAgIC8vIHJlY3Vyc2l2ZWx5IHNlYXJjaCBbbmVpZ2hib3JdOwogICAgICAgIHJlY3Vyc2l2ZWx5U2VhcmNoKG5laWdoYm9yKTsKICAgICAgfSBlbHNlIGlmICghYXNzaWduZWQuY29udGFpbnMobmVpZ2hib3IpKSB7CiAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiBbbmVpZ2hib3JdIGhhcyBub3QgeWV0IGJlZW4gYXNzaWduZWQgdG8gYSBzdHJvbmdseQogICAgICAgIC8vIGNvbm5lY3RlZCBjb21wb25lbnQ6CiAgICAgICAgLy8KICAgICAgICAvLyAqIFJlcGVhdGVkbHkgcG9wIHZlcnRpY2VzIGZyb20gW2NhbmRpZGF0ZXNdIHVudGlsIHRoZSB0b3AgZWxlbWVudCBvZgogICAgICAgIC8vICAgW2NhbmRpZGF0ZXNdIGhhcyBhIHByZW9yZGVyIG51bWJlciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlCiAgICAgICAgLy8gICBwcmVvcmRlciBudW1iZXIgb2YgW25laWdoYm9yXS4KICAgICAgICB3aGlsZSAocHJlb3JkZXJOdW1iZXJzW2NhbmRpZGF0ZXMubGFzdF0gPiBuZWlnaGJvclByZW9yZGVyTnVtYmVyKSB7CiAgICAgICAgICBjYW5kaWRhdGVzLnJlbW92ZUxhc3QoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIC8vIFN0ZXAgNDogSWYgW3ZlcnRleF0gaXMgdGhlIHRvcCBlbGVtZW50IG9mIFtjYW5kaWRhdGVzXToKICAgIGlmIChjYW5kaWRhdGVzLmxhc3QgPT0gdmVydGV4KSB7CiAgICAgIC8vIFBvcCB2ZXJ0aWNlcyBmcm9tIFt1bmFzc2lnbmVkXSB1bnRpbCBbdmVydGV4XSBoYXMgYmVlbiBwb3BwZWQsIGFuZAogICAgICAvLyBhc3NpZ24gdGhlIHBvcHBlZCB2ZXJ0aWNlcyB0byBhIG5ldyBjb21wb25lbnQuCiAgICAgIExpc3Q8VD4gY29tcG9uZW50ID0gPFQ+W107CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgVCB0b3AgPSB1bmFzc2lnbmVkLnJlbW92ZUxhc3QoKTsKICAgICAgICBjb21wb25lbnQuYWRkKHRvcCk7CiAgICAgICAgYXNzaWduZWQuYWRkKHRvcCk7CiAgICAgICAgaWYgKHRvcCA9PSB2ZXJ0ZXgpIGJyZWFrOwogICAgICB9CiAgICAgIHJlc3VsdC5hZGQoY29tcG9uZW50KTsKCiAgICAgIC8vIFBvcCBbdmVydGV4XSBmcm9tIFtjYW5kaWRhdGVzXS4KICAgICAgY2FuZGlkYXRlcy5yZW1vdmVMYXN0KCk7CiAgICB9CiAgfQoKICBmb3IgKFQgdmVydGV4IGluIGdyYXBoLnZlcnRpY2VzKSB7CiAgICBpZiAocHJlb3JkZXJOdW1iZXJzW3ZlcnRleF0gPT0gbnVsbCkgewogICAgICByZWN1cnNpdmVseVNlYXJjaCh2ZXJ0ZXgpOwogICAgfQogIH0KCiAgcmV0dXJuIHJlc3VsdDsKfQpRAE1OPwEVARocASUCATsETA9XOyYRLB4eIgElTRAnAUscHAFPND4sSyolMUwgC1BKLEwjCggGPyVMOCEVKRwbIggdASkfBgQBJSshBgQBEQIBHnBhY2thZ2U6a2VybmVsL3V0aWwvZ3JhcGguZGFydEhzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL2NsYXNzX2hpZXJhcmNoeV9idWlsZGVyLmRhcnTAAWN9Ly8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuY2xhc3NfaGllcmFyY2h5X2J1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIENsYXNzLAogICAgICAgIERhcnRUeXBlLAogICAgICAgIEZpZWxkLAogICAgICAgIEZ1bmN0aW9uTm9kZSwKICAgICAgICBJbnRlcmZhY2VUeXBlLAogICAgICAgIEludmFsaWRUeXBlLAogICAgICAgIE1lbWJlciwKICAgICAgICBOYW1lLAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBQcm9jZWR1cmVLaW5kLAogICAgICAgIFN1cGVydHlwZSwKICAgICAgICBUeXBlUGFyYW1ldGVyLAogICAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlLAogICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb247CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBzaG93IENsYXNzSGllcmFyY2h5OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIHNob3cgQ29yZVR5cGVzOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2FsZ2VicmEuZGFydCcgc2hvdyBTdWJzdGl0dXRpb247CgppbXBvcnQgJy4uL2RpbGwvZGlsbF9tZW1iZXJfYnVpbGRlci5kYXJ0JyBzaG93IERpbGxNZW1iZXJCdWlsZGVyOwoKaW1wb3J0ICcuLi9sb2FkZXIuZGFydCcgc2hvdyBMb2FkZXI7CgppbXBvcnQgJy4uL21lc3NhZ2VzLmRhcnQnCiAgICBzaG93CiAgICAgICAgTG9jYXRlZE1lc3NhZ2UsCiAgICAgICAgTWVzc2FnZSwKICAgICAgICBtZXNzYWdlRGVjbGFyZWRNZW1iZXJDb25mbGljdHNXaXRoSW5oZXJpdGVkTWVtYmVyLAogICAgICAgIG1lc3NhZ2VEZWNsYXJlZE1lbWJlckNvbmZsaWN0c1dpdGhJbmhlcml0ZWRNZW1iZXJDYXVzZSwKICAgICAgICBtZXNzYWdlSW5oZXJpdGVkTWVtYmVyc0NvbmZsaWN0LAogICAgICAgIG1lc3NhZ2VJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3RDYXVzZTEsCiAgICAgICAgbWVzc2FnZUluaGVyaXRlZE1lbWJlcnNDb25mbGljdENhdXNlMiwKICAgICAgICBtZXNzYWdlU3RhdGljQW5kSW5zdGFuY2VDb25mbGljdCwKICAgICAgICBtZXNzYWdlU3RhdGljQW5kSW5zdGFuY2VDb25mbGljdENhdXNlLAogICAgICAgIHRlbXBsYXRlQ2FudEluZmVyUmV0dXJuVHlwZUR1ZVRvSW5jb25zaXN0ZW50T3ZlcnJpZGVzLAogICAgICAgIHRlbXBsYXRlQ2FudEluZmVyVHlwZUR1ZVRvSW5jb25zaXN0ZW50T3ZlcnJpZGVzLAogICAgICAgIHRlbXBsYXRlQ29tYmluZWRNZW1iZXJTaWduYXR1cmVGYWlsZWQsCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb24sCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25DYXVzZSwKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvblVzZSwKICAgICAgICB0ZW1wbGF0ZU1pc3NpbmdJbXBsZW1lbnRhdGlvbkNhdXNlLAogICAgICAgIHRlbXBsYXRlTWlzc2luZ0ltcGxlbWVudGF0aW9uTm90QWJzdHJhY3Q7CgppbXBvcnQgJy4uL25hbWVzLmRhcnQnIHNob3cgbm9TdWNoTWV0aG9kTmFtZTsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyB1bmhhbmRsZWQ7CgppbXBvcnQgJy4uL3Njb3BlLmRhcnQnIHNob3cgU2NvcGU7CgppbXBvcnQgJy4uL3NvdXJjZS9zb3VyY2VfbGlicmFyeV9idWlsZGVyLmRhcnQnIHNob3cgU291cmNlTGlicmFyeUJ1aWxkZXI7CgppbXBvcnQgJy4uL3NvdXJjZS9zb3VyY2VfbG9hZGVyLmRhcnQnIHNob3cgU291cmNlTG9hZGVyOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS9zdGFuZGFyZF9ib3VuZHMuZGFydCcgc2hvdyBTdGFuZGFyZEJvdW5kczsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvdHlwZV9jb25zdHJhaW50X2dhdGhlcmVyLmRhcnQnCiAgICBzaG93IFR5cGVDb25zdHJhaW50R2F0aGVyZXI7CgppbXBvcnQgJy4uL3R5cGVfaW5mZXJlbmNlL3R5cGVfaW5mZXJyZXIuZGFydCcgc2hvdyBNaXhpbkluZmVycmVyOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX3NjaGVtYS5kYXJ0JyBzaG93IFVua25vd25UeXBlOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX3NjaGVtYV9lbnZpcm9ubWVudC5kYXJ0JyBzaG93IFR5cGVDb25zdHJhaW50OwoKaW1wb3J0ICdmb3J3YXJkaW5nX25vZGUuZGFydCcgc2hvdyBGb3J3YXJkaW5nTm9kZTsKCmltcG9ydCAna2VybmVsX2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBCdWlsZGVyLAogICAgICAgIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIsCiAgICAgICAgSW1wbGljaXRGaWVsZFR5cGUsCiAgICAgICAgQ2xhc3NCdWlsZGVyLAogICAgICAgIEZpZWxkQnVpbGRlciwKICAgICAgICBOYW1lZFR5cGVCdWlsZGVyLAogICAgICAgIFByb2NlZHVyZUJ1aWxkZXIsCiAgICAgICAgTGlicmFyeUJ1aWxkZXIsCiAgICAgICAgTWVtYmVyQnVpbGRlciwKICAgICAgICBUeXBlQnVpbGRlciwKICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyOwoKaW1wb3J0ICd0eXBlcy5kYXJ0JyBzaG93IFR5cGVzOwoKY29uc3QgRGVidWdMb2dnZXIgZGVidWcgPQogICAgY29uc3QgYm9vbC5mcm9tRW52aXJvbm1lbnQoImRlYnVnLmhpZXJhcmNoeSIpID8gY29uc3QgRGVidWdMb2dnZXIoKSA6IG51bGw7CgpjbGFzcyBEZWJ1Z0xvZ2dlciB7CiAgY29uc3QgRGVidWdMb2dnZXIoKTsKICB2b2lkIGxvZyhPYmplY3QgbWVzc2FnZSkgPT4gcHJpbnQobWVzc2FnZSk7Cn0KCmludCBjb21wYXJlRGVjbGFyYXRpb25zKEJ1aWxkZXIgYSwgQnVpbGRlciBiKSB7CiAgcmV0dXJuIENsYXNzSGllcmFyY2h5LmNvbXBhcmVNZW1iZXJzKGEudGFyZ2V0LCBiLnRhcmdldCk7Cn0KClByb2NlZHVyZUtpbmQgbWVtYmVyS2luZChNZW1iZXIgbWVtYmVyKSB7CiAgcmV0dXJuIG1lbWJlciBpcyBQcm9jZWR1cmUgPyBtZW1iZXIua2luZCA6IG51bGw7Cn0KCmJvb2wgaXNOYW1lVmlzaWJsZUluKE5hbWUgbmFtZSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeUJ1aWxkZXIpIHsKICByZXR1cm4gIW5hbWUuaXNQcml2YXRlIHx8IG5hbWUubGlicmFyeSA9PSBsaWJyYXJ5QnVpbGRlci5saWJyYXJ5Owp9CgovLy8gUmV0dXJucyB0cnVlIGlmIFthXSBpcyBhIGNsYXNzIG1lbWJlciBjb25mbGljdCB3aXRoIFtiXS4gIFthXSBpcyBhc3N1bWVkIHRvCi8vLyBiZSBkZWNsYXJlZCBpbiB0aGUgY2xhc3MsIFtiXSBpcyBhc3N1bWVkIHRvIGJlIGluaGVyaXRlZC4KLy8vCi8vLyBTZWUgdGhlIHNlY3Rpb24gbmFtZWQgIkNsYXNzIE1lbWJlciBDb25mbGljdHMiIGluIFtEYXJ0IFByb2dyYW1taW5nCi8vLyBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uXSgKLy8vIC4uLy4uLy4uLy4uLy4uLy4uL2RvY3MvbGFuZ3VhZ2UvZGFydExhbmdTcGVjLnRleCNjbGFzc01lbWJlckNvbmZsaWN0cykuCmJvb2wgaXNJbmhlcml0YW5jZUNvbmZsaWN0KEJ1aWxkZXIgYSwgQnVpbGRlciBiKSB7CiAgaWYgKGEuaXNTdGF0aWMpIHJldHVybiB0cnVlOwogIGlmIChtZW1iZXJLaW5kKGEudGFyZ2V0KSA9PSBtZW1iZXJLaW5kKGIudGFyZ2V0KSkgcmV0dXJuIGZhbHNlOwogIGlmIChhLmlzRmllbGQpIHJldHVybiAhKGIuaXNGaWVsZCB8fCBiLmlzR2V0dGVyIHx8IGIuaXNTZXR0ZXIpOwogIGlmIChiLmlzRmllbGQpIHJldHVybiAhKGEuaXNGaWVsZCB8fCBhLmlzR2V0dGVyIHx8IGEuaXNTZXR0ZXIpOwogIGlmIChhLmlzU2V0dGVyKSByZXR1cm4gIShiLmlzR2V0dGVyIHx8IGIuaXNTZXR0ZXIpOwogIGlmIChiLmlzU2V0dGVyKSByZXR1cm4gIShhLmlzR2V0dGVyIHx8IGEuaXNTZXR0ZXIpOwogIGlmIChhIGlzIEludGVyZmFjZUNvbmZsaWN0IHx8IGIgaXMgSW50ZXJmYWNlQ29uZmxpY3QpIHJldHVybiBmYWxzZTsKICByZXR1cm4gdHJ1ZTsKfQoKYm9vbCBpbXBsaWVzU2V0dGVyKEJ1aWxkZXIgZGVjbGFyYXRpb24pIHsKICByZXR1cm4gZGVjbGFyYXRpb24uaXNGaWVsZCAmJiAhKGRlY2xhcmF0aW9uLmlzRmluYWwgfHwgZGVjbGFyYXRpb24uaXNDb25zdCk7Cn0KCmJvb2wgaGFzU2FtZVNpZ25hdHVyZShGdW5jdGlvbk5vZGUgYSwgRnVuY3Rpb25Ob2RlIGIpIHsKICBMaXN0PFR5cGVQYXJhbWV0ZXI+IGFUeXBlUGFyYW1ldGVycyA9IGEudHlwZVBhcmFtZXRlcnM7CiAgTGlzdDxUeXBlUGFyYW1ldGVyPiBiVHlwZVBhcmFtZXRlcnMgPSBiLnR5cGVQYXJhbWV0ZXJzOwogIGludCB0eXBlUGFyYW1ldGVyQ291bnQgPSBhVHlwZVBhcmFtZXRlcnMubGVuZ3RoOwogIGlmICh0eXBlUGFyYW1ldGVyQ291bnQgIT0gYlR5cGVQYXJhbWV0ZXJzLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogIFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb247CiAgaWYgKHR5cGVQYXJhbWV0ZXJDb3VudCAhPSAwKSB7CiAgICBMaXN0PERhcnRUeXBlPiB0eXBlcyA9IG5ldyBMaXN0PERhcnRUeXBlPih0eXBlUGFyYW1ldGVyQ291bnQpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlUGFyYW1ldGVyQ291bnQ7IGkrKykgewogICAgICB0eXBlc1tpXSA9IG5ldyBUeXBlUGFyYW1ldGVyVHlwZShhVHlwZVBhcmFtZXRlcnNbaV0pOwogICAgfQogICAgc3Vic3RpdHV0aW9uID0gU3Vic3RpdHV0aW9uLmZyb21QYWlycyhiVHlwZVBhcmFtZXRlcnMsIHR5cGVzKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVBhcmFtZXRlckNvdW50OyBpKyspIHsKICAgICAgRGFydFR5cGUgYUJvdW5kID0gYVR5cGVQYXJhbWV0ZXJzW2ldLmJvdW5kOwogICAgICBEYXJ0VHlwZSBiQm91bmQgPSBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoYlR5cGVQYXJhbWV0ZXJzW2ldLmJvdW5kKTsKICAgICAgaWYgKGFCb3VuZCAhPSBiQm91bmQpIHJldHVybiBmYWxzZTsKICAgIH0KICB9CgogIGlmIChhLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQgIT0gYi5yZXF1aXJlZFBhcmFtZXRlckNvdW50KSByZXR1cm4gZmFsc2U7CiAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBhUG9zaXRpb25hbFBhcmFtZXRlcnMgPSBhLnBvc2l0aW9uYWxQYXJhbWV0ZXJzOwogIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gYlBvc2l0aW9uYWxQYXJhbWV0ZXJzID0gYi5wb3NpdGlvbmFsUGFyYW1ldGVyczsKICBpZiAoYVBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCAhPSBiUG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGZvciAoaW50IGkgPSAwOyBpIDwgYVBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGFQYXJhbWV0ZXIgPSBhUG9zaXRpb25hbFBhcmFtZXRlcnNbaV07CiAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGJQYXJhbWV0ZXIgPSBiUG9zaXRpb25hbFBhcmFtZXRlcnNbaV07CiAgICBpZiAoYVBhcmFtZXRlci5pc0NvdmFyaWFudCAhPSBiUGFyYW1ldGVyLmlzQ292YXJpYW50KSByZXR1cm4gZmFsc2U7CiAgICBEYXJ0VHlwZSBhVHlwZSA9IGFQYXJhbWV0ZXIudHlwZTsKICAgIERhcnRUeXBlIGJUeXBlID0gYlBhcmFtZXRlci50eXBlOwogICAgaWYgKHN1YnN0aXR1dGlvbiAhPSBudWxsKSB7CiAgICAgIGJUeXBlID0gc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGJUeXBlKTsKICAgIH0KICAgIGlmIChhVHlwZSAhPSBiVHlwZSkgcmV0dXJuIGZhbHNlOwogIH0KCiAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBhTmFtZWRQYXJhbWV0ZXJzID0gYS5uYW1lZFBhcmFtZXRlcnM7CiAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBiTmFtZWRQYXJhbWV0ZXJzID0gYi5uYW1lZFBhcmFtZXRlcnM7CiAgaWYgKGFOYW1lZFBhcmFtZXRlcnMubGVuZ3RoICE9IGJOYW1lZFBhcmFtZXRlcnMubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBhTmFtZWRQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGFQYXJhbWV0ZXIgPSBhTmFtZWRQYXJhbWV0ZXJzW2ldOwogICAgVmFyaWFibGVEZWNsYXJhdGlvbiBiUGFyYW1ldGVyID0gYk5hbWVkUGFyYW1ldGVyc1tpXTsKICAgIGlmIChhUGFyYW1ldGVyLmlzQ292YXJpYW50ICE9IGJQYXJhbWV0ZXIuaXNDb3ZhcmlhbnQpIHJldHVybiBmYWxzZTsKICAgIGlmIChhUGFyYW1ldGVyLm5hbWUgIT0gYlBhcmFtZXRlci5uYW1lKSByZXR1cm4gZmFsc2U7CiAgICBEYXJ0VHlwZSBhVHlwZSA9IGFQYXJhbWV0ZXIudHlwZTsKICAgIERhcnRUeXBlIGJUeXBlID0gYlBhcmFtZXRlci50eXBlOwogICAgaWYgKHN1YnN0aXR1dGlvbiAhPSBudWxsKSB7CiAgICAgIGJUeXBlID0gc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGJUeXBlKTsKICAgIH0KICAgIGlmIChhVHlwZSAhPSBiVHlwZSkgcmV0dXJuIGZhbHNlOwogIH0KCiAgRGFydFR5cGUgYVJldHVyblR5cGUgPSBhLnJldHVyblR5cGU7CiAgRGFydFR5cGUgYlJldHVyblR5cGUgPSBiLnJldHVyblR5cGU7CiAgaWYgKHN1YnN0aXR1dGlvbiAhPSBudWxsKSB7CiAgICBiUmV0dXJuVHlwZSA9IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShiUmV0dXJuVHlwZSk7CiAgfQoKICByZXR1cm4gYVJldHVyblR5cGUgPT0gYlJldHVyblR5cGU7Cn0KCmNsYXNzIENsYXNzSGllcmFyY2h5QnVpbGRlciB7CiAgZmluYWwgTWFwPENsYXNzLCBDbGFzc0hpZXJhcmNoeU5vZGU+IG5vZGVzID0gPENsYXNzLCBDbGFzc0hpZXJhcmNoeU5vZGU+e307CgogIGZpbmFsIENsYXNzQnVpbGRlciBvYmplY3RDbGFzc0J1aWxkZXI7CgogIGZpbmFsIExvYWRlciBsb2FkZXI7CgogIGZpbmFsIENsYXNzIG9iamVjdENsYXNzOwoKICBmaW5hbCBDbGFzcyBmdXR1cmVDbGFzczsKCiAgZmluYWwgQ2xhc3MgZnV0dXJlT3JDbGFzczsKCiAgZmluYWwgQ2xhc3MgZnVuY3Rpb25DbGFzczsKCiAgZmluYWwgQ2xhc3MgbnVsbENsYXNzOwoKICBmaW5hbCBMaXN0PERlbGF5ZWRPdmVycmlkZUNoZWNrPiBvdmVycmlkZUNoZWNrcyA9IDxEZWxheWVkT3ZlcnJpZGVDaGVjaz5bXTsKCiAgZmluYWwgTGlzdDxEZWxheWVkTWVtYmVyPiBkZWxheWVkTWVtYmVyQ2hlY2tzID0gPERlbGF5ZWRNZW1iZXI+W107CgogIC8vIFRPRE8oYWhlKTogUmVtb3ZlIHRoaXMuCiAgZmluYWwgQ29yZVR5cGVzIGNvcmVUeXBlczsKCiAgVHlwZXMgdHlwZXM7CgogIENsYXNzSGllcmFyY2h5QnVpbGRlcih0aGlzLm9iamVjdENsYXNzQnVpbGRlciwgdGhpcy5sb2FkZXIsIHRoaXMuY29yZVR5cGVzKQogICAgICA6IG9iamVjdENsYXNzID0gb2JqZWN0Q2xhc3NCdWlsZGVyLmNscywKICAgICAgICBmdXR1cmVDbGFzcyA9IGNvcmVUeXBlcy5mdXR1cmVDbGFzcywKICAgICAgICBmdXR1cmVPckNsYXNzID0gY29yZVR5cGVzLmZ1dHVyZU9yQ2xhc3MsCiAgICAgICAgZnVuY3Rpb25DbGFzcyA9IGNvcmVUeXBlcy5mdW5jdGlvbkNsYXNzLAogICAgICAgIG51bGxDbGFzcyA9IGNvcmVUeXBlcy5udWxsQ2xhc3MgewogICAgdHlwZXMgPSBuZXcgVHlwZXModGhpcyk7CiAgfQoKICBDbGFzc0hpZXJhcmNoeU5vZGUgZ2V0Tm9kZUZyb21DbGFzcyhDbGFzc0J1aWxkZXIgY2xhc3NCdWlsZGVyKSB7CiAgICByZXR1cm4gbm9kZXNbY2xhc3NCdWlsZGVyLmNsc10gPz89CiAgICAgICAgbmV3IENsYXNzSGllcmFyY2h5Tm9kZUJ1aWxkZXIodGhpcywgY2xhc3NCdWlsZGVyKS5idWlsZCgpOwogIH0KCiAgQ2xhc3NIaWVyYXJjaHlOb2RlIGdldE5vZGVGcm9tVHlwZShUeXBlQnVpbGRlciB0eXBlKSB7CiAgICBDbGFzc0J1aWxkZXIgY2xzID0gZ2V0Q2xhc3ModHlwZSk7CiAgICByZXR1cm4gY2xzID09IG51bGwgPyBudWxsIDogZ2V0Tm9kZUZyb21DbGFzcyhjbHMpOwogIH0KCiAgQ2xhc3NIaWVyYXJjaHlOb2RlIGdldE5vZGVGcm9tS2VybmVsQ2xhc3MoQ2xhc3MgY2xzKSB7CiAgICByZXR1cm4gbm9kZXNbY2xzXSA/PwogICAgICAgIGdldE5vZGVGcm9tQ2xhc3MobG9hZGVyLmNvbXB1dGVDbGFzc0J1aWxkZXJGcm9tVGFyZ2V0Q2xhc3MoY2xzKSk7CiAgfQoKICBUeXBlQnVpbGRlciBhc1N1cGVydHlwZU9mKENsYXNzIGNscywgQ2xhc3Mgc3VwZXJ0eXBlKSB7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgY2xzTm9kZSA9IGdldE5vZGVGcm9tS2VybmVsQ2xhc3MoY2xzKTsKICAgIGlmIChjbHMgPT0gc3VwZXJ0eXBlKSB7CiAgICAgIHJldHVybiBuZXcgTmFtZWRUeXBlQnVpbGRlcihjbHNOb2RlLmNsYXNzQnVpbGRlci5uYW1lLCBudWxsKQogICAgICAgIC4uYmluZChjbHNOb2RlLmNsYXNzQnVpbGRlcik7CiAgICB9CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgc3VwZXJ0eXBlTm9kZSA9IGdldE5vZGVGcm9tS2VybmVsQ2xhc3Moc3VwZXJ0eXBlKTsKICAgIExpc3Q8VHlwZUJ1aWxkZXI+IHN1cGVydHlwZXMgPSBjbHNOb2RlLnN1cGVyY2xhc3NlczsKICAgIGludCBkZXB0aCA9IHN1cGVydHlwZU5vZGUuZGVwdGg7CiAgICBCdWlsZGVyIHN1cGVydHlwZURlY2xhcmF0aW9uID0gc3VwZXJ0eXBlTm9kZS5jbGFzc0J1aWxkZXI7CiAgICBpZiAoZGVwdGggPCBzdXBlcnR5cGVzLmxlbmd0aCkgewogICAgICBUeXBlQnVpbGRlciBhc1N1cGVydHlwZU9mID0gc3VwZXJ0eXBlc1tkZXB0aF07CiAgICAgIGlmIChhc1N1cGVydHlwZU9mLmRlY2xhcmF0aW9uID09IHN1cGVydHlwZURlY2xhcmF0aW9uKSB7CiAgICAgICAgcmV0dXJuIGFzU3VwZXJ0eXBlT2Y7CiAgICAgIH0KICAgIH0KICAgIHN1cGVydHlwZXMgPSBjbHNOb2RlLmludGVyZmFjZXM7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHN1cGVydHlwZXMubGVuZ3RoOyBpKyspIHsKICAgICAgVHlwZUJ1aWxkZXIgdHlwZSA9IHN1cGVydHlwZXNbaV07CiAgICAgIGlmICh0eXBlLmRlY2xhcmF0aW9uID09IHN1cGVydHlwZURlY2xhcmF0aW9uKSByZXR1cm4gdHlwZTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgSW50ZXJmYWNlVHlwZSBnZXRLZXJuZWxUeXBlQXNJbnN0YW5jZU9mKAogICAgICBJbnRlcmZhY2VUeXBlIHR5cGUsIENsYXNzIHN1cGVyY2xhc3MpIHsKICAgIENsYXNzIGtlcm5lbENsYXNzID0gdHlwZS5jbGFzc05vZGU7CiAgICBpZiAoa2VybmVsQ2xhc3MgPT0gc3VwZXJjbGFzcykgcmV0dXJuIHR5cGU7CiAgICBpZiAoa2VybmVsQ2xhc3MgPT0gbnVsbENsYXNzKSB7CiAgICAgIGlmIChzdXBlcmNsYXNzLnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkpIHsKICAgICAgICByZXR1cm4gc3VwZXJjbGFzcy5yYXdUeXBlOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRoaXMgaXMgYSBzYWZlIGZhbGwtYmFjayBmb3IgZGVhbGluZyB3aXRoIGBOdWxsYC4gSXQgd2lsbCBsaWtlbHkgYmUKICAgICAgICAvLyBmYXN0ZXIgdG8gY2hlY2sgZm9yIGBOdWxsYCBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZC4KICAgICAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUoCiAgICAgICAgICAgIHN1cGVyY2xhc3MsCiAgICAgICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQoCiAgICAgICAgICAgICAgICBzdXBlcmNsYXNzLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCwgbnVsbENsYXNzLnJhd1R5cGUpKTsKICAgICAgfQogICAgfQogICAgTmFtZWRUeXBlQnVpbGRlciBzdXBlcnR5cGUgPSBhc1N1cGVydHlwZU9mKGtlcm5lbENsYXNzLCBzdXBlcmNsYXNzKTsKICAgIGlmIChzdXBlcnR5cGUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpZiAoc3VwZXJ0eXBlLmFyZ3VtZW50cyA9PSBudWxsICYmIHN1cGVyY2xhc3MudHlwZVBhcmFtZXRlcnMuaXNFbXB0eSkgewogICAgICByZXR1cm4gc3VwZXJjbGFzcy5yYXdUeXBlOwogICAgfQogICAgcmV0dXJuIFN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZSh0eXBlKQogICAgICAgIC5zdWJzdGl0dXRlVHlwZShzdXBlcnR5cGUuYnVpbGQobnVsbCkpOwogIH0KCiAgSW50ZXJmYWNlVHlwZSBnZXRLZXJuZWxMZWdhY3lMZWFzdFVwcGVyQm91bmQoCiAgICAgIEludGVyZmFjZVR5cGUgdHlwZTEsIEludGVyZmFjZVR5cGUgdHlwZTIpIHsKICAgIGlmICh0eXBlMSA9PSB0eXBlMikgcmV0dXJuIHR5cGUxOwogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUxID0gZ2V0Tm9kZUZyb21LZXJuZWxDbGFzcyh0eXBlMS5jbGFzc05vZGUpOwogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUyID0gZ2V0Tm9kZUZyb21LZXJuZWxDbGFzcyh0eXBlMi5jbGFzc05vZGUpOwogICAgU2V0PENsYXNzSGllcmFyY2h5Tm9kZT4gbm9kZXMxID0gbm9kZTEuY29tcHV0ZUFsbFN1cGVyTm9kZXModGhpcykudG9TZXQoKTsKICAgIExpc3Q8Q2xhc3NIaWVyYXJjaHlOb2RlPiBub2RlczIgPSBub2RlMi5jb21wdXRlQWxsU3VwZXJOb2Rlcyh0aGlzKTsKICAgIExpc3Q8Q2xhc3NIaWVyYXJjaHlOb2RlPiBjb21tb24gPSA8Q2xhc3NIaWVyYXJjaHlOb2RlPltdOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZXMyLmxlbmd0aDsgaSsrKSB7CiAgICAgIENsYXNzSGllcmFyY2h5Tm9kZSBub2RlID0gbm9kZXMyW2ldOwogICAgICBpZiAobm9kZSA9PSBudWxsKSBjb250aW51ZTsKICAgICAgaWYgKG5vZGVzMS5jb250YWlucyhub2RlKSkgewogICAgICAgIERhcnRUeXBlIGNhbmRpZGF0ZTEgPQogICAgICAgICAgICBnZXRLZXJuZWxUeXBlQXNJbnN0YW5jZU9mKHR5cGUxLCBub2RlLmNsYXNzQnVpbGRlci5jbHMpOwogICAgICAgIERhcnRUeXBlIGNhbmRpZGF0ZTIgPQogICAgICAgICAgICBnZXRLZXJuZWxUeXBlQXNJbnN0YW5jZU9mKHR5cGUyLCBub2RlLmNsYXNzQnVpbGRlci5jbHMpOwogICAgICAgIGlmIChjYW5kaWRhdGUxID09IGNhbmRpZGF0ZTIpIHsKICAgICAgICAgIGNvbW1vbi5hZGQobm9kZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgaWYgKGNvbW1vbi5sZW5ndGggPT0gMSkgcmV0dXJuIG9iamVjdENsYXNzLnJhd1R5cGU7CiAgICBjb21tb24uc29ydChDbGFzc0hpZXJhcmNoeU5vZGUuY29tcGFyZU1heEluaGVyaXRhbmNlUGF0aCk7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb21tb24ubGVuZ3RoIC0gMTsgaSsrKSB7CiAgICAgIENsYXNzSGllcmFyY2h5Tm9kZSBub2RlID0gY29tbW9uW2ldOwogICAgICBpZiAobm9kZS5tYXhJbmhlcml0YW5jZVBhdGggIT0gY29tbW9uW2kgKyAxXS5tYXhJbmhlcml0YW5jZVBhdGgpIHsKICAgICAgICByZXR1cm4gZ2V0S2VybmVsVHlwZUFzSW5zdGFuY2VPZih0eXBlMSwgbm9kZS5jbGFzc0J1aWxkZXIuY2xzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBkbyB7CiAgICAgICAgICBpKys7CiAgICAgICAgfSB3aGlsZSAobm9kZS5tYXhJbmhlcml0YW5jZVBhdGggPT0gY29tbW9uW2kgKyAxXS5tYXhJbmhlcml0YW5jZVBhdGgpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gb2JqZWN0Q2xhc3MucmF3VHlwZTsKICB9CgogIE1lbWJlciBnZXRJbnRlcmZhY2VNZW1iZXJLZXJuZWwoQ2xhc3MgY2xzLCBOYW1lIG5hbWUsIGJvb2wgaXNTZXR0ZXIpIHsKICAgIHJldHVybiBnZXROb2RlRnJvbUtlcm5lbENsYXNzKGNscykKICAgICAgICAuZ2V0SW50ZXJmYWNlTWVtYmVyKG5hbWUsIGlzU2V0dGVyKQogICAgICAgID8udGFyZ2V0OwogIH0KCiAgTWVtYmVyIGdldERpc3BhdGNoVGFyZ2V0S2VybmVsKENsYXNzIGNscywgTmFtZSBuYW1lLCBib29sIGlzU2V0dGVyKSB7CiAgICByZXR1cm4gZ2V0Tm9kZUZyb21LZXJuZWxDbGFzcyhjbHMpCiAgICAgICAgLmdldERpc3BhdGNoVGFyZ2V0KG5hbWUsIGlzU2V0dGVyKQogICAgICAgID8udGFyZ2V0OwogIH0KCiAgTWVtYmVyIGdldENvbWJpbmVkTWVtYmVyU2lnbmF0dXJlS2VybmVsKENsYXNzIGNscywgTmFtZSBuYW1lLCBib29sIGlzU2V0dGVyLAogICAgICBpbnQgY2hhck9mZnNldCwgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgQnVpbGRlciBkZWNsYXJhdGlvbiA9CiAgICAgICAgZ2V0Tm9kZUZyb21LZXJuZWxDbGFzcyhjbHMpLmdldEludGVyZmFjZU1lbWJlcihuYW1lLCBpc1NldHRlcik7CiAgICBpZiAoZGVjbGFyYXRpb24/LmlzU3RhdGljID8/IHRydWUpIHJldHVybiBudWxsOwogICAgaWYgKGRlY2xhcmF0aW9uLm5leHQgIT0gbnVsbCkgewogICAgICBsaWJyYXJ5Py5hZGRQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25Vc2Uud2l0aEFyZ3VtZW50cyhuYW1lLm5hbWUpLAogICAgICAgICAgY2hhck9mZnNldCwKICAgICAgICAgIG5hbWUubmFtZS5sZW5ndGgsCiAgICAgICAgICBsaWJyYXJ5LmZpbGVVcmkpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmIChkZWNsYXJhdGlvbiBpcyBEZWxheWVkTWVtYmVyKSB7CiAgICAgIHJldHVybiBkZWNsYXJhdGlvbi5jaGVjayh0aGlzKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBkZWNsYXJhdGlvbi50YXJnZXQ7CiAgICB9CiAgfQoKICBzdGF0aWMgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGJ1aWxkKENsYXNzQnVpbGRlciBvYmplY3RDbGFzcywKICAgICAgTGlzdDxDbGFzc0J1aWxkZXI+IGNsYXNzZXMsIFNvdXJjZUxvYWRlciBsb2FkZXIsIENvcmVUeXBlcyBjb3JlVHlwZXMpIHsKICAgIENsYXNzSGllcmFyY2h5QnVpbGRlciBoaWVyYXJjaHkgPQogICAgICAgIG5ldyBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIob2JqZWN0Q2xhc3MsIGxvYWRlciwgY29yZVR5cGVzKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkrKykgewogICAgICBDbGFzc0J1aWxkZXIgY2xhc3NCdWlsZGVyID0gY2xhc3Nlc1tpXTsKICAgICAgaWYgKCFjbGFzc0J1aWxkZXIuaXNQYXRjaCkgewogICAgICAgIGhpZXJhcmNoeS5ub2Rlc1tjbGFzc0J1aWxkZXIuY2xzXSA9CiAgICAgICAgICAgIG5ldyBDbGFzc0hpZXJhcmNoeU5vZGVCdWlsZGVyKGhpZXJhcmNoeSwgY2xhc3NCdWlsZGVyKS5idWlsZCgpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRPRE8oYWhlKTogTWVyZ2UgdGhlIGluamVjdGVkIG1lbWJlcnMgb2YgcGF0Y2ggaW50byB0aGUgaGllcmFyY2h5CiAgICAgICAgLy8gbm9kZSBvZiBgY2xzLm9yaWdpbmAuCiAgICAgIH0KICAgIH0KICAgIHJldHVybiBoaWVyYXJjaHk7CiAgfQp9CgpjbGFzcyBDbGFzc0hpZXJhcmNoeU5vZGVCdWlsZGVyIHsKICBmaW5hbCBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgaGllcmFyY2h5OwoKICBmaW5hbCBDbGFzc0J1aWxkZXIgY2xhc3NCdWlsZGVyOwoKICBib29sIGhhc05vU3VjaE1ldGhvZCA9IGZhbHNlOwoKICBMaXN0PEJ1aWxkZXI+IGFic3RyYWN0TWVtYmVycyA9IG51bGw7CgogIENsYXNzSGllcmFyY2h5Tm9kZUJ1aWxkZXIodGhpcy5oaWVyYXJjaHksIHRoaXMuY2xhc3NCdWlsZGVyKTsKCiAgQ2xhc3NCdWlsZGVyIGdldCBvYmplY3RDbGFzcyA9PiBoaWVyYXJjaHkub2JqZWN0Q2xhc3NCdWlsZGVyOwoKICBmaW5hbCBNYXA8Q2xhc3MsIFN1YnN0aXR1dGlvbj4gc3Vic3RpdHV0aW9ucyA9IDxDbGFzcywgU3Vic3RpdHV0aW9uPnt9OwoKICAvLy8gV2hlbiBtZXJnaW5nIGBhTGlzdGAgYW5kIGBiTGlzdGAsIFthXSAoZnJvbSBgYUxpc3RgKSBhbmQgW2JdIChmcm9tCiAgLy8vIGBiTGlzdGApIGVhY2ggaGF2ZSB0aGUgc2FtZSBuYW1lLgogIC8vLwogIC8vLyBJZiBbbWVyZ2VLaW5kXSBpcyBgTWVyZ2VLaW5kLnN1cGVyY2xhc3NgLCBbYV0gc2hvdWxkIG92ZXJyaWRlIFtiXS4KICAvLy8KICAvLy8gSWYgW21lcmdlS2luZF0gaXMgYE1lcmdlS2luZC5pbnRlcmZhY2VzYCwgd2UgbmVlZCB0byByZWNvcmQgdGhlbSBhbmQKICAvLy8gc29sdmUgdGhlIGNvbmZsaWN0IGxhdGVyLgogIC8vLwogIC8vLyBJZiBbbWVyZ2VLaW5kXSBpcyBgTWVyZ2VLaW5kLnN1cGVydHlwZXNgLCBbYV0gc2hvdWxkIGltcGxlbWVudCBbYl0sIGFuZAogIC8vLyBbYl0gaXMgaW1wbGljaXRseSBhYnN0cmFjdC4KICBCdWlsZGVyIGhhbmRsZU1lcmdlQ29uZmxpY3QoQnVpbGRlciBhLCBCdWlsZGVyIGIsIE1lcmdlS2luZCBtZXJnZUtpbmQpIHsKICAgIGRlYnVnPy5sb2coCiAgICAgICAgImhhbmRsZU1lcmdlQ29uZmxpY3Q6ICR7ZnVsbE5hbWUoYSl9ICR7ZnVsbE5hbWUoYil9ICR7bWVyZ2VLaW5kfSIpOwogICAgLy8gVE9ETyhhaGUpOiBFbmFibGUgdGhpcyBvcHRpbWl6YXRpb24sIGJ1dCBiZSBjYXJlZnVsIGFib3V0IGFic3RyYWN0CiAgICAvLyBtZXRob2RzIG92ZXJyaWRpbmcgY29uY3JldGUgbWV0aG9kcy4KICAgIC8vIGlmIChjbHMgaXMgRGlsbENsYXNzQnVpbGRlcikgcmV0dXJuIGE7CiAgICBpZiAoYSA9PSBiKSByZXR1cm4gYTsKICAgIGlmIChhLm5leHQgIT0gbnVsbCB8fCBiLm5leHQgIT0gbnVsbCkgewogICAgICAvLyBEb24ndCBjaGVjayBvdmVycmlkZXMgaW52b2x2aW5nIGR1cGxpY2F0ZWQgbWVtYmVycy4KICAgICAgcmV0dXJuIGE7CiAgICB9CiAgICBCdWlsZGVyIHJlc3VsdCA9IGNoZWNrSW5oZXJpdGFuY2VDb25mbGljdChhLCBiKTsKICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgcmV0dXJuIHJlc3VsdDsKICAgIHJlc3VsdCA9IGE7CiAgICBzd2l0Y2ggKG1lcmdlS2luZCkgewogICAgICBjYXNlIE1lcmdlS2luZC5zdXBlcmNsYXNzTWVtYmVyczoKICAgICAgY2FzZSBNZXJnZUtpbmQuc3VwZXJjbGFzc1NldHRlcnM6CiAgICAgICAgLy8gW2FdIGlzIGEgbWV0aG9kIGRlY2xhcmVkIGluIFtjbHNdLiBUaGlzIG1lYW5zIGl0IGRlZmluZXMgdGhlCiAgICAgICAgLy8gaW50ZXJmYWNlIG9mIHRoaXMgY2xhc3MgcmVnYXJkbGVzcyBpZiBpdHMgYWJzdHJhY3QuCiAgICAgICAgZGVidWc/LmxvZygic3VwZXJjbGFzczogY2hlY2tWYWxpZE92ZXJyaWRlKCIKICAgICAgICAgICAgIiR7Y2xhc3NCdWlsZGVyLmZ1bGxOYW1lRm9yRXJyb3JzfSwgIgogICAgICAgICAgICAiJHtmdWxsTmFtZShhKX0sICR7ZnVsbE5hbWUoYil9KSIpOwogICAgICAgIGNoZWNrVmFsaWRPdmVycmlkZSgKICAgICAgICAgICAgYSwgQWJzdHJhY3RNZW1iZXJPdmVycmlkaW5nSW1wbGVtZW50YXRpb24uc2VsZWN0QWJzdHJhY3QoYikpOwoKICAgICAgICBpZiAoaXNBYnN0cmFjdChhKSkgewogICAgICAgICAgaWYgKGlzQWJzdHJhY3QoYikpIHsKICAgICAgICAgICAgcmVjb3JkQWJzdHJhY3RNZW1iZXIoYSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIWNsYXNzQnVpbGRlci5pc0Fic3RyYWN0KSB7CiAgICAgICAgICAgICAgLy8gVGhlIGludGVyZmFjZSBvZiB0aGlzIGNsYXNzIGlzIFthXS4gQnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBpcwogICAgICAgICAgICAgIC8vIFtiXS4gU28gW2JdIG11c3QgaW1wbGVtZW50IFthXSwgdW5sZXNzIFtjbHNdIGlzIGFic3RyYWN0LgogICAgICAgICAgICAgIGNoZWNrVmFsaWRPdmVycmlkZShiLCBhKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXN1bHQgPSBuZXcgQWJzdHJhY3RNZW1iZXJPdmVycmlkaW5nSW1wbGVtZW50YXRpb24oCiAgICAgICAgICAgICAgICBjbGFzc0J1aWxkZXIsCiAgICAgICAgICAgICAgICBhLAogICAgICAgICAgICAgICAgQWJzdHJhY3RNZW1iZXJPdmVycmlkaW5nSW1wbGVtZW50YXRpb24uc2VsZWN0Q29uY3JldGUoYiksCiAgICAgICAgICAgICAgICBtZXJnZUtpbmQgPT0gTWVyZ2VLaW5kLnN1cGVyY2xhc3NTZXR0ZXJzLAogICAgICAgICAgICAgICAgY2xhc3NCdWlsZGVyLmxpYnJhcnkubG9hZGVyID09IGhpZXJhcmNoeS5sb2FkZXIpOwogICAgICAgICAgICBoaWVyYXJjaHkuZGVsYXllZE1lbWJlckNoZWNrcy5hZGQocmVzdWx0KTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGNsYXNzQnVpbGRlci5pc01peGluQXBwbGljYXRpb24gJiYKICAgICAgICAgICAgYS5wYXJlbnQgIT0gY2xhc3NCdWlsZGVyKSB7CiAgICAgICAgICByZXN1bHQgPSBJbmhlcml0ZWRJbXBsZW1lbnRhdGlvbkludGVyZmFjZUNvbmZsaWN0LmNvbWJpbmVkKAogICAgICAgICAgICAgIGNsYXNzQnVpbGRlciwKICAgICAgICAgICAgICBhLAogICAgICAgICAgICAgIGIsCiAgICAgICAgICAgICAgbWVyZ2VLaW5kID09IE1lcmdlS2luZC5zdXBlcmNsYXNzU2V0dGVycywKICAgICAgICAgICAgICBjbGFzc0J1aWxkZXIubGlicmFyeS5sb2FkZXIgPT0gaGllcmFyY2h5LmxvYWRlciwKICAgICAgICAgICAgICBpc0luaGVyaXRhYmxlQ29uZmxpY3Q6IGZhbHNlKTsKICAgICAgICAgIGlmIChyZXN1bHQgaXMgRGVsYXllZE1lbWJlcikgewogICAgICAgICAgICBoaWVyYXJjaHkuZGVsYXllZE1lbWJlckNoZWNrcy5hZGQocmVzdWx0KTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIE1lbWJlciB0YXJnZXQgPSByZXN1bHQudGFyZ2V0OwogICAgICAgIGlmICh0YXJnZXQuZW5jbG9zaW5nQ2xhc3MgIT0gb2JqZWN0Q2xhc3MuY2xzICYmCiAgICAgICAgICAgIHRhcmdldC5uYW1lID09IG5vU3VjaE1ldGhvZE5hbWUpIHsKICAgICAgICAgIGhhc05vU3VjaE1ldGhvZCA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBNZXJnZUtpbmQubWVtYmVyc1dpdGhTZXR0ZXJzOgogICAgICBjYXNlIE1lcmdlS2luZC5zZXR0ZXJzV2l0aE1lbWJlcnM6CiAgICAgICAgaWYgKGEucGFyZW50ID09IGNsYXNzQnVpbGRlciAmJiBiLnBhcmVudCAhPSBjbGFzc0J1aWxkZXIpIHsKICAgICAgICAgIGlmIChhIGlzIEZpZWxkQnVpbGRlcikgewogICAgICAgICAgICBpZiAoYS5pc0ZpbmFsICYmIGIuaXNTZXR0ZXIpIHsKICAgICAgICAgICAgICBoaWVyYXJjaHkub3ZlcnJpZGVDaGVja3MKICAgICAgICAgICAgICAgICAgLmFkZChuZXcgRGVsYXllZE92ZXJyaWRlQ2hlY2soY2xhc3NCdWlsZGVyLCBhLCBiKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgaWYgKCFpbmZlckZpZWxkVHlwZXMoYSwgYikpIHsKICAgICAgICAgICAgICAgIGhpZXJhcmNoeS5vdmVycmlkZUNoZWNrcwogICAgICAgICAgICAgICAgICAgIC5hZGQobmV3IERlbGF5ZWRPdmVycmlkZUNoZWNrKGNsYXNzQnVpbGRlciwgYSwgYikpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmIChhIGlzIFByb2NlZHVyZUJ1aWxkZXIpIHsKICAgICAgICAgICAgaWYgKCFpbmZlck1ldGhvZFR5cGVzKGEsIGIpKSB7CiAgICAgICAgICAgICAgaGllcmFyY2h5Lm92ZXJyaWRlQ2hlY2tzCiAgICAgICAgICAgICAgICAgIC5hZGQobmV3IERlbGF5ZWRPdmVycmlkZUNoZWNrKGNsYXNzQnVpbGRlciwgYSwgYikpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBNZXJnZUtpbmQuaW50ZXJmYWNlc01lbWJlcnM6CiAgICAgICAgcmVzdWx0ID0gSW50ZXJmYWNlQ29uZmxpY3QuY29tYmluZWQoY2xhc3NCdWlsZGVyLCBhLCBiLCBmYWxzZSwKICAgICAgICAgICAgY2xhc3NCdWlsZGVyLmxpYnJhcnkubG9hZGVyID09IGhpZXJhcmNoeS5sb2FkZXIpOwogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBNZXJnZUtpbmQuaW50ZXJmYWNlc1NldHRlcnM6CiAgICAgICAgcmVzdWx0ID0gSW50ZXJmYWNlQ29uZmxpY3QuY29tYmluZWQoY2xhc3NCdWlsZGVyLCBhLCBiLCB0cnVlLAogICAgICAgICAgICBjbGFzc0J1aWxkZXIubGlicmFyeS5sb2FkZXIgPT0gaGllcmFyY2h5LmxvYWRlcik7CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIE1lcmdlS2luZC5zdXBlcnR5cGVzTWVtYmVyczoKICAgICAgY2FzZSBNZXJnZUtpbmQuc3VwZXJ0eXBlc1NldHRlcnM6CiAgICAgICAgLy8gW2JdIGlzIGluaGVyaXRlZCBmcm9tIGFuIGludGVyZmFjZSBzbyBpdCBpcyBpbXBsaWNpdGx5IGFic3RyYWN0LgoKICAgICAgICBhID0gQWJzdHJhY3RNZW1iZXJPdmVycmlkaW5nSW1wbGVtZW50YXRpb24uc2VsZWN0QWJzdHJhY3QoYSk7CiAgICAgICAgYiA9IEFic3RyYWN0TWVtYmVyT3ZlcnJpZGluZ0ltcGxlbWVudGF0aW9uLnNlbGVjdEFic3RyYWN0KGIpOwoKICAgICAgICAvLyBJZiBbYV0gaXMgZGVjbGFyZWQgaW4gdGhpcyBjbGFzcywgaXQgZGVmaW5lcyB0aGUgaW50ZXJmYWNlLgogICAgICAgIGlmIChhLnBhcmVudCA9PSBjbGFzc0J1aWxkZXIpIHsKICAgICAgICAgIGRlYnVnPy5sb2coInN1cGVydHlwZXM6IGNoZWNrVmFsaWRPdmVycmlkZSgiCiAgICAgICAgICAgICAgIiR7Y2xhc3NCdWlsZGVyLmZ1bGxOYW1lRm9yRXJyb3JzfSwgIgogICAgICAgICAgICAgICIke2Z1bGxOYW1lKGEpfSwgJHtmdWxsTmFtZShiKX0pIik7CiAgICAgICAgICBjaGVja1ZhbGlkT3ZlcnJpZGUoYSwgYik7CiAgICAgICAgICBpZiAoYSBpcyBEZWxheWVkTWVtYmVyICYmICFhLmlzSW5oZXJpdGFibGVDb25mbGljdCkgewogICAgICAgICAgICBpZiAoYiBpcyBEZWxheWVkTWVtYmVyKSB7CiAgICAgICAgICAgICAgYi5hZGRBbGxEZWNsYXJhdGlvbnNUbyhhLmRlY2xhcmF0aW9ucyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgYWRkRGVjbGFyYXRpb25JZkRpZmZlcmVudChiLCBhLmRlY2xhcmF0aW9ucyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGlzQWJzdHJhY3QoYSkpIHsKICAgICAgICAgICAgcmVzdWx0ID0gSW50ZXJmYWNlQ29uZmxpY3QuY29tYmluZWQoCiAgICAgICAgICAgICAgICBjbGFzc0J1aWxkZXIsCiAgICAgICAgICAgICAgICBhLAogICAgICAgICAgICAgICAgYiwKICAgICAgICAgICAgICAgIG1lcmdlS2luZCA9PSBNZXJnZUtpbmQuc3VwZXJ0eXBlc1NldHRlcnMsCiAgICAgICAgICAgICAgICBjbGFzc0J1aWxkZXIubGlicmFyeS5sb2FkZXIgPT0gaGllcmFyY2h5LmxvYWRlcik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXN1bHQgPSBJbmhlcml0ZWRJbXBsZW1lbnRhdGlvbkludGVyZmFjZUNvbmZsaWN0LmNvbWJpbmVkKAogICAgICAgICAgICAgICAgY2xhc3NCdWlsZGVyLAogICAgICAgICAgICAgICAgYSwKICAgICAgICAgICAgICAgIGIsCiAgICAgICAgICAgICAgICBtZXJnZUtpbmQgPT0gTWVyZ2VLaW5kLnN1cGVydHlwZXNTZXR0ZXJzLAogICAgICAgICAgICAgICAgY2xhc3NCdWlsZGVyLmxpYnJhcnkubG9hZGVyID09IGhpZXJhcmNoeS5sb2FkZXIpOwogICAgICAgICAgfQogICAgICAgICAgZGVidWc/LmxvZygic3VwZXJ0eXBlczogJHtyZXN1bHR9Iik7CiAgICAgICAgICBpZiAocmVzdWx0IGlzIERlbGF5ZWRNZW1iZXIpIHsKICAgICAgICAgICAgaGllcmFyY2h5LmRlbGF5ZWRNZW1iZXJDaGVja3MuYWRkKHJlc3VsdCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgfQoKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBCdWlsZGVyIGNoZWNrSW5oZXJpdGFuY2VDb25mbGljdChCdWlsZGVyIGEsIEJ1aWxkZXIgYikgewogICAgaWYgKGEgaXMgRGVsYXllZE1lbWJlcikgewogICAgICBCdWlsZGVyIHJlc3VsdDsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhLmRlY2xhcmF0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgIEJ1aWxkZXIgZCA9IGNoZWNrSW5oZXJpdGFuY2VDb25mbGljdChhLmRlY2xhcmF0aW9uc1tpXSwgYik7CiAgICAgICAgcmVzdWx0ID8/PSBkOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBpZiAoYiBpcyBEZWxheWVkTWVtYmVyKSB7CiAgICAgIEJ1aWxkZXIgcmVzdWx0OwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGIuZGVjbGFyYXRpb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgQnVpbGRlciBkID0gY2hlY2tJbmhlcml0YW5jZUNvbmZsaWN0KGEsIGIuZGVjbGFyYXRpb25zW2ldKTsKICAgICAgICByZXN1bHQgPz89IGQ7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGlmIChpc0luaGVyaXRhbmNlQ29uZmxpY3QoYSwgYikpIHsKICAgICAgcmVwb3J0SW5oZXJpdGFuY2VDb25mbGljdChhLCBiKTsKICAgICAgcmV0dXJuIGE7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIGJvb2wgaW5mZXJNZXRob2RUeXBlcyhQcm9jZWR1cmVCdWlsZGVyIGEsIEJ1aWxkZXIgYikgewogICAgZGVidWc/LmxvZygKICAgICAgICAiVHJ5aW5nIHRvIGluZmVyIHR5cGVzIGZvciAke2Z1bGxOYW1lKGEpfSBiYXNlZCBvbiAke2Z1bGxOYW1lKGIpfSIpOwogICAgaWYgKGIgaXMgRGVsYXllZE1lbWJlcikgewogICAgICBib29sIGhhc1NhbWVTaWduYXR1cmUgPSB0cnVlOwogICAgICBMaXN0PEJ1aWxkZXI+IGRlY2xhcmF0aW9ucyA9IGIuZGVjbGFyYXRpb25zOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlY2xhcmF0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICghaW5mZXJNZXRob2RUeXBlcyhhLCBkZWNsYXJhdGlvbnNbaV0pKSB7CiAgICAgICAgICBoYXNTYW1lU2lnbmF0dXJlID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBoYXNTYW1lU2lnbmF0dXJlOwogICAgfQogICAgaWYgKGEuaXNHZXR0ZXIpIHsKICAgICAgcmV0dXJuIGluZmVyR2V0dGVyVHlwZShhLCBiKTsKICAgIH0gZWxzZSBpZiAoYS5pc1NldHRlcikgewogICAgICByZXR1cm4gaW5mZXJTZXR0ZXJUeXBlKGEsIGIpOwogICAgfQogICAgYm9vbCBoYWRUeXBlc0luZmVycmVkID0gYS5oYWRUeXBlc0luZmVycmVkOwogICAgQ2xhc3NCdWlsZGVyIGFDbGFzc0J1aWxkZXIgPSBhLnBhcmVudDsKICAgIFN1YnN0aXR1dGlvbiBhU3Vic3RpdHV0aW9uOwogICAgaWYgKGNsYXNzQnVpbGRlciAhPSBhQ2xhc3NCdWlsZGVyKSB7CiAgICAgIGFzc2VydCgKICAgICAgICAgIHN1YnN0aXR1dGlvbnMuY29udGFpbnNLZXkoYUNsYXNzQnVpbGRlci5jbHMpLAogICAgICAgICAgIiR7Y2xhc3NCdWlsZGVyLmZ1bGxOYW1lRm9yRXJyb3JzfSAiCiAgICAgICAgICAiJHthQ2xhc3NCdWlsZGVyLmZ1bGxOYW1lRm9yRXJyb3JzfSIpOwogICAgICBhU3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uc1thQ2xhc3NCdWlsZGVyLmNsc107CiAgICAgIGRlYnVnPy5sb2coIiR7Y2xhc3NCdWlsZGVyLmZ1bGxOYW1lRm9yRXJyb3JzfSAtPiAiCiAgICAgICAgICAiJHthQ2xhc3NCdWlsZGVyLmZ1bGxOYW1lRm9yRXJyb3JzfSAkYVN1YnN0aXR1dGlvbiIpOwogICAgfQogICAgQ2xhc3NCdWlsZGVyIGJDbGFzc0J1aWxkZXIgPSBiLnBhcmVudDsKICAgIFN1YnN0aXR1dGlvbiBiU3Vic3RpdHV0aW9uOwogICAgaWYgKGNsYXNzQnVpbGRlciAhPSBiQ2xhc3NCdWlsZGVyKSB7CiAgICAgIGFzc2VydCgKICAgICAgICAgIHN1YnN0aXR1dGlvbnMuY29udGFpbnNLZXkoYkNsYXNzQnVpbGRlci5jbHMpLAogICAgICAgICAgIiR7Y2xhc3NCdWlsZGVyLmZ1bGxOYW1lRm9yRXJyb3JzfSAiCiAgICAgICAgICAiJHtiQ2xhc3NCdWlsZGVyLmZ1bGxOYW1lRm9yRXJyb3JzfSIpOwogICAgICBiU3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uc1tiQ2xhc3NCdWlsZGVyLmNsc107CiAgICAgIGRlYnVnPy5sb2coIiR7Y2xhc3NCdWlsZGVyLmZ1bGxOYW1lRm9yRXJyb3JzfSAtPiAiCiAgICAgICAgICAiJHtiQ2xhc3NCdWlsZGVyLmZ1bGxOYW1lRm9yRXJyb3JzfSAkYlN1YnN0aXR1dGlvbiIpOwogICAgfQogICAgUHJvY2VkdXJlIGFQcm9jZWR1cmUgPSBhLnByb2NlZHVyZTsKICAgIGlmIChiLnRhcmdldCBpcyEgUHJvY2VkdXJlKSB7CiAgICAgIGRlYnVnPy5sb2coIkdpdmluZyB1cCAxIik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIFByb2NlZHVyZSBiUHJvY2VkdXJlID0gYi50YXJnZXQ7CiAgICBGdW5jdGlvbk5vZGUgYUZ1bmN0aW9uID0gYVByb2NlZHVyZS5mdW5jdGlvbjsKICAgIEZ1bmN0aW9uTm9kZSBiRnVuY3Rpb24gPSBiUHJvY2VkdXJlLmZ1bmN0aW9uOwoKICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gYVR5cGVQYXJhbWV0ZXJzID0gYUZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzOwogICAgTGlzdDxUeXBlUGFyYW1ldGVyPiBiVHlwZVBhcmFtZXRlcnMgPSBiRnVuY3Rpb24udHlwZVBhcmFtZXRlcnM7CiAgICBpbnQgdHlwZVBhcmFtZXRlckNvdW50ID0gYVR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsKICAgIGlmICh0eXBlUGFyYW1ldGVyQ291bnQgIT0gYlR5cGVQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICBkZWJ1Zz8ubG9nKCJHaXZpbmcgdXAgMiIpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBTdWJzdGl0dXRpb24gc3Vic3RpdHV0aW9uOwogICAgaWYgKHR5cGVQYXJhbWV0ZXJDb3VudCAhPSAwKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVBhcmFtZXRlckNvdW50OyBpKyspIHsKICAgICAgICBjb3B5VHlwZVBhcmFtZXRlckNvdmFyaWFuY2UoCiAgICAgICAgICAgIGEucGFyZW50LCBhVHlwZVBhcmFtZXRlcnNbaV0sIGJUeXBlUGFyYW1ldGVyc1tpXSk7CiAgICAgIH0KICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZXMgPSBuZXcgTGlzdDxEYXJ0VHlwZT4odHlwZVBhcmFtZXRlckNvdW50KTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlUGFyYW1ldGVyQ291bnQ7IGkrKykgewogICAgICAgIHR5cGVzW2ldID0gbmV3IFR5cGVQYXJhbWV0ZXJUeXBlKGFUeXBlUGFyYW1ldGVyc1tpXSk7CiAgICAgIH0KICAgICAgc3Vic3RpdHV0aW9uID0gU3Vic3RpdHV0aW9uLmZyb21QYWlycyhiVHlwZVBhcmFtZXRlcnMsIHR5cGVzKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlUGFyYW1ldGVyQ291bnQ7IGkrKykgewogICAgICAgIERhcnRUeXBlIGFCb3VuZCA9IGFUeXBlUGFyYW1ldGVyc1tpXS5ib3VuZDsKICAgICAgICBEYXJ0VHlwZSBiQm91bmQgPSBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoYlR5cGVQYXJhbWV0ZXJzW2ldLmJvdW5kKTsKICAgICAgICBpZiAoYUJvdW5kICE9IGJCb3VuZCkgewogICAgICAgICAgZGVidWc/LmxvZygiR2l2aW5nIHVwIDMiKTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBEYXJ0VHlwZSBhUmV0dXJuVHlwZSA9IGFGdW5jdGlvbi5yZXR1cm5UeXBlOwogICAgaWYgKGFTdWJzdGl0dXRpb24gIT0gbnVsbCkgewogICAgICBhUmV0dXJuVHlwZSA9IGFTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoYVJldHVyblR5cGUpOwogICAgfQogICAgRGFydFR5cGUgYlJldHVyblR5cGUgPSBiRnVuY3Rpb24ucmV0dXJuVHlwZTsKICAgIGlmIChiU3Vic3RpdHV0aW9uICE9IG51bGwpIHsKICAgICAgYlJldHVyblR5cGUgPSBiU3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGJSZXR1cm5UeXBlKTsKICAgIH0KICAgIGlmIChzdWJzdGl0dXRpb24gIT0gbnVsbCkgewogICAgICBiUmV0dXJuVHlwZSA9IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShiUmV0dXJuVHlwZSk7CiAgICB9CiAgICBib29sIHJlc3VsdCA9IHRydWU7CiAgICBpZiAoYUZ1bmN0aW9uLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPiBiRnVuY3Rpb24ucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCkgewogICAgICBkZWJ1Zz8ubG9nKCJHaXZpbmcgdXAgNCIpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IGFQb3NpdGlvbmFsID0gYUZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzOwogICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBiUG9zaXRpb25hbCA9IGJGdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVyczsKICAgIGlmIChhUG9zaXRpb25hbC5sZW5ndGggPCBiUG9zaXRpb25hbC5sZW5ndGgpIHsKICAgICAgZGVidWc/LmxvZygiR2l2aW5nIHVwIDUiKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChhUmV0dXJuVHlwZSAhPSBiUmV0dXJuVHlwZSkgewogICAgICBpZiAoYS5wYXJlbnQgPT0gY2xhc3NCdWlsZGVyICYmIGEucmV0dXJuVHlwZSA9PSBudWxsKSB7CiAgICAgICAgcmVzdWx0ID0gaW5mZXJSZXR1cm5UeXBlKAogICAgICAgICAgICBjbGFzc0J1aWxkZXIsIGEsIGJSZXR1cm5UeXBlLCBoYWRUeXBlc0luZmVycmVkLCBoaWVyYXJjaHkpOwogICAgICB9IGVsc2UgewogICAgICAgIGRlYnVnPy5sb2coIkdpdmluZyB1cCA2Iik7CiAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgIH0KICAgIH0KCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGJQb3NpdGlvbmFsLmxlbmd0aDsgaSsrKSB7CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gYVBhcmFtZXRlciA9IGFQb3NpdGlvbmFsW2ldOwogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGJQYXJhbWV0ZXIgPSBiUG9zaXRpb25hbFtpXTsKICAgICAgY29weVBhcmFtZXRlckNvdmFyaWFuY2UoYS5wYXJlbnQsIGFQYXJhbWV0ZXIsIGJQYXJhbWV0ZXIpOwogICAgICBEYXJ0VHlwZSBhVHlwZSA9IGFQYXJhbWV0ZXIudHlwZTsKICAgICAgaWYgKGFTdWJzdGl0dXRpb24gIT0gbnVsbCkgewogICAgICAgIGFUeXBlID0gYVN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShhVHlwZSk7CiAgICAgIH0KICAgICAgRGFydFR5cGUgYlR5cGUgPSBiUGFyYW1ldGVyLnR5cGU7CiAgICAgIGlmIChiU3Vic3RpdHV0aW9uICE9IG51bGwpIHsKICAgICAgICBiVHlwZSA9IGJTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoYlR5cGUpOwogICAgICB9CiAgICAgIGlmIChzdWJzdGl0dXRpb24gIT0gbnVsbCkgewogICAgICAgIGJUeXBlID0gc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGJUeXBlKTsKICAgICAgfQogICAgICBpZiAoYVR5cGUgIT0gYlR5cGUpIHsKICAgICAgICBpZiAoYS5wYXJlbnQgPT0gY2xhc3NCdWlsZGVyICYmIGEuZm9ybWFsc1tpXS50eXBlID09IG51bGwpIHsKICAgICAgICAgIHJlc3VsdCA9IGluZmVyUGFyYW1ldGVyVHlwZShjbGFzc0J1aWxkZXIsIGEsIGEuZm9ybWFsc1tpXSwgYlR5cGUsCiAgICAgICAgICAgICAgaGFkVHlwZXNJbmZlcnJlZCwgaGllcmFyY2h5KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGVidWc/LmxvZygiR2l2aW5nIHVwIDgiKTsKICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gYU5hbWVkID0gYUZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVyczsKICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gYk5hbWVkID0gYkZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVyczsKICAgIG5hbWVkOgogICAgaWYgKGFOYW1lZC5pc05vdEVtcHR5IHx8IGJOYW1lZC5pc05vdEVtcHR5KSB7CiAgICAgIGlmIChhUG9zaXRpb25hbC5sZW5ndGggIT0gYlBvc2l0aW9uYWwubGVuZ3RoKSB7CiAgICAgICAgZGVidWc/LmxvZygiR2l2aW5nIHVwIDkiKTsKICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICBicmVhayBuYW1lZDsKICAgICAgfQogICAgICBpZiAoYUZ1bmN0aW9uLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQgIT0KICAgICAgICAgIGJGdW5jdGlvbi5yZXF1aXJlZFBhcmFtZXRlckNvdW50KSB7CiAgICAgICAgZGVidWc/LmxvZygiR2l2aW5nIHVwIDEwIik7CiAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgYnJlYWsgbmFtZWQ7CiAgICAgIH0KCiAgICAgIGFOYW1lZCA9IGFOYW1lZC50b0xpc3QoKS4uc29ydChjb21wYXJlTmFtZWRQYXJhbWV0ZXJzKTsKICAgICAgYk5hbWVkID0gYk5hbWVkLnRvTGlzdCgpLi5zb3J0KGNvbXBhcmVOYW1lZFBhcmFtZXRlcnMpOwogICAgICBpbnQgYUNvdW50ID0gMDsKICAgICAgZm9yIChpbnQgYkNvdW50ID0gMDsgYkNvdW50IDwgYk5hbWVkLmxlbmd0aDsgYkNvdW50KyspIHsKICAgICAgICBTdHJpbmcgbmFtZSA9IGJOYW1lZFtiQ291bnRdLm5hbWU7CiAgICAgICAgZm9yICg7IGFDb3VudCA8IGFOYW1lZC5sZW5ndGg7IGFDb3VudCsrKSB7CiAgICAgICAgICBpZiAoYU5hbWVkW2FDb3VudF0ubmFtZSA9PSBuYW1lKSBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKGFDb3VudCA9PSBhTmFtZWQubGVuZ3RoKSB7CiAgICAgICAgICBkZWJ1Zz8ubG9nKCJHaXZpbmcgdXAgMTEiKTsKICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgYnJlYWsgbmFtZWQ7CiAgICAgICAgfQogICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gYVBhcmFtZXRlciA9IGFOYW1lZFthQ291bnRdOwogICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gYlBhcmFtZXRlciA9IGJOYW1lZFtiQ291bnRdOwogICAgICAgIGNvcHlQYXJhbWV0ZXJDb3ZhcmlhbmNlKGEucGFyZW50LCBhUGFyYW1ldGVyLCBiUGFyYW1ldGVyKTsKICAgICAgICBEYXJ0VHlwZSBhVHlwZSA9IGFQYXJhbWV0ZXIudHlwZTsKICAgICAgICBpZiAoYVN1YnN0aXR1dGlvbiAhPSBudWxsKSB7CiAgICAgICAgICBhVHlwZSA9IGFTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoYVR5cGUpOwogICAgICAgIH0KICAgICAgICBEYXJ0VHlwZSBiVHlwZSA9IGJQYXJhbWV0ZXIudHlwZTsKICAgICAgICBpZiAoYlN1YnN0aXR1dGlvbiAhPSBudWxsKSB7CiAgICAgICAgICBiVHlwZSA9IGJTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoYlR5cGUpOwogICAgICAgIH0KICAgICAgICBpZiAoc3Vic3RpdHV0aW9uICE9IG51bGwpIHsKICAgICAgICAgIGJUeXBlID0gc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGJUeXBlKTsKICAgICAgICB9CiAgICAgICAgaWYgKGFUeXBlICE9IGJUeXBlKSB7CiAgICAgICAgICBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIHBhcmFtZXRlcjsKICAgICAgICAgIGZvciAoaW50IGkgPSBhUG9zaXRpb25hbC5sZW5ndGg7IGkgPCBhLmZvcm1hbHMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgaWYgKGEuZm9ybWFsc1tpXS5uYW1lID09IG5hbWUpIHsKICAgICAgICAgICAgICBwYXJhbWV0ZXIgPSBhLmZvcm1hbHNbaV07CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChhLnBhcmVudCA9PSBjbGFzc0J1aWxkZXIgJiYgcGFyYW1ldGVyLnR5cGUgPT0gbnVsbCkgewogICAgICAgICAgICByZXN1bHQgPSBpbmZlclBhcmFtZXRlclR5cGUoCiAgICAgICAgICAgICAgICBjbGFzc0J1aWxkZXIsIGEsIHBhcmFtZXRlciwgYlR5cGUsIGhhZFR5cGVzSW5mZXJyZWQsIGhpZXJhcmNoeSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkZWJ1Zz8ubG9nKCJHaXZpbmcgdXAgMTIiKTsKICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBkZWJ1Zz8ubG9nKCJJbmZlcnJpbmcgdHlwZXMgZm9yICR7ZnVsbE5hbWUoYSl9IGJhc2VkIG9uICR7ZnVsbE5hbWUoYil9ICIgKwogICAgICAgIChyZXN1bHQgPyAic3VjY2VlZGVkLiIgOiAiZmFpbGVkLiIpKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBib29sIGluZmVyR2V0dGVyVHlwZShQcm9jZWR1cmVCdWlsZGVyIGEsIEJ1aWxkZXIgYikgewogICAgZGVidWc/LmxvZygKICAgICAgICAiSW5mZXJyaW5nIGdldHRlciB0eXBlcyBmb3IgJHtmdWxsTmFtZShhKX0gYmFzZWQgb24gJHtmdWxsTmFtZShiKX0iKTsKICAgIE1lbWJlciBiVGFyZ2V0ID0gYi50YXJnZXQ7CiAgICBEYXJ0VHlwZSBiVHlwZTsKICAgIGlmIChiVGFyZ2V0IGlzIEZpZWxkKSB7CiAgICAgIGJUeXBlID0gYlRhcmdldC50eXBlOwogICAgfSBlbHNlIGlmIChiVGFyZ2V0IGlzIFByb2NlZHVyZSkgewogICAgICBpZiAoYi5pc1NldHRlcikgewogICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gYlBhcmFtZXRlciA9CiAgICAgICAgICAgIGJUYXJnZXQuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMuc2luZ2xlOwogICAgICAgIGJUeXBlID0gYlBhcmFtZXRlci50eXBlOwogICAgICAgIGlmICghaGFzRXhwbGljaXRseVR5cGVkRm9ybWFsUGFyYW1ldGVyKGIsIDApKSB7CiAgICAgICAgICBkZWJ1Zz8ubG9nKCJHaXZpbmcgdXAgKHR5cGUgbWF5IGJlIGluZmVycmVkKSIpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChiLmlzR2V0dGVyKSB7CiAgICAgICAgYlR5cGUgPSBiVGFyZ2V0LmZ1bmN0aW9uLnJldHVyblR5cGU7CiAgICAgICAgaWYgKCFoYXNFeHBsaWNpdFJldHVyblR5cGUoYikpIHsKICAgICAgICAgIGRlYnVnPy5sb2coIkdpdmluZyB1cCAocmV0dXJuIHR5cGUgbWF5IGJlIGluZmVycmVkKSIpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBkZWJ1Zz8ubG9nKCJHaXZpbmcgdXAgKG5vdCBhY2Nlc3NvcjogJHtiVGFyZ2V0LmtpbmR9KSIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZGVidWc/LmxvZygiR2l2aW5nIHVwIChub3QgZmllbGQvcHJvY2VkdXJlOiAke2JUYXJnZXQucnVudGltZVR5cGV9KSIpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gYS5wcm9jZWR1cmUuZnVuY3Rpb24ucmV0dXJuVHlwZSA9PSBiVHlwZTsKICB9CgogIGJvb2wgaW5mZXJTZXR0ZXJUeXBlKFByb2NlZHVyZUJ1aWxkZXIgYSwgQnVpbGRlciBiKSB7CiAgICBkZWJ1Zz8ubG9nKAogICAgICAgICJJbmZlcnJpbmcgc2V0dGVyIHR5cGVzIGZvciAke2Z1bGxOYW1lKGEpfSBiYXNlZCBvbiAke2Z1bGxOYW1lKGIpfSIpOwogICAgTWVtYmVyIGJUYXJnZXQgPSBiLnRhcmdldDsKICAgIFByb2NlZHVyZSBhUHJvY2VkdXJlID0gYS5wcm9jZWR1cmU7CiAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGFQYXJhbWV0ZXIgPQogICAgICAgIGFQcm9jZWR1cmUuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMuc2luZ2xlOwogICAgRGFydFR5cGUgYlR5cGU7CiAgICBpZiAoYlRhcmdldCBpcyBGaWVsZCkgewogICAgICBiVHlwZSA9IGJUYXJnZXQudHlwZTsKICAgICAgY29weVBhcmFtZXRlckNvdmFyaWFuY2VGcm9tRmllbGQoYS5wYXJlbnQsIGFQYXJhbWV0ZXIsIGJUYXJnZXQpOwogICAgfQogICAgaWYgKGJUYXJnZXQgaXMgUHJvY2VkdXJlKSB7CiAgICAgIGlmIChiLmlzU2V0dGVyKSB7CiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBiUGFyYW1ldGVyID0KICAgICAgICAgICAgYlRhcmdldC5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5zaW5nbGU7CiAgICAgICAgYlR5cGUgPSBiUGFyYW1ldGVyLnR5cGU7CiAgICAgICAgY29weVBhcmFtZXRlckNvdmFyaWFuY2UoYS5wYXJlbnQsIGFQYXJhbWV0ZXIsIGJQYXJhbWV0ZXIpOwogICAgICAgIGlmICghaGFzRXhwbGljaXRseVR5cGVkRm9ybWFsUGFyYW1ldGVyKGIsIDApIHx8CiAgICAgICAgICAgICFoYXNFeHBsaWNpdGx5VHlwZWRGb3JtYWxQYXJhbWV0ZXIoYSwgMCkpIHsKICAgICAgICAgIGRlYnVnPy5sb2coIkdpdmluZyB1cCAodHlwZSBtYXkgYmUgaW5mZXJyZWQpIik7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGIuaXNHZXR0ZXIpIHsKICAgICAgICBiVHlwZSA9IGJUYXJnZXQuZnVuY3Rpb24ucmV0dXJuVHlwZTsKICAgICAgICBpZiAoIWhhc0V4cGxpY2l0UmV0dXJuVHlwZShiKSkgewogICAgICAgICAgZGVidWc/LmxvZygiR2l2aW5nIHVwIChyZXR1cm4gdHlwZSBtYXkgYmUgaW5mZXJyZWQpIik7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGRlYnVnPy5sb2coIkdpdmluZyB1cCAobm90IGFjY2Vzc29yOiAke2JUYXJnZXQua2luZH0pIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBkZWJ1Zz8ubG9nKCJHaXZpbmcgdXAgKG5vdCBmaWVsZC9wcm9jZWR1cmU6ICR7YlRhcmdldC5ydW50aW1lVHlwZX0pIik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiBhUGFyYW1ldGVyLnR5cGUgPT0gYlR5cGU7CiAgfQoKICB2b2lkIGNoZWNrVmFsaWRPdmVycmlkZShCdWlsZGVyIGEsIEJ1aWxkZXIgYikgewogICAgZGVidWc/LmxvZygKICAgICAgICAiY2hlY2tWYWxpZE92ZXJyaWRlKCR7ZnVsbE5hbWUoYSl9LCAke2Z1bGxOYW1lKGIpfSkgJHthLnJ1bnRpbWVUeXBlfSIpOwogICAgaWYgKGEgaXMgUHJvY2VkdXJlQnVpbGRlcikgewogICAgICBpZiAoaW5mZXJNZXRob2RUeXBlcyhhLCBiKSkgcmV0dXJuOwogICAgfSBlbHNlIGlmIChhLmlzRmllbGQpIHsKICAgICAgaWYgKGluZmVyRmllbGRUeXBlcyhhLCBiKSkgcmV0dXJuOwogICAgfQogICAgTWVtYmVyIGFUYXJnZXQgPSBhLnRhcmdldDsKICAgIE1lbWJlciBiVGFyZ2V0ID0gYi50YXJnZXQ7CiAgICBpZiAoYVRhcmdldCBpcyBQcm9jZWR1cmUgJiYgIWFUYXJnZXQuaXNBY2Nlc3NvciAmJiBiVGFyZ2V0IGlzIFByb2NlZHVyZSkgewogICAgICBpZiAoaGFzU2FtZVNpZ25hdHVyZShhVGFyZ2V0LmZ1bmN0aW9uLCBiVGFyZ2V0LmZ1bmN0aW9uKSkgcmV0dXJuOwogICAgfQoKICAgIGlmIChiIGlzIERlbGF5ZWRNZW1iZXIpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBiLmRlY2xhcmF0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgIGhpZXJhcmNoeS5vdmVycmlkZUNoZWNrcwogICAgICAgICAgICAuYWRkKG5ldyBEZWxheWVkT3ZlcnJpZGVDaGVjayhjbGFzc0J1aWxkZXIsIGEsIGIuZGVjbGFyYXRpb25zW2ldKSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGhpZXJhcmNoeS5vdmVycmlkZUNoZWNrcwogICAgICAgICAgLmFkZChuZXcgRGVsYXllZE92ZXJyaWRlQ2hlY2soY2xhc3NCdWlsZGVyLCBhLCBiKSk7CiAgICB9CiAgfQoKICBib29sIGluZmVyRmllbGRUeXBlcyhNZW1iZXJCdWlsZGVyIGEsIEJ1aWxkZXIgYikgewogICAgZGVidWc/LmxvZygiVHJ5aW5nIHRvIGluZmVyIGZpZWxkIHR5cGVzIGZvciAke2Z1bGxOYW1lKGEpfSAiCiAgICAgICAgImJhc2VkIG9uICR7ZnVsbE5hbWUoYil9Iik7CiAgICBpZiAoYiBpcyBEZWxheWVkTWVtYmVyKSB7CiAgICAgIGJvb2wgaGFzU2FtZVNpZ25hdHVyZSA9IHRydWU7CiAgICAgIExpc3Q8QnVpbGRlcj4gZGVjbGFyYXRpb25zID0gYi5kZWNsYXJhdGlvbnM7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVjbGFyYXRpb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKCFpbmZlckZpZWxkVHlwZXMoYSwgZGVjbGFyYXRpb25zW2ldKSkgewogICAgICAgICAgaGFzU2FtZVNpZ25hdHVyZSA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gaGFzU2FtZVNpZ25hdHVyZTsKICAgIH0KICAgIE1lbWJlciBiVGFyZ2V0ID0gYi50YXJnZXQ7CiAgICBEYXJ0VHlwZSBpbmhlcml0ZWRUeXBlOwogICAgaWYgKGJUYXJnZXQgaXMgUHJvY2VkdXJlKSB7CiAgICAgIGlmIChiVGFyZ2V0LmlzU2V0dGVyKSB7CiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBwYXJhbWV0ZXIgPQogICAgICAgICAgICBiVGFyZ2V0LmZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLnNpbmdsZTsKICAgICAgICAvLyBpbmhlcml0ZWRUeXBlID0gcGFyYW1ldGVyLnR5cGU7CiAgICAgICAgY29weUZpZWxkQ292YXJpYW5jZUZyb21QYXJhbWV0ZXIoYS5wYXJlbnQsIGEubWVtYmVyLCBwYXJhbWV0ZXIpOwogICAgICAgIGlmICghaGFzRXhwbGljaXRseVR5cGVkRm9ybWFsUGFyYW1ldGVyKGIsIDApKSB7CiAgICAgICAgICBkZWJ1Zz8ubG9nKCJHaXZpbmcgdXAgKHR5cGUgbWF5IGJlIGluZmVycmVkKSIpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChiVGFyZ2V0LmlzR2V0dGVyKSB7CiAgICAgICAgaWYgKCFoYXNFeHBsaWNpdFJldHVyblR5cGUoYikpIHJldHVybiBmYWxzZTsKICAgICAgICBpbmhlcml0ZWRUeXBlID0gYlRhcmdldC5mdW5jdGlvbi5yZXR1cm5UeXBlOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGJUYXJnZXQgaXMgRmllbGQpIHsKICAgICAgY29weUZpZWxkQ292YXJpYW5jZShhLnBhcmVudCwgYS5tZW1iZXIsIGJUYXJnZXQpOwogICAgICBpbmhlcml0ZWRUeXBlID0gYlRhcmdldC50eXBlOwogICAgfQogICAgaWYgKGluaGVyaXRlZFR5cGUgPT0gbnVsbCkgewogICAgICBkZWJ1Zz8ubG9nKCJHaXZpbmcgdXAgKGluaGVyaXRlZFR5cGUgPT0gbnVsbClcbiR7U3RhY2tUcmFjZS5jdXJyZW50fSIpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBDbGFzc0J1aWxkZXIgYUNsYXNzQnVpbGRlciA9IGEucGFyZW50OwogICAgU3Vic3RpdHV0aW9uIGFTdWJzdGl0dXRpb247CiAgICBpZiAoY2xhc3NCdWlsZGVyICE9IGFDbGFzc0J1aWxkZXIpIHsKICAgICAgYXNzZXJ0KAogICAgICAgICAgc3Vic3RpdHV0aW9ucy5jb250YWluc0tleShhQ2xhc3NCdWlsZGVyLmNscyksCiAgICAgICAgICAiJHtjbGFzc0J1aWxkZXIuZnVsbE5hbWVGb3JFcnJvcnN9ICIKICAgICAgICAgICIke2FDbGFzc0J1aWxkZXIuZnVsbE5hbWVGb3JFcnJvcnN9Iik7CiAgICAgIGFTdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb25zW2FDbGFzc0J1aWxkZXIuY2xzXTsKICAgICAgZGVidWc/LmxvZygiJHtjbGFzc0J1aWxkZXIuZnVsbE5hbWVGb3JFcnJvcnN9IC0+ICIKICAgICAgICAgICIke2FDbGFzc0J1aWxkZXIuZnVsbE5hbWVGb3JFcnJvcnN9ICRhU3Vic3RpdHV0aW9uIik7CiAgICB9CiAgICBDbGFzc0J1aWxkZXIgYkNsYXNzQnVpbGRlciA9IGIucGFyZW50OwogICAgU3Vic3RpdHV0aW9uIGJTdWJzdGl0dXRpb247CiAgICBpZiAoY2xhc3NCdWlsZGVyICE9IGJDbGFzc0J1aWxkZXIpIHsKICAgICAgYXNzZXJ0KAogICAgICAgICAgc3Vic3RpdHV0aW9ucy5jb250YWluc0tleShiQ2xhc3NCdWlsZGVyLmNscyksCiAgICAgICAgICAiJHtjbGFzc0J1aWxkZXIuZnVsbE5hbWVGb3JFcnJvcnN9ICIKICAgICAgICAgICIke2JDbGFzc0J1aWxkZXIuZnVsbE5hbWVGb3JFcnJvcnN9Iik7CiAgICAgIGJTdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb25zW2JDbGFzc0J1aWxkZXIuY2xzXTsKICAgICAgZGVidWc/LmxvZygiJHtjbGFzc0J1aWxkZXIuZnVsbE5hbWVGb3JFcnJvcnN9IC0+ICIKICAgICAgICAgICIke2JDbGFzc0J1aWxkZXIuZnVsbE5hbWVGb3JFcnJvcnN9ICRiU3Vic3RpdHV0aW9uIik7CiAgICB9CiAgICBpZiAoYlN1YnN0aXR1dGlvbiAhPSBudWxsICYmIGluaGVyaXRlZFR5cGUgaXMhIEltcGxpY2l0RmllbGRUeXBlKSB7CiAgICAgIGluaGVyaXRlZFR5cGUgPSBiU3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGluaGVyaXRlZFR5cGUpOwogICAgfQoKICAgIEZpZWxkIGFGaWVsZCA9IGEubWVtYmVyOwogICAgRGFydFR5cGUgZGVjbGFyZWRUeXBlID0gYUZpZWxkLnR5cGU7CiAgICBpZiAoYVN1YnN0aXR1dGlvbiAhPSBudWxsKSB7CiAgICAgIGRlY2xhcmVkVHlwZSA9IGFTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoZGVjbGFyZWRUeXBlKTsKICAgIH0KICAgIGlmIChkZWNsYXJlZFR5cGUgPT0gaW5oZXJpdGVkVHlwZSkgcmV0dXJuIHRydWU7CgogICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKICAgIGlmIChhIGlzIEZpZWxkQnVpbGRlcikgewogICAgICBpZiAoYS5wYXJlbnQgPT0gY2xhc3NCdWlsZGVyICYmIGEudHlwZSA9PSBudWxsKSB7CiAgICAgICAgaWYgKGEuaGFkVHlwZXNJbmZlcnJlZCkgewogICAgICAgICAgcmVwb3J0Q2FudEluZmVyRmllbGRUeXBlKGNsYXNzQnVpbGRlciwgYSk7CiAgICAgICAgICBpbmhlcml0ZWRUeXBlID0gY29uc3QgSW52YWxpZFR5cGUoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgIGEuaGFkVHlwZXNJbmZlcnJlZCA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChpbmhlcml0ZWRUeXBlIGlzIEltcGxpY2l0RmllbGRUeXBlKSB7CiAgICAgICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5ID0gY2xhc3NCdWlsZGVyLmxpYnJhcnk7CiAgICAgICAgICAobGlicmFyeS5pbXBsaWNpdGx5VHlwZWRGaWVsZHMgPz89IDxGaWVsZEJ1aWxkZXI+W10pLmFkZChhKTsKICAgICAgICB9CiAgICAgICAgYS5maWVsZC50eXBlID0gaW5oZXJpdGVkVHlwZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgY29weVBhcmFtZXRlckNvdmFyaWFuY2UoQnVpbGRlciBwYXJlbnQsIFZhcmlhYmxlRGVjbGFyYXRpb24gYVBhcmFtZXRlciwKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBiUGFyYW1ldGVyKSB7CiAgICBpZiAocGFyZW50ID09IGNsYXNzQnVpbGRlcikgewogICAgICBpZiAoYlBhcmFtZXRlci5pc0NvdmFyaWFudCkgewogICAgICAgIGFQYXJhbWV0ZXIuaXNDb3ZhcmlhbnQgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChiUGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwpIHsKICAgICAgICBhUGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwgPSB0cnVlOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIGNvcHlQYXJhbWV0ZXJDb3ZhcmlhbmNlRnJvbUZpZWxkKAogICAgICBCdWlsZGVyIHBhcmVudCwgVmFyaWFibGVEZWNsYXJhdGlvbiBhUGFyYW1ldGVyLCBGaWVsZCBiRmllbGQpIHsKICAgIGlmIChwYXJlbnQgPT0gY2xhc3NCdWlsZGVyKSB7CiAgICAgIGlmIChiRmllbGQuaXNDb3ZhcmlhbnQpIHsKICAgICAgICBhUGFyYW1ldGVyLmlzQ292YXJpYW50ID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoYkZpZWxkLmlzR2VuZXJpY0NvdmFyaWFudEltcGwpIHsKICAgICAgICBhUGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwgPSB0cnVlOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIGNvcHlGaWVsZENvdmFyaWFuY2UoQnVpbGRlciBwYXJlbnQsIEZpZWxkIGFGaWVsZCwgRmllbGQgYkZpZWxkKSB7CiAgICBpZiAocGFyZW50ID09IGNsYXNzQnVpbGRlcikgewogICAgICBpZiAoYkZpZWxkLmlzQ292YXJpYW50KSB7CiAgICAgICAgYUZpZWxkLmlzQ292YXJpYW50ID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoYkZpZWxkLmlzR2VuZXJpY0NvdmFyaWFudEltcGwpIHsKICAgICAgICBhRmllbGQuaXNHZW5lcmljQ292YXJpYW50SW1wbCA9IHRydWU7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgY29weUZpZWxkQ292YXJpYW5jZUZyb21QYXJhbWV0ZXIoCiAgICAgIEJ1aWxkZXIgcGFyZW50LCBGaWVsZCBhRmllbGQsIFZhcmlhYmxlRGVjbGFyYXRpb24gYlBhcmFtZXRlcikgewogICAgaWYgKHBhcmVudCA9PSBjbGFzc0J1aWxkZXIpIHsKICAgICAgaWYgKGJQYXJhbWV0ZXIuaXNDb3ZhcmlhbnQpIHsKICAgICAgICBhRmllbGQuaXNDb3ZhcmlhbnQgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChiUGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwpIHsKICAgICAgICBhRmllbGQuaXNHZW5lcmljQ292YXJpYW50SW1wbCA9IHRydWU7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgY29weVR5cGVQYXJhbWV0ZXJDb3ZhcmlhbmNlKAogICAgICBCdWlsZGVyIHBhcmVudCwgVHlwZVBhcmFtZXRlciBhUGFyYW1ldGVyLCBUeXBlUGFyYW1ldGVyIGJQYXJhbWV0ZXIpIHsKICAgIGlmIChwYXJlbnQgPT0gY2xhc3NCdWlsZGVyKSB7CiAgICAgIGlmIChiUGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwpIHsKICAgICAgICBhUGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwgPSB0cnVlOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIHJlcG9ydEluaGVyaXRhbmNlQ29uZmxpY3QoQnVpbGRlciBhLCBCdWlsZGVyIGIpIHsKICAgIFN0cmluZyBuYW1lID0gYS5mdWxsTmFtZUZvckVycm9yczsKICAgIGlmIChhLnBhcmVudCAhPSBiLnBhcmVudCkgewogICAgICBpZiAoYS5wYXJlbnQgPT0gY2xhc3NCdWlsZGVyKSB7CiAgICAgICAgY2xhc3NCdWlsZGVyLmFkZFByb2JsZW0oCiAgICAgICAgICAgIG1lc3NhZ2VEZWNsYXJlZE1lbWJlckNvbmZsaWN0c1dpdGhJbmhlcml0ZWRNZW1iZXIsCiAgICAgICAgICAgIGEuY2hhck9mZnNldCwKICAgICAgICAgICAgbmFtZS5sZW5ndGgsCiAgICAgICAgICAgIGNvbnRleHQ6IDxMb2NhdGVkTWVzc2FnZT5bCiAgICAgICAgICAgICAgbWVzc2FnZURlY2xhcmVkTWVtYmVyQ29uZmxpY3RzV2l0aEluaGVyaXRlZE1lbWJlckNhdXNlCiAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24oYi5maWxlVXJpLCBiLmNoYXJPZmZzZXQsIG5hbWUubGVuZ3RoKQogICAgICAgICAgICBdKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjbGFzc0J1aWxkZXIuYWRkUHJvYmxlbShtZXNzYWdlSW5oZXJpdGVkTWVtYmVyc0NvbmZsaWN0LAogICAgICAgICAgICBjbGFzc0J1aWxkZXIuY2hhck9mZnNldCwgY2xhc3NCdWlsZGVyLmZ1bGxOYW1lRm9yRXJyb3JzLmxlbmd0aCwKICAgICAgICAgICAgY29udGV4dDogaW5oZXJpdGVkQ29uZmxpY3RDb250ZXh0KGEsIGIpKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChhLmlzU3RhdGljICE9IGIuaXNTdGF0aWMpIHsKICAgICAgQnVpbGRlciBzdGF0aWNNZW1iZXI7CiAgICAgIEJ1aWxkZXIgaW5zdGFuY2VNZW1iZXI7CiAgICAgIGlmIChhLmlzU3RhdGljKSB7CiAgICAgICAgc3RhdGljTWVtYmVyID0gYTsKICAgICAgICBpbnN0YW5jZU1lbWJlciA9IGI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3RhdGljTWVtYmVyID0gYjsKICAgICAgICBpbnN0YW5jZU1lbWJlciA9IGE7CiAgICAgIH0KICAgICAgY2xhc3NCdWlsZGVyLmxpYnJhcnkuYWRkUHJvYmxlbShtZXNzYWdlU3RhdGljQW5kSW5zdGFuY2VDb25mbGljdCwKICAgICAgICAgIHN0YXRpY01lbWJlci5jaGFyT2Zmc2V0LCBuYW1lLmxlbmd0aCwgc3RhdGljTWVtYmVyLmZpbGVVcmksCiAgICAgICAgICBjb250ZXh0OiA8TG9jYXRlZE1lc3NhZ2U+WwogICAgICAgICAgICBtZXNzYWdlU3RhdGljQW5kSW5zdGFuY2VDb25mbGljdENhdXNlLndpdGhMb2NhdGlvbigKICAgICAgICAgICAgICAgIGluc3RhbmNlTWVtYmVyLmZpbGVVcmksIGluc3RhbmNlTWVtYmVyLmNoYXJPZmZzZXQsIG5hbWUubGVuZ3RoKQogICAgICAgICAgXSk7CiAgICB9IGVsc2UgewogICAgICAvLyBUaGlzIG1lc3NhZ2UgY2FuIGJlIHJlcG9ydGVkIHR3aWNlICh3aGVuIG1lcmdpbmcgbG9jYWxNZW1iZXJzIHdpdGgKICAgICAgLy8gY2xhc3NTZXR0ZXJzLCBvciBsb2NhbFNldHRlcnMgd2l0aCBjbGFzc01lbWJlcnMpLiBCeSBlbnN1cmluZyB0aGF0CiAgICAgIC8vIHdlIGFsd2F5cyByZXBvcnQgdGhlIG9uZSB3aXRoIGhpZ2hlciBjaGFyT2Zmc2V0IGFzIHRoZSBkdXBsaWNhdGUsCiAgICAgIC8vIHRoZSBtZXNzYWdlIGR1cGxpY2F0aW9uIGxvZ2ljIGVuc3VyZXMgdGhhdCB3ZSBvbmx5IHJlcG9ydCB0aGlzCiAgICAgIC8vIHByb2JsZW0gb25jZS4KICAgICAgQnVpbGRlciBleGlzdGluZzsKICAgICAgQnVpbGRlciBkdXBsaWNhdGU7CiAgICAgIGFzc2VydChhLmZpbGVVcmkgPT0gYi5maWxlVXJpKTsKICAgICAgaWYgKGEuY2hhck9mZnNldCA8IGIuY2hhck9mZnNldCkgewogICAgICAgIGV4aXN0aW5nID0gYTsKICAgICAgICBkdXBsaWNhdGUgPSBiOwogICAgICB9IGVsc2UgewogICAgICAgIGV4aXN0aW5nID0gYjsKICAgICAgICBkdXBsaWNhdGUgPSBhOwogICAgICB9CiAgICAgIGNsYXNzQnVpbGRlci5saWJyYXJ5LmFkZFByb2JsZW0oCiAgICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvbi53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgZHVwbGljYXRlLmNoYXJPZmZzZXQsCiAgICAgICAgICBuYW1lLmxlbmd0aCwKICAgICAgICAgIGR1cGxpY2F0ZS5maWxlVXJpLAogICAgICAgICAgY29udGV4dDogPExvY2F0ZWRNZXNzYWdlPlsKICAgICAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25DYXVzZS53aXRoQXJndW1lbnRzKG5hbWUpLndpdGhMb2NhdGlvbigKICAgICAgICAgICAgICAgIGV4aXN0aW5nLmZpbGVVcmksIGV4aXN0aW5nLmNoYXJPZmZzZXQsIG5hbWUubGVuZ3RoKQogICAgICAgICAgXSk7CiAgICB9CiAgfQoKICAvLy8gV2hlbiBtZXJnaW5nIGBhTGlzdGAgYW5kIGBiTGlzdGAsIFttZW1iZXJdIHdhcyBvbmx5IGZvdW5kIGluIGBhTGlzdGAuCiAgLy8vCiAgLy8vIElmIFttZXJnZUtpbmRdIGlzIGBNZXJnZUtpbmQuc3VwZXJjbGFzc2AgW21lbWJlcl0gaXMgZGVjbGFyZWQgaW4gY3VycmVudAogIC8vLyBjbGFzcywgYW5kIGlzbid0IG92ZXJyaWRpbmcgYSBtZXRob2QgZnJvbSB0aGUgc3VwZXJjbGFzcy4KICAvLy8KICAvLy8gSWYgW21lcmdlS2luZF0gaXMgYE1lcmdlS2luZC5pbnRlcmZhY2VzYCwgW21lbWJlcl0gaXMgaWdub3JlZCBmb3Igbm93LgogIC8vLwogIC8vLyBJZiBbbWVyZ2VLaW5kXSBpcyBgTWVyZ2VLaW5kLnN1cGVydHlwZXNgLCBbbWVtYmVyXSBpc24ndAogIC8vLyBpbXBsZW1lbnRpbmcvb3ZlcnJpZGluZyBhbnl0aGluZy4KICB2b2lkIGhhbmRsZU9ubHlBKEJ1aWxkZXIgbWVtYmVyLCBNZXJnZUtpbmQgbWVyZ2VLaW5kKSB7CiAgICBpZiAobWVyZ2VLaW5kID09IE1lcmdlS2luZC5pbnRlcmZhY2VzTWVtYmVycyB8fAogICAgICAgIG1lcmdlS2luZCA9PSBNZXJnZUtpbmQuaW50ZXJmYWNlc1NldHRlcnMpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gVE9ETyhhaGUpOiBFbmFibGUgdGhpcyBvcHRpbWl6YXRpb246CiAgICAvLyBpZiAoY2xzIGlzIERpbGxDbGFzc0J1aWxkZXIpIHJldHVybjsKICAgIC8vIGFzc2VydChtZXJnZUtpbmQgPT0gTWVyZ2VLaW5kLmludGVyZmFjZXMgfHwKICAgIC8vICAgIG1lbWJlciBpcyEgSW50ZXJmYWNlQ29uZmxpY3QpOwogICAgaWYgKChtZXJnZUtpbmQgPT0gTWVyZ2VLaW5kLnN1cGVyY2xhc3NNZW1iZXJzIHx8CiAgICAgICAgICAgIG1lcmdlS2luZCA9PSBNZXJnZUtpbmQuc3VwZXJjbGFzc1NldHRlcnMpICYmCiAgICAgICAgaXNBYnN0cmFjdChtZW1iZXIpKSB7CiAgICAgIHJlY29yZEFic3RyYWN0TWVtYmVyKG1lbWJlcik7CiAgICB9CiAgfQoKICAvLy8gV2hlbiBtZXJnaW5nIGBhTGlzdGAgYW5kIGBiTGlzdGAsIFttZW1iZXJdIHdhcyBvbmx5IGZvdW5kIGluIGBiTGlzdGAuCiAgLy8vCiAgLy8vIElmIFttZXJnZUtpbmRdIGlzIGBNZXJnZUtpbmQuc3VwZXJjbGFzc2AgW21lbWJlcl0gaXMgYmVpbmcgaW5oZXJpdGVkIGZyb20KICAvLy8gYSBzdXBlcmNsYXNzLgogIC8vLwogIC8vLyBJZiBbbWVyZ2VLaW5kXSBpcyBgTWVyZ2VLaW5kLmludGVyZmFjZXNgLCBbbWVtYmVyXSBpcyBpZ25vcmVkIGZvciBub3cuCiAgLy8vCiAgLy8vIElmIFttZXJnZUtpbmRdIGlzIGBNZXJnZUtpbmQuc3VwZXJ0eXBlc2AsIFttZW1iZXJdIGlzIGltcGxpY2l0bHkKICAvLy8gYWJzdHJhY3QsIGFuZCBub3QgaW1wbGVtZW50ZWQuCiAgQnVpbGRlciBoYW5kbGVPbmx5QihCdWlsZGVyIG1lbWJlciwgTWVyZ2VLaW5kIG1lcmdlS2luZCkgewogICAgaWYgKG1lcmdlS2luZCA9PSBNZXJnZUtpbmQuaW50ZXJmYWNlc01lbWJlcnMgfHwKICAgICAgICBtZXJnZUtpbmQgPT0gTWVyZ2VLaW5kLmludGVyZmFjZXNTZXR0ZXJzKSB7CiAgICAgIHJldHVybiBtZW1iZXI7CiAgICB9CiAgICAvLyBUT0RPKGFoZSk6IEVuYWJsZSB0aGlzIG9wdGltaXphdGlvbjoKICAgIC8vIGlmIChjbHMgaXMgRGlsbENsYXNzQnVpbGRlcikgcmV0dXJuIG1lbWJlcjsKICAgIE1lbWJlciB0YXJnZXQgPSBtZW1iZXIudGFyZ2V0OwogICAgaWYgKChtZXJnZUtpbmQgPT0gTWVyZ2VLaW5kLnN1cGVydHlwZXNNZW1iZXJzIHx8CiAgICAgICAgICAgIG1lcmdlS2luZCA9PSBNZXJnZUtpbmQuc3VwZXJ0eXBlc1NldHRlcnMpIHx8CiAgICAgICAgKChtZXJnZUtpbmQgPT0gTWVyZ2VLaW5kLnN1cGVyY2xhc3NNZW1iZXJzIHx8CiAgICAgICAgICAgICAgICBtZXJnZUtpbmQgPT0gTWVyZ2VLaW5kLnN1cGVyY2xhc3NTZXR0ZXJzKSAmJgogICAgICAgICAgICB0YXJnZXQuaXNBYnN0cmFjdCkpIHsKICAgICAgaWYgKGlzTmFtZVZpc2libGVJbih0YXJnZXQubmFtZSwgY2xhc3NCdWlsZGVyLmxpYnJhcnkpKSB7CiAgICAgICAgcmVjb3JkQWJzdHJhY3RNZW1iZXIobWVtYmVyKTsKICAgICAgfQogICAgfQogICAgaWYgKG1lcmdlS2luZCA9PSBNZXJnZUtpbmQuc3VwZXJjbGFzc01lbWJlcnMgJiYKICAgICAgICB0YXJnZXQuZW5jbG9zaW5nQ2xhc3MgIT0gb2JqZWN0Q2xhc3MuY2xzICYmCiAgICAgICAgdGFyZ2V0Lm5hbWUgPT0gbm9TdWNoTWV0aG9kTmFtZSkgewogICAgICBoYXNOb1N1Y2hNZXRob2QgPSB0cnVlOwogICAgfQogICAgaWYgKG1lcmdlS2luZCAhPSBNZXJnZUtpbmQubWVtYmVyc1dpdGhTZXR0ZXJzICYmCiAgICAgICAgbWVyZ2VLaW5kICE9IE1lcmdlS2luZC5zZXR0ZXJzV2l0aE1lbWJlcnMgJiYKICAgICAgICBtZW1iZXIgaXMgRGVsYXllZE1lbWJlciAmJgogICAgICAgIG1lbWJlci5pc0luaGVyaXRhYmxlQ29uZmxpY3QpIHsKICAgICAgaGllcmFyY2h5LmRlbGF5ZWRNZW1iZXJDaGVja3MuYWRkKG1lbWJlci53aXRoUGFyZW50KGNsYXNzQnVpbGRlcikpOwogICAgfQogICAgcmV0dXJuIG1lbWJlcjsKICB9CgogIHZvaWQgcmVjb3JkQWJzdHJhY3RNZW1iZXIoQnVpbGRlciBtZW1iZXIpIHsKICAgIGFic3RyYWN0TWVtYmVycyA/Pz0gPEJ1aWxkZXI+W107CiAgICBpZiAobWVtYmVyIGlzIERlbGF5ZWRNZW1iZXIpIHsKICAgICAgYWJzdHJhY3RNZW1iZXJzLmFkZEFsbChtZW1iZXIuZGVjbGFyYXRpb25zKTsKICAgIH0gZWxzZSB7CiAgICAgIGFic3RyYWN0TWVtYmVycy5hZGQobWVtYmVyKTsKICAgIH0KICB9CgogIENsYXNzSGllcmFyY2h5Tm9kZSBidWlsZCgpIHsKICAgIGFzc2VydCghY2xhc3NCdWlsZGVyLmlzUGF0Y2gpOwogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIHN1cGVybm9kZTsKICAgIGlmIChvYmplY3RDbGFzcyAhPSBjbGFzc0J1aWxkZXIub3JpZ2luKSB7CiAgICAgIHN1cGVybm9kZSA9IGhpZXJhcmNoeS5nZXROb2RlRnJvbVR5cGUoY2xhc3NCdWlsZGVyLnN1cGVydHlwZSk7CiAgICAgIGlmIChzdXBlcm5vZGUgPT0gbnVsbCkgewogICAgICAgIHN1cGVybm9kZSA9IGhpZXJhcmNoeS5nZXROb2RlRnJvbUNsYXNzKG9iamVjdENsYXNzKTsKICAgICAgfQogICAgICBhc3NlcnQoc3VwZXJub2RlICE9IG51bGwpOwogICAgfQoKICAgIFNjb3BlIHNjb3BlID0gY2xhc3NCdWlsZGVyLnNjb3BlOwogICAgaWYgKGNsYXNzQnVpbGRlci5pc01peGluQXBwbGljYXRpb24pIHsKICAgICAgQnVpbGRlciBtaXhpbiA9IGNsYXNzQnVpbGRlci5taXhlZEluVHlwZS5kZWNsYXJhdGlvbjsKICAgICAgaW5mZXJNaXhpbkFwcGxpY2F0aW9uKCk7CiAgICAgIC8vIHJlY29yZFN1cGVydHlwZShjbHMubWl4ZWRJblR5cGUpOwogICAgICB3aGlsZSAobWl4aW4uaXNOYW1lZE1peGluQXBwbGljYXRpb24pIHsKICAgICAgICBDbGFzc0J1aWxkZXIgbmFtZWQgPSBtaXhpbjsKICAgICAgICAvLyByZWNvcmRTdXBlcnR5cGUobmFtZWQubWl4ZWRJblR5cGUpOwogICAgICAgIG1peGluID0gbmFtZWQubWl4ZWRJblR5cGUuZGVjbGFyYXRpb247CiAgICAgIH0KICAgICAgaWYgKG1peGluIGlzIENsYXNzQnVpbGRlcikgewogICAgICAgIHNjb3BlID0gbWl4aW4uc2NvcGUuY29tcHV0ZU1peGluU2NvcGUoKTsKICAgICAgfQogICAgfQoKICAgIC8vLyBNZW1iZXJzIChleGNsdWRpbmcgc2V0dGVycykgZGVjbGFyZWQgaW4gW2Nsc10uCiAgICBMaXN0PEJ1aWxkZXI+IGxvY2FsTWVtYmVycyA9IG5ldyBMaXN0PEJ1aWxkZXI+LmZyb20oc2NvcGUubG9jYWwudmFsdWVzKQogICAgICAuLnNvcnQoY29tcGFyZURlY2xhcmF0aW9ucyk7CgogICAgLy8vIFNldHRlcnMgZGVjbGFyZWQgaW4gW2Nsc10uCiAgICBMaXN0PEJ1aWxkZXI+IGxvY2FsU2V0dGVycyA9IG5ldyBMaXN0PEJ1aWxkZXI+LmZyb20oc2NvcGUuc2V0dGVycy52YWx1ZXMpCiAgICAgIC4uc29ydChjb21wYXJlRGVjbGFyYXRpb25zKTsKCiAgICAvLyBBZGQgaW1wbGllZCBzZXR0ZXJzIGZyb20gZmllbGRzIGluIFtsb2NhbE1lbWJlcnNdLgogICAgbG9jYWxTZXR0ZXJzID0gbWVyZ2VBY2Nlc3NvcnMobG9jYWxNZW1iZXJzLCBsb2NhbFNldHRlcnMpOwoKICAgIC8vLyBNZW1iZXJzIChleGNsdWRpbmcgc2V0dGVycykgZGVjbGFyZWQgaW4gW2Nsc10gb3IgaXRzIHN1cGVyY2xhc3Nlcy4gVGhpcwogICAgLy8vIGluY2x1ZGVzIHN0YXRpYyBtZXRob2RzIG9mIFtjbHNdLCBidXQgbm90IGl0cyBzdXBlcmNsYXNzZXMuCiAgICBMaXN0PEJ1aWxkZXI+IGNsYXNzTWVtYmVyczsKCiAgICAvLy8gU2V0dGVycyBkZWNsYXJlZCBpbiBbY2xzXSBvciBpdHMgc3VwZXJjbGFzc2VzLiBUaGlzIGluY2x1ZGVzIHN0YXRpYwogICAgLy8vIHNldHRlcnMgb2YgW2Nsc10sIGJ1dCBub3QgaXRzIHN1cGVyY2xhc3Nlcy4KICAgIExpc3Q8QnVpbGRlcj4gY2xhc3NTZXR0ZXJzOwoKICAgIC8vLyBNZW1iZXJzIChleGNsdWRpbmcgc2V0dGVycykgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlcy4gVGhpcyBjb250YWlucyBubwogICAgLy8vIHN0YXRpYyBtZW1iZXJzLiBJcyBudWxsIGlmIG5vIGludGVyZmFjZXMgYXJlIGltcGxlbWVudGVkIGJ5IHRoaXMgY2xhc3MKICAgIC8vLyBvciBpdHMgc3VwZXJjbGFzc2VzLgogICAgTGlzdDxCdWlsZGVyPiBpbnRlcmZhY2VNZW1iZXJzOwoKICAgIC8vLyBTZXR0ZXJzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZXMuIFRoaXMgY29udGFpbnMgbm8gc3RhdGljIHNldHRlcnMuIElzCiAgICAvLy8gbnVsbCBpZiBubyBpbnRlcmZhY2VzIGFyZSBpbXBsZW1lbnRlZCBieSB0aGlzIGNsYXNzIG9yIGl0cwogICAgLy8vIHN1cGVyY2xhc3Nlcy4KICAgIExpc3Q8QnVpbGRlcj4gaW50ZXJmYWNlU2V0dGVyczsKCiAgICBMaXN0PFR5cGVCdWlsZGVyPiBzdXBlcmNsYXNzZXM7CgogICAgTGlzdDxUeXBlQnVpbGRlcj4gaW50ZXJmYWNlczsKCiAgICBpbnQgbWF4SW5oZXJpdGFuY2VQYXRoOwoKICAgIGlmIChzdXBlcm5vZGUgPT0gbnVsbCkgewogICAgICAvLyBUaGlzIHNob3VsZCBiZSBPYmplY3QuCiAgICAgIGNsYXNzTWVtYmVycyA9IGxvY2FsTWVtYmVyczsKICAgICAgY2xhc3NTZXR0ZXJzID0gbG9jYWxTZXR0ZXJzOwogICAgICBzdXBlcmNsYXNzZXMgPSBuZXcgTGlzdDxUeXBlQnVpbGRlcj4oMCk7CiAgICAgIGludGVyZmFjZXMgPSBuZXcgTGlzdDxUeXBlQnVpbGRlcj4oMCk7CiAgICAgIG1heEluaGVyaXRhbmNlUGF0aCA9IDA7CiAgICB9IGVsc2UgewogICAgICBtYXhJbmhlcml0YW5jZVBhdGggPSBzdXBlcm5vZGUubWF4SW5oZXJpdGFuY2VQYXRoICsgMTsKICAgICAgc3VwZXJjbGFzc2VzID0gbmV3IExpc3Q8VHlwZUJ1aWxkZXI+KHN1cGVybm9kZS5zdXBlcmNsYXNzZXMubGVuZ3RoICsgMSk7CiAgICAgIHN1cGVyY2xhc3Nlcy5zZXRSYW5nZSgwLCBzdXBlcmNsYXNzZXMubGVuZ3RoIC0gMSwKICAgICAgICAgIHN1YnN0U3VwZXJ0eXBlcyhjbGFzc0J1aWxkZXIuc3VwZXJ0eXBlLCBzdXBlcm5vZGUuc3VwZXJjbGFzc2VzKSk7CiAgICAgIHN1cGVyY2xhc3Nlc1tzdXBlcmNsYXNzZXMubGVuZ3RoIC0gMV0gPQogICAgICAgICAgcmVjb3JkU3VwZXJ0eXBlKGNsYXNzQnVpbGRlci5zdXBlcnR5cGUpOwoKICAgICAgTGlzdDxUeXBlQnVpbGRlcj4gZGlyZWN0SW50ZXJmYWNlcyA9CiAgICAgICAgICBpZ25vcmVGdW5jdGlvbihjbGFzc0J1aWxkZXIuaW50ZXJmYWNlcyk7CiAgICAgIGlmIChjbGFzc0J1aWxkZXIuaXNNaXhpbkFwcGxpY2F0aW9uKSB7CiAgICAgICAgaWYgKGRpcmVjdEludGVyZmFjZXMgPT0gbnVsbCkgewogICAgICAgICAgZGlyZWN0SW50ZXJmYWNlcyA9IDxUeXBlQnVpbGRlcj5bY2xhc3NCdWlsZGVyLm1peGVkSW5UeXBlXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGlyZWN0SW50ZXJmYWNlcyA9IDxUeXBlQnVpbGRlcj5bY2xhc3NCdWlsZGVyLm1peGVkSW5UeXBlXQogICAgICAgICAgICAuLmFkZEFsbChkaXJlY3RJbnRlcmZhY2VzKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGRpcmVjdEludGVyZmFjZXMgIT0gbnVsbCkgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGlyZWN0SW50ZXJmYWNlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgcmVjb3JkU3VwZXJ0eXBlKGRpcmVjdEludGVyZmFjZXNbaV0pOwogICAgICAgIH0KICAgICAgfQogICAgICBMaXN0PFR5cGVCdWlsZGVyPiBzdXBlcmNsYXNzSW50ZXJmYWNlcyA9IHN1cGVybm9kZS5pbnRlcmZhY2VzOwogICAgICBpZiAoc3VwZXJjbGFzc0ludGVyZmFjZXMgIT0gbnVsbCkgewogICAgICAgIHN1cGVyY2xhc3NJbnRlcmZhY2VzID0KICAgICAgICAgICAgc3Vic3RTdXBlcnR5cGVzKGNsYXNzQnVpbGRlci5zdXBlcnR5cGUsIHN1cGVyY2xhc3NJbnRlcmZhY2VzKTsKICAgICAgfQoKICAgICAgY2xhc3NNZW1iZXJzID0gbWVyZ2UoCiAgICAgICAgICBsb2NhbE1lbWJlcnMsIHN1cGVybm9kZS5jbGFzc01lbWJlcnMsIE1lcmdlS2luZC5zdXBlcmNsYXNzTWVtYmVycyk7CiAgICAgIGNsYXNzU2V0dGVycyA9IG1lcmdlKAogICAgICAgICAgbG9jYWxTZXR0ZXJzLCBzdXBlcm5vZGUuY2xhc3NTZXR0ZXJzLCBNZXJnZUtpbmQuc3VwZXJjbGFzc1NldHRlcnMpOwoKICAgICAgaWYgKGRpcmVjdEludGVyZmFjZXMgIT0gbnVsbCkgewogICAgICAgIE1lcmdlUmVzdWx0IHJlc3VsdCA9IG1lcmdlSW50ZXJmYWNlcyhzdXBlcm5vZGUsIGRpcmVjdEludGVyZmFjZXMpOwogICAgICAgIGludGVyZmFjZU1lbWJlcnMgPSByZXN1bHQubWVyZ2VkTWVtYmVyczsKICAgICAgICBpbnRlcmZhY2VTZXR0ZXJzID0gcmVzdWx0Lm1lcmdlZFNldHRlcnM7CiAgICAgICAgaW50ZXJmYWNlcyA9IDxUeXBlQnVpbGRlcj5bXTsKICAgICAgICBpZiAoc3VwZXJjbGFzc0ludGVyZmFjZXMgIT0gbnVsbCkgewogICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdXBlcmNsYXNzSW50ZXJmYWNlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBhZGRJbnRlcmZhY2UoaW50ZXJmYWNlcywgc3VwZXJjbGFzc2VzLCBzdXBlcmNsYXNzSW50ZXJmYWNlc1tpXSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGlyZWN0SW50ZXJmYWNlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgVHlwZUJ1aWxkZXIgZGlyZWN0SW50ZXJmYWNlID0gZGlyZWN0SW50ZXJmYWNlc1tpXTsKICAgICAgICAgIGFkZEludGVyZmFjZShpbnRlcmZhY2VzLCBzdXBlcmNsYXNzZXMsIGRpcmVjdEludGVyZmFjZSk7CiAgICAgICAgICBDbGFzc0hpZXJhcmNoeU5vZGUgaW50ZXJmYWNlTm9kZSA9CiAgICAgICAgICAgICAgaGllcmFyY2h5LmdldE5vZGVGcm9tVHlwZShkaXJlY3RJbnRlcmZhY2UpOwogICAgICAgICAgaWYgKGludGVyZmFjZU5vZGUgIT0gbnVsbCkgewogICAgICAgICAgICBpZiAobWF4SW5oZXJpdGFuY2VQYXRoIDwgaW50ZXJmYWNlTm9kZS5tYXhJbmhlcml0YW5jZVBhdGggKyAxKSB7CiAgICAgICAgICAgICAgbWF4SW5oZXJpdGFuY2VQYXRoID0gaW50ZXJmYWNlTm9kZS5tYXhJbmhlcml0YW5jZVBhdGggKyAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIExpc3Q8VHlwZUJ1aWxkZXI+IHR5cGVzID0KICAgICAgICAgICAgICAgIHN1YnN0U3VwZXJ0eXBlcyhkaXJlY3RJbnRlcmZhY2UsIGludGVyZmFjZU5vZGUuc3VwZXJjbGFzc2VzKTsKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIGFkZEludGVyZmFjZShpbnRlcmZhY2VzLCBzdXBlcmNsYXNzZXMsIHR5cGVzW2ldKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGludGVyZmFjZU5vZGUuaW50ZXJmYWNlcyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgTGlzdDxUeXBlQnVpbGRlcj4gdHlwZXMgPQogICAgICAgICAgICAgICAgICBzdWJzdFN1cGVydHlwZXMoZGlyZWN0SW50ZXJmYWNlLCBpbnRlcmZhY2VOb2RlLmludGVyZmFjZXMpOwogICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGFkZEludGVyZmFjZShpbnRlcmZhY2VzLCBzdXBlcmNsYXNzZXMsIHR5cGVzW2ldKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW50ZXJmYWNlTWVtYmVycyA9IHN1cGVybm9kZS5pbnRlcmZhY2VNZW1iZXJzOwogICAgICAgIGludGVyZmFjZVNldHRlcnMgPSBzdXBlcm5vZGUuaW50ZXJmYWNlU2V0dGVyczsKICAgICAgICBpbnRlcmZhY2VzID0gc3VwZXJjbGFzc0ludGVyZmFjZXM7CiAgICAgIH0KCiAgICAgIC8vIENoZWNrIGlmIGxvY2FsIG1lbWJlcnMgY29uZmxpY3Qgd2l0aCBpbmhlcml0ZWQgc2V0dGVycy4gVGhpcyBjaGVjayBoYXMKICAgICAgLy8gYWxyZWFkeSBiZWVuIHBlcmZvcm1lZCBpbiB0aGUgc3VwZXJjbGFzcywgc28gd2Ugb25seSBuZWVkIHRvIGNoZWNrIHRoZQogICAgICAvLyBsb2NhbCBtZW1iZXJzLiBUaGVzZSBjaGVja3MgaGF2ZSB0byBvY2N1ciBsYXRlIHRvIGVuYWJsZSBpbmZlcnJpbmcKICAgICAgLy8gdHlwZXMgYmV0d2VlbiBzZXR0ZXJzIGFuZCBnZXR0ZXJzLCBvciBmcm9tIGEgc2V0dGVyIHRvIGEgZmluYWwgZmllbGQuCiAgICAgIG1lcmdlKGxvY2FsTWVtYmVycywgY2xhc3NTZXR0ZXJzLCBNZXJnZUtpbmQubWVtYmVyc1dpdGhTZXR0ZXJzKTsKCiAgICAgIC8vIENoZWNrIGlmIGxvY2FsIHNldHRlcnMgY29uZmxpY3Qgd2l0aCBpbmhlcml0ZWQgbWVtYmVycy4gQXMgYWJvdmUsIHdlCiAgICAgIC8vIG9ubHkgbmVlZCB0byBjaGVjayB0aGUgbG9jYWwgc2V0dGVycy4KICAgICAgbWVyZ2UobG9jYWxTZXR0ZXJzLCBjbGFzc01lbWJlcnMsIE1lcmdlS2luZC5zZXR0ZXJzV2l0aE1lbWJlcnMpOwoKICAgICAgaWYgKGludGVyZmFjZU1lbWJlcnMgIT0gbnVsbCkgewogICAgICAgIGludGVyZmFjZU1lbWJlcnMgPQogICAgICAgICAgICBtZXJnZShjbGFzc01lbWJlcnMsIGludGVyZmFjZU1lbWJlcnMsIE1lcmdlS2luZC5zdXBlcnR5cGVzTWVtYmVycyk7CgogICAgICAgIC8vIENoZWNrIGlmIGNsYXNzIHNldHRlcnMgY29uZmxpY3Qgd2l0aCBtZW1iZXJzIGluaGVyaXRlZCBmcm9tCiAgICAgICAgLy8gaW50ZXJmYWNlcy4KICAgICAgICBtZXJnZShjbGFzc1NldHRlcnMsIGludGVyZmFjZU1lbWJlcnMsIE1lcmdlS2luZC5zZXR0ZXJzV2l0aE1lbWJlcnMpOwogICAgICB9CiAgICAgIGlmIChpbnRlcmZhY2VTZXR0ZXJzICE9IG51bGwpIHsKICAgICAgICBpbnRlcmZhY2VTZXR0ZXJzID0KICAgICAgICAgICAgbWVyZ2UoY2xhc3NTZXR0ZXJzLCBpbnRlcmZhY2VTZXR0ZXJzLCBNZXJnZUtpbmQuc3VwZXJ0eXBlc1NldHRlcnMpOwoKICAgICAgICAvLyBDaGVjayBpZiBjbGFzcyBtZW1iZXJzIGNvbmZsaWN0IHdpdGggc2V0dGVycyBpbmhlcml0ZWQgZnJvbQogICAgICAgIC8vIGludGVyZmFjZXMuCiAgICAgICAgbWVyZ2UoY2xhc3NNZW1iZXJzLCBpbnRlcmZhY2VTZXR0ZXJzLCBNZXJnZUtpbmQubWVtYmVyc1dpdGhTZXR0ZXJzKTsKICAgICAgfQogICAgfQogICAgaWYgKGFic3RyYWN0TWVtYmVycyAhPSBudWxsICYmICFjbGFzc0J1aWxkZXIuaXNBYnN0cmFjdCkgewogICAgICBpZiAoIWhhc05vU3VjaE1ldGhvZCkgewogICAgICAgIHJlcG9ydE1pc3NpbmdNZW1iZXJzKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW5zdGFsbE5zbUhhbmRsZXJzKCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgQ2xhc3NIaWVyYXJjaHlOb2RlKAogICAgICBjbGFzc0J1aWxkZXIsCiAgICAgIGNsYXNzTWVtYmVycywKICAgICAgY2xhc3NTZXR0ZXJzLAogICAgICBpbnRlcmZhY2VNZW1iZXJzLAogICAgICBpbnRlcmZhY2VTZXR0ZXJzLAogICAgICBzdXBlcmNsYXNzZXMsCiAgICAgIGludGVyZmFjZXMsCiAgICAgIG1heEluaGVyaXRhbmNlUGF0aCwKICAgICAgaGFzTm9TdWNoTWV0aG9kLAogICAgKTsKICB9CgogIFR5cGVCdWlsZGVyIHJlY29yZFN1cGVydHlwZShUeXBlQnVpbGRlciBzdXBlcnR5cGUpIHsKICAgIGlmIChzdXBlcnR5cGUgaXMgTmFtZWRUeXBlQnVpbGRlcikgewogICAgICBkZWJ1Zz8ubG9nKCJJbiAke3RoaXMuY2xhc3NCdWlsZGVyLmZ1bGxOYW1lRm9yRXJyb3JzfSAiCiAgICAgICAgICAicmVjb3JkU3VwZXJ0eXBlKCR7c3VwZXJ0eXBlLmZ1bGxOYW1lRm9yRXJyb3JzfSkiKTsKICAgICAgQnVpbGRlciBkZWNsYXJhdGlvbiA9IHN1cGVydHlwZS5kZWNsYXJhdGlvbjsKICAgICAgaWYgKGRlY2xhcmF0aW9uIGlzISBDbGFzc0J1aWxkZXIpIHJldHVybiBzdXBlcnR5cGU7CiAgICAgIENsYXNzQnVpbGRlciBjbGFzc0J1aWxkZXIgPSBkZWNsYXJhdGlvbjsKICAgICAgaWYgKGNsYXNzQnVpbGRlci5pc01peGluQXBwbGljYXRpb24pIHsKICAgICAgICByZWNvcmRTdXBlcnR5cGUoY2xhc3NCdWlsZGVyLm1peGVkSW5UeXBlKTsKICAgICAgfQogICAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZUJ1aWxkZXJzID0KICAgICAgICAgIGNsYXNzQnVpbGRlci50eXBlVmFyaWFibGVzOwogICAgICBpZiAodHlwZVZhcmlhYmxlQnVpbGRlcnMgPT0gbnVsbCkgewogICAgICAgIHN1YnN0aXR1dGlvbnNbY2xhc3NCdWlsZGVyLmNsc10gPSBTdWJzdGl0dXRpb24uZW1wdHk7CiAgICAgICAgYXNzZXJ0KGNsYXNzQnVpbGRlci5jbHMudHlwZVBhcmFtZXRlcnMuaXNFbXB0eSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgTGlzdDxUeXBlQnVpbGRlcj4gYXJndW1lbnRzID0KICAgICAgICAgICAgc3VwZXJ0eXBlLmFyZ3VtZW50cyA/PyBjb21wdXRlRGVmYXVsdFR5cGVBcmd1bWVudHMoc3VwZXJ0eXBlKTsKICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSB0eXBlVmFyaWFibGVCdWlsZGVycy5sZW5ndGgpIHsKICAgICAgICAgIGFyZ3VtZW50cyA9IGNvbXB1dGVEZWZhdWx0VHlwZUFyZ3VtZW50cyhzdXBlcnR5cGUpOwogICAgICAgIH0KICAgICAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0gbmV3IExpc3Q8RGFydFR5cGU+KGFyZ3VtZW50cy5sZW5ndGgpOwogICAgICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMgPQogICAgICAgICAgICBuZXcgTGlzdDxUeXBlUGFyYW1ldGVyPihhcmd1bWVudHMubGVuZ3RoKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgdHlwZVBhcmFtZXRlcnNbaV0gPSB0eXBlVmFyaWFibGVCdWlsZGVyc1tpXS5wYXJhbWV0ZXI7CiAgICAgICAgICB0eXBlQXJndW1lbnRzW2ldID0gYXJndW1lbnRzW2ldLmJ1aWxkKHRoaXMuY2xhc3NCdWlsZGVyLnBhcmVudCk7CiAgICAgICAgfQogICAgICAgIHN1YnN0aXR1dGlvbnNbY2xhc3NCdWlsZGVyLmNsc10gPQogICAgICAgICAgICBTdWJzdGl0dXRpb24uZnJvbVBhaXJzKHR5cGVQYXJhbWV0ZXJzLCB0eXBlQXJndW1lbnRzKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHN1cGVydHlwZTsKICB9CgogIExpc3Q8VHlwZUJ1aWxkZXI+IHN1YnN0U3VwZXJ0eXBlcygKICAgICAgTmFtZWRUeXBlQnVpbGRlciBzdXBlcnR5cGUsIExpc3Q8VHlwZUJ1aWxkZXI+IHN1cGVydHlwZXMpIHsKICAgIEJ1aWxkZXIgZGVjbGFyYXRpb24gPSBzdXBlcnR5cGUuZGVjbGFyYXRpb247CiAgICBpZiAoZGVjbGFyYXRpb24gaXMhIENsYXNzQnVpbGRlcikgcmV0dXJuIHN1cGVydHlwZXM7CiAgICBDbGFzc0J1aWxkZXIgY2xzID0gZGVjbGFyYXRpb247CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMgPSBjbHMudHlwZVZhcmlhYmxlczsKICAgIGlmICh0eXBlVmFyaWFibGVzID09IG51bGwpIHsKICAgICAgZGVidWc/LmxvZygiSW4gJHt0aGlzLmNsYXNzQnVpbGRlci5mdWxsTmFtZUZvckVycm9yc30gIgogICAgICAgICAgIiRzdXBlcnR5cGVzIGFyZW4ndCBzdWJzdGVkIik7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3VwZXJ0eXBlcy5sZW5ndGg7IGkrKykgewogICAgICAgIHJlY29yZFN1cGVydHlwZShzdXBlcnR5cGVzW2ldKTsKICAgICAgfQogICAgICByZXR1cm4gc3VwZXJ0eXBlczsKICAgIH0KICAgIE1hcDxUeXBlVmFyaWFibGVCdWlsZGVyLCBUeXBlQnVpbGRlcj4gc3Vic3RpdHV0aW9uID0KICAgICAgICA8VHlwZVZhcmlhYmxlQnVpbGRlciwgVHlwZUJ1aWxkZXI+e307CiAgICBMaXN0PFR5cGVCdWlsZGVyPiBhcmd1bWVudHMgPQogICAgICAgIHN1cGVydHlwZS5hcmd1bWVudHMgPz8gY29tcHV0ZURlZmF1bHRUeXBlQXJndW1lbnRzKHN1cGVydHlwZSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVWYXJpYWJsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgc3Vic3RpdHV0aW9uW3R5cGVWYXJpYWJsZXNbaV1dID0gYXJndW1lbnRzW2ldOwogICAgfQogICAgTGlzdDxUeXBlQnVpbGRlcj4gcmVzdWx0OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdXBlcnR5cGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIFR5cGVCdWlsZGVyIHN1cGVydHlwZSA9IHN1cGVydHlwZXNbaV07CiAgICAgIFR5cGVCdWlsZGVyIHN1YnN0ZWQgPSByZWNvcmRTdXBlcnR5cGUoc3VwZXJ0eXBlLnN1YnN0KHN1YnN0aXR1dGlvbikpOwogICAgICBpZiAoc3VwZXJ0eXBlICE9IHN1YnN0ZWQpIHsKICAgICAgICBkZWJ1Zz8ubG9nKAogICAgICAgICAgICAiSW4gJHt0aGlzLmNsYXNzQnVpbGRlci5mdWxsTmFtZUZvckVycm9yc30gJHN1cGVydHlwZSAtPiAkc3Vic3RlZCIpOwogICAgICAgIHJlc3VsdCA/Pz0gc3VwZXJ0eXBlcy50b0xpc3QoKTsKICAgICAgICByZXN1bHRbaV0gPSBzdWJzdGVkOwogICAgICB9IGVsc2UgewogICAgICAgIGRlYnVnPy5sb2coIkluICR7dGhpcy5jbGFzc0J1aWxkZXIuZnVsbE5hbWVGb3JFcnJvcnN9ICIKICAgICAgICAgICAgIiRzdXBlcnR5cGUgaXNuJ3Qgc3Vic3RlZCIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0ID8/IHN1cGVydHlwZXM7CiAgfQoKICBMaXN0PFR5cGVCdWlsZGVyPiBjb21wdXRlRGVmYXVsdFR5cGVBcmd1bWVudHMoVHlwZUJ1aWxkZXIgdHlwZSkgewogICAgQ2xhc3NCdWlsZGVyIGNscyA9IHR5cGUuZGVjbGFyYXRpb247CiAgICBMaXN0PFR5cGVCdWlsZGVyPiByZXN1bHQgPSBuZXcgTGlzdDxUeXBlQnVpbGRlcj4oY2xzLnR5cGVWYXJpYWJsZXMubGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgKytpKSB7CiAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXIgdHYgPSBjbHMudHlwZVZhcmlhYmxlc1tpXTsKICAgICAgcmVzdWx0W2ldID0gdHYuZGVmYXVsdFR5cGUgPz8KICAgICAgICAgIGNscy5saWJyYXJ5LmxvYWRlci5jb21wdXRlVHlwZUJ1aWxkZXIodHYucGFyYW1ldGVyLmRlZmF1bHRUeXBlKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBUeXBlQnVpbGRlciBhZGRJbnRlcmZhY2UoTGlzdDxUeXBlQnVpbGRlcj4gaW50ZXJmYWNlcywKICAgICAgTGlzdDxUeXBlQnVpbGRlcj4gc3VwZXJjbGFzc2VzLCBUeXBlQnVpbGRlciB0eXBlKSB7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZSA9IGhpZXJhcmNoeS5nZXROb2RlRnJvbVR5cGUodHlwZSk7CiAgICBpZiAobm9kZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGludCBkZXB0aCA9IG5vZGUuZGVwdGg7CiAgICBpbnQgbXlEZXB0aCA9IHN1cGVyY2xhc3Nlcy5sZW5ndGg7CiAgICBpZiAoZGVwdGggPCBteURlcHRoICYmCiAgICAgICAgc3VwZXJjbGFzc2VzW2RlcHRoXS5kZWNsYXJhdGlvbiA9PSBub2RlLmNsYXNzQnVpbGRlcikgewogICAgICAvLyBUaGlzIGlzIGEgcG90ZW50aWFsIGNvbmZsaWN0LgogICAgICByZXR1cm4gc3VwZXJjbGFzc2VzW2RlcHRoXTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW50ZXJmYWNlcy5sZW5ndGg7IGkrKykgewogICAgICAgIC8vIFRoaXMgaXMgYSBxdWFkcmF0aWMgYWxnb3JpdGhtLCBidXQgbm9ybWFsbHksIHRoZSBudW1iZXIgb2YKICAgICAgICAvLyBpbnRlcmZhY2VzIGlzIHJlYWxseSBzbWFsbC4KICAgICAgICBpZiAoaW50ZXJmYWNlc1tpXS5kZWNsYXJhdGlvbiA9PSB0eXBlLmRlY2xhcmF0aW9uKSB7CiAgICAgICAgICAvLyBUaGlzIGlzIGEgcG90ZW50aWFsIGNvbmZsaWN0LgogICAgICAgICAgcmV0dXJuIGludGVyZmFjZXNbaV07CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpbnRlcmZhY2VzLmFkZCh0eXBlKTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgTWVyZ2VSZXN1bHQgbWVyZ2VJbnRlcmZhY2VzKAogICAgICBDbGFzc0hpZXJhcmNoeU5vZGUgc3VwZXJub2RlLCBMaXN0PFR5cGVCdWlsZGVyPiBpbnRlcmZhY2VzKSB7CiAgICBkZWJ1Zz8ubG9nKCJtZXJnZUludGVyZmFjZXMoJGNsYXNzQnVpbGRlciAoJHt0aGlzLmNsYXNzQnVpbGRlcn0pICIKICAgICAgICAiJHtzdXBlcm5vZGUuaW50ZXJmYWNlc30gJHtpbnRlcmZhY2VzfSIpOwogICAgTGlzdDxMaXN0PEJ1aWxkZXI+PiBtZW1iZXJMaXN0cyA9CiAgICAgICAgbmV3IExpc3Q8TGlzdDxCdWlsZGVyPj4oaW50ZXJmYWNlcy5sZW5ndGggKyAxKTsKICAgIExpc3Q8TGlzdDxCdWlsZGVyPj4gc2V0dGVyTGlzdHMgPQogICAgICAgIG5ldyBMaXN0PExpc3Q8QnVpbGRlcj4+KGludGVyZmFjZXMubGVuZ3RoICsgMSk7CiAgICBtZW1iZXJMaXN0c1swXSA9IHN1cGVybm9kZS5pbnRlcmZhY2VNZW1iZXJzOwogICAgc2V0dGVyTGlzdHNbMF0gPSBzdXBlcm5vZGUuaW50ZXJmYWNlU2V0dGVyczsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW50ZXJmYWNlcy5sZW5ndGg7IGkrKykgewogICAgICBDbGFzc0hpZXJhcmNoeU5vZGUgaW50ZXJmYWNlTm9kZSA9CiAgICAgICAgICBoaWVyYXJjaHkuZ2V0Tm9kZUZyb21UeXBlKGludGVyZmFjZXNbaV0pOwogICAgICBpZiAoaW50ZXJmYWNlTm9kZSA9PSBudWxsKSB7CiAgICAgICAgbWVtYmVyTGlzdHNbaSArIDFdID0gbnVsbDsKICAgICAgICBzZXR0ZXJMaXN0c1tpICsgMV0gPSBudWxsOwogICAgICB9IGVsc2UgewogICAgICAgIG1lbWJlckxpc3RzW2kgKyAxXSA9CiAgICAgICAgICAgIGludGVyZmFjZU5vZGUuaW50ZXJmYWNlTWVtYmVycyA/PyBpbnRlcmZhY2VOb2RlLmNsYXNzTWVtYmVyczsKICAgICAgICBzZXR0ZXJMaXN0c1tpICsgMV0gPQogICAgICAgICAgICBpbnRlcmZhY2VOb2RlLmludGVyZmFjZVNldHRlcnMgPz8gaW50ZXJmYWNlTm9kZS5jbGFzc1NldHRlcnM7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgTWVyZ2VSZXN1bHQobWVyZ2VMaXN0cyhtZW1iZXJMaXN0cywgTWVyZ2VLaW5kLmludGVyZmFjZXNNZW1iZXJzKSwKICAgICAgICBtZXJnZUxpc3RzKHNldHRlckxpc3RzLCBNZXJnZUtpbmQuaW50ZXJmYWNlc1NldHRlcnMpKTsKICB9CgogIExpc3Q8QnVpbGRlcj4gbWVyZ2VMaXN0cyhMaXN0PExpc3Q8QnVpbGRlcj4+IGlucHV0LCBNZXJnZUtpbmQgbWVyZ2VLaW5kKSB7CiAgICAvLyBUaGlzIGlzIGEgay13YXkgbWVyZ2Ugc29ydCAod2hlcmUgayBpcyBgaW5wdXQubGVuZ3RoICsgMWApLiBXZSBtZXJnZSB0aGUKICAgIC8vIGxpc3RzIHBhaXJ3aXNlLCB3aGljaCByZWR1Y2VzIHRoZSBudW1iZXIgb2YgbGlzdHMgdG8gbWVyZ2UgYnkgaGFsZiBvbgogICAgLy8gZWFjaCBpdGVyYXRpb24uIENvbnNlcXVlbnRseSwgd2UgcGVyZm9ybSBPKGxvZyBrKSBtZXJnZXMuCiAgICB3aGlsZSAoaW5wdXQubGVuZ3RoID4gMSkgewogICAgICBMaXN0PExpc3Q8QnVpbGRlcj4+IG91dHB1dCA9IDxMaXN0PEJ1aWxkZXI+PltdOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aCAtIDE7IGkgKz0gMikgewogICAgICAgIExpc3Q8QnVpbGRlcj4gZmlyc3QgPSBpbnB1dFtpXTsKICAgICAgICBMaXN0PEJ1aWxkZXI+IHNlY29uZCA9IGlucHV0W2kgKyAxXTsKICAgICAgICBpZiAoZmlyc3QgPT0gbnVsbCkgewogICAgICAgICAgb3V0cHV0LmFkZChzZWNvbmQpOwogICAgICAgIH0gZWxzZSBpZiAoc2Vjb25kID09IG51bGwpIHsKICAgICAgICAgIG91dHB1dC5hZGQoZmlyc3QpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBvdXRwdXQuYWRkKG1lcmdlKGZpcnN0LCBzZWNvbmQsIG1lcmdlS2luZCkpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoaW5wdXQubGVuZ3RoLmlzT2RkKSB7CiAgICAgICAgb3V0cHV0LmFkZChpbnB1dC5sYXN0KTsKICAgICAgfQogICAgICBpbnB1dCA9IG91dHB1dDsKICAgIH0KICAgIHJldHVybiBpbnB1dC5zaW5nbGU7CiAgfQoKICAvLy8gTWVyZ2UgW2FuZCBjaGVja10gYWNjZXNzb3JzLiBUaGlzIGVudGFpbHMgY29weWluZyBtdXRhYmxlIGZpZWxkcyB0bwogIC8vLyBzZXR0ZXJzIHRvIHNpbXVsYXRlIGltcGxpZWQgc2V0dGVycywgYW5kIGNoZWNraW5nIHRoYXQgc2V0dGVycyBkb24ndAogIC8vLyBvdmVycmlkZSByZWd1bGFyIG1ldGhvZHMuCiAgTGlzdDxCdWlsZGVyPiBtZXJnZUFjY2Vzc29ycyhMaXN0PEJ1aWxkZXI+IG1lbWJlcnMsIExpc3Q8QnVpbGRlcj4gc2V0dGVycykgewogICAgZmluYWwgTGlzdDxCdWlsZGVyPiBtZXJnZWRTZXR0ZXJzID0gbmV3IExpc3Q8QnVpbGRlcj4uZmlsbGVkKAogICAgICAgIG1lbWJlcnMubGVuZ3RoICsgc2V0dGVycy5sZW5ndGgsIG51bGwsCiAgICAgICAgZ3Jvd2FibGU6IHRydWUpOwogICAgaW50IHN0b3JlSW5kZXggPSAwOwogICAgaW50IGkgPSAwOwogICAgaW50IGogPSAwOwogICAgd2hpbGUgKGkgPCBtZW1iZXJzLmxlbmd0aCAmJiBqIDwgc2V0dGVycy5sZW5ndGgpIHsKICAgICAgZmluYWwgQnVpbGRlciBtZW1iZXIgPSBtZW1iZXJzW2ldOwogICAgICBmaW5hbCBCdWlsZGVyIHNldHRlciA9IHNldHRlcnNbal07CiAgICAgIGZpbmFsIGludCBjb21wYXJlID0gY29tcGFyZURlY2xhcmF0aW9ucyhtZW1iZXIsIHNldHRlcik7CiAgICAgIGlmIChjb21wYXJlID09IDApIHsKICAgICAgICBtZXJnZWRTZXR0ZXJzW3N0b3JlSW5kZXgrK10gPSBzZXR0ZXI7CiAgICAgICAgaSsrOwogICAgICAgIGorKzsKICAgICAgfSBlbHNlIGlmIChjb21wYXJlIDwgMCkgewogICAgICAgIGlmIChpbXBsaWVzU2V0dGVyKG1lbWJlcikpIHsKICAgICAgICAgIG1lcmdlZFNldHRlcnNbc3RvcmVJbmRleCsrXSA9IG1lbWJlcjsKICAgICAgICB9CiAgICAgICAgaSsrOwogICAgICB9IGVsc2UgewogICAgICAgIG1lcmdlZFNldHRlcnNbc3RvcmVJbmRleCsrXSA9IHNldHRlcnNbal07CiAgICAgICAgaisrOwogICAgICB9CiAgICB9CiAgICB3aGlsZSAoaSA8IG1lbWJlcnMubGVuZ3RoKSB7CiAgICAgIGZpbmFsIEJ1aWxkZXIgbWVtYmVyID0gbWVtYmVyc1tpXTsKICAgICAgaWYgKGltcGxpZXNTZXR0ZXIobWVtYmVyKSkgewogICAgICAgIG1lcmdlZFNldHRlcnNbc3RvcmVJbmRleCsrXSA9IG1lbWJlcjsKICAgICAgfQogICAgICBpKys7CiAgICB9CiAgICB3aGlsZSAoaiA8IHNldHRlcnMubGVuZ3RoKSB7CiAgICAgIG1lcmdlZFNldHRlcnNbc3RvcmVJbmRleCsrXSA9IHNldHRlcnNbal07CiAgICAgIGorKzsKICAgIH0KCiAgICBpZiAoc3RvcmVJbmRleCA9PSBqKSB7CiAgICAgIHJldHVybiBzZXR0ZXJzOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG1lcmdlZFNldHRlcnMuLmxlbmd0aCA9IHN0b3JlSW5kZXg7CiAgICB9CiAgfQoKICB2b2lkIHJlcG9ydE1pc3NpbmdNZW1iZXJzKCkgewogICAgTWFwPFN0cmluZywgTG9jYXRlZE1lc3NhZ2U+IGNvbnRleHRNYXAgPSA8U3RyaW5nLCBMb2NhdGVkTWVzc2FnZT57fTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWJzdHJhY3RNZW1iZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgIEJ1aWxkZXIgZGVjbGFyYXRpb24gPSBhYnN0cmFjdE1lbWJlcnNbaV07CiAgICAgIE1lbWJlciB0YXJnZXQgPSBkZWNsYXJhdGlvbi50YXJnZXQ7CiAgICAgIGlmIChpc05hbWVWaXNpYmxlSW4odGFyZ2V0Lm5hbWUsIGNsYXNzQnVpbGRlci5saWJyYXJ5KSkgewogICAgICAgIFN0cmluZyBuYW1lID0gZGVjbGFyYXRpb24uZnVsbE5hbWVGb3JFcnJvcnM7CiAgICAgICAgU3RyaW5nIHBhcmVudE5hbWUgPSBkZWNsYXJhdGlvbi5wYXJlbnQuZnVsbE5hbWVGb3JFcnJvcnM7CiAgICAgICAgU3RyaW5nIGRpc3BsYXlOYW1lID0KICAgICAgICAgICAgZGVjbGFyYXRpb24uaXNTZXR0ZXIgPyAiJHBhcmVudE5hbWUuJG5hbWU9IiA6ICIkcGFyZW50TmFtZS4kbmFtZSI7CiAgICAgICAgY29udGV4dE1hcFtkaXNwbGF5TmFtZV0gPSB0ZW1wbGF0ZU1pc3NpbmdJbXBsZW1lbnRhdGlvbkNhdXNlCiAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGRpc3BsYXlOYW1lKQogICAgICAgICAgICAud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgICAgZGVjbGFyYXRpb24uZmlsZVVyaSwgZGVjbGFyYXRpb24uY2hhck9mZnNldCwgbmFtZS5sZW5ndGgpOwogICAgICB9CiAgICB9CiAgICBpZiAoY29udGV4dE1hcC5pc0VtcHR5KSByZXR1cm47CiAgICBMaXN0PFN0cmluZz4gbmFtZXMgPSBuZXcgTGlzdDxTdHJpbmc+LmZyb20oY29udGV4dE1hcC5rZXlzKS4uc29ydCgpOwogICAgTGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dCA9IDxMb2NhdGVkTWVzc2FnZT5bXTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHsKICAgICAgY29udGV4dC5hZGQoY29udGV4dE1hcFtuYW1lc1tpXV0pOwogICAgfQogICAgY2xhc3NCdWlsZGVyLmFkZFByb2JsZW0oCiAgICAgICAgdGVtcGxhdGVNaXNzaW5nSW1wbGVtZW50YXRpb25Ob3RBYnN0cmFjdC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICBjbGFzc0J1aWxkZXIuZnVsbE5hbWVGb3JFcnJvcnMsIG5hbWVzKSwKICAgICAgICBjbGFzc0J1aWxkZXIuY2hhck9mZnNldCwKICAgICAgICBjbGFzc0J1aWxkZXIuZnVsbE5hbWVGb3JFcnJvcnMubGVuZ3RoLAogICAgICAgIGNvbnRleHQ6IGNvbnRleHQpOwogIH0KCiAgdm9pZCBpbnN0YWxsTnNtSGFuZGxlcnMoKSB7CiAgICAvLyBUT0RPKGFoZSk6IEltcGxlbWVudCB0aGlzLgogIH0KCiAgTGlzdDxCdWlsZGVyPiBtZXJnZSgKICAgICAgTGlzdDxCdWlsZGVyPiBhTGlzdCwgTGlzdDxCdWlsZGVyPiBiTGlzdCwgTWVyZ2VLaW5kIG1lcmdlS2luZCkgewogICAgZmluYWwgTGlzdDxCdWlsZGVyPiByZXN1bHQgPSBuZXcgTGlzdDxCdWlsZGVyPi5maWxsZWQoCiAgICAgICAgYUxpc3QubGVuZ3RoICsgYkxpc3QubGVuZ3RoLCBudWxsLAogICAgICAgIGdyb3dhYmxlOiB0cnVlKTsKICAgIGludCBzdG9yZUluZGV4ID0gMDsKICAgIGludCBpID0gMDsKICAgIGludCBqID0gMDsKICAgIHdoaWxlIChpIDwgYUxpc3QubGVuZ3RoICYmIGogPCBiTGlzdC5sZW5ndGgpIHsKICAgICAgZmluYWwgQnVpbGRlciBhID0gYUxpc3RbaV07CiAgICAgIGZpbmFsIEJ1aWxkZXIgYiA9IGJMaXN0W2pdOwogICAgICBpZiAoKG1lcmdlS2luZCA9PSBNZXJnZUtpbmQuaW50ZXJmYWNlc01lbWJlcnMgfHwKICAgICAgICAgICAgICBtZXJnZUtpbmQgPT0gTWVyZ2VLaW5kLmludGVyZmFjZXNTZXR0ZXJzKSAmJgogICAgICAgICAgYS5pc1N0YXRpYykgewogICAgICAgIGkrKzsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoYi5pc1N0YXRpYykgewogICAgICAgIGorKzsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBmaW5hbCBpbnQgY29tcGFyZSA9IGNvbXBhcmVEZWNsYXJhdGlvbnMoYSwgYik7CiAgICAgIGlmIChjb21wYXJlID09IDApIHsKICAgICAgICByZXN1bHRbc3RvcmVJbmRleCsrXSA9IGhhbmRsZU1lcmdlQ29uZmxpY3QoYSwgYiwgbWVyZ2VLaW5kKTsKICAgICAgICBpKys7CiAgICAgICAgaisrOwogICAgICB9IGVsc2UgaWYgKGNvbXBhcmUgPCAwKSB7CiAgICAgICAgaGFuZGxlT25seUEoYSwgbWVyZ2VLaW5kKTsKICAgICAgICByZXN1bHRbc3RvcmVJbmRleCsrXSA9IGE7CiAgICAgICAgaSsrOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc3VsdFtzdG9yZUluZGV4KytdID0gaGFuZGxlT25seUIoYiwgbWVyZ2VLaW5kKTsKICAgICAgICBqKys7CiAgICAgIH0KICAgIH0KICAgIHdoaWxlIChpIDwgYUxpc3QubGVuZ3RoKSB7CiAgICAgIGZpbmFsIEJ1aWxkZXIgYSA9IGFMaXN0W2ldOwogICAgICBpZiAoIShtZXJnZUtpbmQgPT0gTWVyZ2VLaW5kLmludGVyZmFjZXNNZW1iZXJzIHx8CiAgICAgICAgICAgICAgbWVyZ2VLaW5kID09IE1lcmdlS2luZC5pbnRlcmZhY2VzU2V0dGVycykgfHwKICAgICAgICAgICFhLmlzU3RhdGljKSB7CiAgICAgICAgaGFuZGxlT25seUEoYSwgbWVyZ2VLaW5kKTsKICAgICAgICByZXN1bHRbc3RvcmVJbmRleCsrXSA9IGE7CiAgICAgIH0KICAgICAgaSsrOwogICAgfQogICAgd2hpbGUgKGogPCBiTGlzdC5sZW5ndGgpIHsKICAgICAgZmluYWwgQnVpbGRlciBiID0gYkxpc3Rbal07CiAgICAgIGlmICghYi5pc1N0YXRpYykgewogICAgICAgIHJlc3VsdFtzdG9yZUluZGV4KytdID0gaGFuZGxlT25seUIoYiwgbWVyZ2VLaW5kKTsKICAgICAgfQogICAgICBqKys7CiAgICB9CiAgICBpZiAoYUxpc3QuaXNFbXB0eSAmJiBzdG9yZUluZGV4ID09IGJMaXN0Lmxlbmd0aCkgcmV0dXJuIGJMaXN0OwogICAgaWYgKGJMaXN0LmlzRW1wdHkgJiYgc3RvcmVJbmRleCA9PSBhTGlzdC5sZW5ndGgpIHJldHVybiBhTGlzdDsKICAgIHJldHVybiByZXN1bHQuLmxlbmd0aCA9IHN0b3JlSW5kZXg7CiAgfQoKICB2b2lkIGluZmVyTWl4aW5BcHBsaWNhdGlvbigpIHsKICAgIENsYXNzIGNscyA9IGNsYXNzQnVpbGRlci5jbHM7CiAgICBTdXBlcnR5cGUgbWl4ZWRJblR5cGUgPSBjbHMubWl4ZWRJblR5cGU7CiAgICBpZiAobWl4ZWRJblR5cGUgPT0gbnVsbCkgcmV0dXJuOwogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9IG1peGVkSW5UeXBlLnR5cGVBcmd1bWVudHM7CiAgICBpZiAodHlwZUFyZ3VtZW50cy5pc0VtcHR5IHx8IHR5cGVBcmd1bWVudHMuZmlyc3QgaXMhIFVua25vd25UeXBlKSByZXR1cm47CiAgICBuZXcgQnVpbGRlck1peGluSW5mZXJyZXIoCiAgICAgICAgICAgIGNsYXNzQnVpbGRlciwKICAgICAgICAgICAgaGllcmFyY2h5LmNvcmVUeXBlcywKICAgICAgICAgICAgbmV3IFR5cGVCdWlsZGVyQ29uc3RyYWludEdhdGhlcmVyKAogICAgICAgICAgICAgICAgaGllcmFyY2h5LCBtaXhlZEluVHlwZS5jbGFzc05vZGUudHlwZVBhcmFtZXRlcnMpKQogICAgICAgIC5pbmZlcihjbHMpOwogICAgTGlzdDxUeXBlQnVpbGRlcj4gaW5mZXJyZWRBcmd1bWVudHMgPQogICAgICAgIG5ldyBMaXN0PFR5cGVCdWlsZGVyPih0eXBlQXJndW1lbnRzLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgaW5mZXJyZWRBcmd1bWVudHNbaV0gPQogICAgICAgICAgaGllcmFyY2h5LmxvYWRlci5jb21wdXRlVHlwZUJ1aWxkZXIodHlwZUFyZ3VtZW50c1tpXSk7CiAgICB9CiAgICBOYW1lZFR5cGVCdWlsZGVyIG1peGVkSW5UeXBlQnVpbGRlciA9IGNsYXNzQnVpbGRlci5taXhlZEluVHlwZTsKICAgIG1peGVkSW5UeXBlQnVpbGRlci5hcmd1bWVudHMgPSBpbmZlcnJlZEFyZ3VtZW50czsKICB9CgogIC8vLyBUaGUgY2xhc3MgRnVuY3Rpb24gZnJvbSBkYXJ0OmNvcmUgaXMgc3VwcG9zZWQgdG8gYmUgaWdub3JlZCB3aGVuIHVzZWQgYXMKICAvLy8gYW4gaW50ZXJmYWNlLgogIExpc3Q8VHlwZUJ1aWxkZXI+IGlnbm9yZUZ1bmN0aW9uKExpc3Q8VHlwZUJ1aWxkZXI+IGludGVyZmFjZXMpIHsKICAgIGlmIChpbnRlcmZhY2VzID09IG51bGwpIHJldHVybiBudWxsOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRlcmZhY2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgIENsYXNzQnVpbGRlciBjbGFzc0J1aWxkZXIgPSBnZXRDbGFzcyhpbnRlcmZhY2VzW2ldKTsKICAgICAgaWYgKGNsYXNzQnVpbGRlciAhPSBudWxsICYmIGNsYXNzQnVpbGRlci5jbHMgPT0gaGllcmFyY2h5LmZ1bmN0aW9uQ2xhc3MpIHsKICAgICAgICBpZiAoaW50ZXJmYWNlcy5sZW5ndGggPT0gMSkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGludGVyZmFjZXMgPSBpbnRlcmZhY2VzLnRvTGlzdCgpOwogICAgICAgICAgaW50ZXJmYWNlcy5yZW1vdmVBdChpKTsKICAgICAgICAgIHJldHVybiBpZ25vcmVGdW5jdGlvbihpbnRlcmZhY2VzKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBpbnRlcmZhY2VzOwogIH0KfQoKY2xhc3MgQ2xhc3NIaWVyYXJjaHlOb2RlIHsKICAvLy8gVGhlIGNsYXNzIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBoaWVyYXJjaHkgbm9kZS4KICBmaW5hbCBDbGFzc0J1aWxkZXIgY2xhc3NCdWlsZGVyOwoKICAvLy8gQWxsIHRoZSBtZW1iZXJzIG9mIHRoaXMgY2xhc3MgaW5jbHVkaW5nIFtjbGFzc01lbWJlcnNdIG9mIGl0cwogIC8vLyBzdXBlcmNsYXNzZXMuIFRoZSBtZW1iZXJzIGFyZSBzb3J0ZWQgYnkgW2NvbXBhcmVEZWNsYXJhdGlvbnNdLgogIGZpbmFsIExpc3Q8QnVpbGRlcj4gY2xhc3NNZW1iZXJzOwoKICAvLy8gU2ltaWxhciB0byBbY2xhc3NNZW1iZXJzXSBidXQgZm9yIHNldHRlcnMuCiAgZmluYWwgTGlzdDxCdWlsZGVyPiBjbGFzc1NldHRlcnM7CgogIC8vLyBBbGwgdGhlIGludGVyZmFjZSBtZW1iZXJzIG9mIHRoaXMgY2xhc3MgaW5jbHVkaW5nIFtpbnRlcmZhY2VNZW1iZXJzXSBvZgogIC8vLyBpdHMgc3VwZXJ0eXBlcy4gVGhlIG1lbWJlcnMgYXJlIHNvcnRlZCBieSBbY29tcGFyZURlY2xhcmF0aW9uc10uCiAgLy8vCiAgLy8vIEluIGFkZGl0aW9uIHRvIHRoZSBtZW1iZXJzIG9mIFtjbGFzc01lbWJlcnNdIHRoaXMgYWxzbyBjb250YWlucyBtZW1iZXJzCiAgLy8vIGZyb20gaW50ZXJmYWNlcy4KICAvLy8KICAvLy8gVGhpcyBtYXkgYmUgbnVsbCwgaW4gd2hpY2ggY2FzZSBbY2xhc3NNZW1iZXJzXSBpcyB0aGUgaW50ZXJmYWNlIG1lbWJlcnMuCiAgZmluYWwgTGlzdDxCdWlsZGVyPiBpbnRlcmZhY2VNZW1iZXJzOwoKICAvLy8gU2ltaWxhciB0byBbaW50ZXJmYWNlTWVtYmVyc10gYnV0IGZvciBzZXR0ZXJzLgogIC8vLwogIC8vLyBUaGlzIG1heSBiZSBudWxsLCBpbiB3aGljaCBjYXNlIFtjbGFzc1NldHRlcnNdIGlzIHRoZSBpbnRlcmZhY2Ugc2V0dGVycy4KICBmaW5hbCBMaXN0PEJ1aWxkZXI+IGludGVyZmFjZVNldHRlcnM7CgogIC8vLyBBbGwgc3VwZXJjbGFzc2VzIG9mIFtjbGFzc0J1aWxkZXJdIGV4Y2x1ZGluZyBpdHNlbGYuIFRoZSBjbGFzc2VzIGFyZQogIC8vLyBzb3J0ZWQgYnkgZGVwdGggZnJvbSB0aGUgcm9vdCAoT2JqZWN0KSBpbiBhc2NlbmRpbmcgb3JkZXIuCiAgZmluYWwgTGlzdDxUeXBlQnVpbGRlcj4gc3VwZXJjbGFzc2VzOwoKICAvLy8gVGhlIGxpc3Qgb2YgYWxsIGNsYXNzZXMgaW1wbGVtZW50ZWQgYnkgW2NsYXNzQnVpbGRlcl0gYW5kIGl0cyBzdXBlcnR5cGVzCiAgLy8vIGV4Y2x1ZGluZyBhbnkgY2xhc3NlcyBmcm9tIFtzdXBlcmNsYXNzZXNdLgogIGZpbmFsIExpc3Q8VHlwZUJ1aWxkZXI+IGludGVyZmFjZXM7CgogIC8vLyBUaGUgbG9uZ2VzdCBpbmhlcml0YW5jZSBwYXRoIGZyb20gW2NsYXNzQnVpbGRlcl0gdG8gYE9iamVjdGAuCiAgZmluYWwgaW50IG1heEluaGVyaXRhbmNlUGF0aDsKCiAgaW50IGdldCBkZXB0aCA9PiBzdXBlcmNsYXNzZXMubGVuZ3RoOwoKICBmaW5hbCBib29sIGhhc05vU3VjaE1ldGhvZDsKCiAgQ2xhc3NIaWVyYXJjaHlOb2RlKAogICAgICB0aGlzLmNsYXNzQnVpbGRlciwKICAgICAgdGhpcy5jbGFzc01lbWJlcnMsCiAgICAgIHRoaXMuY2xhc3NTZXR0ZXJzLAogICAgICB0aGlzLmludGVyZmFjZU1lbWJlcnMsCiAgICAgIHRoaXMuaW50ZXJmYWNlU2V0dGVycywKICAgICAgdGhpcy5zdXBlcmNsYXNzZXMsCiAgICAgIHRoaXMuaW50ZXJmYWNlcywKICAgICAgdGhpcy5tYXhJbmhlcml0YW5jZVBhdGgsCiAgICAgIHRoaXMuaGFzTm9TdWNoTWV0aG9kKTsKCiAgLy8vIFJldHVybnMgYSBsaXN0IG9mIGFsbCBzdXBlcnR5cGVzIG9mIFtjbGFzc0J1aWxkZXJdLCBpbmNsdWRpbmcgdGhpcyBub2RlLgogIExpc3Q8Q2xhc3NIaWVyYXJjaHlOb2RlPiBjb21wdXRlQWxsU3VwZXJOb2RlcygKICAgICAgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGhpZXJhcmNoeSkgewogICAgTGlzdDxDbGFzc0hpZXJhcmNoeU5vZGU+IHJlc3VsdCA9IG5ldyBMaXN0PENsYXNzSGllcmFyY2h5Tm9kZT4oCiAgICAgICAgMSArIHN1cGVyY2xhc3Nlcy5sZW5ndGggKyBpbnRlcmZhY2VzLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHN1cGVyY2xhc3Nlcy5sZW5ndGg7IGkrKykgewogICAgICBCdWlsZGVyIGRlY2xhcmF0aW9uID0gc3VwZXJjbGFzc2VzW2ldLmRlY2xhcmF0aW9uOwogICAgICBpZiAoZGVjbGFyYXRpb24gaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgICAgcmVzdWx0W2ldID0gaGllcmFyY2h5LmdldE5vZGVGcm9tQ2xhc3MoZGVjbGFyYXRpb24pOwogICAgICB9CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGludGVyZmFjZXMubGVuZ3RoOyBpKyspIHsKICAgICAgQnVpbGRlciBkZWNsYXJhdGlvbiA9IGludGVyZmFjZXNbaV0uZGVjbGFyYXRpb247CiAgICAgIGlmIChkZWNsYXJhdGlvbiBpcyBDbGFzc0J1aWxkZXIpIHsKICAgICAgICByZXN1bHRbaSArIHN1cGVyY2xhc3Nlcy5sZW5ndGhdID0KICAgICAgICAgICAgaGllcmFyY2h5LmdldE5vZGVGcm9tQ2xhc3MoZGVjbGFyYXRpb24pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0Li5sYXN0ID0gdGhpczsKICB9CgogIFN0cmluZyB0b1N0cmluZyhbU3RyaW5nQnVmZmVyIHNiXSkgewogICAgc2IgPz89IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiCiAgICAgIC4ud3JpdGUoY2xhc3NCdWlsZGVyLmZ1bGxOYW1lRm9yRXJyb3JzKQogICAgICAuLndyaXRlbG4oIjoiKTsKICAgIGlmIChtYXhJbmhlcml0YW5jZVBhdGggIT0gdGhpcy5kZXB0aCkgewogICAgICBzYgogICAgICAgIC4ud3JpdGUoIiAgTG9uZ2VzdCBwYXRoIHRvIE9iamVjdDogIikKICAgICAgICAuLndyaXRlbG4obWF4SW5oZXJpdGFuY2VQYXRoKTsKICAgIH0KICAgIHNiLi53cml0ZWxuKCIgIHN1cGVyY2xhc3NlczoiKTsKICAgIGludCBkZXB0aCA9IDA7CiAgICBmb3IgKFR5cGVCdWlsZGVyIHN1cGVyY2xhc3MgaW4gc3VwZXJjbGFzc2VzKSB7CiAgICAgIHNiLndyaXRlKCIgICIgKiAoZGVwdGggKyAyKSk7CiAgICAgIGlmIChkZXB0aCAhPSAwKSBzYi53cml0ZSgiLT4gIik7CiAgICAgIHN1cGVyY2xhc3MucHJpbnRPbihzYik7CiAgICAgIHNiLndyaXRlbG4oKTsKICAgICAgZGVwdGgrKzsKICAgIH0KICAgIGlmIChpbnRlcmZhY2VzICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoIiAgaW50ZXJmYWNlczoiKTsKICAgICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICAgIGZvciAoVHlwZUJ1aWxkZXIgaSBpbiBpbnRlcmZhY2VzKSB7CiAgICAgICAgaWYgKCFmaXJzdCkgc2Iud3JpdGUoIiwiKTsKICAgICAgICBzYi53cml0ZSgiICIpOwogICAgICAgIGkucHJpbnRPbihzYik7CiAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgfQogICAgICBzYi53cml0ZWxuKCk7CiAgICB9CiAgICBwcmludE1lbWJlcnMoY2xhc3NNZW1iZXJzLCBzYiwgImNsYXNzTWVtYmVycyIpOwogICAgcHJpbnRNZW1iZXJzKGNsYXNzU2V0dGVycywgc2IsICJjbGFzc1NldHRlcnMiKTsKICAgIGlmIChpbnRlcmZhY2VNZW1iZXJzICE9IG51bGwpIHsKICAgICAgcHJpbnRNZW1iZXJzKGludGVyZmFjZU1lbWJlcnMsIHNiLCAiaW50ZXJmYWNlTWVtYmVycyIpOwogICAgfQogICAgaWYgKGludGVyZmFjZVNldHRlcnMgIT0gbnVsbCkgewogICAgICBwcmludE1lbWJlcnMoaW50ZXJmYWNlU2V0dGVycywgc2IsICJpbnRlcmZhY2VTZXR0ZXJzIik7CiAgICB9CiAgICByZXR1cm4gIiRzYiI7CiAgfQoKICB2b2lkIHByaW50TWVtYmVycyhMaXN0PEJ1aWxkZXI+IG1lbWJlcnMsIFN0cmluZ0J1ZmZlciBzYiwgU3RyaW5nIGhlYWRpbmcpIHsKICAgIHNiLndyaXRlKCIgICIpOwogICAgc2Iud3JpdGUoaGVhZGluZyk7CiAgICBzYi53cml0ZWxuKCI6Iik7CiAgICBmb3IgKEJ1aWxkZXIgbWVtYmVyIGluIG1lbWJlcnMpIHsKICAgICAgc2IKICAgICAgICAuLndyaXRlKCIgICAgIikKICAgICAgICAuLndyaXRlKG1lbWJlci5wYXJlbnQuZnVsbE5hbWVGb3JFcnJvcnMpCiAgICAgICAgLi53cml0ZSgiLiIpCiAgICAgICAgLi53cml0ZShtZW1iZXIuZnVsbE5hbWVGb3JFcnJvcnMpCiAgICAgICAgLi53cml0ZWxuKCk7CiAgICB9CiAgfQoKICBCdWlsZGVyIGdldEludGVyZmFjZU1lbWJlcihOYW1lIG5hbWUsIGJvb2wgaXNTZXR0ZXIpIHsKICAgIHJldHVybiBmaW5kTWVtYmVyKAogICAgICAgIG5hbWUsCiAgICAgICAgaXNTZXR0ZXIKICAgICAgICAgICAgPyBpbnRlcmZhY2VTZXR0ZXJzID8/IGNsYXNzU2V0dGVycwogICAgICAgICAgICA6IGludGVyZmFjZU1lbWJlcnMgPz8gY2xhc3NNZW1iZXJzKTsKICB9CgogIEJ1aWxkZXIgZmluZE1lbWJlcihOYW1lIG5hbWUsIExpc3Q8QnVpbGRlcj4gZGVjbGFyYXRpb25zKSB7CiAgICAvLyBUT0RPKGFoZSk6IENvbnNpZGVyIGNyZWF0aW5nIGEgbWFwIG9yIHNjb3BlLiBUaGUgb2J2aW91cyBjaG9pY2Ugd291bGQgYmUKICAgIC8vIHRvIHVzZSBzY29wZXMsIGJ1dCB0aGV5IGRvbid0IGhhbmRsZSBwcml2YXRlIG5hbWVzIGNvcnJlY3RseS4KCiAgICAvLyBUaGlzIGlzIGEgY29weSBvZiBgQ2xhc3NIaWVyYXJjaHkuZmluZE1lbWJlckJ5TmFtZWAuCiAgICBpbnQgbG93ID0gMCwgaGlnaCA9IGRlY2xhcmF0aW9ucy5sZW5ndGggLSAxOwogICAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7CiAgICAgIGludCBtaWQgPSBsb3cgKyAoKGhpZ2ggLSBsb3cpID4+IDEpOwogICAgICBCdWlsZGVyIHBpdm90ID0gZGVjbGFyYXRpb25zW21pZF07CiAgICAgIGludCBjb21wYXJpc29uID0gQ2xhc3NIaWVyYXJjaHkuY29tcGFyZU5hbWVzKG5hbWUsIHBpdm90LnRhcmdldC5uYW1lKTsKICAgICAgaWYgKGNvbXBhcmlzb24gPCAwKSB7CiAgICAgICAgaGlnaCA9IG1pZCAtIDE7CiAgICAgIH0gZWxzZSBpZiAoY29tcGFyaXNvbiA+IDApIHsKICAgICAgICBsb3cgPSBtaWQgKyAxOwogICAgICB9IGVsc2UgaWYgKGhpZ2ggIT0gbWlkKSB7CiAgICAgICAgLy8gRW5zdXJlIHdlIGZpbmQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGdpdmVuIG5hbWUuCiAgICAgICAgaGlnaCA9IG1pZDsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gcGl2b3Q7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQnVpbGRlciBnZXREaXNwYXRjaFRhcmdldChOYW1lIG5hbWUsIGJvb2wgaXNTZXR0ZXIpIHsKICAgIHJldHVybiBmaW5kTWVtYmVyKG5hbWUsIGlzU2V0dGVyID8gY2xhc3NTZXR0ZXJzIDogY2xhc3NNZW1iZXJzKTsKICB9CgogIHN0YXRpYyBpbnQgY29tcGFyZU1heEluaGVyaXRhbmNlUGF0aCgKICAgICAgQ2xhc3NIaWVyYXJjaHlOb2RlIGEsIENsYXNzSGllcmFyY2h5Tm9kZSBiKSB7CiAgICByZXR1cm4gYi5tYXhJbmhlcml0YW5jZVBhdGguY29tcGFyZVRvKGEubWF4SW5oZXJpdGFuY2VQYXRoKTsKICB9Cn0KCmNsYXNzIE1lcmdlUmVzdWx0IHsKICBmaW5hbCBMaXN0PEJ1aWxkZXI+IG1lcmdlZE1lbWJlcnM7CgogIGZpbmFsIExpc3Q8QnVpbGRlcj4gbWVyZ2VkU2V0dGVyczsKCiAgTWVyZ2VSZXN1bHQodGhpcy5tZXJnZWRNZW1iZXJzLCB0aGlzLm1lcmdlZFNldHRlcnMpOwp9CgplbnVtIE1lcmdlS2luZCB7CiAgLy8vIE1lcmdpbmcgc3VwZXJjbGFzcyBtZW1iZXJzIHdpdGggdGhlIGN1cnJlbnQgY2xhc3MuCiAgc3VwZXJjbGFzc01lbWJlcnMsCgogIC8vLyBNZXJnaW5nIHN1cGVyY2xhc3Mgc2V0dGVycyB3aXRoIHRoZSBjdXJyZW50IGNsYXNzLgogIHN1cGVyY2xhc3NTZXR0ZXJzLAoKICAvLy8gTWVyZ2luZyBtZW1iZXJzIG9mIHR3byBpbnRlcmZhY2VzLgogIGludGVyZmFjZXNNZW1iZXJzLAoKICAvLy8gTWVyZ2luZyBzZXR0ZXJzIG9mIHR3byBpbnRlcmZhY2VzLgogIGludGVyZmFjZXNTZXR0ZXJzLAoKICAvLy8gTWVyZ2luZyBjbGFzcyBtZW1iZXJzIHdpdGggaW50ZXJmYWNlIG1lbWJlcnMuCiAgc3VwZXJ0eXBlc01lbWJlcnMsCgogIC8vLyBNZXJnaW5nIGNsYXNzIHNldHRlcnMgd2l0aCBpbnRlcmZhY2Ugc2V0dGVycy4KICBzdXBlcnR5cGVzU2V0dGVycywKCiAgLy8vIE1lcmdpbmcgbWVtYmVycyB3aXRoIGluaGVyaXRlZCBzZXR0ZXJzLgogIG1lbWJlcnNXaXRoU2V0dGVycywKCiAgLy8vIE1lcmdpbmcgc2V0dGVycyB3aXRoIGluaGVyaXRlZCBtZW1iZXJzLgogIHNldHRlcnNXaXRoTWVtYmVycywKfQoKTGlzdDxMb2NhdGVkTWVzc2FnZT4gaW5oZXJpdGVkQ29uZmxpY3RDb250ZXh0KEJ1aWxkZXIgYSwgQnVpbGRlciBiKSB7CiAgcmV0dXJuIGluaGVyaXRlZENvbmZsaWN0Q29udGV4dEtlcm5lbCgKICAgICAgYS50YXJnZXQsIGIudGFyZ2V0LCBhLmZ1bGxOYW1lRm9yRXJyb3JzLmxlbmd0aCk7Cn0KCkxpc3Q8TG9jYXRlZE1lc3NhZ2U+IGluaGVyaXRlZENvbmZsaWN0Q29udGV4dEtlcm5lbCgKICAgIE1lbWJlciBhLCBNZW1iZXIgYiwgaW50IGxlbmd0aCkgewogIC8vIFRPRE8oYWhlKTogRGVsZXRlIHRoaXMgbWV0aG9kIHdoZW4gaXQgaXNuJ3QgdXNlZCBieSBbSW50ZXJmYWNlUmVzb2x2ZXJdLgogIGludCBjb21wYXJlID0gIiR7YS5maWxlVXJpfSIuY29tcGFyZVRvKCIke2IuZmlsZVVyaX0iKTsKICBpZiAoY29tcGFyZSA9PSAwKSB7CiAgICBjb21wYXJlID0gYS5maWxlT2Zmc2V0LmNvbXBhcmVUbyhiLmZpbGVPZmZzZXQpOwogIH0KICBNZW1iZXIgZmlyc3Q7CiAgTWVtYmVyIHNlY29uZDsKICBpZiAoY29tcGFyZSA8IDApIHsKICAgIGZpcnN0ID0gYTsKICAgIHNlY29uZCA9IGI7CiAgfSBlbHNlIHsKICAgIGZpcnN0ID0gYjsKICAgIHNlY29uZCA9IGE7CiAgfQogIHJldHVybiA8TG9jYXRlZE1lc3NhZ2U+WwogICAgbWVzc2FnZUluaGVyaXRlZE1lbWJlcnNDb25mbGljdENhdXNlMS53aXRoTG9jYXRpb24oCiAgICAgICAgZmlyc3QuZmlsZVVyaSwgZmlyc3QuZmlsZU9mZnNldCwgbGVuZ3RoKSwKICAgIG1lc3NhZ2VJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3RDYXVzZTIud2l0aExvY2F0aW9uKAogICAgICAgIHNlY29uZC5maWxlVXJpLCBzZWNvbmQuZmlsZU9mZnNldCwgbGVuZ3RoKSwKICBdOwp9CgpjbGFzcyBCdWlsZGVyTWl4aW5JbmZlcnJlciBleHRlbmRzIE1peGluSW5mZXJyZXIgewogIGZpbmFsIENsYXNzQnVpbGRlciBjbHM7CgogIEJ1aWxkZXJNaXhpbkluZmVycmVyKAogICAgICB0aGlzLmNscywgQ29yZVR5cGVzIGNvcmVUeXBlcywgVHlwZUJ1aWxkZXJDb25zdHJhaW50R2F0aGVyZXIgZ2F0aGVyZXIpCiAgICAgIDogc3VwZXIoY29yZVR5cGVzLCBnYXRoZXJlcik7CgogIFN1cGVydHlwZSBhc0luc3RhbnRpYXRpb25PZihTdXBlcnR5cGUgdHlwZSwgQ2xhc3Mgc3VwZXJjbGFzcykgewogICAgSW50ZXJmYWNlVHlwZSBpbnRlcmZhY2VUeXBlID0KICAgICAgICBnYXRoZXJlci5nZXRUeXBlQXNJbnN0YW5jZU9mKHR5cGUuYXNJbnRlcmZhY2VUeXBlLCBzdXBlcmNsYXNzKTsKICAgIGlmIChpbnRlcmZhY2VUeXBlID09IG51bGwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIG5ldyBTdXBlcnR5cGUoaW50ZXJmYWNlVHlwZS5jbGFzc05vZGUsIGludGVyZmFjZVR5cGUudHlwZUFyZ3VtZW50cyk7CiAgfQoKICB2b2lkIHJlcG9ydFByb2JsZW0oTWVzc2FnZSBtZXNzYWdlLCBDbGFzcyBrZXJuZWxDbGFzcykgewogICAgaW50IGxlbmd0aCA9IGNscy5pc01peGluQXBwbGljYXRpb24gPyAxIDogY2xzLmZ1bGxOYW1lRm9yRXJyb3JzLmxlbmd0aDsKICAgIGNscy5hZGRQcm9ibGVtKG1lc3NhZ2UsIGNscy5jaGFyT2Zmc2V0LCBsZW5ndGgpOwogIH0KfQoKY2xhc3MgVHlwZUJ1aWxkZXJDb25zdHJhaW50R2F0aGVyZXIgZXh0ZW5kcyBUeXBlQ29uc3RyYWludEdhdGhlcmVyCiAgICB3aXRoIFN0YW5kYXJkQm91bmRzIHsKICBmaW5hbCBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgaGllcmFyY2h5OwoKICBUeXBlQnVpbGRlckNvbnN0cmFpbnRHYXRoZXJlcigKICAgICAgdGhpcy5oaWVyYXJjaHksIEl0ZXJhYmxlPFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzKQogICAgICA6IHN1cGVyLnN1YmNsYXNzaW5nKHR5cGVQYXJhbWV0ZXJzKTsKCiAgQG92ZXJyaWRlCiAgQ2xhc3MgZ2V0IG9iamVjdENsYXNzID0+IGhpZXJhcmNoeS5vYmplY3RDbGFzczsKCiAgQG92ZXJyaWRlCiAgQ2xhc3MgZ2V0IGZ1bmN0aW9uQ2xhc3MgPT4gaGllcmFyY2h5LmZ1bmN0aW9uQ2xhc3M7CgogIEBvdmVycmlkZQogIENsYXNzIGdldCBmdXR1cmVDbGFzcyA9PiBoaWVyYXJjaHkuZnV0dXJlQ2xhc3M7CgogIEBvdmVycmlkZQogIENsYXNzIGdldCBmdXR1cmVPckNsYXNzID0+IGhpZXJhcmNoeS5mdXR1cmVPckNsYXNzOwoKICBAb3ZlcnJpZGUKICBDbGFzcyBnZXQgbnVsbENsYXNzID0+IGhpZXJhcmNoeS5udWxsQ2xhc3M7CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0IG51bGxUeXBlID0+IG51bGxDbGFzcy5yYXdUeXBlOwoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldCBvYmplY3RUeXBlID0+IG9iamVjdENsYXNzLnJhd1R5cGU7CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0IHJhd0Z1bmN0aW9uVHlwZSA9PiBmdW5jdGlvbkNsYXNzLnJhd1R5cGU7CgogIEBvdmVycmlkZQogIHZvaWQgYWRkTG93ZXJCb3VuZChUeXBlQ29uc3RyYWludCBjb25zdHJhaW50LCBEYXJ0VHlwZSBsb3dlcikgewogICAgY29uc3RyYWludC5sb3dlciA9IGdldFN0YW5kYXJkVXBwZXJCb3VuZChjb25zdHJhaW50Lmxvd2VyLCBsb3dlcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZFVwcGVyQm91bmQoVHlwZUNvbnN0cmFpbnQgY29uc3RyYWludCwgRGFydFR5cGUgdXBwZXIpIHsKICAgIGNvbnN0cmFpbnQudXBwZXIgPSBnZXRTdGFuZGFyZExvd2VyQm91bmQoY29uc3RyYWludC51cHBlciwgdXBwZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyIGdldEludGVyZmFjZU1lbWJlcihDbGFzcyBjbGFzc18sIE5hbWUgbmFtZSwge2Jvb2wgc2V0dGVyOiBmYWxzZX0pIHsKICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRUeXBlQXNJbnN0YW5jZU9mKEludGVyZmFjZVR5cGUgdHlwZSwgQ2xhc3Mgc3VwZXJjbGFzcykgewogICAgcmV0dXJuIGhpZXJhcmNoeS5nZXRLZXJuZWxUeXBlQXNJbnN0YW5jZU9mKHR5cGUsIHN1cGVyY2xhc3MpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBmdXR1cmVUeXBlKERhcnRUeXBlIHR5cGUpIHsKICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVHlwZShoaWVyYXJjaHkuZnV0dXJlQ2xhc3MsIDxEYXJ0VHlwZT5bdHlwZV0pOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1N1YnR5cGVPZihEYXJ0VHlwZSBzdWJ0eXBlLCBEYXJ0VHlwZSBzdXBlcnR5cGUpIHsKICAgIHJldHVybiBoaWVyYXJjaHkudHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwoc3VidHlwZSwgc3VwZXJ0eXBlKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0TGVnYWN5TGVhc3RVcHBlckJvdW5kKAogICAgICBJbnRlcmZhY2VUeXBlIHR5cGUxLCBJbnRlcmZhY2VUeXBlIHR5cGUyKSB7CiAgICByZXR1cm4gaGllcmFyY2h5LmdldEtlcm5lbExlZ2FjeUxlYXN0VXBwZXJCb3VuZCh0eXBlMSwgdHlwZTIpOwogIH0KfQoKY2xhc3MgRGVsYXllZE92ZXJyaWRlQ2hlY2sgewogIGZpbmFsIENsYXNzQnVpbGRlciBjbGFzc0J1aWxkZXI7CiAgZmluYWwgQnVpbGRlciBhOwogIGZpbmFsIEJ1aWxkZXIgYjsKCiAgY29uc3QgRGVsYXllZE92ZXJyaWRlQ2hlY2sodGhpcy5jbGFzc0J1aWxkZXIsIHRoaXMuYSwgdGhpcy5iKTsKCiAgdm9pZCBjaGVjayhDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgaGllcmFyY2h5KSB7CiAgICB2b2lkIGNhbGxiYWNrKAogICAgICAgIE1lbWJlciBkZWNsYXJlZE1lbWJlciwgTWVtYmVyIGludGVyZmFjZU1lbWJlciwgYm9vbCBpc1NldHRlcikgewogICAgICBjbGFzc0J1aWxkZXIuY2hlY2tPdmVycmlkZSgKICAgICAgICAgIGhpZXJhcmNoeS50eXBlcywgZGVjbGFyZWRNZW1iZXIsIGludGVyZmFjZU1lbWJlciwgaXNTZXR0ZXIsIGNhbGxiYWNrLAogICAgICAgICAgaXNJbnRlcmZhY2VDaGVjazogIWNsYXNzQnVpbGRlci5pc01peGluQXBwbGljYXRpb24pOwogICAgfQoKICAgIEJ1aWxkZXIgYSA9IHRoaXMuYTsKICAgIGRlYnVnPy5sb2coIkRlbGF5ZWQgb3ZlcnJpZGUgY2hlY2sgb2YgJHtmdWxsTmFtZShhKX0gIgogICAgICAgICIke2Z1bGxOYW1lKGIpfSB3cnQuICR7Y2xhc3NCdWlsZGVyLmZ1bGxOYW1lRm9yRXJyb3JzfSIpOwogICAgaWYgKGNsYXNzQnVpbGRlciA9PSBhLnBhcmVudCkgewogICAgICBpZiAoYSBpcyBQcm9jZWR1cmVCdWlsZGVyKSB7CiAgICAgICAgaWYgKGEuaXNHZXR0ZXIgJiYgIWhhc0V4cGxpY2l0UmV0dXJuVHlwZShhKSkgewogICAgICAgICAgRGFydFR5cGUgdHlwZTsKICAgICAgICAgIGlmIChiLmlzR2V0dGVyKSB7CiAgICAgICAgICAgIFByb2NlZHVyZSBiVGFyZ2V0ID0gYi50YXJnZXQ7CiAgICAgICAgICAgIHR5cGUgPSBiVGFyZ2V0LmZ1bmN0aW9uLnJldHVyblR5cGU7CiAgICAgICAgICB9IGVsc2UgaWYgKGIuaXNTZXR0ZXIpIHsKICAgICAgICAgICAgUHJvY2VkdXJlIGJUYXJnZXQgPSBiLnRhcmdldDsKICAgICAgICAgICAgdHlwZSA9IGJUYXJnZXQuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMuc2luZ2xlLnR5cGU7CiAgICAgICAgICB9IGVsc2UgaWYgKGIuaXNGaWVsZCkgewogICAgICAgICAgICBGaWVsZCBiVGFyZ2V0ID0gYi50YXJnZXQ7CiAgICAgICAgICAgIHR5cGUgPSBiVGFyZ2V0LnR5cGU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodHlwZSAhPSBudWxsKSB7CiAgICAgICAgICAgIHR5cGUgPSBTdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUoCiAgICAgICAgICAgICAgICAgICAgaGllcmFyY2h5LmdldEtlcm5lbFR5cGVBc0luc3RhbmNlT2YoCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzQnVpbGRlci5jbHMudGhpc1R5cGUsIGIudGFyZ2V0LmVuY2xvc2luZ0NsYXNzKSkKICAgICAgICAgICAgICAgIC5zdWJzdGl0dXRlVHlwZSh0eXBlKTsKICAgICAgICAgICAgaWYgKCFhLmhhZFR5cGVzSW5mZXJyZWQgfHwgIWIuaXNTZXR0ZXIpIHsKICAgICAgICAgICAgICBpbmZlclJldHVyblR5cGUoCiAgICAgICAgICAgICAgICAgIGNsYXNzQnVpbGRlciwgYSwgdHlwZSwgYS5oYWRUeXBlc0luZmVycmVkLCBoaWVyYXJjaHkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChhLmlzU2V0dGVyICYmICFoYXNFeHBsaWNpdGx5VHlwZWRGb3JtYWxQYXJhbWV0ZXIoYSwgMCkpIHsKICAgICAgICAgIERhcnRUeXBlIHR5cGU7CiAgICAgICAgICBpZiAoYi5pc0dldHRlcikgewogICAgICAgICAgICBQcm9jZWR1cmUgYlRhcmdldCA9IGIudGFyZ2V0OwogICAgICAgICAgICB0eXBlID0gYlRhcmdldC5mdW5jdGlvbi5yZXR1cm5UeXBlOwogICAgICAgICAgfSBlbHNlIGlmIChiLmlzU2V0dGVyKSB7CiAgICAgICAgICAgIFByb2NlZHVyZSBiVGFyZ2V0ID0gYi50YXJnZXQ7CiAgICAgICAgICAgIHR5cGUgPSBiVGFyZ2V0LmZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLnNpbmdsZS50eXBlOwogICAgICAgICAgfSBlbHNlIGlmIChiLmlzRmllbGQpIHsKICAgICAgICAgICAgRmllbGQgYlRhcmdldCA9IGIudGFyZ2V0OwogICAgICAgICAgICB0eXBlID0gYlRhcmdldC50eXBlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHR5cGUgIT0gbnVsbCkgewogICAgICAgICAgICB0eXBlID0gU3Vic3RpdHV0aW9uLmZyb21JbnRlcmZhY2VUeXBlKAogICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoeS5nZXRLZXJuZWxUeXBlQXNJbnN0YW5jZU9mKAogICAgICAgICAgICAgICAgICAgICAgICBjbGFzc0J1aWxkZXIuY2xzLnRoaXNUeXBlLCBiLnRhcmdldC5lbmNsb3NpbmdDbGFzcykpCiAgICAgICAgICAgICAgICAuc3Vic3RpdHV0ZVR5cGUodHlwZSk7CiAgICAgICAgICAgIGlmICghYS5oYWRUeXBlc0luZmVycmVkIHx8ICFiLmlzR2V0dGVyKSB7CiAgICAgICAgICAgICAgaW5mZXJQYXJhbWV0ZXJUeXBlKGNsYXNzQnVpbGRlciwgYSwgYS5mb3JtYWxzLnNpbmdsZSwgdHlwZSwKICAgICAgICAgICAgICAgICAgYS5oYWRUeXBlc0luZmVycmVkLCBoaWVyYXJjaHkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGEuaGFkVHlwZXNJbmZlcnJlZCA9IHRydWU7CiAgICAgIH0gZWxzZSBpZiAoYSBpcyBGaWVsZEJ1aWxkZXIgJiYgYS50eXBlID09IG51bGwpIHsKICAgICAgICBEYXJ0VHlwZSB0eXBlOwogICAgICAgIGlmIChiLmlzR2V0dGVyKSB7CiAgICAgICAgICBQcm9jZWR1cmUgYlRhcmdldCA9IGIudGFyZ2V0OwogICAgICAgICAgdHlwZSA9IGJUYXJnZXQuZnVuY3Rpb24ucmV0dXJuVHlwZTsKICAgICAgICB9IGVsc2UgaWYgKGIuaXNTZXR0ZXIpIHsKICAgICAgICAgIFByb2NlZHVyZSBiVGFyZ2V0ID0gYi50YXJnZXQ7CiAgICAgICAgICB0eXBlID0gYlRhcmdldC5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5zaW5nbGUudHlwZTsKICAgICAgICB9IGVsc2UgaWYgKGIuaXNGaWVsZCkgewogICAgICAgICAgRmllbGQgYlRhcmdldCA9IGIudGFyZ2V0OwogICAgICAgICAgdHlwZSA9IGJUYXJnZXQudHlwZTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGUgIT0gbnVsbCkgewogICAgICAgICAgdHlwZSA9IFN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZSgKICAgICAgICAgICAgICAgICAgaGllcmFyY2h5LmdldEtlcm5lbFR5cGVBc0luc3RhbmNlT2YoCiAgICAgICAgICAgICAgICAgICAgICBjbGFzc0J1aWxkZXIuY2xzLnRoaXNUeXBlLCBiLnRhcmdldC5lbmNsb3NpbmdDbGFzcykpCiAgICAgICAgICAgICAgLnN1YnN0aXR1dGVUeXBlKHR5cGUpOwogICAgICAgICAgaWYgKHR5cGUgIT0gYS5maWVsZC50eXBlKSB7CiAgICAgICAgICAgIGlmIChhLmhhZFR5cGVzSW5mZXJyZWQpIHsKICAgICAgICAgICAgICBpZiAoYi5pc1NldHRlciAmJgogICAgICAgICAgICAgICAgICAoIWltcGxpZXNTZXR0ZXIoYSkgfHwKICAgICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoeS50eXBlcy5pc1N1YnR5cGVPZktlcm5lbCh0eXBlLCBhLmZpZWxkLnR5cGUpKSkgewogICAgICAgICAgICAgICAgdHlwZSA9IGEuZmllbGQudHlwZTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmVwb3J0Q2FudEluZmVyRmllbGRUeXBlKGNsYXNzQnVpbGRlciwgYSk7CiAgICAgICAgICAgICAgICB0eXBlID0gY29uc3QgSW52YWxpZFR5cGUoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGVidWc/LmxvZygiSW5mZXJyZWQgdHlwZSAke3R5cGV9IGZvciAke2Z1bGxOYW1lKGEpfSIpOwogICAgICAgICAgICBhLmZpZWxkLnR5cGUgPSB0eXBlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhLmhhZFR5cGVzSW5mZXJyZWQgPSB0cnVlOwogICAgICB9CiAgICB9CgogICAgY2FsbGJhY2soYS50YXJnZXQsIGIudGFyZ2V0LCBhLmlzU2V0dGVyKTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIERlbGF5ZWRNZW1iZXIgZXh0ZW5kcyBCdWlsZGVyIHsKICAvLy8gVGhlIGNsYXNzIHdoaWNoIGhhcyBpbmhlcml0ZWQgW2RlY2xhcmF0aW9uc10uCiAgQG92ZXJyaWRlCiAgZmluYWwgQ2xhc3NCdWlsZGVyIHBhcmVudDsKCiAgLy8vIENvbmZsaWN0aW5nIGRlY2xhcmF0aW9ucy4KICBmaW5hbCBMaXN0PEJ1aWxkZXI+IGRlY2xhcmF0aW9uczsKCiAgZmluYWwgYm9vbCBpc1NldHRlcjsKCiAgZmluYWwgYm9vbCBtb2RpZnlLZXJuZWw7CgogIERlbGF5ZWRNZW1iZXIoCiAgICAgIHRoaXMucGFyZW50LCB0aGlzLmRlY2xhcmF0aW9ucywgdGhpcy5pc1NldHRlciwgdGhpcy5tb2RpZnlLZXJuZWwpOwoKICB2b2lkIGFkZEFsbERlY2xhcmF0aW9uc1RvKExpc3Q8QnVpbGRlcj4gZGVjbGFyYXRpb25zKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMuZGVjbGFyYXRpb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgIGFkZERlY2xhcmF0aW9uSWZEaWZmZXJlbnQodGhpcy5kZWNsYXJhdGlvbnNbaV0sIGRlY2xhcmF0aW9ucyk7CiAgICB9CiAgICBhc3NlcnQoZGVjbGFyYXRpb25zLnRvU2V0KCkubGVuZ3RoID09IGRlY2xhcmF0aW9ucy5sZW5ndGgpOwogIH0KCiAgTWVtYmVyIGNoZWNrKENsYXNzSGllcmFyY2h5QnVpbGRlciBoaWVyYXJjaHkpOwoKICBEZWxheWVkTWVtYmVyIHdpdGhQYXJlbnQoQ2xhc3NCdWlsZGVyIHBhcmVudCk7CgogIEBvdmVycmlkZQogIFVyaSBnZXQgZmlsZVVyaSA9PiBwYXJlbnQuZmlsZVVyaTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBjaGFyT2Zmc2V0ID0+IHBhcmVudC5jaGFyT2Zmc2V0OwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGZ1bGxOYW1lRm9yRXJyb3JzID0+IGRlY2xhcmF0aW9ucy5tYXAoZnVsbE5hbWUpLmpvaW4oIiUiKTsKCiAgYm9vbCBnZXQgaXNJbmhlcml0YWJsZUNvbmZsaWN0ID0+IHRydWU7CgogIEBvdmVycmlkZQogIE1lbWJlciBnZXQgdGFyZ2V0ID0+IGRlY2xhcmF0aW9ucy5maXJzdC50YXJnZXQ7Cn0KCi8vLyBUaGlzIHJlcHJlc2VudHMgYSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBpbmhlcml0ZWQgZnJvbSBhIHN1cGVyY2xhc3MgdGhhdAovLy8gaGFzIGNvbmZsaWN0cyB3aXRoIG1ldGhvZHMgaW5oZXJpdGVkIGZyb20gYW4gaW50ZXJmYWNlLiBUaGUgY29uY3JldGUKLy8vIGltcGxlbWVudGF0aW9uIGlzIHRoZSBmaXJzdCBlbGVtZW50IG9mIFtkZWNsYXJhdGlvbnNdLgpjbGFzcyBJbmhlcml0ZWRJbXBsZW1lbnRhdGlvbkludGVyZmFjZUNvbmZsaWN0IGV4dGVuZHMgRGVsYXllZE1lbWJlciB7CiAgTWVtYmVyIGNvbWJpbmVkTWVtYmVyU2lnbmF0dXJlUmVzdWx0OwoKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzSW5oZXJpdGFibGVDb25mbGljdDsKCiAgSW5oZXJpdGVkSW1wbGVtZW50YXRpb25JbnRlcmZhY2VDb25mbGljdChDbGFzc0J1aWxkZXIgcGFyZW50LAogICAgICBMaXN0PEJ1aWxkZXI+IGRlY2xhcmF0aW9ucywgYm9vbCBpc1NldHRlciwgYm9vbCBtb2RpZnlLZXJuZWwsCiAgICAgIHt0aGlzLmlzSW5oZXJpdGFibGVDb25mbGljdCA9IHRydWV9KQogICAgICA6IHN1cGVyKHBhcmVudCwgZGVjbGFyYXRpb25zLCBpc1NldHRlciwgbW9kaWZ5S2VybmVsKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICJJbmhlcml0ZWRJbXBsZW1lbnRhdGlvbkludGVyZmFjZUNvbmZsaWN0KCIKICAgICAgICAiJHtwYXJlbnQuZnVsbE5hbWVGb3JFcnJvcnN9LCAiCiAgICAgICAgIlske2RlY2xhcmF0aW9ucy5tYXAoZnVsbE5hbWUpLmpvaW4oJywgJyl9XSkiOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyIGNoZWNrKENsYXNzSGllcmFyY2h5QnVpbGRlciBoaWVyYXJjaHkpIHsKICAgIGlmIChjb21iaW5lZE1lbWJlclNpZ25hdHVyZVJlc3VsdCAhPSBudWxsKSB7CiAgICAgIHJldHVybiBjb21iaW5lZE1lbWJlclNpZ25hdHVyZVJlc3VsdDsKICAgIH0KICAgIGlmICghcGFyZW50LmlzQWJzdHJhY3QpIHsKICAgICAgQnVpbGRlciBjb25jcmV0ZUltcGxlbWVudGF0aW9uID0gZGVjbGFyYXRpb25zLmZpcnN0OwogICAgICBmb3IgKGludCBpID0gMTsgaSA8IGRlY2xhcmF0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgIG5ldyBEZWxheWVkT3ZlcnJpZGVDaGVjaygKICAgICAgICAgICAgICAgIHBhcmVudCwgY29uY3JldGVJbXBsZW1lbnRhdGlvbiwgZGVjbGFyYXRpb25zW2ldKQogICAgICAgICAgICAuY2hlY2soaGllcmFyY2h5KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNvbWJpbmVkTWVtYmVyU2lnbmF0dXJlUmVzdWx0ID0KICAgICAgICBuZXcgSW50ZXJmYWNlQ29uZmxpY3QocGFyZW50LCBkZWNsYXJhdGlvbnMsIGlzU2V0dGVyLCBtb2RpZnlLZXJuZWwpCiAgICAgICAgICAgIC5jaGVjayhoaWVyYXJjaHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGVsYXllZE1lbWJlciB3aXRoUGFyZW50KENsYXNzQnVpbGRlciBwYXJlbnQpIHsKICAgIHJldHVybiBwYXJlbnQgPT0gdGhpcy5wYXJlbnQKICAgICAgICA/IHRoaXMKICAgICAgICA6IG5ldyBJbmhlcml0ZWRJbXBsZW1lbnRhdGlvbkludGVyZmFjZUNvbmZsaWN0KAogICAgICAgICAgICBwYXJlbnQsIGRlY2xhcmF0aW9ucywgaXNTZXR0ZXIsIG1vZGlmeUtlcm5lbCk7CiAgfQoKICBzdGF0aWMgQnVpbGRlciBjb21iaW5lZChDbGFzc0J1aWxkZXIgcGFyZW50LCBCdWlsZGVyIGNvbmNyZXRlSW1wbGVtZW50YXRpb24sCiAgICAgIEJ1aWxkZXIgb3RoZXIsIGJvb2wgaXNTZXR0ZXIsIGJvb2wgY3JlYXRlRm9yd2FyZGVycywKICAgICAge2Jvb2wgaXNJbmhlcml0YWJsZUNvbmZsaWN0ID0gdHJ1ZX0pIHsKICAgIExpc3Q8QnVpbGRlcj4gZGVjbGFyYXRpb25zID0gPEJ1aWxkZXI+W107CiAgICBpZiAoY29uY3JldGVJbXBsZW1lbnRhdGlvbiBpcyBEZWxheWVkTWVtYmVyKSB7CiAgICAgIGNvbmNyZXRlSW1wbGVtZW50YXRpb24uYWRkQWxsRGVjbGFyYXRpb25zVG8oZGVjbGFyYXRpb25zKTsKICAgIH0gZWxzZSB7CiAgICAgIGRlY2xhcmF0aW9ucy5hZGQoY29uY3JldGVJbXBsZW1lbnRhdGlvbik7CiAgICB9CiAgICBpZiAob3RoZXIgaXMgRGVsYXllZE1lbWJlcikgewogICAgICBvdGhlci5hZGRBbGxEZWNsYXJhdGlvbnNUbyhkZWNsYXJhdGlvbnMpOwogICAgfSBlbHNlIHsKICAgICAgYWRkRGVjbGFyYXRpb25JZkRpZmZlcmVudChvdGhlciwgZGVjbGFyYXRpb25zKTsKICAgIH0KICAgIGlmIChkZWNsYXJhdGlvbnMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIGRlY2xhcmF0aW9ucy5zaW5nbGU7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IEluaGVyaXRlZEltcGxlbWVudGF0aW9uSW50ZXJmYWNlQ29uZmxpY3QoCiAgICAgICAgICBwYXJlbnQsIGRlY2xhcmF0aW9ucywgaXNTZXR0ZXIsIGNyZWF0ZUZvcndhcmRlcnMsCiAgICAgICAgICBpc0luaGVyaXRhYmxlQ29uZmxpY3Q6IGlzSW5oZXJpdGFibGVDb25mbGljdCk7CiAgICB9CiAgfQp9CgpjbGFzcyBJbnRlcmZhY2VDb25mbGljdCBleHRlbmRzIERlbGF5ZWRNZW1iZXIgewogIEludGVyZmFjZUNvbmZsaWN0KENsYXNzQnVpbGRlciBwYXJlbnQsIExpc3Q8QnVpbGRlcj4gZGVjbGFyYXRpb25zLAogICAgICBib29sIGlzU2V0dGVyLCBib29sIG1vZGlmeUtlcm5lbCkKICAgICAgOiBzdXBlcihwYXJlbnQsIGRlY2xhcmF0aW9ucywgaXNTZXR0ZXIsIG1vZGlmeUtlcm5lbCk7CgogIE1lbWJlciBjb21iaW5lZE1lbWJlclNpZ25hdHVyZVJlc3VsdDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICJJbnRlcmZhY2VDb25mbGljdCgke3BhcmVudC5mdWxsTmFtZUZvckVycm9yc30sICIKICAgICAgICAiWyR7ZGVjbGFyYXRpb25zLm1hcChmdWxsTmFtZSkuam9pbignLCAnKX1dKSI7CiAgfQoKICBEYXJ0VHlwZSBjb21wdXRlTWVtYmVyVHlwZSgKICAgICAgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGhpZXJhcmNoeSwgRGFydFR5cGUgdGhpc1R5cGUsIE1lbWJlciBtZW1iZXIpIHsKICAgIERhcnRUeXBlIHR5cGU7CiAgICBpZiAobWVtYmVyIGlzIFByb2NlZHVyZSkgewogICAgICBpZiAobWVtYmVyLmlzR2V0dGVyKSB7CiAgICAgICAgdHlwZSA9IG1lbWJlci5nZXR0ZXJUeXBlOwogICAgICB9IGVsc2UgaWYgKG1lbWJlci5pc1NldHRlcikgewogICAgICAgIHR5cGUgPSBtZW1iZXIuc2V0dGVyVHlwZTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0eXBlID0gbWVtYmVyLmZ1bmN0aW9uLmZ1bmN0aW9uVHlwZTsKICAgICAgfQogICAgfSBlbHNlIGlmIChtZW1iZXIgaXMgRmllbGQpIHsKICAgICAgdHlwZSA9IG1lbWJlci50eXBlOwogICAgfSBlbHNlIHsKICAgICAgdW5oYW5kbGVkKCIke21lbWJlci5ydW50aW1lVHlwZX0iLCAiJG1lbWJlciIsIHBhcmVudC5jaGFyT2Zmc2V0LAogICAgICAgICAgcGFyZW50LmZpbGVVcmkpOwogICAgfQogICAgcmV0dXJuIFN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZShoaWVyYXJjaHkuZ2V0S2VybmVsVHlwZUFzSW5zdGFuY2VPZigKICAgICAgICAgICAgdGhpc1R5cGUsIG1lbWJlci5lbmNsb3NpbmdDbGFzcykpCiAgICAgICAgLnN1YnN0aXR1dGVUeXBlKHR5cGUpOwogIH0KCiAgYm9vbCBpc01vcmVTcGVjaWZpYyhDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgaGllcmFyY2h5LCBEYXJ0VHlwZSBhLCBEYXJ0VHlwZSBiKSB7CiAgICBpZiAoaXNTZXR0ZXIpIHsKICAgICAgcmV0dXJuIGhpZXJhcmNoeS50eXBlcy5pc1N1YnR5cGVPZktlcm5lbChiLCBhKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBoaWVyYXJjaHkudHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwoYSwgYik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXIgY2hlY2soQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGhpZXJhcmNoeSkgewogICAgaWYgKGNvbWJpbmVkTWVtYmVyU2lnbmF0dXJlUmVzdWx0ICE9IG51bGwpIHsKICAgICAgcmV0dXJuIGNvbWJpbmVkTWVtYmVyU2lnbmF0dXJlUmVzdWx0OwogICAgfQogICAgaWYgKHBhcmVudC5saWJyYXJ5IGlzISBTb3VyY2VMaWJyYXJ5QnVpbGRlcikgewogICAgICByZXR1cm4gY29tYmluZWRNZW1iZXJTaWduYXR1cmVSZXN1bHQgPSBkZWNsYXJhdGlvbnMuZmlyc3QudGFyZ2V0OwogICAgfQogICAgRGFydFR5cGUgdGhpc1R5cGUgPSBwYXJlbnQuY2xzLnRoaXNUeXBlOwogICAgQnVpbGRlciBiZXN0U29GYXI7CiAgICBEYXJ0VHlwZSBiZXN0VHlwZVNvRmFyOwogICAgZm9yIChpbnQgaSA9IGRlY2xhcmF0aW9ucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICBCdWlsZGVyIGNhbmRpZGF0ZSA9IGRlY2xhcmF0aW9uc1tpXTsKICAgICAgTWVtYmVyIHRhcmdldCA9IGNhbmRpZGF0ZS50YXJnZXQ7CiAgICAgIERhcnRUeXBlIGNhbmRpZGF0ZVR5cGUgPSBjb21wdXRlTWVtYmVyVHlwZShoaWVyYXJjaHksIHRoaXNUeXBlLCB0YXJnZXQpOwogICAgICBpZiAoYmVzdFNvRmFyID09IG51bGwpIHsKICAgICAgICBiZXN0U29GYXIgPSBjYW5kaWRhdGU7CiAgICAgICAgYmVzdFR5cGVTb0ZhciA9IGNhbmRpZGF0ZVR5cGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGlzTW9yZVNwZWNpZmljKGhpZXJhcmNoeSwgY2FuZGlkYXRlVHlwZSwgYmVzdFR5cGVTb0ZhcikpIHsKICAgICAgICAgIGRlYnVnPy5sb2coIkNvbWJpbmVkIE1lbWJlciBTaWduYXR1cmU6ICR7ZnVsbE5hbWUoY2FuZGlkYXRlKX0gIgogICAgICAgICAgICAgICIke2NhbmRpZGF0ZVR5cGV9IDw6ICR7ZnVsbE5hbWUoYmVzdFNvRmFyKX0gJHtiZXN0VHlwZVNvRmFyfSIpOwogICAgICAgICAgYmVzdFNvRmFyID0gY2FuZGlkYXRlOwogICAgICAgICAgYmVzdFR5cGVTb0ZhciA9IGNhbmRpZGF0ZVR5cGU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGRlYnVnPy5sb2coIkNvbWJpbmVkIE1lbWJlciBTaWduYXR1cmU6ICIKICAgICAgICAgICAgICAiJHtmdWxsTmFtZShjYW5kaWRhdGUpfSAhPDogJHtmdWxsTmFtZShiZXN0U29GYXIpfSIpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKGJlc3RTb0ZhciAhPSBudWxsKSB7CiAgICAgIGRlYnVnPy5sb2coIkNvbWJpbmVkIE1lbWJlciBTaWduYXR1cmUgYmVzdFNvRmFyOiAke2Z1bGxOYW1lKGJlc3RTb0Zhcil9Iik7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVjbGFyYXRpb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgQnVpbGRlciBjYW5kaWRhdGUgPSBkZWNsYXJhdGlvbnNbaV07CiAgICAgICAgTWVtYmVyIHRhcmdldCA9IGNhbmRpZGF0ZS50YXJnZXQ7CiAgICAgICAgRGFydFR5cGUgY2FuZGlkYXRlVHlwZSA9IGNvbXB1dGVNZW1iZXJUeXBlKGhpZXJhcmNoeSwgdGhpc1R5cGUsIHRhcmdldCk7CiAgICAgICAgaWYgKCFpc01vcmVTcGVjaWZpYyhoaWVyYXJjaHksIGJlc3RUeXBlU29GYXIsIGNhbmRpZGF0ZVR5cGUpKSB7CiAgICAgICAgICBkZWJ1Zz8ubG9nKCJDb21iaW5lZCBNZW1iZXIgU2lnbmF0dXJlOiAiCiAgICAgICAgICAgICAgIiR7ZnVsbE5hbWUoYmVzdFNvRmFyKX0gITw6ICR7ZnVsbE5hbWUoY2FuZGlkYXRlKX0iKTsKCiAgICAgICAgICBTdHJpbmcgdXJpID0gJyR7cGFyZW50LmxpYnJhcnkudXJpfSc7CiAgICAgICAgICBpZiAodXJpID09ICdkYXJ0OmpzJyAmJgogICAgICAgICAgICAgICAgICBwYXJlbnQuZmlsZVVyaS5wYXRoU2VnbWVudHMubGFzdCA9PSAnanNfZGFydDJqcy5kYXJ0JyB8fAogICAgICAgICAgICAgIHVyaSA9PSAnZGFydDpfaW50ZXJjZXB0b3JzJyAmJgogICAgICAgICAgICAgICAgICBwYXJlbnQuZmlsZVVyaS5wYXRoU2VnbWVudHMubGFzdCA9PSAnanNfbnVtYmVyLmRhcnQnKSB7CiAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEZpeCB0aGUgZGFydDJqcyBsaWJyYXJpZXMgYW5kIHJlbW92ZSB0aGUKICAgICAgICAgICAgLy8gYWJvdmUgVVJJcy4KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJlc3RTb0ZhciA9IG51bGw7CiAgICAgICAgICAgIGJlc3RUeXBlU29GYXIgPSBudWxsOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoYmVzdFNvRmFyID09IG51bGwpIHsKICAgICAgU3RyaW5nIG5hbWUgPSBwYXJlbnQuZnVsbE5hbWVGb3JFcnJvcnM7CiAgICAgIGludCBsZW5ndGggPSBwYXJlbnQuaXNBbm9ueW1vdXNNaXhpbkFwcGxpY2F0aW9uID8gMSA6IG5hbWUubGVuZ3RoOwogICAgICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0ID0gZGVjbGFyYXRpb25zLm1hcCgoQnVpbGRlciBkKSB7CiAgICAgICAgcmV0dXJuIG1lc3NhZ2VEZWNsYXJlZE1lbWJlckNvbmZsaWN0c1dpdGhJbmhlcml0ZWRNZW1iZXJDYXVzZQogICAgICAgICAgICAud2l0aExvY2F0aW9uKGQuZmlsZVVyaSwgZC5jaGFyT2Zmc2V0LCBkLmZ1bGxOYW1lRm9yRXJyb3JzLmxlbmd0aCk7CiAgICAgIH0pLnRvTGlzdCgpOwoKICAgICAgcGFyZW50LmFkZFByb2JsZW0oCiAgICAgICAgICB0ZW1wbGF0ZUNvbWJpbmVkTWVtYmVyU2lnbmF0dXJlRmFpbGVkLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgcGFyZW50LmZ1bGxOYW1lRm9yRXJyb3JzLCBkZWNsYXJhdGlvbnMuZmlyc3QuZnVsbE5hbWVGb3JFcnJvcnMpLAogICAgICAgICAgcGFyZW50LmNoYXJPZmZzZXQsCiAgICAgICAgICBsZW5ndGgsCiAgICAgICAgICBjb250ZXh0OiBjb250ZXh0KTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBkZWJ1Zz8ubG9nKCJDb21iaW5lZCBNZW1iZXIgU2lnbmF0dXJlIG9mICR7ZnVsbE5hbWVGb3JFcnJvcnN9OiAiCiAgICAgICAgIiR7ZnVsbE5hbWUoYmVzdFNvRmFyKX0iKTsKCiAgICBQcm9jZWR1cmVLaW5kIGtpbmQgPSBQcm9jZWR1cmVLaW5kLk1ldGhvZDsKICAgIGlmIChiZXN0U29GYXIuaXNGaWVsZCB8fCBiZXN0U29GYXIuaXNTZXR0ZXIgfHwgYmVzdFNvRmFyLmlzR2V0dGVyKSB7CiAgICAgIGtpbmQgPSBpc1NldHRlciA/IFByb2NlZHVyZUtpbmQuU2V0dGVyIDogUHJvY2VkdXJlS2luZC5HZXR0ZXI7CiAgICB9IGVsc2UgaWYgKGJlc3RTb0Zhci50YXJnZXQgaXMgUHJvY2VkdXJlICYmCiAgICAgICAgYmVzdFNvRmFyLnRhcmdldC5raW5kID09IFByb2NlZHVyZUtpbmQuT3BlcmF0b3IpIHsKICAgICAga2luZCA9IFByb2NlZHVyZUtpbmQuT3BlcmF0b3I7CiAgICB9CgogICAgaWYgKG1vZGlmeUtlcm5lbCkgewogICAgICBkZWJ1Zz8ubG9nKCJDb21iaW5lZCBNZW1iZXIgU2lnbmF0dXJlIG9mICR7ZnVsbE5hbWVGb3JFcnJvcnN9OiAiCiAgICAgICAgICAibmV3IEZvcndhcmRpbmdOb2RlKCRwYXJlbnQsICRiZXN0U29GYXIsICRkZWNsYXJhdGlvbnMsICRraW5kKSIpOwogICAgICBNZW1iZXIgc3R1YiA9CiAgICAgICAgICBuZXcgRm9yd2FyZGluZ05vZGUoaGllcmFyY2h5LCBwYXJlbnQsIGJlc3RTb0ZhciwgZGVjbGFyYXRpb25zLCBraW5kKQogICAgICAgICAgICAgIC5maW5hbGl6ZSgpOwogICAgICBpZiAocGFyZW50LmNscyA9PSBzdHViLmVuY2xvc2luZ0NsYXNzKSB7CiAgICAgICAgcGFyZW50LmNscy5hZGRNZW1iZXIoc3R1Yik7CiAgICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IHBhcmVudC5saWJyYXJ5OwogICAgICAgIGlmIChiZXN0U29GYXIudGFyZ2V0IGlzIFByb2NlZHVyZSkgewogICAgICAgICAgbGlicmFyeS5mb3J3YXJkZXJzT3JpZ2lucy4uYWRkKHN0dWIpLi5hZGQoYmVzdFNvRmFyLnRhcmdldCk7CiAgICAgICAgfQogICAgICAgIGRlYnVnPy5sb2coIkNvbWJpbmVkIE1lbWJlciBTaWduYXR1cmUgb2YgJHtmdWxsTmFtZUZvckVycm9yc306ICIKICAgICAgICAgICAgImFkZGVkIHN0dWIgJHN0dWIiKTsKICAgICAgICBpZiAocGFyZW50LmlzTWl4aW5BcHBsaWNhdGlvbikgewogICAgICAgICAgcmV0dXJuIGNvbWJpbmVkTWVtYmVyU2lnbmF0dXJlUmVzdWx0ID0gYmVzdFNvRmFyLnRhcmdldDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGNvbWJpbmVkTWVtYmVyU2lnbmF0dXJlUmVzdWx0ID0gc3R1YjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBkZWJ1Zz8ubG9nKAogICAgICAgICJDb21iaW5lZCBNZW1iZXIgU2lnbmF0dXJlIG9mICR7ZnVsbE5hbWVGb3JFcnJvcnN9OiBwaWNrZWQgYmVzdFNvRmFyIik7CiAgICByZXR1cm4gY29tYmluZWRNZW1iZXJTaWduYXR1cmVSZXN1bHQgPSBiZXN0U29GYXIudGFyZ2V0OwogIH0KCiAgQG92ZXJyaWRlCiAgRGVsYXllZE1lbWJlciB3aXRoUGFyZW50KENsYXNzQnVpbGRlciBwYXJlbnQpIHsKICAgIHJldHVybiBwYXJlbnQgPT0gdGhpcy5wYXJlbnQKICAgICAgICA/IHRoaXMKICAgICAgICA6IG5ldyBJbnRlcmZhY2VDb25mbGljdChwYXJlbnQsIGRlY2xhcmF0aW9ucywgaXNTZXR0ZXIsIG1vZGlmeUtlcm5lbCk7CiAgfQoKICBzdGF0aWMgQnVpbGRlciBjb21iaW5lZChDbGFzc0J1aWxkZXIgcGFyZW50LCBCdWlsZGVyIGEsIEJ1aWxkZXIgYiwKICAgICAgYm9vbCBpc1NldHRlciwgYm9vbCBjcmVhdGVGb3J3YXJkZXJzKSB7CiAgICBMaXN0PEJ1aWxkZXI+IGRlY2xhcmF0aW9ucyA9IDxCdWlsZGVyPltdOwogICAgaWYgKGEgaXMgRGVsYXllZE1lbWJlcikgewogICAgICBhLmFkZEFsbERlY2xhcmF0aW9uc1RvKGRlY2xhcmF0aW9ucyk7CiAgICB9IGVsc2UgewogICAgICBkZWNsYXJhdGlvbnMuYWRkKGEpOwogICAgfQogICAgaWYgKGIgaXMgRGVsYXllZE1lbWJlcikgewogICAgICBiLmFkZEFsbERlY2xhcmF0aW9uc1RvKGRlY2xhcmF0aW9ucyk7CiAgICB9IGVsc2UgewogICAgICBhZGREZWNsYXJhdGlvbklmRGlmZmVyZW50KGIsIGRlY2xhcmF0aW9ucyk7CiAgICB9CiAgICBpZiAoZGVjbGFyYXRpb25zLmxlbmd0aCA9PSAxKSB7CiAgICAgIHJldHVybiBkZWNsYXJhdGlvbnMuc2luZ2xlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VDb25mbGljdCgKICAgICAgICAgIHBhcmVudCwgZGVjbGFyYXRpb25zLCBpc1NldHRlciwgY3JlYXRlRm9yd2FyZGVycyk7CiAgICB9CiAgfQp9CgpjbGFzcyBBYnN0cmFjdE1lbWJlck92ZXJyaWRpbmdJbXBsZW1lbnRhdGlvbiBleHRlbmRzIERlbGF5ZWRNZW1iZXIgewogIEFic3RyYWN0TWVtYmVyT3ZlcnJpZGluZ0ltcGxlbWVudGF0aW9uKAogICAgICBDbGFzc0J1aWxkZXIgcGFyZW50LAogICAgICBCdWlsZGVyIGFic3RyYWN0TWVtYmVyLAogICAgICBCdWlsZGVyIGNvbmNyZXRlSW1wbGVtZW50YXRpb24sCiAgICAgIGJvb2wgaXNTZXR0ZXIsCiAgICAgIGJvb2wgbW9kaWZ5S2VybmVsKQogICAgICA6IHN1cGVyKHBhcmVudCwgPEJ1aWxkZXI+W2NvbmNyZXRlSW1wbGVtZW50YXRpb24sIGFic3RyYWN0TWVtYmVyXSwKICAgICAgICAgICAgaXNTZXR0ZXIsIG1vZGlmeUtlcm5lbCk7CgogIEJ1aWxkZXIgZ2V0IGNvbmNyZXRlSW1wbGVtZW50YXRpb24gPT4gZGVjbGFyYXRpb25zWzBdOwoKICBCdWlsZGVyIGdldCBhYnN0cmFjdE1lbWJlciA9PiBkZWNsYXJhdGlvbnNbMV07CgogIE1lbWJlciBjaGVjayhDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgaGllcmFyY2h5KSB7CiAgICBpZiAoIXBhcmVudC5pc0Fic3RyYWN0ICYmICFoaWVyYXJjaHkubm9kZXNbcGFyZW50LmNsc10uaGFzTm9TdWNoTWV0aG9kKSB7CiAgICAgIG5ldyBEZWxheWVkT3ZlcnJpZGVDaGVjayhwYXJlbnQsIGNvbmNyZXRlSW1wbGVtZW50YXRpb24sIGFic3RyYWN0TWVtYmVyKQogICAgICAgICAgLmNoZWNrKGhpZXJhcmNoeSk7CiAgICB9CgogICAgUHJvY2VkdXJlS2luZCBraW5kID0gUHJvY2VkdXJlS2luZC5NZXRob2Q7CiAgICBpZiAoYWJzdHJhY3RNZW1iZXIuaXNTZXR0ZXIgfHwgYWJzdHJhY3RNZW1iZXIuaXNHZXR0ZXIpIHsKICAgICAga2luZCA9IGlzU2V0dGVyID8gUHJvY2VkdXJlS2luZC5TZXR0ZXIgOiBQcm9jZWR1cmVLaW5kLkdldHRlcjsKICAgIH0KICAgIGlmIChtb2RpZnlLZXJuZWwpIHsKICAgICAgLy8gVGhpcyBjYWxsIHdpbGwgYWRkIGEgYm9keSB0byB0aGUgYWJzdHJhY3QgbWV0aG9kIGlmIG5lZWRlZCBmb3IKICAgICAgLy8gaXNHZW5lcmljQ292YXJpYW50SW1wbCBjaGVja3MuCiAgICAgIG5ldyBGb3J3YXJkaW5nTm9kZShoaWVyYXJjaHksIHBhcmVudCwgYWJzdHJhY3RNZW1iZXIsIGRlY2xhcmF0aW9ucywga2luZCkKICAgICAgICAgIC5maW5hbGl6ZSgpOwogICAgfQogICAgcmV0dXJuIGFic3RyYWN0TWVtYmVyLnRhcmdldDsKICB9CgogIEBvdmVycmlkZQogIERlbGF5ZWRNZW1iZXIgd2l0aFBhcmVudChDbGFzc0J1aWxkZXIgcGFyZW50KSB7CiAgICByZXR1cm4gcGFyZW50ID09IHRoaXMucGFyZW50CiAgICAgICAgPyB0aGlzCiAgICAgICAgOiBuZXcgQWJzdHJhY3RNZW1iZXJPdmVycmlkaW5nSW1wbGVtZW50YXRpb24ocGFyZW50LCBhYnN0cmFjdE1lbWJlciwKICAgICAgICAgICAgY29uY3JldGVJbXBsZW1lbnRhdGlvbiwgaXNTZXR0ZXIsIG1vZGlmeUtlcm5lbCk7CiAgfQoKICBzdGF0aWMgQnVpbGRlciBzZWxlY3RBYnN0cmFjdChCdWlsZGVyIGRlY2xhcmF0aW9uKSB7CiAgICBpZiAoZGVjbGFyYXRpb24gaXMgQWJzdHJhY3RNZW1iZXJPdmVycmlkaW5nSW1wbGVtZW50YXRpb24pIHsKICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uLmFic3RyYWN0TWVtYmVyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uOwogICAgfQogIH0KCiAgc3RhdGljIEJ1aWxkZXIgc2VsZWN0Q29uY3JldGUoQnVpbGRlciBkZWNsYXJhdGlvbikgewogICAgaWYgKGRlY2xhcmF0aW9uIGlzIEFic3RyYWN0TWVtYmVyT3ZlcnJpZGluZ0ltcGxlbWVudGF0aW9uKSB7CiAgICAgIHJldHVybiBkZWNsYXJhdGlvbi5jb25jcmV0ZUltcGxlbWVudGF0aW9uOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uOwogICAgfQogIH0KfQoKdm9pZCBhZGREZWNsYXJhdGlvbklmRGlmZmVyZW50KAogICAgQnVpbGRlciBkZWNsYXJhdGlvbiwgTGlzdDxCdWlsZGVyPiBkZWNsYXJhdGlvbnMpIHsKICBNZW1iZXIgdGFyZ2V0ID0gZGVjbGFyYXRpb24udGFyZ2V0OwogIGlmICh0YXJnZXQgaXMgUHJvY2VkdXJlKSB7CiAgICBGdW5jdGlvbk5vZGUgZnVuY3Rpb24gPSB0YXJnZXQuZnVuY3Rpb247CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlY2xhcmF0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICBNZW1iZXIgb3RoZXIgPSBkZWNsYXJhdGlvbnNbaV0udGFyZ2V0OwogICAgICBpZiAob3RoZXIgaXMgUHJvY2VkdXJlKSB7CiAgICAgICAgaWYgKGhhc1NhbWVTaWduYXR1cmUoZnVuY3Rpb24sIG90aGVyLmZ1bmN0aW9uKSkgcmV0dXJuOwogICAgICB9CiAgICB9CiAgfSBlbHNlIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVjbGFyYXRpb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChkZWNsYXJhdGlvbiA9PSBkZWNsYXJhdGlvbnNbaV0pIHJldHVybjsKICAgIH0KICB9CiAgZGVjbGFyYXRpb25zLmFkZChkZWNsYXJhdGlvbik7Cn0KClN0cmluZyBmdWxsTmFtZShCdWlsZGVyIGRlY2xhcmF0aW9uKSB7CiAgU3RyaW5nIHN1ZmZpeCA9IGRlY2xhcmF0aW9uLmlzU2V0dGVyID8gIj0iIDogIiI7CiAgaWYgKGRlY2xhcmF0aW9uIGlzIERlbGF5ZWRNZW1iZXIpIHsKICAgIHJldHVybiAiJHtkZWNsYXJhdGlvbi5mdWxsTmFtZUZvckVycm9yc30kc3VmZml4IjsKICB9CiAgQnVpbGRlciBwYXJlbnQgPSBkZWNsYXJhdGlvbi5wYXJlbnQ7CiAgcmV0dXJuIHBhcmVudCA9PSBudWxsCiAgICAgID8gIiR7ZGVjbGFyYXRpb24uZnVsbE5hbWVGb3JFcnJvcnN9JHN1ZmZpeCIKICAgICAgOiAiJHtwYXJlbnQuZnVsbE5hbWVGb3JFcnJvcnN9LiR7ZGVjbGFyYXRpb24uZnVsbE5hbWVGb3JFcnJvcnN9JHN1ZmZpeCI7Cn0KCmludCBjb21wYXJlTmFtZWRQYXJhbWV0ZXJzKFZhcmlhYmxlRGVjbGFyYXRpb24gYSwgVmFyaWFibGVEZWNsYXJhdGlvbiBiKSB7CiAgcmV0dXJuIGEubmFtZS5jb21wYXJlVG8oYi5uYW1lKTsKfQoKYm9vbCBpc0Fic3RyYWN0KEJ1aWxkZXIgZGVjbGFyYXRpb24pIHsKICByZXR1cm4gZGVjbGFyYXRpb24udGFyZ2V0LmlzQWJzdHJhY3QgfHwgZGVjbGFyYXRpb24gaXMgSW50ZXJmYWNlQ29uZmxpY3Q7Cn0KCmJvb2wgaW5mZXJQYXJhbWV0ZXJUeXBlKAogICAgQ2xhc3NCdWlsZGVyIGNscywKICAgIFByb2NlZHVyZUJ1aWxkZXIgbWVtYmVyLAogICAgRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBwYXJhbWV0ZXIsCiAgICBEYXJ0VHlwZSB0eXBlLAogICAgYm9vbCBoYWRUeXBlc0luZmVycmVkLAogICAgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGhpZXJhcmNoeSkgewogIGRlYnVnPy5sb2coIkluZmVycmVkIHR5cGUgJHt0eXBlfSBmb3IgJHtwYXJhbWV0ZXJ9Iik7CiAgaWYgKHR5cGUgPT0gcGFyYW1ldGVyLnRhcmdldC50eXBlKSByZXR1cm4gdHJ1ZTsKICBib29sIHJlc3VsdCA9IHRydWU7CiAgaWYgKGhhZFR5cGVzSW5mZXJyZWQpIHsKICAgIHJlcG9ydENhbnRJbmZlclBhcmFtZXRlclR5cGUoY2xzLCBtZW1iZXIsIHBhcmFtZXRlciwgaGllcmFyY2h5KTsKICAgIHR5cGUgPSBjb25zdCBJbnZhbGlkVHlwZSgpOwogICAgcmVzdWx0ID0gZmFsc2U7CiAgfQogIHBhcmFtZXRlci50YXJnZXQudHlwZSA9IHR5cGU7CiAgbWVtYmVyLmhhZFR5cGVzSW5mZXJyZWQgPSB0cnVlOwogIHJldHVybiByZXN1bHQ7Cn0KCnZvaWQgcmVwb3J0Q2FudEluZmVyUGFyYW1ldGVyVHlwZShDbGFzc0J1aWxkZXIgY2xzLCBNZW1iZXJCdWlsZGVyIG1lbWJlciwKICAgIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgcGFyYW1ldGVyLCBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgaGllcmFyY2h5KSB7CiAgU3RyaW5nIG5hbWUgPSBwYXJhbWV0ZXIubmFtZTsKICBjbHMuYWRkUHJvYmxlbSgKICAgICAgdGVtcGxhdGVDYW50SW5mZXJUeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXMud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgcGFyYW1ldGVyLmNoYXJPZmZzZXQsCiAgICAgIG5hbWUubGVuZ3RoLAogICAgICB3YXNIYW5kbGVkOiB0cnVlKTsKfQoKYm9vbCBpbmZlclJldHVyblR5cGUoQ2xhc3NCdWlsZGVyIGNscywgUHJvY2VkdXJlQnVpbGRlciBwcm9jZWR1cmVCdWlsZGVyLAogICAgRGFydFR5cGUgdHlwZSwgYm9vbCBoYWRUeXBlc0luZmVycmVkLCBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgaGllcmFyY2h5KSB7CiAgaWYgKHR5cGUgPT0gcHJvY2VkdXJlQnVpbGRlci5wcm9jZWR1cmUuZnVuY3Rpb24ucmV0dXJuVHlwZSkgcmV0dXJuIHRydWU7CiAgYm9vbCByZXN1bHQgPSB0cnVlOwogIGlmIChoYWRUeXBlc0luZmVycmVkKSB7CiAgICByZXBvcnRDYW50SW5mZXJSZXR1cm5UeXBlKGNscywgcHJvY2VkdXJlQnVpbGRlciwgaGllcmFyY2h5KTsKICAgIHR5cGUgPSBjb25zdCBJbnZhbGlkVHlwZSgpOwogICAgcmVzdWx0ID0gZmFsc2U7CiAgfSBlbHNlIHsKICAgIHByb2NlZHVyZUJ1aWxkZXIuaGFkVHlwZXNJbmZlcnJlZCA9IHRydWU7CiAgfQogIHByb2NlZHVyZUJ1aWxkZXIucHJvY2VkdXJlLmZ1bmN0aW9uLnJldHVyblR5cGUgPSB0eXBlOwogIHJldHVybiByZXN1bHQ7Cn0KCnZvaWQgcmVwb3J0Q2FudEluZmVyUmV0dXJuVHlwZSgKICAgIENsYXNzQnVpbGRlciBjbHMsIE1lbWJlckJ1aWxkZXIgbWVtYmVyLCBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgaGllcmFyY2h5KSB7CiAgU3RyaW5nIG5hbWUgPSBtZW1iZXIuZnVsbE5hbWVGb3JFcnJvcnM7CiAgTGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dDsKICAvLyAvLyBUT0RPKGFoZSk6IFRoZSBmb2xsb3dpbmcgaXMgZm9yIGRlYnVnZ2luZywgYnV0IGNvdWxkIGJlIGNsZWFuZWQgdXAgYW5kCiAgLy8gLy8gdXNlZCB0byBpbXByb3ZlIHRoaXMgZXJyb3IgbWVzc2FnZSBpbiBnZW5lcmFsLgogIC8vCiAgLy8gY29udGV4dCA9IDxMb2NhdGVkTWVzc2FnZT5bXTsKICAvLyBDbGFzc0hpZXJhcmNoeU5vZGUgc3VwZXJub2RlID0gaGllcmFyY2h5LmdldE5vZGVGcm9tVHlwZShjbHMuc3VwZXJ0eXBlKTsKICAvLyAvLyBUT0RPKGFoZSk6IFdyb25nIHRlbXBsYXRlLgogIC8vIFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nKT4gdGVtcGxhdGUgPQogIC8vICAgICB0ZW1wbGF0ZU1pc3NpbmdJbXBsZW1lbnRhdGlvbkNhdXNlOwogIC8vIGlmIChzdXBlcm5vZGUgIT0gbnVsbCkgewogIC8vICAgRGVjbGFyYXRpb24gc3VwZXJNZW1iZXIgPQogIC8vICAgICAgIHN1cGVybm9kZS5nZXRJbnRlcmZhY2VNZW1iZXIobmV3IE5hbWUobmFtZSksIGZhbHNlKTsKICAvLyAgIGlmIChzdXBlck1lbWJlciAhPSBudWxsKSB7CiAgLy8gICAgIGNvbnRleHQuYWRkKHRlbXBsYXRlCiAgLy8gICAgICAgICAud2l0aEFyZ3VtZW50cyhuYW1lKQogIC8vICAgICAgICAgLndpdGhMb2NhdGlvbigKICAvLyAgICAgICAgICAgICBzdXBlck1lbWJlci5maWxlVXJpLCBzdXBlck1lbWJlci5jaGFyT2Zmc2V0LCBuYW1lLmxlbmd0aCkpOwogIC8vICAgfQogIC8vICAgc3VwZXJNZW1iZXIgPSBzdXBlcm5vZGUuZ2V0SW50ZXJmYWNlTWVtYmVyKG5ldyBOYW1lKG5hbWUpLCB0cnVlKTsKICAvLyAgIGlmIChzdXBlck1lbWJlciAhPSBudWxsKSB7CiAgLy8gICAgIGNvbnRleHQuYWRkKHRlbXBsYXRlCiAgLy8gICAgICAgICAud2l0aEFyZ3VtZW50cyhuYW1lKQogIC8vICAgICAgICAgLndpdGhMb2NhdGlvbigKICAvLyAgICAgICAgICAgICBzdXBlck1lbWJlci5maWxlVXJpLCBzdXBlck1lbWJlci5jaGFyT2Zmc2V0LCBuYW1lLmxlbmd0aCkpOwogIC8vICAgfQogIC8vIH0KICAvLyBMaXN0PFR5cGVCdWlsZGVyPiBkaXJlY3RJbnRlcmZhY2VzID0gY2xzLmludGVyZmFjZXM7CiAgLy8gZm9yIChpbnQgaSA9IDA7IGkgPCBkaXJlY3RJbnRlcmZhY2VzLmxlbmd0aDsgaSsrKSB7CiAgLy8gICBDbGFzc0hpZXJhcmNoeU5vZGUgc3VwZXJub2RlID0KICAvLyAgICAgICBoaWVyYXJjaHkuZ2V0Tm9kZUZyb21UeXBlKGRpcmVjdEludGVyZmFjZXNbaV0pOwogIC8vICAgaWYgKHN1cGVybm9kZSAhPSBudWxsKSB7CiAgLy8gICAgIERlY2xhcmF0aW9uIHN1cGVyTWVtYmVyID0KICAvLyAgICAgICAgIHN1cGVybm9kZS5nZXRJbnRlcmZhY2VNZW1iZXIobmV3IE5hbWUobmFtZSksIGZhbHNlKTsKICAvLyAgICAgaWYgKHN1cGVyTWVtYmVyICE9IG51bGwpIHsKICAvLyAgICAgICBjb250ZXh0LmFkZCh0ZW1wbGF0ZQogIC8vICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhuYW1lKQogIC8vICAgICAgICAgICAud2l0aExvY2F0aW9uKAogIC8vICAgICAgICAgICAgICAgc3VwZXJNZW1iZXIuZmlsZVVyaSwgc3VwZXJNZW1iZXIuY2hhck9mZnNldCwgbmFtZS5sZW5ndGgpKTsKICAvLyAgICAgfQogIC8vICAgICBzdXBlck1lbWJlciA9IHN1cGVybm9kZS5nZXRJbnRlcmZhY2VNZW1iZXIobmV3IE5hbWUobmFtZSksIHRydWUpOwogIC8vICAgICBpZiAoc3VwZXJNZW1iZXIgIT0gbnVsbCkgewogIC8vICAgICAgIGNvbnRleHQuYWRkKHRlbXBsYXRlCiAgLy8gICAgICAgICAgIC53aXRoQXJndW1lbnRzKG5hbWUpCiAgLy8gICAgICAgICAgIC53aXRoTG9jYXRpb24oCiAgLy8gICAgICAgICAgICAgICBzdXBlck1lbWJlci5maWxlVXJpLCBzdXBlck1lbWJlci5jaGFyT2Zmc2V0LCBuYW1lLmxlbmd0aCkpOwogIC8vICAgICB9CiAgLy8gICB9CiAgLy8gfQogIGNscy5hZGRQcm9ibGVtKAogICAgICB0ZW1wbGF0ZUNhbnRJbmZlclJldHVyblR5cGVEdWVUb0luY29uc2lzdGVudE92ZXJyaWRlcy53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICBtZW1iZXIuY2hhck9mZnNldCwKICAgICAgbmFtZS5sZW5ndGgsCiAgICAgIHdhc0hhbmRsZWQ6IHRydWUsCiAgICAgIGNvbnRleHQ6IGNvbnRleHQpOwp9Cgp2b2lkIHJlcG9ydENhbnRJbmZlckZpZWxkVHlwZShDbGFzc0J1aWxkZXIgY2xzLCBGaWVsZEJ1aWxkZXIgbWVtYmVyKSB7CiAgU3RyaW5nIG5hbWUgPSBtZW1iZXIuZnVsbE5hbWVGb3JFcnJvcnM7CiAgY2xzLmFkZFByb2JsZW0oCiAgICAgIHRlbXBsYXRlQ2FudEluZmVyVHlwZUR1ZVRvSW5jb25zaXN0ZW50T3ZlcnJpZGVzLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgIG1lbWJlci5jaGFyT2Zmc2V0LAogICAgICBuYW1lLmxlbmd0aCwKICAgICAgd2FzSGFuZGxlZDogdHJ1ZSk7Cn0KCkNsYXNzQnVpbGRlciBnZXRDbGFzcyhUeXBlQnVpbGRlciB0eXBlKSB7CiAgQnVpbGRlciBkZWNsYXJhdGlvbiA9IHR5cGUuZGVjbGFyYXRpb247CiAgcmV0dXJuIGRlY2xhcmF0aW9uIGlzIENsYXNzQnVpbGRlciA/IGRlY2xhcmF0aW9uIDogbnVsbDsKfQoKYm9vbCBoYXNFeHBsaWNpdFJldHVyblR5cGUoQnVpbGRlciBkZWNsYXJhdGlvbikgewogIGFzc2VydChkZWNsYXJhdGlvbiBpcyBQcm9jZWR1cmVCdWlsZGVyIHx8IGRlY2xhcmF0aW9uIGlzIERpbGxNZW1iZXJCdWlsZGVyLAogICAgICAiJHtkZWNsYXJhdGlvbi5ydW50aW1lVHlwZX0iKTsKICByZXR1cm4gZGVjbGFyYXRpb24gaXMgUHJvY2VkdXJlQnVpbGRlcgogICAgICA/IGRlY2xhcmF0aW9uLnJldHVyblR5cGUgIT0gbnVsbAogICAgICA6IHRydWU7Cn0KCmJvb2wgaGFzRXhwbGljaXRseVR5cGVkRm9ybWFsUGFyYW1ldGVyKEJ1aWxkZXIgZGVjbGFyYXRpb24sIGludCBpbmRleCkgewogIGFzc2VydChkZWNsYXJhdGlvbiBpcyBQcm9jZWR1cmVCdWlsZGVyIHx8IGRlY2xhcmF0aW9uIGlzIERpbGxNZW1iZXJCdWlsZGVyLAogICAgICAiJHtkZWNsYXJhdGlvbi5ydW50aW1lVHlwZX0iKTsKICByZXR1cm4gZGVjbGFyYXRpb24gaXMgUHJvY2VkdXJlQnVpbGRlcgogICAgICA/IGRlY2xh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b250X2VuZC9zcmMvZmFzdGEva2VybmVsL2NsYXNzX2hpZXJhcmNoeV9idWlsZGVyLmRhcnRIc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3R5cGVfaW5mZXJlbmNlL3N0YW5kYXJkX2JvdW5kcy5kYXJ0wABI0C8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UubWQgZmlsZS4KCmltcG9ydCAnZGFydDptYXRoJyBhcyBtYXRoOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBCb3R0b21UeXBlLAogICAgICAgIENsYXNzLAogICAgICAgIERhcnRUeXBlLAogICAgICAgIER5bmFtaWNUeXBlLAogICAgICAgIEZ1bmN0aW9uVHlwZSwKICAgICAgICBJbnRlcmZhY2VUeXBlLAogICAgICAgIEludmFsaWRUeXBlLAogICAgICAgIE5hbWVkVHlwZSwKICAgICAgICBUeXBlUGFyYW1ldGVyVHlwZSwKICAgICAgICBWb2lkVHlwZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnIHNob3cgU3Vic3RpdHV0aW9uOwoKaW1wb3J0ICd0eXBlX3NjaGVtYS5kYXJ0JyBzaG93IFVua25vd25UeXBlOwoKYWJzdHJhY3QgY2xhc3MgU3RhbmRhcmRCb3VuZHMgewogIENsYXNzIGdldCBmdW5jdGlvbkNsYXNzOwogIENsYXNzIGdldCBmdXR1cmVDbGFzczsKICBDbGFzcyBnZXQgZnV0dXJlT3JDbGFzczsKICBJbnRlcmZhY2VUeXBlIGdldCBudWxsVHlwZTsKICBJbnRlcmZhY2VUeXBlIGdldCBvYmplY3RUeXBlOwogIEludGVyZmFjZVR5cGUgZ2V0IHJhd0Z1bmN0aW9uVHlwZTsKCiAgYm9vbCBpc1N1YnR5cGVPZihEYXJ0VHlwZSBzdWJ0eXBlLCBEYXJ0VHlwZSBzdXBlcnR5cGUpOwoKICBJbnRlcmZhY2VUeXBlIGdldExlZ2FjeUxlYXN0VXBwZXJCb3VuZCgKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlMSwgSW50ZXJmYWNlVHlwZSB0eXBlMik7CgogIC8vLyBDb21wdXRlcyB0aGUgc3RhbmRhcmQgbG93ZXIgYm91bmQgb2YgW3R5cGUxXSBhbmQgW3R5cGUyXS4KICAvLy8KICAvLy8gU3RhbmRhcmQgbG93ZXIgYm91bmQgaXMgYSBsb3dlciBib3VuZCBmdW5jdGlvbiB0aGF0IGltcG9zZXMgYW4KICAvLy8gb3JkZXJpbmcgb24gdGhlIHRvcCB0eXBlcyBgdm9pZGAsIGBkeW5hbWljYCwgYW5kIGBvYmplY3RgLiAgVGhpcyBmdW5jdGlvbgogIC8vLyBhZGRpdGlvbmFsbHkgaGFuZGxlcyB0aGUgdW5rbm93biB0eXBlIHRoYXQgYXBwZWFycyBkdXJpbmcgdHlwZSBpbmZlcmVuY2UuCiAgRGFydFR5cGUgZ2V0U3RhbmRhcmRMb3dlckJvdW5kKERhcnRUeXBlIHR5cGUxLCBEYXJ0VHlwZSB0eXBlMikgewogICAgLy8gRm9yIGFsbCB0eXBlcyBULCBTTEIoVCxUKSA9IFQuICBOb3RlIHRoYXQgd2UgZG9uJ3QgdGVzdCBmb3IgZXF1YWxpdHkKICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBtYWtlIHRoZSBhbGdvcml0aG0gcXVhZHJhdGljLiAgVGhpcyBpcyBvawogICAgLy8gYmVjYXVzZSB0aGUgY2hlY2sgaXMgbm90IG5lZWRlZCBmb3IgY29ycmVjdG5lc3M7IGl0J3MganVzdCBhIHNwZWVkCiAgICAvLyBvcHRpbWl6YXRpb24uCiAgICBpZiAoaWRlbnRpY2FsKHR5cGUxLCB0eXBlMikpIHsKICAgICAgcmV0dXJuIHR5cGUxOwogICAgfQoKICAgIC8vIEZvciBhbnkgdHlwZSBULCBTTEIoPywgVCkgPSBTTEIoVCwgPykgPSBULgogICAgaWYgKHR5cGUxIGlzIFVua25vd25UeXBlKSB7CiAgICAgIHJldHVybiB0eXBlMjsKICAgIH0KICAgIGlmICh0eXBlMiBpcyBVbmtub3duVHlwZSkgewogICAgICByZXR1cm4gdHlwZTE7CiAgICB9CgogICAgLy8gU0xCKHZvaWQsIFQpID0gU0xCKFQsIHZvaWQpID0gVC4KICAgIGlmICh0eXBlMSBpcyBWb2lkVHlwZSkgewogICAgICByZXR1cm4gdHlwZTI7CiAgICB9CiAgICBpZiAodHlwZTIgaXMgVm9pZFR5cGUpIHsKICAgICAgcmV0dXJuIHR5cGUxOwogICAgfQoKICAgIC8vIFNMQihkeW5hbWljLCBUKSA9IFNMQihULCBkeW5hbWljKSA9IFQgaWYgVCBpcyBub3Qgdm9pZC4KICAgIGlmICh0eXBlMSBpcyBEeW5hbWljVHlwZSkgewogICAgICByZXR1cm4gdHlwZTI7CiAgICB9CiAgICBpZiAodHlwZTIgaXMgRHluYW1pY1R5cGUpIHsKICAgICAgcmV0dXJuIHR5cGUxOwogICAgfQoKICAgIC8vIFNMQihPYmplY3QsIFQpID0gU0xCKFQsIE9iamVjdCkgPSBUIGlmIFQgaXMgbm90IHZvaWQgb3IgZHluYW1pYy4KICAgIGlmICh0eXBlMSA9PSBvYmplY3RUeXBlKSB7CiAgICAgIHJldHVybiB0eXBlMjsKICAgIH0KICAgIGlmICh0eXBlMiA9PSBvYmplY3RUeXBlKSB7CiAgICAgIHJldHVybiB0eXBlMTsKICAgIH0KCiAgICAvLyBTTEIoYm90dG9tLCBUKSA9IFNMQihULCBib3R0b20pID0gYm90dG9tLgogICAgaWYgKHR5cGUxIGlzIEJvdHRvbVR5cGUpIHJldHVybiB0eXBlMTsKICAgIGlmICh0eXBlMiBpcyBCb3R0b21UeXBlKSByZXR1cm4gdHlwZTI7CiAgICBpZiAodHlwZTEgPT0gbnVsbFR5cGUpIHJldHVybiB0eXBlMTsKICAgIGlmICh0eXBlMiA9PSBudWxsVHlwZSkgcmV0dXJuIHR5cGUyOwoKICAgIC8vIEZ1bmN0aW9uIHR5cGVzIGhhdmUgc3RydWN0dXJhbCBsb3dlciBib3VuZHMuCiAgICBpZiAodHlwZTEgaXMgRnVuY3Rpb25UeXBlICYmIHR5cGUyIGlzIEZ1bmN0aW9uVHlwZSkgewogICAgICByZXR1cm4gX2Z1bmN0aW9uU3RhbmRhcmRMb3dlckJvdW5kKHR5cGUxLCB0eXBlMik7CiAgICB9CgogICAgLy8gT3RoZXJ3aXNlLCB0aGUgbG93ZXIgYm91bmRzICBvZiB0d28gdHlwZXMgaXMgb25lIG9mIHRoZW0gaXQgaWYgaXQgaXMgYQogICAgLy8gc3VidHlwZSBvZiB0aGUgb3RoZXIuCiAgICBpZiAoaXNTdWJ0eXBlT2YodHlwZTEsIHR5cGUyKSkgewogICAgICByZXR1cm4gdHlwZTE7CiAgICB9CgogICAgaWYgKGlzU3VidHlwZU9mKHR5cGUyLCB0eXBlMSkpIHsKICAgICAgcmV0dXJuIHR5cGUyOwogICAgfQoKICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMzc0MzkjaXNzdWVjb21tZW50LTUxOTY1NDk1OS4KICAgIGlmICh0eXBlMSBpcyBJbnRlcmZhY2VUeXBlICYmIHR5cGUxLmNsYXNzTm9kZSA9PSBmdXR1cmVPckNsYXNzKSB7CiAgICAgIGlmICh0eXBlMiBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgaWYgKHR5cGUyLmNsYXNzTm9kZSA9PSBmdXR1cmVPckNsYXNzKSB7CiAgICAgICAgICAvLyBHTEIoRnV0dXJlT3I8QT4sIEZ1dHVyZU9yPEI+KSA9PSBGdXR1cmVPcjxHTEIoQSwgQik+CiAgICAgICAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUoZnV0dXJlT3JDbGFzcywgPERhcnRUeXBlPlsKICAgICAgICAgICAgZ2V0U3RhbmRhcmRMb3dlckJvdW5kKAogICAgICAgICAgICAgICAgdHlwZTEudHlwZUFyZ3VtZW50c1swXSwgdHlwZTIudHlwZUFyZ3VtZW50c1swXSkKICAgICAgICAgIF0pOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZTIuY2xhc3NOb2RlID09IGZ1dHVyZUNsYXNzKSB7CiAgICAgICAgICAvLyBHTEIoRnV0dXJlT3I8QT4sIEZ1dHVyZTxCPikgPT0gRnV0dXJlPEdMQihBLCBCKT4KICAgICAgICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVHlwZShmdXR1cmVDbGFzcywgPERhcnRUeXBlPlsKICAgICAgICAgICAgZ2V0U3RhbmRhcmRMb3dlckJvdW5kKAogICAgICAgICAgICAgICAgdHlwZTEudHlwZUFyZ3VtZW50c1swXSwgdHlwZTIudHlwZUFyZ3VtZW50c1swXSkKICAgICAgICAgIF0pOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyBHTEIoRnV0dXJlT3I8QT4sIEIpID09IEdMQihBLCBCKQogICAgICByZXR1cm4gZ2V0U3RhbmRhcmRMb3dlckJvdW5kKHR5cGUxLnR5cGVBcmd1bWVudHNbMF0sIHR5cGUyKTsKICAgIH0KICAgIC8vIFRoZSBpZi1zdGF0ZW1lbnQgYmVsb3cgaGFuZGxlcyB0aGUgZm9sbG93aW5nIHJ1bGU6CiAgICAvLyAgICAgR0xCKEEsIEZ1dHVyZU9yPEI+KSA9PSAgR0xCKEZ1dHVyZU9yPEI+LCBBKQogICAgLy8gSXQncyBicm9rZW4gZG93biBpbnRvIHN1Yi1jYXNlcyBpbnN0ZWFkIG9mIG1ha2luZyBhIHJlY3Vyc2l2ZSBjYWxsIHRvCiAgICAvLyBhdm9pZCBtYWtpbmcgdGhlIGNoZWNrcyB0aGF0IHdlcmUgYWxyZWFkeSBtYWRlIGFib3ZlLiAgTm90ZSB0aGF0IGF0IHRoaXMKICAgIC8vIHBvaW50IGl0J3Mgbm90IHBvc3NpYmxlIGZvciB0eXBlMSB0byBiZSBhIEZ1dHVyZU9yLgogICAgaWYgKHR5cGUyIGlzIEludGVyZmFjZVR5cGUgJiYgdHlwZTIuY2xhc3NOb2RlID09IGZ1dHVyZU9yQ2xhc3MpIHsKICAgICAgaWYgKHR5cGUxIGlzIEludGVyZmFjZVR5cGUgJiYgdHlwZTEuY2xhc3NOb2RlID09IGZ1dHVyZUNsYXNzKSB7CiAgICAgICAgLy8gR0xCKEZ1dHVyZTxBPiwgRnV0dXJlT3I8Qj4pID09IEZ1dHVyZTxHTEIoQiwgQSk+CiAgICAgICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlKGZ1dHVyZUNsYXNzLCA8RGFydFR5cGU+WwogICAgICAgICAgZ2V0U3RhbmRhcmRMb3dlckJvdW5kKHR5cGUyLnR5cGVBcmd1bWVudHNbMF0sIHR5cGUxLnR5cGVBcmd1bWVudHNbMF0pCiAgICAgICAgXSk7CiAgICAgIH0KICAgICAgLy8gR0xCKEEsIEZ1dHVyZU9yPEI+KSA9PSBHTEIoQiwgQSkKICAgICAgcmV0dXJuIGdldFN0YW5kYXJkTG93ZXJCb3VuZCh0eXBlMi50eXBlQXJndW1lbnRzWzBdLCB0eXBlMSk7CiAgICB9CgogICAgLy8gTm8gc3VidHlwZSByZWxhdGlvbiwgc28gdGhlIGxvd2VyIGJvdW5kIGlzIGJvdHRvbS4KICAgIHJldHVybiBjb25zdCBCb3R0b21UeXBlKCk7CiAgfQoKICAvLy8gQ29tcHV0ZXMgdGhlIHN0YW5kYXJkIHVwcGVyIGJvdW5kIG9mIHR3byB0eXBlcy4KICAvLy8KICAvLy8gU3RhbmRhcmQgdXBwZXIgYm91bmQgaXMgYW4gdXBwZXIgYm91bmQgZnVuY3Rpb24gdGhhdCBpbXBvc2VzIGFuIG9yZGVyaW5nCiAgLy8vIG9uIHRoZSB0b3AgdHlwZXMgJ3ZvaWQnLCAnZHluYW1pYycsIGFuZCBgb2JqZWN0YC4gIFRoaXMgZnVuY3Rpb24KICAvLy8gYWRkaXRpb25hbGx5IGhhbmRsZXMgdGhlIHVua25vd24gdHlwZSB0aGF0IGFwcGVhcnMgZHVyaW5nIHR5cGUgaW5mZXJlbmNlLgogIERhcnRUeXBlIGdldFN0YW5kYXJkVXBwZXJCb3VuZChEYXJ0VHlwZSB0eXBlMSwgRGFydFR5cGUgdHlwZTIpIHsKICAgIC8vIEZvciBhbGwgdHlwZXMgVCwgU1VCKFQsVCkgPSBULiAgTm90ZSB0aGF0IHdlIGRvbid0IHRlc3QgZm9yIGVxdWFsaXR5CiAgICAvLyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gbWFrZSB0aGUgYWxnb3JpdGhtIHF1YWRyYXRpYy4gIFRoaXMgaXMgb2sKICAgIC8vIGJlY2F1c2UgdGhlIGNoZWNrIGlzIG5vdCBuZWVkZWQgZm9yIGNvcnJlY3RuZXNzOyBpdCdzIGp1c3QgYSBzcGVlZAogICAgLy8gb3B0aW1pemF0aW9uLgogICAgaWYgKGlkZW50aWNhbCh0eXBlMSwgdHlwZTIpKSB7CiAgICAgIHJldHVybiB0eXBlMTsKICAgIH0KCiAgICAvLyBGb3IgYW55IHR5cGUgVCwgU1VCKD8sIFQpID0gU1VCKFQsID8pID0gVC4KICAgIGlmICh0eXBlMSBpcyBVbmtub3duVHlwZSkgewogICAgICByZXR1cm4gdHlwZTI7CiAgICB9CiAgICBpZiAodHlwZTIgaXMgVW5rbm93blR5cGUpIHsKICAgICAgcmV0dXJuIHR5cGUxOwogICAgfQoKICAgIC8vIFNVQih2b2lkLCBUKSA9IFNVQihULCB2b2lkKSA9IHZvaWQuCiAgICBpZiAodHlwZTEgaXMgVm9pZFR5cGUpIHsKICAgICAgcmV0dXJuIHR5cGUxOwogICAgfQogICAgaWYgKHR5cGUyIGlzIFZvaWRUeXBlKSB7CiAgICAgIHJldHVybiB0eXBlMjsKICAgIH0KCiAgICAvLyBTVUIoZHluYW1pYywgVCkgPSBTVUIoVCwgZHluYW1pYykgPSBkeW5hbWljIGlmIFQgaXMgbm90IHZvaWQuCiAgICBpZiAodHlwZTEgaXMgRHluYW1pY1R5cGUpIHsKICAgICAgcmV0dXJuIHR5cGUxOwogICAgfQogICAgaWYgKHR5cGUyIGlzIER5bmFtaWNUeXBlKSB7CiAgICAgIHJldHVybiB0eXBlMjsKICAgIH0KCiAgICAvLyBTVUIoT2JqZWN0LCBUKSA9IFNVQihULCBPYmplY3QpID0gT2JqZWN0IGlmIFQgaXMgbm90IHZvaWQgb3IgZHluYW1pYy4KICAgIGlmICh0eXBlMSA9PSBvYmplY3RUeXBlKSB7CiAgICAgIHJldHVybiB0eXBlMTsKICAgIH0KICAgIGlmICh0eXBlMiA9PSBvYmplY3RUeXBlKSB7CiAgICAgIHJldHVybiB0eXBlMjsKICAgIH0KCiAgICAvLyBTVUIoYm90dG9tLCBUKSA9IFNVQihULCBib3R0b20pID0gVC4KICAgIGlmICh0eXBlMSBpcyBCb3R0b21UeXBlKSByZXR1cm4gdHlwZTI7CiAgICBpZiAodHlwZTIgaXMgQm90dG9tVHlwZSkgcmV0dXJuIHR5cGUxOwogICAgaWYgKHR5cGUxID09IG51bGxUeXBlKSByZXR1cm4gdHlwZTI7CiAgICBpZiAodHlwZTIgPT0gbnVsbFR5cGUpIHJldHVybiB0eXBlMTsKCiAgICBpZiAodHlwZTEgaXMgVHlwZVBhcmFtZXRlclR5cGUgfHwgdHlwZTIgaXMgVHlwZVBhcmFtZXRlclR5cGUpIHsKICAgICAgcmV0dXJuIF90eXBlUGFyYW1ldGVyU3RhbmRhcmRVcHBlckJvdW5kKHR5cGUxLCB0eXBlMik7CiAgICB9CgogICAgLy8gVGhlIHN0YW5kYXJkIHVwcGVyIGJvdW5kIG9mIGEgZnVuY3Rpb24gdHlwZSBhbmQgYW4gaW50ZXJmYWNlIHR5cGUgVCBpcwogICAgLy8gdGhlIHN0YW5kYXJkIHVwcGVyIGJvdW5kIG9mIEZ1bmN0aW9uIGFuZCBULgogICAgaWYgKHR5cGUxIGlzIEZ1bmN0aW9uVHlwZSAmJiB0eXBlMiBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgIHR5cGUxID0gcmF3RnVuY3Rpb25UeXBlOwogICAgfQogICAgaWYgKHR5cGUyIGlzIEZ1bmN0aW9uVHlwZSAmJiB0eXBlMSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgIHR5cGUyID0gcmF3RnVuY3Rpb25UeXBlOwogICAgfQoKICAgIC8vIEF0IHRoaXMgcG9pbnQgdHlwZTEgYW5kIHR5cGUyIHNob3VsZCBib3RoIGVpdGhlciBiZSBpbnRlcmZhY2UgdHlwZXMgb3IKICAgIC8vIGZ1bmN0aW9uIHR5cGVzLgogICAgaWYgKHR5cGUxIGlzIEludGVyZmFjZVR5cGUgJiYgdHlwZTIgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICByZXR1cm4gX2ludGVyZmFjZVN0YW5kYXJkVXBwZXJCb3VuZCh0eXBlMSwgdHlwZTIpOwogICAgfQoKICAgIGlmICh0eXBlMSBpcyBGdW5jdGlvblR5cGUgJiYgdHlwZTIgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICAgIHJldHVybiBfZnVuY3Rpb25TdGFuZGFyZFVwcGVyQm91bmQodHlwZTEsIHR5cGUyKTsKICAgIH0KCiAgICBpZiAodHlwZTEgaXMgSW52YWxpZFR5cGUgfHwgdHlwZTIgaXMgSW52YWxpZFR5cGUpIHsKICAgICAgcmV0dXJuIGNvbnN0IEludmFsaWRUeXBlKCk7CiAgICB9CgogICAgLy8gU2hvdWxkIG5ldmVyIGhhcHBlbi4gQXMgYSBkZWZlbnNpdmUgbWVhc3VyZSwgcmV0dXJuIHRoZSBkeW5hbWljIHR5cGUuCiAgICBhc3NlcnQoZmFsc2UsICJ0eXBlMSA9ICR0eXBlMTsgdHlwZTIgPSAkdHlwZTIiKTsKICAgIHJldHVybiBjb25zdCBEeW5hbWljVHlwZSgpOwogIH0KCiAgLy8vIENvbXB1dGUgdGhlIHN0YW5kYXJkIGxvd2VyIGJvdW5kIG9mIGZ1bmN0aW9uIHR5cGVzIFtmXSBhbmQgW2ddLgogIC8vLwogIC8vLyBUaGUgc3BlYyBydWxlcyBmb3IgU0xCIG9uIGZ1bmN0aW9uIHR5cGVzLCBpbmZvcm1hbGx5LCBhcmUgcHJldHR5IHNpbXBsZToKICAvLy8KICAvLy8gLSBJZiBhIHBhcmFtZXRlciBpcyByZXF1aXJlZCBpbiBib3RoLCBpdCBzdGF5cyByZXF1aXJlZC4KICAvLy8KICAvLy8gLSBJZiBhIHBvc2l0aW9uYWwgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIG9yIG1pc3NpbmcgaW4gb25lLCBpdCBiZWNvbWVzCiAgLy8vICAgb3B0aW9uYWwuICAoVGhpcyBpcyBiZWNhdXNlIHdlJ3JlIHRyeWluZyB0byBidWlsZCBhIGZ1bmN0aW9uIHR5cGUgd2hpY2gKICAvLy8gICBpcyBhIHN1YnR5cGUgb2YgYm90aCBbZl0gYW5kIFtnXSwgbWVhbmluZyBpdCBhY2NlcHRzIGFsbCBwb3NzaWJsZSBpbnB1dHMKICAvLy8gICB0aGF0IFtmXSBhbmQgW2ddIGFjY2VwdC4pCiAgLy8vCiAgLy8vIC0gTmFtZWQgcGFyYW1ldGVycyBhcmUgdW5pb25lZCB0b2dldGhlci4KICAvLy8KICAvLy8gLSBGb3IgYW55IHBhcmFtZXRlciB0aGF0IGV4aXN0cyBpbiBib3RoIGZ1bmN0aW9ucywgdXNlIHRoZSBTVUIgb2YgdGhlbSBhcwogIC8vLyAgIHRoZSByZXN1bHRpbmcgcGFyYW1ldGVyIHR5cGUuCiAgLy8vCiAgLy8vIC0gVXNlIHRoZSBTTEIgb2YgdGhlaXIgcmV0dXJuIHR5cGVzLgogIERhcnRUeXBlIF9mdW5jdGlvblN0YW5kYXJkTG93ZXJCb3VuZChGdW5jdGlvblR5cGUgZiwgRnVuY3Rpb25UeXBlIGcpIHsKICAgIC8vIFRPRE8ocm55c3Ryb20scGF1bGJlcnJ5KTogUmlnaHQgbm93LCB0aGlzIGFzc3VtZXMgZiBhbmQgZyBkbyBub3QgaGF2ZSBhbnkKICAgIC8vIHR5cGUgcGFyYW1ldGVycy4gUmV2aXNpdCB0aGF0IGluIHRoZSBwcmVzZW5jZSBvZiBnZW5lcmljIG1ldGhvZHMuCgogICAgLy8gQ2FsY3VsYXRlIHRoZSBTVUIgb2YgZWFjaCBjb3JyZXNwb25kaW5nIHBhaXIgb2YgcGFyYW1ldGVycy4KICAgIGludCB0b3RhbFBvc2l0aW9uYWwgPQogICAgICAgIG1hdGgubWF4KGYucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoLCBnLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCk7CiAgICBMaXN0PERhcnRUeXBlPiBwb3NpdGlvbmFsUGFyYW1ldGVycyA9IG5ldyBMaXN0PERhcnRUeXBlPih0b3RhbFBvc2l0aW9uYWwpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbFBvc2l0aW9uYWw7IGkrKykgewogICAgICBpZiAoaSA8IGYucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoKSB7CiAgICAgICAgRGFydFR5cGUgZlR5cGUgPSBmLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldOwogICAgICAgIGlmIChpIDwgZy5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgICAgIERhcnRUeXBlIGdUeXBlID0gZy5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXTsKICAgICAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldID0gZ2V0U3RhbmRhcmRVcHBlckJvdW5kKGZUeXBlLCBnVHlwZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldID0gZlR5cGU7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldID0gZy5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXTsKICAgICAgfQogICAgfQoKICAgIC8vIFBhcmFtZXRlcnMgdGhhdCBhcmUgcmVxdWlyZWQgaW4gYm90aCBmdW5jdGlvbnMgYXJlIHJlcXVpcmVkIGluIHRoZQogICAgLy8gcmVzdWx0LiAgUGFyYW1ldGVycyB0aGF0IGFyZSBvcHRpb25hbCBvciBtaXNzaW5nIGluIGVpdGhlciBlbmQgdXAKICAgIC8vIG9wdGlvbmFsLgogICAgaW50IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPQogICAgICAgIG1hdGgubWluKGYucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwgZy5yZXF1aXJlZFBhcmFtZXRlckNvdW50KTsKICAgIGJvb2wgaGFzUG9zaXRpb25hbCA9IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPCB0b3RhbFBvc2l0aW9uYWw7CgogICAgLy8gVW5pb24gdGhlIG5hbWVkIHBhcmFtZXRlcnMgdG9nZXRoZXIuCiAgICBMaXN0PE5hbWVkVHlwZT4gbmFtZWRQYXJhbWV0ZXJzID0gW107CiAgICB7CiAgICAgIGludCBpID0gMDsKICAgICAgaW50IGogPSAwOwogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIGlmIChpIDwgZi5uYW1lZFBhcmFtZXRlcnMubGVuZ3RoKSB7CiAgICAgICAgICBpZiAoaiA8IGcubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICAgICAgICBTdHJpbmcgZk5hbWUgPSBmLm5hbWVkUGFyYW1ldGVyc1tpXS5uYW1lOwogICAgICAgICAgICBTdHJpbmcgZ05hbWUgPSBnLm5hbWVkUGFyYW1ldGVyc1tqXS5uYW1lOwogICAgICAgICAgICBpbnQgb3JkZXIgPSBmTmFtZS5jb21wYXJlVG8oZ05hbWUpOwogICAgICAgICAgICBpZiAob3JkZXIgPCAwKSB7CiAgICAgICAgICAgICAgbmFtZWRQYXJhbWV0ZXJzLmFkZChmLm5hbWVkUGFyYW1ldGVyc1tpKytdKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChvcmRlciA+IDApIHsKICAgICAgICAgICAgICBuYW1lZFBhcmFtZXRlcnMuYWRkKGcubmFtZWRQYXJhbWV0ZXJzW2orK10pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIG5hbWVkUGFyYW1ldGVycy5hZGQobmV3IE5hbWVkVHlwZSgKICAgICAgICAgICAgICAgICAgZk5hbWUsCiAgICAgICAgICAgICAgICAgIGdldFN0YW5kYXJkVXBwZXJCb3VuZChmLm5hbWVkUGFyYW1ldGVyc1tpKytdLnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICBnLm5hbWVkUGFyYW1ldGVyc1tqKytdLnR5cGUpKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG5hbWVkUGFyYW1ldGVycy5hZGRBbGwoZi5uYW1lZFBhcmFtZXRlcnMuc2tpcChpKSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBuYW1lZFBhcmFtZXRlcnMuYWRkQWxsKGcubmFtZWRQYXJhbWV0ZXJzLnNraXAoaikpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBib29sIGhhc05hbWVkID0gbmFtZWRQYXJhbWV0ZXJzLmlzTm90RW1wdHk7CgogICAgLy8gRWRnZSBjYXNlLiBEYXJ0IGRvZXMgbm90IHN1cHBvcnQgZnVuY3Rpb25zIHdpdGggYm90aCBvcHRpb25hbCBwb3NpdGlvbmFsCiAgICAvLyBhbmQgbmFtZWQgcGFyYW1ldGVycy4gSWYgd2Ugd291bGQgc3ludGhlc2l6ZSB0aGF0LCBnaXZlIHVwLgogICAgaWYgKGhhc1Bvc2l0aW9uYWwgJiYgaGFzTmFtZWQpIHJldHVybiBjb25zdCBCb3R0b21UeXBlKCk7CgogICAgLy8gQ2FsY3VsYXRlIHRoZSBTTEIgb2YgdGhlIHJldHVybiB0eXBlLgogICAgRGFydFR5cGUgcmV0dXJuVHlwZSA9IGdldFN0YW5kYXJkTG93ZXJCb3VuZChmLnJldHVyblR5cGUsIGcucmV0dXJuVHlwZSk7CiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uVHlwZShwb3NpdGlvbmFsUGFyYW1ldGVycywgcmV0dXJuVHlwZSwKICAgICAgICBuYW1lZFBhcmFtZXRlcnM6IG5hbWVkUGFyYW1ldGVycywKICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50OiByZXF1aXJlZFBhcmFtZXRlckNvdW50KTsKICB9CgogIC8vLyBDb21wdXRlIHRoZSBzdGFuZGFyZCB1cHBlciBib3VuZCBvZiBmdW5jdGlvbiB0eXBlcyBbZl0gYW5kIFtnXS4KICAvLy8KICAvLy8gVGhlIHJ1bGVzIGZvciBTVUIgb24gZnVuY3Rpb24gdHlwZXMsIGluZm9ybWFsbHksIGFyZSBwcmV0dHkgc2ltcGxlOgogIC8vLwogIC8vLyAtIElmIHRoZSBmdW5jdGlvbnMgZG9uJ3QgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgcmVxdWlyZWQgcGFyYW1ldGVycywKICAvLy8gICBhbHdheXMgcmV0dXJuIGBGdW5jdGlvbmAuCiAgLy8vCiAgLy8vIC0gRGlzY2FyZCBhbnkgb3B0aW9uYWwgbmFtZWQgb3IgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHRoZSB0d28gdHlwZXMgZG8gbm90CiAgLy8vICAgaGF2ZSBpbiBjb21tb24uCiAgLy8vCiAgLy8vIC0gQ29tcHV0ZSB0aGUgU0xCIG9mIGVhY2ggY29ycmVzcG9uZGluZyBwYWlyIG9mIHBhcmFtZXRlciB0eXBlcywgYW5kIHRoZQogIC8vLyAgIFNVQiBvZiB0aGUgcmV0dXJuIHR5cGVzLiAgUmV0dXJuIGEgZnVuY3Rpb24gdHlwZSB3aXRoIHRob3NlIHR5cGVzLgogIERhcnRUeXBlIF9mdW5jdGlvblN0YW5kYXJkVXBwZXJCb3VuZChGdW5jdGlvblR5cGUgZiwgRnVuY3Rpb25UeXBlIGcpIHsKICAgIC8vIFRPRE8ocm55c3Ryb20pOiBSaWdodCBub3csIHRoaXMgYXNzdW1lcyBmIGFuZCBnIGRvIG5vdCBoYXZlIGFueSB0eXBlCiAgICAvLyBwYXJhbWV0ZXJzLiBSZXZpc2l0IHRoYXQgaW4gdGhlIHByZXNlbmNlIG9mIGdlbmVyaWMgbWV0aG9kcy4KCiAgICAvLyBJZiBGIGFuZCBHIGRpZmZlciBpbiB0aGVpciBudW1iZXIgb2YgcmVxdWlyZWQgcGFyYW1ldGVycywgdGhlbiB0aGUKICAgIC8vIHN0YW5kYXJkIHVwcGVyIGJvdW5kIG9mIEYgYW5kIEcgaXMgRnVuY3Rpb24uCiAgICAvLyBUT0RPKHBhdWxiZXJyeSk6IFdlIGNvdWxkIGRvIGJldHRlciBoZXJlLCBlLmcuOgogICAgLy8gICBTVUIoKFtpbnRdKSAtPiB2b2lkLCAoaW50KSAtPiB2b2lkKSA9IChpbnQpIC0+IHZvaWQKICAgIGlmIChmLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQgIT0gZy5yZXF1aXJlZFBhcmFtZXRlckNvdW50KSB7CiAgICAgIHJldHVybiBmdW5jdGlvbkNsYXNzLnJhd1R5cGU7CiAgICB9CiAgICBpbnQgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA9IGYucmVxdWlyZWRQYXJhbWV0ZXJDb3VudDsKCiAgICAvLyBDYWxjdWxhdGUgdGhlIFNMQiBvZiBlYWNoIGNvcnJlc3BvbmRpbmcgcGFpciBvZiBwYXJhbWV0ZXJzLgogICAgLy8gSWdub3JlIGFueSBleHRyYSBvcHRpb25hbCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgaWYgb25lIGhhcyBtb3JlIHRoYW4gdGhlCiAgICAvLyBvdGhlci4KICAgIGludCB0b3RhbFBvc2l0aW9uYWwgPQogICAgICAgIG1hdGgubWluKGYucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoLCBnLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCk7CiAgICBMaXN0PERhcnRUeXBlPiBwb3NpdGlvbmFsUGFyYW1ldGVycyA9IG5ldyBMaXN0PERhcnRUeXBlPih0b3RhbFBvc2l0aW9uYWwpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbFBvc2l0aW9uYWw7IGkrKykgewogICAgICBwb3NpdGlvbmFsUGFyYW1ldGVyc1tpXSA9IGdldFN0YW5kYXJkTG93ZXJCb3VuZCgKICAgICAgICAgIGYucG9zaXRpb25hbFBhcmFtZXRlcnNbaV0sIGcucG9zaXRpb25hbFBhcmFtZXRlcnNbaV0pOwogICAgfQoKICAgIC8vIEludGVyc2VjdCB0aGUgbmFtZWQgcGFyYW1ldGVycy4KICAgIExpc3Q8TmFtZWRUeXBlPiBuYW1lZFBhcmFtZXRlcnMgPSBbXTsKICAgIHsKICAgICAgaW50IGkgPSAwOwogICAgICBpbnQgaiA9IDA7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgaWYgKGkgPCBmLm5hbWVkUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgICAgIGlmIChqIDwgZy5uYW1lZFBhcmFtZXRlcnMubGVuZ3RoKSB7CiAgICAgICAgICAgIFN0cmluZyBmTmFtZSA9IGYubmFtZWRQYXJhbWV0ZXJzW2ldLm5hbWU7CiAgICAgICAgICAgIFN0cmluZyBnTmFtZSA9IGcubmFtZWRQYXJhbWV0ZXJzW2pdLm5hbWU7CiAgICAgICAgICAgIGludCBvcmRlciA9IGZOYW1lLmNvbXBhcmVUbyhnTmFtZSk7CiAgICAgICAgICAgIGlmIChvcmRlciA8IDApIHsKICAgICAgICAgICAgICBpKys7CiAgICAgICAgICAgIH0gZWxzZSBpZiAob3JkZXIgPiAwKSB7CiAgICAgICAgICAgICAgaisrOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIG5hbWVkUGFyYW1ldGVycy5hZGQobmV3IE5hbWVkVHlwZSgKICAgICAgICAgICAgICAgICAgZk5hbWUsCiAgICAgICAgICAgICAgICAgIGdldFN0YW5kYXJkTG93ZXJCb3VuZChmLm5hbWVkUGFyYW1ldGVyc1tpKytdLnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICBnLm5hbWVkUGFyYW1ldGVyc1tqKytdLnR5cGUpKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBDYWxjdWxhdGUgdGhlIFNVQiBvZiB0aGUgcmV0dXJuIHR5cGUuCiAgICBEYXJ0VHlwZSByZXR1cm5UeXBlID0gZ2V0U3RhbmRhcmRVcHBlckJvdW5kKGYucmV0dXJuVHlwZSwgZy5yZXR1cm5UeXBlKTsKICAgIHJldHVybiBuZXcgRnVuY3Rpb25UeXBlKHBvc2l0aW9uYWxQYXJhbWV0ZXJzLCByZXR1cm5UeXBlLAogICAgICAgIG5hbWVkUGFyYW1ldGVyczogbmFtZWRQYXJhbWV0ZXJzLAogICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ6IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQpOwogIH0KCiAgRGFydFR5cGUgX2ludGVyZmFjZVN0YW5kYXJkVXBwZXJCb3VuZCgKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlMSwgSW50ZXJmYWNlVHlwZSB0eXBlMikgewogICAgLy8gVGhpcyBjdXJyZW50bHkgZG9lcyBub3QgaW1wbGVtZW50IGEgdmVyeSBjb21wbGV0ZSBzdGFuZGFyZCB1cHBlciBib3VuZAogICAgLy8gYWxnb3JpdGhtLCBidXQgaGFuZGxlcyBhIGNvdXBsZSBvZiB0aGUgdmVyeSBjb21tb24gY2FzZXMgdGhhdCBhcmUKICAgIC8vIGNhdXNpbmcgcGFpbiBpbiByZWFsIGNvZGUuICBUaGUgY3VycmVudCBhbGdvcml0aG0gaXM6CiAgICAvLyAxLiBJZiBlaXRoZXIgb2YgdGhlIHR5cGVzIGlzIGEgc3VwZXJ0eXBlIG9mIHRoZSBvdGhlciwgcmV0dXJuIGl0LgogICAgLy8gICAgVGhpcyBpcyBpbiBmYWN0IHRoZSBiZXN0IHJlc3VsdCBpbiB0aGlzIGNhc2UuCiAgICAvLyAyLiBJZiB0aGUgdHdvIHR5cGVzIGhhdmUgdGhlIHNhbWUgY2xhc3MgZWxlbWVudCwgdGhlbiB0YWtlIHRoZQogICAgLy8gICAgcG9pbnR3aXNlIHN0YW5kYXJkIHVwcGVyIGJvdW5kIG9mIHRoZSB0eXBlIGFyZ3VtZW50cy4gIFRoaXMgaXMgYWdhaW4KICAgIC8vICAgIHRoZSBiZXN0IHJlc3VsdCwgZXhjZXB0IHRoYXQgdGhlIHJlY3Vyc2l2ZSBjYWxscyBtYXkgbm90IHJldHVybgogICAgLy8gICAgdGhlIHRydWUgc3RhbmRhcmQgdXBwZXIgYm91bmRzLiAgVGhlIHJlc3VsdCBpcyBndWFyYW50ZWVkIHRvIGJlIGEKICAgIC8vICAgIHdlbGwtZm9ybWVkIHR5cGUgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgaW5wdXQgdHlwZXMgd2VyZQogICAgLy8gICAgd2VsbC1mb3JtZWQgKGFuZCBhc3N1bWluZyB0aGF0IHRoZSByZWN1cnNpdmUgY2FsbHMgcmV0dXJuCiAgICAvLyAgICB3ZWxsLWZvcm1lZCB0eXBlcykuCiAgICAvLyAzLiBPdGhlcndpc2UgcmV0dXJuIHRoZSBzcGVjLWRlZmluZWQgc3RhbmRhcmQgdXBwZXIgYm91bmQuICBUaGlzIHdpbGwKICAgIC8vICAgIGJlIGFuIHVwcGVyIGJvdW5kLCBtaWdodCAob3IgbWlnaHQgbm90KSBiZSBsZWFzdCwgYW5kIG1pZ2h0CiAgICAvLyAgICAob3IgbWlnaHQgbm90KSBiZSBhIHdlbGwtZm9ybWVkIHR5cGUuCiAgICBpZiAoaXNTdWJ0eXBlT2YodHlwZTEsIHR5cGUyKSkgewogICAgICByZXR1cm4gdHlwZTI7CiAgICB9CiAgICBpZiAoaXNTdWJ0eXBlT2YodHlwZTIsIHR5cGUxKSkgewogICAgICByZXR1cm4gdHlwZTE7CiAgICB9CiAgICBpZiAodHlwZTEgaXMgSW50ZXJmYWNlVHlwZSAmJgogICAgICAgIHR5cGUyIGlzIEludGVyZmFjZVR5cGUgJiYKICAgICAgICBpZGVudGljYWwodHlwZTEuY2xhc3NOb2RlLCB0eXBlMi5jbGFzc05vZGUpKSB7CiAgICAgIExpc3Q8RGFydFR5cGU+IHRBcmdzMSA9IHR5cGUxLnR5cGVBcmd1bWVudHM7CiAgICAgIExpc3Q8RGFydFR5cGU+IHRBcmdzMiA9IHR5cGUyLnR5cGVBcmd1bWVudHM7CgogICAgICBhc3NlcnQodEFyZ3MxLmxlbmd0aCA9PSB0QXJnczIubGVuZ3RoKTsKICAgICAgTGlzdDxEYXJ0VHlwZT4gdEFyZ3MgPSBuZXcgTGlzdCh0QXJnczEubGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0QXJnczEubGVuZ3RoOyBpKyspIHsKICAgICAgICB0QXJnc1tpXSA9IGdldFN0YW5kYXJkVXBwZXJCb3VuZCh0QXJnczFbaV0sIHRBcmdzMltpXSk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlKHR5cGUxLmNsYXNzTm9kZSwgdEFyZ3MpOwogICAgfQogICAgcmV0dXJuIGdldExlZ2FjeUxlYXN0VXBwZXJCb3VuZCh0eXBlMSwgdHlwZTIpOwogIH0KCiAgRGFydFR5cGUgX3R5cGVQYXJhbWV0ZXJTdGFuZGFyZFVwcGVyQm91bmQoRGFydFR5cGUgdHlwZTEsIERhcnRUeXBlIHR5cGUyKSB7CiAgICAvLyBUaGlzIGN1cnJlbnRseSBqdXN0IGltcGxlbWVudHMgYSBzaW1wbGUgc3RhbmRhcmQgdXBwZXIgYm91bmQgdG8KICAgIC8vIGhhbmRsZSBzb21lIGNvbW1vbiBjYXNlcy4gIEl0IGFsc28gYXZvaWRzIHNvbWUgdGVybWluYXRpb24gaXNzdWVzCiAgICAvLyB3aXRoIHRoZSBuYWl2ZSBzcGVjIGFsZ29yaXRobS4gIFRoZSBzdGFuZGFyZCB1cHBlciBib3VuZCBvZiB0d28gdHlwZXMKICAgIC8vIChhdCBsZWFzdCBvbmUgb2Ygd2hpY2ggaXMgYSB0eXBlIHBhcmFtZXRlcikgaXMgY29tcHV0ZWQgaGVyZSBhczoKICAgIC8vIDEuIElmIGVpdGhlciB0eXBlIGlzIGEgc3VwZXJ0eXBlIG9mIHRoZSBvdGhlciwgcmV0dXJuIGl0LgogICAgLy8gMi4gSWYgdGhlIGZpcnN0IHR5cGUgaXMgYSB0eXBlIHBhcmFtZXRlciwgcmVwbGFjZSBpdCB3aXRoIGl0cyBib3VuZCwKICAgIC8vICAgIHdpdGggcmVjdXJzaXZlIG9jY3VycmVuY2VzIG9mIGl0c2VsZiByZXBsYWNlZCB3aXRoIE9iamVjdC4KICAgIC8vICAgIFRoZSBzZWNvbmQgcGFydCBvZiB0aGlzIHNob3VsZCBlbnN1cmUgdGVybWluYXRpb24uICBJbmZvcm1hbGx5LAogICAgLy8gICAgZWFjaCB0eXBlIHZhcmlhYmxlIGluc3RhbnRpYXRpb24gaW4gb25lIG9mIHRoZSBhcmd1bWVudHMgdG8gdGhlCiAgICAvLyAgICBzdGFuZGFyZCB1cHBlciBib3VuZCBhbGdvcml0aG0gbm93IHN0cmljdGx5IHJlZHVjZXMgdGhlIG51bWJlcgogICAgLy8gICAgb2YgYm91bmQgdmFyaWFibGVzIGluIHNjb3BlIGluIHRoYXQgYXJndW1lbnQgcG9zaXRpb24uCiAgICAvLyAzLiBJZiB0aGUgc2Vjb25kIHR5cGUgaXMgYSB0eXBlIHBhcmFtZXRlciwgZG8gdGhlIHN5bW1ldHJpYyBvcGVyYXRpb24KICAgIC8vICAgIHRvICMyLgogICAgLy8KICAgIC8vIEl0J3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgd2h5IHRoaXMgaXMgc3ltbWV0cmljIGluIHRoZSBjYXNlIHRoYXQgYm90aAogICAgLy8gb2YgdGhlbSBhcmUgdHlwZSBwYXJhbWV0ZXJzLiAgRm9yICMxLCBzeW1tZXRyeSBob2xkcyBzaW5jZSBzdWJ0eXBlCiAgICAvLyBpcyBhbnRpc3ltbWV0cmljLiAgRm9yICMyLCBpdCdzIGNsZWFybHkgbm90IHN5bW1ldHJpYyBpZiB1cHBlciBib3VuZHMgb2YKICAgIC8vIGJvdHRvbSBhcmUgYWxsb3dlZC4gIElnbm9yaW5nIHRoaXMgKGZvciB2YXJpb3VzIHJlYXNvbnMsIG5vdCBsZWFzdAogICAgLy8gb2Ygd2hpY2ggdGhhdCB0aGVyZSdzIG5vIHdheSB0byB3cml0ZSBpdCksIHRoZXJlJ3MgYW4gaW5mb3JtYWwKICAgIC8vIGFyZ3VtZW50ICh0aGF0IG1pZ2h0IGV2ZW4gYmUgcmlnaHQpIHRoYXQgeW91IHdpbGwgYWx3YXlzIGVpdGhlcgogICAgLy8gZW5kIHVwIGV4cGFuZGluZyBib3RoIG9mIHRoZW0gb3IgZWxzZSByZXR1cm5pbmcgdGhlIHNhbWUgcmVzdWx0IG5vIG1hdHRlcgogICAgLy8gd2hpY2ggb3JkZXIgeW91IGV4cGFuZCB0aGVtIGluLiAgQSBrZXkgb2JzZXJ2YXRpb24gaXMgdGhhdAogICAgLy8gaWRlbnRpY2FsKGV4cGFuZCh0eXBlMSksIHR5cGUyKSA9PiBzdWJ0eXBlKHR5cGUxLCB0eXBlMikKICAgIC8vIGFuZCBoZW5jZSB0aGUgY29udHJhLXBvc2l0aXZlLgogICAgLy8KICAgIC8vIFRPRE8obGVhZnApOiBUaGluayB0aGlzIHRocm91Z2ggYW5kIGZpZ3VyZSBvdXQgd2hhdCdzIHRoZSByaWdodAogICAgLy8gZGVmaW5pdGlvbi4gIEJlIGNhcmVmdWwgYWJvdXQgdGVybWluYXRpb24uCiAgICAvLwogICAgLy8gSSBzdXNwZWN0IGluIGdlbmVyYWwgYSByZWFzb25hYmxlIGFsZ29yaXRobSBpcyB0byBleHBhbmQgdGhlIGlubmVybW9zdAogICAgLy8gdHlwZSB2YXJpYWJsZSBmaXJzdC4gIEFsdGVybmF0aXZlbHksIHlvdSBjb3VsZCBwcm9iYWJseSBjaG9vc2UgdG8gdHJlYXQKICAgIC8vIGl0IGFzIGp1c3QgYW4gaW5zdGFuY2Ugb2YgdGhlIGludGVyZmFjZSB0eXBlIHVwcGVyIGJvdW5kIHByb2JsZW0sIHdpdGgKICAgIC8vIHRoZSAiaW5oZXJpdGFuY2UiIGNoYWluIGV4dGVuZGVkIGJ5IHRoZSBib3VuZHMgcGxhY2VkIG9uIHRoZSB2YXJpYWJsZXMuCiAgICBpZiAoaXNTdWJ0eXBlT2YodHlwZTEsIHR5cGUyKSkgewogICAgICByZXR1cm4gdHlwZTI7CiAgICB9CiAgICBpZiAoaXNTdWJ0eXBlT2YodHlwZTIsIHR5cGUxKSkgewogICAgICByZXR1cm4gdHlwZTE7CiAgICB9CiAgICBpZiAodHlwZTEgaXMgVHlwZVBhcmFtZXRlclR5cGUpIHsKICAgICAgLy8gVE9ETyhwYXVsYmVycnkpOiBBbmFseXplciBjb2xsYXBzZXMgc2ltcGxlIGJvdW5kcyBpbiBvbmUgc3RlcCwgaS5lLiBmb3IKICAgICAgLy8gQzxUIGV4dGVuZHMgVSwgVSBleHRlbmRzIExpc3Q+LCBUIGdldHMgcmVzb2x2ZWQgZGlyZWN0bHkgdG8gTGlzdC4gIERvCiAgICAgIC8vIHdlIG5lZWQgdG8gcmVwbGljYXRlIHRoYXQgYmVoYXZpb3I/CiAgICAgIHJldHVybiBnZXRTdGFuZGFyZFVwcGVyQm91bmQoCiAgICAgICAgICBTdWJzdGl0dXRpb24uZnJvbU1hcCh7dHlwZTEucGFyYW1ldGVyOiBvYmplY3RUeXBlfSkKICAgICAgICAgICAgICAuc3Vic3RpdHV0ZVR5cGUodHlwZTEucGFyYW1ldGVyLmJvdW5kKSwKICAgICAgICAgIHR5cGUyKTsKICAgIH0gZWxzZSBpZiAodHlwZTIgaXMgVHlwZVBhcmFtZXRlclR5cGUpIHsKICAgICAgcmV0dXJuIGdldFN0YW5kYXJkVXBwZXJCb3VuZCgKICAgICAgICAgIHR5cGUxLAogICAgICAgICAgU3Vic3RpdHV0aW9uLmZyb21NYXAoe3R5cGUyLnBhcmFtZXRlcjogb2JqZWN0VHlwZX0pCiAgICAgICAgICAgICAgLnN1YnN0aXR1dGVUeXBlKHR5cGUyLnBhcmFtZXRlci5ib3VuZCkpOwogICAgfSBlbHNlIHsKICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gYXQgbGVhc3Qgb25lIG9mIHRoZSB0eXBlcyBpcyBhCiAgICAgIC8vIFR5cGVQYXJhbWV0ZXJUeXBlCiAgICAgIGFzc2VydChmYWxzZSk7CiAgICAgIHJldHVybiBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgfQogIH0KfQqB7ABNTj8BHAEhCRQPEhUWFxUTGxIBPQEsASAbGRseICUBOgEqMQFABkVQUENMSkoVIxQGATIgFAYgFAYBKB0UBh0UBgE/IBQGIBQGAUgfFAYfFAYBMSsrKSkBNDo4BgFOHSUUBgElFAYBUUYkMEI+I0AOCi4+PCNADgoIKkMGOjdNUDtGRjw6UAwIKkMGATofBAE2Bk9HUENMSkoVIxQGATIgFAYgFAYBKx0UBh0UBgFFIBQGIBQGAU0fFAYfFAYBLCsrKSkBRD0GAU4zOx8GOx8GAU4XPDkGATo4BgE4IgYBTTUgBAFGBk8GPwZMUFEiBi8GUCYGK0lRSQFDGlBPMC80MTZJESsKDz0IBgFKSREhRkMBLCoGEREVLC42NjAdOyQ7FTEZRTYOEz8TDBE9EQoIBjABUEM+AS1NPio5BAFGBkoGTCIGURgGT0tJTEQBSjQ3PUAkBjsBQ1AOGlBPMDdBBgEnKgYRERUsLjY2MB0TJBMVMRlFNg4TEwwREQoIBgEtTT4qOQQBKTJOST1JOEZPSkxKRB5NRjAlFAYlFAYiIjczMwEuNjBACDgGMwQBTkdJTUhBTEVKSklBTREHUEpQSkZHUUJAJgdHMgdOT05PJRQGJRQGJlFPLSQ+NhItJBE+Nw1GGxUiBgQCAT9wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdHlwZV9pbmZlcmVuY2Uvc3RhbmRhcmRfYm91bmRzLmRhcnREc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC9pbXBsaWNpdF9maWVsZF90eXBlLmRhcnSESy8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmltcGxpY2l0X3R5cGU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdyBEYXJ0VHlwZSwgRGFydFR5cGVWaXNpdG9yLCBEYXJ0VHlwZVZpc2l0b3IxLCBWaXNpdG9yOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgdW5zdXBwb3J0ZWQ7CgppbXBvcnQgJ2tlcm5lbF9idWlsZGVyLmRhcnQnIHNob3cgTWVtYmVyQnVpbGRlcjsKCmNsYXNzIEltcGxpY2l0RmllbGRUeXBlIGV4dGVuZHMgRGFydFR5cGUgewogIGZpbmFsIE1lbWJlckJ1aWxkZXIgbWVtYmVyOwogIFRva2VuIGluaXRpYWxpemVyVG9rZW47CiAgYm9vbCBpc1N0YXJ0ZWQgPSBmYWxzZTsKCiAgZ2V0IG51bGxhYmlsaXR5ID0+CiAgICAgIHVuc3VwcG9ydGVkKCJudWxsYWJpbGl0eSIsIG1lbWJlci5jaGFyT2Zmc2V0LCBtZW1iZXIuZmlsZVVyaSk7CgogIEltcGxpY2l0RmllbGRUeXBlKHRoaXMubWVtYmVyLCB0aGlzLmluaXRpYWxpemVyVG9rZW4pOwoKICBhY2NlcHQoRGFydFR5cGVWaXNpdG9yPE9iamVjdD4gdikgewogICAgdW5zdXBwb3J0ZWQoImFjY2VwdCIsIG1lbWJlci5jaGFyT2Zmc2V0LCBtZW1iZXIuZmlsZVVyaSk7CiAgfQoKICBhY2NlcHQxKERhcnRUeXBlVmlzaXRvcjE8T2JqZWN0LCBPYmplY3Q+IHYsIGFyZykgewogICAgdW5zdXBwb3J0ZWQoImFjY2VwdDEiLCBtZW1iZXIuY2hhck9mZnNldCwgbWVtYmVyLmZpbGVVcmkpOwogIH0KCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yPE9iamVjdD4gdikgewogICAgdW5zdXBwb3J0ZWQoInZpc2l0Q2hpbGRyZW4iLCBtZW1iZXIuY2hhck9mZnNldCwgbWVtYmVyLmZpbGVVcmkpOwogIH0KfQonAE5OPAEdASE/AS4BLAExASseGhoBFUUBOQEmPgQBNT8EASVFBAIBO3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvaW1wbGljaXRfZmllbGRfdHlwZS5kYXJ0SHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwva2VybmVsX3ZhcmlhYmxlX2J1aWxkZXIuZGFydINjLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEua2VybmVsX3ZhcmlhYmxlX2J1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IFZhcmlhYmxlRGVjbGFyYXRpb247CgppbXBvcnQgJ2tlcm5lbF9idWlsZGVyLmRhcnQnIHNob3cgQnVpbGRlcjsKCmNsYXNzIFZhcmlhYmxlQnVpbGRlciBleHRlbmRzIEJ1aWxkZXIgewogIEBvdmVycmlkZQogIGZpbmFsIEJ1aWxkZXIgcGFyZW50OwoKICBAb3ZlcnJpZGUKICBmaW5hbCBVcmkgZmlsZVVyaTsKCiAgZmluYWwgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZTsKCiAgVmFyaWFibGVCdWlsZGVyKHRoaXMudmFyaWFibGUsIHRoaXMucGFyZW50LCB0aGlzLmZpbGVVcmkpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGNoYXJPZmZzZXQgPT4gdmFyaWFibGUuZmlsZU9mZnNldDsKCiAgYm9vbCBnZXQgaXNMb2NhbCA9PiB0cnVlOwoKICBib29sIGdldCBpc0NvbnN0ID0+IHZhcmlhYmxlLmlzQ29uc3Q7CgogIGJvb2wgZ2V0IGlzRmluYWwgPT4gdmFyaWFibGUuaXNGaW5hbDsKCiAgVmFyaWFibGVEZWNsYXJhdGlvbiBnZXQgdGFyZ2V0ID0+IHZhcmlhYmxlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGZ1bGxOYW1lRm9yRXJyb3JzID0+IHZhcmlhYmxlLm5hbWUgPz8gIjx1bm5hbWVkPiI7Cn0KJQBOTjwBJwE7ASsBKAwYAQwVASYBPQEMLQEcASgBKAEuAQxAAgE/cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9rZXJuZWxfdmFyaWFibGVfYnVpbGRlci5kYXJ0RXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwvbG9hZF9saWJyYXJ5X2J1aWxkZXIuZGFydIhgLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQXJndW1lbnRzLAogICAgICAgIERhcnRUeXBlLAogICAgICAgIER5bmFtaWNUeXBlLAogICAgICAgIEZ1bmN0aW9uTm9kZSwKICAgICAgICBJbnRlcmZhY2VUeXBlLAogICAgICAgIExpYnJhcnlEZXBlbmRlbmN5LAogICAgICAgIExvYWRMaWJyYXJ5LAogICAgICAgIE1lbWJlciwKICAgICAgICBOYW1lLAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBQcm9jZWR1cmVLaW5kLAogICAgICAgIFJldHVyblN0YXRlbWVudDsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAna2VybmVsX2J1aWxkZXIuZGFydCcgc2hvdyBCdWlsZGVyOwoKaW1wb3J0ICdmb3Jlc3QuZGFydCcgc2hvdyBGb3Jlc3Q7CgovLy8gQnVpbGRlciB0byByZXByZXNlbnQgdGhlIGBkZWZlckxpYnJhcnkubG9hZExpYnJhcnlgIGNhbGxzIGFuZCB0ZWFyLW9mZnMuCmNsYXNzIExvYWRMaWJyYXJ5QnVpbGRlciBleHRlbmRzIEJ1aWxkZXIgewogIGZpbmFsIFNvdXJjZUxpYnJhcnlCdWlsZGVyIHBhcmVudDsKCiAgZmluYWwgTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0RGVwZW5kZW5jeTsKCiAgLy8vIE9mZnNldCBvZiB0aGUgaW1wb3J0IHByZWZpeC4KICBmaW5hbCBpbnQgY2hhck9mZnNldDsKCiAgLy8vIFN5bnRoZXRpYyBzdGF0aWMgbWV0aG9kIHRvIHJlcHJlc2VudCB0aGUgdGVhci1vZmYgb2YgJ2xvYWRMaWJyYXJ5Jy4gIElmCiAgLy8vIG51bGwsIG5vIHRlYXItb2ZmcyB3ZXJlIHNlZW4gaW4gdGhlIGNvZGUgYW5kIG5vIG1ldGhvZCBpcyBnZW5lcmF0ZWQuCiAgTWVtYmVyIHRlYXJvZmY7CgogIExvYWRMaWJyYXJ5QnVpbGRlcih0aGlzLnBhcmVudCwgdGhpcy5pbXBvcnREZXBlbmRlbmN5LCB0aGlzLmNoYXJPZmZzZXQpOwoKICBVcmkgZ2V0IGZpbGVVcmkgPT4gcGFyZW50LmZpbGVVcmk7CgogIExvYWRMaWJyYXJ5IGNyZWF0ZUxvYWRMaWJyYXJ5KAogICAgICBpbnQgY2hhck9mZnNldCwgRm9yZXN0IGZvcmVzdCwgQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIGZvcmVzdC5jcmVhdGVMb2FkTGlicmFyeShpbXBvcnREZXBlbmRlbmN5LCBhcmd1bWVudHMpCiAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgfQoKICBQcm9jZWR1cmUgY3JlYXRlVGVhcm9mZk1ldGhvZChGb3Jlc3QgZm9yZXN0KSB7CiAgICBpZiAodGVhcm9mZiAhPSBudWxsKSByZXR1cm4gdGVhcm9mZjsKICAgIExvYWRMaWJyYXJ5IGV4cHJlc3Npb24gPSBjcmVhdGVMb2FkTGlicmFyeShjaGFyT2Zmc2V0LCBmb3Jlc3QsIG51bGwpOwogICAgU3RyaW5nIHByZWZpeCA9IGV4cHJlc3Npb24uaW1wb3J0Lm5hbWU7CiAgICB0ZWFyb2ZmID0gbmV3IFByb2NlZHVyZSgKICAgICAgICBuZXcgTmFtZSgnX19sb2FkTGlicmFyeV8kcHJlZml4JywgcGFyZW50LmxpYnJhcnkpLAogICAgICAgIFByb2NlZHVyZUtpbmQuTWV0aG9kLAogICAgICAgIG5ldyBGdW5jdGlvbk5vZGUobmV3IFJldHVyblN0YXRlbWVudChleHByZXNzaW9uKSwKICAgICAgICAgICAgcmV0dXJuVHlwZTogbmV3IEludGVyZmFjZVR5cGUocGFyZW50LmxvYWRlci5jb3JlVHlwZXMuZnV0dXJlQ2xhc3MsCiAgICAgICAgICAgICAgICA8RGFydFR5cGU+W2NvbnN0IER5bmFtaWNUeXBlKCldKSksCiAgICAgICAgZmlsZVVyaTogcGFyZW50LmxpYnJhcnkuZmlsZVVyaSwKICAgICAgICBpc1N0YXRpYzogdHJ1ZSkKICAgICAgLi5zdGFydEZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0CiAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgICByZXR1cm4gdGVhcm9mZjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZnVsbE5hbWVGb3JFcnJvcnMgPT4gJ2xvYWRMaWJyYXJ5JzsKfQpGAE5OPAEhCRMSFRYXGxUQDhMXGQFKASsBIgFNKyUBLAEjGAFOSxIBSwElASE8QSEEATEpSiwdOx46TzMpGCUhFAQBDDECATxwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2xvYWRfbGlicmFyeV9idWlsZGVyLmRhcnQ/c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC91bmxpbmtlZF9zY29wZS5kYXJ0hFovLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdrZXJuZWxfYnVpbGRlci5kYXJ0JyBzaG93IEJ1aWxkZXIsIFNjb3BlOwoKLy8vIFNjb3BlIHRoYXQgcmV0dXJucyBhbiBbVW5saW5rZWREZWNsYXJhdGlvbl0gaWYgYSBuYW1lIGNhbid0IGJlIHJlc29sdmVkLgovLy8gVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIHRoZSBgZW5jbG9zaW5nU2NvcGVgIGluIGBCb2R5QnVpbGRlcmAgdG8KLy8vIGNyZWF0ZSBBU1RzIHdpdGggYnVpbGRpbmcgb3V0bGluZXMuCmNsYXNzIFVubGlua2VkU2NvcGUgZXh0ZW5kcyBTY29wZSB7CiAgVW5saW5rZWRTY29wZSgpIDogc3VwZXIudG9wKGlzTW9kaWZpYWJsZTogZmFsc2UpOwoKICBCdWlsZGVyIGxvb2t1cEluKFN0cmluZyBuYW1lLCBpbnQgY2hhck9mZnNldCwgVXJpIGZpbGVVcmksCiAgICAgIE1hcDxTdHJpbmcsIEJ1aWxkZXI+IG1hcCwgYm9vbCBpc0luc3RhbmNlU2NvcGUpIHsKICAgIHJldHVybiBuZXcgVW5saW5rZWREZWNsYXJhdGlvbihuYW1lLCBpc0luc3RhbmNlU2NvcGUsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogIH0KfQoKY2xhc3MgVW5saW5rZWREZWNsYXJhdGlvbiBleHRlbmRzIEJ1aWxkZXIgewogIGZpbmFsIFN0cmluZyBuYW1lOwoKICBmaW5hbCBib29sIGlzSW5zdGFuY2VTY29wZTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CgogIEBvdmVycmlkZQogIGZpbmFsIFVyaSBmaWxlVXJpOwoKICBVbmxpbmtlZERlY2xhcmF0aW9uKAogICAgICB0aGlzLm5hbWUsIHRoaXMuaXNJbnN0YW5jZVNjb3BlLCB0aGlzLmNoYXJPZmZzZXQsIHRoaXMuZmlsZVVyaSk7CgogIEBvdmVycmlkZQogIEJ1aWxkZXIgZ2V0IHBhcmVudCA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGZ1bGxOYW1lRm9yRXJyb3JzID0+IG5hbWU7Cn0KKABOTjwBMgFNTCgkNAE9OFAEAgEsFQEeAQwYAQwVARdHAQweAQwoAgE2cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC91bmxpbmtlZF9zY29wZS5kYXJ0OnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9yZXdyaXRlX3NldmVyaXR5LmRhcnSFHi8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3NldmVyaXR5LmRhcnQnIHNob3cgU2V2ZXJpdHk7CgppbXBvcnQgJ21lc3NhZ2VzLmRhcnQnIGFzIG1zZzsKClNldmVyaXR5IHJld3JpdGVTZXZlcml0eSgKICAgIFNldmVyaXR5IHNldmVyaXR5LCBtc2cuQ29kZTxPYmplY3Q+IGNvZGUsIFVyaSBmaWxlVXJpKSB7CiAgaWYgKHNldmVyaXR5ICE9IFNldmVyaXR5Lmlnbm9yZWQpIHsKICAgIHJldHVybiBzZXZlcml0eTsKICB9CgogIFN0cmluZyBwYXRoID0gZmlsZVVyaS5wYXRoOwogIFN0cmluZyBmYXN0YVBhdGggPSAiL3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS8iOwogIGludCBpbmRleCA9IHBhdGguaW5kZXhPZihmYXN0YVBhdGgpOwogIGlmIChpbmRleCA9PSAtMSkgewogICAgZmFzdGFQYXRoID0gIi9wa2cvZnJvbnRfZW5kL3Rvb2wvX2Zhc3RhLyI7CiAgICBpbmRleCA9IHBhdGguaW5kZXhPZihmYXN0YVBhdGgpOwogICAgaWYgKGluZGV4ID09IC0xKSByZXR1cm4gc2V2ZXJpdHk7CiAgfQogIGlmIChjb2RlID09IG1zZy5jb2RlVXNlT2ZEZXByZWNhdGVkSWRlbnRpZmllcikgewogICAgLy8gVE9ETyhhaGUpOiBSZW1vdmUgdGhlIGV4Y2VwdGlvbnMgYmVsb3cuCiAgICAvLyBXZSBwbGFuIHRvIHJlbW92ZSBhbGwgdXNlcyBvZiBkZXByZWNhdGVkIGlkZW50aWZpZXJzIGZyb20gRmFzdGEuIFRoZQogICAgLy8gc3RyYXRlZ3kgaXMgdG8gcmVtb3ZlIGZpbGVzIGZyb20gdGhlIGxpc3QgYmVsb3cgb25lIGJ5IG9uZS4gVG8gZ2V0CiAgICAvLyBzdGFydGVkIG9uIGNsZWFuaW5nIHVwIGEgZ2l2ZW4gZmlsZSwgc2ltcGx5IHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0CiAgICAvLyBiZWxvdyBhbmQgY29tcGlsZSBGYXN0YSB3aXRoIGl0c2VsZiB0byBnZXQgYSBsaXN0IG9mIHJlbWFpbmluZyBjYWxsCiAgICAvLyBzaXRlcy4KICAgIHN3aXRjaCAocGF0aC5zdWJzdHJpbmcoZmFzdGFQYXRoLmxlbmd0aCArIGluZGV4KSkgewogICAgICBjYXNlICJjb21tYW5kX2xpbmUuZGFydCI6CiAgICAgIGNhc2UgImtlcm5lbC9ib2R5X2J1aWxkZXIuZGFydCI6CiAgICAgICAgcmV0dXJuIHNldmVyaXR5OwogICAgfQogIH0KICByZXR1cm4gU2V2ZXJpdHkuZXJyb3I7Cn0KJwBOTjwBJgEfARo9JhUEAR42JxUvJSYEMy9MSktLDjggJxkGBBkCATFwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcmV3cml0ZV9zZXZlcml0eS5kYXJ0MHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS90YXJnZXQuZGFydIMuLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEudGFyZ2V0OwoKaW1wb3J0ICdkYXJ0OmFzeW5jJyBzaG93IEZ1dHVyZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgQ29tcG9uZW50OwoKaW1wb3J0ICd0aWNrZXIuZGFydCcgc2hvdyBUaWNrZXI7CgovLy8gQSBjb21waWxhdGlvbiB0YXJnZXQuCi8vLwovLy8gQSB0YXJnZXQgcmVhZHMgc291cmNlIGZpbGVzIHdpdGggW3JlYWRdLCBidWlsZHMgb3V0bGluZXMgd2hlbgovLy8gW2J1aWxkT3V0bGluZXNdIGlzIGNhbGxlZCBhbmQgYnVpbGRzIHRoZSBmdWxsIGNvbXBvbmVudCB3aGVuCi8vLyBbYnVpbGRDb21wb25lbnRdIGlzIGNhbGxlZC4KYWJzdHJhY3QgY2xhc3MgVGFyZ2V0IHsKICBmaW5hbCBUaWNrZXIgdGlja2VyOwoKICBUYXJnZXQodGhpcy50aWNrZXIpOwoKICAvLy8gQnVpbGQgYW5kIHJldHVybiBvdXRsaW5lcyBmb3IgYWxsIGxpYnJhcmllcy4KICBGdXR1cmU8Q29tcG9uZW50PiBidWlsZE91dGxpbmVzKCk7CgogIC8vLyBCdWlsZCBhbmQgcmV0dXJuIHRoZSBmdWxsIGNvbXBvbmVudCBmb3IgYWxsIGxpYnJhcmllcy4KICBGdXR1cmU8Q29tcG9uZW50PiBidWlsZENvbXBvbmVudCgpOwp9Ch4ATk48ARYBIQExASIBGgRCQSAYFwEXATMlAT0mAgEncGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3RhcmdldC5kYXJ0P3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9idWlsZGVyL2NsYXNzX2J1aWxkZXIuZGFydMABEFwvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5jbGFzc19idWlsZGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBBcmd1bWVudHMsCiAgICAgICAgQXNFeHByZXNzaW9uLAogICAgICAgIENsYXNzLAogICAgICAgIENvbnN0cnVjdG9yLAogICAgICAgIERhcnRUeXBlLAogICAgICAgIER5bmFtaWNUeXBlLAogICAgICAgIEV4cHJlc3Npb24sCiAgICAgICAgRmllbGQsCiAgICAgICAgRnVuY3Rpb25Ob2RlLAogICAgICAgIEludGVyZmFjZVR5cGUsCiAgICAgICAgSW52YWxpZFR5cGUsCiAgICAgICAgTGlzdExpdGVyYWwsCiAgICAgICAgTWVtYmVyLAogICAgICAgIE1ldGhvZEludm9jYXRpb24sCiAgICAgICAgTmFtZSwKICAgICAgICBQcm9jZWR1cmUsCiAgICAgICAgUHJvY2VkdXJlS2luZCwKICAgICAgICBSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvciwKICAgICAgICBSZXR1cm5TdGF0ZW1lbnQsCiAgICAgICAgU3RhdGljR2V0LAogICAgICAgIFN1cGVydHlwZSwKICAgICAgICBUaGlzRXhwcmVzc2lvbiwKICAgICAgICBUeXBlUGFyYW1ldGVyLAogICAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlLAogICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24sCiAgICAgICAgVm9pZFR5cGU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IEZ1bmN0aW9uVHlwZSwgVHlwZVBhcmFtZXRlclR5cGU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBzaG93IENsYXNzSGllcmFyY2h5OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbG9uZS5kYXJ0JyBzaG93IENsb25lV2l0aG91dEJvZHk7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NvcmVfdHlwZXMuZGFydCcgc2hvdyBDb3JlVHlwZXM7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3NyYy9ib3VuZHNfY2hlY2tzLmRhcnQnCiAgICBzaG93IFR5cGVBcmd1bWVudElzc3VlLCBmaW5kVHlwZUFyZ3VtZW50SXNzdWVzLCBnZXRHZW5lcmljVHlwZU5hbWU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0JyBzaG93IFN1YnN0aXR1dGlvbiwgc3Vic3RpdHV0ZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnIGFzIHR5cGVfYWxnZWJyYQogICAgc2hvdyBnZXRTdWJzdGl0dXRpb25NYXA7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfZW52aXJvbm1lbnQuZGFydCcgc2hvdyBUeXBlRW52aXJvbm1lbnQ7CgppbXBvcnQgJy4uL2RpbGwvZGlsbF9tZW1iZXJfYnVpbGRlci5kYXJ0JyBzaG93IERpbGxNZW1iZXJCdWlsZGVyOwoKaW1wb3J0ICdidWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgQ29uc3RydWN0b3JSZWZlcmVuY2VCdWlsZGVyLAogICAgICAgIEJ1aWxkZXIsCiAgICAgICAgTGlicmFyeUJ1aWxkZXIsCiAgICAgICAgTWVtYmVyQnVpbGRlciwKICAgICAgICBNZXRhZGF0YUJ1aWxkZXIsCiAgICAgICAgU2NvcGUsCiAgICAgICAgU2NvcGVCdWlsZGVyLAogICAgICAgIFR5cGVCdWlsZGVyLAogICAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXI7CgppbXBvcnQgJ2RlY2xhcmF0aW9uLmRhcnQnOwoKaW1wb3J0ICdkZWNsYXJhdGlvbl9idWlsZGVyLmRhcnQnOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdwogICAgICAgIExvY2F0ZWRNZXNzYWdlLAogICAgICAgIE1lc3NhZ2UsCiAgICAgICAgbWVzc2FnZUdlbmVyaWNGdW5jdGlvblR5cGVVc2VkQXNBY3R1YWxUeXBlQXJndW1lbnQsCiAgICAgICAgbWVzc2FnZUltcGxlbWVudHNGdXR1cmVPciwKICAgICAgICBtZXNzYWdlUGF0Y2hDbGFzc09yaWdpbiwKICAgICAgICBtZXNzYWdlUGF0Y2hDbGFzc1R5cGVWYXJpYWJsZXNNaXNtYXRjaCwKICAgICAgICBtZXNzYWdlUGF0Y2hEZWNsYXJhdGlvbk1pc21hdGNoLAogICAgICAgIG1lc3NhZ2VQYXRjaERlY2xhcmF0aW9uT3JpZ2luLAogICAgICAgIG5vTGVuZ3RoLAogICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uVXNlLAogICAgICAgIHRlbXBsYXRlR2VuZXJpY0Z1bmN0aW9uVHlwZUluZmVycmVkQXNBY3R1YWxUeXBlQXJndW1lbnQsCiAgICAgICAgdGVtcGxhdGVJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9ycywKICAgICAgICB0ZW1wbGF0ZUlsbGVnYWxNaXhpbkR1ZVRvQ29uc3RydWN0b3JzQ2F1c2UsCiAgICAgICAgdGVtcGxhdGVJbXBsZW1lbnRzUmVwZWF0ZWQsCiAgICAgICAgdGVtcGxhdGVJbXBsZW1lbnRzU3VwZXJDbGFzcywKICAgICAgICB0ZW1wbGF0ZUltcGxpY2l0TWl4aW5PdmVycmlkZUNvbnRleHQsCiAgICAgICAgdGVtcGxhdGVJbmNvbXBhdGlibGVSZWRpcmVjdGVlRnVuY3Rpb25UeXBlLAogICAgICAgIHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50LAogICAgICAgIHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGUsCiAgICAgICAgdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJblN1cGVydHlwZUluZmVycmVkLAogICAgICAgIHRlbXBsYXRlSW50ZXJmYWNlQ2hlY2tDb250ZXh0LAogICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtTm90Rm91bmRJbiwKICAgICAgICB0ZW1wbGF0ZU1peGluQXBwbGljYXRpb25JbmNvbXBhdGlibGVTdXBlcnR5cGUsCiAgICAgICAgdGVtcGxhdGVOYW1lZE1peGluT3ZlcnJpZGVDb250ZXh0LAogICAgICAgIHRlbXBsYXRlT3ZlcnJpZGRlbk1ldGhvZENhdXNlLAogICAgICAgIHRlbXBsYXRlT3ZlcnJpZGVGZXdlck5hbWVkQXJndW1lbnRzLAogICAgICAgIHRlbXBsYXRlT3ZlcnJpZGVGZXdlclBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgICAgdGVtcGxhdGVPdmVycmlkZU1pc21hdGNoTmFtZWRQYXJhbWV0ZXIsCiAgICAgICAgdGVtcGxhdGVPdmVycmlkZU1vcmVSZXF1aXJlZEFyZ3VtZW50cywKICAgICAgICB0ZW1wbGF0ZU92ZXJyaWRlVHlwZU1pc21hdGNoUGFyYW1ldGVyLAogICAgICAgIHRlbXBsYXRlT3ZlcnJpZGVUeXBlTWlzbWF0Y2hSZXR1cm5UeXBlLAogICAgICAgIHRlbXBsYXRlT3ZlcnJpZGVUeXBlVmFyaWFibGVzTWlzbWF0Y2gsCiAgICAgICAgdGVtcGxhdGVSZWRpcmVjdGluZ0ZhY3RvcnlJbmNvbXBhdGlibGVUeXBlQXJndW1lbnQsCiAgICAgICAgdGVtcGxhdGVSZWRpcmVjdGlvblRhcmdldE5vdEZvdW5kLAogICAgICAgIHRlbXBsYXRlVHlwZUFyZ3VtZW50TWlzbWF0Y2g7CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIENvbnN0cnVjdG9yUmVmZXJlbmNlQnVpbGRlciwKICAgICAgICBCdWlsZGVyLAogICAgICAgIEZ1bmN0aW9uQnVpbGRlciwKICAgICAgICBOYW1lZFR5cGVCdWlsZGVyLAogICAgICAgIExpYnJhcnlCdWlsZGVyLAogICAgICAgIE1lbWJlckJ1aWxkZXIsCiAgICAgICAgTWV0YWRhdGFCdWlsZGVyLAogICAgICAgIFByb2NlZHVyZUJ1aWxkZXIsCiAgICAgICAgUmVkaXJlY3RpbmdGYWN0b3J5QnVpbGRlciwKICAgICAgICBTY29wZSwKICAgICAgICBUeXBlQnVpbGRlciwKICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyOwoKaW1wb3J0ICcuLi9rZXJuZWwvcmVkaXJlY3RpbmdfZmFjdG9yeV9ib2R5LmRhcnQnCiAgICBzaG93IGdldFJlZGlyZWN0aW5nRmFjdG9yeUJvZHksIFJlZGlyZWN0aW5nRmFjdG9yeUJvZHk7CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfdGFyZ2V0LmRhcnQnIHNob3cgS2VybmVsVGFyZ2V0OwoKaW1wb3J0ICcuLi9rZXJuZWwvdHlwZXMuZGFydCcgc2hvdyBUeXBlczsKCmltcG9ydCAnLi4vbmFtZXMuZGFydCcgc2hvdyBub1N1Y2hNZXRob2ROYW1lOwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JwogICAgc2hvdyBpbnRlcm5hbFByb2JsZW0sIHVuZXhwZWN0ZWQsIHVuaGFuZGxlZCwgdW5pbXBsZW1lbnRlZCwgdW5zdXBwb3J0ZWQ7CgppbXBvcnQgJy4uL3Njb3BlLmRhcnQnIHNob3cgQW1iaWd1b3VzQnVpbGRlcjsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvdHlwZV9zY2hlbWEuZGFydCcgc2hvdyBVbmtub3duVHlwZTsKCmFic3RyYWN0IGNsYXNzIENsYXNzQnVpbGRlciBleHRlbmRzIERlY2xhcmF0aW9uQnVpbGRlciB7CiAgLy8vIFRoZSB0eXBlIHZhcmlhYmxlcyBkZWNsYXJlZCBvbiBhIGNsYXNzLCBleHRlbnNpb24gb3IgbWl4aW4gZGVjbGFyYXRpb24uCiAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzOwoKICAvLy8gVGhlIHR5cGUgaW4gdGhlIGBleHRlbmRzYCBjbGF1c2Ugb2YgYSBjbGFzcyBkZWNsYXJhdGlvbi4KICAvLy8KICAvLy8gQ3VycmVudGx5IHRoaXMgYWxzbyBob2xkcyB0aGUgc3ludGhlc2l6ZWQgc3VwZXIgY2xhc3MgZm9yIGEgbWl4aW4KICAvLy8gZGVjbGFyYXRpb24uCiAgVHlwZUJ1aWxkZXIgc3VwZXJ0eXBlOwoKICAvLy8gVGhlIHR5cGUgaW4gdGhlIGBpbXBsZW1lbnRzYCBjbGF1c2Ugb2YgYSBjbGFzcyBvciBtaXhpbiBkZWNsYXJhdGlvbi4KICBMaXN0PFR5cGVCdWlsZGVyPiBpbnRlcmZhY2VzOwoKICAvLy8gVGhlIHR5cGVzIGluIHRoZSBgb25gIGNsYXVzZSBvZiBhbiBleHRlbnNpb24gb3IgbWl4aW4gZGVjbGFyYXRpb24uCiAgTGlzdDxUeXBlQnVpbGRlcj4gb25UeXBlczsKCiAgZmluYWwgU2NvcGUgY29uc3RydWN0b3JzOwoKICBmaW5hbCBTY29wZUJ1aWxkZXIgY29uc3RydWN0b3JTY29wZUJ1aWxkZXI7CgogIE1hcDxTdHJpbmcsIENvbnN0cnVjdG9yUmVkaXJlY3Rpb24+IHJlZGlyZWN0aW5nQ29uc3RydWN0b3JzOwoKICBDbGFzc0J1aWxkZXIgYWN0dWFsT3JpZ2luOwoKICBDbGFzc0J1aWxkZXIoCiAgICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSwKICAgICAgaW50IG1vZGlmaWVycywKICAgICAgU3RyaW5nIG5hbWUsCiAgICAgIHRoaXMudHlwZVZhcmlhYmxlcywKICAgICAgdGhpcy5zdXBlcnR5cGUsCiAgICAgIHRoaXMuaW50ZXJmYWNlcywKICAgICAgdGhpcy5vblR5cGVzLAogICAgICBTY29wZSBzY29wZSwKICAgICAgdGhpcy5jb25zdHJ1Y3RvcnMsCiAgICAgIExpYnJhcnlCdWlsZGVyIHBhcmVudCwKICAgICAgaW50IGNoYXJPZmZzZXQpCiAgICAgIDogY29uc3RydWN0b3JTY29wZUJ1aWxkZXIgPSBuZXcgU2NvcGVCdWlsZGVyKGNvbnN0cnVjdG9ycyksCiAgICAgICAgc3VwZXIobWV0YWRhdGEsIG1vZGlmaWVycywgbmFtZSwgcGFyZW50LCBjaGFyT2Zmc2V0LCBzY29wZSk7CgogIFN0cmluZyBnZXQgZGVidWdOYW1lID0+ICJDbGFzc0J1aWxkZXIiOwoKICAvLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgY2xhc3MgaXMgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBhIG1peGluIHRvIGl0cwogIC8vLyBzdXBlcmNsYXNzLgogIGJvb2wgZ2V0IGlzTWl4aW5BcHBsaWNhdGlvbiA9PiBtaXhlZEluVHlwZSAhPSBudWxsOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc05hbWVkTWl4aW5BcHBsaWNhdGlvbiB7CiAgICByZXR1cm4gaXNNaXhpbkFwcGxpY2F0aW9uICYmIHN1cGVyLmlzTmFtZWRNaXhpbkFwcGxpY2F0aW9uOwogIH0KCiAgVHlwZUJ1aWxkZXIgZ2V0IG1peGVkSW5UeXBlOwoKICB2b2lkIHNldCBtaXhlZEluVHlwZShUeXBlQnVpbGRlciBtaXhpbik7CgogIExpc3Q8Q29uc3RydWN0b3JSZWZlcmVuY2VCdWlsZGVyPiBnZXQgY29uc3RydWN0b3JSZWZlcmVuY2VzID0+IG51bGw7CgogIHZvaWQgYnVpbGRPdXRsaW5lRXhwcmVzc2lvbnMoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgdm9pZCBidWlsZChTdHJpbmcgaWdub3JlLCBCdWlsZGVyIGRlY2xhcmF0aW9uKSB7CiAgICAgIE1lbWJlckJ1aWxkZXIgbWVtYmVyID0gZGVjbGFyYXRpb247CiAgICAgIG1lbWJlci5idWlsZE91dGxpbmVFeHByZXNzaW9ucyhsaWJyYXJ5KTsKICAgIH0KCiAgICBNZXRhZGF0YUJ1aWxkZXIuYnVpbGRBbm5vdGF0aW9ucygKICAgICAgICBpc1BhdGNoID8gb3JpZ2luLmNscyA6IGNscywgbWV0YWRhdGEsIGxpYnJhcnksIHRoaXMsIG51bGwpOwogICAgY29uc3RydWN0b3JzLmZvckVhY2goYnVpbGQpOwogICAgc2NvcGUuZm9yRWFjaChidWlsZCk7CiAgfQoKICAvLy8gUmVnaXN0ZXJzIGEgY29uc3RydWN0b3IgcmVkaXJlY3Rpb24gZm9yIHRoaXMgY2xhc3MgYW5kIHJldHVybnMgdHJ1ZSBpZgogIC8vLyB0aGlzIHJlZGlyZWN0aW9uIGdpdmVzIHJpc2UgdG8gYSBjeWNsZSB0aGF0IGhhcyBub3QgYmVlbiByZXBvcnRlZCBiZWZvcmUuCiAgYm9vbCBjaGVja0NvbnN0cnVjdG9yQ3ljbGljKFN0cmluZyBzb3VyY2UsIFN0cmluZyB0YXJnZXQpIHsKICAgIENvbnN0cnVjdG9yUmVkaXJlY3Rpb24gcmVkaXJlY3QgPSBuZXcgQ29uc3RydWN0b3JSZWRpcmVjdGlvbih0YXJnZXQpOwogICAgcmVkaXJlY3RpbmdDb25zdHJ1Y3RvcnMgPz89IDxTdHJpbmcsIENvbnN0cnVjdG9yUmVkaXJlY3Rpb24+e307CiAgICByZWRpcmVjdGluZ0NvbnN0cnVjdG9yc1tzb3VyY2VdID0gcmVkaXJlY3Q7CiAgICB3aGlsZSAocmVkaXJlY3QgIT0gbnVsbCkgewogICAgICBpZiAocmVkaXJlY3QuY3ljbGVSZXBvcnRlZCkgcmV0dXJuIGZhbHNlOwogICAgICBpZiAocmVkaXJlY3QudGFyZ2V0ID09IHNvdXJjZSkgewogICAgICAgIHJlZGlyZWN0LmN5Y2xlUmVwb3J0ZWQgPSB0cnVlOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIHJlZGlyZWN0ID0gcmVkaXJlY3RpbmdDb25zdHJ1Y3RvcnNbcmVkaXJlY3QudGFyZ2V0XTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGludCByZXNvbHZlQ29uc3RydWN0b3JzKExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgIGlmIChjb25zdHJ1Y3RvclJlZmVyZW5jZXMgPT0gbnVsbCkgcmV0dXJuIDA7CiAgICBmb3IgKENvbnN0cnVjdG9yUmVmZXJlbmNlQnVpbGRlciByZWYgaW4gY29uc3RydWN0b3JSZWZlcmVuY2VzKSB7CiAgICAgIHJlZi5yZXNvbHZlSW4oc2NvcGUsIGxpYnJhcnkpOwogICAgfQogICAgaW50IGNvdW50ID0gY29uc3RydWN0b3JSZWZlcmVuY2VzLmxlbmd0aDsKICAgIGlmIChjb3VudCAhPSAwKSB7CiAgICAgIE1hcDxTdHJpbmcsIE1lbWJlckJ1aWxkZXI+IGNvbnN0cnVjdG9ycyA9IHRoaXMuY29uc3RydWN0b3JzLmxvY2FsOwogICAgICAvLyBDb3B5IGtleXMgdG8gYXZvaWQgY29uY3VycmVudCBtb2RpZmljYXRpb24gZXJyb3IuCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lcyA9IGNvbnN0cnVjdG9ycy5rZXlzLnRvTGlzdCgpOwogICAgICBmb3IgKFN0cmluZyBuYW1lIGluIG5hbWVzKSB7CiAgICAgICAgQnVpbGRlciBkZWNsYXJhdGlvbiA9IGNvbnN0cnVjdG9yc1tuYW1lXTsKICAgICAgICBkbyB7CiAgICAgICAgICBpZiAoZGVjbGFyYXRpb24ucGFyZW50ICE9IHRoaXMpIHsKICAgICAgICAgICAgdW5leHBlY3RlZCgiJGZpbGVVcmkiLCAiJHtkZWNsYXJhdGlvbi5wYXJlbnQuZmlsZVVyaX0iLCBjaGFyT2Zmc2V0LAogICAgICAgICAgICAgICAgZmlsZVVyaSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZGVjbGFyYXRpb24gaXMgUmVkaXJlY3RpbmdGYWN0b3J5QnVpbGRlcikgewogICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBpbW1lZGlhdGUgcmVkaXJlY3Rpb24gdGFyZ2V0LCBub3QgdGhlIGVmZmVjdGl2ZS4KICAgICAgICAgICAgQ29uc3RydWN0b3JSZWZlcmVuY2VCdWlsZGVyIHJlZGlyZWN0aW9uVGFyZ2V0ID0KICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uLnJlZGlyZWN0aW9uVGFyZ2V0OwogICAgICAgICAgICBpZiAocmVkaXJlY3Rpb25UYXJnZXQgIT0gbnVsbCkgewogICAgICAgICAgICAgIEJ1aWxkZXIgdGFyZ2V0QnVpbGRlciA9IHJlZGlyZWN0aW9uVGFyZ2V0LnRhcmdldDsKICAgICAgICAgICAgICBpZiAoZGVjbGFyYXRpb24ubmV4dCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAvLyBPbmx5IHRoZSBmaXJzdCBvbmUgKHRoYXQgaXMsIHRoZSBsYXN0IG9uIGluIHRoZSBsaW5rZWQgbGlzdCkKICAgICAgICAgICAgICAgIC8vIGlzIGFjdHVhbGx5IGluIHRoZSBrZXJuZWwgdHJlZS4gVGhpcyBjYWxsIGNyZWF0ZXMgYSBTdGF0aWNHZXQKICAgICAgICAgICAgICAgIC8vIHRvIFtkZWNsYXJhdGlvbi50YXJnZXRdIGluIGEgZmllbGQgYF9yZWRpcmVjdGluZyNgIHdoaWNoIGlzCiAgICAgICAgICAgICAgICAvLyBvbmx5IGxlZ2FsIHRvIGRvIHRvIHRoaW5ncyBpbiB0aGUga2VybmVsIHRyZWUuCiAgICAgICAgICAgICAgICBhZGRSZWRpcmVjdGluZ0NvbnN0cnVjdG9yKGRlY2xhcmF0aW9uLCBsaWJyYXJ5KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHRhcmdldEJ1aWxkZXIgaXMgRnVuY3Rpb25CdWlsZGVyKSB7CiAgICAgICAgICAgICAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0gZGVjbGFyYXRpb24udHlwZUFyZ3VtZW50czsKICAgICAgICAgICAgICAgIGlmICh0eXBlQXJndW1lbnRzID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgLy8gVE9ETygzMjA0OSkgSWYgdHlwZSBhcmd1bWVudHMgYXJlbid0IHNwZWNpZmllZCwgdGhleSBzaG91bGQKICAgICAgICAgICAgICAgICAgLy8gYmUgaW5mZXJyZWQuICBDdXJyZW50bHksIHRoZSBpbmZlcmVuY2UgaXMgbm90IHBlcmZvcm1lZC4KICAgICAgICAgICAgICAgICAgLy8gVGhlIGNvZGUgYmVsb3cgaXMgYSB3b3JrYXJvdW5kLgogICAgICAgICAgICAgICAgICB0eXBlQXJndW1lbnRzID0gbmV3IExpc3Q8RGFydFR5cGU+LmZpbGxlZCgKICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEJ1aWxkZXIubWVtYmVyLmVuY2xvc2luZ0NsYXNzLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IER5bmFtaWNUeXBlKCksCiAgICAgICAgICAgICAgICAgICAgICBncm93YWJsZTogdHJ1ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbi5zZXRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KAogICAgICAgICAgICAgICAgICAgIHRhcmdldEJ1aWxkZXIubWVtYmVyLCB0eXBlQXJndW1lbnRzKTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldEJ1aWxkZXIgaXMgRGlsbE1lbWJlckJ1aWxkZXIpIHsKICAgICAgICAgICAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPSBkZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzOwogICAgICAgICAgICAgICAgaWYgKHR5cGVBcmd1bWVudHMgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAvLyBUT0RPKDMyMDQ5KSBJZiB0eXBlIGFyZ3VtZW50cyBhcmVuJ3Qgc3BlY2lmaWVkLCB0aGV5IHNob3VsZAogICAgICAgICAgICAgICAgICAvLyBiZSBpbmZlcnJlZC4gIEN1cnJlbnRseSwgdGhlIGluZmVyZW5jZSBpcyBub3QgcGVyZm9ybWVkLgogICAgICAgICAgICAgICAgICAvLyBUaGUgY29kZSBiZWxvdyBpcyBhIHdvcmthcm91bmQuCiAgICAgICAgICAgICAgICAgIHR5cGVBcmd1bWVudHMgPSBuZXcgTGlzdDxEYXJ0VHlwZT4uZmlsbGVkKAogICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QnVpbGRlci5tZW1iZXIuZW5jbG9zaW5nQ2xhc3MudHlwZVBhcmFtZXRlcnMubGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgRHluYW1pY1R5cGUoKSwKICAgICAgICAgICAgICAgICAgICAgIGdyb3dhYmxlOiB0cnVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uLnNldFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkoCiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QnVpbGRlci5tZW1iZXIsIHR5cGVBcmd1bWVudHMpOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0QnVpbGRlciBpcyBBbWJpZ3VvdXNCdWlsZGVyKSB7CiAgICAgICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvblVzZQogICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKHJlZGlyZWN0aW9uVGFyZ2V0LmZ1bGxOYW1lRm9yRXJyb3JzKTsKICAgICAgICAgICAgICAgIGlmIChkZWNsYXJhdGlvbi5pc0NvbnN0KSB7CiAgICAgICAgICAgICAgICAgIGFkZFByb2JsZW0obWVzc2FnZSwgZGVjbGFyYXRpb24uY2hhck9mZnNldCwgbm9MZW5ndGgpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgYWRkUHJvYmxlbShtZXNzYWdlLCBkZWNsYXJhdGlvbi5jaGFyT2Zmc2V0LCBub0xlbmd0aCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBDb3JlVHlwZXMgYXJlbid0IGNvbXB1dGVkIHlldCwgYW5kIHRoaXMgaXMgdGhlIG91dGxpbmUKICAgICAgICAgICAgICAgIC8vIHBoYXNlLiBTbyB3ZSBjYW4ndCBhbmQgc2hvdWxkbid0IGNyZWF0ZSBhIG1ldGhvZCBib2R5LgogICAgICAgICAgICAgICAgZGVjbGFyYXRpb24uYm9keSA9IG5ldyBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5LnVucmVzb2x2ZWQoCiAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Rpb25UYXJnZXQuZnVsbE5hbWVGb3JFcnJvcnMpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSB0ZW1wbGF0ZVJlZGlyZWN0aW9uVGFyZ2V0Tm90Rm91bmQKICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhyZWRpcmVjdGlvblRhcmdldC5mdWxsTmFtZUZvckVycm9ycyk7CiAgICAgICAgICAgICAgICBpZiAoZGVjbGFyYXRpb24uaXNDb25zdCkgewogICAgICAgICAgICAgICAgICBhZGRQcm9ibGVtKG1lc3NhZ2UsIGRlY2xhcmF0aW9uLmNoYXJPZmZzZXQsIG5vTGVuZ3RoKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIGFkZFByb2JsZW0obWVzc2FnZSwgZGVjbGFyYXRpb24uY2hhck9mZnNldCwgbm9MZW5ndGgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gQ29yZVR5cGVzIGFyZW4ndCBjb21wdXRlZCB5ZXQsIGFuZCB0aGlzIGlzIHRoZSBvdXRsaW5lCiAgICAgICAgICAgICAgICAvLyBwaGFzZS4gU28gd2UgY2FuJ3QgYW5kIHNob3VsZG4ndCBjcmVhdGUgYSBtZXRob2QgYm9keS4KICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uLmJvZHkgPSBuZXcgUmVkaXJlY3RpbmdGYWN0b3J5Qm9keS51bnJlc29sdmVkKAogICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0aW9uVGFyZ2V0LmZ1bGxOYW1lRm9yRXJyb3JzKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGRlY2xhcmF0aW9uID0gZGVjbGFyYXRpb24ubmV4dDsKICAgICAgICB9IHdoaWxlIChkZWNsYXJhdGlvbiAhPSBudWxsKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNvdW50OwogIH0KCiAgLy8vIFVzZWQgdG8gbG9va3VwIGEgc3RhdGljIG1lbWJlciBvZiB0aGlzIGNsYXNzLgogIEBvdmVycmlkZQogIEJ1aWxkZXIgZmluZFN0YXRpY0J1aWxkZXIoCiAgICAgIFN0cmluZyBuYW1lLCBpbnQgY2hhck9mZnNldCwgVXJpIGZpbGVVcmksIExpYnJhcnlCdWlsZGVyIGFjY2Vzc2luZ0xpYnJhcnksCiAgICAgIHtib29sIGlzU2V0dGVyOiBmYWxzZX0pIHsKICAgIGlmIChhY2Nlc3NpbmdMaWJyYXJ5Lm9yaWdpbiAhPSBsaWJyYXJ5Lm9yaWdpbiAmJiBuYW1lLnN0YXJ0c1dpdGgoIl8iKSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIEJ1aWxkZXIgZGVjbGFyYXRpb24gPSBpc1NldHRlcgogICAgICAgID8gc2NvcGUubG9va3VwU2V0dGVyKG5hbWUsIGNoYXJPZmZzZXQsIGZpbGVVcmksIGlzSW5zdGFuY2VTY29wZTogZmFsc2UpCiAgICAgICAgOiBzY29wZS5sb29rdXAobmFtZSwgY2hhck9mZnNldCwgZmlsZVVyaSwgaXNJbnN0YW5jZVNjb3BlOiBmYWxzZSk7CiAgICBpZiAoZGVjbGFyYXRpb24gPT0gbnVsbCAmJiBpc1BhdGNoKSB7CiAgICAgIHJldHVybiBvcmlnaW4uZmluZFN0YXRpY0J1aWxkZXIoCiAgICAgICAgICBuYW1lLCBjaGFyT2Zmc2V0LCBmaWxlVXJpLCBhY2Nlc3NpbmdMaWJyYXJ5LAogICAgICAgICAgaXNTZXR0ZXI6IGlzU2V0dGVyKTsKICAgIH0KICAgIHJldHVybiBkZWNsYXJhdGlvbjsKICB9CgogIEJ1aWxkZXIgZmluZENvbnN0cnVjdG9yT3JGYWN0b3J5KAogICAgICBTdHJpbmcgbmFtZSwgaW50IGNoYXJPZmZzZXQsIFVyaSB1cmksIExpYnJhcnlCdWlsZGVyIGFjY2Vzc2luZ0xpYnJhcnkpIHsKICAgIGlmIChhY2Nlc3NpbmdMaWJyYXJ5Lm9yaWdpbiAhPSBsaWJyYXJ5Lm9yaWdpbiAmJiBuYW1lLnN0YXJ0c1dpdGgoIl8iKSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIEJ1aWxkZXIgZGVjbGFyYXRpb24gPSBjb25zdHJ1Y3RvcnMubG9va3VwKG5hbWUsIGNoYXJPZmZzZXQsIHVyaSk7CiAgICBpZiAoZGVjbGFyYXRpb24gPT0gbnVsbCAmJiBpc1BhdGNoKSB7CiAgICAgIHJldHVybiBvcmlnaW4uZmluZENvbnN0cnVjdG9yT3JGYWN0b3J5KAogICAgICAgICAgbmFtZSwgY2hhck9mZnNldCwgdXJpLCBhY2Nlc3NpbmdMaWJyYXJ5KTsKICAgIH0KICAgIHJldHVybiBkZWNsYXJhdGlvbjsKICB9CgogIHZvaWQgZm9yRWFjaCh2b2lkIGYoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgYnVpbGRlcikpIHsKICAgIHNjb3BlLmZvckVhY2goZik7CiAgfQoKICBAb3ZlcnJpZGUKICBCdWlsZGVyIGxvb2t1cExvY2FsTWVtYmVyKFN0cmluZyBuYW1lLAogICAgICB7Ym9vbCBzZXR0ZXI6IGZhbHNlLCBib29sIHJlcXVpcmVkOiBmYWxzZX0pIHsKICAgIEJ1aWxkZXIgYnVpbGRlciA9IHNldHRlciA/IHNjb3BlLnNldHRlcnNbbmFtZV0gOiBzY29wZS5sb2NhbFtuYW1lXTsKICAgIGlmIChidWlsZGVyID09IG51bGwgJiYgaXNQYXRjaCkgewogICAgICBidWlsZGVyID0gc2V0dGVyID8gb3JpZ2luLnNjb3BlLnNldHRlcnNbbmFtZV0gOiBvcmlnaW4uc2NvcGUubG9jYWxbbmFtZV07CiAgICB9CiAgICBpZiAocmVxdWlyZWQgJiYgYnVpbGRlciA9PSBudWxsKSB7CiAgICAgIGludGVybmFsUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtTm90Rm91bmRJbi53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgIG5hbWUsIGZ1bGxOYW1lRm9yRXJyb3JzKSwKICAgICAgICAgIC0xLAogICAgICAgICAgbnVsbCk7CiAgICB9CiAgICByZXR1cm4gYnVpbGRlcjsKICB9CgogIC8vLyBGaW5kIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhpcyBjbGFzcyB3aXRoIFtuYW1lXS4gVGhpcyBtZXRob2QgaXNuJ3QKICAvLy8gc3VpdGFibGUgZm9yIHNjb3BlIGxvb2t1cHMgYXMgaXQgd2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgbmFtZSBpc24ndAogIC8vLyBkZWNsYXJlZC4gVGhlIFtzY29wZV0gc2hvdWxkIGJlIHVzZWQgZm9yIHRoYXQuIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8KICAvLy8gZmluZCBhIG1lbWJlciB0aGF0IGlzIGtub3duIHRvIGV4aXN0IGFuZCBpdCB3aWxsIHBpY2sgdGhlIGZpcnN0CiAgLy8vIGRlY2xhcmF0aW9uIGlmIHRoZSBuYW1lIGlzIGFtYmlndW91cy4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGUsIHRoaXMgbWV0aG9kIGlzIGNvbnZlbmllbnQgZm9yIHVzZSB3aGVuIGJ1aWxkaW5nIHN5bnRoZXRpYwogIC8vLyBtZW1iZXJzLCBzdWNoIGFzIHRob3NlIG9mIGFuIGVudW0uCiAgTWVtYmVyQnVpbGRlciBmaXJzdE1lbWJlck5hbWVkKFN0cmluZyBuYW1lKSB7CiAgICBCdWlsZGVyIGRlY2xhcmF0aW9uID0gbG9va3VwTG9jYWxNZW1iZXIobmFtZSwgcmVxdWlyZWQ6IHRydWUpOwogICAgd2hpbGUgKGRlY2xhcmF0aW9uLm5leHQgIT0gbnVsbCkgewogICAgICBkZWNsYXJhdGlvbiA9IGRlY2xhcmF0aW9uLm5leHQ7CiAgICB9CiAgICByZXR1cm4gZGVjbGFyYXRpb247CiAgfQoKICAvLy8gVGhlIFtDbGFzc10gYnVpbHQgYnkgdGhpcyBidWlsZGVyLgogIC8vLwogIC8vLyBGb3IgYSBwYXRjaCBjbGFzcyB0aGUgb3JpZ2luIGNsYXNzIGlzIHJldHVybmVkLgogIENsYXNzIGdldCBjbHM7CgogIC8vIERlbGliZXJhdGVseSB1bnJlbGF0ZWQgcmV0dXJuIHR5cGUgdG8gc3RhdGljYWxseSBkZXRlY3QgbW9yZSBhY2NpZGVudGFsCiAgLy8gdXNlIHVudGlsIEJ1aWxkZXIudGFyZ2V0IGlzIGZ1bGx5IHJldGlyZWQuCiAgVW5yZWxhdGVkVGFyZ2V0IGdldCB0YXJnZXQgPT4gdW5zdXBwb3J0ZWQoCiAgICAgICJDbGFzc0J1aWxkZXIudGFyZ2V0IGlzIGRlcHJlY2F0ZWQuICIKICAgICAgIlVzZSBDbGFzc0J1aWxkZXIuY2xzIGluc3RlYWQuIiwKICAgICAgY2hhck9mZnNldCwKICAgICAgZmlsZVVyaSk7CgogIENsYXNzIGdldCBhY3R1YWxDbHM7CgogIEBvdmVycmlkZQogIENsYXNzQnVpbGRlciBnZXQgb3JpZ2luID0+IGFjdHVhbE9yaWdpbiA/PyB0aGlzOwoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldCB0aGlzVHlwZSA9PiBjbHMudGhpc1R5cGU7CgogIC8vLyBbYXJndW1lbnRzXSBoYXZlIGFscmVhZHkgYmVlbiBidWlsdC4KICBJbnRlcmZhY2VUeXBlIGJ1aWxkVHlwZXNXaXRoQnVpbHRBcmd1bWVudHMoCiAgICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIExpc3Q8RGFydFR5cGU+IGFyZ3VtZW50cykgewogICAgYXNzZXJ0KGFyZ3VtZW50cyA9PSBudWxsIHx8IGNscy50eXBlUGFyYW1ldGVycy5sZW5ndGggPT0gYXJndW1lbnRzLmxlbmd0aCk7CiAgICByZXR1cm4gYXJndW1lbnRzID09IG51bGwgPyBjbHMucmF3VHlwZSA6IG5ldyBJbnRlcmZhY2VUeXBlKGNscywgYXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgdHlwZVZhcmlhYmxlc0NvdW50ID0+IHR5cGVWYXJpYWJsZXM/Lmxlbmd0aCA/PyAwOwoKICBMaXN0PERhcnRUeXBlPiBidWlsZFR5cGVBcmd1bWVudHMoCiAgICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50cykgewogICAgaWYgKGFyZ3VtZW50cyA9PSBudWxsICYmIHR5cGVWYXJpYWJsZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gPERhcnRUeXBlPltdOwogICAgfQoKICAgIGlmIChhcmd1bWVudHMgPT0gbnVsbCAmJiB0eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgTGlzdDxEYXJ0VHlwZT4gcmVzdWx0ID0KICAgICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQodHlwZVZhcmlhYmxlcy5sZW5ndGgsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyArK2kpIHsKICAgICAgICByZXN1bHRbaV0gPSB0eXBlVmFyaWFibGVzW2ldLmRlZmF1bHRUeXBlLmJ1aWxkKGxpYnJhcnkpOwogICAgICB9CiAgICAgIGlmIChsaWJyYXJ5IGlzIFNvdXJjZUxpYnJhcnlCdWlsZGVyKSB7CiAgICAgICAgbGlicmFyeS5pbmZlcnJlZFR5cGVzLmFkZEFsbChyZXN1bHQpOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsICYmIGFyZ3VtZW50cy5sZW5ndGggIT0gKHR5cGVWYXJpYWJsZXM/Lmxlbmd0aCA/PyAwKSkgewogICAgICAvLyBUaGF0IHNob3VsZCBiZSBjYXVnaHQgYW5kIHJlcG9ydGVkIGFzIGEgY29tcGlsZS10aW1lIGVycm9yIGVhcmxpZXIuCiAgICAgIHJldHVybiB1bmhhbmRsZWQoCiAgICAgICAgICB0ZW1wbGF0ZVR5cGVBcmd1bWVudE1pc21hdGNoCiAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHModHlwZVZhcmlhYmxlcy5sZW5ndGgpCiAgICAgICAgICAgICAgLm1lc3NhZ2UsCiAgICAgICAgICAiYnVpbGRUeXBlQXJndW1lbnRzIiwKICAgICAgICAgIC0xLAogICAgICAgICAgbnVsbCk7CiAgICB9CgogICAgLy8gYXJndW1lbnRzLmxlbmd0aCA9PSB0eXBlVmFyaWFibGVzLmxlbmd0aAogICAgTGlzdDxEYXJ0VHlwZT4gcmVzdWx0ID0KICAgICAgICBuZXcgTGlzdDxEYXJ0VHlwZT4uZmlsbGVkKGFyZ3VtZW50cy5sZW5ndGgsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgKytpKSB7CiAgICAgIHJlc3VsdFtpXSA9IGFyZ3VtZW50c1tpXS5idWlsZChsaWJyYXJ5KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gSWYgW2FyZ3VtZW50c10gYXJlIG51bGwsIHRoZSBkZWZhdWx0IHR5cGVzIGZvciB0aGUgdmFyaWFibGVzIGFyZSB1c2VkLgogIEludGVyZmFjZVR5cGUgYnVpbGRUeXBlKExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50cykgewogICAgcmV0dXJuIGJ1aWxkVHlwZXNXaXRoQnVpbHRBcmd1bWVudHMoCiAgICAgICAgbGlicmFyeSwgYnVpbGRUeXBlQXJndW1lbnRzKGxpYnJhcnksIGFyZ3VtZW50cykpOwogIH0KCiAgU3VwZXJ0eXBlIGJ1aWxkU3VwZXJ0eXBlKAogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBMaXN0PFR5cGVCdWlsZGVyPiBhcmd1bWVudHMpIHsKICAgIENsYXNzIGNscyA9IGlzUGF0Y2ggPyBvcmlnaW4uY2xzIDogdGhpcy5jbHM7CiAgICByZXR1cm4gbmV3IFN1cGVydHlwZShjbHMsIGJ1aWxkVHlwZUFyZ3VtZW50cyhsaWJyYXJ5LCBhcmd1bWVudHMpKTsKICB9CgogIFN1cGVydHlwZSBidWlsZE1peGVkSW5UeXBlKAogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBMaXN0PFR5cGVCdWlsZGVyPiBhcmd1bWVudHMpIHsKICAgIENsYXNzIGNscyA9IGlzUGF0Y2ggPyBvcmlnaW4uY2xzIDogdGhpcy5jbHM7CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgcmV0dXJuIG5ldyBTdXBlcnR5cGUoY2xzLCBidWlsZFR5cGVBcmd1bWVudHMobGlicmFyeSwgYXJndW1lbnRzKSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IFN1cGVydHlwZSgKICAgICAgICAgIGNscywKICAgICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQoCiAgICAgICAgICAgICAgY2xzLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCwgY29uc3QgVW5rbm93blR5cGUoKSwKICAgICAgICAgICAgICBncm93YWJsZTogdHJ1ZSkpOwogICAgfQogIH0KCiAgdm9pZCBjaGVja1N1cGVydHlwZXMoQ29yZVR5cGVzIGNvcmVUeXBlcykgewogICAgLy8gVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjbGFzcyAodGhhdCdzIGJlaW5nIGJ1aWx0KSBpdHMgc3VwZXIKICAgIC8vIGNsYXNzIGFwcGVhcnMgYm90aCBpbiAnZXh0ZW5kcycgYW5kICdpbXBsZW1lbnRzJyBjbGF1c2VzIGFuZCB3aGV0aGVyIGFueQogICAgLy8gaW50ZXJmYWNlIGFwcGVhcnMgbXVsdGlwbGUgdGltZXMgaW4gdGhlICdpbXBsZW1lbnRzJyBjbGF1c2UuCiAgICBpZiAoaW50ZXJmYWNlcyA9PSBudWxsKSByZXR1cm47CgogICAgLy8gRXh0cmFjdCBzdXBlciBjbGFzcyAoaWYgaXQgZXhpc3RzKS4KICAgIENsYXNzQnVpbGRlciBzdXBlckNsYXNzOwogICAgVHlwZUJ1aWxkZXIgc3VwZXJDbGFzc1R5cGUgPSBzdXBlcnR5cGU7CiAgICBpZiAoc3VwZXJDbGFzc1R5cGUgaXMgTmFtZWRUeXBlQnVpbGRlcikgewogICAgICBCdWlsZGVyIGRlY2wgPSBzdXBlckNsYXNzVHlwZS5kZWNsYXJhdGlvbjsKICAgICAgaWYgKGRlY2wgaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgICAgc3VwZXJDbGFzcyA9IGRlY2w7CiAgICAgIH0KICAgIH0KCiAgICAvLyBWYWxpZGF0ZSBpbnRlcmZhY2VzLgogICAgTWFwPENsYXNzQnVpbGRlciwgaW50PiBwcm9ibGVtczsKICAgIE1hcDxDbGFzc0J1aWxkZXIsIGludD4gcHJvYmxlbXNPZmZzZXRzOwogICAgU2V0PENsYXNzQnVpbGRlcj4gaW1wbGVtZW50ZWQgPSBuZXcgU2V0PENsYXNzQnVpbGRlcj4oKTsKICAgIGZvciAoVHlwZUJ1aWxkZXIgdHlwZSBpbiBpbnRlcmZhY2VzKSB7CiAgICAgIGlmICh0eXBlIGlzIE5hbWVkVHlwZUJ1aWxkZXIpIHsKICAgICAgICBpbnQgY2hhck9mZnNldCA9IC0xOyAvLyBUT0RPKGFoZSk6IEdldCBvZmZzZXQgZnJvbSB0eXBlLgogICAgICAgIEJ1aWxkZXIgZGVjbCA9IHR5cGUuZGVjbGFyYXRpb247CiAgICAgICAgaWYgKGRlY2wgaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgICAgICBDbGFzc0J1aWxkZXIgaW50ZXJmYWNlID0gZGVjbDsKICAgICAgICAgIGlmIChzdXBlckNsYXNzID09IGludGVyZmFjZSkgewogICAgICAgICAgICBhZGRQcm9ibGVtKAogICAgICAgICAgICAgICAgdGVtcGxhdGVJbXBsZW1lbnRzU3VwZXJDbGFzcy53aXRoQXJndW1lbnRzKGludGVyZmFjZS5uYW1lKSwKICAgICAgICAgICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICBub0xlbmd0aCk7CiAgICAgICAgICB9IGVsc2UgaWYgKGltcGxlbWVudGVkLmNvbnRhaW5zKGludGVyZmFjZSkpIHsKICAgICAgICAgICAgLy8gQWdncmVnYXRlIHJlcGV0aXRpb25zLgogICAgICAgICAgICBwcm9ibGVtcyA/Pz0gbmV3IE1hcDxDbGFzc0J1aWxkZXIsIGludD4oKTsKICAgICAgICAgICAgcHJvYmxlbXNbaW50ZXJmYWNlXSA/Pz0gMDsKICAgICAgICAgICAgcHJvYmxlbXNbaW50ZXJmYWNlXSArPSAxOwoKICAgICAgICAgICAgcHJvYmxlbXNPZmZzZXRzID8/PSBuZXcgTWFwPENsYXNzQnVpbGRlciwgaW50PigpOwogICAgICAgICAgICBwcm9ibGVtc09mZnNldHNbaW50ZXJmYWNlXSA/Pz0gY2hhck9mZnNldDsKICAgICAgICAgIH0gZWxzZSBpZiAoaW50ZXJmYWNlLmNscyA9PSBjb3JlVHlwZXMuZnV0dXJlT3JDbGFzcykgewogICAgICAgICAgICBhZGRQcm9ibGVtKG1lc3NhZ2VJbXBsZW1lbnRzRnV0dXJlT3IsIGNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICBpbnRlcmZhY2UuY2xzLm5hbWUubGVuZ3RoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGltcGxlbWVudGVkLmFkZChpbnRlcmZhY2UpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKHByb2JsZW1zICE9IG51bGwpIHsKICAgICAgcHJvYmxlbXMuZm9yRWFjaCgoQ2xhc3NCdWlsZGVyIGludGVyZmFjZSwgaW50IHJlcGV0aXRpb25zKSB7CiAgICAgICAgYWRkUHJvYmxlbSgKICAgICAgICAgICAgdGVtcGxhdGVJbXBsZW1lbnRzUmVwZWF0ZWQud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgIGludGVyZmFjZS5uYW1lLCByZXBldGl0aW9ucyksCiAgICAgICAgICAgIHByb2JsZW1zT2Zmc2V0c1tpbnRlcmZhY2VdLAogICAgICAgICAgICBub0xlbmd0aCk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgdm9pZCBjaGVja0JvdW5kc0luU3VwZXJ0eXBlKAogICAgICBTdXBlcnR5cGUgc3VwZXJ0eXBlLCBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50KSB7CiAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5ID0gdGhpcy5saWJyYXJ5OwoKICAgIExpc3Q8VHlwZUFyZ3VtZW50SXNzdWU+IGlzc3VlcyA9IGZpbmRUeXBlQXJndW1lbnRJc3N1ZXMoCiAgICAgICAgbmV3IEludGVyZmFjZVR5cGUoc3VwZXJ0eXBlLmNsYXNzTm9kZSwgc3VwZXJ0eXBlLnR5cGVBcmd1bWVudHMpLAogICAgICAgIHR5cGVFbnZpcm9ubWVudCwKICAgICAgICBhbGxvd1N1cGVyQm91bmRlZDogZmFsc2UpOwogICAgaWYgKGlzc3VlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoVHlwZUFyZ3VtZW50SXNzdWUgaXNzdWUgaW4gaXNzdWVzKSB7CiAgICAgICAgTWVzc2FnZSBtZXNzYWdlOwogICAgICAgIERhcnRUeXBlIGFyZ3VtZW50ID0gaXNzdWUuYXJndW1lbnQ7CiAgICAgICAgVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyID0gaXNzdWUudHlwZVBhcmFtZXRlcjsKICAgICAgICBib29sIGluZmVycmVkID0gbGlicmFyeS5pbmZlcnJlZFR5cGVzLmNvbnRhaW5zKGFyZ3VtZW50KTsKICAgICAgICBpZiAoYXJndW1lbnQgaXMgRnVuY3Rpb25UeXBlICYmIGFyZ3VtZW50LnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHsKICAgICAgICAgIGlmIChpbmZlcnJlZCkgewogICAgICAgICAgICBtZXNzYWdlID0gdGVtcGxhdGVHZW5lcmljRnVuY3Rpb25UeXBlSW5mZXJyZWRBc0FjdHVhbFR5cGVBcmd1bWVudAogICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoYXJndW1lbnQpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VHZW5lcmljRnVuY3Rpb25UeXBlVXNlZEFzQWN0dWFsVHlwZUFyZ3VtZW50OwogICAgICAgICAgfQogICAgICAgICAgdHlwZVBhcmFtZXRlciA9IG51bGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChpbmZlcnJlZCkgewogICAgICAgICAgICBtZXNzYWdlID0KICAgICAgICAgICAgICAgIHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGVJbmZlcnJlZC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50LAogICAgICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIuYm91bmQsCiAgICAgICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlci5uYW1lLAogICAgICAgICAgICAgICAgICAgIGdldEdlbmVyaWNUeXBlTmFtZShpc3N1ZS5lbmNsb3NpbmdUeXBlKSwKICAgICAgICAgICAgICAgICAgICBzdXBlcnR5cGUuY2xhc3NOb2RlLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgbmFtZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBtZXNzYWdlID0gdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJblN1cGVydHlwZS53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgYXJndW1lbnQsCiAgICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVyLmJvdW5kLAogICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlci5uYW1lLAogICAgICAgICAgICAgICAgZ2V0R2VuZXJpY1R5cGVOYW1lKGlzc3VlLmVuY2xvc2luZ1R5cGUpLAogICAgICAgICAgICAgICAgc3VwZXJ0eXBlLmNsYXNzTm9kZS5uYW1lLAogICAgICAgICAgICAgICAgbmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBsaWJyYXJ5LnJlcG9ydFR5cGVBcmd1bWVudElzc3VlKAogICAgICAgICAgICBtZXNzYWdlLCBmaWxlVXJpLCBjaGFyT2Zmc2V0LCB0eXBlUGFyYW1ldGVyKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBjaGVja0JvdW5kc0luT3V0bGluZShUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50KSB7CiAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5ID0gdGhpcy5saWJyYXJ5OwoKICAgIC8vIENoZWNrIGluIGJvdW5kcyBvZiBvd24gdHlwZSB2YXJpYWJsZXMuCiAgICBmb3IgKFR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyIGluIGNscy50eXBlUGFyYW1ldGVycykgewogICAgICBMaXN0PFR5cGVBcmd1bWVudElzc3VlPiBpc3N1ZXMgPSBmaW5kVHlwZUFyZ3VtZW50SXNzdWVzKAogICAgICAgICAgcGFyYW1ldGVyLmJvdW5kLCB0eXBlRW52aXJvbm1lbnQsCiAgICAgICAgICBhbGxvd1N1cGVyQm91bmRlZDogdHJ1ZSk7CiAgICAgIGlmIChpc3N1ZXMgIT0gbnVsbCkgewogICAgICAgIGZvciAoVHlwZUFyZ3VtZW50SXNzdWUgaXNzdWUgaW4gaXNzdWVzKSB7CiAgICAgICAgICBEYXJ0VHlwZSBhcmd1bWVudCA9IGlzc3VlLmFyZ3VtZW50OwogICAgICAgICAgVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyID0gaXNzdWUudHlwZVBhcmFtZXRlcjsKICAgICAgICAgIGlmIChsaWJyYXJ5LmluZmVycmVkVHlwZXMuY29udGFpbnMoYXJndW1lbnQpKSB7CiAgICAgICAgICAgIC8vIEluZmVyZW5jZSBpbiB0eXBlIGV4cHJlc3Npb25zIGluIHRoZSBzdXBlcnR5cGVzIGJvaWxzIGRvd24gdG8KICAgICAgICAgICAgLy8gaW5zdGFudGlhdGUtdG8tYm91bmQgd2hpY2ggc2hvdWxkbid0IHByb2R1Y2UgYW55dGhpbmcgdGhhdCBicmVha3MKICAgICAgICAgICAgLy8gdGhlIGJvdW5kcyBhZnRlciB0aGUgbm9uLXNpbXBsaWNpdHkgY2hlY2tzIGFyZSBkb25lLiAgU28sIGFueQogICAgICAgICAgICAvLyB2aW9sYXRpb24gaGVyZSBpcyB0aGUgcmVzdWx0IG9mIG5vbi1zaW1wbGUgYm91bmRzLCBhbmQgdGhlIGVycm9yCiAgICAgICAgICAgIC8vIGlzIHJlcG9ydGVkIGVsc2V3aGVyZS4KICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CgogICAgICAgICAgTWVzc2FnZSBtZXNzYWdlOwogICAgICAgICAgaWYgKGFyZ3VtZW50IGlzIEZ1bmN0aW9uVHlwZSAmJiBhcmd1bWVudC50eXBlUGFyYW1ldGVycy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlR2VuZXJpY0Z1bmN0aW9uVHlwZVVzZWRBc0FjdHVhbFR5cGVBcmd1bWVudDsKICAgICAgICAgICAgdHlwZVBhcmFtZXRlciA9IG51bGw7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBtZXNzYWdlID0gdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnQud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgIGFyZ3VtZW50LAogICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlci5ib3VuZCwKICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIubmFtZSwKICAgICAgICAgICAgICAgIGdldEdlbmVyaWNUeXBlTmFtZShpc3N1ZS5lbmNsb3NpbmdUeXBlKSk7CiAgICAgICAgICB9CgogICAgICAgICAgbGlicmFyeS5yZXBvcnRUeXBlQXJndW1lbnRJc3N1ZSgKICAgICAgICAgICAgICBtZXNzYWdlLCBmaWxlVXJpLCBwYXJhbWV0ZXIuZmlsZU9mZnNldCwgdHlwZVBhcmFtZXRlcik7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgLy8gQ2hlY2sgaW4gc3VwZXJzLgogICAgaWYgKGNscy5zdXBlcnR5cGUgIT0gbnVsbCkgewogICAgICBjaGVja0JvdW5kc0luU3VwZXJ0eXBlKGNscy5zdXBlcnR5cGUsIHR5cGVFbnZpcm9ubWVudCk7CiAgICB9CiAgICBpZiAoY2xzLm1peGVkSW5UeXBlICE9IG51bGwpIHsKICAgICAgY2hlY2tCb3VuZHNJblN1cGVydHlwZShjbHMubWl4ZWRJblR5cGUsIHR5cGVFbnZpcm9ubWVudCk7CiAgICB9CiAgICBpZiAoY2xzLmltcGxlbWVudGVkVHlwZXMgIT0gbnVsbCkgewogICAgICBmb3IgKFN1cGVydHlwZSBzdXBlcnR5cGUgaW4gY2xzLmltcGxlbWVudGVkVHlwZXMpIHsKICAgICAgICBjaGVja0JvdW5kc0luU3VwZXJ0eXBlKHN1cGVydHlwZSwgdHlwZUVudmlyb25tZW50KTsKICAgICAgfQogICAgfQoKICAgIC8vIENoZWNrIGluIG1lbWJlcnMuCiAgICBmb3IgKEZpZWxkIGZpZWxkIGluIGNscy5maWVsZHMpIHsKICAgICAgbGlicmFyeS5jaGVja0JvdW5kc0luRmllbGQoZmllbGQsIHR5cGVFbnZpcm9ubWVudCk7CiAgICB9CiAgICBmb3IgKFByb2NlZHVyZSBwcm9jZWR1cmUgaW4gY2xzLnByb2NlZHVyZXMpIHsKICAgICAgbGlicmFyeS5jaGVja0JvdW5kc0luRnVuY3Rpb25Ob2RlKAogICAgICAgICAgcHJvY2VkdXJlLmZ1bmN0aW9uLCB0eXBlRW52aXJvbm1lbnQsIGZpbGVVcmkpOwogICAgfQogICAgZm9yIChDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciBpbiBjbHMuY29uc3RydWN0b3JzKSB7CiAgICAgIGxpYnJhcnkuY2hlY2tCb3VuZHNJbkZ1bmN0aW9uTm9kZSgKICAgICAgICAgIGNvbnN0cnVjdG9yLmZ1bmN0aW9uLCB0eXBlRW52aXJvbm1lbnQsIGZpbGVVcmkpOwogICAgfQogICAgZm9yIChSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvciByZWRpcmVjdGluZwogICAgICAgIGluIGNscy5yZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnMpIHsKICAgICAgbGlicmFyeS5jaGVja0JvdW5kc0luRnVuY3Rpb25Ob2RlUGFydHMoCiAgICAgICAgICB0eXBlRW52aXJvbm1lbnQsIGZpbGVVcmksIHJlZGlyZWN0aW5nLmZpbGVPZmZzZXQsCiAgICAgICAgICB0eXBlUGFyYW1ldGVyczogcmVkaXJlY3RpbmcudHlwZVBhcmFtZXRlcnMsCiAgICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVyczogcmVkaXJlY3RpbmcucG9zaXRpb25hbFBhcmFtZXRlcnMsCiAgICAgICAgICBuYW1lZFBhcmFtZXRlcnM6IHJlZGlyZWN0aW5nLm5hbWVkUGFyYW1ldGVycyk7CiAgICB9CiAgfQoKICB2b2lkIGFkZFJlZGlyZWN0aW5nQ29uc3RydWN0b3IoCiAgICAgIFByb2NlZHVyZUJ1aWxkZXIgY29uc3RydWN0b3JCdWlsZGVyLCBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICAvLyBBZGQgYSBuZXcgc3ludGhldGljIGZpZWxkIHRvIHRoaXMgY2xhc3MgZm9yIHJlcHJlc2VudGluZyBmYWN0b3J5CiAgICAvLyBjb25zdHJ1Y3RvcnMuIFRoaXMgaXMgdXNlZCB0byBzdXBwb3J0IHJlc29sdmluZyBzdWNoIGNvbnN0cnVjdG9ycyBpbgogICAgLy8gc291cmNlIGNvZGUuCiAgICAvLwogICAgLy8gVGhlIHN5bnRoZXRpYyBmaWVsZCBsb29rcyBsaWtlIHRoaXM6CiAgICAvLwogICAgLy8gICAgIGZpbmFsIF9yZWRpcmVjdGluZyMgPSBbYzEsIC4uLiwgY25dOwogICAgLy8KICAgIC8vIFdoZXJlIGVhY2ggYzEgLi4uIGNuIGFyZSBhbiBpbnN0YW5jZSBvZiBbU3RhdGljR2V0XSB3aG9zZSB0YXJnZXQgaXMKICAgIC8vIFtjb25zdHJ1Y3Rvci50YXJnZXRdLgogICAgLy8KICAgIC8vIFRPRE8oYWhlKTogQWRkIGEga2VybmVsIG5vZGUgdG8gcmVwcmVzZW50IHJlZGlyZWN0aW5nIGZhY3RvcnkgYm9kaWVzLgogICAgRGlsbE1lbWJlckJ1aWxkZXIgY29uc3RydWN0b3JzRmllbGQgPQogICAgICAgIG9yaWdpbi5zY29wZS5sb2NhbC5wdXRJZkFic2VudCgiX3JlZGlyZWN0aW5nIyIsICgpIHsKICAgICAgTGlzdExpdGVyYWwgbGl0ZXJhbCA9IG5ldyBMaXN0TGl0ZXJhbCg8RXhwcmVzc2lvbj5bXSk7CiAgICAgIE5hbWUgbmFtZSA9IG5ldyBOYW1lKCJfcmVkaXJlY3RpbmcjIiwgbGlicmFyeS5saWJyYXJ5KTsKICAgICAgRmllbGQgZmllbGQgPSBuZXcgRmllbGQobmFtZSwKICAgICAgICAgIGlzU3RhdGljOiB0cnVlLCBpbml0aWFsaXplcjogbGl0ZXJhbCwgZmlsZVVyaTogY2xzLmZpbGVVcmkpCiAgICAgICAgLi5maWxlT2Zmc2V0ID0gY2xzLmZpbGVPZmZzZXQ7CiAgICAgIGNscy5hZGRNZW1iZXIoZmllbGQpOwogICAgICByZXR1cm4gbmV3IERpbGxNZW1iZXJCdWlsZGVyKGZpZWxkLCB0aGlzKTsKICAgIH0pOwogICAgRmllbGQgZmllbGQgPSBjb25zdHJ1Y3RvcnNGaWVsZC5tZW1iZXI7CiAgICBMaXN0TGl0ZXJhbCBsaXRlcmFsID0gZmllbGQuaW5pdGlhbGl6ZXI7CiAgICBsaXRlcmFsLmV4cHJlc3Npb25zCiAgICAgICAgLmFkZChuZXcgU3RhdGljR2V0KGNvbnN0cnVjdG9yQnVpbGRlci5wcm9jZWR1cmUpLi5wYXJlbnQgPSBsaXRlcmFsKTsKICB9CgogIHZvaWQgaGFuZGxlU2VlbkNvdmFyaWFudCgKICAgICAgVHlwZXMgdHlwZXMsCiAgICAgIE1lbWJlciBkZWNsYXJlZE1lbWJlciwKICAgICAgTWVtYmVyIGludGVyZmFjZU1lbWJlciwKICAgICAgYm9vbCBpc1NldHRlciwKICAgICAgY2FsbGJhY2soTWVtYmVyIGRlY2xhcmVkTWVtYmVyLCBNZW1iZXIgaW50ZXJmYWNlTWVtYmVyLCBib29sIGlzU2V0dGVyKSkgewogICAgLy8gV2hlbiBhIHBhcmFtZXRlciBpcyBjb3ZhcmlhbnQgd2UgaGF2ZSB0byBjaGVjayB0aGF0IHdlIGFsc28KICAgIC8vIG92ZXJyaWRlIHRoZSBzYW1lIG1lbWJlciBpbiBhbGwgcGFyZW50cy4KICAgIGZvciAoU3VwZXJ0eXBlIHN1cGVydHlwZSBpbiBpbnRlcmZhY2VNZW1iZXIuZW5jbG9zaW5nQ2xhc3Muc3VwZXJzKSB7CiAgICAgIE1lbWJlciBtID0gdHlwZXMuaGllcmFyY2h5LmdldEludGVyZmFjZU1lbWJlcktlcm5lbCgKICAgICAgICAgIHN1cGVydHlwZS5jbGFzc05vZGUsIGludGVyZmFjZU1lbWJlci5uYW1lLCBpc1NldHRlcik7CiAgICAgIGlmIChtICE9IG51bGwpIHsKICAgICAgICBjYWxsYmFjayhkZWNsYXJlZE1lbWJlciwgbSwgaXNTZXR0ZXIpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIGNoZWNrT3ZlcnJpZGUoCiAgICAgIFR5cGVzIHR5cGVzLAogICAgICBNZW1iZXIgZGVjbGFyZWRNZW1iZXIsCiAgICAgIE1lbWJlciBpbnRlcmZhY2VNZW1iZXIsCiAgICAgIGJvb2wgaXNTZXR0ZXIsCiAgICAgIGNhbGxiYWNrKE1lbWJlciBkZWNsYXJlZE1lbWJlciwgTWVtYmVyIGludGVyZmFjZU1lbWJlciwgYm9vbCBpc1NldHRlciksCiAgICAgIHtib29sIGlzSW50ZXJmYWNlQ2hlY2sgPSBmYWxzZX0pIHsKICAgIGlmIChkZWNsYXJlZE1lbWJlciA9PSBpbnRlcmZhY2VNZW1iZXIpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGRlY2xhcmVkTWVtYmVyIGlzIENvbnN0cnVjdG9yIHx8IGludGVyZmFjZU1lbWJlciBpcyBDb25zdHJ1Y3RvcikgewogICAgICB1bmltcGxlbWVudGVkKAogICAgICAgICAgIkNvbnN0cnVjdG9yIGluIG92ZXJyaWRlIGNoZWNrLiIsIGRlY2xhcmVkTWVtYmVyLmZpbGVPZmZzZXQsIGZpbGVVcmkpOwogICAgfQogICAgaWYgKGRlY2xhcmVkTWVtYmVyIGlzIFByb2NlZHVyZSAmJiBpbnRlcmZhY2VNZW1iZXIgaXMgUHJvY2VkdXJlKSB7CiAgICAgIGlmIChkZWNsYXJlZE1lbWJlci5raW5kID09IFByb2NlZHVyZUtpbmQuTWV0aG9kICYmCiAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIua2luZCA9PSBQcm9jZWR1cmVLaW5kLk1ldGhvZCkgewogICAgICAgIGJvb2wgc2VlbkNvdmFyaWFudCA9IGNoZWNrTWV0aG9kT3ZlcnJpZGUoCiAgICAgICAgICAgIHR5cGVzLCBkZWNsYXJlZE1lbWJlciwgaW50ZXJmYWNlTWVtYmVyLCBpc0ludGVyZmFjZUNoZWNrKTsKICAgICAgICBpZiAoc2VlbkNvdmFyaWFudCkgewogICAgICAgICAgaGFuZGxlU2VlbkNvdmFyaWFudCgKICAgICAgICAgICAgICB0eXBlcywgZGVjbGFyZWRNZW1iZXIsIGludGVyZmFjZU1lbWJlciwgaXNTZXR0ZXIsIGNhbGxiYWNrKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGRlY2xhcmVkTWVtYmVyLmtpbmQgPT0gUHJvY2VkdXJlS2luZC5HZXR0ZXIgJiYKICAgICAgICAgIGludGVyZmFjZU1lbWJlci5raW5kID09IFByb2NlZHVyZUtpbmQuR2V0dGVyKSB7CiAgICAgICAgY2hlY2tHZXR0ZXJPdmVycmlkZSgKICAgICAgICAgICAgdHlwZXMsIGRlY2xhcmVkTWVtYmVyLCBpbnRlcmZhY2VNZW1iZXIsIGlzSW50ZXJmYWNlQ2hlY2spOwogICAgICB9CiAgICAgIGlmIChkZWNsYXJlZE1lbWJlci5raW5kID09IFByb2NlZHVyZUtpbmQuU2V0dGVyICYmCiAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIua2luZCA9PSBQcm9jZWR1cmVLaW5kLlNldHRlcikgewogICAgICAgIGJvb2wgc2VlbkNvdmFyaWFudCA9IGNoZWNrU2V0dGVyT3ZlcnJpZGUoCiAgICAgICAgICAgIHR5cGVzLCBkZWNsYXJlZE1lbWJlciwgaW50ZXJmYWNlTWVtYmVyLCBpc0ludGVyZmFjZUNoZWNrKTsKICAgICAgICBpZiAoc2VlbkNvdmFyaWFudCkgewogICAgICAgICAgaGFuZGxlU2VlbkNvdmFyaWFudCgKICAgICAgICAgICAgICB0eXBlcywgZGVjbGFyZWRNZW1iZXIsIGludGVyZmFjZU1lbWJlciwgaXNTZXR0ZXIsIGNhbGxiYWNrKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGJvb2wgZGVjbGFyZWRNZW1iZXJIYXNHZXR0ZXIgPSBkZWNsYXJlZE1lbWJlciBpcyBGaWVsZCB8fAogICAgICAgICAgZGVjbGFyZWRNZW1iZXIgaXMgUHJvY2VkdXJlICYmIGRlY2xhcmVkTWVtYmVyLmlzR2V0dGVyOwogICAgICBib29sIGludGVyZmFjZU1lbWJlckhhc0dldHRlciA9IGludGVyZmFjZU1lbWJlciBpcyBGaWVsZCB8fAogICAgICAgICAgaW50ZXJmYWNlTWVtYmVyIGlzIFByb2NlZHVyZSAmJiBpbnRlcmZhY2VNZW1iZXIuaXNHZXR0ZXI7CiAgICAgIGJvb2wgZGVjbGFyZWRNZW1iZXJIYXNTZXR0ZXIgPSAoZGVjbGFyZWRNZW1iZXIgaXMgRmllbGQgJiYKICAgICAgICAgICAgICAhZGVjbGFyZWRNZW1iZXIuaXNGaW5hbCAmJgogICAgICAgICAgICAgICFkZWNsYXJlZE1lbWJlci5pc0NvbnN0KSB8fAogICAgICAgICAgZGVjbGFyZWRNZW1iZXIgaXMgUHJvY2VkdXJlICYmIGRlY2xhcmVkTWVtYmVyLmlzU2V0dGVyOwogICAgICBib29sIGludGVyZmFjZU1lbWJlckhhc1NldHRlciA9IChpbnRlcmZhY2VNZW1iZXIgaXMgRmllbGQgJiYKICAgICAgICAgICAgICAhaW50ZXJmYWNlTWVtYmVyLmlzRmluYWwgJiYKICAgICAgICAgICAgICAhaW50ZXJmYWNlTWVtYmVyLmlzQ29uc3QpIHx8CiAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIgaXMgUHJvY2VkdXJlICYmIGludGVyZmFjZU1lbWJlci5pc1NldHRlcjsKICAgICAgaWYgKGRlY2xhcmVkTWVtYmVySGFzR2V0dGVyICYmIGludGVyZmFjZU1lbWJlckhhc0dldHRlcikgewogICAgICAgIGNoZWNrR2V0dGVyT3ZlcnJpZGUoCiAgICAgICAgICAgIHR5cGVzLCBkZWNsYXJlZE1lbWJlciwgaW50ZXJmYWNlTWVtYmVyLCBpc0ludGVyZmFjZUNoZWNrKTsKICAgICAgfQogICAgICBpZiAoZGVjbGFyZWRNZW1iZXJIYXNTZXR0ZXIgJiYgaW50ZXJmYWNlTWVtYmVySGFzU2V0dGVyKSB7CiAgICAgICAgYm9vbCBzZWVuQ292YXJpYW50ID0gY2hlY2tTZXR0ZXJPdmVycmlkZSgKICAgICAgICAgICAgdHlwZXMsIGRlY2xhcmVkTWVtYmVyLCBpbnRlcmZhY2VNZW1iZXIsIGlzSW50ZXJmYWNlQ2hlY2spOwogICAgICAgIGlmIChzZWVuQ292YXJpYW50KSB7CiAgICAgICAgICBoYW5kbGVTZWVuQ292YXJpYW50KAogICAgICAgICAgICAgIHR5cGVzLCBkZWNsYXJlZE1lbWJlciwgaW50ZXJmYWNlTWVtYmVyLCBpc1NldHRlciwgY2FsbGJhY2spOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgLy8gVE9ETyhhaGUpOiBIYW5kbGUgb3RoZXIgY2FzZXM6IGFjY2Vzc29ycywgb3BlcmF0b3JzLCBhbmQgZmllbGRzLgogIH0KCiAgdm9pZCBjaGVja092ZXJyaWRlcygKICAgICAgQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5LCBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50KSB7fQoKICB2b2lkIGNoZWNrQWJzdHJhY3RNZW1iZXJzKENvcmVUeXBlcyBjb3JlVHlwZXMsIENsYXNzSGllcmFyY2h5IGhpZXJhcmNoeSwKICAgICAgVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCkge30KCiAgYm9vbCBoYXNVc2VyRGVmaW5lZE5vU3VjaE1ldGhvZCgKICAgICAgQ2xhc3Mga2xhc3MsIENsYXNzSGllcmFyY2h5IGhpZXJhcmNoeSwgQ2xhc3Mgb2JqZWN0Q2xhc3MpIHsKICAgIE1lbWJlciBub1N1Y2hNZXRob2QgPSBoaWVyYXJjaHkuZ2V0RGlzcGF0Y2hUYXJnZXQoa2xhc3MsIG5vU3VjaE1ldGhvZE5hbWUpOwogICAgcmV0dXJuIG5vU3VjaE1ldGhvZCAhPSBudWxsICYmIG5vU3VjaE1ldGhvZC5lbmNsb3NpbmdDbGFzcyAhPSBvYmplY3RDbGFzczsKICB9CgogIHZvaWQgdHJhbnNmb3JtUHJvY2VkdXJlVG9Ob1N1Y2hNZXRob2RGb3J3YXJkZXIoCiAgICAgIE1lbWJlciBub1N1Y2hNZXRob2RJbnRlcmZhY2UsIEtlcm5lbFRhcmdldCB0YXJnZXQsIFByb2NlZHVyZSBwcm9jZWR1cmUpIHsKICAgIFN0cmluZyBwcmVmaXggPQogICAgICAgIHByb2NlZHVyZS5pc0dldHRlciA/ICdnZXQ6JyA6IHByb2NlZHVyZS5pc1NldHRlciA/ICdzZXQ6JyA6ICcnOwogICAgRXhwcmVzc2lvbiBpbnZvY2F0aW9uID0gdGFyZ2V0LmJhY2tlbmRUYXJnZXQuaW5zdGFudGlhdGVJbnZvY2F0aW9uKAogICAgICAgIHRhcmdldC5sb2FkZXIuY29yZVR5cGVzLAogICAgICAgIG5ldyBUaGlzRXhwcmVzc2lvbigpLAogICAgICAgIHByZWZpeCArIHByb2NlZHVyZS5uYW1lLm5hbWUsCiAgICAgICAgbmV3IEFyZ3VtZW50cy5mb3J3YXJkZWQocHJvY2VkdXJlLmZ1bmN0aW9uKSwKICAgICAgICBwcm9jZWR1cmUuZmlsZU9mZnNldCwKICAgICAgICAvKmlzU3VwZXI9Ki8gZmFsc2UpOwogICAgRXhwcmVzc2lvbiByZXN1bHQgPSBuZXcgTWV0aG9kSW52b2NhdGlvbihuZXcgVGhpc0V4cHJlc3Npb24oKSwKICAgICAgICBub1N1Y2hNZXRob2ROYW1lLCBuZXcgQXJndW1lbnRzKFtpbnZvY2F0aW9uXSksIG5vU3VjaE1ldGhvZEludGVyZmFjZSkKICAgICAgLi5maWxlT2Zmc2V0ID0gcHJvY2VkdXJlLmZpbGVPZmZzZXQ7CiAgICBpZiAocHJvY2VkdXJlLmZ1bmN0aW9uLnJldHVyblR5cGUgaXMhIFZvaWRUeXBlKSB7CiAgICAgIHJlc3VsdCA9IG5ldyBBc0V4cHJlc3Npb24ocmVzdWx0LCBwcm9jZWR1cmUuZnVuY3Rpb24ucmV0dXJuVHlwZSkKICAgICAgICAuLmlzVHlwZUVycm9yID0gdHJ1ZQogICAgICAgIC4uZmlsZU9mZnNldCA9IHByb2NlZHVyZS5maWxlT2Zmc2V0OwogICAgfQogICAgcHJvY2VkdXJlLmZ1bmN0aW9uLmJvZHkgPSBuZXcgUmV0dXJuU3RhdGVtZW50KHJlc3VsdCkKICAgICAgLi5maWxlT2Zmc2V0ID0gcHJvY2VkdXJlLmZpbGVPZmZzZXQ7CiAgICBwcm9jZWR1cmUuZnVuY3Rpb24uYm9keS5wYXJlbnQgPSBwcm9jZWR1cmUuZnVuY3Rpb247CgogICAgcHJvY2VkdXJlLmlzQWJzdHJhY3QgPSBmYWxzZTsKICAgIHByb2NlZHVyZS5pc05vU3VjaE1ldGhvZEZvcndhcmRlciA9IHRydWU7CiAgICBwcm9jZWR1cmUuaXNGb3J3YXJkaW5nU3R1YiA9IGZhbHNlOwogICAgcHJvY2VkdXJlLmlzRm9yd2FyZGluZ1NlbWlTdHViID0gZmFsc2U7CiAgfQoKICB2b2lkIGFkZE5vU3VjaE1ldGhvZEZvcndhcmRlckZvclByb2NlZHVyZShNZW1iZXIgbm9TdWNoTWV0aG9kLAogICAgICBLZXJuZWxUYXJnZXQgdGFyZ2V0LCBQcm9jZWR1cmUgcHJvY2VkdXJlLCBDbGFzc0hpZXJhcmNoeSBoaWVyYXJjaHkpIHsKICAgIENsb25lV2l0aG91dEJvZHkgY2xvbmVyID0gbmV3IENsb25lV2l0aG91dEJvZHkoCiAgICAgICAgdHlwZVN1YnN0aXR1dGlvbjogdHlwZV9hbGdlYnJhLmdldFN1YnN0aXR1dGlvbk1hcCgKICAgICAgICAgICAgaGllcmFyY2h5LmdldENsYXNzQXNJbnN0YW5jZU9mKGNscywgcHJvY2VkdXJlLmVuY2xvc2luZ0NsYXNzKSksCiAgICAgICAgY2xvbmVBbm5vdGF0aW9uczogZmFsc2UpOwogICAgUHJvY2VkdXJlIGNsb25lZCA9IGNsb25lci5jbG9uZShwcm9jZWR1cmUpLi5pc0V4dGVybmFsID0gZmFsc2U7CiAgICB0cmFuc2Zvcm1Qcm9jZWR1cmVUb05vU3VjaE1ldGhvZEZvcndhcmRlcihub1N1Y2hNZXRob2QsIHRhcmdldCwgY2xvbmVkKTsKICAgIGNscy5wcm9jZWR1cmVzLmFkZChjbG9uZWQpOwogICAgY2xvbmVkLnBhcmVudCA9IGNsczsKCiAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5ID0gdGhpcy5saWJyYXJ5OwogICAgbGlicmFyeS5mb3J3YXJkZXJzT3JpZ2lucy5hZGQoY2xvbmVkKTsKICAgIGxpYnJhcnkuZm9yd2FyZGVyc09yaWdpbnMuYWRkKHByb2NlZHVyZSk7CiAgfQoKICB2b2lkIGFkZE5vU3VjaE1ldGhvZEZvcndhcmRlckdldHRlckZvckZpZWxkKE1lbWJlciBub1N1Y2hNZXRob2QsCiAgICAgIEtlcm5lbFRhcmdldCB0YXJnZXQsIEZpZWxkIGZpZWxkLCBDbGFzc0hpZXJhcmNoeSBoaWVyYXJjaHkpIHsKICAgIFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZnJvbVN1cGVydHlwZSgKICAgICAgICBoaWVyYXJjaHkuZ2V0Q2xhc3NBc0luc3RhbmNlT2YoY2xzLCBmaWVsZC5lbmNsb3NpbmdDbGFzcykpOwogICAgUHJvY2VkdXJlIGdldHRlciA9IG5ldyBQcm9jZWR1cmUoCiAgICAgICAgZmllbGQubmFtZSwKICAgICAgICBQcm9jZWR1cmVLaW5kLkdldHRlciwKICAgICAgICBuZXcgRnVuY3Rpb25Ob2RlKG51bGwsCiAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzOiA8VHlwZVBhcmFtZXRlcj5bXSwKICAgICAgICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnM6IDxWYXJpYWJsZURlY2xhcmF0aW9uPltdLAogICAgICAgICAgICBuYW1lZFBhcmFtZXRlcnM6IDxWYXJpYWJsZURlY2xhcmF0aW9uPltdLAogICAgICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50OiAwLAogICAgICAgICAgICByZXR1cm5UeXBlOiBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoZmllbGQudHlwZSkpLAogICAgICAgIGZpbGVVcmk6IGZpZWxkLmZpbGVVcmkpCiAgICAgIC4uZmlsZU9mZnNldCA9IGZpZWxkLmZpbGVPZmZzZXQ7CiAgICB0cmFuc2Zvcm1Qcm9jZWR1cmVUb05vU3VjaE1ldGhvZEZvcndhcmRlcihub1N1Y2hNZXRob2QsIHRhcmdldCwgZ2V0dGVyKTsKICAgIGNscy5wcm9jZWR1cmVzLmFkZChnZXR0ZXIpOwogICAgZ2V0dGVyLnBhcmVudCA9IGNsczsKICB9CgogIHZvaWQgYWRkTm9TdWNoTWV0aG9kRm9yd2FyZGVyU2V0dGVyRm9yRmllbGQoTWVtYmVyIG5vU3VjaE1ldGhvZCwKICAgICAgS2VybmVsVGFyZ2V0IHRhcmdldCwgRmllbGQgZmllbGQsIENsYXNzSGllcmFyY2h5IGhpZXJhcmNoeSkgewogICAgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tU3VwZXJ0eXBlKAogICAgICAgIGhpZXJhcmNoeS5nZXRDbGFzc0FzSW5zdGFuY2VPZihjbHMsIGZpZWxkLmVuY2xvc2luZ0NsYXNzKSk7CiAgICBQcm9jZWR1cmUgc2V0dGVyID0gbmV3IFByb2NlZHVyZSgKICAgICAgICBmaWVsZC5uYW1lLAogICAgICAgIFByb2NlZHVyZUtpbmQuU2V0dGVyLAogICAgICAgIG5ldyBGdW5jdGlvbk5vZGUobnVsbCwKICAgICAgICAgICAgdHlwZVBhcmFtZXRlcnM6IDxUeXBlUGFyYW1ldGVyPltdLAogICAgICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVyczogPFZhcmlhYmxlRGVjbGFyYXRpb24+WwogICAgICAgICAgICAgIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKCJ2YWx1ZSIsCiAgICAgICAgICAgICAgICAgIHR5cGU6IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShmaWVsZC50eXBlKSkKICAgICAgICAgICAgXSwKICAgICAgICAgICAgbmFtZWRQYXJhbWV0ZXJzOiA8VmFyaWFibGVEZWNsYXJhdGlvbj5bXSwKICAgICAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogMSwKICAgICAgICAgICAgcmV0dXJuVHlwZTogY29uc3QgVm9pZFR5cGUoKSksCiAgICAgICAgZmlsZVVyaTogZmllbGQuZmlsZVVyaSkKICAgICAgLi5maWxlT2Zmc2V0ID0gZmllbGQuZmlsZU9mZnNldDsKICAgIHRyYW5zZm9ybVByb2NlZHVyZVRvTm9TdWNoTWV0aG9kRm9yd2FyZGVyKG5vU3VjaE1ldGhvZCwgdGFyZ2V0LCBzZXR0ZXIpOwogICAgY2xzLnByb2NlZHVyZXMuYWRkKHNldHRlcik7CiAgICBzZXR0ZXIucGFyZW50ID0gY2xzOwogIH0KCiAgLy8vIEFkZHMgbm9TdWNoTWV0aG9kIGZvcndhcmRpbmcgc3R1YnMgdG8gdGhpcyBjbGFzcy4gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlCiAgLy8vIGNsYXNzIHdhcyBtb2RpZmllZC4KICBib29sIGFkZE5vU3VjaE1ldGhvZEZvcndhcmRlcnMoCiAgICAgIEtlcm5lbFRhcmdldCB0YXJnZXQsIENsYXNzSGllcmFyY2h5IGhpZXJhcmNoeSkgewogICAgaWYgKGNscy5pc0Fic3RyYWN0KSByZXR1cm4gZmFsc2U7CgogICAgU2V0PE5hbWU+IGV4aXN0aW5nRm9yd2FyZGVyc05hbWVzID0gbmV3IFNldDxOYW1lPigpOwogICAgU2V0PE5hbWU+IGV4aXN0aW5nU2V0dGVyRm9yd2FyZGVyc05hbWVzID0gbmV3IFNldDxOYW1lPigpOwogICAgQ2xhc3MgbGVhc3RDb25jcmV0ZVN1cGVyY2xhc3MgPSBjbHMuc3VwZXJjbGFzczsKICAgIHdoaWxlICgKICAgICAgICBsZWFzdENvbmNyZXRlU3VwZXJjbGFzcyAhPSBudWxsICYmIGxlYXN0Q29uY3JldGVTdXBlcmNsYXNzLmlzQWJzdHJhY3QpIHsKICAgICAgbGVhc3RDb25jcmV0ZVN1cGVyY2xhc3MgPSBsZWFzdENvbmNyZXRlU3VwZXJjbGFzcy5zdXBlcmNsYXNzOwogICAgfQogICAgaWYgKGxlYXN0Q29uY3JldGVTdXBlcmNsYXNzICE9IG51bGwpIHsKICAgICAgYm9vbCBzdXBlckhhc1VzZXJEZWZpbmVkTm9TdWNoTWV0aG9kID0gaGFzVXNlckRlZmluZWROb1N1Y2hNZXRob2QoCiAgICAgICAgICBsZWFzdENvbmNyZXRlU3VwZXJjbGFzcywgaGllcmFyY2h5LCB0YXJnZXQub2JqZWN0Q2xhc3MpOwogICAgICBMaXN0PE1lbWJlcj4gY29uY3JldGUgPQogICAgICAgICAgaGllcmFyY2h5LmdldERpc3BhdGNoVGFyZ2V0cyhsZWFzdENvbmNyZXRlU3VwZXJjbGFzcyk7CiAgICAgIGZvciAoTWVtYmVyIG1lbWJlcgogICAgICAgICAgaW4gaGllcmFyY2h5LmdldEludGVyZmFjZU1lbWJlcnMobGVhc3RDb25jcmV0ZVN1cGVyY2xhc3MpKSB7CiAgICAgICAgaWYgKChzdXBlckhhc1VzZXJEZWZpbmVkTm9TdWNoTWV0aG9kIHx8CiAgICAgICAgICAgICAgICBsZWFzdENvbmNyZXRlU3VwZXJjbGFzcy5lbmNsb3NpbmdMaWJyYXJ5LmNvbXBhcmVUbygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWJlci5lbmNsb3NpbmdDbGFzcy5lbmNsb3NpbmdMaWJyYXJ5KSAhPQogICAgICAgICAgICAgICAgICAgICAgICAwICYmCiAgICAgICAgICAgICAgICAgICAgbWVtYmVyLm5hbWUuaXNQcml2YXRlKSAmJgogICAgICAgICAgICBDbGFzc0hpZXJhcmNoeS5maW5kTWVtYmVyQnlOYW1lKGNvbmNyZXRlLCBtZW1iZXIubmFtZSkgPT0gbnVsbCkgewogICAgICAgICAgZXhpc3RpbmdGb3J3YXJkZXJzTmFtZXMuYWRkKG1lbWJlci5uYW1lKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIExpc3Q8TWVtYmVyPiBjb25jcmV0ZVNldHRlcnMgPQogICAgICAgICAgaGllcmFyY2h5LmdldERpc3BhdGNoVGFyZ2V0cyhsZWFzdENvbmNyZXRlU3VwZXJjbGFzcywgc2V0dGVyczogdHJ1ZSk7CiAgICAgIGZvciAoTWVtYmVyIG1lbWJlciBpbiBoaWVyYXJjaHkKICAgICAgICAgIC5nZXRJbnRlcmZhY2VNZW1iZXJzKGxlYXN0Q29uY3JldGVTdXBlcmNsYXNzLCBzZXR0ZXJzOiB0cnVlKSkgewogICAgICAgIGlmIChDbGFzc0hpZXJhcmNoeS5maW5kTWVtYmVyQnlOYW1lKGNvbmNyZXRlU2V0dGVycywgbWVtYmVyLm5hbWUpID09CiAgICAgICAgICAgIG51bGwpIHsKICAgICAgICAgIGV4aXN0aW5nU2V0dGVyRm9yd2FyZGVyc05hbWVzLmFkZChtZW1iZXIubmFtZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgTWVtYmVyIG5vU3VjaE1ldGhvZCA9IENsYXNzSGllcmFyY2h5LmZpbmRNZW1iZXJCeU5hbWUoCiAgICAgICAgaGllcmFyY2h5LmdldEludGVyZmFjZU1lbWJlcnMoY2xzKSwgbm9TdWNoTWV0aG9kTmFtZSk7CgogICAgTGlzdDxNZW1iZXI+IGNvbmNyZXRlID0gaGllcmFyY2h5LmdldERpc3BhdGNoVGFyZ2V0cyhjbHMpOwogICAgTGlzdDxNZW1iZXI+IGRlY2xhcmVkID0gaGllcmFyY2h5LmdldERlY2xhcmVkTWVtYmVycyhjbHMpOwoKICAgIGJvb2wgY2xzSGFzVXNlckRlZmluZWROb1N1Y2hNZXRob2QgPQogICAgICAgIGhhc1VzZXJEZWZpbmVkTm9TdWNoTWV0aG9kKGNscywgaGllcmFyY2h5LCB0YXJnZXQub2JqZWN0Q2xhc3MpOwogICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICBmb3IgKE1lbWJlciBtZW1iZXIgaW4gaGllcmFyY2h5LmdldEludGVyZmFjZU1lbWJlcnMoY2xzKSkgewogICAgICAvLyBXZSBnZW5lcmF0ZSBhIG5vU3VjaE1ldGhvZCBmb3J3YXJkZXIgZm9yIFttZW1iZXJdIGluIFtjbHNdIGlmIHRoZQogICAgICAvLyBmb2xsb3dpbmcgdGhyZWUgY29uZGl0aW9ucyBhcmUgc2F0aXNmaWVkIHNpbXVsdGFuZW91c2x5OgogICAgICAvLyAxKSBUaGVyZSBpcyBhIHVzZXItZGVmaW5lZCBub1N1Y2hNZXRob2QgaW4gW2Nsc10gb3IgW21lbWJlcl0gaXMgcHJpdmF0ZQogICAgICAvLyAgICBhbmQgdGhlIGVuY2xvc2luZyBsaWJyYXJ5IG9mIFttZW1iZXJdIGlzIGRpZmZlcmVudCBmcm9tIHRoYXQgb2YKICAgICAgLy8gICAgW2Nsc10uCiAgICAgIC8vIDIpIFRoZXJlIGlzIG5vIGltcGxlbWVudGF0aW9uIG9mIFttZW1iZXJdIGluIFtjbHNdLgogICAgICAvLyAzKSBUaGUgc3VwZXJjbGFzcyBvZiBbY2xzXSBoYXMgbm8gZm9yd2FyZGVyIGZvciBbbWVtYmVyXS4KICAgICAgaWYgKG1lbWJlciBpcyBQcm9jZWR1cmUgJiYKICAgICAgICAgIChjbHNIYXNVc2VyRGVmaW5lZE5vU3VjaE1ldGhvZCB8fAogICAgICAgICAgICAgIGNscy5lbmNsb3NpbmdMaWJyYXJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbXBhcmVUbyhtZW1iZXIuZW5jbG9zaW5nQ2xhc3MuZW5jbG9zaW5nTGlicmFyeSkgIT0KICAgICAgICAgICAgICAgICAgICAgIDAgJiYKICAgICAgICAgICAgICAgICAgbWVtYmVyLm5hbWUuaXNQcml2YXRlKSAmJgogICAgICAgICAgQ2xhc3NIaWVyYXJjaHkuZmluZE1lbWJlckJ5TmFtZShjb25jcmV0ZSwgbWVtYmVyLm5hbWUpID09IG51bGwgJiYKICAgICAgICAgICFleGlzdGluZ0ZvcndhcmRlcnNOYW1lcy5jb250YWlucyhtZW1iZXIubmFtZSkpIHsKICAgICAgICBpZiAoQ2xhc3NIaWVyYXJjaHkuZmluZE1lbWJlckJ5TmFtZShkZWNsYXJlZCwgbWVtYmVyLm5hbWUpICE9IG51bGwpIHsKICAgICAgICAgIHRyYW5zZm9ybVByb2NlZHVyZVRvTm9TdWNoTWV0aG9kRm9yd2FyZGVyKAogICAgICAgICAgICAgIG5vU3VjaE1ldGhvZCwgdGFyZ2V0LCBtZW1iZXIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhZGROb1N1Y2hNZXRob2RGb3J3YXJkZXJGb3JQcm9jZWR1cmUoCiAgICAgICAgICAgICAgbm9TdWNoTWV0aG9kLCB0YXJnZXQsIG1lbWJlciwgaGllcmFyY2h5KTsKICAgICAgICB9CiAgICAgICAgZXhpc3RpbmdGb3J3YXJkZXJzTmFtZXMuYWRkKG1lbWJlci5uYW1lKTsKICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQoKICAgICAgaWYgKG1lbWJlciBpcyBGaWVsZCAmJgogICAgICAgICAgQ2xhc3NIaWVyYXJjaHkuZmluZE1lbWJlckJ5TmFtZShjb25jcmV0ZSwgbWVtYmVyLm5hbWUpID09IG51bGwgJiYKICAgICAgICAgICFleGlzdGluZ0ZvcndhcmRlcnNOYW1lcy5jb250YWlucyhtZW1iZXIubmFtZSkpIHsKICAgICAgICBhZGROb1N1Y2hNZXRob2RGb3J3YXJkZXJHZXR0ZXJGb3JGaWVsZCgKICAgICAgICAgICAgbm9TdWNoTWV0aG9kLCB0YXJnZXQsIG1lbWJlciwgaGllcmFyY2h5KTsKICAgICAgICBleGlzdGluZ0ZvcndhcmRlcnNOYW1lcy5hZGQobWVtYmVyLm5hbWUpOwogICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICB9CiAgICB9CgogICAgTGlzdDxNZW1iZXI+IGNvbmNyZXRlU2V0dGVycyA9CiAgICAgICAgaGllcmFyY2h5LmdldERpc3BhdGNoVGFyZ2V0cyhjbHMsIHNldHRlcnM6IHRydWUpOwogICAgTGlzdDxNZW1iZXI+IGRlY2xhcmVkU2V0dGVycyA9CiAgICAgICAgaGllcmFyY2h5LmdldERlY2xhcmVkTWVtYmVycyhjbHMsIHNldHRlcnM6IHRydWUpOwogICAgZm9yIChNZW1iZXIgbWVtYmVyIGluIGhpZXJhcmNoeS5nZXRJbnRlcmZhY2VNZW1iZXJzKGNscywgc2V0dGVyczogdHJ1ZSkpIHsKICAgICAgaWYgKG1lbWJlciBpcyBQcm9jZWR1cmUgJiYKICAgICAgICAgIENsYXNzSGllcmFyY2h5LmZpbmRNZW1iZXJCeU5hbWUoY29uY3JldGVTZXR0ZXJzLCBtZW1iZXIubmFtZSkgPT0KICAgICAgICAgICAgICBudWxsICYmCiAgICAgICAgICAhZXhpc3RpbmdTZXR0ZXJGb3J3YXJkZXJzTmFtZXMuY29udGFpbnMobWVtYmVyLm5hbWUpKSB7CiAgICAgICAgaWYgKENsYXNzSGllcmFyY2h5LmZpbmRNZW1iZXJCeU5hbWUoZGVjbGFyZWRTZXR0ZXJzLCBtZW1iZXIubmFtZSkgIT0KICAgICAgICAgICAgbnVsbCkgewogICAgICAgICAgdHJhbnNmb3JtUHJvY2VkdXJlVG9Ob1N1Y2hNZXRob2RGb3J3YXJkZXIoCiAgICAgICAgICAgICAgbm9TdWNoTWV0aG9kLCB0YXJnZXQsIG1lbWJlcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFkZE5vU3VjaE1ldGhvZEZvcndhcmRlckZvclByb2NlZHVyZSgKICAgICAgICAgICAgICBub1N1Y2hNZXRob2QsIHRhcmdldCwgbWVtYmVyLCBoaWVyYXJjaHkpOwogICAgICAgIH0KICAgICAgICBleGlzdGluZ1NldHRlckZvcndhcmRlcnNOYW1lcy5hZGQobWVtYmVyLm5hbWUpOwogICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChtZW1iZXIgaXMgRmllbGQgJiYKICAgICAgICAgIENsYXNzSGllcmFyY2h5LmZpbmRNZW1iZXJCeU5hbWUoY29uY3JldGVTZXR0ZXJzLCBtZW1iZXIubmFtZSkgPT0KICAgICAgICAgICAgICBudWxsICYmCiAgICAgICAgICAhZXhpc3RpbmdTZXR0ZXJGb3J3YXJkZXJzTmFtZXMuY29udGFpbnMobWVtYmVyLm5hbWUpKSB7CiAgICAgICAgYWRkTm9TdWNoTWV0aG9kRm9yd2FyZGVyU2V0dGVyRm9yRmllbGQoCiAgICAgICAgICAgIG5vU3VjaE1ldGhvZCwgdGFyZ2V0LCBtZW1iZXIsIGhpZXJhcmNoeSk7CiAgICAgICAgZXhpc3RpbmdTZXR0ZXJGb3J3YXJkZXJzTmFtZXMuYWRkKG1lbWJlci5uYW1lKTsKICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBjaGFuZ2VkOwogIH0KCiAgVXJpIF9nZXRNZW1iZXJVcmkoTWVtYmVyIG1lbWJlcikgewogICAgaWYgKG1lbWJlciBpcyBGaWVsZCkgcmV0dXJuIG1lbWJlci5maWxlVXJpOwogICAgaWYgKG1lbWJlciBpcyBQcm9jZWR1cmUpIHJldHVybiBtZW1iZXIuZmlsZVVyaTsKICAgIC8vIE90aGVyIG1lbWJlciB0eXBlcyB3b24ndCBiZSBzZWVuIGJlY2F1c2UgY29uc3RydWN0b3JzIGRvbid0IHBhcnRpY2lwYXRlCiAgICAvLyBpbiBvdmVycmlkZSByZWxhdGlvbnNoaXBzCiAgICByZXR1cm4gdW5oYW5kbGVkKCcke21lbWJlci5ydW50aW1lVHlwZX0nLCAnX2dldE1lbWJlclVyaScsIC0xLCBudWxsKTsKICB9CgogIFN1YnN0aXR1dGlvbiBfY29tcHV0ZUludGVyZmFjZVN1YnN0aXR1dGlvbigKICAgICAgVHlwZXMgdHlwZXMsCiAgICAgIE1lbWJlciBkZWNsYXJlZE1lbWJlciwKICAgICAgTWVtYmVyIGludGVyZmFjZU1lbWJlciwKICAgICAgRnVuY3Rpb25Ob2RlIGRlY2xhcmVkRnVuY3Rpb24sCiAgICAgIEZ1bmN0aW9uTm9kZSBpbnRlcmZhY2VGdW5jdGlvbiwKICAgICAgYm9vbCBpc0ludGVyZmFjZUNoZWNrKSB7CiAgICBTdWJzdGl0dXRpb24gaW50ZXJmYWNlU3Vic3RpdHV0aW9uID0gU3Vic3RpdHV0aW9uLmVtcHR5OwogICAgaWYgKGludGVyZmFjZU1lbWJlci5lbmNsb3NpbmdDbGFzcy50eXBlUGFyYW1ldGVycy5pc05vdEVtcHR5KSB7CiAgICAgIGludGVyZmFjZVN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZSh0eXBlcy5oaWVyYXJjaHkKICAgICAgICAgIC5nZXRLZXJuZWxUeXBlQXNJbnN0YW5jZU9mKAogICAgICAgICAgICAgIGNscy50aGlzVHlwZSwgaW50ZXJmYWNlTWVtYmVyLmVuY2xvc2luZ0NsYXNzKSk7CiAgICB9CiAgICBpZiAoZGVjbGFyZWRGdW5jdGlvbj8udHlwZVBhcmFtZXRlcnM/Lmxlbmd0aCAhPQogICAgICAgIGludGVyZmFjZUZ1bmN0aW9uPy50eXBlUGFyYW1ldGVycz8ubGVuZ3RoKSB7CiAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlT3ZlcnJpZGVUeXBlVmFyaWFibGVzTWlzbWF0Y2gud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAiJHtkZWNsYXJlZE1lbWJlci5lbmNsb3NpbmdDbGFzcy5uYW1lfS4iCiAgICAgICAgICAgICAgICAgICIke2RlY2xhcmVkTWVtYmVyLm5hbWUubmFtZX0iLAogICAgICAgICAgICAgICIke2ludGVyZmFjZU1lbWJlci5lbmNsb3NpbmdDbGFzcy5uYW1lfS4iCiAgICAgICAgICAgICAgICAgICIke2ludGVyZmFjZU1lbWJlci5uYW1lLm5hbWV9IiksCiAgICAgICAgICBkZWNsYXJlZE1lbWJlci5maWxlT2Zmc2V0LAogICAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgICBkZWNsYXJlZE1lbWJlci5maWxlVXJpLAogICAgICAgICAgY29udGV4dDogWwogICAgICAgICAgICAgICAgdGVtcGxhdGVPdmVycmlkZGVuTWV0aG9kQ2F1c2UKICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhpbnRlcmZhY2VNZW1iZXIubmFtZS5uYW1lKQogICAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24oX2dldE1lbWJlclVyaShpbnRlcmZhY2VNZW1iZXIpLAogICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIuZmlsZU9mZnNldCwgbm9MZW5ndGgpCiAgICAgICAgICAgICAgXSArCiAgICAgICAgICAgICAgaW5oZXJpdGVkQ29udGV4dChpc0ludGVyZmFjZUNoZWNrLCBkZWNsYXJlZE1lbWJlcikpOwogICAgfSBlbHNlIGlmICghbGlicmFyeS5sb2FkZXIudGFyZ2V0LmJhY2tlbmRUYXJnZXQubGVnYWN5TW9kZSAmJgogICAgICAgIGRlY2xhcmVkRnVuY3Rpb24/LnR5cGVQYXJhbWV0ZXJzICE9IG51bGwpIHsKICAgICAgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBzdWJzdGl0dXRpb25NYXAgPQogICAgICAgICAgPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlY2xhcmVkRnVuY3Rpb24udHlwZVBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKICAgICAgICBzdWJzdGl0dXRpb25NYXBbaW50ZXJmYWNlRnVuY3Rpb24udHlwZVBhcmFtZXRlcnNbaV1dID0KICAgICAgICAgICAgbmV3IFR5cGVQYXJhbWV0ZXJUeXBlKGRlY2xhcmVkRnVuY3Rpb24udHlwZVBhcmFtZXRlcnNbaV0pOwogICAgICB9CiAgICAgIFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZnJvbU1hcChzdWJzdGl0dXRpb25NYXApOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlY2xhcmVkRnVuY3Rpb24udHlwZVBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKICAgICAgICBUeXBlUGFyYW1ldGVyIGRlY2xhcmVkUGFyYW1ldGVyID0gZGVjbGFyZWRGdW5jdGlvbi50eXBlUGFyYW1ldGVyc1tpXTsKICAgICAgICBUeXBlUGFyYW1ldGVyIGludGVyZmFjZVBhcmFtZXRlciA9IGludGVyZmFjZUZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzW2ldOwogICAgICAgIGlmICghaW50ZXJmYWNlUGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwpIHsKICAgICAgICAgIERhcnRUeXBlIGRlY2xhcmVkQm91bmQgPSBkZWNsYXJlZFBhcmFtZXRlci5ib3VuZDsKICAgICAgICAgIERhcnRUeXBlIGludGVyZmFjZUJvdW5kID0gaW50ZXJmYWNlUGFyYW1ldGVyLmJvdW5kOwogICAgICAgICAgaWYgKGludGVyZmFjZVN1YnN0aXR1dGlvbiAhPSBudWxsKSB7CiAgICAgICAgICAgIGRlY2xhcmVkQm91bmQgPSBpbnRlcmZhY2VTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoZGVjbGFyZWRCb3VuZCk7CiAgICAgICAgICAgIGludGVyZmFjZUJvdW5kID0KICAgICAgICAgICAgICAgIGludGVyZmFjZVN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShpbnRlcmZhY2VCb3VuZCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZGVjbGFyZWRCb3VuZCAhPSBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoaW50ZXJmYWNlQm91bmQpKSB7CiAgICAgICAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgICAgICAgIHRlbXBsYXRlT3ZlcnJpZGVUeXBlVmFyaWFibGVzTWlzbWF0Y2gud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgICAgICAiJHtkZWNsYXJlZE1lbWJlci5lbmNsb3NpbmdDbGFzcy5uYW1lfS4iCiAgICAgICAgICAgICAgICAgICAgICAgICIke2RlY2xhcmVkTWVtYmVyLm5hbWUubmFtZX0iLAogICAgICAgICAgICAgICAgICAgICIke2ludGVyZmFjZU1lbWJlci5lbmNsb3NpbmdDbGFzcy5uYW1lfS4iCiAgICAgICAgICAgICAgICAgICAgICAgICIke2ludGVyZmFjZU1lbWJlci5uYW1lLm5hbWV9IiksCiAgICAgICAgICAgICAgICBkZWNsYXJlZE1lbWJlci5maWxlT2Zmc2V0LAogICAgICAgICAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgICAgICAgICBkZWNsYXJlZE1lbWJlci5maWxlVXJpLAogICAgICAgICAgICAgICAgY29udGV4dDogWwogICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVPdmVycmlkZGVuTWV0aG9kQ2F1c2UKICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhpbnRlcmZhY2VNZW1iZXIubmFtZS5uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24oX2dldE1lbWJlclVyaShpbnRlcmZhY2VNZW1iZXIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIuZmlsZU9mZnNldCwgbm9MZW5ndGgpCiAgICAgICAgICAgICAgICAgICAgXSArCiAgICAgICAgICAgICAgICAgICAgaW5oZXJpdGVkQ29udGV4dChpc0ludGVyZmFjZUNoZWNrLCBkZWNsYXJlZE1lbWJlcikpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpbnRlcmZhY2VTdWJzdGl0dXRpb24gPQogICAgICAgICAgU3Vic3RpdHV0aW9uLmNvbWJpbmUoaW50ZXJmYWNlU3Vic3RpdHV0aW9uLCBzdWJzdGl0dXRpb24pOwogICAgfQogICAgcmV0dXJuIGludGVyZmFjZVN1YnN0aXR1dGlvbjsKICB9CgogIFN1YnN0aXR1dGlvbiBfY29tcHV0ZURlY2xhcmVkU3Vic3RpdHV0aW9uKAogICAgICBUeXBlcyB0eXBlcywgTWVtYmVyIGRlY2xhcmVkTWVtYmVyKSB7CiAgICBTdWJzdGl0dXRpb24gZGVjbGFyZWRTdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZW1wdHk7CiAgICBpZiAoZGVjbGFyZWRNZW1iZXIuZW5jbG9zaW5nQ2xhc3MudHlwZVBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgewogICAgICBkZWNsYXJlZFN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZSh0eXBlcy5oaWVyYXJjaHkKICAgICAgICAgIC5nZXRLZXJuZWxUeXBlQXNJbnN0YW5jZU9mKAogICAgICAgICAgICAgIGNscy50aGlzVHlwZSwgZGVjbGFyZWRNZW1iZXIuZW5jbG9zaW5nQ2xhc3MpKTsKICAgIH0KICAgIHJldHVybiBkZWNsYXJlZFN1YnN0aXR1dGlvbjsKICB9CgogIHZvaWQgX2NoZWNrVHlwZXMoCiAgICAgIFR5cGVzIHR5cGVzLAogICAgICBTdWJzdGl0dXRpb24gaW50ZXJmYWNlU3Vic3RpdHV0aW9uLAogICAgICBTdWJzdGl0dXRpb24gZGVjbGFyZWRTdWJzdGl0dXRpb24sCiAgICAgIE1lbWJlciBkZWNsYXJlZE1lbWJlciwKICAgICAgTWVtYmVyIGludGVyZmFjZU1lbWJlciwKICAgICAgRGFydFR5cGUgZGVjbGFyZWRUeXBlLAogICAgICBEYXJ0VHlwZSBpbnRlcmZhY2VUeXBlLAogICAgICBib29sIGlzQ292YXJpYW50LAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGRlY2xhcmVkUGFyYW1ldGVyLAogICAgICBib29sIGlzSW50ZXJmYWNlQ2hlY2ssCiAgICAgIHtib29sIGFzSWZEZWNsYXJlZFBhcmFtZXRlciA9IGZhbHNlfSkgewogICAgaWYgKGxpYnJhcnkubG9hZGVyLnRhcmdldC5iYWNrZW5kVGFyZ2V0LmxlZ2FjeU1vZGUpIHJldHVybjsKCiAgICBpZiAoaW50ZXJmYWNlU3Vic3RpdHV0aW9uICE9IG51bGwpIHsKICAgICAgaW50ZXJmYWNlVHlwZSA9IGludGVyZmFjZVN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShpbnRlcmZhY2VUeXBlKTsKICAgIH0KICAgIGlmIChkZWNsYXJlZFN1YnN0aXR1dGlvbiAhPSBudWxsKSB7CiAgICAgIGRlY2xhcmVkVHlwZSA9IGRlY2xhcmVkU3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGRlY2xhcmVkVHlwZSk7CiAgICB9CgogICAgYm9vbCBpblBhcmFtZXRlciA9IGRlY2xhcmVkUGFyYW1ldGVyICE9IG51bGwgfHwgYXNJZkRlY2xhcmVkUGFyYW1ldGVyOwogICAgRGFydFR5cGUgc3VidHlwZSA9IGluUGFyYW1ldGVyID8gaW50ZXJmYWNlVHlwZSA6IGRlY2xhcmVkVHlwZTsKICAgIERhcnRUeXBlIHN1cGVydHlwZSA9IGluUGFyYW1ldGVyID8gZGVjbGFyZWRUeXBlIDogaW50ZXJmYWNlVHlwZTsKCiAgICBpZiAodHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwoc3VidHlwZSwgc3VwZXJ0eXBlKSkgewogICAgICAvLyBObyBwcm9ibGVtLS10aGUgcHJvcGVyIHN1YnR5cGluZyByZWxhdGlvbiBpcyBzYXRpc2ZpZWQuCiAgICB9IGVsc2UgaWYgKGlzQ292YXJpYW50ICYmIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHN1cGVydHlwZSwgc3VidHlwZSkpIHsKICAgICAgLy8gTm8gcHJvYmxlbS0tdGhlIG92ZXJyaWRpbmcgcGFyYW1ldGVyIGlzIG1hcmtlZCAiY292YXJpYW50IiBhbmQgaGFzCiAgICAgIC8vIGEgdHlwZSB3aGljaCBpcyBhIHN1YnR5cGUgb2YgdGhlIHBhcmFtZXRlciBpdCBvdmVycmlkZXMuCiAgICB9IGVsc2UgaWYgKHN1YnR5cGUgaXMgSW52YWxpZFR5cGUgfHwgc3VwZXJ0eXBlIGlzIEludmFsaWRUeXBlKSB7CiAgICAgIC8vIERvbid0IHJlcG9ydCBhIHByb2JsZW0gYXMgc29tZXRoaW5nIGVsc2UgaXMgd3JvbmcgdGhhdCBoYXMgYWxyZWFkeQogICAgICAvLyBiZWVuIHJlcG9ydGVkLgogICAgfSBlbHNlIHsKICAgICAgLy8gUmVwb3J0IGFuIGVycm9yLgogICAgICBTdHJpbmcgZGVjbGFyZWRNZW1iZXJOYW1lID0KICAgICAgICAgICcke2RlY2xhcmVkTWVtYmVyLmVuY2xvc2luZ0NsYXNzLm5hbWV9LiR7ZGVjbGFyZWRNZW1iZXIubmFtZS5uYW1lfSc7CiAgICAgIFN0cmluZyBpbnRlcmZhY2VNZW1iZXJOYW1lID0KICAgICAgICAgICcke2ludGVyZmFjZU1lbWJlci5lbmNsb3NpbmdDbGFzcy5uYW1lfS4ke2ludGVyZmFjZU1lbWJlci5uYW1lLm5hbWV9JzsKICAgICAgTWVzc2FnZSBtZXNzYWdlOwogICAgICBpbnQgZmlsZU9mZnNldDsKICAgICAgaWYgKGRlY2xhcmVkUGFyYW1ldGVyID09IG51bGwpIHsKICAgICAgICBtZXNzYWdlID0gdGVtcGxhdGVPdmVycmlkZVR5cGVNaXNtYXRjaFJldHVyblR5cGUud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgZGVjbGFyZWRNZW1iZXJOYW1lLAogICAgICAgICAgICBkZWNsYXJlZFR5cGUsCiAgICAgICAgICAgIGludGVyZmFjZVR5cGUsCiAgICAgICAgICAgIGludGVyZmFjZU1lbWJlck5hbWUpOwogICAgICAgIGZpbGVPZmZzZXQgPSBkZWNsYXJlZE1lbWJlci5maWxlT2Zmc2V0OwogICAgICB9IGVsc2UgewogICAgICAgIG1lc3NhZ2UgPSB0ZW1wbGF0ZU92ZXJyaWRlVHlwZU1pc21hdGNoUGFyYW1ldGVyLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgIGRlY2xhcmVkUGFyYW1ldGVyLm5hbWUsCiAgICAgICAgICAgIGRlY2xhcmVkTWVtYmVyTmFtZSwKICAgICAgICAgICAgZGVjbGFyZWRUeXBlLAogICAgICAgICAgICBpbnRlcmZhY2VUeXBlLAogICAgICAgICAgICBpbnRlcmZhY2VNZW1iZXJOYW1lKTsKICAgICAgICBmaWxlT2Zmc2V0ID0gZGVjbGFyZWRQYXJhbWV0ZXIuZmlsZU9mZnNldDsKICAgICAgfQogICAgICBsaWJyYXJ5LmFkZFByb2JsZW0obWVzc2FnZSwgZmlsZU9mZnNldCwgbm9MZW5ndGgsIGRlY2xhcmVkTWVtYmVyLmZpbGVVcmksCiAgICAgICAgICBjb250ZXh0OiBbCiAgICAgICAgICAgICAgICB0ZW1wbGF0ZU92ZXJyaWRkZW5NZXRob2RDYXVzZQogICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGludGVyZmFjZU1lbWJlci5uYW1lLm5hbWUpCiAgICAgICAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbihfZ2V0TWVtYmVyVXJpKGludGVyZmFjZU1lbWJlciksCiAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZU1lbWJlci5maWxlT2Zmc2V0LCBub0xlbmd0aCkKICAgICAgICAgICAgICBdICsKICAgICAgICAgICAgICBpbmhlcml0ZWRDb250ZXh0KGlzSW50ZXJmYWNlQ2hlY2ssIGRlY2xhcmVkTWVtYmVyKSk7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyB3aGV0aGVyIGEgY292YXJpYW50IHBhcmFtZXRlciB3YXMgc2VlbiBhbmQgbW9yZSBtZXRob2RzIHRodXMgaGF2ZQogIC8vLyB0byBiZSBjaGVja2VkLgogIGJvb2wgY2hlY2tNZXRob2RPdmVycmlkZShUeXBlcyB0eXBlcywgUHJvY2VkdXJlIGRlY2xhcmVkTWVtYmVyLAogICAgICBQcm9jZWR1cmUgaW50ZXJmYWNlTWVtYmVyLCBib29sIGlzSW50ZXJmYWNlQ2hlY2spIHsKICAgIGFzc2VydChkZWNsYXJlZE1lbWJlci5raW5kID09IFByb2NlZHVyZUtpbmQuTWV0aG9kKTsKICAgIGFzc2VydChpbnRlcmZhY2VNZW1iZXIua2luZCA9PSBQcm9jZWR1cmVLaW5kLk1ldGhvZCk7CiAgICBib29sIHNlZW5Db3ZhcmlhbnQgPSBmYWxzZTsKICAgIEZ1bmN0aW9uTm9kZSBkZWNsYXJlZEZ1bmN0aW9uID0gZGVjbGFyZWRNZW1iZXIuZnVuY3Rpb247CiAgICBGdW5jdGlvbk5vZGUgaW50ZXJmYWNlRnVuY3Rpb24gPSBpbnRlcmZhY2VNZW1iZXIuZnVuY3Rpb247CgogICAgU3Vic3RpdHV0aW9uIGludGVyZmFjZVN1YnN0aXR1dGlvbiA9IF9jb21wdXRlSW50ZXJmYWNlU3Vic3RpdHV0aW9uKAogICAgICAgIHR5cGVzLAogICAgICAgIGRlY2xhcmVkTWVtYmVyLAogICAgICAgIGludGVyZmFjZU1lbWJlciwKICAgICAgICBkZWNsYXJlZEZ1bmN0aW9uLAogICAgICAgIGludGVyZmFjZUZ1bmN0aW9uLAogICAgICAgIGlzSW50ZXJmYWNlQ2hlY2spOwoKICAgIFN1YnN0aXR1dGlvbiBkZWNsYXJlZFN1YnN0aXR1dGlvbiA9CiAgICAgICAgX2NvbXB1dGVEZWNsYXJlZFN1YnN0aXR1dGlvbih0eXBlcywgZGVjbGFyZWRNZW1iZXIpOwoKICAgIF9jaGVja1R5cGVzKAogICAgICAgIHR5cGVzLAogICAgICAgIGludGVyZmFjZVN1YnN0aXR1dGlvbiwKICAgICAgICBkZWNsYXJlZFN1YnN0aXR1dGlvbiwKICAgICAgICBkZWNsYXJlZE1lbWJlciwKICAgICAgICBpbnRlcmZhY2VNZW1iZXIsCiAgICAgICAgZGVjbGFyZWRGdW5jdGlvbi5yZXR1cm5UeXBlLAogICAgICAgIGludGVyZmFjZUZ1bmN0aW9uLnJldHVyblR5cGUsCiAgICAgICAgZmFsc2UsCiAgICAgICAgbnVsbCwKICAgICAgICBpc0ludGVyZmFjZUNoZWNrKTsKICAgIGlmIChkZWNsYXJlZEZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCA8CiAgICAgICAgaW50ZXJmYWNlRnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoKSB7CiAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlT3ZlcnJpZGVGZXdlclBvc2l0aW9uYWxBcmd1bWVudHMud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAiJHtkZWNsYXJlZE1lbWJlci5lbmNsb3NpbmdDbGFzcy5uYW1lfS4iCiAgICAgICAgICAgICAgICAgICIke2RlY2xhcmVkTWVtYmVyLm5hbWUubmFtZX0iLAogICAgICAgICAgICAgICIke2ludGVyZmFjZU1lbWJlci5lbmNsb3NpbmdDbGFzcy5uYW1lfS4iCiAgICAgICAgICAgICAgICAgICIke2ludGVyZmFjZU1lbWJlci5uYW1lLm5hbWV9IiksCiAgICAgICAgICBkZWNsYXJlZE1lbWJlci5maWxlT2Zmc2V0LAogICAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgICBkZWNsYXJlZE1lbWJlci5maWxlVXJpLAogICAgICAgICAgY29udGV4dDogWwogICAgICAgICAgICAgICAgdGVtcGxhdGVPdmVycmlkZGVuTWV0aG9kQ2F1c2UKICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhpbnRlcmZhY2VNZW1iZXIubmFtZS5uYW1lKQogICAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24oaW50ZXJmYWNlTWVtYmVyLmZpbGVVcmksCiAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZU1lbWJlci5maWxlT2Zmc2V0LCBub0xlbmd0aCkKICAgICAgICAgICAgICBdICsKICAgICAgICAgICAgICBpbmhlcml0ZWRDb250ZXh0KGlzSW50ZXJmYWNlQ2hlY2ssIGRlY2xhcmVkTWVtYmVyKSk7CiAgICB9CiAgICBpZiAoaW50ZXJmYWNlRnVuY3Rpb24ucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA8CiAgICAgICAgZGVjbGFyZWRGdW5jdGlvbi5yZXF1aXJlZFBhcmFtZXRlckNvdW50KSB7CiAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlT3ZlcnJpZGVNb3JlUmVxdWlyZWRBcmd1bWVudHMud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAiJHtkZWNsYXJlZE1lbWJlci5lbmNsb3NpbmdDbGFzcy5uYW1lfS4iCiAgICAgICAgICAgICAgICAgICIke2RlY2xhcmVkTWVtYmVyLm5hbWUubmFtZX0iLAogICAgICAgICAgICAgICIke2ludGVyZmFjZU1lbWJlci5lbmNsb3NpbmdDbGFzcy5uYW1lfS4iCiAgICAgICAgICAgICAgICAgICIke2ludGVyZmFjZU1lbWJlci5uYW1lLm5hbWV9IiksCiAgICAgICAgICBkZWNsYXJlZE1lbWJlci5maWxlT2Zmc2V0LAogICAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgICBkZWNsYXJlZE1lbWJlci5maWxlVXJpLAogICAgICAgICAgY29udGV4dDogWwogICAgICAgICAgICAgICAgdGVtcGxhdGVPdmVycmlkZGVuTWV0aG9kQ2F1c2UKICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhpbnRlcmZhY2VNZW1iZXIubmFtZS5uYW1lKQogICAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24oaW50ZXJmYWNlTWVtYmVyLmZpbGVVcmksCiAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZU1lbWJlci5maWxlT2Zmc2V0LCBub0xlbmd0aCkKICAgICAgICAgICAgICBdICsKICAgICAgICAgICAgICBpbmhlcml0ZWRDb250ZXh0KGlzSW50ZXJmYWNlQ2hlY2ssIGRlY2xhcmVkTWVtYmVyKSk7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsKICAgICAgICBpIDwgZGVjbGFyZWRGdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGggJiYKICAgICAgICAgICAgaSA8IGludGVyZmFjZUZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aDsKICAgICAgICBpKyspIHsKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBkZWNsYXJlZFBhcmFtZXRlciA9CiAgICAgICAgICBkZWNsYXJlZEZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldOwogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGludGVyZmFjZVBhcmFtZXRlciA9CiAgICAgICAgICBpbnRlcmZhY2VGdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXTsKICAgICAgX2NoZWNrVHlwZXMoCiAgICAgICAgICB0eXBlcywKICAgICAgICAgIGludGVyZmFjZVN1YnN0aXR1dGlvbiwKICAgICAgICAgIGRlY2xhcmVkU3Vic3RpdHV0aW9uLAogICAgICAgICAgZGVjbGFyZWRNZW1iZXIsCiAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIsCiAgICAgICAgICBkZWNsYXJlZFBhcmFtZXRlci50eXBlLAogICAgICAgICAgaW50ZXJmYWNlRnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnNbaV0udHlwZSwKICAgICAgICAgIGRlY2xhcmVkUGFyYW1ldGVyLmlzQ292YXJpYW50IHx8IGludGVyZmFjZVBhcmFtZXRlci5pc0NvdmFyaWFudCwKICAgICAgICAgIGRlY2xhcmVkUGFyYW1ldGVyLAogICAgICAgICAgaXNJbnRlcmZhY2VDaGVjayk7CiAgICAgIGlmIChkZWNsYXJlZFBhcmFtZXRlci5pc0NvdmFyaWFudCkgc2VlbkNvdmFyaWFudCA9IHRydWU7CiAgICB9CiAgICBpZiAoZGVjbGFyZWRGdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMuaXNFbXB0eSAmJgogICAgICAgIGludGVyZmFjZUZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycy5pc0VtcHR5KSB7CiAgICAgIHJldHVybiBzZWVuQ292YXJpYW50OwogICAgfQogICAgaWYgKGRlY2xhcmVkRnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCA8CiAgICAgICAgaW50ZXJmYWNlRnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICBsaWJyYXJ5LmFkZFByb2JsZW0oCiAgICAgICAgICB0ZW1wbGF0ZU92ZXJyaWRlRmV3ZXJOYW1lZEFyZ3VtZW50cy53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICIke2RlY2xhcmVkTWVtYmVyLmVuY2xvc2luZ0NsYXNzLm5hbWV9LiIKICAgICAgICAgICAgICAgICAgIiR7ZGVjbGFyZWRNZW1iZXIubmFtZS5uYW1lfSIsCiAgICAgICAgICAgICAgIiR7aW50ZXJmYWNlTWVtYmVyLmVuY2xvc2luZ0NsYXNzLm5hbWV9LiIKICAgICAgICAgICAgICAgICAgIiR7aW50ZXJmYWNlTWVtYmVyLm5hbWUubmFtZX0iKSwKICAgICAgICAgIGRlY2xhcmVkTWVtYmVyLmZpbGVPZmZzZXQsCiAgICAgICAgICBub0xlbmd0aCwKICAgICAgICAgIGRlY2xhcmVkTWVtYmVyLmZpbGVVcmksCiAgICAgICAgICBjb250ZXh0OiBbCiAgICAgICAgICAgICAgICB0ZW1wbGF0ZU92ZXJyaWRkZW5NZXRob2RDYXVzZQogICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGludGVyZmFjZU1lbWJlci5uYW1lLm5hbWUpCiAgICAgICAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbihpbnRlcmZhY2VNZW1iZXIuZmlsZVVyaSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlTWVtYmVyLmZpbGVPZmZzZXQsIG5vTGVuZ3RoKQogICAgICAgICAgICAgIF0gKwogICAgICAgICAgICAgIGluaGVyaXRlZENvbnRleHQoaXNJbnRlcmZhY2VDaGVjaywgZGVjbGFyZWRNZW1iZXIpKTsKICAgIH0KICAgIGludCBjb21wYXJlTmFtZWRQYXJhbWV0ZXJzKFZhcmlhYmxlRGVjbGFyYXRpb24gcDAsIFZhcmlhYmxlRGVjbGFyYXRpb24gcDEpIHsKICAgICAgcmV0dXJuIHAwLm5hbWUuY29tcGFyZVRvKHAxLm5hbWUpOwogICAgfQoKICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gc29ydGVkRnJvbURlY2xhcmVkID0KICAgICAgICBuZXcgTGlzdC5mcm9tKGRlY2xhcmVkRnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzKQogICAgICAgICAgLi5zb3J0KGNvbXBhcmVOYW1lZFBhcmFtZXRlcnMpOwogICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBzb3J0ZWRGcm9tSW50ZXJmYWNlID0KICAgICAgICBuZXcgTGlzdC5mcm9tKGludGVyZmFjZUZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycykKICAgICAgICAgIC4uc29ydChjb21wYXJlTmFtZWRQYXJhbWV0ZXJzKTsKICAgIEl0ZXJhdG9yPFZhcmlhYmxlRGVjbGFyYXRpb24+IGRlY2xhcmVkTmFtZWRQYXJhbWV0ZXJzID0KICAgICAgICBzb3J0ZWRGcm9tRGVjbGFyZWQuaXRlcmF0b3I7CiAgICBJdGVyYXRvcjxWYXJpYWJsZURlY2xhcmF0aW9uPiBpbnRlcmZhY2VOYW1lZFBhcmFtZXRlcnMgPQogICAgICAgIHNvcnRlZEZyb21JbnRlcmZhY2UuaXRlcmF0b3I7CiAgICBvdXRlcjoKICAgIHdoaWxlIChkZWNsYXJlZE5hbWVkUGFyYW1ldGVycy5tb3ZlTmV4dCgpICYmCiAgICAgICAgaW50ZXJmYWNlTmFtZWRQYXJhbWV0ZXJzLm1vdmVOZXh0KCkpIHsKICAgICAgd2hpbGUgKGRlY2xhcmVkTmFtZWRQYXJhbWV0ZXJzLmN1cnJlbnQubmFtZSAhPQogICAgICAgICAgaW50ZXJmYWNlTmFtZWRQYXJhbWV0ZXJzLmN1cnJlbnQubmFtZSkgewogICAgICAgIGlmICghZGVjbGFyZWROYW1lZFBhcmFtZXRlcnMubW92ZU5leHQoKSkgewogICAgICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgICAgICAgIHRlbXBsYXRlT3ZlcnJpZGVNaXNtYXRjaE5hbWVkUGFyYW1ldGVyLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICAgICIke2RlY2xhcmVkTWVtYmVyLmVuY2xvc2luZ0NsYXNzLm5hbWV9LiIKICAgICAgICAgICAgICAgICAgICAgICIke2RlY2xhcmVkTWVtYmVyLm5hbWUubmFtZX0iLAogICAgICAgICAgICAgICAgICBpbnRlcmZhY2VOYW1lZFBhcmFtZXRlcnMuY3VycmVudC5uYW1lLAogICAgICAgICAgICAgICAgICAiJHtpbnRlcmZhY2VNZW1iZXIuZW5jbG9zaW5nQ2xhc3MubmFtZX0uIgogICAgICAgICAgICAgICAgICAgICAgIiR7aW50ZXJmYWNlTWVtYmVyLm5hbWUubmFtZX0iKSwKICAgICAgICAgICAgICBkZWNsYXJlZE1lbWJlci5maWxlT2Zmc2V0LAogICAgICAgICAgICAgIG5vTGVuZ3RoLAogICAgICAgICAgICAgIGRlY2xhcmVkTWVtYmVyLmZpbGVVcmksCiAgICAgICAgICAgICAgY29udGV4dDogWwogICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlT3ZlcnJpZGRlbk1ldGhvZENhdXNlCiAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGludGVyZmFjZU1lbWJlci5uYW1lLm5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24oaW50ZXJmYWNlTWVtYmVyLmZpbGVVcmksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIuZmlsZU9mZnNldCwgbm9MZW5ndGgpCiAgICAgICAgICAgICAgICAgIF0gKwogICAgICAgICAgICAgICAgICBpbmhlcml0ZWRDb250ZXh0KGlzSW50ZXJmYWNlQ2hlY2ssIGRlY2xhcmVkTWVtYmVyKSk7CiAgICAgICAgICBicmVhayBvdXRlcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBkZWNsYXJlZFBhcmFtZXRlciA9IGRlY2xhcmVkTmFtZWRQYXJhbWV0ZXJzLmN1cnJlbnQ7CiAgICAgIF9jaGVja1R5cGVzKAogICAgICAgICAgdHlwZXMsCiAgICAgICAgICBpbnRlcmZhY2VTdWJzdGl0dXRpb24sCiAgICAgICAgICBkZWNsYXJlZFN1YnN0aXR1dGlvbiwKICAgICAgICAgIGRlY2xhcmVkTWVtYmVyLAogICAgICAgICAgaW50ZXJmYWNlTWVtYmVyLAogICAgICAgICAgZGVjbGFyZWRQYXJhbWV0ZXIudHlwZSwKICAgICAgICAgIGludGVyZmFjZU5hbWVkUGFyYW1ldGVycy5jdXJyZW50LnR5cGUsCiAgICAgICAgICBkZWNsYXJlZFBhcmFtZXRlci5pc0NvdmFyaWFudCwKICAgICAgICAgIGRlY2xhcmVkUGFyYW1ldGVyLAogICAgICAgICAgaXNJbnRlcmZhY2VDaGVjayk7CiAgICAgIGlmIChkZWNsYXJlZFBhcmFtZXRlci5pc0NvdmFyaWFudCkgc2VlbkNvdmFyaWFudCA9IHRydWU7CiAgICB9CiAgICByZXR1cm4gc2VlbkNvdmFyaWFudDsKICB9CgogIHZvaWQgY2hlY2tHZXR0ZXJPdmVycmlkZShUeXBlcyB0eXBlcywgTWVtYmVyIGRlY2xhcmVkTWVtYmVyLAogICAgICBNZW1iZXIgaW50ZXJmYWNlTWVtYmVyLCBib29sIGlzSW50ZXJmYWNlQ2hlY2spIHsKICAgIFN1YnN0aXR1dGlvbiBpbnRlcmZhY2VTdWJzdGl0dXRpb24gPSBfY29tcHV0ZUludGVyZmFjZVN1YnN0aXR1dGlvbigKICAgICAgICB0eXBlcywgZGVjbGFyZWRNZW1iZXIsIGludGVyZmFjZU1lbWJlciwgbnVsbCwgbnVsbCwgaXNJbnRlcmZhY2VDaGVjayk7CiAgICBTdWJzdGl0dXRpb24gZGVjbGFyZWRTdWJzdGl0dXRpb24gPQogICAgICAgIF9jb21wdXRlRGVjbGFyZWRTdWJzdGl0dXRpb24odHlwZXMsIGRlY2xhcmVkTWVtYmVyKTsKICAgIERhcnRUeXBlIGRlY2xhcmVkVHlwZSA9IGRlY2xhcmVkTWVtYmVyLmdldHRlclR5cGU7CiAgICBEYXJ0VHlwZSBpbnRlcmZhY2VUeXBlID0gaW50ZXJmYWNlTWVtYmVyLmdldHRlclR5cGU7CiAgICBfY2hlY2tUeXBlcygKICAgICAgICB0eXBlcywKICAgICAgICBpbnRlcmZhY2VTdWJzdGl0dXRpb24sCiAgICAgICAgZGVjbGFyZWRTdWJzdGl0dXRpb24sCiAgICAgICAgZGVjbGFyZWRNZW1iZXIsCiAgICAgICAgaW50ZXJmYWNlTWVtYmVyLAogICAgICAgIGRlY2xhcmVkVHlwZSwKICAgICAgICBpbnRlcmZhY2VUeXBlLAogICAgICAgIGZhbHNlLAogICAgICAgIG51bGwsCiAgICAgICAgaXNJbnRlcmZhY2VDaGVjayk7CiAgfQoKICAvLy8gUmV0dXJucyB3aGV0aGVyIGEgY292YXJpYW50IHBhcmFtZXRlciB3YXMgc2VlbiBhbmQgbW9yZSBtZXRob2RzIHRodXMgaGF2ZQogIC8vLyB0byBiZSBjaGVja2VkLgogIGJvb2wgY2hlY2tTZXR0ZXJPdmVycmlkZShUeXBlcyB0eXBlcywgTWVtYmVyIGRlY2xhcmVkTWVtYmVyLAogICAgICBNZW1iZXIgaW50ZXJmYWNlTWVtYmVyLCBib29sIGlzSW50ZXJmYWNlQ2hlY2spIHsKICAgIFN1YnN0aXR1dGlvbiBpbnRlcmZhY2VTdWJzdGl0dXRpb24gPSBfY29tcHV0ZUludGVyZmFjZVN1YnN0aXR1dGlvbigKICAgICAgICB0eXBlcywgZGVjbGFyZWRNZW1iZXIsIGludGVyZmFjZU1lbWJlciwgbnVsbCwgbnVsbCwgaXNJbnRlcmZhY2VDaGVjayk7CiAgICBTdWJzdGl0dXRpb24gZGVjbGFyZWRTdWJzdGl0dXRpb24gPQogICAgICAgIF9jb21wdXRlRGVjbGFyZWRTdWJzdGl0dXRpb24odHlwZXMsIGRlY2xhcmVkTWVtYmVyKTsKICAgIERhcnRUeXBlIGRlY2xhcmVkVHlwZSA9IGRlY2xhcmVkTWVtYmVyLnNldHRlclR5cGU7CiAgICBEYXJ0VHlwZSBpbnRlcmZhY2VUeXBlID0gaW50ZXJmYWNlTWVtYmVyLnNldHRlclR5cGU7CiAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGRlY2xhcmVkUGFyYW1ldGVyID0KICAgICAgICBkZWNsYXJlZE1lbWJlci5mdW5jdGlvbj8ucG9zaXRpb25hbFBhcmFtZXRlcnM/LmVsZW1lbnRBdCgwKTsKICAgIGJvb2wgaXNDb3ZhcmlhbnQgPSBkZWNsYXJlZFBhcmFtZXRlcj8uaXNDb3ZhcmlhbnQgPz8gZmFsc2U7CiAgICBpZiAoIWlzQ292YXJpYW50ICYmIGRlY2xhcmVkTWVtYmVyIGlzIEZpZWxkKSB7CiAgICAgIGlzQ292YXJpYW50ID0gZGVjbGFyZWRNZW1iZXIuaXNDb3ZhcmlhbnQ7CiAgICB9CiAgICBpZiAoIWlzQ292YXJpYW50ICYmIGludGVyZmFjZU1lbWJlciBpcyBGaWVsZCkgewogICAgICBpc0NvdmFyaWFudCA9IGludGVyZmFjZU1lbWJlci5pc0NvdmFyaWFudDsKICAgIH0KICAgIF9jaGVja1R5cGVzKAogICAgICAgIHR5cGVzLAogICAgICAgIGludGVyZmFjZVN1YnN0aXR1dGlvbiwKICAgICAgICBkZWNsYXJlZFN1YnN0aXR1dGlvbiwKICAgICAgICBkZWNsYXJlZE1lbWJlciwKICAgICAgICBpbnRlcmZhY2VNZW1iZXIsCiAgICAgICAgZGVjbGFyZWRUeXBlLAogICAgICAgIGludGVyZmFjZVR5cGUsCiAgICAgICAgaXNDb3ZhcmlhbnQsCiAgICAgICAgZGVjbGFyZWRQYXJhbWV0ZXIsCiAgICAgICAgaXNJbnRlcmZhY2VDaGVjaywKICAgICAgICBhc0lmRGVjbGFyZWRQYXJhbWV0ZXI6IHRydWUpOwogICAgcmV0dXJuIGlzQ292YXJpYW50OwogIH0KCiAgLy8gRXh0cmEgY29udGV4dCBvbiBvdmVycmlkZSBtZXNzYWdlcyB3aGVuIHRoZSBvdmVycmlkaW5nIG1lbWJlciBpcyBpbmhlcml0ZWQKICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBpbmhlcml0ZWRDb250ZXh0KAogICAgICBib29sIGlzSW50ZXJmYWNlQ2hlY2ssIE1lbWJlciBkZWNsYXJlZE1lbWJlcikgewogICAgaWYgKGRlY2xhcmVkTWVtYmVyLmVuY2xvc2luZ0NsYXNzID09IGNscykgewogICAgICAvLyBPcmRpbmFyeSBvdmVycmlkZQogICAgICByZXR1cm4gY29uc3QgW107CiAgICB9CiAgICBpZiAoaXNJbnRlcmZhY2VDaGVjaykgewogICAgICAvLyBJbnRlcmZhY2UgY2hlY2sKICAgICAgcmV0dXJuIFsKICAgICAgICB0ZW1wbGF0ZUludGVyZmFjZUNoZWNrQ29udGV4dAogICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhjbHMubmFtZSkKICAgICAgICAgICAgLndpdGhMb2NhdGlvbihjbHMuZmlsZVVyaSwgY2xzLmZpbGVPZmZzZXQsIGNscy5uYW1lLmxlbmd0aCkKICAgICAgXTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChjbHMuaXNBbm9ueW1vdXNNaXhpbikgewogICAgICAgIC8vIEltcGxpY2l0IG1peGluIGFwcGxpY2F0aW9uIGNsYXNzCiAgICAgICAgU3RyaW5nIGJhc2VOYW1lID0gY2xzLnN1cGVyY2xhc3MuZGVtYW5nbGVkTmFtZTsKICAgICAgICBTdHJpbmcgbWl4aW5OYW1lID0gY2xzLm1peGVkSW5DbGFzcy5uYW1lOwogICAgICAgIGludCBjbGFzc05hbWVMZW5ndGggPSBjbHMubmFtZUFzTWl4aW5BcHBsaWNhdGlvblN1YmNsYXNzLmxlbmd0aDsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgdGVtcGxhdGVJbXBsaWNpdE1peGluT3ZlcnJpZGVDb250ZXh0CiAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMobWl4aW5OYW1lLCBiYXNlTmFtZSkKICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKGNscy5maWxlVXJpLCBjbHMuZmlsZU9mZnNldCwgY2xhc3NOYW1lTGVuZ3RoKQogICAgICAgIF07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gTmFtZWQgbWl4aW4gYXBwbGljYXRpb24gY2xhc3MKICAgICAgICByZXR1cm4gWwogICAgICAgICAgdGVtcGxhdGVOYW1lZE1peGluT3ZlcnJpZGVDb250ZXh0CiAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoY2xzLm5hbWUpCiAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbihjbHMuZmlsZVVyaSwgY2xzLmZpbGVPZmZzZXQsIGNscy5uYW1lLmxlbmd0aCkKICAgICAgICBdOwogICAgICB9CiAgICB9CiAgfQoKICBTdHJpbmcgZ2V0IGZ1bGxOYW1lRm9yRXJyb3JzIHsKICAgIHJldHVybiBpc01peGluQXBwbGljYXRpb24gJiYgIWlzTmFtZWRNaXhpbkFwcGxpY2F0aW9uCiAgICAgICAgPyAiJHtzdXBlcnR5cGUuZnVsbE5hbWVGb3JFcnJvcnN9IHdpdGggJHttaXhlZEluVHlwZS5mdWxsTmFtZUZvckVycm9yc30iCiAgICAgICAgOiBuYW1lOwogIH0KCiAgdm9pZCBjaGVja01peGluRGVjbGFyYXRpb24oKSB7CiAgICBhc3NlcnQoY2xzLmlzTWl4aW5EZWNsYXJhdGlvbik7CiAgICBmb3IgKEJ1aWxkZXIgY29uc3RydWN0b3IgaW4gY29uc3RydWN0b3JzLmxvY2FsLnZhbHVlcykgewogICAgICBpZiAoIWNvbnN0cnVjdG9yLmlzU3ludGhldGljICYmCiAgICAgICAgICAoY29uc3RydWN0b3IuaXNGYWN0b3J5IHx8IGNvbnN0cnVjdG9yLmlzQ29uc3RydWN0b3IpKSB7CiAgICAgICAgYWRkUHJvYmxlbSgKICAgICAgICAgICAgdGVtcGxhdGVJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9ycwogICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoZnVsbE5hbWVGb3JFcnJvcnMpLAogICAgICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgICAgICBub0xlbmd0aCwKICAgICAgICAgICAgY29udGV4dDogWwogICAgICAgICAgICAgIHRlbXBsYXRlSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnNDYXVzZQogICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhmdWxsTmFtZUZvckVycm9ycykKICAgICAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbigKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yLmZpbGVVcmksIGNvbnN0cnVjdG9yLmNoYXJPZmZzZXQsIG5vTGVuZ3RoKQogICAgICAgICAgICBdKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBjaGVja01peGluQXBwbGljYXRpb24oQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5KSB7CiAgICAvLyBBIG1peGluIGRlY2xhcmF0aW9uIGNhbiBvbmx5IGJlIGFwcGxpZWQgdG8gYSBjbGFzcyB0aGF0IGltcGxlbWVudHMgYWxsCiAgICAvLyB0aGUgZGVjbGFyYXRpb24ncyBzdXBlcmNsYXNzIGNvbnN0cmFpbnRzLgogICAgSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUgPSBjbHMuc3VwZXJ0eXBlLmFzSW50ZXJmYWNlVHlwZTsKICAgIFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZnJvbVN1cGVydHlwZShjbHMubWl4ZWRJblR5cGUpOwogICAgZm9yIChTdXBlcnR5cGUgY29uc3RyYWludCBpbiBjbHMubWl4ZWRJbkNsYXNzLnN1cGVyY2xhc3NDb25zdHJhaW50cygpKSB7CiAgICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlID0KICAgICAgICAgIHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlU3VwZXJ0eXBlKGNvbnN0cmFpbnQpLmFzSW50ZXJmYWNlVHlwZTsKICAgICAgaWYgKGhpZXJhcmNoeS5nZXRUeXBlQXNJbnN0YW5jZU9mKHN1cGVydHlwZSwgaW50ZXJmYWNlLmNsYXNzTm9kZSkgIT0KICAgICAgICAgIGludGVyZmFjZSkgewogICAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgICAgdGVtcGxhdGVNaXhpbkFwcGxpY2F0aW9uSW5jb21wYXRpYmxlU3VwZXJ0eXBlLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICBzdXBlcnR5cGUsIGludGVyZmFjZSwgY2xzLm1peGVkSW5UeXBlLmFzSW50ZXJmYWNlVHlwZSksCiAgICAgICAgICAgIGNscy5maWxlT2Zmc2V0LAogICAgICAgICAgICBub0xlbmd0aCwKICAgICAgICAgICAgY2xzLmZpbGVVcmkpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFwcGx5UGF0Y2goQnVpbGRlciBwYXRjaCkgewogICAgaWYgKHBhdGNoIGlzIENsYXNzQnVpbGRlcikgewogICAgICBwYXRjaC5hY3R1YWxPcmlnaW4gPSB0aGlzOwogICAgICAvLyBUT0RPKGFoZSk6IENvbXBsYWluIGlmIGBwYXRjaC5zdXBlcnR5cGVgIGlzbid0IG51bGwuCiAgICAgIHNjb3BlLmxvY2FsLmZvckVhY2goKFN0cmluZyBuYW1lLCBCdWlsZGVyIG1lbWJlcikgewogICAgICAgIEJ1aWxkZXIgbWVtYmVyUGF0Y2ggPSBwYXRjaC5zY29wZS5sb2NhbFtuYW1lXTsKICAgICAgICBpZiAobWVtYmVyUGF0Y2ggIT0gbnVsbCkgewogICAgICAgICAgbWVtYmVyLmFwcGx5UGF0Y2gobWVtYmVyUGF0Y2gpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHNjb3BlLnNldHRlcnMuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgbWVtYmVyKSB7CiAgICAgICAgQnVpbGRlciBtZW1iZXJQYXRjaCA9IHBhdGNoLnNjb3BlLnNldHRlcnNbbmFtZV07CiAgICAgICAgaWYgKG1lbWJlclBhdGNoICE9IG51bGwpIHsKICAgICAgICAgIG1lbWJlci5hcHBseVBhdGNoKG1lbWJlclBhdGNoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBjb25zdHJ1Y3RvcnMubG9jYWwuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgbWVtYmVyKSB7CiAgICAgICAgQnVpbGRlciBtZW1iZXJQYXRjaCA9IHBhdGNoLmNvbnN0cnVjdG9ycy5sb2NhbFtuYW1lXTsKICAgICAgICBpZiAobWVtYmVyUGF0Y2ggIT0gbnVsbCkgewogICAgICAgICAgbWVtYmVyLmFwcGx5UGF0Y2gobWVtYmVyUGF0Y2gpOwogICAgICAgIH0KICAgICAgfSk7CgogICAgICBpbnQgb3JpZ2luTGVuZ3RoID0gdHlwZVZhcmlhYmxlcz8ubGVuZ3RoID8/IDA7CiAgICAgIGludCBwYXRjaExlbmd0aCA9IHBhdGNoLnR5cGVWYXJpYWJsZXM/Lmxlbmd0aCA/PyAwOwogICAgICBpZiAob3JpZ2luTGVuZ3RoICE9IHBhdGNoTGVuZ3RoKSB7CiAgICAgICAgcGF0Y2guYWRkUHJvYmxlbShtZXNzYWdlUGF0Y2hDbGFzc1R5cGVWYXJpYWJsZXNNaXNtYXRjaCwKICAgICAgICAgICAgcGF0Y2guY2hhck9mZnNldCwgbm9MZW5ndGgsIGNvbnRleHQ6IFsKICAgICAgICAgIG1lc3NhZ2VQYXRjaENsYXNzT3JpZ2luLndpdGhMb2NhdGlvbihmaWxlVXJpLCBjaGFyT2Zmc2V0LCBub0xlbmd0aCkKICAgICAgICBdKTsKICAgICAgfSBlbHNlIGlmICh0eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgICBpbnQgY291bnQgPSAwOwogICAgICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciB0IGluIHBhdGNoLnR5cGVWYXJpYWJsZXMpIHsKICAgICAgICAgIHR5cGVWYXJpYWJsZXNbY291bnQrK10uYXBwbHlQYXRjaCh0KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbShtZXNzYWdlUGF0Y2hEZWNsYXJhdGlvbk1pc21hdGNoLCBwYXRjaC5jaGFyT2Zmc2V0LAogICAgICAgICAgbm9MZW5ndGgsIHBhdGNoLmZpbGVVcmksIGNvbnRleHQ6IFsKICAgICAgICBtZXNzYWdlUGF0Y2hEZWNsYXJhdGlvbk9yaWdpbi53aXRoTG9jYXRpb24oCiAgICAgICAgICAgIGZpbGVVcmksIGNoYXJPZmZzZXQsIG5vTGVuZ3RoKQogICAgICBdKTsKICAgIH0KICB9CgogIC8vIENvbXB1dGVzIHRoZSBmdW5jdGlvbiB0eXBlIG9mIGEgZ2l2ZW4gcmVkaXJlY3Rpb24gdGFyZ2V0LiBSZXR1cm5zIFtudWxsXSBpZgogIC8vIHRoZSB0eXBlIG9mIHRoZSB0YXJnZXQgY291bGQgbm90IGJlIGNvbXB1dGVkLgogIEZ1bmN0aW9uVHlwZSBjb21wdXRlUmVkaXJlY3RlZVR5cGUoCiAgICAgIFJlZGlyZWN0aW5nRmFjdG9yeUJ1aWxkZXIgZmFjdG9yeSwgVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCkgewogICAgQ29uc3RydWN0b3JSZWZlcmVuY2VCdWlsZGVyIHJlZGlyZWN0aW9uVGFyZ2V0ID0gZmFjdG9yeS5yZWRpcmVjdGlvblRhcmdldDsKICAgIEZ1bmN0aW9uTm9kZSB0YXJnZXQ7CiAgICBpZiAocmVkaXJlY3Rpb25UYXJnZXQudGFyZ2V0ID09IG51bGwpIHJldHVybiBudWxsOwogICAgaWYgKHJlZGlyZWN0aW9uVGFyZ2V0LnRhcmdldCBpcyBGdW5jdGlvbkJ1aWxkZXIpIHsKICAgICAgRnVuY3Rpb25CdWlsZGVyIHRhcmdldEJ1aWxkZXIgPSByZWRpcmVjdGlvblRhcmdldC50YXJnZXQ7CiAgICAgIHRhcmdldCA9IHRhcmdldEJ1aWxkZXIuZnVuY3Rpb247CiAgICB9IGVsc2UgaWYgKHJlZGlyZWN0aW9uVGFyZ2V0LnRhcmdldCBpcyBEaWxsTWVtYmVyQnVpbGRlciAmJgogICAgICAgIChyZWRpcmVjdGlvblRhcmdldC50YXJnZXQuaXNDb25zdHJ1Y3RvciB8fAogICAgICAgICAgICByZWRpcmVjdGlvblRhcmdldC50YXJnZXQuaXNGYWN0b3J5KSkgewogICAgICBEaWxsTWVtYmVyQnVpbGRlciB0YXJnZXRCdWlsZGVyID0gcmVkaXJlY3Rpb25UYXJnZXQudGFyZ2V0OwogICAgICAvLyBJdCBzZWVtcyB0aGF0IHRoZSBbcmVkaXJlY3Rpb25UYXJnZXQudGFyZ2V0XSBpcyBhbiBpbnN0YW5jZSBvZgogICAgICAvLyBbRGlsbE1lbWJlckJ1aWxkZXJdIHdoZW5ldmVyIHRoZSByZWRpcmVjdGVlIGlzIGFuIGltcGxpY2l0IGNvbnN0cnVjdG9yLAogICAgICAvLyBlLmcuCiAgICAgIC8vCiAgICAgIC8vICAgY2xhc3MgQSB7CiAgICAgIC8vICAgICBmYWN0b3J5IEEoKSA9IEI7CiAgICAgIC8vICAgfQogICAgICAvLyAgIGNsYXNzIEIgaW1wbGVtZW50cyBBIHt9CiAgICAgIC8vCiAgICAgIHRhcmdldCA9IHRhcmdldEJ1aWxkZXIubWVtYmVyLmZ1bmN0aW9uOwogICAgfSBlbHNlIGlmIChyZWRpcmVjdGlvblRhcmdldC50YXJnZXQgaXMgQW1iaWd1b3VzQnVpbGRlcikgewogICAgICAvLyBNdWx0aXBsZSBkZWZpbml0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWU6IEFuIGVycm9yIGhhcyBhbHJlYWR5IGJlZW4KICAgICAgLy8gaXNzdWVkLgogICAgICAvLyBUT0RPKGh0dHA6Ly9kYXJ0YnVnLmNvbS8zNTI5NCk6IFVuZm9ydHVuYXRlIGVycm9yOyBzZWUgYWxzbwogICAgICAvLyBodHRwczovL2RhcnQtcmV2aWV3Lmdvb2dsZXNvdXJjZS5jb20vYy9zZGsvKy84NTM5MC8uCiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIHsKICAgICAgdW5oYW5kbGVkKCIke3JlZGlyZWN0aW9uVGFyZ2V0LnRhcmdldH0iLCAiY29tcHV0ZVJlZGlyZWN0ZWVUeXBlIiwKICAgICAgICAgIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgfQoKICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPQogICAgICAgIGdldFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkoZmFjdG9yeS5wcm9jZWR1cmUpLnR5cGVBcmd1bWVudHM7CiAgICBGdW5jdGlvblR5cGUgdGFyZ2V0RnVuY3Rpb25UeXBlID0gdGFyZ2V0LmZ1bmN0aW9uVHlwZTsKICAgIGlmICh0eXBlQXJndW1lbnRzICE9IG51bGwgJiYKICAgICAgICB0YXJnZXRGdW5jdGlvblR5cGUudHlwZVBhcmFtZXRlcnMubGVuZ3RoICE9IHR5cGVBcmd1bWVudHMubGVuZ3RoKSB7CiAgICAgIGFkZFByb2JsZW0oCiAgICAgICAgICB0ZW1wbGF0ZVR5cGVBcmd1bWVudE1pc21hdGNoCiAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHModGFyZ2V0RnVuY3Rpb25UeXBlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCksCiAgICAgICAgICByZWRpcmVjdGlvblRhcmdldC5jaGFyT2Zmc2V0LAogICAgICAgICAgbm9MZW5ndGgpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvLyBDb21wdXRlIHRoZSBzdWJzdGl0dXRpb24gb2YgdGhlIHRhcmdldCBjbGFzcyB0eXBlIHBhcmFtZXRlcnMgaWYKICAgIC8vIFtyZWRpcmVjdGlvblRhcmdldF0gaGFzIGFueSB0eXBlIGFyZ3VtZW50cy4KICAgIFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb247CiAgICBib29sIGhhc1Byb2JsZW0gPSBmYWxzZTsKICAgIGlmICh0eXBlQXJndW1lbnRzICE9IG51bGwgJiYgdHlwZUFyZ3VtZW50cy5sZW5ndGggPiAwKSB7CiAgICAgIHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoCiAgICAgICAgICB0YXJnZXRGdW5jdGlvblR5cGUudHlwZVBhcmFtZXRlcnMsIHR5cGVBcmd1bWVudHMpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRhcmdldEZ1bmN0aW9uVHlwZS50eXBlUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICAgIFR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlciA9IHRhcmdldEZ1bmN0aW9uVHlwZS50eXBlUGFyYW1ldGVyc1tpXTsKICAgICAgICBEYXJ0VHlwZSB0eXBlUGFyYW1ldGVyQm91bmQgPQogICAgICAgICAgICBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUodHlwZVBhcmFtZXRlci5ib3VuZCk7CiAgICAgICAgRGFydFR5cGUgdHlwZUFyZ3VtZW50ID0gdHlwZUFyZ3VtZW50c1tpXTsKICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBbdHlwZUFyZ3VtZW50XSByZXNwZWN0cyB0aGUgYm91bmRzIG9mCiAgICAgICAgLy8gW3R5cGVQYXJhbWV0ZXJdLgogICAgICAgIGlmICghdHlwZUVudmlyb25tZW50LmlzU3VidHlwZU9mKHR5cGVBcmd1bWVudCwgdHlwZVBhcmFtZXRlckJvdW5kKSkgewogICAgICAgICAgYWRkUHJvYmxlbSgKICAgICAgICAgICAgICB0ZW1wbGF0ZVJlZGlyZWN0aW5nRmFjdG9yeUluY29tcGF0aWJsZVR5cGVBcmd1bWVudC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgICB0eXBlQXJndW1lbnQsIHR5cGVQYXJhbWV0ZXJCb3VuZCksCiAgICAgICAgICAgICAgcmVkaXJlY3Rpb25UYXJnZXQuY2hhck9mZnNldCwKICAgICAgICAgICAgICBub0xlbmd0aCk7CiAgICAgICAgICBoYXNQcm9ibGVtID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodHlwZUFyZ3VtZW50cyA9PSBudWxsICYmCiAgICAgICAgdGFyZ2V0RnVuY3Rpb25UeXBlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHsKICAgICAgLy8gVE9ETyhoaWxsZXJzdHJvbSk6IEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byBwZXJmb3JtIHR5cGUgaW5mZXJlbmNlIG9uCiAgICAgIC8vIHRoZSByZWRpcmVjdGVlIHRvIG9idGFpbiBhY3R1YWwgdHlwZSBhcmd1bWVudHMgd2hpY2ggd291bGQgYWxsb3cgdGhlCiAgICAgIC8vIGZvbGxvd2luZyBwcm9ncmFtIHRvIHR5cGUgY2hlY2s6CiAgICAgIC8vCiAgICAgIC8vICAgIGNsYXNzIEE8VD4gewogICAgICAvLyAgICAgICBmYWN0b3J5IEEoKSA9IEI7CiAgICAgIC8vICAgIH0KICAgICAgLy8gICAgY2xhc3MgQjxUPiBpbXBsZW1lbnRzIEE8VD4gewogICAgICAvLyAgICAgICBCKCk7CiAgICAgIC8vICAgIH0KICAgICAgLy8KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLy8gU3Vic3RpdHV0ZSBpZiBuZWNlc3NhcnkuCiAgICB0YXJnZXRGdW5jdGlvblR5cGUgPSBzdWJzdGl0dXRpb24gPT0gbnVsbAogICAgICAgID8gdGFyZ2V0RnVuY3Rpb25UeXBlCiAgICAgICAgOiAoc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKHRhcmdldEZ1bmN0aW9uVHlwZS53aXRob3V0VHlwZVBhcmFtZXRlcnMpCiAgICAgICAgICAgIGFzIEZ1bmN0aW9uVHlwZSk7CgogICAgcmV0dXJuIGhhc1Byb2JsZW0gPyBudWxsIDogdGFyZ2V0RnVuY3Rpb25UeXBlOwogIH0KCiAgU3RyaW5nIGNvbXB1dGVSZWRpcmVjdGVlTmFtZShDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXIgcmVkaXJlY3Rpb25UYXJnZXQpIHsKICAgIFN0cmluZyB0YXJnZXROYW1lID0gcmVkaXJlY3Rpb25UYXJnZXQuZnVsbE5hbWVGb3JFcnJvcnM7CiAgICBpZiAodGFyZ2V0TmFtZSA9PSAiIikgewogICAgICByZXR1cm4gcmVkaXJlY3Rpb25UYXJnZXQudGFyZ2V0LnBhcmVudC5mdWxsTmFtZUZvckVycm9yczsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB0YXJnZXROYW1lOwogICAgfQogIH0KCiAgdm9pZCBjaGVja1JlZGlyZWN0aW5nRmFjdG9yeSgKICAgICAgUmVkaXJlY3RpbmdGYWN0b3J5QnVpbGRlciBmYWN0b3J5LCBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50KSB7CiAgICAvLyBUaGUgZmFjdG9yeSB0eXBlIGNhbm5vdCBjb250YWluIGFueSB0eXBlIHBhcmFtZXRlcnMgb3RoZXIgdGhhbiB0aG9zZSBvZgogICAgLy8gaXRzIGVuY2xvc2luZyBjbGFzcywgYmVjYXVzZSBjb25zdHJ1Y3RvcnMgY2Fubm90IHNwZWNpZnkgdHlwZSBwYXJhbWV0ZXJzCiAgICAvLyBvZiB0aGVpciBvd24uCiAgICBGdW5jdGlvblR5cGUgZmFjdG9yeVR5cGUgPQogICAgICAgIGZhY3RvcnkucHJvY2VkdXJlLmZ1bmN0aW9uLmZ1bmN0aW9uVHlwZS53aXRob3V0VHlwZVBhcmFtZXRlcnM7CiAgICBGdW5jdGlvblR5cGUgcmVkaXJlY3RlZVR5cGUgPQogICAgICAgIGNvbXB1dGVSZWRpcmVjdGVlVHlwZShmYWN0b3J5LCB0eXBlRW52aXJvbm1lbnQpOwoKICAgIC8vIFRPRE8oaGlsbGVyc3Ryb20pOiBJdCB3b3VsZCBiZSBwcmVmZXJhYmxlIHRvIGtub3cgd2hldGhlciBhIGZhaWx1cmUKICAgIC8vIGhhcHBlbmVkIGR1cmluZyBbX2NvbXB1dGVSZWRpcmVjdGVlVHlwZV0uCiAgICBpZiAocmVkaXJlY3RlZVR5cGUgPT0gbnVsbCkgcmV0dXJuOwoKICAgIC8vIENoZWNrIHdoZXRoZXIgW3JlZGlyZWN0ZWVUeXBlXSA8OiBbZmFjdG9yeVR5cGVdLgogICAgaWYgKCF0eXBlRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YocmVkaXJlY3RlZVR5cGUsIGZhY3RvcnlUeXBlKSkgewogICAgICBhZGRQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVJbmNvbXBhdGlibGVSZWRpcmVjdGVlRnVuY3Rpb25UeXBlLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgcmVkaXJlY3RlZVR5cGUsIGZhY3RvcnlUeXBlKSwKICAgICAgICAgIGZhY3RvcnkucmVkaXJlY3Rpb25UYXJnZXQuY2hhck9mZnNldCwKICAgICAgICAgIG5vTGVuZ3RoKTsKICAgIH0KICB9CgogIHZvaWQgY2hlY2tSZWRpcmVjdGluZ0ZhY3RvcmllcyhUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50KSB7CiAgICBNYXA8U3RyaW5nLCBNZW1iZXJCdWlsZGVyPiBjb25zdHJ1Y3RvcnMgPSB0aGlzLmNvbnN0cnVjdG9ycy5sb2NhbDsKICAgIEl0ZXJhYmxlPFN0cmluZz4gbmFtZXMgPSBjb25zdHJ1Y3RvcnMua2V5czsKICAgIGZvciAoU3RyaW5nIG5hbWUgaW4gbmFtZXMpIHsKICAgICAgQnVpbGRlciBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yc1tuYW1lXTsKICAgICAgZG8gewogICAgICAgIGlmIChjb25zdHJ1Y3RvciBpcyBSZWRpcmVjdGluZ0ZhY3RvcnlCdWlsZGVyKSB7CiAgICAgICAgICBjaGVja1JlZGlyZWN0aW5nRmFjdG9yeShjb25zdHJ1Y3RvciwgdHlwZUVudmlyb25tZW50KTsKICAgICAgICB9CiAgICAgICAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvci5uZXh0OwogICAgICB9IHdoaWxlIChjb25zdHJ1Y3RvciAhPSBudWxsKTsKICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIGEgbWFwIHdoaWNoIG1hcHMgdGhlIHR5cGUgdmFyaWFibGVzIG9mIFtzdXBlcmNsYXNzXSB0byB0aGVpcgogIC8vLyByZXNwZWN0aXZlIHZhbHVlcyBhcyBkZWZpbmVkIGJ5IHRoZSBzdXBlcmNsYXNzIGNsYXVzZSBvZiB0aGlzIGNsYXNzIChhbmQKICAvLy8gaXRzIHN1cGVyY2xhc3NlcykuCiAgLy8vCiAgLy8vIEl0J3MgYXNzdW1lZCB0aGF0IFtzdXBlcmNsYXNzXSBpcyBhIHN1cGVyY2xhc3Mgb2YgdGhpcyBjbGFzcy4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGUsIGdpdmVuOgogIC8vLwogIC8vLyAgICAgY2xhc3MgQm94PFQ+IHt9CiAgLy8vICAgICBjbGFzcyBCZWF0Qm94IGV4dGVuZHMgQm94PEJlYXQ+IHt9CiAgLy8vICAgICBjbGFzcyBCZWF0IHt9CiAgLy8vCiAgLy8vIFdlIGhhdmU6CiAgLy8vCiAgLy8vICAgICBbW0JlYXRCb3hdXS5nZXRTdWJzdGl0dXRpb25NYXAoW1tCb3hdXSkgLT4ge1tbQm94OjpUXV06IEJlYXRdXX0uCiAgLy8vCiAgLy8vIEl0J3MgYW4gZXJyb3IgaWYgW3N1cGVyY2xhc3NdIGlzbid0IGEgc3VwZXJjbGFzcy4KICBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IGdldFN1YnN0aXR1dGlvbk1hcChDbGFzcyBzdXBlcmNsYXNzKSB7CiAgICBTdXBlcnR5cGUgc3VwZXJ0eXBlID0gY2xzLnN1cGVydHlwZTsKICAgIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gc3Vic3RpdHV0aW9uTWFwID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogICAgTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzOwogICAgTGlzdDxUeXBlUGFyYW1ldGVyPiB2YXJpYWJsZXM7CiAgICBDbGFzcyBjbGFzc05vZGU7CgogICAgd2hpbGUgKGNsYXNzTm9kZSAhPSBzdXBlcmNsYXNzKSB7CiAgICAgIGNsYXNzTm9kZSA9IHN1cGVydHlwZS5jbGFzc05vZGU7CiAgICAgIGFyZ3VtZW50cyA9IHN1cGVydHlwZS50eXBlQXJndW1lbnRzOwogICAgICB2YXJpYWJsZXMgPSBjbGFzc05vZGUudHlwZVBhcmFtZXRlcnM7CiAgICAgIHN1cGVydHlwZSA9IGNsYXNzTm9kZS5zdXBlcnR5cGU7CiAgICAgIGlmICh2YXJpYWJsZXMuaXNOb3RFbXB0eSkgewogICAgICAgIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gZGlyZWN0U3Vic3RpdHV0aW9uTWFwID0KICAgICAgICAgICAgPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyaWFibGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBEYXJ0VHlwZSBhcmd1bWVudCA9CiAgICAgICAgICAgICAgaSA8IGFyZ3VtZW50cy5sZW5ndGggPyBhcmd1bWVudHNbaV0gOiBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbk1hcCAhPSBudWxsKSB7CiAgICAgICAgICAgIC8vIFRPRE8oYWhlKTogSW52ZXN0aWdhdGUgaWYgcmVxdWlyaW5nIHRoZSBjYWxsZXIgdG8gdXNlCiAgICAgICAgICAgIC8vIGBzdWJzdGl0dXRlRGVlcGAgZnJvbSBgcGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnRgIGluc3RlYWQKICAgICAgICAgICAgLy8gb2YgYHN1YnN0aXR1dGVgIGlzIGZhc3Rlci4gSWYgc28sIHdlIGNhbiBzaW1wbHkgdGhpcyBjb2RlLgogICAgICAgICAgICBhcmd1bWVudCA9IHN1YnN0aXR1dGUoYXJndW1lbnQsIHN1YnN0aXR1dGlvbk1hcCk7CiAgICAgICAgICB9CiAgICAgICAgICBkaXJlY3RTdWJzdGl0dXRpb25NYXBbdmFyaWFibGVzW2ldXSA9IGFyZ3VtZW50OwogICAgICAgIH0KICAgICAgICBzdWJzdGl0dXRpb25NYXAgPSBkaXJlY3RTdWJzdGl0dXRpb25NYXA7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gc3Vic3RpdHV0aW9uTWFwOwogIH0KCiAgLy8vIExvb2tzIHVwIHRoZSBtZW1iZXIgYnkgW25hbWVdIG9uIHRoZSBjbGFzcyBidWlsdCBieSB0aGlzIGNsYXNzIGJ1aWxkZXIuCiAgLy8vCiAgLy8vIElmIFtpc1NldHRlcl0gaXMgYGZhbHNlYCwgb25seSBmaWVsZHMsIG1ldGhvZHMsIGFuZCBnZXR0ZXJzIHdpdGggdGhhdCBuYW1lCiAgLy8vIHdpbGwgYmUgZm91bmQuICBJZiBbaXNTZXR0ZXJdIGlzIGB0cnVlYCwgb25seSBub24tZmluYWwgZmllbGRzIGFuZCBzZXR0ZXJzCiAgLy8vIHdpbGwgYmUgZm91bmQuCiAgLy8vCiAgLy8vIElmIFtpc1N1cGVyXSBpcyBgZmFsc2VgLCB0aGUgbWVtYmVyIGlzIGZvdW5kIGFtb25nIHRoZSBpbnRlcmZhY2UgbWVtYmVycwogIC8vLyB0aGUgY2xhc3MgYnVpbHQgYnkgdGhpcyBjbGFzcyBidWlsZGVyLiBJZiBbaXNTdXBlcl0gaXMgYHRydWVgLCB0aGUgbWVtYmVyCiAgLy8vIGlzIGZvdW5kIGFtb25nIHRoZSBjbGFzcyBtZW1iZXJzIG9mIHRoZSBzdXBlcmNsYXNzLgogIC8vLwogIC8vLyBJZiB0aGlzIGNsYXNzIGJ1aWxkZXIgaXMgYSBwYXRjaCwgaW50ZXJmYWNlIG1lbWJlcnMgZGVjbGFyZWQgaW4gdGhpcwogIC8vLyBwYXRjaCBhcmUgc2VhcmNoZWQgYmVmb3JlIHNlYXJjaGluZyB0aGUgaW50ZXJmYWNlIG1lbWJlcnMgaW4gdGhlIG9yaWdpbgogIC8vLyBjbGFzcy4KICBNZW1iZXIgbG9va3VwSW5zdGFuY2VNZW1iZXIoQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5LCBOYW1lIG5hbWUsCiAgICAgIHtib29sIGlzU2V0dGVyOiBmYWxzZSwgYm9vbCBpc1N1cGVyOiBmYWxzZX0pIHsKICAgIENsYXNzIGluc3RhbmNlQ2xhc3MgPSBjbHM7CiAgICBpZiAoaXNQYXRjaCkgewogICAgICBhc3NlcnQoaWRlbnRpY2FsKGluc3RhbmNlQ2xhc3MsIG9yaWdpbi5jbHMpLAogICAgICAgICAgIkZvdW5kICR7b3JpZ2luLmNsc30gZXhwZWN0ZWQgJGluc3RhbmNlQ2xhc3MiKTsKICAgICAgaWYgKGlzU3VwZXIpIHsKICAgICAgICAvLyBUaGUgc3VwZXIgY2xhc3MgaXMgb25seSBjb3JyZWN0bHkgZm91bmQgdGhyb3VnaCB0aGUgb3JpZ2luIGNsYXNzLgogICAgICAgIGluc3RhbmNlQ2xhc3MgPSBvcmlnaW4uY2xzOwogICAgICB9IGVsc2UgewogICAgICAgIE1lbWJlciBtZW1iZXIgPQogICAgICAgICAgICBoaWVyYXJjaHkuZ2V0SW50ZXJmYWNlTWVtYmVyKGluc3RhbmNlQ2xhc3MsIG5hbWUsIHNldHRlcjogaXNTZXR0ZXIpOwogICAgICAgIGlmIChtZW1iZXI/LnBhcmVudCA9PSBpbnN0YW5jZUNsYXNzKSB7CiAgICAgICAgICAvLyBPbmx5IGlmIHRoZSBtZW1iZXIgaXMgZm91bmQgaW4gdGhlIHBhdGNoIGNhbiB3ZSB1c2UgaXQuCiAgICAgICAgICByZXR1cm4gbWVtYmVyOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlIG5lZWQgdG8ga2VlcCBzZWFyY2hpbmcgaW4gdGhlIG9yaWdpbiBjbGFzcy4KICAgICAgICAgIGluc3RhbmNlQ2xhc3MgPSBvcmlnaW4uY2xzOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGlmIChpc1N1cGVyKSB7CiAgICAgIGluc3RhbmNlQ2xhc3MgPSBpbnN0YW5jZUNsYXNzLnN1cGVyY2xhc3M7CiAgICAgIGlmIChpbnN0YW5jZUNsYXNzID09IG51bGwpIHJldHVybiBudWxsOwogICAgfQogICAgTWVtYmVyIHRhcmdldCA9IGlzU3VwZXIKICAgICAgICA/IGhpZXJhcmNoeS5nZXREaXNwYXRjaFRhcmdldChpbnN0YW5jZUNsYXNzLCBuYW1lLCBzZXR0ZXI6IGlzU2V0dGVyKQogICAgICAgIDogaGllcmFyY2h5LmdldEludGVyZmFjZU1lbWJlcihpbnN0YW5jZUNsYXNzLCBuYW1lLCBzZXR0ZXI6IGlzU2V0dGVyKTsKICAgIGlmIChpc1N1cGVyICYmIHRhcmdldCA9PSBudWxsKSB7CiAgICAgIGlmIChjbHMuaXNNaXhpbkRlY2xhcmF0aW9uIHx8CiAgICAgICAgICAobGlicmFyeS5sb2FkZXIudGFyZ2V0LmJhY2tlbmRUYXJnZXQuZW5hYmxlU3VwZXJNaXhpbnMgJiYKICAgICAgICAgICAgICB0aGlzLmlzQWJzdHJhY3QpKSB7CiAgICAgICAgdGFyZ2V0ID0KICAgICAgICAgICAgaGllcmFyY2h5LmdldEludGVyZmFjZU1lbWJlcihpbnN0YW5jZUNsYXNzLCBuYW1lLCBzZXR0ZXI6IGlzU2V0dGVyKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vLyBMb29rcyB1cCB0aGUgY29uc3RydWN0b3IgYnkgW25hbWVdIG9uIHRoZSB0aGUgY2xhc3MgYnVpbHQgYnkgdGhpcyBjbGFzcwogIC8vLyBidWlsZGVyLgogIC8vLwogIC8vLyBJZiBbaXNTdXBlcl0gaXMgYHRydWVgLCBjb25zdHJ1Y3RvcnMgaW4gdGhlIHN1cGVyY2xhc3MgYXJlIHNlYXJjaGVkLgogIENvbnN0cnVjdG9yIGxvb2t1cENvbnN0cnVjdG9yKE5hbWUgbmFtZSwge2Jvb2wgaXNTdXBlcjogZmFsc2V9KSB7CiAgICBDbGFzcyBpbnN0YW5jZUNsYXNzID0gY2xzOwogICAgaWYgKGlzU3VwZXIpIHsKICAgICAgaW5zdGFuY2VDbGFzcyA9IGluc3RhbmNlQ2xhc3Muc3VwZXJjbGFzczsKICAgIH0KICAgIGlmIChpbnN0YW5jZUNsYXNzICE9IG51bGwpIHsKICAgICAgZm9yIChDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciBpbiBpbnN0YW5jZUNsYXNzLmNvbnN0cnVjdG9ycykgewogICAgICAgIGlmIChjb25zdHJ1Y3Rvci5uYW1lID09IG5hbWUpIHJldHVybiBjb25zdHJ1Y3RvcjsKICAgICAgfQogICAgfQoKICAgIC8vLyBQZXJmb3JtcyBhIHNpbWlsYXIgbG9va3VwIHRvIFtsb29rdXBDb25zdHJ1Y3Rvcl0sIGJ1dCB1c2luZyBhIHNsb3dlcgogICAgLy8vIGltcGxlbWVudGF0aW9uLgogICAgQ29uc3RydWN0b3IgbG9va3VwQ29uc3RydWN0b3JXaXRoUGF0Y2hlcyhOYW1lIG5hbWUsIGJvb2wgaXNTdXBlcikgewogICAgICBDbGFzc0J1aWxkZXIgYnVpbGRlciA9IHRoaXMub3JpZ2luOwoKICAgICAgQ2xhc3NCdWlsZGVyIGdldFN1cGVyY2xhc3MoQ2xhc3NCdWlsZGVyIGJ1aWxkZXIpIHsKICAgICAgICAvLyBUaGlzIHdheSBvZiBjb21wdXRpbmcgdGhlIHN1cGVyY2xhc3MgaXMgc2xvd2VyIHRoYW4gdXNpbmcgdGhlIGtlcm5lbAogICAgICAgIC8vIG9iamVjdHMgZGlyZWN0bHkuCiAgICAgICAgT2JqZWN0IHN1cGVydHlwZSA9IGJ1aWxkZXIuc3VwZXJ0eXBlOwogICAgICAgIGlmIChzdXBlcnR5cGUgaXMgTmFtZWRUeXBlQnVpbGRlcikgewogICAgICAgICAgT2JqZWN0IGJ1aWxkZXIgPSBzdXBlcnR5cGUuZGVjbGFyYXRpb247CiAgICAgICAgICBpZiAoYnVpbGRlciBpcyBDbGFzc0J1aWxkZXIpIHJldHVybiBidWlsZGVyOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQoKICAgICAgaWYgKGlzU3VwZXIpIHsKICAgICAgICBidWlsZGVyID0gZ2V0U3VwZXJjbGFzcyhidWlsZGVyKT8ub3JpZ2luOwogICAgICB9CiAgICAgIGlmIChidWlsZGVyICE9IG51bGwpIHsKICAgICAgICBDbGFzcyBjbHMgPSBidWlsZGVyLmNsczsKICAgICAgICBmb3IgKENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yIGluIGNscy5jb25zdHJ1Y3RvcnMpIHsKICAgICAgICAgIGlmIChjb25zdHJ1Y3Rvci5uYW1lID09IG5hbWUpIHJldHVybiBj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P0wRRT4TDUggBgEjRDshTBInSCgVEwYBRzMfHT0tPUtMJj4yQxxOFlA1LBkdCggoOE9OKgkZIA4pFA4JEwYBIC4dUR4BMwQBUD0cQA0ZBgQBIExPUBUfRyI5AUsxKAE4RRJELDAVBgQBREcwITALOEEKKCUGBAFLTxkGRAYaBhotGAYPBksGOEYpUB4jFQEmJyssJyI9KTUeSSlFUEo+DDoKMQgGARwEAU4GUVEVBk9QOgZLTg1DNR8TMzoVTSQPGFEvRRkRRyYKCAYBEzAuBhxNTyUkRCIRUQgGEwQBTg8GS0QfEzAGIUQ6CAYBTRhIKgE5UB0uLTI3ChUIARUyCB0hPDwKCBMGATgEAgEfERYBPwIBNnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2NsYXNzX2J1aWxkZXIuZGFydEBzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci9tZW1iZXJfYnVpbGRlci5kYXJ0iQUvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5tZW1iZXJfYnVpbGRlcjsKCmltcG9ydCAnZGFydDpjb3JlJyBoaWRlIE1hcEVudHJ5OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCc7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgdW5zdXBwb3J0ZWQ7CgppbXBvcnQgJ2J1aWxkZXIuZGFydCcKICAgIHNob3cgQ2xhc3NCdWlsZGVyLCBCdWlsZGVyLCBMaWJyYXJ5QnVpbGRlciwgTW9kaWZpZXJCdWlsZGVyOwoKaW1wb3J0ICdkZWNsYXJhdGlvbi5kYXJ0JzsKaW1wb3J0ICdkZWNsYXJhdGlvbl9idWlsZGVyLmRhcnQnOwppbXBvcnQgJ2V4dGVuc2lvbl9idWlsZGVyLmRhcnQnOwoKYWJzdHJhY3QgY2xhc3MgTWVtYmVyQnVpbGRlciBleHRlbmRzIE1vZGlmaWVyQnVpbGRlciB7CiAgLy8vIEZvciB0b3AtbGV2ZWwgbWVtYmVycywgdGhlIHBhcmVudCBpcyBzZXQgY29ycmVjdGx5IGR1cmluZwogIC8vLyBjb25zdHJ1Y3Rpb24uIEhvd2V2ZXIsIGZvciBjbGFzcyBtZW1iZXJzLCB0aGUgcGFyZW50IGlzIGluaXRpYWxseSB0aGUKICAvLy8gbGlicmFyeSBhbmQgdXBkYXRlZCBsYXRlci4KICBAb3ZlcnJpZGUKICBCdWlsZGVyIHBhcmVudDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBuYW1lOwoKICBNZW1iZXJCdWlsZGVyKHRoaXMucGFyZW50LCBpbnQgY2hhck9mZnNldCkgOiBzdXBlcihwYXJlbnQsIGNoYXJPZmZzZXQpOwoKICBib29sIGdldCBpc0RlY2xhcmF0aW9uSW5zdGFuY2VNZW1iZXIgPT4gaXNEZWNsYXJhdGlvbk1lbWJlciAmJiAhaXNTdGF0aWM7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQ2xhc3NJbnN0YW5jZU1lbWJlciA9PiBpc0NsYXNzTWVtYmVyICYmICFpc1N0YXRpYzsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFeHRlbnNpb25JbnN0YW5jZU1lbWJlciA9PiBpc0V4dGVuc2lvbk1lbWJlciAmJiAhaXNTdGF0aWM7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRGVjbGFyYXRpb25NZW1iZXIgPT4gcGFyZW50IGlzIERlY2xhcmF0aW9uQnVpbGRlcjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNDbGFzc01lbWJlciA9PiBwYXJlbnQgaXMgQ2xhc3NCdWlsZGVyOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0V4dGVuc2lvbk1lbWJlciA9PiBwYXJlbnQgaXMgRXh0ZW5zaW9uQnVpbGRlcjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNUb3BMZXZlbCA9PiAhaXNEZWNsYXJhdGlvbk1lbWJlcjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOYXRpdmUgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzUmVkaXJlY3RpbmdHZW5lcmF0aXZlQ29uc3RydWN0b3IgPT4gZmFsc2U7CgogIExpYnJhcnlCdWlsZGVyIGdldCBsaWJyYXJ5IHsKICAgIGlmIChwYXJlbnQgaXMgTGlicmFyeUJ1aWxkZXIpIHsKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IHBhcmVudDsKICAgICAgcmV0dXJuIGxpYnJhcnkucGFydE9mTGlicmFyeSA/PyBsaWJyYXJ5OwogICAgfSBlbHNlIGlmIChwYXJlbnQgaXMgRXh0ZW5zaW9uQnVpbGRlcikgewogICAgICBFeHRlbnNpb25CdWlsZGVyIGV4dGVuc2lvbiA9IHBhcmVudDsKICAgICAgcmV0dXJuIGV4dGVuc2lvbi5saWJyYXJ5OwogICAgfSBlbHNlIHsKICAgICAgQ2xhc3NCdWlsZGVyIGNscyA9IHBhcmVudDsKICAgICAgcmV0dXJuIGNscy5saWJyYXJ5OwogICAgfQogIH0KCiAgLy8vIFRoZSBbTWVtYmVyXSBidWlsdCBieSB0aGlzIGJ1aWxkZXI7CiAgTWVtYmVyIGdldCBtZW1iZXI7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IERlcHJlY2F0ZSB0aGlzLgogIE1lbWJlciBnZXQgdGFyZ2V0ID0+IG1lbWJlcjsKCiAgdm9pZCBidWlsZE91dGxpbmVFeHByZXNzaW9ucyhMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7fQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGZ1bGxOYW1lRm9yRXJyb3JzID0+IG5hbWU7CgogIHZvaWQgaW5mZXJUeXBlKCkgPT4gdW5zdXBwb3J0ZWQoImluZmVyVHlwZSIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwoKICB2b2lkIGluZmVyQ29waWVkVHlwZShjb3ZhcmlhbnQgT2JqZWN0IG90aGVyKSB7CiAgICB1bnN1cHBvcnRlZCgiaW5mZXJUeXBlIiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgfQp9ClgATk48AR4BIgEiASwBFkEBGyMhATdATCEMEgEMEwFKAUwBDEABDEgBDEABDDQBDDwBDC8BDB4BOAEfJCcvLSsgDSEaBgQBKhUBKh8BOgEMKAFFATEzBAIBN3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL21lbWJlcl9idWlsZGVyLmRhcnREc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2J1aWxkZXIvdHlwZV9hbGlhc19idWlsZGVyLmRhcnScsy8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmZ1bmN0aW9uX3R5cGVfYWxpYXNfYnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRHluYW1pY1R5cGUsCiAgICAgICAgRnVuY3Rpb25UeXBlLAogICAgICAgIEludmFsaWRUeXBlLAogICAgICAgIFR5cGVQYXJhbWV0ZXIsCiAgICAgICAgVHlwZWRlZiwKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2FsZ2VicmEuZGFydCcKICAgIHNob3cgRnJlc2hUeXBlUGFyYW1ldGVycywgZ2V0RnJlc2hUeXBlUGFyYW1ldGVycywgc3Vic3RpdHV0ZTsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cgbm9MZW5ndGgsIHRlbXBsYXRlQ3ljbGljVHlwZWRlZiwgdGVtcGxhdGVUeXBlQXJndW1lbnRNaXNtYXRjaDsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgRnVuY3Rpb25UeXBlQnVpbGRlciwKICAgICAgICBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyLAogICAgICAgIExpYnJhcnlCdWlsZGVyLAogICAgICAgIE1ldGFkYXRhQnVpbGRlciwKICAgICAgICBUeXBlQnVpbGRlciwKICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyOwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JyBzaG93IHVuaGFuZGxlZCwgdW5zdXBwb3J0ZWQ7CgppbXBvcnQgJy4uL3NvdXJjZS9zb3VyY2VfbGlicmFyeV9idWlsZGVyLmRhcnQnIHNob3cgU291cmNlTGlicmFyeUJ1aWxkZXI7CgppbXBvcnQgJ2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBMaWJyYXJ5QnVpbGRlciwKICAgICAgICBNZXRhZGF0YUJ1aWxkZXIsCiAgICAgICAgVHlwZUJ1aWxkZXIsCiAgICAgICAgVHlwZURlY2xhcmF0aW9uQnVpbGRlciwKICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyOwoKaW1wb3J0ICdkZWNsYXJhdGlvbi5kYXJ0JzsKCmNsYXNzIFR5cGVBbGlhc0J1aWxkZXIgZXh0ZW5kcyBUeXBlRGVjbGFyYXRpb25CdWlsZGVyIHsKICBmaW5hbCBUeXBlQnVpbGRlciB0eXBlOwoKICBmaW5hbCBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXM7CgogIC8vLyBUaGUgW1R5cGVkZWZdIGJ1aWx0IGJ5IHRoaXMgYnVpbGRlci4KICBmaW5hbCBUeXBlZGVmIHR5cGVkZWY7CgogIERhcnRUeXBlIHRoaXNUeXBlOwoKICBUeXBlQWxpYXNCdWlsZGVyKExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSwgU3RyaW5nIG5hbWUsCiAgICAgIHRoaXMudHlwZVZhcmlhYmxlcywgdGhpcy50eXBlLCBMaWJyYXJ5QnVpbGRlciBwYXJlbnQsIGludCBjaGFyT2Zmc2V0LAogICAgICBbVHlwZWRlZiB0eXBlZGVmXSkKICAgICAgOiB0eXBlZGVmID0gdHlwZWRlZiA/PwogICAgICAgICAgICAobmV3IFR5cGVkZWYobmFtZSwgbnVsbCwKICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzOiBUeXBlVmFyaWFibGVCdWlsZGVyLnR5cGVQYXJhbWV0ZXJzRnJvbUJ1aWxkZXJzKAogICAgICAgICAgICAgICAgICAgIHR5cGVWYXJpYWJsZXMpLAogICAgICAgICAgICAgICAgZmlsZVVyaTogcGFyZW50LmxpYnJhcnkuZmlsZVVyaSkKICAgICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0KSwKICAgICAgICBzdXBlcihtZXRhZGF0YSwgMCwgbmFtZSwgcGFyZW50LCBjaGFyT2Zmc2V0KTsKCiAgLy8gRGVsaWJlcmF0ZWx5IHVucmVsYXRlZCByZXR1cm4gdHlwZSB0byBzdGF0aWNhbGx5IGRldGVjdCBtb3JlIGFjY2lkZW50YWwKICAvLyB1c2UgdW50aWwgQnVpbGRlci50YXJnZXQgaXMgZnVsbHkgcmV0aXJlZC4KICBVbnJlbGF0ZWRUYXJnZXQgZ2V0IHRhcmdldCA9PiB1bnN1cHBvcnRlZCgKICAgICAgIlR5cGVBbGlhc0J1aWxkZXIudGFyZ2V0IGlzIGRlcHJlY2F0ZWQuICIKICAgICAgIlVzZSBUeXBlQWxpYXNCdWlsZGVyLnR5cGVkZWYgaW5zdGVhZC4iLAogICAgICBjaGFyT2Zmc2V0LAogICAgICBmaWxlVXJpKTsKCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWUgPT4gIlR5cGVBbGlhc0J1aWxkZXIiOwoKICBMaWJyYXJ5QnVpbGRlciBnZXQgcGFyZW50ID0+IHN1cGVyLnBhcmVudDsKCiAgVHlwZWRlZiBidWlsZChTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5QnVpbGRlcikgewogICAgdHlwZWRlZi4udHlwZSA/Pz0gYnVpbGRUaGlzVHlwZShsaWJyYXJ5QnVpbGRlcik7CgogICAgVHlwZUJ1aWxkZXIgdHlwZSA9IHRoaXMudHlwZTsKICAgIGlmICh0eXBlIGlzIEZ1bmN0aW9uVHlwZUJ1aWxkZXIpIHsKICAgICAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycyA9CiAgICAgICAgICBuZXcgTGlzdDxUeXBlUGFyYW1ldGVyPih0eXBlLnR5cGVWYXJpYWJsZXM/Lmxlbmd0aCA/PyAwKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlUGFyYW1ldGVycy5sZW5ndGg7ICsraSkgewogICAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXIgdHlwZVZhcmlhYmxlID0gdHlwZS50eXBlVmFyaWFibGVzW2ldOwogICAgICAgIHR5cGVQYXJhbWV0ZXJzW2ldID0gdHlwZVZhcmlhYmxlLnBhcmFtZXRlcjsKICAgICAgfQogICAgICBGcmVzaFR5cGVQYXJhbWV0ZXJzIGZyZXNoVHlwZVBhcmFtZXRlcnMgPQogICAgICAgICAgZ2V0RnJlc2hUeXBlUGFyYW1ldGVycyh0eXBlUGFyYW1ldGVycyk7CiAgICAgIHR5cGVkZWYudHlwZVBhcmFtZXRlcnNPZkZ1bmN0aW9uVHlwZQogICAgICAgICAgLmFkZEFsbChmcmVzaFR5cGVQYXJhbWV0ZXJzLmZyZXNoVHlwZVBhcmFtZXRlcnMpOwoKICAgICAgaWYgKHR5cGUuZm9ybWFscyAhPSBudWxsKSB7CiAgICAgICAgZm9yIChGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIGZvcm1hbCBpbiB0eXBlLmZvcm1hbHMpIHsKICAgICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyID0gZm9ybWFsLmJ1aWxkKGxpYnJhcnlCdWlsZGVyLCAwKTsKICAgICAgICAgIHBhcmFtZXRlci50eXBlID0gZnJlc2hUeXBlUGFyYW1ldGVycy5zdWJzdGl0dXRlKHBhcmFtZXRlci50eXBlKTsKICAgICAgICAgIGlmIChmb3JtYWwuaXNOYW1lZCkgewogICAgICAgICAgICB0eXBlZGVmLm5hbWVkUGFyYW1ldGVycy5hZGQocGFyYW1ldGVyKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHR5cGVkZWYucG9zaXRpb25hbFBhcmFtZXRlcnMuYWRkKHBhcmFtZXRlcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYgKHR5cGUgIT0gbnVsbCkgewogICAgICB1bmhhbmRsZWQoIiR7dHlwZS5mdWxsTmFtZUZvckVycm9yc30iLCAiYnVpbGQiLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICAgIH0KCiAgICByZXR1cm4gdHlwZWRlZjsKICB9CgogIERhcnRUeXBlIGJ1aWxkVGhpc1R5cGUoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgaWYgKHRoaXNUeXBlICE9IG51bGwpIHsKICAgICAgaWYgKGlkZW50aWNhbCh0aGlzVHlwZSwgY3ljbGljVHlwZUFsaWFzTWFya2VyKSkgewogICAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbSh0ZW1wbGF0ZUN5Y2xpY1R5cGVkZWYud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgICAgY2hhck9mZnNldCwgbm9MZW5ndGgsIGZpbGVVcmkpOwogICAgICAgIHJldHVybiBjb25zdCBJbnZhbGlkVHlwZSgpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzVHlwZTsKICAgIH0KICAgIC8vIEl0IGlzIGEgY29tcGlsZS10aW1lIGVycm9yIGZvciBhbiBhbGlhcyAodHlwZWRlZikgdG8gcmVmZXIgdG8gaXRzZWxmLiBXZQogICAgLy8gZGV0ZWN0IGN5Y2xlcyBieSBkZXRlY3RpbmcgcmVjdXJzaXZlIGNhbGxzIHRvIHRoaXMgbWV0aG9kIHVzaW5nIGFuCiAgICAvLyBpbnN0YW5jZSBvZiBJbnZhbGlkVHlwZSB0aGF0IGlzbid0IGlkZW50aWNhbCB0byBgY29uc3QgSW52YWxpZFR5cGUoKWAuCiAgICB0aGlzVHlwZSA9IGN5Y2xpY1R5cGVBbGlhc01hcmtlcjsKICAgIFR5cGVCdWlsZGVyIHR5cGUgPSB0aGlzLnR5cGU7CiAgICBpZiAodHlwZSBpcyBGdW5jdGlvblR5cGVCdWlsZGVyKSB7CiAgICAgIEZ1bmN0aW9uVHlwZSBidWlsdFR5cGUgPSB0eXBlPy5idWlsZChsaWJyYXJ5LCB0eXBlZGVmLnRoaXNUeXBlKTsKICAgICAgaWYgKGJ1aWx0VHlwZSAhPSBudWxsKSB7CiAgICAgICAgaWYgKHR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICAgICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIHR2IGluIHR5cGVWYXJpYWJsZXMpIHsKICAgICAgICAgICAgLy8gRm9sbG93IGJvdW5kIGluIG9yZGVyIHRvIGZpbmQgYWxsIGN5Y2xlcwogICAgICAgICAgICB0di5ib3VuZD8uYnVpbGQobGlicmFyeSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzVHlwZSA9IGJ1aWx0VHlwZTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gdGhpc1R5cGUgPSBjb25zdCBJbnZhbGlkVHlwZSgpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gbnVsbCkgewogICAgICByZXR1cm4gdGhpc1R5cGUgPSBjb25zdCBJbnZhbGlkVHlwZSgpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHVuaGFuZGxlZCgKICAgICAgICAgICIke3R5cGUuZnVsbE5hbWVGb3JFcnJvcnN9IiwgImJ1aWxkVGhpc1R5cGUiLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICAgIH0KICB9CgogIC8vLyBbYXJndW1lbnRzXSBoYXZlIGFscmVhZHkgYmVlbiBidWlsdC4KICBEYXJ0VHlwZSBidWlsZFR5cGVzV2l0aEJ1aWx0QXJndW1lbnRzKAogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBMaXN0PERhcnRUeXBlPiBhcmd1bWVudHMpIHsKICAgIERhcnRUeXBlIHRoaXNUeXBlID0gYnVpbGRUaGlzVHlwZShsaWJyYXJ5KTsKICAgIGlmIChjb25zdCBEeW5hbWljVHlwZSgpID09IHRoaXNUeXBlKSByZXR1cm4gdGhpc1R5cGU7CiAgICBGdW5jdGlvblR5cGUgcmVzdWx0ID0gdGhpc1R5cGU7CiAgICBpZiAodHlwZWRlZi50eXBlUGFyYW1ldGVycy5pc0VtcHR5ICYmIGFyZ3VtZW50cyA9PSBudWxsKSByZXR1cm4gcmVzdWx0OwogICAgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBzdWJzdGl0dXRpb24gPSA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+e307CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVkZWYudHlwZVBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgc3Vic3RpdHV0aW9uW3R5cGVkZWYudHlwZVBhcmFtZXRlcnNbaV1dID0gYXJndW1lbnRzW2ldOwogICAgfQogICAgcmV0dXJuIHN1YnN0aXR1dGUocmVzdWx0LCBzdWJzdGl0dXRpb24pOwogIH0KCiAgTGlzdDxEYXJ0VHlwZT4gYnVpbGRUeXBlQXJndW1lbnRzKAogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBMaXN0PFR5cGVCdWlsZGVyPiBhcmd1bWVudHMpIHsKICAgIGlmIChhcmd1bWVudHMgPT0gbnVsbCAmJiB0eXBlVmFyaWFibGVzID09IG51bGwpIHsKICAgICAgcmV0dXJuIDxEYXJ0VHlwZT5bXTsKICAgIH0KCiAgICBpZiAoYXJndW1lbnRzID09IG51bGwgJiYgdHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgIExpc3Q8RGFydFR5cGU+IHJlc3VsdCA9CiAgICAgICAgICBuZXcgTGlzdDxEYXJ0VHlwZT4uZmlsbGVkKHR5cGVWYXJpYWJsZXMubGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgKytpKSB7CiAgICAgICAgcmVzdWx0W2ldID0gdHlwZVZhcmlhYmxlc1tpXS5kZWZhdWx0VHlwZS5idWlsZChsaWJyYXJ5KTsKICAgICAgfQogICAgICBpZiAobGlicmFyeSBpcyBTb3VyY2VMaWJyYXJ5QnVpbGRlcikgewogICAgICAgIGxpYnJhcnkuaW5mZXJyZWRUeXBlcy5hZGRBbGwocmVzdWx0KTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoKICAgIGlmIChhcmd1bWVudHMgIT0gbnVsbCAmJiBhcmd1bWVudHMubGVuZ3RoICE9ICh0eXBlVmFyaWFibGVzPy5sZW5ndGggPz8gMCkpIHsKICAgICAgLy8gVGhhdCBzaG91bGQgYmUgY2F1Z2h0IGFuZCByZXBvcnRlZCBhcyBhIGNvbXBpbGUtdGltZSBlcnJvciBlYXJsaWVyLgogICAgICByZXR1cm4gdW5oYW5kbGVkKAogICAgICAgICAgdGVtcGxhdGVUeXBlQXJndW1lbnRNaXNtYXRjaAogICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKHR5cGVWYXJpYWJsZXMubGVuZ3RoKQogICAgICAgICAgICAgIC5tZXNzYWdlLAogICAgICAgICAgImJ1aWxkVHlwZUFyZ3VtZW50cyIsCiAgICAgICAgICAtMSwKICAgICAgICAgIG51bGwpOwogICAgfQoKICAgIC8vIGFyZ3VtZW50cy5sZW5ndGggPT0gdHlwZVZhcmlhYmxlcy5sZW5ndGgKICAgIExpc3Q8RGFydFR5cGU+IHJlc3VsdCA9CiAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+LmZpbGxlZChhcmd1bWVudHMubGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7ICsraSkgewogICAgICByZXN1bHRbaV0gPSBhcmd1bWVudHNbaV0uYnVpbGQobGlicmFyeSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIElmIFthcmd1bWVudHNdIGFyZSBudWxsLCB0aGUgZGVmYXVsdCB0eXBlcyBmb3IgdGhlIHZhcmlhYmxlcyBhcmUgdXNlZC4KICBAb3ZlcnJpZGUKICBpbnQgZ2V0IHR5cGVWYXJpYWJsZXNDb3VudCA9PiB0eXBlVmFyaWFibGVzPy5sZW5ndGggPz8gMDsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgYnVpbGRUeXBlKExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50cykgewogICAgRGFydFR5cGUgdGhpc1R5cGUgPSBidWlsZFRoaXNUeXBlKGxpYnJhcnkpOwogICAgaWYgKHRoaXNUeXBlIGlzIEludmFsaWRUeXBlKSByZXR1cm4gdGhpc1R5cGU7CiAgICBGdW5jdGlvblR5cGUgcmVzdWx0ID0gdGhpc1R5cGU7CiAgICBpZiAodHlwZWRlZi50eXBlUGFyYW1ldGVycy5pc0VtcHR5ICYmIGFyZ3VtZW50cyA9PSBudWxsKSByZXR1cm4gcmVzdWx0OwogICAgLy8gT3RoZXJ3aXNlLCBzdWJzdGl0dXRlLgogICAgcmV0dXJuIGJ1aWxkVHlwZXNXaXRoQnVpbHRBcmd1bWVudHMoCiAgICAgICAgbGlicmFyeSwgYnVpbGRUeXBlQXJndW1lbnRzKGxpYnJhcnksIGFyZ3VtZW50cykpOwogIH0KfQoKZmluYWwgSW52YWxpZFR5cGUgY3ljbGljVHlwZUFsaWFzTWFya2VyID0gbmV3IEludmFsaWRUeXBlKCk7CoDaAE5OPAErASEJEhUWFRcRHQEqQgEdSAEnCR0gGBkVHQE3AUoBFgkYGRUgHQEbATgaATEBKxkBFQFATBkdJVAkMSo2AU0wLTAvEhABLgEtATc1ASInK0Q4QjQIMDIrPAEiPktLIDQTOQwKCB9MBgEUBAEzHDhGLCQIFwZQSk4mIidHHyU6OCYMCiUPLwgfLQ0YTgYEASspOjA6JExNPj4GLQQBJT02GwYBNh5RMEEILS4IFQYBUU0YJzMYIA4RBgEwHEsuLwYTBAFNDDwBDEwwMiRMHik6BAIBPQE7cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvdHlwZV9hbGlhc19idWlsZGVyLmRhcnRBc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2RpbGwvZGlsbF9jbGFzc19idWlsZGVyLmRhcnSUUS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmRpbGxfY2xhc3NfYnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93IENsYXNzLCBEYXJ0VHlwZSwgTWVtYmVyLCBTdXBlcnR5cGUsIFR5cGVQYXJhbWV0ZXI7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgdW5pbXBsZW1lbnRlZDsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgQ2xhc3NCdWlsZGVyLAogICAgICAgIFR5cGVCdWlsZGVyLAogICAgICAgIExpYnJhcnlCdWlsZGVyLAogICAgICAgIE1lbWJlckJ1aWxkZXIsCiAgICAgICAgU2NvcGUsCiAgICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlcjsKCmltcG9ydCAnLi4vbW9kaWZpZXIuZGFydCcgc2hvdyBhYnN0cmFjdE1hc2ssIG5hbWVkTWl4aW5BcHBsaWNhdGlvbk1hc2s7CgppbXBvcnQgJ2RpbGxfbGlicmFyeV9idWlsZGVyLmRhcnQnIHNob3cgRGlsbExpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICdkaWxsX21lbWJlcl9idWlsZGVyLmRhcnQnIHNob3cgRGlsbE1lbWJlckJ1aWxkZXI7CgpjbGFzcyBEaWxsQ2xhc3NCdWlsZGVyIGV4dGVuZHMgQ2xhc3NCdWlsZGVyIHsKICBmaW5hbCBDbGFzcyBjbHM7CgogIERpbGxDbGFzc0J1aWxkZXIoQ2xhc3MgY2xzLCBEaWxsTGlicmFyeUJ1aWxkZXIgcGFyZW50KQogICAgICA6IGNscyA9IGNscywKICAgICAgICBzdXBlcigKICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgY29tcHV0ZU1vZGlmaWVycyhjbHMpLAogICAgICAgICAgICBjbHMubmFtZSwKICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgbmV3IFNjb3BlKAogICAgICAgICAgICAgICAgbG9jYWw6IDxTdHJpbmcsIE1lbWJlckJ1aWxkZXI+e30sCiAgICAgICAgICAgICAgICBzZXR0ZXJzOiA8U3RyaW5nLCBNZW1iZXJCdWlsZGVyPnt9LAogICAgICAgICAgICAgICAgcGFyZW50OiBwYXJlbnQuc2NvcGUsCiAgICAgICAgICAgICAgICBkZWJ1Z05hbWU6ICJjbGFzcyAke2Nscy5uYW1lfSIsCiAgICAgICAgICAgICAgICBpc01vZGlmaWFibGU6IGZhbHNlKSwKICAgICAgICAgICAgbmV3IFNjb3BlKAogICAgICAgICAgICAgICAgbG9jYWw6IDxTdHJpbmcsIE1lbWJlckJ1aWxkZXI+e30sCiAgICAgICAgICAgICAgICBkZWJ1Z05hbWU6IGNscy5uYW1lLAogICAgICAgICAgICAgICAgaXNNb2RpZmlhYmxlOiBmYWxzZSksCiAgICAgICAgICAgIHBhcmVudCwKICAgICAgICAgICAgY2xzLmZpbGVPZmZzZXQpOwoKICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IGdldCB0eXBlVmFyaWFibGVzIHsKICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcyA9IHN1cGVyLnR5cGVWYXJpYWJsZXM7CiAgICBpZiAodHlwZVZhcmlhYmxlcyA9PSBudWxsICYmIGNscy50eXBlUGFyYW1ldGVycy5pc05vdEVtcHR5KSB7CiAgICAgIHR5cGVWYXJpYWJsZXMgPSBzdXBlci50eXBlVmFyaWFibGVzID0KICAgICAgICAgIGNvbXB1dGVUeXBlVmFyaWFibGVCdWlsZGVycyhsaWJyYXJ5LCBjbHMudHlwZVBhcmFtZXRlcnMpOwogICAgfQogICAgcmV0dXJuIHR5cGVWYXJpYWJsZXM7CiAgfQoKICBVcmkgZ2V0IGZpbGVVcmkgPT4gY2xzLmZpbGVVcmk7CgogIFR5cGVCdWlsZGVyIGdldCBzdXBlcnR5cGUgewogICAgVHlwZUJ1aWxkZXIgc3VwZXJ0eXBlID0gc3VwZXIuc3VwZXJ0eXBlOwogICAgaWYgKHN1cGVydHlwZSA9PSBudWxsKSB7CiAgICAgIFN1cGVydHlwZSB0YXJnZXRTdXBlcnR5cGUgPSBjbHMuc3VwZXJ0eXBlOwogICAgICBpZiAodGFyZ2V0U3VwZXJ0eXBlID09IG51bGwpIHJldHVybiBudWxsOwogICAgICBzdXBlci5zdXBlcnR5cGUgPQogICAgICAgICAgc3VwZXJ0eXBlID0gY29tcHV0ZVR5cGVCdWlsZGVyKGxpYnJhcnksIHRhcmdldFN1cGVydHlwZSk7CiAgICB9CiAgICByZXR1cm4gc3VwZXJ0eXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3MgZ2V0IGFjdHVhbENscyA9PiBjbHM7CgogIHZvaWQgYWRkTWVtYmVyKE1lbWJlciBtZW1iZXIpIHsKICAgIERpbGxNZW1iZXJCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgRGlsbE1lbWJlckJ1aWxkZXIobWVtYmVyLCB0aGlzKTsKICAgIFN0cmluZyBuYW1lID0gbWVtYmVyLm5hbWUubmFtZTsKICAgIGlmIChidWlsZGVyLmlzQ29uc3RydWN0b3IgfHwgYnVpbGRlci5pc0ZhY3RvcnkpIHsKICAgICAgY29uc3RydWN0b3JTY29wZUJ1aWxkZXIuYWRkTWVtYmVyKG5hbWUsIGJ1aWxkZXIpOwogICAgfSBlbHNlIGlmIChidWlsZGVyLmlzU2V0dGVyKSB7CiAgICAgIHNjb3BlQnVpbGRlci5hZGRTZXR0ZXIobmFtZSwgYnVpbGRlcik7CiAgICB9IGVsc2UgewogICAgICBzY29wZUJ1aWxkZXIuYWRkTWVtYmVyKG5hbWUsIGJ1aWxkZXIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCB0eXBlVmFyaWFibGVzQ291bnQgPT4gY2xzLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsKCiAgQG92ZXJyaWRlCiAgTGlzdDxEYXJ0VHlwZT4gYnVpbGRUeXBlQXJndW1lbnRzKAogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBMaXN0PFR5cGVCdWlsZGVyPiBhcmd1bWVudHMpIHsKICAgIC8vIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBbdHlwZVZhcmlhYmxlc10gYXJlbid0IHJlc3RvcmVkIGZyb20gW3RhcmdldF0uCiAgICAvLyBTbywgaWYgW2FyZ3VtZW50c10gaXMgbnVsbCwgdGhlIGRlZmF1bHQgdHlwZXMgc2hvdWxkIGJlIHJldHJpZXZlZCBmcm9tCiAgICAvLyBbY2xzLnR5cGVQYXJhbWV0ZXJzXS4KICAgIGlmIChhcmd1bWVudHMgPT0gbnVsbCkgewogICAgICBMaXN0PERhcnRUeXBlPiByZXN1bHQgPSBuZXcgTGlzdDxEYXJ0VHlwZT4uZmlsbGVkKAogICAgICAgICAgY2xzLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCwgbnVsbCwKICAgICAgICAgIGdyb3dhYmxlOiB0cnVlKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyArK2kpIHsKICAgICAgICByZXN1bHRbaV0gPSBjbHMudHlwZVBhcmFtZXRlcnNbaV0uZGVmYXVsdFR5cGU7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICAvLyBbYXJndW1lbnRzXSAhPSBudWxsCiAgICBMaXN0PERhcnRUeXBlPiByZXN1bHQgPQogICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQoYXJndW1lbnRzLmxlbmd0aCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyArK2kpIHsKICAgICAgcmVzdWx0W2ldID0gYXJndW1lbnRzW2ldLmJ1aWxkKGxpYnJhcnkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBjbGFzcyBpcyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGEgbWl4aW4gdG8gaXRzCiAgLy8vIHN1cGVyY2xhc3MuCiAgYm9vbCBnZXQgaXNNaXhpbkFwcGxpY2F0aW9uID0+IGNscy5pc01peGluQXBwbGljYXRpb247CgogIFR5cGVCdWlsZGVyIGdldCBtaXhlZEluVHlwZSB7CiAgICByZXR1cm4gY29tcHV0ZVR5cGVCdWlsZGVyKGxpYnJhcnksIGNscy5taXhlZEluVHlwZSk7CiAgfQoKICBMaXN0PFR5cGVCdWlsZGVyPiBnZXQgaW50ZXJmYWNlcyB7CiAgICBpZiAoY2xzLmltcGxlbWVudGVkVHlwZXMuaXNFbXB0eSkgcmV0dXJuIG51bGw7CiAgICBpZiAoc3VwZXIuaW50ZXJmYWNlcyA9PSBudWxsKSB7CiAgICAgIExpc3Q8VHlwZUJ1aWxkZXI+IHJlc3VsdCA9CiAgICAgICAgICBuZXcgTGlzdDxUeXBlQnVpbGRlcj4oY2xzLmltcGxlbWVudGVkVHlwZXMubGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHsKICAgICAgICByZXN1bHRbaV0gPSBjb21wdXRlVHlwZUJ1aWxkZXIobGlicmFyeSwgY2xzLmltcGxlbWVudGVkVHlwZXNbaV0pOwogICAgICB9CiAgICAgIHN1cGVyLmludGVyZmFjZXMgPSByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuaW50ZXJmYWNlczsKICB9CgogIHZvaWQgc2V0IG1peGVkSW5UeXBlKFR5cGVCdWlsZGVyIG1peGluKSB7CiAgICB1bmltcGxlbWVudGVkKCJtaXhlZEluVHlwZT0iLCAtMSwgbnVsbCk7CiAgfQp9CgppbnQgY29tcHV0ZU1vZGlmaWVycyhDbGFzcyBjbHMpIHsKICBpbnQgbW9kaWZpZXJzID0gMDsKICBpZiAoY2xzLmlzQWJzdHJhY3QpIHsKICAgIG1vZGlmaWVycyB8PSBhYnN0cmFjdE1hc2s7CiAgfQogIGlmIChjbHMuaXNNaXhpbkFwcGxpY2F0aW9uICYmIGNscy5uYW1lICE9IG51bGwpIHsKICAgIG1vZGlmaWVycyB8PSBuYW1lZE1peGluQXBwbGljYXRpb25NYXNrOwogIH0KICByZXR1cm4gbW9kaWZpZXJzOwp9CgpUeXBlQnVpbGRlciBjb21wdXRlVHlwZUJ1aWxkZXIoCiAgICBEaWxsTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgU3VwZXJ0eXBlIHN1cGVydHlwZSkgewogIHJldHVybiBzdXBlcnR5cGUgPT0gbnVsbAogICAgICA/IG51bGwKICAgICAgOiBsaWJyYXJ5LmxvYWRlci5jb21wdXRlVHlwZUJ1aWxkZXIoc3VwZXJ0eXBlLmFzSW50ZXJmYWNlVHlwZSk7Cn0KCkxpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gY29tcHV0ZVR5cGVWYXJpYWJsZUJ1aWxkZXJzKAogICAgRGlsbExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMpIHsKICBpZiAodHlwZVBhcmFtZXRlcnMgPT0gbnVsbCB8fCB0eXBlUGFyYW1ldGVycy5sZW5ndGggPT0gMCkgcmV0dXJuIG51bGw7CiAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiByZXN1bHQgPQogICAgICBuZXcgTGlzdC5maWxsZWQodHlwZVBhcmFtZXRlcnMubGVuZ3RoLCBudWxsKTsKICBmb3IgKGludCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykgewogICAgcmVzdWx0W2ldID0gbmV3IFR5cGVWYXJpYWJsZUJ1aWxkZXIuZnJvbUtlcm5lbCh0eXBlUGFyYW1ldGVyc1tpXSwgbGlicmFyeSk7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KgK0ATk48ASIBITwBLgEnCRYVGBcPHQFIATwBOgEuEwE5Ew8SIxYSEhISFzI0JjAmFzIlJhQdATBDQixEBhoEASIBHi0dMTAYRAYWBAEMHgEiRSQ2OCMtDS0GBAEMOwEMJT1PTh0dOSsbMDcIFQYBGxxLLi8GEwQBShI5ASA5BAElMyQhPjBKCCEGHQQBLC0EAgEiFRgfBDQsBBQCASA3Gw1GAgE3RkklNCxQBBECAThwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvZGlsbC9kaWxsX2NsYXNzX2J1aWxkZXIuZGFydEZzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvZGlsbC9kaWxsX3R5cGVfYWxpYXNfYnVpbGRlci5kYXJ0h/EvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5kaWxsX3R5cGVkZWZfYnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgRGFydFR5cGUsIFR5cGVkZWY7CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIFR5cGVBbGlhc0J1aWxkZXIsCiAgICAgICAgRnVuY3Rpb25UeXBlQnVpbGRlciwKICAgICAgICBUeXBlQnVpbGRlciwKICAgICAgICBMaWJyYXJ5QnVpbGRlciwKICAgICAgICBNZXRhZGF0YUJ1aWxkZXI7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgdW5pbXBsZW1lbnRlZDsKCmltcG9ydCAnZGlsbF9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBEaWxsTGlicmFyeUJ1aWxkZXI7CgpjbGFzcyBEaWxsVHlwZUFsaWFzQnVpbGRlciBleHRlbmRzIFR5cGVBbGlhc0J1aWxkZXIgewogIERpbGxUeXBlQWxpYXNCdWlsZGVyKFR5cGVkZWYgdHlwZWRlZiwgRGlsbExpYnJhcnlCdWlsZGVyIHBhcmVudCkKICAgICAgOiBzdXBlcihudWxsLCB0eXBlZGVmLm5hbWUsIG51bGwsIG51bGwsIHBhcmVudCwgdHlwZWRlZi5maWxlT2Zmc2V0LAogICAgICAgICAgICB0eXBlZGVmKTsKCiAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IGdldCBtZXRhZGF0YSB7CiAgICByZXR1cm4gdW5pbXBsZW1lbnRlZCgibWV0YWRhdGEiLCAtMSwgbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IHR5cGVWYXJpYWJsZXNDb3VudCA9PiB0eXBlZGVmLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25UeXBlQnVpbGRlciBnZXQgdHlwZSB7CiAgICByZXR1cm4gdW5pbXBsZW1lbnRlZCgidHlwZSIsIC0xLCBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGJ1aWxkVGhpc1R5cGUoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgcmV0dXJuIHRoaXNUeXBlID8/PSB0eXBlZGVmLnR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PERhcnRUeXBlPiBidWlsZFR5cGVBcmd1bWVudHMoCiAgICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50cykgewogICAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIFt0eXBlVmFyaWFibGVzXSBhcmVuJ3QgcmVzdG9yZWQgZnJvbSBbdGFyZ2V0XS4KICAgIC8vIFNvLCBpZiBbYXJndW1lbnRzXSBpcyBudWxsLCB0aGUgZGVmYXVsdCB0eXBlcyBzaG91bGQgYmUgcmV0cmlldmVkIGZyb20KICAgIC8vIFtjbHMudHlwZVBhcmFtZXRlcnNdLgogICAgaWYgKGFyZ3VtZW50cyA9PSBudWxsKSB7CiAgICAgIExpc3Q8RGFydFR5cGU+IHJlc3VsdCA9IG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQoCiAgICAgICAgICB0eXBlZGVmLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCwgbnVsbCwKICAgICAgICAgIGdyb3dhYmxlOiB0cnVlKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyArK2kpIHsKICAgICAgICByZXN1bHRbaV0gPSB0eXBlZGVmLnR5cGVQYXJhbWV0ZXJzW2ldLmRlZmF1bHRUeXBlOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgLy8gW2FyZ3VtZW50c10gIT0gbnVsbAogICAgTGlzdDxEYXJ0VHlwZT4gcmVzdWx0ID0KICAgICAgICBuZXcgTGlzdDxEYXJ0VHlwZT4uZmlsbGVkKGFyZ3VtZW50cy5sZW5ndGgsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgKytpKSB7CiAgICAgIHJlc3VsdFtpXSA9IGFyZ3VtZW50c1tpXS5idWlsZChsaWJyYXJ5KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CkUATk48ASQBOQEnCRodFRgZAS4BPAE2Q0oWAScwBAEMPwEMISwEAQwzJgQBDCU9T04dHTkvGzA7CBUGARscSy4vBhMEAgE9cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2RpbGwvZGlsbF90eXBlX2FsaWFzX2J1aWxkZXIuZGFydEZzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL3R5cGVfYnVpbGRlcl9jb21wdXRlci5kYXJ0kD8vLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS50eXBlX2J1aWxkZXJfY29tcHV0ZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIEJvdHRvbVR5cGUsCiAgICAgICAgQ2xhc3MsCiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRGFydFR5cGVWaXNpdG9yLAogICAgICAgIER5bmFtaWNUeXBlLAogICAgICAgIEZ1bmN0aW9uVHlwZSwKICAgICAgICBJbnRlcmZhY2VUeXBlLAogICAgICAgIEludmFsaWRUeXBlLAogICAgICAgIExpYnJhcnksCiAgICAgICAgTmFtZWRUeXBlLAogICAgICAgIFR5cGVQYXJhbWV0ZXIsCiAgICAgICAgVHlwZVBhcmFtZXRlclR5cGUsCiAgICAgICAgVHlwZWRlZlR5cGUsCiAgICAgICAgVm9pZFR5cGU7CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIER5bmFtaWNUeXBlQnVpbGRlciwKICAgICAgICBGdW5jdGlvblR5cGVCdWlsZGVyLAogICAgICAgIENsYXNzQnVpbGRlciwKICAgICAgICBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyLAogICAgICAgIE5hbWVkVHlwZUJ1aWxkZXIsCiAgICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlciwKICAgICAgICBMaWJyYXJ5QnVpbGRlciwKICAgICAgICBUeXBlQnVpbGRlciwKICAgICAgICBWb2lkVHlwZUJ1aWxkZXI7CgppbXBvcnQgJy4uL2xvYWRlci5kYXJ0JyBzaG93IExvYWRlcjsKCmltcG9ydCAnLi4vcGFyc2VyLmRhcnQnIHNob3cgRm9ybWFsUGFyYW1ldGVyS2luZDsKCmNsYXNzIFR5cGVCdWlsZGVyQ29tcHV0ZXIgaW1wbGVtZW50cyBEYXJ0VHlwZVZpc2l0b3I8VHlwZUJ1aWxkZXI+IHsKICBmaW5hbCBMb2FkZXIgbG9hZGVyOwoKICBjb25zdCBUeXBlQnVpbGRlckNvbXB1dGVyKHRoaXMubG9hZGVyKTsKCiAgVHlwZUJ1aWxkZXIgZGVmYXVsdERhcnRUeXBlKERhcnRUeXBlIG5vZGUpIHsKICAgIHRocm93ICJVbnN1cHBvcnRlZCI7CiAgfQoKICBUeXBlQnVpbGRlciB2aXNpdEludmFsaWRUeXBlKEludmFsaWRUeXBlIG5vZGUpIHsKICAgIHRocm93ICJOb3QgaW1wbGVtZW50ZWQiOwogIH0KCiAgVHlwZUJ1aWxkZXIgdmlzaXREeW5hbWljVHlwZShEeW5hbWljVHlwZSBub2RlKSB7CiAgICByZXR1cm4gbmV3IE5hbWVkVHlwZUJ1aWxkZXIoImR5bmFtaWMiLCBudWxsKQogICAgICAuLmJpbmQoCiAgICAgICAgICBuZXcgRHluYW1pY1R5cGVCdWlsZGVyKGNvbnN0IER5bmFtaWNUeXBlKCksIGxvYWRlci5jb3JlTGlicmFyeSwgLTEpKTsKICB9CgogIFR5cGVCdWlsZGVyIHZpc2l0Vm9pZFR5cGUoVm9pZFR5cGUgbm9kZSkgewogICAgcmV0dXJuIG5ldyBOYW1lZFR5cGVCdWlsZGVyKCJ2b2lkIiwgbnVsbCkKICAgICAgLi5iaW5kKG5ldyBWb2lkVHlwZUJ1aWxkZXIoY29uc3QgVm9pZFR5cGUoKSwgbG9hZGVyLmNvcmVMaWJyYXJ5LCAtMSkpOwogIH0KCiAgVHlwZUJ1aWxkZXIgdmlzaXRCb3R0b21UeXBlKEJvdHRvbVR5cGUgbm9kZSkgewogICAgdGhyb3cgIk5vdCBpbXBsZW1lbnRlZCI7CiAgfQoKICBUeXBlQnVpbGRlciB2aXNpdEludGVyZmFjZVR5cGUoSW50ZXJmYWNlVHlwZSBub2RlKSB7CiAgICBDbGFzc0J1aWxkZXIgY2xzID0KICAgICAgICBsb2FkZXIuY29tcHV0ZUNsYXNzQnVpbGRlckZyb21UYXJnZXRDbGFzcyhub2RlLmNsYXNzTm9kZSk7CiAgICBMaXN0PFR5cGVCdWlsZGVyPiBhcmd1bWVudHM7CiAgICBMaXN0PERhcnRUeXBlPiBrZXJuZWxBcmd1bWVudHMgPSBub2RlLnR5cGVBcmd1bWVudHM7CiAgICBpZiAoa2VybmVsQXJndW1lbnRzLmlzTm90RW1wdHkpIHsKICAgICAgYXJndW1lbnRzID0gbmV3IExpc3Q8VHlwZUJ1aWxkZXI+KGtlcm5lbEFyZ3VtZW50cy5sZW5ndGgpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGtlcm5lbEFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgIGFyZ3VtZW50c1tpXSA9IGtlcm5lbEFyZ3VtZW50c1tpXS5hY2NlcHQodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgTmFtZWRUeXBlQnVpbGRlcihjbHMubmFtZSwgYXJndW1lbnRzKS4uYmluZChjbHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUJ1aWxkZXIgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIG5vZGUpIHsKICAgIFR5cGVCdWlsZGVyIHJldHVyblR5cGUgPSBub2RlLnJldHVyblR5cGUuYWNjZXB0KHRoaXMpOwogICAgLy8gV2UgY291bGQgY29tcHV0ZSB0aGUgdHlwZSB2YXJpYWJsZXMgaGVyZS4gSG93ZXZlciwgdGhlIGN1cnJlbnQKICAgIC8vIGltcGxlbWVudGF0aW9uIG9mIFt2aXNpdFR5cGVQYXJhbWV0ZXJUeXBlXSBpcyBzdWZmaWNpZW50LgogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzID0gbnVsbDsKICAgIExpc3Q8RGFydFR5cGU+IHBvc2l0aW9uYWxQYXJhbWV0ZXJzID0gbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVyczsKICAgIExpc3Q8TmFtZWRUeXBlPiBuYW1lZFBhcmFtZXRlcnMgPSBub2RlLm5hbWVkUGFyYW1ldGVyczsKICAgIExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4gZm9ybWFscyA9IG5ldyBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+KAogICAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCArIG5hbWVkUGFyYW1ldGVycy5sZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICBUeXBlQnVpbGRlciB0eXBlID0gcG9zaXRpb25hbFBhcmFtZXRlcnNbaV0uYWNjZXB0KHRoaXMpOwogICAgICBGb3JtYWxQYXJhbWV0ZXJLaW5kIGtpbmQgPSBGb3JtYWxQYXJhbWV0ZXJLaW5kLm1hbmRhdG9yeTsKICAgICAgaWYgKGkgPj0gbm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50KSB7CiAgICAgICAga2luZCA9IEZvcm1hbFBhcmFtZXRlcktpbmQub3B0aW9uYWxQb3NpdGlvbmFsOwogICAgICB9CiAgICAgIGZvcm1hbHNbaV0gPSBuZXcgRm9ybWFsUGFyYW1ldGVyQnVpbGRlcihudWxsLCAwLCB0eXBlLCBudWxsLCBudWxsLCAtMSkKICAgICAgICAuLmtpbmQgPSBraW5kOwogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYW1lZFBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgTmFtZWRUeXBlIHBhcmFtZXRlciA9IG5hbWVkUGFyYW1ldGVyc1tpXTsKICAgICAgVHlwZUJ1aWxkZXIgdHlwZSA9IHBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldLmFjY2VwdCh0aGlzKTsKICAgICAgZm9ybWFsc1tpICsgcG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoXSA9CiAgICAgICAgICBuZXcgRm9ybWFsUGFyYW1ldGVyQnVpbGRlcihudWxsLCAwLCB0eXBlLCBwYXJhbWV0ZXIubmFtZSwgbnVsbCwgLTEpCiAgICAgICAgICAgIC4ua2luZCA9IEZvcm1hbFBhcmFtZXRlcktpbmQub3B0aW9uYWxOYW1lZDsKICAgIH0KCiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uVHlwZUJ1aWxkZXIocmV0dXJuVHlwZSwgdHlwZVZhcmlhYmxlcywgZm9ybWFscyk7CiAgfQoKICBUeXBlQnVpbGRlciB2aXNpdFR5cGVQYXJhbWV0ZXJUeXBlKFR5cGVQYXJhbWV0ZXJUeXBlIG5vZGUpIHsKICAgIFR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyID0gbm9kZS5wYXJhbWV0ZXI7CiAgICBDbGFzcyBrZXJuZWxDbGFzcyA9IHBhcmFtZXRlci5wYXJlbnQ7CiAgICBMaWJyYXJ5IGtlcm5lbExpYnJhcnkgPSBrZXJuZWxDbGFzcy5lbmNsb3NpbmdMaWJyYXJ5OwogICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IGxvYWRlci5idWlsZGVyc1trZXJuZWxMaWJyYXJ5LmltcG9ydFVyaV07CiAgICByZXR1cm4gbmV3IE5hbWVkVHlwZUJ1aWxkZXIocGFyYW1ldGVyLm5hbWUsIG51bGwpCiAgICAgIC4uYmluZChuZXcgVHlwZVZhcmlhYmxlQnVpbGRlci5mcm9tS2VybmVsKHBhcmFtZXRlciwgbGlicmFyeSkpOwogIH0KCiAgVHlwZUJ1aWxkZXIgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSBub2RlKSB7CiAgICB0aHJvdyAiTm90IGltcGxlbWVudGVkIjsKICB9Cn0KfgBOTjwBJQEhCRQPEhkVFhcVERMXGxUSAScJHB0WIBodGBUZASUBMgFEFwEqAS8ZBAEzHQQBMzEOUAQBLS5NBAExHQQBNxdDITkmQTk4CAZBBAEMNTtGQTRFPE0/PD9ALjcITRcGNzA/MU44BgFIBAE/Lio6RzZGBAEzHQQCAT1wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL3R5cGVfYnVpbGRlcl9jb21wdXRlci5kYXJ0Q3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9idWlsZGVyL2V4dGVuc2lvbl9idWlsZGVyLmRhcnSLwi8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6Y29yZScgaGlkZSBNYXBFbnRyeTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtTm90Rm91bmRJbjsKaW1wb3J0ICcuLi9zY29wZS5kYXJ0JzsKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JzsKaW1wb3J0ICdidWlsZGVyLmRhcnQnOwppbXBvcnQgJ2RlY2xhcmF0aW9uLmRhcnQnOwppbXBvcnQgJ2RlY2xhcmF0aW9uX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnbGlicmFyeV9idWlsZGVyLmRhcnQnOwppbXBvcnQgJ21ldGFkYXRhX2J1aWxkZXIuZGFydCc7CmltcG9ydCAndHlwZV9idWlsZGVyLmRhcnQnOwppbXBvcnQgJ3R5cGVfdmFyaWFibGVfYnVpbGRlci5kYXJ0JzsKCmFic3RyYWN0IGNsYXNzIEV4dGVuc2lvbkJ1aWxkZXIgZXh0ZW5kcyBEZWNsYXJhdGlvbkJ1aWxkZXIgewogIGZpbmFsIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVBhcmFtZXRlcnM7CiAgZmluYWwgVHlwZUJ1aWxkZXIgb25UeXBlOwoKICBFeHRlbnNpb25CdWlsZGVyKAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIGludCBtb2RpZmllcnMsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBMaWJyYXJ5QnVpbGRlciBwYXJlbnQsCiAgICAgIGludCBjaGFyT2Zmc2V0LAogICAgICBTY29wZSBzY29wZSwKICAgICAgdGhpcy50eXBlUGFyYW1ldGVycywKICAgICAgdGhpcy5vblR5cGUpCiAgICAgIDogc3VwZXIobWV0YWRhdGEsIG1vZGlmaWVycywgbmFtZSwgcGFyZW50LCBjaGFyT2Zmc2V0LCBzY29wZSk7CgogIC8vLyBSZXR1cm4gdGhlIFtFeHRlbnNpb25dIGJ1aWx0IGJ5IHRoaXMgYnVpbGRlci4KICBFeHRlbnNpb24gZ2V0IGV4dGVuc2lvbjsKCiAgLy8vIExvb2t1cCBhIHN0YXRpYyBtZW1iZXIgb2YgdGhpcyBkZWNsYXJhdGlvbi4KICBCdWlsZGVyIGZpbmRTdGF0aWNCdWlsZGVyKAogICAgICBTdHJpbmcgbmFtZSwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpLCBMaWJyYXJ5QnVpbGRlciBhY2Nlc3NpbmdMaWJyYXJ5LAogICAgICB7Ym9vbCBpc1NldHRlcjogZmFsc2V9KSB7CiAgICBpZiAoYWNjZXNzaW5nTGlicmFyeS5vcmlnaW4gIT0gbGlicmFyeS5vcmlnaW4gJiYgbmFtZS5zdGFydHNXaXRoKCJfIikpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBCdWlsZGVyIGRlY2xhcmF0aW9uID0gaXNTZXR0ZXIKICAgICAgICA/IHNjb3BlLmxvb2t1cFNldHRlcihuYW1lLCBjaGFyT2Zmc2V0LCBmaWxlVXJpLCBpc0luc3RhbmNlU2NvcGU6IGZhbHNlKQogICAgICAgIDogc2NvcGUubG9va3VwKG5hbWUsIGNoYXJPZmZzZXQsIGZpbGVVcmksIGlzSW5zdGFuY2VTY29wZTogZmFsc2UpOwogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSGFuZGxlIHBhdGNoZWQgZXh0ZW5zaW9ucy4KICAgIHJldHVybiBkZWNsYXJhdGlvbjsKICB9CgogIC8vIERlbGliZXJhdGVseSB1bnJlbGF0ZWQgcmV0dXJuIHR5cGUgdG8gc3RhdGljYWxseSBkZXRlY3QgbW9yZSBhY2NpZGVudGFsCiAgLy8gdXNlIHVudGlsIEJ1aWxkZXIudGFyZ2V0IGlzIGZ1bGx5IHJldGlyZWQuCiAgVW5yZWxhdGVkVGFyZ2V0IGdldCB0YXJnZXQgPT4gdW5zdXBwb3J0ZWQoCiAgICAgICJFeHRlbnNpb25CdWlsZGVyLnRhcmdldCBpcyBkZXByZWNhdGVkLiAiCiAgICAgICJVc2UgRXh0ZW5zaW9uQnVpbGRlci5leHRlbnNpb24gaW5zdGVhZC4iLAogICAgICBjaGFyT2Zmc2V0LAogICAgICBmaWxlVXJpKTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgYnVpbGRUeXBlKExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50cykgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkV4dGVuc2lvbkJ1aWxkZXIuYnVpbGRUeXBlIGlzIG5vdCBzdXBwb3J0ZWQuIik7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBidWlsZFR5cGVzV2l0aEJ1aWx0QXJndW1lbnRzKAogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBMaXN0PERhcnRUeXBlPiBhcmd1bWVudHMpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJFeHRlbnNpb25CdWlsZGVyLmJ1aWxkVHlwZXNXaXRoQnVpbHRBcmd1bWVudHMgIgogICAgICAgICJpcyBub3Qgc3VwcG9ydGVkLiIpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFeHRlbnNpb24gPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXQgdGhpc1R5cGUgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgQnVpbGRlciBsb29rdXBMb2NhbE1lbWJlcihTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgc2V0dGVyOiBmYWxzZSwgYm9vbCByZXF1aXJlZDogZmFsc2V9KSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdXBwb3J0IHBhdGNoaW5nIG9uIGV4dGVuc2lvbnMuCiAgICBCdWlsZGVyIGJ1aWxkZXIgPSBzZXR0ZXIgPyBzY29wZS5zZXR0ZXJzW25hbWVdIDogc2NvcGUubG9jYWxbbmFtZV07CiAgICBpZiAocmVxdWlyZWQgJiYgYnVpbGRlciA9PSBudWxsKSB7CiAgICAgIGludGVybmFsUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtTm90Rm91bmRJbi53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgIG5hbWUsIGZ1bGxOYW1lRm9yRXJyb3JzKSwKICAgICAgICAgIC0xLAogICAgICAgICAgbnVsbCk7CiAgICB9CiAgICByZXR1cm4gYnVpbGRlcjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZGVidWdOYW1lID0+ICJFeHRlbnNpb25CdWlsZGVyIjsKfQphAE5OPAEiASIBRRgbFxsjHyAcJQE9MhwBFCYVEx0WExsTRQE0GwEyHVEgTRMGI1BLNxgEAU0wLTAxEhABDExQBAEMKTpQHgQBDCABDCYBDCk0PEgnFzsoDhEGFAQBDC4CATpwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9leHRlbnNpb25fYnVpbGRlci5kYXJ0PXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9iYXNlL3Jlc29sdmVfcmVsYXRpdmVfdXJpLmRhcnSDvC8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovKioKICogUmVzb2x2ZSB0aGUgW2NvbnRhaW5lZFVyaV0gYWdhaW5zdCBbYmFzZVVyaV0gdXNpbmcgRGFydCBydWxlcy4KICoKICogVGhpcyBmdW5jdGlvbiBiZWhhdmVzIHNpbWlsYXJseSB0byBbVXJpLnJlc29sdmVVcmldLCBleGNlcHQgdGhhdCBpdCBwcm9wZXJseQogKiBoYW5kbGVzIHNpdHVhdGlvbnMgbGlrZSB0aGUgZm9sbG93aW5nOgogKgogKiAgICAgcmVzb2x2ZVJlbGF0aXZlVXJpKGRhcnQ6Y29yZSwgYm9vbC5kYXJ0KSAtPiBkYXJ0OmNvcmUvYm9vbC5kYXJ0CiAqICAgICByZXNvbHZlUmVsYXRpdmVVcmkocGFja2FnZTphL2IuZGFydCwgLi4vYy5kYXJ0KSAtPiBwYWNrYWdlOmEvYy5kYXJ0CiAqLwpVcmkgcmVzb2x2ZVJlbGF0aXZlVXJpKFVyaSBiYXNlVXJpLCBVcmkgY29udGFpbmVkVXJpKSB7CiAgaWYgKGNvbnRhaW5lZFVyaS5pc0Fic29sdXRlKSB7CiAgICByZXR1cm4gY29udGFpbmVkVXJpOwogIH0KICBTdHJpbmcgc2NoZW1lID0gYmFzZVVyaS5zY2hlbWU7CiAgLy8gZGFydDpjb3JlID0+IGRhcnQ6Y29yZS9jb3JlLmRhcnQKICBpZiAoc2NoZW1lID09ICdkYXJ0JykgewogICAgU3RyaW5nIHBhcnQgPSBiYXNlVXJpLnBhdGg7CiAgICBpZiAocGFydC5pbmRleE9mKCcvJykgPCAwKSB7CiAgICAgIGJhc2VVcmkgPSBVcmkucGFyc2UoJyRzY2hlbWU6JHBhcnQvJHBhcnQuZGFydCcpOwogICAgfQogIH0KICByZXR1cm4gYmFzZVVyaS5yZXNvbHZlVXJpKGNvbnRhaW5lZFVyaSk7Cn0KHQBOTjwBBEIDUCoDR0sEOCEZBCImGiAhNwYEKwIBNHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9iYXNlL3Jlc29sdmVfcmVsYXRpdmVfdXJpLmRhcnQ3c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2NvbmZpZ3VyYXRpb24uZGFydIHQLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuY29uZmlndXJhdGlvbjsKCmNsYXNzIENvbmZpZ3VyYXRpb24gewogIGZpbmFsIGludCBjaGFyT2Zmc2V0OwogIGZpbmFsIFN0cmluZyBkb3R0ZWROYW1lOwogIGZpbmFsIFN0cmluZyBjb25kaXRpb247CiAgZmluYWwgU3RyaW5nIGltcG9ydFVyaTsKICBDb25maWd1cmF0aW9uKAogICAgICB0aGlzLmNoYXJPZmZzZXQsIHRoaXMuZG90dGVkTmFtZSwgdGhpcy5jb25kaXRpb24sIHRoaXMuaW1wb3J0VXJpKTsKfQoQAE5OPAEdARYYGxoaEUkCAS5wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvY29uZmlndXJhdGlvbi5kYXJ0MHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9leHBvcnQuZGFydIQvLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuZXhwb3J0OwoKaW1wb3J0ICdidWlsZGVyL2J1aWxkZXIuZGFydCcgc2hvdyBCdWlsZGVyLCBMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnY29tYmluYXRvci5kYXJ0JyBzaG93IENvbWJpbmF0b3I7CgpjbGFzcyBFeHBvcnQgewogIC8vLyBUaGUgbGlicmFyeSB0aGF0IGlzIGV4cG9ydGluZyBbZXhwb3J0ZWRdOwogIGZpbmFsIExpYnJhcnlCdWlsZGVyIGV4cG9ydGVyOwoKICAvLy8gVGhlIGxpYnJhcnkgYmVpbmcgZXhwb3J0ZWQuCiAgZmluYWwgTGlicmFyeUJ1aWxkZXIgZXhwb3J0ZWQ7CgogIGZpbmFsIExpc3Q8Q29tYmluYXRvcj4gY29tYmluYXRvcnM7CgogIGZpbmFsIGludCBjaGFyT2Zmc2V0OwoKICBFeHBvcnQodGhpcy5leHBvcnRlciwgdGhpcy5leHBvcnRlZCwgdGhpcy5jb21iaW5hdG9ycywgdGhpcy5jaGFyT2Zmc2V0KTsKCiAgVXJpIGdldCBmaWxlVXJpID0+IGV4cG9ydGVyLmZpbGVVcmk7CgogIGJvb2wgYWRkVG9FeHBvcnRTY29wZShTdHJpbmcgbmFtZSwgQnVpbGRlciBtZW1iZXIpIHsKICAgIGlmIChjb21iaW5hdG9ycyAhPSBudWxsKSB7CiAgICAgIGZvciAoQ29tYmluYXRvciBjb21iaW5hdG9yIGluIGNvbWJpbmF0b3JzKSB7CiAgICAgICAgaWYgKGNvbWJpbmF0b3IuaXNTaG93ICYmICFjb21iaW5hdG9yLm5hbWVzLmNvbnRhaW5zKG5hbWUpKSByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKGNvbWJpbmF0b3IuaXNIaWRlICYmIGNvbWJpbmF0b3IubmFtZXMuY29udGFpbnMobmFtZSkpIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGV4cG9ydGVyLmFkZFRvRXhwb3J0U2NvcGUobmFtZSwgbWVtYmVyLCBjaGFyT2Zmc2V0KTsKICB9Cn0KJQBOTjwBFgE8ASoBDzAhASIhASYBGAFLAScBNx8zUVAIBkAEAgEncGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2V4cG9ydC5kYXJ0MHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9pbXBvcnQuZGFydIxxLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuaW1wb3J0OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBMaWJyYXJ5RGVwZW5kZW5jeTsKCmltcG9ydCAnYnVpbGRlci9idWlsZGVyLmRhcnQnIHNob3cgQnVpbGRlciwgTGlicmFyeUJ1aWxkZXI7CgppbXBvcnQgJ2J1aWxkZXIvcHJlZml4X2J1aWxkZXIuZGFydCcgc2hvdyBQcmVmaXhCdWlsZGVyOwoKaW1wb3J0ICdrZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydCcgc2hvdyB0b0tlcm5lbENvbWJpbmF0b3JzOwoKaW1wb3J0ICdjb21iaW5hdG9yLmRhcnQnIHNob3cgQ29tYmluYXRvcjsKCmltcG9ydCAnY29uZmlndXJhdGlvbi5kYXJ0JyBzaG93IENvbmZpZ3VyYXRpb247CgpjbGFzcyBJbXBvcnQgewogIC8vLyBUaGUgbGlicmFyeSB0aGF0IGlzIGltcG9ydGluZyBbaW1wb3J0ZWRdOwogIGZpbmFsIExpYnJhcnlCdWlsZGVyIGltcG9ydGVyOwoKICAvLy8gVGhlIGxpYnJhcnkgYmVpbmcgaW1wb3J0ZWQuCiAgZmluYWwgTGlicmFyeUJ1aWxkZXIgaW1wb3J0ZWQ7CgogIGZpbmFsIFByZWZpeEJ1aWxkZXIgcHJlZml4QnVpbGRlcjsKCiAgZmluYWwgYm9vbCBkZWZlcnJlZDsKCiAgZmluYWwgU3RyaW5nIHByZWZpeDsKCiAgZmluYWwgTGlzdDxDb21iaW5hdG9yPiBjb21iaW5hdG9yczsKCiAgZmluYWwgTGlzdDxDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uczsKCiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CgogIGZpbmFsIGludCBwcmVmaXhDaGFyT2Zmc2V0OwoKICAvLyBUaGUgTGlicmFyeUJ1aWxkZXIgZm9yIHRoZSBpbXBvcnRlZCBsaWJyYXJ5ICgnaW1wb3J0ZWQnKSBtYXkgYmUgbnVsbCB3aGVuCiAgLy8gdGhpcyBmaWVsZCBpcyBzZXQuCiAgZmluYWwgU3RyaW5nIG5hdGl2ZUltcG9ydFBhdGg7CgogIEltcG9ydCgKICAgICAgdGhpcy5pbXBvcnRlciwKICAgICAgdGhpcy5pbXBvcnRlZCwKICAgICAgdGhpcy5kZWZlcnJlZCwKICAgICAgdGhpcy5wcmVmaXgsCiAgICAgIHRoaXMuY29tYmluYXRvcnMsCiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMsCiAgICAgIHRoaXMuY2hhck9mZnNldCwKICAgICAgdGhpcy5wcmVmaXhDaGFyT2Zmc2V0LAogICAgICBpbnQgaW1wb3J0SW5kZXgsCiAgICAgIHt0aGlzLm5hdGl2ZUltcG9ydFBhdGh9KQogICAgICA6IHByZWZpeEJ1aWxkZXIgPSBjcmVhdGVQcmVmaXhCdWlsZGVyKHByZWZpeCwgaW1wb3J0ZXIsIGltcG9ydGVkLAogICAgICAgICAgICBjb21iaW5hdG9ycywgZGVmZXJyZWQsIGNoYXJPZmZzZXQsIHByZWZpeENoYXJPZmZzZXQsIGltcG9ydEluZGV4KTsKCiAgVXJpIGdldCBmaWxlVXJpID0+IGltcG9ydGVyLmZpbGVVcmk7CgogIHZvaWQgZmluYWxpemVJbXBvcnRzKExpYnJhcnlCdWlsZGVyIGltcG9ydGVyKSB7CiAgICBpZiAobmF0aXZlSW1wb3J0UGF0aCAhPSBudWxsKSByZXR1cm47CiAgICB2b2lkIEZ1bmN0aW9uKFN0cmluZywgQnVpbGRlcikgYWRkOwogICAgaWYgKHByZWZpeEJ1aWxkZXIgPT0gbnVsbCkgewogICAgICBhZGQgPSAoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgbWVtYmVyKSB7CiAgICAgICAgaW1wb3J0ZXIuYWRkVG9TY29wZShuYW1lLCBtZW1iZXIsIGNoYXJPZmZzZXQsIHRydWUpOwogICAgICB9OwogICAgfSBlbHNlIHsKICAgICAgYWRkID0gKFN0cmluZyBuYW1lLCBCdWlsZGVyIG1lbWJlcikgewogICAgICAgIHByZWZpeEJ1aWxkZXIuYWRkVG9FeHBvcnRTY29wZShuYW1lLCBtZW1iZXIsIGNoYXJPZmZzZXQpOwogICAgICB9OwogICAgfQogICAgaW1wb3J0ZWQuZXhwb3J0U2NvcGUuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgbWVtYmVyKSB7CiAgICAgIGlmIChjb21iaW5hdG9ycyAhPSBudWxsKSB7CiAgICAgICAgZm9yIChDb21iaW5hdG9yIGNvbWJpbmF0b3IgaW4gY29tYmluYXRvcnMpIHsKICAgICAgICAgIGlmIChjb21iaW5hdG9yLmlzU2hvdyAmJiAhY29tYmluYXRvci5uYW1lcy5jb250YWlucyhuYW1lKSkgcmV0dXJuOwogICAgICAgICAgaWYgKGNvbWJpbmF0b3IuaXNIaWRlICYmIGNvbWJpbmF0b3IubmFtZXMuY29udGFpbnMobmFtZSkpIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgYWRkKG5hbWUsIG1lbWJlcik7CiAgICB9KTsKICAgIGlmIChwcmVmaXhCdWlsZGVyICE9IG51bGwpIHsKICAgICAgQnVpbGRlciBleGlzdGluZyA9CiAgICAgICAgICBpbXBvcnRlci5hZGRCdWlsZGVyKHByZWZpeCwgcHJlZml4QnVpbGRlciwgcHJlZml4Q2hhck9mZnNldCk7CiAgICAgIGlmIChleGlzdGluZyA9PSBwcmVmaXhCdWlsZGVyKSB7CiAgICAgICAgaW1wb3J0ZXIuYWRkVG9TY29wZShwcmVmaXgsIHByZWZpeEJ1aWxkZXIsIHByZWZpeENoYXJPZmZzZXQsIHRydWUpOwogICAgICB9CiAgICB9CiAgfQp9CgpQcmVmaXhCdWlsZGVyIGNyZWF0ZVByZWZpeEJ1aWxkZXIoCiAgICBTdHJpbmcgcHJlZml4LAogICAgTGlicmFyeUJ1aWxkZXIgaW1wb3J0ZXIsCiAgICBMaWJyYXJ5QnVpbGRlciBpbXBvcnRlZCwKICAgIExpc3Q8Q29tYmluYXRvcj4gY29tYmluYXRvcnMsCiAgICBib29sIGRlZmVycmVkLAogICAgaW50IGNoYXJPZmZzZXQsCiAgICBpbnQgcHJlZml4Q2hhck9mZnNldCwKICAgIGludCBpbXBvcnRJbmRleCkgewogIGlmIChwcmVmaXggPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgTGlicmFyeURlcGVuZGVuY3kgZGVwZW5kZW5jeSA9IG51bGw7CiAgaWYgKGRlZmVycmVkKSB7CiAgICBkZXBlbmRlbmN5ID0gbmV3IExpYnJhcnlEZXBlbmRlbmN5LmRlZmVycmVkSW1wb3J0KGltcG9ydGVkLmxpYnJhcnksIHByZWZpeCwKICAgICAgICBjb21iaW5hdG9yczogdG9LZXJuZWxDb21iaW5hdG9ycyhjb21iaW5hdG9ycykpCiAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgfQogIHJldHVybiBuZXcgUHJlZml4QnVpbGRlcigKICAgICAgcHJlZml4LCBkZWZlcnJlZCwgaW1wb3J0ZXIsIGRlcGVuZGVuY3ksIHByZWZpeENoYXJPZmZzZXQsIGltcG9ydEluZGV4KTsKfQpvAE5OPAEWATkBPAE5AT4BKgEwAQ8wIQEiIQElARcBFwEmASwBGAEeAU8YIQEKFRUVExgbFx0XH0hPAScBMiooISw9CQ0sQgkGQSE1TUwKCBkIIRlIJ0wIBgQCASMTHR0iExQaFyMnElA3IQQcTgIBJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9pbXBvcnQuZGFydElzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvc291cmNlL3NvdXJjZV9leHRlbnNpb25fYnVpbGRlci5kYXJ0lg4vLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OmNvcmUnIGhpZGUgTWFwRW50cnk7CmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnOwppbXBvcnQgJy4uL2J1aWxkZXIvZGVjbGFyYXRpb24uZGFydCc7CmltcG9ydCAnLi4vYnVpbGRlci9leHRlbnNpb25fYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi9idWlsZGVyL2xpYnJhcnlfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi9idWlsZGVyL21ldGFkYXRhX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnLi4vYnVpbGRlci9wcm9jZWR1cmVfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi9idWlsZGVyL3R5cGVfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi9idWlsZGVyL3R5cGVfdmFyaWFibGVfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi9zY29wZS5kYXJ0JzsKaW1wb3J0ICdzb3VyY2VfbGlicmFyeV9idWlsZGVyLmRhcnQnOwppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0JzsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCc7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93CiAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgdGVtcGxhdGVDb25mbGljdHNXaXRoTWVtYmVyLAogICAgICAgIHRlbXBsYXRlQ29uZmxpY3RzV2l0aE1lbWJlcldhcm5pbmcsCiAgICAgICAgdGVtcGxhdGVDb25mbGljdHNXaXRoU2V0dGVyLAogICAgICAgIHRlbXBsYXRlQ29uZmxpY3RzV2l0aFNldHRlcldhcm5pbmc7CgpjbGFzcyBTb3VyY2VFeHRlbnNpb25CdWlsZGVyIGV4dGVuZHMgRXh0ZW5zaW9uQnVpbGRlciB7CiAgZmluYWwgRXh0ZW5zaW9uIF9leHRlbnNpb247CgogIFNvdXJjZUV4dGVuc2lvbkJ1aWxkZXIoCiAgICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSwKICAgICAgaW50IG1vZGlmaWVycywKICAgICAgU3RyaW5nIG5hbWUsCiAgICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVBhcmFtZXRlcnMsCiAgICAgIFR5cGVCdWlsZGVyIG9uVHlwZSwKICAgICAgU2NvcGUgc2NvcGUsCiAgICAgIExpYnJhcnlCdWlsZGVyIHBhcmVudCwKICAgICAgaW50IHN0YXJ0T2Zmc2V0LAogICAgICBpbnQgbmFtZU9mZnNldCwKICAgICAgaW50IGVuZE9mZnNldCkKICAgICAgOiBfZXh0ZW5zaW9uID0gbmV3IEV4dGVuc2lvbigKICAgICAgICAgICAgbmFtZTogbmFtZSwKICAgICAgICAgICAgZmlsZVVyaTogcGFyZW50LmZpbGVVcmksCiAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzOgogICAgICAgICAgICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlci50eXBlUGFyYW1ldGVyc0Zyb21CdWlsZGVycyh0eXBlUGFyYW1ldGVycykpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBuYW1lT2Zmc2V0LAogICAgICAgIHN1cGVyKG1ldGFkYXRhLCBtb2RpZmllcnMsIG5hbWUsIHBhcmVudCwgbmFtZU9mZnNldCwgc2NvcGUsCiAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzLCBvblR5cGUpOwoKICBFeHRlbnNpb24gZ2V0IGV4dGVuc2lvbiA9PiBfZXh0ZW5zaW9uOwoKICBFeHRlbnNpb24gYnVpbGQoCiAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnlCdWlsZGVyLCBMaWJyYXJ5QnVpbGRlciBjb3JlTGlicmFyeSkgewogICAgdm9pZCBidWlsZEJ1aWxkZXJzKFN0cmluZyBuYW1lLCBCdWlsZGVyIGRlY2xhcmF0aW9uKSB7CiAgICAgIGRvIHsKICAgICAgICBpZiAoZGVjbGFyYXRpb24ucGFyZW50ICE9IHRoaXMpIHsKICAgICAgICAgIGlmIChmaWxlVXJpICE9IGRlY2xhcmF0aW9uLnBhcmVudC5maWxlVXJpKSB7CiAgICAgICAgICAgIHVuZXhwZWN0ZWQoIiRmaWxlVXJpIiwgIiR7ZGVjbGFyYXRpb24ucGFyZW50LmZpbGVVcml9IiwgY2hhck9mZnNldCwKICAgICAgICAgICAgICAgIGZpbGVVcmkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdW5leHBlY3RlZChmdWxsTmFtZUZvckVycm9ycywgZGVjbGFyYXRpb24ucGFyZW50Py5mdWxsTmFtZUZvckVycm9ycywKICAgICAgICAgICAgICAgIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24gaXMgRmllbGRCdWlsZGVyKSB7CiAgICAgICAgICBGaWVsZCBmaWVsZCA9IGRlY2xhcmF0aW9uLmJ1aWxkKGxpYnJhcnlCdWlsZGVyKTsKICAgICAgICAgIGxpYnJhcnlCdWlsZGVyLmxpYnJhcnkuYWRkTWVtYmVyKGZpZWxkKTsKICAgICAgICAgIF9leHRlbnNpb24ubWVtYmVycy5hZGQobmV3IEV4dGVuc2lvbk1lbWJlckRlc2NyaXB0b3IoCiAgICAgICAgICAgICAgbmFtZTogbmV3IE5hbWUoZGVjbGFyYXRpb24ubmFtZSwgbGlicmFyeUJ1aWxkZXIubGlicmFyeSksCiAgICAgICAgICAgICAgbWVtYmVyOiBmaWVsZC5yZWZlcmVuY2UsCiAgICAgICAgICAgICAgaXNTdGF0aWM6IGRlY2xhcmF0aW9uLmlzU3RhdGljLAogICAgICAgICAgICAgIGtpbmQ6IEV4dGVuc2lvbk1lbWJlcktpbmQuRmllbGQpKTsKICAgICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIFByb2NlZHVyZUJ1aWxkZXIpIHsKICAgICAgICAgIE1lbWJlciBmdW5jdGlvbiA9IGRlY2xhcmF0aW9uLmJ1aWxkKGxpYnJhcnlCdWlsZGVyKTsKICAgICAgICAgIGxpYnJhcnlCdWlsZGVyLmxpYnJhcnkuYWRkTWVtYmVyKGZ1bmN0aW9uKTsKICAgICAgICAgIEV4dGVuc2lvbk1lbWJlcktpbmQga2luZDsKICAgICAgICAgIHN3aXRjaCAoZGVjbGFyYXRpb24ua2luZCkgewogICAgICAgICAgICBjYXNlIFByb2NlZHVyZUtpbmQuTWV0aG9kOgogICAgICAgICAgICAgIGtpbmQgPSBFeHRlbnNpb25NZW1iZXJLaW5kLk1ldGhvZDsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBQcm9jZWR1cmVLaW5kLkdldHRlcjoKICAgICAgICAgICAgICBraW5kID0gRXh0ZW5zaW9uTWVtYmVyS2luZC5HZXR0ZXI7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgUHJvY2VkdXJlS2luZC5TZXR0ZXI6CiAgICAgICAgICAgICAga2luZCA9IEV4dGVuc2lvbk1lbWJlcktpbmQuU2V0dGVyOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIFByb2NlZHVyZUtpbmQuT3BlcmF0b3I6CiAgICAgICAgICAgICAga2luZCA9IEV4dGVuc2lvbk1lbWJlcktpbmQuT3BlcmF0b3I7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgUHJvY2VkdXJlS2luZC5GYWN0b3J5OgogICAgICAgICAgICAgIHVuc3VwcG9ydGVkKCJFeHRlbnNpb24gbWV0aG9kIGtpbmQ6ICR7ZGVjbGFyYXRpb24ua2luZH0iLAogICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbi5jaGFyT2Zmc2V0LCBkZWNsYXJhdGlvbi5maWxlVXJpKTsKICAgICAgICAgIH0KICAgICAgICAgIF9leHRlbnNpb24ubWVtYmVycy5hZGQobmV3IEV4dGVuc2lvbk1lbWJlckRlc2NyaXB0b3IoCiAgICAgICAgICAgICAgbmFtZTogbmV3IE5hbWUoZGVjbGFyYXRpb24ubmFtZSwgbGlicmFyeUJ1aWxkZXIubGlicmFyeSksCiAgICAgICAgICAgICAgbWVtYmVyOiBmdW5jdGlvbi5yZWZlcmVuY2UsCiAgICAgICAgICAgICAgaXNTdGF0aWM6IGRlY2xhcmF0aW9uLmlzU3RhdGljLAogICAgICAgICAgICAgIGlzRXh0ZXJuYWw6IGRlY2xhcmF0aW9uLmlzRXh0ZXJuYWwsCiAgICAgICAgICAgICAga2luZDoga2luZCkpOwogICAgICAgICAgUHJvY2VkdXJlIHRlYXJPZmYgPSBkZWNsYXJhdGlvbi5leHRlbnNpb25UZWFyT2ZmOwogICAgICAgICAgaWYgKHRlYXJPZmYgIT0gbnVsbCkgewogICAgICAgICAgICBsaWJyYXJ5QnVpbGRlci5saWJyYXJ5LmFkZE1lbWJlcih0ZWFyT2ZmKTsKICAgICAgICAgICAgX2V4dGVuc2lvbi5tZW1iZXJzLmFkZChuZXcgRXh0ZW5zaW9uTWVtYmVyRGVzY3JpcHRvcigKICAgICAgICAgICAgICAgIG5hbWU6IG5ldyBOYW1lKGRlY2xhcmF0aW9uLm5hbWUsIGxpYnJhcnlCdWlsZGVyLmxpYnJhcnkpLAogICAgICAgICAgICAgICAgbWVtYmVyOiB0ZWFyT2ZmLnJlZmVyZW5jZSwKICAgICAgICAgICAgICAgIGlzU3RhdGljOiBmYWxzZSwKICAgICAgICAgICAgICAgIGlzRXh0ZXJuYWw6IGZhbHNlLAogICAgICAgICAgICAgICAga2luZDogRXh0ZW5zaW9uTWVtYmVyS2luZC5UZWFyT2ZmKSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHVuaGFuZGxlZCgiJHtkZWNsYXJhdGlvbi5ydW50aW1lVHlwZX0iLCAiYnVpbGRCdWlsZGVycyIsCiAgICAgICAgICAgICAgZGVjbGFyYXRpb24uY2hhck9mZnNldCwgZGVjbGFyYXRpb24uZmlsZVVyaSk7CiAgICAgICAgfQogICAgICAgIGRlY2xhcmF0aW9uID0gZGVjbGFyYXRpb24ubmV4dDsKICAgICAgfSB3aGlsZSAoZGVjbGFyYXRpb24gIT0gbnVsbCk7CiAgICB9CgogICAgc2NvcGUuZm9yRWFjaChidWlsZEJ1aWxkZXJzKTsKCiAgICBzY29wZS5zZXR0ZXJzLmZvckVhY2goKFN0cmluZyBuYW1lLCBCdWlsZGVyIHNldHRlcikgewogICAgICBCdWlsZGVyIG1lbWJlciA9IHNjb3BlQnVpbGRlcltuYW1lXTsKICAgICAgaWYgKG1lbWJlciA9PSBudWxsIHx8CiAgICAgICAgICAhKG1lbWJlci5pc0ZpZWxkICYmICFtZW1iZXIuaXNGaW5hbCAmJiAhbWVtYmVyLmlzQ29uc3QgfHwKICAgICAgICAgICAgICBtZW1iZXIuaXNSZWd1bGFyTWV0aG9kICYmIG1lbWJlci5pc1N0YXRpYyAmJiBzZXR0ZXIuaXNTdGF0aWMpKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChtZW1iZXIuaXNEZWNsYXJhdGlvbkluc3RhbmNlTWVtYmVyID09CiAgICAgICAgICBzZXR0ZXIuaXNEZWNsYXJhdGlvbkluc3RhbmNlTWVtYmVyKSB7CiAgICAgICAgYWRkUHJvYmxlbSh0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhNZW1iZXIud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgICAgc2V0dGVyLmNoYXJPZmZzZXQsIG5vTGVuZ3RoKTsKICAgICAgICAvLyBUT0RPKGFoZSk6IENvbnRleHQgYXJndW1lbnQgdG8gcHJldmlvdXMgbWVzc2FnZT8KICAgICAgICBhZGRQcm9ibGVtKHRlbXBsYXRlQ29uZmxpY3RzV2l0aFNldHRlci53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgICBtZW1iZXIuY2hhck9mZnNldCwgbm9MZW5ndGgpOwogICAgICB9IGVsc2UgewogICAgICAgIGFkZFByb2JsZW0odGVtcGxhdGVDb25mbGljdHNXaXRoTWVtYmVyV2FybmluZy53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgICBzZXR0ZXIuY2hhck9mZnNldCwgbm9MZW5ndGgpOwogICAgICAgIC8vIFRPRE8oYWhlKTogQ29udGV4dCBhcmd1bWVudCB0byBwcmV2aW91cyBtZXNzYWdlPwogICAgICAgIGFkZFByb2JsZW0odGVtcGxhdGVDb25mbGljdHNXaXRoU2V0dGVyV2FybmluZy53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgICBtZW1iZXIuY2hhck9mZnNldCwgbm9MZW5ndGgpOwogICAgICB9CiAgICB9KTsKCiAgICBfZXh0ZW5zaW9uLm9uVHlwZSA9IG9uVHlwZT8uYnVpbGQobGlicmFyeUJ1aWxkZXIpOwoKICAgIHJldHVybiBfZXh0ZW5zaW9uOwogIH0KfQqAlQBOTjwBIiImLCorLCcwGCYoARsBHQkSJSwlLAE4HgEaJhUTMBoTHRcWFSQYJRxQJUQlASkBE0k7Cyo3UBoTUSYMMjszQEgnLjE2PzYkJicxFScxFScxFSkzFShIQAxASCouMhw8ITdCSishIzUMEUM8CiglBgEiATorHERPEAgwMEQqPEQqD0sqPEsqCAgBNwEXBAIBQHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zb3VyY2Uvc291cmNlX2V4dGVuc2lvbl9idWlsZGVyLmRhcnQ4c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Jhc2UvaW5zdHJ1bWVudGF0aW9uLmRhcnSK+i8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IERhcnRUeXBlLCBNZW1iZXI7CgovLy8gQ29udmVydCAn4oaSJyB0byAnLT4nIGJlY2F1c2UgJ+KGkicgZG9lc24ndCBzaG93IHVwIGluIHNvbWUgdGVybWluYWxzLgovLy8gUmVtb3ZlIHByZWZpeGVzIHRoYXQgYXJlIHVzZWQgdmVyeSBvZnRlbiBpbiB0ZXN0cy4KU3RyaW5nIF9zaG9ydGVuSW5zdHJ1bWVudGF0aW9uU3RyaW5nKFN0cmluZyBzKSA9PiBzCiAgICAucmVwbGFjZUFsbCgn4oaSJywgJy0+JykKICAgIC5yZXBsYWNlQWxsKCdkYXJ0LmNvcmU6OicsICcnKQogICAgLnJlcGxhY2VBbGwoJ2RhcnQuYXN5bmM6OicsICcnKQogICAgLnJlcGxhY2VBbGwoJ3Rlc3Q6OicsICcnKQogICAgLnJlcGxhY2VBbGwobmV3IFJlZ0V4cChyJ1xzKi9cKi4qP1wqL1xzKicpLCAnJyk7CgovLy8gSW50ZXJmYWNlIHByb3ZpZGluZyB0aGUgYWJpbGl0eSB0byByZWNvcmQgcHJvcGVydHkvdmFsdWUgcGFpcnMgYXNzb2NpYXRlZAovLy8gd2l0aCBzb3VyY2UgZmlsZSBsb2NhdGlvbnMuICBJbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRlc3RpbmcuCmFic3RyYWN0IGNsYXNzIEluc3RydW1lbnRhdGlvbiB7CiAgLy8vIFJlY29yZHMgYSBwcm9wZXJ0eS92YWx1ZSBwYWlyIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gVVJJIGFuZCBvZmZzZXQuCiAgdm9pZCByZWNvcmQoVXJpIHVyaSwgaW50IG9mZnNldCwgU3RyaW5nIHByb3BlcnR5LCBJbnN0cnVtZW50YXRpb25WYWx1ZSB2YWx1ZSk7Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIHZhbHVlcyByZWNvcmRlZCBieSBbSW5zdHJ1bWVudGF0aW9uXS4KYWJzdHJhY3QgY2xhc3MgSW5zdHJ1bWVudGF0aW9uVmFsdWUgewogIGNvbnN0IEluc3RydW1lbnRhdGlvblZhbHVlKCk7CgogIC8vLyBDaGVja3MgaWYgdGhlIGdpdmVuIFN0cmluZyBpcyBhbiBhY2N1cmF0ZSBkZXNjcmlwdGlvbiBvZiB0aGlzIHZhbHVlLgogIC8vLwogIC8vLyBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBqdXN0IGNoZWNrcyBmb3IgZXF1YWxpdHkgd2l0aCB0aGUgcmV0dXJuIHZhbHVlCiAgLy8vIG9mIFt0b1N0cmluZ10sIGhvd2V2ZXIgZGVyaXZlZCBjbGFzc2VzIG1heSB3YW50IGEgbW9yZSBzb3BoaXN0aWNhdGVkCiAgLy8vIGltcGxlbWVudGF0aW9uIChlLmcuIHRvIGFsbG93IGFiYnJldmlhdGlvbnMgaW4gdGhlIGRlc2NyaXB0aW9uKS4KICAvLy8KICAvLy8gRGVyaXZlZCBjbGFzc2VzIHNob3VsZCBlbnN1cmUgdGhhdCB0aGUgaW52YXJpYW50IGhvbGRzOgogIC8vLyBgdGhpcy5tYXRjaGVzKHRoaXMudG9TdHJpbmcoKSlgIHNob3VsZCBhbHdheXMgcmV0dXJuIGB0cnVlYC4KICBib29sIG1hdGNoZXMoU3RyaW5nIGRlc2NyaXB0aW9uKSA9PiBkZXNjcmlwdGlvbiA9PSB0b1N0cmluZygpOwp9CgovLy8gSW5zdGFuY2Ugb2YgW0luc3RydW1lbnRhdGlvblZhbHVlXSBkZXNjcmliaW5nIGEgW01lbWJlcl0uCmNsYXNzIEluc3RydW1lbnRhdGlvblZhbHVlRm9yTWVtYmVyIGV4dGVuZHMgSW5zdHJ1bWVudGF0aW9uVmFsdWUgewogIGZpbmFsIE1lbWJlciBtZW1iZXI7CgogIEluc3RydW1lbnRhdGlvblZhbHVlRm9yTWVtYmVyKHRoaXMubWVtYmVyKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gX3Nob3J0ZW5JbnN0cnVtZW50YXRpb25TdHJpbmcobWVtYmVyLnRvU3RyaW5nKCkpOwp9CgovLy8gSW5zdGFuY2Ugb2YgW0luc3RydW1lbnRhdGlvblZhbHVlXSBkZXNjcmliaW5nIGEgW0RhcnRUeXBlXS4KY2xhc3MgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JUeXBlIGV4dGVuZHMgSW5zdHJ1bWVudGF0aW9uVmFsdWUgewogIGZpbmFsIERhcnRUeXBlIHR5cGU7CgogIEluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZSh0aGlzLnR5cGUpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBfc2hvcnRlbkluc3RydW1lbnRhdGlvblN0cmluZyh0eXBlLnRvU3RyaW5nKCkpOwp9CgovLy8gSW5zdGFuY2Ugb2YgW0luc3RydW1lbnRhdGlvblZhbHVlXSBkZXNjcmliaW5nIGEgbGlzdCBvZiBbRGFydFR5cGVdcy4KY2xhc3MgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JUeXBlQXJncyBleHRlbmRzIEluc3RydW1lbnRhdGlvblZhbHVlIHsKICBmaW5hbCBMaXN0PERhcnRUeXBlPiB0eXBlczsKCiAgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JUeXBlQXJncyh0aGlzLnR5cGVzKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gdHlwZXMKICAgICAgLm1hcCgodHlwZSkgPT4gbmV3IEluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZSh0eXBlKS50b1N0cmluZygpKQogICAgICAuam9pbignLCAnKTsKfQoKLy8vIEluc3RhbmNlIG9mIFtJbnN0cnVtZW50YXRpb25WYWx1ZV0gd2hpY2ggb25seSBtYXRjaGVzIHRoZSBnaXZlbiBsaXRlcmFsCi8vLyBzdHJpbmcuCmNsYXNzIEluc3RydW1lbnRhdGlvblZhbHVlTGl0ZXJhbCBleHRlbmRzIEluc3RydW1lbnRhdGlvblZhbHVlIHsKICBmaW5hbCBTdHJpbmcgdmFsdWU7CgogIGNvbnN0IEluc3RydW1lbnRhdGlvblZhbHVlTGl0ZXJhbCh0aGlzLnZhbHVlKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gdmFsdWU7Cn0KUQBOTjwBOAFHNzQbIyQeNQFOQSFOUQIBOCYgAUsGUEtHBj5DQQIBPkMXAS4BDEkCAUBBFwEqAQxHAgFJRR4BLwEMHUcTAgFMDEEWATEBDB4CAS9wYWNrYWdlOmZyb250X2VuZC9zcmMvYmFzZS9pbnN0cnVtZW50YXRpb24uZGFydEZzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL3RyYW5zZm9ybV9jb2xsZWN0aW9ucy5kYXJ0wABcwC8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnRyYW5zZm9ybV9jb2xsZWN0aW9uczsKCmltcG9ydCAnZGFydDpjb3JlJyBoaWRlIE1hcEVudHJ5OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBBcmd1bWVudHMsCiAgICAgICAgQXNFeHByZXNzaW9uLAogICAgICAgIEJsb2NrLAogICAgICAgIEJsb2NrRXhwcmVzc2lvbiwKICAgICAgICBDbGFzcywKICAgICAgICBDb25kaXRpb25hbEV4cHJlc3Npb24sCiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRHluYW1pY1R5cGUsCiAgICAgICAgRXhwcmVzc2lvbiwKICAgICAgICBFeHByZXNzaW9uU3RhdGVtZW50LAogICAgICAgIEZpZWxkLAogICAgICAgIEZvckluU3RhdGVtZW50LAogICAgICAgIEZvclN0YXRlbWVudCwKICAgICAgICBJZlN0YXRlbWVudCwKICAgICAgICBJbnRlcmZhY2VUeXBlLAogICAgICAgIExldCwKICAgICAgICBMaXN0Q29uY2F0ZW5hdGlvbiwKICAgICAgICBMaXN0TGl0ZXJhbCwKICAgICAgICBNYXBDb25jYXRlbmF0aW9uLAogICAgICAgIE1hcEVudHJ5LAogICAgICAgIE1hcExpdGVyYWwsCiAgICAgICAgTWV0aG9kSW52b2NhdGlvbiwKICAgICAgICBOYW1lLAogICAgICAgIE5vdCwKICAgICAgICBOdWxsTGl0ZXJhbCwKICAgICAgICBQcm9jZWR1cmUsCiAgICAgICAgUHJvcGVydHlHZXQsCiAgICAgICAgU2V0Q29uY2F0ZW5hdGlvbiwKICAgICAgICBTZXRMaXRlcmFsLAogICAgICAgIFN0YXRlbWVudCwKICAgICAgICBTdGF0aWNJbnZvY2F0aW9uLAogICAgICAgIHRyYW5zZm9ybUxpc3QsCiAgICAgICAgVHJlZU5vZGUsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiwKICAgICAgICBWYXJpYWJsZUdldDsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0JyBzaG93IENvcmVUeXBlczsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9lbnZpcm9ubWVudC5kYXJ0JyBzaG93IFR5cGVFbnZpcm9ubWVudDsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdmlzaXRvci5kYXJ0JyBzaG93IFRyYW5zZm9ybWVyOwoKaW1wb3J0ICdjb2xsZWN0aW9ucy5kYXJ0JwogICAgc2hvdwogICAgICAgIENvbnRyb2xGbG93RWxlbWVudCwKICAgICAgICBDb250cm9sRmxvd01hcEVudHJ5LAogICAgICAgIEZvckVsZW1lbnQsCiAgICAgICAgRm9ySW5FbGVtZW50LAogICAgICAgIEZvckluTWFwRW50cnksCiAgICAgICAgRm9yTWFwRW50cnksCiAgICAgICAgSWZFbGVtZW50LAogICAgICAgIElmTWFwRW50cnksCiAgICAgICAgU3ByZWFkRWxlbWVudCwKICAgICAgICBTcHJlYWRNYXBFbnRyeTsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyBnZXRGaWxlVXJpLCB1bmhhbmRsZWQ7CgppbXBvcnQgJy4uL3NvdXJjZS9zb3VyY2VfbG9hZGVyLmRhcnQnIHNob3cgU291cmNlTG9hZGVyOwoKaW1wb3J0ICdyZWRpcmVjdGluZ19mYWN0b3J5X2JvZHkuZGFydCcgc2hvdyBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5OwoKY2xhc3MgQ29sbGVjdGlvblRyYW5zZm9ybWVyIGV4dGVuZHMgVHJhbnNmb3JtZXIgewogIGZpbmFsIENvcmVUeXBlcyBjb3JlVHlwZXM7CiAgZmluYWwgVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudDsKICBmaW5hbCBQcm9jZWR1cmUgbGlzdEFkZDsKICBmaW5hbCBQcm9jZWR1cmUgc2V0RmFjdG9yeTsKICBmaW5hbCBQcm9jZWR1cmUgc2V0QWRkOwogIGZpbmFsIFByb2NlZHVyZSBvYmplY3RFcXVhbHM7CiAgZmluYWwgUHJvY2VkdXJlIG1hcEVudHJpZXM7CiAgZmluYWwgUHJvY2VkdXJlIG1hcFB1dDsKICBmaW5hbCBDbGFzcyBtYXBFbnRyeUNsYXNzOwogIGZpbmFsIEZpZWxkIG1hcEVudHJ5S2V5OwogIGZpbmFsIEZpZWxkIG1hcEVudHJ5VmFsdWU7CgogIHN0YXRpYyBQcm9jZWR1cmUgX2ZpbmRTZXRGYWN0b3J5KENvcmVUeXBlcyBjb3JlVHlwZXMpIHsKICAgIFByb2NlZHVyZSBmYWN0b3J5ID0gY29yZVR5cGVzLmluZGV4LmdldE1lbWJlcignZGFydDpjb3JlJywgJ1NldCcsICcnKTsKICAgIFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkgYm9keSA9IGZhY3Rvcnk/LmZ1bmN0aW9uPy5ib2R5OwogICAgcmV0dXJuIGJvZHk/LnRhcmdldDsKICB9CgogIENvbGxlY3Rpb25UcmFuc2Zvcm1lcihTb3VyY2VMb2FkZXIgbG9hZGVyKQogICAgICA6IGNvcmVUeXBlcyA9IGxvYWRlci5jb3JlVHlwZXMsCiAgICAgICAgdHlwZUVudmlyb25tZW50ID0gbG9hZGVyLnR5cGVJbmZlcmVuY2VFbmdpbmUudHlwZVNjaGVtYUVudmlyb25tZW50LAogICAgICAgIGxpc3RBZGQgPSBsb2FkZXIuY29yZVR5cGVzLmluZGV4LmdldE1lbWJlcignZGFydDpjb3JlJywgJ0xpc3QnLCAnYWRkJyksCiAgICAgICAgc2V0RmFjdG9yeSA9IF9maW5kU2V0RmFjdG9yeShsb2FkZXIuY29yZVR5cGVzKSwKICAgICAgICBzZXRBZGQgPSBsb2FkZXIuY29yZVR5cGVzLmluZGV4LmdldE1lbWJlcignZGFydDpjb3JlJywgJ1NldCcsICdhZGQnKSwKICAgICAgICBvYmplY3RFcXVhbHMgPQogICAgICAgICAgICBsb2FkZXIuY29yZVR5cGVzLmluZGV4LmdldE1lbWJlcignZGFydDpjb3JlJywgJ09iamVjdCcsICc9PScpLAogICAgICAgIG1hcEVudHJpZXMgPQogICAgICAgICAgICBsb2FkZXIuY29yZVR5cGVzLmluZGV4LmdldE1lbWJlcignZGFydDpjb3JlJywgJ01hcCcsICdnZXQ6ZW50cmllcycpLAogICAgICAgIG1hcFB1dCA9IGxvYWRlci5jb3JlVHlwZXMuaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmNvcmUnLCAnTWFwJywgJ1tdPScpLAogICAgICAgIG1hcEVudHJ5Q2xhc3MgPQogICAgICAgICAgICBsb2FkZXIuY29yZVR5cGVzLmluZGV4LmdldENsYXNzKCdkYXJ0OmNvcmUnLCAnTWFwRW50cnknKSwKICAgICAgICBtYXBFbnRyeUtleSA9CiAgICAgICAgICAgIGxvYWRlci5jb3JlVHlwZXMuaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmNvcmUnLCAnTWFwRW50cnknLCAna2V5JyksCiAgICAgICAgbWFwRW50cnlWYWx1ZSA9CiAgICAgICAgICAgIGxvYWRlci5jb3JlVHlwZXMuaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmNvcmUnLCAnTWFwRW50cnknLCAndmFsdWUnKTsKCiAgVHJlZU5vZGUgX3RyYW5zbGF0ZUxpc3RPclNldCgKICAgICAgRXhwcmVzc2lvbiBub2RlLCBEYXJ0VHlwZSBlbGVtZW50VHlwZSwgTGlzdDxFeHByZXNzaW9uPiBlbGVtZW50cywKICAgICAge2Jvb2wgaXNTZXQ6IGZhbHNlfSkgewogICAgLy8gVHJhbnNsYXRlIGVsZW1lbnRzIGluIHBsYWNlIHVwIHRvIHRoZSBmaXJzdCBub24tZXhwcmVzc2lvbiwgaWYgYW55LgogICAgaW50IGkgPSAwOwogICAgZm9yICg7IGkgPCBlbGVtZW50cy5sZW5ndGg7ICsraSkgewogICAgICBpZiAoZWxlbWVudHNbaV0gaXMgQ29udHJvbEZsb3dFbGVtZW50KSBicmVhazsKICAgICAgZWxlbWVudHNbaV0gPSBlbGVtZW50c1tpXS5hY2NlcHQodGhpcykuLnBhcmVudCA9IG5vZGU7CiAgICB9CgogICAgLy8gSWYgdGhlcmUgd2VyZSBvbmx5IGV4cHJlc3Npb25zLCB3ZSBhcmUgZG9uZS4KICAgIGlmIChpID09IGVsZW1lbnRzLmxlbmd0aCkgcmV0dXJuIG5vZGU7CgogICAgLy8gQnVpbGQgYSBibG9jayBleHByZXNzaW9uIGFuZCBjcmVhdGUgYW4gZW1wdHkgbGlzdCBvciBzZXQuCiAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHJlc3VsdDsKICAgIGlmIChpc1NldCkgewogICAgICAvLyBUT0RPKGttaWxsaWtpbik6IFdoZW4gYWxsIHRoZSBiYWNrIGVuZHMgaGFuZGxlIHNldCBsaXRlcmFscyB3ZSBjYW4gdXNlCiAgICAgIC8vIG9uZSBoZXJlLgogICAgICByZXN1bHQgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZSgKICAgICAgICAgIG5ldyBTdGF0aWNJbnZvY2F0aW9uKAogICAgICAgICAgICAgIHNldEZhY3RvcnksIG5ldyBBcmd1bWVudHMoW10sIHR5cGVzOiBbZWxlbWVudFR5cGVdKSksCiAgICAgICAgICB0eXBlOiBuZXcgSW50ZXJmYWNlVHlwZShjb3JlVHlwZXMuc2V0Q2xhc3MsIFtlbGVtZW50VHlwZV0pLAogICAgICAgICAgaXNGaW5hbDogdHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICByZXN1bHQgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZSgKICAgICAgICAgIG5ldyBMaXN0TGl0ZXJhbChbXSwgdHlwZUFyZ3VtZW50OiBlbGVtZW50VHlwZSksCiAgICAgICAgICB0eXBlOiBuZXcgSW50ZXJmYWNlVHlwZShjb3JlVHlwZXMubGlzdENsYXNzLCBbZWxlbWVudFR5cGVdKSwKICAgICAgICAgIGlzRmluYWw6IHRydWUpOwogICAgfQogICAgTGlzdDxTdGF0ZW1lbnQ+IGJvZHkgPSBbcmVzdWx0XTsKICAgIC8vIEFkZCB0aGUgZWxlbWVudHMgdXAgdG8gdGhlIGZpcnN0IG5vbi1leHByZXNzaW9uLgogICAgZm9yIChpbnQgaiA9IDA7IGogPCBpOyArK2opIHsKICAgICAgX2FkZEV4cHJlc3Npb25FbGVtZW50KGVsZW1lbnRzW2pdLCBpc1NldCwgcmVzdWx0LCBib2R5KTsKICAgIH0KICAgIC8vIFRyYW5zbGF0ZSB0aGUgZWxlbWVudHMgc3RhcnRpbmcgd2l0aCB0aGUgZmlyc3Qgbm9uLWV4cHJlc3Npb24uCiAgICBmb3IgKDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgKytpKSB7CiAgICAgIF90cmFuc2xhdGVFbGVtZW50KGVsZW1lbnRzW2ldLCBlbGVtZW50VHlwZSwgaXNTZXQsIHJlc3VsdCwgYm9keSk7CiAgICB9CgogICAgcmV0dXJuIG5ldyBCbG9ja0V4cHJlc3Npb24obmV3IEJsb2NrKGJvZHkpLCBuZXcgVmFyaWFibGVHZXQocmVzdWx0KSk7CiAgfQoKICB2b2lkIF90cmFuc2xhdGVFbGVtZW50KEV4cHJlc3Npb24gZWxlbWVudCwgRGFydFR5cGUgZWxlbWVudFR5cGUsIGJvb2wgaXNTZXQsCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gcmVzdWx0LCBMaXN0PFN0YXRlbWVudD4gYm9keSkgewogICAgaWYgKGVsZW1lbnQgaXMgU3ByZWFkRWxlbWVudCkgewogICAgICBfdHJhbnNsYXRlU3ByZWFkRWxlbWVudChlbGVtZW50LCBlbGVtZW50VHlwZSwgaXNTZXQsIHJlc3VsdCwgYm9keSk7CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQgaXMgSWZFbGVtZW50KSB7CiAgICAgIF90cmFuc2xhdGVJZkVsZW1lbnQoZWxlbWVudCwgZWxlbWVudFR5cGUsIGlzU2V0LCByZXN1bHQsIGJvZHkpOwogICAgfSBlbHNlIGlmIChlbGVtZW50IGlzIEZvckVsZW1lbnQpIHsKICAgICAgX3RyYW5zbGF0ZUZvckVsZW1lbnQoZWxlbWVudCwgZWxlbWVudFR5cGUsIGlzU2V0LCByZXN1bHQsIGJvZHkpOwogICAgfSBlbHNlIGlmIChlbGVtZW50IGlzIEZvckluRWxlbWVudCkgewogICAgICBfdHJhbnNsYXRlRm9ySW5FbGVtZW50KGVsZW1lbnQsIGVsZW1lbnRUeXBlLCBpc1NldCwgcmVzdWx0LCBib2R5KTsKICAgIH0gZWxzZSB7CiAgICAgIF9hZGRFeHByZXNzaW9uRWxlbWVudChlbGVtZW50LmFjY2VwdCh0aGlzKSwgaXNTZXQsIHJlc3VsdCwgYm9keSk7CiAgICB9CiAgfQoKICB2b2lkIF9hZGRFeHByZXNzaW9uRWxlbWVudChFeHByZXNzaW9uIGVsZW1lbnQsIGJvb2wgaXNTZXQsCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gcmVzdWx0LCBMaXN0PFN0YXRlbWVudD4gYm9keSkgewogICAgYm9keS5hZGQobmV3IEV4cHJlc3Npb25TdGF0ZW1lbnQobmV3IE1ldGhvZEludm9jYXRpb24oCiAgICAgICAgbmV3IFZhcmlhYmxlR2V0KHJlc3VsdCksCiAgICAgICAgbmV3IE5hbWUoJ2FkZCcpLAogICAgICAgIG5ldyBBcmd1bWVudHMoW2VsZW1lbnRdKSwKICAgICAgICBpc1NldCA/IHNldEFkZCA6IGxpc3RBZGQpKSk7CiAgfQoKICB2b2lkIF90cmFuc2xhdGVJZkVsZW1lbnQoSWZFbGVtZW50IGVsZW1lbnQsIERhcnRUeXBlIGVsZW1lbnRUeXBlLCBib29sIGlzU2V0LAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHJlc3VsdCwgTGlzdDxTdGF0ZW1lbnQ+IGJvZHkpIHsKICAgIExpc3Q8U3RhdGVtZW50PiB0aGVuU3RhdGVtZW50cyA9IFtdOwogICAgX3RyYW5zbGF0ZUVsZW1lbnQoZWxlbWVudC50aGVuLCBlbGVtZW50VHlwZSwgaXNTZXQsIHJlc3VsdCwgdGhlblN0YXRlbWVudHMpOwogICAgTGlzdDxTdGF0ZW1lbnQ+IGVsc2VTdGF0ZW1lbnRzOwogICAgaWYgKGVsZW1lbnQub3RoZXJ3aXNlICE9IG51bGwpIHsKICAgICAgX3RyYW5zbGF0ZUVsZW1lbnQoZWxlbWVudC5vdGhlcndpc2UsIGVsZW1lbnRUeXBlLCBpc1NldCwgcmVzdWx0LAogICAgICAgICAgZWxzZVN0YXRlbWVudHMgPSA8U3RhdGVtZW50PltdKTsKICAgIH0KICAgIFN0YXRlbWVudCB0aGVuQm9keSA9IHRoZW5TdGF0ZW1lbnRzLmxlbmd0aCA9PSAxCiAgICAgICAgPyB0aGVuU3RhdGVtZW50cy5maXJzdAogICAgICAgIDogbmV3IEJsb2NrKHRoZW5TdGF0ZW1lbnRzKTsKICAgIFN0YXRlbWVudCBlbHNlQm9keTsKICAgIGlmIChlbHNlU3RhdGVtZW50cyAhPSBudWxsICYmIGVsc2VTdGF0ZW1lbnRzLmlzTm90RW1wdHkpIHsKICAgICAgZWxzZUJvZHkgPSBlbHNlU3RhdGVtZW50cy5sZW5ndGggPT0gMQogICAgICAgICAgPyBlbHNlU3RhdGVtZW50cy5maXJzdAogICAgICAgICAgOiBuZXcgQmxvY2soZWxzZVN0YXRlbWVudHMpOwogICAgfQogICAgYm9keS5hZGQobmV3IElmU3RhdGVtZW50KGVsZW1lbnQuY29uZGl0aW9uLmFjY2VwdCh0aGlzKSwgdGhlbkJvZHksIGVsc2VCb2R5KQogICAgICAuLmZpbGVPZmZzZXQgPSBlbGVtZW50LmZpbGVPZmZzZXQpOwogIH0KCiAgdm9pZCBfdHJhbnNsYXRlRm9yRWxlbWVudChGb3JFbGVtZW50IGVsZW1lbnQsIERhcnRUeXBlIGVsZW1lbnRUeXBlLAogICAgICBib29sIGlzU2V0LCBWYXJpYWJsZURlY2xhcmF0aW9uIHJlc3VsdCwgTGlzdDxTdGF0ZW1lbnQ+IGJvZHkpIHsKICAgIExpc3Q8U3RhdGVtZW50PiBzdGF0ZW1lbnRzID0gPFN0YXRlbWVudD5bXTsKICAgIF90cmFuc2xhdGVFbGVtZW50KGVsZW1lbnQuYm9keSwgZWxlbWVudFR5cGUsIGlzU2V0LCByZXN1bHQsIHN0YXRlbWVudHMpOwogICAgU3RhdGVtZW50IGxvb3BCb2R5ID0KICAgICAgICBzdGF0ZW1lbnRzLmxlbmd0aCA9PSAxID8gc3RhdGVtZW50cy5maXJzdCA6IG5ldyBCbG9jayhzdGF0ZW1lbnRzKTsKICAgIEZvclN0YXRlbWVudCBsb29wID0gbmV3IEZvclN0YXRlbWVudChlbGVtZW50LnZhcmlhYmxlcywKICAgICAgICBlbGVtZW50LmNvbmRpdGlvbj8uYWNjZXB0KHRoaXMpLCBlbGVtZW50LnVwZGF0ZXMsIGxvb3BCb2R5KQogICAgICAuLmZpbGVPZmZzZXQgPSBlbGVtZW50LmZpbGVPZmZzZXQ7CiAgICB0cmFuc2Zvcm1MaXN0KGxvb3AudmFyaWFibGVzLCB0aGlzLCBsb29wKTsKICAgIHRyYW5zZm9ybUxpc3QobG9vcC51cGRhdGVzLCB0aGlzLCBsb29wKTsKICAgIGJvZHkuYWRkKGxvb3ApOwogIH0KCiAgdm9pZCBfdHJhbnNsYXRlRm9ySW5FbGVtZW50KEZvckluRWxlbWVudCBlbGVtZW50LCBEYXJ0VHlwZSBlbGVtZW50VHlwZSwKICAgICAgYm9vbCBpc1NldCwgVmFyaWFibGVEZWNsYXJhdGlvbiByZXN1bHQsIExpc3Q8U3RhdGVtZW50PiBib2R5KSB7CiAgICBMaXN0PFN0YXRlbWVudD4gc3RhdGVtZW50czsKICAgIFN0YXRlbWVudCBwcm9sb2d1ZSA9IGVsZW1lbnQucHJvbG9ndWU7CiAgICBpZiAocHJvbG9ndWUgPT0gbnVsbCkgewogICAgICBzdGF0ZW1lbnRzID0gPFN0YXRlbWVudD5bXTsKICAgIH0gZWxzZSB7CiAgICAgIHByb2xvZ3VlID0gcHJvbG9ndWUuYWNjZXB0KHRoaXMpOwogICAgICBzdGF0ZW1lbnRzID0KICAgICAgICAgIHByb2xvZ3VlIGlzIEJsb2NrID8gcHJvbG9ndWUuc3RhdGVtZW50cyA6IDxTdGF0ZW1lbnQ+W3Byb2xvZ3VlXTsKICAgIH0KICAgIF90cmFuc2xhdGVFbGVtZW50KGVsZW1lbnQuYm9keSwgZWxlbWVudFR5cGUsIGlzU2V0LCByZXN1bHQsIHN0YXRlbWVudHMpOwogICAgU3RhdGVtZW50IGxvb3BCb2R5ID0KICAgICAgICBzdGF0ZW1lbnRzLmxlbmd0aCA9PSAxID8gc3RhdGVtZW50cy5maXJzdCA6IG5ldyBCbG9jayhzdGF0ZW1lbnRzKTsKICAgIGlmIChlbGVtZW50LnByb2JsZW0gIT0gbnVsbCkgewogICAgICBib2R5LmFkZChuZXcgRXhwcmVzc2lvblN0YXRlbWVudChlbGVtZW50LnByb2JsZW0uYWNjZXB0KHRoaXMpKSk7CiAgICB9CiAgICBib2R5LmFkZChuZXcgRm9ySW5TdGF0ZW1lbnQoCiAgICAgICAgZWxlbWVudC52YXJpYWJsZSwgZWxlbWVudC5pdGVyYWJsZS5hY2NlcHQodGhpcyksIGxvb3BCb2R5LAogICAgICAgIGlzQXN5bmM6IGVsZW1lbnQuaXNBc3luYykKICAgICAgLi5maWxlT2Zmc2V0ID0gZWxlbWVudC5maWxlT2Zmc2V0KTsKICB9CgogIHZvaWQgX3RyYW5zbGF0ZVNwcmVhZEVsZW1lbnQoU3ByZWFkRWxlbWVudCBlbGVtZW50LCBEYXJ0VHlwZSBlbGVtZW50VHlwZSwKICAgICAgYm9vbCBpc1NldCwgVmFyaWFibGVEZWNsYXJhdGlvbiByZXN1bHQsIExpc3Q8U3RhdGVtZW50PiBib2R5KSB7CiAgICBFeHByZXNzaW9uIHZhbHVlID0gZWxlbWVudC5leHByZXNzaW9uLmFjY2VwdCh0aGlzKTsKICAgIC8vIE51bGwtYXdhcmUgc3ByZWFkcyByZXF1aXJlIHRlc3RpbmcgdGhlIHN1YmV4cHJlc3Npb24ncyB2YWx1ZS4KICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdGVtcDsKICAgIGlmIChlbGVtZW50LmlzTnVsbEF3YXJlKSB7CiAgICAgIHRlbXAgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZSh2YWx1ZSwKICAgICAgICAgIHR5cGU6IGNvbnN0IER5bmFtaWNUeXBlKCksIGlzRmluYWw6IHRydWUpOwogICAgICBib2R5LmFkZCh0ZW1wKTsKICAgICAgdmFsdWUgPSBuZXcgVmFyaWFibGVHZXQodGVtcCk7CiAgICB9CgogICAgVmFyaWFibGVEZWNsYXJhdGlvbiBlbHQ7CiAgICBTdGF0ZW1lbnQgbG9vcEJvZHk7CiAgICBpZiAoZWxlbWVudC5lbGVtZW50VHlwZSA9PSBudWxsIHx8CiAgICAgICAgIXR5cGVFbnZpcm9ubWVudC5pc1N1YnR5cGVPZihlbGVtZW50LmVsZW1lbnRUeXBlLCBlbGVtZW50VHlwZSkpIHsKICAgICAgZWx0ID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24obnVsbCwKICAgICAgICAgIHR5cGU6IGNvbnN0IER5bmFtaWNUeXBlKCksIGlzRmluYWw6IHRydWUpOwogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGNhc3RlZFZhciA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKAogICAgICAgICAgbmV3IEFzRXhwcmVzc2lvbihuZXcgVmFyaWFibGVHZXQoZWx0KSwgZWxlbWVudFR5cGUpCiAgICAgICAgICAgIC4uaXNUeXBlRXJyb3IgPSB0cnVlCiAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGVsZW1lbnQuZXhwcmVzc2lvbi5maWxlT2Zmc2V0LAogICAgICAgICAgdHlwZTogZWxlbWVudFR5cGUpOwogICAgICBsb29wQm9keSA9IG5ldyBCbG9jayg8U3RhdGVtZW50PlsKICAgICAgICBjYXN0ZWRWYXIsCiAgICAgICAgbmV3IEV4cHJlc3Npb25TdGF0ZW1lbnQobmV3IE1ldGhvZEludm9jYXRpb24oCiAgICAgICAgICAgIG5ldyBWYXJpYWJsZUdldChyZXN1bHQpLAogICAgICAgICAgICBuZXcgTmFtZSgnYWRkJyksCiAgICAgICAgICAgIG5ldyBBcmd1bWVudHMoW25ldyBWYXJpYWJsZUdldChjYXN0ZWRWYXIpXSksCiAgICAgICAgICAgIGlzU2V0ID8gc2V0QWRkIDogbGlzdEFkZCkpCiAgICAgIF0pOwogICAgfSBlbHNlIHsKICAgICAgZWx0ID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24obnVsbCwgdHlwZTogZWxlbWVudFR5cGUsIGlzRmluYWw6IHRydWUpOwogICAgICBsb29wQm9keSA9IG5ldyBFeHByZXNzaW9uU3RhdGVtZW50KG5ldyBNZXRob2RJbnZvY2F0aW9uKAogICAgICAgICAgbmV3IFZhcmlhYmxlR2V0KHJlc3VsdCksCiAgICAgICAgICBuZXcgTmFtZSgnYWRkJyksCiAgICAgICAgICBuZXcgQXJndW1lbnRzKFtuZXcgVmFyaWFibGVHZXQoZWx0KV0pLAogICAgICAgICAgaXNTZXQgPyBzZXRBZGQgOiBsaXN0QWRkKSk7CiAgICB9CiAgICBTdGF0ZW1lbnQgc3RhdGVtZW50ID0gbmV3IEZvckluU3RhdGVtZW50KGVsdCwgdmFsdWUsIGxvb3BCb2R5KTsKCiAgICBpZiAoZWxlbWVudC5pc051bGxBd2FyZSkgewogICAgICBzdGF0ZW1lbnQgPSBuZXcgSWZTdGF0ZW1lbnQoCiAgICAgICAgICBuZXcgTm90KG5ldyBNZXRob2RJbnZvY2F0aW9uKG5ldyBWYXJpYWJsZUdldCh0ZW1wKSwgbmV3IE5hbWUoJz09JyksCiAgICAgICAgICAgICAgbmV3IEFyZ3VtZW50cyhbbmV3IE51bGxMaXRlcmFsKCldKSwgb2JqZWN0RXF1YWxzKSksCiAgICAgICAgICBzdGF0ZW1lbnQsCiAgICAgICAgICBudWxsKTsKICAgIH0KICAgIGJvZHkuYWRkKHN0YXRlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUcmVlTm9kZSB2aXNpdExpc3RMaXRlcmFsKExpc3RMaXRlcmFsIG5vZGUpIHsKICAgIGlmIChub2RlLmlzQ29uc3QpIHsKICAgICAgcmV0dXJuIF90cmFuc2xhdGVDb25zdExpc3RPclNldChub2RlLCBub2RlLnR5cGVBcmd1bWVudCwgbm9kZS5leHByZXNzaW9ucywKICAgICAgICAgIGlzU2V0OiBmYWxzZSk7CiAgICB9CgogICAgcmV0dXJuIF90cmFuc2xhdGVMaXN0T3JTZXQobm9kZSwgbm9kZS50eXBlQXJndW1lbnQsIG5vZGUuZXhwcmVzc2lvbnMsCiAgICAgICAgaXNTZXQ6IGZhbHNlKTsKICB9CgogIEBvdmVycmlkZQogIFRyZWVOb2RlIHZpc2l0U2V0TGl0ZXJhbChTZXRMaXRlcmFsIG5vZGUpIHsKICAgIGlmIChub2RlLmlzQ29uc3QpIHsKICAgICAgcmV0dXJuIF90cmFuc2xhdGVDb25zdExpc3RPclNldChub2RlLCBub2RlLnR5cGVBcmd1bWVudCwgbm9kZS5leHByZXNzaW9ucywKICAgICAgICAgIGlzU2V0OiB0cnVlKTsKICAgIH0KCiAgICByZXR1cm4gX3RyYW5zbGF0ZUxpc3RPclNldChub2RlLCBub2RlLnR5cGVBcmd1bWVudCwgbm9kZS5leHByZXNzaW9ucywKICAgICAgICBpc1NldDogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUcmVlTm9kZSB2aXNpdE1hcExpdGVyYWwoTWFwTGl0ZXJhbCBub2RlKSB7CiAgICBpZiAobm9kZS5pc0NvbnN0KSB7CiAgICAgIHJldHVybiBfdHJhbnNsYXRlQ29uc3RNYXAobm9kZSk7CiAgICB9CgogICAgLy8gVHJhbnNsYXRlIGVudHJpZXMgaW4gcGxhY2UgdXAgdG8gdGhlIGZpcnN0IGNvbnRyb2wtZmxvdyBlbnRyeSwgaWYgYW55LgogICAgaW50IGkgPSAwOwogICAgZm9yICg7IGkgPCBub2RlLmVudHJpZXMubGVuZ3RoOyArK2kpIHsKICAgICAgaWYgKG5vZGUuZW50cmllc1tpXSBpcyBDb250cm9sRmxvd01hcEVudHJ5KSBicmVhazsKICAgICAgbm9kZS5lbnRyaWVzW2ldID0gbm9kZS5lbnRyaWVzW2ldLmFjY2VwdCh0aGlzKS4ucGFyZW50ID0gbm9kZTsKICAgIH0KCiAgICAvLyBJZiB0aGVyZSB3ZXJlIG5vIGNvbnRyb2wtZmxvdyBlbnRyaWVzIHdlIGFyZSBkb25lLgogICAgaWYgKGkgPT0gbm9kZS5lbnRyaWVzLmxlbmd0aCkgcmV0dXJuIG5vZGU7CgogICAgLy8gQnVpbGQgYSBibG9jayBleHByZXNzaW9uIGFuZCBjcmVhdGUgYW4gZW1wdHkgbWFwLgogICAgVmFyaWFibGVEZWNsYXJhdGlvbiByZXN1bHQgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZSgKICAgICAgICBuZXcgTWFwTGl0ZXJhbChbXSwga2V5VHlwZTogbm9kZS5rZXlUeXBlLCB2YWx1ZVR5cGU6IG5vZGUudmFsdWVUeXBlKSwKICAgICAgICB0eXBlOiBuZXcgSW50ZXJmYWNlVHlwZSgKICAgICAgICAgICAgY29yZVR5cGVzLm1hcENsYXNzLCBbbm9kZS5rZXlUeXBlLCBub2RlLnZhbHVlVHlwZV0pLAogICAgICAgIGlzRmluYWw6IHRydWUpOwogICAgTGlzdDxTdGF0ZW1lbnQ+IGJvZHkgPSBbcmVzdWx0XTsKICAgIC8vIEFkZCBhbGwgdGhlIGVudHJpZXMgdXAgdG8gdGhlIGZpcnN0IGNvbnRyb2wtZmxvdyBlbnRyeS4KICAgIGZvciAoaW50IGogPSAwOyBqIDwgaTsgKytqKSB7CiAgICAgIF9hZGROb3JtYWxFbnRyeShub2RlLmVudHJpZXNbal0sIHJlc3VsdCwgYm9keSk7CiAgICB9CiAgICBmb3IgKDsgaSA8IG5vZGUuZW50cmllcy5sZW5ndGg7ICsraSkgewogICAgICBfdHJhbnNsYXRlRW50cnkoCiAgICAgICAgICBub2RlLmVudHJpZXNbaV0sIG5vZGUua2V5VHlwZSwgbm9kZS52YWx1ZVR5cGUsIHJlc3VsdCwgYm9keSk7CiAgICB9CgogICAgcmV0dXJuIG5ldyBCbG9ja0V4cHJlc3Npb24obmV3IEJsb2NrKGJvZHkpLCBuZXcgVmFyaWFibGVHZXQocmVzdWx0KSk7CiAgfQoKICB2b2lkIF90cmFuc2xhdGVFbnRyeShNYXBFbnRyeSBlbnRyeSwgRGFydFR5cGUga2V5VHlwZSwgRGFydFR5cGUgdmFsdWVUeXBlLAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHJlc3VsdCwgTGlzdDxTdGF0ZW1lbnQ+IGJvZHkpIHsKICAgIGlmIChlbnRyeSBpcyBTcHJlYWRNYXBFbnRyeSkgewogICAgICBfdHJhbnNsYXRlU3ByZWFkRW50cnkoZW50cnksIGtleVR5cGUsIHZhbHVlVHlwZSwgcmVzdWx0LCBib2R5KTsKICAgIH0gZWxzZSBpZiAoZW50cnkgaXMgSWZNYXBFbnRyeSkgewogICAgICBfdHJhbnNsYXRlSWZFbnRyeShlbnRyeSwga2V5VHlwZSwgdmFsdWVUeXBlLCByZXN1bHQsIGJvZHkpOwogICAgfSBlbHNlIGlmIChlbnRyeSBpcyBGb3JNYXBFbnRyeSkgewogICAgICBfdHJhbnNsYXRlRm9yRW50cnkoZW50cnksIGtleVR5cGUsIHZhbHVlVHlwZSwgcmVzdWx0LCBib2R5KTsKICAgIH0gZWxzZSBpZiAoZW50cnkgaXMgRm9ySW5NYXBFbnRyeSkgewogICAgICBfdHJhbnNsYXRlRm9ySW5FbnRyeShlbnRyeSwga2V5VHlwZSwgdmFsdWVUeXBlLCByZXN1bHQsIGJvZHkpOwogICAgfSBlbHNlIHsKICAgICAgX2FkZE5vcm1hbEVudHJ5KGVudHJ5LmFjY2VwdCh0aGlzKSwgcmVzdWx0LCBib2R5KTsKICAgIH0KICB9CgogIHZvaWQgX2FkZE5vcm1hbEVudHJ5KAogICAgICBNYXBFbnRyeSBlbnRyeSwgVmFyaWFibGVEZWNsYXJhdGlvbiByZXN1bHQsIExpc3Q8U3RhdGVtZW50PiBib2R5KSB7CiAgICBib2R5LmFkZChuZXcgRXhwcmVzc2lvblN0YXRlbWVudChuZXcgTWV0aG9kSW52b2NhdGlvbigKICAgICAgICBuZXcgVmFyaWFibGVHZXQocmVzdWx0KSwKICAgICAgICBuZXcgTmFtZSgnW109JyksCiAgICAgICAgbmV3IEFyZ3VtZW50cyhbZW50cnkua2V5LCBlbnRyeS52YWx1ZV0pLAogICAgICAgIG1hcFB1dCkpKTsKICB9CgogIHZvaWQgX3RyYW5zbGF0ZUlmRW50cnkoSWZNYXBFbnRyeSBlbnRyeSwgRGFydFR5cGUga2V5VHlwZSwgRGFydFR5cGUgdmFsdWVUeXBlLAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHJlc3VsdCwgTGlzdDxTdGF0ZW1lbnQ+IGJvZHkpIHsKICAgIExpc3Q8U3RhdGVtZW50PiB0aGVuQm9keSA9IFtdOwogICAgX3RyYW5zbGF0ZUVudHJ5KGVudHJ5LnRoZW4sIGtleVR5cGUsIHZhbHVlVHlwZSwgcmVzdWx0LCB0aGVuQm9keSk7CiAgICBMaXN0PFN0YXRlbWVudD4gZWxzZUJvZHk7CiAgICBpZiAoZW50cnkub3RoZXJ3aXNlICE9IG51bGwpIHsKICAgICAgX3RyYW5zbGF0ZUVudHJ5KGVudHJ5Lm90aGVyd2lzZSwga2V5VHlwZSwgdmFsdWVUeXBlLCByZXN1bHQsCiAgICAgICAgICBlbHNlQm9keSA9IDxTdGF0ZW1lbnQ+W10pOwogICAgfQogICAgU3RhdGVtZW50IHRoZW5TdGF0ZW1lbnQgPQogICAgICAgIHRoZW5Cb2R5Lmxlbmd0aCA9PSAxID8gdGhlbkJvZHkuZmlyc3QgOiBuZXcgQmxvY2sodGhlbkJvZHkpOwogICAgU3RhdGVtZW50IGVsc2VTdGF0ZW1lbnQ7CiAgICBpZiAoZWxzZUJvZHkgIT0gbnVsbCAmJiBlbHNlQm9keS5pc05vdEVtcHR5KSB7CiAgICAgIGVsc2VTdGF0ZW1lbnQgPQogICAgICAgICAgZWxzZUJvZHkubGVuZ3RoID09IDEgPyBlbHNlQm9keS5maXJzdCA6IG5ldyBCbG9jayhlbHNlQm9keSk7CiAgICB9CiAgICBib2R5LmFkZChuZXcgSWZTdGF0ZW1lbnQoCiAgICAgICAgZW50cnkuY29uZGl0aW9uLmFjY2VwdCh0aGlzKSwgdGhlblN0YXRlbWVudCwgZWxzZVN0YXRlbWVudCkpOwogIH0KCiAgdm9pZCBfdHJhbnNsYXRlRm9yRW50cnkoRm9yTWFwRW50cnkgZW50cnksIERhcnRUeXBlIGtleVR5cGUsCiAgICAgIERhcnRUeXBlIHZhbHVlVHlwZSwgVmFyaWFibGVEZWNsYXJhdGlvbiByZXN1bHQsIExpc3Q8U3RhdGVtZW50PiBib2R5KSB7CiAgICBMaXN0PFN0YXRlbWVudD4gc3RhdGVtZW50cyA9IDxTdGF0ZW1lbnQ+W107CiAgICBfdHJhbnNsYXRlRW50cnkoZW50cnkuYm9keSwga2V5VHlwZSwgdmFsdWVUeXBlLCByZXN1bHQsIHN0YXRlbWVudHMpOwogICAgU3RhdGVtZW50IGxvb3BCb2R5ID0KICAgICAgICBzdGF0ZW1lbnRzLmxlbmd0aCA9PSAxID8gc3RhdGVtZW50cy5maXJzdCA6IG5ldyBCbG9jayhzdGF0ZW1lbnRzKTsKICAgIEZvclN0YXRlbWVudCBsb29wID0gbmV3IEZvclN0YXRlbWVudCgKICAgICAgICBlbnRyeS52YXJpYWJsZXMsIGVudHJ5LmNvbmRpdGlvbj8uYWNjZXB0KHRoaXMpLCBlbnRyeS51cGRhdGVzLCBsb29wQm9keSkKICAgICAgLi5maWxlT2Zmc2V0ID0gZW50cnkuZmlsZU9mZnNldDsKICAgIHRyYW5zZm9ybUxpc3QobG9vcC52YXJpYWJsZXMsIHRoaXMsIGxvb3ApOwogICAgdHJhbnNmb3JtTGlzdChsb29wLnVwZGF0ZXMsIHRoaXMsIGxvb3ApOwogICAgYm9keS5hZGQobG9vcCk7CiAgfQoKICB2b2lkIF90cmFuc2xhdGVGb3JJbkVudHJ5KEZvckluTWFwRW50cnkgZW50cnksIERhcnRUeXBlIGtleVR5cGUsCiAgICAgIERhcnRUeXBlIHZhbHVlVHlwZSwgVmFyaWFibGVEZWNsYXJhdGlvbiByZXN1bHQsIExpc3Q8U3RhdGVtZW50PiBib2R5KSB7CiAgICBMaXN0PFN0YXRlbWVudD4gc3RhdGVtZW50czsKICAgIFN0YXRlbWVudCBwcm9sb2d1ZSA9IGVudHJ5LnByb2xvZ3VlOwogICAgaWYgKHByb2xvZ3VlID09IG51bGwpIHsKICAgICAgc3RhdGVtZW50cyA9IDxTdGF0ZW1lbnQ+W107CiAgICB9IGVsc2UgewogICAgICBwcm9sb2d1ZSA9IHByb2xvZ3VlLmFjY2VwdCh0aGlzKTsKICAgICAgc3RhdGVtZW50cyA9CiAgICAgICAgICBwcm9sb2d1ZSBpcyBCbG9jayA/IHByb2xvZ3VlLnN0YXRlbWVudHMgOiA8U3RhdGVtZW50Pltwcm9sb2d1ZV07CiAgICB9CiAgICBfdHJhbnNsYXRlRW50cnkoZW50cnkuYm9keSwga2V5VHlwZSwgdmFsdWVUeXBlLCByZXN1bHQsIHN0YXRlbWVudHMpOwogICAgU3RhdGVtZW50IGxvb3BCb2R5ID0KICAgICAgICBzdGF0ZW1lbnRzLmxlbmd0aCA9PSAxID8gc3RhdGVtZW50cy5maXJzdCA6IG5ldyBCbG9jayhzdGF0ZW1lbnRzKTsKICAgIGlmIChlbnRyeS5wcm9ibGVtICE9IG51bGwpIHsKICAgICAgYm9keS5hZGQobmV3IEV4cHJlc3Npb25TdGF0ZW1lbnQoZW50cnkucHJvYmxlbS5hY2NlcHQodGhpcykpKTsKICAgIH0KICAgIGJvZHkuYWRkKG5ldyBGb3JJblN0YXRlbWVudCgKICAgICAgICBlbnRyeS52YXJpYWJsZSwgZW50cnkuaXRlcmFibGUuYWNjZXB0KHRoaXMpLCBsb29wQm9keSwKICAgICAgICBpc0FzeW5jOiBlbnRyeS5pc0FzeW5jKQogICAgICAuLmZpbGVPZmZzZXQgPSBlbnRyeS5maWxlT2Zmc2V0KTsKICB9CgogIHZvaWQgX3RyYW5zbGF0ZVNwcmVhZEVudHJ5KFNwcmVhZE1hcEVudHJ5IGVudHJ5LCBEYXJ0VHlwZSBrZXlUeXBlLAogICAgICBEYXJ0VHlwZSB2YWx1ZVR5cGUsIFZhcmlhYmxlRGVjbGFyYXRpb24gcmVzdWx0LCBMaXN0PFN0YXRlbWVudD4gYm9keSkgewogICAgRXhwcmVzc2lvbiB2YWx1ZSA9IGVudHJ5LmV4cHJlc3Npb24uYWNjZXB0KHRoaXMpOwogICAgLy8gTnVsbC1hd2FyZSBzcHJlYWRzIHJlcXVpcmUgdGVzdGluZyB0aGUgc3ViZXhwcmVzc2lvbidzIHZhbHVlLgogICAgVmFyaWFibGVEZWNsYXJhdGlvbiB0ZW1wOwogICAgaWYgKGVudHJ5LmlzTnVsbEF3YXJlKSB7CiAgICAgIHRlbXAgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZSh2YWx1ZSwKICAgICAgICAgIHR5cGU6IGNvcmVUeXBlcy5tYXBDbGFzcy5yYXdUeXBlKTsKICAgICAgYm9keS5hZGQodGVtcCk7CiAgICAgIHZhbHVlID0gbmV3IFZhcmlhYmxlR2V0KHRlbXApOwogICAgfQoKICAgIERhcnRUeXBlIGVudHJ5VHlwZSA9CiAgICAgICAgbmV3IEludGVyZmFjZVR5cGUobWFwRW50cnlDbGFzcywgPERhcnRUeXBlPltrZXlUeXBlLCB2YWx1ZVR5cGVdKTsKICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gZWx0OwogICAgU3RhdGVtZW50IGxvb3BCb2R5OwogICAgaWYgKGVudHJ5LmVudHJ5VHlwZSA9PSBudWxsIHx8CiAgICAgICAgIXR5cGVFbnZpcm9ubWVudC5pc1N1YnR5cGVPZihlbnRyeS5lbnRyeVR5cGUsIGVudHJ5VHlwZSkpIHsKICAgICAgZWx0ID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24obnVsbCwKICAgICAgICAgIHR5cGU6IG5ldyBJbnRlcmZhY2VUeXBlKG1hcEVudHJ5Q2xhc3MsCiAgICAgICAgICAgICAgPERhcnRUeXBlPltjb25zdCBEeW5hbWljVHlwZSgpLCBjb25zdCBEeW5hbWljVHlwZSgpXSksCiAgICAgICAgICBpc0ZpbmFsOiB0cnVlKTsKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBrZXlWYXIgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZSgKICAgICAgICAgIG5ldyBBc0V4cHJlc3Npb24oCiAgICAgICAgICAgICAgbmV3IFByb3BlcnR5R2V0KAogICAgICAgICAgICAgICAgICBuZXcgVmFyaWFibGVHZXQoZWx0KSwgbmV3IE5hbWUoJ2tleScpLCBtYXBFbnRyeUtleSksCiAgICAgICAgICAgICAga2V5VHlwZSkKICAgICAgICAgICAgLi5pc1R5cGVFcnJvciA9IHRydWUKICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gZW50cnkuZXhwcmVzc2lvbi5maWxlT2Zmc2V0LAogICAgICAgICAgdHlwZToga2V5VHlwZSk7CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFsdWVWYXIgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZSgKICAgICAgICAgIG5ldyBBc0V4cHJlc3Npb24oCiAgICAgICAgICAgICAgbmV3IFByb3BlcnR5R2V0KAogICAgICAgICAgICAgICAgICBuZXcgVmFyaWFibGVHZXQoZWx0KSwgbmV3IE5hbWUoJ3ZhbHVlJyksIG1hcEVudHJ5VmFsdWUpLAogICAgICAgICAgICAgIHZhbHVlVHlwZSkKICAgICAgICAgICAgLi5pc1R5cGVFcnJvciA9IHRydWUKICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gZW50cnkuZXhwcmVzc2lvbi5maWxlT2Zmc2V0LAogICAgICAgICAgdHlwZTogdmFsdWVUeXBlKTsKICAgICAgbG9vcEJvZHkgPSBuZXcgQmxvY2soPFN0YXRlbWVudD5bCiAgICAgICAga2V5VmFyLAogICAgICAgIHZhbHVlVmFyLAogICAgICAgIG5ldyBFeHByZXNzaW9uU3RhdGVtZW50KG5ldyBNZXRob2RJbnZvY2F0aW9uKAogICAgICAgICAgICBuZXcgVmFyaWFibGVHZXQocmVzdWx0KSwKICAgICAgICAgICAgbmV3IE5hbWUoJ1tdPScpLAogICAgICAgICAgICBuZXcgQXJndW1lbnRzKFtuZXcgVmFyaWFibGVHZXQoa2V5VmFyKSwgbmV3IFZhcmlhYmxlR2V0KHZhbHVlVmFyKV0pLAogICAgICAgICAgICBtYXBQdXQpKQogICAgICBdKTsKICAgIH0gZWxzZSB7CiAgICAgIGVsdCA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKG51bGwsIHR5cGU6IGVudHJ5VHlwZSwgaXNGaW5hbDogdHJ1ZSk7CiAgICAgIGxvb3BCb2R5ID0gbmV3IEV4cHJlc3Npb25TdGF0ZW1lbnQobmV3IE1ldGhvZEludm9jYXRpb24oCiAgICAgICAgICBuZXcgVmFyaWFibGVHZXQocmVzdWx0KSwKICAgICAgICAgIG5ldyBOYW1lKCdbXT0nKSwKICAgICAgICAgIG5ldyBBcmd1bWVudHMoWwogICAgICAgICAgICBuZXcgUHJvcGVydHlHZXQobmV3IFZhcmlhYmxlR2V0KGVsdCksIG5ldyBOYW1lKCdrZXknKSwgbWFwRW50cnlLZXkpLAogICAgICAgICAgICBuZXcgUHJvcGVydHlHZXQoCiAgICAgICAgICAgICAgICBuZXcgVmFyaWFibGVHZXQoZWx0KSwgbmV3IE5hbWUoJ3ZhbHVlJyksIG1hcEVudHJ5VmFsdWUpCiAgICAgICAgICBdKSwKICAgICAgICAgIG1hcFB1dCkpOwogICAgfQogICAgU3RhdGVtZW50IHN0YXRlbWVudCA9IG5ldyBGb3JJblN0YXRlbWVudCgKICAgICAgICBlbHQsIG5ldyBQcm9wZXJ0eUdldCh2YWx1ZSwgbmV3IE5hbWUoJ2VudHJpZXMnKSwgbWFwRW50cmllcyksIGxvb3BCb2R5KTsKCiAgICBpZiAoZW50cnkuaXNOdWxsQXdhcmUpIHsKICAgICAgc3RhdGVtZW50ID0gbmV3IElmU3RhdGVtZW50KAogICAgICAgICAgbmV3IE5vdChuZXcgTWV0aG9kSW52b2NhdGlvbihuZXcgVmFyaWFibGVHZXQodGVtcCksIG5ldyBOYW1lKCc9PScpLAogICAgICAgICAgICAgIG5ldyBBcmd1bWVudHMoW25ldyBOdWxsTGl0ZXJhbCgpXSksIG9iamVjdEVxdWFscykpLAogICAgICAgICAgc3RhdGVtZW50LAogICAgICAgICAgbnVsbCk7CiAgICB9CiAgICBib2R5LmFkZChzdGF0ZW1lbnQpOwogIH0KCiAgVHJlZU5vZGUgX3RyYW5zbGF0ZUNvbnN0TGlzdE9yU2V0KAogICAgICBFeHByZXNzaW9uIG5vZGUsIERhcnRUeXBlIGVsZW1lbnRUeXBlLCBMaXN0PEV4cHJlc3Npb24+IGVsZW1lbnRzLAogICAgICB7Ym9vbCBpc1NldDogZmFsc2V9KSB7CiAgICAvLyBUcmFuc2xhdGUgZWxlbWVudHMgaW4gcGxhY2UgdXAgdG8gdGhlIGZpcnN0IG5vbi1leHByZXNzaW9uLCBpZiBhbnkuCiAgICBpbnQgaSA9IDA7CiAgICBmb3IgKDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgKytpKSB7CiAgICAgIGlmIChlbGVtZW50c1tpXSBpcyBDb250cm9sRmxvd0VsZW1lbnQpIGJyZWFrOwogICAgICBlbGVtZW50c1tpXSA9IGVsZW1lbnRzW2ldLmFjY2VwdCh0aGlzKS4ucGFyZW50ID0gbm9kZTsKICAgIH0KCiAgICAvLyBJZiB0aGVyZSB3ZXJlIG9ubHkgZXhwcmVzc2lvbnMsIHdlIGFyZSBkb25lLgogICAgaWYgKGkgPT0gZWxlbWVudHMubGVuZ3RoKSByZXR1cm4gbm9kZTsKCiAgICBFeHByZXNzaW9uIG1ha2VMaXRlcmFsKExpc3Q8RXhwcmVzc2lvbj4gZXhwcmVzc2lvbnMpIHsKICAgICAgcmV0dXJuIGlzU2V0CiAgICAgICAgICA/IG5ldyBTZXRMaXRlcmFsKGV4cHJlc3Npb25zLAogICAgICAgICAgICAgIHR5cGVBcmd1bWVudDogZWxlbWVudFR5cGUsIGlzQ29uc3Q6IHRydWUpCiAgICAgICAgICA6IG5ldyBMaXN0TGl0ZXJhbChleHByZXNzaW9ucywKICAgICAgICAgICAgICB0eXBlQXJndW1lbnQ6IGVsZW1lbnRUeXBlLCBpc0NvbnN0OiB0cnVlKTsKICAgIH0KCiAgICAvLyBCdWlsZCBhIGNvbmNhdGVuYXRpb24gbm9kZS4KICAgIExpc3Q8RXhwcmVzc2lvbj4gcGFydHMgPSBbXTsKICAgIExpc3Q8RXhwcmVzc2lvbj4gY3VycmVudFBhcnQgPSBpID4gMCA/IGVsZW1lbnRzLnN1Ymxpc3QoMCwgaSkgOiBudWxsOwoKICAgIGZvciAoOyBpIDwgZWxlbWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgRXhwcmVzc2lvbiBlbGVtZW50ID0gZWxlbWVudHNbaV07CiAgICAgIGlmIChlbGVtZW50IGlzIFNwcmVhZEVsZW1lbnQpIHsKICAgICAgICBpZiAoY3VycmVudFBhcnQgIT0gbnVsbCkgewogICAgICAgICAgcGFydHMuYWRkKG1ha2VMaXRlcmFsKGN1cnJlbnRQYXJ0KSk7CiAgICAgICAgICBjdXJyZW50UGFydCA9IG51bGw7CiAgICAgICAgfQogICAgICAgIEV4cHJlc3Npb24gc3ByZWFkRXhwcmVzc2lvbiA9IGVsZW1lbnQuZXhwcmVzc2lvbi5hY2NlcHQodGhpcyk7CiAgICAgICAgaWYgKGVsZW1lbnQuaXNOdWxsQXdhcmUpIHsKICAgICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdGVtcCA9CiAgICAgICAgICAgICAgbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24obnVsbCwgaW5pdGlhbGl6ZXI6IHNwcmVhZEV4cHJlc3Npb24pOwogICAgICAgICAgcGFydHMuYWRkKG5ldyBMZXQoCiAgICAgICAgICAgICAgdGVtcCwKICAgICAgICAgICAgICBuZXcgQ29uZGl0aW9uYWxFeHByZXNzaW9uKAogICAgICAgICAgICAgICAgICBuZXcgTWV0aG9kSW52b2NhdGlvbihuZXcgVmFyaWFibGVHZXQodGVtcCksIG5ldyBOYW1lKCc9PScpLAogICAgICAgICAgICAgICAgICAgICAgbmV3IEFyZ3VtZW50cyhbbmV3IE51bGxMaXRlcmFsKCldKSksCiAgICAgICAgICAgICAgICAgIG1ha2VMaXRlcmFsKFtdKSwKICAgICAgICAgICAgICAgICAgbmV3IFZhcmlhYmxlR2V0KHRlbXApLAogICAgICAgICAgICAgICAgICBjb25zdCBEeW5hbWljVHlwZSgpKSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwYXJ0cy5hZGQoc3ByZWFkRXhwcmVzc2lvbik7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgaXMgSWZFbGVtZW50KSB7CiAgICAgICAgaWYgKGN1cnJlbnRQYXJ0ICE9IG51bGwpIHsKICAgICAgICAgIHBhcnRzLmFkZChtYWtlTGl0ZXJhbChjdXJyZW50UGFydCkpOwogICAgICAgICAgY3VycmVudFBhcnQgPSBudWxsOwogICAgICAgIH0KICAgICAgICBFeHByZXNzaW9uIGNvbmRpdGlvbiA9IGVsZW1lbnQuY29uZGl0aW9uLmFjY2VwdCh0aGlzKTsKICAgICAgICBFeHByZXNzaW9uIHRoZW4gPSBtYWtlTGl0ZXJhbChbZWxlbWVudC50aGVuXSkuYWNjZXB0KHRoaXMpOwogICAgICAgIEV4cHJlc3Npb24gb3RoZXJ3aXNlID0gZWxlbWVudC5vdGhlcndpc2UgIT0gbnVsbAogICAgICAgICAgICA/IG1ha2VMaXRlcmFsKFtlbGVtZW50Lm90aGVyd2lzZV0pLmFjY2VwdCh0aGlzKQogICAgICAgICAgICA6IG1ha2VMaXRlcmFsKFtdKTsKICAgICAgICBwYXJ0cy5hZGQobmV3IENvbmRpdGlvbmFsRXhwcmVzc2lvbigKICAgICAgICAgICAgY29uZGl0aW9uLCB0aGVuLCBvdGhlcndpc2UsIGNvbnN0IER5bmFtaWNUeXBlKCkpKTsKICAgICAgfSBlbHNlIGlmIChlbGVtZW50IGlzIEZvckVsZW1lbnQgfHwgZWxlbWVudCBpcyBGb3JJbkVsZW1lbnQpIHsKICAgICAgICAvLyBSZWplY3RlZCBlYXJsaWVyLgogICAgICAgIHVuaGFuZGxlZCgiJHtlbGVtZW50LnJ1bnRpbWVUeXBlfSIsICJfdHJhbnNsYXRlQ29uc3RMaXN0T3JTZXQiLAogICAgICAgICAgICBlbGVtZW50LmZpbGVPZmZzZXQsIGdldEZpbGVVcmkoZWxlbWVudCkpOwogICAgICB9IGVsc2UgewogICAgICAgIGN1cnJlbnRQYXJ0ID8/PSA8RXhwcmVzc2lvbj5bXTsKICAgICAgICBjdXJyZW50UGFydC5hZGQoZWxlbWVudC5hY2NlcHQodGhpcykpOwogICAgICB9CiAgICB9CiAgICBpZiAoY3VycmVudFBhcnQgIT0gbnVsbCkgewogICAgICBwYXJ0cy5hZGQobWFrZUxpdGVyYWwoY3VycmVudFBhcnQpKTsKICAgIH0KICAgIHJldHVybiBpc1NldAogICAgICAgID8gbmV3IFNldENvbmNhdGVuYXRpb24ocGFydHMsIHR5cGVBcmd1bWVudDogZWxlbWVudFR5cGUpCiAgICAgICAgOiBuZXcgTGlzdENvbmNhdGVuYXRpb24ocGFydHMsIHR5cGVBcmd1bWVudDogZWxlbWVudFR5cGUpOwogIH0KCiAgVHJlZU5vZGUgX3RyYW5zbGF0ZUNvbnN0TWFwKE1hcExpdGVyYWwgbm9kZSkgewogICAgLy8gVHJhbnNsYXRlIGVudHJpZXMgaW4gcGxhY2UgdXAgdG8gdGhlIGZpcnN0IGNvbnRyb2wtZmxvdyBlbnRyeSwgaWYgYW55LgogICAgaW50IGkgPSAwOwogICAgZm9yICg7IGkgPCBub2RlLmVudHJpZXMubGVuZ3RoOyArK2kpIHsKICAgICAgaWYgKG5vZGUuZW50cmllc1tpXSBpcyBDb250cm9sRmxvd01hcEVudHJ5KSBicmVhazsKICAgICAgbm9kZS5lbnRyaWVzW2ldID0gbm9kZS5lbnRyaWVzW2ldLmFjY2VwdCh0aGlzKS4ucGFyZW50ID0gbm9kZTsKICAgIH0KCiAgICAvLyBJZiB0aGVyZSB3ZXJlIG5vIGNvbnRyb2wtZmxvdyBlbnRyaWVzIHdlIGFyZSBkb25lLgogICAgaWYgKGkgPT0gbm9kZS5lbnRyaWVzLmxlbmd0aCkgcmV0dXJuIG5vZGU7CgogICAgTWFwTGl0ZXJhbCBtYWtlTGl0ZXJhbChMaXN0PE1hcEVudHJ5PiBlbnRyaWVzKSB7CiAgICAgIHJldHVybiBuZXcgTWFwTGl0ZXJhbChlbnRyaWVzLAogICAgICAgICAga2V5VHlwZTogbm9kZS5rZXlUeXBlLCB2YWx1ZVR5cGU6IG5vZGUudmFsdWVUeXBlLCBpc0NvbnN0OiB0cnVlKTsKICAgIH0KCiAgICAvLyBCdWlsZCBhIGNvbmNhdGVuYXRpb24gbm9kZS4KICAgIExpc3Q8RXhwcmVzc2lvbj4gcGFydHMgPSBbXTsKICAgIExpc3Q8TWFwRW50cnk+IGN1cnJlbnRQYXJ0ID0gaSA+IDAgPyBub2RlLmVudHJpZXMuc3VibGlzdCgwLCBpKSA6IG51bGw7CgogICAgZm9yICg7IGkgPCBub2RlLmVudHJpZXMubGVuZ3RoOyArK2kpIHsKICAgICAgTWFwRW50cnkgZW50cnkgPSBub2RlLmVudHJpZXNbaV07CiAgICAgIGlmIChlbnRyeSBpcyBTcHJlYWRNYXBFbnRyeSkgewogICAgICAgIGlmIChjdXJyZW50UGFydCAhPSBudWxsKSB7CiAgICAgICAgICBwYXJ0cy5hZGQobWFrZUxpdGVyYWwoY3VycmVudFBhcnQpKTsKICAgICAgICAgIGN1cnJlbnRQYXJ0ID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgRXhwcmVzc2lvbiBzcHJlYWRFeHByZXNzaW9uID0gZW50cnkuZXhwcmVzc2lvbi5hY2NlcHQodGhpcyk7CiAgICAgICAgaWYgKGVudHJ5LmlzTnVsbEF3YXJlKSB7CiAgICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHRlbXAgPQogICAgICAgICAgICAgIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKG51bGwsIGluaXRpYWxpemVyOiBzcHJlYWRFeHByZXNzaW9uKTsKICAgICAgICAgIHBhcnRzLmFkZChuZXcgTGV0KAogICAgICAgICAgICAgIHRlbXAsCiAgICAgICAgICAgICAgbmV3IENvbmRpdGlvbmFsRXhwcmVzc2lvbigKICAgICAgICAgICAgICAgICAgbmV3IE1ldGhvZEludm9jYXRpb24obmV3IFZhcmlhYmxlR2V0KHRlbXApLCBuZXcgTmFtZSgnPT0nKSwKICAgICAgICAgICAgICAgICAgICAgIG5ldyBBcmd1bWVudHMoW25ldyBOdWxsTGl0ZXJhbCgpXSkpLAogICAgICAgICAgICAgICAgICBtYWtlTGl0ZXJhbChbXSksCiAgICAgICAgICAgICAgICAgIG5ldyBWYXJpYWJsZUdldCh0ZW1wKSwKICAgICAgICAgICAgICAgICAgY29uc3QgRHluYW1pY1R5cGUoKSkpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcGFydHMuYWRkKHNwcmVhZEV4cHJlc3Npb24pOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChlbnRyeSBpcyBJZk1hcEVudHJ5KSB7CiAgICAgICAgaWYgKGN1cnJlbnRQYXJ0ICE9IG51bGwpIHsKICAgICAgICAgIHBhcnRzLmFkZChtYWtlTGl0ZXJhbChjdXJyZW50UGFydCkpOwogICAgICAgICAgY3VycmVudFBhcnQgPSBudWxsOwogICAgICAgIH0KICAgICAgICBFeHByZXNzaW9uIGNvbmRpdGlvbiA9IGVudHJ5LmNvbmRpdGlvbi5hY2NlcHQodGhpcyk7CiAgICAgICAgRXhwcmVzc2lvbiB0aGVuID0gbWFrZUxpdGVyYWwoW2VudHJ5LnRoZW5dKS5hY2NlcHQodGhpcyk7CiAgICAgICAgRXhwcmVzc2lvbiBvdGhlcndpc2UgPSBlbnRyeS5vdGhlcndpc2UgIT0gbnVsbAogICAgICAgICAgICA/IG1ha2VMaXRlcmFsKFtlbnRyeS5vdGhlcndpc2VdKS5hY2NlcHQodGhpcykKICAgICAgICAgICAgOiBtYWtlTGl0ZXJhbChbXSk7CiAgICAgICAgcGFydHMuYWRkKG5ldyBDb25kaXRpb25hbEV4cHJlc3Npb24oCiAgICAgICAgICAgIGNvbmRpdGlvbiwgdGhlbiwgb3RoZXJ3aXNlLCBjb25zdCBEeW5hbWljVHlwZSgpKSk7CiAgICAgIH0gZWxzZSBpZiAoZW50cnkgaXMgRm9yTWFwRW50cnkgfHwgZW50cnkgaXMgRm9ySW5NYXBFbnRyeSkgewogICAgICAgIC8vIFJlamVjdGVkIGVhcmxpZXIuCiAgICAgICAgdW5oYW5kbGVkKCIke2VudHJ5LnJ1bnRpbWVUeXBlfSIsICJfdHJhbnNsYXRlQ29uc3RNYXAiLAogICAgICAgICAgICBlbnRyeS5maWxlT2Zmc2V0LCBnZXRGaWxlVXJpKGVudHJ5KSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY3VycmVudFBhcnQgPz89IDxNYXBFbnRyeT5bXTsKICAgICAgICBjdXJyZW50UGFydC5hZGQoZW50cnkuYWNjZXB0KHRoaXMpKTsKICAgICAgfQogICAgfQogICAgaWYgKGN1cnJlbnRQYXJ0ICE9IG51bGwpIHsKICAgICAgcGFydHMuYWRkKG1ha2VMaXRlcmFsKGN1cnJlbnRQYXJ0KSk7CiAgICB9CiAgICByZXR1cm4gbmV3IE1hcENvbmNhdGVuYXRpb24ocGFydHMsCiAgICAgICAga2V5VHlwZTogbm9kZS5rZXlUeXBlLCB2YWx1ZVR5cGU6IG5vZGUudmFsdWVUeXBlKTsKICB9Cn0KgoIATk48ASUBIgEhCRMWDxkPHxIVFB0PGBYVFw0bFRoSFBoODRUTFRoUExoXEh0VATgBRAE3ARoJHB0UFhcVExQXGAE2ATkBRAEyHSkbHhogHhodGx0BOks7GQQBLSZMUDhOF0sVUU4YRhZOGFABIEgdSw8nND0GATQrAUEgEVATMSBERhoNMTpHGgYlOCI/BkYnSAYBSgQBTzokSidGKEcqSQ1IBgQBPTo7IRkiJQQBUDopUSQlRysGNB8lGD8sIScGUSoEAUZGME0ZSzxEKS8tFAQBSkYgKxwiDSgTSwZNGUsjRwYhQyIqBAFMRjhFHh81NRYlBgEdGCdKKjVIPiE6HigTNiUdOScKDU0/IxsxJgZEAR8jTkIVEQYZBAEMMBhRGQYBShcEAQwuGFEYBgFKFgQBDC4YJwYBTg8rOUUGATovATlDTiFBGCU/IjYGKxdIBgFKBAFNOiNGJkInQylFDTkGBAEYSjshGTETBAFROiNHHiNDJQYeRR0zFkcGHkYEAT9OMEkZSypRJy8tFAQBQ04gKRwiDSgTSwZJGUshRQYhPyAoBAFFTjZFHh01LRYlBgEZSh0YI0QqMUUaRRwfRxchOBpHHB9LGSE4HCgQEjYlHVEVCg1LPyMbGlEdSA4UBi5RAR0jTkIVEQYZBAElSB1LDyc0PQYBNCsBOxMoOCk5BgEjIUoBJygmIy8eCkcjJUwdFClOOyMpKhEnCikjLx4KP0Q5PB8tP0UdSDYPKC8IBh8rBhFBQwQBMU4PKzlFBgE6LwE1JUwGASMhTAErKCUjLx4KRSElTB0UKU47IykqEScKKCMvHgo9Qjc6Hy0/Qx1AMg8mLQgGHysGJzsEAgE9cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC90cmFuc2Zvcm1fY29sbGVjdGlvbnMuZGFydEdzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL3RyYW5zZm9ybV9zZXRfbGl0ZXJhbHMuZGFydInhLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEudHJhbnNmb3JtX3NldF9saXRlcmFsczsKCmltcG9ydCAnZGFydDpjb3JlJyBoaWRlIE1hcEVudHJ5OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBBcmd1bWVudHMsCiAgICAgICAgRXhwcmVzc2lvbiwKICAgICAgICBJbnRlcmZhY2VUeXBlLAogICAgICAgIExldCwKICAgICAgICBNZXRob2RJbnZvY2F0aW9uLAogICAgICAgIE5hbWUsCiAgICAgICAgUHJvY2VkdXJlLAogICAgICAgIFNldExpdGVyYWwsCiAgICAgICAgU3RhdGljSW52b2NhdGlvbiwKICAgICAgICBUcmVlTm9kZSwKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uLAogICAgICAgIFZhcmlhYmxlR2V0OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIHNob3cgQ29yZVR5cGVzOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC92aXNpdG9yLmRhcnQnIHNob3cgVHJhbnNmb3JtZXI7CgppbXBvcnQgJy4uL3NvdXJjZS9zb3VyY2VfbG9hZGVyLmRhcnQnIHNob3cgU291cmNlTG9hZGVyOwoKaW1wb3J0ICdyZWRpcmVjdGluZ19mYWN0b3J5X2JvZHkuZGFydCcgc2hvdyBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5OwoKLy8gVE9ETyhhc2tlc2MpOiBEZWxldGUgdGhpcyBjbGFzcyB3aGVuIGFsbCBiYWNrZW5kcyBzdXBwb3J0IHNldCBsaXRlcmFscy4KY2xhc3MgU2V0TGl0ZXJhbFRyYW5zZm9ybWVyIGV4dGVuZHMgVHJhbnNmb3JtZXIgewogIGZpbmFsIENvcmVUeXBlcyBjb3JlVHlwZXM7CiAgZmluYWwgUHJvY2VkdXJlIHNldEZhY3Rvcnk7CiAgZmluYWwgUHJvY2VkdXJlIGFkZE1ldGhvZDsKCiAgc3RhdGljIFByb2NlZHVyZSBfZmluZFNldEZhY3RvcnkoQ29yZVR5cGVzIGNvcmVUeXBlcykgewogICAgUHJvY2VkdXJlIGZhY3RvcnkgPSBjb3JlVHlwZXMuaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmNvcmUnLCAnU2V0JywgJycpOwogICAgUmVkaXJlY3RpbmdGYWN0b3J5Qm9keSBib2R5ID0gZmFjdG9yeT8uZnVuY3Rpb24/LmJvZHk7CiAgICByZXR1cm4gYm9keT8udGFyZ2V0OwogIH0KCiAgc3RhdGljIFByb2NlZHVyZSBfZmluZEFkZE1ldGhvZChDb3JlVHlwZXMgY29yZVR5cGVzKSB7CiAgICByZXR1cm4gY29yZVR5cGVzLmluZGV4LmdldE1lbWJlcignZGFydDpjb3JlJywgJ1NldCcsICdhZGQnKTsKICB9CgogIFNldExpdGVyYWxUcmFuc2Zvcm1lcihTb3VyY2VMb2FkZXIgbG9hZGVyKQogICAgICA6IGNvcmVUeXBlcyA9IGxvYWRlci5jb3JlVHlwZXMsCiAgICAgICAgc2V0RmFjdG9yeSA9IF9maW5kU2V0RmFjdG9yeShsb2FkZXIuY29yZVR5cGVzKSwKICAgICAgICBhZGRNZXRob2QgPSBfZmluZEFkZE1ldGhvZChsb2FkZXIuY29yZVR5cGVzKTsKCiAgVHJlZU5vZGUgdmlzaXRTZXRMaXRlcmFsKFNldExpdGVyYWwgbm9kZSkgewogICAgaWYgKG5vZGUuaXNDb25zdCkgcmV0dXJuIG5vZGU7CgogICAgLy8gT3V0ZXJtb3N0IGRlY2xhcmF0aW9uIG9mIGxldCBjaGFpbjogU2V0PEU+IHNldFZhciA9IG5ldyBTZXQ8RT4oKTsKICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gc2V0VmFyID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUoCiAgICAgICAgbmV3IFN0YXRpY0ludm9jYXRpb24oCiAgICAgICAgICAgIHNldEZhY3RvcnksIG5ldyBBcmd1bWVudHMoW10sIHR5cGVzOiBbbm9kZS50eXBlQXJndW1lbnRdKSksCiAgICAgICAgdHlwZTogbmV3IEludGVyZmFjZVR5cGUoY29yZVR5cGVzLnNldENsYXNzLCBbbm9kZS50eXBlQXJndW1lbnRdKSk7CiAgICAvLyBJbm5lcm1vc3QgYm9keSBvZiBsZXQgY2hhaW46IHNldFZhcgogICAgRXhwcmVzc2lvbiBzZXRFeHAgPSBuZXcgVmFyaWFibGVHZXQoc2V0VmFyKTsKICAgIGZvciAoaW50IGkgPSBub2RlLmV4cHJlc3Npb25zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIC8vIGxldCBfID0gc2V0VmFyLmFkZChleHByZXNzaW9uKSBpbiByZXN0CiAgICAgIEV4cHJlc3Npb24gZW50cnkgPSBub2RlLmV4cHJlc3Npb25zW2ldLmFjY2VwdCh0aGlzKTsKICAgICAgc2V0RXhwID0gbmV3IExldCgKICAgICAgICAgIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKG5ldyBNZXRob2RJbnZvY2F0aW9uKAogICAgICAgICAgICAgIG5ldyBWYXJpYWJsZUdldChzZXRWYXIpLAogICAgICAgICAgICAgIG5ldyBOYW1lKCJhZGQiKSwKICAgICAgICAgICAgICBuZXcgQXJndW1lbnRzKFtlbnRyeV0pLAogICAgICAgICAgICAgIGFkZE1ldGhvZCkpLAogICAgICAgICAgc2V0RXhwKTsKICAgIH0KICAgIHJldHVybiBuZXcgTGV0KHNldFZhciwgc2V0RXhwKTsKICB9Cn0KTgBOTjwBJgEiASEJExQXDRoOExQaEh0VATgBNwE5AUQBSzIdHh0BOks7GQQBOUEEAS0mODYBLiMBSUMeSEsrMT0wOxhBJx8mGxMGJAQCAT5wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL3RyYW5zZm9ybV9zZXRfbGl0ZXJhbHMuZGFydERzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvcGFyc2VyL2NsYXNzX21lbWJlcl9wYXJzZXIuZGFydIemLy8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEucGFyc2VyLmNsYXNzX21lbWJlcl9wYXJzZXI7CgppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCcgc2hvdyBUb2tlbjsKCmltcG9ydCAnZXJyb3JfZGVsZWdhdGlvbl9saXN0ZW5lci5kYXJ0JyBzaG93IEVycm9yRGVsZWdhdGlvbkxpc3RlbmVyOwoKaW1wb3J0ICdsaXN0ZW5lci5kYXJ0JyBzaG93IExpc3RlbmVyOwoKaW1wb3J0ICdwYXJzZXIuZGFydCcgc2hvdyBQYXJzZXI7CgovLy8gUGFyc2VyIHNpbWlsYXIgdG8gW1RvcExldmVsUGFyc2VyXSBidXQgYWxzbyBwYXJzZXMgY2xhc3MgbWVtYmVycyAoZXhjbHVkaW5nCi8vLyB0aGVpciBib2RpZXMpLgpjbGFzcyBDbGFzc01lbWJlclBhcnNlciBleHRlbmRzIFBhcnNlciB7CiAgUGFyc2VyIHNraXBQYXJzZXI7CgogIENsYXNzTWVtYmVyUGFyc2VyKExpc3RlbmVyIGxpc3RlbmVyKSA6IHN1cGVyKGxpc3RlbmVyKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2VFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gc2tpcEV4cHJlc3Npb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2VJZGVudGlmaWVyRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIHRva2VuLm5leHQ7CiAgfQoKICBUb2tlbiBza2lwRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgLy8gVE9ETyhhc2tlc2MpOiBXZSBsaXN0ZW4gdG8gZXJyb3JzIG9jY3VycmluZyBkdXJpbmcgZXhwcmVzc2lvbiBwYXJzaW5nLAogICAgLy8gc2luY2UgdGhlIHBhcnNlciBtYXkgcmV3cml0ZSB0aGUgdG9rZW4gc3RyZWFtIHN1Y2ggdGhhdCB0aGUgZXJyb3IgaXMKICAgIC8vIG5vdCB0cmlnZ2VyZWQgZHVyaW5nIHRoZSBzZWNvbmQgcGFyc2UuCiAgICAvLyBXaGVuIHRoZSBwYXJzZXIgc3VwcG9ydHMgbm90IGRvaW5nIHRva2VuIHN0cmVhbSByZXdyaXRpbmcsIHVzZSB0aGF0CiAgICAvLyBmZWF0dXJlIHRvZ2V0aGVyIHdpdGggYSBuby1vcCBsaXN0ZW5lciBpbnN0ZWFkLgogICAgc2tpcFBhcnNlciA/Pz0gbmV3IFBhcnNlcihuZXcgRXJyb3JEZWxlZ2F0aW9uTGlzdGVuZXIobGlzdGVuZXIpKTsKICAgIHNraXBQYXJzZXIubWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zID0gbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zOwogICAgc2tpcFBhcnNlci5hc3luY1N0YXRlID0gYXN5bmNTdGF0ZTsKICAgIHNraXBQYXJzZXIubG9vcFN0YXRlID0gbG9vcFN0YXRlOwogICAgcmV0dXJuIHNraXBQYXJzZXIucGFyc2VFeHByZXNzaW9uKHRva2VuKTsKICB9CgogIC8vIFRoaXMgbWV0aG9kIGlzIG92ZXJyaWRkZW4gZm9yIHR3byByZWFzb25zOgogIC8vIDEuIEF2b2lkIGdlbmVyYXRpbmcgZXZlbnRzIGZvciBhcmd1bWVudHMuCiAgLy8gMi4gQXZvaWQgY2FsbGluZyBza2lwIGV4cHJlc3Npb24gZm9yIGVhY2ggYXJndW1lbnQgKHdoaWNoIGRvZXNuJ3Qgd29yaykuCiAgVG9rZW4gcGFyc2VBcmd1bWVudHNPcHQoVG9rZW4gdG9rZW4pID0+IHNraXBBcmd1bWVudHNPcHQodG9rZW4pOwoKICBUb2tlbiBwYXJzZUZ1bmN0aW9uQm9keShUb2tlbiB0b2tlbiwgYm9vbCBpc0V4cHJlc3Npb24sIGJvb2wgYWxsb3dBYnN0cmFjdCkgewogICAgcmV0dXJuIHNraXBGdW5jdGlvbkJvZHkodG9rZW4sIGlzRXhwcmVzc2lvbiwgYWxsb3dBYnN0cmFjdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZUludmFsaWRCbG9jayhUb2tlbiB0b2tlbikgPT4gc2tpcEJsb2NrKHRva2VuKTsKfQo6AE5OPAEqAS4BRgEmASIBUBMpFQE6AQwnIgQBDDEXBAEmTkwuSzdGSigmLgQBMC9OQwFQQQQBDDwCATtwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL2NsYXNzX21lbWJlcl9wYXJzZXIuZGFydD5zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvc291cmNlL2RpZXRfbGlzdGVuZXIuZGFydMAAfyEvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5kaWV0X2xpc3RlbmVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBBc3luY01hcmtlciwKICAgICAgICBFeHByZXNzaW9uLAogICAgICAgIEludGVyZmFjZVR5cGUsCiAgICAgICAgTGlicmFyeSwKICAgICAgICBMaWJyYXJ5RGVwZW5kZW5jeSwKICAgICAgICBMaWJyYXJ5UGFydCwKICAgICAgICBUcmVlTm9kZSwKICAgICAgICBUeXBlUGFyYW1ldGVyLAogICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb247CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBzaG93IENsYXNzSGllcmFyY2h5OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIHNob3cgQ29yZVR5cGVzOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJy4uL2J1aWxkZXIvYnVpbGRlci5kYXJ0JzsKCmltcG9ydCAnLi4vYnVpbGRlci9kZWNsYXJhdGlvbl9idWlsZGVyLmRhcnQnOwoKaW1wb3J0ICcuLi9jb25zdGFudF9jb250ZXh0LmRhcnQnIHNob3cgQ29uc3RhbnRDb250ZXh0OwoKaW1wb3J0ICcuLi9jcmFzaC5kYXJ0JyBzaG93IENyYXNoOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdwogICAgICAgIENvZGUsCiAgICAgICAgTG9jYXRlZE1lc3NhZ2UsCiAgICAgICAgTWVzc2FnZSwKICAgICAgICBtZXNzYWdlRXhwZWN0ZWRCbG9ja1RvU2tpcCwKICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbU5vdEZvdW5kOwoKaW1wb3J0ICcuLi9pZ25vcmVkX3BhcnNlcl9lcnJvcnMuZGFydCcgc2hvdyBpc0lnbm9yZWRQYXJzZXJFcnJvcjsKCmltcG9ydCAnLi4va2VybmVsL2JvZHlfYnVpbGRlci5kYXJ0JyBzaG93IEJvZHlCdWlsZGVyOwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydCcKICAgIHNob3cgRm9ybWFsUGFyYW1ldGVyQnVpbGRlciwgVHlwZUFsaWFzQnVpbGRlciwgVHlwZUJ1aWxkZXI7CgppbXBvcnQgJy4uL3BhcnNlci5kYXJ0JwogICAgc2hvdyBBc3NlcnQsIERlY2xhcmF0aW9uS2luZCwgTWVtYmVyS2luZCwgUGFyc2VyLCBvcHRpb25hbDsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcKICAgIHNob3cgRGVidWdBYm9ydCwgaW50ZXJuYWxQcm9ibGVtLCB1bmV4cGVjdGVkLCB1bmhhbmRsZWQ7CgppbXBvcnQgJy4uL3R5cGVfaW5mZXJlbmNlL3R5cGVfaW5mZXJlbmNlX2VuZ2luZS5kYXJ0JyBzaG93IFR5cGVJbmZlcmVuY2VFbmdpbmU7CgppbXBvcnQgJy4uL3R5cGVfaW5mZXJlbmNlL3R5cGVfaW5mZXJyZXIuZGFydCcgc2hvdyBUeXBlSW5mZXJyZXI7CgppbXBvcnQgJ3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnc3RhY2tfbGlzdGVuZXIuZGFydCcKICAgIHNob3cgRml4ZWROdWxsYWJsZUxpc3QsIE51bGxWYWx1ZSwgUGFyc2VyUmVjb3ZlcnksIFN0YWNrTGlzdGVuZXI7CgppbXBvcnQgJy4uL3NvdXJjZS92YWx1ZV9raW5kcy5kYXJ0JzsKCmltcG9ydCAnLi4vcXVvdGUuZGFydCcgc2hvdyB1bmVzY2FwZVN0cmluZzsKCmNsYXNzIERpZXRMaXN0ZW5lciBleHRlbmRzIFN0YWNrTGlzdGVuZXIgewogIGZpbmFsIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnlCdWlsZGVyOwoKICBmaW5hbCBDbGFzc0hpZXJhcmNoeSBoaWVyYXJjaHk7CgogIGZpbmFsIENvcmVUeXBlcyBjb3JlVHlwZXM7CgogIGZpbmFsIGJvb2wgZW5hYmxlTmF0aXZlOwoKICBmaW5hbCBib29sIHN0cmluZ0V4cGVjdGVkQWZ0ZXJOYXRpdmU7CgogIGZpbmFsIFR5cGVJbmZlcmVuY2VFbmdpbmUgdHlwZUluZmVyZW5jZUVuZ2luZTsKCiAgaW50IGltcG9ydEV4cG9ydERpcmVjdGl2ZUluZGV4ID0gMDsKICBpbnQgcGFydERpcmVjdGl2ZUluZGV4ID0gMDsKCiAgRGVjbGFyYXRpb25CdWlsZGVyIF9jdXJyZW50RGVjbGFyYXRpb247CiAgQ2xhc3NCdWlsZGVyIF9jdXJyZW50Q2xhc3M7CgogIGJvb2wgY3VycmVudENsYXNzSXNQYXJzZXJSZWNvdmVyeSA9IGZhbHNlOwoKICAvLy8gQ291bnRlciB1c2VkIGZvciBuYW1pbmcgdW5uYW1lZCBleHRlbnNpb24gZGVjbGFyYXRpb25zLgogIGludCB1bm5hbWVkRXh0ZW5zaW9uQ291bnRlciA9IDA7CgogIC8vLyBGb3IgdG9wLWxldmVsIGRlY2xhcmF0aW9ucywgdGhpcyBpcyB0aGUgbGlicmFyeSBzY29wZS4gRm9yIGNsYXNzIG1lbWJlcnMsCiAgLy8vIHRoaXMgaXMgdGhlIGluc3RhbmNlIHNjb3BlIG9mIFtjdXJyZW50RGVjbGFyYXRpb25dLgogIFNjb3BlIG1lbWJlclNjb3BlOwoKICBAb3ZlcnJpZGUKICBVcmkgdXJpOwoKICBEaWV0TGlzdGVuZXIoU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgdGhpcy5oaWVyYXJjaHksIHRoaXMuY29yZVR5cGVzLAogICAgICB0aGlzLnR5cGVJbmZlcmVuY2VFbmdpbmUpCiAgICAgIDogbGlicmFyeUJ1aWxkZXIgPSBsaWJyYXJ5LAogICAgICAgIHVyaSA9IGxpYnJhcnkuZmlsZVVyaSwKICAgICAgICBtZW1iZXJTY29wZSA9IGxpYnJhcnkuc2NvcGUsCiAgICAgICAgZW5hYmxlTmF0aXZlID0KICAgICAgICAgICAgbGlicmFyeS5sb2FkZXIudGFyZ2V0LmJhY2tlbmRUYXJnZXQuZW5hYmxlTmF0aXZlKGxpYnJhcnkudXJpKSwKICAgICAgICBzdHJpbmdFeHBlY3RlZEFmdGVyTmF0aXZlID0KICAgICAgICAgICAgbGlicmFyeS5sb2FkZXIudGFyZ2V0LmJhY2tlbmRUYXJnZXQubmF0aXZlRXh0ZW5zaW9uRXhwZWN0c1N0cmluZzsKCiAgRGVjbGFyYXRpb25CdWlsZGVyIGdldCBjdXJyZW50RGVjbGFyYXRpb24gPT4gX2N1cnJlbnREZWNsYXJhdGlvbjsKCiAgdm9pZCBzZXQgY3VycmVudERlY2xhcmF0aW9uKERlY2xhcmF0aW9uQnVpbGRlciBidWlsZGVyKSB7CiAgICBpZiAoYnVpbGRlciA9PSBudWxsKSB7CiAgICAgIF9jdXJyZW50Q2xhc3MgPSBfY3VycmVudERlY2xhcmF0aW9uID0gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIF9jdXJyZW50RGVjbGFyYXRpb24gPSBidWlsZGVyOwogICAgICBfY3VycmVudENsYXNzID0gYnVpbGRlciBpcyBDbGFzc0J1aWxkZXIgPyBidWlsZGVyIDogbnVsbDsKICAgIH0KICB9CgogIENsYXNzQnVpbGRlciBnZXQgY3VycmVudENsYXNzID0+IF9jdXJyZW50Q2xhc3M7CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWV0YWRhdGFTdGFyKGludCBjb3VudCkgewogICAgYXNzZXJ0KGNoZWNrU3RhdGUobnVsbCwgcmVwZWF0ZWRLaW5kcyhWYWx1ZUtpbmQuVG9rZW4sIGNvdW50KSkpOwogICAgZGVidWdFdmVudCgiTWV0YWRhdGFTdGFyIik7CiAgICBpZiAoY291bnQgPiAwKSB7CiAgICAgIGRpc2NhcmQoY291bnQgLSAxKTsKICAgICAgcHVzaChwb3AoTnVsbFZhbHVlLlRva2VuKSA/PyBOdWxsVmFsdWUuVG9rZW4pOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChOdWxsVmFsdWUuVG9rZW4pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRNZXRhZGF0YShUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBwZXJpb2RCZWZvcmVOYW1lLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiTWV0YWRhdGEiKTsKICAgIGRpc2NhcmQocGVyaW9kQmVmb3JlTmFtZSA9PSBudWxsID8gMSA6IDIpOwogICAgcHVzaChiZWdpblRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kUGFydE9mKAogICAgICBUb2tlbiBwYXJ0S2V5d29yZCwgVG9rZW4gb2ZLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24sIGJvb2wgaGFzTmFtZSkgewogICAgZGVidWdFdmVudCgiUGFydE9mIik7CiAgICBpZiAoaGFzTmFtZSkgZGlzY2FyZCgxKTsKICAgIGRpc2NhcmQoMSk7IC8vIE1ldGFkYXRhLgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJbnZhbGlkVG9wTGV2ZWxEZWNsYXJhdGlvbihUb2tlbiBiZWdpblRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJJbnZhbGlkVG9wTGV2ZWxEZWNsYXJhdGlvbiIpOwogICAgcG9wKCk7IC8vIG1ldGFkYXRhIHN0YXIKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9Bcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk5vQXJndW1lbnRzIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vVHlwZUFyZ3VtZW50cyhUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiTm9UeXBlQXJndW1lbnRzIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vQ29uc3RydWN0b3JSZWZlcmVuY2VDb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk5vQ29uc3RydWN0b3JSZWZlcmVuY2VDb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHMiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9UeXBlKFRva2VuIGxhc3RDb25zdW1lZCkgewogICAgZGVidWdFdmVudCgiTm9UeXBlIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVR5cGUoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gcXVlc3Rpb25NYXJrKSB7CiAgICBkZWJ1Z0V2ZW50KCJUeXBlIik7CiAgICBkaXNjYXJkKDEpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUeXBlTGlzdChpbnQgY291bnQpIHsKICAgIGRlYnVnRXZlbnQoIlR5cGVMaXN0Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5hbWVkTWl4aW5BcHBsaWNhdGlvbldpdGhDbGF1c2UoVG9rZW4gd2l0aEtleXdvcmQpIHsKICAgIGRlYnVnRXZlbnQoIk5hbWVkTWl4aW5BcHBsaWNhdGlvbldpdGhDbGF1c2UiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2xhc3NXaXRoQ2xhdXNlKFRva2VuIHdpdGhLZXl3b3JkKSB7CiAgICBkZWJ1Z0V2ZW50KCJDbGFzc1dpdGhDbGF1c2UiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2xhc3NOb1dpdGhDbGF1c2UoKSB7CiAgICBkZWJ1Z0V2ZW50KCJDbGFzc05vV2l0aENsYXVzZSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUeXBlQXJndW1lbnRzKGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlR5cGVBcmd1bWVudHMiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW52YWxpZFR5cGVBcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkludmFsaWRUeXBlQXJndW1lbnRzIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZpZWxkSW5pdGlhbGl6ZXIoVG9rZW4gYXNzaWdubWVudE9wZXJhdG9yLCBUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiRmllbGRJbml0aWFsaXplciIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb0ZpZWxkSW5pdGlhbGl6ZXIoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk5vRmllbGRJbml0aWFsaXplciIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb1R5cGVWYXJpYWJsZXMoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk5vVHlwZVZhcmlhYmxlcyIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGb3JtYWxQYXJhbWV0ZXJzKAogICAgICBpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuLCBNZW1iZXJLaW5kIGtpbmQpIHsKICAgIGRlYnVnRXZlbnQoIkZvcm1hbFBhcmFtZXRlcnMiKTsKICAgIGFzc2VydChjb3VudCA9PSAwKTsgLy8gQ291bnQgaXMgYWx3YXlzIDAgYXMgdGhlIGRpZXQgcGFyc2VyIHNraXBzIGZvcm1hbHMuCiAgICBpZiAoa2luZCAhPSBNZW1iZXJLaW5kLkdlbmVyYWxpemVkRnVuY3Rpb25UeXBlICYmCiAgICAgICAgaWRlbnRpY2FsKHBlZWsoKSwgIi0iKSAmJgogICAgICAgIGlkZW50aWNhbChiZWdpblRva2VuLm5leHQsIGVuZFRva2VuKSkgewogICAgICBwb3AoKTsKICAgICAgcHVzaCgidW5hcnktIik7CiAgICB9CiAgICBwdXNoKGJlZ2luVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb0Zvcm1hbFBhcmFtZXRlcnMoVG9rZW4gdG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgZGVidWdFdmVudCgiTm9Gb3JtYWxQYXJhbWV0ZXJzIik7CiAgICBpZiAoaWRlbnRpY2FsKHBlZWsoKSwgIi0iKSkgewogICAgICBwb3AoKTsKICAgICAgcHVzaCgidW5hcnktIik7CiAgICB9CiAgICBwdXNoKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRnVuY3Rpb25UeXBlKFRva2VuIGZ1bmN0aW9uVG9rZW4sIFRva2VuIHF1ZXN0aW9uTWFyaykgewogICAgZGVidWdFdmVudCgiRnVuY3Rpb25UeXBlIik7CiAgICBkaXNjYXJkKDEpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGdW5jdGlvblR5cGVBbGlhcygKICAgICAgVG9rZW4gdHlwZWRlZktleXdvcmQsIFRva2VuIGVxdWFscywgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkZ1bmN0aW9uVHlwZUFsaWFzIik7CgogICAgaWYgKGVxdWFscyA9PSBudWxsKSBwb3AoKTsgLy8gZW5kVG9rZW4KICAgIE9iamVjdCBuYW1lID0gcG9wKCk7CiAgICBUb2tlbiBtZXRhZGF0YSA9IHBvcCgpOwogICAgY2hlY2tFbXB0eSh0eXBlZGVmS2V5d29yZC5jaGFyT2Zmc2V0KTsKICAgIGlmIChuYW1lIGlzIFBhcnNlclJlY292ZXJ5KSByZXR1cm47CgogICAgVHlwZUFsaWFzQnVpbGRlciB0eXBlZGVmQnVpbGRlciA9IGxvb2t1cEJ1aWxkZXIodHlwZWRlZktleXdvcmQsIG51bGwsIG5hbWUpOwogICAgcGFyc2VNZXRhZGF0YSh0eXBlZGVmQnVpbGRlciwgbWV0YWRhdGEsIHR5cGVkZWZCdWlsZGVyLnR5cGVkZWYpOwogICAgaWYgKHR5cGVkZWZCdWlsZGVyIGlzIFR5cGVBbGlhc0J1aWxkZXIpIHsKICAgICAgVHlwZUJ1aWxkZXIgdHlwZSA9IHR5cGVkZWZCdWlsZGVyLnR5cGU7CiAgICAgIGlmICh0eXBlIGlzIEZ1bmN0aW9uVHlwZUJ1aWxkZXIpIHsKICAgICAgICBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+IGZvcm1hbHMgPSB0eXBlLmZvcm1hbHM7CiAgICAgICAgaWYgKGZvcm1hbHMgIT0gbnVsbCkgewogICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmb3JtYWxzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZm9ybWFsID0gZm9ybWFsc1tpXTsKICAgICAgICAgICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhID0gZm9ybWFsLm1ldGFkYXRhOwogICAgICAgICAgICBpZiAobWV0YWRhdGEgIT0gbnVsbCAmJiBtZXRhZGF0YS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgLy8gW3BhcnNlTWV0YWRhdGFdIGlzIHVzaW5nIFtQYXJzZXIucGFyc2VNZXRhZGF0YVN0YXJdIHVuZGVyIHRoZQogICAgICAgICAgICAgIC8vIGhvb2QsIHNvIHdlIG9ubHkgbmVlZCB0aGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBhbm5vdGF0aW9uLgogICAgICAgICAgICAgIFRva2VuIG1ldGFkYXRhVG9rZW4gPSB0b2tlbkZvck9mZnNldCgKICAgICAgICAgICAgICAgICAgdHlwZWRlZktleXdvcmQsIGVuZFRva2VuLCBtZXRhZGF0YVswXS5jaGFyT2Zmc2V0KTsKICAgICAgICAgICAgICBMaXN0PEV4cHJlc3Npb24+IGFubm90YXRpb25zID0KICAgICAgICAgICAgICAgICAgcGFyc2VNZXRhZGF0YSh0eXBlZGVmQnVpbGRlciwgbWV0YWRhdGFUb2tlbiwgbnVsbCk7CiAgICAgICAgICAgICAgaWYgKGZvcm1hbC5pc1Bvc2l0aW9uYWwpIHsKICAgICAgICAgICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyID0KICAgICAgICAgICAgICAgICAgICB0eXBlZGVmQnVpbGRlci50eXBlZGVmLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldOwogICAgICAgICAgICAgICAgZm9yIChFeHByZXNzaW9uIGFubm90YXRpb24gaW4gYW5ub3RhdGlvbnMpIHsKICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLmFkZEFubm90YXRpb24oYW5ub3RhdGlvbik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGZvciAoVmFyaWFibGVEZWNsYXJhdGlvbiBuYW1lZAogICAgICAgICAgICAgICAgICAgIGluIHR5cGVkZWZCdWlsZGVyLnR5cGVkZWYubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgICAgICAgICAgICAgIGlmIChuYW1lZC5uYW1lID09IGZvcm1hbC5uYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yIChFeHByZXNzaW9uIGFubm90YXRpb24gaW4gYW5ub3RhdGlvbnMpIHsKICAgICAgICAgICAgICAgICAgICAgIG5hbWVkLmFkZEFubm90YXRpb24oYW5ub3RhdGlvbik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYgKHR5cGVkZWZCdWlsZGVyICE9IG51bGwpIHsKICAgICAgdW5oYW5kbGVkKCIke3R5cGVkZWZCdWlsZGVyLmZ1bGxOYW1lRm9yRXJyb3JzfSIsICJlbmRGdW5jdGlvblR5cGVBbGlhcyIsCiAgICAgICAgICB0eXBlZGVmS2V5d29yZC5jaGFyT2Zmc2V0LCB1cmkpOwogICAgfQoKICAgIGNoZWNrRW1wdHkodHlwZWRlZktleXdvcmQuY2hhck9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENsYXNzRmllbGRzKFRva2VuIHN0YXRpY1Rva2VuLCBUb2tlbiBjb3ZhcmlhbnRUb2tlbiwgVG9rZW4gbGF0ZVRva2VuLAogICAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3QsIGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkZpZWxkcyIpOwogICAgYnVpbGRGaWVsZHMoY291bnQsIGJlZ2luVG9rZW4sIGZhbHNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQXN5bmNNb2RpZmllcihUb2tlbiBhc3luY1Rva2VuLCBUb2tlbiBzdGFydFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJBc3luY01vZGlmaWVyIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFRvcExldmVsTWV0aG9kKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGdldE9yU2V0LCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiVG9wTGV2ZWxNZXRob2QiKTsKICAgIFRva2VuIGJvZHlUb2tlbiA9IHBvcCgpOwogICAgT2JqZWN0IG5hbWUgPSBwb3AoKTsKICAgIFRva2VuIG1ldGFkYXRhID0gcG9wKCk7CiAgICBjaGVja0VtcHR5KGJlZ2luVG9rZW4uY2hhck9mZnNldCk7CiAgICBpZiAobmFtZSBpcyBQYXJzZXJSZWNvdmVyeSkgcmV0dXJuOwoKICAgIGZpbmFsIFN0YWNrTGlzdGVuZXIgbGlzdGVuZXIgPQogICAgICAgIGNyZWF0ZUZ1bmN0aW9uTGlzdGVuZXIobG9va3VwQnVpbGRlcihiZWdpblRva2VuLCBnZXRPclNldCwgbmFtZSkpOwogICAgYnVpbGRGdW5jdGlvbkJvZHkobGlzdGVuZXIsIGJvZHlUb2tlbiwgbWV0YWRhdGEsIE1lbWJlcktpbmQuVG9wTGV2ZWxNZXRob2QpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb0Z1bmN0aW9uQm9keShUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiTm9GdW5jdGlvbkJvZHkiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVG9wTGV2ZWxGaWVsZHMoCiAgICAgIFRva2VuIHN0YXRpY1Rva2VuLAogICAgICBUb2tlbiBjb3ZhcmlhbnRUb2tlbiwKICAgICAgVG9rZW4gbGF0ZVRva2VuLAogICAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3QsCiAgICAgIGludCBjb3VudCwKICAgICAgVG9rZW4gYmVnaW5Ub2tlbiwKICAgICAgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlRvcExldmVsRmllbGRzIik7CiAgICBidWlsZEZpZWxkcyhjb3VudCwgYmVnaW5Ub2tlbiwgdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVZvaWRLZXl3b3JkKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJWb2lkS2V5d29yZCIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb0luaXRpYWxpemVycygpIHsKICAgIGRlYnVnRXZlbnQoIk5vSW5pdGlhbGl6ZXJzIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEluaXRpYWxpemVycyhpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJJbml0aWFsaXplcnMiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlUXVhbGlmaWVkKFRva2VuIHBlcmlvZCkgewogICAgYXNzZXJ0KGNoZWNrU3RhdGUocGVyaW9kLCBbCiAgICAgIC8qc3VmZml4Ki8gVmFsdWVLaW5kLk5hbWVPclBhcnNlclJlY292ZXJ5LAogICAgICAvKnByZWZpeCovIHVuaW9uT2ZLaW5kcyhbCiAgICAgICAgVmFsdWVLaW5kLk5hbWUsCiAgICAgICAgVmFsdWVLaW5kLkdlbmVyYXRvciwKICAgICAgICBWYWx1ZUtpbmQuUGFyc2VyUmVjb3ZlcnksCiAgICAgICAgVmFsdWVLaW5kLlF1YWxpZmllZE5hbWUsCiAgICAgIF0pLAogICAgXSkpOwogICAgZGVidWdFdmVudCgiaGFuZGxlUXVhbGlmaWVkIik7CiAgICBPYmplY3Qgc3VmZml4ID0gcG9wKCk7CiAgICBPYmplY3QgcHJlZml4ID0gcG9wKCk7CiAgICBpZiAocHJlZml4IGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIHB1c2gocHJlZml4KTsKICAgIH0gZWxzZSBpZiAoc3VmZml4IGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIHB1c2goc3VmZml4KTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChpZGVudGljYWwoc3VmZml4LCBwZXJpb2QubmV4dC5sZXhlbWUpKTsKICAgICAgcHVzaChuZXcgUXVhbGlmaWVkTmFtZShwcmVmaXgsIHBlcmlvZC5uZXh0KSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZExpYnJhcnlOYW1lKFRva2VuIGxpYnJhcnlLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGRlYnVnRXZlbnQoImVuZExpYnJhcnlOYW1lIik7CiAgICBwb3AoKTsgLy8gTmFtZS4KICAgIHBvcCgpOyAvLyBBbm5vdGF0aW9ucy4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5MaXRlcmFsU3RyaW5nKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkxpdGVyYWxTdHJpbmciKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3RyaW5nUGFydChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiU3RyaW5nUGFydCIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRMaXRlcmFsU3RyaW5nKGludCBpbnRlcnBvbGF0aW9uQ291bnQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRMaXRlcmFsU3RyaW5nIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5hdGl2ZUNsYXVzZShUb2tlbiBuYXRpdmVUb2tlbiwgYm9vbCBoYXNOYW1lKSB7CiAgICBkZWJ1Z0V2ZW50KCJOYXRpdmVDbGF1c2UiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU2NyaXB0KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJTY3JpcHQiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3RyaW5nSnV4dGFwb3NpdGlvbihpbnQgbGl0ZXJhbENvdW50KSB7CiAgICBkZWJ1Z0V2ZW50KCJTdHJpbmdKdXh0YXBvc2l0aW9uIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZURvdHRlZE5hbWUoaW50IGNvdW50LCBUb2tlbiBmaXJzdElkZW50aWZpZXIpIHsKICAgIGRlYnVnRXZlbnQoIkRvdHRlZE5hbWUiKTsKICAgIGRpc2NhcmQoY291bnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDb25kaXRpb25hbFVyaShUb2tlbiBpZktleXdvcmQsIFRva2VuIGxlZnRQYXJlbiwgVG9rZW4gZXF1YWxTaWduKSB7CiAgICBkZWJ1Z0V2ZW50KCJDb25kaXRpb25hbFVyaSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDb25kaXRpb25hbFVyaXMoaW50IGNvdW50KSB7CiAgICBkZWJ1Z0V2ZW50KCJDb25kaXRpb25hbFVyaXMiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlT3BlcmF0b3JOYW1lKFRva2VuIG9wZXJhdG9yS2V5d29yZCwgVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk9wZXJhdG9yTmFtZSIpOwogICAgcHVzaCh0b2tlbi5zdHJpbmdWYWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUludmFsaWRPcGVyYXRvck5hbWUoVG9rZW4gb3BlcmF0b3JLZXl3b3JkLCBUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiSW52YWxpZE9wZXJhdG9yTmFtZSIpOwogICAgcHVzaCgnaW52YWxpZCcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJZGVudGlmaWVyTGlzdChpbnQgY291bnQpIHsKICAgIGRlYnVnRXZlbnQoIklkZW50aWZpZXJMaXN0Iik7CiAgICBkaXNjYXJkKGNvdW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kU2hvdyhUb2tlbiBzaG93S2V5d29yZCkgewogICAgZGVidWdFdmVudCgiU2hvdyIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRIaWRlKFRva2VuIGhpZGVLZXl3b3JkKSB7CiAgICBkZWJ1Z0V2ZW50KCJIaWRlIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENvbWJpbmF0b3JzKGludCBjb3VudCkgewogICAgZGVidWdFdmVudCgiQ29tYmluYXRvcnMiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW1wb3J0UHJlZml4KFRva2VuIGRlZmVycmVkS2V5d29yZCwgVG9rZW4gYXNLZXl3b3JkKSB7CiAgICBkZWJ1Z0V2ZW50KCJJbXBvcnRQcmVmaXgiKTsKICAgIHB1c2hJZk51bGwoYXNLZXl3b3JkLCBOdWxsVmFsdWUuUHJlZml4KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSW1wb3J0KFRva2VuIGltcG9ydEtleXdvcmQsIFRva2VuIHNlbWljb2xvbikgewogICAgZGVidWdFdmVudCgiSW1wb3J0Iik7CiAgICBPYmplY3QgbmFtZSA9IHBvcChOdWxsVmFsdWUuUHJlZml4KTsKCiAgICBUb2tlbiBtZXRhZGF0YSA9IHBvcCgpOwogICAgY2hlY2tFbXB0eShpbXBvcnRLZXl3b3JkLmNoYXJPZmZzZXQpOwogICAgaWYgKG5hbWUgaXMgUGFyc2VyUmVjb3ZlcnkpIHJldHVybjsKCiAgICAvLyBOYXRpdmUgaW1wb3J0cyBtdXN0IGJlIHNraXBwZWQgYmVjYXVzZSB0aGV5IGFyZW4ndCBhc3NpZ25lZCBjb3JyZXNwb25kaW5nCiAgICAvLyBMaWJyYXJ5RGVwZW5kZW5jeSBub2Rlcy4KICAgIFRva2VuIGltcG9ydFVyaVRva2VuID0gaW1wb3J0S2V5d29yZC5uZXh0OwogICAgU3RyaW5nIGltcG9ydFVyaSA9CiAgICAgICAgdW5lc2NhcGVTdHJpbmcoaW1wb3J0VXJpVG9rZW4ubGV4ZW1lLCBpbXBvcnRVcmlUb2tlbiwgdGhpcyk7CiAgICBpZiAoaW1wb3J0VXJpLnN0YXJ0c1dpdGgoImRhcnQtZXh0OiIpKSByZXR1cm47CgogICAgTGlicmFyeSBsaWJyYXJ5Tm9kZSA9IGxpYnJhcnlCdWlsZGVyLmxpYnJhcnk7CiAgICBMaWJyYXJ5RGVwZW5kZW5jeSBkZXBlbmRlbmN5ID0KICAgICAgICBsaWJyYXJ5Tm9kZS5kZXBlbmRlbmNpZXNbaW1wb3J0RXhwb3J0RGlyZWN0aXZlSW5kZXgrK107CiAgICBwYXJzZU1ldGFkYXRhKGxpYnJhcnlCdWlsZGVyLCBtZXRhZGF0YSwgZGVwZW5kZW5jeSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVJlY292ZXJJbXBvcnQoVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBwb3AoTnVsbFZhbHVlLlByZWZpeCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEV4cG9ydChUb2tlbiBleHBvcnRLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGRlYnVnRXZlbnQoIkV4cG9ydCIpOwoKICAgIFRva2VuIG1ldGFkYXRhID0gcG9wKCk7CiAgICBMaWJyYXJ5IGxpYnJhcnlOb2RlID0gbGlicmFyeUJ1aWxkZXIubGlicmFyeTsKICAgIExpYnJhcnlEZXBlbmRlbmN5IGRlcGVuZGVuY3kgPQogICAgICAgIGxpYnJhcnlOb2RlLmRlcGVuZGVuY2llc1tpbXBvcnRFeHBvcnREaXJlY3RpdmVJbmRleCsrXTsKICAgIHBhcnNlTWV0YWRhdGEobGlicmFyeUJ1aWxkZXIsIG1ldGFkYXRhLCBkZXBlbmRlbmN5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kUGFydChUb2tlbiBwYXJ0S2V5d29yZCwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBkZWJ1Z0V2ZW50KCJQYXJ0Iik7CgogICAgVG9rZW4gbWV0YWRhdGEgPSBwb3AoKTsKICAgIExpYnJhcnkgbGlicmFyeU5vZGUgPSBsaWJyYXJ5QnVpbGRlci5saWJyYXJ5OwogICAgaWYgKGxpYnJhcnlOb2RlLnBhcnRzLmxlbmd0aCA+IHBhcnREaXJlY3RpdmVJbmRleCkgewogICAgICAvLyBJZiBwYXJ0RGlyZWN0aXZlSW5kZXggPj0gbGlicmFyeU5vZGUucGFydHMubGVuZ3RoIHdlIGFyZSBpbiBhIGNhc2Ugb2YKICAgICAgLy8gb24gcGFydCBoYXZpbmcgb3RoZXIgcGFydHMuIEFuIGVycm9yIGhhcyBhbHJlYWR5IGJlZW4gaXNzdWVkLgogICAgICAvLyBEb24ndCB0cnkgdG8gcGFyc2UgbWV0YWRhdGEgaW50byBvdGhlciBwYXJ0cyB0aGF0IGhhdmUgbm90aGluZyB0byBkbwogICAgICAvLyB3aXRoIHRoZSBvbmUgdGhpcyBrZXl3b3JkIGlzIHRhbGtpbmcgYWJvdXQuCiAgICAgIExpYnJhcnlQYXJ0IHBhcnQgPSBsaWJyYXJ5Tm9kZS5wYXJ0c1twYXJ0RGlyZWN0aXZlSW5kZXgrK107CiAgICAgIHBhcnNlTWV0YWRhdGEobGlicmFyeUJ1aWxkZXIsIG1ldGFkYXRhLCBwYXJ0KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5UeXBlVmFyaWFibGUoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luVHlwZVZhcmlhYmxlIik7CiAgICBkaXNjYXJkKDIpOyAvLyBOYW1lIGFuZCBtZXRhZGF0YS4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVHlwZVZhcmlhYmxlKFRva2VuIHRva2VuLCBpbnQgaW5kZXgsIFRva2VuIGV4dGVuZHNPclN1cGVyKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRUeXBlVmFyaWFibGUiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVHlwZVZhcmlhYmxlcyhUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiVHlwZVZhcmlhYmxlcyIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDb25zdHJ1Y3RvclJlZmVyZW5jZSgKICAgICAgVG9rZW4gc3RhcnQsIFRva2VuIHBlcmlvZEJlZm9yZU5hbWUsIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJDb25zdHJ1Y3RvclJlZmVyZW5jZSIpOwogICAgcG9wSWZOb3ROdWxsKHBlcmlvZEJlZm9yZU5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDbGFzc0ZhY3RvcnlNZXRob2QoCiAgICAgIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGZhY3RvcnlLZXl3b3JkLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiQ2xhc3NGYWN0b3J5TWV0aG9kIik7CiAgICBUb2tlbiBib2R5VG9rZW4gPSBwb3AoKTsKICAgIE9iamVjdCBuYW1lID0gcG9wKCk7CiAgICBUb2tlbiBtZXRhZGF0YSA9IHBvcCgpOwogICAgY2hlY2tFbXB0eShiZWdpblRva2VuLmNoYXJPZmZzZXQpOwogICAgaWYgKG5hbWUgaXMgUGFyc2VyUmVjb3ZlcnkgfHwgY3VycmVudENsYXNzSXNQYXJzZXJSZWNvdmVyeSkgcmV0dXJuOwoKICAgIEZ1bmN0aW9uQnVpbGRlciBidWlsZGVyID0gbG9va3VwQ29uc3RydWN0b3IoYmVnaW5Ub2tlbiwgbmFtZSk7CiAgICBpZiAoYm9keVRva2VuID09IG51bGwgfHwgb3B0aW9uYWwoIj0iLCBib2R5VG9rZW4uZW5kR3JvdXAubmV4dCkpIHsKICAgICAgYnVpbGRSZWRpcmVjdGluZ0ZhY3RvcnlNZXRob2QoCiAgICAgICAgICBib2R5VG9rZW4sIGJ1aWxkZXIsIE1lbWJlcktpbmQuRmFjdG9yeSwgbWV0YWRhdGEpOwogICAgfSBlbHNlIHsKICAgICAgYnVpbGRGdW5jdGlvbkJvZHkoY3JlYXRlRnVuY3Rpb25MaXN0ZW5lcihidWlsZGVyKSwgYm9keVRva2VuLCBtZXRhZGF0YSwKICAgICAgICAgIE1lbWJlcktpbmQuRmFjdG9yeSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlJlZGlyZWN0aW5nRmFjdG9yeUJvZHkiKTsKICAgIGRpc2NhcmQoMSk7IC8vIENvbnN0cnVjdG9yUmVmZXJlbmNlLgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOYXRpdmVGdW5jdGlvbkJvZHkoVG9rZW4gbmF0aXZlVG9rZW4sIFRva2VuIHNlbWljb2xvbikgewogICAgZGVidWdFdmVudCgiTmF0aXZlRnVuY3Rpb25Cb2R5Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keUlnbm9yZWQoVG9rZW4gbmF0aXZlVG9rZW4sIFRva2VuIHNlbWljb2xvbikgewogICAgZGVidWdFdmVudCgiTmF0aXZlRnVuY3Rpb25Cb2R5SWdub3JlZCIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOYXRpdmVGdW5jdGlvbkJvZHlTa2lwcGVkKFRva2VuIG5hdGl2ZVRva2VuLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGRlYnVnRXZlbnQoIk5hdGl2ZUZ1bmN0aW9uQm9keVNraXBwZWQiKTsKICAgIGlmICghZW5hYmxlTmF0aXZlKSB7CiAgICAgIHN1cGVyLmhhbmRsZVJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICBtZXNzYWdlRXhwZWN0ZWRCbG9ja1RvU2tpcCwgbmF0aXZlVG9rZW4sIG5hdGl2ZVRva2VuKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ2xhc3NNZXRob2QoVG9rZW4gZ2V0T3JTZXQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGJlZ2luUGFyYW0sCiAgICAgIFRva2VuIGJlZ2luSW5pdGlhbGl6ZXJzLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiTWV0aG9kIik7CiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogQ29uc2lkZXIgcmVtb3ZpbmcgdGhlIGJlZ2luUGFyYW0gcGFyYW1ldGVyCiAgICAvLyBhbmQgdXNpbmcgYm9keVRva2VuLCBidXQgcHVzaGluZyBhIE51bGxWYWx1ZSBvbiB0aGUgc3RhY2sKICAgIC8vIGluIGhhbmRsZU5vRm9ybWFsUGFyYW1ldGVycyByYXRoZXIgdGhhbiB0aGUgc3VwcGxpZWQgdG9rZW4uCiAgICBwb3AoKTsgLy8gYm9keVRva2VuCiAgICBPYmplY3QgbmFtZSA9IHBvcCgpOwogICAgVG9rZW4gbWV0YWRhdGEgPSBwb3AoKTsKICAgIGNoZWNrRW1wdHkoYmVnaW5Ub2tlbi5jaGFyT2Zmc2V0KTsKICAgIGlmIChuYW1lIGlzIFBhcnNlclJlY292ZXJ5IHx8IGN1cnJlbnRDbGFzc0lzUGFyc2VyUmVjb3ZlcnkpIHJldHVybjsKICAgIEZ1bmN0aW9uQnVpbGRlciBidWlsZGVyOwogICAgaWYgKG5hbWUgaXMgUXVhbGlmaWVkTmFtZSB8fAogICAgICAgIChnZXRPclNldCA9PSBudWxsICYmIG5hbWUgPT0gY3VycmVudENsYXNzPy5uYW1lKSkgewogICAgICBidWlsZGVyID0gbG9va3VwQ29uc3RydWN0b3IoYmVnaW5Ub2tlbiwgbmFtZSk7CiAgICB9IGVsc2UgewogICAgICBidWlsZGVyID0gbG9va3VwQnVpbGRlcihiZWdpblRva2VuLCBnZXRPclNldCwgbmFtZSk7CiAgICB9CiAgICBidWlsZEZ1bmN0aW9uQm9keSgKICAgICAgICBjcmVhdGVGdW5jdGlvbkxpc3RlbmVyKGJ1aWxkZXIpLAogICAgICAgIGJlZ2luUGFyYW0sCiAgICAgICAgbWV0YWRhdGEsCiAgICAgICAgYnVpbGRlci5pc1N0YXRpYwogICAgICAgICAgICA/IE1lbWJlcktpbmQuU3RhdGljTWV0aG9kCiAgICAgICAgICAgIDogTWVtYmVyS2luZC5Ob25TdGF0aWNNZXRob2QpOwogIH0KCiAgU3RhY2tMaXN0ZW5lciBjcmVhdGVMaXN0ZW5lcihNb2RpZmllckJ1aWxkZXIgYnVpbGRlciwgU2NvcGUgbWVtYmVyU2NvcGUsCiAgICAgIHtib29sIGlzRGVjbGFyYXRpb25JbnN0YW5jZU1lbWJlciwKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBleHRlbnNpb25UaGlzLAogICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IGV4dGVuc2lvblR5cGVQYXJhbWV0ZXJzLAogICAgICBTY29wZSBmb3JtYWxQYXJhbWV0ZXJTY29wZX0pIHsKICAgIC8vIE5vdGU6IHdlIHNldCB0aGlzVHlwZSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIGEgc3RhdGljCiAgICAvLyBtZW1iZXIsIHNpbmNlIHRoYXQgcHJvdmlkZXMgYmV0dGVyIGVycm9yIHJlY292ZXJ5LgogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUHJvdmlkZSBhIGR1bW15IHRoaXMgb24gc3RhdGljIGV4dGVuc2lvbiBtZXRob2RzCiAgICAvLyBmb3IgYmV0dGVyIGVycm9yIHJlY292ZXJ5PwogICAgSW50ZXJmYWNlVHlwZSB0aGlzVHlwZSA9CiAgICAgICAgZXh0ZW5zaW9uVGhpcyA9PSBudWxsID8gY3VycmVudERlY2xhcmF0aW9uPy50aGlzVHlwZSA6IG51bGw7CiAgICBUeXBlSW5mZXJyZXIgdHlwZUluZmVycmVyID0gdHlwZUluZmVyZW5jZUVuZ2luZT8uY3JlYXRlTG9jYWxUeXBlSW5mZXJyZXIoCiAgICAgICAgdXJpLCB0aGlzVHlwZSwgbGlicmFyeUJ1aWxkZXIpOwogICAgQ29uc3RhbnRDb250ZXh0IGNvbnN0YW50Q29udGV4dCA9IGJ1aWxkZXIuaXNDb25zdHJ1Y3RvciAmJiBidWlsZGVyLmlzQ29uc3QKICAgICAgICA/IENvbnN0YW50Q29udGV4dC5pbmZlcnJlZAogICAgICAgIDogQ29uc3RhbnRDb250ZXh0Lm5vbmU7CiAgICByZXR1cm4gY3JlYXRlTGlzdGVuZXJJbnRlcm5hbCgKICAgICAgICBidWlsZGVyLAogICAgICAgIG1lbWJlclNjb3BlLAogICAgICAgIGZvcm1hbFBhcmFtZXRlclNjb3BlLAogICAgICAgIGlzRGVjbGFyYXRpb25JbnN0YW5jZU1lbWJlciwKICAgICAgICBleHRlbnNpb25UaGlzLAogICAgICAgIGV4dGVuc2lvblR5cGVQYXJhbWV0ZXJzLAogICAgICAgIHR5cGVJbmZlcnJlciwKICAgICAgICBjb25zdGFudENvbnRleHQpOwogIH0KCiAgU3RhY2tMaXN0ZW5lciBjcmVhdGVMaXN0ZW5lckludGVybmFsKAogICAgICBNb2RpZmllckJ1aWxkZXIgYnVpbGRlciwKICAgICAgU2NvcGUgbWVtYmVyU2NvcGUsCiAgICAgIFNjb3BlIGZvcm1hbFBhcmFtZXRlclNjb3BlLAogICAgICBib29sIGlzRGVjbGFyYXRpb25JbnN0YW5jZU1lbWJlciwKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBleHRlbnNpb25UaGlzLAogICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IGV4dGVuc2lvblR5cGVQYXJhbWV0ZXJzLAogICAgICBUeXBlSW5mZXJyZXIgdHlwZUluZmVycmVyLAogICAgICBDb25zdGFudENvbnRleHQgY29uc3RhbnRDb250ZXh0KSB7CiAgICByZXR1cm4gbmV3IEJvZHlCdWlsZGVyKAogICAgICAgIGxpYnJhcnlCdWlsZGVyOiBsaWJyYXJ5QnVpbGRlciwKICAgICAgICBtZW1iZXI6IGJ1aWxkZXIsCiAgICAgICAgZW5jbG9zaW5nU2NvcGU6IG1lbWJlclNjb3BlLAogICAgICAgIGZvcm1hbFBhcmFtZXRlclNjb3BlOiBmb3JtYWxQYXJhbWV0ZXJTY29wZSwKICAgICAgICBoaWVyYXJjaHk6IGhpZXJhcmNoeSwKICAgICAgICBjb3JlVHlwZXM6IGNvcmVUeXBlcywKICAgICAgICBkZWNsYXJhdGlvbkJ1aWxkZXI6IGN1cnJlbnREZWNsYXJhdGlvbiwKICAgICAgICBpc0RlY2xhcmF0aW9uSW5zdGFuY2VNZW1iZXI6IGlzRGVjbGFyYXRpb25JbnN0YW5jZU1lbWJlciwKICAgICAgICBleHRlbnNpb25UaGlzOiBleHRlbnNpb25UaGlzLAogICAgICAgIGV4dGVuc2lvblR5cGVQYXJhbWV0ZXJzOiBleHRlbnNpb25UeXBlUGFyYW1ldGVycywKICAgICAgICB1cmk6IHVyaSwKICAgICAgICB0eXBlSW5mZXJyZXI6IHR5cGVJbmZlcnJlcikKICAgICAgLi5jb25zdGFudENvbnRleHQgPSBjb25zdGFudENvbnRleHQ7CiAgfQoKICBTdGFja0xpc3RlbmVyIGNyZWF0ZUZ1bmN0aW9uTGlzdGVuZXIoRnVuY3Rpb25CdWlsZGVyIGJ1aWxkZXIpIHsKICAgIGZpbmFsIFNjb3BlIHR5cGVQYXJhbWV0ZXJTY29wZSA9CiAgICAgICAgYnVpbGRlci5jb21wdXRlVHlwZVBhcmFtZXRlclNjb3BlKG1lbWJlclNjb3BlKTsKICAgIGZpbmFsIFNjb3BlIGZvcm1hbFBhcmFtZXRlclNjb3BlID0KICAgICAgICBidWlsZGVyLmNvbXB1dGVGb3JtYWxQYXJhbWV0ZXJTY29wZSh0eXBlUGFyYW1ldGVyU2NvcGUpOwogICAgYXNzZXJ0KHR5cGVQYXJhbWV0ZXJTY29wZSAhPSBudWxsKTsKICAgIGFzc2VydChmb3JtYWxQYXJhbWV0ZXJTY29wZSAhPSBudWxsKTsKICAgIHJldHVybiBjcmVhdGVMaXN0ZW5lcihidWlsZGVyLCB0eXBlUGFyYW1ldGVyU2NvcGUsCiAgICAgICAgaXNEZWNsYXJhdGlvbkluc3RhbmNlTWVtYmVyOiBidWlsZGVyLmlzRGVjbGFyYXRpb25JbnN0YW5jZU1lbWJlciwKICAgICAgICBleHRlbnNpb25UaGlzOiBidWlsZGVyLmV4dGVuc2lvblRoaXMsCiAgICAgICAgZXh0ZW5zaW9uVHlwZVBhcmFtZXRlcnM6IGJ1aWxkZXIuZXh0ZW5zaW9uVHlwZVBhcmFtZXRlcnMsCiAgICAgICAgZm9ybWFsUGFyYW1ldGVyU2NvcGU6IGZvcm1hbFBhcmFtZXRlclNjb3BlKTsKICB9CgogIHZvaWQgYnVpbGRSZWRpcmVjdGluZ0ZhY3RvcnlNZXRob2QoCiAgICAgIFRva2VuIHRva2VuLCBGdW5jdGlvbkJ1aWxkZXIgYnVpbGRlciwgTWVtYmVyS2luZCBraW5kLCBUb2tlbiBtZXRhZGF0YSkgewogICAgZmluYWwgU3RhY2tMaXN0ZW5lciBsaXN0ZW5lciA9IGNyZWF0ZUZ1bmN0aW9uTGlzdGVuZXIoYnVpbGRlcik7CiAgICB0cnkgewogICAgICBQYXJzZXIgcGFyc2VyID0gbmV3IFBhcnNlcihsaXN0ZW5lcik7CiAgICAgIGlmIChtZXRhZGF0YSAhPSBudWxsKSB7CiAgICAgICAgcGFyc2VyLnBhcnNlTWV0YWRhdGFTdGFyKHBhcnNlci5zeW50aGV0aWNQcmV2aW91c1Rva2VuKG1ldGFkYXRhKSk7CiAgICAgICAgbGlzdGVuZXIucG9wKCk7IC8vIFBvcHMgbWV0YWRhdGEgY29uc3RhbnRzLgogICAgICB9CgogICAgICB0b2tlbiA9IHBhcnNlci5wYXJzZUZvcm1hbFBhcmFtZXRlcnNPcHQoCiAgICAgICAgICBwYXJzZXIuc3ludGhldGljUHJldmlvdXNUb2tlbih0b2tlbiksIE1lbWJlcktpbmQuRmFjdG9yeSk7CiAgICAgIGxpc3RlbmVyLnBvcCgpOyAvLyBQb3BzIGZvcm1hbCBwYXJhbWV0ZXJzLgogICAgICBsaXN0ZW5lci5jaGVja0VtcHR5KHRva2VuLm5leHQuY2hhck9mZnNldCk7CiAgICB9IG9uIERlYnVnQWJvcnQgewogICAgICByZXRocm93OwogICAgfSBjYXRjaCAoZSwgcykgewogICAgICB0aHJvdyBuZXcgQ3Jhc2godXJpLCB0b2tlbi5jaGFyT2Zmc2V0LCBlLCBzKTsKICAgIH0KICB9CgogIHZvaWQgYnVpbGRGaWVsZHMoaW50IGNvdW50LCBUb2tlbiB0b2tlbiwgYm9vbCBpc1RvcExldmVsKSB7CiAgICBMaXN0PFN0cmluZz4gbmFtZXMgPSBjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxTdHJpbmc+KCkucG9wKHN0YWNrLCBjb3VudCk7CiAgICBUb2tlbiBtZXRhZGF0YSA9IHBvcCgpOwogICAgY2hlY2tFbXB0eSh0b2tlbi5jaGFyT2Zmc2V0KTsKICAgIGlmIChuYW1lcyA9PSBudWxsIHx8IGN1cnJlbnRDbGFzc0lzUGFyc2VyUmVjb3ZlcnkpIHJldHVybjsKCiAgICBCdWlsZGVyIGRlY2xhcmF0aW9uID0gbG9va3VwQnVpbGRlcih0b2tlbiwgbnVsbCwgbmFtZXMuZmlyc3QpOwogICAgLy8gVE9ETyhwYXVsYmVycnkpOiBkb24ndCByZS1wYXJzZSB0aGUgZmllbGQgaWYgd2UndmUgYWxyZWFkeSBwYXJzZWQgaXQKICAgIC8vIGZvciB0eXBlIGluZmVyZW5jZS4KICAgIHBhcnNlRmllbGRzKAogICAgICAgIGNyZWF0ZUxpc3RlbmVyKGRlY2xhcmF0aW9uLCBtZW1iZXJTY29wZSwKICAgICAgICAgICAgaXNEZWNsYXJhdGlvbkluc3RhbmNlTWVtYmVyOgogICAgICAgICAgICAgICAgZGVjbGFyYXRpb24uaXNEZWNsYXJhdGlvbkluc3RhbmNlTWVtYmVyKSwKICAgICAgICB0b2tlbiwKICAgICAgICBtZXRhZGF0YSwKICAgICAgICBpc1RvcExldmVsKTsKICAgIGNoZWNrRW1wdHkodG9rZW4uY2hhck9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUludmFsaWRNZW1iZXIoVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkludmFsaWRNZW1iZXIiKTsKICAgIHBvcCgpOyAvLyBtZXRhZGF0YSBzdGFyCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZE1lbWJlcigpIHsKICAgIGRlYnVnRXZlbnQoIk1lbWJlciIpOwogICAgY2hlY2tFbXB0eSgtMSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEFzc2VydChUb2tlbiBhc3NlcnRLZXl3b3JkLCBBc3NlcnQga2luZCwgVG9rZW4gbGVmdFBhcmVudGhlc2lzLAogICAgICBUb2tlbiBjb21tYVRva2VuLCBUb2tlbiBzZW1pY29sb25Ub2tlbikgewogICAgZGVidWdFdmVudCgiQXNzZXJ0Iik7CiAgICAvLyBEbyBub3RoaW5nCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ2xhc3NPck1peGluQm9keShEZWNsYXJhdGlvbktpbmQga2luZCwgVG9rZW4gdG9rZW4pIHsKICAgIGFzc2VydChjaGVja1N0YXRlKHRva2VuLCBbCiAgICAgIFZhbHVlS2luZC5Ub2tlbiwKICAgICAgVmFsdWVLaW5kLk5hbWVPclBhcnNlclJlY292ZXJ5LAogICAgICBWYWx1ZUtpbmQuVG9rZW5Pck51bGwKICAgIF0pKTsKICAgIGRlYnVnRXZlbnQoImJlZ2luQ2xhc3NPck1peGluQm9keSIpOwogICAgVG9rZW4gYmVnaW5Ub2tlbiA9IHBvcCgpOwogICAgT2JqZWN0IG5hbWUgPSBwb3AoKTsKICAgIHBvcCgpOyAvLyBBbm5vdGF0aW9uIGJlZ2luIHRva2VuLgogICAgYXNzZXJ0KGN1cnJlbnREZWNsYXJhdGlvbiA9PSBudWxsKTsKICAgIGFzc2VydChtZW1iZXJTY29wZSA9PSBsaWJyYXJ5QnVpbGRlci5zY29wZSk7CiAgICBpZiAobmFtZSBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBjdXJyZW50Q2xhc3NJc1BhcnNlclJlY292ZXJ5ID0gdHJ1ZTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY3VycmVudERlY2xhcmF0aW9uID0gbG9va3VwQnVpbGRlcihiZWdpblRva2VuLCBudWxsLCBuYW1lKTsKICAgIG1lbWJlclNjb3BlID0gY3VycmVudERlY2xhcmF0aW9uLnNjb3BlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDbGFzc09yTWl4aW5Cb2R5KAogICAgICBEZWNsYXJhdGlvbktpbmQga2luZCwgaW50IG1lbWJlckNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiQ2xhc3NPck1peGluQm9keSIpOwogICAgY3VycmVudERlY2xhcmF0aW9uID0gbnVsbDsKICAgIGN1cnJlbnRDbGFzc0lzUGFyc2VyUmVjb3ZlcnkgPSBmYWxzZTsKICAgIG1lbWJlclNjb3BlID0gbGlicmFyeUJ1aWxkZXIuc2NvcGU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ2xhc3NEZWNsYXJhdGlvbihUb2tlbiBiZWdpbiwgVG9rZW4gYWJzdHJhY3RUb2tlbiwgVG9rZW4gbmFtZSkgewogICAgZGVidWdFdmVudCgiYmVnaW5DbGFzc0RlY2xhcmF0aW9uIik7CiAgICBwdXNoKGJlZ2luKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ2xhc3NEZWNsYXJhdGlvbihUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiZW5kQ2xhc3NEZWNsYXJhdGlvbiIpOwogICAgY2hlY2tFbXB0eShiZWdpblRva2VuLmNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbk1peGluRGVjbGFyYXRpb24oVG9rZW4gbWl4aW5LZXl3b3JkLCBUb2tlbiBuYW1lKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbk1peGluRGVjbGFyYXRpb24iKTsKICAgIHB1c2gobWl4aW5LZXl3b3JkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWl4aW5EZWNsYXJhdGlvbihUb2tlbiBtaXhpbktleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRNaXhpbkRlY2xhcmF0aW9uIik7CiAgICBjaGVja0VtcHR5KG1peGluS2V5d29yZC5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5FeHRlbnNpb25EZWNsYXJhdGlvbihUb2tlbiBleHRlbnNpb25LZXl3b3JkLCBUb2tlbiBuYW1lVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luRXh0ZW5zaW9uRGVjbGFyYXRpb24iKTsKICAgIFN0cmluZyBuYW1lID0gbmFtZVRva2VuPy5sZXhlbWUgPz8KICAgICAgICAvLyBTeW50aGVzaXplZCBuYW1lIHVzZWQgaW50ZXJuYWxseS4KICAgICAgICAnX2V4dGVuc2lvbiMke3VubmFtZWRFeHRlbnNpb25Db3VudGVyKyt9JzsKICAgIHB1c2gobmFtZSk7CiAgICBwdXNoKGV4dGVuc2lvbktleXdvcmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRFeHRlbnNpb25EZWNsYXJhdGlvbigKICAgICAgVG9rZW4gZXh0ZW5zaW9uS2V5d29yZCwgVG9rZW4gb25LZXl3b3JkLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiZW5kRXh0ZW5zaW9uRGVjbGFyYXRpb24iKTsKICAgIGNoZWNrRW1wdHkoZXh0ZW5zaW9uS2V5d29yZC5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRW51bShUb2tlbiBlbnVtS2V5d29yZCwgVG9rZW4gbGVmdEJyYWNlLCBpbnQgY291bnQpIHsKICAgIGRlYnVnRXZlbnQoIkVudW0iKTsKICAgIGNvbnN0IEZpeGVkTnVsbGFibGVMaXN0PE9iamVjdD4oKS5wb3Aoc3RhY2ssIGNvdW50ICogMik7CiAgICBwb3AoKTsgLy8gTmFtZS4KICAgIHBvcCgpOyAvLyBBbm5vdGF0aW9ucyBiZWdpbiB0b2tlbi4KICAgIGNoZWNrRW1wdHkoZW51bUtleXdvcmQuY2hhck9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZE5hbWVkTWl4aW5BcHBsaWNhdGlvbihUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBjbGFzc0tleXdvcmQsCiAgICAgIFRva2VuIGVxdWFscywgVG9rZW4gaW1wbGVtZW50c0tleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJOYW1lZE1peGluQXBwbGljYXRpb24iKTsKCiAgICBwb3AoKTsgLy8gTmFtZS4KICAgIHBvcCgpOyAvLyBBbm5vdGF0aW9ucyBiZWdpbiB0b2tlbi4KICAgIGNoZWNrRW1wdHkoYmVnaW5Ub2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIEFzeW5jTWFya2VyIGdldEFzeW5jTWFya2VyKFN0YWNrTGlzdGVuZXIgbGlzdGVuZXIpID0+IGxpc3RlbmVyLnBvcCgpOwoKICAvLy8gSW52b2tlcyB0aGUgbGlzdGVuZXIncyBbZmluaXNoRnVuY3Rpb25dIG1ldGhvZC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIHNlcGFyYXRlIG1ldGhvZCBzbyB0aGF0IGl0IG1heSBiZSBvdmVycmlkZGVuIGJ5IGEgZGVyaXZlZCBjbGFzcwogIC8vLyBpZiBtb3JlIGNvbXB1dGF0aW9uIG11c3QgYmUgZG9uZSBiZWZvcmUgZmluaXNoaW5nIHRoZSBmdW5jdGlvbi4KICB2b2lkIGxpc3RlbmVyRmluaXNoRnVuY3Rpb24oCiAgICAgIFN0YWNrTGlzdGVuZXIgbGlzdGVuZXIsCiAgICAgIFRva2VuIHRva2VuLAogICAgICBNZW1iZXJLaW5kIGtpbmQsCiAgICAgIGR5bmFtaWMgZm9ybWFscywKICAgICAgQXN5bmNNYXJrZXIgYXN5bmNNb2RpZmllciwKICAgICAgZHluYW1pYyBib2R5KSB7CiAgICBsaXN0ZW5lci5maW5pc2hGdW5jdGlvbihmb3JtYWxzLCBhc3luY01vZGlmaWVyLCBib2R5KTsKICB9CgogIC8vLyBJbnZva2VzIHRoZSBsaXN0ZW5lcidzIFtmaW5pc2hGaWVsZHNdIG1ldGhvZC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIHNlcGFyYXRlIG1ldGhvZCBzbyB0aGF0IGl0IG1heSBiZSBvdmVycmlkZGVuIGJ5IGEgZGVyaXZlZCBjbGFzcwogIC8vLyBpZiBtb3JlIGNvbXB1dGF0aW9uIG11c3QgYmUgZG9uZSBiZWZvcmUgZmluaXNoaW5nIHRoZSBmdW5jdGlvbi4KICB2b2lkIGxpc3RlbmVyRmluaXNoRmllbGRzKFN0YWNrTGlzdGVuZXIgbGlzdGVuZXIsIFRva2VuIHN0YXJ0VG9rZW4sCiAgICAgIFRva2VuIG1ldGFkYXRhLCBib29sIGlzVG9wTGV2ZWwpIHsKICAgIGxpc3RlbmVyLmZpbmlzaEZpZWxkcygpOwogIH0KCiAgdm9pZCBidWlsZEZ1bmN0aW9uQm9keShTdGFja0xpc3RlbmVyIGxpc3RlbmVyLCBUb2tlbiBzdGFydFRva2VuLAogICAgICBUb2tlbiBtZXRhZGF0YSwgTWVtYmVyS2luZCBraW5kKSB7CiAgICBUb2tlbiB0b2tlbiA9IHN0YXJ0VG9rZW47CiAgICB0cnkgewogICAgICBQYXJzZXIgcGFyc2VyID0gbmV3IFBhcnNlcihsaXN0ZW5lcik7CiAgICAgIGlmIChtZXRhZGF0YSAhPSBudWxsKSB7CiAgICAgICAgcGFyc2VyLnBhcnNlTWV0YWRhdGFTdGFyKHBhcnNlci5zeW50aGV0aWNQcmV2aW91c1Rva2VuKG1ldGFkYXRhKSk7CiAgICAgICAgbGlzdGVuZXIucG9wKCk7IC8vIEFubm90YXRpb25zLgogICAgICB9CiAgICAgIHRva2VuID0gcGFyc2VyLnBhcnNlRm9ybWFsUGFyYW1ldGVyc09wdCgKICAgICAgICAgIHBhcnNlci5zeW50aGV0aWNQcmV2aW91c1Rva2VuKHRva2VuKSwga2luZCk7CiAgICAgIE9iamVjdCBmb3JtYWxzID0gbGlzdGVuZXIucG9wKCk7CiAgICAgIGxpc3RlbmVyLmNoZWNrRW1wdHkodG9rZW4ubmV4dC5jaGFyT2Zmc2V0KTsKICAgICAgdG9rZW4gPSBwYXJzZXIucGFyc2VJbml0aWFsaXplcnNPcHQodG9rZW4pOwogICAgICB0b2tlbiA9IHBhcnNlci5wYXJzZUFzeW5jTW9kaWZpZXJPcHQodG9rZW4pOwogICAgICBBc3luY01hcmtlciBhc3luY01vZGlmaWVyID0gZ2V0QXN5bmNNYXJrZXIobGlzdGVuZXIpID8/IEFzeW5jTWFya2VyLlN5bmM7CiAgICAgIGJvb2wgaXNFeHByZXNzaW9uID0gZmFsc2U7CiAgICAgIGJvb2wgYWxsb3dBYnN0cmFjdCA9IGFzeW5jTW9kaWZpZXIgPT0gQXN5bmNNYXJrZXIuU3luYzsKICAgICAgcGFyc2VyLnBhcnNlRnVuY3Rpb25Cb2R5KHRva2VuLCBpc0V4cHJlc3Npb24sIGFsbG93QWJzdHJhY3QpOwogICAgICBPYmplY3QgYm9keSA9IGxpc3RlbmVyLnBvcCgpOwogICAgICBsaXN0ZW5lci5jaGVja0VtcHR5KHRva2VuLmNoYXJPZmZzZXQpOwogICAgICBsaXN0ZW5lckZpbmlzaEZ1bmN0aW9uKAogICAgICAgICAgbGlzdGVuZXIsIHN0YXJ0VG9rZW4sIGtpbmQsIGZvcm1hbHMsIGFzeW5jTW9kaWZpZXIsIGJvZHkpOwogICAgfSBvbiBEZWJ1Z0Fib3J0IHsKICAgICAgcmV0aHJvdzsKICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgdGhyb3cgbmV3IENyYXNoKHVyaSwgdG9rZW4uY2hhck9mZnNldCwgZSwgcyk7CiAgICB9CiAgfQoKICB2b2lkIHBhcnNlRmllbGRzKFN0YWNrTGlzdGVuZXIgbGlzdGVuZXIsIFRva2VuIHN0YXJ0VG9rZW4sIFRva2VuIG1ldGFkYXRhLAogICAgICBib29sIGlzVG9wTGV2ZWwpIHsKICAgIFRva2VuIHRva2VuID0gc3RhcnRUb2tlbjsKICAgIFBhcnNlciBwYXJzZXIgPSBuZXcgUGFyc2VyKGxpc3RlbmVyKTsKICAgIGlmIChpc1RvcExldmVsKSB7CiAgICAgIHRva2VuID0gcGFyc2VyLnBhcnNlVG9wTGV2ZWxNZW1iZXIobWV0YWRhdGEgPz8gdG9rZW4pOwogICAgfSBlbHNlIHsKICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IGRpc2FtYmlndWF0ZSBiZXR3ZWVuIGNsYXNzL21peGluL2V4dGVuc2lvbiBtZW1iZXJzCiAgICAgIHRva2VuID0gcGFyc2VyLnBhcnNlQ2xhc3NNZW1iZXIobWV0YWRhdGEgPz8gdG9rZW4sIG51bGwpLm5leHQ7CiAgICB9CiAgICBsaXN0ZW5lckZpbmlzaEZpZWxkcyhsaXN0ZW5lciwgc3RhcnRUb2tlbiwgbWV0YWRhdGEsIGlzVG9wTGV2ZWwpOwogICAgbGlzdGVuZXIuY2hlY2tFbXB0eSh0b2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIEJ1aWxkZXIgbG9va3VwQnVpbGRlcihUb2tlbiB0b2tlbiwgVG9rZW4gZ2V0T3JTZXQsIFN0cmluZyBuYW1lKSB7CiAgICAvLyBUT0RPKGFoZSk6IENhbiBJIG1vdmUgdGhpcyB0byBTY29wZSBvciBTY29wZUJ1aWxkZXI/CiAgICBCdWlsZGVyIGRlY2xhcmF0aW9uOwogICAgaWYgKGN1cnJlbnREZWNsYXJhdGlvbiAhPSBudWxsKSB7CiAgICAgIGlmICh1cmkgIT0gY3VycmVudERlY2xhcmF0aW9uLmZpbGVVcmkpIHsKICAgICAgICB1bmV4cGVjdGVkKCIkdXJpIiwgIiR7Y3VycmVudERlY2xhcmF0aW9uLmZpbGVVcml9IiwKICAgICAgICAgICAgY3VycmVudERlY2xhcmF0aW9uLmNoYXJPZmZzZXQsIGN1cnJlbnREZWNsYXJhdGlvbi5maWxlVXJpKTsKICAgICAgfQoKICAgICAgaWYgKGdldE9yU2V0ICE9IG51bGwgJiYgb3B0aW9uYWwoInNldCIsIGdldE9yU2V0KSkgewogICAgICAgIGRlY2xhcmF0aW9uID0gY3VycmVudERlY2xhcmF0aW9uLnNjb3BlLnNldHRlcnNbbmFtZV07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZGVjbGFyYXRpb24gPSBjdXJyZW50RGVjbGFyYXRpb24uc2NvcGUubG9jYWxbbmFtZV07CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoZ2V0T3JTZXQgIT0gbnVsbCAmJiBvcHRpb25hbCgic2V0IiwgZ2V0T3JTZXQpKSB7CiAgICAgIGRlY2xhcmF0aW9uID0gbGlicmFyeUJ1aWxkZXIuc2NvcGUuc2V0dGVyc1tuYW1lXTsKICAgIH0gZWxzZSB7CiAgICAgIGRlY2xhcmF0aW9uID0gbGlicmFyeUJ1aWxkZXIuc2NvcGVCdWlsZGVyW25hbWVdOwogICAgfQogICAgZGVjbGFyYXRpb24gPSBoYW5kbGVEdXBsaWNhdGVkTmFtZShkZWNsYXJhdGlvbiwgdG9rZW4pOwogICAgY2hlY2tCdWlsZGVyKHRva2VuLCBkZWNsYXJhdGlvbiwgbmFtZSk7CiAgICByZXR1cm4gZGVjbGFyYXRpb247CiAgfQoKICBCdWlsZGVyIGxvb2t1cENvbnN0cnVjdG9yKFRva2VuIHRva2VuLCBPYmplY3QgbmFtZU9yUXVhbGlmaWVkKSB7CiAgICBhc3NlcnQoY3VycmVudENsYXNzICE9IG51bGwpOwogICAgQnVpbGRlciBkZWNsYXJhdGlvbjsKICAgIFN0cmluZyBzdWZmaXg7CiAgICBpZiAobmFtZU9yUXVhbGlmaWVkIGlzIFF1YWxpZmllZE5hbWUpIHsKICAgICAgc3VmZml4ID0gbmFtZU9yUXVhbGlmaWVkLm5hbWU7CiAgICB9IGVsc2UgewogICAgICBzdWZmaXggPSBuYW1lT3JRdWFsaWZpZWQgPT0gY3VycmVudENsYXNzLm5hbWUgPyAiIiA6IG5hbWVPclF1YWxpZmllZDsKICAgIH0KICAgIGRlY2xhcmF0aW9uID0gY3VycmVudENsYXNzLmNvbnN0cnVjdG9ycy5sb2NhbFtzdWZmaXhdOwogICAgZGVjbGFyYXRpb24gPSBoYW5kbGVEdXBsaWNhdGVkTmFtZShkZWNsYXJhdGlvbiwgdG9rZW4pOwogICAgY2hlY2tCdWlsZGVyKHRva2VuLCBkZWNsYXJhdGlvbiwgbmFtZU9yUXVhbGlmaWVkKTsKICAgIHJldHVybiBkZWNsYXJhdGlvbjsKICB9CgogIEJ1aWxkZXIgaGFuZGxlRHVwbGljYXRlZE5hbWUoQnVpbGRlciBkZWNsYXJhdGlvbiwgVG9rZW4gdG9rZW4pIHsKICAgIGludCBvZmZzZXQgPSB0b2tlbi5jaGFyT2Zmc2V0OwogICAgaWYgKGRlY2xhcmF0aW9uPy5uZXh0ID09IG51bGwpIHsKICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uOwogICAgfSBlbHNlIHsKICAgICAgQnVpbGRlciBuZWFyZXN0RGVjbGFyYXRpb247CiAgICAgIGludCBtaW5EaXN0YW5jZSA9IC0xOwogICAgICBkbyB7CiAgICAgICAgLy8gT25seSBsb29rIGF0IGRlY2xhcmF0aW9ucyBmcm9tIHRoaXMgZmlsZSAocGFydCkuCiAgICAgICAgaWYgKHVyaSA9PSBkZWNsYXJhdGlvbi5maWxlVXJpKSB7CiAgICAgICAgICAvLyBbZGlzdGFuY2VdIHdpbGwgYWx3YXlzIGJlIG5vbi1uZWdhdGl2ZSBhcyB3ZSBlbnN1cmUgW3Rva2VuXSBpcwogICAgICAgICAgLy8gYWx3YXlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRlY2xhcmF0aW9uLiBUaGUgbWluaW11bSBkaXN0YW5jZQogICAgICAgICAgLy8gd2lsbCBvZnRlbiBiZSBsYXJnZXIgdGhhbiAwLCBmb3IgZXhhbXBsZSwgaW4gYSBjbGFzcyBkZWNsYXJhdGlvbgogICAgICAgICAgLy8gd2hlcmUgW3Rva2VuXSB3aWxsIHBvaW50IHRvIGBhYnN0cmFjdGAgb3IgYGNsYXNzYCwgYnV0IHRoZQogICAgICAgICAgLy8gZGVjbGFyYXRpb24ncyBvZmZzZXQgcG9pbnRzIHRvIHRoZSBuYW1lIG9mIHRoZSBjbGFzcy4KICAgICAgICAgIGludCBkaXN0YW5jZSA9IGRlY2xhcmF0aW9uLmNoYXJPZmZzZXQgLSBvZmZzZXQ7CiAgICAgICAgICBpZiAoZGlzdGFuY2UgPj0gMCkgewogICAgICAgICAgICBpZiAobWluRGlzdGFuY2UgPT0gLTEgfHwgZGlzdGFuY2UgPCBtaW5EaXN0YW5jZSkgewogICAgICAgICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2U7CiAgICAgICAgICAgICAgbmVhcmVzdERlY2xhcmF0aW9uID0gZGVjbGFyYXRpb247CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZGVjbGFyYXRpb24gPSBkZWNsYXJhdGlvbi5uZXh0OwogICAgICB9IHdoaWxlIChkZWNsYXJhdGlvbiAhPSBudWxsKTsKICAgICAgcmV0dXJuIG5lYXJlc3REZWNsYXJhdGlvbjsKICAgIH0KICB9CgogIHZvaWQgY2hlY2tCdWlsZGVyKFRva2VuIHRva2VuLCBCdWlsZGVyIGRlY2xhcmF0aW9uLCBPYmplY3QgbmFtZSkgewogICAgaWYgKGRlY2xhcmF0aW9uID09IG51bGwpIHsKICAgICAgaW50ZXJuYWxQcm9ibGVtKHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtTm90Rm91bmQud2l0aEFyZ3VtZW50cygiJG5hbWUiKSwKICAgICAgICAgIHRva2VuLmNoYXJPZmZzZXQsIHVyaSk7CiAgICB9CiAgICBpZiAodXJpICE9IGRlY2xhcmF0aW9uLmZpbGVVcmkpIHsKICAgICAgdW5leHBlY3RlZCgiJHVyaSIsICIke2RlY2xhcmF0aW9uLmZpbGVVcml9IiwgZGVjbGFyYXRpb24uY2hhck9mZnNldCwKICAgICAgICAgIGRlY2xhcmF0aW9uLmZpbGVVcmkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRQcm9ibGVtKE1lc3NhZ2UgbWVzc2FnZSwgaW50IGNoYXJPZmZzZXQsIGludCBsZW5ndGgsCiAgICAgIHtib29sIHdhc0hhbmRsZWQ6IGZhbHNlLCBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0fSkgewogICAgbGlicmFyeUJ1aWxkZXIuYWRkUHJvYmxlbShtZXNzYWdlLCBjaGFyT2Zmc2V0LCBsZW5ndGgsIHVyaSwKICAgICAgICB3YXNIYW5kbGVkOiB3YXNIYW5kbGVkLCBjb250ZXh0OiBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZGVidWdFdmVudChTdHJpbmcgbmFtZSkgewogICAgLy8gcHJpbnRFdmVudCgnRGlldExpc3RlbmVyOiAkbmFtZScpOwogIH0KCiAgLy8vIElmIHRoZSBbbWV0YWRhdGFdIGlzIG5vdCBgbnVsbGAsIHJldHVybiB0aGUgcGFyc2VkIG1ldGFkYXRhIFtFeHByZXNzaW9uXXMuCiAgLy8vIE90aGVyd2lzZSwgcmV0dXJuIGBudWxsYC4KICBMaXN0PEV4cHJlc3Npb24+IHBhcnNlTWV0YWRhdGEoCiAgICAgIE1vZGlmaWVyQnVpbGRlciBidWlsZGVyLCBUb2tlbiBtZXRhZGF0YSwgVHJlZU5vZGUgcGFyZW50KSB7CiAgICBpZiAobWV0YWRhdGEgIT0gbnVsbCkgewogICAgICBTdGFja0xpc3RlbmVyIGxpc3RlbmVyID0gY3JlYXRlTGlzdGVuZXIoYnVpbGRlciwgbWVtYmVyU2NvcGUsCiAgICAgICAgICBpc0RlY2xhcmF0aW9uSW5zdGFuY2VNZW1iZXI6IGZhbHNlKTsKICAgICAgUGFyc2VyIHBhcnNlciA9IG5ldyBQYXJzZXIobGlzdGVuZXIpOwogICAgICBwYXJzZXIucGFyc2VNZXRhZGF0YVN0YXIocGFyc2VyLnN5bnRoZXRpY1ByZXZpb3VzVG9rZW4obWV0YWRhdGEpKTsKICAgICAgcmV0dXJuIGxpc3RlbmVyLmZpbmlzaE1ldGFkYXRhKHBhcmVudCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vLyBSZXR1cm5zIFtUb2tlbl0gZm91bmQgYmV0d2VlbiBbc3RhcnRdIChpbmNsdXNpdmUpIGFuZCBbZW5kXQogIC8vLyAobm9uLWluY2x1c2l2ZSkgdGhhdCBoYXMgaXRzIFtUb2tlbi5jaGFyT2Zmc2V0XSBlcXVhbCB0byBbb2Zmc2V0XS4gIElmCiAgLy8vIHRoZXJlIGlzIG5vIHN1Y2ggdG9rZW4sIG51bGwgaXMgcmV0dXJuZWQuCiAgVG9rZW4gdG9rZW5Gb3JPZmZzZXQoVG9rZW4gc3RhcnQsIFRva2VuIGVuZCwgaW50IG9mZnNldCkgewogICAgaWYgKG9mZnNldCA8IHN0YXJ0LmNoYXJPZmZzZXQgfHwgb2Zmc2V0ID49IGVuZC5jaGFyT2Zmc2V0KSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgd2hpbGUgKHN0YXJ0ICE9IGVuZCkgewogICAgICBpZiAob2Zmc2V0ID09IHN0YXJ0LmNoYXJPZmZzZXQpIHsKICAgICAgICByZXR1cm4gc3RhcnQ7CiAgICAgIH0KICAgICAgc3RhcnQgPSBzdGFydC5uZXh0OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvLy8gUmV0dXJucyBsaXN0IG9mIFtUb2tlbl1zIGZvdW5kIGJldHdlZW4gW3N0YXJ0XSAoaW5jbHVzaXZlKSBhbmQgW2VuZF0KICAvLy8gKG5vbi1pbmNsdXNpdmUpIHRoYXQgY29ycmVzcG9uZCB0byBbb2Zmc2V0c10uICBJZiB0aGVyZSdzIG5vIHRva2VuIGJldHdlZW4KICAvLy8gW3N0YXJ0XSBhbmQgW2VuZF0gZm9yIHRoZSBnaXZlbiBvZmZzZXQsIHRoZSBjb3JyZXNwb25kaW5nIGl0ZW0gaW4gdGhlCiAgLy8vIHJlc3VsdGluZyBsaXN0IGlzIHNldCB0byBudWxsLiAgW29mZnNldHNdIGFyZSBhc3N1bWVkIHRvIGJlIGluIGFzY2VuZGluZwogIC8vLyBvcmRlci4KICBMaXN0PFRva2VuPiB0b2tlbnNGb3JPZmZzZXRzKFRva2VuIHN0YXJ0LCBUb2tlbiBlbmQsIExpc3Q8aW50PiBvZmZzZXRz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NiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmRpZXRfcGFyc2VyOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJy4uL3BhcnNlci5kYXJ0JyBzaG93IENsYXNzTWVtYmVyUGFyc2VyLCBMaXN0ZW5lciwgTWVtYmVyS2luZDsKCi8vIFRPRE8oYWhlKTogTW92ZSB0aGlzIHRvIHBhcnNlciBwYWNrYWdlLgpjbGFzcyBEaWV0UGFyc2VyIGV4dGVuZHMgQ2xhc3NNZW1iZXJQYXJzZXIgewogIERpZXRQYXJzZXIoTGlzdGVuZXIgbGlzdGVuZXIpIDogc3VwZXIobGlzdGVuZXIpOwoKICBUb2tlbiBwYXJzZUZvcm1hbFBhcmFtZXRlcnNSZXN0KFRva2VuIHRva2VuLCBNZW1iZXJLaW5kIGtpbmQpIHsKICAgIHJldHVybiBza2lwRm9ybWFsUGFyYW1ldGVyc1Jlc3QodG9rZW4sIGtpbmQpOwogIH0KfQoUAE5OPAEbAS4BRgErLTMBQjIEAgEzcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NvdXJjZS9kaWV0X3BhcnNlci5kYXJ0QHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9zb3VyY2Uvb3V0bGluZV9idWlsZGVyLmRhcnTAAOp3Ly8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEub3V0bGluZV9idWlsZGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBQcm9jZWR1cmVLaW5kOwoKaW1wb3J0ICcuLi9idWlsZGVyL2J1aWxkZXIuZGFydCc7CgppbXBvcnQgJy4uL2NvbWJpbmF0b3IuZGFydCcgc2hvdyBDb21iaW5hdG9yOwoKaW1wb3J0ICcuLi9jb25maWd1cmF0aW9uLmRhcnQnIHNob3cgQ29uZmlndXJhdGlvbjsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cKICAgICAgICBDb2RlLAogICAgICAgIExvY2F0ZWRNZXNzYWdlLAogICAgICAgIE1lc3NhZ2UsCiAgICAgICAgbWVzc2FnZUNvbnN0Q29uc3RydWN0b3JXaXRoQm9keSwKICAgICAgICBtZXNzYWdlQ29uc3RJbnN0YW5jZUZpZWxkLAogICAgICAgIG1lc3NhZ2VDb25zdE1ldGhvZCwKICAgICAgICBtZXNzYWdlQ29uc3RydWN0b3JXaXRoUmV0dXJuVHlwZSwKICAgICAgICBtZXNzYWdlQ29uc3RydWN0b3JXaXRoVHlwZVBhcmFtZXRlcnMsCiAgICAgICAgbWVzc2FnZUV4cGVjdGVkQmxvY2tUb1NraXAsCiAgICAgICAgbWVzc2FnZUludGVycG9sYXRpb25JblVyaSwKICAgICAgICBtZXNzYWdlT3BlcmF0b3JXaXRoT3B0aW9uYWxGb3JtYWxzLAogICAgICAgIG1lc3NhZ2VTdGF0aWNDb25zdHJ1Y3RvciwKICAgICAgICBtZXNzYWdlVHlwZWRlZk5vdEZ1bmN0aW9uLAogICAgICAgIFRlbXBsYXRlLAogICAgICAgIHRlbXBsYXRlQ3ljbGVJblR5cGVWYXJpYWJsZXMsCiAgICAgICAgdGVtcGxhdGVEaXJlY3RDeWNsZUluVHlwZVZhcmlhYmxlcywKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWRQYXJhbWV0ZXJOYW1lLAogICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZFBhcmFtZXRlck5hbWVDYXVzZSwKICAgICAgICB0ZW1wbGF0ZU9wZXJhdG9yTWludXNQYXJhbWV0ZXJNaXNtYXRjaCwKICAgICAgICB0ZW1wbGF0ZU9wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gwLAogICAgICAgIHRlbXBsYXRlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDEsCiAgICAgICAgdGVtcGxhdGVPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMjsKCmltcG9ydCAnLi4vaWdub3JlZF9wYXJzZXJfZXJyb3JzLmRhcnQnIHNob3cgaXNJZ25vcmVkUGFyc2VyRXJyb3I7CgovLyBUT0RPKGFoZSk6IFRoZSBvdXRsaW5lIGlzbid0IHN1cHBvc2VkIHRvIGltcG9ydCBrZXJuZWwtc3BlY2lmaWMgYnVpbGRlcnMuCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgTWV0YWRhdGFCdWlsZGVyLAogICAgICAgIE1peGluQXBwbGljYXRpb25CdWlsZGVyLAogICAgICAgIE5hbWVkVHlwZUJ1aWxkZXIsCiAgICAgICAgVHlwZUJ1aWxkZXI7CgppbXBvcnQgJy4uL21vZGlmaWVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgQ29uc3QsCiAgICAgICAgQ292YXJpYW50LAogICAgICAgIEV4dGVybmFsLAogICAgICAgIEZpbmFsLAogICAgICAgIE1vZGlmaWVyLAogICAgICAgIFN0YXRpYywKICAgICAgICBWYXIsCiAgICAgICAgYWJzdHJhY3RNYXNrLAogICAgICAgIGNvbnN0TWFzaywKICAgICAgICBjb3ZhcmlhbnRNYXNrLAogICAgICAgIGV4dGVybmFsTWFzaywKICAgICAgICBmaW5hbE1hc2ssCiAgICAgICAgbGF0ZU1hc2ssCiAgICAgICAgbWl4aW5EZWNsYXJhdGlvbk1hc2ssCiAgICAgICAgcmVxdWlyZWRNYXNrLAogICAgICAgIHN0YXRpY01hc2s7CgppbXBvcnQgJy4uL29wZXJhdG9yLmRhcnQnCiAgICBzaG93CiAgICAgICAgT3BlcmF0b3IsCiAgICAgICAgb3BlcmF0b3JGcm9tU3RyaW5nLAogICAgICAgIG9wZXJhdG9yVG9TdHJpbmcsCiAgICAgICAgb3BlcmF0b3JSZXF1aXJlZEFyZ3VtZW50Q291bnQ7CgppbXBvcnQgJy4uL3BhcnNlci5kYXJ0JwogICAgc2hvdwogICAgICAgIEFzc2VydCwKICAgICAgICBEZWNsYXJhdGlvbktpbmQsCiAgICAgICAgRm9ybWFsUGFyYW1ldGVyS2luZCwKICAgICAgICBJZGVudGlmaWVyQ29udGV4dCwKICAgICAgICBsZW5ndGhPZlNwYW4sCiAgICAgICAgTWVtYmVyS2luZCwKICAgICAgICBvZmZzZXRGb3JUb2tlbiwKICAgICAgICBvcHRpb25hbDsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyB1bmhhbmRsZWQ7CgppbXBvcnQgJy4uL3F1b3RlLmRhcnQnIHNob3cgdW5lc2NhcGVTdHJpbmc7CgppbXBvcnQgJy4uL3NjYW5uZXIuZGFydCcgc2hvdyBUb2tlbjsKCmltcG9ydCAnc291cmNlX2xpYnJhcnlfYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIsCiAgICAgICAgVHlwZVBhcmFtZXRlclNjb3BlS2luZCwKICAgICAgICBGaWVsZEluZm8sCiAgICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXI7CgppbXBvcnQgJ3N0YWNrX2xpc3RlbmVyLmRhcnQnCiAgICBzaG93IEZpeGVkTnVsbGFibGVMaXN0LCBOdWxsVmFsdWUsIFBhcnNlclJlY292ZXJ5LCBTdGFja0xpc3RlbmVyOwoKaW1wb3J0ICd2YWx1ZV9raW5kcy5kYXJ0JzsKCmVudW0gTWV0aG9kQm9keSB7CiAgQWJzdHJhY3QsCiAgUmVndWxhciwKICBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5LAp9CgpjbGFzcyBPdXRsaW5lQnVpbGRlciBleHRlbmRzIFN0YWNrTGlzdGVuZXIgewogIGZpbmFsIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnk7CgogIGZpbmFsIGJvb2wgZW5hYmxlTmF0aXZlOwogIGZpbmFsIGJvb2wgc3RyaW5nRXhwZWN0ZWRBZnRlck5hdGl2ZTsKICBib29sIGluQ29uc3RydWN0b3IgPSBmYWxzZTsKICBib29sIGluQ29uc3RydWN0b3JOYW1lID0gZmFsc2U7CiAgaW50IGltcG9ydEluZGV4ID0gMDsKCiAgU3RyaW5nIG5hdGl2ZU1ldGhvZE5hbWU7CgogIC8vLyBDb3VudGVyIHVzZWQgZm9yIG5hbWluZyB1bm5hbWVkIGV4dGVuc2lvbiBkZWNsYXJhdGlvbnMuCiAgaW50IHVubmFtZWRFeHRlbnNpb25Db3VudGVyID0gMDsKCiAgT3V0bGluZUJ1aWxkZXIoU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkKICAgICAgOiBsaWJyYXJ5ID0gbGlicmFyeSwKICAgICAgICBlbmFibGVOYXRpdmUgPQogICAgICAgICAgICBsaWJyYXJ5LmxvYWRlci50YXJnZXQuYmFja2VuZFRhcmdldC5lbmFibGVOYXRpdmUobGlicmFyeS51cmkpLAogICAgICAgIHN0cmluZ0V4cGVjdGVkQWZ0ZXJOYXRpdmUgPQogICAgICAgICAgICBsaWJyYXJ5LmxvYWRlci50YXJnZXQuYmFja2VuZFRhcmdldC5uYXRpdmVFeHRlbnNpb25FeHBlY3RzU3RyaW5nOwoKICBAb3ZlcnJpZGUKICBVcmkgZ2V0IHVyaSA9PiBsaWJyYXJ5LmZpbGVVcmk7CgogIGludCBwb3BDaGFyT2Zmc2V0KCkgPT4gcG9wKCk7CgogIExpc3Q8U3RyaW5nPiBwb3BJZGVudGlmaWVyTGlzdChpbnQgY291bnQpIHsKICAgIGlmIChjb3VudCA9PSAwKSByZXR1cm4gbnVsbDsKICAgIExpc3Q8U3RyaW5nPiBsaXN0ID0gbmV3IExpc3Q8U3RyaW5nPihjb3VudCk7CiAgICBib29sIGlzUGFyc2VyUmVjb3ZlcnkgPSBmYWxzZTsKICAgIGZvciAoaW50IGkgPSBjb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIHBvcENoYXJPZmZzZXQoKTsKICAgICAgT2JqZWN0IGlkZW50aWZpZXIgPSBwb3AoKTsKICAgICAgaWYgKGlkZW50aWZpZXIgaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgICBpc1BhcnNlclJlY292ZXJ5ID0gdHJ1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBsaXN0W2ldID0gaWRlbnRpZmllcjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGlzUGFyc2VyUmVjb3ZlcnkgPyBudWxsIDogbGlzdDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWV0YWRhdGEoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gcGVyaW9kQmVmb3JlTmFtZSwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk1ldGFkYXRhIik7CiAgICBwb3AoKTsgLy8gYXJndW1lbnRzCiAgICBpZiAocGVyaW9kQmVmb3JlTmFtZSAhPSBudWxsKSB7CiAgICAgIHBvcCgpOyAvLyBvZmZzZXQKICAgICAgcG9wKCk7IC8vIGNvbnN0cnVjdG9yIG5hbWUKICAgIH0KICAgIHBvcCgpOyAvLyB0eXBlIGFyZ3VtZW50cwogICAgcG9wKCk7IC8vIG9mZnNldAogICAgT2JqZWN0IHNlbnRpbmVsID0gcG9wKCk7IC8vIHByZWZpeCBvciBjb25zdHJ1Y3RvcgogICAgcHVzaChzZW50aW5lbCBpcyBQYXJzZXJSZWNvdmVyeQogICAgICAgID8gc2VudGluZWwKICAgICAgICA6IG5ldyBNZXRhZGF0YUJ1aWxkZXIoYmVnaW5Ub2tlbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRNZXRhZGF0YVN0YXIoaW50IGNvdW50KSB7CiAgICBkZWJ1Z0V2ZW50KCJNZXRhZGF0YVN0YXIiKTsKICAgIHB1c2goY29uc3QgRml4ZWROdWxsYWJsZUxpc3Q8TWV0YWRhdGFCdWlsZGVyPigpLnBvcChzdGFjaywgY291bnQpID8/CiAgICAgICAgTnVsbFZhbHVlLk1ldGFkYXRhKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW52YWxpZFRvcExldmVsRGVjbGFyYXRpb24oVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkludmFsaWRUb3BMZXZlbERlY2xhcmF0aW9uIik7CiAgICBwb3AoKTsgLy8gbWV0YWRhdGEgc3RhcgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRIaWRlKFRva2VuIGhpZGVLZXl3b3JkKSB7CiAgICBkZWJ1Z0V2ZW50KCJIaWRlIik7CiAgICBPYmplY3QgbmFtZXMgPSBwb3AoKTsKICAgIGlmIChuYW1lcyBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBwdXNoKG5hbWVzKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2gobmV3IENvbWJpbmF0b3IuaGlkZShuYW1lcywgaGlkZUtleXdvcmQuY2hhck9mZnNldCwgbGlicmFyeS5maWxlVXJpKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFNob3coVG9rZW4gc2hvd0tleXdvcmQpIHsKICAgIGRlYnVnRXZlbnQoIlNob3ciKTsKICAgIE9iamVjdCBuYW1lcyA9IHBvcCgpOwogICAgaWYgKG5hbWVzIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIHB1c2gobmFtZXMpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChuZXcgQ29tYmluYXRvci5zaG93KG5hbWVzLCBzaG93S2V5d29yZC5jaGFyT2Zmc2V0LCBsaWJyYXJ5LmZpbGVVcmkpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ29tYmluYXRvcnMoaW50IGNvdW50KSB7CiAgICBkZWJ1Z0V2ZW50KCJDb21iaW5hdG9ycyIpOwogICAgcHVzaChjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxDb21iaW5hdG9yPigpLnBvcChzdGFjaywgY291bnQpID8/CiAgICAgICAgTnVsbFZhbHVlLkNvbWJpbmF0b3JzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRXhwb3J0KFRva2VuIGV4cG9ydEtleXdvcmQsIFRva2VuIHNlbWljb2xvbikgewogICAgZGVidWdFdmVudCgiRXhwb3J0Iik7CiAgICBMaXN0PENvbWJpbmF0b3I+IGNvbWJpbmF0b3JzID0gcG9wKCk7CiAgICBMaXN0PENvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb25zID0gcG9wKCk7CiAgICBpbnQgdXJpT2Zmc2V0ID0gcG9wQ2hhck9mZnNldCgpOwogICAgU3RyaW5nIHVyaSA9IHBvcCgpOwogICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhID0gcG9wKCk7CiAgICBsaWJyYXJ5LmFkZEV4cG9ydChtZXRhZGF0YSwgdXJpLCBjb25maWd1cmF0aW9ucywgY29tYmluYXRvcnMsCiAgICAgICAgZXhwb3J0S2V5d29yZC5jaGFyT2Zmc2V0LCB1cmlPZmZzZXQpOwogICAgY2hlY2tFbXB0eShleHBvcnRLZXl3b3JkLmNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJbXBvcnRQcmVmaXgoVG9rZW4gZGVmZXJyZWRLZXl3b3JkLCBUb2tlbiBhc0tleXdvcmQpIHsKICAgIGRlYnVnRXZlbnQoIkltcG9ydFByZWZpeCIpOwogICAgaWYgKGFzS2V5d29yZCA9PSBudWxsKSB7CiAgICAgIC8vIElmIGFzS2V5d29yZCBpcyBudWxsLCB0aGVuIG5vIHByZWZpeCBoYXMgYmVlbiBwdXNoZWQgb24gdGhlIHN0YWNrLgogICAgICAvLyBQdXNoIGEgcGxhY2Vob2xkZXIgaW5kaWNhdGluZyB0aGF0IHRoZXJlIGlzIG5vIHByZWZpeC4KICAgICAgcHVzaChOdWxsVmFsdWUuUHJlZml4KTsKICAgICAgcHVzaCgtMSk7CiAgICB9CiAgICBwdXNoKGRlZmVycmVkS2V5d29yZCAhPSBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSW1wb3J0KFRva2VuIGltcG9ydEtleXdvcmQsIFRva2VuIHNlbWljb2xvbikgewogICAgZGVidWdFdmVudCgiRW5kSW1wb3J0Iik7CiAgICBMaXN0PENvbWJpbmF0b3I+IGNvbWJpbmF0b3JzID0gcG9wKCk7CiAgICBib29sIGlzRGVmZXJyZWQgPSBwb3AoKTsKICAgIGludCBwcmVmaXhPZmZzZXQgPSBwb3AoKTsKICAgIE9iamVjdCBwcmVmaXggPSBwb3AoTnVsbFZhbHVlLlByZWZpeCk7CiAgICBMaXN0PENvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb25zID0gcG9wKCk7CiAgICBpbnQgdXJpT2Zmc2V0ID0gcG9wQ2hhck9mZnNldCgpOwogICAgU3RyaW5nIHVyaSA9IHBvcCgpOyAvLyBGb3IgYSBjb25kaXRpb25hbCBpbXBvcnQsIHRoaXMgaXMgdGhlIGRlZmF1bHQgVVJJLgogICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhID0gcG9wKCk7CiAgICBjaGVja0VtcHR5KGltcG9ydEtleXdvcmQuY2hhck9mZnNldCk7CiAgICBpZiAocHJlZml4IGlzIFBhcnNlclJlY292ZXJ5KSByZXR1cm47CiAgICBsaWJyYXJ5LmFkZEltcG9ydCgKICAgICAgICBtZXRhZGF0YSwKICAgICAgICB1cmksCiAgICAgICAgY29uZmlndXJhdGlvbnMsCiAgICAgICAgcHJlZml4LAogICAgICAgIGNvbWJpbmF0b3JzLAogICAgICAgIGlzRGVmZXJyZWQsCiAgICAgICAgaW1wb3J0S2V5d29yZC5jaGFyT2Zmc2V0LAogICAgICAgIHByZWZpeE9mZnNldCwKICAgICAgICB1cmlPZmZzZXQsCiAgICAgICAgaW1wb3J0SW5kZXgrKyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENvbmRpdGlvbmFsVXJpcyhpbnQgY291bnQpIHsKICAgIGRlYnVnRXZlbnQoIkVuZENvbmRpdGlvbmFsVXJpcyIpOwogICAgcHVzaChjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxDb25maWd1cmF0aW9uPigpLnBvcChzdGFjaywgY291bnQpID8/CiAgICAgICAgTnVsbFZhbHVlLkNvbmRpdGlvbmFsVXJpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENvbmRpdGlvbmFsVXJpKFRva2VuIGlmS2V5d29yZCwgVG9rZW4gbGVmdFBhcmVuLCBUb2tlbiBlcXVhbFNpZ24pIHsKICAgIGRlYnVnRXZlbnQoIkVuZENvbmRpdGlvbmFsVXJpIik7CiAgICBpbnQgY2hhck9mZnNldCA9IHBvcENoYXJPZmZzZXQoKTsKICAgIFN0cmluZyB1cmkgPSBwb3AoKTsKICAgIGlmIChlcXVhbFNpZ24gIT0gbnVsbCkgcG9wQ2hhck9mZnNldCgpOwogICAgU3RyaW5nIGNvbmRpdGlvbiA9IHBvcElmTm90TnVsbChlcXVhbFNpZ24pID8/ICJ0cnVlIjsKICAgIE9iamVjdCBkb3R0ZWROYW1lID0gcG9wKCk7CiAgICBpZiAoZG90dGVkTmFtZSBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBwdXNoKGRvdHRlZE5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChuZXcgQ29uZmlndXJhdGlvbihjaGFyT2Zmc2V0LCBkb3R0ZWROYW1lLCBjb25kaXRpb24sIHVyaSkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVEb3R0ZWROYW1lKGludCBjb3VudCwgVG9rZW4gZmlyc3RJZGVudGlmaWVyKSB7CiAgICBkZWJ1Z0V2ZW50KCJEb3R0ZWROYW1lIik7CiAgICBMaXN0PFN0cmluZz4gbmFtZXMgPSBwb3BJZGVudGlmaWVyTGlzdChjb3VudCk7CiAgICBpZiAobmFtZXMgPT0gbnVsbCkgewogICAgICBwdXNoKG5ldyBQYXJzZXJSZWNvdmVyeShmaXJzdElkZW50aWZpZXIuY2hhck9mZnNldCkpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChuYW1lcy5qb2luKCcuJykpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVSZWNvdmVySW1wb3J0KFRva2VuIHNlbWljb2xvbikgewogICAgZGVidWdFdmVudCgiUmVjb3ZlckltcG9ydCIpOwogICAgcG9wKCk7IC8vIGNvbWJpbmF0b3JzCiAgICBwb3AoTnVsbFZhbHVlLkRlZmVycmVkKTsgLy8gZGVmZXJyZWRLZXl3b3JkCiAgICBwb3AoKTsgLy8gcHJlZml4T2Zmc2V0CiAgICBwb3AoTnVsbFZhbHVlLlByZWZpeCk7IC8vIHByZWZpeAogICAgcG9wKCk7IC8vIGNvbmRpdGlvbmFsVXJpcwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRQYXJ0KFRva2VuIHBhcnRLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGRlYnVnRXZlbnQoIlBhcnQiKTsKICAgIGludCBjaGFyT2Zmc2V0ID0gcG9wQ2hhck9mZnNldCgpOwogICAgU3RyaW5nIHVyaSA9IHBvcCgpOwogICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhID0gcG9wKCk7CiAgICBsaWJyYXJ5LmFkZFBhcnQobWV0YWRhdGEsIHVyaSwgY2hhck9mZnNldCk7CiAgICBjaGVja0VtcHR5KHBhcnRLZXl3b3JkLmNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVPcGVyYXRvck5hbWUoVG9rZW4gb3BlcmF0b3JLZXl3b3JkLCBUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiT3BlcmF0b3JOYW1lIik7CiAgICBwdXNoKG9wZXJhdG9yRnJvbVN0cmluZyh0b2tlbi5zdHJpbmdWYWx1ZSkpOwogICAgcHVzaCh0b2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW52YWxpZE9wZXJhdG9yTmFtZShUb2tlbiBvcGVyYXRvcktleXdvcmQsIFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJJbnZhbGlkT3BlcmF0b3JOYW1lIik7CiAgICBwdXNoKCdpbnZhbGlkJyk7CiAgICBwdXNoKHRva2VuLmNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dCBjb250ZXh0KSB7CiAgICBpZiAoY29udGV4dCA9PSBJZGVudGlmaWVyQ29udGV4dC5lbnVtVmFsdWVEZWNsYXJhdGlvbikgewogICAgICBkZWJ1Z0V2ZW50KCJoYW5kbGVJZGVudGlmaWVyIik7CiAgICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSA9IHBvcCgpOwogICAgICBpZiAodG9rZW4uaXNTeW50aGV0aWMpIHsKICAgICAgICBwdXNoKG5ldyBQYXJzZXJSZWNvdmVyeSh0b2tlbi5jaGFyT2Zmc2V0KSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcHVzaChuZXcgRW51bUNvbnN0YW50SW5mbyhtZXRhZGF0YSwgdG9rZW4ubGV4ZW1lLCB0b2tlbi5jaGFyT2Zmc2V0LAogICAgICAgICAgICBnZXREb2N1bWVudGF0aW9uQ29tbWVudCh0b2tlbikpKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgc3VwZXIuaGFuZGxlSWRlbnRpZmllcih0b2tlbiwgY29udGV4dCk7CiAgICAgIHB1c2godG9rZW4uY2hhck9mZnNldCk7CiAgICB9CiAgICBpZiAoaW5Db25zdHJ1Y3RvciAmJiBjb250ZXh0ID09IElkZW50aWZpZXJDb250ZXh0Lm1ldGhvZERlY2xhcmF0aW9uKSB7CiAgICAgIGluQ29uc3RydWN0b3JOYW1lID0gdHJ1ZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9OYW1lKFRva2VuIHRva2VuKSB7CiAgICBzdXBlci5oYW5kbGVOb05hbWUodG9rZW4pOwogICAgcHVzaCh0b2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3RyaW5nUGFydChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiU3RyaW5nUGFydCIpOwogICAgLy8gSWdub3JlIHN0cmluZyBwYXJ0cyAtIHJlcG9ydCBlcnJvciBsYXRlci4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTGl0ZXJhbFN0cmluZyhpbnQgaW50ZXJwb2xhdGlvbkNvdW50LCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiZW5kTGl0ZXJhbFN0cmluZyIpOwogICAgaWYgKGludGVycG9sYXRpb25Db3VudCA9PSAwKSB7CiAgICAgIFRva2VuIHRva2VuID0gcG9wKCk7CiAgICAgIHB1c2godW5lc2NhcGVTdHJpbmcodG9rZW4ubGV4ZW1lLCB0b2tlbiwgdGhpcykpOwogICAgICBwdXNoKHRva2VuLmNoYXJPZmZzZXQpOwogICAgfSBlbHNlIHsKICAgICAgVG9rZW4gYmVnaW5Ub2tlbiA9IHBvcCgpOwogICAgICBpbnQgY2hhck9mZnNldCA9IGJlZ2luVG9rZW4uY2hhck9mZnNldDsKICAgICAgcHVzaCgiJHtTb3VyY2VMaWJyYXJ5QnVpbGRlci5NQUxGT1JNRURfVVJJX1NDSEVNRX06YmFkJHtjaGFyT2Zmc2V0fSIpOwogICAgICBwdXNoKGNoYXJPZmZzZXQpOwogICAgICAvLyBQb2ludCB0byBkb2xsYXIgc2lnbgogICAgICBpbnQgaW50ZXJwb2xhdGlvbk9mZnNldCA9IGNoYXJPZmZzZXQgKyBiZWdpblRva2VuLmxleGVtZS5sZW5ndGg7CiAgICAgIGFkZFByb2JsZW0obWVzc2FnZUludGVycG9sYXRpb25JblVyaSwgaW50ZXJwb2xhdGlvbk9mZnNldCwgMSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5hdGl2ZUNsYXVzZShUb2tlbiBuYXRpdmVUb2tlbiwgYm9vbCBoYXNOYW1lKSB7CiAgICBkZWJ1Z0V2ZW50KCJOYXRpdmVDbGF1c2UiKTsKICAgIGlmIChoYXNOYW1lKSB7CiAgICAgIC8vIFBvcCB0aGUgbmF0aXZlIGNsYXVzZSB3aGljaCBpbiB0aGlzIGNhc2UgaXMgYSBTdHJpbmdMaXRlcmFsLgogICAgICBwb3AoKTsgLy8gQ2hhciBvZmZzZXQuCiAgICAgIE9iamVjdCBuYW1lID0gcG9wKCk7CiAgICAgIGlmIChuYW1lIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgICAgbmF0aXZlTWV0aG9kTmFtZSA9ICcnOwogICAgICB9IGVsc2UgewogICAgICAgIG5hdGl2ZU1ldGhvZE5hbWUgPSBuYW1lOyAvLyBTdHJpbmcuCiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIG5hdGl2ZU1ldGhvZE5hbWUgPSAnJzsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3RyaW5nSnV4dGFwb3NpdGlvbihpbnQgbGl0ZXJhbENvdW50KSB7CiAgICBkZWJ1Z0V2ZW50KCJTdHJpbmdKdXh0YXBvc2l0aW9uIik7CiAgICBMaXN0PFN0cmluZz4gbGlzdCA9IG5ldyBMaXN0PFN0cmluZz4obGl0ZXJhbENvdW50KTsKICAgIGludCBjaGFyT2Zmc2V0ID0gLTE7CiAgICBmb3IgKGludCBpID0gbGl0ZXJhbENvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgY2hhck9mZnNldCA9IHBvcCgpOwogICAgICBsaXN0W2ldID0gcG9wKCk7CiAgICB9CiAgICBwdXNoKGxpc3Quam9pbigiIikpOwogICAgcHVzaChjaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSWRlbnRpZmllckxpc3QoaW50IGNvdW50KSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRJZGVudGlmaWVyTGlzdCIpOwogICAgcHVzaChwb3BJZGVudGlmaWVyTGlzdChjb3VudCkgPz8KICAgICAgICAoY291bnQgPT0gMCA/IE51bGxWYWx1ZS5JZGVudGlmaWVyTGlzdCA6IG5ldyBQYXJzZXJSZWNvdmVyeSgtMSkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlUXVhbGlmaWVkKFRva2VuIHBlcmlvZCkgewogICAgYXNzZXJ0KGNoZWNrU3RhdGUocGVyaW9kLCBbCiAgICAgIC8qc3VmZml4IG9mZnNldCovIFZhbHVlS2luZC5JbnRlZ2VyLAogICAgICAvKnN1ZmZpeCovIFZhbHVlS2luZC5OYW1lT3JQYXJzZXJSZWNvdmVyeSwKICAgICAgLypwcmVmaXggb2Zmc2V0Ki8gVmFsdWVLaW5kLkludGVnZXIsCiAgICAgIC8qcHJlZml4Ki8gdW5pb25PZktpbmRzKAogICAgICAgICAgW1ZhbHVlS2luZC5OYW1lLCBWYWx1ZUtpbmQuUGFyc2VyUmVjb3ZlcnksIFZhbHVlS2luZC5RdWFsaWZpZWROYW1lXSksCiAgICBdKSk7CiAgICBkZWJ1Z0V2ZW50KCJoYW5kbGVRdWFsaWZpZWQiKTsKICAgIGludCBzdWZmaXhPZmZzZXQgPSBwb3AoKTsKICAgIE9iamVjdCBzdWZmaXggPSBwb3AoKTsKICAgIGludCBvZmZzZXQgPSBwb3AoKTsKICAgIE9iamVjdCBwcmVmaXggPSBwb3AoKTsKICAgIGlmIChwcmVmaXggaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgcHVzaChwcmVmaXgpOwogICAgfSBlbHNlIGlmIChzdWZmaXggaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgcHVzaChzdWZmaXgpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KGlkZW50aWNhbChzdWZmaXgsIHBlcmlvZC5uZXh0LmxleGVtZSkpOwogICAgICBhc3NlcnQoc3VmZml4T2Zmc2V0ID09IHBlcmlvZC5uZXh0LmNoYXJPZmZzZXQpOwogICAgICBwdXNoKG5ldyBRdWFsaWZpZWROYW1lKHByZWZpeCwgcGVyaW9kLm5leHQpKTsKICAgIH0KICAgIHB1c2gob2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTGlicmFyeU5hbWUoVG9rZW4gbGlicmFyeUtleXdvcmQsIFRva2VuIHNlbWljb2xvbikgewogICAgZGVidWdFdmVudCgiZW5kTGlicmFyeU5hbWUiKTsKICAgIHBvcENoYXJPZmZzZXQoKTsKICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCA9IGdldERvY3VtZW50YXRpb25Db21tZW50KGxpYnJhcnlLZXl3b3JkKTsKICAgIE9iamVjdCBuYW1lID0gcG9wKCk7CiAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEgPSBwb3AoKTsKICAgIGxpYnJhcnkuZG9jdW1lbnRhdGlvbkNvbW1lbnQgPSBkb2N1bWVudGF0aW9uQ29tbWVudDsKICAgIGlmIChuYW1lIGlzISBQYXJzZXJSZWNvdmVyeSkgewogICAgICBsaWJyYXJ5Lm5hbWUgPSBmbGF0dGVuTmFtZShuYW1lLCBvZmZzZXRGb3JUb2tlbihsaWJyYXJ5S2V5d29yZCksIHVyaSk7CiAgICB9CiAgICBsaWJyYXJ5Lm1ldGFkYXRhID0gbWV0YWRhdGE7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ2xhc3NPck5hbWVkTWl4aW5BcHBsaWNhdGlvblByZWx1ZGUoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luQ2xhc3NPck5hbWVkTWl4aW5BcHBsaWNhdGlvbiIpOwogICAgbGlicmFyeS5iZWdpbk5lc3RlZERlY2xhcmF0aW9uKAogICAgICAgIFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQuY2xhc3NPck5hbWVkTWl4aW5BcHBsaWNhdGlvbiwKICAgICAgICAiY2xhc3Mgb3IgbWl4aW4gYXBwbGljYXRpb24iKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5DbGFzc0RlY2xhcmF0aW9uKFRva2VuIGJlZ2luLCBUb2tlbiBhYnN0cmFjdFRva2VuLCBUb2tlbiBuYW1lKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkNsYXNzRGVjbGFyYXRpb24iKTsKICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcyA9IHBvcCgpOwogICAgcHVzaCh0eXBlVmFyaWFibGVzID8/IE51bGxWYWx1ZS5UeXBlVmFyaWFibGVzKTsKICAgIGxpYnJhcnkuY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIKICAgICAgICAubWFya0FzQ2xhc3NEZWNsYXJhdGlvbihuYW1lLmxleGVtZSwgbmFtZS5jaGFyT2Zmc2V0LCB0eXBlVmFyaWFibGVzKTsKICAgIHB1c2goYWJzdHJhY3RUb2tlbiAhPSBudWxsID8gYWJzdHJhY3RNYXNrIDogMCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luTWl4aW5EZWNsYXJhdGlvbihUb2tlbiBtaXhpbktleXdvcmQsIFRva2VuIG5hbWUpIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luTWl4aW5EZWNsYXJhdGlvbiIpOwogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzID0gcG9wKCk7CiAgICBwdXNoKHR5cGVWYXJpYWJsZXMgPz8gTnVsbFZhbHVlLlR5cGVWYXJpYWJsZXMpOwogICAgbGlicmFyeS5jdXJyZW50VHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlcgogICAgICAgIC5tYXJrQXNNaXhpbkRlY2xhcmF0aW9uKG5hbWUubGV4ZW1lLCBuYW1lLmNoYXJPZmZzZXQsIHR5cGVWYXJpYWJsZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkNsYXNzT3JNaXhpbkJvZHkoRGVjbGFyYXRpb25LaW5kIGtpbmQsIFRva2VuIHRva2VuKSB7CiAgICBpZiAoa2luZCA9PSBEZWNsYXJhdGlvbktpbmQuRXh0ZW5zaW9uKSB7CiAgICAgIGFzc2VydChjaGVja1N0YXRlKHRva2VuLCBbCiAgICAgICAgdW5pb25PZktpbmRzKFtWYWx1ZUtpbmQuUGFyc2VyUmVjb3ZlcnksIFZhbHVlS2luZC5UeXBlQnVpbGRlcl0pCiAgICAgIF0pKTsKICAgICAgT2JqZWN0IGV4dGVuc2lvblRoaXNUeXBlID0gcGVlaygpOwogICAgICBpZiAoZXh0ZW5zaW9uVGhpc1R5cGUgaXMgVHlwZUJ1aWxkZXIpIHsKICAgICAgICBsaWJyYXJ5LmN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyCiAgICAgICAgICAgIC5yZWdpc3RlckV4dGVuc2lvblRoaXNUeXBlKGV4dGVuc2lvblRoaXNUeXBlKTsKICAgICAgfQogICAgfQogICAgZGVidWdFdmVudCgiYmVnaW5DbGFzc09yTWl4aW5Cb2R5Iik7CiAgICAvLyBSZXNvbHZlIHVucmVzb2x2ZWQgdHlwZXMgZnJvbSB0aGUgY2xhc3MgaGVhZGVyIChpLmUuLCBzdXBlcmNsYXNzLCBtaXhpbnMsCiAgICAvLyBhbmQgaW1wbGVtZW50ZWQgdHlwZXMpIGJlZm9yZSBhZGRpbmcgbWVtYmVycyBmcm9tIHRoZSBjbGFzcyBib2R5IHdoaWNoCiAgICAvLyBzaG91bGQgbm90IHNoYWRvdyB0aGVzZSB1bnJlc29sdmVkIHR5cGVzLgogICAgbGlicmFyeS5jdXJyZW50VHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlci5yZXNvbHZlVHlwZXMoCiAgICAgICAgbGlicmFyeS5jdXJyZW50VHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlci50eXBlVmFyaWFibGVzLCBsaWJyYXJ5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5OYW1lZE1peGluQXBwbGljYXRpb24oCiAgICAgIFRva2VuIGJlZ2luLCBUb2tlbiBhYnN0cmFjdFRva2VuLCBUb2tlbiBuYW1lKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbk5hbWVkTWl4aW5BcHBsaWNhdGlvbiIpOwogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzID0gcG9wKCk7CiAgICBwdXNoKHR5cGVWYXJpYWJsZXMgPz8gTnVsbFZhbHVlLlR5cGVWYXJpYWJsZXMpOwogICAgbGlicmFyeS5jdXJyZW50VHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlci5tYXJrQXNOYW1lZE1peGluQXBwbGljYXRpb24oCiAgICAgICAgbmFtZS5sZXhlbWUsIG5hbWUuY2hhck9mZnNldCwgdHlwZVZhcmlhYmxlcyk7CiAgICBwdXNoKGFic3RyYWN0VG9rZW4gIT0gbnVsbCA/IGFic3RyYWN0TWFzayA6IDApOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVDbGFzc09yTWl4aW5JbXBsZW1lbnRzKAogICAgICBUb2tlbiBpbXBsZW1lbnRzS2V5d29yZCwgaW50IGludGVyZmFjZXNDb3VudCkgewogICAgZGVidWdFdmVudCgiQ2xhc3NPck1peGluSW1wbGVtZW50cyIpOwogICAgcHVzaChjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxOYW1lZFR5cGVCdWlsZGVyPigpCiAgICAgICAgICAgIC5wb3Aoc3RhY2ssIGludGVyZmFjZXNDb3VudCkgPz8KICAgICAgICBOdWxsVmFsdWUuVHlwZUJ1aWxkZXJMaXN0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlUmVjb3ZlckNsYXNzSGVhZGVyKCkgewogICAgZGVidWdFdmVudCgiaGFuZGxlUmVjb3ZlckNsYXNzSGVhZGVyIik7CiAgICBwb3AoTnVsbFZhbHVlLlR5cGVCdWlsZGVyTGlzdCk7IC8vIEludGVyZmFjZXMuCiAgICBwb3AoKTsgLy8gU3VwZXJ0eXBlIG9mZnNldC4KICAgIHBvcCgpOyAvLyBTdXBlcnR5cGUuCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVJlY292ZXJNaXhpbkhlYWRlcigpIHsKICAgIGRlYnVnRXZlbnQoImhhbmRsZVJlY292ZXJNaXhpbkhlYWRlciIpOwogICAgcG9wKE51bGxWYWx1ZS5UeXBlQnVpbGRlckxpc3QpOyAvLyBJbnRlcmZhY2VzLgogICAgcG9wKE51bGxWYWx1ZS5UeXBlQnVpbGRlckxpc3QpOyAvLyBTdXBlcnR5cGUgY29uc3RyYWludHMuCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNsYXNzRXh0ZW5kcyhUb2tlbiBleHRlbmRzS2V5d29yZCkgewogICAgZGVidWdFdmVudCgiaGFuZGxlQ2xhc3NFeHRlbmRzIik7CiAgICBwdXNoKGV4dGVuZHNLZXl3b3JkPy5jaGFyT2Zmc2V0ID8/IC0xKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTWl4aW5PbihUb2tlbiBvbktleXdvcmQsIGludCB0eXBlQ291bnQpIHsKICAgIGRlYnVnRXZlbnQoImhhbmRsZU1peGluT24iKTsKICAgIHB1c2goY29uc3QgRml4ZWROdWxsYWJsZUxpc3Q8TmFtZWRUeXBlQnVpbGRlcj4oKS5wb3Aoc3RhY2ssIHR5cGVDb3VudCkgPz8KICAgICAgICBuZXcgUGFyc2VyUmVjb3Zlcnkob2Zmc2V0Rm9yVG9rZW4ob25LZXl3b3JkKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDbGFzc0RlY2xhcmF0aW9uKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRDbGFzc0RlY2xhcmF0aW9uIik7CiAgICBTdHJpbmcgZG9jdW1lbnRhdGlvbkNvbW1lbnQgPSBnZXREb2N1bWVudGF0aW9uQ29tbWVudChiZWdpblRva2VuKTsKICAgIExpc3Q8VHlwZUJ1aWxkZXI+IGludGVyZmFjZXMgPSBwb3AoTnVsbFZhbHVlLlR5cGVCdWlsZGVyTGlzdCk7CiAgICBpbnQgc3VwZXJ0eXBlT2Zmc2V0ID0gcG9wKCk7CiAgICBUeXBlQnVpbGRlciBzdXBlcnR5cGUgPSBudWxsSWZQYXJzZXJSZWNvdmVyeShwb3AoKSk7CiAgICBpbnQgbW9kaWZpZXJzID0gcG9wKCk7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMgPSBwb3AoKTsKICAgIGludCBuYW1lT2Zmc2V0ID0gcG9wKCk7CiAgICBPYmplY3QgbmFtZSA9IHBvcCgpOwogICAgaWYgKHR5cGVWYXJpYWJsZXMgIT0gbnVsbCAmJiBzdXBlcnR5cGUgaXMgTWl4aW5BcHBsaWNhdGlvbkJ1aWxkZXIpIHsKICAgICAgc3VwZXJ0eXBlLnR5cGVWYXJpYWJsZXMgPSB0eXBlVmFyaWFibGVzOwogICAgfQogICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhID0gcG9wKCk7CiAgICBjaGVja0VtcHR5KGJlZ2luVG9rZW4uY2hhck9mZnNldCk7CiAgICBpZiAobmFtZSBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBsaWJyYXJ5LmVuZE5lc3RlZERlY2xhcmF0aW9uKAogICAgICAgICAgVHlwZVBhcmFtZXRlclNjb3BlS2luZC5jbGFzc0RlY2xhcmF0aW9uLCAiPHN5bnRheC1lcnJvcj4iKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGZpbmFsIGludCBzdGFydENoYXJPZmZzZXQgPQogICAgICAgIG1ldGFkYXRhID09IG51bGwgPyBiZWdpblRva2VuLmNoYXJPZmZzZXQgOiBtZXRhZGF0YS5maXJzdC5jaGFyT2Zmc2V0OwoKICAgIGxpYnJhcnkuYWRkQ2xhc3MoCiAgICAgICAgZG9jdW1lbnRhdGlvbkNvbW1lbnQsCiAgICAgICAgbWV0YWRhdGEsCiAgICAgICAgbW9kaWZpZXJzLAogICAgICAgIG5hbWUsCiAgICAgICAgdHlwZVZhcmlhYmxlcywKICAgICAgICBzdXBlcnR5cGUsCiAgICAgICAgaW50ZXJmYWNlcywKICAgICAgICBzdGFydENoYXJPZmZzZXQsCiAgICAgICAgbmFtZU9mZnNldCwKICAgICAgICBlbmRUb2tlbi5jaGFyT2Zmc2V0LAogICAgICAgIHN1cGVydHlwZU9mZnNldCk7CiAgfQoKICBPYmplY3QgbnVsbElmUGFyc2VyUmVjb3ZlcnkoT2JqZWN0IG5vZGUpIHsKICAgIHJldHVybiBub2RlIGlzIFBhcnNlclJlY292ZXJ5ID8gbnVsbCA6IG5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZE1peGluRGVjbGFyYXRpb24oVG9rZW4gbWl4aW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImVuZE1peGluRGVjbGFyYXRpb24iKTsKICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCA9IGdldERvY3VtZW50YXRpb25Db21tZW50KG1peGluVG9rZW4pOwogICAgTGlzdDxUeXBlQnVpbGRlcj4gaW50ZXJmYWNlcyA9IHBvcChOdWxsVmFsdWUuVHlwZUJ1aWxkZXJMaXN0KTsKICAgIExpc3Q8VHlwZUJ1aWxkZXI+IHN1cGVydHlwZUNvbnN0cmFpbnRzID0gbnVsbElmUGFyc2VyUmVjb3ZlcnkocG9wKCkpOwogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzID0gcG9wKE51bGxWYWx1ZS5UeXBlVmFyaWFibGVzKTsKICAgIGludCBuYW1lT2Zmc2V0ID0gcG9wKCk7CiAgICBPYmplY3QgbmFtZSA9IHBvcCgpOwogICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhID0gcG9wKE51bGxWYWx1ZS5NZXRhZGF0YSk7CiAgICBjaGVja0VtcHR5KG1peGluVG9rZW4uY2hhck9mZnNldCk7CiAgICBpZiAobmFtZSBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBsaWJyYXJ5LmVuZE5lc3RlZERlY2xhcmF0aW9uKAogICAgICAgICAgVHlwZVBhcmFtZXRlclNjb3BlS2luZC5taXhpbkRlY2xhcmF0aW9uLCAiPHN5bnRheC1lcnJvcj4iKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaW50IHN0YXJ0T2Zmc2V0ID0KICAgICAgICBtZXRhZGF0YSA9PSBudWxsID8gbWl4aW5Ub2tlbi5jaGFyT2Zmc2V0IDogbWV0YWRhdGEuZmlyc3QuY2hhck9mZnNldDsKICAgIFR5cGVCdWlsZGVyIHN1cGVydHlwZTsKICAgIGlmIChzdXBlcnR5cGVDb25zdHJhaW50cyAhPSBudWxsICYmIHN1cGVydHlwZUNvbnN0cmFpbnRzLmlzTm90RW1wdHkpIHsKICAgICAgaWYgKHN1cGVydHlwZUNvbnN0cmFpbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgc3VwZXJ0eXBlID0gc3VwZXJ0eXBlQ29uc3RyYWludHMuZmlyc3Q7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3VwZXJ0eXBlID0gbmV3IE1peGluQXBwbGljYXRpb25CdWlsZGVyKAogICAgICAgICAgICBzdXBlcnR5cGVDb25zdHJhaW50cy5maXJzdCwgc3VwZXJ0eXBlQ29uc3RyYWludHMuc2tpcCgxKS50b0xpc3QoKSk7CiAgICAgIH0KICAgIH0KICAgIGxpYnJhcnkuYWRkTWl4aW5EZWNsYXJhdGlvbigKICAgICAgICBkb2N1bWVudGF0aW9uQ29tbWVudCwKICAgICAgICBtZXRhZGF0YSwKICAgICAgICBtaXhpbkRlY2xhcmF0aW9uTWFzaywKICAgICAgICBuYW1lLAogICAgICAgIHR5cGVWYXJpYWJsZXMsCiAgICAgICAgc3VwZXJ0eXBlLAogICAgICAgIGludGVyZmFjZXMsCiAgICAgICAgc3RhcnRPZmZzZXQsCiAgICAgICAgbmFtZU9mZnNldCwKICAgICAgICBlbmRUb2tlbi5jaGFyT2Zmc2V0LAogICAgICAgIC0xKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5FeHRlbnNpb25EZWNsYXJhdGlvblByZWx1ZGUoVG9rZW4gZXh0ZW5zaW9uS2V5d29yZCkgewogICAgYXNzZXJ0KGNoZWNrU3RhdGUoZXh0ZW5zaW9uS2V5d29yZCwgW1ZhbHVlS2luZC5NZXRhZGF0YUxpc3RPck51bGxdKSk7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkV4dGVuc2lvbkRlY2xhcmF0aW9uIik7CiAgICBsaWJyYXJ5LmJlZ2luTmVzdGVkRGVjbGFyYXRpb24oCiAgICAgICAgVHlwZVBhcmFtZXRlclNjb3BlS2luZC5leHRlbnNpb25EZWNsYXJhdGlvbiwgImV4dGVuc2lvbiIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkV4dGVuc2lvbkRlY2xhcmF0aW9uKFRva2VuIGV4dGVuc2lvbktleXdvcmQsIFRva2VuIG5hbWVUb2tlbikgewogICAgYXNzZXJ0KGNoZWNrU3RhdGUoZXh0ZW5zaW9uS2V5d29yZCwKICAgICAgICBbVmFsdWVLaW5kLlR5cGVWYXJpYWJsZUxpc3RPck51bGwsIFZhbHVlS2luZC5NZXRhZGF0YUxpc3RPck51bGxdKSk7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkV4dGVuc2lvbkRlY2xhcmF0aW9uIik7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMgPSBwb3AoKTsKICAgIGludCBvZmZzZXQgPSBuYW1lVG9rZW4/LmNoYXJPZmZzZXQgPz8gZXh0ZW5zaW9uS2V5d29yZC5jaGFyT2Zmc2V0OwogICAgU3RyaW5nIG5hbWUgPSBuYW1lVG9rZW4/LmxleGVtZSA/PwogICAgICAgIC8vIFN5bnRoZXNpemVkIG5hbWUgdXNlZCBpbnRlcm5hbGx5LgogICAgICAgICdfZXh0ZW5zaW9uIyR7dW5uYW1lZEV4dGVuc2lvbkNvdW50ZXIrK30nOwogICAgcHVzaChuYW1lKTsKICAgIHB1c2gob2Zmc2V0KTsKICAgIHB1c2godHlwZVZhcmlhYmxlcyA/PyBOdWxsVmFsdWUuVHlwZVZhcmlhYmxlcyk7CiAgICBsaWJyYXJ5LmN1cnJlbnRUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyCiAgICAgICAgLm1hcmtBc0V4dGVuc2lvbkRlY2xhcmF0aW9uKG5hbWUsIG9mZnNldCwgdHlwZVZhcmlhYmxlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEV4dGVuc2lvbkRlY2xhcmF0aW9uKAogICAgICBUb2tlbiBleHRlbnNpb25LZXl3b3JkLCBUb2tlbiBvbktleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBhc3NlcnQoY2hlY2tTdGF0ZShleHRlbnNpb25LZXl3b3JkLCBbCiAgICAgIHVuaW9uT2ZLaW5kcyhbVmFsdWVLaW5kLlBhcnNlclJlY292ZXJ5LCBWYWx1ZUtpbmQuVHlwZUJ1aWxkZXJdKSwKICAgICAgVmFsdWVLaW5kLlR5cGVWYXJpYWJsZUxpc3RPck51bGwsCiAgICAgIFZhbHVlS2luZC5JbnRlZ2VyLAogICAgICBWYWx1ZUtpbmQuTmFtZU9yTnVsbCwKICAgICAgVmFsdWVLaW5kLk1ldGFkYXRhTGlzdE9yTnVsbAogICAgXSkpOwogICAgZGVidWdFdmVudCgiZW5kRXh0ZW5zaW9uRGVjbGFyYXRpb24iKTsKICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCA9IGdldERvY3VtZW50YXRpb25Db21tZW50KGV4dGVuc2lvbktleXdvcmQpOwogICAgVHlwZUJ1aWxkZXIgc3VwZXJ0eXBlID0gcG9wKCk7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMgPSBwb3AoTnVsbFZhbHVlLlR5cGVWYXJpYWJsZXMpOwogICAgaW50IG5hbWVPZmZzZXQgPSBwb3AoKTsKICAgIFN0cmluZyBuYW1lID0gcG9wKE51bGxWYWx1ZS5OYW1lKTsKICAgIGlmIChuYW1lID09IG51bGwpIHsKICAgICAgbmFtZU9mZnNldCA9IGV4dGVuc2lvbktleXdvcmQuY2hhck9mZnNldDsKICAgICAgbmFtZSA9ICckbmFtZU9mZnNldCc7CiAgICB9CiAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEgPSBwb3AoTnVsbFZhbHVlLk1ldGFkYXRhKTsKICAgIGNoZWNrRW1wdHkoZXh0ZW5zaW9uS2V5d29yZC5jaGFyT2Zmc2V0KTsKICAgIGludCBzdGFydE9mZnNldCA9IG1ldGFkYXRhID09IG51bGwKICAgICAgICA/IGV4dGVuc2lvbktleXdvcmQuY2hhck9mZnNldAogICAgICAgIDogbWV0YWRhdGEuZmlyc3QuY2hhck9mZnNldDsKICAgIGxpYnJhcnkuYWRkRXh0ZW5zaW9uRGVjbGFyYXRpb24oCiAgICAgICAgZG9jdW1lbnRhdGlvbkNvbW1lbnQsCiAgICAgICAgbWV0YWRhdGEsCiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3VwcG9ydCBtb2RpZmllcnMgb24gZXh0ZW5zaW9ucz8KICAgICAgICAwLAogICAgICAgIG5hbWUsCiAgICAgICAgdHlwZVZhcmlhYmxlcywKICAgICAgICBzdXBlcnR5cGUsCiAgICAgICAgc3RhcnRPZmZzZXQsCiAgICAgICAgbmFtZU9mZnNldCwKICAgICAgICBlbmRUb2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIFByb2NlZHVyZUtpbmQgY29tcHV0ZVByb2NlZHVyZUtpbmQoVG9rZW4gdG9rZW4pIHsKICAgIGlmICh0b2tlbiA9PSBudWxsKSByZXR1cm4gUHJvY2VkdXJlS2luZC5NZXRob2Q7CiAgICBpZiAob3B0aW9uYWwoImdldCIsIHRva2VuKSkgcmV0dXJuIFByb2NlZHVyZUtpbmQuR2V0dGVyOwogICAgaWYgKG9wdGlvbmFsKCJzZXQiLCB0b2tlbikpIHJldHVybiBQcm9jZWR1cmVLaW5kLlNldHRlcjsKICAgIHJldHVybiB1bmhhbmRsZWQoCiAgICAgICAgdG9rZW4ubGV4ZW1lLCAiY29tcHV0ZVByb2NlZHVyZUtpbmQiLCB0b2tlbi5jaGFyT2Zmc2V0LCB1cmkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblRvcExldmVsTWV0aG9kKFRva2VuIGxhc3RDb25zdW1lZCwgVG9rZW4gZXh0ZXJuYWxUb2tlbikgewogICAgbGlicmFyeS5iZWdpbk5lc3RlZERlY2xhcmF0aW9uKAogICAgICAgIFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQudG9wTGV2ZWxNZXRob2QsICIjbWV0aG9kIiwKICAgICAgICBoYXNNZW1iZXJzOiBmYWxzZSk7CiAgICBwdXNoKGV4dGVybmFsVG9rZW4gIT0gbnVsbCA/IGV4dGVybmFsTWFzayA6IDApOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUb3BMZXZlbE1ldGhvZChUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBnZXRPclNldCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImVuZFRvcExldmVsTWV0aG9kIik7CiAgICBNZXRob2RCb2R5IGtpbmQgPSBwb3AoKTsKICAgIExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4gZm9ybWFscyA9IHBvcCgpOwogICAgaW50IGZvcm1hbHNPZmZzZXQgPSBwb3AoKTsKICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcyA9IHBvcCgpOwogICAgaW50IGNoYXJPZmZzZXQgPSBwb3AoKTsKICAgIE9iamVjdCBuYW1lID0gcG9wKCk7CiAgICBUeXBlQnVpbGRlciByZXR1cm5UeXBlID0gcG9wKCk7CiAgICBib29sIGlzQWJzdHJhY3QgPSBraW5kID09IE1ldGhvZEJvZHkuQWJzdHJhY3Q7CiAgICBpZiAoZ2V0T3JTZXQgIT0gbnVsbCAmJiBvcHRpb25hbCgic2V0IiwgZ2V0T3JTZXQpKSB7CiAgICAgIGlmIChmb3JtYWxzID09IG51bGwgfHwgZm9ybWFscy5sZW5ndGggIT0gMSkgewogICAgICAgIC8vIFRoaXMgaXNuJ3QgYWJzdHJhY3QgYXMgd2UnbGwgYWRkIGFuIGVycm9yLXJlY292ZXJ5IG5vZGUgaW4KICAgICAgICAvLyBbQm9keUJ1aWxkZXIuZmluaXNoRnVuY3Rpb25dLgogICAgICAgIGlzQWJzdHJhY3QgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaW50IG1vZGlmaWVycyA9IHBvcCgpOwogICAgaWYgKGlzQWJzdHJhY3QpIHsKICAgICAgbW9kaWZpZXJzIHw9IGFic3RyYWN0TWFzazsKICAgIH0KICAgIGlmIChuYXRpdmVNZXRob2ROYW1lICE9IG51bGwpIHsKICAgICAgbW9kaWZpZXJzIHw9IGV4dGVybmFsTWFzazsKICAgIH0KICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSA9IHBvcCgpOwogICAgY2hlY2tFbXB0eShiZWdpblRva2VuLmNoYXJPZmZzZXQpOwogICAgbGlicmFyeQogICAgICAgIC5lbmROZXN0ZWREZWNsYXJhdGlvbihUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLnRvcExldmVsTWV0aG9kLCAiI21ldGhvZCIpCiAgICAgICAgLnJlc29sdmVUeXBlcyh0eXBlVmFyaWFibGVzLCBsaWJyYXJ5KTsKICAgIGlmIChuYW1lIGlzIFBhcnNlclJlY292ZXJ5KSByZXR1cm47CiAgICBmaW5hbCBpbnQgc3RhcnRDaGFyT2Zmc2V0ID0KICAgICAgICBtZXRhZGF0YSA9PSBudWxsID8gYmVnaW5Ub2tlbi5jaGFyT2Zmc2V0IDogbWV0YWRhdGEuZmlyc3QuY2hhck9mZnNldDsKICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCA9IGdldERvY3VtZW50YXRpb25Db21tZW50KGJlZ2luVG9rZW4pOwogICAgbGlicmFyeS5hZGRQcm9jZWR1cmUoCiAgICAgICAgZG9jdW1lbnRhdGlvbkNvbW1lbnQsCiAgICAgICAgbWV0YWRhdGEsCiAgICAgICAgbW9kaWZpZXJzLAogICAgICAgIHJldHVyblR5cGUsCiAgICAgICAgbmFtZSwKICAgICAgICB0eXBlVmFyaWFibGVzLAogICAgICAgIGZvcm1hbHMsCiAgICAgICAgY29tcHV0ZVByb2NlZHVyZUtpbmQoZ2V0T3JTZXQpLAogICAgICAgIHN0YXJ0Q2hhck9mZnNldCwKICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgIGZvcm1hbHNPZmZzZXQsCiAgICAgICAgZW5kVG9rZW4uY2hhck9mZnNldCwKICAgICAgICBuYXRpdmVNZXRob2ROYW1lLAogICAgICAgIGlzVG9wTGV2ZWw6IHRydWUpOwogICAgbmF0aXZlTWV0aG9kTmFtZSA9IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keShUb2tlbiBuYXRpdmVUb2tlbiwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBkZWJ1Z0V2ZW50KCJOYXRpdmVGdW5jdGlvbkJvZHkiKTsKICAgIGlmIChuYXRpdmVNZXRob2ROYW1lICE9IG51bGwpIHsKICAgICAgcHVzaChNZXRob2RCb2R5LlJlZ3VsYXIpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChNZXRob2RCb2R5LkFic3RyYWN0KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTmF0aXZlRnVuY3Rpb25Cb2R5SWdub3JlZChUb2tlbiBuYXRpdmVUb2tlbiwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBkZWJ1Z0V2ZW50KCJOYXRpdmVGdW5jdGlvbkJvZHlJZ25vcmVkIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keVNraXBwZWQoVG9rZW4gbmF0aXZlVG9rZW4sIFRva2VuIHNlbWljb2xvbikgewogICAgaWYgKCFlbmFibGVOYXRpdmUpIHsKICAgICAgc3VwZXIuaGFuZGxlUmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgIG1lc3NhZ2VFeHBlY3RlZEJsb2NrVG9Ta2lwLCBuYXRpdmVUb2tlbiwgbmF0aXZlVG9rZW4pOwogICAgfQogICAgcHVzaChNZXRob2RCb2R5LlJlZ3VsYXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb0Z1bmN0aW9uQm9keShUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiTm9GdW5jdGlvbkJvZHkiKTsKICAgIGlmIChuYXRpdmVNZXRob2ROYW1lICE9IG51bGwpIHsKICAgICAgcHVzaChNZXRob2RCb2R5LlJlZ3VsYXIpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChNZXRob2RCb2R5LkFic3RyYWN0KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRnVuY3Rpb25Cb2R5U2tpcHBlZChUb2tlbiB0b2tlbiwgYm9vbCBpc0V4cHJlc3Npb25Cb2R5KSB7CiAgICBkZWJ1Z0V2ZW50KCJoYW5kbGVGdW5jdGlvbkJvZHlTa2lwcGVkIik7CiAgICBwdXNoKE1ldGhvZEJvZHkuUmVndWxhcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luTWV0aG9kKFRva2VuIGV4dGVybmFsVG9rZW4sIFRva2VuIHN0YXRpY1Rva2VuLCBUb2tlbiBjb3ZhcmlhbnRUb2tlbiwKICAgICAgVG9rZW4gdmFyRmluYWxPckNvbnN0LCBUb2tlbiBnZXRPclNldCwgVG9rZW4gbmFtZSkgewogICAgaW5Db25zdHJ1Y3RvciA9CiAgICAgICAgbmFtZT8ubGV4ZW1lID09IGxpYnJhcnkuY3VycmVudFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIubmFtZSAmJgogICAgICAgICAgICBnZXRPclNldCA9PSBudWxsOwogICAgTGlzdDxNb2RpZmllcj4gbW9kaWZpZXJzOwogICAgaWYgKGV4dGVybmFsVG9rZW4gIT0gbnVsbCkgewogICAgICBtb2RpZmllcnMgPz89IDxNb2RpZmllcj5bXTsKICAgICAgbW9kaWZpZXJzLmFkZChFeHRlcm5hbCk7CiAgICB9CiAgICBpZiAoc3RhdGljVG9rZW4gIT0gbnVsbCkgewogICAgICBpZiAoaW5Db25zdHJ1Y3RvcikgewogICAgICAgIGhhbmRsZVJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgIG1lc3NhZ2VTdGF0aWNDb25zdHJ1Y3Rvciwgc3RhdGljVG9rZW4sIHN0YXRpY1Rva2VuKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBtb2RpZmllcnMgPz89IDxNb2RpZmllcj5bXTsKICAgICAgICBtb2RpZmllcnMuYWRkKFN0YXRpYyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChjb3ZhcmlhbnRUb2tlbiAhPSBudWxsKSB7CiAgICAgIG1vZGlmaWVycyA/Pz0gPE1vZGlmaWVyPltdOwogICAgICBtb2RpZmllcnMuYWRkKENvdmFyaWFudCk7CiAgICB9CiAgICBpZiAodmFyRmluYWxPckNvbnN0ICE9IG51bGwpIHsKICAgICAgU3RyaW5nIGxleGVtZSA9IHZhckZpbmFsT3JDb25zdC5sZXhlbWU7CiAgICAgIGlmIChpZGVudGljYWwoJ3ZhcicsIGxleGVtZSkpIHsKICAgICAgICBtb2RpZmllcnMgPz89IDxNb2RpZmllcj5bXTsKICAgICAgICBtb2RpZmllcnMuYWRkKFZhcik7CiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCdmaW5hbCcsIGxleGVtZSkpIHsKICAgICAgICBtb2RpZmllcnMgPz89IDxNb2RpZmllcj5bXTsKICAgICAgICBtb2RpZmllcnMuYWRkKEZpbmFsKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBtb2RpZmllcnMgPz89IDxNb2RpZmllcj5bXTsKICAgICAgICBtb2RpZmllcnMuYWRkKENvbnN0KTsKICAgICAgfQogICAgfQogICAgcHVzaCh2YXJGaW5hbE9yQ29uc3Q/LmNoYXJPZmZzZXQgPz8gLTEpOwogICAgcHVzaChtb2RpZmllcnMgPz8gTnVsbFZhbHVlLk1vZGlmaWVycyk7CiAgICBsaWJyYXJ5LmJlZ2luTmVzdGVkRGVjbGFyYXRpb24oCiAgICAgICAgVHlwZVBhcmFtZXRlclNjb3BlS2luZC5zdGF0aWNPckluc3RhbmNlTWV0aG9kT3JDb25zdHJ1Y3RvciwgIiNtZXRob2QiLAogICAgICAgIGhhc01lbWJlcnM6IGZhbHNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ2xhc3NNZXRob2QoVG9rZW4gZ2V0T3JTZXQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGJlZ2luUGFyYW0sCiAgICAgIFRva2VuIGJlZ2luSW5pdGlhbGl6ZXJzLCBUb2tlbiBlbmRUb2tlbikgewogICAgYXNzZXJ0KGNoZWNrU3RhdGUoYmVnaW5Ub2tlbiwgW1ZhbHVlS2luZC5NZXRob2RCb2R5XSkpOwogICAgZGVidWdFdmVudCgiTWV0aG9kIik7CiAgICBNZXRob2RCb2R5IGJvZHlLaW5kID0gcG9wKCk7CiAgICBpZiAoYm9keUtpbmQgPT0gTWV0aG9kQm9keS5SZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KSB7CiAgICAgIC8vIFRoaXMgd2lsbCBjYXVzZSBhbiBlcnJvciBsYXRlci4KICAgICAgcG9wKCk7CiAgICB9CiAgICBhc3NlcnQoY2hlY2tTdGF0ZShiZWdpblRva2VuLCBbCiAgICAgIFZhbHVlS2luZC5Gb3JtYWxzT3JOdWxsLAogICAgICBWYWx1ZUtpbmQuSW50ZWdlciwgLy8gZm9ybWFscyBvZmZzZXQKICAgICAgVmFsdWVLaW5kLlR5cGVWYXJpYWJsZUxpc3RPck51bGwsCiAgICAgIFZhbHVlS2luZC5JbnRlZ2VyLCAvLyBuYW1lIG9mZnNldAogICAgICB1bmlvbk9mS2luZHMoWwogICAgICAgIFZhbHVlS2luZC5OYW1lLAogICAgICAgIFZhbHVlS2luZC5RdWFsaWZpZWROYW1lLAogICAgICAgIFZhbHVlS2luZC5PcGVyYXRvciwKICAgICAgICBWYWx1ZUtpbmQuUGFyc2VyUmVjb3ZlcnksCiAgICAgIF0pLAogICAgICBWYWx1ZUtpbmQuVHlwZUJ1aWxkZXJPck51bGwsCiAgICAgIFZhbHVlS2luZC5Nb2RpZmllcnNPck51bGwsCiAgICAgIFZhbHVlS2luZC5JbnRlZ2VyLCAvLyB2YXIvZmluYWwvY29uc3Qgb2Zmc2V0CiAgICAgIFZhbHVlS2luZC5NZXRhZGF0YUxpc3RPck51bGwsCiAgICBdKSk7CiAgICBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+IGZvcm1hbHMgPSBwb3AoKTsKICAgIGludCBmb3JtYWxzT2Zmc2V0ID0gcG9wKCk7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMgPSBwb3AoKTsKICAgIGludCBjaGFyT2Zmc2V0ID0gcG9wKCk7CiAgICBPYmplY3QgbmFtZU9yT3BlcmF0b3IgPSBwb3AoKTsKICAgIGlmIChPcGVyYXRvci5zdWJ0cmFjdCA9PSBuYW1lT3JPcGVyYXRvciAmJiBmb3JtYWxzID09IG51bGwpIHsKICAgICAgbmFtZU9yT3BlcmF0b3IgPSBPcGVyYXRvci51bmFyeU1pbnVzOwogICAgfQogICAgT2JqZWN0IG5hbWU7CiAgICBQcm9jZWR1cmVLaW5kIGtpbmQ7CiAgICBpZiAobmFtZU9yT3BlcmF0b3IgaXMgT3BlcmF0b3IpIHsKICAgICAgbmFtZSA9IG9wZXJhdG9yVG9TdHJpbmcobmFtZU9yT3BlcmF0b3IpOwogICAgICBraW5kID0gUHJvY2VkdXJlS2luZC5PcGVyYXRvcjsKICAgICAgaW50IHJlcXVpcmVkQXJndW1lbnRDb3VudCA9IG9wZXJhdG9yUmVxdWlyZWRBcmd1bWVudENvdW50KG5hbWVPck9wZXJhdG9yKTsKICAgICAgaWYgKChmb3JtYWxzPy5sZW5ndGggPz8gMCkgIT0gcmVxdWlyZWRBcmd1bWVudENvdW50KSB7CiAgICAgICAgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlOwogICAgICAgIHN3aXRjaCAocmVxdWlyZWRBcmd1bWVudENvdW50KSB7CiAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGVPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMDsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICBpZiAoT3BlcmF0b3Iuc3VidHJhY3QgPT0gbmFtZU9yT3BlcmF0b3IpIHsKICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlT3BlcmF0b3JNaW51c1BhcmFtZXRlck1pc21hdGNoOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGVPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKCiAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGVPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMjsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgdW5oYW5kbGVkKCIkcmVxdWlyZWRBcmd1bWVudENvdW50IiwgIm9wZXJhdG9yUmVxdWlyZWRBcmd1bWVudENvdW50IiwKICAgICAgICAgICAgICAgIGNoYXJPZmZzZXQsIHVyaSk7CiAgICAgICAgfQogICAgICAgIFN0cmluZyBzdHJpbmcgPSBuYW1lOwogICAgICAgIGFkZFByb2JsZW0odGVtcGxhdGUud2l0aEFyZ3VtZW50cyhuYW1lKSwgY2hhck9mZnNldCwgc3RyaW5nLmxlbmd0aCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGZvcm1hbHMgIT0gbnVsbCkgewogICAgICAgICAgZm9yIChGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIGZvcm1hbCBpbiBmb3JtYWxzKSB7CiAgICAgICAgICAgIGlmICghZm9ybWFsLmlzUmVxdWlyZWQpIHsKICAgICAgICAgICAgICBhZGRQcm9ibGVtKG1lc3NhZ2VPcGVyYXRvcldpdGhPcHRpb25hbEZvcm1hbHMsIGZvcm1hbC5jaGFyT2Zmc2V0LAogICAgICAgICAgICAgICAgICBmb3JtYWwubmFtZS5sZW5ndGgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICBuYW1lID0gbmFtZU9yT3BlcmF0b3I7CiAgICAgIGtpbmQgPSBjb21wdXRlUHJvY2VkdXJlS2luZChnZXRPclNldCk7CiAgICB9CiAgICBUeXBlQnVpbGRlciByZXR1cm5UeXBlID0gcG9wKCk7CiAgICBib29sIGlzQWJzdHJhY3QgPSBib2R5S2luZCA9PSBNZXRob2RCb2R5LkFic3RyYWN0OwogICAgaWYgKGdldE9yU2V0ICE9IG51bGwgJiYgb3B0aW9uYWwoInNldCIsIGdldE9yU2V0KSkgewogICAgICBpZiAoZm9ybWFscyA9PSBudWxsIHx8IGZvcm1hbHMubGVuZ3RoICE9IDEpIHsKICAgICAgICAvLyBUaGlzIGlzbid0IGFic3RyYWN0IGFzIHdlJ2xsIGFkZCBhbiBlcnJvci1yZWNvdmVyeSBub2RlIGluCiAgICAgICAgLy8gW0JvZHlCdWlsZGVyLmZpbmlzaEZ1bmN0aW9uXS4KICAgICAgICBpc0Fic3RyYWN0ID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGludCBtb2RpZmllcnMgPSBNb2RpZmllci52YWxpZGF0ZShwb3AoKSwgaXNBYnN0cmFjdDogaXNBYnN0cmFjdCk7CiAgICBpZiAobmF0aXZlTWV0aG9kTmFtZSAhPSBudWxsKSB7CiAgICAgIG1vZGlmaWVycyB8PSBleHRlcm5hbE1hc2s7CiAgICB9CiAgICBpZiAoKG1vZGlmaWVycyAmIGV4dGVybmFsTWFzaykgIT0gMCkgewogICAgICBtb2RpZmllcnMgJj0gfmFic3RyYWN0TWFzazsKICAgIH0KICAgIGJvb2wgaXNDb25zdCA9IChtb2RpZmllcnMgJiBjb25zdE1hc2spICE9IDA7CiAgICBpbnQgdmFyRmluYWxPckNvbnN0T2Zmc2V0ID0gcG9wKCk7CiAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEgPSBwb3AoKTsKICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCA9IGdldERvY3VtZW50YXRpb25Db21tZW50KGJlZ2luVG9rZW4pOwoKICAgIFR5cGVQYXJhbWV0ZXJTY29wZUJ1aWxkZXIgZGVjbGFyYXRpb25CdWlsZGVyID0gbGlicmFyeS5lbmROZXN0ZWREZWNsYXJhdGlvbigKICAgICAgICBUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLnN0YXRpY09ySW5zdGFuY2VNZXRob2RPckNvbnN0cnVjdG9yLCAiI21ldGhvZCIpOwogICAgaWYgKG5hbWUgaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgbmF0aXZlTWV0aG9kTmFtZSA9IG51bGw7CiAgICAgIGluQ29uc3RydWN0b3IgPSBmYWxzZTsKICAgICAgZGVjbGFyYXRpb25CdWlsZGVyLnJlc29sdmVUeXBlcyh0eXBlVmFyaWFibGVzLCBsaWJyYXJ5KTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIFN0cmluZyBjb25zdHJ1Y3Rvck5hbWUgPQogICAgICAgIGtpbmQgPT0gUHJvY2VkdXJlS2luZC5HZXR0ZXIgfHwga2luZCA9PSBQcm9jZWR1cmVLaW5kLlNldHRlcgogICAgICAgICAgICA/IG51bGwKICAgICAgICAgICAgOiBsaWJyYXJ5LmNvbXB1dGVBbmRWYWxpZGF0ZUNvbnN0cnVjdG9yTmFtZShuYW1lLCBjaGFyT2Zmc2V0KTsKICAgIGlmIChjb25zdHJ1Y3Rvck5hbWUgPT0gbnVsbCAmJgogICAgICAgIChtb2RpZmllcnMgJiBzdGF0aWNNYXNrKSA9PSAwICYmCiAgICAgICAgbGlicmFyeS5jdXJyZW50VHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlci5raW5kID09CiAgICAgICAgICAgIFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQuZXh0ZW5zaW9uRGVjbGFyYXRpb24pIHsKICAgICAgVHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlciBleHRlbnNpb24gPQogICAgICAgICAgbGlicmFyeS5jdXJyZW50VHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlcjsKICAgICAgTWFwPFR5cGVWYXJpYWJsZUJ1aWxkZXIsIFR5cGVCdWlsZGVyPiBzdWJzdGl0dXRpb247CiAgICAgIGlmIChleHRlbnNpb24udHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgICAgLy8gV2Ugc3ludGhlc2l6ZSB0aGUgbmFtZXMgb2YgdGhlIGdlbmVyYXRlZCBbVHlwZVBhcmFtZXRlcl1zLCBpLmUuCiAgICAgICAgLy8gcmVuYW1lICdUJyB0byAnI1QnLiBXZSBjYW5ub3QgZG8gaXQgb24gdGhlIGJ1aWxkZXJzIGJlY2F1c2UgdGhlaXIKICAgICAgICAvLyBuYW1lcyBhcmUgdXNlZCB0byBjcmVhdGUgdGhlIHNjb3BlLgogICAgICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gc3ludGhlc2l6ZWRUeXBlVmFyaWFibGVzID0gbGlicmFyeQogICAgICAgICAgICAuY29weVR5cGVWYXJpYWJsZXMoZXh0ZW5zaW9uLnR5cGVWYXJpYWJsZXMsIGRlY2xhcmF0aW9uQnVpbGRlciwKICAgICAgICAgICAgICAgIGlzRXh0ZW5zaW9uVHlwZVBhcmFtZXRlcjogdHJ1ZSk7CiAgICAgICAgc3Vic3RpdHV0aW9uID0ge307CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzeW50aGVzaXplZFR5cGVWYXJpYWJsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHN1YnN0aXR1dGlvbltleHRlbnNpb24udHlwZVZhcmlhYmxlc1tpXV0gPQogICAgICAgICAgICAgIG5ldyBOYW1lZFR5cGVCdWlsZGVyLmZyb21UeXBlRGVjbGFyYXRpb25CdWlsZGVyKAogICAgICAgICAgICAgICAgICBzeW50aGVzaXplZFR5cGVWYXJpYWJsZXNbaV0pOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgICAgICB0eXBlVmFyaWFibGVzID0gc3ludGhlc2l6ZWRUeXBlVmFyaWFibGVzLi5hZGRBbGwodHlwZVZhcmlhYmxlcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHR5cGVWYXJpYWJsZXMgPSBzeW50aGVzaXplZFR5cGVWYXJpYWJsZXM7CiAgICAgICAgfQogICAgICB9CiAgICAgIExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4gc3ludGhlc2l6ZWRGb3JtYWxzID0gW107CiAgICAgIFR5cGVCdWlsZGVyIHRoaXNUeXBlID0gZXh0ZW5zaW9uLmV4dGVuc2lvblRoaXNUeXBlOwogICAgICBpZiAoc3Vic3RpdHV0aW9uICE9IG51bGwpIHsKICAgICAgICB0aGlzVHlwZSA9IHRoaXNUeXBlLnN1YnN0KHN1YnN0aXR1dGlvbik7CiAgICAgICAgZGVjbGFyYXRpb25CdWlsZGVyLmFkZFR5cGUobmV3IFVucmVzb2x2ZWRUeXBlKHRoaXNUeXBlLCAtMSwgbnVsbCkpOwogICAgICB9CiAgICAgIHN5bnRoZXNpemVkRm9ybWFscy5hZGQobmV3IEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIoCiAgICAgICAgICBudWxsLCBmaW5hbE1hc2ssIHRoaXNUeXBlLCAiI3RoaXMiLCBudWxsLCBjaGFyT2Zmc2V0KSk7CiAgICAgIGlmIChmb3JtYWxzICE9IG51bGwpIHsKICAgICAgICBzeW50aGVzaXplZEZvcm1hbHMuYWRkQWxsKGZvcm1hbHMpOwogICAgICB9CiAgICAgIGZvcm1hbHMgPSBzeW50aGVzaXplZEZvcm1hbHM7CiAgICB9CgogICAgZGVjbGFyYXRpb25CdWlsZGVyLnJlc29sdmVUeXBlcyh0eXBlVmFyaWFibGVzLCBsaWJyYXJ5KTsKICAgIGlmIChjb25zdHJ1Y3Rvck5hbWUgIT0gbnVsbCkgewogICAgICBpZiAoaXNDb25zdCAmJiBib2R5S2luZCAhPSBNZXRob2RCb2R5LkFic3RyYWN0KSB7CiAgICAgICAgYWRkUHJvYmxlbShtZXNzYWdlQ29uc3RDb25zdHJ1Y3RvcldpdGhCb2R5LCB2YXJGaW5hbE9yQ29uc3RPZmZzZXQsIDUpOwogICAgICAgIG1vZGlmaWVycyAmPSB+Y29uc3RNYXNrOwogICAgICB9CiAgICAgIGlmIChyZXR1cm5UeXBlICE9IG51bGwpIHsKICAgICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogUmVwb3J0IHRoaXMgZXJyb3Igb24gdGhlIHJldHVybiB0eXBlCiAgICAgICAgaGFuZGxlUmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgbWVzc2FnZUNvbnN0cnVjdG9yV2l0aFJldHVyblR5cGUsIGJlZ2luVG9rZW4sIGJlZ2luVG9rZW4pOwogICAgICAgIHJldHVyblR5cGUgPSBudWxsOwogICAgICB9CiAgICAgIGZpbmFsIGludCBzdGFydENoYXJPZmZzZXQgPQogICAgICAgICAgbWV0YWRhdGEgPT0gbnVsbCA/IGJlZ2luVG9rZW4uY2hhck9mZnNldCA6IG1ldGFkYXRhLmZpcnN0LmNoYXJPZmZzZXQ7CiAgICAgIGxpYnJhcnkuYWRkQ29uc3RydWN0b3IoCiAgICAgICAgICBkb2N1bWVudGF0aW9uQ29tbWVudCwKICAgICAgICAgIG1ldGFkYXRhLAogICAgICAgICAgbW9kaWZpZXJzLAogICAgICAgICAgcmV0dXJuVHlwZSwKICAgICAgICAgIG5hbWUsCiAgICAgICAgICBjb25zdHJ1Y3Rvck5hbWUsCiAgICAgICAgICB0eXBlVmFyaWFibGVzLAogICAgICAgICAgZm9ybWFscywKICAgICAgICAgIHN0YXJ0Q2hhck9mZnNldCwKICAgICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgICBmb3JtYWxzT2Zmc2V0LAogICAgICAgICAgZW5kVG9rZW4uY2hhck9mZnNldCwKICAgICAgICAgIG5hdGl2ZU1ldGhvZE5hbWUsCiAgICAgICAgICBiZWdpbkluaXRpYWxpemVyczogYmVnaW5Jbml0aWFsaXplcnMpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKGlzQ29uc3QpIHsKICAgICAgICBhZGRQcm9ibGVtKG1lc3NhZ2VDb25zdE1ldGhvZCwgdmFyRmluYWxPckNvbnN0T2Zmc2V0LCA1KTsKICAgICAgICBtb2RpZmllcnMgJj0gfmNvbnN0TWFzazsKICAgICAgfQogICAgICBmaW5hbCBpbnQgc3RhcnRDaGFyT2Zmc2V0ID0KICAgICAgICAgIG1ldGFkYXRhID09IG51bGwgPyBiZWdpblRva2VuLmNoYXJPZmZzZXQgOiBtZXRhZGF0YS5maXJzdC5jaGFyT2Zmc2V0OwogICAgICBsaWJyYXJ5LmFkZFByb2NlZHVyZSgKICAgICAgICAgIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICAgICAgbWV0YWRhdGEsCiAgICAgICAgICBtb2RpZmllcnMsCiAgICAgICAgICByZXR1cm5UeXBlLAogICAgICAgICAgbmFtZSwKICAgICAgICAgIHR5cGVWYXJpYWJsZXMsCiAgICAgICAgICBmb3JtYWxzLAogICAgICAgICAga2luZCwKICAgICAgICAgIHN0YXJ0Q2hhck9mZnNldCwKICAgICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgICBmb3JtYWxzT2Zmc2V0LAogICAgICAgICAgZW5kVG9rZW4uY2hhck9mZnNldCwKICAgICAgICAgIG5hdGl2ZU1ldGhvZE5hbWUsCiAgICAgICAgICBpc1RvcExldmVsOiBmYWxzZSk7CiAgICB9CiAgICBuYXRpdmVNZXRob2ROYW1lID0gbnVsbDsKICAgIGluQ29uc3RydWN0b3IgPSBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTmFtZWRNaXhpbkFwcGxpY2F0aW9uV2l0aENsYXVzZShUb2tlbiB3aXRoS2V5d29yZCkgewogICAgZGVidWdFdmVudCgiTmFtZWRNaXhpbkFwcGxpY2F0aW9uV2l0aENsYXVzZSIpOwogICAgT2JqZWN0IG1peGlucyA9IHBvcCgpOwogICAgT2JqZWN0IHN1cGVydHlwZSA9IHBvcCgpOwogICAgaWYgKG1peGlucyBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBwdXNoKG1peGlucyk7CiAgICB9IGVsc2UgaWYgKHN1cGVydHlwZSBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBwdXNoKHN1cGVydHlwZSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKGxpYnJhcnkuYWRkTWl4aW5BcHBsaWNhdGlvbigKICAgICAgICAgIHN1cGVydHlwZSwgbWl4aW5zLCB3aXRoS2V5d29yZC5jaGFyT2Zmc2V0KSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZE5hbWVkTWl4aW5BcHBsaWNhdGlvbihUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBjbGFzc0tleXdvcmQsCiAgICAgIFRva2VuIGVxdWFscywgVG9rZW4gaW1wbGVtZW50c0tleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmROYW1lZE1peGluQXBwbGljYXRpb24iKTsKICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCA9IGdldERvY3VtZW50YXRpb25Db21tZW50KGJlZ2luVG9rZW4pOwogICAgTGlzdDxUeXBlQnVpbGRlcj4gaW50ZXJmYWNlcyA9IHBvcElmTm90TnVsbChpbXBsZW1lbnRzS2V5d29yZCk7CiAgICBPYmplY3QgbWl4aW5BcHBsaWNhdGlvbiA9IHBvcCgpOwogICAgaW50IG1vZGlmaWVycyA9IHBvcCgpOwogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzID0gcG9wKCk7CiAgICBpbnQgY2hhck9mZnNldCA9IHBvcCgpOwogICAgT2JqZWN0IG5hbWUgPSBwb3AoKTsKICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSA9IHBvcCgpOwogICAgY2hlY2tFbXB0eShiZWdpblRva2VuLmNoYXJPZmZzZXQpOwogICAgaWYgKG5hbWUgaXMgUGFyc2VyUmVjb3ZlcnkgfHwgbWl4aW5BcHBsaWNhdGlvbiBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBsaWJyYXJ5LmVuZE5lc3RlZERlY2xhcmF0aW9uKAogICAgICAgICAgVHlwZVBhcmFtZXRlclNjb3BlS2luZC5uYW1lZE1peGluQXBwbGljYXRpb24sICI8c3ludGF4LWVycm9yPiIpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaW50IHN0YXJ0Q2hhck9mZnNldCA9IGJlZ2luVG9rZW4uY2hhck9mZnNldDsKICAgIGludCBjaGFyRW5kT2Zmc2V0ID0gZW5kVG9rZW4uY2hhck9mZnNldDsKICAgIGxpYnJhcnkuYWRkTmFtZWRNaXhpbkFwcGxpY2F0aW9uKAogICAgICAgIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICAgIG1ldGFkYXRhLAogICAgICAgIG5hbWUsCiAgICAgICAgdHlwZVZhcmlhYmxlcywKICAgICAgICBtb2RpZmllcnMsCiAgICAgICAgbWl4aW5BcHBsaWNhdGlvbiwKICAgICAgICBpbnRlcmZhY2VzLAogICAgICAgIHN0YXJ0Q2hhck9mZnNldCwKICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgIGNoYXJFbmRPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUeXBlQXJndW1lbnRzKGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlR5cGVBcmd1bWVudHMiKTsKICAgIHB1c2goY29uc3QgRml4ZWROdWxsYWJsZUxpc3Q8VHlwZUJ1aWxkZXI+KCkucG9wKHN0YWNrLCBjb3VudCkgPz8KICAgICAgICBOdWxsVmFsdWUuVHlwZUFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUludmFsaWRUeXBlQXJndW1lbnRzKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJJbnZhbGlkVHlwZUFyZ3VtZW50cyIpOwogICAgcG9wKE51bGxWYWx1ZS5UeXBlQXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU2NyaXB0KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJTY3JpcHQiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9uTnVsbEFzc2VydEV4cHJlc3Npb24oVG9rZW4gYmFuZykgewogICAgaWYgKCFsaWJyYXJ5LmxvYWRlci50YXJnZXQuZW5hYmxlTm9uTnVsbGFibGUpIHsKICAgICAgcmVwb3J0Tm9uTnVsbEFzc2VydEV4cHJlc3Npb25Ob3RFbmFibGVkKGJhbmcpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVUeXBlKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIHF1ZXN0aW9uTWFyaykgewogICAgZGVidWdFdmVudCgiVHlwZSIpOwogICAgaWYgKCFsaWJyYXJ5LmxvYWRlci50YXJnZXQuZW5hYmxlTm9uTnVsbGFibGUpIHsKICAgICAgcmVwb3J0RXJyb3JJZk51bGxhYmxlVHlwZShxdWVzdGlvbk1hcmspOwogICAgfQogICAgTGlzdDxUeXBlQnVpbGRlcj4gYXJndW1lbnRzID0gcG9wKCk7CiAgICBpbnQgY2hhck9mZnNldCA9IHBvcCgpOwogICAgT2JqZWN0IG5hbWUgPSBwb3AoKTsKICAgIGlmIChuYW1lIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIHB1c2gobmFtZSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKGxpYnJhcnkuYWRkTmFtZWRUeXBlKG5hbWUsIGFyZ3VtZW50cywgY2hhck9mZnNldCkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUeXBlTGlzdChpbnQgY291bnQpIHsKICAgIGRlYnVnRXZlbnQoIlR5cGVMaXN0Iik7CiAgICBwdXNoKGNvbnN0IEZpeGVkTnVsbGFibGVMaXN0PE5hbWVkVHlwZUJ1aWxkZXI+KCkucG9wKHN0YWNrLCBjb3VudCkgPz8KICAgICAgICBuZXcgUGFyc2VyUmVjb3ZlcnkoLTEpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9UeXBlVmFyaWFibGVzKFRva2VuIHRva2VuKSB7CiAgICBzdXBlci5oYW5kbGVOb1R5cGVWYXJpYWJsZXModG9rZW4pOwogICAgaW5Db25zdHJ1Y3Rvck5hbWUgPSBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVm9pZEtleXdvcmQoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlZvaWRLZXl3b3JkIik7CiAgICBwdXNoKGxpYnJhcnkuYWRkVm9pZFR5cGUodG9rZW4uY2hhck9mZnNldCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZvcm1hbFBhcmFtZXRlcihUb2tlbiB0b2tlbiwgTWVtYmVyS2luZCBraW5kLCBUb2tlbiByZXF1aXJlZFRva2VuLAogICAgICBUb2tlbiBjb3ZhcmlhbnRUb2tlbiwgVG9rZW4gdmFyRmluYWxPckNvbnN0KSB7CiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogaGFuZGxlIHJlcXVpcmVkIHRva2VuCiAgICBpZiAoIWxpYnJhcnkubG9hZGVyLnRhcmdldC5lbmFibGVOb25OdWxsYWJsZSkgewogICAgICByZXBvcnROb25OdWxsYWJsZU1vZGlmaWVyRXJyb3IocmVxdWlyZWRUb2tlbik7CiAgICB9CiAgICBwdXNoKChjb3ZhcmlhbnRUb2tlbiAhPSBudWxsID8gY292YXJpYW50TWFzayA6IDApIHwKICAgICAgICAocmVxdWlyZWRUb2tlbiAhPSBudWxsID8gcmVxdWlyZWRNYXNrIDogMCkgfAogICAgICAgIE1vZGlmaWVyLnZhbGlkYXRlVmFyRmluYWxPckNvbnN0KHZhckZpbmFsT3JDb25zdD8ubGV4ZW1lKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZvcm1hbFBhcmFtZXRlcigKICAgICAgVG9rZW4gdGhpc0tleXdvcmQsCiAgICAgIFRva2VuIHBlcmlvZEFmdGVyVGhpcywKICAgICAgVG9rZW4gbmFtZVRva2VuLAogICAgICBUb2tlbiBpbml0aWFsaXplclN0YXJ0LAogICAgICBUb2tlbiBpbml0aWFsaXplckVuZCwKICAgICAgRm9ybWFsUGFyYW1ldGVyS2luZCBraW5kLAogICAgICBNZW1iZXJLaW5kIG1lbWJlcktpbmQpIHsKICAgIGRlYnVnRXZlbnQoIkZvcm1hbFBhcmFtZXRlciIpOwogICAgaW50IGNoYXJPZmZzZXQgPSBwb3AoKTsKICAgIE9iamVjdCBuYW1lID0gcG9wKCk7CiAgICBUeXBlQnVpbGRlciB0eXBlID0gbnVsbElmUGFyc2VyUmVjb3ZlcnkocG9wKCkpOwogICAgaW50IG1vZGlmaWVycyA9IHBvcCgpOwogICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhID0gcG9wKCk7CiAgICBpZiAobmFtZSBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBwdXNoKG5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChsaWJyYXJ5LmFkZEZvcm1hbFBhcmFtZXRlcihtZXRhZGF0YSwgbW9kaWZpZXJzLCB0eXBlLCBuYW1lLAogICAgICAgICAgdGhpc0tleXdvcmQgIT0gbnVsbCwgY2hhck9mZnNldCwgaW5pdGlhbGl6ZXJTdGFydCkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZvcm1hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZUV4cHJlc3Npb24oKSB7CiAgICAvLyBJZ25vcmVkIGZvciBub3cuCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZvcm1hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZUV4cHJlc3Npb24oKSB7CiAgICBkZWJ1Z0V2ZW50KCJGb3JtYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVFeHByZXNzaW9uIik7CiAgICAvLyBJZ25vcmVkIGZvciBub3cuCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVZhbHVlZEZvcm1hbFBhcmFtZXRlcihUb2tlbiBlcXVhbHMsIFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJWYWx1ZWRGb3JtYWxQYXJhbWV0ZXIiKTsKICAgIC8vIElnbm9yZWQgZm9yIG5vdy4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRm9ybWFsUGFyYW1ldGVyV2l0aG91dFZhbHVlKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJGb3JtYWxQYXJhbWV0ZXJXaXRob3V0VmFsdWUiKTsKICAgIC8vIElnbm9yZWQgZm9yIG5vdy4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kT3B0aW9uYWxGb3JtYWxQYXJhbWV0ZXJzKAogICAgICBpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJPcHRpb25hbEZvcm1hbFBhcmFtZXRlcnMiKTsKICAgIEZvcm1hbFBhcmFtZXRlcktpbmQga2luZCA9IG9wdGlvbmFsKCJ7IiwgYmVnaW5Ub2tlbikKICAgICAgICA/IEZvcm1hbFBhcmFtZXRlcktpbmQub3B0aW9uYWxOYW1lZAogICAgICAgIDogRm9ybWFsUGFyYW1ldGVyS2luZC5vcHRpb25hbFBvc2l0aW9uYWw7CiAgICAvLyBXaGVuIHJlY292ZXJpbmcgZnJvbSBhbiBlbXB0eSBsaXN0IG9mIG9wdGlvbmFsIGFyZ3VtZW50cywgY291bnQgbWF5IGJlCiAgICAvLyAwLiBJdCBtaWdodCBiZSBzaW1wbGVyIGlmIHRoZSBwYXJzZXIgZGlkbid0IGNhbGwgdGhpcyBtZXRob2QgaW4gdGhhdAogICAgLy8gY2FzZSwgaG93ZXZlciwgdGhlbiBbYmVnaW5PcHRpb25hbEZvcm1hbFBhcmFtZXRlcnNdIHdvdWxkbid0IGFsd2F5cyBiZQogICAgLy8gbWF0Y2hlZCBieSB0aGlzIG1ldGhvZC4KICAgIExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4gcGFyYW1ldGVycyA9CiAgICAgICAgY29uc3QgRml4ZWROdWxsYWJsZUxpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4oKS5wb3Aoc3RhY2ssIGNvdW50KTsKICAgIGlmIChwYXJhbWV0ZXJzID09IG51bGwpIHsKICAgICAgcHVzaChuZXcgUGFyc2VyUmVjb3Zlcnkob2Zmc2V0Rm9yVG9rZW4oYmVnaW5Ub2tlbikpKTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAoRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBwYXJhbWV0ZXIgaW4gcGFyYW1ldGVycykgewogICAgICAgIHBhcmFtZXRlci5raW5kID0ga2luZDsKICAgICAgfQogICAgICBwdXNoKHBhcmFtZXRlcnMpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGb3JtYWxQYXJhbWV0ZXJzKAogICAgICBpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuLCBNZW1iZXJLaW5kIGtpbmQpIHsKICAgIGRlYnVnRXZlbnQoIkZvcm1hbFBhcmFtZXRlcnMiKTsKICAgIExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4gZm9ybWFsczsKICAgIGlmIChjb3VudCA9PSAxKSB7CiAgICAgIE9iamVjdCBsYXN0ID0gcG9wKCk7CiAgICAgIGlmIChsYXN0IGlzIExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4pIHsKICAgICAgICBmb3JtYWxzID0gbGFzdDsKICAgICAgfSBlbHNlIGlmIChsYXN0IGlzISBQYXJzZXJSZWNvdmVyeSkgewogICAgICAgIGFzc2VydChsYXN0ICE9IG51bGwpOwogICAgICAgIGZvcm1hbHMgPSBuZXcgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPigxKTsKICAgICAgICBmb3JtYWxzWzBdID0gbGFzdDsKICAgICAgfQogICAgfSBlbHNlIGlmIChjb3VudCA+IDEpIHsKICAgICAgT2JqZWN0IGxhc3QgPSBwb3AoKTsKICAgICAgY291bnQtLTsKICAgICAgaWYgKGxhc3QgaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgICBkaXNjYXJkKGNvdW50KTsKICAgICAgfSBlbHNlIGlmIChsYXN0IGlzIExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4pIHsKICAgICAgICBmb3JtYWxzID0gY29uc3QgRml4ZWROdWxsYWJsZUxpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4oKQogICAgICAgICAgICAucG9wUGFkZGVkKHN0YWNrLCBjb3VudCwgbGFzdC5sZW5ndGgpOwogICAgICAgIGlmIChmb3JtYWxzICE9IG51bGwpIHsKICAgICAgICAgIGZvcm1hbHMuc2V0UmFuZ2UoY291bnQsIGZvcm1hbHMubGVuZ3RoLCBsYXN0KTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZm9ybWFscyA9IGNvbnN0IEZpeGVkTnVsbGFibGVMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+KCkKICAgICAgICAgICAgLnBvcFBhZGRlZChzdGFjaywgY291bnQsIDEpOwogICAgICAgIGlmIChmb3JtYWxzICE9IG51bGwpIHsKICAgICAgICAgIGZvcm1hbHNbY291bnRdID0gbGFzdDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChmb3JtYWxzICE9IG51bGwpIHsKICAgICAgYXNzZXJ0KGZvcm1hbHMuaXNOb3RFbXB0eSk7CiAgICAgIGlmIChmb3JtYWxzLmxlbmd0aCA9PSAyKSB7CiAgICAgICAgLy8gVGhlIG5hbWUgbWF5IGJlIG51bGwgZm9yIGdlbmVyYWxpemVkIGZ1bmN0aW9uIHR5cGVzLgogICAgICAgIGlmIChmb3JtYWxzWzBdLm5hbWUgIT0gbnVsbCAmJiBmb3JtYWxzWzBdLm5hbWUgPT0gZm9ybWFsc1sxXS5uYW1lKSB7CiAgICAgICAgICBhZGRQcm9ibGVtKAogICAgICAgICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZFBhcmFtZXRlck5hbWUud2l0aEFyZ3VtZW50cyhmb3JtYWxzWzFdLm5hbWUpLAogICAgICAgICAgICAgIGZvcm1hbHNbMV0uY2hhck9mZnNldCwKICAgICAgICAgICAgICBmb3JtYWxzWzFdLm5hbWUubGVuZ3RoLAogICAgICAgICAgICAgIGNvbnRleHQ6IFsKICAgICAgICAgICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZFBhcmFtZXRlck5hbWVDYXVzZQogICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGZvcm1hbHNbMV0ubmFtZSkKICAgICAgICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICB1cmksIGZvcm1hbHNbMF0uY2hhck9mZnNldCwgZm9ybWFsc1swXS5uYW1lLmxlbmd0aCkKICAgICAgICAgICAgICBdKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZm9ybWFscy5sZW5ndGggPiAyKSB7CiAgICAgICAgTWFwPFN0cmluZywgRm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4gc2Vlbk5hbWVzID0KICAgICAgICAgICAgPFN0cmluZywgRm9ybWFsUGFyYW1ldGVyQnVpbGRlcj57fTsKICAgICAgICBmb3IgKEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZm9ybWFsIGluIGZvcm1hbHMpIHsKICAgICAgICAgIGlmIChmb3JtYWwubmFtZSA9PSBudWxsKSBjb250aW51ZTsKICAgICAgICAgIGlmIChzZWVuTmFtZXMuY29udGFpbnNLZXkoZm9ybWFsLm5hbWUpKSB7CiAgICAgICAgICAgIGFkZFByb2JsZW0oCiAgICAgICAgICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWRQYXJhbWV0ZXJOYW1lLndpdGhBcmd1bWVudHMoZm9ybWFsLm5hbWUpLAogICAgICAgICAgICAgICAgZm9ybWFsLmNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICBmb3JtYWwubmFtZS5sZW5ndGgsCiAgICAgICAgICAgICAgICBjb250ZXh0OiBbCiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZFBhcmFtZXRlck5hbWVDYXVzZQogICAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoZm9ybWFsLm5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKHVyaSwgc2Vlbk5hbWVzW2Zvcm1hbC5uYW1lXS5jaGFyT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlZW5OYW1lc1tmb3JtYWwubmFtZV0ubmFtZS5sZW5ndGgpCiAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNlZW5OYW1lc1tmb3JtYWwubmFtZV0gPSBmb3JtYWw7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBwdXNoKGJlZ2luVG9rZW4uY2hhck9mZnNldCk7CiAgICBwdXNoKGZvcm1hbHMgPz8gTnVsbFZhbHVlLkZvcm1hbFBhcmFtZXRlcnMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb0Zvcm1hbFBhcmFtZXRlcnMoVG9rZW4gdG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgcHVzaCh0b2tlbi5jaGFyT2Zmc2V0KTsKICAgIHN1cGVyLmhhbmRsZU5vRm9ybWFsUGFyYW1ldGVycyh0b2tlbiwga2luZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEFzc2VydChUb2tlbiBhc3NlcnRLZXl3b3JkLCBBc3NlcnQga2luZCwgVG9rZW4gbGVmdFBhcmVudGhlc2lzLAogICAgICBUb2tlbiBjb21tYVRva2VuLCBUb2tlbiBzZW1pY29sb25Ub2tlbikgewogICAgZGVidWdFdmVudCgiQXNzZXJ0Iik7CiAgICAvLyBEbyBub3RoaW5nCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEVudW0oVG9rZW4gZW51bUtleXdvcmQsIFRva2VuIGxlZnRCcmFjZSwgaW50IGNvdW50KSB7CiAgICBkZWJ1Z0V2ZW50KCJFbnVtIik7CiAgICBTdHJpbmcgZG9jdW1lbnRhdGlvbkNvbW1lbnQgPSBnZXREb2N1bWVudGF0aW9uQ29tbWVudChlbnVtS2V5d29yZCk7CiAgICBMaXN0PEVudW1Db25zdGFudEluZm8+IGVudW1Db25zdGFudEluZm9zID0KICAgICAgICBjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxFbnVtQ29uc3RhbnRJbmZvPigpLnBvcChzdGFjaywgY291bnQpOwogICAgaW50IGNoYXJPZmZzZXQgPSBwb3AoKTsgLy8gaWRlbnRpZmllciBjaGFyIG9mZnNldC4KICAgIGludCBzdGFydENoYXJPZmZzZXQgPSBlbnVtS2V5d29yZC5jaGFyT2Zmc2V0OwogICAgT2JqZWN0IG5hbWUgPSBwb3AoKTsKICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSA9IHBvcCgpOwogICAgY2hlY2tFbXB0eShlbnVtS2V5d29yZC5jaGFyT2Zmc2V0KTsKICAgIGlmIChuYW1lIGlzIFBhcnNlclJlY292ZXJ5KSByZXR1cm47CiAgICBsaWJyYXJ5LmFkZEVudW0oZG9jdW1lbnRhdGlvbkNvbW1lbnQsIG1ldGFkYXRhLCBuYW1lLCBlbnVtQ29uc3RhbnRJbmZvcywKICAgICAgICBzdGFydENoYXJPZmZzZXQsIGNoYXJPZmZzZXQsIGxlZnRCcmFjZT8uZW5kR3JvdXA/LmNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZ1bmN0aW9uVHlwZUFsaWFzKFRva2VuIHRva2VuKSB7CiAgICBsaWJyYXJ5LmJlZ2luTmVzdGVkRGVjbGFyYXRpb24oVHlwZVBhcmFtZXRlclNjb3BlS2luZC50eXBlZGVmLCAiI3R5cGVkZWYiLAogICAgICAgIGhhc01lbWJlcnM6IGZhbHNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5GdW5jdGlvblR5cGUoVG9rZW4gYmVnaW5Ub2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5GdW5jdGlvblR5cGUiKTsKICAgIGxpYnJhcnkuYmVnaW5OZXN0ZWREZWNsYXJhdGlvbigKICAgICAgICBUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLmZ1bmN0aW9uVHlwZSwgIiNmdW5jdGlvbl90eXBlIiwKICAgICAgICBoYXNNZW1iZXJzOiBmYWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRnVuY3Rpb25UeXBlZEZvcm1hbFBhcmFtZXRlcihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5GdW5jdGlvblR5cGVkRm9ybWFsUGFyYW1ldGVyIik7CiAgICBsaWJyYXJ5LmJlZ2luTmVzdGVkRGVjbGFyYXRpb24oCiAgICAgICAgVHlwZVBhcmFtZXRlclNjb3BlS2luZC5mdW5jdGlvblR5cGUsICIjZnVuY3Rpb25fdHlwZSIsCiAgICAgICAgaGFzTWVtYmVyczogZmFsc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGdW5jdGlvblR5cGUoVG9rZW4gZnVuY3Rpb25Ub2tlbiwgVG9rZW4gcXVlc3Rpb25NYXJrKSB7CiAgICBkZWJ1Z0V2ZW50KCJGdW5jdGlvblR5cGUiKTsKICAgIGlmICghbGlicmFyeS5sb2FkZXIudGFyZ2V0LmVuYWJsZU5vbk51bGxhYmxlKSB7CiAgICAgIHJlcG9ydEVycm9ySWZOdWxsYWJsZVR5cGUocXVlc3Rpb25NYXJrKTsKICAgIH0KICAgIExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4gZm9ybWFscyA9IHBvcCgpOwogICAgcG9wKCk7IC8vIGZvcm1hbHMgb2Zmc2V0CiAgICBUeXBlQnVpbGRlciByZXR1cm5UeXBlID0gcG9wKCk7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMgPSBwb3AoKTsKICAgIHB1c2gobGlicmFyeS5hZGRGdW5jdGlvblR5cGUoCiAgICAgICAgcmV0dXJuVHlwZSwgdHlwZVZhcmlhYmxlcywgZm9ybWFscywgZnVuY3Rpb25Ub2tlbi5jaGFyT2Zmc2V0KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZ1bmN0aW9uVHlwZWRGb3JtYWxQYXJhbWV0ZXIoVG9rZW4gbmFtZVRva2VuLCBUb2tlbiBxdWVzdGlvbikgewogICAgZGVidWdFdmVudCgiRnVuY3Rpb25UeXBlZEZvcm1hbFBhcmFtZXRlciIpOwogICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBmb3JtYWxzID0gcG9wKCk7CiAgICBpbnQgZm9ybWFsc09mZnNldCA9IHBvcCgpOwogICAgVHlwZUJ1aWxkZXIgcmV0dXJuVHlwZSA9IHBvcCgpOwogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzID0gcG9wKCk7CiAgICBpZiAoIWxpYnJhcnkubG9hZGVyLnRhcmdldC5lbmFibGVOb25OdWxsYWJsZSkgewogICAgICByZXBvcnRFcnJvcklmTnVsbGFibGVUeXBlKHF1ZXN0aW9uKTsKICAgIH0KICAgIHB1c2gobGlicmFyeS5hZGRGdW5jdGlvblR5cGUoCiAgICAgICAgcmV0dXJuVHlwZSwgdHlwZVZhcmlhYmxlcywgZm9ybWFscywgZm9ybWFsc09mZnNldCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGdW5jdGlvblR5cGVBbGlhcygKICAgICAgVG9rZW4gdHlwZWRlZktleXdvcmQsIFRva2VuIGVxdWFscywgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImVuZEZ1bmN0aW9uVHlwZUFsaWFzIik7CiAgICBTdHJpbmcgZG9jdW1lbnRhdGlvbkNvbW1lbnQgPSBnZXREb2N1bWVudGF0aW9uQ29tbWVudCh0eXBlZGVmS2V5d29yZCk7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXM7CiAgICBPYmplY3QgbmFtZTsKICAgIGludCBjaGFyT2Zmc2V0OwogICAgRnVuY3Rpb25UeXBlQnVpbGRlciBmdW5jdGlvblR5cGU7CiAgICBpZiAoZXF1YWxzID09IG51bGwpIHsKICAgICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBmb3JtYWxzID0gcG9wKCk7CiAgICAgIHBvcCgpOyAvLyBmb3JtYWxzIG9mZnNldAogICAgICB0eXBlVmFyaWFibGVzID0gcG9wKCk7CiAgICAgIGNoYXJPZmZzZXQgPSBwb3AoKTsKICAgICAgbmFtZSA9IHBvcCgpOwogICAgICBUeXBlQnVpbGRlciByZXR1cm5UeXBlID0gcG9wKCk7CiAgICAgIC8vIENyZWF0ZSBhIG5lc3RlZCBkZWNsYXJhdGlvbiB0aGF0IGlzIGVuZGVkIGJlbG93IGJ5CiAgICAgIC8vIGBsaWJyYXJ5LmFkZEZ1bmN0aW9uVHlwZWAuCiAgICAgIGlmIChuYW1lIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgICAgcG9wKCk7IC8vIE1ldGFkYXRhLgogICAgICAgIGxpYnJhcnkuZW5kTmVzdGVkRGVjbGFyYXRpb24oCiAgICAgICAgICAgIFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQudHlwZWRlZiwgIjxzeW50YXgtZXJyb3I+Iik7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGxpYnJhcnkuYmVnaW5OZXN0ZWREZWNsYXJhdGlvbigKICAgICAgICAgIFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQuZnVuY3Rpb25UeXBlLCAiI2Z1bmN0aW9uX3R5cGUiLAogICAgICAgICAgaGFzTWVtYmVyczogZmFsc2UpOwogICAgICBmdW5jdGlvblR5cGUgPQogICAgICAgICAgbGlicmFyeS5hZGRGdW5jdGlvblR5cGUocmV0dXJuVHlwZSwgbnVsbCwgZm9ybWFscywgY2hhck9mZnNldCk7CiAgICB9IGVsc2UgewogICAgICBPYmplY3QgdHlwZSA9IHBvcCgpOwogICAgICB0eXBlVmFyaWFibGVzID0gcG9wKCk7CiAgICAgIGNoYXJPZmZzZXQgPSBwb3AoKTsKICAgICAgbmFtZSA9IHBvcCgpOwogICAgICBpZiAobmFtZSBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICAgIHBvcCgpOyAvLyBNZXRhZGF0YS4KICAgICAgICBsaWJyYXJ5LmVuZE5lc3RlZERlY2xhcmF0aW9uKAogICAgICAgICAgICBUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLmZ1bmN0aW9uVHlwZSwgIjxzeW50YXgtZXJyb3I+Iik7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0eXBlIGlzIEZ1bmN0aW9uVHlwZUJ1aWxkZXIpIHsKICAgICAgICAvLyBUT0RPKGFoZSk6IFdlIG5lZWQgdG8gc3RhcnQgYSBuZXN0ZWQgZGVjbGFyYXRpb24gd2hlbiBwYXJzaW5nIHRoZQogICAgICAgIC8vIGZvcm1hbHMgYW5kIHJldHVybiB0eXBlIHNvIHdlIGNhbiBjb3JyZWN0bHkgYmluZAogICAgICAgIC8vIGB0eXBlLnR5cGVWYXJpYWJsZXNgLiBBIHR5cGVkZWYgY2FuIGhhdmUgdHlwZSB2YXJpYWJsZXMsIGFuZCBhIG5ldwogICAgICAgIC8vIGZ1bmN0aW9uIHR5cGUgY2FuIGFsc28gaGF2ZSB0eXBlIHZhcmlhYmxlcyAocmVwcmVzZW50aW5nIHRoZSB0eXBlIG9mCiAgICAgICAgLy8gYSBnZW5lcmljIGZ1bmN0aW9uKS4KICAgICAgICBmdW5jdGlvblR5cGUgPSB0eXBlOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRPRE8oYWhlKTogSW1wcm92ZSB0aGlzIGVycm9yIG1lc3NhZ2UuCiAgICAgICAgYWRkUHJvYmxlbShtZXNzYWdlVHlwZWRlZk5vdEZ1bmN0aW9uLCBlcXVhbHMuY2hhck9mZnNldCwgZXF1YWxzLmxlbmd0aCk7CiAgICAgIH0KICAgIH0KICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSA9IHBvcCgpOwogICAgY2hlY2tFbXB0eSh0eXBlZGVmS2V5d29yZC5jaGFyT2Zmc2V0KTsKICAgIGxpYnJhcnkuYWRkRnVuY3Rpb25UeXBlQWxpYXMoZG9jdW1lbnRhdGlvbkNvbW1lbnQsIG1ldGFkYXRhLCBuYW1lLAogICAgICAgIHR5cGVWYXJpYWJsZXMsIGZ1bmN0aW9uVHlwZSwgY2hhck9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFRvcExldmVsRmllbGRzKAogICAgICBUb2tlbiBzdGF0aWNUb2tlbiwKICAgICAgVG9rZW4gY292YXJpYW50VG9rZW4sCiAgICAgIFRva2VuIGxhdGVUb2tlbiwKICAgICAgVG9rZW4gdmFyRmluYWxPckNvbnN0LAogICAgICBpbnQgY291bnQsCiAgICAgIFRva2VuIGJlZ2luVG9rZW4sCiAgICAgIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRUb3BMZXZlbEZpZWxkcyIpOwogICAgaWYgKCFsaWJyYXJ5LmxvYWRlci50YXJnZXQuZW5hYmxlTm9uTnVsbGFibGUpIHsKICAgICAgcmVwb3J0Tm9uTnVsbGFibGVNb2RpZmllckVycm9yKGxhdGVUb2tlbik7CiAgICB9CiAgICBMaXN0PEZpZWxkSW5mbz4gZmllbGRJbmZvcyA9IHBvcEZpZWxkSW5mb3MoY291bnQpOwogICAgVHlwZUJ1aWxkZXIgdHlwZSA9IG51bGxJZlBhcnNlclJlY292ZXJ5KHBvcCgpKTsKICAgIGludCBtb2RpZmllcnMgPSAoc3RhdGljVG9rZW4gIT0gbnVsbCA/IHN0YXRpY01hc2sgOiAwKSB8CiAgICAgICAgKGNvdmFyaWFudFRva2VuICE9IG51bGwgPyBjb3ZhcmlhbnRNYXNrIDogMCkgfAogICAgICAgIChsYXRlVG9rZW4gIT0gbnVsbCA/IGxhdGVNYXNrIDogMCkgfAogICAgICAgIE1vZGlmaWVyLnZhbGlkYXRlVmFyRmluYWxPckNvbnN0KHZhckZpbmFsT3JDb25zdD8ubGV4ZW1lKTsKICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSA9IHBvcCgpOwogICAgY2hlY2tFbXB0eShiZWdpblRva2VuLmNoYXJPZmZzZXQpOwogICAgaWYgKGZpZWxkSW5mb3MgPT0gbnVsbCkgcmV0dXJuOwogICAgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50ID0gZ2V0RG9jdW1lbnRhdGlvbkNvbW1lbnQoYmVnaW5Ub2tlbik7CiAgICBsaWJyYXJ5LmFkZEZpZWxkcygKICAgICAgICBkb2N1bWVudGF0aW9uQ29tbWVudCwgbWV0YWRhdGEsIG1vZGlmaWVycywgdHlwZSwgZmllbGRJbmZvcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENsYXNzRmllbGRzKFRva2VuIHN0YXRpY1Rva2VuLCBUb2tlbiBjb3ZhcmlhbnRUb2tlbiwgVG9rZW4gbGF0ZVRva2VuLAogICAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3QsIGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkZpZWxkcyIpOwogICAgaWYgKCFsaWJyYXJ5LmxvYWRlci50YXJnZXQuZW5hYmxlTm9uTnVsbGFibGUpIHsKICAgICAgcmVwb3J0Tm9uTnVsbGFibGVNb2RpZmllckVycm9yKGxhdGVUb2tlbik7CiAgICB9CiAgICBMaXN0PEZpZWxkSW5mbz4gZmllbGRJbmZvcyA9IHBvcEZpZWxkSW5mb3MoY291bnQpOwogICAgVHlwZUJ1aWxkZXIgdHlwZSA9IHBvcCgpOwogICAgaW50IG1vZGlmaWVycyA9IChzdGF0aWNUb2tlbiAhPSBudWxsID8gc3RhdGljTWFzayA6IDApIHwKICAgICAgICAoY292YXJpYW50VG9rZW4gIT0gbnVsbCA/IGNvdmFyaWFudE1hc2sgOiAwKSB8CiAgICAgICAgKGxhdGVUb2tlbiAhPSBudWxsID8gbGF0ZU1hc2sgOiAwKSB8CiAgICAgICAgTW9kaWZpZXIudmFsaWRhdGVWYXJGaW5hbE9yQ29uc3QodmFyRmluYWxPckNvbnN0Py5sZXhlbWUpOwogICAgaWYgKHN0YXRpY1Rva2VuID09IG51bGwgJiYgbW9kaWZpZXJzICYgY29uc3RNYXNrICE9IDApIHsKICAgICAgLy8gSXQgaXMgYSBjb21waWxlLXRpbWUgZXJyb3IgaWYgYW4gaW5zdGFuY2UgdmFyaWFibGUgaXMgZGVjbGFyZWQgdG8gYmUKICAgICAgLy8gY29uc3RhbnQuCiAgICAgIGFkZFByb2JsZW0obWVzc2FnZUNvbnN0SW5zdGFuY2VGaWVsZCwgdmFyRmluYWxPckNvbnN0LmNoYXJPZmZzZXQsCiAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QubGVuZ3RoKTsKICAgICAgbW9kaWZpZXJzICY9IH5jb25zdE1hc2s7CiAgICB9CiAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEgPSBwb3AoKTsKICAgIGlmIChmaWVsZEluZm9zID09IG51bGwpIHJldHVybjsKICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCA9IGdldERvY3VtZW50YXRpb25Db21tZW50KGJlZ2luVG9rZW4pOwogICAgbGlicmFyeS5hZGRGaWVsZHMoCiAgICAgICAgZG9jdW1lbnRhdGlvbkNvbW1lbnQsIG1ldGFkYXRhLCBtb2RpZmllcnMsIHR5cGUsIGZpZWxkSW5mb3MpOwogIH0KCiAgTGlzdDxGaWVsZEluZm8+IHBvcEZpZWxkSW5mb3MoaW50IGNvdW50KSB7CiAgICBpZiAoY291bnQgPT0gMCkgcmV0dXJuIG51bGw7CiAgICBMaXN0PEZpZWxkSW5mbz4gZmllbGRJbmZvcyA9IG5ldyBMaXN0PEZpZWxkSW5mbz4oY291bnQpOwogICAgYm9vbCBpc1BhcnNlclJlY292ZXJ5ID0gZmFsc2U7CiAgICBmb3IgKGludCBpID0gY291bnQgLSAxOyBpICE9IC0xOyBpLS0pIHsKICAgICAgaW50IGNoYXJFbmRPZmZzZXQgPSBwb3AoKTsKICAgICAgVG9rZW4gYmVmb3JlTGFzdCA9IHBvcCgpOwogICAgICBUb2tlbiBpbml0aWFsaXplclRva2VuRm9ySW5mZXJlbmNlID0gcG9wKCk7CiAgICAgIGludCBjaGFyT2Zmc2V0ID0gcG9wKCk7CiAgICAgIE9iamVjdCBuYW1lID0gcG9wKE51bGxWYWx1ZS5JZGVudGlmaWVyKTsKICAgICAgaWYgKG5hbWUgaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgICBpc1BhcnNlclJlY292ZXJ5ID0gdHJ1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBmaWVsZEluZm9zW2ldID0gbmV3IEZpZWxkSW5mbyhuYW1lLCBjaGFyT2Zmc2V0LAogICAgICAgICAgICBpbml0aWFsaXplclRva2VuRm9ySW5mZXJlbmNlLCBiZWZvcmVMYXN0LCBjaGFyRW5kT2Zmc2V0KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGlzUGFyc2VyUmVjb3ZlcnkgPyBudWxsIDogZmllbGRJbmZvczsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5UeXBlVmFyaWFibGUoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luVHlwZVZhcmlhYmxlIik7CiAgICBpbnQgY2hhck9mZnNldCA9IHBvcCgpOwogICAgT2JqZWN0IG5hbWUgPSBwb3AoKTsKICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogdHlwZSB2YXJpYWJsZSBtZXRhZGF0YSBzaG91bGQgbm90IGJlIGlnbm9yZWQuICBTZWUKICAgIC8vIGRhcnRidWcuY29tLzI4OTgxLgogICAgLyogTGlzdDxNZXRhZGF0YUJ1aWxkZXI8VHlwZUJ1aWxkZXI+PiBtZXRhZGF0YSA9ICovIHBvcCgpOwogICAgaWYgKG5hbWUgaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgcHVzaChuYW1lKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2gobGlicmFyeS5hZGRUeXBlVmFyaWFibGUobmFtZSwgbnVsbCwgY2hhck9mZnNldCkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVUeXBlVmFyaWFibGVzRGVmaW5lZChUb2tlbiB0b2tlbiwgaW50IGNvdW50KSB7CiAgICBkZWJ1Z0V2ZW50KCJUeXBlVmFyaWFibGVzRGVmaW5lZCIpOwogICAgYXNzZXJ0KGNvdW50ID4gMCk7CiAgICBwdXNoKGNvbnN0IEZpeGVkTnVsbGFibGVMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+KCkucG9wKHN0YWNrLCBjb3VudCkgPz8KICAgICAgICBOdWxsVmFsdWUuVHlwZVZhcmlhYmxlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFR5cGVWYXJpYWJsZShUb2tlbiB0b2tlbiwgaW50IGluZGV4LCBUb2tlbiBleHRlbmRzT3JTdXBlcikgewogICAgZGVidWdFdmVudCgiZW5kVHlwZVZhcmlhYmxlIik7CiAgICBUeXBlQnVpbGRlciBib3VuZCA9IG51bGxJZlBhcnNlclJlY292ZXJ5KHBvcCgpKTsKICAgIC8vIFBlZWsgdG8gbGVhdmUgdHlwZSBwYXJhbWV0ZXJzIG9uIHRvcCBvZiBzdGFjay4KICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVBhcmFtZXRlcnMgPSBwZWVrKCk7CiAgICBpZiAodHlwZVBhcmFtZXRlcnMgIT0gbnVsbCkgewogICAgICB0eXBlUGFyYW1ldGVyc1tpbmRleF0uYm91bmQgPSBib3VuZDsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVHlwZVZhcmlhYmxlcyhUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiZW5kVHlwZVZhcmlhYmxlcyIpOwoKICAgIC8vIFBlZWsgdG8gbGVhdmUgdHlwZSBwYXJhbWV0ZXJzIG9uIHRvcCBvZiBzdGFjay4KICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVBhcmFtZXRlcnMgPSBwZWVrKCk7CgogICAgTWFwPFN0cmluZywgVHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlc0J5TmFtZTsKICAgIGlmICh0eXBlUGFyYW1ldGVycyAhPSBudWxsKSB7CiAgICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciBidWlsZGVyIGluIHR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgICAgaWYgKGJ1aWxkZXIuYm91bmQgIT0gbnVsbCkgewogICAgICAgICAgaWYgKHR5cGVWYXJpYWJsZXNCeU5hbWUgPT0gbnVsbCkgewogICAgICAgICAgICB0eXBlVmFyaWFibGVzQnlOYW1lID0gbmV3IE1hcDxTdHJpbmcsIFR5cGVWYXJpYWJsZUJ1aWxkZXI+KCk7CiAgICAgICAgICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciBidWlsZGVyIGluIHR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgICAgICAgICAgdHlwZVZhcmlhYmxlc0J5TmFtZVtidWlsZGVyLm5hbWVdID0gYnVpbGRlcjsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIC8vIEZpbmQgY3ljbGU6IElmIHRoZXJlJ3Mgbm8gY3ljbGUgd2UgY2FuIGF0IG1vc3Qgc3RlcCB0aHJvdWdoIGFsbAogICAgICAgICAgLy8gYHR5cGVQYXJhbWV0ZXJzYCAoYXQgd2hpY2ggcG9pbnQgdGhlIGxhc3QgYnVpbGRlcnMgYm91bmQgd2lsbCBiZQogICAgICAgICAgLy8gbnVsbCkuCiAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIGN5Y2xlIHdpdGggYGJ1aWxkZXJgICdpbnNpZGUnIHRoZSBzdGVwcyB0byBnZXQgYmFjawogICAgICAgICAgLy8gdG8gaXQgd2lsbCBhbHNvIGJlIGJvdW5kIGJ5IGB0eXBlUGFyYW1ldGVycy5sZW5ndGhgLgogICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBjeWNsZSB3aXRob3V0IGBidWlsZGVyYCAnaW5zaWRlJyB3ZSB3aWxsIGp1c3QgaWdub3JlCiAgICAgICAgICAvLyBpdCBmb3Igbm93LiBJdCB3aWxsIGJlIHJlcG9ydGVkIHdoZW4gcHJvY2Vzc2luZyBvbmUgb2YgdGhlCiAgICAgICAgICAvLyBgYnVpbGRlcmBzIHRoYXQgaXMgaW4gZmFjdCBgaW5zaWRlYCB0aGUgY3ljbGUuIFRoaXMgbWF0Y2hlcyB0aGUKICAgICAgICAgIC8vIGN5Y2xpYyBjbGFzcyBoaWVyYXJjaHkgZXJyb3IuCiAgICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyIGJvdW5kID0gYnVpbGRlcjsKICAgICAgICAgIGZvciAoaW50IHN0ZXBzID0gMDsKICAgICAgICAgICAgICBib3VuZC5ib3VuZCAhPSBudWxsICYmIHN0ZXBzIDwgdHlwZVBhcmFtZXRlcnMubGVuZ3RoOwogICAgICAgICAgICAgICsrc3RlcHMpIHsKICAgICAgICAgICAgYm91bmQgPSB0eXBlVmFyaWFibGVzQnlOYW1lW2JvdW5kLmJvdW5kLm5hbWVdOwogICAgICAgICAgICBpZiAoYm91bmQgPT0gbnVsbCB8fCBib3VuZCA9PSBidWlsZGVyKSBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChib3VuZCA9PSBidWlsZGVyICYmIGJvdW5kLmJvdW5kICE9IG51bGwpIHsKICAgICAgICAgICAgLy8gV3JpdGUgb3V0IGN5Y2xlLgogICAgICAgICAgICBMaXN0PFN0cmluZz4gdmlhID0gbmV3IExpc3Q8U3RyaW5nPigpOwogICAgICAgICAgICBib3VuZCA9IHR5cGVWYXJpYWJsZXNCeU5hbWVbYnVpbGRlci5ib3VuZC5uYW1lXTsKICAgICAgICAgICAgd2hpbGUgKGJvdW5kICE9IGJ1aWxkZXIpIHsKICAgICAgICAgICAgICB2aWEuYWRkKGJvdW5kLm5hbWUpOwogICAgICAgICAgICAgIGJvdW5kID0gdHlwZVZhcmlhYmxlc0J5TmFtZVtib3VuZC5ib3VuZC5uYW1lXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSB2aWEuaXNFbXB0eQogICAgICAgICAgICAgICAgPyB0ZW1wbGF0ZURpcmVjdEN5Y2xlSW5UeXBlVmFyaWFibGVzLndpdGhBcmd1bWVudHMoYnVpbGRlci5uYW1lKQogICAgICAgICAgICAgICAgOiB0ZW1wbGF0ZUN5Y2xlSW5UeXBlVmFyaWFibGVzLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5uYW1lLCB2aWEuam9pbigiJywgJyIpKTsKICAgICAgICAgICAgYWRkUHJvYmxlbShtZXNzYWdlLCBidWlsZGVyLmNoYXJPZmZzZXQsIGJ1aWxkZXIubmFtZS5sZW5ndGgpOwogICAgICAgICAgICBidWlsZGVyLmJvdW5kID0gbmV3IE5hbWVkVHlwZUJ1aWxkZXIoYnVpbGRlci5uYW1lLCBudWxsKQogICAgICAgICAgICAgIC4uYmluZChuZXcgSW52YWxpZFR5cGVCdWlsZGVyKAogICAgICAgICAgICAgICAgICBidWlsZGVyLm5hbWUsCiAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgICAgICAgICAgdXJpLCBidWlsZGVyLmNoYXJPZmZzZXQsIGJ1aWxkZXIubmFtZS5sZW5ndGgpKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgaWYgKGluQ29uc3RydWN0b3JOYW1lKSB7CiAgICAgIGFkZFByb2JsZW0obWVzc2FnZUNvbnN0cnVjdG9yV2l0aFR5cGVQYXJhbWV0ZXJzLAogICAgICAgICAgb2Zmc2V0Rm9yVG9rZW4oYmVnaW5Ub2tlbiksIGxlbmd0aE9mU3BhbihiZWdpblRva2VuLCBlbmRUb2tlbikpOwogICAgICBpbkNvbnN0cnVjdG9yTmFtZSA9IGZhbHNlOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRQYXJ0T2YoCiAgICAgIFRva2VuIHBhcnRLZXl3b3JkLCBUb2tlbiBvZktleXdvcmQsIFRva2VuIHNlbWljb2xvbiwgYm9vbCBoYXNOYW1lKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRQYXJ0T2YiKTsKICAgIGludCBjaGFyT2Zmc2V0ID0gcG9wQ2hhck9mZnNldCgpOwogICAgT2JqZWN0IGNvbnRhaW5pbmdMaWJyYXJ5ID0gcG9wKCk7CiAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEgPSBwb3AoKTsKICAgIGlmIChoYXNOYW1lKSB7CiAgICAgIGxpYnJhcnkuYWRkUGFydE9mKG1ldGFkYXRhLAogICAgICAgICAgZmxhdHRlbk5hbWUoY29udGFpbmluZ0xpYnJhcnksIGNoYXJPZmZzZXQsIHVyaSksIG51bGwsIGNoYXJPZmZzZXQpOwogICAgfSBlbHNlIHsKICAgICAgbGlicmFyeS5hZGRQYXJ0T2YobWV0YWRhdGEsIG51bGwsIGNvbnRhaW5pbmdMaWJyYXJ5LCBjaGFyT2Zmc2V0KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ29uc3RydWN0b3JSZWZlcmVuY2UoCiAgICAgIFRva2VuIHN0YXJ0LCBUb2tlbiBwZXJpb2RCZWZvcmVOYW1lLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiQ29uc3RydWN0b3JSZWZlcmVuY2UiKTsKICAgIHBvcElmTm90TnVsbChwZXJpb2RCZWZvcmVOYW1lKTsgLy8gY2hhck9mZnNldC4KICAgIFN0cmluZyBzdWZmaXggPSBwb3BJZk5vdE51bGwocGVyaW9kQmVmb3JlTmFtZSk7CiAgICBMaXN0PFR5cGVCdWlsZGVyPiB0eXBlQXJndW1lbnRzID0gcG9wKCk7CiAgICBpbnQgY2hhck9mZnNldCA9IHBvcCgpOwogICAgT2JqZWN0IG5hbWUgPSBwb3AoKTsKICAgIGlmIChuYW1lIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIHB1c2gobmFtZSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKGxpYnJhcnkuYWRkQ29uc3RydWN0b3JSZWZlcmVuY2UoCiAgICAgICAgICBuYW1lLCB0eXBlQXJndW1lbnRzLCBzdWZmaXgsIGNoYXJPZmZzZXQpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5GYWN0b3J5TWV0aG9kKAogICAgICBUb2tlbiBsYXN0Q29uc3VtZWQsIFRva2VuIGV4dGVybmFsVG9rZW4sIFRva2VuIGNvbnN0VG9rZW4pIHsKICAgIGluQ29uc3RydWN0b3IgPSB0cnVlOwogICAgbGlicmFyeS5iZWdpbk5lc3RlZERlY2xhcmF0aW9uKAogICAgICAgIFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQuZmFjdG9yeU1ldGhvZCwgIiNmYWN0b3J5X21ldGhvZCIsCiAgICAgICAgaGFzTWVtYmVyczogZmFsc2UpOwogICAgcHVzaCgoZXh0ZXJuYWxUb2tlbiAhPSBudWxsID8gZXh0ZXJuYWxNYXNrIDogMCkgfAogICAgICAgIChjb25zdFRva2VuICE9IG51bGwgPyBjb25zdE1hc2sgOiAwKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENsYXNzRmFjdG9yeU1ldGhvZCgKICAgICAgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZmFjdG9yeUtleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJDbGFzc0ZhY3RvcnlNZXRob2QiKTsKICAgIE1ldGhvZEJvZHkga2luZCA9IHBvcCgpOwogICAgQ29uc3RydWN0b3JSZWZlcmVuY2VCdWlsZGVyIHJlZGlyZWN0aW9uVGFyZ2V0OwogICAgaWYgKGtpbmQgPT0gTWV0aG9kQm9keS5SZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KSB7CiAgICAgIHJlZGlyZWN0aW9uVGFyZ2V0ID0gbnVsbElmUGFyc2VyUmVjb3ZlcnkocG9wKCkpOwogICAgfQogICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBmb3JtYWxzID0gcG9wKCk7CiAgICBpbnQgZm9ybWFsc09mZnNldCA9IHBvcCgpOwogICAgcG9wKCk7IC8vIHR5cGUgdmFyaWFibGVzCiAgICBpbnQgY2hhck9mZnNldCA9IHBvcCgpOwogICAgT2JqZWN0IG5hbWUgPSBwb3AoKTsKICAgIGludCBtb2RpZmllcnMgPSBwb3AoKTsKICAgIGlmIChuYXRpdmVNZXRob2ROYW1lICE9IG51bGwpIHsKICAgICAgbW9kaWZpZXJzIHw9IGV4dGVybmFsTWFzazsKICAgIH0KICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSA9IHBvcCgpOwogICAgaWYgKG5hbWUgaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgbGlicmFyeS5lbmROZXN0ZWREZWNsYXJhdGlvbigKICAgICAgICAgIFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQuZmFjdG9yeU1ldGhvZCwgIjxzeW50YXgtZXJyb3I+Iik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCA9IGdldERvY3VtZW50YXRpb25Db21tZW50KGJlZ2luVG9rZW4pOwogICAgbGlicmFyeS5hZGRGYWN0b3J5TWV0aG9kKAogICAgICAgIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICAgIG1ldGFkYXRhLAogICAgICAgIG1vZGlmaWVycywKICAgICAgICBuYW1lLAogICAgICAgIGZvcm1hbHMsCiAgICAgICAgcmVkaXJlY3Rpb25UYXJnZXQsCiAgICAgICAgYmVnaW5Ub2tlbi5jaGFyT2Zmc2V0LAogICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgZm9ybWFsc09mZnNldCwKICAgICAgICBlbmRUb2tlbi5jaGFyT2Zmc2V0LAogICAgICAgIG5hdGl2ZU1ldGhvZE5hbWUpOwogICAgbmF0aXZlTWV0aG9kTmFtZSA9IG51bGw7CiAgICBpbkNvbnN0cnVjdG9yID0gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlJlZGlyZWN0aW5nRmFjdG9yeUJvZHkiKTsKICAgIHB1c2goTWV0aG9kQm9keS5SZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRmllbGRJbml0aWFsaXplcihUb2tlbiBhc3NpZ25tZW50T3BlcmF0b3IsIFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJGaWVsZEluaXRpYWxpemVyIik7CiAgICBUb2tlbiBiZWZvcmVMYXN0ID0gYXNzaWdubWVudE9wZXJhdG9yLm5leHQ7CiAgICBUb2tlbiBuZXh0ID0gYmVmb3JlTGFzdC5uZXh0OwogICAgd2hpbGUgKG5leHQgIT0gdG9rZW4gJiYgIW5leHQuaXNFb2YpIHsKICAgICAgLy8gVG8gYXZvaWQgc3RvcmluZyB0aGUgcmVzdCBvZiB0aGUgdG9rZW4gc3RyZWFtLCB3ZSBuZWVkIHRvIGlkZW50aWZ5IHRoZQogICAgICAvLyB0b2tlbiBiZWZvcmUgW3Rva2VuXS4gVGhhdCB0b2tlbiB3aWxsIGJlIHRoZSBsYXN0IHRva2VuIG9mIHRoZQogICAgICAvLyBpbml0aWFsaXplciBleHByZXNzaW9uIGFuZCBieSBzZXR0aW5nIGl0cyB0YWlsIHRvIEVPRiB3ZSBvbmx5IHN0b3JlCiAgICAgIC8vIHRoZSB0b2tlbnMgZm9yIHRoZSBleHByZXNzaW9uLgogICAgICAvLyBUT0RPKGFoZSk6IE1pZ2h0IGJlIGNsZWFyZXIgaWYgdGhpcyBzZWFyY2ggd2FzIG1vdmVkIHRvCiAgICAgIC8vIGBsaWJyYXJ5LmFkZEZpZWxkc2AuCiAgICAgIC8vIFRPRE8oYWhlKTogSSBkb24ndCBldmVuIHRoaW5rIHRoaXMgaXMgbmVjZXNzYXJ5LiBbdG9rZW5dIHBvaW50cyB0byA7CiAgICAgIC8vIG9yICwgYW5kIHdlIGRvbid0IG90aGVyd2lzZSBzdG9yZSB0b2tlbnMuCiAgICAgIGJlZm9yZUxhc3QgPSBuZXh0OwogICAgICBuZXh0ID0gbmV4dC5uZXh0OwogICAgfQogICAgcHVzaChhc3NpZ25tZW50T3BlcmF0b3IubmV4dCk7CiAgICBwdXNoKGJlZm9yZUxhc3QpOwogICAgcHVzaCh0b2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9GaWVsZEluaXRpYWxpemVyKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJOb0ZpZWxkSW5pdGlhbGl6ZXIiKTsKICAgIHB1c2goTnVsbFZhbHVlLkZpZWxkSW5pdGlhbGl6ZXIpOwogICAgcHVzaChOdWxsVmFsdWUuRmllbGRJbml0aWFsaXplcik7CiAgICBwdXNoKHRva2VuLmNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRJbml0aWFsaXplcnMoaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiSW5pdGlhbGl6ZXJzIik7CiAgICAvLyBJZ25vcmVkIGZvciBub3cuCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vSW5pdGlhbGl6ZXJzKCkgewogICAgZGVidWdFdmVudCgiTm9Jbml0aWFsaXplcnMiKTsKICAgIC8vIFRoaXMgaXMgYSBjb25zdHJ1Y3RvciBpbml0aWFsaXplciBhbmQgaXQncyBpZ25vcmVkIGZvciBub3cuCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUludmFsaWRNZW1iZXIoVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkludmFsaWRNZW1iZXIiKTsKICAgIHBvcCgpOyAvLyBtZXRhZGF0YSBzdGFyCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZE1lbWJlcigpIHsKICAgIGRlYnVnRXZlbnQoIk1lbWJlciIpOwogICAgYXNzZXJ0KG5hdGl2ZU1ldGhvZE5hbWUgPT0gbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNsYXNzV2l0aENsYXVzZShUb2tlbiB3aXRoS2V5d29yZCkgewogICAgZGVidWdFdmVudCgiQ2xhc3NXaXRoQ2xhdXNlIik7CgogICAgT2JqZWN0IG1peGlucyA9IHBvcCgpOwogICAgaW50IGV4dGVuZHNPZmZzZXQgPSBwb3AoKTsKICAgIE9iamVjdCBzdXBlcnR5cGUgPSBwb3AoKTsKICAgIGlmIChzdXBlcnR5cGUgaXMgUGFyc2VyUmVjb3ZlcnkgfHwgbWl4aW5zIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIHB1c2gobmV3IFBhcnNlclJlY292ZXJ5KHdpdGhLZXl3b3JkLmNoYXJPZmZzZXQpKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2gobGlicmFyeS5hZGRNaXhpbkFwcGxpY2F0aW9uKAogICAgICAgICAgc3VwZXJ0eXBlLCBtaXhpbnMsIHdpdGhLZXl3b3JkLmNoYXJPZmZzZXQpKTsKICAgIH0KICAgIHB1c2goZXh0ZW5kc09mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNsYXNzTm9XaXRoQ2xhdXNlKCkgewogICAgZGVidWdFdmVudCgiQ2xhc3NOb1dpdGhDbGF1c2UiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2xhc3NIZWFkZXIoVG9rZW4gYmVnaW4sIFRva2VuIGNsYXNzS2V5d29yZCwgVG9rZW4gbmF0aXZlVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkNsYXNzSGVhZGVyIik7CiAgICBuYXRpdmVNZXRob2ROYW1lID0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTWl4aW5IZWFkZXIoVG9rZW4gbWl4aW5LZXl3b3JkKSB7CiAgICBkZWJ1Z0V2ZW50KCJoYW5kbGVNaXhpbkhlYWRlciIpOwogICAgbmF0aXZlTWV0aG9kTmFtZSA9IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENsYXNzT3JNaXhpbkJvZHkoCiAgICAgIERlY2xhcmF0aW9uS2luZCBraW5kLCBpbnQgbWVtYmVyQ291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJDbGFzc09yTWl4aW5Cb2R5Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUFzeW5jTW9kaWZpZXIoVG9rZW4gYXN5bmNUb2tlbiwgVG9rZW4gc3RhclRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJBc3luY01vZGlmaWVyIik7CiAgfQoKICB2b2lkIGFkZFByb2JsZW0oTWVzc2FnZSBtZXNzYWdlLCBpbnQgY2hhck9mZnNldCwgaW50IGxlbmd0aCwKICAgICAge2Jvb2wgd2FzSGFuZGxlZDogZmFsc2UsIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHR9KSB7CiAgICBsaWJyYXJ5LmFkZFByb2JsZW0obWVzc2FnZSwgY2hhck9mZnNldCwgbGVuZ3RoLCB1cmksCiAgICAgICAgd2FzSGFuZGxlZDogd2FzSGFuZGxlZCwgY29udGV4dDogY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSWdub3JlZEVycm9yKENvZGU8ZHluYW1pYz4gY29kZSwgVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBpc0lnbm9yZWRQYXJzZXJFcnJvcihjb2RlLCB0b2tlbikgfHwKICAgICAgICBzdXBlci5pc0lnbm9yZWRFcnJvcihjb2RlLCB0b2tlbik7CiAgfQoKICAvLy8gUmV0dXJuIHRoZSBkb2N1bWVudGF0aW9uIGNvbW1lbnQgZm9yIHRoZSBlbnRpdHkgdGhhdCBzdGFydHMgYXQgdGhlCiAgLy8vIGdpdmVuIFt0b2tlbl0sIG9yIGBudWxsYCBpZiB0aGVyZSBpcyBubyBwcmVjZWRpbmcgZG9jdW1lbnRhdGlvbiBjb21tZW50LgogIHN0YXRpYyBTdHJpbmcgZ2V0RG9jdW1lbnRhdGlvbkNvbW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGRvY1Rva2VuID0gdG9rZW4ucHJlY2VkaW5nQ29tbWVudHM7CiAgICBpZiAoZG9jVG9rZW4gPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBib29sIGluU2xhc2ggPSBmYWxzZTsKICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICB3aGlsZSAoZG9jVG9rZW4gIT0gbnVsbCkgewogICAgICBTdHJpbmcgbGV4ZW1lID0gZG9jVG9rZW4ubGV4ZW1lOwogICAgICBpZiAobGV4ZW1lLnN0YXJ0c1dpdGgoJy8qKicpKSB7CiAgICAgICAgaW5TbGFzaCA9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eV9idWlsZGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBMaWJyYXJ5OwoKaW1wb3J0ICcuLi9jb21iaW5hdG9yLmRhcnQnIHNob3cgQ29tYmluYXRvcjsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyBpbnRlcm5hbFByb2JsZW0sIHVuc3VwcG9ydGVkOwoKaW1wb3J0ICcuLi9leHBvcnQuZGFydCcgc2hvdyBFeHBvcnQ7CgppbXBvcnQgJy4uL2xvYWRlci5kYXJ0JyBzaG93IExvYWRlcjsKCmltcG9ydCAnLi4vbWVzc2FnZXMuZGFydCcKICAgIHNob3cKICAgICAgICBGb3JtYXR0ZWRNZXNzYWdlLAogICAgICAgIExvY2F0ZWRNZXNzYWdlLAogICAgICAgIE1lc3NhZ2UsCiAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Db25zdHJ1Y3Rvck5vdEZvdW5kLAogICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtTm90Rm91bmRJbiwKICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVByaXZhdGVDb25zdHJ1Y3RvckFjY2VzczsKCmltcG9ydCAnLi4vc2V2ZXJpdHkuZGFydCcgc2hvdyBTZXZlcml0eTsKCmltcG9ydCAnYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIENsYXNzQnVpbGRlciwKICAgICAgICBCdWlsZGVyLAogICAgICAgIEZpZWxkQnVpbGRlciwKICAgICAgICBNb2RpZmllckJ1aWxkZXIsCiAgICAgICAgTmFtZUl0ZXJhdG9yLAogICAgICAgIFByZWZpeEJ1aWxkZXIsCiAgICAgICAgU2NvcGUsCiAgICAgICAgU2NvcGVCdWlsZGVyLAogICAgICAgIFR5cGVCdWlsZGVyOwoKaW1wb3J0ICdkZWNsYXJhdGlvbi5kYXJ0JzsKCmFic3RyYWN0IGNsYXNzIExpYnJhcnlCdWlsZGVyIGV4dGVuZHMgTW9kaWZpZXJCdWlsZGVyIHsKICBmaW5hbCBTY29wZSBzY29wZTsKCiAgZmluYWwgU2NvcGUgZXhwb3J0U2NvcGU7CgogIGZpbmFsIFNjb3BlQnVpbGRlciBzY29wZUJ1aWxkZXI7CgogIGZpbmFsIFNjb3BlQnVpbGRlciBleHBvcnRTY29wZUJ1aWxkZXI7CgogIGZpbmFsIExpc3Q8RXhwb3J0PiBleHBvcnRlcnMgPSA8RXhwb3J0PltdOwoKICBMaWJyYXJ5QnVpbGRlciBwYXJ0T2ZMaWJyYXJ5OwoKICBib29sIG1heUltcGxlbWVudFJlc3RyaWN0ZWRUeXBlcyA9IGZhbHNlOwoKICBMaWJyYXJ5QnVpbGRlcihVcmkgZmlsZVVyaSwgdGhpcy5zY29wZSwgdGhpcy5leHBvcnRTY29wZSkKICAgICAgOiBzY29wZUJ1aWxkZXIgPSBuZXcgU2NvcGVCdWlsZGVyKHNjb3BlKSwKICAgICAgICBleHBvcnRTY29wZUJ1aWxkZXIgPSBuZXcgU2NvcGVCdWlsZGVyKGV4cG9ydFNjb3BlKSwKICAgICAgICBzdXBlcihudWxsLCAtMSwgZmlsZVVyaSk7CgogIGJvb2wgZ2V0IGxlZ2FjeU1vZGUgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzU3ludGhldGljID0+IGZhbHNlOwoKICAvLyBEZWxpYmVyYXRlbHkgdW5yZWxhdGVkIHJldHVybiB0eXBlIHRvIHN0YXRpY2FsbHkgZGV0ZWN0IG1vcmUgYWNjaWRlbnRhbAogIC8vIHVzZSB1bnRpbCBCdWlsZGVyLnRhcmdldCBpcyBmdWxseSByZXRpcmVkLgogIFVucmVsYXRlZFRhcmdldCBnZXQgdGFyZ2V0ID0+IHVuc3VwcG9ydGVkKAogICAgICAiTGlicmFyeUJ1aWxkZXIudGFyZ2V0IGlzIGRlcHJlY2F0ZWQuICIKICAgICAgIlVzZSBMaWJyYXJ5QnVpbGRlci5saWJyYXJ5IGluc3RlYWQuIiwKICAgICAgY2hhck9mZnNldCwKICAgICAgZmlsZVVyaSk7CgogIC8vLyBTZXQgdGhlIGxhbmdhdWdlIHZlcnNpb24gdG8gYSBzcGVjaWZpYyBub24tbnVsbCBtYWpvciBhbmQgbWlub3IgdmVyc2lvbi4KICAvLy8KICAvLy8gSWYgdGhlIGxhbmd1YWdlIHZlcnNpb24gaGFzIHByZXZpb3VzbHkgYmVlbiBleHBsaWNpdGx5IHNldCBzZXQgKGkuZS4gd2l0aAogIC8vLyBbZXhwbGljaXRdIHNldCB0byB0cnVlKSwgYW55IHN1YnNlcXVlbnQgY2FsbCAoZXhwbGljaXQgb3Igbm90KSBzaG91bGQgYmUKICAvLy8gaWdub3JlZC4KICAvLy8gTXVsdGlwbGUgY2FsbHMgd2l0aCBbZXhwbGljaXRdIHNldCB0byBmYWxzZSBzaG91bGQgYmUgYWxsb3dlZCB0aG91Z2guCiAgLy8vCiAgLy8vIFRoZSBtYWluIGlkZWEgaXMgdGhhdCB0aGUgLnBhY2thZ2VzIGZpbGUgc3BlY2lmaWVzIGEgZGVmYXVsdCBsYW5ndWFnZQogIC8vLyB2ZXJzaW9uLCBidXQgdGhhdCB0aGUgbGlicmFyeSBjYW4gaGF2ZSBzb3VyY2UgY29kZSB0aGF0IHNwZWNpZmllcyBhbm90aGVyCiAgLy8vIG9uZSB3aGljaCBzaG91bGQgYmUgc3VwcG9ydGVkLCBidXQgc3BlY2lmeWluZyBzZXZlcmFsIGluIGNvZGUgc2hvdWxkIG5vdAogIC8vLyBjaGFuZ2UgYW55dGhpbmcuCiAgLy8vCiAgLy8vIFtvZmZzZXRdIGFuZCBbbGVuZ3RoXSByZWZlcnMgdG8gdGhlIG9mZnNldCBhbmQgbGVuZ3RoIG9mIHRoZSBzb3VyY2UgY29kZQogIC8vLyBzcGVjaWZ5aW5nIHRoZSBsYW5ndWFnZSB2ZXJzaW9uLgogIHZvaWQgc2V0TGFuZ3VhZ2VWZXJzaW9uKGludCBtYWpvciwgaW50IG1pbm9yLAogICAgICB7aW50IG9mZnNldDogMCwgaW50IGxlbmd0aCwgYm9vbCBleHBsaWNpdH0pOwoKICBAb3ZlcnJpZGUKICBCdWlsZGVyIGdldCBwYXJlbnQgPT4gbnVsbDsKCiAgYm9vbCBnZXQgaXNQYXJ0ID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGRlYnVnTmFtZSA9PiAiTGlicmFyeUJ1aWxkZXIiOwoKICBMb2FkZXIgZ2V0IGxvYWRlcjsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBtb2RpZmllcnMgPT4gMDsKCiAgLy8vIFJldHVybnMgdGhlIFtMaWJyYXJ5XSBidWlsdCBieSB0aGlzIGJ1aWxkZXIuCiAgTGlicmFyeSBnZXQgbGlicmFyeTsKCiAgVXJpIGdldCB1cmk7CgogIEl0ZXJhdG9yPEJ1aWxkZXI+IGdldCBpdGVyYXRvciB7CiAgICByZXR1cm4gbmV3IExpYnJhcnlMb2NhbERlY2xhcmF0aW9uSXRlcmF0b3IodGhpcyk7CiAgfQoKICBOYW1lSXRlcmF0b3IgZ2V0IG5hbWVJdGVyYXRvciB7CiAgICByZXR1cm4gbmV3IExpYnJhcnlMb2NhbERlY2xhcmF0aW9uTmFtZUl0ZXJhdG9yKHRoaXMpOwogIH0KCiAgQnVpbGRlciBhZGRCdWlsZGVyKFN0cmluZyBuYW1lLCBCdWlsZGVyIGRlY2xhcmF0aW9uLCBpbnQgY2hhck9mZnNldCk7CgogIHZvaWQgYWRkRXhwb3J0ZXIoCiAgICAgIExpYnJhcnlCdWlsZGVyIGV4cG9ydGVyLCBMaXN0PENvbWJpbmF0b3I+IGNvbWJpbmF0b3JzLCBpbnQgY2hhck9mZnNldCkgewogICAgZXhwb3J0ZXJzLmFkZChuZXcgRXhwb3J0KGV4cG9ydGVyLCB0aGlzLCBjb21iaW5hdG9ycywgY2hhck9mZnNldCkpOwogIH0KCiAgLy8vIEFkZCBhIHByb2JsZW0gd2l0aCBhIHNldmVyaXR5IGRldGVybWluZWQgYnkgdGhlIHNldmVyaXR5IG9mIHRoZSBtZXNzYWdlLgogIC8vLwogIC8vLyBJZiBbZmlsZVVyaV0gaXMgbnVsbCwgaXQgZGVmYXVsdHMgdG8gYHRoaXMuZmlsZVVyaWAuCiAgLy8vCiAgLy8vIFNlZSBgTG9hZGVyLmFkZE1lc3NhZ2VgIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUKICAvLy8gYXJndW1lbnRzIHBhc3NlZCB0byB0aGlzIG1ldGhvZC4KICBGb3JtYXR0ZWRNZXNzYWdlIGFkZFByb2JsZW0oCiAgICAgIE1lc3NhZ2UgbWVzc2FnZSwgaW50IGNoYXJPZmZzZXQsIGludCBsZW5ndGgsIFVyaSBmaWxlVXJpLAogICAgICB7Ym9vbCB3YXNIYW5kbGVkOiBmYWxzZSwKICAgICAgTGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dCwKICAgICAgU2V2ZXJpdHkgc2V2ZXJpdHksCiAgICAgIGJvb2wgcHJvYmxlbU9uTGlicmFyeTogZmFsc2V9KSB7CiAgICBmaWxlVXJpID8/PSB0aGlzLmZpbGVVcmk7CgogICAgcmV0dXJuIGxvYWRlci5hZGRQcm9ibGVtKG1lc3NhZ2UsIGNoYXJPZmZzZXQsIGxlbmd0aCwgZmlsZVVyaSwKICAgICAgICB3YXNIYW5kbGVkOiB3YXNIYW5kbGVkLAogICAgICAgIGNvbnRleHQ6IGNvbnRleHQsCiAgICAgICAgc2V2ZXJpdHk6IHNldmVyaXR5LAogICAgICAgIHByb2JsZW1PbkxpYnJhcnk6IHRydWUpOwogIH0KCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZXhwb3J0IHNjb3BlIHdhcyBtb2RpZmllZC4KICBib29sIGFkZFRvRXhwb3J0U2NvcGUoU3RyaW5nIG5hbWUsIEJ1aWxkZXIgbWVtYmVyLCBbaW50IGNoYXJPZmZzZXQgPSAtMV0pIHsKICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoIl8iKSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKG1lbWJlciBpcyBQcmVmaXhCdWlsZGVyKSByZXR1cm4gZmFsc2U7CiAgICBNYXA8U3RyaW5nLCBCdWlsZGVyPiBtYXAgPQogICAgICAgIG1lbWJlci5pc1NldHRlciA/IGV4cG9ydFNjb3BlLnNldHRlcnMgOiBleHBvcnRTY29wZS5sb2NhbDsKICAgIEJ1aWxkZXIgZXhpc3RpbmcgPSBtYXBbbmFtZV07CiAgICBpZiAoZXhpc3RpbmcgPT0gbWVtYmVyKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoZXhpc3RpbmcgIT0gbnVsbCkgewogICAgICBCdWlsZGVyIHJlc3VsdCA9IGNvbXB1dGVBbWJpZ3VvdXNEZWNsYXJhdGlvbigKICAgICAgICAgIG5hbWUsIGV4aXN0aW5nLCBtZW1iZXIsIGNoYXJPZmZzZXQsCiAgICAgICAgICBpc0V4cG9ydDogdHJ1ZSk7CiAgICAgIG1hcFtuYW1lXSA9IHJlc3VsdDsKICAgICAgcmV0dXJuIHJlc3VsdCAhPSBleGlzdGluZzsKICAgIH0gZWxzZSB7CiAgICAgIG1hcFtuYW1lXSA9IG1lbWJlcjsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgdm9pZCBhZGRUb1Njb3BlKFN0cmluZyBuYW1lLCBCdWlsZGVyIG1lbWJlciwgaW50IGNoYXJPZmZzZXQsIGJvb2wgaXNJbXBvcnQpOwoKICBCdWlsZGVyIGNvbXB1dGVBbWJpZ3VvdXNEZWNsYXJhdGlvbigKICAgICAgU3RyaW5nIG5hbWUsIEJ1aWxkZXIgZGVjbGFyYXRpb24sIEJ1aWxkZXIgb3RoZXIsIGludCBjaGFyT2Zmc2V0LAogICAgICB7Ym9vbCBpc0V4cG9ydDogZmFsc2UsIGJvb2wgaXNJbXBvcnQ6IGZhbHNlfSk7CgogIGludCBmaW5pc2hEZWZlcnJlZExvYWRUZWFyb2ZmcygpID0+IDA7CgogIGludCBmaW5pc2hGb3J3YXJkZXJzKCkgPT4gMDsKCiAgaW50IGZpbmlzaE5hdGl2ZU1ldGhvZHMoKSA9PiAwOwoKICBpbnQgZmluaXNoUGF0Y2hNZXRob2RzKCkgPT4gMDsKCiAgLy8vIExvb2tzIHVwIFtjb25zdHJ1Y3Rvck5hbWVdIGluIHRoZSBjbGFzcyBuYW1lZCBbY2xhc3NOYW1lXS4KICAvLy8KICAvLy8gVGhlIGNsYXNzIGlzIGxvb2tlZCB1cCBpbiB0aGlzIGxpYnJhcnkncyBleHBvcnQgc2NvcGUgdW5sZXNzCiAgLy8vIFtieXBhc3NMaWJyYXJ5UHJpdmFjeV0gaXMgdHJ1ZSwgaW4gd2hpY2ggY2FzZSBpdCBpcyBsb29rZWQgdXAgaW4gdGhlCiAgLy8vIGxpYnJhcnkgc2NvcGUgb2YgdGhpcyBsaWJyYXJ5LgogIC8vLwogIC8vLyBJdCBpcyBhbiBlcnJvciBpZiBubyBzdWNoIGNsYXNzIGlzIGZvdW5kLCBvciBpZiB0aGUgY2xhc3MgZG9lc24ndCBoYXZlIGEKICAvLy8gbWF0Y2hpbmcgY29uc3RydWN0b3IgKG9yIGZhY3RvcnkpLgogIC8vLwogIC8vLyBJZiBbY29uc3RydWN0b3JOYW1lXSBpcyBudWxsIG9yIHRoZSBlbXB0eSBzdHJpbmcsIGl0J3MgYXNzdW1lZCB0byBiZSBhbgogIC8vLyB1bm5hbWVkIGNvbnN0cnVjdG9yLiBpdCdzIGFuIGVycm9yIGlmIFtjb25zdHJ1Y3Rvck5hbWVdIHN0YXJ0cyB3aXRoCiAgLy8vIGAiXyJgLCBhbmQgW2J5cGFzc0xpYnJhcnlQcml2YWN5XSBpcyBmYWxzZS4KICBCdWlsZGVyIGdldENvbnN0cnVjdG9yKFN0cmluZyBjbGFzc05hbWUsCiAgICAgIHtTdHJpbmcgY29uc3RydWN0b3JOYW1lLCBib29sIGJ5cGFzc0xpYnJhcnlQcml2YWN5OiBmYWxzZX0pIHsKICAgIGNvbnN0cnVjdG9yTmFtZSA/Pz0gIiI7CiAgICBpZiAoY29uc3RydWN0b3JOYW1lLnN0YXJ0c1dpdGgoIl8iKSAmJiAhYnlwYXNzTGlicmFyeVByaXZhY3kpIHsKICAgICAgcmV0dXJuIGludGVybmFsUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtUHJpdmF0ZUNvbnN0cnVjdG9yQWNjZXNzCiAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoY29uc3RydWN0b3JOYW1lKSwKICAgICAgICAgIC0xLAogICAgICAgICAgbnVsbCk7CiAgICB9CiAgICBCdWlsZGVyIGNscyA9IChieXBhc3NMaWJyYXJ5UHJpdmFjeSA/IHNjb3BlIDogZXhwb3J0U2NvcGUpCiAgICAgICAgLmxvb2t1cChjbGFzc05hbWUsIC0xLCBudWxsKTsKICAgIGlmIChjbHMgaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgIC8vIFRPRE8oYWhlKTogVGhpcyBjb2RlIGlzIHNpbWlsYXIgdG8gY29kZSBpbiBgZW5kTmV3RXhwcmVzc2lvbmAgaW4KICAgICAgLy8gYGJvZHlfYnVpbGRlci5kYXJ0YCwgdHJ5IHRvIHNoYXJlIGl0LgogICAgICBCdWlsZGVyIGNvbnN0cnVjdG9yID0KICAgICAgICAgIGNscy5maW5kQ29uc3RydWN0b3JPckZhY3RvcnkoY29uc3RydWN0b3JOYW1lLCAtMSwgbnVsbCwgdGhpcyk7CiAgICAgIGlmIChjb25zdHJ1Y3RvciA9PSBudWxsKSB7CiAgICAgICAgLy8gRmFsbC10aHJvdWdoIHRvIGludGVybmFsIGVycm9yIGJlbG93LgogICAgICB9IGVsc2UgaWYgKGNvbnN0cnVjdG9yLmlzQ29uc3RydWN0b3IpIHsKICAgICAgICBpZiAoIWNscy5pc0Fic3RyYWN0KSB7CiAgICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGNvbnN0cnVjdG9yLmlzRmFjdG9yeSkgewogICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKICAgICAgfQogICAgfQogICAgdGhyb3cgaW50ZXJuYWxQcm9ibGVtKAogICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtQ29uc3RydWN0b3JOb3RGb3VuZC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAiJGNsYXNzTmFtZS4kY29uc3RydWN0b3JOYW1lIiwgdXJpKSwKICAgICAgICAtMSwKICAgICAgICBudWxsKTsKICB9CgogIGludCBmaW5pc2hUeXBlVmFyaWFibGVzKENsYXNzQnVpbGRlciBvYmplY3QsIFR5cGVCdWlsZGVyIGR5bmFtaWNUeXBlKSA9PiAwOwoKICAvLy8gVGhpcyBtZXRob2QgaW5zdGFudGlhdGVzIHR5cGUgcGFyYW1ldGVycyB0byB0aGVpciBib3VuZHMgaW4gc29tZSBjYXNlcwogIC8vLyB3aGVyZSB0aGV5IHdlcmUgb21pdHRlZCBieSB0aGUgcHJvZ3JhbW1lciBhbmQgbm90IHByb3ZpZGVkIGJ5IHRoZSB0eXBlCiAgLy8vIGluZmVyZW5jZS4gIFRoZSBtZXRob2QgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGRpc3RpbmN0IHR5cGUgdmFyaWFibGVzCiAgLy8vIHRoYXQgd2VyZSBpbnN0YW50aWF0ZWQgaW4gdGhpcyBsaWJyYXJ5LgogIGludCBjb21wdXRlRGVmYXVsdFR5cGVzKFR5cGVCdWlsZGVyIGR5bmFtaWNUeXBlLCBUeXBlQnVpbGRlciBib3R0b21UeXBlLAogICAgICBDbGFzc0J1aWxkZXIgb2JqZWN0Q2xhc3MpIHsKICAgIHJldHVybiAwOwogIH0KCiAgdm9pZCBiZWNvbWVDb3JlTGlicmFyeSgpIHsKICAgIGlmIChzY29wZS5sb2NhbFsiZHluYW1pYyJdID09IG51bGwpIHsKICAgICAgYWRkU3ludGhldGljRGVjbGFyYXRpb25PZkR5bmFtaWMoKTsKICAgIH0KICB9CgogIHZvaWQgYWRkU3ludGhldGljRGVjbGFyYXRpb25PZkR5bmFtaWMoKTsKCiAgLy8vIExvb2t1cHMgdGhlIG1lbWJlciBbbmFtZV0gZGVjbGFyZWQgaW4gdGhpcyBsaWJyYXJ5LgogIC8vLwogIC8vLyBJZiBbcmVxdWlyZWRdIGlzIGB0cnVlYCBhbmQgbm8gbWVtYmVyIGlzIGZvdW5kIGFuIGludGVybmFsIHByb2JsZW0gaXMKICAvLy8gcmVwb3J0ZWQuCiAgQnVpbGRlciBsb29rdXBMb2NhbE1lbWJlcihTdHJpbmcgbmFtZSwge2Jvb2wgcmVxdWlyZWQ6IGZhbHNlfSkgewogICAgQnVpbGRlciBidWlsZGVyID0gc2NvcGUubG9jYWxbbmFtZV07CiAgICBpZiAocmVxdWlyZWQgJiYgYnVpbGRlciA9PSBudWxsKSB7CiAgICAgIGludGVybmFsUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtTm90Rm91bmRJbi53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgIG5hbWUsIGZ1bGxOYW1lRm9yRXJyb3JzKSwKICAgICAgICAgIC0xLAogICAgICAgICAgbnVsbCk7CiAgICB9CiAgICByZXR1cm4gYnVpbGRlcjsKICB9CgogIEJ1aWxkZXIgbG9va3VwKFN0cmluZyBuYW1lLCBpbnQgY2hhck9mZnNldCwgVXJpIGZpbGVVcmkpIHsKICAgIHJldHVybiBzY29wZS5sb29rdXAobmFtZSwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgfQoKICAvLy8gSWYgdGhpcyBpcyBhIHBhdGNoIGxpYnJhcnksIGFwcGx5IGl0cyBwYXRjaGVzIHRvIFtvcmlnaW5dLgogIHZvaWQgYXBwbHlQYXRjaGVzKCkgewogICAgaWYgKCFpc1BhdGNoKSByZXR1cm47CiAgICB1bnN1cHBvcnRlZCgiJHtydW50aW1lVHlwZX0uYXBwbHlQYXRjaGVzIiwgLTEsIGZpbGVVcmkpOwogIH0KCiAgdm9pZCByZWNvcmRBY2Nlc3MoaW50IGNoYXJPZmZzZXQsIGludCBsZW5ndGgsIFVyaSBmaWxlVXJpKSB7fQoKICB2b2lkIGJ1aWxkT3V0bGluZUV4cHJlc3Npb25zKCkge30KCiAgTGlzdDxGaWVsZEJ1aWxkZXI+IHRha2VJbXBsaWNpdGx5VHlwZWRGaWVsZHMoKSA9PiBudWxsOwp9CgpjbGFzcyBMaWJyYXJ5TG9jYWxEZWNsYXJhdGlvbkl0ZXJhdG9yIGltcGxlbWVudHMgSXRlcmF0b3I8QnVpbGRlcj4gewogIGZpbmFsIExpYnJhcnlCdWlsZGVyIGxpYnJhcnk7CiAgZmluYWwgSXRlcmF0b3I8QnVpbGRlcj4gaXRlcmF0b3I7CgogIExpYnJhcnlMb2NhbERlY2xhcmF0aW9uSXRlcmF0b3IodGhpcy5saWJyYXJ5KQogICAgICA6IGl0ZXJhdG9yID0gbGlicmFyeS5zY29wZS5pdGVyYXRvcjsKCiAgQnVpbGRlciBnZXQgY3VycmVudCA9PiBpdGVyYXRvci5jdXJyZW50OwoKICBib29sIG1vdmVOZXh0KCkgewogICAgd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgaWYgKGN1cnJlbnQucGFyZW50ID09IGxpYnJhcnkpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKY2xhc3MgTGlicmFyeUxvY2FsRGVjbGFyYXRpb25OYW1lSXRlcmF0b3IgaW1wbGVtZW50cyBOYW1lSXRlcmF0b3IgewogIGZpbmFsIExpYnJhcnlCdWlsZGVyIGxpYnJhcnk7CiAgZmluYWwgTmFtZUl0ZXJhdG9yIGl0ZXJhdG9yOwoKICBMaWJyYXJ5TG9jYWxEZWNsYXJhdGlvbk5hbWVJdGVyYXRvcih0aGlzLmxpYnJhcnkpCiAgICAgIDogaXRlcmF0b3IgPSBsaWJyYXJ5LnNjb3BlLm5hbWVJdGVyYXRvcjsKCiAgQnVpbGRlciBnZXQgY3VycmVudCA9PiBpdGVyYXRvci5jdXJyZW50OwoKICBTdHJpbmcgZ2V0IG5hbWUgPT4gaXRlcmF0b3IubmFtZTsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgIGlmIChjdXJyZW50LnBhcmVudCA9PSBsaWJyYXJ5KSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9Cn0KgTkATk48AR8BLwEtAT0BJQElARoJGhgRNCs5ASkBFgkWERYZFhcPFhUBGwE4FQEbASMBKQEtASABLAE8MDwiASABIQFNMC0uLRIQAU8GUE8PTAZMUE8XBk8nMDMBDB4BHAEMLAEVAQwaATMXAQ8BIzYEASI6BAFIARRPSAQBTwY7BjgnH0AfJBknHgFDIBocIQQBNU4sLx9DIiocNC4bGiENGgYRBAFPASdHNQEpAR8BIgEhAUEGQ0slBk8pBk5KMitEHEQeOi8OEQY/Jh9KLxxJITEuHx4KKhwIBhtCMQwPBAFOAU1NSy5LIg4EAR0qKgYEASsBOgZMEEMpJxc7KA4RBhQEAT00BAFBGBo9BAFAASQBOgIBRSAkATArASsBFCIyBhIEAgFEIB8BNC8BKwEkARQiMgYSBAIBOHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2xpYnJhcnlfYnVpbGRlci5kYXJ0SXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS90eXBlX2luZmVyZW5jZS9pbmZlcmVuY2VfaGVscGVyLmRhcnSEty8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6Y29yZScgaGlkZSBNYXBFbnRyeTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIHNob3cgQ29yZVR5cGVzOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IExvY2F0ZWRNZXNzYWdlLCBNZXNzYWdlOwoKaW1wb3J0ICcuLi9rZXJuZWwvZm9yZXN0LmRhcnQnOwoKYWJzdHJhY3QgY2xhc3MgSW5mZXJlbmNlSGVscGVyIHsKICBDb3JlVHlwZXMgZ2V0IGNvcmVUeXBlczsKCiAgVXJpIGdldCB1cmk7CgogIEZvcmVzdCBnZXQgZm9yZXN0OwoKICBzZXQgdHJhbnNmb3JtU2V0TGl0ZXJhbHMoYm9vbCB2YWx1ZSk7CgogIEV4cHJlc3Npb24gYnVpbGRQcm9ibGVtKE1lc3NhZ2UgbWVzc2FnZSwgaW50IGNoYXJPZmZzZXQsIGludCBsZW5ndGgsCiAgICAgIHtMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0LCBib29sIHN1cHByZXNzTWVzc2FnZX0pOwoKICBMb2NhdGVkTWVzc2FnZSBjaGVja0FyZ3VtZW50c0ZvclR5cGUoCiAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwgQXJndW1lbnRzIGFyZ3VtZW50cywgaW50IG9mZnNldCk7CgogIHZvaWQgYWRkUHJvYmxlbShNZXNzYWdlIG1lc3NhZ2UsIGludCBjaGFyT2Zmc2V0LCBpbnQgbGVuZ3RoLAogICAgICB7TGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dCwgYm9vbCB3YXNIYW5kbGVkfSk7CgogIEV4cHJlc3Npb24gd3JhcEluUHJvYmxlbShFeHByZXNzaW9uIGV4cHJlc3Npb24sIE1lc3NhZ2UgbWVzc2FnZSwgaW50IGxlbmd0aCwKICAgICAge0xpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHR9KTsKCiAgU3RyaW5nIGNvbnN0cnVjdG9yTmFtZUZvckRpYWdub3N0aWNzKFN0cmluZyBuYW1lLAogICAgICB7U3RyaW5nIGNsYXNzTmFtZSwgYm9vbCBpc1N1cGVyfSk7CgogIEV4cHJlc3Npb24gZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oRXhwcmVzc2lvbiBub2RlKTsKfQoqAE5OPAEiASIBOAE7ASABIRsBDwEVASgBRz0BKD8BPzgBTycBNCkBOgIBQHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS90eXBlX2luZmVyZW5jZS9pbmZlcmVuY2VfaGVscGVyLmRhcnROc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3R5cGVfaW5mZXJlbmNlL3R5cGVfaW5mZXJlbmNlX2VuZ2luZS5kYXJ0mnovLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLm1kIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIENvbnN0cnVjdG9yLAogICAgICAgIERhcnRUeXBlLAogICAgICAgIERhcnRUeXBlVmlzaXRvciwKICAgICAgICBEeW5hbWljVHlwZSwKICAgICAgICBGaWVsZCwKICAgICAgICBGdW5jdGlvblR5cGUsCiAgICAgICAgSW50ZXJmYWNlVHlwZSwKICAgICAgICBNZW1iZXIsCiAgICAgICAgTmFtZWRUeXBlLAogICAgICAgIFR5cGVQYXJhbWV0ZXIsCiAgICAgICAgVHlwZVBhcmFtZXRlclR5cGUsCiAgICAgICAgVHlwZWRlZlR5cGUsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnIHNob3cgQ2xhc3NIaWVyYXJjaHk7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NvcmVfdHlwZXMuZGFydCcgc2hvdyBDb3JlVHlwZXM7CgppbXBvcnQgJy4uLy4uL2Jhc2UvaW5zdHJ1bWVudGF0aW9uLmRhcnQnIHNob3cgSW5zdHJ1bWVudGF0aW9uOwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydCcKICAgIHNob3cgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyLCBJbXBsaWNpdEZpZWxkVHlwZSwgTGlicmFyeUJ1aWxkZXI7CgppbXBvcnQgJy4uL3NvdXJjZS9zb3VyY2VfbGlicmFyeV9idWlsZGVyLmRhcnQnIHNob3cgU291cmNlTGlicmFyeUJ1aWxkZXI7CgppbXBvcnQgJ3R5cGVfaW5mZXJyZXIuZGFydCcgc2hvdyBUeXBlSW5mZXJyZXI7CgppbXBvcnQgJ3R5cGVfc2NoZW1hX2Vudmlyb25tZW50LmRhcnQnIHNob3cgVHlwZVNjaGVtYUVudmlyb25tZW50OwoKZW51bSBWYXJpYW5jZSB7CiAgY292YXJpYW50LAogIGNvbnRyYXZhcmlhbnQsCiAgaW52YXJpYW50LAp9CgpWYXJpYW5jZSBpbnZlcnRWYXJpYW5jZShWYXJpYW5jZSB2YXJpYW5jZSkgewogIHN3aXRjaCAodmFyaWFuY2UpIHsKICAgIGNhc2UgVmFyaWFuY2UuY292YXJpYW50OgogICAgICByZXR1cm4gVmFyaWFuY2UuY29udHJhdmFyaWFudDsKICAgIGNhc2UgVmFyaWFuY2UuY29udHJhdmFyaWFudDoKICAgICAgcmV0dXJuIFZhcmlhbmNlLmNvdmFyaWFudDsKICAgIGNhc2UgVmFyaWFuY2UuaW52YXJpYW50OgogIH0KICByZXR1cm4gdmFyaWFuY2U7Cn0KCi8vLyBWaXNpdG9yIHRvIGNoZWNrIHdoZXRoZXIgYSBnaXZlbiB0eXBlIG1lbnRpb25zIGFueSBvZiBhIGNsYXNzJ3MgdHlwZQovLy8gcGFyYW1ldGVycyBpbiBhIG5vbi1jb3ZhcmlhbnQgZmFzaGlvbi4KY2xhc3MgSW5jbHVkZXNUeXBlUGFyYW1ldGVyc05vbkNvdmFyaWFudGx5IGV4dGVuZHMgRGFydFR5cGVWaXNpdG9yPGJvb2w+IHsKICBWYXJpYW5jZSBfdmFyaWFuY2U7CgogIGZpbmFsIExpc3Q8VHlwZVBhcmFtZXRlcj4gX3R5cGVQYXJhbWV0ZXJzVG9TZWFyY2hGb3I7CgogIEluY2x1ZGVzVHlwZVBhcmFtZXRlcnNOb25Db3ZhcmlhbnRseSh0aGlzLl90eXBlUGFyYW1ldGVyc1RvU2VhcmNoRm9yLAogICAgICB7VmFyaWFuY2UgaW5pdGlhbFZhcmlhbmNlfSkKICAgICAgOiBfdmFyaWFuY2UgPSBpbml0aWFsVmFyaWFuY2U7CgogIEBvdmVycmlkZQogIGJvb2wgZGVmYXVsdERhcnRUeXBlKERhcnRUeXBlIG5vZGUpID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSBub2RlKSB7CiAgICBpZiAobm9kZS5yZXR1cm5UeXBlLmFjY2VwdCh0aGlzKSkgcmV0dXJuIHRydWU7CiAgICBWYXJpYW5jZSBvbGRWYXJpYW5jZSA9IF92YXJpYW5jZTsKICAgIF92YXJpYW5jZSA9IFZhcmlhbmNlLmludmFyaWFudDsKICAgIGZvciAoVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIgaW4gbm9kZS50eXBlUGFyYW1ldGVycykgewogICAgICBpZiAocGFyYW1ldGVyLmJvdW5kLmFjY2VwdCh0aGlzKSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICBfdmFyaWFuY2UgPSBpbnZlcnRWYXJpYW5jZShvbGRWYXJpYW5jZSk7CiAgICBmb3IgKERhcnRUeXBlIHBhcmFtZXRlciBpbiBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzKSB7CiAgICAgIGlmIChwYXJhbWV0ZXIuYWNjZXB0KHRoaXMpKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGZvciAoTmFtZWRUeXBlIHBhcmFtZXRlciBpbiBub2RlLm5hbWVkUGFyYW1ldGVycykgewogICAgICBpZiAocGFyYW1ldGVyLnR5cGUuYWNjZXB0KHRoaXMpKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIF92YXJpYW5jZSA9IG9sZFZhcmlhbmNlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEludGVyZmFjZVR5cGUoSW50ZXJmYWNlVHlwZSBub2RlKSB7CiAgICBmb3IgKERhcnRUeXBlIGFyZ3VtZW50IGluIG5vZGUudHlwZUFyZ3VtZW50cykgewogICAgICBpZiAoYXJndW1lbnQuYWNjZXB0KHRoaXMpKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSBub2RlKSB7CiAgICByZXR1cm4gbm9kZS51bmFsaWFzLmFjY2VwdCh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUeXBlUGFyYW1ldGVyVHlwZShUeXBlUGFyYW1ldGVyVHlwZSBub2RlKSB7CiAgICByZXR1cm4gX3ZhcmlhbmNlICE9IFZhcmlhbmNlLmNvdmFyaWFudCAmJgogICAgICAgIF90eXBlUGFyYW1ldGVyc1RvU2VhcmNoRm9yLmNvbnRhaW5zKG5vZGUucGFyYW1ldGVyKTsKICB9Cn0KCi8vLyBLZWVwcyB0cmFjayBvZiB0aGUgZ2xvYmFsIHN0YXRlIGZvciB0aGUgdHlwZSBpbmZlcmVuY2UgdGhhdCBvY2N1cnMgb3V0c2lkZQovLy8gb2YgbWV0aG9kIGJvZGllcyBhbmQgaW5pdGlhbGl6ZXJzLgovLy8KLy8vIFRoaXMgY2xhc3MgZGVzY3JpYmVzIHRoZSBpbnRlcmZhY2UgZm9yIHVzZSBieSBjbGllbnRzIG9mIHR5cGUgaW5mZXJlbmNlCi8vLyAoZS5nLiBEaWV0TGlzdGVuZXIpLiAgRGVyaXZlZCBjbGFzc2VzIHNob3VsZCBkZXJpdmUgZnJvbQovLy8gW1R5cGVJbmZlcmVuY2VFbmdpbmVJbXBsXS4KYWJzdHJhY3QgY2xhc3MgVHlwZUluZmVyZW5jZUVuZ2luZSB7CiAgQ2xhc3NIaWVyYXJjaHkgY2xhc3NIaWVyYXJjaHk7CgogIENsYXNzSGllcmFyY2h5QnVpbGRlciBoaWVyYXJjaHlCdWlsZGVyOwoKICBDb3JlVHlwZXMgY29yZVR5cGVzOwoKICAvLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlICJwcmVwYXJlIiBwaGFzZSBvZiB0eXBlIGluZmVyZW5jZSBpcyBjb21wbGV0ZS4KICBib29sIGlzVHlwZUluZmVyZW5jZVByZXBhcmVkID0gZmFsc2U7CgogIFR5cGVTY2hlbWFFbnZpcm9ubWVudCB0eXBlU2NoZW1hRW52aXJvbm1lbnQ7CgogIC8vLyBBIG1hcCBjb250YWluaW5nIGNvbnN0cnVjdG9ycyB3aXRoIGluaXRpYWxpemluZyBmb3JtYWxzIHdob3NlIHR5cGVzCiAgLy8vIG5lZWQgdG8gYmUgaW5mZXJyZWQuCiAgLy8vCiAgLy8vIFRoaXMgaXMgcmVwcmVzZW50ZWQgYXMgYSBtYXAgZnJvbSBhIGNvbnN0cnVjdG9yIHRvIGl0cyBsaWJyYXJ5CiAgLy8vIGJ1aWxkZXIgYmVjYXVzZSB0aGUgYnVpbGRlciBpcyB1c2VkIHRvIHJlcG9ydCBlcnJvcnMgZHVlIHRvIGN5Y2xpYwogIC8vLyBpbmZlcmVuY2UgZGVwZW5kZW5jaWVzLgogIGZpbmFsIE1hcDxDb25zdHJ1Y3RvciwgTGlicmFyeUJ1aWxkZXI+IHRvQmVJbmZlcnJlZCA9IHt9OwoKICAvLy8gQSBtYXAgY29udGFpbmluZyBjb25zdHJ1Y3RvcnMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgaW5mZXJyZWQuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCB0byBkZXRlY3QgY3ljbGljIGluZmVyZW5jZSBkZXBlbmRlbmNpZXMuICBJdCBpcyByZXByZXNlbnRlZAogIC8vLyBhcyBhIG1hcCBmcm9tIGEgY29uc3RydWN0b3IgdG8gaXRzIGxpYnJhcnkgYnVpbGRlciBiZWNhdXNlIHRoZSBidWlsZGVyCiAgLy8vIGlzIHVzZWQgdG8gcmVwb3J0IGVycm9ycy4KICBmaW5hbCBNYXA8Q29uc3RydWN0b3IsIExpYnJhcnlCdWlsZGVyPiBiZWluZ0luZmVycmVkID0ge307CgogIGZpbmFsIEluc3RydW1lbnRhdGlvbiBpbnN0cnVtZW50YXRpb247CgogIFR5cGVJbmZlcmVuY2VFbmdpbmUodGhpcy5pbnN0cnVtZW50YXRpb24pOwoKICAvLy8gQ3JlYXRlcyBhIHR5cGUgaW5mZXJyZXIgZm9yIHVzZSBpbnNpZGUgb2YgYSBtZXRob2QgYm9keSBkZWNsYXJlZCBpbiBhIGZpbGUKICAvLy8gd2l0aCB0aGUgZ2l2ZW4gW3VyaV0uCiAgVHlwZUluZmVycmVyIGNyZWF0ZUxvY2FsVHlwZUluZmVycmVyKAogICAgICBVcmkgdXJpLCBJbnRlcmZhY2VUeXBlIHRoaXNUeXBlLCBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KTsKCiAgLy8vIENyZWF0ZXMgYSBbVHlwZUluZmVycmVyXSBvYmplY3Qgd2hpY2ggaXMgcmVhZHkgdG8gcGVyZm9ybSB0eXBlIGluZmVyZW5jZQogIC8vLyBvbiB0aGUgZ2l2ZW4gW2ZpZWxkXS4KICBUeXBlSW5mZXJyZXIgY3JlYXRlVG9wTGV2ZWxUeXBlSW5mZXJyZXIoCiAgICAgIFVyaSB1cmksIEludGVyZmFjZVR5cGUgdGhpc1R5cGUsIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkpOwoKICAvLy8gUGVyZm9ybXMgdGhlIHRoaXJkIHBoYXNlIG9mIHRvcCBsZXZlbCBpbmZlcmVuY2UsIHdoaWNoIGlzIHRvIHZpc2l0IGFsbAogIC8vLyBjb25zdHJ1Y3RvcnMgc3RpbGwgbmVlZGluZyBpbmZlcmVuY2UgYW5kIGluZmVyIHRoZSB0eXBlcyBvZiB0aGVpcgogIC8vLyBpbml0aWFsaXppbmcgZm9ybWFscyBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkcy4KICB2b2lkIGZpbmlzaFRvcExldmVsSW5pdGlhbGl6aW5nRm9ybWFscygpIHsKICAgIC8vIEZpZWxkIHR5cGVzIGhhdmUgYWxsIGJlZW4gaW5mZXJyZWQgc28gdGhlcmUgY2Fubm90IGJlIGEgY3ljbGljCiAgICAvLyBkZXBlbmRlbmN5LgogICAgZm9yIChDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciBpbiB0b0JlSW5mZXJyZWQua2V5cykgewogICAgICBmb3IgKFZhcmlhYmxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb24KICAgICAgICAgIGluIGNvbnN0cnVjdG9yLmZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzKSB7CiAgICAgICAgaW5mZXJJbml0aWFsaXppbmdGb3JtYWwoZGVjbGFyYXRpb24sIGNvbnN0cnVjdG9yKTsKICAgICAgfQogICAgICBmb3IgKFZhcmlhYmxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb24KICAgICAgICAgIGluIGNvbnN0cnVjdG9yLmZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycykgewogICAgICAgIGluZmVySW5pdGlhbGl6aW5nRm9ybWFsKGRlY2xhcmF0aW9uLCBjb25zdHJ1Y3Rvcik7CiAgICAgIH0KICAgIH0KICAgIHRvQmVJbmZlcnJlZC5jbGVhcigpOwogIH0KCiAgdm9pZCBpbmZlckluaXRpYWxpemluZ0Zvcm1hbChWYXJpYWJsZURlY2xhcmF0aW9uIGZvcm1hbCwgQ29uc3RydWN0b3IgcGFyZW50KSB7CiAgICBpZiAoZm9ybWFsLnR5cGUgPT0gbnVsbCkgewogICAgICBmb3IgKEZpZWxkIGZpZWxkIGluIHBhcmVudC5lbmNsb3NpbmdDbGFzcy5maWVsZHMpIHsKICAgICAgICBpZiAoZmllbGQubmFtZS5uYW1lID09IGZvcm1hbC5uYW1lKSB7CiAgICAgICAgICBUeXBlSW5mZXJlbmNlRW5naW5lLnJlc29sdmVJbmZlcmVuY2VOb2RlKGZpZWxkKTsKICAgICAgICAgIGZvcm1hbC50eXBlID0gZmllbGQudHlwZTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gV2UgZGlkIG5vdCBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkLCBzbyB0aGUgcHJvZ3JhbSBpcyBlcnJvbmVvdXMuCiAgICAgIC8vIFRoZSBlcnJvciBzaG91bGQgaGF2ZSBiZWVuIHJlcG9ydGVkIGVsc2V3aGVyZSBhbmQgdHlwZSBpbmZlcmVuY2UKICAgICAgLy8gc2hvdWxkIGNvbnRpbnVlIGJ5IGluZmVycmluZyBkeW5hbWljLgogICAgICBmb3JtYWwudHlwZSA9IGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICB9CiAgfQoKICAvLy8gR2V0cyByZWFkeSB0byBkbyB0b3AgbGV2ZWwgdHlwZSBpbmZlcmVuY2UgZm9yIHRoZSBjb21wb25lbnQgaGF2aW5nIHRoZQogIC8vLyBnaXZlbiBbaGllcmFyY2h5XSwgdXNpbmcgdGhlIGdpdmVuIFtjb3JlVHlwZXNdLgogIHZvaWQgcHJlcGFyZVRvcExldmVsKENvcmVUeXBlcyBjb3JlVHlwZXMsIENsYXNzSGllcmFyY2h5IGhpZXJhcmNoeSkgewogICAgdGhpcy5jb3JlVHlwZXMgPSBjb3JlVHlwZXM7CiAgICB0aGlzLmNsYXNzSGllcmFyY2h5ID0gaGllcmFyY2h5OwogICAgdGhpcy50eXBlU2NoZW1hRW52aXJvbm1lbnQgPQogICAgICAgIG5ldyBUeXBlU2NoZW1hRW52aXJvbm1lbnQoY29yZVR5cGVzLCBoaWVyYXJjaHkpOwogIH0KCiAgc3RhdGljIE1lbWJlciByZXNvbHZlSW5mZXJlbmNlTm9kZShNZW1iZXIgbWVtYmVyKSB7CiAgICBpZiAobWVtYmVyIGlzIEZpZWxkKSB7CiAgICAgIERhcnRUeXBlIHR5cGUgPSBtZW1iZXIudHlwZTsKICAgICAgaWYgKHR5cGUgaXMgSW1wbGljaXRGaWVsZFR5cGUpIHsKICAgICAgICBpZiAodHlwZS5tZW1iZXIudGFyZ2V0ICE9IG1lbWJlcikgewogICAgICAgICAgdHlwZS5tZW1iZXIuaW5mZXJDb3BpZWRUeXBlKG1lbWJlcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHR5cGUubWVtYmVyLmluZmVyVHlwZSgpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIG1lbWJlcjsKICB9Cn0KgNQATU4/ASEJFRIZFQ8WFxATFxsVHQFCATgBPwEnQwFKAS8BQgEQDRENAgEtFh0lISEdBBMCAUkrSxYBOAFIIiUBDDABDC4zJiQ7NQYtPC8GODQGHRIEAQwwNC4GEgQBDCwmBAEMOC49BAIBTycETD0fJSEBKgEXAUsoAS8BShsGRUkePAFGBk9NID0BKQEtAVEcKEYBTxwrRgFNSDotRhM5Kzo7CCs1OwgGGgQBUR86LjskEgoIT0ovKQYEAU02SCAlITkEATYbIycsLxEjCggGEwQCAUVwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdHlwZV9pbmZlcmVuY2UvdHlwZV9pbmZlcmVuY2VfZW5naW5lLmRhcnRQc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3R5cGVfaW5mZXJlbmNlL3R5cGVfc2NoZW1hX2VsaW1pbmF0aW9uLmRhcnSVIC8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UubWQgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93IERhcnRUeXBlLCBEeW5hbWljVHlwZSwgRnVuY3Rpb25UeXBlLCBJbnRlcmZhY2VUeXBlLCBOYW1lZFR5cGU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NvcmVfdHlwZXMuZGFydCcgc2hvdyBDb3JlVHlwZXM7CgppbXBvcnQgJ3R5cGVfc2NoZW1hLmRhcnQnIHNob3cgVHlwZVNjaGVtYVZpc2l0b3IsIFVua25vd25UeXBlOwoKLy8vIFJldHVybnMgdGhlIGdyZWF0ZXN0IGNsb3N1cmUgb2YgdGhlIGdpdmVuIHR5cGUgW3NjaGVtYV0gd2l0aCByZXNwZWN0IHRvIGA/YC4KLy8vCi8vLyBUaGUgZ3JlYXRlc3QgY2xvc3VyZSBvZiBhIHR5cGUgc2NoZW1hIGBQYCB3aXRoIHJlc3BlY3QgdG8gYD9gIGlzIGRlZmluZWQgYXMKLy8vIGBQYCB3aXRoIGV2ZXJ5IGNvdmFyaWFudCBvY2N1cnJlbmNlIG9mIGA/YCByZXBsYWNlZCB3aXRoIGBOdWxsYCwgYW5kIGV2ZXJ5Ci8vLyBjb250cmF2YXJpYW50IG9jY3VycmVuY2Ugb2YgYD9gIHJlcGxhY2VkIHdpdGggYE9iamVjdGAuCi8vLwovLy8gSWYgdGhlIHNjaGVtYSBjb250YWlucyBubyBpbnN0YW5jZXMgb2YgYD9gLCB0aGUgb3JpZ2luYWwgc2NoZW1hIG9iamVjdCBpcwovLy8gcmV0dXJuZWQgdG8gYXZvaWQgdW5uZWNlc3NhcnkgYWxsb2NhdGlvbi4KLy8vCi8vLyBOb3RlIHRoYXQgdGhlIGNsb3N1cmUgb2YgYSB0eXBlIHNjaGVtYSBpcyBhIHByb3BlciB0eXBlLgovLy8KLy8vIE5vdGUgdGhhdCB0aGUgZ3JlYXRlc3QgY2xvc3VyZSBvZiBhIHR5cGUgc2NoZW1hIGlzIGFsd2F5cyBhIHN1cGVydHlwZSBvZiBhbnkKLy8vIHR5cGUgd2hpY2ggbWF0Y2hlcyB0aGUgc2NoZW1hLgpEYXJ0VHlwZSBncmVhdGVzdENsb3N1cmUoQ29yZVR5cGVzIGNvcmVUeXBlcywgRGFydFR5cGUgc2NoZW1hKSA9PgogICAgX1R5cGVTY2hlbWFFbGltaW5hdGlvblZpc2l0b3IucnVuKGNvcmVUeXBlcywgZmFsc2UsIHNjaGVtYSk7CgovLy8gUmV0dXJucyB0aGUgbGVhc3QgY2xvc3VyZSBvZiB0aGUgZ2l2ZW4gdHlwZSBbc2NoZW1hXSB3aXRoIHJlc3BlY3QgdG8gYD9gLgovLy8KLy8vIFRoZSBsZWFzdCBjbG9zdXJlIG9mIGEgdHlwZSBzY2hlbWEgYFBgIHdpdGggcmVzcGVjdCB0byBgP2AgaXMgZGVmaW5lZCBhcwovLy8gYFBgIHdpdGggZXZlcnkgY292YXJpYW50IG9jY3VycmVuY2Ugb2YgYD9gIHJlcGxhY2VkIHdpdGggYE9iamVjdGAsIGFuZCBldmVyeQovLy8gY29udHJhdmFyaWFudCBvY2N1cnJlbmNlIG9mIGA/YCByZXBsYWNlZCB3aXRoIGBOdWxsYC4KLy8vCi8vLyBJZiB0aGUgc2NoZW1hIGNvbnRhaW5zIG5vIGluc3RhbmNlcyBvZiBgP2AsIHRoZSBvcmlnaW5hbCBzY2hlbWEgb2JqZWN0IGlzCi8vLyByZXR1cm5lZCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9uLgovLy8KLy8vIE5vdGUgdGhhdCB0aGUgY2xvc3VyZSBvZiBhIHR5cGUgc2NoZW1hIGlzIGEgcHJvcGVyIHR5cGUuCi8vLwovLy8gTm90ZSB0aGF0IHRoZSBsZWFzdCBjbG9zdXJlIG9mIGEgdHlwZSBzY2hlbWEgaXMgYWx3YXlzIGEgc3VidHlwZSBvZiBhbnkgdHlwZQovLy8gd2hpY2ggbWF0Y2hlcyB0aGUgc2NoZW1hLgpEYXJ0VHlwZSBsZWFzdENsb3N1cmUoQ29yZVR5cGVzIGNvcmVUeXBlcywgRGFydFR5cGUgc2NoZW1hKSA9PgogICAgX1R5cGVTY2hlbWFFbGltaW5hdGlvblZpc2l0b3IucnVuKGNvcmVUeXBlcywgdHJ1ZSwgc2NoZW1hKTsKCi8vLyBWaXNpdG9yIHRoYXQgY29tcHV0ZXMgbGVhc3QgYW5kIGdyZWF0ZXN0IGNsb3N1cmVzIG9mIGEgdHlwZSBzY2hlbWEuCi8vLwovLy8gRWFjaCB2aXNpdG9yIG1ldGhvZCByZXR1cm5zIGBudWxsYCBpZiB0aGVyZSBhcmUgbm8gYD9gcyBjb250YWluZWQgaW4gdGhlCi8vLyB0eXBlLCBvdGhlcndpc2UgaXQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIHN1YnN0aXR1dGluZyBgP2Agd2l0aCBgTnVsbGAgb3IKLy8vIGBPYmplY3RgLCBhcyBhcHByb3ByaWF0ZS4KY2xhc3MgX1R5cGVTY2hlbWFFbGltaW5hdGlvblZpc2l0b3IgZXh0ZW5kcyBUeXBlU2NoZW1hVmlzaXRvcjxEYXJ0VHlwZT4gewogIGZpbmFsIERhcnRUeXBlIG51bGxUeXBlOwoKICBib29sIGlzTGVhc3RDbG9zdXJlOwoKICBfVHlwZVNjaGVtYUVsaW1pbmF0aW9uVmlzaXRvcihDb3JlVHlwZXMgY29yZVR5cGVzLCB0aGlzLmlzTGVhc3RDbG9zdXJlKQogICAgICA6IG51bGxUeXBlID0gY29yZVR5cGVzLm51bGxDbGFzcy5yYXdUeXBlOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdEZ1bmN0aW9uVHlwZShGdW5jdGlvblR5cGUgbm9kZSkgewogICAgRGFydFR5cGUgbmV3UmV0dXJuVHlwZSA9IG5vZGUucmV0dXJuVHlwZS5hY2NlcHQodGhpcyk7CiAgICBpc0xlYXN0Q2xvc3VyZSA9ICFpc0xlYXN0Q2xvc3VyZTsKICAgIExpc3Q8RGFydFR5cGU+IG5ld1Bvc2l0aW9uYWxQYXJhbWV0ZXJzID0gbnVsbDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICBEYXJ0VHlwZSBzdWJzdGl0dXRpb24gPSBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldLmFjY2VwdCh0aGlzKTsKICAgICAgaWYgKHN1YnN0aXR1dGlvbiAhPSBudWxsKSB7CiAgICAgICAgbmV3UG9zaXRpb25hbFBhcmFtZXRlcnMgPz89CiAgICAgICAgICAgIG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgICAgICAgbmV3UG9zaXRpb25hbFBhcmFtZXRlcnNbaV0gPSBzdWJzdGl0dXRpb247CiAgICAgIH0KICAgIH0KICAgIExpc3Q8TmFtZWRUeXBlPiBuZXdOYW1lZFBhcmFtZXRlcnMgPSBudWxsOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlLm5hbWVkUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICBEYXJ0VHlwZSBzdWJzdGl0dXRpb24gPSBub2RlLm5hbWVkUGFyYW1ldGVyc1tpXS50eXBlLmFjY2VwdCh0aGlzKTsKICAgICAgaWYgKHN1YnN0aXR1dGlvbiAhPSBudWxsKSB7CiAgICAgICAgbmV3TmFtZWRQYXJhbWV0ZXJzID8/PSBub2RlLm5hbWVkUGFyYW1ldGVycy50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKICAgICAgICBuZXdOYW1lZFBhcmFtZXRlcnNbaV0gPSBuZXcgTmFtZWRUeXBlKAogICAgICAgICAgICBub2RlLm5hbWVkUGFyYW1ldGVyc1tpXS5uYW1lLCBzdWJzdGl0dXRpb24sCiAgICAgICAgICAgIGlzUmVxdWlyZWQ6IG5vZGUubmFtZWRQYXJhbWV0ZXJzW2ldLmlzUmVxdWlyZWQpOwogICAgICB9CiAgICB9CiAgICBpc0xlYXN0Q2xvc3VyZSA9ICFpc0xlYXN0Q2xvc3VyZTsKICAgIERhcnRUeXBlIHR5cGVkZWZUeXBlID0gbm9kZS50eXBlZGVmVHlwZT8uYWNjZXB0KHRoaXMpOwogICAgaWYgKG5ld1JldHVyblR5cGUgPT0gbnVsbCAmJgogICAgICAgIG5ld1Bvc2l0aW9uYWxQYXJhbWV0ZXJzID09IG51bGwgJiYKICAgICAgICBuZXdOYW1lZFBhcmFtZXRlcnMgPT0gbnVsbCAmJgogICAgICAgIHR5cGVkZWZUeXBlID09IG51bGwpIHsKICAgICAgLy8gTm8gdHlwZXMgaGFkIHRvIGJlIHN1YnN0aXR1dGVkLgogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgRnVuY3Rpb25UeXBlKAogICAgICAgICAgbmV3UG9zaXRpb25hbFBhcmFtZXRlcnMgPz8gbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycywKICAgICAgICAgIG5ld1JldHVyblR5cGUgPz8gbm9kZS5yZXR1cm5UeXBlLAogICAgICAgICAgbmFtZWRQYXJhbWV0ZXJzOiBuZXdOYW1lZFBhcmFtZXRlcnMgPz8gbm9kZS5uYW1lZFBhcmFtZXRlcnMsCiAgICAgICAgICB0eXBlUGFyYW1ldGVyczogbm9kZS50eXBlUGFyYW1ldGVycywKICAgICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ6IG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICAgIHR5cGVkZWZUeXBlOiB0eXBlZGVmVHlwZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdEludGVyZmFjZVR5cGUoSW50ZXJmYWNlVHlwZSBub2RlKSB7CiAgICBMaXN0PERhcnRUeXBlPiBuZXdUeXBlQXJndW1lbnRzID0gbnVsbDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZS50eXBlQXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIERhcnRUeXBlIHN1YnN0aXR1dGlvbiA9IG5vZGUudHlwZUFyZ3VtZW50c1tpXS5hY2NlcHQodGhpcyk7CiAgICAgIGlmIChzdWJzdGl0dXRpb24gIT0gbnVsbCkgewogICAgICAgIG5ld1R5cGVBcmd1bWVudHMgPz89IG5vZGUudHlwZUFyZ3VtZW50cy50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKICAgICAgICBuZXdUeXBlQXJndW1lbnRzW2ldID0gc3Vic3RpdHV0aW9uOwogICAgICB9CiAgICB9CiAgICBpZiAobmV3VHlwZUFyZ3VtZW50cyA9PSBudWxsKSB7CiAgICAgIC8vIE5vIHR5cGUgYXJndW1lbnRzIG5lZWRlZCB0byBiZSBzdWJzdGl0dXRlZC4KICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUobm9kZS5jbGFzc05vZGUsIG5ld1R5cGVBcmd1bWVudHMpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRVbmtub3duVHlwZShVbmtub3duVHlwZSBub2RlKSA9PgogICAgICBpc0xlYXN0Q2xvc3VyZSA/IG51bGxUeXBlIDogY29uc3QgRHluYW1pY1R5cGUoKTsKCiAgLy8vIFJ1bnMgYW4gaW5zdGFuY2Ugb2YgdGhlIHZpc2l0b3Igb24gdGhlIGdpdmVuIFtzY2hlbWFdIGFuZCByZXR1cm5zIHRoZQogIC8vLyByZXN1bHRpbmcgdHlwZS4gIElmIHRoZSBzY2hlbWEgY29udGFpbnMgbm8gaW5zdGFuY2VzIG9mIGA/YCwgdGhlIG9yaWdpbmFsCiAgLy8vIHNjaGVtYSBvYmplY3QgaXMgcmV0dXJuZWQgdG8gYXZvaWQgdW5uZWNlc3NhcnkgYWxsb2NhdGlvbi4KICBzdGF0aWMgRGFydFR5cGUgcnVuKAogICAgICBDb3JlVHlwZXMgY29yZVR5cGVzLCBib29sIGlzTGVhc3RDbG9zdXJlLCBEYXJ0VHlwZSBzY2hlbWEpIHsKICAgIF9UeXBlU2NoZW1hRWxpbWluYXRpb25WaXNpdG9yIHZpc2l0b3IgPQogICAgICAgIG5ldyBfVHlwZVNjaGVtYUVsaW1pbmF0aW9uVmlzaXRvcihjb3JlVHlwZXMsIGlzTGVhc3RDbG9zdXJlKTsKICAgIERhcnRUeXBlIHJlc3VsdCA9IHNjaGVtYS5hY2NlcHQodmlzaXRvcik7CiAgICBhc3NlcnQodmlzaXRvci5pc0xlYXN0Q2xvc3VyZSA9PSBpc0xlYXN0Q2xvc3VyZSk7CiAgICByZXR1cm4gcmVzdWx0ID8/IHNjaGVtYTsKICB9Cn0KgIYATU4/ASFIATgBPwFRBFBPPAROLgQ9BFEjQkEBTgRNUToETi4EPQRRHj9AAUgETU0eShsBFwFKMAEMMjsmM0FJIiQ/MwgGLzxJIk0vOD0IBiY7ISsmHykTDR9ALEcvPyUGBAEMNCw6QiJJLAgGJDUTDUIGBAEMMTcBTFBBF0MsRi42HQQCAUdwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdHlwZV9pbmZlcmVuY2UvdHlwZV9zY2hlbWFfZWxpbWluYXRpb24uZGFydFBzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvdHlwZV9pbmZlcmVuY2UvdHlwZV9zY2hlbWFfZW52aXJvbm1lbnQuZGFydL1yLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS5tZCBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBDbGFzcywKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBEeW5hbWljVHlwZSwKICAgICAgICBGdW5jdGlvblR5cGUsCiAgICAgICAgSW50ZXJmYWNlVHlwZSwKICAgICAgICBOYW1lZFR5cGUsCiAgICAgICAgUHJvY2VkdXJlLAogICAgICAgIFR5cGVQYXJhbWV0ZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBzaG93IENsYXNzSGllcmFyY2h5OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIHNob3cgQ29yZVR5cGVzOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2FsZ2VicmEuZGFydCcgc2hvdyBTdWJzdGl0dXRpb247CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3NyYy9oaWVyYXJjaHlfYmFzZWRfdHlwZV9lbnZpcm9ubWVudC5kYXJ0JwogICAgc2hvdyBIaWVyYXJjaHlCYXNlZFR5cGVFbnZpcm9ubWVudDsKCmltcG9ydCAnc3RhbmRhcmRfYm91bmRzLmRhcnQnIHNob3cgU3RhbmRhcmRCb3VuZHM7CgppbXBvcnQgJ3R5cGVfY29uc3RyYWludF9nYXRoZXJlci5kYXJ0JyBzaG93IFR5cGVDb25zdHJhaW50R2F0aGVyZXI7CgppbXBvcnQgJ3R5cGVfc2NoZW1hLmRhcnQnIHNob3cgVW5rbm93blR5cGUsIHR5cGVTY2hlbWFUb1N0cmluZywgaXNLbm93bjsKCmltcG9ydCAndHlwZV9zY2hlbWFfZWxpbWluYXRpb24uZGFydCcgc2hvdyBncmVhdGVzdENsb3N1cmUsIGxlYXN0Q2xvc3VyZTsKCi8vIFRPRE8ocGF1bGJlcnJ5KTogdHJ5IHRvIHB1c2ggdGhpcyBmdW5jdGlvbmFsaXR5IGludG8ga2VybmVsLgpGdW5jdGlvblR5cGUgc3Vic3RpdHV0ZVR5cGVQYXJhbXMoCiAgICBGdW5jdGlvblR5cGUgdHlwZSwKICAgIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gc3Vic3RpdHV0aW9uTWFwLAogICAgTGlzdDxUeXBlUGFyYW1ldGVyPiBuZXdUeXBlUGFyYW1ldGVycykgewogIFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZnJvbU1hcChzdWJzdGl0dXRpb25NYXApOwogIHJldHVybiBuZXcgRnVuY3Rpb25UeXBlKAogICAgICB0eXBlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLm1hcChzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUpLnRvTGlzdCgpLAogICAgICBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUodHlwZS5yZXR1cm5UeXBlKSwKICAgICAgbmFtZWRQYXJhbWV0ZXJzOiB0eXBlLm5hbWVkUGFyYW1ldGVycwogICAgICAgICAgLm1hcCgobmFtZWQpID0+IG5ldyBOYW1lZFR5cGUoCiAgICAgICAgICAgICAgbmFtZWQubmFtZSwgc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKG5hbWVkLnR5cGUpLAogICAgICAgICAgICAgIGlzUmVxdWlyZWQ6IG5hbWVkLmlzUmVxdWlyZWQpKQogICAgICAgICAgLnRvTGlzdCgpLAogICAgICB0eXBlUGFyYW1ldGVyczogbmV3VHlwZVBhcmFtZXRlcnMsCiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ6IHR5cGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgdHlwZWRlZlR5cGU6IHR5cGUudHlwZWRlZlR5cGUgPT0gbnVsbAogICAgICAgICAgPyBudWxsCiAgICAgICAgICA6IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZSh0eXBlLnR5cGVkZWZUeXBlKSk7Cn0KCi8vLyBHaXZlbiBhIFtGdW5jdGlvblR5cGVdLCBnZXRzIHRoZSB0eXBlIG9mIHRoZSBuYW1lZCBwYXJhbWV0ZXIgd2l0aCB0aGUgZ2l2ZW4KLy8vIFtuYW1lXSwgb3IgYGR5bmFtaWNgIGlmIHRoZXJlIGlzIG5vIHBhcmFtZXRlciB3aXRoIHRoZSBnaXZlbiBuYW1lLgpEYXJ0VHlwZSBnZXROYW1lZFBhcmFtZXRlclR5cGUoRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSwgU3RyaW5nIG5hbWUpIHsKICByZXR1cm4gZnVuY3Rpb25UeXBlLmdldE5hbWVkUGFyYW1ldGVyKG5hbWUpID8/IGNvbnN0IER5bmFtaWNUeXBlKCk7Cn0KCi8vLyBHaXZlbiBhIFtGdW5jdGlvblR5cGVdLCBnZXRzIHRoZSB0eXBlIG9mIHRoZSBbaV10aCBwb3NpdGlvbmFsIHBhcmFtZXRlciwgb3IKLy8vIGBkeW5hbWljYCBpZiB0aGVyZSBpcyBubyBwYXJhbWV0ZXIgd2l0aCB0aGF0IGluZGV4LgpEYXJ0VHlwZSBnZXRQb3NpdGlvbmFsUGFyYW1ldGVyVHlwZShGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlLCBpbnQgaSkgewogIGlmIChpIDwgZnVuY3Rpb25UeXBlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgcmV0dXJuIGZ1bmN0aW9uVHlwZS5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXTsKICB9IGVsc2UgewogICAgcmV0dXJuIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgfQp9CgovLy8gQSBjb25zdHJhaW50IG9uIGEgdHlwZSBwYXJhbWV0ZXIgdGhhdCB3ZSdyZSBpbmZlcnJpbmcuCmNsYXNzIFR5cGVDb25zdHJhaW50IHsKICAvLy8gVGhlIGxvd2VyIGJvdW5kIG9mIHRoZSB0eXBlIGJlaW5nIGNvbnN0cmFpbmVkLiAgVGhpcyBib3VuZCBtdXN0IGJlIGEKICAvLy8gc3VidHlwZSBvZiB0aGUgdHlwZSBiZWluZyBjb25zdHJhaW5lZC4KICBEYXJ0VHlwZSBsb3dlcjsKCiAgLy8vIFRoZSB1cHBlciBib3VuZCBvZiB0aGUgdHlwZSBiZWluZyBjb25zdHJhaW5lZC4gIFRoZSB0eXBlIGJlaW5nIGNvbnN0cmFpbmVkCiAgLy8vIG11c3QgYmUgYSBzdWJ0eXBlIG9mIHRoaXMgYm91bmQuCiAgRGFydFR5cGUgdXBwZXI7CgogIFR5cGVDb25zdHJhaW50KCkKICAgICAgOiBsb3dlciA9IGNvbnN0IFVua25vd25UeXBlKCksCiAgICAgICAgdXBwZXIgPSBjb25zdCBVbmtub3duVHlwZSgpOwoKICBUeXBlQ29uc3RyYWludC5fKHRoaXMubG93ZXIsIHRoaXMudXBwZXIpOwoKICBUeXBlQ29uc3RyYWludCBjbG9uZSgpID0+IG5ldyBUeXBlQ29uc3RyYWludC5fKGxvd2VyLCB1cHBlcik7CgogIFN0cmluZyB0b1N0cmluZygpID0+CiAgICAgICcke3R5cGVTY2hlbWFUb1N0cmluZyhsb3dlcil9IDw6IDx0eXBlPiA8OiAke3R5cGVTY2hlbWFUb1N0cmluZyh1cHBlcil9JzsKfQoKY2xhc3MgVHlwZVNjaGVtYUVudmlyb25tZW50IGV4dGVuZHMgSGllcmFyY2h5QmFzZWRUeXBlRW52aXJvbm1lbnQKICAgIHdpdGggU3RhbmRhcmRCb3VuZHMgewogIFR5cGVTY2hlbWFFbnZpcm9ubWVudChDb3JlVHlwZXMgY29yZVR5cGVzLCBDbGFzc0hpZXJhcmNoeSBoaWVyYXJjaHkpCiAgICAgIDogc3VwZXIoY29yZVR5cGVzLCBoaWVyYXJjaHkpOwoKICBDbGFzcyBnZXQgZnVuY3Rpb25DbGFzcyA9PiBjb3JlVHlwZXMuZnVuY3Rpb25DbGFzczsKCiAgQ2xhc3MgZ2V0IGZ1dHVyZUNsYXNzID0+IGNvcmVUeXBlcy5mdXR1cmVDbGFzczsKCiAgQ2xhc3MgZ2V0IGZ1dHVyZU9yQ2xhc3MgPT4gY29yZVR5cGVzLmZ1dHVyZU9yQ2xhc3M7CgogIEludGVyZmFjZVR5cGUgZ2V0TGVnYWN5TGVhc3RVcHBlckJvdW5kKAogICAgICBJbnRlcmZhY2VUeXBlIHR5cGUxLCBJbnRlcmZhY2VUeXBlIHR5cGUyKSB7CiAgICByZXR1cm4gaGllcmFyY2h5LmdldExlZ2FjeUxlYXN0VXBwZXJCb3VuZCh0eXBlMSwgdHlwZTIpOwogIH0KCiAgLy8vIE1vZGlmeSB0aGUgZ2l2ZW4gW2NvbnN0cmFpbnRdJ3MgbG93ZXIgYm91bmQgdG8gaW5jbHVkZSBbbG93ZXJdLgogIHZvaWQgYWRkTG93ZXJCb3VuZChUeXBlQ29uc3RyYWludCBjb25zdHJhaW50LCBEYXJ0VHlwZSBsb3dlcikgewogICAgY29uc3RyYWludC5sb3dlciA9IGdldFN0YW5kYXJkVXBwZXJCb3VuZChjb25zdHJhaW50Lmxvd2VyLCBsb3dlcik7CiAgfQoKICAvLy8gTW9kaWZ5IHRoZSBnaXZlbiBbY29uc3RyYWludF0ncyB1cHBlciBib3VuZCB0byBpbmNsdWRlIFt1cHBlcl0uCiAgdm9pZCBhZGRVcHBlckJvdW5kKFR5cGVDb25zdHJhaW50IGNvbnN0cmFpbnQsIERhcnRUeXBlIHVwcGVyKSB7CiAgICBjb25zdHJhaW50LnVwcGVyID0gZ2V0U3RhbmRhcmRMb3dlckJvdW5kKGNvbnN0cmFpbnQudXBwZXIsIHVwcGVyKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldFR5cGVPZk92ZXJsb2FkZWRBcml0aG1ldGljKERhcnRUeXBlIHR5cGUxLCBEYXJ0VHlwZSB0eXBlMikgewogICAgLy8gVE9ETyhwYXVsYmVycnkpOiB0aGlzIG1hdGNoZXMgd2hhdCBpcyBkZWZpbmVkIGluIHRoZSBzcGVjLiAgSXQgd291bGQgYmUKICAgIC8vIG5pY2UgaWYgd2UgY291bGQgY2hhbmdlIGtlcm5lbCB0byBtYXRjaCB0aGUgc3BlYyBhbmQgbm90IGhhdmUgdG8KICAgIC8vIG92ZXJyaWRlLgogICAgaWYgKHR5cGUxID09IGludFR5cGUpIHsKICAgICAgaWYgKHR5cGUyID09IGludFR5cGUpIHJldHVybiB0eXBlMjsKICAgICAgaWYgKHR5cGUyID09IGRvdWJsZVR5cGUpIHJldHVybiB0eXBlMjsKICAgIH0KICAgIHJldHVybiBudW1UeXBlOwogIH0KCiAgLy8vIEluZmVycyBhIGdlbmVyaWMgdHlwZSwgZnVuY3Rpb24sIG1ldGhvZCwgb3IgbGlzdC9tYXAgbGl0ZXJhbAogIC8vLyBpbnN0YW50aWF0aW9uLCB1c2luZyB0aGUgZG93bndhcmQgY29udGV4dCB0eXBlIGFzIHdlbGwgYXMgdGhlIGFyZ3VtZW50CiAgLy8vIHR5cGVzIGlmIGF2YWlsYWJsZS4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGUsIGdpdmVuIGEgZnVuY3Rpb24gdHlwZSB3aXRoIGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXJzLCB0aGlzCiAgLy8vIGluZmVycyB0aGUgdHlwZSBwYXJhbWV0ZXJzIGZyb20gdGhlIGFjdHVhbCBhcmd1bWVudCB0eXBlcy4KICAvLy8KICAvLy8gQ29uY3JldGVseSwgZ2l2ZW4gYSBmdW5jdGlvbiB0eXBlIHdpdGggcGFyYW1ldGVyIHR5cGVzIFAwLCBQMSwgLi4uIFBuLAogIC8vLyByZXN1bHQgdHlwZSBSLCBhbmQgZ2VuZXJpYyB0eXBlIHBhcmFtZXRlcnMgVDAsIFQxLCAuLi4gVG0sIHVzZSB0aGUKICAvLy8gYXJndW1lbnQgdHlwZXMgQTAsIEExLCAuLi4gQW4gdG8gc29sdmUgZm9yIHRoZSB0eXBlIHBhcmFtZXRlcnMuCiAgLy8vCiAgLy8vIEZvciBlYWNoIHBhcmFtZXRlciBQaSwgd2Ugd2FudCB0byBlbnN1cmUgdGhhdCBBaSA8OiBQaS4gV2UgY2FuIGRvIHRoaXMgYnkKICAvLy8gcnVubmluZyB0aGUgc3VidHlwZSBhbGdvcml0aG0sIGFuZCB3aGVuIHdlIHJlYWNoIGEgdHlwZSBwYXJhbWV0ZXIgVGosCiAgLy8vIHJlY29yZGluZyB0aGUgbG93ZXIgb3IgdXBwZXIgYm91bmQgaXQgbXVzdCBzYXRpc2Z5LiBBdCB0aGUgZW5kLCBhbGwKICAvLy8gY29uc3RyYWludHMgY2FuIGJlIGNvbWJpbmVkIHRvIGRldGVybWluZSB0aGUgdHlwZS4KICAvLy8KICAvLy8gQWxsIGNvbnN0cmFpbnRzIG9uIGVhY2ggdHlwZSBwYXJhbWV0ZXIgVGogYXJlIHRyYWNrZWQsIGFzIHdlbGwgYXMgd2hlcmUKICAvLy8gdGhleSBvcmlnaW5hdGVkLCBzbyB3ZSBjYW4gaXNzdWUgYW4gZXJyb3IgbWVzc2FnZSB0cmFjaW5nIGJhY2sgdG8gdGhlCiAgLy8vIGFyZ3VtZW50IHZhbHVlcywgdHlwZSBwYXJhbWV0ZXIgImV4dGVuZHMiIGNsYXVzZSwgb3IgdGhlIHJldHVybiB0eXBlCiAgLy8vIGNvbnRleHQuCiAgLy8vCiAgLy8vIElmIG5vbi1udWxsIHZhbHVlcyBmb3IgW2Zvcm1hbFR5cGVzXSBhbmQgW2FjdHVhbFR5cGVzXSBhcmUgcHJvdmlkZWQsIHRoaXMKICAvLy8gaXMgdXB3YXJkcyBpbmZlcmVuY2UuICBPdGhlcndpc2UgaXQgaXMgZG93bndhcmQgaW5mZXJlbmNlLgogIHZvaWQgaW5mZXJHZW5lcmljRnVuY3Rpb25PclR5cGUoCiAgICAgIERhcnRUeXBlIGRlY2xhcmVkUmV0dXJuVHlwZSwKICAgICAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVyc1RvSW5mZXIsCiAgICAgIExpc3Q8RGFydFR5cGU+IGZvcm1hbFR5cGVzLAogICAgICBMaXN0PERhcnRUeXBlPiBhY3R1YWxUeXBlcywKICAgICAgRGFydFR5cGUgcmV0dXJuQ29udGV4dFR5cGUsCiAgICAgIExpc3Q8RGFydFR5cGU+IGluZmVycmVkVHlwZXMsCiAgICAgIHtib29sIGlzQ29uc3Q6IGZhbHNlfSkgewogICAgaWYgKHR5cGVQYXJhbWV0ZXJzVG9JbmZlci5pc0VtcHR5KSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyBDcmVhdGUgYSBUeXBlQ29uc3RyYWludEdhdGhlcmVyIHRoYXQgd2lsbCBhbGxvdyBjZXJ0YWluIHR5cGUgcGFyYW1ldGVycwogICAgLy8gdG8gYmUgaW5mZXJyZWQuIEl0IHdpbGwgb3B0aW1pc3RpY2FsbHkgYXNzdW1lIHRoZXNlIHR5cGUgcGFyYW1ldGVycyBjYW4KICAgIC8vIGJlIHN1YnR5cGVzIChvciBzdXBlcnR5cGVzKSBhcyBuZWNlc3NhcnksIGFuZCB0cmFjayB0aGUgY29uc3RyYWludHMgdGhhdAogICAgLy8gYXJlIGltcGxpZWQgYnkgdGhpcy4KICAgIFR5cGVDb25zdHJhaW50R2F0aGVyZXIgZ2F0aGVyZXIgPQogICAgICAgIG5ldyBUeXBlQ29uc3RyYWludEdhdGhlcmVyKHRoaXMsIHR5cGVQYXJhbWV0ZXJzVG9JbmZlcik7CgogICAgaWYgKCFpc0VtcHR5Q29udGV4dChyZXR1cm5Db250ZXh0VHlwZSkpIHsKICAgICAgaWYgKGlzQ29uc3QpIHsKICAgICAgICByZXR1cm5Db250ZXh0VHlwZSA9IG5ldyBUeXBlVmFyaWFibGVFbGltaW5hdG9yKGNvcmVUeXBlcykKICAgICAgICAgICAgLnN1YnN0aXR1dGVUeXBlKHJldHVybkNvbnRleHRUeXBlKTsKICAgICAgfQogICAgICBnYXRoZXJlci50cnlTdWJ0eXBlTWF0Y2goZGVjbGFyZWRSZXR1cm5UeXBlLCByZXR1cm5Db250ZXh0VHlwZSk7CiAgICB9CgogICAgaWYgKGZvcm1hbFR5cGVzICE9IG51bGwpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmb3JtYWxUeXBlcy5sZW5ndGg7IGkrKykgewogICAgICAgIC8vIFRyeSB0byBwYXNzIGVhY2ggYXJndW1lbnQgdG8gZWFjaCBwYXJhbWV0ZXIsIHJlY29yZGluZyBhbnkgdHlwZQogICAgICAgIC8vIHBhcmFtZXRlciBib3VuZHMgdGhhdCB3ZXJlIGltcGxpZWQgYnkgdGhpcyBhc3NpZ25tZW50LgogICAgICAgIGdhdGhlcmVyLnRyeVN1YnR5cGVNYXRjaChhY3R1YWxUeXBlc1tpXSwgZm9ybWFsVHlwZXNbaV0pOwogICAgICB9CiAgICB9CgogICAgaW5mZXJUeXBlRnJvbUNvbnN0cmFpbnRzKAogICAgICAgIGdhdGhlcmVyLmNvbXB1dGVDb25zdHJhaW50cygpLCB0eXBlUGFyYW1ldGVyc1RvSW5mZXIsIGluZmVycmVkVHlwZXMsCiAgICAgICAgZG93bndhcmRzSW5mZXJQaGFzZTogZm9ybWFsVHlwZXMgPT0gbnVsbCk7CiAgfQoKICBib29sIGhhc09taXR0ZWRCb3VuZChUeXBlUGFyYW1ldGVyIHBhcmFtZXRlcikgewogICAgLy8gSWYgdGhlIGJvdW5kIHdhcyBvbWl0dGVkIGJ5IHRoZSBwcm9ncmFtbWVyLCB0aGUgS2VybmVsIHJlcHJlc2VudGF0aW9uIGZvcgogICAgLy8gdGhlIHBhcmFtZXRlciB3aWxsIGxvb2sgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nOgogICAgLy8KICAgIC8vICAgICBUIGV4dGVuZHMgT2JqZWN0ID0gZHluYW1pYwogICAgLy8KICAgIC8vIE5vdGUgdGhhdCBpdCdzIG5vdCBwb3NzaWJsZSB0byByZWNlaXZlIFtPYmplY3RdIGFzIFtUeXBlUGFyYW1ldGVyLmJvdW5kXQogICAgLy8gYW5kIGBkeW5hbWljYCBhcyBbVHlwZVBhcmFtZXRlci5kZWZhdWx0VHlwZV0gZnJvbSB0aGUgZnJvbnQgZW5kIGluIGFueQogICAgLy8gb3RoZXIgd2F5LgogICAgRGFydFR5cGUgYm91bmQgPSBwYXJhbWV0ZXIuYm91bmQ7CiAgICByZXR1cm4gYm91bmQgaXMgSW50ZXJmYWNlVHlwZSAmJgogICAgICAgIGlkZW50aWNhbChib3VuZC5jbGFzc05vZGUsIGNvcmVUeXBlcy5vYmplY3RDbGFzcykgJiYKICAgICAgICBwYXJhbWV0ZXIuZGVmYXVsdFR5cGUgaXMgRHluYW1pY1R5cGU7CiAgfQoKICAvLy8gVXNlIHRoZSBnaXZlbiBbY29uc3RyYWludHNdIHRvIHN1YnN0aXR1dGUgZm9yIHR5cGUgdmFyaWFibGVzLgogIC8vLwogIC8vLyBbdHlwZVBhcmFtZXRlcnNUb0luZmVyXSBpcyB0aGUgc2V0IG9mIHR5cGUgcGFyYW1ldGVycyB0aGF0IHNob3VsZCBiZQogIC8vLyBzdWJzdGl0dXRlZCBmb3IuICBbaW5mZXJyZWRUeXBlc10gc2hvdWxkIGJlIGEgbGlzdCBvZiB0aGUgc2FtZSBsZW5ndGguCiAgLy8vCiAgLy8vIElmIFtkb3dud2FyZHNJbmZlclBoYXNlXSBpcyBgdHJ1ZWAsIHRoZW4gd2UgYXJlIGluIHRoZSBmaXJzdCBwYXNzIG9mCiAgLy8vIGluZmVyZW5jZSwgcHVzaGluZyBjb250ZXh0IHR5cGVzIGRvd24uICBUaGlzIG1lYW5zIHdlIGFyZSBhbGxvd2VkIHRvIHB1c2gKICAvLy8gZG93biBgP2AgdG8gcHJlY2lzZWx5IHJlcHJlc2VudCBhbiB1bmtub3duIHR5cGUuICBbaW5mZXJyZWRUeXBlc10gc2hvdWxkCiAgLy8vIGJlIGluaXRpYWxseSBwb3B1bGF0ZWQgd2l0aCBgP2AuICBUaGVzZSBgP2BzIHdpbGwgYmUgcmVwbGFjZWQsIGlmCiAgLy8vIGFwcHJvcHJpYXRlLCB3aXRoIHRoZSB0eXBlcyB0aGF0IHdlcmUgaW5mZXJyZWQgYnkgZG93bndhcmRzIGluZmVyZW5jZS4KICAvLy8KICAvLy8gSWYgW2Rvd253YXJkc0luZmVyUGhhc2VdIGlzIGBmYWxzZWAsIHRoZW4gd2UgYXJlIGluIHRoZSBzZWNvbmQgcGFzcyBvZgogIC8vLyBpbmZlcmVuY2UsIGFuZCBtdXN0IG5vdCBjb25jbHVkZSBgP2AgZm9yIGFueSB0eXBlIGZvcm1hbC4gIEluIHRoaXMgcGFzcywKICAvLy8gW2luZmVycmVkVHlwZXNdIHNob3VsZCBjb250YWluIHRoZSB2YWx1ZXMgZnJvbSB0aGUgZmlyc3QgcGFzcy4gIFRoZXkgd2lsbAogIC8vLyBiZSByZXBsYWNlZCB3aXRoIHRoZSBmaW5hbCBpbmZlcnJlZCB0eXBlcy4KICB2b2lkIGluZmVyVHlwZUZyb21Db25zdHJhaW50cyhNYXA8VHlwZVBhcmFtZXRlciwgVHlwZUNvbnN0cmFpbnQ+IGNvbnN0cmFpbnRzLAogICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzVG9JbmZlciwgTGlzdDxEYXJ0VHlwZT4gaW5mZXJyZWRUeXBlcywKICAgICAge2Jvb2wgZG93bndhcmRzSW5mZXJQaGFzZTogZmFsc2V9KSB7CiAgICBMaXN0PERhcnRUeXBlPiB0eXBlc0Zyb21Eb3dud2FyZHNJbmZlcmVuY2UgPQogICAgICAgIGRvd253YXJkc0luZmVyUGhhc2UgPyBudWxsIDogaW5mZXJyZWRUeXBlcy50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVQYXJhbWV0ZXJzVG9JbmZlci5sZW5ndGg7IGkrKykgewogICAgICBUeXBlUGFyYW1ldGVyIHR5cGVQYXJhbSA9IHR5cGVQYXJhbWV0ZXJzVG9JbmZlcltpXTsKCiAgICAgIERhcnRUeXBlIHR5cGVQYXJhbUJvdW5kID0gdHlwZVBhcmFtLmJvdW5kOwogICAgICBEYXJ0VHlwZSBleHRlbmRzQ29uc3RyYWludDsKICAgICAgaWYgKCFoYXNPbWl0dGVkQm91bmQodHlwZVBhcmFtKSkgewogICAgICAgIGV4dGVuZHNDb25zdHJhaW50ID0KICAgICAgICAgICAgU3Vic3RpdHV0aW9uLmZyb21QYWlycyh0eXBlUGFyYW1ldGVyc1RvSW5mZXIsIGluZmVycmVkVHlwZXMpCiAgICAgICAgICAgICAgICAuc3Vic3RpdHV0ZVR5cGUodHlwZVBhcmFtQm91bmQpOwogICAgICB9CgogICAgICBUeXBlQ29uc3RyYWludCBjb25zdHJhaW50ID0gY29uc3RyYWludHNbdHlwZVBhcmFtXTsKICAgICAgaWYgKGRvd253YXJkc0luZmVyUGhhc2UpIHsKICAgICAgICBpbmZlcnJlZFR5cGVzW2ldID0KICAgICAgICAgICAgX2luZmVyVHlwZVBhcmFtZXRlckZyb21Db250ZXh0KGNvbnN0cmFpbnQsIGV4dGVuZHNDb25zdHJhaW50KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbmZlcnJlZFR5cGVzW2ldID0gX2luZmVyVHlwZVBhcmFtZXRlckZyb21BbGwoCiAgICAgICAgICAgIHR5cGVzRnJvbURvd253YXJkc0luZmVyZW5jZVtpXSwgY29uc3RyYWludCwgZXh0ZW5kc0NvbnN0cmFpbnQpOwogICAgICB9CiAgICB9CgogICAgLy8gSWYgdGhlIGRvd253YXJkcyBpbmZlciBwaGFzZSBoYXMgZmFpbGVkLCB3ZSdsbCBjYXRjaCB0aGlzIGluIHRoZSB1cHdhcmRzCiAgICAvLyBwaGFzZSBsYXRlciBvbi4KICAgIGlmIChkb3dud2FyZHNJbmZlclBoYXNlKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyBDaGVjayB0aGUgaW5mZXJyZWQgdHlwZXMgYWdhaW5zdCBhbGwgb2YgdGhlIGNvbnN0cmFpbnRzLgogICAgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBrbm93blR5cGVzID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlUGFyYW1ldGVyc1RvSW5mZXIubGVuZ3RoOyBpKyspIHsKICAgICAgVHlwZVBhcmFtZXRlciB0eXBlUGFyYW0gPSB0eXBlUGFyYW1ldGVyc1RvSW5mZXJbaV07CiAgICAgIFR5cGVDb25zdHJhaW50IGNvbnN0cmFpbnQgPSBjb25zdHJhaW50c1t0eXBlUGFyYW1dOwogICAgICBEYXJ0VHlwZSB0eXBlUGFyYW1Cb3VuZCA9CiAgICAgICAgICBTdWJzdGl0dXRpb24uZnJvbVBhaXJzKHR5cGVQYXJhbWV0ZXJzVG9JbmZlciwgaW5mZXJyZWRUeXBlcykKICAgICAgICAgICAgICAuc3Vic3RpdHV0ZVR5cGUodHlwZVBhcmFtLmJvdW5kKTsKCiAgICAgIERhcnRUeXBlIGluZmVycmVkID0gaW5mZXJyZWRUeXBlc1tpXTsKICAgICAgYm9vbCBzdWNjZXNzID0gdHlwZVNhdGlzZmllc0NvbnN0cmFpbnQoaW5mZXJyZWQsIGNvbnN0cmFpbnQpOwogICAgICBpZiAoc3VjY2VzcyAmJiAhaGFzT21pdHRlZEJvdW5kKHR5cGVQYXJhbSkpIHsKICAgICAgICAvLyBJZiBldmVyeXRoaW5nIGVsc2Ugc3VjY2VlZGVkLCBjaGVjayB0aGUgYGV4dGVuZHNgIGNvbnN0cmFpbnQuCiAgICAgICAgRGFydFR5cGUgZXh0ZW5kc0NvbnN0cmFpbnQgPSB0eXBlUGFyYW1Cb3VuZDsKICAgICAgICBzdWNjZXNzID0gaXNTdWJ0eXBlT2YoaW5mZXJyZWQsIGV4dGVuZHNDb25zdHJhaW50KTsKICAgICAgfQoKICAgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgICAgLy8gVE9ETyhwYXVsYmVycnkpOiByZXBvcnQgZXJyb3IuCgogICAgICAgIC8vIEhldXJpc3RpYzogZXZlbiBpZiB3ZSBmYWlsZWQsIGtlZXAgdGhlIGVycm9uZW91cyB0eXBlLgogICAgICAgIC8vIEl0IHNob3VsZCBzYXRpc2Z5IGF0IGxlYXN0IHNvbWUgb2YgdGhlIGNvbnN0cmFpbnRzIChlLmcuIHRoZSByZXR1cm4KICAgICAgICAvLyBjb250ZXh0KS4gSWYgd2UgZmFsbCBiYWNrIHRvIGluc3RhbnRpYXRlVG9Cb3VuZHMsIHdlJ2xsIHR5cGljYWxseSBnZXQKICAgICAgICAvLyBtb3JlIGVycm9ycyAoZS5nLiBiZWNhdXNlIGBkeW5hbWljYCBpcyB0aGUgbW9zdCBjb21tb24gYm91bmQpLgogICAgICB9CgogICAgICBpZiAoaXNLbm93bihpbmZlcnJlZCkpIHsKICAgICAgICBrbm93blR5cGVzW3R5cGVQYXJhbV0gPSBpbmZlcnJlZDsKICAgICAgfQogICAgfQoKICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogcmVwb3J0IGFueSBlcnJvcnMgZnJvbSBpbnN0YW50aWF0ZVRvQm91bmRzLgogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1N1YnR5cGVPZihEYXJ0VHlwZSBzdWJ0eXBlLCBEYXJ0VHlwZSBzdXBlcnR5cGUpIHsKICAgIGlmIChzdWJ0eXBlIGlzIFVua25vd25UeXBlKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChzdWJ0eXBlID09IE51bGwgJiYgc3VwZXJ0eXBlIGlzIFVua25vd25UeXBlKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBzdXBlci5pc1N1YnR5cGVPZihzdWJ0eXBlLCBzdXBlcnR5cGUpOwogIH0KCiAgYm9vbCBpc0VtcHR5Q29udGV4dChEYXJ0VHlwZSBjb250ZXh0KSB7CiAgICBpZiAoY29udGV4dCBpcyBEeW5hbWljVHlwZSkgewogICAgICAvLyBBbmFseXplciB0cmVhdHMgYSB0eXBlIGNvbnRleHQgb2YgYGR5bmFtaWNgIGFzIGVxdWl2YWxlbnQgdG8gYW4gZW1wdHkKICAgICAgLy8gY29udGV4dC4gIFRPRE8ocGF1bGJlcnJ5KTogdGhpcyBpcyBub3Qgc3BlYydlZCBhbnl3aGVyZTsgZG8gd2Ugc3RpbGwKICAgICAgLy8gd2FudCB0byBkbyB0aGlzPwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBjb250ZXh0ID09IG51bGw7CiAgfQoKICAvLy8gVHJ1ZSBpZiBbbWVtYmVyXSBpcyBhIGJpbmFyeSBvcGVyYXRvciB0aGF0IHJldHVybnMgYW4gYGludGAgaWYgYm90aAogIC8vLyBvcGVyYW5kcyBhcmUgYGludGAsIGFuZCBvdGhlcndpc2UgcmV0dXJucyBgZG91YmxlYC4KICAvLy8KICAvLy8gTm90ZSB0aGF0IHRoaXMgYmVoYXZpb3IgZGVwZW5kcyBvbiB0aGUgcmVjZWl2ZXIgdHlwZSwgc28gd2UgY2FuIG9ubHkgbWFrZQogIC8vLyB0aGlzIGRldGVybWluYXRpb24gaWYgd2Uga25vdyB0aGUgdHlwZSBvZiB0aGUgcmVjZWl2ZXIuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjYXNlIG9mIHR5cGUtYmFzZWQgb3ZlcmxvYWRpbmcsIHdoaWNoIGluIERhcnQgaXMgb25seSBzdXBwb3J0ZWQKICAvLy8gYnkgZ2l2aW5nIHNwZWNpYWwgdHJlYXRtZW50IHRvIGNlcnRhaW4gYXJpdGhtZXRpYyBvcGVyYXRvcnMuCiAgYm9vbCBpc092ZXJsb2FkZWRBcml0aG1ldGljT3BlcmF0b3JBbmRUeXBlKAogICAgICBQcm9jZWR1cmUgbWVtYmVyLCBEYXJ0VHlwZSByZWNlaXZlclR5cGUpIHsKICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogdGhpcyBtYXRjaGVzIHdoYXQgaXMgZGVmaW5lZCBpbiB0aGUgc3BlYy4gIEl0IHdvdWxkIGJlCiAgICAvLyBuaWNlIGlmIHdlIGNvdWxkIGNoYW5nZSBrZXJuZWwgdG8gbWF0Y2ggdGhlIHNwZWMgYW5kIG5vdCBoYXZlIHRvCiAgICAvLyBvdmVycmlkZS4KICAgIGlmIChtZW1iZXIubmFtZS5uYW1lID09ICdyZW1haW5kZXInKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoIShyZWNlaXZlclR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJgogICAgICAgIGlkZW50aWNhbChyZWNlaXZlclR5cGUuY2xhc3NOb2RlLCBjb3JlVHlwZXMuaW50Q2xhc3MpKSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gaXNPdmVybG9hZGVkQXJpdGhtZXRpY09wZXJhdG9yKG1lbWJlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzVG9wKERhcnRUeXBlIHQpIHsKICAgIGlmICh0IGlzIFVua25vd25UeXBlKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHN1cGVyLmlzVG9wKHQpOwogICAgfQogIH0KCiAgLy8vIENvbXB1dGVzIHRoZSBjb25zdHJhaW50IHNvbHV0aW9uIGZvciBhIHR5cGUgdmFyaWFibGUgYmFzZWQgb24gYSBnaXZlbiBzZXQKICAvLy8gb2YgY29uc3RyYWludHMuCiAgLy8vCiAgLy8vIElmIFtncm91bmRlZF0gaXMgYHRydWVgLCB0aGVuIHRoZSByZXR1cm5lZCB0eXBlIGlzIGd1YXJhbnRlZWQgdG8gYmUgYQogIC8vLyBrbm93biB0eXBlIChpLmUuIGl0IHdpbGwgbm90IGNvbnRhaW4gYW55IGluc3RhbmNlcyBvZiBgP2ApLgogIERhcnRUeXBlIHNvbHZlVHlwZUNvbnN0cmFpbnQoVHlwZUNvbnN0cmFpbnQgY29uc3RyYWludCwKICAgICAge2Jvb2wgZ3JvdW5kZWQ6IGZhbHNlfSkgewogICAgLy8gUHJlZmVyIHRoZSBrbm93biBib3VuZCwgaWYgYW55LgogICAgaWYgKGlzS25vd24oY29uc3RyYWludC5sb3dlcikpIHJldHVybiBjb25zdHJhaW50Lmxvd2VyOwogICAgaWYgKGlzS25vd24oY29uc3RyYWludC51cHBlcikpIHJldHVybiBjb25zdHJhaW50LnVwcGVyOwoKICAgIC8vIE90aGVyd2lzZSB0YWtlIHdoYXRldmVyIGJvdW5kIGhhcyBwYXJ0aWFsIGluZm9ybWF0aW9uLCBlLmcuIGBJdGVyYWJsZTw/PmAKICAgIGlmIChjb25zdHJhaW50Lmxvd2VyIGlzISBVbmtub3duVHlwZSkgewogICAgICByZXR1cm4gZ3JvdW5kZWQKICAgICAgICAgID8gbGVhc3RDbG9zdXJlKGNvcmVUeXBlcywgY29uc3RyYWludC5sb3dlcikKICAgICAgICAgIDogY29uc3RyYWludC5sb3dlcjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBncm91bmRlZAogICAgICAgICAgPyBncmVhdGVzdENsb3N1cmUoY29yZVR5cGVzLCBjb25zdHJhaW50LnVwcGVyKQogICAgICAgICAgOiBjb25zdHJhaW50LnVwcGVyOwogICAgfQogIH0KCiAgLy8vIERldGVybWluZSBpZiB0aGUgZ2l2ZW4gW3R5cGVdIHNhdGlzZmllcyB0aGUgZ2l2ZW4gdHlwZSBbY29uc3RyYWludF0uCiAgYm9vbCB0eXBlU2F0aXNmaWVzQ29uc3RyYWludChEYXJ0VHlwZSB0eXBlLCBUeXBlQ29uc3RyYWludCBjb25zdHJhaW50KSB7CiAgICByZXR1cm4gaXNTdWJ0eXBlT2YoY29uc3RyYWludC5sb3dlciwgdHlwZSkgJiYKICAgICAgICBpc1N1YnR5cGVPZih0eXBlLCBjb25zdHJhaW50LnVwcGVyKTsKICB9CgogIERhcnRUeXBlIF9pbmZlclR5cGVQYXJhbWV0ZXJGcm9tQWxsKERhcnRUeXBlIHR5cGVGcm9tQ29udGV4dEluZmVyZW5jZSwKICAgICAgVHlwZUNvbnN0cmFpbnQgY29uc3RyYWludCwgRGFydFR5cGUgZXh0ZW5kc0NvbnN0cmFpbnQpIHsKICAgIC8vIFNlZSBpZiB3ZSBhbHJlYWR5IGZpeGVkIHRoaXMgdHlwZSBmcm9tIGRvd253YXJkcyBpbmZlcmVuY2UuCiAgICAvLyBJZiBzbywgdGhlbiB3ZSBhcmVuJ3QgYWxsb3dlZCB0byBjaGFuZ2UgaXQgYmFzZWQgb24gYXJndW1lbnQgdHlwZXMuCiAgICBpZiAoaXNLbm93bih0eXBlRnJvbUNvbnRleHRJbmZlcmVuY2UpKSB7CiAgICAgIHJldHVybiB0eXBlRnJvbUNvbnRleHRJbmZlcmVuY2U7CiAgICB9CgogICAgaWYgKGV4dGVuZHNDb25zdHJhaW50ICE9IG51bGwpIHsKICAgICAgY29uc3RyYWludCA9IGNvbnN0cmFpbnQuY2xvbmUoKTsKICAgICAgYWRkVXBwZXJCb3VuZChjb25zdHJhaW50LCBleHRlbmRzQ29uc3RyYWludCk7CiAgICB9CgogICAgcmV0dXJuIHNvbHZlVHlwZUNvbnN0cmFpbnQoY29uc3RyYWludCwgZ3JvdW5kZWQ6IHRydWUpOwogIH0KCiAgRGFydFR5cGUgX2luZmVyVHlwZVBhcmFtZXRlckZyb21Db250ZXh0KAogICAgICBUeXBlQ29uc3RyYWludCBjb25zdHJhaW50LCBEYXJ0VHlwZSBleHRlbmRzQ29uc3RyYWludCkgewogICAgRGFydFR5cGUgdCA9IHNvbHZlVHlwZUNvbnN0cmFpbnQoY29uc3RyYWludCk7CiAgICBpZiAoIWlzS25vd24odCkpIHsKICAgICAgcmV0dXJuIHQ7CiAgICB9CgogICAgLy8gSWYgd2UncmUgYWJvdXQgdG8gbWFrZSBvdXIgZmluYWwgY2hvaWNlLCBhcHBseSB0aGUgZXh0ZW5kcyBjbGF1c2UuCiAgICAvLyBUaGlzIGdpdmVzIHVzIGEgY2hhbmNlIHRvIHJlZmluZSB0aGUgY2hvaWNlLCBpbiBjYXNlIGl0IHdvdWxkIHZpb2xhdGUKICAgIC8vIHRoZSBgZXh0ZW5kc2AgY2xhdXNlLiBGb3IgZXhhbXBsZToKICAgIC8vCiAgICAvLyAgICAgT2JqZWN0IG9iaiA9IG1hdGgubWluLyo8aW5mZXIgT2JqZWN0LCBlcnJvcj4qLygxLCAyKTsKICAgIC8vCiAgICAvLyBJZiB3ZSBjb25zaWRlciB0aGUgYFQgZXh0ZW5kcyBudW1gIHdlIGNvbmNsdWRlIGA8bnVtPmAsIHdoaWNoIHdvcmtzLgogICAgaWYgKGV4dGVuZHNDb25zdHJhaW50ICE9IG51bGwpIHsKICAgICAgY29uc3RyYWludCA9IGNvbnN0cmFpbnQuY2xvbmUoKTsKICAgICAgYWRkVXBwZXJCb3VuZChjb25zdHJhaW50LCBleHRlbmRzQ29uc3RyYWludCk7CiAgICAgIHJldHVybiBzb2x2ZVR5cGVDb25zdHJhaW50KGNvbnN0cmFpbnQpOwogICAgfQogICAgcmV0dXJuIHQ7CiAgfQp9CgpjbGFzcyBUeXBlVmFyaWFibGVFbGltaW5hdG9yIGV4dGVuZHMgU3Vic3RpdHV0aW9uIHsKICBmaW5hbCBDb3JlVHlwZXMgX2NvcmVUeXBlczsKCiAgVHlwZVZhcmlhYmxlRWxpbWluYXRvcih0aGlzLl9jb3JlVHlwZXMpOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRTdWJzdGl0dXRlKFR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyLCBib29sIHVwcGVyQm91bmQpIHsKICAgIHJldHVybiB1cHBlckJvdW5kCiAgICAgICAgPyBfY29yZVR5cGVzLm51bGxDbGFzcy5yYXdUeXBlCiAgICAgICAgOiBfY29yZVR5cGVzLm9iamVjdENsYXNzLnJhd1R5cGU7CiAgfQp9CoGiAE1OPwEhCQ8SFRYXExMXAUIBOAE9AUIoATMBRAFJAUoBQCMXMi1FG0s0LClDLRUpOywRPAIBUEdJRgIBUDhINjELIAQCATsXSy0SAVEnEgETJSUBLAFAARdQAgFCGkclATYBMgE2ASoyPQQBRkJHBAFGQkcEAQxLT0gRHCotBhQEAUNNGgZMQQZNSUYGUExKOQZOTEsPBlBBIyMxIiIiJB8pDgYBT09QHCZBAS4VQjAIRwYBHzVLQkIIBgEeTTMEATJROQcmB1BOEiYlPS4EAUQGS00GS1BPSE0GTU9QMVBPKzFMAT06ATEiKRxJMQgBOiEbSw83TAgGAVAXHw4GAUBLPTo6IEcwASxENEk1PAgBFioBQk9RSggBHyoIBgFEBAEMOy1CMgQBKiJPThoTBhwEAUo6BlA+BlBDLjFPSBE3K0IUBjMEAQwbHBMNHQYEAVAWBkxCOiAnPDwBUSwWNh4NFjkeBgQBS0syLQQBST9DSy0nBgElJzQGATwEASs/MhcQBgFKTSoHQQdMJSc0LgYOBAIBNB4BKwEMRRYnKgQCAUdwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdHlwZV9pbmZlcmVuY2UvdHlwZV9zY2hlbWFfZW52aXJvbm1lbnQuZGFydDVzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvaWRlbnRpZmllcnMuZGFydI9FLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEucXVhbGlmaWVkX25hbWU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IEV4cHJlc3Npb247CgppbXBvcnQgJ3Byb2JsZW1zLmRhcnQnIHNob3cgdW5oYW5kbGVkLCB1bnN1cHBvcnRlZDsKCmltcG9ydCAnc2Nhbm5lci5kYXJ0JyBzaG93IFRva2VuOwoKY2xhc3MgSWRlbnRpZmllciB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CgogIElkZW50aWZpZXIoVG9rZW4gdG9rZW4pCiAgICAgIDogbmFtZSA9IHRva2VuLmxleGVtZSwKICAgICAgICBjaGFyT2Zmc2V0ID0gdG9rZW4uY2hhck9mZnNldDsKCiAgSWRlbnRpZmllci5fKHRoaXMubmFtZSwgdGhpcy5jaGFyT2Zmc2V0KTsKCiAgZmFjdG9yeSBJZGVudGlmaWVyLnByZXNlcnZlVG9rZW4oVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBuZXcgX1Rva2VuSWRlbnRpZmllcih0b2tlbik7CiAgfQoKICBFeHByZXNzaW9uIGdldCBpbml0aWFsaXplciA9PiBudWxsOwoKICBpbnQgZ2V0IGVuZENoYXJPZmZzZXQgPT4gY2hhck9mZnNldCArIG5hbWUubGVuZ3RoOwoKICBRdWFsaWZpZWROYW1lIHdpdGhRdWFsaWZpZXIoT2JqZWN0IHF1YWxpZmllcikgewogICAgcmV0dXJuIG5ldyBRdWFsaWZpZWROYW1lLl8ocXVhbGlmaWVyLCBuYW1lLCBjaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICJpZGVudGlmaWVyKCRuYW1lKSI7Cn0KCmNsYXNzIF9Ub2tlbklkZW50aWZpZXIgaW1wbGVtZW50cyBJZGVudGlmaWVyIHsKICBmaW5hbCBUb2tlbiB0b2tlbjsKCiAgX1Rva2VuSWRlbnRpZmllcih0aGlzLnRva2VuKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBuYW1lID0+IHRva2VuLmxleGVtZTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBjaGFyT2Zmc2V0ID0+IHRva2VuLmNoYXJPZmZzZXQ7CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZ2V0IGluaXRpYWxpemVyID0+IG51bGw7CgogIEBvdmVycmlkZQogIGludCBnZXQgZW5kQ2hhck9mZnNldCA9PiBjaGFyT2Zmc2V0ICsgbmFtZS5sZW5ndGg7CgogIEBvdmVycmlkZQogIFF1YWxpZmllZE5hbWUgd2l0aFF1YWxpZmllcihPYmplY3QgcXVhbGlmaWVyKSB7CiAgICByZXR1cm4gbmV3IF9Ub2tlblF1YWxpZmllZE5hbWUocXVhbGlmaWVyLCB0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAidG9rZW4taWRlbnRpZmllcigkbmFtZSkiOwp9CgpjbGFzcyBJbml0aWFsaXplZElkZW50aWZpZXIgZXh0ZW5kcyBfVG9rZW5JZGVudGlmaWVyIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBFeHByZXNzaW9uIGluaXRpYWxpemVyOwoKICBJbml0aWFsaXplZElkZW50aWZpZXIoX1Rva2VuSWRlbnRpZmllciBpZGVudGlmaWVyLCB0aGlzLmluaXRpYWxpemVyKQogICAgICA6IHN1cGVyKGlkZW50aWZpZXIudG9rZW4pOwoKICBAb3ZlcnJpZGUKICBRdWFsaWZpZWROYW1lIHdpdGhRdWFsaWZpZXIoT2JqZWN0IHF1YWxpZmllcikgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJ3aXRoUXVhbGlmaWVyIiwgY2hhck9mZnNldCwgbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiaW5pdGlhbGl6ZWQtaWRlbnRpZmllcigkbmFtZSwgJGluaXRpYWxpemVyKSI7Cn0KCmNsYXNzIFF1YWxpZmllZE5hbWUgZXh0ZW5kcyBJZGVudGlmaWVyIHsKICBmaW5hbCBPYmplY3QgcXVhbGlmaWVyOwoKICBRdWFsaWZpZWROYW1lKHRoaXMucXVhbGlmaWVyLCBUb2tlbiBzdWZmaXgpIDogc3VwZXIoc3VmZml4KTsKCiAgUXVhbGlmaWVkTmFtZS5fKHRoaXMucXVhbGlmaWVyLCBTdHJpbmcgbmFtZSwgaW50IGNoYXJPZmZzZXQpCiAgICAgIDogc3VwZXIuXyhuYW1lLCBjaGFyT2Zmc2V0KTsKCiAgQG92ZXJyaWRlCiAgUXVhbGlmaWVkTmFtZSB3aXRoUXVhbGlmaWVyKE9iamVjdCBxdWFsaWZpZXIpIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgid2l0aFF1YWxpZmllciIsIGNoYXJPZmZzZXQsIG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gInF1YWxpZmllZC1uYW1lKCRxdWFsaWZpZXIsICRuYW1lKSI7Cn0KCmNsYXNzIF9Ub2tlblF1YWxpZmllZE5hbWUgZXh0ZW5kcyBfVG9rZW5JZGVudGlmaWVyIGltcGxlbWVudHMgUXVhbGlmaWVkTmFtZSB7CiAgQG92ZXJyaWRlCiAgZmluYWwgT2JqZWN0IHF1YWxpZmllcjsKCiAgX1Rva2VuUXVhbGlmaWVkTmFtZSh0aGlzLnF1YWxpZmllciwgVG9rZW4gc3VmZml4KQogICAgICA6IGFzc2VydChxdWFsaWZpZXIgaXMhIElkZW50aWZpZXIgfHwgcXVhbGlmaWVyIGlzIF9Ub2tlbklkZW50aWZpZXIpLAogICAgICAgIHN1cGVyKHN1ZmZpeCk7CgogIEBvdmVycmlkZQogIFF1YWxpZmllZE5hbWUgd2l0aFF1YWxpZmllcihPYmplY3QgcXVhbGlmaWVyKSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoIndpdGhRdWFsaWZpZXIiLCBjaGFyT2Zmc2V0LCBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICJ0b2tlbi1xdWFsaWZpZWQtbmFtZSgkcXVhbGlmaWVyLCAkbmFtZSkiOwp9Cgp2b2lkIGZsYXR0ZW5RdWFsaWZpZWROYW1lT24oCiAgICBRdWFsaWZpZWROYW1lIG5hbWUsIFN0cmluZ0J1ZmZlciBidWZmZXIsIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSkgewogIGZpbmFsIE9iamVjdCBxdWFsaWZpZXIgPSBuYW1lLnF1YWxpZmllcjsKICBpZiAocXVhbGlmaWVyIGlzIFF1YWxpZmllZE5hbWUpIHsKICAgIGZsYXR0ZW5RdWFsaWZpZWROYW1lT24ocXVhbGlmaWVyLCBidWZmZXIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogIH0gZWxzZSBpZiAocXVhbGlmaWVyIGlzIElkZW50aWZpZXIpIHsKICAgIGJ1ZmZlci53cml0ZShxdWFsaWZpZXIubmFtZSk7CiAgfSBlbHNlIGlmIChxdWFsaWZpZXIgaXMgU3RyaW5nKSB7CiAgICBidWZmZXIud3JpdGUocXVhbGlmaWVyKTsKICB9IGVsc2UgewogICAgdW5oYW5kbGVkKCIke3F1YWxpZmllci5ydW50aW1lVHlwZX0iLCAiZmxhdHRlblF1YWxpZmllZE5hbWVPbiIsIGNoYXJPZmZzZXQsCiAgICAgICAgZmlsZVVyaSk7CiAgfQogIGJ1ZmZlci53cml0ZSgiLiIpOwogIGJ1ZmZlci53cml0ZShuYW1lLm5hbWUpOwp9CgpTdHJpbmcgZmxhdHRlbk5hbWUoT2JqZWN0IG5hbWUsIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSkgewogIGlmIChuYW1lIGlzIFN0cmluZykgewogICAgcmV0dXJuIG5hbWU7CiAgfSBlbHNlIGlmIChuYW1lIGlzIFF1YWxpZmllZE5hbWUpIHsKICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBmbGF0dGVuUXVhbGlmaWVkTmFtZU9uKG5hbWUsIGJ1ZmZlciwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICByZXR1cm4gIiRidWZmZXIiOwogIH0gZWxzZSBpZiAobmFtZSBpcyBJZGVudGlmaWVyKSB7CiAgICByZXR1cm4gbmFtZS5uYW1lOwogIH0gZWxzZSB7CiAgICByZXR1cm4gdW5oYW5kbGVkKCIke25hbWUucnVudGltZVR5cGV9IiwgImZsYXR0ZW5OYW1lIiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgfQp9CgpUb2tlbiBkZXByZWNhdGVkX2V4dHJhY3RUb2tlbihJZGVudGlmaWVyIGlkZW50aWZpZXIpIHsKICBfVG9rZW5JZGVudGlmaWVyIHRva2VuSWRlbnRpZmllciA9IGlkZW50aWZpZXI7CiAgcmV0dXJuIHRva2VuSWRlbnRpZmllcj8udG9rZW47Cn0KgJcATk48AR4BMgE0ASIBExUYARodJwEsATIoBAEmATUBMj0EAQwsAgEvFQEgAQwjAQwqAQwmAQw1AQwyNgQBDDICATcMIAFHIQEMMjsEAQxGAgEpGgE/AT8jAQwyOwQBDDwCAU4MGgE0SxcBDDI7BAEMQgIBHUwrJEQoIiQdC1ASBBUbAgE/GBEmLj8WIxYLUQQCATcxIQIBLHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9pZGVudGlmaWVycy5kYXJ0RnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9idWlsZGVyL2J1aWx0aW5fdHlwZV9idWlsZGVyLmRhcnSDgC8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmJ1aWx0aW5fdHlwZV9idWlsZGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBEYXJ0VHlwZTsKCmltcG9ydCAnYnVpbGRlci5kYXJ0JyBzaG93IExpYnJhcnlCdWlsZGVyLCBUeXBlQnVpbGRlciwgVHlwZURlY2xhcmF0aW9uQnVpbGRlcjsKCmFic3RyYWN0IGNsYXNzIEJ1aWx0aW5UeXBlQnVpbGRlciBleHRlbmRzIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIgewogIGZpbmFsIERhcnRUeXBlIHR5cGU7CgogIEJ1aWx0aW5UeXBlQnVpbGRlcigKICAgICAgU3RyaW5nIG5hbWUsIHRoaXMudHlwZSwgTGlicmFyeUJ1aWxkZXIgY29tcGlsYXRpb25Vbml0LCBpbnQgY2hhck9mZnNldCkKICAgICAgOiBzdXBlcihudWxsLCAwLCBuYW1lLCBjb21waWxhdGlvblVuaXQsIGNoYXJPZmZzZXQpOwoKICBEYXJ0VHlwZSBidWlsZFR5cGUoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgTGlzdDxUeXBlQnVpbGRlcj4gYXJndW1lbnRzKSA9PgogICAgICB0eXBlOwoKICBEYXJ0VHlwZSBidWlsZFR5cGVzV2l0aEJ1aWx0QXJndW1lbnRzKAogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBMaXN0PERhcnRUeXBlPiBhcmd1bWVudHMpIHsKICAgIHJldHVybiB0eXBlOwogIH0KCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWUgPT4gIkJ1aWx0aW5UeXBlQnVpbGRlciI7Cn0KHQBOTjwBJAEwAVABQxcBFk47AU0MASk6EQQBMAIBPXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2J1aWx0aW5fdHlwZV9idWlsZGVyLmRhcnRPc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2J1aWxkZXIvY29uc3RydWN0b3JfcmVmZXJlbmNlX2J1aWxkZXIuZGFydIjyLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuY29uc3RydWN0b3JfcmVmZXJlbmNlX2J1aWxkZXI7CgppbXBvcnQgJy4uL21lc3NhZ2VzLmRhcnQnIHNob3cgbm9MZW5ndGgsIHRlbXBsYXRlQ29uc3RydWN0b3JOb3RGb3VuZDsKCmltcG9ydCAnYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIENsYXNzQnVpbGRlciwKICAgICAgICBCdWlsZGVyLAogICAgICAgIExpYnJhcnlCdWlsZGVyLAogICAgICAgIFByZWZpeEJ1aWxkZXIsCiAgICAgICAgUXVhbGlmaWVkTmFtZSwKICAgICAgICBTY29wZSwKICAgICAgICBUeXBlQnVpbGRlciwKICAgICAgICBmbGF0dGVuTmFtZTsKCmNsYXNzIENvbnN0cnVjdG9yUmVmZXJlbmNlQnVpbGRlciB7CiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CgogIGZpbmFsIFVyaSBmaWxlVXJpOwoKICBmaW5hbCBPYmplY3QgbmFtZTsKCiAgZmluYWwgTGlzdDxUeXBlQnVpbGRlcj4gdHlwZUFyZ3VtZW50czsKCiAgLy8vIFRoaXMgaXMgdGhlIG5hbWUgb2YgYSBuYW1lZCBjb25zdHJ1Y3Rvci4gQXMgYGJhcmAgaW4gYG5ldyBGb288VD4uYmFyKClgLgogIGZpbmFsIFN0cmluZyBzdWZmaXg7CgogIEJ1aWxkZXIgdGFyZ2V0OwoKICBDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXIodGhpcy5uYW1lLCB0aGlzLnR5cGVBcmd1bWVudHMsIHRoaXMuc3VmZml4LAogICAgICBCdWlsZGVyIHBhcmVudCwgdGhpcy5jaGFyT2Zmc2V0KQogICAgICA6IGZpbGVVcmkgPSBwYXJlbnQuZmlsZVVyaTsKCiAgU3RyaW5nIGdldCBmdWxsTmFtZUZvckVycm9ycyB7CiAgICByZXR1cm4gIiR7ZmxhdHRlbk5hbWUobmFtZSwgY2hhck9mZnNldCwgZmlsZVVyaSl9IgogICAgICAgICIke3N1ZmZpeCA9PSBudWxsID8gJycgOiAnLiRzdWZmaXgnfSI7CiAgfQoKICB2b2lkIHJlc29sdmVJbihTY29wZSBzY29wZSwgTGlicmFyeUJ1aWxkZXIgYWNjZXNzaW5nTGlicmFyeSkgewogICAgZmluYWwgT2JqZWN0IG5hbWUgPSB0aGlzLm5hbWU7CiAgICBCdWlsZGVyIGRlY2xhcmF0aW9uOwogICAgaWYgKG5hbWUgaXMgUXVhbGlmaWVkTmFtZSkgewogICAgICBTdHJpbmcgcHJlZml4ID0gbmFtZS5xdWFsaWZpZXI7CiAgICAgIFN0cmluZyBtaWRkbGUgPSBuYW1lLm5hbWU7CiAgICAgIGRlY2xhcmF0aW9uID0gc2NvcGUubG9va3VwKHByZWZpeCwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICAgIGlmIChkZWNsYXJhdGlvbiBpcyBQcmVmaXhCdWlsZGVyKSB7CiAgICAgICAgUHJlZml4QnVpbGRlciBwcmVmaXggPSBkZWNsYXJhdGlvbjsKICAgICAgICBkZWNsYXJhdGlvbiA9IHByZWZpeC5sb29rdXAobWlkZGxlLCBuYW1lLmNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIENsYXNzQnVpbGRlcikgewogICAgICAgIENsYXNzQnVpbGRlciBjbHMgPSBkZWNsYXJhdGlvbjsKICAgICAgICBkZWNsYXJhdGlvbiA9IGNscy5maW5kQ29uc3RydWN0b3JPckZhY3RvcnkoCiAgICAgICAgICAgIG1pZGRsZSwgbmFtZS5jaGFyT2Zmc2V0LCBmaWxlVXJpLCBhY2Nlc3NpbmdMaWJyYXJ5KTsKICAgICAgICBpZiAoc3VmZml4ID09IG51bGwpIHsKICAgICAgICAgIHRhcmdldCA9IGRlY2xhcmF0aW9uOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZGVjbGFyYXRpb24gPSBzY29wZS5sb29rdXAobmFtZSwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICB9CiAgICBpZiAoZGVjbGFyYXRpb24gaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgIHRhcmdldCA9IGRlY2xhcmF0aW9uLmZpbmRDb25zdHJ1Y3Rvck9yRmFjdG9yeSgKICAgICAgICAgIHN1ZmZpeCA/PyAiIiwgY2hhck9mZnNldCwgZmlsZVVyaSwgYWNjZXNzaW5nTGlicmFyeSk7CiAgICB9CiAgICBpZiAodGFyZ2V0ID09IG51bGwpIHsKICAgICAgYWNjZXNzaW5nTGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVDb25zdHJ1Y3Rvck5vdEZvdW5kLndpdGhBcmd1bWVudHMoZnVsbE5hbWVGb3JFcnJvcnMpLAogICAgICAgICAgY2hhck9mZnNldCwKICAgICAgICAgIG5vTGVuZ3RoLAogICAgICAgICAgZmlsZVVyaSk7CiAgICB9CiAgfQp9Ck8ATk48AS0BRgEWCRYRGBcXDxUVASQYARUBFQEpAU8XARIBSiciASE3LwQBQSMZISYhPyosRzAoNEEeIBIKCA09Bic1QAYaI0gWFBQGBAIBRnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2NvbnN0cnVjdG9yX3JlZmVyZW5jZV9idWlsZGVyLmRhcnQ9c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2J1aWxkZXIvZGVjbGFyYXRpb24uZGFydJhyLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuZGVjbGFyYXRpb247CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgdW5zdXBwb3J0ZWQ7CgovLy8gRHVtbXkgY2xhc3MgdG8gaGVscCBkZXByZWNhdGUgW0J1aWxkZXIudGFyZ2V0XS4KYWJzdHJhY3QgY2xhc3MgVW5yZWxhdGVkVGFyZ2V0IHt9CgphYnN0cmFjdCBjbGFzcyBCdWlsZGVyIHsKICAvLy8gVXNlZCB3aGVuIG11bHRpcGxlIHRoaW5ncyB3aXRoIHRoZSBzYW1lIG5hbWUgYXJlIGRlY2xhcmVkIHdpdGhpbiB0aGUgc2FtZQogIC8vLyBwYXJlbnQuIE9ubHkgdXNlZCBmb3IgdG9wLWxldmVsIGFuZCBjbGFzcy1tZW1iZXIgZGVjbGFyYXRpb25zLCBub3QgZm9yCiAgLy8vIGJsb2NrIHNjb3Blcy4KICBCdWlsZGVyIG5leHQ7CgogIEJ1aWxkZXIoKTsKCiAgQnVpbGRlciBnZXQgcGFyZW50OwoKICBVcmkgZ2V0IGZpbGVVcmk7CgogIGludCBnZXQgY2hhck9mZnNldDsKCiAgZ2V0IHRhcmdldCA9PiB1bnN1cHBvcnRlZCgiJHtydW50aW1lVHlwZX0udGFyZ2V0IiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CgogIEJ1aWxkZXIgZ2V0IG9yaWdpbiA9PiB0aGlzOwoKICBTdHJpbmcgZ2V0IGZ1bGxOYW1lRm9yRXJyb3JzOwoKICBib29sIGdldCBoYXNQcm9ibGVtID0+IGZhbHNlOwoKICBib29sIGdldCBpc0NvbnN0ID0+IGZhbHNlOwoKICBib29sIGdldCBpc0NvbnN0cnVjdG9yID0+IGZhbHNlOwoKICBib29sIGdldCBpc0ZhY3RvcnkgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzRmllbGQgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzRmluYWwgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzR2V0dGVyID0+IGZhbHNlOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBidWlsZGVyIGlzIGFuIGV4dGVuc2lvbiBkZWNsYXJhdGlvbi4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGBCYCBpbjoKICAvLy8KICAvLy8gICAgY2xhc3MgQSB7fQogIC8vLyAgICBleHRlbnNpb24gQiBvbiBBIHt9CiAgLy8vCiAgYm9vbCBnZXQgaXNFeHRlbnNpb24gPT4gZmFsc2U7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIGJ1aWxkZXIgaXMgYSBtZW1iZXIgb2YgYSBjbGFzcywgbWl4aW4sIG9yIGV4dGVuc2lvbgogIC8vLyBkZWNsYXJhdGlvbi4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGBBLmNvbnN0cnVjdG9yYCwgYG1ldGhvZDFhYCwgYG1ldGhvZDFiYCwgYG1ldGhvZDJhYCwKICAvLy8gYG1ldGhvZDJiYCwgYG1ldGhvZDNhYCwgYW5kIGBtZXRob2QzYmAgaW46CiAgLy8vCiAgLy8vICAgICBjbGFzcyBBIHsKICAvLy8gICAgICAgQS5jb25zdHJ1Y3RvcigpOwogIC8vLyAgICAgICBtZXRob2QxYSgpIHt9CiAgLy8vICAgICAgIHN0YXRpYyBtZXRob2QxYigpIHt9CiAgLy8vICAgICB9CiAgLy8vICAgICBtaXhpbiBCIHsKICAvLy8gICAgICAgbWV0aG9kMmEoKSB7fQogIC8vLyAgICAgICBzdGF0aWMgbWV0aG9kMmIoKSB7fQogIC8vLyAgICAgfQogIC8vLyAgICAgZXh0ZW5kcyBDIG9uIEEgewogIC8vLyAgICAgICBtZXRob2QzYSgpIHt9CiAgLy8vICAgICAgIHN0YXRpYyBtZXRob2QzYigpIHt9CiAgLy8vICAgICB9CiAgLy8vCiAgYm9vbCBnZXQgaXNEZWNsYXJhdGlvbk1lbWJlciA9PiBmYWxzZTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoaXMgYnVpbGRlciBpcyBhIG1lbWJlciBvZiBhIGNsYXNzIG9yIG1peGluCiAgLy8vIGRlY2xhcmF0aW9uLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UgYEEuY29uc3RydWN0b3JgLCBgbWV0aG9kMWFgLCBgbWV0aG9kMWJgLCBgbWV0aG9kMmFgIGFuZAogIC8vLyBgbWV0aG9kMmJgIGluOgogIC8vLwogIC8vLyAgICAgY2xhc3MgQSB7CiAgLy8vICAgICAgIEEuY29uc3RydWN0b3IoKTsKICAvLy8gICAgICAgbWV0aG9kMWEoKSB7fQogIC8vLyAgICAgICBzdGF0aWMgbWV0aG9kMWIoKSB7fQogIC8vLyAgICAgfQogIC8vLyAgICAgbWl4aW4gQiB7CiAgLy8vICAgICAgIG1ldGhvZDJhKCkge30KICAvLy8gICAgICAgc3RhdGljIG1ldGhvZDJiKCkge30KICAvLy8gICAgIH0KICAvLy8gICAgIGV4dGVuZHMgQyBvbiBBIHsKICAvLy8gICAgICAgbWV0aG9kM2EoKSB7fSAgICAgICAgLy8gTm90IGEgY2xhc3MgbWVtYmVyLgogIC8vLyAgICAgICBzdGF0aWMgbWV0aG9kM2IoKSB7fSAvLyBOb3QgYSBjbGFzcyBtZW1iZXIuCiAgLy8vICAgICB9CiAgLy8vCiAgYm9vbCBnZXQgaXNDbGFzc01lbWJlciA9PiBmYWxzZTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoaXMgYnVpbGRlciBpcyBhIG1lbWJlciBvZiBhbiBleHRlbnNpb24gZGVjbGFyYXRpb24uCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBgbWV0aG9kM2FgIGFuZCBgbWV0aG9kM2JgIGluOgogIC8vLwogIC8vLyAgICAgY2xhc3MgQSB7CiAgLy8vICAgICAgIEEuY29uc3RydWN0b3IoKTsgICAgIC8vIE5vdCBhbiBleHRlbnNpb24gbWVtYmVyLgogIC8vLyAgICAgICBtZXRob2QxYSgpIHt9ICAgICAgICAvLyBOb3QgYW4gZXh0ZW5zaW9uIG1lbWJlci4KICAvLy8gICAgICAgc3RhdGljIG1ldGhvZDFiKCkge30gLy8gTm90IGFuIGV4dGVuc2lvbiBtZW1iZXIuCiAgLy8vICAgICB9CiAgLy8vICAgICBtaXhpbiBCIHsKICAvLy8gICAgICAgbWV0aG9kMmEoKSB7fSAgICAgICAgLy8gTm90IGFuIGV4dGVuc2lvbiBtZW1iZXIuCiAgLy8vICAgICAgIHN0YXRpYyBtZXRob2QyYigpIHt9IC8vIE5vdCBhbiBleHRlbnNpb24gbWVtYmVyLgogIC8vLyAgICAgfQogIC8vLyAgICAgZXh0ZW5kcyBDIG9uIEEgewogIC8vLyAgICAgICBtZXRob2QzYSgpIHt9CiAgLy8vICAgICAgIHN0YXRpYyBtZXRob2QzYigpIHt9CiAgLy8vICAgICB9CiAgLy8vCiAgYm9vbCBnZXQgaXNFeHRlbnNpb25NZW1iZXIgPT4gZmFsc2U7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIGJ1aWxkZXIgaXMgYW4gaW5zdGFuY2UgbWVtYmVyIG9mIGEgY2xhc3MsIG1peGluLCBvcgogIC8vLyBleHRlbnNpb24gZGVjbGFyYXRpb24uCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBgbWV0aG9kMWFgLCBgbWV0aG9kMmFgLCBhbmQgYG1ldGhvZDNhYCBpbjoKICAvLy8KICAvLy8gICAgIGNsYXNzIEEgewogIC8vLyAgICAgICBBLmNvbnN0cnVjdG9yKCk7ICAgICAvLyBOb3QgYSBkZWNsYXJhdGlvbiBpbnN0YW5jZSBtZW1iZXIuCiAgLy8vICAgICAgIG1ldGhvZDFhKCkge30KICAvLy8gICAgICAgc3RhdGljIG1ldGhvZDFiKCkge30gLy8gTm90IGEgZGVjbGFyYXRpb24gaW5zdGFuY2UgbWVtYmVyLgogIC8vLyAgICAgfQogIC8vLyAgICAgbWl4aW4gQiB7CiAgLy8vICAgICAgIG1ldGhvZDJhKCkge30KICAvLy8gICAgICAgc3RhdGljIG1ldGhvZDJiKCkge30gLy8gTm90IGEgZGVjbGFyYXRpb24gaW5zdGFuY2UgbWVtYmVyLgogIC8vLyAgICAgfQogIC8vLyAgICAgZXh0ZW5kcyBDIG9uIEEgewogIC8vLyAgICAgICBtZXRob2QzYSgpIHt9CiAgLy8vICAgICAgIHN0YXRpYyBtZXRob2QzYigpIHt9IC8vIE5vdCBhIGRlY2xhcmF0aW9uIGluc3RhbmNlIG1lbWJlci4KICAvLy8gICAgIH0KICAvLy8KICBib29sIGdldCBpc0RlY2xhcmF0aW9uSW5zdGFuY2VNZW1iZXIgPT4gZmFsc2U7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIGJ1aWxkZXIgaXMgYW4gaW5zdGFuY2UgbWVtYmVyIG9mIGEgY2xhc3Mgb3IgbWl4aW4KICAvLy8gZXh0ZW5zaW9uIGRlY2xhcmF0aW9uLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UgYG1ldGhvZDFhYCBhbmQgYG1ldGhvZDJhYCBpbjoKICAvLy8KICAvLy8gICAgIGNsYXNzIEEgewogIC8vLyAgICAgICBBLmNvbnN0cnVjdG9yKCk7ICAgICAvLyBOb3QgYSBjbGFzcyBpbnN0YW5jZSBtZW1iZXIuCiAgLy8vICAgICAgIG1ldGhvZDFhKCkge30KICAvLy8gICAgICAgc3RhdGljIG1ldGhvZDFiKCkge30gLy8gTm90IGEgY2xhc3MgaW5zdGFuY2UgbWVtYmVyLgogIC8vLyAgICAgfQogIC8vLyAgICAgbWl4aW4gQiB7CiAgLy8vICAgICAgIG1ldGhvZDJhKCkge30KICAvLy8gICAgICAgc3RhdGljIG1ldGhvZDJiKCkge30gLy8gTm90IGEgY2xhc3MgaW5zdGFuY2UgbWVtYmVyLgogIC8vLyAgICAgfQogIC8vLyAgICAgZXh0ZW5kcyBDIG9uIEEgewogIC8vLyAgICAgICBtZXRob2QzYSgpIHt9ICAgICAgICAvLyBOb3QgYSBjbGFzcyBpbnN0YW5jZSBtZW1iZXIuCiAgLy8vICAgICAgIHN0YXRpYyBtZXRob2QzYigpIHt9IC8vIE5vdCBhIGNsYXNzIGluc3RhbmNlIG1lbWJlci4KICAvLy8gICAgIH0KICAvLy8KICBib29sIGdldCBpc0NsYXNzSW5zdGFuY2VNZW1iZXIgPT4gZmFsc2U7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIGJ1aWxkZXIgaXMgYW4gaW5zdGFuY2UgbWVtYmVyIG9mIGFuIGV4dGVuc2lvbgogIC8vLyBkZWNsYXJhdGlvbi4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGBtZXRob2QzYWAgaW46CiAgLy8vCiAgLy8vICAgICBjbGFzcyBBIHsKICAvLy8gICAgICAgQS5jb25zdHJ1Y3RvcigpOyAgICAgLy8gTm90IGFuIGV4dGVuc2lvbiBpbnN0YW5jZSBtZW1iZXIuCiAgLy8vICAgICAgIG1ldGhvZDFhKCkge30gICAgICAgIC8vIE5vdCBhbiBleHRlbnNpb24gaW5zdGFuY2UgbWVtYmVyLgogIC8vLyAgICAgICBzdGF0aWMgbWV0aG9kMWIoKSB7fSAvLyBOb3QgYW4gZXh0ZW5zaW9uIGluc3RhbmNlIG1lbWJlci4KICAvLy8gICAgIH0KICAvLy8gICAgIG1peGluIEIgewogIC8vLyAgICAgICBtZXRob2QyYSgpIHt9ICAgICAgICAvLyBOb3QgYW4gZXh0ZW5zaW9uIGluc3RhbmNlIG1lbWJlci4KICAvLy8gICAgICAgc3RhdGljIG1ldGhvZDJiKCkge30gLy8gTm90IGFuIGV4dGVuc2lvbiBpbnN0YW5jZSBtZW1iZXIuCiAgLy8vICAgICB9CiAgLy8vICAgICBleHRlbmRzIEMgb24gQSB7CiAgLy8vICAgICAgIG1ldGhvZDNhKCkge30KICAvLy8gICAgICAgc3RhdGljIG1ldGhvZDNiKCkge30gLy8gTm90IGFuIGV4dGVuc2lvbiBpbnN0YW5jZSBtZW1iZXIuCiAgLy8vICAgICB9CiAgLy8vCiAgYm9vbCBnZXQgaXNFeHRlbnNpb25JbnN0YW5jZU1lbWJlciA9PiBmYWxzZTsKCiAgYm9vbCBnZXQgaXNMb2NhbCA9PiBmYWxzZTsKCiAgYm9vbCBnZXQgaXNQYXRjaCA9PiB0aGlzICE9IG9yaWdpbjsKCiAgYm9vbCBnZXQgaXNSZWd1bGFyTWV0aG9kID0+IGZhbHNlOwoKICBib29sIGdldCBpc1NldHRlciA9PiBmYWxzZTsKCiAgYm9vbCBnZXQgaXNTdGF0aWMgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzU3ludGhldGljID0+IGZhbHNlOwoKICBib29sIGdldCBpc1RvcExldmVsID0+IGZhbHNlOwoKICBib29sIGdldCBpc1R5cGVEZWNsYXJhdGlvbiA9PiBmYWxzZTsKCiAgYm9vbCBnZXQgaXNUeXBlVmFyaWFibGUgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzTWl4aW5BcHBsaWNhdGlvbiA9PiBmYWxzZTsKCiAgYm9vbCBnZXQgaXNOYW1lZE1peGluQXBwbGljYXRpb24gPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzQW5vbnltb3VzTWl4aW5BcHBsaWNhdGlvbiB7CiAgICByZXR1cm4gaXNNaXhpbkFwcGxpY2F0aW9uICYmICFpc05hbWVkTWl4aW5BcHBsaWNhdGlvbjsKICB9CgogIC8vLyBBcHBsaWVzIFtwYXRjaF0gdG8gdGhpcyBkZWNsYXJhdGlvbi4KICB2b2lkIGFwcGx5UGF0Y2goQnVpbGRlciBwYXRjaCkgewogICAgdW5zdXBwb3J0ZWQoIiR7cnVudGltZVR5cGV9LmFwcGx5UGF0Y2giLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGF0Y2hlcyB0aGF0IHdhcyBmaW5pc2hlZC4KICBpbnQgZmluaXNoUGF0Y2goKSB7CiAgICBpZiAoIWlzUGF0Y2gpIHJldHVybiAwOwogICAgdW5zdXBwb3J0ZWQoIiR7cnVudGltZVR5cGV9LmZpbmlzaFBhdGNoIiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICByZXR1cm4gMDsKICB9CgogIC8vLyBSZXNvbHZlIGNvbnN0cnVjdG9ycyAobG9va3VwIG5hbWVzIGluIHNjb3BlKSByZWNvcmRlZCBpbiB0aGlzIGJ1aWxkZXIgYW5kCiAgLy8vIHJldHVybiB0aGUgbnVtYmVyIG9mIGNvbnN0cnVjdG9ycyByZXNvbHZlZC4KICBpbnQgcmVzb2x2ZUNvbnN0cnVjdG9ycyhjb3ZhcmlhbnQgQnVpbGRlciBwYXJlbnQpID0+IDA7Cn0KgOEATk48ARsBLAE0IgEZUE0UEAENARYBEwEWAUsBHgEgASABHQEjAR8BHQEdAR4BQgYbBhQdBiEBURMGSDEGFB0aIQwUGiEMGxohDAYpAUUTBksVBhQdGiEMFBohDBs4OAwGIwFOBjEGFD09PQwUPT0MGxohDAYnAVEdBj4GFEcaRwwUGkcMGxpHDAYxAU8dBjEGFEEaQQwUGkEMG0FBDAYrAUsTBiIGFEZGRgwURkYMGxpGDAYvAR0BJgElAR4BHgEhASABJwEkASgBLQEpOwQBKyNDBAE3FhxEDgQBUDI6AgE0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvZGVjbGFyYXRpb24uZGFydEZzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci9keW5hbWljX3R5cGVfYnVpbGRlci5kYXJ0gnAvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5keW5hbWljX3R5cGVfYnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgRGFydFR5cGU7CgppbXBvcnQgJ2J1aWxkZXIuZGFydCcgc2hvdyBMaWJyYXJ5QnVpbGRlciwgQnVpbHRpblR5cGVCdWlsZGVyOwoKY2xhc3MgRHluYW1pY1R5cGVCdWlsZGVyIGV4dGVuZHMgQnVpbHRpblR5cGVCdWlsZGVyIHsKICBEeW5hbWljVHlwZUJ1aWxkZXIoCiAgICAgIERhcnRUeXBlIHR5cGUsIExpYnJhcnlCdWlsZGVyIGNvbXBpbGF0aW9uVW5pdCwgaW50IGNoYXJPZmZzZXQpCiAgICAgIDogc3VwZXIoImR5bmFtaWMiLCB0eXBlLCBjb21waWxhdGlvblVuaXQsIGNoYXJPZmZzZXQpOwoKICBTdHJpbmcgZ2V0IGRlYnVnTmFtZSA9PiAiRHluYW1pY1R5cGVCdWlsZGVyIjsKfQoTAE5OPAEkATABPwE2FkU9ATACAT1wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9keW5hbWljX3R5cGVfYnVpbGRlci5kYXJ0PnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9idWlsZGVyL2VudW1fYnVpbGRlci5kYXJ0sXgvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5lbnVtX2J1aWxkZXI7CgppbXBvcnQgJ2J1aWxkZXIuZGFydCcgc2hvdyBDbGFzc0J1aWxkZXIsIE1ldGFkYXRhQnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQXJndW1lbnRzLAogICAgICAgIENsYXNzLAogICAgICAgIENvbnN0cnVjdG9yLAogICAgICAgIENvbnN0cnVjdG9ySW52b2NhdGlvbiwKICAgICAgICBEaXJlY3RQcm9wZXJ0eUdldCwKICAgICAgICBFeHByZXNzaW9uLAogICAgICAgIEZpZWxkLAogICAgICAgIEZpZWxkSW5pdGlhbGl6ZXIsCiAgICAgICAgSW50TGl0ZXJhbCwKICAgICAgICBJbnRlcmZhY2VUeXBlLAogICAgICAgIExpc3RMaXRlcmFsLAogICAgICAgIFByb2NlZHVyZUtpbmQsCiAgICAgICAgUmV0dXJuU3RhdGVtZW50LAogICAgICAgIFN0YXRpY0dldCwKICAgICAgICBTdHJpbmdMaXRlcmFsLAogICAgICAgIFN1cGVySW5pdGlhbGl6ZXIsCiAgICAgICAgVGhpc0V4cHJlc3Npb24sCiAgICAgICAgVmFyaWFibGVHZXQ7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93CiAgICAgICAgTG9jYXRlZE1lc3NhZ2UsCiAgICAgICAgbWVzc2FnZU5vVW5uYW1lZENvbnN0cnVjdG9ySW5PYmplY3QsCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb24sCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25DYXVzZSwKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvblN5bnRoZXRpY0NhdXNlLAogICAgICAgIHRlbXBsYXRlRW51bUNvbnN0YW50U2FtZU5hbWVBc0VuY2xvc2luZzsKCmltcG9ydCAnLi4vbW9kaWZpZXIuZGFydCcKICAgIHNob3cKICAgICAgICBjb25zdE1hc2ssCiAgICAgICAgZmluYWxNYXNrLAogICAgICAgIGhhc0luaXRpYWxpemVyTWFzaywKICAgICAgICBpbml0aWFsaXppbmdGb3JtYWxNYXNrLAogICAgICAgIHN0YXRpY01hc2s7CgppbXBvcnQgJy4uL3NvdXJjZS9zb3VyY2VfY2xhc3NfYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZUNsYXNzQnVpbGRlcjsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgQnVpbGRlciwKICAgICAgICBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyLAogICAgICAgIENsYXNzQnVpbGRlciwKICAgICAgICBDb25zdHJ1Y3RvckJ1aWxkZXIsCiAgICAgICAgRmllbGRCdWlsZGVyLAogICAgICAgIE5hbWVkVHlwZUJ1aWxkZXIsCiAgICAgICAgUHJvY2VkdXJlQnVpbGRlciwKICAgICAgICBUeXBlQnVpbGRlciwKICAgICAgICBMaWJyYXJ5QnVpbGRlciwKICAgICAgICBNZW1iZXJCdWlsZGVyLAogICAgICAgIE1ldGFkYXRhQnVpbGRlciwKICAgICAgICBTY29wZTsKCmltcG9ydCAnLi4va2VybmVsL21ldGFkYXRhX2NvbGxlY3Rvci5kYXJ0JzsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCmNsYXNzIEVudW1CdWlsZGVyIGV4dGVuZHMgU291cmNlQ2xhc3NCdWlsZGVyIHsKICBmaW5hbCBMaXN0PEVudW1Db25zdGFudEluZm8+IGVudW1Db25zdGFudEluZm9zOwoKICBmaW5hbCBOYW1lZFR5cGVCdWlsZGVyIGludFR5cGU7CgogIGZpbmFsIE5hbWVkVHlwZUJ1aWxkZXIgc3RyaW5nVHlwZTsKCiAgZmluYWwgTmFtZWRUeXBlQnVpbGRlciBvYmplY3RUeXBlOwoKICBmaW5hbCBOYW1lZFR5cGVCdWlsZGVyIGxpc3RUeXBlOwoKICBFbnVtQnVpbGRlci5pbnRlcm5hbCgKICAgICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLAogICAgICBTdHJpbmcgbmFtZSwKICAgICAgU2NvcGUgc2NvcGUsCiAgICAgIFNjb3BlIGNvbnN0cnVjdG9ycywKICAgICAgQ2xhc3MgY2xzLAogICAgICB0aGlzLmVudW1Db25zdGFudEluZm9zLAogICAgICB0aGlzLmludFR5cGUsCiAgICAgIHRoaXMubGlzdFR5cGUsCiAgICAgIHRoaXMub2JqZWN0VHlwZSwKICAgICAgdGhpcy5zdHJpbmdUeXBlLAogICAgICBMaWJyYXJ5QnVpbGRlciBwYXJlbnQsCiAgICAgIGludCBzdGFydENoYXJPZmZzZXQsCiAgICAgIGludCBjaGFyT2Zmc2V0LAogICAgICBpbnQgY2hhckVuZE9mZnNldCkKICAgICAgOiBzdXBlcihtZXRhZGF0YSwgMCwgbmFtZSwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgc2NvcGUsIGNvbnN0cnVjdG9ycywKICAgICAgICAgICAgcGFyZW50LCBudWxsLCBzdGFydENoYXJPZmZzZXQsIGNoYXJPZmZzZXQsIGNoYXJFbmRPZmZzZXQsCiAgICAgICAgICAgIGNsczogY2xzKTsKCiAgZmFjdG9yeSBFbnVtQnVpbGRlcigKICAgICAgTWV0YWRhdGFDb2xsZWN0b3IgbWV0YWRhdGFDb2xsZWN0b3IsCiAgICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSwKICAgICAgU3RyaW5nIG5hbWUsCiAgICAgIExpc3Q8RW51bUNvbnN0YW50SW5mbz4gZW51bUNvbnN0YW50SW5mb3MsCiAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIHBhcmVudCwKICAgICAgaW50IHN0YXJ0Q2hhck9mZnNldCwKICAgICAgaW50IGNoYXJPZmZzZXQsCiAgICAgIGludCBjaGFyRW5kT2Zmc2V0KSB7CiAgICBhc3NlcnQoZW51bUNvbnN0YW50SW5mb3MgPT0gbnVsbCB8fCBlbnVtQ29uc3RhbnRJbmZvcy5pc05vdEVtcHR5KTsKICAgIC8vIFRPRE8oYWhlKTogVGhlc2UgdHlwZXMgc2hvdWxkbid0IGJlIGxvb2tlZCB1cCBpbiBzY29wZSwgdGhleSBjb21lCiAgICAvLyBkaXJlY3RseSBmcm9tIGRhcnQ6Y29yZS4KICAgIFR5cGVCdWlsZGVyIGludFR5cGUgPSBuZXcgTmFtZWRUeXBlQnVpbGRlcigiaW50IiwgbnVsbCk7CiAgICBUeXBlQnVpbGRlciBzdHJpbmdUeXBlID0gbmV3IE5hbWVkVHlwZUJ1aWxkZXIoIlN0cmluZyIsIG51bGwpOwogICAgTmFtZWRUeXBlQnVpbGRlciBvYmplY3RUeXBlID0gbmV3IE5hbWVkVHlwZUJ1aWxkZXIoIk9iamVjdCIsIG51bGwpOwogICAgQ2xhc3MgY2xzID0gbmV3IENsYXNzKG5hbWU6IG5hbWUpOwogICAgTWFwPFN0cmluZywgTWVtYmVyQnVpbGRlcj4gbWVtYmVycyA9IDxTdHJpbmcsIE1lbWJlckJ1aWxkZXI+e307CiAgICBNYXA8U3RyaW5nLCBNZW1iZXJCdWlsZGVyPiBjb25zdHJ1Y3RvcnMgPSA8U3RyaW5nLCBNZW1iZXJCdWlsZGVyPnt9OwogICAgTmFtZWRUeXBlQnVpbGRlciBzZWxmVHlwZSA9IG5ldyBOYW1lZFR5cGVCdWlsZGVyKG5hbWUsIG51bGwpOwogICAgVHlwZUJ1aWxkZXIgbGlzdFR5cGUgPQogICAgICAgIG5ldyBOYW1lZFR5cGVCdWlsZGVyKCJMaXN0IiwgPFR5cGVCdWlsZGVyPltzZWxmVHlwZV0pOwoKICAgIC8vLyBtZXRhZGF0YSBjbGFzcyBFIHsKICAgIC8vLyAgIGZpbmFsIGludCBpbmRleDsKICAgIC8vLyAgIGZpbmFsIFN0cmluZyBfbmFtZTsKICAgIC8vLyAgIGNvbnN0IEUodGhpcy5pbmRleCwgdGhpcy5fbmFtZSk7CiAgICAvLy8gICBzdGF0aWMgY29uc3QgRSBpZDAgPSBjb25zdCBFKDAsICdFLmlkMCcpOwogICAgLy8vICAgLi4uCiAgICAvLy8gICBzdGF0aWMgY29uc3QgRSBpZG4tMSA9IGNvbnN0IEUobiAtIDEsICdFLmlkbi0xJyk7CiAgICAvLy8gICBzdGF0aWMgY29uc3QgTGlzdDxFPiB2YWx1ZXMgPSBjb25zdCA8RT5baWQwLCAuLi4sIGlkbi0xXTsKICAgIC8vLyAgIFN0cmluZyB0b1N0cmluZygpID0+IF9uYW1lOwogICAgLy8vIH0KCiAgICBtZW1iZXJzWyJpbmRleCJdID0gbmV3IEZpZWxkQnVpbGRlcihudWxsLCBpbnRUeXBlLCAiaW5kZXgiLAogICAgICAgIGZpbmFsTWFzayB8IGhhc0luaXRpYWxpemVyTWFzaywgcGFyZW50LCBjaGFyT2Zmc2V0LCBjaGFyT2Zmc2V0KTsKICAgIG1lbWJlcnNbIl9uYW1lIl0gPSBuZXcgRmllbGRCdWlsZGVyKG51bGwsIHN0cmluZ1R5cGUsICJfbmFtZSIsCiAgICAgICAgZmluYWxNYXNrIHwgaGFzSW5pdGlhbGl6ZXJNYXNrLCBwYXJlbnQsIGNoYXJPZmZzZXQsIGNoYXJPZmZzZXQpOwogICAgQ29uc3RydWN0b3JCdWlsZGVyIGNvbnN0cnVjdG9yQnVpbGRlciA9IG5ldyBDb25zdHJ1Y3RvckJ1aWxkZXIoCiAgICAgICAgbnVsbCwKICAgICAgICBjb25zdE1hc2ssCiAgICAgICAgbnVsbCwKICAgICAgICAiIiwKICAgICAgICBudWxsLAogICAgICAgIDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPlsKICAgICAgICAgIG5ldyBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyKG51bGwsIGluaXRpYWxpemluZ0Zvcm1hbE1hc2ssIGludFR5cGUsCiAgICAgICAgICAgICAgImluZGV4IiwgcGFyZW50LCBjaGFyT2Zmc2V0KSwKICAgICAgICAgIG5ldyBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyKG51bGwsIGluaXRpYWxpemluZ0Zvcm1hbE1hc2ssIHN0cmluZ1R5cGUsCiAgICAgICAgICAgICAgIl9uYW1lIiwgcGFyZW50LCBjaGFyT2Zmc2V0KQogICAgICAgIF0sCiAgICAgICAgcGFyZW50LAogICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgY2hhck9mZnNldCwKICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgIGNoYXJFbmRPZmZzZXQpOwogICAgY29uc3RydWN0b3JzWyIiXSA9IGNvbnN0cnVjdG9yQnVpbGRlcjsKICAgIEZpZWxkQnVpbGRlciB2YWx1ZXNCdWlsZGVyID0gbmV3IEZpZWxkQnVpbGRlcigKICAgICAgICBudWxsLAogICAgICAgIGxpc3RUeXBlLAogICAgICAgICJ2YWx1ZXMiLAogICAgICAgIGNvbnN0TWFzayB8IHN0YXRpY01hc2sgfCBoYXNJbml0aWFsaXplck1hc2ssCiAgICAgICAgcGFyZW50LAogICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgY2hhck9mZnNldCk7CiAgICBtZW1iZXJzWyJ2YWx1ZXMiXSA9IHZhbHVlc0J1aWxkZXI7CiAgICBQcm9jZWR1cmVCdWlsZGVyIHRvU3RyaW5nQnVpbGRlciA9IG5ldyBQcm9jZWR1cmVCdWlsZGVyKAogICAgICAgIG51bGwsCiAgICAgICAgMCwKICAgICAgICBzdHJpbmdUeXBlLAogICAgICAgICJ0b1N0cmluZyIsCiAgICAgICAgbnVsbCwKICAgICAgICBudWxsLAogICAgICAgIFByb2NlZHVyZUtpbmQuTWV0aG9kLAogICAgICAgIHBhcmVudCwKICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgY2hhck9mZnNldCwKICAgICAgICBjaGFyRW5kT2Zmc2V0KTsKICAgIG1lbWJlcnNbInRvU3RyaW5nIl0gPSB0b1N0cmluZ0J1aWxkZXI7CiAgICBTdHJpbmcgY2xhc3NOYW1lID0gbmFtZTsKICAgIGlmIChlbnVtQ29uc3RhbnRJbmZvcyAhPSBudWxsKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZW51bUNvbnN0YW50SW5mb3MubGVuZ3RoOyBpKyspIHsKICAgICAgICBFbnVtQ29uc3RhbnRJbmZvIGVudW1Db25zdGFudEluZm8gPSBlbnVtQ29uc3RhbnRJbmZvc1tpXTsKICAgICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEgPSBlbnVtQ29uc3RhbnRJbmZvLm1ldGFkYXRhOwogICAgICAgIFN0cmluZyBuYW1lID0gZW51bUNvbnN0YW50SW5mby5uYW1lOwogICAgICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCA9IGVudW1Db25zdGFudEluZm8uZG9jdW1lbnRhdGlvbkNvbW1lbnQ7CiAgICAgICAgTWVtYmVyQnVpbGRlciBleGlzdGluZyA9IG1lbWJlcnNbbmFtZV07CiAgICAgICAgaWYgKGV4aXN0aW5nICE9IG51bGwpIHsKICAgICAgICAgIC8vIFRoZSBleGlzdGluZyBkZWNsYXJhdGlvbiBpcyBzeW50aGV0aWMgaWYgaXQgaGFzIHRoZSBzYW1lCiAgICAgICAgICAvLyBjaGFyT2Zmc2V0IGFzIHRoZSBlbmNsb3NpbmcgZW51bS4KICAgICAgICAgIGJvb2wgaXNTeW50aGV0aWMgPSBleGlzdGluZy5jaGFyT2Zmc2V0ID09IGNoYXJPZmZzZXQ7CiAgICAgICAgICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0ID0gaXNTeW50aGV0aWMKICAgICAgICAgICAgICA/IDxMb2NhdGVkTWVzc2FnZT5bCiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uU3ludGhldGljQ2F1c2UKICAgICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKG5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5maWxlVXJpLCBjaGFyT2Zmc2V0LCBjbGFzc05hbWUubGVuZ3RoKQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgIDogPExvY2F0ZWRNZXNzYWdlPlsKICAgICAgICAgICAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25DYXVzZQogICAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMobmFtZSkKICAgICAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LmZpbGVVcmksIGV4aXN0aW5nLmNoYXJPZmZzZXQsIG5hbWUubGVuZ3RoKQogICAgICAgICAgICAgICAgXTsKICAgICAgICAgIHBhcmVudC5hZGRQcm9ibGVtKHRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICAgICAgZW51bUNvbnN0YW50SW5mby5jaGFyT2Zmc2V0LCBuYW1lLmxlbmd0aCwgcGFyZW50LmZpbGVVcmksCiAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dCk7CiAgICAgICAgICBlbnVtQ29uc3RhbnRJbmZvc1tpXSA9IG51bGw7CiAgICAgICAgfSBlbHNlIGlmIChuYW1lID09IGNsYXNzTmFtZSkgewogICAgICAgICAgcGFyZW50LmFkZFByb2JsZW0oCiAgICAgICAgICAgICAgdGVtcGxhdGVFbnVtQ29uc3RhbnRTYW1lTmFtZUFzRW5jbG9zaW5nLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICAgICAgZW51bUNvbnN0YW50SW5mby5jaGFyT2Zmc2V0LAogICAgICAgICAgICAgIG5hbWUubGVuZ3RoLAogICAgICAgICAgICAgIHBhcmVudC5maWxlVXJpKTsKICAgICAgICB9CiAgICAgICAgRmllbGRCdWlsZGVyIGZpZWxkQnVpbGRlciA9IG5ldyBGaWVsZEJ1aWxkZXIoCiAgICAgICAgICAgIG1ldGFkYXRhLAogICAgICAgICAgICBzZWxmVHlwZSwKICAgICAgICAgICAgbmFtZSwKICAgICAgICAgICAgY29uc3RNYXNrIHwgc3RhdGljTWFzayB8IGhhc0luaXRpYWxpemVyTWFzaywKICAgICAgICAgICAgcGFyZW50LAogICAgICAgICAgICBlbnVtQ29uc3RhbnRJbmZvLmNoYXJPZmZzZXQsCiAgICAgICAgICAgIGVudW1Db25zdGFudEluZm8uY2hhck9mZnNldCk7CiAgICAgICAgbWV0YWRhdGFDb2xsZWN0b3I/LnNldERvY3VtZW50YXRpb25Db21tZW50KAogICAgICAgICAgICBmaWVsZEJ1aWxkZXIuZmllbGQsIGRvY3VtZW50YXRpb25Db21tZW50KTsKICAgICAgICBtZW1iZXJzW25hbWVdID0gZmllbGRCdWlsZGVyLi5uZXh0ID0gZXhpc3Rpbmc7CiAgICAgIH0KICAgIH0KICAgIGZpbmFsIGludCBzdGFydENoYXJPZmZzZXRDb21wdXRlZCA9CiAgICAgICAgbWV0YWRhdGEgPT0gbnVsbCA/IHN0YXJ0Q2hhck9mZnNldCA6IG1ldGFkYXRhLmZpcnN0LmNoYXJPZmZzZXQ7CiAgICBFbnVtQnVpbGRlciBlbnVtQnVpbGRlciA9IG5ldyBFbnVtQnVpbGRlci5pbnRlcm5hbCgKICAgICAgICBtZXRhZGF0YSwKICAgICAgICBuYW1lLAogICAgICAgIG5ldyBTY29wZSgKICAgICAgICAgICAgbG9jYWw6IG1lbWJlcnMsCiAgICAgICAgICAgIHBhcmVudDogcGFyZW50LnNjb3BlLAogICAgICAgICAgICBkZWJ1Z05hbWU6ICJlbnVtICRuYW1lIiwKICAgICAgICAgICAgaXNNb2RpZmlhYmxlOiBmYWxzZSksCiAgICAgICAgbmV3IFNjb3BlKGxvY2FsOiBjb25zdHJ1Y3RvcnMsIGRlYnVnTmFtZTogbmFtZSwgaXNNb2RpZmlhYmxlOiBmYWxzZSksCiAgICAgICAgY2xzLAogICAgICAgIGVudW1Db25zdGFudEluZm9zLAogICAgICAgIGludFR5cGUsCiAgICAgICAgbGlzdFR5cGUsCiAgICAgICAgb2JqZWN0VHlwZSwKICAgICAgICBzdHJpbmdUeXBlLAogICAgICAgIHBhcmVudCwKICAgICAgICBzdGFydENoYXJPZmZzZXRDb21wdXRlZCwKICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgIGNoYXJFbmRPZmZzZXQpOwogICAgdm9pZCBzZXRQYXJlbnQoU3RyaW5nIG5hbWUsIE1lbWJlckJ1aWxkZXIgYnVpbGRlcikgewogICAgICBkbyB7CiAgICAgICAgYnVpbGRlci5wYXJlbnQgPSBlbnVtQnVpbGRlcjsKICAgICAgICBidWlsZGVyID0gYnVpbGRlci5uZXh0OwogICAgICB9IHdoaWxlIChidWlsZGVyICE9IG51bGwpOwogICAgfQoKICAgIG1lbWJlcnMuZm9yRWFjaChzZXRQYXJlbnQpOwogICAgY29uc3RydWN0b3JzLmZvckVhY2goc2V0UGFyZW50KTsKICAgIHNlbGZUeXBlLmJpbmQoZW51bUJ1aWxkZXIpOwogICAgcmV0dXJuIGVudW1CdWlsZGVyOwogIH0KCiAgVHlwZUJ1aWxkZXIgZ2V0IG1peGVkSW5UeXBlID0+IG51bGw7CgogIEludGVyZmFjZVR5cGUgYnVpbGRUeXBlKExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50cykgewogICAgcmV0dXJuIGNscy5yYXdUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3MgYnVpbGQoU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeUJ1aWxkZXIsIExpYnJhcnlCdWlsZGVyIGNvcmVMaWJyYXJ5KSB7CiAgICBjbHMuaXNFbnVtID0gdHJ1ZTsKICAgIGludFR5cGUucmVzb2x2ZUluKGNvcmVMaWJyYXJ5LnNjb3BlLCBjaGFyT2Zmc2V0LCBmaWxlVXJpLCBsaWJyYXJ5QnVpbGRlcik7CiAgICBzdHJpbmdUeXBlLnJlc29sdmVJbigKICAgICAgICBjb3JlTGlicmFyeS5zY29wZSwgY2hhck9mZnNldCwgZmlsZVVyaSwgbGlicmFyeUJ1aWxkZXIpOwogICAgb2JqZWN0VHlwZS5yZXNvbHZlSW4oCiAgICAgICAgY29yZUxpYnJhcnkuc2NvcGUsIGNoYXJPZmZzZXQsIGZpbGVVcmksIGxpYnJhcnlCdWlsZGVyKTsKICAgIGxpc3RUeXBlLnJlc29sdmVJbihjb3JlTGlicmFyeS5zY29wZSwgY2hhck9mZnNldCwgZmlsZVVyaSwgbGlicmFyeUJ1aWxkZXIpOwoKICAgIEZpZWxkQnVpbGRlciBpbmRleEZpZWxkQnVpbGRlciA9IGZpcnN0TWVtYmVyTmFtZWQoImluZGV4Iik7CiAgICBGaWVsZCBpbmRleEZpZWxkID0gaW5kZXhGaWVsZEJ1aWxkZXIuYnVpbGQobGlicmFyeUJ1aWxkZXIpOwogICAgRmllbGRCdWlsZGVyIG5hbWVGaWVsZEJ1aWxkZXIgPSBmaXJzdE1lbWJlck5hbWVkKCJfbmFtZSIpOwogICAgRmllbGQgbmFtZUZpZWxkID0gbmFtZUZpZWxkQnVpbGRlci5idWlsZChsaWJyYXJ5QnVpbGRlcik7CiAgICBQcm9jZWR1cmVCdWlsZGVyIHRvU3RyaW5nQnVpbGRlciA9IGZpcnN0TWVtYmVyTmFtZWQoInRvU3RyaW5nIik7CiAgICB0b1N0cmluZ0J1aWxkZXIuYm9keSA9IG5ldyBSZXR1cm5TdGF0ZW1lbnQoCiAgICAgICAgbmV3IERpcmVjdFByb3BlcnR5R2V0KG5ldyBUaGlzRXhwcmVzc2lvbigpLCBuYW1lRmllbGQpKTsKICAgIExpc3Q8RXhwcmVzc2lvbj4gdmFsdWVzID0gPEV4cHJlc3Npb24+W107CiAgICBpZiAoZW51bUNvbnN0YW50SW5mb3MgIT0gbnVsbCkgewogICAgICBmb3IgKEVudW1Db25zdGFudEluZm8gZW51bUNvbnN0YW50SW5mbyBpbiBlbnVtQ29uc3RhbnRJbmZvcykgewogICAgICAgIGlmIChlbnVtQ29uc3RhbnRJbmZvICE9IG51bGwpIHsKICAgICAgICAgIEJ1aWxkZXIgZGVjbGFyYXRpb24gPSBmaXJzdE1lbWJlck5hbWVkKGVudW1Db25zdGFudEluZm8ubmFtZSk7CiAgICAgICAgICBpZiAoZGVjbGFyYXRpb24uaXNGaWVsZCkgewogICAgICAgICAgICBGaWVsZEJ1aWxkZXIgZmllbGQgPSBkZWNsYXJhdGlvbjsKICAgICAgICAgICAgdmFsdWVzLmFkZChuZXcgU3RhdGljR2V0KGZpZWxkLmJ1aWxkKGxpYnJhcnlCdWlsZGVyKSkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgRmllbGRCdWlsZGVyIHZhbHVlc0J1aWxkZXIgPSBmaXJzdE1lbWJlck5hbWVkKCJ2YWx1ZXMiKTsKICAgIHZhbHVlc0J1aWxkZXIuYnVpbGQobGlicmFyeUJ1aWxkZXIpOwogICAgdmFsdWVzQnVpbGRlci5pbml0aWFsaXplciA9CiAgICAgICAgbmV3IExpc3RMaXRlcmFsKHZhbHVlcywgdHlwZUFyZ3VtZW50OiBjbHMucmF3VHlwZSwgaXNDb25zdDogdHJ1ZSk7CiAgICBDb25zdHJ1Y3RvckJ1aWxkZXIgY29uc3RydWN0b3JCdWlsZGVyID0gY29uc3RydWN0b3JTY29wZUJ1aWxkZXJbIiJdOwogICAgQ29uc3RydWN0b3IgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvckJ1aWxkZXIuYnVpbGQobGlicmFyeUJ1aWxkZXIpOwogICAgY29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzLmluc2VydCgKICAgICAgICAwLAogICAgICAgIG5ldyBGaWVsZEluaXRpYWxpemVyKGluZGV4RmllbGQsCiAgICAgICAgICAgIG5ldyBWYXJpYWJsZUdldChjb25zdHJ1Y3Rvci5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVyc1swXSkpCiAgICAgICAgICAuLnBhcmVudCA9IGNvbnN0cnVjdG9yKTsKICAgIGNvbnN0cnVjdG9yLmluaXRpYWxpemVycy5pbnNlcnQoCiAgICAgICAgMSwKICAgICAgICBuZXcgRmllbGRJbml0aWFsaXplcihuYW1lRmllbGQsCiAgICAgICAgICAgIG5ldyBWYXJpYWJsZUdldChjb25zdHJ1Y3Rvci5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVyc1sxXSkpCiAgICAgICAgICAuLnBhcmVudCA9IGNvbnN0cnVjdG9yKTsKICAgIENsYXNzQnVpbGRlciBvYmplY3RDbGFzcyA9IG9iamVjdFR5cGUuZGVjbGFyYXRpb247CiAgICBNZW1iZXJCdWlsZGVyIHN1cGVyQ29uc3RydWN0b3IgPSBvYmplY3RDbGFzcy5maW5kQ29uc3RydWN0b3JPckZhY3RvcnkoCiAgICAgICAgIiIsIGNoYXJPZmZzZXQsIGZpbGVVcmksIGxpYnJhcnlCdWlsZGVyKTsKICAgIGlmIChzdXBlckNvbnN0cnVjdG9yID09IG51bGwgfHwgIXN1cGVyQ29uc3RydWN0b3IuaXNDb25zdHJ1Y3RvcikgewogICAgICAvLyBUT0RPKGFoZSk6IElkZWFsbHksIHdlIHdvdWxkIGFsc28gd2FudCB0byBjaGVjayB0aGF0IFtPYmplY3RdJ3MKICAgICAgLy8gdW5uYW1lZCBjb25zdHJ1Y3RvciByZXF1aXJlcyBubyBhcmd1bWVudHMuIEJ1dCB0aGF0IGluZm9ybWF0aW9uIGlzbid0CiAgICAgIC8vIGFsd2F5cyBhdmFpbGFibGUgYXQgdGhpcyBwb2ludCwgYW5kIGl0J3Mgbm90IHJlYWxseSBhIHNpdHVhdGlvbiB0aGF0CiAgICAgIC8vIGNhbiBoYXBwZW4gdW5sZXNzIHlvdSBzdGFydCBtb2RpZnlpbmcgdGhlIFNESyBzb3VyY2VzLgogICAgICBsaWJyYXJ5LmFkZFByb2JsZW0obWVzc2FnZU5vVW5uYW1lZENvbnN0cnVjdG9ySW5PYmplY3QsCiAgICAgICAgICBvYmplY3RDbGFzcy5jaGFyT2Zmc2V0LCBvYmplY3RDbGFzcy5uYW1lLmxlbmd0aCwgb2JqZWN0Q2xhc3MuZmlsZVVyaSk7CiAgICB9IGVsc2UgewogICAgICBjb25zdHJ1Y3Rvci5pbml0aWFsaXplcnMuYWRkKAogICAgICAgICAgbmV3IFN1cGVySW5pdGlhbGl6ZXIoc3VwZXJDb25zdHJ1Y3Rvci5tZW1iZXIsIG5ldyBBcmd1bWVudHMuZW1wdHkoKSkKICAgICAgICAgICAgLi5wYXJlbnQgPSBjb25zdHJ1Y3Rvcik7CiAgICB9CiAgICBpbnQgaW5kZXggPSAwOwogICAgaWYgKGVudW1Db25zdGFudEluZm9zICE9IG51bGwpIHsKICAgICAgZm9yIChFbnVtQ29uc3RhbnRJbmZvIGVudW1Db25zdGFudEluZm8gaW4gZW51bUNvbnN0YW50SW5mb3MpIHsKICAgICAgICBpZiAoZW51bUNvbnN0YW50SW5mbyAhPSBudWxsKSB7CiAgICAgICAgICBTdHJpbmcgY29uc3RhbnQgPSBlbnVtQ29uc3RhbnRJbmZvLm5hbWU7CiAgICAgICAgICBCdWlsZGVyIGRlY2xhcmF0aW9uID0gZmlyc3RNZW1iZXJOYW1lZChjb25zdGFudCk7CiAgICAgICAgICBGaWVsZEJ1aWxkZXIgZmllbGQ7CiAgICAgICAgICBpZiAoZGVjbGFyYXRpb24uaXNGaWVsZCkgewogICAgICAgICAgICBmaWVsZCA9IGRlY2xhcmF0aW9uOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBBcmd1bWVudHMgYXJndW1lbnRzID0gbmV3IEFyZ3VtZW50cyg8RXhwcmVzc2lvbj5bCiAgICAgICAgICAgIG5ldyBJbnRMaXRlcmFsKGluZGV4KyspLAogICAgICAgICAgICBuZXcgU3RyaW5nTGl0ZXJhbCgiJG5hbWUuJGNvbnN0YW50IikKICAgICAgICAgIF0pOwogICAgICAgICAgZmllbGQuaW5pdGlhbGl6ZXIgPQogICAgICAgICAgICAgIG5ldyBDb25zdHJ1Y3Rvckludm9jYXRpb24oY29uc3RydWN0b3IsIGFyZ3VtZW50cywgaXNDb25zdDogdHJ1ZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3VwZXIuYnVpbGQobGlicmFyeUJ1aWxkZXIsIGNvcmVMaWJyYXJ5KTsKICB9CgogIEBvdmVycmlkZQogIEJ1aWxkZXIgZmluZENvbnN0cnVjdG9yT3JGYWN0b3J5KAogICAgICBTdHJpbmcgbmFtZSwgaW50IGNoYXJPZmZzZXQsIFVyaSB1cmksIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgIHJldHVybiBudWxsOwogIH0KfQoKY2xhc3MgRW51bUNvbnN0YW50SW5mbyB7CiAgZmluYWwgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhOwogIGZpbmFsIFN0cmluZyBuYW1lOwogIGZpbmFsIGludCBjaGFyT2Zmc2V0OwogIGZpbmFsIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudDsKICBjb25zdCBFbnVtQ29uc3RhbnRJbmZvKAogICAgICB0aGlzLm1ldGFkYXRhLCB0aGlzLm5hbWUsIHRoaXMuY2hhck9mZnNldCwgdGhpcy5kb2N1bWVudGF0aW9uQ29tbWVudCk7Cn0KgW0ATk48ARwBOgEhCRMPFR8bFA8aFBcVFxkTFxoYFQEdCRgtJyw1MQEaCRMTHCAUAUYBJwkRIBYcFhoaFRgXGQ8BLAFKAS8yASIBJQElASMBGCYTExoRHhQVFxcdGxYZTkYXARcrJhMwIxsWG0dJID1DSCdESUIbPwEbGx4rNA48RCYKAUBJQ0lEDhMODA4iTCxPKwsQFBQUGCszDhISNRAUFSc9DgsUFA4OHhAUFBQYKx0lO0JELU0wIEYvQDUiPislSBIiNSslTBNPSCEnKB1LKxsfCjYWFhI5FCkqNDc3CAYoSDgSDhMcIiUiTg0bERIUFBAhFBg5CyYgIQYBICUgGAQBJwFRGAQBDFEXTxpBGkFQAUBAPz5FMEEuJUUoSSUuRAwKCAY9KSBLSUglCylLIyULKEsjN0syR0lPTkA+UQ0kTyUGEyVFKDM8HiUhExYMPCUxDh5QCggGNQQBDCRGEQQCARkoFRglGk0CATVwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9lbnVtX2J1aWxkZXIuZGFydD9zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci9maWVsZF9idWlsZGVyLmRhcnSiYC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmZpZWxkX2J1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IERhcnRUeXBlLCBFeHByZXNzaW9uOwoKaW1wb3J0ICdidWlsZGVyLmRhcnQnIHNob3cgTGlicmFyeUJ1aWxkZXIsIE1lbWJlckJ1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIENsYXNzLAogICAgICAgIERhcnRUeXBlLAogICAgICAgIEV4cHJlc3Npb24sCiAgICAgICAgRmllbGQsCiAgICAgICAgSW52YWxpZFR5cGUsCiAgICAgICAgTWVtYmVyLAogICAgICAgIE5hbWUsCiAgICAgICAgTnVsbExpdGVyYWw7CgppbXBvcnQgJy4uL2NvbnN0YW50X2NvbnRleHQuZGFydCcgc2hvdyBDb25zdGFudENvbnRleHQ7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93CiAgICAgICAgbWVzc2FnZUludGVybmFsUHJvYmxlbUFscmVhZHlJbml0aWFsaXplZCwKICAgICAgICB0ZW1wbGF0ZUNhbnRJbmZlclR5cGVEdWVUb0NpcmN1bGFyaXR5OwoKaW1wb3J0ICcuLi9rZXJuZWwvYm9keV9idWlsZGVyLmRhcnQnIHNob3cgQm9keUJ1aWxkZXI7CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIENsYXNzQnVpbGRlciwKICAgICAgICBCdWlsZGVyLAogICAgICAgIEltcGxpY2l0RmllbGRUeXBlLAogICAgICAgIFR5cGVCdWlsZGVyLAogICAgICAgIExpYnJhcnlCdWlsZGVyLAogICAgICAgIE1ldGFkYXRhQnVpbGRlcjsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyBpbnRlcm5hbFByb2JsZW07CgppbXBvcnQgJy4uL3NjYW5uZXIuZGFydCcgc2hvdyBUb2tlbjsKCmltcG9ydCAnLi4vc2NvcGUuZGFydCcgc2hvdyBTY29wZTsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9sb2FkZXIuZGFydCcgc2hvdyBTb3VyY2VMb2FkZXI7CgppbXBvcnQgJy4uL3R5cGVfaW5mZXJlbmNlL3R5cGVfaW5mZXJlbmNlX2VuZ2luZS5kYXJ0JwogICAgc2hvdyBJbmNsdWRlc1R5cGVQYXJhbWV0ZXJzTm9uQ292YXJpYW50bHksIFZhcmlhbmNlOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX2luZmVycmVyLmRhcnQnCiAgICBzaG93IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQsIFR5cGVJbmZlcnJlckltcGw7CgppbXBvcnQgJy4uL3R5cGVfaW5mZXJlbmNlL3R5cGVfc2NoZW1hLmRhcnQnIHNob3cgVW5rbm93blR5cGU7CgppbXBvcnQgJ2V4dGVuc2lvbl9idWlsZGVyLmRhcnQnOwoKY2xhc3MgRmllbGRCdWlsZGVyIGV4dGVuZHMgTWVtYmVyQnVpbGRlciB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIGZpbmFsIGludCBtb2RpZmllcnM7CgogIGZpbmFsIEZpZWxkIGZpZWxkOwogIGZpbmFsIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YTsKICBmaW5hbCBUeXBlQnVpbGRlciB0eXBlOwogIFRva2VuIGNvbnN0SW5pdGlhbGl6ZXJUb2tlbjsKCiAgYm9vbCBoYWRUeXBlc0luZmVycmVkID0gZmFsc2U7CgogIEZpZWxkQnVpbGRlcih0aGlzLm1ldGFkYXRhLCB0aGlzLnR5cGUsIHRoaXMubmFtZSwgdGhpcy5tb2RpZmllcnMsCiAgICAgIEJ1aWxkZXIgY29tcGlsYXRpb25Vbml0LCBpbnQgY2hhck9mZnNldCwgaW50IGNoYXJFbmRPZmZzZXQpCiAgICAgIDogZmllbGQgPSBuZXcgRmllbGQobnVsbCwgZmlsZVVyaTogY29tcGlsYXRpb25Vbml0Py5maWxlVXJpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldAogICAgICAgICAgLi5maWxlRW5kT2Zmc2V0ID0gY2hhckVuZE9mZnNldCwKICAgICAgICBzdXBlcihjb21waWxhdGlvblVuaXQsIGNoYXJPZmZzZXQpOwoKICBNZW1iZXIgZ2V0IG1lbWJlciA9PiBmaWVsZDsKCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWUgPT4gIkZpZWxkQnVpbGRlciI7CgogIGJvb2wgZ2V0IGlzRmllbGQgPT4gdHJ1ZTsKCiAgdm9pZCBzZXQgaW5pdGlhbGl6ZXIoRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgaWYgKCFoYXNJbml0aWFsaXplciAmJiB2YWx1ZSBpcyEgTnVsbExpdGVyYWwgJiYgIWlzQ29uc3QgJiYgIWlzRmluYWwpIHsKICAgICAgaW50ZXJuYWxQcm9ibGVtKAogICAgICAgICAgbWVzc2FnZUludGVybmFsUHJvYmxlbUFscmVhZHlJbml0aWFsaXplZCwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICB9CiAgICBmaWVsZC5pbml0aWFsaXplciA9IHZhbHVlLi5wYXJlbnQgPSBmaWVsZDsKICB9CgogIGJvb2wgZ2V0IGlzRWxpZ2libGVGb3JJbmZlcmVuY2UgewogICAgcmV0dXJuICFsaWJyYXJ5LmxlZ2FjeU1vZGUgJiYKICAgICAgICB0eXBlID09IG51bGwgJiYKICAgICAgICAoaGFzSW5pdGlhbGl6ZXIgfHwgaXNDbGFzc0luc3RhbmNlTWVtYmVyKTsKICB9CgogIEZpZWxkIGJ1aWxkKFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnlCdWlsZGVyKSB7CiAgICBmaWVsZAogICAgICAuLmlzQ292YXJpYW50ID0gaXNDb3ZhcmlhbnQKICAgICAgLi5pc0ZpbmFsID0gaXNGaW5hbAogICAgICAuLmlzQ29uc3QgPSBpc0NvbnN0CiAgICAgIC4uaXNMYXRlID0gaXNMYXRlOwogICAgaWYgKGlzRXh0ZW5zaW9uTWVtYmVyKSB7CiAgICAgIEV4dGVuc2lvbkJ1aWxkZXIgZXh0ZW5zaW9uID0gcGFyZW50OwogICAgICBmaWVsZC5uYW1lID0gbmV3IE5hbWUoJyR7ZXh0ZW5zaW9uLm5hbWV9fCRuYW1lJywgbGlicmFyeUJ1aWxkZXIubGlicmFyeSk7CiAgICAgIGZpZWxkCiAgICAgICAgLi5oYXNJbXBsaWNpdEdldHRlciA9IGZhbHNlCiAgICAgICAgLi5oYXNJbXBsaWNpdFNldHRlciA9IGZhbHNlCiAgICAgICAgLi5pc1N0YXRpYyA9IHRydWUKICAgICAgICAuLmlzRXh0ZW5zaW9uTWVtYmVyID0gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEhvdyBjYW4gdGhlIG5hbWUgYWxyZWFkeSBoYXZlIGJlZW4gY29tcHV0ZWQuCiAgICAgIGZpZWxkLm5hbWUgPz89IG5ldyBOYW1lKG5hbWUsIGxpYnJhcnlCdWlsZGVyLmxpYnJhcnkpOwogICAgICBib29sIGlzSW5zdGFuY2VNZW1iZXIgPSAhaXNTdGF0aWMgJiYgIWlzVG9wTGV2ZWw7CiAgICAgIGZpZWxkCiAgICAgICAgLi5oYXNJbXBsaWNpdEdldHRlciA9IGlzSW5zdGFuY2VNZW1iZXIKICAgICAgICAuLmhhc0ltcGxpY2l0U2V0dGVyID0gaXNJbnN0YW5jZU1lbWJlciAmJiAhaXNDb25zdCAmJiAhaXNGaW5hbAogICAgICAgIC4uaXNTdGF0aWMgPSAhaXNJbnN0YW5jZU1lbWJlcgogICAgICAgIC4uaXNFeHRlbnNpb25NZW1iZXIgPSBmYWxzZTsKICAgIH0KICAgIGlmICh0eXBlICE9IG51bGwpIHsKICAgICAgZmllbGQudHlwZSA9IHR5cGUuYnVpbGQobGlicmFyeUJ1aWxkZXIpOwoKICAgICAgaWYgKCFpc0ZpbmFsICYmICFpc0NvbnN0KSB7CiAgICAgICAgSW5jbHVkZXNUeXBlUGFyYW1ldGVyc05vbkNvdmFyaWFudGx5IG5lZWRzQ2hlY2tWaXNpdG9yOwogICAgICAgIGlmIChwYXJlbnQgaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgICAgICBDbGFzc0J1aWxkZXIgZW5jbG9zaW5nQ2xhc3NCdWlsZGVyID0gcGFyZW50OwogICAgICAgICAgQ2xhc3MgZW5jbG9zaW5nQ2xhc3MgPSBlbmNsb3NpbmdDbGFzc0J1aWxkZXIuY2xzOwogICAgICAgICAgaWYgKGVuY2xvc2luZ0NsYXNzLnR5cGVQYXJhbWV0ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgICAgICAgbmVlZHNDaGVja1Zpc2l0b3IgPSBuZXcgSW5jbHVkZXNUeXBlUGFyYW1ldGVyc05vbkNvdmFyaWFudGx5KAogICAgICAgICAgICAgICAgZW5jbG9zaW5nQ2xhc3MudHlwZVBhcmFtZXRlcnMsCiAgICAgICAgICAgICAgICAvLyBXZSBhcmUgY2hlY2tpbmcgdGhlIGZpZWxkIHR5cGUgYXMgaWYgaXQgaXMgdGhlIHR5cGUgb2YgdGhlCiAgICAgICAgICAgICAgICAvLyBwYXJhbWV0ZXIgb2YgdGhlIGltcGxpY2l0IHNldHRlciBhbmQgdGhpcyBpcyBhIGNvbnRyYXZhcmlhbnQKICAgICAgICAgICAgICAgIC8vIHBvc2l0aW9uLgogICAgICAgICAgICAgICAgaW5pdGlhbFZhcmlhbmNlOiBWYXJpYW5jZS5jb250cmF2YXJpYW50KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKG5lZWRzQ2hlY2tWaXNpdG9yICE9IG51bGwpIHsKICAgICAgICAgIGlmIChmaWVsZC50eXBlLmFjY2VwdChuZWVkc0NoZWNrVmlzaXRvcikpIHsKICAgICAgICAgICAgZmllbGQuaXNHZW5lcmljQ292YXJpYW50SW1wbCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmllbGQ7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJ1aWxkT3V0bGluZUV4cHJlc3Npb25zKExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgIENsYXNzQnVpbGRlciBjbGFzc0J1aWxkZXIgPSBpc0NsYXNzTWVtYmVyID8gcGFyZW50IDogbnVsbDsKICAgIE1ldGFkYXRhQnVpbGRlci5idWlsZEFubm90YXRpb25zKAogICAgICAgIGZpZWxkLCBtZXRhZGF0YSwgbGlicmFyeSwgY2xhc3NCdWlsZGVyLCB0aGlzKTsKCiAgICAvLyBGb3IgbW9kdWxhciBjb21waWxhdGlvbiB3ZSBuZWVkIHRvIGluY2x1ZGUgaW5pdGlhbGl6ZXJzIG9mIGFsbCBjb25zdAogICAgLy8gZmllbGRzIGFuZCBhbGwgbm9uLXN0YXRpYyBmaW5hbCBmaWVsZHMgaW4gY2xhc3NlcyB3aXRoIGNvbnN0IGNvbnN0cnVjdG9ycwogICAgLy8gaW50byB0aGUgb3V0bGluZS4KICAgIGlmICgoaXNDb25zdCB8fAogICAgICAgICAgICAoaXNGaW5hbCAmJgogICAgICAgICAgICAgICAgIWlzU3RhdGljICYmCiAgICAgICAgICAgICAgICBpc0NsYXNzTWVtYmVyICYmCiAgICAgICAgICAgICAgICBjbGFzc0J1aWxkZXIuaGFzQ29uc3RDb25zdHJ1Y3RvcikpICYmCiAgICAgICAgY29uc3RJbml0aWFsaXplclRva2VuICE9IG51bGwpIHsKICAgICAgU2NvcGUgc2NvcGUgPSBjbGFzc0J1aWxkZXI/LnNjb3BlID8/IGxpYnJhcnkuc2NvcGU7CiAgICAgIEJvZHlCdWlsZGVyIGJvZHlCdWlsZGVyID0gbGlicmFyeS5sb2FkZXIKICAgICAgICAgIC5jcmVhdGVCb2R5QnVpbGRlckZvck91dGxpbmVFeHByZXNzaW9uKAogICAgICAgICAgICAgIGxpYnJhcnksIGNsYXNzQnVpbGRlciwgdGhpcywgc2NvcGUsIGZpbGVVcmkpOwogICAgICBib2R5QnVpbGRlci5jb25zdGFudENvbnRleHQgPQogICAgICAgICAgaXNDb25zdCA/IENvbnN0YW50Q29udGV4dC5pbmZlcnJlZCA6IENvbnN0YW50Q29udGV4dC5ub25lOwogICAgICBpbml0aWFsaXplciA9IGJvZHlCdWlsZGVyLnBhcnNlRmllbGRJbml0aWFsaXplcihjb25zdEluaXRpYWxpemVyVG9rZW4pCiAgICAgICAgLi5wYXJlbnQgPSBmaWVsZDsKICAgICAgYm9keUJ1aWxkZXIudHlwZUluZmVycmVyCiAgICAgICAgICA/LmluZmVyRmllbGRJbml0aWFsaXplcihib2R5QnVpbGRlciwgZmllbGQudHlwZSwgZmllbGQuaW5pdGlhbGl6ZXIpOwogICAgICBpZiAobGlicmFyeS5sb2FkZXIgaXMgU291cmNlTG9hZGVyKSB7CiAgICAgICAgU291cmNlTG9hZGVyIGxvYWRlciA9IGxpYnJhcnkubG9hZGVyOwogICAgICAgIGxvYWRlci50cmFuc2Zvcm1Qb3N0SW5mZXJlbmNlKGZpZWxkLCBib2R5QnVpbGRlci50cmFuc2Zvcm1TZXRMaXRlcmFscywKICAgICAgICAgICAgYm9keUJ1aWxkZXIudHJhbnNmb3JtQ29sbGVjdGlvbnMpOwogICAgICB9CiAgICAgIGJvZHlCdWlsZGVyLnJlc29sdmVSZWRpcmVjdGluZ0ZhY3RvcnlUYXJnZXRzKCk7CiAgICB9CiAgICBjb25zdEluaXRpYWxpemVyVG9rZW4gPSBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBpbmZlclR5cGUoKSB7CiAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5ID0gdGhpcy5saWJyYXJ5OwogICAgaWYgKGZpZWxkLnR5cGUgaXMhIEltcGxpY2l0RmllbGRUeXBlKSB7CiAgICAgIC8vIFdlIGhhdmUgYWxyZWFkeSBpbmZlcnJlZCBhIHR5cGUuCiAgICAgIHJldHVybjsKICAgIH0KICAgIEltcGxpY2l0RmllbGRUeXBlIHR5cGUgPSBmaWVsZC50eXBlOwogICAgaWYgKHR5cGUubWVtYmVyICE9IHRoaXMpIHsKICAgICAgLy8gVGhlIGltcGxpY2l0IHR5cGUgd2FzIGluaGVyaXRlZC4KICAgICAgRmllbGRCdWlsZGVyIG90aGVyID0gdHlwZS5tZW1iZXI7CiAgICAgIG90aGVyLmluZmVyQ29waWVkVHlwZShmaWVsZCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICh0eXBlLmlzU3RhcnRlZCkgewogICAgICBsaWJyYXJ5LmFkZFByb2JsZW0oCiAgICAgICAgICB0ZW1wbGF0ZUNhbnRJbmZlclR5cGVEdWVUb0NpcmN1bGFyaXR5LndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgICAgbmFtZS5sZW5ndGgsCiAgICAgICAgICBmaWxlVXJpKTsKICAgICAgZmllbGQudHlwZSA9IGNvbnN0IEludmFsaWRUeXBlKCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHR5cGUuaXNTdGFydGVkID0gdHJ1ZTsKICAgIFR5cGVJbmZlcnJlckltcGwgdHlwZUluZmVycmVyID0gbGlicmFyeS5sb2FkZXIudHlwZUluZmVyZW5jZUVuZ2luZQogICAgICAgIC5jcmVhdGVUb3BMZXZlbFR5cGVJbmZlcnJlcigKICAgICAgICAgICAgZmlsZVVyaSwgZmllbGQuZW5jbG9zaW5nQ2xhc3M/LnRoaXNUeXBlLCBsaWJyYXJ5KTsKICAgIEJvZHlCdWlsZGVyIGJvZHlCdWlsZGVyID0KICAgICAgICBsaWJyYXJ5LmxvYWRlci5jcmVhdGVCb2R5QnVpbGRlckZvckZpZWxkKHRoaXMsIHR5cGVJbmZlcnJlcik7CiAgICBib2R5QnVpbGRlci5jb25zdGFudENvbnRleHQgPQogICAgICAgIGlzQ29uc3QgPyBDb25zdGFudENvbnRleHQuaW5mZXJyZWQgOiBDb25zdGFudENvbnRleHQubm9uZTsKICAgIGluaXRpYWxpemVyID0gYm9keUJ1aWxkZXIucGFyc2VGaWVsZEluaXRpYWxpemVyKHR5cGUuaW5pdGlhbGl6ZXJUb2tlbik7CiAgICB0eXBlLmluaXRpYWxpemVyVG9rZW4gPSBudWxsOwoKICAgIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgcmVzdWx0ID0gdHlwZUluZmVycmVyLmluZmVyRXhwcmVzc2lvbigKICAgICAgICBmaWVsZC5pbml0aWFsaXplciwgY29uc3QgVW5rbm93blR5cGUoKSwgdHJ1ZSwKICAgICAgICBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgIERhcnRUeXBlIGluZmVycmVkVHlwZSA9CiAgICAgICAgdHlwZUluZmVycmVyLmluZmVyRGVjbGFyYXRpb25UeXBlKHJlc3VsdC5pbmZlcnJlZFR5cGUpOwoKICAgIGlmIChmaWVsZC50eXBlIGlzIEltcGxpY2l0RmllbGRUeXBlKSB7CiAgICAgIC8vIGBmaWVsZC50eXBlYCBtYXkgaGF2ZSBjaGFuZ2VkIGlmIGEgY2lyY3VsYXJpdHkgd2FzIGRldGVjdGVkIHdoZW4KICAgICAgLy8gW2luZmVycmVkVHlwZV0gd2FzIGNvbXB1dGVkLgogICAgICBmaWVsZC50eXBlID0gaW5mZXJyZWRUeXBlOwoKICAgICAgSW5jbHVkZXNUeXBlUGFyYW1ldGVyc05vbkNvdmFyaWFudGx5IG5lZWRzQ2hlY2tWaXNpdG9yOwogICAgICBpZiAocGFyZW50IGlzIENsYXNzQnVpbGRlcikgewogICAgICAgIENsYXNzQnVpbGRlciBlbmNsb3NpbmdDbGFzc0J1aWxkZXIgPSBwYXJlbnQ7CiAgICAgICAgQ2xhc3MgZW5jbG9zaW5nQ2xhc3MgPSBlbmNsb3NpbmdDbGFzc0J1aWxkZXIuY2xzOwogICAgICAgIGlmIChlbmNsb3NpbmdDbGFzcy50eXBlUGFyYW1ldGVycy5pc05vdEVtcHR5KSB7CiAgICAgICAgICBuZWVkc0NoZWNrVmlzaXRvciA9IG5ldyBJbmNsdWRlc1R5cGVQYXJhbWV0ZXJzTm9uQ292YXJpYW50bHkoCiAgICAgICAgICAgICAgZW5jbG9zaW5nQ2xhc3MudHlwZVBhcmFtZXRlcnMsCiAgICAgICAgICAgICAgLy8gV2UgYXJlIGNoZWNraW5nIHRoZSBmaWVsZCB0eXBlIGFzIGlmIGl0IGlzIHRoZSB0eXBlIG9mIHRoZQogICAgICAgICAgICAgIC8vIHBhcmFtZXRlciBvZiB0aGUgaW1wbGljaXQgc2V0dGVyIGFuZCB0aGlzIGlzIGEgY29udHJhdmFyaWFudAogICAgICAgICAgICAgIC8vIHBvc2l0aW9uLgogICAgICAgICAgICAgIGluaXRpYWxWYXJpYW5jZTogVmFyaWFuY2UuY29udHJhdmFyaWFudCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChuZWVkc0NoZWNrVmlzaXRvciAhPSBudWxsKSB7CiAgICAgICAgaWYgKGZpZWxkLnR5cGUuYWNjZXB0KG5lZWRzQ2hlY2tWaXNpdG9yKSkgewogICAgICAgICAgZmllbGQuaXNHZW5lcmljQ292YXJpYW50SW1wbCA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgLy8gVGhlIGZvbGxvd2luZyBpcyBhIGhhY2suIFRoZSBvdXRsaW5lIHNob3VsZCBjb250YWluIHRoZSBjb21waWxlZAogICAgLy8gaW5pdGlhbGl6ZXJzLCBob3dldmVyLCBhcyB0b3AtbGV2ZWwgaW5mZXJlbmNlIGlzIHN1YnRseSBkaWZmZXJlbnQgZnJvbQogICAgLy8gd2UgbmVlZCB0byBjb21waWxlIHRoZSBmaWVsZCBpbml0aWFsaXplciBhZ2FpbiB3aGVuIGV2ZXJ5dGhpbmcgZWxzZSBpcwogICAgLy8gY29tcGlsZWQuCiAgICBmaWVsZC5pbml0aWFsaXplciA9IG51bGw7CiAgfQoKICB2b2lkIGluZmVyQ29waWVkVHlwZShGaWVsZCBvdGhlcikgewogICAgaW5mZXJUeXBlKCk7CiAgICBvdGhlci50eXBlID0gZmllbGQudHlwZTsKICAgIG90aGVyLmluaXRpYWxpemVyID0gbnVsbDsKICB9CgogIERhcnRUeXBlIGdldCBidWlsdFR5cGUgPT4gZmllbGQudHlwZTsKfQqBCgBOTjwBHQE8AToBIQkPEhQPFRAOFQE4AR0JMi8BNwEnCRYRGxUYGQEwASUBIwFKATkBNjkBLjYBPgEhASsVARcBFSgaHwEhAURCQyQrLAEeASoBHAErTBdKBi8EASQiGDMEATUKIhoaGR0rUAwkJBokDUs9OAwvRyclBhgvASJAJjc8OkovTlAdOgwKKTYxDAoIBhIEAQw5PyY3AUxRGRQYHSE2KTovMjwkRU0aH08sLk8vCDYGIgQBDBUxLCoOBikfKigkDgYaGkUWFxQoDgYbRyU/HkYiQ0wiAUU2HhxAAStKJiEBPiQ1OjhILUxOGzgKCCc0LwoIBgFITk4RHgQBJhEdHgQBKAIBNnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2ZpZWxkX2J1aWxkZXIuZGFydEpzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci9mb3JtYWxfcGFyYW1ldGVyX2J1aWxkZXIuZGFydJhSLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuZm9ybWFsX3BhcmFtZXRlcl9idWlsZGVyOwoKaW1wb3J0ICcuLi9wYXJzZXIuZGFydCcgc2hvdyBGb3JtYWxQYXJhbWV0ZXJLaW5kOwoKaW1wb3J0ICcuLi9wYXJzZXIvZm9ybWFsX3BhcmFtZXRlcl9raW5kLmRhcnQnCiAgICBzaG93CiAgICAgICAgaXNNYW5kYXRvcnlGb3JtYWxQYXJhbWV0ZXJLaW5kLAogICAgICAgIGlzT3B0aW9uYWxOYW1lZEZvcm1hbFBhcmFtZXRlcktpbmQsCiAgICAgICAgaXNPcHRpb25hbFBvc2l0aW9uYWxGb3JtYWxQYXJhbWV0ZXJLaW5kOwoKaW1wb3J0ICdidWlsZGVyLmRhcnQnCiAgICBzaG93IExpYnJhcnlCdWlsZGVyLCBNZXRhZGF0YUJ1aWxkZXIsIE1vZGlmaWVyQnVpbGRlciwgVHlwZUJ1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IFZhcmlhYmxlRGVjbGFyYXRpb247CgppbXBvcnQgJy4uL2NvbnN0YW50X2NvbnRleHQuZGFydCcgc2hvdyBDb25zdGFudENvbnRleHQ7CgppbXBvcnQgJy4uL21vZGlmaWVyLmRhcnQnIHNob3cgZmluYWxNYXNrLCBpbml0aWFsaXppbmdGb3JtYWxNYXNrLCByZXF1aXJlZE1hc2s7CgppbXBvcnQgJy4uL3NjYW5uZXIuZGFydCcgc2hvdyBUb2tlbjsKCmltcG9ydCAnLi4vc2NvcGUuZGFydCcgc2hvdyBTY29wZTsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9sb2FkZXIuZGFydCcgc2hvdyBTb3VyY2VMb2FkZXI7CgppbXBvcnQgJy4uL2tlcm5lbC9ib2R5X2J1aWxkZXIuZGFydCcgc2hvdyBCb2R5QnVpbGRlcjsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgQ2xhc3NCdWlsZGVyLAogICAgICAgIEJ1aWxkZXIsCiAgICAgICAgQ29uc3RydWN0b3JCdWlsZGVyLAogICAgICAgIEZpZWxkQnVpbGRlciwKICAgICAgICBMaWJyYXJ5QnVpbGRlciwKICAgICAgICBNZXRhZGF0YUJ1aWxkZXIsCiAgICAgICAgVHlwZUJ1aWxkZXI7CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfc2hhZG93X2FzdC5kYXJ0JyBzaG93IFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudDsKCi8vLyBBIGJ1aWxkZXIgZm9yIGEgZm9ybWFsIHBhcmFtZXRlciwgaS5lLiBhIHBhcmFtZXRlciBvbiBhIG1ldGhvZCBvcgovLy8gY29uc3RydWN0b3IuCmNsYXNzIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZXh0ZW5kcyBNb2RpZmllckJ1aWxkZXIgewogIC8vLyBMaXN0IG9mIG1ldGFkYXRhIGJ1aWxkZXJzIGZvciB0aGUgbWV0YWRhdGEgZGVjbGFyZWQgb24gdGhpcyBwYXJhbWV0ZXIuCiAgZmluYWwgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhOwoKICBmaW5hbCBpbnQgbW9kaWZpZXJzOwoKICBmaW5hbCBUeXBlQnVpbGRlciB0eXBlOwoKICBmaW5hbCBTdHJpbmcgbmFtZTsKCiAgLy8vIFRoZSBraW5kIG9mIHRoaXMgcGFyYW1ldGVyLCBpLmUuIGlmIGl0J3MgcmVxdWlyZWQsIHBvc2l0aW9uYWwgb3B0aW9uYWwsCiAgLy8vIG9yIG5hbWVkIG9wdGlvbmFsLgogIEZvcm1hbFBhcmFtZXRlcktpbmQga2luZCA9IEZvcm1hbFBhcmFtZXRlcktpbmQubWFuZGF0b3J5OwoKICAvLy8gVGhlIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGNyZWF0ZWQgZm9yIHRoaXMgZm9ybWFsIHBhcmFtZXRlci4KICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlOwoKICAvLy8gVGhlIGZpcnN0IHRva2VuIG9mIHRoZSBkZWZhdWx0IHZhbHVlLCBpZiBhbnkuCiAgLy8vCiAgLy8vIFRoaXMgaXMgc3RvcmVkIHVudGlsIG91dGxpbmVzIGhhdmUgYmVlbiBidWlsdCB0aHJvdWdoCiAgLy8vIFtidWlsZE91dGxpbmVFeHByZXNzaW9uc10uCiAgVG9rZW4gaW5pdGlhbGl6ZXJUb2tlbjsKCiAgRm9ybWFsUGFyYW1ldGVyQnVpbGRlcih0aGlzLm1ldGFkYXRhLCB0aGlzLm1vZGlmaWVycywgdGhpcy50eXBlLCB0aGlzLm5hbWUsCiAgICAgIExpYnJhcnlCdWlsZGVyIGNvbXBpbGF0aW9uVW5pdCwgaW50IGNoYXJPZmZzZXQpCiAgICAgIDogc3VwZXIoY29tcGlsYXRpb25Vbml0LCBjaGFyT2Zmc2V0KTsKCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWUgPT4gIkZvcm1hbFBhcmFtZXRlckJ1aWxkZXIiOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDbGVhbnVwIGBpc1JlcXVpcmVkYCBzZW1hbnRpY3MgaW4gZmFjZSBvZiByZXF1aXJlZAogIC8vIG5hbWVkIHBhcmFtZXRlcnMuCiAgYm9vbCBnZXQgaXNSZXF1aXJlZCA9PiBpc01hbmRhdG9yeUZvcm1hbFBhcmFtZXRlcktpbmQoa2luZCk7CgogIGJvb2wgZ2V0IGlzTmFtZWRSZXF1aXJlZCA9PiAobW9kaWZpZXJzICYgcmVxdWlyZWRNYXNrKSAhPSAwOwoKICBib29sIGdldCBpc1Bvc2l0aW9uYWwgewogICAgcmV0dXJuIGlzT3B0aW9uYWxQb3NpdGlvbmFsRm9ybWFsUGFyYW1ldGVyS2luZChraW5kKSB8fAogICAgICAgIGlzTWFuZGF0b3J5Rm9ybWFsUGFyYW1ldGVyS2luZChraW5kKTsKICB9CgogIGJvb2wgZ2V0IGlzTmFtZWQgPT4gaXNPcHRpb25hbE5hbWVkRm9ybWFsUGFyYW1ldGVyS2luZChraW5kKTsKCiAgYm9vbCBnZXQgaXNPcHRpb25hbCA9PiAhaXNSZXF1aXJlZDsKCiAgYm9vbCBnZXQgaXNMb2NhbCA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGZ1bGxOYW1lRm9yRXJyb3JzID0+IG5hbWU7CgogIFZhcmlhYmxlRGVjbGFyYXRpb24gZ2V0IHRhcmdldCA9PiB2YXJpYWJsZTsKCiAgVmFyaWFibGVEZWNsYXJhdGlvbiBidWlsZCgKICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgaW50IGZ1bmN0aW9uTmVzdGluZ0xldmVsKSB7CiAgICBpZiAodmFyaWFibGUgPT0gbnVsbCkgewogICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQobmFtZSwgZnVuY3Rpb25OZXN0aW5nTGV2ZWwsCiAgICAgICAgICB0eXBlOiB0eXBlPy5idWlsZChsaWJyYXJ5KSwKICAgICAgICAgIGlzRmluYWw6IGlzRmluYWwsCiAgICAgICAgICBpc0NvbnN0OiBpc0NvbnN0LAogICAgICAgICAgaXNGaWVsZEZvcm1hbDogaXNJbml0aWFsaXppbmdGb3JtYWwsCiAgICAgICAgICBpc0NvdmFyaWFudDogaXNDb3ZhcmlhbnQsCiAgICAgICAgICBpc1JlcXVpcmVkOiBpc05hbWVkUmVxdWlyZWQpCiAgICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldDsKICAgIH0KICAgIHJldHVybiB2YXJpYWJsZTsKICB9CgogIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgY2xvbmUoTGlzdDxUeXBlQnVpbGRlcj4gbmV3VHlwZXMpIHsKICAgIC8vIFRPRE8oZG1pdHJ5YXMpOiAgSXQncyBub3QgY2xlYXIgaG93IFttZXRhZGF0YV0gaXMgdXNlZCBjdXJyZW50bHksIGFuZAogICAgLy8gaG93IGl0IHNob3VsZCBiZSBjbG9uZWQuICBDb25zaWRlciBjbG9uaW5nIGl0IGluc3RlYWQgb2YgcmV1c2luZyBpdC4KICAgIHJldHVybiBuZXcgRm9ybWFsUGFyYW1ldGVyQnVpbGRlcigKICAgICAgICBtZXRhZGF0YSwgbW9kaWZpZXJzLCB0eXBlPy5jbG9uZShuZXdUeXBlcyksIG5hbWUsIHBhcmVudCwgY2hhck9mZnNldCkKICAgICAgLi5raW5kID0ga2luZDsKICB9CgogIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZm9yRm9ybWFsUGFyYW1ldGVySW5pdGlhbGl6ZXJTY29wZSgpIHsKICAgIGFzc2VydCh2YXJpYWJsZSAhPSBudWxsKTsKICAgIHJldHVybiAhaXNJbml0aWFsaXppbmdGb3JtYWwKICAgICAgICA/IHRoaXMKICAgICAgICA6IChuZXcgRm9ybWFsUGFyYW1ldGVyQnVpbGRlcigKICAgICAgICAgICAgbWV0YWRhdGEsCiAgICAgICAgICAgIG1vZGlmaWVycyB8IGZpbmFsTWFzayB8IGluaXRpYWxpemluZ0Zvcm1hbE1hc2ssCiAgICAgICAgICAgIHR5cGUsCiAgICAgICAgICAgIG5hbWUsCiAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgIGNoYXJPZmZzZXQpCiAgICAgICAgICAuLnBhcmVudCA9IHBhcmVudAogICAgICAgICAgLi52YXJpYWJsZSA9IHZhcmlhYmxlKTsKICB9CgogIHZvaWQgZmluYWxpemVJbml0aWFsaXppbmdGb3JtYWwoKSB7CiAgICBPYmplY3QgY2xzID0gcGFyZW50LnBhcmVudDsKICAgIGlmIChjbHMgaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgIEJ1aWxkZXIgZmllbGRCdWlsZGVyID0gY2xzLnNjb3BlLmxvb2t1cChuYW1lLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICAgICAgaWYgKGZpZWxkQnVpbGRlciBpcyBGaWVsZEJ1aWxkZXIpIHsKICAgICAgICB2YXJpYWJsZS50eXBlID0gZmllbGRCdWlsZGVyLmZpZWxkLnR5cGU7CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBCdWlsZHMgdGhlIGRlZmF1bHQgdmFsdWUgZnJvbSB0aGlzIFtpbml0aWFsaXplclRva2VuXSBpZiB0aGlzIGlzIGEKICAvLy8gZm9ybWFsIHBhcmFtZXRlciBvbiBhIGNvbnN0IGNvbnN0cnVjdG9yIG9yIGluc3RhbmNlIG1ldGhvZC4KICB2b2lkIGJ1aWxkT3V0bGluZUV4cHJlc3Npb25zKExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgIC8vIEZvciBtb2R1bGFyIGNvbXBpbGF0aW9uIHdlIG5lZWQgdG8gaW5jbHVkZSBpbml0aWFsaXplcnMgZm9yIG9wdGlvbmFsCiAgICAvLyBhbmQgbmFtZWQgcGFyYW1ldGVycyBvZiBjb25zdCBjb25zdHJ1Y3RvcnMgaW50byB0aGUgb3V0bGluZSAtIHRvIGVuYWJsZQogICAgLy8gY29uc3RhbnQgZXZhbHVhdGlvbi4gU2ltaWxhcmx5IHdlIG5lZWQgdG8gaW5jbHVkZSBpbml0aWFsaXplcnMgZm9yCiAgICAvLyBvcHRpb25hbCBhbmQgbmFtZWQgcGFyYW1ldGVycyBvZiBpbnN0YW5jZSBtZXRob2RzIGJlY2F1c2UgdGhlc2UgbWlnaHQgYmUKICAgIC8vIG5lZWRlZCB0byBnZW5lcmF0ZWQgbm9TdWNoTWV0aG9kIGZvcndhcmRlcnMuCiAgICBib29sIGlzQ29uc3RDb25zdHJ1Y3RvclBhcmFtZXRlciA9IGZhbHNlOwogICAgaWYgKHBhcmVudCBpcyBDb25zdHJ1Y3RvckJ1aWxkZXIpIHsKICAgICAgQ29uc3RydWN0b3JCdWlsZGVyIGNvbnN0cnVjdG9yQnVpbGRlciA9IHBhcmVudDsKICAgICAgaXNDb25zdENvbnN0cnVjdG9yUGFyYW1ldGVyID0gY29uc3RydWN0b3JCdWlsZGVyLmNvbnN0cnVjdG9yLmlzQ29uc3Q7CiAgICB9CiAgICBpZiAoKGlzQ29uc3RDb25zdHJ1Y3RvclBhcmFtZXRlciB8fCBwYXJlbnQuaXNDbGFzc0luc3RhbmNlTWVtYmVyKSAmJgogICAgICAgIGluaXRpYWxpemVyVG9rZW4gIT0gbnVsbCkgewogICAgICBmaW5hbCBDbGFzc0J1aWxkZXIgY2xhc3NCdWlsZGVyID0gcGFyZW50LnBhcmVudDsKICAgICAgU2NvcGUgc2NvcGUgPSBjbGFzc0J1aWxkZXIuc2NvcGU7CiAgICAgIEJvZHlCdWlsZGVyIGJvZHlCdWlsZGVyID0gbGlicmFyeS5sb2FkZXIKICAgICAgICAgIC5jcmVhdGVCb2R5QnVpbGRlckZvck91dGxpbmVFeHByZXNzaW9uKAogICAgICAgICAgICAgIGxpYnJhcnksIGNsYXNzQnVpbGRlciwgdGhpcywgc2NvcGUsIGZpbGVVcmkpOwogICAgICBib2R5QnVpbGRlci5jb25zdGFudENvbnRleHQgPSBDb25zdGFudENvbnRleHQucmVxdWlyZWQ7CiAgICAgIHZhcmlhYmxlLmluaXRpYWxpemVyID0gYm9keUJ1aWxkZXIucGFyc2VGaWVsZEluaXRpYWxpemVyKGluaXRpYWxpemVyVG9rZW4pCiAgICAgICAgLi5wYXJlbnQgPSB2YXJpYWJsZTsKICAgICAgYm9keUJ1aWxkZXIudHlwZUluZmVycmVyPy5pbmZlclBhcmFtZXRlckluaXRpYWxpemVyKAogICAgICAgICAgYm9keUJ1aWxkZXIsIHZhcmlhYmxlLmluaXRpYWxpemVyLCB2YXJpYWJsZS50eXBlKTsKICAgICAgaWYgKGxpYnJhcnkubG9hZGVyIGlzIFNvdXJjZUxvYWRlcikgewogICAgICAgIFNvdXJjZUxvYWRlciBsb2FkZXIgPSBsaWJyYXJ5LmxvYWRlcjsKICAgICAgICBsb2FkZXIudHJhbnNmb3JtUG9zdEluZmVyZW5jZSh2YXJpYWJsZSwKICAgICAgICAgICAgYm9keUJ1aWxkZXIudHJhbnNmb3JtU2V0TGl0ZXJhbHMsIGJvZHlCdWlsZGVyLnRyYW5zZm9ybUNvbGxlY3Rpb25zKTsKICAgICAgfQogICAgICBib2R5QnVpbGRlci5yZXNvbHZlUmVkaXJlY3RpbmdGYWN0b3J5VGFyZ2V0cygpOwogICAgfQogICAgaW5pdGlhbGl6ZXJUb2tlbiA9IG51bGw7CiAgfQp9CoC3AE5OPAEoATIBLgkoLDEBFkgBOwE4AVABJQEjAUoBOQE3AScJFhEcFhgZFQFMAUYRN00oARcBGgEVAU4ZPAFCIAE0BjwhGgFONiwBNAFNFz8BPwEaPC4EAUABJgEcAQwoAS4BHUAcTSYcHC8kJyMGFQQBPU1MJ04VBAFAHiEPJxY8EhISGBwiBAEmIB9KKjEIBgQBSUI5TE9KUDQuKDZMBkkkNygvMjw+UR07PSwuMFEINgYdBAIBQXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2Zvcm1hbF9wYXJhbWV0ZXJfYnVpbGRlci5kYXJ0Q3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9idWlsZGVyL3Byb2NlZHVyZV9idWlsZGVyLmRhcnTAAJmSLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEucHJvY2VkdXJlX2J1aWxkZXI7CgppbXBvcnQgJ2RhcnQ6Y29yZScgaGlkZSBNYXBFbnRyeTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2FsZ2VicmEuZGFydCc7CgppbXBvcnQgJ2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBCdWlsZGVyLAogICAgICAgIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIsCiAgICAgICAgTGlicmFyeUJ1aWxkZXIsCiAgICAgICAgTWVtYmVyQnVpbGRlciwKICAgICAgICBNZXRhZGF0YUJ1aWxkZXIsCiAgICAgICAgU2NvcGUsCiAgICAgICAgVHlwZUJ1aWxkZXIsCiAgICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlcjsKCmltcG9ydCAnZXh0ZW5zaW9uX2J1aWxkZXIuZGFydCc7CmltcG9ydCAndHlwZV92YXJpYWJsZV9idWlsZGVyLmRhcnQnOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJy4uL2NvbnN0YW50X2NvbnRleHQuZGFydCcgc2hvdyBDb25zdGFudENvbnRleHQ7CgppbXBvcnQgJy4uL2tlcm5lbC9ib2R5X2J1aWxkZXIuZGFydCcgc2hvdyBCb2R5QnVpbGRlcjsKCmltcG9ydCAnLi4va2VybmVsL2V4cHJlc3Npb25fZ2VuZXJhdG9yX2hlbHBlci5kYXJ0JwogICAgc2hvdyBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyOwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBDbGFzc0J1aWxkZXIsCiAgICAgICAgQ29uc3RydWN0b3JSZWZlcmVuY2VCdWlsZGVyLAogICAgICAgIEJ1aWxkZXIsCiAgICAgICAgRm9ybWFsUGFyYW1ldGVyQnVpbGRlciwKICAgICAgICBMaWJyYXJ5QnVpbGRlciwKICAgICAgICBNZXRhZGF0YUJ1aWxkZXIsCiAgICAgICAgVHlwZUJ1aWxkZXIsCiAgICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlciwKICAgICAgICBpc1JlZGlyZWN0aW5nR2VuZXJhdGl2ZUNvbnN0cnVjdG9ySW1wbGVtZW50YXRpb247CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfc2hhZG93X2FzdC5kYXJ0JyBzaG93IFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudDsKCmltcG9ydCAnLi4va2VybmVsL3JlZGlyZWN0aW5nX2ZhY3RvcnlfYm9keS5kYXJ0JyBzaG93IFJlZGlyZWN0aW5nRmFjdG9yeUJvZHk7CgppbXBvcnQgJy4uL2xvYWRlci5kYXJ0JyBzaG93IExvYWRlcjsKCmltcG9ydCAnLi4vbWVzc2FnZXMuZGFydCcKICAgIHNob3cKICAgICAgICBNZXNzYWdlLAogICAgICAgIG1lc3NhZ2VDb25zdEZhY3RvcnlSZWRpcmVjdGlvblRvTm9uQ29uc3QsCiAgICAgICAgbWVzc2FnZU1vcmVUaGFuT25lU3VwZXJPclRoaXNJbml0aWFsaXplciwKICAgICAgICBtZXNzYWdlTm9uSW5zdGFuY2VUeXBlVmFyaWFibGVVc2UsCiAgICAgICAgbWVzc2FnZVBhdGNoRGVjbGFyYXRpb25NaXNtYXRjaCwKICAgICAgICBtZXNzYWdlUGF0Y2hEZWNsYXJhdGlvbk9yaWdpbiwKICAgICAgICBtZXNzYWdlUGF0Y2hOb25FeHRlcm5hbCwKICAgICAgICBtZXNzYWdlU3VwZXJJbml0aWFsaXplck5vdExhc3QsCiAgICAgICAgbWVzc2FnZVRoaXNJbml0aWFsaXplck5vdEFsb25lLAogICAgICAgIG5vTGVuZ3RoOwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JyBzaG93IHVuZXhwZWN0ZWQ7CgppbXBvcnQgJy4uL3NvdXJjZS9zb3VyY2VfbGlicmFyeV9idWlsZGVyLmRhcnQnIHNob3cgU291cmNlTGlicmFyeUJ1aWxkZXI7CgppbXBvcnQgJy4uL3R5cGVfaW5mZXJlbmNlL3R5cGVfaW5mZXJlbmNlX2VuZ2luZS5kYXJ0JwogICAgc2hvdyBJbmNsdWRlc1R5cGVQYXJhbWV0ZXJzTm9uQ292YXJpYW50bHksIFZhcmlhbmNlOwoKLy8vIENvbW1vbiBiYXNlIGNsYXNzIGZvciBjb25zdHJ1Y3RvciBhbmQgcHJvY2VkdXJlIGJ1aWxkZXJzLgphYnN0cmFjdCBjbGFzcyBGdW5jdGlvbkJ1aWxkZXIgZXh0ZW5kcyBNZW1iZXJCdWlsZGVyIHsKICBmaW5hbCBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGE7CgogIGZpbmFsIGludCBtb2RpZmllcnM7CgogIGZpbmFsIFR5cGVCdWlsZGVyIHJldHVyblR5cGU7CgogIGZpbmFsIFN0cmluZyBuYW1lOwoKICBmaW5hbCBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXM7CgogIGZpbmFsIExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4gZm9ybWFsczsKCiAgLy8vIElmIHRoaXMgcHJvY2VkdXJlIGlzIGFuIGV4dGVuc2lvbiBpbnN0YW5jZSBtZW1iZXIsIFtfZXh0ZW5zaW9uVGhpc10gaG9sZHMKICAvLy8gdGhlIHN5bnRoZXRpY2FsbHkgYWRkZWQgYHRoaXNgIHBhcmFtZXRlci4KICBWYXJpYWJsZURlY2xhcmF0aW9uIF9leHRlbnNpb25UaGlzOwoKICAvLy8gSWYgdGhpcyBwcm9jZWR1cmUgaXMgYW4gZXh0ZW5zaW9uIGluc3RhbmNlIG1lbWJlciwKICAvLy8gW19leHRlbnNpb25UeXBlUGFyYW1ldGVyc10gaG9sZHMgdGhlIHR5cGUgcGFyYW1ldGVycyBjb3BpZWQgZnJvbSB0aGUKICAvLy8gZXh0ZW5zaW9uIGRlY2xhcmF0aW9uLgogIExpc3Q8VHlwZVBhcmFtZXRlcj4gX2V4dGVuc2lvblR5cGVQYXJhbWV0ZXJzOwoKICBGdW5jdGlvbkJ1aWxkZXIoCiAgICAgIHRoaXMubWV0YWRhdGEsCiAgICAgIHRoaXMubW9kaWZpZXJzLAogICAgICB0aGlzLnJldHVyblR5cGUsCiAgICAgIHRoaXMubmFtZSwKICAgICAgdGhpcy50eXBlVmFyaWFibGVzLAogICAgICB0aGlzLmZvcm1hbHMsCiAgICAgIExpYnJhcnlCdWlsZGVyIGNvbXBpbGF0aW9uVW5pdCwKICAgICAgaW50IGNoYXJPZmZzZXQsCiAgICAgIHRoaXMubmF0aXZlTWV0aG9kTmFtZSkKICAgICAgOiBzdXBlcihjb21waWxhdGlvblVuaXQsIGNoYXJPZmZzZXQpIHsKICAgIGlmIChmb3JtYWxzICE9IG51bGwpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmb3JtYWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgZm9ybWFsc1tpXS5wYXJlbnQgPSB0aGlzOwogICAgICB9CiAgICB9CiAgfQoKICBTdHJpbmcgZ2V0IGRlYnVnTmFtZSA9PiAiRnVuY3Rpb25CdWlsZGVyIjsKCiAgQXN5bmNNYXJrZXIgZ2V0IGFzeW5jTW9kaWZpZXI7CgogIFByb2NlZHVyZUtpbmQgZ2V0IGtpbmQ7CgogIGJvb2wgZ2V0IGlzQ29uc3RydWN0b3IgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzUmVndWxhck1ldGhvZCA9PiBpZGVudGljYWwoUHJvY2VkdXJlS2luZC5NZXRob2QsIGtpbmQpOwoKICBib29sIGdldCBpc0dldHRlciA9PiBpZGVudGljYWwoUHJvY2VkdXJlS2luZC5HZXR0ZXIsIGtpbmQpOwoKICBib29sIGdldCBpc1NldHRlciA9PiBpZGVudGljYWwoUHJvY2VkdXJlS2luZC5TZXR0ZXIsIGtpbmQpOwoKICBib29sIGdldCBpc09wZXJhdG9yID0+IGlkZW50aWNhbChQcm9jZWR1cmVLaW5kLk9wZXJhdG9yLCBraW5kKTsKCiAgYm9vbCBnZXQgaXNGYWN0b3J5ID0+IGlkZW50aWNhbChQcm9jZWR1cmVLaW5kLkZhY3RvcnksIGtpbmQpOwoKICAvLy8gVGhpcyBpcyB0aGUgZm9ybWFsIHBhcmFtZXRlciBzY29wZSBhcyBzcGVjaWZpZWQgaW4gdGhlIERhcnQgUHJvZ3JhbW1pbmcKICAvLy8gTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbiwgNHRoIGVkLCBzZWN0aW9uIDkuMi4KICBTY29wZSBjb21wdXRlRm9ybWFsUGFyYW1ldGVyU2NvcGUoU2NvcGUgcGFyZW50KSB7CiAgICBpZiAoZm9ybWFscyA9PSBudWxsKSByZXR1cm4gcGFyZW50OwogICAgTWFwPFN0cmluZywgQnVpbGRlcj4gbG9jYWwgPSA8U3RyaW5nLCBCdWlsZGVyPnt9OwogICAgZm9yIChGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIGZvcm1hbCBpbiBmb3JtYWxzKSB7CiAgICAgIGlmICghaXNDb25zdHJ1Y3RvciB8fCAhZm9ybWFsLmlzSW5pdGlhbGl6aW5nRm9ybWFsKSB7CiAgICAgICAgbG9jYWxbZm9ybWFsLm5hbWVdID0gZm9ybWFsOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IFNjb3BlKAogICAgICAgIGxvY2FsOiBsb2NhbCwKICAgICAgICBwYXJlbnQ6IHBhcmVudCwKICAgICAgICBkZWJ1Z05hbWU6ICJmb3JtYWwgcGFyYW1ldGVyIiwKICAgICAgICBpc01vZGlmaWFibGU6IGZhbHNlKTsKICB9CgogIFNjb3BlIGNvbXB1dGVGb3JtYWxQYXJhbWV0ZXJJbml0aWFsaXplclNjb3BlKFNjb3BlIHBhcmVudCkgewogICAgLy8gRnJvbQogICAgLy8gW2RhcnRMYW5nU3BlYy50ZXhdKC4uLy4uLy4uLy4uLy4uLy4uL2RvY3MvbGFuZ3VhZ2UvZGFydExhbmdTcGVjLnRleCkgYXQKICAgIC8vIHJldmlzaW9uIDk0YjIzZDNiMTI1ZTlkMjQ2ZTA3YTJiNDNiNjE3NDA3NTlhMGRhY2U6CiAgICAvLwogICAgLy8gV2hlbiB0aGUgZm9ybWFsIHBhcmFtZXRlciBsaXN0IG9mIGEgbm9uLXJlZGlyZWN0aW5nIGdlbmVyYXRpdmUKICAgIC8vIGNvbnN0cnVjdG9yIGNvbnRhaW5zIGFueSBpbml0aWFsaXppbmcgZm9ybWFscywgYSBuZXcgc2NvcGUgaXMKICAgIC8vIGludHJvZHVjZWQsIHRoZSBfZm9ybWFsIHBhcmFtZXRlciBpbml0aWFsaXplciBzY29wZV8sIHdoaWNoIGlzIHRoZQogICAgLy8gY3VycmVudCBzY29wZSBvZiB0aGUgaW5pdGlhbGl6ZXIgbGlzdCBvZiB0aGUgY29uc3RydWN0b3IsIGFuZCB3aGljaCBpcwogICAgLy8gZW5jbG9zZWQgaW4gdGhlIHNjb3BlIHdoZXJlIHRoZSBjb25zdHJ1Y3RvciBpcyBkZWNsYXJlZC4gIEVhY2gKICAgIC8vIGluaXRpYWxpemluZyBmb3JtYWwgaW4gdGhlIGZvcm1hbCBwYXJhbWV0ZXIgbGlzdCBpbnRyb2R1Y2VzIGEgZmluYWwKICAgIC8vIGxvY2FsIHZhcmlhYmxlIGludG8gdGhlIGZvcm1hbCBwYXJhbWV0ZXIgaW5pdGlhbGl6ZXIgc2NvcGUsIGJ1dCBub3QgaW50bwogICAgLy8gdGhlIGZvcm1hbCBwYXJhbWV0ZXIgc2NvcGU7IGV2ZXJ5IG90aGVyIGZvcm1hbCBwYXJhbWV0ZXIgaW50cm9kdWNlcyBhCiAgICAvLyBsb2NhbCB2YXJpYWJsZSBpbnRvIGJvdGggdGhlIGZvcm1hbCBwYXJhbWV0ZXIgc2NvcGUgYW5kIHRoZSBmb3JtYWwKICAgIC8vIHBhcmFtZXRlciBpbml0aWFsaXplciBzY29wZS4KCiAgICBpZiAoZm9ybWFscyA9PSBudWxsKSByZXR1cm4gcGFyZW50OwogICAgTWFwPFN0cmluZywgQnVpbGRlcj4gbG9jYWwgPSA8U3RyaW5nLCBCdWlsZGVyPnt9OwogICAgZm9yIChGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIGZvcm1hbCBpbiBmb3JtYWxzKSB7CiAgICAgIGxvY2FsW2Zvcm1hbC5uYW1lXSA9IGZvcm1hbC5mb3JGb3JtYWxQYXJhbWV0ZXJJbml0aWFsaXplclNjb3BlKCk7CiAgICB9CiAgICByZXR1cm4gbmV3IFNjb3BlKAogICAgICAgIGxvY2FsOiBsb2NhbCwKICAgICAgICBwYXJlbnQ6IHBhcmVudCwKICAgICAgICBkZWJ1Z05hbWU6ICJmb3JtYWwgcGFyYW1ldGVyIGluaXRpYWxpemVyIiwKICAgICAgICBpc01vZGlmaWFibGU6IGZhbHNlKTsKICB9CgogIC8vLyBUaGlzIHNjb3BlIGRvZXNuJ3QgY29ycmVzcG9uZCB0byBhbnkgc2NvcGUgc3BlY2lmaWVkIGluIHRoZSBEYXJ0CiAgLy8vIFByb2dyYW1taW5nIExhbmd1YWdlIFNwZWNpZmljYXRpb24sIDR0aCBlZC4gSXQncyBhbiB1bnNwZWNpZmllZCBleHRlbnNpb24KICAvLy8gdG8gc3VwcG9ydCBnZW5lcmljIG1ldGhvZHMuCiAgU2NvcGUgY29tcHV0ZVR5cGVQYXJhbWV0ZXJTY29wZShTY29wZSBwYXJlbnQpIHsKICAgIGlmICh0eXBlVmFyaWFibGVzID09IG51bGwpIHJldHVybiBwYXJlbnQ7CiAgICBNYXA8U3RyaW5nLCBCdWlsZGVyPiBsb2NhbCA9IDxTdHJpbmcsIEJ1aWxkZXI+e307CiAgICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgdmFyaWFibGUgaW4gdHlwZVZhcmlhYmxlcykgewogICAgICBsb2NhbFt2YXJpYWJsZS5uYW1lXSA9IHZhcmlhYmxlOwogICAgfQogICAgcmV0dXJuIG5ldyBTY29wZSgKICAgICAgICBsb2NhbDogbG9jYWwsCiAgICAgICAgcGFyZW50OiBwYXJlbnQsCiAgICAgICAgZGVidWdOYW1lOiAidHlwZSBwYXJhbWV0ZXIiLAogICAgICAgIGlzTW9kaWZpYWJsZTogZmFsc2UpOwogIH0KCiAgRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBnZXRGb3JtYWwoU3RyaW5nIG5hbWUpIHsKICAgIGlmIChmb3JtYWxzICE9IG51bGwpIHsKICAgICAgZm9yIChGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIGZvcm1hbCBpbiBmb3JtYWxzKSB7CiAgICAgICAgaWYgKGZvcm1hbC5uYW1lID09IG5hbWUpIHJldHVybiBmb3JtYWw7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgZmluYWwgU3RyaW5nIG5hdGl2ZU1ldGhvZE5hbWU7CgogIEZ1bmN0aW9uTm9kZSBmdW5jdGlvbjsKCiAgU3RhdGVtZW50IF9ib2R5OwoKICBGdW5jdGlvbkJ1aWxkZXIgZ2V0IGFjdHVhbE9yaWdpbjsKCiAgdm9pZCBzZXQgYm9keShTdGF0ZW1lbnQgbmV3Qm9keSkgewovLyAgICBpZiAobmV3Qm9keSAhPSBudWxsKSB7Ci8vICAgICAgaWYgKGlzQWJzdHJhY3QpIHsKLy8gICAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBJcyB0aGlzIGNoZWNrIG5lZWRlZD8KLy8gICAgICAgIHJldHVybiBpbnRlcm5hbFByb2JsZW0obWVzc2FnZUludGVybmFsUHJvYmxlbUJvZHlPbkFic3RyYWN0TWV0aG9kLAovLyAgICAgICAgICAgIG5ld0JvZHkuZmlsZU9mZnNldCwgZmlsZVVyaSk7Ci8vICAgICAgfQovLyAgICB9CiAgICBfYm9keSA9IG5ld0JvZHk7CiAgICBpZiAoZnVuY3Rpb24gIT0gbnVsbCkgewogICAgICAvLyBBIGZvcndhcmRpbmcgc2VtaS1zdHViIGlzIGEgbWV0aG9kIHRoYXQgaXMgYWJzdHJhY3QgaW4gdGhlIHNvdXJjZSBjb2RlLAogICAgICAvLyBidXQgd2hpY2ggbmVlZHMgdG8gaGF2ZSBhIGZvcndhcmRpbmcgc3R1YiBib2R5IGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0CiAgICAgIC8vIGNvdmFyaWFuY2UgY2hlY2tzIG9jY3VyLiAgV2UgZG9uJ3Qgd2FudCB0byByZXBsYWNlIHRoZSBmb3J3YXJkaW5nIHN0dWIKICAgICAgLy8gYm9keSB3aXRoIG51bGwuCiAgICAgIFRyZWVOb2RlIHBhcmVudCA9IGZ1bmN0aW9uLnBhcmVudDsKICAgICAgaWYgKCEobmV3Qm9keSA9PSBudWxsICYmCiAgICAgICAgICBwYXJlbnQgaXMgUHJvY2VkdXJlICYmCiAgICAgICAgICBwYXJlbnQuaXNGb3J3YXJkaW5nU2VtaVN0dWIpKSB7CiAgICAgICAgZnVuY3Rpb24uYm9keSA9IG5ld0JvZHk7CiAgICAgICAgbmV3Qm9keT8ucGFyZW50ID0gZnVuY3Rpb247CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgc2V0UmVkaXJlY3RpbmdGYWN0b3J5Qm9keShNZW1iZXIgdGFyZ2V0LCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICBpZiAoX2JvZHkgIT0gbnVsbCkgewogICAgICB1bmV4cGVjdGVkKCJudWxsIiwgIiR7X2JvZHkucnVudGltZVR5cGV9IiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICB9CiAgICBfYm9keSA9IG5ldyBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KHRhcmdldCwgdHlwZUFyZ3VtZW50cyk7CiAgICBmdW5jdGlvbi5ib2R5ID0gX2JvZHk7CiAgICBfYm9keT8ucGFyZW50ID0gZnVuY3Rpb247CiAgICBpZiAoaXNQYXRjaCkgewogICAgICBhY3R1YWxPcmlnaW4uc2V0UmVkaXJlY3RpbmdGYWN0b3J5Qm9keSh0YXJnZXQsIHR5cGVBcmd1bWVudHMpOwogICAgfQogIH0KCiAgU3RhdGVtZW50IGdldCBib2R5ID0+IF9ib2R5ID8/PSBuZXcgRW1wdHlTdGF0ZW1lbnQoKTsKCiAgYm9vbCBnZXQgaXNOYXRpdmUgPT4gbmF0aXZlTWV0aG9kTmFtZSAhPSBudWxsOwoKICBGdW5jdGlvbk5vZGUgYnVpbGRGdW5jdGlvbihMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICBhc3NlcnQoZnVuY3Rpb24gPT0gbnVsbCk7CiAgICBGdW5jdGlvbk5vZGUgcmVzdWx0ID0gbmV3IEZ1bmN0aW9uTm9kZShib2R5LCBhc3luY01hcmtlcjogYXN5bmNNb2RpZmllcik7CiAgICBJbmNsdWRlc1R5cGVQYXJhbWV0ZXJzTm9uQ292YXJpYW50bHkgbmVlZHNDaGVja1Zpc2l0b3I7CiAgICBpZiAoIWlzQ29uc3RydWN0b3IgJiYgIWlzRmFjdG9yeSAmJiBwYXJlbnQgaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgIENsYXNzQnVpbGRlciBlbmNsb3NpbmdDbGFzc0J1aWxkZXIgPSBwYXJlbnQ7CiAgICAgIENsYXNzIGVuY2xvc2luZ0NsYXNzID0gZW5jbG9zaW5nQ2xhc3NCdWlsZGVyLmNsczsKICAgICAgaWYgKGVuY2xvc2luZ0NsYXNzLnR5cGVQYXJhbWV0ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgICBuZWVkc0NoZWNrVmlzaXRvciA9IG5ldyBJbmNsdWRlc1R5cGVQYXJhbWV0ZXJzTm9uQ292YXJpYW50bHkoCiAgICAgICAgICAgIGVuY2xvc2luZ0NsYXNzLnR5cGVQYXJhbWV0ZXJzLAogICAgICAgICAgICAvLyBXZSBhcmUgY2hlY2tpbmcgdGhlIHBhcmFtZXRlciB0eXBlcyB3aGljaCBhcmUgaW4gYQogICAgICAgICAgICAvLyBjb250cmF2YXJpYW50IHBvc2l0aW9uLgogICAgICAgICAgICBpbml0aWFsVmFyaWFuY2U6IFZhcmlhbmNlLmNvbnRyYXZhcmlhbnQpOwogICAgICB9CiAgICB9CiAgICBpZiAodHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciB0IGluIHR5cGVWYXJpYWJsZXMpIHsKICAgICAgICBUeXBlUGFyYW1ldGVyIHBhcmFtZXRlciA9IHQucGFyYW1ldGVyOwogICAgICAgIHJlc3VsdC50eXBlUGFyYW1ldGVycy5hZGQocGFyYW1ldGVyKTsKICAgICAgICBpZiAobmVlZHNDaGVja1Zpc2l0b3IgIT0gbnVsbCkgewogICAgICAgICAgaWYgKHBhcmFtZXRlci5ib3VuZC5hY2NlcHQobmVlZHNDaGVja1Zpc2l0b3IpKSB7CiAgICAgICAgICAgIHBhcmFtZXRlci5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgc2V0UGFyZW50cyhyZXN1bHQudHlwZVBhcmFtZXRlcnMsIHJlc3VsdCk7CiAgICB9CiAgICBpZiAoZm9ybWFscyAhPSBudWxsKSB7CiAgICAgIGZvciAoRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBmb3JtYWwgaW4gZm9ybWFscykgewogICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyID0gZm9ybWFsLmJ1aWxkKGxpYnJhcnksIDApOwogICAgICAgIGlmIChuZWVkc0NoZWNrVmlzaXRvciAhPSBudWxsKSB7CiAgICAgICAgICBpZiAocGFyYW1ldGVyLnR5cGUuYWNjZXB0KG5lZWRzQ2hlY2tWaXNpdG9yKSkgewogICAgICAgICAgICBwYXJhbWV0ZXIuaXNHZW5lcmljQ292YXJpYW50SW1wbCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChmb3JtYWwuaXNOYW1lZCkgewogICAgICAgICAgcmVzdWx0Lm5hbWVkUGFyYW1ldGVycy5hZGQocGFyYW1ldGVyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVzdWx0LnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmFkZChwYXJhbWV0ZXIpOwogICAgICAgIH0KICAgICAgICBwYXJhbWV0ZXIucGFyZW50ID0gcmVzdWx0OwogICAgICAgIGlmIChmb3JtYWwuaXNSZXF1aXJlZCkgewogICAgICAgICAgcmVzdWx0LnJlcXVpcmVkUGFyYW1ldGVyQ291bnQrKzsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmICghaXNFeHRlbnNpb25JbnN0YW5jZU1lbWJlciAmJgogICAgICAgIGlzU2V0dGVyICYmCiAgICAgICAgKGZvcm1hbHM/Lmxlbmd0aCAhPSAxIHx8IGZvcm1hbHNbMF0uaXNPcHRpb25hbCkpIHsKICAgICAgLy8gUmVwbGFjZSBpbGxlZ2FsIHBhcmFtZXRlcnMgYnkgc2luZ2xlIGR1bW15IHBhcmFtZXRlci4KICAgICAgLy8gRG8gdGhpcyBhZnRlciBidWlsZGluZyB0aGUgcGFyYW1ldGVycywgc2luY2UgdGhlIGRpZXQgbGlzdGVuZXIKICAgICAgLy8gYXNzdW1lcyB0aGF0IHBhcmFtZXRlcnMgYXJlIGJ1aWx0LCBldmVuIGlmIGlsbGVnYWwgaW4gbnVtYmVyLgogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHBhcmFtZXRlciA9CiAgICAgICAgICBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50KCIjc3ludGhldGljIiwgMCk7CiAgICAgIHJlc3VsdC5wb3NpdGlvbmFsUGFyYW1ldGVycy5jbGVhcigpOwogICAgICByZXN1bHQucG9zaXRpb25hbFBhcmFtZXRlcnMuYWRkKHBhcmFtZXRlcik7CiAgICAgIHBhcmFtZXRlci5wYXJlbnQgPSByZXN1bHQ7CiAgICAgIHJlc3VsdC5uYW1lZFBhcmFtZXRlcnMuY2xlYXIoKTsKICAgICAgcmVzdWx0LnJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPSAxOwogICAgfQogICAgaWYgKHJldHVyblR5cGUgIT0gbnVsbCkgewogICAgICByZXN1bHQucmV0dXJuVHlwZSA9IHJldHVyblR5cGUuYnVpbGQobGlicmFyeSk7CiAgICB9CiAgICBpZiAoIWlzQ29uc3RydWN0b3IgJiYKICAgICAgICAhaXNEZWNsYXJhdGlvbkluc3RhbmNlTWVtYmVyICYmCiAgICAgICAgcGFyZW50IGlzIENsYXNzQnVpbGRlcikgewogICAgICBDbGFzc0J1aWxkZXIgZW5jbG9zaW5nQ2xhc3NCdWlsZGVyID0gcGFyZW50OwogICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzID0KICAgICAgICAgIGVuY2xvc2luZ0NsYXNzQnVpbGRlci5jbHMudHlwZVBhcmFtZXRlcnM7CiAgICAgIGlmICh0eXBlUGFyYW1ldGVycy5pc05vdEVtcHR5KSB7CiAgICAgICAgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBzdWJzdGl0dXRpb247CiAgICAgICAgRGFydFR5cGUgcmVtb3ZlVHlwZVZhcmlhYmxlcyhEYXJ0VHlwZSB0eXBlKSB7CiAgICAgICAgICBpZiAoc3Vic3RpdHV0aW9uID09IG51bGwpIHsKICAgICAgICAgICAgc3Vic3RpdHV0aW9uID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogICAgICAgICAgICBmb3IgKFR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyIGluIHR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgICAgICAgICAgc3Vic3RpdHV0aW9uW3BhcmFtZXRlcl0gPSBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBsaWJyYXJ5LmFkZFByb2JsZW0oCiAgICAgICAgICAgICAgbWVzc2FnZU5vbkluc3RhbmNlVHlwZVZhcmlhYmxlVXNlLCBjaGFyT2Zmc2V0LCBub0xlbmd0aCwgZmlsZVVyaSk7CiAgICAgICAgICByZXR1cm4gc3Vic3RpdHV0ZSh0eXBlLCBzdWJzdGl0dXRpb24pOwogICAgICAgIH0KCiAgICAgICAgU2V0PFR5cGVQYXJhbWV0ZXI+IHNldCA9IHR5cGVQYXJhbWV0ZXJzLnRvU2V0KCk7CiAgICAgICAgZm9yIChWYXJpYWJsZURlY2xhcmF0aW9uIHBhcmFtZXRlciBpbiByZXN1bHQucG9zaXRpb25hbFBhcmFtZXRlcnMpIHsKICAgICAgICAgIGlmIChjb250YWluc1R5cGVWYXJpYWJsZShwYXJhbWV0ZXIudHlwZSwgc2V0KSkgewogICAgICAgICAgICBwYXJhbWV0ZXIudHlwZSA9IHJlbW92ZVR5cGVWYXJpYWJsZXMocGFyYW1ldGVyLnR5cGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3IgKFZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyIGluIHJlc3VsdC5uYW1lZFBhcmFtZXRlcnMpIHsKICAgICAgICAgIGlmIChjb250YWluc1R5cGVWYXJpYWJsZShwYXJhbWV0ZXIudHlwZSwgc2V0KSkgewogICAgICAgICAgICBwYXJhbWV0ZXIudHlwZSA9IHJlbW92ZVR5cGVWYXJpYWJsZXMocGFyYW1ldGVyLnR5cGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoY29udGFpbnNUeXBlVmFyaWFibGUocmVzdWx0LnJldHVyblR5cGUsIHNldCkpIHsKICAgICAgICAgIHJlc3VsdC5yZXR1cm5UeXBlID0gcmVtb3ZlVHlwZVZhcmlhYmxlcyhyZXN1bHQucmV0dXJuVHlwZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoaXNFeHRlbnNpb25JbnN0YW5jZU1lbWJlcikgewogICAgICBFeHRlbnNpb25CdWlsZGVyIGV4dGVuc2lvbkJ1aWxkZXIgPSBwYXJlbnQ7CiAgICAgIF9leHRlbnNpb25UaGlzID0gcmVzdWx0LnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmZpcnN0OwogICAgICBpZiAoZXh0ZW5zaW9uQnVpbGRlci50eXBlUGFyYW1ldGVycyAhPSBudWxsKSB7CiAgICAgICAgaW50IGNvdW50ID0gZXh0ZW5zaW9uQnVpbGRlci50eXBlUGFyYW1ldGVycy5sZW5ndGg7CiAgICAgICAgX2V4dGVuc2lvblR5cGVQYXJhbWV0ZXJzID0gbmV3IExpc3Q8VHlwZVBhcmFtZXRlcj4oY291bnQpOwogICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgaW5kZXgrKykgewogICAgICAgICAgX2V4dGVuc2lvblR5cGVQYXJhbWV0ZXJzW2luZGV4XSA9IHJlc3VsdC50eXBlUGFyYW1ldGVyc1tpbmRleF07CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gZnVuY3Rpb24gPSByZXN1bHQ7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgcGFyYW1ldGVyIGZvciAndGhpcycgc3ludGhldGljYWxseSBhZGRlZCB0byBleHRlbnNpb24KICAvLy8gaW5zdGFuY2UgbWVtYmVycy4KICBWYXJpYWJsZURlY2xhcmF0aW9uIGdldCBleHRlbnNpb25UaGlzIHsKICAgIGFzc2VydChfZXh0ZW5zaW9uVGhpcyAhPSBudWxsIHx8ICFpc0V4dGVuc2lvbkluc3RhbmNlTWVtYmVyLAogICAgICAgICJQcm9jZWR1cmVCdWlsZGVyLmV4dGVuc2lvblRoaXMgaGFzIG5vdCBiZWVuIHNldC4iKTsKICAgIHJldHVybiBfZXh0ZW5zaW9uVGhpczsKICB9CgogIC8vLyBSZXR1cm5zIGEgbGlzdCBvZiBzeW50aGV0aWMgdHlwZSBwYXJhbWV0ZXJzIGFkZGVkIHRvIGV4dGVuc2lvbiBpbnN0YW5jZQogIC8vLyBtZW1iZXJzLgogIExpc3Q8VHlwZVBhcmFtZXRlcj4gZ2V0IGV4dGVuc2lvblR5cGVQYXJhbWV0ZXJzIHsKICAgIC8vIFVzZSBbX2V4dGVuc2lvblRoaXNdIGFzIG1hcmtlciBmb3Igd2hldGhlciBleHRlbnNpb24gdHlwZSBwYXJhbWV0ZXJzIGhhdmUKICAgIC8vIGJlZW4gY29tcHV0ZWQuCiAgICBhc3NlcnQoX2V4dGVuc2lvblRoaXMgIT0gbnVsbCB8fCAhaXNFeHRlbnNpb25JbnN0YW5jZU1lbWJlciwKICAgICAgICAiUHJvY2VkdXJlQnVpbGRlci5leHRlbnNpb25UeXBlUGFyYW1ldGVycyBoYXMgbm90IGJlZW4gc2V0LiIpOwogICAgcmV0dXJuIF9leHRlbnNpb25UeXBlUGFyYW1ldGVyczsKICB9CgogIE1lbWJlciBidWlsZChTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBidWlsZE91dGxpbmVFeHByZXNzaW9ucyhMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICBNZXRhZGF0YUJ1aWxkZXIuYnVpbGRBbm5vdGF0aW9ucygKICAgICAgICBtZW1iZXIsIG1ldGFkYXRhLCBsaWJyYXJ5LCBpc0NsYXNzTWVtYmVyID8gcGFyZW50IDogbnVsbCwgdGhpcyk7CgogICAgaWYgKGZvcm1hbHMgIT0gbnVsbCkgewogICAgICAvLyBGb3IgY29uc3QgY29uc3RydWN0b3JzIHdlIG5lZWQgdG8gaW5jbHVkZSBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMKICAgICAgLy8gaW50byB0aGUgb3V0bGluZS4gRm9yIGFsbCBvdGhlciBmb3JtYWxzIHdlIG5lZWQgdG8gY2FsbAogICAgICAvLyBidWlsZE91dGxpbmVFeHByZXNzaW9ucyB0byBjbGVhciBpbml0aWFsaXplclRva2VuIHRvIHByZXZlbnQKICAgICAgLy8gY29uc3VtaW5nIHRvbyBtdWNoIG1lbW9yeS4KICAgICAgZm9yIChGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIGZvcm1hbCBpbiBmb3JtYWxzKSB7CiAgICAgICAgZm9ybWFsLmJ1aWxkT3V0bGluZUV4cHJlc3Npb25zKGxpYnJhcnkpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIGJlY29tZU5hdGl2ZShMb2FkZXIgbG9hZGVyKSB7CiAgICBNZW1iZXJCdWlsZGVyIGNvbnN0cnVjdG9yID0gbG9hZGVyLmdldE5hdGl2ZUFubm90YXRpb24oKTsKICAgIEFyZ3VtZW50cyBhcmd1bWVudHMgPQogICAgICAgIG5ldyBBcmd1bWVudHMoPEV4cHJlc3Npb24+W25ldyBTdHJpbmdMaXRlcmFsKG5hdGl2ZU1ldGhvZE5hbWUpXSk7CiAgICBFeHByZXNzaW9uIGFubm90YXRpb247CiAgICBpZiAoY29uc3RydWN0b3IuaXNDb25zdHJ1Y3RvcikgewogICAgICBhbm5vdGF0aW9uID0gbmV3IENvbnN0cnVjdG9ySW52b2NhdGlvbihjb25zdHJ1Y3Rvci5tZW1iZXIsIGFyZ3VtZW50cykKICAgICAgICAuLmlzQ29uc3QgPSB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgYW5ub3RhdGlvbiA9IG5ldyBTdGF0aWNJbnZvY2F0aW9uKGNvbnN0cnVjdG9yLm1lbWJlciwgYXJndW1lbnRzKQogICAgICAgIC4uaXNDb25zdCA9IHRydWU7CiAgICB9CiAgICBtZW1iZXIuYWRkQW5ub3RhdGlvbihhbm5vdGF0aW9uKTsKICB9CgogIGJvb2wgY2hlY2tQYXRjaChGdW5jdGlvbkJ1aWxkZXIgcGF0Y2gpIHsKICAgIGlmICghaXNFeHRlcm5hbCkgewogICAgICBwYXRjaC5saWJyYXJ5LmFkZFByb2JsZW0oCiAgICAgICAgICBtZXNzYWdlUGF0Y2hOb25FeHRlcm5hbCwgcGF0Y2guY2hhck9mZnNldCwgbm9MZW5ndGgsIHBhdGNoLmZpbGVVcmksCiAgICAgICAgICBjb250ZXh0OiBbCiAgICAgICAgICAgIG1lc3NhZ2VQYXRjaERlY2xhcmF0aW9uT3JpZ2luLndpdGhMb2NhdGlvbigKICAgICAgICAgICAgICAgIGZpbGVVcmksIGNoYXJPZmZzZXQsIG5vTGVuZ3RoKQogICAgICAgICAgXSk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgdm9pZCByZXBvcnRQYXRjaE1pc21hdGNoKEJ1aWxkZXIgcGF0Y2gpIHsKICAgIGxpYnJhcnkuYWRkUHJvYmxlbShtZXNzYWdlUGF0Y2hEZWNsYXJhdGlvbk1pc21hdGNoLCBwYXRjaC5jaGFyT2Zmc2V0LAogICAgICAgIG5vTGVuZ3RoLCBwYXRjaC5maWxlVXJpLCBjb250ZXh0OiBbCiAgICAgIG1lc3NhZ2VQYXRjaERlY2xhcmF0aW9uT3JpZ2luLndpdGhMb2NhdGlvbihmaWxlVXJpLCBjaGFyT2Zmc2V0LCBub0xlbmd0aCkKICAgIF0pOwogIH0KfQoKY2xhc3MgUHJvY2VkdXJlQnVpbGRlciBleHRlbmRzIEZ1bmN0aW9uQnVpbGRlciB7CiAgZmluYWwgUHJvY2VkdXJlIF9wcm9jZWR1cmU7CiAgZmluYWwgaW50IGNoYXJPcGVuUGFyZW5PZmZzZXQ7CiAgZmluYWwgUHJvY2VkdXJlS2luZCBraW5kOwoKICBBc3luY01hcmtlciBhY3R1YWxBc3luY01vZGlmaWVyID0gQXN5bmNNYXJrZXIuU3luYzsKCiAgQG92ZXJyaWRlCiAgUHJvY2VkdXJlQnVpbGRlciBhY3R1YWxPcmlnaW47CgogIFByb2NlZHVyZSBnZXQgYWN0dWFsUHJvY2VkdXJlID0+IF9wcm9jZWR1cmU7CgogIGJvb2wgaGFkVHlwZXNJbmZlcnJlZCA9IGZhbHNlOwoKICAvLy8gSWYgdGhpcyBpcyBhbiBleHRlbnNpb24gaW5zdGFuY2UgbWV0aG9kIHRoZW4gW19leHRlbnNpb25UZWFyT2ZmXSBob2xkcwogIC8vLyB0aGUgc3ludGhldGljYWxseSBjcmVhdGVkIHRlYXIgb2ZmIGZ1bmN0aW9uLgogIFByb2NlZHVyZSBfZXh0ZW5zaW9uVGVhck9mZjsKCiAgUHJvY2VkdXJlQnVpbGRlcigKICAgICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLAogICAgICBpbnQgbW9kaWZpZXJzLAogICAgICBUeXBlQnVpbGRlciByZXR1cm5UeXBlLAogICAgICBTdHJpbmcgbmFtZSwKICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzLAogICAgICBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+IGZvcm1hbHMsCiAgICAgIHRoaXMua2luZCwKICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgY29tcGlsYXRpb25Vbml0LAogICAgICBpbnQgc3RhcnRDaGFyT2Zmc2V0LAogICAgICBpbnQgY2hhck9mZnNldCwKICAgICAgdGhpcy5jaGFyT3BlblBhcmVuT2Zmc2V0LAogICAgICBpbnQgY2hhckVuZE9mZnNldCwKICAgICAgW1N0cmluZyBuYXRpdmVNZXRob2ROYW1lXSkKICAgICAgOiBfcHJvY2VkdXJlID0KICAgICAgICAgICAgbmV3IFByb2NlZHVyZShudWxsLCBraW5kLCBudWxsLCBmaWxlVXJpOiBjb21waWxhdGlvblVuaXQ/LmZpbGVVcmkpCiAgICAgICAgICAgICAgLi5zdGFydEZpbGVPZmZzZXQgPSBzdGFydENoYXJPZmZzZXQKICAgICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0CiAgICAgICAgICAgICAgLi5maWxlRW5kT2Zmc2V0ID0gY2hhckVuZE9mZnNldCwKICAgICAgICBzdXBlcihtZXRhZGF0YSwgbW9kaWZpZXJzLCByZXR1cm5UeXBlLCBuYW1lLCB0eXBlVmFyaWFibGVzLCBmb3JtYWxzLAogICAgICAgICAgICBjb21waWxhdGlvblVuaXQsIGNoYXJPZmZzZXQsIG5hdGl2ZU1ldGhvZE5hbWUpOwoKICBAb3ZlcnJpZGUKICBQcm9jZWR1cmVCdWlsZGVyIGdldCBvcmlnaW4gPT4gYWN0dWFsT3JpZ2luID8/IHRoaXM7CgogIEFzeW5jTWFya2VyIGdldCBhc3luY01vZGlmaWVyID0+IGFjdHVhbEFzeW5jTW9kaWZpZXI7CgogIFN0YXRlbWVudCBnZXQgYm9keSB7CiAgICBpZiAoX2JvZHkgPT0gbnVsbCAmJiAhaXNBYnN0cmFjdCAmJiAhaXNFeHRlcm5hbCkgewogICAgICBfYm9keSA9IG5ldyBFbXB0eVN0YXRlbWVudCgpOwogICAgfQogICAgcmV0dXJuIF9ib2R5OwogIH0KCiAgLy8vIElmIHRoaXMgaXMgYW4gZXh0ZW5zaW9uIGluc3RhbmNlIHNldHRlciwgd3JhcCB0aGUgc2V0dGVyIGJvZHkgdG8gcmV0dXJuCiAgLy8vIHRoZSByaHMgdmFsdWUgZnJvbSB0aGUgbWV0aG9kLgogIC8vLwogIC8vLyBUaGF0IGlzLCB0aGlzIHNldHRlcgogIC8vLwogIC8vLyAgICAgZXh0ZW5zaW9uIEUgb24gQSB7CiAgLy8vICAgICAgIHZvaWQgc2V0IHByb3BlcnR5KEIgdmFsdWUpIHsKICAvLy8gICAgICAgICB2YWx1ZSsrOwogIC8vLyAgICAgICB9CiAgLy8vICAgICB9CiAgLy8vCiAgLy8vIGlzIGNvbnZlcnRlZCBpbnRvIHRoaXMgdG9wIGxldmVsIG1ldGhvZAogIC8vLwogIC8vLyAgICBCIEV8cHJvcGVydHkoQSAjdGhpcywgQiB2YWx1ZSkgewogIC8vLyAgICAgIGZpbmFsICN0MSA9IHZhbHVlOwogIC8vLyAgICAgIHZhbHVlKys7CiAgLy8vICAgICAgcmV0dXJuICN0MTsKICAvLy8gICAgfQogIC8vLwogIHZvaWQgX3VwZGF0ZUV4dGVuc2lvblNldHRlckJvZHkoKSB7CiAgICBpZiAoaXNFeHRlbnNpb25JbnN0YW5jZU1lbWJlciAmJiBpc1NldHRlcikgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBdm9pZCB0aGUgc3ludGhldGljIHZhcmlhYmxlIGlmIHRoZSBwYXJhbWV0ZXIgaXMKICAgICAgLy8gbmV2ZXIgbW9kaWZpZWQuCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFsdWUgPSBwcm9jZWR1cmUuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnNbMV07CiAgICAgIHByb2NlZHVyZS5mdW5jdGlvbi5yZXR1cm5UeXBlID0gdmFsdWUudHlwZTsKICAgICAgU3RhdGVtZW50IGJvZHkgPSBwcm9jZWR1cmUuZnVuY3Rpb24uYm9keTsKICAgICAgTGlzdDxTdGF0ZW1lbnQ+IHN0YXRlbWVudHMgPSBbXTsKICAgICAgQmxvY2sgYmxvY2sgPSBuZXcgQmxvY2soc3RhdGVtZW50cyk7CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbiA9CiAgICAgICAgICBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50LmZvclZhbHVlKAogICAgICAgICAgICAgIG5ldyBWYXJpYWJsZUdldCh2YWx1ZSkuLmZpbGVPZmZzZXQgPSBwcm9jZWR1cmUuZmlsZU9mZnNldCkKICAgICAgICAgICAgLi50eXBlID0gdmFsdWUudHlwZTsKICAgICAgc3RhdGVtZW50cy5hZGQodmFyaWFibGVEZWNsYXJhdGlvbik7CiAgICAgIGlmIChib2R5IGlzIEJsb2NrKSB7CiAgICAgICAgc3RhdGVtZW50cy5hZGRBbGwoYm9keS5zdGF0ZW1lbnRzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdGF0ZW1lbnRzLmFkZChib2R5KTsKICAgICAgfQogICAgICBSZXR1cm5TdGF0ZW1lbnQgcmV0dXJuU3RhdGVtZW50ID0gbmV3IFJldHVyblN0YXRlbWVudCgKICAgICAgICAgIG5ldyBWYXJpYWJsZUdldCh2YXJpYWJsZURlY2xhcmF0aW9uKQogICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBwcm9jZWR1cmUuZmlsZUVuZE9mZnNldCk7CiAgICAgIHN0YXRlbWVudHMuYWRkKHJldHVyblN0YXRlbWVudCk7CiAgICAgIHNldFBhcmVudHMoYmxvY2suc3RhdGVtZW50cywgYmxvY2spOwogICAgICBwcm9jZWR1cmUuZnVuY3Rpb24uYm9keSA9IGJsb2NrOwogICAgICBibG9jay5wYXJlbnQgPSBwcm9jZWR1cmUuZnVuY3Rpb247CiAgICB9CiAgfQoKICB2b2lkIHNldCBib2R5KFN0YXRlbWVudCBuZXdCb2R5KSB7CiAgICBzdXBlci5ib2R5ID0gbmV3Qm9keTsKICAgIF91cGRhdGVFeHRlbnNpb25TZXR0ZXJCb2R5KCk7CiAgfQoKICB2b2lkIHNldCBhc3luY01vZGlmaWVyKEFzeW5jTWFya2VyIG5ld01vZGlmaWVyKSB7CiAgICBhY3R1YWxBc3luY01vZGlmaWVyID0gbmV3TW9kaWZpZXI7CiAgICBpZiAoZnVuY3Rpb24gIT0gbnVsbCkgewogICAgICAvLyBObyBwYXJlbnQsIGl0J3MgYW4gZW51bS4KICAgICAgZnVuY3Rpb24uYXN5bmNNYXJrZXIgPSBhY3R1YWxBc3luY01vZGlmaWVyOwogICAgICBmdW5jdGlvbi5kYXJ0QXN5bmNNYXJrZXIgPSBhY3R1YWxBc3luY01vZGlmaWVyOwogICAgfQogIH0KCiAgYm9vbCBnZXQgaXNFbGlnaWJsZUZvclRvcExldmVsSW5mZXJlbmNlIHsKICAgIGlmIChsaWJyYXJ5LmxlZ2FjeU1vZGUpIHJldHVybiBmYWxzZTsKICAgIGlmIChpc0RlY2xhcmF0aW9uSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgaWYgKHJldHVyblR5cGUgPT0gbnVsbCkgcmV0dXJuIHRydWU7CiAgICAgIGlmIChmb3JtYWxzICE9IG51bGwpIHsKICAgICAgICBmb3IgKEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZm9ybWFsIGluIGZvcm1hbHMpIHsKICAgICAgICAgIGlmIChmb3JtYWwudHlwZSA9PSBudWxsKSByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIHByb2NlZHVyZSBpcyBkZWNsYXJlZCBpbiBhbiBleHRlbnNpb24gZGVjbGFyYXRpb24uCiAgYm9vbCBnZXQgaXNFeHRlbnNpb25NZXRob2QgewogICAgcmV0dXJuIHBhcmVudCBpcyBFeHRlbnNpb25CdWlsZGVyOwogIH0KCiAgUHJvY2VkdXJlIGJ1aWxkKFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnlCdWlsZGVyKSB7CiAgICAvLyBUT0RPKGFoZSk6IEkgdGhpbmsgd2UgbWF5IGNhbGwgdGhpcyB0d2ljZSBvbiBwYXJ0cy4gSW52ZXN0aWdhdGUuCiAgICBpZiAoX3Byb2NlZHVyZS5uYW1lID09IG51bGwpIHsKICAgICAgX3Byb2NlZHVyZS5mdW5jdGlvbiA9IGJ1aWxkRnVuY3Rpb24obGlicmFyeUJ1aWxkZXIpOwogICAgICBfcHJvY2VkdXJlLmZ1bmN0aW9uLnBhcmVudCA9IF9wcm9jZWR1cmU7CiAgICAgIF9wcm9jZWR1cmUuZnVuY3Rpb24uZmlsZU9mZnNldCA9IGNoYXJPcGVuUGFyZW5PZmZzZXQ7CiAgICAgIF9wcm9jZWR1cmUuZnVuY3Rpb24uZmlsZUVuZE9mZnNldCA9IF9wcm9jZWR1cmUuZmlsZUVuZE9mZnNldDsKICAgICAgX3Byb2NlZHVyZS5pc0Fic3RyYWN0ID0gaXNBYnN0cmFjdDsKICAgICAgX3Byb2NlZHVyZS5pc0V4dGVybmFsID0gaXNFeHRlcm5hbDsKICAgICAgX3Byb2NlZHVyZS5pc0NvbnN0ID0gaXNDb25zdDsKICAgICAgaWYgKGlzRXh0ZW5zaW9uTWV0aG9kKSB7CiAgICAgICAgRXh0ZW5zaW9uQnVpbGRlciBleHRlbnNpb25CdWlsZGVyID0gcGFyZW50OwogICAgICAgIHByb2NlZHVyZS5pc0V4dGVuc2lvbk1lbWJlciA9IHRydWU7CiAgICAgICAgcHJvY2VkdXJlLmlzU3RhdGljID0gdHJ1ZTsKICAgICAgICBTdHJpbmcga2luZEluZml4ID0gJyc7CiAgICAgICAgaWYgKGlzRXh0ZW5zaW9uSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgICAgIC8vIEluc3RhbmNlIGdldHRlciBhbmQgc2V0dGVyIGFyZSBjb252ZXJ0ZWQgdG8gbWV0aG9kcyBzbyB3ZSB1c2UgYW4KICAgICAgICAgIC8vIGluZml4IHRvIG1ha2UgdGhlaXIgbmFtZXMgdW5pcXVlLgogICAgICAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgICAgICAgIGNhc2UgUHJvY2VkdXJlS2luZC5HZXR0ZXI6CiAgICAgICAgICAgICAga2luZEluZml4ID0gJ2dldCMnOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIFByb2NlZHVyZUtpbmQuU2V0dGVyOgogICAgICAgICAgICAgIGtpbmRJbmZpeCA9ICdzZXQjJzsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBQcm9jZWR1cmVLaW5kLk1ldGhvZDoKICAgICAgICAgICAgY2FzZSBQcm9jZWR1cmVLaW5kLk9wZXJhdG9yOgogICAgICAgICAgICAgIGtpbmRJbmZpeCA9ICcnOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIFByb2NlZHVyZUtpbmQuRmFjdG9yeToKICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgZXh0ZW5zaW9uIG1ldGhvZCBraW5kICR7a2luZH0nKTsKICAgICAgICAgIH0KICAgICAgICAgIHByb2NlZHVyZS5raW5kID0gUHJvY2VkdXJlS2luZC5NZXRob2Q7CiAgICAgICAgfQogICAgICAgIHByb2NlZHVyZS5uYW1lID0gbmV3IE5hbWUoCiAgICAgICAgICAgICcke2V4dGVuc2lvbkJ1aWxkZXIubmFtZX18JHtraW5kSW5maXh9JHtuYW1lfScsCiAgICAgICAgICAgIGxpYnJhcnlCdWlsZGVyLmxpYnJhcnkpOwogICAgICB9IGVsc2UgewogICAgICAgIF9wcm9jZWR1cmUuaXNTdGF0aWMgPSBpc1N0YXRpYzsKICAgICAgICBfcHJvY2VkdXJlLm5hbWUgPSBuZXcgTmFtZShuYW1lLCBsaWJyYXJ5QnVpbGRlci5saWJyYXJ5KTsKICAgICAgfQogICAgfQogICAgaWYgKGV4dGVuc2lvblRlYXJPZmYgIT0gbnVsbCkgewogICAgICBfYnVpbGRFeHRlbnNpb25UZWFyT2ZmKGxpYnJhcnlCdWlsZGVyLCBwYXJlbnQpOwogICAgfQogICAgcmV0dXJuIF9wcm9jZWR1cmU7CiAgfQoKICAvLy8gQ3JlYXRlcyBhIHRvcCBsZXZlbCBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSB0ZWFyIG9mZiBvZiBhbiBleHRlbnNpb24KICAvLy8gaW5zdGFuY2UgbWV0aG9kLgogIC8vLwogIC8vLyBGb3IgdGhpcyBkZWNsYXJhdGlvbgogIC8vLwogIC8vLyAgICAgZXh0ZW5zaW9uIEU8VD4gb24gQTxUPiB7CiAgLy8vICAgICAgIFggbWV0aG9kPFM+KFMgcywgWSB5KSB7fQogIC8vLyAgICAgfQogIC8vLwogIC8vLyB3ZSBjcmVhdGUgdGhlIHRvcCBsZXZlbCBmdW5jdGlvbgogIC8vLwogIC8vLyAgICAgWCBFfG1ldGhvZDxULCBTPihBPFQ+ICN0aGlzLCBTIHMsIFkgeSkge30KICAvLy8KICAvLy8gYW5kIHRoZSB0ZWFyIG9mZiBmdW5jdGlvbgogIC8vLwogIC8vLyAgICAgWCBGdW5jdGlvbjxTPihTLCBZKSBFfGdldCNtZXRob2Q8VD4oQTxUPiAjdGhpcykgewogIC8vLyAgICAgICByZXR1cm4gKFMgcywgWSB5KSA9PiBFfG1ldGhvZDxULCBTPigjdGhpcywgcywgeSk7CiAgLy8vICAgICB9CiAgLy8vCiAgdm9pZCBfYnVpbGRFeHRlbnNpb25UZWFyT2ZmKAogICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5QnVpbGRlciwgRXh0ZW5zaW9uQnVpbGRlciBleHRlbnNpb25CdWlsZGVyKSB7CiAgICBhc3NlcnQoCiAgICAgICAgX2V4dGVuc2lvblRlYXJPZmYgIT0gbnVsbCwgIk5vIGV4dGVuc2lvbiB0ZWFyIG9mZiBjcmVhdGVkIGZvciAkdGhpcy4iKTsKICAgIGlmIChfZXh0ZW5zaW9uVGVhck9mZi5uYW1lICE9IG51bGwpIHJldHVybjsKCiAgICBpbnQgZmlsZU9mZnNldCA9IF9wcm9jZWR1cmUuZmlsZU9mZnNldDsKCiAgICBpbnQgZXh0ZW5zaW9uVHlwZVBhcmFtZXRlckNvdW50ID0KICAgICAgICBleHRlbnNpb25CdWlsZGVyLnR5cGVQYXJhbWV0ZXJzPy5sZW5ndGggPz8gMDsKCiAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzID0gPFR5cGVQYXJhbWV0ZXI+W107CgogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9IDxEYXJ0VHlwZT5bXTsKICAgIGZvciAoVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyIGluIGZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgIFR5cGVQYXJhbWV0ZXIgbmV3VHlwZVBhcmFtZXRlciA9IG5ldyBUeXBlUGFyYW1ldGVyKHR5cGVQYXJhbWV0ZXIubmFtZSk7CiAgICAgIHR5cGVQYXJhbWV0ZXJzLmFkZChuZXdUeXBlUGFyYW1ldGVyKTsKICAgICAgdHlwZUFyZ3VtZW50cy5hZGQobmV3IFR5cGVQYXJhbWV0ZXJUeXBlKG5ld1R5cGVQYXJhbWV0ZXIpKTsKICAgIH0KCiAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHRlYXJPZmZUeXBlUGFyYW1ldGVycyA9IDxUeXBlUGFyYW1ldGVyPltdOwogICAgTGlzdDxUeXBlUGFyYW1ldGVyPiBjbG9zdXJlVHlwZVBhcmFtZXRlcnMgPSA8VHlwZVBhcmFtZXRlcj5bXTsKICAgIFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb24gPQogICAgICAgIFN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoZnVuY3Rpb24udHlwZVBhcmFtZXRlcnMsIHR5cGVBcmd1bWVudHMpOwogICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsgaW5kZXgrKykgewogICAgICBUeXBlUGFyYW1ldGVyIG5ld1R5cGVQYXJhbWV0ZXIgPSB0eXBlUGFyYW1ldGVyc1tpbmRleF07CiAgICAgIG5ld1R5cGVQYXJhbWV0ZXIuYm91bmQgPQogICAgICAgICAgc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzW2luZGV4XS5ib3VuZCk7CiAgICAgIG5ld1R5cGVQYXJhbWV0ZXIuZGVmYXVsdFR5cGUgPSBmdW5jdGlvbi50eXBlUGFyYW1ldGVyc1tpbmRleF0uZGVmYXVsdFR5cGU7CiAgICAgIGlmIChpbmRleCA8IGV4dGVuc2lvblR5cGVQYXJhbWV0ZXJDb3VudCkgewogICAgICAgIHRlYXJPZmZUeXBlUGFyYW1ldGVycy5hZGQobmV3VHlwZVBhcmFtZXRlcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY2xvc3VyZVR5cGVQYXJhbWV0ZXJzLmFkZChuZXdUeXBlUGFyYW1ldGVyKTsKICAgICAgfQogICAgfQoKICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gY29weVBhcmFtZXRlcigKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHBhcmFtZXRlciwgRGFydFR5cGUgdHlwZSwKICAgICAgICB7Ym9vbCBpc09wdGlvbmFsfSkgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBIYW5kbGUgZGVmYXVsdCB2YWx1ZXMuCiAgICAgIHJldHVybiBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihwYXJhbWV0ZXIubmFtZSwKICAgICAgICAgIHR5cGU6IHR5cGUsCiAgICAgICAgICBpbml0aWFsaXplcjogaXNPcHRpb25hbCA/IG5ldyBOdWxsTGl0ZXJhbCgpIDogbnVsbCwKICAgICAgICAgIGlzRmluYWw6IHBhcmFtZXRlci5pc0ZpbmFsKQogICAgICAgIC4uZmlsZU9mZnNldCA9IHBhcmFtZXRlci5maWxlT2Zmc2V0OwogICAgfQoKICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gZXh0ZW5zaW9uVGhpcyA9IGNvcHlQYXJhbWV0ZXIoCiAgICAgICAgZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMuZmlyc3QsCiAgICAgICAgc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmZpcnN0LnR5cGUpLAogICAgICAgIGlzT3B0aW9uYWw6IGZhbHNlKTsKCiAgICBEYXJ0VHlwZSBjbG9zdXJlUmV0dXJuVHlwZSA9CiAgICAgICAgc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGZ1bmN0aW9uLnJldHVyblR5cGUpOwogICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBjbG9zdXJlUG9zaXRpb25hbFBhcmFtZXRlcnMgPSBbXTsKICAgIExpc3Q8RXhwcmVzc2lvbj4gY2xvc3VyZVBvc2l0aW9uYWxBcmd1bWVudHMgPSBbXTsKCiAgICBmb3IgKGludCBwb3NpdGlvbiA9IDA7CiAgICAgICAgcG9zaXRpb24gPCBmdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGg7CiAgICAgICAgcG9zaXRpb24rKykgewogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHBhcmFtZXRlciA9IGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW3Bvc2l0aW9uXTsKICAgICAgaWYgKHBvc2l0aW9uID09IDApIHsKICAgICAgICAvLy8gUGFzcyBgdGhpc2AgYXMgYSBjYXB0dXJlZCB2YXJpYWJsZS4KICAgICAgICBjbG9zdXJlUG9zaXRpb25hbEFyZ3VtZW50cwogICAgICAgICAgICAuYWRkKG5ldyBWYXJpYWJsZUdldChleHRlbnNpb25UaGlzKS4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQpOwogICAgICB9IGVsc2UgewogICAgICAgIERhcnRUeXBlIHR5cGUgPSBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUocGFyYW1ldGVyLnR5cGUpOwogICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gbmV3UGFyYW1ldGVyID0gY29weVBhcmFtZXRlcihwYXJhbWV0ZXIsIHR5cGUsCiAgICAgICAgICAgIGlzT3B0aW9uYWw6IHBvc2l0aW9uID49IGZ1bmN0aW9uLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpOwogICAgICAgIGNsb3N1cmVQb3NpdGlvbmFsUGFyYW1ldGVycy5hZGQobmV3UGFyYW1ldGVyKTsKICAgICAgICBjbG9zdXJlUG9zaXRpb25hbEFyZ3VtZW50cwogICAgICAgICAgICAuYWRkKG5ldyBWYXJpYWJsZUdldChuZXdQYXJhbWV0ZXIpLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldCk7CiAgICAgIH0KICAgIH0KICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gY2xvc3VyZU5hbWVkUGFyYW1ldGVycyA9IFtdOwogICAgTGlzdDxOYW1lZEV4cHJlc3Npb24+IGNsb3N1cmVOYW1lZEFyZ3VtZW50cyA9IFtdOwogICAgZm9yIChWYXJpYWJsZURlY2xhcmF0aW9uIHBhcmFtZXRlciBpbiBmdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMpIHsKICAgICAgRGFydFR5cGUgdHlwZSA9IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShwYXJhbWV0ZXIudHlwZSk7CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gbmV3UGFyYW1ldGVyID0KICAgICAgICAgIGNvcHlQYXJhbWV0ZXIocGFyYW1ldGVyLCB0eXBlLCBpc09wdGlvbmFsOiB0cnVlKTsKICAgICAgY2xvc3VyZU5hbWVkUGFyYW1ldGVycy5hZGQobmV3UGFyYW1ldGVyKTsKICAgICAgY2xvc3VyZU5hbWVkQXJndW1lbnRzLmFkZChuZXcgTmFtZWRFeHByZXNzaW9uKHBhcmFtZXRlci5uYW1lLAogICAgICAgICAgbmV3IFZhcmlhYmxlR2V0KG5ld1BhcmFtZXRlcikuLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0KSk7CiAgICB9CgogICAgU3RhdGVtZW50IGNsb3N1cmVCb2R5ID0gbmV3IFJldHVyblN0YXRlbWVudCgKICAgICAgICBuZXcgU3RhdGljSW52b2NhdGlvbigKICAgICAgICAgICAgcHJvY2VkdXJlLAogICAgICAgICAgICBuZXcgQXJndW1lbnRzKGNsb3N1cmVQb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICAgICAgICAgICAgdHlwZXM6IHR5cGVBcmd1bWVudHMsIG5hbWVkOiBjbG9zdXJlTmFtZWRBcmd1bWVudHMpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldCkKICAgICAgLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKCiAgICBGdW5jdGlvbkV4cHJlc3Npb24gY2xvc3VyZSA9IG5ldyBGdW5jdGlvbkV4cHJlc3Npb24obmV3IEZ1bmN0aW9uTm9kZSgKICAgICAgICBjbG9zdXJlQm9keSwKICAgICAgICB0eXBlUGFyYW1ldGVyczogY2xvc3VyZVR5cGVQYXJhbWV0ZXJzLAogICAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzOiBjbG9zdXJlUG9zaXRpb25hbFBhcmFtZXRlcnMsCiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzOiBjbG9zdXJlTmFtZWRQYXJhbWV0ZXJzLAogICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ6IHByb2NlZHVyZS5mdW5jdGlvbi5yZXF1aXJlZFBhcmFtZXRlckNvdW50IC0gMSwKICAgICAgICByZXR1cm5UeXBlOiBjbG9zdXJlUmV0dXJuVHlwZSwKICAgICAgICBhc3luY01hcmtlcjogcHJvY2VkdXJlLmZ1bmN0aW9uLmFzeW5jTWFya2VyLAogICAgICAgIGRhcnRBc3luY01hcmtlcjogcHJvY2VkdXJlLmZ1bmN0aW9uLmRhcnRBc3luY01hcmtlcikpCiAgICAgIC4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CgogICAgX2V4dGVuc2lvblRlYXJPZmYKICAgICAgLi5uYW1lID0gbmV3IE5hbWUoCiAgICAgICAgICAnJHtleHRlbnNpb25CdWlsZGVyLm5hbWV9fGdldCMke25hbWV9JywgbGlicmFyeUJ1aWxkZXIubGlicmFyeSkKICAgICAgLi5mdW5jdGlvbiA9IG5ldyBGdW5jdGlvbk5vZGUoCiAgICAgICAgICBuZXcgUmV0dXJuU3RhdGVtZW50KGNsb3N1cmUpLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldCwKICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzOiB0ZWFyT2ZmVHlwZVBhcmFtZXRlcnMsCiAgICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVyczogW2V4dGVuc2lvblRoaXNdLAogICAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogMSwKICAgICAgICAgIHJldHVyblR5cGU6IGNsb3N1cmUuZnVuY3Rpb24uZnVuY3Rpb25UeXBlKQogICAgICAuLmZpbGVVcmkgPSBmaWxlVXJpCiAgICAgIC4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICBfZXh0ZW5zaW9uVGVhck9mZi5mdW5jdGlvbi5wYXJlbnQgPSBfZXh0ZW5zaW9uVGVhck9mZjsKICB9CgogIC8vLyBUaGUgW1Byb2NlZHVyZV0gYnVpbHQgYnkgdGhpcyBidWlsZGVyLgogIFByb2NlZHVyZSBnZXQgcHJvY2VkdXJlID0+IGlzUGF0Y2ggPyBvcmlnaW4ucHJvY2VkdXJlIDogX3Byb2NlZHVyZTsKCiAgLy8vIElmIHRoaXMgaXMgYW4gZXh0ZW5zaW9uIGluc3RhbmNlIG1ldGhvZCB0aGVuIFtfZXh0ZW5zaW9uVGVhck9mZl0gaG9sZHMKICAvLy8gdGhlIHN5bnRoZXRpY2FsbHkgY3JlYXRlZCB0ZWFyIG9mZiBmdW5jdGlvbi4KICBQcm9jZWR1cmUgZ2V0IGV4dGVuc2lvblRlYXJPZmYgewogICAgaWYgKGlzRXh0ZW5zaW9uSW5zdGFuY2VNZW1iZXIgJiYga2luZCA9PSBQcm9jZWR1cmVLaW5kLk1ldGhvZCkgewogICAgICBfZXh0ZW5zaW9uVGVhck9mZiA/Pz0gbmV3IFByb2NlZHVyZShudWxsLCBQcm9jZWR1cmVLaW5kLk1ldGhvZCwgbnVsbCwKICAgICAgICAgIGlzU3RhdGljOiB0cnVlLCBpc0V4dGVuc2lvbk1lbWJlcjogdHJ1ZSk7CiAgICB9CiAgICByZXR1cm4gX2V4dGVuc2lvblRlYXJPZmY7CiAgfQoKICBNZW1iZXIgZ2V0IG1lbWJlciA9PiBwcm9jZWR1cmU7CgogIEBvdmVycmlkZQogIGludCBmaW5pc2hQYXRjaCgpIHsKICAgIGlmICghaXNQYXRjaCkgcmV0dXJuIDA7CgogICAgLy8gVE9ETyhhaGUpOiByZXN0b3JlIGZpbGUtb2Zmc2V0IG9uY2Ugd2UgdHJhY2sgYm90aCBvcmlnaW4gYW5kIHBhdGNoIGZpbGUKICAgIC8vIFVSSXMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMzE1NzkKICAgIG9yaWdpbi5wcm9jZWR1cmUuZmlsZVVyaSA9IGZpbGVVcmk7CiAgICBvcmlnaW4ucHJvY2VkdXJlLnN0YXJ0RmlsZU9mZnNldCA9IF9wcm9jZWR1cmUuc3RhcnRGaWxlT2Zmc2V0OwogICAgb3JpZ2luLnByb2NlZHVyZS5maWxlT2Zmc2V0ID0gX3Byb2NlZHVyZS5maWxlT2Zmc2V0OwogICAgb3JpZ2luLnByb2NlZHVyZS5maWxlRW5kT2Zmc2V0ID0gX3Byb2NlZHVyZS5maWxlRW5kT2Zmc2V0OwogICAgb3JpZ2luLnByb2NlZHVyZS5hbm5vdGF0aW9ucwogICAgICAgIC5mb3JFYWNoKChtKSA9PiBtLmZpbGVPZmZzZXQgPSBfcHJvY2VkdXJlLmZpbGVPZmZzZXQpOwoKICAgIG9yaWdpbi5wcm9jZWR1cmUuaXNBYnN0cmFjdCA9IF9wcm9jZWR1cmUuaXNBYnN0cmFjdDsKICAgIG9yaWdpbi5wcm9jZWR1cmUuaXNFeHRlcm5hbCA9IF9wcm9jZWR1cmUuaXNFeHRlcm5hbDsKICAgIG9yaWdpbi5wcm9jZWR1cmUuZnVuY3Rpb24gPSBfcHJvY2VkdXJlLmZ1bmN0aW9uOwogICAgb3JpZ2luLnByb2NlZHVyZS5mdW5jdGlvbi5wYXJlbnQgPSBvcmlnaW4ucHJvY2VkdXJlOwogICAgcmV0dXJuIDE7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlY29tZU5hdGl2ZShMb2FkZXIgbG9hZGVyKSB7CiAgICBfcHJvY2VkdXJlLmlzRXh0ZXJuYWwgPSB0cnVlOwogICAgc3VwZXIuYmVjb21lTmF0aXZlKGxvYWRlcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFwcGx5UGF0Y2goQnVpbGRlciBwYXRjaCkgewogICAgaWYgKHBhdGNoIGlzIFByb2NlZHVyZUJ1aWxkZXIpIHsKICAgICAgaWYgKGNoZWNrUGF0Y2gocGF0Y2gpKSB7CiAgICAgICAgcGF0Y2guYWN0dWFsT3JpZ2luID0gdGhpczsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmVwb3J0UGF0Y2hNaXNtYXRjaChwYXRjaCk7CiAgICB9CiAgfQp9CgovLyBUT0RPKGFoZSk6IE1vdmUgdGhpcyB0byBvd24gZmlsZT8KY2xhc3MgQ29uc3RydWN0b3JCdWlsZGVyIGV4dGVuZHMgRnVuY3Rpb25CdWlsZGVyIHsKICBmaW5hbCBDb25zdHJ1Y3RvciBfY29uc3RydWN0b3I7CgogIGZpbmFsIGludCBjaGFyT3BlblBhcmVuT2Zmc2V0OwoKICBib29sIGhhc01vdmVkU3VwZXJJbml0aWFsaXplciA9IGZhbHNlOwoKICBTdXBlckluaXRpYWxpemVyIHN1cGVySW5pdGlhbGl6ZXI7CgogIFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIgcmVkaXJlY3RpbmdJbml0aWFsaXplcjsKCiAgVG9rZW4gYmVnaW5Jbml0aWFsaXplcnM7CgogIEBvdmVycmlkZQogIENvbnN0cnVjdG9yQnVpbGRlciBhY3R1YWxPcmlnaW47CgogIENvbnN0cnVjdG9yIGdldCBhY3R1YWxDb25zdHJ1Y3RvciA9PiBfY29uc3RydWN0b3I7CgogIENvbnN0cnVjdG9yQnVpbGRlcigKICAgICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLAogICAgICBpbnQgbW9kaWZpZXJzLAogICAgICBUeXBlQnVpbGRlciByZXR1cm5UeXBlLAogICAgICBTdHJpbmcgbmFtZSwKICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzLAogICAgICBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+IGZvcm1hbHMsCiAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGNvbXBpbGF0aW9uVW5pdCwKICAgICAgaW50IHN0YXJ0Q2hhck9mZnNldCwKICAgICAgaW50IGNoYXJPZmZzZXQsCiAgICAgIHRoaXMuY2hhck9wZW5QYXJlbk9mZnNldCwKICAgICAgaW50IGNoYXJFbmRPZmZzZXQsCiAgICAgIFtTdHJpbmcgbmF0aXZlTWV0aG9kTmFtZV0pCiAgICAgIDogX2NvbnN0cnVjdG9yID0gbmV3IENvbnN0cnVjdG9yKG51bGwsIGZpbGVVcmk6IGNvbXBpbGF0aW9uVW5pdD8uZmlsZVVyaSkKICAgICAgICAgIC4uc3RhcnRGaWxlT2Zmc2V0ID0gc3RhcnRDaGFyT2Zmc2V0CiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0CiAgICAgICAgICAuLmZpbGVFbmRPZmZzZXQgPSBjaGFyRW5kT2Zmc2V0LAogICAgICAgIHN1cGVyKG1ldGFkYXRhLCBtb2RpZmllcnMsIHJldHVyblR5cGUsIG5hbWUsIHR5cGVWYXJpYWJsZXMsIGZvcm1hbHMsCiAgICAgICAgICAgIGNvbXBpbGF0aW9uVW5pdCwgY2hhck9mZnNldCwgbmF0aXZlTWV0aG9kTmFtZSk7CgogIEBvdmVycmlkZQogIENvbnN0cnVjdG9yQnVpbGRlciBnZXQgb3JpZ2luID0+IGFjdHVhbE9yaWdpbiA/PyB0aGlzOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0RlY2xhcmF0aW9uSW5zdGFuY2VNZW1iZXIgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQ2xhc3NJbnN0YW5jZU1lbWJlciA9PiBmYWxzZTsKCiAgYm9vbCBnZXQgaXNDb25zdHJ1Y3RvciA9PiB0cnVlOwoKICBBc3luY01hcmtlciBnZXQgYXN5bmNNb2RpZmllciA9PiBBc3luY01hcmtlci5TeW5jOwoKICBQcm9jZWR1cmVLaW5kIGdldCBraW5kID0+IG51bGw7CgogIGJvb2wgZ2V0IGlzUmVkaXJlY3RpbmdHZW5lcmF0aXZlQ29uc3RydWN0b3IgewogICAgcmV0dXJuIGlzUmVkaXJlY3RpbmdHZW5lcmF0aXZlQ29uc3RydWN0b3JJbXBsZW1lbnRhdGlvbihfY29uc3RydWN0b3IpOwogIH0KCiAgYm9vbCBnZXQgaXNFbGlnaWJsZUZvclRvcExldmVsSW5mZXJlbmNlIHsKICAgIGlmIChsaWJyYXJ5LmxlZ2FjeU1vZGUpIHJldHVybiBmYWxzZTsKICAgIGlmIChmb3JtYWxzICE9IG51bGwpIHsKICAgICAgZm9yIChGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIGZvcm1hbCBpbiBmb3JtYWxzKSB7CiAgICAgICAgaWYgKGZvcm1hbC50eXBlID09IG51bGwgJiYgZm9ybWFsLmlzSW5pdGlhbGl6aW5nRm9ybWFsKSByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgTWVtYmVyIGJ1aWxkKFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnlCdWlsZGVyKSB7CiAgICBpZiAoX2NvbnN0cnVjdG9yLm5hbWUgPT0gbnVsbCkgewogICAgICBfY29uc3RydWN0b3IuZnVuY3Rpb24gPSBidWlsZEZ1bmN0aW9uKGxpYnJhcnlCdWlsZGVyKTsKICAgICAgX2NvbnN0cnVjdG9yLmZ1bmN0aW9uLnBhcmVudCA9IF9jb25zdHJ1Y3RvcjsKICAgICAgX2NvbnN0cnVjdG9yLmZ1bmN0aW9uLmZpbGVPZmZzZXQgPSBjaGFyT3BlblBhcmVuT2Zmc2V0OwogICAgICBfY29uc3RydWN0b3IuZnVuY3Rpb24uZmlsZUVuZE9mZnNldCA9IF9jb25zdHJ1Y3Rvci5maWxlRW5kT2Zmc2V0OwogICAgICBfY29uc3RydWN0b3IuZnVuY3Rpb24udHlwZVBhcmFtZXRlcnMgPSBjb25zdCA8VHlwZVBhcmFtZXRlcj5bXTsKICAgICAgX2NvbnN0cnVjdG9yLmlzQ29uc3QgPSBpc0NvbnN0OwogICAgICBfY29uc3RydWN0b3IuaXNFeHRlcm5hbCA9IGlzRXh0ZXJuYWw7CiAgICAgIF9jb25zdHJ1Y3Rvci5uYW1lID0gbmV3IE5hbWUobmFtZSwgbGlicmFyeUJ1aWxkZXIubGlicmFyeSk7CiAgICB9CiAgICBpZiAoaXNFbGlnaWJsZUZvclRvcExldmVsSW5mZXJlbmNlKSB7CiAgICAgIGZvciAoRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBmb3JtYWwgaW4gZm9ybWFscykgewogICAgICAgIGlmIChmb3JtYWwudHlwZSA9PSBudWxsICYmIGZvcm1hbC5pc0luaXRpYWxpemluZ0Zvcm1hbCkgewogICAgICAgICAgZm9ybWFsLnZhcmlhYmxlLnR5cGUgPSBudWxsOwogICAgICAgIH0KICAgICAgfQogICAgICBsaWJyYXJ5QnVpbGRlci5sb2FkZXIudHlwZUluZmVyZW5jZUVuZ2luZS50b0JlSW5mZXJyZWRbX2NvbnN0cnVjdG9yXSA9CiAgICAgICAgICBsaWJyYXJ5QnVpbGRlcjsKICAgIH0KICAgIHJldHVybiBfY29uc3RydWN0b3I7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJ1aWxkT3V0bGluZUV4cHJlc3Npb25zKExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgIHN1cGVyLmJ1aWxkT3V0bGluZUV4cHJlc3Npb25zKGxpYnJhcnkpOwoKICAgIC8vIEZvciBtb2R1bGFyIGNvbXBpbGF0aW9uIHB1cnBvc2VzIHdlIG5lZWQgdG8gaW5jbHVkZSBpbml0aWFsaXplcnMKICAgIC8vIGZvciBjb25zdCBjb25zdHJ1Y3RvcnMgaW50byB0aGUgb3V0bGluZS4KICAgIGlmIChpc0NvbnN0ICYmIGJlZ2luSW5pdGlhbGl6ZXJzICE9IG51bGwpIHsKICAgICAgQ2xhc3NCdWlsZGVyIGNsYXNzQnVpbGRlciA9IHBhcmVudDsKICAgICAgQm9keUJ1aWxkZXIgYm9keUJ1aWxkZXIgPSBsaWJyYXJ5LmxvYWRlcgogICAgICAgICAgLmNyZWF0ZUJvZHlCdWlsZGVyRm9yT3V0bGluZUV4cHJlc3Npb24oCiAgICAgICAgICAgICAgbGlicmFyeSwgY2xhc3NCdWlsZGVyLCB0aGlzLCBjbGFzc0J1aWxkZXIuc2NvcGUsIGZpbGVVcmkpOwogICAgICBib2R5QnVpbGRlci5jb25zdGFudENvbnRleHQgPSBDb25zdGFudENvbnRleHQuaW5mZXJyZWQ7CiAgICAgIGJvZHlCdWlsZGVyLnBhcnNlSW5pdGlhbGl6ZXJzKGJlZ2luSW5pdGlhbGl6ZXJzKTsKICAgICAgYm9keUJ1aWxkZXIucmVzb2x2ZVJlZGlyZWN0aW5nRmFjdG9yeVRhcmdldHMoKTsKICAgIH0KICAgIGJlZ2luSW5pdGlhbGl6ZXJzID0gbnVsbDsKICB9CgogIEZ1bmN0aW9uTm9kZSBidWlsZEZ1bmN0aW9uKExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgIC8vIEFjY29yZGluZyB0byB0aGUgc3BlY2lmaWNhdGlvbiDCpzkuMyB0aGUgcmV0dXJuIHR5cGUgb2YgYSBjb25zdHJ1Y3RvcgogICAgLy8gZnVuY3Rpb24gaXMgaXRzIGVuY2xvc2luZyBjbGFzcy4KICAgIEZ1bmN0aW9uTm9kZSBmdW5jdGlvbk5vZGUgPSBzdXBlci5idWlsZEZ1bmN0aW9uKGxpYnJhcnkpOwogICAgQ2xhc3NCdWlsZGVyIGVuY2xvc2luZ0NsYXNzQnVpbGRlciA9IHBhcmVudDsKICAgIENsYXNzIGVuY2xvc2luZ0NsYXNzID0gZW5jbG9zaW5nQ2xhc3NCdWlsZGVyLmNsczsKICAgIExpc3Q8RGFydFR5cGU+IHR5cGVQYXJhbWV0ZXJUeXBlcyA9IG5ldyBMaXN0PERhcnRUeXBlPigpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbmNsb3NpbmdDbGFzcy50eXBlUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICBUeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIgPSBlbmNsb3NpbmdDbGFzcy50eXBlUGFyYW1ldGVyc1tpXTsKICAgICAgdHlwZVBhcmFtZXRlclR5cGVzLmFkZChuZXcgVHlwZVBhcmFtZXRlclR5cGUodHlwZVBhcmFtZXRlcikpOwogICAgfQogICAgZnVuY3Rpb25Ob2RlLnJldHVyblR5cGUgPQogICAgICAgIG5ldyBJbnRlcmZhY2VUeXBlKGVuY2xvc2luZ0NsYXNzLCB0eXBlUGFyYW1ldGVyVHlwZXMpOwogICAgcmV0dXJuIGZ1bmN0aW9uTm9kZTsKICB9CgogIC8vLyBUaGUgW0NvbnN0cnVjdG9yXSBidWlsdCBieSB0aGlzIGJ1aWxkZXIuCiAgQ29uc3RydWN0b3IgZ2V0IGNvbnN0cnVjdG9yID0+IGlzUGF0Y2ggPyBvcmlnaW4uY29uc3RydWN0b3IgOiBfY29uc3RydWN0b3I7CgogIE1lbWJlciBnZXQgbWVtYmVyID0+IGNvbnN0cnVjdG9yOwoKICB2b2lkIGluamVjdEludmFsaWRJbml0aWFsaXplcigKICAgICAgTWVzc2FnZSBtZXNzYWdlLCBpbnQgY2hhck9mZnNldCwgRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIpIHsKICAgIExpc3Q8SW5pdGlhbGl6ZXI+IGluaXRpYWxpemVycyA9IF9jb25zdHJ1Y3Rvci5pbml0aWFsaXplcnM7CiAgICBJbml0aWFsaXplciBsYXN0SW5pdGlhbGl6ZXIgPSBpbml0aWFsaXplcnMucmVtb3ZlTGFzdCgpOwogICAgYXNzZXJ0KGxhc3RJbml0aWFsaXplciA9PSBzdXBlckluaXRpYWxpemVyIHx8CiAgICAgICAgbGFzdEluaXRpYWxpemVyID09IHJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIpOwogICAgSW5pdGlhbGl6ZXIgZXJyb3IgPSBoZWxwZXIuYnVpbGRJbnZhbGlkSW5pdGlhbGl6ZXIoCiAgICAgICAgaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKAogICAgICAgICAgICBoZWxwZXIuYnVpbGRQcm9ibGVtKG1lc3NhZ2UsIGNoYXJPZmZzZXQsIG5vTGVuZ3RoKSksCiAgICAgICAgY2hhck9mZnNldCk7CiAgICBpbml0aWFsaXplcnMuYWRkKGVycm9yLi5wYXJlbnQgPSBfY29uc3RydWN0b3IpOwogICAgaW5pdGlhbGl6ZXJzLmFkZChsYXN0SW5pdGlhbGl6ZXIpOwogIH0KCiAgdm9pZCBhZGRJbml0aWFsaXplcigKICAgICAgSW5pdGlhbGl6ZXIgaW5pdGlhbGl6ZXIsIEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyKSB7CiAgICBMaXN0PEluaXRpYWxpemVyPiBpbml0aWFsaXplcnMgPSBfY29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzOwogICAgaWYgKGluaXRpYWxpemVyIGlzIFN1cGVySW5pdGlhbGl6ZXIpIHsKICAgICAgaWYgKHN1cGVySW5pdGlhbGl6ZXIgIT0gbnVsbCB8fCByZWRpcmVjdGluZ0luaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgICBpbmplY3RJbnZhbGlkSW5pdGlhbGl6ZXIobWVzc2FnZU1vcmVUaGFuT25lU3VwZXJPclRoaXNJbml0aWFsaXplciwKICAgICAgICAgICAgaW5pdGlhbGl6ZXIuZmlsZU9mZnNldCwgaGVscGVyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbml0aWFsaXplcnMuYWRkKGluaXRpYWxpemVyLi5wYXJlbnQgPSBfY29uc3RydWN0b3IpOwogICAgICAgIHN1cGVySW5pdGlhbGl6ZXIgPSBpbml0aWFsaXplcjsKICAgICAgfQogICAgfSBlbHNlIGlmIChpbml0aWFsaXplciBpcyBSZWRpcmVjdGluZ0luaXRpYWxpemVyKSB7CiAgICAgIGlmIChzdXBlckluaXRpYWxpemVyICE9IG51bGwgfHwgcmVkaXJlY3RpbmdJbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgaW5qZWN0SW52YWxpZEluaXRpYWxpemVyKG1lc3NhZ2VNb3JlVGhhbk9uZVN1cGVyT3JUaGlzSW5pdGlhbGl6ZXIsCiAgICAgICAgICAgIGluaXRpYWxpemVyLmZpbGVPZmZzZXQsIGhlbHBlcik7CiAgICAgIH0gZWxzZSBpZiAoX2NvbnN0cnVjdG9yLmluaXRpYWxpemVycy5pc05vdEVtcHR5KSB7CiAgICAgICAgSW5pdGlhbGl6ZXIgZmlyc3QgPSBfY29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzLmZpcnN0OwogICAgICAgIEluaXRpYWxpemVyIGVycm9yID0gaGVscGVyLmJ1aWxkSW52YWxpZEluaXRpYWxpemVyKAogICAgICAgICAgICBoZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oaGVscGVyLmJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgICAgIG1lc3NhZ2VUaGlzSW5pdGlhbGl6ZXJOb3RBbG9uZSwgZmlyc3QuZmlsZU9mZnNldCwgbm9MZW5ndGgpKSwKICAgICAgICAgICAgZmlyc3QuZmlsZU9mZnNldCk7CiAgICAgICAgaW5pdGlhbGl6ZXJzLmFkZChlcnJvci4ucGFyZW50ID0gX2NvbnN0cnVjdG9yKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbml0aWFsaXplcnMuYWRkKGluaXRpYWxpemVyLi5wYXJlbnQgPSBfY29uc3RydWN0b3IpOwogICAgICAgIHJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIgPSBpbml0aWFsaXplcjsKICAgICAgfQogICAgfSBlbHNlIGlmIChyZWRpcmVjdGluZ0luaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgaW5qZWN0SW52YWxpZEluaXRpYWxpemVyKAogICAgICAgICAgbWVzc2FnZVRoaXNJbml0aWFsaXplck5vdEFsb25lLCBpbml0aWFsaXplci5maWxlT2Zmc2V0LCBoZWxwZXIpOwogICAgfSBlbHNlIGlmIChzdXBlckluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgaW5qZWN0SW52YWxpZEluaXRpYWxpemVyKAogICAgICAgICAgbWVzc2FnZVN1cGVySW5pdGlhbGl6ZXJOb3RMYXN0LCBzdXBlckluaXRpYWxpemVyLmZpbGVPZmZzZXQsIGhlbHBlcik7CiAgICB9IGVsc2UgewogICAgICBpbml0aWFsaXplcnMuYWRkKGluaXRpYWxpemVyLi5wYXJlbnQgPSBfY29uc3RydWN0b3IpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGZpbmlzaFBhdGNoKCkgewogICAgaWYgKCFpc1BhdGNoKSByZXR1cm4gMDsKCiAgICAvLyBUT0RPKGFoZSk6IHJlc3RvcmUgZmlsZS1vZmZzZXQgb25jZSB3ZSB0cmFjayBib3RoIG9yaWdpbiBhbmQgcGF0Y2ggZmlsZQogICAgLy8gVVJJcy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvc2RrL2lzc3Vlcy8zMTU3OQogICAgb3JpZ2luLmNvbnN0cnVjdG9yLmZpbGVVcmkgPSBmaWxlVXJpOwogICAgb3JpZ2luLmNvbnN0cnVjdG9yLnN0YXJ0RmlsZU9mZnNldCA9IF9jb25zdHJ1Y3Rvci5zdGFydEZpbGVPZmZzZXQ7CiAgICBvcmlnaW4uY29uc3RydWN0b3IuZmlsZU9mZnNldCA9IF9jb25zdHJ1Y3Rvci5maWxlT2Zmc2V0OwogICAgb3JpZ2luLmNvbnN0cnVjdG9yLmZpbGVFbmRPZmZzZXQgPSBfY29uc3RydWN0b3IuZmlsZUVuZE9mZnNldDsKICAgIG9yaWdpbi5jb25zdHJ1Y3Rvci5hbm5vdGF0aW9ucwogICAgICAgIC5mb3JFYWNoKChtKSA9PiBtLmZpbGVPZmZzZXQgPSBfY29uc3RydWN0b3IuZmlsZU9mZnNldCk7CgogICAgb3JpZ2luLmNvbnN0cnVjdG9yLmlzRXh0ZXJuYWwgPSBfY29uc3RydWN0b3IuaXNFeHRlcm5hbDsKICAgIG9yaWdpbi5jb25zdHJ1Y3Rvci5mdW5jdGlvbiA9IF9jb25zdHJ1Y3Rvci5mdW5jdGlvbjsKICAgIG9yaWdpbi5jb25zdHJ1Y3Rvci5mdW5jdGlvbi5wYXJlbnQgPSBvcmlnaW4uY29uc3RydWN0b3I7CiAgICBvcmlnaW4uY29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzID0gX2NvbnN0cnVjdG9yLmluaXRpYWxpemVyczsKICAgIHNldFBhcmVudHMob3JpZ2luLmNvbnN0cnVjdG9yLmluaXRpYWxpemVycywgb3JpZ2luLmNvbnN0cnVjdG9yKTsKICAgIHJldHVybiAxOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWNvbWVOYXRpdmUoTG9hZGVyIGxvYWRlcikgewogICAgX2NvbnN0cnVjdG9yLmlzRXh0ZXJuYWwgPSB0cnVlOwogICAgc3VwZXIuYmVjb21lTmF0aXZlKGxvYWRlcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFwcGx5UGF0Y2goQnVpbGRlciBwYXRjaCkgewogICAgaWYgKHBhdGNoIGlzIENvbnN0cnVjdG9yQnVpbGRlcikgewogICAgICBpZiAoY2hlY2tQYXRjaChwYXRjaCkpIHsKICAgICAgICBwYXRjaC5hY3R1YWxPcmlnaW4gPSB0aGlzOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZXBvcnRQYXRjaE1pc21hdGNoKHBhdGNoKTsKICAgIH0KICB9CgogIHZvaWQgcHJlcGFyZUluaXRpYWxpemVycygpIHsKICAgIC8vIEZvciBjb25zdCBjb25zdHJ1Y3RvcnMgd2UgcGFyc2UgaW5pdGlhbGl6ZXJzIGFscmVhZHkgYXQgdGhlIG91dGxpbmluZwogICAgLy8gc3RhZ2UsIHRoZXJlIGlzIG5vIGVhc3kgd2F5IHRvIG1ha2UgYm9keSBidWlsZGluZyBzdGFnZSBza2lwIGluaXRpYWxpemVyCiAgICAvLyBwYXJzaW5nLCBzbyB3ZSBzaW1wbHkgY2xlYXIgcGFyc2VkIGluaXRpYWxpemVycyBhbmQgcmVidWlsZCB0aGVtCiAgICAvLyBhZ2Fpbi4KICAgIC8vIE5vdGU6IHRoaXMgbWV0aG9kIGNsZWFycyBib3RoIGluaXRpYWxpemVycyBmcm9tIHRoZSB0YXJnZXQgS2VybmVsIG5vZGUKICAgIC8vIGFuZCBpbnRlcm5hbCBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggcGFyc2luZyBpbml0aWFsaXplcnMuCiAgICBpZiAoY29uc3RydWN0b3IuaXNDb25zdCkgewogICAgICBjb25zdHJ1Y3Rvci5pbml0aWFsaXplcnMubGVuZ3RoID0gMDsKICAgICAgcmVkaXJlY3RpbmdJbml0aWFsaXplciA9IG51bGw7CiAgICAgIHN1cGVySW5pdGlhbGl6ZXIgPSBudWxsOwogICAgICBoYXNNb3ZlZFN1cGVySW5pdGlhbGl6ZXIgPSBmYWxzZTsKICAgIH0KICB9Cn0KCmNsYXNzIFJlZGlyZWN0aW5nRmFjdG9yeUJ1aWxkZXIgZXh0ZW5kcyBQcm9jZWR1cmVCdWlsZGVyIHsKICBmaW5hbCBDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXIgcmVkaXJlY3Rpb25UYXJnZXQ7CiAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50czsKCiAgUmVkaXJlY3RpbmdGYWN0b3J5QnVpbGRlcigKICAgICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLAogICAgICBpbnQgbW9kaWZpZXJzLAogICAgICBUeXBlQnVpbGRlciByZXR1cm5UeXBlLAogICAgICBTdHJpbmcgbmFtZSwKICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzLAogICAgICBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+IGZvcm1hbHMsCiAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGNvbXBpbGF0aW9uVW5pdCwKICAgICAgaW50IHN0YXJ0Q2hhck9mZnNldCwKICAgICAgaW50IGNoYXJPZmZzZXQsCiAgICAgIGludCBjaGFyT3BlblBhcmVuT2Zmc2V0LAogICAgICBpbnQgY2hhckVuZE9mZnNldCwKICAgICAgW1N0cmluZyBuYXRpdmVNZXRob2ROYW1lLAogICAgICB0aGlzLnJlZGlyZWN0aW9uVGFyZ2V0XSkKICAgICAgOiBzdXBlcigKICAgICAgICAgICAgbWV0YWRhdGEsCiAgICAgICAgICAgIG1vZGlmaWVycywKICAgICAgICAgICAgcmV0dXJuVHlwZSwKICAgICAgICAgICAgbmFtZSwKICAgICAgICAgICAgdHlwZVZhcmlhYmxlcywKICAgICAgICAgICAgZm9ybWFscywKICAgICAgICAgICAgUHJvY2VkdXJlS2luZC5GYWN0b3J5LAogICAgICAgICAgICBjb21waWxhdGlvblVuaXQsCiAgICAgICAgICAgIHN0YXJ0Q2hhck9mZnNldCwKICAgICAgICAgICAgY2hhck9mZnNldCwKICAgICAgICAgICAgY2hhck9wZW5QYXJlbk9mZnNldCwKICAgICAgICAgICAgY2hhckVuZE9mZnNldCwKICAgICAgICAgICAgbmF0aXZlTWV0aG9kTmFtZSk7CgogIEBvdmVycmlkZQogIFN0YXRlbWVudCBnZXQgYm9keSA9PiBfYm9keTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KE1lbWJlciB0YXJnZXQsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIGlmIChfYm9keSAhPSBudWxsKSB7CiAgICAgIHVuZXhwZWN0ZWQoIm51bGwiLCAiJHtfYm9keS5ydW50aW1lVHlwZX0iLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICAgIH0KCiAgICAvLyBFbnN1cmUgdGhhdCBjb25zdGFudCBmYWN0b3JpZXMgb25seSBoYXZlIGNvbnN0YW50IHRhcmdldHMvYm9kaWVzLgogICAgaWYgKGlzQ29uc3QgJiYgIXRhcmdldC5pc0NvbnN0KSB7CiAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbShtZXNzYWdlQ29uc3RGYWN0b3J5UmVkaXJlY3Rpb25Ub05vbkNvbnN0LCBjaGFyT2Zmc2V0LAogICAgICAgICAgbm9MZW5ndGgsIGZpbGVVcmkpOwogICAgfQoKICAgIF9ib2R5ID0gbmV3IFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkodGFyZ2V0LCB0eXBlQXJndW1lbnRzKTsKICAgIGZ1bmN0aW9uLmJvZHkgPSBfYm9keTsKICAgIF9ib2R5Py5wYXJlbnQgPSBmdW5jdGlvbjsKICAgIGlmIChpc1BhdGNoKSB7CiAgICAgIGlmIChmdW5jdGlvbi50eXBlUGFyYW1ldGVycyAhPSBudWxsKSB7CiAgICAgICAgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBzdWJzdGl0dXRpb24gPSA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+e307CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmdW5jdGlvbi50eXBlUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgc3Vic3RpdHV0aW9uW2Z1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzW2ldXSA9CiAgICAgICAgICAgICAgbmV3IFR5cGVQYXJhbWV0ZXJUeXBlKGFjdHVhbE9yaWdpbi5mdW5jdGlvbi50eXBlUGFyYW1ldGVyc1tpXSk7CiAgICAgICAgfQogICAgICAgIExpc3Q8RGFydFR5cGU+IG5ld1R5cGVBcmd1bWVudHMgPQogICAgICAgICAgICBuZXcgTGlzdDxEYXJ0VHlwZT4odHlwZUFyZ3VtZW50cy5sZW5ndGgpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmV3VHlwZUFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgbmV3VHlwZUFyZ3VtZW50c1tpXSA9IHN1YnN0aXR1dGUodHlwZUFyZ3VtZW50c1tpXSwgc3Vic3RpdHV0aW9uKTsKICAgICAgICB9CiAgICAgICAgdHlwZUFyZ3VtZW50cyA9IG5ld1R5cGVBcmd1bWVudHM7CiAgICAgIH0KICAgICAgYWN0dWFsT3JpZ2luLnNldFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkodGFyZ2V0LCB0eXBlQXJndW1lbnRzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIFByb2NlZHVyZSBidWlsZChTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICBQcm9jZWR1cmUgcmVzdWx0ID0gc3VwZXIuYnVpbGQobGlicmFyeSk7CiAgICByZXN1bHQuaXNSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvciA9IHRydWU7CiAgICBpZiAocmVkaXJlY3Rpb25UYXJnZXQudHlwZUFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIHR5cGVBcmd1bWVudHMgPQogICAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+KHJlZGlyZWN0aW9uVGFyZ2V0LnR5cGVBcmd1bWVudHMubGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlQXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdHlwZUFyZ3VtZW50c1tpXSA9IHJlZGlyZWN0aW9uVGFyZ2V0LnR5cGVBcmd1bWVudHNbaV0uYnVpbGQobGlicmFyeSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZmluaXNoUGF0Y2goKSB7CiAgICBpZiAoIWlzUGF0Y2gpIHJldHVybiAwOwoKICAgIHN1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YXJpYWJsZUJ1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIERhcnRUeXBlLAogICAgICAgIER5bmFtaWNUeXBlLAogICAgICAgIEZ1bmN0aW9uVHlwZSwKICAgICAgICBOYW1lZFR5cGUsCiAgICAgICAgU3VwZXJ0eXBlLAogICAgICAgIFR5cGVQYXJhbWV0ZXIsCiAgICAgICAgVHlwZWRlZlR5cGU7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93IExvY2F0ZWRNZXNzYWdlLCBtZXNzYWdlU3VwZXJ0eXBlSXNGdW5jdGlvbiwgbm9MZW5ndGg7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgdW5zdXBwb3J0ZWQ7CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIsCiAgICAgICAgTGlicmFyeUJ1aWxkZXIsCiAgICAgICAgVHlwZUJ1aWxkZXIsCiAgICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlcjsKCmNsYXNzIEZ1bmN0aW9uVHlwZUJ1aWxkZXIgZXh0ZW5kcyBUeXBlQnVpbGRlciB7CiAgZmluYWwgVHlwZUJ1aWxkZXIgcmV0dXJuVHlwZTsKICBmaW5hbCBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXM7CiAgZmluYWwgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBmb3JtYWxzOwoKICBGdW5jdGlvblR5cGVCdWlsZGVyKHRoaXMucmV0dXJuVHlwZSwgdGhpcy50eXBlVmFyaWFibGVzLCB0aGlzLmZvcm1hbHMpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWUgPT4gIkZ1bmN0aW9uIjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nQnVmZmVyIHByaW50T24oU3RyaW5nQnVmZmVyIGJ1ZmZlcikgewogICAgaWYgKHR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICBidWZmZXIud3JpdGUoIjwiKTsKICAgICAgYm9vbCBpc0ZpcnN0ID0gdHJ1ZTsKICAgICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIHQgaW4gdHlwZVZhcmlhYmxlcykgewogICAgICAgIGlmICghaXNGaXJzdCkgewogICAgICAgICAgYnVmZmVyLndyaXRlKCIsICIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpc0ZpcnN0ID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGJ1ZmZlci53cml0ZSh0Lm5hbWUpOwogICAgICB9CiAgICAgIGJ1ZmZlci53cml0ZSgiPiIpOwogICAgfQogICAgYnVmZmVyLndyaXRlKCIoIik7CiAgICBpZiAoZm9ybWFscyAhPSBudWxsKSB7CiAgICAgIGJvb2wgaXNGaXJzdCA9IHRydWU7CiAgICAgIGZvciAoZHluYW1pYyB0IGluIGZvcm1hbHMpIHsKICAgICAgICBpZiAoIWlzRmlyc3QpIHsKICAgICAgICAgIGJ1ZmZlci53cml0ZSgiLCAiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaXNGaXJzdCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBidWZmZXIud3JpdGUodD8uZnVsbE5hbWVGb3JFcnJvcnMpOwogICAgICB9CiAgICB9CiAgICBidWZmZXIud3JpdGUoIikgLT4gIik7CiAgICBidWZmZXIud3JpdGUocmV0dXJuVHlwZT8uZnVsbE5hbWVGb3JFcnJvcnMpOwogICAgcmV0dXJuIGJ1ZmZlcjsKICB9CgogIEZ1bmN0aW9uVHlwZSBidWlsZChMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBbVHlwZWRlZlR5cGUgb3JpZ2luXSkgewogICAgRGFydFR5cGUgYnVpbHRSZXR1cm5UeXBlID0KICAgICAgICByZXR1cm5UeXBlPy5idWlsZChsaWJyYXJ5KSA/PyBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgTGlzdDxEYXJ0VHlwZT4gcG9zaXRpb25hbFBhcmFtZXRlcnMgPSA8RGFydFR5cGU+W107CiAgICBMaXN0PE5hbWVkVHlwZT4gbmFtZWRQYXJhbWV0ZXJzOwogICAgaW50IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPSAwOwogICAgaWYgKGZvcm1hbHMgIT0gbnVsbCkgewogICAgICBmb3IgKEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZm9ybWFsIGluIGZvcm1hbHMpIHsKICAgICAgICBEYXJ0VHlwZSB0eXBlID0gZm9ybWFsLnR5cGU/LmJ1aWxkKGxpYnJhcnkpID8/IGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICAgICAgaWYgKGZvcm1hbC5pc1Bvc2l0aW9uYWwpIHsKICAgICAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzLmFkZCh0eXBlKTsKICAgICAgICAgIGlmIChmb3JtYWwuaXNSZXF1aXJlZCkgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCsrOwogICAgICAgIH0gZWxzZSBpZiAoZm9ybWFsLmlzTmFtZWQpIHsKICAgICAgICAgIG5hbWVkUGFyYW1ldGVycyA/Pz0gPE5hbWVkVHlwZT5bXTsKICAgICAgICAgIG5hbWVkUGFyYW1ldGVycy5hZGQobmV3IE5hbWVkVHlwZShmb3JtYWwubmFtZSwgdHlwZSwKICAgICAgICAgICAgICBpc1JlcXVpcmVkOiBmb3JtYWwuaXNOYW1lZFJlcXVpcmVkKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChuYW1lZFBhcmFtZXRlcnMgIT0gbnVsbCkgewogICAgICAgIG5hbWVkUGFyYW1ldGVycy5zb3J0KCk7CiAgICAgIH0KICAgIH0KICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnM7CiAgICBpZiAodHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgIHR5cGVQYXJhbWV0ZXJzID0gPFR5cGVQYXJhbWV0ZXI+W107CiAgICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciB0IGluIHR5cGVWYXJpYWJsZXMpIHsKICAgICAgICB0eXBlUGFyYW1ldGVycy5hZGQodC5wYXJhbWV0ZXIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uVHlwZShwb3NpdGlvbmFsUGFyYW1ldGVycywgYnVpbHRSZXR1cm5UeXBlLAogICAgICAgIG5hbWVkUGFyYW1ldGVyczogbmFtZWRQYXJhbWV0ZXJzID8/IGNvbnN0IDxOYW1lZFR5cGU+W10sCiAgICAgICAgdHlwZVBhcmFtZXRlcnM6IHR5cGVQYXJhbWV0ZXJzID8/IGNvbnN0IDxUeXBlUGFyYW1ldGVyPltdLAogICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ6IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICAgICAgdHlwZWRlZlR5cGU6IG9yaWdpbik7CiAgfQoKICBTdXBlcnR5cGUgYnVpbGRTdXBlcnR5cGUoCiAgICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSkgewogICAgbGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgIG1lc3NhZ2VTdXBlcnR5cGVJc0Z1bmN0aW9uLCBjaGFyT2Zmc2V0LCBub0xlbmd0aCwgZmlsZVVyaSk7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIFN1cGVydHlwZSBidWlsZE1peGVkSW5UeXBlKAogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBpbnQgY2hhck9mZnNldCwgVXJpIGZpbGVVcmkpIHsKICAgIHJldHVybiBidWlsZFN1cGVydHlwZShsaWJyYXJ5LCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICB9CgogIEBvdmVycmlkZQogIGJ1aWxkSW52YWxpZFR5cGUoTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZSwge0xpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHR9KSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoImJ1aWxkSW52YWxpZFR5cGUiLCBtZXNzYWdlLmNoYXJPZmZzZXQsIG1lc3NhZ2UudXJpKTsKICB9CgogIEZ1bmN0aW9uVHlwZUJ1aWxkZXIgY2xvbmUoTGlzdDxUeXBlQnVpbGRlcj4gbmV3VHlwZXMpIHsKICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gY2xvbmVkVHlwZVZhcmlhYmxlczsKICAgIGlmICh0eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgY2xvbmVkVHlwZVZhcmlhYmxlcyA9IG5ldyBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+KHR5cGVWYXJpYWJsZXMubGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbG9uZWRUeXBlVmFyaWFibGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgY2xvbmVkVHlwZVZhcmlhYmxlc1tpXSA9IHR5cGVWYXJpYWJsZXNbaV0uY2xvbmUobmV3VHlwZXMpOwogICAgICB9CiAgICB9CiAgICBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+IGNsb25lZEZvcm1hbHM7CiAgICBpZiAoZm9ybWFscyAhPSBudWxsKSB7CiAgICAgIGNsb25lZEZvcm1hbHMgPSBuZXcgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPihmb3JtYWxzLmxlbmd0aCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2xvbmVkRm9ybWFscy5sZW5ndGg7IGkrKykgewogICAgICAgIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZm9ybWFsID0gZm9ybWFsc1tpXTsKICAgICAgICBjbG9uZWRGb3JtYWxzW2ldID0gZm9ybWFsLmNsb25lKG5ld1R5cGVzKTsKICAgICAgfQogICAgfQogICAgRnVuY3Rpb25UeXBlQnVpbGRlciBuZXdUeXBlID0gbmV3IEZ1bmN0aW9uVHlwZUJ1aWxkZXIoCiAgICAgICAgcmV0dXJuVHlwZT8uY2xvbmUobmV3VHlwZXMpLCBjbG9uZWRUeXBlVmFyaWFibGVzLCBjbG9uZWRGb3JtYWxzKTsKICAgIG5ld1R5cGVzLmFkZChuZXdUeXBlKTsKICAgIHJldHVybiBuZXdUeXBlOwogIH0KfQqAmABOTjwBJQFNASEJEhUWExMXFQEdPwEsAScJIBgVHQEwIDEuAUoBDBsBDCYBDC4hGRs1GB4RGwoeCBkGFxsbIxgeERsKLAgGGzETBAFFHzs4JSQbN0wjKjslLT80CgglIAgGKCEqNSkIBkNBQzgeBAEcPRhEEQQBHj05BAEMTU0EATozIVE9QwgGMBtINzQzCAY7ShsUBAIBPnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2Z1bmN0aW9uX3R5cGVfYnVpbGRlci5kYXJ0RnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9idWlsZGVyL2ludmFsaWRfdHlwZV9idWlsZGVyLmRhcnSFjC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmludmFsaWRfdHlwZV9idWlsZGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBEYXJ0VHlwZSwgSW52YWxpZFR5cGU7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnIHNob3cgTG9jYXRlZE1lc3NhZ2U7CgppbXBvcnQgJ2J1aWxkZXIuZGFydCcgc2hvdyBUeXBlRGVjbGFyYXRpb25CdWlsZGVyOwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydCcgc2hvdyBUeXBlQnVpbGRlciwgTGlicmFyeUJ1aWxkZXI7CgpjbGFzcyBJbnZhbGlkVHlwZUJ1aWxkZXIgZXh0ZW5kcyBUeXBlRGVjbGFyYXRpb25CdWlsZGVyIHsKICBTdHJpbmcgZ2V0IGRlYnVnTmFtZSA9PiAiSW52YWxpZFR5cGVCdWlsZGVyIjsKCiAgZmluYWwgTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZTsKCiAgZmluYWwgTGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dDsKCiAgZmluYWwgYm9vbCBzdXBwcmVzc01lc3NhZ2U7CgogIEludmFsaWRUeXBlQnVpbGRlcihTdHJpbmcgbmFtZSwgdGhpcy5tZXNzYWdlLAogICAgICB7dGhpcy5jb250ZXh0LCB0aGlzLnN1cHByZXNzTWVzc2FnZTogdHJ1ZX0pCiAgICAgIDogc3VwZXIobnVsbCwgMCwgbmFtZSwgbnVsbCwgbWVzc2FnZS5jaGFyT2Zmc2V0LCBtZXNzYWdlLnVyaSk7CgogIEBvdmVycmlkZQogIEludmFsaWRUeXBlIGdldCB0YXJnZXQgPT4gY29uc3QgSW52YWxpZFR5cGUoKTsKCiAgRGFydFR5cGUgYnVpbGRUeXBlKExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50cykgewogICAgcmV0dXJuIGJ1aWxkVHlwZXNXaXRoQnVpbHRBcmd1bWVudHMobGlicmFyeSwgbnVsbCk7CiAgfQoKICAvLy8gW0FyZ3VtZW50c10gaGF2ZSBhbHJlYWR5IGJlZW4gYnVpbHQuCiAgRGFydFR5cGUgYnVpbGRUeXBlc1dpdGhCdWlsdEFyZ3VtZW50cygKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzKSB7CiAgICBpZiAoIXN1cHByZXNzTWVzc2FnZSkgewogICAgICBsaWJyYXJ5LmFkZFByb2JsZW0obWVzc2FnZS5tZXNzYWdlT2JqZWN0LCBtZXNzYWdlLmNoYXJPZmZzZXQsCiAgICAgICAgICBtZXNzYWdlLmxlbmd0aCwgbWVzc2FnZS51cmksCiAgICAgICAgICBjb250ZXh0OiBjb250ZXh0KTsKICAgIH0KICAgIHJldHVybiBjb25zdCBJbnZhbGlkVHlwZSgpOwogIH0KfQovAE5OPAEkAT0BMgEzAUkBOjABIAEmAR4BMDJFAQwxAUw4BAErKTocRCcdBiAEAgE9cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvaW52YWxpZF90eXBlX2J1aWxkZXIuZGFydEJzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci9tZXRhZGF0YV9idWlsZGVyLmRhcnSGbi8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLm1ldGFkYXRhX2J1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IEFubm90YXRhYmxlLCBDbGFzcywgTGlicmFyeTsKCmltcG9ydCAnLi4va2VybmVsL2JvZHlfYnVpbGRlci5kYXJ0JyBzaG93IEJvZHlCdWlsZGVyOwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydCcgc2hvdyBDbGFzc0J1aWxkZXIsIE1lbWJlckJ1aWxkZXI7CgppbXBvcnQgJy4uL3NjYW5uZXIuZGFydCcgc2hvdyBUb2tlbjsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnLi4vc2NvcGUuZGFydCcgc2hvdyBTY29wZTsKCmNsYXNzIE1ldGFkYXRhQnVpbGRlciB7CiAgZmluYWwgVG9rZW4gYmVnaW5Ub2tlbjsKCiAgaW50IGdldCBjaGFyT2Zmc2V0ID0+IGJlZ2luVG9rZW4uY2hhck9mZnNldDsKCiAgTWV0YWRhdGFCdWlsZGVyKHRoaXMuYmVnaW5Ub2tlbik7CgogIHN0YXRpYyB2b2lkIGJ1aWxkQW5ub3RhdGlvbnMoCiAgICAgIEFubm90YXRhYmxlIHBhcmVudCwKICAgICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLAogICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LAogICAgICBDbGFzc0J1aWxkZXIgY2xhc3NCdWlsZGVyLAogICAgICBNZW1iZXJCdWlsZGVyIG1lbWJlcikgewogICAgaWYgKG1ldGFkYXRhID09IG51bGwpIHJldHVybjsKICAgIFVyaSBmaWxlVXJpID0gbWVtYmVyPy5maWxlVXJpID8/IGNsYXNzQnVpbGRlcj8uZmlsZVVyaSA/PyBsaWJyYXJ5LmZpbGVVcmk7CiAgICBTY29wZSBzY29wZSA9IHBhcmVudCBpcyBMaWJyYXJ5IHx8IHBhcmVudCBpcyBDbGFzcyB8fCBjbGFzc0J1aWxkZXIgPT0gbnVsbAogICAgICAgID8gbGlicmFyeS5zY29wZQogICAgICAgIDogY2xhc3NCdWlsZGVyLnNjb3BlOwogICAgQm9keUJ1aWxkZXIgYm9keUJ1aWxkZXIgPSBsaWJyYXJ5LmxvYWRlcgogICAgICAgIC5jcmVhdGVCb2R5QnVpbGRlckZvck91dGxpbmVFeHByZXNzaW9uKAogICAgICAgICAgICBsaWJyYXJ5LCBjbGFzc0J1aWxkZXIsIG1lbWJlciwgc2NvcGUsIGZpbGVVcmkpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtZXRhZGF0YS5sZW5ndGg7ICsraSkgewogICAgICBNZXRhZGF0YUJ1aWxkZXIgYW5ub3RhdGlvbkJ1aWxkZXIgPSBtZXRhZGF0YVtpXTsKICAgICAgcGFyZW50LmFkZEFubm90YXRpb24oCiAgICAgICAgICBib2R5QnVpbGRlci5wYXJzZUFubm90YXRpb24oYW5ub3RhdGlvbkJ1aWxkZXIuYmVnaW5Ub2tlbikpOwogICAgfQogICAgYm9keUJ1aWxkZXIuaW5mZXJBbm5vdGF0aW9ucyhwYXJlbnQuYW5ub3RhdGlvbnMpOwogICAgYm9keUJ1aWxkZXIucmVzb2x2ZVJlZGlyZWN0aW5nRmFjdG9yeVRhcmdldHMoKTsKICB9Cn0KMgBOTjwBIAFDATcBSQElAUoBIwEYGgEvASQBIBomJCEeIk9PGB4tMDwwNxxGBjY0BAIBOXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL21ldGFkYXRhX2J1aWxkZXIuZGFydEtzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci9taXhpbl9hcHBsaWNhdGlvbl9idWlsZGVyLmRhcnSIHC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLm1peGluX2FwcGxpY2F0aW9uX2J1aWxkZXI7CgppbXBvcnQgJ2J1aWxkZXIuZGFydCcgc2hvdyBMaWJyYXJ5QnVpbGRlciwgVHlwZUJ1aWxkZXIsIFR5cGVWYXJpYWJsZUJ1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IEludGVyZmFjZVR5cGUsIFN1cGVydHlwZTsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcgc2hvdyBMb2NhdGVkTWVzc2FnZTsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyB1bnN1cHBvcnRlZDsKCmNsYXNzIE1peGluQXBwbGljYXRpb25CdWlsZGVyIGV4dGVuZHMgVHlwZUJ1aWxkZXIgewogIGZpbmFsIFR5cGVCdWlsZGVyIHN1cGVydHlwZTsKICBmaW5hbCBMaXN0PFR5cGVCdWlsZGVyPiBtaXhpbnM7CiAgU3VwZXJ0eXBlIGJ1aWx0VHlwZTsKCiAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzOwoKICBNaXhpbkFwcGxpY2F0aW9uQnVpbGRlcih0aGlzLnN1cGVydHlwZSwgdGhpcy5taXhpbnMpOwoKICBTdHJpbmcgZ2V0IG5hbWUgPT4gbnVsbDsKCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWUgPT4gIk1peGluQXBwbGljYXRpb25CdWlsZGVyIjsKCiAgU3RyaW5nQnVmZmVyIHByaW50T24oU3RyaW5nQnVmZmVyIGJ1ZmZlcikgewogICAgYnVmZmVyLndyaXRlKHN1cGVydHlwZSk7CiAgICBidWZmZXIud3JpdGUoIiB3aXRoICIpOwogICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICBmb3IgKFR5cGVCdWlsZGVyIHQgaW4gbWl4aW5zKSB7CiAgICAgIGlmICghZmlyc3QpIGJ1ZmZlci53cml0ZSgiLCAiKTsKICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgdC5wcmludE9uKGJ1ZmZlcik7CiAgICB9CiAgICByZXR1cm4gYnVmZmVyOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBidWlsZChMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICBpbnQgY2hhck9mZnNldCA9IC0xOyAvLyBUT0RPKGFoZSk6IFByb3ZpZGUgdGhlc2UuCiAgICBVcmkgZmlsZVVyaSA9IG51bGw7IC8vIFRPRE8oYWhlKTogUHJvdmlkZSB0aGVzZS4KICAgIHJldHVybiB1bnN1cHBvcnRlZCgiYnVpbGQiLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICB9CgogIEBvdmVycmlkZQogIFN1cGVydHlwZSBidWlsZFN1cGVydHlwZSgKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpKSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoImJ1aWxkU3VwZXJ0eXBlIiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdXBlcnR5cGUgYnVpbGRNaXhlZEluVHlwZSgKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpKSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoImJ1aWxkTWl4ZWRJblR5cGUiLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICB9CgogIEBvdmVycmlkZQogIGJ1aWxkSW52YWxpZFR5cGUoTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZSwge0xpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHR9KSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoImJ1aWxkSW52YWxpZFR5cGUiLCBtZXNzYWdlLmNoYXJPZmZzZXQsIG1lc3NhZ2UudXJpKTsKICB9CgogIE1peGluQXBwbGljYXRpb25CdWlsZGVyIGNsb25lKExpc3Q8VHlwZUJ1aWxkZXI+IG5ld1R5cGVzKSB7CiAgICBpbnQgY2hhck9mZnNldCA9IC0xOyAvLyBUT0RPKGRtaXRyeWFzKTogUHJvdmlkZSB0aGVzZS4KICAgIFVyaSBmaWxlVXJpID0gbnVsbDsgLy8gVE9ETyhkbWl0cnlhcyk6IFByb3ZpZGUgdGhlc2UuCiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoImNsb25lIiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgfQp9CkcATk48ASkBTQFAATIBLAE0HyIXASsBOAEbATUBLh0cFyQmFRkGEwQBDDA2NTYEAQwcPT8EAQwePUEEAQxNTQQBPjs6NgQCAUJwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9taXhpbl9hcHBsaWNhdGlvbl9idWlsZGVyLmRhcnQ/c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2J1aWxkZXIvbmFtZV9pdGVyYXRvci5kYXJ0gWwvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5uYW1lX2l0ZXJhdG9yOwoKaW1wb3J0ICdidWlsZGVyLmRhcnQnIHNob3cgQnVpbGRlcjsKCmFic3RyYWN0IGNsYXNzIE5hbWVJdGVyYXRvciBpbXBsZW1lbnRzIEl0ZXJhdG9yPEJ1aWxkZXI+IHsKICBTdHJpbmcgZ2V0IG5hbWU7Cn0KDQBOTjwBHQEkATsTAgE2cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvbmFtZV9pdGVyYXRvci5kYXJ0RHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9idWlsZGVyL25hbWVkX3R5cGVfYnVpbGRlci5kYXJ0o9UvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5uYW1lZF90eXBlX2J1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IERhcnRUeXBlLCBTdXBlcnR5cGU7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93CiAgICAgICAgTWVzc2FnZSwKICAgICAgICBUZW1wbGF0ZSwKICAgICAgICBub0xlbmd0aCwKICAgICAgICB0ZW1wbGF0ZU1pc3NpbmdFeHBsaWNpdFR5cGVBcmd1bWVudHMsCiAgICAgICAgbWVzc2FnZU5vdEFUeXBlQ29udGV4dCwKICAgICAgICBMb2NhdGVkTWVzc2FnZSwKICAgICAgICB0ZW1wbGF0ZU5vdEFUeXBlLAogICAgICAgIHRlbXBsYXRlVHlwZUFyZ3VtZW50TWlzbWF0Y2gsCiAgICAgICAgdGVtcGxhdGVUeXBlQXJndW1lbnRzT25UeXBlVmFyaWFibGUsCiAgICAgICAgdGVtcGxhdGVUeXBlTm90Rm91bmQ7CgppbXBvcnQgJy4uL21lc3NhZ2VzLmRhcnQnCiAgICBzaG93IG5vTGVuZ3RoLCB0ZW1wbGF0ZVN1cGVydHlwZUlzSWxsZWdhbCwgdGVtcGxhdGVTdXBlcnR5cGVJc1R5cGVWYXJpYWJsZTsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyB1bmhhbmRsZWQ7CgppbXBvcnQgJy4uL3NldmVyaXR5LmRhcnQnIHNob3cgU2V2ZXJpdHk7CgppbXBvcnQgJ2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBCdWlsZGVyLAogICAgICAgIElkZW50aWZpZXIsCiAgICAgICAgTGlicmFyeUJ1aWxkZXIsCiAgICAgICAgUHJlZml4QnVpbGRlciwKICAgICAgICBRdWFsaWZpZWROYW1lLAogICAgICAgIFNjb3BlLAogICAgICAgIFR5cGVCdWlsZGVyLAogICAgICAgIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIsCiAgICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlciwKICAgICAgICBmbGF0dGVuTmFtZTsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgQ2xhc3NCdWlsZGVyLAogICAgICAgIEludmFsaWRUeXBlQnVpbGRlciwKICAgICAgICBMaWJyYXJ5QnVpbGRlciwKICAgICAgICBUeXBlQnVpbGRlciwKICAgICAgICBUeXBlRGVjbGFyYXRpb25CdWlsZGVyLAogICAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXIsCiAgICAgICAgZmxhdHRlbk5hbWU7CgpjbGFzcyBOYW1lZFR5cGVCdWlsZGVyIGV4dGVuZHMgVHlwZUJ1aWxkZXIgewogIGZpbmFsIE9iamVjdCBuYW1lOwoKICBMaXN0PFR5cGVCdWlsZGVyPiBhcmd1bWVudHM7CgogIEBvdmVycmlkZQogIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIgZGVjbGFyYXRpb247CgogIE5hbWVkVHlwZUJ1aWxkZXIodGhpcy5uYW1lLCB0aGlzLmFyZ3VtZW50cyk7CgogIE5hbWVkVHlwZUJ1aWxkZXIuZnJvbVR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIodGhpcy5kZWNsYXJhdGlvbiwKICAgICAgW3RoaXMuYXJndW1lbnRzXSkKICAgICAgOiB0aGlzLm5hbWUgPSBkZWNsYXJhdGlvbi5uYW1lOwoKICBAb3ZlcnJpZGUKICB2b2lkIGJpbmQoVHlwZURlY2xhcmF0aW9uQnVpbGRlciBkZWNsYXJhdGlvbikgewogICAgdGhpcy5kZWNsYXJhdGlvbiA9IGRlY2xhcmF0aW9uPy5vcmlnaW47CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlc29sdmVJbigKICAgICAgU2NvcGUgc2NvcGUsIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgaWYgKGRlY2xhcmF0aW9uICE9IG51bGwpIHJldHVybjsKICAgIGZpbmFsIE9iamVjdCBuYW1lID0gdGhpcy5uYW1lOwogICAgQnVpbGRlciBtZW1iZXI7CiAgICBpZiAobmFtZSBpcyBRdWFsaWZpZWROYW1lKSB7CiAgICAgIE9iamVjdCBxdWFsaWZpZXIgPSBuYW1lLnF1YWxpZmllcjsKICAgICAgU3RyaW5nIHByZWZpeE5hbWUgPSBmbGF0dGVuTmFtZShxdWFsaWZpZXIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgICBCdWlsZGVyIHByZWZpeCA9IHNjb3BlLmxvb2t1cChwcmVmaXhOYW1lLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICAgICAgaWYgKHByZWZpeCBpcyBQcmVmaXhCdWlsZGVyKSB7CiAgICAgICAgbWVtYmVyID0gcHJlZml4Lmxvb2t1cChuYW1lLm5hbWUsIG5hbWUuY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAobmFtZSBpcyBTdHJpbmcpIHsKICAgICAgbWVtYmVyID0gc2NvcGUubG9va3VwKG5hbWUsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgfSBlbHNlIHsKICAgICAgdW5oYW5kbGVkKCIke25hbWUucnVudGltZVR5cGV9IiwgInJlc29sdmVJbiIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgfQogICAgaWYgKG1lbWJlciBpcyBUeXBlVmFyaWFibGVCdWlsZGVyKSB7CiAgICAgIGRlY2xhcmF0aW9uID0gbWVtYmVyLm9yaWdpbjsKICAgICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgICAgU3RyaW5nIHR5cGVOYW1lOwogICAgICAgIGludCB0eXBlTmFtZU9mZnNldDsKICAgICAgICBpZiAobmFtZSBpcyBJZGVudGlmaWVyKSB7CiAgICAgICAgICB0eXBlTmFtZSA9IG5hbWUubmFtZTsKICAgICAgICAgIHR5cGVOYW1lT2Zmc2V0ID0gbmFtZS5jaGFyT2Zmc2V0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0eXBlTmFtZSA9IG5hbWU7CiAgICAgICAgICB0eXBlTmFtZU9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgICAgICAgfQogICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9CiAgICAgICAgICAgIHRlbXBsYXRlVHlwZUFyZ3VtZW50c09uVHlwZVZhcmlhYmxlLndpdGhBcmd1bWVudHModHlwZU5hbWUpOwogICAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbShtZXNzYWdlLCB0eXBlTmFtZU9mZnNldCwgdHlwZU5hbWUubGVuZ3RoLCBmaWxlVXJpKTsKICAgICAgICBkZWNsYXJhdGlvbiA9IGJ1aWxkSW52YWxpZFR5cGUoCiAgICAgICAgICAgIG1lc3NhZ2Uud2l0aExvY2F0aW9uKGZpbGVVcmksIHR5cGVOYW1lT2Zmc2V0LCB0eXBlTmFtZS5sZW5ndGgpKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYgKG1lbWJlciBpcyBUeXBlRGVjbGFyYXRpb25CdWlsZGVyKSB7CiAgICAgIGRlY2xhcmF0aW9uID0gbWVtYmVyLm9yaWdpbjsKICAgICAgaWYgKCFkZWNsYXJhdGlvbi5pc0V4dGVuc2lvbikgewogICAgICAgIGlmIChhcmd1bWVudHMgPT0gbnVsbCAmJiBkZWNsYXJhdGlvbi50eXBlVmFyaWFibGVzQ291bnQgIT0gMCkgewogICAgICAgICAgU3RyaW5nIHR5cGVOYW1lOwogICAgICAgICAgaW50IHR5cGVOYW1lT2Zmc2V0OwogICAgICAgICAgaWYgKG5hbWUgaXMgSWRlbnRpZmllcikgewogICAgICAgICAgICB0eXBlTmFtZSA9IG5hbWUubmFtZTsKICAgICAgICAgICAgdHlwZU5hbWVPZmZzZXQgPSBuYW1lLmNoYXJPZmZzZXQ7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0eXBlTmFtZSA9IG5hbWU7CiAgICAgICAgICAgIHR5cGVOYW1lT2Zmc2V0ID0gY2hhck9mZnNldDsKICAgICAgICAgIH0KICAgICAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgICAgICB0ZW1wbGF0ZU1pc3NpbmdFeHBsaWNpdFR5cGVBcmd1bWVudHMKICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlc0NvdW50KSwKICAgICAgICAgICAgICB0eXBlTmFtZU9mZnNldCwKICAgICAgICAgICAgICB0eXBlTmFtZS5sZW5ndGgsCiAgICAgICAgICAgICAgZmlsZVVyaSk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlID0KICAgICAgICBtZW1iZXIgPT0gbnVsbCA/IHRlbXBsYXRlVHlwZU5vdEZvdW5kIDogdGVtcGxhdGVOb3RBVHlwZTsKICAgIFN0cmluZyBmbGF0TmFtZSA9IGZsYXR0ZW5OYW1lKG5hbWUsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgTGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dDsKICAgIGlmIChtZW1iZXIgIT0gbnVsbCkgewogICAgICBjb250ZXh0ID0gPExvY2F0ZWRNZXNzYWdlPlsKICAgICAgICBtZXNzYWdlTm90QVR5cGVDb250ZXh0LndpdGhMb2NhdGlvbihtZW1iZXIuZmlsZVVyaSwgbWVtYmVyLmNoYXJPZmZzZXQsCiAgICAgICAgICAgIG5hbWUgaXMgSWRlbnRpZmllciA/IG5hbWUubmFtZS5sZW5ndGggOiAiJG5hbWUiLmxlbmd0aCkKICAgICAgXTsKICAgIH0KICAgIGludCBsZW5ndGggPQogICAgICAgIG5hbWUgaXMgSWRlbnRpZmllciA/IG5hbWUuZW5kQ2hhck9mZnNldCAtIGNoYXJPZmZzZXQgOiBmbGF0TmFtZS5sZW5ndGg7CiAgICBNZXNzYWdlIG1lc3NhZ2UgPSB0ZW1wbGF0ZS53aXRoQXJndW1lbnRzKGZsYXROYW1lKTsKICAgIGxpYnJhcnkuYWRkUHJvYmxlbShtZXNzYWdlLCBjaGFyT2Zmc2V0LCBsZW5ndGgsIGZpbGVVcmksIGNvbnRleHQ6IGNvbnRleHQpOwogICAgZGVjbGFyYXRpb24gPSBidWlsZEludmFsaWRUeXBlKAogICAgICAgIG1lc3NhZ2Uud2l0aExvY2F0aW9uKGZpbGVVcmksIGNoYXJPZmZzZXQsIGxlbmd0aCksCiAgICAgICAgY29udGV4dDogY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNoZWNrKExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSkgewogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsICYmCiAgICAgICAgYXJndW1lbnRzLmxlbmd0aCAhPSBkZWNsYXJhdGlvbi50eXBlVmFyaWFibGVzQ291bnQpIHsKICAgICAgTWVzc2FnZSBtZXNzYWdlID0gdGVtcGxhdGVUeXBlQXJndW1lbnRNaXNtYXRjaAogICAgICAgICAgLndpdGhBcmd1bWVudHMoZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlc0NvdW50KTsKICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKG1lc3NhZ2UsIGNoYXJPZmZzZXQsIG5vTGVuZ3RoLCBmaWxlVXJpKTsKICAgICAgZGVjbGFyYXRpb24gPQogICAgICAgICAgYnVpbGRJbnZhbGlkVHlwZShtZXNzYWdlLndpdGhMb2NhdGlvbihmaWxlVXJpLCBjaGFyT2Zmc2V0LCBub0xlbmd0aCkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBub3JtYWxpemUoaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpKSB7CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwgJiYKICAgICAgICBhcmd1bWVudHMubGVuZ3RoICE9IGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXNDb3VudCkgewogICAgICAvLyBbYXJndW1lbnRzXSB3aWxsIGJlIG5vcm1hbGl6ZWQgbGF0ZXIgaWYgdGhleSBhcmUgbnVsbC4KICAgICAgYXJndW1lbnRzID0gbnVsbDsKICAgIH0KICB9CgogIFN0cmluZyBnZXQgZGVidWdOYW1lID0+ICJOYW1lZFR5cGVCdWlsZGVyIjsKCiAgU3RyaW5nQnVmZmVyIHByaW50T24oU3RyaW5nQnVmZmVyIGJ1ZmZlcikgewogICAgYnVmZmVyLndyaXRlKG5hbWUpOwogICAgaWYgKGFyZ3VtZW50cz8uaXNFbXB0eSA/PyB0cnVlKSByZXR1cm4gYnVmZmVyOwogICAgYnVmZmVyLndyaXRlKCI8Iik7CiAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgIGZvciAoVHlwZUJ1aWxkZXIgdCBpbiBhcmd1bWVudHMpIHsKICAgICAgaWYgKCFmaXJzdCkgYnVmZmVyLndyaXRlKCIsICIpOwogICAgICBmaXJzdCA9IGZhbHNlOwogICAgICB0LnByaW50T24oYnVmZmVyKTsKICAgIH0KICAgIGJ1ZmZlci53cml0ZSgiPiIpOwogICAgcmV0dXJuIGJ1ZmZlcjsKICB9CgogIEludmFsaWRUeXBlQnVpbGRlciBidWlsZEludmFsaWRUeXBlKExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2UsCiAgICAgIHtMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0fSkgewogICAgLy8gVE9ETyhhaGUpOiBDb25zaWRlciBpZiBpdCBtYWtlcyBzZW5zZSB0byBwYXNzIGEgUXVhbGlmaWVkTmFtZSB0bwogICAgLy8gSW52YWxpZFR5cGVCdWlsZGVyPwogICAgcmV0dXJuIG5ldyBJbnZhbGlkVHlwZUJ1aWxkZXIoCiAgICAgICAgZmxhdHRlbk5hbWUobmFtZSwgbWVzc2FnZS5jaGFyT2Zmc2V0LCBtZXNzYWdlLnVyaSksIG1lc3NhZ2UsCiAgICAgICAgY29udGV4dDogY29udGV4dCk7CiAgfQoKICBTdXBlcnR5cGUgaGFuZGxlSW52YWxpZFN1cGVydHlwZSgKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpKSB7CiAgICBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGUgPQogICAgICAgIGRlY2xhcmF0aW9uLmlzVHlwZVZhcmlhYmxlCiAgICAgICAgICAgID8gdGVtcGxhdGVTdXBlcnR5cGVJc1R5cGVWYXJpYWJsZQogICAgICAgICAgICA6IHRlbXBsYXRlU3VwZXJ0eXBlSXNJbGxlZ2FsOwogICAgbGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgIHRlbXBsYXRlLndpdGhBcmd1bWVudHMoZmxhdHRlbk5hbWUobmFtZSwgY2hhck9mZnNldCwgZmlsZVVyaSkpLAogICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgZmlsZVVyaSk7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIERhcnRUeXBlIGJ1aWxkKExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgIGFzc2VydChkZWNsYXJhdGlvbiAhPSBudWxsLCAiRGVjbGFyYXRpb24gaGFzIG5vdCBiZWVuIHJlc29sdmVkIG9uICR0aGlzLiIpOwogICAgcmV0dXJuIGRlY2xhcmF0aW9uLmJ1aWxkVHlwZShsaWJyYXJ5LCBhcmd1bWVudHMpOwogIH0KCiAgU3VwZXJ0eXBlIGJ1aWxkU3VwZXJ0eXBlKAogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBpbnQgY2hhck9mZnNldCwgVXJpIGZpbGVVcmkpIHsKICAgIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIgZGVjbGFyYXRpb24gPSB0aGlzLmRlY2xhcmF0aW9uOwogICAgaWYgKGRlY2xhcmF0aW9uIGlzIENsYXNzQnVpbGRlcikgewogICAgICByZXR1cm4gZGVjbGFyYXRpb24uYnVpbGRTdXBlcnR5cGUobGlicmFyeSwgYXJndW1lbnRzKTsKICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24gaXMgSW52YWxpZFR5cGVCdWlsZGVyKSB7CiAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgIGRlY2xhcmF0aW9uLm1lc3NhZ2UubWVzc2FnZU9iamVjdCwKICAgICAgICAgIGRlY2xhcmF0aW9uLm1lc3NhZ2UuY2hhck9mZnNldCwKICAgICAgICAgIGRlY2xhcmF0aW9uLm1lc3NhZ2UubGVuZ3RoLAogICAgICAgICAgZGVjbGFyYXRpb24ubWVzc2FnZS51cmksCiAgICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3IpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBoYW5kbGVJbnZhbGlkU3VwZXJ0eXBlKGxpYnJhcnksIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgfQogIH0KCiAgU3VwZXJ0eXBlIGJ1aWxkTWl4ZWRJblR5cGUoCiAgICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSkgewogICAgVHlwZURlY2xhcmF0aW9uQnVpbGRlciBkZWNsYXJhdGlvbiA9IHRoaXMuZGVjbGFyYXRpb247CiAgICBpZiAoZGVjbGFyYXRpb24gaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgIHJldHVybiBkZWNsYXJhdGlvbi5idWlsZE1peGVkSW5UeXBlKGxpYnJhcnksIGFyZ3VtZW50cyk7CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIEludmFsaWRUeXBlQnVpbGRlcikgewogICAgICBsaWJyYXJ5LmFkZFByb2JsZW0oCiAgICAgICAgICBkZWNsYXJhdGlvbi5tZXNzYWdlLm1lc3NhZ2VPYmplY3QsCiAgICAgICAgICBkZWNsYXJhdGlvbi5tZXNzYWdlLmNoYXJPZmZzZXQsCiAgICAgICAgICBkZWNsYXJhdGlvbi5tZXNzYWdlLmxlbmd0aCwKICAgICAgICAgIGRlY2xhcmF0aW9uLm1lc3NhZ2UudXJpLAogICAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gaGFuZGxlSW52YWxpZFN1cGVydHlwZShsaWJyYXJ5LCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICAgIH0KICB9CgogIFR5cGVCdWlsZGVyIHN1YnN0KE1hcDxUeXBlVmFyaWFibGVCdWlsZGVyLCBUeXBlQnVpbGRlcj4gc3Vic3RpdHV0aW9uKSB7CiAgICBUeXBlQnVpbGRlciByZXN1bHQgPSBzdWJzdGl0dXRpb25bZGVjbGFyYXRpb25dOwogICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7CiAgICAgIGFzc2VydChkZWNsYXJhdGlvbiBpcyBUeXBlVmFyaWFibGVCdWlsZGVyKTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgTGlzdDxUeXBlQnVpbGRlcj4gYXJndW1lbnRzOwogICAgICBpbnQgaSA9IDA7CiAgICAgIGZvciAoVHlwZUJ1aWxkZXIgYXJndW1lbnQgaW4gdGhpcy5hcmd1bWVudHMpIHsKICAgICAgICBUeXBlQnVpbGRlciB0eXBlID0gYXJndW1lbnQuc3Vic3Qoc3Vic3RpdHV0aW9uKTsKICAgICAgICBpZiAodHlwZSAhPSBhcmd1bWVudCkgewogICAgICAgICAgYXJndW1lbnRzID8/PSB0aGlzLmFyZ3VtZW50cy50b0xpc3QoKTsKICAgICAgICAgIGFyZ3VtZW50c1tpXSA9IHR5cGU7CiAgICAgICAgfQogICAgICAgIGkrKzsKICAgICAgfQogICAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgICByZXR1cm4gbmV3IE5hbWVkVHlwZUJ1aWxkZXIobmFtZSwgYXJndW1lbnRzKS4uYmluZChkZWNsYXJhdGlvbik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0aGlzOwogIH0KCiAgTmFtZWRUeXBlQnVpbGRlciBjbG9uZShMaXN0PFR5cGVCdWlsZGVyPiBuZXdUeXBlcykgewogICAgTGlzdDxUeXBlQnVpbGRlcj4gY2xvbmVkQXJndW1lbnRzOwogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGNsb25lZEFyZ3VtZW50cyA9IG5ldyBMaXN0PFR5cGVCdWlsZGVyPihhcmd1bWVudHMubGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbG9uZWRBcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBjbG9uZWRBcmd1bWVudHNbaV0gPSBhcmd1bWVudHNbaV0uY2xvbmUobmV3VHlwZXMpOwogICAgICB9CiAgICB9CiAgICBOYW1lZFR5cGVCdWlsZGVyIG5ld1R5cGUgPSBuZXcgTmFtZWRUeXBlQnVpbGRlcihuYW1lLCBjbG9uZWRBcmd1bWVudHMpOwogICAgbmV3VHlwZXMuYWRkKG5ld1R5cGUpOwogICAgcmV0dXJuIG5ld1R5cGU7CiAgfQp9CoEgAE5OPAEiATsBHQkREhIuIBgaJi0eARpQASoBKQEWCREUGBcXDxUgHRUBJwkWHBgVIB0VAS0VAR8BDCYBLwFAGCYBDDIsBAEMEkolIxQhKUdGJUUIITgNSgYpIx8ZHCIgLBEbJwoaSU8oTQgOMyMmSBseJCIuEx0pDB4zQh4fGAoQCAY3Qj4iGiJPRAkGEVA4UCQ7GwQBDEQdPjU6QhRRBgQBDDAdPkAYBgQBLgEuGDMXFycmFRkGFxMEAT4oSBsjRRsEASQ9NyMuKhhIFBISEQQBK1A2BAEcPTsnPTQaLSomIyUTDUMGBAEePTsnPzQaLSomIyUTDUMGBAFKNBoyFSQjETU5IDEfCg0IH0kIBhEEATcnHUE5OwgGTBsUBAIBO3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL25hbWVkX3R5cGVfYnVpbGRlci5kYXJ0QHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9idWlsZGVyL3ByZWZpeF9idWlsZGVyLmRhcnSGxC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnByZWZpeF9idWlsZGVyOwoKaW1wb3J0ICdidWlsZGVyLmRhcnQnIHNob3cgQnVpbGRlciwgTGlicmFyeUJ1aWxkZXIsIFNjb3BlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBMaWJyYXJ5RGVwZW5kZW5jeTsKCmltcG9ydCAnLi4vYnVpbGRlci9idWlsZGVyLmRhcnQnIHNob3cgTGlicmFyeUJ1aWxkZXI7CgppbXBvcnQgJy4uL2tlcm5lbC9sb2FkX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IExvYWRMaWJyYXJ5QnVpbGRlcjsKCmNsYXNzIFByZWZpeEJ1aWxkZXIgZXh0ZW5kcyBCdWlsZGVyIHsKICBmaW5hbCBTdHJpbmcgbmFtZTsKCiAgZmluYWwgU2NvcGUgZXhwb3J0U2NvcGUgPSBuZXcgU2NvcGUudG9wKCk7CgogIGZpbmFsIExpYnJhcnlCdWlsZGVyIHBhcmVudDsKCiAgZmluYWwgYm9vbCBkZWZlcnJlZDsKCiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CgogIGZpbmFsIGludCBpbXBvcnRJbmRleDsKCiAgZmluYWwgTGlicmFyeURlcGVuZGVuY3kgZGVwZW5kZW5jeTsKCiAgTG9hZExpYnJhcnlCdWlsZGVyIGxvYWRMaWJyYXJ5QnVpbGRlcjsKCiAgUHJlZml4QnVpbGRlcih0aGlzLm5hbWUsIHRoaXMuZGVmZXJyZWQsIHRoaXMucGFyZW50LCB0aGlzLmRlcGVuZGVuY3ksCiAgICAgIHRoaXMuY2hhck9mZnNldCwgdGhpcy5pbXBvcnRJbmRleCkgewogICAgaWYgKGRlZmVycmVkKSB7CiAgICAgIGxvYWRMaWJyYXJ5QnVpbGRlciA9CiAgICAgICAgICBuZXcgTG9hZExpYnJhcnlCdWlsZGVyKHBhcmVudCwgZGVwZW5kZW5jeSwgY2hhck9mZnNldCk7CiAgICAgIGFkZFRvRXhwb3J0U2NvcGUoJ2xvYWRMaWJyYXJ5JywgbG9hZExpYnJhcnlCdWlsZGVyLCBjaGFyT2Zmc2V0KTsKICAgIH0KICB9CgogIFVyaSBnZXQgZmlsZVVyaSA9PiBwYXJlbnQuZmlsZVVyaTsKCiAgQnVpbGRlciBsb29rdXAoU3RyaW5nIG5hbWUsIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSkgewogICAgcmV0dXJuIGV4cG9ydFNjb3BlLmxvb2t1cChuYW1lLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICB9CgogIHZvaWQgYWRkVG9FeHBvcnRTY29wZShTdHJpbmcgbmFtZSwgQnVpbGRlciBtZW1iZXIsIGludCBjaGFyT2Zmc2V0KSB7CiAgICBNYXA8U3RyaW5nLCBCdWlsZGVyPiBtYXAgPQogICAgICAgIG1lbWJlci5pc1NldHRlciA/IGV4cG9ydFNjb3BlLnNldHRlcnMgOiBleHBvcnRTY29wZS5sb2NhbDsKICAgIEJ1aWxkZXIgZXhpc3RpbmcgPSBtYXBbbmFtZV07CiAgICBpZiAoZXhpc3RpbmcgIT0gbnVsbCkgewogICAgICBtYXBbbmFtZV0gPSBwYXJlbnQuY29tcHV0ZUFtYmlndW91c0RlY2xhcmF0aW9uKAogICAgICAgICAgbmFtZSwgZXhpc3RpbmcsIG1lbWJlciwgY2hhck9mZnNldCwKICAgICAgICAgIGlzRXhwb3J0OiB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIG1hcFtuYW1lXSA9IG1lbWJlcjsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZnVsbE5hbWVGb3JFcnJvcnMgPT4gbmFtZTsKfQpBAE5OPAEeATsBOQE2AUYBJhUBLQEfARcBDBgBGQEmASkBSCsUG0JHBgQBJQE9OgQBRx9DIhw2LhsNGgYEAQwoAgE3cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvcHJlZml4X2J1aWxkZXIuZGFydD5zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci90eXBlX2J1aWxkZXIuZGFydIdPLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEudHlwZV9idWlsZGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBEYXJ0VHlwZSwgU3VwZXJ0eXBlOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IExvY2F0ZWRNZXNzYWdlOwoKaW1wb3J0ICdidWlsZGVyLmRhcnQnCiAgICBzaG93IExpYnJhcnlCdWlsZGVyLCBTY29wZSwgVHlwZURlY2xhcmF0aW9uQnVpbGRlciwgVHlwZVZhcmlhYmxlQnVpbGRlcjsKCmFic3RyYWN0IGNsYXNzIFR5cGVCdWlsZGVyIHsKICBjb25zdCBUeXBlQnVpbGRlcigpOwoKICBUeXBlRGVjbGFyYXRpb25CdWlsZGVyIGdldCBkZWNsYXJhdGlvbiA9PiBudWxsOwoKICB2b2lkIHJlc29sdmVJbigKICAgICAgU2NvcGUgc2NvcGUsIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkge30KCiAgLy8vIFNlZSBgVW5yZXNvbHZlZFR5cGUuY2hlY2tUeXBlYC4KICB2b2lkIGNoZWNrKExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSkge30KCiAgLy8vIFNlZSBgVW5yZXNvbHZlZFR5cGUubm9ybWFsaXplVHlwZWAuCiAgdm9pZCBub3JtYWxpemUoaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpKSB7fQoKICB2b2lkIGJpbmQoVHlwZURlY2xhcmF0aW9uQnVpbGRlciBidWlsZGVyKSB7fQoKICAvLy8gTWF5IHJldHVybiBudWxsLCBmb3IgZXhhbXBsZSwgZm9yIG1peGluIGFwcGxpY2F0aW9ucy4KICBPYmplY3QgZ2V0IG5hbWU7CgogIFN0cmluZyBnZXQgZGVidWdOYW1lOwoKICBTdHJpbmdCdWZmZXIgcHJpbnRPbihTdHJpbmdCdWZmZXIgYnVmZmVyKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIiRkZWJ1Z05hbWUoJHtwcmludE9uKG5ldyBTdHJpbmdCdWZmZXIoKSl9KSI7CgogIFR5cGVCdWlsZGVyIHN1YnN0KE1hcDxUeXBlVmFyaWFibGVCdWlsZGVyLCBUeXBlQnVpbGRlcj4gc3Vic3RpdHV0aW9uKSA9PiB0aGlzOwoKICAvLy8gQ2xvbmVzIHRoZSB0eXBlIGJ1aWxkZXIgcmVjdXJzaXZlbHkgd2l0aG91dCBiaW5kaW5nIHRoZSBzdWJ0ZXJtcyB0bwogIC8vLyBleGlzdGluZyBkZWNsYXJhdGlvbiBvciB0eXBlIHZhcmlhYmxlIGJ1aWxkZXJzLiAgQWxsIG5ld2x5IGJ1aWx0IHR5cGVzCiAgLy8vIGFyZSBhZGRlZCB0byBbbmV3VHlwZXNdLCBzbyB0aGF0IHRoZXkgY2FuIGJlIGFkZGVkIHRvIGEgcHJvcGVyIHNjb3BlIGFuZAogIC8vLyByZXNvbHZlZCBsYXRlci4KICBUeXBlQnVpbGRlciBjbG9uZShMaXN0PFR5cGVCdWlsZGVyPiBuZXdUeXBlcyk7CgogIGJ1aWxkSW52YWxpZFR5cGUoTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZSwge0xpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHR9KTsKCiAgU3RyaW5nIGdldCBmdWxsTmFtZUZvckVycm9ycyA9PiAiJHtwcmludE9uKG5ldyBTdHJpbmdCdWZmZXIoKSl9IjsKCiAgRGFydFR5cGUgYnVpbGQoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSk7CgogIFN1cGVydHlwZSBidWlsZFN1cGVydHlwZShMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBpbnQgY2hhck9mZnNldCwgVXJpIGZpbGVVcmkpOwoKICBTdXBlcnR5cGUgYnVpbGRNaXhlZEluVHlwZSgKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpKTsKfQo7AE5OPAEcATsBMgEWTQEdFwEyARJLASZFASoxAS8BPBMBGAEtAUUBUQFKTU8WMQFMAUQBKgFRAR48AgE1cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvdHlwZV9idWlsZGVyLmRhcnRKc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2J1aWxkZXIvdHlwZV9kZWNsYXJhdGlvbl9idWlsZGVyLmRhcnSEbC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnR5cGVfZGVjbGFyYXRpb25fYnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgRGFydFR5cGU7CgppbXBvcnQgJ2J1aWxkZXIuZGFydCcKICAgIHNob3cgQnVpbGRlciwgTGlicmFyeUJ1aWxkZXIsIE1ldGFkYXRhQnVpbGRlciwgTW9kaWZpZXJCdWlsZGVyLCBUeXBlQnVpbGRlcjsKCmFic3RyYWN0IGNsYXNzIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIgZXh0ZW5kcyBNb2RpZmllckJ1aWxkZXIgewogIGZpbmFsIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YTsKCiAgZmluYWwgaW50IG1vZGlmaWVyczsKCiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIEJ1aWxkZXIgcGFyZW50OwoKICBUeXBlRGVjbGFyYXRpb25CdWlsZGVyKAogICAgICB0aGlzLm1ldGFkYXRhLCB0aGlzLm1vZGlmaWVycywgdGhpcy5uYW1lLCB0aGlzLnBhcmVudCwgaW50IGNoYXJPZmZzZXQsCiAgICAgIFtVcmkgZmlsZVVyaV0pCiAgICAgIDogYXNzZXJ0KG1vZGlmaWVycyAhPSBudWxsKSwKICAgICAgICBzdXBlcihwYXJlbnQsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwoKICBib29sIGdldCBpc1R5cGVEZWNsYXJhdGlvbiA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGZ1bGxOYW1lRm9yRXJyb3JzID0+IG5hbWU7CgogIGludCBnZXQgdHlwZVZhcmlhYmxlc0NvdW50ID0+IDA7CgogIERhcnRUeXBlIGJ1aWxkVHlwZShMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBMaXN0PFR5cGVCdWlsZGVyPiBhcmd1bWVudHMpOwoKICAvLy8gW2FyZ3VtZW50c10gaGF2ZSBhbHJlYWR5IGJlZW4gYnVpbHQuCiAgRGFydFR5cGUgYnVpbGRUeXBlc1dpdGhCdWlsdEFyZ3VtZW50cygKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzKTsKfQopAE5OPAEoATABFlEBQCgBFwEVARIBGk0VIywBJgEMKAEjAUsBKyk5AgFBcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvdHlwZV9kZWNsYXJhdGlvbl9idWlsZGVyLmRhcnRHc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2J1aWxkZXIvdHlwZV92YXJpYWJsZV9idWlsZGVyLmRhcnSUWy8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnR5cGVfdmFyaWFibGVfYnVpbGRlcjsKCmltcG9ydCAnYnVpbGRlci5kYXJ0JyBzaG93IExpYnJhcnlCdWlsZGVyLCBUeXBlQnVpbGRlciwgVHlwZURlY2xhcmF0aW9uQnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93IERhcnRUeXBlLCBUeXBlUGFyYW1ldGVyLCBUeXBlUGFyYW1ldGVyVHlwZTsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcgc2hvdyB0ZW1wbGF0ZVR5cGVBcmd1bWVudHNPblR5cGVWYXJpYWJsZTsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93IENsYXNzQnVpbGRlciwgTmFtZWRUeXBlQnVpbGRlciwgTGlicmFyeUJ1aWxkZXIsIFR5cGVCdWlsZGVyOwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JyBzaG93IHVuc3VwcG9ydGVkOwoKaW1wb3J0ICcuLi9zb3VyY2Uvc291cmNlX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZUxpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICdkZWNsYXJhdGlvbi5kYXJ0JzsKCmNsYXNzIFR5cGVWYXJpYWJsZUJ1aWxkZXIgZXh0ZW5kcyBUeXBlRGVjbGFyYXRpb25CdWlsZGVyIHsKICBUeXBlQnVpbGRlciBib3VuZDsKCiAgVHlwZUJ1aWxkZXIgZGVmYXVsdFR5cGU7CgogIGZpbmFsIFR5cGVQYXJhbWV0ZXIgYWN0dWFsUGFyYW1ldGVyOwoKICBUeXBlVmFyaWFibGVCdWlsZGVyIGFjdHVhbE9yaWdpbjsKCiAgZmluYWwgYm9vbCBpc0V4dGVuc2lvblR5cGVQYXJhbWV0ZXI7CgogIFR5cGVWYXJpYWJsZUJ1aWxkZXIoCiAgICAgIFN0cmluZyBuYW1lLCBTb3VyY2VMaWJyYXJ5QnVpbGRlciBjb21waWxhdGlvblVuaXQsIGludCBjaGFyT2Zmc2V0LAogICAgICB7dGhpcy5ib3VuZCwgdGhpcy5pc0V4dGVuc2lvblR5cGVQYXJhbWV0ZXI6IGZhbHNlfSkKICAgICAgOiBhY3R1YWxQYXJhbWV0ZXIgPQogICAgICAgICAgICBuZXcgVHlwZVBhcmFtZXRlcihpc0V4dGVuc2lvblR5cGVQYXJhbWV0ZXIgPyAnIyRuYW1lJyA6IG5hbWUsIG51bGwpCiAgICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldCwKICAgICAgICBzdXBlcihudWxsLCAwLCBuYW1lLCBjb21waWxhdGlvblVuaXQsIGNoYXJPZmZzZXQpOwoKICBUeXBlVmFyaWFibGVCdWlsZGVyLmZyb21LZXJuZWwoCiAgICAgIFR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyLCBMaWJyYXJ5QnVpbGRlciBjb21waWxhdGlvblVuaXQpCiAgICAgIDogYWN0dWFsUGFyYW1ldGVyID0gcGFyYW1ldGVyLAogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IERvIHdlIG5lZWQgdG8gc3VwcG9ydCBzeW50aGVzaXplZCB0eXBlCiAgICAgICAgLy8gIHBhcmFtZXRlcnMgZnJvbSBrZXJuZWw/CiAgICAgICAgdGhpcy5pc0V4dGVuc2lvblR5cGVQYXJhbWV0ZXIgPSBmYWxzZSwKICAgICAgICBzdXBlcihudWxsLCAwLCBwYXJhbWV0ZXIubmFtZSwgY29tcGlsYXRpb25Vbml0LCBwYXJhbWV0ZXIuZmlsZU9mZnNldCk7CgogIGJvb2wgZ2V0IGlzVHlwZVZhcmlhYmxlID0+IHRydWU7CgogIFN0cmluZyBnZXQgZGVidWdOYW1lID0+ICJUeXBlVmFyaWFibGVCdWlsZGVyIjsKCiAgU3RyaW5nQnVmZmVyIHByaW50T24oU3RyaW5nQnVmZmVyIGJ1ZmZlcikgewogICAgYnVmZmVyLndyaXRlKG5hbWUpOwogICAgaWYgKGJvdW5kICE9IG51bGwpIHsKICAgICAgYnVmZmVyLndyaXRlKCIgZXh0ZW5kcyAiKTsKICAgICAgYm91bmQucHJpbnRPbihidWZmZXIpOwogICAgfQogICAgcmV0dXJuIGJ1ZmZlcjsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+ICIke3ByaW50T24obmV3IFN0cmluZ0J1ZmZlcigpKX0iOwoKICBUeXBlVmFyaWFibGVCdWlsZGVyIGdldCBvcmlnaW4gPT4gYWN0dWFsT3JpZ2luID8/IHRoaXM7CgogIC8vLyBUaGUgW1R5cGVQYXJhbWV0ZXJdIGJ1aWx0IGJ5IHRoaXMgYnVpbGRlci4KICBUeXBlUGFyYW1ldGVyIGdldCBwYXJhbWV0ZXIgPT4gb3JpZ2luLmFjdHVhbFBhcmFtZXRlcjsKCiAgLy8gRGVsaWJlcmF0ZWx5IHVucmVsYXRlZCByZXR1cm4gdHlwZSB0byBzdGF0aWNhbGx5IGRldGVjdCBtb3JlIGFjY2lkZW50YWwKICAvLyB1c2VzIHVudGlsIEJ1aWxkZXIudGFyZ2V0IGlzIGZ1bGx5IHJldGlyZWQuCiAgVW5yZWxhdGVkVGFyZ2V0IGdldCB0YXJnZXQgPT4gdW5zdXBwb3J0ZWQoCiAgICAgICJUeXBlVmFyaWFibGVCdWlsZGVyLnRhcmdldCBpcyBkZXByZWNhdGVkLiAiCiAgICAgICJVc2UgVHlwZVZhcmlhYmxlQnVpbGRlci5wYXJhbWV0ZXIgaW5zdGVhZC4iLAogICAgICBjaGFyT2Zmc2V0LAogICAgICBmaWxlVXJpKTsKCiAgRGFydFR5cGUgYnVpbGRUeXBlKExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50cykgewogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGludCBjaGFyT2Zmc2V0ID0gLTE7IC8vIFRPRE8oYWhlKTogUHJvdmlkZSB0aGVzZS4KICAgICAgVXJpIGZpbGVVcmkgPSBudWxsOyAvLyBUT0RPKGFoZSk6IFByb3ZpZGUgdGhlc2UuCiAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlVHlwZUFyZ3VtZW50c09uVHlwZVZhcmlhYmxlLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgICAgbmFtZS5sZW5ndGgsCiAgICAgICAgICBmaWxlVXJpKTsKICAgIH0KICAgIHJldHVybiBuZXcgVHlwZVBhcmFtZXRlclR5cGUocGFyYW1ldGVyKTsKICB9CgogIERhcnRUeXBlIGJ1aWxkVHlwZXNXaXRoQnVpbHRBcmd1bWVudHMoCiAgICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIExpc3Q8RGFydFR5cGU+IGFyZ3VtZW50cykgewogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGludCBjaGFyT2Zmc2V0ID0gLTE7IC8vIFRPRE8oYWhlKTogUHJvdmlkZSB0aGVzZS4KICAgICAgVXJpIGZpbGVVcmkgPSBudWxsOyAvLyBUT0RPKGFoZSk6IFByb3ZpZGUgdGhlc2UuCiAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlVHlwZUFyZ3VtZW50c09uVHlwZVZhcmlhYmxlLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgICAgbmFtZS5sZW5ndGgsCiAgICAgICAgICBmaWxlVXJpKTsKICAgIH0KICAgIHJldHVybiBidWlsZFR5cGUobGlicmFyeSwgbnVsbCk7CiAgfQoKICBUeXBlQnVpbGRlciBhc1R5cGVCdWlsZGVyKCkgewogICAgcmV0dXJuIG5ldyBOYW1lZFR5cGVCdWlsZGVyKG5hbWUsIG51bGwpLi5iaW5kKHRoaXMpOwogIH0KCiAgdm9pZCBmaW5pc2goCiAgICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIENsYXNzQnVpbGRlciBvYmplY3QsIFR5cGVCdWlsZGVyIGR5bmFtaWNUeXBlKSB7CiAgICBpZiAoaXNQYXRjaCkgcmV0dXJuOwogICAgRGFydFR5cGUgb2JqZWN0VHlwZSA9IG9iamVjdC5idWlsZFR5cGUobGlicmFyeSwgbnVsbCk7CiAgICBwYXJhbWV0ZXIuYm91bmQgPz89IGJvdW5kPy5idWlsZChsaWJyYXJ5KSA/PyBvYmplY3RUeXBlOwogICAgLy8gSWYgZGVmYXVsdFR5cGUgaXMgbm90IHNldCwgaW5pdGlhbGl6ZSBpdCB0byBkeW5hbWljLCB1bmxlc3MgdGhlIGJvdW5kIGlzCiAgICAvLyBleHBsaWNpdGx5IHNwZWNpZmllZCBhcyBPYmplY3QsIGluIHdoaWNoIGNhc2UgZGVmYXVsdFR5cGUgc2hvdWxkIGFsc28gYmUKICAgIC8vIE9iamVjdC4gVGhpcyBtYWtlcyBzdXJlIGluc3RhbnRpYXRpb24gb2YgZ2VuZXJpYyBmdW5jdGlvbiB0eXBlcyB3aXRoIGFuCiAgICAvLyBleHBsaWNpdCBPYmplY3QgYm91bmQgcmVzdWx0cyBpbiBPYmplY3QgYXMgdGhlIGluc3RhbnRpYXRlZCB0eXBlLgogICAgcGFyYW1ldGVyLmRlZmF1bHRUeXBlID8/PSBkZWZhdWx0VHlwZT8uYnVpbGQobGlicmFyeSkgPz8KICAgICAgICAoYm91bmQgIT0gbnVsbCAmJiBwYXJhbWV0ZXIuYm91bmQgPT0gb2JqZWN0VHlwZQogICAgICAgICAgICA/IG9iamVjdFR5cGUKICAgICAgICAgICAgOiBkeW5hbWljVHlwZS5idWlsZChsaWJyYXJ5KSk7CiAgfQoKICB2b2lkIGFwcGx5UGF0Y2goY292YXJpYW50IFR5cGVWYXJpYWJsZUJ1aWxkZXIgcGF0Y2gpIHsKICAgIHBhdGNoLmFjdHVhbE9yaWdpbiA9IHRoaXM7CiAgfQoKICBUeXBlVmFyaWFibGVCdWlsZGVyIGNsb25lKExpc3Q8VHlwZUJ1aWxkZXI+IG5ld1R5cGVzKSB7CiAgICAvLyBUT0RPKGRtaXRyeWFzKTogRmlndXJlIG91dCBpZiB1c2luZyBbY2hhck9mZnNldF0gaGVyZSBpcyBhIGdvb2QgaWRlYS4KICAgIC8vIEFuIGFsdGVybmF0aXZlIGlzIHRvIHVzZSB0aGUgb2Zmc2V0IG9mIHRoZSBub2RlIHRoZSBjbG9uZWQgdHlwZSB2YXJpYWJsZQogICAgLy8gaXMgZGVjbGFyZWQgb24uCiAgICByZXR1cm4gbmV3IFR5cGVWYXJpYWJsZUJ1aWxkZXIobmFtZSwgcGFyZW50LCBjaGFyT2Zmc2V0LAogICAgICAgIGJvdW5kOiBib3VuZC5jbG9uZShuZXdUeXBlcykpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpIHsKICAgIHJldHVybiBvdGhlciBpcyBUeXBlVmFyaWFibGVCdWlsZGVyICYmIHBhcmFtZXRlciA9PSBvdGhlci5wYXJhbWV0ZXI7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHBhcmFtZXRlci5oYXNoQ29kZTsKCiAgc3RhdGljIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnNGcm9tQnVpbGRlcnMoCiAgICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gYnVpbGRlcnMpIHsKICAgIGlmIChidWlsZGVycyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gcmVzdWx0ID0KICAgICAgICBuZXcgTGlzdDxUeXBlUGFyYW1ldGVyPi5maWxsZWQoYnVpbGRlcnMubGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ1aWxkZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHJlc3VsdFtpXSA9IGJ1aWxkZXJzW2ldLnBhcmFtZXRlcjsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CoCcAE5OPAElAVABITUBRwEnRgEsAUoBGwE7FQEbAScBJAEnARdJOhpQKTsBIj8lRyQvTwEjATEBLhgZIR0GEwQBOQE6ATE5AU0xLTM0EhABTB04NxpDFhcUBi0EASk6HTg3GkMWFxQGJQQBIDkEAQ9OGTs9UFBPST04GSsEATkfBAE6TVAXPScEAQwjSQQBDCoBOSwnIU8wKQYTBAIBPnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL3R5cGVfdmFyaWFibGVfYnVpbGRlci5kYXJ0QXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9idWlsZGVyL3VucmVzb2x2ZWRfdHlwZS5kYXJ0g/kvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS51bnJlc29sdmVkX3R5cGU7CgppbXBvcnQgJ2J1aWxkZXIuZGFydCcgc2hvdyBMaWJyYXJ5QnVpbGRlciwgU2NvcGUsIFR5cGVCdWlsZGVyOwoKLy8vIEEgd3JhcHBlciBhcm91bmQgYSB0eXBlIHRoYXQgaXMgeWV0IHRvIGJlIHJlc29sdmVkLgpjbGFzcyBVbnJlc29sdmVkVHlwZSB7CiAgZmluYWwgVHlwZUJ1aWxkZXIgYnVpbGRlcjsKICBmaW5hbCBpbnQgY2hhck9mZnNldDsKICBmaW5hbCBVcmkgZmlsZVVyaTsKCiAgVW5yZXNvbHZlZFR5cGUodGhpcy5idWlsZGVyLCB0aGlzLmNoYXJPZmZzZXQsIHRoaXMuZmlsZVVyaSk7CgogIHZvaWQgcmVzb2x2ZUluKFNjb3BlIHNjb3BlLCBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSA9PgogICAgICBidWlsZGVyLnJlc29sdmVJbihzY29wZSwgY2hhck9mZnNldCwgZmlsZVVyaSwgbGlicmFyeSk7CgogIC8vLyBQZXJmb3JtcyBjaGVja3Mgb24gdGhlIHR5cGUgYWZ0ZXIgaXQncyByZXNvbHZlZC4KICB2b2lkIGNoZWNrVHlwZShMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICByZXR1cm4gYnVpbGRlci5jaGVjayhsaWJyYXJ5LCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICB9CgogIC8vLyBOb3JtYWxpemVzIHRoZSB0eXBlIGFyZ3VtZW50cyBpbiBhY2NvcmRhbmNlIHdpdGggRGFydCAxIHNlbWFudGljcy4KICB2b2lkIG5vcm1hbGl6ZVR5cGUoKSA9PiBidWlsZGVyLm5vcm1hbGl6ZShjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIlVucmVzb2x2ZWRUeXBlKEAkY2hhck9mZnNldCwgJGJ1aWxkZXIpIjsKfQofAE5OPAEfAT8BOBcdGBUBPwE5PgE3KzgEAUlCAUECAThwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci91bnJlc29sdmVkX3R5cGUuZGFydENzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci92b2lkX3R5cGVfYnVpbGRlci5kYXJ0glovLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS52b2lkX3R5cGVfYnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgRGFydFR5cGU7CgppbXBvcnQgJ2J1aWxkZXIuZGFydCcgc2hvdyBCdWlsdGluVHlwZUJ1aWxkZXIsIExpYnJhcnlCdWlsZGVyOwoKY2xhc3MgVm9pZFR5cGVCdWlsZGVyIGV4dGVuZHMgQnVpbHRpblR5cGVCdWlsZGVyIHsKICBWb2lkVHlwZUJ1aWxkZXIoRGFydFR5cGUgdHlwZSwgTGlicmFyeUJ1aWxkZXIgY29tcGlsYXRpb25Vbml0LCBpbnQgY2hhck9mZnNldCkKICAgICAgOiBzdXBlcigidm9pZCIsIHR5cGUsIGNvbXBpbGF0aW9uVW5pdCwgY2hhck9mZnNldCk7CgogIFN0cmluZyBnZXQgZGVidWdOYW1lID0+ICJWb2lkVHlwZUJ1aWxkZXIiOwp9ChIATk48ASEBMAE/ATNROgEtAgE6cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvdm9pZF90eXBlX2J1aWxkZXIuZGFydDlzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvcGFyc2VyL2xpc3RlbmVyLmRhcnTAAMZnLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEucGFyc2VyLmxpc3RlbmVyOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93IE1lc3NhZ2UsIE1lc3NhZ2VDb2RlLCB0ZW1wbGF0ZUV4cGVyaW1lbnROb3RFbmFibGVkOwoKaW1wb3J0ICcuLi9xdW90ZS5kYXJ0JyBzaG93IFVuZXNjYXBlRXJyb3JMaXN0ZW5lcjsKCmltcG9ydCAnLi4vc2Nhbm5lci9lcnJvcl90b2tlbi5kYXJ0JyBzaG93IEVycm9yVG9rZW47CgppbXBvcnQgJ2Fzc2VydC5kYXJ0JyBzaG93IEFzc2VydDsKCmltcG9ydCAnZm9ybWFsX3BhcmFtZXRlcl9raW5kLmRhcnQnIHNob3cgRm9ybWFsUGFyYW1ldGVyS2luZDsKCmltcG9ydCAnaWRlbnRpZmllcl9jb250ZXh0LmRhcnQnIHNob3cgSWRlbnRpZmllckNvbnRleHQ7CgppbXBvcnQgJ2RlY2xhcmF0aW9uX2tpbmQuZGFydCcgc2hvdyBEZWNsYXJhdGlvbktpbmQ7CgppbXBvcnQgJ21lbWJlcl9raW5kLmRhcnQnIHNob3cgTWVtYmVyS2luZDsKCmltcG9ydCAndXRpbC5kYXJ0JyBzaG93IG9wdGlvbmFsOwoKLy8vIEEgcGFyc2VyIGV2ZW50IGxpc3RlbmVyIHRoYXQgZG9lcyBub3RoaW5nIGV4Y2VwdCB0aHJvdyBleGNlcHRpb25zCi8vLyBvbiBwYXJzZXIgZXJyb3JzLgovLy8KLy8vIEV2ZW50cyBhcmUgbWV0aG9kcyB0aGF0IGJlZ2luIHdpdGggb25lIG9mOiBgYmVnaW5gLCBgZW5kYCwgb3IgYGhhbmRsZWAuCi8vLwovLy8gRXZlbnRzIHN0YXJ0aW5nIHdpdGggYGJlZ2luYCBhbmQgYGVuZGAgY29tZSBpbiBwYWlycy4gTm9ybWFsbHksIGEKLy8vIGBiZWdpbkZvb2AgZXZlbnQgaXMgZm9sbG93ZWQgYnkgYW4gYGVuZEZvb2AgZXZlbnQuIFRoZXJlJ3MgYSBmZXcgZXhjZXB0aW9ucwovLy8gZG9jdW1lbnRlZCBiZWxvdy4KLy8vCi8vLyBFdmVudHMgc3RhcnRpbmcgd2l0aCBgaGFuZGxlYCBhcmUgdXNlZCB3aGVuIGlzbid0IHBvc3NpYmxlIHRvIGhhdmUgYSBiZWdpbgovLy8gZXZlbnQuCmNsYXNzIExpc3RlbmVyIGltcGxlbWVudHMgVW5lc2NhcGVFcnJvckxpc3RlbmVyIHsKICBVcmkgZ2V0IHVyaSA9PiBudWxsOwoKICB2b2lkIGxvZ0V2ZW50KFN0cmluZyBuYW1lKSB7fQoKICBzZXQgc3VwcHJlc3NQYXJzZUVycm9ycyhib29sIHZhbHVlKSB7fQoKICB2b2lkIGJlZ2luQXJndW1lbnRzKFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZEFyZ3VtZW50cyhpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiQXJndW1lbnRzIik7CiAgfQoKICAvLy8gSGFuZGxlIGFzeW5jIG1vZGlmaWVycyBgYXN5bmNgLCBgYXN5bmMqYCwgYHN5bmNgLgogIHZvaWQgaGFuZGxlQXN5bmNNb2RpZmllcihUb2tlbiBhc3luY1Rva2VuLCBUb2tlbiBzdGFyVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJBc3luY01vZGlmaWVyIik7CiAgfQoKICB2b2lkIGJlZ2luQXdhaXRFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZEF3YWl0RXhwcmVzc2lvbihUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIkF3YWl0RXhwcmVzc2lvbiIpOwogIH0KCiAgdm9pZCBlbmRJbnZhbGlkQXdhaXRFeHByZXNzaW9uKAogICAgICBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbiwgTWVzc2FnZUNvZGUgZXJyb3JDb2RlKSB7CiAgICBsb2dFdmVudCgiSW52YWxpZEF3YWl0RXhwcmVzc2lvbiIpOwogIH0KCiAgdm9pZCBiZWdpbkJsb2NrKFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZEJsb2NrKGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJCbG9jayIpOwogIH0KCiAgLy8vIENhbGxlZCB0byBoYW5kbGUgYSBibG9jayB0aGF0IGhhcyBiZWVuIHBhcnNlZCBidXQgaXMgbm90IGFzc29jaWF0ZWQKICAvLy8gd2l0aCBhbnkgdG9wIGxldmVsIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLiBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIGJsb2NrCiAgdm9pZCBoYW5kbGVJbnZhbGlkVG9wTGV2ZWxCbG9jayhUb2tlbiB0b2tlbikge30KCiAgdm9pZCBiZWdpbkNhc2NhZGUoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kQ2FzY2FkZSgpIHsKICAgIGxvZ0V2ZW50KCJDYXNjYWRlIik7CiAgfQoKICB2b2lkIGJlZ2luQ2FzZUV4cHJlc3Npb24oVG9rZW4gY2FzZUtleXdvcmQpIHt9CgogIHZvaWQgZW5kQ2FzZUV4cHJlc3Npb24oVG9rZW4gY29sb24pIHsKICAgIGxvZ0V2ZW50KCJDYXNlRXhwcmVzc2lvbiIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgc3RhcnQgb2YgdGhlIGJvZHkgb2YgYSBjbGFzcywgbWl4aW4gb3IgZXh0ZW5zaW9uIGRlY2xhcmF0aW9uCiAgLy8vIGJlZ2lubmluZyBhdCBbdG9rZW5dLiBUaGUgYWN0dWFsIGtpbmQgb2YgZGVjbGFyYXRpb24gaXMgaW5kaWNhdGVkIGJ5CiAgLy8vIFtraW5kXS4KICB2b2lkIGJlZ2luQ2xhc3NPck1peGluQm9keShEZWNsYXJhdGlvbktpbmQga2luZCwgVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiB0aGUgYm9keSBvZiBhIGNsYXNzLCBtaXhpbiBvciBleHRlbnNpb24gZGVjbGFyYXRpb24uCiAgLy8vIFRoZSBvbmx5IHN1YnN0cnVjdHVyZXMgYXJlIHRoZSBjbGFzcywgbWl4aW4gb3IgZXh0ZW5zaW9uIG1lbWJlcnMuCiAgLy8vCiAgLy8vIFRoZSBhY3R1YWwga2luZCBvZiBkZWNsYXJhdGlvbiBpcyBpbmRpY2F0ZWQgYnkgW2tpbmRdLgogIHZvaWQgZW5kQ2xhc3NPck1peGluQm9keSgKICAgICAgRGVjbGFyYXRpb25LaW5kIGtpbmQsIGludCBtZW1iZXJDb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJDbGFzc09yTWl4aW5Cb2R5Iik7CiAgfQoKICAvLy8gQ2FsbGVkIGJlZm9yZSBwYXJzaW5nIGEgY2xhc3Mgb3IgbmFtZWQgbWl4aW4gYXBwbGljYXRpb24uCiAgLy8vCiAgLy8vIEF0IHRoaXMgcG9pbnQgb25seSB0aGUgYGNsYXNzYCBrZXl3b3JkIGhhdmUgYmVlbiBzZWVuLCBzbyB3ZSBrbm93IGEKICAvLy8gZGVjbGFyYXRpb24gaXMgY29taW5nIGJ1dCBub3QgaXRzIG5hbWUgb3IgdHlwZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb25zLgogIHZvaWQgYmVnaW5DbGFzc09yTmFtZWRNaXhpbkFwcGxpY2F0aW9uUHJlbHVkZShUb2tlbiB0b2tlbikge30KCiAgLy8vIEhhbmRsZSB0aGUgYmVnaW5uaW5nIG9mIGEgY2xhc3MgZGVjbGFyYXRpb24uCiAgLy8vIFtiZWdpbl0gbWF5IGJlIHRoZSBzYW1lIGFzIFtuYW1lXSwgb3IgbWF5IHBvaW50IHRvIG1vZGlmaWVycwogIC8vLyAob3IgZXh0cmFuZW91cyBtb2RpZmllcnMgaW4gdGhlIGNhc2Ugb2YgcmVjb3ZlcnkpIHByZWNlZGluZyBbbmFtZV0uCiAgLy8vCiAgLy8vIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBwYXJzZWQgdGhlIG5hbWUgYW5kIHR5cGUgcGFyYW1ldGVyIGRlY2xhcmF0aW9ucy4KICB2b2lkIGJlZ2luQ2xhc3NEZWNsYXJhdGlvbihUb2tlbiBiZWdpbiwgVG9rZW4gYWJzdHJhY3RUb2tlbiwgVG9rZW4gbmFtZSkge30KCiAgLy8vIEhhbmRsZSBhbiBleHRlbmRzIGNsYXVzZSBpbiBhIGNsYXNzIGRlY2xhcmF0aW9uLiBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIHN1cGVydHlwZSAobWF5IGJlIGEgbWl4aW4gYXBwbGljYXRpb24pCiAgdm9pZCBoYW5kbGVDbGFzc0V4dGVuZHMoVG9rZW4gZXh0ZW5kc0tleXdvcmQpIHsKICAgIGxvZ0V2ZW50KCJDbGFzc0V4dGVuZHMiKTsKICB9CgogIC8vLyBIYW5kbGUgYW4gaW1wbGVtZW50cyBjbGF1c2UgaW4gYSBjbGFzcyBvciBtaXhpbiBkZWNsYXJhdGlvbi4KICAvLy8gU3Vic3RydWN0dXJlczoKICAvLy8gLSBpbXBsZW1lbnRlZCB0eXBlcwogIHZvaWQgaGFuZGxlQ2xhc3NPck1peGluSW1wbGVtZW50cygKICAgICAgVG9rZW4gaW1wbGVtZW50c0tleXdvcmQsIGludCBpbnRlcmZhY2VzQ291bnQpIHsKICAgIGxvZ0V2ZW50KCJDbGFzc0ltcGxlbWVudHMiKTsKICB9CgogIC8vLyBIYW5kbGUgdGhlIGhlYWRlciBvZiBhIGNsYXNzIGRlY2xhcmF0aW9uLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBtZXRhZGF0YQogIC8vLyAtIG1vZGlmaWVycwogIC8vLyAtIGNsYXNzIG5hbWUKICAvLy8gLSB0eXBlIHZhcmlhYmxlcwogIC8vLyAtIHN1cGVydHlwZQogIC8vLyAtIHdpdGggY2xhdXNlCiAgLy8vIC0gaW1wbGVtZW50ZWQgdHlwZXMKICAvLy8gLSBuYXRpdmUgY2xhdXNlCiAgdm9pZCBoYW5kbGVDbGFzc0hlYWRlcihUb2tlbiBiZWdpbiwgVG9rZW4gY2xhc3NLZXl3b3JkLCBUb2tlbiBuYXRpdmVUb2tlbikgewogICAgbG9nRXZlbnQoIkNsYXNzSGVhZGVyIik7CiAgfQoKICAvLy8gSGFuZGxlIHJlY292ZXJ5IGFzc29jaWF0ZWQgd2l0aCBhIGNsYXNzIGhlYWRlci4KICAvLy8gVGhpcyBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGFmdGVyIFtoYW5kbGVDbGFzc0hlYWRlcl0KICAvLy8gdG8gcmVjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJldmlvdXMgY2xhc3MgaGVhZGVyLgogIC8vLyBUaGUgc3Vic3RydWN0dXJlcyBhcmUgYSBzdWJzZXQgb2YKICAvLy8gYW5kIGluIHRoZSBzYW1lIG9yZGVyIGFzIFtoYW5kbGVDbGFzc0hlYWRlcl06CiAgLy8vIC0gc3VwZXJ0eXBlCiAgLy8vIC0gd2l0aCBjbGF1c2UKICAvLy8gLSBpbXBsZW1lbnRlZCB0eXBlcwogIHZvaWQgaGFuZGxlUmVjb3ZlckNsYXNzSGVhZGVyKCkgewogICAgbG9nRXZlbnQoIlJlY292ZXJDbGFzc0hlYWRlciIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGEgY2xhc3MgZGVjbGFyYXRpb24uICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIGNsYXNzIGhlYWRlcgogIC8vLyAtIGNsYXNzIGJvZHkKICB2b2lkIGVuZENsYXNzRGVjbGFyYXRpb24oVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJDbGFzc0RlY2xhcmF0aW9uIik7CiAgfQoKICAvLy8gSGFuZGxlIHRoZSBiZWdpbm5pbmcgb2YgYSBtaXhpbiBkZWNsYXJhdGlvbi4KICB2b2lkIGJlZ2luTWl4aW5EZWNsYXJhdGlvbihUb2tlbiBtaXhpbktleXdvcmQsIFRva2VuIG5hbWUpIHt9CgogIC8vLyBIYW5kbGUgYW4gb24gY2xhdXNlIGluIGEgbWl4aW4gZGVjbGFyYXRpb24uIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gaW1wbGVtZW50ZWQgdHlwZXMKICB2b2lkIGhhbmRsZU1peGluT24oVG9rZW4gb25LZXl3b3JkLCBpbnQgdHlwZUNvdW50KSB7CiAgICBsb2dFdmVudCgiTWl4aW5PbiIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgaGVhZGVyIG9mIGEgbWl4aW4gZGVjbGFyYXRpb24uICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIG1ldGFkYXRhCiAgLy8vIC0gbWl4aW4gbmFtZQogIC8vLyAtIHR5cGUgdmFyaWFibGVzCiAgLy8vIC0gb24gdHlwZXMKICAvLy8gLSBpbXBsZW1lbnRlZCB0eXBlcwogIHZvaWQgaGFuZGxlTWl4aW5IZWFkZXIoVG9rZW4gbWl4aW5LZXl3b3JkKSB7CiAgICBsb2dFdmVudCgiTWl4aW5IZWFkZXIiKTsKICB9CgogIC8vLyBIYW5kbGUgcmVjb3ZlcnkgYXNzb2NpYXRlZCB3aXRoIGEgbWl4aW4gaGVhZGVyLgogIC8vLyBUaGlzIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgYWZ0ZXIgW2hhbmRsZU1peGluSGVhZGVyXQogIC8vLyB0byByZWNvdmVyIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcmV2aW91cyBtaXhpbiBoZWFkZXIuCiAgLy8vIFRoZSBzdWJzdHJ1Y3R1cmVzIGFyZSBhIHN1YnNldCBvZgogIC8vLyBhbmQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgW2hhbmRsZU1peGluSGVhZGVyXQogIC8vLyAtIG9uIHR5cGVzCiAgLy8vIC0gaW1wbGVtZW50ZWQgdHlwZXMKICB2b2lkIGhhbmRsZVJlY292ZXJNaXhpbkhlYWRlcigpIHsKICAgIGxvZ0V2ZW50KCJSZWNvdmVyTWl4aW5IZWFkZXIiKTsKICB9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIG1peGluIGRlY2xhcmF0aW9uLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBtaXhpbiBoZWFkZXIKICAvLy8gLSBjbGFzcyBvciBtaXhpbiBib2R5CiAgdm9pZCBlbmRNaXhpbkRlY2xhcmF0aW9uKFRva2VuIG1peGluS2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJNaXhpbkRlY2xhcmF0aW9uIik7CiAgfQoKICAvLy8gSGFuZGxlIHRoZSBiZWdpbm5pbmcgb2YgYW4gZXh0ZW5zaW9uIG1ldGhvZHMgZGVjbGFyYXRpb24uICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIG1ldGFkYXRhCiAgLy8vCiAgLy8vIEF0IHRoaXMgcG9pbnQgb25seSB0aGUgYGV4dGVuc2lvbmAga2V5d29yZCBoYXZlIGJlZW4gc2Vlbiwgc28gd2Uga25vdyBhCiAgLy8vIGRlY2xhcmF0aW9uIGlzIGNvbWluZyBidXQgbm90IGl0cyBuYW1lIG9yIHR5cGUgcGFyYW1ldGVyIGRlY2xhcmF0aW9ucy4KICB2b2lkIGJlZ2luRXh0ZW5zaW9uRGVjbGFyYXRpb25QcmVsdWRlKFRva2VuIGV4dGVuc2lvbktleXdvcmQpIHt9CgogIC8vLyBIYW5kbGUgdGhlIGJlZ2lubmluZyBvZiBhbiBleHRlbnNpb24gbWV0aG9kcyBkZWNsYXJhdGlvbi4gIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gdHlwZSB2YXJpYWJsZXMKICAvLy8KICAvLy8gQXQgdGhpcyBwb2ludCB3ZSBoYXZlIHBhcnNlZCB0aGUgbmFtZSBhbmQgdHlwZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb25zLgogIHZvaWQgYmVnaW5FeHRlbnNpb25EZWNsYXJhdGlvbihUb2tlbiBleHRlbnNpb25LZXl3b3JkLCBUb2tlbiBuYW1lKSB7fQoKICAvLy8gSGFuZGxlIHRoZSBlbmQgb2YgYW4gZXh0ZW5zaW9uIG1ldGhvZHMgZGVjbGFyYXRpb24uICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIHN1YnN0cnVjdHVyZXMgZnJvbSBbYmVnaW5FeHRlbnNpb25EZWNsYXJhdGlvbl0KICAvLy8gLSBvbiB0eXBlCiAgLy8vIC0gYm9keQogIHZvaWQgZW5kRXh0ZW5zaW9uRGVjbGFyYXRpb24oCiAgICAgIFRva2VuIGV4dGVuc2lvbktleXdvcmQsIFRva2VuIG9uS2V5d29yZCwgVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCdFeHRlbnNpb25EZWNsYXJhdGlvbicpOwogIH0KCiAgdm9pZCBiZWdpbkNvbWJpbmF0b3JzKFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZENvbWJpbmF0b3JzKGludCBjb3VudCkgewogICAgbG9nRXZlbnQoIkNvbWJpbmF0b3JzIik7CiAgfQoKICB2b2lkIGJlZ2luQ29tcGlsYXRpb25Vbml0KFRva2VuIHRva2VuKSB7fQoKICAvLy8gVGhpcyBtZXRob2QgZXhpc3RzIGZvciBhbmFseXplciBjb21wYXRpYmlsaXR5IG9ubHkKICAvLy8gYW5kIHdpbGwgYmUgcmVtb3ZlZCBvbmNlIGFuYWx5emVyL2Zhc3RhIGludGVncmF0aW9uIGlzIGNvbXBsZXRlLgogIC8vLwogIC8vLyBUaGlzIGlzIGNhbGxlZCB3aGVuIFtwYXJzZURpcmVjdGl2ZXNdIGhhcyBwYXJzZWQgYWxsIGRpcmVjdGl2ZXMKICAvLy8gYW5kIGlzIHNraXBwaW5nIHRoZSByZW1haW5kZXIgb2YgdGhlIGZpbGUuICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIG1ldGFkYXRhCiAgdm9pZCBoYW5kbGVEaXJlY3RpdmVzT25seSgpIHt9CgogIHZvaWQgZW5kQ29tcGlsYXRpb25Vbml0KGludCBjb3VudCwgVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJDb21waWxhdGlvblVuaXQiKTsKICB9CgogIHZvaWQgYmVnaW5Db25zdExpdGVyYWwoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kQ29uc3RMaXRlcmFsKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiQ29uc3RMaXRlcmFsIik7CiAgfQoKICB2b2lkIGJlZ2luQ29uc3RydWN0b3JSZWZlcmVuY2UoVG9rZW4gc3RhcnQpIHt9CgogIHZvaWQgZW5kQ29uc3RydWN0b3JSZWZlcmVuY2UoCiAgICAgIFRva2VuIHN0YXJ0LCBUb2tlbiBwZXJpb2RCZWZvcmVOYW1lLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIkNvbnN0cnVjdG9yUmVmZXJlbmNlIik7CiAgfQoKICB2b2lkIGJlZ2luRG9XaGlsZVN0YXRlbWVudChUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmREb1doaWxlU3RhdGVtZW50KAogICAgICBUb2tlbiBkb0tleXdvcmQsIFRva2VuIHdoaWxlS2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJEb1doaWxlU3RhdGVtZW50Iik7CiAgfQoKICB2b2lkIGJlZ2luRG9XaGlsZVN0YXRlbWVudEJvZHkoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kRG9XaGlsZVN0YXRlbWVudEJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJEb1doaWxlU3RhdGVtZW50Qm9keSIpOwogIH0KCiAgdm9pZCBiZWdpbldoaWxlU3RhdGVtZW50Qm9keShUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmRXaGlsZVN0YXRlbWVudEJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJXaGlsZVN0YXRlbWVudEJvZHkiKTsKICB9CgogIHZvaWQgYmVnaW5FbnVtKFRva2VuIGVudW1LZXl3b3JkKSB7fQoKICAvLy8gSGFuZGxlIHRoZSBlbmQgb2YgYW4gZW51bSBkZWNsYXJhdGlvbi4gIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gTWV0YWRhdGEKICAvLy8gLSBFbnVtIG5hbWUgKGlkZW50aWZpZXIpCiAgLy8vIC0gW2NvdW50XSB0aW1lczoKICAvLy8gICAtIEVudW0gdmFsdWUgKGlkZW50aWZpZXIpCiAgdm9pZCBlbmRFbnVtKFRva2VuIGVudW1LZXl3b3JkLCBUb2tlbiBsZWZ0QnJhY2UsIGludCBjb3VudCkgewogICAgbG9nRXZlbnQoIkVudW0iKTsKICB9CgogIHZvaWQgYmVnaW5FeHBvcnQoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhbiBleHBvcnQgZGlyZWN0aXZlLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBtZXRhZGF0YQogIC8vLyAtIHVyaQogIC8vLyAtIGNvbmRpdGlvbmFsIHVyaXMKICAvLy8gLSBjb21iaW5hdG9ycwogIHZvaWQgZW5kRXhwb3J0KFRva2VuIGV4cG9ydEtleXdvcmQsIFRva2VuIHNlbWljb2xvbikgewogICAgbG9nRXZlbnQoIkV4cG9ydCIpOwogIH0KCiAgLy8vIENhbGxlZCBieSBbUGFyc2VyXSBhZnRlciBwYXJzaW5nIGFuIGV4dHJhbmVvdXMgZXhwcmVzc2lvbiBhcyBlcnJvcgogIC8vLyByZWNvdmVyeS4gRm9yIGEgc3RhY2stYmFzZWQgbGlzdGVuZXIsIHRoZSBzdWdnZXN0ZWQgYWN0aW9uIGlzIHRvIGRpc2NhcmQKICAvLy8gYW4gZXhwcmVzc2lvbiBmcm9tIHRoZSBzdGFjay4KICB2b2lkIGhhbmRsZUV4dHJhbmVvdXNFeHByZXNzaW9uKFRva2VuIHRva2VuLCBNZXNzYWdlIG1lc3NhZ2UpIHsKICAgIGxvZ0V2ZW50KCJFeHRyYW5lb3VzRXhwcmVzc2lvbiIpOwogIH0KCiAgdm9pZCBoYW5kbGVFeHByZXNzaW9uU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiRXhwcmVzc2lvblN0YXRlbWVudCIpOwogIH0KCiAgdm9pZCBiZWdpbkZhY3RvcnlNZXRob2QoCiAgICAgIFRva2VuIGxhc3RDb25zdW1lZCwgVG9rZW4gZXh0ZXJuYWxUb2tlbiwgVG9rZW4gY29uc3RUb2tlbikge30KCiAgdm9pZCBlbmRDbGFzc0ZhY3RvcnlNZXRob2QoCiAgICAgIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGZhY3RvcnlLZXl3b3JkLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIkNsYXNzRmFjdG9yeU1ldGhvZCIpOwogIH0KCiAgdm9pZCBlbmRNaXhpbkZhY3RvcnlNZXRob2QoCiAgICAgIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGZhY3RvcnlLZXl3b3JkLCBUb2tlbiBlbmRUb2tlbikgewogICAgLy8gVE9ETyhkYW5ydWJlbCk6IHB1c2ggaW1wbGVtZW50YXRpb24gaW50byBzdWJjbGFzc2VzCiAgICBlbmRDbGFzc0ZhY3RvcnlNZXRob2QoYmVnaW5Ub2tlbiwgZmFjdG9yeUtleXdvcmQsIGVuZFRva2VuKTsKICB9CgogIHZvaWQgZW5kRXh0ZW5zaW9uRmFjdG9yeU1ldGhvZCgKICAgICAgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZmFjdG9yeUtleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogcHVzaCBpbXBsZW1lbnRhdGlvbiBpbnRvIHN1YmNsYXNzZXMKICAgIGVuZENsYXNzRmFjdG9yeU1ldGhvZChiZWdpblRva2VuLCBmYWN0b3J5S2V5d29yZCwgZW5kVG9rZW4pOwogIH0KCiAgdm9pZCBiZWdpbkZvcm1hbFBhcmFtZXRlcihUb2tlbiB0b2tlbiwgTWVtYmVyS2luZCBraW5kLCBUb2tlbiByZXF1aXJlZFRva2VuLAogICAgICBUb2tlbiBjb3ZhcmlhbnRUb2tlbiwgVG9rZW4gdmFyRmluYWxPckNvbnN0KSB7fQoKICB2b2lkIGVuZEZvcm1hbFBhcmFtZXRlcigKICAgICAgVG9rZW4gdGhpc0tleXdvcmQsCiAgICAgIFRva2VuIHBlcmlvZEFmdGVyVGhpcywKICAgICAgVG9rZW4gbmFtZVRva2VuLAogICAgICBUb2tlbiBpbml0aWFsaXplclN0YXJ0LAogICAgICBUb2tlbiBpbml0aWFsaXplckVuZCwKICAgICAgRm9ybWFsUGFyYW1ldGVyS2luZCBraW5kLAogICAgICBNZW1iZXJLaW5kIG1lbWJlcktpbmQpIHsKICAgIGxvZ0V2ZW50KCJGb3JtYWxQYXJhbWV0ZXIiKTsKICB9CgogIHZvaWQgaGFuZGxlTm9Gb3JtYWxQYXJhbWV0ZXJzKFRva2VuIHRva2VuLCBNZW1iZXJLaW5kIGtpbmQpIHsKICAgIGxvZ0V2ZW50KCJOb0Zvcm1hbFBhcmFtZXRlcnMiKTsKICB9CgogIHZvaWQgYmVnaW5Gb3JtYWxQYXJhbWV0ZXJzKFRva2VuIHRva2VuLCBNZW1iZXJLaW5kIGtpbmQpIHt9CgogIHZvaWQgZW5kRm9ybWFsUGFyYW1ldGVycygKICAgICAgaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbiwgTWVtYmVyS2luZCBraW5kKSB7CiAgICBsb2dFdmVudCgiRm9ybWFsUGFyYW1ldGVycyIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGEgY2xhc3MgZmllbGQgZGVjbGFyYXRpb24uICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIE1ldGFkYXRhCiAgLy8vIC0gTW9kaWZpZXJzCiAgLy8vIC0gVHlwZQogIC8vLyAtIFZhcmlhYmxlIGRlY2xhcmF0aW9ucyAoY291bnQgdGltZXMpCiAgLy8vCiAgLy8vIERvZXNuJ3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgYmVnaW4gZXZlbnQsIHVzZSBbYmVnaW5NZW1iZXJdIGluc3RlYWQuCiAgdm9pZCBlbmRDbGFzc0ZpZWxkcyhUb2tlbiBzdGF0aWNUb2tlbiwgVG9rZW4gY292YXJpYW50VG9rZW4sIFRva2VuIGxhdGVUb2tlbiwKICAgICAgVG9rZW4gdmFyRmluYWxPckNvbnN0LCBpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiRmllbGRzIik7CiAgfQoKICAvLy8gSGFuZGxlIHRoZSBlbmQgb2YgYSBtaXhpbiBmaWVsZCBkZWNsYXJhdGlvbi4gIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gTWV0YWRhdGEKICAvLy8gLSBNb2RpZmllcnMKICAvLy8gLSBUeXBlCiAgLy8vIC0gVmFyaWFibGUgZGVjbGFyYXRpb25zIChjb3VudCB0aW1lcykKICAvLy8KICAvLy8gRG9lc24ndCBoYXZlIGEgY29ycmVzcG9uZGluZyBiZWdpbiBldmVudCwgdXNlIFtiZWdpbk1lbWJlcl0gaW5zdGVhZC4KICB2b2lkIGVuZE1peGluRmllbGRzKFRva2VuIHN0YXRpY1Rva2VuLCBUb2tlbiBjb3ZhcmlhbnRUb2tlbiwgVG9rZW4gbGF0ZVRva2VuLAogICAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3QsIGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIC8vIFRPRE8oZGFucnViZWwpOiBwdXNoIGltcGxlbWVudGF0aW9uIGludG8gc3ViY2xhc3NlcwogICAgZW5kQ2xhc3NGaWVsZHMoc3RhdGljVG9rZW4sIGNvdmFyaWFudFRva2VuLCBsYXRlVG9rZW4sIHZhckZpbmFsT3JDb25zdCwKICAgICAgICBjb3VudCwgYmVnaW5Ub2tlbiwgZW5kVG9rZW4pOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGEgZXh0ZW5zaW9uIGZpZWxkIGRlY2xhcmF0aW9uLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBNZXRhZGF0YQogIC8vLyAtIE1vZGlmaWVycwogIC8vLyAtIFR5cGUKICAvLy8gLSBWYXJpYWJsZSBkZWNsYXJhdGlvbnMgKGNvdW50IHRpbWVzKQogIC8vLwogIC8vLyBEb2Vzbid0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGJlZ2luIGV2ZW50LCB1c2UgW2JlZ2luTWVtYmVyXSBpbnN0ZWFkLgogIHZvaWQgZW5kRXh0ZW5zaW9uRmllbGRzKAogICAgICBUb2tlbiBzdGF0aWNUb2tlbiwKICAgICAgVG9rZW4gY292YXJpYW50VG9rZW4sCiAgICAgIFRva2VuIGxhdGVUb2tlbiwKICAgICAgVG9rZW4gdmFyRmluYWxPckNvbnN0LAogICAgICBpbnQgY291bnQsCiAgICAgIFRva2VuIGJlZ2luVG9rZW4sCiAgICAgIFRva2VuIGVuZFRva2VuKSB7CiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogcHVzaCBpbXBsZW1lbnRhdGlvbiBpbnRvIHN1YmNsYXNzZXMKICAgIGVuZENsYXNzRmllbGRzKHN0YXRpY1Rva2VuLCBjb3ZhcmlhbnRUb2tlbiwgbGF0ZVRva2VuLCB2YXJGaW5hbE9yQ29uc3QsCiAgICAgICAgY291bnQsIGJlZ2luVG9rZW4sIGVuZFRva2VuKTsKICB9CgogIC8vLyBNYXJrcyB0aGF0IHRoZSBncmFtbWFyIHRlcm0gYGZvckluaXRpYWxpemVyU3RhdGVtZW50YCBoYXMgYmVlbiBwYXJzZWQgYW5kCiAgLy8vIGl0IHdhcyBhbiBlbXB0eSBzdGF0ZW1lbnQuCiAgdm9pZCBoYW5kbGVGb3JJbml0aWFsaXplckVtcHR5U3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiRm9ySW5pdGlhbGl6ZXJFbXB0eVN0YXRlbWVudCIpOwogIH0KCiAgLy8vIE1hcmtzIHRoYXQgdGhlIGdyYW1tYXIgdGVybSBgZm9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnRgIGhhcyBiZWVuIHBhcnNlZCBhbmQKICAvLy8gaXQgd2FzIGFuIGV4cHJlc3Npb24gc3RhdGVtZW50LgogIHZvaWQgaGFuZGxlRm9ySW5pdGlhbGl6ZXJFeHByZXNzaW9uU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiRm9ySW5pdGlhbGl6ZXJFeHByZXNzaW9uU3RhdGVtZW50Iik7CiAgfQoKICAvLy8gTWFya3MgdGhhdCB0aGUgZ3JhbW1hciB0ZXJtIGBmb3JJbml0aWFsaXplclN0YXRlbWVudGAgaGFzIGJlZW4gcGFyc2VkIGFuZAogIC8vLyBpdCB3YXMgYSBgbG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uYC4KICB2b2lkIGhhbmRsZUZvckluaXRpYWxpemVyTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiRm9ySW5pdGlhbGl6ZXJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb24iKTsKICB9CgogIC8vLyBNYXJrcyB0aGUgc3RhcnQgb2YgYSBmb3Igc3RhdGVtZW50IHdoaWNoIGlzIGVuZGVkIGJ5IGVpdGhlcgogIC8vLyBbZW5kRm9yU3RhdGVtZW50XSBvciBbZW5kRm9ySW5dLgogIHZvaWQgYmVnaW5Gb3JTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBNYXJrcyB0aGUgZW5kIG9mIHBhcnNpbmcgdGhlIGNvbnRyb2wgc3RydWN0dXJlIG9mIGEgZm9yIHN0YXRlbWVudAogIC8vLyBvciBmb3IgY29udHJvbCBmbG93IGVudHJ5IHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIGNsb3NpbmcgcGFyZW50aGVzaXMuCiAgLy8vIGBmb3JgIGAoYCBpbml0aWFsaXphdGlvbiBgO2AgY29uZGl0aW9uIGA7YCB1cGRhdGVycyBgKWAKICB2b2lkIGhhbmRsZUZvckxvb3BQYXJ0cyhUb2tlbiBmb3JLZXl3b3JkLCBUb2tlbiBsZWZ0UGFyZW4sCiAgICAgIFRva2VuIGxlZnRTZXBhcmF0b3IsIGludCB1cGRhdGVFeHByZXNzaW9uQ291bnQpIHt9CgogIHZvaWQgZW5kRm9yU3RhdGVtZW50KFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiRm9yU3RhdGVtZW50Iik7CiAgfQoKICB2b2lkIGJlZ2luRm9yU3RhdGVtZW50Qm9keShUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmRGb3JTdGF0ZW1lbnRCb2R5KFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiRm9yU3RhdGVtZW50Qm9keSIpOwogIH0KCiAgLy8vIE1hcmtzIHRoZSBlbmQgb2YgcGFyc2luZyB0aGUgY29udHJvbCBzdHJ1Y3R1cmUgb2YgYSBmb3ItaW4gc3RhdGVtZW50CiAgLy8vIG9yIGZvciBjb250cm9sIGZsb3cgZW50cnkgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgY2xvc2luZyBwYXJlbnRoZXNpcy4KICAvLy8gYGZvcmAgYChgICh0eXBlKT8gaWRlbnRpZmllciBgaW5gIGl0ZXJhdG9yIGApYAogIHZvaWQgaGFuZGxlRm9ySW5Mb29wUGFydHMoVG9rZW4gYXdhaXRUb2tlbiwgVG9rZW4gZm9yVG9rZW4sCiAgICAgIFRva2VuIGxlZnRQYXJlbnRoZXNpcywgVG9rZW4gaW5LZXl3b3JkKSB7fQoKICAvLyBPbmUgb2YgdGhlIHR3byBwb3NzaWJsZSBjb3JyZXNwb25kaW5nIGVuZCBldmVudHMgZm9yIFtiZWdpbkZvclN0YXRlbWVudF0uCiAgdm9pZCBlbmRGb3JJbihUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIkZvckluIik7CiAgfQoKICB2b2lkIGJlZ2luRm9ySW5FeHByZXNzaW9uKFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZEZvckluRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIkZvckluRXhwcmVzc2lvbiIpOwogIH0KCiAgdm9pZCBiZWdpbkZvckluQm9keShUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmRGb3JJbkJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJGb3JJbkJvZHkiKTsKICB9CgogIC8vLyBIYW5kbGUgdGhlIGJlZ2lubmluZyBvZiBhIG5hbWVkIGZ1bmN0aW9uIGV4cHJlc3Npb24gd2hpY2ggaXNuJ3QgbGVnYWwKICAvLy8gc3ludGF4IGluIERhcnQuICBVc2VmdWwgZm9yIHJlY292ZXJpbmcgZnJvbSBKYXZhc2NyaXB0IGNvZGUgYmVpbmcgcGFzdGVkCiAgLy8vIGludG8gYSBEYXJ0IHByb2dyYW0sIGFzIGl0IHdpbGwgaW50ZXJwcmV0IGBmdW5jdGlvbiBmb28oKSB7fWAgYXMgYSBuYW1lZAogIC8vLyBmdW5jdGlvbiBleHByZXNzaW9uIHdpdGggcmV0dXJuIHR5cGUgYGZ1bmN0aW9uYCBhbmQgbmFtZSBgZm9vYC4KICAvLy8KICAvLy8gU3Vic3RydWN0dXJlczoKICAvLy8gLSBUeXBlIHZhcmlhYmxlcwogIHZvaWQgYmVnaW5OYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbihUb2tlbiB0b2tlbikge30KCiAgLy8vIEEgbmFtZWQgZnVuY3Rpb24gZXhwcmVzc2lvbiB3aGljaCBpc24ndCBsZWdhbCBzeW50YXggaW4gRGFydC4KICAvLy8gVXNlZnVsIGZvciByZWNvdmVyaW5nIGZyb20gSmF2YXNjcmlwdCBjb2RlIGJlaW5nIHBhc3RlZCBpbnRvIGEgRGFydAogIC8vLyBwcm9ncmFtLCBhcyBpdCB3aWxsIGludGVycHJldCBgZnVuY3Rpb24gZm9vKCkge31gIGFzIGEgbmFtZWQgZnVuY3Rpb24KICAvLy8gZXhwcmVzc2lvbiB3aXRoIHJldHVybiB0eXBlIGBmdW5jdGlvbmAgYW5kIG5hbWUgYGZvb2AuCiAgLy8vCiAgLy8vIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gVHlwZSB2YXJpYWJsZXMKICAvLy8gLSBNb2RpZmllcnMKICAvLy8gLSBSZXR1cm4gdHlwZQogIC8vLyAtIE5hbWUKICAvLy8gLSBGb3JtYWxzCiAgLy8vIC0gSW5pdGlhbGl6ZXJzCiAgLy8vIC0gQXN5bmMgbW9kaWZpZXIKICAvLy8gLSBGdW5jdGlvbiBib2R5IChibG9jayBvciBhcnJvdyBleHByZXNzaW9uKS4KICB2b2lkIGVuZE5hbWVkRnVuY3Rpb25FeHByZXNzaW9uKFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiTmFtZWRGdW5jdGlvbkV4cHJlc3Npb24iKTsKICB9CgogIC8vLyBIYW5kbGUgdGhlIGJlZ2lubmluZyBvZiBhIGxvY2FsIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBNZXRhZGF0YQogIC8vLyAtIFR5cGUgdmFyaWFibGVzCiAgdm9pZCBiZWdpbkxvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbihUb2tlbiB0b2tlbikge30KCiAgLy8vIEEgZnVuY3Rpb24gZGVjbGFyYXRpb24uCiAgLy8vCiAgLy8vIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gTWV0YWRhdGEKICAvLy8gLSBUeXBlIHZhcmlhYmxlcwogIC8vLyAtIFJldHVybiB0eXBlCiAgLy8vIC0gTmFtZQogIC8vLyAtIFR5cGUgdmFyaWFibGVzCiAgLy8vIC0gRm9ybWFscwogIC8vLyAtIEluaXRpYWxpemVycwogIC8vLyAtIEFzeW5jIG1vZGlmaWVyCiAgLy8vIC0gRnVuY3Rpb24gYm9keSAoYmxvY2sgb3IgYXJyb3cgZXhwcmVzc2lvbikuCiAgdm9pZCBlbmRMb2NhbEZ1bmN0aW9uRGVjbGFyYXRpb24oVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJGdW5jdGlvbkRlY2xhcmF0aW9uIik7CiAgfQoKICAvLy8gVGhpcyBtZXRob2QgaXMgaW52b2tlZCB3aGVuIHRoZSBwYXJzZXIgc2VlcyB0aGF0IGEgZnVuY3Rpb24gaGFzIGEKICAvLy8gYmxvY2sgZnVuY3Rpb24gYm9keS4gIFRoaXMgbWV0aG9kIGlzIG5vdCBpbnZva2VkIGZvciBlbXB0eSBvciBleHByZXNzaW9uCiAgLy8vIGZ1bmN0aW9uIGJvZGllcywgc2VlIHRoZSBjb3JyZXNwb25kaW5nIG1ldGhvZHMgW2hhbmRsZUVtcHR5RnVuY3Rpb25Cb2R5XQogIC8vLyBhbmQgW2hhbmRsZUV4cHJlc3Npb25GdW5jdGlvbkJvZHldLgogIHZvaWQgYmVnaW5CbG9ja0Z1bmN0aW9uQm9keShUb2tlbiB0b2tlbikge30KCiAgLy8vIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgYnkgdGhlIHBhcnNlciBhZnRlciBpdCBmaW5pc2hlZCBwYXJzaW5nIGEgYmxvY2sKICAvLy8gZnVuY3Rpb24gYm9keS4gIFRoaXMgbWV0aG9kIGlzIG5vdCBpbnZva2VkIGZvciBlbXB0eSBvciBleHByZXNzaW9uCiAgLy8vIGZ1bmN0aW9uIGJvZGllcywgc2VlIHRoZSBjb3JyZXNwb25kaW5nIG1ldGhvZHMgW2hhbmRsZUVtcHR5RnVuY3Rpb25Cb2R5XQogIC8vLyBhbmQgW2hhbmRsZUV4cHJlc3Npb25GdW5jdGlvbkJvZHldLiAgVGhlIFtiZWdpblRva2VuXSBpcyB0aGUgJ3snIHRva2VuLAogIC8vLyBhbmQgdGhlIFtlbmRUb2tlbl0gaXMgdGhlICd9JyB0b2tlbiBvZiB0aGUgYmxvY2suICBUaGUgbnVtYmVyIG9mCiAgLy8vIHN0YXRlbWVudHMgaXMgZ2l2ZW4gYXMgdGhlIFtjb3VudF0gcGFyYW1ldGVyLgogIHZvaWQgZW5kQmxvY2tGdW5jdGlvbkJvZHkoaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIkJsb2NrRnVuY3Rpb25Cb2R5Iik7CiAgfQoKICB2b2lkIGhhbmRsZU5vRnVuY3Rpb25Cb2R5KFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiTm9GdW5jdGlvbkJvZHkiKTsKICB9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIGZ1bmN0aW9uIGJvZHkgdGhhdCB3YXMgc2tpcHBlZCBieSB0aGUgcGFyc2VyLgogIC8vLwogIC8vLyBUaGUgYm9vbGVhbiBbaXNFeHByZXNzaW9uQm9keV0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGJvZHkgdGhhdAogIC8vLyB3YXMgc2tpcHBlZCB1c2VkICI9PiIgc3ludGF4LgogIHZvaWQgaGFuZGxlRnVuY3Rpb25Cb2R5U2tpcHBlZChUb2tlbiB0b2tlbiwgYm9vbCBpc0V4cHJlc3Npb25Cb2R5KSB7fQoKICB2b2lkIGJlZ2luRnVuY3Rpb25OYW1lKFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZEZ1bmN0aW9uTmFtZShUb2tlbiBiZWdpblRva2VuLCBUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIkZ1bmN0aW9uTmFtZSIpOwogIH0KCiAgdm9pZCBiZWdpbkZ1bmN0aW9uVHlwZUFsaWFzKFRva2VuIHRva2VuKSB7fQoKICAvLy8gSGFuZGxlIHRoZSBlbmQgb2YgYSB0eXBlZGVmIGRlY2xhcmF0aW9uLgogIC8vLwogIC8vLyBJZiBbZXF1YWxzXSBpcyBudWxsLCB0aGVuIHdlIGhhdmUgdGhlIGZvbGxvd2luZyBzdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIE1ldGFkYXRhCiAgLy8vIC0gUmV0dXJuIHR5cGUKICAvLy8gLSBOYW1lIChpZGVudGlmaWVyKQogIC8vLyAtIEFsaWFzIHR5cGUgdmFyaWFibGVzCiAgLy8vIC0gRm9ybWFsIHBhcmFtZXRlcnMKICAvLy8KICAvLy8gSWYgW2VxdWFsc10gaXMgbm90IG51bGwsIHRoZW4gdGhlIGhhdmUgdGhlIGZvbGxvd2luZyBzdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIE1ldGFkYXRhCiAgLy8vIC0gTmFtZSAoaWRlbnRpZmllcikKICAvLy8gLSBBbGlhcyB0eXBlIHZhcmlhYmxlcwogIC8vLyAtIFR5cGUgKEZ1bmN0aW9uVHlwZUFubm90YXRpb24pCiAgdm9pZCBlbmRGdW5jdGlvblR5cGVBbGlhcygKICAgICAgVG9rZW4gdHlwZWRlZktleXdvcmQsIFRva2VuIGVxdWFscywgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJGdW5jdGlvblR5cGVBbGlhcyIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGEgd2l0aCBjbGF1c2UgKGUuZy4gIndpdGggQiwgQyIpLgogIC8vLyBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIG1peGluIHR5cGVzIChUeXBlTGlzdCkKICB2b2lkIGhhbmRsZUNsYXNzV2l0aENsYXVzZShUb2tlbiB3aXRoS2V5d29yZCkgewogICAgbG9nRXZlbnQoIkNsYXNzV2l0aENsYXVzZSIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgYWJzZW5jZSBvZiBhIHdpdGggY2xhdXNlLgogIHZvaWQgaGFuZGxlQ2xhc3NOb1dpdGhDbGF1c2UoKSB7CiAgICBsb2dFdmVudCgiQ2xhc3NOb1dpdGhDbGF1c2UiKTsKICB9CgogIC8vLyBIYW5kbGUgdGhlIGJlZ2lubmluZyBvZiBhIG5hbWVkIG1peGluIGFwcGxpY2F0aW9uLgogIC8vLyBbYmVnaW5Ub2tlbl0gbWF5IGJlIHRoZSBzYW1lIGFzIFtuYW1lXSwgb3IgbWF5IHBvaW50IHRvIG1vZGlmaWVycwogIC8vLyAob3IgZXh0cmFuZW91cyBtb2RpZmllcnMgaW4gdGhlIGNhc2Ugb2YgcmVjb3ZlcnkpIHByZWNlZGluZyBbbmFtZV0uCiAgLy8vCiAgLy8vIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBwYXJzZWQgdGhlIG5hbWUgYW5kIHR5cGUgcGFyYW1ldGVyIGRlY2xhcmF0aW9ucy4KICB2b2lkIGJlZ2luTmFtZWRNaXhpbkFwcGxpY2F0aW9uKAogICAgICBUb2tlbiBiZWdpbiwgVG9rZW4gYWJzdHJhY3RUb2tlbiwgVG9rZW4gbmFtZSkge30KCiAgLy8vIEhhbmRsZSBhIG5hbWVkIG1peGluIGFwcGxpY2F0aW9uIHdpdGggY2xhdXNlIChlLmcuICJBIHdpdGggQiwgQyIpLgogIC8vLyBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIHN1cGVydHlwZQogIC8vLyAtIG1peGluIHR5cGVzIChUeXBlTGlzdCkKICB2b2lkIGhhbmRsZU5hbWVkTWl4aW5BcHBsaWNhdGlvbldpdGhDbGF1c2UoVG9rZW4gd2l0aEtleXdvcmQpIHsKICAgIGxvZ0V2ZW50KCJOYW1lZE1peGluQXBwbGljYXRpb25XaXRoQ2xhdXNlIik7CiAgfQoKICAvLy8gSGFuZGxlIHRoZSBlbmQgb2YgYSBuYW1lZCBtaXhpbiBkZWNsYXJhdGlvbi4gIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gbWV0YWRhdGEKICAvLy8gLSBtb2RpZmllcnMKICAvLy8gLSBjbGFzcyBuYW1lCiAgLy8vIC0gdHlwZSB2YXJpYWJsZXMKICAvLy8gLSBzdXBlcnR5cGUKICAvLy8gLSB3aXRoIGNsYXVzZQogIC8vLyAtIGltcGxlbWVudGVkIHR5cGVzIChUeXBlTGlzdCkKICAvLy8KICAvLy8gVE9ETyhwYXVsYmVycnksYWhlKTogaXQgc2VlbXMgaW5jb25zaXN0ZW50IHRoYXQgZm9yIGEgbmFtZWQgbWl4aW4KICAvLy8gYXBwbGljYXRpb24sIHRoZSBpbXBsZW1lbnRlZCB0eXBlcyBhcmUgYSBUeXBlTGlzdCwgd2hlcmVhcyBmb3IgYSBjbGFzcwogIC8vLyBkZWNsYXJhdGlvbiwgZWFjaCBpbXBsZW1lbnRlZCB0eXBlIGlzIGxpc3RlZCBzZXBhcmF0ZWx5IG9uIHRoZSBzdGFjaywgYW5kCiAgLy8vIHRoZSBudW1iZXIgb2YgaW1wbGVtZW50ZWQgdHlwZXMgaXMgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLgogIHZvaWQgZW5kTmFtZWRNaXhpbkFwcGxpY2F0aW9uKFRva2VuIGJlZ2luLCBUb2tlbiBjbGFzc0tleXdvcmQsIFRva2VuIGVxdWFscywKICAgICAgVG9rZW4gaW1wbGVtZW50c0tleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiTmFtZWRNaXhpbkFwcGxpY2F0aW9uIik7CiAgfQoKICB2b2lkIGJlZ2luSGlkZShUb2tlbiBoaWRlS2V5d29yZCkge30KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGEgImhpZGUiIGNvbWJpbmF0b3IuICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIGhpZGRlbiBuYW1lcyAoSWRlbnRpZmllckxpc3QpCiAgdm9pZCBlbmRIaWRlKFRva2VuIGhpZGVLZXl3b3JkKSB7CiAgICBsb2dFdmVudCgiSGlkZSIpOwogIH0KCiAgdm9pZCBoYW5kbGVJZGVudGlmaWVyTGlzdChpbnQgY291bnQpIHsKICAgIGxvZ0V2ZW50KCJJZGVudGlmaWVyTGlzdCIpOwogIH0KCiAgdm9pZCBiZWdpblR5cGVMaXN0KFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZFR5cGVMaXN0KGludCBjb3VudCkgewogICAgbG9nRXZlbnQoIlR5cGVMaXN0Iik7CiAgfQoKICB2b2lkIGJlZ2luSWZTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kSWZTdGF0ZW1lbnQoVG9rZW4gaWZUb2tlbiwgVG9rZW4gZWxzZVRva2VuKSB7CiAgICBsb2dFdmVudCgiSWZTdGF0ZW1lbnQiKTsKICB9CgogIHZvaWQgYmVnaW5UaGVuU3RhdGVtZW50KFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZFRoZW5TdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJUaGVuU3RhdGVtZW50Iik7CiAgfQoKICB2b2lkIGJlZ2luRWxzZVN0YXRlbWVudChUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmRFbHNlU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiRWxzZVN0YXRlbWVudCIpOwogIH0KCiAgdm9pZCBiZWdpbkltcG9ydChUb2tlbiBpbXBvcnRLZXl3b3JkKSB7fQoKICAvLy8gU2lnbmFscyB0aGF0IHRoZSBjdXJyZW50IGltcG9ydCBpcyBkZWZlcnJlZCBhbmQvb3IgaGFzIGEgcHJlZml4CiAgLy8vIGRlcGVuZGluZyB1cG9uIHdoZXRoZXIgW2RlZmVycmVkS2V5d29yZF0gYW5kIFthc0tleXdvcmRdCiAgLy8vIGFyZSBub3QgYG51bGxgIHJlc3BlY3RpdmVseS4gU3Vic3RydWN0dXJlczoKICAvLy8gLSBwcmVmaXggaWRlbnRpZmllciAob25seSBpZiBhc0tleXdvcmQgIT0gbnVsbCkKICB2b2lkIGhhbmRsZUltcG9ydFByZWZpeChUb2tlbiBkZWZlcnJlZEtleXdvcmQsIFRva2VuIGFzS2V5d29yZCkgewogICAgbG9nRXZlbnQoIkltcG9ydFByZWZpeCIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGFuIGltcG9ydCBkaXJlY3RpdmUuICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIG1ldGFkYXRhCiAgLy8vIC0gdXJpCiAgLy8vIC0gY29uZGl0aW9uYWwgdXJpcwogIC8vLyAtIHByZWZpeCBpZGVudGlmaWVyCiAgLy8vIC0gY29tYmluYXRvcnMKICB2b2lkIGVuZEltcG9ydChUb2tlbiBpbXBvcnRLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGxvZ0V2ZW50KCJJbXBvcnQiKTsKICB9CgogIC8vLyBIYW5kbGUgcmVjb3ZlcnkgYXNzb2NpYXRlZCB3aXRoIGFuIGltcG9ydCBkaXJlY3RpdmUuCiAgLy8vIFRoaXMgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBhZnRlciBbZW5kSW1wb3J0XQogIC8vLyB0byByZWNvdmVyIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcmV2aW91cyBpbXBvcnQgZGlyZWN0aXZlLgogIC8vLyBUaGUgc3Vic3RydWN0dXJlcyBhcmUgYSBzdWJzZXQgb2YgYW5kIGluIHRoZSBzYW1lIG9yZGVyIGFzIFtlbmRJbXBvcnRdOgogIC8vLyAtIGNvbmRpdGlvbmFsIHVyaXMKICAvLy8gLSBwcmVmaXggaWRlbnRpZmllcgogIC8vLyAtIGNvbWJpbmF0b3JzCiAgdm9pZCBoYW5kbGVSZWNvdmVySW1wb3J0KFRva2VuIHNlbWljb2xvbikgewogICAgbG9nRXZlbnQoIkltcG9ydFJlY292ZXJ5Iik7CiAgfQoKICB2b2lkIGJlZ2luQ29uZGl0aW9uYWxVcmlzKFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZENvbmRpdGlvbmFsVXJpcyhpbnQgY291bnQpIHsKICAgIGxvZ0V2ZW50KCJDb25kaXRpb25hbFVyaXMiKTsKICB9CgogIHZvaWQgYmVnaW5Db25kaXRpb25hbFVyaShUb2tlbiBpZktleXdvcmQpIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIGNvbmRpdGlvbmFsIFVSSSBjb25zdHJ1Y3QuICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIERvdHRlZCBuYW1lCiAgLy8vIC0gQ29uZGl0aW9uIChsaXRlcmFsIHN0cmluZzsgb25seSBpZiBbZXF1YWxTaWduXSAhPSBudWxsKQogIC8vLyAtIFVSSSAobGl0ZXJhbCBzdHJpbmcpCiAgdm9pZCBlbmRDb25kaXRpb25hbFVyaShUb2tlbiBpZktleXdvcmQsIFRva2VuIGxlZnRQYXJlbiwgVG9rZW4gZXF1YWxTaWduKSB7CiAgICBsb2dFdmVudCgiQ29uZGl0aW9uYWxVcmkiKTsKICB9CgogIHZvaWQgaGFuZGxlRG90dGVkTmFtZShpbnQgY291bnQsIFRva2VuIGZpcnN0SWRlbnRpZmllcikgewogICAgbG9nRXZlbnQoIkRvdHRlZE5hbWUiKTsKICB9CgogIHZvaWQgYmVnaW5JbXBsaWNpdENyZWF0aW9uRXhwcmVzc2lvbihUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmRJbXBsaWNpdENyZWF0aW9uRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIkltcGxpY2l0Q3JlYXRpb25FeHByZXNzaW9uIik7CiAgfQoKICB2b2lkIGJlZ2luSW5pdGlhbGl6ZWRJZGVudGlmaWVyKFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZEluaXRpYWxpemVkSWRlbnRpZmllcihUb2tlbiBuYW1lVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJJbml0aWFsaXplZElkZW50aWZpZXIiKTsKICB9CgogIHZvaWQgYmVnaW5GaWVsZEluaXRpYWxpemVyKFRva2VuIHRva2VuKSB7fQoKICAvLy8gSGFuZGxlIHRoZSBlbmQgb2YgYSBmaWVsZCBpbml0aWFsaXplci4gIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gSW5pdGlhbGl6ZXIgZXhwcmVzc2lvbgogIHZvaWQgZW5kRmllbGRJbml0aWFsaXplcihUb2tlbiBhc3NpZ25tZW50LCBUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIkZpZWxkSW5pdGlhbGl6ZXIiKTsKICB9CgogIC8vLyBIYW5kbGUgdGhlIGxhY2sgb2YgYSBmaWVsZCBpbml0aWFsaXplci4KICB2b2lkIGhhbmRsZU5vRmllbGRJbml0aWFsaXplcihUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIk5vRmllbGRJbml0aWFsaXplciIpOwogIH0KCiAgdm9pZCBiZWdpblZhcmlhYmxlSW5pdGlhbGl6ZXIoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIHZhcmlhYmxlIGluaXRpYWxpemVyLiBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIEluaXRpYWxpemVyIGV4cHJlc3Npb24uCiAgdm9pZCBlbmRWYXJpYWJsZUluaXRpYWxpemVyKFRva2VuIGFzc2lnbm1lbnRPcGVyYXRvcikgewogICAgbG9nRXZlbnQoIlZhcmlhYmxlSW5pdGlhbGl6ZXIiKTsKICB9CgogIC8vLyBVc2VkIHdoZW4gYSB2YXJpYWJsZSBoYXMgbm8gaW5pdGlhbGl6ZXIuCiAgdm9pZCBoYW5kbGVOb1ZhcmlhYmxlSW5pdGlhbGl6ZXIoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJOb1ZhcmlhYmxlSW5pdGlhbGl6ZXIiKTsKICB9CgogIHZvaWQgYmVnaW5Jbml0aWFsaXplcihUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmRJbml0aWFsaXplcihUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIkNvbnN0cnVjdG9ySW5pdGlhbGl6ZXIiKTsKICB9CgogIHZvaWQgYmVnaW5Jbml0aWFsaXplcnMoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kSW5pdGlhbGl6ZXJzKGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJJbml0aWFsaXplcnMiKTsKICB9CgogIHZvaWQgaGFuZGxlTm9Jbml0aWFsaXplcnMoKSB7CiAgICBsb2dFdmVudCgiTm9Jbml0aWFsaXplcnMiKTsKICB9CgogIC8vLyBDYWxsZWQgYWZ0ZXIgdGhlIGxpc3RlbmVyIGhhcyByZWNvdmVyZWQgZnJvbSBhbiBpbnZhbGlkIGV4cHJlc3Npb24uIFRoZQogIC8vLyBwYXJzZXIgd2lsbCByZXN1bWUgcGFyc2luZyBmcm9tIFt0b2tlbl0uIEV4YWN0bHkgd2hlcmUgdGhlIHBhcnNlciB3aWxsCiAgLy8vIHJlc3VtZSBwYXJzaW5nIGlzIHVuc3BlY2lmaWVkLgogIHZvaWQgaGFuZGxlSW52YWxpZEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJJbnZhbGlkRXhwcmVzc2lvbiIpOwogIH0KCiAgLy8vIENhbGxlZCBhZnRlciB0aGUgbGlzdGVuZXIgaGFzIHJlY292ZXJlZCBmcm9tIGFuIGludmFsaWQgZnVuY3Rpb24KICAvLy8gYm9keS4gVGhlIHBhcnNlciBleHBlY3RlZCBhbiBvcGVuIGN1cmx5IGJyYWNlIGB7YCBhbmQgd2lsbCByZXN1bWUgcGFyc2luZwogIC8vLyBmcm9tIFt0b2tlbl0gYXMgaWYgYSBmdW5jdGlvbiBib2R5IGhhZCBwcmVjZWRlZCBpdC4KICB2b2lkIGhhbmRsZUludmFsaWRGdW5jdGlvbkJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJJbnZhbGlkRnVuY3Rpb25Cb2R5Iik7CiAgfQoKICAvLy8gQ2FsbGVkIGFmdGVyIHRoZSBsaXN0ZW5lciBoYXMgcmVjb3ZlcmVkIGZyb20gYW4gaW52YWxpZCB0eXBlLiBUaGUgcGFyc2VyCiAgLy8vIGV4cGVjdGVkIGFuIGlkZW50aWZpZXIsIGFuZCB3aWxsIHJlc3VtZSBwYXJzaW5nIHR5cGUgYXJndW1lbnRzIGZyb20KICAvLy8gW3Rva2VuXS4KICB2b2lkIGhhbmRsZUludmFsaWRUeXBlUmVmZXJlbmNlKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiSW52YWxpZFR5cGVSZWZlcmVuY2UiKTsKICB9CgogIHZvaWQgaGFuZGxlTGFiZWwoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJMYWJlbCIpOwogIH0KCiAgdm9pZCBiZWdpbkxhYmVsZWRTdGF0ZW1lbnQoVG9rZW4gdG9rZW4sIGludCBsYWJlbENvdW50KSB7fQoKICB2b2lkIGVuZExhYmVsZWRTdGF0ZW1lbnQoaW50IGxhYmVsQ291bnQpIHsKICAgIGxvZ0V2ZW50KCJMYWJlbGVkU3RhdGVtZW50Iik7CiAgfQoKICB2b2lkIGJlZ2luTGlicmFyeU5hbWUoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIGxpYnJhcnkgZGlyZWN0aXZlLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBNZXRhZGF0YQogIC8vLyAtIExpYnJhcnkgbmFtZSAoYSBxdWFsaWZpZWQgaWRlbnRpZmllcikKICB2b2lkIGVuZExpYnJhcnlOYW1lKFRva2VuIGxpYnJhcnlLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGxvZ0V2ZW50KCJMaWJyYXJ5TmFtZSIpOwogIH0KCiAgdm9pZCBoYW5kbGVMaXRlcmFsTWFwRW50cnkoVG9rZW4gY29sb24sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiTGl0ZXJhbE1hcEVudHJ5Iik7CiAgfQoKICB2b2lkIGJlZ2luTGl0ZXJhbFN0cmluZyhUb2tlbiB0b2tlbikge30KCiAgdm9pZCBoYW5kbGVJbnRlcnBvbGF0aW9uRXhwcmVzc2lvbihUb2tlbiBsZWZ0QnJhY2tldCwgVG9rZW4gcmlnaHRCcmFja2V0KSB7fQoKICB2b2lkIGVuZExpdGVyYWxTdHJpbmcoaW50IGludGVycG9sYXRpb25Db3VudCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJMaXRlcmFsU3RyaW5nIik7CiAgfQoKICB2b2lkIGhhbmRsZVN0cmluZ0p1eHRhcG9zaXRpb24oaW50IGxpdGVyYWxDb3VudCkgewogICAgbG9nRXZlbnQoIlN0cmluZ0p1eHRhcG9zaXRpb24iKTsKICB9CgogIHZvaWQgYmVnaW5NZW1iZXIoKSB7fQoKICAvLy8gSGFuZGxlIGFuIGludmFsaWQgbWVtYmVyIGRlY2xhcmF0aW9uLiBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIG1ldGFkYXRhCiAgdm9pZCBoYW5kbGVJbnZhbGlkTWVtYmVyKFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiSW52YWxpZE1lbWJlciIpOwogIH0KCiAgLy8vIFRoaXMgZXZlbnQgaXMgYWRkZWQgZm9yIGNvbnZlbmllbmNlLiBOb3JtYWxseSwgb25lIHNob3VsZCBvdmVycmlkZQogIC8vLyBbZW5kQ2xhc3NGaWVsZHNdLCBbZW5kTWl4aW5GaWVsZHNdLCBbZW5kRXh0ZW5zaW9uRmllbGRzXSwKICAvLy8gW2VuZENsYXNzTWV0aG9kXSwgW2VuZE1peGluTWV0aG9kXSwgW2VuZEV4dGVuc2lvbk1ldGhvZF0sCiAgLy8vIFtlbmRDbGFzc0NvbnN0cnVjdG9yXSwgW2VuZE1peGluQ29uc3RydWN0b3JdLAogIC8vLyBvciBbZW5kRXh0ZW5zaW9uQ29uc3RydWN0b3JdIGluc3RlYWQuCiAgdm9pZCBlbmRNZW1iZXIoKSB7CiAgICBsb2dFdmVudCgiTWVtYmVyIik7CiAgfQoKICAvLy8gSGFuZGxlIHRoZSBiZWdpbm5pbmcgb2YgYSBtZXRob2QgZGVjbGFyYXRpb24uICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIG1ldGFkYXRhCiAgdm9pZCBiZWdpbk1ldGhvZChUb2tlbiBleHRlcm5hbFRva2VuLCBUb2tlbiBzdGF0aWNUb2tlbiwgVG9rZW4gY292YXJpYW50VG9rZW4sCiAgICAgIFRva2VuIHZhckZpbmFsT3JDb25zdCwgVG9rZW4gZ2V0T3JTZXQsIFRva2VuIG5hbWUpIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIGNsYXNzIG1ldGhvZCBkZWNsYXJhdGlvbi4gIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gbWV0YWRhdGEKICAvLy8gLSByZXR1cm4gdHlwZQogIC8vLyAtIG1ldGhvZCBuYW1lIChpZGVudGlmaWVyLCBwb3NzaWJseSBxdWFsaWZpZWQpCiAgLy8vIC0gdHlwZSB2YXJpYWJsZXMKICAvLy8gLSBmb3JtYWwgcGFyYW1ldGVycwogIC8vLyAtIGluaXRpYWxpemVycwogIC8vLyAtIGFzeW5jIG1hcmtlcgogIC8vLyAtIGJvZHkKICB2b2lkIGVuZENsYXNzTWV0aG9kKFRva2VuIGdldE9yU2V0LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBiZWdpblBhcmFtLAogICAgICBUb2tlbiBiZWdpbkluaXRpYWxpemVycywgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJDbGFzc01ldGhvZCIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGEgbWl4aW4gbWV0aG9kIGRlY2xhcmF0aW9uLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBtZXRhZGF0YQogIC8vLyAtIHJldHVybiB0eXBlCiAgLy8vIC0gbWV0aG9kIG5hbWUgKGlkZW50aWZpZXIsIHBvc3NpYmx5IHF1YWxpZmllZCkKICAvLy8gLSB0eXBlIHZhcmlhYmxlcwogIC8vLyAtIGZvcm1hbCBwYXJhbWV0ZXJzCiAgLy8vIC0gaW5pdGlhbGl6ZXJzCiAgLy8vIC0gYXN5bmMgbWFya2VyCiAgLy8vIC0gYm9keQogIHZvaWQgZW5kTWl4aW5NZXRob2QoVG9rZW4gZ2V0T3JTZXQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGJlZ2luUGFyYW0sCiAgICAgIFRva2VuIGJlZ2luSW5pdGlhbGl6ZXJzLCBUb2tlbiBlbmRUb2tlbikgewogICAgLy8gVE9ETyhkYW5ydWJlbCk6IHB1c2ggaW1wbGVtZW50YXRpb24gaW50byBzdWJjbGFzc2VzCiAgICBlbmRDbGFzc01ldGhvZCgKICAgICAgICBnZXRPclNldCwgYmVnaW5Ub2tlbiwgYmVnaW5QYXJhbSwgYmVnaW5Jbml0aWFsaXplcnMsIGVuZFRva2VuKTsKICB9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIGV4dGVuc2lvbiBtZXRob2QgZGVjbGFyYXRpb24uICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIG1ldGFkYXRhCiAgLy8vIC0gcmV0dXJuIHR5cGUKICAvLy8gLSBtZXRob2QgbmFtZSAoaWRlbnRpZmllciwgcG9zc2libHkgcXVhbGlmaWVkKQogIC8vLyAtIHR5cGUgdmFyaWFibGVzCiAgLy8vIC0gZm9ybWFsIHBhcmFtZXRlcnMKICAvLy8gLSBpbml0aWFsaXplcnMKICAvLy8gLSBhc3luYyBtYXJrZXIKICAvLy8gLSBib2R5CiAgdm9pZCBlbmRFeHRlbnNpb25NZXRob2QoVG9rZW4gZ2V0T3JTZXQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGJlZ2luUGFyYW0sCiAgICAgIFRva2VuIGJlZ2luSW5pdGlhbGl6ZXJzLCBUb2tlbiBlbmRUb2tlbikgewogICAgLy8gVE9ETyhkYW5ydWJlbCk6IHB1c2ggaW1wbGVtZW50YXRpb24gaW50byBzdWJjbGFzc2VzCiAgICBlbmRDbGFzc01ldGhvZCgKICAgICAgICBnZXRPclNldCwgYmVnaW5Ub2tlbiwgYmVnaW5QYXJhbSwgYmVnaW5Jbml0aWFsaXplcnMsIGVuZFRva2VuKTsKICB9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIGNsYXNzIGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBtZXRhZGF0YQogIC8vLyAtIHJldHVybiB0eXBlCiAgLy8vIC0gbWV0aG9kIG5hbWUgKGlkZW50aWZpZXIsIHBvc3NpYmx5IHF1YWxpZmllZCkKICAvLy8gLSB0eXBlIHZhcmlhYmxlcwogIC8vLyAtIGZvcm1hbCBwYXJhbWV0ZXJzCiAgLy8vIC0gaW5pdGlhbGl6ZXJzCiAgLy8vIC0gYXN5bmMgbWFya2VyCiAgLy8vIC0gYm9keQogIHZvaWQgZW5kQ2xhc3NDb25zdHJ1Y3RvcihUb2tlbiBnZXRPclNldCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gYmVnaW5QYXJhbSwKICAgICAgVG9rZW4gYmVnaW5Jbml0aWFsaXplcnMsIFRva2VuIGVuZFRva2VuKSB7CiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogcHVzaCBpbXBsZW1lbnRhdGlvbiBpbnRvIHN1YmNsYXNzZXMKICAgIGVuZENsYXNzTWV0aG9kKAogICAgICAgIGdldE9yU2V0LCBiZWdpblRva2VuLCBiZWdpblBhcmFtLCBiZWdpbkluaXRpYWxpemVycywgZW5kVG9rZW4pOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGEgbWl4aW4gY29uc3RydWN0b3IgZGVjbGFyYXRpb24uICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIG1ldGFkYXRhCiAgLy8vIC0gcmV0dXJuIHR5cGUKICAvLy8gLSBtZXRob2QgbmFtZSAoaWRlbnRpZmllciwgcG9zc2libHkgcXVhbGlmaWVkKQogIC8vLyAtIHR5cGUgdmFyaWFibGVzCiAgLy8vIC0gZm9ybWFsIHBhcmFtZXRlcnMKICAvLy8gLSBpbml0aWFsaXplcnMKICAvLy8gLSBhc3luYyBtYXJrZXIKICAvLy8gLSBib2R5CiAgdm9pZCBlbmRNaXhpbkNvbnN0cnVjdG9yKFRva2VuIGdldE9yU2V0LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBiZWdpblBhcmFtLAogICAgICBUb2tlbiBiZWdpbkluaXRpYWxpemVycywgVG9rZW4gZW5kVG9rZW4pIHsKICAgIC8vIFRPRE8oZGFucnViZWwpOiBwdXNoIGltcGxlbWVudGF0aW9uIGludG8gc3ViY2xhc3NlcwogICAgZW5kQ2xhc3NNZXRob2QoCiAgICAgICAgZ2V0T3JTZXQsIGJlZ2luVG9rZW4sIGJlZ2luUGFyYW0sIGJlZ2luSW5pdGlhbGl6ZXJzLCBlbmRUb2tlbik7CiAgfQoKICAvLy8gSGFuZGxlIHRoZSBlbmQgb2YgYSBleHRlbnNpb24gY29uc3RydWN0b3IgZGVjbGFyYXRpb24uICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIG1ldGFkYXRhCiAgLy8vIC0gcmV0dXJuIHR5cGUKICAvLy8gLSBtZXRob2QgbmFtZSAoaWRlbnRpZmllciwgcG9zc2libHkgcXVhbGlmaWVkKQogIC8vLyAtIHR5cGUgdmFyaWFibGVzCiAgLy8vIC0gZm9ybWFsIHBhcmFtZXRlcnMKICAvLy8gLSBpbml0aWFsaXplcnMKICAvLy8gLSBhc3luYyBtYXJrZXIKICAvLy8gLSBib2R5CiAgdm9pZCBlbmRFeHRlbnNpb25Db25zdHJ1Y3RvcihUb2tlbiBnZXRPclNldCwgVG9rZW4gYmVnaW5Ub2tlbiwKICAgICAgVG9rZW4gYmVnaW5QYXJhbSwgVG9rZW4gYmVnaW5Jbml0aWFsaXplcnMsIFRva2VuIGVuZFRva2VuKSB7CiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogcHVzaCBpbXBsZW1lbnRhdGlvbiBpbnRvIHN1YmNsYXNzZXMKICAgIGVuZENsYXNzTWV0aG9kKAogICAgICAgIGdldE9yU2V0LCBiZWdpblRva2VuLCBiZWdpblBhcmFtLCBiZWdpbkluaXRpYWxpemVycywgZW5kVG9rZW4pOwogIH0KCiAgdm9pZCBiZWdpbk1ldGFkYXRhU3RhcihUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmRNZXRhZGF0YVN0YXIoaW50IGNvdW50KSB7CiAgICBsb2dFdmVudCgiTWV0YWRhdGFTdGFyIik7CiAgfQoKICB2b2lkIGJlZ2luTWV0YWRhdGEoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIG1ldGFkYXRhIGFubm90YXRpb24uICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIElkZW50aWZpZXIKICAvLy8gLSBUeXBlIGFyZ3VtZW50cwogIC8vLyAtIENvbnN0cnVjdG9yIG5hbWUgKG9ubHkgaWYgW3BlcmlvZEJlZm9yZU5hbWVdIGlzIG5vdCBgbnVsbGApCiAgLy8vIC0gQXJndW1lbnRzCiAgdm9pZCBlbmRNZXRhZGF0YShUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBwZXJpb2RCZWZvcmVOYW1lLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIk1ldGFkYXRhIik7CiAgfQoKICB2b2lkIGJlZ2luT3B0aW9uYWxGb3JtYWxQYXJhbWV0ZXJzKFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZE9wdGlvbmFsRm9ybWFsUGFyYW1ldGVycygKICAgICAgaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIk9wdGlvbmFsRm9ybWFsUGFyYW1ldGVycyIpOwogIH0KCiAgdm9pZCBiZWdpblBhcnQoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIHBhcnQgZGlyZWN0aXZlLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBtZXRhZGF0YQogIC8vLyAtIHVyaQogIHZvaWQgZW5kUGFydChUb2tlbiBwYXJ0S2V5d29yZCwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBsb2dFdmVudCgiUGFydCIpOwogIH0KCiAgdm9pZCBiZWdpblBhcnRPZihUb2tlbiB0b2tlbikge30KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGEgInBhcnQgb2YiIGRpcmVjdGl2ZS4gIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gTWV0YWRhdGEKICAvLy8gLSBMaWJyYXJ5IG5hbWUgKGEgcXVhbGlmaWVkIGlkZW50aWZpZXIpCiAgLy8vCiAgLy8vIElmIFtoYXNOYW1lXSBpcyB0cnVlLCB0aGlzIHBhcnQgcmVmZXJzIHRvIGl0cyBsaWJyYXJ5IGJ5IG5hbWUsIG90aGVyd2lzZSwKICAvLy8gYnkgVVJJLgogIHZvaWQgZW5kUGFydE9mKAogICAgICBUb2tlbiBwYXJ0S2V5d29yZCwgVG9rZW4gb2ZLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24sIGJvb2wgaGFzTmFtZSkgewogICAgbG9nRXZlbnQoIlBhcnRPZiIpOwogIH0KCiAgdm9pZCBiZWdpblJlZGlyZWN0aW5nRmFjdG9yeUJvZHkoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kUmVkaXJlY3RpbmdGYWN0b3J5Qm9keShUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIlJlZGlyZWN0aW5nRmFjdG9yeUJvZHkiKTsKICB9CgogIHZvaWQgYmVnaW5SZXR1cm5TdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIGBuYXRpdmVgIGZ1bmN0aW9uLgogIC8vLyBUaGUgW2hhbmRsZU5hdGl2ZUNsYXVzZV0gZXZlbnQgaXMgc2VudCBwcmlvciB0byB0aGlzIGV2ZW50LgogIHZvaWQgaGFuZGxlTmF0aXZlRnVuY3Rpb25Cb2R5KFRva2VuIG5hdGl2ZVRva2VuLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGxvZ0V2ZW50KCJOYXRpdmVGdW5jdGlvbkJvZHkiKTsKICB9CgogIC8vLyBDYWxsZWQgYWZ0ZXIgdGhlIFtoYW5kbGVOYXRpdmVDbGF1c2VdIGV2ZW50IHdoZW4gdGhlIHBhcnNlciBkZXRlcm1pbmVzCiAgLy8vIHRoYXQgdGhlIG5hdGl2ZSBjbGF1c2Ugc2hvdWxkIGJlIGRpc2NhcmRlZCAvIGlnbm9yZWQuCiAgLy8vIEZvciBleGFtcGxlLCB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgYSBuYXRpdmUgY2xhdXNlIGlzIGZvbGxvd2VkIGJ5CiAgLy8vIGEgZnVuY3Rpb24gYm9keS4KICB2b2lkIGhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keUlnbm9yZWQoVG9rZW4gbmF0aXZlVG9rZW4sIFRva2VuIHNlbWljb2xvbikgewogICAgbG9nRXZlbnQoIk5hdGl2ZUZ1bmN0aW9uQm9keUlnbm9yZWQiKTsKICB9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIGBuYXRpdmVgIGZ1bmN0aW9uIHRoYXQgd2FzIHNraXBwZWQgYnkgdGhlIHBhcnNlci4KICAvLy8gVGhlIFtoYW5kbGVOYXRpdmVDbGF1c2VdIGV2ZW50IGlzIHNlbnQgcHJpb3IgdG8gdGhpcyBldmVudC4KICB2b2lkIGhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keVNraXBwZWQoVG9rZW4gbmF0aXZlVG9rZW4sIFRva2VuIHNlbWljb2xvbikgewogICAgbG9nRXZlbnQoIk5hdGl2ZUZ1bmN0aW9uQm9keVNraXBwZWQiKTsKICB9CgogIC8vLyBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIHdoZW4gYSBmdW5jdGlvbiBoYXMgdGhlIGVtcHR5IGJvZHkuCiAgdm9pZCBoYW5kbGVFbXB0eUZ1bmN0aW9uQm9keShUb2tlbiBzZW1pY29sb24pIHsKICAgIGxvZ0V2ZW50KCJFbXB0eUZ1bmN0aW9uQm9keSIpOwogIH0KCiAgLy8vIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgd2hlbiBwYXJzZXIgZmluaXNoZXMgcGFyc2luZyB0aGUgY29ycmVzcG9uZGluZwogIC8vLyBleHByZXNzaW9uIG9mIHRoZSBleHByZXNzaW9uIGZ1bmN0aW9uIGJvZHkuCiAgdm9pZCBoYW5kbGVFeHByZXNzaW9uRnVuY3Rpb25Cb2R5KFRva2VuIGFycm93VG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiRXhwcmVzc2lvbkZ1bmN0aW9uQm9keSIpOwogIH0KCiAgdm9pZCBlbmRSZXR1cm5TdGF0ZW1lbnQoCiAgICAgIGJvb2wgaGFzRXhwcmVzc2lvbiwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJSZXR1cm5TdGF0ZW1lbnQiKTsKICB9CgogIHZvaWQgaGFuZGxlU2VuZChUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIlNlbmQiKTsKICB9CgogIHZvaWQgYmVnaW5TaG93KFRva2VuIHNob3dLZXl3b3JkKSB7fQoKICAvLy8gSGFuZGxlIHRoZSBlbmQgb2YgYSAic2hvdyIgY29tYmluYXRvci4gIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gc2hvd24gbmFtZXMgKElkZW50aWZpZXJMaXN0KQogIHZvaWQgZW5kU2hvdyhUb2tlbiBzaG93S2V5d29yZCkgewogICAgbG9nRXZlbnQoIlNob3ciKTsKICB9CgogIHZvaWQgYmVnaW5Td2l0Y2hTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kU3dpdGNoU3RhdGVtZW50KFRva2VuIHN3aXRjaEtleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiU3dpdGNoU3RhdGVtZW50Iik7CiAgfQoKICB2b2lkIGJlZ2luU3dpdGNoQmxvY2soVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kU3dpdGNoQmxvY2soaW50IGNhc2VDb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJTd2l0Y2hCbG9jayIpOwogIH0KCiAgdm9pZCBiZWdpbkxpdGVyYWxTeW1ib2woVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kTGl0ZXJhbFN5bWJvbChUb2tlbiBoYXNoVG9rZW4sIGludCBpZGVudGlmaWVyQ291bnQpIHsKICAgIGxvZ0V2ZW50KCJMaXRlcmFsU3ltYm9sIik7CiAgfQoKICB2b2lkIGhhbmRsZVRocm93RXhwcmVzc2lvbihUb2tlbiB0aHJvd1Rva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIlRocm93RXhwcmVzc2lvbiIpOwogIH0KCiAgdm9pZCBiZWdpblJldGhyb3dTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kUmV0aHJvd1N0YXRlbWVudChUb2tlbiByZXRocm93VG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiUmV0aHJvd1N0YXRlbWVudCIpOwogIH0KCiAgLy8vIFRoaXMgZXZlbnQgaXMgYWRkZWQgZm9yIGNvbnZlbmllbmNlLiBOb3JtYWxseSwgb25lIHNob3VsZCB1c2UKICAvLy8gW2VuZENsYXNzRGVjbGFyYXRpb25dLCBbZW5kTmFtZWRNaXhpbkFwcGxpY2F0aW9uXSwgW2VuZEVudW1dLAogIC8vLyBbZW5kRnVuY3Rpb25UeXBlQWxpYXNdLCBbZW5kTGlicmFyeU5hbWVdLCBbZW5kSW1wb3J0XSwgW2VuZEV4cG9ydF0sCiAgLy8vIFtlbmRQYXJ0XSwgW2VuZFBhcnRPZl0sIFtlbmRUb3BMZXZlbEZpZWxkc10sIG9yIFtlbmRUb3BMZXZlbE1ldGhvZF0uCiAgdm9pZCBlbmRUb3BMZXZlbERlY2xhcmF0aW9uKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiVG9wTGV2ZWxEZWNsYXJhdGlvbiIpOwogIH0KCiAgLy8vIENhbGxlZCBieSB0aGUgW1BhcnNlcl0gd2hlbiBpdCByZWNvdmVycyBmcm9tIGFuIGludmFsaWQgdG9wIGxldmVsCiAgLy8vIGRlY2xhcmF0aW9uLCB3aGVyZSBbZW5kVG9rZW5dIGlzIHRoZSBsYXN0IHRva2VuIGluIHRoZSBkZWNsYXJhdGlvbgogIC8vLyBUaGlzIGlzIGNhbGxlZCBhZnRlciB0aGUgYmVnaW4vZW5kIG1ldGFkYXRhIHN0YXIgZXZlbnRzLAogIC8vLyBhbmQgaXMgZm9sbG93ZWQgYnkgW2VuZFRvcExldmVsRGVjbGFyYXRpb25dLgogIC8vLwogIC8vLyBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIG1ldGFkYXRhCiAgdm9pZCBoYW5kbGVJbnZhbGlkVG9wTGV2ZWxEZWNsYXJhdGlvbihUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIkludmFsaWRUb3BMZXZlbERlY2xhcmF0aW9uIik7CiAgfQoKICAvLy8gTWFya3MgdGhlIGJlZ2lubmluZyBvZiBhIHRvcCBsZXZlbCBmaWVsZCBvciBtZXRob2QgZGVjbGFyYXRpb24uCiAgLy8vIERvZXNuJ3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgZW5kIGV2ZW50LgogIC8vLyBTZWUgW2VuZFRvcExldmVsRmllbGRzXSBhbmQgW2VuZFRvcExldmVsTWV0aG9kXS4KICB2b2lkIGJlZ2luVG9wTGV2ZWxNZW1iZXIoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIHRvcCBsZXZlbCB2YXJpYWJsZSBkZWNsYXJhdGlvbi4gIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gTWV0YWRhdGEKICAvLy8gLSBUeXBlCiAgLy8vIC0gUmVwZWF0ZWQgW2NvdW50XSB0aW1lczoKICAvLy8gICAtIFZhcmlhYmxlIG5hbWUgKGlkZW50aWZpZXIpCiAgLy8vICAgLSBGaWVsZCBpbml0aWFsaXplcgogIC8vLyBEb2Vzbid0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGJlZ2luIGV2ZW50LgogIC8vLyBVc2UgW2JlZ2luVG9wTGV2ZWxNZW1iZXJdIGluc3RlYWQuCiAgdm9pZCBlbmRUb3BMZXZlbEZpZWxkcygKICAgICAgVG9rZW4gc3RhdGljVG9rZW4sCiAgICAgIFRva2VuIGNvdmFyaWFudFRva2VuLAogICAgICBUb2tlbiBsYXRlVG9rZW4sCiAgICAgIFRva2VuIHZhckZpbmFsT3JDb25zdCwKICAgICAgaW50IGNvdW50LAogICAgICBUb2tlbiBiZWdpblRva2VuLAogICAgICBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIlRvcExldmVsRmllbGRzIik7CiAgfQoKICB2b2lkIGJlZ2luVG9wTGV2ZWxNZXRob2QoVG9rZW4gbGFzdENvbnN1bWVkLCBUb2tlbiBleHRlcm5hbFRva2VuKSB7fQoKICAvLy8gSGFuZGxlIHRoZSBlbmQgb2YgYSB0b3AgbGV2ZWwgbWV0aG9kLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBtZXRhZGF0YQogIC8vLyAtIG1vZGlmaWVycwogIC8vLyAtIHJldHVybiB0eXBlCiAgLy8vIC0gaWRlbnRpZmllcgogIC8vLyAtIHR5cGUgdmFyaWFibGVzCiAgLy8vIC0gZm9ybWFsIHBhcmFtZXRlcnMKICAvLy8gLSBhc3luYyBtYXJrZXIKICAvLy8gLSBib2R5CiAgdm9pZCBlbmRUb3BMZXZlbE1ldGhvZChUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBnZXRPclNldCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJUb3BMZXZlbE1ldGhvZCIpOwogIH0KCiAgdm9pZCBiZWdpblRyeVN0YXRlbWVudChUb2tlbiB0b2tlbikge30KCiAgdm9pZCBoYW5kbGVDYXNlTWF0Y2goVG9rZW4gY2FzZUtleXdvcmQsIFRva2VuIGNvbG9uKSB7CiAgICBsb2dFdmVudCgiQ2FzZU1hdGNoIik7CiAgfQoKICB2b2lkIGJlZ2luQ2F0Y2hDbGF1c2UoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kQ2F0Y2hDbGF1c2UoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJDYXRjaENsYXVzZSIpOwogIH0KCiAgdm9pZCBoYW5kbGVDYXRjaEJsb2NrKFRva2VuIG9uS2V5d29yZCwgVG9rZW4gY2F0Y2hLZXl3b3JkLCBUb2tlbiBjb21tYSkgewogICAgbG9nRXZlbnQoIkNhdGNoQmxvY2siKTsKICB9CgogIHZvaWQgaGFuZGxlRmluYWxseUJsb2NrKFRva2VuIGZpbmFsbHlLZXl3b3JkKSB7CiAgICBsb2dFdmVudCgiRmluYWxseUJsb2NrIik7CiAgfQoKICB2b2lkIGVuZFRyeVN0YXRlbWVudChpbnQgY2F0Y2hDb3VudCwgVG9rZW4gdHJ5S2V5d29yZCwgVG9rZW4gZmluYWxseUtleXdvcmQpIHsKICAgIGxvZ0V2ZW50KCJUcnlTdGF0ZW1lbnQiKTsKICB9CgogIHZvaWQgaGFuZGxlVHlwZShUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBxdWVzdGlvbk1hcmspIHsKICAgIGxvZ0V2ZW50KCJUeXBlIik7CiAgfQoKICAvLy8gQ2FsbGVkIHdoZW4gcGFyc2VyIGVuY291bnRlcnMgYSAnIScKICAvLy8gdXNlZCBhcyBhIG5vbi1udWxsIHBvc3RmaXggYXNzZXJ0aW9uIGluIGFuIGV4cHJlc3Npb24uCiAgdm9pZCBoYW5kbGVOb25OdWxsQXNzZXJ0RXhwcmVzc2lvbihUb2tlbiBiYW5nKSB7CiAgICBsb2dFdmVudCgiTm9uTnVsbEFzc2VydEV4cHJlc3Npb24iKTsKICB9CgogIC8vIFRPRE8oZGFucnViZWwpOiBSZW1vdmUgdGhpcyBvbmNlIGFsbCBsaXN0ZW5lcnMgaGF2ZSBiZWVuIHVwZGF0ZWQKICAvLyB0byBwcm9wZXJseSBoYW5kbGUgbnVsbGFibGUgdHlwZXMKICB2b2lkIHJlcG9ydEVycm9ySWZOdWxsYWJsZVR5cGUoVG9rZW4gcXVlc3Rpb25NYXJrKSB7CiAgICBpZiAocXVlc3Rpb25NYXJrICE9IG51bGwpIHsKICAgICAgYXNzZXJ0KG9wdGlvbmFsKCc/JywgcXVlc3Rpb25NYXJrKSk7CiAgICAgIGhhbmRsZVJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICB0ZW1wbGF0ZUV4cGVyaW1lbnROb3RFbmFibGVkLndpdGhBcmd1bWVudHMoJ25vbi1udWxsYWJsZScpLAogICAgICAgICAgcXVlc3Rpb25NYXJrLAogICAgICAgICAgcXVlc3Rpb25NYXJrKTsKICAgIH0KICB9CgogIC8vIFRPRE8oZGFucnViZWwpOiBSZW1vdmUgdGhpcyBvbmNlIGFsbCBsaXN0ZW5lcnMgaGF2ZSBiZWVuIHVwZGF0ZWQKICAvLyB0byBwcm9wZXJseSBoYW5kbGUgbnVsbGFibGUgdHlwZXMKICB2b2lkIHJlcG9ydE5vbk51bGxhYmxlTW9kaWZpZXJFcnJvcihUb2tlbiBtb2RpZmllclRva2VuKSB7CiAgICBpZiAobW9kaWZpZXJUb2tlbiAhPSBudWxsKSB7CiAgICAgIGhhbmRsZVJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICB0ZW1wbGF0ZUV4cGVyaW1lbnROb3RFbmFibGVkLndpdGhBcmd1bWVudHMoJ25vbi1udWxsYWJsZScpLAogICAgICAgICAgbW9kaWZpZXJUb2tlbiwKICAgICAgICAgIG1vZGlmaWVyVG9rZW4pOwogICAgfQogIH0KCiAgLy8gVE9ETyhkYW5ydWJlbCk6IFJlbW92ZSB0aGlzIG9uY2UgYWxsIGxpc3RlbmVycyBoYXZlIGJlZW4gdXBkYXRlZAogIC8vIHRvIHByb3Blcmx5IGhhbmRsZSBub24tbnVsbCBhc3NlcnQgZXhwcmVzc2lvbnMKICB2b2lkIHJlcG9ydE5vbk51bGxBc3NlcnRFeHByZXNzaW9uTm90RW5hYmxlZChUb2tlbiBiYW5nKSB7CiAgICBoYW5kbGVSZWNvdmVyYWJsZUVycm9yKAogICAgICAgIHRlbXBsYXRlRXhwZXJpbWVudE5vdEVuYWJsZWQud2l0aEFyZ3VtZW50cygnbm9uLW51bGxhYmxlJyksIGJhbmcsIGJhbmcpOwogIH0KCiAgdm9pZCBoYW5kbGVOb05hbWUoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJOb05hbWUiKTsKICB9CgogIHZvaWQgYmVnaW5GdW5jdGlvblR5cGUoVG9rZW4gYmVnaW5Ub2tlbikge30KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGEgZ2VuZXJpYyBmdW5jdGlvbiB0eXBlIGRlY2xhcmF0aW9uLgogIC8vLwogIC8vLyBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIFR5cGUgdmFyaWFibGVzCiAgLy8vIC0gUmV0dXJuIHR5cGUKICAvLy8gLSBGb3JtYWwgcGFyYW1ldGVycwogIHZvaWQgZW5kRnVuY3Rpb25UeXBlKFRva2VuIGZ1bmN0aW9uVG9rZW4sIFRva2VuIHF1ZXN0aW9uTWFyaykgewogICAgbG9nRXZlbnQoIkZ1bmN0aW9uVHlwZSIpOwogIH0KCiAgdm9pZCBiZWdpblR5cGVBcmd1bWVudHMoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kVHlwZUFyZ3VtZW50cyhpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiVHlwZUFyZ3VtZW50cyIpOwogIH0KCiAgLy8vIEFmdGVyIGVuZFR5cGVBcmd1bWVudHMgaGFzIGJlZW4gY2FsbGVkLAogIC8vLyB0aGlzIGV2ZW50IGlzIGNhbGxlZCBpZiB0aG9zZSB0eXBlIGFyZ3VtZW50cyBhcmUgaW52YWxpZC4KICB2b2lkIGhhbmRsZUludmFsaWRUeXBlQXJndW1lbnRzKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiTm9UeXBlQXJndW1lbnRzIik7CiAgfQoKICB2b2lkIGhhbmRsZU5vVHlwZUFyZ3VtZW50cyhUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIk5vVHlwZUFyZ3VtZW50cyIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgYmVnaW4gb2YgYSB0eXBlIGZvcm1hbCBwYXJhbWV0ZXIgKGUuZy4gIlggZXh0ZW5kcyBZIikuCiAgLy8vIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gTWV0YWRhdGEKICAvLy8gLSBOYW1lIChpZGVudGlmaWVyKQogIHZvaWQgYmVnaW5UeXBlVmFyaWFibGUoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBDYWxsZWQgd2hlbiBbYmVnaW5UeXBlVmFyaWFibGVdIGhhcyBiZWVuIGNhbGxlZCBmb3IgYWxsIG9mIHRoZSB2YXJpYWJsZXMKICAvLy8gaW4gYSBncm91cCwgYW5kIGJlZm9yZSBbZW5kVHlwZVZhcmlhYmxlXSBoYXMgYmVlbiBjYWxsZWQgZm9yIGFueSBvZiB0aGUKICAvLy8gdmFyaWFibGVzIGluIHRoYXQgc2FtZSBncm91cC4KICB2b2lkIGhhbmRsZVR5cGVWYXJpYWJsZXNEZWZpbmVkKFRva2VuIHRva2VuLCBpbnQgY291bnQpIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIHR5cGUgZm9ybWFsIHBhcmFtZXRlciAoZS5nLiAiWCBleHRlbmRzIFkiKQogIC8vLyB3aGVyZSBbaW5kZXhdIGlzIHRoZSBpbmRleCBvZiB0aGUgdHlwZSB2YXJpYWJsZSBpbiB0aGUgbGlzdCBvZgogIC8vLyB0eXBlIHZhcmlhYmxlcyBiZWluZyBkZWNsYXJlZC4KICAvLy8KICAvLy8gU3Vic3RydWN0dXJlczoKICAvLy8gLSBUeXBlIGJvdW5kCiAgLy8vCiAgLy8vIFNlZSBbYmVnaW5UeXBlVmFyaWFibGVdIGZvciBhZGRpdGlvbmFsIHN1YnN0cnVjdHVyZXMuCiAgdm9pZCBlbmRUeXBlVmFyaWFibGUoVG9rZW4gdG9rZW4sIGludCBpbmRleCwgVG9rZW4gZXh0ZW5kc09yU3VwZXIpIHsKICAgIGxvZ0V2ZW50KCJUeXBlVmFyaWFibGUiKTsKICB9CgogIHZvaWQgYmVnaW5UeXBlVmFyaWFibGVzKFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZFR5cGVWYXJpYWJsZXMoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJUeXBlVmFyaWFibGVzIik7CiAgfQoKICB2b2lkIGJlZ2luRnVuY3Rpb25FeHByZXNzaW9uKFRva2VuIHRva2VuKSB7fQoKICAvLy8gSGFuZGxlIHRoZSBlbmQgb2YgYSBmdW5jdGlvbiBleHByZXNzaW9uIChlLmcuICIoKSB7IC4uLiB9IikuCiAgLy8vIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gVHlwZSB2YXJpYWJsZXMKICAvLy8gLSBGb3JtYWwgcGFyYW1ldGVycwogIC8vLyAtIEFzeW5jIG1hcmtlcgogIC8vLyAtIEJvZHkKICB2b2lkIGVuZEZ1bmN0aW9uRXhwcmVzc2lvbihUb2tlbiBiZWdpblRva2VuLCBUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIkZ1bmN0aW9uRXhwcmVzc2lvbiIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgc3RhcnQgb2YgYSB2YXJpYWJsZXMgZGVjbGFyYXRpb24uICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIE1ldGFkYXRhCiAgLy8vIC0gVHlwZQogIHZvaWQgYmVnaW5WYXJpYWJsZXNEZWNsYXJhdGlvbigKICAgICAgVG9rZW4gdG9rZW4sIFRva2VuIGxhdGVUb2tlbiwgVG9rZW4gdmFyRmluYWxPckNvbnN0KSB7fQoKICB2b2lkIGVuZFZhcmlhYmxlc0RlY2xhcmF0aW9uKGludCBjb3VudCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJWYXJpYWJsZXNEZWNsYXJhdGlvbiIpOwogIH0KCiAgdm9pZCBiZWdpbldoaWxlU3RhdGVtZW50KFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZFdoaWxlU3RhdGVtZW50KFRva2VuIHdoaWxlS2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJXaGlsZVN0YXRlbWVudCIpOwogIH0KCiAgdm9pZCBoYW5kbGVBc09wZXJhdG9yKFRva2VuIG9wZXJhdG9yKSB7CiAgICBsb2dFdmVudCgiQXNPcGVyYXRvciIpOwogIH0KCiAgdm9pZCBoYW5kbGVBc3NpZ25tZW50RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIkFzc2lnbm1lbnRFeHByZXNzaW9uIik7CiAgfQoKICAvLy8gQ2FsbGVkIHdoZW4gdGhlIHBhcnNlciBlbmNvdW50ZXJzIGEgYmluYXJ5IG9wZXJhdG9yLCBpbiBiZXR3ZWVuIHRoZSBMSFMKICAvLy8gYW5kIFJIUyBzdWJleHByZXNzaW9ucy4KICAvLy8KICAvLy8gTm90IGNhbGxlZCB3aGVuIHRoZSBiaW5hcnkgb3BlcmF0b3IgaXMgYC5gLCBgPy5gLCBvciBgLi5gLgogIHZvaWQgYmVnaW5CaW5hcnlFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZEJpbmFyeUV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJCaW5hcnlFeHByZXNzaW9uIik7CiAgfQoKICAvLy8gQ2FsbGVkIHdoZW4gdGhlIHBhcnNlciBlbmNvdW50ZXJzIGEgYD9gIG9wZXJhdG9yIGFuZCBiZWdpbnMgcGFyc2luZyBhCiAgLy8vIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24uCiAgdm9pZCBiZWdpbkNvbmRpdGlvbmFsRXhwcmVzc2lvbihUb2tlbiBxdWVzdGlvbikge30KCiAgLy8vIENhbGxlZCB3aGVuIHRoZSBwYXJzZXIgZW5jb3VudGVycyBhIGA6YCBvcGVyYXRvciBpbiBhIGNvbmRpdGlvbmFsCiAgLy8vIGV4cHJlc3Npb24uCiAgdm9pZCBoYW5kbGVDb25kaXRpb25hbEV4cHJlc3Npb25Db2xvbigpIHt9CgogIC8vLyBDYWxsZWQgd2hlbiB0aGUgcGFyc2VyIGZpbmlzaGVzIHByb2Nlc3NpbmcgYSBjb25kaXRpb25hbCBleHByZXNzaW9uLgogIHZvaWQgZW5kQ29uZGl0aW9uYWxFeHByZXNzaW9uKFRva2VuIHF1ZXN0aW9uLCBUb2tlbiBjb2xvbikgewogICAgbG9nRXZlbnQoIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiIpOwogIH0KCiAgdm9pZCBiZWdpbkNvbnN0RXhwcmVzc2lvbihUb2tlbiBjb25zdEtleXdvcmQpIHt9CgogIHZvaWQgZW5kQ29uc3RFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiQ29uc3RFeHByZXNzaW9uIik7CiAgfQoKICAvLy8gQ2FsbGVkIGJlZm9yZSBwYXJzaW5nIGEgImZvciIgY29udHJvbCBmbG93IGxpc3QsIHNldCwgb3IgbWFwIGVudHJ5LgogIHZvaWQgYmVnaW5Gb3JDb250cm9sRmxvdyhUb2tlbiBhd2FpdFRva2VuLCBUb2tlbiBmb3JUb2tlbikge30KCiAgLy8vIENhbGxlZCBhZnRlciBwYXJzaW5nIGEgImZvciIgY29udHJvbCBmbG93IGxpc3QsIHNldCwgb3IgbWFwIGVudHJ5LgogIHZvaWQgZW5kRm9yQ29udHJvbEZsb3coVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCdlbmRGb3JDb250cm9sRmxvdycpOwogIH0KCiAgLy8vIENhbGxlZCBhZnRlciBwYXJzaW5nIGEgImZvci1pbiIgY29udHJvbCBmbG93IGxpc3QsIHNldCwgb3IgbWFwIGVudHJ5LgogIHZvaWQgZW5kRm9ySW5Db250cm9sRmxvdyhUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoJ2VuZEZvckluQ29udHJvbEZsb3cnKTsKICB9CgogIC8vLyBDYWxsZWQgYmVmb3JlIHBhcnNpbmcgYW4gYGlmYCBjb250cm9sIGZsb3cgbGlzdCwgc2V0LCBvciBtYXAgZW50cnkuCiAgdm9pZCBiZWdpbklmQ29udHJvbEZsb3coVG9rZW4gaWZUb2tlbikge30KCiAgLy8vIENhbGxlZCBiZWZvcmUgcGFyc2luZyB0aGUgYHRoZW5gIHBvcnRpb24gb2YgYW4gYGlmYCBjb250cm9sIGZsb3cgbGlzdCwKICAvLy8gc2V0LCBvciBtYXAgZW50cnkuCiAgdm9pZCBiZWdpblRoZW5Db250cm9sRmxvdyhUb2tlbiB0b2tlbikge30KCiAgLy8vIENhbGxlZCBiZWZvcmUgcGFyc2luZyB0aGUgYGVsc2VgIHBvcnRpb24gb2YgYW4gYGlmYCBjb250cm9sIGZsb3cgbGlzdCwKICAvLy8gc2V0LCBvciBtYXAgZW50cnkuCiAgdm9pZCBoYW5kbGVFbHNlQ29udHJvbEZsb3coVG9rZW4gZWxzZVRva2VuKSB7CiAgICBsb2dFdmVudCgiRWxzZUNvbnRyb2xGbG93Iik7CiAgfQoKICAvLy8gQ2FsbGVkIGFmdGVyIHBhcnNpbmcgYW4gYGlmYCBjb250cm9sIGZsb3cgbGlzdCwgc2V0LCBvciBtYXAgZW50cnkuCiAgLy8vIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gaWYgY29uZGl0aW9uYWwgZXhwcmVzc2lvbgogIC8vLyAtIGV4cHJlc3Npb24KICB2b2lkIGVuZElmQ29udHJvbEZsb3coVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJlbmRJZkNvbnRyb2xGbG93Iik7CiAgfQoKICAvLy8gQ2FsbGVkIGFmdGVyIHBhcnNpbmcgYW4gaWYtZWxzZSBjb250cm9sIGZsb3cgbGlzdCwgc2V0LCBvciBtYXAgZW50cnkuCiAgLy8vIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gaWYgY29uZGl0aW9uYWwgZXhwcmVzc2lvbgogIC8vLyAtIHRoZW4gZXhwcmVzc2lvbgogIC8vLyAtIGVsc2UgZXhwcmVzc2lvbgogIHZvaWQgZW5kSWZFbHNlQ29udHJvbEZsb3coVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJlbmRJZkVsc2VDb250cm9sRmxvdyIpOwogIH0KCiAgLy8vIENhbGxlZCBhZnRlciBwYXJzaW5nIGEgbGlzdCwgc2V0LCBvciBtYXAgZW50cnkgdGhhdCBzdGFydHMgd2l0aAogIC8vLyBvbmUgb2YgdGhlIHNwcmVhZCBjb2xsZWN0aW9uIHRva2VucyBgLi4uYCBvciBgLi4uP2AuICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIGV4cHJlc3Npb24KICB2b2lkIGhhbmRsZVNwcmVhZEV4cHJlc3Npb24oVG9rZW4gc3ByZWFkVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJTcHJlYWRFeHByZXNzaW9uIik7CiAgfQoKICAvLy8gSGFuZGxlIHRoZSBzdGFydCBvZiBhIGZ1bmN0aW9uIHR5cGVkIGZvcm1hbCBwYXJhbWV0ZXIuICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIHR5cGUgdmFyaWFibGVzCiAgdm9pZCBiZWdpbkZ1bmN0aW9uVHlwZWRGb3JtYWxQYXJhbWV0ZXIoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIGZ1bmN0aW9uIHR5cGVkIGZvcm1hbCBwYXJhbWV0ZXIuICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIHR5cGUgdmFyaWFibGVzCiAgLy8vIC0gcmV0dXJuIHR5cGUKICAvLy8gLSBmb3JtYWwgcGFyYW1ldGVycwogIHZvaWQgZW5kRnVuY3Rpb25UeXBlZEZvcm1hbFBhcmFtZXRlcihUb2tlbiBuYW1lVG9rZW4sIFRva2VuIHF1ZXN0aW9uKSB7CiAgICBsb2dFdmVudCgiRnVuY3Rpb25UeXBlZEZvcm1hbFBhcmFtZXRlciIpOwogIH0KCiAgLy8vIEhhbmRsZSBhbiBpZGVudGlmaWVyIHRva2VuLgogIC8vLwogIC8vLyBbY29udGV4dF0gaW5kaWNhdGVzIHdoYXQga2luZCBvZiBjb25zdHJ1Y3QgdGhlIGlkZW50aWZpZXIgYXBwZWFycyBpbi4KICB2b2lkIGhhbmRsZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIElkZW50aWZpZXJDb250ZXh0IGNvbnRleHQpIHsKICAgIGxvZ0V2ZW50KCJJZGVudGlmaWVyIik7CiAgfQoKICB2b2lkIGhhbmRsZUluZGV4ZWRFeHByZXNzaW9uKAogICAgICBUb2tlbiBvcGVuU3F1YXJlQnJhY2tldCwgVG9rZW4gY2xvc2VTcXVhcmVCcmFja2V0KSB7CiAgICBsb2dFdmVudCgiSW5kZXhlZEV4cHJlc3Npb24iKTsKICB9CgogIHZvaWQgaGFuZGxlSXNPcGVyYXRvcihUb2tlbiBpc09wZXJhdG9yLCBUb2tlbiBub3QpIHsKICAgIGxvZ0V2ZW50KCJJc09wZXJhdG9yIik7CiAgfQoKICB2b2lkIGhhbmRsZUxpdGVyYWxCb29sKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiTGl0ZXJhbEJvb2wiKTsKICB9CgogIHZvaWQgaGFuZGxlQnJlYWtTdGF0ZW1lbnQoCiAgICAgIGJvb2wgaGFzVGFyZ2V0LCBUb2tlbiBicmVha0tleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiQnJlYWtTdGF0ZW1lbnQiKTsKICB9CgogIHZvaWQgaGFuZGxlQ29udGludWVTdGF0ZW1lbnQoCiAgICAgIGJvb2wgaGFzVGFyZ2V0LCBUb2tlbiBjb250aW51ZUtleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiQ29udGludWVTdGF0ZW1lbnQiKTsKICB9CgogIHZvaWQgaGFuZGxlRW1wdHlTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJFbXB0eVN0YXRlbWVudCIpOwogIH0KCiAgdm9pZCBiZWdpbkFzc2VydChUb2tlbiBhc3NlcnRLZXl3b3JkLCBBc3NlcnQga2luZCkge30KCiAgdm9pZCBlbmRBc3NlcnQoVG9rZW4gYXNzZXJ0S2V5d29yZCwgQXNzZXJ0IGtpbmQsIFRva2VuIGxlZnRQYXJlbnRoZXNpcywKICAgICAgVG9rZW4gY29tbWFUb2tlbiwgVG9rZW4gc2VtaWNvbG9uVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJBc3NlcnQiKTsKICB9CgogIC8qKiBDYWxsZWQgd2l0aCBlaXRoZXIgdGhlIHRva2VuIGNvbnRhaW5pbmcgYSBkb3VibGUgbGl0ZXJhbCwgb3IKICAgICogYW4gaW1tZWRpYXRlbHkgcHJlY2VkaW5nICJ1bmFyeSBwbHVzIiB0b2tlbi4KICAgICovCiAgdm9pZCBoYW5kbGVMaXRlcmFsRG91YmxlKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiTGl0ZXJhbERvdWJsZSIpOwogIH0KCiAgLyoqIENhbGxlZCB3aXRoIGVpdGhlciB0aGUgdG9rZW4gY29udGFpbmluZyBhbiBpbnRlZ2VyIGxpdGVyYWwsCiAgICAqIG9yIGFuIGltbWVkaWF0ZWx5IHByZWNlZGluZyAidW5hcnkgcGx1cyIgdG9rZW4uCiAgICAqLwogIHZvaWQgaGFuZGxlTGl0ZXJhbEludChUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIkxpdGVyYWxJbnQiKTsKICB9CgogIHZvaWQgaGFuZGxlTGl0ZXJhbExpc3QoCiAgICAgIGludCBjb3VudCwgVG9rZW4gbGVmdEJyYWNrZXQsIFRva2VuIGNvbnN0S2V5d29yZCwgVG9rZW4gcmlnaHRCcmFja2V0KSB7CiAgICBsb2dFdmVudCgiTGl0ZXJhbExpc3QiKTsKICB9CgogIHZvaWQgaGFuZGxlTGl0ZXJhbFNldE9yTWFwKAogICAgaW50IGNvdW50LAogICAgVG9rZW4gbGVmdEJyYWNlLAogICAgVG9rZW4gY29uc3RLZXl3b3JkLAogICAgVG9rZW4gcmlnaHRCcmFjZSwKICAgIC8vIFRPRE8oZGFucnViZWwpOiBoYXNTZXRFbnRyeSBwYXJhbWV0ZXIgZXhpc3RzIGZvciByZXBsaWNhdGluZyBleGlzdGluZwogICAgLy8gYmVoYXZpb3IgYW5kIHdpbGwgYmUgcmVtb3ZlZCBvbmNlIHVuaWZpZWQgY29sbGVjdGlvbiBoYXMgYmVlbiBlbmFibGVkCiAgICBib29sIGhhc1NldEVudHJ5LAogICkgewogICAgbG9nRXZlbnQoJ0xpdGVyYWxTZXRPck1hcCcpOwogIH0KCiAgdm9pZCBoYW5kbGVMaXRlcmFsTnVsbChUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIkxpdGVyYWxOdWxsIik7CiAgfQoKICB2b2lkIGhhbmRsZU5hdGl2ZUNsYXVzZShUb2tlbiBuYXRpdmVUb2tlbiwgYm9vbCBoYXNOYW1lKSB7CiAgICBsb2dFdmVudCgiTmF0aXZlQ2xhdXNlIik7CiAgfQoKICB2b2lkIGhhbmRsZU5hbWVkQXJndW1lbnQoVG9rZW4gY29sb24pIHsKICAgIGxvZ0V2ZW50KCJOYW1lZEFyZ3VtZW50Iik7CiAgfQoKICB2b2lkIGJlZ2luTmV3RXhwcmVzc2lvbihUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmROZXdFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiTmV3RXhwcmVzc2lvbiIpOwogIH0KCiAgdm9pZCBoYW5kbGVOb0FyZ3VtZW50cyhUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIk5vQXJndW1lbnRzIik7CiAgfQoKICB2b2lkIGhhbmRsZU5vQ29uc3RydWN0b3JSZWZlcmVuY2VDb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJOb0NvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzIik7CiAgfQoKICB2b2lkIGhhbmRsZU5vVHlwZShUb2tlbiBsYXN0Q29uc3VtZWQpIHsKICAgIGxvZ0V2ZW50KCJOb1R5cGUiKTsKICB9CgogIHZvaWQgaGFuZGxlTm9UeXBlVmFyaWFibGVzKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiTm9UeXBlVmFyaWFibGVzIik7CiAgfQoKICB2b2lkIGhhbmRsZU9wZXJhdG9yKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiT3BlcmF0b3IiKTsKICB9CgogIHZvaWQgaGFuZGxlU3ltYm9sVm9pZChUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIlN5bWJvbFZvaWQiKTsKICB9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIGNvbnN0cnVjdCBvZiB0aGUgZm9ybSAib3BlcmF0b3IgPHRva2VuPiIuCiAgdm9pZCBoYW5kbGVPcGVyYXRvck5hbWUoVG9rZW4gb3BlcmF0b3JLZXl3b3JkLCBUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIk9wZXJhdG9yTmFtZSIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGEgY29uc3RydWN0IG9mIHRoZSBmb3JtICJvcGVyYXRvciA8dG9rZW4+IgogIC8vLyB3aGVyZSA8dG9rZW4+IGlzIG5vdCBhIHZhbGlkIG9wZXJhdG9yIHRva2VuLgogIHZvaWQgaGFuZGxlSW52YWxpZE9wZXJhdG9yTmFtZShUb2tlbiBvcGVyYXRvcktleXdvcmQsIFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiSW52YWxpZE9wZXJhdG9yTmFtZSIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgY29uZGl0aW9uIGluIGEgY29udHJvbCBzdHJ1Y3R1cmU6CiAgLy8vIC0gaWYgc3RhdGVtZW50CiAgLy8vIC0gZG8gd2hpbGUgbG9vcAogIC8vLyAtIHN3aXRjaCBzdGF0ZW1lbnQKICAvLy8gLSB3aGlsZSBsb29wCiAgdm9pZCBoYW5kbGVQYXJlbnRoZXNpemVkQ29uZGl0aW9uKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiUGFyZW50aGVzaXplZENvbmRpdGlvbiIpOwogIH0KCiAgLy8vIEhhbmRsZSBhIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbi4KICAvLy8gVGhlc2UgbWF5IGJlIHdpdGhpbiB0aGUgY29uZGl0aW9uIGV4cHJlc3Npb24gb2YgYSBjb250cm9sIHN0cnVjdHVyZQogIC8vLyBidXQgd2lsbCBub3QgYmUgdGhlIGNvbmRpdGlvbiBvZiBhIGNvbnRyb2wgc3RydWN0dXJlLgogIHZvaWQgaGFuZGxlUGFyZW50aGVzaXplZEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiIpOwogIH0KCiAgLy8vIEhhbmRsZSBhIGNvbnN0cnVjdCBvZiB0aGUgZm9ybSAiaWRlbnRpZmllci5pZGVudGlmaWVyIiBvY2N1cnJpbmcgaW4gYSBwYXJ0CiAgLy8vIG9mIHRoZSBncmFtbWFyIHdoZXJlIGV4cHJlc3Npb25zIGluIGdlbmVyYWwgYXJlIG5vdCBhbGxvd2VkLgogIC8vLyBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIFF1YWxpZmllZCBpZGVudGlmaWVyIChiZWZvcmUgdGhlIHBlcmlvZCkKICAvLy8gLSBJZGVudGlmaWVyIChhZnRlciB0aGUgcGVyaW9kKQogIHZvaWQgaGFuZGxlUXVhbGlmaWVkKFRva2VuIHBlcmlvZCkgewogICAgbG9nRXZlbnQoIlF1YWxpZmllZCIpOwogIH0KCiAgdm9pZCBoYW5kbGVTdHJpbmdQYXJ0KFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiU3RyaW5nUGFydCIpOwogIH0KCiAgdm9pZCBoYW5kbGVTdXBlckV4cHJlc3Npb24oVG9rZW4gdG9rZW4sIElkZW50aWZpZXJDb250ZXh0IGNvbnRleHQpIHsKICAgIGxvZ0V2ZW50KCJTdXBlckV4cHJlc3Npb24iKTsKICB9CgogIHZvaWQgYmVnaW5Td2l0Y2hDYXNlKGludCBsYWJlbENvdW50LCBpbnQgZXhwcmVzc2lvbkNvdW50LCBUb2tlbiBmaXJzdFRva2VuKSB7fQoKICB2b2lkIGVuZFN3aXRjaENhc2UoCiAgICAgIGludCBsYWJlbENvdW50LAogICAgICBpbnQgZXhwcmVzc2lvbkNvdW50LAogICAgICBUb2tlbiBkZWZhdWx0S2V5d29yZCwKICAgICAgVG9rZW4gY29sb25BZnRlckRlZmF1bHQsCiAgICAgIGludCBzdGF0ZW1lbnRDb3VudCwKICAgICAgVG9rZW4gZmlyc3RUb2tlbiwKICAgICAgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJTd2l0Y2hDYXNlIik7CiAgfQoKICB2b2lkIGhhbmRsZVRoaXNFeHByZXNzaW9uKFRva2VuIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dCBjb250ZXh0KSB7CiAgICBsb2dFdmVudCgiVGhpc0V4cHJlc3Npb24iKTsKICB9CgogIHZvaWQgaGFuZGxlVW5hcnlQb3N0Zml4QXNzaWdubWVudEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJVbmFyeVBvc3RmaXhBc3NpZ25tZW50RXhwcmVzc2lvbiIpOwogIH0KCiAgdm9pZCBoYW5kbGVVbmFyeVByZWZpeEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJVbmFyeVByZWZpeEV4cHJlc3Npb24iKTsKICB9CgogIHZvaWQgaGFuZGxlVW5hcnlQcmVmaXhBc3NpZ25tZW50RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIlVuYXJ5UHJlZml4QXNzaWdubWVudEV4cHJlc3Npb24iKTsKICB9CgogIHZvaWQgYmVnaW5Gb3JtYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVFeHByZXNzaW9uKCkge30KCiAgdm9pZCBlbmRGb3JtYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVFeHByZXNzaW9uKCkgewogICAgbG9nRXZlbnQoIkZvcm1hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZUV4cHJlc3Npb24iKTsKICB9CgogIHZvaWQgaGFuZGxlVmFsdWVkRm9ybWFsUGFyYW1ldGVyKFRva2VuIGVxdWFscywgVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJWYWx1ZWRGb3JtYWxQYXJhbWV0ZXIiKTsKICB9CgogIHZvaWQgaGFuZGxlRm9ybWFsUGFyYW1ldGVyV2l0aG91dFZhbHVlKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiRm9ybWFsUGFyYW1ldGVyV2l0aG91dFZhbHVlIik7CiAgfQoKICB2b2lkIGhhbmRsZVZvaWRLZXl3b3JkKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiVm9pZEtleXdvcmQiKTsKICB9CgogIHZvaWQgYmVnaW5ZaWVsZFN0YXRlbWVudChUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmRZaWVsZFN0YXRlbWVudChUb2tlbiB5aWVsZFRva2VuLCBUb2tlbiBzdGFyVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiWWllbGRTdGF0ZW1lbnQiKTsKICB9CgogIC8vLyBUaGUgcGFyc2VyIG5vdGljZWQgYSBzeW50YXggZXJyb3IsIGJ1dCB3YXMgYWJsZSB0byByZWNvdmVyIGZyb20gaXQuIFRoZQogIC8vLyBlcnJvciBzaG91bGQgYmUgcmVwb3J0ZWQgdXNpbmcgdGhlIFttZXNzYWdlXSwgYW5kIHRoZSBjb2RlIGJldHdlZW4gdGhlCiAgLy8vIGJlZ2lubmluZyBvZiB0aGUgW3N0YXJ0VG9rZW5dIGFuZCB0aGUgZW5kIG9mIHRoZSBbZW5kVG9rZW5dIHNob3VsZCBiZQogIC8vLyBoaWdobGlnaHRlZC4gVGhlIFtzdGFydFRva2VuXSBhbmQgW2VuZFRva2VuXSBjYW4gYmUgdGhlIHNhbWUgdG9rZW4uCiAgdm9pZCBoYW5kbGVSZWNvdmVyYWJsZUVycm9yKAogICAgICBNZXNzYWdlIG1lc3NhZ2UsIFRva2VuIHN0YXJ0VG9rZW4sIFRva2VuIGVuZFRva2VuKSB7fQoKICAvLy8gVGhlIHBhcnNlciBlbmNvdW50ZXJlZCBhbiBbRXJyb3JUb2tlbl0gcmVwcmVzZW50aW5nIGFuIGVycm9yCiAgLy8vIGZyb20gdGhlIHNjYW5uZXIgYnV0IHJlY292ZXJlZCBmcm9tIGl0LiBCeSBkZWZhdWx0LCB0aGUgZXJyb3IgaXMgcmVwb3J0ZWQKICAvLy8gYnkgY2FsbGluZyBbaGFuZGxlUmVjb3ZlcmFibGVFcnJvcl0gd2l0aCB0aGUgbWVzc2FnZSBhc3NvY2lhdGVkCiAgLy8vIHdpdGggdGhlIGVycm9yIFt0b2tlbl0uCiAgdm9pZCBoYW5kbGVFcnJvclRva2VuKEVycm9yVG9rZW4gdG9rZW4pIHsKICAgIGhhbmRsZVJlY292ZXJhYmxlRXJyb3IodG9rZW4uYXNzZXJ0aW9uTWVzc2FnZSwgdG9rZW4sIHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVW5lc2NhcGVFcnJvcigKICAgICAgTWVzc2FnZSBtZXNzYWdlLCBUb2tlbiBsb2NhdGlvbiwgaW50IHN0cmluZ09mZnNldCwgaW50IGxlbmd0aCkgewogICAgaGFuZGxlUmVjb3ZlcmFibGVFcnJvcihtZXNzYWdlLCBsb2NhdGlvbiwgbG9jYXRpb24pOwogIH0KCiAgLy8vIFNpZ25hbHMgdG8gdGhlIGxpc3RlbmVyIHRoYXQgdGhlIHByZXZpb3VzIHN0YXRlbWVudCBjb250YWluZWQgYSBzZW1hbnRpYwogIC8vLyBlcnJvciAoZGVzY3JpYmVkIGJ5IHRoZSBnaXZlbiBbbWVzc2FnZV0pLiBUaGlzIG1ldGhvZCBjYW4gYWxzbyBiZSBjYWxsZWQKICAvLy8gYWZ0ZXIgW2hhbmRsZUV4cHJlc3Npb25GdW5jdGlvbkJvZHldLCBpbiB3aGljaCBjYXNlIGl0IHNpZ25hbHMgdGhhdCB0aGUKICAvLy8gaW1wbGljaXQgcmV0dXJuIHN0YXRlbWVudCBvZiB0aGUgZnVuY3Rpb24gY29udGFpbmVkIGEgc2VtYW50aWMgZXJyb3IuCiAgdm9pZCBoYW5kbGVJbnZhbGlkU3RhdGVtZW50KFRva2VuIHRva2VuLCBNZXNzYWdlIG1lc3NhZ2UpIHsKICAgIGhhbmRsZVJlY292ZXJhYmxlRXJyb3IobWVzc2FnZSwgdG9rZW4sIHRva2VuKTsKICB9CgogIHZvaWQgaGFuZGxlU2NyaXB0KFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiU2NyaXB0Iik7CiAgfQoKICAvLy8gQSB0eXBlIGhhcyBiZWVuIGp1c3QgcGFyc2VkLCBhbmQgdGhlIHBhcnNlciBub3RpY2VkIHRoYXQgdGhlIG5leHQgdG9rZW4KICAvLy8gaGFzIGEgdHlwZSBzdWJzdGl0dXRpb24gY29tbWVudCAvKj1UKi4gU28sIHRoZSB0eXBlIHRoYXQgaGFzIGJlZW4ganVzdAogIC8vLyBwYXJzZWQgc2hvdWxkIGJlIGRpc2NhcmRlZCwgYW5kIGEgbmV3IHR5cGUgc2hvdWxkIGJlIHBhcnNlZCBpbnN0ZWFkLgogIHZvaWQgZGlzY2FyZFR5cGVSZXBsYWNlZFdpdGhDb21tZW50VHlwZUFzc2lnbigpIHt9CgogIC8vLyBBIHNpbmdsZSBjb21tZW50IHJlZmVyZW5jZSBoYXMgYmVlbiBmb3VuZAogIC8vLyB3aGVyZSBbcmVmZXJlbmNlU291cmNlXSBpcyB0aGUgdGV4dCBiZXR3ZWVuIHRoZSBgW2AgYW5kIGBdYAogIC8vLyBhbmQgW3JlZmVyZW5jZU9mZnNldF0gaXMgdGhlIGNoYXJhY3RlciBvZmZzZXQgaW4gdGhlIHRva2VuIHN0cmVhbS4KICAvLy8KICAvLy8gVGhpcyBldmVudCBpcyBnZW5lcmF0ZWQgYnkgdGhlIHBhcnNlciB3aGVuIHRoZSBwYXJzZXIncwogIC8vLyBgcGFyc2VDb21tZW50UmVmZXJlbmNlc2AgbWV0aG9kIGlzIGNhbGxlZC4gRm9yIGZ1cnRoZXIgcHJvY2Vzc2luZywKICAvLy8gYSBsaXN0ZW5lciBtYXkgc2NhbiB0aGUgW3JlZmVyZW5jZVNvdXJjZV0gYW5kIHRoZW4gcGFzcyB0aGUgcmVzdWx0aW5nCiAgLy8vIHRva2VuIHN0cmVhbSB0byB0aGUgcGFyc2VyJ3MgYHBhcnNlT25lQ29tbWVudFJlZmVyZW5jZWAgbWV0aG9kLgogIHZvaWQgaGFuZGxlQ29tbWVudFJlZmVyZW5jZVRleHQoU3RyaW5nIHJlZmVyZW5jZVNvdXJjZSwgaW50IHJlZmVyZW5jZU9mZnNldCkgewogICAgbG9nRXZlbnQoIkNvbW1lbnRSZWZlcmVuY2VUZXh0Iik7CiAgfQoKICAvLy8gQSBzaW5nbGUgY29tbWVudCByZWZlcmVuY2UgaGFzIGJlZW4gcGFyc2VkLgogIC8vLyAqIFtuZXdLZXl3b3JkXSBtYXkgYmUgbnVsbC4KICAvLy8gKiBbcHJlZml4XSBhbmQgW3BlcmlvZF0gYXJlIGVpdGhlciBib3RoIHRva2VucyBvciBib3RoIGBudWxsYC4KICAvLy8gKiBbdG9rZW5dIGNhbiBiZSBhbiBpZGVudGlmaWVyIG9yIGFuIG9wZXJhdG9yLgogIC8vLwogIC8vLyBUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCBieSB0aGUgcGFyc2VyIHdoZW4gdGhlIHBhcnNlcidzCiAgLy8vIGBwYXJzZU9uZUNvbW1lbnRSZWZlcmVuY2VgIG1ldGhvZCBpcyBjYWxsZWQuCiAgdm9pZCBoYW5kbGVDb21tZW50UmVmZXJlbmNlKAogICAgICBUb2tlbiBuZXdLZXl3b3JkLCBUb2tlbiBwcmVmaXgsIFRva2VuIHBlcmlvZCwgVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCBieSB0aGUgcGFyc2VyIHdoZW4gdGhlIHBhcnNlcidzCiAgLy8vIGBwYXJzZU9uZUNvbW1lbnRSZWZlcmVuY2VgIG1ldGhvZCBpcyBjYWxsZWQuCiAgdm9pZCBoYW5kbGVOb0NvbW1lbnRSZWZlcmVuY2UoKSB7fQp9CoZkAE5OPAEfAS4BHT0BMwE2ASIBPgE5ATUBKwEiAUYWBEwERlAWBE8LMhcBIAEpASYBQxsEAThAHwQBLAE+IQQBIkEoBAEiAT8XBAFKPg4yASQBFhkEATEBKCAEAU5LDkMBTUgGPRxRIgQBQAZKTUABM0NKBk1OAUYvMh4EAUMVGiU2IQQBQBESExcSFBoWTx0EATZCPig0EhQaJCQEAT0VEz8iBAEzQAFBGjcZBAFAERMXERovHQQBNkI+KDMRGiQkBAE9FRxBIgQBUBEGTk1DAVAXBk1IAUo3EA0gPiYEASgBIx0EASwBOUcGRkERIQE0IQQBKQEmHgQBMQEgPSYEAS0BHD0iBAExAS4mBAEvASwkBAEnAT0RHxciQBYEASMBPREMGRQ5GAQBSU8kQiYEATAlBAEbRAEeQCQEAR5AO0EEASJAO0EEAU82ARsZHRceHCAfIQQBQCQEAT4BHEYiBAFDERINLAZLUEwYBAFDERINLAZLUEw7TCYEAUcREg0sBksbGRwXHREYGDtMJgQBUCE5LgQBUCY+MwQBUCtDOAQBQicpAUhNPj05ASkeBAEtASoiBAFLTTU+MQFPIhcEASwBKSEEASYBIxsEAUxPT0YGFRc0AURKTD0GFRcSFA0QFRczNCkEAUwRFzUBHgYVERcUDRcQFRczNSUEAUhPTyouAU1JT05HNEsjBAErIAQBSAZOJEgBKQE4HgQBLgEvBkURFBodGgZKERodJh08IwQBOhUfMiEEASsjIwQBOUhKBk0jNwFJFRIfQjEEAUMREhMXEhQlBkhNUEBPMScEAScBPSYkFgQBKSAEASUBIBoEASgBOB0EASoBJx8EASoBJx8EASsBRj8yNkQeBAE9EQwZGhQ5GAQBOzpCThkaFC4gBAEsASchBAEvAUUUQB1OIAQBPBwEATcBNCwEATIBMycEAS0BPR88IgQBLi8kBAEwAT8gOiUEAS8yJwQBKAElKAQBKQFGHgQBICAEAU5NJS4jBAFHUDowJQQBT0oPMSYEASIXBAE9AS0iBAEoAT0RLj8dBAE8IQQBKgFPAUIfBAE1JQQBGAE7ES0fBAFJQEA0LBUYBAFEEVE8AUQRFDUXGhUVDUoxHQQBRBEUNRcaFRUNSjE7FEgEAUgRFDUXGhUVDU4xOxRIBAFJERQ1FxoVFQ1PMTsUSAQBSREUNRcaFRUNTzE7FEgEAU0RFDUXGhUVDUFDOxRIBAEpASQeBAElAT8TF0QSTxoEATUBJDUqBAEhAToRDDUWBAEjAT8RLgZQDhJLGAQBMwFFKAQBLAEtQkYkBAFNPEgXTSsEAUxCTSsEAUEyIwQBTDJIKAQBGz4hBAE2FgQBJwE9JSQWBAEsAUEhBAEoAUkdBAEqAUAfBAFBIQQBLQFBIgQBRERKSy0lBAFIST8zBhUROiwEAUYuNysBShENICUcMCkaGRwXHREYGCAEAUcBPBESFBMXGhUNTSAEASkBORsEASgBJR0EAUwcBAEyHgQBUR4EAToWBAEqPTMpBAFGJzcgKx5GGBkGBAFGJz0hHkYZGgYEAUY0PRxRBAEjGAQBLgE9BhUXFBpCHgQBKgFHHwQBLkAxIQQBLCEEAUgVERopAU9OJD0BRUUlBhUTBjxHHgQBKgE8HwQBLwFDFRcaFQ0+JAQBQxENIj4BPCYEASsBPyAEASocBAExJgQBTh4GQS0BKiIEAUweNQFIEi0BSz8nBAEzASkhBAFKQAFJKCMEAUwqJQQBSiwBTRksAU0ZMCEEAUkVIhMnIgQBTBUiGBgrJgQBRksTMyIEAU0XOQFLFxQaSi4EASIGTEIcBAEgOyMEATccBAEoHQQBHTwgBAEgPyMEASsgBAE4AUowGAQBQzMHKh8EAUI2ByccBAEaTh0EAR4PFRgWTU0WBiEEASgdBAE9HgQBKh8EASoBJx8EASgdBAFRRgQBKhgEASwhBAElGgQBJxwEAURAHgQBQzNHJQQBMxUWGRMzKAQBKUo8NCkEAVFDFTEmJxsEASccBAFHIQQBUQEWFhscHxoYGBwEAUYgBAE9MgQBMicEATwxBAE3ATQ3BAFAJwQBOC0EASgdBAErAU4gBAFOTUxKHzwBQ1BGHixCBAEMHEc5BAFPT05MPjMEASMYBAFOTUs1ATBCSQY+SUxGUSYEATIiRTUGPjMfRAE+MyUCATBwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL2xpc3RlbmVyLmRhcnQ3c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3BhcnNlci9wYXJzZXIuZGFydMADrLYvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5wYXJzZXIucGFyc2VyOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IE1lc3NhZ2UsIFRlbXBsYXRlOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JyBhcyBmYXN0YTsKCmltcG9ydCAnLi4vc2Nhbm5lci5kYXJ0JyBzaG93IEVycm9yVG9rZW4sIFRva2VuOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnCiAgICBzaG93CiAgICAgICAgQVNTSUdOTUVOVF9QUkVDRURFTkNFLAogICAgICAgIEJlZ2luVG9rZW4sCiAgICAgICAgQ0FTQ0FERV9QUkVDRURFTkNFLAogICAgICAgIEVRVUFMSVRZX1BSRUNFREVOQ0UsCiAgICAgICAgS2V5d29yZCwKICAgICAgICBQT1NURklYX1BSRUNFREVOQ0UsCiAgICAgICAgUkVMQVRJT05BTF9QUkVDRURFTkNFLAogICAgICAgIFNFTEVDVE9SX1BSRUNFREVOQ0UsCiAgICAgICAgU3ludGhldGljQmVnaW5Ub2tlbiwKICAgICAgICBTeW50aGV0aWNLZXl3b3JkVG9rZW4sCiAgICAgICAgU3ludGhldGljU3RyaW5nVG9rZW4sCiAgICAgICAgU3ludGhldGljVG9rZW4sCiAgICAgICAgVG9rZW5UeXBlOwoKaW1wb3J0ICcuLi9zY2FubmVyL3Rva2VuX2NvbnN0YW50cy5kYXJ0JwogICAgc2hvdwogICAgICAgIEJBTkdfRVFfRVFfVE9LRU4sCiAgICAgICAgQ09NTUFfVE9LRU4sCiAgICAgICAgRE9VQkxFX1RPS0VOLAogICAgICAgIEVPRl9UT0tFTiwKICAgICAgICBFUV9FUV9FUV9UT0tFTiwKICAgICAgICBFUV9UT0tFTiwKICAgICAgICBGVU5DVElPTl9UT0tFTiwKICAgICAgICBIQVNIX1RPS0VOLAogICAgICAgIEhFWEFERUNJTUFMX1RPS0VOLAogICAgICAgIElERU5USUZJRVJfVE9LRU4sCiAgICAgICAgSU5UX1RPS0VOLAogICAgICAgIEtFWVdPUkRfVE9LRU4sCiAgICAgICAgTFRfVE9LRU4sCiAgICAgICAgT1BFTl9DVVJMWV9CUkFDS0VUX1RPS0VOLAogICAgICAgIE9QRU5fUEFSRU5fVE9LRU4sCiAgICAgICAgT1BFTl9TUVVBUkVfQlJBQ0tFVF9UT0tFTiwKICAgICAgICBTRU1JQ09MT05fVE9LRU4sCiAgICAgICAgU1RSSU5HX0lOVEVSUE9MQVRJT05fSURFTlRJRklFUl9UT0tFTiwKICAgICAgICBTVFJJTkdfSU5URVJQT0xBVElPTl9UT0tFTiwKICAgICAgICBTVFJJTkdfVE9LRU47CgppbXBvcnQgJ2Fzc2VydC5kYXJ0JyBzaG93IEFzc2VydDsKCmltcG9ydCAnYXN5bmNfbW9kaWZpZXIuZGFydCcgc2hvdyBBc3luY01vZGlmaWVyOwoKaW1wb3J0ICdkZWNsYXJhdGlvbl9raW5kLmRhcnQnIHNob3cgRGVjbGFyYXRpb25LaW5kOwoKaW1wb3J0ICdkaXJlY3RpdmVfY29udGV4dC5kYXJ0JzsKCmltcG9ydCAnZm9ybWFsX3BhcmFtZXRlcl9raW5kLmRhcnQnCiAgICBzaG93CiAgICAgICAgRm9ybWFsUGFyYW1ldGVyS2luZCwKICAgICAgICBpc01hbmRhdG9yeUZvcm1hbFBhcmFtZXRlcktpbmQsCiAgICAgICAgaXNPcHRpb25hbFBvc2l0aW9uYWxGb3JtYWxQYXJhbWV0ZXJLaW5kOwoKaW1wb3J0ICdmb3J3YXJkaW5nX2xpc3RlbmVyLmRhcnQnIHNob3cgRm9yd2FyZGluZ0xpc3RlbmVyOwoKaW1wb3J0ICdpZGVudGlmaWVyX2NvbnRleHQuZGFydCcKICAgIHNob3cgSWRlbnRpZmllckNvbnRleHQsIGxvb2tzTGlrZUV4cHJlc3Npb25TdGFydDsKCmltcG9ydCAnbGlzdGVuZXIuZGFydCcgc2hvdyBMaXN0ZW5lcjsKCmltcG9ydCAnbGl0ZXJhbF9lbnRyeV9pbmZvLmRhcnQnCiAgICBzaG93CiAgICAgICAgTGl0ZXJhbEVudHJ5SW5mbywKICAgICAgICBjb21wdXRlTGl0ZXJhbEVudHJ5LAogICAgICAgIGxvb2tzTGlrZUxpdGVyYWxFbnRyeSwKICAgICAgICBzaW1wbGVFbnRyeTsKCmltcG9ydCAnbG9vcF9zdGF0ZS5kYXJ0JyBzaG93IExvb3BTdGF0ZTsKCmltcG9ydCAnbWVtYmVyX2tpbmQuZGFydCcgc2hvdyBNZW1iZXJLaW5kOwoKaW1wb3J0ICdtb2RpZmllcl9jb250ZXh0LmRhcnQnIHNob3cgTW9kaWZpZXJSZWNvdmVyeUNvbnRleHQsIGlzTW9kaWZpZXI7CgppbXBvcnQgJ3JlY292ZXJ5X2xpc3RlbmVycy5kYXJ0JwogICAgc2hvdwogICAgICAgIENsYXNzSGVhZGVyUmVjb3ZlcnlMaXN0ZW5lciwKICAgICAgICBJbXBvcnRSZWNvdmVyeUxpc3RlbmVyLAogICAgICAgIE1peGluSGVhZGVyUmVjb3ZlcnlMaXN0ZW5lcjsKCmltcG9ydCAndG9rZW5fc3RyZWFtX3Jld3JpdGVyLmRhcnQnIHNob3cgVG9rZW5TdHJlYW1SZXdyaXRlcjsKCmltcG9ydCAndHlwZV9pbmZvLmRhcnQnCiAgICBzaG93CiAgICAgICAgVHlwZUluZm8sCiAgICAgICAgVHlwZVBhcmFtT3JBcmdJbmZvLAogICAgICAgIGNvbXB1dGVNZXRob2RUeXBlQXJndW1lbnRzLAogICAgICAgIGNvbXB1dGVUeXBlLAogICAgICAgIGNvbXB1dGVUeXBlUGFyYW1PckFyZywKICAgICAgICBpc1ZhbGlkVHlwZVJlZmVyZW5jZSwKICAgICAgICBub1R5cGUsCiAgICAgICAgbm9UeXBlUGFyYW1PckFyZzsKCmltcG9ydCAndXRpbC5kYXJ0JwogICAgc2hvdwogICAgICAgIGZpbmROb25aZXJvTGVuZ3RoVG9rZW4sCiAgICAgICAgZmluZFByZXZpb3VzTm9uWmVyb0xlbmd0aFRva2VuLAogICAgICAgIGlzTGV0dGVyLAogICAgICAgIGlzTGV0dGVyT3JEaWdpdCwKICAgICAgICBpc09uZU9mLAogICAgICAgIGlzT25lT2ZPckVvZiwKICAgICAgICBpc1doaXRlc3BhY2UsCiAgICAgICAgb3B0aW9uYWw7CgovLy8gQW4gZXZlbnQgZ2VuZXJhdGluZyBwYXJzZXIgb2YgRGFydCBwcm9ncmFtcy4gVGhpcyBwYXJzZXIgZXhwZWN0cyBhbGwgdG9rZW5zCi8vLyBpbiBhIGxpbmtlZCBsaXN0IChha2EgYSB0b2tlbiBzdHJlYW0pLgovLy8KLy8vIFRoZSBjbGFzcyBbU2Nhbm5lcl0gaXMgdXNlZCB0byBnZW5lcmF0ZSBhIHRva2VuIHN0cmVhbS4gU2VlIHRoZSBmaWxlCi8vLyBbc2Nhbm5lci5kYXJ0XSguLi9zY2FubmVyLmRhcnQpLgovLy8KLy8vIFN1YmNsYXNzZXMgb2YgdGhlIGNsYXNzIFtMaXN0ZW5lcl0gYXJlIHVzZWQgdG8gbGlzdGVuIHRvIGV2ZW50cy4KLy8vCi8vLyBNb3N0IG1ldGhvZHMgb2YgdGhpcyBjbGFzcyBiZWxvbmcgaW4gb25lIG9mIGZvdXIgbWFqb3IgY2F0ZWdvcmllczogcGFyc2UKLy8vIG1ldGhvZHMsIHBlZWsgbWV0aG9kcywgZW5zdXJlIG1ldGhvZHMsIGFuZCBza2lwIG1ldGhvZHMuCi8vLwovLy8gUGFyc2UgbWV0aG9kcyBhbGwgaGF2ZSB0aGUgcHJlZml4IGBwYXJzZWAsIGdlbmVyYXRlIGV2ZW50cwovLy8gKGJ5IGNhbGxpbmcgbWV0aG9kcyBvbiBbbGlzdGVuZXJdKSwgYW5kIHJldHVybiB0aGUgbmV4dCB0b2tlbiB0byBwYXJzZS4KLy8vIFNvbWUgZXhjZXB0aW9ucyB0byB0aGlzIGxhc3QgcG9pbnQgYXJlIG1ldGhvZHMgc3VjaCBhcyBbcGFyc2VGdW5jdGlvbkJvZHldCi8vLyBhbmQgW3BhcnNlQ2xhc3NPck1peGluT3JFeHRlbnNpb25Cb2R5XSB3aGljaCByZXR1cm4gdGhlIGxhc3QgdG9rZW4gcGFyc2VkCi8vLyByYXRoZXIgdGhhbiB0aGUgbmV4dCB0b2tlbiB0byBiZSBwYXJzZWQuCi8vLyBQYXJzZSBtZXRob2RzIGFyZSBnZW5lcmFsbHkgbmFtZWQgYHBhcnNlR3JhbW1hclByb2R1Y3Rpb25TdWZmaXhgLgovLy8gVGhlIHN1ZmZpeCBjYW4gYmUgb25lIG9mIGBvcHRgLCBvciBgc3RhcmAuCi8vLyBgb3B0YCBtZWFucyB6ZXJvIG9yIG9uZSBtYXRjaGVzLCBgc3RhcmAgbWVhbnMgemVybyBvciBtb3JlIG1hdGNoZXMuCi8vLyBGb3IgZXhhbXBsZSwgW3BhcnNlTWV0YWRhdGFTdGFyXSBjb3JyZXNwb25kcyB0byB0aGlzIGdyYW1tYXIgc25pcHBldDoKLy8vIGBtZXRhZGF0YSpgLCBhbmQgW3BhcnNlQXJndW1lbnRzT3B0XSBjb3JyZXNwb25kcyB0bzogYGFyZ3VtZW50cz9gLgovLy8KLy8vIFBlZWsgbWV0aG9kcyBhbGwgaGF2ZSB0aGUgcHJlZml4IGBwZWVrYCwgZG8gbm90IGdlbmVyYXRlIGV2ZW50cwovLy8gKGV4Y2VwdCBmb3IgZXJyb3JzKSBhbmQgbWF5IHJldHVybiBudWxsLgovLy8KLy8vIEVuc3VyZSBtZXRob2RzIGFsbCBoYXZlIHRoZSBwcmVmaXggYGVuc3VyZWAgYW5kIG1heSBnZW5lcmF0ZSBldmVudHMuCi8vLyBUaGV5IHJldHVybiB0aGUgY3VycmVudCB0b2tlbiwgb3IgaW5zZXJ0IGFuZCByZXR1cm4gYSBzeW50aGV0aWMgdG9rZW4KLy8vIGlmIHRoZSBjdXJyZW50IHRva2VuIGRvZXMgbm90IG1hdGNoLiBGb3IgZXhhbXBsZSwKLy8vIFtlbnN1cmVTZW1pY29sb25dIHJldHVybnMgdGhlIGN1cnJlbnQgdG9rZW4gaWYgdGhlIGN1cnJlbnQgdG9rZW4gaXMgYQovLy8gc2VtaWNvbG9uLCBvdGhlcndpc2UgaW5zZXJ0cyBhIHN5bnRoZXRpYyBzZW1pY29sb24gaW4gdGhlIHRva2VuIHN0cmVhbQovLy8gYmVmb3JlIHRoZSBjdXJyZW50IHRva2VuIGFuZCB0aGVuIHJldHVybnMgdGhhdCBuZXcgc3ludGhldGljIHRva2VuLgovLy8KLy8vIFNraXAgbWV0aG9kcyBhcmUgbGlrZSBwYXJzZSBtZXRob2RzLCBidXQgYWxsIGhhdmUgdGhlIHByZWZpeCBgc2tpcGAKLy8vIGFuZCBza2lwIG92ZXIgc29tZSBwYXJ0cyBvZiB0aGUgZmlsZSBiZWluZyBwYXJzZWQuCi8vLyBUeXBpY2FsbHksIHNraXAgbWV0aG9kcyBnZW5lcmF0ZSBhbiBldmVudCBmb3IgdGhlIHN0cnVjdHVyZSBiZWluZyBza2lwcGVkLAovLy8gYnV0IG5vdCBmb3IgaXRzIHN1YnN0cnVjdHVyZXMuCi8vLwovLy8gIyMgQ3VycmVudCBUb2tlbgovLy8KLy8vIFRoZSBjdXJyZW50IHRva2VuIGlzIGFsd2F5cyB0byBiZSBmb3VuZCBpbiBhIGZvcm1hbCBwYXJhbWV0ZXIgbmFtZWQKLy8vIGB0b2tlbmAuIFRoaXMgcGFyYW1ldGVyIHNob3VsZCBiZSB0aGUgZmlyc3QgYXMgdGhpcyBpbmNyZWFzZXMgdGhlIGNoYW5jZQovLy8gdGhhdCBhIGNvbXBpbGVyIHdpbGwgcGxhY2UgaXQgaW4gYSByZWdpc3Rlci4KLy8vCi8vLyAjIyBJbXBsZW1lbnRhdGlvbiBOb3RlcwovLy8KLy8vIFRoZSBwYXJzZXIgYXNzdW1lcyB0aGF0IGtleXdvcmRzLCBidWlsdC1pbiBpZGVudGlmaWVycywgYW5kIG90aGVyIHNwZWNpYWwKLy8vIHdvcmRzIChwc2V1ZG8ta2V5d29yZHMpIGFyZSBhbGwgY2Fub25pY2FsaXplZC4gVG8gZXh0ZW5kIHRoZSBwYXJzZXIgdG8KLy8vIHJlY29nbml6ZSBhIG5ldyBpZGVudGlmaWVyLCBvbmUgc2hvdWxkIG1vZGlmeQovLy8gW2tleXdvcmQuZGFydF0oLi4vc2Nhbm5lci9rZXl3b3JkLmRhcnQpIGFuZCBlbnN1cmUgdGhlIGlkZW50aWZpZXIgaXMgYWRkZWQKLy8vIHRvIHRoZSBrZXl3b3JkIHRhYmxlLgovLy8KLy8vIEFzIGEgY29uc2VxdWVuY2Ugb2YgdGhpcywgb25lIHNob3VsZCBub3QgdXNlIGA9PWAgdG8gY29tcGFyZSBzdHJpbmdzIGluIHRoZQovLy8gcGFyc2VyLiBPbmUgc2hvdWxkIGZhdm9yIHRoZSBtZXRob2RzIFtvcHRpb25hbF0gYW5kIFtleHBlY3RdIHRvIHJlY29nbml6ZQovLy8ga2V5d29yZHMgb3IgaWRlbnRpZmllcnMuIEluIHNvbWUgY2FzZXMsIGl0J3MgcG9zc2libGUgdG8gY29tcGFyZSBhIHRva2VuJ3MKLy8vIGBzdHJpbmdWYWx1ZWAgdXNpbmcgW2lkZW50aWNhbF0sIGJ1dCBub3JtYWxseSBbb3B0aW9uYWxdIHdpbGwgc3VmZmljZS4KLy8vCi8vLyBIaXN0b3JpY2FsbHksIHdlIG92ZXItdXNlZCBpZGVudGljYWwsIGFuZCB3aGVuIGlkZW50aWNhbCBpcyB1c2VkIG9uIG9iamVjdHMKLy8vIG90aGVyIHRoYW4gc3RyaW5ncywgaXQgY2FuIG9mdGVuIGJlIHJlcGxhY2VkIGJ5IGA9PWAuCi8vLwovLy8gIyMgRmxleGliaWxpdHksIEV4dGVuc2liaWxpdHksIGFuZCBTcGVjaWZpY2F0aW9uCi8vLwovLy8gVGhlIHBhcnNlciBpcyBkZXNpZ25lZCB0byBiZSBmbGV4aWJsZSBhbmQgZXh0ZW5zaWJsZS4gSXRzIG1ldGhvZHMgYXJlCi8vLyBkZXNpZ25lZCB0byBiZSBvdmVycmlkZGVuIGluIHN1YmNsYXNzZXMsIHNvIGl0IGNhbiBiZSBleHRlbmRlZCB0byBoYW5kbGUKLy8vIHVuc3BlY2lmaWVkIGxhbmd1YWdlIGV4dGVuc2lvbiBvciBleHBlcmltZW50cyB3aGlsZSBldmVyeXRoaW5nIGluIHRoaXMgZmlsZQovLy8gYXR0ZW1wdHMgdG8gZm9sbG93IHRoZSBzcGVjaWZpY2F0aW9uICh1bmxlc3Mgd2hlbiBpdCBpbnRlcmZlcmVzIHdpdGggZXJyb3IKLy8vIHJlY292ZXJ5KS4KLy8vCi8vLyBXZSBhY2hpZXZlIGZsZXhpYmlsaXR5LCBleHRlbnNpYmxlLCBhbmQgc3BlY2lmaWNhdGlvbiBjb21wbGlhbmNlIGJ5Ci8vLyBmb2xsb3dpbmcgYSBmZXcgcnVsZXMtb2YtdGh1bWI6Ci8vLwovLy8gMS4gQWxsIG1ldGhvZHMgaW4gdGhlIHBhcnNlciBzaG91bGQgYmUgcHVibGljLgovLy8KLy8vIDIuIFRoZSBtZXRob2RzIGZvbGxvdyB0aGUgc3BlY2lmaWVkIGdyYW1tYXIsIGFuZCBkbyBub3QgaW1wbGVtZW50IGN1c3RvbQovLy8gZXh0ZW5zaW9ucywgZm9yIGV4YW1wbGUsIGBuYXRpdmVgLgovLy8KLy8vIDMuIFRoZSBwYXJzZXIgZG9lc24ndCByZXdyaXRlIHRoZSB0b2tlbiBzdHJlYW0gKHdoZW4gZGVhbGluZyB3aXRoIGA+PmApLgovLy8KLy8vICMjIyBJbXBsZW1lbnRpbmcgRXh0ZW5zaW9ucwovLy8KLy8vIEZvciB2YXJpb3VzIHJlYXNvbnMsIHNvbWUgRGFydCBsYW5ndWFnZSBpbXBsZW1lbnRhdGlvbnMgaGF2ZSB1c2VkCi8vLyBjdXN0b20vdW5zcGVjaWZpZWQgZXh0ZW5zaW9ucyB0byB0aGUgRGFydCBncmFtbWFyLiBFeGFtcGxlcyBvZiB0aGlzCi8vLyBpbmNsdWRlcyBkaWV0IHBhcnNpbmcsIHBhdGNoIGZpbGVzLCBgbmF0aXZlYCBrZXl3b3JkLCBhbmQgZ2VuZXJpYwovLy8gY29tbWVudHMuIFRoaXMgY2xhc3MgaXNuJ3Qgc3VwcG9zZWQgdG8gaW1wbGVtZW50IGFueSBvZiB0aGVzZQovLy8gZmVhdHVyZXMuIEluc3RlYWQgaXQgcHJvdmlkZXMgaG9va3MgZm9yIHRob3NlIGV4dGVuc2lvbnMgdG8gYmUgaW1wbGVtZW50ZWQKLy8vIGluIHN1YmNsYXNzZXMgb3IgbGlzdGVuZXJzLiBMZXQncyBleGFtaW5lIGhvdyBkaWV0IHBhcnNpbmcgYW5kIGBuYXRpdmVgCi8vLyBrZXl3b3JkIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgRmFzdGEuCi8vLwovLy8gIyMjIyBMZWdhY3kgSW1wbGVtZW50YXRpb24gb2YgYG5hdGl2ZWAgS2V5d29yZAovLy8KLy8vIFRPRE8oYWhlLGRhbnJ1YmVsKTogUmVtb3ZlIHRoaXMgc2VjdGlvbi4KLy8vCi8vLyBCb3RoIGRhcnQyanMgYW5kIHRoZSBEYXJ0IFZNIGhhdmUgdXNlZCB0aGUgYG5hdGl2ZWAga2V5d29yZCB0byBtYXJrIG1ldGhvZHMKLy8vIHRoYXQgY291bGRuJ3QgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIERhcnQgbGFuZ3VhZ2UgYW5kIG5lZWRlZCB0byBiZQovLy8gaW1wbGVtZW50ZWQgaW4gSmF2YVNjcmlwdCBvciBDKyssIHJlc3BlY3RpdmVseS4gQW4gZXhhbXBsZSBvZiB0aGUgc3ludGF4Ci8vLyBleHRlbnNpb24gdXNlZCBieSB0aGUgRGFydCBWTSBpczoKLy8vCi8vLyAgICAgbmF0aXZlRnVuY3Rpb24oKSBuYXRpdmUgIk5hdGl2ZUZ1bmN0aW9uIjsKLy8vCi8vLyBXaGVuIGF0dGVtcHRpbmcgdG8gcGFyc2UgdGhpcyBmdW5jdGlvbiwgdGhlIHBhcnNlciBldmVudHVhbGx5IGNhbGxzCi8vLyBbcGFyc2VGdW5jdGlvbkJvZHldLiBUaGlzIG1ldGhvZCB3aWxsIHJlcG9ydCBhbiB1bnJlY292ZXJhYmxlIGVycm9yIHRvIHRoZQovLy8gbGlzdGVuZXIgd2l0aCB0aGUgY29kZSBbZmFzdGEubWVzc2FnZUV4cGVjdGVkRnVuY3Rpb25Cb2R5XS4gVGhlIGxpc3RlbmVyIGNhbgovLy8gdGhlbiBsb29rIGF0IHRoZSBlcnJvciBjb2RlIGFuZCB0aGUgdG9rZW4gYW5kIHVzZSB0aGUgbWV0aG9kcyBpbgovLy8gW25hdGl2ZV9zdXBwb3J0LmRhcnRdKG5hdGl2ZV9zdXBwb3J0LmRhcnQpIHRvIHBhcnNlIHRoZSBuYXRpdmUgc3ludGF4LgovLy8KLy8vICMjIyMgSW1wbGVtZW50YXRpb24gb2YgRGlldCBQYXJzaW5nCi8vLwovLy8gV2UgY2FsbCBpdCBfZGlldF8gX3BhcnNpbmdfIHdoZW4gdGhlIHBhcnNlciBza2lwcyBwYXJ0cyBvZiBhIGZpbGUuIEJvdGgKLy8vIGRhcnQyanMgYW5kIHRoZSBEYXJ0IFZNIGhhdmUgYmVlbiByZWx5aW5nIG9uIHRoaXMgZnJvbSBlYXJseSBvbiBhcyBpdCBhbGxvd3MKLy8vIHRoZW0gdG8gbW9yZSBxdWlja2x5IGNvbXBpbGUgc21hbGwgcHJvZ3JhbXMgdGhhdCB1c2Ugc21hbGwgcGFydHMgb2YgYmlnCi8vLyBsaWJyYXJpZXMuIEl0J3MgYWxzbyBiZWNvbWUgYW4gaW50ZWdyYXRlZCBwYXJ0IG9mIGhvdyBGYXN0YSBidWlsZHMgdXAKLy8vIG91dGxpbmVzIGJlZm9yZSBzdGFydGluZyB0byBwYXJzZSBtZXRob2QgYm9kaWVzLgovLy8KLy8vIFdoZW4gbG9va2luZyB0aHJvdWdoIHRoaXMgcGFyc2VyLCB5b3UnbGwgZmluZCBhIG51bWJlciBvZiB1bnVzZWQgbWV0aG9kcwovLy8gc3RhcnRpbmcgd2l0aCBgc2tpcGAuIFRoZXNlIG1ldGhvZHMgYXJlIG9ubHkgdXNlZCBieSBzdWJjbGFzc2VzLCBzdWNoIGFzCi8vLyBbQ2xhc3NNZW1iZXJQYXJzZXJdKGNsYXNzX21lbWJlcl9wYXJzZXIuZGFydCkgYW5kCi8vLyBbVG9wTGV2ZWxQYXJzZXJdKHRvcF9sZXZlbF9wYXJzZXIuZGFydCkuIFRoZXNlIG1ldGhvZHMgdmlvbGF0ZSB0aGUKLy8vIHByaW5jaXBsZSBhYm92ZSBhYm91dCBmb2xsb3dpbmcgdGhlIHNwZWNpZmllZCBncmFtbWFyLCBhbmQgb3JpZ2luYWxseSBsaXZlZAovLy8gaW4gc3ViY2xhc3Nlcy4gSG93ZXZlciwgd2UgcmVhbGl6ZWQgdGhhdCB0aGVzZSBtZXRob2RzIHdlcmUgc28gd2lkZWx5IHVzZWQKLy8vIGFuZCBoYXJkIHRvIG1haW50YWluIGluIHN1YmNsYXNzZXMsIHRoYXQgaXQgbWFkZSBzZW5zZSB0byBtb3ZlIHRoZW0gaGVyZS4KLy8vCi8vLyAjIyMgU3BlY2lmaWNhdGlvbiBhbmQgRXJyb3IgUmVjb3ZlcnkKLy8vCi8vLyBUbyBpbXByb3ZlIGVycm9yIHJlY292ZXJ5LCB0aGUgcGFyc2VyIHdpbGwgaW5mb3JtIHRoZSBsaXN0ZW5lciBvZgovLy8gcmVjb3ZlcmFibGUgZXJyb3JzIGFuZCBjb250aW51ZSB0byBwYXJzZS4gIEFuIGV4YW1wbGUgb2YgYSByZWNvdmVyYWJsZQovLy8gZXJyb3IgaXM6Ci8vLwovLy8gICAgIEVycm9yOiBBc3luY2hyb25vdXMgZm9yLWxvb3AgY2FuIG9ubHkgYmUgdXNlZCBpbiAnYXN5bmMnIG9yICdhc3luYyonLi4uCi8vLyAgICAgbWFpbigpIHsgYXdhaXQgZm9yICh2YXIgeCBpbiBbXSkge30gfQovLy8gICAgICAgICAgICAgIF5eXl5eCi8vLwovLy8gIyMjIExlZ2FjeSBFcnJvciBSZWNvdmVyeQovLy8KLy8vIFdoYXQncyBkZXNjcmliZWQgYmVsb3cgd2lsbCBiZSBwaGFzZWQgb3V0IGluIHByZWZlcmVuY2Ugb2YgdGhlIHBhcnNlcgovLy8gcmVwb3J0aW5nIGFuZCByZWNvdmVyaW5nIGZyb20gc3ludGF4IGVycm9ycy4gVGhlIG1vdGl2YXRpb24gZm9yIHRoaXMgaXMKLy8vIHRoYXQgd2UgaGF2ZSBtdWx0aXBsZSBsaXN0ZW5lcnMgdGhhdCB1c2UgdGhlIHBhcnNlciwgYW5kIHRoaXMgd2lsbCBlbnN1cmUKLy8vIGNvbnNpc3RlbmN5LgovLy8KLy8vIEZvciB1bnJlY292ZXJhYmxlIGVycm9ycywgdGhlIHBhcnNlciB3aWxsIGFzayB0aGUgbGlzdGVuZXIgZm9yIGhlbHAgdG8KLy8vIHJlY292ZXIgZnJvbSB0aGUgZXJyb3IuIFdlIGhhdmVuJ3QgbWFkZSBtdWNoIHByb2dyZXNzIG9uIHRoZXNlIGtpbmRzIG9mCi8vLyBlcnJvcnMsIHNvIGluIG1vc3QgY2FzZXMsIHRoZSBwYXJzZXIgYWJvcnRzIGJ5IHNraXBwaW5nIHRvIHRoZSBlbmQgb2YgZmlsZS4KLy8vCi8vLyBIaXN0b3JpY2FsbHksIHRoaXMgcGFyc2VyIGhhcyBiZWVuIHJhdGhlciBsYXggaW4gd2hhdCBpdCBhbGxvd3MsIGFuZAovLy8gZGVmZXJyZWQgdGhlIGVuZm9yY2VtZW50IG9mIHNvbWUgc3ludGFjdGljYWwgcnVsZXMgdG8gc3Vic2VxdWVudCBwaGFzZXMuIEl0Ci8vLyBkb2Vzbid0IG1hdHRlciBob3cgd2UgZ290IHRoZXJlLCBvbmx5IHRoYXQgd2UndmUgaWRlbnRpZmllZCB0aGF0IGl0J3MKLy8vIGVhc2llciBpZiB0aGUgcGFyc2VyIHJlcG9ydHMgYXMgbWFueSBlcnJvcnMgaXQgY2FuLCBidXQgaW5mb3JtcyB0aGUKLy8vIGxpc3RlbmVyIGlmIHRoZSBlcnJvciBpcyByZWNvdmVyYWJsZSBvciBub3QuCmNsYXNzIFBhcnNlciB7CiAgTGlzdGVuZXIgbGlzdGVuZXI7CgogIFVyaSBnZXQgdXJpID0+IGxpc3RlbmVyLnVyaTsKCiAgYm9vbCBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnMgPSB0cnVlOwoKICAvLy8gUmVwcmVzZW50cyBwYXJzZXIgc3RhdGU6IHdoYXQgYXN5bmNocm9ub3VzIHN5bnRheCBpcyBhbGxvd2VkIGluIHRoZQogIC8vLyBmdW5jdGlvbiBiZWluZyBjdXJyZW50bHkgcGFyc2VkLiBJbiByYXJlIHNpdHVhdGlvbnMsIHRoaXMgY2FuIGJlIHNldCBieQogIC8vLyBleHRlcm5hbCBjbGllbnRzLCBmb3IgZXhhbXBsZSwgdG8gcGFyc2UgYW4gZXhwcmVzc2lvbiBvdXRzaWRlIGEgZnVuY3Rpb24uCiAgQXN5bmNNb2RpZmllciBhc3luY1N0YXRlID0gQXN5bmNNb2RpZmllci5TeW5jOwoKICAvLyBUT0RPKGRhbnJ1YmVsKTogVGhlIFtsb29wU3RhdGVdIGFuZCBhc3NvY2lhdGVkIGZ1bmN0aW9uYWxpdHkgaW4gdGhlCiAgLy8gW1BhcnNlcl0gZHVwbGljYXRlcyB3b3JrIHRoYXQgdGhlIHJlc29sdmVyIG5lZWRzIHRvIGRvIHdoZW4gcmVzb2x2aW5nCiAgLy8gYnJlYWsvY29udGludWUgdGFyZ2V0cy4gTG9uZyB0ZXJtLCB0aGlzIHN0YXRlIGFuZCBmdW5jdGlvbmFsaXR5IHdpbGwgYmUKICAvLyByZW1vdmVkIGZyb20gdGhlIFtQYXJzZXJdIGNsYXNzIGFuZCB0aGUgcmVzb2x2ZXIgd2lsbCBiZSByZXNwb25zaWJsZQogIC8vIGZvciBnZW5lcmF0aW5nIGFsbCBicmVhay9jb250aW51ZSBlcnJvciBtZXNzYWdlcy4KCiAgLy8vIFJlcHJlc2VudHMgcGFyc2VyIHN0YXRlOiB3aGV0aGVyIHBhcnNpbmcgb3V0c2lkZSBhIGxvb3AsCiAgLy8vIGluc2lkZSBhIGxvb3AsIG9yIGluc2lkZSBhIHN3aXRjaC4gVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyCiAgLy8vIGJyZWFrIGFuZCBjb250aW51ZSBzdGF0ZW1lbnRzIGFyZSBhbGxvd2VkLgogIExvb3BTdGF0ZSBsb29wU3RhdGUgPSBMb29wU3RhdGUuT3V0c2lkZUxvb3A7CgogIC8vLyBBIHJld3JpdGVyIGZvciBpbnNlcnRpbmcgc3ludGhldGljIHRva2Vucy4KICAvLy8gQWNjZXNzIHVzaW5nIFtyZXdyaXRlcl0gZm9yIGxhenkgaW5pdGlhbGl6YXRpb24uCiAgVG9rZW5TdHJlYW1SZXdyaXRlciBjYWNoZWRSZXdyaXRlcjsKCiAgVG9rZW5TdHJlYW1SZXdyaXRlciBnZXQgcmV3cml0ZXIgewogICAgY2FjaGVkUmV3cml0ZXIgPz89IG5ldyBUb2tlblN0cmVhbVJld3JpdGVyKCk7CiAgICByZXR1cm4gY2FjaGVkUmV3cml0ZXI7CiAgfQoKICBQYXJzZXIodGhpcy5saXN0ZW5lcik7CgogIGJvb2wgZ2V0IGluR2VuZXJhdG9yIHsKICAgIHJldHVybiBhc3luY1N0YXRlID09IEFzeW5jTW9kaWZpZXIuQXN5bmNTdGFyIHx8CiAgICAgICAgYXN5bmNTdGF0ZSA9PSBBc3luY01vZGlmaWVyLlN5bmNTdGFyOwogIH0KCiAgYm9vbCBnZXQgaW5Bc3luYyB7CiAgICByZXR1cm4gYXN5bmNTdGF0ZSA9PSBBc3luY01vZGlmaWVyLkFzeW5jIHx8CiAgICAgICAgYXN5bmNTdGF0ZSA9PSBBc3luY01vZGlmaWVyLkFzeW5jU3RhcjsKICB9CgogIGJvb2wgZ2V0IGluUGxhaW5TeW5jID0+IGFzeW5jU3RhdGUgPT0gQXN5bmNNb2RpZmllci5TeW5jOwoKICBib29sIGdldCBpc0JyZWFrQWxsb3dlZCA9PiBsb29wU3RhdGUgIT0gTG9vcFN0YXRlLk91dHNpZGVMb29wOwoKICBib29sIGdldCBpc0NvbnRpbnVlQWxsb3dlZCA9PiBsb29wU3RhdGUgPT0gTG9vcFN0YXRlLkluc2lkZUxvb3A7CgogIGJvb2wgZ2V0IGlzQ29udGludWVXaXRoTGFiZWxBbGxvd2VkID0+IGxvb3BTdGF0ZSAhPSBMb29wU3RhdGUuT3V0c2lkZUxvb3A7CgogIC8vLyBQYXJzZSBhIGNvbXBpbGF0aW9uIHVuaXQuCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIGlzIG9ubHkgaW52b2tlZCBmcm9tIG91dHNpZGUgdGhlIHBhcnNlci4gQXMgYSByZXN1bHQsIHRoaXMKICAvLy8gbWV0aG9kIHRha2VzIHRoZSBuZXh0IHRva2VuIHRvIGJlIGNvbnN1bWVkIHJhdGhlciB0aGFuIHRoZSBsYXN0IGNvbnN1bWVkCiAgLy8vIHRva2VuIGFuZCByZXR1cm5zIHRoZSB0b2tlbiBhZnRlciB0aGUgbGFzdCBjb25zdW1lZCB0b2tlbiByYXRoZXIgdGhhbiB0aGUKICAvLy8gbGFzdCBjb25zdW1lZCB0b2tlbi4KICAvLy8KICAvLy8gYGBgCiAgLy8vIGxpYnJhcnlEZWZpbml0aW9uOgogIC8vLyAgIHNjcmlwdFRhZz8KICAvLy8gICBsaWJyYXJ5TmFtZT8KICAvLy8gICBpbXBvcnRPckV4cG9ydCoKICAvLy8gICBwYXJ0RGlyZWN0aXZlKgogIC8vLyAgIHRvcExldmVsRGVmaW5pdGlvbioKICAvLy8gOwogIC8vLwogIC8vLyBwYXJ0RGVjbGFyYXRpb246CiAgLy8vICAgcGFydEhlYWRlciB0b3BMZXZlbERlZmluaXRpb24qCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VVbml0KFRva2VuIHRva2VuKSB7CiAgICAvLyBTa2lwIG92ZXIgZXJyb3IgdG9rZW5zIGFuZCByZXBvcnQgdGhlbSBhdCB0aGUgZW5kCiAgICAvLyBzbyB0aGF0IHRoZSBwYXJzZXIgaGFzIHRoZSBjaGFuY2UgdG8gYWRqdXN0IHRoZSBlcnJvciBsb2NhdGlvbi4KICAgIFRva2VuIGVycm9yVG9rZW4gPSB0b2tlbjsKICAgIHRva2VuID0gc2tpcEVycm9yVG9rZW5zKGVycm9yVG9rZW4pOwoKICAgIGxpc3RlbmVyLmJlZ2luQ29tcGlsYXRpb25Vbml0KHRva2VuKTsKICAgIGludCBjb3VudCA9IDA7CiAgICBEaXJlY3RpdmVDb250ZXh0IGRpcmVjdGl2ZVN0YXRlID0gbmV3IERpcmVjdGl2ZUNvbnRleHQoKTsKICAgIHRva2VuID0gc3ludGhldGljUHJldmlvdXNUb2tlbih0b2tlbik7CiAgICBpZiAoaWRlbnRpY2FsKHRva2VuLm5leHQudHlwZSwgVG9rZW5UeXBlLlNDUklQVF9UQUcpKSB7CiAgICAgIGRpcmVjdGl2ZVN0YXRlPy5jaGVja1NjcmlwdFRhZyh0aGlzLCB0b2tlbi5uZXh0KTsKICAgICAgdG9rZW4gPSBwYXJzZVNjcmlwdCh0b2tlbik7CiAgICB9CiAgICB3aGlsZSAoIXRva2VuLm5leHQuaXNFb2YpIHsKICAgICAgZmluYWwgVG9rZW4gc3RhcnQgPSB0b2tlbi5uZXh0OwogICAgICB0b2tlbiA9IHBhcnNlVG9wTGV2ZWxEZWNsYXJhdGlvbkltcGwodG9rZW4sIGRpcmVjdGl2ZVN0YXRlKTsKICAgICAgbGlzdGVuZXIuZW5kVG9wTGV2ZWxEZWNsYXJhdGlvbih0b2tlbi5uZXh0KTsKICAgICAgY291bnQrKzsKICAgICAgaWYgKHN0YXJ0ID09IHRva2VuLm5leHQpIHsKICAgICAgICAvLyBSZWNvdmVyeToKICAgICAgICAvLyBJZiBwcm9ncmVzcyBoYXMgbm90IGJlZW4gbWFkZSByZWFjaGluZyB0aGUgZW5kIG9mIHRoZSB0b2tlbiBzdHJlYW0sCiAgICAgICAgLy8gdGhlbiByZXBvcnQgYW4gZXJyb3IgYW5kIHNraXAgdGhlIGN1cnJlbnQgdG9rZW4uCiAgICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICAgIGxpc3RlbmVyLmJlZ2luTWV0YWRhdGFTdGFyKHRva2VuKTsKICAgICAgICBsaXN0ZW5lci5lbmRNZXRhZGF0YVN0YXIoMCk7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgICAgdG9rZW4sIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWREZWNsYXJhdGlvbik7CiAgICAgICAgbGlzdGVuZXIuaGFuZGxlSW52YWxpZFRvcExldmVsRGVjbGFyYXRpb24odG9rZW4pOwogICAgICAgIGxpc3RlbmVyLmVuZFRvcExldmVsRGVjbGFyYXRpb24odG9rZW4ubmV4dCk7CiAgICAgICAgY291bnQrKzsKICAgICAgfQogICAgfQogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgcmVwb3J0QWxsRXJyb3JUb2tlbnMoZXJyb3JUb2tlbik7CiAgICBsaXN0ZW5lci5lbmRDb21waWxhdGlvblVuaXQoY291bnQsIHRva2VuKTsKICAgIC8vIENsZWFyIGZpZWxkcyB0aGF0IGNvdWxkIGxlYWQgdG8gbWVtb3J5IGxlYWsuCiAgICBjYWNoZWRSZXdyaXRlciA9IG51bGw7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gVGhpcyBtZXRob2QgZXhpc3RzIGZvciBhbmFseXplciBjb21wYXRpYmlsaXR5IG9ubHkKICAvLy8gYW5kIHdpbGwgYmUgcmVtb3ZlZCBvbmNlIGFuYWx5emVyL2Zhc3RhIGludGVncmF0aW9uIGlzIGNvbXBsZXRlLgogIC8vLwogIC8vLyBTaW1pbGFyIHRvIFtwYXJzZVVuaXRdLCB0aGlzIG1ldGhvZCBwYXJzZXMgYSBjb21waWxhdGlvbiB1bml0LAogIC8vLyBidXQgc3RvcHMgd2hlbiBpdCByZWFjaGVzIHRoZSBmaXJzdCBkZWNsYXJhdGlvbiBvciBFT0YuCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIGlzIG9ubHkgaW52b2tlZCBmcm9tIG91dHNpZGUgdGhlIHBhcnNlci4gQXMgYSByZXN1bHQsIHRoaXMKICAvLy8gbWV0aG9kIHRha2VzIHRoZSBuZXh0IHRva2VuIHRvIGJlIGNvbnN1bWVkIHJhdGhlciB0aGFuIHRoZSBsYXN0IGNvbnN1bWVkCiAgLy8vIHRva2VuIGFuZCByZXR1cm5zIHRoZSB0b2tlbiBhZnRlciB0aGUgbGFzdCBjb25zdW1lZCB0b2tlbiByYXRoZXIgdGhhbiB0aGUKICAvLy8gbGFzdCBjb25zdW1lZCB0b2tlbi4KICBUb2tlbiBwYXJzZURpcmVjdGl2ZXMoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyLmJlZ2luQ29tcGlsYXRpb25Vbml0KHRva2VuKTsKICAgIGludCBjb3VudCA9IDA7CiAgICBEaXJlY3RpdmVDb250ZXh0IGRpcmVjdGl2ZVN0YXRlID0gbmV3IERpcmVjdGl2ZUNvbnRleHQoKTsKICAgIHRva2VuID0gc3ludGhldGljUHJldmlvdXNUb2tlbih0b2tlbik7CiAgICB3aGlsZSAoIXRva2VuLm5leHQuaXNFb2YpIHsKICAgICAgZmluYWwgVG9rZW4gc3RhcnQgPSB0b2tlbi5uZXh0OwogICAgICBmaW5hbCBTdHJpbmcgbmV4dFZhbHVlID0gc3RhcnQubmV4dC5zdHJpbmdWYWx1ZTsKCiAgICAgIC8vIElmIGEgYnVpbHQtaW4ga2V5d29yZCBpcyBiZWluZyB1c2VkIGFzIGZ1bmN0aW9uIG5hbWUsIHRoZW4gc3RvcC4KICAgICAgaWYgKGlkZW50aWNhbChuZXh0VmFsdWUsICcuJykgfHwKICAgICAgICAgIGlkZW50aWNhbChuZXh0VmFsdWUsICc8JykgfHwKICAgICAgICAgIGlkZW50aWNhbChuZXh0VmFsdWUsICcoJykpIHsKICAgICAgICBicmVhazsKICAgICAgfQoKICAgICAgaWYgKGlkZW50aWNhbCh0b2tlbi5uZXh0LnR5cGUsIFRva2VuVHlwZS5TQ1JJUFRfVEFHKSkgewogICAgICAgIGRpcmVjdGl2ZVN0YXRlPy5jaGVja1NjcmlwdFRhZyh0aGlzLCB0b2tlbi5uZXh0KTsKICAgICAgICB0b2tlbiA9IHBhcnNlU2NyaXB0KHRva2VuKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0b2tlbiA9IHBhcnNlTWV0YWRhdGFTdGFyKHRva2VuKTsKICAgICAgICBUb2tlbiBrZXl3b3JkID0gdG9rZW4ubmV4dDsKICAgICAgICBmaW5hbCBTdHJpbmcgdmFsdWUgPSBrZXl3b3JkLnN0cmluZ1ZhbHVlOwogICAgICAgIGlmIChpZGVudGljYWwodmFsdWUsICdpbXBvcnQnKSkgewogICAgICAgICAgZGlyZWN0aXZlU3RhdGU/LmNoZWNrSW1wb3J0KHRoaXMsIGtleXdvcmQpOwogICAgICAgICAgdG9rZW4gPSBwYXJzZUltcG9ydChrZXl3b3JkKTsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2V4cG9ydCcpKSB7CiAgICAgICAgICBkaXJlY3RpdmVTdGF0ZT8uY2hlY2tFeHBvcnQodGhpcywga2V5d29yZCk7CiAgICAgICAgICB0b2tlbiA9IHBhcnNlRXhwb3J0KGtleXdvcmQpOwogICAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnbGlicmFyeScpKSB7CiAgICAgICAgICBkaXJlY3RpdmVTdGF0ZT8uY2hlY2tMaWJyYXJ5KHRoaXMsIGtleXdvcmQpOwogICAgICAgICAgdG9rZW4gPSBwYXJzZUxpYnJhcnlOYW1lKGtleXdvcmQpOwogICAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAncGFydCcpKSB7CiAgICAgICAgICB0b2tlbiA9IHBhcnNlUGFydE9yUGFydE9mKGtleXdvcmQsIGRpcmVjdGl2ZVN0YXRlKTsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJzsnKSkgewogICAgICAgICAgdG9rZW4gPSBzdGFydDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbGlzdGVuZXIuaGFuZGxlRGlyZWN0aXZlc09ubHkoKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBsaXN0ZW5lci5lbmRUb3BMZXZlbERlY2xhcmF0aW9uKHRva2VuLm5leHQpOwogICAgfQogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgbGlzdGVuZXIuZW5kQ29tcGlsYXRpb25Vbml0KGNvdW50LCB0b2tlbik7CiAgICAvLyBDbGVhciBmaWVsZHMgdGhhdCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBsZWFrLgogICAgY2FjaGVkUmV3cml0ZXIgPSBudWxsOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIFBhcnNlIGEgdG9wLWxldmVsIGRlY2xhcmF0aW9uLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBpcyBvbmx5IGludm9rZWQgZnJvbSBvdXRzaWRlIHRoZSBwYXJzZXIuIEFzIGEgcmVzdWx0LCB0aGlzCiAgLy8vIG1ldGhvZCB0YWtlcyB0aGUgbmV4dCB0b2tlbiB0byBiZSBjb25zdW1lZCByYXRoZXIgdGhhbiB0aGUgbGFzdCBjb25zdW1lZAogIC8vLyB0b2tlbiBhbmQgcmV0dXJucyB0aGUgdG9rZW4gYWZ0ZXIgdGhlIGxhc3QgY29uc3VtZWQgdG9rZW4gcmF0aGVyIHRoYW4gdGhlCiAgLy8vIGxhc3QgY29uc3VtZWQgdG9rZW4uCiAgVG9rZW4gcGFyc2VUb3BMZXZlbERlY2xhcmF0aW9uKFRva2VuIHRva2VuKSB7CiAgICB0b2tlbiA9CiAgICAgICAgcGFyc2VUb3BMZXZlbERlY2xhcmF0aW9uSW1wbChzeW50aGV0aWNQcmV2aW91c1Rva2VuKHRva2VuKSwgbnVsbCkubmV4dDsKICAgIGxpc3RlbmVyLmVuZFRvcExldmVsRGVjbGFyYXRpb24odG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyB0b3BMZXZlbERlZmluaXRpb246CiAgLy8vICAgY2xhc3NEZWZpbml0aW9uIHwKICAvLy8gICBlbnVtVHlwZSB8CiAgLy8vICAgdHlwZUFsaWFzIHwKICAvLy8gICAnZXh0ZXJuYWwnPyBmdW5jdGlvblNpZ25hdHVyZSAnOycgfAogIC8vLyAgICdleHRlcm5hbCc/IGdldHRlclNpZ25hdHVyZSAnOycgfAogIC8vLyAgICdleHRlcm5hbCcnPyBzZXR0ZXJTaWduYXR1cmUgJzsnIHwKICAvLy8gICBmdW5jdGlvblNpZ25hdHVyZSBmdW5jdGlvbkJvZHkgfAogIC8vLyAgIHJldHVyblR5cGU/ICdnZXQnIGlkZW50aWZpZXIgZnVuY3Rpb25Cb2R5IHwKICAvLy8gICByZXR1cm5UeXBlPyAnc2V0JyBpZGVudGlmaWVyIGZvcm1hbFBhcmFtZXRlckxpc3QgZnVuY3Rpb25Cb2R5IHwKICAvLy8gICAoJ2ZpbmFsJyB8ICdjb25zdCcpIHR5cGU/IHN0YXRpY0ZpbmFsRGVjbGFyYXRpb25MaXN0ICc7JyB8CiAgLy8vICAgdmFyaWFibGVEZWNsYXJhdGlvbiAnOycKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZVRvcExldmVsRGVjbGFyYXRpb25JbXBsKAogICAgICBUb2tlbiB0b2tlbiwgRGlyZWN0aXZlQ29udGV4dCBkaXJlY3RpdmVTdGF0ZSkgewogICAgdG9rZW4gPSBwYXJzZU1ldGFkYXRhU3Rhcih0b2tlbik7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChuZXh0LmlzVG9wTGV2ZWxLZXl3b3JkKSB7CiAgICAgIHJldHVybiBwYXJzZVRvcExldmVsS2V5d29yZERlY2xhcmF0aW9uKHRva2VuLCBuZXh0LCBkaXJlY3RpdmVTdGF0ZSk7CiAgICB9CiAgICBUb2tlbiBzdGFydCA9IHRva2VuOwogICAgLy8gU2tpcCBtb2RpZmllcnMgdG8gZmluZCBhIHRvcCBsZXZlbCBrZXl3b3JkIG9yIGlkZW50aWZpZXIKICAgIGlmIChuZXh0LmlzTW9kaWZpZXIpIHsKICAgICAgaWYgKG9wdGlvbmFsKCd2YXInLCBuZXh0KSB8fAogICAgICAgICAgb3B0aW9uYWwoJ2xhdGUnLCBuZXh0KSB8fAogICAgICAgICAgKChvcHRpb25hbCgnY29uc3QnLCBuZXh0KSB8fCBvcHRpb25hbCgnZmluYWwnLCBuZXh0KSkgJiYKICAgICAgICAgICAgICAvLyBJZ25vcmUgYGNvbnN0IGNsYXNzYCBhbmQgYGZpbmFsIGNsYXNzYCBzbyB0aGF0IGl0IGlzIHJlcG9ydGVkCiAgICAgICAgICAgICAgLy8gYmVsb3cgYXMgYW4gaW52YWxpZCBtb2RpZmllciBvbiBhIGNsYXNzLgogICAgICAgICAgICAgICFvcHRpb25hbCgnY2xhc3MnLCBuZXh0Lm5leHQpKSkgewogICAgICAgIGRpcmVjdGl2ZVN0YXRlPy5jaGVja0RlY2xhcmF0aW9uKCk7CiAgICAgICAgcmV0dXJuIHBhcnNlVG9wTGV2ZWxNZW1iZXJJbXBsKHRva2VuKTsKICAgICAgfQogICAgICB3aGlsZSAodG9rZW4ubmV4dC5pc01vZGlmaWVyKSB7CiAgICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICB9CiAgICB9CiAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChuZXh0LmlzVG9wTGV2ZWxLZXl3b3JkKSB7CiAgICAgIHJldHVybiBwYXJzZVRvcExldmVsS2V5d29yZERlY2xhcmF0aW9uKHN0YXJ0LCBuZXh0LCBkaXJlY3RpdmVTdGF0ZSk7CiAgICB9IGVsc2UgaWYgKG5leHQuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBpbXByb3ZlIHBhcnNlVG9wTGV2ZWxNZW1iZXIKICAgICAgLy8gc28gdGhhdCB3ZSBkb24ndCBwYXJzZSBtb2RpZmllcnMgdHdpY2UuCiAgICAgIGRpcmVjdGl2ZVN0YXRlPy5jaGVja0RlY2xhcmF0aW9uKCk7CiAgICAgIHJldHVybiBwYXJzZVRvcExldmVsTWVtYmVySW1wbChzdGFydCk7CiAgICB9IGVsc2UgaWYgKHN0YXJ0Lm5leHQgIT0gbmV4dCkgewogICAgICBkaXJlY3RpdmVTdGF0ZT8uY2hlY2tEZWNsYXJhdGlvbigpOwogICAgICAvLyBIYW5kbGUgdGhlIGVkZ2UgY2FzZSB3aGVyZSBhIG1vZGlmaWVyIGlzIGJlaW5nIHVzZWQgYXMgYW4gaWRlbnRpZmllcgogICAgICByZXR1cm4gcGFyc2VUb3BMZXZlbE1lbWJlckltcGwoc3RhcnQpOwogICAgfQogICAgLy8gUmVjb3ZlcnkKICAgIGlmIChuZXh0LmlzT3BlcmF0b3IgJiYgb3B0aW9uYWwoJygnLCBuZXh0Lm5leHQpKSB7CiAgICAgIC8vIFRoaXMgYXBwZWFycyB0byBiZSBhIHRvcCBsZXZlbCBvcGVyYXRvciBkZWNsYXJhdGlvbiwgd2hpY2ggaXMgaW52YWxpZC4KICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlVG9wTGV2ZWxPcGVyYXRvcik7CiAgICAgIC8vIEluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyCiAgICAgIC8vIGFuZCBjb250aW51ZSBwYXJzaW5nIGFzIGEgdG9wIGxldmVsIGZ1bmN0aW9uLgogICAgICByZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKAogICAgICAgICAgbmV4dCwgJyNzeW50aGV0aWNfZnVuY3Rpb25fJHtuZXh0LmNoYXJPZmZzZXR9Jyk7CiAgICAgIHJldHVybiBwYXJzZVRvcExldmVsTWVtYmVySW1wbChuZXh0KTsKICAgIH0KICAgIC8vIElnbm9yZSBhbnkgcHJlY2VkaW5nIG1vZGlmaWVycyBhbmQganVzdCByZXBvcnQgdGhlIHVuZXhwZWN0ZWQgdG9rZW4KICAgIGxpc3RlbmVyLmJlZ2luVG9wTGV2ZWxNZW1iZXIobmV4dCk7CiAgICByZXR1cm4gcGFyc2VJbnZhbGlkVG9wTGV2ZWxEZWNsYXJhdGlvbih0b2tlbik7CiAgfQoKICAvLy8gUGFyc2UgdGhlIG1vZGlmaWVycyBiZWZvcmUgdGhlIGBjbGFzc2Aga2V5d29yZC4KICAvLy8gUmV0dXJuIHRoZSBmaXJzdCBgYWJzdHJhY3RgIG1vZGlmaWVyIG9yIGBudWxsYCBpZiBub3QgZm91bmQuCiAgVG9rZW4gcGFyc2VDbGFzc0RlY2xhcmF0aW9uTW9kaWZpZXJzKFRva2VuIHN0YXJ0LCBUb2tlbiBrZXl3b3JkKSB7CiAgICBUb2tlbiBtb2RpZmllciA9IHN0YXJ0Lm5leHQ7CiAgICB3aGlsZSAobW9kaWZpZXIgIT0ga2V5d29yZCkgewogICAgICBpZiAob3B0aW9uYWwoJ2Fic3RyYWN0JywgbW9kaWZpZXIpKSB7CiAgICAgICAgcGFyc2VUb3BMZXZlbEtleXdvcmRNb2RpZmllcnMobW9kaWZpZXIsIGtleXdvcmQpOwogICAgICAgIHJldHVybiBtb2RpZmllcjsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgIHJlcG9ydFRvcExldmVsTW9kaWZpZXJFcnJvcihtb2RpZmllciwga2V5d29yZCk7CiAgICAgIH0KICAgICAgbW9kaWZpZXIgPSBtb2RpZmllci5uZXh0OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvLy8gUmVwb3J0IGVycm9ycyBvbiBhbnkgbW9kaWZpZXJzIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGtleXdvcmQuCiAgdm9pZCBwYXJzZVRvcExldmVsS2V5d29yZE1vZGlmaWVycyhUb2tlbiBzdGFydCwgVG9rZW4ga2V5d29yZCkgewogICAgVG9rZW4gbW9kaWZpZXIgPSBzdGFydC5uZXh0OwogICAgd2hpbGUgKG1vZGlmaWVyICE9IGtleXdvcmQpIHsKICAgICAgLy8gUmVjb3ZlcnkKICAgICAgcmVwb3J0VG9wTGV2ZWxNb2RpZmllckVycm9yKG1vZGlmaWVyLCBrZXl3b3JkKTsKICAgICAgbW9kaWZpZXIgPSBtb2RpZmllci5uZXh0OwogICAgfQogIH0KCiAgLy8gUmVwb3J0IGFuIGVycm9yIGZvciB0aGUgZ2l2ZW4gbW9kaWZpZXIgcHJlY2VkaW5nIGEgdG9wIGxldmVsIGtleXdvcmQKICAvLyBzdWNoIGFzIGBpbXBvcnRgIG9yIGBjbGFzc2AuCiAgdm9pZCByZXBvcnRUb3BMZXZlbE1vZGlmaWVyRXJyb3IoVG9rZW4gbW9kaWZpZXIsIFRva2VuIGFmdGVyTW9kaWZpZXJzKSB7CiAgICBpZiAob3B0aW9uYWwoJ2NvbnN0JywgbW9kaWZpZXIpICYmIG9wdGlvbmFsKCdjbGFzcycsIGFmdGVyTW9kaWZpZXJzKSkgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG1vZGlmaWVyLCBmYXN0YS5tZXNzYWdlQ29uc3RDbGFzcyk7CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCdleHRlcm5hbCcsIG1vZGlmaWVyKSkgewogICAgICBpZiAob3B0aW9uYWwoJ2NsYXNzJywgYWZ0ZXJNb2RpZmllcnMpKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihtb2RpZmllciwgZmFzdGEubWVzc2FnZUV4dGVybmFsQ2xhc3MpOwogICAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCdlbnVtJywgYWZ0ZXJNb2RpZmllcnMpKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihtb2RpZmllciwgZmFzdGEubWVzc2FnZUV4dGVybmFsRW51bSk7CiAgICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ3R5cGVkZWYnLCBhZnRlck1vZGlmaWVycykpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG1vZGlmaWVyLCBmYXN0YS5tZXNzYWdlRXh0ZXJuYWxUeXBlZGVmKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgICBtb2RpZmllciwgZmFzdGEudGVtcGxhdGVFeHRyYW5lb3VzTW9kaWZpZXIpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgbW9kaWZpZXIsIGZhc3RhLnRlbXBsYXRlRXh0cmFuZW91c01vZGlmaWVyKTsKICAgIH0KICB9CgogIC8vLyBQYXJzZSBhbnkgdG9wLWxldmVsIGRlY2xhcmF0aW9uIHRoYXQgYmVnaW5zIHdpdGggYSBrZXl3b3JkLgogIC8vLyBbc3RhcnRdIGlzIHRoZSB0b2tlbiBiZWZvcmUgYW55IG1vZGlmaWVycyBwcmVjZWRpbmcgW2tleXdvcmRdLgogIFRva2VuIHBhcnNlVG9wTGV2ZWxLZXl3b3JkRGVjbGFyYXRpb24oCiAgICAgIFRva2VuIHN0YXJ0LCBUb2tlbiBrZXl3b3JkLCBEaXJlY3RpdmVDb250ZXh0IGRpcmVjdGl2ZVN0YXRlKSB7CiAgICBhc3NlcnQoa2V5d29yZC5pc1RvcExldmVsS2V5d29yZCk7CiAgICBmaW5hbCBTdHJpbmcgdmFsdWUgPSBrZXl3b3JkLnN0cmluZ1ZhbHVlOwogICAgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2NsYXNzJykpIHsKICAgICAgZGlyZWN0aXZlU3RhdGU/LmNoZWNrRGVjbGFyYXRpb24oKTsKICAgICAgVG9rZW4gYWJzdHJhY3RUb2tlbiA9IHBhcnNlQ2xhc3NEZWNsYXJhdGlvbk1vZGlmaWVycyhzdGFydCwga2V5d29yZCk7CiAgICAgIHJldHVybiBwYXJzZUNsYXNzT3JOYW1lZE1peGluQXBwbGljYXRpb24oYWJzdHJhY3RUb2tlbiwga2V5d29yZCk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2VudW0nKSkgewogICAgICBkaXJlY3RpdmVTdGF0ZT8uY2hlY2tEZWNsYXJhdGlvbigpOwogICAgICBwYXJzZVRvcExldmVsS2V5d29yZE1vZGlmaWVycyhzdGFydCwga2V5d29yZCk7CiAgICAgIHJldHVybiBwYXJzZUVudW0oa2V5d29yZCk7CiAgICB9IGVsc2UgewogICAgICAvLyBUaGUgcmVtYWluaW5nIHRvcCBsZXZlbCBrZXl3b3JkcyBhcmUgYnVpbHQtaW4ga2V5d29yZHMKICAgICAgLy8gYW5kIGNhbiBiZSB1c2VkIGluIGEgdG9wIGxldmVsIGRlY2xhcmF0aW9uCiAgICAgIC8vIGFzIGFuIGlkZW50aWZpZXIgc3VjaCBhcyAiYWJzdHJhY3Q8VD4oKSA9PiAwOyIKICAgICAgLy8gb3IgYXMgYSBwcmVmaXggc3VjaCBhcyAiYWJzdHJhY3QuQSBiKCkgPT4gMDsiLgogICAgICBTdHJpbmcgbmV4dFZhbHVlID0ga2V5d29yZC5uZXh0LnN0cmluZ1ZhbHVlOwogICAgICBpZiAoaWRlbnRpY2FsKG5leHRWYWx1ZSwgJygnKSB8fCBpZGVudGljYWwobmV4dFZhbHVlLCAnLicpKSB7CiAgICAgICAgZGlyZWN0aXZlU3RhdGU/LmNoZWNrRGVjbGFyYXRpb24oKTsKICAgICAgICByZXR1cm4gcGFyc2VUb3BMZXZlbE1lbWJlckltcGwoc3RhcnQpOwogICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbChuZXh0VmFsdWUsICc8JykpIHsKICAgICAgICBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnZXh0ZW5zaW9uJykpIHsKICAgICAgICAgIC8vIFRoZSBuYW1lIGluIGFuIGV4dGVuc2lvbiBkZWNsYXJhdGlvbiBpcyBvcHRpb25hbDoKICAgICAgICAgIC8vIGBleHRlbnNpb248VD4gb24gLi4uYAogICAgICAgICAgVG9rZW4gZW5kR3JvdXAgPSBrZXl3b3JkLm5leHQuZW5kR3JvdXA7CiAgICAgICAgICBpZiAoZW5kR3JvdXAgIT0gbnVsbCAmJiBvcHRpb25hbCgnb24nLCBlbmRHcm91cC5uZXh0KSkgewogICAgICAgICAgICBkaXJlY3RpdmVTdGF0ZT8uY2hlY2tEZWNsYXJhdGlvbigpOwogICAgICAgICAgICByZXR1cm4gcGFyc2VFeHRlbnNpb24oa2V5d29yZCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGRpcmVjdGl2ZVN0YXRlPy5jaGVja0RlY2xhcmF0aW9uKCk7CiAgICAgICAgcmV0dXJuIHBhcnNlVG9wTGV2ZWxNZW1iZXJJbXBsKHN0YXJ0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwYXJzZVRvcExldmVsS2V5d29yZE1vZGlmaWVycyhzdGFydCwga2V5d29yZCk7CiAgICAgICAgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2ltcG9ydCcpKSB7CiAgICAgICAgICBkaXJlY3RpdmVTdGF0ZT8uY2hlY2tJbXBvcnQodGhpcywga2V5d29yZCk7CiAgICAgICAgICByZXR1cm4gcGFyc2VJbXBvcnQoa2V5d29yZCk7CiAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdleHBvcnQnKSkgewogICAgICAgICAgZGlyZWN0aXZlU3RhdGU/LmNoZWNrRXhwb3J0KHRoaXMsIGtleXdvcmQpOwogICAgICAgICAgcmV0dXJuIHBhcnNlRXhwb3J0KGtleXdvcmQpOwogICAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAndHlwZWRlZicpKSB7CiAgICAgICAgICBkaXJlY3RpdmVTdGF0ZT8uY2hlY2tEZWNsYXJhdGlvbigpOwogICAgICAgICAgcmV0dXJuIHBhcnNlVHlwZWRlZihrZXl3b3JkKTsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ21peGluJykpIHsKICAgICAgICAgIGRpcmVjdGl2ZVN0YXRlPy5jaGVja0RlY2xhcmF0aW9uKCk7CiAgICAgICAgICByZXR1cm4gcGFyc2VNaXhpbihrZXl3b3JkKTsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2V4dGVuc2lvbicpKSB7CiAgICAgICAgICBkaXJlY3RpdmVTdGF0ZT8uY2hlY2tEZWNsYXJhdGlvbigpOwogICAgICAgICAgcmV0dXJuIHBhcnNlRXh0ZW5zaW9uKGtleXdvcmQpOwogICAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAncGFydCcpKSB7CiAgICAgICAgICByZXR1cm4gcGFyc2VQYXJ0T3JQYXJ0T2Yoa2V5d29yZCwgZGlyZWN0aXZlU3RhdGUpOwogICAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnbGlicmFyeScpKSB7CiAgICAgICAgICBkaXJlY3RpdmVTdGF0ZT8uY2hlY2tMaWJyYXJ5KHRoaXMsIGtleXdvcmQpOwogICAgICAgICAgcmV0dXJuIHBhcnNlTGlicmFyeU5hbWUoa2V5d29yZCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgdGhyb3cgIkludGVybmFsIGVycm9yOiBVbmhhbmRsZWQgdG9wIGxldmVsIGtleXdvcmQgJyR2YWx1ZScuIjsKICB9CgogIC8vLyBgYGAKICAvLy8gbGlicmFyeURpcmVjdGl2ZToKICAvLy8gICAnbGlicmFyeScgcXVhbGlmaWVkICc7JwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlTGlicmFyeU5hbWUoVG9rZW4gbGlicmFyeUtleXdvcmQpIHsKICAgIGFzc2VydChvcHRpb25hbCgnbGlicmFyeScsIGxpYnJhcnlLZXl3b3JkKSk7CiAgICBsaXN0ZW5lci5iZWdpbkxpYnJhcnlOYW1lKGxpYnJhcnlLZXl3b3JkKTsKICAgIFRva2VuIHRva2VuID0gcGFyc2VRdWFsaWZpZWQobGlicmFyeUtleXdvcmQsIElkZW50aWZpZXJDb250ZXh0LmxpYnJhcnlOYW1lLAogICAgICAgIElkZW50aWZpZXJDb250ZXh0LmxpYnJhcnlOYW1lQ29udGludWF0aW9uKTsKICAgIHRva2VuID0gZW5zdXJlU2VtaWNvbG9uKHRva2VuKTsKICAgIGxpc3RlbmVyLmVuZExpYnJhcnlOYW1lKGxpYnJhcnlLZXl3b3JkLCB0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIGltcG9ydFByZWZpeDoKICAvLy8gICAnZGVmZXJyZWQnPyAnYXMnIGlkZW50aWZpZXIKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUltcG9ydFByZWZpeE9wdChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAob3B0aW9uYWwoJ2RlZmVycmVkJywgbmV4dCkgJiYgb3B0aW9uYWwoJ2FzJywgbmV4dC5uZXh0KSkgewogICAgICBUb2tlbiBkZWZlcnJlZFRva2VuID0gbmV4dDsKICAgICAgVG9rZW4gYXNLZXl3b3JkID0gbmV4dC5uZXh0OwogICAgICB0b2tlbiA9IGVuc3VyZUlkZW50aWZpZXIoCiAgICAgICAgICBhc0tleXdvcmQsIElkZW50aWZpZXJDb250ZXh0LmltcG9ydFByZWZpeERlY2xhcmF0aW9uKTsKICAgICAgbGlzdGVuZXIuaGFuZGxlSW1wb3J0UHJlZml4KGRlZmVycmVkVG9rZW4sIGFzS2V5d29yZCk7CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCdhcycsIG5leHQpKSB7CiAgICAgIFRva2VuIGFzS2V5d29yZCA9IG5leHQ7CiAgICAgIHRva2VuID0gZW5zdXJlSWRlbnRpZmllcihuZXh0LCBJZGVudGlmaWVyQ29udGV4dC5pbXBvcnRQcmVmaXhEZWNsYXJhdGlvbik7CiAgICAgIGxpc3RlbmVyLmhhbmRsZUltcG9ydFByZWZpeChudWxsLCBhc0tleXdvcmQpOwogICAgfSBlbHNlIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlSW1wb3J0UHJlZml4KG51bGwsIG51bGwpOwogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBpbXBvcnREaXJlY3RpdmU6CiAgLy8vICAgJ2ltcG9ydCcgdXJpICgnaWYnICcoJyB0ZXN0ICcpJyB1cmkpKiBpbXBvcnRQcmVmaXg/IGNvbWJpbmF0b3IqICc7JwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlSW1wb3J0KFRva2VuIGltcG9ydEtleXdvcmQpIHsKICAgIGFzc2VydChvcHRpb25hbCgnaW1wb3J0JywgaW1wb3J0S2V5d29yZCkpOwogICAgbGlzdGVuZXIuYmVnaW5JbXBvcnQoaW1wb3J0S2V5d29yZCk7CiAgICBUb2tlbiB0b2tlbiA9IGVuc3VyZUxpdGVyYWxTdHJpbmcoaW1wb3J0S2V5d29yZCk7CiAgICBUb2tlbiB1cmkgPSB0b2tlbjsKICAgIHRva2VuID0gcGFyc2VDb25kaXRpb25hbFVyaVN0YXIodG9rZW4pOwogICAgdG9rZW4gPSBwYXJzZUltcG9ydFByZWZpeE9wdCh0b2tlbik7CiAgICB0b2tlbiA9IHBhcnNlQ29tYmluYXRvclN0YXIodG9rZW4pLm5leHQ7CiAgICBpZiAob3B0aW9uYWwoJzsnLCB0b2tlbikpIHsKICAgICAgbGlzdGVuZXIuZW5kSW1wb3J0KGltcG9ydEtleXdvcmQsIHRva2VuKTsKICAgICAgcmV0dXJuIHRva2VuOwogICAgfSBlbHNlIHsKICAgICAgLy8gUmVjb3ZlcnkKICAgICAgbGlzdGVuZXIuZW5kSW1wb3J0KGltcG9ydEtleXdvcmQsIG51bGwpOwogICAgICByZXR1cm4gcGFyc2VJbXBvcnRSZWNvdmVyeSh1cmkpOwogICAgfQogIH0KCiAgLy8vIFJlY292ZXIgZ2l2ZW4gb3V0LW9mLW9yZGVyIGNsYXVzZXMgaW4gYW4gaW1wb3J0IGRpcmVjdGl2ZSB3aGVyZSBbdG9rZW5dIGlzCiAgLy8vIHRoZSBpbXBvcnQga2V5d29yZC4KICBUb2tlbiBwYXJzZUltcG9ydFJlY292ZXJ5KFRva2VuIHRva2VuKSB7CiAgICBmaW5hbCBMaXN0ZW5lciBwcmltYXJ5TGlzdGVuZXIgPSBsaXN0ZW5lcjsKICAgIGZpbmFsIEltcG9ydFJlY292ZXJ5TGlzdGVuZXIgcmVjb3ZlcnlMaXN0ZW5lciA9CiAgICAgICAgbmV3IEltcG9ydFJlY292ZXJ5TGlzdGVuZXIoKTsKCiAgICAvLyBSZXBhcnNlIHRvIGRldGVybWluZSB3aGljaCBjbGF1c2VzIGhhdmUgYWxyZWFkeSBiZWVuIHBhcnNlZAogICAgLy8gYnV0IGludGVyY2VwdCB0aGUgZXZlbnRzIHNvIHRoZXkgYXJlIG5vdCBzZW50IHRvIHRoZSBwcmltYXJ5IGxpc3RlbmVyCiAgICBsaXN0ZW5lciA9IHJlY292ZXJ5TGlzdGVuZXI7CiAgICB0b2tlbiA9IHBhcnNlQ29uZGl0aW9uYWxVcmlTdGFyKHRva2VuKTsKICAgIHRva2VuID0gcGFyc2VJbXBvcnRQcmVmaXhPcHQodG9rZW4pOwogICAgdG9rZW4gPSBwYXJzZUNvbWJpbmF0b3JTdGFyKHRva2VuKTsKCiAgICBUb2tlbiBmaXJzdERlZmVycmVkS2V5d29yZCA9IHJlY292ZXJ5TGlzdGVuZXIuZGVmZXJyZWRLZXl3b3JkOwogICAgYm9vbCBoYXNQcmVmaXggPSByZWNvdmVyeUxpc3RlbmVyLmFzS2V5d29yZCAhPSBudWxsOwogICAgYm9vbCBoYXNDb21iaW5hdG9yID0gcmVjb3ZlcnlMaXN0ZW5lci5oYXNDb21iaW5hdG9yOwoKICAgIC8vIFVwZGF0ZSB0aGUgcmVjb3ZlcnkgbGlzdGVuZXIgdG8gZm9yd2FyZCBzdWJzZXF1ZW50IGV2ZW50cwogICAgLy8gdG8gdGhlIHByaW1hcnkgbGlzdGVuZXIKICAgIHJlY292ZXJ5TGlzdGVuZXIubGlzdGVuZXIgPSBwcmltYXJ5TGlzdGVuZXI7CgogICAgLy8gUGFyc2UgYWRkaXRpb25hbCBvdXQtb2Ytb3JkZXIgY2xhdXNlcy4KICAgIFRva2VuIHNlbWljb2xvbjsKICAgIGRvIHsKICAgICAgVG9rZW4gc3RhcnQgPSB0b2tlbi5uZXh0OwoKICAgICAgLy8gQ2hlY2sgZm9yIGV4dHJhbmVvdXMgdG9rZW4gaW4gdGhlIG1pZGRsZSBvZiBhbiBpbXBvcnQgc3RhdGVtZW50LgogICAgICB0b2tlbiA9IHNraXBVbmV4cGVjdGVkVG9rZW5PcHQoCiAgICAgICAgICB0b2tlbiwgY29uc3QgPFN0cmluZz5bJ2lmJywgJ2RlZmVycmVkJywgJ2FzJywgJ2hpZGUnLCAnc2hvdycsICc7J10pOwoKICAgICAgLy8gRHVyaW5nIHJlY292ZXJ5LCBjbGF1c2VzIGFyZSBwYXJzZWQgaW4gdGhlIHNhbWUgb3JkZXIKICAgICAgLy8gYW5kIGdlbmVyYXRlIHRoZSBzYW1lIGV2ZW50cyBhcyBpbiB0aGUgcGFyc2VJbXBvcnQgbWV0aG9kIGFib3ZlLgogICAgICByZWNvdmVyeUxpc3RlbmVyLmNsZWFyKCk7CiAgICAgIHRva2VuID0gcGFyc2VDb25kaXRpb25hbFVyaVN0YXIodG9rZW4pOwogICAgICBpZiAocmVjb3ZlcnlMaXN0ZW5lci5pZktleXdvcmQgIT0gbnVsbCkgewogICAgICAgIGlmIChmaXJzdERlZmVycmVkS2V5d29yZCAhPSBudWxsKSB7CiAgICAgICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogcmVwb3J0IGVycm9yIGluZGljYXRpbmcgY29uZGl0aW9uYWwgc2hvdWxkCiAgICAgICAgICAvLyBiZSBtb3ZlZCBiZWZvcmUgZGVmZXJyZWQga2V5d29yZAogICAgICAgIH0gZWxzZSBpZiAoaGFzUHJlZml4KSB7CiAgICAgICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogcmVwb3J0IGVycm9yIGluZGljYXRpbmcgY29uZGl0aW9uYWwgc2hvdWxkCiAgICAgICAgICAvLyBiZSBtb3ZlZCBiZWZvcmUgcHJlZml4IGNsYXVzZQogICAgICAgIH0gZWxzZSBpZiAoaGFzQ29tYmluYXRvcikgewogICAgICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IHJlcG9ydCBlcnJvciBpbmRpY2F0aW5nIGNvbmRpdGlvbmFsIHNob3VsZAogICAgICAgICAgLy8gYmUgbW92ZWQgYmVmb3JlIGNvbWJpbmF0b3JzCiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAob3B0aW9uYWwoJ2RlZmVycmVkJywgdG9rZW4ubmV4dCkgJiYKICAgICAgICAgICFvcHRpb25hbCgnYXMnLCB0b2tlbi5uZXh0Lm5leHQpKSB7CiAgICAgICAgbGlzdGVuZXIuaGFuZGxlSW1wb3J0UHJlZml4KHRva2VuLm5leHQsIG51bGwpOwogICAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgfSBlbHNlIHsKICAgICAgICB0b2tlbiA9IHBhcnNlSW1wb3J0UHJlZml4T3B0KHRva2VuKTsKICAgICAgfQogICAgICBpZiAocmVjb3ZlcnlMaXN0ZW5lci5kZWZlcnJlZEtleXdvcmQgIT0gbnVsbCkgewogICAgICAgIGlmIChmaXJzdERlZmVycmVkS2V5d29yZCAhPSBudWxsKSB7CiAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICAgIHJlY292ZXJ5TGlzdGVuZXIuZGVmZXJyZWRLZXl3b3JkLCBmYXN0YS5tZXNzYWdlRHVwbGljYXRlRGVmZXJyZWQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoaGFzUHJlZml4KSB7CiAgICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IocmVjb3ZlcnlMaXN0ZW5lci5kZWZlcnJlZEtleXdvcmQsCiAgICAgICAgICAgICAgICBmYXN0YS5tZXNzYWdlRGVmZXJyZWRBZnRlclByZWZpeCk7CiAgICAgICAgICB9CiAgICAgICAgICBmaXJzdERlZmVycmVkS2V5d29yZCA9IHJlY292ZXJ5TGlzdGVuZXIuZGVmZXJyZWRLZXl3b3JkOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAocmVjb3ZlcnlMaXN0ZW5lci5hc0tleXdvcmQgIT0gbnVsbCkgewogICAgICAgIGlmIChoYXNQcmVmaXgpIHsKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgcmVjb3ZlcnlMaXN0ZW5lci5hc0tleXdvcmQsIGZhc3RhLm1lc3NhZ2VEdXBsaWNhdGVQcmVmaXgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoaGFzQ29tYmluYXRvcikgewogICAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICAgICAgcmVjb3ZlcnlMaXN0ZW5lci5hc0tleXdvcmQsIGZhc3RhLm1lc3NhZ2VQcmVmaXhBZnRlckNvbWJpbmF0b3IpOwogICAgICAgICAgfQogICAgICAgICAgaGFzUHJlZml4ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHRva2VuID0gcGFyc2VDb21iaW5hdG9yU3Rhcih0b2tlbik7CiAgICAgIGhhc0NvbWJpbmF0b3IgPSBoYXNDb21iaW5hdG9yIHx8IHJlY292ZXJ5TGlzdGVuZXIuaGFzQ29tYmluYXRvcjsKCiAgICAgIGlmIChvcHRpb25hbCgnOycsIHRva2VuLm5leHQpKSB7CiAgICAgICAgc2VtaWNvbG9uID0gdG9rZW4ubmV4dDsKICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwoc3RhcnQsIHRva2VuLm5leHQpKSB7CiAgICAgICAgLy8gSWYgbm8gZm9yd2FyZCBwcm9ncmVzcyB3YXMgbWFkZSwgaW5zZXJ0ICc7JyBzbyB0aGF0IHdlIGV4aXQgbG9vcC4KICAgICAgICBzZW1pY29sb24gPSBlbnN1cmVTZW1pY29sb24odG9rZW4pOwogICAgICB9CiAgICAgIGxpc3RlbmVyLmhhbmRsZVJlY292ZXJJbXBvcnQoc2VtaWNvbG9uKTsKICAgIH0gd2hpbGUgKHNlbWljb2xvbiA9PSBudWxsKTsKCiAgICBpZiAoZmlyc3REZWZlcnJlZEtleXdvcmQgIT0gbnVsbCAmJiAhaGFzUHJlZml4KSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICBmaXJzdERlZmVycmVkS2V5d29yZCwgZmFzdGEubWVzc2FnZU1pc3NpbmdQcmVmaXhJbkRlZmVycmVkSW1wb3J0KTsKICAgIH0KCiAgICByZXR1cm4gc2VtaWNvbG9uOwogIH0KCiAgLy8vIGBgYAogIC8vLyBjb25kaXRpb25hbFVyaXM6CiAgLy8vICAgY29uZGl0aW9uYWxVcmkqCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VDb25kaXRpb25hbFVyaVN0YXIoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyLmJlZ2luQ29uZGl0aW9uYWxVcmlzKHRva2VuLm5leHQpOwogICAgaW50IGNvdW50ID0gMDsKICAgIHdoaWxlIChvcHRpb25hbCgnaWYnLCB0b2tlbi5uZXh0KSkgewogICAgICBjb3VudCsrOwogICAgICB0b2tlbiA9IHBhcnNlQ29uZGl0aW9uYWxVcmkodG9rZW4pOwogICAgfQogICAgbGlzdGVuZXIuZW5kQ29uZGl0aW9uYWxVcmlzKGNvdW50KTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gY29uZGl0aW9uYWxVcmk6CiAgLy8vICAgJ2lmJyAnKCcgZG90dGVkTmFtZSAoJz09JyBsaXRlcmFsU3RyaW5nKT8gJyknIHVyaQogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlQ29uZGl0aW9uYWxVcmkoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGlmS2V5d29yZCA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnaWYnLCB0b2tlbikpOwogICAgbGlzdGVuZXIuYmVnaW5Db25kaXRpb25hbFVyaSh0b2tlbik7CiAgICBUb2tlbiBsZWZ0UGFyZW4gPSB0b2tlbi5uZXh0OwogICAgaWYgKCFvcHRpb25hbCgnKCcsIGxlZnRQYXJlbikpIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgIGxlZnRQYXJlbiwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCcoJykpOwogICAgICBsZWZ0UGFyZW4gPSByZXdyaXRlci5pbnNlcnRQYXJlbnModG9rZW4sIHRydWUpOwogICAgfQogICAgdG9rZW4gPSBwYXJzZURvdHRlZE5hbWUobGVmdFBhcmVuKTsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgVG9rZW4gZXF1YWxpdHlTaWduOwogICAgaWYgKG9wdGlvbmFsKCc9PScsIG5leHQpKSB7CiAgICAgIGVxdWFsaXR5U2lnbiA9IG5leHQ7CiAgICAgIHRva2VuID0gZW5zdXJlTGl0ZXJhbFN0cmluZyhuZXh0KTsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICB9CiAgICBpZiAobmV4dCAhPSBsZWZ0UGFyZW4uZW5kR3JvdXApIHsKICAgICAgVG9rZW4gZW5kR3JvdXAgPSBsZWZ0UGFyZW4uZW5kR3JvdXA7CiAgICAgIGlmIChlbmRHcm91cC5pc1N5bnRoZXRpYykgewogICAgICAgIC8vIFRoZSBzY2FubmVyIGRpZCBub3QgcGxhY2UgdGhlIHN5bnRoZXRpYyAnKScgY29ycmVjdGx5LCBzbyBtb3ZlIGl0LgogICAgICAgIG5leHQgPSByZXdyaXRlci5tb3ZlU3ludGhldGljKHRva2VuLCBlbmRHcm91cCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbihuZXh0LCBmYXN0YS50ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbik7CiAgICAgICAgbmV4dCA9IGVuZEdyb3VwOwogICAgICB9CiAgICB9CiAgICB0b2tlbiA9IG5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJyknLCB0b2tlbikpOwoKICAgIHRva2VuID0gZW5zdXJlTGl0ZXJhbFN0cmluZyh0b2tlbik7CiAgICBsaXN0ZW5lci5lbmRDb25kaXRpb25hbFVyaShpZktleXdvcmQsIGxlZnRQYXJlbiwgZXF1YWxpdHlTaWduKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gZG90dGVkTmFtZToKICAvLy8gICBpZGVudGlmaWVyICgnLicgaWRlbnRpZmllcikqCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VEb3R0ZWROYW1lKFRva2VuIHRva2VuKSB7CiAgICB0b2tlbiA9IGVuc3VyZUlkZW50aWZpZXIodG9rZW4sIElkZW50aWZpZXJDb250ZXh0LmRvdHRlZE5hbWUpOwogICAgVG9rZW4gZmlyc3RJZGVudGlmaWVyID0gdG9rZW47CiAgICBpbnQgY291bnQgPSAxOwogICAgd2hpbGUgKG9wdGlvbmFsKCcuJywgdG9rZW4ubmV4dCkpIHsKICAgICAgdG9rZW4gPSBlbnN1cmVJZGVudGlmaWVyKAogICAgICAgICAgdG9rZW4ubmV4dCwgSWRlbnRpZmllckNvbnRleHQuZG90dGVkTmFtZUNvbnRpbnVhdGlvbik7CiAgICAgIGNvdW50Kys7CiAgICB9CiAgICBsaXN0ZW5lci5oYW5kbGVEb3R0ZWROYW1lKGNvdW50LCBmaXJzdElkZW50aWZpZXIpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBleHBvcnREaXJlY3RpdmU6CiAgLy8vICAgJ2V4cG9ydCcgdXJpIGNvbmRpdGlvbmFsLXVyaXMqIGNvbWJpbmF0b3IqICc7JwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlRXhwb3J0KFRva2VuIGV4cG9ydEtleXdvcmQpIHsKICAgIGFzc2VydChvcHRpb25hbCgnZXhwb3J0JywgZXhwb3J0S2V5d29yZCkpOwogICAgbGlzdGVuZXIuYmVnaW5FeHBvcnQoZXhwb3J0S2V5d29yZCk7CiAgICBUb2tlbiB0b2tlbiA9IGVuc3VyZUxpdGVyYWxTdHJpbmcoZXhwb3J0S2V5d29yZCk7CiAgICB0b2tlbiA9IHBhcnNlQ29uZGl0aW9uYWxVcmlTdGFyKHRva2VuKTsKICAgIHRva2VuID0gcGFyc2VDb21iaW5hdG9yU3Rhcih0b2tlbik7CiAgICB0b2tlbiA9IGVuc3VyZVNlbWljb2xvbih0b2tlbik7CiAgICBsaXN0ZW5lci5lbmRFeHBvcnQoZXhwb3J0S2V5d29yZCwgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBjb21iaW5hdG9yczoKICAvLy8gICAoaGlkZUNvbWJpbmF0b3IgfCBzaG93Q29tYmluYXRvcikqCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VDb21iaW5hdG9yU3RhcihUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBsaXN0ZW5lci5iZWdpbkNvbWJpbmF0b3JzKG5leHQpOwogICAgaW50IGNvdW50ID0gMDsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIFN0cmluZyB2YWx1ZSA9IG5leHQuc3RyaW5nVmFsdWU7CiAgICAgIGlmIChpZGVudGljYWwoJ2hpZGUnLCB2YWx1ZSkpIHsKICAgICAgICB0b2tlbiA9IHBhcnNlSGlkZSh0b2tlbik7CiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCdzaG93JywgdmFsdWUpKSB7CiAgICAgICAgdG9rZW4gPSBwYXJzZVNob3codG9rZW4pOwogICAgICB9IGVsc2UgewogICAgICAgIGxpc3RlbmVyLmVuZENvbWJpbmF0b3JzKGNvdW50KTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgY291bnQrKzsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gaGlkZUNvbWJpbmF0b3I6CiAgLy8vICAgJ2hpZGUnIGlkZW50aWZpZXJMaXN0CiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VIaWRlKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBoaWRlS2V5d29yZCA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2hpZGUnLCBoaWRlS2V5d29yZCkpOwogICAgbGlzdGVuZXIuYmVnaW5IaWRlKGhpZGVLZXl3b3JkKTsKICAgIHRva2VuID0gcGFyc2VJZGVudGlmaWVyTGlzdChoaWRlS2V5d29yZCk7CiAgICBsaXN0ZW5lci5lbmRIaWRlKGhpZGVLZXl3b3JkKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gc2hvd0NvbWJpbmF0b3I6CiAgLy8vICAgJ3Nob3cnIGlkZW50aWZpZXJMaXN0CiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VTaG93KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBzaG93S2V5d29yZCA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ3Nob3cnLCBzaG93S2V5d29yZCkpOwogICAgbGlzdGVuZXIuYmVnaW5TaG93KHNob3dLZXl3b3JkKTsKICAgIHRva2VuID0gcGFyc2VJZGVudGlmaWVyTGlzdChzaG93S2V5d29yZCk7CiAgICBsaXN0ZW5lci5lbmRTaG93KHNob3dLZXl3b3JkKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gaWRlbnRpZmllckxpc3Q6CiAgLy8vICAgaWRlbnRpZmllciAoJywnIGlkZW50aWZpZXIpKgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlSWRlbnRpZmllckxpc3QoVG9rZW4gdG9rZW4pIHsKICAgIHRva2VuID0gZW5zdXJlSWRlbnRpZmllcih0b2tlbiwgSWRlbnRpZmllckNvbnRleHQuY29tYmluYXRvcik7CiAgICBpbnQgY291bnQgPSAxOwogICAgd2hpbGUgKG9wdGlvbmFsKCcsJywgdG9rZW4ubmV4dCkpIHsKICAgICAgdG9rZW4gPSBlbnN1cmVJZGVudGlmaWVyKHRva2VuLm5leHQsIElkZW50aWZpZXJDb250ZXh0LmNvbWJpbmF0b3IpOwogICAgICBjb3VudCsrOwogICAgfQogICAgbGlzdGVuZXIuaGFuZGxlSWRlbnRpZmllckxpc3QoY291bnQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyB0eXBlTGlzdDoKICAvLy8gICB0eXBlICgnLCcgdHlwZSkqCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VUeXBlTGlzdChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXIuYmVnaW5UeXBlTGlzdCh0b2tlbi5uZXh0KTsKICAgIHRva2VuID0gY29tcHV0ZVR5cGUodG9rZW4sIHRydWUpLmVuc3VyZVR5cGVPclZvaWQodG9rZW4sIHRoaXMpOwogICAgaW50IGNvdW50ID0gMTsKICAgIHdoaWxlIChvcHRpb25hbCgnLCcsIHRva2VuLm5leHQpKSB7CiAgICAgIHRva2VuID0gY29tcHV0ZVR5cGUodG9rZW4ubmV4dCwgdHJ1ZSkuZW5zdXJlVHlwZU9yVm9pZCh0b2tlbi5uZXh0LCB0aGlzKTsKICAgICAgY291bnQrKzsKICAgIH0KICAgIGxpc3RlbmVyLmVuZFR5cGVMaXN0KGNvdW50KTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlUGFydE9yUGFydE9mKFRva2VuIHBhcnRLZXl3b3JkLCBEaXJlY3RpdmVDb250ZXh0IGRpcmVjdGl2ZVN0YXRlKSB7CiAgICBhc3NlcnQob3B0aW9uYWwoJ3BhcnQnLCBwYXJ0S2V5d29yZCkpOwogICAgaWYgKG9wdGlvbmFsKCdvZicsIHBhcnRLZXl3b3JkLm5leHQpKSB7CiAgICAgIGRpcmVjdGl2ZVN0YXRlPy5jaGVja1BhcnRPZih0aGlzLCBwYXJ0S2V5d29yZCk7CiAgICAgIHJldHVybiBwYXJzZVBhcnRPZihwYXJ0S2V5d29yZCk7CiAgICB9IGVsc2UgewogICAgICBkaXJlY3RpdmVTdGF0ZT8uY2hlY2tQYXJ0KHRoaXMsIHBhcnRLZXl3b3JkKTsKICAgICAgcmV0dXJuIHBhcnNlUGFydChwYXJ0S2V5d29yZCk7CiAgICB9CiAgfQoKICAvLy8gYGBgCiAgLy8vIHBhcnREaXJlY3RpdmU6CiAgLy8vICAgJ3BhcnQnIHVyaSAnOycKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZVBhcnQoVG9rZW4gcGFydEtleXdvcmQpIHsKICAgIGFzc2VydChvcHRpb25hbCgncGFydCcsIHBhcnRLZXl3b3JkKSk7CiAgICBsaXN0ZW5lci5iZWdpblBhcnQocGFydEtleXdvcmQpOwogICAgVG9rZW4gdG9rZW4gPSBlbnN1cmVMaXRlcmFsU3RyaW5nKHBhcnRLZXl3b3JkKTsKICAgIHRva2VuID0gZW5zdXJlU2VtaWNvbG9uKHRva2VuKTsKICAgIGxpc3RlbmVyLmVuZFBhcnQocGFydEtleXdvcmQsIHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gcGFydE9mRGlyZWN0aXZlOgogIC8vLyAgICdwYXJ0JyAnb2YnIChxdWFsaWZpZWQgfCB1cmkpICc7JwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlUGFydE9mKFRva2VuIHBhcnRLZXl3b3JkKSB7CiAgICBUb2tlbiBvZktleXdvcmQgPSBwYXJ0S2V5d29yZC5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdwYXJ0JywgcGFydEtleXdvcmQpKTsKICAgIGFzc2VydChvcHRpb25hbCgnb2YnLCBvZktleXdvcmQpKTsKICAgIGxpc3RlbmVyLmJlZ2luUGFydE9mKHBhcnRLZXl3b3JkKTsKICAgIGJvb2wgaGFzTmFtZSA9IG9mS2V5d29yZC5uZXh0LmlzSWRlbnRpZmllcjsKICAgIFRva2VuIHRva2VuOwogICAgaWYgKGhhc05hbWUpIHsKICAgICAgdG9rZW4gPSBwYXJzZVF1YWxpZmllZChvZktleXdvcmQsIElkZW50aWZpZXJDb250ZXh0LnBhcnROYW1lLAogICAgICAgICAgSWRlbnRpZmllckNvbnRleHQucGFydE5hbWVDb250aW51YXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgdG9rZW4gPSBlbnN1cmVMaXRlcmFsU3RyaW5nKG9mS2V5d29yZCk7CiAgICB9CiAgICB0b2tlbiA9IGVuc3VyZVNlbWljb2xvbih0b2tlbik7CiAgICBsaXN0ZW5lci5lbmRQYXJ0T2YocGFydEtleXdvcmQsIG9mS2V5d29yZCwgdG9rZW4sIGhhc05hbWUpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBtZXRhZGF0YToKICAvLy8gICBhbm5vdGF0aW9uKgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlTWV0YWRhdGFTdGFyKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lci5iZWdpbk1ldGFkYXRhU3Rhcih0b2tlbi5uZXh0KTsKICAgIGludCBjb3VudCA9IDA7CiAgICB3aGlsZSAob3B0aW9uYWwoJ0AnLCB0b2tlbi5uZXh0KSkgewogICAgICB0b2tlbiA9IHBhcnNlTWV0YWRhdGEodG9rZW4pOwogICAgICBjb3VudCsrOwogICAgfQogICAgbGlzdGVuZXIuZW5kTWV0YWRhdGFTdGFyKGNvdW50KTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gYW5ub3RhdGlvbjoKICAvLy8gICAnQCcgcXVhbGlmaWVkICgnLicgaWRlbnRpZmllcik/IGFyZ3VtZW50cz8KICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZU1ldGFkYXRhKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBhdFRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnQCcsIGF0VG9rZW4pKTsKICAgIGxpc3RlbmVyLmJlZ2luTWV0YWRhdGEoYXRUb2tlbik7CiAgICB0b2tlbiA9IGVuc3VyZUlkZW50aWZpZXIoYXRUb2tlbiwgSWRlbnRpZmllckNvbnRleHQubWV0YWRhdGFSZWZlcmVuY2UpOwogICAgdG9rZW4gPQogICAgICAgIHBhcnNlUXVhbGlmaWVkUmVzdE9wdCh0b2tlbiwgSWRlbnRpZmllckNvbnRleHQubWV0YWRhdGFDb250aW51YXRpb24pOwogICAgaWYgKG9wdGlvbmFsKCI8IiwgdG9rZW4ubmV4dCkpIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0b2tlbi5uZXh0LCBmYXN0YS5tZXNzYWdlTWV0YWRhdGFUeXBlQXJndW1lbnRzKTsKICAgIH0KICAgIHRva2VuID0gY29tcHV0ZVR5cGVQYXJhbU9yQXJnKHRva2VuKS5wYXJzZUFyZ3VtZW50cyh0b2tlbiwgdGhpcyk7CiAgICBUb2tlbiBwZXJpb2QgPSBudWxsOwogICAgaWYgKG9wdGlvbmFsKCcuJywgdG9rZW4ubmV4dCkpIHsKICAgICAgcGVyaW9kID0gdG9rZW4ubmV4dDsKICAgICAgdG9rZW4gPSBlbnN1cmVJZGVudGlmaWVyKAogICAgICAgICAgcGVyaW9kLCBJZGVudGlmaWVyQ29udGV4dC5tZXRhZGF0YUNvbnRpbnVhdGlvbkFmdGVyVHlwZUFyZ3VtZW50cyk7CiAgICB9CiAgICB0b2tlbiA9IHBhcnNlQXJndW1lbnRzT3B0KHRva2VuKTsKICAgIGxpc3RlbmVyLmVuZE1ldGFkYXRhKGF0VG9rZW4sIHBlcmlvZCwgdG9rZW4ubmV4dCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIHNjcmlwdFRhZzoKICAvLy8gICAnIyEnICjLnE5FV0xJTkUpKiBORVdMSU5FCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VTY3JpcHQoVG9rZW4gdG9rZW4pIHsKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGljYWwodG9rZW4udHlwZSwgVG9rZW5UeXBlLlNDUklQVF9UQUcpKTsKICAgIGxpc3RlbmVyLmhhbmRsZVNjcmlwdCh0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIHR5cGVBbGlhczoKICAvLy8gICBtZXRhZGF0YSAndHlwZWRlZicgdHlwZUFsaWFzQm9keSB8CiAgLy8vICAgbWV0YWRhdGEgJ3R5cGVkZWYnIGlkZW50aWZpZXIgdHlwZVBhcmFtZXRlcnM/ICc9JyBmdW5jdGlvblR5cGUgJzsnCiAgLy8vIDsKICAvLy8KICAvLy8gZnVuY3Rpb25UeXBlOgogIC8vLyAgIHJldHVyblR5cGU/ICdGdW5jdGlvbicgdHlwZVBhcmFtZXRlcnM/IHBhcmFtZXRlclR5cGVMaXN0CiAgLy8vCiAgLy8vIHR5cGVBbGlhc0JvZHk6CiAgLy8vICAgZnVuY3Rpb25UeXBlQWxpYXMKICAvLy8gOwogIC8vLwogIC8vLyBmdW5jdGlvblR5cGVBbGlhczoKICAvLy8gICBmdW5jdGlvblByZWZpeCB0eXBlUGFyYW1ldGVycz8gZm9ybWFsUGFyYW1ldGVyTGlzdCDigJg74oCZCiAgLy8vIDsKICAvLy8KICAvLy8gZnVuY3Rpb25QcmVmaXg6CiAgLy8vICAgcmV0dXJuVHlwZT8gaWRlbnRpZmllcgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlVHlwZWRlZihUb2tlbiB0eXBlZGVmS2V5d29yZCkgewogICAgYXNzZXJ0KG9wdGlvbmFsKCd0eXBlZGVmJywgdHlwZWRlZktleXdvcmQpKTsKICAgIGxpc3RlbmVyLmJlZ2luRnVuY3Rpb25UeXBlQWxpYXModHlwZWRlZktleXdvcmQpOwogICAgVHlwZUluZm8gdHlwZUluZm8gPSBjb21wdXRlVHlwZSh0eXBlZGVmS2V5d29yZCwgZmFsc2UpOwogICAgVG9rZW4gdG9rZW4gPSB0eXBlSW5mby5za2lwVHlwZSh0eXBlZGVmS2V5d29yZCkubmV4dDsKICAgIFRva2VuIGVxdWFsczsKICAgIFR5cGVQYXJhbU9yQXJnSW5mbyB0eXBlUGFyYW0gPSBjb21wdXRlVHlwZVBhcmFtT3JBcmcodG9rZW4sIHRydWUpOwogICAgaWYgKHR5cGVJbmZvID09IG5vVHlwZSAmJgogICAgICAgICh0b2tlbi5raW5kID09IElERU5USUZJRVJfVE9LRU4gfHwgdG9rZW4udHlwZS5pc1BzZXVkbykgJiYKICAgICAgICBvcHRpb25hbCgnPScsIHR5cGVQYXJhbS5za2lwKHRva2VuKS5uZXh0KSkgewogICAgICBsaXN0ZW5lci5oYW5kbGVJZGVudGlmaWVyKHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC50eXBlZGVmRGVjbGFyYXRpb24pOwogICAgICBlcXVhbHMgPSB0eXBlUGFyYW0ucGFyc2VWYXJpYWJsZXModG9rZW4sIHRoaXMpLm5leHQ7CiAgICAgIGFzc2VydChvcHRpb25hbCgnPScsIGVxdWFscykpOwogICAgICB0b2tlbiA9IGNvbXB1dGVUeXBlKGVxdWFscywgdHJ1ZSkuZW5zdXJlVHlwZU9yVm9pZChlcXVhbHMsIHRoaXMpOwogICAgfSBlbHNlIHsKICAgICAgdG9rZW4gPSB0eXBlSW5mby5wYXJzZVR5cGUodHlwZWRlZktleXdvcmQsIHRoaXMpOwogICAgICB0b2tlbiA9IGVuc3VyZUlkZW50aWZpZXIodG9rZW4sIElkZW50aWZpZXJDb250ZXh0LnR5cGVkZWZEZWNsYXJhdGlvbik7CiAgICAgIHRva2VuID0gdHlwZVBhcmFtLnBhcnNlVmFyaWFibGVzKHRva2VuLCB0aGlzKTsKICAgICAgdG9rZW4gPQogICAgICAgICAgcGFyc2VGb3JtYWxQYXJhbWV0ZXJzUmVxdWlyZWRPcHQodG9rZW4sIE1lbWJlcktpbmQuRnVuY3Rpb25UeXBlQWxpYXMpOwogICAgfQogICAgdG9rZW4gPSBlbnN1cmVTZW1pY29sb24odG9rZW4pOwogICAgbGlzdGVuZXIuZW5kRnVuY3Rpb25UeXBlQWxpYXModHlwZWRlZktleXdvcmQsIGVxdWFscywgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIFBhcnNlIGEgbWl4aW4gYXBwbGljYXRpb24gc3RhcnRpbmcgZnJvbSBgd2l0aGAuIEFzc3VtZXMgdGhhdCB0aGUgZmlyc3QKICAvLy8gdHlwZSBoYXMgYWxyZWFkeSBiZWVuIHBhcnNlZC4KICBUb2tlbiBwYXJzZU1peGluQXBwbGljYXRpb25SZXN0KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiB3aXRoS2V5d29yZCA9IHRva2VuLm5leHQ7CiAgICBpZiAoIW9wdGlvbmFsKCd3aXRoJywgd2l0aEtleXdvcmQpKSB7CiAgICAgIC8vIFJlY292ZXJ5OiBSZXBvcnQgYW4gZXJyb3IgYW5kIGluc2VydCBzeW50aGV0aWMgYHdpdGhgIGNsYXVzZS4KICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgIHdpdGhLZXl3b3JkLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJ3dpdGgnKSk7CiAgICAgIHdpdGhLZXl3b3JkID0gcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljS2V5d29yZCh0b2tlbiwgS2V5d29yZC5XSVRIKTsKICAgICAgaWYgKCFpc1ZhbGlkVHlwZVJlZmVyZW5jZSh3aXRoS2V5d29yZC5uZXh0KSkgewogICAgICAgIHJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIod2l0aEtleXdvcmQpOwogICAgICB9CiAgICB9CiAgICB0b2tlbiA9IHBhcnNlVHlwZUxpc3Qod2l0aEtleXdvcmQpOwogICAgbGlzdGVuZXIuaGFuZGxlTmFtZWRNaXhpbkFwcGxpY2F0aW9uV2l0aENsYXVzZSh3aXRoS2V5d29yZCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZVdpdGhDbGF1c2VPcHQoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIHdpdGhLZXl3b3JkID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgnd2l0aCcsIHdpdGhLZXl3b3JkKSkgewogICAgICB0b2tlbiA9IHBhcnNlVHlwZUxpc3Qod2l0aEtleXdvcmQpOwogICAgICBsaXN0ZW5lci5oYW5kbGVDbGFzc1dpdGhDbGF1c2Uod2l0aEtleXdvcmQpOwogICAgfSBlbHNlIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlQ2xhc3NOb1dpdGhDbGF1c2UoKTsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBQYXJzZSB0aGUgZm9ybWFsIHBhcmFtZXRlcnMgb2YgYSBnZXR0ZXIgKHdoaWNoIHNob3VsZG4ndCBoYXZlIHBhcmFtZXRlcnMpCiAgLy8vIG9yIGZ1bmN0aW9uIG9yIG1ldGhvZC4KICBUb2tlbiBwYXJzZUdldHRlck9yRm9ybWFsUGFyYW1ldGVycygKICAgICAgVG9rZW4gdG9rZW4sIFRva2VuIG5hbWUsIGJvb2wgaXNHZXR0ZXIsIE1lbWJlcktpbmQga2luZCkgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAob3B0aW9uYWwoIigiLCBuZXh0KSkgewogICAgICBpZiAoaXNHZXR0ZXIpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VHZXR0ZXJXaXRoRm9ybWFscyk7CiAgICAgIH0KICAgICAgdG9rZW4gPSBwYXJzZUZvcm1hbFBhcmFtZXRlcnModG9rZW4sIGtpbmQpOwogICAgfSBlbHNlIGlmIChpc0dldHRlcikgewogICAgICBsaXN0ZW5lci5oYW5kbGVOb0Zvcm1hbFBhcmFtZXRlcnMobmV4dCwga2luZCk7CiAgICB9IGVsc2UgewogICAgICAvLyBSZWNvdmVyeQogICAgICBpZiAob3B0aW9uYWwoJ29wZXJhdG9yJywgbmFtZSkpIHsKICAgICAgICBUb2tlbiBuZXh0ID0gbmFtZS5uZXh0OwogICAgICAgIGlmIChuZXh0LmlzT3BlcmF0b3IpIHsKICAgICAgICAgIG5hbWUgPSBuZXh0OwogICAgICAgIH0gZWxzZSBpZiAoaXNVbmFyeU1pbnVzKG5leHQpKSB7CiAgICAgICAgICBuYW1lID0gbmV4dC5uZXh0OwogICAgICAgIH0KICAgICAgfQogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5hbWUsIG1pc3NpbmdQYXJhbWV0ZXJNZXNzYWdlKGtpbmQpKTsKICAgICAgdG9rZW4gPSByZXdyaXRlci5pbnNlcnRQYXJlbnModG9rZW4sIGZhbHNlKTsKICAgICAgdG9rZW4gPSBwYXJzZUZvcm1hbFBhcmFtZXRlcnNSZXN0KHRva2VuLCBraW5kKTsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlRm9ybWFsUGFyYW1ldGVyc09wdChUb2tlbiB0b2tlbiwgTWVtYmVyS2luZCBraW5kKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgnKCcsIG5leHQpKSB7CiAgICAgIHRva2VuID0gcGFyc2VGb3JtYWxQYXJhbWV0ZXJzKHRva2VuLCBraW5kKTsKICAgIH0gZWxzZSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU5vRm9ybWFsUGFyYW1ldGVycyhuZXh0LCBraW5kKTsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHNraXBGb3JtYWxQYXJhbWV0ZXJzKFRva2VuIHRva2VuLCBNZW1iZXJLaW5kIGtpbmQpIHsKICAgIHJldHVybiBza2lwRm9ybWFsUGFyYW1ldGVyc1Jlc3QodG9rZW4ubmV4dCwga2luZCk7CiAgfQoKICBUb2tlbiBza2lwRm9ybWFsUGFyYW1ldGVyc1Jlc3QoVG9rZW4gdG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgYXNzZXJ0KG9wdGlvbmFsKCcoJywgdG9rZW4pKTsKICAgIC8vIFRPRE8oYWhlKTogU2hvdWxkbid0IHRoaXMgYmUgYGJlZ2luRm9ybWFsUGFyYW1ldGVyc2A/CiAgICBsaXN0ZW5lci5iZWdpbk9wdGlvbmFsRm9ybWFsUGFyYW1ldGVycyh0b2tlbik7CiAgICBUb2tlbiBjbG9zZUJyYWNlID0gdG9rZW4uZW5kR3JvdXA7CiAgICBhc3NlcnQob3B0aW9uYWwoJyknLCBjbG9zZUJyYWNlKSk7CiAgICBsaXN0ZW5lci5lbmRGb3JtYWxQYXJhbWV0ZXJzKDAsIHRva2VuLCBjbG9zZUJyYWNlLCBraW5kKTsKICAgIHJldHVybiBjbG9zZUJyYWNlOwogIH0KCiAgLy8vIFBhcnNlcyB0aGUgZm9ybWFsIHBhcmFtZXRlciBsaXN0IG9mIGEgZnVuY3Rpb24uCiAgLy8vCiAgLy8vIElmIGBraW5kID09IE1lbWJlcktpbmQuR2VuZXJhbGl6ZWRGdW5jdGlvblR5cGVgLCB0aGVuIG5hbWVzIG1heSBiZQogIC8vLyBvbWl0dGVkIChleGNlcHQgZm9yIG5hbWVkIGFyZ3VtZW50cykuIE90aGVyd2lzZSwgdHlwZXMgbWF5IGJlIG9taXR0ZWQuCiAgVG9rZW4gcGFyc2VGb3JtYWxQYXJhbWV0ZXJzUmVxdWlyZWRPcHQoVG9rZW4gdG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAoIW9wdGlvbmFsKCcoJywgbmV4dCkpIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBtaXNzaW5nUGFyYW1ldGVyTWVzc2FnZShraW5kKSk7CiAgICAgIG5leHQgPSByZXdyaXRlci5pbnNlcnRQYXJlbnModG9rZW4sIGZhbHNlKTsKICAgIH0KICAgIHJldHVybiBwYXJzZUZvcm1hbFBhcmFtZXRlcnNSZXN0KG5leHQsIGtpbmQpOwogIH0KCiAgLy8vIFBhcnNlcyB0aGUgZm9ybWFsIHBhcmFtZXRlciBsaXN0IG9mIGEgZnVuY3Rpb24gZ2l2ZW4gdGhhdCB0aGUgbGVmdAogIC8vLyBwYXJlbnRoZXNpcyBpcyBrbm93biB0byBleGlzdC4KICAvLy8KICAvLy8gSWYgYGtpbmQgPT0gTWVtYmVyS2luZC5HZW5lcmFsaXplZEZ1bmN0aW9uVHlwZWAsIHRoZW4gbmFtZXMgbWF5IGJlCiAgLy8vIG9taXR0ZWQgKGV4Y2VwdCBmb3IgbmFtZWQgYXJndW1lbnRzKS4gT3RoZXJ3aXNlLCB0eXBlcyBtYXkgYmUgb21pdHRlZC4KICBUb2tlbiBwYXJzZUZvcm1hbFBhcmFtZXRlcnMoVG9rZW4gdG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgcmV0dXJuIHBhcnNlRm9ybWFsUGFyYW1ldGVyc1Jlc3QodG9rZW4ubmV4dCwga2luZCk7CiAgfQoKICAvLy8gUGFyc2VzIHRoZSBmb3JtYWwgcGFyYW1ldGVyIGxpc3Qgb2YgYSBmdW5jdGlvbiBnaXZlbiB0aGF0IHRoZSBsZWZ0CiAgLy8vIHBhcmVudGhlc2lzIHBhc3NlZCBpbiBhcyBbdG9rZW5dLgogIC8vLwogIC8vLyBJZiBga2luZCA9PSBNZW1iZXJLaW5kLkdlbmVyYWxpemVkRnVuY3Rpb25UeXBlYCwgdGhlbiBuYW1lcyBtYXkgYmUKICAvLy8gb21pdHRlZCAoZXhjZXB0IGZvciBuYW1lZCBhcmd1bWVudHMpLiBPdGhlcndpc2UsIHR5cGVzIG1heSBiZSBvbWl0dGVkLgogIFRva2VuIHBhcnNlRm9ybWFsUGFyYW1ldGVyc1Jlc3QoVG9rZW4gdG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgVG9rZW4gYmVnaW4gPSB0b2tlbjsKICAgIGFzc2VydChvcHRpb25hbCgnKCcsIHRva2VuKSk7CiAgICBsaXN0ZW5lci5iZWdpbkZvcm1hbFBhcmFtZXRlcnMoYmVnaW4sIGtpbmQpOwogICAgaW50IHBhcmFtZXRlckNvdW50ID0gMDsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBpZiAob3B0aW9uYWwoJyknLCBuZXh0KSkgewogICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICArK3BhcmFtZXRlckNvdW50OwogICAgICBTdHJpbmcgdmFsdWUgPSBuZXh0LnN0cmluZ1ZhbHVlOwogICAgICBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnWycpKSB7CiAgICAgICAgdG9rZW4gPSBwYXJzZU9wdGlvbmFsUG9zaXRpb25hbFBhcmFtZXRlcnModG9rZW4sIGtpbmQpOwogICAgICAgIHRva2VuID0gZW5zdXJlQ2xvc2VQYXJlbih0b2tlbiwgYmVnaW4pOwogICAgICAgIGJyZWFrOwogICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ3snKSkgewogICAgICAgIHRva2VuID0gcGFyc2VPcHRpb25hbE5hbWVkUGFyYW1ldGVycyh0b2tlbiwga2luZCk7CiAgICAgICAgdG9rZW4gPSBlbnN1cmVDbG9zZVBhcmVuKHRva2VuLCBiZWdpbik7CiAgICAgICAgYnJlYWs7CiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnW10nKSkgewogICAgICAgIC8vIFJlY292ZXJ5CiAgICAgICAgdG9rZW4gPSByZXdyaXRlU3F1YXJlQnJhY2tldHModG9rZW4pOwogICAgICAgIHRva2VuID0gcGFyc2VPcHRpb25hbFBvc2l0aW9uYWxQYXJhbWV0ZXJzKHRva2VuLCBraW5kKTsKICAgICAgICB0b2tlbiA9IGVuc3VyZUNsb3NlUGFyZW4odG9rZW4sIGJlZ2luKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICB0b2tlbiA9IHBhcnNlRm9ybWFsUGFyYW1ldGVyKHRva2VuLCBGb3JtYWxQYXJhbWV0ZXJLaW5kLm1hbmRhdG9yeSwga2luZCk7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBpZiAoIW9wdGlvbmFsKCcsJywgbmV4dCkpIHsKICAgICAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICBpZiAob3B0aW9uYWwoJyknLCBuZXh0KSkgewogICAgICAgICAgdG9rZW4gPSBuZXh0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgICAgaWYgKGJlZ2luLmVuZEdyb3VwLmlzU3ludGhldGljKSB7CiAgICAgICAgICAgIC8vIFNjYW5uZXIgaGFzIGFscmVhZHkgcmVwb3J0ZWQgYSBtaXNzaW5nIGApYCBlcnJvciwKICAgICAgICAgICAgLy8gYnV0IHBsYWNlZCB0aGUgYClgIGluIHRoZSB3cm9uZyBsb2NhdGlvbiwgc28gbW92ZSBpdC4KICAgICAgICAgICAgdG9rZW4gPSByZXdyaXRlci5tb3ZlU3ludGhldGljKHRva2VuLCBiZWdpbi5lbmRHcm91cCk7CiAgICAgICAgICB9IGVsc2UgaWYgKG5leHQua2luZCA9PSBJREVOVElGSUVSX1RPS0VOICYmCiAgICAgICAgICAgICAgbmV4dC5uZXh0LmtpbmQgPT0gSURFTlRJRklFUl9UT0tFTikgewogICAgICAgICAgICAvLyBMb29rcyBsaWtlIGEgbWlzc2luZyBjb21tYQogICAgICAgICAgICB0b2tlbiA9IHJld3JpdGVBbmRSZWNvdmVyKAogICAgICAgICAgICAgICAgdG9rZW4sCiAgICAgICAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJywnKSwKICAgICAgICAgICAgICAgIG5ldyBTeW50aGV0aWNUb2tlbihUb2tlblR5cGUuQ09NTUEsIG5leHQuY2hhck9mZnNldCkpOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRva2VuID0gZW5zdXJlQ2xvc2VQYXJlbih0b2tlbiwgYmVnaW4pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgfQogICAgICB0b2tlbiA9IG5leHQ7CiAgICB9CiAgICBhc3NlcnQob3B0aW9uYWwoJyknLCB0b2tlbikpOwogICAgbGlzdGVuZXIuZW5kRm9ybWFsUGFyYW1ldGVycyhwYXJhbWV0ZXJDb3VudCwgYmVnaW4sIHRva2VuLCBraW5kKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBSZXR1cm4gdGhlIG1lc3NhZ2UgdGhhdCBzaG91bGQgYmUgcHJvZHVjZWQgd2hlbiB0aGUgZm9ybWFsIHBhcmFtZXRlcnMgYXJlCiAgLy8vIG1pc3NpbmcuCiAgTWVzc2FnZSBtaXNzaW5nUGFyYW1ldGVyTWVzc2FnZShNZW1iZXJLaW5kIGtpbmQpIHsKICAgIGlmIChraW5kID09IE1lbWJlcktpbmQuRnVuY3Rpb25UeXBlQWxpYXMpIHsKICAgICAgcmV0dXJuIGZhc3RhLm1lc3NhZ2VNaXNzaW5nVHlwZWRlZlBhcmFtZXRlcnM7CiAgICB9IGVsc2UgaWYgKGtpbmQgPT0gTWVtYmVyS2luZC5Ob25TdGF0aWNNZXRob2QgfHwKICAgICAgICBraW5kID09IE1lbWJlcktpbmQuU3RhdGljTWV0aG9kKSB7CiAgICAgIHJldHVybiBmYXN0YS5tZXNzYWdlTWlzc2luZ01ldGhvZFBhcmFtZXRlcnM7CiAgICB9CiAgICByZXR1cm4gZmFzdGEubWVzc2FnZU1pc3NpbmdGdW5jdGlvblBhcmFtZXRlcnM7CiAgfQoKICAvLy8gYGBgCiAgLy8vIG5vcm1hbEZvcm1hbFBhcmFtZXRlcjoKICAvLy8gICBmdW5jdGlvbkZvcm1hbFBhcmFtZXRlciB8CiAgLy8vICAgZmllbGRGb3JtYWxQYXJhbWV0ZXIgfAogIC8vLyAgIHNpbXBsZUZvcm1hbFBhcmFtZXRlcgogIC8vLyA7CiAgLy8vCiAgLy8vIGZ1bmN0aW9uRm9ybWFsUGFyYW1ldGVyOgogIC8vLyAgIG1ldGFkYXRhICdjb3ZhcmlhbnQnPyByZXR1cm5UeXBlPyBpZGVudGlmaWVyIGZvcm1hbFBhcmFtZXRlckxpc3QKICAvLy8gOwogIC8vLwogIC8vLyBzaW1wbGVGb3JtYWxQYXJhbWV0ZXI6CiAgLy8vICAgbWV0YWRhdGEgJ2NvdmFyaWFudCc/IGZpbmFsQ29uc3RWYXJPclR5cGU/IGlkZW50aWZpZXIgfAogIC8vLyA7CiAgLy8vCiAgLy8vIGZpZWxkRm9ybWFsUGFyYW1ldGVyOgogIC8vLyAgIG1ldGFkYXRhIGZpbmFsQ29uc3RWYXJPclR5cGU/ICd0aGlzJyAnLicgaWRlbnRpZmllciBmb3JtYWxQYXJhbWV0ZXJMaXN0PwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlRm9ybWFsUGFyYW1ldGVyKAogICAgICBUb2tlbiB0b2tlbiwgRm9ybWFsUGFyYW1ldGVyS2luZCBwYXJhbWV0ZXJLaW5kLCBNZW1iZXJLaW5kIG1lbWJlcktpbmQpIHsKICAgIGFzc2VydChwYXJhbWV0ZXJLaW5kICE9IG51bGwpOwogICAgdG9rZW4gPSBwYXJzZU1ldGFkYXRhU3Rhcih0b2tlbik7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIFRva2VuIHN0YXJ0ID0gbmV4dDsKCiAgICBmaW5hbCBib29sIGluRnVuY3Rpb25UeXBlID0KICAgICAgICBtZW1iZXJLaW5kID09IE1lbWJlcktpbmQuR2VuZXJhbGl6ZWRGdW5jdGlvblR5cGU7CgogICAgVG9rZW4gcmVxdWlyZWRUb2tlbjsKICAgIFRva2VuIGNvdmFyaWFudFRva2VuOwogICAgVG9rZW4gdmFyRmluYWxPckNvbnN0OwogICAgaWYgKGlzTW9kaWZpZXIobmV4dCkpIHsKICAgICAgaWYgKG9wdGlvbmFsKCdyZXF1aXJlZCcsIG5leHQpKSB7CiAgICAgICAgaWYgKHBhcmFtZXRlcktpbmQgPT0gRm9ybWFsUGFyYW1ldGVyS2luZC5vcHRpb25hbE5hbWVkKSB7CiAgICAgICAgICByZXF1aXJlZFRva2VuID0gdG9rZW4gPSBuZXh0OwogICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAoaXNNb2RpZmllcihuZXh0KSkgewogICAgICAgIGlmIChvcHRpb25hbCgnY292YXJpYW50JywgbmV4dCkpIHsKICAgICAgICAgIGlmIChtZW1iZXJLaW5kICE9IE1lbWJlcktpbmQuU3RhdGljTWV0aG9kICYmCiAgICAgICAgICAgICAgbWVtYmVyS2luZCAhPSBNZW1iZXJLaW5kLlRvcExldmVsTWV0aG9kKSB7CiAgICAgICAgICAgIGNvdmFyaWFudFRva2VuID0gdG9rZW4gPSBuZXh0OwogICAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChpc01vZGlmaWVyKG5leHQpKSB7CiAgICAgICAgICBpZiAoIWluRnVuY3Rpb25UeXBlKSB7CiAgICAgICAgICAgIGlmIChvcHRpb25hbCgndmFyJywgbmV4dCkpIHsKICAgICAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QgPSB0b2tlbiA9IG5leHQ7CiAgICAgICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ2ZpbmFsJywgbmV4dCkpIHsKICAgICAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QgPSB0b2tlbiA9IG5leHQ7CiAgICAgICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoaXNNb2RpZmllcihuZXh0KSkgewogICAgICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgICAgICBNb2RpZmllclJlY292ZXJ5Q29udGV4dCBjb250ZXh0ID0gbmV3IE1vZGlmaWVyUmVjb3ZlcnlDb250ZXh0KHRoaXMpCiAgICAgICAgICAgICAgLi5jb3ZhcmlhbnRUb2tlbiA9IGNvdmFyaWFudFRva2VuCiAgICAgICAgICAgICAgLi5yZXF1aXJlZFRva2VuID0gcmVxdWlyZWRUb2tlbgogICAgICAgICAgICAgIC4udmFyRmluYWxPckNvbnN0ID0gdmFyRmluYWxPckNvbnN0OwoKICAgICAgICAgICAgdG9rZW4gPSBjb250ZXh0LnBhcnNlRm9ybWFsUGFyYW1ldGVyTW9kaWZpZXJzKAogICAgICAgICAgICAgICAgdG9rZW4sIHBhcmFtZXRlcktpbmQsIG1lbWJlcktpbmQpOwogICAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKCiAgICAgICAgICAgIGNvdmFyaWFudFRva2VuID0gY29udGV4dC5jb3ZhcmlhbnRUb2tlbjsKICAgICAgICAgICAgcmVxdWlyZWRUb2tlbiA9IGNvbnRleHQucmVxdWlyZWRUb2tlbjsKICAgICAgICAgICAgdmFyRmluYWxPckNvbnN0ID0gY29udGV4dC52YXJGaW5hbE9yQ29uc3Q7CgogICAgICAgICAgICBjb250ZXh0ID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBsaXN0ZW5lci5iZWdpbkZvcm1hbFBhcmFtZXRlcigKICAgICAgICBzdGFydCwgbWVtYmVyS2luZCwgcmVxdWlyZWRUb2tlbiwgY292YXJpYW50VG9rZW4sIHZhckZpbmFsT3JDb25zdCk7CgogICAgLy8gVHlwZSBpcyByZXF1aXJlZCBpbiBhIGdlbmVyYWxpemVkIGZ1bmN0aW9uIHR5cGUsIGJ1dCBvcHRpb25hbCBvdGhlcndpc2UuCiAgICBmaW5hbCBUb2tlbiBiZWZvcmVUeXBlID0gdG9rZW47CiAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IGNvbXB1dGVUeXBlKHRva2VuLCBpbkZ1bmN0aW9uVHlwZSk7CiAgICB0b2tlbiA9IHR5cGVJbmZvLnNraXBUeXBlKHRva2VuKTsKICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKHR5cGVJbmZvID09IG5vVHlwZSAmJgogICAgICAgIChvcHRpb25hbCgnLicsIG5leHQpIHx8CiAgICAgICAgICAgIChuZXh0LmlzSWRlbnRpZmllciAmJiBvcHRpb25hbCgnLicsIG5leHQubmV4dCkpKSkgewogICAgICAvLyBSZWNvdmVyeTogTWFsZm9ybWVkIHR5cGUgcmVmZXJlbmNlLgogICAgICB0eXBlSW5mbyA9IGNvbXB1dGVUeXBlKGJlZm9yZVR5cGUsIHRydWUpOwogICAgICB0b2tlbiA9IHR5cGVJbmZvLnNraXBUeXBlKGJlZm9yZVR5cGUpOwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIH0KCiAgICBmaW5hbCBib29sIGlzTmFtZWRQYXJhbWV0ZXIgPQogICAgICAgIHBhcmFtZXRlcktpbmQgPT0gRm9ybWFsUGFyYW1ldGVyS2luZC5vcHRpb25hbE5hbWVkOwoKICAgIFRva2VuIHRoaXNLZXl3b3JkOwogICAgVG9rZW4gcGVyaW9kQWZ0ZXJUaGlzOwogICAgSWRlbnRpZmllckNvbnRleHQgbmFtZUNvbnRleHQgPQogICAgICAgIElkZW50aWZpZXJDb250ZXh0LmZvcm1hbFBhcmFtZXRlckRlY2xhcmF0aW9uOwoKICAgIGlmICghaW5GdW5jdGlvblR5cGUgJiYgb3B0aW9uYWwoJ3RoaXMnLCBuZXh0KSkgewogICAgICB0aGlzS2V5d29yZCA9IHRva2VuID0gbmV4dDsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIGlmICghb3B0aW9uYWwoJy4nLCBuZXh0KSkgewogICAgICAgIC8vIFJlY292ZXIgZnJvbSBhIG1pc3NpbmcgcGVyaW9kIGJ5IGluc2VydGluZyBvbmUuCiAgICAgICAgbmV4dCA9IHJld3JpdGVBbmRSZWNvdmVyKAogICAgICAgICAgICB0b2tlbiwKICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCcuJyksCiAgICAgICAgICAgIG5ldyBTeW50aGV0aWNUb2tlbihUb2tlblR5cGUuUEVSSU9ELCBuZXh0LmNoYXJPZmZzZXQpKTsKICAgICAgfQogICAgICBwZXJpb2RBZnRlclRoaXMgPSB0b2tlbiA9IG5leHQ7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBuYW1lQ29udGV4dCA9IElkZW50aWZpZXJDb250ZXh0LmZpZWxkSW5pdGlhbGl6ZXI7CiAgICB9CgogICAgaWYgKG5leHQuaXNJZGVudGlmaWVyKSB7CiAgICAgIHRva2VuID0gbmV4dDsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICB9CiAgICBUb2tlbiBiZWZvcmVJbmxpbmVGdW5jdGlvblR5cGU7CiAgICBUeXBlUGFyYW1PckFyZ0luZm8gdHlwZVBhcmFtID0gbm9UeXBlUGFyYW1PckFyZzsKICAgIGlmIChvcHRpb25hbCgiPCIsIG5leHQpKSB7CiAgICAgIHR5cGVQYXJhbSA9IGNvbXB1dGVUeXBlUGFyYW1PckFyZyh0b2tlbik7CiAgICAgIGlmICh0eXBlUGFyYW0gIT0gbm9UeXBlUGFyYW1PckFyZykgewogICAgICAgIFRva2VuIGNsb3NlciA9IHR5cGVQYXJhbS5za2lwKHRva2VuKTsKICAgICAgICBpZiAob3B0aW9uYWwoIigiLCBjbG9zZXIubmV4dCkpIHsKICAgICAgICAgIGlmICh2YXJGaW5hbE9yQ29uc3QgIT0gbnVsbCkgewogICAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICAgICAgdmFyRmluYWxPckNvbnN0LCBmYXN0YS5tZXNzYWdlRnVuY3Rpb25UeXBlZFBhcmFtZXRlclZhcik7CiAgICAgICAgICB9CiAgICAgICAgICBiZWZvcmVJbmxpbmVGdW5jdGlvblR5cGUgPSB0b2tlbjsKICAgICAgICAgIHRva2VuID0gY2xvc2VyLm5leHQuZW5kR3JvdXA7CiAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoIigiLCBuZXh0KSkgewogICAgICBpZiAodmFyRmluYWxPckNvbnN0ICE9IG51bGwpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QsIGZhc3RhLm1lc3NhZ2VGdW5jdGlvblR5cGVkUGFyYW1ldGVyVmFyKTsKICAgICAgfQogICAgICBiZWZvcmVJbmxpbmVGdW5jdGlvblR5cGUgPSB0b2tlbjsKICAgICAgdG9rZW4gPSBuZXh0LmVuZEdyb3VwOwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIH0KICAgIGlmICh0eXBlSW5mbyAhPSBub1R5cGUgJiYKICAgICAgICB2YXJGaW5hbE9yQ29uc3QgIT0gbnVsbCAmJgogICAgICAgIG9wdGlvbmFsKCd2YXInLCB2YXJGaW5hbE9yQ29uc3QpKSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IodmFyRmluYWxPckNvbnN0LCBmYXN0YS5tZXNzYWdlVHlwZUFmdGVyVmFyKTsKICAgIH0KCiAgICBUb2tlbiBlbmRJbmxpbmVGdW5jdGlvblR5cGU7CiAgICBpZiAoYmVmb3JlSW5saW5lRnVuY3Rpb25UeXBlICE9IG51bGwpIHsKICAgICAgZW5kSW5saW5lRnVuY3Rpb25UeXBlID0KICAgICAgICAgIHR5cGVQYXJhbS5wYXJzZVZhcmlhYmxlcyhiZWZvcmVJbmxpbmVGdW5jdGlvblR5cGUsIHRoaXMpOwogICAgICBsaXN0ZW5lci5iZWdpbkZ1bmN0aW9uVHlwZWRGb3JtYWxQYXJhbWV0ZXIoYmVmb3JlSW5saW5lRnVuY3Rpb25UeXBlLm5leHQpOwogICAgICB0b2tlbiA9IHR5cGVJbmZvLnBhcnNlVHlwZShiZWZvcmVUeXBlLCB0aGlzKTsKICAgICAgZW5kSW5saW5lRnVuY3Rpb25UeXBlID0gcGFyc2VGb3JtYWxQYXJhbWV0ZXJzUmVxdWlyZWRPcHQoCiAgICAgICAgICBlbmRJbmxpbmVGdW5jdGlvblR5cGUsIE1lbWJlcktpbmQuRnVuY3Rpb25UeXBlZFBhcmFtZXRlcik7CiAgICAgIFRva2VuIHF1ZXN0aW9uOwogICAgICBpZiAob3B0aW9uYWwoJz8nLCBlbmRJbmxpbmVGdW5jdGlvblR5cGUubmV4dCkpIHsKICAgICAgICBxdWVzdGlvbiA9IGVuZElubGluZUZ1bmN0aW9uVHlwZSA9IGVuZElubGluZUZ1bmN0aW9uVHlwZS5uZXh0OwogICAgICB9CiAgICAgIGxpc3RlbmVyLmVuZEZ1bmN0aW9uVHlwZWRGb3JtYWxQYXJhbWV0ZXIoCiAgICAgICAgICBiZWZvcmVJbmxpbmVGdW5jdGlvblR5cGUsIHF1ZXN0aW9uKTsKCiAgICAgIC8vIEdlbmVyYWxpemVkIGZ1bmN0aW9uIHR5cGVzIGRvbid0IGFsbG93IGlubGluZSBmdW5jdGlvbiB0eXBlcy4KICAgICAgLy8gVGhlIGZvbGxvd2luZyBpc24ndCBhbGxvd2VkOgogICAgICAvLyAgICBpbnQgRnVuY3Rpb24oaW50IGJhcihTdHJpbmcgeCkpLgogICAgICBpZiAoaW5GdW5jdGlvblR5cGUpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKGJlZm9yZUlubGluZUZ1bmN0aW9uVHlwZS5uZXh0LAogICAgICAgICAgICBmYXN0YS5tZXNzYWdlSW52YWxpZElubGluZUZ1bmN0aW9uVHlwZSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoaW5GdW5jdGlvblR5cGUpIHsKICAgICAgdG9rZW4gPSB0eXBlSW5mby5lbnN1cmVUeXBlT3JWb2lkKGJlZm9yZVR5cGUsIHRoaXMpOwogICAgfSBlbHNlIHsKICAgICAgdG9rZW4gPSB0eXBlSW5mby5wYXJzZVR5cGUoYmVmb3JlVHlwZSwgdGhpcyk7CiAgICB9CgogICAgVG9rZW4gbmFtZVRva2VuOwogICAgaWYgKHBlcmlvZEFmdGVyVGhpcyAhPSBudWxsKSB7CiAgICAgIHRva2VuID0gcGVyaW9kQWZ0ZXJUaGlzOwogICAgfQogICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAoaW5GdW5jdGlvblR5cGUgJiYKICAgICAgICAhaXNOYW1lZFBhcmFtZXRlciAmJgogICAgICAgICFuZXh0LmlzS2V5d29yZE9ySWRlbnRpZmllciAmJgogICAgICAgIGJlZm9yZUlubGluZUZ1bmN0aW9uVHlwZSA9PSBudWxsKSB7CiAgICAgIG5hbWVUb2tlbiA9IHRva2VuLm5leHQ7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU5vTmFtZShuYW1lVG9rZW4pOwogICAgfSBlbHNlIHsKICAgICAgbmFtZVRva2VuID0gdG9rZW4gPSBlbnN1cmVJZGVudGlmaWVyKHRva2VuLCBuYW1lQ29udGV4dCk7CiAgICAgIGlmIChpc05hbWVkUGFyYW1ldGVyICYmIG5hbWVUb2tlbi5sZXhlbWUuc3RhcnRzV2l0aCgiXyIpKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuYW1lVG9rZW4sIGZhc3RhLm1lc3NhZ2VQcml2YXRlTmFtZWRQYXJhbWV0ZXIpOwogICAgICB9CiAgICB9CiAgICBpZiAoZW5kSW5saW5lRnVuY3Rpb25UeXBlICE9IG51bGwpIHsKICAgICAgdG9rZW4gPSBlbmRJbmxpbmVGdW5jdGlvblR5cGU7CiAgICB9CiAgICBuZXh0ID0gdG9rZW4ubmV4dDsKCiAgICBTdHJpbmcgdmFsdWUgPSBuZXh0LnN0cmluZ1ZhbHVlOwogICAgVG9rZW4gaW5pdGlhbGl6ZXJTdGFydCwgaW5pdGlhbGl6ZXJFbmQ7CiAgICBpZiAoKGlkZW50aWNhbCgnPScsIHZhbHVlKSkgfHwgKGlkZW50aWNhbCgnOicsIHZhbHVlKSkpIHsKICAgICAgVG9rZW4gZXF1YWwgPSBuZXh0OwogICAgICBpbml0aWFsaXplclN0YXJ0ID0gZXF1YWwubmV4dDsKICAgICAgbGlzdGVuZXIuYmVnaW5Gb3JtYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVFeHByZXNzaW9uKCk7CiAgICAgIHRva2VuID0gaW5pdGlhbGl6ZXJFbmQgPSBwYXJzZUV4cHJlc3Npb24oZXF1YWwpOwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgbGlzdGVuZXIuZW5kRm9ybWFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlRXhwcmVzc2lvbigpOwogICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogQ29uc2lkZXIgcmVtb3ZpbmcgdGhlIGxhc3QgcGFyYW1ldGVyIGZyb20gdGhlCiAgICAgIC8vIGhhbmRsZVZhbHVlZEZvcm1hbFBhcmFtZXRlciBldmVudC4uLiBpdCBhcHBlYXJzIHRvIGJlIHVudXNlZC4KICAgICAgbGlzdGVuZXIuaGFuZGxlVmFsdWVkRm9ybWFsUGFyYW1ldGVyKGVxdWFsLCBuZXh0KTsKICAgICAgaWYgKGlzTWFuZGF0b3J5Rm9ybWFsUGFyYW1ldGVyS2luZChwYXJhbWV0ZXJLaW5kKSkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgIGVxdWFsLCBmYXN0YS5tZXNzYWdlUmVxdWlyZWRQYXJhbWV0ZXJXaXRoRGVmYXVsdCk7CiAgICAgIH0gZWxzZSBpZiAoaXNPcHRpb25hbFBvc2l0aW9uYWxGb3JtYWxQYXJhbWV0ZXJLaW5kKHBhcmFtZXRlcktpbmQpICYmCiAgICAgICAgICBpZGVudGljYWwoJzonLCB2YWx1ZSkpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICBlcXVhbCwgZmFzdGEubWVzc2FnZVBvc2l0aW9uYWxQYXJhbWV0ZXJXaXRoRXF1YWxzKTsKICAgICAgfSBlbHNlIGlmIChpbkZ1bmN0aW9uVHlwZSB8fAogICAgICAgICAgbWVtYmVyS2luZCA9PSBNZW1iZXJLaW5kLkZ1bmN0aW9uVHlwZUFsaWFzIHx8CiAgICAgICAgICBtZW1iZXJLaW5kID09IE1lbWJlcktpbmQuRnVuY3Rpb25UeXBlZFBhcmFtZXRlcikgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoZXF1YWwsIGZhc3RhLm1lc3NhZ2VGdW5jdGlvblR5cGVEZWZhdWx0VmFsdWUpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBsaXN0ZW5lci5oYW5kbGVGb3JtYWxQYXJhbWV0ZXJXaXRob3V0VmFsdWUobmV4dCk7CiAgICB9CiAgICBsaXN0ZW5lci5lbmRGb3JtYWxQYXJhbWV0ZXIodGhpc0tleXdvcmQsIHBlcmlvZEFmdGVyVGhpcywgbmFtZVRva2VuLAogICAgICAgIGluaXRpYWxpemVyU3RhcnQsIGluaXRpYWxpemVyRW5kLCBwYXJhbWV0ZXJLaW5kLCBtZW1iZXJLaW5kKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gZGVmYXVsdEZvcm1hbFBhcmFtZXRlcjoKICAvLy8gICBub3JtYWxGb3JtYWxQYXJhbWV0ZXIgKCc9JyBleHByZXNzaW9uKT8KICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZU9wdGlvbmFsUG9zaXRpb25hbFBhcmFtZXRlcnMoVG9rZW4gdG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgVG9rZW4gYmVnaW4gPSB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ1snLCB0b2tlbikpOwogICAgbGlzdGVuZXIuYmVnaW5PcHRpb25hbEZvcm1hbFBhcmFtZXRlcnMoYmVnaW4pOwogICAgaW50IHBhcmFtZXRlckNvdW50ID0gMDsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBpZiAob3B0aW9uYWwoJ10nLCBuZXh0KSkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHRva2VuID0gcGFyc2VGb3JtYWxQYXJhbWV0ZXIoCiAgICAgICAgICB0b2tlbiwgRm9ybWFsUGFyYW1ldGVyS2luZC5vcHRpb25hbFBvc2l0aW9uYWwsIGtpbmQpOwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgKytwYXJhbWV0ZXJDb3VudDsKICAgICAgaWYgKCFvcHRpb25hbCgnLCcsIG5leHQpKSB7CiAgICAgICAgaWYgKCFvcHRpb25hbCgnXScsIG5leHQpKSB7CiAgICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJ10nKSk7CiAgICAgICAgICAvLyBTY2FubmVyIGd1YXJhbnRlZXMgYSBjbG9zaW5nIGJyYWNrZXQuCiAgICAgICAgICBuZXh0ID0gYmVnaW4uZW5kR3JvdXA7CiAgICAgICAgICB3aGlsZSAodG9rZW4ubmV4dCAhPSBuZXh0KSB7CiAgICAgICAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgdG9rZW4gPSBuZXh0OwogICAgfQogICAgaWYgKHBhcmFtZXRlckNvdW50ID09IDApIHsKICAgICAgcmV3cml0ZUFuZFJlY292ZXIoCiAgICAgICAgICB0b2tlbiwKICAgICAgICAgIGZhc3RhLm1lc3NhZ2VFbXB0eU9wdGlvbmFsUGFyYW1ldGVyTGlzdCwKICAgICAgICAgIG5ldyBTeW50aGV0aWNTdHJpbmdUb2tlbigKICAgICAgICAgICAgICBUb2tlblR5cGUuSURFTlRJRklFUiwgJycsIHRva2VuLm5leHQuY2hhck9mZnNldCwgMCkpOwogICAgICB0b2tlbiA9IHBhcnNlRm9ybWFsUGFyYW1ldGVyKAogICAgICAgICAgdG9rZW4sIEZvcm1hbFBhcmFtZXRlcktpbmQub3B0aW9uYWxQb3NpdGlvbmFsLCBraW5kKTsKICAgICAgKytwYXJhbWV0ZXJDb3VudDsKICAgIH0KICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnXScsIHRva2VuKSk7CiAgICBsaXN0ZW5lci5lbmRPcHRpb25hbEZvcm1hbFBhcmFtZXRlcnMocGFyYW1ldGVyQ291bnQsIGJlZ2luLCB0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIGRlZmF1bHROYW1lZFBhcmFtZXRlcjoKICAvLy8gICBub3JtYWxGb3JtYWxQYXJhbWV0ZXIgKCc9JyBleHByZXNzaW9uKT8gfAogIC8vLyAgIG5vcm1hbEZvcm1hbFBhcmFtZXRlciAoJzonIGV4cHJlc3Npb24pPwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlT3B0aW9uYWxOYW1lZFBhcmFtZXRlcnMoVG9rZW4gdG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgVG9rZW4gYmVnaW4gPSB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ3snLCB0b2tlbikpOwogICAgbGlzdGVuZXIuYmVnaW5PcHRpb25hbEZvcm1hbFBhcmFtZXRlcnMoYmVnaW4pOwogICAgaW50IHBhcmFtZXRlckNvdW50ID0gMDsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBpZiAob3B0aW9uYWwoJ30nLCBuZXh0KSkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHRva2VuID0KICAgICAgICAgIHBhcnNlRm9ybWFsUGFyYW1ldGVyKHRva2VuLCBGb3JtYWxQYXJhbWV0ZXJLaW5kLm9wdGlvbmFsTmFtZWQsIGtpbmQpOwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgKytwYXJhbWV0ZXJDb3VudDsKICAgICAgaWYgKCFvcHRpb25hbCgnLCcsIG5leHQpKSB7CiAgICAgICAgaWYgKCFvcHRpb25hbCgnfScsIG5leHQpKSB7CiAgICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJ30nKSk7CiAgICAgICAgICAvLyBTY2FubmVyIGd1YXJhbnRlZXMgYSBjbG9zaW5nIGJyYWNrZXQuCiAgICAgICAgICBuZXh0ID0gYmVnaW4uZW5kR3JvdXA7CiAgICAgICAgICB3aGlsZSAodG9rZW4ubmV4dCAhPSBuZXh0KSB7CiAgICAgICAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgdG9rZW4gPSBuZXh0OwogICAgfQogICAgaWYgKHBhcmFtZXRlckNvdW50ID09IDApIHsKICAgICAgcmV3cml0ZUFuZFJlY292ZXIoCiAgICAgICAgICB0b2tlbiwKICAgICAgICAgIGZhc3RhLm1lc3NhZ2VFbXB0eU5hbWVkUGFyYW1ldGVyTGlzdCwKICAgICAgICAgIG5ldyBTeW50aGV0aWNTdHJpbmdUb2tlbigKICAgICAgICAgICAgICBUb2tlblR5cGUuSURFTlRJRklFUiwgJycsIHRva2VuLm5leHQuY2hhck9mZnNldCwgMCkpOwogICAgICB0b2tlbiA9CiAgICAgICAgICBwYXJzZUZvcm1hbFBhcmFtZXRlcih0b2tlbiwgRm9ybWFsUGFyYW1ldGVyS2luZC5vcHRpb25hbE5hbWVkLCBraW5kKTsKICAgICAgKytwYXJhbWV0ZXJDb3VudDsKICAgIH0KICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnfScsIHRva2VuKSk7CiAgICBsaXN0ZW5lci5lbmRPcHRpb25hbEZvcm1hbFBhcmFtZXRlcnMocGFyYW1ldGVyQ291bnQsIGJlZ2luLCB0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIHF1YWxpZmllZDoKICAvLy8gICBpZGVudGlmaWVyIHF1YWxpZmllZFJlc3QqCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VRdWFsaWZpZWQoVG9rZW4gdG9rZW4sIElkZW50aWZpZXJDb250ZXh0IGNvbnRleHQsCiAgICAgIElkZW50aWZpZXJDb250ZXh0IGNvbnRpbnVhdGlvbkNvbnRleHQpIHsKICAgIHRva2VuID0gZW5zdXJlSWRlbnRpZmllcih0b2tlbiwgY29udGV4dCk7CiAgICB3aGlsZSAob3B0aW9uYWwoJy4nLCB0b2tlbi5uZXh0KSkgewogICAgICB0b2tlbiA9IHBhcnNlUXVhbGlmaWVkUmVzdCh0b2tlbiwgY29udGludWF0aW9uQ29udGV4dCk7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIHF1YWxpZmllZFJlc3RPcHQ6CiAgLy8vICAgcXVhbGlmaWVkUmVzdD8KICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZVF1YWxpZmllZFJlc3RPcHQoCiAgICAgIFRva2VuIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dCBjb250aW51YXRpb25Db250ZXh0KSB7CiAgICBpZiAob3B0aW9uYWwoJy4nLCB0b2tlbi5uZXh0KSkgewogICAgICByZXR1cm4gcGFyc2VRdWFsaWZpZWRSZXN0KHRva2VuLCBjb250aW51YXRpb25Db250ZXh0KTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB0b2tlbjsKICAgIH0KICB9CgogIC8vLyBgYGAKICAvLy8gcXVhbGlmaWVkUmVzdDoKICAvLy8gICAnLicgaWRlbnRpZmllcgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlUXVhbGlmaWVkUmVzdChUb2tlbiB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQgY29udGV4dCkgewogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCcuJywgdG9rZW4pKTsKICAgIFRva2VuIHBlcmlvZCA9IHRva2VuOwogICAgdG9rZW4gPSBlbnN1cmVJZGVudGlmaWVyKHRva2VuLCBjb250ZXh0KTsKICAgIGxpc3RlbmVyLmhhbmRsZVF1YWxpZmllZChwZXJpb2QpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gc2tpcEJsb2NrKFRva2VuIHRva2VuKSB7CiAgICAvLyBUaGUgc2Nhbm5lciBlbnN1cmVzIHRoYXQgYHtgIGFsd2F5cyBoYXMgYSBjbG9zaW5nIGB9YC4KICAgIHJldHVybiBlbnN1cmVCbG9jayh0b2tlbiwgbnVsbCwgbnVsbCkuZW5kR3JvdXA7CiAgfQoKICAvLy8gYGBgCiAgLy8vIGVudW1UeXBlOgogIC8vLyAgIG1ldGFkYXRhICdlbnVtJyBpZCAneycgbWV0YWRhdGEgaWQgWycsJyBtZXRhZGF0YSBpZF0qIFsnLCddICd9JwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlRW51bShUb2tlbiBlbnVtS2V5d29yZCkgewogICAgYXNzZXJ0KG9wdGlvbmFsKCdlbnVtJywgZW51bUtleXdvcmQpKTsKICAgIGxpc3RlbmVyLmJlZ2luRW51bShlbnVtS2V5d29yZCk7CiAgICBUb2tlbiB0b2tlbiA9CiAgICAgICAgZW5zdXJlSWRlbnRpZmllcihlbnVtS2V5d29yZCwgSWRlbnRpZmllckNvbnRleHQuZW51bURlY2xhcmF0aW9uKTsKICAgIFRva2VuIGxlZnRCcmFjZSA9IHRva2VuLm5leHQ7CiAgICBpbnQgY291bnQgPSAwOwogICAgaWYgKG9wdGlvbmFsKCd7JywgbGVmdEJyYWNlKSkgewogICAgICB0b2tlbiA9IGxlZnRCcmFjZTsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICBpZiAob3B0aW9uYWwoJ30nLCBuZXh0KSkgewogICAgICAgICAgdG9rZW4gPSBuZXh0OwogICAgICAgICAgaWYgKGNvdW50ID09IDApIHsKICAgICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0b2tlbiwgZmFzdGEubWVzc2FnZUVudW1EZWNsYXJhdGlvbkVtcHR5KTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICB0b2tlbiA9IHBhcnNlTWV0YWRhdGFTdGFyKHRva2VuKTsKICAgICAgICB0b2tlbiA9IGVuc3VyZUlkZW50aWZpZXIodG9rZW4sIElkZW50aWZpZXJDb250ZXh0LmVudW1WYWx1ZURlY2xhcmF0aW9uKTsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICBjb3VudCsrOwogICAgICAgIGlmIChvcHRpb25hbCgnLCcsIG5leHQpKSB7CiAgICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25hbCgnfScsIG5leHQpKSB7CiAgICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICAgIFRva2VuIGVuZEdyb3VwID0gbGVmdEJyYWNlLmVuZEdyb3VwOwogICAgICAgICAgaWYgKGVuZEdyb3VwLmlzU3ludGhldGljKSB7CiAgICAgICAgICAgIC8vIFRoZSBzY2FubmVyIGRpZCBub3QgcGxhY2UgdGhlIHN5bnRoZXRpYyAnfScgY29ycmVjdGx5LgogICAgICAgICAgICB0b2tlbiA9IHJld3JpdGVyLm1vdmVTeW50aGV0aWModG9rZW4sIGVuZEdyb3VwKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9IGVsc2UgaWYgKG5leHQuaXNJZGVudGlmaWVyKSB7CiAgICAgICAgICAgIC8vIElmIHRoZSBuZXh0IHRva2VuIGlzIGFuIGlkZW50aWZpZXIsIGFzc3VtZSBhIG1pc3NpbmcgY29tbWEuCiAgICAgICAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBDb25zaWRlciBpbXByb3ZlZCByZWNvdmVyeSBmb3IgbWlzc2luZyBgfWAKICAgICAgICAgICAgLy8gYm90aCBoZXJlIGFuZCB3aGVuIHRoZSBzY2FubmVyIGluc2VydHMgYSBzeW50aGV0aWMgYH1gCiAgICAgICAgICAgIC8vIGZvciBzaXR1YXRpb25zIHN1Y2ggYXMgYGVudW0gTGV0dGVyIHthLCBiICAgTGV0dGVyIGU7YC4KICAgICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICAgIG5leHQsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRCdXRHb3Qud2l0aEFyZ3VtZW50cygnLCcpKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIE90aGVyd2lzZSBhc3N1bWUgYSBtaXNzaW5nIGB9YCBhbmQgZXhpdCB0aGUgbG9vcAogICAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICAgICAgbmV4dCwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCd9JykpOwogICAgICAgICAgICB0b2tlbiA9IGxlZnRCcmFjZS5lbmRHcm91cDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogbWVyZ2UgdGhpcyBlcnJvciBtZXNzYWdlIHdpdGggbWlzc2luZyBjbGFzcy9taXhpbiBib2R5CiAgICAgIGxlZnRCcmFjZSA9IGVuc3VyZUJsb2NrKHRva2VuLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkRW51bUJvZHksIG51bGwpOwogICAgICB0b2tlbiA9IGxlZnRCcmFjZS5lbmRHcm91cDsKICAgIH0KICAgIGFzc2VydChvcHRpb25hbCgnfScsIHRva2VuKSk7CiAgICBsaXN0ZW5lci5lbmRFbnVtKGVudW1LZXl3b3JkLCBsZWZ0QnJhY2UsIGNvdW50KTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlQ2xhc3NPck5hbWVkTWl4aW5BcHBsaWNhdGlvbigKICAgICAgVG9rZW4gYWJzdHJhY3RUb2tlbiwgVG9rZW4gY2xhc3NLZXl3b3JkKSB7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2NsYXNzJywgY2xhc3NLZXl3b3JkKSk7CiAgICBUb2tlbiBiZWdpbiA9IGFic3RyYWN0VG9rZW4gPz8gY2xhc3NLZXl3b3JkOwogICAgbGlzdGVuZXIuYmVnaW5DbGFzc09yTmFtZWRNaXhpbkFwcGxpY2F0aW9uUHJlbHVkZShiZWdpbik7CiAgICBUb2tlbiBuYW1lID0gZW5zdXJlSWRlbnRpZmllcigKICAgICAgICBjbGFzc0tleXdvcmQsIElkZW50aWZpZXJDb250ZXh0LmNsYXNzT3JNaXhpbk9yRXh0ZW5zaW9uRGVjbGFyYXRpb24pOwogICAgVG9rZW4gdG9rZW4gPSBjb21wdXRlVHlwZVBhcmFtT3JBcmcobmFtZSwgdHJ1ZSkucGFyc2VWYXJpYWJsZXMobmFtZSwgdGhpcyk7CiAgICBpZiAob3B0aW9uYWwoJz0nLCB0b2tlbi5uZXh0KSkgewogICAgICBsaXN0ZW5lci5iZWdpbk5hbWVkTWl4aW5BcHBsaWNhdGlvbihiZWdpbiwgYWJzdHJhY3RUb2tlbiwgbmFtZSk7CiAgICAgIHJldHVybiBwYXJzZU5hbWVkTWl4aW5BcHBsaWNhdGlvbih0b2tlbiwgYmVnaW4sIGNsYXNzS2V5d29yZCk7CiAgICB9IGVsc2UgewogICAgICBsaXN0ZW5lci5iZWdpbkNsYXNzRGVjbGFyYXRpb24oYmVnaW4sIGFic3RyYWN0VG9rZW4sIG5hbWUpOwogICAgICByZXR1cm4gcGFyc2VDbGFzcyh0b2tlbiwgYmVnaW4sIGNsYXNzS2V5d29yZCwgbmFtZS5sZXhlbWUpOwogICAgfQogIH0KCiAgVG9rZW4gcGFyc2VOYW1lZE1peGluQXBwbGljYXRpb24oCiAgICAgIFRva2VuIHRva2VuLCBUb2tlbiBiZWdpbiwgVG9rZW4gY2xhc3NLZXl3b3JkKSB7CiAgICBUb2tlbiBlcXVhbHMgPSB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJz0nLCBlcXVhbHMpKTsKICAgIHRva2VuID0gY29tcHV0ZVR5cGUodG9rZW4sIHRydWUpLmVuc3VyZVR5cGVOb3RWb2lkKHRva2VuLCB0aGlzKTsKICAgIHRva2VuID0gcGFyc2VNaXhpbkFwcGxpY2F0aW9uUmVzdCh0b2tlbik7CiAgICBUb2tlbiBpbXBsZW1lbnRzS2V5d29yZCA9IG51bGw7CiAgICBpZiAob3B0aW9uYWwoJ2ltcGxlbWVudHMnLCB0b2tlbi5uZXh0KSkgewogICAgICBpbXBsZW1lbnRzS2V5d29yZCA9IHRva2VuLm5leHQ7CiAgICAgIHRva2VuID0gcGFyc2VUeXBlTGlzdChpbXBsZW1lbnRzS2V5d29yZCk7CiAgICB9CiAgICB0b2tlbiA9IGVuc3VyZVNlbWljb2xvbih0b2tlbik7CiAgICBsaXN0ZW5lci5lbmROYW1lZE1peGluQXBwbGljYXRpb24oCiAgICAgICAgYmVnaW4sIGNsYXNzS2V5d29yZCwgZXF1YWxzLCBpbXBsZW1lbnRzS2V5d29yZCwgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIFBhcnNlIHRoZSBwb3J0aW9uIG9mIGEgY2xhc3MgZGVjbGFyYXRpb24gKG5vdCBhIG1peGluIGFwcGxpY2F0aW9uKSB0aGF0CiAgLy8vIGZvbGxvd3MgdGhlIGVuZCBvZiB0aGUgdHlwZSBwYXJhbWV0ZXJzLgogIC8vLwogIC8vLyBgYGAKICAvLy8gY2xhc3NEZWZpbml0aW9uOgogIC8vLyAgIG1ldGFkYXRhIGFic3RyYWN0PyAnY2xhc3MnIGlkZW50aWZpZXIgdHlwZVBhcmFtZXRlcnM/CiAgLy8vICAgICAgIChzdXBlcmNsYXNzIG1peGlucz8pPyBpbnRlcmZhY2VzPwogIC8vLyAgICAgICAneycgKG1ldGFkYXRhIGNsYXNzTWVtYmVyRGVmaW5pdGlvbikqICd9JyB8CiAgLy8vICAgbWV0YWRhdGEgYWJzdHJhY3Q/ICdjbGFzcycgbWl4aW5BcHBsaWNhdGlvbkNsYXNzCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VDbGFzcygKICAgICAgVG9rZW4gdG9rZW4sIFRva2VuIGJlZ2luLCBUb2tlbiBjbGFzc0tleXdvcmQsIFN0cmluZyBjbGFzc05hbWUpIHsKICAgIFRva2VuIHN0YXJ0ID0gdG9rZW47CiAgICB0b2tlbiA9IHBhcnNlQ2xhc3NIZWFkZXJPcHQodG9rZW4sIGJlZ2luLCBjbGFzc0tleXdvcmQpOwogICAgaWYgKCFvcHRpb25hbCgneycsIHRva2VuLm5leHQpKSB7CiAgICAgIC8vIFJlY292ZXJ5CiAgICAgIHRva2VuID0gcGFyc2VDbGFzc0hlYWRlclJlY292ZXJ5KHN0YXJ0LCBiZWdpbiwgY2xhc3NLZXl3b3JkKTsKICAgICAgZW5zdXJlQmxvY2sodG9rZW4sIG51bGwsICdjbGFzcyBkZWNsYXJhdGlvbicpOwogICAgfQogICAgdG9rZW4gPSBwYXJzZUNsYXNzT3JNaXhpbk9yRXh0ZW5zaW9uQm9keSgKICAgICAgICB0b2tlbiwgRGVjbGFyYXRpb25LaW5kLkNsYXNzLCBjbGFzc05hbWUpOwogICAgbGlzdGVuZXIuZW5kQ2xhc3NEZWNsYXJhdGlvbihiZWdpbiwgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VDbGFzc0hlYWRlck9wdChUb2tlbiB0b2tlbiwgVG9rZW4gYmVnaW4sIFRva2VuIGNsYXNzS2V5d29yZCkgewogICAgdG9rZW4gPSBwYXJzZUNsYXNzRXh0ZW5kc09wdCh0b2tlbik7CiAgICB0b2tlbiA9IHBhcnNlV2l0aENsYXVzZU9wdCh0b2tlbik7CiAgICB0b2tlbiA9IHBhcnNlQ2xhc3NPck1peGluSW1wbGVtZW50c09wdCh0b2tlbik7CiAgICBUb2tlbiBuYXRpdmVUb2tlbjsKICAgIGlmIChvcHRpb25hbCgnbmF0aXZlJywgdG9rZW4ubmV4dCkpIHsKICAgICAgbmF0aXZlVG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICB0b2tlbiA9IHBhcnNlTmF0aXZlQ2xhdXNlKHRva2VuKTsKICAgIH0KICAgIGxpc3RlbmVyLmhhbmRsZUNsYXNzSGVhZGVyKGJlZ2luLCBjbGFzc0tleXdvcmQsIG5hdGl2ZVRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBSZWNvdmVyIGdpdmVuIG91dC1vZi1vcmRlciBjbGF1c2VzIGluIGEgY2xhc3MgaGVhZGVyLgogIFRva2VuIHBhcnNlQ2xhc3NIZWFkZXJSZWNvdmVyeShUb2tlbiB0b2tlbiwgVG9rZW4gYmVnaW4sIFRva2VuIGNsYXNzS2V5d29yZCkgewogICAgZmluYWwgTGlzdGVuZXIgcHJpbWFyeUxpc3RlbmVyID0gbGlzdGVuZXI7CiAgICBmaW5hbCBDbGFzc0hlYWRlclJlY292ZXJ5TGlzdGVuZXIgcmVjb3ZlcnlMaXN0ZW5lciA9CiAgICAgICAgbmV3IENsYXNzSGVhZGVyUmVjb3ZlcnlMaXN0ZW5lcigpOwoKICAgIC8vIFJlcGFyc2UgdG8gZGV0ZXJtaW5lIHdoaWNoIGNsYXVzZXMgaGF2ZSBhbHJlYWR5IGJlZW4gcGFyc2VkCiAgICAvLyBidXQgaW50ZXJjZXB0IHRoZSBldmVudHMgc28gdGhleSBhcmUgbm90IHNlbnQgdG8gdGhlIHByaW1hcnkgbGlzdGVuZXIuCiAgICBsaXN0ZW5lciA9IHJlY292ZXJ5TGlzdGVuZXI7CiAgICB0b2tlbiA9IHBhcnNlQ2xhc3NIZWFkZXJPcHQodG9rZW4sIGJlZ2luLCBjbGFzc0tleXdvcmQpOwogICAgYm9vbCBoYXNFeHRlbmRzID0gcmVjb3ZlcnlMaXN0ZW5lci5leHRlbmRzS2V5d29yZCAhPSBudWxsOwogICAgYm9vbCBoYXNJbXBsZW1lbnRzID0gcmVjb3ZlcnlMaXN0ZW5lci5pbXBsZW1lbnRzS2V5d29yZCAhPSBudWxsOwogICAgYm9vbCBoYXNXaXRoID0gcmVjb3ZlcnlMaXN0ZW5lci53aXRoS2V5d29yZCAhPSBudWxsOwoKICAgIC8vIFVwZGF0ZSB0aGUgcmVjb3ZlcnkgbGlzdGVuZXIgdG8gZm9yd2FyZCBzdWJzZXF1ZW50IGV2ZW50cwogICAgLy8gdG8gdGhlIHByaW1hcnkgbGlzdGVuZXIuCiAgICByZWNvdmVyeUxpc3RlbmVyLmxpc3RlbmVyID0gcHJpbWFyeUxpc3RlbmVyOwoKICAgIC8vIFBhcnNlIGFkZGl0aW9uYWwgb3V0LW9mLW9yZGVyIGNsYXVzZXMKICAgIFRva2VuIHN0YXJ0OwogICAgZG8gewogICAgICBzdGFydCA9IHRva2VuOwoKICAgICAgLy8gQ2hlY2sgZm9yIGV4dHJhbmVvdXMgdG9rZW4gaW4gdGhlIG1pZGRsZSBvZiBhIGNsYXNzIGhlYWRlci4KICAgICAgdG9rZW4gPSBza2lwVW5leHBlY3RlZFRva2VuT3B0KAogICAgICAgICAgdG9rZW4sIGNvbnN0IDxTdHJpbmc+WydleHRlbmRzJywgJ3dpdGgnLCAnaW1wbGVtZW50cycsICd7J10pOwoKICAgICAgLy8gRHVyaW5nIHJlY292ZXJ5LCBjbGF1c2VzIGFyZSBwYXJzZWQgaW4gdGhlIHNhbWUgb3JkZXIKICAgICAgLy8gYW5kIGdlbmVyYXRlIHRoZSBzYW1lIGV2ZW50cyBhcyBpbiB0aGUgcGFyc2VDbGFzc0hlYWRlciBtZXRob2QgYWJvdmUuCiAgICAgIHJlY292ZXJ5TGlzdGVuZXIuY2xlYXIoKTsKCiAgICAgIGlmICh0b2tlbi5uZXh0LmlzS2V5d29yZE9ySWRlbnRpZmllciAmJgogICAgICAgICAgY29uc3QgWydleHRlbmQnLCAnb24nXS5jb250YWlucyh0b2tlbi5uZXh0LmxleGVtZSkpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICB0b2tlbi5uZXh0LCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSW5zdGVhZC53aXRoQXJndW1lbnRzKCdleHRlbmRzJykpOwogICAgICAgIFRva2VuIGluY29ycmVjdEV4dGVuZHNLZXl3b3JkID0gdG9rZW4ubmV4dDsKICAgICAgICB0b2tlbiA9IGNvbXB1dGVUeXBlKGluY29ycmVjdEV4dGVuZHNLZXl3b3JkLCB0cnVlKQogICAgICAgICAgICAuZW5zdXJlVHlwZU5vdFZvaWQoaW5jb3JyZWN0RXh0ZW5kc0tleXdvcmQsIHRoaXMpOwogICAgICAgIGxpc3RlbmVyLmhhbmRsZUNsYXNzRXh0ZW5kcyhpbmNvcnJlY3RFeHRlbmRzS2V5d29yZCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdG9rZW4gPSBwYXJzZUNsYXNzRXh0ZW5kc09wdCh0b2tlbik7CiAgICAgIH0KCiAgICAgIGlmIChyZWNvdmVyeUxpc3RlbmVyLmV4dGVuZHNLZXl3b3JkICE9IG51bGwpIHsKICAgICAgICBpZiAoaGFzRXh0ZW5kcykgewogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICByZWNvdmVyeUxpc3RlbmVyLmV4dGVuZHNLZXl3b3JkLCBmYXN0YS5tZXNzYWdlTXVsdGlwbGVFeHRlbmRzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGhhc1dpdGgpIHsKICAgICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihyZWNvdmVyeUxpc3RlbmVyLmV4dGVuZHNLZXl3b3JkLAogICAgICAgICAgICAgICAgZmFzdGEubWVzc2FnZVdpdGhCZWZvcmVFeHRlbmRzKTsKICAgICAgICAgIH0gZWxzZSBpZiAoaGFzSW1wbGVtZW50cykgewogICAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKHJlY292ZXJ5TGlzdGVuZXIuZXh0ZW5kc0tleXdvcmQsCiAgICAgICAgICAgICAgICBmYXN0YS5tZXNzYWdlSW1wbGVtZW50c0JlZm9yZUV4dGVuZHMpOwogICAgICAgICAgfQogICAgICAgICAgaGFzRXh0ZW5kcyA9IHRydWU7CiAgICAgICAgfQogICAgICB9CgogICAgICB0b2tlbiA9IHBhcnNlV2l0aENsYXVzZU9wdCh0b2tlbik7CgogICAgICBpZiAocmVjb3ZlcnlMaXN0ZW5lci53aXRoS2V5d29yZCAhPSBudWxsKSB7CiAgICAgICAgaWYgKGhhc1dpdGgpIHsKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgcmVjb3ZlcnlMaXN0ZW5lci53aXRoS2V5d29yZCwgZmFzdGEubWVzc2FnZU11bHRpcGxlV2l0aCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChoYXNJbXBsZW1lbnRzKSB7CiAgICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IocmVjb3ZlcnlMaXN0ZW5lci53aXRoS2V5d29yZCwKICAgICAgICAgICAgICAgIGZhc3RhLm1lc3NhZ2VJbXBsZW1lbnRzQmVmb3JlV2l0aCk7CiAgICAgICAgICB9CiAgICAgICAgICBoYXNXaXRoID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHRva2VuID0gcGFyc2VDbGFzc09yTWl4aW5JbXBsZW1lbnRzT3B0KHRva2VuKTsKCiAgICAgIGlmIChyZWNvdmVyeUxpc3RlbmVyLmltcGxlbWVudHNLZXl3b3JkICE9IG51bGwpIHsKICAgICAgICBpZiAoaGFzSW1wbGVtZW50cykgewogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihyZWNvdmVyeUxpc3RlbmVyLmltcGxlbWVudHNLZXl3b3JkLAogICAgICAgICAgICAgIGZhc3RhLm1lc3NhZ2VNdWx0aXBsZUltcGxlbWVudHMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBoYXNJbXBsZW1lbnRzID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGxpc3RlbmVyLmhhbmRsZVJlY292ZXJDbGFzc0hlYWRlcigpOwoKICAgICAgLy8gRXhpdCBpZiBhIGNsYXNzIGJvZHkgaXMgZGV0ZWN0ZWQsIG9yIGlmIG5vIHByb2dyZXNzIGhhcyBiZWVuIG1hZGUKICAgIH0gd2hpbGUgKCFvcHRpb25hbCgneycsIHRva2VuLm5leHQpICYmIHN0YXJ0ICE9IHRva2VuKTsKCiAgICBsaXN0ZW5lciA9IHByaW1hcnlMaXN0ZW5lcjsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlQ2xhc3NFeHRlbmRzT3B0KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgnZXh0ZW5kcycsIG5leHQpKSB7CiAgICAgIFRva2VuIGV4dGVuZHNLZXl3b3JkID0gbmV4dDsKICAgICAgdG9rZW4gPSBjb21wdXRlVHlwZShuZXh0LCB0cnVlKS5lbnN1cmVUeXBlTm90Vm9pZChuZXh0LCB0aGlzKTsKICAgICAgbGlzdGVuZXIuaGFuZGxlQ2xhc3NFeHRlbmRzKGV4dGVuZHNLZXl3b3JkKTsKICAgIH0gZWxzZSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU5vVHlwZSh0b2tlbik7CiAgICAgIGxpc3RlbmVyLmhhbmRsZUNsYXNzRXh0ZW5kcyhudWxsKTsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gaW1wbGVtZW50c0NsYXVzZToKICAvLy8gICAnaW1wbGVtZW50cycgdHlwZU5hbWUgKCcsJyB0eXBlTmFtZSkqCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VDbGFzc09yTWl4aW5JbXBsZW1lbnRzT3B0KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBpbXBsZW1lbnRzS2V5d29yZDsKICAgIGludCBpbnRlcmZhY2VzQ291bnQgPSAwOwogICAgaWYgKG9wdGlvbmFsKCdpbXBsZW1lbnRzJywgdG9rZW4ubmV4dCkpIHsKICAgICAgaW1wbGVtZW50c0tleXdvcmQgPSB0b2tlbi5uZXh0OwogICAgICBkbyB7CiAgICAgICAgdG9rZW4gPQogICAgICAgICAgICBjb21wdXRlVHlwZSh0b2tlbi5uZXh0LCB0cnVlKS5lbnN1cmVUeXBlTm90Vm9pZCh0b2tlbi5uZXh0LCB0aGlzKTsKICAgICAgICArK2ludGVyZmFjZXNDb3VudDsKICAgICAgfSB3aGlsZSAob3B0aW9uYWwoJywnLCB0b2tlbi5uZXh0KSk7CiAgICB9CiAgICBsaXN0ZW5lci5oYW5kbGVDbGFzc09yTWl4aW5JbXBsZW1lbnRzKGltcGxlbWVudHNLZXl3b3JkLCBpbnRlcmZhY2VzQ291bnQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIFBhcnNlIGEgbWl4aW4gZGVjbGFyYXRpb24uCiAgLy8vCiAgLy8vIGBgYAogIC8vLyBtaXhpbkRlY2xhcmF0aW9uOgogIC8vLyAgIG1ldGFkYXRhPyAnbWl4aW4nIFtTaW1wbGVJZGVudGlmaWVyXSBbVHlwZVBhcmFtZXRlckxpc3RdPwogIC8vLyAgICAgICAgW09uQ2xhdXNlXT8gW0ltcGxlbWVudHNDbGF1c2VdPyAneycgW0NsYXNzTWVtYmVyXSogJ30nCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VNaXhpbihUb2tlbiBtaXhpbktleXdvcmQpIHsKICAgIGFzc2VydChvcHRpb25hbCgnbWl4aW4nLCBtaXhpbktleXdvcmQpKTsKICAgIGxpc3RlbmVyLmJlZ2luQ2xhc3NPck5hbWVkTWl4aW5BcHBsaWNhdGlvblByZWx1ZGUobWl4aW5LZXl3b3JkKTsKICAgIFRva2VuIG5hbWUgPSBlbnN1cmVJZGVudGlmaWVyKAogICAgICAgIG1peGluS2V5d29yZCwgSWRlbnRpZmllckNvbnRleHQuY2xhc3NPck1peGluT3JFeHRlbnNpb25EZWNsYXJhdGlvbik7CiAgICBUb2tlbiBoZWFkZXJTdGFydCA9CiAgICAgICAgY29tcHV0ZVR5cGVQYXJhbU9yQXJnKG5hbWUsIHRydWUpLnBhcnNlVmFyaWFibGVzKG5hbWUsIHRoaXMpOwogICAgbGlzdGVuZXIuYmVnaW5NaXhpbkRlY2xhcmF0aW9uKG1peGluS2V5d29yZCwgbmFtZSk7CiAgICBUb2tlbiB0b2tlbiA9IHBhcnNlTWl4aW5IZWFkZXJPcHQoaGVhZGVyU3RhcnQsIG1peGluS2V5d29yZCk7CiAgICBpZiAoIW9wdGlvbmFsKCd7JywgdG9rZW4ubmV4dCkpIHsKICAgICAgLy8gUmVjb3ZlcnkKICAgICAgdG9rZW4gPSBwYXJzZU1peGluSGVhZGVyUmVjb3ZlcnkodG9rZW4sIG1peGluS2V5d29yZCwgaGVhZGVyU3RhcnQpOwogICAgICBlbnN1cmVCbG9jayh0b2tlbiwgbnVsbCwgJ21peGluIGRlY2xhcmF0aW9uJyk7CiAgICB9CiAgICB0b2tlbiA9IHBhcnNlQ2xhc3NPck1peGluT3JFeHRlbnNpb25Cb2R5KAogICAgICAgIHRva2VuLCBEZWNsYXJhdGlvbktpbmQuTWl4aW4sIG5hbWUubGV4ZW1lKTsKICAgIGxpc3RlbmVyLmVuZE1peGluRGVjbGFyYXRpb24obWl4aW5LZXl3b3JkLCB0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZU1peGluSGVhZGVyT3B0KFRva2VuIHRva2VuLCBUb2tlbiBtaXhpbktleXdvcmQpIHsKICAgIHRva2VuID0gcGFyc2VNaXhpbk9uT3B0KHRva2VuKTsKICAgIHRva2VuID0gcGFyc2VDbGFzc09yTWl4aW5JbXBsZW1lbnRzT3B0KHRva2VuKTsKICAgIGxpc3RlbmVyLmhhbmRsZU1peGluSGVhZGVyKG1peGluS2V5d29yZCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZU1peGluSGVhZGVyUmVjb3ZlcnkoCiAgICAgIFRva2VuIHRva2VuLCBUb2tlbiBtaXhpbktleXdvcmQsIFRva2VuIGhlYWRlclN0YXJ0KSB7CiAgICBmaW5hbCBMaXN0ZW5lciBwcmltYXJ5TGlzdGVuZXIgPSBsaXN0ZW5lcjsKICAgIGZpbmFsIE1peGluSGVhZGVyUmVjb3ZlcnlMaXN0ZW5lciByZWNvdmVyeUxpc3RlbmVyID0KICAgICAgICBuZXcgTWl4aW5IZWFkZXJSZWNvdmVyeUxpc3RlbmVyKCk7CgogICAgLy8gUmVwYXJzZSB0byBkZXRlcm1pbmUgd2hpY2ggY2xhdXNlcyBoYXZlIGFscmVhZHkgYmVlbiBwYXJzZWQKICAgIC8vIGJ1dCBpbnRlcmNlcHQgdGhlIGV2ZW50cyBzbyB0aGV5IGFyZSBub3Qgc2VudCB0byB0aGUgcHJpbWFyeSBsaXN0ZW5lci4KICAgIGxpc3RlbmVyID0gcmVjb3ZlcnlMaXN0ZW5lcjsKICAgIHRva2VuID0gcGFyc2VNaXhpbkhlYWRlck9wdChoZWFkZXJTdGFydCwgbWl4aW5LZXl3b3JkKTsKICAgIGJvb2wgaGFzT24gPSByZWNvdmVyeUxpc3RlbmVyLm9uS2V5d29yZCAhPSBudWxsOwogICAgYm9vbCBoYXNJbXBsZW1lbnRzID0gcmVjb3ZlcnlMaXN0ZW5lci5pbXBsZW1lbnRzS2V5d29yZCAhPSBudWxsOwoKICAgIC8vIFVwZGF0ZSB0aGUgcmVjb3ZlcnkgbGlzdGVuZXIgdG8gZm9yd2FyZCBzdWJzZXF1ZW50IGV2ZW50cwogICAgLy8gdG8gdGhlIHByaW1hcnkgbGlzdGVuZXIuCiAgICByZWNvdmVyeUxpc3RlbmVyLmxpc3RlbmVyID0gcHJpbWFyeUxpc3RlbmVyOwoKICAgIC8vIFBhcnNlIGFkZGl0aW9uYWwgb3V0LW9mLW9yZGVyIGNsYXVzZXMKICAgIFRva2VuIHN0YXJ0OwogICAgZG8gewogICAgICBzdGFydCA9IHRva2VuOwoKICAgICAgLy8gQ2hlY2sgZm9yIGV4dHJhbmVvdXMgdG9rZW4gaW4gdGhlIG1pZGRsZSBvZiBhIGNsYXNzIGhlYWRlci4KICAgICAgdG9rZW4gPSBza2lwVW5leHBlY3RlZFRva2VuT3B0KAogICAgICAgICAgdG9rZW4sIGNvbnN0IDxTdHJpbmc+WydvbicsICdpbXBsZW1lbnRzJywgJ3snXSk7CgogICAgICAvLyBEdXJpbmcgcmVjb3ZlcnksIGNsYXVzZXMgYXJlIHBhcnNlZCBpbiB0aGUgc2FtZSBvcmRlciBhbmQKICAgICAgLy8gZ2VuZXJhdGUgdGhlIHNhbWUgZXZlbnRzIGFzIGluIHRoZSBwYXJzZU1peGluSGVhZGVyT3B0IG1ldGhvZCBhYm92ZS4KICAgICAgcmVjb3ZlcnlMaXN0ZW5lci5jbGVhcigpOwoKICAgICAgaWYgKHRva2VuLm5leHQuaXNLZXl3b3JkT3JJZGVudGlmaWVyICYmCiAgICAgICAgICBjb25zdCBbJ2V4dGVuZCcsICdleHRlbmRzJ10uY29udGFpbnModG9rZW4ubmV4dC5sZXhlbWUpKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgdG9rZW4ubmV4dCwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEluc3RlYWQud2l0aEFyZ3VtZW50cygnb24nKSk7CiAgICAgICAgdG9rZW4gPSBwYXJzZU1peGluT24odG9rZW4pOwogICAgICB9IGVsc2UgewogICAgICAgIHRva2VuID0gcGFyc2VNaXhpbk9uT3B0KHRva2VuKTsKICAgICAgfQoKICAgICAgaWYgKHJlY292ZXJ5TGlzdGVuZXIub25LZXl3b3JkICE9IG51bGwpIHsKICAgICAgICBpZiAoaGFzT24pIHsKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgcmVjb3ZlcnlMaXN0ZW5lci5vbktleXdvcmQsIGZhc3RhLm1lc3NhZ2VNdWx0aXBsZU9uQ2xhdXNlcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChoYXNJbXBsZW1lbnRzKSB7CiAgICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgICByZWNvdmVyeUxpc3RlbmVyLm9uS2V5d29yZCwgZmFzdGEubWVzc2FnZUltcGxlbWVudHNCZWZvcmVPbik7CiAgICAgICAgICB9CiAgICAgICAgICBoYXNPbiA9IHRydWU7CiAgICAgICAgfQogICAgICB9CgogICAgICB0b2tlbiA9IHBhcnNlQ2xhc3NPck1peGluSW1wbGVtZW50c09wdCh0b2tlbik7CgogICAgICBpZiAocmVjb3ZlcnlMaXN0ZW5lci5pbXBsZW1lbnRzS2V5d29yZCAhPSBudWxsKSB7CiAgICAgICAgaWYgKGhhc0ltcGxlbWVudHMpIHsKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IocmVjb3ZlcnlMaXN0ZW5lci5pbXBsZW1lbnRzS2V5d29yZCwKICAgICAgICAgICAgICBmYXN0YS5tZXNzYWdlTXVsdGlwbGVJbXBsZW1lbnRzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaGFzSW1wbGVtZW50cyA9IHRydWU7CiAgICAgICAgfQogICAgICB9CgogICAgICBsaXN0ZW5lci5oYW5kbGVSZWNvdmVyTWl4aW5IZWFkZXIoKTsKCiAgICAgIC8vIEV4aXQgaWYgYSBtaXhpbiBib2R5IGlzIGRldGVjdGVkLCBvciBpZiBubyBwcm9ncmVzcyBoYXMgYmVlbiBtYWRlCiAgICB9IHdoaWxlICghb3B0aW9uYWwoJ3snLCB0b2tlbi5uZXh0KSAmJiBzdGFydCAhPSB0b2tlbik7CgogICAgbGlzdGVuZXIgPSBwcmltYXJ5TGlzdGVuZXI7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIG9uQ2xhdXNlOgogIC8vLyAgICdvbicgdHlwZU5hbWUgKCcsJyB0eXBlTmFtZSkqCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VNaXhpbk9uT3B0KFRva2VuIHRva2VuKSB7CiAgICBpZiAoIW9wdGlvbmFsKCdvbicsIHRva2VuLm5leHQpKSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU1peGluT24obnVsbCwgMCk7CiAgICAgIHJldHVybiB0b2tlbjsKICAgIH0KICAgIHJldHVybiBwYXJzZU1peGluT24odG9rZW4pOwogIH0KCiAgVG9rZW4gcGFyc2VNaXhpbk9uKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBvbktleXdvcmQgPSB0b2tlbi5uZXh0OwogICAgLy8gRHVyaW5nIHJlY292ZXJ5LCB0aGUgW29uS2V5d29yZF0gY2FuIGJlICJleHRlbmQiIG9yICJleHRlbmRzIgogICAgYXNzZXJ0KG9wdGlvbmFsKCdvbicsIG9uS2V5d29yZCkgfHwKICAgICAgICBvcHRpb25hbCgnZXh0ZW5kcycsIG9uS2V5d29yZCkgfHwKICAgICAgICBvbktleXdvcmQubGV4ZW1lID09ICdleHRlbmQnKTsKICAgIGludCB0eXBlQ291bnQgPSAwOwogICAgZG8gewogICAgICB0b2tlbiA9IGNvbXB1dGVUeXBlKHRva2VuLm5leHQsIHRydWUpLmVuc3VyZVR5cGVOb3RWb2lkKHRva2VuLm5leHQsIHRoaXMpOwogICAgICArK3R5cGVDb3VudDsKICAgIH0gd2hpbGUgKG9wdGlvbmFsKCcsJywgdG9rZW4ubmV4dCkpOwogICAgbGlzdGVuZXIuaGFuZGxlTWl4aW5PbihvbktleXdvcmQsIHR5cGVDb3VudCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vICdleHRlbnNpb24nIDxpZGVudGlmaWVyPj8gPHR5cGVQYXJhbWV0ZXJzPj8gJ29uJyA8dHlwZT4gJz8nPwogIC8vICAgYHsnCiAgLy8gICAgIDxtZW1iZXJEZWNsYXJhdGlvbj4qCiAgLy8gICBgfScKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VFeHRlbnNpb24oVG9rZW4gZXh0ZW5zaW9uS2V5d29yZCkgewogICAgYXNzZXJ0KG9wdGlvbmFsKCdleHRlbnNpb24nLCBleHRlbnNpb25LZXl3b3JkKSk7CiAgICBUb2tlbiB0b2tlbiA9IGV4dGVuc2lvbktleXdvcmQ7CiAgICBsaXN0ZW5lci5iZWdpbkV4dGVuc2lvbkRlY2xhcmF0aW9uUHJlbHVkZShleHRlbnNpb25LZXl3b3JkKTsKICAgIFRva2VuIG5hbWUgPSB0b2tlbi5uZXh0OwogICAgaWYgKG5hbWUuaXNJZGVudGlmaWVyICYmICFvcHRpb25hbCgnb24nLCBuYW1lKSkgewogICAgICB0b2tlbiA9IG5hbWU7CiAgICB9IGVsc2UgewogICAgICBuYW1lID0gbnVsbDsKICAgIH0KICAgIHRva2VuID0gY29tcHV0ZVR5cGVQYXJhbU9yQXJnKHRva2VuLCB0cnVlKS5wYXJzZVZhcmlhYmxlcyh0b2tlbiwgdGhpcyk7CiAgICBsaXN0ZW5lci5iZWdpbkV4dGVuc2lvbkRlY2xhcmF0aW9uKGV4dGVuc2lvbktleXdvcmQsIG5hbWUpOwogICAgVG9rZW4gb25LZXl3b3JkID0gdG9rZW4ubmV4dDsKICAgIGlmICghb3B0aW9uYWwoJ29uJywgb25LZXl3b3JkKSkgewogICAgICAvLyBSZWNvdmVyeQogICAgICBpZiAob3B0aW9uYWwoJ2V4dGVuZHMnLCBvbktleXdvcmQpIHx8CiAgICAgICAgICBvcHRpb25hbCgnaW1wbGVtZW50cycsIG9uS2V5d29yZCkgfHwKICAgICAgICAgIG9wdGlvbmFsKCd3aXRoJywgb25LZXl3b3JkKSkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgIG9uS2V5d29yZCwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEluc3RlYWQud2l0aEFyZ3VtZW50cygnb24nKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgdG9rZW4sIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRBZnRlckJ1dEdvdC53aXRoQXJndW1lbnRzKCdvbicpKTsKICAgICAgICBvbktleXdvcmQgPSByZXdyaXRlci5pbnNlcnRTeW50aGV0aWNLZXl3b3JkKHRva2VuLCBLZXl3b3JkLk9OKTsKICAgICAgfQogICAgfQogICAgVHlwZUluZm8gdHlwZUluZm8gPSBjb21wdXRlVHlwZShvbktleXdvcmQsIHRydWUpOwogICAgdG9rZW4gPSB0eXBlSW5mby5lbnN1cmVUeXBlT3JWb2lkKG9uS2V5d29yZCwgdGhpcyk7CiAgICBpZiAoIW9wdGlvbmFsKCd7JywgdG9rZW4ubmV4dCkpIHsKICAgICAgLy8gUmVjb3ZlcnkKICAgICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIHdoaWxlICghbmV4dC5pc0VvZikgewogICAgICAgIGlmIChvcHRpb25hbCgnLCcsIG5leHQpIHx8CiAgICAgICAgICAgIG9wdGlvbmFsKCdleHRlbmRzJywgbmV4dCkgfHwKICAgICAgICAgICAgb3B0aW9uYWwoJ2ltcGxlbWVudHMnLCBuZXh0KSB8fAogICAgICAgICAgICBvcHRpb25hbCgnb24nLCBuZXh0KSB8fAogICAgICAgICAgICBvcHRpb25hbCgnd2l0aCcsIG5leHQpKSB7CiAgICAgICAgICAvLyBSZXBvcnQgYW4gZXJyb3IgYW5kIHNraXAgYCxgIG9yIHNwZWNpZmljIGtleXdvcmQKICAgICAgICAgIC8vIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYW4gaWRlbnRpZmllcgogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbihuZXh0LCBmYXN0YS50ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbik7CiAgICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICAgIGlmIChuZXh0LmlzSWRlbnRpZmllcikgewogICAgICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgZW5zdXJlQmxvY2sodG9rZW4sIG51bGwsICdleHRlbnNpb24gZGVjbGFyYXRpb24nKTsKICAgIH0KICAgIHRva2VuID0gcGFyc2VDbGFzc09yTWl4aW5PckV4dGVuc2lvbkJvZHkoCiAgICAgICAgdG9rZW4sIERlY2xhcmF0aW9uS2luZC5FeHRlbnNpb24sIG5hbWU/LmxleGVtZSk7CiAgICBsaXN0ZW5lci5lbmRFeHRlbnNpb25EZWNsYXJhdGlvbihleHRlbnNpb25LZXl3b3JkLCBvbktleXdvcmQsIHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlU3RyaW5nUGFydChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAobmV4dC5raW5kICE9IFNUUklOR19UT0tFTikgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKG5leHQsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRTdHJpbmcpOwogICAgICBuZXh0ID0gcmV3cml0ZXIuaW5zZXJ0VG9rZW4odG9rZW4sCiAgICAgICAgICBuZXcgU3ludGhldGljU3RyaW5nVG9rZW4oVG9rZW5UeXBlLlNUUklORywgJycsIG5leHQuY2hhck9mZnNldCkpOwogICAgfQogICAgbGlzdGVuZXIuaGFuZGxlU3RyaW5nUGFydChuZXh0KTsKICAgIHJldHVybiBuZXh0OwogIH0KCiAgLy8vIEluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIGFmdGVyIHRoZSBnaXZlbiBbdG9rZW5dIGFuZCBjcmVhdGUgYW4gZXJyb3IKICAvLy8gbWVzc2FnZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gW2NvbnRleHRdLiBSZXR1cm4gdGhlIHN5bnRoZXRpYyBpZGVudGlmaWVyIHRoYXQKICAvLy8gd2FzIGluc2VydGVkLgogIFRva2VuIGluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIoVG9rZW4gdG9rZW4sIElkZW50aWZpZXJDb250ZXh0IGNvbnRleHQsCiAgICAgIHtNZXNzYWdlIG1lc3NhZ2UsIFRva2VuIG1lc3NhZ2VPblRva2VufSkgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG1lc3NhZ2VPblRva2VuID8/IG5leHQsCiAgICAgICAgbWVzc2FnZSA/PyBjb250ZXh0LnJlY292ZXJ5VGVtcGxhdGUud2l0aEFyZ3VtZW50cyhuZXh0KSk7CiAgICByZXR1cm4gcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbik7CiAgfQoKICAvLy8gUGFyc2UgYSBzaW1wbGUgaWRlbnRpZmllciBhdCB0aGUgZ2l2ZW4gW3Rva2VuXSwgYW5kIHJldHVybiB0aGUgaWRlbnRpZmllcgogIC8vLyB0aGF0IHdhcyBwYXJzZWQuCiAgLy8vCiAgLy8vIElmIHRoZSB0b2tlbiBpcyBub3QgYW4gaWRlbnRpZmllciwgb3IgaXMgbm90IGFwcHJvcHJpYXRlIGZvciB1c2UgYXMgYW4KICAvLy8gaWRlbnRpZmllciBpbiB0aGUgZ2l2ZW4gW2NvbnRleHRdLCBjcmVhdGUgYSBzeW50aGV0aWMgaWRlbnRpZmllciwgcmVwb3J0CiAgLy8vIGFuIGVycm9yLCBhbmQgcmV0dXJuIHRoZSBzeW50aGV0aWMgaWRlbnRpZmllci4KICBUb2tlbiBlbnN1cmVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dCBjb250ZXh0KSB7CiAgICBhc3NlcnQoY29udGV4dCAhPSBudWxsKTsKICAgIFRva2VuIGlkZW50aWZpZXIgPSB0b2tlbi5uZXh0OwogICAgaWYgKGlkZW50aWZpZXIua2luZCAhPSBJREVOVElGSUVSX1RPS0VOKSB7CiAgICAgIGlkZW50aWZpZXIgPSBjb250ZXh0LmVuc3VyZUlkZW50aWZpZXIodG9rZW4sIHRoaXMpOwogICAgICBhc3NlcnQoaWRlbnRpZmllciAhPSBudWxsKTsKICAgICAgYXNzZXJ0KGlkZW50aWZpZXIuaXNLZXl3b3JkT3JJZGVudGlmaWVyKTsKICAgIH0KICAgIGxpc3RlbmVyLmhhbmRsZUlkZW50aWZpZXIoaWRlbnRpZmllciwgY29udGV4dCk7CiAgICByZXR1cm4gaWRlbnRpZmllcjsKICB9CgogIGJvb2wgbm90RW9mT3JWYWx1ZShTdHJpbmcgdmFsdWUsIFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gIWlkZW50aWNhbCh0b2tlbi5raW5kLCBFT0ZfVE9LRU4pICYmCiAgICAgICAgIWlkZW50aWNhbCh2YWx1ZSwgdG9rZW4uc3RyaW5nVmFsdWUpOwogIH0KCiAgVG9rZW4gcGFyc2VUeXBlVmFyaWFibGVzT3B0KFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gY29tcHV0ZVR5cGVQYXJhbU9yQXJnKHRva2VuLCB0cnVlKS5wYXJzZVZhcmlhYmxlcyh0b2tlbiwgdGhpcyk7CiAgfQoKICAvLy8gUGFyc2UgYSB0b3AgbGV2ZWwgZmllbGQgb3IgZnVuY3Rpb24uCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIGlzIG9ubHkgaW52b2tlZCBmcm9tIG91dHNpZGUgdGhlIHBhcnNlci4gQXMgYSByZXN1bHQsIHRoaXMKICAvLy8gbWV0aG9kIHRha2VzIHRoZSBuZXh0IHRva2VuIHRvIGJlIGNvbnN1bWVkIHJhdGhlciB0aGFuIHRoZSBsYXN0IGNvbnN1bWVkCiAgLy8vIHRva2VuIGFuZCByZXR1cm5zIHRoZSB0b2tlbiBhZnRlciB0aGUgbGFzdCBjb25zdW1lZCB0b2tlbiByYXRoZXIgdGhhbiB0aGUKICAvLy8gbGFzdCBjb25zdW1lZCB0b2tlbi4KICBUb2tlbiBwYXJzZVRvcExldmVsTWVtYmVyKFRva2VuIHRva2VuKSB7CiAgICB0b2tlbiA9IHBhcnNlTWV0YWRhdGFTdGFyKHN5bnRoZXRpY1ByZXZpb3VzVG9rZW4odG9rZW4pKTsKICAgIHJldHVybiBwYXJzZVRvcExldmVsTWVtYmVySW1wbCh0b2tlbikubmV4dDsKICB9CgogIFRva2VuIHBhcnNlVG9wTGV2ZWxNZW1iZXJJbXBsKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBiZWZvcmVTdGFydCA9IHRva2VuOwogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBsaXN0ZW5lci5iZWdpblRvcExldmVsTWVtYmVyKG5leHQpOwoKICAgIFRva2VuIGV4dGVybmFsVG9rZW47CiAgICBUb2tlbiBsYXRlVG9rZW47CiAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3Q7CgogICAgaWYgKGlzTW9kaWZpZXIobmV4dCkpIHsKICAgICAgaWYgKG9wdGlvbmFsKCdleHRlcm5hbCcsIG5leHQpKSB7CiAgICAgICAgZXh0ZXJuYWxUb2tlbiA9IHRva2VuID0gbmV4dDsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgfQogICAgICBpZiAoaXNNb2RpZmllcihuZXh0KSkgewogICAgICAgIGlmIChvcHRpb25hbCgnZmluYWwnLCBuZXh0KSkgewogICAgICAgICAgdmFyRmluYWxPckNvbnN0ID0gdG9rZW4gPSBuZXh0OwogICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25hbCgndmFyJywgbmV4dCkpIHsKICAgICAgICAgIHZhckZpbmFsT3JDb25zdCA9IHRva2VuID0gbmV4dDsKICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ2NvbnN0JywgbmV4dCkpIHsKICAgICAgICAgIHZhckZpbmFsT3JDb25zdCA9IHRva2VuID0gbmV4dDsKICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ2xhdGUnLCBuZXh0KSkgewogICAgICAgICAgbGF0ZVRva2VuID0gdG9rZW4gPSBuZXh0OwogICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgICBpZiAoaXNNb2RpZmllcihuZXh0KSAmJiBvcHRpb25hbCgnZmluYWwnLCBuZXh0KSkgewogICAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QgPSB0b2tlbiA9IG5leHQ7CiAgICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoaXNNb2RpZmllcihuZXh0KSkgewogICAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICAgIGlmICh2YXJGaW5hbE9yQ29uc3QgIT0gbnVsbCAmJgogICAgICAgICAgICAgIChvcHRpb25hbCgnZmluYWwnLCBuZXh0KSB8fAogICAgICAgICAgICAgICAgICBvcHRpb25hbCgndmFyJywgbmV4dCkgfHwKICAgICAgICAgICAgICAgICAgb3B0aW9uYWwoJ2NvbnN0JywgbmV4dCkpKSB7CiAgICAgICAgICAgIC8vIElmIGFub3RoZXIgYHZhcmAsIGBmaW5hbGAsIG9yIGBjb25zdGAgdGhlbiBmYWxsIHRocm91Z2gKICAgICAgICAgICAgLy8gdG8gcGFyc2UgdGhhdCBhcyBwYXJ0IG9mIHRoZSBuZXh0IHRvcCBsZXZlbCBkZWNsYXJhdGlvbi4KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIE1vZGlmaWVyUmVjb3ZlcnlDb250ZXh0IGNvbnRleHQgPSBuZXcgTW9kaWZpZXJSZWNvdmVyeUNvbnRleHQodGhpcykKICAgICAgICAgICAgICAuLmV4dGVybmFsVG9rZW4gPSBleHRlcm5hbFRva2VuCiAgICAgICAgICAgICAgLi5sYXRlVG9rZW4gPSBsYXRlVG9rZW4KICAgICAgICAgICAgICAuLnZhckZpbmFsT3JDb25zdCA9IHZhckZpbmFsT3JDb25zdDsKCiAgICAgICAgICAgIHRva2VuID0gY29udGV4dC5wYXJzZVRvcExldmVsTW9kaWZpZXJzKHRva2VuKTsKICAgICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CgogICAgICAgICAgICBleHRlcm5hbFRva2VuID0gY29udGV4dC5leHRlcm5hbFRva2VuOwogICAgICAgICAgICBsYXRlVG9rZW4gPSBjb250ZXh0LmxhdGVUb2tlbjsKICAgICAgICAgICAgdmFyRmluYWxPckNvbnN0ID0gY29udGV4dC52YXJGaW5hbE9yQ29uc3Q7CgogICAgICAgICAgICBjb250ZXh0ID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBUb2tlbiBiZWZvcmVUeXBlID0gdG9rZW47CiAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IGNvbXB1dGVUeXBlKHRva2VuLCBmYWxzZSwgdHJ1ZSk7CiAgICB0b2tlbiA9IHR5cGVJbmZvLnNraXBUeXBlKHRva2VuKTsKICAgIG5leHQgPSB0b2tlbi5uZXh0OwoKICAgIFRva2VuIGdldE9yU2V0OwogICAgU3RyaW5nIHZhbHVlID0gbmV4dC5zdHJpbmdWYWx1ZTsKICAgIGlmIChpZGVudGljYWwodmFsdWUsICdnZXQnKSB8fCBpZGVudGljYWwodmFsdWUsICdzZXQnKSkgewogICAgICBpZiAobmV4dC5uZXh0LmlzSWRlbnRpZmllcikgewogICAgICAgIGdldE9yU2V0ID0gdG9rZW4gPSBuZXh0OwogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICB9CiAgICB9CgogICAgaWYgKG5leHQudHlwZSAhPSBUb2tlblR5cGUuSURFTlRJRklFUikgewogICAgICB2YWx1ZSA9IG5leHQuc3RyaW5nVmFsdWU7CiAgICAgIGlmIChpZGVudGljYWwodmFsdWUsICdmYWN0b3J5JykgfHwgaWRlbnRpY2FsKHZhbHVlLCAnb3BlcmF0b3InKSkgewogICAgICAgIC8vIGBmYWN0b3J5YCBhbmQgYG9wZXJhdG9yYCBjYW4gYmUgdXNlZCBhcyBhbiBpZGVudGlmaWVyLgogICAgICAgIHZhbHVlID0gbmV4dC5uZXh0LnN0cmluZ1ZhbHVlOwogICAgICAgIGlmIChnZXRPclNldCA9PSBudWxsICYmCiAgICAgICAgICAgICFpZGVudGljYWwodmFsdWUsICcoJykgJiYKICAgICAgICAgICAgIWlkZW50aWNhbCh2YWx1ZSwgJ3snKSAmJgogICAgICAgICAgICAhaWRlbnRpY2FsKHZhbHVlLCAnPCcpICYmCiAgICAgICAgICAgICFpZGVudGljYWwodmFsdWUsICc9PicpICYmCiAgICAgICAgICAgICFpZGVudGljYWwodmFsdWUsICc9JykgJiYKICAgICAgICAgICAgIWlkZW50aWNhbCh2YWx1ZSwgJzsnKSAmJgogICAgICAgICAgICAhaWRlbnRpY2FsKHZhbHVlLCAnLCcpKSB7CiAgICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgICAgdmFsdWUgPSBuZXh0LnN0cmluZ1ZhbHVlOwogICAgICAgICAgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2ZhY3RvcnknKSkgewogICAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICAgICAgbmV4dCwgZmFzdGEubWVzc2FnZUZhY3RvcnlUb3BMZXZlbERlY2xhcmF0aW9uKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IobmV4dCwgZmFzdGEubWVzc2FnZVRvcExldmVsT3BlcmF0b3IpOwogICAgICAgICAgICBpZiAobmV4dC5uZXh0LmlzT3BlcmF0b3IpIHsKICAgICAgICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgICAgICAgaWYgKG9wdGlvbmFsKCcoJywgbmV4dC5uZXh0KSkgewogICAgICAgICAgICAgICAgcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcigKICAgICAgICAgICAgICAgICAgICBuZXh0LCAnI3N5bnRoZXRpY19pZGVudGlmaWVyXyR7bmV4dC5jaGFyT2Zmc2V0fScpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgbGlzdGVuZXIuaGFuZGxlSW52YWxpZFRvcExldmVsRGVjbGFyYXRpb24obmV4dCk7CiAgICAgICAgICByZXR1cm4gbmV4dDsKICAgICAgICB9CiAgICAgICAgLy8gRmFsbCB0aHJvdWdoIGFuZCBjb250aW51ZSBwYXJzaW5nCiAgICAgIH0gZWxzZSBpZiAoIW5leHQuaXNJZGVudGlmaWVyKSB7CiAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICBpZiAobmV4dC5pc0tleXdvcmQpIHsKICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBwYXJzZSB0aGUga2V5d29yZCBhcyB0aGUgaWRlbnRpZmllci4KICAgICAgICAgIC8vIGVuc3VyZUlkZW50aWZpZXIgd2lsbCByZXBvcnQgdGhlIGVycm9yLgogICAgICAgIH0gZWxzZSBpZiAodG9rZW4gPT0gYmVmb3JlU3RhcnQpIHsKICAgICAgICAgIC8vIEVuc3VyZSB3ZSBtYWtlIHByb2dyZXNzLgogICAgICAgICAgcmV0dXJuIHBhcnNlSW52YWxpZFRvcExldmVsRGVjbGFyYXRpb24odG9rZW4pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBMb29rcyBsaWtlIGEgZGVjbGFyYXRpb24gbWlzc2luZyBhbiBpZGVudGlmaWVyLgogICAgICAgICAgLy8gSW5zZXJ0IHN5bnRoZXRpYyBpZGVudGlmaWVyIGFuZCBmYWxsIHRocm91Z2guCiAgICAgICAgICBpbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC5tZXRob2REZWNsYXJhdGlvbik7CiAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIC8vIEF0IHRoaXMgcG9pbnQsIGB0b2tlbmAgaXMgYmVmb3JlTmFtZS4KCiAgICBuZXh0ID0gbmV4dC5uZXh0OwogICAgdmFsdWUgPSBuZXh0LnN0cmluZ1ZhbHVlOwogICAgaWYgKGdldE9yU2V0ICE9IG51bGwgfHwKICAgICAgICBpZGVudGljYWwodmFsdWUsICcoJykgfHwKICAgICAgICBpZGVudGljYWwodmFsdWUsICd7JykgfHwKICAgICAgICBpZGVudGljYWwodmFsdWUsICc8JykgfHwKICAgICAgICBpZGVudGljYWwodmFsdWUsICcuJykgfHwKICAgICAgICBpZGVudGljYWwodmFsdWUsICc9PicpKSB7CiAgICAgIGlmICh2YXJGaW5hbE9yQ29uc3QgIT0gbnVsbCkgewogICAgICAgIGlmIChvcHRpb25hbCgndmFyJywgdmFyRmluYWxPckNvbnN0KSkgewogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcih2YXJGaW5hbE9yQ29uc3QsIGZhc3RhLm1lc3NhZ2VWYXJSZXR1cm5UeXBlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QsIGZhc3RhLnRlbXBsYXRlRXh0cmFuZW91c01vZGlmaWVyKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAobGF0ZVRva2VuICE9IG51bGwpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgICBsYXRlVG9rZW4sIGZhc3RhLnRlbXBsYXRlRXh0cmFuZW91c01vZGlmaWVyKTsKICAgICAgfQogICAgICByZXR1cm4gcGFyc2VUb3BMZXZlbE1ldGhvZChiZWZvcmVTdGFydCwgZXh0ZXJuYWxUb2tlbiwgYmVmb3JlVHlwZSwKICAgICAgICAgIHR5cGVJbmZvLCBnZXRPclNldCwgdG9rZW4ubmV4dCk7CiAgICB9CgogICAgaWYgKGdldE9yU2V0ICE9IG51bGwpIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGdldE9yU2V0LCBmYXN0YS50ZW1wbGF0ZUV4dHJhbmVvdXNNb2RpZmllcik7CiAgICB9CiAgICByZXR1cm4gcGFyc2VGaWVsZHMoCiAgICAgICAgYmVmb3JlU3RhcnQsCiAgICAgICAgZXh0ZXJuYWxUb2tlbiwKICAgICAgICBudWxsLAogICAgICAgIG51bGwsCiAgICAgICAgbGF0ZVRva2VuLAogICAgICAgIHZhckZpbmFsT3JDb25zdCwKICAgICAgICBiZWZvcmVUeXBlLAogICAgICAgIHR5cGVJbmZvLAogICAgICAgIHRva2VuLm5leHQsCiAgICAgICAgRGVjbGFyYXRpb25LaW5kLlRvcExldmVsKTsKICB9CgogIFRva2VuIHBhcnNlRmllbGRzKAogICAgICBUb2tlbiBiZWZvcmVTdGFydCwKICAgICAgVG9rZW4gZXh0ZXJuYWxUb2tlbiwKICAgICAgVG9rZW4gc3RhdGljVG9rZW4sCiAgICAgIFRva2VuIGNvdmFyaWFudFRva2VuLAogICAgICBUb2tlbiBsYXRlVG9rZW4sCiAgICAgIFRva2VuIHZhckZpbmFsT3JDb25zdCwKICAgICAgVG9rZW4gYmVmb3JlVHlwZSwKICAgICAgVHlwZUluZm8gdHlwZUluZm8sCiAgICAgIFRva2VuIG5hbWUsCiAgICAgIERlY2xhcmF0aW9uS2luZCBraW5kKSB7CiAgICBpZiAoZXh0ZXJuYWxUb2tlbiAhPSBudWxsKSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoZXh0ZXJuYWxUb2tlbiwgZmFzdGEubWVzc2FnZUV4dGVybmFsRmllbGQpOwogICAgfQogICAgaWYgKGNvdmFyaWFudFRva2VuICE9IG51bGwpIHsKICAgICAgaWYgKHZhckZpbmFsT3JDb25zdCAhPSBudWxsICYmIG9wdGlvbmFsKCdmaW5hbCcsIHZhckZpbmFsT3JDb25zdCkpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKGNvdmFyaWFudFRva2VuLCBmYXN0YS5tZXNzYWdlRmluYWxBbmRDb3ZhcmlhbnQpOwogICAgICAgIGNvdmFyaWFudFRva2VuID0gbnVsbDsKICAgICAgfQogICAgfQogICAgaWYgKHR5cGVJbmZvID09IG5vVHlwZSkgewogICAgICBpZiAodmFyRmluYWxPckNvbnN0ID09IG51bGwgJiYgbGF0ZVRva2VuID09IG51bGwpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5hbWUsIGZhc3RhLm1lc3NhZ2VNaXNzaW5nQ29uc3RGaW5hbFZhck9yVHlwZSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmICh2YXJGaW5hbE9yQ29uc3QgIT0gbnVsbCAmJiBvcHRpb25hbCgndmFyJywgdmFyRmluYWxPckNvbnN0KSkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IodmFyRmluYWxPckNvbnN0LCBmYXN0YS5tZXNzYWdlVHlwZUFmdGVyVmFyKTsKICAgICAgfQogICAgfQoKICAgIFRva2VuIHRva2VuID0gdHlwZUluZm8ucGFyc2VUeXBlKGJlZm9yZVR5cGUsIHRoaXMpOwogICAgYXNzZXJ0KHRva2VuLm5leHQgPT0gbmFtZSk7CgogICAgSWRlbnRpZmllckNvbnRleHQgY29udGV4dCA9IGtpbmQgPT0gRGVjbGFyYXRpb25LaW5kLlRvcExldmVsCiAgICAgICAgPyBJZGVudGlmaWVyQ29udGV4dC50b3BMZXZlbFZhcmlhYmxlRGVjbGFyYXRpb24KICAgICAgICA6IElkZW50aWZpZXJDb250ZXh0LmZpZWxkRGVjbGFyYXRpb247CiAgICBUb2tlbiBmaXJzdE5hbWUgPSBuYW1lID0gZW5zdXJlSWRlbnRpZmllcih0b2tlbiwgY29udGV4dCk7CgogICAgaW50IGZpZWxkQ291bnQgPSAxOwogICAgdG9rZW4gPQogICAgICAgIHBhcnNlRmllbGRJbml0aWFsaXplck9wdChuYW1lLCBuYW1lLCBsYXRlVG9rZW4sIHZhckZpbmFsT3JDb25zdCwga2luZCk7CiAgICB3aGlsZSAob3B0aW9uYWwoJywnLCB0b2tlbi5uZXh0KSkgewogICAgICBuYW1lID0gZW5zdXJlSWRlbnRpZmllcih0b2tlbi5uZXh0LCBjb250ZXh0KTsKICAgICAgdG9rZW4gPSBwYXJzZUZpZWxkSW5pdGlhbGl6ZXJPcHQoCiAgICAgICAgICBuYW1lLCBuYW1lLCBsYXRlVG9rZW4sIHZhckZpbmFsT3JDb25zdCwga2luZCk7CiAgICAgICsrZmllbGRDb3VudDsKICAgIH0KICAgIFRva2VuIHNlbWljb2xvbiA9IHRva2VuLm5leHQ7CiAgICBpZiAob3B0aW9uYWwoJzsnLCBzZW1pY29sb24pKSB7CiAgICAgIHRva2VuID0gc2VtaWNvbG9uOwogICAgfSBlbHNlIHsKICAgICAgLy8gUmVjb3ZlcnkKICAgICAgaWYgKGtpbmQgPT0gRGVjbGFyYXRpb25LaW5kLlRvcExldmVsICYmCiAgICAgICAgICBiZWZvcmVUeXBlLm5leHQuaXNJZGVudGlmaWVyICYmCiAgICAgICAgICBiZWZvcmVUeXBlLm5leHQubGV4ZW1lID09ICdleHRlbnNpb24nKSB7CiAgICAgICAgLy8gTG9va3MgbGlrZSBhbiBleHRlbnNpb24gbWV0aG9kCiAgICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IFJlbW92ZSB3aGVuIGV4dGVuc2lvbiBtZXRob2RzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQKICAgICAgICAvLyBiZWNhdXNlIHRoZW4gJ2V4dGVuc2lvbicgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhIGJ1aWx0LWluCiAgICAgICAgLy8gYW5kIHRoaXMgY29kZSB3aWxsIG5ldmVyIGJlIGV4ZWN1dGVkCiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgYmVmb3JlVHlwZS5uZXh0LAogICAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUV4cGVyaW1lbnROb3RFbmFibGVkCiAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cygnZXh0ZW5zaW9uLW1ldGhvZHMnKSk7CiAgICAgICAgdG9rZW4gPSByZXdyaXRlci5pbnNlcnRTeW50aGV0aWNUb2tlbih0b2tlbiwgVG9rZW5UeXBlLlNFTUlDT0xPTik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdG9rZW4gPSBlbnN1cmVTZW1pY29sb24odG9rZW4pOwogICAgICB9CiAgICB9CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBEZWNsYXJhdGlvbktpbmQuVG9wTGV2ZWw6CiAgICAgICAgbGlzdGVuZXIuZW5kVG9wTGV2ZWxGaWVsZHMoc3RhdGljVG9rZW4sIGNvdmFyaWFudFRva2VuLCBsYXRlVG9rZW4sCiAgICAgICAgICAgIHZhckZpbmFsT3JDb25zdCwgZmllbGRDb3VudCwgYmVmb3JlU3RhcnQubmV4dCwgdG9rZW4pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIERlY2xhcmF0aW9uS2luZC5DbGFzczoKICAgICAgICBsaXN0ZW5lci5lbmRDbGFzc0ZpZWxkcyhzdGF0aWNUb2tlbiwgY292YXJpYW50VG9rZW4sIGxhdGVUb2tlbiwKICAgICAgICAgICAgdmFyRmluYWxPckNvbnN0LCBmaWVsZENvdW50LCBiZWZvcmVTdGFydC5uZXh0LCB0b2tlbik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgRGVjbGFyYXRpb25LaW5kLk1peGluOgogICAgICAgIGxpc3RlbmVyLmVuZE1peGluRmllbGRzKHN0YXRpY1Rva2VuLCBjb3ZhcmlhbnRUb2tlbiwgbGF0ZVRva2VuLAogICAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QsIGZpZWxkQ291bnQsIGJlZm9yZVN0YXJ0Lm5leHQsIHRva2VuKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBEZWNsYXJhdGlvbktpbmQuRXh0ZW5zaW9uOgogICAgICAgIGlmIChzdGF0aWNUb2tlbiA9PSBudWxsKSB7CiAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICAgIGZpcnN0TmFtZSwgZmFzdGEubWVzc2FnZUV4dGVuc2lvbkRlY2xhcmVzSW5zdGFuY2VGaWVsZCk7CiAgICAgICAgfQogICAgICAgIGxpc3RlbmVyLmVuZEV4dGVuc2lvbkZpZWxkcyhzdGF0aWNUb2tlbiwgY292YXJpYW50VG9rZW4sIGxhdGVUb2tlbiwKICAgICAgICAgICAgdmFyRmluYWxPckNvbnN0LCBmaWVsZENvdW50LCBiZWZvcmVTdGFydC5uZXh0LCB0b2tlbik7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZVRvcExldmVsTWV0aG9kKFRva2VuIGJlZm9yZVN0YXJ0LCBUb2tlbiBleHRlcm5hbFRva2VuLAogICAgICBUb2tlbiBiZWZvcmVUeXBlLCBUeXBlSW5mbyB0eXBlSW5mbywgVG9rZW4gZ2V0T3JTZXQsIFRva2VuIG5hbWUpIHsKICAgIGxpc3RlbmVyLmJlZ2luVG9wTGV2ZWxNZXRob2QoYmVmb3JlU3RhcnQsIGV4dGVybmFsVG9rZW4pOwoKICAgIFRva2VuIHRva2VuID0gdHlwZUluZm8ucGFyc2VUeXBlKGJlZm9yZVR5cGUsIHRoaXMpOwogICAgYXNzZXJ0KHRva2VuLm5leHQgPT0gKGdldE9yU2V0ID8/IG5hbWUpKTsKICAgIG5hbWUgPSBlbnN1cmVJZGVudGlmaWVyKAogICAgICAgIGdldE9yU2V0ID8/IHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC50b3BMZXZlbEZ1bmN0aW9uRGVjbGFyYXRpb24pOwoKICAgIGJvb2wgaXNHZXR0ZXIgPSBmYWxzZTsKICAgIGlmIChnZXRPclNldCA9PSBudWxsKSB7CiAgICAgIHRva2VuID0gcGFyc2VNZXRob2RUeXBlVmFyKG5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgaXNHZXR0ZXIgPSBvcHRpb25hbCgiZ2V0IiwgZ2V0T3JTZXQpOwogICAgICB0b2tlbiA9IG5hbWU7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU5vVHlwZVZhcmlhYmxlcyh0b2tlbi5uZXh0KTsKICAgIH0KICAgIHRva2VuID0gcGFyc2VHZXR0ZXJPckZvcm1hbFBhcmFtZXRlcnMoCiAgICAgICAgdG9rZW4sIG5hbWUsIGlzR2V0dGVyLCBNZW1iZXJLaW5kLlRvcExldmVsTWV0aG9kKTsKICAgIEFzeW5jTW9kaWZpZXIgc2F2ZWRBc3luY01vZGlmaWVyID0gYXN5bmNTdGF0ZTsKICAgIFRva2VuIGFzeW5jVG9rZW4gPSB0b2tlbi5uZXh0OwogICAgdG9rZW4gPSBwYXJzZUFzeW5jTW9kaWZpZXJPcHQodG9rZW4pOwogICAgaWYgKGdldE9yU2V0ICE9IG51bGwgJiYgIWluUGxhaW5TeW5jICYmIG9wdGlvbmFsKCJzZXQiLCBnZXRPclNldCkpIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihhc3luY1Rva2VuLCBmYXN0YS5tZXNzYWdlU2V0dGVyTm90U3luYyk7CiAgICB9CiAgICBib29sIGlzRXh0ZXJuYWwgPSBleHRlcm5hbFRva2VuICE9IG51bGw7CiAgICBpZiAoaXNFeHRlcm5hbCAmJiAhb3B0aW9uYWwoJzsnLCB0b2tlbi5uZXh0KSkgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgZXh0ZXJuYWxUb2tlbiwgZmFzdGEubWVzc2FnZUV4dGVybmFsTWV0aG9kV2l0aEJvZHkpOwogICAgfQogICAgdG9rZW4gPSBwYXJzZUZ1bmN0aW9uQm9keSh0b2tlbiwgZmFsc2UsIGlzRXh0ZXJuYWwpOwogICAgYXN5bmNTdGF0ZSA9IHNhdmVkQXN5bmNNb2RpZmllcjsKICAgIGxpc3RlbmVyLmVuZFRvcExldmVsTWV0aG9kKGJlZm9yZVN0YXJ0Lm5leHQsIGdldE9yU2V0LCB0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZU1ldGhvZFR5cGVWYXIoVG9rZW4gbmFtZSkgewogICAgaWYgKCFvcHRpb25hbCgnPCcsIG5hbWUubmV4dCkpIHsKICAgICAgcmV0dXJuIG5vVHlwZVBhcmFtT3JBcmcucGFyc2VWYXJpYWJsZXMobmFtZSwgdGhpcyk7CiAgICB9CiAgICBUeXBlUGFyYW1PckFyZ0luZm8gdHlwZVZhciA9IGNvbXB1dGVUeXBlUGFyYW1PckFyZyhuYW1lLCB0cnVlKTsKICAgIFRva2VuIHRva2VuID0gdHlwZVZhci5wYXJzZVZhcmlhYmxlcyhuYW1lLCB0aGlzKTsKICAgIGlmIChvcHRpb25hbCgnPScsIHRva2VuLm5leHQpKSB7CiAgICAgIC8vIFJlY292ZXJ5CiAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbih0b2tlbiwgZmFzdGEudGVtcGxhdGVVbmV4cGVjdGVkVG9rZW4pOwogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VGaWVsZEluaXRpYWxpemVyT3B0KFRva2VuIHRva2VuLCBUb2tlbiBuYW1lLCBUb2tlbiBsYXRlVG9rZW4sCiAgICAgIFRva2VuIHZhckZpbmFsT3JDb25zdCwgRGVjbGFyYXRpb25LaW5kIGtpbmQpIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG9wdGlvbmFsKCc9JywgbmV4dCkpIHsKICAgICAgVG9rZW4gYXNzaWdubWVudCA9IG5leHQ7CiAgICAgIGxpc3RlbmVyLmJlZ2luRmllbGRJbml0aWFsaXplcihuZXh0KTsKICAgICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb24obmV4dCk7CiAgICAgIGxpc3RlbmVyLmVuZEZpZWxkSW5pdGlhbGl6ZXIoYXNzaWdubWVudCwgdG9rZW4ubmV4dCk7CiAgICB9IGVsc2UgewogICAgICBpZiAodmFyRmluYWxPckNvbnN0ICE9IG51bGwgJiYgIW5hbWUuaXNTeW50aGV0aWMpIHsKICAgICAgICBpZiAob3B0aW9uYWwoImNvbnN0IiwgdmFyRmluYWxPckNvbnN0KSkgewogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICBuYW1lLAogICAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlQ29uc3RGaWVsZFdpdGhvdXRJbml0aWFsaXplcgogICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhuYW1lLmxleGVtZSkpOwogICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PSBEZWNsYXJhdGlvbktpbmQuVG9wTGV2ZWwgJiYKICAgICAgICAgICAgb3B0aW9uYWwoImZpbmFsIiwgdmFyRmluYWxPckNvbnN0KSAmJgogICAgICAgICAgICBsYXRlVG9rZW4gPT0gbnVsbCkgewogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICBuYW1lLAogICAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlRmluYWxGaWVsZFdpdGhvdXRJbml0aWFsaXplcgogICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhuYW1lLmxleGVtZSkpOwogICAgICAgIH0KICAgICAgfQogICAgICBsaXN0ZW5lci5oYW5kbGVOb0ZpZWxkSW5pdGlhbGl6ZXIodG9rZW4ubmV4dCk7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZVZhcmlhYmxlSW5pdGlhbGl6ZXJPcHQoVG9rZW4gdG9rZW4pIHsKICAgIGlmIChvcHRpb25hbCgnPScsIHRva2VuLm5leHQpKSB7CiAgICAgIFRva2VuIGFzc2lnbm1lbnQgPSB0b2tlbi5uZXh0OwogICAgICBsaXN0ZW5lci5iZWdpblZhcmlhYmxlSW5pdGlhbGl6ZXIoYXNzaWdubWVudCk7CiAgICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKGFzc2lnbm1lbnQpOwogICAgICBsaXN0ZW5lci5lbmRWYXJpYWJsZUluaXRpYWxpemVyKGFzc2lnbm1lbnQpOwogICAgfSBlbHNlIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlTm9WYXJpYWJsZUluaXRpYWxpemVyKHRva2VuLm5leHQpOwogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VJbml0aWFsaXplcnNPcHQoVG9rZW4gdG9rZW4pIHsKICAgIGlmIChvcHRpb25hbCgnOicsIHRva2VuLm5leHQpKSB7CiAgICAgIHJldHVybiBwYXJzZUluaXRpYWxpemVycyh0b2tlbi5uZXh0KTsKICAgIH0gZWxzZSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU5vSW5pdGlhbGl6ZXJzKCk7CiAgICAgIHJldHVybiB0b2tlbjsKICAgIH0KICB9CgogIC8vLyBgYGAKICAvLy8gaW5pdGlhbGl6ZXJzOgogIC8vLyAgICc6JyBpbml0aWFsaXplckxpc3RFbnRyeSAoJywnIGluaXRpYWxpemVyTGlzdEVudHJ5KSoKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUluaXRpYWxpemVycyhUb2tlbiB0b2tlbikgewogICAgVG9rZW4gYmVnaW4gPSB0b2tlbjsKICAgIGFzc2VydChvcHRpb25hbCgnOicsIGJlZ2luKSk7CiAgICBsaXN0ZW5lci5iZWdpbkluaXRpYWxpemVycyhiZWdpbik7CiAgICBpbnQgY291bnQgPSAwOwogICAgYm9vbCBvbGQgPSBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnM7CiAgICBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnMgPSBmYWxzZTsKICAgIFRva2VuIG5leHQgPSBiZWdpbjsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIHRva2VuID0gcGFyc2VJbml0aWFsaXplcihuZXh0KTsKICAgICAgKytjb3VudDsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIGlmICghb3B0aW9uYWwoJywnLCBuZXh0KSkgewogICAgICAgIC8vIFJlY292ZXJ5OiBGb3VuZCBhbiBpZGVudGlmaWVyIHdoaWNoIGNvdWxkIGJlCiAgICAgICAgLy8gMSkgbWlzc2luZyBwcmVjZWRpbmcgYCxgIHRodXMgaXQncyBhbm90aGVyIGluaXRpYWxpemVyLCBvcgogICAgICAgIC8vIDIpIG1pc3NpbmcgcHJlY2VkaW5nIGA7YCB0aHVzIGl0J3MgYSBjbGFzcyBtZW1iZXIsIG9yCiAgICAgICAgLy8gMykgbWlzc2luZyBwcmVjZWRpbmcgJ3snIHRodXMgaXQncyBhIHN0YXRlbWVudAogICAgICAgIGlmIChvcHRpb25hbCgnYXNzZXJ0JywgbmV4dCkpIHsKICAgICAgICAgIG5leHQgPSBuZXh0Lm5leHQ7CiAgICAgICAgICBpZiAoIW9wdGlvbmFsKCcoJywgbmV4dCkpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBMb29rcyBsaWtlIGFzc2VydCBleHByZXNzaW9uIC4uLiBmYWxsIHRocm91Z2ggdG8gaW5zZXJ0IGNvbW1hCiAgICAgICAgfSBlbHNlIGlmICghbmV4dC5pc0lkZW50aWZpZXIgJiYgIW9wdGlvbmFsKCd0aGlzJywgbmV4dCkpIHsKICAgICAgICAgIC8vIEFuIGlkZW50aWZpZXIgdGhhdCB3YXNuJ3QgYW4gaW5pdGlhbGl6ZXIuIEJyZWFrLgogICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChvcHRpb25hbCgndGhpcycsIG5leHQpKSB7CiAgICAgICAgICAgIG5leHQgPSBuZXh0Lm5leHQ7CiAgICAgICAgICAgIGlmICghb3B0aW9uYWwoJy4nLCBuZXh0KSkgewogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG5leHQgPSBuZXh0Lm5leHQ7CiAgICAgICAgICAgIGlmICghbmV4dC5pc0lkZW50aWZpZXIgJiYgIW9wdGlvbmFsKCdhc3NlcnQnLCBuZXh0KSkgewogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBuZXh0ID0gbmV4dC5uZXh0OwogICAgICAgICAgaWYgKCFvcHRpb25hbCgnPScsIG5leHQpKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgLy8gTG9va3MgbGlrZSBmaWVsZCBhc3NpZ25tZW50Li4uIGZhbGwgdGhyb3VnaCB0byBpbnNlcnQgY29tbWEKICAgICAgICB9CiAgICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IENvbnNpZGVyIGVuaGFuY2luZyB0aGlzIHRvIGluZGljYXRlIHRoYXQgd2UgYXJlCiAgICAgICAgLy8gZXhwZWN0aW5nIG9uZSBvZiBgLGAgb3IgYDtgIG9yIGB7YAogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgIHRva2VuLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQWZ0ZXJCdXRHb3Qud2l0aEFyZ3VtZW50cygnLCcpKTsKICAgICAgICBuZXh0ID0gcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljVG9rZW4odG9rZW4sIFRva2VuVHlwZS5DT01NQSk7CiAgICAgIH0KICAgIH0KICAgIG1heVBhcnNlRnVuY3Rpb25FeHByZXNzaW9ucyA9IG9sZDsKICAgIGxpc3RlbmVyLmVuZEluaXRpYWxpemVycyhjb3VudCwgYmVnaW4sIHRva2VuLm5leHQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBpbml0aWFsaXplckxpc3RFbnRyeToKICAvLy8gICAnc3VwZXInICgnLicgaWRlbnRpZmllcik/IGFyZ3VtZW50cyB8CiAgLy8vICAgZmllbGRJbml0aWFsaXplciB8CiAgLy8vICAgYXNzZXJ0aW9uCiAgLy8vIDsKICAvLy8KICAvLy8gZmllbGRJbml0aWFsaXplcjoKICAvLy8gICAoJ3RoaXMnICcuJyk/IGlkZW50aWZpZXIgJz0nIGNvbmRpdGlvbmFsRXhwcmVzc2lvbiBjYXNjYWRlU2VjdGlvbioKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUluaXRpYWxpemVyKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGxpc3RlbmVyLmJlZ2luSW5pdGlhbGl6ZXIobmV4dCk7CiAgICBUb2tlbiBiZWZvcmVFeHByZXNzaW9uID0gdG9rZW47CiAgICBpZiAob3B0aW9uYWwoJ2Fzc2VydCcsIG5leHQpKSB7CiAgICAgIHRva2VuID0gcGFyc2VBc3NlcnQodG9rZW4sIEFzc2VydC5Jbml0aWFsaXplcik7CiAgICAgIGxpc3RlbmVyLmVuZEluaXRpYWxpemVyKHRva2VuLm5leHQpOwogICAgICByZXR1cm4gdG9rZW47CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCdzdXBlcicsIG5leHQpKSB7CiAgICAgIHJldHVybiBwYXJzZVN1cGVySW5pdGlhbGl6ZXJFeHByZXNzaW9uKHRva2VuKTsKICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ3RoaXMnLCBuZXh0KSkgewogICAgICB0b2tlbiA9IG5leHQ7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBpZiAob3B0aW9uYWwoJy4nLCBuZXh0KSkgewogICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICBpZiAobmV4dC5pc0lkZW50aWZpZXIpIHsKICAgICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICAgIHRva2VuID0gaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcigKICAgICAgICAgICAgICB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQuZmllbGRJbml0aWFsaXplcik7CiAgICAgICAgfQogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIGlmIChvcHRpb25hbCgnPScsIG5leHQpKSB7CiAgICAgICAgICByZXR1cm4gcGFyc2VJbml0aWFsaXplckV4cHJlc3Npb25SZXN0KGJlZm9yZUV4cHJlc3Npb24pOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAob3B0aW9uYWwoJygnLCBuZXh0KSkgewogICAgICAgIHRva2VuID0gcGFyc2VJbml0aWFsaXplckV4cHJlc3Npb25SZXN0KGJlZm9yZUV4cHJlc3Npb24pOwogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIGlmIChvcHRpb25hbCgneycsIG5leHQpIHx8IG9wdGlvbmFsKCc9PicsIG5leHQpKSB7CiAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICAgIG5leHQsIGZhc3RhLm1lc3NhZ2VSZWRpcmVjdGluZ0NvbnN0cnVjdG9yV2l0aEJvZHkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdG9rZW47CiAgICAgIH0KICAgICAgLy8gUmVjb3ZlcnkKICAgICAgaWYgKG9wdGlvbmFsKCd0aGlzJywgdG9rZW4pKSB7CiAgICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IENvbnNpZGVyIGEgYmV0dGVyIGVycm9yIG1lc3NhZ2UgaW5kaWNhdGluZyB0aGF0CiAgICAgICAgLy8gYHRoaXMuPGZpZWxkbmFtZT49YCBpcyBleHBlY3RlZC4KICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJy4nKSk7CiAgICAgICAgcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljVG9rZW4odG9rZW4sIFRva2VuVHlwZS5QRVJJT0QpOwogICAgICAgIHRva2VuID0gcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbi5uZXh0KTsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgfQogICAgICAvLyBGYWxsIHRocm91Z2ggdG8gcmVjb3ZlcnkKICAgIH0gZWxzZSBpZiAobmV4dC5pc0lkZW50aWZpZXIpIHsKICAgICAgVG9rZW4gbmV4dDIgPSBuZXh0Lm5leHQ7CiAgICAgIGlmIChvcHRpb25hbCgnPScsIG5leHQyKSkgewogICAgICAgIHJldHVybiBwYXJzZUluaXRpYWxpemVyRXhwcmVzc2lvblJlc3QodG9rZW4pOwogICAgICB9CiAgICAgIC8vIFJlY292ZXJ5OiBJZiB0aGlzIGxvb2tzIGxpa2UgYW4gZXhwcmVzc2lvbiwKICAgICAgLy8gdGhlbiBmYWxsIHRocm91Z2ggdG8gaW5zZXJ0IHRoZSBMSFMgYW5kIGA9YCBvZiB0aGUgYXNzaWdubWVudCwKICAgICAgLy8gb3RoZXJ3aXNlIGluc2VydCBhbiBgPWAgYW5kIHN5bnRoZXRpYyBpZGVudGlmaWVyLgogICAgICBpZiAoIW5leHQyLmlzT3BlcmF0b3IgJiYgIW9wdGlvbmFsKCcuJywgbmV4dDIpKSB7CiAgICAgICAgdG9rZW4gPSByZXdyaXRlci5pbnNlcnRTeW50aGV0aWNUb2tlbihuZXh0LCBUb2tlblR5cGUuRVEpOwogICAgICAgIHRva2VuID0gaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbiwgSWRlbnRpZmllckNvbnRleHQuZXhwcmVzc2lvbiwKICAgICAgICAgICAgbWVzc2FnZTogZmFzdGEubWVzc2FnZU1pc3NpbmdBc3NpZ25tZW50SW5Jbml0aWFsaXplciwKICAgICAgICAgICAgbWVzc2FnZU9uVG9rZW46IG5leHQpOwogICAgICAgIHJldHVybiBwYXJzZUluaXRpYWxpemVyRXhwcmVzc2lvblJlc3QoYmVmb3JlRXhwcmVzc2lvbik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIFJlY292ZXJ5OiBJbnNlcnQgYSBzeW50aGV0aWMgYXNzaWdubWVudC4KICAgICAgdG9rZW4gPSBpbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKAogICAgICAgICAgdG9rZW4sIElkZW50aWZpZXJDb250ZXh0LmZpZWxkSW5pdGlhbGl6ZXIsCiAgICAgICAgICBtZXNzYWdlOiBmYXN0YS5tZXNzYWdlRXhwZWN0ZWRBbkluaXRpYWxpemVyLCBtZXNzYWdlT25Ub2tlbjogdG9rZW4pOwogICAgICB0b2tlbiA9IHJld3JpdGVyLmluc2VydFN5bnRoZXRpY1Rva2VuKHRva2VuLCBUb2tlblR5cGUuRVEpOwogICAgICB0b2tlbiA9IHJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4pOwogICAgICByZXR1cm4gcGFyc2VJbml0aWFsaXplckV4cHJlc3Npb25SZXN0KGJlZm9yZUV4cHJlc3Npb24pOwogICAgfQogICAgLy8gUmVjb3Zlcnk6CiAgICAvLyBJbnNlcnQgYSBzeW50aGV0aWMgaWRlbnRpZmllciBhbmQgYXNzaWdubWVudCBvcGVyYXRvcgogICAgLy8gdG8gZW5zdXJlIHRoYXQgdGhlIGV4cHJlc3Npb24gaXMgaW5kZWVkIGFuIGFzc2lnbm1lbnQuCiAgICAvLyBGYWlsaW5nIHRvIGRvIHNvIGNhdXNlcyB0aGlzIHRlc3QgdG8gZmFpbDoKICAgIC8vIHBrZy9mcm9udF9lbmQvdGVzdGNhc2VzL3JlZ3Jlc3MvaXNzdWVfMzExOTIuZGFydAogICAgLy8gVE9ETyhkYW5ydWJlbCk6IEludmVzdGlnYXRlIGJldHRlciByZWNvdmVyeS4KICAgIHRva2VuID0gaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcigKICAgICAgICBiZWZvcmVFeHByZXNzaW9uLCBJZGVudGlmaWVyQ29udGV4dC5maWVsZEluaXRpYWxpemVyLAogICAgICAgIG1lc3NhZ2U6IGZhc3RhLm1lc3NhZ2VNaXNzaW5nQXNzaWdubWVudEluSW5pdGlhbGl6ZXIpOwogICAgcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljVG9rZW4odG9rZW4sIFRva2VuVHlwZS5FUSk7CiAgICByZXR1cm4gcGFyc2VJbml0aWFsaXplckV4cHJlc3Npb25SZXN0KGJlZm9yZUV4cHJlc3Npb24pOwogIH0KCiAgLy8vIFBhcnNlIHRoZSBgc3VwZXJgIGluaXRpYWxpemVyOgogIC8vLyBgYGAKICAvLy8gICAnc3VwZXInICgnLicgaWRlbnRpZmllcik/IGFyZ3VtZW50cyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlU3VwZXJJbml0aWFsaXplckV4cHJlc3Npb24oZmluYWwgVG9rZW4gc3RhcnQpIHsKICAgIFRva2VuIHRva2VuID0gc3RhcnQubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnc3VwZXInLCB0b2tlbikpOwogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAob3B0aW9uYWwoJy4nLCBuZXh0KSkgewogICAgICB0b2tlbiA9IG5leHQ7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBpZiAobmV4dC5raW5kICE9IElERU5USUZJRVJfVE9LRU4pIHsKICAgICAgICBuZXh0ID0gSWRlbnRpZmllckNvbnRleHQuZXhwcmVzc2lvbkNvbnRpbnVhdGlvbgogICAgICAgICAgICAuZW5zdXJlSWRlbnRpZmllcih0b2tlbiwgdGhpcyk7CiAgICAgIH0KICAgICAgdG9rZW4gPSBuZXh0OwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIH0KICAgIGlmICghb3B0aW9uYWwoJygnLCBuZXh0KSkgewogICAgICAvLyBSZWNvdmVyeQogICAgICBpZiAob3B0aW9uYWwoJz8uJywgbmV4dCkpIHsKICAgICAgICAvLyBBbiBlcnJvciBmb3IgYHN1cGVyPy5gIGlzIHJlcG9ydGVkIGluIHBhcnNlU3VwZXJFeHByZXNzaW9uLgogICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICBpZiAoIW5leHQuaXNJZGVudGlmaWVyKSB7CiAgICAgICAgICAvLyBJbnNlcnQgYSBzeW50aGV0aWMgaWRlbnRpZmllciBidXQgZG9uJ3QgcmVwb3J0IGFub3RoZXIgZXJyb3IuCiAgICAgICAgICBuZXh0ID0gcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbik7CiAgICAgICAgfQogICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgfQogICAgICBpZiAob3B0aW9uYWwoJz0nLCBuZXh0KSkgewogICAgICAgIGlmIChvcHRpb25hbCgnc3VwZXInLCB0b2tlbikpIHsKICAgICAgICAgIC8vIHBhcnNlRXhwcmVzc2lvbiB3aWxsIHJlcG9ydCBlcnJvciBvbiBhc3NpZ25tZW50IHRvIHN1cGVyCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgdG9rZW4sIGZhc3RhLm1lc3NhZ2VGaWVsZEluaXRpYWxpemVkT3V0c2lkZURlY2xhcmluZ0NsYXNzKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbmFsKCcoJywgbmV4dCkpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQWZ0ZXJCdXRHb3Qud2l0aEFyZ3VtZW50cygnKCcpKTsKICAgICAgICByZXdyaXRlci5pbnNlcnRQYXJlbnModG9rZW4sIGZhbHNlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHBhcnNlSW5pdGlhbGl6ZXJFeHByZXNzaW9uUmVzdChzdGFydCk7CiAgfQoKICBUb2tlbiBwYXJzZUluaXRpYWxpemVyRXhwcmVzc2lvblJlc3QoVG9rZW4gdG9rZW4pIHsKICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKHRva2VuKTsKICAgIGxpc3RlbmVyLmVuZEluaXRpYWxpemVyKHRva2VuLm5leHQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIElmIHRoZSBuZXh0IHRva2VuIGlzIGFuIG9wZW5pbmcgY3VybHkgYnJhY2UsIHJldHVybiBpdC4gT3RoZXJ3aXNlLCB1c2UgdGhlCiAgLy8vIGdpdmVuIFt0ZW1wbGF0ZV0gb3IgW2Jsb2NrS2luZF0gdG8gcmVwb3J0IGFuIGVycm9yLCBpbnNlcnQgYW4gb3BlbmluZyBhbmQKICAvLy8gYSBjbG9zaW5nIGN1cmx5IGJyYWNlLCBhbmQgcmV0dXJuIHRoZSBuZXdseSBpbnNlcnRlZCBvcGVuaW5nIGN1cmx5IGJyYWNlLgogIC8vLyBJZiAgW3RlbXBsYXRlXSBhbmQgW2Jsb2NrS2luZF0gYXJlIGBudWxsYCwgdGhlbiB1c2UKICAvLy8gYSBkZWZhdWx0IGVycm9yIG1lc3NhZ2UgaW5zdGVhZC4KICBUb2tlbiBlbnN1cmVCbG9jayhUb2tlbiB0b2tlbiwKICAgICAgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+IHRlbXBsYXRlLCBTdHJpbmcgYmxvY2tLaW5kKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgneycsIG5leHQpKSByZXR1cm4gbmV4dDsKICAgIGlmICh0ZW1wbGF0ZSA9PSBudWxsKSB7CiAgICAgIGlmIChibG9ja0tpbmQgPT0gbnVsbCkgewogICAgICAgIC8vIFRPRE8oZGFucnViZWwpOiByZW5hbWUgRXhwZWN0ZWRCdXRHb3QgdG8gRXhwZWN0ZWRCZWZvcmUKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJ3snKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IHJlbmFtZSBFeHBlY3RlZENsYXNzT3JNaXhpbkJvZHkKICAgICAgICAvLyAgdG8gRXhwZWN0ZWREZWNsYXJhdGlvbk9yQ2xhdXNlQm9keQogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IodG9rZW4sCiAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRDbGFzc09yTWl4aW5Cb2R5LndpdGhBcmd1bWVudHMoYmxvY2tLaW5kKSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IobmV4dCwgdGVtcGxhdGUud2l0aEFyZ3VtZW50cyhuZXh0KSk7CiAgICB9CiAgICByZXR1cm4gaW5zZXJ0QmxvY2sodG9rZW4pOwogIH0KCiAgVG9rZW4gaW5zZXJ0QmxvY2soVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgQmVnaW5Ub2tlbiBiZWdpbkdyb3VwID0gcmV3cml0ZXIuaW5zZXJ0VG9rZW4odG9rZW4sCiAgICAgICAgbmV3IFN5bnRoZXRpY0JlZ2luVG9rZW4oVG9rZW5UeXBlLk9QRU5fQ1VSTFlfQlJBQ0tFVCwgbmV4dC5vZmZzZXQpKTsKICAgIFRva2VuIGVuZEdyb3VwID0gcmV3cml0ZXIuaW5zZXJ0VG9rZW4oYmVnaW5Hcm91cCwKICAgICAgICBuZXcgU3ludGhldGljVG9rZW4oVG9rZW5UeXBlLkNMT1NFX0NVUkxZX0JSQUNLRVQsIG5leHQub2Zmc2V0KSk7CiAgICBiZWdpbkdyb3VwLmVuZEdyb3VwID0gZW5kR3JvdXA7CiAgICByZXR1cm4gYmVnaW5Hcm91cDsKICB9CgogIC8vLyBJZiB0aGUgbmV4dCB0b2tlbiBpcyBhIGNsb3NpbmcgcGFyZW50aGVzaXMsIHJldHVybiBpdC4KICAvLy8gT3RoZXJ3aXNlLCByZXBvcnQgYW4gZXJyb3IgYW5kIHJldHVybiB0aGUgY2xvc2luZyBwYXJlbnRoZXNpcwogIC8vLyBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBvcGVuIHBhcmVudGhlc2lzLgogIFRva2VuIGVuc3VyZUNsb3NlUGFyZW4oVG9rZW4gdG9rZW4sIFRva2VuIG9wZW5QYXJlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAob3B0aW9uYWwoJyknLCBuZXh0KSkgewogICAgICByZXR1cm4gbmV4dDsKICAgIH0KICAgIGlmIChvcGVuUGFyZW4uZW5kR3JvdXAuaXNTeW50aGV0aWMpIHsKICAgICAgLy8gU2Nhbm5lciBoYXMgYWxyZWFkeSByZXBvcnRlZCBhIG1pc3NpbmcgYClgIGVycm9yLAogICAgICAvLyBidXQgcGxhY2VkIHRoZSBgKWAgaW4gdGhlIHdyb25nIGxvY2F0aW9uLCBzbyBtb3ZlIGl0LgogICAgICByZXR1cm4gcmV3cml0ZXIubW92ZVN5bnRoZXRpYyh0b2tlbiwgb3BlblBhcmVuLmVuZEdyb3VwKTsKICAgIH0KCiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogUGFzcyBpbiBjb250ZXh0IGZvciBiZXR0ZXIgZXJyb3IgbWVzc2FnZS4KICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgbmV4dCwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCcpJykpOwoKICAgIC8vIFNjYW5uZXIgZ3VhcmFudGVlcyBhIGNsb3NpbmcgcGFyZW50aGVzaXMKICAgIC8vIFRPRE8oZGFucnViZWwpOiBJbXByb3ZlIHJlY292ZXJ5IGJ5IGhhdmluZyBjYWxsZXJzIHBhcnNlIHRva2VucwogICAgLy8gYmV0d2VlbiBgdG9rZW5gIGFuZCBgb3BlblBhcmVuLmVuZEdyb3VwYC4KICAgIHJldHVybiBvcGVuUGFyZW4uZW5kR3JvdXA7CiAgfQoKICAvLy8gSWYgdGhlIG5leHQgdG9rZW4gaXMgYSBjb2xvbiwgcmV0dXJuIGl0LiBPdGhlcndpc2UsIHJlcG9ydCBhbgogIC8vLyBlcnJvciwgaW5zZXJ0IGEgc3ludGhldGljIGNvbG9uLCBhbmQgcmV0dXJuIHRoZSBpbnNlcnRlZCBjb2xvbi4KICBUb2tlbiBlbnN1cmVDb2xvbihUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAob3B0aW9uYWwoJzonLCBuZXh0KSkgcmV0dXJuIG5leHQ7CiAgICBNZXNzYWdlIG1lc3NhZ2UgPSBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJzonKTsKICAgIFRva2VuIG5ld1Rva2VuID0gbmV3IFN5bnRoZXRpY1Rva2VuKFRva2VuVHlwZS5DT0xPTiwgbmV4dC5jaGFyT2Zmc2V0KTsKICAgIHJldHVybiByZXdyaXRlQW5kUmVjb3Zlcih0b2tlbiwgbWVzc2FnZSwgbmV3VG9rZW4pOwogIH0KCiAgLy8vIElmIHRoZSB0b2tlbiBhZnRlciBbdG9rZW5dIGlzIGEgbm90IGxpdGVyYWwgc3RyaW5nLAogIC8vLyB0aGVuIGluc2VydCBhIHN5bnRoZXRpYyBsaXRlcmFsIHN0cmluZy4KICAvLy8gQ2FsbCBgcGFyc2VMaXRlcmFsU3RyaW5nYCBhbmQgcmV0dXJuIHRoZSByZXN1bHQuCiAgVG9rZW4gZW5zdXJlTGl0ZXJhbFN0cmluZyhUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAoIWlkZW50aWNhbChuZXh0LmtpbmQsIFNUUklOR19UT0tFTikpIHsKICAgICAgTWVzc2FnZSBtZXNzYWdlID0gZmFzdGEudGVtcGxhdGVFeHBlY3RlZFN0cmluZy53aXRoQXJndW1lbnRzKG5leHQpOwogICAgICBUb2tlbiBuZXdUb2tlbiA9CiAgICAgICAgICBuZXcgU3ludGhldGljU3RyaW5nVG9rZW4oVG9rZW5UeXBlLlNUUklORywgJyIiJywgbmV4dC5jaGFyT2Zmc2V0LCAwKTsKICAgICAgcmV3cml0ZUFuZFJlY292ZXIodG9rZW4sIG1lc3NhZ2UsIG5ld1Rva2VuKTsKICAgIH0KICAgIHJldHVybiBwYXJzZUxpdGVyYWxTdHJpbmcodG9rZW4pOwogIH0KCiAgLy8vIElmIHRoZSB0b2tlbiBhZnRlciBbdG9rZW5dIGlzIGEgc2VtaS1jb2xvbiwgcmV0dXJuIGl0LgogIC8vLyBPdGhlcndpc2UsIHJlcG9ydCBhbiBlcnJvciwgaW5zZXJ0IGEgc3ludGhldGljIHNlbWktY29sb24sCiAgLy8vIGFuZCByZXR1cm4gdGhlIGluc2VydGVkIHNlbWktY29sb24uCiAgVG9rZW4gZW5zdXJlU2VtaWNvbG9uKFRva2VuIHRva2VuKSB7CiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogT25jZSBhbGwgZXhwZWN0KCc7Jy4uLikgY2FsbCBzaXRlcyBoYXZlIGJlZW4gY29udmVydGVkCiAgICAvLyB0byB1c2UgdGhpcyBtZXRob2QsIHJlbW92ZSBzaW1pbGFyIHNlbWljb2xvbiByZWNvdmVyeSBjb2RlCiAgICAvLyBmcm9tIHRoZSBoYW5kbGVFcnJvciBtZXRob2QgaW4gZWxlbWVudF9saXN0ZW5lci5kYXJ0LgogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAob3B0aW9uYWwoJzsnLCBuZXh0KSkgcmV0dXJuIG5leHQ7CgogICAgLy8gRmluZCBhIHRva2VuIG9uIHRoZSBzYW1lIGxpbmUgYXMgd2hlcmUgdGhlICc7JyBzaG91bGQgYmUgaW5zZXJ0ZWQuCiAgICAvLyBSZXBvcnRpbmcgdGhlIGVycm9yIG9uIHRoaXMgdG9rZW4gbWFrZXMgaXQgZWFzaWVyCiAgICAvLyBmb3IgdXNlcnMgdG8gdW5kZXJzdGFuZCBhbmQgZml4IHRoZSBlcnJvci4KICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoZmluZFByZXZpb3VzTm9uWmVyb0xlbmd0aFRva2VuKHRva2VuKSwKICAgICAgICBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQWZ0ZXJCdXRHb3Qud2l0aEFyZ3VtZW50cygnOycpKTsKICAgIHJldHVybiByZXdyaXRlci5pbnNlcnRTeW50aGV0aWNUb2tlbih0b2tlbiwgVG9rZW5UeXBlLlNFTUlDT0xPTik7CiAgfQoKICAvLy8gUmVwb3J0IGFuIGVycm9yIGF0IHRoZSB0b2tlbiBhZnRlciBbdG9rZW5dIHRoYXQgaGFzIHRoZSBnaXZlbiBbbWVzc2FnZV0uCiAgLy8vIEluc2VydCB0aGUgW25ld1Rva2VuXSBhZnRlciBbdG9rZW5dIGFuZCByZXR1cm4gW25ld1Rva2VuXS4KICBUb2tlbiByZXdyaXRlQW5kUmVjb3ZlcihUb2tlbiB0b2tlbiwgTWVzc2FnZSBtZXNzYWdlLCBUb2tlbiBuZXdUb2tlbikgewogICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0b2tlbi5uZXh0LCBtZXNzYWdlKTsKICAgIHJldHVybiByZXdyaXRlci5pbnNlcnRUb2tlbih0b2tlbiwgbmV3VG9rZW4pOwogIH0KCiAgLy8vIFJlcGxhY2UgdGhlIHRva2VuIGFmdGVyIFt0b2tlbl0gd2l0aCBgW2AgZm9sbG93ZWQgYnkgYF1gCiAgLy8vIGFuZCByZXR1cm4gW3Rva2VuXS4KICBUb2tlbiByZXdyaXRlU3F1YXJlQnJhY2tldHMoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdbXScsIG5leHQpKTsKICAgIFRva2VuIHJlcGxhY2VtZW50ID0gbGluaygKICAgICAgICBuZXcgQmVnaW5Ub2tlbihUb2tlblR5cGUuT1BFTl9TUVVBUkVfQlJBQ0tFVCwgbmV4dC5vZmZzZXQpLAogICAgICAgIG5ldyBUb2tlbihUb2tlblR5cGUuQ0xPU0VfU1FVQVJFX0JSQUNLRVQsIG5leHQub2Zmc2V0ICsgMSkpOwogICAgcmV3cml0ZXIucmVwbGFjZVRva2VuRm9sbG93aW5nKHRva2VuLCByZXBsYWNlbWVudCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gUmVwb3J0IHRoZSBnaXZlbiB0b2tlbiBhcyB1bmV4cGVjdGVkIGFuZCByZXR1cm4gdGhlIG5leHQgdG9rZW4gaWYgdGhlIG5leHQKICAvLy8gdG9rZW4gaXMgb25lIG9mIHRoZSBbZXhwZWN0ZWROZXh0XSwgb3RoZXJ3aXNlIGp1c3QgcmV0dXJuIHRoZSBnaXZlbiB0b2tlbi4KICBUb2tlbiBza2lwVW5leHBlY3RlZFRva2VuT3B0KFRva2VuIHRva2VuLCBMaXN0PFN0cmluZz4gZXhwZWN0ZWROZXh0KSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChuZXh0LmtleXdvcmQgPT0gbnVsbCkgewogICAgICBmaW5hbCBTdHJpbmcgbmV4dFZhbHVlID0gbmV4dC5uZXh0LnN0cmluZ1ZhbHVlOwogICAgICBmb3IgKFN0cmluZyBleHBlY3RlZFZhbHVlIGluIGV4cGVjdGVkTmV4dCkgewogICAgICAgIGlmIChpZGVudGljYWwobmV4dFZhbHVlLCBleHBlY3RlZFZhbHVlKSkgewogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbihuZXh0LCBmYXN0YS50ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbik7CiAgICAgICAgICByZXR1cm4gbmV4dDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlTmF0aXZlQ2xhdXNlKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuYXRpdmVUb2tlbiA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnbmF0aXZlJywgbmF0aXZlVG9rZW4pKTsKICAgIGJvb2wgaGFzTmFtZSA9IGZhbHNlOwogICAgaWYgKHRva2VuLm5leHQua2luZCA9PSBTVFJJTkdfVE9LRU4pIHsKICAgICAgaGFzTmFtZSA9IHRydWU7CiAgICAgIHRva2VuID0gcGFyc2VMaXRlcmFsU3RyaW5nKHRva2VuKTsKICAgIH0KICAgIGxpc3RlbmVyLmhhbmRsZU5hdGl2ZUNsYXVzZShuYXRpdmVUb2tlbiwgaGFzTmFtZSk7CiAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgIG5hdGl2ZVRva2VuLCBmYXN0YS5tZXNzYWdlTmF0aXZlQ2xhdXNlU2hvdWxkQmVBbm5vdGF0aW9uKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHNraXBDbGFzc09yTWl4aW5PckV4dGVuc2lvbkJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIC8vIFRoZSBzY2FubmVyIGVuc3VyZXMgdGhhdCBge2AgYWx3YXlzIGhhcyBhIGNsb3NpbmcgYH1gLgogICAgcmV0dXJuIGVuc3VyZUJsb2NrKHRva2VuLCBudWxsLCBudWxsKTsKICB9CgogIC8vLyBgYGAKICAvLy8gY2xhc3NCb2R5OgogIC8vLyAgICd7JyBjbGFzc01lbWJlciogJ30nCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VDbGFzc09yTWl4aW5PckV4dGVuc2lvbkJvZHkoCiAgICAgIFRva2VuIHRva2VuLCBEZWNsYXJhdGlvbktpbmQga2luZCwgU3RyaW5nIGVuY2xvc2luZ0RlY2xhcmF0aW9uTmFtZSkgewogICAgVG9rZW4gYmVnaW4gPSB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ3snLCB0b2tlbikpOwogICAgbGlzdGVuZXIuYmVnaW5DbGFzc09yTWl4aW5Cb2R5KGtpbmQsIHRva2VuKTsKICAgIGludCBjb3VudCA9IDA7CiAgICB3aGlsZSAobm90RW9mT3JWYWx1ZSgnfScsIHRva2VuLm5leHQpKSB7CiAgICAgIHRva2VuID0gcGFyc2VDbGFzc09yTWl4aW5PckV4dGVuc2lvbk1lbWJlckltcGwoCiAgICAgICAgICB0b2tlbiwga2luZCwgZW5jbG9zaW5nRGVjbGFyYXRpb25OYW1lKTsKICAgICAgKytjb3VudDsKICAgIH0KICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnfScsIHRva2VuKSk7CiAgICBsaXN0ZW5lci5lbmRDbGFzc09yTWl4aW5Cb2R5KGtpbmQsIGNvdW50LCBiZWdpbiwgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgYm9vbCBpc1VuYXJ5TWludXMoVG9rZW4gdG9rZW4pID0+CiAgICAgIHRva2VuLmtpbmQgPT0gSURFTlRJRklFUl9UT0tFTiAmJgogICAgICB0b2tlbi5sZXhlbWUgPT0gJ3VuYXJ5JyAmJgogICAgICBvcHRpb25hbCgnLScsIHRva2VuLm5leHQpOwoKICAvLy8gUGFyc2UgYSBjbGFzcyBtZW1iZXIuCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIGlzIG9ubHkgaW52b2tlZCBmcm9tIG91dHNpZGUgdGhlIHBhcnNlci4gQXMgYSByZXN1bHQsIHRoaXMKICAvLy8gbWV0aG9kIHRha2VzIHRoZSBuZXh0IHRva2VuIHRvIGJlIGNvbnN1bWVkIHJhdGhlciB0aGFuIHRoZSBsYXN0IGNvbnN1bWVkCiAgLy8vIHRva2VuIGFuZCByZXR1cm5zIHRoZSB0b2tlbiBhZnRlciB0aGUgbGFzdCBjb25zdW1lZCB0b2tlbiByYXRoZXIgdGhhbiB0aGUKICAvLy8gbGFzdCBjb25zdW1lZCB0b2tlbi4KICBUb2tlbiBwYXJzZUNsYXNzTWVtYmVyKFRva2VuIHRva2VuLCBTdHJpbmcgY2xhc3NOYW1lKSB7CiAgICByZXR1cm4gcGFyc2VDbGFzc09yTWl4aW5PckV4dGVuc2lvbk1lbWJlckltcGwoCiAgICAgICAgICAgIHN5bnRoZXRpY1ByZXZpb3VzVG9rZW4odG9rZW4pLCBEZWNsYXJhdGlvbktpbmQuQ2xhc3MsIGNsYXNzTmFtZSkKICAgICAgICAubmV4dDsKICB9CgogIC8vLyBQYXJzZSBhIG1peGluIG1lbWJlci4KICAvLy8KICAvLy8gVGhpcyBtZXRob2QgaXMgb25seSBpbnZva2VkIGZyb20gb3V0c2lkZSB0aGUgcGFyc2VyLiBBcyBhIHJlc3VsdCwgdGhpcwogIC8vLyBtZXRob2QgdGFrZXMgdGhlIG5leHQgdG9rZW4gdG8gYmUgY29uc3VtZWQgcmF0aGVyIHRoYW4gdGhlIGxhc3QgY29uc3VtZWQKICAvLy8gdG9rZW4gYW5kIHJldHVybnMgdGhlIHRva2VuIGFmdGVyIHRoZSBsYXN0IGNvbnN1bWVkIHRva2VuIHJhdGhlciB0aGFuIHRoZQogIC8vLyBsYXN0IGNvbnN1bWVkIHRva2VuLgogIFRva2VuIHBhcnNlTWl4aW5NZW1iZXIoVG9rZW4gdG9rZW4sIFN0cmluZyBtaXhpbk5hbWUpIHsKICAgIHJldHVybiBwYXJzZUNsYXNzT3JNaXhpbk9yRXh0ZW5zaW9uTWVtYmVySW1wbCgKICAgICAgICAgICAgc3ludGhldGljUHJldmlvdXNUb2tlbih0b2tlbiksIERlY2xhcmF0aW9uS2luZC5NaXhpbiwgbWl4aW5OYW1lKQogICAgICAgIC5uZXh0OwogIH0KCiAgLy8vIFBhcnNlIGFuIGV4dGVuc2lvbiBtZW1iZXIuCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIGlzIG9ubHkgaW52b2tlZCBmcm9tIG91dHNpZGUgdGhlIHBhcnNlci4gQXMgYSByZXN1bHQsIHRoaXMKICAvLy8gbWV0aG9kIHRha2VzIHRoZSBuZXh0IHRva2VuIHRvIGJlIGNvbnN1bWVkIHJhdGhlciB0aGFuIHRoZSBsYXN0IGNvbnN1bWVkCiAgLy8vIHRva2VuIGFuZCByZXR1cm5zIHRoZSB0b2tlbiBhZnRlciB0aGUgbGFzdCBjb25zdW1lZCB0b2tlbiByYXRoZXIgdGhhbiB0aGUKICAvLy8gbGFzdCBjb25zdW1lZCB0b2tlbi4KICBUb2tlbiBwYXJzZUV4dGVuc2lvbk1lbWJlcihUb2tlbiB0b2tlbiwgU3RyaW5nIGV4dGVuc2lvbk5hbWUpIHsKICAgIHJldHVybiBwYXJzZUNsYXNzT3JNaXhpbk9yRXh0ZW5zaW9uTWVtYmVySW1wbChzeW50aGV0aWNQcmV2aW91c1Rva2VuKHRva2VuKSwKICAgICAgICAgICAgRGVjbGFyYXRpb25LaW5kLkV4dGVuc2lvbiwgZXh0ZW5zaW9uTmFtZSkKICAgICAgICAubmV4dDsKICB9CgogIC8vLyBgYGAKICAvLy8gY2xhc3NNZW1iZXI6CiAgLy8vICAgZmllbGREZWNsYXJhdGlvbiB8CiAgLy8vICAgY29uc3RydWN0b3JEZWNsYXJhdGlvbiB8CiAgLy8vICAgbWV0aG9kRGVjbGFyYXRpb24KICAvLy8gOwogIC8vLwogIC8vLyBtaXhpbk1lbWJlcjoKICAvLy8gICBmaWVsZERlY2xhcmF0aW9uIHwKICAvLy8gICBtZXRob2REZWNsYXJhdGlvbgogIC8vLyA7CiAgLy8vCiAgLy8vIGV4dGVuc2lvbk1lbWJlcjoKICAvLy8gICBzdGF0aWNGaWVsZERlY2xhcmF0aW9uIHwKICAvLy8gICBtZXRob2REZWNsYXJhdGlvbgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlQ2xhc3NPck1peGluT3JFeHRlbnNpb25NZW1iZXJJbXBsKAogICAgICBUb2tlbiB0b2tlbiwgRGVjbGFyYXRpb25LaW5kIGtpbmQsIFN0cmluZyBlbmNsb3NpbmdEZWNsYXJhdGlvbk5hbWUpIHsKICAgIFRva2VuIGJlZm9yZVN0YXJ0ID0gdG9rZW4gPSBwYXJzZU1ldGFkYXRhU3Rhcih0b2tlbik7CgogICAgVG9rZW4gY292YXJpYW50VG9rZW47CiAgICBUb2tlbiBleHRlcm5hbFRva2VuOwogICAgVG9rZW4gbGF0ZVRva2VuOwogICAgVG9rZW4gc3RhdGljVG9rZW47CiAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3Q7CgogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAoaXNNb2RpZmllcihuZXh0KSkgewogICAgICBpZiAob3B0aW9uYWwoJ2V4dGVybmFsJywgbmV4dCkpIHsKICAgICAgICBleHRlcm5hbFRva2VuID0gdG9rZW4gPSBuZXh0OwogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICB9CiAgICAgIGlmIChpc01vZGlmaWVyKG5leHQpKSB7CiAgICAgICAgaWYgKG9wdGlvbmFsKCdzdGF0aWMnLCBuZXh0KSkgewogICAgICAgICAgc3RhdGljVG9rZW4gPSB0b2tlbiA9IG5leHQ7CiAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCdjb3ZhcmlhbnQnLCBuZXh0KSkgewogICAgICAgICAgY292YXJpYW50VG9rZW4gPSB0b2tlbiA9IG5leHQ7CiAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICB9CiAgICAgICAgaWYgKGlzTW9kaWZpZXIobmV4dCkpIHsKICAgICAgICAgIGlmIChvcHRpb25hbCgnZmluYWwnLCBuZXh0KSkgewogICAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QgPSB0b2tlbiA9IG5leHQ7CiAgICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25hbCgndmFyJywgbmV4dCkpIHsKICAgICAgICAgICAgdmFyRmluYWxPckNvbnN0ID0gdG9rZW4gPSBuZXh0OwogICAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ2NvbnN0JywgbmV4dCkgJiYgY292YXJpYW50VG9rZW4gPT0gbnVsbCkgewogICAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QgPSB0b2tlbiA9IG5leHQ7CiAgICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25hbCgnbGF0ZScsIG5leHQpKSB7CiAgICAgICAgICAgIGxhdGVUb2tlbiA9IHRva2VuID0gbmV4dDsKICAgICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgICAgIGlmIChpc01vZGlmaWVyKG5leHQpICYmIG9wdGlvbmFsKCdmaW5hbCcsIG5leHQpKSB7CiAgICAgICAgICAgICAgdmFyRmluYWxPckNvbnN0ID0gdG9rZW4gPSBuZXh0OwogICAgICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoaXNNb2RpZmllcihuZXh0KSkgewogICAgICAgICAgICBNb2RpZmllclJlY292ZXJ5Q29udGV4dCBjb250ZXh0ID0gbmV3IE1vZGlmaWVyUmVjb3ZlcnlDb250ZXh0KHRoaXMpCiAgICAgICAgICAgICAgLi5jb3ZhcmlhbnRUb2tlbiA9IGNvdmFyaWFudFRva2VuCiAgICAgICAgICAgICAgLi5leHRlcm5hbFRva2VuID0gZXh0ZXJuYWxUb2tlbgogICAgICAgICAgICAgIC4ubGF0ZVRva2VuID0gbGF0ZVRva2VuCiAgICAgICAgICAgICAgLi5zdGF0aWNUb2tlbiA9IHN0YXRpY1Rva2VuCiAgICAgICAgICAgICAgLi52YXJGaW5hbE9yQ29uc3QgPSB2YXJGaW5hbE9yQ29uc3Q7CgogICAgICAgICAgICB0b2tlbiA9IGNvbnRleHQucGFyc2VDbGFzc01lbWJlck1vZGlmaWVycyh0b2tlbik7CiAgICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwoKICAgICAgICAgICAgY292YXJpYW50VG9rZW4gPSBjb250ZXh0LmNvdmFyaWFudFRva2VuOwogICAgICAgICAgICBleHRlcm5hbFRva2VuID0gY29udGV4dC5leHRlcm5hbFRva2VuOwogICAgICAgICAgICBsYXRlVG9rZW4gPSBjb250ZXh0LmxhdGVUb2tlbjsKICAgICAgICAgICAgc3RhdGljVG9rZW4gPSBjb250ZXh0LnN0YXRpY1Rva2VuOwogICAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QgPSBjb250ZXh0LnZhckZpbmFsT3JDb25zdDsKCiAgICAgICAgICAgIGNvbnRleHQgPSBudWxsOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGxpc3RlbmVyLmJlZ2luTWVtYmVyKCk7CgogICAgVG9rZW4gYmVmb3JlVHlwZSA9IHRva2VuOwogICAgVHlwZUluZm8gdHlwZUluZm8gPSBjb21wdXRlVHlwZSh0b2tlbiwgZmFsc2UsIHRydWUpOwogICAgdG9rZW4gPSB0eXBlSW5mby5za2lwVHlwZSh0b2tlbik7CiAgICBuZXh0ID0gdG9rZW4ubmV4dDsKCiAgICBUb2tlbiBnZXRPclNldDsKICAgIGlmIChuZXh0LnR5cGUgIT0gVG9rZW5UeXBlLklERU5USUZJRVIpIHsKICAgICAgU3RyaW5nIHZhbHVlID0gbmV4dC5zdHJpbmdWYWx1ZTsKICAgICAgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2dldCcpIHx8IGlkZW50aWNhbCh2YWx1ZSwgJ3NldCcpKSB7CiAgICAgICAgaWYgKG5leHQubmV4dC5pc0lkZW50aWZpZXIpIHsKICAgICAgICAgIGdldE9yU2V0ID0gdG9rZW4gPSBuZXh0OwogICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgfQogICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBjb250aW51ZSBwYXJzaW5nIGBnZXRgIG9yIGBzZXRgIGFzIGFuIGlkZW50aWZpZXIuCiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnZmFjdG9yeScpKSB7CiAgICAgICAgVG9rZW4gbmV4dDIgPSBuZXh0Lm5leHQ7CiAgICAgICAgaWYgKG5leHQyLmlzSWRlbnRpZmllciB8fCBuZXh0Mi5pc01vZGlmaWVyKSB7CiAgICAgICAgICBpZiAoYmVmb3JlVHlwZSAhPSB0b2tlbikgewogICAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKHRva2VuLCBmYXN0YS5tZXNzYWdlVHlwZUJlZm9yZUZhY3RvcnkpOwogICAgICAgICAgfQogICAgICAgICAgdG9rZW4gPSBwYXJzZUZhY3RvcnlNZXRob2QodG9rZW4sIGtpbmQsIGJlZm9yZVN0YXJ0LCBleHRlcm5hbFRva2VuLAogICAgICAgICAgICAgIHN0YXRpY1Rva2VuID8/IGNvdmFyaWFudFRva2VuLCB2YXJGaW5hbE9yQ29uc3QpOwogICAgICAgICAgbGlzdGVuZXIuZW5kTWVtYmVyKCk7CiAgICAgICAgICByZXR1cm4gdG9rZW47CiAgICAgICAgfQogICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBjb250aW51ZSBwYXJzaW5nIGBmYWN0b3J5YCBhcyBhbiBpZGVudGlmaWVyLgogICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ29wZXJhdG9yJykpIHsKICAgICAgICBUb2tlbiBuZXh0MiA9IG5leHQubmV4dDsKICAgICAgICBUeXBlUGFyYW1PckFyZ0luZm8gdHlwZVBhcmFtID0gY29tcHV0ZVR5cGVQYXJhbU9yQXJnKG5leHQpOwogICAgICAgIC8vIGBvcGVyYXRvcmAgY2FuIGJlIHVzZWQgYXMgYW4gaWRlbnRpZmllciBhcyBpbgogICAgICAgIC8vIGBpbnQgb3BlcmF0b3I8VD4oKWAgb3IgYGludCBvcGVyYXRvciA9IDJgCiAgICAgICAgaWYgKG5leHQyLmlzVXNlckRlZmluYWJsZU9wZXJhdG9yICYmIHR5cGVQYXJhbSA9PSBub1R5cGVQYXJhbU9yQXJnKSB7CiAgICAgICAgICB0b2tlbiA9IHBhcnNlTWV0aG9kKAogICAgICAgICAgICAgIGJlZm9yZVN0YXJ0LAogICAgICAgICAgICAgIGV4dGVybmFsVG9rZW4sCiAgICAgICAgICAgICAgc3RhdGljVG9rZW4sCiAgICAgICAgICAgICAgY292YXJpYW50VG9rZW4sCiAgICAgICAgICAgICAgbGF0ZVRva2VuLAogICAgICAgICAgICAgIHZhckZpbmFsT3JDb25zdCwKICAgICAgICAgICAgICBiZWZvcmVUeXBlLAogICAgICAgICAgICAgIHR5cGVJbmZvLAogICAgICAgICAgICAgIGdldE9yU2V0LAogICAgICAgICAgICAgIHRva2VuLm5leHQsCiAgICAgICAgICAgICAga2luZCwKICAgICAgICAgICAgICBlbmNsb3NpbmdEZWNsYXJhdGlvbk5hbWUpOwogICAgICAgICAgbGlzdGVuZXIuZW5kTWVtYmVyKCk7CiAgICAgICAgICByZXR1cm4gdG9rZW47CiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25hbCgnPT09JywgbmV4dDIpIHx8CiAgICAgICAgICAgIG9wdGlvbmFsKCchPT0nLCBuZXh0MikgfHwKICAgICAgICAgICAgKG5leHQyLmlzT3BlcmF0b3IgJiYKICAgICAgICAgICAgICAgICFvcHRpb25hbCgnPScsIG5leHQyKSAmJgogICAgICAgICAgICAgICAgIW9wdGlvbmFsKCc8JywgbmV4dDIpKSkgewogICAgICAgICAgLy8gUmVjb3Zlcnk6IEludmFsaWQgb3BlcmF0b3IKICAgICAgICAgIHJldHVybiBwYXJzZUludmFsaWRPcGVyYXRvckRlY2xhcmF0aW9uKAogICAgICAgICAgICAgIGJlZm9yZVN0YXJ0LAogICAgICAgICAgICAgIGV4dGVybmFsVG9rZW4sCiAgICAgICAgICAgICAgc3RhdGljVG9rZW4sCiAgICAgICAgICAgICAgY292YXJpYW50VG9rZW4sCiAgICAgICAgICAgICAgbGF0ZVRva2VuLAogICAgICAgICAgICAgIHZhckZpbmFsT3JDb25zdCwKICAgICAgICAgICAgICBiZWZvcmVUeXBlLAogICAgICAgICAgICAgIGtpbmQpOwogICAgICAgIH0gZWxzZSBpZiAoaXNVbmFyeU1pbnVzKG5leHQyKSkgewogICAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICAgIHRva2VuID0gcGFyc2VNZXRob2QoCiAgICAgICAgICAgICAgYmVmb3JlU3RhcnQsCiAgICAgICAgICAgICAgZXh0ZXJuYWxUb2tlbiwKICAgICAgICAgICAgICBzdGF0aWNUb2tlbiwKICAgICAgICAgICAgICBjb3ZhcmlhbnRUb2tlbiwKICAgICAgICAgICAgICBsYXRlVG9rZW4sCiAgICAgICAgICAgICAgdmFyRmluYWxPckNvbnN0LAogICAgICAgICAgICAgIGJlZm9yZVR5cGUsCiAgICAgICAgICAgICAgdHlwZUluZm8sCiAgICAgICAgICAgICAgZ2V0T3JTZXQsCiAgICAgICAgICAgICAgdG9rZW4ubmV4dCwKICAgICAgICAgICAgICBraW5kLAogICAgICAgICAgICAgIGVuY2xvc2luZ0RlY2xhcmF0aW9uTmFtZSk7CiAgICAgICAgICBsaXN0ZW5lci5lbmRNZW1iZXIoKTsKICAgICAgICAgIHJldHVybiB0b2tlbjsKICAgICAgICB9CiAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIGNvbnRpbnVlIHBhcnNpbmcgYG9wZXJhdG9yYCBhcyBhbiBpZGVudGlmaWVyLgogICAgICB9IGVsc2UgaWYgKCFuZXh0LmlzSWRlbnRpZmllciB8fAogICAgICAgICAgKGlkZW50aWNhbCh2YWx1ZSwgJ3R5cGVkZWYnKSAmJgogICAgICAgICAgICAgIHRva2VuID09IGJlZm9yZVN0YXJ0ICYmCiAgICAgICAgICAgICAgbmV4dC5uZXh0LmlzSWRlbnRpZmllcikpIHsKICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgIHJldHVybiByZWNvdmVyRnJvbUludmFsaWRNZW1iZXIoCiAgICAgICAgICAgIHRva2VuLAogICAgICAgICAgICBiZWZvcmVTdGFydCwKICAgICAgICAgICAgZXh0ZXJuYWxUb2tlbiwKICAgICAgICAgICAgc3RhdGljVG9rZW4sCiAgICAgICAgICAgIGNvdmFyaWFudFRva2VuLAogICAgICAgICAgICBsYXRlVG9rZW4sCiAgICAgICAgICAgIHZhckZpbmFsT3JDb25zdCwKICAgICAgICAgICAgYmVmb3JlVHlwZSwKICAgICAgICAgICAgdHlwZUluZm8sCiAgICAgICAgICAgIGdldE9yU2V0LAogICAgICAgICAgICBraW5kLAogICAgICAgICAgICBlbmNsb3NpbmdEZWNsYXJhdGlvbk5hbWUpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHR5cGVJbmZvID09IG5vVHlwZSAmJiB2YXJGaW5hbE9yQ29uc3QgPT0gbnVsbCkgewogICAgICBUb2tlbiBuZXh0MiA9IG5leHQubmV4dDsKICAgICAgaWYgKG5leHQyLmlzVXNlckRlZmluYWJsZU9wZXJhdG9yICYmIG5leHQyLmVuZEdyb3VwID09IG51bGwpIHsKICAgICAgICBTdHJpbmcgdmFsdWUgPSBuZXh0Mi5uZXh0LnN0cmluZ1ZhbHVlOwogICAgICAgIGlmIChpZGVudGljYWwodmFsdWUsICcoJykgfHwKICAgICAgICAgICAgaWRlbnRpY2FsKHZhbHVlLCAneycpIHx8CiAgICAgICAgICAgIGlkZW50aWNhbCh2YWx1ZSwgJz0+JykpIHsKICAgICAgICAgIC8vIFJlY292ZXJ5OiBNaXNzaW5nIGBvcGVyYXRvcmAga2V5d29yZAogICAgICAgICAgcmV0dXJuIHBhcnNlSW52YWxpZE9wZXJhdG9yRGVjbGFyYXRpb24oCiAgICAgICAgICAgICAgYmVmb3JlU3RhcnQsCiAgICAgICAgICAgICAgZXh0ZXJuYWxUb2tlbiwKICAgICAgICAgICAgICBzdGF0aWNUb2tlbiwKICAgICAgICAgICAgICBjb3ZhcmlhbnRUb2tlbiwKICAgICAgICAgICAgICBsYXRlVG9rZW4sCiAgICAgICAgICAgICAgdmFyRmluYWxPckNvbnN0LAogICAgICAgICAgICAgIGJlZm9yZVR5cGUsCiAgICAgICAgICAgICAga2luZCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgLy8gQXQgdGhpcyBwb2ludCwgdG9rZW4gaXMgYmVmb3JlIHRoZSBuYW1lLCBhbmQgbmV4dCBpcyB0aGUgbmFtZQogICAgbmV4dCA9IG5leHQubmV4dDsKICAgIFN0cmluZyB2YWx1ZSA9IG5leHQuc3RyaW5nVmFsdWU7CiAgICBpZiAoZ2V0T3JTZXQgIT0gbnVsbCB8fAogICAgICAgIGlkZW50aWNhbCh2YWx1ZSwgJygnKSB8fAogICAgICAgIGlkZW50aWNhbCh2YWx1ZSwgJ3snKSB8fAogICAgICAgIGlkZW50aWNhbCh2YWx1ZSwgJzwnKSB8fAogICAgICAgIGlkZW50aWNhbCh2YWx1ZSwgJy4nKSB8fAogICAgICAgIGlkZW50aWNhbCh2YWx1ZSwgJz0+JykpIHsKICAgICAgdG9rZW4gPSBwYXJzZU1ldGhvZCgKICAgICAgICAgIGJlZm9yZVN0YXJ0LAogICAgICAgICAgZXh0ZXJuYWxUb2tlbiwKICAgICAgICAgIHN0YXRpY1Rva2VuLAogICAgICAgICAgY292YXJpYW50VG9rZW4sCiAgICAgICAgICBsYXRlVG9rZW4sCiAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QsCiAgICAgICAgICBiZWZvcmVUeXBlLAogICAgICAgICAgdHlwZUluZm8sCiAgICAgICAgICBnZXRPclNldCwKICAgICAgICAgIHRva2VuLm5leHQsCiAgICAgICAgICBraW5kLAogICAgICAgICAgZW5jbG9zaW5nRGVjbGFyYXRpb25OYW1lKTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChnZXRPclNldCAhPSBudWxsKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgICAgZ2V0T3JTZXQsIGZhc3RhLnRlbXBsYXRlRXh0cmFuZW91c01vZGlmaWVyKTsKICAgICAgfQogICAgICB0b2tlbiA9IHBhcnNlRmllbGRzKAogICAgICAgICAgYmVmb3JlU3RhcnQsCiAgICAgICAgICBleHRlcm5hbFRva2VuLAogICAgICAgICAgc3RhdGljVG9rZW4sCiAgICAgICAgICBjb3ZhcmlhbnRUb2tlbiwKICAgICAgICAgIGxhdGVUb2tlbiwKICAgICAgICAgIHZhckZpbmFsT3JDb25zdCwKICAgICAgICAgIGJlZm9yZVR5cGUsCiAgICAgICAgICB0eXBlSW5mbywKICAgICAgICAgIHRva2VuLm5leHQsCiAgICAgICAgICBraW5kKTsKICAgIH0KICAgIGxpc3RlbmVyLmVuZE1lbWJlcigpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VNZXRob2QoCiAgICAgIFRva2VuIGJlZm9yZVN0YXJ0LAogICAgICBUb2tlbiBleHRlcm5hbFRva2VuLAogICAgICBUb2tlbiBzdGF0aWNUb2tlbiwKICAgICAgVG9rZW4gY292YXJpYW50VG9rZW4sCiAgICAgIFRva2VuIGxhdGVUb2tlbiwKICAgICAgVG9rZW4gdmFyRmluYWxPckNvbnN0LAogICAgICBUb2tlbiBiZWZvcmVUeXBlLAogICAgICBUeXBlSW5mbyB0eXBlSW5mbywKICAgICAgVG9rZW4gZ2V0T3JTZXQsCiAgICAgIFRva2VuIG5hbWUsCiAgICAgIERlY2xhcmF0aW9uS2luZCBraW5kLAogICAgICBTdHJpbmcgZW5jbG9zaW5nRGVjbGFyYXRpb25OYW1lKSB7CiAgICBpZiAobGF0ZVRva2VuICE9IG51bGwpIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGxhdGVUb2tlbiwgZmFzdGEudGVtcGxhdGVFeHRyYW5lb3VzTW9kaWZpZXIpOwogICAgfQogICAgYm9vbCBpc09wZXJhdG9yID0gZmFsc2U7CiAgICBpZiAoZ2V0T3JTZXQgPT0gbnVsbCAmJiBvcHRpb25hbCgnb3BlcmF0b3InLCBuYW1lKSkgewogICAgICBUb2tlbiBvcGVyYXRvciA9IG5hbWUubmV4dDsKICAgICAgaWYgKG9wZXJhdG9yLmlzT3BlcmF0b3IgfHwKICAgICAgICAgIGlkZW50aWNhbChvcGVyYXRvci5raW5kLCBFUV9FUV9FUV9UT0tFTikgfHwKICAgICAgICAgIGlkZW50aWNhbChvcGVyYXRvci5raW5kLCBCQU5HX0VRX0VRX1RPS0VOKSB8fAogICAgICAgICAgaXNVbmFyeU1pbnVzKG9wZXJhdG9yKSkgewogICAgICAgIGlzT3BlcmF0b3IgPSB0cnVlOwogICAgICB9CiAgICB9CgogICAgaWYgKHN0YXRpY1Rva2VuICE9IG51bGwpIHsKICAgICAgaWYgKGlzT3BlcmF0b3IpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKHN0YXRpY1Rva2VuLCBmYXN0YS5tZXNzYWdlU3RhdGljT3BlcmF0b3IpOwogICAgICAgIHN0YXRpY1Rva2VuID0gbnVsbDsKICAgICAgfQogICAgfSBlbHNlIGlmIChjb3ZhcmlhbnRUb2tlbiAhPSBudWxsKSB7CiAgICAgIGlmIChnZXRPclNldCA9PSBudWxsIHx8IG9wdGlvbmFsKCdnZXQnLCBnZXRPclNldCkpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKGNvdmFyaWFudFRva2VuLCBmYXN0YS5tZXNzYWdlQ292YXJpYW50TWVtYmVyKTsKICAgICAgICBjb3ZhcmlhbnRUb2tlbiA9IG51bGw7CiAgICAgIH0KICAgIH0KICAgIGlmICh2YXJGaW5hbE9yQ29uc3QgIT0gbnVsbCkgewogICAgICBpZiAob3B0aW9uYWwoJ2NvbnN0JywgdmFyRmluYWxPckNvbnN0KSkgewogICAgICAgIGlmIChnZXRPclNldCAhPSBudWxsKSB7CiAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgICAgIHZhckZpbmFsT3JDb25zdCwgZmFzdGEudGVtcGxhdGVFeHRyYW5lb3VzTW9kaWZpZXIpOwogICAgICAgICAgdmFyRmluYWxPckNvbnN0ID0gbnVsbDsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ3ZhcicsIHZhckZpbmFsT3JDb25zdCkpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKHZhckZpbmFsT3JDb25zdCwgZmFzdGEubWVzc2FnZVZhclJldHVyblR5cGUpOwogICAgICAgIHZhckZpbmFsT3JDb25zdCA9IG51bGw7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KG9wdGlvbmFsKCdmaW5hbCcsIHZhckZpbmFsT3JDb25zdCkpOwogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICAgIHZhckZpbmFsT3JDb25zdCwgZmFzdGEudGVtcGxhdGVFeHRyYW5lb3VzTW9kaWZpZXIpOwogICAgICAgIHZhckZpbmFsT3JDb25zdCA9IG51bGw7CiAgICAgIH0KICAgIH0KCiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogQ29uc2lkZXIgcGFyc2luZyB0aGUgbmFtZSBiZWZvcmUgY2FsbGluZyBiZWdpbk1ldGhvZAogICAgLy8gcmF0aGVyIHRoYW4gcGFzc2luZyB0aGUgbmFtZSB0b2tlbiBpbnRvIGJlZ2luTWV0aG9kLgogICAgbGlzdGVuZXIuYmVnaW5NZXRob2QoZXh0ZXJuYWxUb2tlbiwgc3RhdGljVG9rZW4sIGNvdmFyaWFudFRva2VuLAogICAgICAgIHZhckZpbmFsT3JDb25zdCwgZ2V0T3JTZXQsIG5hbWUpOwoKICAgIFRva2VuIHRva2VuID0gdHlwZUluZm8ucGFyc2VUeXBlKGJlZm9yZVR5cGUsIHRoaXMpOwogICAgYXNzZXJ0KHRva2VuLm5leHQgPT0gKGdldE9yU2V0ID8/IG5hbWUpKTsKICAgIHRva2VuID0gZ2V0T3JTZXQgPz8gdG9rZW47CgogICAgaWYgKGlzT3BlcmF0b3IpIHsKICAgICAgdG9rZW4gPSBwYXJzZU9wZXJhdG9yTmFtZSh0b2tlbik7CiAgICB9IGVsc2UgewogICAgICB0b2tlbiA9IGVuc3VyZUlkZW50aWZpZXIodG9rZW4sIElkZW50aWZpZXJDb250ZXh0Lm1ldGhvZERlY2xhcmF0aW9uKTsKICAgICAgaWYgKGdldE9yU2V0ID09IG51bGwpIHsKICAgICAgICB0b2tlbiA9IHBhcnNlUXVhbGlmaWVkUmVzdE9wdCgKICAgICAgICAgICAgdG9rZW4sIElkZW50aWZpZXJDb250ZXh0Lm1ldGhvZERlY2xhcmF0aW9uQ29udGludWF0aW9uKTsKICAgICAgfQogICAgfQoKICAgIGJvb2wgaXNHZXR0ZXIgPSBmYWxzZTsKICAgIGlmIChnZXRPclNldCA9PSBudWxsKSB7CiAgICAgIHRva2VuID0gcGFyc2VNZXRob2RUeXBlVmFyKHRva2VuKTsKICAgIH0gZWxzZSB7CiAgICAgIGlzR2V0dGVyID0gb3B0aW9uYWwoImdldCIsIGdldE9yU2V0KTsKICAgICAgbGlzdGVuZXIuaGFuZGxlTm9UeXBlVmFyaWFibGVzKHRva2VuLm5leHQpOwogICAgfQoKICAgIFRva2VuIGJlZm9yZVBhcmFtID0gdG9rZW47CiAgICBUb2tlbiBiZWZvcmVJbml0aWFsaXplcnMgPSBwYXJzZUdldHRlck9yRm9ybWFsUGFyYW1ldGVycygKICAgICAgICB0b2tlbiwKICAgICAgICBuYW1lLAogICAgICAgIGlzR2V0dGVyLAogICAgICAgIHN0YXRpY1Rva2VuICE9IG51bGwKICAgICAgICAgICAgPyBNZW1iZXJLaW5kLlN0YXRpY01ldGhvZAogICAgICAgICAgICA6IE1lbWJlcktpbmQuTm9uU3RhdGljTWV0aG9kKTsKICAgIHRva2VuID0gcGFyc2VJbml0aWFsaXplcnNPcHQoYmVmb3JlSW5pdGlhbGl6ZXJzKTsKICAgIGlmICh0b2tlbiA9PSBiZWZvcmVJbml0aWFsaXplcnMpIGJlZm9yZUluaXRpYWxpemVycyA9IG51bGw7CgogICAgQXN5bmNNb2RpZmllciBzYXZlZEFzeW5jTW9kaWZpZXIgPSBhc3luY1N0YXRlOwogICAgVG9rZW4gYXN5bmNUb2tlbiA9IHRva2VuLm5leHQ7CiAgICB0b2tlbiA9IHBhcnNlQXN5bmNNb2RpZmllck9wdCh0b2tlbik7CiAgICBpZiAoZ2V0T3JTZXQgIT0gbnVsbCAmJiAhaW5QbGFpblN5bmMgJiYgb3B0aW9uYWwoInNldCIsIGdldE9yU2V0KSkgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKGFzeW5jVG9rZW4sIGZhc3RhLm1lc3NhZ2VTZXR0ZXJOb3RTeW5jKTsKICAgIH0KICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKGV4dGVybmFsVG9rZW4gIT0gbnVsbCkgewogICAgICBpZiAoIW9wdGlvbmFsKCc7JywgbmV4dCkpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VFeHRlcm5hbE1ldGhvZFdpdGhCb2R5KTsKICAgICAgfQogICAgfQogICAgaWYgKG9wdGlvbmFsKCc9JywgbmV4dCkpIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlUmVkaXJlY3Rpb25Jbk5vbkZhY3RvcnkpOwogICAgICB0b2tlbiA9IHBhcnNlUmVkaXJlY3RpbmdGYWN0b3J5Qm9keSh0b2tlbik7CiAgICB9IGVsc2UgewogICAgICB0b2tlbiA9IHBhcnNlRnVuY3Rpb25Cb2R5KHRva2VuLCBmYWxzZSwKICAgICAgICAgIChzdGF0aWNUb2tlbiA9PSBudWxsIHx8IGV4dGVybmFsVG9rZW4gIT0gbnVsbCkgJiYgaW5QbGFpblN5bmMpOwogICAgfQogICAgYXN5bmNTdGF0ZSA9IHNhdmVkQXN5bmNNb2RpZmllcjsKICAgIGJvb2wgaXNDb25zdHJ1Y3RvciA9IG5hbWUubGV4ZW1lID09IGVuY2xvc2luZ0RlY2xhcmF0aW9uTmFtZTsKICAgIGlmICghaXNDb25zdHJ1Y3RvciAmJgogICAgICAgIChvcHRpb25hbCgnLicsIG5hbWUubmV4dCkgfHwgYmVmb3JlSW5pdGlhbGl6ZXJzICE9IG51bGwpKSB7CiAgICAgIC8vIFJlY292ZXJ5OiBUaGUgbmFtZSBkb2VzIG5vdCBtYXRjaCwKICAgICAgLy8gYnV0IHRoZSBuYW1lIGlzIHByZWZpeGVkIG9yIHRoZSBkZWNsYXJhdGlvbiBjb250YWlucyBpbml0aWFsaXplcnMuCiAgICAgIGlzQ29uc3RydWN0b3IgPSB0cnVlOwogICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogcmVwb3J0IGludmFsaWQgY29uc3RydWN0b3IgbmFtZQogICAgICAvLyBDdXJyZW50bHkgbXVsdGlwbGUgbGlzdGVuZXJzIHJlcG9ydCB0aGlzIGVycm9yLCBidXQgdGhhdCBsb2dpYyBzaG91bGQKICAgICAgLy8gYmUgcmVtb3ZlZCBhbmQgdGhlIGVycm9yIHJlcG9ydGVkIGhlcmUgaW5zdGVhZC4KICAgIH0KICAgIGlmIChpc0NvbnN0cnVjdG9yKSB7CiAgICAgIC8vCiAgICAgIC8vIGNvbnN0cnVjdG9yCiAgICAgIC8vCiAgICAgIGlmIChnZXRPclNldCAhPSBudWxsKSB7CiAgICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IHJlcG9ydCBhbiBlcnJvciBvbiBnZXQvc2V0IHRva2VuCiAgICAgICAgLy8gVGhpcyBpcyBjdXJyZW50bHkgcmVwb3J0ZWQgYnkgbGlzdGVuZXJzIG90aGVyIHRoYW4gQXN0QnVpbGRlci4KICAgICAgICAvLyBJdCBzaG91bGQgYmUgcmVwb3J0ZWQgaGVyZSByYXRoZXIgdGhhbiBpbiB0aGUgbGlzdGVuZXJzLgogICAgICB9CiAgICAgIHN3aXRjaCAoa2luZCkgewogICAgICAgIGNhc2UgRGVjbGFyYXRpb25LaW5kLkNsYXNzOgogICAgICAgICAgbGlzdGVuZXIuZW5kQ2xhc3NDb25zdHJ1Y3RvcihnZXRPclNldCwgYmVmb3JlU3RhcnQubmV4dCwKICAgICAgICAgICAgICBiZWZvcmVQYXJhbS5uZXh0LCBiZWZvcmVJbml0aWFsaXplcnM/Lm5leHQsIHRva2VuKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRGVjbGFyYXRpb25LaW5kLk1peGluOgogICAgICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IE1peGluIGNvbnN0cnVjdG9ycyBhcmUgaW52YWxpZC4gQ3VycmVudGx5IG11bHRpcGxlCiAgICAgICAgICAvLyBsaXN0ZW5lcnMgcmVwb3J0IHRoaXMgZXJyb3IsIGJ1dCB0aGF0IGxvZ2ljIHNob3VsZCBiZSByZW1vdmVkCiAgICAgICAgICAvLyBhbmQgdGhlIGVycm9yIHJlcG9ydGVkIGhlcmUgaW5zdGVhZC4KICAgICAgICAgIGxpc3RlbmVyLmVuZE1peGluQ29uc3RydWN0b3IoZ2V0T3JTZXQsIGJlZm9yZVN0YXJ0Lm5leHQsCiAgICAgICAgICAgICAgYmVmb3JlUGFyYW0ubmV4dCwgYmVmb3JlSW5pdGlhbGl6ZXJzPy5uZXh0LCB0b2tlbik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIERlY2xhcmF0aW9uS2luZC5FeHRlbnNpb246CiAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICAgIG5hbWUsIGZhc3RhLm1lc3NhZ2VFeHRlbnNpb25EZWNsYXJlc0NvbnN0cnVjdG9yKTsKICAgICAgICAgIGxpc3RlbmVyLmVuZEV4dGVuc2lvbkNvbnN0cnVjdG9yKGdldE9yU2V0LCBiZWZvcmVTdGFydC5uZXh0LAogICAgICAgICAgICAgIGJlZm9yZVBhcmFtLm5leHQsIGJlZm9yZUluaXRpYWxpemVycz8ubmV4dCwgdG9rZW4pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBEZWNsYXJhdGlvbktpbmQuVG9wTGV2ZWw6CiAgICAgICAgICB0aHJvdyAiSW50ZXJuYWwgZXJyb3I6IFRvcExldmVsIG1ldGhvZC9jb25zdHJ1Y3Rvci4iOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vCiAgICAgIC8vIG1ldGhvZAogICAgICAvLwogICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICBjYXNlIERlY2xhcmF0aW9uS2luZC5DbGFzczoKICAgICAgICAgIGxpc3RlbmVyLmVuZENsYXNzTWV0aG9kKGdldE9yU2V0LCBiZWZvcmVTdGFydC5uZXh0LCBiZWZvcmVQYXJhbS5uZXh0LAogICAgICAgICAgICAgIGJlZm9yZUluaXRpYWxpemVycz8ubmV4dCwgdG9rZW4pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBEZWNsYXJhdGlvbktpbmQuTWl4aW46CiAgICAgICAgICBsaXN0ZW5lci5lbmRNaXhpbk1ldGhvZChnZXRPclNldCwgYmVmb3JlU3RhcnQubmV4dCwgYmVmb3JlUGFyYW0ubmV4dCwKICAgICAgICAgICAgICBiZWZvcmVJbml0aWFsaXplcnM/Lm5leHQsIHRva2VuKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRGVjbGFyYXRpb25LaW5kLkV4dGVuc2lvbjoKICAgICAgICAgIGxpc3RlbmVyLmVuZEV4dGVuc2lvbk1ldGhvZChnZXRPclNldCwgYmVmb3JlU3RhcnQubmV4dCwKICAgICAgICAgICAgICBiZWZvcmVQYXJhbS5uZXh0LCBiZWZvcmVJbml0aWFsaXplcnM/Lm5leHQsIHRva2VuKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRGVjbGFyYXRpb25LaW5kLlRvcExldmVsOgogICAgICAgICAgdGhyb3cgIkludGVybmFsIGVycm9yOiBUb3BMZXZlbCBtZXRob2QvY29uc3RydWN0b3IuIjsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZUZhY3RvcnlNZXRob2QoVG9rZW4gdG9rZW4sIERlY2xhcmF0aW9uS2luZCBraW5kLCBUb2tlbiBiZWZvcmVTdGFydCwKICAgICAgVG9rZW4gZXh0ZXJuYWxUb2tlbiwgVG9rZW4gc3RhdGljT3JDb3ZhcmlhbnQsIFRva2VuIHZhckZpbmFsT3JDb25zdCkgewogICAgVG9rZW4gZmFjdG9yeUtleXdvcmQgPSB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2ZhY3RvcnknLCBmYWN0b3J5S2V5d29yZCkpOwoKICAgIGlmICghaXNWYWxpZFR5cGVSZWZlcmVuY2UodG9rZW4ubmV4dCkpIHsKICAgICAgLy8gUmVjb3ZlcnkKICAgICAgTW9kaWZpZXJSZWNvdmVyeUNvbnRleHQgY29udGV4dCA9IG5ldyBNb2RpZmllclJlY292ZXJ5Q29udGV4dCh0aGlzKQogICAgICAgIC4uZXh0ZXJuYWxUb2tlbiA9IGV4dGVybmFsVG9rZW4KICAgICAgICAuLnN0YXRpY09yQ292YXJpYW50ID0gc3RhdGljT3JDb3ZhcmlhbnQKICAgICAgICAuLnZhckZpbmFsT3JDb25zdCA9IHZhckZpbmFsT3JDb25zdDsKCiAgICAgIHRva2VuID0gY29udGV4dC5wYXJzZU1vZGlmaWVyc0FmdGVyRmFjdG9yeSh0b2tlbik7CgogICAgICBleHRlcm5hbFRva2VuID0gY29udGV4dC5leHRlcm5hbFRva2VuOwogICAgICBzdGF0aWNPckNvdmFyaWFudCA9IGNvbnRleHQuc3RhdGljVG9rZW4gPz8gY29udGV4dC5jb3ZhcmlhbnRUb2tlbjsKICAgICAgdmFyRmluYWxPckNvbnN0ID0gY29udGV4dC52YXJGaW5hbE9yQ29uc3Q7CgogICAgICBjb250ZXh0ID0gbnVsbDsKICAgIH0KCiAgICBpZiAoc3RhdGljT3JDb3ZhcmlhbnQgIT0gbnVsbCkgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgc3RhdGljT3JDb3ZhcmlhbnQsIGZhc3RhLnRlbXBsYXRlRXh0cmFuZW91c01vZGlmaWVyKTsKICAgIH0KICAgIGlmICh2YXJGaW5hbE9yQ29uc3QgIT0gbnVsbCAmJiAhb3B0aW9uYWwoJ2NvbnN0JywgdmFyRmluYWxPckNvbnN0KSkgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgdmFyRmluYWxPckNvbnN0LCBmYXN0YS50ZW1wbGF0ZUV4dHJhbmVvdXNNb2RpZmllcik7CiAgICAgIHZhckZpbmFsT3JDb25zdCA9IG51bGw7CiAgICB9CgogICAgbGlzdGVuZXIuYmVnaW5GYWN0b3J5TWV0aG9kKGJlZm9yZVN0YXJ0LCBleHRlcm5hbFRva2VuLCB2YXJGaW5hbE9yQ29uc3QpOwogICAgdG9rZW4gPSBlbnN1cmVJZGVudGlmaWVyKHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC5tZXRob2REZWNsYXJhdGlvbik7CiAgICB0b2tlbiA9IHBhcnNlUXVhbGlmaWVkUmVzdE9wdCgKICAgICAgICB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQubWV0aG9kRGVjbGFyYXRpb25Db250aW51YXRpb24pOwogICAgdG9rZW4gPSBwYXJzZU1ldGhvZFR5cGVWYXIodG9rZW4pOwogICAgdG9rZW4gPSBwYXJzZUZvcm1hbFBhcmFtZXRlcnNSZXF1aXJlZE9wdCh0b2tlbiwgTWVtYmVyS2luZC5GYWN0b3J5KTsKICAgIFRva2VuIGFzeW5jVG9rZW4gPSB0b2tlbi5uZXh0OwogICAgdG9rZW4gPSBwYXJzZUFzeW5jTW9kaWZpZXJPcHQodG9rZW4pOwogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAoIWluUGxhaW5TeW5jKSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoYXN5bmNUb2tlbiwgZmFzdGEubWVzc2FnZUZhY3RvcnlOb3RTeW5jKTsKICAgIH0KICAgIGlmIChvcHRpb25hbCgnPScsIG5leHQpKSB7CiAgICAgIGlmIChleHRlcm5hbFRva2VuICE9IG51bGwpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VFeHRlcm5hbEZhY3RvcnlSZWRpcmVjdGlvbik7CiAgICAgIH0KICAgICAgdG9rZW4gPSBwYXJzZVJlZGlyZWN0aW5nRmFjdG9yeUJvZHkodG9rZW4pOwogICAgfSBlbHNlIGlmIChleHRlcm5hbFRva2VuICE9IG51bGwpIHsKICAgICAgaWYgKCFvcHRpb25hbCgnOycsIG5leHQpKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlRXh0ZXJuYWxGYWN0b3J5V2l0aEJvZHkpOwogICAgICB9CiAgICAgIHRva2VuID0gcGFyc2VGdW5jdGlvbkJvZHkodG9rZW4sIGZhbHNlLCB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIGlmICh2YXJGaW5hbE9yQ29uc3QgIT0gbnVsbCAmJiAhb3B0aW9uYWwoJ25hdGl2ZScsIG5leHQpKSB7CiAgICAgICAgaWYgKG9wdGlvbmFsKCdjb25zdCcsIHZhckZpbmFsT3JDb25zdCkpIHsKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IodmFyRmluYWxPckNvbnN0LCBmYXN0YS5tZXNzYWdlQ29uc3RGYWN0b3J5KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdG9rZW4gPSBwYXJzZUZ1bmN0aW9uQm9keSh0b2tlbiwgZmFsc2UsIGZhbHNlKTsKICAgIH0KICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIERlY2xhcmF0aW9uS2luZC5DbGFzczoKICAgICAgICBsaXN0ZW5lci5lbmRDbGFzc0ZhY3RvcnlNZXRob2QoYmVmb3JlU3RhcnQubmV4dCwgZmFjdG9yeUtleXdvcmQsIHRva2VuKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBEZWNsYXJhdGlvbktpbmQuTWl4aW46CiAgICAgICAgbGlzdGVuZXIuZW5kTWl4aW5GYWN0b3J5TWV0aG9kKGJlZm9yZVN0YXJ0Lm5leHQsIGZhY3RvcnlLZXl3b3JkLCB0b2tlbik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgRGVjbGFyYXRpb25LaW5kLkV4dGVuc2lvbjoKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICBmYWN0b3J5S2V5d29yZCwgZmFzdGEubWVzc2FnZUV4dGVuc2lvbkRlY2xhcmVzQ29uc3RydWN0b3IpOwogICAgICAgIGxpc3RlbmVyLmVuZEV4dGVuc2lvbkZhY3RvcnlNZXRob2QoCiAgICAgICAgICAgIGJlZm9yZVN0YXJ0Lm5leHQsIGZhY3RvcnlLZXl3b3JkLCB0b2tlbik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgRGVjbGFyYXRpb25LaW5kLlRvcExldmVsOgogICAgICAgIHRocm93ICJJbnRlcm5hbCBlcnJvcjogVG9wTGV2ZWwgZmFjdG9yeS4iOwogICAgICAgIGJyZWFrOwogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VPcGVyYXRvck5hbWUoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGJlZm9yZVRva2VuID0gdG9rZW47CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ29wZXJhdG9yJywgdG9rZW4pKTsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG5leHQuaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3IpIHsKICAgICAgaWYgKGNvbXB1dGVUeXBlUGFyYW1PckFyZyh0b2tlbikgIT0gbm9UeXBlUGFyYW1PckFyZykgewogICAgICAgIC8vIGBvcGVyYXRvcmAgaXMgYmVpbmcgdXNlZCBhcyBhbiBpZGVudGlmaWVyLgogICAgICAgIC8vIEZvciBleGFtcGxlOiBgaW50IG9wZXJhdG9yPFQ+KGZvbykgPT4gMDtgCiAgICAgICAgbGlzdGVuZXIuaGFuZGxlSWRlbnRpZmllcih0b2tlbiwgSWRlbnRpZmllckNvbnRleHQubWV0aG9kRGVjbGFyYXRpb24pOwogICAgICAgIHJldHVybiB0b2tlbjsKICAgICAgfSBlbHNlIHsKICAgICAgICBsaXN0ZW5lci5oYW5kbGVPcGVyYXRvck5hbWUodG9rZW4sIG5leHQpOwogICAgICAgIHJldHVybiBuZXh0OwogICAgICB9CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCcoJywgbmV4dCkpIHsKICAgICAgcmV0dXJuIGVuc3VyZUlkZW50aWZpZXIoYmVmb3JlVG9rZW4sIElkZW50aWZpZXJDb250ZXh0Lm9wZXJhdG9yTmFtZSk7CiAgICB9IGVsc2UgaWYgKGlzVW5hcnlNaW51cyhuZXh0KSkgewogICAgICAvLyBSZWNvdmVyeQogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKG5leHQsIGZhc3RhLnRlbXBsYXRlVW5leHBlY3RlZFRva2VuKTsKICAgICAgbmV4dCA9IG5leHQubmV4dDsKICAgICAgbGlzdGVuZXIuaGFuZGxlT3BlcmF0b3JOYW1lKHRva2VuLCBuZXh0KTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9IGVsc2UgewogICAgICAvLyBSZWNvdmVyeQogICAgICAvLyBTY2FubmVyIHJlcG9ydHMgYW4gZXJyb3IgZm9yIGA9PT1gIGFuZCBgIT09YC4KICAgICAgaWYgKG5leHQudHlwZSAhPSBUb2tlblR5cGUuRVFfRVFfRVEgJiYKICAgICAgICAgIG5leHQudHlwZSAhPSBUb2tlblR5cGUuQkFOR19FUV9FUSkgewogICAgICAgIC8vIFRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgYW4gaW52YWxpZCBvcGVyYXRvciBuYW1lLgogICAgICAgIC8vIFJlcG9ydCB0aGUgZXJyb3IsIGFjY2VwdCB0aGUgaW52YWxpZCBvcGVyYXRvciBuYW1lLCBhbmQgbW92ZSBvbi4KICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKG5leHQsIGZhc3RhLnRlbXBsYXRlSW52YWxpZE9wZXJhdG9yKTsKICAgICAgfQogICAgICBsaXN0ZW5lci5oYW5kbGVJbnZhbGlkT3BlcmF0b3JOYW1lKHRva2VuLCBuZXh0KTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CiAgfQoKICBUb2tlbiBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgVG9rZW4gYmVnaW5Ub2tlbiA9IHRva2VuLm5leHQ7CiAgICBsaXN0ZW5lci5iZWdpbkZ1bmN0aW9uRXhwcmVzc2lvbihiZWdpblRva2VuKTsKICAgIHRva2VuID0gcGFyc2VGb3JtYWxQYXJhbWV0ZXJzUmVxdWlyZWRPcHQodG9rZW4sIE1lbWJlcktpbmQuTG9jYWwpOwogICAgdG9rZW4gPSBwYXJzZUFzeW5jT3B0Qm9keSh0b2tlbiwgdHJ1ZSwgZmFsc2UpOwogICAgbGlzdGVuZXIuZW5kRnVuY3Rpb25FeHByZXNzaW9uKGJlZ2luVG9rZW4sIHRva2VuLm5leHQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VGdW5jdGlvbkxpdGVyYWwoCiAgICAgIFRva2VuIHN0YXJ0LAogICAgICBUb2tlbiBiZWZvcmVOYW1lLAogICAgICBUb2tlbiBuYW1lLAogICAgICBUeXBlSW5mbyB0eXBlSW5mbywKICAgICAgVHlwZVBhcmFtT3JBcmdJbmZvIHR5cGVQYXJhbSwKICAgICAgSWRlbnRpZmllckNvbnRleHQgY29udGV4dCkgewogICAgVG9rZW4gZm9ybWFscyA9IHR5cGVQYXJhbS5wYXJzZVZhcmlhYmxlcyhuYW1lLCB0aGlzKTsKICAgIGxpc3RlbmVyLmJlZ2luTmFtZWRGdW5jdGlvbkV4cHJlc3Npb24oc3RhcnQubmV4dCk7CiAgICB0eXBlSW5mby5wYXJzZVR5cGUoc3RhcnQsIHRoaXMpOwogICAgcmV0dXJuIHBhcnNlTmFtZWRGdW5jdGlvblJlc3QoYmVmb3JlTmFtZSwgc3RhcnQubmV4dCwgZm9ybWFscywgdHJ1ZSk7CiAgfQoKICAvLy8gUGFyc2VzIHRoZSByZXN0IG9mIGEgbmFtZWQgZnVuY3Rpb24gZGVjbGFyYXRpb24gc3RhcnRpbmcgZnJvbSBpdHMgW25hbWVdCiAgLy8vIGJ1dCB0aGVuIHNraXBzIGFueSB0eXBlIHBhcmFtZXRlcnMgYW5kIGNvbnRpbnVlIHBhcnNpbmcgZnJvbSBbZm9ybWFsc10KICAvLy8gKHRoZSBmb3JtYWwgcGFyYW1ldGVycykuCiAgLy8vCiAgLy8vIElmIFtpc0Z1bmN0aW9uRXhwcmVzc2lvbl0gaXMgdHJ1ZSwgdGhpcyBtZXRob2QgcGFyc2VzIHRoZSByZXN0IG9mIG5hbWVkCiAgLy8vIGZ1bmN0aW9uIGV4cHJlc3Npb24gd2hpY2ggaXNuJ3QgbGVnYWwgc3ludGF4IGluIERhcnQuICBVc2VmdWwgZm9yCiAgLy8vIHJlY292ZXJpbmcgZnJvbSBKYXZhc2NyaXB0IGNvZGUgYmVpbmcgcGFzdGVkIGludG8gYSBEYXJ0IHByb2dyYW0sIGFzIGl0CiAgLy8vIHdpbGwgaW50ZXJwcmV0IGBmdW5jdGlvbiBmb28oKSB7fWAgYXMgYSBuYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uIHdpdGgKICAvLy8gcmV0dXJuIHR5cGUgYGZ1bmN0aW9uYCBhbmQgbmFtZSBgZm9vYC4KICAvLy8KICAvLy8gUHJlY29uZGl0aW9uOiB0aGUgcGFyc2VyIGhhcyBwcmV2aW91c2x5IGdlbmVyYXRlZCB0aGVzZSBldmVudHM6CiAgLy8vCiAgLy8vIC0gVHlwZSB2YXJpYWJsZXMuCiAgLy8vIC0gYGJlZ2luTG9jYWxGdW5jdGlvbkRlY2xhcmF0aW9uYCBpZiBbaXNGdW5jdGlvbkV4cHJlc3Npb25dIGlzIGZhbHNlLAogIC8vLyAgIG90aGVyd2lzZSBgYmVnaW5OYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbmAuCiAgLy8vIC0gUmV0dXJuIHR5cGUuCiAgVG9rZW4gcGFyc2VOYW1lZEZ1bmN0aW9uUmVzdCgKICAgICAgVG9rZW4gYmVmb3JlTmFtZSwgVG9rZW4gYmVnaW4sIFRva2VuIGZvcm1hbHMsIGJvb2wgaXNGdW5jdGlvbkV4cHJlc3Npb24pIHsKICAgIFRva2VuIHRva2VuID0gYmVmb3JlTmFtZS5uZXh0OwogICAgbGlzdGVuZXIuYmVnaW5GdW5jdGlvbk5hbWUodG9rZW4pOwogICAgdG9rZW4gPQogICAgICAgIGVuc3VyZUlkZW50aWZpZXIoYmVmb3JlTmFtZSwgSWRlbnRpZmllckNvbnRleHQubG9jYWxGdW5jdGlvbkRlY2xhcmF0aW9uKQogICAgICAgICAgICAubmV4dDsKICAgIGlmIChpc0Z1bmN0aW9uRXhwcmVzc2lvbikgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgYmVmb3JlTmFtZS5uZXh0LCBmYXN0YS5tZXNzYWdlTmFtZWRGdW5jdGlvbkV4cHJlc3Npb24pOwogICAgfQogICAgbGlzdGVuZXIuZW5kRnVuY3Rpb25OYW1lKGJlZ2luLCB0b2tlbik7CiAgICB0b2tlbiA9IHBhcnNlRm9ybWFsUGFyYW1ldGVyc1JlcXVpcmVkT3B0KGZvcm1hbHMsIE1lbWJlcktpbmQuTG9jYWwpOwogICAgdG9rZW4gPSBwYXJzZUluaXRpYWxpemVyc09wdCh0b2tlbik7CiAgICB0b2tlbiA9IHBhcnNlQXN5bmNPcHRCb2R5KHRva2VuLCBpc0Z1bmN0aW9uRXhwcmVzc2lvbiwgZmFsc2UpOwogICAgaWYgKGlzRnVuY3Rpb25FeHByZXNzaW9uKSB7CiAgICAgIGxpc3RlbmVyLmVuZE5hbWVkRnVuY3Rpb25FeHByZXNzaW9uKHRva2VuKTsKICAgIH0gZWxzZSB7CiAgICAgIGxpc3RlbmVyLmVuZExvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbih0b2tlbik7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gUGFyc2VzIGEgZnVuY3Rpb24gYm9keSBvcHRpb25hbGx5IHByZWNlZGVkIGJ5IGFuIGFzeW5jIG1vZGlmaWVyIChzZWUKICAvLy8gW3BhcnNlQXN5bmNNb2RpZmllck9wdF0pLiAgVGhpcyBtZXRob2QgaXMgdXNlZCBpbiBib3RoIGV4cHJlc3Npb24gY29udGV4dAogIC8vLyAod2hlbiBbb2ZGdW5jdGlvbkV4cHJlc3Npb25dIGlzIHRydWUpIGFuZCBzdGF0ZW1lbnQgY29udGV4dC4gSW4gc3RhdGVtZW50CiAgLy8vIGNvbnRleHQgKHdoZW4gW29mRnVuY3Rpb25FeHByZXNzaW9uXSBpcyBmYWxzZSksIGFuZCBpZiB0aGUgZnVuY3Rpb24gYm9keQogIC8vLyBpcyBvbiB0aGUgZm9ybSBgPT4gZXhwcmVzc2lvbmAsIGEgdHJhaWxpbmcgc2VtaWNvbG9uIGlzIHJlcXVpcmVkLgogIC8vLwogIC8vLyBJdCdzIGFuIGVycm9yIGlmIHRoZXJlJ3Mgbm8gZnVuY3Rpb24gYm9keSB1bmxlc3MgW2FsbG93QWJzdHJhY3RdIGlzIHRydWUuCiAgVG9rZW4gcGFyc2VBc3luY09wdEJvZHkoCiAgICAgIFRva2VuIHRva2VuLCBib29sIG9mRnVuY3Rpb25FeHByZXNzaW9uLCBib29sIGFsbG93QWJzdHJhY3QpIHsKICAgIEFzeW5jTW9kaWZpZXIgc2F2ZWRBc3luY01vZGlmaWVyID0gYXN5bmNTdGF0ZTsKICAgIHRva2VuID0gcGFyc2VBc3luY01vZGlmaWVyT3B0KHRva2VuKTsKICAgIHRva2VuID0gcGFyc2VGdW5jdGlvbkJvZHkodG9rZW4sIG9mRnVuY3Rpb25FeHByZXNzaW9uLCBhbGxvd0Fic3RyYWN0KTsKICAgIGFzeW5jU3RhdGUgPSBzYXZlZEFzeW5jTW9kaWZpZXI7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZUNvbnN0cnVjdG9yUmVmZXJlbmNlKFRva2VuIHRva2VuLCBbVHlwZVBhcmFtT3JBcmdJbmZvIHR5cGVBcmddKSB7CiAgICBUb2tlbiBzdGFydCA9CiAgICAgICAgZW5zdXJlSWRlbnRpZmllcih0b2tlbiwgSWRlbnRpZmllckNvbnRleHQuY29uc3RydWN0b3JSZWZlcmVuY2UpOwogICAgbGlzdGVuZXIuYmVnaW5Db25zdHJ1Y3RvclJlZmVyZW5jZShzdGFydCk7CiAgICB0b2tlbiA9IHBhcnNlUXVhbGlmaWVkUmVzdE9wdCgKICAgICAgICBzdGFydCwgSWRlbnRpZmllckNvbnRleHQuY29uc3RydWN0b3JSZWZlcmVuY2VDb250aW51YXRpb24pOwogICAgdHlwZUFyZyA/Pz0gY29tcHV0ZVR5cGVQYXJhbU9yQXJnKHRva2VuKTsKICAgIHRva2VuID0gdHlwZUFyZy5wYXJzZUFyZ3VtZW50cyh0b2tlbiwgdGhpcyk7CiAgICBUb2tlbiBwZXJpb2QgPSBudWxsOwogICAgaWYgKG9wdGlvbmFsKCcuJywgdG9rZW4ubmV4dCkpIHsKICAgICAgcGVyaW9kID0gdG9rZW4ubmV4dDsKICAgICAgdG9rZW4gPSBlbnN1cmVJZGVudGlmaWVyKHBlcmlvZCwKICAgICAgICAgIElkZW50aWZpZXJDb250ZXh0LmNvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzKTsKICAgIH0gZWxzZSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU5vQ29uc3RydWN0b3JSZWZlcmVuY2VDb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHMoCiAgICAgICAgICB0b2tlbi5uZXh0KTsKICAgIH0KICAgIGxpc3RlbmVyLmVuZENvbnN0cnVjdG9yUmVmZXJlbmNlKHN0YXJ0LCBwZXJpb2QsIHRva2VuLm5leHQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KFRva2VuIHRva2VuKSB7CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJz0nLCB0b2tlbikpOwogICAgbGlzdGVuZXIuYmVnaW5SZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KHRva2VuKTsKICAgIFRva2VuIGVxdWFscyA9IHRva2VuOwogICAgdG9rZW4gPSBwYXJzZUNvbnN0cnVjdG9yUmVmZXJlbmNlKHRva2VuKTsKICAgIHRva2VuID0gZW5zdXJlU2VtaWNvbG9uKHRva2VuKTsKICAgIGxpc3RlbmVyLmVuZFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkoZXF1YWxzLCB0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBza2lwRnVuY3Rpb25Cb2R5KFRva2VuIHRva2VuLCBib29sIGlzRXhwcmVzc2lvbiwgYm9vbCBhbGxvd0Fic3RyYWN0KSB7CiAgICBhc3NlcnQoIWlzRXhwcmVzc2lvbik7CiAgICB0b2tlbiA9IHNraXBBc3luY01vZGlmaWVyKHRva2VuKTsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG9wdGlvbmFsKCduYXRpdmUnLCBuZXh0KSkgewogICAgICBUb2tlbiBuYXRpdmVUb2tlbiA9IG5leHQ7CiAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBza2lwIHRoZSBuYXRpdmUgY2xhdXNlIHJhdGhlciB0aGFuIHBhcnNpbmcgaXQKICAgICAgLy8gb3IgcmVtb3ZlIHRoaXMgY29kZSBjb21wbGV0ZWx5IHdoZW4gd2UgcmVtb3ZlIHN1cHBvcnQKICAgICAgLy8gZm9yIHRoZSBgbmF0aXZlYCBjbGF1c2UuCiAgICAgIHRva2VuID0gcGFyc2VOYXRpdmVDbGF1c2UodG9rZW4pOwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKG9wdGlvbmFsKCc7JywgbmV4dCkpIHsKICAgICAgICBsaXN0ZW5lci5oYW5kbGVOYXRpdmVGdW5jdGlvbkJvZHlTa2lwcGVkKG5hdGl2ZVRva2VuLCBuZXh0KTsKICAgICAgICByZXR1cm4gdG9rZW4ubmV4dDsKICAgICAgfQogICAgICBsaXN0ZW5lci5oYW5kbGVOYXRpdmVGdW5jdGlvbkJvZHlJZ25vcmVkKG5hdGl2ZVRva2VuLCBuZXh0KTsKICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIHJlY292ZXIgYW5kIHNraXAgZnVuY3Rpb24gYm9keQogICAgfQogICAgU3RyaW5nIHZhbHVlID0gbmV4dC5zdHJpbmdWYWx1ZTsKICAgIGlmIChpZGVudGljYWwodmFsdWUsICc7JykpIHsKICAgICAgdG9rZW4gPSBuZXh0OwogICAgICBpZiAoIWFsbG93QWJzdHJhY3QpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKHRva2VuLCBmYXN0YS5tZXNzYWdlRXhwZWN0ZWRCb2R5KTsKICAgICAgfQogICAgICBsaXN0ZW5lci5oYW5kbGVOb0Z1bmN0aW9uQm9keSh0b2tlbik7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJz0+JykpIHsKICAgICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb24obmV4dCk7CiAgICAgIC8vIFRoZXJlIG91Z2h0IHRvIGJlIGEgc2VtaWNvbG9uIGZvbGxvd2luZyB0aGUgZXhwcmVzc2lvbiwgYnV0IHdlIGNoZWNrCiAgICAgIC8vIGJlZm9yZSBhZHZhbmNpbmcgaW4gb3JkZXIgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSB3YXkgdGhlIG1ldGhvZAogICAgICAvLyBbcGFyc2VGdW5jdGlvbkJvZHldIHJlY292ZXJzIHdoZW4gdGhlIHNlbWljb2xvbiBpcyBtaXNzaW5nLgogICAgICBpZiAob3B0aW9uYWwoJzsnLCB0b2tlbi5uZXh0KSkgewogICAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgfQogICAgICBsaXN0ZW5lci5oYW5kbGVGdW5jdGlvbkJvZHlTa2lwcGVkKHRva2VuLCB0cnVlKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnPScpKSB7CiAgICAgIHRva2VuID0gbmV4dDsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0b2tlbiwgZmFzdGEubWVzc2FnZUV4cGVjdGVkQm9keSk7CiAgICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKHRva2VuKTsKICAgICAgLy8gVGhlcmUgb3VnaHQgdG8gYmUgYSBzZW1pY29sb24gZm9sbG93aW5nIHRoZSBleHByZXNzaW9uLCBidXQgd2UgY2hlY2sKICAgICAgLy8gYmVmb3JlIGFkdmFuY2luZyBpbiBvcmRlciB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIHdheSB0aGUgbWV0aG9kCiAgICAgIC8vIFtwYXJzZUZ1bmN0aW9uQm9keV0gcmVjb3ZlcnMgd2hlbiB0aGUgc2VtaWNvbG9uIGlzIG1pc3NpbmcuCiAgICAgIGlmIChvcHRpb25hbCgnOycsIHRva2VuLm5leHQpKSB7CiAgICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICB9CiAgICAgIGxpc3RlbmVyLmhhbmRsZUZ1bmN0aW9uQm9keVNraXBwZWQodG9rZW4sIHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgdG9rZW4gPSBza2lwQmxvY2sodG9rZW4pOwogICAgICBsaXN0ZW5lci5oYW5kbGVGdW5jdGlvbkJvZHlTa2lwcGVkKHRva2VuLCBmYWxzZSk7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gUGFyc2VzIGEgZnVuY3Rpb24gYm9keS4gIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gYm90aCBleHByZXNzaW9uIGNvbnRleHQKICAvLy8gKHdoZW4gW29mRnVuY3Rpb25FeHByZXNzaW9uXSBpcyB0cnVlKSBhbmQgc3RhdGVtZW50IGNvbnRleHQuIEluIHN0YXRlbWVudAogIC8vLyBjb250ZXh0ICh3aGVuIFtvZkZ1bmN0aW9uRXhwcmVzc2lvbl0gaXMgZmFsc2UpLCBhbmQgaWYgdGhlIGZ1bmN0aW9uIGJvZHkKICAvLy8gaXMgb24gdGhlIGZvcm0gYD0+IGV4cHJlc3Npb25gLCBhIHRyYWlsaW5nIHNlbWljb2xvbiBpcyByZXF1aXJlZC4KICAvLy8KICAvLy8gSXQncyBhbiBlcnJvciBpZiB0aGVyZSdzIG5vIGZ1bmN0aW9uIGJvZHkgdW5sZXNzIFthbGxvd0Fic3RyYWN0XSBpcyB0cnVlLgogIFRva2VuIHBhcnNlRnVuY3Rpb25Cb2R5KAogICAgICBUb2tlbiB0b2tlbiwgYm9vbCBvZkZ1bmN0aW9uRXhwcmVzc2lvbiwgYm9vbCBhbGxvd0Fic3RyYWN0KSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgnbmF0aXZlJywgbmV4dCkpIHsKICAgICAgVG9rZW4gbmF0aXZlVG9rZW4gPSBuZXh0OwogICAgICB0b2tlbiA9IHBhcnNlTmF0aXZlQ2xhdXNlKHRva2VuKTsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIGlmIChvcHRpb25hbCgnOycsIG5leHQpKSB7CiAgICAgICAgbGlzdGVuZXIuaGFuZGxlTmF0aXZlRnVuY3Rpb25Cb2R5KG5hdGl2ZVRva2VuLCBuZXh0KTsKICAgICAgICByZXR1cm4gbmV4dDsKICAgICAgfQogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VFeHRlcm5hbE1ldGhvZFdpdGhCb2R5KTsKICAgICAgbGlzdGVuZXIuaGFuZGxlTmF0aXZlRnVuY3Rpb25Cb2R5SWdub3JlZChuYXRpdmVUb2tlbiwgbmV4dCk7CiAgICAgIC8vIElnbm9yZSB0aGUgbmF0aXZlIGtleXdvcmQgYW5kIGZhbGwgdGhyb3VnaCB0byBwYXJzZSB0aGUgYm9keQogICAgfQogICAgaWYgKG9wdGlvbmFsKCc7JywgbmV4dCkpIHsKICAgICAgaWYgKCFhbGxvd0Fic3RyYWN0KSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlRXhwZWN0ZWRCb2R5KTsKICAgICAgfQogICAgICBsaXN0ZW5lci5oYW5kbGVFbXB0eUZ1bmN0aW9uQm9keShuZXh0KTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCc9PicsIG5leHQpKSB7CiAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25GdW5jdGlvbkJvZHkobmV4dCwgb2ZGdW5jdGlvbkV4cHJlc3Npb24pOwogICAgfSBlbHNlIGlmIChvcHRpb25hbCgnPScsIG5leHQpKSB7CiAgICAgIC8vIFJlY292ZXIgZnJvbSBhIGJhZCBmYWN0b3J5IG1ldGhvZC4KICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlRXhwZWN0ZWRCb2R5KTsKICAgICAgbmV4dCA9IHJld3JpdGVyLmluc2VydFRva2VuKAogICAgICAgICAgbmV4dCwgbmV3IFN5bnRoZXRpY1Rva2VuKFRva2VuVHlwZS5GVU5DVElPTiwgbmV4dC5uZXh0LmNoYXJPZmZzZXQpKTsKICAgICAgVG9rZW4gYmVnaW4gPSBuZXh0OwogICAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbihuZXh0KTsKICAgICAgaWYgKCFvZkZ1bmN0aW9uRXhwcmVzc2lvbikgewogICAgICAgIHRva2VuID0gZW5zdXJlU2VtaWNvbG9uKHRva2VuKTsKICAgICAgICBsaXN0ZW5lci5oYW5kbGVFeHByZXNzaW9uRnVuY3Rpb25Cb2R5KGJlZ2luLCB0b2tlbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbGlzdGVuZXIuaGFuZGxlRXhwcmVzc2lvbkZ1bmN0aW9uQm9keShiZWdpbiwgbnVsbCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRva2VuOwogICAgfQogICAgVG9rZW4gYmVnaW4gPSBuZXh0OwogICAgaW50IHN0YXRlbWVudENvdW50ID0gMDsKICAgIGlmICghb3B0aW9uYWwoJ3snLCBuZXh0KSkgewogICAgICAvLyBSZWNvdmVyeQogICAgICAvLyBJZiBgcmV0dXJuYCB1c2VkIGluc3RlYWQgb2YgYD0+YCwgdGhlbiByZXBvcnQgYW4gZXJyb3IgYW5kIGNvbnRpbnVlCiAgICAgIGlmIChvcHRpb25hbCgncmV0dXJuJywgbmV4dCkpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VFeHBlY3RlZEJvZHkpOwogICAgICAgIG5leHQgPSByZXdyaXRlci5pbnNlcnRUb2tlbigKICAgICAgICAgICAgbmV4dCwgbmV3IFN5bnRoZXRpY1Rva2VuKFRva2VuVHlwZS5GVU5DVElPTiwgbmV4dC5uZXh0LmNoYXJPZmZzZXQpKTsKICAgICAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uRnVuY3Rpb25Cb2R5KG5leHQsIG9mRnVuY3Rpb25FeHByZXNzaW9uKTsKICAgICAgfQogICAgICAvLyBJZiB0aGVyZSBpcyBhIHN0cmF5IHNpbXBsZSBpZGVudGlmaWVyIGluIHRoZSBmdW5jdGlvbiBleHByZXNzaW9uCiAgICAgIC8vIGJlY2F1c2UgdGhlIHVzZXIgaXMgdHlwaW5nIChlLmcuIGAoKSBhc3kgPT4gbnVsbDtgKQogICAgICAvLyB0aGVuIHJlcG9ydCBhbiBlcnJvciwgc2tpcCB0aGUgdG9rZW4sIGFuZCBjb250aW51ZSBwYXJzaW5nLgogICAgICBpZiAobmV4dC5pc0tleXdvcmRPcklkZW50aWZpZXIgJiYgb3B0aW9uYWwoJz0+JywgbmV4dC5uZXh0KSkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4obmV4dCwgZmFzdGEudGVtcGxhdGVVbmV4cGVjdGVkVG9rZW4pOwogICAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25GdW5jdGlvbkJvZHkobmV4dC5uZXh0LCBvZkZ1bmN0aW9uRXhwcmVzc2lvbik7CiAgICAgIH0KICAgICAgaWYgKG5leHQuaXNLZXl3b3JkT3JJZGVudGlmaWVyICYmIG9wdGlvbmFsKCd7JywgbmV4dC5uZXh0KSkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4obmV4dCwgZmFzdGEudGVtcGxhdGVVbmV4cGVjdGVkVG9rZW4pOwogICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICBiZWdpbiA9IG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBwYXJzZSB0aGUgYmxvY2suCiAgICAgIH0gZWxzZSB7CiAgICAgICAgdG9rZW4gPSBlbnN1cmVCbG9jayh0b2tlbiwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEZ1bmN0aW9uQm9keSwgbnVsbCk7CiAgICAgICAgbGlzdGVuZXIuaGFuZGxlSW52YWxpZEZ1bmN0aW9uQm9keSh0b2tlbik7CiAgICAgICAgcmV0dXJuIHRva2VuLmVuZEdyb3VwOwogICAgICB9CiAgICB9CgogICAgTG9vcFN0YXRlIHNhdmVkTG9vcFN0YXRlID0gbG9vcFN0YXRlOwogICAgbG9vcFN0YXRlID0gTG9vcFN0YXRlLk91dHNpZGVMb29wOwogICAgbGlzdGVuZXIuYmVnaW5CbG9ja0Z1bmN0aW9uQm9keShiZWdpbik7CiAgICB0b2tlbiA9IG5leHQ7CiAgICB3aGlsZSAobm90RW9mT3JWYWx1ZSgnfScsIHRva2VuLm5leHQpKSB7CiAgICAgIFRva2VuIHN0YXJ0VG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICB0b2tlbiA9IHBhcnNlU3RhdGVtZW50KHRva2VuKTsKICAgICAgaWYgKGlkZW50aWNhbCh0b2tlbi5uZXh0LCBzdGFydFRva2VuKSkgewogICAgICAgIC8vIE5vIHByb2dyZXNzIHdhcyBtYWRlLCBzbyB3ZSByZXBvcnQgdGhlIGN1cnJlbnQgdG9rZW4gYXMgYmVpbmcgaW52YWxpZAogICAgICAgIC8vIGFuZCBtb3ZlIGZvcndhcmQuCiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgdG9rZW4sIGZhc3RhLnRlbXBsYXRlVW5leHBlY3RlZFRva2VuLndpdGhBcmd1bWVudHModG9rZW4pKTsKICAgICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICAgIH0KICAgICAgKytzdGF0ZW1lbnRDb3VudDsKICAgIH0KICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnfScsIHRva2VuKSk7CiAgICBsaXN0ZW5lci5lbmRCbG9ja0Z1bmN0aW9uQm9keShzdGF0ZW1lbnRDb3VudCwgYmVnaW4sIHRva2VuKTsKICAgIGxvb3BTdGF0ZSA9IHNhdmVkTG9vcFN0YXRlOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VFeHByZXNzaW9uRnVuY3Rpb25Cb2R5KFRva2VuIHRva2VuLCBib29sIG9mRnVuY3Rpb25FeHByZXNzaW9uKSB7CiAgICBhc3NlcnQob3B0aW9uYWwoJz0+JywgdG9rZW4pKTsKICAgIFRva2VuIGJlZ2luID0gdG9rZW47CiAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbih0b2tlbik7CiAgICBpZiAoIW9mRnVuY3Rpb25FeHByZXNzaW9uKSB7CiAgICAgIHRva2VuID0gZW5zdXJlU2VtaWNvbG9uKHRva2VuKTsKICAgICAgbGlzdGVuZXIuaGFuZGxlRXhwcmVzc2lvbkZ1bmN0aW9uQm9keShiZWdpbiwgdG9rZW4pOwogICAgfSBlbHNlIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlRXhwcmVzc2lvbkZ1bmN0aW9uQm9keShiZWdpbiwgbnVsbCk7CiAgICB9CiAgICBpZiAoaW5HZW5lcmF0b3IpIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlSW52YWxpZFN0YXRlbWVudCgKICAgICAgICAgIGJlZ2luLCBmYXN0YS5tZXNzYWdlR2VuZXJhdG9yUmV0dXJuc1ZhbHVlKTsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHNraXBBc3luY01vZGlmaWVyKFRva2VuIHRva2VuKSB7CiAgICBTdHJpbmcgdmFsdWUgPSB0b2tlbi5uZXh0LnN0cmluZ1ZhbHVlOwogICAgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2FzeW5jJykpIHsKICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICB2YWx1ZSA9IHRva2VuLm5leHQuc3RyaW5nVmFsdWU7CgogICAgICBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnKicpKSB7CiAgICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICB9CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ3N5bmMnKSkgewogICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICAgIHZhbHVlID0gdG9rZW4ubmV4dC5zdHJpbmdWYWx1ZTsKCiAgICAgIGlmIChpZGVudGljYWwodmFsdWUsICcqJykpIHsKICAgICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlQXN5bmNNb2RpZmllck9wdChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gYXN5bmM7CiAgICBUb2tlbiBzdGFyOwogICAgYXN5bmNTdGF0ZSA9IEFzeW5jTW9kaWZpZXIuU3luYzsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG9wdGlvbmFsKCdhc3luYycsIG5leHQpKSB7CiAgICAgIGFzeW5jID0gdG9rZW4gPSBuZXh0OwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKG9wdGlvbmFsKCcqJywgbmV4dCkpIHsKICAgICAgICBhc3luY1N0YXRlID0gQXN5bmNNb2RpZmllci5Bc3luY1N0YXI7CiAgICAgICAgc3RhciA9IG5leHQ7CiAgICAgICAgdG9rZW4gPSBuZXh0OwogICAgICB9IGVsc2UgewogICAgICAgIGFzeW5jU3RhdGUgPSBBc3luY01vZGlmaWVyLkFzeW5jOwogICAgICB9CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCdzeW5jJywgbmV4dCkpIHsKICAgICAgYXN5bmMgPSB0b2tlbiA9IG5leHQ7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBpZiAob3B0aW9uYWwoJyonLCBuZXh0KSkgewogICAgICAgIGFzeW5jU3RhdGUgPSBBc3luY01vZGlmaWVyLlN5bmNTdGFyOwogICAgICAgIHN0YXIgPSBuZXh0OwogICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKGFzeW5jLCBmYXN0YS5tZXNzYWdlSW52YWxpZFN5bmNNb2RpZmllcik7CiAgICAgIH0KICAgIH0KICAgIGxpc3RlbmVyLmhhbmRsZUFzeW5jTW9kaWZpZXIoYXN5bmMsIHN0YXIpOwogICAgaWYgKCFpblBsYWluU3luYyAmJiBvcHRpb25hbCgnOycsIHRva2VuLm5leHQpKSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IodG9rZW4ubmV4dCwgZmFzdGEubWVzc2FnZUFic3RyYWN0Tm90U3luYyk7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBpbnQgc3RhdGVtZW50RGVwdGggPSAwOwogIFRva2VuIHBhcnNlU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBpZiAoc3RhdGVtZW50RGVwdGgrKyA+IDUwMCkgewogICAgICAvLyBUaGlzIGhhcHBlbnMgZm9yIGRlZ2VuZXJhdGUgcHJvZ3JhbXMsIGZvciBleGFtcGxlLCBhIGxvdCBvZiBuZXN0ZWQKICAgICAgLy8gaWYtc3RhdGVtZW50cy4gVGhlIGxhbmd1YWdlIHRlc3QgZGVlcF9uZXN0aW5nMl9uZWdhdGl2ZV90ZXN0LCBmb3IKICAgICAgLy8gZXhhbXBsZSwgcHJvdm9rZXMgdGhpcy4KICAgICAgcmV0dXJuIHJlY292ZXJGcm9tU3RhY2tPdmVyZmxvdyh0b2tlbik7CiAgICB9CiAgICBUb2tlbiByZXN1bHQgPSBwYXJzZVN0YXRlbWVudFgodG9rZW4pOwogICAgc3RhdGVtZW50RGVwdGgtLTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBUb2tlbiBwYXJzZVN0YXRlbWVudFgoVG9rZW4gdG9rZW4pIHsKICAgIGlmIChpZGVudGljYWwodG9rZW4ubmV4dC5raW5kLCBJREVOVElGSUVSX1RPS0VOKSkgewogICAgICBpZiAob3B0aW9uYWwoJzonLCB0b2tlbi5uZXh0Lm5leHQpKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlTGFiZWxlZFN0YXRlbWVudCh0b2tlbik7CiAgICAgIH0KICAgICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudE9yRGVjbGFyYXRpb25BZnRlck1vZGlmaWVycygKICAgICAgICAgIHRva2VuLCB0b2tlbiwgbnVsbCwgbnVsbCwgbnVsbCwgZmFsc2UpOwogICAgfQogICAgZmluYWwgU3RyaW5nIHZhbHVlID0gdG9rZW4ubmV4dC5zdHJpbmdWYWx1ZTsKICAgIGlmIChpZGVudGljYWwodmFsdWUsICd7JykpIHsKICAgICAgLy8gVGhlIHNjYW5uZXIgZW5zdXJlcyB0aGF0IGB7YCBhbHdheXMgaGFzIGEgY2xvc2luZyBgfWAuCiAgICAgIHJldHVybiBwYXJzZUJsb2NrKHRva2VuLCBudWxsKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAncmV0dXJuJykpIHsKICAgICAgcmV0dXJuIHBhcnNlUmV0dXJuU3RhdGVtZW50KHRva2VuKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAndmFyJykgfHwgaWRlbnRpY2FsKHZhbHVlLCAnZmluYWwnKSkgewogICAgICBUb2tlbiB2YXJPckZpbmFsID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKCFpc01vZGlmaWVyKHZhck9yRmluYWwubmV4dCkpIHsKICAgICAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50T3JEZWNsYXJhdGlvbkFmdGVyTW9kaWZpZXJzKAogICAgICAgICAgICB2YXJPckZpbmFsLCB0b2tlbiwgbnVsbCwgdmFyT3JGaW5hbCwgbnVsbCwgZmFsc2UpOwogICAgICB9CiAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnRPckRlY2xhcmF0aW9uKHRva2VuKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnbGF0ZScpKSB7CiAgICAgIFRva2VuIGxhdGVUb2tlbiA9IHRva2VuLm5leHQ7CiAgICAgIGlmICghaXNNb2RpZmllcihsYXRlVG9rZW4ubmV4dCkpIHsKICAgICAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50T3JEZWNsYXJhdGlvbkFmdGVyTW9kaWZpZXJzKAogICAgICAgICAgICBsYXRlVG9rZW4sIHRva2VuLCBsYXRlVG9rZW4sIG51bGwsIG51bGwsIGZhbHNlKTsKICAgICAgfQogICAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50T3JEZWNsYXJhdGlvbih0b2tlbik7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2lmJykpIHsKICAgICAgcmV0dXJuIHBhcnNlSWZTdGF0ZW1lbnQodG9rZW4pOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdhd2FpdCcpICYmIG9wdGlvbmFsKCdmb3InLCB0b2tlbi5uZXh0Lm5leHQpKSB7CiAgICAgIHJldHVybiBwYXJzZUZvclN0YXRlbWVudCh0b2tlbi5uZXh0LCB0b2tlbi5uZXh0KTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnZm9yJykpIHsKICAgICAgcmV0dXJuIHBhcnNlRm9yU3RhdGVtZW50KHRva2VuLCBudWxsKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAncmV0aHJvdycpKSB7CiAgICAgIHJldHVybiBwYXJzZVJldGhyb3dTdGF0ZW1lbnQodG9rZW4pOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICd3aGlsZScpKSB7CiAgICAgIHJldHVybiBwYXJzZVdoaWxlU3RhdGVtZW50KHRva2VuKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnZG8nKSkgewogICAgICByZXR1cm4gcGFyc2VEb1doaWxlU3RhdGVtZW50KHRva2VuKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAndHJ5JykpIHsKICAgICAgcmV0dXJuIHBhcnNlVHJ5U3RhdGVtZW50KHRva2VuKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnc3dpdGNoJykpIHsKICAgICAgcmV0dXJuIHBhcnNlU3dpdGNoU3RhdGVtZW50KHRva2VuKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnYnJlYWsnKSkgewogICAgICByZXR1cm4gcGFyc2VCcmVha1N0YXRlbWVudCh0b2tlbik7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2NvbnRpbnVlJykpIHsKICAgICAgcmV0dXJuIHBhcnNlQ29udGludWVTdGF0ZW1lbnQodG9rZW4pOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdhc3NlcnQnKSkgewogICAgICByZXR1cm4gcGFyc2VBc3NlcnRTdGF0ZW1lbnQodG9rZW4pOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICc7JykpIHsKICAgICAgcmV0dXJuIHBhcnNlRW1wdHlTdGF0ZW1lbnQodG9rZW4pOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICd5aWVsZCcpKSB7CiAgICAgIHN3aXRjaCAoYXN5bmNTdGF0ZSkgewogICAgICAgIGNhc2UgQXN5bmNNb2RpZmllci5TeW5jOgogICAgICAgICAgaWYgKG9wdGlvbmFsKCc6JywgdG9rZW4ubmV4dC5uZXh0KSkgewogICAgICAgICAgICByZXR1cm4gcGFyc2VMYWJlbGVkU3RhdGVtZW50KHRva2VuKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnRPckRlY2xhcmF0aW9uKHRva2VuKTsKCiAgICAgICAgY2FzZSBBc3luY01vZGlmaWVyLlN5bmNTdGFyOgogICAgICAgIGNhc2UgQXN5bmNNb2RpZmllci5Bc3luY1N0YXI6CiAgICAgICAgICByZXR1cm4gcGFyc2VZaWVsZFN0YXRlbWVudCh0b2tlbik7CgogICAgICAgIGNhc2UgQXN5bmNNb2RpZmllci5Bc3luYzoKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IodG9rZW4ubmV4dCwgZmFzdGEubWVzc2FnZVlpZWxkTm90R2VuZXJhdG9yKTsKICAgICAgICAgIHJldHVybiBwYXJzZVlpZWxkU3RhdGVtZW50KHRva2VuKTsKICAgICAgfQogICAgICB0aHJvdyAiSW50ZXJuYWwgZXJyb3I6IFVua25vd24gYXN5bmNTdGF0ZTogJyRhc3luY1N0YXRlJy4iOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdjb25zdCcpKSB7CiAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnRPckNvbnN0RGVjbGFyYXRpb24odG9rZW4pOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdhd2FpdCcpKSB7CiAgICAgIGlmIChpblBsYWluU3luYykgewogICAgICAgIGlmICghbG9va3NMaWtlQXdhaXRFeHByZXNzaW9uKHRva2VuKSkgewogICAgICAgICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudE9yRGVjbGFyYXRpb24odG9rZW4pOwogICAgICAgIH0KICAgICAgICAvLyBSZWNvdmVyeTogbG9va3MgbGlrZSBhbiBleHByZXNzaW9uIHByZWNlZGVkIGJ5IGBhd2FpdGAKICAgICAgICAvLyBidXQgbm90IGluc2lkZSBhbiBhc3luYyBjb250ZXh0LgogICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQKICAgICAgICAvLyBhbmQgcGFyc2VBd2FpdEV4cHJlc3Npb24gd2lsbCByZXBvcnQgdGhlIGVycm9yLgogICAgICB9CiAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQodG9rZW4pOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdzZXQnKSAmJiB0b2tlbi5uZXh0Lm5leHQuaXNJZGVudGlmaWVyKSB7CiAgICAgIC8vIFJlY292ZXJ5OiBpbnZhbGlkIHVzZSBvZiBgc2V0YAogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgdG9rZW4ubmV4dCwgZmFzdGEudGVtcGxhdGVVbmV4cGVjdGVkVG9rZW4pOwogICAgICByZXR1cm4gcGFyc2VTdGF0ZW1lbnRYKHRva2VuLm5leHQpOwogICAgfSBlbHNlIGlmICh0b2tlbi5uZXh0LmlzSWRlbnRpZmllcikgewogICAgICBpZiAob3B0aW9uYWwoJzonLCB0b2tlbi5uZXh0Lm5leHQpKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlTGFiZWxlZFN0YXRlbWVudCh0b2tlbik7CiAgICAgIH0KICAgICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudE9yRGVjbGFyYXRpb24odG9rZW4pOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudE9yRGVjbGFyYXRpb24odG9rZW4pOwogICAgfQogIH0KCiAgLy8vIGBgYAogIC8vLyB5aWVsZFN0YXRlbWVudDoKICAvLy8gICAneWllbGQnIGV4cHJlc3Npb24/ICc7JwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlWWllbGRTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGJlZ2luID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCd5aWVsZCcsIHRva2VuKSk7CiAgICBsaXN0ZW5lci5iZWdpbllpZWxkU3RhdGVtZW50KGJlZ2luKTsKICAgIFRva2VuIHN0YXJUb2tlbjsKICAgIGlmIChvcHRpb25hbCgnKicsIHRva2VuLm5leHQpKSB7CiAgICAgIHN0YXJUb2tlbiA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIH0KICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKHRva2VuKTsKICAgIHRva2VuID0gZW5zdXJlU2VtaWNvbG9uKHRva2VuKTsKICAgIGxpc3RlbmVyLmVuZFlpZWxkU3RhdGVtZW50KGJlZ2luLCBzdGFyVG9rZW4sIHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gcmV0dXJuU3RhdGVtZW50OgogIC8vLyAgICdyZXR1cm4nIGV4cHJlc3Npb24/ICc7JwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlUmV0dXJuU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBiZWdpbiA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgncmV0dXJuJywgdG9rZW4pKTsKICAgIGxpc3RlbmVyLmJlZ2luUmV0dXJuU3RhdGVtZW50KGJlZ2luKTsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG9wdGlvbmFsKCc7JywgbmV4dCkpIHsKICAgICAgbGlzdGVuZXIuZW5kUmV0dXJuU3RhdGVtZW50KGZhbHNlLCBiZWdpbiwgbmV4dCk7CiAgICAgIHJldHVybiBuZXh0OwogICAgfQogICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb24odG9rZW4pOwogICAgdG9rZW4gPSBlbnN1cmVTZW1pY29sb24odG9rZW4pOwogICAgbGlzdGVuZXIuZW5kUmV0dXJuU3RhdGVtZW50KHRydWUsIGJlZ2luLCB0b2tlbik7CiAgICBpZiAoaW5HZW5lcmF0b3IpIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlSW52YWxpZFN0YXRlbWVudCgKICAgICAgICAgIGJlZ2luLCBmYXN0YS5tZXNzYWdlR2VuZXJhdG9yUmV0dXJuc1ZhbHVlKTsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gbGFiZWw6CiAgLy8vICAgaWRlbnRpZmllciAnOicKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUxhYmVsKFRva2VuIHRva2VuKSB7CiAgICBhc3NlcnQodG9rZW4ubmV4dC5pc0lkZW50aWZpZXIpOwogICAgdG9rZW4gPSBlbnN1cmVJZGVudGlmaWVyKHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC5sYWJlbERlY2xhcmF0aW9uKS5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCc6JywgdG9rZW4pKTsKICAgIGxpc3RlbmVyLmhhbmRsZUxhYmVsKHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gc3RhdGVtZW50OgogIC8vLyAgIGxhYmVsKiBub25MYWJlbGxlZFN0YXRlbWVudAogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlTGFiZWxlZFN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQobmV4dC5pc0lkZW50aWZpZXIpOwogICAgYXNzZXJ0KG9wdGlvbmFsKCc6JywgbmV4dC5uZXh0KSk7CiAgICBpbnQgbGFiZWxDb3VudCA9IDA7CiAgICBkbyB7CiAgICAgIHRva2VuID0gcGFyc2VMYWJlbCh0b2tlbik7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBsYWJlbENvdW50Kys7CiAgICB9IHdoaWxlIChuZXh0LmlzSWRlbnRpZmllciAmJiBvcHRpb25hbCgnOicsIG5leHQubmV4dCkpOwogICAgbGlzdGVuZXIuYmVnaW5MYWJlbGVkU3RhdGVtZW50KG5leHQsIGxhYmVsQ291bnQpOwogICAgdG9rZW4gPSBwYXJzZVN0YXRlbWVudCh0b2tlbik7CiAgICBsaXN0ZW5lci5lbmRMYWJlbGVkU3RhdGVtZW50KGxhYmVsQ291bnQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBleHByZXNzaW9uU3RhdGVtZW50OgogIC8vLyAgIGV4cHJlc3Npb24/ICc7JwogIC8vLyA7CiAgLy8vIGBgYAogIC8vLwogIC8vLyBOb3RlOiBUaGlzIG1ldGhvZCBjYW4gZmFpbCB0byBtYWtlIHByb2dyZXNzLiBJZiB0aGVyZSBpcyBuZWl0aGVyIGFuCiAgLy8vIGV4cHJlc3Npb24gbm9yIGEgc2VtaS1jb2xvbiwgdGhlbiBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIGFuZCBzeW50aGV0aWMKICAvLy8gc2VtaWNvbG9uIHdpbGwgYmUgaW5zZXJ0ZWQgYmVmb3JlIFt0b2tlbl0gYW5kIHRoZSBzZW1pY29sb24gd2lsbCBiZQogIC8vLyByZXR1cm5lZC4KICBUb2tlbiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIC8vIFRPRE8oYnJpYW53aWxrZXJzb24pOiBJZiB0aGUgbmV4dCB0b2tlbiBpcyBub3QgdGhlIHN0YXJ0IG9mIGEgdmFsaWQKICAgIC8vIGV4cHJlc3Npb24sIHRoZW4gdGhpcyBtZXRob2Qgc2hvdWxkbid0IHJlcG9ydCB0aGF0IHdlIGhhdmUgYW4gZXhwcmVzc2lvbgogICAgLy8gc3RhdGVtZW50LgogICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb24odG9rZW4pOwogICAgdG9rZW4gPSBlbnN1cmVTZW1pY29sb24odG9rZW4pOwogICAgbGlzdGVuZXIuaGFuZGxlRXhwcmVzc2lvblN0YXRlbWVudCh0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBpbnQgZXhwcmVzc2lvbkRlcHRoID0gMDsKICBUb2tlbiBwYXJzZUV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGlmIChleHByZXNzaW9uRGVwdGgrKyA+IDUwMCkgewogICAgICAvLyBUaGlzIGhhcHBlbnMgaW4gZGVnZW5lcmF0ZSBwcm9ncmFtcywgZm9yIGV4YW1wbGUsIHdpdGggYSBsb3Qgb2YgbmVzdGVkCiAgICAgIC8vIGxpc3QgbGl0ZXJhbHMuIFRoaXMgaXMgcHJvdm9rZWQgYnksIGZvciBleGFtcGxlLCB0aGUgbGFuZ3VhZ2UgdGVzdAogICAgICAvLyBkZWVwX25lc3RpbmcxX25lZ2F0aXZlX3Rlc3QuCiAgICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VTdGFja092ZXJmbG93KTsKCiAgICAgIC8vIFJlY292ZXJ5CiAgICAgIFRva2VuIGVuZEdyb3VwID0gbmV4dC5lbmRHcm91cDsKICAgICAgaWYgKGVuZEdyb3VwICE9IG51bGwpIHsKICAgICAgICB3aGlsZSAoIW5leHQuaXNFb2YgJiYgIWlkZW50aWNhbChuZXh0LCBlbmRHcm91cCkpIHsKICAgICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB3aGlsZSAoIWlzT25lT2YobmV4dCwgY29uc3QgWycpJywgJ10nLCAnfScsICc7J10pKSB7CiAgICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCF0b2tlbi5pc0VvZikgewogICAgICAgIHRva2VuID0gcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbik7CiAgICAgICAgbGlzdGVuZXIuaGFuZGxlSWRlbnRpZmllcih0b2tlbiwgSWRlbnRpZmllckNvbnRleHQuZXhwcmVzc2lvbik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHRva2VuID0gb3B0aW9uYWwoJ3Rocm93JywgdG9rZW4ubmV4dCkKICAgICAgICAgID8gcGFyc2VUaHJvd0V4cHJlc3Npb24odG9rZW4sIHRydWUpCiAgICAgICAgICA6IHBhcnNlUHJlY2VkZW5jZUV4cHJlc3Npb24odG9rZW4sIEFTU0lHTk1FTlRfUFJFQ0VERU5DRSwgdHJ1ZSk7CiAgICB9CiAgICBleHByZXNzaW9uRGVwdGgtLTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlRXhwcmVzc2lvbldpdGhvdXRDYXNjYWRlKFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gb3B0aW9uYWwoJ3Rocm93JywgdG9rZW4ubmV4dCkKICAgICAgICA/IHBhcnNlVGhyb3dFeHByZXNzaW9uKHRva2VuLCBmYWxzZSkKICAgICAgICA6IHBhcnNlUHJlY2VkZW5jZUV4cHJlc3Npb24odG9rZW4sIEFTU0lHTk1FTlRfUFJFQ0VERU5DRSwgZmFsc2UpOwogIH0KCiAgVG9rZW4gcGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb25SZXN0KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBxdWVzdGlvbiA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnPycsIHF1ZXN0aW9uKSk7CiAgICBsaXN0ZW5lci5iZWdpbkNvbmRpdGlvbmFsRXhwcmVzc2lvbih0b2tlbik7CiAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbldpdGhvdXRDYXNjYWRlKHRva2VuKTsKICAgIFRva2VuIGNvbG9uID0gZW5zdXJlQ29sb24odG9rZW4pOwogICAgbGlzdGVuZXIuaGFuZGxlQ29uZGl0aW9uYWxFeHByZXNzaW9uQ29sb24oKTsKICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uV2l0aG91dENhc2NhZGUoY29sb24pOwogICAgbGlzdGVuZXIuZW5kQ29uZGl0aW9uYWxFeHByZXNzaW9uKHF1ZXN0aW9uLCBjb2xvbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZVByZWNlZGVuY2VFeHByZXNzaW9uKAogICAgICBUb2tlbiB0b2tlbiwgaW50IHByZWNlZGVuY2UsIGJvb2wgYWxsb3dDYXNjYWRlcykgewogICAgYXNzZXJ0KHByZWNlZGVuY2UgPj0gMSk7CiAgICBhc3NlcnQocHJlY2VkZW5jZSA8PSBTRUxFQ1RPUl9QUkVDRURFTkNFKTsKICAgIHRva2VuID0gcGFyc2VVbmFyeUV4cHJlc3Npb24odG9rZW4sIGFsbG93Q2FzY2FkZXMpOwogICAgVHlwZVBhcmFtT3JBcmdJbmZvIHR5cGVBcmcgPSBjb21wdXRlTWV0aG9kVHlwZUFyZ3VtZW50cyh0b2tlbik7CiAgICBpZiAodHlwZUFyZyAhPSBub1R5cGVQYXJhbU9yQXJnKSB7CiAgICAgIC8vIEZvciBleGFtcGxlIGEoYik8VD4oYyksIHdoZXJlIHRva2VuIGlzIGJlZm9yZSAnPCcuCiAgICAgIHRva2VuID0gdHlwZUFyZy5wYXJzZUFyZ3VtZW50cyh0b2tlbiwgdGhpcyk7CiAgICAgIGFzc2VydChvcHRpb25hbCgnKCcsIHRva2VuLm5leHQpKTsKICAgIH0KICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgVG9rZW5UeXBlIHR5cGUgPSBuZXh0LnR5cGU7CiAgICBpbnQgdG9rZW5MZXZlbCA9IF9jb21wdXRlUHJlY2VkZW5jZShuZXh0KTsKICAgIGZvciAoaW50IGxldmVsID0gdG9rZW5MZXZlbDsgbGV2ZWwgPj0gcHJlY2VkZW5jZTsgLS1sZXZlbCkgewogICAgICBpbnQgbGFzdEJpbmFyeUV4cHJlc3Npb25MZXZlbCA9IC0xOwogICAgICB3aGlsZSAoaWRlbnRpY2FsKHRva2VuTGV2ZWwsIGxldmVsKSkgewogICAgICAgIFRva2VuIG9wZXJhdG9yID0gbmV4dDsKICAgICAgICBpZiAoaWRlbnRpY2FsKHRva2VuTGV2ZWwsIENBU0NBREVfUFJFQ0VERU5DRSkpIHsKICAgICAgICAgIGlmICghYWxsb3dDYXNjYWRlcykgewogICAgICAgICAgICByZXR1cm4gdG9rZW47CiAgICAgICAgICB9CiAgICAgICAgICB0b2tlbiA9IHBhcnNlQ2FzY2FkZUV4cHJlc3Npb24odG9rZW4pOwogICAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHRva2VuTGV2ZWwsIEFTU0lHTk1FTlRfUFJFQ0VERU5DRSkpIHsKICAgICAgICAgIC8vIFJpZ2h0IGFzc29jaWF0aXZlLCBzbyB3ZSByZWN1cnNlIGF0IHRoZSBzYW1lIHByZWNlZGVuY2UKICAgICAgICAgIC8vIGxldmVsLgogICAgICAgICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgICB0b2tlbiA9IG9wdGlvbmFsKCd0aHJvdycsIG5leHQubmV4dCkKICAgICAgICAgICAgICA/IHBhcnNlVGhyb3dFeHByZXNzaW9uKG5leHQsIGZhbHNlKQogICAgICAgICAgICAgIDogcGFyc2VQcmVjZWRlbmNlRXhwcmVzc2lvbihuZXh0LCBsZXZlbCwgYWxsb3dDYXNjYWRlcyk7CiAgICAgICAgICBsaXN0ZW5lci5oYW5kbGVBc3NpZ25tZW50RXhwcmVzc2lvbihvcGVyYXRvcik7CiAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodG9rZW5MZXZlbCwgUE9TVEZJWF9QUkVDRURFTkNFKSkgewogICAgICAgICAgaWYgKChpZGVudGljYWwodHlwZSwgVG9rZW5UeXBlLlBMVVNfUExVUykpIHx8CiAgICAgICAgICAgICAgKGlkZW50aWNhbCh0eXBlLCBUb2tlblR5cGUuTUlOVVNfTUlOVVMpKSkgewogICAgICAgICAgICBsaXN0ZW5lci5oYW5kbGVVbmFyeVBvc3RmaXhBc3NpZ25tZW50RXhwcmVzc2lvbih0b2tlbi5uZXh0KTsKICAgICAgICAgICAgdG9rZW4gPSBuZXh0OwogICAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodHlwZSwgVG9rZW5UeXBlLkJBTkcpKSB7CiAgICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZU5vbk51bGxBc3NlcnRFeHByZXNzaW9uKHRva2VuLm5leHQpOwogICAgICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodG9rZW5MZXZlbCwgU0VMRUNUT1JfUFJFQ0VERU5DRSkpIHsKICAgICAgICAgIGlmIChpZGVudGljYWwodHlwZSwgVG9rZW5UeXBlLlBFUklPRCkgfHwKICAgICAgICAgICAgICBpZGVudGljYWwodHlwZSwgVG9rZW5UeXBlLlFVRVNUSU9OX1BFUklPRCkpIHsKICAgICAgICAgICAgLy8gTGVmdCBhc3NvY2lhdGl2ZSwgc28gd2UgcmVjdXJzZSBhdCB0aGUgbmV4dCBoaWdoZXIgcHJlY2VkZW5jZQogICAgICAgICAgICAvLyBsZXZlbC4gSG93ZXZlciwgU0VMRUNUT1JfUFJFQ0VERU5DRSBpcyB0aGUgaGlnaGVzdCBsZXZlbCwgc28gd2UKICAgICAgICAgICAgLy8gc2hvdWxkIGp1c3QgY2FsbCBbcGFyc2VVbmFyeUV4cHJlc3Npb25dIGRpcmVjdGx5LiBIb3dldmVyLCBhCiAgICAgICAgICAgIC8vIHVuYXJ5IGV4cHJlc3Npb24gaXNuJ3QgbGVnYWwgYWZ0ZXIgYSBwZXJpb2QsIHNvIHdlIGNhbGwKICAgICAgICAgICAgLy8gW3BhcnNlUHJpbWFyeV0gaW5zdGVhZC4KICAgICAgICAgICAgdG9rZW4gPSBwYXJzZVByaW1hcnkoCiAgICAgICAgICAgICAgICB0b2tlbi5uZXh0LCBJZGVudGlmaWVyQ29udGV4dC5leHByZXNzaW9uQ29udGludWF0aW9uKTsKICAgICAgICAgICAgbGlzdGVuZXIuZW5kQmluYXJ5RXhwcmVzc2lvbihvcGVyYXRvcik7CiAgICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh0eXBlLCBUb2tlblR5cGUuT1BFTl9QQVJFTikgfHwKICAgICAgICAgICAgICBpZGVudGljYWwodHlwZSwgVG9rZW5UeXBlLk9QRU5fU1FVQVJFX0JSQUNLRVQpIHx8CiAgICAgICAgICAgICAgaWRlbnRpY2FsKHR5cGUsIFRva2VuVHlwZS5RVUVTVElPTl9QRVJJT0RfT1BFTl9TUVVBUkVfQlJBQ0tFVCkpIHsKICAgICAgICAgICAgdG9rZW4gPSBwYXJzZUFyZ3VtZW50T3JJbmRleFN0YXIodG9rZW4sIHR5cGVBcmcpOwogICAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodHlwZSwgVG9rZW5UeXBlLklOREVYKSkgewogICAgICAgICAgICBCZWdpblRva2VuIHJlcGxhY2VtZW50ID0gbGluaygKICAgICAgICAgICAgICAgIG5ldyBCZWdpblRva2VuKFRva2VuVHlwZS5PUEVOX1NRVUFSRV9CUkFDS0VULCBuZXh0LmNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgbmV4dC5wcmVjZWRpbmdDb21tZW50cyksCiAgICAgICAgICAgICAgICBuZXcgVG9rZW4oVG9rZW5UeXBlLkNMT1NFX1NRVUFSRV9CUkFDS0VULCBuZXh0LmNoYXJPZmZzZXQgKyAxKSk7CiAgICAgICAgICAgIHJld3JpdGVyLnJlcGxhY2VUb2tlbkZvbGxvd2luZyh0b2tlbiwgcmVwbGFjZW1lbnQpOwogICAgICAgICAgICByZXBsYWNlbWVudC5lbmRUb2tlbiA9IHJlcGxhY2VtZW50Lm5leHQ7CiAgICAgICAgICAgIHRva2VuID0gcGFyc2VBcmd1bWVudE9ySW5kZXhTdGFyKHRva2VuLCBub1R5cGVQYXJhbU9yQXJnKTsKICAgICAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHR5cGUsIFRva2VuVHlwZS5CQU5HKSkgewogICAgICAgICAgICBsaXN0ZW5lci5oYW5kbGVOb25OdWxsQXNzZXJ0RXhwcmVzc2lvbih0b2tlbi5uZXh0KTsKICAgICAgICAgICAgdG9rZW4gPSBuZXh0OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgICAgICAgIHRva2VuLm5leHQsIGZhc3RhLnRlbXBsYXRlVW5leHBlY3RlZFRva2VuKTsKICAgICAgICAgICAgdG9rZW4gPSBuZXh0OwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHR5cGUsIFRva2VuVHlwZS5JUykpIHsKICAgICAgICAgIHRva2VuID0gcGFyc2VJc09wZXJhdG9yUmVzdCh0b2tlbik7CiAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodHlwZSwgVG9rZW5UeXBlLkFTKSkgewogICAgICAgICAgdG9rZW4gPSBwYXJzZUFzT3BlcmF0b3JSZXN0KHRva2VuKTsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh0eXBlLCBUb2tlblR5cGUuUVVFU1RJT04pKSB7CiAgICAgICAgICB0b2tlbiA9IHBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uUmVzdCh0b2tlbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChsZXZlbCA9PSBFUVVBTElUWV9QUkVDRURFTkNFIHx8IGxldmVsID09IFJFTEFUSU9OQUxfUFJFQ0VERU5DRSkgewogICAgICAgICAgICAvLyBXZSBkb24ndCBhbGxvdyAoYSA9PSBiID09IGMpIG9yIChhIDwgYiA8IGMpLgogICAgICAgICAgICBpZiAobGFzdEJpbmFyeUV4cHJlc3Npb25MZXZlbCA9PSBsZXZlbCkgewogICAgICAgICAgICAgIC8vIFJlcG9ydCBhbiBlcnJvciwgdGhlbiBjb250aW51ZSBwYXJzaW5nIGFzIGlmIGl0IGlzIGxlZ2FsLgogICAgICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgICAgIG5leHQsIGZhc3RhLm1lc3NhZ2VFcXVhbGl0eUNhbm5vdEJlRXF1YWxpdHlPcGVyYW5kKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAvLyBTZXQgYSBmbGFnIHRvIGNhdGNoIHN1YnNlcXVlbnQgYmluYXJ5IGV4cHJlc3Npb25zIG9mIHRoaXMgdHlwZS4KICAgICAgICAgICAgICBsYXN0QmluYXJ5RXhwcmVzc2lvbkxldmVsID0gbGV2ZWw7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGxpc3RlbmVyLmJlZ2luQmluYXJ5RXhwcmVzc2lvbihuZXh0KTsKICAgICAgICAgIC8vIExlZnQgYXNzb2NpYXRpdmUsIHNvIHdlIHJlY3Vyc2UgYXQgdGhlIG5leHQgaGlnaGVyCiAgICAgICAgICAvLyBwcmVjZWRlbmNlIGxldmVsLgogICAgICAgICAgdG9rZW4gPQogICAgICAgICAgICAgIHBhcnNlUHJlY2VkZW5jZUV4cHJlc3Npb24odG9rZW4ubmV4dCwgbGV2ZWwgKyAxLCBhbGxvd0Nhc2NhZGVzKTsKICAgICAgICAgIGxpc3RlbmVyLmVuZEJpbmFyeUV4cHJlc3Npb24ob3BlcmF0b3IpOwogICAgICAgIH0KICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICB0eXBlID0gbmV4dC50eXBlOwogICAgICAgIHRva2VuTGV2ZWwgPSBfY29tcHV0ZVByZWNlZGVuY2UobmV4dCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIGludCBfY29tcHV0ZVByZWNlZGVuY2UoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuVHlwZSB0eXBlID0gdG9rZW4udHlwZTsKICAgIGlmIChpZGVudGljYWwodHlwZSwgVG9rZW5UeXBlLkJBTkcpKSB7CiAgICAgIC8vIFRoZSAnIScgaGFzIHByZWZpeCBwcmVjZWRlbmNlIGJ1dCBoZXJlIGl0J3MgYmVpbmcgdXNlZCBhcyBhCiAgICAgIC8vIHBvc3RmaXggb3BlcmF0b3IgdG8gYXNzZXJ0IHRoZSBleHByZXNzaW9uIGhhcyBhIG5vbi1udWxsIHZhbHVlLgogICAgICBpZiAoaWRlbnRpY2FsKHRva2VuLm5leHQudHlwZSwgVG9rZW5UeXBlLlBFUklPRCkpIHsKICAgICAgICByZXR1cm4gU0VMRUNUT1JfUFJFQ0VERU5DRTsKICAgICAgfQogICAgICByZXR1cm4gUE9TVEZJWF9QUkVDRURFTkNFOwogICAgfQogICAgcmV0dXJuIHR5cGUucHJlY2VkZW5jZTsKICB9CgogIFRva2VuIHBhcnNlQ2FzY2FkZUV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGNhc2NhZGVPcGVyYXRvciA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnLi4nLCBjYXNjYWRlT3BlcmF0b3IpKTsKICAgIGxpc3RlbmVyLmJlZ2luQ2FzY2FkZShjYXNjYWRlT3BlcmF0b3IpOwogICAgaWYgKG9wdGlvbmFsKCdbJywgdG9rZW4ubmV4dCkpIHsKICAgICAgdG9rZW4gPSBwYXJzZUFyZ3VtZW50T3JJbmRleFN0YXIodG9rZW4sIG5vVHlwZVBhcmFtT3JBcmcpOwogICAgfSBlbHNlIHsKICAgICAgdG9rZW4gPSBwYXJzZVNlbmQodG9rZW4sIElkZW50aWZpZXJDb250ZXh0LmV4cHJlc3Npb25Db250aW51YXRpb24pOwogICAgICBsaXN0ZW5lci5lbmRCaW5hcnlFeHByZXNzaW9uKGNhc2NhZGVPcGVyYXRvcik7CiAgICB9CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIFRva2VuIG1hcms7CiAgICBkbyB7CiAgICAgIG1hcmsgPSB0b2tlbjsKICAgICAgaWYgKG9wdGlvbmFsKCcuJywgbmV4dCkgfHwgb3B0aW9uYWwoJz8uJywgbmV4dCkpIHsKICAgICAgICBUb2tlbiBwZXJpb2QgPSBuZXh0OwogICAgICAgIHRva2VuID0gcGFyc2VTZW5kKG5leHQsIElkZW50aWZpZXJDb250ZXh0LmV4cHJlc3Npb25Db250aW51YXRpb24pOwogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIGxpc3RlbmVyLmVuZEJpbmFyeUV4cHJlc3Npb24ocGVyaW9kKTsKICAgICAgfQogICAgICBUeXBlUGFyYW1PckFyZ0luZm8gdHlwZUFyZyA9IGNvbXB1dGVNZXRob2RUeXBlQXJndW1lbnRzKHRva2VuKTsKICAgICAgaWYgKHR5cGVBcmcgIT0gbm9UeXBlUGFyYW1PckFyZykgewogICAgICAgIC8vIEZvciBleGFtcGxlIGEoYikuLjxUPihjKSwgd2hlcmUgdG9rZW4gaXMgJzwnLgogICAgICAgIHRva2VuID0gdHlwZUFyZy5wYXJzZUFyZ3VtZW50cyh0b2tlbiwgdGhpcyk7CiAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgYXNzZXJ0KG9wdGlvbmFsKCcoJywgbmV4dCkpOwogICAgICB9CiAgICAgIHRva2VuID0gcGFyc2VBcmd1bWVudE9ySW5kZXhTdGFyKHRva2VuLCB0eXBlQXJnKTsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICB9IHdoaWxlICghaWRlbnRpY2FsKG1hcmssIHRva2VuKSk7CgogICAgaWYgKGlkZW50aWNhbChuZXh0LnR5cGUucHJlY2VkZW5jZSwgQVNTSUdOTUVOVF9QUkVDRURFTkNFKSkgewogICAgICBUb2tlbiBhc3NpZ25tZW50ID0gbmV4dDsKICAgICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb25XaXRob3V0Q2FzY2FkZShuZXh0KTsKICAgICAgbGlzdGVuZXIuaGFuZGxlQXNzaWdubWVudEV4cHJlc3Npb24oYXNzaWdubWVudCk7CiAgICB9CiAgICBsaXN0ZW5lci5lbmRDYXNjYWRlKCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZVVuYXJ5RXhwcmVzc2lvbihUb2tlbiB0b2tlbiwgYm9vbCBhbGxvd0Nhc2NhZGVzKSB7CiAgICBTdHJpbmcgdmFsdWUgPSB0b2tlbi5uZXh0LnN0cmluZ1ZhbHVlOwogICAgLy8gUHJlZml4OgogICAgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2F3YWl0JykpIHsKICAgICAgaWYgKGluUGxhaW5TeW5jKSB7CiAgICAgICAgaWYgKCFsb29rc0xpa2VBd2FpdEV4cHJlc3Npb24odG9rZW4pKSB7CiAgICAgICAgICByZXR1cm4gcGFyc2VQcmltYXJ5KHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC5leHByZXNzaW9uKTsKICAgICAgICB9CiAgICAgICAgLy8gUmVjb3Zlcnk6IExvb2tzIGxpa2UgYW4gZXhwcmVzc2lvbiBwcmVjZWRlZCBieSBgYXdhaXRgLgogICAgICAgIC8vIEZhbGwgdGhyb3VnaCBhbmQgbGV0IHBhcnNlQXdhaXRFeHByZXNzaW9uIHJlcG9ydCB0aGUgZXJyb3IuCiAgICAgIH0KICAgICAgcmV0dXJuIHBhcnNlQXdhaXRFeHByZXNzaW9uKHRva2VuLCBhbGxvd0Nhc2NhZGVzKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnKycpKSB7CiAgICAgIC8vIERhcnQgbm8gbG9uZ2VyIGFsbG93cyBwcmVmaXgtcGx1cy4KICAgICAgcmV3cml0ZUFuZFJlY292ZXIoCiAgICAgICAgICB0b2tlbiwKICAgICAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBDb25zaWRlciByZXBvcnRpbmcgIm1pc3NpbmcgaWRlbnRpZmllciIgaW5zdGVhZC4KICAgICAgICAgIGZhc3RhLm1lc3NhZ2VVbnN1cHBvcnRlZFByZWZpeFBsdXMsCiAgICAgICAgICBuZXcgU3ludGhldGljU3RyaW5nVG9rZW4oCiAgICAgICAgICAgICAgVG9rZW5UeXBlLklERU5USUZJRVIsICcnLCB0b2tlbi5uZXh0Lm9mZnNldCkpOwogICAgICByZXR1cm4gcGFyc2VQcmltYXJ5KHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC5leHByZXNzaW9uKTsKICAgIH0gZWxzZSBpZiAoKGlkZW50aWNhbCh2YWx1ZSwgJyEnKSkgfHwKICAgICAgICAoaWRlbnRpY2FsKHZhbHVlLCAnLScpKSB8fAogICAgICAgIChpZGVudGljYWwodmFsdWUsICd+JykpKSB7CiAgICAgIFRva2VuIG9wZXJhdG9yID0gdG9rZW4ubmV4dDsKICAgICAgLy8gUmlnaHQgYXNzb2NpYXRpdmUsIHNvIHdlIHJlY3Vyc2UgYXQgdGhlIHNhbWUgcHJlY2VkZW5jZQogICAgICAvLyBsZXZlbC4KICAgICAgdG9rZW4gPSBwYXJzZVByZWNlZGVuY2VFeHByZXNzaW9uKAogICAgICAgICAgdG9rZW4ubmV4dCwgUE9TVEZJWF9QUkVDRURFTkNFLCBhbGxvd0Nhc2NhZGVzKTsKICAgICAgbGlzdGVuZXIuaGFuZGxlVW5hcnlQcmVmaXhFeHByZXNzaW9uKG9wZXJhdG9yKTsKICAgICAgcmV0dXJuIHRva2VuOwogICAgfSBlbHNlIGlmICgoaWRlbnRpY2FsKHZhbHVlLCAnKysnKSkgfHwgaWRlbnRpY2FsKHZhbHVlLCAnLS0nKSkgewogICAgICAvLyBUT0RPKGFoZSk6IFZhbGlkYXRlIHRoaXMgaXMgdXNlZCBjb3JyZWN0bHkuCiAgICAgIFRva2VuIG9wZXJhdG9yID0gdG9rZW4ubmV4dDsKICAgICAgLy8gUmlnaHQgYXNzb2NpYXRpdmUsIHNvIHdlIHJlY3Vyc2UgYXQgdGhlIHNhbWUgcHJlY2VkZW5jZQogICAgICAvLyBsZXZlbC4KICAgICAgdG9rZW4gPSBwYXJzZVByZWNlZGVuY2VFeHByZXNzaW9uKAogICAgICAgICAgdG9rZW4ubmV4dCwgUE9TVEZJWF9QUkVDRURFTkNFLCBhbGxvd0Nhc2NhZGVzKTsKICAgICAgbGlzdGVuZXIuaGFuZGxlVW5hcnlQcmVmaXhBc3NpZ25tZW50RXhwcmVzc2lvbihvcGVyYXRvcik7CiAgICAgIHJldHVybiB0b2tlbjsKICAgIH0gZWxzZSBpZiAodG9rZW4ubmV4dC5pc0lkZW50aWZpZXIpIHsKICAgICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICAgIGlmIChvcHRpb25hbCgiLiIsIGlkZW50aWZpZXIubmV4dCkpIHsKICAgICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllci5uZXh0Lm5leHQ7CiAgICAgIH0KICAgICAgaWYgKGlkZW50aWZpZXIuaXNJZGVudGlmaWVyKSB7CiAgICAgICAgLy8gTG9va2luZyBhdCBgaWRlbnRpZmllciAoJy4nIGlkZW50aWZpZXIpP2AuCiAgICAgICAgaWYgKG9wdGlvbmFsKCI8IiwgaWRlbnRpZmllci5uZXh0KSkgewogICAgICAgICAgVHlwZVBhcmFtT3JBcmdJbmZvIHR5cGVBcmcgPSBjb21wdXRlVHlwZVBhcmFtT3JBcmcoaWRlbnRpZmllcik7CiAgICAgICAgICBpZiAodHlwZUFyZyAhPSBub1R5cGVQYXJhbU9yQXJnKSB7CiAgICAgICAgICAgIFRva2VuIGVuZFR5cGVBcmd1bWVudHMgPSB0eXBlQXJnLnNraXAoaWRlbnRpZmllcik7CiAgICAgICAgICAgIGlmIChvcHRpb25hbCgiLiIsIGVuZFR5cGVBcmd1bWVudHMubmV4dCkpIHsKICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbXBsaWNpdENyZWF0aW9uRXhwcmVzc2lvbih0b2tlbiwgdHlwZUFyZyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBwYXJzZVByaW1hcnkodG9rZW4sIElkZW50aWZpZXJDb250ZXh0LmV4cHJlc3Npb24pOwogIH0KCiAgVG9rZW4gcGFyc2VBcmd1bWVudE9ySW5kZXhTdGFyKFRva2VuIHRva2VuLCBUeXBlUGFyYW1PckFyZ0luZm8gdHlwZUFyZykgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBUb2tlbiBiZWdpblRva2VuID0gbmV4dDsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGlmIChvcHRpb25hbCgnWycsIG5leHQpIHx8IG9wdGlvbmFsKCc/LlsnLCBuZXh0KSkgewogICAgICAgIGFzc2VydCh0eXBlQXJnID09IG5vVHlwZVBhcmFtT3JBcmcpOwogICAgICAgIFRva2VuIG9wZW5TcXVhcmVCcmFja2V0ID0gbmV4dDsKICAgICAgICBib29sIG9sZCA9IG1heVBhcnNlRnVuY3Rpb25FeHByZXNzaW9uczsKICAgICAgICBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnMgPSB0cnVlOwogICAgICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKG5leHQpOwogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIG1heVBhcnNlRnVuY3Rpb25FeHByZXNzaW9ucyA9IG9sZDsKICAgICAgICBpZiAoIW9wdGlvbmFsKCddJywgbmV4dCkpIHsKICAgICAgICAgIC8vIFJlY292ZXJ5CiAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICAgIG5leHQsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRCdXRHb3Qud2l0aEFyZ3VtZW50cygnXScpKTsKICAgICAgICAgIC8vIFNjYW5uZXIgZW5zdXJlcyBhIGNsb3NpbmcgJ10nCiAgICAgICAgICBUb2tlbiBlbmRHcm91cCA9IG9wZW5TcXVhcmVCcmFja2V0LmVuZEdyb3VwOwogICAgICAgICAgaWYgKGVuZEdyb3VwLmlzU3ludGhldGljKSB7CiAgICAgICAgICAgIC8vIFNjYW5uZXIgaW5zZXJ0ZWQgY2xvc2luZyAnXScgaW4gdGhlIHdyb25nIHBsYWNlLCBzbyBtb3ZlIGl0LgogICAgICAgICAgICBuZXh0ID0gcmV3cml0ZXIubW92ZVN5bnRoZXRpYyh0b2tlbiwgZW5kR3JvdXApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gU2tpcCBvdmVyIHVuZXhwZWN0ZWQgdG9rZW5zIHRvIHdoZXJlIHRoZSB1c2VyIHBsYWNlZCB0aGUgYF1gLgogICAgICAgICAgICBuZXh0ID0gZW5kR3JvdXA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGxpc3RlbmVyLmhhbmRsZUluZGV4ZWRFeHByZXNzaW9uKG9wZW5TcXVhcmVCcmFja2V0LCBuZXh0KTsKICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgdHlwZUFyZyA9IGNvbXB1dGVNZXRob2RUeXBlQXJndW1lbnRzKHRva2VuKTsKICAgICAgICBpZiAodHlwZUFyZyAhPSBub1R5cGVQYXJhbU9yQXJnKSB7CiAgICAgICAgICAvLyBGb3IgZXhhbXBsZSBhW2JdPFQ+KGMpLCB3aGVyZSB0b2tlbiBpcyBiZWZvcmUgJzwnLgogICAgICAgICAgdG9rZW4gPSB0eXBlQXJnLnBhcnNlQXJndW1lbnRzKHRva2VuLCB0aGlzKTsKICAgICAgICAgIGFzc2VydChvcHRpb25hbCgnKCcsIHRva2VuLm5leHQpKTsKICAgICAgICB9CiAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJygnLCBuZXh0KSkgewogICAgICAgIGlmICh0eXBlQXJnID09IG5vVHlwZVBhcmFtT3JBcmcpIHsKICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZU5vVHlwZUFyZ3VtZW50cyhuZXh0KTsKICAgICAgICB9CiAgICAgICAgdG9rZW4gPSBwYXJzZUFyZ3VtZW50cyh0b2tlbik7CiAgICAgICAgbGlzdGVuZXIuaGFuZGxlU2VuZChiZWdpblRva2VuLCB0b2tlbik7CiAgICAgICAgdHlwZUFyZyA9IGNvbXB1dGVNZXRob2RUeXBlQXJndW1lbnRzKHRva2VuKTsKICAgICAgICBpZiAodHlwZUFyZyAhPSBub1R5cGVQYXJhbU9yQXJnKSB7CiAgICAgICAgICAvLyBGb3IgZXhhbXBsZSBhKGIpPFQ+KGMpLCB3aGVyZSB0b2tlbiBpcyBiZWZvcmUgJzwnLgogICAgICAgICAgdG9rZW4gPSB0eXBlQXJnLnBhcnNlQXJndW1lbnRzKHRva2VuLCB0aGlzKTsKICAgICAgICAgIGFzc2VydChvcHRpb25hbCgnKCcsIHRva2VuLm5leHQpKTsKICAgICAgICB9CiAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlUHJpbWFyeShUb2tlbiB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQgY29udGV4dCkgewogICAgZmluYWwgaW50IGtpbmQgPSB0b2tlbi5uZXh0LmtpbmQ7CiAgICBpZiAoa2luZCA9PSBJREVOVElGSUVSX1RPS0VOKSB7CiAgICAgIHJldHVybiBwYXJzZVNlbmRPckZ1bmN0aW9uTGl0ZXJhbCh0b2tlbiwgY29udGV4dCk7CiAgICB9IGVsc2UgaWYgKGtpbmQgPT0gSU5UX1RPS0VOIHx8IGtpbmQgPT0gSEVYQURFQ0lNQUxfVE9LRU4pIHsKICAgICAgcmV0dXJuIHBhcnNlTGl0ZXJhbEludCh0b2tlbik7CiAgICB9IGVsc2UgaWYgKGtpbmQgPT0gRE9VQkxFX1RPS0VOKSB7CiAgICAgIHJldHVybiBwYXJzZUxpdGVyYWxEb3VibGUodG9rZW4pOwogICAgfSBlbHNlIGlmIChraW5kID09IFNUUklOR19UT0tFTikgewogICAgICByZXR1cm4gcGFyc2VMaXRlcmFsU3RyaW5nKHRva2VuKTsKICAgIH0gZWxzZSBpZiAoa2luZCA9PSBIQVNIX1RPS0VOKSB7CiAgICAgIHJldHVybiBwYXJzZUxpdGVyYWxTeW1ib2wodG9rZW4pOwogICAgfSBlbHNlIGlmIChraW5kID09IEtFWVdPUkRfVE9LRU4pIHsKICAgICAgZmluYWwgU3RyaW5nIHZhbHVlID0gdG9rZW4ubmV4dC5zdHJpbmdWYWx1ZTsKICAgICAgaWYgKGlkZW50aWNhbCh2YWx1ZSwgInRydWUiKSB8fCBpZGVudGljYWwodmFsdWUsICJmYWxzZSIpKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlTGl0ZXJhbEJvb2wodG9rZW4pOwogICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgIm51bGwiKSkgewogICAgICAgIHJldHVybiBwYXJzZUxpdGVyYWxOdWxsKHRva2VuKTsKICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICJ0aGlzIikpIHsKICAgICAgICByZXR1cm4gcGFyc2VUaGlzRXhwcmVzc2lvbih0b2tlbiwgY29udGV4dCk7CiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAic3VwZXIiKSkgewogICAgICAgIHJldHVybiBwYXJzZVN1cGVyRXhwcmVzc2lvbih0b2tlbiwgY29udGV4dCk7CiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAibmV3IikpIHsKICAgICAgICByZXR1cm4gcGFyc2VOZXdFeHByZXNzaW9uKHRva2VuKTsKICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICJjb25zdCIpKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlQ29uc3RFeHByZXNzaW9uKHRva2VuKTsKICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICJ2b2lkIikpIHsKICAgICAgICByZXR1cm4gcGFyc2VTZW5kT3JGdW5jdGlvbkxpdGVyYWwodG9rZW4sIGNvbnRleHQpOwogICAgICB9IGVsc2UgaWYgKCFpblBsYWluU3luYyAmJgogICAgICAgICAgKGlkZW50aWNhbCh2YWx1ZSwgInlpZWxkIikgfHwgaWRlbnRpY2FsKHZhbHVlLCAiYXN5bmMiKSkpIHsKICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gdGhlIHJlY292ZXJ5IGNvZGUuCiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAiYXNzZXJ0IikpIHsKICAgICAgICByZXR1cm4gcGFyc2VBc3NlcnQodG9rZW4sIEFzc2VydC5FeHByZXNzaW9uKTsKICAgICAgfSBlbHNlIGlmICh0b2tlbi5uZXh0LmlzSWRlbnRpZmllcikgewogICAgICAgIHJldHVybiBwYXJzZVNlbmRPckZ1bmN0aW9uTGl0ZXJhbCh0b2tlbiwgY29udGV4dCk7CiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAicmV0dXJuIikpIHsKICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKHRva2VuLCBmYXN0YS50ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbik7CiAgICAgICAgcmV0dXJuIHBhcnNlUHJpbWFyeSh0b2tlbiwgY29udGV4dCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIHRoZSByZWNvdmVyeSBjb2RlLgogICAgICB9CiAgICB9IGVsc2UgaWYgKGtpbmQgPT0gT1BFTl9QQVJFTl9UT0tFTikgewogICAgICByZXR1cm4gcGFyc2VQYXJlbnRoZXNpemVkRXhwcmVzc2lvbk9yRnVuY3Rpb25MaXRlcmFsKHRva2VuKTsKICAgIH0gZWxzZSBpZiAoa2luZCA9PSBPUEVOX1NRVUFSRV9CUkFDS0VUX1RPS0VOIHx8CiAgICAgICAgb3B0aW9uYWwoJ1tdJywgdG9rZW4ubmV4dCkpIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlTm9UeXBlQXJndW1lbnRzKHRva2VuLm5leHQpOwogICAgICByZXR1cm4gcGFyc2VMaXRlcmFsTGlzdFN1ZmZpeCh0b2tlbiwgbnVsbCk7CiAgICB9IGVsc2UgaWYgKGtpbmQgPT0gT1BFTl9DVVJMWV9CUkFDS0VUX1RPS0VOKSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU5vVHlwZUFyZ3VtZW50cyh0b2tlbi5uZXh0KTsKICAgICAgcmV0dXJuIHBhcnNlTGl0ZXJhbFNldE9yTWFwU3VmZml4KHRva2VuLCBudWxsKTsKICAgIH0gZWxzZSBpZiAoa2luZCA9PSBMVF9UT0tFTikgewogICAgICByZXR1cm4gcGFyc2VMaXRlcmFsTGlzdFNldE1hcE9yRnVuY3Rpb24odG9rZW4sIG51bGwpOwogICAgfSBlbHNlIHsKICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIHRoZSByZWNvdmVyeSBjb2RlLgogICAgfQogICAgLy8KICAgIC8vIFJlY292ZXJ5IGNvZGUuCiAgICAvLwogICAgcmV0dXJuIHBhcnNlU2VuZCh0b2tlbiwgY29udGV4dCk7CiAgfQoKICBUb2tlbiBwYXJzZVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uT3JGdW5jdGlvbkxpdGVyYWwoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCcoJywgbmV4dCkpOwogICAgVG9rZW4gbmV4dFRva2VuID0gbmV4dC5lbmRHcm91cC5uZXh0OwogICAgaW50IGtpbmQgPSBuZXh0VG9rZW4ua2luZDsKICAgIGlmIChtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnMpIHsKICAgICAgaWYgKChpZGVudGljYWwoa2luZCwgRlVOQ1RJT05fVE9LRU4pIHx8CiAgICAgICAgICBpZGVudGljYWwoa2luZCwgT1BFTl9DVVJMWV9CUkFDS0VUX1RPS0VOKSkpIHsKICAgICAgICBsaXN0ZW5lci5oYW5kbGVOb1R5cGVWYXJpYWJsZXMobmV4dCk7CiAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKHRva2VuKTsKICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwoa2luZCwgS0VZV09SRF9UT0tFTikgfHwKICAgICAgICAgIGlkZW50aWNhbChraW5kLCBJREVOVElGSUVSX1RPS0VOKSkgewogICAgICAgIGlmIChvcHRpb25hbCgnYXN5bmMnLCBuZXh0VG9rZW4pIHx8IG9wdGlvbmFsKCdzeW5jJywgbmV4dFRva2VuKSkgewogICAgICAgICAgbGlzdGVuZXIuaGFuZGxlTm9UeXBlVmFyaWFibGVzKG5leHQpOwogICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKHRva2VuKTsKICAgICAgICB9CiAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHN0cmF5IHNpbXBsZSBpZGVudGlmaWVyIGluIHRoZSBmdW5jdGlvbiBleHByZXNzaW9uCiAgICAgICAgLy8gYmVjYXVzZSB0aGUgdXNlciBpcyB0eXBpbmcgKGUuZy4gYCgpIGFzeSB7fWApIHRoZW4gY29udGludWUgcGFyc2luZwogICAgICAgIC8vIGFuZCBhbGxvdyBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbiB0byByZXBvcnQgYW4gdW5leHBlY3RlZCB0b2tlbi4KICAgICAgICBraW5kID0gbmV4dFRva2VuLm5leHQua2luZDsKICAgICAgICBpZiAoKGlkZW50aWNhbChraW5kLCBGVU5DVElPTl9UT0tFTikgfHwKICAgICAgICAgICAgaWRlbnRpY2FsKGtpbmQsIE9QRU5fQ1VSTFlfQlJBQ0tFVF9UT0tFTikpKSB7CiAgICAgICAgICBsaXN0ZW5lci5oYW5kbGVOb1R5cGVWYXJpYWJsZXMobmV4dCk7CiAgICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkV4cHJlc3Npb24odG9rZW4pOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgYm9vbCBvbGQgPSBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnM7CiAgICBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnMgPSB0cnVlOwogICAgdG9rZW4gPSBwYXJzZVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uKHRva2VuKTsKICAgIG1heVBhcnNlRnVuY3Rpb25FeHByZXNzaW9ucyA9IG9sZDsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIGVuc3VyZVBhcmVudGhlc2l6ZWRDb25kaXRpb24oVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG9wZW5QYXJlbiA9IHRva2VuLm5leHQ7CiAgICBpZiAoIW9wdGlvbmFsKCcoJywgb3BlblBhcmVuKSkgewogICAgICAvLyBSZWNvdmVyCiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICBvcGVuUGFyZW4sIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRUb2tlbi53aXRoQXJndW1lbnRzKCcoJykpOwogICAgICBvcGVuUGFyZW4gPSByZXdyaXRlci5pbnNlcnRQYXJlbnModG9rZW4sIGZhbHNlKTsKICAgIH0KICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uSW5QYXJlbnRoZXNpc1Jlc3Qob3BlblBhcmVuKTsKICAgIGxpc3RlbmVyLmhhbmRsZVBhcmVudGhlc2l6ZWRDb25kaXRpb24ob3BlblBhcmVuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlUGFyZW50aGVzaXplZEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGJlZ2luID0gdG9rZW4ubmV4dDsKICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uSW5QYXJlbnRoZXNpcyh0b2tlbik7CiAgICBsaXN0ZW5lci5oYW5kbGVQYXJlbnRoZXNpemVkRXhwcmVzc2lvbihiZWdpbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZUV4cHJlc3Npb25JblBhcmVudGhlc2lzKFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uSW5QYXJlbnRoZXNpc1Jlc3QodG9rZW4ubmV4dCk7CiAgfQoKICBUb2tlbiBwYXJzZUV4cHJlc3Npb25JblBhcmVudGhlc2lzUmVzdChUb2tlbiB0b2tlbikgewogICAgYXNzZXJ0KG9wdGlvbmFsKCcoJywgdG9rZW4pKTsKICAgIEJlZ2luVG9rZW4gYmVnaW4gPSB0b2tlbjsKICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKHRva2VuKTsKICAgIHRva2VuID0gZW5zdXJlQ2xvc2VQYXJlbih0b2tlbiwgYmVnaW4pOwogICAgYXNzZXJ0KG9wdGlvbmFsKCcpJywgdG9rZW4pKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlVGhpc0V4cHJlc3Npb24oVG9rZW4gdG9rZW4sIElkZW50aWZpZXJDb250ZXh0IGNvbnRleHQpIHsKICAgIFRva2VuIHRoaXNUb2tlbiA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgndGhpcycsIHRoaXNUb2tlbikpOwogICAgbGlzdGVuZXIuaGFuZGxlVGhpc0V4cHJlc3Npb24odGhpc1Rva2VuLCBjb250ZXh0KTsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG9wdGlvbmFsKCcoJywgbmV4dCkpIHsKICAgICAgLy8gQ29uc3RydWN0b3IgZm9yd2FyZGluZy4KICAgICAgbGlzdGVuZXIuaGFuZGxlTm9UeXBlQXJndW1lbnRzKG5leHQpOwogICAgICB0b2tlbiA9IHBhcnNlQXJndW1lbnRzKHRva2VuKTsKICAgICAgbGlzdGVuZXIuaGFuZGxlU2VuZCh0aGlzVG9rZW4sIHRva2VuLm5leHQpOwogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VTdXBlckV4cHJlc3Npb24oVG9rZW4gdG9rZW4sIElkZW50aWZpZXJDb250ZXh0IGNvbnRleHQpIHsKICAgIFRva2VuIHN1cGVyVG9rZW4gPSB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ3N1cGVyJywgdG9rZW4pKTsKICAgIGxpc3RlbmVyLmhhbmRsZVN1cGVyRXhwcmVzc2lvbihzdXBlclRva2VuLCBjb250ZXh0KTsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG9wdGlvbmFsKCcoJywgbmV4dCkpIHsKICAgICAgLy8gU3VwZXIgY29uc3RydWN0b3IuCiAgICAgIGxpc3RlbmVyLmhhbmRsZU5vVHlwZUFyZ3VtZW50cyhuZXh0KTsKICAgICAgdG9rZW4gPSBwYXJzZUFyZ3VtZW50cyh0b2tlbik7CiAgICAgIGxpc3RlbmVyLmhhbmRsZVNlbmQoc3VwZXJUb2tlbiwgdG9rZW4ubmV4dCk7CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCI/LiIsIG5leHQpKSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IobmV4dCwgZmFzdGEubWVzc2FnZVN1cGVyTnVsbEF3YXJlKTsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBUaGlzIG1ldGhvZCBwYXJzZXMgdGhlIHBvcnRpb24gb2YgYSBsaXN0IGxpdGVyYWwgc3RhcnRpbmcgd2l0aCB0aGUgbGVmdAogIC8vLyBzcXVhcmUgYnJhY2tldC4KICAvLy8KICAvLy8gYGBgCiAgLy8vIGxpc3RMaXRlcmFsOgogIC8vLyAgICdjb25zdCc/IHR5cGVBcmd1bWVudHM/ICdbJyAoZXhwcmVzc2lvbkxpc3QgJywnPyk/ICddJwogIC8vLyA7CiAgLy8vIGBgYAogIC8vLwogIC8vLyBQcm92aWRlIGEgW2NvbnN0S2V5d29yZF0gaWYgdGhlIGxpdGVyYWwgaXMgcHJlY2VkZWQgYnkgJ2NvbnN0Jywgb3IgYG51bGxgCiAgLy8vIGlmIG5vdC4gVGhpcyBpcyBhIHN1ZmZpeCBwYXJzZXIgYmVjYXVzZSBpdCBpcyBhc3N1bWVkIHRoYXQgdHlwZSBhcmd1bWVudHMKICAvLy8gaGF2ZSBiZWVuIHBhcnNlZCwgb3IgYGxpc3RlbmVyLmhhbmRsZU5vVHlwZUFyZ3VtZW50c2AgaGFzIGJlZW4gZXhlY3V0ZWQuCiAgVG9rZW4gcGFyc2VMaXRlcmFsTGlzdFN1ZmZpeChUb2tlbiB0b2tlbiwgVG9rZW4gY29uc3RLZXl3b3JkKSB7CiAgICBUb2tlbiBiZWZvcmVUb2tlbiA9IHRva2VuOwogICAgVG9rZW4gYmVnaW5Ub2tlbiA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnWycsIHRva2VuKSB8fCBvcHRpb25hbCgnW10nLCB0b2tlbikpOwogICAgaW50IGNvdW50ID0gMDsKICAgIGlmIChvcHRpb25hbCgnW10nLCB0b2tlbikpIHsKICAgICAgdG9rZW4gPSByZXdyaXRlU3F1YXJlQnJhY2tldHMoYmVmb3JlVG9rZW4pLm5leHQ7CiAgICAgIGxpc3RlbmVyLmhhbmRsZUxpdGVyYWxMaXN0KDAsIHRva2VuLCBjb25zdEtleXdvcmQsIHRva2VuLm5leHQpOwogICAgICByZXR1cm4gdG9rZW4ubmV4dDsKICAgIH0KICAgIGJvb2wgb2xkID0gbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zOwogICAgbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zID0gdHJ1ZTsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBpZiAob3B0aW9uYWwoJ10nLCBuZXh0KSkgewogICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBpbnQgaWZDb3VudCA9IDA7CiAgICAgIExpdGVyYWxFbnRyeUluZm8gaW5mbyA9IGNvbXB1dGVMaXRlcmFsRW50cnkodG9rZW4pOwogICAgICB3aGlsZSAoaW5mbyAhPSBudWxsKSB7CiAgICAgICAgaWYgKGluZm8uaGFzRW50cnkpIHsKICAgICAgICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKHRva2VuKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdG9rZW4gPSBpbmZvLnBhcnNlKHRva2VuLCB0aGlzKTsKICAgICAgICB9CiAgICAgICAgaWZDb3VudCArPSBpbmZvLmlmQ29uZGl0aW9uRGVsdGE7CiAgICAgICAgaW5mbyA9IGluZm8uY29tcHV0ZU5leHQodG9rZW4pOwogICAgICB9CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICArK2NvdW50OwogICAgICBpZiAoIW9wdGlvbmFsKCcsJywgbmV4dCkpIHsKICAgICAgICBpZiAob3B0aW9uYWwoJ10nLCBuZXh0KSkgewogICAgICAgICAgdG9rZW4gPSBuZXh0OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgIGlmICghbG9va3NMaWtlTGl0ZXJhbEVudHJ5KG5leHQpKSB7CiAgICAgICAgICBpZiAoYmVnaW5Ub2tlbi5lbmRHcm91cC5pc1N5bnRoZXRpYykgewogICAgICAgICAgICAvLyBUaGUgc2Nhbm5lciBoYXMgYWxyZWFkeSByZXBvcnRlZCBhbiBlcnJvciwKICAgICAgICAgICAgLy8gYnV0IGluc2VydGVkIGBdYCBpbiB0aGUgd3JvbmcgcGxhY2UuCiAgICAgICAgICAgIHRva2VuID0gcmV3cml0ZXIubW92ZVN5bnRoZXRpYyh0b2tlbiwgYmVnaW5Ub2tlbi5lbmRHcm91cCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBSZXBvcnQgYW4gZXJyb3IgYW5kIGp1bXAgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4KICAgICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICAgIG5leHQsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRCdXRHb3Qud2l0aEFyZ3VtZW50cygnXScpKTsKICAgICAgICAgICAgdG9rZW4gPSBiZWdpblRva2VuLmVuZEdyb3VwOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIC8vIFRoaXMgbG9va3MgbGlrZSB0aGUgc3RhcnQgb2YgYW4gZXhwcmVzc2lvbi4KICAgICAgICAvLyBSZXBvcnQgYW4gZXJyb3IsIGluc2VydCB0aGUgY29tbWEsIGFuZCBjb250aW51ZSBwYXJzaW5nLgogICAgICAgIFN5bnRoZXRpY1Rva2VuIGNvbW1hID0gbmV3IFN5bnRoZXRpY1Rva2VuKFRva2VuVHlwZS5DT01NQSwgbmV4dC5vZmZzZXQpOwogICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGlmQ291bnQgPiAwCiAgICAgICAgICAgID8gZmFzdGEubWVzc2FnZUV4cGVjdGVkRWxzZU9yQ29tbWEKICAgICAgICAgICAgOiBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJywnKTsKICAgICAgICBuZXh0ID0gcmV3cml0ZUFuZFJlY292ZXIodG9rZW4sIG1lc3NhZ2UsIGNvbW1hKTsKICAgICAgfQogICAgICB0b2tlbiA9IG5leHQ7CiAgICB9CiAgICBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnMgPSBvbGQ7CiAgICBsaXN0ZW5lci5oYW5kbGVMaXRlcmFsTGlzdChjb3VudCwgYmVnaW5Ub2tlbiwgY29uc3RLZXl3b3JkLCB0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gVGhpcyBtZXRob2QgcGFyc2VzIHRoZSBwb3J0aW9uIG9mIGEgc2V0IG9yIG1hcCBsaXRlcmFsIHRoYXQgc3RhcnRzIHdpdGgKICAvLy8gdGhlIGxlZnQgY3VybHkgYnJhY2Ugd2hlbiB0aGVyZSBhcmUgbm8gbGVhZGluZyB0eXBlIGFyZ3VtZW50cy4KICBUb2tlbiBwYXJzZUxpdGVyYWxTZXRPck1hcFN1ZmZpeChUb2tlbiB0b2tlbiwgVG9rZW4gY29uc3RLZXl3b3JkKSB7CiAgICBUb2tlbiBsZWZ0QnJhY2UgPSB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ3snLCBsZWZ0QnJhY2UpKTsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG9wdGlvbmFsKCd9JywgbmV4dCkpIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlTGl0ZXJhbFNldE9yTWFwKDAsIGxlZnRCcmFjZSwgY29uc3RLZXl3b3JkLCBuZXh0LCBmYWxzZSk7CiAgICAgIHJldHVybiBuZXh0OwogICAgfQoKICAgIGZpbmFsIGJvb2wgb2xkID0gbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zOwogICAgbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zID0gdHJ1ZTsKICAgIGludCBjb3VudCA9IDA7CiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogaGFzU2V0RW50cnkgcGFyYW1ldGVyIGV4aXN0cyBmb3IgcmVwbGljYXRpbmcgZXhpc3RpbmcKICAgIC8vIGJlaGF2aW9yIGFuZCB3aWxsIGJlIHJlbW92ZWQgb25jZSB1bmlmaWVkIGNvbGxlY3Rpb24gaGFzIGJlZW4gZW5hYmxlZAogICAgYm9vbCBoYXNTZXRFbnRyeTsKCiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBpbnQgaWZDb3VudCA9IDA7CiAgICAgIExpdGVyYWxFbnRyeUluZm8gaW5mbyA9IGNvbXB1dGVMaXRlcmFsRW50cnkodG9rZW4pOwogICAgICBpZiAoaW5mbyA9PSBzaW1wbGVFbnRyeSkgewogICAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBSZW1vdmUgdGhpcyBzZWN0aW9uIGFuZCB1c2UgdGhlIHdoaWxlIGxvb3AgYmVsb3cKICAgICAgICAvLyBvbmNlIGhhc1NldEVudHJ5IGlzIG5vIGxvbmdlciBuZWVkZWQuCiAgICAgICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb24odG9rZW4pOwogICAgICAgIGJvb2wgaXNNYXBFbnRyeSA9IG9wdGlvbmFsKCc6JywgdG9rZW4ubmV4dCk7CiAgICAgICAgaGFzU2V0RW50cnkgPz89ICFpc01hcEVudHJ5OwogICAgICAgIGlmIChpc01hcEVudHJ5KSB7CiAgICAgICAgICBUb2tlbiBjb2xvbiA9IHRva2VuLm5leHQ7CiAgICAgICAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbihjb2xvbik7CiAgICAgICAgICBsaXN0ZW5lci5oYW5kbGVMaXRlcmFsTWFwRW50cnkoY29sb24sIHRva2VuLm5leHQpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB3aGlsZSAoaW5mbyAhPSBudWxsKSB7CiAgICAgICAgICBpZiAoaW5mby5oYXNFbnRyeSkgewogICAgICAgICAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbih0b2tlbik7CiAgICAgICAgICAgIGlmIChvcHRpb25hbCgnOicsIHRva2VuLm5leHQpKSB7CiAgICAgICAgICAgICAgVG9rZW4gY29sb24gPSB0b2tlbi5uZXh0OwogICAgICAgICAgICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKGNvbG9uKTsKICAgICAgICAgICAgICBsaXN0ZW5lci5oYW5kbGVMaXRlcmFsTWFwRW50cnkoY29sb24sIHRva2VuLm5leHQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0b2tlbiA9IGluZm8ucGFyc2UodG9rZW4sIHRoaXMpOwogICAgICAgICAgfQogICAgICAgICAgaWZDb3VudCArPSBpbmZvLmlmQ29uZGl0aW9uRGVsdGE7CiAgICAgICAgICBpbmZvID0gaW5mby5jb21wdXRlTmV4dCh0b2tlbik7CiAgICAgICAgfQogICAgICB9CiAgICAgICsrY291bnQ7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwoKICAgICAgVG9rZW4gY29tbWE7CiAgICAgIGlmIChvcHRpb25hbCgnLCcsIG5leHQpKSB7CiAgICAgICAgY29tbWEgPSB0b2tlbiA9IG5leHQ7CiAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIH0KICAgICAgaWYgKG9wdGlvbmFsKCd9JywgbmV4dCkpIHsKICAgICAgICBsaXN0ZW5lci5oYW5kbGVMaXRlcmFsU2V0T3JNYXAoCiAgICAgICAgICAgIGNvdW50LCBsZWZ0QnJhY2UsIGNvbnN0S2V5d29yZCwgbmV4dCwgaGFzU2V0RW50cnkgPz8gZmFsc2UpOwogICAgICAgIG1heVBhcnNlRnVuY3Rpb25FeHByZXNzaW9ucyA9IG9sZDsKICAgICAgICByZXR1cm4gbmV4dDsKICAgICAgfQoKICAgICAgaWYgKGNvbW1hID09IG51bGwpIHsKICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgIGlmIChsb29rc0xpa2VMaXRlcmFsRW50cnkobmV4dCkpIHsKICAgICAgICAgIC8vIElmIHRoaXMgbG9va3MgbGlrZSB0aGUgc3RhcnQgb2YgYW4gZXhwcmVzc2lvbiwKICAgICAgICAgIC8vIHRoZW4gcmVwb3J0IGFuIGVycm9yLCBpbnNlcnQgdGhlIGNvbW1hLCBhbmQgY29udGludWUgcGFyc2luZy4KICAgICAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBDb25zaWRlciBiZXR0ZXIgZXJyb3IgbWVzc2FnZQogICAgICAgICAgU3ludGhldGljVG9rZW4gY29tbWEgPQogICAgICAgICAgICAgIG5ldyBTeW50aGV0aWNUb2tlbihUb2tlblR5cGUuQ09NTUEsIG5leHQub2Zmc2V0KTsKICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGlmQ291bnQgPiAwCiAgICAgICAgICAgICAgPyBmYXN0YS5tZXNzYWdlRXhwZWN0ZWRFbHNlT3JDb21tYQogICAgICAgICAgICAgIDogZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCcsJyk7CiAgICAgICAgICB0b2tlbiA9IHJld3JpdGVBbmRSZWNvdmVyKHRva2VuLCBtZXNzYWdlLCBjb21tYSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgbmV4dCwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCd9JykpOwogICAgICAgICAgLy8gU2Nhbm5lciBndWFyYW50ZWVzIGEgY2xvc2luZyBjdXJseSBicmFja2V0CiAgICAgICAgICBuZXh0ID0gbGVmdEJyYWNlLmVuZEdyb3VwOwogICAgICAgICAgbGlzdGVuZXIuaGFuZGxlTGl0ZXJhbFNldE9yTWFwKAogICAgICAgICAgICAgIGNvdW50LCBsZWZ0QnJhY2UsIGNvbnN0S2V5d29yZCwgbmV4dCwgaGFzU2V0RW50cnkgPz8gZmFsc2UpOwogICAgICAgICAgbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zID0gb2xkOwogICAgICAgICAgcmV0dXJuIG5leHQ7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICAvLy8gZm9ybWFsUGFyYW1ldGVyTGlzdCBmdW5jdGlvbkJvZHkuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBzdWZmaXggcGFyc2VyIGJlY2F1c2UgaXQgaXMgYXNzdW1lZCB0aGF0IHR5cGUgYXJndW1lbnRzIGhhdmUKICAvLy8gYmVlbiBwYXJzZWQsIG9yIGBsaXN0ZW5lci5oYW5kbGVOb1R5cGVBcmd1bWVudHMoLi4pYCBoYXMgYmVlbiBleGVjdXRlZC4KICBUb2tlbiBwYXJzZUxpdGVyYWxGdW5jdGlvblN1ZmZpeChUb2tlbiB0b2tlbikgewogICAgYXNzZXJ0KG9wdGlvbmFsKCcoJywgdG9rZW4ubmV4dCkpOwogICAgLy8gU2Nhbm5lciBlbnN1cmVzIGAoYCBoYXMgbWF0Y2hpbmcgYClgLgogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQuZW5kR3JvdXAubmV4dDsKICAgIGludCBraW5kID0gbmV4dC5raW5kOwogICAgaWYgKCFpZGVudGljYWwoa2luZCwgRlVOQ1RJT05fVE9LRU4pICYmCiAgICAgICAgIWlkZW50aWNhbChraW5kLCBPUEVOX0NVUkxZX0JSQUNLRVRfVE9LRU4pICYmCiAgICAgICAgKCFpZGVudGljYWwoa2luZCwgS0VZV09SRF9UT0tFTikgfHwKICAgICAgICAgICAgIW9wdGlvbmFsKCdhc3luYycsIG5leHQpICYmICFvcHRpb25hbCgnc3luYycsIG5leHQpKSkgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKG5leHQsIGZhc3RhLnRlbXBsYXRlVW5leHBlY3RlZFRva2VuKTsKICAgIH0KICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbih0b2tlbik7CiAgfQoKICAvLy8gZ2VuZXJpY0xpc3RMaXRlcmFsIHwgZ2VuZXJpY01hcExpdGVyYWwgfCBnZW5lcmljRnVuY3Rpb25MaXRlcmFsLgogIC8vLwogIC8vLyBXaGVyZQogIC8vLyAgIGdlbmVyaWNMaXN0TGl0ZXJhbCA6Oj0gdHlwZUFyZ3VtZW50cyAnWycgKGV4cHJlc3Npb25MaXN0ICcsJz8pPyAnXScKICAvLy8gICBnZW5lcmljTWFwTGl0ZXJhbCA6Oj0KICAvLy8gICAgICAgdHlwZUFyZ3VtZW50cyAneycgKG1hcExpdGVyYWxFbnRyeSAoJywnIG1hcExpdGVyYWxFbnRyeSkqICcsJz8pPyAnfScKICAvLy8gICBnZW5lcmljRnVuY3Rpb25MaXRlcmFsIDo6PQogIC8vLyAgICAgICB0eXBlUGFyYW1ldGVycyBmb3JtYWxQYXJhbWV0ZXJMaXN0IGZ1bmN0aW9uQm9keQogIC8vLyBQcm92aWRlIHRva2VuIGZvciBbY29uc3RLZXl3b3JkXSBpZiBwcmVjZWRlZCBieSAnY29uc3QnLCBudWxsIGlmIG5vdC4KICBUb2tlbiBwYXJzZUxpdGVyYWxMaXN0U2V0TWFwT3JGdW5jdGlvbigKICAgICAgZmluYWwgVG9rZW4gc3RhcnQsIFRva2VuIGNvbnN0S2V5d29yZCkgewogICAgYXNzZXJ0KG9wdGlvbmFsKCc8Jywgc3RhcnQubmV4dCkpOwogICAgVHlwZVBhcmFtT3JBcmdJbmZvIHR5cGVQYXJhbU9yQXJnID0gY29tcHV0ZVR5cGVQYXJhbU9yQXJnKHN0YXJ0LCB0cnVlKTsKICAgIFRva2VuIHRva2VuID0gdHlwZVBhcmFtT3JBcmcuc2tpcChzdGFydCk7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgnKCcsIG5leHQpKSB7CiAgICAgIGlmIChjb25zdEtleXdvcmQgIT0gbnVsbCkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICAgIGNvbnN0S2V5d29yZCwgZmFzdGEudGVtcGxhdGVVbmV4cGVjdGVkVG9rZW4pOwogICAgICB9CiAgICAgIHRva2VuID0gdHlwZVBhcmFtT3JBcmcucGFyc2VWYXJpYWJsZXMoc3RhcnQsIHRoaXMpOwogICAgICByZXR1cm4gcGFyc2VMaXRlcmFsRnVuY3Rpb25TdWZmaXgodG9rZW4pOwogICAgfQogICAgdG9rZW4gPSB0eXBlUGFyYW1PckFyZy5wYXJzZUFyZ3VtZW50cyhzdGFydCwgdGhpcyk7CiAgICBpZiAob3B0aW9uYWwoJ3snLCBuZXh0KSkgewogICAgICBpZiAodHlwZVBhcmFtT3JBcmcudHlwZUFyZ3VtZW50Q291bnQgPiAyKSB7CiAgICAgICAgbGlzdGVuZXIuaGFuZGxlUmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgZmFzdGEubWVzc2FnZVNldE9yTWFwTGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzLAogICAgICAgICAgICBzdGFydC5uZXh0LAogICAgICAgICAgICB0b2tlbik7CiAgICAgIH0KICAgICAgcmV0dXJuIHBhcnNlTGl0ZXJhbFNldE9yTWFwU3VmZml4KHRva2VuLCBjb25zdEtleXdvcmQpOwogICAgfQogICAgaWYgKCFvcHRpb25hbCgnWycsIG5leHQpICYmICFvcHRpb25hbCgnW10nLCBuZXh0KSkgewogICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogSW1wcm92ZSB0aGlzIGVycm9yIG1lc3NhZ2UuCiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJ1snKSk7CiAgICAgIHJld3JpdGVyLmluc2VydFN5bnRoZXRpY1Rva2VuKHRva2VuLCBUb2tlblR5cGUuSU5ERVgpOwogICAgfQogICAgcmV0dXJuIHBhcnNlTGl0ZXJhbExpc3RTdWZmaXgodG9rZW4sIGNvbnN0S2V5d29yZCk7CiAgfQoKICAvLy8gYGBgCiAgLy8vIG1hcExpdGVyYWxFbnRyeToKICAvLy8gICBleHByZXNzaW9uICc6JyBleHByZXNzaW9uIHwKICAvLy8gICAnaWYnICcoJyBleHByZXNzaW9uICcpJyBtYXBMaXRlcmFsRW50cnkgKCAnZWxzZScgbWFwTGl0ZXJhbEVudHJ5ICk/IHwKICAvLy8gICAnYXdhaXQnPyAnZm9yJyAnKCcgZm9yTG9vcFBhcnRzICcpJyBtYXBMaXRlcmFsRW50cnkgfAogIC8vLyAgICggJy4uLicgfCAnLi4uPycgKSBleHByZXNzaW9uCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VNYXBMaXRlcmFsRW50cnkoVG9rZW4gdG9rZW4pIHsKICAgIC8vIEFzc3VtZSB0aGUgbGlzdGVuZXIgcmVqZWN0cyBub24tc3RyaW5nIGtleXMuCiAgICAvLyBUT0RPKGJyaWFud2lsa2Vyc29uKTogQ2hhbmdlIHRoZSBhc3N1bXB0aW9uIGFib3ZlIGJ5IG1vdmluZyBlcnJvcgogICAgLy8gY2hlY2tpbmcgaW50byB0aGUgcGFyc2VyLCBtYWtpbmcgaXQgcG9zc2libGUgdG8gcmVjb3Zlci4KICAgIExpdGVyYWxFbnRyeUluZm8gaW5mbyA9IGNvbXB1dGVMaXRlcmFsRW50cnkodG9rZW4pOwogICAgd2hpbGUgKGluZm8gIT0gbnVsbCkgewogICAgICBpZiAoaW5mby5oYXNFbnRyeSkgewogICAgICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKHRva2VuKTsKICAgICAgICBUb2tlbiBjb2xvbiA9IGVuc3VyZUNvbG9uKHRva2VuKTsKICAgICAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbihjb2xvbik7CiAgICAgICAgLy8gVE9ETyByZW1vdmUgdW51c2VkIDJuZCBwYXJhbWV0ZXIKICAgICAgICBsaXN0ZW5lci5oYW5kbGVMaXRlcmFsTWFwRW50cnkoY29sb24sIHRva2VuLm5leHQpOwogICAgICB9IGVsc2UgewogICAgICAgIHRva2VuID0gaW5mby5wYXJzZSh0b2tlbiwgdGhpcyk7CiAgICAgIH0KICAgICAgaW5mbyA9IGluZm8uY29tcHV0ZU5leHQodG9rZW4pOwogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VTZW5kT3JGdW5jdGlvbkxpdGVyYWwoVG9rZW4gdG9rZW4sIElkZW50aWZpZXJDb250ZXh0IGNvbnRleHQpIHsKICAgIGlmICghbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zKSB7CiAgICAgIHJldHVybiBwYXJzZVNlbmQodG9rZW4sIGNvbnRleHQpOwogICAgfQogICAgVHlwZUluZm8gdHlwZUluZm8gPSBjb21wdXRlVHlwZSh0b2tlbiwgZmFsc2UpOwogICAgVG9rZW4gYmVmb3JlTmFtZSA9IHR5cGVJbmZvLnNraXBUeXBlKHRva2VuKTsKICAgIFRva2VuIG5hbWUgPSBiZWZvcmVOYW1lLm5leHQ7CiAgICBpZiAobmFtZS5pc0lkZW50aWZpZXIpIHsKICAgICAgVHlwZVBhcmFtT3JBcmdJbmZvIHR5cGVQYXJhbSA9IGNvbXB1dGVUeXBlUGFyYW1PckFyZyhuYW1lKTsKICAgICAgVG9rZW4gbmV4dCA9IHR5cGVQYXJhbS5za2lwKG5hbWUpLm5leHQ7CiAgICAgIGlmIChvcHRpb25hbCgnKCcsIG5leHQpKSB7CiAgICAgICAgaWYgKGxvb2tzTGlrZUZ1bmN0aW9uQm9keShuZXh0LmVuZEdyb3VwLm5leHQpKSB7CiAgICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkxpdGVyYWwoCiAgICAgICAgICAgICAgdG9rZW4sIGJlZm9yZU5hbWUsIG5hbWUsIHR5cGVJbmZvLCB0eXBlUGFyYW0sIGNvbnRleHQpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHBhcnNlU2VuZCh0b2tlbiwgY29udGV4dCk7CiAgfQoKICBUb2tlbiBlbnN1cmVBcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKCFvcHRpb25hbCgnKCcsIG5leHQpKSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICB0b2tlbiwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEFmdGVyQnV0R290LndpdGhBcmd1bWVudHMoJygnKSk7CiAgICAgIG5leHQgPSByZXdyaXRlci5pbnNlcnRQYXJlbnModG9rZW4sIGZhbHNlKTsKICAgIH0KICAgIHJldHVybiBwYXJzZUFyZ3VtZW50c1Jlc3QobmV4dCk7CiAgfQoKICBUb2tlbiBwYXJzZUNvbnN0cnVjdG9ySW52b2NhdGlvbkFyZ3VtZW50cyhUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAoIW9wdGlvbmFsKCcoJywgbmV4dCkpIHsKICAgICAgLy8gUmVjb3Zlcnk6IENoZWNrIGZvciBpbnZhbGlkIHR5cGUgcGFyYW1ldGVycwogICAgICBUeXBlUGFyYW1PckFyZ0luZm8gdHlwZUFyZyA9IGNvbXB1dGVUeXBlUGFyYW1PckFyZyh0b2tlbik7CiAgICAgIGlmICh0eXBlQXJnID09IG5vVHlwZVBhcmFtT3JBcmcpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICB0b2tlbiwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEFmdGVyQnV0R290LndpdGhBcmd1bWVudHMoJygnKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgdG9rZW4sIGZhc3RhLm1lc3NhZ2VDb25zdHJ1Y3RvcldpdGhUeXBlQXJndW1lbnRzKTsKICAgICAgICB0b2tlbiA9IHR5cGVBcmcucGFyc2VBcmd1bWVudHModG9rZW4sIHRoaXMpOwogICAgICAgIGxpc3RlbmVyLmhhbmRsZUludmFsaWRUeXBlQXJndW1lbnRzKHRva2VuKTsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgfQogICAgICBpZiAoIW9wdGlvbmFsKCcoJywgbmV4dCkpIHsKICAgICAgICBuZXh0ID0gcmV3cml0ZXIuaW5zZXJ0UGFyZW5zKHRva2VuLCBmYWxzZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBwYXJzZUFyZ3VtZW50c1Jlc3QobmV4dCk7CiAgfQoKICAvLy8gYGBgCiAgLy8vIG5ld0V4cHJlc3Npb246CiAgLy8vICAgJ25ldycgdHlwZSAoJy4nIGlkZW50aWZpZXIpPyBhcmd1bWVudHMKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZU5ld0V4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5ld0tleXdvcmQgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCduZXcnLCBuZXdLZXl3b3JkKSk7CiAgICBsaXN0ZW5lci5iZWdpbk5ld0V4cHJlc3Npb24obmV3S2V5d29yZCk7CiAgICB0b2tlbiA9IHBhcnNlQ29uc3RydWN0b3JSZWZlcmVuY2UobmV3S2V5d29yZCk7CiAgICB0b2tlbiA9IHBhcnNlQ29uc3RydWN0b3JJbnZvY2F0aW9uQXJndW1lbnRzKHRva2VuKTsKICAgIGxpc3RlbmVyLmVuZE5ld0V4cHJlc3Npb24obmV3S2V5d29yZCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZUltcGxpY2l0Q3JlYXRpb25FeHByZXNzaW9uKAogICAgICBUb2tlbiB0b2tlbiwgVHlwZVBhcmFtT3JBcmdJbmZvIHR5cGVBcmcpIHsKICAgIFRva2VuIGJlZ2luID0gdG9rZW47CiAgICBsaXN0ZW5lci5iZWdpbkltcGxpY2l0Q3JlYXRpb25FeHByZXNzaW9uKHRva2VuKTsKICAgIHRva2VuID0gcGFyc2VDb25zdHJ1Y3RvclJlZmVyZW5jZSh0b2tlbiwgdHlwZUFyZyk7CiAgICB0b2tlbiA9IHBhcnNlQ29uc3RydWN0b3JJbnZvY2F0aW9uQXJndW1lbnRzKHRva2VuKTsKICAgIGxpc3RlbmVyLmVuZEltcGxpY2l0Q3JlYXRpb25FeHByZXNzaW9uKGJlZ2luKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBUaGlzIG1ldGhvZCBwYXJzZXMgYSBsaXN0IG9yIG1hcCBsaXRlcmFsIHRoYXQgaXMga25vd24gdG8gc3RhcnQgd2l0aCB0aGUKICAvLy8ga2V5d29yZCAnY29uc3QnLgogIC8vLwogIC8vLyBgYGAKICAvLy8gbGlzdExpdGVyYWw6CiAgLy8vICAgJ2NvbnN0Jz8gdHlwZUFyZ3VtZW50cz8gJ1snIChleHByZXNzaW9uTGlzdCAnLCc/KT8gJ10nCiAgLy8vIDsKICAvLy8KICAvLy8gbWFwTGl0ZXJhbDoKICAvLy8gICAnY29uc3QnPyB0eXBlQXJndW1lbnRzPwogIC8vLyAgICAgJ3snIChtYXBMaXRlcmFsRW50cnkgKCcsJyBtYXBMaXRlcmFsRW50cnkpKiAnLCc/KT8gJ30nCiAgLy8vIDsKICAvLy8KICAvLy8gbWFwTGl0ZXJhbEVudHJ5OgogIC8vLyAgIGV4cHJlc3Npb24gJzonIGV4cHJlc3Npb24KICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUNvbnN0RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgVG9rZW4gY29uc3RLZXl3b3JkID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdjb25zdCcsIGNvbnN0S2V5d29yZCkpOwogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBmaW5hbCBTdHJpbmcgdmFsdWUgPSBuZXh0LnN0cmluZ1ZhbHVlOwogICAgaWYgKChpZGVudGljYWwodmFsdWUsICdbJykpIHx8IChpZGVudGljYWwodmFsdWUsICdbXScpKSkgewogICAgICBsaXN0ZW5lci5iZWdpbkNvbnN0TGl0ZXJhbChuZXh0KTsKICAgICAgbGlzdGVuZXIuaGFuZGxlTm9UeXBlQXJndW1lbnRzKG5leHQpOwogICAgICB0b2tlbiA9IHBhcnNlTGl0ZXJhbExpc3RTdWZmaXgodG9rZW4sIGNvbnN0S2V5d29yZCk7CiAgICAgIGxpc3RlbmVyLmVuZENvbnN0TGl0ZXJhbCh0b2tlbi5uZXh0KTsKICAgICAgcmV0dXJuIHRva2VuOwogICAgfQogICAgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ3snKSkgewogICAgICBsaXN0ZW5lci5iZWdpbkNvbnN0TGl0ZXJhbChuZXh0KTsKICAgICAgbGlzdGVuZXIuaGFuZGxlTm9UeXBlQXJndW1lbnRzKG5leHQpOwogICAgICB0b2tlbiA9IHBhcnNlTGl0ZXJhbFNldE9yTWFwU3VmZml4KHRva2VuLCBjb25zdEtleXdvcmQpOwogICAgICBsaXN0ZW5lci5lbmRDb25zdExpdGVyYWwodG9rZW4ubmV4dCk7CiAgICAgIHJldHVybiB0b2tlbjsKICAgIH0KICAgIGlmIChpZGVudGljYWwodmFsdWUsICc8JykpIHsKICAgICAgbGlzdGVuZXIuYmVnaW5Db25zdExpdGVyYWwobmV4dCk7CiAgICAgIHRva2VuID0gcGFyc2VMaXRlcmFsTGlzdFNldE1hcE9yRnVuY3Rpb24odG9rZW4sIGNvbnN0S2V5d29yZCk7CiAgICAgIGxpc3RlbmVyLmVuZENvbnN0TGl0ZXJhbCh0b2tlbi5uZXh0KTsKICAgICAgcmV0dXJuIHRva2VuOwogICAgfQogICAgbGlzdGVuZXIuYmVnaW5Db25zdEV4cHJlc3Npb24oY29uc3RLZXl3b3JkKTsKICAgIHRva2VuID0gcGFyc2VDb25zdHJ1Y3RvclJlZmVyZW5jZSh0b2tlbik7CiAgICB0b2tlbiA9IHBhcnNlQ29uc3RydWN0b3JJbnZvY2F0aW9uQXJndW1lbnRzKHRva2VuKTsKICAgIGxpc3RlbmVyLmVuZENvbnN0RXhwcmVzc2lvbihjb25zdEtleXdvcmQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBpbnRMaXRlcmFsOgogIC8vLyAgIGludGVnZXIKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUxpdGVyYWxJbnQoVG9rZW4gdG9rZW4pIHsKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGljYWwodG9rZW4ua2luZCwgSU5UX1RPS0VOKSB8fAogICAgICAgIGlkZW50aWNhbCh0b2tlbi5raW5kLCBIRVhBREVDSU1BTF9UT0tFTikpOwogICAgbGlzdGVuZXIuaGFuZGxlTGl0ZXJhbEludCh0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIGRvdWJsZUxpdGVyYWw6CiAgLy8vICAgZG91YmxlCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VMaXRlcmFsRG91YmxlKFRva2VuIHRva2VuKSB7CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpY2FsKHRva2VuLmtpbmQsIERPVUJMRV9UT0tFTikpOwogICAgbGlzdGVuZXIuaGFuZGxlTGl0ZXJhbERvdWJsZSh0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIHN0cmluZ0xpdGVyYWw6CiAgLy8vICAgKG11bHRpbGluZVN0cmluZyB8IHNpbmdsZUxpbmVTdHJpbmcpKwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlTGl0ZXJhbFN0cmluZyhUb2tlbiB0b2tlbikgewogICAgYXNzZXJ0KGlkZW50aWNhbCh0b2tlbi5uZXh0LmtpbmQsIFNUUklOR19UT0tFTikpOwogICAgYm9vbCBvbGQgPSBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnM7CiAgICBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnMgPSB0cnVlOwogICAgdG9rZW4gPSBwYXJzZVNpbmdsZUxpdGVyYWxTdHJpbmcodG9rZW4pOwogICAgaW50IGNvdW50ID0gMTsKICAgIHdoaWxlIChpZGVudGljYWwodG9rZW4ubmV4dC5raW5kLCBTVFJJTkdfVE9LRU4pKSB7CiAgICAgIHRva2VuID0gcGFyc2VTaW5nbGVMaXRlcmFsU3RyaW5nKHRva2VuKTsKICAgICAgY291bnQrKzsKICAgIH0KICAgIGlmIChjb3VudCA+IDEpIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlU3RyaW5nSnV4dGFwb3NpdGlvbihjb3VudCk7CiAgICB9CiAgICBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnMgPSBvbGQ7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIHN5bWJvbExpdGVyYWw6CiAgLy8vICAgJyMnIChvcGVyYXRvciB8IChpZGVudGlmaWVyICgnLicgaWRlbnRpZmllcikqKSkKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUxpdGVyYWxTeW1ib2woVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGhhc2hUb2tlbiA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnIycsIGhhc2hUb2tlbikpOwogICAgbGlzdGVuZXIuYmVnaW5MaXRlcmFsU3ltYm9sKGhhc2hUb2tlbik7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChuZXh0LmlzVXNlckRlZmluYWJsZU9wZXJhdG9yKSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU9wZXJhdG9yKG5leHQpOwogICAgICBsaXN0ZW5lci5lbmRMaXRlcmFsU3ltYm9sKGhhc2hUb2tlbiwgMSk7CiAgICAgIHJldHVybiBuZXh0OwogICAgfSBlbHNlIGlmIChvcHRpb25hbCgndm9pZCcsIG5leHQpKSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZVN5bWJvbFZvaWQobmV4dCk7CiAgICAgIGxpc3RlbmVyLmVuZExpdGVyYWxTeW1ib2woaGFzaFRva2VuLCAxKTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9IGVsc2UgewogICAgICBpbnQgY291bnQgPSAxOwogICAgICB0b2tlbiA9IGVuc3VyZUlkZW50aWZpZXIodG9rZW4sIElkZW50aWZpZXJDb250ZXh0LmxpdGVyYWxTeW1ib2wpOwogICAgICB3aGlsZSAob3B0aW9uYWwoJy4nLCB0b2tlbi5uZXh0KSkgewogICAgICAgIGNvdW50Kys7CiAgICAgICAgdG9rZW4gPSBlbnN1cmVJZGVudGlmaWVyKAogICAgICAgICAgICB0b2tlbi5uZXh0LCBJZGVudGlmaWVyQ29udGV4dC5saXRlcmFsU3ltYm9sQ29udGludWF0aW9uKTsKICAgICAgfQogICAgICBsaXN0ZW5lci5lbmRMaXRlcmFsU3ltYm9sKGhhc2hUb2tlbiwgY291bnQpOwogICAgICByZXR1cm4gdG9rZW47CiAgICB9CiAgfQoKICBUb2tlbiBwYXJzZVNpbmdsZUxpdGVyYWxTdHJpbmcoVG9rZW4gdG9rZW4pIHsKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGljYWwodG9rZW4ua2luZCwgU1RSSU5HX1RPS0VOKSk7CiAgICBsaXN0ZW5lci5iZWdpbkxpdGVyYWxTdHJpbmcodG9rZW4pOwogICAgLy8gUGFyc2luZyB0aGUgcHJlZml4LCBmb3IgaW5zdGFuY2UgJ3ggb2YgJ3gke2lkfXkke2lkfXonCiAgICBpbnQgaW50ZXJwb2xhdGlvbkNvdW50ID0gMDsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaW50IGtpbmQgPSBuZXh0LmtpbmQ7CiAgICB3aGlsZSAoa2luZCAhPSBFT0ZfVE9LRU4pIHsKICAgICAgaWYgKGlkZW50aWNhbChraW5kLCBTVFJJTkdfSU5URVJQT0xBVElPTl9UT0tFTikpIHsKICAgICAgICAvLyBQYXJzaW5nICR7ZXhwcmVzc2lvbn0uCiAgICAgICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb24obmV4dCkubmV4dDsKICAgICAgICBpZiAoIW9wdGlvbmFsKCd9JywgdG9rZW4pKSB7CiAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICAgIHRva2VuLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJ30nKSk7CiAgICAgICAgICB0b2tlbiA9IG5leHQuZW5kR3JvdXA7CiAgICAgICAgfQogICAgICAgIGxpc3RlbmVyLmhhbmRsZUludGVycG9sYXRpb25FeHByZXNzaW9uKG5leHQsIHRva2VuKTsKICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwoa2luZCwgU1RSSU5HX0lOVEVSUE9MQVRJT05fSURFTlRJRklFUl9UT0tFTikpIHsKICAgICAgICAvLyBQYXJzaW5nICRpZGVudGlmaWVyLgogICAgICAgIHRva2VuID0gcGFyc2VJZGVudGlmaWVyRXhwcmVzc2lvbihuZXh0KTsKICAgICAgICBsaXN0ZW5lci5oYW5kbGVJbnRlcnBvbGF0aW9uRXhwcmVzc2lvbihuZXh0LCBudWxsKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICArK2ludGVycG9sYXRpb25Db3VudDsKICAgICAgLy8gUGFyc2luZyB0aGUgaW5maXgvc3VmZml4LCBmb3IgaW5zdGFuY2UgeSBhbmQgeicgb2YgJ3gke2lkfXkke2lkfXonCiAgICAgIHRva2VuID0gcGFyc2VTdHJpbmdQYXJ0KHRva2VuKTsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIGtpbmQgPSBuZXh0LmtpbmQ7CiAgICB9CiAgICBsaXN0ZW5lci5lbmRMaXRlcmFsU3RyaW5nKGludGVycG9sYXRpb25Db3VudCwgbmV4dCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZUlkZW50aWZpZXJFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChuZXh0LmtpbmQgPT0gS0VZV09SRF9UT0tFTiAmJiBpZGVudGljYWwobmV4dC5zdHJpbmdWYWx1ZSwgInRoaXMiKSkgewogICAgICBsaXN0ZW5lci5oYW5kbGVUaGlzRXhwcmVzc2lvbihuZXh0LCBJZGVudGlmaWVyQ29udGV4dC5leHByZXNzaW9uKTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gcGFyc2VTZW5kKHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC5leHByZXNzaW9uKTsKICAgIH0KICB9CgogIC8vLyBgYGAKICAvLy8gYm9vbGVhbkxpdGVyYWw6CiAgLy8vICAgJ3RydWUnIHwKICAvLy8gICAnZmFsc2UnCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VMaXRlcmFsQm9vbChUb2tlbiB0b2tlbikgewogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdmYWxzZScsIHRva2VuKSB8fCBvcHRpb25hbCgndHJ1ZScsIHRva2VuKSk7CiAgICBsaXN0ZW5lci5oYW5kbGVMaXRlcmFsQm9vbCh0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIG51bGxMaXRlcmFsOgogIC8vLyAgICdudWxsJwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlTGl0ZXJhbE51bGwoVG9rZW4gdG9rZW4pIHsKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnbnVsbCcsIHRva2VuKSk7CiAgICBsaXN0ZW5lci5oYW5kbGVMaXRlcmFsTnVsbCh0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZVNlbmQoVG9rZW4gdG9rZW4sIElkZW50aWZpZXJDb250ZXh0IGNvbnRleHQpIHsKICAgIFRva2VuIGJlZ2luVG9rZW4gPSB0b2tlbiA9IGVuc3VyZUlkZW50aWZpZXIodG9rZW4sIGNvbnRleHQpOwogICAgaWYgKG9wdGlvbmFsKCchJywgdG9rZW4ubmV4dCkpIHsKICAgICAgVG9rZW4gYmFuZyA9IHRva2VuLm5leHQ7CiAgICAgIFRva2VuIG5leHQgPSBiYW5nLm5leHQ7CiAgICAgIGlmIChvcHRpb25hbCgnKCcsIG5leHQpIHx8IG9wdGlvbmFsKCdbJywgbmV4dCkpIHsKICAgICAgICBsaXN0ZW5lci5oYW5kbGVOb25OdWxsQXNzZXJ0RXhwcmVzc2lvbihiYW5nKTsKICAgICAgICB0b2tlbiA9IGJhbmc7CiAgICAgIH0KICAgIH0KICAgIFR5cGVQYXJhbU9yQXJnSW5mbyB0eXBlQXJnID0gY29tcHV0ZU1ldGhvZFR5cGVBcmd1bWVudHModG9rZW4pOwogICAgaWYgKHR5cGVBcmcgIT0gbm9UeXBlUGFyYW1PckFyZykgewogICAgICB0b2tlbiA9IHR5cGVBcmcucGFyc2VBcmd1bWVudHModG9rZW4sIHRoaXMpOwogICAgfSBlbHNlIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlTm9UeXBlQXJndW1lbnRzKHRva2VuLm5leHQpOwogICAgfQogICAgdG9rZW4gPSBwYXJzZUFyZ3VtZW50c09wdCh0b2tlbik7CiAgICBsaXN0ZW5lci5oYW5kbGVTZW5kKGJlZ2luVG9rZW4sIHRva2VuLm5leHQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gc2tpcEFyZ3VtZW50c09wdChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBsaXN0ZW5lci5oYW5kbGVOb0FyZ3VtZW50cyhuZXh0KTsKICAgIGlmIChvcHRpb25hbCgnKCcsIG5leHQpKSB7CiAgICAgIHJldHVybiBuZXh0LmVuZEdyb3VwOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHRva2VuOwogICAgfQogIH0KCiAgVG9rZW4gcGFyc2VBcmd1bWVudHNPcHQoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKCFvcHRpb25hbCgnKCcsIG5leHQpKSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU5vQXJndW1lbnRzKG5leHQpOwogICAgICByZXR1cm4gdG9rZW47CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gcGFyc2VBcmd1bWVudHModG9rZW4pOwogICAgfQogIH0KCiAgLy8vIGBgYAogIC8vLyBhcmd1bWVudHM6CiAgLy8vICAgJygnIChhcmd1bWVudExpc3QgJywnPyk/ICcpJwogIC8vLyA7CiAgLy8vCiAgLy8vIGFyZ3VtZW50TGlzdDoKICAvLy8gICBuYW1lZEFyZ3VtZW50ICgnLCcgbmFtZWRBcmd1bWVudCkqIHwKICAvLy8gICBleHByZXNzaW9uTGlzdCAoJywnIG5hbWVkQXJndW1lbnQpKgogIC8vLyA7CiAgLy8vCiAgLy8vIG5hbWVkQXJndW1lbnQ6CiAgLy8vICAgbGFiZWwgZXhwcmVzc2lvbgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlQXJndW1lbnRzKFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gcGFyc2VBcmd1bWVudHNSZXN0KHRva2VuLm5leHQpOwogIH0KCiAgVG9rZW4gcGFyc2VBcmd1bWVudHNSZXN0KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBiZWdpbiA9IHRva2VuOwogICAgYXNzZXJ0KG9wdGlvbmFsKCcoJywgYmVnaW4pKTsKICAgIGxpc3RlbmVyLmJlZ2luQXJndW1lbnRzKGJlZ2luKTsKICAgIGludCBhcmd1bWVudENvdW50ID0gMDsKICAgIGJvb2wgaGFzU2Vlbk5hbWVkQXJndW1lbnQgPSBmYWxzZTsKICAgIGJvb2wgb2xkID0gbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zOwogICAgbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zID0gdHJ1ZTsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBpZiAob3B0aW9uYWwoJyknLCBuZXh0KSkgewogICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBUb2tlbiBjb2xvbiA9IG51bGw7CiAgICAgIGlmIChvcHRpb25hbCgnOicsIG5leHQubmV4dCkpIHsKICAgICAgICB0b2tlbiA9CiAgICAgICAgICAgIGVuc3VyZUlkZW50aWZpZXIodG9rZW4sIElkZW50aWZpZXJDb250ZXh0Lm5hbWVkQXJndW1lbnRSZWZlcmVuY2UpCiAgICAgICAgICAgICAgICAubmV4dDsKICAgICAgICBjb2xvbiA9IHRva2VuOwogICAgICAgIGhhc1NlZW5OYW1lZEFyZ3VtZW50ID0gdHJ1ZTsKICAgICAgfSBlbHNlIGlmIChoYXNTZWVuTmFtZWRBcmd1bWVudCkgewogICAgICAgIC8vIFBvc2l0aW9uYWwgYXJndW1lbnQgYWZ0ZXIgbmFtZWQgYXJndW1lbnQuCiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlUG9zaXRpb25hbEFmdGVyTmFtZWRBcmd1bWVudCk7CiAgICAgIH0KICAgICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb24odG9rZW4pOwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKGNvbG9uICE9IG51bGwpIGxpc3RlbmVyLmhhbmRsZU5hbWVkQXJndW1lbnQoY29sb24pOwogICAgICArK2FyZ3VtZW50Q291bnQ7CiAgICAgIGlmICghb3B0aW9uYWwoJywnLCBuZXh0KSkgewogICAgICAgIGlmIChvcHRpb25hbCgnKScsIG5leHQpKSB7CiAgICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICBpZiAobG9va3NMaWtlRXhwcmVzc2lvblN0YXJ0KG5leHQpKSB7CiAgICAgICAgICAvLyBJZiB0aGlzIGxvb2tzIGxpa2UgdGhlIHN0YXJ0IG9mIGFuIGV4cHJlc3Npb24sCiAgICAgICAgICAvLyB0aGVuIHJlcG9ydCBhbiBlcnJvciwgaW5zZXJ0IHRoZSBjb21tYSwgYW5kIGNvbnRpbnVlIHBhcnNpbmcuCiAgICAgICAgICBuZXh0ID0gcmV3cml0ZUFuZFJlY292ZXIoCiAgICAgICAgICAgICAgdG9rZW4sCiAgICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCcsJyksCiAgICAgICAgICAgICAgbmV3IFN5bnRoZXRpY1Rva2VuKFRva2VuVHlwZS5DT01NQSwgbmV4dC5vZmZzZXQpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdG9rZW4gPSBlbnN1cmVDbG9zZVBhcmVuKHRva2VuLCBiZWdpbik7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgdG9rZW4gPSBuZXh0OwogICAgfQogICAgYXNzZXJ0KG9wdGlvbmFsKCcpJywgdG9rZW4pKTsKICAgIG1heVBhcnNlRnVuY3Rpb25FeHByZXNzaW9ucyA9IG9sZDsKICAgIGxpc3RlbmVyLmVuZEFyZ3VtZW50cyhhcmd1bWVudENvdW50LCBiZWdpbiwgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyB0eXBlVGVzdDo6CiAgLy8vICAgJ2lzJyAnISc/IHR5cGUKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUlzT3BlcmF0b3JSZXN0KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBvcGVyYXRvciA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnaXMnLCBvcGVyYXRvcikpOwogICAgVG9rZW4gbm90ID0gbnVsbDsKICAgIGlmIChvcHRpb25hbCgnIScsIHRva2VuLm5leHQpKSB7CiAgICAgIG5vdCA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIH0KICAgIFR5cGVJbmZvIHR5cGVJbmZvID0gY29tcHV0ZVR5cGVBZnRlcklzT3JBcyh0b2tlbik7CiAgICB0b2tlbiA9IHR5cGVJbmZvLmVuc3VyZVR5cGVOb3RWb2lkKHRva2VuLCB0aGlzKTsKICAgIGxpc3RlbmVyLmhhbmRsZUlzT3BlcmF0b3Iob3BlcmF0b3IsIG5vdCk7CiAgICByZXR1cm4gc2tpcENoYWluZWRBc0lzT3BlcmF0b3JzKHRva2VuKTsKICB9CgogIFR5cGVJbmZvIGNvbXB1dGVUeXBlQWZ0ZXJJc09yQXMoVG9rZW4gdG9rZW4pIHsKICAgIFR5cGVJbmZvIHR5cGVJbmZvID0gY29tcHV0ZVR5cGUodG9rZW4sIHRydWUpOwogICAgaWYgKHR5cGVJbmZvLmlzTnVsbGFibGUpIHsKICAgICAgVG9rZW4gbmV4dCA9IHR5cGVJbmZvLnNraXBUeXBlKHRva2VuKS5uZXh0OwogICAgICBpZiAoIWlzT25lT2ZPckVvZihuZXh0LCBjb25zdCBbJyknLCAnPycsICc7JywgJ2lzJywgJ2FzJ10pKSB7CiAgICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IGludmVzdGlnYXRlIG90aGVyIHNpdHVhdGlvbnMKICAgICAgICAvLyB3aGVyZSBgP2Agc2hvdWxkIGJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgdHlwZSBpbmZvCiAgICAgICAgLy8gcmF0aGVyIHRoYW4gdGhlIHN0YXJ0IG9mIGEgY29uZGl0aW9uYWwgZXhwcmVzc2lvbi4KICAgICAgICB0eXBlSW5mbyA9IHR5cGVJbmZvLmFzTm9uTnVsbGFibGU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0eXBlSW5mbzsKICB9CgogIC8vLyBgYGAKICAvLy8gdHlwZUNhc3Q6CiAgLy8vICAgJ2FzJyB0eXBlCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VBc09wZXJhdG9yUmVzdChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gb3BlcmF0b3IgPSB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2FzJywgb3BlcmF0b3IpKTsKICAgIFR5cGVJbmZvIHR5cGVJbmZvID0gY29tcHV0ZVR5cGVBZnRlcklzT3JBcyh0b2tlbik7CiAgICB0b2tlbiA9IHR5cGVJbmZvLmVuc3VyZVR5cGVOb3RWb2lkKHRva2VuLCB0aGlzKTsKICAgIGxpc3RlbmVyLmhhbmRsZUFzT3BlcmF0b3Iob3BlcmF0b3IpOwogICAgcmV0dXJuIHNraXBDaGFpbmVkQXNJc09wZXJhdG9ycyh0b2tlbik7CiAgfQoKICBUb2tlbiBza2lwQ2hhaW5lZEFzSXNPcGVyYXRvcnMoVG9rZW4gdG9rZW4pIHsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBTdHJpbmcgdmFsdWUgPSBuZXh0LnN0cmluZ1ZhbHVlOwogICAgICBpZiAoIWlkZW50aWNhbCh2YWx1ZSwgJ2lzJykgJiYgIWlkZW50aWNhbCh2YWx1ZSwgJ2FzJykpIHsKICAgICAgICByZXR1cm4gdG9rZW47CiAgICAgIH0KICAgICAgLy8gVGhlIGlzLSBhbmQgYXMtb3BlcmF0b3JzIGNhbm5vdCBiZSBjaGFpbmVkLgogICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogQ29uc2lkZXIgYSBiZXR0ZXIgZXJyb3IgbWVzc2FnZS4KICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbihuZXh0LCBmYXN0YS50ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbik7CiAgICAgIGlmIChvcHRpb25hbCgnIScsIG5leHQubmV4dCkpIHsKICAgICAgICBuZXh0ID0gbmV4dC5uZXh0OwogICAgICB9CiAgICAgIFR5cGVJbmZvIHR5cGVJbmZvID0gY29tcHV0ZVR5cGVBZnRlcklzT3JBcyhuZXh0KTsKICAgICAgdG9rZW4gPSB0eXBlSW5mby5za2lwVHlwZShuZXh0KTsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIHZhbHVlID0gbmV4dC5zdHJpbmdWYWx1ZTsKICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgW3Rva2VuXSBjb3VsZCBiZSB0aGUgc3RhcnQgb2YgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbgogIC8vLyB3aXRob3V0IGEgcmV0dXJuIHR5cGUuCiAgYm9vbCBsb29rc0xpa2VMb2NhbEZ1bmN0aW9uKFRva2VuIHRva2VuKSB7CiAgICBpZiAodG9rZW4uaXNJZGVudGlmaWVyKSB7CiAgICAgIGlmIChvcHRpb25hbCgnPCcsIHRva2VuLm5leHQpKSB7CiAgICAgICAgVHlwZVBhcmFtT3JBcmdJbmZvIHR5cGVQYXJhbSA9IGNvbXB1dGVUeXBlUGFyYW1PckFyZyh0b2tlbik7CiAgICAgICAgaWYgKHR5cGVQYXJhbSA9PSBub1R5cGVQYXJhbU9yQXJnKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHRva2VuID0gdHlwZVBhcmFtLnNraXAodG9rZW4pOwogICAgICB9CiAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKG9wdGlvbmFsKCcoJywgdG9rZW4pKSB7CiAgICAgICAgdG9rZW4gPSB0b2tlbi5lbmRHcm91cC5uZXh0OwogICAgICAgIHJldHVybiBvcHRpb25hbCgneycsIHRva2VuKSB8fAogICAgICAgICAgICBvcHRpb25hbCgnPT4nLCB0b2tlbikgfHwKICAgICAgICAgICAgb3B0aW9uYWwoJ2FzeW5jJywgdG9rZW4pIHx8CiAgICAgICAgICAgIG9wdGlvbmFsKCdzeW5jJywgdG9rZW4pOwogICAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCc9PicsIHRva2VuKSkgewogICAgICAgIC8vIFJlY292ZXJ5OiBMb29rcyBsaWtlIGEgbG9jYWwgZnVuY3Rpb24gdGhhdCBpcyBtaXNzaW5nIHBhcmVudGhlc2lzLgogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLy8gUmV0dXJucyB0cnVlIGlmIFt0b2tlbl0gY291bGQgYmUgdGhlIHN0YXJ0IG9mIGEgZnVuY3Rpb24gYm9keS4KICBib29sIGxvb2tzTGlrZUZ1bmN0aW9uQm9keShUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIG9wdGlvbmFsKCd7JywgdG9rZW4pIHx8CiAgICAgICAgb3B0aW9uYWwoJz0+JywgdG9rZW4pIHx8CiAgICAgICAgb3B0aW9uYWwoJ2FzeW5jJywgdG9rZW4pIHx8CiAgICAgICAgb3B0aW9uYWwoJ3N5bmMnLCB0b2tlbik7CiAgfQoKICBUb2tlbiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnRPckNvbnN0RGVjbGFyYXRpb24oZmluYWwgVG9rZW4gc3RhcnQpIHsKICAgIFRva2VuIGNvbnN0VG9rZW4gPSBzdGFydC5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdjb25zdCcsIGNvbnN0VG9rZW4pKTsKICAgIGlmICghaXNNb2RpZmllcihjb25zdFRva2VuLm5leHQpKSB7CiAgICAgIFR5cGVJbmZvIHR5cGVJbmZvID0gY29tcHV0ZVR5cGUoY29uc3RUb2tlbiwgZmFsc2UpOwogICAgICBpZiAodHlwZUluZm8gPT0gbm9UeXBlKSB7CiAgICAgICAgVG9rZW4gbmV4dCA9IGNvbnN0VG9rZW4ubmV4dDsKICAgICAgICBpZiAoIW5leHQuaXNJZGVudGlmaWVyKSB7CiAgICAgICAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KHN0YXJ0KTsKICAgICAgICB9CiAgICAgICAgbmV4dCA9IG5leHQubmV4dDsKICAgICAgICBpZiAoIShvcHRpb25hbCgnPScsIG5leHQpIHx8CiAgICAgICAgICAgIC8vIFJlY292ZXJ5CiAgICAgICAgICAgIG5leHQuaXNLZXl3b3JkT3JJZGVudGlmaWVyIHx8CiAgICAgICAgICAgIG9wdGlvbmFsKCc7JywgbmV4dCkgfHwKICAgICAgICAgICAgb3B0aW9uYWwoJywnLCBuZXh0KSB8fAogICAgICAgICAgICBvcHRpb25hbCgneycsIG5leHQpKSkgewogICAgICAgICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudChzdGFydCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnRPckRlY2xhcmF0aW9uQWZ0ZXJNb2RpZmllcnMoCiAgICAgICAgICBjb25zdFRva2VuLCBzdGFydCwgbnVsbCwgY29uc3RUb2tlbiwgdHlwZUluZm8sIGZhbHNlKTsKICAgIH0KICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnRPckRlY2xhcmF0aW9uKHN0YXJ0KTsKICB9CgogIC8vLyBUaGlzIG1ldGhvZCBoYXMgdHdvIG1vZGVzIGJhc2VkIHVwb24gW29ubHlQYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25TdGFydF0uCiAgLy8vCiAgLy8vIElmIFtvbmx5UGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uU3RhcnRdIGlzIGBmYWxzZWAgKHRoZSBkZWZhdWx0KSB0aGVuIHRoaXMKICAvLy8gbWV0aG9kIHdpbGwgcGFyc2UgYSBsb2NhbCB2YXJpYWJsZSBkZWNsYXJhdGlvbiwgYSBsb2NhbCBmdW5jdGlvbiwKICAvLy8gb3IgYW4gZXhwcmVzc2lvbiBzdGF0ZW1lbnQsIGFuZCB0aGVuIHJldHVybiB0aGUgbGFzdCBjb25zdW1lZCB0b2tlbi4KICAvLy8KICAvLy8gSWYgW29ubHlQYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25TdGFydF0gaXMgYHRydWVgIHRoZW4gdGhpcyBtZXRob2QKICAvLy8gd2lsbCBvbmx5IHBhcnNlIHRoZSBtZXRhZGF0YSwgbW9kaWZpZXJzLCBhbmQgdHlwZSBvZiBhIGxvY2FsIHZhcmlhYmxlCiAgLy8vIGRlY2xhcmF0aW9uIGlmIGl0IGV4aXN0cy4gSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIgdG8KICAvLy8gY2FsbCBbcGFyc2VWYXJpYWJsZXNEZWNsYXJhdGlvblJlc3RdIHRvIGZpbmlzaCBwYXJzaW5nIHRoZSBsb2NhbCB2YXJpYWJsZQogIC8vLyBkZWNsYXJhdGlvbi4gSWYgYSBsb2NhbCB2YXJpYWJsZSBkZWNsYXJhdGlvbiBpcyBub3QgZm91bmQgdGhlbiB0aGlzCiAgLy8vIG1ldGhvZCB3aWxsIHJldHVybiBbc3RhcnRdLgogIFRva2VuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudE9yRGVjbGFyYXRpb24oZmluYWwgVG9rZW4gc3RhcnQsCiAgICAgIFtib29sIG9ubHlQYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25TdGFydCA9IGZhbHNlXSkgewogICAgVG9rZW4gdG9rZW4gPSBzdGFydDsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG9wdGlvbmFsKCdAJywgbmV4dCkpIHsKICAgICAgdG9rZW4gPSBwYXJzZU1ldGFkYXRhU3Rhcih0b2tlbik7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgfQoKICAgIFRva2VuIGxhdGVUb2tlbjsKICAgIFRva2VuIHZhckZpbmFsT3JDb25zdDsKCiAgICBpZiAoaXNNb2RpZmllcihuZXh0KSkgewogICAgICBpZiAob3B0aW9uYWwoJ3ZhcicsIG5leHQpIHx8CiAgICAgICAgICBvcHRpb25hbCgnZmluYWwnLCBuZXh0KSB8fAogICAgICAgICAgb3B0aW9uYWwoJ2NvbnN0JywgbmV4dCkpIHsKICAgICAgICB2YXJGaW5hbE9yQ29uc3QgPSB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ2xhdGUnLCBuZXh0KSkgewogICAgICAgIGxhdGVUb2tlbiA9IHRva2VuID0gbmV4dDsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICBpZiAoaXNNb2RpZmllcihuZXh0KSAmJiBvcHRpb25hbCgnZmluYWwnLCBuZXh0KSkgewogICAgICAgICAgdmFyRmluYWxPckNvbnN0ID0gdG9rZW4gPSBuZXh0OwogICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAoaXNNb2RpZmllcihuZXh0KSkgewogICAgICAgIC8vIFJlY292ZXJ5CiAgICAgICAgTW9kaWZpZXJSZWNvdmVyeUNvbnRleHQgY29udGV4dCA9IG5ldyBNb2RpZmllclJlY292ZXJ5Q29udGV4dCh0aGlzKQogICAgICAgICAgLi5sYXRlVG9rZW4gPSBsYXRlVG9rZW4KICAgICAgICAgIC4udmFyRmluYWxPckNvbnN0ID0gdmFyRmluYWxPckNvbnN0OwoKICAgICAgICB0b2tlbiA9IGNvbnRleHQucGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTW9kaWZpZXJzKHRva2VuKTsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKCiAgICAgICAgbGF0ZVRva2VuID0gY29udGV4dC5sYXRlVG9rZW47CiAgICAgICAgdmFyRmluYWxPckNvbnN0ID0gY29udGV4dC52YXJGaW5hbE9yQ29uc3Q7CgogICAgICAgIGNvbnRleHQgPSBudWxsOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudE9yRGVjbGFyYXRpb25BZnRlck1vZGlmaWVycyh0b2tlbiwgc3RhcnQsCiAgICAgICAgbGF0ZVRva2VuLCB2YXJGaW5hbE9yQ29uc3QsIG51bGwsIG9ubHlQYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25TdGFydCk7CiAgfQoKICAvLy8gU2VlIFtwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnRPckRlY2xhcmF0aW9uXQogIFRva2VuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudE9yRGVjbGFyYXRpb25BZnRlck1vZGlmaWVycygKICAgICAgZmluYWwgVG9rZW4gYmVmb3JlVHlwZSwKICAgICAgZmluYWwgVG9rZW4gc3RhcnQsCiAgICAgIGZpbmFsIFRva2VuIGxhdGVUb2tlbiwKICAgICAgVG9rZW4gdmFyRmluYWxPckNvbnN0LAogICAgICBUeXBlSW5mbyB0eXBlSW5mbywKICAgICAgYm9vbCBvbmx5UGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uU3RhcnQpIHsKICAgIHR5cGVJbmZvID8/PSBjb21wdXRlVHlwZShiZWZvcmVUeXBlLCBmYWxzZSk7CgogICAgVG9rZW4gdG9rZW4gPSB0eXBlSW5mby5za2lwVHlwZShiZWZvcmVUeXBlKTsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwoKICAgIGlmIChvbmx5UGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uU3RhcnQpIHsKICAgICAgaWYgKGxhdGVUb2tlbiAhPSBudWxsKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgICAgbGF0ZVRva2VuLCBmYXN0YS50ZW1wbGF0ZUV4dHJhbmVvdXNNb2RpZmllcik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmIChsb29rc0xpa2VMb2NhbEZ1bmN0aW9uKG5leHQpKSB7CiAgICAgICAgLy8gUGFyc2UgYSBsb2NhbCBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KICAgICAgICBpZiAodmFyRmluYWxPckNvbnN0ICE9IG51bGwpIHsKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICAgICAgdmFyRmluYWxPckNvbnN0LCBmYXN0YS50ZW1wbGF0ZUV4dHJhbmVvdXNNb2RpZmllcik7CiAgICAgICAgfSBlbHNlIGlmIChsYXRlVG9rZW4gIT0gbnVsbCkgewogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgICAgICBsYXRlVG9rZW4sIGZhc3RhLnRlbXBsYXRlRXh0cmFuZW91c01vZGlmaWVyKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFvcHRpb25hbCgnQCcsIHN0YXJ0Lm5leHQpKSB7CiAgICAgICAgICBsaXN0ZW5lci5iZWdpbk1ldGFkYXRhU3RhcihzdGFydC5uZXh0KTsKICAgICAgICAgIGxpc3RlbmVyLmVuZE1ldGFkYXRhU3RhcigwKTsKICAgICAgICB9CiAgICAgICAgVG9rZW4gYmVmb3JlRm9ybWFscyA9CiAgICAgICAgICAgIGNvbXB1dGVUeXBlUGFyYW1PckFyZyhuZXh0KS5wYXJzZVZhcmlhYmxlcyhuZXh0LCB0aGlzKTsKICAgICAgICBsaXN0ZW5lci5iZWdpbkxvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbihzdGFydC5uZXh0KTsKICAgICAgICB0b2tlbiA9IHR5cGVJbmZvLnBhcnNlVHlwZShiZWZvcmVUeXBlLCB0aGlzKTsKICAgICAgICByZXR1cm4gcGFyc2VOYW1lZEZ1bmN0aW9uUmVzdCh0b2tlbiwgc3RhcnQubmV4dCwgYmVmb3JlRm9ybWFscywgZmFsc2UpOwogICAgICB9CiAgICB9CgogICAgaWYgKGJlZm9yZVR5cGUgPT0gc3RhcnQgJiYKICAgICAgICB0eXBlSW5mby5pc051bGxhYmxlICYmCiAgICAgICAgdHlwZUluZm8uY291bGRCZUV4cHJlc3Npb24pIHsKICAgICAgYXNzZXJ0KG9wdGlvbmFsKCc/JywgdG9rZW4pKTsKICAgICAgYXNzZXJ0KG5leHQuaXNJZGVudGlmaWVyKTsKICAgICAgVG9rZW4gYWZ0ZXJJZGVudGlmaWVyID0gbmV4dC5uZXh0OwogICAgICAvLwogICAgICAvLyBmb3VuZCA8dHlwZXJlZj4gYD9gIDxpZGVudGlmaWVyPgogICAgICAvLyB3aXRoIG5vIGFubm90YXRpb25zIG9yIG1vZGlmaWVycyBwcmVjZWVkaW5nIGl0CiAgICAgIC8vCiAgICAgIGlmIChvcHRpb25hbCgnPScsIGFmdGVySWRlbnRpZmllcikpIHsKICAgICAgICAvLwogICAgICAgIC8vIGxvb2sgcGFzdCB0aGUgbmV4dCBleHByZXNzaW9uCiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgcGFydCBvZiBhIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24KICAgICAgICAvLwogICAgICAgIExpc3RlbmVyIG9yaWdpbmFsTGlzdGVuZXIgPSBsaXN0ZW5lcjsKICAgICAgICBsaXN0ZW5lciA9IG5ldyBGb3J3YXJkaW5nTGlzdGVuZXIoKTsKICAgICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogY29uc2lkZXIgdXNpbmcgVG9rZW5TdHJlYW1HaG9zdFdyaXRlciBoZXJlCiAgICAgICAgVG9rZW4gYWZ0ZXJFeHByZXNzaW9uID0KICAgICAgICAgICAgcGFyc2VFeHByZXNzaW9uV2l0aG91dENhc2NhZGUoYWZ0ZXJJZGVudGlmaWVyKS5uZXh0OwogICAgICAgIGxpc3RlbmVyID0gb3JpZ2luYWxMaXN0ZW5lcjsKCiAgICAgICAgaWYgKG9wdGlvbmFsKCc6JywgYWZ0ZXJFeHByZXNzaW9uKSkgewogICAgICAgICAgLy8gTG9va3MgbGlrZSBwYXJ0IG9mIGEgY29uZGl0aW9uYWwgZXhwcmVzc2lvbi4KICAgICAgICAgIC8vIERyb3AgdGhlIHR5cGUgaW5mb3JtYXRpb24gYW5kIHJlc2V0IHRoZSBsYXN0IGNvbnN1bWVkIHRva2VuLgogICAgICAgICAgdHlwZUluZm8gPSBub1R5cGU7CiAgICAgICAgICB0b2tlbiA9IHN0YXJ0OwogICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKCFhZnRlcklkZW50aWZpZXIuaXNLZXl3b3JkICYmCiAgICAgICAgICAhaXNPbmVPZk9yRW9mKGFmdGVySWRlbnRpZmllciwgY29uc3QgWyc7JywgJywnLCAnKSddKSkgewogICAgICAgIC8vIExvb2tzIGxpa2UgcGFydCBvZiBhIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24uCiAgICAgICAgLy8gRHJvcCB0aGUgdHlwZSBpbmZvcm1hdGlvbiBhbmQgcmVzZXQgdGhlIGxhc3QgY29uc3VtZWQgdG9rZW4uCiAgICAgICAgdHlwZUluZm8gPSBub1R5cGU7CiAgICAgICAgdG9rZW4gPSBzdGFydDsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgfQogICAgfQoKICAgIGlmICh0b2tlbiA9PSBzdGFydCkgewogICAgICAvLyBJZiBubyBhbm5vdGF0aW9uLCBtb2RpZmllciwgb3IgdHlwZSwgYW5kIHRoaXMgaXMgbm90IGEgbG9jYWwgZnVuY3Rpb24KICAgICAgLy8gdGhlbiB0aGlzIG11c3QgYmUgYW4gZXhwcmVzc2lvbiBzdGF0ZW1lbnQuCiAgICAgIGlmIChvbmx5UGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uU3RhcnQpIHsKICAgICAgICByZXR1cm4gc3RhcnQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudChzdGFydCk7CiAgICAgIH0KICAgIH0KCiAgICBpZiAobmV4dC50eXBlLmlzQnVpbHRJbiAmJgogICAgICAgIGJlZm9yZVR5cGUgPT0gc3RhcnQgJiYKICAgICAgICB0eXBlSW5mby5jb3VsZEJlRXhwcmVzc2lvbikgewogICAgICAvLyBEZXRlY3QgZXhwcmVzc2lvbnMgc3VjaCBhcyBpZGVudGlmaWVyIGBhc2AgaWRlbnRpZmllcgogICAgICAvLyBhbmQgdHJlYXQgdGhvc2UgYXMgZXhwcmVzc2lvbnMuCiAgICAgIGlmIChvcHRpb25hbCgnYXMnLCBuZXh0KSB8fCBvcHRpb25hbCgnaXMnLCBuZXh0KSkgewogICAgICAgIGludCBraW5kID0gbmV4dC5uZXh0LmtpbmQ7CiAgICAgICAgaWYgKEVRX1RPS0VOICE9IGtpbmQgJiYKICAgICAgICAgICAgU0VNSUNPTE9OX1RPS0VOICE9IGtpbmQgJiYKICAgICAgICAgICAgQ09NTUFfVE9LRU4gIT0ga2luZCkgewogICAgICAgICAgaWYgKG9ubHlQYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25TdGFydCkgewogICAgICAgICAgICBpZiAoIW9wdGlvbmFsKCdpbicsIG5leHQubmV4dCkpIHsKICAgICAgICAgICAgICByZXR1cm4gc3RhcnQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoc3RhcnQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGlmIChuZXh0LmlzSWRlbnRpZmllcikgewogICAgICAvLyBPbmx5IHJlcG9ydCB0aGVzZSBlcnJvcnMgaWYgdGhlcmUgaXMgYW4gaWRlbnRpZmllci4gSWYgdGhlcmUgaXMgbm90IGFuCiAgICAgIC8vIGlkZW50aWZpZXIsIHRoZW4gYWxsb3cgZW5zdXJlSWRlbnRpZmllciB0byByZXBvcnQgYW4gZXJyb3IKICAgICAgLy8gYW5kIGRvbid0IHJlcG9ydCBlcnJvcnMgaGVyZS4KICAgICAgaWYgKHZhckZpbmFsT3JDb25zdCA9PSBudWxsKSB7CiAgICAgICAgaWYgKHR5cGVJbmZvID09IG5vVHlwZSAmJiBsYXRlVG9rZW4gPT0gbnVsbCkgewogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlTWlzc2luZ0NvbnN0RmluYWxWYXJPclR5cGUpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChvcHRpb25hbCgndmFyJywgdmFyRmluYWxPckNvbnN0KSkgewogICAgICAgIGlmICh0eXBlSW5mbyAhPSBub1R5cGUpIHsKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IodmFyRmluYWxPckNvbnN0LCBmYXN0YS5tZXNzYWdlVHlwZUFmdGVyVmFyKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBpZiAoIW9wdGlvbmFsKCdAJywgc3RhcnQubmV4dCkpIHsKICAgICAgbGlzdGVuZXIuYmVnaW5NZXRhZGF0YVN0YXIoc3RhcnQubmV4dCk7CiAgICAgIGxpc3RlbmVyLmVuZE1ldGFkYXRhU3RhcigwKTsKICAgIH0KICAgIHRva2VuID0gdHlwZUluZm8ucGFyc2VUeXBlKGJlZm9yZVR5cGUsIHRoaXMpOwogICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICBsaXN0ZW5lci5iZWdpblZhcmlhYmxlc0RlY2xhcmF0aW9uKG5leHQsIGxhdGVUb2tlbiwgdmFyRmluYWxPckNvbnN0KTsKICAgIGlmICghb25seVBhcnNlVmFyaWFibGVEZWNsYXJhdGlvblN0YXJ0KSB7CiAgICAgIHRva2VuID0gcGFyc2VWYXJpYWJsZXNEZWNsYXJhdGlvblJlc3QodG9rZW4sIHRydWUpOwogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VWYXJpYWJsZXNEZWNsYXJhdGlvblJlc3QoVG9rZW4gdG9rZW4sIGJvb2wgZW5kV2l0aFNlbWljb2xvbikgewogICAgaW50IGNvdW50ID0gMTsKICAgIHRva2VuID0gcGFyc2VPcHRpb25hbGx5SW5pdGlhbGl6ZWRJZGVudGlmaWVyKHRva2VuKTsKICAgIHdoaWxlIChvcHRpb25hbCgnLCcsIHRva2VuLm5leHQpKSB7CiAgICAgIHRva2VuID0gcGFyc2VPcHRpb25hbGx5SW5pdGlhbGl6ZWRJZGVudGlmaWVyKHRva2VuLm5leHQpOwogICAgICArK2NvdW50OwogICAgfQogICAgaWYgKGVuZFdpdGhTZW1pY29sb24pIHsKICAgICAgVG9rZW4gc2VtaWNvbG9uID0gZW5zdXJlU2VtaWNvbG9uKHRva2VuKTsKICAgICAgbGlzdGVuZXIuZW5kVmFyaWFibGVzRGVjbGFyYXRpb24oY291bnQsIHNlbWljb2xvbik7CiAgICAgIHJldHVybiBzZW1pY29sb247CiAgICB9IGVsc2UgewogICAgICBsaXN0ZW5lci5lbmRWYXJpYWJsZXNEZWNsYXJhdGlvbihjb3VudCwgbnVsbCk7CiAgICAgIHJldHVybiB0b2tlbjsKICAgIH0KICB9CgogIFRva2VuIHBhcnNlT3B0aW9uYWxseUluaXRpYWxpemVkSWRlbnRpZmllcihUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmFtZVRva2VuID0KICAgICAgICBlbnN1cmVJZGVudGlmaWVyKHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC5sb2NhbFZhcmlhYmxlRGVjbGFyYXRpb24pOwogICAgbGlzdGVuZXIuYmVnaW5Jbml0aWFsaXplZElkZW50aWZpZXIobmFtZVRva2VuKTsKICAgIHRva2VuID0gcGFyc2VWYXJpYWJsZUluaXRpYWxpemVyT3B0KG5hbWVUb2tlbik7CiAgICBsaXN0ZW5lci5lbmRJbml0aWFsaXplZElkZW50aWZpZXIobmFtZVRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gaWZTdGF0ZW1lbnQ6CiAgLy8vICAgJ2lmJyAnKCcgZXhwcmVzc2lvbiAnKScgc3RhdGVtZW50ICgnZWxzZScgc3RhdGVtZW50KT8KICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUlmU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBpZlRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnaWYnLCBpZlRva2VuKSk7CiAgICBsaXN0ZW5lci5iZWdpbklmU3RhdGVtZW50KGlmVG9rZW4pOwogICAgdG9rZW4gPSBlbnN1cmVQYXJlbnRoZXNpemVkQ29uZGl0aW9uKGlmVG9rZW4pOwogICAgbGlzdGVuZXIuYmVnaW5UaGVuU3RhdGVtZW50KHRva2VuLm5leHQpOwogICAgdG9rZW4gPSBwYXJzZVN0YXRlbWVudCh0b2tlbik7CiAgICBsaXN0ZW5lci5lbmRUaGVuU3RhdGVtZW50KHRva2VuKTsKICAgIFRva2VuIGVsc2VUb2tlbiA9IG51bGw7CiAgICBpZiAob3B0aW9uYWwoJ2Vsc2UnLCB0b2tlbi5uZXh0KSkgewogICAgICBlbHNlVG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICBsaXN0ZW5lci5iZWdpbkVsc2VTdGF0ZW1lbnQoZWxzZVRva2VuKTsKICAgICAgdG9rZW4gPSBwYXJzZVN0YXRlbWVudChlbHNlVG9rZW4pOwogICAgICBsaXN0ZW5lci5lbmRFbHNlU3RhdGVtZW50KGVsc2VUb2tlbik7CiAgICB9CiAgICBsaXN0ZW5lci5lbmRJZlN0YXRlbWVudChpZlRva2VuLCBlbHNlVG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBmb3JTdGF0ZW1lbnQ6CiAgLy8vICAgJ2F3YWl0Jz8gJ2ZvcicgJygnIGZvckxvb3BQYXJ0cyAnKScgc3RhdGVtZW50CiAgLy8vIDsKICAvLy8KICAvLy8gIGZvckxvb3BQYXJ0czoKICAvLy8gICAgICBsb2NhbFZhcmlhYmxlRGVjbGFyYXRpb24gJzsnIGV4cHJlc3Npb24/ICc7JyBleHByZXNzaW9uTGlzdD8KICAvLy8gICAgfCBleHByZXNzaW9uPyAnOycgZXhwcmVzc2lvbj8gJzsnIGV4cHJlc3Npb25MaXN0PwogIC8vLyAgICB8IGxvY2FsVmFyaWFibGVEZWNsYXJhdGlvbiAnaW4nIGV4cHJlc3Npb24KICAvLy8gICAgfCBpZGVudGlmaWVyICdpbicgZXhwcmVzc2lvbgogIC8vLyA7CiAgLy8vCiAgLy8vIGZvckluaXRpYWxpemVyU3RhdGVtZW50OgogIC8vLyAgIGxvY2FsVmFyaWFibGVEZWNsYXJhdGlvbiB8CiAgLy8vICAgZXhwcmVzc2lvbj8gJzsnCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VGb3JTdGF0ZW1lbnQoVG9rZW4gdG9rZW4sIFRva2VuIGF3YWl0VG9rZW4pIHsKICAgIFRva2VuIGZvclRva2VuID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGF3YWl0VG9rZW4gPT0gbnVsbCB8fCBvcHRpb25hbCgnYXdhaXQnLCBhd2FpdFRva2VuKSk7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2ZvcicsIHRva2VuKSk7CiAgICBsaXN0ZW5lci5iZWdpbkZvclN0YXRlbWVudChmb3JUb2tlbik7CgogICAgdG9rZW4gPSBwYXJzZUZvckxvb3BQYXJ0c1N0YXJ0KGF3YWl0VG9rZW4sIGZvclRva2VuKTsKICAgIFRva2VuIGlkZW50aWZpZXIgPSB0b2tlbi5uZXh0OwogICAgdG9rZW4gPSBwYXJzZUZvckxvb3BQYXJ0c01pZCh0b2tlbiwgYXdhaXRUb2tlbiwgZm9yVG9rZW4pOwogICAgaWYgKG9wdGlvbmFsKCdpbicsIHRva2VuLm5leHQpIHx8IG9wdGlvbmFsKCc6JywgdG9rZW4ubmV4dCkpIHsKICAgICAgLy8gUHJvY2VzcyBgZm9yICggLi4uIGluIC4uLiApYAogICAgICByZXR1cm4gcGFyc2VGb3JJblJlc3QodG9rZW4sIGF3YWl0VG9rZW4sIGZvclRva2VuLCBpZGVudGlmaWVyKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFByb2Nlc3MgYGZvciAoIC4uLiA7IC4uLiA7IC4uLiApYAogICAgICByZXR1cm4gcGFyc2VGb3JSZXN0KGF3YWl0VG9rZW4sIHRva2VuLCBmb3JUb2tlbik7CiAgICB9CiAgfQoKICAvLy8gUGFyc2UgdGhlIHN0YXJ0IG9mIGEgZm9yIGxvb3AgY29udHJvbCBzdHJ1Y3R1cmUKICAvLy8gZnJvbSB0aGUgb3BlbiBwYXJlbnRoZXNpcyB1cCB0byBidXQgbm90IGluY2x1ZGluZyB0aGUgaWRlbnRpZmllci4KICBUb2tlbiBwYXJzZUZvckxvb3BQYXJ0c1N0YXJ0KFRva2VuIGF3YWl0VG9rZW4sIFRva2VuIGZvclRva2VuKSB7CiAgICBUb2tlbiBsZWZ0UGFyZW50aGVzaXMgPSBmb3JUb2tlbi5uZXh0OwogICAgaWYgKCFvcHRpb25hbCgnKCcsIGxlZnRQYXJlbnRoZXNpcykpIHsKICAgICAgLy8gUmVjb3ZlcnkKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgIGxlZnRQYXJlbnRoZXNpcywgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCcoJykpOwoKICAgICAgQmVnaW5Ub2tlbiBvcGVuUGFyZW4gPSByZXdyaXRlci5pbnNlcnRUb2tlbigKICAgICAgICAgIGZvclRva2VuLAogICAgICAgICAgbmV3IFN5bnRoZXRpY0JlZ2luVG9rZW4oCiAgICAgICAgICAgICAgVG9rZW5UeXBlLk9QRU5fUEFSRU4sIGxlZnRQYXJlbnRoZXNpcy5vZmZzZXQpKTsKCiAgICAgIFRva2VuIHRva2VuOwogICAgICBpZiAoYXdhaXRUb2tlbiAhPSBudWxsKSB7CiAgICAgICAgdG9rZW4gPSByZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKG9wZW5QYXJlbik7CiAgICAgICAgdG9rZW4gPSByZXdyaXRlci5pbnNlcnRTeW50aGV0aWNLZXl3b3JkKHRva2VuLCBLZXl3b3JkLklOKTsKICAgICAgICB0b2tlbiA9IHJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4pOwogICAgICB9IGVsc2UgewogICAgICAgIHRva2VuID0gcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljVG9rZW4ob3BlblBhcmVuLCBUb2tlblR5cGUuU0VNSUNPTE9OKTsKICAgICAgICB0b2tlbiA9IHJld3JpdGVyLmluc2VydFN5bnRoZXRpY1Rva2VuKHRva2VuLCBUb2tlblR5cGUuU0VNSUNPTE9OKTsKICAgICAgfQoKICAgICAgb3BlblBhcmVuLmVuZEdyb3VwID0gdG9rZW4gPSByZXdyaXRlci5pbnNlcnRUb2tlbih0b2tlbiwKICAgICAgICAgIG5ldyBTeW50aGV0aWNUb2tlbihUb2tlblR5cGUuQ0xPU0VfUEFSRU4sIGxlZnRQYXJlbnRoZXNpcy5vZmZzZXQpKTsKCiAgICAgIHRva2VuID0gcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbik7CiAgICAgIHJld3JpdGVyLmluc2VydFN5bnRoZXRpY1Rva2VuKHRva2VuLCBUb2tlblR5cGUuU0VNSUNPTE9OKTsKCiAgICAgIGxlZnRQYXJlbnRoZXNpcyA9IG9wZW5QYXJlbjsKICAgIH0KCiAgICAvLyBQYXNzIGB0cnVlYCBzbyB0aGF0IHRoZSBbcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50T3JEZWNsYXJhdGlvbl0gb25seQogICAgLy8gcGFyc2VzIHRoZSBtZXRhZGF0YSwgbW9kaWZpZXJzLCBhbmQgdHlwZSBvZiBhIGxvY2FsIHZhcmlhYmxlCiAgICAvLyBkZWNsYXJhdGlvbiBpZiBpdCBleGlzdHMuIFRoaXMgZW5hYmxlcyBjYXB0dXJpbmcgW2JlZm9yZUlkZW50aWZpZXJdCiAgICAvLyBmb3IgbGF0ZXIgZXJyb3IgcmVwb3J0aW5nLgogICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudE9yRGVjbGFyYXRpb24obGVmdFBhcmVudGhlc2lzLCB0cnVlKTsKICB9CgogIC8vLyBQYXJzZSB0aGUgcmVtYWluZGVyIG9mIHRoZSBsb2NhbCB2YXJpYWJsZSBkZWNsYXJhdGlvbgogIC8vLyBvciBhbiBleHByZXNzaW9uIGlmIG5vIGxvY2FsIHZhcmlhYmxlIGRlY2xhcmF0aW9uIHdhcyBmb3VuZC4KICBUb2tlbiBwYXJzZUZvckxvb3BQYXJ0c01pZChUb2tlbiB0b2tlbiwgVG9rZW4gYXdhaXRUb2tlbiwgVG9rZW4gZm9yVG9rZW4pIHsKICAgIGlmICh0b2tlbiAhPSBmb3JUb2tlbi5uZXh0KSB7CiAgICAgIHRva2VuID0gcGFyc2VWYXJpYWJsZXNEZWNsYXJhdGlvblJlc3QodG9rZW4sIGZhbHNlKTsKICAgICAgbGlzdGVuZXIuaGFuZGxlRm9ySW5pdGlhbGl6ZXJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb24odG9rZW4pOwogICAgfSBlbHNlIGlmIChvcHRpb25hbCgnOycsIHRva2VuLm5leHQpKSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZUZvckluaXRpYWxpemVyRW1wdHlTdGF0ZW1lbnQodG9rZW4ubmV4dCk7CiAgICB9IGVsc2UgewogICAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbih0b2tlbik7CiAgICAgIGxpc3RlbmVyLmhhbmRsZUZvckluaXRpYWxpemVyRXhwcmVzc2lvblN0YXRlbWVudCh0b2tlbik7CiAgICB9CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgnOycsIG5leHQpKSB7CiAgICAgIGlmIChhd2FpdFRva2VuICE9IG51bGwpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKGF3YWl0VG9rZW4sIGZhc3RhLm1lc3NhZ2VJbnZhbGlkQXdhaXRGb3IpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKCFvcHRpb25hbCgnaW4nLCBuZXh0KSkgewogICAgICAvLyBSZWNvdmVyeQogICAgICBpZiAob3B0aW9uYWwoJzonLCBuZXh0KSkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IobmV4dCwgZmFzdGEubWVzc2FnZUNvbG9uSW5QbGFjZU9mSW4pOwogICAgICB9IGVsc2UgaWYgKGF3YWl0VG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgIG5leHQsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRCdXRHb3Qud2l0aEFyZ3VtZW50cygnaW4nKSk7CiAgICAgICAgdG9rZW4uc2V0TmV4dCgKICAgICAgICAgICAgbmV3IFN5bnRoZXRpY0tleXdvcmRUb2tlbihLZXl3b3JkLklOLCBuZXh0Lm9mZnNldCkuLnNldE5leHQobmV4dCkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gVGhpcyBtZXRob2QgcGFyc2VzIHRoZSBwb3J0aW9uIG9mIHRoZSBmb3JMb29wUGFydHMgdGhhdCBzdGFydHMgd2l0aCB0aGUKICAvLy8gZmlyc3Qgc2VtaWNvbG9uICh0aGUgb25lIHRoYXQgdGVybWluYXRlcyB0aGUgZm9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnQpLgogIC8vLwogIC8vLyBgYGAKICAvLy8gIGZvckxvb3BQYXJ0czoKICAvLy8gICAgICBsb2NhbFZhcmlhYmxlRGVjbGFyYXRpb24gJzsnIGV4cHJlc3Npb24/ICc7JyBleHByZXNzaW9uTGlzdD8KICAvLy8gICAgfCBleHByZXNzaW9uPyAnOycgZXhwcmVzc2lvbj8gJzsnIGV4cHJlc3Npb25MaXN0PwogIC8vLyAgICB8IGxvY2FsVmFyaWFibGVEZWNsYXJhdGlvbiAnaW4nIGV4cHJlc3Npb24KICAvLy8gICAgfCBpZGVudGlmaWVyICdpbicgZXhwcmVzc2lvbgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlRm9yUmVzdChUb2tlbiBhd2FpdFRva2VuLCBUb2tlbiB0b2tlbiwgVG9rZW4gZm9yVG9rZW4pIHsKICAgIHRva2VuID0gcGFyc2VGb3JMb29wUGFydHNSZXN0KHRva2VuLCBmb3JUb2tlbiwgYXdhaXRUb2tlbik7CiAgICBsaXN0ZW5lci5iZWdpbkZvclN0YXRlbWVudEJvZHkodG9rZW4ubmV4dCk7CiAgICBMb29wU3RhdGUgc2F2ZWRMb29wU3RhdGUgPSBsb29wU3RhdGU7CiAgICBsb29wU3RhdGUgPSBMb29wU3RhdGUuSW5zaWRlTG9vcDsKICAgIHRva2VuID0gcGFyc2VTdGF0ZW1lbnQodG9rZW4pOwogICAgbG9vcFN0YXRlID0gc2F2ZWRMb29wU3RhdGU7CiAgICBsaXN0ZW5lci5lbmRGb3JTdGF0ZW1lbnRCb2R5KHRva2VuLm5leHQpOwogICAgbGlzdGVuZXIuZW5kRm9yU3RhdGVtZW50KHRva2VuLm5leHQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VGb3JMb29wUGFydHNSZXN0KFRva2VuIHRva2VuLCBUb2tlbiBmb3JUb2tlbiwgVG9rZW4gYXdhaXRUb2tlbikgewogICAgVG9rZW4gbGVmdFBhcmVudGhlc2lzID0gZm9yVG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnZm9yJywgZm9yVG9rZW4pKTsKICAgIGFzc2VydChvcHRpb25hbCgnKCcsIGxlZnRQYXJlbnRoZXNpcykpOwoKICAgIFRva2VuIGxlZnRTZXBhcmF0b3IgPSBlbnN1cmVTZW1pY29sb24odG9rZW4pOwogICAgaWYgKG9wdGlvbmFsKCc7JywgbGVmdFNlcGFyYXRvci5uZXh0KSkgewogICAgICB0b2tlbiA9IHBhcnNlRW1wdHlTdGF0ZW1lbnQobGVmdFNlcGFyYXRvcik7CiAgICB9IGVsc2UgewogICAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudChsZWZ0U2VwYXJhdG9yKTsKICAgIH0KICAgIGludCBleHByZXNzaW9uQ291bnQgPSAwOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIGlmIChvcHRpb25hbCgnKScsIG5leHQpKSB7CiAgICAgICAgdG9rZW4gPSBuZXh0OwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKHRva2VuKS5uZXh0OwogICAgICArK2V4cHJlc3Npb25Db3VudDsKICAgICAgaWYgKCFvcHRpb25hbCgnLCcsIHRva2VuKSkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBpZiAodG9rZW4gIT0gbGVmdFBhcmVudGhlc2lzLmVuZEdyb3VwKSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4odG9rZW4sIGZhc3RhLnRlbXBsYXRlVW5leHBlY3RlZFRva2VuKTsKICAgICAgdG9rZW4gPSBsZWZ0UGFyZW50aGVzaXMuZW5kR3JvdXA7CiAgICB9CiAgICBsaXN0ZW5lci5oYW5kbGVGb3JMb29wUGFydHMoCiAgICAgICAgZm9yVG9rZW4sIGxlZnRQYXJlbnRoZXNpcywgbGVmdFNlcGFyYXRvciwgZXhwcmVzc2lvbkNvdW50KTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBUaGlzIG1ldGhvZCBwYXJzZXMgdGhlIHBvcnRpb24gb2YgdGhlIGZvckxvb3BQYXJ0cyB0aGF0IHN0YXJ0cyB3aXRoIHRoZQogIC8vLyBrZXl3b3JkICdpbicuIEZvciB0aGUgc2FrZSBvZiByZWNvdmVyeSwgd2UgYWNjZXB0IGEgY29sb24gaW4gcGxhY2Ugb2YgdGhlCiAgLy8vIGtleXdvcmQuCiAgLy8vCiAgLy8vIGBgYAogIC8vLyAgZm9yTG9vcFBhcnRzOgogIC8vLyAgICAgIGxvY2FsVmFyaWFibGVEZWNsYXJhdGlvbiAnOycgZXhwcmVzc2lvbj8gJzsnIGV4cHJlc3Npb25MaXN0PwogIC8vLyAgICB8IGV4cHJlc3Npb24/ICc7JyBleHByZXNzaW9uPyAnOycgZXhwcmVzc2lvbkxpc3Q/CiAgLy8vICAgIHwgbG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uICdpbicgZXhwcmVzc2lvbgogIC8vLyAgICB8IGlkZW50aWZpZXIgJ2luJyBleHByZXNzaW9uCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VGb3JJblJlc3QoCiAgICAgIFRva2VuIHRva2VuLCBUb2tlbiBhd2FpdFRva2VuLCBUb2tlbiBmb3JUb2tlbiwgVG9rZW4gaWRlbnRpZmllcikgewogICAgdG9rZW4gPSBwYXJzZUZvckluTG9vcFBhcnRzUmVzdCh0b2tlbiwgYXdhaXRUb2tlbiwgZm9yVG9rZW4sIGlkZW50aWZpZXIpOwogICAgbGlzdGVuZXIuYmVnaW5Gb3JJbkJvZHkodG9rZW4ubmV4dCk7CiAgICBMb29wU3RhdGUgc2F2ZWRMb29wU3RhdGUgPSBsb29wU3RhdGU7CiAgICBsb29wU3RhdGUgPSBMb29wU3RhdGUuSW5zaWRlTG9vcDsKICAgIHRva2VuID0gcGFyc2VTdGF0ZW1lbnQodG9rZW4pOwogICAgbG9vcFN0YXRlID0gc2F2ZWRMb29wU3RhdGU7CiAgICBsaXN0ZW5lci5lbmRGb3JJbkJvZHkodG9rZW4ubmV4dCk7CiAgICBsaXN0ZW5lci5lbmRGb3JJbih0b2tlbi5uZXh0KTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlRm9ySW5Mb29wUGFydHNSZXN0KAogICAgICBUb2tlbiB0b2tlbiwgVG9rZW4gYXdhaXRUb2tlbiwgVG9rZW4gZm9yVG9rZW4sIFRva2VuIGlkZW50aWZpZXIpIHsKICAgIFRva2VuIGluS2V5d29yZCA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2ZvcicsIGZvclRva2VuKSk7CiAgICBhc3NlcnQob3B0aW9uYWwoJygnLCBmb3JUb2tlbi5uZXh0KSk7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2luJywgaW5LZXl3b3JkKSB8fCBvcHRpb25hbCgnOicsIGluS2V5d29yZCkpOwoKICAgIGlmICghaWRlbnRpZmllci5pc0lkZW50aWZpZXIpIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpZmllciAhPSB0b2tlbikgewogICAgICBpZiAob3B0aW9uYWwoJz0nLCBpZGVudGlmaWVyLm5leHQpKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgaWRlbnRpZmllci5uZXh0LCBmYXN0YS5tZXNzYWdlSW5pdGlhbGl6ZWRWYXJpYWJsZUluRm9yRWFjaCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgICAgaWRlbnRpZmllci5uZXh0LCBmYXN0YS50ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoYXdhaXRUb2tlbiAhPSBudWxsICYmICFpbkFzeW5jKSB7CiAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBjb25zaWRlciByZXBvcnRpbmcgdGhlIGVycm9yIG9uIGF3YWl0VG9rZW4KICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihpbktleXdvcmQsIGZhc3RhLm1lc3NhZ2VBd2FpdEZvck5vdEFzeW5jKTsKICAgIH0KCiAgICBsaXN0ZW5lci5iZWdpbkZvckluRXhwcmVzc2lvbihpbktleXdvcmQubmV4dCk7CiAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbihpbktleXdvcmQpOwogICAgdG9rZW4gPSBlbnN1cmVDbG9zZVBhcmVuKHRva2VuLCBmb3JUb2tlbi5uZXh0KTsKICAgIGxpc3RlbmVyLmVuZEZvckluRXhwcmVzc2lvbih0b2tlbik7CiAgICBsaXN0ZW5lci5oYW5kbGVGb3JJbkxvb3BQYXJ0cygKICAgICAgICBhd2FpdFRva2VuLCBmb3JUb2tlbiwgZm9yVG9rZW4ubmV4dCwgaW5LZXl3b3JkKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gd2hpbGVTdGF0ZW1lbnQ6CiAgLy8vICAgJ3doaWxlJyAnKCcgZXhwcmVzc2lvbiAnKScgc3RhdGVtZW50CiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VXaGlsZVN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gd2hpbGVUb2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ3doaWxlJywgd2hpbGVUb2tlbikpOwogICAgbGlzdGVuZXIuYmVnaW5XaGlsZVN0YXRlbWVudCh3aGlsZVRva2VuKTsKICAgIHRva2VuID0gZW5zdXJlUGFyZW50aGVzaXplZENvbmRpdGlvbih3aGlsZVRva2VuKTsKICAgIGxpc3RlbmVyLmJlZ2luV2hpbGVTdGF0ZW1lbnRCb2R5KHRva2VuLm5leHQpOwogICAgTG9vcFN0YXRlIHNhdmVkTG9vcFN0YXRlID0gbG9vcFN0YXRlOwogICAgbG9vcFN0YXRlID0gTG9vcFN0YXRlLkluc2lkZUxvb3A7CiAgICB0b2tlbiA9IHBhcnNlU3RhdGVtZW50KHRva2VuKTsKICAgIGxvb3BTdGF0ZSA9IHNhdmVkTG9vcFN0YXRlOwogICAgbGlzdGVuZXIuZW5kV2hpbGVTdGF0ZW1lbnRCb2R5KHRva2VuLm5leHQpOwogICAgbGlzdGVuZXIuZW5kV2hpbGVTdGF0ZW1lbnQod2hpbGVUb2tlbiwgdG9rZW4ubmV4dCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIGRvU3RhdGVtZW50OgogIC8vLyAgICdkbycgc3RhdGVtZW50ICd3aGlsZScgJygnIGV4cHJlc3Npb24gJyknICc7JwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlRG9XaGlsZVN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gZG9Ub2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2RvJywgZG9Ub2tlbikpOwogICAgbGlzdGVuZXIuYmVnaW5Eb1doaWxlU3RhdGVtZW50KGRvVG9rZW4pOwogICAgbGlzdGVuZXIuYmVnaW5Eb1doaWxlU3RhdGVtZW50Qm9keShkb1Rva2VuLm5leHQpOwogICAgTG9vcFN0YXRlIHNhdmVkTG9vcFN0YXRlID0gbG9vcFN0YXRlOwogICAgbG9vcFN0YXRlID0gTG9vcFN0YXRlLkluc2lkZUxvb3A7CiAgICB0b2tlbiA9IHBhcnNlU3RhdGVtZW50KGRvVG9rZW4pOwogICAgbG9vcFN0YXRlID0gc2F2ZWRMb29wU3RhdGU7CiAgICBsaXN0ZW5lci5lbmREb1doaWxlU3RhdGVtZW50Qm9keSh0b2tlbik7CiAgICBUb2tlbiB3aGlsZVRva2VuID0gdG9rZW4ubmV4dDsKICAgIGlmICghb3B0aW9uYWwoJ3doaWxlJywgd2hpbGVUb2tlbikpIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgIHdoaWxlVG9rZW4sIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRCdXRHb3Qud2l0aEFyZ3VtZW50cygnd2hpbGUnKSk7CiAgICAgIHdoaWxlVG9rZW4gPSByZXdyaXRlci5pbnNlcnRTeW50aGV0aWNLZXl3b3JkKHRva2VuLCBLZXl3b3JkLldISUxFKTsKICAgIH0KICAgIHRva2VuID0gZW5zdXJlUGFyZW50aGVzaXplZENvbmRpdGlvbih3aGlsZVRva2VuKTsKICAgIHRva2VuID0gZW5zdXJlU2VtaWNvbG9uKHRva2VuKTsKICAgIGxpc3RlbmVyLmVuZERvV2hpbGVTdGF0ZW1lbnQoZG9Ub2tlbiwgd2hpbGVUb2tlbiwgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBibG9jazoKICAvLy8gICAneycgc3RhdGVtZW50KiAnfScKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUJsb2NrKFRva2VuIHRva2VuLCBTdHJpbmcgYmxvY2tLaW5kKSB7CiAgICBUb2tlbiBiZWdpbiA9IHRva2VuID0gZW5zdXJlQmxvY2sodG9rZW4sIG51bGwsIGJsb2NrS2luZCk7CiAgICBsaXN0ZW5lci5iZWdpbkJsb2NrKGJlZ2luKTsKICAgIGludCBzdGF0ZW1lbnRDb3VudCA9IDA7CiAgICBUb2tlbiBzdGFydFRva2VuID0gdG9rZW4ubmV4dDsKICAgIHdoaWxlIChub3RFb2ZPclZhbHVlKCd9Jywgc3RhcnRUb2tlbikpIHsKICAgICAgdG9rZW4gPSBwYXJzZVN0YXRlbWVudCh0b2tlbik7CiAgICAgIGlmIChpZGVudGljYWwodG9rZW4ubmV4dCwgc3RhcnRUb2tlbikpIHsKICAgICAgICAvLyBObyBwcm9ncmVzcyB3YXMgbWFkZSwgc28gd2UgcmVwb3J0IHRoZSBjdXJyZW50IHRva2VuIGFzIGJlaW5nIGludmFsaWQKICAgICAgICAvLyBhbmQgbW92ZSBmb3J3YXJkLgogICAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICB0b2tlbiwgZmFzdGEudGVtcGxhdGVVbmV4cGVjdGVkVG9rZW4ud2l0aEFyZ3VtZW50cyh0b2tlbikpOwogICAgICB9CiAgICAgICsrc3RhdGVtZW50Q291bnQ7CiAgICAgIHN0YXJ0VG9rZW4gPSB0b2tlbi5uZXh0OwogICAgfQogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCd9JywgdG9rZW4pKTsKICAgIGxpc3RlbmVyLmVuZEJsb2NrKHN0YXRlbWVudENvdW50LCBiZWdpbiwgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VJbnZhbGlkQmxvY2soVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGJlZ2luID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgneycsIGJlZ2luKSk7CiAgICAvLyBQYXJzZSBhbmQgcmVwb3J0IHRoZSBpbnZhbGlkIGJsb2NrLCBidXQgc3VwcHJlc3MgZXJyb3JzCiAgICAvLyBiZWNhdXNlIGFuIGVycm9yIGhhcyBhbHJlYWR5IGJlZW4gcmVwb3J0ZWQgYnkgdGhlIGNhbGxlci4KICAgIExpc3RlbmVyIG9yaWdpbmFsTGlzdGVuZXIgPSBsaXN0ZW5lcjsKICAgIGxpc3RlbmVyID0gbmV3IEZvcndhcmRpbmdMaXN0ZW5lcihsaXN0ZW5lcikuLmZvcndhcmRFcnJvcnMgPSBmYWxzZTsKICAgIC8vIFRoZSBzY2FubmVyIGVuc3VyZXMgdGhhdCBge2AgYWx3YXlzIGhhcyBhIGNsb3NpbmcgYH1gLgogICAgdG9rZW4gPSBwYXJzZUJsb2NrKHRva2VuLCBudWxsKTsKICAgIGxpc3RlbmVyID0gb3JpZ2luYWxMaXN0ZW5lcjsKICAgIGxpc3RlbmVyLmhhbmRsZUludmFsaWRUb3BMZXZlbEJsb2NrKGJlZ2luKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBEZXRlcm1pbmUgaWYgdGhlIGZvbGxvd2luZyB0b2tlbnMgbG9vayBsaWtlIGFuICdhd2FpdCcgZXhwcmVzc2lvbgogIC8vLyBhbmQgbm90IGEgbG9jYWwgdmFyaWFibGUgb3IgbG9jYWwgZnVuY3Rpb24gZGVjbGFyYXRpb24uCiAgYm9vbCBsb29rc0xpa2VBd2FpdEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnYXdhaXQnLCB0b2tlbikpOwogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwoKICAgIC8vIFRPRE8oZGFucnViZWwpOiBDb25zaWRlciBwYXJzaW5nIHRoZSBwb3RlbnRpYWwgZXhwcmVzc2lvbiBmb2xsb3dpbmcKICAgIC8vIHRoZSBgYXdhaXRgIHRva2VuIG9uY2UgZG9pbmcgc28gZG9lcyBub3QgbW9kaWZ5IHRoZSB0b2tlbiBzdHJlYW0uCiAgICAvLyBGb3Igbm93LCB1c2Ugc2ltcGxlIGxvb2sgYWhlYWQgYW5kIGVuc3VyZSBubyBmYWxzZSBwb3NpdGl2ZXMuCgogICAgaWYgKHRva2VuLmlzSWRlbnRpZmllcikgewogICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICAgIGlmIChvcHRpb25hbCgnKCcsIHRva2VuKSkgewogICAgICAgIHRva2VuID0gdG9rZW4uZW5kR3JvdXAubmV4dDsKICAgICAgICBpZiAoaXNPbmVPZih0b2tlbiwgWyc7JywgJy4nLCAnLi4nLCAnPycsICc/LiddKSkgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGlzT25lT2YodG9rZW4sIFsnLicsICcpJywgJ10nXSkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8vIGBgYAogIC8vLyBhd2FpdEV4cHJlc3Npb246CiAgLy8vICAgJ2F3YWl0JyB1bmFyeUV4cHJlc3Npb24KICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUF3YWl0RXhwcmVzc2lvbihUb2tlbiB0b2tlbiwgYm9vbCBhbGxvd0Nhc2NhZGVzKSB7CiAgICBUb2tlbiBhd2FpdFRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnYXdhaXQnLCBhd2FpdFRva2VuKSk7CiAgICBsaXN0ZW5lci5iZWdpbkF3YWl0RXhwcmVzc2lvbihhd2FpdFRva2VuKTsKICAgIHRva2VuID0gcGFyc2VQcmVjZWRlbmNlRXhwcmVzc2lvbigKICAgICAgICBhd2FpdFRva2VuLCBQT1NURklYX1BSRUNFREVOQ0UsIGFsbG93Q2FzY2FkZXMpOwogICAgaWYgKGluQXN5bmMpIHsKICAgICAgbGlzdGVuZXIuZW5kQXdhaXRFeHByZXNzaW9uKGF3YWl0VG9rZW4sIHRva2VuLm5leHQpOwogICAgfSBlbHNlIHsKICAgICAgZmFzdGEuTWVzc2FnZUNvZGUgZXJyb3JDb2RlID0gZmFzdGEubWVzc2FnZUF3YWl0Tm90QXN5bmM7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoYXdhaXRUb2tlbiwgZXJyb3JDb2RlKTsKICAgICAgbGlzdGVuZXIuZW5kSW52YWxpZEF3YWl0RXhwcmVzc2lvbihhd2FpdFRva2VuLCB0b2tlbi5uZXh0LCBlcnJvckNvZGUpOwogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyB0aHJvd0V4cHJlc3Npb246CiAgLy8vICAgJ3Rocm93JyBleHByZXNzaW9uCiAgLy8vIDsKICAvLy8KICAvLy8gdGhyb3dFeHByZXNzaW9uV2l0aG91dENhc2NhZGU6CiAgLy8vICAgJ3Rocm93JyBleHByZXNzaW9uV2l0aG91dENhc2NhZGUKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZVRocm93RXhwcmVzc2lvbihUb2tlbiB0b2tlbiwgYm9vbCBhbGxvd0Nhc2NhZGVzKSB7CiAgICBUb2tlbiB0aHJvd1Rva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgndGhyb3cnLCB0aHJvd1Rva2VuKSk7CiAgICBpZiAob3B0aW9uYWwoJzsnLCB0aHJvd1Rva2VuLm5leHQpKSB7CiAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBGaW5kIGEgYmV0dGVyIHdheSB0byBpbnRlcmNlcHQgdGhlIHBhcnNlRXhwcmVzc2lvbgogICAgICAvLyByZWNvdmVyeSB0byBnZW5lcmF0ZSB0aGlzIGVycm9yIG1lc3NhZ2UgcmF0aGVyIHRoYW4gZXhwbGljaXRseQogICAgICAvLyBjaGVja2luZyB0aGUgbmV4dCB0b2tlbiBhcyB3ZSBhcmUgZG9pbmcgaGVyZS4KICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgIHRocm93VG9rZW4ubmV4dCwgZmFzdGEubWVzc2FnZU1pc3NpbmdFeHByZXNzaW9uSW5UaHJvdyk7CiAgICAgIHJld3JpdGVyLmluc2VydFRva2VuKAogICAgICAgICAgdGhyb3dUb2tlbiwKICAgICAgICAgIG5ldyBTeW50aGV0aWNTdHJpbmdUb2tlbigKICAgICAgICAgICAgICBUb2tlblR5cGUuU1RSSU5HLCAnIiInLCB0aHJvd1Rva2VuLm5leHQuY2hhck9mZnNldCwgMCkpOwogICAgfQogICAgdG9rZW4gPSBhbGxvd0Nhc2NhZGVzCiAgICAgICAgPyBwYXJzZUV4cHJlc3Npb24odGhyb3dUb2tlbikKICAgICAgICA6IHBhcnNlRXhwcmVzc2lvbldpdGhvdXRDYXNjYWRlKHRocm93VG9rZW4pOwogICAgbGlzdGVuZXIuaGFuZGxlVGhyb3dFeHByZXNzaW9uKHRocm93VG9rZW4sIHRva2VuLm5leHQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyByZXRocm93U3RhdGVtZW50OgogIC8vLyAgICdyZXRocm93JyAnOycKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZVJldGhyb3dTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIHRocm93VG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdyZXRocm93JywgdGhyb3dUb2tlbikpOwogICAgbGlzdGVuZXIuYmVnaW5SZXRocm93U3RhdGVtZW50KHRocm93VG9rZW4pOwogICAgdG9rZW4gPSBlbnN1cmVTZW1pY29sb24odGhyb3dUb2tlbik7CiAgICBsaXN0ZW5lci5lbmRSZXRocm93U3RhdGVtZW50KHRocm93VG9rZW4sIHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gdHJ5U3RhdGVtZW50OgogIC8vLyAgICd0cnknIGJsb2NrIChvblBhcnQrIGZpbmFsbHlQYXJ0PyB8IGZpbmFsbHlQYXJ0KQogIC8vLyA7CiAgLy8vCiAgLy8vIG9uUGFydDoKICAvLy8gICBjYXRjaFBhcnQgYmxvY2sgfAogIC8vLyAgICdvbicgdHlwZSBjYXRjaFBhcnQ/IGJsb2NrCiAgLy8vIDsKICAvLy8KICAvLy8gY2F0Y2hQYXJ0OgogIC8vLyAgICdjYXRjaCcgJygnIGlkZW50aWZpZXIgKCcsJyBpZGVudGlmaWVyKT8gJyknCiAgLy8vIDsKICAvLy8KICAvLy8gZmluYWxseVBhcnQ6CiAgLy8vICAgJ2ZpbmFsbHknIGJsb2NrCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VUcnlTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIHRyeUtleXdvcmQgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCd0cnknLCB0cnlLZXl3b3JkKSk7CiAgICBsaXN0ZW5lci5iZWdpblRyeVN0YXRlbWVudCh0cnlLZXl3b3JkKTsKICAgIFRva2VuIGxhc3RDb25zdW1lZCA9IHBhcnNlQmxvY2sodHJ5S2V5d29yZCwgJ3RyeSBzdGF0ZW1lbnQnKTsKICAgIHRva2VuID0gbGFzdENvbnN1bWVkLm5leHQ7CiAgICBpbnQgY2F0Y2hDb3VudCA9IDA7CgogICAgU3RyaW5nIHZhbHVlID0gdG9rZW4uc3RyaW5nVmFsdWU7CiAgICB3aGlsZSAoaWRlbnRpY2FsKHZhbHVlLCAnY2F0Y2gnKSB8fCBpZGVudGljYWwodmFsdWUsICdvbicpKSB7CiAgICAgIGxpc3RlbmVyLmJlZ2luQ2F0Y2hDbGF1c2UodG9rZW4pOwogICAgICBUb2tlbiBvbktleXdvcmQgPSBudWxsOwogICAgICBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnb24nKSkgewogICAgICAgIC8vICdvbicgdHlwZSBjYXRjaFBhcnQ/CiAgICAgICAgb25LZXl3b3JkID0gdG9rZW47CiAgICAgICAgbGFzdENvbnN1bWVkID0gY29tcHV0ZVR5cGUodG9rZW4sIHRydWUpLmVuc3VyZVR5cGVOb3RWb2lkKHRva2VuLCB0aGlzKTsKICAgICAgICB0b2tlbiA9IGxhc3RDb25zdW1lZC5uZXh0OwogICAgICAgIHZhbHVlID0gdG9rZW4uc3RyaW5nVmFsdWU7CiAgICAgIH0KICAgICAgVG9rZW4gY2F0Y2hLZXl3b3JkID0gbnVsbDsKICAgICAgVG9rZW4gY29tbWEgPSBudWxsOwogICAgICBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnY2F0Y2gnKSkgewogICAgICAgIGNhdGNoS2V5d29yZCA9IHRva2VuOwoKICAgICAgICBUb2tlbiBvcGVuUGFyZW5zID0gY2F0Y2hLZXl3b3JkLm5leHQ7CiAgICAgICAgaWYgKCFvcHRpb25hbCgiKCIsIG9wZW5QYXJlbnMpKSB7CiAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG9wZW5QYXJlbnMsIGZhc3RhLm1lc3NhZ2VDYXRjaFN5bnRheCk7CiAgICAgICAgICBvcGVuUGFyZW5zID0gcmV3cml0ZXIuaW5zZXJ0UGFyZW5zKGNhdGNoS2V5d29yZCwgdHJ1ZSk7CiAgICAgICAgfQoKICAgICAgICBUb2tlbiBleGNlcHRpb25OYW1lID0gb3BlblBhcmVucy5uZXh0OwogICAgICAgIGlmIChleGNlcHRpb25OYW1lLmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTikgewogICAgICAgICAgZXhjZXB0aW9uTmFtZSA9IElkZW50aWZpZXJDb250ZXh0LmNhdGNoUGFyYW1ldGVyCiAgICAgICAgICAgICAgLmVuc3VyZUlkZW50aWZpZXIob3BlblBhcmVucywgdGhpcyk7CiAgICAgICAgfQoKICAgICAgICBpZiAob3B0aW9uYWwoIikiLCBleGNlcHRpb25OYW1lLm5leHQpKSB7CiAgICAgICAgICAvLyBPSzogYGNhdGNoIChpZGVudGlmaWVyKWAuCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbW1hID0gZXhjZXB0aW9uTmFtZS5uZXh0OwogICAgICAgICAgaWYgKCFvcHRpb25hbCgiLCIsIGNvbW1hKSkgewogICAgICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgICAgICBpZiAoIWV4Y2VwdGlvbk5hbWUuaXNTeW50aGV0aWMpIHsKICAgICAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKGNvbW1hLCBmYXN0YS5tZXNzYWdlQ2F0Y2hTeW50YXgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogQ29uc2lkZXIgaW5zZXJ0aW5nIGBvbmAgY2xhdXNlIGlmCiAgICAgICAgICAgIC8vIGV4Y2VwdGlvbk5hbWUgaXMgcHJlY2VkZWQgYnkgdHlwZSBhbmQgZm9sbG93ZWQgYnkgYSBjb21tYS4KICAgICAgICAgICAgLy8gVGhlbiB0aGlzCiAgICAgICAgICAgIC8vICAgfSBjYXRjaCAoRSBlLCB0KSB7CiAgICAgICAgICAgIC8vIHdpbGwgcmVjb3ZlciB0bwogICAgICAgICAgICAvLyAgIH0gb24gRSBjYXRjaCAoZSwgdCkgewogICAgICAgICAgICAvLyB3aXRoIGEgZGV0YWlsZWQgZXhwbGFuYXRpb24gZm9yIHRoZSB1c2VyIGluIHRoZSBlcnJvcgogICAgICAgICAgICAvLyBpbmRpY2F0aW5nIHdoYXQgdGhleSBzaG91bGQgZG8gdG8gZml4IHRoZSBjb2RlLgoKICAgICAgICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IENvbnNpZGVyIGluc2VydGluZyBzeW50aGV0aWMgaWRlbnRpZmllciBpZgogICAgICAgICAgICAvLyBleGNlcHRpb25OYW1lIGlzIGEgbm9uLXN5bnRoZXRpYyBpZGVudGlmaWVyIGZvbGxvd2VkIGJ5IGAuYC4KICAgICAgICAgICAgLy8gVGhlbiB0aGlzCiAgICAgICAgICAgIC8vICAgfSBjYXRjaCAoCiAgICAgICAgICAgIC8vICAgZS5mKCk7CiAgICAgICAgICAgIC8vIHdpbGwgcmVjb3ZlciB0bwogICAgICAgICAgICAvLyAgIH0gY2F0Y2ggKF9zXykge30KICAgICAgICAgICAgLy8gICBlLmYoKTsKICAgICAgICAgICAgLy8gcmF0aGVyIHRoYW4KICAgICAgICAgICAgLy8gICB9IGNhdGNoIChlKSB7fQogICAgICAgICAgICAvLyAgIF9zXy5mKCk7CgogICAgICAgICAgICBpZiAob3BlblBhcmVucy5lbmRHcm91cC5pc1N5bnRoZXRpYykgewogICAgICAgICAgICAgIC8vIFRoZSBzY2FubmVyIGRpZCBub3QgcGxhY2UgdGhlIHN5bnRoZXRpYyAnKScgY29ycmVjdGx5LgogICAgICAgICAgICAgIHJld3JpdGVyLm1vdmVTeW50aGV0aWMoZXhjZXB0aW9uTmFtZSwgb3BlblBhcmVucy5lbmRHcm91cCk7CiAgICAgICAgICAgICAgY29tbWEgPSBudWxsOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGNvbW1hID0KICAgICAgICAgICAgICAgICAgcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljVG9rZW4oZXhjZXB0aW9uTmFtZSwgVG9rZW5UeXBlLkNPTU1BKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGNvbW1hICE9IG51bGwpIHsKICAgICAgICAgICAgVG9rZW4gdHJhY2VOYW1lID0gY29tbWEubmV4dDsKICAgICAgICAgICAgaWYgKHRyYWNlTmFtZS5raW5kICE9IElERU5USUZJRVJfVE9LRU4pIHsKICAgICAgICAgICAgICB0cmFjZU5hbWUgPSBJZGVudGlmaWVyQ29udGV4dC5jYXRjaFBhcmFtZXRlcgogICAgICAgICAgICAgICAgICAuZW5zdXJlSWRlbnRpZmllcihjb21tYSwgdGhpcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFvcHRpb25hbCgiKSIsIHRyYWNlTmFtZS5uZXh0KSkgewogICAgICAgICAgICAgIC8vIFJlY292ZXJ5CiAgICAgICAgICAgICAgaWYgKCF0cmFjZU5hbWUuaXNTeW50aGV0aWMpIHsKICAgICAgICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgdHJhY2VOYW1lLm5leHQsIGZhc3RhLm1lc3NhZ2VDYXRjaFN5bnRheEV4dHJhUGFyYW1ldGVycyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChvcGVuUGFyZW5zLmVuZEdyb3VwLmlzU3ludGhldGljKSB7CiAgICAgICAgICAgICAgICAvLyBUaGUgc2Nhbm5lciBkaWQgbm90IHBsYWNlIHRoZSBzeW50aGV0aWMgJyknIGNvcnJlY3RseS4KICAgICAgICAgICAgICAgIHJld3JpdGVyLm1vdmVTeW50aGV0aWModHJhY2VOYW1lLCBvcGVuUGFyZW5zLmVuZEdyb3VwKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbGFzdENvbnN1bWVkID0gcGFyc2VGb3JtYWxQYXJhbWV0ZXJzKGNhdGNoS2V5d29yZCwgTWVtYmVyS2luZC5DYXRjaCk7CiAgICAgICAgdG9rZW4gPSBsYXN0Q29uc3VtZWQubmV4dDsKICAgICAgfQogICAgICBsaXN0ZW5lci5lbmRDYXRjaENsYXVzZSh0b2tlbik7CiAgICAgIGxhc3RDb25zdW1lZCA9IHBhcnNlQmxvY2sobGFzdENvbnN1bWVkLCAnY2F0Y2ggY2xhdXNlJyk7CiAgICAgIHRva2VuID0gbGFzdENvbnN1bWVkLm5leHQ7CiAgICAgICsrY2F0Y2hDb3VudDsKICAgICAgbGlzdGVuZXIuaGFuZGxlQ2F0Y2hCbG9jayhvbktleXdvcmQsIGNhdGNoS2V5d29yZCwgY29tbWEpOwogICAgICB2YWx1ZSA9IHRva2VuLnN0cmluZ1ZhbHVlOyAvLyB3aGlsZSBjb25kaXRpb24KICAgIH0KCiAgICBUb2tlbiBmaW5hbGx5S2V5d29yZCA9IG51bGw7CiAgICBpZiAob3B0aW9uYWwoJ2ZpbmFsbHknLCB0b2tlbikpIHsKICAgICAgZmluYWxseUtleXdvcmQgPSB0b2tlbjsKICAgICAgbGFzdENvbnN1bWVkID0gcGFyc2VCbG9jayh0b2tlbiwgJ2ZpbmFsbHkgY2xhdXNlJyk7CiAgICAgIHRva2VuID0gbGFzdENvbnN1bWVkLm5leHQ7CiAgICAgIGxpc3RlbmVyLmhhbmRsZUZpbmFsbHlCbG9jayhmaW5hbGx5S2V5d29yZCk7CiAgICB9IGVsc2UgewogICAgICBpZiAoY2F0Y2hDb3VudCA9PSAwKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0cnlLZXl3b3JkLCBmYXN0YS5tZXNzYWdlT25seVRyeSk7CiAgICAgIH0KICAgIH0KICAgIGxpc3RlbmVyLmVuZFRyeVN0YXRlbWVudChjYXRjaENvdW50LCB0cnlLZXl3b3JkLCBmaW5hbGx5S2V5d29yZCk7CiAgICByZXR1cm4gbGFzdENvbnN1bWVkOwogIH0KCiAgLy8vIGBgYAogIC8vLyBzd2l0Y2hTdGF0ZW1lbnQ6CiAgLy8vICAgJ3N3aXRjaCcgcGFyZW50aGVzaXplZEV4cHJlc3Npb24gc3dpdGNoQmxvY2sKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZVN3aXRjaFN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gc3dpdGNoS2V5d29yZCA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ3N3aXRjaCcsIHN3aXRjaEtleXdvcmQpKTsKICAgIGxpc3RlbmVyLmJlZ2luU3dpdGNoU3RhdGVtZW50KHN3aXRjaEtleXdvcmQpOwogICAgdG9rZW4gPSBlbnN1cmVQYXJlbnRoZXNpemVkQ29uZGl0aW9uKHN3aXRjaEtleXdvcmQpOwogICAgTG9vcFN0YXRlIHNhdmVkTG9vcFN0YXRlID0gbG9vcFN0YXRlOwogICAgaWYgKGxvb3BTdGF0ZSA9PSBMb29wU3RhdGUuT3V0c2lkZUxvb3ApIHsKICAgICAgbG9vcFN0YXRlID0gTG9vcFN0YXRlLkluc2lkZVN3aXRjaDsKICAgIH0KICAgIHRva2VuID0gcGFyc2VTd2l0Y2hCbG9jayh0b2tlbik7CiAgICBsb29wU3RhdGUgPSBzYXZlZExvb3BTdGF0ZTsKICAgIGxpc3RlbmVyLmVuZFN3aXRjaFN0YXRlbWVudChzd2l0Y2hLZXl3b3JkLCB0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIHN3aXRjaEJsb2NrOgogIC8vLyAgICd7JyBzd2l0Y2hDYXNlKiBkZWZhdWx0Q2FzZT8gJ30nCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VTd2l0Y2hCbG9jayhUb2tlbiB0b2tlbikgewogICAgVG9rZW4gYmVnaW5Td2l0Y2ggPSB0b2tlbiA9IGVuc3VyZUJsb2NrKHRva2VuLCBudWxsLCAnc3dpdGNoIHN0YXRlbWVudCcpOwogICAgbGlzdGVuZXIuYmVnaW5Td2l0Y2hCbG9jayhiZWdpblN3aXRjaCk7CiAgICBpbnQgY2FzZUNvdW50ID0gMDsKICAgIFRva2VuIGRlZmF1bHRLZXl3b3JkID0gbnVsbDsKICAgIFRva2VuIGNvbG9uQWZ0ZXJEZWZhdWx0ID0gbnVsbDsKICAgIHdoaWxlIChub3RFb2ZPclZhbHVlKCd9JywgdG9rZW4ubmV4dCkpIHsKICAgICAgVG9rZW4gYmVnaW5DYXNlID0gdG9rZW4ubmV4dDsKICAgICAgaW50IGV4cHJlc3Npb25Db3VudCA9IDA7CiAgICAgIGludCBsYWJlbENvdW50ID0gMDsKICAgICAgVG9rZW4gcGVlayA9IHBlZWtQYXN0TGFiZWxzKGJlZ2luQ2FzZSk7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgLy8gTG9vcCB1bnRpbCB3ZSBmaW5kIHNvbWV0aGluZyB0aGF0IGNhbid0IGJlIHBhcnQgb2YgYSBzd2l0Y2ggY2FzZS4KICAgICAgICBTdHJpbmcgdmFsdWUgPSBwZWVrLnN0cmluZ1ZhbHVlOwogICAgICAgIGlmIChpZGVudGljYWwodmFsdWUsICdkZWZhdWx0JykpIHsKICAgICAgICAgIHdoaWxlICghaWRlbnRpY2FsKHRva2VuLm5leHQsIHBlZWspKSB7CiAgICAgICAgICAgIHRva2VuID0gcGFyc2VMYWJlbCh0b2tlbik7CiAgICAgICAgICAgIGxhYmVsQ291bnQrKzsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChkZWZhdWx0S2V5d29yZCAhPSBudWxsKSB7CiAgICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgICB0b2tlbi5uZXh0LCBmYXN0YS5tZXNzYWdlU3dpdGNoSGFzTXVsdGlwbGVEZWZhdWx0cyk7CiAgICAgICAgICB9CiAgICAgICAgICBkZWZhdWx0S2V5d29yZCA9IHRva2VuLm5leHQ7CiAgICAgICAgICBjb2xvbkFmdGVyRGVmYXVsdCA9IHRva2VuID0gZW5zdXJlQ29sb24oZGVmYXVsdEtleXdvcmQpOwogICAgICAgICAgcGVlayA9IHRva2VuLm5leHQ7CiAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2Nhc2UnKSkgewogICAgICAgICAgd2hpbGUgKCFpZGVudGljYWwodG9rZW4ubmV4dCwgcGVlaykpIHsKICAgICAgICAgICAgdG9rZW4gPSBwYXJzZUxhYmVsKHRva2VuKTsKICAgICAgICAgICAgbGFiZWxDb3VudCsrOwogICAgICAgICAgfQogICAgICAgICAgVG9rZW4gY2FzZUtleXdvcmQgPSB0b2tlbi5uZXh0OwogICAgICAgICAgaWYgKGRlZmF1bHRLZXl3b3JkICE9IG51bGwpIHsKICAgICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICAgIGNhc2VLZXl3b3JkLCBmYXN0YS5tZXNzYWdlU3dpdGNoSGFzQ2FzZUFmdGVyRGVmYXVsdCk7CiAgICAgICAgICB9CiAgICAgICAgICBsaXN0ZW5lci5iZWdpbkNhc2VFeHByZXNzaW9uKGNhc2VLZXl3b3JkKTsKICAgICAgICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKGNhc2VLZXl3b3JkKTsKICAgICAgICAgIHRva2VuID0gZW5zdXJlQ29sb24odG9rZW4pOwogICAgICAgICAgbGlzdGVuZXIuZW5kQ2FzZUV4cHJlc3Npb24odG9rZW4pOwogICAgICAgICAgbGlzdGVuZXIuaGFuZGxlQ2FzZU1hdGNoKGNhc2VLZXl3b3JkLCB0b2tlbik7CiAgICAgICAgICBleHByZXNzaW9uQ291bnQrKzsKICAgICAgICAgIHBlZWsgPSBwZWVrUGFzdExhYmVscyh0b2tlbi5uZXh0KTsKICAgICAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb25Db3VudCA+IDApIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICBwZWVrLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkVG9rZW4ud2l0aEFyZ3VtZW50cygiY2FzZSIpKTsKICAgICAgICAgIFRva2VuIGVuZEdyb3VwID0gYmVnaW5Td2l0Y2guZW5kR3JvdXA7CiAgICAgICAgICB3aGlsZSAodG9rZW4ubmV4dCAhPSBlbmRHcm91cCkgewogICAgICAgICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICAgICAgICB9CiAgICAgICAgICBwZWVrID0gcGVla1Bhc3RMYWJlbHModG9rZW4ubmV4dCk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgdG9rZW4gPSBwYXJzZVN0YXRlbWVudHNJblN3aXRjaENhc2UodG9rZW4sIHBlZWssIGJlZ2luQ2FzZSwgbGFiZWxDb3VudCwKICAgICAgICAgIGV4cHJlc3Npb25Db3VudCwgZGVmYXVsdEtleXdvcmQsIGNvbG9uQWZ0ZXJEZWZhdWx0KTsKICAgICAgKytjYXNlQ291bnQ7CiAgICB9CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBsaXN0ZW5lci5lbmRTd2l0Y2hCbG9jayhjYXNlQ291bnQsIGJlZ2luU3dpdGNoLCB0b2tlbik7CiAgICBhc3NlcnQob3B0aW9uYWwoJ30nLCB0b2tlbikpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIFBlZWsgYWZ0ZXIgdGhlIGZvbGxvd2luZyBsYWJlbHMgKGlmIGFueSkuIFRoZSBmb2xsb3dpbmcgdG9rZW4KICAvLy8gaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGxhYmVscyBiZWxvbmcgdG8gYSBzdGF0ZW1lbnQgb3IgYQogIC8vLyBzd2l0Y2ggY2FzZS4KICBUb2tlbiBwZWVrUGFzdExhYmVscyhUb2tlbiB0b2tlbikgewogICAgd2hpbGUgKHRva2VuLmlzSWRlbnRpZmllciAmJiBvcHRpb25hbCgnOicsIHRva2VuLm5leHQpKSB7CiAgICAgIHRva2VuID0gdG9rZW4ubmV4dC5uZXh0OwogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIFBhcnNlIHN0YXRlbWVudHMgYWZ0ZXIgYSBzd2l0Y2ggYGNhc2U6YCBvciBgZGVmYXVsdDpgLgogIFRva2VuIHBhcnNlU3RhdGVtZW50c0luU3dpdGNoQ2FzZSgKICAgICAgVG9rZW4gdG9rZW4sCiAgICAgIFRva2VuIHBlZWssCiAgICAgIFRva2VuIGJlZ2luLAogICAgICBpbnQgbGFiZWxDb3VudCwKICAgICAgaW50IGV4cHJlc3Npb25Db3VudCwKICAgICAgVG9rZW4gZGVmYXVsdEtleXdvcmQsCiAgICAgIFRva2VuIGNvbG9uQWZ0ZXJEZWZhdWx0KSB7CiAgICBsaXN0ZW5lci5iZWdpblN3aXRjaENhc2UobGFiZWxDb3VudCwgZXhwcmVzc2lvbkNvdW50LCBiZWdpbik7CiAgICAvLyBGaW5hbGx5IHplcm8gb3IgbW9yZSBzdGF0ZW1lbnRzLgogICAgaW50IHN0YXRlbWVudENvdW50ID0gMDsKICAgIHdoaWxlICghaWRlbnRpY2FsKHRva2VuLm5leHQua2luZCwgRU9GX1RPS0VOKSkgewogICAgICBTdHJpbmcgdmFsdWUgPSBwZWVrLnN0cmluZ1ZhbHVlOwogICAgICBpZiAoKGlkZW50aWNhbCh2YWx1ZSwgJ2Nhc2UnKSkgfHwKICAgICAgICAgIChpZGVudGljYWwodmFsdWUsICdkZWZhdWx0JykpIHx8CiAgICAgICAgICAoKGlkZW50aWNhbCh2YWx1ZSwgJ30nKSkgJiYgKGlkZW50aWNhbCh0b2tlbi5uZXh0LCBwZWVrKSkpKSB7CiAgICAgICAgLy8gQSBsYWJlbCBqdXN0IGJlZm9yZSAifSIgd2lsbCBiZSBoYW5kbGVkIGFzIGEgc3RhdGVtZW50IGVycm9yLgogICAgICAgIGJyZWFrOwogICAgICB9IGVsc2UgewogICAgICAgIFRva2VuIHN0YXJ0VG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICAgIHRva2VuID0gcGFyc2VTdGF0ZW1lbnQodG9rZW4pOwogICAgICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIGlmIChpZGVudGljYWwobmV4dCwgc3RhcnRUb2tlbikpIHsKICAgICAgICAgIC8vIE5vIHByb2dyZXNzIHdhcyBtYWRlLCBzbyB3ZSByZXBvcnQgdGhlIGN1cnJlbnQgdG9rZW4gYXMgYmVpbmcKICAgICAgICAgIC8vIGludmFsaWQgYW5kIG1vdmUgZm9yd2FyZC4KICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgbmV4dCwgZmFzdGEudGVtcGxhdGVVbmV4cGVjdGVkVG9rZW4ud2l0aEFyZ3VtZW50cyhuZXh0KSk7CiAgICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgfQogICAgICAgICsrc3RhdGVtZW50Q291bnQ7CiAgICAgIH0KICAgICAgcGVlayA9IHBlZWtQYXN0TGFiZWxzKHRva2VuLm5leHQpOwogICAgfQogICAgbGlzdGVuZXIuZW5kU3dpdGNoQ2FzZShsYWJlbENvdW50LCBleHByZXNzaW9uQ291bnQsIGRlZmF1bHRLZXl3b3JkLAogICAgICAgIGNvbG9uQWZ0ZXJEZWZhdWx0LCBzdGF0ZW1lbnRDb3VudCwgYmVnaW4sIHRva2VuLm5leHQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBicmVha1N0YXRlbWVudDoKICAvLy8gICAnYnJlYWsnIGlkZW50aWZpZXI/ICc7JwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlQnJlYWtTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGJyZWFrS2V5d29yZCA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnYnJlYWsnLCBicmVha0tleXdvcmQpKTsKICAgIGJvb2wgaGFzVGFyZ2V0ID0gZmFsc2U7CiAgICBpZiAodG9rZW4ubmV4dC5pc0lkZW50aWZpZXIpIHsKICAgICAgdG9rZW4gPSBlbnN1cmVJZGVudGlmaWVyKHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC5sYWJlbFJlZmVyZW5jZSk7CiAgICAgIGhhc1RhcmdldCA9IHRydWU7CiAgICB9IGVsc2UgaWYgKCFpc0JyZWFrQWxsb3dlZCkgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKGJyZWFrS2V5d29yZCwgZmFzdGEubWVzc2FnZUJyZWFrT3V0c2lkZU9mTG9vcCk7CiAgICB9CiAgICB0b2tlbiA9IGVuc3VyZVNlbWljb2xvbih0b2tlbik7CiAgICBsaXN0ZW5lci5oYW5kbGVCcmVha1N0YXRlbWVudChoYXNUYXJnZXQsIGJyZWFrS2V5d29yZCwgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBhc3NlcnRpb246CiAgLy8vICAgJ2Fzc2VydCcgJygnIGV4cHJlc3Npb24gKCcsJyBleHByZXNzaW9uKT8gJywnPyAnKScKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUFzc2VydChUb2tlbiB0b2tlbiwgQXNzZXJ0IGtpbmQpIHsKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnYXNzZXJ0JywgdG9rZW4pKTsKICAgIGxpc3RlbmVyLmJlZ2luQXNzZXJ0KHRva2VuLCBraW5kKTsKICAgIFRva2VuIGFzc2VydEtleXdvcmQgPSB0b2tlbjsKICAgIFRva2VuIGxlZnRQYXJlbnRoZXNpcyA9IHRva2VuLm5leHQ7CiAgICBpZiAoIW9wdGlvbmFsKCcoJywgbGVmdFBhcmVudGhlc2lzKSkgewogICAgICAvLyBSZWNvdmVyeQogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgbGVmdFBhcmVudGhlc2lzLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJygnKSk7CiAgICAgIGxlZnRQYXJlbnRoZXNpcyA9IHJld3JpdGVyLmluc2VydFBhcmVucyh0b2tlbiwgdHJ1ZSk7CiAgICB9CiAgICB0b2tlbiA9IGxlZnRQYXJlbnRoZXNpczsKICAgIFRva2VuIGNvbW1hVG9rZW4gPSBudWxsOwogICAgYm9vbCBvbGQgPSBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnM7CiAgICBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnMgPSB0cnVlOwoKICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKHRva2VuKTsKICAgIGlmIChvcHRpb25hbCgnLCcsIHRva2VuLm5leHQpKSB7CiAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKCFvcHRpb25hbCgnKScsIHRva2VuLm5leHQpKSB7CiAgICAgICAgY29tbWFUb2tlbiA9IHRva2VuOwogICAgICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKHRva2VuKTsKICAgICAgICBpZiAob3B0aW9uYWwoJywnLCB0b2tlbi5uZXh0KSkgewogICAgICAgICAgLy8gVHJhaWxpbmcgY29tbWEgaXMgaWdub3JlZC4KICAgICAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBUb2tlbiBlbmRHcm91cCA9IGxlZnRQYXJlbnRoZXNpcy5lbmRHcm91cDsKICAgIGlmICh0b2tlbi5uZXh0ID09IGVuZEdyb3VwKSB7CiAgICAgIHRva2VuID0gZW5kR3JvdXA7CiAgICB9IGVsc2UgewogICAgICAvLyBSZWNvdmVyeQogICAgICBpZiAoZW5kR3JvdXAuaXNTeW50aGV0aWMpIHsKICAgICAgICAvLyBUaGUgc2Nhbm5lciBkaWQgbm90IHBsYWNlIHRoZSBzeW50aGV0aWMgJyknIGNvcnJlY3RseSwgc28gbW92ZSBpdC4KICAgICAgICB0b2tlbiA9IHJld3JpdGVyLm1vdmVTeW50aGV0aWModG9rZW4sIGVuZEdyb3VwKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgICB0b2tlbi5uZXh0LCBmYXN0YS50ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbik7CiAgICAgICAgdG9rZW4gPSBlbmRHcm91cDsKICAgICAgfQogICAgfQoKICAgIGFzc2VydChvcHRpb25hbCgnKScsIHRva2VuKSk7CiAgICBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnMgPSBvbGQ7CiAgICBpZiAoa2luZCA9PSBBc3NlcnQuRXhwcmVzc2lvbikgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKGFzc2VydEtleXdvcmQsIGZhc3RhLm1lc3NhZ2VBc3NlcnRBc0V4cHJlc3Npb24pOwogICAgfSBlbHNlIGlmIChraW5kID09IEFzc2VydC5TdGF0ZW1lbnQpIHsKICAgICAgZW5zdXJlU2VtaWNvbG9uKHRva2VuKTsKICAgIH0KICAgIGxpc3RlbmVyLmVuZEFzc2VydCgKICAgICAgICBhc3NlcnRLZXl3b3JkLCBraW5kLCBsZWZ0UGFyZW50aGVzaXMsIGNvbW1hVG9rZW4sIHRva2VuLm5leHQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBhc3NlcnRTdGF0ZW1lbnQ6CiAgLy8vICAgYXNzZXJ0aW9uICc7JwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlQXNzZXJ0U3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2Fzc2VydCcsIHRva2VuLm5leHQpKTsKICAgIC8vIHBhcnNlQXNzZXJ0IGVuc3VyZXMgdGhhdCB0aGVyZSBpcyBhIHRyYWlsaW5nIHNlbWljb2xvbi4KICAgIHJldHVybiBwYXJzZUFzc2VydCh0b2tlbiwgQXNzZXJ0LlN0YXRlbWVudCkubmV4dDsKICB9CgogIC8vLyBgYGAKICAvLy8gY29udGludWVTdGF0ZW1lbnQ6CiAgLy8vICAgJ2NvbnRpbnVlJyBpZGVudGlmaWVyPyAnOycKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUNvbnRpbnVlU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBjb250aW51ZUtleXdvcmQgPSB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2NvbnRpbnVlJywgY29udGludWVLZXl3b3JkKSk7CiAgICBib29sIGhhc1RhcmdldCA9IGZhbHNlOwogICAgaWYgKHRva2VuLm5leHQuaXNJZGVudGlmaWVyKSB7CiAgICAgIHRva2VuID0gZW5zdXJlSWRlbnRpZmllcih0b2tlbiwgSWRlbnRpZmllckNvbnRleHQubGFiZWxSZWZlcmVuY2UpOwogICAgICBoYXNUYXJnZXQgPSB0cnVlOwogICAgICBpZiAoIWlzQ29udGludWVXaXRoTGFiZWxBbGxvd2VkKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgY29udGludWVLZXl3b3JkLCBmYXN0YS5tZXNzYWdlQ29udGludWVPdXRzaWRlT2ZMb29wKTsKICAgICAgfQogICAgfSBlbHNlIGlmICghaXNDb250aW51ZUFsbG93ZWQpIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgIGNvbnRpbnVlS2V5d29yZCwKICAgICAgICAgIGxvb3BTdGF0ZSA9PSBMb29wU3RhdGUuSW5zaWRlU3dpdGNoCiAgICAgICAgICAgICAgPyBmYXN0YS5tZXNzYWdlQ29udGludWVXaXRob3V0TGFiZWxJbkNhc2UKICAgICAgICAgICAgICA6IGZhc3RhLm1lc3NhZ2VDb250aW51ZU91dHNpZGVPZkxvb3ApOwogICAgfQogICAgdG9rZW4gPSBlbnN1cmVTZW1pY29sb24odG9rZW4pOwogICAgbGlzdGVuZXIuaGFuZGxlQ29udGludWVTdGF0ZW1lbnQoaGFzVGFyZ2V0LCBjb250aW51ZUtleXdvcmQsIHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gZW1wdHlTdGF0ZW1lbnQ6CiAgLy8vICAgJzsnCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VFbXB0eVN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCc7JywgdG9rZW4pKTsKICAgIGxpc3RlbmVyLmhhbmRsZUVtcHR5U3RhdGVtZW50KHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBHaXZlbiBhIHRva2VuIChbYmVmb3JlVG9rZW5dKSB0aGF0IGlzIGtub3duIHRvIGJlIGJlZm9yZSBhbm90aGVyIFt0b2tlbl0sCiAgLy8vIHJldHVybiB0aGUgdG9rZW4gdGhhdCBpcyBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIFt0b2tlbl0uCiAgVG9rZW4gcHJldmlvdXNUb2tlbihUb2tlbiBiZWZvcmVUb2tlbiwgVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSBiZWZvcmVUb2tlbi5uZXh0OwogICAgd2hpbGUgKG5leHQgIT0gdG9rZW4gJiYgbmV4dCAhPSBiZWZvcmVUb2tlbikgewogICAgICBiZWZvcmVUb2tlbiA9IG5leHQ7CiAgICAgIG5leHQgPSBiZWZvcmVUb2tlbi5uZXh0OwogICAgfQogICAgcmV0dXJuIGJlZm9yZVRva2VuOwogIH0KCiAgLy8vIFJlY292ZXIgZnJvbSBmaW5kaW5nIGFuIG9wZXJhdG9yIGRlY2xhcmF0aW9uIG1pc3NpbmcgdGhlIGBvcGVyYXRvcmAKICAvLy8ga2V5d29yZC4gVGhlIG1ldGFkYXRhIGZvciB0aGUgbWVtYmVyLCBpZiBhbnksIGhhcyBhbHJlYWR5IGJlZW4gcGFyc2VkCiAgLy8vIChhbmQgZXZlbnRzIGhhdmUgYWxyZWFkeSBiZWVuIGdlbmVyYXRlZCkuCiAgVG9rZW4gcGFyc2VJbnZhbGlkT3BlcmF0b3JEZWNsYXJhdGlvbigKICAgICAgVG9rZW4gYmVmb3JlU3RhcnQsCiAgICAgIFRva2VuIGV4dGVybmFsVG9rZW4sCiAgICAgIFRva2VuIHN0YXRpY1Rva2VuLAogICAgICBUb2tlbiBjb3ZhcmlhbnRUb2tlbiwKICAgICAgVG9rZW4gbGF0ZVRva2VuLAogICAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3QsCiAgICAgIFRva2VuIGJlZm9yZVR5cGUsCiAgICAgIERlY2xhcmF0aW9uS2luZCBraW5kKSB7CiAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IGNvbXB1dGVUeXBlKGJlZm9yZVR5cGUsIHRydWUsIHRydWUpOwoKICAgIFRva2VuIGJlZm9yZU5hbWUgPSB0eXBlSW5mby5za2lwVHlwZShiZWZvcmVUeXBlKTsKICAgIFRva2VuIG5leHQgPSBiZWZvcmVOYW1lLm5leHQ7CgogICAgaWYgKG9wdGlvbmFsKCdvcGVyYXRvcicsIG5leHQpKSB7CiAgICAgIG5leHQgPSBuZXh0Lm5leHQ7CiAgICB9IGVsc2UgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VNaXNzaW5nT3BlcmF0b3JLZXl3b3JkKTsKICAgICAgcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljS2V5d29yZChiZWZvcmVOYW1lLCBLZXl3b3JkLk9QRVJBVE9SKTsKICAgIH0KCiAgICBhc3NlcnQoKG5leHQuaXNPcGVyYXRvciAmJiBuZXh0LmVuZEdyb3VwID09IG51bGwpIHx8CiAgICAgICAgb3B0aW9uYWwoJz09PScsIG5leHQpIHx8CiAgICAgICAgb3B0aW9uYWwoJyE9PScsIG5leHQpKTsKCiAgICBUb2tlbiB0b2tlbiA9IHBhcnNlTWV0aG9kKAogICAgICAgIGJlZm9yZVN0YXJ0LAogICAgICAgIGV4dGVybmFsVG9rZW4sCiAgICAgICAgc3RhdGljVG9rZW4sCiAgICAgICAgY292YXJpYW50VG9rZW4sCiAgICAgICAgbGF0ZVRva2VuLAogICAgICAgIHZhckZpbmFsT3JDb25zdCwKICAgICAgICBiZWZvcmVUeXBlLAogICAgICAgIHR5cGVJbmZvLAogICAgICAgIG51bGwsCiAgICAgICAgYmVmb3JlTmFtZS5uZXh0LAogICAgICAgIGtpbmQsCiAgICAgICAgbnVsbCk7CiAgICBsaXN0ZW5lci5lbmRNZW1iZXIoKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBSZWNvdmVyIGZyb20gZmluZGluZyBhbiBpbnZhbGlkIGNsYXNzIG1lbWJlci4gVGhlIG1ldGFkYXRhIGZvciB0aGUgbWVtYmVyLAogIC8vLyBpZiBhbnksIGhhcyBhbHJlYWR5IGJlZW4gcGFyc2VkIChhbmQgZXZlbnRzIGhhdmUgYWxyZWFkeSBiZWVuIGdlbmVyYXRlZCkuCiAgLy8vIFRoZSBtZW1iZXIgd2FzIGV4cGVjdGVkIHRvIHN0YXJ0IHdpdGggdGhlIHRva2VuIGFmdGVyIFt0b2tlbl0uCiAgVG9rZW4gcmVjb3ZlckZyb21JbnZhbGlkTWVtYmVyKAogICAgICBUb2tlbiB0b2tlbiwKICAgICAgVG9rZW4gYmVmb3JlU3RhcnQsCiAgICAgIFRva2VuIGV4dGVybmFsVG9rZW4sCiAgICAgIFRva2VuIHN0YXRpY1Rva2VuLAogICAgICBUb2tlbiBjb3ZhcmlhbnRUb2tlbiwKICAgICAgVG9rZW4gbGF0ZVRva2VuLAogICAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3QsCiAgICAgIFRva2VuIGJlZm9yZVR5cGUsCiAgICAgIFR5cGVJbmZvIHR5cGVJbmZvLAogICAgICBUb2tlbiBnZXRPclNldCwKICAgICAgRGVjbGFyYXRpb25LaW5kIGtpbmQsCiAgICAgIFN0cmluZyBlbmNsb3NpbmdEZWNsYXJhdGlvbk5hbWUpIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgU3RyaW5nIHZhbHVlID0gbmV4dC5zdHJpbmdWYWx1ZTsKCiAgICBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnY2xhc3MnKSkgewogICAgICByZXR1cm4gcmVwb3J0QW5kU2tpcENsYXNzSW5DbGFzcyhuZXh0KTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnZW51bScpKSB7CiAgICAgIHJldHVybiByZXBvcnRBbmRTa2lwRW51bUluQ2xhc3MobmV4dCk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ3R5cGVkZWYnKSkgewogICAgICByZXR1cm4gcmVwb3J0QW5kU2tpcFR5cGVkZWZJbkNsYXNzKG5leHQpOwogICAgfSBlbHNlIGlmIChuZXh0LmlzT3BlcmF0b3IgJiYgbmV4dC5lbmRHcm91cCA9PSBudWxsKSB7CiAgICAgIHJldHVybiBwYXJzZUludmFsaWRPcGVyYXRvckRlY2xhcmF0aW9uKAogICAgICAgICAgYmVmb3JlU3RhcnQsCiAgICAgICAgICBleHRlcm5hbFRva2VuLAogICAgICAgICAgc3RhdGljVG9rZW4sCiAgICAgICAgICBjb3ZhcmlhbnRUb2tlbiwKICAgICAgICAgIGxhdGVUb2tlbiwKICAgICAgICAgIHZhckZpbmFsT3JDb25zdCwKICAgICAgICAgIGJlZm9yZVR5cGUsCiAgICAgICAgICBraW5kKTsKICAgIH0KCiAgICBpZiAoZ2V0T3JTZXQgIT0gbnVsbCB8fAogICAgICAgIGlkZW50aWNhbCh2YWx1ZSwgJygnKSB8fAogICAgICAgIGlkZW50aWNhbCh2YWx1ZSwgJz0+JykgfHwKICAgICAgICBpZGVudGljYWwodmFsdWUsICd7JykpIHsKICAgICAgdG9rZW4gPSBwYXJzZU1ldGhvZCgKICAgICAgICAgIGJlZm9yZVN0YXJ0LAogICAgICAgICAgZXh0ZXJuYWxUb2tlbiwKICAgICAgICAgIHN0YXRpY1Rva2VuLAogICAgICAgICAgY292YXJpYW50VG9rZW4sCiAgICAgICAgICBsYXRlVG9rZW4sCiAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QsCiAgICAgICAgICBiZWZvcmVUeXBlLAogICAgICAgICAgdHlwZUluZm8sCiAgICAgICAgICBnZXRPclNldCwKICAgICAgICAgIHRva2VuLm5leHQsCiAgICAgICAgICBraW5kLAogICAgICAgICAgZW5jbG9zaW5nRGVjbGFyYXRpb25OYW1lKTsKICAgIH0gZWxzZSBpZiAodG9rZW4gPT0gYmVmb3JlU3RhcnQpIHsKICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IFByb3ZpZGUgYSBtb3JlIHNwZWNpZmljIGVycm9yIG1lc3NhZ2UgZm9yIGV4dHJhICc7Jy4KICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbihuZXh0LCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQ2xhc3NNZW1iZXIpOwogICAgICBsaXN0ZW5lci5oYW5kbGVJbnZhbGlkTWVtYmVyKG5leHQpOwogICAgICBpZiAoIWlkZW50aWNhbCh2YWx1ZSwgJ30nKSkgewogICAgICAgIC8vIEVuc3VyZSB3ZSBtYWtlIHByb2dyZXNzLgogICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdG9rZW4gPSBwYXJzZUZpZWxkcygKICAgICAgICAgIGJlZm9yZVN0YXJ0LAogICAgICAgICAgZXh0ZXJuYWxUb2tlbiwKICAgICAgICAgIHN0YXRpY1Rva2VuLAogICAgICAgICAgY292YXJpYW50VG9rZW4sCiAgICAgICAgICBsYXRlVG9rZW4sCiAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QsCiAgICAgICAgICBiZWZvcmVUeXBlLAogICAgICAgICAgdHlwZUluZm8sCiAgICAgICAgICB0b2tlbi5uZXh0LAogICAgICAgICAga2luZCk7CiAgICB9CgogICAgbGlzdGVuZXIuZW5kTWVtYmVyKCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gUmVwb3J0IHRoYXQgdGhlIG5lc3RpbmcgZGVwdGggb2YgdGhlIGNvZGUgYmVpbmcgcGFyc2VkIGlzIHRvbyBsYXJnZSBmb3IKICAvLy8gdGhlIHBhcnNlciB0byBzYWZlbHkgaGFuZGxlLiBSZXR1cm4gdGhlIG5leHQgYH1gIG9yIEVPRi4KICBUb2tlbiByZWNvdmVyRnJvbVN0YWNrT3ZlcmZsb3coVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlU3RhY2tPdmVyZmxvdyk7CiAgICBuZXh0ID0gcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljVG9rZW4odG9rZW4sIFRva2VuVHlwZS5TRU1JQ09MT04pOwogICAgbGlzdGVuZXIuaGFuZGxlRW1wdHlTdGF0ZW1lbnQobmV4dCk7CgogICAgd2hpbGUgKG5vdEVvZk9yVmFsdWUoJ30nLCBuZXh0KSkgewogICAgICB0b2tlbiA9IG5leHQ7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgdm9pZCByZXBvcnRSZWNvdmVyYWJsZUVycm9yKFRva2VuIHRva2VuLCBNZXNzYWdlIG1lc3NhZ2UpIHsKICAgIC8vIEZpbmQgYSBub24tc3ludGhldGljIHRva2VuIG9uIHdoaWNoIHRvIHJlcG9ydCB0aGUgZXJyb3IuCiAgICB0b2tlbiA9IGZpbmROb25aZXJvTGVuZ3RoVG9rZW4odG9rZW4pOwogICAgbGlzdGVuZXIuaGFuZGxlUmVjb3ZlcmFibGVFcnJvcihtZXNzYWdlLCB0b2tlbiwgdG9rZW4pOwogIH0KCiAgdm9pZCByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICBUb2tlbiB0b2tlbiwgVGVtcGxhdGU8X01lc3NhZ2VXaXRoQXJndW1lbnQ8VG9rZW4+PiB0ZW1wbGF0ZSkgewogICAgLy8gRmluZCBhIG5vbi1zeW50aGV0aWMgdG9rZW4gb24gd2hpY2ggdG8gcmVwb3J0IHRoZSBlcnJvci4KICAgIHRva2VuID0gZmluZE5vblplcm9MZW5ndGhUb2tlbih0b2tlbik7CiAgICBsaXN0ZW5lci5oYW5kbGVSZWNvdmVyYWJsZUVycm9yKAogICAgICAgIHRlbXBsYXRlLndpdGhBcmd1bWVudHModG9rZW4pLCB0b2tlbiwgdG9rZW4pOwogIH0KCiAgVG9rZW4gcmVwb3J0QWxsRXJyb3JUb2tlbnMoVG9rZW4gdG9rZW4pIHsKICAgIHdoaWxlICh0b2tlbiBpcyBFcnJvclRva2VuKSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZUVycm9yVG9rZW4odG9rZW4pOwogICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBza2lwRXJyb3JUb2tlbnMoVG9rZW4gdG9rZW4pIHsKICAgIHdoaWxlICh0b2tlbiBpcyBFcnJvclRva2VuKSB7CiAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlSW52YWxpZFRvcExldmVsRGVjbGFyYXRpb24oVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICBuZXh0LAogICAgICAgIG9wdGlvbmFsKCc7JywgbmV4dCkKICAgICAgICAgICAgPyBmYXN0YS50ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbgogICAgICAgICAgICA6IGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWREZWNsYXJhdGlvbik7CiAgICBpZiAob3B0aW9uYWwoJ3snLCBuZXh0KSkgewogICAgICBuZXh0ID0gcGFyc2VJbnZhbGlkQmxvY2sodG9rZW4pOwogICAgfQogICAgbGlzdGVuZXIuaGFuZGxlSW52YWxpZFRvcExldmVsRGVjbGFyYXRpb24obmV4dCk7CiAgICByZXR1cm4gbmV4dDsKICB9CgogIFRva2VuIHJlcG9ydEFuZFNraXBDbGFzc0luQ2xhc3MoVG9rZW4gdG9rZW4pIHsKICAgIGFzc2VydChvcHRpb25hbCgnY2xhc3MnLCB0b2tlbikpOwogICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0b2tlbiwgZmFzdGEubWVzc2FnZUNsYXNzSW5DbGFzcyk7CiAgICBsaXN0ZW5lci5oYW5kbGVJbnZhbGlkTWVtYmVyKHRva2VuKTsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgLy8gSWYgdGhlIGRlY2xhcmF0aW9uIGFwcGVhcnMgdG8gYmUgYSB2YWxpZCBjbGFzcyBkZWNsYXJhdGlvbgogICAgLy8gdGhlbiBza2lwIHRoZSBlbnRpcmUgZGVjbGFyYXRpb24gc28gdGhhdCB3ZSBvbmx5IGdlbmVyYXRlIHRoZSBvbmUKICAgIC8vIGVycm9yIChhYm92ZSkgcmF0aGVyIHRoYW4gYSBwbGV0aG9yYSBvZiB1bmhlbHBmdWwgZXJyb3JzLgogICAgaWYgKG5leHQuaXNJZGVudGlmaWVyKSB7CiAgICAgIC8vIHNraXAgY2xhc3MgbmFtZQogICAgICB0b2tlbiA9IG5leHQ7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogY29uc2lkZXIgcGFyc2luZyAoc2tpcHBpbmcpIHRoZSBjbGFzcyBoZWFkZXIKICAgICAgLy8gd2l0aCBhIHJlY292ZXJ5IGxpc3RlbmVyIHNvIHRoYXQgbm8gZXZlbnRzIGFyZSBnZW5lcmF0ZWQKICAgICAgaWYgKG9wdGlvbmFsKCd7JywgbmV4dCkgJiYgbmV4dC5lbmRHcm91cCAhPSBudWxsKSB7CiAgICAgICAgLy8gc2tpcCBjbGFzcyBib2R5CiAgICAgICAgdG9rZW4gPSBuZXh0LmVuZEdyb3VwOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiByZXBvcnRBbmRTa2lwRW51bUluQ2xhc3MoVG9rZW4gdG9rZW4pIHsKICAgIGFzc2VydChvcHRpb25hbCgnZW51bScsIHRva2VuKSk7CiAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKHRva2VuLCBmYXN0YS5tZXNzYWdlRW51bUluQ2xhc3MpOwogICAgbGlzdGVuZXIuaGFuZGxlSW52YWxpZE1lbWJlcih0b2tlbik7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIC8vIElmIHRoZSBkZWNsYXJhdGlvbiBhcHBlYXJzIHRvIGJlIGEgdmFsaWQgZW51bSBkZWNsYXJhdGlvbgogICAgLy8gdGhlbiBza2lwIHRoZSBlbnRpcmUgZGVjbGFyYXRpb24gc28gdGhhdCB3ZSBvbmx5IGdlbmVyYXRlIHRoZSBvbmUKICAgIC8vIGVycm9yIChhYm92ZSkgcmF0aGVyIHRoYW4gYSBwbGV0aG9yYSBvZiB1bmhlbHBmdWwgZXJyb3JzLgogICAgaWYgKG5leHQuaXNJZGVudGlmaWVyKSB7CiAgICAgIC8vIHNraXAgZW51bSBuYW1lCiAgICAgIHRva2VuID0gbmV4dDsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIGlmIChvcHRpb25hbCgneycsIG5leHQpICYmIG5leHQuZW5kR3JvdXAgIT0gbnVsbCkgewogICAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBDb25zaWRlciByZXBsYWNpbmcgdGhpcyBgc2tpcCBlbnVtYCBmdW5jdGlvbmFsaXR5CiAgICAgICAgLy8gd2l0aCBzb21ldGhpbmcgdGhhdCBjYW4gcGFyc2UgYW5kIHJlc29sdmUgdGhlIGRlY2xhcmF0aW9uCiAgICAgICAgLy8gZXZlbiB0aG91Z2ggaXQgaXMgaW4gYSBjbGFzcyBjb250ZXh0CiAgICAgICAgdG9rZW4gPSBuZXh0LmVuZEdyb3VwOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiByZXBvcnRBbmRTa2lwVHlwZWRlZkluQ2xhc3MoVG9rZW4gdG9rZW4pIHsKICAgIGFzc2VydChvcHRpb25hbCgndHlwZWRlZicsIHRva2VuKSk7CiAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKHRva2VuLCBmYXN0YS5tZXNzYWdlVHlwZWRlZkluQ2xhc3MpOwogICAgbGlzdGVuZXIuaGFuZGxlSW52YWxpZE1lbWJlcih0b2tlbik7CiAgICAvLyBUT0RPKGJyaWFud2lsa2Vyc29uKTogSWYgdGhlIGRlY2xhcmF0aW9uIGFwcGVhcnMgdG8gYmUgYSB2YWxpZCB0eXBlZGVmCiAgICAvLyB0aGVuIHNraXAgdGhlIGVudGlyZSBkZWNsYXJhdGlvbiBzbyB0aGF0IHdlIGdlbmVyYXRlIGEgc2luZ2xlIGVycm9yCiAgICAvLyAoYWJvdmUpIHJhdGhlciB0aGFuIG1hbnkgdW5oZWxwZnVsIGVycm9ycy4KICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBDcmVhdGUgYSBzaG9ydCB0b2tlbiBjaGFpbiBmcm9tIHRoZSBbYmVnaW5Ub2tlbl0gYW5kIFtlbmRUb2tlbl0gYW5kIHJldHVybgogIC8vLyB0aGUgW2JlZ2luVG9rZW5dLgogIFRva2VuIGxpbmsoQmVnaW5Ub2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgYmVnaW5Ub2tlbi5zZXROZXh0KGVuZFRva2VuKTsKICAgIGJlZ2luVG9rZW4uZW5kR3JvdXAgPSBlbmRUb2tlbjsKICAgIHJldHVybiBiZWdpblRva2VuOwogIH0KCiAgLy8vIENyZWF0ZSBhbmQgcmV0dXJuIGEgdG9rZW4gd2hvc2UgbmV4dCB0b2tlbiBpcyB0aGUgZ2l2ZW4gW3Rva2VuXS4KICBUb2tlbiBzeW50aGV0aWNQcmV2aW91c1Rva2VuKFRva2VuIHRva2VuKSB7CiAgICAvLyBSZXR1cm4gdGhlIHByZXZpb3VzIHRva2VuIGlmIHRoZXJlIGlzIG9uZSBzbyB0aGF0IGFueSB0b2tlbiBpbnNlcnRlZAogICAgLy8gYmVmb3JlIGB0b2tlbmAgd2lsbCBiZSBwcm9wZXJseSBpbnNlcnRlZCBpbnRvIHRoZSB0b2tlbiBzdHJlYW0uCiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogcmVtb3ZlIHRoaXMgb25jZSBhbGwgbWV0aG9kcyBoYXZlIGJlZW4gY29udmVydGVkIHRvCiAgICAvLyB1c2UgYW5kIHJldHVybiB0aGUgbGFzdCB0b2tlbiBjb25zdW1lZCBhbmQgdGhlIGBwcmV2aW91c2AgZmllbGQKICAgIC8vIGhhcyBiZWVuIHJlbW92ZWQuCiAgICBpZiAodG9rZW4ucHJldmlvdXMgIT0gbnVsbCkgewogICAgICByZXR1cm4gdG9rZW4ucHJldmlvdXM7CiAgICB9CiAgICBUb2tlbiBiZWZvcmUgPSBuZXcgVG9rZW4uZW9mKC0xKTsKICAgIGJlZm9yZS5uZXh0ID0gdG9rZW47CiAgICByZXR1cm4gYmVmb3JlOwogIH0KCiAgLy8vIFJldHVybiB0aGUgZmlyc3QgZGFydGRvYyBjb21tZW50IHRva2VuIHByZWNlZGluZyB0aGUgZ2l2ZW4gdG9rZW4KICAvLy8gb3IgYG51bGxgIGlmIG5vIGRhcnRkb2MgdG9rZW4gaXMgZm91bmQuCiAgVG9rZW4gZmluZERhcnREb2MoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGNvbW1lbnRzID0gdG9rZW4ucHJlY2VkaW5nQ29tbWVudHM7CiAgICBUb2tlbiBkYXJ0ZG9jID0gbnVsbDsKICAgIGJvb2wgaXNNdWx0aWxpbmUgPSBmYWxzZTsKICAgIHdoaWxlIChjb21tZW50cyAhPSBudWxsKSB7CiAgICAgIFN0cmluZyBsZXhlbWUgPSBjb21tZW50cy5sZXhlbWU7CiAgICAgIGlmIChsZXhlbWUuc3RhcnRzV2l0aCgnLy8vJykpIHsKICAgICAgICBpZiAoIWlzTXVsdGlsaW5lKSB7CiAgICAgICAgICBkYXJ0ZG9jID0gY29tbWVudHM7CiAgICAgICAgICBpc011bHRpbGluZSA9IHRydWU7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGxleGVtZS5zdGFydHNXaXRoKCcvKionKSkgewogICAgICAgIGRhcnRkb2MgPSBjb21tZW50czsKICAgICAgICBpc011bHRpbGluZSA9IGZhbHNlOwogICAgICB9CiAgICAgIGNvbW1lbnRzID0gY29tbWVudHMubmV4dDsKICAgIH0KICAgIHJldHVybiBkYXJ0ZG9jOwogIH0KCiAgLy8vIFBhcnNlIHRoZSBjb21tZW50IHJlZmVyZW5jZXMgaW4gYSBzZXF1ZW5jZSBvZiBjb21tZW50IHRva2VucwogIC8vLyB3aGVyZSBbZGFydGRvY10gKG5vdCBudWxsKSBpcyB0aGUgZmlyc3QgdG9rZW4gaW4gdGhlIHNlcXVlbmNlLgogIC8vLyBSZXR1cm4gdGhlIG51bWJlciBvZiBjb21tZW50IHJlZmVyZW5jZXMgcGFyc2VkLgogIGludCBwYXJzZUNvbW1lbnRSZWZlcmVuY2VzKFRva2VuIGRhcnRkb2MpIHsKICAgIHJldHVybiBkYXJ0ZG9jLmxleGVtZS5zdGFydHNXaXRoKCcvLy8nKQogICAgICAgID8gcGFyc2VSZWZlcmVuY2VzSW5TaW5nbGVMaW5lQ29tbWVudHMoZGFydGRvYykKICAgICAgICA6IHBhcnNlUmVmZXJlbmNlc0luTXVsdGlMaW5lQ29tbWVudChkYXJ0ZG9jKTsKICB9CgogIC8vLyBQYXJzZSB0aGUgY29tbWVudCByZWZlcmVuY2VzIGluIGEgbXVsdGktbGluZSBjb21tZW50IHRva2VuLgogIC8vLyBSZXR1cm4gdGhlIG51bWJlciBvZiBjb21tZW50IHJlZmVyZW5jZXMgcGFyc2VkLgogIGludCBwYXJzZVJlZmVyZW5jZXNJbk11bHRpTGluZUNvbW1lbnQoVG9rZW4gbXVsdGlMaW5lRG9jKSB7CiAgICBTdHJpbmcgY29tbWVudCA9IG11bHRpTGluZURvYy5sZXhlbWU7CiAgICBhc3NlcnQoY29tbWVudC5zdGFydHNXaXRoKCcvKionKSk7CiAgICBpbnQgY291bnQgPSAwOwogICAgaW50IGxlbmd0aCA9IGNvbW1lbnQubGVuZ3RoOwogICAgaW50IHN0YXJ0ID0gMzsKICAgIGJvb2wgaW5Db2RlQmxvY2sgPSBmYWxzZTsKICAgIGludCBjb2RlQmxvY2sgPSBjb21tZW50LmluZGV4T2YoJ2BgYCcsIDMpOwogICAgaWYgKGNvZGVCbG9jayA9PSAtMSkgewogICAgICBjb2RlQmxvY2sgPSBsZW5ndGg7CiAgICB9CiAgICB3aGlsZSAoc3RhcnQgPCBsZW5ndGgpIHsKICAgICAgaWYgKGlzV2hpdGVzcGFjZShjb21tZW50LmNvZGVVbml0QXQoc3RhcnQpKSkgewogICAgICAgICsrc3RhcnQ7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaW50IGVuZCA9IGNvbW1lbnQuaW5kZXhPZignXG4nLCBzdGFydCk7CiAgICAgIGlmIChlbmQgPT0gLTEpIHsKICAgICAgICBlbmQgPSBsZW5ndGg7CiAgICAgIH0KICAgICAgaWYgKGNvZGVCbG9jayA8IGVuZCkgewogICAgICAgIGluQ29kZUJsb2NrID0gIWluQ29kZUJsb2NrOwogICAgICAgIGNvZGVCbG9jayA9IGNvbW1lbnQuaW5kZXhPZignYGBgJywgZW5kKTsKICAgICAgICBpZiAoY29kZUJsb2NrID09IC0xKSB7CiAgICAgICAgICBjb2RlQmxvY2sgPSBsZW5ndGg7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghaW5Db2RlQmxvY2sgJiYgIWNvbW1lbnQuc3RhcnRzV2l0aCgnKiAgICAgJywgc3RhcnQpKSB7CiAgICAgICAgY291bnQgKz0gcGFyc2VDb21tZW50UmVmZXJlbmNlc0luVGV4dChtdWx0aUxpbmVEb2MsIHN0YXJ0LCBlbmQpOwogICAgICB9CiAgICAgIHN0YXJ0ID0gZW5kICsgMTsKICAgIH0KICAgIHJldHVybiBjb3VudDsKICB9CgogIC8vLyBQYXJzZSB0aGUgY29tbWVudCByZWZlcmVuY2VzIGluIGEgc2VxdWVuY2Ugb2Ygc2luZ2xlIGxpbmUgY29tbWVudCB0b2tlbnMKICAvLy8gd2hlcmUgW3Rva2VuXSBpcyB0aGUgZmlyc3QgY29tbWVudCB0b2tlbiBpbiB0aGUgc2VxdWVuY2UuCiAgLy8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGNvbW1lbnQgcmVmZXJlbmNlcyBwYXJzZWQuCiAgaW50IHBhcnNlUmVmZXJlbmNlc0luU2luZ2xlTGluZUNvbW1lbnRzKFRva2VuIHRva2VuKSB7CiAgICBpbnQgY291bnQgPSAwOwogICAgYm9vbCBpbkNvZGVCbG9jayA9IGZhbHNlOwogICAgd2hpbGUgKHRva2VuICE9IG51bGwgJiYgIXRva2VuLmlzRW9mKSB7CiAgICAgIFN0cmluZyBjb21tZW50ID0gdG9rZW4ubGV4ZW1lOwogICAgICBpZiAoY29tbWVudC5zdGFydHNXaXRoKCcvLy8nKSkgewogICAgICAgIGlmIChjb21tZW50LmluZGV4T2YoJ2BgYCcsIDMpICE9IC0xKSB7CiAgICAgICAgICBpbkNvZGVCbG9jayA9ICFpbkNvZGVCbG9jazsKICAgICAgICB9CiAgICAgICAgaWYgKCFpbkNvZGVCbG9jayAmJiAhY29tbWVudC5zdGFydHNXaXRoKCcvLy8gICAgJykpIHsKICAgICAgICAgIGNvdW50ICs9IHBhcnNlQ29tbWVudFJlZmVyZW5jZXNJblRleHQodG9rZW4sIDMsIGNvbW1lbnQubGVuZ3RoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgfQogICAgcmV0dXJuIGNvdW50OwogIH0KCiAgLy8vIFBhcnNlIHRoZSBjb21tZW50IHJlZmVyZW5jZXMgaW4gdGhlIHRleHQgYmV0d2VlbiBbc3RhcnRdIGluY2x1c2l2ZQogIC8vLyBhbmQgW2VuZF0gZXhjbHVzaXZlLiBSZXR1cm4gYSBjb3VudCBpbmRpY2F0aW5nIGhvdyBtYW55IHdlcmUgcGFyc2VkLgogIGludCBwYXJzZUNvbW1lbnRSZWZlcmVuY2VzSW5UZXh0KFRva2VuIGNvbW1lbnRUb2tlbiwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBTdHJpbmcgY29tbWVudCA9IGNvbW1lbnRUb2tlbi5sZXhlbWU7CiAgICBpbnQgY291bnQgPSAwOwogICAgaW50IGluZGV4ID0gc3RhcnQ7CiAgICB3aGlsZSAoaW5kZXggPCBlbmQpIHsKICAgICAgaW50IGNoID0gY29tbWVudC5jb2RlVW5pdEF0KGluZGV4KTsKICAgICAgaWYgKGNoID09IDB4NUIgLyogYFtgICovKSB7CiAgICAgICAgKytpbmRleDsKICAgICAgICBpZiAoaW5kZXggPCBlbmQgJiYgY29tbWVudC5jb2RlVW5pdEF0KGluZGV4KSA9PSAweDNBIC8qIGA6YCAqLykgewogICAgICAgICAgLy8gU2tpcCBvbGQtc3R5bGUgY29kZSBibG9jay4KICAgICAgICAgIGluZGV4ID0gY29tbWVudC5pbmRleE9mKCc6XScsIGluZGV4ICsgMSkgKyAxOwogICAgICAgICAgaWYgKGluZGV4ID09IDAgfHwgaW5kZXggPiBlbmQpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGludCByZWZlcmVuY2VTdGFydCA9IGluZGV4OwogICAgICAgICAgaW5kZXggPSBjb21tZW50LmluZGV4T2YoJ10nLCBpbmRleCk7CiAgICAgICAgICBpZiAoaW5kZXggPT0gLTEgfHwgaW5kZXggPj0gZW5kKSB7CiAgICAgICAgICAgIC8vIFJlY292ZXJ5OiB0ZXJtaW5hdGluZyAnXScgaXMgbm90IHR5cGVkIHlldC4KICAgICAgICAgICAgaW5kZXggPSBmaW5kUmVmZXJlbmNlRW5kKGNvbW1lbnQsIHJlZmVyZW5jZVN0YXJ0LCBlbmQpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNoICE9IDB4MjcgLyogYCdgICovICYmIGNoICE9IDB4MjIgLyogYCJgICovKSB7CiAgICAgICAgICAgIGlmIChpc0xpbmtUZXh0KGNvbW1lbnQsIGluZGV4KSkgewogICAgICAgICAgICAgIC8vIFRPRE8oYnJpYW53aWxrZXJzb24pIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGVyZSdzIGEgbGlicmFyeQogICAgICAgICAgICAgIC8vIFVSSSBpbiB0aGUgbGluayB0ZXh0LgogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZUNvbW1lbnRSZWZlcmVuY2VUZXh0KAogICAgICAgICAgICAgICAgICBjb21tZW50LnN1YnN0cmluZyhyZWZlcmVuY2VTdGFydCwgaW5kZXgpLAogICAgICAgICAgICAgICAgICBjb21tZW50VG9rZW4uY2hhck9mZnNldCArIHJlZmVyZW5jZVN0YXJ0KTsKICAgICAgICAgICAgICArK2NvdW50OwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGNoID09IDB4NjAgLyogJ2AnICovKSB7CiAgICAgICAgLy8gU2tpcCBpbmxpbmUgY29kZSBibG9jayBpZiB0aGVyZSBpcyBib3RoIHN0YXJ0aW5nICdgJyBhbmQgZW5kaW5nICdgJwogICAgICAgIGludCBlbmRDb2RlQmxvY2sgPSBjb21tZW50LmluZGV4T2YoJ2AnLCBpbmRleCArIDEpOwogICAgICAgIGlmIChlbmRDb2RlQmxvY2sgIT0gLTEgJiYgZW5kQ29kZUJsb2NrIDwgZW5kKSB7CiAgICAgICAgICBpbmRleCA9IGVuZENvZGVCbG9jazsKICAgICAgICB9CiAgICAgIH0KICAgICAgKytpbmRleDsKICAgIH0KICAgIHJldHVybiBjb3VudDsKICB9CgogIC8vLyBHaXZlbiBhIGNvbW1lbnQgcmVmZXJlbmNlIHdpdGhvdXQgYSBjbG9zaW5nIGBdYCwKICAvLy8gc2VhcmNoIGZvciBhIHBvc3NpYmxlIHBsYWNlIHdoZXJlIGBdYCBzaG91bGQgYmUuCiAgaW50IGZpbmRSZWZlcmVuY2VFbmQoU3RyaW5nIGNvbW1lbnQsIGludCBpbmRleCwgaW50IGVuZCkgewogICAgLy8gRmluZCB0aGUgZW5kIG9mIHRoZSBpZGVudGlmaWVyIGlmIHRoZXJlIGlzIG9uZQogICAgaWYgKGluZGV4ID49IGVuZCB8fCAhaXNMZXR0ZXIoY29tbWVudC5jb2RlVW5pdEF0KGluZGV4KSkpIHsKICAgICAgcmV0dXJuIGluZGV4OwogICAgfQogICAgd2hpbGUgKGluZGV4IDwgZW5kICYmIGlzTGV0dGVyT3JEaWdpdChjb21tZW50LmNvZGVVbml0QXQoaW5kZXgpKSkgewogICAgICArK2luZGV4OwogICAgfQoKICAgIC8vIENoZWNrIGZvciBhIHRyYWlsaW5nIGAuYAogICAgaWYgKGluZGV4ID49IGVuZCB8fCBjb21tZW50LmNvZGVVbml0QXQoaW5kZXgpICE9IDB4MkUgLyogYC5gICovKSB7CiAgICAgIHJldHVybiBpbmRleDsKICAgIH0KICAgICsraW5kZXg7CgogICAgLy8gRmluZCBlbmQgb2YgdGhlIGlkZW50aWZpZXIgYWZ0ZXIgdGhlIGAuYAogICAgaWYgKGluZGV4ID49IGVuZCB8fCAhaXNMZXR0ZXIoY29tbWVudC5jb2RlVW5pdEF0KGluZGV4KSkpIHsKICAgICAgcmV0dXJuIGluZGV4OwogICAgfQogICAgKytpbmRleDsKICAgIHdoaWxlIChpbmRleCA8IGVuZCAmJiBpc0xldHRlck9yRGlnaXQoY29tbWVudC5jb2RlVW5pdEF0KGluZGV4KSkpIHsKICAgICAgKytpbmRleDsKICAgIH0KICAgIHJldHVybiBpbmRleDsKICB9CgogIC8vLyBQYXJzZSB0aGUgdG9rZW5zIGluIGEgc2luZ2xlIGNvbW1lbnQgcmVmZXJlbmNlIGFuZCBnZW5lcmF0ZSBlaXRoZXIgYQogIC8vLyBgaGFuZGxlQ29tbWVudFJlZmVyZW5jZWAgb3IgYGhhbmRsZU5vQ29tbWVudFJlZmVyZW5jZWAgZXZlbnQuCiAgLy8vIFJldHVybiBgdHJ1ZWAgaWYgYSBjb21tZW50IHJlZmVyZW5jZSB3YXMgc3VjY2Vzc2Z1bGx5IHBhcnNlZC4KICBib29sIHBhcnNlT25lQ29tbWVudFJlZmVyZW5jZShUb2tlbiB0b2tlbiwgaW50IHJlZmVyZW5jZU9mZnNldCkgewogICAgVG9rZW4gYmVnaW4gPSB0b2tlbjsKICAgIFRva2VuIG5ld0tleXdvcmQgPSBudWxsOwogICAgaWYgKG9wdGlvbmFsKCduZXcnLCB0b2tlbikpIHsKICAgICAgbmV3S2V5d29yZCA9IHRva2VuOwogICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICB9CiAgICBUb2tlbiBwcmVmaXgsIHBlcmlvZDsKICAgIGlmICh0b2tlbi5pc0lkZW50aWZpZXIgJiYgb3B0aW9uYWwoJy4nLCB0b2tlbi5uZXh0KSkgewogICAgICBwcmVmaXggPSB0b2tlbjsKICAgICAgcGVyaW9kID0gdG9rZW4ubmV4dDsKICAgICAgdG9rZW4gPSBwZXJpb2QubmV4dDsKICAgIH0KICAgIGlmICh0b2tlbi5pc0VvZikgewogICAgICAvLyBSZWNvdmVyeTogSW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgZm9yIGNvZGUgY29tcGxldGlvbgogICAgICB0b2tlbiA9IHJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIoCiAgICAgICAgICBwZXJpb2QgPz8gbmV3S2V5d29yZCA/PyBzeW50aGV0aWNQcmV2aW91c1Rva2VuKHRva2VuKSk7CiAgICAgIGlmIChiZWdpbiA9PSB0b2tlbi5uZXh0KSB7CiAgICAgICAgYmVnaW4gPSB0b2tlbjsKICAgICAgfQogICAgfQogICAgVG9rZW4gb3BlcmF0b3JLZXl3b3JkID0gbnVsbDsKICAgIGlmIChvcHRpb25hbCgnb3BlcmF0b3InLCB0b2tlbikpIHsKICAgICAgb3BlcmF0b3JLZXl3b3JkID0gdG9rZW47CiAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIH0KICAgIGlmICh0b2tlbi5pc1VzZXJEZWZpbmFibGVPcGVyYXRvcikgewogICAgICBpZiAodG9rZW4ubmV4dC5pc0VvZikgewogICAgICAgIHBhcnNlT25lQ29tbWVudFJlZmVyZW5jZVJlc3QoCiAgICAgICAgICAgIGJlZ2luLCByZWZlcmVuY2VPZmZzZXQsIG5ld0tleXdvcmQsIHByZWZpeCwgcGVyaW9kLCB0b2tlbik7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHRva2VuID0gb3BlcmF0b3JLZXl3b3JkID8/IHRva2VuOwogICAgICBpZiAodG9rZW4ubmV4dC5pc0VvZikgewogICAgICAgIGlmICh0b2tlbi5pc0lkZW50aWZpZXIpIHsKICAgICAgICAgIHBhcnNlT25lQ29tbWVudFJlZmVyZW5jZVJlc3QoCiAgICAgICAgICAgICAgYmVnaW4sIHJlZmVyZW5jZU9mZnNldCwgbmV3S2V5d29yZCwgcHJlZml4LCBwZXJpb2QsIHRva2VuKTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBLZXl3b3JkIGtleXdvcmQgPSB0b2tlbi5rZXl3b3JkOwogICAgICAgIGlmIChuZXdLZXl3b3JkID09IG51bGwgJiYKICAgICAgICAgICAgcHJlZml4ID09IG51bGwgJiYKICAgICAgICAgICAgKGtleXdvcmQgPT0gS2V5d29yZC5USElTIHx8CiAgICAgICAgICAgICAgICBrZXl3b3JkID09IEtleXdvcmQuTlVMTCB8fAogICAgICAgICAgICAgICAga2V5d29yZCA9PSBLZXl3b3JkLlRSVUUgfHwKICAgICAgICAgICAgICAgIGtleXdvcmQgPT0gS2V5d29yZC5GQUxTRSkpIHsKICAgICAgICAgIC8vIFRPRE8oYnJpYW53aWxrZXJzb24pIElmIHdlIHdhbnQgdG8gc3VwcG9ydCB0aGlzIHdlIHdpbGwgbmVlZCB0bwogICAgICAgICAgLy8gZXh0ZW5kIHRoZSBkZWZpbml0aW9uIG9mIENvbW1lbnRSZWZlcmVuY2UgdG8gdGFrZSBhbiBleHByZXNzaW9uCiAgICAgICAgICAvLyByYXRoZXIgdGhhbiBhbiBpZGVudGlmaWVyLiBGb3Igbm93IHdlIGp1c3QgaWdub3JlIGl0IHRvIHJlZHVjZSB0aGUKICAgICAgICAgIC8vIG51bWJlciBvZiBlcnJvcnMgcHJvZHVjZWQsIGJ1dCB0aGF0J3MgcHJvYmFibHkgbm90IGEgdmFsaWQgbG9uZwogICAgICAgICAgLy8gdGVybSBhcHByb2FjaC4KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGxpc3RlbmVyLmhhbmRsZU5vQ29tbWVudFJlZmVyZW5jZSgpOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdm9pZCBwYXJzZU9uZUNvbW1lbnRSZWZlcmVuY2VSZXN0KAogICAgICBUb2tlbiBiZWdpbiwKICAgICAgaW50IHJlZmVyZW5jZU9mZnNldCwKICAgICAgVG9rZW4gbmV3S2V5d29yZCwKICAgICAgVG9rZW4gcHJlZml4LAogICAgICBUb2tlbiBwZXJpb2QsCiAgICAgIFRva2VuIGlkZW50aWZpZXJPck9wZXJhdG9yKSB7CiAgICAvLyBBZGp1c3QgdGhlIHRva2VuIG9mZnNldHMgdG8gbWF0Y2ggdGhlIGVuY2xvc2luZyBjb21tZW50IHRva2VuLgogICAgVG9rZW4gdG9rZW4gPSBiZWdpbjsKICAgIGRvIHsKICAgICAgdG9rZW4ub2Zmc2V0ICs9IHJlZmVyZW5jZU9mZnNldDsKICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgfSB3aGlsZSAoIXRva2VuLmlzRW9mKTsKCiAgICBsaXN0ZW5lci5oYW5kbGVDb21tZW50UmVmZXJlbmNlKAogICAgICAgIG5ld0tleXdvcmQsIHByZWZpeCwgcGVyaW9kLCBpZGVudGlmaWVyT3JPcGVyYXRvcik7CiAgfQoKICAvLy8gR2l2ZW4gdGhhdCB3ZSBoYXZlIGp1c3QgZm91bmQgYnJhY2tldGVkIHRleHQgd2l0aGluIHRoZSBnaXZlbiBbY29tbWVudF0sCiAgLy8vIGxvb2sgdG8gc2VlIHdoZXRoZXIgdGhhdCB0ZXh0IGlzIChhKSBmb2xsb3dlZCBieSBhIHBhcmVudGhlc2l6ZWQgbGluawogIC8vLyBhZGRyZXNzLCAoYikgZm9sbG93ZWQgYnkgYSBjb2xvbiwgb3IgKGMpIGZvbGxvd2VkIGJ5IG9wdGlvbmFsIHdoaXRlc3BhY2UKICAvLy8gYW5kIGFub3RoZXIgc3F1YXJlIGJyYWNrZXQuIFRoZSBbcmlnaHRJbmRleF0gaXMgdGhlIGluZGV4IG9mIHRoZSByaWdodAogIC8vLyBicmFja2V0LiBSZXR1cm4gYHRydWVgIGlmIHRoZSBicmFja2V0ZWQgdGV4dCBpcyBmb2xsb3dlZCBieSBhIGxpbmsKICAvLy8g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cG9ydCAnLi4vc2Nhbm5lci5kYXJ0JyBzaG93IFRva2VuOwoKY2xhc3MgUGFyc2VyRXJyb3IgewogIC8vLyBDaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiBmaWxlIHdoZXJlIHRoaXMgZXJyb3Igc3RhcnRzLgogIGZpbmFsIGludCBiZWdpbk9mZnNldDsKCiAgLy8vIENoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGZpbGUgd2hlcmUgdGhpcyBlcnJvciBlbmRzLgogIGZpbmFsIGludCBlbmRPZmZzZXQ7CgogIGZpbmFsIE1lc3NhZ2UgbWVzc2FnZTsKCiAgUGFyc2VyRXJyb3IodGhpcy5iZWdpbk9mZnNldCwgdGhpcy5lbmRPZmZzZXQsIHRoaXMubWVzc2FnZSk7CgogIFBhcnNlckVycm9yLmZyb21Ub2tlbnMoVG9rZW4gYmVnaW4sIFRva2VuIGVuZCwgTWVzc2FnZSBtZXNzYWdlKQogICAgICA6IHRoaXMoYmVnaW4uY2hhck9mZnNldCwgZW5kLmNoYXJPZmZzZXQgKyBlbmQuY2hhckNvdW50LCBtZXNzYWdlKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkAke2JlZ2luT2Zmc2V0fTogJHttZXNzYWdlLm1lc3NhZ2V9XG4ke21lc3NhZ2UudGlwfSI7Cn0KHABOTjwBIwErASUBFEsZAUkXARkBPwFCSQFOAgE0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9wYXJzZXJfZXJyb3IuZGFydDdzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvcGFyc2VyL2Fzc2VydC5kYXJ0giQvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5wYXJzZXIuQXNzZXJ0OwoKLy8vIFN5bnRhY3RpYyBmb3JtcyBvZiBgYXNzZXJ0YC4KLy8vCi8vLyBBbiBhc3NlcnRpb24gY2FuIGxlZ2FsbHkgb2NjdXIgYXMgYSBzdGF0ZW1lbnQuIEhvd2V2ZXIsIGFzc2VydGlvbnMgYXJlIGFsc28KLy8vIGV4cGVyaW1lbnRhbGx5IGFsbG93ZWQgaW4gaW5pdGlhbGl6ZXJzLiBGb3IgaW1wcm92ZWQgZXJyb3IgcmVjb3ZlcnksIHdlCi8vLyBhbHNvIGF0dGVtcHQgdG8gcGFyc2UgYXNzZXJ0cyBhcyBleHByZXNzaW9ucy4KZW51bSBBc3NlcnQgewogIEV4cHJlc3Npb24sCiAgSW5pdGlhbGl6ZXIsCiAgU3RhdGVtZW50LAp9ChIATk48AR0BIQRQTDIODg8NAgEucGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9hc3NlcnQuZGFydEZzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvcGFyc2VyL2Zvcm1hbF9wYXJhbWV0ZXJfa2luZC5kYXJ0gxMvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5wYXJzZXIuZm9ybWFsX3BhcmFtZXRlcl9raW5kOwoKLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXBkYXRlIHRoaXMgdG8gc3VwcG9ydCByZXF1aXJlZCBuYW1lZCBhcmd1bWVudHMuCmVudW0gRm9ybWFsUGFyYW1ldGVyS2luZCB7CiAgbWFuZGF0b3J5LAogIG9wdGlvbmFsTmFtZWQsCiAgb3B0aW9uYWxQb3NpdGlvbmFsLAp9Cgpib29sIGlzTWFuZGF0b3J5Rm9ybWFsUGFyYW1ldGVyS2luZChGb3JtYWxQYXJhbWV0ZXJLaW5kIHR5cGUpIHsKICByZXR1cm4gRm9ybWFsUGFyYW1ldGVyS2luZC5tYW5kYXRvcnkgPT0gdHlwZTsKfQoKYm9vbCBpc09wdGlvbmFsTmFtZWRGb3JtYWxQYXJhbWV0ZXJLaW5kKEZvcm1hbFBhcmFtZXRlcktpbmQgdHlwZSkgewogIHJldHVybiBGb3JtYWxQYXJhbWV0ZXJLaW5kLm9wdGlvbmFsTmFtZWQgPT0gdHlwZTsKfQoKYm9vbCBpc09wdGlvbmFsUG9zaXRpb25hbEZvcm1hbFBhcmFtZXRlcktpbmQoRm9ybWFsUGFyYW1ldGVyS2luZCB0eXBlKSB7CiAgcmV0dXJuIEZvcm1hbFBhcmFtZXRlcktpbmQub3B0aW9uYWxQb3NpdGlvbmFsID09IHR5cGU7Cn0KGgBOTjwBLAFJGw0RFgIBQDACAUQ0AgFJOQIBPXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvZm9ybWFsX3BhcmFtZXRlcl9raW5kLmRhcnRDc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3BhcnNlci9pZGVudGlmaWVyX2NvbnRleHQuZGFydLmcLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JyBzaG93IFRva2VuLCBUb2tlblR5cGU7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnIHNob3cgTWVzc2FnZSwgVGVtcGxhdGUsIHRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyOwoKaW1wb3J0ICcuLi9zY2FubmVyL3Rva2VuX2NvbnN0YW50cy5kYXJ0JyBzaG93IElERU5USUZJRVJfVE9LRU47CgppbXBvcnQgJ2lkZW50aWZpZXJfY29udGV4dF9pbXBsLmRhcnQnOwoKaW1wb3J0ICdwYXJzZXIuZGFydCcgc2hvdyBQYXJzZXI7CgppbXBvcnQgJ3V0aWwuZGFydCcgc2hvdyBpc09uZU9mT3JFb2YsIG9wdGlvbmFsOwoKLy8vIEluZm9ybWF0aW9uIGFib3V0IHRoZSBwYXJzZXIgc3RhdGUgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIGxpc3RlbmVyIGF0IHRoZQovLy8gdGltZSBhbiBpZGVudGlmaWVyIGlzIGVuY291bnRlcmVkLiBJdCBpcyBhbHNvIHVzZWQgYnkgdGhlIHBhcnNlciBmb3IgZXJyb3IKLy8vIHJlY292ZXJ5IHdoZW4gYSByZWNvdmVyeSB0ZW1wbGF0ZSBpcyBkZWZpbmVkLgovLy8KLy8vIFRoaXMgY2FuIGJlIHVzZWQgYnkgdGhlIGxpc3RlbmVyIHRvIGRldGVybWluZSB0aGUgY29udGV4dCBpbiB3aGljaCB0aGUKLy8vIGlkZW50aWZpZXIgYXBwZWFyczsgdGhhdCBpbiB0dXJuIGNhbiBoZWxwIHRoZSBsaXN0ZW5lciBkZWNpZGUgaG93IHRvIHJlc29sdmUKLy8vIHRoZSBpZGVudGlmaWVyIChpZiB0aGUgbGlzdGVuZXIgaXMgZG9pbmcgcmVzb2x1dGlvbikuCmNsYXNzIElkZW50aWZpZXJDb250ZXh0IHsKICAvLy8gSWRlbnRpZmllciBpcyBiZWluZyBkZWNsYXJlZCBhcyB0aGUgbmFtZSBvZiBhbiBpbXBvcnQgcHJlZml4IChpLmUuIGBGb29gCiAgLy8vIGluIGBpbXBvcnQgIi4uLiIgYXMgRm9vO2ApCiAgc3RhdGljIGNvbnN0IEltcG9ydFByZWZpeElkZW50aWZpZXJDb250ZXh0IGltcG9ydFByZWZpeERlY2xhcmF0aW9uID0KICAgICAgY29uc3QgSW1wb3J0UHJlZml4SWRlbnRpZmllckNvbnRleHQoKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgdGhlIHN0YXJ0IG9mIGEgZG90dGVkIG5hbWUgaW4gYSBjb25kaXRpb25hbCBpbXBvcnQgb3IKICAvLy8gZXhwb3J0LgogIHN0YXRpYyBjb25zdCBEb3R0ZWROYW1lSWRlbnRpZmllckNvbnRleHQgZG90dGVkTmFtZSA9CiAgICAgIGNvbnN0IERvdHRlZE5hbWVJZGVudGlmaWVyQ29udGV4dCgpOwoKICAvLy8gSWRlbnRpZmllciBpcyBwYXJ0IG9mIGEgZG90dGVkIG5hbWUgaW4gYSBjb25kaXRpb25hbCBpbXBvcnQgb3IgZXhwb3J0LCBidXQKICAvLy8gaXQncyBub3QgdGhlIGZpcnN0IGlkZW50aWZpZXIgb2YgdGhlIGRvdHRlZCBuYW1lLgogIHN0YXRpYyBjb25zdCBEb3R0ZWROYW1lSWRlbnRpZmllckNvbnRleHQgZG90dGVkTmFtZUNvbnRpbnVhdGlvbiA9CiAgICAgIGNvbnN0IERvdHRlZE5hbWVJZGVudGlmaWVyQ29udGV4dC5jb250aW51YXRpb24oKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgb25lIG9mIHRoZSBzaG93bi9oaWRkZW4gbmFtZXMgaW4gYW4gaW1wb3J0L2V4cG9ydAogIC8vLyBjb21iaW5hdG9yLgogIHN0YXRpYyBjb25zdCBDb21iaW5hdG9ySWRlbnRpZmllckNvbnRleHQgY29tYmluYXRvciA9CiAgICAgIGNvbnN0IENvbWJpbmF0b3JJZGVudGlmaWVyQ29udGV4dCgpOwoKICAvLy8gSWRlbnRpZmllciBpcyB0aGUgc3RhcnQgb2YgYSBuYW1lIGluIGFuIGFubm90YXRpb24gdGhhdCBwcmVjZWRlcyBhCiAgLy8vIGRlY2xhcmF0aW9uIChpLmUuIGl0IGFwcGVhcnMgZGlyZWN0bHkgYWZ0ZXIgYW4gYEBgKS4KICBzdGF0aWMgY29uc3QgTWV0YWRhdGFSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dCBtZXRhZGF0YVJlZmVyZW5jZSA9CiAgICAgIGNvbnN0IE1ldGFkYXRhUmVmZXJlbmNlSWRlbnRpZmllckNvbnRleHQoKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgcGFydCBvZiBhIG5hbWUgaW4gYW4gYW5ub3RhdGlvbiB0aGF0IHByZWNlZGVzIGEgZGVjbGFyYXRpb24sCiAgLy8vIGJ1dCBpdCdzIG5vdCB0aGUgZmlyc3QgaWRlbnRpZmllciBpbiB0aGUgbmFtZS4KICBzdGF0aWMgY29uc3QgTWV0YWRhdGFSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dCBtZXRhZGF0YUNvbnRpbnVhdGlvbiA9CiAgICAgIGNvbnN0IE1ldGFkYXRhUmVmZXJlbmNlSWRlbnRpZmllckNvbnRleHQuY29udGludWF0aW9uKCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHBhcnQgb2YgYSBuYW1lIGluIGFuIGFubm90YXRpb24gdGhhdCBwcmVjZWRlcyBhIGRlY2xhcmF0aW9uLAogIC8vLyBidXQgaXQgYXBwZWFycyBhZnRlciB0eXBlIHBhcmFtZXRlcnMgKGUuZy4gYGZvb2AgaW4gYEBYPFk+LmZvbygpYCkuCiAgc3RhdGljIGNvbnN0IE1ldGFkYXRhUmVmZXJlbmNlSWRlbnRpZmllckNvbnRleHQKICAgICAgbWV0YWRhdGFDb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHMgPQogICAgICBjb25zdCBNZXRhZGF0YVJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0LmNvbnRpbnVhdGlvbkFmdGVyVHlwZUFyZ3VtZW50cygpOwoKICAvLy8gSWRlbnRpZmllciBpcyB0aGUgbmFtZSBiZWluZyBkZWNsYXJlZCBieSBhIHR5cGVkZWYgZGVjbGFyYXRpb24uCiAgc3RhdGljIGNvbnN0IFR5cGVkZWZEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0IHR5cGVkZWZEZWNsYXJhdGlvbiA9CiAgICAgIGNvbnN0IFR5cGVkZWZEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIGEgZmllbGQgaW5pdGlhbGl6ZXIgaW4gYSBmb3JtYWwgcGFyYW1ldGVyIGxpc3QgKGkuZS4gaXQKICAvLy8gYXBwZWFycyBkaXJlY3RseSBhZnRlciBgdGhpcy5gKS4KICBzdGF0aWMgY29uc3QgRmllbGRJbml0aWFsaXplcklkZW50aWZpZXJDb250ZXh0IGZpZWxkSW5pdGlhbGl6ZXIgPQogICAgICBjb25zdCBGaWVsZEluaXRpYWxpemVySWRlbnRpZmllckNvbnRleHQoKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgYSBmb3JtYWwgcGFyYW1ldGVyIGJlaW5nIGRlY2xhcmVkIGFzIHBhcnQgb2YgYSBmdW5jdGlvbiwKICAvLy8gbWV0aG9kLCBvciB0eXBlZGVmIGRlY2xhcmF0aW9uLgogIHN0YXRpYyBjb25zdCBGb3JtYWxQYXJhbWV0ZXJEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0CiAgICAgIGZvcm1hbFBhcmFtZXRlckRlY2xhcmF0aW9uID0KICAgICAgY29uc3QgRm9ybWFsUGFyYW1ldGVyRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCgpOwoKICAvLy8gSWRlbnRpZmllciBpcyBhIGZvcm1hbCBwYXJhbWV0ZXIgYmVpbmcgZGVjbGFyZWQgYXMgcGFydCBvZiBhIGNhdGNoIGJsb2NrCiAgLy8vIGluIGEgdHJ5L2NhdGNoL2ZpbmFsbHkgc3RhdGVtZW50LgogIHN0YXRpYyBjb25zdCBDYXRjaFBhcmFtZXRlcklkZW50aWZpZXJDb250ZXh0IGNhdGNoUGFyYW1ldGVyID0KICAgICAgY29uc3QgQ2F0Y2hQYXJhbWV0ZXJJZGVudGlmaWVyQ29udGV4dCgpOwoKICAvLy8gSWRlbnRpZmllciBpcyB0aGUgc3RhcnQgb2YgYSBsaWJyYXJ5IG5hbWUgKGUuZy4gYGZvb2AgaW4gdGhlIGRpcmVjdGl2ZQogIC8vLyAnbGlicmFyeSBmb287YCkuCiAgc3RhdGljIGNvbnN0IExpYnJhcnlJZGVudGlmaWVyQ29udGV4dCBsaWJyYXJ5TmFtZSA9CiAgICAgIGNvbnN0IExpYnJhcnlJZGVudGlmaWVyQ29udGV4dCgpOwoKICAvLy8gSWRlbnRpZmllciBpcyBwYXJ0IG9mIGEgbGlicmFyeSBuYW1lLCBidXQgaXQncyBub3QgdGhlIGZpcnN0IGlkZW50aWZpZXIgaW4KICAvLy8gdGhlIG5hbWUuCiAgc3RhdGljIGNvbnN0IExpYnJhcnlJZGVudGlmaWVyQ29udGV4dCBsaWJyYXJ5TmFtZUNvbnRpbnVhdGlvbiA9CiAgICAgIGNvbnN0IExpYnJhcnlJZGVudGlmaWVyQ29udGV4dC5jb250aW51YXRpb24oKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgdGhlIHN0YXJ0IG9mIGEgbGlicmFyeSBuYW1lIHJlZmVyZW5jZWQgYnkgYSBgcGFydCBvZmAKICAvLy8gZGlyZWN0aXZlIChlLmcuIGBmb29gIGluIHRoZSBkaXJlY3RpdmUgYHBhcnQgb2YgZm9vO2ApLgogIHN0YXRpYyBjb25zdCBMaWJyYXJ5SWRlbnRpZmllckNvbnRleHQgcGFydE5hbWUgPQogICAgICBjb25zdCBMaWJyYXJ5SWRlbnRpZmllckNvbnRleHQucGFydE5hbWUoKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgcGFydCBvZiBhIGxpYnJhcnkgbmFtZSByZWZlcmVuY2VkIGJ5IGEgYHBhcnQgb2ZgIGRpcmVjdGl2ZSwKICAvLy8gYnV0IGl0J3Mgbm90IHRoZSBmaXJzdCBpZGVudGlmaWVyIGluIHRoZSBuYW1lLgogIHN0YXRpYyBjb25zdCBMaWJyYXJ5SWRlbnRpZmllckNvbnRleHQgcGFydE5hbWVDb250aW51YXRpb24gPQogICAgICBjb25zdCBMaWJyYXJ5SWRlbnRpZmllckNvbnRleHQucGFydE5hbWVDb250aW51YXRpb24oKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgdGhlIHR5cGUgbmFtZSBiZWluZyBkZWNsYXJlZCBieSBhbiBlbnVtIGRlY2xhcmF0aW9uLgogIHN0YXRpYyBjb25zdCBFbnVtRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCBlbnVtRGVjbGFyYXRpb24gPQogICAgICBjb25zdCBFbnVtRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCgpOwoKICAvLy8gSWRlbnRpZmllciBpcyBhbiBlbnVtZXJhdGVkIHZhbHVlIG5hbWUgYmVpbmcgZGVjbGFyZWQgYnkgYW4gZW51bQogIC8vLyBkZWNsYXJhdGlvbi4KICBzdGF0aWMgY29uc3QgRW51bVZhbHVlRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCBlbnVtVmFsdWVEZWNsYXJhdGlvbiA9CiAgICAgIGNvbnN0IEVudW1WYWx1ZURlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQoKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgdGhlIG5hbWUgYmVpbmcgZGVjbGFyZWQgYnkgYSBjbGFzcyBkZWNsYXJhdGlvbiwgYSBtaXhpbgogIC8vLyBkZWNsYXJhdGlvbiwgb3IgYSBuYW1lZCBtaXhpbiBhcHBsaWNhdGlvbiwgZm9yIGV4YW1wbGUsCiAgLy8vIGBGb29gIGluIGBjbGFzcyBGb28gPSBYIHdpdGggWTtgLgogIHN0YXRpYyBjb25zdCBDbGFzc09yTWl4aW5PckV4dGVuc2lvbklkZW50aWZpZXJDb250ZXh0CiAgICAgIGNsYXNzT3JNaXhpbk9yRXh0ZW5zaW9uRGVjbGFyYXRpb24gPQogICAgICBjb25zdCBDbGFzc09yTWl4aW5PckV4dGVuc2lvbklkZW50aWZpZXJDb250ZXh0KCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHRoZSBuYW1lIG9mIGEgdHlwZSB2YXJpYWJsZSBiZWluZyBkZWNsYXJlZCAoZS5nLiBgRm9vYCBpbgogIC8vLyBgY2xhc3MgQzxGb28gZXh0ZW5kcyBudW0+IHt9YCkuCiAgc3RhdGljIGNvbnN0IFR5cGVWYXJpYWJsZURlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQKICAgICAgdHlwZVZhcmlhYmxlRGVjbGFyYXRpb24gPQogICAgICBjb25zdCBUeXBlVmFyaWFibGVEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHRoZSBzdGFydCBvZiBhIHJlZmVyZW5jZSB0byBhIHR5cGUgdGhhdCBzdGFydHMgd2l0aCBwcmVmaXguCiAgc3RhdGljIGNvbnN0IFR5cGVSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dCBwcmVmaXhlZFR5cGVSZWZlcmVuY2UgPQogICAgICBjb25zdCBUeXBlUmVmZXJlbmNlSWRlbnRpZmllckNvbnRleHQucHJlZml4ZWQoKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgdGhlIHN0YXJ0IG9mIGEgcmVmZXJlbmNlIHRvIGEgdHlwZSBkZWNsYXJlZCBlbHNld2hlcmUuCiAgc3RhdGljIGNvbnN0IFR5cGVSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dCB0eXBlUmVmZXJlbmNlID0KICAgICAgY29uc3QgVHlwZVJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0KCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHBhcnQgb2YgYSByZWZlcmVuY2UgdG8gYSB0eXBlIGRlY2xhcmVkIGVsc2V3aGVyZSwgYnV0IGl0J3MKICAvLy8gbm90IHRoZSBmaXJzdCBpZGVudGlmaWVyIG9mIHRoZSByZWZlcmVuY2UuCiAgc3RhdGljIGNvbnN0IFR5cGVSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dCB0eXBlUmVmZXJlbmNlQ29udGludWF0aW9uID0KICAgICAgY29uc3QgVHlwZVJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0LmNvbnRpbnVhdGlvbigpOwoKICAvLy8gSWRlbnRpZmllciBpcyBhIG5hbWUgYmVpbmcgZGVjbGFyZWQgYnkgYSB0b3AgbGV2ZWwgdmFyaWFibGUgZGVjbGFyYXRpb24uCiAgc3RhdGljIGNvbnN0IFRvcExldmVsRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dAogICAgICB0b3BMZXZlbFZhcmlhYmxlRGVjbGFyYXRpb24gPSBjb25zdCBUb3BMZXZlbERlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQoCiAgICAgICAgICAndG9wTGV2ZWxWYXJpYWJsZURlY2xhcmF0aW9uJywgY29uc3QgWyc7JywgJz0nLCAnLCddKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgYSBuYW1lIGJlaW5nIGRlY2xhcmVkIGJ5IGEgZmllbGQgZGVjbGFyYXRpb24uCiAgc3RhdGljIGNvbnN0IEZpZWxkRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCBmaWVsZERlY2xhcmF0aW9uID0KICAgICAgY29uc3QgRmllbGREZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHRoZSBuYW1lIGJlaW5nIGRlY2xhcmVkIGJ5IGEgdG9wIGxldmVsIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgogIHN0YXRpYyBjb25zdCBUb3BMZXZlbERlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQKICAgICAgdG9wTGV2ZWxGdW5jdGlvbkRlY2xhcmF0aW9uID0gY29uc3QgVG9wTGV2ZWxEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KAogICAgICAgICAgJ3RvcExldmVsRnVuY3Rpb25EZWNsYXJhdGlvbicsIGNvbnN0IFsnPCcsICcoJywgJ3snLCAnPT4nXSk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHRoZSBzdGFydCBvZiB0aGUgbmFtZSBiZWluZyBkZWNsYXJlZCBieSBhIG1ldGhvZAogIC8vLyBkZWNsYXJhdGlvbi4KICBzdGF0aWMgY29uc3QgTWV0aG9kRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCBtZXRob2REZWNsYXJhdGlvbiA9CiAgICAgIGNvbnN0IE1ldGhvZERlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQoKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgcGFydCBvZiB0aGUgbmFtZSBiZWluZyBkZWNsYXJlZCBieSBhIG1ldGhvZCBkZWNsYXJhdGlvbiwKICAvLy8gYnV0IGl0J3Mgbm90IHRoZSBmaXJzdCBpZGVudGlmaWVyIG9mIHRoZSBuYW1lLgogIC8vLwogIC8vLyBJbiB2YWxpZCBEYXJ0LCB0aGlzIGNhbiBvbmx5IGhhcHBlbiBpZiB0aGUgaWRlbnRpZmllciBpcyB0aGUgbmFtZSBvZiBhCiAgLy8vIG5hbWVkIGNvbnN0cnVjdG9yIHdoaWNoIGlzIGJlaW5nIGRlY2xhcmVkLCBlLmcuIGBmb29gIGluCiAgLy8vIGBjbGFzcyBDIHsgQy5mb28oKTsgfWAuCiAgc3RhdGljIGNvbnN0IE1ldGhvZERlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQKICAgICAgbWV0aG9kRGVjbGFyYXRpb25Db250aW51YXRpb24gPQogICAgICBjb25zdCBNZXRob2REZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0LmNvbnRpbnVhdGlvbigpOwoKICAvLy8gSWRlbnRpZmllciBhcHBlYXJzIGFmdGVyIHRoZSB3b3JkIGBvcGVyYXRvcmAgaW4gYSBtZXRob2QgZGVjbGFyYXRpb24uCiAgLy8vCiAgLy8vIFRPRE8ocGF1bGJlcnJ5LGFoZSk6IERvZXMgdGhpcyBldmVyIG9jY3VyIGluIHZhbGlkIERhcnQsIG9yIGRvZXMgaXQgb25seQogIC8vLyBvY2N1ciBhcyBwYXJ0IG9mIGVycm9yIHJlY292ZXJ5PyAgSWYgaXQncyBvbmx5IGFzIHBhcnQgb2YgZXJyb3IgcmVjb3ZlcnksCiAgLy8vIHBlcmhhcHMgd2Ugc2hvdWxkIGp1c3QgcmUtdXNlIG1ldGhvZERlY2xhcmF0aW9uLgogIHN0YXRpYyBjb25zdCBNZXRob2REZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0IG9wZXJhdG9yTmFtZSA9CiAgICAgIGNvbnN0IE1ldGhvZERlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQuY29udGludWF0aW9uKCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHRoZSBzdGFydCBvZiB0aGUgbmFtZSBiZWluZyBkZWNsYXJlZCBieSBhIGxvY2FsIGZ1bmN0aW9uCiAgLy8vIGRlY2xhcmF0aW9uLgogIHN0YXRpYyBjb25zdCBMb2NhbEZ1bmN0aW9uRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dAogICAgICBsb2NhbEZ1bmN0aW9uRGVjbGFyYXRpb24gPQogICAgICBjb25zdCBMb2NhbEZ1bmN0aW9uRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCgpOwoKICAvLy8gSWRlbnRpZmllciBpcyBwYXJ0IG9mIHRoZSBuYW1lIGJlaW5nIGRlY2xhcmVkIGJ5IGEgbG9jYWwgZnVuY3Rpb24KICAvLy8gZGVjbGFyYXRpb24sIGJ1dCBpdCdzIG5vdCB0aGUgZmlyc3QgaWRlbnRpZmllciBvZiB0aGUgbmFtZS4KICAvLy8KICAvLy8gVE9ETyhwYXVsYmVycnksYWhlKTogRG9lcyB0aGlzIGV2ZXIgb2NjdXIgaW4gdmFsaWQgRGFydCwgb3IgZG9lcyBpdCBvbmx5CiAgLy8vIG9jY3VyIGFzIHBhcnQgb2YgZXJyb3IgcmVjb3Zlcnk/CiAgc3RhdGljIGNvbnN0IExvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0CiAgICAgIGxvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbkNvbnRpbnVhdGlvbiA9CiAgICAgIGNvbnN0IExvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0LmNvbnRpbnVhdGlvbigpOwoKICAvLy8gSWRlbnRpZmllciBpcyB0aGUgc3RhcnQgb2YgYSByZWZlcmVuY2UgdG8gYSBjb25zdHJ1Y3RvciBkZWNsYXJlZAogIC8vLyBlbHNld2hlcmUuCiAgc3RhdGljIGNvbnN0IENvbnN0cnVjdG9yUmVmZXJlbmNlSWRlbnRpZmllckNvbnRleHQgY29uc3RydWN0b3JSZWZlcmVuY2UgPQogICAgICBjb25zdCBDb25zdHJ1Y3RvclJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0KCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHBhcnQgb2YgYSByZWZlcmVuY2UgdG8gYSBjb25zdHJ1Y3RvciBkZWNsYXJlZCBlbHNld2hlcmUsIGJ1dAogIC8vLyBpdCdzIG5vdCB0aGUgZmlyc3QgaWRlbnRpZmllciBvZiB0aGUgcmVmZXJlbmNlLgogIHN0YXRpYyBjb25zdCBDb25zdHJ1Y3RvclJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0CiAgICAgIGNvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uID0KICAgICAgY29uc3QgQ29uc3RydWN0b3JSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dC5jb250aW51YXRpb24oKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgcGFydCBvZiBhIHJlZmVyZW5jZSB0byBhIGNvbnN0cnVjdG9yIGRlY2xhcmVkIGVsc2V3aGVyZSwgYnV0CiAgLy8vIGl0IGFwcGVhcnMgYWZ0ZXIgdHlwZSBwYXJhbWV0ZXJzIChlLmcuIGBmb29gIGluIGBYPFk+LmZvb2ApLgogIHN0YXRpYyBjb25zdCBDb25zdHJ1Y3RvclJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0CiAgICAgIGNvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzID0KICAgICAgY29uc3QgQ29uc3RydWN0b3JSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dAogICAgICAgICAgLmNvbnRpbnVhdGlvbkFmdGVyVHlwZUFyZ3VtZW50cygpOwoKICAvLy8gSWRlbnRpZmllciBpcyB0aGUgZGVjbGFyYXRpb24gb2YgYSBsYWJlbCAoaS5lLiBpdCBpcyBmb2xsb3dlZCBieSBgOmAgYW5kCiAgLy8vIHRoZW4gYSBzdGF0ZW1lbnQpLgogIHN0YXRpYyBjb25zdCBMYWJlbERlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQgbGFiZWxEZWNsYXJhdGlvbiA9CiAgICAgIGNvbnN0IExhYmVsRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCgpOwoKICAvLy8gSWRlbnRpZmllciBpcyB0aGUgc3RhcnQgb2YgYSByZWZlcmVuY2Ugb2NjdXJyaW5nIGluIGEgbGl0ZXJhbCBzeW1ib2wgKGUuZy4KICAvLy8gYGZvb2AgaW4gYCNmb29gKS4KICBzdGF0aWMgY29uc3QgTGl0ZXJhbFN5bWJvbElkZW50aWZpZXJDb250ZXh0IGxpdGVyYWxTeW1ib2wgPQogICAgICBjb25zdCBMaXRlcmFsU3ltYm9sSWRlbnRpZmllckNvbnRleHQoKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgcGFydCBvZiBhIHJlZmVyZW5jZSBvY2N1cnJpbmcgaW4gYSBsaXRlcmFsIHN5bWJvbCwgYnV0IGl0J3MKICAvLy8gbm90IHRoZSBmaXJzdCBpZGVudGlmaWVyIG9mIHRoZSByZWZlcmVuY2UgKGUuZy4gYGZvb2AgaW4gYCNwcmVmaXguZm9vYCkuCiAgc3RhdGljIGNvbnN0IExpdGVyYWxTeW1ib2xJZGVudGlmaWVyQ29udGV4dCBsaXRlcmFsU3ltYm9sQ29udGludWF0aW9uID0KICAgICAgY29uc3QgTGl0ZXJhbFN5bWJvbElkZW50aWZpZXJDb250ZXh0LmNvbnRpbnVhdGlvbigpOwoKICAvLy8gSWRlbnRpZmllciBhcHBlYXJzIGluIGFuIGV4cHJlc3Npb24sIGFuZCBpdCBkb2VzIG5vdCBpbW1lZGlhdGVseSBmb2xsb3cgYQogIC8vLyBgLmAuCiAgc3RhdGljIGNvbnN0IEV4cHJlc3Npb25JZGVudGlmaWVyQ29udGV4dCBleHByZXNzaW9uID0KICAgICAgY29uc3QgRXhwcmVzc2lvbklkZW50aWZpZXJDb250ZXh0KCk7CgogIC8vLyBJZGVudGlmaWVyIGFwcGVhcnMgaW4gYW4gZXhwcmVzc2lvbiwgYW5kIGl0IGltbWVkaWF0ZWx5IGZvbGxvd3MgYSBgLmAuCiAgc3RhdGljIGNvbnN0IEV4cHJlc3Npb25JZGVudGlmaWVyQ29udGV4dCBleHByZXNzaW9uQ29udGludWF0aW9uID0KICAgICAgY29uc3QgRXhwcmVzc2lvbklkZW50aWZpZXJDb250ZXh0LmNvbnRpbnVhdGlvbigpOwoKICAvLy8gSWRlbnRpZmllciBpcyBhIHJlZmVyZW5jZSB0byBhIG5hbWVkIGFyZ3VtZW50IG9mIGEgZnVuY3Rpb24gb3IgbWV0aG9kCiAgLy8vIGludm9jYXRpb24gKGUuZy4gYGZvb2AgaW4gYGYoZm9vOiAwKTtgLgogIHN0YXRpYyBjb25zdCBOYW1lZEFyZ3VtZW50UmVmZXJlbmNlSWRlbnRpZmllckNvbnRleHQgbmFtZWRBcmd1bWVudFJlZmVyZW5jZSA9CiAgICAgIGNvbnN0IE5hbWVkQXJndW1lbnRSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dCgpOwoKICAvLy8gSWRlbnRpZmllciBpcyBhIG5hbWUgYmVpbmcgZGVjbGFyZWQgYnkgYSBsb2NhbCB2YXJpYWJsZSBkZWNsYXJhdGlvbi4KICBzdGF0aWMgY29uc3QgTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQKICAgICAgbG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uID0KICAgICAgY29uc3QgTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQoKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgYSByZWZlcmVuY2UgdG8gYSBsYWJlbCAoZS5nLiBgZm9vYCBpbiBgYnJlYWsgZm9vO2ApLgogIC8vLyBMYWJlbHMgaGF2ZSB0aGVpciBvd24gc2NvcGUuCiAgc3RhdGljIGNvbnN0IExhYmVsUmVmZXJlbmNlSWRlbnRpZmllckNvbnRleHQgbGFiZWxSZWZlcmVuY2UgPQogICAgICBjb25zdCBMYWJlbFJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0KCk7CgogIGZpbmFsIFN0cmluZyBfbmFtZTsKCiAgLy8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSBpZGVudGlmaWVyIHJlcHJlc2VudHMgYSBuYW1lIHdoaWNoIGlzIGJlaW5nCiAgLy8vIGRlY2xhcmVkLgogIGZpbmFsIGJvb2wgaW5EZWNsYXJhdGlvbjsKCiAgLy8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSBpZGVudGlmaWVyIGlzIHdpdGhpbiBhIGBsaWJyYXJ5YCBvciBgcGFydCBvZmAKICAvLy8gZGVjbGFyYXRpb24uCiAgZmluYWwgYm9vbCBpbkxpYnJhcnlPclBhcnRPZkRlY2xhcmF0aW9uOwoKICAvLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGlkZW50aWZpZXIgaXMgd2l0aGluIGEgc3ltYm9sIGxpdGVyYWwuCiAgZmluYWwgYm9vbCBpblN5bWJvbDsKCiAgLy8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSBpZGVudGlmaWVyIGZvbGxvd3MgYSBgLmAuCiAgZmluYWwgYm9vbCBpc0NvbnRpbnVhdGlvbjsKCiAgLy8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSBpZGVudGlmaWVyIHNob3VsZCBiZSBsb29rZWQgdXAgaW4gdGhlIGN1cnJlbnQgc2NvcGUuCiAgZmluYWwgYm9vbCBpc1Njb3BlUmVmZXJlbmNlOwoKICAvLy8gSW5kaWNhdGVzIHdoZXRoZXIgYnVpbHQtaW4gaWRlbnRpZmllcnMgYXJlIGFsbG93ZWQgaW4gdGhpcyBjb250ZXh0LgogIGZpbmFsIGJvb2wgaXNCdWlsdEluSWRlbnRpZmllckFsbG93ZWQ7CgogIC8vLyBJbmRpY2F0ZWQgd2hldGhlciB0aGUgaWRlbnRpZmllciBpcyBhbGxvd2VkIGluIGEgY29udGV4dCB3aGVyZSBjb25zdGFudAogIC8vLyBleHByZXNzaW9ucyBhcmUgcmVxdWlyZWQuCiAgZmluYWwgYm9vbCBhbGxvd2VkSW5Db25zdGFudEV4cHJlc3Npb247CgogIGZpbmFsIFRlbXBsYXRlPF9NZXNzYWdlV2l0aEFyZ3VtZW50PFRva2VuPj4gcmVjb3ZlcnlUZW1wbGF0ZTsKCiAgY29uc3QgSWRlbnRpZmllckNvbnRleHQodGhpcy5fbmFtZSwKICAgICAge3RoaXMuaW5EZWNsYXJhdGlvbjogZmFsc2UsCiAgICAgIHRoaXMuaW5MaWJyYXJ5T3JQYXJ0T2ZEZWNsYXJhdGlvbjogZmFsc2UsCiAgICAgIHRoaXMuaW5TeW1ib2w6IGZhbHNlLAogICAgICB0aGlzLmlzQ29udGludWF0aW9uOiBmYWxzZSwKICAgICAgdGhpcy5pc1Njb3BlUmVmZXJlbmNlOiBmYWxzZSwKICAgICAgdGhpcy5pc0J1aWx0SW5JZGVudGlmaWVyQWxsb3dlZDogdHJ1ZSwKICAgICAgYm9vbCBhbGxvd2VkSW5Db25zdGFudEV4cHJlc3Npb24sCiAgICAgIHRoaXMucmVjb3ZlcnlUZW1wbGF0ZTogdGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXJ9KQogICAgICA6IHRoaXMuYWxsb3dlZEluQ29uc3RhbnRFeHByZXNzaW9uID0KICAgICAgICAgICAgLy8gR2VuZXJhbGx5LCBkZWNsYXJhdGlvbnMgYXJlIGxlZ2FsIGluIGNvbnN0YW50IGV4cHJlc3Npb25zLiAgQQogICAgICAgICAgICAvLyBjb250aW51YXRpb24gZG9lc24ndCBhZmZlY3QgY29uc3RhbnQgZXhwcmVzc2lvbnM6IGlmIHdoYXQgaXQncwogICAgICAgICAgICAvLyBjb250aW51aW5nIGlzIGEgcHJvYmxlbSwgaXQgaGFzIGFscmVhZHkgYmVlbiByZXBvcnRlZC4KICAgICAgICAgICAgYWxsb3dlZEluQ29uc3RhbnRFeHByZXNzaW9uID8/CiAgICAgICAgICAgICAgICAoaW5EZWNsYXJhdGlvbiB8fCBpc0NvbnRpbnVhdGlvbiB8fCBpblN5bWJvbCk7CgogIFN0cmluZyB0b1N0cmluZygpID0+IF9uYW1lOwoKICAvLy8gRW5zdXJlIHRoYXQgdGhlIG5leHQgdG9rZW4gaXMgYW4gaWRlbnRpZmllciAob3Iga2V5d29yZCB3aGljaCBzaG91bGQgYmUKICAvLy8gdHJlYXRlZCBhcyBhbiBpZGVudGlmaWVyKSBhbmQgcmV0dXJuIHRoYXQgaWRlbnRpZmllci4KICAvLy8gUmVwb3J0IGVycm9ycyBhcyBuZWNlc3NhcnkgdmlhIFtwYXJzZXJdLgogIFRva2VuIGVuc3VyZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIGFzc2VydCh0b2tlbi5uZXh0LmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTik7CiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogSW1wbGVtZW50IHRoaXMgbWV0aG9kIGZvciBlYWNoIGlkZW50aWZpZXIgY29udGV4dAogICAgLy8gc3VjaCB0aGF0IHRoZXkgcmV0dXJuIGEgbm9uLW51bGwgdmFsdWUuCiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCi8vLyBSZXR1cm4gYHRydWVgIGlmIHRoZSBnaXZlbiBbdG9rZW5dIHNob3VsZCBiZSB0cmVhdGVkIGxpa2UgdGhlIHN0YXJ0IG9mCi8vLyBhbiBleHByZXNzaW9uIGZvciB0aGUgcHVycG9zZXMgb2YgcmVjb3ZlcnkuCmJvb2wgbG9va3NMaWtlRXhwcmVzc2lvblN0YXJ0KFRva2VuIG5leHQpID0+CiAgICBuZXh0LmlzSWRlbnRpZmllciB8fAogICAgbmV4dC5pc0tleXdvcmQgJiYgIWxvb2tzTGlrZVN0YXRlbWVudFN0YXJ0KG5leHQpIHx8CiAgICBuZXh0LnR5cGUgPT0gVG9rZW5UeXBlLkRPVUJMRSB8fAogICAgbmV4dC50eXBlID09IFRva2VuVHlwZS5IQVNIIHx8CiAgICBuZXh0LnR5cGUgPT0gVG9rZW5UeXBlLkhFWEFERUNJTUFMIHx8CiAgICBuZXh0LnR5cGUgPT0gVG9rZW5UeXBlLklERU5USUZJRVIgfHwKICAgIG5leHQudHlwZSA9PSBUb2tlblR5cGUuSU5UIHx8CiAgICBuZXh0LnR5cGUgPT0gVG9rZW5UeXBlLlNUUklORyB8fAogICAgb3B0aW9uYWwoJ3snLCBuZXh0KSB8fAogICAgb3B0aW9uYWwoJygnLCBuZXh0KSB8fAogICAgb3B0aW9uYWwoJ1snLCBuZXh0KSB8fAogICAgb3B0aW9uYWwoJ1tdJywgbmV4dCkgfHwKICAgIG9wdGlvbmFsKCc8JywgbmV4dCkgfHwKICAgIG9wdGlvbmFsKCchJywgbmV4dCkgfHwKICAgIG9wdGlvbmFsKCctJywgbmV4dCkgfHwKICAgIG9wdGlvbmFsKCd+JywgbmV4dCkgfHwKICAgIG9wdGlvbmFsKCcrKycsIG5leHQpIHx8CiAgICBvcHRpb25hbCgnLS0nLCBuZXh0KTsKCi8vLyBSZXR1cm4gYHRydWVgIGlmIHRoZSBnaXZlbiBbdG9rZW5dIHNob3VsZCBiZSB0cmVhdGVkIGxpa2UgdGhlIHN0YXJ0IG9mCi8vLyBhIG5ldyBzdGF0ZW1lbnQgZm9yIHRoZSBwdXJwb3NlcyBvZiByZWNvdmVyeS4KYm9vbCBsb29rc0xpa2VTdGF0ZW1lbnRTdGFydChUb2tlbiB0b2tlbikgPT4gaXNPbmVPZk9yRW9mKHRva2VuLCBjb25zdCBbCiAgICAgICdAJywKICAgICAgJ2Fzc2VydCcsICdicmVhaycsICdjb250aW51ZScsICdkbycsICdlbHNlJywgJ2ZpbmFsJywgJ2ZvcicsIC8vCiAgICAgICdpZicsICdyZXR1cm4nLCAnc3dpdGNoJywgJ3RyeScsICd2YXInLCAndm9pZCcsICd3aGlsZScsIC8vCiAgICBdKTsKCi8vIFRPRE8oYWhlKTogUmVtb3ZlIHdoZW4gYW5hbHl6ZXIgc3VwcG9ydHMgZ2VuZXJhbGl6ZWQgZnVuY3Rpb24gc3ludGF4Lgp0eXBlZGVmIF9NZXNzYWdlV2l0aEFyZ3VtZW50PFQ+ID0gTWVzc2FnZSBGdW5jdGlvbihUKTsKgU8ATk48ATkBUQFAAScBIgEwAU1PMgRLUToaTyFHLQFKDjgrAVE4RDgBRhI4KwFJO0YyAVE1ST8BUUoyL1EBRkgzAUwnRDEBTSY7IzsBTyhALwFNFzYoAVEQQjUBSj4zMQFQNT89AUlCMAFHE0w1AUw+KDgrOAFOJjggOAFQRjcBSz4uAU8xSjsBTzRQQQFCRDEBUTRQRwFFE0YyAU01Bk0/HjImPwFMBk9QN0E/AU0TOSE5AUhCBk8nOS1GAUcRTDUBUTY1KUIBUUM1OzItAU8ZRDEBURg+LgFQT0o7AVALOCsBTUQ4AUwuUDcBSzkhOQFJI0AvARYBSBAcAUoTKwFDFwE2HQFRHwFKKQFOICoBQAEmIjAcIiQtKDorTU5GKz8BHgFOPC83MUkvEQQCAUswLRk4JSMqKSIlGxsbHBsbGxscGgFLMkkLRkIIAUk3ATpwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL2lkZW50aWZpZXJfY29udGV4dC5kYXJ0QXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9wYXJzZXIvZGVjbGFyYXRpb25fa2luZC5kYXJ0geYvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgplbnVtIERlY2xhcmF0aW9uS2luZCB7CiAgLy8vIEEgdG9wIGxldmVsIGRlY2xhcmF0aW9uLgogIFRvcExldmVsLAoKICAvLy8gQSBjbGFzcyBkZWNsYXJhdGlvbi4gTm90IGluY2x1ZGluZyBhIG5hbWVkIG1peGluIGRlY2xhcmF0aW9uLgogIENsYXNzLAoKICAvLy8gQSBtaXhpbiBkZWNsYXJhdGlvbi4gTm90IGluY2x1ZGluZyBhIG5hbWVkIG1peGluIGRlY2xhcmF0aW9uLgogIE1peGluLAoKICAvLy8gQW4gZXh0ZW5zaW9uIGRlY2xhcmF0aW9uLgogIEV4dGVuc2lvbiwKfQoTAE1OPAEXHwwBRAkBRAkBIA0CAThwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL2RlY2xhcmF0aW9uX2tpbmQuZGFydDxzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvcGFyc2VyL21lbWJlcl9raW5kLmRhcnSDni8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnBhcnNlci5tZW1iZXJfa2luZDsKCmVudW0gTWVtYmVyS2luZCB7CiAgLy8vIEEgY2F0Y2ggYmxvY2ssIG5vdCBhIHJlYWwgbWVtYmVyLgogIENhdGNoLAoKICAvLy8gQSBmYWN0b3J5CiAgRmFjdG9yeSwKCiAgLy8vIE9sZC1zdHlsZSB0eXBlZGVmLgogIEZ1bmN0aW9uVHlwZUFsaWFzLAoKICAvLy8gT2xkLXN0eWxlIGZ1bmN0aW9uLXR5cGVkIHBhcmFtZXRlciwgbm90IGEgcmVhbCBtZW1iZXIuCiAgRnVuY3Rpb25UeXBlZFBhcmFtZXRlciwKCiAgLy8vIEEgZ2VuZXJhbGl6ZWQgZnVuY3Rpb24gdHlwZSwgbm90IGEgcmVhbCBtZW1iZXIuCiAgR2VuZXJhbGl6ZWRGdW5jdGlvblR5cGUsCgogIC8vLyBBIGxvY2FsIGZ1bmN0aW9uLgogIExvY2FsLAoKICAvLy8gQSBub24tc3RhdGljIG1ldGhvZCBpbiBhIGNsYXNzIChpbmNsdWRpbmcgY29uc3RydWN0b3JzKS4KICBOb25TdGF0aWNNZXRob2QsCgogIC8vLyBBIHN0YXRpYyBtZXRob2QgaW4gYSBjbGFzcy4KICBTdGF0aWNNZXRob2QsCgogIC8vLyBBIHRvcC1sZXZlbCBtZXRob2QuCiAgVG9wTGV2ZWxNZXRob2QsCgogIC8vLyBBbiBpbnN0YW5jZSBmaWVsZCBpbiBhIGNsYXNzLgogIE5vblN0YXRpY0ZpZWxkLAoKICAvLy8gQSBzdGF0aWMgZmllbGQgaW4gYSBjbGFzcy4KICBTdGF0aWNGaWVsZCwKCiAgLy8vIEEgdG9wLWxldmVsIGZpZWxkLgogIFRvcExldmVsRmllbGQsCn0KLQBOTjwBIgESKAkBEAsBGRUBPRoBNhsBGAkBPxMBIhABGhIBJBIBIQ8BGRECATNwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL21lbWJlcl9raW5kLmRhcnRBc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3BhcnNlci90b3BfbGV2ZWxfcGFyc2VyLmRhcnSDWS8vIENvcHlyaWdodCAoYykgMjAxMSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnBhcnNlci50b3BfbGV2ZWxfcGFyc2VyOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJ2RlY2xhcmF0aW9uX2tpbmQuZGFydCcgc2hvdyBEZWNsYXJhdGlvbktpbmQ7CgppbXBvcnQgJ2NsYXNzX21lbWJlcl9wYXJzZXIuZGFydCcgc2hvdyBDbGFzc01lbWJlclBhcnNlcjsKCmltcG9ydCAnbGlzdGVuZXIuZGFydCcgc2hvdyBMaXN0ZW5lcjsKCi8vLyBQYXJzZXIgd2hpY2ggb25seSBwYXJzZXMgdG9wLWxldmVsIGVsZW1lbnRzLCBidXQgaWdub3JlcyB0aGVpciBib2RpZXMuCi8vLyBVc2UgW1BhcnNlcl0gdG8gcGFyc2UgZXZlcnl0aGluZy4KY2xhc3MgVG9wTGV2ZWxQYXJzZXIgZXh0ZW5kcyBDbGFzc01lbWJlclBhcnNlciB7CiAgVG9wTGV2ZWxQYXJzZXIoTGlzdGVuZXIgbGlzdGVuZXIpIDogc3VwZXIobGlzdGVuZXIpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZUNsYXNzT3JNaXhpbk9yRXh0ZW5zaW9uQm9keSgKICAgICAgICAgIFRva2VuIHRva2VuLCBEZWNsYXJhdGlvbktpbmQga2luZCwgU3RyaW5nIGVuY2xvc2luZ0RlY2xhcmF0aW9uTmFtZSkgPT4KICAgICAgc2tpcENsYXNzT3JNaXhpbk9yRXh0ZW5zaW9uQm9keSh0b2tlbik7Cn0KGgBOTjwBJwEuATUBOgEmAUsmMTcBDCpRLgIBOHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvdG9wX2xldmVsX3BhcnNlci5kYXJ0NXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9wYXJzZXIvdXRpbC5kYXJ0m1YvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5wYXJzZXIudXRpbDsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgVHJlZU5vZGU7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnIHNob3cgbm9MZW5ndGg7CgppbXBvcnQgJy4uL3NjYW5uZXIuZGFydCcgc2hvdyBUb2tlbjsKCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JwogICAgc2hvdyBCZWdpblRva2VuLCBTaW1wbGVUb2tlbiwgU3ludGhldGljVG9rZW4sIFRva2VuVHlwZTsKCi8vLyBSZXR1cm5zIHRydWUgaWYgW3Rva2VuXSBpcyB0aGUgc3ltYm9sIG9yIGtleXdvcmQgW3ZhbHVlXS4KYm9vbCBvcHRpb25hbChTdHJpbmcgdmFsdWUsIFRva2VuIHRva2VuKSB7CiAgcmV0dXJuIGlkZW50aWNhbCh2YWx1ZSwgdG9rZW4uc3RyaW5nVmFsdWUpOwp9CgovLy8gUmV0dXJucyB0aGUgdG9rZW4gYmVmb3JlIHRoZSBjbG9zZSBicmFjZSwgYnJhY2tldCwgb3IgcGFyZW50aGVzaXMKLy8vIGFzc29jaWF0ZWQgd2l0aCBbbGVmdF0uIEZvciAnPCcsIGl0IG1heSByZXR1cm4gYG51bGxgLgpUb2tlbiBiZWZvcmVDbG9zZUJyYWNlVG9rZW5Gb3IoQmVnaW5Ub2tlbiBsZWZ0KSB7CiAgVG9rZW4gZW5kVG9rZW4gPSBsZWZ0LmVuZFRva2VuOwogIGlmIChlbmRUb2tlbiA9PSBudWxsKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgVG9rZW4gdG9rZW4gPSBsZWZ0OwogIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogIHdoaWxlIChuZXh0ICE9IGVuZFRva2VuICYmIG5leHQgIT0gbmV4dC5uZXh0KSB7CiAgICB0b2tlbiA9IG5leHQ7CiAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICB9CiAgcmV0dXJuIHRva2VuOwp9CgovLy8gUmV0dXJuIFt0b2tlbl0gb3IgYSB0b2tlbiBiZWZvcmUgW3Rva2VuXSB3aGljaCBpcyBlaXRoZXIKLy8vIG5vdCBzeW50aGV0aWMgb3Igc3ludGhldGljIHdpdGggbm9uLXplcm8gbGVuZ3RoLgpUb2tlbiBmaW5kUHJldmlvdXNOb25aZXJvTGVuZ3RoVG9rZW4oVG9rZW4gdG9rZW4pIHsKICB3aGlsZSAodG9rZW4uaXNTeW50aGV0aWMgJiYgdG9rZW4ubGVuZ3RoID09IDApIHsKICAgIFRva2VuIHByZXZpb3VzID0gdG9rZW4uYmVmb3JlU3ludGhldGljOwogICAgaWYgKHByZXZpb3VzID09IG51bGwpIHsKICAgICAgYnJlYWs7CiAgICB9CiAgICB0b2tlbiA9IHByZXZpb3VzOwogIH0KICByZXR1cm4gdG9rZW47Cn0KCi8vLyBSZXR1cm4gW3Rva2VuXSBvciBhIHRva2VuIGFmdGVyIFt0b2tlbl0gd2hpY2ggaXMgZWl0aGVyCi8vLyBub3Qgc3ludGhldGljIG9yIHN5bnRoZXRpYyB3aXRoIG5vbi16ZXJvIGxlbmd0aC4KLy8vIFRoaXMgbWF5IHJldHVybiBFT0YgaWYgdGhlcmUgYXJlIG5vIG1vcmUgbm9uLXN5bnRoZXRpYyB0b2tlbnMgaW4gdGhlIHN0cmVhbS4KVG9rZW4gZmluZE5vblplcm9MZW5ndGhUb2tlbihUb2tlbiB0b2tlbikgewogIHdoaWxlICh0b2tlbi5pc1N5bnRoZXRpYyAmJiB0b2tlbi5sZW5ndGggPT0gMCAmJiAhdG9rZW4uaXNFb2YpIHsKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICB9CiAgcmV0dXJuIHRva2VuOwp9CgovLy8gQSBudWxsLWF3YXJlIGFsdGVybmF0aXZlIHRvIGB0b2tlbi5vZmZzZXRgLiAgSWYgW3Rva2VuXSBpcyBgbnVsbGAsIHJldHVybnMKLy8vIGBUcmVlTm9kZS5ub09mZnNldGAuCmludCBvZmZzZXRGb3JUb2tlbihUb2tlbiB0b2tlbikgewogIHJldHVybiB0b2tlbiA9PSBudWxsID8gVHJlZU5vZGUubm9PZmZzZXQgOiB0b2tlbi5vZmZzZXQ7Cn0KCmJvb2wgaXNEaWdpdChpbnQgYykgPT4gYyA+PSAweDMwICYmIGMgPD0gMHgzOTsKCmJvb2wgaXNMZXR0ZXIoaW50IGMpID0+IGMgPj0gMHg0MSAmJiBjIDw9IDB4NUEgfHwgYyA+PSAweDYxICYmIGMgPD0gMHg3QTsKCmJvb2wgaXNMZXR0ZXJPckRpZ2l0KGludCBjKSA9PiBpc0xldHRlcihjKSB8fCBpc0RpZ2l0KGMpOwoKYm9vbCBpc1doaXRlc3BhY2UoaW50IGMpID0+IGMgPT0gMHgyMCB8fCBjID09IDB4QSB8fCBjID09IDB4RCB8fCBjID09IDB4OTsKCi8vLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdG9rZW4gbWF0Y2hlcyBvbmUgb2YgdGhlIGdpdmVuIHZhbHVlcy4KYm9vbCBpc09uZU9mKFRva2VuIHRva2VuLCBJdGVyYWJsZTxTdHJpbmc+IHZhbHVlcykgewogIGZvciAoU3RyaW5nIHRva2VuVmFsdWUgaW4gdmFsdWVzKSB7CiAgICBpZiAob3B0aW9uYWwodG9rZW5WYWx1ZSwgdG9rZW4pKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KICByZXR1cm4gZmFsc2U7Cn0KCi8vLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdG9rZW4gbWF0Y2hlcyBvbmUgb2YgdGhlIGdpdmVuIHZhbHVlcyBvciBpcyBFT0YuCmJvb2wgaXNPbmVPZk9yRW9mKFRva2VuIHRva2VuLCBJdGVyYWJsZTxTdHJpbmc+IHZhbHVlcykgewogIGZvciAoU3RyaW5nIHRva2VuVmFsdWUgaW4gdmFsdWVzKSB7CiAgICBpZiAob3B0aW9uYWwodG9rZW5WYWx1ZSwgdG9rZW4pKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KICByZXR1cm4gdG9rZW4uaXNFb2Y7Cn0KCi8vLyBBIG51bGwtYXdhcmUgYWx0ZXJuYXRpdmUgdG8gYHRva2VuLmxlbmd0aGAuICBJZiBbdG9rZW5dIGlzIGBudWxsYCwgcmV0dXJucwovLy8gW25vTGVuZ3RoXS4KaW50IGxlbmd0aEZvclRva2VuKFRva2VuIHRva2VuKSB7CiAgcmV0dXJuIHRva2VuID09IG51bGwgPyBub0xlbmd0aCA6IHRva2VuLmxlbmd0aDsKfQoKLy8vIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgc3BhbiBmcm9tIFtiZWdpbl0gdG8gW2VuZF0gKGluY2x1c2l2ZSkuIElmIGJvdGgKLy8vIHRva2VucyBhcmUgbnVsbCwgcmV0dXJuIFtub0xlbmd0aF0uIElmIG9uZSBvZiB0aGUgdG9rZW5zIGFyZSBudWxsLCByZXR1cm4KLy8vIHRoZSBsZW5ndGggb2YgdGhlIG90aGVyIHRva2VuLgppbnQgbGVuZ3RoT2ZTcGFuKFRva2VuIGJlZ2luLCBUb2tlbiBlbmQpIHsKICBpZiAoYmVnaW4gPT0gbnVsbCkgcmV0dXJuIGxlbmd0aEZvclRva2VuKGVuZCk7CiAgaWYgKGVuZCA9PSBudWxsKSByZXR1cm4gbGVuZ3RoRm9yVG9rZW4oYmVnaW4pOwogIHJldHVybiBlbmQub2Zmc2V0ICsgZW5kLmxlbmd0aCAtIGJlZ2luLm9mZnNldDsKfQoKVG9rZW4gc2tpcE1ldGFkYXRhKFRva2VuIHRva2VuKSB7CiAgdG9rZW4gPSB0b2tlbi5uZXh0OwogIGFzc2VydChvcHRpb25hbCgnQCcsIHRva2VuKSk7CiAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgaWYgKG5leHQuaXNJZGVudGlmaWVyKSB7CiAgICB0b2tlbiA9IG5leHQ7CiAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIHdoaWxlIChvcHRpb25hbCgnLicsIG5leHQpKSB7CiAgICAgIHRva2VuID0gbmV4dDsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIGlmIChuZXh0LmlzSWRlbnRpZmllcikgewogICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgfQogICAgfQogICAgaWYgKG9wdGlvbmFsKCcoJywgbmV4dCkgJiYgIW5leHQuZW5kR3JvdXAuaXNTeW50aGV0aWMpIHsKICAgICAgdG9rZW4gPSBuZXh0LmVuZEdyb3VwOwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIH0KICB9CiAgcmV0dXJuIHRva2VuOwp9CgovLy8gU3BsaXQgYD49YCBpbnRvIHR3byBzZXBhcmF0ZSB0b2tlbnMuCi8vLyBDYWxsIFtUb2tlbi5zZXROZXh0XSB0byBhZGQgdGhlIHRva2VuIHRvIHRoZSBzdHJlYW0uClRva2VuIHNwbGl0R3RFcShUb2tlbiB0b2tlbikgewogIGFzc2VydChvcHRpb25hbCgnPj0nLCB0b2tlbikpOwogIHJldHVybiBuZXcgU2ltcGxlVG9rZW4oCiAgICAgIFRva2VuVHlwZS5HVCwgdG9rZW4uY2hhck9mZnNldCwgdG9rZW4ucHJlY2VkaW5nQ29tbWVudHMpCiAgICAuLnNldE5leHQobmV3IFNpbXBsZVRva2VuKFRva2VuVHlwZS5FUSwgdG9rZW4uY2hhck9mZnNldCArIDEpCiAgICAgIC8vIFNldCBuZXh0IHJhdGhlciB0aGFuIGNhbGxpbmcgVG9rZW4uc2V0TmV4dAogICAgICAvLyBzbyB0aGF0IHRoZSBwcmV2aW91cyB0b2tlbiBpcyBub3Qgc2V0LgogICAgICAuLm5leHQgPSB0b2tlbi5uZXh0KTsKfQoKLy8vIFNwbGl0IGA+PmAgaW50byB0d28gc2VwYXJhdGUgdG9rZW5zLgovLy8gQ2FsbCBbVG9rZW4uc2V0TmV4dF0gdG8gYWRkIHRoZSB0b2tlbiB0byB0aGUgc3RyZWFtLgpTaW1wbGVUb2tlbiBzcGxpdEd0R3QoVG9rZW4gdG9rZW4pIHsKICBhc3NlcnQob3B0aW9uYWwoJz4+JywgdG9rZW4pKTsKICByZXR1cm4gbmV3IFNpbXBsZVRva2VuKAogICAgICBUb2tlblR5cGUuR1QsIHRva2VuLmNoYXJPZmZzZXQsIHRva2VuLnByZWNlZGluZ0NvbW1lbnRzKQogICAgLi5zZXROZXh0KG5ldyBTaW1wbGVUb2tlbihUb2tlblR5cGUuR1QsIHRva2VuLmNoYXJPZmZzZXQgKyAxKQogICAgICAvLyBTZXQgbmV4dCByYXRoZXIgdGhhbiBjYWxsaW5nIFRva2VuLnNldE5leHQKICAgICAgLy8gc28gdGhhdCB0aGUgcHJldmlvdXMgdG9rZW4gaXMgbm90IHNldC4KICAgICAgLi5uZXh0ID0gdG9rZW4ubmV4dCk7Cn0KCi8vLyBTcGxpdCBgPj49YCBpbnRvIHRocmVlIHNlcGFyYXRlIHRva2Vucy4KLy8vIENhbGwgW1Rva2VuLnNldE5leHRdIHRvIGFkZCB0aGUgdG9rZW4gdG8gdGhlIHN0cmVhbS4KVG9rZW4gc3BsaXRHdEd0RXEoVG9rZW4gdG9rZW4pIHsKICBhc3NlcnQob3B0aW9uYWwoJz4+PScsIHRva2VuKSk7CiAgcmV0dXJuIG5ldyBTaW1wbGVUb2tlbigKICAgICAgVG9rZW5UeXBlLkdULCB0b2tlbi5jaGFyT2Zmc2V0LCB0b2tlbi5wcmVjZWRpbmdDb21tZW50cykKICAgIC4uc2V0TmV4dChuZXcgU2ltcGxlVG9rZW4oVG9rZW5UeXBlLkdULCB0b2tlbi5jaGFyT2Zmc2V0ICsgMSkKICAgICAgLi5zZXROZXh0KG5ldyBTaW1wbGVUb2tlbihUb2tlblR5cGUuRVEsIHRva2VuLmNoYXJPZmZzZXQgKyAyKQogICAgICAgIC8vIFNldCBuZXh0IHJhdGhlciB0aGFuIGNhbGxpbmcgVG9rZW4uc2V0TmV4dAogICAgICAgIC8vIHNvIHRoYXQgdGhlIHByZXZpb3VzIHRva2VuIGlzIG5vdCBzZXQuCiAgICAgICAgLi5uZXh0ID0gdG9rZW4ubmV4dCkpOwp9CgovLy8gU3BsaXQgYD4+PWAgaW50byB0d28gc2VwYXJhdGUgdG9rZW5zLi4uIGA+YCBmb2xsb3dlZCBieSBgPj1gLgovLy8gQ2FsbCBbVG9rZW4uc2V0TmV4dF0gdG8gYWRkIHRoZSB0b2tlbiB0byB0aGUgc3RyZWFtLgpUb2tlbiBzcGxpdEd0RnJvbUd0R3RFcShUb2tlbiB0b2tlbikgewogIGFzc2VydChvcHRpb25hbCgnPj49JywgdG9rZW4pKTsKICByZXR1cm4gbmV3IFNpbXBsZVRva2VuKAogICAgICBUb2tlblR5cGUuR1QsIHRva2VuLmNoYXJPZmZzZXQsIHRva2VuLnByZWNlZGluZ0NvbW1lbnRzKQogICAgLi5zZXROZXh0KG5ldyBTaW1wbGVUb2tlbihUb2tlblR5cGUuR1RfRVEsIHRva2VuLmNoYXJPZmZzZXQgKyAxKQogICAgICAvLyBTZXQgbmV4dCByYXRoZXIgdGhhbiBjYWxsaW5nIFRva2VuLnNldE5leHQKICAgICAgLy8gc28gdGhhdCB0aGUgcHJldmlvdXMgdG9rZW4gaXMgbm90IHNldC4KICAgICAgLi5uZXh0ID0gdG9rZW4ubmV4dCk7Cn0KCi8vLyBTcGxpdCBgPj4+YCBpbnRvIHR3byBzZXBhcmF0ZSB0b2tlbnMuLi4gYD5gIGZvbGxvd2VkIGJ5IGA+PmAuCi8vLyBDYWxsIFtUb2tlbi5zZXROZXh0XSB0byBhZGQgdGhlIHRva2VuIHRvIHRoZSBzdHJlYW0uClRva2VuIHNwbGl0R3RGcm9tR3RHdEd0KFRva2VuIHRva2VuKSB7CiAgYXNzZXJ0KG9wdGlvbmFsKCc+Pj4nLCB0b2tlbikpOwogIHJldHVybiBuZXcgU2ltcGxlVG9rZW4oCiAgICAgIFRva2VuVHlwZS5HVCwgdG9rZW4uY2hhck9mZnNldCwgdG9rZW4ucHJlY2VkaW5nQ29tbWVudHMpCiAgICAuLnNldE5leHQobmV3IFNpbXBsZVRva2VuKFRva2VuVHlwZS5HVF9HVCwgdG9rZW4uY2hhck9mZnNldCArIDEpCiAgICAgIC8vIFNldCBuZXh0IHJhdGhlciB0aGFuIGNhbGxpbmcgVG9rZW4uc2V0TmV4dAogICAgICAvLyBzbyB0aGF0IHRoZSBwcmV2aW91cyB0b2tlbiBpcyBub3Qgc2V0LgogICAgICAuLm5leHQgPSB0b2tlbi5uZXh0KTsKfQoKLy8vIFNwbGl0IGA+Pj49YCBpbnRvIHR3byBzZXBhcmF0ZSB0b2tlbnMuLi4gYD5gIGZvbGxvd2VkIGJ5IGA+Pj1gLgovLy8gQ2FsbCBbVG9rZW4uc2V0TmV4dF0gdG8gYWRkIHRoZSB0b2tlbiB0byB0aGUgc3RyZWFtLgpUb2tlbiBzcGxpdEd0RnJvbUd0R3RHdEVxKFRva2VuIHRva2VuKSB7CiAgYXNzZXJ0KG9wdGlvbmFsKCc+Pj49JywgdG9rZW4pKTsKICByZXR1cm4gbmV3IFNpbXBsZVRva2VuKAogICAgICBUb2tlblR5cGUuR1QsIHRva2VuLmNoYXJPZmZzZXQsIHRva2VuLnByZWNlZGluZ0NvbW1lbnRzKQogICAgLi5zZXROZXh0KG5ldyBTaW1wbGVUb2tlbihUb2tlblR5cGUuR1RfR1RfRVEsIHRva2VuLmNoYXJPZmZzZXQgKyAxKQogICAgICAvLyBTZXQgbmV4dCByYXRoZXIgdGhhbiBjYWxsaW5nIFRva2VuLnNldE5leHQKICAgICAgLy8gc28gdGhhdCB0aGUgcHJldmlvdXMgdG9rZW4gaXMgbm90IHNldC4KICAgICAgLi5uZXh0ID0gdG9rZW4ubmV4dCk7Cn0KCi8vLyBSZXR1cm4gYSBzeW50aGV0aWMgYDxgIGZvbGxvd2VkIGJ5IFtuZXh0XS4KLy8vIENhbGwgW1Rva2VuLnNldE5leHRdIHRvIGFkZCB0aGUgdG9rZW4gdG8gdGhlIHN0cmVhbS4KVG9rZW4gc3ludGhldGljR3QoVG9rZW4gbmV4dCkgewogIHJldHVybiBuZXcgU3ludGhldGljVG9rZW4oVG9rZW5UeXBlLkdULCBuZXh0LmNoYXJPZmZzZXQpCiAgICAvLyBTZXQgbmV4dCByYXRoZXIgdGhhbiBjYWxsaW5nIFRva2VuLnNldE5leHQKICAgIC8vIHNvIHRoYXQgdGhlIHByZXZpb3VzIHRva2VuIGlzIG5vdCBzZXQuCiAgICAuLm5leHQgPSBuZXh0Owp9CoDWAE5OPAEbATABLAElASI9AT4rLgIBRjsyIhoRBBYbMhIXBBACAT01NDMsHA0GFgQQAgE8NVEsQxgEEAIBTxkiOwIBLwFKAToBSwFENSYnEwYEEAIBTjomJxMGBBYCAU8QIjICAU5OIysxMTECASIWIBsbEhciFBkfFhsIBj0dGQYEEAIBKTkfIRo/QjQwHAIBKTklIRo/QjQwHAIBLDkhIho/QkQ2Mh8CAUI5JyIaP0U0MBwCAUI5JyIaP0U0MBwCAUQ5KSMaP0g0MBwCAS85IDsyLhMCASxwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL3V0aWwuZGFydD9zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvc291cmNlL3N0YWNrX2xpc3RlbmVyLmRhcnTAAEClLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuc3RhY2tfbGlzdGVuZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdyBBc3luY01hcmtlciwgRXhwcmVzc2lvbiwgRnVuY3Rpb25Ob2RlLCBUcmVlTm9kZTsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cKICAgICAgICBDb2RlLAogICAgICAgIExvY2F0ZWRNZXNzYWdlLAogICAgICAgIE1lc3NhZ2UsCiAgICAgICAgY29kZUNhdGNoU3ludGF4RXh0cmFQYXJhbWV0ZXJzLAogICAgICAgIGNvZGVOYXRpdmVDbGF1c2VTaG91bGRCZUFubm90YXRpb24sCiAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1TdGFja05vdEVtcHR5OwoKaW1wb3J0ICcuLi9wYXJzZXIuZGFydCcKICAgIHNob3cgTGlzdGVuZXIsIE1lbWJlcktpbmQsIFBhcnNlciwgbGVuZ3RoT2ZTcGFuLCBvZmZzZXRGb3JUb2tlbjsKCmltcG9ydCAnLi4vcGFyc2VyL2lkZW50aWZpZXJfY29udGV4dC5kYXJ0JyBzaG93IElkZW50aWZpZXJDb250ZXh0OwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JwogICAgc2hvdyBpbnRlcm5hbFByb2JsZW0sIHVuaGFuZGxlZCwgdW5pbXBsZW1lbnRlZCwgdW5zdXBwb3J0ZWQ7CgppbXBvcnQgJy4uL3F1b3RlLmRhcnQnIHNob3cgdW5lc2NhcGVTdHJpbmc7CgppbXBvcnQgJy4uL3NjYW5uZXIuZGFydCcgc2hvdyBUb2tlbjsKCmltcG9ydCAndmFsdWVfa2luZHMuZGFydCc7CgplbnVtIE51bGxWYWx1ZSB7CiAgQXJndW1lbnRzLAogIEFzLAogIEF3YWl0VG9rZW4sCiAgQmxvY2ssCiAgQnJlYWtUYXJnZXQsCiAgQ2FzY2FkZVJlY2VpdmVyLAogIENvbWJpbmF0b3JzLAogIENvbW1lbnRzLAogIENvbmRpdGlvbmFsVXJpcywKICBDb25kaXRpb25hbGx5U2VsZWN0ZWRJbXBvcnQsCiAgQ29uc3RydWN0b3JJbml0aWFsaXplclNlcGFyYXRvciwKICBDb25zdHJ1Y3RvckluaXRpYWxpemVycywKICBDb25zdHJ1Y3RvclJlZmVyZW5jZUNvbnRpbnVhdGlvbkFmdGVyVHlwZUFyZ3VtZW50cywKICBDb250aW51ZVRhcmdldCwKICBEZWZlcnJlZCwKICBEb2N1bWVudGF0aW9uQ29tbWVudCwKICBFeHByZXNzaW9uLAogIEV4dGVuZHNDbGF1c2UsCiAgRmllbGRJbml0aWFsaXplciwKICBGb3JtYWxQYXJhbWV0ZXJzLAogIEZ1bmN0aW9uQm9keSwKICBGdW5jdGlvbkJvZHlBc3luY1Rva2VuLAogIEZ1bmN0aW9uQm9keVN0YXJUb2tlbiwKICBJZGVudGlmaWVyLAogIElkZW50aWZpZXJMaXN0LAogIEluaXRpYWxpemVycywKICBMYWJlbHMsCiAgTWV0YWRhdGEsCiAgTW9kaWZpZXJzLAogIE5hbWUsCiAgUGFyYW1ldGVyRGVmYXVsdFZhbHVlLAogIFByZWZpeCwKICBTdHJpbmdMaXRlcmFsLAogIFN3aXRjaFNjb3BlLAogIFRva2VuLAogIFR5cGUsCiAgVHlwZUFyZ3VtZW50cywKICBUeXBlQnVpbGRlckxpc3QsCiAgVHlwZUxpc3QsCiAgVHlwZVZhcmlhYmxlLAogIFR5cGVWYXJpYWJsZXMsCiAgVmFyRmluYWxPckNvbnN0VG9rZW4sCiAgV2l0aENsYXVzZSwKfQoKYWJzdHJhY3QgY2xhc3MgU3RhY2tMaXN0ZW5lciBleHRlbmRzIExpc3RlbmVyIHsKICBmaW5hbCBTdGFjayBzdGFjayA9IG5ldyBTdGFjaygpOwoKICAvLy8gQ2hlY2tzIHRoYXQgW3ZhbHVlXSBtYXRjaGVzIHRoZSBleHBlY3RlZCBba2luZF0uCiAgLy8vCiAgLy8vIFVzZSB0aGlzIGluIGFzc2VydCBzdGF0ZW1lbnRzIGxpa2UKICAvLy8KICAvLy8gICAgIGFzc2VydChjaGVja1ZhbHVlKHRva2VuLCBWYWx1ZUtpbmQuVG9rZW4sIHZhbHVlKSk7CiAgLy8vCiAgLy8vIHRvIGRvY3VtZW50IGFuZCB2YWxpZGF0ZSB0aGUgZXhwZWN0ZWQgdmFsdWUga2luZC4KICBib29sIGNoZWNrVmFsdWUoVG9rZW4gdG9rZW4sIFZhbHVlS2luZCBraW5kLCBPYmplY3QgdmFsdWUpIHsKICAgIGlmICgha2luZC5jaGVjayh2YWx1ZSkpIHsKICAgICAgU3RyaW5nIG1lc3NhZ2UgPSAnVW5leHBlY3RlZCB2YWx1ZSBgJHt2YWx1ZX1gICgke3ZhbHVlLnJ1bnRpbWVUeXBlfSkuICcKICAgICAgICAgICdFeHBlY3RlZCAke2tpbmR9Lic7CiAgICAgIGlmICh0b2tlbiAhPSBudWxsKSB7CiAgICAgICAgLy8gSWYgb2Zmc2V0IGlzIGF2YWlsYWJsZSByZXBvcnQgYW5kIGludGVybmFsIHByb2JsZW0gdG8gc2hvdyB0aGUKICAgICAgICAvLyBwYXJzZWQgY29kZSBpbiB0aGUgb3V0cHV0LgogICAgICAgIHRocm93IGludGVybmFsUHJvYmxlbSgKICAgICAgICAgICAgbmV3IE1lc3NhZ2UobnVsbCwgbWVzc2FnZTogbWVzc2FnZSksIHRva2VuLmNoYXJPZmZzZXQsIHVyaSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbWVzc2FnZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLy8gQ2hlY2tzIHRoZSB0b3Agb2YgdGhlIGN1cnJlbnQgc3RhY2sgYWdhaW5zdCBba2luZHNdLiBJZiBhIG1pc21hdGNoIGlzCiAgLy8vIGZvdW5kLCBhIHRvcCBvZiB0aGUgY3VycmVudCBzdGFjayBpcyBwcmludCBhbG9uZyB3aXRoIHRoZSBleHBlY3RlZCBba2luZHNdCiAgLy8vIG1hcmtpbmcgdGhlIGZyYW1lcyB0aGF0IGRvbid0IG1hdGNoLCBhbmQgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KICAvLy8KICAvLy8gVXNlIHRoaXMgaW4gYXNzZXJ0IHN0YXRlbWVudHMgbGlrZQogIC8vLwogIC8vLyAgICAgYXNzZXJ0KGNoZWNrU3RhdGUodG9rZW4sIFtWYWx1ZUtpbmQuSW50ZWdlciwgVmFsdWVLaW5kLlN0cmluZ09yTnVsbF0pKQogIC8vLwogIC8vLyB0byBkb2N1bWVudCB0aGUgZXhwZWN0ZWQgc3RhY2sgYW5kIGdldCBlYXJsaWVyIGVycm9ycyBvbiB1bmV4cGVjdGVkIHN0YWNrCiAgLy8vIGNvbnRlbnQuCiAgYm9vbCBjaGVja1N0YXRlKFRva2VuIHRva2VuLCBMaXN0PFZhbHVlS2luZD4ga2luZHMpIHsKICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CiAgICBmb3IgKGludCBraW5kSW5kZXggPSAwOyBraW5kSW5kZXggPCBraW5kcy5sZW5ndGg7IGtpbmRJbmRleCsrKSB7CiAgICAgIGludCBzdGFja0luZGV4ID0gc3RhY2suYXJyYXlMZW5ndGggLSBraW5kSW5kZXggLSAxOwogICAgICBWYWx1ZUtpbmQga2luZCA9IGtpbmRzW2tpbmRJbmRleF07CiAgICAgIGlmIChzdGFja0luZGV4ID49IDApIHsKICAgICAgICBPYmplY3QgdmFsdWUgPSBzdGFjay5hcnJheVtzdGFja0luZGV4XTsKICAgICAgICBpZiAoIWtpbmQuY2hlY2sodmFsdWUpKSB7CiAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKCiAgICAgIFN0cmluZyBzYWZlVG9TdHJpbmcoT2JqZWN0IG9iamVjdCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICByZXR1cm4gJyRvYmplY3QnOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIC8vIEp1ZGdtZW50cyBmYWlsIG9uIHRvU3RyaW5nLgogICAgICAgICAgcmV0dXJuIG9iamVjdC5ydW50aW1lVHlwZS50b1N0cmluZygpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgU3RyaW5nIHBhZExlZnQoT2JqZWN0IG9iamVjdCwgaW50IGxlbmd0aCkgewogICAgICAgIFN0cmluZyB0ZXh0ID0gc2FmZVRvU3RyaW5nKG9iamVjdCk7CiAgICAgICAgaWYgKHRleHQubGVuZ3RoIDwgbGVuZ3RoKSB7CiAgICAgICAgICByZXR1cm4gJyAnICogKGxlbmd0aCAtIHRleHQubGVuZ3RoKSArIHRleHQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0ZXh0OwogICAgICB9CgogICAgICBTdHJpbmcgcGFkUmlnaHQoT2JqZWN0IG9iamVjdCwgaW50IGxlbmd0aCkgewogICAgICAgIFN0cmluZyB0ZXh0ID0gc2FmZVRvU3RyaW5nKG9iamVjdCk7CiAgICAgICAgaWYgKHRleHQubGVuZ3RoIDwgbGVuZ3RoKSB7CiAgICAgICAgICByZXR1cm4gdGV4dCArICcgJyAqIChsZW5ndGggLSB0ZXh0Lmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0ZXh0OwogICAgICB9CgogICAgICAvLyBDb21wdXRlIGtpbmQvc3RhY2sgZnJhbWUgaW5mb3JtYXRpb24gZm9yIGFsbCBleHBlY3RlZCB2YWx1ZXMgcGx1cyAzIG1vcmUKICAgICAgLy8gc3RhY2sgZWxlbWVudHMgaWYgYXZhaWxhYmxlLgogICAgICBmb3IgKGludCBraW5kSW5kZXggPSAwOyBraW5kSW5kZXggPCBraW5kcy5sZW5ndGggKyAzOyBraW5kSW5kZXgrKykgewogICAgICAgIGludCBzdGFja0luZGV4ID0gc3RhY2suYXJyYXlMZW5ndGggLSBraW5kSW5kZXggLSAxOwogICAgICAgIGlmIChzdGFja0luZGV4IDwgMCAmJiBraW5kSW5kZXggPj0ga2luZHMubGVuZ3RoKSB7CiAgICAgICAgICAvLyBObyBtb3JlIHN0YWNrIGVsZW1lbnRzIG5vciBraW5kcyB0byBkaXNwbGF5LgogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHNiLndyaXRlKHBhZExlZnQoa2luZEluZGV4LCA0KSk7CiAgICAgICAgc2Iud3JpdGUoJzogJyk7CiAgICAgICAgVmFsdWVLaW5kIGtpbmQ7CiAgICAgICAgaWYgKGtpbmRJbmRleCA8IGtpbmRzLmxlbmd0aCkgewogICAgICAgICAga2luZCA9IGtpbmRzW2tpbmRJbmRleF07CiAgICAgICAgICBzYi53cml0ZShwYWRSaWdodChraW5kLCA2MCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzYi53cml0ZShwYWRSaWdodCgnLS0tJywgNjApKTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YWNrSW5kZXggPj0gMCkgewogICAgICAgICAgT2JqZWN0IHZhbHVlID0gc3RhY2suYXJyYXlbc3RhY2tJbmRleF07CiAgICAgICAgICBpZiAoa2luZCA9PSBudWxsIHx8IGtpbmQuY2hlY2sodmFsdWUpKSB7CiAgICAgICAgICAgIHNiLndyaXRlKCcgJyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzYi53cml0ZSgnKicpOwogICAgICAgICAgfQogICAgICAgICAgc2Iud3JpdGUoc2FmZVRvU3RyaW5nKHZhbHVlKSk7CiAgICAgICAgICBzYi53cml0ZSgnICgke3ZhbHVlLnJ1bnRpbWVUeXBlfSknKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGtpbmQgPT0gbnVsbCkgewogICAgICAgICAgICBzYi53cml0ZSgnICcpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2Iud3JpdGUoJyonKTsKICAgICAgICAgIH0KICAgICAgICAgIHNiLndyaXRlKCctLS0nKTsKICAgICAgICB9CiAgICAgICAgc2Iud3JpdGVsbigpOwogICAgICB9CgogICAgICBTdHJpbmcgbWVzc2FnZSA9ICckcnVudGltZVR5cGUgZmFpbHVyZVxuJHNiJzsKICAgICAgaWYgKHRva2VuICE9IG51bGwpIHsKICAgICAgICAvLyBJZiBvZmZzZXQgaXMgYXZhaWxhYmxlIHJlcG9ydCBhbmQgaW50ZXJuYWwgcHJvYmxlbSB0byBzaG93IHRoZQogICAgICAgIC8vIHBhcnNlZCBjb2RlIGluIHRoZSBvdXRwdXQuCiAgICAgICAgdGhyb3cgaW50ZXJuYWxQcm9ibGVtKAogICAgICAgICAgICBuZXcgTWVzc2FnZShudWxsLCBtZXNzYWdlOiBtZXNzYWdlKSwgdG9rZW4uY2hhck9mZnNldCwgdXJpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBtZXNzYWdlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3VjY2VzczsKICB9CgogIEBvdmVycmlkZQogIFVyaSBnZXQgdXJpOwoKICB2b2lkIGRpc2NhcmQoaW50IG4pIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgIHBvcCgpOwogICAgfQogIH0KCiAgLy8gVE9ETyhhaGUpOiBUaGlzIGRvZXNuJ3QgYmVsb25nIGhlcmUuIE9ubHkgaW1wbGVtZW50ZWQgYnkgYm9keV9idWlsZGVyLmRhcnQKICAvLyBhbmQgYXN0X2J1aWxkZXIuZGFydC4KICB2b2lkIGZpbmlzaEZ1bmN0aW9uKAogICAgICBjb3ZhcmlhbnQgZm9ybWFscywgQXN5bmNNYXJrZXIgYXN5bmNNb2RpZmllciwgY292YXJpYW50IGJvZHkpIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgiZmluaXNoRnVuY3Rpb24iLCAtMSwgdXJpKTsKICB9CgogIC8vIFRPRE8oYWhlKTogVGhpcyBkb2Vzbid0IGJlbG9uZyBoZXJlLiBPbmx5IGltcGxlbWVudGVkIGJ5IGJvZHlfYnVpbGRlci5kYXJ0CiAgLy8gYW5kIGFzdF9idWlsZGVyLmRhcnQuCiAgZHluYW1pYyBmaW5pc2hGaWVsZHMoKSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoImZpbmlzaEZpZWxkcyIsIC0xLCB1cmkpOwogIH0KCiAgLy8gVE9ETyhhaGUpOiBUaGlzIGRvZXNuJ3QgYmVsb25nIGhlcmUuIE9ubHkgaW1wbGVtZW50ZWQgYnkgYm9keV9idWlsZGVyLmRhcnQKICAvLyBhbmQgYXN0X2J1aWxkZXIuZGFydC4KICBMaXN0PEV4cHJlc3Npb24+IGZpbmlzaE1ldGFkYXRhKFRyZWVOb2RlIHBhcmVudCkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJmaW5pc2hNZXRhZGF0YSIsIC0xLCB1cmkpOwogIH0KCiAgLy8gVE9ETyhhaGUpOiBUaGlzIGRvZXNuJ3QgYmVsb25nIGhlcmUuIE9ubHkgaW1wbGVtZW50ZWQgYnkgYm9keV9idWlsZGVyLmRhcnQKICAvLyBhbmQgYXN0X2J1aWxkZXIuZGFydC4KICB2b2lkIGV4aXRMb2NhbFNjb3BlKCkgPT4gdW5zdXBwb3J0ZWQoImV4aXRMb2NhbFNjb3BlIiwgLTEsIHVyaSk7CgogIC8vIFRPRE8oYWhlKTogVGhpcyBkb2Vzbid0IGJlbG9uZyBoZXJlLiBPbmx5IGltcGxlbWVudGVkIGJ5IGJvZHlfYnVpbGRlci5kYXJ0LgogIGR5bmFtaWMgcGFyc2VTaW5nbGVFeHByZXNzaW9uKAogICAgICBQYXJzZXIgcGFyc2VyLCBUb2tlbiB0b2tlbiwgRnVuY3Rpb25Ob2RlIHBhcmFtZXRlcnMpIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgiZmluaXNoU2luZ2xlRXhwcmVzc2lvbiIsIC0xLCB1cmkpOwogIH0KCiAgdm9pZCBwdXNoKE9iamVjdCBub2RlKSB7CiAgICBpZiAobm9kZSA9PSBudWxsKSB1bmhhbmRsZWQoIm51bGwiLCAicHVzaCIsIC0xLCB1cmkpOwogICAgc3RhY2sucHVzaChub2RlKTsKICB9CgogIHZvaWQgcHVzaElmTnVsbChUb2tlbiB0b2tlbk9yTnVsbCwgTnVsbFZhbHVlIG51bGxWYWx1ZSkgewogICAgaWYgKHRva2VuT3JOdWxsID09IG51bGwpIHN0YWNrLnB1c2gobnVsbFZhbHVlKTsKICB9CgogIE9iamVjdCBwZWVrKCkgPT4gc3RhY2suaXNOb3RFbXB0eSA/IHN0YWNrLmxhc3QgOiBudWxsOwoKICBPYmplY3QgcG9wKFtOdWxsVmFsdWUgbnVsbFZhbHVlXSkgewogICAgcmV0dXJuIHN0YWNrLnBvcChudWxsVmFsdWUpOwogIH0KCiAgT2JqZWN0IHBvcElmTm90TnVsbChPYmplY3QgdmFsdWUpIHsKICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gbnVsbCA6IHBvcCgpOwogIH0KCiAgdm9pZCBkZWJ1Z0V2ZW50KFN0cmluZyBuYW1lKSB7CiAgICAvLyBwcmludEV2ZW50KG5hbWUpOwogIH0KCiAgdm9pZCBwcmludEV2ZW50KFN0cmluZyBuYW1lKSB7CiAgICBwcmludCgnXG4tLS0tLS0tLS0tLS0tLS0tLS0nKTsKICAgIGZvciAoT2JqZWN0IG8gaW4gc3RhY2sudmFsdWVzKSB7CiAgICAgIFN0cmluZyBzID0gIiAgJG8iOwogICAgICBpbnQgaW5kZXggPSBzLmluZGV4T2YoIlxuIik7CiAgICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICAgIHMgPSBzLnN1YnN0cmluZygwLCBpbmRleCkgKyAiLi4uIjsKICAgICAgfQogICAgICBwcmludChzKTsKICAgIH0KICAgIHByaW50KCIgID4+ICRuYW1lIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGxvZ0V2ZW50KFN0cmluZyBuYW1lKSB7CiAgICBwcmludEV2ZW50KG5hbWUpOwogICAgdW5oYW5kbGVkKG5hbWUsICIkcnVudGltZVR5cGUiLCAtMSwgdXJpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQgY29udGV4dCkgewogICAgZGVidWdFdmVudCgiaGFuZGxlSWRlbnRpZmllciIpOwogICAgaWYgKCF0b2tlbi5pc1N5bnRoZXRpYykgewogICAgICBwdXNoKHRva2VuLmxleGVtZSk7CiAgICB9IGVsc2UgewogICAgICAvLyBUaGlzIGNvbWVzIGZyb20gYSBzeW50aGV0aWMgdG9rZW4gd2hpY2ggaXMgaW5zZXJ0ZWQgYnkgdGhlIHBhcnNlciBpbgogICAgICAvLyBhbiBhdHRlbXB0IHRvIHJlY292ZXIuICBUaGlzIGFsbW9zdCBhbHdheXMgbWVhbnMgdGhhdCB0aGUgcGFyc2VyIGhhcwogICAgICAvLyBnb3R0ZW4gdmVyeSBjb25mdXNlZCBhbmQgd2UgbmVlZCB0byBpZ25vcmUgdGhlIHJlc3VsdHMuCiAgICAgIHB1c2gobmV3IFBhcnNlclJlY292ZXJ5KHRva2VuLmNoYXJPZmZzZXQpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9OYW1lKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJOb05hbWUiKTsKICAgIHB1c2goTnVsbFZhbHVlLklkZW50aWZpZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRJbml0aWFsaXplcihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiSW5pdGlhbGl6ZXIiKTsKICB9CgogIHZvaWQgY2hlY2tFbXB0eShpbnQgY2hhck9mZnNldCkgewogICAgaWYgKHN0YWNrLmlzTm90RW1wdHkpIHsKICAgICAgaW50ZXJuYWxQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1TdGFja05vdEVtcHR5LndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgIiR7cnVudGltZVR5cGV9Iiwgc3RhY2sudmFsdWVzLmpvaW4oIlxuICAiKSksCiAgICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgICAgdXJpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVG9wTGV2ZWxEZWNsYXJhdGlvbihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiVG9wTGV2ZWxEZWNsYXJhdGlvbiIpOwogICAgY2hlY2tFbXB0eSh0b2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ29tcGlsYXRpb25Vbml0KGludCBjb3VudCwgVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkNvbXBpbGF0aW9uVW5pdCIpOwogICAgY2hlY2tFbXB0eSh0b2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2xhc3NFeHRlbmRzKFRva2VuIGV4dGVuZHNLZXl3b3JkKSB7CiAgICBkZWJ1Z0V2ZW50KCJDbGFzc0V4dGVuZHMiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTWl4aW5PbihUb2tlbiBvbktleXdvcmQsIGludCB0eXBlQ291bnQpIHsKICAgIGRlYnVnRXZlbnQoIk1peGluT24iKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2xhc3NIZWFkZXIoVG9rZW4gYmVnaW4sIFRva2VuIGNsYXNzS2V5d29yZCwgVG9rZW4gbmF0aXZlVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkNsYXNzSGVhZGVyIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU1peGluSGVhZGVyKFRva2VuIG1peGluS2V5d29yZCkgewogICAgZGVidWdFdmVudCgiTWl4aW5IZWFkZXIiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlUmVjb3ZlckNsYXNzSGVhZGVyKCkgewogICAgZGVidWdFdmVudCgiUmVjb3ZlckNsYXNzSGVhZGVyIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVJlY292ZXJNaXhpbkhlYWRlcigpIHsKICAgIGRlYnVnRXZlbnQoIlJlY292ZXJNaXhpbkhlYWRlciIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVDbGFzc09yTWl4aW5JbXBsZW1lbnRzKAogICAgICBUb2tlbiBpbXBsZW1lbnRzS2V5d29yZCwgaW50IGludGVyZmFjZXNDb3VudCkgewogICAgZGVidWdFdmVudCgiQ2xhc3NJbXBsZW1lbnRzIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vVHlwZUFyZ3VtZW50cyhUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiTm9UeXBlQXJndW1lbnRzIik7CiAgICBwdXNoKE51bGxWYWx1ZS5UeXBlQXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9UeXBlVmFyaWFibGVzKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJOb1R5cGVWYXJpYWJsZXMiKTsKICAgIHB1c2goTnVsbFZhbHVlLlR5cGVWYXJpYWJsZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb0NvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJOb0NvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vVHlwZShUb2tlbiBsYXN0Q29uc3VtZWQpIHsKICAgIGRlYnVnRXZlbnQoIk5vVHlwZSIpOwogICAgcHVzaChOdWxsVmFsdWUuVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vRm9ybWFsUGFyYW1ldGVycyhUb2tlbiB0b2tlbiwgTWVtYmVyS2luZCBraW5kKSB7CiAgICBkZWJ1Z0V2ZW50KCJOb0Zvcm1hbFBhcmFtZXRlcnMiKTsKICAgIHB1c2goTnVsbFZhbHVlLkZvcm1hbFBhcmFtZXRlcnMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb0FyZ3VtZW50cyhUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiTm9Bcmd1bWVudHMiKTsKICAgIHB1c2goTnVsbFZhbHVlLkFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keShUb2tlbiBuYXRpdmVUb2tlbiwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBkZWJ1Z0V2ZW50KCJOYXRpdmVGdW5jdGlvbkJvZHkiKTsKICAgIHB1c2goTnVsbFZhbHVlLkZ1bmN0aW9uQm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keUlnbm9yZWQoVG9rZW4gbmF0aXZlVG9rZW4sIFRva2VuIHNlbWljb2xvbikgewogICAgZGVidWdFdmVudCgiTmF0aXZlRnVuY3Rpb25Cb2R5SWdub3JlZCIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOYXRpdmVGdW5jdGlvbkJvZHlTa2lwcGVkKFRva2VuIG5hdGl2ZVRva2VuLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGRlYnVnRXZlbnQoIk5hdGl2ZUZ1bmN0aW9uQm9keVNraXBwZWQiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9GdW5jdGlvbkJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk5vRnVuY3Rpb25Cb2R5Iik7CiAgICBwdXNoKE51bGxWYWx1ZS5GdW5jdGlvbkJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb0luaXRpYWxpemVycygpIHsKICAgIGRlYnVnRXZlbnQoIk5vSW5pdGlhbGl6ZXJzIik7CiAgICBwdXNoKE51bGxWYWx1ZS5Jbml0aWFsaXplcnMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVQYXJlbnRoZXNpemVkQ29uZGl0aW9uKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJoYW5kbGVQYXJlbnRoZXNpemVkQ29uZGl0aW9uIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkxpdGVyYWxTdHJpbmcoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luTGl0ZXJhbFN0cmluZyIpOwogICAgcHVzaCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZExpdGVyYWxTdHJpbmcoaW50IGludGVycG9sYXRpb25Db3VudCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImVuZExpdGVyYWxTdHJpbmciKTsKICAgIGlmIChpbnRlcnBvbGF0aW9uQ291bnQgPT0gMCkgewogICAgICBUb2tlbiB0b2tlbiA9IHBvcCgpOwogICAgICBwdXNoKHVuZXNjYXBlU3RyaW5nKHRva2VuLmxleGVtZSwgdG9rZW4sIHRoaXMpKTsKICAgIH0gZWxzZSB7CiAgICAgIHVuaW1wbGVtZW50ZWQoInN0cmluZyBpbnRlcnBvbGF0aW9uIiwgZW5kVG9rZW4uY2hhck9mZnNldCwgdXJpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTmF0aXZlQ2xhdXNlKFRva2VuIG5hdGl2ZVRva2VuLCBib29sIGhhc05hbWUpIHsKICAgIGRlYnVnRXZlbnQoIk5hdGl2ZUNsYXVzZSIpOwogICAgaWYgKGhhc05hbWUpIHsKICAgICAgcG9wKCk7IC8vIFBvcCB0aGUgbmF0aXZlIG5hbWUgd2hpY2ggaXMgYSBTdHJpbmcuCiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZURpcmVjdGl2ZXNPbmx5KCkgewogICAgcG9wKCk7IC8vIERpc2NhcmQgdGhlIG1ldGFkYXRhLgogIH0KCiAgdm9pZCBoYW5kbGVFeHRyYW5lb3VzRXhwcmVzc2lvbihUb2tlbiB0b2tlbiwgTWVzc2FnZSBtZXNzYWdlKSB7CiAgICBkZWJ1Z0V2ZW50KCJFeHRyYW5lb3VzRXhwcmVzc2lvbiIpOwogICAgcG9wKCk7IC8vIERpc2NhcmQgdGhlIGV4dHJhbmVvdXMgZXhwcmVzc2lvbi4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ2FzZUV4cHJlc3Npb24oVG9rZW4gY29sb24pIHsKICAgIGRlYnVnRXZlbnQoIkNhc2VFeHByZXNzaW9uIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENhdGNoQ2xhdXNlKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJDYXRjaENsYXVzZSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVSZWNvdmVyYWJsZUVycm9yKAogICAgICBNZXNzYWdlIG1lc3NhZ2UsIFRva2VuIHN0YXJ0VG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJFcnJvcjogJHttZXNzYWdlLm1lc3NhZ2V9Iik7CiAgICBpZiAoaXNJZ25vcmVkRXJyb3IobWVzc2FnZS5jb2RlLCBzdGFydFRva2VuKSkgcmV0dXJuOwogICAgYWRkUHJvYmxlbShtZXNzYWdlLCBvZmZzZXRGb3JUb2tlbihzdGFydFRva2VuKSwKICAgICAgICBsZW5ndGhPZlNwYW4oc3RhcnRUb2tlbiwgZW5kVG9rZW4pKTsKICB9CgogIGJvb2wgaXNJZ25vcmVkRXJyb3IoQ29kZTxkeW5hbWljPiBjb2RlLCBUb2tlbiB0b2tlbikgewogICAgaWYgKGNvZGUgPT0gY29kZU5hdGl2ZUNsYXVzZVNob3VsZEJlQW5ub3RhdGlvbikgewogICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogSWdub3JlIHRoaXMgZXJyb3IgdW50aWwgd2UgZGVwcmVjYXRlIGBuYXRpdmVgCiAgICAgIC8vIHN1cHBvcnQuCiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIGlmIChjb2RlID09IGNvZGVDYXRjaFN5bnRheEV4dHJhUGFyYW1ldGVycykgewogICAgICAvLyBJZ25vcmVkLiBUaGlzIGVycm9yIGlzIGhhbmRsZWQgYnkgdGhlIEJvZHlCdWlsZGVyLgogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVW5lc2NhcGVFcnJvcigKICAgICAgTWVzc2FnZSBtZXNzYWdlLCBUb2tlbiB0b2tlbiwgaW50IHN0cmluZ09mZnNldCwgaW50IGxlbmd0aCkgewogICAgYWRkUHJvYmxlbShtZXNzYWdlLCB0b2tlbi5jaGFyT2Zmc2V0ICsgc3RyaW5nT2Zmc2V0LCBsZW5ndGgpOwogIH0KCiAgdm9pZCBhZGRQcm9ibGVtKE1lc3NhZ2UgbWVzc2FnZSwgaW50IGNoYXJPZmZzZXQsIGludCBsZW5ndGgsCiAgICAgIHtib29sIHdhc0hhbmRsZWQ6IGZhbHNlLCBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0fSk7Cn0KCmNsYXNzIFN0YWNrIHsKICBMaXN0PE9iamVjdD4gYXJyYXkgPSBuZXcgTGlzdDxPYmplY3Q+KDgpOwogIGludCBhcnJheUxlbmd0aCA9IDA7CgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gYXJyYXlMZW5ndGggPiAwOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBhcnJheUxlbmd0aDsKCiAgT2JqZWN0IGdldCBsYXN0IHsKICAgIGZpbmFsIE9iamVjdCB2YWx1ZSA9IGFycmF5W2FycmF5TGVuZ3RoIC0gMV07CiAgICByZXR1cm4gdmFsdWUgaXMgTnVsbFZhbHVlID8gbnVsbCA6IHZhbHVlOwogIH0KCiAgdm9pZCBwdXNoKE9iamVjdCB2YWx1ZSkgewogICAgYXJyYXlbYXJyYXlMZW5ndGgrK10gPSB2YWx1ZTsKICAgIGlmIChhcnJheS5sZW5ndGggPT0gYXJyYXlMZW5ndGgpIHsKICAgICAgX2dyb3coKTsKICAgIH0KICB9CgogIE9iamVjdCBwb3AoTnVsbFZhbHVlIG51bGxWYWx1ZSkgewogICAgYXNzZXJ0KGFycmF5TGVuZ3RoID4gMCk7CiAgICBmaW5hbCBPYmplY3QgdmFsdWUgPSBhcnJheVstLWFycmF5TGVuZ3RoXTsKICAgIGFycmF5W2FycmF5TGVuZ3RoXSA9IG51bGw7CiAgICBpZiAodmFsdWUgaXMhIE51bGxWYWx1ZSkgewogICAgICByZXR1cm4gdmFsdWU7CiAgICB9IGVsc2UgaWYgKG51bGxWYWx1ZSA9PSBudWxsIHx8IHZhbHVlID09IG51bGxWYWx1ZSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KICB9CgogIExpc3Q8T2JqZWN0PiBwb3BMaXN0KGludCBjb3VudCwgTGlzdDxPYmplY3Q+IGxpc3QsIE51bGxWYWx1ZSBudWxsVmFsdWUpIHsKICAgIGFzc2VydChhcnJheUxlbmd0aCA+PSBjb3VudCk7CiAgICBmaW5hbCBMaXN0PE9iamVjdD4gYXJyYXkgPSB0aGlzLmFycmF5OwogICAgZmluYWwgaW50IGxlbmd0aCA9IGFycmF5TGVuZ3RoOwogICAgZmluYWwgaW50IHN0YXJ0SW5kZXggPSBsZW5ndGggLSBjb3VudDsKICAgIGJvb2wgaXNQYXJzZXJSZWNvdmVyeSA9IGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIGludCBhcnJheUluZGV4ID0gc3RhcnRJbmRleCArIGk7CiAgICAgIGZpbmFsIE9iamVjdCB2YWx1ZSA9IGFycmF5W2FycmF5SW5kZXhdOwogICAgICBhcnJheVthcnJheUluZGV4XSA9IG51bGw7CiAgICAgIGlmICh2YWx1ZSBpcyBOdWxsVmFsdWUgJiYgbnVsbFZhbHVlID09IG51bGwgfHwKICAgICAgICAgIGlkZW50aWNhbCh2YWx1ZSwgbnVsbFZhbHVlKSkgewogICAgICAgIGxpc3RbaV0gPSBudWxsOwogICAgICB9IGVsc2UgaWYgKHZhbHVlIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgICAgaXNQYXJzZXJSZWNvdmVyeSA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHZhbHVlIGlzIE51bGxWYWx1ZSkgewogICAgICAgICAgcHJpbnQodmFsdWUpOwogICAgICAgIH0KICAgICAgICBsaXN0W2ldID0gdmFsdWU7CiAgICAgIH0KICAgIH0KICAgIGFycmF5TGVuZ3RoIC09IGNvdW50OwoKICAgIHJldHVybiBpc1BhcnNlclJlY292ZXJ5ID8gbnVsbCA6IGxpc3Q7CiAgfQoKICBMaXN0PE9iamVjdD4gZ2V0IHZhbHVlcyB7CiAgICBmaW5hbCBpbnQgbGVuZ3RoID0gYXJyYXlMZW5ndGg7CiAgICBmaW5hbCBMaXN0PE9iamVjdD4gbGlzdCA9IG5ldyBMaXN0PE9iamVjdD4obGVuZ3RoKTsKICAgIGxpc3Quc2V0UmFuZ2UoMCwgbGVuZ3RoLCBhcnJheSk7CiAgICByZXR1cm4gbGlzdDsKICB9CgogIHZvaWQgX2dyb3coKSB7CiAgICBmaW5hbCBpbnQgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOwogICAgZmluYWwgTGlzdDxPYmplY3Q+IG5ld0FycmF5ID0gbmV3IExpc3Q8T2JqZWN0PihsZW5ndGggKiAyKTsKICAgIG5ld0FycmF5LnNldFJhbmdlKDAsIGxlbmd0aCwgYXJyYXksIDApOwogICAgYXJyYXkgPSBuZXdBcnJheTsKICB9Cn0KCi8vLyBIZWxwZXIgY29uc3RhbnQgZm9yIHBvcHBpbmcgYSBsaXN0IG9mIHRoZSB0b3Agb2YgYSBbU3RhY2tdLiAgVGhpcyBoZWxwZXIKLy8vIHJldHVybnMgbnVsbCBpbnN0ZWFkIG9mIGVtcHR5IGxpc3RzLCBhbmQgdGhlIGxpc3RzIHJldHVybmVkIGFyZSBvZiBmaXhlZAovLy8gbGVuZ3RoLgpjbGFzcyBGaXhlZE51bGxhYmxlTGlzdDxUPiB7CiAgY29uc3QgRml4ZWROdWxsYWJsZUxpc3QoKTsKCiAgTGlzdDxUPiBwb3AoU3RhY2sgc3RhY2ssIGludCBjb3VudCwgW051bGxWYWx1ZSBudWxsVmFsdWVdKSB7CiAgICBpZiAoY291bnQgPT0gMCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gc3RhY2sucG9wTGlzdChjb3VudCwgbmV3IExpc3Q8VD4oY291bnQpLCBudWxsVmFsdWUpOwogIH0KCiAgTGlzdDxUPiBwb3BQYWRkZWQoU3RhY2sgc3RhY2ssIGludCBjb3VudCwgaW50IHBhZGRpbmcsCiAgICAgIFtOdWxsVmFsdWUgbnVsbFZhbHVlXSkgewogICAgaWYgKGNvdW50ICsgcGFkZGluZyA9PSAwKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBzdGFjay5wb3BMaXN0KGNvdW50LCBuZXcgTGlzdDxUPihjb3VudCArIHBhZGRpbmcpLCBudWxsVmFsdWUpOwogIH0KfQoKLy8vIEhlbHBlciBjb25zdGFudCBmb3IgcG9wcGluZyBhIGxpc3Qgb2YgdGhlIHRvcCBvZiBhIFtTdGFja10uICBUaGlzIGhlbHBlcgovLy8gcmV0dXJucyBncm93YWJsZSBsaXN0cyAoYWxzbyB3aGVuIGVtcHR5KS4KY2xhc3MgR3Jvd2FibGVMaXN0PFQ+IHsKICBjb25zdCBHcm93YWJsZUxpc3QoKTsKCiAgTGlzdDxUPiBwb3AoU3RhY2sgc3RhY2ssIGludCBjb3VudCwgW051bGxWYWx1ZSBudWxsVmFsdWVdKSB7CiAgICByZXR1cm4gc3RhY2sucG9wTGlzdCgKICAgICAgICBjb3VudCwgbmV3IExpc3Q8VD4uZmlsbGVkKGNvdW50LCBudWxsLCBncm93YWJsZTogdHJ1ZSksIG51bGxWYWx1ZSk7CiAgfQp9CgpjbGFzcyBQYXJzZXJSZWNvdmVyeSB7CiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CiAgUGFyc2VyUmVjb3ZlcnkodGhpcy5jaGFyT2Zmc2V0KTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIlBhcnNlclJlY292ZXJ5KEAkY2hhck9mZnNldCkiOwp9CoJ2AE5OPAEeASE6AR0JDhgRKCwuARhFAUMBGkEBLAElARsBEQ0GDgkPEw8MEx8jGzYSDBgOERQUEBoZDhIQCgwNCBkKEQ8JCBETDBARGA4CATAjATcGKQY9Bjg/Hk4fG0omH0kPFwgGEQQBTFFEBikGUQZQDzgZRTopHTAiGwoPGQgGFCwBKw4cFikwCggBMiwkNgoVCAEzLCQ2ChUIAVImSzw7OhEKKRgYKCMoESkKHzIzGxMbDCkvER4bExsMGwoWCAE0G0omH0kPFwgGFAQBDA8BGCINBgQBUBsXRjMEAVAbGzEEAVAbNTMEAVAbQwFRIT07BAEbOhYEATw0BAE5ASYhBAEmKQQBIRkEASEjJRkjGSsIEAYZBAEMHxYuBAEMQiQeGg1OTkEyBgQBDCMaIAQBDCUfBAEkHBc+PBYQBgQBDC0nIgQBDDQjIgQBDDIgBAEMNxsEAQxPHwQBDC8fBAEMJCYEAQwkJgQBDCU2IwQBDCwjIwQBDCwjIwQBDFFIBAEMKhoaBAEMQCYmBAEMKB8fBAEMRiYiBAEMTS0EAQxNLQQBDCsiIgQBDCAiIgQBDDMwBAEMNCsEAQwpJhEEAQxCJCMbNw1HBgQBDD0gEzcGBAEMICQEAUIoMQQBDCgiBAEMJR8EAQwfOy06NC0EATk2RxITOTwTDRQGBAEMHERCBAE/PwIBDiwXASoBIQEUMS4EARwiJw8GBAEkHS8fHxQ6Ew0UBgQBTCIrJCsjJicuIDUpGCwhDyIYChkIBhoBKwQBHCQ4JREEARElQCwWBAIBTU0MHR0BPyFABAE5HytKBAIBTS4YGAE/GkwEAgEXGCMBNwIBNnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zb3VyY2Uvc3RhY2tfbGlzdGVuZXIuZGFydFFzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvdHlwZV9pbmZlcmVuY2UvdHlwZV9jb25zdHJhaW50X2dhdGhlcmVyLmRhcnTAAEtnLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS5tZCBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBDbGFzcywKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBEeW5hbWljVHlwZSwKICAgICAgICBGdW5jdGlvblR5cGUsCiAgICAgICAgSW50ZXJmYWNlVHlwZSwKICAgICAgICBNZW1iZXIsCiAgICAgICAgTmFtZSwKICAgICAgICBOYW1lZFR5cGUsCiAgICAgICAgUHJvY2VkdXJlLAogICAgICAgIFR5cGVQYXJhbWV0ZXIsCiAgICAgICAgVHlwZVBhcmFtZXRlclR5cGUsCiAgICAgICAgVm9pZFR5cGU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0JyBzaG93IHN1YnN0aXR1dGUsIFN1YnN0aXR1dGlvbjsKCmltcG9ydCAndHlwZV9zY2hlbWEuZGFydCcgc2hvdyBVbmtub3duVHlwZTsKCmltcG9ydCAndHlwZV9zY2hlbWFfZW52aXJvbm1lbnQuZGFydCcKICAgIHNob3cgVHlwZUNvbnN0cmFpbnQsIFR5cGVTY2hlbWFFbnZpcm9ubWVudCwgc3Vic3RpdHV0ZVR5cGVQYXJhbXM7CgppbXBvcnQgJy4uL25hbWVzLmRhcnQnIHNob3cgY2FsbE5hbWU7CgppbXBvcnQgJ3R5cGVfc2NoZW1hLmRhcnQnOwoKaW1wb3J0ICd0eXBlX3NjaGVtYV9lbnZpcm9ubWVudC5kYXJ0JzsKCi8vLyBDcmVhdGVzIGEgY29sbGVjdGlvbiBvZiBbVHlwZUNvbnN0cmFpbnRdcyBjb3JyZXNwb25kaW5nIHRvIHR5cGUgcGFyYW1ldGVycywKLy8vIGJhc2VkIG9uIGFuIGF0dGVtcHQgdG8gbWFrZSBvbmUgdHlwZSBzY2hlbWEgYSBzdWJ0eXBlIG9mIGFub3RoZXIuCmFic3RyYWN0IGNsYXNzIFR5cGVDb25zdHJhaW50R2F0aGVyZXIgewogIGZpbmFsIF9wcm90b0NvbnN0cmFpbnRzID0gPF9Qcm90b0NvbnN0cmFpbnQ+W107CgogIGZpbmFsIExpc3Q8VHlwZVBhcmFtZXRlcj4gX3BhcmFtZXRlcnNUb0NvbnN0cmFpbjsKCiAgLy8vIENyZWF0ZXMgYSBbVHlwZUNvbnN0cmFpbnRHYXRoZXJlcl0gd2hpY2ggaXMgcHJlcGFyZWQgdG8gZ2F0aGVyIHR5cGUKICAvLy8gY29uc3RyYWludHMgZm9yIHRoZSBnaXZlbiBbdHlwZVBhcmFtZXRlcnNdLgogIFR5cGVDb25zdHJhaW50R2F0aGVyZXIuc3ViY2xhc3NpbmcoSXRlcmFibGU8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMpCiAgICAgIDogX3BhcmFtZXRlcnNUb0NvbnN0cmFpbiA9IHR5cGVQYXJhbWV0ZXJzLnRvTGlzdCgpOwoKICBmYWN0b3J5IFR5cGVDb25zdHJhaW50R2F0aGVyZXIoVHlwZVNjaGVtYUVudmlyb25tZW50IGVudmlyb25tZW50LAogICAgICBJdGVyYWJsZTxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycykgewogICAgcmV0dXJuIG5ldyBUeXBlU2NoZW1hQ29uc3RyYWludEdhdGhlcmVyKGVudmlyb25tZW50LCB0eXBlUGFyYW1ldGVycyk7CiAgfQoKICBDbGFzcyBnZXQgb2JqZWN0Q2xhc3M7CgogIENsYXNzIGdldCBmdW5jdGlvbkNsYXNzOwoKICBDbGFzcyBnZXQgZnV0dXJlT3JDbGFzczsKCiAgQ2xhc3MgZ2V0IG51bGxDbGFzczsKCiAgdm9pZCBhZGRVcHBlckJvdW5kKFR5cGVDb25zdHJhaW50IGNvbnN0cmFpbnQsIERhcnRUeXBlIHVwcGVyKTsKCiAgdm9pZCBhZGRMb3dlckJvdW5kKFR5cGVDb25zdHJhaW50IGNvbnN0cmFpbnQsIERhcnRUeXBlIGxvd2VyKTsKCiAgTWVtYmVyIGdldEludGVyZmFjZU1lbWJlcihDbGFzcyBjbGFzc18sIE5hbWUgbmFtZSwge2Jvb2wgc2V0dGVyOiBmYWxzZX0pOwoKICBJbnRlcmZhY2VUeXBlIGdldFR5cGVBc0luc3RhbmNlT2YoSW50ZXJmYWNlVHlwZSB0eXBlLCBDbGFzcyBzdXBlcmNsYXNzKTsKCiAgSW50ZXJmYWNlVHlwZSBmdXR1cmVUeXBlKERhcnRUeXBlIHR5cGUpOwoKICAvLy8gUmV0dXJucyB0aGUgc2V0IG9mIHR5cGUgY29uc3RyYWludHMgdGhhdCB3YXMgZ2F0aGVyZWQuCiAgTWFwPFR5cGVQYXJhbWV0ZXIsIFR5cGVDb25zdHJhaW50PiBjb21wdXRlQ29uc3RyYWludHMoKSB7CiAgICBNYXA8VHlwZVBhcmFtZXRlciwgVHlwZUNvbnN0cmFpbnQ+IHJlc3VsdCA9CiAgICAgICAgPFR5cGVQYXJhbWV0ZXIsIFR5cGVDb25zdHJhaW50Pnt9OwogICAgZm9yIChUeXBlUGFyYW1ldGVyIHBhcmFtZXRlciBpbiBfcGFyYW1ldGVyc1RvQ29uc3RyYWluKSB7CiAgICAgIHJlc3VsdFtwYXJhbWV0ZXJdID0gbmV3IFR5cGVDb25zdHJhaW50KCk7CiAgICB9CiAgICBmb3IgKF9Qcm90b0NvbnN0cmFpbnQgcHJvdG9Db25zdHJhaW50IGluIF9wcm90b0NvbnN0cmFpbnRzKSB7CiAgICAgIGlmIChwcm90b0NvbnN0cmFpbnQuaXNVcHBlcikgewogICAgICAgIGFkZFVwcGVyQm91bmQocmVzdWx0W3Byb3RvQ29uc3RyYWludC5wYXJhbWV0ZXJdLCBwcm90b0NvbnN0cmFpbnQuYm91bmQpOwogICAgICB9IGVsc2UgewogICAgICAgIGFkZExvd2VyQm91bmQocmVzdWx0W3Byb3RvQ29uc3RyYWludC5wYXJhbWV0ZXJdLCBwcm90b0NvbnN0cmFpbnQuYm91bmQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIFRyaWVzIHRvIG1hdGNoIFtzdWJ0eXBlXSBhZ2FpbnN0IFtzdXBlcnR5cGVdLgogIC8vLwogIC8vLyBJZiB0aGUgbWF0Y2ggc3VjY2VlZHMsIHRoZSByZXN1bHRpbmcgdHlwZSBjb25zdHJhaW50cyBhcmUgcmVjb3JkZWQgZm9yCiAgLy8vIGxhdGVyIHVzZSBieSBbY29tcHV0ZUNvbnN0cmFpbnRzXS4gIElmIHRoZSBtYXRjaCBmYWlscywgdGhlIHNldCBvZiB0eXBlCiAgLy8vIGNvbnN0cmFpbnRzIGlzIHVuY2hhbmdlZC4KICBib29sIHRyeVN1YnR5cGVNYXRjaChEYXJ0VHlwZSBzdWJ0eXBlLCBEYXJ0VHlwZSBzdXBlcnR5cGUpIHsKICAgIGludCBvbGRQcm90b0NvbnN0cmFpbnRzTGVuZ3RoID0gX3Byb3RvQ29uc3RyYWludHMubGVuZ3RoOwogICAgYm9vbCBpc01hdGNoID0gX2lzU3VidHlwZU1hdGNoKHN1YnR5cGUsIHN1cGVydHlwZSk7CiAgICBpZiAoIWlzTWF0Y2gpIHsKICAgICAgX3Byb3RvQ29uc3RyYWludHMubGVuZ3RoID0gb2xkUHJvdG9Db25zdHJhaW50c0xlbmd0aDsKICAgIH0KICAgIHJldHVybiBpc01hdGNoOwogIH0KCiAgdm9pZCBfY29uc3RyYWluTG93ZXIoVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIsIERhcnRUeXBlIGxvd2VyKSB7CiAgICBfcHJvdG9Db25zdHJhaW50cy5hZGQobmV3IF9Qcm90b0NvbnN0cmFpbnQubG93ZXIocGFyYW1ldGVyLCBsb3dlcikpOwogIH0KCiAgdm9pZCBfY29uc3RyYWluVXBwZXIoVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIsIERhcnRUeXBlIHVwcGVyKSB7CiAgICBfcHJvdG9Db25zdHJhaW50cy5hZGQobmV3IF9Qcm90b0NvbnN0cmFpbnQudXBwZXIocGFyYW1ldGVyLCB1cHBlcikpOwogIH0KCiAgYm9vbCBfaXNGdW5jdGlvblN1YnR5cGVNYXRjaChGdW5jdGlvblR5cGUgc3VidHlwZSwgRnVuY3Rpb25UeXBlIHN1cGVydHlwZSkgewogICAgLy8gQSBmdW5jdGlvbiB0eXBlIGAoTTAsLi4uLCBNbiwgW017bisxfSwgLi4uLCBNbV0pIC0+IFIwYCBpcyBhIHN1YnR5cGUKICAgIC8vIG1hdGNoIGZvciBhIGZ1bmN0aW9uIHR5cGUgYChOMCwuLi4sIE5rLCBbTntrKzF9LCAuLi4sIE5yXSkgLT4gUjFgIHdpdGgKICAgIC8vIHJlc3BlY3QgdG8gYExgIHVuZGVyIGNvbnN0cmFpbnRzIGBDMCArIC4uLiArIENyICsgQ2AKICAgIC8vIC0gSWYgYFIwYCBpcyBhIHN1YnR5cGUgbWF0Y2ggZm9yIGEgdHlwZSBgUjFgIHdpdGggcmVzcGVjdCB0byBgTGAgdW5kZXIKICAgIC8vICAgY29uc3RyYWludHMgYENgOgogICAgLy8gLSBJZiBgbiA8PSBrYCBhbmQgYHIgPD0gbWAuCiAgICAvLyAtIEFuZCBmb3IgYGlgIGluIGAwLi4ucmAsIGBOaWAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBgTWlgIHdpdGggcmVzcGVjdAogICAgLy8gICB0byBgTGAgdW5kZXIgY29uc3RyYWludHMgYENpYC4KICAgIC8vIEZ1bmN0aW9uIHR5cGVzIHdpdGggbmFtZWQgcGFyYW1ldGVycyBhcmUgdHJlYXRlZCBhbmFsb2dvdXNseSB0byB0aGUKICAgIC8vIHBvc2l0aW9uYWwgcGFyYW1ldGVyIGNhc2UgYWJvdmUuCiAgICAvLyBBIGdlbmVyaWMgZnVuY3Rpb24gdHlwZSBgPFQwIGV4dGVuZHMgQjAsIC4uLiwgVG4gZXh0ZW5kcyBCbj5GMGAgaXMgYQogICAgLy8gc3VidHlwZSBtYXRjaCBmb3IgYSBnZW5lcmljIGZ1bmN0aW9uIHR5cGUgYDxTMCBleHRlbmRzIEIwLCAuLi4sIFNuCiAgICAvLyBleHRlbmRzIEJuPkYxYCB3aXRoIHJlc3BlY3QgdG8gYExgIHVuZGVyIGNvbnN0cmFpbnRzIGBDbGA6CiAgICAvLyAtIElmIGBGMFtaMC9UMCwgLi4uLCBabi9Ubl1gIGlzIGEgc3VidHlwZSBtYXRjaCBmb3IgYEYwW1owL1MwLCAuLi4sCiAgICAvLyAgIFpuL1NuXWAgd2l0aCByZXNwZWN0IHRvIGBMYCB1bmRlciBjb25zdHJhaW50cyBgQ2AsIHdoZXJlIGVhY2ggYFppYCBpcyBhCiAgICAvLyAgIGZyZXNoIHR5cGUgdmFyaWFibGUgd2l0aCBib3VuZCBgQmlgLgogICAgLy8gLSBBbmQgYENsYCBpcyBgQ2Agd2l0aCBlYWNoIGNvbnN0cmFpbnQgcmVwbGFjZWQgd2l0aCBpdHMgY2xvc3VyZSB3aXRoCiAgICAvLyAgIHJlc3BlY3QgdG8gYFtaMCwgLi4uLCBabl1gLgogICAgaWYgKHN1YnR5cGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA+IHN1cGVydHlwZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50KSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChzdWJ0eXBlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCA8CiAgICAgICAgc3VwZXJ0eXBlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoc3VidHlwZS50eXBlUGFyYW1ldGVycy5sZW5ndGggIT0gc3VwZXJ0eXBlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoc3VidHlwZS50eXBlUGFyYW1ldGVycy5pc05vdEVtcHR5KSB7CiAgICAgIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gc3VidHlwZVN1YnN0aXR1dGlvbiA9CiAgICAgICAgICA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+e307CiAgICAgIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gc3VwZXJ0eXBlU3Vic3RpdHV0aW9uID0KICAgICAgICAgIDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fTsKICAgICAgTGlzdDxUeXBlUGFyYW1ldGVyPiBmcmVzaFR5cGVWYXJpYWJsZXMgPSA8VHlwZVBhcmFtZXRlcj5bXTsKICAgICAgaWYgKCFfbWF0Y2hUeXBlRm9ybWFscyhzdWJ0eXBlLnR5cGVQYXJhbWV0ZXJzLCBzdXBlcnR5cGUudHlwZVBhcmFtZXRlcnMsCiAgICAgICAgICBzdWJ0eXBlU3Vic3RpdHV0aW9uLCBzdXBlcnR5cGVTdWJzdGl0dXRpb24sIGZyZXNoVHlwZVZhcmlhYmxlcykpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAgIHN1YnR5cGUgPSBzdWJzdGl0dXRlVHlwZVBhcmFtcygKICAgICAgICAgIHN1YnR5cGUsIHN1YnR5cGVTdWJzdGl0dXRpb24sIGZyZXNoVHlwZVZhcmlhYmxlcyk7CiAgICAgIHN1cGVydHlwZSA9IHN1YnN0aXR1dGVUeXBlUGFyYW1zKAogICAgICAgICAgc3VwZXJ0eXBlLCBzdXBlcnR5cGVTdWJzdGl0dXRpb24sIGZyZXNoVHlwZVZhcmlhYmxlcyk7CiAgICB9CgogICAgLy8gVGVzdCB0aGUgcmV0dXJuIHR5cGVzLgogICAgaWYgKHN1cGVydHlwZS5yZXR1cm5UeXBlIGlzISBWb2lkVHlwZSAmJgogICAgICAgICFfaXNTdWJ0eXBlTWF0Y2goc3VidHlwZS5yZXR1cm5UeXBlLCBzdXBlcnR5cGUucmV0dXJuVHlwZSkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8vIFRlc3QgdGhlIHBhcmFtZXRlciB0eXBlcy4KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3VwZXJ0eXBlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgIERhcnRUeXBlIHN1cGVydHlwZVBhcmFtZXRlciA9IHN1cGVydHlwZS5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXTsKICAgICAgRGFydFR5cGUgc3VidHlwZVBhcmFtZXRlciA9IHN1YnR5cGUucG9zaXRpb25hbFBhcmFtZXRlcnNbaV07CiAgICAgIC8vIFRlcm1pbmF0aW9uOiBCb3RoIHR5cGVzIHNocmluayBpbiBzaXplLgogICAgICBpZiAoIV9pc1N1YnR5cGVNYXRjaChzdXBlcnR5cGVQYXJhbWV0ZXIsIHN1YnR5cGVQYXJhbWV0ZXIpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICBpbnQgc3VidHlwZU5hbWVJbmRleCA9IDA7CiAgICBmb3IgKE5hbWVkVHlwZSBzdXBlcnR5cGVQYXJhbWV0ZXIgaW4gc3VwZXJ0eXBlLm5hbWVkUGFyYW1ldGVycykgewogICAgICB3aGlsZSAoc3VidHlwZU5hbWVJbmRleCA8IHN1YnR5cGUubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCAmJgogICAgICAgICAgc3VidHlwZS5uYW1lZFBhcmFtZXRlcnNbc3VidHlwZU5hbWVJbmRleF0ubmFtZSAhPQogICAgICAgICAgICAgIHN1cGVydHlwZVBhcmFtZXRlci5uYW1lKSB7CiAgICAgICAgKytzdWJ0eXBlTmFtZUluZGV4OwogICAgICB9CiAgICAgIGlmIChzdWJ0eXBlTmFtZUluZGV4ID09IHN1YnR5cGUubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgICBOYW1lZFR5cGUgc3VidHlwZVBhcmFtZXRlciA9IHN1YnR5cGUubmFtZWRQYXJhbWV0ZXJzW3N1YnR5cGVOYW1lSW5kZXhdOwogICAgICAvLyBUZXJtaW5hdGlvbjogQm90aCB0eXBlcyBzaHJpbmsgaW4gc2l6ZS4KICAgICAgaWYgKCFfaXNTdWJ0eXBlTWF0Y2goc3VwZXJ0eXBlUGFyYW1ldGVyLnR5cGUsIHN1YnR5cGVQYXJhbWV0ZXIudHlwZSkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgYm9vbCBfaXNJbnRlcmZhY2VTdWJ0eXBlTWF0Y2goCiAgICAgIEludGVyZmFjZVR5cGUgc3VidHlwZSwgSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUpIHsKICAgIC8vIEEgdHlwZSBgUDxNMCwgLi4uLCBNaz5gIGlzIGEgc3VidHlwZSBtYXRjaCBmb3IgYFA8TjAsIC4uLiwgTms+YCB3aXRoCiAgICAvLyByZXNwZWN0IHRvIGBMYCB1bmRlciBjb25zdHJhaW50cyBgQzAgKyAuLi4gKyBDa2A6CiAgICAvLyAtIElmIGBNaWAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBgTmlgIHdpdGggcmVzcGVjdCB0byBgTGAgdW5kZXIKICAgIC8vICAgY29uc3RyYWludHMgYENpYC4KICAgIC8vIEEgdHlwZSBgUDxNMCwgLi4uLCBNaz5gIGlzIGEgc3VidHlwZSBtYXRjaCBmb3IgYFE8TjAsIC4uLiwgTmo+YCB3aXRoCiAgICAvLyByZXNwZWN0IHRvIGBMYCB1bmRlciBjb25zdHJhaW50cyBgQ2A6CiAgICAvLyAtIElmIGBSPEIwLCAuLi4sIEJqPmAgaXMgdGhlIHN1cGVyY2xhc3Mgb2YgYFA8TTAsIC4uLiwgTWs+YCBhbmQgYFI8QjAsCiAgICAvLyAgIC4uLiwgQmo+YCBpcyBhIHN1YnR5cGUgbWF0Y2ggZm9yIGBRPE4wLCAuLi4sIE5qPmAgd2l0aCByZXNwZWN0IHRvIGBMYAogICAgLy8gICB1bmRlciBjb25zdHJhaW50cyBgQ2AuCiAgICAvLyAtIE9yIGBSPEIwLCAuLi4sIEJqPmAgaXMgb25lIG9mIHRoZSBpbnRlcmZhY2VzIGltcGxlbWVudGVkIGJ5IGBQPE0wLCAuLi4sCiAgICAvLyAgIE1rPmAgKGNvbnNpZGVyZWQgaW4gbGV4aWNhbCBvcmRlcikgYW5kIGBSPEIwLCAuLi4sIEJqPmAgaXMgYSBzdWJ0eXBlCiAgICAvLyAgIG1hdGNoIGZvciBgUTxOMCwgLi4uLCBOaj5gIHdpdGggcmVzcGVjdCB0byBgTGAgdW5kZXIgY29uc3RyYWludHMgYENgLgogICAgLy8gLSBPciBgUjxCMCwgLi4uLCBCaj5gIGlzIGEgbWl4aW4gaW50byBgUDxNMCwgLi4uLCBNaz5gIChjb25zaWRlcmVkIGluCiAgICAvLyAgIGxleGljYWwgb3JkZXIpIGFuZCBgUjxCMCwgLi4uLCBCaj5gIGlzIGEgc3VidHlwZSBtYXRjaCBmb3IgYFE8TjAsIC4uLiwKICAgIC8vICAgTmo+YCB3aXRoIHJlc3BlY3QgdG8gYExgIHVuZGVyIGNvbnN0cmFpbnRzIGBDYC4KCiAgICAvLyBOb3RlIHRoYXQgc2luY2Uga2VybmVsIHJlcXVpcmVzIHRoYXQgbm8gY2xhc3MgbWF5IG9ubHkgYXBwZWFyIGluIHRoZSBzZXQKICAgIC8vIG9mIHN1cGVydHlwZXMgb2YgYSBnaXZlbiB0eXBlIG1vcmUgdGhhbiBvbmNlLCB0aGUgb3JkZXIgb2YgdGhlIGNoZWNrcwogICAgLy8gYWJvdmUgaXMgaXJyZWxldmFudDsgd2UganVzdCBuZWVkIHRvIGZpbmQgdGhlIG1hdGNoZWQgc3VwZXJjbGFzcywKICAgIC8vIHN1YnN0aXR1dGUsIGFuZCB0aGVuIGl0ZXJhdGUgdGhyb3VnaCB0eXBlIHZhcmlhYmxlcy4KICAgIEludGVyZmFjZVR5cGUgbWF0Y2hpbmdTdXBlcnR5cGVPZlN1YnR5cGUgPQogICAgICAgIGdldFR5cGVBc0luc3RhbmNlT2Yoc3VidHlwZSwgc3VwZXJ0eXBlLmNsYXNzTm9kZSk7CiAgICBpZiAobWF0Y2hpbmdTdXBlcnR5cGVPZlN1YnR5cGUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdXBlcnR5cGUuY2xhc3NOb2RlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICghX2lzU3VidHlwZU1hdGNoKG1hdGNoaW5nU3VwZXJ0eXBlT2ZTdWJ0eXBlLnR5cGVBcmd1bWVudHNbaV0sCiAgICAgICAgICBzdXBlcnR5cGUudHlwZUFyZ3VtZW50c1tpXSkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgYm9vbCBfaXNOdWxsKERhcnRUeXBlIHR5cGUpIHsKICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogd291bGQgaXQgYmUgYmV0dGVyIHRvIGNhbGwgdGhpcyAiX2lzQm90dG9tIiwgYW5kIHRvIGhhdmUKICAgIC8vIGl0IHJldHVybiBgdHJ1ZWAgZm9yIGJvdGggTnVsbCBhbmQgYm90dG9tIHR5cGVzPyAgUmV2aXNpdCB0aGlzIG9uY2UKICAgIC8vIGVub3VnaCBmdW5jdGlvbmFsaXR5IGlzIGltcGxlbWVudGVkIHRoYXQgd2UgY2FuIGNvbXBhcmUgdGhlIGJlaGF2aW9yIHdpdGgKICAgIC8vIHRoZSBvbGQgYW5hbHl6ZXItYmFzZWQgaW1wbGVtZW50YXRpb24uCiAgICByZXR1cm4gdHlwZSBpcyBJbnRlcmZhY2VUeXBlICYmIGlkZW50aWNhbCh0eXBlLmNsYXNzTm9kZSwgbnVsbENsYXNzKTsKICB9CgogIC8vLyBBdHRlbXB0cyB0byBtYXRjaCBbc3VidHlwZV0gYXMgYSBzdWJ0eXBlIG9mIFtzdXBlcnR5cGVdLCBnYXRoZXJpbmcgYW55CiAgLy8vIGNvbnN0cmFpbnRzIGRpc2NvdmVyZWQgaW4gdGhlIHByb2Nlc3MuCiAgLy8vCiAgLy8vIElmIGEgc2V0IG9mIGNvbnN0cmFpbnRzIHdhcyBmb3VuZCwgYHRydWVgIGlzIHJldHVybmVkIGFuZCB0aGUgY2FsbGVyCiAgLy8vIG1heSBwcm9jZWVkIHRvIGNhbGwgW2NvbXB1dGVDb25zdHJhaW50c10uICBPdGhlcndpc2UsIGBmYWxzZWAgaXMgcmV0dXJuZWQuCiAgLy8vCiAgLy8vIEluIHRoZSBjYXNlIHdoZXJlIGBmYWxzZWAgaXMgcmV0dXJuZWQsIHNvbWUgYm9ndXMgY29uc3RyYWludHMgbWF5IGhhdmUKICAvLy8gYmVlbiBhZGRlZCB0byBbX3Byb3RvQ29uc3RyYWludHNdLiAgSXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvCiAgLy8vIGRpc2NhcmQgdGhlbSBpZiBuZWNlc3NhcnkuCiAgYm9vbCBfaXNTdWJ0eXBlTWF0Y2goRGFydFR5cGUgc3VidHlwZSwgRGFydFR5cGUgc3VwZXJ0eXBlKSB7CiAgICAvLyBUaGUgdW5rbm93biB0eXBlIGA/YCBpcyBhIHN1YnR5cGUgbWF0Y2ggZm9yIGFueSB0eXBlIGBRYCB3aXRoIG5vCiAgICAvLyBjb25zdHJhaW50cy4KICAgIGlmIChzdWJ0eXBlIGlzIFVua25vd25UeXBlKSByZXR1cm4gdHJ1ZTsKICAgIC8vIEFueSB0eXBlIGBQYCBpcyBhIHN1YnR5cGUgbWF0Y2ggZm9yIHRoZSB1bmtub3duIHR5cGUgYD9gIHdpdGggbm8KICAgIC8vIGNvbnN0cmFpbnRzLgogICAgaWYgKHN1cGVydHlwZSBpcyBVbmtub3duVHlwZSkgcmV0dXJuIHRydWU7CiAgICAvLyBBIHR5cGUgdmFyaWFibGUgYFRgIGluIGBMYCBpcyBhIHN1YnR5cGUgbWF0Y2ggZm9yIGFueSB0eXBlIHNjaGVtYSBgUWA6CiAgICAvLyAtIFVuZGVyIGNvbnN0cmFpbnQgYFQgPDogUWAuCiAgICBpZiAoc3VidHlwZSBpcyBUeXBlUGFyYW1ldGVyVHlwZSAmJgogICAgICAgIF9wYXJhbWV0ZXJzVG9Db25zdHJhaW4uY29udGFpbnMoc3VidHlwZS5wYXJhbWV0ZXIpKSB7CiAgICAgIF9jb25zdHJhaW5VcHBlcihzdWJ0eXBlLnBhcmFtZXRlciwgc3VwZXJ0eXBlKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICAvLyBBIHR5cGUgc2NoZW1hIGBRYCBpcyBhIHN1YnR5cGUgbWF0Y2ggZm9yIGEgdHlwZSB2YXJpYWJsZSBgVGAgaW4gYExgOgogICAgLy8gLSBVbmRlciBjb25zdHJhaW50IGBRIDw6IFRgLgogICAgaWYgKHN1cGVydHlwZSBpcyBUeXBlUGFyYW1ldGVyVHlwZSAmJgogICAgICAgIF9wYXJhbWV0ZXJzVG9Db25zdHJhaW4uY29udGFpbnMoc3VwZXJ0eXBlLnBhcmFtZXRlcikpIHsKICAgICAgX2NvbnN0cmFpbkxvd2VyKHN1cGVydHlwZS5wYXJhbWV0ZXIsIHN1YnR5cGUpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIC8vIEFueSB0d28gZXF1YWwgdHlwZXMgYFBgIGFuZCBgUWAgYXJlIHN1YnR5cGUgbWF0Y2hlcyB1bmRlciBubyBjb25zdHJhaW50cy4KICAgIC8vIE5vdGU6IHRvIGF2b2lkIG1ha2luZyB0aGUgYWxnb3JpdGhtIHF1YWRyYXRpYywgd2UganVzdCBjaGVjayBmb3IKICAgIC8vIGlkZW50aWNhbCgpLiAgSWYgUCBhbmQgUSBhcmUgZXF1YWwgYnV0IG5vdCBpZGVudGljYWwsIHJlY3Vyc2luZyB0aHJvdWdoCiAgICAvLyB0aGUgdHlwZXMgd2lsbCBnaXZlIHRoZSBwcm9wZXIgcmVzdWx0LgogICAgaWYgKGlkZW50aWNhbChzdWJ0eXBlLCBzdXBlcnR5cGUpKSByZXR1cm4gdHJ1ZTsKICAgIC8vIEFueSB0eXBlIGBQYCBpcyBhIHN1YnR5cGUgbWF0Y2ggZm9yIGBkeW5hbWljYCwgYE9iamVjdGAsIG9yIGB2b2lkYCB1bmRlcgogICAgLy8gbm8gY29uc3RyYWludHMuCiAgICBpZiAoX2lzVG9wKHN1cGVydHlwZSkpIHJldHVybiB0cnVlOwogICAgLy8gYE51bGxgIGlzIGEgc3VidHlwZSBtYXRjaCBmb3IgYW55IHR5cGUgYFFgIHVuZGVyIG5vIGNvbnN0cmFpbnRzLgogICAgLy8gTm90ZSB0aGF0IG51bGxhYmxlIHR5cGVzIHdpbGwgY2hhbmdlIHRoaXMuCiAgICBpZiAoX2lzTnVsbChzdWJ0eXBlKSkgcmV0dXJuIHRydWU7CgogICAgLy8gSGFuZGxlIEZ1dHVyZU9yPFQ+IHVuaW9uIHR5cGUuCiAgICBpZiAoc3VidHlwZSBpcyBJbnRlcmZhY2VUeXBlICYmCiAgICAgICAgaWRlbnRpY2FsKHN1YnR5cGUuY2xhc3NOb2RlLCBmdXR1cmVPckNsYXNzKSkgewogICAgICBEYXJ0VHlwZSBzdWJ0eXBlQXJnID0gc3VidHlwZS50eXBlQXJndW1lbnRzWzBdOwogICAgICBpZiAoc3VwZXJ0eXBlIGlzIEludGVyZmFjZVR5cGUgJiYKICAgICAgICAgIGlkZW50aWNhbChzdXBlcnR5cGUuY2xhc3NOb2RlLCBmdXR1cmVPckNsYXNzKSkgewogICAgICAgIC8vIGBGdXR1cmVPcjxQPmAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBgRnV0dXJlT3I8UT5gIHdpdGggcmVzcGVjdCB0bwogICAgICAgIC8vIGBMYCB1bmRlciBjb25zdHJhaW50cyBgQ2A6CiAgICAgICAgLy8gLSBJZiBgUGAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBgUWAgd2l0aCByZXNwZWN0IHRvIGBMYCB1bmRlcgogICAgICAgIC8vICAgY29uc3RyYWludHMgYENgLgogICAgICAgIERhcnRUeXBlIHN1cGVydHlwZUFyZyA9IHN1cGVydHlwZS50eXBlQXJndW1lbnRzWzBdOwogICAgICAgIHJldHVybiBfaXNTdWJ0eXBlTWF0Y2goc3VidHlwZUFyZywgc3VwZXJ0eXBlQXJnKTsKICAgICAgfQoKICAgICAgLy8gYEZ1dHVyZU9yPFA+YCBpcyBhIHN1YnR5cGUgbWF0Y2ggZm9yIGBRYCB3aXRoIHJlc3BlY3QgdG8gYExgIHVuZGVyCiAgICAgIC8vIGNvbnN0cmFpbnRzIGBDMCArIEMxYDoKICAgICAgLy8gLSBJZiBgRnV0dXJlPFA+YCBpcyBhIHN1YnR5cGUgbWF0Y2ggZm9yIGBRYCB3aXRoIHJlc3BlY3QgdG8gYExgIHVuZGVyCiAgICAgIC8vICAgY29uc3RyYWludHMgYEMwYC4KICAgICAgLy8gLSBBbmQgYFBgIGlzIGEgc3VidHlwZSBtYXRjaCBmb3IgYFFgIHdpdGggcmVzcGVjdCB0byBgTGAgdW5kZXIKICAgICAgLy8gICBjb25zdHJhaW50cyBgQzFgLgogICAgICBJbnRlcmZhY2VUeXBlIHN1YnR5cGVGdXR1cmUgPSBmdXR1cmVUeXBlKHN1YnR5cGVBcmcpOwogICAgICByZXR1cm4gX2lzU3VidHlwZU1hdGNoKHN1YnR5cGVGdXR1cmUsIHN1cGVydHlwZSkgJiYKICAgICAgICAgIF9pc1N1YnR5cGVNYXRjaChzdWJ0eXBlQXJnLCBzdXBlcnR5cGUpOwogICAgfQoKICAgIGlmIChzdXBlcnR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJgogICAgICAgIGlkZW50aWNhbChzdXBlcnR5cGUuY2xhc3NOb2RlLCBmdXR1cmVPckNsYXNzKSkgewogICAgICAvLyBgUGAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBgRnV0dXJlT3I8UT5gIHdpdGggcmVzcGVjdCB0byBgTGAgdW5kZXIKICAgICAgLy8gY29uc3RyYWludHMgYENgOgogICAgICAvLyAtIElmIGBQYCBpcyBhIHN1YnR5cGUgbWF0Y2ggZm9yIGBGdXR1cmU8UT5gIHdpdGggcmVzcGVjdCB0byBgTGAgdW5kZXIKICAgICAgLy8gICBjb25zdHJhaW50cyBgQ2AuCiAgICAgIC8vIC0gT3IgYFBgIGlzIG5vdCBhIHN1YnR5cGUgbWF0Y2ggZm9yIGBGdXR1cmU8UT5gIHdpdGggcmVzcGVjdCB0byBgTGAKICAgICAgLy8gICB1bmRlciBjb25zdHJhaW50cyBgQ2AKICAgICAgLy8gICAtIEFuZCBgUGAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBgUWAgd2l0aCByZXNwZWN0IHRvIGBMYCB1bmRlcgogICAgICAvLyAgICAgY29uc3RyYWludHMgYENgCiAgICAgIERhcnRUeXBlIHN1cGVydHlwZUFyZyA9IHN1cGVydHlwZS50eXBlQXJndW1lbnRzWzBdOwogICAgICBJbnRlcmZhY2VUeXBlIHN1cGVydHlwZUZ1dHVyZSA9IGZ1dHVyZVR5cGUoc3VwZXJ0eXBlQXJnKTsKICAgICAgcmV0dXJuIHRyeVN1YnR5cGVNYXRjaChzdWJ0eXBlLCBzdXBlcnR5cGVGdXR1cmUpIHx8CiAgICAgICAgICBfaXNTdWJ0eXBlTWF0Y2goc3VidHlwZSwgc3VwZXJ0eXBlQXJnKTsKICAgIH0KCiAgICAvLyBBIHR5cGUgdmFyaWFibGUgYFRgIG5vdCBpbiBgTGAgd2l0aCBib3VuZCBgUGAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciB0aGUKICAgIC8vIHNhbWUgdHlwZSB2YXJpYWJsZSBgVGAgd2l0aCBib3VuZCBgUWAgd2l0aCByZXNwZWN0IHRvIGBMYCB1bmRlcgogICAgLy8gY29uc3RyYWludHMgYENgOgogICAgLy8gLSBJZiBgUGAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBgUWAgd2l0aCByZXNwZWN0IHRvIGBMYCB1bmRlciBjb25zdHJhaW50cwogICAgLy8gICBgQ2AuCiAgICBpZiAoc3VidHlwZSBpcyBUeXBlUGFyYW1ldGVyVHlwZSkgewogICAgICBpZiAoc3VwZXJ0eXBlIGlzIFR5cGVQYXJhbWV0ZXJUeXBlICYmCiAgICAgICAgICBpZGVudGljYWwoc3VidHlwZS5wYXJhbWV0ZXIsIHN1cGVydHlwZS5wYXJhbWV0ZXIpKSB7CiAgICAgICAgLy8gS2VybmVsIGRvZXNuJ3QgeWV0IGFsbG93IGEgdHlwZSB2YXJpYWJsZSB0byBoYXZlIGRpZmZlcmVudCBib3VuZHMKICAgICAgICAvLyB1bmRlciBkaWZmZXJlbnQgY2lyY3Vtc3RhbmNlcyAoc2VlIGRhcnRidWcuY29tLzI5NTI5KSBzbyBmb3Igbm93IGlmCiAgICAgICAgLy8gd2UgZ2V0IGhlcmUsIHRoZSBib3VuZHMgbXVzdCBiZSB0aGUgc2FtZS4KICAgICAgICAvLyBUT0RPKHBhdWxiZXJyeSk6IHVwZGF0ZSB0aGlzIGNvZGUgb25jZSBkYXJ0YnVnLmNvbS8yOTUyOSBpcwogICAgICAgIC8vIGFkZHJlc3NlZC4KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICAvLyBBIHR5cGUgdmFyaWFibGUgYFRgIG5vdCBpbiBgTGAgd2l0aCBib3VuZCBgUGAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBhCiAgICAgIC8vIHR5cGUgYFFgIHdpdGggcmVzcGVjdCB0byBgTGAgdW5kZXIgY29uc3RyYWludHMgYENgOgogICAgICAvLyAtIElmIGBQYCBpcyBhIHN1YnR5cGUgbWF0Y2ggZm9yIGBRYCB3aXRoIHJlc3BlY3QgdG8gYExgIHVuZGVyCiAgICAgIC8vICAgY29uc3RyYWludHMgYENgLgogICAgICByZXR1cm4gX2lzU3VidHlwZU1hdGNoKHN1YnR5cGUucGFyYW1ldGVyLmJvdW5kLCBzdXBlcnR5cGUpOwogICAgfQogICAgaWYgKHN1YnR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJiBzdXBlcnR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICByZXR1cm4gX2lzSW50ZXJmYWNlU3VidHlwZU1hdGNoKHN1YnR5cGUsIHN1cGVydHlwZSk7CiAgICB9CiAgICBpZiAoc3VidHlwZSBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgaWYgKHN1cGVydHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgcmV0dXJuIGlkZW50aWNhbChzdXBlcnR5cGUuY2xhc3NOb2RlLCBmdW5jdGlvbkNsYXNzKSB8fAogICAgICAgICAgICBpZGVudGljYWwoc3VwZXJ0eXBlLmNsYXNzTm9kZSwgb2JqZWN0Q2xhc3MpOwogICAgICB9IGVsc2UgaWYgKHN1cGVydHlwZSBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgICByZXR1cm4gX2lzRnVuY3Rpb25TdWJ0eXBlTWF0Y2goc3VidHlwZSwgc3VwZXJ0eXBlKTsKICAgICAgfQogICAgfQogICAgLy8gQSB0eXBlIGBQYCBpcyBhIHN1YnR5cGUgbWF0Y2ggZm9yIGEgdHlwZSBgUWAgd2l0aCByZXNwZWN0IHRvIGBMYCB1bmRlcgogICAgLy8gY29uc3RyYWludHMgYENgOgogICAgLy8gLSBJZiBgUGAgaXMgYW4gaW50ZXJmYWNlIHR5cGUgd2hpY2ggaW1wbGVtZW50cyBhIGNhbGwgbWV0aG9kIG9mIHR5cGUgYEZgLAogICAgLy8gICBhbmQgYEZgIGlzIGEgc3VidHlwZSBtYXRjaCBmb3IgYSB0eXBlIGBRYCB3aXRoIHJlc3BlY3QgdG8gYExgIHVuZGVyCiAgICAvLyAgIGNvbnN0cmFpbnRzIGBDYC4KICAgIGlmIChzdWJ0eXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgTWVtYmVyIGNhbGxNZW1iZXIgPSBnZXRJbnRlcmZhY2VNZW1iZXIoc3VidHlwZS5jbGFzc05vZGUsIGNhbGxOYW1lKTsKICAgICAgaWYgKGNhbGxNZW1iZXIgaXMgUHJvY2VkdXJlICYmICFjYWxsTWVtYmVyLmlzR2V0dGVyKSB7CiAgICAgICAgRGFydFR5cGUgY2FsbFR5cGUgPSBjYWxsTWVtYmVyLmdldHRlclR5cGU7CiAgICAgICAgaWYgKGNhbGxUeXBlICE9IG51bGwpIHsKICAgICAgICAgIGNhbGxUeXBlID0KICAgICAgICAgICAgICBTdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUoc3VidHlwZSkuc3Vic3RpdHV0ZVR5cGUoY2FsbFR5cGUpOwogICAgICAgICAgLy8gVE9ETyhrbWlsbGlraW4pOiBUaGUgc3VidHlwZSBjaGVjayB3aWxsIGZhaWwgaWYgdGhlIHR5cGUgb2YgYQogICAgICAgICAgLy8gZ2VuZXJpYyBjYWxsIG1ldGhvZCBpcyBhIHN1YnR5cGUgb2YgYSBub24tZ2VuZXJpYyBmdW5jdGlvbiB0eXBlLgogICAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGlmIGBUIGNhbGw8VD4oVCBhcmcpYCBpcyBhIHN1YnR5cGUgb2YgYFMtPlNgIGZvciBzb21lCiAgICAgICAgICAvLyBTLiAgSG93ZXZlciwgZXhwbGljaXRseSB0ZWFyaW5nIG9mZiB0aGF0IGNhbGwgbWV0aG9kIHdpbGwgd29yayBhbmQKICAgICAgICAgIC8vIGluc2VydCBhbiBleHBsaWNpdCBpbnN0YW50aWF0aW9uLCBzbyB0aGUgaW1wbGljaXQgdGVhciBvZmYgc2hvdWxkCiAgICAgICAgICAvLyB3b3JrIGFzIHdlbGwuICBGaWd1cmUgb3V0IGhvdyB0byBzdXBwb3J0IHRoaXMgY2FzZS4KICAgICAgICAgIHJldHVybiBfaXNTdWJ0eXBlTWF0Y2goY2FsbFR5cGUsIHN1cGVydHlwZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBib29sIF9pc1RvcChEYXJ0VHlwZSB0eXBlKSA9PgogICAgICB0eXBlIGlzIER5bmFtaWNUeXBlIHx8CiAgICAgIHR5cGUgaXMgVm9pZFR5cGUgfHwKICAgICAgKHR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJiBpZGVudGljYWwodHlwZS5jbGFzc05vZGUsIG9iamVjdENsYXNzKSk7CgogIC8vLyBHaXZlbiB0d28gbGlzdHMgb2YgZnVuY3Rpb24gdHlwZSBmb3JtYWwgcGFyYW1ldGVycywgY2hlY2tzIHRoYXQgdGhlaXIKICAvLy8gYm91bmRzIGFyZSBjb21wYXRpYmxlLgogIC8vLwogIC8vLyBUaGUgcmV0dXJuIHZhbHVlIGluZGljYXRlcyB3aGV0aGVyIGEgbWF0Y2ggd2FzIGZvdW5kLiAgSWYgaXQgd2FzLCBlbnRyaWVzCiAgLy8vIGFyZSBhZGRlZCB0byBbc3Vic3RpdHV0aW9uMV0gYW5kIFtzdWJzdGl0dXRpb24yXSB3aGljaCBzdWJzdGl0dXRlIGEgZnJlc2gKICAvLy8gc2V0IG9mIHR5cGUgdmFyaWFibGVzIGZvciB0aGUgdHlwZSBwYXJhbWV0ZXJzIFtwYXJhbXMxXSBhbmQgW3BhcmFtczJdLAogIC8vLyByZXNwZWN0aXZlbHksIGFsbG93aW5nIGZ1cnRoZXIgY29tcGFyaXNvbi4KICBib29sIF9tYXRjaFR5cGVGb3JtYWxzKAogICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHBhcmFtczEsCiAgICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gcGFyYW1zMiwKICAgICAgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBzdWJzdGl0dXRpb24xLAogICAgICBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IHN1YnN0aXR1dGlvbjIsCiAgICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gZnJlc2hUeXBlVmFyaWFibGVzKSB7CiAgICBhc3NlcnQocGFyYW1zMS5sZW5ndGggPT0gcGFyYW1zMi5sZW5ndGgpOwogICAgLy8gVE9ETyhwYXVsYmVycnkpOiBpbiBpbWl0YXRpb24gb2YgYW5hbHl6ZXIsIHdlJ3JlIGNoZWNraW5nIHRoZSBib3VuZHMgYXMKICAgIC8vIHdlIGJ1aWxkIHVwIHRoZSBzdWJzdGl0dXRpb25zLiAgQnV0IEkgZG9uJ3QgdGhpbmsgdGhhdCdzIGNvcnJlY3QtLUkgdGhpbmsKICAgIC8vIHdlIHNob3VsZCBidWlsZCB1cCBib3RoIHN1YnN0aXR1dGlvbnMgY29tcGxldGVseSBiZWZvcmUgY2hlY2tpbmcgYW55CiAgICAvLyBib3VuZHMuICBTZWUgZGFydGJ1Zy5jb20vMjk2MjkuCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtczEubGVuZ3RoOyArK2kpIHsKICAgICAgVHlwZVBhcmFtZXRlciBwRnJlc2ggPSBuZXcgVHlwZVBhcmFtZXRlcihwYXJhbXMyW2ldLm5hbWUpOwogICAgICBmcmVzaFR5cGVWYXJpYWJsZXMuYWRkKHBGcmVzaCk7CiAgICAgIERhcnRUeXBlIHZhcmlhYmxlRnJlc2ggPSBuZXcgVHlwZVBhcmFtZXRlclR5cGUocEZyZXNoKTsKICAgICAgc3Vic3RpdHV0aW9uMVtwYXJhbXMxW2ldXSA9IHZhcmlhYmxlRnJlc2g7CiAgICAgIHN1YnN0aXR1dGlvbjJbcGFyYW1zMltpXV0gPSB2YXJpYWJsZUZyZXNoOwogICAgICBEYXJ0VHlwZSBib3VuZDEgPSBzdWJzdGl0dXRlKHBhcmFtczFbaV0uYm91bmQsIHN1YnN0aXR1dGlvbjEpOwogICAgICBEYXJ0VHlwZSBib3VuZDIgPSBzdWJzdGl0dXRlKHBhcmFtczJbaV0uYm91bmQsIHN1YnN0aXR1dGlvbjIpOwogICAgICBwRnJlc2guYm91bmQgPSBib3VuZDI7CiAgICAgIGlmICghX2lzU3VidHlwZU1hdGNoKGJvdW5kMiwgYm91bmQxKSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQp9CgpjbGFzcyBUeXBlU2NoZW1hQ29uc3RyYWludEdhdGhlcmVyIGV4dGVuZHMgVHlwZUNvbnN0cmFpbnRHYXRoZXJlciB7CiAgZmluYWwgVHlwZVNjaGVtYUVudmlyb25tZW50IGVudmlyb25tZW50OwoKICBUeXBlU2NoZW1hQ29uc3RyYWludEdhdGhlcmVyKAogICAgICB0aGlzLmVudmlyb25tZW50LCBJdGVyYWJsZTxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycykKICAgICAgOiBzdXBlci5zdWJjbGFzc2luZyh0eXBlUGFyYW1ldGVycyk7CgogIEBvdmVycmlkZQogIENsYXNzIGdldCBvYmplY3RDbGFzcyA9PiBlbnZpcm9ubWVudC5jb3JlVHlwZXMub2JqZWN0Q2xhc3M7CgogIEBvdmVycmlkZQogIENsYXNzIGdldCBmdW5jdGlvbkNsYXNzID0+IGVudmlyb25tZW50LmNvcmVUeXBlcy5mdW5jdGlvbkNsYXNzOwoKICBAb3ZlcnJpZGUKICBDbGFzcyBnZXQgZnV0dXJlT3JDbGFzcyA9PiBlbnZpcm9ubWVudC5jb3JlVHlwZXMuZnV0dXJlT3JDbGFzczsKCiAgQG92ZXJyaWRlCiAgQ2xhc3MgZ2V0IG51bGxDbGFzcyA9PiBlbnZpcm9ubWVudC5jb3JlVHlwZXMubnVsbENsYXNzOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZFVwcGVyQm91bmQoVHlwZUNvbnN0cmFpbnQgY29uc3RyYWludCwgRGFydFR5cGUgdXBwZXIpIHsKICAgIGVudmlyb25tZW50LmFkZFVwcGVyQm91bmQoY29uc3RyYWludCwgdXBwZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRMb3dlckJvdW5kKFR5cGVDb25zdHJhaW50IGNvbnN0cmFpbnQsIERhcnRUeXBlIGxvd2VyKSB7CiAgICBlbnZpcm9ubWVudC5hZGRMb3dlckJvdW5kKGNvbnN0cmFpbnQsIGxvd2VyKTsKICB9CgogIEBvdmVycmlkZQogIE1lbWJlciBnZXRJbnRlcmZhY2VNZW1iZXIoQ2xhc3MgY2xhc3NfLCBOYW1lIG5hbWUsIHtib29sIHNldHRlcjogZmFsc2V9KSB7CiAgICByZXR1cm4gZW52aXJvbm1lbnQuaGllcmFyY2h5CiAgICAgICAgLmdldEludGVyZmFjZU1lbWJlcihjbGFzc18sIG5hbWUsIHNldHRlcjogc2V0dGVyKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0VHlwZUFzSW5zdGFuY2VPZihJbnRlcmZhY2VUeXBlIHR5cGUsIENsYXNzIHN1cGVyY2xhc3MpIHsKICAgIHJldHVybiBlbnZpcm9ubWVudC5nZXRUeXBlQXNJbnN0YW5jZU9mKHR5cGUsIHN1cGVyY2xhc3MpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBmdXR1cmVUeXBlKERhcnRUeXBlIHR5cGUpIHsKICAgIHJldHVybiBlbnZpcm9ubWVudC5mdXR1cmVUeXBlKHR5cGUpOwogIH0KfQoKLy8vIFRyYWNrcyBhIHNpbmdsZSBjb25zdHJhaW50IG9uIGEgc2luZ2xlIHR5cGUgdmFyaWFibGUuCi8vLwovLy8gVGhpcyBpcyBjYWxsZWQgIl9Qcm90b0NvbnN0cmFpbnQiIHRvIGRpc3Rpbmd1aXNoIGZyb20gW1R5cGVDb25zdHJhaW50XSwKLy8vIHdoaWNoIHRyYWNrcyB0aGUgdXBwZXIgYW5kIGxvd2VyIGJvdW5kcyB0aGF0IGFyZSB0b2dldGhlciBpbXBsaWVkIGJ5IGEgc2V0Ci8vLyBvZiBbX1Byb3RvQ29uc3RyYWludF1zLgpjbGFzcyBfUHJvdG9Db25zdHJhaW50IHsKICBmaW5hbCBUeXBlUGFyYW1ldGVyIHBhcmFtZXRlcjsKCiAgZmluYWwgRGFydFR5cGUgYm91bmQ7CgogIGZpbmFsIGJvb2wgaXNVcHBlcjsKCiAgX1Byb3RvQ29uc3RyYWludC5sb3dlcih0aGlzLnBhcmFtZXRlciwgdGhpcy5ib3VuZCkgOiBpc1VwcGVyID0gZmFsc2U7CgogIF9Qcm90b0NvbnN0cmFpbnQudXBwZXIodGhpcy5wYXJhbWV0ZXIsIHRoaXMuYm91bmQpIDogaXNVcHBlciA9IHRydWU7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiBpc1VwcGVyCiAgICAgICAgPyAiJHtwYXJhbWV0ZXIubmFtZX0gPDogJGJvdW5kIgogICAgICAgIDogIiRib3VuZCA8OiAke3BhcmFtZXRlci5uYW1lfSI7CiAgfQp9CoHaAE1OPwEhCQ8SFRYXEA4TExcbEgFJASwBJkYBJgEbAScBUEYoMgE0AUoyTToBRDBKBAEZARsBGwEXAUEBQQFMAUsBKwE9PDArPjAGQiVRD1EIBhMEATQGTU4gPz44FDwGFAQBQkkEAUJJBAFPTE48ThojTyhLKExKQktRLk0lTRQGLjEUBkwUBi05JzsnQk9NFggBJj0oQQYBHi1GFAYBIUZHQzFEFggGHkZCPCkcCExOMU4WCAYRBAEhOEw5RxtMLU5PIFFOT01QOQFQTUk8Lzs6SkgpFggGEQQBIFFLUS5KBAFNLQZLUQZNTyE/SBQtSBQvTiQoPjUTBkwkKkA1EwZRSE8uNFAXKEgyJwEmJDc2KDtOJkkePDoIAUwgTx1IHTw6MgYBJjlMGk8cTSFKHTpAOjIGAVBHGFEOKCw/TU81RxYVCFA9RxxCBkI7BiMoQDkuPAgGThhRTRokSz0zIBVQS05QUE9BNwoIBhIEASAdGkkBTB0GUFBNMRojIzIyMC5PUUwnL0EmPjExRUUdOgYRBAIBRCsBIEArAQw+AQxCAQxCAQw6AQxCMgQBDEIyBAEMTSE7BAEMTD4EAQwsKQQCAToETE8cGSEBGAEWAUgBRwEWEygpBAIBSHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS90eXBlX2luZmVyZW5jZS90eXBlX2NvbnN0cmFpbnRfZ2F0aGVyZXIuZGFydDBzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9oZWxwZXJzL3RyYWNlLmRhcnStmy8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCc7CgovLy8gRnVuY3Rpb24gc2lnbmF0dXJlIGZvciBbdHJhY2VdLgp0eXBlZGVmIHZvaWQgVHJhY2UoU3RyaW5nIG1lc3NhZ2UsCiAgICB7Ym9vbCBjb25kaXRpb24oU3RyaW5nIHN0YWNrVHJhY2UpLCBpbnQgbGltaXQsIGJvb2wgdGhyb3dPblByaW50fSk7CgovLy8gSGVscGVyIG1ldGhvZCBmb3IgcHJpbnRpbmcgc3RhY2sgdHJhY2VzIGZvciBkZWJ1Z2dpbmcuCi8vLwovLy8gW21lc3NhZ2VdIGlzIHByaW50ZWQgYXMgdGhlIGhlYWRlciBvZiB0aGUgc3RhY2sgdHJhY2UuCi8vLwovLy8gSWYgW2NvbmRpdGlvbl0gaXMgcHJvdmlkZWQsIHRoZSBzdGFjayB0cmFjZSBpcyBvbmx5IHByaW50ZWQgaWYgW2NvbmRpdGlvbl0KLy8vIHJldHVybnMgWzp0cnVlOl0gb24gdGhlIHN0YWNrIHRyYWNlIHRleHQuIFRoaXMgY2FuIGJlIHVzZWQgdG8gZmlsdGVyIHRoZQovLy8gcHJpbnRlZCBzdGFjayB0cmFjZXMgYmFzZWQgb24gdGhlaXIgY29udGVudC4gRm9yIGluc3RhbmNlIG9ubHkgcHJpbnQgc3RhY2sKLy8vIHRyYWNlcyB0aGF0IGNvbnRhaW4gc3BlY2lmaWMgcGF0aHMuCi8vLwovLy8gSWYgW2xpbWl0XSBpcyBwcm92aWRlZCwgdGhlIHN0YWNrIHRyYWNlIGlzIGxpbWl0ZWQgdG8gW2xpbWl0XSBlbnRyaWVzLgovLy8KLy8vIElmIFt0aHJvd09uUHJpbnRdIGlzIGB0cnVlYCwgW21lc3NhZ2VdIHdpbGwgYmUgdGhyb3duIGFmdGVyIHRoZSBzdGFjayB0cmFjZQovLy8gaGFzIGJlZW4gcHJpbnRlZC4gVG9nZXRoZXIgd2l0aCBbY29uZGl0aW9uXSB0aGlzIGNhbiBiZSB1c2VkIHRvIGRpc2NvdmVyCi8vLyB1bmtub3duIGNhbGwtc2l0ZXMgaW4gdGVzdHMgYnkgZmlsdGVyaW5nIGtub3duIGNhbGwtc2l0ZXMgYW5kIHRocm93bmluZwovLy8gb3RoZXJ3aXNlLgpUcmFjZSBnZXQgdHJhY2UgewogIGVuYWJsZURlYnVnTW9kZSgpOwogIHJldHVybiBfdHJhY2U7Cn0KCnZvaWQgX3RyYWNlKFN0cmluZyBtZXNzYWdlLAogICAge2Jvb2wgY29uZGl0aW9uKFN0cmluZyBzdGFja1RyYWNlKSwgaW50IGxpbWl0LCBib29sIHRocm93T25QcmludDogZmFsc2V9KSB7CiAgdHJ5IHsKICAgIHRocm93ICcnOwogIH0gY2F0Y2ggKGUsIHMpIHsKICAgIFN0cmluZyBzdGFja1RyYWNlOwogICAgdHJ5IHsKICAgICAgc3RhY2tUcmFjZSA9IHByZXR0aWZ5U3RhY2tUcmFjZShzLAogICAgICAgICAgcmFuZ2VTdGFydDogMSwgcmFuZ2VFbmQ6IGxpbWl0LCBmaWxlUHJlZml4OiBzdGFja1RyYWNlRmlsZVByZWZpeCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHByaW50KGUpOwogICAgICBzdGFja1RyYWNlID0gJyRzJzsKICAgIH0KICAgIGlmIChjb25kaXRpb24gIT0gbnVsbCkgewogICAgICBpZiAoIWNvbmRpdGlvbihzdGFja1RyYWNlKSkgcmV0dXJuOwogICAgfQogICAgcHJpbnQoJyRtZXNzYWdlXG4kc3RhY2tUcmFjZScpOwogICAgaWYgKHRocm93T25QcmludCkgdGhyb3cgbWVzc2FnZTsKICB9Cn0KCi8vLyBDcmVhdGVzIGEgZnVuY3Rpb24gdG8gdXNlIGFzIGFuIGBjb25kaXRpb25gIGFyZ3VtZW50IGluIFt0cmFjZV0gdGhhdCBmaWx0ZXJzCi8vLyBzdGFjayB0cmFjZXMgdGhhdCBjb250YWlucyBhbnkgb2YgdGhlIFtleGNlcHRpb25zXS4KdHJhY2VFeGNlcHRpb25zKExpc3Q8U3RyaW5nPiBleGNlcHRpb25zKSB7CiAgcmV0dXJuIChTdHJpbmcgc3RhY2tUcmFjZSkgPT4gIWV4Y2VwdGlvbnMuYW55KHN0YWNrVHJhY2UuY29udGFpbnMpOwp9CgovLy8gRnVuY3Rpb24gc2lnbmF0dXJlIG9mIFt0cmFjZUFuZFJlcG9ydF0uCnR5cGVkZWYgdm9pZCBUcmFjZUFuZFJlcG9ydCgKICAgIERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlciwgU3Bhbm5hYmxlIG5vZGUsIFN0cmluZyBtZXNzYWdlLAogICAge2Jvb2wgY29uZGl0aW9uKFN0cmluZyBzdGFja1RyYWNlKSwgaW50IGxpbWl0LCBib29sIHRocm93T25QcmludH0pOwoKLy8vIENhbGxzIFtyZXBvcnRIZXJlXSBhbmQgW3RyYWNlXSB3aXRoIHRoZSBzYW1lIG1lc3NhZ2UuClRyYWNlQW5kUmVwb3J0IGdldCB0cmFjZUFuZFJlcG9ydCB7CiAgZW5hYmxlRGVidWdNb2RlKCk7CiAgcmV0dXJuIF90cmFjZUFuZFJlcG9ydDsKfQoKLy8vIENhbGxzIFtyZXBvcnRIZXJlXSBhbmQgW3RyYWNlXSB3aXRoIHRoZSBzYW1lIG1lc3NhZ2UuClRyYWNlQW5kUmVwb3J0IGdldCByZXBvcnRBbmRUcmFjZSA9PiB0cmFjZUFuZFJlcG9ydDsKCi8vLyBJbXBsZW1lbnRhdGlvbiBvZiBbdHJhY2VBbmRSZXBvcnRdLgp2b2lkIF90cmFjZUFuZFJlcG9ydCgKICAgIERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlciwgU3Bhbm5hYmxlIG5vZGUsIFN0cmluZyBtZXNzYWdlLAogICAge2Jvb2wgY29uZGl0aW9uKFN0cmluZyBzdGFja1RyYWNlKSwgaW50IGxpbWl0LCBib29sIHRocm93T25QcmludDogZmFsc2V9KSB7CiAgdHJhY2UobWVzc2FnZSwgbGltaXQ6IGxpbWl0LCB0aHJvd09uUHJpbnQ6IHRocm93T25QcmludCwKICAgICAgY29uZGl0aW9uOiAoU3RyaW5nIHN0YWNrVHJhY2UpIHsKICAgIGJvb2wgcmVzdWx0ID0gY29uZGl0aW9uICE9IG51bGwgPyBjb25kaXRpb24oc3RhY2tUcmFjZSkgOiB0cnVlOwogICAgaWYgKHJlc3VsdCkgewogICAgICByZXBvcnRIZXJlKHJlcG9ydGVyLCBub2RlLCBtZXNzYWdlKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfSk7Cn0KCi8vLyBSZXR1cm5zIHRoZSBbU3RhY2tUcmFjZUxpbmVzXSBmb3IgdGhlIGN1cnJlbnQgY2FsbCBzdGFjay4KLy8vCi8vLyBVc2UgW29mZnNldF0gdG8gZGlzY2FyZCB0aGUgZmlyc3QgW29mZnNldF0gY2FsbHMgb2YgdGhlIGNhbGwgc3RhY2suIERlZmF1bHRzCi8vLyB0byBgMWAsIHRoYXQgaXMsIGRpc2NhcmQgdGhlIGNhbGwgdG8gW3N0YWNrVHJhY2VdIGl0c2VsZi4gVXNlIFtsaW1pdF0gdG8KLy8vIGxpbWl0IHRoZSBsZW5ndGggb2YgdGhlIHN0YWNrIHRyYWNlIGxpbmVzLgpTdGFja1RyYWNlTGluZXMgc3RhY2tUcmFjZSh7aW50IG9mZnNldDogMSwgaW50IGxpbWl0OiBudWxsfSkgewogIGludCByYW5nZVN0YXJ0ID0gb2Zmc2V0OwogIGludCByYW5nZUVuZCA9IGxpbWl0ID09IG51bGwgPyBudWxsIDogcmFuZ2VTdGFydCArIGxpbWl0OwogIHRyeSB7CiAgICB0aHJvdyAnJzsKICB9IGNhdGNoIChfLCBzdGFja1RyYWNlKSB7CiAgICByZXR1cm4gbmV3IFN0YWNrVHJhY2VMaW5lcy5mcm9tVHJhY2Uoc3RhY2tUcmFjZSwKICAgICAgICByYW5nZVN0YXJ0OiBvZmZzZXQsCiAgICAgICAgcmFuZ2VFbmQ6IHJhbmdlRW5kLAogICAgICAgIGZpbGVQcmVmaXg6IHN0YWNrVHJhY2VGaWxlUHJlZml4KTsKICB9Cn0KCi8vLyBBIHN0YWNrIHRyYWNlIGFzIGEgc2VxdWVuY2Ugb2YgW1N0YWNrVHJhY2VMaW5lXXMuCmNsYXNzIFN0YWNrVHJhY2VMaW5lcyB7CiAgZmluYWwgTGlzdDxTdGFja1RyYWNlTGluZT4gbGluZXM7CiAgZmluYWwgaW50IG1heEZpbGVMZW5ndGg7CiAgZmluYWwgaW50IG1heExpbmVOb0xlbmd0aDsKICBmaW5hbCBpbnQgbWF4Q29sdW1uTm9MZW5ndGg7CgogIGZhY3RvcnkgU3RhY2tUcmFjZUxpbmVzLmZyb21UcmFjZShTdGFja1RyYWNlIHMsCiAgICAgIHtpbnQgcmFuZ2VTdGFydCwgaW50IHJhbmdlRW5kLCBTdHJpbmcgZmlsZVByZWZpeCwgU3RyaW5nIGxhbWJkYTogcic/J30pIHsKICAgIGZpbmFsIFJlZ0V4cCBpbmRleFBhdHRlcm4gPSBuZXcgUmVnRXhwKHInI1xkK1xzKicpOwogICAgaW50IGluZGV4ID0gLTE7CiAgICBpbnQgbWF4RmlsZUxlbmd0aCA9IDA7CiAgICBpbnQgbWF4TGluZU5vTGVuZ3RoID0gMDsKICAgIGludCBtYXhDb2x1bW5Ob0xlbmd0aCA9IDA7CgogICAgU3RyaW5nIHN0YWNrVHJhY2UgPSAnJHMnOwogICAgTGlzdDxTdGFja1RyYWNlTGluZT4gbGluZXMgPSA8U3RhY2tUcmFjZUxpbmU+W107CiAgICAvLyBQYXJzZSBlYWNoIGxpbmUgaW4gdGhlIHN0YWNrIHRyYWNlLiBUaGUgc3VwcG9ydGVkIGxpbmUgZm9ybWF0cyBmcm9tIHRoZQogICAgLy8gRGFydCBWTSBhcmU6CiAgICAvLyAgICAjbiAgICAgPG1ldGhvZC1uYW1lPiAoPHVyaT46PGxpbmUtbm8+Ojxjb2x1bW4tbm8+KQogICAgLy8gICAgI24gICAgIDxtZXRob2QtbmFtZT4gKDx1cmk+OjxsaW5lLW5vPikKICAgIC8vICAgICNuICAgICA8bWV0aG9kLW5hbWU+ICg8dXJpPikKICAgIC8vIGluIHdoaWNoICc8YW5vbnltb3VzIGNsb3N1cmU+JyBpcyB0aGUgbmFtZSB1c2VkIGZvciBhbiAodW5uYW1lZCkgZnVuY3Rpb24KICAgIC8vIGV4cHJlc3Npb24uIFRoZSBsYXN0IGNhc2UgaXMgdXNlZCBmb3IgYXN5bmMgYm9kaWVzLgogICAgZm9yIChTdHJpbmcgbGluZSBpbiBzdGFja1RyYWNlLnNwbGl0KCdcbicpKSB7CiAgICAgIHRyeSB7CiAgICAgICAgaW5kZXgrKzsKICAgICAgICBpZiAocmFuZ2VTdGFydCAhPSBudWxsICYmIGluZGV4IDwgcmFuZ2VTdGFydCkgY29udGludWU7CiAgICAgICAgaWYgKHJhbmdlRW5kICE9IG51bGwgJiYgaW5kZXggPiByYW5nZUVuZCkgYnJlYWs7CiAgICAgICAgaWYgKGxpbmUuaXNFbXB0eSkgY29udGludWU7CgogICAgICAgIC8vIFN0cmlwIGluZGV4LgogICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2VGaXJzdChpbmRleFBhdHRlcm4sICcnKTsKICAgICAgICBpZiAobGluZSA9PSAnPGFzeW5jaHJvbm91cyBzdXNwZW5zaW9uPicpIHsKICAgICAgICAgIGxpbmVzLmFkZChuZXcgU3RhY2tUcmFjZUxpbmUoaW5kZXgsICcnLCAnJywgJycsIGxpbmUpKTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgaW50IGxlZnRQYXJlblBvcyA9IGxpbmUuaW5kZXhPZignKCcpOwogICAgICAgIGludCByaWdodFBhcmVuUG9zID0gbGluZS5pbmRleE9mKCcpJywgbGVmdFBhcmVuUG9zKTsKICAgICAgICBpbnQgbGFzdENvbG9uID0gbGluZS5sYXN0SW5kZXhPZignOicsIHJpZ2h0UGFyZW5Qb3MpOwogICAgICAgIGludCBuZXh0VG9MYXN0Q29sb24gPSBsaW5lLmxhc3RJbmRleE9mKCc6JywgbGFzdENvbG9uIC0gMSk7CgogICAgICAgIFN0cmluZyBsaW5lTm87CiAgICAgICAgU3RyaW5nIGNvbHVtbk5vOwogICAgICAgIGlmIChuZXh0VG9MYXN0Q29sb24gIT0gLTEpIHsKICAgICAgICAgIGxpbmVObyA9IGxpbmUuc3Vic3RyaW5nKG5leHRUb0xhc3RDb2xvbiArIDEsIGxhc3RDb2xvbik7CiAgICAgICAgICBjb2x1bW5ObyA9IGxpbmUuc3Vic3RyaW5nKGxhc3RDb2xvbiArIDEsIHJpZ2h0UGFyZW5Qb3MpOwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaW50LnBhcnNlKGNvbHVtbk5vKTsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBpbnQucGFyc2UobGluZU5vKTsKICAgICAgICAgICAgfSBvbiBGb3JtYXRFeGNlcHRpb24gewogICAgICAgICAgICAgIC8vIE9ubHkgbGluZSBudW1iZXIuCiAgICAgICAgICAgICAgbGluZU5vID0gY29sdW1uTm87CiAgICAgICAgICAgICAgY29sdW1uTm8gPSAnJzsKICAgICAgICAgICAgICBuZXh0VG9MYXN0Q29sb24gPSBsYXN0Q29sb247CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gb24gRm9ybWF0RXhjZXB0aW9uIHsKICAgICAgICAgICAgLy8gTm8gY29sdW1uIG51bWJlciBub3IgbGluZSBudW1iZXIuCiAgICAgICAgICAgIGxpbmVObyA9ICcnOwogICAgICAgICAgICBjb2x1bW5ObyA9ICcnOwogICAgICAgICAgICBuZXh0VG9MYXN0Q29sb24gPSByaWdodFBhcmVuUG9zOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBsaW5lTm8gPSBsaW5lLnN1YnN0cmluZyhsYXN0Q29sb24gKyAxLCByaWdodFBhcmVuUG9zKTsKICAgICAgICAgIGNvbHVtbk5vID0gJyc7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBpbnQucGFyc2UobGluZU5vKTsKICAgICAgICAgICAgbmV4dFRvTGFzdENvbG9uID0gbGFzdENvbG9uOwogICAgICAgICAgfSBvbiBGb3JtYXRFeGNlcHRpb24gewogICAgICAgICAgICAvLyBObyBjb2x1bW4gbnVtYmVyIG5vciBsaW5lIG51bWJlci4KICAgICAgICAgICAgbGluZU5vID0gY29sdW1uTm87CiAgICAgICAgICAgIGNvbHVtbk5vID0gJyc7CiAgICAgICAgICAgIG5leHRUb0xhc3RDb2xvbiA9IHJpZ2h0UGFyZW5Qb3M7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAobGluZU5vLmxlbmd0aCA+IG1heExpbmVOb0xlbmd0aCkgewogICAgICAgICAgbWF4TGluZU5vTGVuZ3RoID0gbGluZU5vLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgaWYgKGNvbHVtbk5vLmxlbmd0aCA+IG1heENvbHVtbk5vTGVuZ3RoKSB7CiAgICAgICAgICBtYXhDb2x1bW5Ob0xlbmd0aCA9IGNvbHVtbk5vLmxlbmd0aDsKICAgICAgICB9CgogICAgICAgIFN0cmluZyBmaWxlID0gbGluZS5zdWJzdHJpbmcobGVmdFBhcmVuUG9zICsgMSwgbmV4dFRvTGFzdENvbG9uKTsKICAgICAgICBpZiAoZmlsZVByZWZpeCAhPSBudWxsICYmIGZpbGUuc3RhcnRzV2l0aChmaWxlUHJlZml4KSkgewogICAgICAgICAgZmlsZSA9IGZpbGUuc3Vic3RyaW5nKGZpbGVQcmVmaXgubGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgaWYgKGZpbGUubGVuZ3RoID4gbWF4RmlsZUxlbmd0aCkgewogICAgICAgICAgbWF4RmlsZUxlbmd0aCA9IGZpbGUubGVuZ3RoOwogICAgICAgIH0KICAgICAgICBTdHJpbmcgbWV0aG9kID0gbGluZS5zdWJzdHJpbmcoMCwgbGVmdFBhcmVuUG9zIC0gMSk7CiAgICAgICAgaWYgKGxhbWJkYSAhPSBudWxsKSB7CiAgICAgICAgICBtZXRob2QgPSBtZXRob2QucmVwbGFjZUFsbCgnPGFub255bW91cyBjbG9zdXJlPicsIGxhbWJkYSk7CiAgICAgICAgfQogICAgICAgIGxpbmVzLmFkZChuZXcgU3RhY2tUcmFjZUxpbmUoaW5kZXgsIGZpbGUsIGxpbmVObywgY29sdW1uTm8sIG1ldGhvZCkpOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgdGhyb3cgJ0Vycm9yIHByZXR0aWZ5aW5nICIkbGluZSI6ICRlJzsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBTdGFja1RyYWNlTGluZXMuZnJvbUxpbmVzKAogICAgICAgIGxpbmVzLCBtYXhGaWxlTGVuZ3RoLCBtYXhMaW5lTm9MZW5ndGgsIG1heENvbHVtbk5vTGVuZ3RoKTsKICB9CgogIFN0YWNrVHJhY2VMaW5lcy5mcm9tTGluZXModGhpcy5saW5lcywgdGhpcy5tYXhGaWxlTGVuZ3RoLAogICAgICB0aGlzLm1heExpbmVOb0xlbmd0aCwgdGhpcy5tYXhDb2x1bW5Ob0xlbmd0aCk7CgogIFN0YWNrVHJhY2VMaW5lcyBzdWJ0cmFjZShpbnQgb2Zmc2V0KSB7CiAgICByZXR1cm4gbmV3IFN0YWNrVHJhY2VMaW5lcy5mcm9tTGluZXMobGluZXMuc3VibGlzdChvZmZzZXQpLCBtYXhGaWxlTGVuZ3RoLAogICAgICAgIG1heExpbmVOb0xlbmd0aCwgbWF4Q29sdW1uTm9MZW5ndGgpOwogIH0KCiAgU3RyaW5nIHByZXR0aWZ5KHtib29sIHNob3dDb2x1bW5ObzogZmFsc2UsIGJvb2wgc2hvd0RvdHM6IHRydWV9KSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBib29sIGRvdHMgPSB0cnVlOwogICAgZm9yIChTdGFja1RyYWNlTGluZSBsaW5lIGluIGxpbmVzKSB7CiAgICAgIHNiLndyaXRlKCcgICcpOwogICAgICBsaW5lLnByaW50T24oc2IsCiAgICAgICAgICBmaWxlTGVuZ3RoOiBtYXhGaWxlTGVuZ3RoLAogICAgICAgICAgcGFkZGluZzogc2hvd0RvdHMgJiYgZG90cyA/ICcgLicgOiAnICcsCiAgICAgICAgICBsaW5lTm9MZW5ndGg6IG1heExpbmVOb0xlbmd0aCwKICAgICAgICAgIHNob3dDb2x1bW5Obzogc2hvd0NvbHVtbk5vLAogICAgICAgICAgY29sdW1uTm9MZW5ndGg6IG1heENvbHVtbk5vTGVuZ3RoKTsKCiAgICAgIGRvdHMgPSAhZG90czsKICAgIH0KICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuIHByZXR0aWZ5KCk7CiAgfQp9CgovLy8gQSBwYXJzZWQgbGluZSBmcm9tIGEgc3RhY2sgdHJhY2UuCmNsYXNzIFN0YWNrVHJhY2VMaW5lIHsKICBmaW5hbCBpbnQgaW5kZXg7CiAgZmluYWwgU3RyaW5nIGZpbGU7CiAgZmluYWwgU3RyaW5nIGxpbmVObzsKICBmaW5hbCBTdHJpbmcgY29sdW1uTm87CiAgZmluYWwgU3RyaW5nIG1ldGhvZDsKCiAgU3RhY2tUcmFjZUxpbmUoCiAgICAgIHRoaXMuaW5kZXgsIHRoaXMuZmlsZSwgdGhpcy5saW5lTm8sIHRoaXMuY29sdW1uTm8sIHRoaXMubWV0aG9kKTsKCiAgdm9pZCBwcmludE9uKFN0cmluZ0J1ZmZlciBzYiwKICAgICAge1N0cmluZyBwYWRkaW5nOiAnICcsCiAgICAgIGludCBmaWxlTGVuZ3RoLAogICAgICBpbnQgbGluZU5vTGVuZ3RoLAogICAgICBpbnQgY29sdW1uTm9MZW5ndGgsCiAgICAgIGJvb2wgc2hvd0NvbHVtbk5vOiBmYWxzZX0pIHsKICAgIFN0cmluZyBmaWxlVGV4dCA9ICcke2ZpbGV9ICc7CiAgICBpZiAoZmlsZUxlbmd0aCAhPSBudWxsKSB7CiAgICAgIGZpbGVUZXh0ID0gcGFkKGZpbGVUZXh0LCBmaWxlTGVuZ3RoLCBkb3RzOiBwYWRkaW5nKTsKICAgIH0KICAgIFN0cmluZyBsaW5lTm9UZXh0ID0gbGluZU5vOwogICAgaWYgKGxpbmVOb0xlbmd0aCAhPSBudWxsKSB7CiAgICAgIGxpbmVOb1RleHQgPSBwYWQobGluZU5vVGV4dCwgbGluZU5vTGVuZ3RoLCBwYWRMZWZ0OiB0cnVlKTsKICAgIH0KICAgIFN0cmluZyBjb2x1bW5Ob1RleHQgPSBzaG93Q29sdW1uTm8gPyAnJyA6IGNvbHVtbk5vOwogICAgaWYgKGNvbHVtbk5vTGVuZ3RoICE9IG51bGwpIHsKICAgICAgY29sdW1uTm9UZXh0ID0gJzoke3BhZChjb2x1bW5Ob1RleHQsIGNvbHVtbk5vTGVuZ3RoKX0nOwogICAgfQogICAgc2Iud3JpdGUoJyRmaWxlVGV4dCAkbGluZU5vVGV4dCRjb2x1bW5Ob1RleHQgJG1ldGhvZFxuJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiAxMyAqIGluZGV4ICsKICAgICAgICAxNyAqIGZpbGUuaGFzaENvZGUgKwogICAgICAgIDE5ICogbGluZU5vLmhhc2hDb2RlICsKICAgICAgICAyMyAqIGNvbHVtbk5vLmhhc2hDb2RlICsKICAgICAgICAyOSAqIG1ldGhvZC5oYXNoQ29kZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgU3RhY2tUcmFjZUxpbmUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBpbmRleCA9PSBvdGhlci5pbmRleCAmJgogICAgICAgIGZpbGUgPT0gb3RoZXIuZmlsZSAmJgogICAgICAgIGxpbmVObyA9PSBvdGhlci5saW5lTm8gJiYKICAgICAgICBjb2x1bW5ObyA9PSBvdGhlci5jb2x1bW5ObyAmJgogICAgICAgIG1ldGhvZCA9PSBvdGhlci5tZXRob2Q7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiJG1ldGhvZCBAICRmaWxlIFskbGluZU5vOiRjb2x1bW5Ob10iOwp9CgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVc2UgdGhpcyBmb3JtYXQgZm9yIC0tdGhyb3ctb24tZXJyb3IuCi8vLyBDb252ZXJ0cyB0aGUgbm9ybWFsIFZNIHN0YWNrIHRyYWNlIGludG8gYSBtb3JlIGNvbXBhY3QgYW5kIHJlYWRhYmxlIGZvcm1hdC4KLy8vCi8vLyBUaGUgb3V0cHV0IGZvcm1hdCBpcyBgPGZpbGU+IC4gLiAuIDxsaW5lTm8+Ojxjb2x1bW5Obz4gPG1ldGhvZD5gIHdoZXJlCi8vLyBgPGZpbGU+YCBpcyBmaWxlIG5hbWUsIGA8bGluZU5vPmAgaXMgdGhlIGxpbmUgbnVtYmVyLCBgPGNvbHVtbk5vPmAgaXMgdGhlCi8vLyBjb2x1bW4gbnVtYmVyLCBhbmQgYDxtZXRob2Q+YCBpcyB0aGUgbWV0aG9kIG5hbWUuCi8vLwovLy8gSWYgW3JhbmdlU3RhcnRdIGFuZC9vciBbcmFuZ2VFbmRdIGFyZSBwcm92aWRlZCwgb25seSB0aGUgbGluZXMgd2l0aGluIHRoZQovLy8gcmFuZ2UgYXJlIGluY2x1ZGVkLgovLy8gSWYgW3Nob3dDb2x1bW5Ob10gaXMgYGZhbHNlYCwgdGhlIGA6PGNvbHVtbk5vPmAgcGFydCBpcyBvbWl0dGVkLgovLy8gSWYgW3Nob3dEb3RzXSBpcyBgdHJ1ZWAsIHRoZSBzcGFjZSBiZXR3ZWVuIGA8ZmlsZT5gIGFuZCBgPGxpbmVObz5gIGlzIHBhZGRlZAovLy8gd2l0aCBkb3RzIG9uIGV2ZXJ5IG90aGVyIGxpbmUuCi8vLyBJZiBbZmlsZVByZWZpeF0gaXMgcHJvdmlkZWQsIHRoZW4gZm9yICBldmVyeSBmaWxlIG5hbWUgdGhhdHMgc3RhcnRzIHdpdGgKLy8vIFtmaWxlUHJlZml4XSBvbmx5IHRoZSByZW1haW5kZXIgaXMgcHJpbnRlZC4KLy8vIElmIFtsYW1iZGFdIGlzIG5vbi1udWxsLCBhbm9ueW1vdXMgY2xvc3VyZXMgYXJlIHByaW50ZWQgYXMgW2xhbWJkYV0uClN0cmluZyBwcmV0dGlmeVN0YWNrVHJhY2UoU3RhY2tUcmFjZSBzdGFja1RyYWNlLAogICAge2ludCByYW5nZVN0YXJ0LAogICAgaW50IHJhbmdlRW5kLAogICAgYm9vbCBzaG93Q29sdW1uTm86IGZhbHNlLAogICAgYm9vbCBzaG93RG90czogdHJ1ZSwKICAgIFN0cmluZyBmaWxlUHJlZml4LAogICAgU3RyaW5nIGxhbWJkYTogcic/J30pIHsKICByZXR1cm4gbmV3IFN0YWNrVHJhY2VMaW5lcy5mcm9tVHJhY2Uoc3RhY2tUcmFjZSwKICAgICAgICAgIHJhbmdlU3RhcnQ6IHJhbmdlU3RhcnQsCiAgICAgICAgICByYW5nZUVuZDogcmFuZ2VFbmQsCiAgICAgICAgICBmaWxlUHJlZml4OiBmaWxlUHJlZml4LAogICAgICAgICAgbGFtYmRhOiBsYW1iZGEpCiAgICAgIC5wcmV0dGlmeShzaG93Q29sdW1uTm86IHNob3dDb2x1bW5Obywgc2hvd0RvdHM6IHNob3dEb3RzKTsKfQoKLy8vIFBhZHMgKG9yIHRydW5jYXRlcykgW3RleHRdIHRvIHRoZSBbaW50ZW5kZWRMZW5ndGhdLgovLy8KLy8vIElmIFtwYWRMZWZ0XSBpcyBbOnRydWU6XSB0aGUgdGV4dCBpcyBwYWRkaW5nIGluc2VydGVkIHRvIHRoZSBsZWZ0IG9mIFt0ZXh0XS4KLy8vIEEgcmVwZXRpdGlvbiBvZiB0aGUgW2RvdHNdIHRleHQgaXMgdXNlZCBmb3IgcGFkZGluZy4KU3RyaW5nIHBhZChTdHJpbmcgdGV4dCwgaW50IGludGVuZGVkTGVuZ3RoLAogICAge2Jvb2wgcGFkTGVmdDogZmFsc2UsIFN0cmluZyBkb3RzOiAnICd9KSB7CiAgaWYgKHRleHQubGVuZ3RoID09IGludGVuZGVkTGVuZ3RoKSByZXR1cm4gdGV4dDsKICBpZiAodGV4dC5sZW5ndGggPiBpbnRlbmRlZExlbmd0aCkgcmV0dXJuIHRleHQuc3Vic3RyaW5nKDAsIGludGVuZGVkTGVuZ3RoKTsKICBpZiAoZG90cyA9PSBudWxsIHx8IGRvdHMuaXNFbXB0eSkgZG90cyA9ICcgJzsKICBpbnQgZG90c0xlbmd0aCA9IGRvdHMubGVuZ3RoOwogIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICBpZiAoIXBhZExlZnQpIHsKICAgIHNiLndyaXRlKHRleHQpOwogIH0KICBmb3IgKGludCBpbmRleCA9IHRleHQubGVuZ3RoOyBpbmRleCA8IGludGVuZGVkTGVuZ3RoOyBpbmRleCsrKSB7CiAgICBpbnQgZG90c0luZGV4ID0gaW5kZXggJSBkb3RzTGVuZ3RoOwogICAgc2Iud3JpdGUoZG90cy5zdWJzdHJpbmcoZG90c0luZGV4LCBkb3RzSW5kZXggKyAxKSk7CiAgfQogIGlmIChwYWRMZWZ0KSB7CiAgICBzYi53cml0ZSh0ZXh0KTsKICB9CiAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Cn0KgV8ATk48ARkcASQjSAE7BDsET01PKARLBFBNTA8SFRECARxQCA4TFwopTRIQGQYdKgYkJQQCAVE4K0YCASwdQUgBOiQVGgIBOjUBKBZBUDsnRBIrBhMGAgE+BFFNLz8bPAgOHDUcHCsEAgE2GCQbHR8BMlA4FBsdHwEeNU8UPTEnUTsyDBFAOSQBGDQzQhQKAS49PkQBFxklQ0MQIRIhIyMhHSsOITEZGy0MEUEZEB8pITEfGy0MCgEvKwozLwoBSUE0CisnCj0eRQpOFC8IBipDBAE8NQEpTy0EAUUqFikWFyUyKSYuARQGGgQBDBYXBAIBJhcTFRcZFwESRwEgHBYYGiMiHjsGICBBBjgiPgY+BAEMFRgdHyEeBAEMHC0wIx4iJiAEAQw+AgE+UARLTjYEThhFUSNNMEkxFRIeGRccMyIeIhpBAgE4BFE5LC8yTjAgKBIUBEMoOAQRFAQYAgEncGFja2FnZTpjb21waWxlci9zcmMvaGVscGVycy90cmFjZS5kYXJ0O3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2hlbHBlcnMvZGVidWdfY29sbGVjdGlvbi5kYXJ0r7wvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKdHlwZWRlZiB2b2lkIERlYnVnQ2FsbGJhY2soU3RyaW5nIG1ldGhvZE5hbWUsIHZhciBhcmcxLCB2YXIgYXJnMik7CgpjbGFzcyBEZWJ1Z01hcDxLLCBWPiBpbXBsZW1lbnRzIE1hcDxLLCBWPiB7CiAgZmluYWwgTWFwPEssIFY+IHNvdXJjZU1hcDsKICBEZWJ1Z0NhbGxiYWNrIGluZGV4U2V0Q2FsbGJhY2s7CiAgRGVidWdDYWxsYmFjayBwdXRJZkFic2VudENhbGxiYWNrOwogIERlYnVnQ2FsbGJhY2sgcmVtb3ZlQ2FsbGJhY2s7CgogIERlYnVnTWFwKHRoaXMuc291cmNlTWFwLCB7RGVidWdDYWxsYmFjayBhZGRDYWxsYmFjaywgdGhpcy5yZW1vdmVDYWxsYmFja30pIHsKICAgIGlmIChhZGRDYWxsYmFjayAhPSBudWxsKSB7CiAgICAgIHRoaXMuYWRkQ2FsbGJhY2sgPSBhZGRDYWxsYmFjazsKICAgIH0KICB9CgogIHZvaWQgc2V0IGFkZENhbGxiYWNrKERlYnVnQ2FsbGJhY2sgdmFsdWUpIHsKICAgIGluZGV4U2V0Q2FsbGJhY2sgPSB2YWx1ZTsKICAgIHB1dElmQWJzZW50Q2FsbGJhY2sgPSB2YWx1ZTsKICB9CgogIEBvdmVycmlkZQogIE1hcDxSSywgUlY+IGNhc3Q8UkssIFJWPigpID0+IE1hcC5jYXN0RnJvbTxLLCBWLCBSSywgUlY+KHRoaXMpOwogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNWYWx1ZShPYmplY3QgdmFsdWUpIHsKICAgIHJldHVybiBzb3VyY2VNYXAuY29udGFpbnNWYWx1ZSh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zS2V5KE9iamVjdCBrZXkpID0+IHNvdXJjZU1hcC5jb250YWluc0tleShrZXkpOwoKICBAb3ZlcnJpZGUKICBWIG9wZXJhdG9yIFtdKE9iamVjdCBrZXkpID0+IHNvdXJjZU1hcFtrZXldOwoKICBAb3ZlcnJpZGUKICB2b2lkIG9wZXJhdG9yIFtdPShLIGtleSwgViB2YWx1ZSkgewogICAgaWYgKGluZGV4U2V0Q2FsbGJhY2sgIT0gbnVsbCkgewogICAgICBpbmRleFNldENhbGxiYWNrKCdbXT0nLCBrZXksIHZhbHVlKTsKICAgIH0KICAgIHNvdXJjZU1hcFtrZXldID0gdmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBWIHB1dElmQWJzZW50KEsga2V5LCBWIGlmQWJzZW50KCkpIHsKICAgIHJldHVybiBzb3VyY2VNYXAucHV0SWZBYnNlbnQoa2V5LCAoKSB7CiAgICAgIFYgdiA9IGlmQWJzZW50KCk7CiAgICAgIGlmIChwdXRJZkFic2VudENhbGxiYWNrICE9IG51bGwpIHsKICAgICAgICBwdXRJZkFic2VudENhbGxiYWNrKCdwdXRJZkFic2VudCcsIGtleSwgdik7CiAgICAgIH0KICAgICAgcmV0dXJuIHY7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkQWxsKE1hcDxLLCBWPiBvdGhlcikgPT4gc291cmNlTWFwLmFkZEFsbChvdGhlcik7CgogIEBvdmVycmlkZQogIFYgcmVtb3ZlKE9iamVjdCBrZXkpIHsKICAgIGlmIChyZW1vdmVDYWxsYmFjayAhPSBudWxsKSB7CiAgICAgIHJlbW92ZUNhbGxiYWNrKCdyZW1vdmUnLCBrZXksIHNvdXJjZU1hcFtrZXldKTsKICAgIH0KICAgIHJldHVybiBzb3VyY2VNYXAucmVtb3ZlKGtleSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsZWFyKCkgewogICAgaWYgKHJlbW92ZUNhbGxiYWNrICE9IG51bGwpIHsKICAgICAgcmVtb3ZlQ2FsbGJhY2soJ2NsZWFyJywgc291cmNlTWFwLCBudWxsKTsKICAgIH0KICAgIHNvdXJjZU1hcC5jbGVhcigpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihLIGtleSwgViB2YWx1ZSkpID0+IHNvdXJjZU1hcC5mb3JFYWNoKGYpOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxLPiBnZXQga2V5cyA9PiBzb3VyY2VNYXAua2V5czsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Vj4gZ2V0IHZhbHVlcyA9PiBzb3VyY2VNYXAudmFsdWVzOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZ2V0IGVudHJpZXMgPT4gc291cmNlTWFwLmVudHJpZXM7CgogIEBvdmVycmlkZQogIHZvaWQgYWRkRW50cmllcyhJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZW50cmllcykgewogICAgc291cmNlTWFwLmFkZEVudHJpZXMoZW50cmllcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBNYXA8SzIsIFYyPiBtYXA8SzIsIFYyPihNYXBFbnRyeTxLMiwgVjI+IHRyYW5zZm9ybShLIGtleSwgViB2YWx1ZSkpID0+CiAgICAgIHNvdXJjZU1hcC5tYXAodHJhbnNmb3JtKTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBsZW5ndGggPT4gc291cmNlTWFwLmxlbmd0aDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBzb3VyY2VNYXAuaXNFbXB0eTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBzb3VyY2VNYXAuaXNOb3RFbXB0eTsKCiAgQG92ZXJyaWRlCiAgViB1cGRhdGUoSyBrZXksIFYgdXBkYXRlKFYgdmFsdWUpLCB7ViBpZkFic2VudCgpfSkgPT4KICAgICAgc291cmNlTWFwLnVwZGF0ZShrZXksIHVwZGF0ZSwgaWZBYnNlbnQ6IGlmQWJzZW50KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB1cGRhdGVBbGwoViB1cGRhdGUoSyBrZXksIFYgdmFsdWUpKSB7CiAgICBzb3VyY2VNYXAudXBkYXRlQWxsKHVwZGF0ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChLIGtleSwgViB2YWx1ZSkpIHsKICAgIHNvdXJjZU1hcC5yZW1vdmVXaGVyZSh0ZXN0KTsKICB9Cn0KCmNsYXNzIERlYnVnSXRlcmFibGU8RT4gaW1wbGVtZW50cyBJdGVyYWJsZTxFPiB7CiAgZmluYWwgSXRlcmFibGU8RT4gaXRlcmFibGU7CgogIERlYnVnSXRlcmFibGUodGhpcy5pdGVyYWJsZSk7CgogIEBvdmVycmlkZQogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciA9PiBpdGVyYWJsZS5pdGVyYXRvcjsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Uj4gY2FzdDxSPigpID0+IEl0ZXJhYmxlLmNhc3RGcm9tPEUsIFI+KHRoaXMpOwogIEBvdmVycmlkZQogIEl0ZXJhYmxlPFQ+IG1hcDxUPihUIGYoRSBlbGVtZW50KSkgPT4gaXRlcmFibGUubWFwKGYpOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxFPiB3aGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gaXRlcmFibGUud2hlcmUodGVzdCk7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPFQ+IGV4cGFuZDxUPihJdGVyYWJsZTxUPiBmKEUgZWxlbWVudCkpID0+IGl0ZXJhYmxlLmV4cGFuZChmKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWlucyhPYmplY3QgZWxlbWVudCkgPT4gaXRlcmFibGUuY29udGFpbnMoZWxlbWVudCk7CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaCh2b2lkIGYoRSBlbGVtZW50KSkgPT4gaXRlcmFibGUuZm9yRWFjaChmKTsKCiAgQG92ZXJyaWRlCiAgRSByZWR1Y2UoRSBjb21iaW5lKEUgdmFsdWUsIEUgZWxlbWVudCkpID0+IGl0ZXJhYmxlLnJlZHVjZShjb21iaW5lKTsKCiAgQG92ZXJyaWRlCiAgVCBmb2xkPFQ+KFQgaW5pdGlhbFZhbHVlLCBUIGNvbWJpbmUoVCBwcmV2aW91c1ZhbHVlLCBFIGVsZW1lbnQpKSB7CiAgICByZXR1cm4gaXRlcmFibGUuZm9sZChpbml0aWFsVmFsdWUsIGNvbWJpbmUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBldmVyeShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gaXRlcmFibGUuZXZlcnkodGVzdCk7CgogIEBvdmVycmlkZQogIFN0cmluZyBqb2luKFtTdHJpbmcgc2VwYXJhdG9yID0gIiJdKSA9PiBpdGVyYWJsZS5qb2luKHNlcGFyYXRvcik7CgogIEBvdmVycmlkZQogIGJvb2wgYW55KGJvb2wgdGVzdChFIGVsZW1lbnQpKSA9PiBpdGVyYWJsZS5hbnkodGVzdCk7CgogIEBvdmVycmlkZQogIExpc3Q8RT4gdG9MaXN0KHtib29sIGdyb3dhYmxlOiB0cnVlfSkgewogICAgcmV0dXJuIGl0ZXJhYmxlLnRvTGlzdChncm93YWJsZTogZ3Jvd2FibGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU2V0PEU+IHRvU2V0KCkgPT4gaXRlcmFibGUudG9TZXQoKTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBsZW5ndGggPT4gaXRlcmFibGUubGVuZ3RoOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0VtcHR5ID0+IGl0ZXJhYmxlLmlzRW1wdHk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gaXRlcmFibGUuaXNOb3RFbXB0eTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8RT4gdGFrZShpbnQgbikgPT4gaXRlcmFibGUudGFrZShuKTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8RT4gdGFrZVdoaWxlKGJvb2wgdGVzdChFIHZhbHVlKSkgPT4gaXRlcmFibGUudGFrZVdoaWxlKHRlc3QpOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxFPiBza2lwKGludCBuKSA9PiBpdGVyYWJsZS5za2lwKG4pOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxFPiBza2lwV2hpbGUoYm9vbCB0ZXN0KEUgdmFsdWUpKSA9PiBpdGVyYWJsZS5za2lwV2hpbGUodGVzdCk7CgogIEBvdmVycmlkZQogIEUgZ2V0IGZpcnN0ID0+IGl0ZXJhYmxlLmZpcnN0OwoKICBAb3ZlcnJpZGUKICBFIGdldCBsYXN0ID0+IGl0ZXJhYmxlLmxhc3Q7CgogIEBvdmVycmlkZQogIEUgZ2V0IHNpbmdsZSA9PiBpdGVyYWJsZS5zaW5nbGU7CgogIEBvdmVycmlkZQogIEUgZmlyc3RXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwge0Ugb3JFbHNlKCl9KSB7CiAgICByZXR1cm4gaXRlcmFibGUuZmlyc3RXaGVyZSh0ZXN0LCBvckVsc2U6IG9yRWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFIGxhc3RXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwge0Ugb3JFbHNlKCl9KSB7CiAgICByZXR1cm4gaXRlcmFibGUubGFzdFdoZXJlKHRlc3QsIG9yRWxzZTogb3JFbHNlKTsKICB9CgogIEBvdmVycmlkZQogIEUgc2luZ2xlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIHtFIG9yRWxzZSgpfSkgPT4KICAgICAgaXRlcmFibGUuc2luZ2xlV2hlcmUodGVzdCwgb3JFbHNlOiBvckVsc2UpOwoKICBAb3ZlcnJpZGUKICBFIGVsZW1lbnRBdChpbnQgaW5kZXgpID0+IGl0ZXJhYmxlLmVsZW1lbnRBdChpbmRleCk7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPEU+IGZvbGxvd2VkQnkoSXRlcmFibGU8RT4gb3RoZXIpID0+IGl0ZXJhYmxlLmZvbGxvd2VkQnkob3RoZXIpOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxUPiB3aGVyZVR5cGU8VD4oKSA9PiBpdGVyYWJsZS53aGVyZVR5cGU8VD4oKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gaXRlcmFibGUudG9TdHJpbmcoKTsKfQoKY2xhc3MgRGVidWdMaXN0PEU+IGV4dGVuZHMgRGVidWdJdGVyYWJsZTxFPiBpbXBsZW1lbnRzIExpc3Q8RT4gewogIERlYnVnQ2FsbGJhY2sgYWRkQ2FsbGJhY2s7CiAgRGVidWdDYWxsYmFjayBhZGRBbGxDYWxsYmFjazsKCiAgRGVidWdMaXN0KExpc3Q8RT4gbGlzdCwge3RoaXMuYWRkQ2FsbGJhY2ssIHRoaXMuYWRkQWxsQ2FsbGJhY2t9KQogICAgICA6IHN1cGVyKGxpc3QpOwoKICBMaXN0PEU+IGdldCBsaXN0ID0+IGl0ZXJhYmxlOwoKICBAb3ZlcnJpZGUKICBMaXN0PFI+IGNhc3Q8Uj4oKSA9PiBMaXN0LmNhc3RGcm9tPEUsIFI+KHRoaXMpOwogIEBvdmVycmlkZQogIExpc3Q8RT4gb3BlcmF0b3IgKyhMaXN0PEU+IG90aGVyKSA9PiBsaXN0ICsgb3RoZXI7CgogIEBvdmVycmlkZQogIEUgb3BlcmF0b3IgW10oaW50IGluZGV4KSA9PiBsaXN0W2luZGV4XTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBFIHZhbHVlKSB7CiAgICBsaXN0W2luZGV4XSA9IHZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXQgZmlyc3QoRSBlbGVtZW50KSB7CiAgICBsaXN0LmZpcnN0ID0gZWxlbWVudDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgc2V0IGxhc3QoRSBlbGVtZW50KSB7CiAgICBsaXN0Lmxhc3QgPSBlbGVtZW50OwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBsZW5ndGggPT4gbGlzdC5sZW5ndGg7CgogIEBvdmVycmlkZQogIHZvaWQgc2V0IGxlbmd0aChpbnQgbmV3TGVuZ3RoKSB7CiAgICBsaXN0Lmxlbmd0aCA9IG5ld0xlbmd0aDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkKEUgdmFsdWUpIHsKICAgIGlmIChhZGRDYWxsYmFjayAhPSBudWxsKSB7CiAgICAgIGFkZENhbGxiYWNrKCdhZGQnLCB2YWx1ZSwgbnVsbCk7CiAgICB9CiAgICBsaXN0LmFkZCh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgaWYgKGFkZEFsbENhbGxiYWNrICE9IG51bGwpIHsKICAgICAgYWRkQWxsQ2FsbGJhY2soJ2FkZEFsbCcsIGl0ZXJhYmxlLCBudWxsKTsKICAgIH0KICAgIGxpc3QuYWRkQWxsKGl0ZXJhYmxlKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPEU+IGdldCByZXZlcnNlZCA9PiBsaXN0LnJldmVyc2VkOwoKICBAb3ZlcnJpZGUKICB2b2lkIHNvcnQoW2ludCBjb21wYXJlKEUgYSwgRSBiKV0pID0+IGxpc3Quc29ydChjb21wYXJlKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBzaHVmZmxlKFtyYW5kb21dKSA9PiBsaXN0LnNodWZmbGUocmFuZG9tKTsKCiAgQG92ZXJyaWRlCiAgaW50IGluZGV4T2YoRSBlbGVtZW50LCBbaW50IHN0YXJ0ID0gMF0pID0+IGxpc3QuaW5kZXhPZihlbGVtZW50LCBzdGFydCk7CgogIEBvdmVycmlkZQogIGludCBpbmRleFdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCBbaW50IHN0YXJ0ID0gMF0pID0+CiAgICAgIGxpc3QuaW5kZXhXaGVyZSh0ZXN0LCBzdGFydCk7CgogIEBvdmVycmlkZQogIGludCBsYXN0SW5kZXhPZihFIGVsZW1lbnQsIFtpbnQgc3RhcnRdKSA9PiBsaXN0Lmxhc3RJbmRleE9mKGVsZW1lbnQsIHN0YXJ0KTsKCiAgQG92ZXJyaWRlCiAgaW50IGxhc3RJbmRleFdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCBbaW50IHN0YXJ0XSkgPT4KICAgICAgbGlzdC5sYXN0SW5kZXhXaGVyZSh0ZXN0LCBzdGFydCk7CgogIEBvdmVycmlkZQogIHZvaWQgY2xlYXIoKSA9PiBsaXN0LmNsZWFyKCk7CgogIEBvdmVycmlkZQogIHZvaWQgaW5zZXJ0KGludCBpbmRleCwgRSBlbGVtZW50KSA9PiBsaXN0Lmluc2VydChpbmRleCwgZWxlbWVudCk7CgogIEBvdmVycmlkZQogIHZvaWQgaW5zZXJ0QWxsKGludCBpbmRleCwgSXRlcmFibGU8RT4gaXRlcmFibGUpIHsKICAgIGxpc3QuaW5zZXJ0QWxsKGluZGV4LCBpdGVyYWJsZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHNldEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKSA9PiBsaXN0LnNldEFsbChpbmRleCwgaXRlcmFibGUpOwoKICBAb3ZlcnJpZGUKICBib29sIHJlbW92ZShPYmplY3QgdmFsdWUpID0+IGxpc3QucmVtb3ZlKHZhbHVlKTsKCiAgQG92ZXJyaWRlCiAgRSByZW1vdmVBdChpbnQgaW5kZXgpID0+IGxpc3QucmVtb3ZlQXQoaW5kZXgpOwoKICBAb3ZlcnJpZGUKICBFIHJlbW92ZUxhc3QoKSA9PiBsaXN0LnJlbW92ZUxhc3QoKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gbGlzdC5yZW1vdmVXaGVyZSh0ZXN0KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gbGlzdC5yZXRhaW5XaGVyZSh0ZXN0KTsKCiAgQG92ZXJyaWRlCiAgTGlzdDxFPiBzdWJsaXN0KGludCBzdGFydCwgW2ludCBlbmRdKSA9PiBsaXN0LnN1Ymxpc3Qoc3RhcnQsIGVuZCk7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPEU+IGdldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCkgPT4gbGlzdC5nZXRSYW5nZShzdGFydCwgZW5kKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlPEU+IGl0ZXJhYmxlLCBbaW50IHNraXBDb3VudCA9IDBdKSB7CiAgICBsaXN0LnNldFJhbmdlKHN0YXJ0LCBlbmQsIGl0ZXJhYmxlLCBza2lwQ291bnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZW1vdmVSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIGxpc3QucmVtb3ZlUmFuZ2Uoc3RhcnQsIGVuZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZpbGxSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIFtFIGZpbGxWYWx1ZV0pIHsKICAgIGxpc3QuZmlsbFJhbmdlKHN0YXJ0LCBlbmQsIGZpbGxWYWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlcGxhY2VSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlPEU+IHJlcGxhY2VtZW50KSB7CiAgICBsaXN0LnJlcGxhY2VSYW5nZShzdGFydCwgZW5kLCByZXBsYWNlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBNYXA8aW50LCBFPiBhc01hcCgpID0+IGxpc3QuYXNNYXAoKTsKfQoKY2xhc3MgRGVidWdTZXQ8RT4gZXh0ZW5kcyBEZWJ1Z0l0ZXJhYmxlPEU+IGltcGxlbWVudHMgU2V0PEU+IHsKICBEZWJ1Z0NhbGxiYWNrIGFkZENhbGxiYWNrOwoKICBEZWJ1Z1NldChTZXQ8RT4gc2V0LCB7dGhpcy5hZGRDYWxsYmFja30pIDogc3VwZXIoc2V0KTsKCiAgU2V0PEU+IGdldCBzZXQgPT4gaXRlcmFibGU7CgogIEBvdmVycmlkZQogIFNldDxSPiBjYXN0PFI+KCkgPT4gU2V0LmNhc3RGcm9tPEUsIFI+KHRoaXMpOwogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnMoT2JqZWN0IHZhbHVlKSA9PiBzZXQuY29udGFpbnModmFsdWUpOwoKICBAb3ZlcnJpZGUKICBib29sIGFkZChFIHZhbHVlKSB7CiAgICBpZiAoYWRkQ2FsbGJhY2sgIT0gbnVsbCkgewogICAgICBhZGRDYWxsYmFjaygnYWRkJywgdmFsdWUsIG51bGwpOwogICAgfQogICAgcmV0dXJuIHNldC5hZGQodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gZWxlbWVudHMpIHsKICAgIGVsZW1lbnRzLmZvckVhY2goYWRkKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgcmVtb3ZlKE9iamVjdCB2YWx1ZSkgPT4gc2V0LnJlbW92ZSh2YWx1ZSk7CgogIEBvdmVycmlkZQogIEUgbG9va3VwKE9iamVjdCBvYmplY3QpID0+IHNldC5sb29rdXAob2JqZWN0KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCByZW1vdmVBbGwoSXRlcmFibGU8T2JqZWN0PiBlbGVtZW50cykgPT4gc2V0LnJlbW92ZUFsbChlbGVtZW50cyk7CgogIEBvdmVycmlkZQogIHZvaWQgcmV0YWluQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpID0+IHNldC5yZXRhaW5BbGwoZWxlbWVudHMpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSA9PiBzZXQucmVtb3ZlV2hlcmUodGVzdCk7CgogIEBvdmVycmlkZQogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IHNldC5yZXRhaW5XaGVyZSh0ZXN0KTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc0FsbChJdGVyYWJsZTxPYmplY3Q+IG90aGVyKSA9PiBzZXQuY29udGFpbnNBbGwob3RoZXIpOwoKICBAb3ZlcnJpZGUKICBTZXQ8RT4gaW50ZXJzZWN0aW9uKFNldDxPYmplY3Q+IG90aGVyKSA9PiBzZXQuaW50ZXJzZWN0aW9uKG90aGVyKTsKCiAgQG92ZXJyaWRlCiAgU2V0PEU+IHVuaW9uKFNldDxFPiBvdGhlcikgPT4gc2V0LnVuaW9uKG90aGVyKTsKCiAgQG92ZXJyaWRlCiAgU2V0PEU+IGRpZmZlcmVuY2UoU2V0PE9iamVjdD4gb3RoZXIpID0+IHNldC5kaWZmZXJlbmNlKG90aGVyKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBjbGVhcigpID0+IHNldC5jbGVhcigpOwoKICBAb3ZlcnJpZGUKICBTZXQ8RT4gdG9TZXQoKSA9PiBzZXQudG9TZXQoKTsKfQoKLy8vIFRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlIHJ1bnRpbWUgdHlwZSBvZiBbb2JqZWN0XSBpcyBub3QgaW4KLy8vIFtydW50aW1lVHlwZXNdLgovLy8KLy8vIFVzZSB0aGlzIHRvIGdyYWR1YWxseSBidWlsZCB0aGUgc2V0IG9mIGFjdHVhbCBydW50aW1lIHZhbHVlcyBvZiBbb2JqZWN0XQovLy8gYXQgdGhlIGNhbGwgc2l0ZSBieSBydW5uaW5nIHRlc3QgcHJvZ3JhbXMgYW5kIGFkZGluZyB0byBbcnVudGltZVR5cGVzXSB3aGVuCi8vLyBuZXcgdHlwZSBhcmUgZm91bmQuCnZvaWQgYXNzZXJ0VHlwZShTdHJpbmcgbmFtZSwgTGlzdDxTdHJpbmc+IHJ1bnRpbWVUeXBlcywgdmFyIG9iamVjdCwKICAgIHtib29sIHNob3dPYmplY3RzOiBmYWxzZX0pIHsKICBTdHJpbmcgcnVudGltZVR5cGUgPSAnJHtvYmplY3QucnVudGltZVR5cGV9JzsKICBpZiAocnVudGltZVR5cGVzICE9IG51bGwgJiYgcnVudGltZVR5cGVzLmNvbnRhaW5zKHJ1bnRpbWVUeXBlKSkgcmV0dXJuOwogIHRocm93ICckbmFtZTogJHJ1bnRpbWVUeXBlJwogICAgICAnJHtzaG93T2JqZWN0cyA/ICcgKCRvYmplY3QpJyA6ICcnfSc7Cn0KCi8vLyBDYWxsYmFjayBmb3IgdGhlIFthZGRDYWxsYmFja10gb2YgW0RlYnVnTWFwXSB0aGF0IHRocm93cyBhbiBleGNlcHRpb24gaWYKLy8vIHRoZSBydW50aW1lIHR5cGUgb2Yga2V5L3ZhbHVlIHBhaXJzIGFyZSBub3QgaW4gW3J1bnRpbWVUeXBlc10uCi8vLwovLy8gVXNlIHRoaXMgdG8gZ3JhZHVhbGx5IGJ1aWxkIHRoZSBzZXQgb2YgYWN0dWFsIHJ1bnRpbWUgdmFsdWVzIG9mIGtleS92YWx1ZQovLy8gcGFpcnMgb2YgYSBtYXAgYnkgcnVubmluZyB0ZXN0IHByb2dyYW1zIGFuZCBhZGRpbmcgdG8gW3J1bnRpbWVUeXBlc10gd2hlbgovLy8gbmV3IHR5cGUgYXJlIGZvdW5kLgpjbGFzcyBNYXBUeXBlQXNzZXJ0ZXIgewogIGZpbmFsIFN0cmluZyBuYW1lOwogIGZpbmFsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gcnVudGltZVR5cGVzOwogIGZpbmFsIGJvb2wgc2hvd09iamVjdHM7CgogIGNvbnN0IE1hcFR5cGVBc3NlcnRlcih0aGlzLm5hbWUsIHRoaXMucnVudGltZVR5cGVzLAogICAgICB7Ym9vbCB0aGlzLnNob3dPYmplY3RzOiBmYWxzZX0pOwoKICB2b2lkIGNhbGwoU3RyaW5nIG1ldGhvZE5hbWUsIHZhciBrZXksIHZhciB2YWx1ZSkgewogICAgY2hlY2soa2V5LCB2YWx1ZSwgJyRtZXRob2ROYW1lOiAnKTsKICB9CgogIHZvaWQgY2hlY2sodmFyIGtleSwgdmFyIHZhbHVlLCBbU3RyaW5nIHRleHQgPSAnJ10pIHsKICAgIFN0cmluZyBrZXlUeXBlID0gJyR7a2V5LnJ1bnRpbWVUeXBlfSc7CiAgICBTdHJpbmcgdmFsdWVUeXBlID0gJyR7dmFsdWUucnVudGltZVR5cGV9JzsKICAgIExpc3Q8U3RyaW5nPiB2YWx1ZXNUeXBlcyA9IHJ1bnRpbWVUeXBlc1trZXlUeXBlXTsKICAgIGlmICh2YWx1ZXNUeXBlcyAhPSBudWxsICYmIHZhbHVlc1R5cGVzLmNvbnRhaW5zKHZhbHVlVHlwZSkpIHJldHVybjsKICAgIHRocm93ICckbmFtZTogJHRleHQka2V5VHlwZSA9PiAkdmFsdWVUeXBlJwogICAgICAgICcke3Nob3dPYmplY3RzID8gJyAoJGtleSA9PiAkdmFsdWUpJyA6ICcnfSc7CiAgfQp9CgovLy8gQ2FsbGJhY2sgZm9yIHRoZSBbYWRkQ2FsbGJhY2tdIG9mIFtEZWJ1Z1NldF0gb3IgW0RlYnVnTGlzdF0gIHRoYXQgdGhyb3dzIGFuCi8vLyBleGNlcHRpb24gaWYgdGhlIHJ1bnRpbWUgdHlwZSBvZiB0aGUgZWxlbWVudHMgYXJlIG5vdCBpbiBbcnVudGltZVR5cGVzXS4KLy8vCi8vLyBVc2UgdGhpcyB0byBncmFkdWFsbHkgYnVpbGQgdGhlIHNldCBvZiBhY3R1YWwgcnVudGltZSB2YWx1ZXMgb2YgdGhlIGVsZW1lbnRzCi8vLyBvZiBhIGNvbGxlY3Rpb24gYnkgcnVubmluZyB0ZXN0IHByb2dyYW1zIGFuZCBhZGRpbmcgdG8gW3J1bnRpbWVUeXBlc10gd2hlbgovLy8gbmV3IHR5cGUgYXJlIGZvdW5kLgpjbGFzcyBDb2xsZWN0aW9uVHlwZUFzc2VydGVyIHsKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBmaW5hbCBMaXN0PFN0cmluZz4gcnVudGltZVR5cGVzOwogIGZpbmFsIGJvb2wgc2hvd09iamVjdHM7CgogIGNvbnN0IENvbGxlY3Rpb25UeXBlQXNzZXJ0ZXIodGhpcy5uYW1lLCB0aGlzLnJ1bnRpbWVUeXBlcywKICAgICAge2Jvb2wgdGhpcy5zaG93T2JqZWN0czogZmFsc2V9KTsKCiAgdm9pZCBjYWxsKFN0cmluZyBtZXRob2ROYW1lLCB2YXIgZWxlbWVudCwgXykgewogICAgY2hlY2soZWxlbWVudCwgJyRtZXRob2ROYW1lOiAnKTsKICB9CgogIHZvaWQgY2hlY2sodmFyIGVsZW1lbnQsIFtTdHJpbmcgdGV4dCA9ICcnXSkgewogICAgU3RyaW5nIGVsZW1lbnRUeXBlID0gJyR7ZWxlbWVudC5ydW50aW1lVHlwZX0nOwogICAgaWYgKHJ1bnRpbWVUeXBlcy5jb250YWlucyhlbGVtZW50VHlwZSkpIHJldHVybjsKICAgIHRocm93ICckbmFtZTogJHRleHQkZWxlbWVudFR5cGUnCiAgICAgICAgJyR7c2hvd09iamVjdHMgPyAnICgkZWxlbWVudCknIDogJyd9JzsKICB9Cn0Kge8ATk48AUMBLB0iJSABTx8mBgQBLh4hBAEMQgwlKwQBDD4BDC8BDCYkKwYcBAEMJysYKTQIEAgEAQw7AQwZIjUGIgQBDBEiMAYXBAEMQAEMKgEMLgEMPQEMNiMEAQxJIAEMJgEMKQEMLwEMODkBDC0hBAEMMCEEAgEwHgEgAQwxAQw6DDkBDEMBDEkBDD8BDDoBDEcBDEUxBAEMPAEMRAEMOAEMKjAEAQwmAQwlAQwoAQwuAQwvAQxJAQwvAQxJAQwhAQwfAQwjAQw1NgQBDDQ1BAEMNzIBDDcBDEsBDDkBDCwCAUEdIAFDFQEgAQwyDDUBDCsBDCoZBAEMHhoEAQwdGQQBDCEBDCMdBAEMFh8nBhUEAQwmIjAGGwQBDC0BDDwBDDIBDEsBDDskAQxPAQw7KAEMIAEMRAEMNCUEAQxQAQwzAQwxAQwnAQxEAQxEAQxFAQxJAQxRNAQBDCkiBAEMNisEAQxDMAQBDCcCAT8dATkBHgEMMAw2AQwWHycGGwQBDCYbBAEMMgEMMQEMSAEMSAEMQwEMQwEMRgEMRQEMMgEMQQEMHwEMIQIBQhQETVAYRCEwSh4sAgFNQwROThgYFTAaATYnATUoBAE3Ky82SC81BAIBUE0EUU8YHxUjGgE9JwExJQQBMDM0JS8EAgEycGFja2FnZTpjb21waWxlci9zcmMvaGVscGVycy9kZWJ1Z19jb2xsZWN0aW9uLmRhcnQ4c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaGVscGVycy9leHBlbnNpdmVfbWFwLmRhcnSLwC8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgImRhcnQ6Y29sbGVjdGlvbiI7CgovLy8gVGhlIGV4cGVuc2l2ZSBtYXAgaXMgYSBkYXRhIHN0cnVjdHVyZSB1c2VmdWwgZm9yIHRyYWNraW5nIGRvd24KLy8vIGV4Y2Vzc2l2ZSBtZW1vcnkgdXNhZ2UgZHVlIHRvIGxhcmdlIG1hcHMuIEl0IGFjdHMgYXMgYW4gb3JkaW5hcnkKLy8vIGhhc2ggbWFwLCBidXQgaXQgdXNlcyAxMCB0aW1lcyBtb3JlIG1lbW9yeSAoYnkgZGVmYXVsdCkuCmNsYXNzIEV4cGVuc2l2ZU1hcDxLLCBWPiBleHRlbmRzIE1hcEJhc2U8SywgVj4gewogIGZpbmFsIExpc3QgX21hcHM7CgogIEV4cGVuc2l2ZU1hcChbaW50IGNvcGllcyA9IDEwXSkgOiBfbWFwcyA9IG5ldyBMaXN0KGNvcGllcykgewogICAgYXNzZXJ0KGNvcGllcyA+IDApOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfbWFwcy5sZW5ndGg7IGkrKykgewogICAgICBfbWFwc1tpXSA9IG5ldyBNYXA8SywgVj4oKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoID0+IF9tYXBzWzBdLmxlbmd0aDsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0VtcHR5ID0+IF9tYXBzWzBdLmlzRW1wdHk7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfbWFwc1swXS5pc05vdEVtcHR5OwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxLPiBnZXQga2V5cyA9PiBfbWFwc1swXS5rZXlzOwogIEBvdmVycmlkZQogIEl0ZXJhYmxlPFY+IGdldCB2YWx1ZXMgPT4gX21hcHNbMF0udmFsdWVzOwoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zS2V5KE9iamVjdCBrZXkpID0+IF9tYXBzWzBdLmNvbnRhaW5zS2V5KGtleSk7CiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc1ZhbHVlKE9iamVjdCB2YWx1ZSkgPT4gX21hcHNbMF0uY29udGFpbnNWYWx1ZSh2YWx1ZSk7CgogIEBvdmVycmlkZQogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgPT4gX21hcHNbMF1ba2V5XTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoKHZvaWQgYWN0aW9uKEsga2V5LCBWIHZhbHVlKSkgewogICAgX21hcHNbMF0uZm9yRWFjaChhY3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBvcGVyYXRvciBbXT0oSyBrZXksIFYgdmFsdWUpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX21hcHMubGVuZ3RoOyBpKyspIHsKICAgICAgX21hcHNbaV1ba2V5XSA9IHZhbHVlOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgViBwdXRJZkFic2VudChLIGtleSwgViBpZkFic2VudCgpKSB7CiAgICBpZiAoY29udGFpbnNLZXkoa2V5KSkgcmV0dXJuIHRoaXNba2V5XTsKICAgIFYgdmFsdWUgPSBpZkFic2VudCgpOwogICAgdGhpc1trZXldID0gdmFsdWU7CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZEFsbChNYXA8SywgVj4gb3RoZXIpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX21hcHMubGVuZ3RoOyBpKyspIHsKICAgICAgX21hcHNbaV0uYWRkQWxsKG90aGVyKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIFYgcmVtb3ZlKE9iamVjdCBrZXkpIHsKICAgIFYgcmVzdWx0ID0gX21hcHNbMF0ucmVtb3ZlKGtleSk7CiAgICBmb3IgKGludCBpID0gMTsgaSA8IF9tYXBzLmxlbmd0aDsgaSsrKSB7CiAgICAgIF9tYXBzW2ldLnJlbW92ZShrZXkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2xlYXIoKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9tYXBzLmxlbmd0aDsgaSsrKSB7CiAgICAgIF9tYXBzW2ldLmNsZWFyKCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBNYXA8S1IsIFZSPiBjYXN0PEtSLCBWUj4oKSA9PiBNYXAuY2FzdEZyb208SywgViwgS1IsIFZSPih0aGlzKTsKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZ2V0IGVudHJpZXMgPT4gX21hcHNbMF0uZW50cmllczsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRFbnRyaWVzKEl0ZXJhYmxlPE1hcEVudHJ5PEssIFY+PiBlbnRyaWVzKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9tYXBzLmxlbmd0aDsgaSsrKSB7CiAgICAgIF9tYXBzW2ldLmFkZEVudHJpZXMoZW50cmllcyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBNYXA8S1IsIFZSPiBtYXA8S1IsIFZSPihNYXBFbnRyeTxLUiwgVlI+IHRyYW5zZm9ybShLIGtleSwgViB2YWx1ZSkpID0+CiAgICAgIF9tYXBzWzBdLm1hcCh0cmFuc2Zvcm0pOwoKICBAb3ZlcnJpZGUKICBWIHVwZGF0ZShLIGtleSwgViB1cGRhdGUoViB2YWx1ZSksIHtWIGlmQWJzZW50KCl9KSB7CiAgICBWIHJlc3VsdDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX21hcHMubGVuZ3RoOyBpKyspIHsKICAgICAgcmVzdWx0ID0gX21hcHNbaV0udXBkYXRlKGtleSwgdXBkYXRlLCBpZkFic2VudDogaWZBYnNlbnQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdXBkYXRlQWxsKFYgdXBkYXRlKEsga2V5LCBWIHZhbHVlKSkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfbWFwcy5sZW5ndGg7IGkrKykgewogICAgICBfbWFwc1tpXS51cGRhdGVBbGwodXBkYXRlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEsga2V5LCBWIHZhbHVlKSkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfbWFwcy5sZW5ndGg7IGkrKykgewogICAgICBfbWFwc1tpXS5yZW1vdmVXaGVyZSh0ZXN0KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICJleHBlbnNpdmUoJHtfbWFwc1swXX14JHtfbWFwcy5sZW5ndGh9KSI7Cn0KfgBOTjwBGgFDRT0xFAE/GC0iBgQBDCUMKAwuAQwpDC0BDD0MRQEMLgEMLh4EAQwmLR0GBAEMJywaFxIEAQwhLR4GBAEMGSUtHAYTBAEMES0YBgQBDEIMPAEMNi0kBgQBDEkfAQw3Di1BBhMEAQwtLSIGBAEMMC0iBgQBDEECAS9wYWNrYWdlOmNvbXBpbGVyL3NyYy9oZWxwZXJzL2V4cGVuc2l2ZV9tYXAuZGFydDhzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9oZWxwZXJzL2V4cGVuc2l2ZV9zZXQuZGFydI2fLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJzsKCi8vLyBUaGUgZXhwZW5zaXZlIHNldCBpcyBhIGRhdGEgc3RydWN0dXJlIHVzZWZ1bCBmb3IgdHJhY2tpbmcgZG93bgovLy8gZXhjZXNzaXZlIG1lbW9yeSB1c2FnZSBkdWUgdG8gbGFyZ2Ugc2V0cy4gSXQgYWN0cyBhcyBhbiBvcmRpbmFyeQovLy8gaGFzaCBzZXQsIGJ1dCBpdCB1c2VzIDEwIHRpbWVzIG1vcmUgbWVtb3J5IChieSBkZWZhdWx0KS4KY2xhc3MgRXhwZW5zaXZlU2V0PEU+IGV4dGVuZHMgU2V0QmFzZTxFPiB7CiAgZmluYWwgTGlzdCBfc2V0czsKCiAgRXhwZW5zaXZlU2V0KFtpbnQgY29waWVzID0gMTBdKSA6IF9zZXRzID0gbmV3IExpc3QoY29waWVzKSB7CiAgICBhc3NlcnQoY29waWVzID4gMCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9zZXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIF9zZXRzW2ldID0gbmV3IFNldDxFPigpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBsZW5ndGggPT4gX3NldHNbMF0ubGVuZ3RoOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX3NldHNbMF0uaXNFbXB0eTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9zZXRzWzBdLmlzTm90RW1wdHk7CgogIEBvdmVycmlkZQogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciA9PiBfc2V0c1swXS5pdGVyYXRvcjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWlucyhPYmplY3Qgb2JqZWN0KSA9PiBfc2V0c1swXS5jb250YWlucyhvYmplY3QpOwogIEBvdmVycmlkZQogIEUgbG9va3VwKE9iamVjdCBvYmplY3QpID0+IF9zZXRzWzBdLmxvb2t1cChvYmplY3QpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2godm9pZCBhY3Rpb24oRSBlbGVtZW50KSkgewogICAgX3NldHNbMF0uZm9yRWFjaChhY3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBhZGQoRSBlbGVtZW50KSB7CiAgICBib29sIHJlc3VsdCA9IF9zZXRzWzBdLmFkZChlbGVtZW50KTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgX3NldHMubGVuZ3RoOyBpKyspIHsKICAgICAgX3NldHNbaV0uYWRkKGVsZW1lbnQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IG9iamVjdHMpIHsKICAgIGZvciAoRSBlYWNoIGluIG9iamVjdHMpIHsKICAgICAgYWRkKGVhY2gpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCByZW1vdmUoT2JqZWN0IG9iamVjdCkgewogICAgYm9vbCByZXN1bHQgPSBfc2V0c1swXS5yZW1vdmUob2JqZWN0KTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgX3NldHMubGVuZ3RoOyBpKyspIHsKICAgICAgX3NldHNbaV0ucmVtb3ZlKG9iamVjdCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjbGVhcigpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX3NldHMubGVuZ3RoOyBpKyspIHsKICAgICAgX3NldHNbaV0uY2xlYXIoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVtb3ZlQWxsKEl0ZXJhYmxlPE9iamVjdD4gb2JqZWN0c1RvUmVtb3ZlKSB7CiAgICBmb3IgKHZhciBlYWNoIGluIG9iamVjdHNUb1JlbW92ZSkgewogICAgICByZW1vdmUoZWFjaCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICByZW1vdmVBbGwodGhpcy50b0xpc3QoKS53aGVyZSgoZSkgPT4gdGVzdChlKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgcmVtb3ZlQWxsKHRvTGlzdCgpLndoZXJlKChlKSA9PiAhdGVzdChlKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc0FsbChJdGVyYWJsZTxPYmplY3Q+IG90aGVyKSB7CiAgICBmb3IgKE9iamVjdCBvYmplY3QgaW4gb3RoZXIpIHsKICAgICAgaWYgKCF0aGlzLmNvbnRhaW5zKG9iamVjdCkpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgU2V0IF9uZXdTZXQoKSA9PiBuZXcgRXhwZW5zaXZlU2V0KF9zZXRzLmxlbmd0aCk7CgogIEBvdmVycmlkZQogIFNldDxFPiBpbnRlcnNlY3Rpb24oU2V0PE9iamVjdD4gb3RoZXIpIHsKICAgIFNldDxFPiByZXN1bHQgPSBfbmV3U2V0KCk7CiAgICBpZiAob3RoZXIubGVuZ3RoIDwgdGhpcy5sZW5ndGgpIHsKICAgICAgZm9yICh2YXIgZWxlbWVudCBpbiBvdGhlcikgewogICAgICAgIGlmICh0aGlzLmNvbnRhaW5zKGVsZW1lbnQpKSByZXN1bHQuYWRkKGVsZW1lbnQpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgICAgaWYgKG90aGVyLmNvbnRhaW5zKGVsZW1lbnQpKSByZXN1bHQuYWRkKGVsZW1lbnQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgU2V0PEU+IHVuaW9uKFNldDxFPiBvdGhlcikgewogICAgcmV0dXJuIF9uZXdTZXQoKS4uYWRkQWxsKHRoaXMpLi5hZGRBbGwob3RoZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgU2V0PEU+IGRpZmZlcmVuY2UoU2V0PE9iamVjdD4gb3RoZXIpIHsKICAgIFNldDxFPiByZXN1bHQgPSBfbmV3U2V0KCk7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICghb3RoZXIuY29udGFpbnMoZWxlbWVudCkpIHJlc3VsdC5hZGQoZWxlbWVudCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZXRhaW5BbGwoSXRlcmFibGUgb2JqZWN0c1RvUmV0YWluKSB7CiAgICBTZXQgcmV0YWluU2V0OwogICAgaWYgKG9iamVjdHNUb1JldGFpbiBpcyBTZXQpIHsKICAgICAgcmV0YWluU2V0ID0gb2JqZWN0c1RvUmV0YWluOwogICAgfSBlbHNlIHsKICAgICAgcmV0YWluU2V0ID0gb2JqZWN0c1RvUmV0YWluLnRvU2V0KCk7CiAgICB9CiAgICByZXRhaW5XaGVyZShyZXRhaW5TZXQuY29udGFpbnMpOwogIH0KCiAgQG92ZXJyaWRlCiAgU2V0PEU+IHRvU2V0KCkgewogICAgdmFyIHJlc3VsdCA9IG5ldyBFeHBlbnNpdmVTZXQ8RT4oX3NldHMubGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX3NldHMubGVuZ3RoOyBpKyspIHsKICAgICAgcmVzdWx0Ll9zZXRzW2ldID0gX3NldHNbaV0udG9TZXQoKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiZXhwZW5zaXZlKCR7X3NldHNbMF19eCR7X3NldHMubGVuZ3RofSkiOwp9CoCYAE5OPAEaAUNFPSsUAT8YLR8GBAEMJQwoDC4BDDEBDD0MNgEMKR4EAQwYKS0dBhMEAQwlHhEGBAEMHystHwYTBAEMES0YBgQBDDUoFAYEAQwrNAQBDCswBAEMLSMwBhEEATMBDCsfJiM5CA0gOggGEwQBDB8zBAEMKR8eOQYTBAEMLRMiIw0rBiUEAQwTNC0qBhMEAQxBAgEvcGFja2FnZTpjb21waWxlci9zcmMvaGVscGVycy9leHBlbnNpdmVfc2V0LmRhcnQwc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaGVscGVycy9zdGF0cy5kYXJ0wABcHS8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6YXN5bmMnIHNob3cgRXZlbnRTaW5rOwppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbic7CmltcG9ydCAnZGFydDpjb252ZXJ0JzsKCmltcG9ydCAnLi4vLi4vY29tcGlsZXIuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbXBpbGVyLmRhcnQnIHNob3cgQ29tcGlsZXI7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnOwoKLy8gSGVscGVyIG1ldGhvZHMgZm9yIHN0YXRpc3RpY3MuCgovLy8gQ3VycmVudCBzdGF0cyBjb2xsZWN0b3IuIFVzZSBbZW5hYmxlU3RhdHNPdXRwdXRdIHRvIGVuYWJsZSByZWNvcmRpbmcgb2YKLy8vIHN0YXRzLgpTdGF0cyBnZXQgc3RhdHMgewogIGVuYWJsZURlYnVnTW9kZSgpOwogIGlmIChfc3RhdHMgPT0gbnVsbCkgewogICAgX3N0YXRzID0gY29uc3QgU3RhdHMoKTsKICB9CiAgcmV0dXJuIF9zdGF0czsKfQoKU3RhdHMgX3N0YXRzOwoKLy8vIEVuYWJsZSByZWNvcmRpbmcgb2Ygc3RhdHMuIFVzZSBbU3RhdHMuZHVtcFN0YXRzXSB0byBvdXRwdXQgdGhlIHJlY29yZCBzdGF0cy4KLy8vCi8vLyBQYXNzIHRoZSBbb3V0cHV0UHJvdmlkZXJdIG9mIFtDb21waWxlcl0gdG8gZ2VuZXJhdGUgc3RhdHMgaW50byBhIHNlcGFyYXRlCi8vLyBmaWxlIHVzaW5nIFtuYW1lXSBhbmQgW2V4dGVuc2lvbl0gZm9yIHRoZSBmaWxlbmFtZS4gSWYgb21pdHRlZCwgc3RhdHMgYXJlCi8vLyBwcmludGVkIG9uIHN0YW5kYXJkIG91dC4KLy8vCi8vLyBJZiBbeG1sXSBpcyBgdHJ1ZWAsIHN0YXRzIG91dHB1dCBpcyBmb3JtYXR0ZWQgYXMgWE1MIHdpdGggYSBkZWZhdWx0Ci8vLyBleHRlbnNpb24gb2YgJ3htbCcsIG90aGVyd2lzZSB0aGUgb3V0cHV0IGlzIGluZGVudGVkIHRleHQgd2l0aCBhIGRlZmF1bHQKLy8vIGV4dGVuc2lvbiBvZiAnbG9nJy4Kdm9pZCBlbmFibGVTdGF0c091dHB1dCgKICAgIHtDb21waWxlck91dHB1dFByb3ZpZGVyIG91dHB1dFByb3ZpZGVyLAogICAgYm9vbCB4bWw6IHRydWUsCiAgICBTdHJpbmcgbmFtZTogJ3N0YXRzJywKICAgIFN0cmluZyBleHRlbnNpb24sCiAgICBpbnQgZXhhbXBsZXM6IDEwfSkgewogIGlmIChfc3RhdHMgIT0gbnVsbCkgewogICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoJ1N0YXRzIGhhdmUgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLicpOwogIH0KICBlbmFibGVEZWJ1Z01vZGUoKTsKCiAgU3RhdHNPdXRwdXQgb3V0cHV0OwogIGlmIChvdXRwdXRQcm92aWRlciAhPSBudWxsKSB7CiAgICBpZiAoZXh0ZW5zaW9uID09IG51bGwpIHsKICAgICAgZXh0ZW5zaW9uID0geG1sID8gJ3htbCcgOiAnbG9nJzsKICAgIH0KICAgIG91dHB1dCA9IG5ldyBTaW5rT3V0cHV0KG91dHB1dFByb3ZpZGVyKG5hbWUsIGV4dGVuc2lvbikpOwogIH0gZWxzZSB7CiAgICBvdXRwdXQgPSBjb25zdCBEZWJ1Z091dHB1dCgpOwogIH0KICBTdGF0c1ByaW50ZXIgcHJpbnRlcjsKICBpZiAoeG1sKSB7CiAgICBwcmludGVyID0gbmV3IFhNTFByaW50ZXIob3V0cHV0OiBvdXRwdXQsIGV4YW1wbGVzOiBleGFtcGxlcyk7CiAgfSBlbHNlIHsKICAgIHByaW50ZXIgPSBuZXcgQ29uc29sZVByaW50ZXIob3V0cHV0OiBvdXRwdXQsIGV4YW1wbGVzOiBleGFtcGxlcyk7CiAgfQogIF9zdGF0cyA9IG5ldyBBY3RpdmVTdGF0cyhwcmludGVyKTsKfQoKLy8vIEludGVyZmFjZSBmb3IgZ2F0aGVyaW5nIGFuZCBkaXNwbGF5IG9mIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uLgovLy8gVGhpcyBjbGFzcyBzZXJ2ZXMgYXMgdGhlIG5vb3AgY29sbGVjdG9yLgpjbGFzcyBTdGF0cyB7CiAgY29uc3QgU3RhdHMoKTsKCiAgLy8vIFJlZ2lzdGVycyBba2V5XSwgW3ZhbHVlXSBwYWlyIGluIHRoZSBtYXAgW2lkXS4gSWYgW2Zyb21FeGlzdGluZ10gaXMKICAvLy8gbm9uLW51bGwgYW5kIFtrZXldIGFscmVhZHkgZXhpc3RzLCB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIFtrZXldIHdpbGwKICAvLy8gYmUgdGhlIHJldHVybiB2YWx1ZSBvZiBbZnJvbUV4aXN0aW5nXSB3aGVuIGNhbGxlZCB3aXRoIHRoZSBleGlzdGluZyB2YWx1ZS4KICAvLy8KICAvLy8gVGhlIHJlY29yZGVkIGluZm9ybWF0aW9uIGlzIG5vdCBkdW1wZWQgYXV0b21hdGljYWxseS4KICB2b2lkIHJlY29yZE1hcChpZCwga2V5LCB2YWx1ZSwge2Zyb21FeGlzdGluZyh2YWx1ZSl9KSB7fQoKICAvLy8gUmV0dXJucyB0aGUgbWFwIFtpZF0gcmVjb3JkZWQgd2l0aCBbcmVjb3JkTWFwXS4KICBNYXAgZ2V0TWFwKGlkKSA9PiBjb25zdCB7fTsKCiAgLy8vIFJlZ2lzdGVycyBbZWxlbWVudF0gYXMgYW4gZWxlbWVudCBvZiB0aGUgbGlzdCBbaWRdLiBJZiBwcm92aWRlZCwgW2RhdGFdCiAgLy8vIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGF0YSBmb3IgW2VsZW1lbnRdLgogIC8vLwogIC8vLyBUaGUgcmVjb3JkZWQgaW5mb3JtYXRpb24gaXMgZHVtcGVkIGF1dG9tYXRpY2FsbHkgb24gY2FsbCB0byBbZHVtcFN0YXRzXS4KICAvLy8KICAvLy8gRXhhbXBsZToKICAvLy8gICBDYWxsaW5nIFtyZWNvcmRFbGVtZW50XSBsaWtlIHRoaXM6CiAgLy8vICAgICByZWNvcmRFbGVtZW50KCdmb28nLCAnYScsIGRhdGE6ICdmaXJzdC1hLWRhdGEnKTsKICAvLy8gICAgIHJlY29yZEVsZW1lbnQoJ2ZvbycsICdhJywgZGF0YTogJ3NlY29uZC1hLWRhdGEnKTsKICAvLy8gICAgIHJlY29yZEVsZW1lbnQoJ2ZvbycsICdiJyk7CiAgLy8vICAgICByZWNvcmRFbGVtZW50KCdiYXInLCAnYScsIGRhdGE6ICd0aGlyZC1hLWRhdGEnKTsKICAvLy8gICAgIHJlY29yZEVsZW1lbnQoJ2JhcicsICdjJyk7CiAgLy8vICAgd2lsbCByZXN1bHQgaW4gYSBkdW1wIGxpa2UgdGhpczoKICAvLy8gICAgIGZvbzogMgogIC8vLyAgICAgIHZhbHVlPWEgZGF0YT1zZWNvbmQtYS1kYXRhCiAgLy8vICAgICAgYgogIC8vLyAgICAgYmFyOiAyCiAgLy8vICAgICAgdmFsdWU9YSBkYXRhPXRoaXJkLWEtZGF0YQogIC8vLyAgICAgIGMKICAvLy8KICB2b2lkIHJlY29yZEVsZW1lbnQoaWQsIGVsZW1lbnQsIHtkYXRhfSkge30KCiAgLy8vIFJldHVybnMgdGhlIGxpc3QgW2lkXSByZWNvcmRlZCB3aXRoIFtyZWNvcmRFbGVtZW50XS4KICBJdGVyYWJsZSBnZXRMaXN0KFN0cmluZyBpZCkgPT4gY29uc3QgW107CgogIC8vLyBSZWdpc3RlcnMgW3ZhbHVlXSBhcyBhbiBvY2N1cnJlbmNlIG9mIFtpZF0uIElmIHBhc3NlZCwgW2V4YW1wbGVdIHByb3ZpZGVzCiAgLy8vIGFuIGV4YW1wbGUgZGF0YSBvZiB0aGUgb2NjdXJyZW5jZSBvZiBbdmFsdWVdLgogIC8vLwogIC8vLyBUaGUgcmVjb3JkZWQgaW5mb3JtYXRpb24gaXMgZHVtcGVkIGF1dG9tYXRpY2FsbHkgb24gY2FsbCB0byBbZHVtcFN0YXRzXS4KICAvLy8KICAvLy8gRXhhbXBsZToKICAvLy8gICBDYWxsaW5nIFtyZWNvcmRGcmVxdWVuY3ldIGxpa2UgdGhpczoKICAvLy8gICAgIHJlY29yZEZyZXF1ZW5jeSgnZm9vJywgJ2EnLCAnZmlyc3QtYS1kYXRhJyk7CiAgLy8vICAgICByZWNvcmRGcmVxdWVuY3koJ2ZvbycsICdhJywgJ3NlY29uZC1hLWRhdGEnKTsKICAvLy8gICAgIHJlY29yZEZyZXF1ZW5jeSgnYmFyJywgJ2InLCAnZmlyc3QtYi1kYXRhJyk7CiAgLy8vICAgICByZWNvcmRGcmVxdWVuY3koJ2ZvbycsICdjJyk7CiAgLy8vICAgICByZWNvcmRGcmVxdWVuY3koJ2JhcicsICdiJyk7CiAgLy8vICAgd2lsbCByZXN1bHQgaW4gYSBkdW1wIGxpa2UgdGhpczoKICAvLy8gICAgIGZvbzoKICAvLy8gICAgICBhOiAyCiAgLy8vICAgICAgIGZpcnN0LWEtZGF0YQogIC8vLyAgICAgICBzZWNvbmQtYS1kYXRhCiAgLy8vICAgICAgYzogMQogIC8vLyAgICAgYmFyOgogIC8vLyAgICAgIGI6IDIKICAvLy8gICAgICAgZmlyc3QtYi1kYXRhCiAgLy8vCiAgdm9pZCByZWNvcmRGcmVxdWVuY3koaWQsIHZhbHVlLCBbZXhhbXBsZV0pIHt9CgogIC8vLyBGb3IgZWFjaCBrZXkvdmFsdWUgcGFpciBpbiBbbWFwXSB0aGUgZWxlbWVudHMgaW4gdGhlIHZhbHVlIGFyZSByZWdpc3RlcmVkCiAgLy8vIGFzIGV4YW1wbGVzIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBrZXkgaW4gW2lkXS4KICB2b2lkIHJlY29yZEZyZXF1ZW5jaWVzKGlkLCBNYXA8ZHluYW1pYywgSXRlcmFibGU+IG1hcCkge30KCiAgLy8vIFJldHVybnMgdGhlIGV4YW1wbGVzIGdpdmVuIGZvciB0aGUgb2NjdXJyZW5jZSBvZiBbdmFsdWVdIGZvciBbaWRdLgogIEl0ZXJhYmxlIHJlY29yZGVkRnJlcXVlbmNpZXMoaWQsIHZhbHVlKSA9PiBjb25zdCBbXTsKCiAgLy8vIEluY3JlYXNlcyB0aGUgY291bnRlciBbaWRdIGJ5IDEuIElmIHByb3ZpZGVkLCBbZXhhbXBsZV0gaXMgdXNlZCBhcyBhbgogIC8vLyBleGFtcGxlIG9mIHRoZSBjb3VudCBhbmQgW2RhdGFdIHByb3ZpZGVzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9yCiAgLy8vIFtleGFtcGxlXS4KICAvLy8KICAvLy8gVGhlIHJlY29yZGVkIGluZm9ybWF0aW9uIGlzIGR1bXBlZCBhdXRvbWF0aWNhbGx5IG9uIGNhbGwgdG8gW2R1bXBTdGF0c10uCiAgLy8vCiAgLy8vIEV4YW1wbGU6CiAgLy8vICAgQ2FsbGluZyBbcmVjb3JkQ291bnRlcl0gbGlrZSB0aGlzOgogIC8vLyAgICAgcmVjb3JkQ291bnRlcignZm9vJywgJ2EnKTsKICAvLy8gICAgIHJlY29yZENvdW50ZXIoJ2ZvbycsICdhJyk7CiAgLy8vICAgICByZWNvcmRDb3VudGVyKCdmb28nLCAnYicpOwogIC8vLyAgICAgcmVjb3JkQ291bnRlcignYmFyJywgJ2MnLCAnZmlyc3QtYy1kYXRhJyk7CiAgLy8vICAgICByZWNvcmRDb3VudGVyKCdiYXInLCAnYycsICdzZWNvbmQtYy1kYXRhJyk7CiAgLy8vICAgICByZWNvcmRDb3VudGVyKCdiYXInLCAnZCcpOwogIC8vLyAgICAgcmVjb3JkQ291bnRlcignYmFyJywgJ2QnKTsKICAvLy8gICAgIHJlY29yZENvdW50ZXIoJ2JheicpOwogIC8vLyAgICAgcmVjb3JkQ291bnRlcignYmF6Jyk7CiAgLy8vICAgd2lsbCByZXN1bHQgaW4gYSBkdW1wIGxpa2UgdGhpczoKICAvLy8gICAgIGZvbzogMwogIC8vLyAgICAgIGNvdW50PTIgZXhhbXBsZT1hCiAgLy8vICAgICAgY291bnQ9MSBleGFtcGxlPWIKICAvLy8gICAgIGJhcjogNAogIC8vLyAgICAgIGNvdW50PTIgZXhhbXBsZXM9MgogIC8vLyAgICAgICBjOgogIC8vLyAgICAgICAgZmlyc3QtYy1kYXRhCiAgLy8vICAgICAgICBzZWNvbmQtYy1kYXRhCiAgLy8vICAgICAgIGQKICAvLy8gICAgIGJhejogMgogIC8vLwogIHZvaWQgcmVjb3JkQ291bnRlcihpZCwgW2V4YW1wbGUsIGRhdGFdKSB7fQoKICAvLy8gUmVjb3JkcyB0aGUgY3VycmVudCBzdGFjayB0cmFjZSB1bmRlciB0aGUga2V5IFtpZF0uIE9ubHkgZXZlcnkKICAvLy8gW3NhbXBsZUZyZXF1ZW5jeV0gY2FsbCB3aXRoIHRoZSBzYW1lIGlkIGlzIHJlY29yZGVkLCBhbmQgaWYgb21pdHRlZAogIC8vLyBbc3RhY2tUcmFjZVNhbXBsZUZyZXF1ZW5jeV0gaXMgdXNlZC4KICB2b2lkIHJlY29yZFRyYWNlKGlkLCB7aW50IHNhbXBsZUZyZXF1ZW5jeX0pIHt9CgogIC8vLyBUaGUgZGVmYXVsdCBzYW1wbGUgZnJlcXVlbmN5IHVzZWQgZm9yIHJlY29yZGluZyBzdGFjayB0cmFjZXMuCiAgaW50IGdldCBzdGFja1RyYWNlU2FtcGxlRnJlcXVlbmN5ID0+IDA7CgogIC8vLyBTZXQgdGhlIGRlZmF1bHQgc2FtcGxlIGZyZXF1ZW5jeSB1c2VkIGZvciByZWNvcmRpbmcgc3RhY2sgdHJhY2VzLgogIHZvaWQgc2V0IHN0YWNrVHJhY2VTYW1wbGVGcmVxdWVuY3koaW50IHZhbHVlKSB7fQoKICAvLy8gRHVtcHMgdGhlIHN0YXRzIGZvciB0aGUgcmVjb3JkZWQgZnJlcXVlbmNpZXMsIHNldHMsIGFuZCBjb3VudGVycy4gSWYKICAvLy8gcHJvdmlkZWQgW2JlZm9yZUNsb3NlXSBpcyBjYWxsZWQgYmVmb3JlIGNsb3NpbmcgdGhlIGR1bXAgb3V0cHV0LiBUaGlzCiAgLy8vIGNhbiBiZSB1c2VkIHRvIGluY2x1ZGUgY29ycmVsYXRpb25zIG9uIHRoZSBjb2xsZWN0ZWQgZGF0YSB0aHJvdWdoCiAgLy8vIFtkdW1wQ29ycmVsYXRpb25dLgogIHZvaWQgZHVtcFN0YXRzKHt2b2lkIGJlZm9yZUNsb3NlKCl9KSB7fQoKICAvLy8gUHJpbnRzIHRoZSBjb3JyZWxhdGlvbiBiZXR3ZWVuIHRoZSBlbGVtZW50cyBvZiBbYV0gYW5kIFtiXS4KICAvLy8KICAvLy8gVGhyZWUgc2V0cyBhcmUgb3V0cHV0IHVzaW5nIFtpZEFdIGFuZCBbaWRCXSBhcyBsYWJlbHMgZm9yIHRoZSBlbGVtZW50cwogIC8vLyBbYV0gYW5kIFtiXToKICAvLy8KICAvLy8gICAnaWRBICYmIGlkQicgbGlzdHMgdGhlIGVsZW1lbnRzIGJvdGggaW4gW2FdIGFuZCBbYl0sCiAgLy8vICAgJyFpZEEgJiYgaWRCJyBsaXN0cyB0aGUgZWxlbWVudHMgbm90IGluIFthXSBidXQgaW4gW2JdLCBhbmQKICAvLy8gICAnaWRBICYmICFpZEInIGxpc3RzIHRoZSBlbGVtZW50cyBpbiBbYV0gYnV0IG5vdCBpbiBbYl0uCiAgLy8vCiAgLy8vIElmIFtkYXRhQV0gYW5kL29yIFtkYXRhQl0gYXJlIHByb3ZpZGVkLCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIHRoZQogIC8vLyBlbGVtZW50cyBhcmUgbG9va2VkIHVwIGluIFtkYXRhQV0gb3IgW2RhdGFCXSB1c2luZyBbZGF0YUFdIGFzIHRoZSBwcmltYXJ5CiAgLy8vIHNvdXJjZS4KICB2b2lkIGR1bXBDb3JyZWxhdGlvbihpZEEsIEl0ZXJhYmxlIGEsIGlkQiwgSXRlcmFibGUgYiwKICAgICAge01hcCBkYXRhQSwgTWFwIGRhdGFCfSkge30KfQoKLy8vIEludGVyZmFjZSBmb3IgcHJpbnRpbmcgb3V0cHV0IGRhdGEuCi8vLwovLy8gVGhpcyBjbGFzcyBzZXJ2ZXMgYXMgdGhlIGRpc2FibGVkIG91dHB1dC4KY2xhc3MgU3RhdHNPdXRwdXQgewogIGNvbnN0IFN0YXRzT3V0cHV0KCk7CgogIC8vLyBQcmludCBbdGV4dF0gYXMgb24gYSBzZXBhcmF0ZSBsaW5lLgogIHZvaWQgcHJpbnRsbihTdHJpbmcgdGV4dCkge30KfQoKLy8vIE91dHB1dCB0byB0aGUgW2RlYnVnUHJpbnRdIG1ldGhvZC4KY2xhc3MgRGVidWdPdXRwdXQgaW1wbGVtZW50cyBTdGF0c091dHB1dCB7CiAgY29uc3QgRGVidWdPdXRwdXQoKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBwcmludGxuKFN0cmluZyB0ZXh0KSA9PiBkZWJ1Z1ByaW50KHRleHQpOwp9CgovLy8gT3V0cHV0IHRvIGFuIFtFdmVudFNpbmtdLiBVc2VkIHRvIG91dHB1dCB0byBhIGZpbGUgdGhyb3VnaCB0aGUKLy8vIFtDb21waWxlck91dHB1dFByb3ZpZGVyXS4KY2xhc3MgU2lua091dHB1dCBpbXBsZW1lbnRzIFN0YXRzT3V0cHV0IHsKICBFdmVudFNpbms8U3RyaW5nPiBzaW5rOwoKICBTaW5rT3V0cHV0KHRoaXMuc2luayk7CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRsbihTdHJpbmcgdGV4dCkgewogICAgc2luay5hZGQodGV4dCk7CiAgICBzaW5rLmFkZCgnXG4nKTsKICB9Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIHByaW50aW5nIHN0YXRzIGNvbGxlY3RlZCBpbiBbU3RhdHNdLgphYnN0cmFjdCBjbGFzcyBTdGF0c1ByaW50ZXIgewogIC8vLyBUaGUgbnVtYmVyIG9mIGV4YW1wbGVzIHByaW50ZXIuIElmIGBudWxsYCBhbGwgZXhhbXBsZXMgYXJlIHByaW50ZWQuCiAgaW50IGdldCBleGFtcGxlcyA9PiAwOwoKICAvLy8gU3RhcnQgYSBncm91cCBbaWRdLgogIHZvaWQgc3RhcnQoU3RyaW5nIGlkKSB7fQoKICAvLy8gQ3JlYXRlIGEgZ3JvdXAgW2lkXSB3aXRoIGNvbnRlbnQgY3JlYXRlZCBieSBbY3JlYXRlR3JvdXBDb250ZW50XS4KICB2b2lkIGdyb3VwKFN0cmluZyBpZCwgdm9pZCBjcmVhdGVHcm91cENvbnRlbnQoKSkgewogICAgc3RhcnQoaWQpOwogICAgY3JlYXRlR3JvdXBDb250ZW50KCk7CiAgICBlbmQoaWQpOwogIH0KCiAgLy8vIEVuZCBhIGdyb3VwIFtpZF0uCiAgdm9pZCBlbmQoU3RyaW5nIGlkKSB7fQoKICAvLy8gU3RhcnQgYSBzdGF0IGVudHJ5IGZvciBbaWRdIHdpdGggYWRkaXRpb25hbCBbZGF0YV0uCiAgdm9pZCBvcGVuKFN0cmluZyBpZCwKICAgICAgW01hcDxTdHJpbmcsIGR5bmFtaWM+IGRhdGEgPSBjb25zdCA8U3RyaW5nLCBkeW5hbWljPnt9XSkge30KCiAgLy8vIENyZWF0ZSBhIHN0YXQgZW50cnkgZm9yIFtpZF0gd2l0aCBhZGRpdGlvbmFsIFtkYXRhXSBhbmQgY29udGVudCBjcmVhdGVkIGJ5CiAgLy8vIFtjcmVhdGVDaGlsZENvbnRlbnRdLgogIHZvaWQgY2hpbGQoU3RyaW5nIGlkLAogICAgICBbTWFwPFN0cmluZywgZHluYW1pYz4gZGF0YSA9IGNvbnN0IDxTdHJpbmcsIGR5bmFtaWM+e30sCiAgICAgIHZvaWQgY3JlYXRlQ2hpbGRDb250ZW50KCldKSB7CiAgICBvcGVuKGlkLCBkYXRhKTsKICAgIGlmIChjcmVhdGVDaGlsZENvbnRlbnQgIT0gbnVsbCkgY3JlYXRlQ2hpbGRDb250ZW50KCk7CiAgICBjbG9zZShpZCk7CiAgfQoKICAvLy8gRW5kIGEgc3RhdCBlbnRyeSBmb3IgW2lkXS4KICB2b2lkIGNsb3NlKFN0cmluZyBpZCkge30KCiAgLy8vIFN0YXJ0cyBhIGdyb3VwIG9mIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCiAgdm9pZCBiZWdpbkV4dHJhKCkge30KCiAgLy8vIFN0YXJ0cyBhIGdyb3VwIG9mIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCiAgdm9pZCBlbmRFeHRyYSgpIHt9Cn0KCi8vLyBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBbQ29uc29sZVByaW50ZXJdIGFuZCBbWE1MUHJpbnRlcl0uCmFic3RyYWN0IGNsYXNzIEJhc2VQcmludGVyIGV4dGVuZHMgU3RhdHNQcmludGVyIHdpdGggSW5kZW50YXRpb24gewogIEBvdmVycmlkZQogIGZpbmFsIGludCBleGFtcGxlczsKICBmaW5hbCBTdGF0c091dHB1dCBvdXRwdXQ7CgogIEJhc2VQcmludGVyKHt0aGlzLm91dHB1dDogY29uc3QgRGVidWdPdXRwdXQoKSwgdGhpcy5leGFtcGxlczogMTB9KSB7CiAgICBpbmRlbnRhdGlvblVuaXQgPSAiICI7CiAgfQp9CgovLy8gW1N0YXRzUHJpbnRlcl0gdGhhdCBkaXNwbGF5cyBzdGF0cyBpbiBjb25zb2xlIGxpbmVzLgpjbGFzcyBDb25zb2xlUHJpbnRlciBleHRlbmRzIEJhc2VQcmludGVyIHsKICBpbnQgZXh0cmFMZXZlbCA9IDA7CgogIENvbnNvbGVQcmludGVyKHtTdGF0c091dHB1dCBvdXRwdXQ6IGNvbnN0IERlYnVnT3V0cHV0KCksIGludCBleGFtcGxlczogMTB9KQogICAgICA6IHN1cGVyKG91dHB1dDogb3V0cHV0LCBleGFtcGxlczogZXhhbXBsZXMpOwoKICBAb3ZlcnJpZGUKICB2b2lkIG9wZW4oU3RyaW5nIGlkLAogICAgICBbTWFwPFN0cmluZywgZHluYW1pYz4gZGF0YSA9IGNvbnN0IDxTdHJpbmcsIGR5bmFtaWM+e31dKSB7CiAgICBpZiAoZXh0cmFMZXZlbCA+IDApIHJldHVybjsKCiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZShpbmRlbnRhdGlvbik7CiAgICBTdHJpbmcgc3BhY2UgPSAnJzsKICAgIGlmIChkYXRhWyd0aXRsZSddICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJyR7ZGF0YVsndGl0bGUnXX06Jyk7CiAgICAgIHNwYWNlID0gJyAnOwogICAgICBkYXRhLnJlbW92ZSgndGl0bGUnKTsKICAgIH0gZWxzZSBpZiAoZGF0YVsnbmFtZSddICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJyR7ZGF0YVsnbmFtZSddfScpOwogICAgICBzcGFjZSA9ICcgJzsKICAgICAgZGF0YS5yZW1vdmUoJ25hbWUnKTsKICAgIH0KICAgIEl0ZXJhYmxlIG5vbk51bGxWYWx1ZXMgPSBkYXRhLnZhbHVlcy53aGVyZSgodikgPT4gdiAhPSBudWxsKTsKICAgIGlmIChub25OdWxsVmFsdWVzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHNiLndyaXRlKCckc3BhY2Uke25vbk51bGxWYWx1ZXMuZmlyc3R9Jyk7CiAgICB9IGVsc2UgewogICAgICBkYXRhLmZvckVhY2goKGtleSwgdmFsdWUpIHsKICAgICAgICBzYi53cml0ZSgnJHNwYWNlJGtleT0kdmFsdWUnKTsKICAgICAgICBzcGFjZSA9ICcgJzsKICAgICAgfSk7CiAgICB9CiAgICBvdXRwdXQucHJpbnRsbihzYi50b1N0cmluZygpKTsKICAgIGluZGVudE1vcmUoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2xvc2UoU3RyaW5nIGlkKSB7CiAgICBpZiAoZXh0cmFMZXZlbCA+IDApIHJldHVybjsKCiAgICBpbmRlbnRMZXNzKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRXh0cmEoKSB7CiAgICBpZiAoZXh0cmFMZXZlbCA9PSAwKSBvdXRwdXQucHJpbnRsbignJGluZGVudGF0aW9uLi4uJyk7CiAgICBleHRyYUxldmVsKys7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEV4dHJhKCkgewogICAgZXh0cmFMZXZlbC0tOwogIH0KfQoKLy8vIFtTdGF0c1ByaW50ZXJdIHRoYXQgZGlzcGxheXMgc3RhdHMgaW4gWE1MIGZvcm1hdC4KY2xhc3MgWE1MUHJpbnRlciBleHRlbmRzIEJhc2VQcmludGVyIHsKICBzdGF0aWMgY29uc3QgSHRtbEVzY2FwZSBlc2NhcGUgPSBjb25zdCBIdG1sRXNjYXBlKCk7CiAgYm9vbCBvcGVuZWQgPSBmYWxzZTsKCiAgWE1MUHJpbnRlcih7b3V0cHV0OiBjb25zdCBEZWJ1Z091dHB1dCgpLCBpbnQgZXhhbXBsZXM6IDEwfSkKICAgICAgOiBzdXBlcihvdXRwdXQ6IG91dHB1dCwgZXhhbXBsZXM6IGV4YW1wbGVzKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBzdGFydChTdHJpbmcgaWQpIHsKICAgIGlmICghb3BlbmVkKSB7CiAgICAgIG91dHB1dC5wcmludGxuKCc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PicpOwogICAgICBvcGVuZWQgPSB0cnVlOwogICAgfQogICAgb3BlbihpZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZChTdHJpbmcgaWQpIHsKICAgIGNsb3NlKGlkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgb3BlbihTdHJpbmcgaWQsCiAgICAgIFtNYXA8U3RyaW5nLCBkeW5hbWljPiBkYXRhID0gY29uc3QgPFN0cmluZywgZHluYW1pYz57fV0pIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKGluZGVudGF0aW9uKTsKICAgIHNiLndyaXRlKCc8JGlkJyk7CiAgICBkYXRhLmZvckVhY2goKGtleSwgdmFsdWUpIHsKICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgICBzYi53cml0ZSgnICRrZXk9IiR7ZXNjYXBlLmNvbnZlcnQoJyR2YWx1ZScpfSInKTsKICAgICAgfQogICAgfSk7CiAgICBzYi53cml0ZSgnPicpOwogICAgb3V0cHV0LnByaW50bG4oc2IudG9TdHJpbmcoKSk7CiAgICBpbmRlbnRNb3JlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsb3NlKFN0cmluZyBpZCkgewogICAgaW5kZW50TGVzcygpOwogICAgb3V0cHV0LnByaW50bG4oJyR7aW5kZW50YXRpb259PC8kaWQ+Jyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRXh0cmEoKSB7CiAgICBvcGVuKCdleHRyYScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRFeHRyYSgpIHsKICAgIGNsb3NlKCdleHRyYScpOwogIH0KfQoKLy8vIEEgbm9kZSBpbiBhIHN0YWNrIHRyYWNlIHRyZWUgdXNlZCB0byBzdG9yZSBhbmQgb3JnYW5pemUgc3RhY2sgdHJhY2VzIGJ5Ci8vLyBjb21tb24gcHJlZml4ZXMuCmNsYXNzIF9TdGFja1RyYWNlTm9kZSBpbXBsZW1lbnRzIENvbXBhcmFibGU8X1N0YWNrVHJhY2VOb2RlPiB7CiAgaW50IGNvdW50OwogIExpc3Q8U3RhY2tUcmFjZUxpbmU+IGNvbW1vblByZWZpeDsKICBMaXN0PF9TdGFja1RyYWNlTm9kZT4gc3VidHJhY2VzOwoKICBfU3RhY2tUcmFjZU5vZGUodGhpcy5jb21tb25QcmVmaXgsIHRoaXMuY291bnQsIHRoaXMuc3VidHJhY2VzKTsKCiAgX1N0YWNrVHJhY2VOb2RlLnJvb3QoKSA6IHRoaXMoW10sIDAsIFtdKTsKCiAgX1N0YWNrVHJhY2VOb2RlLmxlYWYoU3RhY2tUcmFjZUxpbmVzIHN0YWNrVHJhY2UpCiAgICAgIDogdGhpcyhzdGFja1RyYWNlLmxpbmVzLCAxLCBjb25zdCBbXSk7CgogIF9TdGFja1RyYWNlTm9kZS5ub2RlKExpc3Q8U3RhY2tUcmFjZUxpbmU+IGNvbW1vblByZWZpeCwgX1N0YWNrVHJhY2VOb2RlIGZpcnN0LAogICAgICBfU3RhY2tUcmFjZU5vZGUgc2Vjb25kKQogICAgICA6IHRoaXMoY29tbW9uUHJlZml4LCBmaXJzdC5jb3VudCArIHNlY29uZC5jb3VudCwgW2ZpcnN0LCBzZWNvbmRdKTsKCiAgdm9pZCBhZGQoU3RhY2tUcmFjZUxpbmVzIHN0YWNrVHJhY2UpIHsKICAgIGNvdW50Kys7CiAgICBpZiAoIXN0YWNrVHJhY2UubGluZXMuaXNFbXB0eSkgewogICAgICBhZGRTdWJ0cmFjZShzdGFja1RyYWNlKTsKICAgIH0KICB9CgogIHZvaWQgYWRkU3VidHJhY2UoU3RhY2tUcmFjZUxpbmVzIHN0YWNrVHJhY2UpIHsKICAgIExpc3Q8U3RhY2tUcmFjZUxpbmU+IGxpbmVzID0gc3RhY2tUcmFjZS5saW5lczsKICAgIGZvciAoX1N0YWNrVHJhY2VOb2RlIHN1YnRyYWNlIGluIHN1YnRyYWNlcykgewogICAgICBpbnQgY29tbW9uUHJlZml4TGVuZ3RoID0KICAgICAgICAgIGxvbmdlc3RDb21tb25QcmVmaXhMZW5ndGgoc3VidHJhY2UuY29tbW9uUHJlZml4LCBsaW5lcyk7CiAgICAgIGlmIChjb21tb25QcmVmaXhMZW5ndGggPiAwKSB7CiAgICAgICAgc3RhY2tUcmFjZSA9IHN0YWNrVHJhY2Uuc3VidHJhY2UoY29tbW9uUHJlZml4TGVuZ3RoKTsKICAgICAgICBpZiAoY29tbW9uUHJlZml4TGVuZ3RoID09IHN1YnRyYWNlLmNvbW1vblByZWZpeC5sZW5ndGgpIHsKICAgICAgICAgIHN1YnRyYWNlLmFkZChzdGFja1RyYWNlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3VidHJhY2UuY29tbW9uUHJlZml4ID0KICAgICAgICAgICAgICBzdWJ0cmFjZS5jb21tb25QcmVmaXguc3VibGlzdChjb21tb25QcmVmaXhMZW5ndGgpOwogICAgICAgICAgc3VidHJhY2VzLnJlbW92ZShzdWJ0cmFjZSk7CiAgICAgICAgICBzdWJ0cmFjZXMuYWRkKG5ldyBfU3RhY2tUcmFjZU5vZGUubm9kZSgKICAgICAgICAgICAgICBsaW5lcy5zdWJsaXN0KDAsIGNvbW1vblByZWZpeExlbmd0aCksCiAgICAgICAgICAgICAgc3VidHJhY2UsCiAgICAgICAgICAgICAgbmV3IF9TdGFja1RyYWNlTm9kZS5sZWFmKHN0YWNrVHJhY2UpKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgc3VidHJhY2VzLmFkZChuZXcgX1N0YWNrVHJhY2VOb2RlLmxlYWYoc3RhY2tUcmFjZSkpOwogIH0KCiAgdm9pZCBkdW1wVHJhY2VzKFN0YXRzUHJpbnRlciBwcmludGVyKSB7CiAgICBwcmludGVyLm9wZW4oJ3RyYWNlJywgeydjb3VudCc6IGNvdW50LCAnbGluZSc6IGNvbW1vblByZWZpeC5maXJzdH0pOwogICAgaWYgKGNvbW1vblByZWZpeC5sZW5ndGggPiAxKSB7CiAgICAgIGZvciAoU3RhY2tUcmFjZUxpbmUgbGluZSBpbiBjb21tb25QcmVmaXguc2tpcCgxKSkgewogICAgICAgIHByaW50ZXIuY2hpbGQoJ3RyYWNlJywgeydsaW5lJzogbGluZX0pOwogICAgICB9CiAgICB9CiAgICBkdW1wU3VidHJhY2VzKHByaW50ZXIpOwogICAgcHJpbnRlci5jbG9zZSgndHJhY2UnKTsKICB9CgogIHZvaWQgZHVtcFN1YnRyYWNlcyhTdGF0c1ByaW50ZXIgcHJpbnRlcikgewogICAgaWYgKCFzdWJ0cmFjZXMuaXNFbXB0eSkgewogICAgICBzdWJ0cmFjZXMuc29ydCgpOwogICAgICBmb3IgKF9TdGFja1RyYWNlTm9kZSBzdGVwIGluIHN1YnRyYWNlcykgewogICAgICAgIHN0ZXAuZHVtcFRyYWNlcyhwcmludGVyKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGNvbXBhcmVUbyhfU3RhY2tUcmFjZU5vZGUgb3RoZXIpIHsKICAgIC8vIFNvcnRzIGluIGRlY3JlYXNpbmcgY291bnQgb3JkZXIuCiAgICByZXR1cm4gb3RoZXIuY291bnQgLSBjb3VudDsKICB9CgogIHZvaWQgcHJpbnRPbihTdHJpbmdCdWZmZXIgc2IsIFN0cmluZyBpbmRlbnRhdGlvbikgewogICAgU3RyaW5nIGNvdW50VGV4dCA9ICckaW5kZW50YXRpb24kY291bnQgICc7CiAgICBzYi53cml0ZShjb3VudFRleHQpOwogICAgc2Iud3JpdGUoJ1xuJyk7CiAgICBpbmRlbnRhdGlvbiA9ICcnLnBhZExlZnQoY291bnRUZXh0Lmxlbmd0aCwgJyAnKTsKICAgIGlmIChjb21tb25QcmVmaXggIT0gbnVsbCkgewogICAgICBpbnQgaW5kZXggPSAwOwogICAgICBmb3IgKFN0YWNrVHJhY2VMaW5lIGxpbmUgaW4gY29tbW9uUHJlZml4KSB7CiAgICAgICAgc2Iud3JpdGUoaW5kZW50YXRpb24pOwogICAgICAgIGlmIChpbmRleCA+IDEpIHsKICAgICAgICAgIHNiLndyaXRlKCcuLi5cbicpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHNiLndyaXRlKGxpbmUpOwogICAgICAgIHNiLndyaXRlKCdcbicpOwogICAgICAgIGluZGV4Kys7CiAgICAgIH0KICAgIH0KICAgIHN1YnRyYWNlcy5zb3J0KCk7CiAgICBmb3IgKF9TdGFja1RyYWNlTm9kZSBzdWJ0cmFjZSBpbiBzdWJ0cmFjZXMpIHsKICAgICAgc3VidHJhY2UucHJpbnRPbihzYiwgaW5kZW50YXRpb24pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgcHJpbnRPbihzYiwgJycpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgpjbGFzcyBfU3RhY2tUcmFjZVRyZWUgZXh0ZW5kcyBfU3RhY2tUcmFjZU5vZGUgewogIGZpbmFsIGlkOwogIGludCB0b3RhbENvdW50ID0gMDsKICBmaW5hbCBpbnQgc2FtcGxlRnJlcXVlbmN5OwoKICBfU3RhY2tUcmFjZVRyZWUodGhpcy5pZCwgdGhpcy5zYW1wbGVGcmVxdWVuY3kpIDogc3VwZXIucm9vdCgpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGR1bXBUcmFjZXMoU3RhdHNQcmludGVyIHByaW50ZXIpIHsKICAgIHByaW50ZXIub3BlbigndHJhY2UnLCB7CiAgICAgICdpZCc6IGlkLAogICAgICAndG90YWxDb3VudCc6IHRvdGFsQ291bnQsCiAgICAgICdzYW1wbGVGcmVxdWVuY3knOiBzYW1wbGVGcmVxdWVuY3kKICAgIH0pOwogICAgZHVtcFN1YnRyYWNlcyhwcmludGVyKTsKICAgIHByaW50ZXIuY2xvc2UoJ3RyYWNlJyk7CiAgfQoKICB2b2lkIHNhbXBsZSgpIHsKICAgIGlmICh0b3RhbENvdW50KysgJSBzYW1wbGVGcmVxdWVuY3kgPT0gMCkgewogICAgICBhZGQoc3RhY2tUcmFjZShvZmZzZXQ6IDMpKTsKICAgIH0KICB9Cn0KCi8vLyBBY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgW1N0YXRzXS4KY2xhc3MgQWN0aXZlU3RhdHMgaW1wbGVtZW50cyBTdGF0cyB7CiAgZmluYWwgU3RhdHNQcmludGVyIHByaW50ZXI7CiAgTWFwPGR5bmFtaWMsIE1hcD4gbWFwcyA9IHt9OwogIE1hcDxkeW5hbWljLCBNYXA8ZHluYW1pYywgTGlzdD4+IGZyZXF1ZW5jeU1hcHMgPSB7fTsKICBNYXA8ZHluYW1pYywgTWFwPiBzZXRzTWFwID0ge307CiAgTWFwPGR5bmFtaWMsIE1hcDxkeW5hbWljLCBMaXN0Pj4gY291bnRlcnNNYXAgPQogICAgICA8ZHluYW1pYywgTWFwPGR5bmFtaWMsIExpc3Q+Pnt9OwogIE1hcDxkeW5hbWljLCBfU3RhY2tUcmFjZVRyZWU+IHRyYWNlTWFwID0ge307CiAgQG92ZXJyaWRlCiAgaW50IHN0YWNrVHJhY2VTYW1wbGVGcmVxdWVuY3kgPSAxOwoKICBBY3RpdmVTdGF0cyhTdGF0c1ByaW50ZXIgdGhpcy5wcmludGVyKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCByZWNvcmRNYXAoaWQsIGtleSwgdmFsdWUsIHtmcm9tRXhpc3RpbmcodmFsdWUpfSkgewogICAgTWFwIG1hcCA9IG1hcHMucHV0SWZBYnNlbnQoaWQsICgpID0+IHt9KTsKICAgIGlmIChmcm9tRXhpc3RpbmcgIT0gbnVsbCAmJiBtYXAuY29udGFpbnNLZXkoa2V5KSkgewogICAgICBtYXBba2V5XSA9IGZyb21FeGlzdGluZyhtYXBba2V5XSk7CiAgICB9IGVsc2UgewogICAgICBtYXBba2V5XSA9IHZhbHVlOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgTWFwIGdldE1hcChrZXkpIHsKICAgIHJldHVybiBtYXBzW2tleV07CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlY29yZEZyZXF1ZW5jeShpZCwgdmFsdWUsIFtleGFtcGxlXSkgewogICAgTWFwPGR5bmFtaWMsIExpc3Q+IG1hcCA9IGZyZXF1ZW5jeU1hcHMucHV0SWZBYnNlbnQoaWQsICgpID0+IHt9KTsKICAgIG1hcC5wdXRJZkFic2VudCh2YWx1ZSwgKCkgPT4gW10pOwogICAgbWFwW3ZhbHVlXS5hZGQoZXhhbXBsZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlY29yZEZyZXF1ZW5jaWVzKGlkLCBNYXA8ZHluYW1pYywgSXRlcmFibGU+IGZyZXF1ZW5jeU1hcCkgewogICAgTWFwPGR5bmFtaWMsIExpc3Q+IG1hcCA9IGZyZXF1ZW5jeU1hcHMucHV0SWZBYnNlbnQoaWQsICgpID0+IHt9KTsKICAgIGZyZXF1ZW5jeU1hcC5mb3JFYWNoKCh2YWx1ZSwgZXhhbXBsZXMpIHsKICAgICAgbWFwLnB1dElmQWJzZW50KHZhbHVlLCAoKSA9PiBbXSk7CiAgICAgIG1hcFt2YWx1ZV0uYWRkQWxsKGV4YW1wbGVzKTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGUgcmVjb3JkZWRGcmVxdWVuY2llcyhpZCwgdmFsdWUpIHsKICAgIE1hcDxkeW5hbWljLCBMaXN0PiBtYXAgPSBmcmVxdWVuY3lNYXBzW2lkXTsKICAgIGlmIChtYXAgPT0gbnVsbCkgcmV0dXJuIGNvbnN0IFtdOwogICAgTGlzdCBsaXN0ID0gbWFwW3ZhbHVlXTsKICAgIGlmIChsaXN0ID09IG51bGwpIHJldHVybiBjb25zdCBbXTsKICAgIHJldHVybiBsaXN0OwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWNvcmRDb3VudGVyKGlkLCBbcmVhc29uLCBleGFtcGxlXSkgewogICAgTWFwPGR5bmFtaWMsIExpc3Q+IG1hcCA9IGNvdW50ZXJzTWFwLnB1dElmQWJzZW50KGlkLCAoKSA9PiB7fSk7CiAgICBtYXAucHV0SWZBYnNlbnQocmVhc29uLCAoKSA9PiBbXSkuYWRkKGV4YW1wbGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWNvcmRFbGVtZW50KGtleSwgZWxlbWVudCwge2RhdGF9KSB7CiAgICBzZXRzTWFwLnB1dElmQWJzZW50KGtleSwgKCkgPT4gbmV3IE1hcCgpKVtlbGVtZW50XSA9IGRhdGE7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlY29yZFRyYWNlKGtleSwge2ludCBzYW1wbGVGcmVxdWVuY3l9KSB7CiAgICBpZiAoc2FtcGxlRnJlcXVlbmN5ID09IG51bGwpIHsKICAgICAgc2FtcGxlRnJlcXVlbmN5ID0gc3RhY2tUcmFjZVNhbXBsZUZyZXF1ZW5jeTsKICAgIH0KICAgIHRyYWNlTWFwCiAgICAgICAgLnB1dElmQWJzZW50KGtleSwgKCkgPT4gbmV3IF9TdGFja1RyYWNlVHJlZShrZXksIHNhbXBsZUZyZXF1ZW5jeSkpCiAgICAgICAgLnNhbXBsZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGUgZ2V0TGlzdChTdHJpbmcga2V5KSB7CiAgICBNYXAgbWFwID0gc2V0c01hcFtrZXldOwogICAgaWYgKG1hcCA9PSBudWxsKSByZXR1cm4gY29uc3QgW107CiAgICByZXR1cm4gbWFwLmtleXM7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGR1bXBTdGF0cyh7dm9pZCBiZWZvcmVDbG9zZSgpfSkgewogICAgcHJpbnRlci5zdGFydCgnc3RhdHMnKTsKICAgIGR1bXBGcmVxdWVuY2llcygpOwogICAgZHVtcFNldHMoKTsKICAgIGR1bXBDb3VudGVycygpOwogICAgZHVtcFRyYWNlcygpOwogICAgaWYgKGJlZm9yZUNsb3NlICE9IG51bGwpIHsKICAgICAgYmVmb3JlQ2xvc2UoKTsKICAgIH0KICAgIHByaW50ZXIuZW5kKCdzdGF0cycpOwogIH0KCiAgdm9pZCBkdW1wU2V0cygpIHsKICAgIHByaW50ZXIuZ3JvdXAoJ3NldHMnLCAoKSB7CiAgICAgIHNldHNNYXAuZm9yRWFjaCgoaywgc2V0KSB7CiAgICAgICAgZHVtcEl0ZXJhYmxlKCdleGFtcGxlcycsICckaycsIHNldC5rZXlzLAogICAgICAgICAgICBsaW1pdDogcHJpbnRlci5leGFtcGxlcywgZGF0YU1hcDogc2V0KTsKICAgICAgfSk7CiAgICB9KTsKICB9CgogIHZvaWQgZHVtcEZyZXF1ZW5jaWVzKCkgewogICAgcHJpbnRlci5ncm91cCgnZnJlcXVlbmNpZXMnLCAoKSB7CiAgICAgIGZyZXF1ZW5jeU1hcHMuZm9yRWFjaCgoa2V5LCBNYXA8ZHluYW1pYywgTGlzdD4gbWFwKSB7CiAgICAgICAgcHJpbnRlci5jaGlsZCgnZnJlcXVlbmN5Jywgeyd0aXRsZSc6ICcka2V5J30sICgpIHsKICAgICAgICAgIGR1bXBGcmVxdWVuY3kobWFwKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9KTsKICB9CgogIHZvaWQgZHVtcEZyZXF1ZW5jeShNYXA8ZHluYW1pYywgSXRlcmFibGU+IG1hcCkgewogICAgTWFwIHNvcnRlZE1hcCA9IHRyeVNvcnRNYXAobWFwKTsKICAgIHNvcnRlZE1hcC5mb3JFYWNoKChrLCBsaXN0KSB7CiAgICAgIGR1bXBJdGVyYWJsZSgnZXhhbXBsZXMnLCAnJGsnLCBsaXN0LCBsaW1pdDogcHJpbnRlci5leGFtcGxlcyk7CiAgICB9KTsKICB9CgogIHZvaWQgZHVtcENvdW50ZXJzKCkgewogICAgcHJpbnRlci5ncm91cCgnY291bnRlcnMnLCAoKSB7CiAgICAgIGNvdW50ZXJzTWFwLmtleXMuZm9yRWFjaChkdW1wQ291bnRlcik7CiAgICB9KTsKICB9CgogIHZvaWQgZHVtcENvdW50ZXIoaWQpIHsKICAgIE1hcDxkeW5hbWljLCBMaXN0PiBtYXAgPSBjb3VudGVyc01hcFtpZF07CiAgICBib29sIGhhc0RhdGEoZXhhbXBsZSkgewogICAgICBpZiAobWFwID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgTGlzdCBsaXN0ID0gbWFwW2V4YW1wbGVdOwogICAgICBpZiAobGlzdCA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiBsaXN0LmFueSgoZGF0YSkgPT4gZGF0YSAhPSBudWxsKTsKICAgIH0KCiAgICBpbnQgY291bnQgPSAwOwogICAgTWFwPGR5bmFtaWMsIGludD4gZnJlcXVlbmN5TWFwID0ge307CiAgICBtYXAuZm9yRWFjaCgodmFyIGNhdGVnb3J5LCBMaXN0IGV4YW1wbGVzKSB7CiAgICAgIGlmIChjYXRlZ29yeSAhPSBudWxsKSB7CiAgICAgICAgZnJlcXVlbmN5TWFwLnB1dElmQWJzZW50KGNhdGVnb3J5LCAoKSA9PiAwKTsKICAgICAgICBmcmVxdWVuY3lNYXBbY2F0ZWdvcnldICs9IGV4YW1wbGVzLmxlbmd0aDsKICAgICAgfQogICAgICBjb3VudCArPSBleGFtcGxlcy5sZW5ndGg7CiAgICB9KTsKICAgIE1hcDxpbnQsIFNldD4gcmVzdWx0ID0gc29ydE1hcChpbnZlcnNlTWFwKGZyZXF1ZW5jeU1hcCksIChhLCBiKSA9PiBiIC0gYSk7CiAgICBpbnQgZXhhbXBsZXNMaW1pdCA9IG51bGw7CiAgICBpZiAocHJpbnRlci5leGFtcGxlcyAhPSBudWxsICYmIHJlc3VsdC5sZW5ndGggPj0gcHJpbnRlci5leGFtcGxlcykgewogICAgICBleGFtcGxlc0xpbWl0ID0gMDsKICAgIH0KICAgIGludCBjb3VudGVyID0gMDsKICAgIGJvb2wgaGFzTW9yZSA9IGZhbHNlOwogICAgcHJpbnRlci5vcGVuKCdjb3VudGVyJywgeyd0aXRsZSc6ICckaWQnLCAnY291bnQnOiBjb3VudH0pOwogICAgcmVzdWx0LmZvckVhY2goKGludCBjb3VudCwgU2V0IGV4YW1wbGVzKSB7CiAgICAgIGlmIChjb3VudGVyID09IHByaW50ZXIuZXhhbXBsZXMpIHsKICAgICAgICBwcmludGVyLmJlZ2luRXh0cmEoKTsKICAgICAgICBoYXNNb3JlID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoZXhhbXBsZXMubGVuZ3RoID09IDEgJiYKICAgICAgICAgIChleGFtcGxlc0xpbWl0ID09IDAgfHwgIWhhc0RhdGEoZXhhbXBsZXMuZmlyc3QpKSkgewogICAgICAgIHByaW50ZXIuY2hpbGQoJ2V4YW1wbGVzJywgeydjb3VudCc6IGNvdW50LCAnZXhhbXBsZSc6IGV4YW1wbGVzLmZpcnN0fSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcHJpbnRlci5jaGlsZCgnZXhhbXBsZXMnLCB7J2NvdW50JzogY291bnQsICdleGFtcGxlcyc6IGV4YW1wbGVzLmxlbmd0aH0sCiAgICAgICAgICAgICgpIHsKICAgICAgICAgIGV4YW1wbGVzLmZvckVhY2goKGV4YW1wbGUpIHsKICAgICAgICAgICAgZHVtcEl0ZXJhYmxlKCdleGFtcGxlcycsICckZXhhbXBsZScsIG1hcFtleGFtcGxlXSwKICAgICAgICAgICAgICAgIGxpbWl0OiBleGFtcGxlc0xpbWl0LCBpbmNsdWRlQ291bnQ6IGZhbHNlKTsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGNvdW50ZXIrKzsKICAgIH0pOwogICAgaWYgKGhhc01vcmUpIHsKICAgICAgcHJpbnRlci5lbmRFeHRyYSgpOwogICAgfQogICAgcHJpbnRlci5jbG9zZSgnY291bnRlcicpOwogIH0KCiAgdm9pZCBkdW1wVHJhY2VzKCkgewogICAgcHJpbnRlci5ncm91cCgndHJhY2VzJywgKCkgewogICAgICB0cmFjZU1hcC5rZXlzLmZvckVhY2goZHVtcFRyYWNlKTsKICAgIH0pOwogIH0KCiAgdm9pZCBkdW1wVHJhY2Uoa2V5KSB7CiAgICBfU3RhY2tUcmFjZVRyZWUgdHJlZSA9IHRyYWNlTWFwW2tleV07CiAgICB0cmVlLmR1bXBUcmFjZXMocHJpbnRlcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGR1bXBDb3JyZWxhdGlvbihrZXlBLCBJdGVyYWJsZSBhLCBrZXlCLCBJdGVyYWJsZSBiLAogICAgICB7TWFwIGRhdGFBLCBNYXAgZGF0YUJ9KSB7CiAgICBwcmludGVyLmNoaWxkKCdjb3JyZWxhdGlvbnMnLCB7J3RpdGxlJzogJyRrZXlBIHZzICRrZXlCJ30sICgpIHsKICAgICAgTGlzdCBhQW5kQiA9IGEud2hlcmUoKGUpID0+IGUgIT0gbnVsbCAmJiBiLmNvbnRhaW5zKGUpKS50b0xpc3QoKTsKICAgICAgTGlzdCBhQW5kTm90QiA9IGEud2hlcmUoKGUpID0+IGUgIT0gbnVsbCAmJiAhYi5jb250YWlucyhlKSkudG9MaXN0KCk7CiAgICAgIExpc3Qgbm90QWFuZEIgPSBiLndoZXJlKChlKSA9PiBlICE9IG51bGwgJiYgIWEuY29udGFpbnMoZSkpLnRvTGlzdCgpOwogICAgICBkdW1wSXRlcmFibGUoJ2NvcnJlbGF0aW9uJywgJyRrZXlBICYmICRrZXlCJywgYUFuZEIsCiAgICAgICAgICBkYXRhTWFwOiBkYXRhQSwgbGltaXQ6IHByaW50ZXIuZXhhbXBsZXMpOwogICAgICBkdW1wSXRlcmFibGUoJ2NvcnJlbGF0aW9uJywgJyRrZXlBICYmICEka2V5QicsIGFBbmROb3RCLAogICAgICAgICAgZGF0YU1hcDogZGF0YUEsIGxpbWl0OiBwcmludGVyLmV4YW1wbGVzKTsKICAgICAgZHVtcEl0ZXJhYmxlKCdjb3JyZWxhdGlvbicsICchJGtleUEgJiYgJGtleUInLCBub3RBYW5kQiwKICAgICAgICAgIGRhdGFNYXA6IGRhdGFCLCBsaW1pdDogcHJpbnRlci5leGFtcGxlcyk7CiAgICB9KTsKICB9CgogIHZvaWQgZHVtcEl0ZXJhYmxlKFN0cmluZyB0YWcsIFN0cmluZyB0aXRsZSwgSXRlcmFibGUgaXRlcmFibGUsCiAgICAgIHtpbnQgbGltaXQsIE1hcCBkYXRhTWFwLCBib29sIGluY2x1ZGVDb3VudDogdHJ1ZX0pIHsKICAgIGlmIChsaW1pdCA9PSAwKSByZXR1cm47CgogICAgTWFwPFN0cmluZywgZHluYW1pYz4gY2hpbGREYXRhID0ge307CiAgICBJdGVyYWJsZSBub25OdWxsSXRlcmFibGUgPSBpdGVyYWJsZS53aGVyZSgoZSkgPT4gZSAhPSBudWxsKTsKICAgIGlmIChub25OdWxsSXRlcmFibGUuaXNFbXB0eSAmJiAhaW5jbHVkZUNvdW50KSB7CiAgICAgIGNoaWxkRGF0YVsnbmFtZSddID0gdGl0bGU7CiAgICB9IGVsc2UgewogICAgICBjaGlsZERhdGFbJ3RpdGxlJ10gPSB0aXRsZTsKICAgIH0KICAgIGlmIChpbmNsdWRlQ291bnQpIHsKICAgICAgY2hpbGREYXRhWydjb3VudCddID0gaXRlcmFibGUubGVuZ3RoOwogICAgfQogICAgcHJpbnRlci5jaGlsZCh0YWcsIGNoaWxkRGF0YSwgKCkgewogICAgICBib29sIGhhc01vcmUgPSBmYWxzZTsKICAgICAgaW50IGNvdW50ZXIgPSAwOwogICAgICBub25OdWxsSXRlcmFibGUuZm9yRWFjaCgoZWxlbWVudCkgewogICAgICAgIGlmIChjb3VudGVyID09IGxpbWl0KSB7CiAgICAgICAgICBwcmludGVyLmJlZ2luRXh0cmEoKTsKICAgICAgICAgIGhhc01vcmUgPSB0cnVlOwogICAgICAgIH0KICAgICAgICB2YXIgZGF0YSA9IGRhdGFNYXAgIT0gbnVsbCA/IGRhdGFNYXBbZWxlbWVudF0gOiBudWxsOwogICAgICAgIGlmIChkYXRhICE9IG51bGwpIHsKICAgICAgICAgIHByaW50ZXIuY2hpbGQoJ2V4YW1wbGUnLCB7J3ZhbHVlJzogZWxlbWVudCwgJ2RhdGEnOiBkYXRhfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHByaW50ZXIuY2hpbGQoJ2V4YW1wbGUnLCB7J3ZhbHVlJzogZWxlbWVudH0pOwogICAgICAgIH0KICAgICAgICBjb3VudGVyKys7CiAgICAgIH0pOwogICAgICBpZiAoaGFzTW9yZSkgewogICAgICAgIHByaW50ZXIuZW5kRXh0cmEoKTsKICAgICAgfQogICAgfSk7CiAgfQp9CgovLy8gUmV0dXJucyBhIG1hcCB0aGF0IGlzIGFuIGludmVyc2lvbiBvZiBbbWFwXSwgd2hlcmUgdGhlIGtleXMgYXJlIHRoZSB2YWx1ZXMKLy8vIG9mIFttYXBdIGFuZCB0aGUgdmFsdWVzIGFyZSB0aGUgc2V0IG9mIGtleXMgaW4gW21hcF0gdGhhdCBzaGFyZSB2YWx1ZXMuCi8vLwovLy8gSWYgW2VxdWFsc10gYW5kIFtoYXNoQ29kZV0gYXJlIHByb3ZpZGVkLCB0aGVzZSBhcmUgdXNlZCB0byBkZXRlcm1pbmUKLy8vIGVxdWFsaXR5IGFtb25nIHRoZSB2YWx1ZXMgb2YgW21hcF0uCi8vLwovLy8gSWYgW2lzVmFsaWRLZXldIGlzIHByb3ZpZGVkLCB0aGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdpdGggYSB2YWx1ZSBvZiBbbWFwXQovLy8gaXMgYSBwb3RlbnRpYWwga2V5IG9mIHRoZSBpbnZlcnNpb24gbWFwLgpNYXA8ViwgU2V0PEs+PiBpbnZlcnNlTWFwPEssIFY+KE1hcDxLLCBWPiBtYXAsCiAgICB7Ym9vbCBlcXVhbHMoViBrZXkxLCBWIGtleTIpLAogICAgaW50IGhhc2hDb2RlKFYga2V5KSwKICAgIGJvb2wgaXNWYWxpZEtleShWIHBvdGVudGlhbEtleSl9KSB7CiAgTWFwPFYsIFNldDxLPj4gcmVzdWx0ID0gbmV3IExpbmtlZEhhc2hNYXA8ViwgU2V0PEs+PigKICAgICAgZXF1YWxzOiBlcXVhbHMsIGhhc2hDb2RlOiBoYXNoQ29kZSwgaXNWYWxpZEtleTogaXNWYWxpZEtleSk7CiAgbWFwLmZvckVhY2goKGssIHYpIHsKICAgIGlmIChpc1ZhbGlkS2V5ID09IG51bGwgfHwgaXNWYWxpZEtleSh2KSkgewogICAgICByZXN1bHQucHV0SWZBYnNlbnQodiwgKCkgPT4gbmV3IFNldCgpKS5hZGQoayk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIHJlc3VsdDsKfQoKLy8vIFJldHVybiBhIG5ldyBtYXAgaGV1cmlzdGljYWxseSBzb3J0ZWQgYnkgdGhlIGtleXMgb2YgW21hcF0uIElmIHRoZSBmaXJzdAovLy8ga2V5IG9mIFttYXBdIGlzIFtDb21wYXJhYmxlXSwgdGhlIGtleXMgYXJlIHNvcnRlZCB1c2luZyBbc29ydE1hcF0gdW5kZXIKLy8vIHRoZSBhc3N1bXB0aW9uIHRoYXQgYWxsIGtleXMgYXJlIFtDb21wYXJhYmxlXS4KLy8vIE90aGVyd2lzZSwgdGhlIGtleXMgYXJlIHNvcnRlZCBhcyBzdHJpbmcgdXNpbmcgdGhlaXIgYHRvU3RyaW5nYAovLy8gcmVwcmVzZW50YXRpb24uCk1hcDxLLCBWPiB0cnlTb3J0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d3JhcHBlciBhcm91bmQgYSBtYXAgdGhhdCBrZWVwcyB0cmFjawovLy8gb2YgdGhlICdmaW5hbCcgc2l6ZSBvZiBtYXBzIGdyb3VwZWQgYnkgZGVzY3JpcHRpb24uIEl0IGFsbG93cwovLy8gZGV0ZXJtaW5pbmcgdGhlIGRpc3RyaWJ1dGlvbiBvZiBzaXplcyBmb3IgYSBzcGVjaWZpYyBhbGxvY2F0aW9uCi8vLyBzaXRlIGFuZCBpdCBjYW4gYmUgdXNlZCBsaWtlIHRoaXM6Ci8vLwovLy8gICAgTWFwPFN0cmluZywgaW50PiBtYXAgPSBuZXcgVHJhY2tNYXA8U3RyaW5nLCBpbnQ+KCJteS1tYXAiKTsKLy8vCi8vLyBBZnRlciBmaW5pc2hpbmcgdGhlIGNvbXBpbGF0b24sIHRoZSBoaXN0b2dyYW0gb2YgdHJhY2sgbWFwIHNpemVzCi8vLyBpcyBwcmludGVkIGJ1dCBvbmx5IHdoZW4gcnVubmluZyBpbiB2ZXJib3NlIG1vZGUuCmNsYXNzIFRyYWNrTWFwPEssIFY+IGltcGxlbWVudHMgTWFwPEssIFY+IHsKICBmaW5hbCBNYXA8SywgVj4gX21hcDsKICBmaW5hbCBMaXN0IF9jb3VudHM7CiAgc3RhdGljIGZpbmFsIE1hcDxTdHJpbmcsIExpc3Q8aW50Pj4gX2NvdW50c01hcCA9IHt9OwoKICBUcmFja01hcC5faW50ZXJuYWwodGhpcy5fY291bnRzKSA6IF9tYXAgPSBuZXcgTWFwPEssIFY+KCk7CgogIGZhY3RvcnkgVHJhY2tNYXAoU3RyaW5nIGRlc2NyaXB0aW9uKSB7CiAgICBMaXN0IGNvdW50cyA9IF9jb3VudHNNYXAucHV0SWZBYnNlbnQoZGVzY3JpcHRpb24sICgpID0+IFswXSk7CiAgICBNYXAgcmVzdWx0ID0gbmV3IFRyYWNrTWFwPEssIFY+Ll9pbnRlcm5hbChjb3VudHMpOwogICAgY291bnRzWzBdKys7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIHZvaWQgcHJpbnRIaXN0b2dyYW0oKSB7CiAgICBfY291bnRzTWFwLmZvckVhY2goKGRlc2NyaXB0aW9uLCBjb3VudHMpIHsKICAgICAgcHJpbnQoJyRkZXNjcmlwdGlvbiAtLSAke2NvdW50cy5sZW5ndGh9IG1hcHMnKTsKCiAgICAgIC8vIENvdW50IHRoZSB0b3RhbCBudW1iZXIgb2YgbWFwcy4KICAgICAgaW50IHN1bSA9IDA7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgc3VtICs9IGNvdW50c1tpXTsKICAgICAgfQogICAgICBpbnQgaW5jcmVtZW50ID0gc3VtIH4vIDEwOwogICAgICBpbnQgdGFyZ2V0ID0gaW5jcmVtZW50OwogICAgICBpbnQgYWNjdW11bGF0ZWQgPSAwOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50cy5sZW5ndGg7IGkrKykgewogICAgICAgIGFjY3VtdWxhdGVkICs9IGNvdW50c1tpXTsKICAgICAgICBpZiAoYWNjdW11bGF0ZWQgPj0gdGFyZ2V0KSB7CiAgICAgICAgICBTdHJpbmcgcGVyY2VudCA9IChhY2N1bXVsYXRlZCAvIHN1bSAqIDEwMCkudG9TdHJpbmdBc0ZpeGVkKDEpOwogICAgICAgICAgcHJpbnQoJyAgLS0gJHBlcmNlbnQlOiBsZW5ndGggPD0gJGknKTsKICAgICAgICAgIHRhcmdldCArPSBpbmNyZW1lbnQ7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoID0+IF9tYXAubGVuZ3RoOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX21hcC5pc0VtcHR5OwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX21hcC5pc05vdEVtcHR5OwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxLPiBnZXQga2V5cyA9PiBfbWFwLmtleXM7CiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Vj4gZ2V0IHZhbHVlcyA9PiBfbWFwLnZhbHVlczsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc0tleShPYmplY3Qga2V5KSA9PiBfbWFwLmNvbnRhaW5zS2V5KGtleSk7CiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc1ZhbHVlKE9iamVjdCB2YWx1ZSkgPT4gX21hcC5jb250YWluc1ZhbHVlKHZhbHVlKTsKCiAgQG92ZXJyaWRlCiAgViBvcGVyYXRvciBbXShPYmplY3Qga2V5KSA9PiBfbWFwW2tleV07CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gX21hcC50b1N0cmluZygpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2godm9pZCBhY3Rpb24oSyBrZXksIFYgdmFsdWUpKSB7CiAgICBfbWFwLmZvckVhY2goYWN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgb3BlcmF0b3IgW109KEsga2V5LCBWIHZhbHVlKSB7CiAgICBpZiAoIV9tYXAuY29udGFpbnNLZXkoa2V5KSkgewogICAgICBfbm90aWZ5TGVuZ3RoQ2hhbmdlZCgxKTsKICAgICAgX21hcFtrZXldID0gdmFsdWU7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBWIHB1dElmQWJzZW50KEsga2V5LCBWIGlmQWJzZW50KCkpIHsKICAgIGlmIChjb250YWluc0tleShrZXkpKSByZXR1cm4gdGhpc1trZXldOwogICAgViB2YWx1ZSA9IGlmQWJzZW50KCk7CiAgICB0aGlzW2tleV0gPSB2YWx1ZTsKICAgIHJldHVybiB2YWx1ZTsKICB9CgogIEBvdmVycmlkZQogIFYgcmVtb3ZlKE9iamVjdCBrZXkpIHsKICAgIGlmIChfbWFwLmNvbnRhaW5zS2V5KGtleSkpIHsKICAgICAgX25vdGlmeUxlbmd0aENoYW5nZWQoLTEpOwogICAgfQogICAgcmV0dXJuIF9tYXAucmVtb3ZlKGtleSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZEFsbChNYXA8SywgVj4gb3RoZXIpIHsKICAgIG90aGVyLmZvckVhY2goKGtleSwgdmFsdWUpID0+IHRoaXNba2V5XSA9IHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2xlYXIoKSB7CiAgICBfbm90aWZ5TGVuZ3RoQ2hhbmdlZCgtX21hcC5sZW5ndGgpOwogICAgX21hcC5jbGVhcigpOwogIH0KCiAgQG92ZXJyaWRlCiAgTWFwPEtSLCBWUj4gY2FzdDxLUiwgVlI+KCkgPT4gX21hcC5jYXN0PEtSLCBWUj4oKTsKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZ2V0IGVudHJpZXMgPT4gX21hcC5lbnRyaWVzOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZEVudHJpZXMoSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IGVudHJpZXMpIHsKICAgIGZvciAodmFyIGVudHJ5IGluIGVudHJpZXMpIHRoaXNbZW50cnkua2V5XSA9IGVudHJ5LnZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgTWFwPEtSLCBWUj4gbWFwPEtSLCBWUj4oTWFwRW50cnk8S1IsIFZSPiB0cmFuc2Zvcm0oSyBrZXksIFYgdmFsdWUpKSA9PgogICAgICBfbWFwLm1hcCh0cmFuc2Zvcm0pOwoKICBAb3ZlcnJpZGUKICBWIHVwZGF0ZShLIGtleSwgViB1cGRhdGUoViB2YWx1ZSksIHtWIGlmQWJzZW50KCl9KSA9PgogICAgICBfbWFwLnVwZGF0ZShrZXksIHVwZGF0ZSwgaWZBYnNlbnQ6IGlmQWJzZW50KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB1cGRhdGVBbGwoViB1cGRhdGUoSyBrZXksIFYgdmFsdWUpKSB7CiAgICBfbWFwLnVwZGF0ZUFsbCh1cGRhdGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoSyBrZXksIFYgdmFsdWUpKSB7CiAgICBpbnQgYmVmb3JlID0gX21hcC5sZW5ndGg7CiAgICBfbWFwLnJlbW92ZVdoZXJlKHRlc3QpOwogICAgX25vdGlmeUxlbmd0aENoYW5nZWQoX21hcC5sZW5ndGggLSBiZWZvcmUpOwogIH0KCiAgdm9pZCBfbm90aWZ5TGVuZ3RoQ2hhbmdlZChpbnQgZGVsdGEpIHsKICAgIGludCBvbGRMZW5ndGggPSBfbWFwLmxlbmd0aDsKICAgIGludCBuZXdMZW5ndGggPSBvbGRMZW5ndGggKyBkZWx0YTsKICAgIF9jb3VudHNbb2xkTGVuZ3RoXS0tOwogICAgaWYgKG5ld0xlbmd0aCA8IF9jb3VudHMubGVuZ3RoKSB7CiAgICAgIF9jb3VudHNbbmV3TGVuZ3RoXSsrOwogICAgfSBlbHNlIHsKICAgICAgX2NvdW50cy5hZGQoMSk7CiAgICAgIGFzc2VydChuZXdMZW5ndGggPT0gX2NvdW50cy5sZW5ndGggLSAxKTsKICAgIH0KICB9Cn0KgJwATk48AURCRCcEQwRFNiwYFjcBPQEpQjcREwQBIS82ASkTMBoIIR4bMCIlSTEfCggIBAEMIQwkDCoBDCUMKQEMOQxBAQwqDCgBDC4aBAEMJiIfGQYEAQwnLBoXEgQBDBkhIAYdBAEMITYEAQwRKBIEAQw1DDgBDDY+BAEMSRsBDDg0AQwtHAQBDDAeHDAEASkhJxomHA0WLwYEAgErcGFja2FnZTpjb21waWxlci9zcmMvaGVscGVycy90cmFja19tYXAuZGFydDZzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19iYWNrZW5kL2VucXVldWVyLmRhcnSoVi8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuanMuZW5xdWV1ZTsKCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJyBzaG93IFF1ZXVlOwoKaW1wb3J0ICcuLi9jb21tb24vdGFza3MuZGFydCcgc2hvdyBDb21waWxlclRhc2s7CmltcG9ydCAnLi4vY29tbW9uL3dvcmsuZGFydCcgc2hvdyBXb3JrSXRlbTsKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgRWxlbWVudEVudmlyb25tZW50OwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2VucXVldWUuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9hbm5vdGF0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jb2RlZ2VuX3dvcmxkX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvbWVtYmVyX3VzYWdlLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3VzZS5kYXJ0JwogICAgc2hvdwogICAgICAgIENvbnN0YW50VXNlLAogICAgICAgIER5bmFtaWNVc2UsCiAgICAgICAgU3RhdGljVXNlLAogICAgICAgIFN0YXRpY1VzZUtpbmQsCiAgICAgICAgVHlwZVVzZSwKICAgICAgICBUeXBlVXNlS2luZDsKaW1wb3J0ICcuLi91bml2ZXJzZS93b3JsZF9pbXBhY3QuZGFydCcKICAgIHNob3cgSW1wYWN0VXNlQ2FzZSwgV29ybGRJbXBhY3QsIFdvcmxkSW1wYWN0VmlzaXRvcjsKaW1wb3J0ICcuLi91dGlsL2VudW1zZXQuZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnIHNob3cgU2V0bGV0OwoKLy8vIFtFbnF1ZXVlcl0gd2hpY2ggaXMgc3BlY2lmaWMgdG8gY29kZSBnZW5lcmF0aW9uLgpjbGFzcyBDb2RlZ2VuRW5xdWV1ZXIgZXh0ZW5kcyBFbnF1ZXVlckltcGwgewogIGZpbmFsIFN0cmluZyBuYW1lOwogIFNldDxDbGFzc0VudGl0eT4gX3JlY2VudENsYXNzZXMgPSBuZXcgU2V0bGV0PENsYXNzRW50aXR5PigpOwogIGJvb2wgX3JlY2VudENvbnN0YW50cyA9IGZhbHNlOwogIGZpbmFsIENvZGVnZW5Xb3JsZEJ1aWxkZXJJbXBsIF93b3JsZEJ1aWxkZXI7CiAgZmluYWwgV29ya0l0ZW1CdWlsZGVyIF93b3JrSXRlbUJ1aWxkZXI7CgogIEBvdmVycmlkZQogIGJvb2wgcXVldWVJc0Nsb3NlZCA9IGZhbHNlOwogIEBvdmVycmlkZQogIGZpbmFsIENvbXBpbGVyVGFzayB0YXNrOwogIEBvdmVycmlkZQogIGZpbmFsIEVucXVldWVyTGlzdGVuZXIgbGlzdGVuZXI7CiAgZmluYWwgQW5ub3RhdGlvbnNEYXRhIF9hbm5vdGF0aW9uc0RhdGE7CgogIFdvcmxkSW1wYWN0VmlzaXRvciBfaW1wYWN0VmlzaXRvcjsKCiAgZmluYWwgUXVldWU8V29ya0l0ZW0+IF9xdWV1ZSA9IG5ldyBRdWV1ZTxXb3JrSXRlbT4oKTsKCiAgLy8vIEFsbCBkZWNsYXJhdGlvbiBlbGVtZW50cyB0aGF0IGhhdmUgYmVlbiBwcm9jZXNzZWQgYnkgY29kZWdlbi4KICBmaW5hbCBTZXQ8TWVtYmVyRW50aXR5PiBfcHJvY2Vzc2VkRW50aXRpZXMgPSBuZXcgU2V0PE1lbWJlckVudGl0eT4oKTsKCiAgLy8gSWYgbm90IGBudWxsYCB0aGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBxdWV1ZSBoYXMgYmVlbiBlbXB0aWVkLiBJdCBhbGxvd3MgZm9yCiAgLy8gYXBwbHlpbmcgYWRkaXRpb25hbCBpbXBhY3RzIGJlZm9yZSByZS1lbXB0eWluZyB0aGUgcXVldWUuCiAgdm9pZCBGdW5jdGlvbigpIG9uRW1wdHlGb3JUZXN0aW5nOwoKICBzdGF0aWMgY29uc3QgSW1wYWN0VXNlQ2FzZSBJTVBBQ1RfVVNFID0KICAgICAgY29uc3QgSW1wYWN0VXNlQ2FzZSgnQ29kZWdlbkVucXVldWVyJyk7CgogIENvZGVnZW5FbnF1ZXVlcih0aGlzLnRhc2ssIHRoaXMuX3dvcmxkQnVpbGRlciwgdGhpcy5fd29ya0l0ZW1CdWlsZGVyLAogICAgICB0aGlzLmxpc3RlbmVyLCB0aGlzLl9hbm5vdGF0aW9uc0RhdGEpCiAgICAgIDogdGhpcy5uYW1lID0gJ2NvZGVnZW4gZW5xdWV1ZXInIHsKICAgIF9pbXBhY3RWaXNpdG9yID0gbmV3IEVucXVldWVySW1wbEltcGFjdFZpc2l0b3IodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb2RlZ2VuV29ybGRCdWlsZGVyIGdldCB3b3JsZEJ1aWxkZXIgPT4gX3dvcmxkQnVpbGRlcjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgcXVldWVJc0VtcHR5ID0+IF9xdWV1ZS5pc0VtcHR5OwoKICBAb3ZlcnJpZGUKICB2b2lkIGNoZWNrUXVldWVJc0VtcHR5KCkgewogICAgaWYgKF9xdWV1ZS5pc05vdEVtcHR5KSB7CiAgICAgIGZhaWxlZEF0KF9xdWV1ZS5maXJzdC5lbGVtZW50LCAiJG5hbWUgcXVldWUgaXMgbm90IGVtcHR5LiIpOwogICAgfQogIH0KCiAgLy8vIFJldHVybnMgWzp0cnVlOl0gaWYgdGhpcyBlbnF1ZXVlciBpcyB0aGUgcmVzb2x1dGlvbiBlbnF1ZXVlci4KICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1Jlc29sdXRpb25RdWV1ZSA9PiBmYWxzZTsKCiAgLy8vIENyZWF0ZSBhIFtXb3JrSXRlbV0gZm9yIFtlbnRpdHldIGFuZCBhZGQgaXQgdG8gdGhlIHdvcmsgbGlzdCBpZiBpdCBoYXMgbm90CiAgLy8vIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQuCiAgdm9pZCBfYWRkVG9Xb3JrTGlzdChNZW1iZXJFbnRpdHkgZW50aXR5KSB7CiAgICBpZiAoX3Byb2Nlc3NlZEVudGl0aWVzLmNvbnRhaW5zKGVudGl0eSkpIHJldHVybjsKCiAgICBXb3JrSXRlbSB3b3JrSXRlbSA9IF93b3JrSXRlbUJ1aWxkZXIuY3JlYXRlV29ya0l0ZW0oZW50aXR5KTsKICAgIGlmICh3b3JrSXRlbSA9PSBudWxsKSByZXR1cm47CgogICAgaWYgKHF1ZXVlSXNDbG9zZWQpIHsKICAgICAgZmFpbGVkQXQoZW50aXR5LCAiQ29kZWdlbiB3b3JrIGxpc3QgaXMgY2xvc2VkLiBUcnlpbmcgdG8gYWRkICRlbnRpdHkiKTsKICAgIH0KCiAgICBhcHBseUltcGFjdChsaXN0ZW5lci5yZWdpc3RlclVzZWRFbGVtZW50KGVudGl0eSkpOwogICAgX3F1ZXVlLmFkZCh3b3JrSXRlbSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFwcGx5SW1wYWN0KFdvcmxkSW1wYWN0IHdvcmxkSW1wYWN0LCB7dmFyIGltcGFjdFNvdXJjZX0pIHsKICAgIGlmICh3b3JsZEltcGFjdC5pc0VtcHR5KSByZXR1cm47CiAgICBpbXBhY3RTdHJhdGVneS52aXNpdEltcGFjdCgKICAgICAgICBpbXBhY3RTb3VyY2UsIHdvcmxkSW1wYWN0LCBfaW1wYWN0VmlzaXRvciwgaW1wYWN0VXNlKTsKICB9CgogIHZvaWQgX3JlZ2lzdGVySW5zdGFudGlhdGVkVHlwZShJbnRlcmZhY2VUeXBlIHR5cGUsCiAgICAgIHtib29sIG5hdGl2ZVVzYWdlOiBmYWxzZX0pIHsKICAgIHRhc2subWVhc3VyZVN1YnRhc2soJ2NvZGVnZW4udHlwZVVzZScsICgpIHsKICAgICAgX3dvcmxkQnVpbGRlci5yZWdpc3RlclR5cGVJbnN0YW50aWF0aW9uKHR5cGUsIF9hcHBseUNsYXNzVXNlKTsKICAgICAgbGlzdGVuZXIucmVnaXN0ZXJJbnN0YW50aWF0ZWRUeXBlKHR5cGUsIG5hdGl2ZVVzYWdlOiBuYXRpdmVVc2FnZSk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY2hlY2tOb0VucXVldWVkSW52b2tlZEluc3RhbmNlTWV0aG9kcygKICAgICAgRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCkgewogICAgcmV0dXJuIGNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeShlbGVtZW50RW52aXJvbm1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjaGVja0NsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgX3dvcmxkQnVpbGRlci5wcm9jZXNzQ2xhc3NNZW1iZXJzKGNscywKICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlciwgRW51bVNldDxNZW1iZXJVc2U+IHVzZVNldCkgewogICAgICBpZiAodXNlU2V0LmlzTm90RW1wdHkpIHsKICAgICAgICBmYWlsZWRBdChtZW1iZXIsCiAgICAgICAgICAgICdVbmVucXVldWVkIHVzZSBvZiAkbWVtYmVyOiAke3VzZVNldC5pdGVyYWJsZShNZW1iZXJVc2UudmFsdWVzKX0nKTsKICAgICAgfQogICAgfSwgY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5OiB0cnVlKTsKICB9CgogIC8vLyBDYWxsYmFjayBmb3IgYXBwbHlpbmcgdGhlIHVzZSBvZiBhIFtjbHNdLgogIHZvaWQgX2FwcGx5Q2xhc3NVc2UoQ2xhc3NFbnRpdHkgY2xzLCBFbnVtU2V0PENsYXNzVXNlPiB1c2VTZXQpIHsKICAgIGlmICh1c2VTZXQuY29udGFpbnMoQ2xhc3NVc2UuSU5TVEFOVElBVEVEKSkgewogICAgICBfcmVjZW50Q2xhc3Nlcy5hZGQoY2xzKTsKICAgICAgX3dvcmxkQnVpbGRlci5wcm9jZXNzQ2xhc3NNZW1iZXJzKGNscywgX2FwcGx5TWVtYmVyVXNlKTsKICAgICAgLy8gV2Ugb25seSB0ZWxsIHRoZSBiYWNrZW5kIG9uY2UgdGhhdCBbY2xzXSB3YXMgaW5zdGFudGlhdGVkLCBzbwogICAgICAvLyBhbnkgYWRkaXRpb25hbCBkZXBlbmRlbmNpZXMgbXVzdCBiZSB0cmVhdGVkIGFzIGdsb2JhbAogICAgICAvLyBkZXBlbmRlbmNpZXMuCiAgICAgIGFwcGx5SW1wYWN0KGxpc3RlbmVyLnJlZ2lzdGVySW5zdGFudGlhdGVkQ2xhc3MoY2xzKSk7CiAgICB9CiAgICBpZiAodXNlU2V0LmNvbnRhaW5zKENsYXNzVXNlLklNUExFTUVOVEVEKSkgewogICAgICBhcHBseUltcGFjdChsaXN0ZW5lci5yZWdpc3RlckltcGxlbWVudGVkQ2xhc3MoY2xzKSk7CiAgICB9CiAgfQoKICAvLy8gQ2FsbGJhY2sgZm9yIGFwcGx5aW5nIHRoZSB1c2Ugb2YgYSBbbWVtYmVyXS4KICB2b2lkIF9hcHBseU1lbWJlclVzZShNZW1iZXJFbnRpdHkgbWVtYmVyLCBFbnVtU2V0PE1lbWJlclVzZT4gdXNlU2V0KSB7CiAgICBpZiAodXNlU2V0LmNvbnRhaW5zKE1lbWJlclVzZS5OT1JNQUwpKSB7CiAgICAgIF9hZGRUb1dvcmtMaXN0KG1lbWJlcik7CiAgICB9CiAgICBpZiAodXNlU2V0LmNvbnRhaW5zKE1lbWJlclVzZS5DTE9TVVJJWkVfSU5TVEFOQ0UpKSB7CiAgICAgIF9yZWdpc3RlckNsb3N1cml6ZWRNZW1iZXIobWVtYmVyKTsKICAgIH0KICAgIGlmICh1c2VTZXQuY29udGFpbnMoTWVtYmVyVXNlLkNMT1NVUklaRV9TVEFUSUMpKSB7CiAgICAgIGFwcGx5SW1wYWN0KGxpc3RlbmVyLnJlZ2lzdGVyR2V0T2ZTdGF0aWNGdW5jdGlvbigpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJvY2Vzc0R5bmFtaWNVc2UoRHluYW1pY1VzZSBkeW5hbWljVXNlKSB7CiAgICB0YXNrLm1lYXN1cmVTdWJ0YXNrKCdjb2RlZ2VuLmR5bmFtaWNVc2UnLCAoKSB7CiAgICAgIF93b3JsZEJ1aWxkZXIucmVnaXN0ZXJEeW5hbWljVXNlKGR5bmFtaWNVc2UsIF9hcHBseU1lbWJlclVzZSk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJvY2Vzc1N0YXRpY1VzZShNZW1iZXJFbnRpdHkgbWVtYmVyLCBTdGF0aWNVc2Ugc3RhdGljVXNlKSB7CiAgICB0YXNrLm1lYXN1cmVTdWJ0YXNrKCdjb2RlZ2VuLnN0YXRpY1VzZScsICgpIHsKICAgICAgX3dvcmxkQnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShzdGF0aWNVc2UsIF9hcHBseU1lbWJlclVzZSk7CiAgICAgIHN3aXRjaCAoc3RhdGljVXNlLmtpbmQpIHsKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuQ09OU1RSVUNUT1JfSU5WT0tFOgogICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5DT05TVF9DT05TVFJVQ1RPUl9JTlZPS0U6CiAgICAgICAgICBwcm9jZXNzVHlwZVVzZShtZW1iZXIsIG5ldyBUeXBlVXNlLmluc3RhbnRpYXRpb24oc3RhdGljVXNlLnR5cGUpKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5JTkxJTklORzoKICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFNob3VsZCB0aGlzIGJlIHRyYWNrZWQgd2l0aCBfTWVtYmVyVXNhZ2UgPwogICAgICAgICAgbGlzdGVuZXIucmVnaXN0ZXJVc2VkRWxlbWVudChzdGF0aWNVc2UuZWxlbWVudCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBwcm9jZXNzVHlwZVVzZShNZW1iZXJFbnRpdHkgbWVtYmVyLCBUeXBlVXNlIHR5cGVVc2UpIHsKICAgIERhcnRUeXBlIHR5cGUgPSB0eXBlVXNlLnR5cGU7CiAgICBzd2l0Y2ggKHR5cGVVc2Uua2luZCkgewogICAgICBjYXNlIFR5cGVVc2VLaW5kLklOU1RBTlRJQVRJT046CiAgICAgICAgX3JlZ2lzdGVySW5zdGFudGlhdGVkVHlwZSh0eXBlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5OQVRJVkVfSU5TVEFOVElBVElPTjoKICAgICAgICBfcmVnaXN0ZXJJbnN0YW50aWF0ZWRUeXBlKHR5cGUsIG5hdGl2ZVVzYWdlOiB0cnVlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5JU19DSEVDSzoKICAgICAgY2FzZSBUeXBlVXNlS2luZC5DQVRDSF9UWVBFOgogICAgICAgIF9yZWdpc3RlcklzQ2hlY2sodHlwZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuQVNfQ0FTVDoKICAgICAgICBpZiAoX2Fubm90YXRpb25zRGF0YS5nZXRFeHBsaWNpdENhc3RDaGVja1BvbGljeShtZW1iZXIpLmlzRW1pdHRlZCkgewogICAgICAgICAgX3JlZ2lzdGVySXNDaGVjayh0eXBlKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuSU1QTElDSVRfQ0FTVDoKICAgICAgICBpZiAoX2Fubm90YXRpb25zRGF0YS5nZXRJbXBsaWNpdERvd25jYXN0Q2hlY2tQb2xpY3kobWVtYmVyKS5pc0VtaXR0ZWQpIHsKICAgICAgICAgIF9yZWdpc3RlcklzQ2hlY2sodHlwZSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLlBBUkFNRVRFUl9DSEVDSzoKICAgICAgICBpZiAoX2Fubm90YXRpb25zRGF0YS5nZXRQYXJhbWV0ZXJDaGVja1BvbGljeShtZW1iZXIpLmlzRW1pdHRlZCkgewogICAgICAgICAgX3JlZ2lzdGVySXNDaGVjayh0eXBlKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuVFlQRV9MSVRFUkFMOgogICAgICAgIGlmICh0eXBlIGlzIFR5cGVWYXJpYWJsZVR5cGUpIHsKICAgICAgICAgIF93b3JsZEJ1aWxkZXIucmVnaXN0ZXJUeXBlVmFyaWFibGVUeXBlTGl0ZXJhbCh0eXBlKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuUlRJX1ZBTFVFOgogICAgICAgIF93b3JsZEJ1aWxkZXIucmVnaXN0ZXJDb25zdFR5cGVMaXRlcmFsKHR5cGUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLlRZUEVfQVJHVU1FTlQ6CiAgICAgICAgX3dvcmxkQnVpbGRlci5yZWdpc3RlclR5cGVBcmd1bWVudCh0eXBlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5DT05TVF9JTlNUQU5USUFUSU9OOgogICAgICAgIGZhaWxlZEF0KENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsICJVbmV4cGVjdGVkIHR5cGUgdXNlOiAkdHlwZVVzZS4iKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5OQU1FRF9UWVBFX1ZBUklBQkxFX05FV19SVEk6CiAgICAgICAgYXNzZXJ0KHR5cGUgaXMgVHlwZVZhcmlhYmxlVHlwZSk7CiAgICAgICAgX3JlZ2lzdGVyTmFtZWRUeXBlVmFyaWFibGVOZXdSdGkodHlwZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByb2Nlc3NDb25zdGFudFVzZShDb25zdGFudFVzZSBjb25zdGFudFVzZSkgewogICAgdGFzay5tZWFzdXJlU3VidGFzaygnY29kZWdlbi5jb25zdGFudFVzZScsICgpIHsKICAgICAgaWYgKF93b3JsZEJ1aWxkZXIucmVnaXN0ZXJDb25zdGFudFVzZShjb25zdGFudFVzZSkpIHsKICAgICAgICBhcHBseUltcGFjdChsaXN0ZW5lci5yZWdpc3RlclVzZWRDb25zdGFudChjb25zdGFudFVzZS52YWx1ZSkpOwogICAgICAgIF9yZWNlbnRDb25zdGFudHMgPSB0cnVlOwogICAgICB9CiAgICB9KTsKICB9CgogIHZvaWQgX3JlZ2lzdGVySXNDaGVjayhEYXJ0VHlwZSB0eXBlKSB7CiAgICBfd29ybGRCdWlsZGVyLnJlZ2lzdGVySXNDaGVjayh0eXBlKTsKICB9CgogIHZvaWQgX3JlZ2lzdGVyTmFtZWRUeXBlVmFyaWFibGVOZXdSdGkoVHlwZVZhcmlhYmxlVHlwZSB0eXBlKSB7CiAgICBfd29ybGRCdWlsZGVyLnJlZ2lzdGVyTmFtZWRUeXBlVmFyaWFibGVOZXdSdGkodHlwZSk7CiAgfQoKICB2b2lkIF9yZWdpc3RlckNsb3N1cml6ZWRNZW1iZXIoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KGVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlcik7CiAgICBhcHBseUltcGFjdChsaXN0ZW5lci5yZWdpc3RlckNsb3N1cml6ZWRNZW1iZXIoZWxlbWVudCkpOwogIH0KCiAgdm9pZCBfZm9yRWFjaCh2b2lkIGYoV29ya0l0ZW0gd29yaykpIHsKICAgIGRvIHsKICAgICAgd2hpbGUgKF9xdWV1ZS5pc05vdEVtcHR5KSB7CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogRmluZCBhbiBvcHRpbWFsIHByb2Nlc3Mgb3JkZXIuCiAgICAgICAgV29ya0l0ZW0gd29yayA9IF9xdWV1ZS5yZW1vdmVMYXN0KCk7CiAgICAgICAgaWYgKCFfcHJvY2Vzc2VkRW50aXRpZXMuY29udGFpbnMod29yay5lbGVtZW50KSkgewogICAgICAgICAgZih3b3JrKTsKICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlZ2lzdGVyIHRoZSBwcm9jZXNzZWQgZWxlbWVudCBoZXJlLiBUaGlzCiAgICAgICAgICAvLyBpcyBjdXJyZW50bHkgYSBzaWRlLWVmZmVjdCBvZiBjYWxsaW5nIGB3b3JrLnJ1bmAuCiAgICAgICAgICBfcHJvY2Vzc2VkRW50aXRpZXMuYWRkKHdvcmsuZWxlbWVudCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIExpc3Q8Q2xhc3NFbnRpdHk+IHJlY2VudHMgPSBfcmVjZW50Q2xhc3Nlcy50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKICAgICAgX3JlY2VudENsYXNzZXMuY2xlYXIoKTsKICAgICAgX3JlY2VudENvbnN0YW50cyA9IGZhbHNlOwogICAgICBpZiAoIV9vblF1ZXVlRW1wdHkocmVjZW50cykpIF9yZWNlbnRDbGFzc2VzLmFkZEFsbChyZWNlbnRzKTsKICAgIH0gd2hpbGUgKAogICAgICAgIF9xdWV1ZS5pc05vdEVtcHR5IHx8IF9yZWNlbnRDbGFzc2VzLmlzTm90RW1wdHkgfHwgX3JlY2VudENvbnN0YW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2godm9pZCBmKFdvcmtJdGVtIHdvcmspKSB7CiAgICBfZm9yRWFjaChmKTsKICAgIGlmIChvbkVtcHR5Rm9yVGVzdGluZyAhPSBudWxsKSB7CiAgICAgIG9uRW1wdHlGb3JUZXN0aW5nKCk7CiAgICAgIF9mb3JFYWNoKGYpOwogICAgfQogIH0KCiAgLy8vIFtfb25RdWV1ZUVtcHR5XSBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIHF1ZXVlIGlzIGRyYWluZWQuIFtyZWNlbnRDbGFzc2VzXQogIC8vLyBjb250YWlucyB0aGUgc2V0IG9mIGFsbCBjbGFzc2VzIHNlZW4gZm9yIHRoZSBmaXJzdCB0aW1lIHNpbmNlCiAgLy8vIFtfb25RdWV1ZUVtcHR5XSB3YXMgY2FsbGVkIGxhc3QuIEEgcmV0dXJuIHZhbHVlIG9mIFt0cnVlXSBpbmRpY2F0ZXMgdGhhdAogIC8vLyB0aGUgW3JlY2VudENsYXNzZXNdIGhhdmUgYmVlbiBwcm9jZXNzZWQgYW5kIG1heSBiZSBjbGVhcmVkLiBJZiBbZmFsc2VdIGlzCiAgLy8vIHJldHVybmVkLCBbX29uUXVldWVFbXB0eV0gd2lsbCBiZSBjYWxsZWQgb25jZSB0aGUgcXVldWUgaXMgZW1wdHkgYWdhaW4gKG9yCiAgLy8vIHN0aWxsIGVtcHR5KSBhbmQgW3JlY2VudENsYXNzZXNdIHdpbGwgYmUgYSBzdXBlcnNldCBvZiB0aGUgY3VycmVudCB2YWx1ZS4KICBib29sIF9vblF1ZXVlRW1wdHkoSXRlcmFibGU8Q2xhc3NFbnRpdHk+IHJlY2VudENsYXNzZXMpIHsKICAgIHJldHVybiBsaXN0ZW5lci5vblF1ZXVlRW1wdHkodGhpcywgcmVjZW50Q2xhc3Nlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGxvZ1N1bW1hcnkodm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UpKSB7CiAgICBsb2coJ0NvbXBpbGVkICR7X3Byb2Nlc3NlZEVudGl0aWVzLmxlbmd0aH0gbWV0aG9kcy4nKTsKICAgIGxpc3RlbmVyLmxvZ1N1bW1hcnkobG9nKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdFbnF1ZXVlcigkbmFtZSknOwoKICBAb3ZlcnJpZGUKICBJbXBhY3RVc2VDYXNlIGdldCBpbXBhY3RVc2UgPT4gSU1QQUNUX1VTRTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBnZXQgcHJvY2Vzc2VkRW50aXRpZXMgPT4gX3Byb2Nlc3NlZEVudGl0aWVzOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gZ2V0IHByb2Nlc3NlZENsYXNzZXMgPT4KICAgICAgX3dvcmxkQnVpbGRlci5pbnN0YW50aWF0ZWRDbGFzc2VzOwp9CoE+AE5OPAEcASUBMSwZOiQhGikxKB4JFRQTFxEVJzkfKAE1LRU/IS8qAQweDBsMIyoBJQE4AURIAVE/JQEqLgFILCk6BAEMOQEMKwEMHR1DBgQBRAwnAVEeLTUBQSIBGU4GATcaBAEMQiUgPwQBNSMwRUkIBAEMLi85BAEMJSs7HxlQCCgEATBDMh8/Rz8XPAYxOwYEATNJLR4GOSkGNzsGBAEMMjNFCAQBDEQyQyAvNU0RJU07ERERCAgEAQw+IhwmKQ8tPA8hIyAPIE0iCg8mUSIKDyhKIgoPJSg/Cg8iNg8mMg8sTw80KjAGBAEMNTQ8RyEICAQBKSkEAUE5BAE7Jj0EASkJIj8tOhNMPzAKCEoeIEMOTQQBDCgRJRsTBgQBT0RPUFFQPDcEAQwuOx4EAQwqAQwtAQxGAQwwKQIBLXBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvZW5xdWV1ZXIuZGFydD9zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19lbWl0dGVyL2NvZGVfZW1pdHRlcl90YXNrLmRhcnShMC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuanNfZW1pdHRlci5jb2RlX2VtaXR0ZXJfdGFzazsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi90YXNrcy5kYXJ0JyBzaG93IENvbXBpbGVyVGFzazsKaW1wb3J0ICcuLi9jb21waWxlci5kYXJ0JyBzaG93IENvbXBpbGVyOwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZGVmZXJyZWRfbG9hZC5kYXJ0JyBzaG93IE91dHB1dFVuaXQ7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganNBc3Q7CmltcG9ydCAnLi4vanNfYmFja2VuZC9iYWNrZW5kLmRhcnQnIHNob3cgQ29kZWdlbklucHV0czsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2luZmVycmVkX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYW1lci5kYXJ0JyBzaG93IE5hbWVyOwppbXBvcnQgJy4uL2pzX21vZGVsL2pzX3N0cmF0ZWd5LmRhcnQnOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY29kZWdlbl93b3JsZF9idWlsZGVyLmRhcnQnOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwppbXBvcnQgJ3Byb2dyYW1fYnVpbGRlci9wcm9ncmFtX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnc3RhcnR1cF9lbWl0dGVyL2VtaXR0ZXIuZGFydCcgYXMgc3RhcnR1cF9qc19lbWl0dGVyOwoKaW1wb3J0ICdtZXRhZGF0YV9jb2xsZWN0b3IuZGFydCcgc2hvdyBNZXRhZGF0YUNvbGxlY3RvcjsKaW1wb3J0ICdtb2RlbC5kYXJ0JzsKaW1wb3J0ICduYXRpdmVfZW1pdHRlci5kYXJ0JyBzaG93IE5hdGl2ZUVtaXR0ZXI7CmltcG9ydCAndHlwZV90ZXN0X3JlZ2lzdHJ5LmRhcnQnIHNob3cgVHlwZVRlc3RSZWdpc3RyeTsKCi8vLyBHZW5lcmF0ZXMgdGhlIGNvZGUgZm9yIGFsbCB1c2VkIGNsYXNzZXMgaW4gdGhlIHByb2dyYW0uIFN0YXRpYyBmaWVsZHMgKGV2ZW4KLy8vIGluIGNsYXNzZXMpIGFyZSBpZ25vcmVkLCBzaW5jZSB0aGV5IGNhbiBiZSB0cmVhdGVkIGFzIG5vbi1jbGFzcyBlbGVtZW50cy4KLy8vCi8vLyBUaGUgY29kZSBmb3IgdGhlIGNvbnRhaW5pbmcgKHVzZWQpIG1ldGhvZHMgbXVzdCBleGlzdCBpbiB0aGUgYHVuaXZlcnNlYC4KY2xhc3MgQ29kZUVtaXR0ZXJUYXNrIGV4dGVuZHMgQ29tcGlsZXJUYXNrIHsKICBUeXBlVGVzdFJlZ2lzdHJ5IHR5cGVUZXN0UmVnaXN0cnk7CiAgTmF0aXZlRW1pdHRlciBfbmF0aXZlRW1pdHRlcjsKICBNZXRhZGF0YUNvbGxlY3RvciBtZXRhZGF0YUNvbGxlY3RvcjsKICBFbWl0dGVyIF9lbWl0dGVyOwogIGZpbmFsIENvbXBpbGVyIF9jb21waWxlcjsKICBmaW5hbCBib29sIF9nZW5lcmF0ZVNvdXJjZU1hcDsKCiAgSnNCYWNrZW5kU3RyYXRlZ3kgZ2V0IF9iYWNrZW5kU3RyYXRlZ3kgPT4gX2NvbXBpbGVyLmJhY2tlbmRTdHJhdGVneTsKCiAgQ29tcGlsZXJPcHRpb25zIGdldCBvcHRpb25zID0+IF9jb21waWxlci5vcHRpb25zOwoKICBAZGVwcmVjYXRlZAogIC8vIFRoaXMgZmllbGQgc2hvdWxkIGJlIHJlbW92ZWQuIEl0J3MgY3VycmVudGx5IG9ubHkgbmVlZGVkIGZvciBkdW1wLWluZm8gYW5kCiAgLy8gdGVzdHMuCiAgLy8gVGhlIGZpZWxkIGlzIHNldCBhZnRlciB0aGUgcHJvZ3JhbSBoYXMgYmVlbiBlbWl0dGVkLgogIC8vLyBDb250YWlucyBhIGxpc3Qgb2YgYWxsIGNsYXNzZXMgdGhhdCBhcmUgZW1pdHRlZC4KICBTZXQ8Q2xhc3NFbnRpdHk+IG5lZWRlZENsYXNzZXM7CgogIENvZGVFbWl0dGVyVGFzayh0aGlzLl9jb21waWxlciwgdGhpcy5fZ2VuZXJhdGVTb3VyY2VNYXApCiAgICAgIDogc3VwZXIoX2NvbXBpbGVyLm1lYXN1cmVyKTsKCiAgTmF0aXZlRW1pdHRlciBnZXQgbmF0aXZlRW1pdHRlciB7CiAgICBhc3NlcnQoCiAgICAgICAgX25hdGl2ZUVtaXR0ZXIgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgTk9fTE9DQVRJT05fU1BBTk5BQkxFLCAiTmF0aXZlRW1pdHRlciBoYXMgbm90IGJlZW4gY3JlYXRlZCB5ZXQuIikpOwogICAgcmV0dXJuIF9uYXRpdmVFbWl0dGVyOwogIH0KCiAgRW1pdHRlciBnZXQgZW1pdHRlciB7CiAgICBhc3NlcnQoX2VtaXR0ZXIgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdChOT19MT0NBVElPTl9TUEFOTkFCTEUsICJFbWl0dGVyIGhhcyBub3QgYmVlbiBjcmVhdGVkIHlldC4iKSk7CiAgICByZXR1cm4gX2VtaXR0ZXI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gJ0NvZGUgZW1pdHRlcic7CgogIHZvaWQgX2ZpbmFsaXplUnRpKENvZGVnZW5JbnB1dHMgY29kZWdlbiwgQ29kZWdlbldvcmxkIGNvZGVnZW5Xb3JsZCkgewogICAgLy8gQ29tcHV0ZSB0aGUgcmVxdWlyZWQgdHlwZSBjaGVja3MgdG8ga25vdyB3aGljaCBjbGFzc2VzIG5lZWQgYQogICAgLy8gJ2lzJCcgbWV0aG9kLgogICAgdHlwZVRlc3RSZWdpc3RyeS5jb21wdXRlUmVxdWlyZWRUeXBlQ2hlY2tzKAogICAgICAgIF9iYWNrZW5kU3RyYXRlZ3kucnRpQ2hlY2tzQnVpbGRlciwgY29kZWdlbldvcmxkKTsKICAgIC8vIENvbXB1dGUgdGhlIGNsYXNzZXMgbmVlZGVkIGJ5IFJUSS4KICAgIHR5cGVUZXN0UmVnaXN0cnkuY29tcHV0ZVJ0aU5lZWRlZENsYXNzZXMoCiAgICAgICAgY29kZWdlbi5ydGlTdWJzdGl0dXRpb25zLCBfYmFja2VuZFN0cmF0ZWd5LmdlbmVyYXRlZENvZGUua2V5cyk7CiAgfQoKICAvLy8gQ3JlYXRlcyB0aGUgW0VtaXR0ZXJdIGZvciB0aGlzIHRhc2suCiAgdm9pZCBjcmVhdGVFbWl0dGVyKAogICAgICBOYW1lciBuYW1lciwgQ29kZWdlbklucHV0cyBjb2RlZ2VuLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIG1lYXN1cmUoKCkgewogICAgICBfbmF0aXZlRW1pdHRlciA9IG5ldyBOYXRpdmVFbWl0dGVyKAogICAgICAgICAgdGhpcywgY2xvc2VkV29ybGQsIF9iYWNrZW5kU3RyYXRlZ3kubmF0aXZlQ29kZWdlbkVucXVldWVyKTsKICAgICAgX2VtaXR0ZXIgPSBuZXcgc3RhcnR1cF9qc19lbWl0dGVyLkVtaXR0ZXJJbXBsKAogICAgICAgICAgX2NvbXBpbGVyLm9wdGlvbnMsCiAgICAgICAgICBfY29tcGlsZXIucmVwb3J0ZXIsCiAgICAgICAgICBfY29tcGlsZXIub3V0cHV0UHJvdmlkZXIsCiAgICAgICAgICBfY29tcGlsZXIuZHVtcEluZm9UYXNrLAogICAgICAgICAgbmFtZXIsCiAgICAgICAgICBjbG9zZWRXb3JsZCwKICAgICAgICAgIGNvZGVnZW4ucnRpRW5jb2RlciwKICAgICAgICAgIGNvZGVnZW4ucnRpUmVjaXBlRW5jb2RlciwKICAgICAgICAgIF9iYWNrZW5kU3RyYXRlZ3kuc291cmNlSW5mb3JtYXRpb25TdHJhdGVneSwKICAgICAgICAgIHRoaXMsCiAgICAgICAgICBfZ2VuZXJhdGVTb3VyY2VNYXApOwogICAgICBtZXRhZGF0YUNvbGxlY3RvciA9IG5ldyBNZXRhZGF0YUNvbGxlY3RvcigKICAgICAgICAgIF9jb21waWxlci5vcHRpb25zLAogICAgICAgICAgX2NvbXBpbGVyLnJlcG9ydGVyLAogICAgICAgICAgX2VtaXR0ZXIsCiAgICAgICAgICBjb2RlZ2VuLnJ0aUVuY29kZXIsCiAgICAgICAgICBjb2RlZ2VuLnJ0aVJlY2lwZUVuY29kZXIsCiAgICAgICAgICBjbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQpOwogICAgICB0eXBlVGVzdFJlZ2lzdHJ5ID0gbmV3IFR5cGVUZXN0UmVnaXN0cnkoCiAgICAgICAgICBfY29tcGlsZXIub3B0aW9ucywgY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50KTsKICAgIH0pOwogIH0KCiAgaW50IGFzc2VtYmxlUHJvZ3JhbSgKICAgICAgTmFtZXIgbmFtZXIsCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgSW5mZXJyZWREYXRhIGluZmVycmVkRGF0YSwKICAgICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuSW5wdXRzLAogICAgICBDb2RlZ2VuV29ybGQgY29kZWdlbldvcmxkKSB7CiAgICByZXR1cm4gbWVhc3VyZSgoKSB7CiAgICAgIG1lYXN1cmVTdWJ0YXNrKCdmaW5hbGl6ZSBydGknLCAoKSB7CiAgICAgICAgX2ZpbmFsaXplUnRpKGNvZGVnZW5JbnB1dHMsIGNvZGVnZW5Xb3JsZCk7CiAgICAgIH0pOwogICAgICBQcm9ncmFtQnVpbGRlciBwcm9ncmFtQnVpbGRlciA9IG5ldyBQcm9ncmFtQnVpbGRlcigKICAgICAgICAgIF9jb21waWxlci5vcHRpb25zLAogICAgICAgICAgX2NvbXBpbGVyLnJlcG9ydGVyLAogICAgICAgICAgY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LAogICAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMsCiAgICAgICAgICBjbG9zZWRXb3JsZC5vdXRwdXRVbml0RGF0YSwKICAgICAgICAgIGNvZGVnZW5Xb3JsZCwKICAgICAgICAgIF9iYWNrZW5kU3RyYXRlZ3kubmF0aXZlQ29kZWdlbkVucXVldWVyLAogICAgICAgICAgY2xvc2VkV29ybGQuYmFja2VuZFVzYWdlLAogICAgICAgICAgY2xvc2VkV29ybGQubmF0aXZlRGF0YSwKICAgICAgICAgIGNsb3NlZFdvcmxkLnJ0aU5lZWQsCiAgICAgICAgICBjbG9zZWRXb3JsZC5pbnRlcmNlcHRvckRhdGEsCiAgICAgICAgICB0eXBlVGVzdFJlZ2lzdHJ5LnJ0aUNoZWNrcywKICAgICAgICAgIGNvZGVnZW5JbnB1dHMucnRpRW5jb2RlciwKICAgICAgICAgIGNvZGVnZW5JbnB1dHMucnRpUmVjaXBlRW5jb2RlciwKICAgICAgICAgIGNvZGVnZW5Xb3JsZC5vbmVTaG90SW50ZXJjZXB0b3JEYXRhLAogICAgICAgICAgX2JhY2tlbmRTdHJhdGVneS5jdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpcywKICAgICAgICAgIF9iYWNrZW5kU3RyYXRlZ3kuZ2VuZXJhdGVkQ29kZSwKICAgICAgICAgIG5hbWVyLAogICAgICAgICAgdGhpcywKICAgICAgICAgIGNsb3NlZFdvcmxkLAogICAgICAgICAgY2xvc2VkV29ybGQuZmllbGRBbmFseXNpcywKICAgICAgICAgIGluZmVycmVkRGF0YSwKICAgICAgICAgIF9iYWNrZW5kU3RyYXRlZ3kuc291cmNlSW5mb3JtYXRpb25TdHJhdGVneSwKICAgICAgICAgIGNsb3NlZFdvcmxkLnNvcnRlciwKICAgICAgICAgIHR5cGVUZXN0UmVnaXN0cnkucnRpTmVlZGVkQ2xhc3NlcywKICAgICAgICAgIGNsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudC5tYWluRnVuY3Rpb24pOwogICAgICBpbnQgc2l6ZSA9IGVtaXR0ZXIuZW1pdFByb2dyYW0ocHJvZ3JhbUJ1aWxkZXIsIGNvZGVnZW5Xb3JsZCk7CiAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiB3ZSBzaG91bGRuJ3QgbmVlZCB0aGUgYG5lZWRlZENsYXNzZXNgIGFueW1vcmUuCiAgICAgIG5lZWRlZENsYXNzZXMgPSBwcm9ncmFtQnVpbGRlci5jb2xsZWN0b3IubmVlZGVkQ2xhc3NlczsKICAgICAgcmV0dXJuIHNpemU7CiAgICB9KTsKICB9Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIHRoZSBzdWJzZXQgb2YgdGhlIFtFbWl0dGVyXSB0aGF0IGNhbiBiZSB1c2VkIGR1cmluZyBtb2R1bGFyCi8vLyBjb2RlIGdlbmVyYXRpb24uCi8vLwovLy8gTm90ZSB0aGF0IHRoZSBlbWlzc2lvbiBwaGFzZSBpcyBub3QgaXRzZWxmIG1vZHVsYXIgYnV0IHBlcmZvcm1lZCBvbgovLy8gdGhlIGNsb3NlZCB3b3JsZCBjb21wdXRlZCBieSB0aGUgY29kZWdlbiBlbnF1ZXVlci4KYWJzdHJhY3QgY2xhc3MgTW9kdWxhckVtaXR0ZXIgewogIC8vLyBSZXR1cm5zIHRoZSBKUyBwcm90b3R5cGUgb2YgdGhlIGdpdmVuIGNsYXNzIFtlXS4KICBqc0FzdC5FeHByZXNzaW9uIHByb3RvdHlwZUFjY2VzcyhDbGFzc0VudGl0eSBlLCB7Ym9vbCBoYXNCZWVuSW5zdGFudGlhdGVkfSk7CgogIC8vLyBSZXR1cm5zIHRoZSBKUyBmdW5jdGlvbiByZXByZXNlbnRpbmcgdGhlIGdpdmVuIGZ1bmN0aW9uLgogIC8vLwogIC8vLyBUaGUgZnVuY3Rpb24gbXVzdCBiZSBpbnZva2VkIGFuZCBjYW4gbm90IGJlIHVzZWQgYXMgY2xvc3VyZS4KICBqc0FzdC5FeHByZXNzaW9uIHN0YXRpY0Z1bmN0aW9uQWNjZXNzKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpOwoKICBqc0FzdC5FeHByZXNzaW9uIHN0YXRpY0ZpZWxkQWNjZXNzKEZpZWxkRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyB0aGUgSlMgZnVuY3Rpb24gdGhhdCBtdXN0IGJlIGludm9rZWQgdG8gZ2V0IHRoZSB2YWx1ZSBvZiB0aGUKICAvLy8gbGF6aWx5IGluaXRpYWxpemVkIHN0YXRpYy4KICBqc0FzdC5FeHByZXNzaW9uIGlzb2xhdGVMYXp5SW5pdGlhbGl6ZXJBY2Nlc3MoY292YXJpYW50IEZpZWxkRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyB0aGUgY2xvc3VyZSBleHByZXNzaW9uIG9mIGEgc3RhdGljIGZ1bmN0aW9uLgogIGpzQXN0LkV4cHJlc3Npb24gc3RhdGljQ2xvc3VyZUFjY2Vzcyhjb3ZhcmlhbnQgRnVuY3Rpb25FbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIHRoZSBKUyBjb25zdHJ1Y3RvciBvZiB0aGUgZ2l2ZW4gZWxlbWVudC4KICAvLy8KICAvLy8gVGhlIHJldHVybmVkIGV4cHJlc3Npb24gbXVzdCBvbmx5IGJlIHVzZWQgaW4gYSBKUyBgbmV3YCBleHByZXNzaW9uLgogIGpzQXN0LkV4cHJlc3Npb24gY29uc3RydWN0b3JBY2Nlc3MoQ2xhc3NFbnRpdHkgZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBKUyBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgdHlwZSBbZV0uCiAganNBc3QuRXhwcmVzc2lvbiB0eXBlQWNjZXNzKEVudGl0eSBlKTsKCiAgLy8vIFJldHVybnMgdGhlIEpTIG5hbWUgcmVwcmVzZW50aW5nIHRoZSB0eXBlIFtlXS4KICBqc0FzdC5OYW1lIHR5cGVBY2Nlc3NOZXdSdGkoRW50aXR5IGUpOwoKICAvLy8gUmV0dXJucyB0aGUgSlMgbmFtZSByZXByZXNlbnRpbmcgdGhlIHR5cGUgdmFyaWFibGUgW2VdLgogIGpzQXN0Lk5hbWUgdHlwZVZhcmlhYmxlQWNjZXNzTmV3UnRpKFR5cGVWYXJpYWJsZUVudGl0eSBlKTsKCiAgLy8vIFJldHVybnMgdGhlIEpTIGNvZGUgZm9yIGFjY2Vzc2luZyB0aGUgZW1iZWRkZWQgW2dsb2JhbF0uCiAganNBc3QuRXhwcmVzc2lvbiBnZW5lcmF0ZUVtYmVkZGVkR2xvYmFsQWNjZXNzKFN0cmluZyBnbG9iYWwpOwoKICAvLy8gUmV0dXJucyB0aGUgSlMgY29kZSBmb3IgYWNjZXNzaW5nIHRoZSBnaXZlbiBbY29uc3RhbnRdLgogIGpzQXN0LkV4cHJlc3Npb24gY29uc3RhbnRSZWZlcmVuY2UoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCk7CgogIC8vLyBSZXR1cm5zIHRoZSBKUyBjb2RlIGZvciBhY2Nlc3NpbmcgdGhlIGdsb2JhbCBwcm9wZXJ0eSBbZ2xvYmFsXS4KICBTdHJpbmcgZ2VuZXJhdGVFbWJlZGRlZEdsb2JhbEFjY2Vzc1N0cmluZyhTdHJpbmcgZ2xvYmFsKTsKfQoKLy8vIEludGVyZmFjZSBmb3IgdGhlIGVtaXR0ZXIgdGhhdCBpcyB1c2VkIGR1cmluZyB0aGUgZW1pc3Npb24gcGhhc2Ugb24gdGhlCi8vLyBjbG9zZWQgd29ybGQgY29tcHV0ZWQgYnkgdGhlIGNvZGVnZW4gZW5xdWV1ZXIuCi8vLwovLy8gVGhlc2UgbWV0aG9kcyBhcmUgX25vdF8gYXZhaWxhYmxlIGR1cmluZyBtb2R1bGFyIGNvZGUgZ2VuZXJhdGlvbi4KYWJzdHJhY3QgY2xhc3MgRW1pdHRlciBpbXBsZW1lbnRzIE1vZHVsYXJFbWl0dGVyIHsKICBQcm9ncmFtIGdldCBwcm9ncmFtRm9yVGVzdGluZzsKCiAgLy8vIFVzZXMgdGhlIFtwcm9ncmFtQnVpbGRlcl0gdG8gZ2VuZXJhdGUgYSBtb2RlbCBvZiB0aGUgcHJvZ3JhbSwgZW1pdHMKICAvLy8gdGhlIHByb2dyYW0sIGFuZCByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBnZW5lcmF0ZWQgb3V0cHV0LgogIGludCBlbWl0UHJvZ3JhbShQcm9ncmFtQnVpbGRlciBwcm9ncmFtQnVpbGRlciwgQ29kZWdlbldvcmxkIGNvZGVnZW5Xb3JsZCk7CgogIC8vLyBSZXR1cm5zIHRoZSBKUyBwcm90b3R5cGUgb2YgdGhlIGdpdmVuIGludGVyY2VwdG9yIGNsYXNzIFtlXS4KICBqc0FzdC5FeHByZXNzaW9uIGludGVyY2VwdG9yUHJvdG90eXBlQWNjZXNzKENsYXNzRW50aXR5IGUpOwoKICAvLy8gUmV0dXJucyB0aGUgSlMgY29uc3RydWN0b3Igb2YgdGhlIGdpdmVuIGludGVyY2VwdG9yIGNsYXNzIFtlXS4KICBqc0FzdC5FeHByZXNzaW9uIGludGVyY2VwdG9yQ2xhc3NBY2Nlc3MoQ2xhc3NFbnRpdHkgZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBKUyBleHByZXNzaW9uIHJlcHJlc2VudGluZyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyAnbnVsbCcKICBqc0FzdC5FeHByZXNzaW9uIGdlbmVyYXRlRnVuY3Rpb25UaGF0UmV0dXJuc051bGwoKTsKCiAgaW50IGNvbXBhcmVDb25zdGFudHMoQ29uc3RhbnRWYWx1ZSBhLCBDb25zdGFudFZhbHVlIGIpOwogIGJvb2wgaXNDb25zdGFudElubGluZWRPckFscmVhZHlFbWl0dGVkKENvbnN0YW50VmFsdWUgY29uc3RhbnQpOwoKICAvLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgY29kZSBnZW5lcmF0ZWQgZm9yIGEgZ2l2ZW4gb3V0cHV0IFt1bml0XS4KICBpbnQgZ2VuZXJhdGVkU2l6ZShPdXRwdXRVbml0IHVuaXQpOwp9CoDnAE5OPAEuARkxKSMwJCE4Ky4nGjEqLz0BORUxOAFQTgRNLSUgJxQcIQFHATQBDlAMOjciATsjASQMIBJQGwQBGB1PFQQBDCUBSEUVMDoqLkgEASsWRhEqRjUdHiQiERceJDYQHzEdHhQeJCsvPggEARcTICEjIxgqMwo6HR4qJiYYMiQiHycmJCovOioREBclGDYeLThESD4TCAQCAU4VBEg3IDdPAT8GQ0EBOwFLIVABO0oBNwZKNQE7KQE1KQE+PQE/QAE+PgFGPAIBTDMERjMhAUpBTQFDPgFFOgFMNgE6QgFIJgIBNnBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvY29kZV9lbWl0dGVyX3Rhc2suZGFydD5zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydMAAjbsvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwppbXBvcnQgJ2RhcnQ6dHlwZWRfZGF0YSc7CmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2JpbmFyeS9hc3RfdG9fYmluYXJ5LmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2JpbmFyeS9hc3RfZnJvbV9iaW5hcnkuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvYmluYXJ5L2FzdF90b19iaW5hcnkuZGFydCcgYXMgaXI7CmltcG9ydCAnLi4vY2xvc3VyZS5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvY29uc3RhbnRfc3lzdGVtLmRhcnQnIGFzIGNvbnN0YW50X3N5c3RlbTsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2RlZmVycmVkX2xvYWQuZGFydCc7CmltcG9ydCAnLi4vZGlhZ25vc3RpY3Mvc291cmNlX3NwYW4uZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvaW5kZXhlZC5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vaXIvY29uc3RhbnRzLmRhcnQnOwppbXBvcnQgJy4uL2lyL3N0YXRpY190eXBlX2Jhc2UuZGFydCc7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganM7CmltcG9ydCAnLi4vanNfbW9kZWwvY2xvc3VyZS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19tb2RlbC9sb2NhbHMuZGFydCc7CgpwYXJ0ICdhYnN0cmFjdF9zaW5rLmRhcnQnOwpwYXJ0ICdhYnN0cmFjdF9zb3VyY2UuZGFydCc7CnBhcnQgJ2JpbmFyeV9zaW5rLmRhcnQnOwpwYXJ0ICdiaW5hcnlfc291cmNlLmRhcnQnOwpwYXJ0ICdoZWxwZXJzLmRhcnQnOwpwYXJ0ICdtZW1iZXJfZGF0YS5kYXJ0JzsKcGFydCAnbWl4aW5zLmRhcnQnOwpwYXJ0ICdub2RlX2luZGV4ZXIuZGFydCc7CnBhcnQgJ29iamVjdF9zaW5rLmRhcnQnOwpwYXJ0ICdvYmplY3Rfc291cmNlLmRhcnQnOwoKLy8vIEludGVyZmFjZSBmb3Igc2VyaWFsaXphdGlvbi4KYWJzdHJhY3QgY2xhc3MgRGF0YVNpbmsgewogIC8vLyBUaGUgYW1vdW50IG9mIGRhdGEgd3JpdHRlbiB0byB0aGlzIGRhdGEgc2luay4KICAvLy8KICAvLy8gVGhlIHVuaXRzIGlzIGJhc2VkIG9uIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlIGZvciB0aGlzIGRhdGEgc2luay4KICBpbnQgZ2V0IGxlbmd0aDsKCiAgLy8vIEZsdXNoZXMgYW55IHBlbmRpbmcgZGF0YSBhbmQgY2xvc2VzIHRoaXMgZGF0YSBzaW5rLgogIC8vLwogIC8vLyBUaGUgZGF0YSBzaW5rIGNhbiBubyBsb25nZXIgYmUgd3JpdHRlbiB0byBhZnRlciBjbG9zaW5nLgogIHZvaWQgY2xvc2UoKTsKCiAgLy8vIFJlZ2lzdGVycyB0aGF0IHRoZSBzZWN0aW9uIFt0YWddIHN0YXJ0cy4KICAvLy8KICAvLy8gVGhpcyBpcyB1c2VkIGZvciBkZWJ1Z2dpbmcgdG8gdmVyaWZ5IHRoYXQgc2VjdGlvbnMgYXJlIGNvcnJlY3RseSBhbGlnbmVkCiAgLy8vIGJldHdlZW4gc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uLgogIHZvaWQgYmVnaW4oU3RyaW5nIHRhZyk7CgogIC8vLyBSZWdpc3RlcnMgdGhhdCB0aGUgc2VjdGlvbiBbdGFnXSBlbmRzLgogIC8vLwogIC8vLyBUaGlzIGlzIHVzZWQgZm9yIGRlYnVnZ2luZyB0byB2ZXJpZnkgdGhhdCBzZWN0aW9ucyBhcmUgY29ycmVjdGx5IGFsaWduZWQKICAvLy8gYmV0d2VlbiBzZXJpYWxpemF0aW9uIGFuZCBkZXNlcmlhbGl6YXRpb24uCiAgdm9pZCBlbmQoU3RyaW5nIHRhZyk7CgogIC8vLyBXcml0ZXMgYSByZWZlcmVuY2UgdG8gW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4gSWYgW3ZhbHVlXSBoYXMgbm90IHlldAogIC8vLyBiZWVuIHNlcmlhbGl6ZWQsIFtmXSBpcyBjYWxsZWQgdG8gc2VyaWFsaXplIHRoZSB2YWx1ZSBpdHNlbGYuCiAgdm9pZCB3cml0ZUNhY2hlZDxFPihFIHZhbHVlLCB2b2lkIGYoRSB2YWx1ZSkpOwoKICAvLy8gV3JpdGVzIHRoZSBwb3RlbnRpYWxseSBgbnVsbGAgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4gSWYgW3ZhbHVlXSBpcwogIC8vLyBub24tbnVsbCBbZl0gaXMgY2FsbGVkIHRvIHdyaXRlIHRoZSBub24tbnVsbCB2YWx1ZSB0byB0aGUgZGF0YSBzaW5rLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkVmFsdWVPck51bGxdLgogIHZvaWQgd3JpdGVWYWx1ZU9yTnVsbDxFPihFIHZhbHVlLCB2b2lkIGYoRSB2YWx1ZSkpOwoKICAvLy8gV3JpdGVzIHRoZSBbdmFsdWVzXSB0byB0aGlzIGRhdGEgc2luayBjYWxsaW5nIFtmXSB0byB3cml0ZSBlYWNoIHZhbHVlIHRvCiAgLy8vIHRoZSBkYXRhIHNpbmsuIElmIFthbGxvd051bGxdIGlzIGB0cnVlYCwgW3ZhbHVlc10gaXMgYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRMaXN0XS4KICB2b2lkIHdyaXRlTGlzdDxFPihJdGVyYWJsZTxFPiB2YWx1ZXMsIHZvaWQgZihFIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIHRoZSBib29sZWFuIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZUJvb2woYm9vbCB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgdGhlIG5vbi1uZWdhdGl2ZSAzMCBiaXQgaW50ZWdlciBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVJbnQoaW50IHZhbHVlKTsKCiAgLy8vIFdyaXRlcyB0aGUgcG90ZW50aWFsbHkgYG51bGxgIG5vbi1uZWdhdGl2ZSBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkSW50T3JOdWxsXS4KICB2b2lkIHdyaXRlSW50T3JOdWxsKGludCB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgdGhlIHN0cmluZyBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVTdHJpbmcoU3RyaW5nIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyB0aGUgcG90ZW50aWFsbHkgYG51bGxgIHN0cmluZyBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkU3RyaW5nT3JOdWxsXS4KICB2b2lkIHdyaXRlU3RyaW5nT3JOdWxsKFN0cmluZyB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgdGhlIHN0cmluZyBbdmFsdWVzXSB0byB0aGlzIGRhdGEgc2luay4gSWYgW2FsbG93TnVsbF0gaXMgYHRydWVgLAogIC8vLyBbdmFsdWVzXSBpcyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZFN0cmluZ3NdLgogIHZvaWQgd3JpdGVTdHJpbmdzKEl0ZXJhYmxlPFN0cmluZz4gdmFsdWVzLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgdGhlIFttYXBdIGZyb20gc3RyaW5nIHRvIFtWXSB2YWx1ZXMgdG8gdGhpcyBkYXRhIHNpbmssIGNhbGxpbmcgW2ZdCiAgLy8vIHRvIHdyaXRlIGVhY2ggdmFsdWUgdG8gdGhlIGRhdGEgc2luay4gSWYgW2FsbG93TnVsbF0gaXMgYHRydWVgLCBbbWFwXSBpcwogIC8vLyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZFN0cmluZ01hcF0uCiAgdm9pZCB3cml0ZVN0cmluZ01hcDxWPihNYXA8U3RyaW5nLCBWPiBtYXAsIHZvaWQgZihWIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIHRoZSBlbnVtIHZhbHVlIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2hhbmdlIHRoZSBzaWduYXR1cmUgdG8KICAvLyBgdm9pZCB3cml0ZUVudW08RSBleHRlbmRzIEVudW08RT4+KEUgdmFsdWUpO2Agd2hlbiBhbiBpbnRlcmZhY2UgZm9yIGVudW1zCiAgLy8gaXMgYWRkZWQgdG8gdGhlIGxhbmd1YWdlLgogIHZvaWQgd3JpdGVFbnVtKGR5bmFtaWMgdmFsdWUpOwoKICAvLy8gV3JpdGVzIHRoZSBVUkkgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICB2b2lkIHdyaXRlVXJpKFVyaSB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGtlcm5lbCBsaWJyYXJ5IG5vZGUgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICB2b2lkIHdyaXRlTGlicmFyeU5vZGUoaXIuTGlicmFyeSB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGtlcm5lbCBjbGFzcyBub2RlIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZUNsYXNzTm9kZShpci5DbGFzcyB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGtlcm5lbCB0eXBlZGVmIG5vZGUgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICB2b2lkIHdyaXRlVHlwZWRlZk5vZGUoaXIuVHlwZWRlZiB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGtlcm5lbCBtZW1iZXIgbm9kZSBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVNZW1iZXJOb2RlKGlyLk1lbWJlciB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgcmVmZXJlbmNlcyB0byB0aGUga2VybmVsIG1lbWJlciBub2RlIFt2YWx1ZXNdIHRvIHRoaXMgZGF0YSBzaW5rLgogIC8vLyBJZiBbYWxsb3dOdWxsXSBpcyBgdHJ1ZWAsIFt2YWx1ZXNdIGlzIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkTWVtYmVyTm9kZXNdLgogIHZvaWQgd3JpdGVNZW1iZXJOb2RlcyhJdGVyYWJsZTxpci5NZW1iZXI+IHZhbHVlcywge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIHRoZSBbbWFwXSBmcm9tIHJlZmVyZW5jZXMgdG8ga2VybmVsIG1lbWJlciBub2RlcyB0byBbVl0gdmFsdWVzIHRvCiAgLy8vIHRoaXMgZGF0YSBzaW5rLCBjYWxsaW5nIFtmXSB0byB3cml0ZSBlYWNoIHZhbHVlIHRvIHRoZSBkYXRhIHNpbmsuIElmCiAgLy8vIFthbGxvd051bGxdIGlzIGB0cnVlYCwgW21hcF0gaXMgYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRNZW1iZXJOb2RlTWFwXS4KICB2b2lkIHdyaXRlTWVtYmVyTm9kZU1hcDxWPihNYXA8aXIuTWVtYmVyLCBWPiBtYXAsIHZvaWQgZihWIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIGEga2VybmVsIG5hbWUgbm9kZSB0byB0aGlzIGRhdGEgc2luay4KICB2b2lkIHdyaXRlTmFtZShpci5OYW1lIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyBhIGtlcm5lbCBsaWJyYXJ5IGRlcGVuZGVuY3kgbm9kZSBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVMaWJyYXJ5RGVwZW5kZW5jeU5vZGUoaXIuTGlicmFyeURlcGVuZGVuY3kgdmFsdWUpOwoKICAvLy8gV3JpdGVzIGEgcG90ZW50aWFsbHkgYG51bGxgIGtlcm5lbCBsaWJyYXJ5IGRlcGVuZGVuY3kgbm9kZSBbdmFsdWVdIHRvCiAgLy8vIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVMaWJyYXJ5RGVwZW5kZW5jeU5vZGVPck51bGwoaXIuTGlicmFyeURlcGVuZGVuY3kgdmFsdWUpOwoKICAvLy8gV3JpdGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBrZXJuZWwgdHJlZSBub2RlIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZVRyZWVOb2RlKGlyLlRyZWVOb2RlIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyBhIHJlZmVyZW5jZSB0byB0aGUgcG90ZW50aWFsbHkgYG51bGxgIGtlcm5lbCB0cmVlIG5vZGUgW3ZhbHVlXQogIC8vLyB0byB0aGlzIGRhdGEgc2luay4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZFRyZWVOb2RlT3JOdWxsXS4KICB2b2lkIHdyaXRlVHJlZU5vZGVPck51bGwoaXIuVHJlZU5vZGUgdmFsdWUpOwoKICAvLy8gV3JpdGVzIHJlZmVyZW5jZXMgdG8gdGhlIGtlcm5lbCB0cmVlIG5vZGUgW3ZhbHVlc10gdG8gdGhpcyBkYXRhIHNpbmsuCiAgLy8vIElmIFthbGxvd051bGxdIGlzIGB0cnVlYCwgW3ZhbHVlc10gaXMgYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRUcmVlTm9kZXNdLgogIHZvaWQgd3JpdGVUcmVlTm9kZXMoSXRlcmFibGU8aXIuVHJlZU5vZGU+IHZhbHVlcywge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIHRoZSBbbWFwXSBmcm9tIHJlZmVyZW5jZXMgdG8ga2VybmVsIHRyZWUgbm9kZXMgdG8gW1ZdIHZhbHVlcyB0bwogIC8vLyB0aGlzIGRhdGEgc2luaywgY2FsbGluZyBbZl0gdG8gd3JpdGUgZWFjaCB2YWx1ZSB0byB0aGUgZGF0YSBzaW5rLiBJZgogIC8vLyBbYWxsb3dOdWxsXSBpcyBgdHJ1ZWAsIFttYXBdIGlzIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkVHJlZU5vZGVNYXBdLgogIHZvaWQgd3JpdGVUcmVlTm9kZU1hcDxWPihNYXA8aXIuVHJlZU5vZGUsIFY+IG1hcCwgdm9pZCBmKFYgdmFsdWUpLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGtlcm5lbCB0cmVlIG5vZGUgW3ZhbHVlXSBpbiB0aGUga25vd24gW2NvbnRleHRdCiAgLy8vIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVUcmVlTm9kZUluQ29udGV4dChpci5UcmVlTm9kZSB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgYSByZWZlcmVuY2UgdG8gdGhlIHBvdGVudGlhbGx5IGBudWxsYCBrZXJuZWwgdHJlZSBub2RlIFt2YWx1ZV0gaW4KICAvLy8gdGhlIGtub3duIFtjb250ZXh0XSB0byB0aGlzIGRhdGEgc2luay4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZFRyZWVOb2RlT3JOdWxsSW5Db250ZXh0XS4KICB2b2lkIHdyaXRlVHJlZU5vZGVPck51bGxJbkNvbnRleHQoaXIuVHJlZU5vZGUgdmFsdWUpOwoKICAvLy8gV3JpdGVzIHJlZmVyZW5jZXMgdG8gdGhlIGtlcm5lbCB0cmVlIG5vZGUgW3ZhbHVlc10gaW4gdGhlIGtub3duIFtjb250ZXh0XQogIC8vLyB0byB0aGlzIGRhdGEgc2luay4gSWYgW2FsbG93TnVsbF0gaXMgYHRydWVgLCBbdmFsdWVzXSBpcyBhbGxvd2VkIHRvIGJlCiAgLy8vIGBudWxsYC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZFRyZWVOb2Rlc0luQ29udGV4dF0uCiAgdm9pZCB3cml0ZVRyZWVOb2Rlc0luQ29udGV4dChJdGVyYWJsZTxpci5UcmVlTm9kZT4gdmFsdWVzLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgdGhlIFttYXBdIGZyb20gcmVmZXJlbmNlcyB0byBrZXJuZWwgdHJlZSBub2RlcyB0byBbVl0gdmFsdWVzIGluIHRoZQogIC8vLyBrbm93biBbY29udGV4dF0gdG8gdGhpcyBkYXRhIHNpbmssIGNhbGxpbmcgW2ZdIHRvIHdyaXRlIGVhY2ggdmFsdWUgdG8gdGhlCiAgLy8vIGRhdGEgc2luay4gSWYgW2FsbG93TnVsbF0gaXMgYHRydWVgLCBbbWFwXSBpcyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZFRyZWVOb2RlTWFwSW5Db250ZXh0XS4KICB2b2lkIHdyaXRlVHJlZU5vZGVNYXBJbkNvbnRleHQ8Vj4oTWFwPGlyLlRyZWVOb2RlLCBWPiBtYXAsIHZvaWQgZihWIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBrZXJuZWwgdHlwZSBwYXJhbWV0ZXIgbm9kZSBbdmFsdWVdIHRvIHRoaXMgZGF0YQogIC8vLyBzaW5rLgogIHZvaWQgd3JpdGVUeXBlUGFyYW1ldGVyTm9kZShpci5UeXBlUGFyYW1ldGVyIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyByZWZlcmVuY2VzIHRvIHRoZSBrZXJuZWwgdHlwZSBwYXJhbWV0ZXIgbm9kZSBbdmFsdWVzXSB0byB0aGlzIGRhdGEKICAvLy8gc2luay4KICAvLy8gSWYgW2FsbG93TnVsbF0gaXMgYHRydWVgLCBbdmFsdWVzXSBpcyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZFR5cGVQYXJhbWV0ZXJOb2Rlc10uCiAgdm9pZCB3cml0ZVR5cGVQYXJhbWV0ZXJOb2RlcyhJdGVyYWJsZTxpci5UeXBlUGFyYW1ldGVyPiB2YWx1ZXMsCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyB0aGUgdHlwZSBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLiBJZiBbYWxsb3dOdWxsXSBpcyBgdHJ1ZWAsCiAgLy8vIFt2YWx1ZV0gaXMgYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgdm9pZCB3cml0ZURhcnRUeXBlKERhcnRUeXBlIHZhbHVlLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgdGhlIHR5cGUgW3ZhbHVlc10gdG8gdGhpcyBkYXRhIHNpbmsuIElmIFthbGxvd051bGxdIGlzIGB0cnVlYCwKICAvLy8gW3ZhbHVlc10gaXMgYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWREYXJ0VHlwZXNdLgogIHZvaWQgd3JpdGVEYXJ0VHlwZXMoSXRlcmFibGU8RGFydFR5cGU+IHZhbHVlcywge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIHRoZSBrZXJuZWwgdHlwZSBub2RlIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuIElmIFthbGxvd051bGxdIGlzCiAgLy8vIGB0cnVlYCwgW3ZhbHVlXSBpcyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICB2b2lkIHdyaXRlRGFydFR5cGVOb2RlKGlyLkRhcnRUeXBlIHZhbHVlLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgdGhlIGtlcm5lbCB0eXBlIG5vZGUgW3ZhbHVlc10gdG8gdGhpcyBkYXRhIHNpbmsuIElmIFthbGxvd051bGxdIGlzCiAgLy8vIGB0cnVlYCwgW3ZhbHVlc10gaXMgYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWREYXJ0VHlwZU5vZGVzXS4KICB2b2lkIHdyaXRlRGFydFR5cGVOb2RlcyhJdGVyYWJsZTxpci5EYXJ0VHlwZT4gdmFsdWVzLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgdGhlIHNvdXJjZSBzcGFuIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZVNvdXJjZVNwYW4oU291cmNlU3BhbiB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGluZGV4ZWQgbGlicmFyeSBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVMaWJyYXJ5KEluZGV4ZWRMaWJyYXJ5IHZhbHVlKTsKCiAgLy8vIFdyaXRlcyBhIHJlZmVyZW5jZSB0byB0aGUgcG90ZW50aWFsbHkgYG51bGxgIGluZGV4ZWQgbGlicmFyeSBbdmFsdWVdCiAgLy8vIHRvIHRoaXMgZGF0YSBzaW5rLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkTGlicmFyeU9yTnVsbF0uCiAgdm9pZCB3cml0ZUxpYnJhcnlPck51bGwoSW5kZXhlZExpYnJhcnkgdmFsdWUpOwoKICAvLy8gV3JpdGVzIHRoZSBbbWFwXSBmcm9tIHJlZmVyZW5jZXMgdG8gaW5kZXhlZCBsaWJyYXJpZXMgdG8gW1ZdIHZhbHVlcyB0bwogIC8vLyB0aGlzIGRhdGEgc2luaywgY2FsbGluZyBbZl0gdG8gd3JpdGUgZWFjaCB2YWx1ZSB0byB0aGUgZGF0YSBzaW5rLiBJZgogIC8vLyBbYWxsb3dOdWxsXSBpcyBgdHJ1ZWAsIFttYXBdIGlzIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkTGlicmFyeU1hcF0uCiAgdm9pZCB3cml0ZUxpYnJhcnlNYXA8Vj4oTWFwPExpYnJhcnlFbnRpdHksIFY+IG1hcCwgdm9pZCBmKFYgdmFsdWUpLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGluZGV4ZWQgY2xhc3MgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICB2b2lkIHdyaXRlQ2xhc3MoSW5kZXhlZENsYXNzIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyBhIHJlZmVyZW5jZSB0byB0aGUgcG90ZW50aWFsbHkgYG51bGxgIGluZGV4ZWQgY2xhc3MgW3ZhbHVlXQogIC8vLyB0byB0aGlzIGRhdGEgc2luay4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZENsYXNzT3JOdWxsXS4KICB2b2lkIHdyaXRlQ2xhc3NPck51bGwoSW5kZXhlZENsYXNzIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyByZWZlcmVuY2VzIHRvIHRoZSBpbmRleGVkIGNsYXNzIFt2YWx1ZXNdIHRvIHRoaXMgZGF0YSBzaW5rLiBJZgogIC8vLyBbYWxsb3dOdWxsXSBpcyBgdHJ1ZWAsIFt2YWx1ZXNdIGlzIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkQ2xhc3Nlc10uCiAgdm9pZCB3cml0ZUNsYXNzZXMoSXRlcmFibGU8Q2xhc3NFbnRpdHk+IHZhbHVlcywge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIHRoZSBbbWFwXSBmcm9tIHJlZmVyZW5jZXMgdG8gaW5kZXhlZCBjbGFzc2VzIHRvIFtWXSB2YWx1ZXMgdG8gdGhpcwogIC8vLyBkYXRhIHNpbmssIGNhbGxpbmcgW2ZdIHRvIHdyaXRlIGVhY2ggdmFsdWUgdG8gdGhlIGRhdGEgc2luay4gSWYKICAvLy8gW2FsbG93TnVsbF0gaXMgYHRydWVgLCBbbWFwXSBpcyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZENsYXNzTWFwXS4KICB2b2lkIHdyaXRlQ2xhc3NNYXA8Vj4oTWFwPENsYXNzRW50aXR5LCBWPiBtYXAsIHZvaWQgZihWIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBpbmRleGVkIHR5cGVkZWYgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICB2b2lkIHdyaXRlVHlwZWRlZihJbmRleGVkVHlwZWRlZiB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGluZGV4ZWQgbWVtYmVyIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZU1lbWJlcihJbmRleGVkTWVtYmVyIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyBhIHJlZmVyZW5jZSB0byB0aGUgcG90ZW50aWFsbHkgYG51bGxgIGluZGV4ZWQgbWVtYmVyIFt2YWx1ZV0KICAvLy8gdG8gdGhpcyBkYXRhIHNpbmsuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRNZW1iZXJPck51bGxdLgogIHZvaWQgd3JpdGVNZW1iZXJPck51bGwoSW5kZXhlZE1lbWJlciB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgcmVmZXJlbmNlcyB0byB0aGUgaW5kZXhlZCBtZW1iZXIgW3ZhbHVlc10gdG8gdGhpcyBkYXRhIHNpbmsuIElmCiAgLy8vIFthbGxvd051bGxdIGlzIGB0cnVlYCwgW3ZhbHVlc10gaXMgYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRNZW1iZXJzXS4KICB2b2lkIHdyaXRlTWVtYmVycyhJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IHZhbHVlcywge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIHRoZSBbbWFwXSBmcm9tIHJlZmVyZW5jZXMgdG8gaW5kZXhlZCBtZW1iZXJzIHRvIFtWXSB2YWx1ZXMgdG8gdGhpcwogIC8vLyBkYXRhIHNpbmssIGNhbGxpbmcgW2ZdIHRvIHdyaXRlIGVhY2ggdmFsdWUgdG8gdGhlIGRhdGEgc2luay4gSWYKICAvLy8gW2FsbG93TnVsbF0gaXMgYHRydWVgLCBbbWFwXSBpcyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZE1lbWJlck1hcF0uCiAgdm9pZCB3cml0ZU1lbWJlck1hcDxWPigKICAgICAgTWFwPE1lbWJlckVudGl0eSwgVj4gbWFwLCB2b2lkIGYoTWVtYmVyRW50aXR5IG1lbWJlciwgViB2YWx1ZSksCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyBhIHJlZmVyZW5jZSB0byB0aGUgaW5kZXhlZCB0eXBlIHZhcmlhYmxlIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZVR5cGVWYXJpYWJsZShJbmRleGVkVHlwZVZhcmlhYmxlIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyBhIHJlZmVyZW5jZSB0byB0aGUgbG9jYWwgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICB2b2lkIHdyaXRlTG9jYWwoTG9jYWwgbG9jYWwpOwoKICAvLy8gV3JpdGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBwb3RlbnRpYWxseSBgbnVsbGAgbG9jYWwgW3ZhbHVlXQogIC8vLyB0byB0aGlzIGRhdGEgc2luay4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZExvY2FsT3JOdWxsXS4KICB2b2lkIHdyaXRlTG9jYWxPck51bGwoTG9jYWwgbG9jYWwpOwoKICAvLy8gV3JpdGVzIHJlZmVyZW5jZXMgdG8gdGhlIGxvY2FsIFt2YWx1ZXNdIHRvIHRoaXMgZGF0YSBzaW5rLiBJZiBbYWxsb3dOdWxsXQogIC8vLyBpcyBgdHJ1ZWAsIFt2YWx1ZXNdIGlzIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkTG9jYWxzXS4KICB2b2lkIHdyaXRlTG9jYWxzKEl0ZXJhYmxlPExvY2FsPiB2YWx1ZXMsIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyB0aGUgW21hcF0gZnJvbSByZWZlcmVuY2VzIHRvIGxvY2FscyB0byBbVl0gdmFsdWVzIHRvIHRoaXMgZGF0YQogIC8vLyBzaW5rLCBjYWxsaW5nIFtmXSB0byB3cml0ZSBlYWNoIHZhbHVlIHRvIHRoZSBkYXRhIHNpbmsuIElmIFthbGxvd051bGxdIGlzCiAgLy8vIGB0cnVlYCwgW21hcF0gaXMgYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRMb2NhbE1hcF0uCiAgdm9pZCB3cml0ZUxvY2FsTWFwPFY+KE1hcDxMb2NhbCwgVj4gbWFwLCB2b2lkIGYoViB2YWx1ZSksCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyB0aGUgY29uc3RhbnQgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICB2b2lkIHdyaXRlQ29uc3RhbnQoQ29uc3RhbnRWYWx1ZSB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgdGhlIHBvdGVudGlhbGx5IGBudWxsYCBjb25zdGFudCBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVDb25zdGFudE9yTnVsbChDb25zdGFudFZhbHVlIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyBjb25zdGFudCBbdmFsdWVzXSB0byB0aGlzIGRhdGEgc2luay4gSWYgW2FsbG93TnVsbF0gaXMgYHRydWVgLAogIC8vLyBbdmFsdWVzXSBpcyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZENvbnN0YW50c10uCiAgdm9pZCB3cml0ZUNvbnN0YW50cyhJdGVyYWJsZTxDb25zdGFudFZhbHVlPiB2YWx1ZXMsIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyB0aGUgW21hcF0gZnJvbSBjb25zdGFudCB2YWx1ZXMgdG8gW1ZdIHZhbHVlcyB0byB0aGlzIGRhdGEgc2luaywKICAvLy8gY2FsbGluZyBbZl0gdG8gd3JpdGUgZWFjaCB2YWx1ZSB0byB0aGUgZGF0YSBzaW5rLiBJZiBbYWxsb3dOdWxsXSBpcwogIC8vLyBgdHJ1ZWAsIFttYXBdIGlzIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkQ29uc3RhbnRNYXBdLgogIHZvaWQgd3JpdGVDb25zdGFudE1hcDxWPihNYXA8Q29uc3RhbnRWYWx1ZSwgVj4gbWFwLCB2b2lkIGYoViB2YWx1ZSksCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyBhIGRvdWJsZSB2YWx1ZSB0byB0aGlzIGRhdGEgc2luay4KICB2b2lkIHdyaXRlRG91YmxlVmFsdWUoZG91YmxlIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyBhbiBpbnRlZ2VyIG9mIGFyYml0cmFyeSB2YWx1ZSB0byB0aGlzIGRhdGEgc2luay4KICAvLy8KICAvLy8gVGhpcyBpcyBzaG91bGQgb25seSB3aGVuIHRoZSB2YWx1ZSBpcyBub3Qga25vd24gdG8gYmUgYSBub24tbmVnYXRpdmUKICAvLy8gMzAgYml0IGludGVnZXIuIE90aGVyd2lzZSBbd3JpdGVJbnRdIHNob3VsZCBiZSB1c2VkLgogIHZvaWQgd3JpdGVJbnRlZ2VyVmFsdWUoaW50IHZhbHVlKTsKCiAgLy8vIFdyaXRlcyB0aGUgaW1wb3J0IFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZUltcG9ydChJbXBvcnRFbnRpdHkgdmFsdWUpOwoKICAvLy8gV3JpdGVzIHRoZSBwb3RlbnRpYWxseSBgbnVsbGAgaW1wb3J0IFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZUltcG9ydE9yTnVsbChJbXBvcnRFbnRpdHkgdmFsdWUpOwoKICAvLy8gV3JpdGVzIGltcG9ydCBbdmFsdWVzXSB0byB0aGlzIGRhdGEgc2luay4gSWYgW2FsbG93TnVsbF0gaXMgYHRydWVgLAogIC8vLyBbdmFsdWVzXSBpcyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZEltcG9ydHNdLgogIHZvaWQgd3JpdGVJbXBvcnRzKEl0ZXJhYmxlPEltcG9ydEVudGl0eT4gdmFsdWVzLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgdGhlIFttYXBdIGZyb20gaW1wb3J0cyB0byBbVl0gdmFsdWVzIHRvIHRoaXMgZGF0YSBzaW5rLAogIC8vLyBjYWxsaW5nIFtmXSB0byB3cml0ZSBlYWNoIHZhbHVlIHRvIHRoZSBkYXRhIHNpbmsuIElmIFthbGxvd051bGxdIGlzCiAgLy8vIGB0cnVlYCwgW21hcF0gaXMgYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRJbXBvcnRNYXBdLgogIHZvaWQgd3JpdGVJbXBvcnRNYXA8Vj4oTWFwPEltcG9ydEVudGl0eSwgVj4gbWFwLCB2b2lkIGYoViB2YWx1ZSksCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyBhbiBhYnN0cmFjdCBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIC8vLwogIC8vLyBUaGlzIGZlYXR1cmUgaXMgb25seSBhdmFpbGFibGUgYSBbQ29kZWdlbldyaXRlcl0gaGFzIGJlZW4gcmVnaXN0ZXJlZC4KICB2b2lkIHdyaXRlQWJzdHJhY3RWYWx1ZShBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyBhIHJlZmVyZW5jZSB0byB0aGUgb3V0cHV0IHVuaXQgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICAvLy8KICAvLy8gVGhpcyBmZWF0dXJlIGlzIG9ubHkgYXZhaWxhYmxlIGEgW0NvZGVnZW5Xcml0ZXJdIGhhcyBiZWVuIHJlZ2lzdGVyZWQuCiAgdm9pZCB3cml0ZU91dHB1dFVuaXRSZWZlcmVuY2UoT3V0cHV0VW5pdCB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgYSBqcyBub2RlIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgLy8vCiAgLy8vIFRoaXMgZmVhdHVyZSBpcyBvbmx5IGF2YWlsYWJsZSBhIFtDb2RlZ2VuV3JpdGVyXSBoYXMgYmVlbiByZWdpc3RlcmVkLgogIHZvaWQgd3JpdGVKc05vZGUoanMuTm9kZSB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgYSBwb3RlbnRpYWxseSBgbnVsbGAganMgbm9kZSBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIC8vLwogIC8vLyBUaGlzIGZlYXR1cmUgaXMgb25seSBhdmFpbGFibGUgYSBbQ29kZWdlbldyaXRlcl0gaGFzIGJlZW4gcmVnaXN0ZXJlZC4KICB2b2lkIHdyaXRlSnNOb2RlT3JOdWxsKGpzLk5vZGUgdmFsdWUpOwoKICAvLy8gUmVnaXN0ZXIgYW4gW0VudGl0eVdyaXRlcl0gd2l0aCB0aGlzIGRhdGEgc2luayBmb3Igbm9uLWRlZmF1bHQgZW5jb2RpbmcKICAvLy8gb2YgZW50aXR5IHJlZmVyZW5jZXMuCiAgdm9pZCByZWdpc3RlckVudGl0eVdyaXRlcihFbnRpdHlXcml0ZXIgd3JpdGVyKTsKCiAgLy8vIFJlZ2lzdGVyIGEgW0NvZGVnZW5Xcml0ZXJdIHdpdGggdGhpcyBkYXRhIHNpbmsgdG8gc3VwcG9ydCBzZXJpYWxpemF0aW9uCiAgLy8vIG9mIGNvZGVnZW4gb25seSBkYXRhLgogIHZvaWQgcmVnaXN0ZXJDb2RlZ2VuV3JpdGVyKENvZGVnZW5Xcml0ZXIgd3JpdGVyKTsKCiAgLy8vIEludm9rZSBbZl0gaW4gdGhlIGNvbnRleHQgb2YgW21lbWJlcl0uIFRoaXMgc2V0cyB1cCBzdXBwb3J0IGZvcgogIC8vLyBzZXJpYWxpemF0aW9uIG9mIGBpci5UcmVlTm9kZWBzIHVzaW5nIHRoZSBgd3JpdGVUcmVlTm9kZSpJbkNvbnRleHRgCiAgLy8vIG1ldGhvZHMuCiAgdm9pZCBpbk1lbWJlckNvbnRleHQoaXIuTWVtYmVyIG1lbWJlciwgdm9pZCBmKCkpOwp9CgovLy8gSW50ZXJmYWNlIGZvciBkZXNlcmlhbGl6YXRpb24uCmFic3RyYWN0IGNsYXNzIERhdGFTb3VyY2UgewogIC8vLyBSZWdpc3RlcnMgdGhhdCB0aGUgc2VjdGlvbiBbdGFnXSBzdGFydHMuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCBmb3IgZGVidWdnaW5nIHRvIHZlcmlmeSB0aGF0IHNlY3Rpb25zIGFyZSBjb3JyZWN0bHkgYWxpZ25lZAogIC8vLyBiZXR3ZWVuIHNlcmlhbGl6YXRpb24gYW5kIGRlc2VyaWFsaXphdGlvbi4KICB2b2lkIGJlZ2luKFN0cmluZyB0YWcpOwoKICAvLy8gUmVnaXN0ZXJzIHRoYXQgdGhlIHNlY3Rpb24gW3RhZ10gZW5kcy4KICAvLy8KICAvLy8gVGhpcyBpcyB1c2VkIGZvciBkZWJ1Z2dpbmcgdG8gdmVyaWZ5IHRoYXQgc2VjdGlvbnMgYXJlIGNvcnJlY3RseSBhbGlnbmVkCiAgLy8vIGJldHdlZW4gc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uLgogIHZvaWQgZW5kKFN0cmluZyB0YWcpOwoKICAvLy8gUmVnaXN0ZXJzIGEgW0NvbXBvbmVudExvb2t1cF0gb2JqZWN0IHdpdGggdGhpcyBkYXRhIHNvdXJjZSB0byBzdXBwb3J0CiAgLy8vIGRlc2VyaWFsaXphdGlvbiBvZiByZWZlcmVuY2VzIHRvIGtlcm5lbCBub2Rlcy4KICB2b2lkIHJlZ2lzdGVyQ29tcG9uZW50TG9va3VwKENvbXBvbmVudExvb2t1cCBjb21wb25lbnRMb29rdXApOwoKICAvLy8gUmVnaXN0ZXJzIGFuIFtFbnRpdHlMb29rdXBdIG9iamVjdCB3aXRoIHRoaXMgZGF0YSBzb3VyY2UgdG8gc3VwcG9ydAogIC8vLyBkZXNlcmlhbGl6YXRpb24gb2YgcmVmZXJlbmNlcyB0byBpbmRleGVkIGVudGl0aWVzLgogIHZvaWQgcmVnaXN0ZXJFbnRpdHlMb29rdXAoRW50aXR5TG9va3VwIGVudGl0eUxvb2t1cCk7CgogIC8vLyBSZWdpc3RlcnMgYW4gW0VudGl0eVJlYWRlcl0gd2l0aCB0aGlzIGRhdGEgc291cmNlIGZvciBub24tZGVmYXVsdCBlbmNvZGluZwogIC8vLyBvZiBlbnRpdHkgcmVmZXJlbmNlcy4KICB2b2lkIHJlZ2lzdGVyRW50aXR5UmVhZGVyKEVudGl0eVJlYWRlciByZWFkZXIpOwoKICAvLy8gUmVnaXN0ZXJzIGEgW0xvY2FsTG9va3VwXSBvYmplY3Qgd2l0aCB0aGlzIGRhdGEgc291cmNlIHRvIHN1cHBvcnQKICAvLy8gZGVzZXJpYWxpemF0aW9uIG9mIHJlZmVyZW5jZXMgdG8gbG9jYWxzLgogIHZvaWQgcmVnaXN0ZXJMb2NhbExvb2t1cChMb2NhbExvb2t1cCBsb2NhbExvb2t1cCk7CgogIC8vLyBSZWdpc3RlcnMgYSBbQ29kZWdlblJlYWRlcl0gd2l0aCB0aGlzIGRhdGEgc291cmNlIHRvIHN1cHBvcnQKICAvLy8gZGVzZXJpYWxpemF0aW9uIG9mIGNvZGVnZW4gb25seSBkYXRhLgogIHZvaWQgcmVnaXN0ZXJDb2RlZ2VuUmVhZGVyKENvZGVnZW5SZWFkZXIgcmVhZGVyKTsKCiAgLy8vIFVucmVnaXN0ZXJzIHRoZSBbQ29kZWdlblJlYWRlcl0gZnJvbSB0aGlzIGRhdGEgc291cmNlIHRvIHJlbW92ZSBzdXBwb3J0CiAgLy8vIGZvciBkZXNlcmlhbGl6YXRpb24gb2YgY29kZWdlbiBvbmx5IGRhdGEuCiAgdm9pZCBkZXJlZ2lzdGVyQ29kZWdlblJlYWRlcihDb2RlZ2VuUmVhZGVyIHJlYWRlcik7CgogIC8vLyBJbnZva2UgW2ZdIGluIHRoZSBjb250ZXh0IG9mIFttZW1iZXJdLiBUaGlzIHNldHMgdXAgc3VwcG9ydCBmb3IKICAvLy8gZGVzZXJpYWxpemF0aW9uIG9mIGBpci5UcmVlTm9kZWBzIHVzaW5nIHRoZSBgcmVhZFRyZWVOb2RlKkluQ29udGV4dGAKICAvLy8gbWV0aG9kcy4KICBUIGluTWVtYmVyQ29udGV4dDxUPihpci5NZW1iZXIgbWVtYmVyLCBUIGYoKSk7CgogIC8vLyBSZWFkcyBhIHJlZmVyZW5jZSB0byBhbiBbRV0gdmFsdWUgZnJvbSB0aGlzIGRhdGEgc291cmNlLiBJZiB0aGUgdmFsdWUgaGFzCiAgLy8vIG5vdCB5ZXQgYmVlbiBkZXNlcmlhbGl6ZWQsIFtmXSBpcyBjYWxsZWQgdG8gZGVzZXJpYWxpemUgdGhlIHZhbHVlIGl0c2VsZi4KICBFIHJlYWRDYWNoZWQ8RT4oRSBmKCkpOwoKICAvLy8gUmVhZHMgYSBwb3RlbnRpYWxseSBgbnVsbGAgW0VdIHZhbHVlIGZyb20gdGhpcyBkYXRhIHNvdXJjZSwgY2FsbGluZyBbZl0gdG8KICAvLy8gcmVhZCB0aGUgbm9uLW51bGwgdmFsdWUgZnJvbSB0aGUgZGF0YSBzb3VyY2UuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZVZhbHVlT3JOdWxsXS4KICBFIHJlYWRWYWx1ZU9yTnVsbDxFPihFIGYoKSk7CgogIC8vLyBSZWFkcyBhIGxpc3Qgb2YgW0VdIHZhbHVlcyBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuIElmIFtlbXB0eUFzTnVsbF0gaXMKICAvLy8gYHRydWVgLCBgbnVsbGAgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBlbXB0eSBsaXN0LgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVMaXN0XS4KICBMaXN0PEU+IHJlYWRMaXN0PEU+KEUgZigpLCB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KTsKCiAgLy8vIFJlYWRzIGEgYm9vbGVhbiB2YWx1ZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgYm9vbCByZWFkQm9vbCgpOwoKICAvLy8gUmVhZHMgYSBub24tbmVnYXRpdmUgMzAgYml0IGludGVnZXIgdmFsdWUgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIGludCByZWFkSW50KCk7CgogIC8vLyBSZWFkcyBhIHBvdGVudGlhbGx5IGBudWxsYCBub24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSBmcm9tIHRoaXMgZGF0YQogIC8vLyBzb3VyY2UuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZUludE9yTnVsbF0uCiAgaW50IHJlYWRJbnRPck51bGwoKTsKCiAgLy8vIFJlYWRzIGEgc3RyaW5nIHZhbHVlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBTdHJpbmcgcmVhZFN0cmluZygpOwoKICAvLy8gUmVhZHMgYSBwb3RlbnRpYWxseSBgbnVsbGAgc3RyaW5nIHZhbHVlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlU3RyaW5nT3JOdWxsXS4KICBTdHJpbmcgcmVhZFN0cmluZ09yTnVsbCgpOwoKICAvLy8gUmVhZHMgYSBsaXN0IG9mIHN0cmluZyB2YWx1ZXMgZnJvbSB0aGlzIGRhdGEgc291cmNlLiBJZiBbZW1wdHlBc051bGxdIGlzCiAgLy8vIGB0cnVlYCwgYG51bGxgIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gZW1wdHkgbGlzdC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlU3RyaW5nc10uCiAgTGlzdDxTdHJpbmc+IHJlYWRTdHJpbmdzKHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYSBtYXAgZnJvbSBzdHJpbmcgdmFsdWVzIHRvIFtWXSB2YWx1ZXMgZnJvbSB0aGlzIGRhdGEgc291cmNlLAogIC8vLyBjYWxsaW5nIFtmXSB0byByZWFkIGVhY2ggdmFsdWUgZnJvbSB0aGUgZGF0YSBzb3VyY2UuIElmIFtlbXB0eUFzTnVsbF0gaXMKICAvLy8gYHRydWVgLCBgbnVsbGAgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBlbXB0eSBtYXAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZVN0cmluZ01hcF0uCiAgTWFwPFN0cmluZywgVj4gcmVhZFN0cmluZ01hcDxWPihWIGYoKSwge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhbiBlbnVtIHZhbHVlIGZyb20gdGhlIGxpc3Qgb2YgZW51bSBbdmFsdWVzXSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgLy8vCiAgLy8vIFRoZSBbdmFsdWVzXSBhcmd1bWVudCBpcyBpbnRlbmRlZCB0byBiZSB0aGUgc3RhdGljIGAudmFsdWVzYCBmaWVsZCBvbgogIC8vLyBlbnVtIGNsYXNzZXMsIGZvciBpbnN0YW5jZToKICAvLy8KICAvLy8gICAgZW51bSBGb28geyBiYXIsIGJheiB9CiAgLy8vICAgIC4uLgogIC8vLyAgICBGb28gZm9vID0gc291cmNlLnJlYWRFbnVtKEZvby52YWx1ZXMpOwogIC8vLwogIEUgcmVhZEVudW08RT4oTGlzdDxFPiB2YWx1ZXMpOwoKICAvLy8gUmVhZHMgYSBVUkkgdmFsdWUgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIFVyaSByZWFkVXJpKCk7CgogIC8vLyBSZWFkcyBhIHJlZmVyZW5jZSB0byBhIGtlcm5lbCBsaWJyYXJ5IG5vZGUgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIGlyLkxpYnJhcnkgcmVhZExpYnJhcnlOb2RlKCk7CgogIC8vLyBSZWFkcyBhIHJlZmVyZW5jZSB0byBhIGtlcm5lbCBjbGFzcyBub2RlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBpci5DbGFzcyByZWFkQ2xhc3NOb2RlKCk7CgogIC8vLyBSZWFkcyBhIHJlZmVyZW5jZSB0byBhIGtlcm5lbCBjbGFzcyBub2RlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBpci5UeXBlZGVmIHJlYWRUeXBlZGVmTm9kZSgpOwoKICAvLy8gUmVhZHMgYSByZWZlcmVuY2UgdG8gYSBrZXJuZWwgbWVtYmVyIG5vZGUgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIGlyLk1lbWJlciByZWFkTWVtYmVyTm9kZSgpOwoKICAvLy8gUmVhZHMgYSBsaXN0IG9mIHJlZmVyZW5jZXMgdG8ga2VybmVsIG1lbWJlciBub2RlcyBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgLy8vIElmIFtlbXB0eUFzTnVsbF0gaXMgYHRydWVgLCBgbnVsbGAgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBlbXB0eSBsaXN0LgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVNZW1iZXJOb2Rlc10uCiAgTGlzdDxpci5NZW1iZXI+IHJlYWRNZW1iZXJOb2RlczxFIGV4dGVuZHMgaXIuTWVtYmVyPigKICAgICAge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhIG1hcCBmcm9tIGtlcm5lbCBtZW1iZXIgbm9kZXMgdG8gW1ZdIHZhbHVlcyBmcm9tIHRoaXMgZGF0YSBzb3VyY2UsCiAgLy8vIGNhbGxpbmcgW2ZdIHRvIHJlYWQgZWFjaCB2YWx1ZSBmcm9tIHRoZSBkYXRhIHNvdXJjZS4gSWYgW2VtcHR5QXNOdWxsXSBpcwogIC8vLyBgdHJ1ZWAsIGBudWxsYCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGVtcHR5IG1hcC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlTWVtYmVyTm9kZU1hcF0uCiAgTWFwPEssIFY+IHJlYWRNZW1iZXJOb2RlTWFwPEsgZXh0ZW5kcyBpci5NZW1iZXIsIFY+KFYgZigpLAogICAgICB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KTsKCiAgLy8vIFJlYWRzIGEga2VybmVsIG5hbWUgbm9kZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgaXIuTmFtZSByZWFkTmFtZSgpOwoKICAvLy8gUmVhZHMgYSBrZXJuZWwgbGlicmFyeSBkZXBlbmRlbmN5IG5vZGUgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIGlyLkxpYnJhcnlEZXBlbmRlbmN5IHJlYWRMaWJyYXJ5RGVwZW5kZW5jeU5vZGUoKTsKCiAgLy8vIFJlYWRzIGEgcG90ZW50aWFsbHkgYG51bGxgIGtlcm5lbCBsaWJyYXJ5IGRlcGVuZGVuY3kgbm9kZSBmcm9tIHRoaXMgZGF0YQogIC8vLyBzb3VyY2UuCiAgaXIuTGlicmFyeURlcGVuZGVuY3kgcmVhZExpYnJhcnlEZXBlbmRlbmN5Tm9kZU9yTnVsbCgpOwoKICAvLy8gUmVhZHMgYSByZWZlcmVuY2UgdG8gYSBrZXJuZWwgdHJlZSBub2RlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBpci5UcmVlTm9kZSByZWFkVHJlZU5vZGUoKTsKCiAgLy8vIFJlYWRzIGEgcmVmZXJlbmNlIHRvIGEgcG90ZW50aWFsbHkgYG51bGxgIGtlcm5lbCB0cmVlIG5vZGUgZnJvbSB0aGlzIGRhdGEKICAvLy8gc291cmNlLgogIGlyLlRyZWVOb2RlIHJlYWRUcmVlTm9kZU9yTnVsbCgpOwoKICAvLy8gUmVhZHMgYSBsaXN0IG9mIHJlZmVyZW5jZXMgdG8ga2VybmVsIHRyZWUgbm9kZXMgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIC8vLyBJZiBbZW1wdHlBc051bGxdIGlzIGB0cnVlYCwgYG51bGxgIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gZW1wdHkgbGlzdC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlVHJlZU5vZGVzXS4KICBMaXN0PEU+IHJlYWRUcmVlTm9kZXM8RSBleHRlbmRzIGlyLlRyZWVOb2RlPih7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KTsKCiAgLy8vIFJlYWRzIGEgbWFwIGZyb20ga2VybmVsIHRyZWUgbm9kZXMgdG8gW1ZdIHZhbHVlcyBmcm9tIHRoaXMgZGF0YSBzb3VyY2UsCiAgLy8vIGNhbGxpbmcgW2ZdIHRvIHJlYWQgZWFjaCB2YWx1ZSBmcm9tIHRoZSBkYXRhIHNvdXJjZS4gSWYgW2VtcHR5QXNOdWxsXSBpcwogIC8vLyBgdHJ1ZWAsIGBudWxsYCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGVtcHR5IG1hcC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlVHJlZU5vZGVNYXBdLgogIE1hcDxLLCBWPiByZWFkVHJlZU5vZGVNYXA8SyBleHRlbmRzIGlyLlRyZWVOb2RlLCBWPihWIGYoKSwKICAgICAge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhIHJlZmVyZW5jZSB0byBhIGtlcm5lbCB0cmVlIG5vZGUgaW4gdGhlIGtub3duIFtjb250ZXh0XSBmcm9tIHRoaXMKICAvLy8gZGF0YSBzb3VyY2UuCiAgaXIuVHJlZU5vZGUgcmVhZFRyZWVOb2RlSW5Db250ZXh0KCk7CgogIC8vLyBSZWFkcyBhIHJlZmVyZW5jZSB0byBhIHBvdGVudGlhbGx5IGBudWxsYCBrZXJuZWwgdHJlZSBub2RlIGluIHRoZSBrbm93bgogIC8vLyBbY29udGV4dF0gZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIGlyLlRyZWVOb2RlIHJlYWRUcmVlTm9kZU9yTnVsbEluQ29udGV4dCgpOwoKICAvLy8gUmVhZHMgYSBsaXN0IG9mIHJlZmVyZW5jZXMgdG8ga2VybmVsIHRyZWUgbm9kZXMgaW4gdGhlIGtub3duIFtjb250ZXh0XQogIC8vLyBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuIElmIFtlbXB0eUFzTnVsbF0gaXMgYHRydWVgLCBgbnVsbGAgaXMgcmV0dXJuZWQKICAvLy8gaW5zdGVhZCBvZiBhbiBlbXB0eSBsaXN0LgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVUcmVlTm9kZXNJbkNvbnRleHRdLgogIExpc3Q8RT4gcmVhZFRyZWVOb2Rlc0luQ29udGV4dDxFIGV4dGVuZHMgaXIuVHJlZU5vZGU+KAogICAgICB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KTsKCiAgLy8vIFJlYWRzIGEgbWFwIGZyb20ga2VybmVsIHRyZWUgbm9kZXMgdG8gW1ZdIHZhbHVlcyBpbiB0aGUga25vd24gW2NvbnRleHRdCiAgLy8vIGZyb20gdGhpcyBkYXRhIHNvdXJjZSwgY2FsbGluZyBbZl0gdG8gcmVhZCBlYWNoIHZhbHVlIGZyb20gdGhlIGRhdGEKICAvLy8gc291cmNlLiBJZiBbZW1wdHlBc051bGxdIGlzIGB0cnVlYCwgYG51bGxgIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gZW1wdHkKICAvLy8gbWFwLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVUcmVlTm9kZU1hcEluQ29udGV4dF0uCiAgTWFwPEssIFY+IHJlYWRUcmVlTm9kZU1hcEluQ29udGV4dDxLIGV4dGVuZHMgaXIuVHJlZU5vZGUsIFY+KFYgZigpLAogICAgICB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KTsKCiAgLy8vIFJlYWRzIGEgcmVmZXJlbmNlIHRvIGEga2VybmVsIHR5cGUgcGFyYW1ldGVyIG5vZGUgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIGlyLlR5cGVQYXJhbWV0ZXIgcmVhZFR5cGVQYXJhbWV0ZXJOb2RlKCk7CgogIC8vLyBSZWFkcyBhIGxpc3Qgb2YgcmVmZXJlbmNlcyB0byBrZXJuZWwgdHlwZSBwYXJhbWV0ZXIgbm9kZXMgZnJvbSB0aGlzIGRhdGEKICAvLy8gc291cmNlLiBJZiBbZW1wdHlBc051bGxdIGlzIGB0cnVlYCwgYG51bGxgIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gZW1wdHkKICAvLy8gbGlzdC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlVHlwZVBhcmFtZXRlck5vZGVzXS4KICBMaXN0PGlyLlR5cGVQYXJhbWV0ZXI+IHJlYWRUeXBlUGFyYW1ldGVyTm9kZXMoe2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhIHR5cGUgZnJvbSB0aGlzIGRhdGEgc291cmNlLiBJZiBbYWxsb3dOdWxsXSwgdGhlIHJldHVybmVkIHR5cGUgaXMKICAvLy8gYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgRGFydFR5cGUgcmVhZERhcnRUeXBlKHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFJlYWRzIGEgbGlzdCBvZiB0eXBlcyBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuIElmIFtlbXB0eUFzTnVsbF0gaXMgYHRydWVgLAogIC8vLyBgbnVsbGAgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBlbXB0eSBsaXN0LgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVEYXJ0VHlwZXNdLgogIExpc3Q8RGFydFR5cGU+IHJlYWREYXJ0VHlwZXMoe2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhIGtlcm5lbCB0eXBlIG5vZGUgZnJvbSB0aGlzIGRhdGEgc291cmNlLiBJZiBbYWxsb3dOdWxsXSwgdGhlCiAgLy8vIHJldHVybmVkIHR5cGUgaXMgYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgaXIuRGFydFR5cGUgcmVhZERhcnRUeXBlTm9kZSh7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhIGxpc3Qgb2Yga2VybmVsIHR5cGUgbm9kZXMgZnJvbSB0aGlzIGRhdGEgc291cmNlLiBJZiBbZW1wdHlBc051bGxdCiAgLy8vIGlzIGB0cnVlYCwgYG51bGxgIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gZW1wdHkgbGlzdC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlRGFydFR5cGVOb2Rlc10uCiAgTGlzdDxpci5EYXJ0VHlwZT4gcmVhZERhcnRUeXBlTm9kZXMoe2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhIHNvdXJjZSBzcGFuIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBTb3VyY2VTcGFuIHJlYWRTb3VyY2VTcGFuKCk7CgogIC8vLyBSZWFkcyBhIHJlZmVyZW5jZSB0byBhbiBpbmRleGVkIGxpYnJhcnkgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIEluZGV4ZWRMaWJyYXJ5IHJlYWRMaWJyYXJ5KCk7CgogIC8vLyBSZWFkcyBhIHJlZmVyZW5jZSB0byBhIHBvdGVudGlhbGx5IGBudWxsYCBpbmRleGVkIGxpYnJhcnkgZnJvbSB0aGlzIGRhdGEKICAvLy8gc291cmNlLgogIEluZGV4ZWRMaWJyYXJ5IHJlYWRMaWJyYXJ5T3JOdWxsKCk7CiAgTWFwPEssIFY+IHJlYWRMaWJyYXJ5TWFwPEsgZXh0ZW5kcyBMaWJyYXJ5RW50aXR5LCBWPihWIGYoKSwKICAgICAge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhIHJlZmVyZW5jZSB0byBhbiBpbmRleGVkIGNsYXNzIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBJbmRleGVkQ2xhc3MgcmVhZENsYXNzKCk7CgogIC8vLyBSZWFkcyBhIHJlZmVyZW5jZSB0byBhIHBvdGVudGlhbGx5IGBudWxsYCBpbmRleGVkIGNsYXNzIGZyb20gdGhpcyBkYXRhCiAgLy8vIHNvdXJjZS4KICBJbmRleGVkQ2xhc3MgcmVhZENsYXNzT3JOdWxsKCk7CgogIC8vLyBSZWFkcyBhIGxpc3Qgb2YgcmVmZXJlbmNlcyB0byBpbmRleGVkIGNsYXNzZXMgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIC8vLyBJZiBbZW1wdHlBc051bGxdIGlzIGB0cnVlYCwgYG51bGxgIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gZW1wdHkgbGlzdC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlQ2xhc3Nlc10uCiAgTGlzdDxFPiByZWFkQ2xhc3NlczxFIGV4dGVuZHMgQ2xhc3NFbnRpdHk+KHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYSBtYXAgZnJvbSBpbmRleGVkIGNsYXNzZXMgdG8gW1ZdIHZhbHVlcyBmcm9tIHRoaXMgZGF0YSBzb3VyY2UsCiAgLy8vIGNhbGxpbmcgW2ZdIHRvIHJlYWQgZWFjaCB2YWx1ZSBmcm9tIHRoZSBkYXRhIHNvdXJjZS4gSWYgW2VtcHR5QXNOdWxsXSBpcwogIC8vLyBgdHJ1ZWAsIGBudWxsYCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGVtcHR5IG1hcC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlQ2xhc3NNYXBdLgogIE1hcDxLLCBWPiByZWFkQ2xhc3NNYXA8SyBleHRlbmRzIENsYXNzRW50aXR5LCBWPihWIGYoKSwKICAgICAge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhIHJlZmVyZW5jZSB0byBhbiBpbmRleGVkIHR5cGVkZWYgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIEluZGV4ZWRUeXBlZGVmIHJlYWRUeXBlZGVmKCk7CgogIC8vLyBSZWFkcyBhIHJlZmVyZW5jZSB0byBhbiBpbmRleGVkIG1lbWJlciBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgSW5kZXhlZE1lbWJlciByZWFkTWVtYmVyKCk7CgogIC8vLyBSZWFkcyBhIHJlZmVyZW5jZSB0byBhIHBvdGVudGlhbGx5IGBudWxsYCBpbmRleGVkIG1lbWJlciBmcm9tIHRoaXMgZGF0YQogIC8vLyBzb3VyY2UuCiAgSW5kZXhlZE1lbWJlciByZWFkTWVtYmVyT3JOdWxsKCk7CgogIC8vLyBSZWFkcyBhIGxpc3Qgb2YgcmVmZXJlbmNlcyB0byBpbmRleGVkIG1lbWJlcnMgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIC8vLyBJZiBbZW1wdHlBc051bGxdIGlzIGB0cnVlYCwgYG51bGxgIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gZW1wdHkgbGlzdC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlTWVtYmVyc10uCiAgTGlzdDxFPiByZWFkTWVtYmVyczxFIGV4dGVuZHMgTWVtYmVyRW50aXR5Pih7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KTsKCiAgLy8vIFJlYWRzIGEgbWFwIGZyb20gaW5kZXhlZCBtZW1iZXJzIHRvIFtWXSB2YWx1ZXMgZnJvbSB0aGlzIGRhdGEgc291cmNlLAogIC8vLyBjYWxsaW5nIFtmXSB0byByZWFkIGVhY2ggdmFsdWUgZnJvbSB0aGUgZGF0YSBzb3VyY2UuIElmIFtlbXB0eUFzTnVsbF0gaXMKICAvLy8gYHRydWVgLCBgbnVsbGAgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBlbXB0eSBtYXAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZU1lbWJlck1hcF0uCiAgTWFwPEssIFY+IHJlYWRNZW1iZXJNYXA8SyBleHRlbmRzIE1lbWJlckVudGl0eSwgVj4oViBmKE1lbWJlckVudGl0eSBtZW1iZXIpLAogICAgICB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KTsKCiAgLy8vIFJlYWRzIGEgcmVmZXJlbmNlIHRvIGFuIGluZGV4ZWQgdHlwZSB2YXJpYWJsZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgSW5kZXhlZFR5cGVWYXJpYWJsZSByZWFkVHlwZVZhcmlhYmxlKCk7CgogIC8vLyBSZWFkcyBhIHJlZmVyZW5jZSB0byBhIGxvY2FsIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBMb2NhbCByZWFkTG9jYWwoKTsKCiAgLy8vIFJlYWRzIGEgcmVmZXJlbmNlIHRvIGEgcG90ZW50aWFsbHkgYG51bGxgIGxvY2FsIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBMb2NhbCByZWFkTG9jYWxPck51bGwoKTsKCiAgLy8vIFJlYWRzIGEgbGlzdCBvZiByZWZlcmVuY2VzIHRvIGxvY2FscyBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuIElmCiAgLy8vIFtlbXB0eUFzTnVsbF0gaXMgYHRydWVgLCBgbnVsbGAgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBlbXB0eSBsaXN0LgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVMb2NhbHNdLgogIExpc3Q8RT4gcmVhZExvY2FsczxFIGV4dGVuZHMgTG9jYWw+KHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYSBtYXAgZnJvbSBsb2NhbHMgdG8gW1ZdIHZhbHVlcyBmcm9tIHRoaXMgZGF0YSBzb3VyY2UsIGNhbGxpbmcgW2ZdCiAgLy8vIHRvIHJlYWQgZWFjaCB2YWx1ZSBmcm9tIHRoZSBkYXRhIHNvdXJjZS4gSWYgW2VtcHR5QXNOdWxsXSBpcyBgdHJ1ZWAsCiAgLy8vIGBudWxsYCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGVtcHR5IG1hcC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlTG9jYWxNYXBdLgogIE1hcDxLLCBWPiByZWFkTG9jYWxNYXA8SyBleHRlbmRzIExvY2FsLCBWPihWIGYoKSwge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhIGNvbnN0YW50IHZhbHVlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBDb25zdGFudFZhbHVlIHJlYWRDb25zdGFudCgpOwoKICAvLy8gUmVhZHMgYSBwb3RlbnRpYWxseSBgbnVsbGAgY29uc3RhbnQgdmFsdWUgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIENvbnN0YW50VmFsdWUgcmVhZENvbnN0YW50T3JOdWxsKCk7CgogIC8vLyBSZWFkcyBhIGRvdWJsZSB2YWx1ZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgZG91YmxlIHJlYWREb3VibGVWYWx1ZSgpOwoKICAvLy8gUmVhZHMgYW4gaW50ZWdlciBvZiBhcmJpdHJhcnkgdmFsdWUgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIC8vLwogIC8vLyBUaGlzIGlzIHNob3VsZCBvbmx5IHdoZW4gdGhlIHZhbHVlIGlzIG5vdCBrbm93biB0byBiZSBhIG5vbi1uZWdhdGl2ZQogIC8vLyAzMCBiaXQgaW50ZWdlci4gT3RoZXJ3aXNlIFtyZWFkSW50XSBzaG91bGQgYmUgdXNlZC4KICBpbnQgcmVhZEludGVnZXJWYWx1ZSgpOwoKICAvLy8gUmVhZHMgYSBsaXN0IG9mIGNvbnN0YW50IHZhbHVlcyBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuIElmIFtlbXB0eUFzTnVsbF0gaXMKICAvLy8gYHRydWVgLCBgbnVsbGAgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBlbXB0eSBsaXN0LgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVDb25zdGFudHNdLgogIExpc3Q8RT4gcmVhZENvbnN0YW50czxFIGV4dGVuZHMgQ29uc3RhbnRWYWx1ZT4oe2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhIG1hcCBmcm9tIGNvbnN0YW50IHZhbHVlcyB0byBbVl0gdmFsdWVzIGZyb20gdGhpcyBkYXRhIHNvdXJjZSwKICAvLy8gY2FsbGluZyBbZl0gdG8gcmVhZCBlYWNoIHZhbHVlIGZyb20gdGhlIGRhdGEgc291cmNlLiBJZiBbZW1wdHlBc051bGxdIGlzCiAgLy8vIGB0cnVlYCwgYG51bGxgIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gZW1wdHkgbWFwLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVDb25zdGFudE1hcF0uCiAgTWFwPEssIFY+IHJlYWRDb25zdGFudE1hcDxLIGV4dGVuZHMgQ29uc3RhbnRWYWx1ZSwgVj4oViBmKCksCiAgICAgIHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYSBpbXBvcnQgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIEltcG9ydEVudGl0eSByZWFkSW1wb3J0KCk7CgogIC8vLyBSZWFkcyBhIHBvdGVudGlhbGx5IGBudWxsYCBpbXBvcnQgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIEltcG9ydEVudGl0eSByZWFkSW1wb3J0T3JOdWxsKCk7CgogIC8vLyBSZWFkcyBhIGxpc3Qgb2YgaW1wb3J0cyBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuIElmIFtlbXB0eUFzTnVsbF0gaXMKICAvLy8gYHRydWVgLCBgbnVsbGAgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBlbXB0eSBsaXN0LgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVJbXBvcnRzXS4KICBMaXN0PEltcG9ydEVudGl0eT4gcmVhZEltcG9ydHMoe2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhIG1hcCBmcm9tIGltcG9ydHMgdG8gW1ZdIHZhbHVlcyBmcm9tIHRoaXMgZGF0YSBzb3VyY2UsCiAgLy8vIGNhbGxpbmcgW2ZdIHRvIHJlYWQgZWFjaCB2YWx1ZSBmcm9tIHRoZSBkYXRhIHNvdXJjZS4gSWYgW2VtcHR5QXNOdWxsXSBpcwogIC8vLyBgdHJ1ZWAsIGBudWxsYCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGVtcHR5IG1hcC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlSW1wb3J0TWFwXS4KICBNYXA8SW1wb3J0RW50aXR5LCBWPiByZWFkSW1wb3J0TWFwPFY+KFYgZigpLCB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KTsKCiAgLy8vIFJlYWRzIGFuIFtBYnN0cmFjdFZhbHVlXSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgLy8vCiAgLy8vIFRoaXMgZmVhdHVyZSBpcyBvbmx5IGF2YWlsYWJsZSBhIFtDb2RlZ2VuUmVhZGVyXSBoYXMgYmVlbiByZWdpc3RlcmVkLgogIEFic3RyYWN0VmFsdWUgcmVhZEFic3RyYWN0VmFsdWUoKTsKCiAgLy8vIFJlYWRzIGEgcmVmZXJlbmNlIHRvIGFuIFtPdXRwdXRVbml0XSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgLy8vCiAgLy8vIFRoaXMgZmVhdHVyZSBpcyBvbmx5IGF2YWlsYWJsZSBhIFtDb2RlZ2VuUmVhZGVyXSBoYXMgYmVlbiByZWdpc3RlcmVkLgogIE91dHB1dFVuaXQgcmVhZE91dHB1dFVuaXRSZWZlcmVuY2UoKTsKCiAgLy8vIFJlYWRzIGEgW2pzLk5vZGVdIHZhbHVlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICAvLy8KICAvLy8gVGhpcyBmZWF0dXJlIGlzIG9ubHkgYXZhaWxhYmxlIGEgW0NvZGVnZW5SZWFkZXJdIGhhcyBiZWVuIHJlZ2lzdGVyZWQuCiAganMuTm9kZSByZWFkSnNOb2RlKCk7CgogIC8vLyBSZWFkcyBhIHBvdGVudGlhbGx5IGBudWxsYCBbanMuTm9kZV0gdmFsdWUgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIC8vLwogIC8vLyBUaGlzIGZlYXR1cmUgaXMgb25seSBhdmFpbGFibGUgYSBbQ29kZWdlblJlYWRlcl0gaGFzIGJlZW4gcmVnaXN0ZXJlZC4KICBqcy5Ob2RlIHJlYWRKc05vZGVPck51bGwoKTsKfQoKLy8vIEludGVyZmFjZSB1c2VkIGZvciBsb29raW5nIHVwIGVudGl0aWVzIGJ5IGluZGV4IGR1cmluZyBkZXNlcmlhbGl6YXRpb24uCmFic3RyYWN0IGNsYXNzIEVudGl0eUxvb2t1cCB7CiAgLy8vIFJldHVybnMgdGhlIGluZGV4ZWQgbGlicmFyeSBjb3JyZXNwb25kaW5nIHRvIFtpbmRleF0uCiAgSW5kZXhlZExpYnJhcnkgZ2V0TGlicmFyeUJ5SW5kZXgoaW50IGluZGV4KTsKCiAgLy8vIFJldHVybnMgdGhlIGluZGV4ZWQgY2xhc3MgY29ycmVzcG9uZGluZyB0byBbaW5kZXhdLgogIEluZGV4ZWRDbGFzcyBnZXRDbGFzc0J5SW5kZXgoaW50IGluZGV4KTsKCiAgLy8vIFJldHVybnMgdGhlIGluZGV4ZWQgdHlwZWRlZiBjb3JyZXNwb25kaW5nIHRvIFtpbmRleF0uCiAgSW5kZXhlZFR5cGVkZWYgZ2V0VHlwZWRlZkJ5SW5kZXgoaW50IGluZGV4KTsKCiAgLy8vIFJldHVybnMgdGhlIGluZGV4ZWQgbWVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gW2luZGV4XS4KICBJbmRleGVkTWVtYmVyIGdldE1lbWJlckJ5SW5kZXgoaW50IGluZGV4KTsKCiAgLy8vIFJldHVybnMgdGhlIGluZGV4ZWQgdHlwZSB2YXJpYWJsZSBjb3JyZXNwb25kaW5nIHRvIFtpbmRleF0uCiAgSW5kZXhlZFR5cGVWYXJpYWJsZSBnZXRUeXBlVmFyaWFibGVCeUluZGV4KGludCBpbmRleCk7Cn0KCi8vLyBEZWNvZGluZyBzdHJhdGVneSBmb3IgZW50aXR5IHJlZmVyZW5jZXMuCmNsYXNzIEVudGl0eVJlYWRlciB7CiAgY29uc3QgRW50aXR5UmVhZGVyKCk7CgogIEluZGV4ZWRMaWJyYXJ5IHJlYWRMaWJyYXJ5RnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBFbnRpdHlMb29rdXAgZW50aXR5TG9va3VwKSB7CiAgICByZXR1cm4gZW50aXR5TG9va3VwLmdldExpYnJhcnlCeUluZGV4KHNvdXJjZS5yZWFkSW50KCkpOwogIH0KCiAgSW5kZXhlZENsYXNzIHJlYWRDbGFzc0Zyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgRW50aXR5TG9va3VwIGVudGl0eUxvb2t1cCkgewogICAgcmV0dXJuIGVudGl0eUxvb2t1cC5nZXRDbGFzc0J5SW5kZXgoc291cmNlLnJlYWRJbnQoKSk7CiAgfQoKICBJbmRleGVkVHlwZWRlZiByZWFkVHlwZWRlZkZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgRW50aXR5TG9va3VwIGVudGl0eUxvb2t1cCkgewogICAgcmV0dXJuIGVudGl0eUxvb2t1cC5nZXRUeXBlZGVmQnlJbmRleChzb3VyY2UucmVhZEludCgpKTsKICB9CgogIEluZGV4ZWRNZW1iZXIgcmVhZE1lbWJlckZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgRW50aXR5TG9va3VwIGVudGl0eUxvb2t1cCkgewogICAgcmV0dXJuIGVudGl0eUxvb2t1cC5nZXRNZW1iZXJCeUluZGV4KHNvdXJjZS5yZWFkSW50KCkpOwogIH0KCiAgSW5kZXhlZFR5cGVWYXJpYWJsZSByZWFkVHlwZVZhcmlhYmxlRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBFbnRpdHlMb29rdXAgZW50aXR5TG9va3VwKSB7CiAgICByZXR1cm4gZW50aXR5TG9va3VwLmdldFR5cGVWYXJpYWJsZUJ5SW5kZXgoc291cmNlLnJlYWRJbnQoKSk7CiAgfQp9CgovLy8gRW5jb2Rpbmcgc3RyYXRlZ3kgZm9yIGVudGl0eSByZWZlcmVuY2VzLgpjbGFzcyBFbnRpdHlXcml0ZXIgewogIGNvbnN0IEVudGl0eVdyaXRlcigpOwoKICB2b2lkIHdyaXRlTGlicmFyeVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaywgSW5kZXhlZExpYnJhcnkgdmFsdWUpIHsKICAgIHNpbmsud3JpdGVJbnQodmFsdWUubGlicmFyeUluZGV4KTsKICB9CgogIHZvaWQgd3JpdGVDbGFzc1RvRGF0YVNpbmsoRGF0YVNpbmsgc2luaywgSW5kZXhlZENsYXNzIHZhbHVlKSB7CiAgICBzaW5rLndyaXRlSW50KHZhbHVlLmNsYXNzSW5kZXgpOwogIH0KCiAgdm9pZCB3cml0ZVR5cGVkZWZUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmssIEluZGV4ZWRUeXBlZGVmIHZhbHVlKSB7CiAgICBzaW5rLndyaXRlSW50KHZhbHVlLnR5cGVkZWZJbmRleCk7CiAgfQoKICB2b2lkIHdyaXRlTWVtYmVyVG9EYXRhU2luayhEYXRhU2luayBzaW5rLCBJbmRleGVkTWVtYmVyIHZhbHVlKSB7CiAgICBzaW5rLndyaXRlSW50KHZhbHVlLm1lbWJlckluZGV4KTsKICB9CgogIHZvaWQgd3JpdGVUeXBlVmFyaWFibGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmssIEluZGV4ZWRUeXBlVmFyaWFibGUgdmFsdWUpIHsKICAgIHNpbmsud3JpdGVJbnQodmFsdWUudHlwZVZhcmlhYmxlSW5kZXgpOwogIH0KfQoKLy8vIEludGVyZmFjZSB1c2VkIGZvciBsb29raW5nIHVwIGxvY2FscyBieSBpbmRleCBkdXJpbmcgZGVzZXJpYWxpemF0aW9uLgphYnN0cmFjdCBjbGFzcyBMb2NhbExvb2t1cCB7CiAgTG9jYWwgZ2V0TG9jYWxCeUluZGV4KE1lbWJlckVudGl0eSBtZW1iZXJDb250ZXh0LCBpbnQg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bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgJ3NlcmlhbGl6YXRpb24uZGFydCc7CgovLy8gQmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBbRGF0YVNpbmtdIHVzaW5nIFtEYXRhU2lua01peGluXSB0byBpbXBsZW1lbnQKLy8vIGNvbnZlbmllbmNlIG1ldGhvZHMuCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0RGF0YVNpbmsgZXh0ZW5kcyBEYXRhU2lua01peGluIGltcGxlbWVudHMgRGF0YVNpbmsgewogIC8vLyBJZiBgdHJ1ZWAsIHNlcmlhbGl6YXRpb24gb2YgZXZlcnkgZGF0YSBraW5kIGlzIHByZWNlZGVkIGJ5IGEgW0RhdGFLaW5kXQogIC8vLyB2YWx1ZS4KICAvLy8KICAvLy8gVGhpcyBpcyB1c2VkIGZvciBkZWJ1Z2dpbmcgZGF0YSBpbmNvbnNpc3RlbmNpZXMgYmV0d2VlbiBzZXJpYWxpemF0aW9uCiAgLy8vIGFuZCBkZXNlcmlhbGl6YXRpb24uCiAgZmluYWwgYm9vbCB1c2VEYXRhS2luZHM7CgogIC8vLyBWaXNpdG9yIHVzZWQgZm9yIHNlcmlhbGl6aW5nIFtEYXJ0VHlwZV1zLgogIERhcnRUeXBlV3JpdGVyIF9kYXJ0VHlwZVdyaXRlcjsKCiAgLy8vIFZpc2l0b3IgdXNlZCBmb3Igc2VyaWFsaXppbmcgW2lyLkRhcnRUeXBlXXMuCiAgRGFydFR5cGVOb2RlV3JpdGVyIF9kYXJ0VHlwZU5vZGVXcml0ZXI7CgogIC8vLyBTdGFjayBvZiB0YWdzIHVzZWQgd2hlbiBbdXNlRGF0YUtpbmRzXSBpcyBgdHJ1ZWAgdG8gaGVscCBkZWJ1Z2dpbmcgc2VjdGlvbgogIC8vLyBpbmNvbnNpc3RlbmNpZXMgYmV0d2VlbiBzZXJpYWxpemF0aW9uIGFuZCBkZXNlcmlhbGl6YXRpb24uCiAgTGlzdDxTdHJpbmc+IF90YWdzOwoKICAvLy8gTWFwIG9mIFtfTWVtYmVyRGF0YV0gb2JqZWN0IGZvciBzZXJpYWxpemVkIGtlcm5lbCBtZW1iZXIgbm9kZXMuCiAgTWFwPGlyLk1lbWJlciwgX01lbWJlckRhdGE+IF9tZW1iZXJEYXRhID0ge307CgogIEluZGV4ZWRTaW5rPFN0cmluZz4gX3N0cmluZ0luZGV4OwogIEluZGV4ZWRTaW5rPFVyaT4gX3VyaUluZGV4OwogIEluZGV4ZWRTaW5rPGlyLk1lbWJlcj4gX21lbWJlck5vZGVJbmRleDsKICBJbmRleGVkU2luazxJbXBvcnRFbnRpdHk+IF9pbXBvcnRJbmRleDsKICBJbmRleGVkU2luazxDb25zdGFudFZhbHVlPiBfY29uc3RhbnRJbmRleDsKCiAgTWFwPFR5cGUsIEluZGV4ZWRTaW5rPiBfZ2VuZXJhbENhY2hlcyA9IHt9OwoKICBFbnRpdHlXcml0ZXIgX2VudGl0eVdyaXRlciA9IGNvbnN0IEVudGl0eVdyaXRlcigpOwogIENvZGVnZW5Xcml0ZXIgX2NvZGVnZW5Xcml0ZXI7CgogIGZpbmFsIE1hcDxTdHJpbmcsIGludD4gdGFnRnJlcXVlbmN5TWFwOwoKICBpci5NZW1iZXIgX2N1cnJlbnRNZW1iZXJDb250ZXh0OwogIF9NZW1iZXJEYXRhIF9jdXJyZW50TWVtYmVyRGF0YTsKCiAgQWJzdHJhY3REYXRhU2luayh7dGhpcy51c2VEYXRhS2luZHM6IGZhbHNlLCB0aGlzLnRhZ0ZyZXF1ZW5jeU1hcH0pIHsKICAgIF9kYXJ0VHlwZVdyaXRlciA9IG5ldyBEYXJ0VHlwZVdyaXRlcih0aGlzKTsKICAgIF9kYXJ0VHlwZU5vZGVXcml0ZXIgPSBuZXcgRGFydFR5cGVOb2RlV3JpdGVyKHRoaXMpOwogICAgX3N0cmluZ0luZGV4ID0gbmV3IEluZGV4ZWRTaW5rPFN0cmluZz4odGhpcyk7CiAgICBfdXJpSW5kZXggPSBuZXcgSW5kZXhlZFNpbms8VXJpPih0aGlzKTsKICAgIF9tZW1iZXJOb2RlSW5kZXggPSBuZXcgSW5kZXhlZFNpbms8aXIuTWVtYmVyPih0aGlzKTsKICAgIF9pbXBvcnRJbmRleCA9IG5ldyBJbmRleGVkU2luazxJbXBvcnRFbnRpdHk+KHRoaXMpOwogICAgX2NvbnN0YW50SW5kZXggPSBuZXcgSW5kZXhlZFNpbms8Q29uc3RhbnRWYWx1ZT4odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luKFN0cmluZyB0YWcpIHsKICAgIGlmICh0YWdGcmVxdWVuY3lNYXAgIT0gbnVsbCkgewogICAgICB0YWdGcmVxdWVuY3lNYXBbdGFnXSA/Pz0gMDsKICAgICAgdGFnRnJlcXVlbmN5TWFwW3RhZ10rKzsKICAgIH0KICAgIGlmICh1c2VEYXRhS2luZHMpIHsKICAgICAgX3RhZ3MgPz89IDxTdHJpbmc+W107CiAgICAgIF90YWdzLmFkZCh0YWcpOwogICAgICBfYmVnaW4odGFnKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kKE9iamVjdCB0YWcpIHsKICAgIGlmICh1c2VEYXRhS2luZHMpIHsKICAgICAgX2VuZCh0YWcpOwoKICAgICAgU3RyaW5nIGV4aXN0aW5nVGFnID0gX3RhZ3MucmVtb3ZlTGFzdCgpOwogICAgICBhc3NlcnQoZXhpc3RpbmdUYWcgPT0gdGFnLAogICAgICAgICAgIlVuZXhwZWN0ZWQgdGFnIGVuZC4gRXhwZWN0ZWQgJGV4aXN0aW5nVGFnLCBmb3VuZCAkdGFnLiIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBpbk1lbWJlckNvbnRleHQoaXIuTWVtYmVyIGNvbnRleHQsIHZvaWQgZigpKSB7CiAgICBpci5NZW1iZXIgb2xkTWVtYmVyQ29udGV4dCA9IF9jdXJyZW50TWVtYmVyQ29udGV4dDsKICAgIF9NZW1iZXJEYXRhIG9sZE1lbWJlckRhdGEgPSBfY3VycmVudE1lbWJlckRhdGE7CiAgICBfY3VycmVudE1lbWJlckNvbnRleHQgPSBjb250ZXh0OwogICAgX2N1cnJlbnRNZW1iZXJEYXRhID0gbnVsbDsKICAgIGYoKTsKICAgIF9jdXJyZW50TWVtYmVyRGF0YSA9IG9sZE1lbWJlckRhdGE7CiAgICBfY3VycmVudE1lbWJlckNvbnRleHQgPSBvbGRNZW1iZXJDb250ZXh0OwogIH0KCiAgX01lbWJlckRhdGEgZ2V0IGN1cnJlbnRNZW1iZXJEYXRhIHsKICAgIGFzc2VydChfY3VycmVudE1lbWJlckNvbnRleHQgIT0gbnVsbCwKICAgICAgICAiRGF0YVNpbmsgaGFzIG5vIGN1cnJlbnQgbWVtYmVyIGNvbnRleHQuIik7CiAgICByZXR1cm4gX2N1cnJlbnRNZW1iZXJEYXRhID8/PSBfbWVtYmVyRGF0YVtfY3VycmVudE1lbWJlckNvbnRleHRdID8/PQogICAgICAgIG5ldyBfTWVtYmVyRGF0YShfY3VycmVudE1lbWJlckNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUNhY2hlZDxFPihFIHZhbHVlLCB2b2lkIGYoRSB2YWx1ZSkpIHsKICAgIEluZGV4ZWRTaW5rIHNpbmsgPSBfZ2VuZXJhbENhY2hlc1tFXSA/Pz0gbmV3IEluZGV4ZWRTaW5rPEU+KHRoaXMpOwogICAgc2luay53cml0ZSh2YWx1ZSwgKHYpID0+IGYodikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVNvdXJjZVNwYW4oU291cmNlU3BhbiB2YWx1ZSkgewogICAgX3dyaXRlRGF0YUtpbmQoRGF0YUtpbmQuc291cmNlU3Bhbik7CiAgICBfd3JpdGVVcmkodmFsdWUudXJpKTsKICAgIF93cml0ZUludEludGVybmFsKHZhbHVlLmJlZ2luKTsKICAgIF93cml0ZUludEludGVybmFsKHZhbHVlLmVuZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlRGFydFR5cGUoRGFydFR5cGUgdmFsdWUsIHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBfd3JpdGVEYXRhS2luZChEYXRhS2luZC5kYXJ0VHlwZSk7CiAgICBfd3JpdGVEYXJ0VHlwZSh2YWx1ZSwgW10sIGFsbG93TnVsbDogYWxsb3dOdWxsKTsKICB9CgogIHZvaWQgX3dyaXRlRGFydFR5cGUoCiAgICAgIERhcnRUeXBlIHZhbHVlLCBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMsCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICBpZiAoIWFsbG93TnVsbCkgewogICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJNaXNzaW5nIERhcnRUeXBlIGlzIG5vdCBhbGxvd2VkLiIpOwogICAgICB9CiAgICAgIHdyaXRlRW51bShEYXJ0VHlwZUtpbmQubm9uZSk7CiAgICB9IGVsc2UgewogICAgICBfZGFydFR5cGVXcml0ZXIudmlzaXQodmFsdWUsIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlRGFydFR5cGVOb2RlKGlyLkRhcnRUeXBlIHZhbHVlLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgX3dyaXRlRGF0YUtpbmQoRGF0YUtpbmQuZGFydFR5cGVOb2RlKTsKICAgIF93cml0ZURhcnRUeXBlTm9kZSh2YWx1ZSwgW10sIGFsbG93TnVsbDogYWxsb3dOdWxsKTsKICB9CgogIHZvaWQgX3dyaXRlRGFydFR5cGVOb2RlKAogICAgICBpci5EYXJ0VHlwZSB2YWx1ZSwgTGlzdDxpci5UeXBlUGFyYW1ldGVyPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMsCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICBpZiAoIWFsbG93TnVsbCkgewogICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJNaXNzaW5nIGlyLkRhcnRUeXBlIG5vZGUgaXMgbm90IGFsbG93ZWQuIik7CiAgICAgIH0KICAgICAgd3JpdGVFbnVtKERhcnRUeXBlTm9kZUtpbmQubm9uZSk7CiAgICB9IGVsc2UgewogICAgICB2YWx1ZS5hY2NlcHQxKF9kYXJ0VHlwZU5vZGVXcml0ZXIsIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlTWVtYmVyTm9kZShpci5NZW1iZXIgdmFsdWUpIHsKICAgIF93cml0ZURhdGFLaW5kKERhdGFLaW5kLm1lbWJlck5vZGUpOwogICAgX3dyaXRlTWVtYmVyTm9kZSh2YWx1ZSk7CiAgfQoKICB2b2lkIF93cml0ZU1lbWJlck5vZGUoaXIuTWVtYmVyIHZhbHVlKSB7CiAgICBfbWVtYmVyTm9kZUluZGV4LndyaXRlKHZhbHVlLCBfd3JpdGVNZW1iZXJOb2RlSW50ZXJuYWwpOwogIH0KCiAgdm9pZCBfd3JpdGVNZW1iZXJOb2RlSW50ZXJuYWwoaXIuTWVtYmVyIHZhbHVlKSB7CiAgICBpci5DbGFzcyBjbHMgPSB2YWx1ZS5lbmNsb3NpbmdDbGFzczsKICAgIGlmIChjbHMgIT0gbnVsbCkgewogICAgICBfd3JpdGVFbnVtSW50ZXJuYWwoTWVtYmVyQ29udGV4dEtpbmQuY2xzKTsKICAgICAgX3dyaXRlQ2xhc3NOb2RlKGNscyk7CiAgICAgIF93cml0ZVN0cmluZyhfY29tcHV0ZU1lbWJlck5hbWUodmFsdWUpKTsKICAgIH0gZWxzZSB7CiAgICAgIF93cml0ZUVudW1JbnRlcm5hbChNZW1iZXJDb250ZXh0S2luZC5saWJyYXJ5KTsKICAgICAgX3dyaXRlTGlicmFyeU5vZGUodmFsdWUuZW5jbG9zaW5nTGlicmFyeSk7CiAgICAgIF93cml0ZVN0cmluZyhfY29tcHV0ZU1lbWJlck5hbWUodmFsdWUpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVDbGFzc05vZGUoaXIuQ2xhc3MgdmFsdWUpIHsKICAgIF93cml0ZURhdGFLaW5kKERhdGFLaW5kLmNsYXNzTm9kZSk7CiAgICBfd3JpdGVDbGFzc05vZGUodmFsdWUpOwogIH0KCiAgdm9pZCBfd3JpdGVDbGFzc05vZGUoaXIuQ2xhc3MgdmFsdWUpIHsKICAgIF93cml0ZUxpYnJhcnlOb2RlKHZhbHVlLmVuY2xvc2luZ0xpYnJhcnkpOwogICAgX3dyaXRlU3RyaW5nKHZhbHVlLm5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVR5cGVkZWZOb2RlKGlyLlR5cGVkZWYgdmFsdWUpIHsKICAgIF93cml0ZURhdGFLaW5kKERhdGFLaW5kLnR5cGVkZWZOb2RlKTsKICAgIF93cml0ZVR5cGVkZWZOb2RlKHZhbHVlKTsKICB9CgogIHZvaWQgX3dyaXRlVHlwZWRlZk5vZGUoaXIuVHlwZWRlZiB2YWx1ZSkgewogICAgX3dyaXRlTGlicmFyeU5vZGUodmFsdWUuZW5jbG9zaW5nTGlicmFyeSk7CiAgICBfd3JpdGVTdHJpbmcodmFsdWUubmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlTGlicmFyeU5vZGUoaXIuTGlicmFyeSB2YWx1ZSkgewogICAgX3dyaXRlRGF0YUtpbmQoRGF0YUtpbmQubGlicmFyeU5vZGUpOwogICAgX3dyaXRlTGlicmFyeU5vZGUodmFsdWUpOwogIH0KCiAgdm9pZCBfd3JpdGVMaWJyYXJ5Tm9kZShpci5MaWJyYXJ5IHZhbHVlKSB7CiAgICBfd3JpdGVVcmkodmFsdWUuaW1wb3J0VXJpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVFbnVtKGR5bmFtaWMgdmFsdWUpIHsKICAgIF93cml0ZURhdGFLaW5kKERhdGFLaW5kLmVudW1WYWx1ZSk7CiAgICBfd3JpdGVFbnVtSW50ZXJuYWwodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUJvb2woYm9vbCB2YWx1ZSkgewogICAgYXNzZXJ0KHZhbHVlICE9IG51bGwpOwogICAgX3dyaXRlRGF0YUtpbmQoRGF0YUtpbmQuYm9vbCk7CiAgICBfd3JpdGVCb29sKHZhbHVlKTsKICB9CgogIHZvaWQgX3dyaXRlQm9vbChib29sIHZhbHVlKSB7CiAgICBfd3JpdGVJbnRJbnRlcm5hbCh2YWx1ZSA/IDEgOiAwKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVVcmkoVXJpIHZhbHVlKSB7CiAgICBhc3NlcnQodmFsdWUgIT0gbnVsbCk7CiAgICBfd3JpdGVEYXRhS2luZChEYXRhS2luZC51cmkpOwogICAgX3dyaXRlVXJpKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVTdHJpbmcoU3RyaW5nIHZhbHVlKSB7CiAgICBhc3NlcnQodmFsdWUgIT0gbnVsbCk7CiAgICBfd3JpdGVEYXRhS2luZChEYXRhS2luZC5zdHJpbmcpOwogICAgX3dyaXRlU3RyaW5nKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVJbnQoaW50IHZhbHVlKSB7CiAgICBhc3NlcnQodmFsdWUgIT0gbnVsbCk7CiAgICBhc3NlcnQodmFsdWUgPj0gMCAmJiB2YWx1ZSA+PiAzMCA9PSAwKTsKICAgIF93cml0ZURhdGFLaW5kKERhdGFLaW5kLnVpbnQzMCk7CiAgICBfd3JpdGVJbnRJbnRlcm5hbCh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVHJlZU5vZGUoaXIuVHJlZU5vZGUgdmFsdWUpIHsKICAgIF93cml0ZURhdGFLaW5kKERhdGFLaW5kLnRyZWVOb2RlKTsKICAgIF93cml0ZVRyZWVOb2RlKHZhbHVlLCBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUcmVlTm9kZUluQ29udGV4dChpci5UcmVlTm9kZSB2YWx1ZSkgewogICAgd3JpdGVUcmVlTm9kZUluQ29udGV4dEludGVybmFsKHZhbHVlLCBjdXJyZW50TWVtYmVyRGF0YSk7CiAgfQoKICB2b2lkIHdyaXRlVHJlZU5vZGVJbkNvbnRleHRJbnRlcm5hbCgKICAgICAgaXIuVHJlZU5vZGUgdmFsdWUsIF9NZW1iZXJEYXRhIG1lbWJlckRhdGEpIHsKICAgIF93cml0ZURhdGFLaW5kKERhdGFLaW5kLnRyZWVOb2RlKTsKICAgIF93cml0ZVRyZWVOb2RlKHZhbHVlLCBtZW1iZXJEYXRhKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUcmVlTm9kZU9yTnVsbEluQ29udGV4dChpci5UcmVlTm9kZSB2YWx1ZSkgewogICAgd3JpdGVCb29sKHZhbHVlICE9IG51bGwpOwogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgd3JpdGVUcmVlTm9kZUluQ29udGV4dEludGVybmFsKHZhbHVlLCBjdXJyZW50TWVtYmVyRGF0YSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVHJlZU5vZGVzSW5Db250ZXh0KEl0ZXJhYmxlPGlyLlRyZWVOb2RlPiB2YWx1ZXMsCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBpZiAodmFsdWVzID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGFsbG93TnVsbCk7CiAgICAgIHdyaXRlSW50KDApOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVJbnQodmFsdWVzLmxlbmd0aCk7CiAgICAgIGZvciAoaXIuVHJlZU5vZGUgdmFsdWUgaW4gdmFsdWVzKSB7CiAgICAgICAgd3JpdGVUcmVlTm9kZUluQ29udGV4dEludGVybmFsKHZhbHVlLCBjdXJyZW50TWVtYmVyRGF0YSk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUcmVlTm9kZU1hcEluQ29udGV4dDxWPihNYXA8aXIuVHJlZU5vZGUsIFY+IG1hcCwgdm9pZCBmKFYgdmFsdWUpLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKG1hcCA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICB3cml0ZUludCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlSW50KG1hcC5sZW5ndGgpOwogICAgICBtYXAuZm9yRWFjaCgoaXIuVHJlZU5vZGUga2V5LCBWIHZhbHVlKSB7CiAgICAgICAgd3JpdGVUcmVlTm9kZUluQ29udGV4dEludGVybmFsKGtleSwgY3VycmVudE1lbWJlckRhdGEpOwogICAgICAgIGYodmFsdWUpOwogICAgICB9KTsKICAgIH0KICB9CgogIF9NZW1iZXJEYXRhIF9nZXRNZW1iZXJEYXRhKGlyLlRyZWVOb2RlIG5vZGUpIHsKICAgIGlyLlRyZWVOb2RlIG1lbWJlciA9IG5vZGU7CiAgICB3aGlsZSAobWVtYmVyIGlzISBpci5NZW1iZXIpIHsKICAgICAgaWYgKG1lbWJlciA9PSBudWxsKSB7CiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIk5vIGVuY2xvc2luZyBtZW1iZXIgb2YgVHJlZU5vZGUgIgogICAgICAgICAgICAiJG5vZGUgKCR7bm9kZS5ydW50aW1lVHlwZX0pIik7CiAgICAgIH0KICAgICAgbWVtYmVyID0gbWVtYmVyLnBhcmVudDsKICAgIH0KICAgIF93cml0ZU1lbWJlck5vZGUobWVtYmVyKTsKICAgIHJldHVybiBfbWVtYmVyRGF0YVttZW1iZXJdID8/PSBuZXcgX01lbWJlckRhdGEobWVtYmVyKTsKICB9CgogIHZvaWQgX3dyaXRlVHJlZU5vZGUoaXIuVHJlZU5vZGUgdmFsdWUsIF9NZW1iZXJEYXRhIG1lbWJlckRhdGEpIHsKICAgIGlmICh2YWx1ZSBpcyBpci5DbGFzcykgewogICAgICBfd3JpdGVFbnVtSW50ZXJuYWwoX1RyZWVOb2RlS2luZC5jbHMpOwogICAgICBfd3JpdGVDbGFzc05vZGUodmFsdWUpOwogICAgfSBlbHNlIGlmICh2YWx1ZSBpcyBpci5NZW1iZXIpIHsKICAgICAgX3dyaXRlRW51bUludGVybmFsKF9UcmVlTm9kZUtpbmQubWVtYmVyKTsKICAgICAgX3dyaXRlTWVtYmVyTm9kZSh2YWx1ZSk7CiAgICB9IGVsc2UgaWYgKHZhbHVlIGlzIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gJiYKICAgICAgICB2YWx1ZS5wYXJlbnQgaXMgaXIuRnVuY3Rpb25EZWNsYXJhdGlvbikgewogICAgICBfd3JpdGVFbnVtSW50ZXJuYWwoX1RyZWVOb2RlS2luZC5mdW5jdGlvbkRlY2xhcmF0aW9uVmFyaWFibGUpOwogICAgICBfd3JpdGVUcmVlTm9kZSh2YWx1ZS5wYXJlbnQsIG1lbWJlckRhdGEpOwogICAgfSBlbHNlIGlmICh2YWx1ZSBpcyBpci5GdW5jdGlvbk5vZGUpIHsKICAgICAgX3dyaXRlRW51bUludGVybmFsKF9UcmVlTm9kZUtpbmQuZnVuY3Rpb25Ob2RlKTsKICAgICAgX3dyaXRlRnVuY3Rpb25Ob2RlKHZhbHVlLCBtZW1iZXJEYXRhKTsKICAgIH0gZWxzZSBpZiAodmFsdWUgaXMgaXIuVHlwZVBhcmFtZXRlcikgewogICAgICBfd3JpdGVFbnVtSW50ZXJuYWwoX1RyZWVOb2RlS2luZC50eXBlUGFyYW1ldGVyKTsKICAgICAgX3dyaXRlVHlwZVBhcmFtZXRlcih2YWx1ZSwgbWVtYmVyRGF0YSk7CiAgICB9IGVsc2UgaWYgKHZhbHVlIGlzIENvbnN0YW50UmVmZXJlbmNlKSB7CiAgICAgIF93cml0ZUVudW1JbnRlcm5hbChfVHJlZU5vZGVLaW5kLmNvbnN0YW50KTsKICAgICAgbWVtYmVyRGF0YSA/Pz0gX2dldE1lbWJlckRhdGEodmFsdWUuZXhwcmVzc2lvbik7CiAgICAgIF93cml0ZVRyZWVOb2RlKHZhbHVlLmV4cHJlc3Npb24sIG1lbWJlckRhdGEpOwogICAgICBpbnQgaW5kZXggPQogICAgICAgICAgbWVtYmVyRGF0YS5nZXRJbmRleEJ5Q29uc3RhbnQodmFsdWUuZXhwcmVzc2lvbiwgdmFsdWUuY29uc3RhbnQpOwogICAgICBfd3JpdGVJbnRJbnRlcm5hbChpbmRleCk7CiAgICB9IGVsc2UgewogICAgICBfd3JpdGVFbnVtSW50ZXJuYWwoX1RyZWVOb2RlS2luZC5ub2RlKTsKICAgICAgbWVtYmVyRGF0YSA/Pz0gX2dldE1lbWJlckRhdGEodmFsdWUpOwogICAgICBpbnQgaW5kZXggPSBtZW1iZXJEYXRhLmdldEluZGV4QnlUcmVlTm9kZSh2YWx1ZSk7CiAgICAgIGFzc2VydCgKICAgICAgICAgIGluZGV4ICE9IG51bGwsCiAgICAgICAgICAiTm8gVHJlZU5vZGUgaW5kZXggZm91bmQgZm9yICR7dmFsdWUucnVudGltZVR5cGV9ICIKICAgICAgICAgICJmb3VuZCBpbiAke21lbWJlckRhdGF9LiIpOwogICAgICBfd3JpdGVJbnRJbnRlcm5hbChpbmRleCk7CiAgICB9CiAgfQoKICB2b2lkIF93cml0ZUZ1bmN0aW9uTm9kZShpci5GdW5jdGlvbk5vZGUgdmFsdWUsIF9NZW1iZXJEYXRhIG1lbWJlckRhdGEpIHsKICAgIGlyLlRyZWVOb2RlIHBhcmVudCA9IHZhbHVlLnBhcmVudDsKICAgIGlmIChwYXJlbnQgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICAgIF93cml0ZUVudW1JbnRlcm5hbChfRnVuY3Rpb25Ob2RlS2luZC5wcm9jZWR1cmUpOwogICAgICBfd3JpdGVNZW1iZXJOb2RlKHBhcmVudCk7CiAgICB9IGVsc2UgaWYgKHBhcmVudCBpcyBpci5Db25zdHJ1Y3RvcikgewogICAgICBfd3JpdGVFbnVtSW50ZXJuYWwoX0Z1bmN0aW9uTm9kZUtpbmQuY29uc3RydWN0b3IpOwogICAgICBfd3JpdGVNZW1iZXJOb2RlKHBhcmVudCk7CiAgICB9IGVsc2UgaWYgKHBhcmVudCBpcyBpci5GdW5jdGlvbkV4cHJlc3Npb24pIHsKICAgICAgX3dyaXRlRW51bUludGVybmFsKF9GdW5jdGlvbk5vZGVLaW5kLmZ1bmN0aW9uRXhwcmVzc2lvbik7CiAgICAgIF93cml0ZVRyZWVOb2RlKHBhcmVudCwgbWVtYmVyRGF0YSk7CiAgICB9IGVsc2UgaWYgKHBhcmVudCBpcyBpci5GdW5jdGlvbkRlY2xhcmF0aW9uKSB7CiAgICAgIF93cml0ZUVudW1JbnRlcm5hbChfRnVuY3Rpb25Ob2RlS2luZC5mdW5jdGlvbkRlY2xhcmF0aW9uKTsKICAgICAgX3dyaXRlVHJlZU5vZGUocGFyZW50LCBtZW1iZXJEYXRhKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgIlVuc3VwcG9ydGVkIEZ1bmN0aW9uTm9kZSBwYXJlbnQgJHtwYXJlbnQucnVudGltZVR5cGV9Iik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVHlwZVBhcmFtZXRlck5vZGUoaXIuVHlwZVBhcmFtZXRlciB2YWx1ZSkgewogICAgX3dyaXRlRGF0YUtpbmQoRGF0YUtpbmQudHlwZVBhcmFtZXRlck5vZGUpOwogICAgX3dyaXRlVHlwZVBhcmFtZXRlcih2YWx1ZSwgbnVsbCk7CiAgfQoKICB2b2lkIF93cml0ZVR5cGVQYXJhbWV0ZXIoaXIuVHlwZVBhcmFtZXRlciB2YWx1ZSwgX01lbWJlckRhdGEgbWVtYmVyRGF0YSkgewogICAgaXIuVHJlZU5vZGUgcGFyZW50ID0gdmFsdWUucGFyZW50OwogICAgaWYgKHBhcmVudCBpcyBpci5DbGFzcykgewogICAgICBfd3JpdGVFbnVtSW50ZXJuYWwoX1R5cGVQYXJhbWV0ZXJLaW5kLmNscyk7CiAgICAgIF93cml0ZUNsYXNzTm9kZShwYXJlbnQpOwogICAgICBfd3JpdGVJbnRJbnRlcm5hbChwYXJlbnQudHlwZVBhcmFtZXRlcnMuaW5kZXhPZih2YWx1ZSkpOwogICAgfSBlbHNlIGlmIChwYXJlbnQgaXMgaXIuRnVuY3Rpb25Ob2RlKSB7CiAgICAgIF93cml0ZUVudW1JbnRlcm5hbChfVHlwZVBhcmFtZXRlcktpbmQuZnVuY3Rpb25Ob2RlKTsKICAgICAgX3dyaXRlRnVuY3Rpb25Ob2RlKHBhcmVudCwgbWVtYmVyRGF0YSk7CiAgICAgIF93cml0ZUludEludGVybmFsKHBhcmVudC50eXBlUGFyYW1ldGVycy5pbmRleE9mKHZhbHVlKSk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAgICJVbnN1cHBvcnRlZCBUeXBlUGFyYW1ldGVyIHBhcmVudCAke3BhcmVudC5ydW50aW1lVHlwZX0iKTsKICAgIH0KICB9CgogIHZvaWQgX3dyaXRlRGF0YUtpbmQoRGF0YUtpbmQga2luZCkgewogICAgaWYgKHVzZURhdGFLaW5kcykgX3dyaXRlRW51bUludGVybmFsKGtpbmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUxpYnJhcnkoSW5kZXhlZExpYnJhcnkgdmFsdWUpIHsKICAgIF9lbnRpdHlXcml0ZXIud3JpdGVMaWJyYXJ5VG9EYXRhU2luayh0aGlzLCB2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlQ2xhc3MoSW5kZXhlZENsYXNzIHZhbHVlKSB7CiAgICBfZW50aXR5V3JpdGVyLndyaXRlQ2xhc3NUb0RhdGFTaW5rKHRoaXMsIHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUeXBlZGVmKEluZGV4ZWRUeXBlZGVmIHZhbHVlKSB7CiAgICBfZW50aXR5V3JpdGVyLndyaXRlVHlwZWRlZlRvRGF0YVNpbmsodGhpcywgdmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZU1lbWJlcihJbmRleGVkTWVtYmVyIHZhbHVlKSB7CiAgICBfZW50aXR5V3JpdGVyLndyaXRlTWVtYmVyVG9EYXRhU2luayh0aGlzLCB2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVHlwZVZhcmlhYmxlKEluZGV4ZWRUeXBlVmFyaWFibGUgdmFsdWUpIHsKICAgIF9lbnRpdHlXcml0ZXIud3JpdGVUeXBlVmFyaWFibGVUb0RhdGFTaW5rKHRoaXMsIHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVMb2NhbChMb2NhbCBsb2NhbCkgewogICAgaWYgKGxvY2FsIGlzIEpMb2NhbCkgewogICAgICB3cml0ZUVudW0oTG9jYWxLaW5kLmpMb2NhbCk7CiAgICAgIHdyaXRlTWVtYmVyKGxvY2FsLm1lbWJlckNvbnRleHQpOwogICAgICB3cml0ZUludChsb2NhbC5sb2NhbEluZGV4KTsKICAgIH0gZWxzZSBpZiAobG9jYWwgaXMgVGhpc0xvY2FsKSB7CiAgICAgIHdyaXRlRW51bShMb2NhbEtpbmQudGhpc0xvY2FsKTsKICAgICAgd3JpdGVDbGFzcyhsb2NhbC5lbmNsb3NpbmdDbGFzcyk7CiAgICB9IGVsc2UgaWYgKGxvY2FsIGlzIEJveExvY2FsKSB7CiAgICAgIHdyaXRlRW51bShMb2NhbEtpbmQuYm94TG9jYWwpOwogICAgICB3cml0ZUNsYXNzKGxvY2FsLmNvbnRhaW5lcik7CiAgICB9IGVsc2UgaWYgKGxvY2FsIGlzIEFub255bW91c0Nsb3N1cmVMb2NhbCkgewogICAgICB3cml0ZUVudW0oTG9jYWxLaW5kLmFub255bW91c0Nsb3N1cmVMb2NhbCk7CiAgICAgIHdyaXRlQ2xhc3MobG9jYWwuY2xvc3VyZUNsYXNzKTsKICAgIH0gZWxzZSBpZiAobG9jYWwgaXMgVHlwZVZhcmlhYmxlTG9jYWwpIHsKICAgICAgd3JpdGVFbnVtKExvY2FsS2luZC50eXBlVmFyaWFibGVMb2NhbCk7CiAgICAgIHdyaXRlRGFydFR5cGUobG9jYWwudHlwZVZhcmlhYmxlKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJVbnN1cHBvcnRlZCBsb2NhbCAke2xvY2FsLnJ1bnRpbWVUeXBlfSIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUNvbnN0YW50KENvbnN0YW50VmFsdWUgdmFsdWUpIHsKICAgIF93cml0ZURhdGFLaW5kKERhdGFLaW5kLmNvbnN0YW50KTsKICAgIF93cml0ZUNvbnN0YW50KHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVEb3VibGVWYWx1ZShkb3VibGUgdmFsdWUpIHsKICAgIF93cml0ZURhdGFLaW5kKERhdGFLaW5kLmRvdWJsZSk7CiAgICBfd3JpdGVEb3VibGVWYWx1ZSh2YWx1ZSk7CiAgfQoKICB2b2lkIF93cml0ZURvdWJsZVZhbHVlKGRvdWJsZSB2YWx1ZSkgewogICAgQnl0ZURhdGEgZGF0YSA9IG5ldyBCeXRlRGF0YSg4KTsKICAgIGRhdGEuc2V0RmxvYXQ2NCgwLCB2YWx1ZSk7CiAgICB3cml0ZUludChkYXRhLmdldFVpbnQxNigwKSk7CiAgICB3cml0ZUludChkYXRhLmdldFVpbnQxNigyKSk7CiAgICB3cml0ZUludChkYXRhLmdldFVpbnQxNig0KSk7CiAgICB3cml0ZUludChkYXRhLmdldFVpbnQxNig2KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlSW50ZWdlclZhbHVlKGludCB2YWx1ZSkgewogICAgX3dyaXRlRGF0YUtpbmQoRGF0YUtpbmQuaW50KTsKICAgIF93cml0ZUJpZ0ludChuZXcgQmlnSW50LmZyb20odmFsdWUpKTsKICB9CgogIHZvaWQgX3dyaXRlQmlnSW50KEJpZ0ludCB2YWx1ZSkgewogICAgd3JpdGVTdHJpbmcodmFsdWUudG9TdHJpbmcoKSk7CiAgfQoKICB2b2lkIF93cml0ZUNvbnN0YW50KENvbnN0YW50VmFsdWUgdmFsdWUpIHsKICAgIF9jb25zdGFudEluZGV4LndyaXRlKHZhbHVlLCBfd3JpdGVDb25zdGFudEludGVybmFsKTsKICB9CgogIHZvaWQgX3dyaXRlQ29uc3RhbnRJbnRlcm5hbChDb25zdGFudFZhbHVlIHZhbHVlKSB7CiAgICBfd3JpdGVFbnVtSW50ZXJuYWwodmFsdWUua2luZCk7CiAgICBzd2l0Y2ggKHZhbHVlLmtpbmQpIHsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5CT09MOgogICAgICAgIEJvb2xDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gdmFsdWU7CiAgICAgICAgd3JpdGVCb29sKGNvbnN0YW50LmJvb2xWYWx1ZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuSU5UOgogICAgICAgIEludENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSB2YWx1ZTsKICAgICAgICBfd3JpdGVCaWdJbnQoY29uc3RhbnQuaW50VmFsdWUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLkRPVUJMRToKICAgICAgICBEb3VibGVDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gdmFsdWU7CiAgICAgICAgX3dyaXRlRG91YmxlVmFsdWUoY29uc3RhbnQuZG91YmxlVmFsdWUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLlNUUklORzoKICAgICAgICBTdHJpbmdDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gdmFsdWU7CiAgICAgICAgd3JpdGVTdHJpbmcoY29uc3RhbnQuc3RyaW5nVmFsdWUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLk5VTEw6CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuRlVOQ1RJT046CiAgICAgICAgRnVuY3Rpb25Db25zdGFudFZhbHVlIGNvbnN0YW50ID0gdmFsdWU7CiAgICAgICAgSW5kZXhlZEZ1bmN0aW9uIGZ1bmN0aW9uID0gY29uc3RhbnQuZWxlbWVudDsKICAgICAgICB3cml0ZU1lbWJlcihmdW5jdGlvbik7CiAgICAgICAgd3JpdGVEYXJ0VHlwZShjb25zdGFudC50eXBlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5MSVNUOgogICAgICAgIExpc3RDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gdmFsdWU7CiAgICAgICAgd3JpdGVEYXJ0VHlwZShjb25zdGFudC50eXBlKTsKICAgICAgICB3cml0ZUNvbnN0YW50cyhjb25zdGFudC5lbnRyaWVzKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5TRVQ6CiAgICAgICAgY29uc3RhbnRfc3lzdGVtLkphdmFTY3JpcHRTZXRDb25zdGFudCBjb25zdGFudCA9IHZhbHVlOwogICAgICAgIHdyaXRlRGFydFR5cGUoY29uc3RhbnQudHlwZSk7CiAgICAgICAgd3JpdGVDb25zdGFudChjb25zdGFudC5lbnRyaWVzKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5NQVA6CiAgICAgICAgY29uc3RhbnRfc3lzdGVtLkphdmFTY3JpcHRNYXBDb25zdGFudCBjb25zdGFudCA9IHZhbHVlOwogICAgICAgIHdyaXRlRGFydFR5cGUoY29uc3RhbnQudHlwZSk7CiAgICAgICAgd3JpdGVDb25zdGFudChjb25zdGFudC5rZXlMaXN0KTsKICAgICAgICB3cml0ZUNvbnN0YW50cyhjb25zdGFudC52YWx1ZXMpOwogICAgICAgIHdyaXRlQ29uc3RhbnRPck51bGwoY29uc3RhbnQucHJvdG9WYWx1ZSk7CiAgICAgICAgd3JpdGVCb29sKGNvbnN0YW50Lm9ubHlTdHJpbmdLZXlzKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5DT05TVFJVQ1RFRDoKICAgICAgICBDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSB2YWx1ZTsKICAgICAgICB3cml0ZURhcnRUeXBlKGNvbnN0YW50LnR5cGUpOwogICAgICAgIHdyaXRlTWVtYmVyTWFwKGNvbnN0YW50LmZpZWxkcywKICAgICAgICAgICAgKE1lbWJlckVudGl0eSBtZW1iZXIsIENvbnN0YW50VmFsdWUgdmFsdWUpID0+IHdyaXRlQ29uc3RhbnQodmFsdWUpKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5UWVBFOgogICAgICAgIFR5cGVDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gdmFsdWU7CiAgICAgICAgd3JpdGVEYXJ0VHlwZShjb25zdGFudC5yZXByZXNlbnRlZFR5cGUpOwogICAgICAgIHdyaXRlRGFydFR5cGUoY29uc3RhbnQudHlwZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuSU5TVEFOVElBVElPTjoKICAgICAgICBJbnN0YW50aWF0aW9uQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IHZhbHVlOwogICAgICAgIHdyaXRlRGFydFR5cGVzKGNvbnN0YW50LnR5cGVBcmd1bWVudHMpOwogICAgICAgIHdyaXRlQ29uc3RhbnQoY29uc3RhbnQuZnVuY3Rpb24pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLk5PTl9DT05TVEFOVDoKICAgICAgICBicmVhazsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5JTlRFUkNFUFRPUjoKICAgICAgICBJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgY29uc3RhbnQgPSB2YWx1ZTsKICAgICAgICB3cml0ZUNsYXNzKGNvbnN0YW50LmNscyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuREVGRVJSRURfR0xPQkFMOgogICAgICAgIERlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IHZhbHVlOwogICAgICAgIHdyaXRlQ29uc3RhbnQoY29uc3RhbnQucmVmZXJlbmNlZCk7CiAgICAgICAgd3JpdGVPdXRwdXRVbml0UmVmZXJlbmNlKGNvbnN0YW50LnVuaXQpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLkRVTU1ZX0lOVEVSQ0VQVE9SOgogICAgICAgIER1bW15SW50ZXJjZXB0b3JDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gdmFsdWU7CiAgICAgICAgd3JpdGVBYnN0cmFjdFZhbHVlKGNvbnN0YW50LmFic3RyYWN0VmFsdWUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLlVOUkVBQ0hBQkxFOgogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLkpTX05BTUU6CiAgICAgICAgSnNOYW1lQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IHZhbHVlOwogICAgICAgIHdyaXRlSnNOb2RlKGNvbnN0YW50Lm5hbWUpOwogICAgICAgIGJyZWFrOwogICAgfQogIH0KCiAgdm9pZCBfd3JpdGVTdHJpbmcoU3RyaW5nIHZhbHVlKSB7CiAgICBfc3RyaW5nSW5kZXgud3JpdGUodmFsdWUsIF93cml0ZVN0cmluZ0ludGVybmFsKTsKICB9CgogIHZvaWQgX3dyaXRlVXJpKFVyaSB2YWx1ZSkgewogICAgX3VyaUluZGV4LndyaXRlKHZhbHVlLCBfd3JpdGVVcmlJbnRlcm5hbCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlSW1wb3J0KEltcG9ydEVudGl0eSB2YWx1ZSkgewogICAgX3dyaXRlRGF0YUtpbmQoRGF0YUtpbmQuaW1wb3J0KTsKICAgIF93cml0ZUltcG9ydCh2YWx1ZSk7CiAgfQoKICB2b2lkIF93cml0ZUltcG9ydChJbXBvcnRFbnRpdHkgdmFsdWUpIHsKICAgIF9pbXBvcnRJbmRleC53cml0ZSh2YWx1ZSwgX3dyaXRlSW1wb3J0SW50ZXJuYWwpOwogIH0KCiAgdm9pZCBfd3JpdGVJbXBvcnRJbnRlcm5hbChJbXBvcnRFbnRpdHkgdmFsdWUpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IERvIHdlIG5lZWQgdG8gc2VyaWFsaXplIG5vbi1kZWZlcnJlZCBpbXBvcnRzPwogICAgd3JpdGVTdHJpbmdPck51bGwodmFsdWUubmFtZSk7CiAgICBfd3JpdGVVcmkodmFsdWUudXJpKTsKICAgIF93cml0ZVVyaSh2YWx1ZS5lbmNsb3NpbmdMaWJyYXJ5VXJpKTsKICAgIF93cml0ZUJvb2wodmFsdWUuaXNEZWZlcnJlZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyRW50aXR5V3JpdGVyKEVudGl0eVdyaXRlciB3cml0ZXIpIHsKICAgIGFzc2VydCh3cml0ZXIgIT0gbnVsbCk7CiAgICBfZW50aXR5V3JpdGVyID0gd3JpdGVyOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckNvZGVnZW5Xcml0ZXIoQ29kZWdlbldyaXRlciB3cml0ZXIpIHsKICAgIGFzc2VydCh3cml0ZXIgIT0gbnVsbCk7CiAgICBhc3NlcnQoX2NvZGVnZW5Xcml0ZXIgPT0gbnVsbCk7CiAgICBfY29kZWdlbldyaXRlciA9IHdyaXRlcjsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVPdXRwdXRVbml0UmVmZXJlbmNlKE91dHB1dFVuaXQgdmFsdWUpIHsKICAgIGFzc2VydCgKICAgICAgICBfY29kZWdlbldyaXRlciAhPSBudWxsLAogICAgICAgICJDYW4gbm90IHNlcmlhbGl6ZSBhbiBPdXRwdXRVbml0IHJlZmVyZW5jZSAiCiAgICAgICAgIndpdGhvdXQgYSByZWdpc3RlcmVkIGNvZGVnZW4gd3JpdGVyLiIpOwogICAgX2NvZGVnZW5Xcml0ZXIud3JpdGVPdXRwdXRVbml0UmVmZXJlbmNlKHRoaXMsIHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVBYnN0cmFjdFZhbHVlKEFic3RyYWN0VmFsdWUgdmFsdWUpIHsKICAgIGFzc2VydChfY29kZWdlbldyaXRlciAhPSBudWxsLAogICAgICAgICJDYW4gbm90IHNlcmlhbGl6ZSBhbiBBYnN0cmFjdFZhbHVlIHdpdGhvdXQgYSByZWdpc3RlcmVkIGNvZGVnZW4gd3JpdGVyLiIpOwogICAgX2NvZGVnZW5Xcml0ZXIud3JpdGVBYnN0cmFjdFZhbHVlKHRoaXMsIHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVKc05vZGUoanMuTm9kZSB2YWx1ZSkgewogICAgYXNzZXJ0KF9jb2RlZ2VuV3JpdGVyICE9IG51bGwsCiAgICAgICAgIkNhbiBub3Qgc2VyaWFsaXplIGEgSlMgbmRvZSB3aXRob3V0IGEgcmVnaXN0ZXJlZCBjb2RlZ2VuIHdyaXRlci4iKTsKICAgIF9jb2RlZ2VuV3JpdGVyLndyaXRlSnNOb2RlKHRoaXMsIHZhbHVlKTsKICB9CgogIC8vLyBBY3R1YWwgc2VyaWFsaXphdGlvbiBvZiBhIHNlY3Rpb24gYmVnaW4gdGFnLCBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzLgogIHZvaWQgX2JlZ2luKFN0cmluZyB0YWcpOwoKICAvLy8gQWN0dWFsIHNlcmlhbGl6YXRpb24gb2YgYSBzZWN0aW9uIGVuZCB0YWcsIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuCiAgdm9pZCBfZW5kKFN0cmluZyB0YWcpOwoKICAvLy8gQWN0dWFsIHNlcmlhbGl6YXRpb24gb2YgYSBVUkkgdmFsdWUsIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuCiAgdm9pZCBfd3JpdGVVcmlJbnRlcm5hbChVcmkgdmFsdWUpOwoKICAvLy8gQWN0dWFsIHNlcmlhbGl6YXRpb24gb2YgYSBTdHJpbmcgdmFsdWUsIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuCiAgdm9pZCBfd3JpdGVTdHJpbmdJbnRlcm5hbChTdHJpbmcgdmFsdWUpOwoKICAvLy8gQWN0dWFsIHNlcmlhbGl6YXRpb24gb2YgYSBub24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSwgaW1wbGVtZW50ZWQgYnkKICAvLy8gc3ViY2xhc3Nlcy4KICB2b2lkIF93cml0ZUludEludGVybmFsKGludCB2YWx1ZSk7CgogIC8vLyBBY3R1YWwgc2VyaWFsaXphdGlvbiBvZiBhbiBlbnVtIHZhbHVlLCBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzLgogIHZvaWQgX3dyaXRlRW51bUludGVybmFsKGR5bmFtaWMgdmFsdWUpOwp9CoKDAE5OPAEeAUkZTE4NBkwbGwEwIgEzKgFRQRYBRjABJB4rKi0BLgE1IAEqASMiAUcwODIsOTg7BAEMGyMiHgYYHBYTBgQBDBkYEQEvIUUGBAEMNjg0JR8JKC4EASYqNEkwBAEMMkckBAEMKykaJCIEAQxAJzUEARdIIRkYSAgkDTsGBAEMRys5BAEbRyEZGFAIKA1BBgQBDCopHQQBKz0EATMpFzEcLw01MS8GBAEMKCgcBAEpLx4EAQwsKh4EAS0vHgQBDCwqHgQBLSAEAQwiKB8EAQwfGyMXBAEgJgQBDB0bIhYEAQwjGyUZBAEMHRssJR4EAQwqJyEEAQwzPgQBJzMnJwQBDDkeGUAGBAEMPSEaGRMNHypCCAYEAQxOIRcZEw0cL0ASCgYEATEfIxxGLAgeBh48BAFDHS0eJTAfMjJFMCs2LSw3Li0yNzQSSyANLiw4Dhk+JiAGBAFLJyI3ICs5IDJAKjNBKg0iRAYEAQw4MCYEAU0nHjIfPyw7Lj8NIkUGBAEnMAQBDCw3BAEMKDUEAQwsNwQBDCo2BAEMNjwEAQwhGyMoIiUmKCQlIzEyJi0uKQ1MBgQBDCwnGwQBDCglHgQBKSUfISEhIQQBDCYiKgQBJCMEAS05BAE1JBojLCcPIispDyUuMQ8lLisPIw8nMDUfJg8jLCYqDyJAJikPIkAmKSkyLA8qMyYoUQ8jLDEmDyw1MCoPKw8qMyIPLjYsMQ8wODQPKg8mLiQPBgQBJDUEAR4vBAEMKSUZBAEqNQQBMkojGioiBAEMMxwcBAEMNRwkHQQBDDQMIDUxOgQBDDEjVDQEAQwkI00tBAFOGwFMGQFGJQFJKwFLEiUBSCoCATVwYWNrYWdlOmNvbXBpbGVyL3NyYy9zZXJpYWxpemF0aW9uL2Fic3RyYWN0X3NpbmsuZGFydEBzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zZXJpYWxpemF0aW9uL2Fic3RyYWN0X3NvdXJjZS5kYXJ0wABm7y8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mICdzZXJpYWxpemF0aW9uLmRhcnQnOwoKLy8vIEJhc2UgaW1wbGVtZW50YXRpb24gb2YgW0RhdGFTb3VyY2VdIHVzaW5nIFtEYXRhU291cmNlTWl4aW5dIHRvIGltcGxlbWVudAovLy8gY29udmVuaWVuY2UgbWV0aG9kcy4KYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3REYXRhU291cmNlIGV4dGVuZHMgRGF0YVNvdXJjZU1peGluCiAgICBpbXBsZW1lbnRzIERhdGFTb3VyY2UgewogIGZpbmFsIGJvb2wgdXNlRGF0YUtpbmRzOwogIEVudGl0eVJlYWRlciBfZW50aXR5UmVhZGVyID0gY29uc3QgRW50aXR5UmVhZGVyKCk7CiAgQ29tcG9uZW50TG9va3VwIF9jb21wb25lbnRMb29rdXA7CiAgRW50aXR5TG9va3VwIF9lbnRpdHlMb29rdXA7CiAgTG9jYWxMb29rdXAgX2xvY2FsTG9va3VwOwogIENvZGVnZW5SZWFkZXIgX2NvZGVnZW5SZWFkZXI7CgogIEluZGV4ZWRTb3VyY2U8U3RyaW5nPiBfc3RyaW5nSW5kZXg7CiAgSW5kZXhlZFNvdXJjZTxVcmk+IF91cmlJbmRleDsKICBJbmRleGVkU291cmNlPF9NZW1iZXJEYXRhPiBfbWVtYmVyTm9kZUluZGV4OwogIEluZGV4ZWRTb3VyY2U8SW1wb3J0RW50aXR5PiBfaW1wb3J0SW5kZXg7CiAgSW5kZXhlZFNvdXJjZTxDb25zdGFudFZhbHVlPiBfY29uc3RhbnRJbmRleDsKCiAgTWFwPFR5cGUsIEluZGV4ZWRTb3VyY2U+IF9nZW5lcmFsQ2FjaGVzID0ge307CgogIGlyLk1lbWJlciBfY3VycmVudE1lbWJlckNvbnRleHQ7CiAgX01lbWJlckRhdGEgX2N1cnJlbnRNZW1iZXJEYXRhOwoKICBBYnN0cmFjdERhdGFTb3VyY2Uoe3RoaXMudXNlRGF0YUtpbmRzOiBmYWxzZX0pIHsKICAgIF9zdHJpbmdJbmRleCA9IG5ldyBJbmRleGVkU291cmNlPFN0cmluZz4odGhpcyk7CiAgICBfdXJpSW5kZXggPSBuZXcgSW5kZXhlZFNvdXJjZTxVcmk+KHRoaXMpOwogICAgX21lbWJlck5vZGVJbmRleCA9IG5ldyBJbmRleGVkU291cmNlPF9NZW1iZXJEYXRhPih0aGlzKTsKICAgIF9pbXBvcnRJbmRleCA9IG5ldyBJbmRleGVkU291cmNlPEltcG9ydEVudGl0eT4odGhpcyk7CiAgICBfY29uc3RhbnRJbmRleCA9IG5ldyBJbmRleGVkU291cmNlPENvbnN0YW50VmFsdWU+KHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbihTdHJpbmcgdGFnKSB7CiAgICBpZiAodXNlRGF0YUtpbmRzKSBfYmVnaW4odGFnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kKFN0cmluZyB0YWcpIHsKICAgIGlmICh1c2VEYXRhS2luZHMpIF9lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJDb21wb25lbnRMb29rdXAoQ29tcG9uZW50TG9va3VwIGNvbXBvbmVudExvb2t1cCkgewogICAgYXNzZXJ0KF9jb21wb25lbnRMb29rdXAgPT0gbnVsbCk7CiAgICBfY29tcG9uZW50TG9va3VwID0gY29tcG9uZW50TG9va3VwOwogIH0KCiAgQ29tcG9uZW50TG9va3VwIGdldCBjb21wb25lbnRMb29rdXAgewogICAgYXNzZXJ0KF9jb21wb25lbnRMb29rdXAgIT0gbnVsbCk7CiAgICByZXR1cm4gX2NvbXBvbmVudExvb2t1cDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJFbnRpdHlMb29rdXAoRW50aXR5TG9va3VwIGVudGl0eUxvb2t1cCkgewogICAgYXNzZXJ0KF9lbnRpdHlMb29rdXAgPT0gbnVsbCk7CiAgICBfZW50aXR5TG9va3VwID0gZW50aXR5TG9va3VwOwogIH0KCiAgRW50aXR5TG9va3VwIGdldCBlbnRpdHlMb29rdXAgewogICAgYXNzZXJ0KF9lbnRpdHlMb29rdXAgIT0gbnVsbCk7CiAgICByZXR1cm4gX2VudGl0eUxvb2t1cDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJMb2NhbExvb2t1cChMb2NhbExvb2t1cCBsb2NhbExvb2t1cCkgewogICAgYXNzZXJ0KF9sb2NhbExvb2t1cCA9PSBudWxsKTsKICAgIF9sb2NhbExvb2t1cCA9IGxvY2FsTG9va3VwOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckVudGl0eVJlYWRlcihFbnRpdHlSZWFkZXIgcmVhZGVyKSB7CiAgICBhc3NlcnQocmVhZGVyICE9IG51bGwpOwogICAgX2VudGl0eVJlYWRlciA9IHJlYWRlcjsKICB9CgogIExvY2FsTG9va3VwIGdldCBsb2NhbExvb2t1cCB7CiAgICBhc3NlcnQoX2xvY2FsTG9va3VwICE9IG51bGwpOwogICAgcmV0dXJuIF9sb2NhbExvb2t1cDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJDb2RlZ2VuUmVhZGVyKENvZGVnZW5SZWFkZXIgcmVhZGVyKSB7CiAgICBhc3NlcnQocmVhZGVyICE9IG51bGwpOwogICAgYXNzZXJ0KF9jb2RlZ2VuUmVhZGVyID09IG51bGwpOwogICAgX2NvZGVnZW5SZWFkZXIgPSByZWFkZXI7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGRlcmVnaXN0ZXJDb2RlZ2VuUmVhZGVyKENvZGVnZW5SZWFkZXIgcmVhZGVyKSB7CiAgICBhc3NlcnQoX2NvZGVnZW5SZWFkZXIgPT0gcmVhZGVyKTsKICAgIF9jb2RlZ2VuUmVhZGVyID0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIFQgaW5NZW1iZXJDb250ZXh0PFQ+KGlyLk1lbWJlciBjb250ZXh0LCBUIGYoKSkgewogICAgaXIuTWVtYmVyIG9sZE1lbWJlckNvbnRleHQgPSBfY3VycmVudE1lbWJlckNvbnRleHQ7CiAgICBfTWVtYmVyRGF0YSBvbGRNZW1iZXJEYXRhID0gX2N1cnJlbnRNZW1iZXJEYXRhOwogICAgX2N1cnJlbnRNZW1iZXJDb250ZXh0ID0gY29udGV4dDsKICAgIF9jdXJyZW50TWVtYmVyRGF0YSA9IG51bGw7CiAgICBUIHJlc3VsdCA9IGYoKTsKICAgIF9jdXJyZW50TWVtYmVyRGF0YSA9IG9sZE1lbWJlckRhdGE7CiAgICBfY3VycmVudE1lbWJlckNvbnRleHQgPSBvbGRNZW1iZXJDb250ZXh0OwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIF9NZW1iZXJEYXRhIGdldCBjdXJyZW50TWVtYmVyRGF0YSB7CiAgICBhc3NlcnQoX2N1cnJlbnRNZW1iZXJDb250ZXh0ICE9IG51bGwsCiAgICAgICAgIkRhdGFTaW5rIGhhcyBubyBjdXJyZW50IG1lbWJlciBjb250ZXh0LiIpOwogICAgcmV0dXJuIF9jdXJyZW50TWVtYmVyRGF0YSA/Pz0gX2dldE1lbWJlckRhdGEoX2N1cnJlbnRNZW1iZXJDb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIEUgcmVhZENhY2hlZDxFPihFIGYoKSkgewogICAgSW5kZXhlZFNvdXJjZSBzb3VyY2UgPSBfZ2VuZXJhbENhY2hlc1tFXSA/Pz0gbmV3IEluZGV4ZWRTb3VyY2U8RT4odGhpcyk7CiAgICByZXR1cm4gc291cmNlLnJlYWQoZik7CiAgfQoKICBAb3ZlcnJpZGUKICBJbmRleGVkTGlicmFyeSByZWFkTGlicmFyeSgpIHsKICAgIHJldHVybiBfZW50aXR5UmVhZGVyLnJlYWRMaWJyYXJ5RnJvbURhdGFTb3VyY2UodGhpcywgZW50aXR5TG9va3VwKTsKICB9CgogIEBvdmVycmlkZQogIEluZGV4ZWRDbGFzcyByZWFkQ2xhc3MoKSB7CiAgICByZXR1cm4gX2VudGl0eVJlYWRlci5yZWFkQ2xhc3NGcm9tRGF0YVNvdXJjZSh0aGlzLCBlbnRpdHlMb29rdXApOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5kZXhlZFR5cGVkZWYgcmVhZFR5cGVkZWYoKSB7CiAgICByZXR1cm4gX2VudGl0eVJlYWRlci5yZWFkVHlwZWRlZkZyb21EYXRhU291cmNlKHRoaXMsIGVudGl0eUxvb2t1cCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbmRleGVkTWVtYmVyIHJlYWRNZW1iZXIoKSB7CiAgICByZXR1cm4gX2VudGl0eVJlYWRlci5yZWFkTWVtYmVyRnJvbURhdGFTb3VyY2UodGhpcywgZW50aXR5TG9va3VwKTsKICB9CgogIEBvdmVycmlkZQogIEluZGV4ZWRUeXBlVmFyaWFibGUgcmVhZFR5cGVWYXJpYWJsZSgpIHsKICAgIHJldHVybiBfZW50aXR5UmVhZGVyLnJlYWRUeXBlVmFyaWFibGVGcm9tRGF0YVNvdXJjZSh0aGlzLCBlbnRpdHlMb29rdXApOwogIH0KCiAgTGlzdDxEYXJ0VHlwZT4gX3JlYWREYXJ0VHlwZXMoCiAgICAgIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZXMgPSBuZXcgTGlzdDxEYXJ0VHlwZT4oY291bnQpOwogICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyBpbmRleCsrKSB7CiAgICAgIHR5cGVzW2luZGV4XSA9IF9yZWFkRGFydFR5cGUoZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgIH0KICAgIHJldHVybiB0eXBlczsKICB9CgogIExpc3Q8aXIuRGFydFR5cGU+IF9yZWFkRGFydFR5cGVOb2RlcygKICAgICAgTGlzdDxpci5UeXBlUGFyYW1ldGVyPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMpIHsKICAgIGludCBjb3VudCA9IHJlYWRJbnQoKTsKICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVzID0gbmV3IExpc3Q8aXIuRGFydFR5cGU+KGNvdW50KTsKICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgaW5kZXgrKykgewogICAgICB0eXBlc1tpbmRleF0gPSBfcmVhZERhcnRUeXBlTm9kZShmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgfQogICAgcmV0dXJuIHR5cGVzOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlU3BhbiByZWFkU291cmNlU3BhbigpIHsKICAgIF9jaGVja0RhdGFLaW5kKERhdGFLaW5kLnNvdXJjZVNwYW4pOwogICAgVXJpIHVyaSA9IF9yZWFkVXJpKCk7CiAgICBpbnQgYmVnaW4gPSBfcmVhZEludEludGVybmFsKCk7CiAgICBpbnQgZW5kID0gX3JlYWRJbnRJbnRlcm5hbCgpOwogICAgcmV0dXJuIG5ldyBTb3VyY2VTcGFuKHVyaSwgYmVnaW4sIGVuZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSByZWFkRGFydFR5cGUoe2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIF9jaGVja0RhdGFLaW5kKERhdGFLaW5kLmRhcnRUeXBlKTsKICAgIERhcnRUeXBlIHR5cGUgPSBfcmVhZERhcnRUeXBlKFtdKTsKICAgIGFzc2VydCh0eXBlICE9IG51bGwgfHwgYWxsb3dOdWxsKTsKICAgIHJldHVybiB0eXBlOwogIH0KCiAgRGFydFR5cGUgX3JlYWREYXJ0VHlwZShMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMpIHsKICAgIERhcnRUeXBlS2luZCBraW5kID0gcmVhZEVudW0oRGFydFR5cGVLaW5kLnZhbHVlcyk7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBEYXJ0VHlwZUtpbmQubm9uZToKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgY2FzZSBEYXJ0VHlwZUtpbmQudm9pZFR5cGU6CiAgICAgICAgcmV0dXJuIGNvbnN0IFZvaWRUeXBlKCk7CiAgICAgIGNhc2UgRGFydFR5cGVLaW5kLnR5cGVWYXJpYWJsZToKICAgICAgICByZXR1cm4gbmV3IFR5cGVWYXJpYWJsZVR5cGUocmVhZFR5cGVWYXJpYWJsZSgpKTsKICAgICAgY2FzZSBEYXJ0VHlwZUtpbmQuZnVuY3Rpb25UeXBlVmFyaWFibGU6CiAgICAgICAgaW50IGluZGV4ID0gcmVhZEludCgpOwogICAgICAgIGFzc2VydCgwIDw9IGluZGV4ICYmIGluZGV4IDwgZnVuY3Rpb25UeXBlVmFyaWFibGVzLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uVHlwZVZhcmlhYmxlc1tpbmRleF07CiAgICAgIGNhc2UgRGFydFR5cGVLaW5kLmZ1bmN0aW9uVHlwZToKICAgICAgICBpbnQgdHlwZVZhcmlhYmxlQ291bnQgPSByZWFkSW50KCk7CiAgICAgICAgTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gdHlwZVZhcmlhYmxlcyA9CiAgICAgICAgICAgIG5ldyBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPi5nZW5lcmF0ZSh0eXBlVmFyaWFibGVDb3VudCwKICAgICAgICAgICAgICAgIChpbnQgaW5kZXgpID0+IG5ldyBGdW5jdGlvblR5cGVWYXJpYWJsZShpbmRleCkpOwogICAgICAgIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyA9CiAgICAgICAgICAgIG5ldyBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPi5mcm9tKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykKICAgICAgICAgICAgICAuLmFkZEFsbCh0eXBlVmFyaWFibGVzKTsKICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgdHlwZVZhcmlhYmxlQ291bnQ7IGluZGV4KyspIHsKICAgICAgICAgIHR5cGVWYXJpYWJsZXNbaW5kZXhdLmJvdW5kID0gX3JlYWREYXJ0VHlwZShmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgICAgIH0KICAgICAgICBEYXJ0VHlwZSByZXR1cm5UeXBlID0gX3JlYWREYXJ0VHlwZShmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgICAgIExpc3Q8RGFydFR5cGU+IHBhcmFtZXRlclR5cGVzID0gX3JlYWREYXJ0VHlwZXMoZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgICAgICBMaXN0PERhcnRUeXBlPiBvcHRpb25hbFBhcmFtZXRlclR5cGVzID0KICAgICAgICAgICAgX3JlYWREYXJ0VHlwZXMoZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgICAgICBMaXN0PERhcnRUeXBlPiBuYW1lZFBhcmFtZXRlclR5cGVzID0KICAgICAgICAgICAgX3JlYWREYXJ0VHlwZXMoZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgICAgICBMaXN0PFN0cmluZz4gbmFtZWRQYXJhbWV0ZXJzID0KICAgICAgICAgICAgbmV3IExpc3Q8U3RyaW5nPihuYW1lZFBhcmFtZXRlclR5cGVzLmxlbmd0aCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYW1lZFBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIG5hbWVkUGFyYW1ldGVyc1tpXSA9IHJlYWRTdHJpbmcoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvblR5cGUoCiAgICAgICAgICAgIHJldHVyblR5cGUsCiAgICAgICAgICAgIHBhcmFtZXRlclR5cGVzLAogICAgICAgICAgICBvcHRpb25hbFBhcmFtZXRlclR5cGVzLAogICAgICAgICAgICBuYW1lZFBhcmFtZXRlcnMsCiAgICAgICAgICAgIG5hbWVkUGFyYW1ldGVyVHlwZXMsCiAgICAgICAgICAgIHR5cGVWYXJpYWJsZXMpOwoKICAgICAgY2FzZSBEYXJ0VHlwZUtpbmQuaW50ZXJmYWNlVHlwZToKICAgICAgICBJbmRleGVkQ2xhc3MgY2xzID0gcmVhZENsYXNzKCk7CiAgICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9IF9yZWFkRGFydFR5cGVzKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICAgICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlKGNscywgdHlwZUFyZ3VtZW50cyk7CiAgICAgIGNhc2UgRGFydFR5cGVLaW5kLnR5cGVkZWY6CiAgICAgICAgSW5kZXhlZFR5cGVkZWYgdHlwZWRlZiA9IHJlYWRUeXBlZGVmKCk7CiAgICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9IF9yZWFkRGFydFR5cGVzKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICAgICAgRGFydFR5cGUgdW5hbGlhc2VkID0gX3JlYWREYXJ0VHlwZShmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgICAgIHJldHVybiBuZXcgVHlwZWRlZlR5cGUodHlwZWRlZiwgdHlwZUFyZ3VtZW50cywgdW5hbGlhc2VkKTsKICAgICAgY2FzZSBEYXJ0VHlwZUtpbmQuZHluYW1pY1R5cGU6CiAgICAgICAgcmV0dXJuIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICAgIGNhc2UgRGFydFR5cGVLaW5kLmFueVR5cGU6CiAgICAgICAgcmV0dXJuIGNvbnN0IEFueVR5cGUoKTsKICAgICAgY2FzZSBEYXJ0VHlwZUtpbmQuZnV0dXJlT3I6CiAgICAgICAgRGFydFR5cGUgdHlwZUFyZ3VtZW50ID0gX3JlYWREYXJ0VHlwZShmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgICAgIHJldHVybiBuZXcgRnV0dXJlT3JUeXBlKHR5cGVBcmd1bWVudCk7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBEYXJ0VHlwZUtpbmQgJGtpbmQiKTsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHJlYWREYXJ0VHlwZU5vZGUoe2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIF9jaGVja0RhdGFLaW5kKERhdGFLaW5kLmRhcnRUeXBlTm9kZSk7CiAgICBpci5EYXJ0VHlwZSB0eXBlID0gX3JlYWREYXJ0VHlwZU5vZGUoW10pOwogICAgYXNzZXJ0KHR5cGUgIT0gbnVsbCB8fCBhbGxvd051bGwpOwogICAgcmV0dXJuIHR5cGU7CiAgfQoKICBpci5EYXJ0VHlwZSBfcmVhZERhcnRUeXBlTm9kZShMaXN0PGlyLlR5cGVQYXJhbWV0ZXI+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykgewogICAgRGFydFR5cGVOb2RlS2luZCBraW5kID0gcmVhZEVudW0oRGFydFR5cGVOb2RlS2luZC52YWx1ZXMpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgRGFydFR5cGVOb2RlS2luZC5ub25lOgogICAgICAgIHJldHVybiBudWxsOwogICAgICBjYXNlIERhcnRUeXBlTm9kZUtpbmQudm9pZFR5cGU6CiAgICAgICAgcmV0dXJuIGNvbnN0IGlyLlZvaWRUeXBlKCk7CiAgICAgIGNhc2UgRGFydFR5cGVOb2RlS2luZC5pbnZhbGlkVHlwZToKICAgICAgICByZXR1cm4gY29uc3QgaXIuSW52YWxpZFR5cGUoKTsKICAgICAgY2FzZSBEYXJ0VHlwZU5vZGVLaW5kLmJvdHRvbVR5cGU6CiAgICAgICAgcmV0dXJuIGNvbnN0IGlyLkJvdHRvbVR5cGUoKTsKICAgICAgY2FzZSBEYXJ0VHlwZU5vZGVLaW5kLmRvZXNOb3RDb21wbGV0ZToKICAgICAgICByZXR1cm4gY29uc3QgRG9lc05vdENvbXBsZXRlVHlwZSgpOwogICAgICBjYXNlIERhcnRUeXBlTm9kZUtpbmQudHlwZVBhcmFtZXRlclR5cGU6CiAgICAgICAgaXIuVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyID0gcmVhZFR5cGVQYXJhbWV0ZXJOb2RlKCk7CiAgICAgICAgaXIuRGFydFR5cGUgcHJvbW90ZWRCb3VuZCA9IF9yZWFkRGFydFR5cGVOb2RlKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICAgICAgcmV0dXJuIG5ldyBpci5UeXBlUGFyYW1ldGVyVHlwZSh0eXBlUGFyYW1ldGVyLCBwcm9tb3RlZEJvdW5kKTsKICAgICAgY2FzZSBEYXJ0VHlwZU5vZGVLaW5kLmZ1bmN0aW9uVHlwZVZhcmlhYmxlOgogICAgICAgIGludCBpbmRleCA9IHJlYWRJbnQoKTsKICAgICAgICBhc3NlcnQoMCA8PSBpbmRleCAmJiBpbmRleCA8IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcy5sZW5ndGgpOwogICAgICAgIGlyLkRhcnRUeXBlIHByb21vdGVkQm91bmQgPSBfcmVhZERhcnRUeXBlTm9kZShmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgICAgIHJldHVybiBuZXcgaXIuVHlwZVBhcmFtZXRlclR5cGUoCiAgICAgICAgICAgIGZ1bmN0aW9uVHlwZVZhcmlhYmxlc1tpbmRleF0sIHByb21vdGVkQm91bmQpOwogICAgICBjYXNlIERhcnRUeXBlTm9kZUtpbmQuZnVuY3Rpb25UeXBlOgogICAgICAgIGJlZ2luKGZ1bmN0aW9uVHlwZU5vZGVUYWcpOwogICAgICAgIGludCB0eXBlUGFyYW1ldGVyQ291bnQgPSByZWFkSW50KCk7CiAgICAgICAgTGlzdDxpci5UeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycyA9CiAgICAgICAgICAgIG5ldyBMaXN0PGlyLlR5cGVQYXJhbWV0ZXI+LmdlbmVyYXRlKAogICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlckNvdW50LCAoaW50IGluZGV4KSA9PiBuZXcgaXIuVHlwZVBhcmFtZXRlcigpKTsKICAgICAgICBmdW5jdGlvblR5cGVWYXJpYWJsZXMgPQogICAgICAgICAgICBuZXcgTGlzdDxpci5UeXBlUGFyYW1ldGVyPi5mcm9tKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykKICAgICAgICAgICAgICAuLmFkZEFsbCh0eXBlUGFyYW1ldGVycyk7CiAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHR5cGVQYXJhbWV0ZXJDb3VudDsgaW5kZXgrKykgewogICAgICAgICAgdHlwZVBhcmFtZXRlcnNbaW5kZXhdLm5hbWUgPSByZWFkU3RyaW5nKCk7CiAgICAgICAgICB0eXBlUGFyYW1ldGVyc1tpbmRleF0uYm91bmQgPQogICAgICAgICAgICAgIF9yZWFkRGFydFR5cGVOb2RlKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICAgICAgICB0eXBlUGFyYW1ldGVyc1tpbmRleF0uZGVmYXVsdFR5cGUgPQogICAgICAgICAgICAgIF9yZWFkRGFydFR5cGVOb2RlKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICAgICAgfQogICAgICAgIGlyLkRhcnRUeXBlIHJldHVyblR5cGUgPSBfcmVhZERhcnRUeXBlTm9kZShmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgICAgIGludCByZXF1aXJlZFBhcmFtZXRlckNvdW50ID0gcmVhZEludCgpOwogICAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHBvc2l0aW9uYWxQYXJhbWV0ZXJzID0KICAgICAgICAgICAgX3JlYWREYXJ0VHlwZU5vZGVzKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICAgICAgaW50IG5hbWVkUGFyYW1ldGVyQ291bnQgPSByZWFkSW50KCk7CiAgICAgICAgTGlzdDxpci5OYW1lZFR5cGU+IG5hbWVkUGFyYW1ldGVycyA9CiAgICAgICAgICAgIG5ldyBMaXN0PGlyLk5hbWVkVHlwZT4obmFtZWRQYXJhbWV0ZXJDb3VudCk7CiAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IG5hbWVkUGFyYW1ldGVyQ291bnQ7IGluZGV4KyspIHsKICAgICAgICAgIFN0cmluZyBuYW1lID0gcmVhZFN0cmluZygpOwogICAgICAgICAgaXIuRGFydFR5cGUgdHlwZSA9IF9yZWFkRGFydFR5cGVOb2RlKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICAgICAgICBuYW1lZFBhcmFtZXRlcnNbaW5kZXhdID0gbmV3IGlyLk5hbWVkVHlwZShuYW1lLCB0eXBlKTsKICAgICAgICB9CiAgICAgICAgaXIuVHlwZWRlZlR5cGUgdHlwZWRlZlR5cGUgPSBfcmVhZERhcnRUeXBlTm9kZShmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgICAgIGVuZChmdW5jdGlvblR5cGVOb2RlVGFnKTsKICAgICAgICByZXR1cm4gbmV3IGlyLkZ1bmN0aW9uVHlwZShwb3NpdGlvbmFsUGFyYW1ldGVycywgcmV0dXJuVHlwZSwKICAgICAgICAgICAgbmFtZWRQYXJhbWV0ZXJzOiBuYW1lZFBhcmFtZXRlcnMsCiAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzOiB0eXBlUGFyYW1ldGVycywKICAgICAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICAgICAgdHlwZWRlZlR5cGU6IHR5cGVkZWZUeXBlKTsKCiAgICAgIGNhc2UgRGFydFR5cGVOb2RlS2luZC5pbnRlcmZhY2VUeXBlOgogICAgICAgIGlyLkNsYXNzIGNscyA9IHJlYWRDbGFzc05vZGUoKTsKICAgICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0KICAgICAgICAgICAgX3JlYWREYXJ0VHlwZU5vZGVzKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICAgICAgcmV0dXJuIG5ldyBpci5JbnRlcmZhY2VUeXBlKGNscywgdHlwZUFyZ3VtZW50cyk7CiAgICAgIGNhc2UgRGFydFR5cGVOb2RlS2luZC50aGlzSW50ZXJmYWNlVHlwZToKICAgICAgICBpci5DbGFzcyBjbHMgPSByZWFkQ2xhc3NOb2RlKCk7CiAgICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9CiAgICAgICAgICAgIF9yZWFkRGFydFR5cGVOb2RlcyhmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgICAgIHJldHVybiBuZXcgVGhpc0ludGVyZmFjZVR5cGUoY2xzLCB0eXBlQXJndW1lbnRzKTsKICAgICAgY2FzZSBEYXJ0VHlwZU5vZGVLaW5kLmV4YWN0SW50ZXJmYWNlVHlwZToKICAgICAgICBpci5DbGFzcyBjbHMgPSByZWFkQ2xhc3NOb2RlKCk7CiAgICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9CiAgICAgICAgICAgIF9yZWFkRGFydFR5cGVOb2RlcyhmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgICAgIHJldHVybiBuZXcgRXhhY3RJbnRlcmZhY2VUeXBlKGNscywgdHlwZUFyZ3VtZW50cyk7CiAgICAgIGNhc2UgRGFydFR5cGVOb2RlS2luZC50eXBlZGVmOgogICAgICAgIGlyLlR5cGVkZWYgdHlwZWRlZiA9IHJlYWRUeXBlZGVmTm9kZSgpOwogICAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPQogICAgICAgICAgICBfcmVhZERhcnRUeXBlTm9kZXMoZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgICAgICByZXR1cm4gbmV3IGlyLlR5cGVkZWZUeXBlKHR5cGVkZWYsIHR5cGVBcmd1bWVudHMpOwogICAgICBjYXNlIERhcnRUeXBlTm9kZUtpbmQuZHluYW1pY1R5cGU6CiAgICAgICAgcmV0dXJuIGNvbnN0IGlyLkR5bmFtaWNUeXBlKCk7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBEYXJ0VHlwZUtpbmQgJGtpbmQiKTsKICB9CgogIF9NZW1iZXJEYXRhIF9yZWFkTWVtYmVyRGF0YSgpIHsKICAgIHJldHVybiBfbWVtYmVyTm9kZUluZGV4LnJlYWQoX3JlYWRNZW1iZXJEYXRhSW50ZXJuYWwpOwogIH0KCiAgX01lbWJlckRhdGEgX3JlYWRNZW1iZXJEYXRhSW50ZXJuYWwoKSB7CiAgICBNZW1iZXJDb250ZXh0S2luZCBraW5kID0gX3JlYWRFbnVtSW50ZXJuYWwoTWVtYmVyQ29udGV4dEtpbmQudmFsdWVzKTsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIE1lbWJlckNvbnRleHRLaW5kLmNsczoKICAgICAgICBfQ2xhc3NEYXRhIGNscyA9IF9yZWFkQ2xhc3NEYXRhKCk7CiAgICAgICAgU3RyaW5nIG5hbWUgPSBfcmVhZFN0cmluZygpOwogICAgICAgIHJldHVybiBjbHMubG9va3VwTWVtYmVyRGF0YUJ5TmFtZShuYW1lKTsKICAgICAgY2FzZSBNZW1iZXJDb250ZXh0S2luZC5saWJyYXJ5OgogICAgICAgIF9MaWJyYXJ5RGF0YSBsaWJyYXJ5ID0gX3JlYWRMaWJyYXJ5RGF0YSgpOwogICAgICAgIFN0cmluZyBuYW1lID0gX3JlYWRTdHJpbmcoKTsKICAgICAgICByZXR1cm4gbGlicmFyeS5sb29rdXBNZW1iZXJEYXRhQnlOYW1lKG5hbWUpOwogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlVuc3VwcG9ydGVkIF9NZW1iZXJLaW5kICRraW5kIik7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5NZW1iZXIgcmVhZE1lbWJlck5vZGUoKSB7CiAgICBfY2hlY2tEYXRhS2luZChEYXRhS2luZC5tZW1iZXJOb2RlKTsKICAgIHJldHVybiBfcmVhZE1lbWJlckRhdGEoKS5ub2RlOwogIH0KCiAgX0NsYXNzRGF0YSBfcmVhZENsYXNzRGF0YSgpIHsKICAgIF9MaWJyYXJ5RGF0YSBsaWJyYXJ5ID0gX3JlYWRMaWJyYXJ5RGF0YSgpOwogICAgU3RyaW5nIG5hbWUgPSBfcmVhZFN0cmluZygpOwogICAgcmV0dXJuIGxpYnJhcnkubG9va3VwQ2xhc3NCeU5hbWUobmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5DbGFzcyByZWFkQ2xhc3NOb2RlKCkgewogICAgX2NoZWNrRGF0YUtpbmQoRGF0YUtpbmQuY2xhc3NOb2RlKTsKICAgIHJldHVybiBfcmVhZENsYXNzRGF0YSgpLm5vZGU7CiAgfQoKICBpci5UeXBlZGVmIF9yZWFkVHlwZWRlZk5vZGUoKSB7CiAgICBfTGlicmFyeURhdGEgbGlicmFyeSA9IF9yZWFkTGlicmFyeURhdGEoKTsKICAgIFN0cmluZyBuYW1lID0gX3JlYWRTdHJpbmcoKTsKICAgIHJldHVybiBsaWJyYXJ5Lmxvb2t1cFR5cGVkZWYobmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5UeXBlZGVmIHJlYWRUeXBlZGVmTm9kZSgpIHsKICAgIF9jaGVja0RhdGFLaW5kKERhdGFLaW5kLnR5cGVkZWZOb2RlKTsKICAgIHJldHVybiBfcmVhZFR5cGVkZWZOb2RlKCk7CiAgfQoKICBfTGlicmFyeURhdGEgX3JlYWRMaWJyYXJ5RGF0YSgpIHsKICAgIFVyaSBjYW5vbmljYWxVcmkgPSBfcmVhZFVyaSgpOwogICAgcmV0dXJuIGNvbXBvbmVudExvb2t1cC5nZXRMaWJyYXJ5RGF0YUJ5VXJpKGNhbm9uaWNhbFVyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5MaWJyYXJ5IHJlYWRMaWJyYXJ5Tm9kZSgpIHsKICAgIF9jaGVja0RhdGFLaW5kKERhdGFLaW5kLmxpYnJhcnlOb2RlKTsKICAgIHJldHVybiBfcmVhZExpYnJhcnlEYXRhKCkubm9kZTsKICB9CgogIEBvdmVycmlkZQogIEUgcmVhZEVudW08RT4oTGlzdDxFPiB2YWx1ZXMpIHsKICAgIF9jaGVja0RhdGFLaW5kKERhdGFLaW5kLmVudW1WYWx1ZSk7CiAgICByZXR1cm4gX3JlYWRFbnVtSW50ZXJuYWwodmFsdWVzKTsKICB9CgogIEBvdmVycmlkZQogIFVyaSByZWFkVXJpKCkgewogICAgX2NoZWNrRGF0YUtpbmQoRGF0YUtpbmQudXJpKTsKICAgIHJldHVybiBfcmVhZFVyaSgpOwogIH0KCiAgVXJpIF9yZWFkVXJpKCkgewogICAgcmV0dXJuIF91cmlJbmRleC5yZWFkKF9yZWFkVXJpSW50ZXJuYWwpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCByZWFkQm9vbCgpIHsKICAgIF9jaGVja0RhdGFLaW5kKERhdGFLaW5kLmJvb2wpOwogICAgcmV0dXJuIF9yZWFkQm9vbCgpOwogIH0KCiAgYm9vbCBfcmVhZEJvb2woKSB7CiAgICBpbnQgdmFsdWUgPSBfcmVhZEludEludGVybmFsKCk7CiAgICBhc3NlcnQodmFsdWUgPT0gMCB8fCB2YWx1ZSA9PSAxKTsKICAgIHJldHVybiB2YWx1ZSA9PSAxOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHJlYWRTdHJpbmcoKSB7CiAgICBfY2hlY2tEYXRhS2luZChEYXRhS2luZC5zdHJpbmcpOwogICAgcmV0dXJuIF9yZWFkU3RyaW5nKCk7CiAgfQoKICBTdHJpbmcgX3JlYWRTdHJpbmcoKSB7CiAgICByZXR1cm4gX3N0cmluZ0luZGV4LnJlYWQoX3JlYWRTdHJpbmdJbnRlcm5hbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgcmVhZEludCgpIHsKICAgIF9jaGVja0RhdGFLaW5kKERhdGFLaW5kLnVpbnQzMCk7CiAgICByZXR1cm4gX3JlYWRJbnRJbnRlcm5hbCgpOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuVHJlZU5vZGUgcmVhZFRyZWVOb2RlKCkgewogICAgX2NoZWNrRGF0YUtpbmQoRGF0YUtpbmQudHJlZU5vZGUpOwogICAgcmV0dXJuIF9yZWFkVHJlZU5vZGUobnVsbCk7CiAgfQoKICBfTWVtYmVyRGF0YSBfZ2V0TWVtYmVyRGF0YShpci5NZW1iZXIgbm9kZSkgewogICAgX0xpYnJhcnlEYXRhIGxpYnJhcnlEYXRhID0KICAgICAgICBjb21wb25lbnRMb29rdXAuZ2V0TGlicmFyeURhdGFCeVVyaShub2RlLmVuY2xvc2luZ0xpYnJhcnkuaW1wb3J0VXJpKTsKICAgIGlmIChub2RlLmVuY2xvc2luZ0NsYXNzICE9IG51bGwpIHsKICAgICAgX0NsYXNzRGF0YSBjbGFzc0RhdGEgPSBsaWJyYXJ5RGF0YS5sb29rdXBDbGFzc0J5Tm9kZShub2RlLmVuY2xvc2luZ0NsYXNzKTsKICAgICAgcmV0dXJuIGNsYXNzRGF0YS5sb29rdXBNZW1iZXJEYXRhQnlOb2RlKG5vZGUpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGxpYnJhcnlEYXRhLmxvb2t1cE1lbWJlckRhdGFCeU5vZGUobm9kZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBpci5UcmVlTm9kZSByZWFkVHJlZU5vZGVJbkNvbnRleHQoKSB7CiAgICByZXR1cm4gcmVhZFRyZWVOb2RlSW5Db250ZXh0SW50ZXJuYWwoY3VycmVudE1lbWJlckRhdGEpOwogIH0KCiAgaXIuVHJlZU5vZGUgcmVhZFRyZWVOb2RlSW5Db250ZXh0SW50ZXJuYWwoX01lbWJlckRhdGEgbWVtYmVyRGF0YSkgewogICAgX2NoZWNrRGF0YUtpbmQoRGF0YUtpbmQudHJlZU5vZGUpOwogICAgcmV0dXJuIF9yZWFkVHJlZU5vZGUobWVtYmVyRGF0YSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5UcmVlTm9kZSByZWFkVHJlZU5vZGVPck51bGxJbkNvbnRleHQoKSB7CiAgICBib29sIGhhc1ZhbHVlID0gcmVhZEJvb2woKTsKICAgIGlmIChoYXNWYWx1ZSkgewogICAgICByZXR1cm4gcmVhZFRyZWVOb2RlSW5Db250ZXh0SW50ZXJuYWwoY3VycmVudE1lbWJlckRhdGEpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PEU+IHJlYWRUcmVlTm9kZXNJbkNvbnRleHQ8RSBleHRlbmRzIGlyLlRyZWVOb2RlPigKICAgICAge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSkgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgaWYgKGNvdW50ID09IDAgJiYgZW1wdHlBc051bGwpIHJldHVybiBudWxsOwogICAgTGlzdDxFPiBsaXN0ID0gbmV3IExpc3Q8RT4oY291bnQpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIGlyLlRyZWVOb2RlIG5vZGUgPSByZWFkVHJlZU5vZGVJbkNvbnRleHRJbnRlcm5hbChjdXJyZW50TWVtYmVyRGF0YSk7CiAgICAgIGxpc3RbaV0gPSBub2RlOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBNYXA8SywgVj4gcmVhZFRyZWVOb2RlTWFwSW5Db250ZXh0PEsgZXh0ZW5kcyBpci5UcmVlTm9kZSwgVj4oViBmKCksCiAgICAgIHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pIHsKICAgIGludCBjb3VudCA9IHJlYWRJbnQoKTsKICAgIGlmIChjb3VudCA9PSAwICYmIGVtcHR5QXNOdWxsKSByZXR1cm4gbnVsbDsKICAgIE1hcDxLLCBWPiBtYXAgPSB7fTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICBpci5UcmVlTm9kZSBub2RlID0gcmVhZFRyZWVOb2RlSW5Db250ZXh0SW50ZXJuYWwoY3VycmVudE1lbWJlckRhdGEpOwogICAgICBWIHZhbHVlID0gZigpOwogICAgICBtYXBbbm9kZV0gPSB2YWx1ZTsKICAgIH0KICAgIHJldHVybiBtYXA7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHJlYWRDb25zdGFudCgpIHsKICAgIF9jaGVja0RhdGFLaW5kKERhdGFLaW5kLmNvbnN0YW50KTsKICAgIHJldHVybiBfcmVhZENvbnN0YW50KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBkb3VibGUgcmVhZERvdWJsZVZhbHVlKCkgewogICAgX2NoZWNrRGF0YUtpbmQoRGF0YUtpbmQuZG91YmxlKTsKICAgIHJldHVybiBfcmVhZERvdWJsZVZhbHVlKCk7CiAgfQoKICBkb3VibGUgX3JlYWREb3VibGVWYWx1ZSgpIHsKICAgIEJ5dGVEYXRhIGRhdGEgPSBuZXcgQnl0ZURhdGEoOCk7CiAgICBkYXRhLnNldFVpbnQxNigwLCByZWFkSW50KCkpOwogICAgZGF0YS5zZXRVaW50MTYoMiwgcmVhZEludCgpKTsKICAgIGRhdGEuc2V0VWludDE2KDQsIHJlYWRJbnQoKSk7CiAgICBkYXRhLnNldFVpbnQxNig2LCByZWFkSW50KCkpOwogICAgcmV0dXJuIGRhdGEuZ2V0RmxvYXQ2NCgwKTsKICB9CgogIEBvdmVycmlkZQogIGludCByZWFkSW50ZWdlclZhbHVlKCkgewogICAgX2NoZWNrRGF0YUtpbmQoRGF0YUtpbmQuaW50KTsKICAgIHJldHVybiBfcmVhZEJpZ0ludCgpLnRvSW50KCk7CiAgfQoKICBCaWdJbnQgX3JlYWRCaWdJbnQoKSB7CiAgICByZXR1cm4gQmlnSW50LnBhcnNlKHJlYWRTdHJpbmcoKSk7CiAgfQoKICBDb25zdGFudFZhbHVlIF9yZWFkQ29uc3RhbnQoKSB7CiAgICByZXR1cm4gX2NvbnN0YW50SW5kZXgucmVhZChfcmVhZENvbnN0YW50SW50ZXJuYWwpOwogIH0KCiAgQ29uc3RhbnRWYWx1ZSBfcmVhZENvbnN0YW50SW50ZXJuYWwoKSB7CiAgICBDb25zdGFudFZhbHVlS2luZCBraW5kID0gX3JlYWRFbnVtSW50ZXJuYWwoQ29uc3RhbnRWYWx1ZUtpbmQudmFsdWVzKTsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLkJPT0w6CiAgICAgICAgYm9vbCB2YWx1ZSA9IHJlYWRCb29sKCk7CiAgICAgICAgcmV0dXJuIG5ldyBCb29sQ29uc3RhbnRWYWx1ZSh2YWx1ZSk7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuSU5UOgogICAgICAgIEJpZ0ludCB2YWx1ZSA9IF9yZWFkQmlnSW50KCk7CiAgICAgICAgcmV0dXJuIG5ldyBJbnRDb25zdGFudFZhbHVlKHZhbHVlKTsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5ET1VCTEU6CiAgICAgICAgZG91YmxlIHZhbHVlID0gX3JlYWREb3VibGVWYWx1ZSgpOwogICAgICAgIHJldHVybiBuZXcgRG91YmxlQ29uc3RhbnRWYWx1ZSh2YWx1ZSk7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuU1RSSU5HOgogICAgICAgIFN0cmluZyB2YWx1ZSA9IHJlYWRTdHJpbmcoKTsKICAgICAgICByZXR1cm4gbmV3IFN0cmluZ0NvbnN0YW50VmFsdWUodmFsdWUpOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLk5VTEw6CiAgICAgICAgcmV0dXJuIGNvbnN0IE51bGxDb25zdGFudFZhbHVlKCk7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuRlVOQ1RJT046CiAgICAgICAgSW5kZXhlZEZ1bmN0aW9uIGZ1bmN0aW9uID0gcmVhZE1lbWJlcigpOwogICAgICAgIERhcnRUeXBlIHR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZShmdW5jdGlvbiwgdHlwZSk7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuTElTVDoKICAgICAgICBEYXJ0VHlwZSB0eXBlID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgTGlzdDxDb25zdGFudFZhbHVlPiBlbnRyaWVzID0gcmVhZENvbnN0YW50cygpOwogICAgICAgIHJldHVybiBuZXcgTGlzdENvbnN0YW50VmFsdWUodHlwZSwgZW50cmllcyk7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuU0VUOgogICAgICAgIERhcnRUeXBlIHR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICBNYXBDb25zdGFudFZhbHVlIGVudHJpZXMgPSByZWFkQ29uc3RhbnQoKTsKICAgICAgICByZXR1cm4gbmV3IGNvbnN0YW50X3N5c3RlbS5KYXZhU2NyaXB0U2V0Q29uc3RhbnQodHlwZSwgZW50cmllcyk7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuTUFQOgogICAgICAgIERhcnRUeXBlIHR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICBMaXN0Q29uc3RhbnRWYWx1ZSBrZXlMaXN0ID0gcmVhZENvbnN0YW50KCk7CiAgICAgICAgTGlzdDxDb25zdGFudFZhbHVlPiB2YWx1ZXMgPSByZWFkQ29uc3RhbnRzKCk7CiAgICAgICAgQ29uc3RhbnRWYWx1ZSBwcm90b1ZhbHVlID0gcmVhZENvbnN0YW50T3JOdWxsKCk7CiAgICAgICAgYm9vbCBvbmx5U3RyaW5nS2V5cyA9IHJlYWRCb29sKCk7CiAgICAgICAgcmV0dXJuIG5ldyBjb25zdGFudF9zeXN0ZW0uSmF2YVNjcmlwdE1hcENvbnN0YW50KAogICAgICAgICAgICB0eXBlLCBrZXlMaXN0LCB2YWx1ZXMsIHByb3RvVmFsdWUsIG9ubHlTdHJpbmdLZXlzKTsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5DT05TVFJVQ1RFRDoKICAgICAgICBJbnRlcmZhY2VUeXBlIHR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICBNYXA8RmllbGRFbnRpdHksIENvbnN0YW50VmFsdWU+IGZpZWxkcyA9CiAgICAgICAgICAgIHJlYWRNZW1iZXJNYXA8RmllbGRFbnRpdHksIENvbnN0YW50VmFsdWU+KAogICAgICAgICAgICAgICAgKE1lbWJlckVudGl0eSBtZW1iZXIpID0+IHJlYWRDb25zdGFudCgpKTsKICAgICAgICByZXR1cm4gbmV3IENvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZSh0eXBlLCBmaWVsZHMpOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLlRZUEU6CiAgICAgICAgRGFydFR5cGUgcmVwcmVzZW50ZWRUeXBlID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgRGFydFR5cGUgdHlwZSA9IHJlYWREYXJ0VHlwZSgpOwogICAgICAgIHJldHVybiBuZXcgVHlwZUNvbnN0YW50VmFsdWUocmVwcmVzZW50ZWRUeXBlLCB0eXBlKTsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5JTlNUQU5USUFUSU9OOgogICAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPSByZWFkRGFydFR5cGVzKCk7CiAgICAgICAgQ29uc3RhbnRWYWx1ZSBmdW5jdGlvbiA9IHJlYWRDb25zdGFudCgpOwogICAgICAgIHJldHVybiBuZXcgSW5zdGFudGlhdGlvbkNvbnN0YW50VmFsdWUodHlwZUFyZ3VtZW50cywgZnVuY3Rpb24pOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLk5PTl9DT05TVEFOVDoKICAgICAgICByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5JTlRFUkNFUFRPUjoKICAgICAgICBDbGFzc0VudGl0eSBjbHMgPSByZWFkQ2xhc3MoKTsKICAgICAgICByZXR1cm4gbmV3IEludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZShjbHMpOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLkRFRkVSUkVEX0dMT0JBTDoKICAgICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gcmVhZENvbnN0YW50KCk7CiAgICAgICAgT3V0cHV0VW5pdCB1bml0ID0gcmVhZE91dHB1dFVuaXRSZWZlcmVuY2UoKTsKICAgICAgICByZXR1cm4gbmV3IERlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZShjb25zdGFudCwgdW5pdCk7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuRFVNTVlfSU5URVJDRVBUT1I6CiAgICAgICAgQWJzdHJhY3RWYWx1ZSBhYnN0cmFjdFZhbHVlID0gcmVhZEFic3RyYWN0VmFsdWUoKTsKICAgICAgICByZXR1cm4gbmV3IER1bW15SW50ZXJjZXB0b3JDb25zdGFudFZhbHVlKGFic3RyYWN0VmFsdWUpOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLlVOUkVBQ0hBQkxFOgogICAgICAgIHJldHVybiBjb25zdCBVbnJlYWNoYWJsZUNvbnN0YW50VmFsdWUoKTsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5KU19OQU1FOgogICAgICAgIGpzLkxpdGVyYWxTdHJpbmcgbmFtZSA9IHJlYWRKc05vZGUoKTsKICAgICAgICByZXR1cm4gbmV3IEpzTmFtZUNvbnN0YW50VmFsdWUobmFtZSk7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBleHRlZCBjb25zdGFudCB2YWx1ZSBraW5kICR7a2luZH0uIik7CiAgfQoKICBpci5UcmVlTm9kZSBfcmVhZFRyZWVOb2RlKF9NZW1iZXJEYXRhIG1lbWJlckRhdGEpIHsKICAgIF9UcmVlTm9kZUtpbmQga2luZCA9IF9yZWFkRW51bUludGVybmFsKF9UcmVlTm9kZUtpbmQudmFsdWVzKTsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIF9UcmVlTm9kZUtpbmQuY2xzOgogICAgICAgIHJldHVybiBfcmVhZENsYXNzRGF0YSgpLm5vZGU7CiAgICAgIGNhc2UgX1RyZWVOb2RlS2luZC5tZW1iZXI6CiAgICAgICAgcmV0dXJuIF9yZWFkTWVtYmVyRGF0YSgpLm5vZGU7CiAgICAgIGNhc2UgX1RyZWVOb2RlS2luZC5mdW5jdGlvbkRlY2xhcmF0aW9uVmFyaWFibGU6CiAgICAgICAgaXIuRnVuY3Rpb25EZWNsYXJhdGlvbiBmdW5jdGlvbkRlY2xhcmF0aW9uID0gX3JlYWRUcmVlTm9kZShtZW1iZXJEYXRhKTsKICAgICAgICByZXR1cm4gZnVuY3Rpb25EZWNsYXJhdGlvbi52YXJpYWJsZTsKICAgICAgY2FzZSBfVHJlZU5vZGVLaW5kLmZ1bmN0aW9uTm9kZToKICAgICAgICByZXR1cm4gX3JlYWRGdW5jdGlvbk5vZGUobWVtYmVyRGF0YSk7CiAgICAgIGNhc2UgX1RyZWVOb2RlS2luZC50eXBlUGFyYW1ldGVyOgogICAgICAgIHJldHVybiBfcmVhZFR5cGVQYXJhbWV0ZXIobWVtYmVyRGF0YSk7CiAgICAgIGNhc2UgX1RyZWVOb2RlS2luZC5jb25zdGFudDoKICAgICAgICBtZW1iZXJEYXRhID8/PSBfcmVhZE1lbWJlckRhdGEoKTsKICAgICAgICBpci5Db25zdGFudEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IF9yZWFkVHJlZU5vZGUobWVtYmVyRGF0YSk7CiAgICAgICAgaXIuQ29uc3RhbnQgY29uc3RhbnQgPQogICAgICAgICAgICBtZW1iZXJEYXRhLmdldENvbnN0YW50QnlJbmRleChleHByZXNzaW9uLCBfcmVhZEludEludGVybmFsKCkpOwogICAgICAgIHJldHVybiBuZXcgQ29uc3RhbnRSZWZlcmVuY2UoZXhwcmVzc2lvbiwgY29uc3RhbnQpOwogICAgICBjYXNlIF9UcmVlTm9kZUtpbmQubm9kZToKICAgICAgICBtZW1iZXJEYXRhID8/PSBfcmVhZE1lbWJlckRhdGEoKTsKICAgICAgICBpbnQgaW5kZXggPSBfcmVhZEludEludGVybmFsKCk7CiAgICAgICAgaXIuVHJlZU5vZGUgdHJlZU5vZGUgPSBtZW1iZXJEYXRhLmdldFRyZWVOb2RlQnlJbmRleChpbmRleCk7CiAgICAgICAgYXNzZXJ0KAogICAgICAgICAgICB0cmVlTm9kZSAhPSBudWxsLAogICAgICAgICAgICAiTm8gVHJlZU5vZGUgZm91bmQgZm9yIGluZGV4ICRpbmRleCBpbiAiCiAgICAgICAgICAgICIke21lbWJlckRhdGEubm9kZX0uJF9lcnJvckNvbnRleHQiKTsKICAgICAgICByZXR1cm4gdHJlZU5vZGU7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBfVHJlZU5vZGVLaW5kICRraW5kIik7CiAgfQoKICBpci5GdW5jdGlvbk5vZGUgX3JlYWRGdW5jdGlvbk5vZGUoX01lbWJlckRhdGEgbWVtYmVyRGF0YSkgewogICAgX0Z1bmN0aW9uTm9kZUtpbmQga2luZCA9IF9yZWFkRW51bUludGVybmFsKF9GdW5jdGlvbk5vZGVLaW5kLnZhbHVlcyk7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBfRnVuY3Rpb25Ob2RlS2luZC5wcm9jZWR1cmU6CiAgICAgICAgaXIuUHJvY2VkdXJlIHByb2NlZHVyZSA9IF9yZWFkTWVtYmVyRGF0YSgpLm5vZGU7CiAgICAgICAgcmV0dXJuIHByb2NlZHVyZS5mdW5jdGlvbjsKICAgICAgY2FzZSBfRnVuY3Rpb25Ob2RlS2luZC5jb25zdHJ1Y3RvcjoKICAgICAgICBpci5Db25zdHJ1Y3RvciBjb25zdHJ1Y3RvciA9IF9yZWFkTWVtYmVyRGF0YSgpLm5vZGU7CiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yLmZ1bmN0aW9uOwogICAgICBjYXNlIF9GdW5jdGlvbk5vZGVLaW5kLmZ1bmN0aW9uRXhwcmVzc2lvbjoKICAgICAgICBpci5GdW5jdGlvbkV4cHJlc3Npb24gZnVuY3Rpb25FeHByZXNzaW9uID0gX3JlYWRUcmVlTm9kZShtZW1iZXJEYXRhKTsKICAgICAgICByZXR1cm4gZnVuY3Rpb25FeHByZXNzaW9uLmZ1bmN0aW9uOwogICAgICBjYXNlIF9GdW5jdGlvbk5vZGVLaW5kLmZ1bmN0aW9uRGVjbGFyYXRpb246CiAgICAgICAgaXIuRnVuY3Rpb25EZWNsYXJhdGlvbiBmdW5jdGlvbkRlY2xhcmF0aW9uID0gX3JlYWRUcmVlTm9kZShtZW1iZXJEYXRhKTsKICAgICAgICByZXR1cm4gZnVuY3Rpb25EZWNsYXJhdGlvbi5mdW5jdGlvbjsKICAgIH0KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJVbmV4cGVjdGVkIF9GdW5jdGlvbk5vZGVLaW5kICRraW5kIik7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5UeXBlUGFyYW1ldGVyIHJlYWRUeXBlUGFyYW1ldGVyTm9kZSgpIHsKICAgIF9jaGVja0RhdGFLaW5kKERhdGFLaW5kLnR5cGVQYXJhbWV0ZXJOb2RlKTsKICAgIHJldHVybiBfcmVhZFR5cGVQYXJhbWV0ZXIobnVsbCk7CiAgfQoKICBpci5UeXBlUGFyYW1ldGVyIF9yZWFkVHlwZVBhcmFtZXRlcihfTWVtYmVyRGF0YSBtZW1iZXJEYXRhKSB7CiAgICBfVHlwZVBhcmFtZXRlcktpbmQga2luZCA9IF9yZWFkRW51bUludGVybmFsKF9UeXBlUGFyYW1ldGVyS2luZC52YWx1ZXMpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgX1R5cGVQYXJhbWV0ZXJLaW5kLmNsczoKICAgICAgICBpci5DbGFzcyBjbHMgPSBfcmVhZENsYXNzRGF0YSgpLm5vZGU7CiAgICAgICAgcmV0dXJuIGNscy50eXBlUGFyYW1ldGVyc1tfcmVhZEludEludGVybmFsKCldOwogICAgICBjYXNlIF9UeXBlUGFyYW1ldGVyS2luZC5mdW5jdGlvbk5vZGU6CiAgICAgICAgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uTm9kZSA9IF9yZWFkRnVuY3Rpb25Ob2RlKG1lbWJlckRhdGEpOwogICAgICAgIHJldHVybiBmdW5jdGlvbk5vZGUudHlwZVBhcmFtZXRlcnNbX3JlYWRJbnRJbnRlcm5hbCgpXTsKICAgIH0KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJVbmV4cGVjdGVkIF9UeXBlUGFyYW1ldGVyS2luZCBraW5kICRraW5kIik7CiAgfQoKICB2b2lkIF9jaGVja0RhdGFLaW5kKERhdGFLaW5kIGV4cGVjdGVkS2luZCkgewogICAgaWYgKCF1c2VEYXRhS2luZHMpIHJldHVybjsKICAgIERhdGFLaW5kIGFjdHVhbEtpbmQgPSBfcmVhZEVudW1JbnRlcm5hbChEYXRhS2luZC52YWx1ZXMpOwogICAgYXNzZXJ0KAogICAgICAgIGFjdHVhbEtpbmQgPT0gZXhwZWN0ZWRLaW5kLAogICAgICAgICJJbnZhbGlkIGRhdGEga2luZC4gIgogICAgICAgICJFeHBlY3RlZCAkZXhwZWN0ZWRLaW5kLCBmb3VuZCAkYWN0dWFsS2luZC4kX2Vycm9yQ29udGV4dCIpOwogIH0KCiAgQG92ZXJyaWRlCiAgTG9jYWwgcmVhZExvY2FsKCkgewogICAgTG9jYWxLaW5kIGtpbmQgPSByZWFkRW51bShMb2NhbEtpbmQudmFsdWVzKTsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIExvY2FsS2luZC5qTG9jYWw6CiAgICAgICAgTWVtYmVyRW50aXR5IG1lbWJlckNvbnRleHQgPSByZWFkTWVtYmVyKCk7CiAgICAgICAgaW50IGxvY2FsSW5kZXggPSByZWFkSW50KCk7CiAgICAgICAgcmV0dXJuIGxvY2FsTG9va3VwLmdldExvY2FsQnlJbmRleChtZW1iZXJDb250ZXh0LCBsb2NhbEluZGV4KTsKICAgICAgY2FzZSBMb2NhbEtpbmQudGhpc0xvY2FsOgogICAgICAgIENsYXNzRW50aXR5IGNscyA9IHJlYWRDbGFzcygpOwogICAgICAgIHJldHVybiBuZXcgVGhpc0xvY2FsKGNscyk7CiAgICAgIGNhc2UgTG9jYWxLaW5kLmJveExvY2FsOgogICAgICAgIENsYXNzRW50aXR5IGNscyA9IHJlYWRDbGFzcygpOwogICAgICAgIHJldHVybiBuZXcgQm94TG9jYWwoY2xzKTsKICAgICAgY2FzZSBMb2NhbEtpbmQuYW5vbnltb3VzQ2xvc3VyZUxvY2FsOgogICAgICAgIENsYXNzRW50aXR5IGNscyA9IHJlYWRDbGFzcygpOwogICAgICAgIHJldHVybiBuZXcgQW5vbnltb3VzQ2xvc3VyZUxvY2FsKGNscyk7CiAgICAgIGNhc2UgTG9jYWxLaW5kLnR5cGVWYXJpYWJsZUxvY2FsOgogICAgICAgIFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBUeXBlVmFyaWFibGVMb2NhbCh0eXBlVmFyaWFibGUpOwogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlVuZXhwZWN0ZWQgbG9jYWwga2luZCAka2luZCIpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW1wb3J0RW50aXR5IHJlYWRJbXBvcnQoKSB7CiAgICBfY2hlY2tEYXRhS2luZChEYXRhS2luZC5pbXBvcnQpOwogICAgcmV0dXJuIF9yZWFkSW1wb3J0KCk7CiAgfQoKICBJbXBvcnRFbnRpdHkgX3JlYWRJbXBvcnQoKSB7CiAgICByZXR1cm4gX2ltcG9ydEluZGV4LnJlYWQoX3JlYWRJbXBvcnRJbnRlcm5hbCk7CiAgfQoKICBJbXBvcnRFbnRpdHkgX3JlYWRJbXBvcnRJbnRlcm5hbCgpIHsKICAgIFN0cmluZyBuYW1lID0gcmVhZFN0cmluZ09yTnVsbCgpOwogICAgVXJpIHVyaSA9IF9yZWFkVXJpKCk7CiAgICBVcmkgZW5jbG9zaW5nTGlicmFyeVVyaSA9IF9yZWFkVXJpKCk7CiAgICBib29sIGlzRGVmZXJyZWQgPSBfcmVhZEJvb2woKTsKICAgIHJldHVybiBuZXcgSW1wb3J0RW50aXR5KGlzRGVmZXJyZWQsIG5hbWUsIHVyaSwgZW5jbG9zaW5nTGlicmFyeVVyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICBPdXRwdXRVbml0IHJlYWRPdXRwdXRVbml0UmVmZXJlbmNlKCkgewogICAgYXNzZXJ0KAogICAgICAgIF9jb2RlZ2VuUmVhZGVyICE9IG51bGwsCiAgICAgICAgIkNhbiBub3QgZGVzZXJpYWxpemUgYW4gT3V0cHV0VW5pdCByZWZlcmVuY2UgIgogICAgICAgICJ3aXRob3V0IGEgcmVnaXN0ZXJlZCBjb2RlZ2VuIHJlYWRlci4iKTsKICAgIHJldHVybiBfY29kZWdlblJlYWRlci5yZWFkT3V0cHV0VW5pdFJlZmVyZW5jZSh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgcmVhZEFic3RyYWN0VmFsdWUoKSB7CiAgICBhc3NlcnQoCiAgICAgICAgX2NvZGVnZW5SZWFkZXIgIT0gbnVsbCwKICAgICAgICAiQ2FuIG5vdCBkZXNlcmlhbGl6ZSBhbiBBYnN0cmFjdFZhbHVlICIKICAgICAgICAid2l0aG91dCBhIHJlZ2lzdGVyZWQgY29kZWdlbiByZWFkZXIuIik7CiAgICByZXR1cm4gX2NvZGVnZW5SZWFkZXIucmVhZEFic3RyYWN0VmFsdWUodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5Ob2RlIHJlYWRKc05vZGUoKSB7CiAgICBhc3NlcnQoX2NvZGVnZW5SZWFkZXIgIT0gbnVsbCwKICAgICAgICAiQ2FuIG5vdCBkZXNlcmlhbGl6ZSBhIEpTIG5vZGUgd2l0aG91dCBhIHJlZ2lzdGVyZWQgY29kZWdlbiByZWFkZXIuIik7CiAgICByZXR1cm4gX2NvZGVnZW5SZWFkZXIucmVhZEpzTm9kZSh0aGlzKTsKICB9CgogIC8vLyBBY3R1YWwgZGVzZXJpYWxpemF0aW9uIG9mIGEgc2VjdGlvbiBiZWdpbiB0YWcsIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuCiAgdm9pZCBfYmVnaW4oU3RyaW5nIHRhZyk7CgogIC8vLyBBY3R1YWwgZGVzZXJpYWxpemF0aW9uIG9mIGEgc2VjdGlvbiBlbmQgdGFnLCBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzLgogIHZvaWQgX2VuZChTdHJpbmcgdGFnKTsKCiAgLy8vIEFjdHVhbCBkZXNlcmlhbGl6YXRpb24gb2YgYSBzdHJpbmcgdmFsdWUsIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuCiAgU3RyaW5nIF9yZWFkU3RyaW5nSW50ZXJuYWwoKTsKCiAgLy8vIEFjdHVhbCBkZXNlcmlhbGl6YXRpb24gb2YgYSBub24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSwgaW1wbGVtZW50ZWQgYnkKICAvLy8gc3ViY2xhc3Nlcy4KICBpbnQgX3JlYWRJbnRJbnRlcm5hbCgpOwoKICAvLy8gQWN0dWFsIGRlc2VyaWFsaXphdGlvbiBvZiBhIFVSSSB2YWx1ZSwgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KICBVcmkgX3JlYWRVcmlJbnRlcm5hbCgpOwoKICAvLy8gQWN0dWFsIGRlc2VyaWFsaXphdGlvbiBvZiBhbiBlbnVtIHZhbHVlIGluIFt2YWx1ZXNdLCBpbXBsZW1lbnRlZCBieQogIC8vLyBzdWJjbGFzc2VzLgogIEUgX3JlYWRFbnVtSW50ZXJuYWw8RT4oTGlzdDxFPiB2YWx1ZXMpOwoKICAvLy8gUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAvLy8gdXNlZnVsIGZvciBkZWJ1Z2dpbmcgaW4gY29uc2lzdGVuY2llcyBiZXR3ZWVuIHNlcmlhbGl6YXRpb24gYW5kCiAgLy8vIGRlc2VyaWFsaXphdGlvbi4KICBTdHJpbmcgZ2V0IF9lcnJvckNvbnRleHQ7Cn0KgxQATk48AR4BTRk6HBs1JB4cIAEmIC8sLwEwASMiATM0Lj06PQQBDBsjBAEMGSEEAQxCJigEASgmHQQBDDkjIgQBIiMaBAEMNiIgBAEMMxwcBAEgIhkEAQw1HCQdBAEMNyYbBAEMMzg0JR8UKC4TBAEmKjRJBAEMG00bBAEMIUgEAQwdRgQBDCFIBAEMH0cEAQwrTQQBITobNjI7BhIEASg2GzwyPwYSBAEMICkaJCIsBAEMMycnJxEEAU03FB4VIiEmOS4fRC0mKzNHQSBHJ0JNCkRPMDMtMyc6Oy0KIRgcJB0hHAEnKE42ITBOQ0MlJCEgIkYvBkEEAQw6Ky4nEQQBUD8UIhUmJCknKCYtLC9CTkcyH0ROKToqJCwwMUwgQyhDNSg4LjgKSzAxNy0tOUQmR0EKTyJFLiw8JwErKCo3OS8oKjc6MCgqNzslMCo3OyknBkEEASI7BAEqShQiKyUxJjMlNQZBBAEMHykjBAEgLyEsBAEMHSgiBAEiLyEoBAEMISofBAEkIz4EAQwhKiQEAQwiKCYEAQwSIhcEARMtBAEMFCMYBAEVJCYXBAEMGCUaBAEZMwQBDBIlHwQBDB8nIAQBLx9OJ1E1DTcGBAEMKD0EAUYnJgQBDC4gFD8GEQQBDDkjGzAnJksWBhEEAQxGIxswGCZLFRkGEAQBDCEnHAQBDB0lHwQBHiUiIiIiHwQBDBsiIgQBGScEASI3BAEqShQjIS0iJiwlKy8lJS8jKicxKDojKDc1IigzSSIoNDY5KjpAKi0xNzo7IzMoPSw4MUgrJyonMi4xNUAwO0EqMSYuLgZLBAE2QhQeJiEnNlAtJy4oLyMqRh9LPB8qKEUQHjUyGQZCBAE+ShQoOSMqPSUxTiwyUC0GRgQBDC0wJQQBQEwUIy43LEZABkwEAS8fPgwkHkUEAQwWMRQdMyRHICcjHyciLCcvKDg0Bj8EAQweJRoEAR8zBAEnJhoqI0kEAQwpDCA3MTkEAQwmDCAwMTMEAQwZI08sBAFQGwFOGQFLIAFNEhoBSBoBShIqAU5GFxwCATdwYWNrYWdlOmNvbXBpbGVyL3NyYy9zZXJpYWxpemF0aW9uL2Fic3RyYWN0X3NvdXJjZS5kYXJ0PHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NlcmlhbGl6YXRpb24vYmluYXJ5X3NpbmsuZGFydIfFLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgJ3NlcmlhbGl6YXRpb24uZGFydCc7CgovLy8gW0RhdGFTaW5rXSB0aGF0IHdyaXRlcyBkYXRhIGFzIGEgc2VxdWVuY2Ugb2YgYnl0ZXMuCi8vLwovLy8gVGhpcyBkYXRhIHNpbmsgd29ya3MgdG9nZXRoZXIgd2l0aCBbQmluYXJ5U291cmNlXS4KY2xhc3MgQmluYXJ5U2luayBleHRlbmRzIEFic3RyYWN0RGF0YVNpbmsgewogIGZpbmFsIFNpbms8TGlzdDxpbnQ+PiBzaW5rOwogIEJ1ZmZlcmVkU2luayBfYnVmZmVyZWRTaW5rOwogIGludCBfbGVuZ3RoID0gMDsKCiAgQmluYXJ5U2luayh0aGlzLnNpbmssCiAgICAgIHtib29sIHVzZURhdGFLaW5kczogZmFsc2UsIE1hcDxTdHJpbmcsIGludD4gdGFnRnJlcXVlbmN5TWFwfSkKICAgICAgOiBfYnVmZmVyZWRTaW5rID0gbmV3IEJ1ZmZlcmVkU2luayhzaW5rKSwKICAgICAgICBzdXBlcih1c2VEYXRhS2luZHM6IHVzZURhdGFLaW5kcywgdGFnRnJlcXVlbmN5TWFwOiB0YWdGcmVxdWVuY3lNYXApOwoKICBAb3ZlcnJpZGUKICB2b2lkIF9iZWdpbihTdHJpbmcgdGFnKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdXBwb3J0IHRhZ3MgaW4gYmluYXJ5IHNlcmlhbGl6YXRpb24/CiAgfQogIEBvdmVycmlkZQogIHZvaWQgX2VuZChTdHJpbmcgdGFnKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdXBwb3J0IHRhZ3MgaW4gYmluYXJ5IHNlcmlhbGl6YXRpb24/CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF93cml0ZVVyaUludGVybmFsKFVyaSB2YWx1ZSkgewogICAgX3dyaXRlU3RyaW5nKHZhbHVlLnRvU3RyaW5nKCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfd3JpdGVTdHJpbmdJbnRlcm5hbChTdHJpbmcgdmFsdWUpIHsKICAgIExpc3Q8aW50PiBieXRlcyA9IHV0ZjguZW5jb2RlKHZhbHVlKTsKICAgIF93cml0ZUludEludGVybmFsKGJ5dGVzLmxlbmd0aCk7CiAgICBfYnVmZmVyZWRTaW5rLmFkZEJ5dGVzKGJ5dGVzKTsKICAgIF9sZW5ndGggKz0gYnl0ZXMubGVuZ3RoOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfd3JpdGVJbnRJbnRlcm5hbChpbnQgdmFsdWUpIHsKICAgIGFzc2VydCh2YWx1ZSA+PSAwICYmIHZhbHVlID4+IDMwID09IDApOwogICAgaWYgKHZhbHVlIDwgMHg4MCkgewogICAgICBfYnVmZmVyZWRTaW5rLmFkZEJ5dGUodmFsdWUpOwogICAgICBfbGVuZ3RoICs9IDE7CiAgICB9IGVsc2UgaWYgKHZhbHVlIDwgMHg0MDAwKSB7CiAgICAgIF9idWZmZXJlZFNpbmsuYWRkQnl0ZTIoKHZhbHVlID4+IDgpIHwgMHg4MCwgdmFsdWUgJiAweEZGKTsKICAgICAgX2xlbmd0aCArPSAyOwogICAgfSBlbHNlIHsKICAgICAgX2J1ZmZlcmVkU2luay5hZGRCeXRlNCgodmFsdWUgPj4gMjQpIHwgMHhDMCwgKHZhbHVlID4+IDE2KSAmIDB4RkYsCiAgICAgICAgICAodmFsdWUgPj4gOCkgJiAweEZGLCB2YWx1ZSAmIDB4RkYpOwogICAgICBfbGVuZ3RoICs9IDQ7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF93cml0ZUVudW1JbnRlcm5hbChkeW5hbWljIHZhbHVlKSB7CiAgICBfd3JpdGVJbnRJbnRlcm5hbCh2YWx1ZS5pbmRleCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsb3NlKCkgewogICAgX2J1ZmZlcmVkU2luay5mbHVzaEFuZERlc3Ryb3koKTsKICAgIF9idWZmZXJlZFNpbmsgPSBudWxsOwogICAgc2luay5jbG9zZSgpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIHRvIHRoaXMgZGF0YSBzaW5rLgogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoID0+IF9sZW5ndGg7Cn0KSwBOTjwBHgE4BDcsHh4TARhEME0BDBxCBAwaQgQBDCYkBAEMLColIx0EAQwmLBgkFCFBFA1JLhQGBAEMKyQEAQwRJRoSBAE9DB0CATNwYWNrYWdlOmNvbXBpbGVyL3NyYy9zZXJpYWxpemF0aW9uL2JpbmFyeV9zaW5rLmRhcnQ+c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc2VyaWFsaXphdGlvbi9iaW5hcnlfc291cmNlLmRhcnSHGS8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mICdzZXJpYWxpemF0aW9uLmRhcnQnOwoKLy8vIFtEYXRhU291cmNlXSB0aGF0IHJlYWRzIGRhdGEgZnJvbSBhIHNlcXVlbmNlIG9mIGJ5dGVzLgovLy8KLy8vIFRoaXMgZGF0YSBzb3VyY2Ugd29ya3MgdG9nZXRoZXIgd2l0aCBbQmluYXJ5U2lua10uCmNsYXNzIEJpbmFyeVNvdXJjZUltcGwgZXh0ZW5kcyBBYnN0cmFjdERhdGFTb3VyY2UgewogIGludCBfYnl0ZU9mZnNldCA9IDA7CiAgZmluYWwgTGlzdDxpbnQ+IF9ieXRlczsKCiAgQmluYXJ5U291cmNlSW1wbCh0aGlzLl9ieXRlcywge2Jvb2wgdXNlRGF0YUtpbmRzOiBmYWxzZX0pCiAgICAgIDogc3VwZXIodXNlRGF0YUtpbmRzOiB1c2VEYXRhS2luZHMpOwoKICBAb3ZlcnJpZGUKICB2b2lkIF9iZWdpbihTdHJpbmcgdGFnKSB7fQogIEBvdmVycmlkZQogIHZvaWQgX2VuZChTdHJpbmcgdGFnKSB7fQoKICBpbnQgX3JlYWRCeXRlKCkgPT4gX2J5dGVzW19ieXRlT2Zmc2V0KytdOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgX3JlYWRTdHJpbmdJbnRlcm5hbCgpIHsKICAgIGludCBsZW5ndGggPSBfcmVhZEludEludGVybmFsKCk7CiAgICBMaXN0PGludD4gYnl0ZXMgPSBuZXcgVWludDhMaXN0KGxlbmd0aCk7CiAgICBieXRlcy5zZXRSYW5nZSgwLCBieXRlcy5sZW5ndGgsIF9ieXRlcywgX2J5dGVPZmZzZXQpOwogICAgX2J5dGVPZmZzZXQgKz0gYnl0ZXMubGVuZ3RoOwogICAgcmV0dXJuIHV0ZjguZGVjb2RlKGJ5dGVzKTsKICB9CgogIEBvdmVycmlkZQogIGludCBfcmVhZEludEludGVybmFsKCkgewogICAgdmFyIGJ5dGUgPSBfcmVhZEJ5dGUoKTsKICAgIGlmIChieXRlICYgMHg4MCA9PSAwKSB7CiAgICAgIC8vIDB4eHh4eHh4CiAgICAgIHJldHVybiBieXRlOwogICAgfSBlbHNlIGlmIChieXRlICYgMHg0MCA9PSAwKSB7CiAgICAgIC8vIDEweHh4eHh4CiAgICAgIHJldHVybiAoKGJ5dGUgJiAweDNGKSA8PCA4KSB8IF9yZWFkQnl0ZSgpOwogICAgfSBlbHNlIHsKICAgICAgLy8gMTF4eHh4eHgKICAgICAgcmV0dXJuICgoYnl0ZSAmIDB4M0YpIDw8IDI0KSB8CiAgICAgICAgICAoX3JlYWRCeXRlKCkgPDwgMTYpIHwKICAgICAgICAgIChfcmVhZEJ5dGUoKSA8PCA4KSB8CiAgICAgICAgICBfcmVhZEJ5dGUoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIFVyaSBfcmVhZFVyaUludGVybmFsKCkgewogICAgU3RyaW5nIHRleHQgPSBfcmVhZFN0cmluZygpOwogICAgcmV0dXJuIFVyaS5wYXJzZSh0ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIEUgX3JlYWRFbnVtSW50ZXJuYWw8RT4oTGlzdDxFPiB2YWx1ZXMpIHsKICAgIGludCBpbmRleCA9IF9yZWFkSW50SW50ZXJuYWwoKTsKICAgIGFzc2VydCgKICAgICAgICAwIDw9IGluZGV4ICYmIGluZGV4IDwgdmFsdWVzLmxlbmd0aCwKICAgICAgICAiSW52YWxpZCBkYXRhIGtpbmQgaW5kZXguICIKICAgICAgICAiRXhwZWN0ZWQgb25lIG9mICR2YWx1ZXMsIGZvdW5kIGluZGV4ICRpbmRleC4iKTsKICAgIHJldHVybiB2YWx1ZXNbaW5kZXhdOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfZXJyb3JDb250ZXh0ID0+ICcgT2Zmc2V0ICRfYnl0ZU9mZnNldCBpbiAke19ieXRlcy5sZW5ndGh9Lic7Cn0KRwBOTjwBHgE7BDc0FxoBPCsBDB0MGwEsAQwhJS06IR8EAQwbHBwSEyMSMQ0SJSAfFwYEAQwbIRwEAQwrJAwtJDkaBAEMSwIBNXBhY2thZ2U6Y29tcGlsZXIvc3JjL3NlcmlhbGl6YXRpb24vYmluYXJ5X3NvdXJjZS5kYXJ0OHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NlcmlhbGl6YXRpb24vaGVscGVycy5kYXJ0rfMvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiAnc2VyaWFsaXphdGlvbi5kYXJ0JzsKCi8vLyBFbnVtIHZhbHVlcyB1c2VkIGZvciBpZGVudGlmeWluZyBkaWZmZXJlbnQga2luZHMgb2Ygc2VyaWFsaXplZCBkYXRhLgovLy8KLy8vIFRoaXMgaXMgdXNlZCB0byBmb3IgZGVidWdnaW5nIGRhdGEgaW5jb25zaXN0ZW5jaWVzIGJldHdlZW4gc2VyaWFsaXphdGlvbgovLy8gYW5kIGRlc2VyaWFsaXphdGlvbi4KZW51bSBEYXRhS2luZCB7CiAgYm9vbCwKICB1aW50MzAsCiAgc3RyaW5nLAogIGVudW1WYWx1ZSwKICB1cmksCiAgbGlicmFyeU5vZGUsCiAgY2xhc3NOb2RlLAogIHR5cGVkZWZOb2RlLAogIG1lbWJlck5vZGUsCiAgdHJlZU5vZGUsCiAgdHlwZVBhcmFtZXRlck5vZGUsCiAgZGFydFR5cGUsCiAgZGFydFR5cGVOb2RlLAogIHNvdXJjZVNwYW4sCiAgY29uc3RhbnQsCiAgaW1wb3J0LAogIGRvdWJsZSwKICBpbnQsCn0KCi8vLyBFbnVtIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHRoZSBlbmNsb3NpbmcgZW50aXR5IG9mIGEgbWVtYmVyIGluIHNlcmlhbGl6YXRpb24uCmVudW0gTWVtYmVyQ29udGV4dEtpbmQgeyBsaWJyYXJ5LCBjbHMgfQoKLy8vIEVudW0gdXNlZCBmb3IgaWRlbnRpZnlpbmcgW0xvY2FsXSBzdWJjbGFzc2VzIGluIHNlcmlhbGl6YXRpb24uCmVudW0gTG9jYWxLaW5kIHsKICBqTG9jYWwsCiAgdGhpc0xvY2FsLAogIGJveExvY2FsLAogIGFub255bW91c0Nsb3N1cmVMb2NhbCwKICB0eXBlVmFyaWFibGVMb2NhbCwKfQoKLy8vIEVudW0gdXNlZCBmb3IgaWRlbnRpZnlpbmcgW2lyLlRyZWVOb2RlXSBzdWJjbGFzc2VzIGluIHNlcmlhbGl6YXRpb24uCmVudW0gX1RyZWVOb2RlS2luZCB7CiAgY2xzLAogIG1lbWJlciwKICBub2RlLAogIGZ1bmN0aW9uTm9kZSwKICB0eXBlUGFyYW1ldGVyLAogIGZ1bmN0aW9uRGVjbGFyYXRpb25WYXJpYWJsZSwKICBjb25zdGFudCwKfQoKLy8vIEVudW0gdXNlZCBmb3IgaWRlbnRpZnlpbmcgW2lyLkZ1bmN0aW9uTm9kZV0gY29udGV4dCBpbiBzZXJpYWxpemF0aW9uLgplbnVtIF9GdW5jdGlvbk5vZGVLaW5kIHsKICBwcm9jZWR1cmUsCiAgY29uc3RydWN0b3IsCiAgZnVuY3Rpb25FeHByZXNzaW9uLAogIGZ1bmN0aW9uRGVjbGFyYXRpb24sCn0KCi8vLyBFbnVtIHVzZWQgZm9yIGlkZW50aWZ5aW5nIFtpci5UeXBlUGFyYW1ldGVyXSBjb250ZXh0IGluIHNlcmlhbGl6YXRpb24uCmVudW0gX1R5cGVQYXJhbWV0ZXJLaW5kIHsKICBjbHMsCiAgZnVuY3Rpb25Ob2RlLAp9CgovLy8gQ2xhc3MgdXNlZCBmb3IgZW5jb2RpbmcgdGFncyBpbiBbT2JqZWN0U2lua10gYW5kIFtPYmplY3RTb3VyY2VdLgpjbGFzcyBUYWcgewogIGZpbmFsIFN0cmluZyB2YWx1ZTsKCiAgVGFnKHRoaXMudmFsdWUpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHZhbHVlLmhhc2hDb2RlICogMTM7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgVGFnKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdmFsdWUgPT0gb3RoZXIudmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnVGFnKCR2YWx1ZSknOwp9CgovLy8gRW51bSB1c2VkIGZvciBpZGVudGlmeWluZyBbRGFydFR5cGVdIHN1YmNsYXNzZXMgaW4gc2VyaWFsaXphdGlvbi4KZW51bSBEYXJ0VHlwZUtpbmQgewogIG5vbmUsCiAgdm9pZFR5cGUsCiAgdHlwZVZhcmlhYmxlLAogIGZ1bmN0aW9uVHlwZVZhcmlhYmxlLAogIGZ1bmN0aW9uVHlwZSwKICBpbnRlcmZhY2VUeXBlLAogIHR5cGVkZWYsCiAgZHluYW1pY1R5cGUsCiAgYW55VHlwZSwKICBmdXR1cmVPciwKfQoKLy8vIFZpc2l0b3IgdGhhdCBzZXJpYWxpemVzIFtEYXJ0VHlwZV0gb2JqZWN0IHRvZ2V0aGVyIHdpdGggW0Fic3RyYWN0RGF0YVNpbmtdLgpjbGFzcyBEYXJ0VHlwZVdyaXRlcgogICAgaW1wbGVtZW50cyBEYXJ0VHlwZVZpc2l0b3I8dm9pZCwgTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4+IHsKICBmaW5hbCBBYnN0cmFjdERhdGFTaW5rIF9zaW5rOwoKICBEYXJ0VHlwZVdyaXRlcih0aGlzLl9zaW5rKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdChjb3ZhcmlhbnQgRGFydFR5cGUgdHlwZSwKICAgICAgICAgIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykgPT4KICAgICAgdHlwZS5hY2NlcHQodGhpcywgZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKCiAgdm9pZCB2aXNpdFR5cGVzKAogICAgICBMaXN0PERhcnRUeXBlPiB0eXBlcywgTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gZnVuY3Rpb25UeXBlVmFyaWFibGVzKSB7CiAgICBfc2luay53cml0ZUludCh0eXBlcy5sZW5ndGgpOwogICAgZm9yIChEYXJ0VHlwZSB0eXBlIGluIHR5cGVzKSB7CiAgICAgIF9zaW5rLl93cml0ZURhcnRUeXBlKHR5cGUsIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Vm9pZFR5cGUoY292YXJpYW50IFZvaWRUeXBlIHR5cGUsCiAgICAgIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykgewogICAgX3Npbmsud3JpdGVFbnVtKERhcnRUeXBlS2luZC52b2lkVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZVZhcmlhYmxlVHlwZShjb3ZhcmlhbnQgVHlwZVZhcmlhYmxlVHlwZSB0eXBlLAogICAgICBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMpIHsKICAgIF9zaW5rLndyaXRlRW51bShEYXJ0VHlwZUtpbmQudHlwZVZhcmlhYmxlKTsKICAgIEluZGV4ZWRUeXBlVmFyaWFibGUgdHlwZVZhcmlhYmxlID0gdHlwZS5lbGVtZW50OwogICAgX3Npbmsud3JpdGVUeXBlVmFyaWFibGUodHlwZVZhcmlhYmxlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGdW5jdGlvblR5cGVWYXJpYWJsZShjb3ZhcmlhbnQgRnVuY3Rpb25UeXBlVmFyaWFibGUgdHlwZSwKICAgICAgTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gZnVuY3Rpb25UeXBlVmFyaWFibGVzKSB7CiAgICBpbnQgaW5kZXggPSBmdW5jdGlvblR5cGVWYXJpYWJsZXMuaW5kZXhPZih0eXBlKTsKICAgIGlmIChpbmRleCA9PSAtMSkgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBdm9pZCBmcmVlIHZhcmlhYmxlcy4KICAgICAgX3NpbmsuX3dyaXRlRGFydFR5cGUoY29uc3QgRHluYW1pY1R5cGUoKSwgZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgIH0gZWxzZSB7CiAgICAgIF9zaW5rLndyaXRlRW51bShEYXJ0VHlwZUtpbmQuZnVuY3Rpb25UeXBlVmFyaWFibGUpOwogICAgICBfc2luay53cml0ZUludChpbmRleCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RnVuY3Rpb25UeXBlKGNvdmFyaWFudCBGdW5jdGlvblR5cGUgdHlwZSwKICAgICAgTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gZnVuY3Rpb25UeXBlVmFyaWFibGVzKSB7CiAgICBfc2luay53cml0ZUVudW0oRGFydFR5cGVLaW5kLmZ1bmN0aW9uVHlwZSk7CiAgICBmdW5jdGlvblR5cGVWYXJpYWJsZXMgPQogICAgICAgIG5ldyBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPi5mcm9tKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykKICAgICAgICAgIC4uYWRkQWxsKHR5cGUudHlwZVZhcmlhYmxlcyk7CiAgICBfc2luay53cml0ZUludCh0eXBlLnR5cGVWYXJpYWJsZXMubGVuZ3RoKTsKICAgIGZvciAoRnVuY3Rpb25UeXBlVmFyaWFibGUgdmFyaWFibGUgaW4gdHlwZS50eXBlVmFyaWFibGVzKSB7CiAgICAgIF9zaW5rLl93cml0ZURhcnRUeXBlKHZhcmlhYmxlLmJvdW5kLCBmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgfQogICAgX3NpbmsuX3dyaXRlRGFydFR5cGUodHlwZS5yZXR1cm5UeXBlLCBmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgdmlzaXRUeXBlcyh0eXBlLnBhcmFtZXRlclR5cGVzLCBmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgdmlzaXRUeXBlcyh0eXBlLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMsIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICB2aXNpdFR5cGVzKHR5cGUubmFtZWRQYXJhbWV0ZXJUeXBlcywgZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgIGZvciAoU3RyaW5nIG5hbWVkUGFyYW1ldGVyIGluIHR5cGUubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgIF9zaW5rLndyaXRlU3RyaW5nKG5hbWVkUGFyYW1ldGVyKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRlcmZhY2VUeXBlKGNvdmFyaWFudCBJbnRlcmZhY2VUeXBlIHR5cGUsCiAgICAgIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykgewogICAgX3Npbmsud3JpdGVFbnVtKERhcnRUeXBlS2luZC5pbnRlcmZhY2VUeXBlKTsKICAgIF9zaW5rLndyaXRlQ2xhc3ModHlwZS5lbGVtZW50KTsKICAgIHZpc2l0VHlwZXModHlwZS50eXBlQXJndW1lbnRzLCBmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVkZWZUeXBlKGNvdmFyaWFudCBUeXBlZGVmVHlwZSB0eXBlLAogICAgICBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMpIHsKICAgIF9zaW5rLndyaXRlRW51bShEYXJ0VHlwZUtpbmQudHlwZWRlZik7CiAgICBfc2luay53cml0ZVR5cGVkZWYodHlwZS5lbGVtZW50KTsKICAgIHZpc2l0VHlwZXModHlwZS50eXBlQXJndW1lbnRzLCBmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgX3NpbmsuX3dyaXRlRGFydFR5cGUodHlwZS51bmFsaWFzZWQsIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RHluYW1pY1R5cGUoY292YXJpYW50IER5bmFtaWNUeXBlIHR5cGUsCiAgICAgIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykgewogICAgX3Npbmsud3JpdGVFbnVtKERhcnRUeXBlS2luZC5keW5hbWljVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QW55VHlwZShjb3ZhcmlhbnQgQW55VHlwZSB0eXBlLAogICAgICBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMpIHsKICAgIF9zaW5rLndyaXRlRW51bShEYXJ0VHlwZUtpbmQuYW55VHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RnV0dXJlT3JUeXBlKGNvdmFyaWFudCBGdXR1cmVPclR5cGUgdHlwZSwKICAgICAgTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gZnVuY3Rpb25UeXBlVmFyaWFibGVzKSB7CiAgICBfc2luay53cml0ZUVudW0oRGFydFR5cGVLaW5kLmZ1dHVyZU9yKTsKICAgIF9zaW5rLl93cml0ZURhcnRUeXBlKHR5cGUudHlwZUFyZ3VtZW50LCBmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogIH0KfQoKLy8vIEVudW0gdXNlZCBmb3IgaWRlbnRpZnlpbmcgW2lyLkRhcnRUeXBlXSBzdWJjbGFzc2VzIGluIHNlcmlhbGl6YXRpb24uCmVudW0gRGFydFR5cGVOb2RlS2luZCB7CiAgbm9uZSwKICB2b2lkVHlwZSwKICB0eXBlUGFyYW1ldGVyVHlwZSwKICBmdW5jdGlvblR5cGUsCiAgZnVuY3Rpb25UeXBlVmFyaWFibGUsCiAgaW50ZXJmYWNlVHlwZSwKICB0eXBlZGVmLAogIGR5bmFtaWNUeXBlLAogIGJvdHRvbVR5cGUsCiAgaW52YWxpZFR5cGUsCiAgdGhpc0ludGVyZmFjZVR5cGUsCiAgZXhhY3RJbnRlcmZhY2VUeXBlLAogIGRvZXNOb3RDb21wbGV0ZSwKfQoKY29uc3QgU3RyaW5nIGZ1bmN0aW9uVHlwZU5vZGVUYWcgPSAnZnVuY3Rpb24tdHlwZS1ub2RlJzsKCmNsYXNzIERhcnRUeXBlTm9kZVdyaXRlcgogICAgZXh0ZW5kcyBpci5EYXJ0VHlwZVZpc2l0b3IxPHZvaWQsIExpc3Q8aXIuVHlwZVBhcmFtZXRlcj4+IHsKICBmaW5hbCBBYnN0cmFjdERhdGFTaW5rIF9zaW5rOwoKICBEYXJ0VHlwZU5vZGVXcml0ZXIodGhpcy5fc2luayk7CgogIHZvaWQgdmlzaXRUeXBlcygKICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZXMsIExpc3Q8aXIuVHlwZVBhcmFtZXRlcj4gZnVuY3Rpb25UeXBlVmFyaWFibGVzKSB7CiAgICBfc2luay53cml0ZUludCh0eXBlcy5sZW5ndGgpOwogICAgZm9yIChpci5EYXJ0VHlwZSB0eXBlIGluIHR5cGVzKSB7CiAgICAgIF9zaW5rLl93cml0ZURhcnRUeXBlTm9kZSh0eXBlLCBmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWZhdWx0RGFydFR5cGUoCiAgICAgIGlyLkRhcnRUeXBlIG5vZGUsIExpc3Q8aXIuVHlwZVBhcmFtZXRlcj4gZnVuY3Rpb25UeXBlVmFyaWFibGVzKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiVW5leHBlY3RlZCBpci5EYXJ0VHlwZSAkbm9kZSAoJHtub2RlLnJ1bnRpbWVUeXBlfSkuIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW52YWxpZFR5cGUoCiAgICAgIGlyLkludmFsaWRUeXBlIG5vZGUsIExpc3Q8aXIuVHlwZVBhcmFtZXRlcj4gZnVuY3Rpb25UeXBlVmFyaWFibGVzKSB7CiAgICBfc2luay53cml0ZUVudW0oRGFydFR5cGVOb2RlS2luZC5pbnZhbGlkVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RHluYW1pY1R5cGUoCiAgICAgIGlyLkR5bmFtaWNUeXBlIG5vZGUsIExpc3Q8aXIuVHlwZVBhcmFtZXRlcj4gZnVuY3Rpb25UeXBlVmFyaWFibGVzKSB7CiAgICBfc2luay53cml0ZUVudW0oRGFydFR5cGVOb2RlS2luZC5keW5hbWljVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Vm9pZFR5cGUoCiAgICAgIGlyLlZvaWRUeXBlIG5vZGUsIExpc3Q8aXIuVHlwZVBhcmFtZXRlcj4gZnVuY3Rpb25UeXBlVmFyaWFibGVzKSB7CiAgICBfc2luay53cml0ZUVudW0oRGFydFR5cGVOb2RlS2luZC52b2lkVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Qm90dG9tVHlwZSgKICAgICAgaXIuQm90dG9tVHlwZSBub2RlLCBMaXN0PGlyLlR5cGVQYXJhbWV0ZXI+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykgewogICAgaWYgKG5vZGUgPT0gY29uc3QgRG9lc05vdENvbXBsZXRlVHlwZSgpKSB7CiAgICAgIF9zaW5rLndyaXRlRW51bShEYXJ0VHlwZU5vZGVLaW5kLmRvZXNOb3RDb21wbGV0ZSk7CiAgICB9IGVsc2UgewogICAgICBfc2luay53cml0ZUVudW0oRGFydFR5cGVOb2RlS2luZC5ib3R0b21UeXBlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRlcmZhY2VUeXBlKAogICAgICBpci5JbnRlcmZhY2VUeXBlIG5vZGUsIExpc3Q8aXIuVHlwZVBhcmFtZXRlcj4gZnVuY3Rpb25UeXBlVmFyaWFibGVzKSB7CiAgICBpZiAobm9kZSBpcyBUaGlzSW50ZXJmYWNlVHlwZSkgewogICAgICBfc2luay53cml0ZUVudW0oRGFydFR5cGVOb2RlS2luZC50aGlzSW50ZXJmYWNlVHlwZSk7CiAgICB9IGVsc2UgaWYgKG5vZGUgaXMgRXhhY3RJbnRlcmZhY2VUeXBlKSB7CiAgICAgIF9zaW5rLndyaXRlRW51bShEYXJ0VHlwZU5vZGVLaW5kLmV4YWN0SW50ZXJmYWNlVHlwZSk7CiAgICB9IGVsc2UgewogICAgICBfc2luay53cml0ZUVudW0oRGFydFR5cGVOb2RlS2luZC5pbnRlcmZhY2VUeXBlKTsKICAgIH0KICAgIF9zaW5rLndyaXRlQ2xhc3NOb2RlKG5vZGUuY2xhc3NOb2RlKTsKICAgIHZpc2l0VHlwZXMobm9kZS50eXBlQXJndW1lbnRzLCBmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZ1bmN0aW9uVHlwZSgKICAgICAgaXIuRnVuY3Rpb25UeXBlIG5vZGUsIExpc3Q8aXIuVHlwZVBhcmFtZXRlcj4gZnVuY3Rpb25UeXBlVmFyaWFibGVzKSB7CiAgICBfc2luay53cml0ZUVudW0oRGFydFR5cGVOb2RlS2luZC5mdW5jdGlvblR5cGUpOwogICAgX3NpbmsuYmVnaW4oZnVuY3Rpb25UeXBlTm9kZVRhZyk7CiAgICBmdW5jdGlvblR5cGVWYXJpYWJsZXMgPQogICAgICAgIG5ldyBMaXN0PGlyLlR5cGVQYXJhbWV0ZXI+LmZyb20oZnVuY3Rpb25UeXBlVmFyaWFibGVzKQogICAgICAgICAgLi5hZGRBbGwobm9kZS50eXBlUGFyYW1ldGVycyk7CiAgICBfc2luay53cml0ZUludChub2RlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCk7CiAgICBmb3IgKGlyLlR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyIGluIG5vZGUudHlwZVBhcmFtZXRlcnMpIHsKICAgICAgX3Npbmsud3JpdGVTdHJpbmcocGFyYW1ldGVyLm5hbWUpOwogICAgICBfc2luay5fd3JpdGVEYXJ0VHlwZU5vZGUocGFyYW1ldGVyLmJvdW5kLCBmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgICBfc2luay5fd3JpdGVEYXJ0VHlwZU5vZGUocGFyYW1ldGVyLmRlZmF1bHRUeXBlLCBmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgfQogICAgX3NpbmsuX3dyaXRlRGFydFR5cGVOb2RlKG5vZGUucmV0dXJuVHlwZSwgZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgIF9zaW5rLndyaXRlSW50KG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCk7CiAgICB2aXNpdFR5cGVzKG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMsIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICBfc2luay53cml0ZUludChub2RlLm5hbWVkUGFyYW1ldGVycy5sZW5ndGgpOwogICAgZm9yIChpci5OYW1lZFR5cGUgcGFyYW1ldGVyIGluIG5vZGUubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgIF9zaW5rLndyaXRlU3RyaW5nKHBhcmFtZXRlci5uYW1lKTsKICAgICAgX3NpbmsuX3dyaXRlRGFydFR5cGVOb2RlKHBhcmFtZXRlci50eXBlLCBmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgfQogICAgX3NpbmsuX3dyaXRlRGFydFR5cGVOb2RlKG5vZGUudHlwZWRlZlR5cGUsIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcywKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgX3NpbmsuZW5kKGZ1bmN0aW9uVHlwZU5vZGVUYWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVQYXJhbWV0ZXJUeXBlKAogICAgICBpci5UeXBlUGFyYW1ldGVyVHlwZSBub2RlLCBMaXN0PGlyLlR5cGVQYXJhbWV0ZXI+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykgewogICAgaW50IGluZGV4ID0gZnVuY3Rpb25UeXBlVmFyaWFibGVzLmluZGV4T2Yobm9kZS5wYXJhbWV0ZXIpOwogICAgaWYgKGluZGV4ICE9IC0xKSB7CiAgICAgIF9zaW5rLndyaXRlRW51bShEYXJ0VHlwZU5vZGVLaW5kLmZ1bmN0aW9uVHlwZVZhcmlhYmxlKTsKICAgICAgX3Npbmsud3JpdGVJbnQoaW5kZXgpOwogICAgICBfc2luay5fd3JpdGVEYXJ0VHlwZU5vZGUobm9kZS5wcm9tb3RlZEJvdW5kLCBmdW5jdGlvblR5cGVWYXJpYWJsZXMsCiAgICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgX3Npbmsud3JpdGVFbnVtKERhcnRUeXBlTm9kZUtpbmQudHlwZVBhcmFtZXRlclR5cGUpOwogICAgICBfc2luay53cml0ZVR5cGVQYXJhbWV0ZXJOb2RlKG5vZGUucGFyYW1ldGVyKTsKICAgICAgX3NpbmsuX3dyaXRlRGFydFR5cGVOb2RlKG5vZGUucHJvbW90ZWRCb3VuZCwgZnVuY3Rpb25UeXBlVmFyaWFibGVzLAogICAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlZGVmVHlwZSgKICAgICAgaXIuVHlwZWRlZlR5cGUgbm9kZSwgTGlzdDxpci5UeXBlUGFyYW1ldGVyPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMpIHsKICAgIF9zaW5rLndyaXRlRW51bShEYXJ0VHlwZU5vZGVLaW5kLnR5cGVkZWYpOwogICAgX3Npbmsud3JpdGVUeXBlZGVmTm9kZShub2RlLnR5cGVkZWZOb2RlKTsKICAgIHZpc2l0VHlwZXMobm9kZS50eXBlQXJndW1lbnRzLCBmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogIH0KfQoKLy8vIERhdGEgc2luayBoZWxwZXIgdGhhdCBjYW5vbmljYWxpemVzIFtFXSB2YWx1ZXMgdXNpbmcgaW5kaWNlcy4KY2xhc3MgSW5kZXhlZFNpbms8RT4gewogIGZpbmFsIEFic3RyYWN0RGF0YVNpbmsgX3Npbms7CiAgZmluYWwgTWFwPEUsIGludD4gX2NhY2hlID0ge251bGw6IDB9OyAvLyBzbG90IDAgaXMgcHJlLWFsbG9jYXRlZCB0byBgbnVsbGAuCgogIEluZGV4ZWRTaW5rKHRoaXMuX3NpbmspOwoKICAvLy8gV3JpdGUgYSByZWZlcmVuY2UgdG8gW3ZhbHVlXSB0byB0aGUgZGF0YSBzaW5rLgogIC8vLwogIC8vLyBJZiBbdmFsdWVdIGhhcyBub3QgYmVlbiBjYW5vbmljYWxpemVkIHlldCwgW3dyaXRlVmFsdWVdIGlzIGNhbGxlZCB0bwogIC8vLyBzZXJpYWxpemUgdGhlIFt2YWx1ZV0gaXRzZWxmLgogIHZvaWQgd3JpdGUoRSB2YWx1ZSwgdm9pZCB3cml0ZVZhbHVlKEUgdmFsdWUpKSB7CiAgICBjb25zdCBpbnQgcGVuZGluZyA9IC0xOwogICAgaW50IGluZGV4ID0gX2NhY2hlW3ZhbHVlXTsKICAgIGlmIChpbmRleCA9PSBudWxsKSB7CiAgICAgIGluZGV4ID0gX2NhY2hlLmxlbmd0aDsKICAgICAgX3NpbmsuX3dyaXRlSW50SW50ZXJuYWwoaW5kZXgpOwogICAgICBfY2FjaGVbdmFsdWVdID0gcGVuZGluZzsgLy8gSW5jcmVtZW50cyBsZW5ndGggdG8gYWxsb2NhdGUgc2xvdC4KICAgICAgd3JpdGVWYWx1ZSh2YWx1ZSk7CiAgICAgIF9jYWNoZVt2YWx1ZV0gPSBpbmRleDsKICAgIH0gZWxzZSBpZiAoaW5kZXggPT0gcGVuZGluZykgewogICAgICB0aHJvdyBBcmd1bWVudEVycm9yKCJDeWNsaWMgZGVwZW5kZW5jeSBvbiBjYWNoZWQgdmFsdWU6ICR2YWx1ZSIpOwogICAgfSBlbHNlIHsKICAgICAgX3NpbmsuX3dyaXRlSW50SW50ZXJuYWwoaW5kZXgpOwogICAgfQogIH0KfQoKLy8vIERhdGEgc291cmNlIGhlbHBlciByZWFkcyBjYW5vbmljYWxpemVkIFtFXSB2YWx1ZXMgdGhyb3VnaCBpbmRpY2VzLgpjbGFzcyBJbmRleGVkU291cmNlPEU+IHsKICBmaW5hbCBBYnN0cmFjdERhdGFTb3VyY2UgX3NvdXJjZTsKICBmaW5hbCBMaXN0PEU+IF9jYWNoZSA9IFtudWxsXTsgLy8gc2xvdCAwIGlzIHByZS1hbGxvY2F0ZWQgdG8gYG51bGxgLgoKICBJbmRleGVkU291cmNlKHRoaXMuX3NvdXJjZSk7CgogIC8vLyBSZWFkcyBhIHJlZmVyZW5jZSB0byBhbiBbRV0gdmFsdWUgZnJvbSB0aGUgZGF0YSBzb3VyY2UuCiAgLy8vCiAgLy8vIElmIHRoZSB2YWx1ZSBoYXNuJ3QgeWV0IGJlZW4gcmVhZCwgW3JlYWRWYWx1ZV0gaXMgY2FsbGVkIHRvIGRlc2VyaWFsaXplCiAgLy8vIHRoZSB2YWx1ZSBpdHNlbGYuCiAgRSByZWFkKEUgcmVhZFZhbHVlKCkpIHsKICAgIGludCBpbmRleCA9IF9zb3VyY2UuX3JlYWRJbnRJbnRlcm5hbCgpOwogICAgaWYgKGluZGV4ID49IF9jYWNoZS5sZW5ndGgpIHsKICAgICAgYXNzZXJ0KGluZGV4ID09IF9jYWNoZS5sZW5ndGgpOwogICAgICBfY2FjaGUuYWRkKG51bGwpOyAvLyBwbGFjZWhvbGRlci4KICAgICAgRSB2YWx1ZSA9IHJlYWRWYWx1ZSgpOwogICAgICBfY2FjaGVbaW5kZXhdID0gdmFsdWU7CiAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0gZWxzZSB7CiAgICAgIEUgdmFsdWUgPSBfY2FjaGVbaW5kZXhdOwogICAgICBpZiAodmFsdWUgPT0gbnVsbCAmJiBpbmRleCAhPSAwKSB7CiAgICAgICAgdGhyb3cgU3RhdGVFcnJvcignVW5maWxsZWQgaW5kZXggJGluZGV4IG9mICRFJyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQogIH0KfQqBjwBOTjwBHgFJBE0ZEAgKCg0HDw0PDgwVDBAODAoKBwIBUSgBQxEKDQwZFQIBSRUHCggQER8MAgFKGQ0PFhcCAUsaBxACAUUMFgETAQwrAQwcLSUhBAEMJgIBRhQIDBAYEBELDwsMAgFQFUMgAR4BDCY/MAETUCIjOQYEAQwuOiwEAQw+OjA1KwQBDEY6NRc0SA06HQYEAQw2OjAcQygvQEMGQjxEQTopBgQBDDg6MSQ7BAEMNDorJjtBBAEMNDovBAEMLDorBAEMNjosRAQCAUkYCAwVEBgRCw8ODxUWEwIBOQEZQCABIgETTyImPQYEAQwYSCBABAEMGUszBAEMGUszBAEMFkgwBAEMGEovOQ00BgQBDBtNJTstPA03Bio7BAEMGkw0Jhw/KTA+KUhOBkYxQjE7KUcGRhokBAEMH1E/Fz4dShwNOzRKHAYEAQwZSy8uOwQCAUIXIE4BGwE1BkskMhwfGR0mRhkdI0gNJgYEAgFHGSRHAR8BPgZOGBosIiYoHR0UDR8pOQgUBgQCAS9wYWNrYWdlOmNvbXBpbGVyL3NyYy9zZXJpYWxpemF0aW9uL2hlbHBlcnMuZGFydDxzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zZXJpYWxpemF0aW9uL21lbWJlcl9kYXRhLmRhcnShLi8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mICdzZXJpYWxpemF0aW9uLmRhcnQnOwoKLy8vIEhlbHBlciBmb3IgbG9va2luZyB1cCBvYmplY3QgbGlicmFyeSBkYXRhIGZyb20gYW4gW2lyLkNvbXBvbmVudF0gbm9kZS4KY2xhc3MgQ29tcG9uZW50TG9va3VwIHsKICBmaW5hbCBpci5Db21wb25lbnQgX2NvbXBvbmVudDsKCiAgLy8vIENhY2hlIG9mIFtfTGlicmFyeURhdGFdIGZvciBsaWJyYXJpZXMgaW4gW19jb21wb25lbnRdLgogIE1hcDxVcmksIF9MaWJyYXJ5RGF0YT4gX2xpYnJhcnlNYXA7CgogIENvbXBvbmVudExvb2t1cCh0aGlzLl9jb21wb25lbnQpOwoKICAvLy8gUmV0dXJucyB0aGUgW19MaWJyYXJ5RGF0YV0gb2JqZWN0IGZvciB0aGUgbGlicmFyeSB3aXRoIHRoZSBbY2Fub25pY2FsVXJpXS4KICBfTGlicmFyeURhdGEgZ2V0TGlicmFyeURhdGFCeVVyaShVcmkgY2Fub25pY2FsVXJpKSB7CiAgICBpZiAoX2xpYnJhcnlNYXAgPT0gbnVsbCkgewogICAgICBfbGlicmFyeU1hcCA9IHt9OwogICAgICBmb3IgKGlyLkxpYnJhcnkgbGlicmFyeSBpbiBfY29tcG9uZW50LmxpYnJhcmllcykgewogICAgICAgIF9saWJyYXJ5TWFwW2xpYnJhcnkuaW1wb3J0VXJpXSA9IG5ldyBfTGlicmFyeURhdGEobGlicmFyeSk7CiAgICAgIH0KICAgIH0KICAgIF9MaWJyYXJ5RGF0YSBkYXRhID0gX2xpYnJhcnlNYXBbY2Fub25pY2FsVXJpXTsKICAgIGFzc2VydChkYXRhICE9IG51bGwsICJObyBsaWJyYXJ5IGZvdW5kIGZvciAkY2Fub25pY2FsVXJpLiIpOwogICAgcmV0dXJuIGRhdGE7CiAgfQp9CgovLy8gUmV0dXJucyBhIG5hbWUgdW5pcXVlbHkgaWRlbnRpZnlpbmcgYSBtZW1iZXIgd2l0aGluIGl0cyBlbmNsb3NpbmcgbGlicmFyeQovLy8gb3IgY2xhc3MuClN0cmluZyBfY29tcHV0ZU1lbWJlck5hbWUoaXIuTWVtYmVyIG1lbWJlcikgewogIGlmIChtZW1iZXIubmFtZS5pc1ByaXZhdGUgJiYKICAgICAgbWVtYmVyLm5hbWUubGlicmFyeU5hbWUgIT0gbWVtYmVyLmVuY2xvc2luZ0xpYnJhcnkucmVmZXJlbmNlKSB7CiAgICAvLyBUT0RPKDMzNzMyKTogSGFuZGxlIG5vU3VjaE1ldGhvZCBmb3J3YXJkZXJzIGZvciBwcml2YXRlIG1lbWJlcnMgZnJvbQogICAgLy8gb3RoZXIgbGlicmFyaWVzLgogICAgcmV0dXJuIG51bGw7CiAgfQogIFN0cmluZyBuYW1lID0gbWVtYmVyLm5hbWUubmFtZTsKICBpZiAobWVtYmVyIGlzIGlyLkNvbnN0cnVjdG9yKSB7CiAgICBuYW1lID0gJy4kbmFtZSc7CiAgfSBlbHNlIGlmIChtZW1iZXIgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICBpZiAobWVtYmVyLmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5GYWN0b3J5KSB7CiAgICAgIG5hbWUgPSAnLiRuYW1lJzsKICAgIH0gZWxzZSBpZiAobWVtYmVyLmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5TZXR0ZXIpIHsKICAgICAgbmFtZSArPSAiPSI7CiAgICB9CiAgfQogIHJldHVybiBuYW1lOwp9CgovLy8gSGVscGVyIGZvciBsb29raW5nIHVwIGNsYXNzZXMgYW5kIG1lbWJlcnMgZnJvbSBhbiBbaXIuTGlicmFyeV0gbm9kZS4KY2xhc3MgX0xpYnJhcnlEYXRhIHsKICAvLy8gVGhlIFtpci5MaWJyYXJ5XSB0aGF0IGRlZmluZXMgdGhlIGxpYnJhcnkuCiAgZmluYWwgaXIuTGlicmFyeSBub2RlOwoKICAvLy8gQ2FjaGUgb2YgW19DbGFzc0RhdGFdIGZvciBjbGFzc2VzIGluIHRoaXMgbGlicmFyeS4KICBNYXA8U3RyaW5nLCBfQ2xhc3NEYXRhPiBfY2xhc3Nlc0J5TmFtZTsKICBNYXA8aXIuQ2xhc3MsIF9DbGFzc0RhdGE+IF9jbGFzc2VzQnlOb2RlOwoKICAvLy8gQ2FjaGUgb2YgW2lyLlR5cGVkZWZdIG5vZGVzIGZvciB0eXBlZGVmcyBpbiB0aGlzIGxpYnJhcnkuCiAgTWFwPFN0cmluZywgaXIuVHlwZWRlZj4gX3R5cGVkZWZzOwoKICAvLy8gQ2FjaGUgb2YgW19NZW1iZXJEYXRhXSBmb3IgbWVtYmVycyBpbiB0aGlzIGxpYnJhcnkuCiAgTWFwPFN0cmluZywgX01lbWJlckRhdGE+IF9tZW1iZXJzQnlOYW1lOwogIE1hcDxpci5NZW1iZXIsIF9NZW1iZXJEYXRhPiBfbWVtYmVyc0J5Tm9kZTsKCiAgX0xpYnJhcnlEYXRhKHRoaXMubm9kZSk7CgogIHZvaWQgX2Vuc3VyZUNsYXNzZXMoKSB7CiAgICBpZiAoX2NsYXNzZXNCeU5hbWUgPT0gbnVsbCkgewogICAgICBfY2xhc3Nlc0J5TmFtZSA9IHt9OwogICAgICBfY2xhc3Nlc0J5Tm9kZSA9IHt9OwogICAgICBmb3IgKGlyLkNsYXNzIGNscyBpbiBub2RlLmNsYXNzZXMpIHsKICAgICAgICBhc3NlcnQoCiAgICAgICAgICAgICFfY2xhc3Nlc0J5TmFtZS5jb250YWluc0tleShjbHMubmFtZSksCiAgICAgICAgICAgICJEdXBsaWNhdGUgY2xhc3MgJyR7Y2xzLm5hbWV9JyBpbiAkX2NsYXNzZXNCeU5hbWUgIgogICAgICAgICAgICAidHJ5aW5nIHRvIGFkZCAkY2xzLiIpOwogICAgICAgIGFzc2VydCgKICAgICAgICAgICAgIV9jbGFzc2VzQnlOb2RlLmNvbnRhaW5zS2V5KGNscyksCiAgICAgICAgICAgICJEdXBsaWNhdGUgY2xhc3MgJyR7Y2xzLm5hbWV9JyBpbiAkX2NsYXNzZXNCeU5vZGUgIgogICAgICAgICAgICAidHJ5aW5nIHRvIGFkZCAkY2xzLiIpOwogICAgICAgIF9jbGFzc2VzQnlOb2RlW2Nsc10gPSBfY2xhc3Nlc0J5TmFtZVtjbHMubmFtZV0gPSBuZXcgX0NsYXNzRGF0YShjbHMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgW19DbGFzc0RhdGFdIGZvciB0aGUgY2xhc3MgW25hbWVdIGluIHRoaXMgbGlicmFyeS4KICBfQ2xhc3NEYXRhIGxvb2t1cENsYXNzQnlOYW1lKFN0cmluZyBuYW1lKSB7CiAgICBfZW5zdXJlQ2xhc3NlcygpOwogICAgcmV0dXJuIF9jbGFzc2VzQnlOYW1lW25hbWVdOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIFtfQ2xhc3NEYXRhXSBmb3IgdGhlIGNsYXNzIFtub2RlXSBpbiB0aGlzIGxpYnJhcnkuCiAgX0NsYXNzRGF0YSBsb29rdXBDbGFzc0J5Tm9kZShpci5DbGFzcyBub2RlKSB7CiAgICBfZW5zdXJlQ2xhc3NlcygpOwogICAgcmV0dXJuIF9jbGFzc2VzQnlOb2RlW25vZGVdOwogIH0KCiAgaXIuVHlwZWRlZiBsb29rdXBUeXBlZGVmKFN0cmluZyBuYW1lKSB7CiAgICBpZiAoX3R5cGVkZWZzID09IG51bGwpIHsKICAgICAgX3R5cGVkZWZzID0ge307CiAgICAgIGZvciAoaXIuVHlwZWRlZiB0eXBlZGVmIGluIG5vZGUudHlwZWRlZnMpIHsKICAgICAgICBhc3NlcnQoCiAgICAgICAgICAgICFfdHlwZWRlZnMuY29udGFpbnNLZXkodHlwZWRlZi5uYW1lKSwKICAgICAgICAgICAgIkR1cGxpY2F0ZSB0eXBlZGVmICcke3R5cGVkZWYubmFtZX0nIGluICRfdHlwZWRlZnMgIgogICAgICAgICAgICAidHJ5aW5nIHRvIGFkZCAkdHlwZWRlZi4iKTsKICAgICAgICBfdHlwZWRlZnNbdHlwZWRlZi5uYW1lXSA9IHR5cGVkZWY7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfdHlwZWRlZnNbbmFtZV07CiAgfQoKICB2b2lkIF9lbnN1cmVNZW1iZXJzKCkgewogICAgaWYgKF9tZW1iZXJzQnlOYW1lID09IG51bGwpIHsKICAgICAgX21lbWJlcnNCeU5hbWUgPSB7fTsKICAgICAgX21lbWJlcnNCeU5vZGUgPSB7fTsKICAgICAgZm9yIChpci5NZW1iZXIgbWVtYmVyIGluIG5vZGUubWVtYmVycykgewogICAgICAgIFN0cmluZyBuYW1lID0gX2NvbXB1dGVNZW1iZXJOYW1lKG1lbWJlcik7CiAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCkgY29udGludWU7CiAgICAgICAgYXNzZXJ0KAogICAgICAgICAgICAhX21lbWJlcnNCeU5hbWUuY29udGFpbnNLZXkobmFtZSksCiAgICAgICAgICAgICJEdXBsaWNhdGUgbWVtYmVyICckbmFtZScgaW4gJF9tZW1iZXJzQnlOYW1lICIKICAgICAgICAgICAgInRyeWluZyB0byBhZGQgJG1lbWJlci4iKTsKICAgICAgICBhc3NlcnQoCiAgICAgICAgICAgICFfbWVtYmVyc0J5Tm9kZS5jb250YWluc0tleShtZW1iZXIpLAogICAgICAgICAgICAiRHVwbGljYXRlIG1lbWJlciAnJG5hbWUnIGluICRfbWVtYmVyc0J5Tm9kZSAiCiAgICAgICAgICAgICJ0cnlpbmcgdG8gYWRkICRtZW1iZXIuIik7CiAgICAgICAgX21lbWJlcnNCeU5vZGVbbWVtYmVyXSA9IF9tZW1iZXJzQnlOYW1lW25hbWVdID0gbmV3IF9NZW1iZXJEYXRhKG1lbWJlcik7CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIHRoZSBbX01lbWJlckRhdGFdIGZvciB0aGUgbWVtYmVyIHVuaXF1ZWx5IGlkZW50aWZpZWQgYnkgW25hbWVdIGluCiAgLy8vIHRoaXMgbGlicmFyeS4KICBfTWVtYmVyRGF0YSBsb29rdXBNZW1iZXJEYXRhQnlOYW1lKFN0cmluZyBuYW1lKSB7CiAgICBfZW5zdXJlTWVtYmVycygpOwogICAgcmV0dXJuIF9tZW1iZXJzQnlOYW1lW25hbWVdOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIFtfTWVtYmVyRGF0YV0gZm9yIHRoZSBtZW1iZXIgW25vZGVdIGluIHRoaXMgbGlicmFyeS4KICBfTWVtYmVyRGF0YSBsb29rdXBNZW1iZXJEYXRhQnlOb2RlKGlyLk1lbWJlciBub2RlKSB7CiAgICBfZW5zdXJlTWVtYmVycygpOwogICAgcmV0dXJuIF9tZW1iZXJzQnlOb2RlW25vZGVdOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ19MaWJyYXJ5RGF0YSgkbm9kZSgke2lkZW50aXR5SGFzaENvZGUobm9kZSl9KSknOwp9CgovLy8gSGVscGVyIGZvciBsb29raW5nIHVwIG1lbWJlcnMgZnJvbSBhbiBbaXIuQ2xhc3NdIG5vZGUuCmNsYXNzIF9DbGFzc0RhdGEgewogIC8vLyBUaGUgW2lyLkNsYXNzXSB0aGF0IGRlZmluZXMgdGhlIGNsYXNzLgogIGZpbmFsIGlyLkNsYXNzIG5vZGU7CgogIC8vLyBDYWNoZSBvZiBbX01lbWJlckRhdGFdIGZvciBtZW1iZXJzIGluIHRoaXMgY2xhc3MuCiAgTWFwPFN0cmluZywgX01lbWJlckRhdGE+IF9tZW1iZXJzQnlOYW1lOwogIE1hcDxpci5NZW1iZXIsIF9NZW1iZXJEYXRhPiBfbWVtYmVyc0J5Tm9kZTsKCiAgX0NsYXNzRGF0YSh0aGlzLm5vZGUpOwoKICB2b2lkIF9lbnN1cmVNZW1iZXJzKCkgewogICAgaWYgKF9tZW1iZXJzQnlOYW1lID09IG51bGwpIHsKICAgICAgX21lbWJlcnNCeU5hbWUgPSB7fTsKICAgICAgX21lbWJlcnNCeU5vZGUgPSB7fTsKICAgICAgZm9yIChpci5NZW1iZXIgbWVtYmVyIGluIG5vZGUubWVtYmVycykgewogICAgICAgIFN0cmluZyBuYW1lID0gX2NvbXB1dGVNZW1iZXJOYW1lKG1lbWJlcik7CiAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCkgY29udGludWU7CiAgICAgICAgYXNzZXJ0KAogICAgICAgICAgICAhX21lbWJlcnNCeU5hbWUuY29udGFpbnNLZXkobmFtZSksCiAgICAgICAgICAgICJEdXBsaWNhdGUgbWVtYmVyICckbmFtZScgaW4gJF9tZW1iZXJzQnlOYW1lICIKICAgICAgICAgICAgInRyeWluZyB0byBhZGQgJG1lbWJlci4iKTsKICAgICAgICBhc3NlcnQoCiAgICAgICAgICAgICFfbWVtYmVyc0J5Tm9kZS5jb250YWluc0tleShtZW1iZXIpLAogICAgICAgICAgICAiRHVwbGljYXRlIG1lbWJlciAnJG5hbWUnIGluICRfbWVtYmVyc0J5Tm9kZSAiCiAgICAgICAgICAgICJ0cnlpbmcgdG8gYWRkICRtZW1iZXIuIik7CiAgICAgICAgX21lbWJlcnNCeU5vZGVbbWVtYmVyXSA9IF9tZW1iZXJzQnlOYW1lW25hbWVdID0gbmV3IF9NZW1iZXJEYXRhKG1lbWJlcik7CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIHRoZSBbX01lbWJlckRhdGFdIGZvciB0aGUgbWVtYmVyIHVuaXF1ZWx5IGlkZW50aWZpZWQgYnkgW25hbWVdIGluCiAgLy8vIHRoaXMgY2xhc3MuCiAgX01lbWJlckRhdGEgbG9va3VwTWVtYmVyRGF0YUJ5TmFtZShTdHJpbmcgbmFtZSkgewogICAgX2Vuc3VyZU1lbWJlcnMoKTsKICAgIHJldHVybiBfbWVtYmVyc0J5TmFtZVtuYW1lXTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBbX01lbWJlckRhdGFdIGZvciB0aGUgbWVtYmVyIFtub2RlXSBpbiB0aGlzIGNsYXNzLgogIF9NZW1iZXJEYXRhIGxvb2t1cE1lbWJlckRhdGFCeU5vZGUoaXIuTWVtYmVyIG5vZGUpIHsKICAgIF9lbnN1cmVNZW1iZXJzKCk7CiAgICByZXR1cm4gX21lbWJlcnNCeU5vZGVbbm9kZV07CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnX0NsYXNzRGF0YSgkbm9kZSgke2lkZW50aXR5SGFzaENvZGUobm9kZSl9KSknOwp9CgovLy8gSGVscGVyIGZvciBsb29raW5nIHVwIGNoaWxkIFtpci5UcmVlTm9kZV1zIG9mIGEgW2lyLk1lbWJlcl0gbm9kZS4KY2xhc3MgX01lbWJlckRhdGEgewogIC8vLyBUaGUgW2lyLk1lbWJlcl0gdGhhdCBkZWZpbmVzIHRoZSBtZW1iZXIuCiAgZmluYWwgaXIuTWVtYmVyIG5vZGU7CgogIC8vLyBDYWNoZWQgaW5kZXggdG8gW2lyLlRyZWVOb2RlXSBtYXAgdXNlZCBmb3IgZGVzZXJpYWxpemF0aW9uIG9mCiAgLy8vIFtpci5UcmVlTm9kZV1zLgogIE1hcDxpbnQsIGlyLlRyZWVOb2RlPiBfaW5kZXhUb05vZGVNYXA7CgogIC8vLyBDYWNoZWQgW2lyLlRyZWVOb2RlXSB0byBpbmRleCBtYXAgdXNlZCBmb3Igc2VyaWFsaXphdGlvbiBvZgogIC8vLyBbaXIuVHJlZU5vZGVdcy4KICBNYXA8aXIuVHJlZU5vZGUsIGludD4gX25vZGVUb0luZGV4TWFwOwoKICAvLy8gQ2FjaGVkIFtpci5Db25zdGFudEV4cHJlc3Npb25dIHRvIFtfQ29uc3RhbnROb2RlSW5kZXhlclZpc2l0b3JdIG1hcCB1c2VkCiAgLy8vIGZvciBmYXN0IHNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uIG9mIGNvbnN0YW50IHJlZmVyZW5jZXMuCiAgTWFwPGlyLkNvbnN0YW50RXhwcmVzc2lvbiwgX0NvbnN0YW50Tm9kZUluZGV4ZXJWaXNpdG9yPiBfY29uc3RhbnRJbmRleE1hcDsKCiAgX01lbWJlckRhdGEodGhpcy5ub2RlKTsKCiAgdm9pZCBfZW5zdXJlTWFwcygpIHsKICAgIGlmIChfaW5kZXhUb05vZGVNYXAgPT0gbnVsbCkgewogICAgICBfaW5kZXhUb05vZGVNYXAgPSB7fTsKICAgICAgX25vZGVUb0luZGV4TWFwID0ge307CiAgICAgIG5vZGUuYWNjZXB0KAogICAgICAgICAgbmV3IF9UcmVlTm9kZUluZGV4ZXJWaXNpdG9yKF9pbmRleFRvTm9kZU1hcCwgX25vZGVUb0luZGV4TWFwKSk7CiAgICB9CiAgfQoKICBfQ29uc3RhbnROb2RlSW5kZXhlclZpc2l0b3IgX2NyZWF0ZUNvbnN0YW50SW5kZXhlcigKICAgICAgaXIuQ29uc3RhbnRFeHByZXNzaW9uIG5vZGUpIHsKICAgIF9Db25zdGFudE5vZGVJbmRleGVyVmlzaXRvciBpbmRleGVyID0gbmV3IF9Db25zdGFudE5vZGVJbmRleGVyVmlzaXRvcigpOwogICAgbm9kZS5jb25zdGFudC5hY2NlcHQoaW5kZXhlcik7CiAgICByZXR1cm4gaW5kZXhlcjsKICB9CgogIGlyLkNvbnN0YW50IGdldENvbnN0YW50QnlJbmRleChpci5Db25zdGFudEV4cHJlc3Npb24gbm9kZSwgaW50IGluZGV4KSB7CiAgICBfY29uc3RhbnRJbmRleE1hcCA/Pz0ge307CiAgICBfQ29uc3RhbnROb2RlSW5kZXhlclZpc2l0b3IgaW5kZXhlciA9CiAgICAgICAgX2NvbnN0YW50SW5kZXhNYXBbbm9kZV0gPz89IF9jcmVhdGVDb25zdGFudEluZGV4ZXIobm9kZSk7CiAgICByZXR1cm4gaW5kZXhlci5nZXRDb25zdGFudChpbmRleCk7CiAgfQoKICBpbnQgZ2V0SW5kZXhCeUNvbnN0YW50KGlyLkNvbnN0YW50RXhwcmVzc2lvbiBub2RlLCBpci5Db25zdGFudCBjb25zdGFudCkgewogICAgX2NvbnN0YW50SW5kZXhNYXAgPz89IHt9OwogICAgX0NvbnN0YW50Tm9kZUluZGV4ZXJWaXNpdG9yIGluZGV4ZXIgPQogICAgICAgIF9jb25zdGFudEluZGV4TWFwW25vZGVdID8/PSBfY3JlYXRlQ29uc3RhbnRJbmRleGVyKG5vZGUpOwogICAgcmV0dXJuIGluZGV4ZXIuZ2V0SW5kZXgoY29uc3RhbnQpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIFtpci5UcmVlTm9kZV0gY29ycmVzcG9uZGluZyB0byBbaW5kZXhdIGluIHRoaXMgbWVtYmVyLgogIGlyLlRyZWVOb2RlIGdldFRyZWVOb2RlQnlJbmRleChpbnQgaW5kZXgpIHsKICAgIF9lbnN1cmVNYXBzKCk7CiAgICBpci5UcmVlTm9kZSB0cmVlTm9kZSA9IF9pbmRleFRvTm9kZU1hcFtpbmRleF07CiAgICBhc3NlcnQodHJlZU5vZGUgIT0gbnVsbCwgIk5vIFRyZWVOb2RlIGZvdW5kIGZvciBpbmRleCAkaW5kZXggaW4gJG5vZGUuIik7CiAgICByZXR1cm4gdHJlZU5vZGU7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgaW5kZXggY29ycmVzcG9uZGluZyB0byBbaXIuVHJlZU5vZGVdIGluIHRoaXMgbWVtYmVyLgogIGludCBnZXRJbmRleEJ5VHJlZU5vZGUoaXIuVHJlZU5vZGUgbm9kZSkgewogICAgX2Vuc3VyZU1hcHMoKTsKICAgIGludCBpbmRleCA9IF9ub2RlVG9JbmRleE1hcFtub2RlXTsKICAgIGFzc2VydChpbmRleCAhPSBudWxsLCAiTm8gaW5kZXggZm91bmQgZm9yICR7bm9kZS5ydW50aW1lVHlwZX0uIik7CiAgICByZXR1cm4gaW5kZXg7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnX01lbWJlckRhdGEoJG5vZGUoJHtpZGVudGl0eUhhc2hDb2RlKG5vZGUpfSkpJzsKfQqBDABOTjwBHgFLGCEBPSYBJAFRNx8YOUQIBjNBEQQCAU4OLh9GTBgRBCIiFSczFzkTBgQPAgFJFTEZATkqLAFAJQE6Ky4BGwEaIhsbKxAzQCQQLkAkTggGBAFFLhYhBAFFMBYhBAEqHRYyEDJBKCsIBhwEARoiGxsvMiQQLzsnEDE7J1EIBgQBUBQ0FiEEAUc3FiEEAQxJAgE7Ey0XATgrLgEZARoiGxsvMiQQLzsnEDE7J1EIBgQBUBI0FiEEAUU3FiEEAQxHAgFGFC8YAUQWKQFCFikBT0VNARoBFyMcHBNKBgQBNiRNIxQEAUoeKkInBAFNHipCJwQBSS4TM04VBAFHLRMnRhIEAQxIAgEzcGFja2FnZTpjb21waWxlci9zcmMvc2VyaWFsaXphdGlvbi9tZW1iZXJfZGF0YS5kYXJ0N3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NlcmlhbGl6YXRpb24vbWl4aW5zLmRhcnTAAEd3Ly8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgJ3NlcmlhbGl6YXRpb24uZGFydCc7CgovLy8gTWl4aW4gdGhhdCBpbXBsZW1lbnRzIGFsbCBjb252ZW5pZW5jZSBtZXRob2RzIG9mIFtEYXRhU291cmNlXS4KYWJzdHJhY3QgY2xhc3MgRGF0YVNvdXJjZU1peGluIGltcGxlbWVudHMgRGF0YVNvdXJjZSB7CiAgQG92ZXJyaWRlCiAgRSByZWFkVmFsdWVPck51bGw8RT4oRSBmKCkpIHsKICAgIGJvb2wgaGFzVmFsdWUgPSByZWFkQm9vbCgpOwogICAgaWYgKGhhc1ZhbHVlKSB7CiAgICAgIHJldHVybiBmKCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8RT4gcmVhZExpc3Q8RT4oRSBmKCksIHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pIHsKICAgIGludCBjb3VudCA9IHJlYWRJbnQoKTsKICAgIGlmIChjb3VudCA9PSAwICYmIGVtcHR5QXNOdWxsKSByZXR1cm4gbnVsbDsKICAgIExpc3Q8RT4gbGlzdCA9IG5ldyBMaXN0PEU+KGNvdW50KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICBsaXN0W2ldID0gZigpOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgcmVhZEludE9yTnVsbCgpIHsKICAgIGJvb2wgaGFzVmFsdWUgPSByZWFkQm9vbCgpOwogICAgaWYgKGhhc1ZhbHVlKSB7CiAgICAgIHJldHVybiByZWFkSW50KCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyByZWFkU3RyaW5nT3JOdWxsKCkgewogICAgYm9vbCBoYXNWYWx1ZSA9IHJlYWRCb29sKCk7CiAgICBpZiAoaGFzVmFsdWUpIHsKICAgICAgcmV0dXJuIHJlYWRTdHJpbmcoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxTdHJpbmc+IHJlYWRTdHJpbmdzKHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pIHsKICAgIGludCBjb3VudCA9IHJlYWRJbnQoKTsKICAgIGlmIChjb3VudCA9PSAwICYmIGVtcHR5QXNOdWxsKSByZXR1cm4gbnVsbDsKICAgIExpc3Q8U3RyaW5nPiBsaXN0ID0gbmV3IExpc3Q8U3RyaW5nPihjb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgbGlzdFtpXSA9IHJlYWRTdHJpbmcoKTsKICAgIH0KICAgIHJldHVybiBsaXN0OwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxEYXJ0VHlwZT4gcmVhZERhcnRUeXBlcyh7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBMaXN0PERhcnRUeXBlPiBsaXN0ID0gbmV3IExpc3Q8RGFydFR5cGU+KGNvdW50KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICBsaXN0W2ldID0gcmVhZERhcnRUeXBlKCk7CiAgICB9CiAgICByZXR1cm4gbGlzdDsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8aXIuVHlwZVBhcmFtZXRlcj4gcmVhZFR5cGVQYXJhbWV0ZXJOb2Rlcyh7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBMaXN0PGlyLlR5cGVQYXJhbWV0ZXI+IGxpc3QgPSBuZXcgTGlzdDxpci5UeXBlUGFyYW1ldGVyPihjb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgbGlzdFtpXSA9IHJlYWRUeXBlUGFyYW1ldGVyTm9kZSgpOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PEU+IHJlYWRNZW1iZXJzPEUgZXh0ZW5kcyBNZW1iZXJFbnRpdHk+KHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pIHsKICAgIGludCBjb3VudCA9IHJlYWRJbnQoKTsKICAgIGlmIChjb3VudCA9PSAwICYmIGVtcHR5QXNOdWxsKSByZXR1cm4gbnVsbDsKICAgIExpc3Q8RT4gbGlzdCA9IG5ldyBMaXN0PEU+KGNvdW50KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gcmVhZE1lbWJlcigpOwogICAgICBsaXN0W2ldID0gbWVtYmVyOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PEU+IHJlYWRNZW1iZXJOb2RlczxFIGV4dGVuZHMgaXIuTWVtYmVyPih7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBMaXN0PEU+IGxpc3QgPSBuZXcgTGlzdDxFPihjb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgaXIuTWVtYmVyIHZhbHVlID0gcmVhZE1lbWJlck5vZGUoKTsKICAgICAgbGlzdFtpXSA9IHZhbHVlOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PEU+IHJlYWRDbGFzc2VzPEUgZXh0ZW5kcyBDbGFzc0VudGl0eT4oe2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSkgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgaWYgKGNvdW50ID09IDAgJiYgZW1wdHlBc051bGwpIHJldHVybiBudWxsOwogICAgTGlzdDxFPiBsaXN0ID0gbmV3IExpc3Q8RT4oY291bnQpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIENsYXNzRW50aXR5IGNscyA9IHJlYWRDbGFzcygpOwogICAgICBsaXN0W2ldID0gY2xzOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBNYXA8SywgVj4gcmVhZExpYnJhcnlNYXA8SyBleHRlbmRzIExpYnJhcnlFbnRpdHksIFY+KFYgZigpLAogICAgICB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBNYXA8SywgVj4gbWFwID0ge307CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5ID0gcmVhZExpYnJhcnkoKTsKICAgICAgViB2YWx1ZSA9IGYoKTsKICAgICAgbWFwW2xpYnJhcnldID0gdmFsdWU7CiAgICB9CiAgICByZXR1cm4gbWFwOwogIH0KCiAgQG92ZXJyaWRlCiAgTWFwPEssIFY+IHJlYWRDbGFzc01hcDxLIGV4dGVuZHMgQ2xhc3NFbnRpdHksIFY+KFYgZigpLAogICAgICB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBNYXA8SywgVj4gbWFwID0ge307CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gcmVhZENsYXNzKCk7CiAgICAgIFYgdmFsdWUgPSBmKCk7CiAgICAgIG1hcFtjbHNdID0gdmFsdWU7CiAgICB9CiAgICByZXR1cm4gbWFwOwogIH0KCiAgQG92ZXJyaWRlCiAgTWFwPEssIFY+IHJlYWRNZW1iZXJNYXA8SyBleHRlbmRzIE1lbWJlckVudGl0eSwgVj4oViBmKE1lbWJlckVudGl0eSBtZW1iZXIpLAogICAgICB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBNYXA8SywgVj4gbWFwID0ge307CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IHJlYWRNZW1iZXIoKTsKICAgICAgViB2YWx1ZSA9IGYobWVtYmVyKTsKICAgICAgbWFwW21lbWJlcl0gPSB2YWx1ZTsKICAgIH0KICAgIHJldHVybiBtYXA7CiAgfQoKICBAb3ZlcnJpZGUKICBNYXA8SywgVj4gcmVhZE1lbWJlck5vZGVNYXA8SyBleHRlbmRzIGlyLk1lbWJlciwgVj4oViBmKCksCiAgICAgIHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pIHsKICAgIGludCBjb3VudCA9IHJlYWRJbnQoKTsKICAgIGlmIChjb3VudCA9PSAwICYmIGVtcHR5QXNOdWxsKSByZXR1cm4gbnVsbDsKICAgIE1hcDxLLCBWPiBtYXAgPSB7fTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICBpci5NZW1iZXIgbm9kZSA9IHJlYWRNZW1iZXJOb2RlKCk7CiAgICAgIFYgdmFsdWUgPSBmKCk7CiAgICAgIG1hcFtub2RlXSA9IHZhbHVlOwogICAgfQogICAgcmV0dXJuIG1hcDsKICB9CgogIEBvdmVycmlkZQogIE1hcDxLLCBWPiByZWFkVHJlZU5vZGVNYXA8SyBleHRlbmRzIGlyLlRyZWVOb2RlLCBWPihWIGYoKSwKICAgICAge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSkgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgaWYgKGNvdW50ID09IDAgJiYgZW1wdHlBc051bGwpIHJldHVybiBudWxsOwogICAgTWFwPEssIFY+IG1hcCA9IHt9OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIGlyLlRyZWVOb2RlIG5vZGUgPSByZWFkVHJlZU5vZGUoKTsKICAgICAgViB2YWx1ZSA9IGYoKTsKICAgICAgbWFwW25vZGVdID0gdmFsdWU7CiAgICB9CiAgICByZXR1cm4gbWFwOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxFPiByZWFkTG9jYWxzPEUgZXh0ZW5kcyBMb2NhbD4oe2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSkgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgaWYgKGNvdW50ID09IDAgJiYgZW1wdHlBc051bGwpIHJldHVybiBudWxsOwogICAgTGlzdDxFPiBsaXN0ID0gbmV3IExpc3Q8RT4oY291bnQpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIExvY2FsIGxvY2FsID0gcmVhZExvY2FsKCk7CiAgICAgIGxpc3RbaV0gPSBsb2NhbDsKICAgIH0KICAgIHJldHVybiBsaXN0OwogIH0KCiAgQG92ZXJyaWRlCiAgTWFwPEssIFY+IHJlYWRMb2NhbE1hcDxLIGV4dGVuZHMgTG9jYWwsIFY+KFYgZigpLCB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBNYXA8SywgVj4gbWFwID0ge307CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgTG9jYWwgbG9jYWwgPSByZWFkTG9jYWwoKTsKICAgICAgViB2YWx1ZSA9IGYoKTsKICAgICAgbWFwW2xvY2FsXSA9IHZhbHVlOwogICAgfQogICAgcmV0dXJuIG1hcDsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8RT4gcmVhZFRyZWVOb2RlczxFIGV4dGVuZHMgaXIuVHJlZU5vZGU+KHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pIHsKICAgIGludCBjb3VudCA9IHJlYWRJbnQoKTsKICAgIGlmIChjb3VudCA9PSAwICYmIGVtcHR5QXNOdWxsKSByZXR1cm4gbnVsbDsKICAgIExpc3Q8RT4gbGlzdCA9IG5ldyBMaXN0PEU+KGNvdW50KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICBpci5UcmVlTm9kZSBub2RlID0gcmVhZFRyZWVOb2RlKCk7CiAgICAgIGxpc3RbaV0gPSBub2RlOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBNYXA8U3RyaW5nLCBWPiByZWFkU3RyaW5nTWFwPFY+KFYgZigpLCB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBNYXA8U3RyaW5nLCBWPiBtYXAgPSB7fTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICBTdHJpbmcga2V5ID0gcmVhZFN0cmluZygpOwogICAgICBWIHZhbHVlID0gZigpOwogICAgICBtYXBba2V5XSA9IHZhbHVlOwogICAgfQogICAgcmV0dXJuIG1hcDsKICB9CgogIEBvdmVycmlkZQogIEluZGV4ZWRDbGFzcyByZWFkQ2xhc3NPck51bGwoKSB7CiAgICBib29sIGhhc0NsYXNzID0gcmVhZEJvb2woKTsKICAgIGlmIChoYXNDbGFzcykgewogICAgICByZXR1cm4gcmVhZENsYXNzKCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIGlyLlRyZWVOb2RlIHJlYWRUcmVlTm9kZU9yTnVsbCgpIHsKICAgIGJvb2wgaGFzVmFsdWUgPSByZWFkQm9vbCgpOwogICAgaWYgKGhhc1ZhbHVlKSB7CiAgICAgIHJldHVybiByZWFkVHJlZU5vZGUoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5kZXhlZE1lbWJlciByZWFkTWVtYmVyT3JOdWxsKCkgewogICAgYm9vbCBoYXNWYWx1ZSA9IHJlYWRCb29sKCk7CiAgICBpZiAoaGFzVmFsdWUpIHsKICAgICAgcmV0dXJuIHJlYWRNZW1iZXIoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgTG9jYWwgcmVhZExvY2FsT3JOdWxsKCkgewogICAgYm9vbCBoYXNWYWx1ZSA9IHJlYWRCb29sKCk7CiAgICBpZiAoaGFzVmFsdWUpIHsKICAgICAgcmV0dXJuIHJlYWRMb2NhbCgpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHJlYWRDb25zdGFudE9yTnVsbCgpIHsKICAgIGJvb2wgaGFzQ2xhc3MgPSByZWFkQm9vbCgpOwogICAgaWYgKGhhc0NsYXNzKSB7CiAgICAgIHJldHVybiByZWFkQ29uc3RhbnQoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxFPiByZWFkQ29uc3RhbnRzPEUgZXh0ZW5kcyBDb25zdGFudFZhbHVlPih7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBMaXN0PEU+IGxpc3QgPSBuZXcgTGlzdDxFPihjb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IHJlYWRDb25zdGFudCgpOwogICAgICBsaXN0W2ldID0gdmFsdWU7CiAgICB9CiAgICByZXR1cm4gbGlzdDsKICB9CgogIEBvdmVycmlkZQogIE1hcDxLLCBWPiByZWFkQ29uc3RhbnRNYXA8SyBleHRlbmRzIENvbnN0YW50VmFsdWUsIFY+KFYgZigpLAogICAgICB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBNYXA8SywgVj4gbWFwID0ge307CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgQ29uc3RhbnRWYWx1ZSBrZXkgPSByZWFkQ29uc3RhbnQoKTsKICAgICAgViB2YWx1ZSA9IGYoKTsKICAgICAgbWFwW2tleV0gPSB2YWx1ZTsKICAgIH0KICAgIHJldHVybiBtYXA7CiAgfQoKICBAb3ZlcnJpZGUKICBJbmRleGVkTGlicmFyeSByZWFkTGlicmFyeU9yTnVsbCgpIHsKICAgIGJvb2wgaGFzVmFsdWUgPSByZWFkQm9vbCgpOwogICAgaWYgKGhhc1ZhbHVlKSB7CiAgICAgIHJldHVybiByZWFkTGlicmFyeSgpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBJbXBvcnRFbnRpdHkgcmVhZEltcG9ydE9yTnVsbCgpIHsKICAgIGJvb2wgaGFzQ2xhc3MgPSByZWFkQm9vbCgpOwogICAgaWYgKGhhc0NsYXNzKSB7CiAgICAgIHJldHVybiByZWFkSW1wb3J0KCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8SW1wb3J0RW50aXR5PiByZWFkSW1wb3J0cyh7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBMaXN0PEltcG9ydEVudGl0eT4gbGlzdCA9IG5ldyBMaXN0PEltcG9ydEVudGl0eT4oY291bnQpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIGxpc3RbaV0gPSByZWFkSW1wb3J0KCk7CiAgICB9CiAgICByZXR1cm4gbGlzdDsKICB9CgogIEBvdmVycmlkZQogIE1hcDxJbXBvcnRFbnRpdHksIFY+IHJlYWRJbXBvcnRNYXA8Vj4oViBmKCksIHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pIHsKICAgIGludCBjb3VudCA9IHJlYWRJbnQoKTsKICAgIGlmIChjb3VudCA9PSAwICYmIGVtcHR5QXNOdWxsKSByZXR1cm4gbnVsbDsKICAgIE1hcDxJbXBvcnRFbnRpdHksIFY+IG1hcCA9IHt9OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIEltcG9ydEVudGl0eSBrZXkgPSByZWFkSW1wb3J0KCk7CiAgICAgIFYgdmFsdWUgPSBmKCk7CiAgICAgIG1hcFtrZXldID0gdmFsdWU7CiAgICB9CiAgICByZXR1cm4gbWFwOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxpci5EYXJ0VHlwZT4gcmVhZERhcnRUeXBlTm9kZXMoe2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSkgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgaWYgKGNvdW50ID09IDAgJiYgZW1wdHlBc051bGwpIHJldHVybiBudWxsOwogICAgTGlzdDxpci5EYXJ0VHlwZT4gbGlzdCA9IG5ldyBMaXN0PGlyLkRhcnRUeXBlPihjb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgbGlzdFtpXSA9IHJlYWREYXJ0VHlwZU5vZGUoKTsKICAgIH0KICAgIHJldHVybiBsaXN0OwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuTmFtZSByZWFkTmFtZSgpIHsKICAgIFN0cmluZyB0ZXh0ID0gcmVhZFN0cmluZygpOwogICAgaXIuTGlicmFyeSBsaWJyYXJ5ID0gcmVhZFZhbHVlT3JOdWxsKHJlYWRMaWJyYXJ5Tm9kZSk7CiAgICByZXR1cm4gbmV3IGlyLk5hbWUodGV4dCwgbGlicmFyeSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5MaWJyYXJ5RGVwZW5kZW5jeSByZWFkTGlicmFyeURlcGVuZGVuY3lOb2RlKCkgewogICAgaXIuTGlicmFyeSBsaWJyYXJ5ID0gcmVhZExpYnJhcnlOb2RlKCk7CiAgICBpbnQgaW5kZXggPSByZWFkSW50KCk7CiAgICByZXR1cm4gbGlicmFyeS5kZXBlbmRlbmNpZXNbaW5kZXhdOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuTGlicmFyeURlcGVuZGVuY3kgcmVhZExpYnJhcnlEZXBlbmRlbmN5Tm9kZU9yTnVsbCgpIHsKICAgIHJldHVybiByZWFkVmFsdWVPck51bGwocmVhZExpYnJhcnlEZXBlbmRlbmN5Tm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5Ob2RlIHJlYWRKc05vZGVPck51bGwoKSB7CiAgICBib29sIGhhc1ZhbHVlID0gcmVhZEJvb2woKTsKICAgIGlmIChoYXNWYWx1ZSkgewogICAgICByZXR1cm4gcmVhZEpzTm9kZSgpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQp9CgovLy8gTWl4aW4gdGhhdCBpbXBsZW1lbnRzIGFsbCBjb252ZW5pZW5jZSBtZXRob2RzIG9mIFtEYXRhU2lua10uCmFic3RyYWN0IGNsYXNzIERhdGFTaW5rTWl4aW4gaW1wbGVtZW50cyBEYXRhU2luayB7CiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUludE9yTnVsbChpbnQgdmFsdWUpIHsKICAgIHdyaXRlQm9vbCh2YWx1ZSAhPSBudWxsKTsKICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlSW50KHZhbHVlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVTdHJpbmdPck51bGwoU3RyaW5nIHZhbHVlKSB7CiAgICB3cml0ZUJvb2wodmFsdWUgIT0gbnVsbCk7CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICB3cml0ZVN0cmluZyh2YWx1ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlQ2xhc3NPck51bGwoSW5kZXhlZENsYXNzIHZhbHVlKSB7CiAgICB3cml0ZUJvb2wodmFsdWUgIT0gbnVsbCk7CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICB3cml0ZUNsYXNzKHZhbHVlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVMb2NhbE9yTnVsbChMb2NhbCB2YWx1ZSkgewogICAgd3JpdGVCb29sKHZhbHVlICE9IG51bGwpOwogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgd3JpdGVMb2NhbCh2YWx1ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlQ2xhc3NlcyhJdGVyYWJsZTxDbGFzc0VudGl0eT4gdmFsdWVzLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKHZhbHVlcyA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICB3cml0ZUludCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlSW50KHZhbHVlcy5sZW5ndGgpOwogICAgICBmb3IgKEluZGV4ZWRDbGFzcyB2YWx1ZSBpbiB2YWx1ZXMpIHsKICAgICAgICB3cml0ZUNsYXNzKHZhbHVlKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRyZWVOb2RlcyhJdGVyYWJsZTxpci5UcmVlTm9kZT4gdmFsdWVzLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKHZhbHVlcyA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICB3cml0ZUludCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlSW50KHZhbHVlcy5sZW5ndGgpOwogICAgICBmb3IgKGlyLlRyZWVOb2RlIHZhbHVlIGluIHZhbHVlcykgewogICAgICAgIHdyaXRlVHJlZU5vZGUodmFsdWUpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlU3RyaW5ncyhJdGVyYWJsZTxTdHJpbmc+IHZhbHVlcywge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmICh2YWx1ZXMgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludCh2YWx1ZXMubGVuZ3RoKTsKICAgICAgZm9yIChTdHJpbmcgdmFsdWUgaW4gdmFsdWVzKSB7CiAgICAgICAgd3JpdGVTdHJpbmcodmFsdWUpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlTWVtYmVyTm9kZXMoSXRlcmFibGU8aXIuTWVtYmVyPiB2YWx1ZXMsIHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBpZiAodmFsdWVzID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGFsbG93TnVsbCk7CiAgICAgIHdyaXRlSW50KDApOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVJbnQodmFsdWVzLmxlbmd0aCk7CiAgICAgIGZvciAoaXIuTWVtYmVyIHZhbHVlIGluIHZhbHVlcykgewogICAgICAgIHdyaXRlTWVtYmVyTm9kZSh2YWx1ZSk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVEYXJ0VHlwZXMoSXRlcmFibGU8RGFydFR5cGU+IHZhbHVlcywge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmICh2YWx1ZXMgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludCh2YWx1ZXMubGVuZ3RoKTsKICAgICAgZm9yIChEYXJ0VHlwZSB2YWx1ZSBpbiB2YWx1ZXMpIHsKICAgICAgICB3cml0ZURhcnRUeXBlKHZhbHVlKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUxpYnJhcnlNYXA8Vj4oTWFwPExpYnJhcnlFbnRpdHksIFY+IG1hcCwgdm9pZCBmKFYgdmFsdWUpLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKG1hcCA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICB3cml0ZUludCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlSW50KG1hcC5sZW5ndGgpOwogICAgICBtYXAuZm9yRWFjaCgoTGlicmFyeUVudGl0eSBsaWJyYXJ5LCBWIHZhbHVlKSB7CiAgICAgICAgd3JpdGVMaWJyYXJ5KGxpYnJhcnkpOwogICAgICAgIGYodmFsdWUpOwogICAgICB9KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVDbGFzc01hcDxWPihNYXA8Q2xhc3NFbnRpdHksIFY+IG1hcCwgdm9pZCBmKFYgdmFsdWUpLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKG1hcCA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICB3cml0ZUludCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlSW50KG1hcC5sZW5ndGgpOwogICAgICBtYXAuZm9yRWFjaCgoQ2xhc3NFbnRpdHkgY2xzLCBWIHZhbHVlKSB7CiAgICAgICAgd3JpdGVDbGFzcyhjbHMpOwogICAgICAgIGYodmFsdWUpOwogICAgICB9KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVNZW1iZXJNYXA8Vj4oCiAgICAgIE1hcDxNZW1iZXJFbnRpdHksIFY+IG1hcCwgdm9pZCBmKE1lbWJlckVudGl0eSBtZW1iZXIsIFYgdmFsdWUpLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKG1hcCA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICB3cml0ZUludCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlSW50KG1hcC5sZW5ndGgpOwogICAgICBtYXAuZm9yRWFjaCgoTWVtYmVyRW50aXR5IG1lbWJlciwgViB2YWx1ZSkgewogICAgICAgIHdyaXRlTWVtYmVyKG1lbWJlcik7CiAgICAgICAgZihtZW1iZXIsIHZhbHVlKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlU3RyaW5nTWFwPFY+KE1hcDxTdHJpbmcsIFY+IG1hcCwgdm9pZCBmKFYgdmFsdWUpLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKG1hcCA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICB3cml0ZUludCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlSW50KG1hcC5sZW5ndGgpOwogICAgICBtYXAuZm9yRWFjaCgoU3RyaW5nIGtleSwgViB2YWx1ZSkgewogICAgICAgIHdyaXRlU3RyaW5nKGtleSk7CiAgICAgICAgZih2YWx1ZSk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUxvY2FscyhJdGVyYWJsZTxMb2NhbD4gdmFsdWVzLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKHZhbHVlcyA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICB3cml0ZUludCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlSW50KHZhbHVlcy5sZW5ndGgpOwogICAgICBmb3IgKExvY2FsIHZhbHVlIGluIHZhbHVlcykgewogICAgICAgIHdyaXRlTG9jYWwodmFsdWUpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlTG9jYWxNYXA8Vj4oTWFwPExvY2FsLCBWPiBtYXAsIHZvaWQgZihWIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmIChtYXAgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludChtYXAubGVuZ3RoKTsKICAgICAgbWFwLmZvckVhY2goKExvY2FsIGtleSwgViB2YWx1ZSkgewogICAgICAgIHdyaXRlTG9jYWwoa2V5KTsKICAgICAgICBmKHZhbHVlKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlTWVtYmVyTm9kZU1hcDxWPihNYXA8aXIuTWVtYmVyLCBWPiBtYXAsIHZvaWQgZihWIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmIChtYXAgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludChtYXAubGVuZ3RoKTsKICAgICAgbWFwLmZvckVhY2goKGlyLk1lbWJlciBrZXksIFYgdmFsdWUpIHsKICAgICAgICB3cml0ZU1lbWJlck5vZGUoa2V5KTsKICAgICAgICBmKHZhbHVlKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVHJlZU5vZGVNYXA8Vj4oTWFwPGlyLlRyZWVOb2RlLCBWPiBtYXAsIHZvaWQgZihWIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmIChtYXAgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludChtYXAubGVuZ3RoKTsKICAgICAgbWFwLmZvckVhY2goKGlyLlRyZWVOb2RlIGtleSwgViB2YWx1ZSkgewogICAgICAgIHdyaXRlVHJlZU5vZGUoa2V5KTsKICAgICAgICBmKHZhbHVlKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlTGlzdDxFPihJdGVyYWJsZTxFPiB2YWx1ZXMsIHZvaWQgZihFIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmICh2YWx1ZXMgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludCh2YWx1ZXMubGVuZ3RoKTsKICAgICAgdmFsdWVzLmZvckVhY2goZik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVHJlZU5vZGVPck51bGwoaXIuVHJlZU5vZGUgdmFsdWUpIHsKICAgIHdyaXRlQm9vbCh2YWx1ZSAhPSBudWxsKTsKICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlVHJlZU5vZGUodmFsdWUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVZhbHVlT3JOdWxsPEU+KEUgdmFsdWUsIHZvaWQgZihFIHZhbHVlKSkgewogICAgd3JpdGVCb29sKHZhbHVlICE9IG51bGwpOwogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgZih2YWx1ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlTWVtYmVyT3JOdWxsKEluZGV4ZWRNZW1iZXIgdmFsdWUpIHsKICAgIHdyaXRlQm9vbCh2YWx1ZSAhPSBudWxsKTsKICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlTWVtYmVyKHZhbHVlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVNZW1iZXJzKEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gdmFsdWVzLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKHZhbHVlcyA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICB3cml0ZUludCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlSW50KHZhbHVlcy5sZW5ndGgpOwogICAgICBmb3IgKEluZGV4ZWRNZW1iZXIgdmFsdWUgaW4gdmFsdWVzKSB7CiAgICAgICAgd3JpdGVNZW1iZXIodmFsdWUpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVHlwZVBhcmFtZXRlck5vZGVzKEl0ZXJhYmxlPGlyLlR5cGVQYXJhbWV0ZXI+IHZhbHVlcywKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmICh2YWx1ZXMgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludCh2YWx1ZXMubGVuZ3RoKTsKICAgICAgZm9yIChpci5UeXBlUGFyYW1ldGVyIHZhbHVlIGluIHZhbHVlcykgewogICAgICAgIHdyaXRlVHlwZVBhcmFtZXRlck5vZGUodmFsdWUpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlQ29uc3RhbnRPck51bGwoQ29uc3RhbnRWYWx1ZSB2YWx1ZSkgewogICAgd3JpdGVCb29sKHZhbHVlICE9IG51bGwpOwogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgd3JpdGVDb25zdGFudCh2YWx1ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlQ29uc3RhbnRzKEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IHZhbHVlcywge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmICh2YWx1ZXMgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludCh2YWx1ZXMubGVuZ3RoKTsKICAgICAgZm9yIChDb25zdGFudFZhbHVlIHZhbHVlIGluIHZhbHVlcykgewogICAgICAgIHdyaXRlQ29uc3RhbnQodmFsdWUpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlQ29uc3RhbnRNYXA8Vj4oTWFwPENvbnN0YW50VmFsdWUsIFY+IG1hcCwgdm9pZCBmKFYgdmFsdWUpLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKG1hcCA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICB3cml0ZUludCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlSW50KG1hcC5sZW5ndGgpOwogICAgICBtYXAuZm9yRWFjaCgoQ29uc3RhbnRWYWx1ZSBrZXksIFYgdmFsdWUpIHsKICAgICAgICB3cml0ZUNvbnN0YW50KGtleSk7CiAgICAgICAgZih2YWx1ZSk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUxpYnJhcnlPck51bGwoSW5kZXhlZExpYnJhcnkgdmFsdWUpIHsKICAgIHdyaXRlQm9vbCh2YWx1ZSAhPSBudWxsKTsKICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlTGlicmFyeSh2YWx1ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlSW1wb3J0T3JOdWxsKEltcG9ydEVudGl0eSB2YWx1ZSkgewogICAgd3JpdGVCb29sKHZhbHVlICE9IG51bGwpOwogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgd3JpdGVJbXBvcnQodmFsdWUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUltcG9ydHMoSXRlcmFibGU8SW1wb3J0RW50aXR5PiB2YWx1ZXMsIHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBpZiAodmFsdWVzID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGFsbG93TnVsbCk7CiAgICAgIHdyaXRlSW50KDApOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVJbnQodmFsdWVzLmxlbmd0aCk7CiAgICAgIGZvciAoSW1wb3J0RW50aXR5IHZhbHVlIGluIHZhbHVlcykgewogICAgICAgIHdyaXRlSW1wb3J0KHZhbHVlKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUltcG9ydE1hcDxWPihNYXA8SW1wb3J0RW50aXR5LCBWPiBtYXAsIHZvaWQgZihWIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmIChtYXAgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludChtYXAubGVuZ3RoKTsKICAgICAgbWFwLmZvckVhY2goKEltcG9ydEVudGl0eSBrZXksIFYgdmFsdWUpIHsKICAgICAgICB3cml0ZUltcG9ydChrZXkpOwogICAgICAgIGYodmFsdWUpOwogICAgICB9KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVEYXJ0VHlwZU5vZGVzKEl0ZXJhYmxlPGlyLkRhcnRUeXBlPiB2YWx1ZXMsCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBpZiAodmFsdWVzID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGFsbG93TnVsbCk7CiAgICAgIHdyaXRlSW50KDApOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVJbnQodmFsdWVzLmxlbmd0aCk7CiAgICAgIGZvciAoaXIuRGFydFR5cGUgdmFsdWUgaW4gdmFsdWVzKSB7CiAgICAgICAgd3JpdGVEYXJ0VHlwZU5vZGUodmFsdWUpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlTmFtZShpci5OYW1lIHZhbHVlKSB7CiAgICB3cml0ZVN0cmluZyh2YWx1ZS5uYW1lKTsKICAgIHdyaXRlVmFsdWVPck51bGwodmFsdWUubGlicmFyeSwgd3JpdGVMaWJyYXJ5Tm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlTGlicmFyeURlcGVuZGVuY3lOb2RlKGlyLkxpYnJhcnlEZXBlbmRlbmN5IHZhbHVlKSB7CiAgICBpci5MaWJyYXJ5IGxpYnJhcnkgPSB2YWx1ZS5wYXJlbnQ7CiAgICB3cml0ZUxpYnJhcnlOb2RlKGxpYnJhcnkpOwogICAgd3JpdGVJbnQobGlicmFyeS5kZXBlbmRlbmNpZXMuaW5kZXhPZih2YWx1ZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUxpYnJhcnlEZXBlbmRlbmN5Tm9kZU9yTnVsbChpci5MaWJyYXJ5RGVwZW5kZW5jeSB2YWx1ZSkgewogICAgd3JpdGVWYWx1ZU9yTnVsbCh2YWx1ZSwgd3JpdGVMaWJyYXJ5RGVwZW5kZW5jeU5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUpzTm9kZU9yTnVsbChqcy5Ob2RlIHZhbHVlKSB7CiAgICB3cml0ZUJvb2wodmFsdWUgIT0gbnVsbCk7CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICB3cml0ZUpzTm9kZSh2YWx1ZSk7CiAgICB9CiAgfQp9CoMXAE5OPAEeAUM3DCAgFBIGEQQBDDobMCcmFQYRBAEMGCAUGAYRBAEMHiAUGwYRBAEMOBswMSYeBhEEAQw8GzA1JiAGEQQBDE0bMEUmKQYRBAEMSxswJyYqGAYRBAEMTBswJyYqFwYRBAEMShswJyYlFQYRBAEMPiMbMBgmLRUcBhAEAQw6IxswGCYlFRgGEAQBDE8jGzAYJiobGwYQBAEMPSMbMBgmKRUZBhAEAQw9IxswGCYpFRkGEAQBDEMbMCcmIRcGEQQBDFEbMBgmIRUaBhAEAQxMGzAnJikWBhEEAQxGGzAdJiEVGAYQBAEMIyAUGgYRBAEMJSAUHQYRBAEMJSAUGwYRBAEMHCAUGgYRBAEMJyAUHQYRBAEMThswJyYsFwYRBAEMPyMbMBgmKhUYBhAEAQwnIBQcBhEEAQwkIBQbBhEEAQw+GzA9Jh4GEQQBDEwbMCMmJxUYBhAEAQxDGzA7JiQGEQQBDBcgOycEAQw1LBsoBAEMOzcEAQwfIBQbBhEEAgFBMwwjHhkXBgQBDCkeGRoGBAEMLh4ZGQYEAQwnHhkZBgQBDE0aGRMNHysbCAYEAQxPGhkTDR8qHggGBAEMSBoZEw0fJRwIBgQBDE8aGRMNHyggCAYEAQxMGhkTDR8nHggGBAEMRiEXGRMNHDUfEgoGBAEMQiEXGRMNHC8ZEgoGBAEMGkYhFxkTDRwzHRoKBgQBDD4hFxkTDRwqGhIKBgQBDEYaGRMNHyQbCAYEAQw8IRcZEw0cKRkSCgYEAQxFIRcZEw0cLR4SCgYEAQxFIRcZEw0cLxwSCgYEAQw5IRoZEw0fGQYEAQwwHhkcBgQBDDceGRAGBAEMMB4ZGgYEAQxOGhkTDR8sHAgGBAEMQiEaGRMNHy8nCAYEAQwyHhkcBgQBDFEaGRMNHyweCAYEAQxHIRcZEw0cMRwSCgYEAQwyHhkbBgQBDC8eGRoGBAEMThoZEw0fKxwIBgQBDEQhFxkTDRwwGhIKBgQBDDghGhkTDR8qIggGBAEMIh03BAEMQCcfMwQBDEY5BAEMKh4ZGgYEAgEucGFja2FnZTpjb21waWxlci9zcmMvc2VyaWFsaXphdGlvbi9taXhpbnMuZGFydD1zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zZXJpYWxpemF0aW9uL25vZGVfaW5kZXhlci5kYXJ0ne8vLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiAnc2VyaWFsaXphdGlvbi5kYXJ0JzsKCi8vLyBWaXNpdG9yIHRoYXQgYXNjcmliZXMgYW4gaW5kZXggdG8gYWxsIFtpci5UcmVlTm9kZV1zIHRoYXQgcG90ZW50aWFsbHkKLy8vIG5lZWRlZCBmb3Igc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uLgpjbGFzcyBfVHJlZU5vZGVJbmRleGVyVmlzaXRvciBleHRlbmRzIGlyLlZpc2l0b3I8dm9pZD4gewogIGludCBfY3VycmVudEluZGV4ID0gMDsKICBmaW5hbCBNYXA8aW50LCBpci5UcmVlTm9kZT4gX2luZGV4VG9Ob2RlTWFwOwogIGZpbmFsIE1hcDxpci5UcmVlTm9kZSwgaW50PiBfbm9kZVRvSW5kZXhNYXA7CgogIF9UcmVlTm9kZUluZGV4ZXJWaXNpdG9yKHRoaXMuX2luZGV4VG9Ob2RlTWFwLCB0aGlzLl9ub2RlVG9JbmRleE1hcCk7CgogIHZvaWQgcmVnaXN0ZXJOb2RlKGlyLlRyZWVOb2RlIG5vZGUpIHsKICAgIF9pbmRleFRvTm9kZU1hcFtfY3VycmVudEluZGV4XSA9IG5vZGU7CiAgICBfbm9kZVRvSW5kZXhNYXBbbm9kZV0gPSBfY3VycmVudEluZGV4OwogICAgX2N1cnJlbnRJbmRleCsrOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWZhdWx0VHJlZU5vZGUoaXIuVHJlZU5vZGUgbm9kZSkgewogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbihpci5GdW5jdGlvbkV4cHJlc3Npb24gbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXRGdW5jdGlvbkV4cHJlc3Npb24obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbihpci5GdW5jdGlvbkRlY2xhcmF0aW9uIG5vZGUpIHsKICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIHN1cGVyLnZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbihub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCbG9jayhpci5CbG9jayBub2RlKSB7CiAgICByZWdpc3Rlck5vZGUobm9kZSk7CiAgICBzdXBlci52aXNpdEJsb2NrKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24oaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICBpZiAobm9kZS5wYXJlbnQgaXMhIGlyLkZ1bmN0aW9uRGVjbGFyYXRpb24pIHsKICAgICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgfQogICAgc3VwZXIudmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN3aXRjaFN0YXRlbWVudChpci5Td2l0Y2hTdGF0ZW1lbnQgbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXRTd2l0Y2hTdGF0ZW1lbnQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Rm9yU3RhdGVtZW50KGlyLkZvclN0YXRlbWVudCBub2RlKSB7CiAgICByZWdpc3Rlck5vZGUobm9kZSk7CiAgICBzdXBlci52aXNpdEZvclN0YXRlbWVudChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGb3JJblN0YXRlbWVudChpci5Gb3JJblN0YXRlbWVudCBub2RlKSB7CiAgICByZWdpc3Rlck5vZGUobm9kZSk7CiAgICBzdXBlci52aXNpdEZvckluU3RhdGVtZW50KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFdoaWxlU3RhdGVtZW50KGlyLldoaWxlU3RhdGVtZW50IG5vZGUpIHsKICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIHN1cGVyLnZpc2l0V2hpbGVTdGF0ZW1lbnQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RG9TdGF0ZW1lbnQoaXIuRG9TdGF0ZW1lbnQgbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXREb1N0YXRlbWVudChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCcmVha1N0YXRlbWVudChpci5CcmVha1N0YXRlbWVudCBub2RlKSB7CiAgICByZWdpc3Rlck5vZGUobm9kZSk7CiAgICBzdXBlci52aXNpdEJyZWFrU3RhdGVtZW50KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpc3RMaXRlcmFsKGlyLkxpc3RMaXRlcmFsIG5vZGUpIHsKICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIHN1cGVyLnZpc2l0TGlzdExpdGVyYWwobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U2V0TGl0ZXJhbChpci5TZXRMaXRlcmFsIG5vZGUpIHsKICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIHN1cGVyLnZpc2l0U2V0TGl0ZXJhbChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRNYXBMaXRlcmFsKGlyLk1hcExpdGVyYWwgbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXRNYXBMaXRlcmFsKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFByb3BlcnR5R2V0KGlyLlByb3BlcnR5R2V0IG5vZGUpIHsKICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIHN1cGVyLnZpc2l0UHJvcGVydHlHZXQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UHJvcGVydHlTZXQoaXIuUHJvcGVydHlTZXQgbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXRQcm9wZXJ0eVNldChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRNZXRob2RJbnZvY2F0aW9uKGlyLk1ldGhvZEludm9jYXRpb24gbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXRNZXRob2RJbnZvY2F0aW9uKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERpcmVjdFByb3BlcnR5R2V0KGlyLkRpcmVjdFByb3BlcnR5R2V0IG5vZGUpIHsKICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIHN1cGVyLnZpc2l0RGlyZWN0UHJvcGVydHlHZXQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RGlyZWN0UHJvcGVydHlTZXQoaXIuRGlyZWN0UHJvcGVydHlTZXQgbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXREaXJlY3RQcm9wZXJ0eVNldChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREaXJlY3RNZXRob2RJbnZvY2F0aW9uKGlyLkRpcmVjdE1ldGhvZEludm9jYXRpb24gbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXREaXJlY3RNZXRob2RJbnZvY2F0aW9uKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0YXRpY0ludm9jYXRpb24oaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKSB7CiAgICByZWdpc3Rlck5vZGUobm9kZSk7CiAgICBzdXBlci52aXNpdFN0YXRpY0ludm9jYXRpb24obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGFiZWxlZFN0YXRlbWVudChpci5MYWJlbGVkU3RhdGVtZW50IG5vZGUpIHsKICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIHN1cGVyLnZpc2l0TGFiZWxlZFN0YXRlbWVudChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTd2l0Y2hDYXNlKGlyLlN3aXRjaENhc2Ugbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXRTd2l0Y2hDYXNlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnRpbnVlU3dpdGNoU3RhdGVtZW50KGlyLkNvbnRpbnVlU3dpdGNoU3RhdGVtZW50IG5vZGUpIHsKICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIHN1cGVyLnZpc2l0Q29udGludWVTd2l0Y2hTdGF0ZW1lbnQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKGlyLkNvbnN0cnVjdG9ySW52b2NhdGlvbiBub2RlKSB7CiAgICByZWdpc3Rlck5vZGUobm9kZSk7CiAgICBzdXBlci52aXNpdENvbnN0cnVjdG9ySW52b2NhdGlvbihub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRWYXJpYWJsZUdldChpci5WYXJpYWJsZUdldCBub2RlKSB7CiAgICByZWdpc3Rlck5vZGUobm9kZSk7CiAgICBzdXBlci52aXNpdFZhcmlhYmxlR2V0KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEluc3RhbnRpYXRpb24oaXIuSW5zdGFudGlhdGlvbiBub2RlKSB7CiAgICByZWdpc3Rlck5vZGUobm9kZSk7CiAgICBzdXBlci52aXNpdEluc3RhbnRpYXRpb24obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3VwZXJNZXRob2RJbnZvY2F0aW9uKGlyLlN1cGVyTWV0aG9kSW52b2NhdGlvbiBub2RlKSB7CiAgICByZWdpc3Rlck5vZGUobm9kZSk7CiAgICBzdXBlci52aXNpdFN1cGVyTWV0aG9kSW52b2NhdGlvbihub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdXBlclByb3BlcnR5R2V0KGlyLlN1cGVyUHJvcGVydHlHZXQgbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXRTdXBlclByb3BlcnR5R2V0KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnN0YW50RXhwcmVzc2lvbihpci5Db25zdGFudEV4cHJlc3Npb24gbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXRDb25zdGFudEV4cHJlc3Npb24obm9kZSk7CiAgfQp9CgovLy8gVmlzaXRvciB0aGF0IGFzY3JpYmVzIGFuIGluZGV4IHRvIGFsbCBbaXIuQ29uc3RhbnRdcyB0aGF0IHdlIHBvdGVudGlhbGx5Ci8vLyBuZWVkIHRvIHJlZmVyZW5jZSBmb3Igc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uLgovLy8KLy8vIEN1cnJlbnRseSB0aGlzIGlzIG9ubHkgbGlzdCwgbWFwLCBhbmQgc2V0IGNvbnN0YW50cywgd2hpY2ggYXJlIHVzZWQgYXMKLy8vIGFsbG9jYXRpb24gaWRlbnRpdGllcyBpbiB0aGUgZ2xvYmFsIGluZmVyZW5jZS4KY2xhc3MgX0NvbnN0YW50Tm9kZUluZGV4ZXJWaXNpdG9yIGltcGxlbWVudHMgaXIuQ29uc3RhbnRWaXNpdG9yPHZvaWQ+IHsKICBpbnQgX2N1cnJlbnRJbmRleCA9IDA7CiAgZmluYWwgTWFwPGludCwgaXIuQ29uc3RhbnQ+IF9pbmRleFRvTm9kZU1hcCA9IHt9OwogIGZpbmFsIE1hcDxpci5Db25zdGFudCwgaW50PiBfbm9kZVRvSW5kZXhNYXAgPSB7fTsKICBmaW5hbCBTZXQ8aXIuQ29uc3RhbnQ+IF92aXNpdGVkTm9uaW5kZXhlZE5vZGVzID0ge307CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBub2RlIG5vdCBhbHJlYWR5IHJlZ2lzdGVyZWQuCiAgYm9vbCBfcmVnaXN0ZXIoaXIuQ29uc3RhbnQgbm9kZSkgewogICAgaW50IGluZGV4ID0gX25vZGVUb0luZGV4TWFwW25vZGVdOwogICAgaWYgKGluZGV4ICE9IG51bGwpIHJldHVybiBmYWxzZTsKICAgIF9pbmRleFRvTm9kZU1hcFtfY3VycmVudEluZGV4XSA9IG5vZGU7CiAgICBfbm9kZVRvSW5kZXhNYXBbbm9kZV0gPSBfY3VycmVudEluZGV4OwogICAgX2N1cnJlbnRJbmRleCsrOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBpbnQgZ2V0SW5kZXgoaXIuQ29uc3RhbnQgbm9kZSkgewogICAgYXNzZXJ0KF9ub2RlVG9JbmRleE1hcC5jb250YWluc0tleShub2RlKSwgIkNvbnN0YW50IHdpdGhvdXQgaW5kZXg6ICRub2RlIik7CiAgICByZXR1cm4gX25vZGVUb0luZGV4TWFwW25vZGVdOwogIH0KCiAgaXIuQ29uc3RhbnQgZ2V0Q29uc3RhbnQoaW50IGluZGV4KSB7CiAgICBhc3NlcnQoCiAgICAgICAgX2luZGV4VG9Ob2RlTWFwLmNvbnRhaW5zS2V5KGluZGV4KSwgIkluZGV4IHdpdGhvdXQgY29uc3RhbnQ6ICRpbmRleCIpOwogICAgcmV0dXJuIF9pbmRleFRvTm9kZU1hcFtpbmRleF07CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VW5ldmFsdWF0ZWRDb25zdGFudChpci5VbmV2YWx1YXRlZENvbnN0YW50IG5vZGUpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlTGl0ZXJhbENvbnN0YW50KGlyLlR5cGVMaXRlcmFsQ29uc3RhbnQgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFRlYXJPZmZDb25zdGFudChpci5UZWFyT2ZmQ29uc3RhbnQgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQoaXIuUGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCBub2RlKSB7CiAgICBub2RlLnRlYXJPZmZDb25zdGFudC5hY2NlcHQodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW5zdGFuY2VDb25zdGFudChpci5JbnN0YW5jZUNvbnN0YW50IG5vZGUpIHsKICAgIGlmIChfdmlzaXRlZE5vbmluZGV4ZWROb2Rlcy5hZGQobm9kZSkpIHsKICAgICAgbm9kZS5maWVsZFZhbHVlcy5mb3JFYWNoKChfLCBpci5Db25zdGFudCB2YWx1ZSkgewogICAgICAgIHZhbHVlLmFjY2VwdCh0aGlzKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U2V0Q29uc3RhbnQoaXIuU2V0Q29uc3RhbnQgbm9kZSkgewogICAgaWYgKF9yZWdpc3Rlcihub2RlKSkgewogICAgICBmb3IgKGlyLkNvbnN0YW50IGVsZW1lbnQgaW4gbm9kZS5lbnRyaWVzKSB7CiAgICAgICAgZWxlbWVudC5hY2NlcHQodGhpcyk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXN0Q29uc3RhbnQoaXIuTGlzdENvbnN0YW50IG5vZGUpIHsKICAgIGlmIChfcmVnaXN0ZXIobm9kZSkpIHsKICAgICAgZm9yIChpci5Db25zdGFudCBlbGVtZW50IGluIG5vZGUuZW50cmllcykgewogICAgICAgIGVsZW1lbnQuYWNjZXB0KHRoaXMpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TWFwQ29uc3RhbnQoaXIuTWFwQ29uc3RhbnQgbm9kZSkgewogICAgaWYgKF9yZWdpc3Rlcihub2RlKSkgewogICAgICBmb3IgKGlyLkNvbnN0YW50TWFwRW50cnkgZW50cnkgaW4gbm9kZS5lbnRyaWVzKSB7CiAgICAgICAgZW50cnkua2V5LmFjY2VwdCh0aGlzKTsKICAgICAgICBlbnRyeS52YWx1ZS5hY2NlcHQodGhpcyk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTeW1ib2xDb25zdGFudChpci5TeW1ib2xDb25zdGFudCBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RyaW5nQ29uc3RhbnQoaXIuU3RyaW5nQ29uc3RhbnQgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERvdWJsZUNvbnN0YW50KGlyLkRvdWJsZUNvbnN0YW50IG5vZGUpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRDb25zdGFudChpci5JbnRDb25zdGFudCBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Qm9vbENvbnN0YW50KGlyLkJvb2xDb25zdGFudCBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TnVsbENvbnN0YW50KGlyLk51bGxDb25zdGFudCBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIGRlZmF1bHRDb25zdGFudChpci5Db25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5pbXBsZW1lbnRlZEVycm9yKAogICAgICAgICJVbmV4cGVjdGVkIGNvbnN0YW50OiAkbm9kZSAoJHtub2RlLnJ1bnRpbWVUeXBlfSkiKTsKICB9Cn0KgTgATk48AR4BSjI5GS8vAUcBKCsrFQQBDCseBAEMPRgpBAEMPxgqBAEMIxgcBAEMPzIaBioEAQw3GCYEAQwxGCMEAQw1GCUEAQw1GCUEAQwvGCIEAQw1GCUEAQwvGCIEAQwtGCEEAQwtGCEEAQwvGCIEAQwvGCIEAQw5GCcEAQw7GCgEAQw7GCgEAQxFGC0EAQw5GCcEAQw5GCcEAQwtGCEEAQxHGC4EAQxDGCwEAQwvGCIEAQwzGCQEAQxDGCwEAQw5GCcEAQw9GCkEAgFNPQRLM0gZNDQ3ATUlJyUrKxURBAEjUCIEAScMTyMEAQxAAQxAAQw4AQxRJwQBDDktOBwKBgQBDC8bMh4IBgQBDDEbMh4IBgQBDC8bOCAiCAYEAQw2AQw2AQw2AQwwAQwyAQwyAQwrIj0EAgE0cGFja2FnZTpjb21waWxlci9zcmMvc2VyaWFsaXphdGlvbi9ub2RlX2luZGV4ZXIuZGFydDxzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zZXJpYWxpemF0aW9uL29iamVjdF9zaW5rLmRhcnSFii8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mICdzZXJpYWxpemF0aW9uLmRhcnQnOwoKLy8vIFtEYXRhU2lua10gdGhhdCB3cml0ZXMgdG8gYSBsaXN0IG9mIG9iamVjdHMsIHVzZWZ1bCBmb3IgZGVidWdnaW5nCi8vLyBpbmNvbnNpc3RlbmNpZXMgYmV0d2VlbiBzZXJpYWxpemF0aW9uIGFuZCBkZXNlcmlhbGl6YXRpb24uCi8vLwovLy8gVGhpcyBkYXRhIHNpbmsgd29ya3MgdG9nZXRoZXIgd2l0aCBbT2JqZWN0U291cmNlXS4KY2xhc3MgT2JqZWN0U2luayBleHRlbmRzIEFic3RyYWN0RGF0YVNpbmsgewogIExpc3Q8ZHluYW1pYz4gX2RhdGE7CgogIE9iamVjdFNpbmsodGhpcy5fZGF0YSwge2Jvb2wgdXNlRGF0YUtpbmRzLCBNYXA8U3RyaW5nLCBpbnQ+IHRhZ0ZyZXF1ZW5jeU1hcH0pCiAgICAgIDogc3VwZXIodXNlRGF0YUtpbmRzOiB1c2VEYXRhS2luZHMsIHRhZ0ZyZXF1ZW5jeU1hcDogdGFnRnJlcXVlbmN5TWFwKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBfYmVnaW4oU3RyaW5nIHRhZykgewogICAgX2RhdGEuYWRkKG5ldyBUYWcoJ2JlZ2luOiR0YWcnKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9lbmQoU3RyaW5nIHRhZykgewogICAgX2RhdGEuYWRkKG5ldyBUYWcoJ2VuZDokdGFnJykpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfd3JpdGVFbnVtSW50ZXJuYWwoZHluYW1pYyB2YWx1ZSkgewogICAgYXNzZXJ0KHZhbHVlICE9IG51bGwpOwogICAgX2RhdGEuYWRkKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX3dyaXRlSW50SW50ZXJuYWwoaW50IHZhbHVlKSB7CiAgICBhc3NlcnQodmFsdWUgIT0gbnVsbCk7CiAgICBfZGF0YS5hZGQodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfd3JpdGVTdHJpbmdJbnRlcm5hbChTdHJpbmcgdmFsdWUpIHsKICAgIGFzc2VydCh2YWx1ZSAhPSBudWxsKTsKICAgIF9kYXRhLmFkZCh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF93cml0ZVVyaUludGVybmFsKFVyaSB2YWx1ZSkgewogICAgYXNzZXJ0KHZhbHVlICE9IG51bGwpOwogICAgX2RhdGEuYWRkKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2xvc2UoKSB7CiAgICBfZGF0YSA9IG51bGw7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIG9iamVjdHMgd3JpdHRlbiB0byB0aGlzIGRhdGEgc2luay4KICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGxlbmd0aCA9PiBfZGF0YS5sZW5ndGg7Cn0KPQBOTjwBHgFGPwQ3LBcBUE0BDBwmBAEMGiQEAQwrGxYEAQwmGxYEAQwsGxYEAQwmGxYEAQwREgQBPwwiAgEzcGFja2FnZTpjb21waWxlci9zcmMvc2VyaWFsaXphdGlvbi9vYmplY3Rfc2luay5kYXJ0PnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NlcmlhbGl6YXRpb24vb2JqZWN0X3NvdXJjZS5kYXJ0h5AvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiAnc2VyaWFsaXphdGlvbi5kYXJ0JzsKCi8vLyBbRGF0YVNvdXJjZV0gdGhhdCByZWFkIGZyb20gYSBsaXN0IG9mIG9iamVjdHMsIHVzZWZ1bCBmb3IgZGVidWdnaW5nCi8vLyBpbmNvbnNpc3RlbmNpZXMgYmV0d2VlbiBzZXJpYWxpemF0aW9uIGFuZCBkZXNlcmlhbGl6YXRpb24uCi8vLwovLy8gVGhpcyBkYXRhIHNvdXJjZSB3b3JrcyB0b2dldGhlciB3aXRoIFtPYmplY3RTaW5rXS4KY2xhc3MgT2JqZWN0U291cmNlIGV4dGVuZHMgQWJzdHJhY3REYXRhU291cmNlIHsKICBpbnQgX2luZGV4ID0gMDsKICBmaW5hbCBMaXN0PGR5bmFtaWM+IF9kYXRhOwoKICBPYmplY3RTb3VyY2UodGhpcy5fZGF0YSwge2Jvb2wgdXNlRGF0YUtpbmRzfSkKICAgICAgOiBzdXBlcih1c2VEYXRhS2luZHM6IHVzZURhdGFLaW5kcyk7CgogIFQgX3JlYWQ8VD4oKSB7CiAgICBkeW5hbWljIHZhbHVlID0gX2RhdGFbX2luZGV4KytdOwogICAgYXNzZXJ0KHZhbHVlIGlzIFQsICJFeHBlY3RlZCAkVCB2YWx1ZSwgZm91bmQgJHZhbHVlLiRfZXJyb3JDb250ZXh0Iik7CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9iZWdpbihTdHJpbmcgdGFnKSB7CiAgICBUYWcgZXhwZWN0ZWRUYWcgPSBuZXcgVGFnKCdiZWdpbjokdGFnJyk7CiAgICBUYWcgYWN0dWFsVGFnID0gX3JlYWQoKTsKICAgIGFzc2VydCgKICAgICAgICBleHBlY3RlZFRhZyA9PSBhY3R1YWxUYWcsCiAgICAgICAgIlVuZXhwZWN0ZWQgYmVnaW4gdGFnLiAiCiAgICAgICAgIkV4cGVjdGVkICRleHBlY3RlZFRhZywgZm91bmQgJGFjdHVhbFRhZy4kX2Vycm9yQ29udGV4dCIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfZW5kKFN0cmluZyB0YWcpIHsKICAgIFRhZyBleHBlY3RlZFRhZyA9IG5ldyBUYWcoJ2VuZDokdGFnJyk7CiAgICBUYWcgYWN0dWFsVGFnID0gX3JlYWQoKTsKICAgIGFzc2VydCgKICAgICAgICBleHBlY3RlZFRhZyA9PSBhY3R1YWxUYWcsCiAgICAgICAgIlVuZXhwZWN0ZWQgZW5kIHRhZy4gIgogICAgICAgICJFeHBlY3RlZCAkZXhwZWN0ZWRUYWcsIGZvdW5kICRhY3R1YWxUYWcuJF9lcnJvckNvbnRleHQiKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBfcmVhZFN0cmluZ0ludGVybmFsKCkgPT4gX3JlYWQoKTsKCiAgQG92ZXJyaWRlCiAgRSBfcmVhZEVudW1JbnRlcm5hbDxFPihMaXN0PEU+IHZhbHVlcykgPT4gX3JlYWQoKTsKCiAgQG92ZXJyaWRlCiAgVXJpIF9yZWFkVXJpSW50ZXJuYWwoKSA9PiBfcmVhZCgpOwoKICBAb3ZlcnJpZGUKICBpbnQgX3JlYWRJbnRJbnRlcm5hbCgpID0+IF9yZWFkKCk7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2Vycm9yQ29udGV4dCB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBmb3IgKGludCBpID0gX2luZGV4IC0gNTA7IGkgPCBfaW5kZXggKyAxMDsgaSsrKSB7CiAgICAgIGlmIChpID49IDAgJiYgaSA8IF9kYXRhLmxlbmd0aCkgewogICAgICAgIGlmIChpID09IF9pbmRleCAtIDEpIHsKICAgICAgICAgIHNiLndyaXRlKCdcbj4gJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNiLndyaXRlKCdcbiAgJyk7CiAgICAgICAgfQogICAgICAgIHNiLndyaXRlKGkpOwogICAgICAgIHNiLndyaXRlKCcgJyk7CiAgICAgICAgc2Iud3JpdGUoX2RhdGFbaV0pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KSwBOTjwBHgFIPwQ3MBIdATArARElShIEAQwcLR0MIiFDBAEMGisdDCIfQwQBDCsBDDUBDCUBDCUBDB0qNigfHBEcChUXHAgGGgQCATVwYWNrYWdlOmNvbXBpbGVyL3NyYy9zZXJpYWxpemF0aW9uL29iamVjdF9zb3VyY2UuZGFydCpzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zc2Evc3NhLmRhcnS1US8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IHNzYTsKCmltcG9ydCAnLi4vYmFja2VuZF9zdHJhdGVneS5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgQ29tbW9uRWxlbWVudHMsIEpFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnLi4vY29tbW9uL2NvZGVnZW4uZGFydCcgc2hvdyBDb2RlZ2VuUmVzdWx0LCBDb2RlZ2VuUmVnaXN0cnk7CmltcG9ydCAnLi4vY29tbW9uL3Rhc2tzLmRhcnQnIHNob3cgQ29tcGlsZXJUYXNrLCBNZWFzdXJlcjsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydCc7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganM7CmltcG9ydCAnLi4vanMvcmV3cml0ZV9hc3luYy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2JhY2tlbmQuZGFydCcgc2hvdyBDb2RlZ2VuSW5wdXRzLCBGdW5jdGlvbkNvbXBpbGVyOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmFtZXIuZGFydCcgc2hvdyBNb2R1bGFyTmFtZXIsIE1vZHVsYXJOYW1lckltcGw7CmltcG9ydCAnLi4vanNfZW1pdHRlci9jb2RlX2VtaXR0ZXJfdGFzay5kYXJ0JyBzaG93IE1vZHVsYXJFbWl0dGVyOwppbXBvcnQgJy4uL2pzX2VtaXR0ZXIvc3RhcnR1cF9lbWl0dGVyL2VtaXR0ZXIuZGFydCcgc2hvdyBNb2R1bGFyRW1pdHRlckltcGw7CmltcG9ydCAnLi4vanNfbW9kZWwvZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvdHlwZV9yZWNpcGUuZGFydCcgc2hvdyBUeXBlRXhwcmVzc2lvblJlY2lwZTsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NhbGxfc3RydWN0dXJlLmRhcnQnIHNob3cgQ2FsbFN0cnVjdHVyZTsKaW1wb3J0ICcuLi91bml2ZXJzZS91c2UuZGFydCcgc2hvdyBTdGF0aWNVc2U7CmltcG9ydCAnLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CgppbXBvcnQgJ2NvZGVnZW4uZGFydCc7CmltcG9ydCAnbm9kZXMuZGFydCc7CmltcG9ydCAnb3B0aW1pemUuZGFydCc7CgpjbGFzcyBTc2FGdW5jdGlvbkNvbXBpbGVyIGltcGxlbWVudHMgRnVuY3Rpb25Db21waWxlciB7CiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwogIGZpbmFsIERpYWdub3N0aWNSZXBvcnRlciBfcmVwb3J0ZXI7CiAgZmluYWwgU3NhQ29kZUdlbmVyYXRvclRhc2sgZ2VuZXJhdG9yOwogIGZpbmFsIFNzYUJ1aWxkZXJUYXNrIF9idWlsZGVyOwogIGZpbmFsIFNzYU9wdGltaXplclRhc2sgb3B0aW1pemVyOwogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kgc291cmNlSW5mb3JtYXRpb25TdHJhdGVneTsKICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBfZ2xvYmFsSW5mZXJlbmNlUmVzdWx0czsKICBDb2RlZ2VuSW5wdXRzIF9jb2RlZ2VuOwoKICBTc2FGdW5jdGlvbkNvbXBpbGVyKAogICAgICB0aGlzLl9vcHRpb25zLAogICAgICB0aGlzLl9yZXBvcnRlciwKICAgICAgQmFja2VuZFN0cmF0ZWd5IGJhY2tlbmRTdHJhdGVneSwKICAgICAgTWVhc3VyZXIgbWVhc3VyZXIsCiAgICAgIHRoaXMuc291cmNlSW5mb3JtYXRpb25TdHJhdGVneSkKICAgICAgOiBnZW5lcmF0b3IgPSBuZXcgU3NhQ29kZUdlbmVyYXRvclRhc2soCiAgICAgICAgICAgIG1lYXN1cmVyLCBfb3B0aW9ucywgc291cmNlSW5mb3JtYXRpb25TdHJhdGVneSksCiAgICAgICAgX2J1aWxkZXIgPSBuZXcgU3NhQnVpbGRlclRhc2soCiAgICAgICAgICAgIG1lYXN1cmVyLCBiYWNrZW5kU3RyYXRlZ3ksIHNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kpLAogICAgICAgIG9wdGltaXplciA9IG5ldyBTc2FPcHRpbWl6ZXJUYXNrKG1lYXN1cmVyLCBfb3B0aW9ucyk7CgogIEBvdmVycmlkZQogIHZvaWQgaW5pdGlhbGl6ZShHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLAogICAgICBDb2RlZ2VuSW5wdXRzIGNvZGVnZW4pIHsKICAgIF9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzID0gZ2xvYmFsSW5mZXJlbmNlUmVzdWx0czsKICAgIF9jb2RlZ2VuID0gY29kZWdlbjsKICAgIF9idWlsZGVyLm9uQ29kZWdlblN0YXJ0KCk7CiAgfQoKICAvLy8gR2VuZXJhdGVzIEphdmFTY3JpcHQgY29kZSBmb3IgW21lbWJlcl0uCiAgLy8vIFVzaW5nIHRoZSBzc2EgYnVpbGRlciwgb3B0aW1pemVyIGFuZCBjb2RlIGdlbmVyYXRvci4KICBAb3ZlcnJpZGUKICBDb2RlZ2VuUmVzdWx0IGNvbXBpbGUoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkID0gX2dsb2JhbEluZmVyZW5jZVJlc3VsdHMuY2xvc2VkV29ybGQ7CiAgICBDb2RlZ2VuUmVnaXN0cnkgcmVnaXN0cnkgPQogICAgICAgIG5ldyBDb2RlZ2VuUmVnaXN0cnkoY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LCBtZW1iZXIpOwogICAgTW9kdWxhck5hbWVyIG5hbWVyID0gbmV3IE1vZHVsYXJOYW1lckltcGwocmVnaXN0cnksCiAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMsIF9jb2RlZ2VuLnJ0aVRhZ3MsIF9jb2RlZ2VuLmZpeGVkTmFtZXMpOwogICAgTW9kdWxhckVtaXR0ZXIgZW1pdHRlciA9IG5ldyBNb2R1bGFyRW1pdHRlckltcGwobmFtZXIsIHJlZ2lzdHJ5LCBfb3B0aW9ucyk7CiAgICBpZiAobWVtYmVyLmlzQ29uc3RydWN0b3IgJiYKICAgICAgICBtZW1iZXIuZW5jbG9zaW5nQ2xhc3MgPT0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuanNOdWxsQ2xhc3MpIHsKICAgICAgLy8gV29yayBhcm91bmQgYSBwcm9ibGVtIGNvbXBpbGluZyBKU051bGwncyBjb25zdHJ1Y3Rvci4KICAgICAgcmV0dXJuIHJlZ2lzdHJ5LmNsb3NlKG51bGwpOwogICAgfQoKICAgIEhHcmFwaCBncmFwaCA9IF9idWlsZGVyLmJ1aWxkKG1lbWJlciwgY2xvc2VkV29ybGQsIF9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzLAogICAgICAgIF9jb2RlZ2VuLCByZWdpc3RyeSwgbmFtZXIsIGVtaXR0ZXIpOwogICAgaWYgKGdyYXBoID09IG51bGwpIHsKICAgICAgcmV0dXJuIHJlZ2lzdHJ5LmNsb3NlKG51bGwpOwogICAgfQogICAgb3B0aW1pemVyLm9wdGltaXplKG1lbWJlciwgZ3JhcGgsIF9jb2RlZ2VuLCBjbG9zZWRXb3JsZCwKICAgICAgICBfZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cywgcmVnaXN0cnkpOwogICAganMuRXhwcmVzc2lvbiByZXN1bHQgPSBnZW5lcmF0b3IuZ2VuZXJhdGVDb2RlKAogICAgICAgIG1lbWJlciwgZ3JhcGgsIF9jb2RlZ2VuLCBjbG9zZWRXb3JsZCwgcmVnaXN0cnksIG5hbWVyLCBlbWl0dGVyKTsKICAgIGlmIChncmFwaC5uZWVkc0FzeW5jUmV3cml0ZSkgewogICAgICBTb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIgc291cmNlSW5mb3JtYXRpb25CdWlsZGVyID0KICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kuY3JlYXRlQnVpbGRlckZvckNvbnRleHQobWVtYmVyKTsKICAgICAgcmVzdWx0ID0gX3Jld3JpdGVBc3luYygKICAgICAgICAgIF9jb2RlZ2VuLAogICAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMsCiAgICAgICAgICBjbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQsCiAgICAgICAgICByZWdpc3RyeSwKICAgICAgICAgIG5hbWVyLAogICAgICAgICAgZW1pdHRlciwKICAgICAgICAgIG1lbWJlciwKICAgICAgICAgIHJlc3VsdCwKICAgICAgICAgIGdyYXBoLmFzeW5jRWxlbWVudFR5cGUsCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRBc3luY0JvZHkoKSwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEFzeW5jRXhpdCgpKTsKICAgIH0KICAgIGlmIChyZXN1bHQuc291cmNlSW5mb3JtYXRpb24gPT0gbnVsbCkgewogICAgICByZXN1bHQgPSByZXN1bHQud2l0aFNvdXJjZUluZm9ybWF0aW9uKAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb25TdHJhdGVneS5idWlsZFNvdXJjZU1hcHBlZE1hcmtlcigpKTsKICAgIH0KCiAgICByZXR1cm4gcmVnaXN0cnkuY2xvc2UocmVzdWx0KTsKICB9CgogIGpzLkV4cHJlc3Npb24gX3Jld3JpdGVBc3luYygKICAgICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuLAogICAgICBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgSkVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQsCiAgICAgIENvZGVnZW5SZWdpc3RyeSByZWdpc3RyeSwKICAgICAgTW9kdWxhck5hbWVyIG5hbWVyLAogICAgICBNb2R1bGFyRW1pdHRlciBlbWl0dGVyLAogICAgICBGdW5jdGlvbkVudGl0eSBlbGVtZW50LAogICAgICBqcy5FeHByZXNzaW9uIGNvZGUsCiAgICAgIERhcnRUeXBlIGFzeW5jVHlwZVBhcmFtZXRlciwKICAgICAgU291cmNlSW5mb3JtYXRpb24gYm9keVNvdXJjZUluZm9ybWF0aW9uLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBleGl0U291cmNlSW5mb3JtYXRpb24pIHsKICAgIGlmIChlbGVtZW50LmFzeW5jTWFya2VyID09IEFzeW5jTWFya2VyLlNZTkMpIHJldHVybiBjb2RlOwoKICAgIEFzeW5jUmV3cml0ZXJCYXNlIHJld3JpdGVyID0gbnVsbDsKICAgIGpzLk5hbWUgbmFtZSA9IG5hbWVyLm1ldGhvZFByb3BlcnR5TmFtZSgKICAgICAgICBlbGVtZW50IGlzIEpHZW5lcmF0b3JCb2R5ID8gZWxlbWVudC5mdW5jdGlvbiA6IGVsZW1lbnQpOwoKICAgIHN3aXRjaCAoZWxlbWVudC5hc3luY01hcmtlcikgewogICAgICBjYXNlIEFzeW5jTWFya2VyLkFTWU5DOgogICAgICAgIHJld3JpdGVyID0gX21ha2VBc3luY1Jld3JpdGVyKAogICAgICAgICAgICBjb2RlZ2VuLAogICAgICAgICAgICBjb21tb25FbGVtZW50cywKICAgICAgICAgICAgZWxlbWVudEVudmlyb25tZW50LAogICAgICAgICAgICByZWdpc3RyeSwKICAgICAgICAgICAgbmFtZXIsCiAgICAgICAgICAgIGVtaXR0ZXIsCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgIGNvZGUsCiAgICAgICAgICAgIGFzeW5jVHlwZVBhcmFtZXRlciwKICAgICAgICAgICAgbmFtZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQXN5bmNNYXJrZXIuU1lOQ19TVEFSOgogICAgICAgIHJld3JpdGVyID0gX21ha2VTeW5jU3RhclJld3JpdGVyKAogICAgICAgICAgICBjb2RlZ2VuLAogICAgICAgICAgICBjb21tb25FbGVtZW50cywKICAgICAgICAgICAgZWxlbWVudEVudmlyb25tZW50LAogICAgICAgICAgICByZWdpc3RyeSwKICAgICAgICAgICAgbmFtZXIsCiAgICAgICAgICAgIGVtaXR0ZXIsCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgIGNvZGUsCiAgICAgICAgICAgIGFzeW5jVHlwZVBhcmFtZXRlciwKICAgICAgICAgICAgbmFtZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQXN5bmNNYXJrZXIuQVNZTkNfU1RBUjoKICAgICAgICByZXdyaXRlciA9IF9tYWtlQXN5bmNTdGFyUmV3cml0ZXIoCiAgICAgICAgICAgIGNvZGVnZW4sCiAgICAgICAgICAgIGNvbW1vbkVsZW1lbnRzLAogICAgICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQsCiAgICAgICAgICAgIHJlZ2lzdHJ5LAogICAgICAgICAgICBuYW1lciwKICAgICAgICAgICAgZW1pdHRlciwKICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgY29kZSwKICAgICAgICAgICAgYXN5bmNUeXBlUGFyYW1ldGVyLAogICAgICAgICAgICBuYW1lKTsKICAgICAgICBicmVhazsKICAgIH0KICAgIHJldHVybiByZXdyaXRlci5yZXdyaXRlKGNvZGUsIGJvZHlTb3VyY2VJbmZvcm1hdGlvbiwgZXhpdFNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIC8vLyBSZXR1cm5zIGFuIG9wdGlvbmFsIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgW3R5cGVdLiAgUmV0dXJucyBgbnVsbGAgaWYKICAvLy8gdGhlIHR5cGUgZXhwcmVzc2lvbiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBvdXRzaWRlIGNvbnRleHQgYW5kIHNob3VsZCBiZQogIC8vLyBhZGRlZCBhcyBhIGZ1bmN0aW9uIHBhcmFtZXRlciB0byB0aGUgcmV3cml0dGVuIGNvZGUuCiAgLy8gVE9ETyhzcmEpOiBXZSBjb3VsZCBhbHNvIHJldHVybiBhbiBlbXB0eSBsaXN0IGlmIHRoZSBnZW5lcmF0b3IgdGFrZXMgbm8KICAvLyB0eXBlIChlLmcuIGR1ZSB0byBydGlOZWVkIG9wdGltaXphdGlvbikuCiAgTGlzdDxqcy5FeHByZXNzaW9uPiBfZmV0Y2hJdGVtVHlwZSgKICAgICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuLCBNb2R1bGFyRW1pdHRlciBlbWl0dGVyLCBEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHZhciBhc3QgPSBjb2RlZ2VuLnJ0aUVuY29kZXIuZ2V0VHlwZVJlcHJlc2VudGF0aW9uKGVtaXR0ZXIsIHR5cGUsIG51bGwpOwogICAgcmV0dXJuIDxqcy5FeHByZXNzaW9uPlthc3RdOwogIH0KCiAgTGlzdDxqcy5FeHByZXNzaW9uPiBfZmV0Y2hJdGVtVHlwZU5ld1J0aSgKICAgICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuLAogICAgICBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgQ29kZWdlblJlZ2lzdHJ5IHJlZ2lzdHJ5LAogICAgICBNb2R1bGFyRW1pdHRlciBlbWl0dGVyLAogICAgICBEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKCiAgICBGdW5jdGlvbkVudGl0eSBoZWxwZXJFbGVtZW50ID0gY29tbW9uRWxlbWVudHMuZmluZFR5cGU7CiAgICByZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZSgKICAgICAgICBuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZShoZWxwZXJFbGVtZW50LCBDYWxsU3RydWN0dXJlLk9ORV9BUkcpKTsKICAgIGpzLkV4cHJlc3Npb24gcmVjaXBlID0gY29kZWdlbi5ydGlSZWNpcGVFbmNvZGVyCiAgICAgICAgLmVuY29kZUdyb3VuZFJlY2lwZShlbWl0dGVyLCBUeXBlRXhwcmVzc2lvblJlY2lwZSh0eXBlKSk7CiAgICBqcy5FeHByZXNzaW9uIGhlbHBlciA9IGVtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MoaGVscGVyRWxlbWVudCk7CiAgICB2YXIgYXN0ID0ganMuanMocicjKCMpJywgW2hlbHBlciwgcmVjaXBlXSk7CiAgICByZXR1cm4gPGpzLkV4cHJlc3Npb24+W2FzdF07CiAgfQoKICBBc3luY1Jld3JpdGVyIF9tYWtlQXN5bmNSZXdyaXRlcigKICAgICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuLAogICAgICBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgSkVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQsCiAgICAgIENvZGVnZW5SZWdpc3RyeSByZWdpc3RyeSwKICAgICAgTW9kdWxhck5hbWVyIG5hbWVyLAogICAgICBNb2R1bGFyRW1pdHRlciBlbWl0dGVyLAogICAgICBGdW5jdGlvbkVudGl0eSBlbGVtZW50LAogICAgICBqcy5FeHByZXNzaW9uIGNvZGUsCiAgICAgIERhcnRUeXBlIGVsZW1lbnRUeXBlLAogICAgICBqcy5OYW1lIG5hbWUpIHsKICAgIEZ1bmN0aW9uRW50aXR5IHN0YXJ0RnVuY3Rpb24gPSBjb21tb25FbGVtZW50cy5hc3luY0hlbHBlclN0YXJ0U3luYzsKICAgIEZ1bmN0aW9uRW50aXR5IGNvbXBsZXRlckZhY3RvcnkgPSBjb21tb25FbGVtZW50cy5hc3luY0F3YWl0Q29tcGxldGVyRmFjdG9yeTsKCiAgICBMaXN0PGpzLkV4cHJlc3Npb24+IGl0ZW1UeXBlRXhwcmVzc2lvbiA9IF9vcHRpb25zLmV4cGVyaW1lbnROZXdSdGkKICAgICAgICA/IF9mZXRjaEl0ZW1UeXBlTmV3UnRpKAogICAgICAgICAgICBjb2RlZ2VuLCBjb21tb25FbGVtZW50cywgcmVnaXN0cnksIGVtaXR0ZXIsIGVsZW1lbnRUeXBlKQogICAgICAgIDogX2ZldGNoSXRlbVR5cGUoY29kZWdlbiwgZW1pdHRlciwgZWxlbWVudFR5cGUpOwoKICAgIEFzeW5jUmV3cml0ZXIgcmV3cml0ZXIgPSBuZXcgQXN5bmNSZXdyaXRlcihfcmVwb3J0ZXIsIGVsZW1lbnQsCiAgICAgICAgYXN5bmNTdGFydDogZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcyhzdGFydEZ1bmN0aW9uKSwKICAgICAgICBhc3luY0F3YWl0OgogICAgICAgICAgICBlbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGNvbW1vbkVsZW1lbnRzLmFzeW5jSGVscGVyQXdhaXQpLAogICAgICAgIGFzeW5jUmV0dXJuOgogICAgICAgICAgICBlbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGNvbW1vbkVsZW1lbnRzLmFzeW5jSGVscGVyUmV0dXJuKSwKICAgICAgICBhc3luY1JldGhyb3c6CiAgICAgICAgICAgIGVtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MoY29tbW9uRWxlbWVudHMuYXN5bmNIZWxwZXJSZXRocm93KSwKICAgICAgICB3cmFwQm9keTogZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2Vzcyhjb21tb25FbGVtZW50cy53cmFwQm9keSksCiAgICAgICAgY29tcGxldGVyRmFjdG9yeTogZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2Vzcyhjb21wbGV0ZXJGYWN0b3J5KSwKICAgICAgICBjb21wbGV0ZXJGYWN0b3J5VHlwZUFyZ3VtZW50czogaXRlbVR5cGVFeHByZXNzaW9uLAogICAgICAgIHNhZmVWYXJpYWJsZU5hbWU6IG5hbWVyLnNhZmVWYXJpYWJsZVByZWZpeEZvckFzeW5jUmV3cml0ZSwKICAgICAgICBib2R5TmFtZTogbmFtZXIuZGVyaXZlQXN5bmNCb2R5TmFtZShuYW1lKSk7CgogICAgcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoCiAgICAgICAgY29tcGxldGVyRmFjdG9yeSwKICAgICAgICBjb25zdCBDYWxsU3RydWN0dXJlLnVubmFtZWQoMCwgMSksCiAgICAgICAgW2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvbkFzeW5jT3JTeW5jU3RhckVsZW1lbnRUeXBlKGVsZW1lbnQpXSkpOwoKICAgIHJldHVybiByZXdyaXRlcjsKICB9CgogIFN5bmNTdGFyUmV3cml0ZXIgX21ha2VTeW5jU3RhclJld3JpdGVyKAogICAgICBDb2RlZ2VuSW5wdXRzIGNvZGVnZW4sCiAgICAgIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBKRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgQ29kZWdlblJlZ2lzdHJ5IHJlZ2lzdHJ5LAogICAgICBNb2R1bGFyTmFtZXIgbmFtZXIsCiAgICAgIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIsCiAgICAgIEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQsCiAgICAgIGpzLkV4cHJlc3Npb24gY29kZSwKICAgICAgRGFydFR5cGUgYXN5bmNUeXBlUGFyYW1ldGVyLAogICAgICBqcy5OYW1lIG5hbWUpIHsKICAgIExpc3Q8anMuRXhwcmVzc2lvbj4gaXRlbVR5cGVFeHByZXNzaW9uID0gX29wdGlvbnMuZXhwZXJpbWVudE5ld1J0aQogICAgICAgID8gX2ZldGNoSXRlbVR5cGVOZXdSdGkoCiAgICAgICAgICAgIGNvZGVnZW4sIGNvbW1vbkVsZW1lbnRzLCByZWdpc3RyeSwgZW1pdHRlciwgYXN5bmNUeXBlUGFyYW1ldGVyKQogICAgICAgIDogX2ZldGNoSXRlbVR5cGUoY29kZWdlbiwgZW1pdHRlciwgYXN5bmNUeXBlUGFyYW1ldGVyKTsKCiAgICBTeW5jU3RhclJld3JpdGVyIHJld3JpdGVyID0gbmV3IFN5bmNTdGFyUmV3cml0ZXIoX3JlcG9ydGVyLCBlbGVtZW50LAogICAgICAgIGVuZE9mSXRlcmF0aW9uOgogICAgICAgICAgICBlbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGNvbW1vbkVsZW1lbnRzLmVuZE9mSXRlcmF0aW9uKSwKICAgICAgICBpdGVyYWJsZUZhY3Rvcnk6IGVtaXR0ZXIKICAgICAgICAgICAgLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGNvbW1vbkVsZW1lbnRzLnN5bmNTdGFySXRlcmFibGVGYWN0b3J5KSwKICAgICAgICBpdGVyYWJsZUZhY3RvcnlUeXBlQXJndW1lbnRzOiBpdGVtVHlwZUV4cHJlc3Npb24sCiAgICAgICAgeWllbGRTdGFyRXhwcmVzc2lvbjoKICAgICAgICAgICAgZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2Vzcyhjb21tb25FbGVtZW50cy55aWVsZFN0YXIpLAogICAgICAgIHVuY2F1Z2h0RXJyb3JFeHByZXNzaW9uOgogICAgICAgICAgICBlbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGNvbW1vbkVsZW1lbnRzLnN5bmNTdGFyVW5jYXVnaHRFcnJvciksCiAgICAgICAgc2FmZVZhcmlhYmxlTmFtZTogbmFtZXIuc2FmZVZhcmlhYmxlUHJlZml4Rm9yQXN5bmNSZXdyaXRlLAogICAgICAgIGJvZHlOYW1lOiBuYW1lci5kZXJpdmVBc3luY0JvZHlOYW1lKG5hbWUpKTsKCiAgICByZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZSgKICAgICAgICBjb21tb25FbGVtZW50cy5zeW5jU3Rhckl0ZXJhYmxlRmFjdG9yeSwKICAgICAgICBjb25zdCBDYWxsU3RydWN0dXJlLnVubmFtZWQoMSwgMSksCiAgICAgICAgW2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvbkFzeW5jT3JTeW5jU3RhckVsZW1lbnRUeXBlKGVsZW1lbnQpXSkpOwoKICAgIHJldHVybiByZXdyaXRlcjsKICB9CgogIEFzeW5jU3RhclJld3JpdGVyIF9tYWtlQXN5bmNTdGFyUmV3cml0ZXIoCiAgICAgIENvZGVnZW5JbnB1dHMgY29kZWdlbiwKICAgICAgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIEpFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50LAogICAgICBDb2RlZ2VuUmVnaXN0cnkgcmVnaXN0cnksCiAgICAgIE1vZHVsYXJOYW1lciBuYW1lciwKICAgICAgTW9kdWxhckVtaXR0ZXIgZW1pdHRlciwKICAgICAgRnVuY3Rpb25FbnRpdHkgZWxlbWVudCwKICAgICAganMuRXhwcmVzc2lvbiBjb2RlLAogICAgICBEYXJ0VHlwZSBhc3luY1R5cGVQYXJhbWV0ZXIsCiAgICAgIGpzLk5hbWUgbmFtZSkgewogICAgTGlzdDxqcy5FeHByZXNzaW9uPiBpdGVtVHlwZUV4cHJlc3Npb24gPSBfb3B0aW9ucy5leHBlcmltZW50TmV3UnRpCiAgICAgICAgPyBfZmV0Y2hJdGVtVHlwZU5ld1J0aSgKICAgICAgICAgICAgY29kZWdlbiwgY29tbW9uRWxlbWVudHMsIHJlZ2lzdHJ5LCBlbWl0dGVyLCBhc3luY1R5cGVQYXJhbWV0ZXIpCiAgICAgICAgOiBfZmV0Y2hJdGVtVHlwZShjb2RlZ2VuLCBlbWl0dGVyLCBhc3luY1R5cGVQYXJhbWV0ZXIpOwoKICAgIEFzeW5jU3RhclJld3JpdGVyIHJld3JpdGVyID0gbmV3IEFzeW5jU3RhclJld3JpdGVyKF9yZXBvcnRlciwgZWxlbWVudCwKICAgICAgICBhc3luY1N0YXJIZWxwZXI6CiAgICAgICAgICAgIGVtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MoY29tbW9uRWxlbWVudHMuYXN5bmNTdGFySGVscGVyKSwKICAgICAgICBzdHJlYW1PZkNvbnRyb2xsZXI6CiAgICAgICAgICAgIGVtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MoY29tbW9uRWxlbWVudHMuc3RyZWFtT2ZDb250cm9sbGVyKSwKICAgICAgICB3cmFwQm9keTogZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2Vzcyhjb21tb25FbGVtZW50cy53cmFwQm9keSksCiAgICAgICAgbmV3Q29udHJvbGxlcjogZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcygKICAgICAgICAgICAgY29tbW9uRWxlbWVudHMuYXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlckZhY3RvcnkpLAogICAgICAgIG5ld0NvbnRyb2xsZXJUeXBlQXJndW1lbnRzOiBpdGVtVHlwZUV4cHJlc3Npb24sCiAgICAgICAgc2FmZVZhcmlhYmxlTmFtZTogbmFtZXIuc2FmZVZhcmlhYmxlUHJlZml4Rm9yQXN5bmNSZXdyaXRlLAogICAgICAgIHlpZWxkRXhwcmVzc2lvbjoKICAgICAgICAgICAgZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2Vzcyhjb21tb25FbGVtZW50cy55aWVsZFNpbmdsZSksCiAgICAgICAgeWllbGRTdGFyRXhwcmVzc2lvbjoKICAgICAgICAgICAgZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2Vzcyhjb21tb25FbGVtZW50cy55aWVsZFN0YXIpLAogICAgICAgIGJvZHlOYW1lOiBuYW1lci5kZXJpdmVBc3luY0JvZHlOYW1lKG5hbWUpKTsKCiAgICByZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZSgKICAgICAgICBjb21tb25FbGVtZW50cy5hc3luY1N0YXJTdHJlYW1Db250cm9sbGVyRmFjdG9yeSwKICAgICAgICBjb25zdCBDYWxsU3RydWN0dXJlLnVubmFtZWQoMSwgMSksCiAgICAgICAgW2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvbkFzeW5jT3JTeW5jU3RhckVsZW1lbnRUeXBlKGVsZW1lbnQpXSkpOwoKICAgIHJldHVybiByZXdyaXRlcjsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENvbXBpbGVyVGFzaz4gZ2V0IHRhc2tzIHsKICAgIHJldHVybiA8Q29tcGlsZXJUYXNrPltfYnVpbGRlciwgb3B0aW1pemVyLCBnZW5lcmF0b3JdOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgU3NhQnVpbGRlciB7CiAgLy8vIENyZWF0ZXMgdGhlIFtIR3JhcGhdIGZvciBbbWVtYmVyXSBvciByZXR1cm5zIGBudWxsYCBpZiBubyBjb2RlIGlzIG5lZWRlZAogIC8vLyBmb3IgW21lbWJlcl0uCiAgSEdyYXBoIGJ1aWxkKAogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGdsb2JhbEluZmVyZW5jZVJlc3VsdHMsCiAgICAgIENvZGVnZW5JbnB1dHMgY29kZWdlbiwKICAgICAgQ29kZWdlblJlZ2lzdHJ5IHJlZ2lzdHJ5LAogICAgICBNb2R1bGFyTmFtZXIgbmFtZXIsCiAgICAgIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIpOwp9CgpjbGFzcyBTc2FCdWlsZGVyVGFzayBleHRlbmRzIENvbXBpbGVyVGFzayB7CiAgZmluYWwgQmFja2VuZFN0cmF0ZWd5IF9iYWNrZW5kU3RyYXRlZ3k7CiAgZmluYWwgU291cmNlSW5mb3JtYXRpb25TdHJhdGVneSBfc291cmNlSW5mb3JtYXRpb25GYWN0b3J5OwogIFNzYUJ1aWxkZXIgX2J1aWxkZXI7CgogIFNzYUJ1aWxkZXJUYXNrKAogICAgICBNZWFzdXJlciBtZWFzdXJlciwgdGhpcy5fYmFja2VuZFN0cmF0ZWd5LCB0aGlzLl9zb3VyY2VJbmZvcm1hdGlvbkZhY3RvcnkpCiAgICAgIDogc3VwZXIobWVhc3VyZXIpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gJ1NTQSBidWlsZGVyJzsKCiAgdm9pZCBvbkNvZGVnZW5TdGFydCgpIHsKICAgIF9idWlsZGVyID0KICAgICAgICBfYmFja2VuZFN0cmF0ZWd5LmNyZWF0ZVNzYUJ1aWxkZXIodGhpcywgX3NvdXJjZUluZm9ybWF0aW9uRmFjdG9yeSk7CiAgfQoKICAvLy8gQ3JlYXRlcyB0aGUgW0hHcmFwaF0gZm9yIFttZW1iZXJdIG9yIHJldHVybnMgYG51bGxgIGlmIG5vIGNvZGUgaXMgbmVlZGVkCiAgLy8vIGZvciBbbWVtYmVyXS4KICBIR3JhcGggYnVpbGQoCiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIsCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cywKICAgICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuLAogICAgICBDb2RlZ2VuUmVnaXN0cnkgcmVnaXN0cnksCiAgICAgIE1vZHVsYXJOYW1lciBuYW1lciwKICAgICAgTW9kdWxhckVtaXR0ZXIgZW1pdHRlcikgewogICAgcmV0dXJuIF9idWlsZGVyLmJ1aWxkKG1lbWJlciwgY2xvc2VkV29ybGQsIGdsb2JhbEluZmVyZW5jZVJlc3VsdHMsIGNvZGVnZW4sCiAgICAgICAgcmVnaXN0cnksIG5hbWVyLCBlbWl0dGVyKTsKICB9Cn0KgXUATk48AQ0BIxlLRTskISEoHiNKR0NNJEEaPS4qARcVGAE4IiYoISQ9NhoBFxUWJxkmLjwnQz4BDEUfNhgfBAEuOwwvRB9FOExQIEs/IwYBUC0ZIwY9LDNJIzpFHhQmKhQRExISIjU2BiwtQAYBIwQBHx0lLiAaHh4aIy8xPgEnLUEBIx4nFRwgFhMVFRIgEw8iKhUcIBYTFRUSIBMPIysVHCAWExUVEiATDwZRBAFPTTtNLiZGI00hBAEsHSUgHhcjATwgSzRCSDAhBAEkHSUuIBoeHhocFkhRAUcgRTkBQ0EUSxVMFk1JSjtDNAE7GitPARUEASodJS4gGh4eGiMWRyBMQAFJGEkhSzodRCFQQzQBOzArTwEVBAEsHSUuIBoeHhojFkcgTEABSxlKHE1JNT44QxlGHUQ0ATs5K08BFQQBDCU7BAIBHE8UEBsgOR0gGh8CASwqPRcBElAZAQwkARoPTAQBTxQQGyA5HSAaIFAjBAIBIXBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9zc2EuZGFydCtzZGtyb290Oi9wa2cvanNfYXN0L2xpYi9zcmMvcHJlY2VkZW5jZS5kYXJ0guQvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBwcmVjZWRlbmNlOwoKY29uc3QgRVhQUkVTU0lPTiA9IDA7CmNvbnN0IEFTU0lHTk1FTlQgPSBFWFBSRVNTSU9OICsgMTsKY29uc3QgTE9HSUNBTF9PUiA9IEFTU0lHTk1FTlQgKyAxOwpjb25zdCBMT0dJQ0FMX0FORCA9IExPR0lDQUxfT1IgKyAxOwpjb25zdCBCSVRfT1IgPSBMT0dJQ0FMX0FORCArIDE7CmNvbnN0IEJJVF9YT1IgPSBCSVRfT1IgKyAxOwpjb25zdCBCSVRfQU5EID0gQklUX1hPUiArIDE7CmNvbnN0IEVRVUFMSVRZID0gQklUX0FORCArIDE7CmNvbnN0IFJFTEFUSU9OQUwgPSBFUVVBTElUWSArIDE7CmNvbnN0IFNISUZUID0gUkVMQVRJT05BTCArIDE7CmNvbnN0IEFERElUSVZFID0gU0hJRlQgKyAxOwpjb25zdCBNVUxUSVBMSUNBVElWRSA9IEFERElUSVZFICsgMTsKY29uc3QgVU5BUlkgPSBNVUxUSVBMSUNBVElWRSArIDE7CmNvbnN0IENBTEwgPSBVTkFSWSArIDE7CmNvbnN0IExFRlRfSEFORF9TSURFID0gQ0FMTCArIDE7CmNvbnN0IFBSSU1BUlkgPSBMRUZUX0hBTkRfU0lERSArIDE7ChgATk48ARQBFiMjJCAcHR4hHhwlIhghJAEicGFja2FnZTpqc19hc3Qvc3JjL3ByZWNlZGVuY2UuZGFydDNzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9jb25zdGFudHMvdmFsdWVzLmRhcnTAAHZ8Ly8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5jb25zdGFudHMudmFsdWVzOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2RlZmVycmVkX2xvYWQuZGFydCcgc2hvdyBPdXRwdXRVbml0OwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqczsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCc7CgplbnVtIENvbnN0YW50VmFsdWVLaW5kIHsKICBGVU5DVElPTiwKICBOVUxMLAogIElOVCwKICBET1VCTEUsCiAgQk9PTCwKICBTVFJJTkcsCiAgTElTVCwKICBTRVQsCiAgTUFQLAogIENPTlNUUlVDVEVELAogIFRZUEUsCiAgSU5URVJDRVBUT1IsCiAgSlNfTkFNRSwKICBEVU1NWV9JTlRFUkNFUFRPUiwKICBVTlJFQUNIQUJMRSwKICBJTlNUQU5USUFUSU9OLAogIERFRkVSUkVEX0dMT0JBTCwKICBOT05fQ09OU1RBTlQsCn0KCmFic3RyYWN0IGNsYXNzIENvbnN0YW50VmFsdWVWaXNpdG9yPFIsIEE+IHsKICBjb25zdCBDb25zdGFudFZhbHVlVmlzaXRvcigpOwoKICBSIHZpc2l0RnVuY3Rpb24oY292YXJpYW50IEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgY292YXJpYW50IEEgYXJnKTsKICBSIHZpc2l0TnVsbChjb3ZhcmlhbnQgTnVsbENvbnN0YW50VmFsdWUgY29uc3RhbnQsIGNvdmFyaWFudCBBIGFyZyk7CiAgUiB2aXNpdEludChjb3ZhcmlhbnQgSW50Q29uc3RhbnRWYWx1ZSBjb25zdGFudCwgY292YXJpYW50IEEgYXJnKTsKICBSIHZpc2l0RG91YmxlKGNvdmFyaWFudCBEb3VibGVDb25zdGFudFZhbHVlIGNvbnN0YW50LCBjb3ZhcmlhbnQgQSBhcmcpOwogIFIgdmlzaXRCb29sKGNvdmFyaWFudCBCb29sQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgY292YXJpYW50IEEgYXJnKTsKICBSIHZpc2l0U3RyaW5nKGNvdmFyaWFudCBTdHJpbmdDb25zdGFudFZhbHVlIGNvbnN0YW50LCBjb3ZhcmlhbnQgQSBhcmcpOwogIFIgdmlzaXRMaXN0KGNvdmFyaWFudCBMaXN0Q29uc3RhbnRWYWx1ZSBjb25zdGFudCwgY292YXJpYW50IEEgYXJnKTsKICBSIHZpc2l0U2V0KGNvdmFyaWFudCBTZXRDb25zdGFudFZhbHVlIGNvbnN0YW50LCBjb3ZhcmlhbnQgQSBhcmcpOwogIFIgdmlzaXRNYXAoY292YXJpYW50IE1hcENvbnN0YW50VmFsdWUgY29uc3RhbnQsIGNvdmFyaWFudCBBIGFyZyk7CiAgUiB2aXNpdENvbnN0cnVjdGVkKAogICAgICBjb3ZhcmlhbnQgQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlIGNvbnN0YW50LCBjb3ZhcmlhbnQgQSBhcmcpOwogIFIgdmlzaXRUeXBlKGNvdmFyaWFudCBUeXBlQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgY292YXJpYW50IEEgYXJnKTsKICBSIHZpc2l0SW50ZXJjZXB0b3IoCiAgICAgIGNvdmFyaWFudCBJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgY29uc3RhbnQsIGNvdmFyaWFudCBBIGFyZyk7CiAgUiB2aXNpdER1bW15SW50ZXJjZXB0b3IoCiAgICAgIGNvdmFyaWFudCBEdW1teUludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgY292YXJpYW50IEEgYXJnKTsKICBSIHZpc2l0VW5yZWFjaGFibGUoCiAgICAgIGNvdmFyaWFudCBVbnJlYWNoYWJsZUNvbnN0YW50VmFsdWUgY29uc3RhbnQsIGNvdmFyaWFudCBBIGFyZyk7CiAgUiB2aXNpdEpzTmFtZShjb3ZhcmlhbnQgSnNOYW1lQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgY292YXJpYW50IEEgYXJnKTsKICBSIHZpc2l0RGVmZXJyZWRHbG9iYWwoCiAgICAgIGNvdmFyaWFudCBEZWZlcnJlZEdsb2JhbENvbnN0YW50VmFsdWUgY29uc3RhbnQsIGNvdmFyaWFudCBBIGFyZyk7CiAgUiB2aXNpdE5vbkNvbnN0YW50KGNvdmFyaWFudCBOb25Db25zdGFudFZhbHVlIGNvbnN0YW50LCBjb3ZhcmlhbnQgQSBhcmcpOwogIFIgdmlzaXRJbnN0YW50aWF0aW9uKAogICAgICBjb3ZhcmlhbnQgSW5zdGFudGlhdGlvbkNvbnN0YW50VmFsdWUgY29uc3RhbnQsIGNvdmFyaWFudCBBIGFyZyk7Cn0KCmFic3RyYWN0IGNsYXNzIENvbnN0YW50VmFsdWUgewogIGNvbnN0IENvbnN0YW50VmFsdWUoKTsKCiAgLy8vIGB0cnVlYCBpZiB0aGlzIGlzIGEgdmFsaWQgY29uc3RhbnQgdmFsdWUuCiAgYm9vbCBnZXQgaXNDb25zdGFudCA9PiB0cnVlOwoKICBib29sIGdldCBpc051bGwgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNCb29sID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzVHJ1ZSA9PiBmYWxzZTsKICBib29sIGdldCBpc0ZhbHNlID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzSW50ID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzRG91YmxlID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzTnVtID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzU3RyaW5nID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzTGlzdCA9PiBmYWxzZTsKICBib29sIGdldCBpc1NldCA9PiBmYWxzZTsKICBib29sIGdldCBpc01hcCA9PiBmYWxzZTsKICBib29sIGdldCBpc0NvbnN0cnVjdGVkT2JqZWN0ID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzRnVuY3Rpb24gPT4gZmFsc2U7CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnN0YW50IGlzIG51bGwsIGEgYm9vbCwgYSBudW1iZXIgb3IgYSBzdHJpbmcuCiAgYm9vbCBnZXQgaXNQcmltaXRpdmUgPT4gZmFsc2U7CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnN0YW50IGlzIGEgbGlzdCwgYSBtYXAgb3IgYSBjb25zdHJ1Y3RlZCBvYmplY3QuCiAgYm9vbCBnZXQgaXNPYmplY3QgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNUeXBlID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzSW50ZXJjZXB0b3IgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNEdW1teSA9PiBmYWxzZTsKCiAgYm9vbCBnZXQgaXNOYU4gPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNNaW51c1plcm8gPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNaZXJvID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzT25lID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzUG9zaXRpdmVJbmZpbml0eSA9PiBmYWxzZTsKICBib29sIGdldCBpc05lZ2F0aXZlSW5maW5pdHkgPT4gZmFsc2U7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlcGxhY2Ugd2l0aCBhICd0eXBlJyBnZXR0ZXIuCiAgRGFydFR5cGUgZ2V0VHlwZShDb21tb25FbGVtZW50cyB0eXBlcyk7CgogIExpc3Q8Q29uc3RhbnRWYWx1ZT4gZ2V0RGVwZW5kZW5jaWVzKCk7CgogIGFjY2VwdChDb25zdGFudFZhbHVlVmlzaXRvciB2aXNpdG9yLCBhcmcpOwoKICAvLy8gVGhlIHZhbHVlIG9mIHRoaXMgY29uc3RhbnQgaW4gRGFydCBzeW50YXgsIGlmIHBvc3NpYmxlLgogIC8vLwogIC8vLyBGb3IgW0NvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZV1zIHRoZXJlIGlzIG5vIHdheSB0byBjcmVhdGUgYSB2YWxpZCBjb25zdAogIC8vLyBleHByZXNzaW9uIGZyb20gdGhlIHZhbHVlIHNvIHRoZSB1bnBhcnNlIG9mIHRoZXNlIGlzIGJlc3QgZWZmb3J0LgogIC8vLwogIC8vLyBGb3IgdGhlIHN5bnRoZXRpYyBjb25zdGFudHMsIFtEZWZlcnJlZENvbnN0YW50VmFsdWVdLAogIC8vLyBbRGVmZXJyZWRHbG9iYWxDb25zdGFudFZhbHVlXSwgW1N5bnRoZXRpY0NvbnN0YW50VmFsdWVdLAogIC8vLyBbSW50ZXJjZXB0b3JDb25zdGFudFZhbHVlXSB0aGUgdW5wYXJzZSBpcyBkZXNjcmlwdGl2ZSBvbmx5LgogIFN0cmluZyB0b0RhcnRUZXh0KCk7CgogIC8vLyBSZXR1cm5zIGEgc3RydWN0dXJlZCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGNvbnN0YW50IHN1aXRlZCBmb3IgZGVidWdnaW5nLgogIFN0cmluZyB0b1N0cnVjdHVyZWRUZXh0KCk7CgogIENvbnN0YW50VmFsdWVLaW5kIGdldCBraW5kOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBhc3NlcnREZWJ1Z01vZGUoIlVzZSBDb25zdGFudFZhbHVlLnRvRGFydFRleHQoKSBvciAiCiAgICAgICAgIkNvbnN0YW50VmFsdWUudG9TdHJ1Y3R1cmVkVGV4dCgpICIKICAgICAgICAiaW5zdGVhZCBvZiBDb25zdGFudFZhbHVlLnRvU3RyaW5nKCkuIik7CiAgICByZXR1cm4gdG9TdHJ1Y3R1cmVkVGV4dCgpOwogIH0KfQoKY2xhc3MgRnVuY3Rpb25Db25zdGFudFZhbHVlIGV4dGVuZHMgQ29uc3RhbnRWYWx1ZSB7CiAgZmluYWwgRnVuY3Rpb25FbnRpdHkgZWxlbWVudDsKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTaG91bGQgdGhlIHR5cGUgYmUgZGVyaXZlZCBmcm9tIFtlbGVtZW50XS4KICBmaW5hbCBGdW5jdGlvblR5cGUgdHlwZTsKCiAgRnVuY3Rpb25Db25zdGFudFZhbHVlKHRoaXMuZWxlbWVudCwgdGhpcy50eXBlKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNGdW5jdGlvbiA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KHZhciBvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBGdW5jdGlvbkNvbnN0YW50VmFsdWUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBpZGVudGljYWwob3RoZXIuZWxlbWVudCwgZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PENvbnN0YW50VmFsdWU+IGdldERlcGVuZGVuY2llcygpID0+IGNvbnN0IDxDb25zdGFudFZhbHVlPltdOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvblR5cGUgZ2V0VHlwZShDb21tb25FbGVtZW50cyB0eXBlcykgPT4gdHlwZTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiAoMTcgKiBlbGVtZW50Lmhhc2hDb2RlKSAmIDB4N2ZmZmZmZmY7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudFZhbHVlVmlzaXRvciB2aXNpdG9yLCBhcmcpID0+IHZpc2l0b3IudmlzaXRGdW5jdGlvbih0aGlzLCBhcmcpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlS2luZCBnZXQga2luZCA9PiBDb25zdGFudFZhbHVlS2luZC5GVU5DVElPTjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvRGFydFRleHQoKSB7CiAgICBpZiAoZWxlbWVudC5lbmNsb3NpbmdDbGFzcyAhPSBudWxsKSB7CiAgICAgIHJldHVybiAnJHtlbGVtZW50LmVuY2xvc2luZ0NsYXNzLm5hbWV9LiR7ZWxlbWVudC5uYW1lfSc7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gJyR7ZWxlbWVudC5uYW1lfSc7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJ1Y3R1cmVkVGV4dCgpIHsKICAgIHJldHVybiAnRnVuY3Rpb25Db25zdGFudCgke3RvRGFydFRleHQoKX0pJzsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIFByaW1pdGl2ZUNvbnN0YW50VmFsdWUgZXh0ZW5kcyBDb25zdGFudFZhbHVlIHsKICBjb25zdCBQcmltaXRpdmVDb25zdGFudFZhbHVlKCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUHJpbWl0aXZlID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0odmFyIG90aGVyKSB7CiAgICAvLyBNYWtpbmcgdGhpcyBtZXRob2QgYWJzdHJhY3QgZG9lcyBub3QgZ2l2ZSB1cyBhbiBlcnJvci4KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdQcmltaXRpdmVDb25zdGFudC49PScpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignUHJpbWl0aXZlQ29uc3RhbnQuaGFzaENvZGUnKTsKCiAgLy8gUHJpbWl0aXZlIGNvbnN0YW50cyBkb24ndCBoYXZlIGRlcGVuZGVuY2llcy4KICBAb3ZlcnJpZGUKICBMaXN0PENvbnN0YW50VmFsdWU+IGdldERlcGVuZGVuY2llcygpID0+IGNvbnN0IDxDb25zdGFudFZhbHVlPltdOwp9CgpjbGFzcyBOdWxsQ29uc3RhbnRWYWx1ZSBleHRlbmRzIFByaW1pdGl2ZUNvbnN0YW50VmFsdWUgewogIC8vLyBUaGUgdmFsdWUgYSBEYXJ0IG51bGwgaXMgY29tcGlsZWQgdG8gaW4gSmF2YVNjcmlwdC4KICBzdGF0aWMgY29uc3QgU3RyaW5nIEpzTnVsbCA9ICJudWxsIjsKCiAgY29uc3QgZmFjdG9yeSBOdWxsQ29uc3RhbnRWYWx1ZSgpID0gTnVsbENvbnN0YW50VmFsdWUuX2ludGVybmFsOwoKICBjb25zdCBOdWxsQ29uc3RhbnRWYWx1ZS5faW50ZXJuYWwoKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOdWxsID0+IHRydWU7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldFR5cGUoQ29tbW9uRWxlbWVudHMgdHlwZXMpID0+IHR5cGVzLm51bGxUeXBlOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSA9PiBvdGhlciBpcyBOdWxsQ29uc3RhbnRWYWx1ZTsKCiAgLy8gVGhlIG1hZ2ljIGNvbnN0YW50IGhhcyBubyBtZWFuaW5nLiBJdCBpcyBqdXN0IGEgcmFuZG9tIHZhbHVlLgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gNzg1OTY1ODI1OwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRWYWx1ZVZpc2l0b3IgdmlzaXRvciwgYXJnKSA9PiB2aXNpdG9yLnZpc2l0TnVsbCh0aGlzLCBhcmcpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlS2luZCBnZXQga2luZCA9PiBDb25zdGFudFZhbHVlS2luZC5OVUxMOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJ1Y3R1cmVkVGV4dCgpID0+ICdOdWxsQ29uc3RhbnQnOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9EYXJ0VGV4dCgpID0+ICdudWxsJzsKfQoKYWJzdHJhY3QgY2xhc3MgTnVtQ29uc3RhbnRWYWx1ZSBleHRlbmRzIFByaW1pdGl2ZUNvbnN0YW50VmFsdWUgewogIGRvdWJsZSBnZXQgZG91YmxlVmFsdWU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTnVtID0+IHRydWU7CgogIGNvbnN0IE51bUNvbnN0YW50VmFsdWUoKTsKfQoKY2xhc3MgSW50Q29uc3RhbnRWYWx1ZSBleHRlbmRzIE51bUNvbnN0YW50VmFsdWUgewogIGZpbmFsIEJpZ0ludCBpbnRWYWx1ZTsKCiAgLy8gQ2FjaGluZyBJbnRDb25zdGFudFZhbHVlcyByZXByZXNlbnRpbmcgLTIgdGhyb3VnaCAxMCBzbyB0aGF0IHdlIGRvbid0IGhhdmUKICAvLyB0byBjcmVhdGUgbmV3IG9uZXMgZXZlcnkgdGltZSB0aG9zZSB2YWx1ZXMgYXJlIHVzZWQuCiAgc3RhdGljIE1hcDxCaWdJbnQsIEludENvbnN0YW50VmFsdWU+IF9jYWNoZWRWYWx1ZXMgPSB7fTsKCiAgQG92ZXJyaWRlCiAgZG91YmxlIGdldCBkb3VibGVWYWx1ZSA9PiBpbnRWYWx1ZS50b0RvdWJsZSgpOwoKICBmYWN0b3J5IEludENvbnN0YW50VmFsdWUoQmlnSW50IHZhbHVlKSB7CiAgICB2YXIgZXhpc3RpbmcgPSBfY2FjaGVkVmFsdWVzW3ZhbHVlXTsKICAgIGlmIChleGlzdGluZyAhPSBudWxsKSByZXR1cm4gZXhpc3Rpbmc7CiAgICB2YXIgaW50Q29uc3RhbnRWYWwgPSBuZXcgSW50Q29uc3RhbnRWYWx1ZS5faW50ZXJuYWwodmFsdWUpOwogICAgdmFyIGludFZhbHVlID0gdmFsdWUudG9JbnQoKTsKICAgIGlmIChpbnRWYWx1ZSA8PSAtMiAmJiBpbnRWYWx1ZSA+PSAxMCkgewogICAgICBfY2FjaGVkVmFsdWVzW3ZhbHVlXSA9IGludENvbnN0YW50VmFsOwogICAgfQogICAgcmV0dXJuIGludENvbnN0YW50VmFsOwogIH0KCiAgY29uc3QgSW50Q29uc3RhbnRWYWx1ZS5faW50ZXJuYWwodGhpcy5pbnRWYWx1ZSk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzSW50ID0+IHRydWU7CgogIGJvb2wgaXNVSW50MzEoKSA9PiBpbnRWYWx1ZS50b1Vuc2lnbmVkKDMxKSA9PSBpbnRWYWx1ZTsKCiAgYm9vbCBpc1VJbnQzMigpID0+IGludFZhbHVlLnRvVW5zaWduZWQoMzIpID09IGludFZhbHVlOwoKICBib29sIGlzUG9zaXRpdmUoKSA9PiBpbnRWYWx1ZSA+PSBCaWdJbnQuemVybzsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNaZXJvID0+IGludFZhbHVlID09IEJpZ0ludC56ZXJvOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc09uZSA9PiBpbnRWYWx1ZSA9PSBCaWdJbnQub25lOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRUeXBlKENvbW1vbkVsZW1lbnRzIHR5cGVzKSA9PiB0eXBlcy5pbnRUeXBlOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KHZhciBvdGhlcikgewogICAgLy8gSW50cyBhbmQgZG91YmxlcyBhcmUgdHJlYXRlZCBhcyBzZXBhcmF0ZSBjb25zdGFudHMuCiAgICBpZiAob3RoZXIgaXMhIEludENvbnN0YW50VmFsdWUpIHJldHVybiBmYWxzZTsKICAgIEludENvbnN0YW50VmFsdWUgb3RoZXJJbnQgPSBvdGhlcjsKICAgIHJldHVybiBpbnRWYWx1ZSA9PSBvdGhlckludC5pbnRWYWx1ZTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gaW50VmFsdWUuaGFzaENvZGUgJiBIYXNoaW5nLlNNSV9NQVNLOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRWYWx1ZVZpc2l0b3IgdmlzaXRvciwgYXJnKSA9PiB2aXNpdG9yLnZpc2l0SW50KHRoaXMsIGFyZyk7CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWVLaW5kIGdldCBraW5kID0+IENvbnN0YW50VmFsdWVLaW5kLklOVDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RydWN0dXJlZFRleHQoKSA9PiAnSW50Q29uc3RhbnQoJHt0b0RhcnRUZXh0KCl9KSc7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b0RhcnRUZXh0KCkgPT4gaW50VmFsdWUudG9TdHJpbmcoKTsKfQoKY2xhc3MgRG91YmxlQ29uc3RhbnRWYWx1ZSBleHRlbmRzIE51bUNvbnN0YW50VmFsdWUgewogIEBvdmVycmlkZQogIGZpbmFsIGRvdWJsZSBkb3VibGVWYWx1ZTsKCiAgZmFjdG9yeSBEb3VibGVDb25zdGFudFZhbHVlKGRvdWJsZSB2YWx1ZSkgewogICAgaWYgKHZhbHVlLmlzTmFOKSB7CiAgICAgIHJldHVybiBjb25zdCBEb3VibGVDb25zdGFudFZhbHVlLl9pbnRlcm5hbChkb3VibGUubmFuKTsKICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gZG91YmxlLmluZmluaXR5KSB7CiAgICAgIHJldHVybiBjb25zdCBEb3VibGVDb25zdGFudFZhbHVlLl9pbnRlcm5hbChkb3VibGUuaW5maW5pdHkpOwogICAgfSBlbHNlIGlmICh2YWx1ZSA9PSAtZG91YmxlLmluZmluaXR5KSB7CiAgICAgIHJldHVybiBjb25zdCBEb3VibGVDb25zdGFudFZhbHVlLl9pbnRlcm5hbCgtZG91YmxlLmluZmluaXR5KTsKICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gMC4wICYmICF2YWx1ZS5pc05lZ2F0aXZlKSB7CiAgICAgIHJldHVybiBjb25zdCBEb3VibGVDb25zdGFudFZhbHVlLl9pbnRlcm5hbCgwLjApOwogICAgfSBlbHNlIGlmICh2YWx1ZSA9PSAxLjApIHsKICAgICAgcmV0dXJuIGNvbnN0IERvdWJsZUNvbnN0YW50VmFsdWUuX2ludGVybmFsKDEuMCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IERvdWJsZUNvbnN0YW50VmFsdWUuX2ludGVybmFsKHZhbHVlKTsKICAgIH0KICB9CgogIGNvbnN0IERvdWJsZUNvbnN0YW50VmFsdWUuX2ludGVybmFsKHRoaXMuZG91YmxlVmFsdWUpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0RvdWJsZSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc05hTiA9PiBkb3VibGVWYWx1ZS5pc05hTjsKCiAgLy8gV2UgbmVlZCB0byBjaGVjayBmb3IgdGhlIG5lZ2F0aXZlIHNpZ24gc2luY2UgLTAuMCA9PSAwLjAuCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNNaW51c1plcm8gPT4gZG91YmxlVmFsdWUgPT0gMC4wICYmIGRvdWJsZVZhbHVlLmlzTmVnYXRpdmU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzWmVybyA9PiBkb3VibGVWYWx1ZSA9PSAwLjA7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzT25lID0+IGRvdWJsZVZhbHVlID09IDEuMDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNQb3NpdGl2ZUluZmluaXR5ID0+IGRvdWJsZVZhbHVlID09IGRvdWJsZS5pbmZpbml0eTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOZWdhdGl2ZUluZmluaXR5ID0+IGRvdWJsZVZhbHVlID09IC1kb3VibGUuaW5maW5pdHk7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldFR5cGUoQ29tbW9uRWxlbWVudHMgdHlwZXMpID0+IHR5cGVzLmRvdWJsZVR5cGU7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0odmFyIG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIERvdWJsZUNvbnN0YW50VmFsdWUpIHJldHVybiBmYWxzZTsKICAgIERvdWJsZUNvbnN0YW50VmFsdWUgb3RoZXJEb3VibGUgPSBvdGhlcjsKICAgIGRvdWJsZSBvdGhlclZhbHVlID0gb3RoZXJEb3VibGUuZG91YmxlVmFsdWU7CiAgICBpZiAoZG91YmxlVmFsdWUgPT0gMC4wICYmIG90aGVyVmFsdWUgPT0gMC4wKSB7CiAgICAgIHJldHVybiBkb3VibGVWYWx1ZS5pc05lZ2F0aXZlID09IG90aGVyVmFsdWUuaXNOZWdhdGl2ZTsKICAgIH0gZWxzZSBpZiAoZG91YmxlVmFsdWUuaXNOYU4pIHsKICAgICAgcmV0dXJuIG90aGVyVmFsdWUuaXNOYU47CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZG91YmxlVmFsdWUgPT0gb3RoZXJWYWx1ZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gZG91YmxlVmFsdWUuaGFzaENvZGU7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudFZhbHVlVmlzaXRvciB2aXNpdG9yLCBhcmcpID0+IHZpc2l0b3IudmlzaXREb3VibGUodGhpcywgYXJnKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZUtpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRWYWx1ZUtpbmQuRE9VQkxFOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJ1Y3R1cmVkVGV4dCgpID0+ICdEb3VibGVDb25zdGFudCgke3RvRGFydFRleHQoKX0pJzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvRGFydFRleHQoKSA9PiBkb3VibGVWYWx1ZS50b1N0cmluZygpOwp9CgphYnN0cmFjdCBjbGFzcyBCb29sQ29uc3RhbnRWYWx1ZSBleHRlbmRzIFByaW1pdGl2ZUNvbnN0YW50VmFsdWUgewogIGZhY3RvcnkgQm9vbENvbnN0YW50VmFsdWUodmFsdWUpIHsKICAgIHJldHVybiB2YWx1ZSA/IG5ldyBUcnVlQ29uc3RhbnRWYWx1ZSgpIDogbmV3IEZhbHNlQ29uc3RhbnRWYWx1ZSgpOwogIH0KCiAgY29uc3QgQm9vbENvbnN0YW50VmFsdWUuX2ludGVybmFsKCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQm9vbCA9PiB0cnVlOwoKICBib29sIGdldCBib29sVmFsdWU7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldFR5cGUoQ29tbW9uRWxlbWVudHMgdHlwZXMpID0+IHR5cGVzLmJvb2xUeXBlOwoKICBCb29sQ29uc3RhbnRWYWx1ZSBuZWdhdGUoKTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50VmFsdWVWaXNpdG9yIHZpc2l0b3IsIGFyZykgPT4gdmlzaXRvci52aXNpdEJvb2wodGhpcywgYXJnKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZUtpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRWYWx1ZUtpbmQuQk9PTDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RydWN0dXJlZFRleHQoKSA9PiAnQm9vbENvbnN0YW50KCR7dG9EYXJ0VGV4dCgpfSknOwp9CgpjbGFzcyBUcnVlQ29uc3RhbnRWYWx1ZSBleHRlbmRzIEJvb2xDb25zdGFudFZhbHVlIHsKICBmYWN0b3J5IFRydWVDb25zdGFudFZhbHVlKCkgPT4gY29uc3QgVHJ1ZUNvbnN0YW50VmFsdWUuX2ludGVybmFsKCk7CgogIGNvbnN0IFRydWVDb25zdGFudFZhbHVlLl9pbnRlcm5hbCgpIDogc3VwZXIuX2ludGVybmFsKCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzVHJ1ZSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBib29sVmFsdWUgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgRmFsc2VDb25zdGFudFZhbHVlIG5lZ2F0ZSgpID0+IG5ldyBGYWxzZUNvbnN0YW50VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PSh2YXIgb3RoZXIpID0+IGlkZW50aWNhbCh0aGlzLCBvdGhlcik7CgogIC8vIFRoZSBtYWdpYyBjb25zdGFudCBpcyBqdXN0IGEgcmFuZG9tIHZhbHVlLiBJdCBkb2VzIG5vdCBoYXZlIGFueQogIC8vIHNpZ25pZmljYW5jZS4KICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IDQ5OTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvRGFydFRleHQoKSA9PiBib29sVmFsdWUudG9TdHJpbmcoKTsKfQoKY2xhc3MgRmFsc2VDb25zdGFudFZhbHVlIGV4dGVuZHMgQm9vbENvbnN0YW50VmFsdWUgewogIGZhY3RvcnkgRmFsc2VDb25zdGFudFZhbHVlKCkgPT4gY29uc3QgRmFsc2VDb25zdGFudFZhbHVlLl9pbnRlcm5hbCgpOwoKICBjb25zdCBGYWxzZUNvbnN0YW50VmFsdWUuX2ludGVybmFsKCkgOiBzdXBlci5faW50ZXJuYWwoKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNGYWxzZSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBib29sVmFsdWUgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIFRydWVDb25zdGFudFZhbHVlIG5lZ2F0ZSgpID0+IG5ldyBUcnVlQ29uc3RhbnRWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KHZhciBvdGhlcikgPT4gaWRlbnRpY2FsKHRoaXMsIG90aGVyKTsKCiAgLy8gVGhlIG1hZ2ljIGNvbnN0YW50IGlzIGp1c3QgYSByYW5kb20gdmFsdWUuIEl0IGRvZXMgbm90IGhhdmUgYW55CiAgLy8gc2lnbmlmaWNhbmNlLgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gNTM2NTU1OTc1OwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9EYXJ0VGV4dCgpID0+IGJvb2xWYWx1ZS50b1N0cmluZygpOwp9CgpjbGFzcyBTdHJpbmdDb25zdGFudFZhbHVlIGV4dGVuZHMgUHJpbWl0aXZlQ29uc3RhbnRWYWx1ZSB7CiAgZmluYWwgU3RyaW5nIHN0cmluZ1ZhbHVlOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgaGFzaENvZGU7CgogIC8vIFRPRE8oZmxvaXRzY2gpOiBjYWNoZSBTdHJpbmdDb25zdGFudHMuCiAgU3RyaW5nQ29uc3RhbnRWYWx1ZShTdHJpbmcgdmFsdWUpCiAgICAgIDogdGhpcy5zdHJpbmdWYWx1ZSA9IHZhbHVlLAogICAgICAgIHRoaXMuaGFzaENvZGUgPSB2YWx1ZS5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTdHJpbmcgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0VHlwZShDb21tb25FbGVtZW50cyB0eXBlcykgPT4gdHlwZXMuc3RyaW5nVHlwZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PSh2YXIgb3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgU3RyaW5nQ29uc3RhbnRWYWx1ZSkgcmV0dXJuIGZhbHNlOwogICAgU3RyaW5nQ29uc3RhbnRWYWx1ZSBvdGhlclN0cmluZyA9IG90aGVyOwogICAgcmV0dXJuIGhhc2hDb2RlID09IG90aGVyU3RyaW5nLmhhc2hDb2RlICYmCiAgICAgICAgc3RyaW5nVmFsdWUgPT0gb3RoZXJTdHJpbmcuc3RyaW5nVmFsdWU7CiAgfQoKICBTdHJpbmcgdG9EYXJ0U3RyaW5nKCkgPT4gc3RyaW5nVmFsdWU7CgogIGludCBnZXQgbGVuZ3RoID0+IHN0cmluZ1ZhbHVlLmxlbmd0aDsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50VmFsdWVWaXNpdG9yIHZpc2l0b3IsIGFyZykgPT4gdmlzaXRvci52aXNpdFN0cmluZyh0aGlzLCBhcmcpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlS2luZCBnZXQga2luZCA9PiBDb25zdGFudFZhbHVlS2luZC5TVFJJTkc7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEVuc3VyZSBjb3JyZWN0IGVzY2FwaW5nLgogIEBvdmVycmlkZQogIFN0cmluZyB0b0RhcnRUZXh0KCkgPT4gJyIke3N0cmluZ1ZhbHVlfSInOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJ1Y3R1cmVkVGV4dCgpID0+ICdTdHJpbmdDb25zdGFudCgke3RvRGFydFRleHQoKX0pJzsKfQoKYWJzdHJhY3QgY2xhc3MgT2JqZWN0Q29uc3RhbnRWYWx1ZSBleHRlbmRzIENvbnN0YW50VmFsdWUgewogIGZpbmFsIEludGVyZmFjZVR5cGUgdHlwZTsKCiAgT2JqZWN0Q29uc3RhbnRWYWx1ZSh0aGlzLnR5cGUpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc09iamVjdCA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRUeXBlKENvbW1vbkVsZW1lbnRzIHR5cGVzKSA9PiB0eXBlOwoKICB2b2lkIF91bnBhcnNlVHlwZUFyZ3VtZW50cyhTdHJpbmdCdWZmZXIgc2IpIHsKICAgIGlmICghdHlwZS50cmVhdEFzUmF3KSB7CiAgICAgIHNiLndyaXRlKCc8Jyk7CiAgICAgIHNiLndyaXRlKHR5cGUudHlwZUFyZ3VtZW50cy5qb2luKCcsICcpKTsKICAgICAgc2Iud3JpdGUoJz4nKTsKICAgIH0KICB9Cn0KCmNsYXNzIFR5cGVDb25zdGFudFZhbHVlIGV4dGVuZHMgT2JqZWN0Q29uc3RhbnRWYWx1ZSB7CiAgLy8vIFRoZSB1c2VyIHR5cGUgdGhhdCB0aGlzIGNvbnN0YW50IHJlcHJlc2VudHMuCiAgZmluYWwgRGFydFR5cGUgcmVwcmVzZW50ZWRUeXBlOwoKICBUeXBlQ29uc3RhbnRWYWx1ZSh0aGlzLnJlcHJlc2VudGVkVHlwZSwgSW50ZXJmYWNlVHlwZSB0eXBlKSA6IHN1cGVyKHR5cGUpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1R5cGUgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgcmV0dXJuIG90aGVyIGlzIFR5cGVDb25zdGFudFZhbHVlICYmCiAgICAgICAgcmVwcmVzZW50ZWRUeXBlLnVuYWxpYXNlZCA9PSBvdGhlci5yZXByZXNlbnRlZFR5cGUudW5hbGlhc2VkOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiByZXByZXNlbnRlZFR5cGUudW5hbGlhc2VkLmhhc2hDb2RlICogMTM7CgogIEBvdmVycmlkZQogIExpc3Q8Q29uc3RhbnRWYWx1ZT4gZ2V0RGVwZW5kZW5jaWVzKCkgPT4gY29uc3QgPENvbnN0YW50VmFsdWU+W107CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudFZhbHVlVmlzaXRvciB2aXNpdG9yLCBhcmcpID0+IHZpc2l0b3IudmlzaXRUeXBlKHRoaXMsIGFyZyk7CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWVLaW5kIGdldCBraW5kID0+IENvbnN0YW50VmFsdWVLaW5kLlRZUEU7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b0RhcnRUZXh0KCkgPT4gJyRyZXByZXNlbnRlZFR5cGUnOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJ1Y3R1cmVkVGV4dCgpID0+ICdUeXBlQ29uc3RhbnQoJHtyZXByZXNlbnRlZFR5cGV9KSc7Cn0KCmNsYXNzIExpc3RDb25zdGFudFZhbHVlIGV4dGVuZHMgT2JqZWN0Q29uc3RhbnRWYWx1ZSB7CiAgZmluYWwgTGlzdDxDb25zdGFudFZhbHVlPiBlbnRyaWVzOwogIEBvdmVycmlkZQogIGZpbmFsIGludCBoYXNoQ29kZTsKCiAgTGlzdENvbnN0YW50VmFsdWUoSW50ZXJmYWNlVHlwZSB0eXBlLCBMaXN0PENvbnN0YW50VmFsdWU+IGVudHJpZXMpCiAgICAgIDogdGhpcy5lbnRyaWVzID0gZW50cmllcywKICAgICAgICBoYXNoQ29kZSA9IEhhc2hpbmcubGlzdEhhc2goZW50cmllcywgSGFzaGluZy5vYmplY3RIYXNoKHR5cGUpKSwKICAgICAgICBzdXBlcih0eXBlKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNMaXN0ID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0odmFyIG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIExpc3RDb25zdGFudFZhbHVlKSByZXR1cm4gZmFsc2U7CiAgICBMaXN0Q29uc3RhbnRWYWx1ZSBvdGhlckxpc3QgPSBvdGhlcjsKICAgIGlmIChoYXNoQ29kZSAhPSBvdGhlckxpc3QuaGFzaENvZGUpIHJldHVybiBmYWxzZTsKICAgIGlmICh0eXBlICE9IG90aGVyTGlzdC50eXBlKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoZW50cmllcy5sZW5ndGggIT0gb3RoZXJMaXN0LmVudHJpZXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGVudHJpZXNbaV0gIT0gb3RoZXJMaXN0LmVudHJpZXNbaV0pIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxDb25zdGFudFZhbHVlPiBnZXREZXBlbmRlbmNpZXMoKSA9PiBlbnRyaWVzOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBlbnRyaWVzLmxlbmd0aDsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50VmFsdWVWaXNpdG9yIHZpc2l0b3IsIGFyZykgPT4gdmlzaXRvci52aXNpdExpc3QodGhpcywgYXJnKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZUtpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRWYWx1ZUtpbmQuTElTVDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvRGFydFRleHQoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBfdW5wYXJzZVR5cGVBcmd1bWVudHMoc2IpOwogICAgc2Iud3JpdGUoJ1snKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGkgPiAwKSBzYi53cml0ZSgnLCcpOwogICAgICBzYi53cml0ZShlbnRyaWVzW2ldLnRvRGFydFRleHQoKSk7CiAgICB9CiAgICBzYi53cml0ZSgnXScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJ1Y3R1cmVkVGV4dCgpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdMaXN0Q29uc3RhbnQoJyk7CiAgICBfdW5wYXJzZVR5cGVBcmd1bWVudHMoc2IpOwogICAgc2Iud3JpdGUoJ1snKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGkgPiAwKSBzYi53cml0ZSgnLCAnKTsKICAgICAgc2Iud3JpdGUoZW50cmllc1tpXS50b1N0cnVjdHVyZWRUZXh0KCkpOwogICAgfQogICAgc2Iud3JpdGUoJ10pJyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIFNldENvbnN0YW50VmFsdWUgZXh0ZW5kcyBPYmplY3RDb25zdGFudFZhbHVlIHsKICBmaW5hbCBMaXN0PENvbnN0YW50VmFsdWU+IHZhbHVlczsKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgaGFzaENvZGU7CgogIFNldENvbnN0YW50VmFsdWUoSW50ZXJmYWNlVHlwZSB0eXBlLCBMaXN0PENvbnN0YW50VmFsdWU+IHZhbHVlcykKICAgICAgOiB2YWx1ZXMgPSB2YWx1ZXMsCiAgICAgICAgaGFzaENvZGUgPSBIYXNoaW5nLmxpc3RIYXNoKHZhbHVlcywgSGFzaGluZy5vYmplY3RIYXNoKHR5cGUpKSwKICAgICAgICBzdXBlcih0eXBlKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTZXQgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PSh2YXIgb3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgU2V0Q29uc3RhbnRWYWx1ZSkgcmV0dXJuIGZhbHNlOwogICAgU2V0Q29uc3RhbnRWYWx1ZSBvdGhlclNldCA9IG90aGVyOwogICAgaWYgKGhhc2hDb2RlICE9IG90aGVyU2V0Lmhhc2hDb2RlKSByZXR1cm4gZmFsc2U7CiAgICBpZiAodHlwZSAhPSBvdGhlclNldC50eXBlKSByZXR1cm4gZmFsc2U7CiAgICBpZiAobGVuZ3RoICE9IG90aGVyU2V0Lmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHZhbHVlc1tpXSAhPSBvdGhlclNldC52YWx1ZXNbaV0pIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxDb25zdGFudFZhbHVlPiBnZXREZXBlbmRlbmNpZXMoKSA9PiB2YWx1ZXM7CgogIGludCBnZXQgbGVuZ3RoID0+IHZhbHVlcy5sZW5ndGg7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudFZhbHVlVmlzaXRvciB2aXNpdG9yLCBhcmcpID0+IHZpc2l0b3IudmlzaXRTZXQodGhpcywgYXJnKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvRGFydFRleHQoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBfdW5wYXJzZVR5cGVBcmd1bWVudHMoc2IpOwogICAgc2Iud3JpdGUoJ3snKTsKICAgIHNiLndyaXRlQWxsKHZhbHVlcy5tYXAoKHYpID0+IHYudG9EYXJ0VGV4dCgpKSwgJywnKTsKICAgIHNiLndyaXRlKCd9Jyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cnVjdHVyZWRUZXh0KCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoJ1NldENvbnN0YW50KCcpOwogICAgX3VucGFyc2VUeXBlQXJndW1lbnRzKHNiKTsKICAgIHNiLndyaXRlKCd7Jyk7CiAgICBzYi53cml0ZUFsbCh2YWx1ZXMubWFwKCh2KSA9PiB2LnRvU3RydWN0dXJlZFRleHQoKSksICcsICcpOwogICAgc2Iud3JpdGUoJ30pJyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWVLaW5kIGdldCBraW5kID0+IENvbnN0YW50VmFsdWVLaW5kLlNFVDsKfQoKYWJzdHJhY3QgY2xhc3MgTWFwQ29uc3RhbnRWYWx1ZSBleHRlbmRzIE9iamVjdENvbnN0YW50VmFsdWUgewogIGZpbmFsIExpc3Q8Q29uc3RhbnRWYWx1ZT4ga2V5czsKICBmaW5hbCBMaXN0PENvbnN0YW50VmFsdWU+IHZhbHVlczsKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgaGFzaENvZGU7CiAgTWFwPENvbnN0YW50VmFsdWUsIENvbnN0YW50VmFsdWU+IF9sb29rdXBNYXA7CgogIE1hcENvbnN0YW50VmFsdWUoCiAgICAgIEludGVyZmFjZVR5cGUgdHlwZSwgTGlzdDxDb25zdGFudFZhbHVlPiBrZXlzLCBMaXN0PENvbnN0YW50VmFsdWU+IHZhbHVlcykKICAgICAgOiB0aGlzLmtleXMgPSBrZXlzLAogICAgICAgIHRoaXMudmFsdWVzID0gdmFsdWVzLAogICAgICAgIHRoaXMuaGFzaENvZGUgPSBIYXNoaW5nLmxpc3RIYXNoKAogICAgICAgICAgICB2YWx1ZXMsIEhhc2hpbmcubGlzdEhhc2goa2V5cywgSGFzaGluZy5vYmplY3RIYXNoKHR5cGUpKSksCiAgICAgICAgc3VwZXIodHlwZSkgewogICAgYXNzZXJ0KGtleXMubGVuZ3RoID09IHZhbHVlcy5sZW5ndGgpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNNYXAgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PSh2YXIgb3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgTWFwQ29uc3RhbnRWYWx1ZSkgcmV0dXJuIGZhbHNlOwogICAgTWFwQ29uc3RhbnRWYWx1ZSBvdGhlck1hcCA9IG90aGVyOwogICAgaWYgKGhhc2hDb2RlICE9IG90aGVyTWFwLmhhc2hDb2RlKSByZXR1cm4gZmFsc2U7CiAgICBpZiAodHlwZSAhPSBvdGhlci50eXBlKSByZXR1cm4gZmFsc2U7CiAgICBpZiAobGVuZ3RoICE9IG90aGVyLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBpZiAoa2V5c1tpXSAhPSBvdGhlck1hcC5rZXlzW2ldKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmICh2YWx1ZXNbaV0gIT0gb3RoZXJNYXAudmFsdWVzW2ldKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8Q29uc3RhbnRWYWx1ZT4gZ2V0RGVwZW5kZW5jaWVzKCkgewogICAgTGlzdDxDb25zdGFudFZhbHVlPiByZXN1bHQgPSA8Q29uc3RhbnRWYWx1ZT5bXTsKICAgIHJlc3VsdC5hZGRBbGwoa2V5cyk7CiAgICByZXN1bHQuYWRkQWxsKHZhbHVlcyk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgaW50IGdldCBsZW5ndGggPT4ga2V5cy5sZW5ndGg7CgogIENvbnN0YW50VmFsdWUgbG9va3VwKENvbnN0YW50VmFsdWUga2V5KSB7CiAgICB2YXIgbG9va3VwTWFwID0gX2xvb2t1cE1hcCA/Pz0KICAgICAgICBuZXcgTWFwPENvbnN0YW50VmFsdWUsIENvbnN0YW50VmFsdWU+LmZyb21JdGVyYWJsZXMoa2V5cywgdmFsdWVzKTsKICAgIHJldHVybiBsb29rdXBNYXBba2V5XTsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudFZhbHVlVmlzaXRvciB2aXNpdG9yLCBhcmcpID0+IHZpc2l0b3IudmlzaXRNYXAodGhpcywgYXJnKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZUtpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRWYWx1ZUtpbmQuTUFQOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9EYXJ0VGV4dCgpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIF91bnBhcnNlVHlwZUFyZ3VtZW50cyhzYik7CiAgICBzYi53cml0ZSgneycpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBpZiAoaSA+IDApIHNiLndyaXRlKCcsJyk7CiAgICAgIHNiLndyaXRlKGtleXNbaV0udG9EYXJ0VGV4dCgpKTsKICAgICAgc2Iud3JpdGUoJzonKTsKICAgICAgc2Iud3JpdGUodmFsdWVzW2ldLnRvRGFydFRleHQoKSk7CiAgICB9CiAgICBzYi53cml0ZSgnfScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJ1Y3R1cmVkVGV4dCgpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdNYXBDb25zdGFudCgnKTsKICAgIF91bnBhcnNlVHlwZUFyZ3VtZW50cyhzYik7CiAgICBzYi53cml0ZSgneycpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBpZiAoaSA+IDApIHNiLndyaXRlKCcsICcpOwogICAgICBzYi53cml0ZShrZXlzW2ldLnRvU3RydWN0dXJlZFRleHQoKSk7CiAgICAgIHNiLndyaXRlKCc6ICcpOwogICAgICBzYi53cml0ZSh2YWx1ZXNbaV0udG9TdHJ1Y3R1cmVkVGV4dCgpKTsKICAgIH0KICAgIHNiLndyaXRlKCd9KScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgpjbGFzcyBJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgZXh0ZW5kcyBDb25zdGFudFZhbHVlIHsKICAvLy8gVGhlIGNsYXNzIGZvciB3aGljaCB0aGlzIGludGVyY2VwdG9yIGhvbGRzIHRoZSBtZXRob2RzLiAgVGhlIGNvbnN0YW50CiAgLy8vIGlzIGEgZGlzcGF0Y2ggdGFibGUgZm9yIHRoaXMgY2xhc3MuCiAgZmluYWwgQ2xhc3NFbnRpdHkgY2xzOwoKICBJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUodGhpcy5jbHMpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0ludGVyY2VwdG9yID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIHJldHVybiBvdGhlciBpcyBJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgJiYgY2xzID09IG90aGVyLmNsczsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gY2xzLmhhc2hDb2RlICogNDM7CgogIEBvdmVycmlkZQogIExpc3Q8Q29uc3RhbnRWYWx1ZT4gZ2V0RGVwZW5kZW5jaWVzKCkgPT4gY29uc3QgPENvbnN0YW50VmFsdWU+W107CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudFZhbHVlVmlzaXRvciB2aXNpdG9yLCBhcmcpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0SW50ZXJjZXB0b3IodGhpcywgYXJnKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldFR5cGUoQ29tbW9uRWxlbWVudHMgdHlwZXMpID0+IHR5cGVzLmR5bmFtaWNUeXBlOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlS2luZCBnZXQga2luZCA9PiBDb25zdGFudFZhbHVlS2luZC5JTlRFUkNFUFRPUjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvRGFydFRleHQoKSB7CiAgICByZXR1cm4gJ2ludGVyY2VwdG9yKCRjbHMpJzsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cnVjdHVyZWRUZXh0KCkgewogICAgcmV0dXJuICdJbnRlcmNlcHRvckNvbnN0YW50KCR7Y2xzLm5hbWV9KSc7CiAgfQp9CgpjbGFzcyBKc05hbWVDb25zdGFudFZhbHVlIGV4dGVuZHMgQ29uc3RhbnRWYWx1ZSB7CiAgZmluYWwganMuTGl0ZXJhbFN0cmluZyBuYW1lOwoKICBKc05hbWVDb25zdGFudFZhbHVlKHRoaXMubmFtZSk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRHVtbXkgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgcmV0dXJuIG90aGVyIGlzIEpzTmFtZUNvbnN0YW50VmFsdWUgJiYgbmFtZSA9PSBvdGhlci5uYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAgZ2V0IGhhc2hDb2RlID0+IG5hbWUuaGFzaENvZGUgKiAxNzsKCiAgQG92ZXJyaWRlCiAgTGlzdDxDb25zdGFudFZhbHVlPiBnZXREZXBlbmRlbmNpZXMoKSA9PiBjb25zdCA8Q29uc3RhbnRWYWx1ZT5bXTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50VmFsdWVWaXNpdG9yIHZpc2l0b3IsIGFyZykgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRKc05hbWUodGhpcywgYXJnKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldFR5cGUoQ29tbW9uRWxlbWVudHMgdHlwZXMpID0+IHR5cGVzLmR5bmFtaWNUeXBlOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlS2luZCBnZXQga2luZCA9PiBDb25zdGFudFZhbHVlS2luZC5KU19OQU1FOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9EYXJ0VGV4dCgpID0+ICdqc19uYW1lKCR7bmFtZX0pJzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RydWN0dXJlZFRleHQoKSA9PiAnSnNOYW1lQ29uc3RhbnQoJHtuYW1lfSknOwp9CgovLy8gQSBjb25zdGFudCB1c2VkIGFzIHRoZSBkdW1teSBpbnRlcmNlcHRvciB2YWx1ZSBmb3IgaW50ZXJjZXB0ZWQgY2FsbHMgd2l0aAovLy8gYSBrbm93biBub24taW50ZXJjZXB0b3IgdGFyZ2V0LgpjbGFzcyBEdW1teUludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZSBleHRlbmRzIENvbnN0YW50VmFsdWUgewogIGZpbmFsIEFic3RyYWN0VmFsdWUgYWJzdHJhY3RWYWx1ZTsKCiAgRHVtbXlJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUodGhpcy5hYnN0cmFjdFZhbHVlKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNEdW1teSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIgaXMgRHVtbXlJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgJiYKICAgICAgICBhYnN0cmFjdFZhbHVlID09IG90aGVyLmFic3RyYWN0VmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBnZXQgaGFzaENvZGUgPT4gYWJzdHJhY3RWYWx1ZS5oYXNoQ29kZSAqIDE3OwoKICBAb3ZlcnJpZGUKICBMaXN0PENvbnN0YW50VmFsdWU+IGdldERlcGVuZGVuY2llcygpID0+IGNvbnN0IDxDb25zdGFudFZhbHVlPltdOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRWYWx1ZVZpc2l0b3IgdmlzaXRvciwgYXJnKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdER1bW15SW50ZXJjZXB0b3IodGhpcywgYXJnKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldFR5cGUoQ29tbW9uRWxlbWVudHMgdHlwZXMpID0+IHR5cGVzLmR5bmFtaWNUeXBlOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlS2luZCBnZXQga2luZCA9PiBDb25zdGFudFZhbHVlS2luZC5EVU1NWV9JTlRFUkNFUFRPUjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvRGFydFRleHQoKSA9PiAnZHVtbXlfaW50ZXJjZXB0b3IoJGFic3RyYWN0VmFsdWUpJzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RydWN0dXJlZFRleHQoKSA9PiAnRHVtbXlJbnRlcmNlcHRvckNvbnN0YW50KCRhYnN0cmFjdFZhbHVlKSc7Cn0KCi8vIEEgY29uc3RhbnQgd2l0aCBhbiBlbXB0eSB0eXBlIHVzZWQgaW4gW0hJbnN0cnVjdGlvbl1zIG9mIGFuIGV4cHJlc3Npb24KLy8gaW4gYW4gdW5yZWFjaGFibGUgY29udGV4dC4KY2xhc3MgVW5yZWFjaGFibGVDb25zdGFudFZhbHVlIGV4dGVuZHMgQ29uc3RhbnRWYWx1ZSB7CiAgY29uc3QgVW5yZWFjaGFibGVDb25zdGFudFZhbHVlKCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRHVtbXkgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgTGlzdDxDb25zdGFudFZhbHVlPiBnZXREZXBlbmRlbmNpZXMoKSA9PiBjb25zdCA8Q29uc3RhbnRWYWx1ZT5bXTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50VmFsdWVWaXNpdG9yIHZpc2l0b3IsIGFyZykgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRVbnJlYWNoYWJsZSh0aGlzLCBhcmcpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0VHlwZShDb21tb25FbGVtZW50cyB0eXBlcykgPT4gdHlwZXMuZHluYW1pY1R5cGU7CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWVLaW5kIGdldCBraW5kID0+IENvbnN0YW50VmFsdWVLaW5kLlVOUkVBQ0hBQkxFOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9EYXJ0VGV4dCgpID0+ICd1bnJlYWNoYWJsZSgpJzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RydWN0dXJlZFRleHQoKSA9PiAnVW5yZWFjaGFibGVDb25zdGFudCgpJzsKfQoKY2xhc3MgQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlIGV4dGVuZHMgT2JqZWN0Q29uc3RhbnRWYWx1ZSB7CiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWFrZSBbZmllbGRzXSBwcml2YXRlIHRvIGF2b2lkIG1pc3VzZSBvZiB0aGUgbWFwCiAgLy8gb3JkZXJpbmcgYW5kIG11dGFiaWxpdHkuCiAgZmluYWwgTWFwPEZpZWxkRW50aXR5LCBDb25zdGFudFZhbHVlPiBmaWVsZHM7CiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGhhc2hDb2RlOwoKICBDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUoCiAgICAgIEludGVyZmFjZVR5cGUgdHlwZSwgTWFwPEZpZWxkRW50aXR5LCBDb25zdGFudFZhbHVlPiBmaWVsZHMpCiAgICAgIDogdGhpcy5maWVsZHMgPSBmaWVsZHMsCiAgICAgICAgaGFzaENvZGUgPSBIYXNoaW5nLnVub3JkZXJlZE1hcEhhc2goZmllbGRzLCBIYXNoaW5nLm9iamVjdEhhc2godHlwZSkpLAogICAgICAgIHN1cGVyKHR5cGUpIHsKICAgIGFzc2VydCh0eXBlICE9IG51bGwpOwogICAgYXNzZXJ0KCFmaWVsZHMuY29udGFpbnNLZXkobnVsbCkpOwogICAgYXNzZXJ0KCFmaWVsZHMuY29udGFpbnNWYWx1ZShudWxsKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0NvbnN0cnVjdGVkT2JqZWN0ID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0odmFyIG90aGVyVmFyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyVmFyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXJWYXIgaXMhIENvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZSkgcmV0dXJuIGZhbHNlOwogICAgQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlIG90aGVyID0gb3RoZXJWYXI7CiAgICBpZiAoaGFzaENvZGUgIT0gb3RoZXIuaGFzaENvZGUpIHJldHVybiBmYWxzZTsKICAgIGlmICh0eXBlICE9IG90aGVyLnR5cGUpIHJldHVybiBmYWxzZTsKICAgIGlmIChmaWVsZHMubGVuZ3RoICE9IG90aGVyLmZpZWxkcy5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgIGZvciAoRmllbGRFbnRpdHkgZmllbGQgaW4gZmllbGRzLmtleXMpIHsKICAgICAgaWYgKGZpZWxkc1tmaWVsZF0gIT0gb3RoZXIuZmllbGRzW2ZpZWxkXSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PENvbnN0YW50VmFsdWU+IGdldERlcGVuZGVuY2llcygpID0+IGZpZWxkcy52YWx1ZXMudG9MaXN0KCk7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudFZhbHVlVmlzaXRvciB2aXNpdG9yLCBhcmcpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Q29uc3RydWN0ZWQodGhpcywgYXJnKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWVLaW5kIGdldCBraW5kID0+IENvbnN0YW50VmFsdWVLaW5kLkNPTlNUUlVDVEVEOwoKICBJdGVyYWJsZTxGaWVsZEVudGl0eT4gZ2V0IF9maWVsZHNTb3J0ZWRCeU5hbWUgewogICAgcmV0dXJuIGZpZWxkcy5rZXlzLnRvTGlzdCgpLi5zb3J0KChhLCBiKSA9PiBhLm5hbWUuY29tcGFyZVRvKGIubmFtZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvRGFydFRleHQoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSh0eXBlLmVsZW1lbnQubmFtZSk7CiAgICBfdW5wYXJzZVR5cGVBcmd1bWVudHMoc2IpOwogICAgc2Iud3JpdGUoJygnKTsKICAgIGludCBpID0gMDsKICAgIGZvciAoRmllbGRFbnRpdHkgZmllbGQgaW4gX2ZpZWxkc1NvcnRlZEJ5TmFtZSkgewogICAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gZmllbGRzW2ZpZWxkXTsKICAgICAgaWYgKGkgPiAwKSBzYi53cml0ZSgnLCcpOwogICAgICBzYi53cml0ZShmaWVsZC5uYW1lKTsKICAgICAgc2Iud3JpdGUoJz0nKTsKICAgICAgc2Iud3JpdGUodmFsdWUudG9EYXJ0VGV4dCgpKTsKICAgICAgaSsrOwogICAgfQogICAgc2Iud3JpdGUoJyknKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RydWN0dXJlZFRleHQoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnQ29uc3RydWN0ZWRDb25zdGFudCgnKTsKICAgIHNiLndyaXRlKHR5cGUpOwogICAgc2Iud3JpdGUoJygnKTsKICAgIGludCBpID0gMDsKICAgIGZvciAoRmllbGRFbnRpdHkgZmllbGQgaW4gX2ZpZWxkc1NvcnRlZEJ5TmFtZSkgewogICAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gZmllbGRzW2ZpZWxkXTsKICAgICAgaWYgKGkgPiAwKSBzYi53cml0ZSgnLCcpOwogICAgICBzYi53cml0ZShmaWVsZC5uYW1lKTsKICAgICAgc2Iud3JpdGUoJz0nKTsKICAgICAgc2Iud3JpdGUodmFsdWUudG9TdHJ1Y3R1cmVkVGV4dCgpKTsKICAgICAgaSsrOwogICAgfQogICAgc2Iud3JpdGUoJykpJyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCmNsYXNzIEluc3RhbnRpYXRpb25Db25zdGFudFZhbHVlIGV4dGVuZHMgQ29uc3RhbnRWYWx1ZSB7CiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50czsKICBmaW5hbCBGdW5jdGlvbkNvbnN0YW50VmFsdWUgZnVuY3Rpb247CgogIEluc3RhbnRpYXRpb25Db25zdGFudFZhbHVlKHRoaXMudHlwZUFyZ3VtZW50cywgdGhpcy5mdW5jdGlvbik7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBvdGhlciBpcyBJbnN0YW50aWF0aW9uQ29uc3RhbnRWYWx1ZSAmJgogICAgICAgIGZ1bmN0aW9uID09IG90aGVyLmZ1bmN0aW9uICYmCiAgICAgICAgZXF1YWxFbGVtZW50cyh0eXBlQXJndW1lbnRzLCBvdGhlci50eXBlQXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgewogICAgcmV0dXJuIEhhc2hpbmcub2JqZWN0SGFzaChmdW5jdGlvbiwgSGFzaGluZy5saXN0SGFzaCh0eXBlQXJndW1lbnRzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PENvbnN0YW50VmFsdWU+IGdldERlcGVuZGVuY2llcygpID0+IDxDb25zdGFudFZhbHVlPltmdW5jdGlvbl07CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudFZhbHVlVmlzaXRvciB2aXNpdG9yLCBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXRJbnN0YW50aWF0aW9uKHRoaXMsIGFyZyk7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldFR5cGUoQ29tbW9uRWxlbWVudHMgdHlwZXMpIHsKICAgIEZ1bmN0aW9uVHlwZSB0eXBlID0gZnVuY3Rpb24uZ2V0VHlwZSh0eXBlcyk7CiAgICByZXR1cm4gdHlwZS5pbnN0YW50aWF0ZSh0eXBlQXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWVLaW5kIGdldCBraW5kID0+IENvbnN0YW50VmFsdWVLaW5kLklOU1RBTlRJQVRJT047CgogIEBvdmVycmlkZQogIFN0cmluZyB0b0RhcnRUZXh0KCkgPT4KICAgICAgJzwke3R5cGVBcmd1bWVudHMuam9pbignLCAnKX0+KCR7ZnVuY3Rpb24udG9EYXJ0VGV4dCgpfSknOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJ1Y3R1cmVkVGV4dCgpIHsKICAgIHJldHVybiAnSW5zdGFudGlhdGlvbkNvbnN0YW50KCR0eXBlQXJndW1lbnRzLCcKICAgICAgICAnJHtmdW5jdGlvbi50b1N0cnVjdHVyZWRUZXh0KCl9KSc7CiAgfQp9CgovLy8gQSByZWZlcmVuY2UgdG8gYSBjb25zdGFudCBpbiBhbm90aGVyIG91dHB1dCB1bml0LgovLy8KLy8vIFVzZWQgZm9yIHJlZmVycmluZyB0byBkZWZlcnJlZCBjb25zdGFudHMgdGhhdCBhcHBlYXIgYXMgaW5pdGlhbGl6ZXJzIG9mCi8vLyBmaW5hbCAobm9uLWNvbnN0KSBnbG9iYWwgZmllbGRzLgovLy8KLy8gVE9ETyhzaWdtdW5kKTogdGhpcyBzaG91bGQgZXZlbnR1YWxseSBub3QgYmUgYSBjb25zdGFudCB2YWx1ZS4gSW4gcGFydGljdWxhciwKLy8gW0RlZmVycmVkQ29uc3RhbnRWYWx1ZV0gaXMgaW50cm9kdWNlZCBieSB0aGUgY29uc3RhbnQgZXZhbHVhdG9yIHdoZW4gaXQgZmlyc3QKLy8gc2VlcyBjb25zdGFudHMgdXNlZCBpbiB0aGUgcHJvZ3JhbS4gW0RlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZV0gYXJlCi8vIGludHJvZHVjZWQgbGF0ZXIgYnkgdGhlIFNTQSBidWlsZGVyIGFuZCBzaG91bGQgYmUgcmVwcmVzZW50ZWQKLy8gd2l0aCBhIGRlZGljYXRlZCBKRW50aXR5IGluc3RlYWQuIFdlIGN1cnJlbnRseSBtb2RlbCB0aGVtIGFzIGEgcmVndWxhcgovLyBjb25zdGFudCB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbWFjaGluZXJ5IHdlIGFscmVhZHkgaGF2ZSBpbiBwbGFjZSB0bwovLyBnZW5lcmF0ZSBkZWZlcnJlZCBjb25zdGFudHMgaW4gdGhlIGVtaXR0ZXIuCmNsYXNzIERlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZSBleHRlbmRzIENvbnN0YW50VmFsdWUgewogIERlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZSh0aGlzLnJlZmVyZW5jZWQsIHRoaXMudW5pdCk7CgogIGZpbmFsIENvbnN0YW50VmFsdWUgcmVmZXJlbmNlZDsKICBmaW5hbCBPdXRwdXRVbml0IHVuaXQ7CgogIGJvb2wgZ2V0IGlzUmVmZXJlbmNlID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIHJldHVybiBvdGhlciBpcyBEZWZlcnJlZEdsb2JhbENvbnN0YW50VmFsdWUgJiYKICAgICAgICByZWZlcmVuY2VkID09IG90aGVyLnJlZmVyZW5jZWQgJiYKICAgICAgICB1bml0ID09IG90aGVyLnVuaXQ7CiAgfQoKICBAb3ZlcnJpZGUKICBnZXQgaGFzaENvZGUgPT4gKHJlZmVyZW5jZWQuaGFzaENvZGUgKiAxNyArIHVuaXQuaGFzaENvZGUpICYgMHgzZmZmZmZmZjsKCiAgQG92ZXJyaWRlCiAgTGlzdDxDb25zdGFudFZhbHVlPiBnZXREZXBlbmRlbmNpZXMoKSA9PiA8Q29uc3RhbnRWYWx1ZT5bcmVmZXJlbmNlZF07CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudFZhbHVlVmlzaXRvciB2aXNpdG9yLCBhcmcpID0+CiAgICAgIHZpc2l0b3IudmlzaXREZWZlcnJlZEdsb2JhbCh0aGlzLCBhcmcpOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRUeXBlKENvbW1vbkVsZW1lbnRzIHR5cGVzKSA9PiByZWZlcmVuY2VkLmdldFR5cGUodHlwZXMpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlS2luZCBnZXQga2luZCA9PiBDb25zdGFudFZhbHVlS2luZC5ERUZFUlJFRF9HTE9CQUw7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b0RhcnRUZXh0KCkgPT4gJ2RlZmVycmVkX2dsb2JhbCgke3JlZmVyZW5jZWQudG9EYXJ0VGV4dCgpfSknOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJ1Y3R1cmVkVGV4dCgpIHsKICAgIHJldHVybiAnRGVmZXJyZWRHbG9iYWxDb25zdGFudCgke3JlZmVyZW5jZWQudG9TdHJ1Y3R1cmVkVGV4dCgpfSknOwogIH0KfQoKLy8vIEEgY29uc3RhbnQgdmFsdWUgcmVzdWx0aW5nIGZyb20gYSBub24gY29uc3RhbnQgb3IgZXJyb25lb3VzIGNvbnN0YW50Ci8vLyBleHByZXNzaW9uLgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBFeHBhbmQgdGhpcyB0byBjb250YWluIHRoZSBlcnJvciBraW5kLgpjbGFzcyBOb25Db25zdGFudFZhbHVlIGV4dGVuZHMgQ29uc3RhbnRWYWx1ZSB7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNDb25zdGFudCA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50VmFsdWVWaXNpdG9yIHZpc2l0b3IsIGFyZykgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXROb25Db25zdGFudCh0aGlzLCBhcmcpOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxDb25zdGFudFZhbHVlPiBnZXREZXBlbmRlbmNpZXMoKSA9PiBjb25zdCA8Q29uc3RhbnRWYWx1ZT5bXTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0VHlwZShDb21tb25FbGVtZW50cyB0eXBlcykgPT4gdHlwZXMuZHluYW1pY1R5cGU7CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWVLaW5kIGdldCBraW5kID0+IENvbnN0YW50VmFsdWVLaW5kLk5PTl9DT05TVEFOVDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RydWN0dXJlZFRleHQoKSA9PiAnTm9uQ29uc3RhbnQnOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9EYXJ0VGV4dCgpID0+ICc+Pm5vbi1jb25zdGFudDw8JzsKfQqEcwBOTjwBIgEZIiQhMDEeHAEZDAgHCggKCAcHDwgPCxUPERMQAgEsIAFORkRKRkpGREQWRUYWRRtKFkVKGUhMGEcCAR8ZATAfARwcHB0bHhseHBsbKSABSiEBTR4cIx0BGyEcGygoATgqASkBLQE+Bk5IBjw/QhcBUR0BHgEMFjksMR8EAgE0IEUbATIBDB8BDCA3LgQBDEQBDDYBDDwBDFEBDDwBDBgqPw0gBgQBDB4wBAIBPiIBDCABDCA+OAQBDFABMgxEAgE5OicBQwEnAQwbAQw8AQw5AUMMIQEMTQEMOAEMLwEMIQIBQRoBDBoBHAIBMhkBUDo7AQwxASspK0AiLC0GGwQBMwEMGgE6AToBMAEMLgEMLAEMOwEMIDsyJyoEAQw8AQxMAQw3AQw/AQwuAgE1DBwBLhc+K0MsRDQ3HzcNNwYEATkBDB0BDCcBPwxIAQwpAQwoAQxBAQxCAQw+AQwgNS0xMz4kHw0oBgQBDCwBDE8BDDoBDEIBDDECAUIlRwQBJwEMGwEWAQw8AR4BDE0BDDgBDEACATRGATsBDBsBDB4BDDsBDDkBRRMMGwEMLwIBNUgBPAEMHAEMHwEMOQEMOQFFEwwhAQwvAgE7HAEMFgEsJCIoAQwdAQw+AQwgLTUtLzAEASgBKAEMTwEMOgEzDC0BDEICATscASIBDB0BDDIBMBwVLxUGBAIBNjMiAU0BDBsBDBwpRgQBDD8BDEQBDE0BDDgBDC0BDEMCATYlDBYBRSBIFQEMGwEMIC0zKTYuQi88BhEEAQw0ASQBDE0BDDgBDBgqHxMnICkGExoEAQweKh8fEychLwYUGgQCAT4kDBYBQxlHFQEMGgEMIC0yJzUtMS45BhEEAQwzASMBDEwBDBgqHxM5ExoEAQweKh4fE0AUGgQBDDcCAT4iJAwWMAEUUBoeKkcWKgQBDBoBDCAtMic1Ki4nNTkGEQQBDCo0GRsTBAEhASwjSxsEAQxMAQw3AQwYKh8TJyAmFSgGExoEAQweKh4fEychLBYuBhQaBAIBN0wqGQEmAQwiAQwcQgQBDCkBDEQBDC4wBAEMPwEMPwEMGCAEAQweLwQCATIfASIBDBwBDBw/BAEMJgEMRAEMLisEAQw/AQw7AQwtAQw6AgFOJDwlATUBDBwBDBw1LgQBDC8BDEQBDC41BAEMPwEMRQEMPgEMSwIBSh43JAEMHAEMRAEMLjAEAQw/AQw/AQwqAQw4AgE9Sx4wDBYBHEIeTxYaJykEAQwoAQwjMD0vMio8LT4GEQQBDEMBDC4wBAEMPwEySwQBDBgqIR8TDzUrIBwVJAsGExoEAQweKiYUEw81KyAcFSoLBhQaBAIBOSYoAUEBDBwtMiY7BAEMFUoEAQxGAQwvLQEMKzEsBAEMQQEMGUEBDB4zKwQCATYETCUEUVFJQUpLLzo7ASIZASABDBwzKhwEAQxLAQxIAQwvLgEMRwEMQwEMSAEMHkcEAgFJED8vDCABDC4wBAEMRAEMPwEMQAEMLgEMLQIBKnBhY2thZ2U6Y29tcGlsZXIvc3JjL2NvbnN0YW50cy92YWx1ZXMuZGFydDFzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9lbGVtZW50cy90eXBlcy5kYXJ0wADahC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnIHNob3cgZXF1YWxFbGVtZW50czsKaW1wb3J0ICdlbnRpdGllcy5kYXJ0JzsKCi8vLyBIaWVyYXJjaHkgdG8gZGVzY3JpYmUgdHlwZXMgaW4gRGFydC4KLy8vCi8vLyBUaGlzIGhpZXJhcmNoeSBpcyBhIHN1cGVyIGhpZXJhcmNoeSBvZiB0aGUgdXNlLWNhc2Ugc3BlY2lmaWMgaGllcmFyY2hpZXMKLy8vIHVzZWQgaW4gZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBjb21waWxlci4gVGhpcyBoaWVyYXJjaHkgYWJzdHJhY3RzIGRldGFpbHMKLy8vIG5vdCBnZW5lcmFsbHkgbmVlZGVkIG9yIHJlcXVpcmVkIGZvciB0aGUgRGFydCB0eXBlIGhpZXJhcmNoeS4gRm9yIGluc3RhbmNlLAovLy8gdGhlIGhpZXJhcmNoeSBpbiAncmVzb2x1dGlvbl90eXBlcy5kYXJ0JyBoYXMgcHJvcGVydGllcyBzdXBwb3J0aW5nIGxhenkKLy8vIGNvbXB1dGF0aW9uIChsaWtlIGNvbXB1dGVBbGlhcykgYW5kIGRpc3RpbmN0aW9ucyBiZXR3ZWVuICdGb28nIGFuZAovLy8gJ0ZvbzxkeW5hbWljPicsIGZlYXR1cmVzIHRoYXQgYXJlIG5vdCBuZWVkZWQgZm9yIGNvZGUgZ2VuZXJhdGlvbiBhbmQgbm90Ci8vLyBzdXBwb3J0ZWQgZnJvbSBrZXJuZWwuCi8vLwovLy8gQ3VycmVudCBvbmx5ICdyZXNvbHV0aW9uX3R5cGVzLmRhcnQnIGltcGxlbWVudCB0aGlzIGhpZXJhcmNoeSBidXQgd2hlbiB0aGUKLy8vIGNvbXBpbGVyIG1vdmVzIHRvIHVzZSBbRW50aXR5XSBpbnN0ZWFkIG9mIFtFbGVtZW50XSB0aGlzIGhpZXJhcmNoeSBjYW4gYmUKLy8vIGltcGxlbWVudGVkIGRpcmVjdGx5IGJ1dCBvdGhlciBlbnRpdHkgc3lzdGVtcywgZm9yIGluc3RhbmNlIGJhc2VkIGRpcmVjdGx5Ci8vLyBvbiBrZXJuZWwgaXIgd2l0aG91dCB0aGUgbmVlZCBmb3IgW0VsZW1lbnRdLgoKYWJzdHJhY3QgY2xhc3MgRGFydFR5cGUgewogIGNvbnN0IERhcnRUeXBlKCk7CgogIC8vLyBSZXR1cm5zIHRoZSB1bmFsaWFzZWQgdHlwZSBvZiB0aGlzIHR5cGUuCiAgLy8vCiAgLy8vIFRoZSB1bmFsaWFzZWQgdHlwZSBvZiBhIHR5cGVkZWYnZCB0eXBlIGlzIHRoZSB1bmFsaWFzZWQgdHlwZSB0byB3aGljaCBpdHMKICAvLy8gbmFtZSBpcyBib3VuZC4gVGhlIHVuYWxpYXNlZCB2ZXJzaW9uIG9mIGFueSBvdGhlciB0eXBlIGlzIHRoZSB0eXBlIGl0c2VsZi4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGUsIHRoZSB1bmFsaWFzZWQgdHlwZSBvZiBgdHlwZWRlZiBBIEZ1bmM8QSxCPihCIGIpYCBpcyB0aGUKICAvLy8gZnVuY3Rpb24gdHlwZSBgKEIpIC0+IEFgIGFuZCB0aGUgdW5hbGlhc2VkIHR5cGUgb2YgYEZ1bmM8aW50LFN0cmluZz5gCiAgLy8vIGlzIHRoZSBmdW5jdGlvbiB0eXBlIGAoU3RyaW5nKSAtPiBpbnRgLgogIERhcnRUeXBlIGdldCB1bmFsaWFzZWQgPT4gdGhpczsKCiAgLy8vIElzIGB0cnVlYCBpZiB0aGlzIHR5cGUgaGFzIG5vIG5vbi1keW5hbWljIHR5cGUgYXJndW1lbnRzLgogIGJvb2wgZ2V0IHRyZWF0QXNSYXcgPT4gdHJ1ZTsKCiAgLy8vIElzIGB0cnVlYCBpZiB0aGlzIHR5cGUgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgdGhlIGR5bmFtaWMgdHlwZS4KICBib29sIGdldCB0cmVhdEFzRHluYW1pYyA9PiBmYWxzZTsKCiAgLy8vIElzIGB0cnVlYCBpZiB0aGlzIHR5cGUgaXMgdGhlIGR5bmFtaWMgdHlwZS4KICBib29sIGdldCBpc0R5bmFtaWMgPT4gZmFsc2U7CgogIC8vLyBJcyBgdHJ1ZWAgaWYgdGhpcyB0eXBlIGlzIHRoZSBhbnkgdHlwZS4KICBib29sIGdldCBpc0FueSA9PiBmYWxzZTsKCiAgLy8vIElzIGB0cnVlYCBpZiB0aGlzIHR5cGUgaXMgdGhlIHZvaWQgdHlwZS4KICBib29sIGdldCBpc1ZvaWQgPT4gZmFsc2U7CgogIC8vLyBJcyBgdHJ1ZWAgaWYgdGhpcyB0eXBlIGlzIGFuIGludGVyZmFjZSB0eXBlLgogIGJvb2wgZ2V0IGlzSW50ZXJmYWNlVHlwZSA9PiBmYWxzZTsKCiAgLy8vIElzIGB0cnVlYCBpZiB0aGlzIHR5cGUgaXMgYSB0eXBlZGVmLgogIGJvb2wgZ2V0IGlzVHlwZWRlZiA9PiBmYWxzZTsKCiAgLy8vIElzIGB0cnVlYCBpZiB0aGlzIHR5cGUgaXMgYSBmdW5jdGlvbiB0eXBlLgogIGJvb2wgZ2V0IGlzRnVuY3Rpb25UeXBlID0+IGZhbHNlOwoKICAvLy8gSXMgYHRydWVgIGlmIHRoaXMgdHlwZSBpcyBhIHR5cGUgdmFyaWFibGUuCiAgYm9vbCBnZXQgaXNUeXBlVmFyaWFibGUgPT4gZmFsc2U7CgogIC8vLyBJcyBgdHJ1ZWAgaWYgdGhpcyB0eXBlIGlzIGEgdHlwZSB2YXJpYWJsZSBkZWNsYXJlZCBvbiBhIGZ1bmN0aW9uIHR5cGUKICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGBUYCBpbgogIC8vLyAgICAgdm9pZCBGdW5jdGlvbjxUPihUIHQpCiAgYm9vbCBnZXQgaXNGdW5jdGlvblR5cGVWYXJpYWJsZSA9PiBmYWxzZTsKCiAgLy8vIElzIGB0cnVlYCBpZiB0aGlzIHR5cGUgaXMgYSBgRnV0dXJlT3JgIHR5cGUuCiAgYm9vbCBnZXQgaXNGdXR1cmVPciA9PiBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdGhpcyB0eXBlIGNvbnRhaW5zIGEgdHlwZSB2YXJpYWJsZS4KICBib29sIGdldCBjb250YWluc1R5cGVWYXJpYWJsZXMgPT4gZmFsc2U7CgogIC8vLyBXaGV0aGVyIHRoaXMgdHlwZSBjb250YWlucyBhIGZyZWUgY2xhc3MgdHlwZSB2YXJpYWJsZSBvciBmdW5jdGlvbiB0eXBlCiAgLy8vIHZhcmlhYmxlLgogIC8vIFRPRE8oc3JhKTogUmV2aWV3IHVzZXMgb2YgW2NvbnRhaW5zVHlwZVZhcmlhYmxlc10gZm9yIHVwZGF0ZSB3aXRoCiAgLy8gW2NvbnRhaW5zRnJlZVR5cGVWYXJpYWJsZXNdLgogIGJvb2wgZ2V0IGNvbnRhaW5zRnJlZVR5cGVWYXJpYWJsZXMgPT4KICAgICAgX0NvbnRhaW5zRnJlZVR5cGVWYXJpYWJsZXNWaXNpdG9yKCkucnVuKHRoaXMpOwoKICAvLy8gSXMgYHRydWVgIGlmIHRoaXMgdHlwZSBpcyB0aGUgJ09iamVjdCcgdHlwZSBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIGJvb2wgZ2V0IGlzT2JqZWN0ID0+IGZhbHNlOwoKICAvLy8gQXBwbGllcyBbZl0gdG8gZWFjaCBvY2N1cnJlbmNlIG9mIGEgW1R5cGVWYXJpYWJsZVR5cGVdIHdpdGhpbiB0aGlzCiAgLy8vIHR5cGUuIFRoaXMgZXhjbHVkZXMgZnVuY3Rpb24gdHlwZSB2YXJpYWJsZXMsIHdoZXRoZXIgZnJlZSBvciBib3VuZC4KICB2b2lkIGZvckVhY2hUeXBlVmFyaWFibGUoZihUeXBlVmFyaWFibGVUeXBlIHZhcmlhYmxlKSkge30KCiAgLy8vIFBlcmZvcm1zIHRoZSBzdWJzdGl0dXRpb24gYFthcmd1bWVudHNbaV0vcGFyYW1ldGVyc1tpXV10aGlzYC4KICAvLy8KICAvLy8gVGhlIG5vdGF0aW9uIGlzIGtub3duIGZyb20gdGhpcyBsYW1iZGEgY2FsY3VsdXMgcnVsZToKICAvLy8KICAvLy8gICAgIChsYW1iZGEgeC5lMCllMSAtPiBbZTEveF1lMC4KICAvLy8KICAvLy8gU2VlIFtUeXBlVmFyaWFibGVUeXBlXSBmb3IgYSBtb3RpdmF0aW9uIGZvciB0aGlzIG1ldGhvZC4KICAvLy8KICAvLy8gSW52YXJpYW50OiBUaGVyZSBtdXN0IGJlIHRoZSBzYW1lIG51bWJlciBvZiBbYXJndW1lbnRzXSBhbmQgW3BhcmFtZXRlcnNdLgogIERhcnRUeXBlIHN1YnN0KExpc3Q8RGFydFR5cGU+IGFyZ3VtZW50cywgTGlzdDxEYXJ0VHlwZT4gcGFyYW1ldGVycykgewogICAgYXNzZXJ0KGFyZ3VtZW50cy5sZW5ndGggPT0gcGFyYW1ldGVycy5sZW5ndGgpOwogICAgaWYgKHBhcmFtZXRlcnMuaXNFbXB0eSkgcmV0dXJuIHRoaXM7CiAgICByZXR1cm4gU2ltcGxlRGFydFR5cGVTdWJzdGl0dXRpb25WaXNpdG9yKGFyZ3VtZW50cywgcGFyYW1ldGVycykKICAgICAgICAuc3Vic3RpdHV0ZSh0aGlzKTsKICB9CgogIC8vLyBDYWxscyB0aGUgdmlzaXQgbWV0aG9kIG9uIFt2aXNpdG9yXSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgdHlwZS4KICBSIGFjY2VwdDxSLCBBPihEYXJ0VHlwZVZpc2l0b3I8UiwgQT4gdmlzaXRvciwgQSBhcmd1bWVudCk7CgogIGJvb2wgX2VxdWFscyhEYXJ0VHlwZSBvdGhlciwgX0Fzc3VtcHRpb25zIGFzc3VtcHRpb25zKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gX0RhcnRUeXBlVG9TdHJpbmdWaXNpdG9yKCkucnVuKHRoaXMpOwp9CgovLy8gUGFpcnMgb2YgW0Z1bmN0aW9uVHlwZVZhcmlhYmxlXXMgdGhhdCBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYmUKLy8vIGVxdWl2YWxlbnQuCi8vLwovLy8gVGhpcyBpcyB1c2VkIHRvIGNvbXB1dGUgdGhlIGVxdWl2YWxlbmNlIHJlbGF0aW9uIG9uIHR5cGVzIGNvaW5kdWN0aXZlbHkuCmNsYXNzIF9Bc3N1bXB0aW9ucyB7CiAgTWFwPEZ1bmN0aW9uVHlwZVZhcmlhYmxlLCBTZXQ8RnVuY3Rpb25UeXBlVmFyaWFibGU+PiBfYXNzdW1wdGlvbk1hcCA9CiAgICAgIDxGdW5jdGlvblR5cGVWYXJpYWJsZSwgU2V0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPj57fTsKCiAgdm9pZCBfYWRkQXNzdW1wdGlvbihGdW5jdGlvblR5cGVWYXJpYWJsZSBhLCBGdW5jdGlvblR5cGVWYXJpYWJsZSBiKSB7CiAgICBfYXNzdW1wdGlvbk1hcAogICAgICAgIC5wdXRJZkFic2VudChhLCAoKSA9PiBuZXcgU2V0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPi5pZGVudGl0eSgpKQogICAgICAgIC5hZGQoYik7CiAgfQoKICAvLy8gQXNzdW1lIHRoYXQgW2FdIGFuZCBbYl0gYXJlIGVxdWl2YWxlbnQuCiAgdm9pZCBhc3N1bWUoRnVuY3Rpb25UeXBlVmFyaWFibGUgYSwgRnVuY3Rpb25UeXBlVmFyaWFibGUgYikgewogICAgX2FkZEFzc3VtcHRpb24oYSwgYik7CiAgICBfYWRkQXNzdW1wdGlvbihiLCBhKTsKICB9CgogIHZvaWQgX3JlbW92ZUFzc3VtcHRpb24oRnVuY3Rpb25UeXBlVmFyaWFibGUgYSwgRnVuY3Rpb25UeXBlVmFyaWFibGUgYikgewogICAgU2V0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBzZXQgPSBfYXNzdW1wdGlvbk1hcFthXTsKICAgIGlmIChzZXQgIT0gbnVsbCkgewogICAgICBzZXQucmVtb3ZlKGIpOwogICAgICBpZiAoc2V0LmlzRW1wdHkpIHsKICAgICAgICBfYXNzdW1wdGlvbk1hcC5yZW1vdmUoYSk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBSZW1vdmUgdGhlIGFzc3VtcHRpb24gdGhhdCBbYV0gYW5kIFtiXSBhcmUgZXF1aXZhbGVudC4KICB2b2lkIGZvcmdldChGdW5jdGlvblR5cGVWYXJpYWJsZSBhLCBGdW5jdGlvblR5cGVWYXJpYWJsZSBiKSB7CiAgICBfcmVtb3ZlQXNzdW1wdGlvbihhLCBiKTsKICAgIF9yZW1vdmVBc3N1bXB0aW9uKGIsIGEpOwogIH0KCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFthXSBhbmQgW2JdIGFyZSBhc3N1bWVkIHRvIGJlIGVxdWl2YWxlbnQuCiAgYm9vbCBpc0Fzc3VtZWQoRnVuY3Rpb25UeXBlVmFyaWFibGUgYSwgRnVuY3Rpb25UeXBlVmFyaWFibGUgYikgewogICAgcmV0dXJuIF9hc3N1bXB0aW9uTWFwW2FdPy5jb250YWlucyhiKSA/PyBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdfQXNzdW1wdGlvbnMoJyk7CiAgICBTdHJpbmcgY29tbWEgPSAnJzsKICAgIF9hc3N1bXB0aW9uTWFwCiAgICAgICAgLmZvckVhY2goKEZ1bmN0aW9uVHlwZVZhcmlhYmxlIGEsIFNldDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gc2V0KSB7CiAgICAgIHNiLndyaXRlKCckY29tbWEkYSAoJHtpZGVudGl0eUhhc2hDb2RlKGEpfSktPicKICAgICAgICAgICd7JHtzZXQubWFwKChiKSA9PiAnJGIgKCR7aWRlbnRpdHlIYXNoQ29kZShiKX0pJykuam9pbignLCcpfX0nKTsKICAgICAgY29tbWEgPSAnLCc7CiAgICB9KTsKICAgIHNiLndyaXRlKCcpJyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCmNsYXNzIEludGVyZmFjZVR5cGUgZXh0ZW5kcyBEYXJ0VHlwZSB7CiAgZmluYWwgQ2xhc3NFbnRpdHkgZWxlbWVudDsKICBmaW5hbCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzOwoKICBJbnRlcmZhY2VUeXBlKHRoaXMuZWxlbWVudCwgdGhpcy50eXBlQXJndW1lbnRzKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNJbnRlcmZhY2VUeXBlID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzT2JqZWN0IHsKICAgIHJldHVybiBlbGVtZW50Lm5hbWUgPT0gJ09iamVjdCcgJiYKICAgICAgICBlbGVtZW50LmxpYnJhcnkuY2Fub25pY2FsVXJpID09IFVyaXMuZGFydF9jb3JlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgY29udGFpbnNUeXBlVmFyaWFibGVzID0+CiAgICAgIHR5cGVBcmd1bWVudHMuYW55KCh0eXBlKSA9PiB0eXBlLmNvbnRhaW5zVHlwZVZhcmlhYmxlcyk7CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaFR5cGVWYXJpYWJsZShmKFR5cGVWYXJpYWJsZVR5cGUgdmFyaWFibGUpKSB7CiAgICB0eXBlQXJndW1lbnRzLmZvckVhY2goKHR5cGUpID0+IHR5cGUuZm9yRWFjaFR5cGVWYXJpYWJsZShmKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCB0cmVhdEFzUmF3IHsKICAgIGZvciAoRGFydFR5cGUgdHlwZSBpbiB0eXBlQXJndW1lbnRzKSB7CiAgICAgIGlmICghdHlwZS50cmVhdEFzRHluYW1pYykgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBSIGFjY2VwdDxSLCBBPihEYXJ0VHlwZVZpc2l0b3I8UiwgQT4gdmlzaXRvciwgQSBhcmd1bWVudCkgPT4KICAgICAgdmlzaXRvci52aXNpdEludGVyZmFjZVR5cGUodGhpcywgYXJndW1lbnQpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIGludCBoYXNoID0gZWxlbWVudC5oYXNoQ29kZTsKICAgIGZvciAoRGFydFR5cGUgYXJndW1lbnQgaW4gdHlwZUFyZ3VtZW50cykgewogICAgICBpbnQgYXJndW1lbnRIYXNoID0gYXJndW1lbnQgIT0gbnVsbCA/IGFyZ3VtZW50Lmhhc2hDb2RlIDogMDsKICAgICAgaGFzaCA9IDE3ICogaGFzaCArIDMgKiBhcmd1bWVudEhhc2g7CiAgICB9CiAgICByZXR1cm4gaGFzaDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgSW50ZXJmYWNlVHlwZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIF9lcXVhbHNJbnRlcm5hbChvdGhlciwgbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoRGFydFR5cGUgb3RoZXIsIF9Bc3N1bXB0aW9ucyBhc3N1bXB0aW9ucykgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBJbnRlcmZhY2VUeXBlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX2VxdWFsc0ludGVybmFsKG90aGVyLCBhc3N1bXB0aW9ucyk7CiAgfQoKICBib29sIF9lcXVhbHNJbnRlcm5hbChJbnRlcmZhY2VUeXBlIG90aGVyLCBfQXNzdW1wdGlvbnMgYXNzdW1wdGlvbnMpIHsKICAgIHJldHVybiBpZGVudGljYWwoZWxlbWVudCwgb3RoZXIuZWxlbWVudCkgJiYKICAgICAgICBfZXF1YWxUeXBlcyh0eXBlQXJndW1lbnRzLCBvdGhlci50eXBlQXJndW1lbnRzLCBhc3N1bXB0aW9ucyk7CiAgfQp9CgpjbGFzcyBUeXBlZGVmVHlwZSBleHRlbmRzIERhcnRUeXBlIHsKICBmaW5hbCBUeXBlZGVmRW50aXR5IGVsZW1lbnQ7CiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50czsKICBAb3ZlcnJpZGUKICBmaW5hbCBGdW5jdGlvblR5cGUgdW5hbGlhc2VkOwoKICBUeXBlZGVmVHlwZSh0aGlzLmVsZW1lbnQsIHRoaXMudHlwZUFyZ3VtZW50cywgdGhpcy51bmFsaWFzZWQpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1R5cGVkZWYgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgY29udGFpbnNUeXBlVmFyaWFibGVzID0+CiAgICAgIHR5cGVBcmd1bWVudHMuYW55KCh0eXBlKSA9PiB0eXBlLmNvbnRhaW5zVHlwZVZhcmlhYmxlcyk7CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaFR5cGVWYXJpYWJsZShmKFR5cGVWYXJpYWJsZVR5cGUgdmFyaWFibGUpKSB7CiAgICB0eXBlQXJndW1lbnRzLmZvckVhY2goKHR5cGUpID0+IHR5cGUuZm9yRWFjaFR5cGVWYXJpYWJsZShmKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCB0cmVhdEFzUmF3IHsKICAgIGZvciAoRGFydFR5cGUgdHlwZSBpbiB0eXBlQXJndW1lbnRzKSB7CiAgICAgIGlmICghdHlwZS50cmVhdEFzRHluYW1pYykgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBSIGFjY2VwdDxSLCBBPihEYXJ0VHlwZVZpc2l0b3I8UiwgQT4gdmlzaXRvciwgQSBhcmd1bWVudCkgPT4KICAgICAgdmlzaXRvci52aXNpdFR5cGVkZWZUeXBlKHRoaXMsIGFyZ3VtZW50KTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICBpbnQgaGFzaCA9IGVsZW1lbnQuaGFzaENvZGU7CiAgICBmb3IgKERhcnRUeXBlIGFyZ3VtZW50IGluIHR5cGVBcmd1bWVudHMpIHsKICAgICAgaW50IGFyZ3VtZW50SGFzaCA9IGFyZ3VtZW50ICE9IG51bGwgPyBhcmd1bWVudC5oYXNoQ29kZSA6IDA7CiAgICAgIGhhc2ggPSAxNyAqIGhhc2ggKyAzICogYXJndW1lbnRIYXNoOwogICAgfQogICAgcmV0dXJuIGhhc2g7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIFR5cGVkZWZUeXBlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX2VxdWFsc0ludGVybmFsKG90aGVyLCBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhEYXJ0VHlwZSBvdGhlciwgX0Fzc3VtcHRpb25zIGFzc3VtcHRpb25zKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIFR5cGVkZWZUeXBlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX2VxdWFsc0ludGVybmFsKG90aGVyLCBhc3N1bXB0aW9ucyk7CiAgfQoKICBib29sIF9lcXVhbHNJbnRlcm5hbChUeXBlZGVmVHlwZSBvdGhlciwgX0Fzc3VtcHRpb25zIGFzc3VtcHRpb25zKSB7CiAgICByZXR1cm4gaWRlbnRpY2FsKGVsZW1lbnQsIG90aGVyLmVsZW1lbnQpICYmCiAgICAgICAgX2VxdWFsVHlwZXModHlwZUFyZ3VtZW50cywgb3RoZXIudHlwZUFyZ3VtZW50cywgYXNzdW1wdGlvbnMpOwogIH0KfQoKY2xhc3MgVHlwZVZhcmlhYmxlVHlwZSBleHRlbmRzIERhcnRUeXBlIHsKICBmaW5hbCBUeXBlVmFyaWFibGVFbnRpdHkgZWxlbWVudDsKCiAgVHlwZVZhcmlhYmxlVHlwZSh0aGlzLmVsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1R5cGVWYXJpYWJsZSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBjb250YWluc1R5cGVWYXJpYWJsZXMgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoVHlwZVZhcmlhYmxlKGYoVHlwZVZhcmlhYmxlVHlwZSB2YXJpYWJsZSkpIHsKICAgIGYodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBSIGFjY2VwdDxSLCBBPihEYXJ0VHlwZVZpc2l0b3I8UiwgQT4gdmlzaXRvciwgQSBhcmd1bWVudCkgPT4KICAgICAgdmlzaXRvci52aXNpdFR5cGVWYXJpYWJsZVR5cGUodGhpcywgYXJndW1lbnQpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IDE3ICogZWxlbWVudC5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBUeXBlVmFyaWFibGVUeXBlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gaWRlbnRpY2FsKG90aGVyLmVsZW1lbnQsIGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKERhcnRUeXBlIG90aGVyLCBfQXNzdW1wdGlvbnMgYXNzdW1wdGlvbnMpIHsKICAgIGlmIChvdGhlciBpcyBUeXBlVmFyaWFibGVUeXBlKSB7CiAgICAgIHJldHVybiBpZGVudGljYWwob3RoZXIuZWxlbWVudCwgZWxlbWVudCk7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CgovLy8gQSB0eXBlIHZhcmlhYmxlIGRlY2xhcmVkIG9uIGEgZnVuY3Rpb24gdHlwZS4KLy8vCi8vLyBGb3IgaW5zdGFuY2UgYFRgIGluCi8vLyAgICAgdm9pZCBGdW5jdGlvbjxUPihUIHQpCi8vLwovLy8gU3VjaCBhIHR5cGUgdmFyaWFibGUgaXMgZGlmZmVyZW50IGZyb20gYSBbVHlwZVZhcmlhYmxlVHlwZV0gYmVjYXVzZSBpdAovLy8gZG9lc24ndCBoYXZlIGEgdW5pcXVlIGlkZW50aXR5OyBpcyBpcyBlcXVhbCB0byBhbnkgb3RoZXIKLy8vIFtGdW5jdGlvblR5cGVWYXJpYWJsZV0gdXNlZCBzaW1pbGFybHkgaW4gYW5vdGhlciBzdHJ1Y3R1cmFsbHkgZXF1aXZhbGVudAovLy8gZnVuY3Rpb24gdHlwZS4KY2xhc3MgRnVuY3Rpb25UeXBlVmFyaWFibGUgZXh0ZW5kcyBEYXJ0VHlwZSB7CiAgLy8vIFRoZSBpbmRleCBvZiB0aGlzIHR5cGUgd2l0aGluIHRoZSB0eXBlIHZhcmlhYmxlcyBvZiB0aGUgZGVjbGFyaW5nIGZ1bmN0aW9uCiAgLy8vIHR5cGUuCiAgZmluYWwgaW50IGluZGV4OwoKICAvLy8gVGhlIGJvdW5kIG9mIHRoaXMgZnVuY3Rpb24gdHlwZSB2YXJpYWJsZS4KICBEYXJ0VHlwZSBfYm91bmQ7CgogIEZ1bmN0aW9uVHlwZVZhcmlhYmxlKHRoaXMuaW5kZXgpOwoKICBEYXJ0VHlwZSBnZXQgYm91bmQgewogICAgYXNzZXJ0KF9ib3VuZCAhPSBudWxsLCAiQm91bmQgaGFzIG5vdCBiZWVuIHNldC4iKTsKICAgIHJldHVybiBfYm91bmQ7CiAgfQoKICB2b2lkIHNldCBib3VuZChEYXJ0VHlwZSB2YWx1ZSkgewogICAgYXNzZXJ0KF9ib3VuZCA9PSBudWxsLCAiQm91bmQgaGFzIGFscmVhZHkgYmVlbiBzZXQuIik7CiAgICBfYm91bmQgPSB2YWx1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRnVuY3Rpb25UeXBlVmFyaWFibGUgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBpbmRleC5oYXNoQ29kZSAqIDE5OwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIEZ1bmN0aW9uVHlwZVZhcmlhYmxlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoRGFydFR5cGUgb3RoZXIsIF9Bc3N1bXB0aW9ucyBhc3N1bXB0aW9ucykgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBGdW5jdGlvblR5cGVWYXJpYWJsZSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGFzc3VtcHRpb25zICE9IG51bGwpIHJldHVybiBhc3N1bXB0aW9ucy5pc0Fzc3VtZWQodGhpcywgb3RoZXIpOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgUiBhY2NlcHQ8UiwgQT4oRGFydFR5cGVWaXNpdG9yPFIsIEE+IHZpc2l0b3IsIEEgYXJndW1lbnQpID0+CiAgICAgIHZpc2l0b3IudmlzaXRGdW5jdGlvblR5cGVWYXJpYWJsZSh0aGlzLCBhcmd1bWVudCk7Cn0KCmNsYXNzIFZvaWRUeXBlIGV4dGVuZHMgRGFydFR5cGUgewogIGNvbnN0IFZvaWRUeXBlKCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzVm9pZCA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBSIGFjY2VwdDxSLCBBPihEYXJ0VHlwZVZpc2l0b3I8UiwgQT4gdmlzaXRvciwgQSBhcmd1bWVudCkgPT4KICAgICAgdmlzaXRvci52aXNpdFZvaWRUeXBlKHRoaXMsIGFyZ3VtZW50KTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiA2MDA3OwoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoRGFydFR5cGUgb3RoZXIsIF9Bc3N1bXB0aW9ucyBhc3N1bXB0aW9ucykgewogICAgcmV0dXJuIGlkZW50aWNhbCh0aGlzLCBvdGhlcik7CiAgfQp9CgpjbGFzcyBEeW5hbWljVHlwZSBleHRlbmRzIERhcnRUeXBlIHsKICBjb25zdCBEeW5hbWljVHlwZSgpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0R5bmFtaWMgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgdHJlYXRBc0R5bmFtaWMgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgUiBhY2NlcHQ8UiwgQT4oRGFydFR5cGVWaXNpdG9yPFIsIEE+IHZpc2l0b3IsIEEgYXJndW1lbnQpID0+CiAgICAgIHZpc2l0b3IudmlzaXREeW5hbWljVHlwZSh0aGlzLCBhcmd1bWVudCk7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gOTE7CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhEYXJ0VHlwZSBvdGhlciwgX0Fzc3VtcHRpb25zIGFzc3VtcHRpb25zKSB7CiAgICByZXR1cm4gaWRlbnRpY2FsKHRoaXMsIG90aGVyKTsKICB9Cn0KCi8vLyBSZXByZXNlbnRzIGEgdHlwZSB3aGljaCBpcyBzaW11bHRhbmVvdXNseSB0b3AgYW5kIGJvdHRvbS4KLy8vCi8vLyBUaGlzIGlzIG5vdCBhIHN0YW5kYXJkIERhcnQgdHlwZSwgYnV0IGFuIGV4dGVuc2lvbiBvZiB0aGUgc3RhbmRhcmQgRGFydCB0eXBlCi8vLyBzeXN0ZW0gZm9yIGRhcnQyanMuIEJlY2F1c2UgJ2FueScgaXMgYm90aCB0b3AgYW5kIGJvdHRvbSwgaXQgaXMgdXNlZnVsIGZvcgovLy8gZW5zdXJpbmcgdGhhdCB0eXBlIGNoZWNrcyBzdWNjZWVkIHNvIHRoYXQgd2UgY2FuIGF2b2lkIHNwdXJpb3VzIGZhaWx1cmVzCi8vLyB3aGVuIG91ciBhbmFseXNpcyBpcyBpbmNvcnJlY3Qgb3IgaW5jb21wbGV0ZS4KLy8vCi8vLyBVc2UgY2FzZXMgaW5jbHVkZToKLy8vICogUmVwcmVzZW50aW5nIGluc2NydXRhYmxlIEpTLWludGVyb3AgdHlwZXMuCi8vLyAqIFJlcHJlc2VudGluZyB0eXBlcyBhcHBlYXJpbmcgYXMgZ2VuZXJpYyBtZXRob2QgYm91bmRzIHdoaWNoIGNvbnRhaW4gdHlwZQovLy8gdmFyaWFibGVzLiAoU2VlIGlzc3VlIDMzNDIyLikKY2xhc3MgQW55VHlwZSBleHRlbmRzIERhcnRUeXBlIHsKICBjb25zdCBBbnlUeXBlKCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQW55ID0+IHRydWU7CgogIEBvdmVycmlkZQogIFIgYWNjZXB0PFIsIEE+KERhcnRUeXBlVmlzaXRvcjxSLCBBPiB2aXNpdG9yLCBBIGFyZ3VtZW50KSA9PgogICAgICB2aXNpdG9yLnZpc2l0QW55VHlwZSh0aGlzLCBhcmd1bWVudCk7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gOTU7CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhEYXJ0VHlwZSBvdGhlciwgX0Fzc3VtcHRpb25zIGFzc3VtcHRpb25zKSA9PgogICAgICBpZGVudGljYWwodGhpcywgb3RoZXIpOwp9CgpjbGFzcyBGdW5jdGlvblR5cGUgZXh0ZW5kcyBEYXJ0VHlwZSB7CiAgZmluYWwgRGFydFR5cGUgcmV0dXJuVHlwZTsKICBmaW5hbCBMaXN0PERhcnRUeXBlPiBwYXJhbWV0ZXJUeXBlczsKICBmaW5hbCBMaXN0PERhcnRUeXBlPiBvcHRpb25hbFBhcmFtZXRlclR5cGVzOwoKICAvLy8gVGhlIG5hbWVzIG9mIHRoZSBuYW1lZCBwYXJhbWV0ZXJzIG9yZGVyZWQgbGV4aWNvZ3JhcGhpY2FsbHkuCiAgZmluYWwgTGlzdDxTdHJpbmc+IG5hbWVkUGFyYW1ldGVyczsKCiAgLy8vIFRoZSB0eXBlcyBvZiB0aGUgbmFtZWQgcGFyYW1ldGVycyBpbiB0aGUgb3JkZXIgY29ycmVzcG9uZGluZyB0byB0aGUKICAvLy8gW25hbWVkUGFyYW1ldGVyc10uCiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gbmFtZWRQYXJhbWV0ZXJUeXBlczsKCiAgZmluYWwgTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gdHlwZVZhcmlhYmxlczsKCiAgRnVuY3Rpb25UeXBlKAogICAgICB0aGlzLnJldHVyblR5cGUsCiAgICAgIHRoaXMucGFyYW1ldGVyVHlwZXMsCiAgICAgIHRoaXMub3B0aW9uYWxQYXJhbWV0ZXJUeXBlcywKICAgICAgdGhpcy5uYW1lZFBhcmFtZXRlcnMsCiAgICAgIHRoaXMubmFtZWRQYXJhbWV0ZXJUeXBlcywKICAgICAgdGhpcy50eXBlVmFyaWFibGVzKSB7CiAgICBhc3NlcnQocmV0dXJuVHlwZSAhPSBudWxsLCAiSW52YWxpZCByZXR1cm4gdHlwZSBpbiAkdGhpcy4iKTsKICAgIGFzc2VydCghcGFyYW1ldGVyVHlwZXMuY29udGFpbnMobnVsbCksICJJbnZhbGlkIHBhcmFtZXRlciB0eXBlcyBpbiAkdGhpcy4iKTsKICAgIGFzc2VydCghb3B0aW9uYWxQYXJhbWV0ZXJUeXBlcy5jb250YWlucyhudWxsKSwKICAgICAgICAiSW52YWxpZCBvcHRpb25hbCBwYXJhbWV0ZXIgdHlwZXMgaW4gJHRoaXMuIik7CiAgICBhc3NlcnQoCiAgICAgICAgIW5hbWVkUGFyYW1ldGVycy5jb250YWlucyhudWxsKSwgIkludmFsaWQgbmFtZWQgcGFyYW1ldGVycyBpbiAkdGhpcy4iKTsKICAgIGFzc2VydCghbmFtZWRQYXJhbWV0ZXJUeXBlcy5jb250YWlucyhudWxsKSwKICAgICAgICAiSW52YWxpZCBuYW1lZCBwYXJhbWV0ZXIgdHlwZXMgaW4gJHRoaXMuIik7CiAgICBhc3NlcnQoIXR5cGVWYXJpYWJsZXMuY29udGFpbnMobnVsbCksICJJbnZhbGlkIHR5cGUgdmFyaWFibGVzIGluICR0aGlzLiIpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgY29udGFpbnNUeXBlVmFyaWFibGVzIHsKICAgIHJldHVybiB0eXBlVmFyaWFibGVzLmFueSgodHlwZSkgPT4gdHlwZS5ib3VuZC5jb250YWluc1R5cGVWYXJpYWJsZXMpIHx8CiAgICAgICAgcmV0dXJuVHlwZS5jb250YWluc1R5cGVWYXJpYWJsZXMgfHwKICAgICAgICBwYXJhbWV0ZXJUeXBlcy5hbnkoKHR5cGUpID0+IHR5cGUuY29udGFpbnNUeXBlVmFyaWFibGVzKSB8fAogICAgICAgIG9wdGlvbmFsUGFyYW1ldGVyVHlwZXMuYW55KCh0eXBlKSA9PiB0eXBlLmNvbnRhaW5zVHlwZVZhcmlhYmxlcykgfHwKICAgICAgICBuYW1lZFBhcmFtZXRlclR5cGVzLmFueSgodHlwZSkgPT4gdHlwZS5jb250YWluc1R5cGVWYXJpYWJsZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoVHlwZVZhcmlhYmxlKGYoVHlwZVZhcmlhYmxlVHlwZSB2YXJpYWJsZSkpIHsKICAgIHR5cGVWYXJpYWJsZXMuZm9yRWFjaCgodHlwZSkgPT4gdHlwZS5ib3VuZC5mb3JFYWNoVHlwZVZhcmlhYmxlKGYpKTsKICAgIHJldHVyblR5cGUuZm9yRWFjaFR5cGVWYXJpYWJsZShmKTsKICAgIHBhcmFtZXRlclR5cGVzLmZvckVhY2goKHR5cGUpID0+IHR5cGUuZm9yRWFjaFR5cGVWYXJpYWJsZShmKSk7CiAgICBvcHRpb25hbFBhcmFtZXRlclR5cGVzLmZvckVhY2goKHR5cGUpID0+IHR5cGUuZm9yRWFjaFR5cGVWYXJpYWJsZShmKSk7CiAgICBuYW1lZFBhcmFtZXRlclR5cGVzLmZvckVhY2goKHR5cGUpID0+IHR5cGUuZm9yRWFjaFR5cGVWYXJpYWJsZShmKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0Z1bmN0aW9uVHlwZSA9PiB0cnVlOwoKICBGdW5jdGlvblR5cGUgaW5zdGFudGlhdGUoTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzKSB7CiAgICByZXR1cm4gc3Vic3QoYXJndW1lbnRzLCB0eXBlVmFyaWFibGVzKTsKICB9CgogIEBvdmVycmlkZQogIFIgYWNjZXB0PFIsIEE+KERhcnRUeXBlVmlzaXRvcjxSLCBBPiB2aXNpdG9yLCBBIGFyZ3VtZW50KSA9PgogICAgICB2aXNpdG9yLnZpc2l0RnVuY3Rpb25UeXBlKHRoaXMsIGFyZ3VtZW50KTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICBpbnQgaGFzaCA9IDMgKiByZXR1cm5UeXBlLmhhc2hDb2RlOwogICAgZm9yIChEYXJ0VHlwZSBwYXJhbWV0ZXIgaW4gcGFyYW1ldGVyVHlwZXMpIHsKICAgICAgaGFzaCA9IDE3ICogaGFzaCArIDUgKiBwYXJhbWV0ZXIuaGFzaENvZGU7CiAgICB9CiAgICBmb3IgKERhcnRUeXBlIHBhcmFtZXRlciBpbiBvcHRpb25hbFBhcmFtZXRlclR5cGVzKSB7CiAgICAgIGhhc2ggPSAxOSAqIGhhc2ggKyA3ICogcGFyYW1ldGVyLmhhc2hDb2RlOwogICAgfQogICAgZm9yIChTdHJpbmcgbmFtZSBpbiBuYW1lZFBhcmFtZXRlcnMpIHsKICAgICAgaGFzaCA9IDIzICogaGFzaCArIDExICogbmFtZS5oYXNoQ29kZTsKICAgIH0KICAgIGZvciAoRGFydFR5cGUgcGFyYW1ldGVyIGluIG5hbWVkUGFyYW1ldGVyVHlwZXMpIHsKICAgICAgaGFzaCA9IDI5ICogaGFzaCArIDEzICogcGFyYW1ldGVyLmhhc2hDb2RlOwogICAgfQogICAgcmV0dXJuIGhhc2g7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIEZ1bmN0aW9uVHlwZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIF9lcXVhbHNJbnRlcm5hbChvdGhlciwgbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoRGFydFR5cGUgb3RoZXIsIF9Bc3N1bXB0aW9ucyBhc3N1bXB0aW9ucykgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBGdW5jdGlvblR5cGUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBfZXF1YWxzSW50ZXJuYWwob3RoZXIsIGFzc3VtcHRpb25zKTsKICB9CgogIGJvb2wgX2VxdWFsc0ludGVybmFsKEZ1bmN0aW9uVHlwZSBvdGhlciwgX0Fzc3VtcHRpb25zIGFzc3VtcHRpb25zKSB7CiAgICBpZiAodHlwZVZhcmlhYmxlcy5sZW5ndGggIT0gb3RoZXIudHlwZVZhcmlhYmxlcy5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgIGlmICh0eXBlVmFyaWFibGVzLmlzTm90RW1wdHkpIHsKICAgICAgYXNzdW1wdGlvbnMgPz89IG5ldyBfQXNzdW1wdGlvbnMoKTsKICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHR5cGVWYXJpYWJsZXMubGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgICAgYXNzdW1wdGlvbnMuYXNzdW1lKHR5cGVWYXJpYWJsZXNbaW5kZXhdLCBvdGhlci50eXBlVmFyaWFibGVzW2luZGV4XSk7CiAgICAgIH0KICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHR5cGVWYXJpYWJsZXMubGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgICAgaWYgKCF0eXBlVmFyaWFibGVzW2luZGV4XQogICAgICAgICAgICAuYm91bmQKICAgICAgICAgICAgLl9lcXVhbHMob3RoZXIudHlwZVZhcmlhYmxlc1tpbmRleF0uYm91bmQsIGFzc3VtcHRpb25zKSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgYm9vbCByZXN1bHQgPSByZXR1cm5UeXBlLl9lcXVhbHMob3RoZXIucmV0dXJuVHlwZSwgYXNzdW1wdGlvbnMpICYmCiAgICAgICAgX2VxdWFsVHlwZXMocGFyYW1ldGVyVHlwZXMsIG90aGVyLnBhcmFtZXRlclR5cGVzLCBhc3N1bXB0aW9ucykgJiYKICAgICAgICBfZXF1YWxUeXBlcyhvcHRpb25hbFBhcmFtZXRlclR5cGVzLCBvdGhlci5vcHRpb25hbFBhcmFtZXRlclR5cGVzLAogICAgICAgICAgICBhc3N1bXB0aW9ucykgJiYKICAgICAgICBlcXVhbEVsZW1lbnRzKG5hbWVkUGFyYW1ldGVycywgb3RoZXIubmFtZWRQYXJhbWV0ZXJzKSAmJgogICAgICAgIF9lcXVhbFR5cGVzKAogICAgICAgICAgICBuYW1lZFBhcmFtZXRlclR5cGVzLCBvdGhlci5uYW1lZFBhcmFtZXRlclR5cGVzLCBhc3N1bXB0aW9ucyk7CiAgICBpZiAodHlwZVZhcmlhYmxlcy5pc05vdEVtcHR5KSB7CiAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCB0eXBlVmFyaWFibGVzLmxlbmd0aDsgaW5kZXgrKykgewogICAgICAgIGFzc3VtcHRpb25zLmZvcmdldCh0eXBlVmFyaWFibGVzW2luZGV4XSwgb3RoZXIudHlwZVZhcmlhYmxlc1tpbmRleF0pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQoKY2xhc3MgRnV0dXJlT3JUeXBlIGV4dGVuZHMgRGFydFR5cGUgewogIGZpbmFsIERhcnRUeXBlIHR5cGVBcmd1bWVudDsKCiAgRnV0dXJlT3JUeXBlKHRoaXMudHlwZUFyZ3VtZW50KTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNGdXR1cmVPciA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBjb250YWluc1R5cGVWYXJpYWJsZXMgPT4gdHlwZUFyZ3VtZW50LmNvbnRhaW5zVHlwZVZhcmlhYmxlczsKCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoVHlwZVZhcmlhYmxlKGYoVHlwZVZhcmlhYmxlVHlwZSB2YXJpYWJsZSkpIHsKICAgIHR5cGVBcmd1bWVudC5mb3JFYWNoVHlwZVZhcmlhYmxlKGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgUiBhY2NlcHQ8UiwgQT4oRGFydFR5cGVWaXNpdG9yPFIsIEE+IHZpc2l0b3IsIEEgYXJndW1lbnQpID0+CiAgICAgIHZpc2l0b3IudmlzaXRGdXR1cmVPclR5cGUodGhpcywgYXJndW1lbnQpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHR5cGVBcmd1bWVudC5oYXNoQ29kZSAqIDEzOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIEZ1dHVyZU9yVHlwZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIF9lcXVhbHNJbnRlcm5hbChvdGhlciwgbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoRGFydFR5cGUgb3RoZXIsIF9Bc3N1bXB0aW9ucyBhc3N1bXB0aW9ucykgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBGdXR1cmVPclR5cGUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBfZXF1YWxzSW50ZXJuYWwob3RoZXIsIGFzc3VtcHRpb25zKTsKICB9CgogIGJvb2wgX2VxdWFsc0ludGVybmFsKEZ1dHVyZU9yVHlwZSBvdGhlciwgX0Fzc3VtcHRpb25zIGFzc3VtcHRpb25zKSB7CiAgICByZXR1cm4gdHlwZUFyZ3VtZW50Ll9lcXVhbHMob3RoZXIudHlwZUFyZ3VtZW50LCBhc3N1bXB0aW9ucyk7CiAgfQp9Cgpib29sIF9lcXVhbFR5cGVzKExpc3Q8RGFydFR5cGU+IGEsIExpc3Q8RGFydFR5cGU+IGIsIF9Bc3N1bXB0aW9ucyBhc3N1bXB0aW9ucykgewogIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBhLmxlbmd0aDsgaW5kZXgrKykgewogICAgaWYgKCFhW2luZGV4XS5fZXF1YWxzKGJbaW5kZXhdLCBhc3N1bXB0aW9ucykpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICByZXR1cm4gdHJ1ZTsKfQoKYWJzdHJhY3QgY2xhc3MgRGFydFR5cGVWaXNpdG9yPFIsIEE+IHsKICBjb25zdCBEYXJ0VHlwZVZpc2l0b3IoKTsKCiAgUiB2aXNpdChjb3ZhcmlhbnQgRGFydFR5cGUgdHlwZSwgQSBhcmd1bWVudCkgPT4gdHlwZS5hY2NlcHQodGhpcywgYXJndW1lbnQpOwoKICBSIHZpc2l0Vm9pZFR5cGUoY292YXJpYW50IFZvaWRUeXBlIHR5cGUsIEEgYXJndW1lbnQpID0+IG51bGw7CgogIFIgdmlzaXRUeXBlVmFyaWFibGVUeXBlKGNvdmFyaWFudCBUeXBlVmFyaWFibGVUeXBlIHR5cGUsIEEgYXJndW1lbnQpID0+IG51bGw7CgogIFIgdmlzaXRGdW5jdGlvblR5cGVWYXJpYWJsZSgKICAgICAgICAgIGNvdmFyaWFudCBGdW5jdGlvblR5cGVWYXJpYWJsZSB0eXBlLCBBIGFyZ3VtZW50KSA9PgogICAgICBudWxsOwoKICBSIHZpc2l0RnVuY3Rpb25UeXBlKGNvdmFyaWFudCBGdW5jdGlvblR5cGUgdHlwZSwgQSBhcmd1bWVudCkgPT4gbnVsbDsKCiAgUiB2aXNpdEludGVyZmFjZVR5cGUoY292YXJpYW50IEludGVyZmFjZVR5cGUgdHlwZSwgQSBhcmd1bWVudCkgPT4gbnVsbDsKCiAgUiB2aXNpdFR5cGVkZWZUeXBlKGNvdmFyaWFudCBUeXBlZGVmVHlwZSB0eXBlLCBBIGFyZ3VtZW50KSA9PiBudWxsOwoKICBSIHZpc2l0RHluYW1pY1R5cGUoY292YXJpYW50IER5bmFtaWNUeXBlIHR5cGUsIEEgYXJndW1lbnQpID0+IG51bGw7CgogIFIgdmlzaXRBbnlUeXBlKGNvdmFyaWFudCBBbnlUeXBlIHR5cGUsIEEgYXJndW1lbnQpID0+IG51bGw7CgogIFIgdmlzaXRGdXR1cmVPclR5cGUoY292YXJpYW50IEZ1dHVyZU9yVHlwZSB0eXBlLCBBIGFyZ3VtZW50KSA9PiBudWxsOwp9CgphYnN0cmFjdCBjbGFzcyBCYXNlRGFydFR5cGVWaXNpdG9yPFIsIEE+IGV4dGVuZHMgRGFydFR5cGVWaXNpdG9yPFIsIEE+IHsKICBjb25zdCBCYXNlRGFydFR5cGVWaXNpdG9yKCk7CgogIFIgdmlzaXRUeXBlKGNvdmFyaWFudCBEYXJ0VHlwZSB0eXBlLCBBIGFyZ3VtZW50KTsKCiAgQG92ZXJyaWRlCiAgUiB2aXNpdFZvaWRUeXBlKGNvdmFyaWFudCBWb2lkVHlwZSB0eXBlLCBBIGFyZ3VtZW50KSA9PgogICAgICB2aXNpdFR5cGUodHlwZSwgYXJndW1lbnQpOwoKICBAb3ZlcnJpZGUKICBSIHZpc2l0VHlwZVZhcmlhYmxlVHlwZShjb3ZhcmlhbnQgVHlwZVZhcmlhYmxlVHlwZSB0eXBlLCBBIGFyZ3VtZW50KSA9PgogICAgICB2aXNpdFR5cGUodHlwZSwgYXJndW1lbnQpOwoKICBAb3ZlcnJpZGUKICBSIHZpc2l0RnVuY3Rpb25UeXBlVmFyaWFibGUoCiAgICAgICAgICBjb3ZhcmlhbnQgRnVuY3Rpb25UeXBlVmFyaWFibGUgdHlwZSwgQSBhcmd1bWVudCkgPT4KICAgICAgdmlzaXRUeXBlKHR5cGUsIGFyZ3VtZW50KTsKCiAgQG92ZXJyaWRlCiAgUiB2aXNpdEZ1bmN0aW9uVHlwZShjb3ZhcmlhbnQgRnVuY3Rpb25UeXBlIHR5cGUsIEEgYXJndW1lbnQpID0+CiAgICAgIHZpc2l0VHlwZSh0eXBlLCBhcmd1bWVudCk7CgogIEBvdmVycmlkZQogIFIgdmlzaXRJbnRlcmZhY2VUeXBlKGNvdmFyaWFudCBJbnRlcmZhY2VUeXBlIHR5cGUsIEEgYXJndW1lbnQpID0+CiAgICAgIHZpc2l0VHlwZSh0eXBlLCBhcmd1bWVudCk7CgogIEBvdmVycmlkZQogIFIgdmlzaXREeW5hbWljVHlwZShjb3ZhcmlhbnQgRHluYW1pY1R5cGUgdHlwZSwgQSBhcmd1bWVudCkgPT4KICAgICAgdmlzaXRUeXBlKHR5cGUsIGFyZ3VtZW50KTsKCiAgQG92ZXJyaWRlCiAgUiB2aXNpdEFueVR5cGUoY292YXJpYW50IEFueVR5cGUgdHlwZSwgQSBhcmd1bWVudCkgPT4KICAgICAgdmlzaXRUeXBlKHR5cGUsIGFyZ3VtZW50KTsKCiAgQG92ZXJyaWRlCiAgUiB2aXNpdEZ1dHVyZU9yVHlwZShjb3ZhcmlhbnQgRnV0dXJlT3JUeXBlIHR5cGUsIEEgYXJndW1lbnQpID0+CiAgICAgIHZpc2l0VHlwZSh0eXBlLCBhcmd1bWVudCk7Cn0KCmFic3RyYWN0IGNsYXNzIERhcnRUeXBlU3Vic3RpdHV0aW9uVmlzaXRvcjxBPgogICAgZXh0ZW5kcyBEYXJ0VHlwZVZpc2l0b3I8RGFydFR5cGUsIEE+IHsKICAvLyBUaGUgaW5wdXQgdHlwZSBpcyBhIERBRyBhbmQgd2UgbXVzdCBwcmVzZXJ2ZSB0aGUgc2hhcmluZy4KICBNYXA8RGFydFR5cGUsIERhcnRUeXBlPiBfbWFwID0gTWFwLmlkZW50aXR5KCk7CgogIERhcnRUeXBlIF9tYXBwZWQoRGFydFR5cGUgb2xkVHlwZSwgRGFydFR5cGUgbmV3VHlwZSkgewogICAgYXNzZXJ0KF9tYXBbb2xkVHlwZV0gPT0gbnVsbCk7CiAgICByZXR1cm4gX21hcFtvbGRUeXBlXSA9IG5ld1R5cGU7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgcmVwbGFjZW1lbnQgZm9yIHRoZSB0eXBlIHZhcmlhYmxlIFt0eXBlXS4gUmV0dXJucyB0aGUgb3JpZ2luYWwKICAvLy8gW3R5cGVdIGlmIG5vdCBzdWJzdGl0dXRlZC4gVGhlIHN1YnN0aXR1dGlvbiBhbGdvcml0aG0gc29tZXRpbWVzIHZpc2l0cyB0aGUKICAvLy8gc2FtZSBzdWJ0ZXJtIG1vcmUgdGhhbiBvbmNlLiBXaGVuIHRoaXMgaGFwcGVucywgW2ZyZXNoUmVmZXJlbmNlXSBpcyBgdHJ1ZWAKICAvLy8gb24gb25seSBvbmUgdmlzaXQuIFRoaXMgYWxsb3dzIHRoZSBzdWJzdGl0dXRpb24gdmlzaXRvciB0byBjb3VudCB0aGUKICAvLy8gbnVtYmVyIG9mIHRpbWVzIHRoZSByZXBsYWNlbWVudCB0ZXJtIG9jY3VycyBpbiB0aGUgZmluYWwgdGVybS4KICBEYXJ0VHlwZSBzdWJzdGl0dXRlVHlwZVZhcmlhYmxlVHlwZSgKICAgICAgVHlwZVZhcmlhYmxlVHlwZSB0eXBlLCBBIGFyZ3VtZW50LCBib29sIGZyZXNoUmVmZXJlbmNlKTsKCiAgLy8vIFJldHVybnMgdGhlIHJlcGxhY2VtZW50IGZvciB0aGUgZnVuY3Rpb24gdHlwZSB2YXJpYWJsZSBbdHlwZV0uIFJldHVybnMgdGhlCiAgLy8vIG9yaWdpbmFsIFt0eXBlXSBpZiBub3Qgc3Vic3RpdHV0ZWQuIFRoZSBzdWJzdGl0dXRpb24gYWxnb3JpdGhtIHNvbWV0aW1lcwogIC8vLyB2aXNpdHMgdGhlIHNhbWUgc3VidGVybSBtb3JlIHRoYW4gb25jZS4gV2hlbiB0aGlzIGhhcHBlbnMsCiAgLy8vIFtmcmVzaFJlZmVyZW5jZV0gaXMgYHRydWVgIG9uIG9ubHkgb25lIHZpc2l0LiBUaGlzIGFsbG93cyB0aGUgc3Vic3RpdHV0aW9uCiAgLy8vIHZpc2l0b3IgdG8gY291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgcmVwbGFjZW1lbnQgdGVybSBvY2N1cnMgaW4gdGhlCiAgLy8vIGZpbmFsIHRlcm0uCiAgRGFydFR5cGUgc3Vic3RpdHV0ZUZ1bmN0aW9uVHlwZVZhcmlhYmxlKAogICAgICAgICAgRnVuY3Rpb25UeXBlVmFyaWFibGUgdHlwZSwgQSBhcmd1bWVudCwgYm9vbCBmcmVzaFJlZmVyZW5jZSkgPT4KICAgICAgdHlwZTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRUeXBlVmFyaWFibGVUeXBlKGNvdmFyaWFudCBUeXBlVmFyaWFibGVUeXBlIHR5cGUsIEEgYXJndW1lbnQpIHsKICAgIHJldHVybiBzdWJzdGl0dXRlVHlwZVZhcmlhYmxlVHlwZSh0eXBlLCBhcmd1bWVudCwgdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdEZ1bmN0aW9uVHlwZVZhcmlhYmxlKAogICAgICBjb3ZhcmlhbnQgRnVuY3Rpb25UeXBlVmFyaWFibGUgdHlwZSwgQSBhcmd1bWVudCkgewogICAgLy8gRnVuY3Rpb24gdHlwZSB2YXJpYWJsZXMgYXJlIGFkZGVkIHRvIHRoZSBtYXAgb25seSBmb3IgdHlwZSB2YXJpYWJsZXMgdGhhdAogICAgLy8gbmVlZCB0byBiZSByZXBsYWNlZCB3aXRoIHVwZGF0ZWQgYm91bmRzLgogICAgRGFydFR5cGUgc2VlbiA9IF9tYXBbdHlwZV07CiAgICBpZiAoc2VlbiAhPSBudWxsKSByZXR1cm4gc2VlbjsKICAgIHJldHVybiBzdWJzdGl0dXRlRnVuY3Rpb25UeXBlVmFyaWFibGUodHlwZSwgYXJndW1lbnQsIHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRWb2lkVHlwZShjb3ZhcmlhbnQgVm9pZFR5cGUgdHlwZSwgQSBhcmd1bWVudCkgPT4gdHlwZTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRGdW5jdGlvblR5cGUoY292YXJpYW50IEZ1bmN0aW9uVHlwZSB0eXBlLCBBIGFyZ3VtZW50KSB7CiAgICBEYXJ0VHlwZSBzZWVuID0gX21hcFt0eXBlXTsKICAgIGlmIChzZWVuICE9IG51bGwpIHJldHVybiBzZWVuOwoKICAgIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IG5ld1R5cGVWYXJpYWJsZXMgPQogICAgICAgIF9oYW5kbGVGdW5jdGlvblR5cGVWYXJpYWJsZXModHlwZS50eXBlVmFyaWFibGVzLCBhcmd1bWVudCk7CgogICAgRGFydFR5cGUgbmV3UmV0dXJuVHlwZSA9IHZpc2l0KHR5cGUucmV0dXJuVHlwZSwgYXJndW1lbnQpOwogICAgTGlzdDxEYXJ0VHlwZT4gbmV3UGFyYW1ldGVyVHlwZXMgPQogICAgICAgIF9zdWJzdFR5cGVzKHR5cGUucGFyYW1ldGVyVHlwZXMsIGFyZ3VtZW50KTsKICAgIExpc3Q8RGFydFR5cGU+IG5ld09wdGlvbmFsUGFyYW1ldGVyVHlwZXMgPQogICAgICAgIF9zdWJzdFR5cGVzKHR5cGUub3B0aW9uYWxQYXJhbWV0ZXJUeXBlcywgYXJndW1lbnQpOwogICAgTGlzdDxEYXJ0VHlwZT4gbmV3TmFtZWRQYXJhbWV0ZXJUeXBlcyA9CiAgICAgICAgX3N1YnN0VHlwZXModHlwZS5uYW1lZFBhcmFtZXRlclR5cGVzLCBhcmd1bWVudCk7CgogICAgLy8gQ3JlYXRlIGEgbmV3IHR5cGUgb25seSBpZiBuZWNlc3NhcnkuCiAgICBpZiAoaWRlbnRpY2FsKHR5cGUudHlwZVZhcmlhYmxlcywgbmV3VHlwZVZhcmlhYmxlcykgJiYKICAgICAgICBpZGVudGljYWwodHlwZS5yZXR1cm5UeXBlLCBuZXdSZXR1cm5UeXBlKSAmJgogICAgICAgIGlkZW50aWNhbCh0eXBlLnBhcmFtZXRlclR5cGVzLCBuZXdQYXJhbWV0ZXJUeXBlcykgJiYKICAgICAgICBpZGVudGljYWwodHlwZS5vcHRpb25hbFBhcmFtZXRlclR5cGVzLCBuZXdPcHRpb25hbFBhcmFtZXRlclR5cGVzKSAmJgogICAgICAgIGlkZW50aWNhbCh0eXBlLm5hbWVkUGFyYW1ldGVyVHlwZXMsIG5ld05hbWVkUGFyYW1ldGVyVHlwZXMpKSB7CiAgICAgIHJldHVybiBfbWFwcGVkKHR5cGUsIHR5cGUpOwogICAgfQoKICAgIHJldHVybiBfbWFwcGVkKAogICAgICAgIHR5cGUsCiAgICAgICAgRnVuY3Rpb25UeXBlKAogICAgICAgICAgICBuZXdSZXR1cm5UeXBlLAogICAgICAgICAgICBuZXdQYXJhbWV0ZXJUeXBlcywKICAgICAgICAgICAgbmV3T3B0aW9uYWxQYXJhbWV0ZXJUeXBlcywKICAgICAgICAgICAgdHlwZS5uYW1lZFBhcmFtZXRlcnMsCiAgICAgICAgICAgIG5ld05hbWVkUGFyYW1ldGVyVHlwZXMsCiAgICAgICAgICAgIG5ld1R5cGVWYXJpYWJsZXMpKTsKICB9CgogIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IF9oYW5kbGVGdW5jdGlvblR5cGVWYXJpYWJsZXMoCiAgICAgIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IHZhcmlhYmxlcywgQSBhcmd1bWVudCkgewogICAgaWYgKHZhcmlhYmxlcy5pc0VtcHR5KSByZXR1cm4gdmFyaWFibGVzOwoKICAgIC8vIEFyZSB0aGUgZnVuY3Rpb24gdHlwZSB2YXJpYWJsZXMgYmVpbmcgc3Vic3RpdHV0ZWQgKGkuZS4gZ2VuZXJpYyBmdW5jdGlvbgogICAgLy8gdHlwZSBpbnN0YW50aWF0aW9uKS4KICAgIC8vIFRPRE8oc3JhKTogVGhpcyBzaG91bGQgaGFwcGVuIG9ubHkgZnJvbSB2aWEKICAgIC8vIFtGdW5jdGlvblR5cGUuaW5zdGFudGlhdGVdLiBQZXJoYXBzIGl0IHdvdWxkIGJlIGhhbmRsZWQgYmV0dGVyIHRoZXJlLgogICAgaW50IGNvdW50ID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyaWFibGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHZhcmlhYmxlID0gdmFyaWFibGVzW2ldOwogICAgICBpZiAodmFyaWFibGUgIT0KICAgICAgICAgIHN1YnN0aXR1dGVGdW5jdGlvblR5cGVWYXJpYWJsZSh2YXJpYWJsZSwgYXJndW1lbnQsIGZhbHNlKSkgewogICAgICAgIGNvdW50Kys7CiAgICAgIH0KICAgIH0KICAgIGlmIChjb3VudCA9PSB2YXJpYWJsZXMubGVuZ3RoKSByZXR1cm4gY29uc3QgPEZ1bmN0aW9uVHlwZVZhcmlhYmxlPltdOwogICAgYXNzZXJ0KGNvdW50ID09IDAsICdHZW5lcmljIGZ1bmN0aW9uIHR5cGUgaW5zdGFudGlhdGlvbiBpcyBhbGwtb3Itbm9uZScpOwoKICAgIC8vIFR5cGUgdmFyaWFibGVzIG1heSBkZXBlbmQgb24gZWFjaCBvdGhlci4gQ29uc2lkZXI6CiAgICAvLwogICAgLy8gICAgIDxBIGV4dGVuZHMgTGlzdDxCPiwKICAgIC8vICAgICAgQiBleHRlbmRzIFNldDxBPiwKICAgIC8vICAgICAgQyBleHRlbmRzIEQsCiAgICAvLyAgICAgIEQgZXh0ZW5kcyBNYXA8QiwgRj4+KCl7fQogICAgLy8KICAgIC8vIEEgYW5kIEIgaGF2ZSBhIGN5Y2xlIGJ1dCBhcmUgbm90IGNoYW5nZWQgYnkgdGhlIHN1YnNpdHV0aW9uIG9mIEYtPkcuIEMgaXMKICAgIC8vIGluZGlyZWN0bHkgY2hhbmdlZCBieSB0aGUgc3Vic3RpdHV0aW9uIG9mIEYuIFdoZW4gRCBpcyByZXBsYWNlZCBieSBgRDIKICAgIC8vIGV4dGVuZHMgTWFwPEIsRz5gLCBDIG11c3QgYmUgcmVwbGFjZWQgYnkgYEMyIGV4dGVuZHMgRDJgLgoKICAgIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IHVuZGVjaWRlZCA9IHZhcmlhYmxlcy50b0xpc3QoKTsKICAgIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IG5ld1ZhcmlhYmxlczsKCiAgICBfRGVwZW5kZW5jeUNoZWNrPEE+IGRlcGVuZGVuY3lDaGVjayA9IF9EZXBlbmRlbmN5Q2hlY2s8QT4odGhpcywgYXJndW1lbnQpOwoKICAgIGJvb2wgY2hhbmdlZCA9IHRydWU7CiAgICB3aGlsZSAoY2hhbmdlZCkgewogICAgICBjaGFuZ2VkID0gZmFsc2U7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdW5kZWNpZGVkLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgRnVuY3Rpb25UeXBlVmFyaWFibGUgdmFyaWFibGUgPSB1bmRlY2lkZWRbaV07CiAgICAgICAgaWYgKHZhcmlhYmxlID09IG51bGwpIGNvbnRpbnVlOwogICAgICAgIGlmIChkZXBlbmRlbmN5Q2hlY2sucnVuKHZhcmlhYmxlLmJvdW5kKSkgewogICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICB1bmRlY2lkZWRbaV0gPSBudWxsOwogICAgICAgICAgbmV3VmFyaWFibGVzID8/PSB2YXJpYWJsZXMudG9MaXN0KCk7CiAgICAgICAgICBGdW5jdGlvblR5cGVWYXJpYWJsZSBuZXdWYXJpYWJsZSA9CiAgICAgICAgICAgICAgRnVuY3Rpb25UeXBlVmFyaWFibGUodmFyaWFibGUuaW5kZXgpOwogICAgICAgICAgbmV3VmFyaWFibGVzW2ldID0gbmV3VmFyaWFibGU7CiAgICAgICAgICBfbWFwcGVkKHZhcmlhYmxlLCBuZXdWYXJpYWJsZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAobmV3VmFyaWFibGVzID09IG51bGwpIHJldHVybiB2YXJpYWJsZXM7CgogICAgLy8gU3Vic3RpdHV0ZSB0aGUgYm91bmRzIG9mIHRoZSBuZXcgdmFyaWFibGVzOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZXdWYXJpYWJsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgRnVuY3Rpb25UeXBlVmFyaWFibGUgb2xkVmFyaWFibGUgPSB2YXJpYWJsZXNbaV07CiAgICAgIEZ1bmN0aW9uVHlwZVZhcmlhYmxlIG5ld1ZhcmlhYmxlID0gbmV3VmFyaWFibGVzW2ldOwogICAgICBpZiAoaWRlbnRpY2FsKG9sZFZhcmlhYmxlLCBuZXdWYXJpYWJsZSkpIGNvbnRpbnVlOwogICAgICBuZXdWYXJpYWJsZS5ib3VuZCA9IHZpc2l0KG9sZFZhcmlhYmxlLmJvdW5kLCBhcmd1bWVudCk7CiAgICB9CiAgICByZXR1cm4gbmV3VmFyaWFibGVzOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRJbnRlcmZhY2VUeXBlKGNvdmFyaWFudCBJbnRlcmZhY2VUeXBlIHR5cGUsIEEgYXJndW1lbnQpIHsKICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPSB0eXBlLnR5cGVBcmd1bWVudHM7CiAgICBpZiAodHlwZUFyZ3VtZW50cy5pc0VtcHR5KSB7CiAgICAgIC8vIFJldHVybiBmYXN0IG9uIG5vbi1nZW5lcmljIHR5cGVzLgogICAgICByZXR1cm4gdHlwZTsKICAgIH0KCiAgICBEYXJ0VHlwZSBzZWVuID0gX21hcFt0eXBlXTsKICAgIGlmIChzZWVuICE9IG51bGwpIHJldHVybiBzZWVuOwoKICAgIExpc3Q8RGFydFR5cGU+IG5ld1R5cGVBcmd1bWVudHMgPSBfc3Vic3RUeXBlcyh0eXBlQXJndW1lbnRzLCBhcmd1bWVudCk7CiAgICAvLyBDcmVhdGUgYSBuZXcgdHlwZSBvbmx5IGlmIG5lY2Vzc2FyeS4KICAgIGlmIChpZGVudGljYWwodHlwZUFyZ3VtZW50cywgbmV3VHlwZUFyZ3VtZW50cykpIHsKICAgICAgcmV0dXJuIF9tYXBwZWQodHlwZSwgdHlwZSk7CiAgICB9CiAgICByZXR1cm4gX21hcHBlZCh0eXBlLCBJbnRlcmZhY2VUeXBlKHR5cGUuZWxlbWVudCwgbmV3VHlwZUFyZ3VtZW50cykpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRUeXBlZGVmVHlwZShjb3ZhcmlhbnQgVHlwZWRlZlR5cGUgdHlwZSwgQSBhcmd1bWVudCkgewogICAgRGFydFR5cGUgc2VlbiA9IF9tYXBbdHlwZV07CiAgICBpZiAoc2VlbiAhPSBudWxsKSByZXR1cm4gc2VlbjsKCiAgICBMaXN0PERhcnRUeXBlPiBuZXdUeXBlQXJndW1lbnRzID0gX3N1YnN0VHlwZXModHlwZS50eXBlQXJndW1lbnRzLCBhcmd1bWVudCk7CiAgICBGdW5jdGlvblR5cGUgbmV3VW5hbGlhc2VkID0gdmlzaXQodHlwZS51bmFsaWFzZWQsIGFyZ3VtZW50KTsKICAgIC8vIENyZWF0ZSBhIG5ldyB0eXBlIG9ubHkgaWYgbmVjZXNzYXJ5LgogICAgaWYgKGlkZW50aWNhbCh0eXBlLnR5cGVBcmd1bWVudHMsIG5ld1R5cGVBcmd1bWVudHMpICYmCiAgICAgICAgaWRlbnRpY2FsKHR5cGUudW5hbGlhc2VkLCBuZXdVbmFsaWFzZWQpKSB7CiAgICAgIHJldHVybiBfbWFwcGVkKHR5cGUsIHR5cGUpOwogICAgfQogICAgcmV0dXJuIF9tYXBwZWQoCiAgICAgICAgdHlwZSwgVHlwZWRlZlR5cGUodHlwZS5lbGVtZW50LCBuZXdUeXBlQXJndW1lbnRzLCBuZXdVbmFsaWFzZWQpKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0RHluYW1pY1R5cGUoY292YXJpYW50IER5bmFtaWNUeXBlIHR5cGUsIEEgYXJndW1lbnQpID0+IHR5cGU7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0QW55VHlwZShjb3ZhcmlhbnQgQW55VHlwZSB0eXBlLCBBIGFyZ3VtZW50KSA9PiB0eXBlOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdEZ1dHVyZU9yVHlwZShjb3ZhcmlhbnQgRnV0dXJlT3JUeXBlIHR5cGUsIEEgYXJndW1lbnQpIHsKICAgIERhcnRUeXBlIHNlZW4gPSBfbWFwW3R5cGVdOwogICAgaWYgKHNlZW4gIT0gbnVsbCkgcmV0dXJuIHNlZW47CgogICAgRGFydFR5cGUgbmV3VHlwZUFyZ3VtZW50ID0gdmlzaXQodHlwZS50eXBlQXJndW1lbnQsIGFyZ3VtZW50KTsKICAgIC8vIENyZWF0ZSBhIG5ldyB0eXBlIG9ubHkgaWYgbmVjZXNzYXJ5LgogICAgaWYgKGlkZW50aWNhbCh0eXBlLnR5cGVBcmd1bWVudCwgbmV3VHlwZUFyZ3VtZW50KSkgewogICAgICByZXR1cm4gX21hcHBlZCh0eXBlLCB0eXBlKTsKICAgIH0KICAgIHJldHVybiBfbWFwcGVkKHR5cGUsIEZ1dHVyZU9yVHlwZShuZXdUeXBlQXJndW1lbnQpKTsKICB9CgogIExpc3Q8RGFydFR5cGU+IF9zdWJzdFR5cGVzKExpc3Q8RGFydFR5cGU+IHR5cGVzLCBBIGFyZ3VtZW50KSB7CiAgICBMaXN0PERhcnRUeXBlPiByZXN1bHQ7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIERhcnRUeXBlIG9sZFR5cGUgPSB0eXBlc1tpXTsKICAgICAgRGFydFR5cGUgbmV3VHlwZSA9IHZpc2l0KG9sZFR5cGUsIGFyZ3VtZW50KTsKICAgICAgaWYgKCFpZGVudGljYWwobmV3VHlwZSwgb2xkVHlwZSkpIHsKICAgICAgICByZXN1bHQgPz89IHR5cGVzLnN1Ymxpc3QoMCwgaSk7CiAgICAgIH0KICAgICAgcmVzdWx0Py5hZGQobmV3VHlwZSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0ID8/IHR5cGVzOwogIH0KfQoKY2xhc3MgX0RlcGVuZGVuY3lDaGVjazxBPiBleHRlbmRzIERhcnRUeXBlU3RydWN0dXJhbFByZWRpY2F0ZVZpc2l0b3IgewogIGZpbmFsIERhcnRUeXBlU3Vic3RpdHV0aW9uVmlzaXRvcjxBPiBfc3Vic3RpdHV0aW9uVmlzaXRvcjsKICBmaW5hbCBBIGFyZ3VtZW50OwoKICBfRGVwZW5kZW5jeUNoZWNrKHRoaXMuX3N1YnN0aXR1dGlvblZpc2l0b3IsIHRoaXMuYXJndW1lbnQpOwoKICBAb3ZlcnJpZGUKICBib29sIGhhbmRsZVR5cGVWYXJpYWJsZVR5cGUoVHlwZVZhcmlhYmxlVHlwZSB0eXBlKSB7CiAgICByZXR1cm4gIWlkZW50aWNhbCh0eXBlLAogICAgICAgIF9zdWJzdGl0dXRpb25WaXNpdG9yLnN1YnN0aXR1dGVUeXBlVmFyaWFibGVUeXBlKHR5cGUsIGFyZ3VtZW50LCBmYWxzZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBoYW5kbGVGcmVlRnVuY3Rpb25UeXBlVmFyaWFibGUoRnVuY3Rpb25UeXBlVmFyaWFibGUgdHlwZSkgewogICAgLy8gRnVuY3Rpb24gdHlwZSB2YXJpYWJsZXMgYXJlIGFkZGVkIHRvIHRoZSBtYXAgZm9yIHR5cGUgdmFyaWFibGVzIHRoYXQgbmVlZAogICAgLy8gdG8gYmUgcmVwbGFjZWQgd2l0aCB1cGRhdGVkIGJvdW5kcy4KICAgIERhcnRUeXBlIHNlZW4gPSBfc3Vic3RpdHV0aW9uVmlzaXRvci5fbWFwW3R5cGVdOwogICAgaWYgKHNlZW4gIT0gbnVsbCkgcmV0dXJuIHNlZW4gIT0gdHlwZTsKICAgIHJldHVybiAhaWRlbnRpY2FsKAogICAgICAgIHR5cGUsCiAgICAgICAgX3N1YnN0aXR1dGlvblZpc2l0b3Iuc3Vic3RpdHV0ZUZ1bmN0aW9uVHlwZVZhcmlhYmxlKAogICAgICAgICAgICB0eXBlLCBhcmd1bWVudCwgZmFsc2UpKTsKICB9Cn0KCi8vLyBBIHZpc2l0b3IgdGhhdCBieSBkZWZhdWx0IHZpc2l0cyB0aGUgc3Vic3RydWN0dXJlIG9mIHRoZSB0eXBlIHVudGlsIHNvbWUKLy8vIHZpc2l0IHJldHVybnNgdHJ1ZWAuICBUaGUgZGVmYXVsdCBoYW5kZXJzIHJldHVybiBgZmFsc2VgIHdoaWNoIHdpbGwgc2VhcmNoCi8vLyB0aGUgd2hvbGUgc3RydWN0dXJlIHVubGVzcyBvdmVycmlkZGVuLgphYnN0cmFjdCBjbGFzcyBEYXJ0VHlwZVN0cnVjdHVyYWxQcmVkaWNhdGVWaXNpdG9yCiAgICBleHRlbmRzIERhcnRUeXBlVmlzaXRvcjxib29sLCBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPj4gewogIGNvbnN0IERhcnRUeXBlU3RydWN0dXJhbFByZWRpY2F0ZVZpc2l0b3IoKTsKCiAgYm9vbCBydW4oRGFydFR5cGUgdHlwZSkgPT4gdmlzaXQodHlwZSwgbnVsbCk7CgogIGJvb2wgaGFuZGxlVm9pZFR5cGUoVm9pZFR5cGUgdHlwZSkgPT4gZmFsc2U7CiAgYm9vbCBoYW5kbGVUeXBlVmFyaWFibGVUeXBlKFR5cGVWYXJpYWJsZVR5cGUgdHlwZSkgPT4gZmFsc2U7CiAgYm9vbCBoYW5kbGVCb3VuZEZ1bmN0aW9uVHlwZVZhcmlhYmxlKEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHR5cGUpID0+IGZhbHNlOwogIGJvb2wgaGFuZGxlRnJlZUZ1bmN0aW9uVHlwZVZhcmlhYmxlKEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHR5cGUpID0+IGZhbHNlOwogIGJvb2wgaGFuZGxlRnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSB0eXBlKSA9PiBmYWxzZTsKICBib29sIGhhbmRsZUludGVyZmFjZVR5cGUoSW50ZXJmYWNlVHlwZSB0eXBlKSA9PiBmYWxzZTsKICBib29sIGhhbmRsZVR5cGVkZWZUeXBlKFR5cGVkZWZUeXBlIHR5cGUpID0+IGZhbHNlOwogIGJvb2wgaGFuZGxlRHluYW1pY1R5cGUoRHluYW1pY1R5cGUgdHlwZSkgPT4gZmFsc2U7CiAgYm9vbCBoYW5kbGVBbnlUeXBlKEFueVR5cGUgdHlwZSkgPT4gZmFsc2U7CiAgYm9vbCBoYW5kbGVGdXR1cmVPclR5cGUoRnV0dXJlT3JUeXBlIHR5cGUpID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0Vm9pZFR5cGUoVm9pZFR5cGUgdHlwZSwgTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gYmluZGluZ3MpID0+CiAgICAgIGhhbmRsZVZvaWRUeXBlKHR5cGUpOwoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0VHlwZVZhcmlhYmxlVHlwZSgKICAgICAgICAgIFR5cGVWYXJpYWJsZVR5cGUgdHlwZSwgTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gYmluZGluZ3MpID0+CiAgICAgIGhhbmRsZVR5cGVWYXJpYWJsZVR5cGUodHlwZSk7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRGdW5jdGlvblR5cGVWYXJpYWJsZSgKICAgICAgRnVuY3Rpb25UeXBlVmFyaWFibGUgdHlwZSwgTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gYmluZGluZ3MpIHsKICAgIHJldHVybiBiaW5kaW5ncyAhPSBudWxsICYmIGJpbmRpbmdzLmluZGV4T2YodHlwZSkgPj0gMAogICAgICAgID8gaGFuZGxlQm91bmRGdW5jdGlvblR5cGVWYXJpYWJsZSh0eXBlKQogICAgICAgIDogaGFuZGxlRnJlZUZ1bmN0aW9uVHlwZVZhcmlhYmxlKHR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEZ1bmN0aW9uVHlwZSgKICAgICAgRnVuY3Rpb25UeXBlIHR5cGUsIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IGJpbmRpbmdzKSB7CiAgICBpZiAoaGFuZGxlRnVuY3Rpb25UeXBlKHR5cGUpKSByZXR1cm4gdHJ1ZTsKICAgIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IHR5cGVWYXJpYWJsZXMgPSB0eXBlLnR5cGVWYXJpYWJsZXM7CiAgICBpZiAodHlwZVZhcmlhYmxlcy5pc05vdEVtcHR5KSB7CiAgICAgIGJpbmRpbmdzID8/PSA8RnVuY3Rpb25UeXBlVmFyaWFibGU+W107CiAgICAgIGJpbmRpbmdzLmFkZEFsbCh0eXBlVmFyaWFibGVzKTsKICAgIH0KCiAgICBib29sIHJlc3VsdCA9IHZpc2l0KHR5cGUucmV0dXJuVHlwZSwgYmluZGluZ3MpOwogICAgcmVzdWx0ID0gcmVzdWx0IHx8CiAgICAgICAgX3Zpc2l0QWxsKHR5cGUudHlwZVZhcmlhYmxlcy5tYXAoKHZhcmlhYmxlKSA9PiB2YXJpYWJsZS5ib3VuZCkudG9MaXN0KCksCiAgICAgICAgICAgIGJpbmRpbmdzKTsKICAgIHJlc3VsdCA9IHJlc3VsdCB8fCBfdmlzaXRBbGwodHlwZS5wYXJhbWV0ZXJUeXBlcywgYmluZGluZ3MpOwogICAgcmVzdWx0ID0gcmVzdWx0IHx8IF92aXNpdEFsbCh0eXBlLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMsIGJpbmRpbmdzKTsKICAgIHJlc3VsdCA9IHJlc3VsdCB8fCBfdmlzaXRBbGwodHlwZS5uYW1lZFBhcmFtZXRlclR5cGVzLCBiaW5kaW5ncyk7CgogICAgYmluZGluZ3M/Lmxlbmd0aCAtPSB0eXBlVmFyaWFibGVzLmxlbmd0aDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SW50ZXJmYWNlVHlwZSgKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlLCBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBiaW5kaW5ncykgewogICAgaWYgKGhhbmRsZUludGVyZmFjZVR5cGUodHlwZSkpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIF92aXNpdEFsbCh0eXBlLnR5cGVBcmd1bWVudHMsIGJpbmRpbmdzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSB0eXBlLCBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBiaW5kaW5ncykgewogICAgaWYgKGhhbmRsZVR5cGVkZWZUeXBlKHR5cGUpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChfdmlzaXRBbGwodHlwZS50eXBlQXJndW1lbnRzLCBiaW5kaW5ncykpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIHZpc2l0KHR5cGUudW5hbGlhc2VkLCBiaW5kaW5ncyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RHluYW1pY1R5cGUoCiAgICAgICAgICBEeW5hbWljVHlwZSB0eXBlLCBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBiaW5kaW5ncykgPT4KICAgICAgaGFuZGxlRHluYW1pY1R5cGUodHlwZSk7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRBbnlUeXBlKEFueVR5cGUgdHlwZSwgTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gYmluZGluZ3MpID0+CiAgICAgIGhhbmRsZUFueVR5cGUodHlwZSk7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRGdXR1cmVPclR5cGUoCiAgICAgIEZ1dHVyZU9yVHlwZSB0eXBlLCBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBiaW5kaW5ncykgewogICAgaWYgKGhhbmRsZUZ1dHVyZU9yVHlwZSh0eXBlKSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gdmlzaXQodHlwZS50eXBlQXJndW1lbnQsIGJpbmRpbmdzKTsKICB9CgogIGJvb2wgX3Zpc2l0QWxsKExpc3Q8RGFydFR5cGU+IHR5cGVzLCBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBiaW5kaW5ncykgewogICAgZm9yIChEYXJ0VHlwZSB0eXBlIGluIHR5cGVzKSB7CiAgICAgIGlmICh2aXNpdCh0eXBlLCBiaW5kaW5ncykpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKY2xhc3MgX0NvbnRhaW5zRnJlZVR5cGVWYXJpYWJsZXNWaXNpdG9yCiAgICBleHRlbmRzIERhcnRUeXBlU3RydWN0dXJhbFByZWRpY2F0ZVZpc2l0b3IgewogIEBvdmVycmlkZQogIGJvb2wgaGFuZGxlVHlwZVZhcmlhYmxlVHlwZShUeXBlVmFyaWFibGVUeXBlIHR5cGUpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgaGFuZGxlRnJlZUZ1bmN0aW9uVHlwZVZhcmlhYmxlKEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHR5cGUpID0+IHRydWU7Cn0KCmNsYXNzIFNpbXBsZURhcnRUeXBlU3Vic3RpdHV0aW9uVmlzaXRvcgogICAgZXh0ZW5kcyBEYXJ0VHlwZVN1YnN0aXR1dGlvblZpc2l0b3I8TnVsbD4gewogIGZpbmFsIExpc3Q8RGFydFR5cGU+IGFyZ3VtZW50czsKICBmaW5hbCBMaXN0PERhcnRUeXBlPiBwYXJhbWV0ZXJzOwoKICBTaW1wbGVEYXJ0VHlwZVN1YnN0aXR1dGlvblZpc2l0b3IodGhpcy5hcmd1bWVudHMsIHRoaXMucGFyYW1ldGVycyk7CgogIERhcnRUeXBlIHN1YnN0aXR1dGUoRGFydFR5cGUgaW5wdXQpID0+IHZpc2l0KGlucHV0LCBudWxsKTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgc3Vic3RpdHV0ZVR5cGVWYXJpYWJsZVR5cGUoCiAgICAgIFR5cGVWYXJpYWJsZVR5cGUgdHlwZSwgTnVsbCBfLCBib29sIGZyZXNoUmVmZXJlbmNlKSB7CiAgICBpbnQgaW5kZXggPSB0aGlzLnBhcmFtZXRlcnMuaW5kZXhPZih0eXBlKTsKICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICByZXR1cm4gdGhpcy5hcmd1bWVudHNbaW5kZXhdOwogICAgfQogICAgLy8gVGhlIHR5cGUgdmFyaWFibGUgd2FzIG5vdCBzdWJzdGl0dXRlZC4KICAgIHJldHVybiB0eXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgc3Vic3RpdHV0ZUZ1bmN0aW9uVHlwZVZhcmlhYmxlKAogICAgICBjb3ZhcmlhbnQgRnVuY3Rpb25UeXBlVmFyaWFibGUgdHlwZSwgTnVsbCBfLCBib29sIGZyZXNoUmVmZXJlbmNlKSB7CiAgICBpbnQgaW5kZXggPSB0aGlzLnBhcmFtZXRlcnMuaW5kZXhPZih0eXBlKTsKICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICByZXR1cm4gdGhpcy5hcmd1bWVudHNbaW5kZXhdOwogICAgfQogICAgLy8gVGhlIGZ1bmN0aW9uIHR5cGUgdmFyaWFibGUgd2FzIG5vdCBzdWJzdGl0dXRlZC4KICAgIHJldHVybiB0eXBlOwogIH0KfQoKY2xhc3MgX0RlZmVycmVkTmFtZSB7CiAgU3RyaW5nIG5hbWU7CiAgX0RlZmVycmVkTmFtZSgpOwogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IG5hbWU7Cn0KCmNsYXNzIF9EYXJ0VHlwZVRvU3RyaW5nVmlzaXRvciBleHRlbmRzIERhcnRUeXBlVmlzaXRvcjx2b2lkLCB2b2lkPiB7CiAgZmluYWwgTGlzdCBfZnJhZ21lbnRzID0gW107IC8vIFN0cmluZ3MgYW5kIF9EZWZlcnJlZE5hbWVzCiAgYm9vbCBfbGFzdElzSWRlbnRpZmllciA9IGZhbHNlOwogIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IF9ib3VuZFZhcmlhYmxlczsKICBNYXA8RnVuY3Rpb25UeXBlVmFyaWFibGUsIF9EZWZlcnJlZE5hbWU+IF92YXJpYWJsZVRvTmFtZTsKICBTZXQ8RnVuY3Rpb25UeXBlPiBfZ2VuZXJpY0Z1bmN0aW9uczsKCiAgU3RyaW5nIHJ1bihEYXJ0VHlwZSB0eXBlKSB7CiAgICBfdmlzaXQodHlwZSk7CiAgICBpZiAoX3ZhcmlhYmxlVG9OYW1lICE9IG51bGwgJiYKICAgICAgICBfdmFyaWFibGVUb05hbWUudmFsdWVzLmFueSgoZGVmZXJyZWQpID0+IGRlZmVycmVkLm5hbWUgPT0gbnVsbCkpIHsKICAgICAgLy8gQXNzaWduIG5hbWVzIHRvIF9EZWZlcnJlZE5hbWVzIHRoYXQgd2VyZSBub3QgYXNzaWduZWQgd2hpbGUgdmlzaXRpbmcgYQogICAgICAvLyBnZW5lcmljIGZ1bmN0aW9uIHR5cGUuCiAgICAgIFNldDxTdHJpbmc+IHVzZWROYW1lcyA9CiAgICAgICAgICBfdmFyaWFibGVUb05hbWUudmFsdWVzLm1hcCgoZGVmZXJyZWQpID0+IGRlZmVycmVkLm5hbWUpLnRvU2V0KCk7CiAgICAgIGludCBzdGFydEdyb3VwID0gKF9nZW5lcmljRnVuY3Rpb25zPy5sZW5ndGggPz8gMCkgKyAxOwogICAgICBmb3IgKHZhciBlbnRyeSBpbiBfdmFyaWFibGVUb05hbWUuZW50cmllcykgewogICAgICAgIGlmIChlbnRyeS52YWx1ZS5uYW1lICE9IG51bGwpIGNvbnRpbnVlOwogICAgICAgIGZvciAoaW50IGdyb3VwID0gc3RhcnRHcm91cDs7IGdyb3VwKyspIHsKICAgICAgICAgIFN0cmluZyBuYW1lID0gX2Z1bmN0aW9uVHlwZVZhcmlhYmxlTmFtZShlbnRyeS5rZXksIGdyb3VwKTsKICAgICAgICAgIGlmICghdXNlZE5hbWVzLmFkZChuYW1lKSkgY29udGludWU7CiAgICAgICAgICBlbnRyeS52YWx1ZS5uYW1lID0gbmFtZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIF9mcmFnbWVudHMuam9pbigpOwogIH0KCiAgU3RyaW5nIF9mdW5jdGlvblR5cGVWYXJpYWJsZU5hbWUoRnVuY3Rpb25UeXBlVmFyaWFibGUgdmFyaWFibGUsIGludCBncm91cCkgewogICAgU3RyaW5nIHByZWZpeCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHg0MSArIHZhcmlhYmxlLmluZGV4KTsKICAgIFN0cmluZyBzdWZmaXggPSBncm91cCA9PSAxID8gJycgOiAnJGdyb3VwJzsKICAgIHJldHVybiBwcmVmaXggKyBzdWZmaXg7CiAgfQoKICB2b2lkIF9pZGVudGlmaWVyKFN0cmluZyB0ZXh0KSB7CiAgICBpZiAoX2xhc3RJc0lkZW50aWZpZXIpIF9mcmFnbWVudHMuYWRkKCcgJyk7CiAgICBfZnJhZ21lbnRzLmFkZCh0ZXh0KTsKICAgIF9sYXN0SXNJZGVudGlmaWVyID0gdHJ1ZTsKICB9CgogIHZvaWQgX2RlZmVycmVkTmFtZUlkZW50aWZpZXIoX0RlZmVycmVkTmFtZSBuYW1lKSB7CiAgICBpZiAoX2xhc3RJc0lkZW50aWZpZXIpIF9mcmFnbWVudHMuYWRkKCcgJyk7CiAgICBfZnJhZ21lbnRzLmFkZChuYW1lKTsKICAgIF9sYXN0SXNJZGVudGlmaWVyID0gdHJ1ZTsKICB9CgogIHZvaWQgX3Rva2VuKFN0cmluZyB0ZXh0KSB7CiAgICBfZnJhZ21lbnRzLmFkZCh0ZXh0KTsKICAgIF9sYXN0SXNJZGVudGlmaWVyID0gZmFsc2U7CiAgfQoKICBib29sIF9jb21tYShib29sIG5lZWRzQ29tbWEpIHsKICAgIGlmIChuZWVkc0NvbW1hKSBfdG9rZW4oJywnKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgdm9pZCBfdmlzaXQoRGFydFR5cGUgdHlwZSkgewogICAgdHlwZS5hY2NlcHQodGhpcywgbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Vm9pZFR5cGUoY292YXJpYW50IFZvaWRUeXBlIHR5cGUsIF8pIHsKICAgIF9pZGVudGlmaWVyKCd2b2lkJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RHluYW1pY1R5cGUoY292YXJpYW50IER5bmFtaWNUeXBlIHR5cGUsIF8pIHsKICAgIF9pZGVudGlmaWVyKCdkeW5hbWljJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QW55VHlwZShjb3ZhcmlhbnQgQW55VHlwZSB0eXBlLCBfKSB7CiAgICBfaWRlbnRpZmllcignYW55Jyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZVZhcmlhYmxlVHlwZShjb3ZhcmlhbnQgVHlwZVZhcmlhYmxlVHlwZSB0eXBlLCBfKSB7CiAgICBfaWRlbnRpZmllcih0eXBlLmVsZW1lbnQudHlwZURlY2xhcmF0aW9uLm5hbWUpOwogICAgX3Rva2VuKCcuJyk7CiAgICBfaWRlbnRpZmllcih0eXBlLmVsZW1lbnQubmFtZSk7CiAgfQoKICBfRGVmZXJyZWROYW1lIF9uYW1lRm9yKEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHR5cGUpIHsKICAgIF92YXJpYWJsZVRvTmFtZSA/Pz0gTWFwLmlkZW50aXR5KCk7CiAgICByZXR1cm4gX3ZhcmlhYmxlVG9OYW1lW3R5cGVdID8/PSBfRGVmZXJyZWROYW1lKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RnVuY3Rpb25UeXBlVmFyaWFibGUoY292YXJpYW50IEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHR5cGUsIF8pIHsKICAgIC8vIFRoZSBmaXJzdCBsZXR0ZXIgb2YgdGhlIHZhcmlhYmxlIG5hbWUgaW5kaWNhdGVzIHRoZSAnaW5kZXgnLiAgTmFtZXMgaGF2ZQogICAgLy8gc3VmZml4ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgZGlmZmVyZW50IGdlbmVyaWMgZnVuY3Rpb24gdHlwZXMgKEEsIEEyLAogICAgLy8gQTMsIGV0YykuCiAgICBfdG9rZW4oJyMnKTsKICAgIF9kZWZlcnJlZE5hbWVJZGVudGlmaWVyKF9uYW1lRm9yKHR5cGUpKTsKICAgIGlmIChfYm91bmRWYXJpYWJsZXMgPT0gbnVsbCB8fCAhX2JvdW5kVmFyaWFibGVzLmNvbnRhaW5zKHR5cGUpKSB7CiAgICAgIF90b2tlbignLypmcmVlKi8nKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGdW5jdGlvblR5cGUoY292YXJpYW50IEZ1bmN0aW9uVHlwZSB0eXBlLCBfKSB7CiAgICBpZiAodHlwZS50eXBlVmFyaWFibGVzLmlzTm90RW1wdHkpIHsKICAgICAgLy8gRW50ZXIgZnVuY3Rpb24gdHlwZSB2YXJpYWJsZSBzY29wZS4KICAgICAgX2JvdW5kVmFyaWFibGVzID8/PSBbXTsKICAgICAgX2JvdW5kVmFyaWFibGVzLmFkZEFsbCh0eXBlLnR5cGVWYXJpYWJsZXMpOwogICAgICAvLyBBc3NpZ24gbmFtZXMgZm9yIHRoZSBmdW5jdGlvbiB0eXBlIHZhcmlhYmxlcy4gV2UgY291bGQgaGF2ZSBhbHJlYWR5CiAgICAgIC8vIGFzc2lnbmVkIG5hbWVzIGZvciB0aGlzIG5vZGUgaWYgd2UgYXJlIHByaW50aW5nIGEgREFHLgogICAgICBfZ2VuZXJpY0Z1bmN0aW9ucyA/Pz0gU2V0LmlkZW50aXR5KCk7CiAgICAgIGlmIChfZ2VuZXJpY0Z1bmN0aW9ucy5hZGQodHlwZSkpIHsKICAgICAgICBpbnQgZ3JvdXAgPSBfZ2VuZXJpY0Z1bmN0aW9ucy5sZW5ndGg7CiAgICAgICAgZm9yIChGdW5jdGlvblR5cGVWYXJpYWJsZSB2YXJpYWJsZSBpbiB0eXBlLnR5cGVWYXJpYWJsZXMpIHsKICAgICAgICAgIF9EZWZlcnJlZE5hbWUgZGVmZXJyZWROYW1lID0gX25hbWVGb3IodmFyaWFibGUpOwogICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBzdHJ1Y3R1cmFsIGVycm9yIHdoZXJlIG9uZSBGdW5jdGlvblR5cGVWYXJpYWJsZSBpcwogICAgICAgICAgLy8gdXNlZCBpbiB0d28gW0Z1bmN0aW9uVHlwZV1zIGl0IG1pZ2h0IGFscmVhZHkgaGF2ZSBhIG5hbWUuCiAgICAgICAgICBkZWZlcnJlZE5hbWUubmFtZSA/Pz0gX2Z1bmN0aW9uVHlwZVZhcmlhYmxlTmFtZSh2YXJpYWJsZSwgZ3JvdXApOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgX3Zpc2l0KHR5cGUucmV0dXJuVHlwZSk7CiAgICBfdG9rZW4oJyAnKTsKICAgIF9pZGVudGlmaWVyKCdGdW5jdGlvbicpOwogICAgaWYgKHR5cGUudHlwZVZhcmlhYmxlcy5pc05vdEVtcHR5KSB7CiAgICAgIF90b2tlbignPCcpOwogICAgICBib29sIG5lZWRzQ29tbWEgPSBmYWxzZTsKICAgICAgZm9yIChGdW5jdGlvblR5cGVWYXJpYWJsZSB0eXBlVmFyaWFibGUgaW4gdHlwZS50eXBlVmFyaWFibGVzKSB7CiAgICAgICAgbmVlZHNDb21tYSA9IF9jb21tYShuZWVkc0NvbW1hKTsKICAgICAgICBfdmlzaXQodHlwZVZhcmlhYmxlKTsKICAgICAgICBEYXJ0VHlwZSBib3VuZCA9IHR5cGVWYXJpYWJsZS5ib3VuZDsKICAgICAgICBpZiAoIWJvdW5kLmlzT2JqZWN0KSB7CiAgICAgICAgICBfdG9rZW4oJyBleHRlbmRzICcpOwogICAgICAgICAgX3Zpc2l0KHR5cGVWYXJpYWJsZS5ib3VuZCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIF90b2tlbignPicpOwogICAgfQogICAgX3Rva2VuKCcoJyk7CiAgICBib29sIG5lZWRzQ29tbWEgPSBmYWxzZTsKICAgIGZvciAoRGFydFR5cGUgcGFyYW1ldGVyVHlwZSBpbiB0eXBlLnBhcmFtZXRlclR5cGVzKSB7CiAgICAgIG5lZWRzQ29tbWEgPSBfY29tbWEobmVlZHNDb21tYSk7CiAgICAgIF92aXNpdChwYXJhbWV0ZXJUeXBlKTsKICAgIH0KICAgIGlmICh0eXBlLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMuaXNOb3RFbXB0eSkgewogICAgICBuZWVkc0NvbW1hID0gX2NvbW1hKG5lZWRzQ29tbWEpOwogICAgICBfdG9rZW4oJ1snKTsKICAgICAgYm9vbCBuZWVkc09wdGlvbmFsQ29tbWEgPSBmYWxzZTsKICAgICAgZm9yIChEYXJ0VHlwZSB0eXBlQXJndW1lbnQgaW4gdHlwZS5vcHRpb25hbFBhcmFtZXRlclR5cGVzKSB7CiAgICAgICAgbmVlZHNPcHRpb25hbENvbW1hID0gX2NvbW1hKG5lZWRzT3B0aW9uYWxDb21tYSk7CiAgICAgICAgX3Zpc2l0KHR5cGVBcmd1bWVudCk7CiAgICAgIH0KICAgICAgX3Rva2VuKCddJyk7CiAgICB9CiAgICBpZiAodHlwZS5uYW1lZFBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgewogICAgICBuZWVkc0NvbW1hID0gX2NvbW1hKG5lZWRzQ29tbWEpOwogICAgICBfdG9rZW4oJ3snKTsKICAgICAgYm9vbCBuZWVkc05hbWVkQ29tbWEgPSBmYWxzZTsKICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHR5cGUubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aDsgaW5kZXgrKykgewogICAgICAgIG5lZWRzTmFtZWRDb21tYSA9IF9jb21tYShuZWVkc05hbWVkQ29tbWEpOwogICAgICAgIF92aXNpdCh0eXBlLm5hbWVkUGFyYW1ldGVyVHlwZXNbaW5kZXhdKTsKICAgICAgICBfdG9rZW4oJyAnKTsKICAgICAgICBfaWRlbnRpZmllcih0eXBlLm5hbWVkUGFyYW1ldGVyc1tpbmRleF0pOwogICAgICB9CiAgICAgIF90b2tlbignfScpOwogICAgfQogICAgX3Rva2VuKCcpJyk7CiAgICAvLyBFeGl0IGZ1bmN0aW9uIHR5cGUgdmFyaWFibGUgc2NvcGUuCiAgICBfYm91bmRWYXJpYWJsZXM/Lmxlbmd0aCAtPSB0eXBlLnR5cGVWYXJpYWJsZXMubGVuZ3RoOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludGVyZmFjZVR5cGUoY292YXJpYW50IEludGVyZmFjZVR5cGUgdHlwZSwgXykgewogICAgX2lkZW50aWZpZXIodHlwZS5lbGVtZW50Lm5hbWUpOwogICAgX29wdGlvbmFsVHlwZUFyZ3VtZW50cyh0eXBlLnR5cGVBcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVkZWZUeXBlKGNvdmFyaWFudCBUeXBlZGVmVHlwZSB0eXBlLCBfKSB7CiAgICBfaWRlbnRpZmllcih0eXBlLmVsZW1lbnQubmFtZSk7CiAgICBfb3B0aW9uYWxUeXBlQXJndW1lbnRzKHR5cGUudHlwZUFyZ3VtZW50cyk7CiAgfQoKICB2b2lkIF9vcHRpb25hbFR5cGVBcmd1bWVudHMoTGlzdDxEYXJ0VHlwZT4gdHlwZXMpIHsKICAgIGlmICh0eXBlcy5pc05vdEVtcHR5KSB7CiAgICAgIF90b2tlbignPCcpOwogICAgICBib29sIG5lZWRzQ29tbWEgPSBmYWxzZTsKICAgICAgZm9yIChEYXJ0VHlwZSB0eXBlQXJndW1lbnQgaW4gdHlwZXMpIHsKICAgICAgICBuZWVkc0NvbW1hID0gX2NvbW1hKG5lZWRzQ29tbWEpOwogICAgICAgIF92aXNpdCh0eXBlQXJndW1lbnQpOwogICAgICB9CiAgICAgIF90b2tlbignPicpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZ1dHVyZU9yVHlwZShjb3ZhcmlhbnQgRnV0dXJlT3JUeXBlIHR5cGUsIF8pIHsKICAgIF9pZGVudGlmaWVyKCdGdXR1cmVPcicpOwogICAgX3Rva2VuKCc8Jyk7CiAgICBfdmlzaXQodHlwZS50eXBlQXJndW1lbnQpOwogICAgX3Rva2VuKCc+Jyk7CiAgfQp9CgovLy8gQWJzdHJhY3QgdmlzaXRvciBmb3IgZGV0ZXJtaW5pbmcgcmVsYXRpb25zIGJldHdlZW4gdHlwZXMuCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0VHlwZVJlbGF0aW9uPFQgZXh0ZW5kcyBEYXJ0VHlwZT4KICAgIGV4dGVuZHMgQmFzZURhcnRUeXBlVmlzaXRvcjxib29sLCBUPiB7CiAgQ29tbW9uRWxlbWVudHMgZ2V0IGNvbW1vbkVsZW1lbnRzOwoKICBmaW5hbCBfQXNzdW1wdGlvbnMgYXNzdW1wdGlvbnMgPSBuZXcgX0Fzc3VtcHRpb25zKCk7CgogIC8vLyBFbnN1cmVzIHRoYXQgdGhlIHN1cGVyIGhpZXJhcmNoeSBvZiBbdHlwZV0gaXMgY29tcHV0ZWQuCiAgdm9pZCBlbnN1cmVSZXNvbHZlZChJbnRlcmZhY2VUeXBlIHR5cGUpIHt9CgogIC8vLyBSZXR1cm5zIHRoZSB1bmFsaWFzZWQgdmVyc2lvbiBvZiBbdHlwZV0uCiAgVCBnZXRVbmFsaWFzZWQoVCB0eXBlKSA9PiB0eXBlLnVuYWxpYXNlZDsKCiAgLy8vIFJldHVybnMgW3R5cGVdIGFzIGFuIGluc3RhbmNlIG9mIFtjbHNdLCBvciBgbnVsbGAgaWYgW3R5cGVdIGlzIG5vdCBzdWJ0eXBlCiAgLy8vIGlmIFtjbHNdLgogIEludGVyZmFjZVR5cGUgYXNJbnN0YW5jZU9mKEludGVyZmFjZVR5cGUgdHlwZSwgQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIGBjYWxsYCBtZXRob2Qgb24gW3R5cGVdLCBvciBgbnVsbGAgaWYgdGhlIGNsYXNzCiAgLy8vIG9mIFt0eXBlXSBkb2VzIG5vdCBoYXZlIGEgYGNhbGxgIG1ldGhvZC4KICBGdW5jdGlvblR5cGUgZ2V0Q2FsbFR5cGUoSW50ZXJmYWNlVHlwZSB0eXBlKTsKCiAgLy8vIFJldHVybnMgdGhlIGRlY2xhcmVkIGJvdW5kIG9mIFtlbGVtZW50XS4KICBEYXJ0VHlwZSBnZXRUeXBlVmFyaWFibGVCb3VuZChUeXBlVmFyaWFibGVFbnRpdHkgZWxlbWVudCk7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUeXBlKFQgdCwgVCBzKSB7CiAgICB0aHJvdyAnaW50ZXJuYWwgZXJyb3I6IHVua25vd24gdHlwZSAke3R9JzsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRWb2lkVHlwZShWb2lkVHlwZSB0LCBUIHMpIHsKICAgIGFzc2VydChzIGlzISBWb2lkVHlwZSk7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBib29sIGludmFsaWRUeXBlQXJndW1lbnRzKFQgdCwgVCBzKTsKCiAgYm9vbCBpbnZhbGlkRnVuY3Rpb25SZXR1cm5UeXBlcyhUIHQsIFQgcyk7CgogIGJvb2wgaW52YWxpZEZ1bmN0aW9uUGFyYW1ldGVyVHlwZXMoVCB0LCBUIHMpOwoKICBib29sIGludmFsaWRUeXBlVmFyaWFibGVCb3VuZHMoVCBib3VuZCwgVCBzKTsKCiAgYm9vbCBpbnZhbGlkQ2FsbGFibGVUeXBlKGNvdmFyaWFudCBEYXJ0VHlwZSBjYWxsVHlwZSwgY292YXJpYW50IERhcnRUeXBlIHMpOwoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SW50ZXJmYWNlVHlwZShJbnRlcmZhY2VUeXBlIHQsIGNvdmFyaWFudCBEYXJ0VHlwZSBzKSB7CiAgICBlbnN1cmVSZXNvbHZlZCh0KTsKCiAgICBib29sIGNoZWNrVHlwZUFyZ3VtZW50cyhJbnRlcmZhY2VUeXBlIGluc3RhbmNlLCBJbnRlcmZhY2VUeXBlIG90aGVyKSB7CiAgICAgIExpc3Q8VD4gdFR5cGVBcmdzID0gaW5zdGFuY2UudHlwZUFyZ3VtZW50czsKICAgICAgTGlzdDxUPiBzVHlwZUFyZ3MgPSBvdGhlci50eXBlQXJndW1lbnRzOwogICAgICBhc3NlcnQodFR5cGVBcmdzLmxlbmd0aCA9PSBzVHlwZUFyZ3MubGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0VHlwZUFyZ3MubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoaW52YWxpZFR5cGVBcmd1bWVudHModFR5cGVBcmdzW2ldLCBzVHlwZUFyZ3NbaV0pKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIGlmIChzIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgSW50ZXJmYWNlVHlwZSBpbnN0YW5jZSA9IGFzSW5zdGFuY2VPZih0LCBzLmVsZW1lbnQpOwogICAgICBpZiAoaW5zdGFuY2UgIT0gbnVsbCAmJiBjaGVja1R5cGVBcmd1bWVudHMoaW5zdGFuY2UsIHMpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KCiAgICBGdW5jdGlvblR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsVHlwZSh0KTsKICAgIGlmIChzID09IGNvbW1vbkVsZW1lbnRzLmZ1bmN0aW9uVHlwZSAmJiBjYWxsVHlwZSAhPSBudWxsKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIGlmIChzIGlzIEZ1bmN0aW9uVHlwZSkgewogICAgICByZXR1cm4gY2FsbFR5cGUgIT0gbnVsbCAmJiAhaW52YWxpZENhbGxhYmxlVHlwZShjYWxsVHlwZSwgcyk7CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEZ1bmN0aW9uVHlwZShGdW5jdGlvblR5cGUgdCwgRGFydFR5cGUgcykgewogICAgaWYgKHMgPT0gY29tbW9uRWxlbWVudHMuZnVuY3Rpb25UeXBlKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKHMgaXMhIEZ1bmN0aW9uVHlwZSkgcmV0dXJuIGZhbHNlOwogICAgRnVuY3Rpb25UeXBlIHRmID0gdDsKICAgIEZ1bmN0aW9uVHlwZSBzZiA9IHM7CiAgICBpbnQgdHlwZVZhcmlhYmxlc0NvdW50ID0gZ2V0Q29tbW9uVHlwZVZhcmlhYmxlc0NvdW50KHRmLCBzZik7CiAgICBpZiAodHlwZVZhcmlhYmxlc0NvdW50ID09IG51bGwpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlVmFyaWFibGVzQ291bnQ7IGkrKykgewogICAgICBhc3N1bXB0aW9ucy5hc3N1bWUodGYudHlwZVZhcmlhYmxlc1tpXSwgc2YudHlwZVZhcmlhYmxlc1tpXSk7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVWYXJpYWJsZXNDb3VudDsgaSsrKSB7CiAgICAgIGlmICghdGYudHlwZVZhcmlhYmxlc1tpXS5ib3VuZAogICAgICAgICAgLl9lcXVhbHMoc2YudHlwZVZhcmlhYmxlc1tpXS5ib3VuZCwgYXNzdW1wdGlvbnMpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICBpZiAoaW52YWxpZEZ1bmN0aW9uUmV0dXJuVHlwZXModGYucmV0dXJuVHlwZSwgc2YucmV0dXJuVHlwZSkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGJvb2wgcmVzdWx0ID0gdmlzaXRGdW5jdGlvblR5cGVJbnRlcm5hbCh0Ziwgc2YpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlVmFyaWFibGVzQ291bnQ7IGkrKykgewogICAgICBhc3N1bXB0aW9ucy5mb3JnZXQodGYudHlwZVZhcmlhYmxlc1tpXSwgc2YudHlwZVZhcmlhYmxlc1tpXSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgaW50IGdldENvbW1vblR5cGVWYXJpYWJsZXNDb3VudChGdW5jdGlvblR5cGUgdCwgRnVuY3Rpb25UeXBlIHMpIHsKICAgIGlmICh0LnR5cGVWYXJpYWJsZXMubGVuZ3RoID09IHMudHlwZVZhcmlhYmxlcy5sZW5ndGgpIHsKICAgICAgcmV0dXJuIHQudHlwZVZhcmlhYmxlcy5sZW5ndGg7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIGJvb2wgdmlzaXRGdW5jdGlvblR5cGVJbnRlcm5hbChGdW5jdGlvblR5cGUgdGYsIEZ1bmN0aW9uVHlwZSBzZikgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmV3cml0ZSB0aGUgZnVuY3Rpb24gc3VidHlwaW5nIHRvIGJlIG1vcmUgcmVhZGFibGUKICAgIC8vIGJ1dCBzdGlsbCBhcyBlZmZpY2llbnQuCgogICAgLy8gRm9yIHRoZSBjb21tZW50cyB3ZSB1c2UgdGhlIGZvbGxvd2luZyBhYmJyZXZpYXRpb25zOgogICAgLy8gIHgucCAgICAgOiBwYXJhbWV0ZXJUeXBlcyBvbiBbOng6XSwKICAgIC8vICB4Lm8gICAgIDogb3B0aW9uYWxQYXJhbWV0ZXJUeXBlcyBvbiBbOng6XSwgYW5kCiAgICAvLyAgbGVuKHhzKSA6IGxlbmd0aCBvZiBsaXN0IFs6eHM6XS4KCiAgICBJdGVyYXRvcjxUPiB0cHMgPSB0Zi5wYXJhbWV0ZXJUeXBlcy5pdGVyYXRvcjsKICAgIEl0ZXJhdG9yPFQ+IHNwcyA9IHNmLnBhcmFtZXRlclR5cGVzLml0ZXJhdG9yOwogICAgYm9vbCBzTm90RW1wdHkgPSBzcHMubW92ZU5leHQoKTsKICAgIGJvb2wgdE5vdEVtcHR5ID0gdHBzLm1vdmVOZXh0KCk7CiAgICB0TmV4dCgpID0+ICh0Tm90RW1wdHkgPSB0cHMubW92ZU5leHQoKSk7CiAgICBzTmV4dCgpID0+IChzTm90RW1wdHkgPSBzcHMubW92ZU5leHQoKSk7CgogICAgYm9vbCBpbmNvbXBhdGlibGVQYXJhbWV0ZXJzKCkgewogICAgICB3aGlsZSAodE5vdEVtcHR5ICYmIHNOb3RFbXB0eSkgewogICAgICAgIGlmIChpbnZhbGlkRnVuY3Rpb25QYXJhbWV0ZXJUeXBlcyh0cHMuY3VycmVudCwgc3BzLmN1cnJlbnQpKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgdE5leHQoKTsKICAgICAgICBzTmV4dCgpOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAoaW5jb21wYXRpYmxlUGFyYW1ldGVycygpKSByZXR1cm4gZmFsc2U7CiAgICBpZiAodE5vdEVtcHR5KSB7CiAgICAgIC8vIFdlIG11c3QgaGF2ZSBbOiBsZW4odC5wKSA8PSBsZW4ocy5wKSA6XS4KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKCFzZi5uYW1lZFBhcmFtZXRlcnMuaXNFbXB0eSkgewogICAgICAvLyBXZSBtdXN0IGhhdmUgWzogbGVuKHQucCkgPT0gbGVuKHMucCkgOl0uCiAgICAgIGlmIChzTm90RW1wdHkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgLy8gU2luY2UgbmFtZWQgcGFyYW1ldGVycyBhcmUgZ2xvYmFsbHkgb3JkZXJlZCB3ZSBjYW4gZGV0ZXJtaW5lIHRoZQogICAgICAvLyBzdWJzZXQgcmVsYXRpb24gd2l0aCBhIGxpbmVhciBzZWFyY2ggZm9yIFs6c2YubmFtZWRQYXJhbWV0ZXJzOl0KICAgICAgLy8gd2l0aGluIFs6dGYubmFtZWRQYXJhbWV0ZXJzOl0uCiAgICAgIExpc3Q8U3RyaW5nPiB0TmFtZXMgPSB0Zi5uYW1lZFBhcmFtZXRlcnM7CiAgICAgIExpc3Q8VD4gdFR5cGVzID0gdGYubmFtZWRQYXJhbWV0ZXJUeXBlczsKICAgICAgTGlzdDxTdHJpbmc+IHNOYW1lcyA9IHNmLm5hbWVkUGFyYW1ldGVyczsKICAgICAgTGlzdDxUPiBzVHlwZXMgPSBzZi5uYW1lZFBhcmFtZXRlclR5cGVzOwogICAgICBpbnQgdEluZGV4ID0gMDsKICAgICAgaW50IHNJbmRleCA9IDA7CiAgICAgIHdoaWxlICh0SW5kZXggPCB0TmFtZXMubGVuZ3RoICYmIHNJbmRleCA8IHNOYW1lcy5sZW5ndGgpIHsKICAgICAgICBpZiAodE5hbWVzW3RJbmRleF0gPT0gc05hbWVzW3NJbmRleF0pIHsKICAgICAgICAgIGlmIChpbnZhbGlkRnVuY3Rpb25QYXJhbWV0ZXJUeXBlcyh0VHlwZXNbdEluZGV4XSwgc1R5cGVzW3NJbmRleF0pKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICAgIHNJbmRleCsrOwogICAgICAgIH0KICAgICAgICB0SW5kZXgrKzsKICAgICAgfQogICAgICBpZiAoc0luZGV4IDwgc05hbWVzLmxlbmd0aCkgewogICAgICAgIC8vIFdlIGRpZG4ndCBmaW5kIGFsbCBuYW1lcy4KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIENoZWNrIHRoZSByZW1haW5pbmcgWzogcy5wIDpdIGFnYWluc3QgWzogdC5vIDpdLgogICAgICB0cHMgPSB0Zi5vcHRpb25hbFBhcmFtZXRlclR5cGVzLml0ZXJhdG9yOwogICAgICB0TmV4dCgpOwogICAgICBpZiAoaW5jb21wYXRpYmxlUGFyYW1ldGVycygpKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChzTm90RW1wdHkpIHsKICAgICAgICAvLyBXZSBtdXN0IGhhdmUgWzogbGVuKHQucCkgKyBsZW4odC5vKSA+PSBsZW4ocy5wKSA6XS4KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKCFzZi5vcHRpb25hbFBhcmFtZXRlclR5cGVzLmlzRW1wdHkpIHsKICAgICAgICAvLyBDaGVjayB0aGUgcmVtYWluaW5nIFs6IHMubyA6XSBhZ2FpbnN0IHRoZSByZW1haW5pbmcgWzogdC5vIDpdLgogICAgICAgIHNwcyA9IHNmLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMuaXRlcmF0b3I7CiAgICAgICAgc05leHQoKTsKICAgICAgICBpZiAoaW5jb21wYXRpYmxlUGFyYW1ldGVycygpKSByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKHNOb3RFbXB0eSkgewogICAgICAgICAgLy8gV2UgZGlkbid0IGZpbmQgZW5vdWdoIHBhcmFtZXRlcnM6CiAgICAgICAgICAvLyBXZSBtdXN0IGhhdmUgWzogbGVuKHQucCkgKyBsZW4odC5vKSA8PSBsZW4ocy5wKSArIGxlbihzLm8pIDpdLgogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoc05vdEVtcHR5KSB7CiAgICAgICAgICAvLyBXZSBtdXN0IGhhdmUgWzogbGVuKHQucCkgKyBsZW4odC5vKSA+PSBsZW4ocy5wKSA6XS4KICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFR5cGVWYXJpYWJsZVR5cGUoVHlwZVZhcmlhYmxlVHlwZSB0LCBUIHMpIHsKICAgIC8vIElkZW50aXR5IGNoZWNrIGlzIGhhbmRsZWQgaW4gW2lzU3VidHlwZV0uCiAgICBEYXJ0VHlwZSBib3VuZCA9IGdldFR5cGVWYXJpYWJsZUJvdW5kKHQuZWxlbWVudCk7CiAgICBpZiAoYm91bmQuaXNUeXBlVmFyaWFibGUpIHsKICAgICAgLy8gVGhlIGJvdW5kIGlzIHBvdGVudGlhbGx5IGN5Y2xpYyBzbyB3ZSBuZWVkIHRvIGJlIGV4dHJhIGNhcmVmdWwuCiAgICAgIFNldDxUeXBlVmFyaWFibGVFbnRpdHk+IHNlZW5UeXBlVmFyaWFibGVzID0gbmV3IFNldDxUeXBlVmFyaWFibGVFbnRpdHk+KCk7CiAgICAgIHNlZW5UeXBlVmFyaWFibGVzLmFkZCh0LmVsZW1lbnQpOwogICAgICB3aGlsZSAoYm91bmQuaXNUeXBlVmFyaWFibGUpIHsKICAgICAgICBUeXBlVmFyaWFibGVUeXBlIHR5cGVWYXJpYWJsZSA9IGJvdW5kOwogICAgICAgIGlmIChib3VuZCA9PSBzKSB7CiAgICAgICAgICAvLyBbdF0gZXh0ZW5kcyBbc10uCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlZW5UeXBlVmFyaWFibGVzLmNvbnRhaW5zKHR5cGVWYXJpYWJsZS5lbGVtZW50KSkgewogICAgICAgICAgLy8gV2UgaGF2ZSBhIGN5Y2xlIGFuZCBoYXZlIGFscmVhZHkgY2hlY2tlZCBhbGwgYm91bmRzIGluIHRoZSBjeWNsZQogICAgICAgICAgLy8gYWdhaW5zdCBbc10gYW5kIGNhbiB0aGVyZWZvcmUgY29uY2x1ZGUgdGhhdCBbdF0gaXMgbm90IGEgc3VidHlwZQogICAgICAgICAgLy8gb2YgW3NdLgogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBzZWVuVHlwZVZhcmlhYmxlcy5hZGQodHlwZVZhcmlhYmxlLmVsZW1lbnQpOwogICAgICAgIGJvdW5kID0gZ2V0VHlwZVZhcmlhYmxlQm91bmQodHlwZVZhcmlhYmxlLmVsZW1lbnQpOwogICAgICB9CiAgICB9CiAgICBpZiAoaW52YWxpZFR5cGVWYXJpYWJsZUJvdW5kcyhib3VuZCwgcykpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEZ1bmN0aW9uVHlwZVZhcmlhYmxlKEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHQsIERhcnRUeXBlIHMpIHsKICAgIGlmICghcy5pc0Z1bmN0aW9uVHlwZVZhcmlhYmxlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gYXNzdW1wdGlvbnMuaXNBc3N1bWVkKHQsIHMpOwogIH0KfQoKLy8gVE9ETyhmaXNoeXRoZWZpc2gpOiBTdXBwb3J0ICdhbnknLgphYnN0cmFjdCBjbGFzcyBNb3JlU3BlY2lmaWNWaXNpdG9yPFQgZXh0ZW5kcyBEYXJ0VHlwZT4KICAgIGV4dGVuZHMgQWJzdHJhY3RUeXBlUmVsYXRpb248VD4gewogIGJvb2wgaXNNb3JlU3BlY2lmaWMoVCB0LCBUIHMpIHsKICAgIGlmIChpZGVudGljYWwodCwgcykgfHwKICAgICAgICBzLnRyZWF0QXNEeW5hbWljIHx8CiAgICAgICAgcy5pc1ZvaWQgfHwKICAgICAgICBzID09IGNvbW1vbkVsZW1lbnRzLm9iamVjdFR5cGUgfHwKICAgICAgICB0ID09IGNvbW1vbkVsZW1lbnRzLm51bGxUeXBlKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKHQudHJlYXRBc0R5bmFtaWMpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHQgPSBnZXRVbmFsaWFzZWQodCk7CiAgICBzID0gZ2V0VW5hbGlhc2VkKHMpOwoKICAgIHJldHVybiB0LmFjY2VwdCh0aGlzLCBzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaW52YWxpZFR5cGVBcmd1bWVudHMoVCB0LCBUIHMpIHsKICAgIHJldHVybiAhaXNNb3JlU3BlY2lmaWModCwgcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGludmFsaWRGdW5jdGlvblJldHVyblR5cGVzKFQgdCwgVCBzKSB7CiAgICBpZiAocy50cmVhdEFzRHluYW1pYyAmJiB0LmlzVm9pZCkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gIXMuaXNWb2lkICYmICFpc01vcmVTcGVjaWZpYyh0LCBzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaW52YWxpZEZ1bmN0aW9uUGFyYW1ldGVyVHlwZXMoVCB0LCBUIHMpIHsKICAgIHJldHVybiAhaXNNb3JlU3BlY2lmaWModCwgcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGludmFsaWRUeXBlVmFyaWFibGVCb3VuZHMoVCBib3VuZCwgVCBzKSB7CiAgICByZXR1cm4gIWlzTW9yZVNwZWNpZmljKGJvdW5kLCBzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaW52YWxpZENhbGxhYmxlVHlwZShjb3ZhcmlhbnQgRGFydFR5cGUgY2FsbFR5cGUsIGNvdmFyaWFudCBEYXJ0VHlwZSBzKSB7CiAgICByZXR1cm4gIWlzTW9yZVNwZWNpZmljKGNhbGxUeXBlLCBzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRGdXR1cmVPclR5cGUoRnV0dXJlT3JUeXBlIHQsIGNvdmFyaWFudCBEYXJ0VHlwZSBzKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CgovLy8gVHlwZSB2aXNpdG9yIHRoYXQgZGV0ZXJtaW5lcyB0aGUgc3VidHlwZSByZWxhdGlvbiB0d28gdHlwZXMuCi8vIFRPRE8oZmlzaHl0aGVmaXNoKTogU3VwcG9ydCAnYW55Jy4KYWJzdHJhY3QgY2xhc3MgU3VidHlwZVZpc2l0b3I8VCBleHRlbmRzIERhcnRUeXBlPgogICAgZXh0ZW5kcyBNb3JlU3BlY2lmaWNWaXNpdG9yPFQ+IHsKICBib29sIGlzU3VidHlwZShEYXJ0VHlwZSB0LCBEYXJ0VHlwZSBzKSB7CiAgICBpZiAocy5pc0Z1dHVyZU9yKSB7CiAgICAgIEZ1dHVyZU9yVHlwZSBzRnV0dXJlT3IgPSBzOwogICAgICBpZiAoaXNTdWJ0eXBlKHQsIHNGdXR1cmVPci50eXBlQXJndW1lbnQpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0gZWxzZSBpZiAodC5pc0ludGVyZmFjZVR5cGUpIHsKICAgICAgICBJbnRlcmZhY2VUeXBlIHRJbnRlcmZhY2UgPSB0OwogICAgICAgIGlmICh0SW50ZXJmYWNlLmVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuZnV0dXJlQ2xhc3MgJiYKICAgICAgICAgICAgaXNTdWJ0eXBlKAogICAgICAgICAgICAgICAgdEludGVyZmFjZS50eXBlQXJndW1lbnRzLnNpbmdsZSwgc0Z1dHVyZU9yLnR5cGVBcmd1bWVudCkpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGlzTW9yZVNwZWNpZmljKHQsIHMpOwogIH0KCiAgYm9vbCBpc0Fzc2lnbmFibGUoVCB0LCBUIHMpIHsKICAgIHJldHVybiBpc1N1YnR5cGUodCwgcykgfHwgaXNTdWJ0eXBlKHMsIHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpbnZhbGlkVHlwZUFyZ3VtZW50cyhUIHQsIFQgcykgewogICAgcmV0dXJuICFpc1N1YnR5cGUodCwgcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGludmFsaWRGdW5jdGlvblJldHVyblR5cGVzKFQgdCwgVCBzKSB7CiAgICByZXR1cm4gIWlzU3VidHlwZSh0LCBzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaW52YWxpZEZ1bmN0aW9uUGFyYW1ldGVyVHlwZXMoVCB0LCBUIHMpIHsKICAgIHJldHVybiAhaXNTdWJ0eXBlKHMsIHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpbnZhbGlkVHlwZVZhcmlhYmxlQm91bmRzKFQgYm91bmQsIFQgcykgewogICAgcmV0dXJuICFpc1N1YnR5cGUoYm91bmQsIHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpbnZhbGlkQ2FsbGFibGVUeXBlKGNvdmFyaWFudCBEYXJ0VHlwZSBjYWxsVHlwZSwgY292YXJpYW50IERhcnRUeXBlIHMpIHsKICAgIHJldHVybiAhaXNTdWJ0eXBlKGNhbGxUeXBlLCBzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRGdXR1cmVPclR5cGUoRnV0dXJlT3JUeXBlIHQsIGNvdmFyaWFudCBEYXJ0VHlwZSBzKSB7CiAgICBpZiAocy5pc0Z1dHVyZU9yKSB7CiAgICAgIEZ1dHVyZU9yVHlwZSBzRnV0dXJlT3IgPSBzOwogICAgICByZXR1cm4gaXNTdWJ0eXBlKHQudHlwZUFyZ3VtZW50LCBzRnV0dXJlT3IudHlwZUFyZ3VtZW50KTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9Cn0KCi8vLyBUeXBlIHZpc2l0b3IgdGhhdCBkZXRlcm1pbmVzIG9uZSB0eXBlIGNvdWxkIGEgc3VidHlwZSBvZiBhbm90aGVyIGdpdmVuIHRoZQovLy8gcmlnaHQgdHlwZSB2YXJpYWJsZSBzdWJzdGl0dXRpb24uIFRoZSBjb21wdXRhdGlvbiBpcyBhcHByb3hpbWF0ZSBhbmQgcmV0dXJucwovLy8gYGZhbHNlYCBvbmx5IGlmIHdlIGFyZSBzdXJlIG5vIHN1Y2ggc3Vic3RpdHV0aW9uIGV4aXN0cy4KLy8gVE9ETyhmaXNoeXRoZWZpc2gpOiBTdXBwb3J0ICdhbnknLgphYnN0cmFjdCBjbGFzcyBQb3RlbnRpYWxTdWJ0eXBlVmlzaXRvcjxUIGV4dGVuZHMgRGFydFR5cGU+CiAgICBleHRlbmRzIFN1YnR5cGVWaXNpdG9yPFQ+IHsKICBib29sIF9hc3N1bWVJbnN0YW50aWF0aW9ucyA9IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgaXNTdWJ0eXBlKERhcnRUeXBlIHQsIERhcnRUeXBlIHMpIHsKICAgIGlmICh0IGlzIFR5cGVWYXJpYWJsZVR5cGUgfHwgcyBpcyBUeXBlVmFyaWFibGVUeXBlKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKCh0IGlzIEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHx8IHMgaXMgRnVuY3Rpb25UeXBlVmFyaWFibGUpICYmCiAgICAgICAgX2Fzc3VtZUluc3RhbnRpYXRpb25zKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIHN1cGVyLmlzU3VidHlwZSh0LCBzKTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXRDb21tb25UeXBlVmFyaWFibGVzQ291bnQoRnVuY3Rpb25UeXBlIHQsIEZ1bmN0aW9uVHlwZSBzKSB7CiAgICBpZiAodC50eXBlVmFyaWFibGVzLmxlbmd0aCA9PSBzLnR5cGVWYXJpYWJsZXMubGVuZ3RoKSB7CiAgICAgIHJldHVybiB0LnR5cGVWYXJpYWJsZXMubGVuZ3RoOwogICAgfQogICAgaWYgKF9hc3N1bWVJbnN0YW50aWF0aW9ucyAmJiBzLnR5cGVWYXJpYWJsZXMubGVuZ3RoID09IDApIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIGJvb2wgaXNQb3RlbnRpYWxTdWJ0eXBlKERhcnRUeXBlIHQsIERhcnRUeXBlIHMsCiAgICAgIHtib29sIGFzc3VtZUluc3RhbnRpYXRpb25zOiB0cnVlfSkgewogICAgX2Fzc3VtZUluc3RhbnRpYXRpb25zID0gYXNzdW1lSW5zdGFudGlhdGlvbnM7CiAgICByZXR1cm4gaXNTdWJ0eXBlKHQsIHMpOwogIH0KfQoKLy8vIEJhc2ljIGludGVyZmFjZSBmb3IgdGhlIERhcnQgdHlwZSBzeXN0ZW0uCmFic3RyYWN0IGNsYXNzIERhcnRUeXBlcyB7CiAgLy8vIFRoZSB0eXBlcyBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIENvbW1vbkVsZW1lbnRzIGdldCBjb21tb25FbGVtZW50czsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFt0XSBpcyBhIHN1YnR5cGUgb2YgW3NdLgogIGJvb2wgaXNTdWJ0eXBlKERhcnRUeXBlIHQsIERhcnRUeXBlIHMpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW3RdIGlzIGFzc2lnbmFibGUgdG8gW3NdLgogIGJvb2wgaXNBc3NpZ25hYmxlKERhcnRUeXBlIHQsIERhcnRUeXBlIHMpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW3RdIG1pZ2h0IGJlIGEgc3VidHlwZSBvZiBbc10gZm9yIHNvbWUgdmFsdWVzIG9mCiAgLy8vIHR5cGUgdmFyaWFibGVzIGluIFtzXSBhbmQgW3RdLgogIC8vLwogIC8vLyBJZiBbYXNzdW1lSW5zdGFudGlhdGlvbnNdLCBnZW5lcmljIGZ1bmN0aW9uIHR5cGVzIGFyZSBhc3N1bWVkIHRvIGJlCiAgLy8vIHBvdGVudGlhbGx5IGluc3RhbnRpYXRlZC4KICBib29sIGlzUG90ZW50aWFsU3VidHlwZShEYXJ0VHlwZSB0LCBEYXJ0VHlwZSBzLAogICAgICB7Ym9vbCBhc3N1bWVJbnN0YW50aWF0aW9uczogdHJ1ZX0pOwoKICBzdGF0aWMgY29uc3QgaW50IElTX1NVQlRZUEUgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgTUFZQkVfU1VCVFlQRSA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBOT1RfU1VCVFlQRSA9IC0xOwoKICAvLy8gUmV0dXJucyBbSVNfU1VCVFlQRV0sIFtNQVlCRV9TVUJUWVBFXSwgb3IgW05PVF9TVUJUWVBFXSBpZiBbdF0gaXMgYQogIC8vLyAocG90ZW50aWFsKSBzdWJ0eXBlIG9mIFtzXQogIGludCBjb21wdXRlU3VidHlwZVJlbGF0aW9uKERhcnRUeXBlIHQsIERhcnRUeXBlIHMpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENvbXB1dGUgdGhpcyBkaXJlY3RseSBpbiBbaXNQb3RlbnRpYWxTdWJ0eXBlXS4KICAgIGlmIChpc1N1YnR5cGUodCwgcykpIHJldHVybiBJU19TVUJUWVBFOwogICAgcmV0dXJuIGlzUG90ZW50aWFsU3VidHlwZSh0LCBzKSA/IE1BWUJFX1NVQlRZUEUgOiBOT1RfU1VCVFlQRTsKICB9CgogIC8vLyBSZXR1cm5zIFt0eXBlXSBhcyBhbiBpbnN0YW5jZSBvZiBbY2xzXSBvciBgbnVsbGAgaWYgW3R5cGVdIGlzIG5vdCBhCiAgLy8vIHN1YnR5cGUgb2YgW2Nsc10uCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlOiBgYXNJbnN0YW5jZU9mKExpc3Q8U3RyaW5nPiwgSXRlcmFibGUpID0gSXRlcmFibGU8U3RyaW5nPmAuCiAgSW50ZXJmYWNlVHlwZSBhc0luc3RhbmNlT2YoSW50ZXJmYWNlVHlwZSB0eXBlLCBDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJuIFtiYXNlXSB3aGVyZSB0aGUgdHlwZSB2YXJpYWJsZSBvZiBgY29udGV4dC5lbGVtZW50YCBhcmUgcmVwbGFjZWQKICAvLy8gYnkgdGhlIHR5cGUgYXJndW1lbnRzIG9mIFtjb250ZXh0XS4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlCiAgLy8vCiAgLy8vICAgICBzdWJzdEJ5Q29udGV4dChJdGVyYWJsZTxMaXN0LkU+LCBMaXN0PFN0cmluZz4pID0gSXRlcmFibGU8U3RyaW5nPgogIC8vLwogIERhcnRUeXBlIHN1YnN0QnlDb250ZXh0KERhcnRUeXBlIGJhc2UsIEludGVyZmFjZVR5cGUgY29udGV4dCk7CgogIC8vLyBSZXR1cm5zIHRoZSAndGhpcyB0eXBlJyBvZiBbY2xzXS4gVGhhdCBpcywgdGhlIGluc3RhbnRpYXRpb24gb2YgW2Nsc10KICAvLy8gd2hlcmUgdGhlIHR5cGUgYXJndW1lbnRzIGFyZSB0aGUgdHlwZSB2YXJpYWJsZXMgb2YgW2Nsc10uCiAgSW50ZXJmYWNlVHlwZSBnZXRUaGlzVHlwZShDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyB0aGUgc3VwZXJ0eXBlIG9mIFtjbHNdLCBpLmUuIHRoZSB0eXBlIGluIHRoZSBgZXh0ZW5kc2AgY2xhdXNlIG9mCiAgLy8vIFtjbHNdLgogIEludGVyZmFjZVR5cGUgZ2V0U3VwZXJ0eXBlKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGFsbCBzdXBlcnR5cGVzIG9mIFtjbHNdLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFRoaXMgc2hvdWxkIGluY2x1ZGUgYEZ1bmN0aW9uYCBpZiBbY2xzXSBkZWNsYXJlcwogIC8vIGEgYGNhbGxgIG1ldGhvZC4KICBJdGVyYWJsZTxJbnRlcmZhY2VUeXBlPiBnZXRTdXBlcnR5cGVzKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGFsbCB0eXBlcyBkaXJlY3RseSBpbXBsZW1lbnRlZCBieSBbY2xzXS4KICBJdGVyYWJsZTxJbnRlcmZhY2VUeXBlPiBnZXRJbnRlcmZhY2VzKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBgY2FsbGAgbWV0aG9kIG9uIFt0eXBlXSwgb3IgYG51bGxgIGlmIHRoZSBjbGFzcwogIC8vLyBvZiBbdHlwZV0gZG9lcyBub3QgaGF2ZSBhIGBjYWxsYCBtZXRob2QuCiAgRnVuY3Rpb25UeXBlIGdldENhbGxUeXBlKEludGVyZmFjZVR5cGUgdHlwZSk7CgogIC8vLyBDaGVja3MgdGhlIHR5cGUgYXJndW1lbnRzIG9mIFt0eXBlXSBhZ2FpbnN0IHRoZSB0eXBlIHZhcmlhYmxlIGJvdW5kcwogIC8vLyBkZWNsYXJlZCBvbiBgdHlwZS5lbGVtZW50YC4gQ2FsbHMgW2NoZWNrVHlwZVZhcmlhYmxlQm91bmRdIG9uIGVhY2ggdHlwZQogIC8vLyBhcmd1bWVudCBhbmQgYm91bmQuCiAgdm9pZCBjaGVja1R5cGVWYXJpYWJsZUJvdW5kczxUPigKICAgICAgVCBjb250ZXh0LAogICAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICBMaXN0PERhcnRUeXBlPiB0eXBlVmFyaWFibGVzLAogICAgICB2b2lkIGNoZWNrVHlwZVZhcmlhYmxlQm91bmQoVCBjb250ZXh0LCBEYXJ0VHlwZSB0eXBlQXJndW1lbnQsCiAgICAgICAgICBUeXBlVmFyaWFibGVUeXBlIHR5cGVWYXJpYWJsZSwgRGFydFR5cGUgYm91bmQpKTsKCiAgLy8vIFJldHVybnMgdGhlIFtDbGFzc0VudGl0eV0gd2hpY2ggZGVjbGFyZXMgdGhlIHR5cGUgdmFyaWFibGVzIG9jY3VycmluZyBpbgogIC8vIFt0eXBlXSwgb3IgYG51bGxgIGlmIFt0eXBlXSBkb2VzIG5vdCBjb250YWluIGNsYXNzIHR5cGUgdmFyaWFibGVzLgogIHN0YXRpYyBDbGFzc0VudGl0eSBnZXRDbGFzc0NvbnRleHQoRGFydFR5cGUgdHlwZSkgewogICAgQ2xhc3NFbnRpdHkgY29udGV4dENsYXNzOwogICAgdHlwZS5mb3JFYWNoVHlwZVZhcmlhYmxlKChUeXBlVmFyaWFibGVUeXBlIHR5cGVWYXJpYWJsZSkgewogICAgICBpZiAodHlwZVZhcmlhYmxlLmVsZW1lbnQudHlwZURlY2xhcmF0aW9uIGlzISBDbGFzc0VudGl0eSkg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eSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGpzOwoKaW1wb3J0ICdwYWNrYWdlOmpzX2FzdC9qc19hc3QuZGFydCc7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL2R1bXBfaW5mby5kYXJ0JyBzaG93IER1bXBJbmZvVGFzazsKaW1wb3J0ICcuLi9pby9jb2RlX291dHB1dC5kYXJ0JyBzaG93IENvZGVCdWZmZXI7CmltcG9ydCAnanNfc291cmNlX21hcHBpbmcuZGFydCc7CgpleHBvcnQgJ3BhY2thZ2U6anNfYXN0L2pzX2FzdC5kYXJ0JzsKZXhwb3J0ICdqc19kZWJ1Zy5kYXJ0JzsKClN0cmluZyBwcmV0dHlQcmludChOb2RlIG5vZGUsCiAgICB7Ym9vbCBlbmFibGVNaW5pZmljYXRpb246IGZhbHNlLAogICAgYm9vbCBhbGxvd1ZhcmlhYmxlTWluaWZpY2F0aW9uOiB0cnVlLAogICAgUmVuYW1lciByZW5hbWVyRm9yTmFtZXM6IEphdmFTY3JpcHRQcmludGluZ09wdGlvbnMuaWRlbnRpdHlSZW5hbWVyfSkgewogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IERvIHdlIG5lZWQgYWxsIHRoZSBvcHRpb25zIGhlcmU/CiAgSmF2YVNjcmlwdFByaW50aW5nT3B0aW9ucyBvcHRpb25zID0gbmV3IEphdmFTY3JpcHRQcmludGluZ09wdGlvbnMoCiAgICAgIHNob3VsZENvbXByZXNzT3V0cHV0OiBlbmFibGVNaW5pZmljYXRpb24sCiAgICAgIG1pbmlmeUxvY2FsVmFyaWFibGVzOiBhbGxvd1ZhcmlhYmxlTWluaWZpY2F0aW9uLAogICAgICByZW5hbWVyRm9yTmFtZXM6IHJlbmFtZXJGb3JOYW1lcyk7CiAgU2ltcGxlSmF2YVNjcmlwdFByaW50aW5nQ29udGV4dCBjb250ZXh0ID0KICAgICAgbmV3IFNpbXBsZUphdmFTY3JpcHRQcmludGluZ0NvbnRleHQoKTsKICBQcmludGVyIHByaW50ZXIgPSBuZXcgUHJpbnRlcihvcHRpb25zLCBjb250ZXh0KTsKICBwcmludGVyLnZpc2l0KG5vZGUpOwogIHJldHVybiBjb250ZXh0LmdldFRleHQoKTsKfQoKQ29kZUJ1ZmZlciBjcmVhdGVDb2RlQnVmZmVyKE5vZGUgbm9kZSwgQ29tcGlsZXJPcHRpb25zIGNvbXBpbGVyT3B0aW9ucywKICAgIEphdmFTY3JpcHRTb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5IHNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3ksCiAgICB7RHVtcEluZm9UYXNrIG1vbml0b3IsCiAgICBib29sIGFsbG93VmFyaWFibGVNaW5pZmljYXRpb246IHRydWUsCiAgICBSZW5hbWVyIHJlbmFtZXJGb3JOYW1lczogSmF2YVNjcmlwdFByaW50aW5nT3B0aW9ucy5pZGVudGl0eVJlbmFtZXJ9KSB7CiAgSmF2YVNjcmlwdFByaW50aW5nT3B0aW9ucyBvcHRpb25zID0gbmV3IEphdmFTY3JpcHRQcmludGluZ09wdGlvbnMoCiAgICAgIHNob3VsZENvbXByZXNzT3V0cHV0OiBjb21waWxlck9wdGlvbnMuZW5hYmxlTWluaWZpY2F0aW9uLAogICAgICBtaW5pZnlMb2NhbFZhcmlhYmxlczogYWxsb3dWYXJpYWJsZU1pbmlmaWNhdGlvbiwKICAgICAgcmVuYW1lckZvck5hbWVzOiByZW5hbWVyRm9yTmFtZXMpOwogIENvZGVCdWZmZXIgb3V0QnVmZmVyID0gbmV3IENvZGVCdWZmZXIoKTsKICBTb3VyY2VJbmZvcm1hdGlvblByb2Nlc3NvciBzb3VyY2VJbmZvcm1hdGlvblByb2Nlc3NvciA9CiAgICAgIHNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kuY3JlYXRlUHJvY2Vzc29yKAogICAgICAgICAgbmV3IFNvdXJjZU1hcHBlclByb3ZpZGVySW1wbChvdXRCdWZmZXIpLAogICAgICAgICAgY29uc3QgU291cmNlSW5mb3JtYXRpb25SZWFkZXIoKSk7CiAgRGFydDJKU0phdmFTY3JpcHRQcmludGluZ0NvbnRleHQgY29udGV4dCA9CiAgICAgIG5ldyBEYXJ0MkpTSmF2YVNjcmlwdFByaW50aW5nQ29udGV4dCgKICAgICAgICAgIG1vbml0b3IsIG91dEJ1ZmZlciwgc291cmNlSW5mb3JtYXRpb25Qcm9jZXNzb3IpOwogIFByaW50ZXIgcHJpbnRlciA9IG5ldyBQcmludGVyKG9wdGlvbnMsIGNvbnRleHQpOwogIHByaW50ZXIudmlzaXQobm9kZSk7CiAgc291cmNlSW5mb3JtYXRpb25Qcm9jZXNzb3IucHJvY2Vzcyhub2RlLCBvdXRCdWZmZXIpOwogIHJldHVybiBvdXRCdWZmZXI7Cn0KCmNsYXNzIERhcnQySlNKYXZhU2NyaXB0UHJpbnRpbmdDb250ZXh0IGltcGxlbWVudHMgSmF2YVNjcmlwdFByaW50aW5nQ29udGV4dCB7CiAgZmluYWwgRHVtcEluZm9UYXNrIG1vbml0b3I7CiAgZmluYWwgQ29kZUJ1ZmZlciBvdXRCdWZmZXI7CiAgZmluYWwgQ29kZVBvc2l0aW9uTGlzdGVuZXIgY29kZVBvc2l0aW9uTGlzdGVuZXI7CgogIERhcnQySlNKYXZhU2NyaXB0UHJpbnRpbmdDb250ZXh0KAogICAgICB0aGlzLm1vbml0b3IsIHRoaXMub3V0QnVmZmVyLCB0aGlzLmNvZGVQb3NpdGlvbkxpc3RlbmVyKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBlcnJvcihTdHJpbmcgbWVzc2FnZSkgewogICAgZmFpbGVkQXQoTk9fTE9DQVRJT05fU1BBTk5BQkxFLCBtZXNzYWdlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW1pdChTdHJpbmcgc3RyaW5nKSB7CiAgICBtb25pdG9yPy5lbWl0KHN0cmluZyk7CiAgICBvdXRCdWZmZXIuYWRkKHN0cmluZyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVudGVyTm9kZShOb2RlIG5vZGUsIGludCBzdGFydFBvc2l0aW9uKSB7CiAgICBtb25pdG9yPy5lbnRlck5vZGUobm9kZSwgc3RhcnRQb3NpdGlvbik7CiAgICBjb2RlUG9zaXRpb25MaXN0ZW5lci5vblN0YXJ0UG9zaXRpb24obm9kZSwgc3RhcnRQb3NpdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGV4aXROb2RlKAogICAgICBOb2RlIG5vZGUsIGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24sIGludCBjbG9zaW5nUG9zaXRpb24pIHsKICAgIG1vbml0b3I/LmV4aXROb2RlKG5vZGUsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCBjbG9zaW5nUG9zaXRpb24pOwogICAgY29kZVBvc2l0aW9uTGlzdGVuZXIub25Qb3NpdGlvbnMoCiAgICAgICAgbm9kZSwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIGNsb3NpbmdQb3NpdGlvbik7CiAgfQp9CgovLy8gSW50ZXJmYWNlIGZvciBhc3Qgbm9kZXMgdGhhdCBlbmNhcHN1bGF0ZSBhbiBhc3QgdGhhdCBuZWVkcyB0byBiZQovLy8gdHJhdmVyc2VkIHdoZW4gY291bnRpbmcgdG9rZW5zLgphYnN0cmFjdCBjbGFzcyBBc3RDb250YWluZXIgaW1wbGVtZW50cyBOb2RlIHsKICBJdGVyYWJsZTxOb2RlPiBnZXQgY29udGFpbmVkTm9kZXM7Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIHRhc2tzIGluIHRoZSBjb21waWxlciB0aGF0IG5lZWQgdG8gZmluYWxpemUgdG9rZW5zIGFmdGVyCi8vLyBjb3VudGluZyB0aGVtLgphYnN0cmFjdCBjbGFzcyBUb2tlbkZpbmFsaXplciB7CiAgdm9pZCBmaW5hbGl6ZVRva2VucygpOwp9CgovLy8gSW1wbGVtZW50cyByZWZlcmVuY2UgY291bnRpbmcgZm9yIGluc3RhbmNlcyBvZiBbUmVmZXJlbmNlQ291bnRlZEFzdE5vZGVdCmNsYXNzIFRva2VuQ291bnRlciBleHRlbmRzIEJhc2VWaXNpdG9yIHsKICBAb3ZlcnJpZGUKICB2aXNpdE5vZGUoTm9kZSBub2RlKSB7CiAgICBpZiAobm9kZSBpcyBBc3RDb250YWluZXIpIHsKICAgICAgZm9yIChOb2RlIGVsZW1lbnQgaW4gbm9kZS5jb250YWluZWROb2RlcykgewogICAgICAgIGVsZW1lbnQuYWNjZXB0KHRoaXMpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKG5vZGUgaXMgUmVmZXJlbmNlQ291bnRlZEFzdE5vZGUpIHsKICAgICAgbm9kZS5tYXJrU2Vlbih0aGlzKTsKICAgIH0gZWxzZSB7CiAgICAgIHN1cGVyLnZpc2l0Tm9kZShub2RlKTsKICAgIH0KICB9CgogIHZvaWQgY291bnRUb2tlbnMoTm9kZSBub2RlKSA9PiBub2RlLmFjY2VwdCh0aGlzKTsKfQoKYWJzdHJhY3QgY2xhc3MgUmVmZXJlbmNlQ291bnRlZEFzdE5vZGUgaW1wbGVtZW50cyBOb2RlIHsKICB2b2lkIG1hcmtTZWVuKFRva2VuQ291bnRlciB2aXNpdG9yKTsKfQoKLy8vIFJlcHJlc2VudHMgdGhlIExpdGVyYWxTdHJpbmcgcmVzdWx0aW5nIGZyb20gdW5wYXJzaW5nIFtleHByZXNzaW9uXS4gVGhlCi8vLyBhY3R1YWwgdW5wYXJzaW5nIGlzIGRvbmUgb24gZGVtYW5kIHdoZW4gcmVxdWVzdGluZyB0aGUgW3ZhbHVlXSBvZiB0aGlzCi8vLyBub2RlLgovLy8KLy8vIFRoaXMgaXMgdXNlZCB3aGVuIGdlbmVyYXRlZCBjb2RlIG5lZWRzIHRvIGJlIHJlcHJlc2VudGVkIGFzIGEgc3RyaW5nLAovLy8gZm9yIGV4YW1wbGUgYnkgdGhlIGxhenkgZW1pdHRlciBvciB3aGVuIGdlbmVyYXRpbmcgY29kZSBnZW5lcmF0b3JzLgpjbGFzcyBVbnBhcnNlZE5vZGUgZXh0ZW5kcyBEZWZlcnJlZFN0cmluZyBpbXBsZW1lbnRzIEFzdENvbnRhaW5lciB7CiAgZmluYWwgTm9kZSB0cmVlOwogIGZpbmFsIGJvb2wgX2VuYWJsZU1pbmlmaWNhdGlvbjsKICBmaW5hbCBib29sIF9wcm90ZWN0Rm9yRXZhbDsKICBMaXRlcmFsU3RyaW5nIF9jYWNoZWRMaXRlcmFsOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxOb2RlPiBnZXQgY29udGFpbmVkTm9kZXMgPT4gW3RyZWVdOwoKICAvLy8gQSBbanMuTGl0ZXJhbF0gdGhhdCByZXByZXNlbnRzIHRoZSBzdHJpbmcgcmVzdWx0IG9mIHVucGFyc2luZyBbYXN0XS4KICAvLy8KICAvLy8gV2hlbiBpdHMgc3RyaW5nIFt2YWx1ZV0gaXMgcmVxdWVzdGVkLCB0aGUgbm9kZSBwcmV0dHktcHJpbnRzIHRoZSBnaXZlbgogIC8vLyBbYXN0XSBhbmQsIGlmIFtwcm90ZWN0Rm9yRXZhbF0gaXMgdHJ1ZSwgd3JhcHMgdGhlIHJlc3VsdGluZyBzdHJpbmcgaW4KICAvLy8gcGFyZW50aGVzaXMuIFRoZSByZXN1bHQgaXMgYWxzbyBlc2NhcGVkLgogIFVucGFyc2VkTm9kZSh0aGlzLnRyZWUsIHRoaXMuX2VuYWJsZU1pbmlmaWNhdGlvbiwgdGhpcy5fcHJvdGVjdEZvckV2YWwpOwoKICBMaXRlcmFsU3RyaW5nIGdldCBfbGl0ZXJhbCB7CiAgICBpZiAoX2NhY2hlZExpdGVyYWwgPT0gbnVsbCkgewogICAgICBTdHJpbmcgdGV4dCA9IHByZXR0eVByaW50KHRyZWUsIGVuYWJsZU1pbmlmaWNhdGlvbjogX2VuYWJsZU1pbmlmaWNhdGlvbik7CiAgICAgIGlmIChfcHJvdGVjdEZvckV2YWwpIHsKICAgICAgICBpZiAodHJlZSBpcyBGdW4pIHRleHQgPSAnKCR0ZXh0KSc7CiAgICAgICAgaWYgKHRyZWUgaXMgTGl0ZXJhbEV4cHJlc3Npb24pIHsKICAgICAgICAgIExpdGVyYWxFeHByZXNzaW9uIGxpdGVyYWxFeHByZXNzaW9uID0gdHJlZTsKICAgICAgICAgIFN0cmluZyB0ZW1wbGF0ZSA9IGxpdGVyYWxFeHByZXNzaW9uLnRlbXBsYXRlOwogICAgICAgICAgaWYgKHRlbXBsYXRlLnN0YXJ0c1dpdGgoImZ1bmN0aW9uICIpIHx8IHRlbXBsYXRlLnN0YXJ0c1dpdGgoInsiKSkgewogICAgICAgICAgICB0ZXh0ID0gJygkdGV4dCknOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBfY2FjaGVkTGl0ZXJhbCA9IGpzLmVzY2FwZWRTdHJpbmcodGV4dCk7CiAgICB9CiAgICByZXR1cm4gX2NhY2hlZExpdGVyYWw7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IHZhbHVlID0+IF9saXRlcmFsLnZhbHVlOwp9CgovLy8gVHJ1ZSBpZiB0aGUgZ2l2ZW4gdGVtcGxhdGUgY29uc2lzdHMgb2YganVzdCBhIHBsYWNlaG9sZGVyLiBTdWNoIHRlbXBsYXRlcwovLy8gYXJlIHNvbWV0aW1lcyB1c2VkIHRvIG1hbnVhbGx5IHByb21vdGUgdGhlIHR5cGUgb2YgYW4gZXhwcmVzc2lvbi4KYm9vbCBpc0lkZW50aXR5VGVtcGxhdGUoVGVtcGxhdGUgdGVtcGxhdGUpIHsKICByZXR1cm4gdGVtcGxhdGUuYXN0IGlzIEludGVycG9sYXRlZEV4cHJlc3Npb247Cn0KCi8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbdGVtcGxhdGVdIHdpbGwgaW1tZWRpYXRlbHkgZ2l2ZSBhIFR5cGVFcnJvciBpZiB0aGUgZmlyc3QKLy8vIHBsYWNlaG9sZGVyIGlzIGBudWxsYCBvciBgdW5kZWZpbmVkYC4KYm9vbCBpc051bGxHdWFyZE9uRmlyc3RBcmd1bWVudChUZW1wbGF0ZSB0ZW1wbGF0ZSkgewogIC8vIFdlIGxvb2sgZm9yIGEgdGVtcGxhdGUgb2YgdGhlIGZvcm0KICAvLwogIC8vICAgICAjLnNvbWV0aGluZwogIC8vICAgICAjLnNvbWV0aGluZygpCiAgLy8KICBOb2RlIG5vZGUgPSB0ZW1wbGF0ZS5hc3Q7CiAgaWYgKG5vZGUgaXMgQ2FsbCkgewogICAgQ2FsbCBjYWxsID0gbm9kZTsKICAgIG5vZGUgPSBjYWxsLnRhcmdldDsKICB9CiAgaWYgKG5vZGUgaXMgUHJvcGVydHlBY2Nlc3MpIHsKICAgIFByb3BlcnR5QWNjZXNzIGFjY2VzcyA9IG5vZGU7CiAgICBpZiAoYWNjZXNzLnJlY2VpdmVyIGlzIEludGVycG9sYXRlZEV4cHJlc3Npb24pIHsKICAgICAgSW50ZXJwb2xhdGVkRXhwcmVzc2lvbiBob2xlID0gYWNjZXNzLnJlY2VpdmVyOwogICAgICByZXR1cm4gaG9sZS5pc1Bvc2l0aW9uYWwgJiYgaG9sZS5uYW1lT3JQb3NpdGlvbiA9PSAwOwogICAgfQogIH0KICByZXR1cm4gZmFsc2U7Cn0KgMYATk48AQwBJQEZGi4xIQElGAEeJSpLO0UwNyksLTMXHAIBSEMbKktFQDcpKzoxMywtLDszFzcUAgFOHh4zASRAAQwfLgQBDB0bGwQBDDEtPwQBDBFMSiY8BAIBRSQuJQIBSxMgGQIBTSkMGSAyHggyGw0dBgQBNAIBOScCAUxLCgRKSEQTIh4gAQwvAUsGTUwvSwEfIlAdKyk2OE4eDAoILwYbBAEMJgIBTkYtMQIBUCo1KAUVFwUcFhYYBCAiNTU8BgQQAgEfcGFja2FnZTpjb21waWxlci9zcmMvanMvanMuZGFydDNzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19iYWNrZW5kL25hbWVyLmRhcnTAAYnRLy8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkganNfYmFja2VuZC5uYW1lcjsKCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJyBzaG93IEhhc2hNYXA7CgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JwogICAgc2hvdyAkMCwgJDksICRBLCAkWiwgJF8sICRhLCAkZywgJHMsICR6OwoKaW1wb3J0ICdwYWNrYWdlOmpzX3J1bnRpbWUvc2hhcmVkL2VtYmVkZGVkX25hbWVzLmRhcnQnIHNob3cgSnNHZXROYW1lOwoKaW1wb3J0ICcuLi9jbG9zdXJlLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vY29kZWdlbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCcgc2hvdyBJZGVudGlmaWVycywgTmFtZXMsIFNlbGVjdG9yczsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBKRWxlbWVudEVudmlyb25tZW50OwppbXBvcnQgJy4uL2NvbnN0YW50cy9jb25zdGFudF9zeXN0ZW0uZGFydCcgYXMgY29uc3RhbnRfc3lzdGVtOwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgQ29tbW9uRWxlbWVudHMsIEVsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICcuLi9kaWFnbm9zdGljcy9pbnZhcmlhbnQuZGFydCcgc2hvdyBERUJVR19NT0RFOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0eV91dGlscy5kYXJ0JyBhcyB1dGlsczsKaW1wb3J0ICcuLi9lbGVtZW50cy9qdW1wcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqc0FzdDsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2ZpZWxkX2FuYWx5c2lzLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlcy5kYXJ0JyBzaG93IFJ1bnRpbWVUeXBlVGFnczsKaW1wb3J0ICcuLi9qc19tb2RlbC9jbG9zdXJlLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL2VsZW1lbnRzLmRhcnQnIHNob3cgSkdlbmVyYXRvckJvZHk7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydCcgc2hvdyBDYWxsU3RydWN0dXJlOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3IsIFNlbGVjdG9yS2luZDsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCc7CmltcG9ydCAnLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CmltcG9ydCAnbmF0aXZlX2RhdGEuZGFydCc7CgpwYXJ0ICdmaWVsZF9uYW1pbmdfbWl4aW4uZGFydCc7CnBhcnQgJ2ZyZXF1ZW5jeV9uYW1lci5kYXJ0JzsKcGFydCAnbWluaWZ5X25hbWVyLmRhcnQnOwpwYXJ0ICduYW1lcl9uYW1lcy5kYXJ0JzsKCi8vLyBBc3NpZ25zIEphdmFTY3JpcHQgaWRlbnRpZmllcnMgdG8gRGFydCB2YXJpYWJsZXMsIGNsYXNzLW5hbWVzIGFuZCBtZW1iZXJzLgovLy8KLy8vIE5hbWVzIGFyZSBnZW5lcmF0ZWQgdGhyb3VnaCB0aHJlZSBzdGFnZXM6Ci8vLwovLy8gMS4gT3JpZ2luYWwgbmFtZXMgYW5kIHByb3Bvc2VkIG5hbWVzCi8vLyAyLiBEaXNhbWJpZ3VhdGVkIG5hbWVzIChhbHNvIGtub3duIGFzICJtYW5nbGVkIG5hbWVzIikKLy8vIDMuIEFubm90YXRlZCBuYW1lcwovLy8KLy8vIE9yaWdpbmFsIG5hbWVzIGFyZSBuYW1lcyB0YWtlbiBkaXJlY3RseSBmcm9tIHRoZSBpbnB1dC4KLy8vCi8vLyBQcm9wb3NlZCBuYW1lcyBhcmUgZWl0aGVyIG9yaWdpbmFsIG5hbWVzIG9yIHN5bnRoZXNpemVkIG5hbWVzIGZvciBpbnB1dAovLy8gZWxlbWVudHMgdGhhdCBkbyBub3QgaGF2ZSBvcmlnaW5hbCBuYW1lcy4KLy8vCi8vLyBEaXNhbWJpZ3VhdGVkIG5hbWVzIGFyZSBkZXJpdmVkIGZyb20gdGhlIGFib3ZlLCBidXQgYXJlIG1hbmdsZWQgdG8gZW5zdXJlCi8vLyB1bmlxdWVuZXNzIHdpdGhpbiBzb21lIG5hbWVzcGFjZSAoZS5nLiBhcyBmaWVsZHMgb24gdGhlIHNhbWUgSlMgb2JqZWN0KS4KLy8vIEluIFtNaW5pZnlOYW1lcl0sIGRpc2FtYmlndWF0ZWQgbmFtZXMgYXJlIGFsc28gbWluaWZpZWQuCi8vLwovLy8gQW5ub3RhdGVkIG5hbWVzIGFyZSBuYW1lcyBnZW5lcmF0ZWQgZnJvbSBhIGRpc2FtYmlndWF0ZWQgbmFtZS4gQW5ub3RhdGVkCi8vLyBuYW1lcyBtdXN0IGJlIGNvbXB1dGFibGUgYXQgcnVudGltZSBieSBwcmVmaXhpbmcvc3VmZml4aW5nIGNvbnN0YW50IHN0cmluZ3MKLy8vIG9udG8gdGhlIGRpc2FtYmlndWF0ZWQgbmFtZS4KLy8vCi8vLyBGb3IgZXhhbXBsZSwgc29tZSBlbnRpdHkgY2FsbGVkIGB4YCBtaWdodCBiZSBhc3NvY2lhdGVkIHdpdGggdGhlc2UgbmFtZXM6Ci8vLwovLy8gICAgIE9yaWdpbmFsIG5hbWU6IGB4YAovLy8KLy8vICAgICBEaXNhbWJpZ3VhdGVkIG5hbWU6IGB4MWAgKGlmIHNvbWV0aGluZyBlbHNlIHdhcyBjYWxsZWQgYHhgKQovLy8KLy8vICAgICBBbm5vdGF0ZWQgbmFtZXM6IGB4MWAgICAgIChmaWVsZCBuYW1lKQovLy8gICAgICAgICAgICAgICAgICAgICAgYGdldCR4MWAgKGdldHRlciBuYW1lKQovLy8gICAgICAgICAgICAgICAgICAgICAgYHNldCR4MWAgKHNldHRlciBuYW1lKQovLy8KLy8vIFRoZSBbTmFtZXJdIGNhbiBjaG9vc2UgdGhlIGRpc2FtYmlndWF0ZWQgbmFtZXMsIGFuZCB0byBzb21lIGRlZ3JlZSB0aGUKLy8vIHByZWZpeC9zdWZmaXggY29uc3RhbnRzIHVzZWQgdG8gY29uc3RydWN0IGFubm90YXRlZCBuYW1lcy4gSXQgY2Fubm90IGNob29zZQovLy8gYW5ub3RhdGVkIG5hbWVzIHdpdGggdG90YWwgZnJlZWRvbSwgZm9yIGV4YW1wbGUsIGl0IGNhbm5vdCBjaG9vc2UgdGhhdCB0aGUKLy8vIGdldHRlciBmb3IgYHgxYCBzaG91bGQgYmUgY2FsbGVkIGBnZXRYYCAtLSB0aGUgYW5ub3RhdGVkIG5hbWVzIGFyZSBhbHdheXMKLy8vIGJ1aWx0IGJ5IGNvbmNhdGVuYXRpb24uCi8vLwovLy8gRGlzYW1iaWd1YXRlZCBuYW1lcyBtdXN0IGJlIGNob3NlbiBzdWNoIHRoYXQgbm9uZSBvZiB0aGUgYW5ub3RhdGVkIG5hbWVzIGNhbgovLy8gY2xhc2ggd2l0aCBlYWNoIG90aGVyLiBUaGlzIG1heSBoYXBwZW4gZXZlbiBpZiB0aGUgZGlzYW1iaWd1YXRlZCBuYW1lcyBhcmUKLy8vIGRpc3RpbmN0LCBmb3IgZXhhbXBsZSwgc3VwcG9zZSBhIGZpZWxkIGB4YCBhbmQgYGdldCR4YCBleGlzdHMgaW4gdGhlIGlucHV0OgovLy8KLy8vICAgICBPcmlnaW5hbCBuYW1lczogYHhgIGFuZCBgZ2V0JHhgCi8vLwovLy8gICAgIERpc2FtYmlndWF0ZWQgbmFtZXM6IGB4YCBhbmQgYGdldCR4YCAodGhlIHR3byBuYW1lcyBhIGRpZmZlcmVudCkKLy8vCi8vLyAgICAgQW5ub3RhdGVkIG5hbWVzOiBgeGAgKGZpZWxkIGZvciBgeGApCi8vLyAgICAgICAgICAgICAgICAgICAgICBgZ2V0JHhgIChnZXR0ZXIgZm9yIGB4YCkKLy8vICAgICAgICAgICAgICAgICAgICAgIGBnZXQkeGAgKGZpZWxkIGZvciBgZ2V0JHhgKQovLy8gICAgICAgICAgICAgICAgICAgICAgYGdldCRnZXQkeGAgKGdldHRlciBmb3IgYGdldCR4YCkKLy8vCi8vLyBUaGUgZ2V0dGVyIGZvciBgeGAgY2xhc2hlcyB3aXRoIHRoZSBmaWVsZCBuYW1lIGZvciBgZ2V0JHhgLCBzbyB0aGUKLy8vIGRpc2FtYmlndWF0ZWQgbmFtZXMgYXJlIGludmFsaWQuCi8vLwovLy8gQWRkaXRpb25hbGx5LCBkaXNhbWJpZ3VhdGVkIG5hbWVzIG11c3QgYmUgY2hvc2VuIHN1Y2ggdGhhdCBhbGwgYW5ub3RhdGVkCi8vLyBuYW1lcyBhcmUgdmFsaWQgSmF2YVNjcmlwdCBpZGVudGlmaWVycyBhbmQgZG8gbm90IGNvaW5jaWRlIHdpdGggYSBuYXRpdmUKLy8vIEphdmFTY3JpcHQgcHJvcGVydHkgc3VjaCBhcyBgX19wcm90b19fYC4KLy8vCi8vLyBUaGUgZm9sbG93aW5nIGFubm90YXRlZCBuYW1lcyBhcmUgZ2VuZXJhdGVkIGZvciBpbnN0YW5jZSBtZW1iZXJzLCB3aGVyZQovLy8gPE5BTUU+IGRlbm90ZXMgdGhlIGRpc2FtYmlndWF0ZWQgbmFtZS4KLy8vCi8vLyAwLiBUaGUgZGlzYW1iaWd1YXRlZCBuYW1lIGNhbiBpdHNlbGYgYmUgc2VlbiBhcyBhbiBhbm5vdGF0ZWQgbmFtZS4KLy8vCi8vLyAxLiBNdWx0aXBsZSBhbm5vdGF0ZWQgbmFtZXMgZXhpc3QgZm9yIHRoZSBgY2FsbGAgbWV0aG9kLCBlbmNvZGluZyBhcml0eSBhbmQKLy8vICAgIG5hbWVkIHBhcmFtZXRlcnMgd2l0aCB0aGUgcGF0dGVybjoKLy8vCi8vLyAgICAgICBjYWxsJDxOPiRuYW1lZFBhcmFtMS4uLiRuYW1lZFBhcmFtPE0+Ci8vLwovLy8gICAgd2hlcmUgPE4+IGlzIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyAocmVxdWlyZWQgYW5kIG9wdGlvbmFsKSBhbmQgPE0+IGlzCi8vLyAgICB0aGUgbnVtYmVyIG9mIG5hbWVkIHBhcmFtZXRlcnMsIGFuZCBuYW1lZFBhcmFtPG4+IGFyZSB0aGUgbmFtZXMgb2YgdGhlCi8vLyAgICBuYW1lZCBwYXJhbWV0ZXJzIGluIGFscGhhYmV0aWNhbCBvcmRlci4KLy8vCi8vLyAgICBOb3RlIHRoYXQgdGhlIHNhbWUgY29udmVudGlvbiBpcyB1c2VkIGZvciB0aGUgKnByb3Bvc2VkIG5hbWUqIG9mIG90aGVyCi8vLyAgICBtZXRob2RzLiBUaHVzLCBmb3Igb3JkaW5hcnkgbWV0aG9kcywgdGhlIHN1ZmZpeCBiZWNvbWVzIGVtYmVkZGVkIGluIHRoZQovLy8gICAgZGlzYW1iaWd1YXRlZCBuYW1lIChhbmQgY2FuIGJlIG1pbmlmaWVkKSwgd2hlcmVhcyBmb3IgdGhlICdjYWxsJyBtZXRob2QsCi8vLyAgICB0aGUgc3VmZml4IGlzIGFuIGFubm90YXRpb24gdGhhdCBtdXN0IGJlIGNvbXB1dGFibGUgYXQgcnVudGltZQovLy8gICAgKGFuZCB0aHVzIGNhbm5vdCBiZSBtaW5pZmllZCkuCi8vLwovLy8gICAgTm90ZSB0aGF0IHRoZSBvcmRlcmluZyBvZiBuYW1lZCBwYXJhbWV0ZXJzIGlzIG5vdCBlbmNhcHN1bGF0ZWQgaW4gdGhlCi8vLyAgICBbTmFtZXJdLCBhbmQgaXMgaGFyZGNvZGVkIGludG8gb3RoZXIgY29tcG9uZW50cywgc3VjaCBhcyBbRWxlbWVudF0gYW5kCi8vLyAgICBbU2VsZWN0b3JdLgovLy8KLy8vIDIuIFRoZSBnZXR0ZXIvc2V0dGVyIGZvciBhIGZpZWxkOgovLy8KLy8vICAgICAgICBnZXQkPE5BTUU+Ci8vLyAgICAgICAgc2V0JDxOQU1FPgovLy8KLy8vICAgIChUaGUgW2dldHRlclByZWZpeF0gYW5kIFtzZXR0ZXJQcmVmaXhdIGFyZSBkaWZmZXJlbnQgaW4gW01pbmlmeU5hbWVyXSkuCi8vLwovLy8gMy4gVGhlIGBpc2AgYW5kIG9wZXJhdG9yIHVzZXMgdGhlIGZvbGxvd2luZyBuYW1lczoKLy8vCi8vLyAgICAgICAgJGlzPE5BTUU+Ci8vLyAgICAgICAgJGFzPE5BTUU+Ci8vLwovLy8gRm9yIGxvY2FsIHZhcmlhYmxlcywgdGhlIFtOYW1lcl0gb25seSBwcm92aWRlcyAqcHJvcG9zZWQgbmFtZXMqLiBUaGVzZSBuYW1lcwovLy8gbXVzdCBiZSBkaXNhbWJpZ3VhdGVkIGVsc2V3aGVyZS4KY2xhc3MgTmFtZXIgZXh0ZW5kcyBNb2R1bGFyTmFtZXIgewogIHN0YXRpYyBjb25zdCBMaXN0PFN0cmluZz4gamF2YVNjcmlwdEtleXdvcmRzID0gY29uc3QgPFN0cmluZz5bCiAgICAvLyBFUzUgNy42LjEuMSBLZXl3b3Jkcy4KICAgICdicmVhaycsCiAgICAnZG8nLAogICAgJ2luc3RhbmNlb2YnLAogICAgJ3R5cGVvZicsCiAgICAnY2FzZScsCiAgICAnZWxzZScsCiAgICAnbmV3JywKICAgICd2YXInLAogICAgJ2NhdGNoJywKICAgICdmaW5hbGx5JywKICAgICdyZXR1cm4nLAogICAgJ3ZvaWQnLAogICAgJ2NvbnRpbnVlJywKICAgICdmb3InLAogICAgJ3N3aXRjaCcsCiAgICAnd2hpbGUnLAogICAgJ2RlYnVnZ2VyJywKICAgICdmdW5jdGlvbicsCiAgICAndGhpcycsCiAgICAnd2l0aCcsCiAgICAnZGVmYXVsdCcsCiAgICAnaWYnLAogICAgJ3Rocm93JywKICAgICdkZWxldGUnLAogICAgJ2luJywKICAgICd0cnknLAoKICAgIC8vIEVTNSA3LjYuMS4yIEZ1dHVyZSBSZXNlcnZlZCBXb3Jkcy4KICAgICdjbGFzcycsCiAgICAnZW51bScsCiAgICAnZXh0ZW5kcycsCiAgICAnc3VwZXInLAogICAgJ2NvbnN0JywKICAgICdleHBvcnQnLAogICAgJ2ltcG9ydCcsCgogICAgLy8gRVM1IDcuNi4xLjIgV29yZHMgd2l0aCBzZW1hbnRpYyByZXN0cmljdGlvbnMuCiAgICAnaW1wbGVtZW50cycsCiAgICAnbGV0JywKICAgICdwcml2YXRlJywKICAgICdwdWJsaWMnLAogICAgJ3lpZWxkJywKICAgICdpbnRlcmZhY2UnLAogICAgJ3BhY2thZ2UnLAogICAgJ3Byb3RlY3RlZCcsCiAgICAnc3RhdGljJywKCiAgICAvLyBFUzYgMTEuNi4yLjEgS2V5d29yZHMgKGluY2x1ZGluZyByZXBlYXRzIG9mIEVTNSB0byBlYXNlIGNvbXBhcmlzb24gd2l0aAogICAgLy8gZG9jdW1lbnRzKS4KICAgICdicmVhaycsCiAgICAnZG8nLAogICAgJ2luJywKICAgICd0eXBlb2YnLAogICAgJ2Nhc2UnLAogICAgJ2Vsc2UnLAogICAgJ2luc3RhbmNlb2YnLAogICAgJ3ZhcicsCiAgICAnY2F0Y2gnLAogICAgJ2V4cG9ydCcsCiAgICAnbmV3JywKICAgICd2b2lkJywKICAgICdjbGFzcycsCiAgICAnZXh0ZW5kcycsCiAgICAncmV0dXJuJywKICAgICd3aGlsZScsCiAgICAnY29uc3QnLAogICAgJ2ZpbmFsbHknLAogICAgJ3N1cGVyJywKICAgICd3aXRoJywKICAgICdjb250aW51ZScsCiAgICAnZm9yJywKICAgICdzd2l0Y2gnLAogICAgJ3lpZWxkJywKICAgICdkZWJ1Z2dlcicsCiAgICAnZnVuY3Rpb24nLAogICAgJ3RoaXMnLAogICAgJ2RlZmF1bHQnLAogICAgJ2lmJywKICAgICd0aHJvdycsCiAgICAnZGVsZXRlJywKICAgICdpbXBvcnQnLAogICAgJ3RyeScsCgogICAgLy8gRVM2IDExLjYuMi4xIFdvcmRzIHdpdGggc2VtYW50aWMgcmVzdHJpY3Rpb25zLgogICAgJ3lpZWxkJywgJ2xldCcsICdzdGF0aWMnLAoKICAgIC8vIEVTNiAxMS42LjIuMiBGdXR1cmUgUmVzZXJ2ZWQgV29yZHMuCiAgICAnZW51bScsCiAgICAnYXdhaXQnLAoKICAgIC8vIEVTNiAxMS42LjIuMiAvIEVTNiAxMi4xLjEgV29yZHMgd2l0aCBzZW1hbnRpYyByZXN0cmljdGlvbnMuCiAgICAnaW1wbGVtZW50cycsCiAgICAncGFja2FnZScsCiAgICAncHJvdGVjdGVkJywKICAgICdpbnRlcmZhY2UnLAogICAgJ3ByaXZhdGUnLAogICAgJ3B1YmxpYycsCgogICAgLy8gT3RoZXIgd29yZHMgdG8gYXZvaWQgZHVlIHRvIG5vbi1zdGFuZGFyZCBrZXl3b3JkLWxpa2UgYmVoYXZpb3IuCiAgXTsKCiAgc3RhdGljIGNvbnN0IExpc3Q8U3RyaW5nPiByZXNlcnZlZFByb3BlcnR5U3ltYm9scyA9IGNvbnN0IDxTdHJpbmc+WwogICAgIl9fcHJvdG9fXyIsICJwcm90b3R5cGUiLCAiY29uc3RydWN0b3IiLCAiY2FsbCIsCiAgICAvLyAidXNlIHN0cmljdCIgZGlzYWxsb3dzIHRoZSB1c2Ugb2YgImFyZ3VtZW50cyIgYW5kICJldmFsIiBhcwogICAgLy8gdmFyaWFibGUgbmFtZXMgb3IgcHJvcGVydHkgbmFtZXMuIFNlZSBFQ01BLTI2MiwgRWRpdGlvbiA1LjEsCiAgICAvLyBzZWN0aW9uIDExLjEuNSAoZm9yIHRoZSBwcm9wZXJ0eSBuYW1lcykuCiAgICAiZXZhbCIsICJhcmd1bWVudHMiCiAgXTsKCiAgLy8gU3ltYm9scyB0aGF0IHdlIG1pZ2h0IGJlIHVzaW5nIGluIG91ciBKUyBzbmlwcGV0cy4KICBzdGF0aWMgY29uc3QgTGlzdDxTdHJpbmc+IHJlc2VydmVkR2xvYmFsU3ltYm9scyA9IGNvbnN0IDxTdHJpbmc+WwogICAgLy8gU2VjdGlvbiByZWZlcmVuY2VzIGFyZSBmcm9tIEVjbWEtMjYyCiAgICAvLyAoaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL3B1YmxpY2F0aW9ucy9maWxlcy9FQ01BLVNUL0VjbWEtMjYyLnBkZikKCiAgICAvLyAxNS4xLjEgVmFsdWUgUHJvcGVydGllcyBvZiB0aGUgR2xvYmFsIE9iamVjdAogICAgIk5hTiIsICJJbmZpbml0eSIsICJ1bmRlZmluZWQiLAoKICAgIC8vIDE1LjEuMiBGdW5jdGlvbiBQcm9wZXJ0aWVzIG9mIHRoZSBHbG9iYWwgT2JqZWN0CiAgICAiZXZhbCIsICJwYXJzZUludCIsICJwYXJzZUZsb2F0IiwgImlzTmFOIiwgImlzRmluaXRlIiwKCiAgICAvLyAxNS4xLjMgVVJJIEhhbmRsaW5nIEZ1bmN0aW9uIFByb3BlcnRpZXMKICAgICJkZWNvZGVVUkkiLCAiZGVjb2RlVVJJQ29tcG9uZW50IiwKICAgICJlbmNvZGVVUkkiLAogICAgImVuY29kZVVSSUNvbXBvbmVudCIsCgogICAgLy8gMTUuMS40IENvbnN0cnVjdG9yIFByb3BlcnRpZXMgb2YgdGhlIEdsb2JhbCBPYmplY3QKICAgICJPYmplY3QiLCAiRnVuY3Rpb24iLCAiQXJyYXkiLCAiU3RyaW5nIiwgIkJvb2xlYW4iLCAiTnVtYmVyIiwgIkRhdGUiLAogICAgIlJlZ0V4cCIsICJFcnJvciIsICJFdmFsRXJyb3IiLCAiUmFuZ2VFcnJvciIsICJSZWZlcmVuY2VFcnJvciIsCiAgICAiU3ludGF4RXJyb3IiLCAiVHlwZUVycm9yIiwgIlVSSUVycm9yIiwKCiAgICAvLyAxNS4xLjUgT3RoZXIgUHJvcGVydGllcyBvZiB0aGUgR2xvYmFsIE9iamVjdAogICAgIk1hdGgiLAoKICAgIC8vIDEwLjEuNiBBY3RpdmF0aW9uIE9iamVjdAogICAgImFyZ3VtZW50cyIsCgogICAgLy8gQi4yIEFkZGl0aW9uYWwgUHJvcGVydGllcyAobm9uLW5vcm1hdGl2ZSkKICAgICJlc2NhcGUiLCAidW5lc2NhcGUiLAoKICAgIC8vIFdpbmRvdyBwcm9wcyAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vRE9NL3dpbmRvdykKICAgICJhcHBsaWNhdGlvbkNhY2hlIiwgImNsb3NlZCIsICJDb21wb25lbnRzIiwgImNvbnRlbnQiLCAiY29udHJvbGxlcnMiLAogICAgImNyeXB0byIsICJkZWZhdWx0U3RhdHVzIiwgImRpYWxvZ0FyZ3VtZW50cyIsICJkaXJlY3RvcmllcyIsCiAgICAiZG9jdW1lbnQiLCAiZnJhbWVFbGVtZW50IiwgImZyYW1lcyIsICJmdWxsU2NyZWVuIiwgImdsb2JhbFN0b3JhZ2UiLAogICAgImhpc3RvcnkiLCAiaW5uZXJIZWlnaHQiLCAiaW5uZXJXaWR0aCIsICJsZW5ndGgiLAogICAgImxvY2F0aW9uIiwgImxvY2F0aW9uYmFyIiwgImxvY2FsU3RvcmFnZSIsICJtZW51YmFyIiwKICAgICJtb3pJbm5lclNjcmVlblgiLCAibW96SW5uZXJTY3JlZW5ZIiwgIm1velNjcmVlblBpeGVsc1BlckNzc1BpeGVsIiwKICAgICJuYW1lIiwgIm5hdmlnYXRvciIsICJvcGVuZXIiLCAib3V0ZXJIZWlnaHQiLCAib3V0ZXJXaWR0aCIsCiAgICAicGFnZVhPZmZzZXQiLCAicGFnZVlPZmZzZXQiLCAicGFyZW50IiwgInBlcnNvbmFsYmFyIiwgInBrY3MxMSIsCiAgICAicmV0dXJuVmFsdWUiLCAic2NyZWVuIiwgInNjcm9sbGJhcnMiLCAic2Nyb2xsTWF4WCIsICJzY3JvbGxNYXhZIiwKICAgICJzZWxmIiwgInNlc3Npb25TdG9yYWdlIiwgInNpZGViYXIiLCAic3RhdHVzIiwgInN0YXR1c2JhciIsICJ0b29sYmFyIiwKICAgICJ0b3AiLCAid2luZG93IiwKCiAgICAvLyBXaW5kb3cgbWV0aG9kcyAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vRE9NL3dpbmRvdykKICAgICJhbGVydCIsICJhZGRFdmVudExpc3RlbmVyIiwgImF0b2IiLCAiYmFjayIsICJibHVyIiwgImJ0b2EiLAogICAgImNhcHR1cmVFdmVudHMiLCAiY2xlYXJJbnRlcnZhbCIsICJjbGVhclRpbWVvdXQiLCAiY2xvc2UiLCAiY29uZmlybSIsCiAgICAiZGlzYWJsZUV4dGVybmFsQ2FwdHVyZSIsICJkaXNwYXRjaEV2ZW50IiwgImR1bXAiLAogICAgImVuYWJsZUV4dGVybmFsQ2FwdHVyZSIsICJlc2NhcGUiLCAiZmluZCIsICJmb2N1cyIsICJmb3J3YXJkIiwKICAgICJHZWNrb0FjdGl2ZVhPYmplY3QiLCAiZ2V0QXR0ZW50aW9uIiwgImdldEF0dGVudGlvbldpdGhDeWNsZUNvdW50IiwKICAgICJnZXRDb21wdXRlZFN0eWxlIiwgImdldFNlbGVjdGlvbiIsICJob21lIiwgIm1heGltaXplIiwgIm1pbmltaXplIiwKICAgICJtb3ZlQnkiLCAibW92ZVRvIiwgIm9wZW4iLCAib3BlbkRpYWxvZyIsICJwb3N0TWVzc2FnZSIsICJwcmludCIsCiAgICAicHJvbXB0IiwgIlF1ZXJ5SW50ZXJmYWNlIiwgInJlbGVhc2VFdmVudHMiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciIsCiAgICAicmVzaXplQnkiLCAicmVzaXplVG8iLCAicmVzdG9yZSIsICJyb3V0ZUV2ZW50IiwgInNjcm9sbCIsICJzY3JvbGxCeSIsCiAgICAic2Nyb2xsQnlMaW5lcyIsICJzY3JvbGxCeVBhZ2VzIiwgInNjcm9sbFRvIiwgInNldEludGVydmFsIiwKICAgICJzZXRSZXNpemVhYmxlIiwgInNldFRpbWVvdXQiLCAic2hvd01vZGFsRGlhbG9nIiwgInNpemVUb0NvbnRlbnQiLAogICAgInN0b3AiLCAidXVlc2NhcGUiLCAidXBkYXRlQ29tbWFuZHMiLCAiWFBDTmF0aXZlV3JhcHBlciIsCiAgICAiWFBDU2FmZUpTT2piZWN0V3JhcHBlciIsCgogICAgLy8gTW96aWxsYSBXaW5kb3cgZXZlbnQgaGFuZGxlcnMsIHNhbWUgY2l0ZQogICAgIm9uYWJvcnQiLCAib25iZWZvcmV1bmxvYWQiLCAib25jaGFuZ2UiLCAib25jbGljayIsICJvbmNsb3NlIiwKICAgICJvbmNvbnRleHRtZW51IiwgIm9uZHJhZ2Ryb3AiLCAib25lcnJvciIsICJvbmZvY3VzIiwgIm9uaGFzaGNoYW5nZSIsCiAgICAib25rZXlkb3duIiwgIm9ua2V5cHJlc3MiLCAib25rZXl1cCIsICJvbmxvYWQiLCAib25tb3VzZWRvd24iLAogICAgIm9ubW91c2Vtb3ZlIiwgIm9ubW91c2VvdXQiLCAib25tb3VzZW92ZXIiLCAib25tb3VzZXVwIiwKICAgICJvbm1vem9yaWVudGF0aW9uIiwgIm9ucGFpbnQiLCAib25yZXNldCIsICJvbnJlc2l6ZSIsICJvbnNjcm9sbCIsCiAgICAib25zZWxlY3QiLCAib25zdWJtaXQiLCAib251bmxvYWQiLAoKICAgIC8vIFNhZmFyaSBXZWIgQ29udGVudCBHdWlkZQogICAgLy8gaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vbGlicmFyeS9zYWZhcmkvI2RvY3VtZW50YXRpb24vQXBwbGVBcHBsaWNhdGlvbnMvUmVmZXJlbmNlL1NhZmFyaVdlYkNvbnRlbnQvU2FmYXJpV2ViQ29udGVudC5wZGYKICAgIC8vIFdlYktpdCBXaW5kb3cgbWVtYmVyIGRhdGEsIGZyb20gV2ViS2l0IERPTSBSZWZlcmVuY2UKICAgIC8vIChodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9zYWZhcmkvbGlicmFyeS9kb2N1bWVudGF0aW9uL0FwcGxlQXBwbGljYXRpb25zL1JlZmVyZW5jZS9XZWJLaXRET01SZWYvRE9NV2luZG93X2lkbC9DbGFzc2VzL0RPTVdpbmRvdy9pbmRleC5odG1sKQogICAgIm9udG91Y2hjYW5jZWwiLCAib250b3VjaGVuZCIsICJvbnRvdWNobW92ZSIsICJvbnRvdWNoc3RhcnQiLAogICAgIm9uZ2VzdHVyZXN0YXJ0IiwgIm9uZ2VzdHVyZWNoYW5nZSIsICJvbmdlc3R1cmVlbmQiLAoKICAgIC8vIGV4dHJhIHdpbmRvdyBtZXRob2RzCiAgICAidW5ldmFsIiwKCiAgICAvLyBrZXl3b3JkcyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9OZXdfaW5fSmF2YVNjcmlwdF8xLjcsCiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9OZXdfaW5fSmF2YVNjcmlwdF8xLjguMQogICAgImdldFByb3RvdHlwZU9mIiwgImxldCIsICJ5aWVsZCIsCgogICAgLy8gSUUgbWV0aG9kcwogICAgLy8gKGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczUzNTg3MyhWUy44NSkuYXNweCMpCiAgICAiYXR0YWNoRXZlbnQiLCAiY2xpZW50SW5mb3JtYXRpb24iLCAiY2xpcGJvYXJkRGF0YSIsICJjcmVhdGVQb3B1cCIsCiAgICAiZGlhbG9nSGVpZ2h0IiwgImRpYWxvZ0xlZnQiLCAiZGlhbG9nVG9wIiwgImRpYWxvZ1dpZHRoIiwKICAgICJvbmFmdGVycHJpbnQiLCAib25iZWZvcmVkZWFjdGl2YXRlIiwgIm9uYmVmb3JlcHJpbnQiLAogICAgIm9uY29udHJvbHNlbGVjdCIsICJvbmRlYWN0aXZhdGUiLCAib25oZWxwIiwgIm9ucmVzaXplZW5kIiwKCiAgICAvLyBDb21tb24gYnJvd3Nlci1kZWZpbmVkIGlkZW50aWZpZXJzIG5vdCBkZWZpbmVkIGluIEVDTUFTY3JpcHQKICAgICJldmVudCIsICJleHRlcm5hbCIsICJEZWJ1ZyIsICJFbnVtZXJhdG9yIiwgIkdsb2JhbCIsICJJbWFnZSIsCiAgICAiQWN0aXZlWE9iamVjdCIsICJWQkFycmF5IiwgIkNvbXBvbmVudHMiLAoKICAgIC8vIEZ1bmN0aW9ucyBjb21tb25seSBkZWZpbmVkIG9uIE9iamVjdAogICAgInRvU3RyaW5nIiwgImdldENsYXNzIiwgImNvbnN0cnVjdG9yIiwgInByb3RvdHlwZSIsICJ2YWx1ZU9mIiwKCiAgICAvLyBDbGllbnQtc2lkZSBKYXZhU2NyaXB0IGlkZW50aWZpZXJzCiAgICAiQW5jaG9yIiwgIkFwcGxldCIsICJBdHRyIiwgIkNhbnZhcyIsICJDYW52YXNHcmFkaWVudCIsCiAgICAiQ2FudmFzUGF0dGVybiIsICJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQiLCAiQ0RBVEFTZWN0aW9uIiwKICAgICJDaGFyYWN0ZXJEYXRhIiwgIkNvbW1lbnQiLCAiQ1NTMlByb3BlcnRpZXMiLCAiQ1NTUnVsZSIsCiAgICAiQ1NTU3R5bGVTaGVldCIsICJEb2N1bWVudCIsICJEb2N1bWVudEZyYWdtZW50IiwgIkRvY3VtZW50VHlwZSIsCiAgICAiRE9NRXhjZXB0aW9uIiwgIkRPTUltcGxlbWVudGF0aW9uIiwgIkRPTVBhcnNlciIsICJFbGVtZW50IiwgIkV2ZW50IiwKICAgICJFeHRlcm5hbEludGVyZmFjZSIsICJGbGFzaFBsYXllciIsICJGb3JtIiwgIkZyYW1lIiwgIkhpc3RvcnkiLAogICAgIkhUTUxDb2xsZWN0aW9uIiwgIkhUTUxEb2N1bWVudCIsICJIVE1MRWxlbWVudCIsICJJRnJhbWUiLCAiSW1hZ2UiLAogICAgIklucHV0IiwgIkpTT2JqZWN0IiwgIktleUV2ZW50IiwgIkxpbmsiLCAiTG9jYXRpb24iLCAiTWltZVR5cGUiLAogICAgIk1vdXNlRXZlbnQiLCAiTmF2aWdhdG9yIiwgIk5vZGUiLCAiTm9kZUxpc3QiLCAiT3B0aW9uIiwgIlBsdWdpbiIsCiAgICAiUHJvY2Vzc2luZ0luc3RydWN0aW9uIiwgIlJhbmdlIiwgIlJhbmdlRXhjZXB0aW9uIiwgIlNjcmVlbiIsICJTZWxlY3QiLAogICAgIlRhYmxlIiwgIlRhYmxlQ2VsbCIsICJUYWJsZVJvdyIsICJUYWJsZVNlbGVjdGlvbiIsICJUZXh0IiwgIlRleHRBcmVhIiwKICAgICJVSUV2ZW50IiwgIldpbmRvdyIsICJYTUxIdHRwUmVxdWVzdCIsICJYTUxTZXJpYWxpemVyIiwKICAgICJYUGF0aEV4Y2VwdGlvbiIsICJYUGF0aFJlc3VsdCIsICJYU0xUUHJvY2Vzc29yIiwKCiAgICAvLyBUaGVzZSBrZXl3b3JkcyB0cmlnZ2VyIHRoZSBsb2FkaW5nIG9mIHRoZSBqYXZhLXBsdWdpbi4gRm9yIHRoZQogICAgLy8gbmV4dC1nZW5lcmF0aW9uIHBsdWdpbiwgdGhpcyByZXN1bHRzIGluIHN0YXJ0aW5nIGEgbmV3IEphdmEgcHJvY2Vzcy4KICAgICJqYXZhIiwgIlBhY2thZ2VzIiwgIm5ldHNjYXBlIiwgInN1biIsICJKYXZhT2JqZWN0IiwgIkphdmFDbGFzcyIsCiAgICAiSmF2YUFycmF5IiwgIkphdmFNZW1iZXIiLAoKICAgIC8vIEVTNiBjb2xsZWN0aW9ucy4KICAgICJNYXAiLCAiU2V0IiwKICBdOwoKICBzdGF0aWMgY29uc3QgTGlzdDxTdHJpbmc+IHJlc2VydmVkR2xvYmFsT2JqZWN0TmFtZXMgPSBjb25zdCA8U3RyaW5nPlsKICAgICJBIiwKICAgICJCIiwKICAgICJDIiwgLy8gR2xvYmFsIG9iamVjdCBmb3IgKkMqb25zdGFudHMuCiAgICAiRCIsCiAgICAiRSIsCiAgICAiRiIsCiAgICAiRyIsCiAgICAiSCIsIC8vIEdsb2JhbCBvYmplY3QgZm9yIGludGVybmFsICgqSCplbHBlcikgbGlicmFyaWVzLgogICAgLy8gSSBpcyB1c2VkIGZvciB1c2VkIGZvciB0aGUgSXNvbGF0ZSBmdW5jdGlvbi4KICAgICJKIiwgLy8gR2xvYmFsIG9iamVjdCBmb3IgdGhlIGludGVyY2VwdG9yIGxpYnJhcnkuCiAgICAiSyIsCiAgICAiTCIsCiAgICAiTSIsCiAgICAiTiIsCiAgICAiTyIsCiAgICAiUCIsIC8vIEdsb2JhbCBvYmplY3QgZm9yIG90aGVyICpQKmxhdGZvcm0gbGlicmFyaWVzLgogICAgIlEiLAogICAgIlIiLAogICAgIlMiLAogICAgIlQiLAogICAgIlUiLAogICAgIlYiLAogICAgIlciLCAvLyBHbG9iYWwgb2JqZWN0IGZvciAqVyplYiBsaWJyYXJpZXMgKGRhcnQ6aHRtbCkuCiAgICAiWCIsCiAgICAiWSIsCiAgICAiWiIsCiAgXTsKCiAgc3RhdGljIGNvbnN0IExpc3Q8U3RyaW5nPiByZXNlcnZlZEdsb2JhbEhlbHBlckZ1bmN0aW9ucyA9IGNvbnN0IDxTdHJpbmc+WwogICAgImluaXQiLAogICAgIklzb2xhdGUiLAogIF07CgogIHN0YXRpYyBmaW5hbCBMaXN0PFN0cmluZz4gdXNlckdsb2JhbE9iamVjdHMgPQogICAgICBuZXcgTGlzdC5mcm9tKHJlc2VydmVkR2xvYmFsT2JqZWN0TmFtZXMpCiAgICAgICAgLi5yZW1vdmUoJ0MnKQogICAgICAgIC4ucmVtb3ZlKCdIJykKICAgICAgICAuLnJlbW92ZSgnSicpCiAgICAgICAgLi5yZW1vdmUoJ1AnKQogICAgICAgIC4ucmVtb3ZlKCdXJyk7CgogIFNldDxTdHJpbmc+IF9qc1Jlc2VydmVkID0gbnVsbDsKCiAgLy8vIE5hbWVzIHRoYXQgY2Fubm90IGJlIHVzZWQgYnkgbWVtYmVycywgdG9wIGxldmVsIGFuZCBzdGF0aWMKICAvLy8gbWV0aG9kcy4KICBTZXQ8U3RyaW5nPiBnZXQganNSZXNlcnZlZCB7CiAgICBpZiAoX2pzUmVzZXJ2ZWQgPT0gbnVsbCkgewogICAgICBfanNSZXNlcnZlZCA9IG5ldyBTZXQ8U3RyaW5nPigpOwogICAgICBfanNSZXNlcnZlZC5hZGRBbGwoamF2YVNjcmlwdEtleXdvcmRzKTsKICAgICAgX2pzUmVzZXJ2ZWQuYWRkQWxsKHJlc2VydmVkUHJvcGVydHlTeW1ib2xzKTsKICAgIH0KICAgIHJldHVybiBfanNSZXNlcnZlZDsKICB9CgogIGZpbmFsIFN0cmluZyBsYXp5R2V0dGVyUHJlZml4ID0gcickZ2V0JCc7CiAgZmluYWwgU3RyaW5nIHN1cGVyUHJlZml4ID0gcidzdXBlciQnOwogIGZpbmFsIFN0cmluZyBtZXRhZGF0YUZpZWxkID0gJ0AnOwogIGZpbmFsIFN0cmluZyBzdHViTmFtZUZpZWxkID0gcickc3R1Yk5hbWUnOwogIGZpbmFsIFN0cmluZyByZWZsZWN0aW9uSW5mb0ZpZWxkID0gcickcmVmbGVjdGlvbkluZm8nOwogIGZpbmFsIFN0cmluZyByZWZsZWN0aW9uTmFtZUZpZWxkID0gcickcmVmbGVjdGlvbk5hbWUnOwogIGZpbmFsIFN0cmluZyBtZXRhZGF0YUluZGV4RmllbGQgPSByJyRtZXRhZGF0YUluZGV4JzsKICBmaW5hbCBTdHJpbmcgbWV0aG9kc1dpdGhPcHRpb25hbEFyZ3VtZW50c0ZpZWxkID0KICAgICAgcickbWV0aG9kc1dpdGhPcHRpb25hbEFyZ3VtZW50cyc7CgogIEBvdmVycmlkZQogIGZpbmFsIFJ1bnRpbWVUeXBlVGFncyBydGlUYWdzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBGaXhlZE5hbWVzIGZpeGVkTmFtZXM7CgogIC8vLyBUaGUgbm9uLW1pbmlmeWluZyBuYW1lcidzIFtjYWxsUHJlZml4XSB3aXRoIGEgZG9sbGFyIGFmdGVyIGl0LgogIHN0YXRpYyBjb25zdCBTdHJpbmcgX2NhbGxQcmVmaXhEb2xsYXIgPSByJ2NhbGwkJzsKCiAgc3RhdGljIGZpbmFsIGpzQXN0Lk5hbWUgX2xpdGVyYWxEb2xsYXIgPSBuZXcgU3RyaW5nQmFja2VkTmFtZShyJyQnKTsKICBzdGF0aWMgZmluYWwganNBc3QuTmFtZSBfbGl0ZXJhbFVuZGVyc2NvcmUgPSBuZXcgU3RyaW5nQmFja2VkTmFtZSgnXycpOwogIHN0YXRpYyBmaW5hbCBqc0FzdC5OYW1lIGxpdGVyYWxQbHVzID0gbmV3IFN0cmluZ0JhY2tlZE5hbWUoJysnKTsKICBzdGF0aWMgZmluYWwganNBc3QuTmFtZSBfbGl0ZXJhbER5bmFtaWMgPSBuZXcgU3RyaW5nQmFja2VkTmFtZSgiZHluYW1pYyIpOwoKICBqc0FzdC5OYW1lIF9saXRlcmFsR2V0dGVyUHJlZml4OwogIGpzQXN0Lk5hbWUgX2xpdGVyYWxTZXR0ZXJQcmVmaXg7CgogIGpzQXN0Lk5hbWUgX3N0YXRpY3NQcm9wZXJ0eU5hbWU7CgogIGpzQXN0Lk5hbWUgZ2V0IHN0YXRpY3NQcm9wZXJ0eU5hbWUgPT4KICAgICAgX3N0YXRpY3NQcm9wZXJ0eU5hbWUgPz89IG5ldyBTdHJpbmdCYWNrZWROYW1lKCdzdGF0aWMnKTsKCiAganNBc3QuTmFtZSBfcnRpRmllbGRKc05hbWU7CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgZ2V0IHJ0aUZpZWxkSnNOYW1lID0+CiAgICAgIF9ydGlGaWVsZEpzTmFtZSA/Pz0gbmV3IFN0cmluZ0JhY2tlZE5hbWUoZml4ZWROYW1lcy5ydGlOYW1lKTsKCiAgLy8gTmFtZSBvZiBwcm9wZXJ0eSBpbiBhIGNsYXNzIGRlc2NyaXB0aW9uIGZvciB0aGUgbmF0aXZlIGRpc3BhdGNoIG1ldGFkYXRhLgogIGZpbmFsIFN0cmluZyBuYXRpdmVTcGVjUHJvcGVydHkgPSAnJSc7CgogIHN0YXRpYyBmaW5hbCBSZWdFeHAgSURFTlRJRklFUiA9IG5ldyBSZWdFeHAocideW0EtWmEtel8kXVtBLVphLXowLTlfJF0qJCcpOwogIHN0YXRpYyBmaW5hbCBSZWdFeHAgTk9OX0lERU5USUZJRVJfQ0hBUiA9IG5ldyBSZWdFeHAocidbXkEtWmEtel8wLTkkXScpOwoKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwoKICAvLy8gVXNlZCBkaXNhbWJpZ3VhdGVkIG5hbWVzIGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLCBpc3N1ZWQgYnkKICAvLy8gW19kaXNhbWJpZ3VhdGVHbG9iYWxdLCBhbmQgW19kaXNhbWJpZ3VhdGVJbnRlcm5hbEdsb2JhbF0uCiAgLy8vCiAgLy8vIEFsdGhvdWdoIGdsb2JhbCBuYW1lcyBhcmUgZGlzdHJpYnV0ZWQgYWNyb3NzIGEgbnVtYmVyIG9mIGdsb2JhbCBvYmplY3RzLAogIC8vLyAoc2VlIFtnbG9iYWxPYmplY3RGb3JdKSwgd2UgY3VycmVudGx5IHVzZSBhIHNpbmdsZSBuYW1lc3BhY2UgZm9yIGFsbCB0aGVzZQogIC8vLyBuYW1lcy4KICBmaW5hbCBOYW1pbmdTY29wZSBnbG9iYWxTY29wZSA9IE5hbWluZ1Njb3BlKCk7CiAgZmluYWwgTWFwPEVudGl0eSwganNBc3QuTmFtZT4gdXNlckdsb2JhbHMgPSB7fTsKICAvLyBbdXNlckdsb2JhbHNTZWNvbmROYW1lXSBpcyB1c2VkIHdoZW4gYW4gZW50aXR5IGhhcyBhIHNlY29uZCBuYW1lLCBlLmcuIGEKICAvLyBsYXppbHkgaW5pdGlhbGl6ZWQgc3RhdGljIHZhcmlhYmxlIGhhcyBhIGxvY2F0aW9uIGFuZCBhIGdldHRlci4KICBmaW5hbCBNYXA8RW50aXR5LCBqc0FzdC5OYW1lPiB1c2VyR2xvYmFsc1NlY29uZE5hbWUgPSB7fTsKICBmaW5hbCBNYXA8U3RyaW5nLCBqc0FzdC5OYW1lPiBpbnRlcm5hbEdsb2JhbHMgPSB7fTsKCiAgX3JlZ2lzdGVyTmFtZSgKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBtYXAsIGpzQXN0Lk5hbWUganNOYW1lLCBTdHJpbmcgb3JpZ2luYWxOYW1lKSB7CiAgICAvLyBOb24tZmluYWxpemVkIG5hbWVzIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgb3V0cHV0IHByb2dyYW0KICAgIGlmIChqc05hbWUgaXMgVG9rZW5OYW1lICYmICFqc05hbWUuaXNGaW5hbGl6ZWQpIHJldHVybjsKICAgIG1hcFtqc05hbWUubmFtZV0gPSBvcmlnaW5hbE5hbWU7CiAgICB2YXIgZ2V0dGVyTmFtZSA9IHVzZXJHZXR0ZXJzW2pzTmFtZV07CiAgICBpZiAoZ2V0dGVyTmFtZSAhPSBudWxsKSBtYXBbZ2V0dGVyTmFtZS5uYW1lXSA9IG9yaWdpbmFsTmFtZTsKICAgIHZhciBzZXR0ZXJOYW1lID0gdXNlclNldHRlcnNbanNOYW1lXTsKICAgIGlmIChzZXR0ZXJOYW1lICE9IG51bGwpIG1hcFtzZXR0ZXJOYW1lLm5hbWVdID0gb3JpZ2luYWxOYW1lOwogIH0KCiAgTWFwPFN0cmluZywgU3RyaW5nPiBjcmVhdGVNaW5pZmllZEdsb2JhbE5hbWVNYXAoKSB7CiAgICB2YXIgbWFwID0gPFN0cmluZywgU3RyaW5nPnt9OwogICAgdXNlckdsb2JhbHMuZm9yRWFjaCgoZW50aXR5LCBqc05hbWUpIHsKICAgICAgX3JlZ2lzdGVyTmFtZShtYXAsIGpzTmFtZSwgZW50aXR5Lm5hbWUpOwogICAgfSk7CiAgICB1c2VyR2xvYmFsc1NlY29uZE5hbWUuZm9yRWFjaCgoZW50aXR5LCBqc05hbWUpIHsKICAgICAgX3JlZ2lzdGVyTmFtZShtYXAsIGpzTmFtZSwgZW50aXR5Lm5hbWUpOwogICAgfSk7CiAgICBpbnRlcm5hbEdsb2JhbHMuZm9yRWFjaCgobmFtZSwganNOYW1lKSB7CiAgICAgIF9yZWdpc3Rlck5hbWUobWFwLCBqc05hbWUsIG5hbWUpOwogICAgfSk7CiAgICByZXR1cm4gbWFwOwogIH0KCiAgLy8vIFVzZWQgZGlzYW1iaWd1YXRlZCBuYW1lcyBpbiB0aGUgaW5zdGFuY2UgbmFtZXNwYWNlLCBpc3N1ZWQgYnkKICAvLy8gW19kaXNhbWJpZ3VhdGVNZW1iZXJdLCBbX2Rpc2FtYmlndWF0ZUludGVybmFsTWVtYmVyXSwKICAvLy8gW19kaXNhbWJpZ3VhdGVPcGVyYXRvcl0sIGFuZCBbcmVzZXJ2ZVB1YmxpY01lbWJlck5hbWVdLgogIGZpbmFsIE5hbWluZ1Njb3BlIGluc3RhbmNlU2NvcGUgPSBOYW1pbmdTY29wZSgpOwogIGZpbmFsIE1hcDxTdHJpbmcsIGpzQXN0Lk5hbWU+IHVzZXJJbnN0YW5jZU1lbWJlcnMgPSBIYXNoTWFwKCk7CiAgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiB1c2VySW5zdGFuY2VNZW1iZXJzT3JpZ2luYWxOYW1lID0gSGFzaE1hcCgpOwogIGZpbmFsIE1hcDxNZW1iZXJFbnRpdHksIGpzQXN0Lk5hbWU+IGludGVybmFsSW5zdGFuY2VNZW1iZXJzID0gSGFzaE1hcCgpOwogIGZpbmFsIE1hcDxTdHJpbmcsIGpzQXN0Lk5hbWU+IHVzZXJJbnN0YW5jZU9wZXJhdG9ycyA9IEhhc2hNYXAoKTsKICBmaW5hbCBNYXA8anNBc3QuTmFtZSwganNBc3QuTmFtZT4gdXNlckdldHRlcnMgPSBIYXNoTWFwKCk7CiAgZmluYWwgTWFwPGpzQXN0Lk5hbWUsIGpzQXN0Lk5hbWU+IHVzZXJTZXR0ZXJzID0gSGFzaE1hcCgpOwogIGZpbmFsIE1hcDxUeXBlVmFyaWFibGVFbnRpdHksIGpzQXN0Lk5hbWU+IF90eXBlVmFyaWFibGVOYW1lcyA9IHt9OwoKICBNYXA8U3RyaW5nLCBTdHJpbmc+IGNyZWF0ZU1pbmlmaWVkSW5zdGFuY2VOYW1lTWFwKCkgewogICAgdmFyIG1hcCA9IDxTdHJpbmcsIFN0cmluZz57fTsKICAgIGludGVybmFsSW5zdGFuY2VNZW1iZXJzLmZvckVhY2goKGVudGl0eSwganNOYW1lKSB7CiAgICAgIF9yZWdpc3Rlck5hbWUobWFwLCBqc05hbWUsIGVudGl0eS5uYW1lKTsKICAgIH0pOwogICAgdXNlckluc3RhbmNlTWVtYmVycy5mb3JFYWNoKChuYW1lLCBqc05hbWUpIHsKICAgICAgX3JlZ2lzdGVyTmFtZShtYXAsIGpzTmFtZSwgdXNlckluc3RhbmNlTWVtYmVyc09yaWdpbmFsTmFtZVtuYW1lXSA/PyBuYW1lKTsKICAgIH0pOwoKICAgIC8vIFRPRE8oc2lnbXVuZCk6IHJldmVyc2UgdGhlIG9wZXJhdG9yIG5hbWVzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIERhcnQKICAgIC8vIG5hbWVzLgogICAgdXNlckluc3RhbmNlT3BlcmF0b3JzLmZvckVhY2goKG5hbWUsIGpzTmFtZSkgewogICAgICBfcmVnaXN0ZXJOYW1lKG1hcCwganNOYW1lLCBuYW1lKTsKICAgIH0pOwogICAgcmV0dXJuIG1hcDsKICB9CgogIC8vLyBVc2VkIHRvIGRpc2FtYmlndWF0ZSBuYW1lcyBmb3IgY29uc3RhbnRzIGluIFtjb25zdGFudE5hbWVdLgogIGZpbmFsIE5hbWluZ1Njb3BlIF9jb25zdGFudFNjb3BlID0gbmV3IE5hbWluZ1Njb3BlKCk7CgogIC8vLyBVc2VkIHRvIHN0b3JlIHNjb3BlcyBmb3IgaW5zdGFuY2VzIG9mIFtQcml2YXRlbHlOYW1lZEpzRW50aXR5XQogIGZpbmFsIE1hcDxFbnRpdHksIE5hbWluZ1Njb3BlPiBfcHJpdmF0ZU5hbWluZ1Njb3BlcyA9IHt9OwoKICBmaW5hbCBNYXA8U3RyaW5nLCBpbnQ+IHBvcHVsYXJOYW1lQ291bnRlcnMgPSB7fTsKCiAgZmluYWwgTWFwPExpYnJhcnlFbnRpdHksIFN0cmluZz4gbGlicmFyeUxvbmdOYW1lcyA9IEhhc2hNYXAoKTsKCiAgZmluYWwgTWFwPENvbnN0YW50VmFsdWUsIGpzQXN0Lk5hbWU+IF9jb25zdGFudE5hbWVzID0gSGFzaE1hcCgpOwogIGZpbmFsIE1hcDxDb25zdGFudFZhbHVlLCBTdHJpbmc+IF9jb25zdGFudExvbmdOYW1lcyA9IHt9OwogIENvbnN0YW50Q2Fub25pY2FsSGFzaGVyIF9jb25zdGFudEhhc2hlcjsKCiAgLy8vIE1hcHMgcHJpdmF0ZSBuYW1lcyB0byBhIGxpYnJhcnkgdGhhdCBtYXkgdXNlIHRoYXQgbmFtZSB3aXRob3V0IHByZWZpeGluZwogIC8vLyBpdHNlbGYuIFVzZWQgZm9yIGJ1aWxkaW5nIHByb3Bvc2VkIG5hbWVzLgogIGZpbmFsIE1hcDxTdHJpbmcsIExpYnJhcnlFbnRpdHk+IHNob3J0UHJpdmF0ZU5hbWVPd25lcnMgPSB7fTsKCiAgLy8vIFVzZWQgdG8gc3RvcmUgdW5pcXVlIGtleXMgZm9yIGxpYnJhcnkgbmFtZXMuIEtleXMgYXJlIG5vdCB1c2VkIGFzIG5hbWVzLAogIC8vLyBub3IgYXJlIHRoZXkgdmlzaWJsZSBpbiB0aGUgb3V0cHV0LiBUaGUgb25seSBzZXJ2ZSBhcyBhbiBpbnRlcm5hbAogIC8vLyBrZXkgaW50byBtYXBzLgogIGZpbmFsIE1hcDxMaWJyYXJ5RW50aXR5LCBTdHJpbmc+IF9saWJyYXJ5S2V5cyA9IEhhc2hNYXAoKTsKCiAgTmFtZXIodGhpcy5fY2xvc2VkV29ybGQsIHRoaXMucnRpVGFncywgdGhpcy5maXhlZE5hbWVzKSB7CiAgICBfbGl0ZXJhbEdldHRlclByZWZpeCA9IG5ldyBTdHJpbmdCYWNrZWROYW1lKGZpeGVkTmFtZXMuZ2V0dGVyUHJlZml4KTsKICAgIF9saXRlcmFsU2V0dGVyUHJlZml4ID0gbmV3IFN0cmluZ0JhY2tlZE5hbWUoZml4ZWROYW1lcy5zZXR0ZXJQcmVmaXgpOwogIH0KCiAgSkVsZW1lbnRFbnZpcm9ubWVudCBnZXQgX2VsZW1lbnRFbnZpcm9ubWVudCA9PgogICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50OwoKICBAb3ZlcnJpZGUKICBDb21tb25FbGVtZW50cyBnZXQgX2NvbW1vbkVsZW1lbnRzID0+IF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50czsKCiAgTmF0aXZlRGF0YSBnZXQgX25hdGl2ZURhdGEgPT4gX2Nsb3NlZFdvcmxkLm5hdGl2ZURhdGE7CgogIFN0cmluZyBnZXQgZGVmZXJyZWRNZXRhZGF0YU5hbWUgPT4gJ2RlZmVycmVkTWV0YWRhdGEnOwogIFN0cmluZyBnZXQgZGVmZXJyZWRUeXBlc05hbWUgPT4gJ2RlZmVycmVkVHlwZXMnOwogIFN0cmluZyBnZXQgaXNvbGF0ZU5hbWUgPT4gJ0lzb2xhdGUnOwogIFN0cmluZyBnZXQgaXNvbGF0ZVByb3BlcnRpZXNOYW1lID0+IHInJGlzb2xhdGVQcm9wZXJ0aWVzJzsKICBqc0FzdC5OYW1lIGdldCBub1N1Y2hNZXRob2ROYW1lID0+IGludm9jYXRpb25OYW1lKFNlbGVjdG9ycy5ub1N1Y2hNZXRob2RfKTsKCiAgLy8vIFNvbWUgY2xvc3VyZXMgbXVzdCBjb250YWluIHRoZWlyIG5hbWUuIFRoZSBuYW1lIGlzIHN0b3JlZCBpbgogIC8vLyBbU1RBVElDX0NMT1NVUkVfTkFNRV9OQU1FXS4KICBTdHJpbmcgZ2V0IFNUQVRJQ19DTE9TVVJFX05BTUVfTkFNRSA9PiByJyRuYW1lJzsKICBTdHJpbmcgZ2V0IGNsb3N1cmVJbnZvY2F0aW9uU2VsZWN0b3JOYW1lID0+IElkZW50aWZpZXJzLmNhbGw7CiAgYm9vbCBnZXQgc2hvdWxkTWluaWZ5ID0+IGZhbHNlOwoKICBOYW1pbmdTY29wZSBfZ2V0UHJpdmF0ZVNjb3BlRm9yKFByaXZhdGVseU5hbWVkSlNFbnRpdHkgZW50aXR5KSB7CiAgICByZXR1cm4gX3ByaXZhdGVOYW1pbmdTY29wZXMucHV0SWZBYnNlbnQoCiAgICAgICAgZW50aXR5LnJvb3RPZlNjb3BlLCAoKSA9PiBuZXcgTmFtaW5nU2NvcGUoKSk7CiAgfQoKICAvLy8gUmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoZSBnaXZlbiBbbmFtZV0uCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgdGhhdCBldmVyeSB1c2Ugc2l0ZSBvZiBhIG5hbWUgaGFzIGEgdW5pcXVlIG5vZGUgc28KICAvLy8gdGhhdCB3ZSBjYW4gcHJvcGVybHkgYXR0cmlidXRlIHNvdXJjZSBpbmZvcm1hdGlvbi4KICBqc0FzdC5OYW1lIF9uZXdSZWZlcmVuY2UoanNBc3QuTmFtZSBuYW1lKSB7CiAgICByZXR1cm4gbmV3IF9OYW1lUmVmZXJlbmNlKG5hbWUpOwogIH0KCiAgLy8vIERpc2FtYmlndWF0ZWQgbmFtZSBmb3IgW2NvbnN0YW50XS4KICAvLy8KICAvLy8gVW5pcXVlIHdpdGhpbiB0aGUgZ2xvYmFsLW1lbWJlciBuYW1lc3BhY2UuCiAganNBc3QuTmFtZSBjb25zdGFudE5hbWUoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgewogICAgLy8gSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIGdpdmUgbmFtZXMgdG8KICAgIC8vIGZ1bmN0aW9uIGNvbnN0YW50cyBzaW5jZSB0aGUgZnVuY3Rpb24taW1wbGVtZW50YXRpb24gaXRzZWxmIHNlcnZlcyBhcwogICAgLy8gY29uc3RhbnQgYW5kIGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseS4KICAgIGFzc2VydCghY29uc3RhbnQuaXNGdW5jdGlvbik7CiAgICBqc0FzdC5OYW1lIHJlc3VsdCA9IF9jb25zdGFudE5hbWVzW2NvbnN0YW50XTsKICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgewogICAgICBTdHJpbmcgbG9uZ05hbWUgPSBjb25zdGFudExvbmdOYW1lKGNvbnN0YW50KTsKICAgICAgcmVzdWx0ID0gZ2V0RnJlc2hOYW1lKF9jb25zdGFudFNjb3BlLCBsb25nTmFtZSk7CiAgICAgIF9jb25zdGFudE5hbWVzW2NvbnN0YW50XSA9IHJlc3VsdDsKICAgIH0KICAgIHJldHVybiBfbmV3UmVmZXJlbmNlKHJlc3VsdCk7CiAgfQoKICAvLy8gUHJvcG9zZWQgbmFtZSBmb3IgW2NvbnN0YW50XS4KICBTdHJpbmcgY29uc3RhbnRMb25nTmFtZShDb25zdGFudFZhbHVlIGNvbnN0YW50KSB7CiAgICBTdHJpbmcgbG9uZ05hbWUgPSBfY29uc3RhbnRMb25nTmFtZXNbY29uc3RhbnRdOwogICAgaWYgKGxvbmdOYW1lID09IG51bGwpIHsKICAgICAgX2NvbnN0YW50SGFzaGVyID8/PSBuZXcgQ29uc3RhbnRDYW5vbmljYWxIYXNoZXIodGhpcywgX2Nsb3NlZFdvcmxkKTsKICAgICAgbG9uZ05hbWUgPSBuZXcgQ29uc3RhbnROYW1pbmdWaXNpdG9yKHRoaXMsIF9jbG9zZWRXb3JsZCwgX2NvbnN0YW50SGFzaGVyKQogICAgICAgICAgLmdldE5hbWUoY29uc3RhbnQpOwogICAgICBfY29uc3RhbnRMb25nTmFtZXNbY29uc3RhbnRdID0gbG9uZ05hbWU7CiAgICB9CiAgICByZXR1cm4gbG9uZ05hbWU7CiAgfQoKICAvLy8gSWYgdGhlIFtvcmlnaW5hbE5hbWVdIGlzIG5vdCBwcml2YXRlIHJldHVybnMgW29yaWdpbmFsTmFtZV0uIE90aGVyd2lzZQogIC8vLyBtYW5nbGVzIHRoZSBbb3JpZ2luYWxOYW1lXSBzbyB0aGF0IGVhY2ggbGlicmFyeSBoYXMgaXRzIG93biBkaXN0aW5ndWlzaGVkCiAgLy8vIHZlcnNpb24gb2YgdGhlIG5hbWUuCiAgLy8vCiAgLy8vIEFsdGhvdWdoIHRoZSBuYW1lIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIHVuaXF1ZSB3aXRoaW4gYW55IG5hbWVzcGFjZSwKICAvLy8gY2xhc2hlcyBhcmUgdmVyeSB1bmxpa2VseSBpbiBwcmFjdGljZS4gVGhlcmVmb3JlLCBpdCBjYW4gYmUgdXNlZCBpbiBjYXNlcwogIC8vLyB3aGVyZSB1bmlxdWVuZXNzIGlzIG5pY2UgYnV0IG5vdCBhIHN0cmljdCByZXF1aXJlbWVudC4KICAvLy8KICAvLy8gVGhlIHJlc3VsdGluZyBuYW1lIGlzIGEgKnByb3Bvc2VkIG5hbWUqIGFuZCBpcyBuZXZlciBtaW5pZmllZC4KICBTdHJpbmcgcHJpdmF0ZU5hbWUoTmFtZSBvcmlnaW5hbE5hbWUpIHsKICAgIFN0cmluZyB0ZXh0ID0gb3JpZ2luYWxOYW1lLnRleHQ7CgogICAgLy8gUHVibGljIG5hbWVzIGFyZSBlYXN5LgogICAgaWYgKCFvcmlnaW5hbE5hbWUuaXNQcml2YXRlKSByZXR1cm4gdGV4dDsKCiAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnkgPSBvcmlnaW5hbE5hbWUubGlicmFyeTsKCiAgICAvLyBUaGUgZmlyc3QgbGlicmFyeSBhc2tpbmcgZm9yIGEgc2hvcnQgcHJpdmF0ZSBuYW1lIHdpbnMuCiAgICBMaWJyYXJ5RW50aXR5IG93bmVyID0KICAgICAgICBzaG9ydFByaXZhdGVOYW1lT3duZXJzLnB1dElmQWJzZW50KHRleHQsICgpID0+IGxpYnJhcnkpOwoKICAgIGlmIChvd25lciA9PSBsaWJyYXJ5KSB7CiAgICAgIHJldHVybiB0ZXh0OwogICAgfSBlbHNlIHsKICAgICAgLy8gTWFrZSBzdXJlIHRvIHJldHVybiBhIHByaXZhdGUgbmFtZSB0aGF0IHN0YXJ0cyB3aXRoIF8gc28gaXQKICAgICAgLy8gY2Fubm90IGNsYXNoIHdpdGggYW55IHB1YmxpYyBuYW1lcy4KICAgICAgLy8gVGhlIG5hbWUgaXMgc3RpbGwgbm90IGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVlLCBzaW5jZSBib3RoIHRoZSBsaWJyYXJ5CiAgICAgIC8vIG5hbWUgYW5kIG9yaWdpbmFsTmFtZSBjb3VsZCBjb250YWluICQgc3ltYm9scyBhbmQgYXMgdGhlIGxpYnJhcnkKICAgICAgLy8gbmFtZSBpdHNlbGYgbWlnaHQgY2xhc2guCiAgICAgIFN0cmluZyBsaWJyYXJ5TmFtZSA9IF9wcm9wb3NlTmFtZUZvckxpYnJhcnkobGlicmFyeSk7CiAgICAgIHJldHVybiAiXyRsaWJyYXJ5TmFtZVwkJHRleHQiOwogICAgfQogIH0KCiAgU3RyaW5nIF9wcm9wb3NlTmFtZUZvckNvbnN0cnVjdG9yQm9keShDb25zdHJ1Y3RvckJvZHlFbnRpdHkgbWV0aG9kKSB7CiAgICBTdHJpbmcgbmFtZSA9IHV0aWxzLnJlY29uc3RydWN0Q29uc3RydWN0b3JOYW1lU291cmNlU3RyaW5nKG1ldGhvZCk7CiAgICAvLyBXZSBpbmNsdWRlIHRoZSBtZXRob2Qgc3VmZml4IG9uIGNvbnN0cnVjdG9yIGJvZGllcy4gSXQgaGFzIG5vIHB1cnBvc2UsCiAgICAvLyBidXQgdGhpcyB3YXkgaXQgcHJvZHVjZXMgdGhlIHNhbWUgbmFtZXMgYXMgcHJldmlvdXMgdmVyc2lvbnMgb2YgdGhlCiAgICAvLyBOYW1lciBjbGFzcyBkaWQuCiAgICBMaXN0PFN0cmluZz4gc3VmZml4ID0gY2FsbFN1ZmZpeEZvclNpZ25hdHVyZShtZXRob2QucGFyYW1ldGVyU3RydWN0dXJlKTsKICAgIHJldHVybiAnJG5hbWVcJCR7c3VmZml4LmpvaW4ocickJyl9JzsKICB9CgogIC8vLyBOYW1lIGZvciBhIGNvbnN0cnVjdG9yIGJvZHkuCiAganNBc3QuTmFtZSBjb25zdHJ1Y3RvckJvZHlOYW1lKENvbnN0cnVjdG9yQm9keUVudGl0eSBjdG9yKSB7CiAgICByZXR1cm4gX2Rpc2FtYmlndWF0ZUludGVybmFsTWVtYmVyKAogICAgICAgIGN0b3IsICgpID0+IF9wcm9wb3NlTmFtZUZvckNvbnN0cnVjdG9yQm9keShjdG9yKSk7CiAgfQoKICAvLy8gTmFtZSBmb3IgYSBnZW5lcmF0b3IgYm9keS4KICBqc0FzdC5OYW1lIGdlbmVyYXRvckJvZHlJbnN0YW5jZU1ldGhvZE5hbWUoSkdlbmVyYXRvckJvZHkgbWV0aG9kKSB7CiAgICBhc3NlcnQobWV0aG9kLmlzSW5zdGFuY2VNZW1iZXIpOwogICAgLy8gVE9ETyhzcmEpOiBFeGNlcHQgZm9yIG1ldGhvZHMgZGVjbGFyZWQgaW4gbWl4aW5zLCB3ZSBjYW4gdXNlIGEgY29tcGFjdAogICAgLy8gbmFtaW5nIHNjaGVtZSBsaWtlIHdlIGRvIGZvciBbQ29uc3RydWN0b3JCb2R5RW50aXR5XS4KICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uID0gbWV0aG9kLmZ1bmN0aW9uOwogICAgcmV0dXJuIF9kaXNhbWJpZ3VhdGVJbnRlcm5hbE1lbWJlcihtZXRob2QsICgpIHsKICAgICAgU3RyaW5nIGludm9jYXRpb25OYW1lID0gb3BlcmF0b3JOYW1lVG9JZGVudGlmaWVyKGZ1bmN0aW9uLm5hbWUpOwogICAgICAvLyBUT0RPKHNyYSk6IElmIHRoZSBnZW5lcmF0b3IgaXMgZm9yIGEgY2xvc3VyZSdzICdjYWxsJyBtZXRob2QsIHdlIGRvbid0CiAgICAgIC8vIG5lZWQgdG8gaW5jb3Jwb3JhdGUgdGhlIGVuY2xvc2luZyBjbGFzcy4KICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IG1ldGhvZC5lbmNsb3NpbmdDbGFzcy5uYW1lLnJlcGxhY2VBbGwoJyYnLCAnXycpOwogICAgICByZXR1cm4gJyR7aW52b2NhdGlvbk5hbWV9XCRib2R5XCQke2NsYXNzTmFtZX0nOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5OYW1lIGluc3RhbmNlTWV0aG9kTmFtZShGdW5jdGlvbkVudGl0eSBtZXRob2QpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEF2b2lkIHRoZSB1c2Ugb2YgW0NvbnN0cnVjdG9yQm9keUVudGl0eV0gYW5kCiAgICAvLyBbSkdlbmVyYXRvckJvZHldLiBUaGUgY29kZWdlbiBtb2RlbCBzaG91bGQgYmUgZXhwbGljaXQgYWJvdXQgaXRzCiAgICAvLyBjb25zdHJ1Y3RvciBib2R5IGVsZW1lbnRzLgogICAgaWYgKG1ldGhvZCBpcyBDb25zdHJ1Y3RvckJvZHlFbnRpdHkpIHsKICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yQm9keU5hbWUobWV0aG9kKTsKICAgIH0KICAgIGlmIChtZXRob2QgaXMgSkdlbmVyYXRvckJvZHkpIHsKICAgICAgcmV0dXJuIGdlbmVyYXRvckJvZHlJbnN0YW5jZU1ldGhvZE5hbWUobWV0aG9kKTsKICAgIH0KICAgIHJldHVybiBpbnZvY2F0aW9uTmFtZShuZXcgU2VsZWN0b3IuZnJvbUVsZW1lbnQobWV0aG9kKSk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgYW5ub3RhdGVkIG5hbWUgZm9yIGEgdmFyaWFudCBvZiBgY2FsbGAuCiAgLy8vIFRoZSByZXN1bHQgaGFzIHRoZSBmb3JtOgogIC8vLwogIC8vLyAgICAgY2FsbCQ8Tj4kbmFtZWRQYXJhbTEuLi4kbmFtZWRQYXJhbTxNPgogIC8vLwogIC8vLyBUaGlzIG5hbWUgY2Fubm90IGJlIG1pbmlmaWVkIGJlY2F1c2UgaXQgaXMgZ2VuZXJhdGVkIGJ5IHN0cmluZwogIC8vLyBjb25jYXRlbmF0aW9uIGF0IHJ1bnRpbWUsIGJ5IGFwcGx5RnVuY3Rpb24gaW4ganNfaGVscGVyLmRhcnQuCiAganNBc3QuTmFtZSBkZXJpdmVDYWxsTWV0aG9kTmFtZShMaXN0PFN0cmluZz4gc3VmZml4KSB7CiAgICAvLyBUT0RPKGFzZ2VyZik6IEF2b2lkIGNsYXNoZXMgd2hlbiBuYW1lZCBwYXJhbWV0ZXJzIGNvbnRhaW4gJCBzeW1ib2xzLgogICAgcmV0dXJuIG5ldyBTdHJpbmdCYWNrZWROYW1lKAogICAgICAgICcke2ZpeGVkTmFtZXMuY2FsbFByZWZpeH1cJCR7c3VmZml4LmpvaW4ocickJyl9Jyk7CiAgfQoKICAvLy8gVGhlIHN1ZmZpeCBsaXN0IGZvciB0aGUgcGF0dGVybjoKICAvLy8KICAvLy8gICAgICQ8VD4kPE4+JG5hbWVkUGFyYW0xLi4uJG5hbWVkUGFyYW08TT4KICAvLy8KICAvLy8gV2hlcmUgPFQ+IGlzIHRoZSBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHMsIDxOPiBpcyB0aGUgbnVtYmVyIG9mIHBvc2l0aW9uYWwKICAvLy8gYXJndW1lbnRzIGFuZCA8TT4gaXMgdGhlIG51bWJlciBvZiBuYW1lZCBhcmd1bWVudHMuCiAgLy8vCiAgLy8vIElmIHRoZXJlIGFyZSBubyB0eXBlIGFyZ3VtZW50cyB0aGUgYCQ8VD5gIGlzIG9taXR0ZWQuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCBmb3IgdGhlIGFubm90YXRlZCBuYW1lcyBvZiBgY2FsbGAsIGFuZCBmb3IgdGhlIHByb3Bvc2VkIG5hbWUKICAvLy8gZm9yIG90aGVyIGluc3RhbmNlIG1ldGhvZHMuCiAgc3RhdGljIExpc3Q8U3RyaW5nPiBjYWxsU3VmZml4Rm9yU3RydWN0dXJlKENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSkgewogICAgTGlzdDxTdHJpbmc+IHN1ZmZpeGVzID0gW107CiAgICBpZiAoY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRDb3VudCA+IDApIHsKICAgICAgc3VmZml4ZXMuYWRkKCcke2NhbGxTdHJ1Y3R1cmUudHlwZUFyZ3VtZW50Q291bnR9Jyk7CiAgICB9CiAgICBzdWZmaXhlcy5hZGQoJyR7Y2FsbFN0cnVjdHVyZS5hcmd1bWVudENvdW50fScpOwogICAgc3VmZml4ZXMuYWRkQWxsKGNhbGxTdHJ1Y3R1cmUuZ2V0T3JkZXJlZE5hbWVkQXJndW1lbnRzKCkpOwogICAgcmV0dXJuIHN1ZmZpeGVzOwogIH0KCiAgLy8vIFRoZSBzdWZmaXggbGlzdCBmb3IgdGhlIHBhdHRlcm46CiAgLy8vCiAgLy8vICAgICAkPE4+JG5hbWVkUGFyYW0xLi4uJG5hbWVkUGFyYW08TT4KICAvLy8KICAvLy8gVGhpcyBpcyB1c2VkIGZvciB0aGUgYW5ub3RhdGVkIG5hbWVzIG9mIGBjYWxsYCwgYW5kIGZvciB0aGUgcHJvcG9zZWQgbmFtZQogIC8vLyBmb3Igb3RoZXIgaW5zdGFuY2UgbWV0aG9kcy4KICBMaXN0PFN0cmluZz4gY2FsbFN1ZmZpeEZvclNpZ25hdHVyZShQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlKSB7CiAgICBMaXN0PFN0cmluZz4gc3VmZml4ZXMgPSBbJyR7cGFyYW1ldGVyU3RydWN0dXJlLnRvdGFsUGFyYW1ldGVyc30nXTsKICAgIHN1ZmZpeGVzLmFkZEFsbChwYXJhbWV0ZXJTdHJ1Y3R1cmUubmFtZWRQYXJhbWV0ZXJzKTsKICAgIHJldHVybiBzdWZmaXhlczsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgaW52b2NhdGlvbk5hbWUoU2VsZWN0b3Igc2VsZWN0b3IpIHsKICAgIHN3aXRjaCAoc2VsZWN0b3Iua2luZCkgewogICAgICBjYXNlIFNlbGVjdG9yS2luZC5HRVRURVI6CiAgICAgICAganNBc3QuTmFtZSBkaXNhbWJpZ3VhdGVkTmFtZSA9IF9kaXNhbWJpZ3VhdGVNZW1iZXIoc2VsZWN0b3IubWVtYmVyTmFtZSk7CiAgICAgICAgcmV0dXJuIGRlcml2ZUdldHRlck5hbWUoZGlzYW1iaWd1YXRlZE5hbWUpOwoKICAgICAgY2FzZSBTZWxlY3RvcktpbmQuU0VUVEVSOgogICAgICAgIGpzQXN0Lk5hbWUgZGlzYW1iaWd1YXRlZE5hbWUgPSBfZGlzYW1iaWd1YXRlTWVtYmVyKHNlbGVjdG9yLm1lbWJlck5hbWUpOwogICAgICAgIHJldHVybiBkZXJpdmVTZXR0ZXJOYW1lKGRpc2FtYmlndWF0ZWROYW1lKTsKCiAgICAgIGNhc2UgU2VsZWN0b3JLaW5kLk9QRVJBVE9SOgogICAgICBjYXNlIFNlbGVjdG9yS2luZC5JTkRFWDoKICAgICAgICBTdHJpbmcgb3BlcmF0b3JJZGVudGlmaWVyID0gb3BlcmF0b3JOYW1lVG9JZGVudGlmaWVyKHNlbGVjdG9yLm5hbWUpOwogICAgICAgIGpzQXN0Lk5hbWUgZGlzYW1iaWd1YXRlZE5hbWUgPQogICAgICAgICAgICBfZGlzYW1iaWd1YXRlT3BlcmF0b3Iob3BlcmF0b3JJZGVudGlmaWVyKTsKICAgICAgICByZXR1cm4gZGlzYW1iaWd1YXRlZE5hbWU7IC8vIE9wZXJhdG9ycyBhcmUgbm90IGFubm90YXRlZC4KCiAgICAgIGNhc2UgU2VsZWN0b3JLaW5kLkNBTEw6CiAgICAgICAgTGlzdDxTdHJpbmc+IHN1ZmZpeCA9IGNhbGxTdWZmaXhGb3JTdHJ1Y3R1cmUoc2VsZWN0b3IuY2FsbFN0cnVjdHVyZSk7CiAgICAgICAgaWYgKHNlbGVjdG9yLm5hbWUgPT0gSWRlbnRpZmllcnMuY2FsbCkgewogICAgICAgICAgLy8gRGVyaXZlIHRoZSBhbm5vdGF0ZWQgbmFtZSBmb3IgdGhpcyB2YXJpYW50IG9mICdjYWxsJy4KICAgICAgICAgIHJldHVybiBkZXJpdmVDYWxsTWV0aG9kTmFtZShzdWZmaXgpOwogICAgICAgIH0KICAgICAgICBqc0FzdC5OYW1lIGRpc2FtYmlndWF0ZWROYW1lID0KICAgICAgICAgICAgX2Rpc2FtYmlndWF0ZU1lbWJlcihzZWxlY3Rvci5tZW1iZXJOYW1lLCBzdWZmaXgpOwogICAgICAgIHJldHVybiBkaXNhbWJpZ3VhdGVkTmFtZTsgLy8gTWV0aG9kcyBvdGhlciB0aGFuIGNhbGwgYXJlIG5vdCBhbm5vdGF0ZWQuCgogICAgICBjYXNlIFNlbGVjdG9yS2luZC5TUEVDSUFMOgogICAgICAgIHJldHVybiBzcGVjaWFsU2VsZWN0b3JOYW1lKHNlbGVjdG9yKTsKCiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgZmFpbGVkQXQoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgc2VsZWN0b3Iga2luZDogJHtzZWxlY3Rvci5raW5kfScpOwogICAgfQogIH0KCiAganNBc3QuTmFtZSBzcGVjaWFsU2VsZWN0b3JOYW1lKFNlbGVjdG9yIHNlbGVjdG9yKSB7CiAgICBhc3NlcnQoc2VsZWN0b3Iua2luZCA9PSBTZWxlY3RvcktpbmQuU1BFQ0lBTCk7CiAgICBpZiAoc2VsZWN0b3IubWVtYmVyTmFtZSA9PSBOYW1lcy5nZW5lcmljSW5zdGFudGlhdGlvbikgewogICAgICByZXR1cm4gbmV3IFN0cmluZ0JhY2tlZE5hbWUoJyR7Z2VuZXJpY0luc3RhbnRpYXRpb25QcmVmaXh9JwogICAgICAgICAgJyR7c2VsZWN0b3IuY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRDb3VudH0nKTsKICAgIH0KCiAgICB0aHJvdyBmYWlsZWRBdCgKICAgICAgICBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLCAnVW5leHBlY3RlZCBzcGVjaWFsIHNlbGVjdG9yOiAkc2VsZWN0b3InKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBpbnRlcm5hbCBuYW1lIHVzZWQgZm9yIGFuIGludm9jYXRpb24gbWlycm9yIG9mIHRoaXMgc2VsZWN0b3IuCiAganNBc3QuTmFtZSBpbnZvY2F0aW9uTWlycm9ySW50ZXJuYWxOYW1lKFNlbGVjdG9yIHNlbGVjdG9yKSA9PgogICAgICBpbnZvY2F0aW9uTmFtZShzZWxlY3Rvcik7CgogIC8vLyBSZXR1cm5zIHRoZSBkaXNhbWJpZ3VhdGVkIG5hbWUgZm9yIHRoZSBnaXZlbiBmaWVsZCwgdXNlZCBmb3IgY29uc3RydWN0aW5nCiAgLy8vIHRoZSBnZXR0ZXIgYW5kIHNldHRlciBuYW1lcy4KICBqc0FzdC5OYW1lIGZpZWxkQWNjZXNzb3JOYW1lKEZpZWxkRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBlbGVtZW50LmlzSW5zdGFuY2VNZW1iZXIKICAgICAgICA/IF9kaXNhbWJpZ3VhdGVNZW1iZXIoZWxlbWVudC5tZW1iZXJOYW1lKQogICAgICAgIDogX2Rpc2FtYmlndWF0ZUdsb2JhbE1lbWJlcihlbGVtZW50KTsKICB9CgogIC8vLyBSZXR1cm5zIG5hbWUgb2YgdGhlIEphdmFTY3JpcHQgcHJvcGVydHkgdXNlZCB0byBzdG9yZSBhIHN0YXRpYyBvciBpbnN0YW5jZQogIC8vLyBmaWVsZC4KICBqc0FzdC5OYW1lIGZpZWxkUHJvcGVydHlOYW1lKEZpZWxkRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBlbGVtZW50LmlzSW5zdGFuY2VNZW1iZXIKICAgICAgICA/IGluc3RhbmNlRmllbGRQcm9wZXJ0eU5hbWUoZWxlbWVudCkKICAgICAgICA6IF9kaXNhbWJpZ3VhdGVHbG9iYWxNZW1iZXIoZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5OYW1lIGdsb2JhbFByb3BlcnR5TmFtZUZvck1lbWJlcihNZW1iZXJFbnRpdHkgZWxlbWVudCkgPT4KICAgICAgX2Rpc2FtYmlndWF0ZUdsb2JhbE1lbWJlcihlbGVtZW50KTsKCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBnbG9iYWxQcm9wZXJ0eU5hbWVGb3JDbGFzcyhDbGFzc0VudGl0eSBlbGVtZW50KSA9PgogICAgICBfZGlzYW1iaWd1YXRlR2xvYmFsVHlwZShlbGVtZW50KTsKCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBnbG9iYWxQcm9wZXJ0eU5hbWVGb3JUeXBlKEVudGl0eSBlbGVtZW50KSA9PgogICAgICBfZGlzYW1iaWd1YXRlR2xvYmFsVHlwZShlbGVtZW50KTsKCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBnbG9iYWxOYW1lRm9ySW50ZXJmYWNlVHlwZVZhcmlhYmxlKFR5cGVWYXJpYWJsZUVudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gX3R5cGVWYXJpYWJsZU5hbWVzW2VsZW1lbnRdID8/PQogICAgICAgIF9nbG9iYWxOYW1lRm9ySW50ZXJmYWNlVHlwZVZhcmlhYmxlKGVsZW1lbnQpOwogIH0KCiAganNBc3QuTmFtZSBfZ2xvYmFsTmFtZUZvckludGVyZmFjZVR5cGVWYXJpYWJsZShUeXBlVmFyaWFibGVFbnRpdHkgZWxlbWVudCkgewogICAgLy8gQ29uc3RydWN0IGEgbmFtZSBmcm9tIHRoZSBjbGFzcyBuYW1lIGFuZCB0eXBlIHZhcmlhYmxlLAogICAgLy8gZS5nLiAiTGlzdE1peGluLkUiLiBUaGUgY2xhc3MgbmFtZSBpcyB1bmlxdWUgd2hpY2ggZW5zdXJlcyB0aGUgdHlwZQogICAgLy8gdmFyaWFibGUgbmFtZSBpcyB1bmlxdWUuCiAgICAvLwogICAgLy8gVE9ETyhzcmEpOiBCZXR0ZXIgbWluaWZpZWQgbmFtaW5nLiBUeXBlIHZhcmlhYmxlIG5hbWVzIGFyZSB1c2VkIGluIHR5cGUKICAgIC8vIHJlY2lwZXMgYW5kIG11c3QgY29udGFpbiBhIHBlcmlvZCAoJy4nKS4gVGhleSBjYW4gYmUgZnJlcXVlbmN5LWFzc2lnbmVkCiAgICAvLyBpbmRlcGVuZGVudGx5IG9mIHRoZSBjbGFzcyBuYW1lLCBlLmcuICcuYScsICcuMicsICdhLicsIGV0Yy4KICAgIFN0cmluZyBuYW1lID0gZWxlbWVudC5uYW1lOwogICAgaWYgKG5hbWUubGVuZ3RoID4gMSkgbmFtZSA9ICcke2VsZW1lbnQuaW5kZXh9JzsgLy8gQXZvaWQgbG9uZyBuYW1lcyAocmFyZSkuCiAgICByZXR1cm4gQ29tcG91bmROYW1lKFsKICAgICAgZ2xvYmFsUHJvcGVydHlOYW1lRm9yQ2xhc3MoZWxlbWVudC50eXBlRGVjbGFyYXRpb24pLAogICAgICBTdHJpbmdCYWNrZWROYW1lKCcuJG5hbWUnKQogICAgXSk7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5OYW1lIGluc3RhbmNlRmllbGRQcm9wZXJ0eU5hbWUoRmllbGRFbnRpdHkgZWxlbWVudCkgewogICAgQ2xhc3NFbnRpdHkgZW5jbG9zaW5nQ2xhc3MgPSBlbGVtZW50LmVuY2xvc2luZ0NsYXNzOwoKICAgIGlmIChfbmF0aXZlRGF0YS5oYXNGaXhlZEJhY2tlbmROYW1lKGVsZW1lbnQpKSB7CiAgICAgIHJldHVybiBuZXcgU3RyaW5nQmFja2VkTmFtZShfbmF0aXZlRGF0YS5nZXRGaXhlZEJhY2tlbmROYW1lKGVsZW1lbnQpKTsKICAgIH0KCiAgICAvLyBTb21lIGVsZW1lbnRzLCBsaWtlIGUuZy4gaW5zdGFuY2VzIG9mIEJveEZpZWxkRWxlbWVudCBhcmUgc3BlY2lhbC4KICAgIC8vIFRoZXkgYXJlIGNyZWF0ZWQgd2l0aCBhIHVuaXF1ZSBhbmQgc2FmZSBuYW1lIGZvciB0aGUgZWxlbWVudCBtb2RlbC4KICAgIC8vIFdoaWxlIHRoZWlyIG5hbWUgaXMgdW5pcXVlLCBpdCBpcyBub3QgdmVyeSByZWFkYWJsZS4gU28gd2UgdHJ5IHRvCiAgICAvLyBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwsIHByb3Bvc2VkIG5hbWUuCiAgICAvLyBIb3dldmVyLCBhcyBib3hlcyBhcmUgbm90IHJlYWxseSBpbnN0YW5jZXMgb2YgY2xhc3NlcywgdGhlIHVzdWFsIG5hbWluZwogICAgLy8gc2NoZW1lIHRoYXQgdHJpZXMgdG8gYXZvaWQgbmFtZSBjbGFzaGVzIHdpdGggc3VwZXIgY2xhc3NlcyBkb2VzIG5vdAogICAgLy8gYXBwbHkuIFNvIHdlIGNhbiBkaXJlY3RseSBncmFiIGEgbmFtZS4KICAgIGlmIChlbGVtZW50IGlzIEpTRW50aXR5KSB7CiAgICAgIHJldHVybiBfZGlzYW1iaWd1YXRlSW50ZXJuYWxNZW1iZXIoCiAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgKCkgPT4gKGVsZW1lbnQgYXMgSlNFbnRpdHkpCiAgICAgICAgICAgICAgLmRlY2xhcmVkTmFtZQogICAgICAgICAgICAgIC5yZXBsYWNlQWxsKF9ub25JZGVudGlmaWVyUkUsICdfJykpOwogICAgfQoKICAgIC8vIElmIHRoZSBuYW1lIG9mIHRoZSBmaWVsZCBtaWdodCBjbGFzaCB3aXRoIGFub3RoZXIgZmllbGQsCiAgICAvLyB1c2UgYSBtYW5nbGVkIGZpZWxkIG5hbWUgdG8gYXZvaWQgcG90ZW50aWFsIGNsYXNoZXMuCiAgICAvLyBOb3RlIHRoYXQgaWYgdGhlIGNsYXNzIGV4dGVuZHMgYSBuYXRpdmUgY2xhc3MsIHRoYXQgbmF0aXZlIGNsYXNzIG1pZ2h0CiAgICAvLyBoYXZlIGZpZWxkcyB3aXRoIGZpeGVkIGJhY2tlbmQgbmFtZXMsIHNvIHdlIGFzc3VtZSB0aGUgd29yc3QgYW5kIGFsd2F5cwogICAgLy8gbWFuZ2xlIHRoZSBmaWVsZCBuYW1lcyBvZiBjbGFzc2VzIGV4dGVuZGluZyBuYXRpdmUgY2xhc3Nlcy4KICAgIC8vIE1ldGhvZHMgb24gc3VjaCBjbGFzc2VzIGFyZSBzdG9yZWQgb24gdGhlIGludGVyY2VwdG9yLCBub3QgdGhlIGluc3RhbmNlLAogICAgLy8gc28gb25seSBmaWVsZHMgaGF2ZSB0aGUgcG90ZW50aWFsIHRvIGNsYXNoIHdpdGggYSBuYXRpdmUgcHJvcGVydHkgbmFtZS4KICAgIGlmIChfY2xvc2VkV29ybGQuaXNVc2VkQXNNaXhpbihlbmNsb3NpbmdDbGFzcykgfHwKICAgICAgICBfaXNTaGFkb3dpbmdTdXBlckZpZWxkKGVsZW1lbnQpIHx8CiAgICAgICAgX2lzVXNlckNsYXNzRXh0ZW5kaW5nTmF0aXZlKGVuY2xvc2luZ0NsYXNzKSkgewogICAgICBTdHJpbmcgcHJvcG9zZU5hbWUoKSA9PiAnJHtlbmNsb3NpbmdDbGFzcy5uYW1lfV8ke2VsZW1lbnQubmFtZX0nOwogICAgICByZXR1cm4gX2Rpc2FtYmlndWF0ZUludGVybmFsTWVtYmVyKGVsZW1lbnQsIHByb3Bvc2VOYW1lKTsKICAgIH0KCiAgICAvLyBObyBzdXBlcmNsYXNzIHVzZXMgdGhlIGRpc2FtYmlndWF0ZWQgbmFtZSBhcyBhIHByb3BlcnR5IG5hbWUsIHNvIHdlIGNhbgogICAgLy8gdXNlIGl0IGZvciB0aGlzIGZpZWxkLiBUaGlzIGdlbmVyYXRlcyBuaWNlciBmaWVsZCBuYW1lcyBzaW5jZSBvdGhlcndpc2UKICAgIC8vIHRoZSBmaWVsZCBuYW1lIHdvdWxkIGhhdmUgdG8gYmUgbWFuZ2xlZC4KICAgIHJldHVybiBfZGlzYW1iaWd1YXRlTWVtYmVyKG5ldyBOYW1lKGVsZW1lbnQubmFtZSwgZWxlbWVudC5saWJyYXJ5KSk7CiAgfQoKICBib29sIF9pc1NoYWRvd2luZ1N1cGVyRmllbGQoRmllbGRFbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KGVsZW1lbnQuaXNGaWVsZCk7CiAgICBTdHJpbmcgZmllbGROYW1lID0gZWxlbWVudC5uYW1lOwogICAgYm9vbCBpc1ByaXZhdGUgPSBOYW1lLmlzUHJpdmF0ZU5hbWUoZmllbGROYW1lKTsKICAgIExpYnJhcnlFbnRpdHkgbWVtYmVyTGlicmFyeSA9IGVsZW1lbnQubGlicmFyeTsKICAgIENsYXNzRW50aXR5IGxvb2t1cENsYXNzID0KICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmdldFN1cGVyQ2xhc3MoZWxlbWVudC5lbmNsb3NpbmdDbGFzcyk7CiAgICB3aGlsZSAobG9va3VwQ2xhc3MgIT0gbnVsbCkgewogICAgICBNZW1iZXJFbnRpdHkgZm91bmRNZW1iZXIgPQogICAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5sb29rdXBMb2NhbENsYXNzTWVtYmVyKGxvb2t1cENsYXNzLCBmaWVsZE5hbWUpOwogICAgICBpZiAoZm91bmRNZW1iZXIgIT0gbnVsbCkgewogICAgICAgIGlmIChmb3VuZE1lbWJlci5pc0ZpZWxkKSB7CiAgICAgICAgICBpZiAoIWlzUHJpdmF0ZSB8fCBtZW1iZXJMaWJyYXJ5ID09IGZvdW5kTWVtYmVyLmxpYnJhcnkpIHsKICAgICAgICAgICAgLy8gUHJpdmF0ZSBmaWVsZHMgY2FuIG9ubHkgYmUgc2hhZG93ZWQgYnkgYSBmaWVsZCBkZWNsYXJlZCBpbiB0aGUKICAgICAgICAgICAgLy8gc2FtZSBsaWJyYXJ5LgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgbG9va3VwQ2xhc3MgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFN1cGVyQ2xhc3MobG9va3VwQ2xhc3MpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8vIFRydWUgaWYgW2NsYXNzX10gaXMgYSBub24tbmF0aXZlIGNsYXNzIHRoYXQgaW5oZXJpdHMgZnJvbSBhIG5hdGl2ZSBjbGFzcy4KICBib29sIF9pc1VzZXJDbGFzc0V4dGVuZGluZ05hdGl2ZShDbGFzc0VudGl0eSBjbGFzc18pIHsKICAgIHJldHVybiAhX25hdGl2ZURhdGEuaXNOYXRpdmVDbGFzcyhjbGFzc18pICYmCiAgICAgICAgX25hdGl2ZURhdGEuaXNOYXRpdmVPckV4dGVuZHNOYXRpdmUoY2xhc3NfKTsKICB9CgogIC8vLyBBbm5vdGF0ZWQgbmFtZSBmb3IgdGhlIHNldHRlciBvZiBbZWxlbWVudF0uCiAganNBc3QuTmFtZSBzZXR0ZXJGb3JNZW1iZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIC8vIFdlIGR5bmFtaWNhbGx5IGNyZWF0ZSBzZXR0ZXJzIGZyb20gdGhlIGZpZWxkLW5hbWUuIFRoZSBzZXR0ZXIgbmFtZSBtdXN0CiAgICAvLyB0aGVyZWZvcmUgYmUgZGVyaXZlZCBmcm9tIHRoZSBpbnN0YW5jZSBmaWVsZC1uYW1lLgogICAganNBc3QuTmFtZSBuYW1lID0gX2Rpc2FtYmlndWF0ZU1lbWJlcihlbGVtZW50Lm1lbWJlck5hbWUpOwogICAgcmV0dXJuIGRlcml2ZVNldHRlck5hbWUobmFtZSk7CiAgfQoKICAvLy8gQW5ub3RhdGVkIG5hbWUgZm9yIHRoZSBzZXR0ZXIgb2YgYW55IG1lbWJlciB3aXRoIFtkaXNhbWJpZ3VhdGVkTmFtZV0uCiAganNBc3QuTmFtZSBkZXJpdmVTZXR0ZXJOYW1lKGpzQXN0Lk5hbWUgZGlzYW1iaWd1YXRlZE5hbWUpIHsKICAgIC8vIFdlIGR5bmFtaWNhbGx5IGNyZWF0ZSBzZXR0ZXJzIGZyb20gdGhlIGZpZWxkLW5hbWUuIFRoZSBzZXR0ZXIgbmFtZSBtdXN0CiAgICAvLyB0aGVyZWZvcmUgYmUgZGVyaXZlZCBmcm9tIHRoZSBpbnN0YW5jZSBmaWVsZC1uYW1lLgogICAgcmV0dXJuIHVzZXJTZXR0ZXJzW2Rpc2FtYmlndWF0ZWROYW1lXSA/Pz0KICAgICAgICBuZXcgU2V0dGVyTmFtZShfbGl0ZXJhbFNldHRlclByZWZpeCwgZGlzYW1iaWd1YXRlZE5hbWUpOwogIH0KCiAgLy8vIEFubm90YXRlZCBuYW1lIGZvciB0aGUgc2V0dGVyIG9mIGFueSBtZW1iZXIgd2l0aCBbZGlzYW1iaWd1YXRlZE5hbWVdLgogIGpzQXN0Lk5hbWUgZGVyaXZlR2V0dGVyTmFtZShqc0FzdC5OYW1lIGRpc2FtYmlndWF0ZWROYW1lKSB7CiAgICAvLyBXZSBkeW5hbWljYWxseSBjcmVhdGUgZ2V0dGVycyBmcm9tIHRoZSBmaWVsZC1uYW1lLiBUaGUgZ2V0dGVyIG5hbWUgbXVzdAogICAgLy8gdGhlcmVmb3JlIGJlIGRlcml2ZWQgZnJvbSB0aGUgaW5zdGFuY2UgZmllbGQtbmFtZS4KICAgIHJldHVybiB1c2VyR2V0dGVyc1tkaXNhbWJpZ3VhdGVkTmFtZV0gPz89CiAgICAgICAgbmV3IEdldHRlck5hbWUoX2xpdGVyYWxHZXR0ZXJQcmVmaXgsIGRpc2FtYmlndWF0ZWROYW1lKTsKICB9CgogIC8vLyBBbm5vdGF0ZWQgbmFtZSBmb3IgdGhlIGdldHRlciBvZiBbZWxlbWVudF0uCiAganNBc3QuTmFtZSBnZXR0ZXJGb3JFbGVtZW50KE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICAvLyBXZSBkeW5hbWljYWxseSBjcmVhdGUgZ2V0dGVycyBmcm9tIHRoZSBmaWVsZC1uYW1lLiBUaGUgZ2V0dGVyIG5hbWUgbXVzdAogICAgLy8gdGhlcmVmb3JlIGJlIGRlcml2ZWQgZnJvbSB0aGUgaW5zdGFuY2UgZmllbGQtbmFtZS4KICAgIGpzQXN0Lk5hbWUgbmFtZSA9IF9kaXNhbWJpZ3VhdGVNZW1iZXIoZWxlbWVudC5tZW1iZXJOYW1lKTsKICAgIHJldHVybiBkZXJpdmVHZXR0ZXJOYW1lKG5hbWUpOwogIH0KCiAgLy8vIFByb3BlcnR5IG5hbWUgZm9yIHRoZSBnZXR0ZXIgb2YgYW4gaW5zdGFuY2UgbWVtYmVyIHdpdGggW29yaWdpbmFsTmFtZV0uCiAganNBc3QuTmFtZSBnZXR0ZXJGb3JNZW1iZXIoTmFtZSBvcmlnaW5hbE5hbWUpIHsKICAgIGpzQXN0Lk5hbWUgZGlzYW1iaWd1YXRlZE5hbWUgPSBfZGlzYW1iaWd1YXRlTWVtYmVyKG9yaWdpbmFsTmFtZSk7CiAgICByZXR1cm4gZGVyaXZlR2V0dGVyTmFtZShkaXNhbWJpZ3VhdGVkTmFtZSk7CiAgfQoKICAvLy8gRGlzYW1iaWd1YXRlZCBuYW1lIGZvciBhIGNvbXBpbGVyLW93bmVkIGdsb2JhbCB2YXJpYWJsZS4KICAvLy8KICAvLy8gVGhlIHJlc3VsdGluZyBuYW1lIGlzIHVuaXF1ZSB3aXRoaW4gdGhlIGdsb2JhbC1tZW1iZXIgbmFtZXNwYWNlLgogIGpzQXN0Lk5hbWUgX2Rpc2FtYmlndWF0ZUludGVybmFsR2xvYmFsKFN0cmluZyBuYW1lKSB7CiAgICBqc0FzdC5OYW1lIG5ld05hbWUgPSBpbnRlcm5hbEdsb2JhbHNbbmFtZV07CiAgICBpZiAobmV3TmFtZSA9PSBudWxsKSB7CiAgICAgIG5ld05hbWUgPSBnZXRGcmVzaE5hbWUoZ2xvYmFsU2NvcGUsIG5hbWUpOwogICAgICBpbnRlcm5hbEdsb2JhbHNbbmFtZV0gPSBuZXdOYW1lOwogICAgfQogICAgcmV0dXJuIF9uZXdSZWZlcmVuY2UobmV3TmFtZSk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgcHJvcGVydHkgbmFtZSB0byB1c2UgZm9yIGEgY29tcGlsZXItb3duZXIgZ2xvYmFsIHZhcmlhYmxlLAogIC8vLyBpLmUuIG9uZSB0aGF0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYW55IGVsZW1lbnQgYnV0IGlzIHVzZWQgYXMgYSB1dGlsaXR5CiAgLy8vIGdsb2JhbCBieSBjb2RlIGdlbmVyYXRpb24uCiAgLy8vCiAgLy8vIFtuYW1lXSBmdW5jdGlvbnMgYXMgYm90aCB0aGUgcHJvcG9zZWQgbmFtZSBmb3IgdGhlIGdsb2JhbCwgYW5kIGFzIGEga2V5CiAgLy8vIGlkZW50aWZ5aW5nIHRoZSBnbG9iYWwuIFRoZSBbbmFtZV0gbXVzdCBub3QgY29udGFpbiBgJGAgc3ltYm9scywgc2luY2UKICAvLy8gdGhlIFtOYW1lcl0gdXNlcyB0aG9zZSBuYW1lcyBpbnRlcm5hbGx5LgogIC8vLwogIC8vLyBUaGlzIHByb3ZpZGVzIGFuIGVhc3kgbWVjaGFuaXNtIG9mIGF2b2lkaW5nIGEgbmFtZS1jbGFzaCB3aXRoIHVzZXItc3BhY2UKICAvLy8gZ2xvYmFscywgYWx0aG91Z2ggdGhlIGNhbGxlcnMgb2YgbXVzdCBzdGlsbCB0YWtlIGNhcmUgbm90IHRvIGFjY2lkZW50YWxseQogIC8vLyBwYXNzIGluIHRoZSBzYW1lIFtuYW1lXSBmb3IgdHdvIGRpZmZlcmVudCBpbnRlcm5hbCBnbG9iYWxzLgogIGpzQXN0Lk5hbWUgaW50ZXJuYWxHbG9iYWwoU3RyaW5nIG5hbWUpIHsKICAgIGFzc2VydCghbmFtZS5jb250YWlucyhyJyQnKSk7CiAgICByZXR1cm4gX2Rpc2FtYmlndWF0ZUludGVybmFsR2xvYmFsKG5hbWUpOwogIH0KCiAgLy8vIEdlbmVyYXRlcyBhIHVuaXF1ZSBrZXkgZm9yIFtsaWJyYXJ5XS4KICAvLy8KICAvLy8gS2V5cyBhcmUgbWVhbnQgdG8gYmUgdXNlZCBpbiBtYXBzIGFuZCBzaG91bGQgbm90IGJlIHZpc2libGUgaW4gdGhlIG91dHB1dC4KICBTdHJpbmcgX2dlbmVyYXRlTGlicmFyeUtleShMaWJyYXJ5RW50aXR5IGxpYnJhcnkpIHsKICAgIHJldHVybiBfbGlicmFyeUtleXMucHV0SWZBYnNlbnQobGlicmFyeSwgKCkgewogICAgICBTdHJpbmcga2V5QmFzZSA9IGxpYnJhcnkubmFtZTsKICAgICAgaW50IGNvdW50ZXIgPSAwOwogICAgICBTdHJpbmcga2V5ID0ga2V5QmFzZTsKICAgICAgd2hpbGUgKF9saWJyYXJ5S2V5cy52YWx1ZXMuY29udGFpbnMoa2V5KSkgewogICAgICAgIGtleSA9ICIka2V5QmFzZSR7Y291bnRlcisrfSI7CiAgICAgIH0KICAgICAgcmV0dXJuIGtleTsKICAgIH0pOwogIH0KCiAganNBc3QuTmFtZSBfZGlzYW1iaWd1YXRlR2xvYmFsTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gX2Rpc2FtYmlndWF0ZUdsb2JhbDxNZW1iZXJFbnRpdHk+KAogICAgICAgIGVsZW1lbnQsIF9wcm9wb3NlTmFtZUZvck1lbWJlciwgdXNlckdsb2JhbHMpOwogIH0KCiAganNBc3QuTmFtZSBfZGlzYW1iaWd1YXRlR2xvYmFsVHlwZShFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIF9kaXNhbWJpZ3VhdGVHbG9iYWwoZWxlbWVudCwgX3Byb3Bvc2VOYW1lRm9yVHlwZSwgdXNlckdsb2JhbHMpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGRpc2FtYmlndWF0ZWQgbmFtZSBmb3IgYSB0b3AtbGV2ZWwgb3Igc3RhdGljIGVsZW1lbnQuCiAgLy8vCiAgLy8vIFRoZSByZXN1bHRpbmcgbmFtZSBpcyB1bmlxdWUgd2l0aGluIHRoZSBnbG9iYWwtbWVtYmVyIG5hbWVzcGFjZS4KICBqc0FzdC5OYW1lIF9kaXNhbWJpZ3VhdGVHbG9iYWw8VCBleHRlbmRzIEVudGl0eT4oVCBlbGVtZW50LAogICAgICBTdHJpbmcgcHJvcG9zZU5hbWUoVCBlbGVtZW50KSwgTWFwPEVudGl0eSwganNBc3QuTmFtZT4gZ2xvYmFscykgewogICAgLy8gVE9ETyhhc2dlcmYpOiBXZSBjYW4gcmV1c2UgbW9yZSBzaG9ydCBuYW1lcyBpZiB3ZSBkaXNhbWJpZ3VhdGUgd2l0aAogICAgLy8gYSBzZXBhcmF0ZSBuYW1lc3BhY2UgZm9yIGVhY2ggb2YgdGhlIGdsb2JhbCBob2xkZXIgb2JqZWN0cy4KICAgIGpzQXN0Lk5hbWUgbmV3TmFtZSA9IGdsb2JhbHNbZWxlbWVudF07CiAgICBpZiAobmV3TmFtZSA9PSBudWxsKSB7CiAgICAgIFN0cmluZyBwcm9wb3NlZE5hbWUgPSBwcm9wb3NlTmFtZShlbGVtZW50KTsKICAgICAgbmV3TmFtZSA9IGdldEZyZXNoTmFtZShnbG9iYWxTY29wZSwgcHJvcG9zZWROYW1lKTsKICAgICAgZ2xvYmFsc1tlbGVtZW50XSA9IG5ld05hbWU7CiAgICB9CiAgICByZXR1cm4gX25ld1JlZmVyZW5jZShuZXdOYW1lKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBkaXNhbWJpZ3VhdGVkIG5hbWUgZm9yIGFuIGluc3RhbmNlIG1ldGhvZCBvciBmaWVsZAogIC8vLyB3aXRoIFtvcmlnaW5hbE5hbWVdIGluIFtsaWJyYXJ5XS4KICAvLy8KICAvLy8gW2xpYnJhcnldIG1heSBiZSBgbnVsbGAgaWYgW29yaWdpbmFsTmFtZV0gaXMga25vd24gdG8gYmUgcHVibGljLgogIC8vLwogIC8vLyBUaGlzIGlzIHRoZSBuYW1lIHVzZWQgZm9yIGRlcml2aW5nIHByb3BlcnR5IG5hbWVzIG9mIGFjY2Vzc29ycyAoZ2V0dGVycwogIC8vLyBhbmQgc2V0dGVycykgYW5kIGFzIHByb3BlcnR5IG5hbWUgZm9yIHN0b3JpbmcgbWV0aG9kcyBhbmQgbWV0aG9kIHN0dWJzLgogIC8vLwogIC8vLyBbc3VmZml4ZXNdIGRlbm90ZSBhbiBleHRlbnNpb24gb2YgW29yaWdpbmFsTmFtZV0gdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbQogIC8vLyBvdGhlciBtZW1iZXJzIHdpdGggdGhhdCBuYW1lLiBUaGVzZSBhcmUgdXNlZCB0byBlbmNvZGUgdGhlIGFyaXR5IGFuZAogIC8vLyBuYW1lZCBwYXJhbWV0ZXJzIHRvIGEgbWV0aG9kLiBEaXNhbWJpZ3VhdGluZyB0aGUgc2FtZSBbb3JpZ2luYWxOYW1lXSB3aXRoCiAgLy8vIGRpZmZlcmVudCBbc3VmZml4ZXNdIHdpbGwgeWllbGQgZGlmZmVyZW50IGRpc2FtYmlndWF0ZWQgbmFtZXMuCiAgLy8vCiAgLy8vIFRoZSByZXN1bHRpbmcgbmFtZSwgYW5kIGl0cyBhc3NvY2lhdGVkIGFubm90YXRlZCBuYW1lcywgYXJlIHVuaXF1ZQogIC8vLyB0byB0aGUgKFtvcmlnaW5hbE5hbWVdLCBbc3VmZml4ZXNdKSBwYWlyIHdpdGhpbiB0aGUgaW5zdGFuY2UtbWVtYmVyCiAgLy8vIG5hbWVzcGFjZS4KICBqc0FzdC5OYW1lIF9kaXNhbWJpZ3VhdGVNZW1iZXIoTmFtZSBvcmlnaW5hbE5hbWUsCiAgICAgIFtMaXN0PFN0cmluZz4gc3VmZml4ZXMgPSBjb25zdCBbXV0pIHsKICAgIC8vIEJ1aWxkIGEgc3RyaW5nIGVuY29kaW5nIHRoZSBsaWJyYXJ5IG5hbWUsIGlmIHRoZSBuYW1lIGlzIHByaXZhdGUuCiAgICBTdHJpbmcgbGlicmFyeUtleSA9CiAgICAgICAgb3JpZ2luYWxOYW1lLmlzUHJpdmF0ZSA/IF9nZW5lcmF0ZUxpYnJhcnlLZXkob3JpZ2luYWxOYW1lLmxpYnJhcnkpIDogJyc7CgogICAgLy8gSW4gdGhlIHVuaXF1ZSBrZXksIHNlcGFyYXRlIHRoZSBuYW1lIHBhcnRzIGJ5ICdAJy4KICAgIC8vIFRoaXMgYXZvaWRzIGNsYXNoZXMgc2luY2UgdGhlIG9yaWdpbmFsIG5hbWVzIGNhbm5vdCBjb250YWluIHRoYXQgc3ltYm9sLgogICAgU3RyaW5nIGtleSA9ICckbGlicmFyeUtleUAke29yaWdpbmFsTmFtZS50ZXh0fUAke3N1ZmZpeGVzLmpvaW4oJ0AnKX0nOwogICAganNBc3QuTmFtZSBuZXdOYW1lID0gdXNlckluc3RhbmNlTWVtYmVyc1trZXldOwogICAgaWYgKG5ld05hbWUgPT0gbnVsbCkgewogICAgICBTdHJpbmcgcHJvcG9zZWROYW1lID0gcHJpdmF0ZU5hbWUob3JpZ2luYWxOYW1lKTsKICAgICAgaWYgKCFzdWZmaXhlcy5pc0VtcHR5KSB7CiAgICAgICAgLy8gSW4gdGhlIHByb3Bvc2VkIG5hbWUsIHNlcGFyYXRlIHRoZSBuYW1lIHBhcnRzIGJ5ICckJywgYmVjYXVzZSB0aGUKICAgICAgICAvLyBwcm9wb3NlZCBuYW1lIG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyLCBidXQgbm90IG5lY2Vzc2FyaWx5IHVuaXF1ZS4KICAgICAgICBwcm9wb3NlZE5hbWUgKz0gcickJyArIHN1ZmZpeGVzLmpvaW4ocickJyk7CiAgICAgIH0KICAgICAgbmV3TmFtZSA9IGdldEZyZXNoTmFtZShpbnN0YW5jZVNjb3BlLCBwcm9wb3NlZE5hbWUsCiAgICAgICAgICBzYW5pdGl6ZUZvckFubm90YXRpb25zOiB0cnVlKTsKICAgICAgdXNlckluc3RhbmNlTWVtYmVyc1trZXldID0gbmV3TmFtZTsKICAgICAgdXNlckluc3RhbmNlTWVtYmVyc09yaWdpbmFsTmFtZVtrZXldID0gJyRvcmlnaW5hbE5hbWUnOwogICAgfQogICAgcmV0dXJuIF9uZXdSZWZlcmVuY2UobmV3TmFtZSk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgZGlzYW1iaWd1YXRlZCBuYW1lIGZvciB0aGUgaW5zdGFuY2UgbWVtYmVyIGlkZW50aWZpZWQgYnkKICAvLy8gW2tleV0uCiAgLy8vCiAgLy8vIFdoZW4gYSBuYW1lIGZvciBhbiBlbGVtZW50IGlzIHJlcXVlc3RlZCBieSBrZXksIGl0IG1heSBub3QgYmUgcmVxdWVzdGVkCiAgLy8vIGJ5IGVsZW1lbnQgYXQgdGhlIHNhbWUgdGltZSwgYXMgdHdvIGRpZmZlcmVudCBuYW1lcyB3b3VsZCBiZSByZXR1cm5lZC4KICAvLy8KICAvLy8gSWYga2V5IGhhcyBub3QgeWV0IGJlZW4gcmVnaXN0ZXJlZCwgW3Byb3Bvc2VOYW1lXSBpcyB1c2VkIHRvIGdlbmVyYXRlCiAgLy8vIGEgbmFtZSBwcm9wb3NhbCBmb3IgdGhlIGdpdmVuIGtleS4KICAvLy8KICAvLy8gW2tleV0gbXVzdCBub3QgY2xhc2ggd2l0aCB2YWxpZCBpbnN0YW5jZSBuYW1lcy4gVGhpcyBpcyB0eXBpY2FsbHkKICAvLy8gYWNoaWV2ZWQgYnkgdXNpbmcgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciBpbiBba2V5XSB0aGF0IGlzIG5vdCB2YWxpZCBpbgogIC8vLyBpZGVudGlmaWVycywgZm9yIGV4YW1wbGUgdGhlIEAgc3ltYm9sLgogIGpzQXN0Lk5hbWUgX2Rpc2FtYmlndWF0ZU1lbWJlckJ5S2V5KFN0cmluZyBrZXksIFN0cmluZyBwcm9wb3NlTmFtZSgpKSB7CiAgICBqc0FzdC5OYW1lIG5ld05hbWUgPSB1c2VySW5zdGFuY2VNZW1iZXJzW2tleV07CiAgICBpZiAobmV3TmFtZSA9PSBudWxsKSB7CiAgICAgIFN0cmluZyBuYW1lID0gcHJvcG9zZU5hbWUoKTsKICAgICAgbmV3TmFtZSA9IGdldEZyZXNoTmFtZShpbnN0YW5jZVNjb3BlLCBuYW1lLCBzYW5pdGl6ZUZvckFubm90YXRpb25zOiB0cnVlKTsKICAgICAgdXNlckluc3RhbmNlTWVtYmVyc1trZXldID0gbmV3TmFtZTsKICAgICAgLy8gVE9ETyhzaWdtdW5kKTogY29uc2lkZXIgcGx1bWJpbmcgdGhlIG9yaWdpbmFsIG5hbWUgaW5zdGVhZC4KICAgICAgdXNlckluc3RhbmNlTWVtYmVyc09yaWdpbmFsTmFtZVtrZXldID0gbmFtZTsKICAgIH0KICAgIHJldHVybiBfbmV3UmVmZXJlbmNlKG5ld05hbWUpOwogIH0KCiAgLy8vIEZvcmNlcyB0aGUgcHVibGljIGluc3RhbmNlIG1lbWJlciB3aXRoIFtvcmlnaW5hbE5hbWVdIHRvIGhhdmUgdGhlIGdpdmVuCiAgLy8vIFtkaXNhbWJpZ3VhdGVkTmFtZV0uCiAgLy8vCiAgLy8vIFRoZSBbb3JpZ2luYWxOYW1lXSBtdXN0IG5vdCBoYXZlIGJlZW4gZGlzYW1iaWd1YXRlZCBiZWZvcmUsIGFuZCB0aGUKICAvLy8gW2Rpc2FtYmlndWF0ZWROYW1lXSBtdXN0IG5vdCBoYXZlIGJlZW4gdXNlZC4KICAvLy8KICAvLy8gVXNpbmcgW19kaXNhbWJpZ3VhdGVNZW1iZXJdIHdpdGggdGhlIGdpdmVuIFtvcmlnaW5hbE5hbWVdIGFuZCBubyBzdWZmaXhlcwogIC8vLyB3aWxsIHN1YnNlcXVlbnRseSByZXR1cm4gW2Rpc2FtYmlndWF0ZWROYW1lXS4KICB2b2lkIHJlc2VydmVQdWJsaWNNZW1iZXJOYW1lKFN0cmluZyBvcmlnaW5hbE5hbWUsIFN0cmluZyBkaXNhbWJpZ3VhdGVkTmFtZSkgewogICAgLy8gQnVpbGQgYSBrZXkgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgb25lIGJ1aWx0IGluIGRpc2FtYmlndWF0ZU1lbWJlci4KICAgIFN0cmluZyBsaWJyYXJ5UHJlZml4ID0gJyc7IC8vIFB1YmxpYyBuYW1lcyBoYXZlIGFuIGVtcHR5IGxpYnJhcnkgcHJlZml4LgogICAgU3RyaW5nIHN1ZmZpeCA9ICcnOyAvLyBXZSBkb24ndCBuZWVkIGFueSBzdWZmaXhlcy4KICAgIFN0cmluZyBrZXkgPSAnJGxpYnJhcnlQcmVmaXhAJG9yaWdpbmFsTmFtZUAkc3VmZml4JzsKICAgIGFzc2VydCghdXNlckluc3RhbmNlTWVtYmVycy5jb250YWluc0tleShrZXkpKTsKICAgIGFzc2VydCghaW5zdGFuY2VTY29wZS5pc1VzZWQoZGlzYW1iaWd1YXRlZE5hbWUpKTsKICAgIHVzZXJJbnN0YW5jZU1lbWJlcnNba2V5XSA9IG5ldyBTdHJpbmdCYWNrZWROYW1lKGRpc2FtYmlndWF0ZWROYW1lKTsKICAgIHVzZXJJbnN0YW5jZU1lbWJlcnNPcmlnaW5hbE5hbWVba2V5XSA9IG9yaWdpbmFsTmFtZTsKICAgIGluc3RhbmNlU2NvcGUucmVnaXN0ZXJVc2UoZGlzYW1iaWd1YXRlZE5hbWUpOwogIH0KCiAgLy8vIERpc2FtYmlndWF0ZWQgbmFtZSB1bmlxdWUgdG8gW2VsZW1lbnRdLgogIC8vLwogIC8vLyBUaGlzIGlzIHVzZWQgYXMgdGhlIHByb3BlcnR5IG5hbWUgZm9yIGZpZWxkcywgdHlwZSB2YXJpYWJsZXMsCiAgLy8vIGNvbnN0cnVjdG9yIGJvZGllcywgYW5kIHN1cGVyLWFjY2Vzc29ycy4KICAvLy8KICAvLy8gVGhlIHJlc3VsdGluZyBuYW1lIGlzIHVuaXF1ZSB3aXRoaW4gdGhlIGluc3RhbmNlLW1lbWJlciBuYW1lc3BhY2UuCiAganNBc3QuTmFtZSBfZGlzYW1iaWd1YXRlSW50ZXJuYWxNZW1iZXIoCiAgICAgIE1lbWJlckVudGl0eSBlbGVtZW50LCBTdHJpbmcgcHJvcG9zZU5hbWUoKSkgewogICAganNBc3QuTmFtZSBuZXdOYW1lID0gaW50ZXJuYWxJbnN0YW5jZU1lbWJlcnNbZWxlbWVudF07CiAgICBpZiAobmV3TmFtZSA9PSBudWxsKSB7CiAgICAgIFN0cmluZyBuYW1lID0gcHJvcG9zZU5hbWUoKTsKCiAgICAgIGlmIChlbGVtZW50IGlzIFByaXZhdGVseU5hbWVkSlNFbnRpdHkpIHsKICAgICAgICBOYW1pbmdTY29wZSBzY29wZSA9IF9nZXRQcml2YXRlU2NvcGVGb3IoZWxlbWVudCk7CiAgICAgICAgbmV3TmFtZSA9IGdldEZyZXNoTmFtZShzY29wZSwgbmFtZSwKICAgICAgICAgICAgc2FuaXRpemVGb3JBbm5vdGF0aW9uczogdHJ1ZSwgc2FuaXRpemVGb3JOYXRpdmVzOiBmYWxzZSk7CiAgICAgICAgaW50ZXJuYWxJbnN0YW5jZU1lbWJlcnNbZWxlbWVudF0gPSBuZXdOYW1lOwogICAgICB9IGVsc2UgewogICAgICAgIGJvb2wgbWF5Q2xhc2hOYXRpdmUgPQogICAgICAgICAgICBfaXNVc2VyQ2xhc3NFeHRlbmRpbmdOYXRpdmUoZWxlbWVudC5lbmNsb3NpbmdDbGFzcyk7CiAgICAgICAgbmV3TmFtZSA9IGdldEZyZXNoTmFtZShpbnN0YW5jZVNjb3BlLCBuYW1lLAogICAgICAgICAgICBzYW5pdGl6ZUZvckFubm90YXRpb25zOiB0cnVlLCBzYW5pdGl6ZUZvck5hdGl2ZXM6IG1heUNsYXNoTmF0aXZlKTsKICAgICAgICBpbnRlcm5hbEluc3RhbmNlTWVtYmVyc1tlbGVtZW50XSA9IG5ld05hbWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfbmV3UmVmZXJlbmNlKG5ld05hbWUpOwogIH0KCiAgLy8vIERpc2FtYmlndWF0ZWQgbmFtZSBmb3IgdGhlIGdpdmVuIG9wZXJhdG9yLgogIC8vLwogIC8vLyBbb3BlcmF0b3JJZGVudGlmaWVyXSBtdXN0IGJlIHRoZSBvcGVyYXRvcidzIGlkZW50aWZpZXIsIGUuZy4KICAvLy8gYCRhZGRgIGFuZCBub3QgYCtgLgogIC8vLwogIC8vLyBUaGUgcmVzdWx0aW5nIG5hbWUgaXMgdW5pcXVlIHdpdGhpbiB0aGUgaW5zdGFuY2UtbWVtYmVyIG5hbWVzcGFjZS4KICBqc0FzdC5OYW1lIF9kaXNhbWJpZ3VhdGVPcGVyYXRvcihTdHJpbmcgb3BlcmF0b3JJZGVudGlmaWVyKSB7CiAgICBqc0FzdC5OYW1lIG5ld05hbWUgPSB1c2VySW5zdGFuY2VPcGVyYXRvcnNbb3BlcmF0b3JJZGVudGlmaWVyXTsKICAgIGlmIChuZXdOYW1lID09IG51bGwpIHsKICAgICAgbmV3TmFtZSA9IGdldEZyZXNoTmFtZShpbnN0YW5jZVNjb3BlLCBvcGVyYXRvcklkZW50aWZpZXIpOwogICAgICB1c2VySW5zdGFuY2VPcGVyYXRvcnNbb3BlcmF0b3JJZGVudGlmaWVyXSA9IG5ld05hbWU7CiAgICB9CiAgICByZXR1cm4gX25ld1JlZmVyZW5jZShuZXdOYW1lKTsKICB9CgogIFN0cmluZyBfZ2VuZXJhdGVGcmVzaFN0cmluZ0Zvck5hbWUoU3RyaW5nIHByb3Bvc2VkTmFtZSwgTmFtaW5nU2NvcGUgc2NvcGUsCiAgICAgIHtib29sIHNhbml0aXplRm9yQW5ub3RhdGlvbnM6IGZhbHNlLCBib29sIHNhbml0aXplRm9yTmF0aXZlczogZmFsc2V9KSB7CiAgICBpZiAoc2FuaXRpemVGb3JBbm5vdGF0aW9ucykgewogICAgICBwcm9wb3NlZE5hbWUgPSBfc2FuaXRpemVGb3JBbm5vdGF0aW9ucyhwcm9wb3NlZE5hbWUpOwogICAgfQogICAgaWYgKHNhbml0aXplRm9yTmF0aXZlcykgewogICAgICBwcm9wb3NlZE5hbWUgPSBfc2FuaXRpemVGb3JOYXRpdmVzKHByb3Bvc2VkTmFtZSk7CiAgICB9CiAgICBwcm9wb3NlZE5hbWUgPSBfc2FuaXRpemVGb3JLZXl3b3Jkcyhwcm9wb3NlZE5hbWUpOwogICAgU3RyaW5nIGNhbmRpZGF0ZTsKICAgIGlmIChzY29wZS5pc1VudXNlZChwcm9wb3NlZE5hbWUpKSB7CiAgICAgIGNhbmRpZGF0ZSA9IHByb3Bvc2VkTmFtZTsKICAgIH0gZWxzZSB7CiAgICAgIGludCBjb3VudGVyID0gcG9wdWxhck5hbWVDb3VudGVyc1twcm9wb3NlZE5hbWVdOwogICAgICBpbnQgaSA9IChjb3VudGVyID09IG51bGwpID8gMCA6IGNvdW50ZXI7CiAgICAgIHdoaWxlIChzY29wZS5pc1VzZWQoIiRwcm9wb3NlZE5hbWUkaSIpKSB7CiAgICAgICAgaSsrOwogICAgICB9CiAgICAgIHBvcHVsYXJOYW1lQ291bnRlcnNbcHJvcG9zZWROYW1lXSA9IGkgKyAxOwogICAgICBjYW5kaWRhdGUgPSAiJHByb3Bvc2VkTmFtZSRpIjsKICAgIH0KICAgIHNjb3BlLnJlZ2lzdGVyVXNlKGNhbmRpZGF0ZSk7CiAgICByZXR1cm4gY2FuZGlkYXRlOwogIH0KCiAgLy8vIFJldHVybnMgYW4gdW51c2VkIG5hbWUuCiAgLy8vCiAgLy8vIFtwcm9wb3NlZE5hbWVdIG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGlkZW50aWZpZXIuCiAgLy8vCiAgLy8vIElmIFtzYW5pdGl6ZUZvckFubm90YXRpb25zXSBpcyBgdHJ1ZWAsIHRoZW4gdGhlIHJlc3VsdCBpcyBndWFyYW50ZWVkIG5vdAogIC8vLyB0byBoYXZlIHRoZSBmb3JtIG9mIGFuIGFubm90YXRlZCBuYW1lLgogIC8vLwogIC8vLyBJZiBbc2FuaXRpemVGb3JOYXRpdmVzXSBpdCBgdHJ1ZWAsIHRoZW4gdGhlIHJlc3VsdCBpcyBndWFyYW50ZWVkIG5vdCB0bwogIC8vLyBjbGFzaCB3aXRoIGEgcHJvcGVydHkgbmFtZSBvbiBhIG5hdGl2ZSBvYmplY3QuCiAgLy8vCiAgLy8vIE5vdGUgdGhhdCBbTWluaWZ5TmFtZXJdIG92ZXJyaWRlcyB0aGlzIG1ldGhvZCB3aXRoIG9uZSB0aGF0IHByb2R1Y2VzCiAgLy8vIG1pbmlmaWVkIG5hbWVzLgogIGpzQXN0Lk5hbWUgZ2V0RnJlc2hOYW1lKE5hbWluZ1Njb3BlIHNjb3BlLCBTdHJpbmcgcHJvcG9zZWROYW1lLAogICAgICB7Ym9vbCBzYW5pdGl6ZUZvckFubm90YXRpb25zOiBmYWxzZSwgYm9vbCBzYW5pdGl6ZUZvck5hdGl2ZXM6IGZhbHNlfSkgewogICAgU3RyaW5nIGNhbmRpZGF0ZSA9IF9nZW5lcmF0ZUZyZXNoU3RyaW5nRm9yTmFtZShwcm9wb3NlZE5hbWUsIHNjb3BlLAogICAgICAgIHNhbml0aXplRm9yQW5ub3RhdGlvbnM6IHNhbml0aXplRm9yQW5ub3RhdGlvbnMsCiAgICAgICAgc2FuaXRpemVGb3JOYXRpdmVzOiBzYW5pdGl6ZUZvck5hdGl2ZXMpOwogICAgcmV0dXJuIG5ldyBTdHJpbmdCYWNrZWROYW1lKGNhbmRpZGF0ZSk7CiAgfQoKICAvLy8gUmV0dXJucyBhIHZhcmlhbnQgb2YgW25hbWVdIHRoYXQgY2Fubm90IGNsYXNoIHdpdGggdGhlIGFubm90YXRlZAogIC8vLyB2ZXJzaW9uIG9mIGFub3RoZXIgbmFtZSwgdGhhdCBpcywgdGhlIHJlc3VsdGluZyBuYW1lIGNhbiBuZXZlciBiZSByZXR1cm5lZAogIC8vLyBieSBbZGVyaXZlR2V0dGVyTmFtZV0sIFtkZXJpdmVTZXR0ZXJOYW1lXSwgW2Rlcml2ZUNhbGxNZXRob2ROYW1lXSwKICAvLy8gW29wZXJhdG9ySXNdLCBvciBbc3Vic3RpdHV0aW9uTmFtZV0uCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCBhIG5hbWUgYGdldCR4YCB3b3VsZCBiZSBjb252ZXJ0ZWQgdG8gYCRnZXQkeGAgdG8gZW5zdXJlIGl0CiAgLy8vIGNhbm5vdCBjbGFzaCB3aXRoIHRoZSBnZXR0ZXIgZm9yIGB4YC4KICAvLy8KICAvLy8gV2UgZG9uJ3Qgd2FudCB0byByZWdpc3RlciBhbGwgcG90ZW50aWFsIGFubm90YXRlZCBuYW1lcyBpbgogIC8vLyBbdXNlZEluc3RhbmNlTmFtZXNdICh0aGVyZSBhcmUgdG9vIG1hbnkpLCBzbyB3ZSB1c2UgdGhpcyBzdGVwIHRvIGF2b2lkCiAgLy8vIGNsYXNoZXMgYmV0d2VlbiBhbm5vdGF0ZWQgYW5kIHVuYW5ub3RhdGVkIG5hbWVzLgogIFN0cmluZyBfc2FuaXRpemVGb3JBbm5vdGF0aW9ucyhTdHJpbmcgbmFtZSkgewogICAgLy8gRW5zdXJlIG5hbWUgZG9lcyBub3QgY2xhc2ggd2l0aCBhIGdldHRlciBvciBzZXR0ZXIgb2YgYW5vdGhlciBuYW1lLAogICAgLy8gb25lIG9mIHRoZSBvdGhlciBzcGVjaWFsIG5hbWVzIHRoYXQgc3RhcnQgd2l0aCBgJGAsIHN1Y2ggYXMgYCRpc2AsCiAgICAvLyBvciB3aXRoIG9uZSBvZiB0aGUgYGNhbGxgIHN0dWJzLCBzdWNoIGFzIGBjYWxsJDFgLgogICAgYXNzZXJ0KHRoaXMgaXMhIE1pbmlmeU5hbWVyKTsKICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgocickJykgfHwKICAgICAgICBuYW1lLnN0YXJ0c1dpdGgoZml4ZWROYW1lcy5nZXR0ZXJQcmVmaXgpIHx8CiAgICAgICAgbmFtZS5zdGFydHNXaXRoKGZpeGVkTmFtZXMuc2V0dGVyUHJlZml4KSB8fAogICAgICAgIG5hbWUuc3RhcnRzV2l0aChfY2FsbFByZWZpeERvbGxhcikpIHsKICAgICAgbmFtZSA9ICdcJCRuYW1lJzsKICAgIH0KICAgIHJldHVybiBuYW1lOwogIH0KCiAgLy8vIFJldHVybnMgYSB2YXJpYW50IG9mIFtuYW1lXSB0aGF0IGNhbm5vdCBjbGFzaCB3aXRoIGEgbmF0aXZlIHByb3BlcnR5IG5hbWUKICAvLy8gKGUuZy4gdGhlIG5hbWUgb2YgYSBtZXRob2Qgb24gYSBKUyBET00gb2JqZWN0KS4KICAvLy8KICAvLy8gSWYgW25hbWVdIGlzIG5vdCBhbiBhbm5vdGF0ZWQgbmFtZSwgdGhlIHJlc3VsdCB3aWxsIG5vdCBiZSBhbiBhbm5vdGF0ZWQKICAvLy8gbmFtZSBlaXRoZXIuCiAgU3RyaW5nIF9zYW5pdGl6ZUZvck5hdGl2ZXMoU3RyaW5nIG5hbWUpIHsKICAgIGlmICghbmFtZS5jb250YWlucyhyJyQnKSkgewogICAgICAvLyBQcmVwZW5kICQkLiBUaGUgcmVzdWx0IG11c3Qgbm90IGNvaW5jaWRlIHdpdGggYW4gYW5ub3RhdGVkIG5hbWUuCiAgICAgIG5hbWUgPSAnXCRcJCRuYW1lJzsKICAgIH0KICAgIHJldHVybiBuYW1lOwogIH0KCiAgLy8vIFJldHVybnMgYSBwcm9wb3NlZCBuYW1lIGZvciB0aGUgZ2l2ZW4gdHlwZWRlZiBvciBjbGFzcyBbZWxlbWVudF0uCiAgLy8vIFRoZSByZXR1cm5lZCBpZCBpcyBndWFyYW50ZWVkIHRvIGJlIGEgdmFsaWQgSmF2YVNjcmlwdCBpZGVudGlmaWVyLgogIFN0cmluZyBfcHJvcG9zZU5hbWVGb3JUeXBlKEVudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gZWxlbWVudC5uYW1lLnJlcGxhY2VBbGwoX25vbklkZW50aWZpZXJSRSwgJ18nKTsKICB9CgogIHN0YXRpYyBSZWdFeHAgX25vbklkZW50aWZpZXJSRSA9IG5ldyBSZWdFeHAocidbXkEtWmEtejAtOV8kXScpOwoKICAvLy8gUmV0dXJucyBhIHByb3Bvc2VkIG5hbWUgZm9yIHRoZSBnaXZlbiB0b3AtbGV2ZWwgb3Igc3RhdGljIG1lbWJlcgogIC8vLyBbZWxlbWVudF0uIFRoZSByZXR1cm5lZCBpZCBpcyBndWFyYW50ZWVkIHRvIGJlIGEgdmFsaWQgSmF2YVNjcmlwdAogIC8vLyBpZGVudGlmaWVyLgogIFN0cmluZyBfcHJvcG9zZU5hbWVGb3JNZW1iZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIGlmIChlbGVtZW50LmlzQ29uc3RydWN0b3IpIHsKICAgICAgcmV0dXJuIF9wcm9wb3NlTmFtZUZvckNvbnN0cnVjdG9yKGVsZW1lbnQpOwogICAgfSBlbHNlIGlmIChlbGVtZW50IGlzIEpHZW5lcmF0b3JCb2R5KSB7CiAgICAgIHJldHVybiBfcHJvcG9zZU5hbWVGb3JNZW1iZXIoZWxlbWVudC5mdW5jdGlvbikgKyByJyRib2R5JzsKICAgIH0gZWxzZSBpZiAoZWxlbWVudC5lbmNsb3NpbmdDbGFzcyAhPSBudWxsKSB7CiAgICAgIENsYXNzRW50aXR5IGVuY2xvc2luZ0NsYXNzID0gZWxlbWVudC5lbmNsb3NpbmdDbGFzczsKICAgICAgcmV0dXJuICcke2VuY2xvc2luZ0NsYXNzLm5hbWV9XyR7ZWxlbWVudC5uYW1lfSc7CiAgICB9CiAgICByZXR1cm4gZWxlbWVudC5uYW1lLnJlcGxhY2VBbGwoX25vbklkZW50aWZpZXJSRSwgJ18nKTsKICB9CgogIFN0cmluZyBfcHJvcG9zZU5hbWVGb3JMYXp5U3RhdGljR2V0dGVyKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gcickZ2V0JCcgKyBfcHJvcG9zZU5hbWVGb3JNZW1iZXIoZWxlbWVudCk7CiAgfQoKICBTdHJpbmcgX3Byb3Bvc2VOYW1lRm9yQ29uc3RydWN0b3IoQ29uc3RydWN0b3JFbnRpdHkgZWxlbWVudCkgewogICAgU3RyaW5nIGNsYXNzTmFtZSA9IGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MubmFtZTsKICAgIGlmIChlbGVtZW50LmlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yKSB7CiAgICAgIHJldHVybiAnJHtjbGFzc05hbWV9XCQke2VsZW1lbnQubmFtZX0nOwogICAgfSBlbHNlIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2hhbmdlIGZhY3RvcnkgbmFtZSBlbmNvZGluZyBhcyB0byBub3QgaW5jbHVkZQogICAgICAvLyB0aGUgY2xhc3MtbmFtZSB0d2ljZS4KICAgICAgcmV0dXJuICcke2NsYXNzTmFtZX1fJHt1dGlscy5yZWNvbnN0cnVjdENvbnN0cnVjdG9yTmFtZShlbGVtZW50KX0nOwogICAgfQogIH0KCiAgLy8vIFJldHVybnMgYSBwcm9wb3NlZCBuYW1lIGZvciB0aGUgZ2l2ZW4gW0xpYnJhcnlFbGVtZW50XS4KICAvLy8gVGhlIHJldHVybmVkIGlkIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGlkZW50aWZpZXIuCiAgLy8gVE9ETyhzcmEpOiBQcmUtcHJvY2VzcyBsaWJyYXJpZXMgdG8gYXNzaWduIFtsaWJyYXJ5TG9uZ05hbWVzXSBpbiBhIHdheSB0aGF0CiAgLy8gaXMgaW5kZXBlbmRlbnQgb2YgdGhlIG9yZGVyIG9mIGNhbGxzIHRvIG5hbWVyLgogIFN0cmluZyBfcHJvcG9zZU5hbWVGb3JMaWJyYXJ5KExpYnJhcnlFbnRpdHkgbGlicmFyeSkgewogICAgU3RyaW5nIG5hbWUgPSBsaWJyYXJ5TG9uZ05hbWVzW2xpYnJhcnldOwogICAgaWYgKG5hbWUgIT0gbnVsbCkgcmV0dXJuIG5hbWU7CiAgICAvLyBVc2UgdGhlICdmaWxlJyBuYW1lLCBlLmcuICJwYWNrYWdlOmV4cGVjdC9leHBlY3QuZGFydCIgLT4gImV4cGVjdCIKICAgIG5hbWUgPSBsaWJyYXJ5LmNhbm9uaWNhbFVyaS5wYXRoOwogICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKG5hbWUubGFzdEluZGV4T2YoJy8nKSArIDEpOwogICAgaWYgKG5hbWUuY29udGFpbnMoJy4nKSkgewogICAgICAvLyBEcm9wIGZpbGUgZXh0ZW5zaW9uLgogICAgICBuYW1lID0gbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sYXN0SW5kZXhPZignLicpKTsKICAgIH0KICAgIC8vIFRoZSBmaWxlbmFtZSBiYXNlZCBuYW1lIGNhbiBjb250YWluIGFsbCBraW5kcyBvZiBuYXN0eSBjaGFyYWN0ZXJzLiBNYWtlCiAgICAvLyBzdXJlIGl0IGlzIGFuIGlkZW50aWZpZXIuCiAgICBpZiAoIUlERU5USUZJRVIuaGFzTWF0Y2gobmFtZSkpIHsKICAgICAgU3RyaW5nIHJlcGxhY2VyKE1hdGNoIG1hdGNoKSB7CiAgICAgICAgU3RyaW5nIHMgPSBtYXRjaFswXTsKICAgICAgICBpZiAocyA9PSAnLicpIHJldHVybiAnXyc7CiAgICAgICAgcmV0dXJuIHMuY29kZVVuaXRBdCgwKS50b1JhZGl4U3RyaW5nKDE2KTsKICAgICAgfQoKICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZUFsbE1hcHBlZChOT05fSURFTlRJRklFUl9DSEFSLCByZXBsYWNlcik7CiAgICAgIGlmICghSURFTlRJRklFUi5oYXNNYXRjaChuYW1lKSkgewogICAgICAgIC8vIGUuZy4gc3RhcnRzIHdpdGggZGlnaXQuCiAgICAgICAgbmFtZSA9ICdsaWJfJG5hbWUnOwogICAgICB9CiAgICB9CiAgICAvLyBOYW1lcyBjb25zdHJ1Y3RlZCBiYXNlZCBvbiBhIGxpYmFyeSBuYW1lIHdpbGwgYmUgZnVydGhlciBkaXNhbWJpZ3VhdGVkLgogICAgLy8gSG93ZXZlciwgYXMgbmFtZXMgZnJvbSB0aGUgc2FtZSBsaWJhcnkgc2hvdWxkIGhhdmUgdGhlIHNhbWUgbGlicmFyeQogICAgLy8gbmFtZSBwYXJ0LCB3ZSBkaXNhbWJpZ3VhdGUgdGhlIGxpYnJhcnkgbmFtZSBoZXJlLgogICAgU3RyaW5nIGRpc2FtYmlndWF0ZWQgPSBuYW1lOwogICAgZm9yIChpbnQgYyA9IDA7IGxpYnJhcnlMb25nTmFtZXMuY29udGFpbnNWYWx1ZShkaXNhbWJpZ3VhdGVkKTsgYysrKSB7CiAgICAgIGRpc2FtYmlndWF0ZWQgPSAiJG5hbWUkYyI7CiAgICB9CiAgICBsaWJyYXJ5TG9uZ05hbWVzW2xpYnJhcnldID0gZGlzYW1iaWd1YXRlZDsKICAgIHJldHVybiBkaXNhbWJpZ3VhdGVkOwogIH0KCiAgU3RyaW5nIF9nZXRTdWZmaXhGb3JJbnRlcmNlcHRlZENsYXNzZXMoSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGNsYXNzZXMpIHsKICAgIGlmIChjbGFzc2VzLmlzRW1wdHkpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyLHNyYSk6IElmIFtjbGFzc2VzXSBpcyBlbXB0eSBpdCBzaG91bGQgZWl0aGVyIGhhdmUKICAgICAgLy8gaXRzIG93biBzdWZmaXggKGxpa2UgaGVyZSksIG9yIGFsd2F5cyBiZSBlcXVhdGVkIHdpdGggdGhlIHNldCBvZgogICAgICAvLyBjbGFzc2VzIHRoYXQgY29udGFpbiBgSW50ZXJjZXB0b3JgLiBGb3IgdGhlIGxhdHRlciB0byB3b3JrIHdlIG5lZWQgdG8KICAgICAgLy8gdXBkYXRlIGBPbmVTaG90SW50ZXJjZXB0b3JEYXRhLnJlZ2lzdGVyU3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcmAsCiAgICAgIC8vIHNpbmNlIGl0IGN1cnJlbnRseSB3b3VsZCBvdGhlcndpc2UgcG90ZW50aWFsbHkgb3ZlcndyaXRlIHRoZSBhbGwKICAgICAgLy8gaW50ZXJjZXB0ZWQgY2xhc3NlcyBjYXNlIHdpdGggdGhlIGVtcHR5IGNhc2UuCiAgICAgIHJldHVybiAneic7CiAgICB9IGVsc2UgaWYgKGNsYXNzZXMuY29udGFpbnMoX2NvbW1vbkVsZW1lbnRzLmpzSW50ZXJjZXB0b3JDbGFzcykpIHsKICAgICAgLy8gSWYgdGhlIGJhc2UgSW50ZXJjZXB0b3IgY2xhc3MgaXMgaW4gdGhlIHNldCBvZiBpbnRlcmNlcHRlZCBjbGFzc2VzLAogICAgICAvLyB0aGlzIGlzIHRoZSBtb3N0IGdlbmVyYWwgc3BlY2lhbGl6YXRpb24gd2hpY2ggdXNlcyB0aGUgZ2VuZXJpYwogICAgICAvLyBnZXRJbnRlcmNlcHRvciBtZXRob2QuCiAgICAgIC8vIFRPRE8oc3JhKTogRmluZCBhIHdheSB0byBnZXQgdGhlIHNpbXBsZSBuYW1lIHdoZW4gT2JqZWN0IGlzIG5vdCBpbiB0aGUKICAgICAgLy8gc2V0IG9mIGNsYXNzZXMgZm9yIG1vc3QgZ2VuZXJhbCB2YXJpYW50LCBlLmcuICIkbHQkbiIgY291bGQgYmUgIiRsdCIuCiAgICAgIHJldHVybiAnJzsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBzdWZmaXhGb3JHZXRJbnRlcmNlcHRvcihfY29tbW9uRWxlbWVudHMsIF9uYXRpdmVEYXRhLCBjbGFzc2VzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgbmFtZUZvckdldEludGVyY2VwdG9yKEl0ZXJhYmxlPENsYXNzRW50aXR5PiBjbGFzc2VzKSB7CiAgICAvLyBJZiB0aGUgYmFzZSBJbnRlcmNlcHRvciBjbGFzcyBpcyBpbiB0aGUgc2V0IG9mIGludGVyY2VwdGVkIGNsYXNzZXMsIHdlCiAgICAvLyBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIGdlbmVyaWMgZ2V0SW50ZXJjZXB0b3IgbWV0aG9kIChhbnkgc3ViY2xhc3Mgb2YgdGhlCiAgICAvLyBiYXNlIEludGVyY2VwdG9yIGNvdWxkIG1hdGNoKSwgd2hpY2ggaXMgZW5jb2RlZCBhcyBhbiBlbXB0eSBzdWZmaXguCiAgICBTdHJpbmcgc3VmZml4ID0gX2dldFN1ZmZpeEZvckludGVyY2VwdGVkQ2xhc3NlcyhjbGFzc2VzKTsKICAgIHJldHVybiBfZGlzYW1iaWd1YXRlSW50ZXJuYWxHbG9iYWwoJ2dldEludGVyY2VwdG9yXCQkc3VmZml4Jyk7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5OYW1lIG5hbWVGb3JPbmVTaG90SW50ZXJjZXB0b3IoCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLCBJdGVyYWJsZTxDbGFzc0VudGl0eT4gY2xhc3NlcykgewogICAgLy8gVGhlIG9uZS1zaG90IG5hbWUgaXMgYSBnbG9iYWwgbmFtZSBkZXJpdmVkIGZyb20gdGhlIGludm9jYXRpb24gbmFtZS4gIFRvCiAgICAvLyBhdm9pZCBpbnN0YWJpbGl0eSB3ZSB3b3VsZCBsaWtlIHRoZSBuYW1lcyB0byBiZSB1bmlxdWUgYW5kIG5vdCBjbGFzaCB3aXRoCiAgICAvLyBvdGhlciBnbG9iYWwgbmFtZXMuCiAgICBqc0FzdC5OYW1lIHJvb3QgPSBpbnZvY2F0aW9uTmFtZShzZWxlY3Rvcik7CgogICAgU3RyaW5nIHN1ZmZpeCA9IF9nZXRTdWZmaXhGb3JJbnRlcmNlcHRlZENsYXNzZXMoY2xhc3Nlcyk7CiAgICByZXR1cm4gbmV3IENvbXBvdW5kTmFtZSgKICAgICAgICBbcm9vdCwgX2xpdGVyYWxEb2xsYXIsIG5ldyBTdHJpbmdCYWNrZWROYW1lKHN1ZmZpeCldKTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgcnVudGltZVR5cGVOYW1lKEVudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoZWxlbWVudCA9PSBudWxsKSByZXR1cm4gX2xpdGVyYWxEeW5hbWljOwogICAgLy8gVGhlIHJldHVybmVkIG5hbWUgYWZmZWN0cyBib3RoIHRoZSBnbG9iYWwgYW5kIGluc3RhbmNlIG1lbWJlciBuYW1lc3BhY2VzOgogICAgLy8KICAgIC8vIC0gSWYgZ2l2ZW4gYSBjbGFzcywgdGhpcyBtdXN0IGNvaW5jaWRlIHdpdGggdGhlIGNsYXNzIG5hbWUsIHdoaWNoCiAgICAvLyAgIGlzIGFsc28gdGhlIEdMT0JBTCBwcm9wZXJ0eSBuYW1lIG9mIGl0cyBjb25zdHJ1Y3Rvci4KICAgIC8vCiAgICAvLyAtIFRoZSByZXN1bHQgaXMgdXNlZCB0byBkZXJpdmUgYCRpc1hgIGFuZCBgJGFzWGAgbmFtZXMsIHdoaWNoIGFyZSB1c2VkCiAgICAvLyAgIGFzIElOU1RBTkNFIHByb3BlcnR5IG5hbWVzLgogICAgLy8KICAgIC8vIFRvIHByZXZlbnQgY2xhc2hlcyBpbiBib3RoIG5hbWVzcGFjZXMgYXQgb25jZSwgd2UgZGlzYW1iaWd1YXRlIHRoZSBuYW1lCiAgICAvLyBhcyBhIGdsb2JhbCBoZXJlLCBhbmQgaW4gW19zYW5pdGl6ZUZvckFubm90YXRpb25zXSB3ZSBlbnN1cmUgdGhhdAogICAgLy8gb3JkaW5hcnkgaW5zdGFuY2UgbWVtYmVycyBjYW5ub3Qgc3RhcnQgd2l0aCBgJGlzYCBvciBgJGFzYC4KICAgIHJldHVybiBfZGlzYW1iaWd1YXRlR2xvYmFsVHlwZShlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgY2xhc3NOYW1lKENsYXNzRW50aXR5IGNsYXNzXykgPT4gX2Rpc2FtYmlndWF0ZUdsb2JhbFR5cGUoY2xhc3NfKTsKCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBhbGlhc2VkU3VwZXJNZW1iZXJQcm9wZXJ0eU5hbWUoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgYXNzZXJ0KCFtZW1iZXIuaXNGaWVsZCk7IC8vIEZpZWxkcyBkbyBub3QgbmVlZCBzdXBlciBhbGlhc2VzLgogICAgcmV0dXJuIF9kaXNhbWJpZ3VhdGVJbnRlcm5hbE1lbWJlcihtZW1iZXIsICgpIHsKICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IG1lbWJlci5lbmNsb3NpbmdDbGFzcy5uYW1lLnJlcGxhY2VBbGwoJyYnLCAnXycpOwogICAgICBTdHJpbmcgaW52b2NhdGlvbk5hbWUgPSBvcGVyYXRvck5hbWVUb0lkZW50aWZpZXIobWVtYmVyLm5hbWUpOwogICAgICByZXR1cm4gInN1cGVyXCQke2NsYXNzTmFtZX1cJCRpbnZvY2F0aW9uTmFtZSI7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgbWV0aG9kUHJvcGVydHlOYW1lKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCkgewogICAgcmV0dXJuIG1ldGhvZC5pc0luc3RhbmNlTWVtYmVyCiAgICAgICAgPyBpbnN0YW5jZU1ldGhvZE5hbWUobWV0aG9kKQogICAgICAgIDogZ2xvYmFsUHJvcGVydHlOYW1lRm9yTWVtYmVyKG1ldGhvZCk7CiAgfQoKICAvLy8gUmV0dXJucyB0cnVlIGlmIFtlbGVtZW50XSBpcyBzdG9yZWQgaW4gdGhlIHN0YXRpYyBzdGF0ZSBob2xkZXIKICAvLy8gKFtzdGF0aWNTdGF0ZUhvbGRlcl0pLiAgV2UgaW50ZW5kIHRvIHN0b3JlIG9ubHkgbXV0YWJsZSBzdGF0aWMgc3RhdGUKICAvLy8gdGhlcmUsIHdoZXJlYXMgY29uc3RhbnRzIGFyZSBzdG9yZWQgaW4gJ0MnLiBGdW5jdGlvbnMsIGFjY2Vzc29ycywKICAvLy8gY2xhc3NlcywgZXRjLiBhcmUgc3RvcmVkIGluIG9uZSBvZiB0aGUgb3RoZXIgb2JqZWN0cyBpbgogIC8vLyBbcmVzZXJ2ZWRHbG9iYWxPYmplY3ROYW1lc10uCiAgYm9vbCBfaXNQcm9wZXJ0eU9mU3RhdGljU3RhdGVIb2xkZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIC8vIFRPRE8oYWhlKTogTWFrZSBzdXJlIHRoaXMgbWV0aG9kJ3MgZG9jdW1lbnRhdGlvbiBpcyBhbHdheXMgdHJ1ZSBhbmQKICAgIC8vIHJlbW92ZSB0aGUgd29yZCAiaW50ZW5kIi4KICAgIHJldHVybiBlbGVtZW50LmlzRmllbGQ7CiAgfQoKICAvLy8gUmV0dXJucyBbc3RhdGljU3RhdGVIb2xkZXJdIG9yIG9uZSBvZiBbcmVzZXJ2ZWRHbG9iYWxPYmplY3ROYW1lc10uCiAgU3RyaW5nIGdsb2JhbE9iamVjdEZvck1lbWJlcihNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgaWYgKF9pc1Byb3BlcnR5T2ZTdGF0aWNTdGF0ZUhvbGRlcihlbGVtZW50KSkgcmV0dXJuIHN0YXRpY1N0YXRlSG9sZGVyOwogICAgcmV0dXJuIGdsb2JhbE9iamVjdEZvckxpYnJhcnkoZWxlbWVudC5saWJyYXJ5KTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LlZhcmlhYmxlVXNlIHJlYWRHbG9iYWxPYmplY3RGb3JNZW1iZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIGlmIChfaXNQcm9wZXJ0eU9mU3RhdGljU3RhdGVIb2xkZXIoZWxlbWVudCkpIHsKICAgICAgcmV0dXJuIG5ldyBqc0FzdC5WYXJpYWJsZVVzZShzdGF0aWNTdGF0ZUhvbGRlcik7CiAgICB9CiAgICByZXR1cm4gcmVhZEdsb2JhbE9iamVjdEZvckxpYnJhcnkoZWxlbWVudC5saWJyYXJ5KTsKICB9CgogIFN0cmluZyBnbG9iYWxPYmplY3RGb3JDbGFzcyhDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gZ2xvYmFsT2JqZWN0Rm9yTGlicmFyeShlbGVtZW50LmxpYnJhcnkpOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuVmFyaWFibGVVc2UgcmVhZEdsb2JhbE9iamVjdEZvckNsYXNzKENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiByZWFkR2xvYmFsT2JqZWN0Rm9yTGlicmFyeShlbGVtZW50LmxpYnJhcnkpOwogIH0KCiAgU3RyaW5nIGdsb2JhbE9iamVjdEZvclR5cGUoRW50aXR5IGVsZW1lbnQpIHsKICAgIGlmIChlbGVtZW50IGlzIFR5cGVkZWZFbnRpdHkpIHsKICAgICAgcmV0dXJuIGdsb2JhbE9iamVjdEZvckxpYnJhcnkoZWxlbWVudC5saWJyYXJ5KTsKICAgIH0KICAgIHJldHVybiBnbG9iYWxPYmplY3RGb3JDbGFzcyhlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LlZhcmlhYmxlVXNlIHJlYWRHbG9iYWxPYmplY3RGb3JUeXBlKEVudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoZWxlbWVudCBpcyBUeXBlZGVmRW50aXR5KSB7CiAgICAgIHJldHVybiByZWFkR2xvYmFsT2JqZWN0Rm9yTGlicmFyeShlbGVtZW50LmxpYnJhcnkpOwogICAgfQogICAgcmV0dXJuIHJlYWRHbG9iYWxPYmplY3RGb3JDbGFzcyhlbGVtZW50KTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBbcmVzZXJ2ZWRHbG9iYWxPYmplY3ROYW1lc10gZm9yIFtsaWJyYXJ5XS4KICBTdHJpbmcgZ2xvYmFsT2JqZWN0Rm9yTGlicmFyeShMaWJyYXJ5RW50aXR5IGxpYnJhcnkpIHsKICAgIGlmIChsaWJyYXJ5ID09IF9jb21tb25FbGVtZW50cy5pbnRlcmNlcHRvcnNMaWJyYXJ5KSByZXR1cm4gJ0onOwogICAgVXJpIHVyaSA9IGxpYnJhcnkuY2Fub25pY2FsVXJpOwogICAgaWYgKHVyaS5zY2hlbWUgPT0gJ2RhcnQnKSB7CiAgICAgIGlmICh1cmkucGF0aCA9PSAnaHRtbCcpIHJldHVybiAnVyc7CiAgICAgIGlmICh1cmkucGF0aC5zdGFydHNXaXRoKCdfJykpIHJldHVybiAnSCc7CiAgICAgIHJldHVybiAnUCc7CiAgICB9CiAgICByZXR1cm4gdXNlckdsb2JhbE9iamVjdHNbbGlicmFyeS5uYW1lLmhhc2hDb2RlICUgdXNlckdsb2JhbE9iamVjdHMubGVuZ3RoXTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LlZhcmlhYmxlVXNlIHJlYWRHbG9iYWxPYmplY3RGb3JMaWJyYXJ5KExpYnJhcnlFbnRpdHkgbGlicmFyeSkgewogICAgcmV0dXJuIG5ldyBqc0FzdC5WYXJpYWJsZVVzZShnbG9iYWxPYmplY3RGb3JMaWJyYXJ5KGxpYnJhcnkpKTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgbGF6eUluaXRpYWxpemVyTmFtZShGaWVsZEVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoZWxlbWVudC5pc1RvcExldmVsIHx8IGVsZW1lbnQuaXNTdGF0aWMpOwogICAganNBc3QuTmFtZSBuYW1lID0gX2Rpc2FtYmlndWF0ZUdsb2JhbDxNZW1iZXJFbnRpdHk+KAogICAgICAgIGVsZW1lbnQsIF9wcm9wb3NlTmFtZUZvckxhenlTdGF0aWNHZXR0ZXIsIHVzZXJHbG9iYWxzU2Vjb25kTmFtZSk7CiAgICByZXR1cm4gbmFtZTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgc3RhdGljQ2xvc3VyZU5hbWUoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KGVsZW1lbnQuaXNUb3BMZXZlbCB8fCBlbGVtZW50LmlzU3RhdGljKTsKICAgIFN0cmluZyBlbmNsb3NpbmcgPQogICAgICAgIGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MgPT0gbnVsbCA/ICIiIDogZWxlbWVudC5lbmNsb3NpbmdDbGFzcy5uYW1lOwogICAgU3RyaW5nIGxpYnJhcnkgPSBfcHJvcG9zZU5hbWVGb3JMaWJyYXJ5KGVsZW1lbnQubGlicmFyeSk7CiAgICByZXR1cm4gX2Rpc2FtYmlndWF0ZUludGVybmFsR2xvYmFsKAogICAgICAgICIke2xpYnJhcnl9XyR7ZW5jbG9zaW5nfV8ke2VsZW1lbnQubmFtZX1cJGNsb3N1cmUiKTsKICB9CgogIC8vIFRoaXMgbmFtZSBpcyB1c2VkIGFzIHBhcnQgb2YgdGhlIG5hbWUgb2YgYSBUeXBlQ29uc3RhbnQKICBTdHJpbmcgdW5pcXVlTmFtZUZvclR5cGVDb25zdGFudEVsZW1lbnQoCiAgICAgIExpYnJhcnlFbnRpdHkgbGlicmFyeSwgRW50aXR5IGVsZW1lbnQpIHsKICAgIC8vIFRPRE8oc3JhKTogSWYgd2UgcmVwbGFjZSB0aGUgcGVyaW9kIHdpdGggYW4gaWRlbnRpZmllciBjaGFyYWN0ZXIsCiAgICAvLyBUeXBlQ29uc3RhbnRzIHdpbGwgaGF2ZSBiZXR0ZXIgbmFtZXMgaW4gdW5taW5pZmllZCBjb2RlLgogICAgU3RyaW5nIGxpYnJhcnlOYW1lID0gX3Byb3Bvc2VOYW1lRm9yTGlicmFyeShsaWJyYXJ5KTsKICAgIHJldHVybiAiJHtsaWJyYXJ5TmFtZX0uJHtlbGVtZW50Lm5hbWV9IjsKICB9CgogIFN0cmluZyBnbG9iYWxPYmplY3RGb3JDb25zdGFudChDb25zdGFudFZhbHVlIGNvbnN0YW50KSA9PiAnQyc7CgogIFN0cmluZyBnZXQgZ2VuZXJpY0luc3RhbnRpYXRpb25QcmVmaXggPT4gcickaW5zdGFudGlhdGUnOwoKICAvLyBUaGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdXNlZCB0byBvZmZzZXQgZnVuY3Rpb24gc2lnbmF0dXJlcyBpbiBkZWZlcnJlZAogIC8vIHBhcnRzIHdpdGggdGhlIGZhc3Qtc3RhcnR1cCBlbWl0dGVyLgogIFN0cmluZyBnZXQgdHlwZXNPZmZzZXROYW1lID0+IHIndHlwZXNPZmZzZXQnOwoKICBNYXA8RnVuY3Rpb25UeXBlLCBqc0FzdC5OYW1lPiBmdW5jdGlvblR5cGVOYW1lTWFwID0gSGFzaE1hcCgpOwoKICBGdW5jdGlvblR5cGVOYW1lciBfZnVuY3Rpb25UeXBlTmFtZXI7CgogIGpzQXN0Lk5hbWUgZ2V0RnVuY3Rpb25UeXBlTmFtZShGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlKSB7CiAgICByZXR1cm4gZnVuY3Rpb25UeXBlTmFtZU1hcC5wdXRJZkFic2VudChmdW5jdGlvblR5cGUsICgpIHsKICAgICAgX2Z1bmN0aW9uVHlwZU5hbWVyID8/PSBuZXcgRnVuY3Rpb25UeXBlTmFtZXIoKTsKICAgICAgU3RyaW5nIHByb3Bvc2VkTmFtZSA9IF9mdW5jdGlvblR5cGVOYW1lci5jb21wdXRlTmFtZShmdW5jdGlvblR5cGUpOwogICAgICByZXR1cm4gZ2V0RnJlc2hOYW1lKGluc3RhbmNlU2NvcGUsIHByb3Bvc2VkTmFtZSk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgb3BlcmF0b3JJc1R5cGUoRGFydFR5cGUgdHlwZSkgewogICAgaWYgKHR5cGUuaXNGdW5jdGlvblR5cGUpIHsKICAgICAgLy8gVE9ETyhlcmlrY29ycnkpOiBSZWR1Y2UgZnJvbSAkaXN4IHRvIGl4IHdoZW4gd2UgYXJlIG1pbmlmeWluZy4KICAgICAgcmV0dXJuIG5ldyBDb21wb3VuZE5hbWUoWwogICAgICAgIG5ldyBTdHJpbmdCYWNrZWROYW1lKGZpeGVkTmFtZXMub3BlcmF0b3JJc1ByZWZpeCksCiAgICAgICAgX2xpdGVyYWxVbmRlcnNjb3JlLAogICAgICAgIGdldEZ1bmN0aW9uVHlwZU5hbWUodHlwZSkKICAgICAgXSk7CiAgICB9CiAgICBJbnRlcmZhY2VUeXBlIGludGVyZmFjZVR5cGUgPSB0eXBlOwogICAgcmV0dXJuIG9wZXJhdG9ySXMoaW50ZXJmYWNlVHlwZS5lbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgb3BlcmF0b3JJcyhDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICAvLyBUT0RPKGVyaWtjb3JyeSk6IFJlZHVjZSBmcm9tICRpc3ggdG8gaXggd2hlbiB3ZSBhcmUgbWluaWZ5aW5nLgogICAgcmV0dXJuIG5ldyBDb21wb3VuZE5hbWUoWwogICAgICBuZXcgU3RyaW5nQmFja2VkTmFtZShmaXhlZE5hbWVzLm9wZXJhdG9ySXNQcmVmaXgpLAogICAgICBydW50aW1lVHlwZU5hbWUoZWxlbWVudCkKICAgIF0pOwogIH0KCiAgLy8vIFJldHVybnMgYSBuYW1lIHRoYXQgZG9lcyBub3QgY2xhc2ggd2l0aCByZXNlcnZlZCBKUyBrZXl3b3Jkcy4KICBTdHJpbmcgX3Nhbml0aXplRm9yS2V5d29yZHMoU3RyaW5nIG5hbWUpIHsKICAgIGlmIChqc1Jlc2VydmVkLmNvbnRhaW5zKG5hbWUpKSB7CiAgICAgIG5hbWUgPSAnXCQkbmFtZSc7CiAgICB9CiAgICBhc3NlcnQoIWpzUmVzZXJ2ZWQuY29udGFpbnMobmFtZSkpOwogICAgcmV0dXJuIG5hbWU7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5OYW1lIHN1YnN0aXR1dGlvbk5hbWUoQ2xhc3NFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIG5ldyBDb21wb3VuZE5hbWUoWwogICAgICBuZXcgU3RyaW5nQmFja2VkTmFtZShmaXhlZE5hbWVzLm9wZXJhdG9yQXNQcmVmaXgpLAogICAgICBydW50aW1lVHlwZU5hbWUoZWxlbWVudCkKICAgIF0pOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBhc05hbWUoU3RyaW5nIG5hbWUpIHsKICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoZml4ZWROYW1lcy5nZXR0ZXJQcmVmaXgpICYmCiAgICAgICAgbmFtZS5sZW5ndGggPiBmaXhlZE5hbWVzLmdldHRlclByZWZpeC5sZW5ndGgpIHsKICAgICAgcmV0dXJuIG5ldyBHZXR0ZXJOYW1lKF9saXRlcmFsR2V0dGVyUHJlZml4LAogICAgICAgICAgbmV3IFN0cmluZ0JhY2tlZE5hbWUobmFtZS5zdWJzdHJpbmcoZml4ZWROYW1lcy5nZXR0ZXJQcmVmaXgubGVuZ3RoKSkpOwogICAgfQogICAgaWYgKG5hbWUuc3RhcnRzV2l0aChmaXhlZE5hbWVzLnNldHRlclByZWZpeCkgJiYKICAgICAgICBuYW1lLmxlbmd0aCA+IGZpeGVkTmFtZXMuc2V0dGVyUHJlZml4Lmxlbmd0aCkgewogICAgICByZXR1cm4gbmV3IEdldHRlck5hbWUoX2xpdGVyYWxTZXR0ZXJQcmVmaXgsCiAgICAgICAgICBuZXcgU3RyaW5nQmFja2VkTmFtZShuYW1lLnN1YnN0cmluZyhmaXhlZE5hbWVzLnNldHRlclByZWZpeC5sZW5ndGgpKSk7CiAgICB9CgogICAgcmV0dXJuIG5ldyBTdHJpbmdCYWNrZWROYW1lKG5hbWUpOwogIH0KCiAgU3RyaW5nIG9wZXJhdG9yTmFtZVRvSWRlbnRpZmllcihTdHJpbmcgbmFtZSkgewogICAgaWYgKG5hbWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpZiAobmFtZSA9PSAnPT0nKSB7CiAgICAgIHJldHVybiByJyRlcSc7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJ34nKSB7CiAgICAgIHJldHVybiByJyRub3QnOwogICAgfSBlbHNlIGlmIChuYW1lID09ICdbXScpIHsKICAgICAgcmV0dXJuIHInJGluZGV4JzsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSAnW109JykgewogICAgICByZXR1cm4gcickaW5kZXhTZXQnOwogICAgfSBlbHNlIGlmIChuYW1lID09ICcqJykgewogICAgICByZXR1cm4gcickbXVsJzsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSAnLycpIHsKICAgICAgcmV0dXJuIHInJGRpdic7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJyUnKSB7CiAgICAgIHJldHVybiByJyRtb2QnOwogICAgfSBlbHNlIGlmIChuYW1lID09ICd+LycpIHsKICAgICAgcmV0dXJuIHInJHRkaXYnOwogICAgfSBlbHNlIGlmIChuYW1lID09ICcrJykgewogICAgICByZXR1cm4gcickYWRkJzsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSAnPDwnKSB7CiAgICAgIHJldHVybiByJyRzaGwnOwogICAgfSBlbHNlIGlmIChuYW1lID09ICc+PicpIHsKICAgICAgcmV0dXJuIHInJHNocic7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJz4+PicpIHsKICAgICAgcmV0dXJuIHInJHNocnUnOwogICAgfSBlbHNlIGlmIChuYW1lID09ICc+PScpIHsKICAgICAgcmV0dXJuIHInJGdlJzsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSAnPicpIHsKICAgICAgcmV0dXJuIHInJGd0JzsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSAnPD0nKSB7CiAgICAgIHJldHVybiByJyRsZSc7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJzwnKSB7CiAgICAgIHJldHVybiByJyRsdCc7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJyYnKSB7CiAgICAgIHJldHVybiByJyRhbmQnOwogICAgfSBlbHNlIGlmIChuYW1lID09ICdeJykgewogICAgICByZXR1cm4gcickeG9yJzsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSAnfCcpIHsKICAgICAgcmV0dXJuIHInJG9yJzsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSAnLScpIHsKICAgICAgcmV0dXJuIHInJHN1Yic7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJ3VuYXJ5LScpIHsKICAgICAgcmV0dXJuIHInJG5lZ2F0ZSc7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmFtZTsKICAgIH0KICB9CgogIFN0cmluZyBnZXRUeXBlUmVwcmVzZW50YXRpb25Gb3JUeXBlQ29uc3RhbnQoRGFydFR5cGUgdHlwZSkgewogICAgaWYgKHR5cGUuaXNEeW5hbWljKSByZXR1cm4gImR5bmFtaWMiOwogICAgaWYgKHR5cGUgaXMgVHlwZWRlZlR5cGUpIHsKICAgICAgcmV0dXJuIHVuaXF1ZU5hbWVGb3JUeXBlQ29uc3RhbnRFbGVtZW50KAogICAgICAgICAgdHlwZS5lbGVtZW50LmxpYnJhcnksIHR5cGUuZWxlbWVudCk7CiAgICB9CiAgICBpZiAodHlwZSBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQWRkIG5hbWluZyBzY2hlbWUgZm9yIGZ1bmN0aW9uIHR5cGUgbGl0ZXJhbHMuCiAgICAgIC8vIFRoZXNlIGN1cnJlbnRseSBvbmx5IG9jY3VyIGZyb20ga2VybmVsLgogICAgICByZXR1cm4gJygpLT4nOwogICAgfQogICAgSW50ZXJmYWNlVHlwZSBpbnRlcmZhY2UgPSB0eXBlOwogICAgU3RyaW5nIG5hbWUgPSB1bmlxdWVOYW1lRm9yVHlwZUNvbnN0YW50RWxlbWVudCgKICAgICAgICBpbnRlcmZhY2UuZWxlbWVudC5saWJyYXJ5LCBpbnRlcmZhY2UuZWxlbWVudCk7CgogICAgLy8gVHlwZSBjb25zdGFudHMgY2FuIGN1cnJlbnRseSBvbmx5IGJlIHJhdyB0eXBlcywgc28gdGhlcmUgaXMgbm8gcG9pbnQKICAgIC8vIGFkZGluZyBncm91bmQtdGVybSB0eXBlIHBhcmFtZXRlcnMsIGFzIHRoZXkgd291bGQganVzdCBiZSAnZHluYW1pYycuCiAgICAvLyBUT0RPKHNyYSk6IFNpbmNlIHRoZSByZXN1bHQgc3RyaW5nIGlzIHVzZWQgb25seSBpbiBjb25zdHJ1Y3RpbmcgY29uc3RhbnQKICAgIC8vIG5hbWVzLCBpdCB3b3VsZCByZXN1bHQgaW4gbW9yZSByZWFkYWJsZSBuYW1lcyBpZiB0aGUgZmluYWwgc3RyaW5nIHdhcyBhCiAgICAvLyBsZWdhbCBKYXZhU2NyaXB0IGlkZW50aWZpZXIuCiAgICBpZiAoaW50ZXJmYWNlLnR5cGVBcmd1bWVudHMuaXNFbXB0eSkgcmV0dXJuIG5hbWU7CiAgICBTdHJpbmcgYXJndW1lbnRzID0KICAgICAgICBuZXcgTGlzdC5maWxsZWQoaW50ZXJmYWNlLnR5cGVBcmd1bWVudHMubGVuZ3RoLCAnZHluYW1pYycpLmpvaW4oJywgJyk7CiAgICByZXR1cm4gJyRuYW1lPCRhcmd1bWVudHM+JzsKICB9Cn0KCi8vLyBSZXR1cm5zIGEgdW5pcXVlIHN1ZmZpeCBmb3IgYW4gaW50ZXJjZXB0ZWQgYWNjZXNzZXMgdG8gW2NsYXNzZXNdLiBUaGlzIGlzCi8vLyB1c2VkIGFzIHRoZSBzdWZmaXggZm9yIGVtaXR0ZWQgaW50ZXJjZXB0b3IgbWV0aG9kcyBhbmQgYXMgdGhlIHVuaXF1ZSBrZXkKLy8vIHVzZWQgdG8gZGlzdGluZ3Vpc2ggZXF1aXZhbGVuY2VzIG9mIHNldHMgb2YgaW50ZXJjZXB0ZWQgY2xhc3Nlcy4KU3RyaW5nIHN1ZmZpeEZvckdldEludGVyY2VwdG9yKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgTmF0aXZlRGF0YSBuYXRpdmVEYXRhLCBJdGVyYWJsZTxDbGFzc0VudGl0eT4gY2xhc3NlcykgewogIFN0cmluZyBhYmJyZXZpYXRlKENsYXNzRW50aXR5IGNscykgewogICAgaWYgKGNscyA9PSBjb21tb25FbGVtZW50cy5vYmplY3RDbGFzcykgcmV0dXJuICJvIjsKICAgIGlmIChjbHMgPT0gY29tbW9uRWxlbWVudHMuanNTdHJpbmdDbGFzcykgcmV0dXJuICJzIjsKICAgIGlmIChjbHMgPT0gY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzKSByZXR1cm4gImEiOwogICAgaWYgKGNscyA9PSBjb21tb25FbGVtZW50cy5qc0RvdWJsZUNsYXNzKSByZXR1cm4gImQiOwogICAgaWYgKGNscyA9PSBjb21tb25FbGVtZW50cy5qc0ludENsYXNzKSByZXR1cm4gImkiOwogICAgaWYgKGNscyA9PSBjb21tb25FbGVtZW50cy5qc051bWJlckNsYXNzKSByZXR1cm4gIm4iOwogICAgaWYgKGNscyA9PSBjb21tb25FbGVtZW50cy5qc051bGxDbGFzcykgcmV0dXJuICJ1IjsKICAgIGlmIChjbHMgPT0gY29tbW9uRWxlbWVudHMuanNCb29sQ2xhc3MpIHJldHVybiAiYiI7CiAgICBpZiAoY2xzID09IGNvbW1vbkVsZW1lbnRzLmpzSW50ZXJjZXB0b3JDbGFzcykgcmV0dXJuICJJIjsKICAgIHJldHVybiBjbHMubmFtZTsKICB9CgogIExpc3Q8U3RyaW5nPiBuYW1lcyA9IGNsYXNzZXMKICAgICAgLndoZXJlKChjbHMpID0+ICFuYXRpdmVEYXRhLmlzTmF0aXZlT3JFeHRlbmRzTmF0aXZlKGNscykpCiAgICAgIC5tYXAoYWJicmV2aWF0ZSkKICAgICAgLnRvTGlzdCgpOwogIC8vIFRoZXJlIGlzIG9uZSBkaXNwYXRjaCBtZWNoYW5pc20gZm9yIGFsbCBuYXRpdmUgY2xhc3Nlcy4KICBpZiAoY2xhc3Nlcy5hbnkoKGNscykgPT4gbmF0aXZlRGF0YS5pc05hdGl2ZU9yRXh0ZW5kc05hdGl2ZShjbHMpKSkgewogICAgbmFtZXMuYWRkKCJ4Iik7CiAgfQogIC8vIFNvcnQgdGhlIG5hbWVzIG9mIHRoZSBjbGFzc2VzIGFmdGVyIGFiYnJldmlhdGluZyB0aGVtIHRvIGVuc3VyZQogIC8vIHRoZSBzdWZmaXggaXMgc3RhYmxlIGFuZCBwcmVkaWN0YWJsZSBmb3IgdGhlIHN1Z2dlc3RlZCBuYW1lcy4KICBuYW1lcy5zb3J0KCk7CiAgcmV0dXJuIG5hbWVzLmpvaW4oKTsKfQoKLy8vIEdlbmVyYXRvciBvZiBuYW1lcyBmb3IgW0NvbnN0YW50VmFsdWVdIHZhbHVlcy4KLy8vCi8vLyBUaGUgbmFtZXMgYXJlIHN0YWJsZSB1bmRlciBwZXJ0dXJiYXRpb25zIG9mIHRoZSBzb3VyY2UuICBUaGUgbmFtZSBpcyBlaXRoZXIKLy8vIGEgc2hvcnQgc2VxdWVuY2Ugb2Ygd29yZHMsIGlmIHRoaXMgY2FuIGJlIGZvdW5kIGZyb20gdGhlIGNvbnN0YW50LCBvciBhIHR5cGUKLy8vIGZvbGxvd2VkIGJ5IGEgaGFzaCB0YWcuCi8vLwovLy8gICAgIExpc3RfaW1YICAgICAgICAgICAgICAgIC8vIEEgTGlzdCwgd2l0aCBoYXNoIHRhZy4KLy8vICAgICBDX1NlbnRpbmVsICAgICAgICAgICAgICAvLyBjb25zdCBTZW50aW5lbCgpLCAgIkNfIiBhZGRlZCB0byBhdm9pZCBjbGFzaAovLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgd2l0aCBjbGFzcyBuYW1lLgovLy8gICAgIEpTSW50X21ldGhvZHMgICAgICAgICAgIC8vIGFuIGludGVyY2VwdG9yLgovLy8gICAgIER1cmF0aW9uXzE2MDAwICAgICAgICAgIC8vIGNvbnN0IER1cmF0aW9uKG1pbGxpc2Vjb25kczogMTYpCi8vLyAgICAgRXZlbnRLZXlQcm92aWRlcl9rZXl1cCAgLy8gY29uc3QgRXZlbnRLZXlQcm92aWRlcigna2V5dXAnKQovLy8KY2xhc3MgQ29uc3RhbnROYW1pbmdWaXNpdG9yIGltcGxlbWVudHMgQ29uc3RhbnRWYWx1ZVZpc2l0b3IgewogIHN0YXRpYyBmaW5hbCBSZWdFeHAgSURFTlRJRklFUiA9IG5ldyBSZWdFeHAocideW0EtWmEtel8kXVtBLVphLXowLTlfJF0qJCcpOwogIHN0YXRpYyBjb25zdCBNQVhfRlJBR01FTlRTID0gNTsKICBzdGF0aWMgY29uc3QgTUFYX0VYVFJBX0xFTkdUSCA9IDMwOwogIHN0YXRpYyBjb25zdCBERUZBVUxUX1RBR19MRU5HVEggPSAzOwoKICBmaW5hbCBOYW1lciBfbmFtZXI7CiAgZmluYWwgSkNsb3NlZFdvcmxkIF9jbG9zZWRXb3JsZDsKICBmaW5hbCBDb25zdGFudENhbm9uaWNhbEhhc2hlciBfaGFzaGVyOwoKICBTdHJpbmcgcm9vdCA9IG51bGw7IC8vIEZpcnN0IHdvcmQsIHVzdWFsbHkgYSB0eXBlIG5hbWUuCiAgYm9vbCBmYWlsZWQgPSBmYWxzZTsgLy8gRmFpbGVkIHRvIGdlbmVyYXRlIHNvbWV0aGluZyBwcmV0dHkuCiAgTGlzdDxTdHJpbmc+IGZyYWdtZW50cyA9IDxTdHJpbmc+W107CiAgaW50IGxlbmd0aCA9IDA7CgogIENvbnN0YW50TmFtaW5nVmlzaXRvcih0aGlzLl9uYW1lciwgdGhpcy5fY2xvc2VkV29ybGQsIHRoaXMuX2hhc2hlcik7CgogIEpFbGVtZW50RW52aXJvbm1lbnQgZ2V0IF9lbGVtZW50RW52aXJvbm1lbnQgPT4KICAgICAgX2Nsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudDsKICBKRmllbGRBbmFseXNpcyBnZXQgX2ZpZWxkQW5hbHlzaXMgPT4gX2Nsb3NlZFdvcmxkLmZpZWxkQW5hbHlzaXM7CgogIFN0cmluZyBnZXROYW1lKENvbnN0YW50VmFsdWUgY29uc3RhbnQpIHsKICAgIF92aXNpdChjb25zdGFudCk7CiAgICBpZiAocm9vdCA9PSBudWxsKSByZXR1cm4gJ0NPTlNUQU5UJzsKICAgIGlmIChmYWlsZWQpIHJldHVybiAnJHtyb290fV8ke2dldEhhc2hUYWcoY29uc3RhbnQsIERFRkFVTFRfVEFHX0xFTkdUSCl9JzsKICAgIGlmIChmcmFnbWVudHMubGVuZ3RoID09IDEpIHJldHVybiAnQ18ke3Jvb3R9JzsKICAgIHJldHVybiBmcmFnbWVudHMuam9pbignXycpOwogIH0KCiAgU3RyaW5nIGdldEhhc2hUYWcoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgaW50IHdpZHRoKSA9PgogICAgICBoYXNoV29yZChfaGFzaGVyLmdldEhhc2goY29uc3RhbnQpLCB3aWR0aCk7CgogIFN0cmluZyBoYXNoV29yZChpbnQgaGFzaCwgaW50IGxlbmd0aCkgewogICAgaGFzaCAmPSAweDFmZmZmZmZmOwogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBpbnQgZGlnaXQgPSBoYXNoICUgNjI7CiAgICAgIHNiLndyaXRlKCcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWidbCiAgICAgICAgICBkaWdpdF0pOwogICAgICBoYXNoIH4vPSA2MjsKICAgICAgaWYgKGhhc2ggPT0gMCkgYnJlYWs7CiAgICB9CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIHZvaWQgYWRkUm9vdChTdHJpbmcgZnJhZ21lbnQpIHsKICAgIGlmIChyb290ID09IG51bGwgJiYgZnJhZ21lbnRzLmlzRW1wdHkpIHsKICAgICAgcm9vdCA9IGZyYWdtZW50OwogICAgfQogICAgYWRkKGZyYWdtZW50KTsKICB9CgogIHZvaWQgYWRkKFN0cmluZyBmcmFnbWVudCkgewogICAgYXNzZXJ0KGZyYWdtZW50Lmxlbmd0aCA+IDApOwogICAgZnJhZ21lbnRzLmFkZChmcmFnbWVudCk7CiAgICBsZW5ndGggKz0gZnJhZ21lbnQubGVuZ3RoOwogICAgaWYgKGZyYWdtZW50cy5sZW5ndGggPiBNQVhfRlJBR01FTlRTKSBmYWlsZWQgPSB0cnVlOwogICAgaWYgKHJvb3QgIT0gbnVsbCAmJiBsZW5ndGggPiByb290Lmxlbmd0aCArIDEgKyBNQVhfRVhUUkFfTEVOR1RIKSB7CiAgICAgIGZhaWxlZCA9IHRydWU7CiAgICB9CiAgfQoKICB2b2lkIGFkZElkZW50aWZpZXIoU3RyaW5nIGZyYWdtZW50KSB7CiAgICBpZiAoZnJhZ21lbnQubGVuZ3RoIDw9IE1BWF9FWFRSQV9MRU5HVEggJiYgSURFTlRJRklFUi5oYXNNYXRjaChmcmFnbWVudCkpIHsKICAgICAgYWRkKGZyYWdtZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIGZhaWxlZCA9IHRydWU7CiAgICB9CiAgfQoKICB2b2lkIF92aXNpdChDb25zdGFudFZhbHVlIGNvbnN0YW50KSB7CiAgICBjb25zdGFudC5hY2NlcHQodGhpcywgbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RnVuY3Rpb24oRnVuY3Rpb25Db25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIGFkZChjb25zdGFudC5lbGVtZW50Lm5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEluc3RhbnRpYXRpb24oSW5zdGFudGlhdGlvbkNvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgX3Zpc2l0KGNvbnN0YW50LmZ1bmN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXROdWxsKE51bGxDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIGFkZCgnbnVsbCcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE5vbkNvbnN0YW50KE5vbkNvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgYWRkKCdudWxsJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50KEludENvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgLy8gTm8gYGFkZFJvb3RgIHNpbmNlIEludENvbnN0YW50cyBhcmUgYWx3YXlzIGlubGluZWQuCiAgICBpZiAoY29uc3RhbnQuaW50VmFsdWUgPCBCaWdJbnQuemVybykgewogICAgICBhZGQoJ20key1jb25zdGFudC5pbnRWYWx1ZX0nKTsKICAgIH0gZWxzZSB7CiAgICAgIGFkZCgnJHtjb25zdGFudC5pbnRWYWx1ZX0nKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREb3VibGUoRG91YmxlQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICBmYWlsZWQgPSB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJvb2woQm9vbENvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgYWRkKGNvbnN0YW50LmlzVHJ1ZSA/ICd0cnVlJyA6ICdmYWxzZScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0cmluZyhTdHJpbmdDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIC8vIE5vIGBhZGRSb290YCBzaW5jZSBzdHJpbmcgY29uc3RhbnRzIGFyZSBhbHdheXMgaW5saW5lZC4KICAgIGFkZElkZW50aWZpZXIoY29uc3RhbnQuc3RyaW5nVmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpc3QoTGlzdENvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgLy8gVE9ETyg5NDc2KTogSW5jb3Jwb3JhdGUgdHlwZSBwYXJhbWV0ZXJzIGludG8gbmFtZS4KICAgIGFkZFJvb3QoJ0xpc3QnKTsKICAgIGludCBsZW5ndGggPSBjb25zdGFudC5sZW5ndGg7CiAgICBpZiAoY29uc3RhbnQubGVuZ3RoID09IDApIHsKICAgICAgYWRkKCdlbXB0eScpOwogICAgfSBlbHNlIGlmIChsZW5ndGggPj0gTUFYX0ZSQUdNRU5UUykgewogICAgICBmYWlsZWQgPSB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIF92aXNpdChjb25zdGFudC5lbnRyaWVzW2ldKTsKICAgICAgICBpZiAoZmFpbGVkKSBicmVhazsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFNldChTZXRDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIC8vIFRPRE8oOTQ3Nik6IEluY29ycG9yYXRlIHR5cGUgcGFyYW1ldGVycyBpbnRvIG5hbWUuCiAgICBhZGRSb290KCdTZXQnKTsKICAgIGlmIChjb25zdGFudC5sZW5ndGggPT0gMCkgewogICAgICBhZGQoJ2VtcHR5Jyk7CiAgICB9IGVsc2UgewogICAgICBhZGQoZ2V0SGFzaFRhZyhjb25zdGFudCwgNSkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE1hcChjb3ZhcmlhbnQgY29uc3RhbnRfc3lzdGVtLkphdmFTY3JpcHRNYXBDb25zdGFudCBjb25zdGFudCwgW19dKSB7CiAgICAvLyBUT0RPKDk0NzYpOiBJbmNvcnBvcmF0ZSB0eXBlIHBhcmFtZXRlcnMgaW50byBuYW1lLgogICAgYWRkUm9vdCgnTWFwJyk7CiAgICBpZiAoY29uc3RhbnQubGVuZ3RoID09IDApIHsKICAgICAgYWRkKCdlbXB0eScpOwogICAgfSBlbHNlIHsKICAgICAgLy8gVXNpbmcgc29tZSBiaXRzIGZyb20gdGhlIGtleXMgaGFzaCB0YWcgZ3JvdXBzIHRoZSBuYW1lcyBNYXBzIHdpdGggdGhlCiAgICAgIC8vIHNhbWUgc3RydWN0dXJlLgogICAgICBhZGQoZ2V0SGFzaFRhZyhjb25zdGFudC5rZXlMaXN0LCAyKSArIGdldEhhc2hUYWcoY29uc3RhbnQsIDMpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb25zdHJ1Y3RlZChDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgYWRkUm9vdChjb25zdGFudC50eXBlLmVsZW1lbnQubmFtZSk7CgogICAgLy8gUmVjb2duaXplIGVudW0gY29uc3RhbnRzIGFuZCBvbmx5IGluY2x1ZGUgdGhlIGluZGV4LgogICAgZmluYWwgTWFwPEZpZWxkRW50aXR5LCBDb25zdGFudFZhbHVlPiBmaWVsZE1hcCA9IGNvbnN0YW50LmZpZWxkczsKICAgIGludCBzaXplID0gZmllbGRNYXAubGVuZ3RoOwogICAgaWYgKHNpemUgPT0gMSB8fCBzaXplID09IDIpIHsKICAgICAgRmllbGRFbnRpdHkgaW5kZXhGaWVsZDsKICAgICAgZm9yIChGaWVsZEVudGl0eSBmaWVsZCBpbiBmaWVsZE1hcC5rZXlzKSB7CiAgICAgICAgU3RyaW5nIG5hbWUgPSBmaWVsZC5uYW1lOwogICAgICAgIGlmIChuYW1lID09ICdpbmRleCcpIHsKICAgICAgICAgIGluZGV4RmllbGQgPSBmaWVsZDsKICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJ19uYW1lJykgewogICAgICAgICAgLy8gSWdub3JlIF9uYW1lIGZpZWxkLgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbmRleEZpZWxkID0gbnVsbDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoaW5kZXhGaWVsZCAhPSBudWxsKSB7CiAgICAgICAgX3Zpc2l0KGNvbnN0YW50LmZpZWxkc1tpbmRleEZpZWxkXSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CgogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVGhpcyBzaG91bGQgYmUgYWNjZXNzZWQgZnJvbSBhIGNvZGVnZW4gY2xvc2VkIHdvcmxkLgogICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoSW5zdGFuY2VGaWVsZChjb25zdGFudC50eXBlLmVsZW1lbnQsCiAgICAgICAgKF8sIEZpZWxkRW50aXR5IGZpZWxkKSB7CiAgICAgIGlmIChmYWlsZWQpIHJldHVybjsKICAgICAgaWYgKF9maWVsZEFuYWx5c2lzLmdldEZpZWxkRGF0YShmaWVsZCkuaXNFbGlkZWQpIHJldHVybjsKICAgICAgX3Zpc2l0KGNvbnN0YW50LmZpZWxkc1tmaWVsZF0pOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZShUeXBlQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICAvLyBHZW5lcmF0ZXMgc29tZXRoaW5nIGxpa2UgJ1R5cGVfU3RyaW5nX2s4RicsIHVzaW5nIHRoZSBzaW1wbGUgbmFtZSBvZiB0aGUKICAgIC8vIHR5cGUgYW5kIGEgaGFzaCB0byBkaXNhbWJpZ3VhdGUgdGhlIHNhbWUgbmFtZSBpbiBkaWZmZXJlbnQgbGlicmFyaWVzLgogICAgYWRkUm9vdCgnVHlwZScpOwogICAgRGFydFR5cGUgdHlwZSA9IGNvbnN0YW50LnJlcHJlc2VudGVkVHlwZTsKICAgIFN0cmluZyBuYW1lOwogICAgaWYgKHR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICBuYW1lID0gdHlwZS5lbGVtZW50Lm5hbWU7CiAgICB9IGVsc2UgaWYgKHR5cGUgaXMgVHlwZWRlZlR5cGUpIHsKICAgICAgbmFtZSA9IHR5cGUuZWxlbWVudC5uYW1lOwogICAgfQogICAgaWYgKG5hbWUgPT0gbnVsbCkgewogICAgICAvLyBlLmcuIERhcnRUeXBlICdkeW5hbWljJyBoYXMgbm8gZWxlbWVudC4KICAgICAgbmFtZSA9IF9uYW1lci5nZXRUeXBlUmVwcmVzZW50YXRpb25Gb3JUeXBlQ29uc3RhbnQodHlwZSk7CiAgICB9CiAgICBhZGRJZGVudGlmaWVyKG5hbWUpOwogICAgYWRkKGdldEhhc2hUYWcoY29uc3RhbnQsIDMpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRlcmNlcHRvcihJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgLy8gVGhlIGNsYXNzIG5hbWUgZm9yIG1peGluIGFwcGxpY2F0aW9ucyBjb250YWluICcrJyBzaWducyAoaXNzdWUgMjgxOTYpLgogICAgYWRkUm9vdChjb25zdGFudC5jbHMubmFtZS5yZXBsYWNlQWxsKCcrJywgJ18nKSk7CiAgICBhZGQoJ21ldGhvZHMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREdW1teUludGVyY2VwdG9yKER1bW15SW50ZXJjZXB0b3JDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIGFkZCgnZHVtbXlfaW50ZXJjZXB0b3InKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRVbnJlYWNoYWJsZShVbnJlYWNoYWJsZUNvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgYWRkKCd1bnJlYWNoYWJsZScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEpzTmFtZShKc05hbWVDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIGFkZCgnbmFtZScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERlZmVycmVkR2xvYmFsKERlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICBhZGRSb290KCdEZWZlcnJlZCcpOwogIH0KfQoKLy8vIEdlbmVyYXRlcyBjYW5vbmljYWwgaGFzaCB2YWx1ZXMgZm9yIFtDb25zdGFudFZhbHVlXXMuCi8vLwovLy8gVW5mb3J0dW5hdGVseSwgW0NvbnN0YW50Lmhhc2hDb2RlXSBpcyBub3Qgc3RhYmxlIHVuZGVyIG1pbm9yIHBlcnR1cmJhdGlvbnMsCi8vLyBzbyBpdCBjYW4ndCBiZSB1c2VkIGZvciBnZW5lcmF0aW5nIG5hbWVzLiAgVGhpcyBoYXNoZXIga2VlcHMgY29uc2lzdGVuY3kKLy8vIGJldHdlZW4gcnVucyBieSBiYXNpbmcgaGFzaCB2YWx1ZXMgb2YgdGhlIG5hbWVzIG9mIGVsZW1lbnRzLCByYXRoZXIgdGhhbgovLy8gdGhlaXIgaGFzaENvZGVzLgpjbGFzcyBDb25zdGFudENhbm9uaWNhbEhhc2hlciBpbXBsZW1lbnRzIENvbnN0YW50VmFsdWVWaXNpdG9yPGludCwgTnVsbD4gewogIHN0YXRpYyBjb25zdCBfTUFTSyA9IDB4MWZmZmZmZmY7CiAgc3RhdGljIGNvbnN0IF9VSU5UMzJfTElNSVQgPSA0ICogMTAyNCAqIDEwMjQgKiAxMDI0OwoKICBmaW5hbCBOYW1lciBfbmFtZXI7CiAgZmluYWwgSkNsb3NlZFdvcmxkIF9jbG9zZWRXb3JsZDsKICBmaW5hbCBNYXA8Q29uc3RhbnRWYWx1ZSwgaW50PiBfaGFzaGVzID0ge307CgogIENvbnN0YW50Q2Fub25pY2FsSGFzaGVyKHRoaXMuX25hbWVyLCB0aGlzLl9jbG9zZWRXb3JsZCk7CgogIEpFbGVtZW50RW52aXJvbm1lbnQgZ2V0IF9lbGVtZW50RW52aXJvbm1lbnQgPT4KICAgICAgX2Nsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudDsKICBKRmllbGRBbmFseXNpcyBnZXQgX2ZpZWxkQW5hbHlzaXMgPT4gX2Nsb3NlZFdvcmxkLmZpZWxkQW5hbHlzaXM7CgogIGludCBnZXRIYXNoKENvbnN0YW50VmFsdWUgY29uc3RhbnQpID0+IF92aXNpdChjb25zdGFudCk7CgogIGludCBfdmlzaXQoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgewogICAgaW50IGhhc2ggPSBfaGFzaGVzW2NvbnN0YW50XTsKICAgIGlmIChoYXNoID09IG51bGwpIHsKICAgICAgaGFzaCA9IF9maW5pc2goY29uc3RhbnQuYWNjZXB0KHRoaXMsIG51bGwpKTsKICAgICAgX2hhc2hlc1tjb25zdGFudF0gPSBoYXNoOwogICAgfQogICAgcmV0dXJuIGhhc2g7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXROdWxsKE51bGxDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pID0+IDE7CgogIEBvdmVycmlkZQogIGludCB2aXNpdE5vbkNvbnN0YW50KE5vbkNvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgPT4gMTsKCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0Qm9vbChCb29sQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICByZXR1cm4gY29uc3RhbnQuaXNUcnVlID8gMiA6IDM7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRGdW5jdGlvbihGdW5jdGlvbkNvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgcmV0dXJuIF9oYXNoU3RyaW5nKDEsIGNvbnN0YW50LmVsZW1lbnQubmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRJbnN0YW50aWF0aW9uKEluc3RhbnRpYXRpb25Db25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIHJldHVybiBfdmlzaXQoY29uc3RhbnQuZnVuY3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0SW50KEludENvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgQmlnSW50IHZhbHVlID0gY29uc3RhbnQuaW50VmFsdWU7CiAgICBpZiAodmFsdWUudG9TaWduZWQoMzIpID09IHZhbHVlKSB7CiAgICAgIHJldHVybiB2YWx1ZS50b1Vuc2lnbmVkKDMyKS50b0ludCgpICYgX01BU0s7CiAgICB9CiAgICByZXR1cm4gX2hhc2hEb3VibGUodmFsdWUudG9Eb3VibGUoKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXREb3VibGUoRG91YmxlQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICByZXR1cm4gX2hhc2hEb3VibGUoY29uc3RhbnQuZG91YmxlVmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0U3RyaW5nKFN0cmluZ0NvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgcmV0dXJuIF9oYXNoU3RyaW5nKDIsIGNvbnN0YW50LnN0cmluZ1ZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdExpc3QoTGlzdENvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgcmV0dXJuIF9oYXNoTGlzdChjb25zdGFudC5sZW5ndGgsIGNvbnN0YW50LmVudHJpZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0U2V0KFNldENvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgcmV0dXJuIF9oYXNoTGlzdChjb25zdGFudC5sZW5ndGgsIGNvbnN0YW50LnZhbHVlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRNYXAoTWFwQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICBpbnQgaGFzaCA9IF9oYXNoTGlzdChjb25zdGFudC5sZW5ndGgsIGNvbnN0YW50LmtleXMpOwogICAgcmV0dXJuIF9oYXNoTGlzdChoYXNoLCBjb25zdGFudC52YWx1ZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0Q29uc3RydWN0ZWQoQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIGludCBoYXNoID0gX2hhc2hTdHJpbmcoMywgY29uc3RhbnQudHlwZS5lbGVtZW50Lm5hbWUpOwogICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoSW5zdGFuY2VGaWVsZChjb25zdGFudC50eXBlLmVsZW1lbnQsCiAgICAgICAgKF8sIEZpZWxkRW50aXR5IGZpZWxkKSB7CiAgICAgIGlmIChfZmllbGRBbmFseXNpcy5nZXRGaWVsZERhdGEoZmllbGQpLmlzRWxpZGVkKSByZXR1cm47CiAgICAgIGhhc2ggPSBfY29tYmluZShoYXNoLCBfdmlzaXQoY29uc3RhbnQuZmllbGRzW2ZpZWxkXSkpOwogICAgfSk7CiAgICByZXR1cm4gaGFzaDsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdFR5cGUoVHlwZUNvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgRGFydFR5cGUgdHlwZSA9IGNvbnN0YW50LnJlcHJlc2VudGVkVHlwZTsKICAgIC8vIFRoaXMgbmFtZSBpbmNsdWRlcyB0aGUgbGlicmFyeSBuYW1lIGFuZCB0eXBlIHBhcmFtZXRlcnMuCiAgICBTdHJpbmcgbmFtZSA9IF9uYW1lci5nZXRUeXBlUmVwcmVzZW50YXRpb25Gb3JUeXBlQ29uc3RhbnQodHlwZSk7CiAgICByZXR1cm4gX2hhc2hTdHJpbmcoNCwgbmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRJbnRlcmNlcHRvcihJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgU3RyaW5nIHR5cGVOYW1lID0gY29uc3RhbnQuY2xzLm5hbWU7CiAgICByZXR1cm4gX2hhc2hTdHJpbmcoNSwgdHlwZU5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0RHVtbXlJbnRlcmNlcHRvcihEdW1teUludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICB0aHJvdyBmYWlsZWRBdCgKICAgICAgICBOT19MT0NBVElPTl9TUEFOTkFCTEUsCiAgICAgICAgJ0R1bW15SW50ZXJjZXB0b3JDb25zdGFudFZhbHVlIHNob3VsZCBuZXZlciBiZSBuYW1lZCBhbmQgJwogICAgICAgICduZXZlciBiZSBzdWJjb25zdGFudCcpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0VW5yZWFjaGFibGUoVW5yZWFjaGFibGVDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIHRocm93IGZhaWxlZEF0KAogICAgICAgIE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwKICAgICAgICAnVW5yZWFjaGFibGVDb25zdGFudFZhbHVlIHNob3VsZCBuZXZlciBiZSBuYW1lZCBhbmQgJwogICAgICAgICduZXZlciBiZSBzdWJjb25zdGFudCcpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0SnNOYW1lKEpzTmFtZUNvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgdGhyb3cgZmFpbGVkQXQoCiAgICAgICAgTk9fTE9DQVRJT05fU1BBTk5BQkxFLAogICAgICAgICdKc05hbWVDb25zdGFudFZhbHVlIHNob3VsZCBuZXZlciBiZSBuYW1lZCBhbmQgJwogICAgICAgICduZXZlciBiZSBzdWJjb25zdGFudCcpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0RGVmZXJyZWRHbG9iYWwoRGVmZXJyZWRHbG9iYWxDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIGludCBoYXNoID0gY29uc3RhbnQudW5pdC5oYXNoQ29kZTsKICAgIHJldHVybiBfY29tYmluZShoYXNoLCBfdmlzaXQoY29uc3RhbnQucmVmZXJlbmNlZCkpOwogIH0KCiAgaW50IF9oYXNoU3RyaW5nKGludCBoYXNoLCBTdHJpbmcgcykgewogICAgaW50IGxlbmd0aCA9IHMubGVuZ3RoOwogICAgaGFzaCA9IF9jb21iaW5lKGhhc2gsIGxlbmd0aCk7CiAgICAvLyBJbmNyZWFzaW5nIHN0cmlkZSBpcyBPKGxvZyBOKSBvbiBsYXJnZSBzdHJpbmdzIHdoaWNoIGFyZSB1bmxpa2VseSB0byBoYXZlCiAgICAvLyBtYW55IGNvbGxpc2lvbnMuCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxICsgKGkgPj4gMikpIHsKICAgICAgaGFzaCA9IF9jb21iaW5lKGhhc2gsIHMuY29kZVVuaXRBdChpKSk7CiAgICB9CiAgICByZXR1cm4gaGFzaDsKICB9CgogIGludCBfaGFzaExpc3QoaW50IGhhc2gsIExpc3Q8Q29uc3RhbnRWYWx1ZT4gY29uc3RhbnRzKSB7CiAgICBmb3IgKENvbnN0YW50VmFsdWUgY29uc3RhbnQgaW4gY29uc3RhbnRzKSB7CiAgICAgIGhhc2ggPSBfY29tYmluZShoYXNoLCBfdmlzaXQoY29uc3RhbnQpKTsKICAgIH0KICAgIHJldHVybiBoYXNoOwogIH0KCiAgc3RhdGljIGludCBfaGFzaEludChpbnQgdmFsdWUpIHsKICAgIGlmICh2YWx1ZS5hYnMoKSA8IF9VSU5UMzJfTElNSVQpIHJldHVybiBfTUFTSyAmIHZhbHVlOwogICAgcmV0dXJuIF9oYXNoRG91YmxlKHZhbHVlLnRvRG91YmxlKCkpOwogIH0KCiAgc3RhdGljIGludCBfaGFzaERvdWJsZShkb3VibGUgdmFsdWUpIHsKICAgIGRvdWJsZSBtYWduaXR1ZGUgPSB2YWx1ZS5hYnMoKTsKICAgIGludCBzaWduID0gdmFsdWUgPCAwID8gMSA6IDA7CiAgICBpZiAobWFnbml0dWRlIDwgX1VJTlQzMl9MSU1JVCkgewogICAgICAvLyAyXjMyCiAgICAgIGludCBpbnRWYWx1ZSA9IHZhbHVlLnRvSW50KCk7CiAgICAgIC8vIEludGVnZXIgdmFsdWVkIGRvdWJsZXMgaW4gMzItYml0IHJhbmdlIGhhc2ggdG8gdGhlIHNhbWUgdmFsdWVzIGFzIGludHMuCiAgICAgIGludCBoYXNoID0gX2hhc2hJbnQoaW50VmFsdWUpOwogICAgICBpZiAodmFsdWUgPT0gaW50VmFsdWUpIHJldHVybiBoYXNoOwogICAgICBoYXNoID0gX2NvbWJpbmUoaGFzaCwgc2lnbik7CiAgICAgIGludCBmcmFjdGlvbiA9ICgobWFnbml0dWRlIC0gaW50VmFsdWUuYWJzKCkpICogKF9NQVNLICsgMSkpLnRvSW50KCk7CiAgICAgIGhhc2ggPSBfY29tYmluZShoYXNoLCBmcmFjdGlvbik7CiAgICAgIHJldHVybiBoYXNoOwogICAgfSBlbHNlIGlmICh2YWx1ZS5pc0luZmluaXRlKSB7CiAgICAgIHJldHVybiBfY29tYmluZSg2LCBzaWduKTsKICAgIH0gZWxzZSBpZiAodmFsdWUuaXNOYU4pIHsKICAgICAgcmV0dXJuIDc7CiAgICB9IGVsc2UgewogICAgICBpbnQgaGFzaCA9IDA7CiAgICAgIHdoaWxlIChtYWduaXR1ZGUgPj0gX1VJTlQzMl9MSU1JVCkgewogICAgICAgIG1hZ25pdHVkZSA9IG1hZ25pdHVkZSAvIF9VSU5UMzJfTElNSVQ7CiAgICAgICAgaGFzaCsrOwogICAgICB9CiAgICAgIGhhc2ggPSBfY29tYmluZShoYXNoLCBzaWduKTsKICAgICAgcmV0dXJuIF9jb21iaW5lKGhhc2gsIF9oYXNoRG91YmxlKG1hZ25pdHVkZSkpOwogICAgfQogIH0KCiAgLy8vIFtfY29tYmluZV0gYW5kIFtfZmluaXNoXSBhcmUgcGFydHMgb2YgdGhlIFtKZW5raW5zIGhhc2ggZnVuY3Rpb25dWzFdLAogIC8vLyBtb2RpZmllZCBieSB1c2luZyBtYXNraW5nIHRvIGtlZXAgdmFsdWVzIGluIFNNSSByYW5nZS4KICAvLy8KICAvLy8gWzFdOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0plbmtpbnNfaGFzaF9mdW5jdGlvbgogIHN0YXRpYyBpbnQgX2NvbWJpbmUoaW50IGhhc2gsIGludCB2YWx1ZSkgewogICAgaGFzaCA9IF9NQVNLICYgKGhhc2ggKyB2YWx1ZSk7CiAgICBoYXNoID0gX01BU0sgJiAoaGFzaCArICgoKF9NQVNLID4+IDEwKSAmIGhhc2gpIDw8IDEwKSk7CiAgICBoYXNoID0gaGFzaCBeIChoYXNoID4+IDYpOwogICAgcmV0dXJuIGhhc2g7CiAgfQoKICBzdGF0aWMgaW50IF9maW5pc2goaW50IGhhc2gpIHsKICAgIGhhc2ggPSBfTUFTSyAmIChoYXNoICsgKCgoX01BU0sgPj4gMykgJiBoYXNoKSA8PCAzKSk7CiAgICBoYXNoID0gaGFzaCAmIChoYXNoID4+IDExKTsKICAgIHJldHVybiBfTUFTSyAmIChoYXNoICsgKCgoX01BU0sgPj4gMTUpICYgaGFzaCkgPDwgMTUpKTsKICB9Cn0KCmNsYXNzIEZ1bmN0aW9uVHlwZU5hbWVyIGV4dGVuZHMgQmFzZURhcnRUeXBlVmlzaXRvciB7CiAgU3RyaW5nQnVmZmVyIHNiOwoKICBGdW5jdGlvblR5cGVOYW1lcigpOwoKICBTdHJpbmcgY29tcHV0ZU5hbWUoRGFydFR5cGUgdHlwZSkgewogICAgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICB2aXNpdCh0eXBlKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXQoRGFydFR5cGUgdHlwZSwgW19dKSB7CiAgICB0eXBlLmFjY2VwdCh0aGlzLCBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0VHlwZShEYXJ0VHlwZSB0eXBlLCBfKSB7fQoKICBAb3ZlcnJpZGUKICB2aXNpdEludGVyZmFjZVR5cGUoSW50ZXJmYWNlVHlwZSB0eXBlLCBfKSB7CiAgICBzYi53cml0ZSh0eXBlLmVsZW1lbnQubmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFR5cGVkZWZUeXBlKFR5cGVkZWZUeXBlIHR5cGUsIF8pIHsKICAgIHNiLndyaXRlKHR5cGUuZWxlbWVudC5uYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0VHlwZVZhcmlhYmxlVHlwZShUeXBlVmFyaWFibGVUeXBlIHR5cGUsIF8pIHsKICAgIHNiLndyaXRlKHR5cGUuZWxlbWVudC5uYW1lKTsKICB9CgogIGJvb2wgX2lzU2ltcGxlRnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSB0eXBlKSB7CiAgICBpZiAoIXR5cGUucmV0dXJuVHlwZS5pc0R5bmFtaWMpIHJldHVybiBmYWxzZTsKICAgIGlmICghdHlwZS5vcHRpb25hbFBhcmFtZXRlclR5cGVzLmlzRW1wdHkpIHJldHVybiBmYWxzZTsKICAgIGlmICghdHlwZS5uYW1lZFBhcmFtZXRlclR5cGVzLmlzRW1wdHkpIHJldHVybiBmYWxzZTsKICAgIGZvciAoRGFydFR5cGUgcGFyYW1ldGVyIGluIHR5cGUucGFyYW1ldGVyVHlwZXMpIHsKICAgICAgaWYgKCFwYXJhbWV0ZXIuaXNEeW5hbWljKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0RnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSB0eXBlLCBfKSB7CiAgICBpZiAoX2lzU2ltcGxlRnVuY3Rpb25UeXBlKHR5cGUpKSB7CiAgICAgIHNiLndyaXRlKCdhcmdzJHt0eXBlLnBhcmFtZXRlclR5cGVzLmxlbmd0aH0nKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmlzaXQodHlwZS5yZXR1cm5UeXBlKTsKICAgIHNiLndyaXRlKCdfJyk7CiAgICBmb3IgKERhcnRUeXBlIHBhcmFtZXRlciBpbiB0eXBlLnBhcmFtZXRlclR5cGVzKSB7CiAgICAgIHNiLndyaXRlKCdfJyk7CiAgICAgIHZpc2l0KHBhcmFtZXRlcik7CiAgICB9CiAgICBib29sIGZpcnN0ID0gZmFsc2U7CiAgICBmb3IgKERhcnRUeXBlIHBhcmFtZXRlciBpbiB0eXBlLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMpIHsKICAgICAgaWYgKCFmaXJzdCkgewogICAgICAgIHNiLndyaXRlKCdfJyk7CiAgICAgIH0KICAgICAgc2Iud3JpdGUoJ18nKTsKICAgICAgdmlzaXQocGFyYW1ldGVyKTsKICAgICAgZmlyc3QgPSB0cnVlOwogICAgfQogICAgaWYgKCF0eXBlLm5hbWVkUGFyYW1ldGVyVHlwZXMuaXNFbXB0eSkgewogICAgICBmaXJzdCA9IGZhbHNlOwogICAgICBmb3IgKERhcnRUeXBlIHBhcmFtZXRlciBpbiB0eXBlLm5hbWVkUGFyYW1ldGVyVHlwZXMpIHsKICAgICAgICBpZiAoIWZpcnN0KSB7CiAgICAgICAgICBzYi53cml0ZSgnXycpOwogICAgICAgIH0KICAgICAgICBzYi53cml0ZSgnXycpOwogICAgICAgIHZpc2l0KHBhcmFtZXRlcik7CiAgICAgICAgZmlyc3QgPSB0cnVlOwogICAgICB9CiAgICB9CiAgfQp9CgpjbGFzcyBOYW1pbmdTY29wZSB7CiAgLy8vIE1hcHMgcHJvcG9zZWQgbmFtZXMgdG8gKnN1Z2dlc3RlZCogZGlzYW1iaWd1YXRlZCBuYW1lcy4KICAvLy8KICAvLy8gU3VnZ2VzdGVkIG5hbWVzIGFyZSBoaW50cyB0byB0aGUgW01pbmlmeU5hbWVyXSwgc3VnZ2VzdGluZyB0aGF0IGEgc3BlY2lmaWMKICAvLy8gbmFtZXMgYmUgZ2l2ZW4gdG8gdGhlIGZpcnN0IGl0ZW0gd2l0aCB0aGUgZ2l2ZW4gcHJvcG9zZWQgbmFtZS4KICAvLy8KICAvLy8gVGhpcyBpcyBjdXJyZW50bHkgdXNlZCBpbiBbTWluaWZ5TmFtZXJdIHRvIGFzc2lnbiB2ZXJ5IHNob3J0IG1pbmlmaWVkCiAgLy8vIG5hbWVzIHRvIHRoaW5ncyB0aGF0IHRlbmQgdG8gYmUgdXNlZCB2ZXJ5IG9mdGVuLgogIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gX3N1Z2dlc3RlZE5hbWVzID0ge307CiAgZmluYWwgU2V0PFN0cmluZz4gX3VzZWROYW1lcyA9IFNldCgpOwoKICBib29sIGlzVXNlZChTdHJpbmcgbmFtZSkgPT4gX3VzZWROYW1lcy5jb250YWlucyhuYW1lKTsKICBib29sIGlzVW51c2VkKFN0cmluZyBuYW1lKSA9PiAhX3VzZWROYW1lcy5jb250YWlucyhuYW1lKTsKICBib29sIHJlZ2lzdGVyVXNlKFN0cmluZyBuYW1lKSA9PiBfdXNlZE5hbWVzLmFkZChuYW1lKTsKCiAgU3RyaW5nIHN1Z2dlc3ROYW1lKFN0cmluZyBvcmlnaW5hbCkgPT4gX3N1Z2dlc3RlZE5hbWVzW29yaWdpbmFsXTsKICB2b2lkIGFkZFN1Z2dlc3Rpb24oU3RyaW5nIG9yaWdpbmFsLCBTdHJpbmcgc3VnZ2VzdGlvbikgewogICAgYXNzZXJ0KCFfc3VnZ2VzdGVkTmFtZXMuY29udGFpbnNLZXkob3JpZ2luYWwpKTsKICAgIF9zdWdnZXN0ZWROYW1lc1tvcmlnaW5hbF0gPSBzdWdnZXN0aW9uOwogIH0KCiAgYm9vbCBoYXNTdWdnZXN0aW9uKFN0cmluZyBvcmlnaW5hbCkgPT4gX3N1Z2dlc3RlZE5hbWVzLmNvbnRhaW5zS2V5KG9yaWdpbmFsKTsKICBib29sIGlzU3VnZ2VzdGlvbihTdHJpbmcgY2FuZGlkYXRlKSB7CiAgICByZXR1cm4gX3N1Z2dlc3RlZE5hbWVzLmNvbnRhaW5zVmFsdWUoY2FuZGlkYXRlKTsKICB9Cn0KCi8vLyBGaXhlZCBuYW1lcyB1c2FnZSBieSB0aGUgbmFtZXIuCmNsYXNzIEZpeGVkTmFtZXMgewogIGNvbnN0IEZpeGVkTmFtZXMoKTsKCiAgU3RyaW5nIGdldCBnZXR0ZXJQcmVmaXggPT4gcidnZXQkJzsKICBTdHJpbmcgZ2V0IHNldHRlclByZWZpeCA9PiByJ3NldCQnOwogIFN0cmluZyBnZXQgY2FsbFByZWZpeCA9PiAnY2FsbCc7CiAgU3RyaW5nIGdldCBjYWxsQ2F0Y2hBbGxOYW1lID0+IHInY2FsbConOwogIFN0cmluZyBnZXQgY2FsbE5hbWVGaWVsZCA9PiByJyRjYWxsTmFtZSc7CiAgU3RyaW5nIGdldCByZWZsZWN0YWJsZUZpZWxkID0+IHInJHJlZmxlY3RhYmxlJzsKICBTdHJpbmcgZ2V0IGNsYXNzRGVzY3JpcHRvclByb3BlcnR5ID0+IHInXic7CiAgU3RyaW5nIGdldCBkZWZhdWx0VmFsdWVzRmllbGQgPT4gcickZGVmYXVsdFZhbHVlcyc7CiAgU3RyaW5nIGdldCBkZWZlcnJlZEFjdGlvbiA9PiByJyRkZWZlcnJlZEFjdGlvbic7CiAgU3RyaW5nIGdldCBvcGVyYXRvcklzUHJlZml4ID0+IHInJGlzJzsKICBTdHJpbmcgZ2V0IG9wZXJhdG9yQXNQcmVmaXggPT4gcickYXMnOwogIFN0cmluZyBnZXQgb3BlcmF0b3JTaWduYXR1cmUgPT4gcickc2lnbmF0dXJlJzsKICBTdHJpbmcgZ2V0IHJlcXVpcmVkUGFyYW1ldGVyRmllbGQgPT4gcickcmVxdWlyZWRBcmdDb3VudCc7CiAgU3RyaW5nIGdldCBydGlOYW1lID0+IHInJHRpJzsKfQoKLy8vIE1pbmlmaWVkIHZlcnNpb24gb2YgdGhlIGZpeGVkIG5hbWVzIHVzYWdlIGJ5IHRoZSBuYW1lci4KLy8gVE9ETyhqb2hubml3aW50aGVyKTogVGhpcyBzaG91bGQgaW1wbGVtZW50IFtGaXhlZE5hbWVzXSBhbmQgbWluaWZ5IGFsbCBmaXhlZAovLyBuYW1lcy4KY2xhc3MgTWluaWZpZWRGaXhlZE5hbWVzIGV4dGVuZHMgRml4ZWROYW1lcyB7CiAgY29uc3QgTWluaWZpZWRGaXhlZE5hbWVzKCk7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZ2V0dGVyUHJlZml4ID0+ICdnJzsKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IHNldHRlclByZWZpeCA9PiAncyc7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBjYWxsUHJlZml4ID0+ICcnOyAvLyB0aGlzIHdpbGwgY3JlYXRlIGZ1bmN0aW9uIG5hbWVzICQ8bj4KICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG9wZXJhdG9ySXNQcmVmaXggPT4gcickaSc7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBvcGVyYXRvckFzUHJlZml4ID0+IHInJGEnOwogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgY2FsbENhdGNoQWxsTmFtZSA9PiByJyRDJzsKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IHJlcXVpcmVkUGFyYW1ldGVyRmllbGQgPT4gcickUic7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBkZWZhdWx0VmFsdWVzRmllbGQgPT4gcickRCc7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBvcGVyYXRvclNpZ25hdHVyZSA9PiByJyRTJzsKfQoKLy8vIE5hbWVyIGludGVyZmFjZSB0aGF0IGNhbiBiZSB1c2VkIGluIG1vZHVsYXIgY29kZSBnZW5lcmF0aW9uLgphYnN0cmFjdCBjbGFzcyBNb2R1bGFyTmFtZXIgewogIEZpeGVkTmFtZXMgZ2V0IGZpeGVkTmFtZXM7CiAgUnVudGltZVR5cGVUYWdzIGdldCBydGlUYWdzOwoKICAvLy8gUmV0dXJucyBhIHZhcmlhYmxlIHVzZSBmb3IgYWNjZXNzaW5nIFtsaWJyYXJ5XS4KICAvLy8KICAvLy8gVGhpcyBpcyBvbmUgb2YgdGhlIFtyZXNlcnZlZEdsb2JhbE9iamVjdE5hbWVzXQogIGpzQXN0LkV4cHJlc3Npb24gcmVhZEdsb2JhbE9iamVjdEZvckxpYnJhcnkoTGlicmFyeUVudGl0eSBsaWJyYXJ5KTsKCiAgLy8vIFJldHVybnMgYSB2YXJpYWJsZSB1c2UgZm9yIGFjY2Vzc2luZyB0aGUgY2xhc3MgW2VsZW1lbnRdLgogIC8vLwogIC8vLyBUaGlzIGlzIG9uZSBvZiB0aGUgW3Jlc2VydmVkR2xvYmFsT2JqZWN0TmFtZXNdCiAganNBc3QuRXhwcmVzc2lvbiByZWFkR2xvYmFsT2JqZWN0Rm9yQ2xhc3MoQ2xhc3NFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIGEgdmFyaWFibGUgdXNlIGZvciBhY2Nlc3NpbmcgdGhlIHR5cGUgW2VsZW1lbnRdLgogIC8vLwogIC8vLyBUaGlzIGlzIG9uZSBvZiB0aGUgW3Jlc2VydmVkR2xvYmFsT2JqZWN0TmFtZXNdCiAganNBc3QuRXhwcmVzc2lvbiByZWFkR2xvYmFsT2JqZWN0Rm9yVHlwZShFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIGEgdmFyaWFibGUgdXNlIGZvciBhY2Nlc3NpbmcgdGhlIG1lbWJlciBbZWxlbWVudF0uCiAgLy8vCiAgLy8vIFRoaXMgaXMgZWl0aGVyIHRoZSBbc3RhdGljU3RhdGVIb2xkZXJdIG9yIG9uZSBvZiB0aGUKICAvLy8gW3Jlc2VydmVkR2xvYmFsT2JqZWN0TmFtZXNdCiAganNBc3QuRXhwcmVzc2lvbiByZWFkR2xvYmFsT2JqZWN0Rm9yTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgYSBKYXZhU2NyaXB0IHByb3BlcnR5IG5hbWUgdXNlZCB0byBzdG9yZSB0aGUgY2xhc3MgW2VsZW1lbnRdIG9uCiAgLy8vIG9uZSBvZiB0aGUgZ2xvYmFsIG9iamVjdHMuCiAgLy8vCiAgLy8vIFNob3VsZCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggW2dsb2JhbE9iamVjdEZvckNsYXNzXSwgd2hpY2ggZGVub3RlcyB0aGUKICAvLy8gb2JqZWN0IG9uIHdoaWNoIHRoZSByZXR1cm5lZCBwcm9wZXJ0eSBuYW1lIHNob3VsZCBiZSB1c2VkLgogIGpzQXN0Lk5hbWUgZ2xvYmFsUHJvcGVydHlOYW1lRm9yQ2xhc3MoQ2xhc3NFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIGEgSmF2YVNjcmlwdCBwcm9wZXJ0eSBuYW1lIHVzZWQgdG8gc3RvcmUgdGhlIG1lbWJlciBbZWxlbWVudF0gb24KICAvLy8gb25lIG9mIHRoZSBnbG9iYWwgb2JqZWN0cy4KICAvLy8KICAvLy8gU2hvdWxkIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBbZ2xvYmFsT2JqZWN0Rm9yTWVtYmVyXSwgd2hpY2ggZGVub3RlcyB0aGUKICAvLy8gb2JqZWN0IG9uIHdoaWNoIHRoZSByZXR1cm5lZCBwcm9wZXJ0eSBuYW1lIHNob3VsZCBiZSB1c2VkLgogIGpzQXN0Lk5hbWUgZ2xvYmFsUHJvcGVydHlOYW1lRm9yTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgYSBKYXZhU2NyaXB0IHByb3BlcnR5IG5hbWUgdXNlZCB0byBzdG9yZSB0aGUgdHlwZSAodHlwZWRlZikKICAvLy8gW2VsZW1lbnRdIG9uIG9uZSBvZiB0aGUgZ2xvYmFsIG9iamVjdHMuCiAgLy8vCiAgLy8vIFNob3VsZCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggW2dsb2JhbE9iamVjdEZvclR5cGVdLCB3aGljaCBkZW5vdGVzIHRoZQogIC8vLyBvYmplY3Qgb24gd2hpY2ggdGhlIHJldHVybmVkIHByb3BlcnR5IG5hbWUgc2hvdWxkIGJlIHVzZWQuCiAganNBc3QuTmFtZSBnbG9iYWxQcm9wZXJ0eU5hbWVGb3JUeXBlKEVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgYSBuYW1lLCB0aGUgc3RyaW5nIG9mIHdoaWNoIGlzIGEgZ2xvYmFsbHkgdW5pcXVlIGtleSBkaXN0aW5jdCBmcm9tCiAgLy8vIG90aGVyIGdsb2JhbCBwcm9wZXJ0eSBuYW1lcy4KICAvLy8KICAvLy8gVGhlIG5hbWUgaXMgbm90IG5lY2Vzc2FyaWx5IGEgdmFsaWQgSmF2YVNjcmlwdCBpZGVudGlmaWVyLCBzbyBpdCBuZWVkcyB0bwogIC8vLyBiZSBxdW90ZWQuCiAganNBc3QuTmFtZSBnbG9iYWxOYW1lRm9ySW50ZXJmYWNlVHlwZVZhcmlhYmxlKAogICAgICBUeXBlVmFyaWFibGVFbnRpdHkgdHlwZVZhcmlhYmxlKTsKCiAgLy8vIFJldHVybnMgdGhlIG5hbWUgZm9yIHRoZSBpbnN0YW5jZSBmaWVsZCB0aGF0IGhvbGRzIHJ1bnRpbWUgdHlwZSBhcmd1bWVudHMKICAvLy8gb24gZ2VuZXJpYyBjbGFzc2VzLgogIGpzQXN0Lk5hbWUgZ2V0IHJ0aUZpZWxkSnNOYW1lOwoKICAvLy8gUHJvcGVydHkgbmFtZSBvbiB3aGljaCBbbWVtYmVyXSBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHksCiAgLy8vIHdpdGhvdXQgY2xhc2hpbmcgd2l0aCBhbm90aGVyIEpTIHByb3BlcnR5IG5hbWUuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCBmb3IgaW1wbGVtZW50aW5nIHN1cGVyLWNhbGxzLCB3aGVyZSBvcmRpbmFyeSBkaXNwYXRjaAogIC8vLyBzZW1hbnRpY3MgbXVzdCBiZSBjaXJjdW12ZW50ZWQuIEZvciBleGFtcGxlOgogIC8vLwogIC8vLyAgICAgY2xhc3MgQSB7IGZvbygpIH0KICAvLy8gICAgIGNsYXNzIEIgZXh0ZW5kcyBBIHsKICAvLy8gICAgICAgICBmb28oKSB7IHN1cGVyLmZvbygpIH0KICAvLy8gICAgIH0KICAvLy8KICAvLy8gRXhhbXBsZSB0cmFuc2xhdGlvbiB0byBKUzoKICAvLy8KICAvLy8gICAgIEEucHJvdG90eXBlLnN1cGVyJEEkZm9vID0gZnVuY3Rpb24oKSB7Li4ufQogIC8vLyAgICAgQS5wcm90b3R5cGUuZm9vJDAgPSBBLnByb3RvdHlwZS5zdXBlciRBJGZvbwogIC8vLwogIC8vLyAgICAgQi5wcm90b3R5cGUuZm9vJDAgPSBmdW5jdGlvbigpIHsKICAvLy8gICAgICAgICB0aGlzLnN1cGVyJEEkZm9vKCk7IC8vIHN1cGVyLmZvbygpCiAgLy8vICAgICB9CiAgLy8vCiAganNBc3QuTmFtZSBhbGlhc2VkU3VwZXJNZW1iZXJQcm9wZXJ0eU5hbWUoTWVtYmVyRW50aXR5IG1lbWJlcik7CgogIC8vLyBSZXR1cm5zIHRoZSBKYXZhU2NyaXB0IHByb3BlcnR5IG5hbWUgdXNlZCB0byBzdG9yZSBhbiBpbnN0YW5jZSBmaWVsZC4KICBqc0FzdC5OYW1lIGluc3RhbmNlRmllbGRQcm9wZXJ0eU5hbWUoRmllbGRFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBBbm5vdGF0ZWQgbmFtZSBmb3IgW21ldGhvZF0gZW5jb2RpbmcgYXJpdHkgYW5kIG5hbWVkIHBhcmFtZXRlcnMuCiAganNBc3QuTmFtZSBpbnN0YW5jZU1ldGhvZE5hbWUoRnVuY3Rpb25FbnRpdHkgbWV0aG9kKTsKCiAgLy8vIFRyYW5zbGF0ZXMgYSBbU3RyaW5nXSBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIFtOYW1lXSBkYXRhIHN0cnVjdHVyZSBhcwogIC8vLyB1c2VkIGJ5IHRoZSBuYW1lci4KICAvLy8KICAvLy8gSWYgW25hbWVdIGlzIGEgc2V0dGVyIG9yIGdldHRlciBuYW1lLCB0aGUgY29ycmVzcG9uZGluZyBbR2V0dGVyTmFtZV0gb3IKICAvLy8gW1NldHRlck5hbWVdIGRhdGEgc3RydWN0dXJlIGlzIHVzZWQuCiAganNBc3QuTmFtZSBhc05hbWUoU3RyaW5nIG5hbWUpOwoKICAvLy8gQW5ub3RhdGVkIG5hbWUgZm9yIHRoZSBtZW1iZXIgYmVpbmcgaW52b2tlZCBieSBbc2VsZWN0b3JdLgogIGpzQXN0Lk5hbWUgaW52b2NhdGlvbk5hbWUoU2VsZWN0b3Igc2VsZWN0b3IpOwoKICAvLy8gUHJvcGVydHkgbmFtZSB1c2VkIGZvciBhIHNwZWNpYWxpemF0aW9uIG9mIGBnZXRJbnRlcmNlcHRvcmAuCiAgLy8vCiAgLy8vIGpzX3J1bnRpbWUgY29udGFpbnMgYSB0b3AtbGV2ZWwgYGdldEludGVyY2VwdG9yYCBtZXRob2QuIFRoZQogIC8vLyBzcGVjaWFsaXphdGlvbnMgaGF2ZSB0aGUgc2FtZSBuYW1lLCBidXQgd2l0aCBhIHN1ZmZpeCB0byBhdm9pZCBuYW1lCiAgLy8vIGNvbGxpc2lvbnMuCiAganNBc3QuTmFtZSBuYW1lRm9yR2V0SW50ZXJjZXB0b3IoU2V0PENsYXNzRW50aXR5PiBjbGFzc2VzKTsKCiAgLy8vIFByb3BlcnR5IG5hbWUgdXNlZCBmb3IgdGhlIG9uZS1zaG90IGludGVyY2VwdG9yIG1ldGhvZCBmb3IgdGhlIGdpdmVuCiAgLy8vIFtzZWxlY3Rvcl0gYW5kIHJldHVybi10eXBlIHNwZWNpYWxpemF0aW9uLgogIGpzQXN0Lk5hbWUgbmFtZUZvck9uZVNob3RJbnRlcmNlcHRvcigKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIFNldDxDbGFzc0VudGl0eT4gY2xhc3Nlcyk7CgogIC8vLyBSZXR1cm5zIHRoZSBydW50aW1lIG5hbWUgZm9yIFtlbGVtZW50XS4KICAvLy8KICAvLy8gVGhpcyBuYW1lIGlzIHVzZWQgYXMgdGhlIGJhc2lzIGZvciBkZXJpdmluZyBgaXNgIGFuZCBgYXNgIHByb3BlcnR5IG5hbWVzCiAgLy8vIGZvciB0aGUgZ2l2ZW4gdHlwZS4KICAvLy8KICAvLy8gVGhlIHJlc3VsdCBpcyBub3QgYWx3YXlzIHNhZmUgYXMgYSBwcm9wZXJ0eSBuYW1lIHVubGVzcyBwcmVmaXhpbmcKICAvLy8gW29wZXJhdG9ySXNQcmVmaXhdIG9yIFtvcGVyYXRvckFzUHJlZml4XS4gSWYgdGhpcyBpcyBhIGZ1bmN0aW9uIHR5cGUsCiAgLy8vIHRoZW4gYnkgY29udmVudGlvbiwgYW4gdW5kZXJzY29yZSBtdXN0IGFsc28gc2VwYXJhdGUgW29wZXJhdG9ySXNQcmVmaXhdCiAgLy8vIGZyb20gdGhlIHR5cGUgbmFtZS4KICBqc0FzdC5OYW1lIHJ1bnRpbWVUeXBlTmFtZShFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBQcm9wZXJ0eSBuYW1lIGluIHdoaWNoIHRvIHN0b3JlIHRoZSBnaXZlbiBzdGF0aWMgb3IgaW5zdGFuY2UgW21ldGhvZF0uCiAgLy8vIEZvciBpbnN0YW5jZSBtZXRob2RzLCB0aGlzIGluY2x1ZGVzIHRoZSBzdWZmaXggZW5jb2RpbmcgYXJpdHkgYW5kIG5hbWVkCiAgLy8vIHBhcmFtZXRlcnMuCiAgLy8vCiAgLy8vIFRoZSBuYW1lIGlzIG5vdCBuZWNlc3NhcmlseSB1bmlxdWUgdG8gW21ldGhvZF0sIHNpbmNlIGEgc3RhdGljIG1ldGhvZAogIC8vLyBtYXkgc2hhcmUgaXRzIG5hbWUgd2l0aCBhbiBpbnN0YW5jZSBtZXRob2QuCiAganNBc3QuTmFtZSBtZXRob2RQcm9wZXJ0eU5hbWUoRnVuY3Rpb25FbnRpdHkgbWV0aG9kKTsKCiAgLy8vIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGBpc1hgIHByb3BlcnR5IGZvciBjbGFzc2VzIHRoYXQgaW1wbGVtZW50CiAgLy8vIFtlbGVtZW50XS4KICBqc0FzdC5OYW1lIG9wZXJhdG9ySXMoQ2xhc3NFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGBpc1hgIHByb3BlcnR5IGZvciBjbGFzc2VzIHRoYXQgaW1wbGVtZW50IFt0eXBlXS4KICBqc0FzdC5OYW1lIG9wZXJhdG9ySXNUeXBlKERhcnRUeXBlIHR5cGUpOwoKICAvLy8gUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgYGFzWGAgZnVuY3Rpb24gZm9yIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgdGhlCiAgLy8vIGdlbmVyaWMgY2xhc3MgW2VsZW1lbnRdLgogIGpzQXN0Lk5hbWUgc3Vic3RpdHV0aW9uTmFtZShDbGFzc0VudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGxhenkgaW5pdGlhbGl6ZXIgZm9yIHRoZSBzdGF0aWMgZmllbGQgW2VsZW1lbnRdLgogIGpzQXN0Lk5hbWUgbGF6eUluaXRpYWxpemVyTmFtZShGaWVsZEVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNsb3N1cmUgb2YgdGhlIHN0YXRpYyBtZXRob2QgW2VsZW1lbnRdLgogIGpzQXN0Lk5hbWUgc3RhdGljQ2xvc3VyZU5hbWUoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIHRoZSBkaXNhbWJpZ3VhdGVkIG5hbWUgb2YgW2NsYXNzX10uCiAgLy8vCiAgLy8vIFRoaXMgaXMgYm90aCB0aGUgKnJ1bnRpbWUgdHlwZSogb2YgdGhlIGNsYXNzIChzZWUgW3J1bnRpbWVUeXBlTmFtZV0pCiAgLy8vIGFuZCBhIGdsb2JhbCBwcm9wZXJ0eSBuYW1lIGluIHdoaWNoIHRvIHN0b3JlIGl0cyBKUyBjb25zdHJ1Y3Rvci4KICBqc0FzdC5OYW1lIGNsYXNzTmFtZShDbGFzc0VudGl0eSBjbGFzc18pOwoKICAvLy8gVGhlIHByZWZpeCB1c2VkIGZvciBlbmNvZGluZyBhc3luYyBwcm9wZXJ0aWVzLgogIGZpbmFsIFN0cmluZyBhc3luY1ByZWZpeCA9IHIiJGFzeW5jJCI7CgogIC8vLyBSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGUgaG9sZGVyIG9mIHN0YXRpYyBzdGF0ZS4KICAvLy8KICAvLy8gVGhpcyBpcyB1c2VkIGZvciBtdXRhYmxlIHN0YXRpYyBmaWVsZHMuCiAgZmluYWwgU3RyaW5nIHN0YXRpY1N0YXRlSG9sZGVyID0gcickJzsKCiAganNBc3QuTmFtZSBfbGl0ZXJhbEFzeW5jUHJlZml4OwoKICBNb2R1bGFyTmFtZXIoKSB7CiAgICBfbGl0ZXJhbEFzeW5jUHJlZml4ID0gbmV3IFN0cmluZ0JhY2tlZE5hbWUoYXN5bmNQcmVmaXgpOwogIH0KCiAgLy8vIFJldHVybnMgYSBzYWZlIHZhcmlhYmxlIG5hbWUgZm9yIHVzZSBpbiBhc3luYyByZXdyaXRpbmcuCiAgLy8vCiAgLy8vIEhhcyB0aGUgc2FtZSBwcm9wZXJ0eSBhcyBbc2FmZVZhcmlhYmxlTmFtZV0gYnV0IGRvZXMgbm90IGNsYXNoIHdpdGgKICAvLy8gbmFtZXMgcmV0dXJuZWQgZnJvbSB0aGVyZS4KICAvLy8gQWRkaXRpb25hbGx5LCB3aGVuIHVzZWQgYXMgYSBwcmVmaXggdG8gYSB2YXJpYWJsZSBuYW1lLCB0aGUgcmVzdWx0CiAgLy8vIHdpbGwgYmUgc2FmZSB0byB1c2UsIGFzIHdlbGwuCiAgU3RyaW5nIHNhZmVWYXJpYWJsZVByZWZpeEZvckFzeW5jUmV3cml0ZShTdHJpbmcgbmFtZSkgewogICAgcmV0dXJuICIkYXN5bmNQcmVmaXgkbmFtZSI7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbmFtZSBmb3IgdGhlIGFzeW5jIGJvZHkgb2YgdGhlIG1ldGhvZCB3aXRoIHRoZSBbb3JpZ2luYWxdCiAgLy8vIG5hbWUuCiAganNBc3QuTmFtZSBkZXJpdmVBc3luY0JvZHlOYW1lKGpzQXN0Lk5hbWUgb3JpZ2luYWwpIHsKICAgIHJldHVybiBuZXcgQXN5bmNOYW1lKF9saXRlcmFsQXN5bmNQcmVmaXgsIG9yaWdpbmFsKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBsYWJlbCBuYW1lIGZvciBbbGFiZWxdIHVzZWQgYXMgYSBicmVhayB0YXJnZXQuCiAgU3RyaW5nIGJyZWFrTGFiZWxOYW1lKExhYmVsRGVmaW5pdGlvbiBsYWJlbCkgewogICAgcmV0dXJuICdcJCR7bGFiZWwubGFiZWxOYW1lfVwkJHtsYWJlbC50YXJnZXQubmVzdGluZ0xldmVsfSc7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbGFiZWwgbmFtZSBmb3IgdGhlIGltcGxpY2l0IGJyZWFrIGxhYmVsIG5lZWRlZCBmb3IgdGhlIGp1bXAKICAvLy8gW3RhcmdldF0uCiAgU3RyaW5nIGltcGxpY2l0QnJlYWtMYWJlbE5hbWUoSnVtcFRhcmdldCB0YXJnZXQpIHsKICAgIHJldHVybiAnXCQke3RhcmdldC5uZXN0aW5nTGV2ZWx9JzsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBsYWJlbCBuYW1lIGZvciBbbGFiZWxdIHVzZWQgYXMgYSBjb250aW51ZSB0YXJnZXQuCiAgLy8vCiAgLy8vIFdlIHNvbWV0aW1lcyBoYW5kbGUgY29udGludWUgdGFyZ2V0cyBkaWZmZXJlbnRseSBmcm9tIGJyZWFrIHRhcmdldHMsCiAgLy8vIHNvIHdlIGhhdmUgc3BlY2lhbCBjb250aW51ZS1vbmx5IGxhYmVscy4KICBTdHJpbmcgY29udGludWVMYWJlbE5hbWUoTGFiZWxEZWZpbml0aW9uIGxhYmVsKSB7CiAgICByZXR1cm4gJ2NcJCR7bGFiZWwubGFiZWxOYW1lfVwkJHtsYWJlbC50YXJnZXQubmVzdGluZ0xldmVsfSc7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbGFiZWwgbmFtZSBmb3IgdGhlIGltcGxpY2l0IGNvbnRpbnVlIGxhYmVsIG5lZWRlZCBmb3IgdGhlIGp1bXAKICAvLy8gW3RhcmdldF0uCiAgU3RyaW5nIGltcGxpY2l0Q29udGludWVMYWJlbE5hbWUoSnVtcFRhcmdldCB0YXJnZXQpIHsKICAgIHJldHVybiAnY1wkJHt0YXJnZXQubmVzdGluZ0xldmVsfSc7CiAgfQoKICBTZXQ8U3RyaW5nPiBfanNWYXJpYWJsZVJlc2VydmVkQ2FjaGUgPSBudWxsOwoKICAvLy8gTmFtZXMgdGhhdCBjYW5ub3QgYmUgdXNlZCBieSBsb2NhbCB2YXJpYWJsZXMgYW5kIHBhcmFtZXRlcnMuCiAgU2V0PFN0cmluZz4gZ2V0IF9qc1ZhcmlhYmxlUmVzZXJ2ZWQgewogICAgaWYgKF9qc1ZhcmlhYmxlUmVzZXJ2ZWRDYWNoZSA9PSBudWxsKSB7CiAgICAgIF9qc1ZhcmlhYmxlUmVzZXJ2ZWRDYWNoZSA9IG5ldyBTZXQ8U3RyaW5nPigpOwogICAgICBfanNWYXJpYWJsZVJlc2VydmVkQ2FjaGUuYWRkQWxsKE5hbWVyLmphdmFTY3JpcHRLZXl3b3Jkcyk7CiAgICAgIF9qc1ZhcmlhYmxlUmVzZXJ2ZWRDYWNoZS5hZGRBbGwoTmFtZXIucmVzZXJ2ZWRQcm9wZXJ0eVN5bWJvbHMpOwogICAgICBfanNWYXJpYWJsZVJlc2VydmVkQ2FjaGUuYWRkQWxsKE5hbWVyLnJlc2VydmVkR2xvYmFsU3ltYm9scyk7CiAgICAgIF9qc1ZhcmlhYmxlUmVzZXJ2ZWRDYWNoZS5hZGRBbGwoTmFtZXIucmVzZXJ2ZWRHbG9iYWxPYmplY3ROYW1lcyk7CiAgICAgIC8vIDI2IGxldHRlcnMgaW4gdGhlIGFscGhhYmV0LCAyNSBub3QgY291bnRpbmcgSS4KICAgICAgYXNzZXJ0KE5hbWVyLnJlc2VydmVkR2xvYmFsT2JqZWN0TmFtZXMubGVuZ3RoID09IDI1KTsKICAgICAgX2pzVmFyaWFibGVSZXNlcnZlZENhY2hlLmFkZEFsbChOYW1lci5yZXNlcnZlZEdsb2JhbEhlbHBlckZ1bmN0aW9ucyk7CiAgICB9CiAgICByZXR1cm4gX2pzVmFyaWFibGVSZXNlcnZlZENhY2hlOwogIH0KCiAgLy8vIFJldHVybnMgYSB2YXJpYWJsZSBuYW1lIHRoYXQgY2Fubm90IGNsYXNoIHdpdGggYSBrZXl3b3JkLCBhIGdsb2JhbAogIC8vLyB2YXJpYWJsZSwgb3IgYW55IG5hbWUgc3RhcnRpbmcgd2l0aCBhIHNpbmdsZSAnJCcuCiAgLy8vCiAgLy8vIEZ1cnRoZXJtb3JlLCB0aGlzIGZ1bmN0aW9uIGlzIGluamVjdGl2ZSwgdGhhdCBpcywgaXQgbmV2ZXIgcmV0dXJucyB0aGUKICAvLy8gc2FtZSBuYW1lIGZvciB0d28gZGlmZmVyZW50IGlucHV0cy4KICBTdHJpbmcgc2FmZVZhcmlhYmxlTmFtZShTdHJpbmcgbmFtZSkgewogICAgbmFtZSA9IG5hbWUucmVwbGFjZUFsbCgnIycsICdfJyk7CiAgICBpZiAoX2pzVmFyaWFibGVSZXNlcnZlZC5jb250YWlucyhuYW1lKSB8fCBuYW1lLnN0YXJ0c1dpdGgocickJykpIHsKICAgICAgcmV0dXJuICdcJCRuYW1lJzsKICAgIH0KICAgIHJldHVybiBuYW1lOwogIH0KCiAgQ29tbW9uRWxlbWVudHMgZ2V0IF9jb21tb25FbGVtZW50czsKCiAgLy8vIFJldHVybnMgdGhlIHN0cmluZyB0aGF0IGlzIHRvIGJlIHVzZWQgYXMgdGhlIHJlc3VsdCBvZiBhIGNhbGwgdG8KICAvLy8gW0pTX0dFVF9OQU1FXSBhdCBbbm9kZV0gd2l0aCBhcmd1bWVudCBbbmFtZV0uCiAganNBc3QuTmFtZSBnZXROYW1lRm9ySnNHZXROYW1lKFNwYW5uYWJsZSBzcGFubmFibGUsIEpzR2V0TmFtZSBuYW1lKSB7CiAgICBzd2l0Y2ggKG5hbWUpIHsKICAgICAgY2FzZSBKc0dldE5hbWUuR0VUVEVSX1BSRUZJWDoKICAgICAgICByZXR1cm4gYXNOYW1lKGZpeGVkTmFtZXMuZ2V0dGVyUHJlZml4KTsKICAgICAgY2FzZSBKc0dldE5hbWUuU0VUVEVSX1BSRUZJWDoKICAgICAgICByZXR1cm4gYXNOYW1lKGZpeGVkTmFtZXMuc2V0dGVyUHJlZml4KTsKICAgICAgY2FzZSBKc0dldE5hbWUuQ0FMTF9QUkVGSVg6CiAgICAgICAgcmV0dXJuIGFzTmFtZShmaXhlZE5hbWVzLmNhbGxQcmVmaXgpOwogICAgICBjYXNlIEpzR2V0TmFtZS5DQUxMX1BSRUZJWDA6CiAgICAgICAgcmV0dXJuIGFzTmFtZSgnJHtmaXhlZE5hbWVzLmNhbGxQcmVmaXh9XCQwJyk7CiAgICAgIGNhc2UgSnNHZXROYW1lLkNBTExfUFJFRklYMToKICAgICAgICByZXR1cm4gYXNOYW1lKCcke2ZpeGVkTmFtZXMuY2FsbFByZWZpeH1cJDEnKTsKICAgICAgY2FzZSBKc0dldE5hbWUuQ0FMTF9QUkVGSVgyOgogICAgICAgIHJldHVybiBhc05hbWUoJyR7Zml4ZWROYW1lcy5jYWxsUHJlZml4fVwkMicpOwogICAgICBjYXNlIEpzR2V0TmFtZS5DQUxMX1BSRUZJWDM6CiAgICAgICAgcmV0dXJuIGFzTmFtZSgnJHtmaXhlZE5hbWVzLmNhbGxQcmVmaXh9XCQzJyk7CiAgICAgIGNhc2UgSnNHZXROYW1lLkNBTExfUFJFRklYNDoKICAgICAgICByZXR1cm4gYXNOYW1lKCcke2ZpeGVkTmFtZXMuY2FsbFByZWZpeH1cJDQnKTsKICAgICAgY2FzZSBKc0dldE5hbWUuQ0FMTF9QUkVGSVg1OgogICAgICAgIHJldHVybiBhc05hbWUoJyR7Zml4ZWROYW1lcy5jYWxsUHJlZml4fVwkNScpOwogICAgICBjYXNlIEpzR2V0TmFtZS5DQUxMX0NBVENIX0FMTDoKICAgICAgICByZXR1cm4gYXNOYW1lKGZpeGVkTmFtZXMuY2FsbENhdGNoQWxsTmFtZSk7CiAgICAgIGNhc2UgSnNHZXROYW1lLlJFRkxFQ1RBQkxFOgogICAgICAgIHJldHVybiBhc05hbWUoZml4ZWROYW1lcy5yZWZsZWN0YWJsZUZpZWxkKTsKICAgICAgY2FzZSBKc0dldE5hbWUuQ0xBU1NfREVTQ1JJUFRPUl9QUk9QRVJUWToKICAgICAgICByZXR1cm4gYXNOYW1lKGZpeGVkTmFtZXMuY2xhc3NEZXNjcmlwdG9yUHJvcGVydHkpOwogICAgICBjYXNlIEpzR2V0TmFtZS5SRVFVSVJFRF9QQVJBTUVURVJfUFJPUEVSVFk6CiAgICAgICAgcmV0dXJuIGFzTmFtZShmaXhlZE5hbWVzLnJlcXVpcmVkUGFyYW1ldGVyRmllbGQpOwogICAgICBjYXNlIEpzR2V0TmFtZS5ERUZBVUxUX1ZBTFVFU19QUk9QRVJUWToKICAgICAgICByZXR1cm4gYXNOYW1lKGZpeGVkTmFtZXMuZGVmYXVsdFZhbHVlc0ZpZWxkKTsKICAgICAgY2FzZSBKc0dldE5hbWUuQ0FMTF9OQU1FX1BST1BFUlRZOgogICAgICAgIHJldHVybiBhc05hbWUoZml4ZWROYW1lcy5jYWxsTmFtZUZpZWxkKTsKICAgICAgY2FzZSBKc0dldE5hbWUuREVGRVJSRURfQUNUSU9OX1BST1BFUlRZOgogICAgICAgIHJldHVybiBhc05hbWUoZml4ZWROYW1lcy5kZWZlcnJlZEFjdGlvbik7CiAgICAgIGNhc2UgSnNHZXROYW1lLk9QRVJBVE9SX0FTX1BSRUZJWDoKICAgICAgICByZXR1cm4gYXNOYW1lKGZpeGVkTmFtZXMub3BlcmF0b3JBc1ByZWZpeCk7CiAgICAgIGNhc2UgSnNHZXROYW1lLlNJR05BVFVSRV9OQU1FOgogICAgICAgIHJldHVybiBhc05hbWUoZml4ZWROYW1lcy5vcGVyYXRvclNpZ25hdHVyZSk7CiAgICAgIGNhc2UgSnNHZXROYW1lLlJUSV9OQU1FOgogICAgICAgIHJldHVybiBhc05hbWUoZml4ZWROYW1lcy5ydGlOYW1lKTsKICAgICAgY2FzZSBKc0dldE5hbWUuVFlQRURFRl9UQUc6CiAgICAgICAgcmV0dXJuIGFzTmFtZShydGlUYWdzLnR5cGVkZWZUYWcpOwogICAgICBjYXNlIEpzR2V0TmFtZS5GVU5DVElPTl9UWVBFX1RBRzoKICAgICAgICByZXR1cm4gYXNOYW1lKHJ0aVRhZ3MuZnVuY3Rpb25UeXBlVGFnKTsKICAgICAgY2FzZSBKc0dldE5hbWUuRlVOQ1RJT05fVFlQRV9HRU5FUklDX0JPVU5EU19UQUc6CiAgICAgICAgcmV0dXJuIGFzTmFtZShydGlUYWdzLmZ1bmN0aW9uVHlwZUdlbmVyaWNCb3VuZHNUYWcpOwogICAgICBjYXNlIEpzR2V0TmFtZS5GVU5DVElPTl9UWVBFX1ZPSURfUkVUVVJOX1RBRzoKICAgICAgICByZXR1cm4gYXNOYW1lKHJ0aVRhZ3MuZnVuY3Rpb25UeXBlVm9pZFJldHVyblRhZyk7CiAgICAgIGNhc2UgSnNHZXROYW1lLkZVTkNUSU9OX1RZUEVfUkVUVVJOX1RZUEVfVEFHOgogICAgICAgIHJldHVybiBhc05hbWUocnRpVGFncy5mdW5jdGlvblR5cGVSZXR1cm5UeXBlVGFnKTsKICAgICAgY2FzZSBKc0dldE5hbWUuRlVOQ1RJT05fVFlQRV9SRVFVSVJFRF9QQVJBTUVURVJTX1RBRzoKICAgICAgICByZXR1cm4gYXNOYW1lKHJ0aVRhZ3MuZnVuY3Rpb25UeXBlUmVxdWlyZWRQYXJhbWV0ZXJzVGFnKTsKICAgICAgY2FzZSBKc0dldE5hbWUuRlVOQ1RJT05fVFlQRV9PUFRJT05BTF9QQVJBTUVURVJTX1RBRzoKICAgICAgICByZXR1cm4gYXNOYW1lKHJ0aVRhZ3MuZnVuY3Rpb25UeXBlT3B0aW9uYWxQYXJhbWV0ZXJzVGFnKTsKICAgICAgY2FzZSBKc0dldE5hbWUuRlVOQ1RJT05fVFlQRV9OQU1FRF9QQVJBTUVURVJTX1RBRzoKICAgICAgICByZXR1cm4gYXNOYW1lKHJ0aVRhZ3MuZnVuY3Rpb25UeXBlTmFtZWRQYXJhbWV0ZXJzVGFnKTsKICAgICAgY2FzZSBKc0dldE5hbWUuRlVUVVJFX09SX1RBRzoKICAgICAgICByZXR1cm4gYXNOYW1lKHJ0aVRhZ3MuZnV0dXJlT3JUYWcpOwogICAgICBjYXNlIEpzR2V0TmFtZS5GVVRVUkVfT1JfVFlQRV9BUkdVTUVOVF9UQUc6CiAgICAgICAgcmV0dXJuIGFzTmFtZShydGlUYWdzLmZ1dHVyZU9yVHlwZVRhZyk7CiAgICAgIGNhc2UgSnNHZXROYW1lLklTX0lOREVYQUJMRV9GSUVMRF9OQU1FOgogICAgICAgIHJldHVybiBvcGVyYXRvcklzKF9jb21tb25FbGVtZW50cy5qc0luZGV4aW5nQmVoYXZpb3JJbnRlcmZhY2UpOwogICAgICBjYXNlIEpzR2V0TmFtZS5OVUxMX0NMQVNTX1RZUEVfTkFNRToKICAgICAgICByZXR1cm4gcnVudGltZVR5cGVOYW1lKF9jb21tb25FbGVtZW50cy5udWxsQ2xhc3MpOwogICAgICBjYXNlIEpzR2V0TmFtZS5PQkpFQ1RfQ0xBU1NfVFlQRV9OQU1FOgogICAgICAgIHJldHVybiBydW50aW1lVHlwZU5hbWUoX2NvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzKTsKICAgICAgY2FzZSBKc0dldE5hbWUuRlVOQ1RJT05fQ0xBU1NfVFlQRV9OQU1FOgogICAgICAgIHJldHVybiBydW50aW1lVHlwZU5hbWUoX2NvbW1vbkVsZW1lbnRzLmZ1bmN0aW9uQ2xhc3MpOwogICAgICBjYXNlIEpzR2V0TmFtZS5GVVRVUkVfQ0xBU1NfVFlQRV9OQU1FOgogICAgICAgIHJldHVybiBydW50aW1lVHlwZU5hbWUoX2NvbW1vbkVsZW1lbnRzLmZ1dHVyZUNsYXNzKTsKICAgICAgY2FzZSBKc0dldE5hbWUuQk9PTF9SRUNJUEU6CiAgICAgICAgcmV0dXJuIHJ1bnRpbWVUeXBlTmFtZShfY29tbW9uRWxlbWVudHMuYm9vbENsYXNzKTsKICAgICAgY2FzZSBKc0dldE5hbWUuRE9VQkxFX1JFQ0lQRToKICAgICAgICByZXR1cm4gcnVudGltZVR5cGVOYW1lKF9jb21tb25FbGVtZW50cy5kb3VibGVDbGFzcyk7CiAgICAgIGNhc2UgSnNHZXROYW1lLklOVF9SRUNJUEU6CiAgICAgICAgcmV0dXJuIHJ1bnRpbWVUeXBlTmFtZShfY29tbW9uRWxlbWVudHMuaW50Q2xhc3MpOwogICAgICBjYXNlIEpzR2V0TmFtZS5OVU1fUkVDSVBFOgogICAgICAgIHJldHVybiBydW50aW1lVHlwZU5hbWUoX2NvbW1vbkVsZW1lbnRzLm51bUNsYXNzKTsKICAgICAgY2FzZSBKc0dldE5hbWUuU1RSSU5HX1JFQ0lQRToKICAgICAgICByZXR1cm4gcnVudGltZVR5cGVOYW1lKF9jb21tb25FbGVtZW50cy5zdHJpbmdDbGFzcyk7CiAgICAgIGNhc2UgSnNHZXROYW1lLlJUSV9GSUVMRF9JUzoKICAgICAgICByZXR1cm4gaW5zdGFuY2VGaWVsZFByb3BlcnR5TmFtZShfY29tbW9uRWxlbWVudHMucnRpSXNGaWVsZCk7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgZmFpbGVkQXQoc3Bhbm5hYmxlLCAnRXJyb3I6IE5hbWVyIGhhcyBubyBuYW1lIGZvciAiJG5hbWUiLicpOwogICAgfQogIH0KfQoKY2xhc3MgTW9kdWxhck5hbWVySW1wbCBleHRlbmRzIE1vZHVsYXJOYW1lciB7CiAgZmluYWwgQ29kZWdlblJlZ2lzdHJ5IF9yZWdpc3RyeTsKICBAb3ZlcnJpZGUKICBmaW5hbCBSdW50aW1lVHlwZVRhZ3MgcnRpVGFnczsKICBAb3ZlcnJpZGUKICBmaW5hbCBGaXhlZE5hbWVzIGZpeGVkTmFtZXM7CgogIEBvdmVycmlkZQogIGZpbmFsIENvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKCiAgTW9kdWxhck5hbWVySW1wbCgKICAgICAgdGhpcy5fcmVnaXN0cnksIHRoaXMuX2NvbW1vbkVsZW1lbnRzLCB0aGlzLnJ0aVRhZ3MsIHRoaXMuZml4ZWROYW1lcyk7CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgZ2V0IHJ0aUZpZWxkSnNOYW1lIHsKICAgIGpzQXN0Lk5hbWUgbmFtZSA9IG5ldyBNb2R1bGFyTmFtZShNb2R1bGFyTmFtZUtpbmQucnRpRmllbGQpOwogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyTW9kdWxhck5hbWUobmFtZSk7CiAgICByZXR1cm4gbmFtZTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgcnVudGltZVR5cGVOYW1lKEVudGl0eSBlbGVtZW50KSB7CiAgICBqc0FzdC5OYW1lIG5hbWUgPQogICAgICAgIG5ldyBNb2R1bGFyTmFtZShNb2R1bGFyTmFtZUtpbmQucnVudGltZVR5cGVOYW1lLCBkYXRhOiBlbGVtZW50KTsKICAgIF9yZWdpc3RyeS5yZWdpc3Rlck1vZHVsYXJOYW1lKG5hbWUpOwogICAgcmV0dXJuIG5hbWU7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5OYW1lIGNsYXNzTmFtZShDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICBqc0FzdC5OYW1lIG5hbWUgPSBuZXcgTW9kdWxhck5hbWUoTW9kdWxhck5hbWVLaW5kLmNsYXNzTmFtZSwgZGF0YTogZWxlbWVudCk7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJNb2R1bGFyTmFtZShuYW1lKTsKICAgIHJldHVybiBuYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiByZWFkR2xvYmFsT2JqZWN0Rm9yTGlicmFyeShMaWJyYXJ5RW50aXR5IGxpYnJhcnkpIHsKICAgIGpzQXN0LkV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IG5ldyBNb2R1bGFyRXhwcmVzc2lvbigKICAgICAgICBNb2R1bGFyRXhwcmVzc2lvbktpbmQuZ2xvYmFsT2JqZWN0Rm9yTGlicmFyeSwgbGlicmFyeSk7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJNb2R1bGFyRXhwcmVzc2lvbihleHByZXNzaW9uKTsKICAgIHJldHVybiBleHByZXNzaW9uOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiByZWFkR2xvYmFsT2JqZWN0Rm9yQ2xhc3MoQ2xhc3NFbnRpdHkgZWxlbWVudCkgewogICAganNBc3QuRXhwcmVzc2lvbiBleHByZXNzaW9uID0gbmV3IE1vZHVsYXJFeHByZXNzaW9uKAogICAgICAgIE1vZHVsYXJFeHByZXNzaW9uS2luZC5nbG9iYWxPYmplY3RGb3JDbGFzcywgZWxlbWVudCk7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJNb2R1bGFyRXhwcmVzc2lvbihleHByZXNzaW9uKTsKICAgIHJldHVybiBleHByZXNzaW9uOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiByZWFkR2xvYmFsT2JqZWN0Rm9yVHlwZShFbnRpdHkgZWxlbWVudCkgewogICAganNBc3QuRXhwcmVzc2lvbiBleHByZXNzaW9uID0gbmV3IE1vZHVsYXJFeHByZXNzaW9uKAogICAgICAgIE1vZHVsYXJFeHByZXNzaW9uS2luZC5nbG9iYWxPYmplY3RGb3JUeXBlLCBlbGVtZW50KTsKICAgIF9yZWdpc3RyeS5yZWdpc3Rlck1vZHVsYXJFeHByZXNzaW9uKGV4cHJlc3Npb24pOwogICAgcmV0dXJuIGV4cHJlc3Npb247CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHJlYWRHbG9iYWxPYmplY3RGb3JNZW1iZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIGpzQXN0LkV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IG5ldyBNb2R1bGFyRXhwcmVzc2lvbigKICAgICAgICBNb2R1bGFyRXhwcmVzc2lvbktpbmQuZ2xvYmFsT2JqZWN0Rm9yTWVtYmVyLCBlbGVtZW50KTsKICAgIF9yZWdpc3RyeS5yZWdpc3Rlck1vZHVsYXJFeHByZXNzaW9uKGV4cHJlc3Npb24pOwogICAgcmV0dXJuIGV4cHJlc3Npb247CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5OYW1lIGFsaWFzZWRTdXBlck1lbWJlclByb3BlcnR5TmFtZShNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBqc0FzdC5OYW1lIG5hbWUgPQogICAgICAgIG5ldyBNb2R1bGFyTmFtZShNb2R1bGFyTmFtZUtpbmQuYWxpYXNlZFN1cGVyTWVtYmVyLCBkYXRhOiBtZW1iZXIpOwogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyTW9kdWxhck5hbWUobmFtZSk7CiAgICByZXR1cm4gbmFtZTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgc3RhdGljQ2xvc3VyZU5hbWUoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAganNBc3QuTmFtZSBuYW1lID0KICAgICAgICBuZXcgTW9kdWxhck5hbWUoTW9kdWxhck5hbWVLaW5kLnN0YXRpY0Nsb3N1cmUsIGRhdGE6IGVsZW1lbnQpOwogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyTW9kdWxhck5hbWUobmFtZSk7CiAgICByZXR1cm4gbmFtZTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgbWV0aG9kUHJvcGVydHlOYW1lKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCkgewogICAganNBc3QuTmFtZSBuYW1lID0KICAgICAgICBuZXcgTW9kdWxhck5hbWUoTW9kdWxhck5hbWVLaW5kLm1ldGhvZFByb3BlcnR5LCBkYXRhOiBtZXRob2QpOwogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyTW9kdWxhck5hbWUobmFtZSk7CiAgICByZXR1cm4gbmFtZTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgaW5zdGFuY2VGaWVsZFByb3BlcnR5TmFtZShGaWVsZEVudGl0eSBlbGVtZW50KSB7CiAgICBqc0FzdC5OYW1lIG5hbWUgPQogICAgICAgIG5ldyBNb2R1bGFyTmFtZShNb2R1bGFyTmFtZUtpbmQuaW5zdGFuY2VGaWVsZCwgZGF0YTogZWxlbWVudCk7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJNb2R1bGFyTmFtZShuYW1lKTsKICAgIHJldHVybiBuYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBvcGVyYXRvcklzVHlwZShEYXJ0VHlwZSB0eXBlKSB7CiAgICBqc0FzdC5OYW1lIG5hbWUgPQogICAgICAgIG5ldyBNb2R1bGFyTmFtZShNb2R1bGFyTmFtZUtpbmQub3BlcmF0b3JJc1R5cGUsIGRhdGE6IHR5cGUpOwogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyTW9kdWxhck5hbWUobmFtZSk7CiAgICByZXR1cm4gbmFtZTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgaW5zdGFuY2VNZXRob2ROYW1lKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCkgewogICAganNBc3QuTmFtZSBuYW1lID0KICAgICAgICBuZXcgTW9kdWxhck5hbWUoTW9kdWxhck5hbWVLaW5kLmluc3RhbmNlTWV0aG9kLCBkYXRhOiBtZXRob2QpOwogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyTW9kdWxhck5hbWUobmFtZSk7CiAgICByZXR1cm4gbmFtZTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgaW52b2NhdGlvbk5hbWUoU2VsZWN0b3Igc2VsZWN0b3IpIHsKICAgIGpzQXN0Lk5hbWUgbmFtZSA9CiAgICAgICAgbmV3IE1vZHVsYXJOYW1lKE1vZHVsYXJOYW1lS2luZC5pbnZvY2F0aW9uLCBkYXRhOiBzZWxlY3Rvcik7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJNb2R1bGFyTmFtZShuYW1lKTsKICAgIHJldHVybiBuYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBsYXp5SW5pdGlhbGl6ZXJOYW1lKEZpZWxkRW50aXR5IGVsZW1lbnQpIHsKICAgIGpzQXN0Lk5hbWUgbmFtZSA9CiAgICAgICAgbmV3IE1vZHVsYXJOYW1lKE1vZHVsYXJOYW1lS2luZC5sYXp5SW5pdGlhbGl6ZXIsIGRhdGE6IGVsZW1lbnQpOwogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyTW9kdWxhck5hbWUobmFtZSk7CiAgICByZXR1cm4gbmFtZTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgb3BlcmF0b3JJcyhDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICBqc0FzdC5OYW1lIG5hbWUgPQogICAgICAgIG5ldyBNb2R1bGFyTmFtZShNb2R1bGFyTmFtZUtpbmQub3BlcmF0b3JJcywgZGF0YTogZWxlbWVudCk7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJNb2R1bGFyTmFtZShuYW1lKTsKICAgIHJldHVybiBuYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBnbG9iYWxQcm9wZXJ0eU5hbWVGb3JUeXBlKEVudGl0eSBlbGVtZW50KSB7CiAgICBqc0FzdC5OYW1lIG5hbWUgPSBuZXcgTW9kdWxhck5hbWUoTW9kdWxhck5hbWVLaW5kLmdsb2JhbFByb3BlcnR5TmFtZUZvclR5cGUsCiAgICAgICAgZGF0YTogZWxlbWVudCk7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJNb2R1bGFyTmFtZShuYW1lKTsKICAgIHJldHVybiBuYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBnbG9iYWxQcm9wZXJ0eU5hbWVGb3JDbGFzcyhDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICBqc0FzdC5OYW1lIG5hbWUgPSBuZXcgTW9kdWxhck5hbWUoCiAgICAgICAgTW9kdWxhck5hbWVLaW5kLmdsb2JhbFByb3BlcnR5TmFtZUZvckNsYXNzLAogICAgICAgIGRhdGE6IGVsZW1lbnQpOwogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyTW9kdWxhck5hbWUobmFtZSk7CiAgICByZXR1cm4gbmFtZTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgZ2xvYmFsUHJvcGVydHlOYW1lRm9yTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBqc0FzdC5OYW1lIG5hbWUgPSBuZXcgTW9kdWxhck5hbWUoCiAgICAgICAgTW9kdWxhck5hbWVLaW5kLmdsb2JhbFByb3BlcnR5TmFtZUZvck1lbWJlciwKICAgICAgICBkYXRhOiBlbGVtZW50KTsKICAgIF9yZWdpc3RyeS5yZWdpc3Rlck1vZHVsYXJOYW1lKG5hbWUpOwogICAgcmV0dXJuIG5hbWU7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5OYW1lIGdsb2JhbE5hbWVGb3JJbnRlcmZhY2VUeXBlVmFyaWFibGUoVHlwZVZhcmlhYmxlRW50aXR5IGVsZW1lbnQpIHsKICAgIGpzQXN0Lk5hbWUgbmFtZSA9IG5ldyBNb2R1bGFyTmFtZSgKICAgICAgICBNb2R1bGFyTmFtZUtpbmQuZ2xvYmFsTmFtZUZvckludGVyZmFjZVR5cGVWYXJpYWJsZSwKICAgICAgICBkYXRhOiBlbGVtZW50KTsKICAgIF9yZWdpc3RyeS5yZWdpc3Rlck1vZHVsYXJOYW1lKG5hbWUpOwogICAgcmV0dXJuIG5hbWU7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5OYW1lIG5hbWVGb3JHZXRJbnRlcmNlcHRvcihTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXMpIHsKICAgIGpzQXN0Lk5hbWUgbmFtZSA9CiAgICAgICAgbmV3IE1vZHVsYXJOYW1lKE1vZHVsYXJOYW1lS2luZC5uYW1lRm9yR2V0SW50ZXJjZXB0b3IsIHNldDogY2xhc3Nlcyk7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJNb2R1bGFyTmFtZShuYW1lKTsKICAgIHJldHVybiBuYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBuYW1lRm9yT25lU2hvdEludGVyY2VwdG9yKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgU2V0PENsYXNzRW50aXR5PiBjbGFzc2VzKSB7CiAgICBqc0FzdC5OYW1lIG5hbWUgPSBuZXcgTW9kdWxhck5hbWUoTW9kdWxhck5hbWVLaW5kLm5hbWVGb3JPbmVTaG90SW50ZXJjZXB0b3IsCiAgICAgICAgZGF0YTogc2VsZWN0b3IsIHNldDogY2xhc3Nlcyk7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJNb2R1bGFyTmFtZShuYW1lKTsKICAgIHJldHVybiBuYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBhc05hbWUoU3RyaW5nIHRleHQpIHsKICAgIGpzQXN0Lk5h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TmFtaW5nUmVnaXN0cnkgZ2V0IGZpZWxkUmVnaXN0cnk7CgogIC8vIFJldHVybnMgYSBtaW5pbWFsIG5hbWUgZm9yIHRoZSBmaWVsZCB0aGF0IGlzIGdsb2JhbGx5IHVuaXF1ZSBhbG9uZwogIC8vIHRoZSBnaXZlbiBlbGVtZW50J3MgY2xhc3MgaW5oZXJpdGFuY2UgY2hhaW4uCiAgLy8KICAvLyBUaGUgaW5oZXJpdGFuY2Ugc2NvcGUgYmFzZWQgbmFtaW5nIG1pZ2h0IG5vdCB5aWVsZCBhIG5hbWUuIEZvciBpbnN0YW5jZSwKICAvLyB0aGlzIGNvdWxkIGJlIGJlY2F1c2UgdGhlIGZpZWxkIGJlbG9uZ3MgdG8gYSBtaXhpbi4gSW4gc3VjaCBhIGNhc2UgdGhpcwogIC8vIHdpbGwgcmV0dXJuIGBudWxsYCBhbmQgYSBub3JtYWwgZmllbGQgbmFtZSBoYXMgdG8gYmUgdXNlZC4KICBqc0FzdC5OYW1lIF9taW5pZmllZEluc3RhbmNlRmllbGRQcm9wZXJ0eU5hbWUoRmllbGRFbnRpdHkgZWxlbWVudCkgewogICAgaWYgKF9uYXRpdmVEYXRhLmhhc0ZpeGVkQmFja2VuZE5hbWUoZWxlbWVudCkpIHsKICAgICAgcmV0dXJuIG5ldyBTdHJpbmdCYWNrZWROYW1lKF9uYXRpdmVEYXRhLmdldEZpeGVkQmFja2VuZE5hbWUoZWxlbWVudCkpOwogICAgfQoKICAgIF9GaWVsZE5hbWluZ1Njb3BlIG5hbWVzOwogICAgaWYgKGVsZW1lbnQgaXMgSlJlY29yZEZpZWxkKSB7CiAgICAgIG5hbWVzID0gbmV3IF9GaWVsZE5hbWluZ1Njb3BlLmZvckJveChlbGVtZW50LmJveCwgZmllbGRSZWdpc3RyeSk7CiAgICB9IGVsc2UgewogICAgICBDbGFzc0VudGl0eSBjbHMgPSBlbGVtZW50LmVuY2xvc2luZ0NsYXNzOwogICAgICBuYW1lcyA9IG5ldyBfRmllbGROYW1pbmdTY29wZS5mb3JDbGFzcyhjbHMsIF9jbG9zZWRXb3JsZCwgZmllbGRSZWdpc3RyeSk7CiAgICB9CgogICAgaWYgKG5hbWVzLmNvbnRhaW5zRmllbGQoZWxlbWVudCkpIHsKICAgICAgcmV0dXJuIG5hbWVzW2VsZW1lbnRdOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQp9CgovLy8gRW5jYXBzdWxhdGVzIHRoZSBnbG9iYWwgc3RhdGUgb2YgZmllbGQgbmFtaW5nLgovLy8KLy8vIFRoZSBmaWVsZCBuYW1pbmcgcmVnaXN0cnkgYWxsb2NhdGVzIG5hbWVzIHRvIGJlIHVzZWQgYWxvbmcgYSBwYXRoIGluIHRoZQovLy8gaW5oZXJpdGFuY2UgaGllcmFyY2h5IG9mIGZpZWxkcywgc3RhcnRpbmcgd2l0aCB0aGUgb2JqZWN0IGNsYXNzLiBUaGUgYWN0dWFsCi8vLyBoaWVyYXJjaHkgaXMgZW5jb2RlZCB1c2luZyBpbnN0YW5jZXMgb2YgW19GaWVsZE5hbWluZ1Njb3BlXS4KY2xhc3MgX0ZpZWxkTmFtaW5nUmVnaXN0cnkgewogIGZpbmFsIE5hbWVyIG5hbWVyOwoKICBmaW5hbCBNYXA8RW50aXR5LCBfRmllbGROYW1pbmdTY29wZT4gc2NvcGVzID0KICAgICAgbmV3IE1hcDxFbnRpdHksIF9GaWVsZE5hbWluZ1Njb3BlPigpOwoKICBmaW5hbCBNYXA8RW50aXR5LCBqc0FzdC5OYW1lPiBnbG9iYWxOYW1lcyA9IG5ldyBNYXA8RW50aXR5LCBqc0FzdC5OYW1lPigpOwoKICBpbnQgZ2xvYmFsQ291bnQgPSAwOwoKICBmaW5hbCBMaXN0PGpzQXN0Lk5hbWU+IG5hbWVTdG9yZSA9IG5ldyBMaXN0PGpzQXN0Lk5hbWU+KCk7CgogIF9GaWVsZE5hbWluZ1JlZ2lzdHJ5KHRoaXMubmFtZXIpOwoKICAvLyBSZXR1cm5zIHRoZSBuYW1lIHRvIGJlIHVzZWQgZm9yIGEgZmllbGQgd2l0aCBkaXN0YW5jZSBbaW5kZXhdIGZyb20gdGhlCiAgLy8gcm9vdCBvZiB0aGUgb2JqZWN0IGhpZXJhcmNoeS4gVGhlIGRpc3RhbmNlIHRoZXJlYnkgaXMgY29tcHV0ZWQgYXMgdGhlCiAgLy8gbnVtYmVyIG9mIGZpZWxkcyBwcmVjZWRpbmcgdGhlIGN1cnJlbnQgZmllbGQgaW4gaXRzIGNsYXNzZXMgaW5oZXJpdGFuY2UKICAvLyBjaGFpbi4KICAvLwogIC8vIFRoZSBpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIHRoYXQgbmFtZXMgYXJlIHJlcXVlZHN0ZWQgaW4gb3JkZXIsIHRoYXQgaXMgdGhlCiAgLy8gbmFtZSBhdCBwb3NpdGlvbiBpKzEgaXMgcmVxdWVzdGVkIGFmdGVyIHRoZSBuYW1lIGF0IHBvc2l0aW9uIGkgd2FzCiAgLy8gcmVxdWVzdGVkLgogIGpzQXN0Lk5hbWUgZ2V0TmFtZShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA+PSBuYW1lU3RvcmUubGVuZ3RoKSB7CiAgICAgIC8vIFRoZSBuYW1lciB1c3VhbGx5IGRvZXMgbm90IHVzZSBjZXJ0YWluIG5hbWVzIGFzIHRoZXkgY2xhc2ggd2l0aAogICAgICAvLyBleGlzdGluZyBwcm9wZXJ0aWVzIG9uIEpTIG9iamVjdHMgKHNlZSBbX3Jlc2VydmVkTmF0aXZlUHJvcGVydGllc10pLgogICAgICAvLyBIb3dldmVyLCBzb21lIG9mIHRoZW0gYXJlIHJlYWxseSBzaG9ydCBhbmQgc2FmZSB0byB1c2UgZm9yIGZpZWxkcy4KICAgICAgLy8gVGh1cywgd2Ugc2hvcnRjdXQgdGhlIG5hbWVyIHRvIHVzZSB0aG9zZSBmaXJzdC4KICAgICAgYXNzZXJ0KGluZGV4ID09IG5hbWVTdG9yZS5sZW5ndGgpOwogICAgICBpZiAoaW5kZXggPCBNaW5pZnlOYW1lci5fcmVzZXJ2ZWROYXRpdmVQcm9wZXJ0aWVzLmxlbmd0aCAmJgogICAgICAgICAgTWluaWZ5TmFtZXIuX3Jlc2VydmVkTmF0aXZlUHJvcGVydGllc1tpbmRleF0ubGVuZ3RoIDw9IDIpIHsKICAgICAgICBuYW1lU3RvcmUuYWRkKAogICAgICAgICAgICBuZXcgU3RyaW5nQmFja2VkTmFtZShNaW5pZnlOYW1lci5fcmVzZXJ2ZWROYXRpdmVQcm9wZXJ0aWVzW2luZGV4XSkpOwogICAgICB9IGVsc2UgewogICAgICAgIG5hbWVTdG9yZS5hZGQobmFtZXIuZ2V0RnJlc2hOYW1lKG5hbWVyLmluc3RhbmNlU2NvcGUsICJmaWVsZCRpbmRleCIpKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBuYW1lU3RvcmVbaW5kZXhdOwogIH0KfQoKLy8vIEEgW19GaWVsZE5hbWluZ1Njb3BlXSBlbmNvZGVzIGEgbm9kZSBpbiB0aGUgaW5oZXJpdGFuY2UgdHJlZSBvZiB0aGUgY3VycmVudAovLy8gY2xhc3MgaGllcmFyY2h5LiBUaGUgcm9vdCBub2RlIHR5cGljYWxseSBpcyB0aGUgbm9kZSBjb3JyZXNwb25kaW5nIHRvIHRoZQovLy8gYE9iamVjdGAgY2xhc3MuIEl0IGlzIHVzZWQgdG8gYXNzaWduIGEgdW5pcXVlIG5hbWUgdG8gZWFjaCBmaWVsZCBvZiBhIGNsYXNzLgovLy8gVW5pcXVlIGhlcmUgbWVhbnMgdW5pcXVlIHdydC4gYWxsIGZpZWxkcyBhbG9uZyB0aGUgcGF0aCBiYWNrIHRvIHRoZSByb290LgovLy8gVGhpcyBpcyBhY2hpZXZlZCBhdCBjb25zdHJ1Y3Rpb24gdGltZSB2aWEgdGhlIFtfZmllbGROYW1lQ291bnRlcl0gZmllbGQgdGhhdAovLy8gY291bnRzIHRoZSBudW1iZXIgb2YgZmllbGRzIG9uIHRoZSBwYXRoIHRvIHRoZSByb290IG5vZGUgdGhhdCBoYXZlIGJlZW4KLy8vIGVuY291bnRlcmVkIHNvIGZhci4KLy8vCi8vLyBPYnZpb3VzbHksIHRoaXMgb25seSB3b3JrcyBpZiBubyBmaWVsZHMgYXJlIGFkZGVkIHRvIGEgcGFyZW50IG5vZGUgYWZ0ZXIgaXRzCi8vLyBjaGlsZHJlbiBoYXZlIGFkZGVkIHRoZWlyIGZpcnN0IGZpZWxkLgpjbGFzcyBfRmllbGROYW1pbmdTY29wZSB7CiAgZmluYWwgX0ZpZWxkTmFtaW5nU2NvcGUgc3VwZXJTY29wZTsKICBmaW5hbCBFbnRpdHkgY29udGFpbmVyOwogIGZpbmFsIE1hcDxFbnRpdHksIGpzQXN0Lk5hbWU+IG5hbWVzID0gbmV3IE1hcGxldDxFbnRpdHksIGpzQXN0Lk5hbWU+KCk7CiAgZmluYWwgX0ZpZWxkTmFtaW5nUmVnaXN0cnkgcmVnaXN0cnk7CgogIC8vLyBOYW1pbmcgY291bnRlciB1c2VkIGZvciBmaWVsZHMgb2Ygb3JkaW5hcnkgY2xhc3Nlcy4KICBpbnQgX2ZpZWxkTmFtZUNvdW50ZXI7CgogIC8vLyBUaGUgbnVtYmVyIG9mIGZpZWxkcyBhbG9uZyB0aGUgc3VwZXJjbGFzcyBjaGFpbiB0aGF0IHVzZSBpbmhlcml0YW5jZQogIC8vLyBiYXNlZCBuYW1pbmcsIGluY2x1ZGluZyB0aGUgb25lcyBhbGxvY2F0ZWQgZm9yIHRoaXMgc2NvcGUuCiAgaW50IGdldCBpbmhlcml0YW5jZUJhc2VkRmllbGROYW1lQ291bnRlciA9PiBfZmllbGROYW1lQ291bnRlcjsKCiAgLy8vIFRoZSBudW1iZXIgb2YgbG9jYWxseSB1c2VkIGZpZWxkcy4gRGVwZW5kaW5nIG9uIHRoZSBuYW1pbmcgc291cmNlCiAgLy8vIChlLmcuIGluaGVyaXRhbmNlIGJhc2VkIG9yIGdsb2JhbGx5IHVuaXF1ZSBmb3IgbWl4aXhucykgdGhpcwogIC8vLyBtaWdodCBiZSBkaWZmZXJlbnQgZnJvbSBbaW5oZXJpdGFuY2VCYXNlZEZpZWxkTmFtZUNvdW50ZXJdLgogIGludCBnZXQgX2xvY2FsRmllbGROYW1lQ291bnRlciA9PiBfZmllbGROYW1lQ291bnRlcjsKICB2b2lkIHNldCBfbG9jYWxGaWVsZE5hbWVDb3VudGVyKGludCB2YWwpIHsKICAgIF9maWVsZE5hbWVDb3VudGVyID0gdmFsOwogIH0KCiAgZmFjdG9yeSBfRmllbGROYW1pbmdTY29wZS5mb3JDbGFzcygKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCBKQ2xvc2VkV29ybGQgd29ybGQsIF9GaWVsZE5hbWluZ1JlZ2lzdHJ5IHJlZ2lzdHJ5KSB7CiAgICBfRmllbGROYW1pbmdTY29wZSByZXN1bHQgPSByZWdpc3RyeS5zY29wZXNbY2xzXTsKICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgcmV0dXJuIHJlc3VsdDsKCiAgICBpZiAod29ybGQuaXNVc2VkQXNNaXhpbihjbHMpKSB7CiAgICAgIHJlc3VsdCA9IG5ldyBfTWl4aW5GaWVsZE5hbWluZ1Njb3BlLm1peGluKGNscywgcmVnaXN0cnkpOwogICAgfSBlbHNlIHsKICAgICAgdmFyIHN1cGVyY2xhc3MgPSB3b3JsZC5lbGVtZW50RW52aXJvbm1lbnQuZ2V0U3VwZXJDbGFzcyhjbHMpOwogICAgICBpZiAoc3VwZXJjbGFzcyA9PSBudWxsKSB7CiAgICAgICAgcmVzdWx0ID0gbmV3IF9GaWVsZE5hbWluZ1Njb3BlLnJvb3RTY29wZShjbHMsIHJlZ2lzdHJ5KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfRmllbGROYW1pbmdTY29wZSBzdXBlclNjb3BlID0KICAgICAgICAgICAgbmV3IF9GaWVsZE5hbWluZ1Njb3BlLmZvckNsYXNzKHN1cGVyY2xhc3MsIHdvcmxkLCByZWdpc3RyeSk7CiAgICAgICAgaWYgKHdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudC5pc01peGluQXBwbGljYXRpb24oY2xzKSkgewogICAgICAgICAgcmVzdWx0ID0KICAgICAgICAgICAgICBuZXcgX01peGluRmllbGROYW1pbmdTY29wZS5taXhlZEluKGNscywgc3VwZXJTY29wZSwgcmVnaXN0cnkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXN1bHQgPSBuZXcgX0ZpZWxkTmFtaW5nU2NvcGUuaW5oZXJpdChjbHMsIHN1cGVyU2NvcGUsIHJlZ2lzdHJ5KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICB3b3JsZC5lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaENsYXNzTWVtYmVyKGNscywKICAgICAgICAoQ2xhc3NFbnRpdHkgZGVjbGFyZXIsIE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgICAgaWYgKG1lbWJlci5pc0ZpZWxkICYmIG1lbWJlci5pc0luc3RhbmNlTWVtYmVyKSByZXN1bHQuYWRkKG1lbWJlcik7CiAgICB9KTsKCiAgICByZWdpc3RyeS5zY29wZXNbY2xzXSA9IHJlc3VsdDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBmYWN0b3J5IF9GaWVsZE5hbWluZ1Njb3BlLmZvckJveChMb2NhbCBib3gsIF9GaWVsZE5hbWluZ1JlZ2lzdHJ5IHJlZ2lzdHJ5KSB7CiAgICByZXR1cm4gcmVnaXN0cnkuc2NvcGVzCiAgICAgICAgLnB1dElmQWJzZW50KGJveCwgKCkgPT4gbmV3IF9Cb3hGaWVsZE5hbWluZ1Njb3BlKGJveCwgcmVnaXN0cnkpKTsKICB9CgogIF9GaWVsZE5hbWluZ1Njb3BlLnJvb3RTY29wZSh0aGlzLmNvbnRhaW5lciwgdGhpcy5yZWdpc3RyeSkKICAgICAgOiBzdXBlclNjb3BlID0gbnVsbCwKICAgICAgICBfZmllbGROYW1lQ291bnRlciA9IDA7CgogIF9GaWVsZE5hbWluZ1Njb3BlLmluaGVyaXQodGhpcy5jb250YWluZXIsIHRoaXMuc3VwZXJTY29wZSwgdGhpcy5yZWdpc3RyeSkgewogICAgX2ZpZWxkTmFtZUNvdW50ZXIgPSBzdXBlclNjb3BlLmluaGVyaXRhbmNlQmFzZWRGaWVsZE5hbWVDb3VudGVyOwogIH0KCiAgLy8vIENoZWNrcyB3aGV0aGVyIFtuYW1lXSBpcyBhbHJlYWR5IHVzZWQgaW4gdGhlIGN1cnJlbnQgc2NvcGUgY2hhaW4uCiAgX2lzTmFtZVVudXNlZChqc0FzdC5OYW1lIG5hbWUpIHsKICAgIHJldHVybiAhbmFtZXMudmFsdWVzLmNvbnRhaW5zKG5hbWUpICYmCiAgICAgICAgKChzdXBlclNjb3BlID09IG51bGwpIHx8IHN1cGVyU2NvcGUuX2lzTmFtZVVudXNlZChuYW1lKSk7CiAgfQoKICBqc0FzdC5OYW1lIF9uZXh0TmFtZSgpID0+IHJlZ2lzdHJ5LmdldE5hbWUoX2xvY2FsRmllbGROYW1lQ291bnRlcisrKTsKCiAganNBc3QuTmFtZSBvcGVyYXRvciBbXShFbnRpdHkgZmllbGQpIHsKICAgIGpzQXN0Lk5hbWUgbmFtZSA9IG5hbWVzW2ZpZWxkXTsKICAgIGlmIChuYW1lID09IG51bGwgJiYgc3VwZXJTY29wZSAhPSBudWxsKSByZXR1cm4gc3VwZXJTY29wZVtmaWVsZF07CiAgICByZXR1cm4gbmFtZTsKICB9CgogIHZvaWQgYWRkKEVudGl0eSBmaWVsZCkgewogICAgaWYgKG5hbWVzLmNvbnRhaW5zS2V5KGZpZWxkKSkgcmV0dXJuOwoKICAgIGpzQXN0Lk5hbWUgdmFsdWUgPSBfbmV4dE5hbWUoKTsKICAgIGFzc2VydChfaXNOYW1lVW51c2VkKHZhbHVlKSwgZmFpbGVkQXQoZmllbGQpKTsKICAgIG5hbWVzW2ZpZWxkXSA9IHZhbHVlOwogIH0KCiAgYm9vbCBjb250YWluc0ZpZWxkKEVudGl0eSBmaWVsZCkgPT4gbmFtZXMuY29udGFpbnNLZXkoZmllbGQpOwp9CgovLy8gRmllbGQgbmFtZXMgZm9yIG1peGlucyBoYXZlIHR3byBjb25zdHJhaW50czogVGhleSBuZWVkIHRvIGJlIHVuaXF1ZSBpbiB0aGUKLy8vIGhpZXJhcmNoeSBvZiBlYWNoIGFwcGxpY2F0aW9uIG9mIGEgbWl4aW4gYW5kIHRoZXkgbmVlZCB0byBiZSB0aGUgc2FtZSBmb3IKLy8vIGFsbCBhcHBsaWNhdGlvbnMgb2YgYSBtaXhpbi4gVG8gYWNoaWV2ZSB0aGlzLCB3ZSB1c2UgZ2xvYmFsIG5hbWluZyBmb3IKLy8vIG1peGlucyBmcm9tIHRoZSBzYW1lIG5hbWUgcG9vbCBhcyBmaWVsZHMgYW5kIGFkZCBhIGAkYCBhdCB0aGUgZW5kIHRvIGVuc3VyZQovLy8gdGhleSBkbyBub3QgY29sbGlkZSB3aXRoIG5vcm1hbCBmaWVsZCBuYW1lcy4gVGhlIGAkYCBzaWduIGlzIHR5cGljYWxseSB1c2VkCi8vLyBhcyBhIHNlcGFyYXRvciBiZXR3ZWVuIG1ldGhvZCBuYW1lcyBhbmQgYXJndW1lbnQgY291bnRzIGFuZCBkb2VzIG5vdCBhcHBlYXIKLy8vIGluIGdlbmVyYXRlZCBuYW1lcyB0aGVtc2VsdmVzLgpjbGFzcyBfTWl4aW5GaWVsZE5hbWluZ1Njb3BlIGV4dGVuZHMgX0ZpZWxkTmFtaW5nU2NvcGUgewogIEBvdmVycmlkZQogIGludCBnZXQgX2xvY2FsRmllbGROYW1lQ291bnRlciA9PiByZWdpc3RyeS5nbG9iYWxDb3VudDsKICBAb3ZlcnJpZGUKICB2b2lkIHNldCBfbG9jYWxGaWVsZE5hbWVDb3VudGVyKGludCB2YWwpIHsKICAgIHJlZ2lzdHJ5Lmdsb2JhbENvdW50ID0gdmFsOwogIH0KCiAgQG92ZXJyaWRlCiAgTWFwPEVudGl0eSwganNBc3QuTmFtZT4gZ2V0IG5hbWVzID0+IHJlZ2lzdHJ5Lmdsb2JhbE5hbWVzOwoKICBfTWl4aW5GaWVsZE5hbWluZ1Njb3BlLm1peGluKENsYXNzRW50aXR5IGNscywgX0ZpZWxkTmFtaW5nUmVnaXN0cnkgcmVnaXN0cnkpCiAgICAgIDogc3VwZXIucm9vdFNjb3BlKGNscywgcmVnaXN0cnkpOwoKICBfTWl4aW5GaWVsZE5hbWluZ1Njb3BlLm1peGVkSW4oQ2xhc3NFbnRpdHkgY29udGFpbmVyLAogICAgICBfRmllbGROYW1pbmdTY29wZSBzdXBlclNjb3BlLCBfRmllbGROYW1pbmdSZWdpc3RyeSByZWdpc3RyeSkKICAgICAgOiBzdXBlci5pbmhlcml0KGNvbnRhaW5lciwgc3VwZXJTY29wZSwgcmVnaXN0cnkpOwoKICBAb3ZlcnJpZGUKICBqc0FzdC5OYW1lIF9uZXh0TmFtZSgpIHsKICAgIGpzQXN0Lk5hbWUgcHJvcG9zZWQgPSBzdXBlci5fbmV4dE5hbWUoKTsKICAgIHJldHVybiBuZXcgQ29tcG91bmROYW1lKFtwcm9wb3NlZCwgTmFtZXIuX2xpdGVyYWxEb2xsYXJdKTsKICB9Cn0KCi8vLyBbQm94RmllbGRFbGVtZW50XSBmaWVsZHMgd29yayBkaWZmZXJlbnRseSBpbiB0aGF0IHRoZXkgZG8gbm90IGJlbG9uZyB0byBhbgovLy8gYWN0dWFsIGNsYXNzIGJ1dCBhbiBhbm9ueW1vdXMgYm94IGFzc29jaWF0ZWQgdG8gYSBbTG9jYWxdLiBBcyB0aGVyZSBpcyBubwovLy8gaW5oZXJpdGFuY2UgY2hhaW4sIHdlIGRvIG5vdCBuZWVkIHRvIGNvbXB1dGUgZmllbGRzIGEgcHJpb3JpIGJ1dCBjYW4gYXNzaWduCi8vLyBuYW1lcyBvbiB0aGUgZmx5LgpjbGFzcyBfQm94RmllbGROYW1pbmdTY29wZSBleHRlbmRzIF9GaWVsZE5hbWluZ1Njb3BlIHsKICBfQm94RmllbGROYW1pbmdTY29wZShMb2NhbCBib3gsIF9GaWVsZE5hbWluZ1JlZ2lzdHJ5IHJlZ2lzdHJ5KQogICAgICA6IHN1cGVyLnJvb3RTY29wZShib3gsIHJlZ2lzdHJ5KTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc0ZpZWxkKF8pID0+IHRydWU7CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgb3BlcmF0b3IgW10oRW50aXR5IGZpZWxkKSB7CiAgICBpZiAoIW5hbWVzLmNvbnRhaW5zS2V5KGZpZWxkKSkgYWRkKGZpZWxkKTsKICAgIHJldHVybiBuYW1lc1tmaWVsZF07CiAgfQp9CoDqAE5OPAEaATYqAUgyBU5NQEc0TQYBHSNIDTBQBgEoHQYRBAIBMwRNUEEdFQEwLAFNARcBPQEkAUxLTQwFUEgQIiVJTkw5KUJGF1EPTwgGAR0EAgFQTlFOUUwYBFErGiYaSicBOhkBS0FBAUhDQjctHQQBJkw1JwEkQA1EIEEPJ0lAE00RTQoIBgE1NkkIASMTBAFPG0oEAT0bHwFORQQBSCMrQgQBSAEpJEYRBAEbKgEkMxoEAUACAU9OS1BQUCM5DDoMLSAEAQw9AU8oAThDOAEMGy0/BAIBT05QFjdBKAEMIQEMKS8ZBAIBN3BhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvZmllbGRfbmFtaW5nX21peGluLmRhcnQ9c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfYmFja2VuZC9mcmVxdWVuY3lfbmFtZXIuZGFydJDSLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YganNfYmFja2VuZC5uYW1lcjsKCmNsYXNzIEZyZXF1ZW5jeUJhc2VkTmFtZXIgZXh0ZW5kcyBOYW1lcgogICAgd2l0aCBfTWluaWZpZWRGaWVsZE5hbWVyLCBfTWluaWZpZWRPbmVTaG90SW50ZXJjZXB0b3JOYW1lcgogICAgaW1wbGVtZW50cyBqc0FzdC5Ub2tlbkZpbmFsaXplciB7CiAgQG92ZXJyaWRlCiAgX0ZpZWxkTmFtaW5nUmVnaXN0cnkgZmllbGRSZWdpc3RyeTsKICBMaXN0PFRva2VuTmFtZT4gdG9rZW5zID0gbmV3IExpc3Q8VG9rZW5OYW1lPigpOwoKICBNYXA8TmFtaW5nU2NvcGUsIFRva2VuU2NvcGU+IF90b2tlblNjb3BlcyA9CiAgICAgIG5ldyBNYXBsZXQ8TmFtaW5nU2NvcGUsIFRva2VuU2NvcGU+KCk7CgogIC8vIFNvbWUgYmFzaWMgc2V0dGluZ3MgZm9yIHNtYWxsZXIgbmFtZXMKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGlzb2xhdGVOYW1lID0+ICdJJzsKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGlzb2xhdGVQcm9wZXJ0aWVzTmFtZSA9PiAncCc7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgc2hvdWxkTWluaWZ5ID0+IHRydWU7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZ2VuZXJpY0luc3RhbnRpYXRpb25QcmVmaXggPT4gcickSSc7CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgZ2V0IHN0YXRpY3NQcm9wZXJ0eU5hbWUgPT4KICAgICAgX3N0YXRpY3NQcm9wZXJ0eU5hbWUgPz89IGdldEZyZXNoTmFtZShpbnN0YW5jZVNjb3BlLCAnc3RhdGljJyk7CgogIEZyZXF1ZW5jeUJhc2VkTmFtZXIoCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwgUnVudGltZVR5cGVUYWdzIHJ0aVRhZ3MsIEZpeGVkTmFtZXMgZml4ZWROYW1lcykKICAgICAgOiBzdXBlcihjbG9zZWRXb3JsZCwgcnRpVGFncywgZml4ZWROYW1lcykgewogICAgZmllbGRSZWdpc3RyeSA9IG5ldyBfRmllbGROYW1pbmdSZWdpc3RyeSh0aGlzKTsKICB9CgogIFRva2VuU2NvcGUgbmV3U2NvcGVGb3IoTmFtaW5nU2NvcGUgc2NvcGUpIHsKICAgIGlmIChzY29wZSA9PSBpbnN0YW5jZVNjb3BlKSB7CiAgICAgIFNldDxTdHJpbmc+IGlsbGVnYWxOYW1lcyA9IG5ldyBTZXQ8U3RyaW5nPi5mcm9tKGpzUmVzZXJ2ZWQpOwogICAgICBmb3IgKFN0cmluZyBpbGxlZ2FsIGluIE1pbmlmeU5hbWVyLl9yZXNlcnZlZE5hdGl2ZVByb3BlcnRpZXMpIHsKICAgICAgICBpbGxlZ2FsTmFtZXMuYWRkKGlsbGVnYWwpOwogICAgICAgIGlmIChNaW5pZnlOYW1lci5faGFzQmFubmVkUHJlZml4KGlsbGVnYWwpKSB7CiAgICAgICAgICBpbGxlZ2FsTmFtZXMuYWRkKGlsbGVnYWwuc3Vic3RyaW5nKDEpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBUb2tlblNjb3BlKGlsbGVnYWxOYW1lcyk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IFRva2VuU2NvcGUoanNSZXNlcnZlZCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5OYW1lIGdldEZyZXNoTmFtZShOYW1pbmdTY29wZSBzY29wZSwgU3RyaW5nIHByb3Bvc2VkTmFtZSwKICAgICAge2Jvb2wgc2FuaXRpemVGb3JOYXRpdmVzOiBmYWxzZSwgYm9vbCBzYW5pdGl6ZUZvckFubm90YXRpb25zOiBmYWxzZX0pIHsKICAgIC8vIEdyYWIgdGhlIHNjb3BlIGZvciB0aGlzIHRva2VuCiAgICBUb2tlblNjb3BlIHRva2VuU2NvcGUgPQogICAgICAgIF90b2tlblNjb3Blcy5wdXRJZkFic2VudChzY29wZSwgKCkgPT4gbmV3U2NvcGVGb3Ioc2NvcGUpKTsKCiAgICAvLyBHZXQgdGhlIG5hbWUgdGhlIG5vcm1hbCBuYW1lciB3b3VsZCB1c2UgYXMgYSBrZXkuCiAgICBTdHJpbmcgcHJvcG9zZWQgPSBfZ2VuZXJhdGVGcmVzaFN0cmluZ0Zvck5hbWUocHJvcG9zZWROYW1lLCBzY29wZSwKICAgICAgICBzYW5pdGl6ZUZvck5hdGl2ZXM6IHNhbml0aXplRm9yTmF0aXZlcywKICAgICAgICBzYW5pdGl6ZUZvckFubm90YXRpb25zOiBzYW5pdGl6ZUZvckFubm90YXRpb25zKTsKCiAgICBUb2tlbk5hbWUgbmFtZSA9IG5ldyBUb2tlbk5hbWUodG9rZW5TY29wZSwgcHJvcG9zZWQpOwogICAgdG9rZW5zLmFkZChuYW1lKTsKICAgIHJldHVybiBuYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBpbnN0YW5jZUZpZWxkUHJvcGVydHlOYW1lKEZpZWxkRW50aXR5IGVsZW1lbnQpIHsKICAgIGpzQXN0Lk5hbWUgcHJvcG9zZWQgPSBfbWluaWZpZWRJbnN0YW5jZUZpZWxkUHJvcGVydHlOYW1lKGVsZW1lbnQpOwogICAgaWYgKHByb3Bvc2VkICE9IG51bGwpIHsKICAgICAgcmV0dXJuIHByb3Bvc2VkOwogICAgfQogICAgcmV0dXJuIHN1cGVyLmluc3RhbmNlRmllbGRQcm9wZXJ0eU5hbWUoZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZpbmFsaXplVG9rZW5zKCkgewogICAgaW50IGNvbXBhcmVSZWZlcmVuY2VDb3VudChUb2tlbk5hbWUgYSwgVG9rZW5OYW1lIGIpIHsKICAgICAgaW50IHJlc3VsdCA9IGIuX3JjIC0gYS5fcmM7CiAgICAgIGlmIChyZXN1bHQgPT0gMCkgcmVzdWx0ID0gYS5rZXkuY29tcGFyZVRvKGIua2V5KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICBMaXN0PFRva2VuTmFtZT4gdXNlZE5hbWVzID0KICAgICAgICB0b2tlbnMud2hlcmUoKFRva2VuTmFtZSBhKSA9PiBhLl9yYyA+IDApLnRvTGlzdCgpOwogICAgdXNlZE5hbWVzLnNvcnQoY29tcGFyZVJlZmVyZW5jZUNvdW50KTsKICAgIHVzZWROYW1lcy5mb3JFYWNoKChUb2tlbk5hbWUgdG9rZW4pID0+IHRva2VuLmZpbmFsaXplKCkpOwogIH0KfQoKY2xhc3MgVG9rZW5TY29wZSB7CiAgTGlzdDxpbnQ+IF9uZXh0TmFtZSA9IFskYV07CiAgZmluYWwgU2V0PFN0cmluZz4gaWxsZWdhbE5hbWVzOwoKICBUb2tlblNjb3BlKFt0aGlzLmlsbGVnYWxOYW1lcyA9IGNvbnN0IEltbXV0YWJsZUVtcHR5U2V0KCldKTsKCiAgLy8vIEluY3JlbWVudHMgdGhlIGxldHRlciBhdCBbcG9zXSBpbiB0aGUgY3VycmVudCBuYW1lLiBBbHNvIHRha2VzIGNhcmUgb2YKICAvLy8gb3ZlcmZsb3dzIHRvIHRoZSBsZWZ0LiBSZXR1cm5zIHRoZSBjYXJyeSBiaXQsIGkuZS4sIGl0IHJldHVybnMgYHRydWVgCiAgLy8vIGlmIGFsbCBwb3NpdGlvbnMgdG8gdGhlIGxlZnQgaGF2ZSB3cmFwcGVkIGFyb3VuZC4KICAvLy8KICAvLy8gSWYgW19uZXh0TmFtZV0gaXMgaW5pdGlhbGx5ICdhJywgdGhpcyB3aWxsIGdlbmVyYXRlIHRoZSBzZXF1ZW5jZQogIC8vLwogIC8vLyBbYS16QS1aXQogIC8vLyBbYS16QS1aXVtfMC05YS16QS1aXQogIC8vLyBbYS16QS1aXVtfMC05YS16QS1aXVtfMC05YS16QS1aXQogIC8vLyAuLi4KICBib29sIF9pbmNyZW1lbnRQb3NpdGlvbihpbnQgcG9zKSB7CiAgICBib29sIG92ZXJmbG93ID0gZmFsc2U7CiAgICBpZiAocG9zIDwgMCkgcmV0dXJuIHRydWU7CiAgICBpbnQgdmFsdWUgPSBfbmV4dE5hbWVbcG9zXTsKICAgIGlmICh2YWx1ZSA9PSAkXykgewogICAgICB2YWx1ZSA9ICQwOwogICAgfSBlbHNlIGlmICh2YWx1ZSA9PSAkOSkgewogICAgICB2YWx1ZSA9ICRhOwogICAgfSBlbHNlIGlmICh2YWx1ZSA9PSAkeikgewogICAgICB2YWx1ZSA9ICRBOwogICAgfSBlbHNlIGlmICh2YWx1ZSA9PSAkWikgewogICAgICBvdmVyZmxvdyA9IF9pbmNyZW1lbnRQb3NpdGlvbihwb3MgLSAxKTsKICAgICAgdmFsdWUgPSAocG9zID4gMCkgPyAkXyA6ICRhOwogICAgfSBlbHNlIHsKICAgICAgdmFsdWUrKzsKICAgIH0KICAgIF9uZXh0TmFtZVtwb3NdID0gdmFsdWU7CiAgICByZXR1cm4gb3ZlcmZsb3c7CiAgfQoKICBfaW5jcmVtZW50TmFtZSgpIHsKICAgIGlmIChfaW5jcmVtZW50UG9zaXRpb24oX25leHROYW1lLmxlbmd0aCAtIDEpKSB7CiAgICAgIF9uZXh0TmFtZS5hZGQoJF8pOwogICAgfQogIH0KCiAgU3RyaW5nIGdldE5leHROYW1lKCkgewogICAgU3RyaW5nIHByb3Bvc2FsOwogICAgZG8gewogICAgICBwcm9wb3NhbCA9IG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhfbmV4dE5hbWUpOwogICAgICBfaW5jcmVtZW50TmFtZSgpOwogICAgfSB3aGlsZSAoTWluaWZ5TmFtZXIuX2hhc0Jhbm5lZFByZWZpeChwcm9wb3NhbCkgfHwKICAgICAgICBpbGxlZ2FsTmFtZXMuY29udGFpbnMocHJvcG9zYWwpKTsKCiAgICByZXR1cm4gcHJvcG9zYWw7CiAgfQp9CoCUAE5OPAEaASg/JgwmMgEuLQErDCEMKwwhAQwyAQwoRgEXUDI0BAEuIkNGIzUyCggrDSkGBAEMQk4lHEMBOUcwOQE6FhEEAQw+RxwXBjUEAQwaOiI4FQYBIDsrPgQCARMeIgE/AU1MOAZHBg8bJwolGx4gFxIeEh4SHi4jDQ8GHBUEARU0GQYEARkVCTYYNyoBFQQCATRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2ZyZXF1ZW5jeV9uYW1lci5kYXJ0OnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2JhY2tlbmQvbWluaWZ5X25hbWVyLmRhcnS4ri8vIENvcHlyaWdodCAoYykgMjAxMSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGpzX2JhY2tlbmQubmFtZXI7CgovLy8gQXNzaWducyBKYXZhU2NyaXB0IGlkZW50aWZpZXJzIHRvIERhcnQgdmFyaWFibGVzLCBjbGFzcy1uYW1lcyBhbmQgbWVtYmVycy4KY2xhc3MgTWluaWZ5TmFtZXIgZXh0ZW5kcyBOYW1lcgogICAgd2l0aAogICAgICAgIF9NaW5pZmllZEZpZWxkTmFtZXIsCiAgICAgICAgX01pbmlmeUNvbnN0cnVjdG9yQm9keU5hbWVyLAogICAgICAgIF9NaW5pZmllZE9uZVNob3RJbnRlcmNlcHRvck5hbWVyIHsKICBNaW5pZnlOYW1lcigKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLCBSdW50aW1lVHlwZVRhZ3MgcnRpVGFncywgRml4ZWROYW1lcyBmaXhlZE5hbWVzKQogICAgICA6IHN1cGVyKGNsb3NlZFdvcmxkLCBydGlUYWdzLCBmaXhlZE5hbWVzKSB7CiAgICByZXNlcnZlQmFja2VuZE5hbWVzKCk7CiAgICBmaWVsZFJlZ2lzdHJ5ID0gbmV3IF9GaWVsZE5hbWluZ1JlZ2lzdHJ5KHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgX0ZpZWxkTmFtaW5nUmVnaXN0cnkgZmllbGRSZWdpc3RyeTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBpc29sYXRlTmFtZSA9PiAnSSc7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBpc29sYXRlUHJvcGVydGllc05hbWUgPT4gJ3AnOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IHNob3VsZE1pbmlmeSA9PiB0cnVlOwogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZ2VuZXJpY0luc3RhbnRpYXRpb25QcmVmaXggPT4gcickSSc7CgogIGZpbmFsIEFMUEhBQkVUX0NIQVJBQ1RFUlMgPSA1MjsgLy8gYS16QS1aLgogIGZpbmFsIEFMUEhBTlVNRVJJQ19DSEFSQUNURVJTID0gNjI7IC8vIGEtekEtWjAtOS4KCiAgLy8vIFlvdSBjYW4gcGFzcyBhbiBpbnZhbGlkIGlkZW50aWZpZXIgdG8gdGhpcyBhbmQgdW5saWtlIGl0cyBub24tbWluaWZ5aW5nCiAgLy8vIGNvdW50ZXJwYXJ0IGl0IHdpbGwgbmV2ZXIgcmV0dXJuIHRoZSBwcm9wb3NlZE5hbWUgYXMgdGhlIG5ldyBmcmVzaCBuYW1lLgogIC8vLwogIC8vLyBbc2FuaXRpemVGb3JOYXRpdmVzXSBhbmQgW3Nhbml0aXplRm9yQW5ub3RhdGlvbnNdIGFyZSBpZ25vcmVkIGJlY2F1c2UgdGhlCiAgLy8vIG1pbmlmaWVkIG5hbWVzIHdpbGwgYWx3YXlzIGF2b2lkIGNsYXNoaW5nIHdpdGggYW5ub3RhdGVkIG5hbWVzIG9yIG5hdGl2ZXMuCiAgQG92ZXJyaWRlCiAgU3RyaW5nIF9nZW5lcmF0ZUZyZXNoU3RyaW5nRm9yTmFtZShTdHJpbmcgcHJvcG9zZWROYW1lLCBOYW1pbmdTY29wZSBzY29wZSwKICAgICAge2Jvb2wgc2FuaXRpemVGb3JOYXRpdmVzOiBmYWxzZSwgYm9vbCBzYW5pdGl6ZUZvckFubm90YXRpb25zOiBmYWxzZX0pIHsKICAgIFN0cmluZyBmcmVzaE5hbWU7CiAgICBTdHJpbmcgc3VnZ2VzdGlvbiA9IHNjb3BlLnN1Z2dlc3ROYW1lKHByb3Bvc2VkTmFtZSk7CiAgICBpZiAoc3VnZ2VzdGlvbiAhPSBudWxsICYmIHNjb3BlLmlzVW51c2VkKHN1Z2dlc3Rpb24pKSB7CiAgICAgIGZyZXNoTmFtZSA9IHN1Z2dlc3Rpb247CiAgICB9IGVsc2UgewogICAgICBmcmVzaE5hbWUgPSBfZ2V0VW51c2VkTmFtZShwcm9wb3NlZE5hbWUsIHNjb3BlKTsKICAgIH0KICAgIHNjb3BlLnJlZ2lzdGVyVXNlKGZyZXNoTmFtZSk7CiAgICByZXR1cm4gZnJlc2hOYW1lOwogIH0KCiAgLy8gRnJvbSBpc3N1ZSA3NTU0LiAgVGhlc2Ugc2hvdWxkIG5vdCBiZSB1c2VkIG9uIG9iamVjdHMgKGFzIGluc3RhbmNlCiAgLy8gdmFyaWFibGVzKSBiZWNhdXNlIHRoZXkgY2xhc2ggd2l0aCBuYW1lcyBmcm9tIHRoZSBET00uIEhvd2V2ZXIsIGl0IGlzCiAgLy8gT0sgdG8gdXNlIHRoZW0gYXMgZmllbGRzLCBhcyB3ZSBvbmx5IGFjY2VzcyBmaWVsZHMgZGlyZWN0bHkgaWYgd2Uga25vdwogIC8vIHRoZSByZWNlaXZlciB0eXBlLgogIHN0YXRpYyBjb25zdCBMaXN0PFN0cmluZz4gX3Jlc2VydmVkTmF0aXZlUHJvcGVydGllcyA9IGNvbnN0IDxTdHJpbmc+WwogICAgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ3InLCAneCcsICd5JywgJ3onLCAnUScsCiAgICAvLyAyLWxldHRlcjoKICAgICdjaCcsICdjeCcsICdjeScsICdkYicsICdkeCcsICdkeScsICdmcicsICdmeCcsICdmeScsICdnbycsICdpZCcsICdrMScsCiAgICAnazInLCAnazMnLCAnazQnLCAncjEnLCAncjInLCAncngnLCAncnknLCAneDEnLCAneDInLCAneTEnLCAneTInLAogICAgLy8gMy1sZXR0ZXI6CiAgICAnYWRkJywgJ2FsbCcsICdhbHQnLCAnYXJjJywgJ0NDVycsICdjbXAnLCAnZGlyJywgJ2VuZCcsICdnZXQnLCAnaW4xJywKICAgICdpbjInLCAnSU5UJywgJ2tleScsICdsb2cnLCAnbG93JywgJ20xMScsICdtMTInLCAnbTEzJywgJ20xNCcsICdtMjEnLAogICAgJ20yMicsICdtMjMnLCAnbTI0JywgJ20zMScsICdtMzInLCAnbTMzJywgJ20zNCcsICdtNDEnLCAnbTQyJywgJ200MycsCiAgICAnbTQ0JywgJ21heCcsICdtaW4nLCAnbm93JywgJ09ORScsICdwdXQnLCAncmVkJywgJ3JlbCcsICdyZXYnLCAnUkdCJywKICAgICdzZHAnLCAnc2V0JywgJ3NyYycsICd0YWcnLCAndG9wJywgJ3VpZCcsICd1cmknLCAndXJsJywgJ1VSTCcsCiAgICAvLyA0LWxldHRlcjoKICAgICdhYmJyJywgJ2F0b2InLCAnQXR0cicsICdheGVzJywgJ2F4aXMnLCAnYmFjaycsICdCQUNLJywgJ2JldGEnLCAnYmlhcycsCiAgICAnQmxvYicsICdibHVlJywgJ2JsdXInLCAnQkxVUicsICdib2R5JywgJ0JPT0wnLCAnQk9USCcsICdidG9hJywgJ0JZVEUnLAogICAgJ2NpdGUnLCAnY2xpcCcsICdjb2RlJywgJ2NvbHMnLCAnY3VlcycsICdkYXRhJywgJ0RFQ1InLCAnRE9ORScsICdmYWNlJywKICAgICdmaWxlJywgJ0ZpbGUnLCAnZmlsbCcsICdmaW5kJywgJ2ZvbnQnLCAnZm9ybScsICdnYWluJywgJ2hhc2gnLCAnaGVhZCcsCiAgICAnaGlnaCcsICdoaW50JywgJ2hvc3QnLCAnaHJlZicsICdIUlRGJywgJ0lETEUnLCAnSU5DUicsICdpbmZvJywgJ0lOSVQnLAogICAgJ2lzSWQnLCAnaXRlbScsICdLRUVQJywgJ2tpbmQnLCAna25lZScsICdsYW5nJywgJ2xlZnQnLCAnTEVTUycsICdsaW5lJywKICAgICdsaW5rJywgJ2xpc3QnLCAnbG9hZCcsICdsb29wJywgJ21vZGUnLCAnbmFtZScsICdOb2RlJywgJ05vbmUnLCAnTk9ORScsCiAgICAnb25seScsICdvcGVuJywgJ09QRU4nLCAncGluZycsICdwbGF5JywgJ3BvcnQnLCAncmVjdCcsICdSZWN0JywgJ3JlZlgnLAogICAgJ3JlZlknLCAnUkdCQScsICdyb290JywgJ3Jvd3MnLCAnc2F2ZScsICdzZWVkJywgJ3NlZWsnLCAnc2VsZicsICdzZW5kJywKICAgICdzaG93JywgJ1NJTkUnLCAnc2l6ZScsICdzcGFuJywgJ3N0YXQnLCAnc3RlcCcsICdzdG9wJywgJ3RhZ3MnLCAndGV4dCcsCiAgICAnVGV4dCcsICd0aW1lJywgJ3R5cGUnLCAndmlldycsICd3YXJuJywgJ3dyYXAnLCAnWkVSTycKICBdOwoKICB2b2lkIHJlc2VydmVCYWNrZW5kTmFtZXMoKSB7CiAgICBmb3IgKFN0cmluZyBuYW1lIGluIF9yZXNlcnZlZE5hdGl2ZVByb3BlcnRpZXMpIHsKICAgICAgaWYgKG5hbWUubGVuZ3RoIDwgMikgewogICAgICAgIC8vIEVuc3VyZSB0aGUgMS1sZXR0ZXIgbmFtZXMgYXJlIGRpc2FtYmlndWF0ZWQgdG8gdGhlIHNhbWUgbmFtZS4KICAgICAgICBTdHJpbmcgZGlzYW1iaWd1YXRlZE5hbWUgPSBuYW1lOwogICAgICAgIHJlc2VydmVQdWJsaWNNZW1iZXJOYW1lKG5hbWUsIGRpc2FtYmlndWF0ZWROYW1lKTsKICAgICAgfQogICAgICBpbnN0YW5jZVNjb3BlLnJlZ2lzdGVyVXNlKG5hbWUpOwogICAgICAvLyBHZXR0ZXIgYW5kIHNldHRlciBuYW1lcyBhcmUgYXV0b2dlbmVyYXRlZCBieSBwcmVwZW5kaW5nICdnJyBhbmQgJ3MnIHRvCiAgICAgIC8vIGZpZWxkIG5hbWVzLiAgVGhlcmVmb3JlIHRoZXJlIGFyZSBzb21lIGZpZWxkIG5hbWVzIHdlIGRvbid0IHdhbnQgdG8KICAgICAgLy8gdXNlLiAgSXQgaXMgaW1wbGljaXQgaW4gdGhlIG5leHQgbGluZSB0aGF0IHRoZSBiYW5uZWQgcHJlZml4IGlzCiAgICAgIC8vIG9ubHkgb25lIGNoYXJhY3Rlci4KICAgICAgaWYgKF9oYXNCYW5uZWRQcmVmaXgobmFtZSkpIHsKICAgICAgICBpbnN0YW5jZVNjb3BlLnJlZ2lzdGVyVXNlKG5hbWUuc3Vic3RyaW5nKDEpKTsKICAgICAgfQogICAgfQoKICAgIC8vIFRoZXNlIHBvcHVsYXIgbmFtZXMgYXJlIHByZXNlbnQgaW4gbW9zdCBwcm9ncmFtcyBhbmQgZGVzZXJ2ZQogICAgLy8gc2luZ2xlIGNoYXJhY3RlciBtaW5pZmllZCBuYW1lcy4gIFdlIGNvdWxkIGRldGVybWluZSB0aGUgcG9wdWxhciBuYW1lcwogICAgLy8gaW5kaXZpZHVhbGx5IHBlciBwcm9ncmFtLCBidXQgdGhhdCB3b3VsZCBtZWFuIHRoYXQgdGhlIG91dHB1dCBvZiB0aGUKICAgIC8vIG1pbmlmaWVyIHdhcyBsZXNzIHN0YWJsZSBmcm9tIHZlcnNpb24gdG8gdmVyc2lvbiBvZiB0aGUgcHJvZ3JhbSBiZWluZwogICAgLy8gbWluaWZpZWQuCiAgICBfcG9wdWxhdGVTdWdnZXN0ZWROYW1lcyhpbnN0YW5jZVNjb3BlLCBjb25zdCA8U3RyaW5nPlsKICAgICAgcickYWRkJywKICAgICAgcidhZGQkMScsCiAgICAgIHInJGFuZCcsCiAgICAgIHInJG9yJywKICAgICAgcidjdXJyZW50JywKICAgICAgcickc2hyJywKICAgICAgcickZXEnLAogICAgICByJyRuZScsCiAgICAgIHInJGluZGV4JywKICAgICAgcickaW5kZXhTZXQnLAogICAgICByJyR4b3InLAogICAgICByJ2Nsb25lJDAnLAogICAgICByJ2l0ZXJhdG9yJywKICAgICAgcidsZW5ndGgnLAogICAgICByJyRsdCcsCiAgICAgIHInJGd0JywKICAgICAgcickbGUnLAogICAgICByJyRnZScsCiAgICAgIHInbW92ZU5leHQkMCcsCiAgICAgIHInbm9kZScsCiAgICAgIHInb24nLAogICAgICByJyRuZWdhdGUnLAogICAgICByJ3B1c2gnLAogICAgICByJ3NlbGYnLAogICAgICByJ3N0YXJ0JywKICAgICAgcid0YXJnZXQnLAogICAgICByJyRzaGwnLAogICAgICByJ3ZhbHVlJywKICAgICAgcid3aWR0aCcsCiAgICAgIHInc3R5bGUnLAogICAgICByJ25vU3VjaE1ldGhvZCQxJywKICAgICAgcickbXVsJywKICAgICAgcickZGl2JywKICAgICAgcickc3ViJywKICAgICAgcickbm90JywKICAgICAgcickbW9kJywKICAgICAgcickdGRpdicsCiAgICAgIHIndG9TdHJpbmckMCcKICAgIF0pOwoKICAgIF9wb3B1bGF0ZVN1Z2dlc3RlZE5hbWVzKGdsb2JhbFNjb3BlLCBjb25zdCA8U3RyaW5nPlsKICAgICAgcidPYmplY3QnLAogICAgICAnd3JhcEV4Y2VwdGlvbicsCiAgICAgIHInJGVxJywKICAgICAgcidTJywKICAgICAgcidpb29yZScsCiAgICAgIHInVW5zdXBwb3J0ZWRFcnJvciQnLAogICAgICByJ2xlbmd0aCcsCiAgICAgIHInJHN1YicsCiAgICAgIHInJGFkZCcsCiAgICAgIHInJGd0JywKICAgICAgcickZ2UnLAogICAgICByJyRsdCcsCiAgICAgIHInJGxlJywKICAgICAgcidhZGQnLAogICAgICByJ2lhZScsCiAgICAgIHInQXJndW1lbnRFcnJvciQnLAogICAgICByJ0JvdW5kQ2xvc3VyZScsCiAgICAgIHInQ2xvc3VyZScsCiAgICAgIHInU3RhdGVFcnJvciQnLAogICAgICByJ2dldEludGVyY2VwdG9yJCcsCiAgICAgIHInbWF4JywKICAgICAgcickbXVsJywKICAgICAgcidNYXAnLAogICAgICByJ0tleV9LZXknLAogICAgICByJyRkaXYnLAogICAgICByJ0xpc3RfTGlzdCRmcm9tJywKICAgICAgcidMaW5rZWRIYXNoTWFwX0xpbmtlZEhhc2hNYXAkX2VtcHR5JywKICAgICAgcidMaW5rZWRIYXNoTWFwX0xpbmtlZEhhc2hNYXAkX2xpdGVyYWwnLAogICAgICByJ21pbicsCiAgICAgIHInUmFuZ2VFcnJvciR2YWx1ZScsCiAgICAgIHInSlNTdHJpbmcnLAogICAgICByJ0pTTnVtYmVyJywKICAgICAgcidKU0FycmF5JywKICAgICAgcidjcmVhdGVJbnZvY2F0aW9uTWlycm9yJywKICAgICAgcidTdHJpbmcnLAogICAgICByJ3NldFJ1bnRpbWVUeXBlSW5mbycsCiAgICAgIHInY3JlYXRlUnVudGltZVR5cGUnCiAgICBdKTsKICB9CgogIHZvaWQgX3BvcHVsYXRlU3VnZ2VzdGVkTmFtZXMoTmFtaW5nU2NvcGUgc2NvcGUsIExpc3Q8U3RyaW5nPiBzdWdnZXN0aW9ucykgewogICAgaW50IGMgPSAkYSAtIDE7CiAgICBTdHJpbmcgbGV0dGVyOwogICAgZm9yIChTdHJpbmcgbmFtZSBpbiBzdWdnZXN0aW9ucykgewogICAgICBkbyB7CiAgICAgICAgYXNzZXJ0KGMgIT0gJFopOwogICAgICAgIGMgPSAoYyA9PSAkeikgPyAkQSA6IGMgKyAxOwogICAgICAgIGxldHRlciA9IG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhbY10pOwogICAgICB9IHdoaWxlIChfaGFzQmFubmVkUHJlZml4KGxldHRlcikgfHwgc2NvcGUuaXNVc2VkKGxldHRlcikpOwogICAgICBhc3NlcnQoIXNjb3BlLmhhc1N1Z2dlc3Rpb24obmFtZSkpOwogICAgICBzY29wZS5hZGRTdWdnZXN0aW9uKG5hbWUsIGxldHRlcik7CiAgICB9CiAgfQoKICAvLyBUaGlzIGdldHMgYSBtaW5pZmllZCBuYW1lIGJhc2VkIG9uIGEgaGFzaCBvZiB0aGUgcHJvcG9zZWQgbmFtZS4gIFRoaXMKICAvLyBpcyBzbGlnaHRseSBsZXNzIGVmZmljaWVudCB0aGFuIGp1c3QgZ2V0dGluZyB0aGUgbmV4dCBuYW1lIGluIGEgc2VyaWVzLAogIC8vIGJ1dCBpdCBtZWFucyB0aGF0IHNtYWxsIGNoYW5nZXMgaW4gdGhlIGlucHV0IHByb2dyYW0gd2lsbCBnaXZlIHNtYWxsaXNoCiAgLy8gY2hhbmdlcyBpbiB0aGUgb3V0cHV0LCB3aGljaCBjYW4gYmUgdXNlZnVsIGZvciBkaWZmaW5nIGV0Yy4KICBTdHJpbmcgX2dldFVudXNlZE5hbWUoU3RyaW5nIHByb3Bvc2VkTmFtZSwgTmFtaW5nU2NvcGUgc2NvcGUpIHsKICAgIGludCBoYXNoID0gX2NhbGN1bGF0ZUhhc2gocHJvcG9zZWROYW1lKTsKICAgIC8vIEF2b2lkIHZlcnkgc21hbGwgaGFzaGVzIHRoYXQgd29uJ3QgdHJ5IG1hbnkgbmFtZXMuCiAgICBoYXNoID0gaGFzaCA8IDEwMDAgPyBoYXNoICogMzE0MTU5IDogaGFzaDsgLy8gWWVzLCBpdCdzIHByaW1lLgoKICAgIC8vIFRyeSBvdGhlciBuLWNoYXJhY3RlciBuYW1lcyBiYXNlZCBvbiB0aGUgaGFzaC4gIFdlIHRyeSBvbmUgdG8gdGhyZWUKICAgIC8vIGNoYXJhY3RlciBpZGVudGlmaWVycy4gIEZvciBlYWNoIGxlbmd0aCB3ZSB0cnkgYXJvdW5kIDEwIGRpZmZlcmVudCBuYW1lcwogICAgLy8gaW4gYSBwcmVkaWN0YWJsZSBvcmRlciBkZXRlcm1pbmVkIGJ5IHRoZSBwcm9wb3NlZCBuYW1lLiAgVGhpcyBpcyBpbiBvcmRlcgogICAgLy8gdG8gbWFrZSB0aGUgcmVuYW1lciBzdGFibGU6IHNtYWxsIGNoYW5nZXMgaW4gdGhlIGlucHV0IHNob3VsZCBub3JuYWxseQogICAgLy8gcmVzdWx0IGluIHJlbGF0aXZlbHkgc21hbGwgY2hhbmdlcyBpbiB0aGUgb3V0cHV0LgogICAgZm9yIChpbnQgbiA9IDE7IG4gPD0gMzsgbisrKSB7CiAgICAgIGludCBoID0gaGFzaDsKICAgICAgd2hpbGUgKGggPiAxMCkgewogICAgICAgIExpc3Q8aW50PiBjb2RlcyA9IDxpbnQ+W19sZXR0ZXJOdW1iZXIoaCldOwogICAgICAgIGludCBoMiA9IGggfi8gQUxQSEFCRVRfQ0hBUkFDVEVSUzsKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IG47IGkrKykgewogICAgICAgICAgY29kZXMuYWRkKF9hbHBoYU51bWVyaWNOdW1iZXIoaDIpKTsKICAgICAgICAgIGgyIH4vPSBBTFBIQU5VTUVSSUNfQ0hBUkFDVEVSUzsKICAgICAgICB9CiAgICAgICAgZmluYWwgY2FuZGlkYXRlID0gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGNvZGVzKTsKICAgICAgICBpZiAoc2NvcGUuaXNVbnVzZWQoY2FuZGlkYXRlKSAmJgogICAgICAgICAgICAhanNSZXNlcnZlZC5jb250YWlucyhjYW5kaWRhdGUpICYmCiAgICAgICAgICAgICFfaGFzQmFubmVkUHJlZml4KGNhbmRpZGF0ZSkgJiYKICAgICAgICAgICAgKG4gIT0gMSB8fCBzY29wZS5pc1N1Z2dlc3Rpb24oY2FuZGlkYXRlKSkpIHsKICAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7CiAgICAgICAgfQogICAgICAgIC8vIFRyeSBhZ2FpbiB3aXRoIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGhhc2guICBBZnRlciBhcm91bmQgMTAgdHVybnMKICAgICAgICAvLyBhcm91bmQgdGhpcyBsb29wIGggaXMgemVybyBhbmQgd2UgdHJ5IGEgbG9uZ2VyIG5hbWUuCiAgICAgICAgaCB+Lz0gNzsKICAgICAgfQogICAgfQogICAgcmV0dXJuIF9iYWROYW1lKGhhc2gsIHNjb3BlKTsKICB9CgogIC8vLyBJbnN0YW5jZSBtZW1iZXJzIHN0YXJ0aW5nIHdpdGggZyBhbmQgcyBhcmUgcmVzZXJ2ZWQgZm9yIGdldHRlcnMgYW5kCiAgLy8vIHNldHRlcnMuCiAgc3RhdGljIGJvb2wgX2hhc0Jhbm5lZFByZWZpeChTdHJpbmcgbmFtZSkgewogICAgaW50IGNvZGUgPSBuYW1lLmNvZGVVbml0QXQoMCk7CiAgICByZXR1cm4gY29kZSA9PSAkZyB8fCBjb2RlID09ICRzOwogIH0KCiAgaW50IF9jYWxjdWxhdGVIYXNoKFN0cmluZyBuYW1lKSB7CiAgICBpbnQgaCA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspIHsKICAgICAgaCArPSBuYW1lLmNvZGVVbml0QXQoaSk7CiAgICAgIGggJj0gMHhmZmZmZmZmZjsKICAgICAgaCArPSBoIDw8IDEwOwogICAgICBoICY9IDB4ZmZmZmZmZmY7CiAgICAgIGggXj0gaCA+PiA2OwogICAgICBoICY9IDB4ZmZmZmZmZmY7CiAgICB9CiAgICByZXR1cm4gaDsKICB9CgogIC8vLyBSZW1lbWJlciBiYWQgaGFzaGVzIHRvIGF2b2lkIHVzaW5nIGEgdGhlIHNhbWUgY2hhcmFjdGVyIHdpdGggbG9uZyBudW1iZXJzCiAgLy8vIGZvciBmcmVxdWVudCBoYXNoZXMuIEZvciBleGFtcGxlLCBgY2xvc3VyZWAgaXMgYSB2ZXJ5IGNvbW1vbiBuYW1lLgogIE1hcDxpbnQsIGludD4gX2JhZE5hbWVzID0gbmV3IE1hcDxpbnQsIGludD4oKTsKCiAgLy8vIElmIHdlIGNhbid0IGZpbmQgYSBoYXNoIGJhc2VkIG5hbWUgaW4gdGhlIHRocmVlLWxldHRlciBzcGFjZSwgdGhlbiBiYXNlCiAgLy8vIHRoZSBuYW1lIG9uIGEgbGV0dGVyIGFuZCBhIGNvdW50ZXIuCiAgU3RyaW5nIF9iYWROYW1lKGludCBoYXNoLCBOYW1pbmdTY29wZSBzY29wZSkgewogICAgaW50IGNvdW50ID0gX2JhZE5hbWVzLnB1dElmQWJzZW50KGhhc2gsICgpID0+IDApOwogICAgU3RyaW5nIHN0YXJ0TGV0dGVyID0KICAgICAgICBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoW19sZXR0ZXJOdW1iZXIoaGFzaCArIGNvdW50KV0pOwogICAgX2JhZE5hbWVzW2hhc2hdID0gY291bnQgKyAxOwogICAgU3RyaW5nIG5hbWU7CiAgICBpbnQgaSA9IDA7CiAgICBkbyB7CiAgICAgIG5hbWUgPSAiJHN0YXJ0TGV0dGVyJHtpKyt9IjsKICAgIH0gd2hpbGUgKHNjb3BlLmlzVXNlZChuYW1lKSk7CiAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciBiYW5uZWQgcHJlZml4IGJlY2F1c2UgdGhlIG5hbWUgaXMgaW4gdGhlIGZvcm0KICAgIC8vIHhubm4sIHdoZXJlIG5ubiBpcyBhIG51bWJlci4gIFRoZXJlIGNhbiBiZSBubyBnZXR0ZXIgb3Igc2V0dGVyIGNhbGxlZAogICAgLy8gZ25ubiBzaW5jZSB0aGF0IHdvdWxkIGltcGx5IGEgbnVtZXJpYyBmaWVsZCBuYW1lLgogICAgcmV0dXJuIG5hbWU7CiAgfQoKICBpbnQgX2xldHRlck51bWJlcihpbnQgeCkgewogICAgaWYgKHggPj0gQUxQSEFCRVRfQ0hBUkFDVEVSUykgeCAlPSBBTFBIQUJFVF9DSEFSQUNURVJTOwogICAgaWYgKHggPCAyNikgcmV0dXJuICRhICsgeDsKICAgIHJldHVybiAkQSArIHggLSAyNjsKICB9CgogIGludCBfYWxwaGFOdW1lcmljTnVtYmVyKGludCB4KSB7CiAgICBpZiAoeCA+PSBBTFBIQU5VTUVSSUNfQ0hBUkFDVEVSUykgeCAlPSBBTFBIQU5VTUVSSUNfQ0hBUkFDVEVSUzsKICAgIGlmICh4IDwgMjYpIHJldHVybiAkYSArIHg7CiAgICBpZiAoeCA8IDUyKSByZXR1cm4gJEEgKyB4IC0gMjY7CiAgICByZXR1cm4gJDAgKyB4IC0gNTI7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5OYW1lIGluc3RhbmNlRmllbGRQcm9wZXJ0eU5hbWUoRmllbGRFbnRpdHkgZWxlbWVudCkgewogICAganNBc3QuTmFtZSBwcm9wb3NlZCA9IF9taW5pZmllZEluc3RhbmNlRmllbGRQcm9wZXJ0eU5hbWUoZWxlbWVudCk7CiAgICBpZiAocHJvcG9zZWQgIT0gbnVsbCkgewogICAgICByZXR1cm4gcHJvcG9zZWQ7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuaW5zdGFuY2VGaWVsZFByb3BlcnR5TmFtZShlbGVtZW50KTsKICB9Cn0KCi8vLyBJbXBsZW1lbnRzIG5hbWluZyBmb3IgY29uc3RydWN0b3IgYm9kaWVzLgovLy8KLy8vIENvbnN0cnVjdG9yIGJvZGllcyBhcmUgb25seSBjYWxsZWQgaW4gc2V0dGluZ3Mgd2hlcmUgdGhlIHRhcmdldCBpcwovLy8gc3RhdGljYWxseSBrbm93bi4gVGhlcmVmb3JlLCB3ZSBjYW4gc2hhcmUgdGhlaXIgbmFtZXMgYmV0d2VlbiBjbGFzc2VzLgovLy8gSG93ZXZlciwgdG8gc3VwcG9ydCBjYWxsaW5nIHRoZSBjb25zdHJ1Y3RvciBib2R5IG9mIGEgc3VwZXIgY29uc3RydWN0b3IsCi8vLyBlYWNoIGxldmVsIGluIHRoZSBpbmhlcml0YW5jZSB0cmVlIGhhcyB0byB1c2UgaXRzIG93biBuYW1lcy4KLy8vCi8vLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgYSBuYW1pbmcgc2NoZW1lIGJ5IGNvdW50aW5nIHRoZSBkaXN0YW5jZSBmcm9tCi8vLyBhIGdpdmVuIGNvbnN0cnVjdG9yIHRvIFtPYmplY3RdLCB3aGVyZSBkaXN0YW5jZSBpcyB0aGUgbnVtYmVyIG9mCi8vLyBjb25zdHJ1Y3RvcnMgZGVjbGFyZWQgYWxvbmcgdGhlIGluaGVyaXRhbmNlIGNoYWluLgpjbGFzcyBfQ29uc3RydWN0b3JCb2R5TmFtaW5nU2NvcGUgewogIGZpbmFsIGludCBfc3RhcnRJbmRleDsKICBmaW5hbCBMaXN0PENvbnN0cnVjdG9yRW50aXR5PiBfY29uc3RydWN0b3JzOwogIGludCBnZXQgbnVtYmVyT2ZDb25zdHJ1Y3RvcnMgPT4gX2NvbnN0cnVjdG9ycy5sZW5ndGg7CgogIF9Db25zdHJ1Y3RvckJvZHlOYW1pbmdTY29wZS5yb290U2NvcGUoCiAgICAgIENsYXNzRW50aXR5IGNscywgRWxlbWVudEVudmlyb25tZW50IGVudmlyb25tZW50KQogICAgICA6IF9zdGFydEluZGV4ID0gMCwKICAgICAgICBfY29uc3RydWN0b3JzID0gX2dldENvbnN0cnVjdG9yTGlzdChjbHMsIGVudmlyb25tZW50KTsKCiAgX0NvbnN0cnVjdG9yQm9keU5hbWluZ1Njb3BlLmZvckNsYXNzKENsYXNzRW50aXR5IGNscywKICAgICAgX0NvbnN0cnVjdG9yQm9keU5hbWluZ1Njb3BlIHN1cGVyU2NvcGUsIEVsZW1lbnRFbnZpcm9ubWVudCBlbnZpcm9ubWVudCkKICAgICAgOiBfc3RhcnRJbmRleCA9IHN1cGVyU2NvcGUuX3N0YXJ0SW5kZXggKyBzdXBlclNjb3BlLm51bWJlck9mQ29uc3RydWN0b3JzLAogICAgICAgIF9jb25zdHJ1Y3RvcnMgPSBfZ2V0Q29uc3RydWN0b3JMaXN0KGNscywgZW52aXJvbm1lbnQpOwoKICAvLyBNaXhpbiBBcHBsaWNhdGlvbnMgaGF2ZSBjb25zdHJ1Y3RvcnMgYnV0IHdlIG5ldmVyIGdlbmVyYXRlIGNvZGUgZm9yIHRoZW0sCiAgLy8gc28gdGhleSBkbyBub3QgY291bnQgaW4gdGhlIGluaGVyaXRhbmNlIGNoYWluLgogIF9Db25zdHJ1Y3RvckJvZHlOYW1pbmdTY29wZS5mb3JNaXhpbkFwcGxpY2F0aW9uKAogICAgICBDbGFzc0VudGl0eSBjbHMsIF9Db25zdHJ1Y3RvckJvZHlOYW1pbmdTY29wZSBzdXBlclNjb3BlKQogICAgICA6IF9zdGFydEluZGV4ID0gc3VwZXJTY29wZS5fc3RhcnRJbmRleCArIHN1cGVyU2NvcGUubnVtYmVyT2ZDb25zdHJ1Y3RvcnMsCiAgICAgICAgX2NvbnN0cnVjdG9ycyA9IGNvbnN0IFtdOwoKICBmYWN0b3J5IF9Db25zdHJ1Y3RvckJvZHlOYW1pbmdTY29wZSgKICAgICAgQ2xhc3NFbnRpdHkgY2xzLAogICAgICBNYXA8Q2xhc3NFbnRpdHksIF9Db25zdHJ1Y3RvckJvZHlOYW1pbmdTY29wZT4gcmVnaXN0cnksCiAgICAgIEVsZW1lbnRFbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgcmV0dXJuIHJlZ2lzdHJ5LnB1dElmQWJzZW50KGNscywgKCkgewogICAgICBDbGFzc0VudGl0eSBzdXBlcmNsYXNzID0gZW52aXJvbm1lbnQuZ2V0U3VwZXJDbGFzcyhjbHMpOwogICAgICBpZiAoc3VwZXJjbGFzcyA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIG5ldyBfQ29uc3RydWN0b3JCb2R5TmFtaW5nU2NvcGUucm9vdFNjb3BlKGNscywgZW52aXJvbm1lbnQpOwogICAgICB9IGVsc2UgaWYgKGVudmlyb25tZW50LmlzTWl4aW5BcHBsaWNhdGlvbihjbHMpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBfQ29uc3RydWN0b3JCb2R5TmFtaW5nU2NvcGUuZm9yTWl4aW5BcHBsaWNhdGlvbihjbHMsCiAgICAgICAgICAgIG5ldyBfQ29uc3RydWN0b3JCb2R5TmFtaW5nU2NvcGUoc3VwZXJjbGFzcywgcmVnaXN0cnksIGVudmlyb25tZW50KSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG5ldyBfQ29uc3RydWN0b3JCb2R5TmFtaW5nU2NvcGUuZm9yQ2xhc3MoCiAgICAgICAgICAgIGNscywKICAgICAgICAgICAgbmV3IF9Db25zdHJ1Y3RvckJvZHlOYW1pbmdTY29wZShzdXBlcmNsYXNzLCByZWdpc3RyeSwgZW52aXJvbm1lbnQpLAogICAgICAgICAgICBlbnZpcm9ubWVudCk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgU3RyaW5nIGNvbnN0cnVjdG9yQm9keUtleUZvcihDb25zdHJ1Y3RvckJvZHlFbnRpdHkgYm9keSkgewogICAgaW50IHBvc2l0aW9uID0gX2NvbnN0cnVjdG9ycy5pbmRleE9mKGJvZHkuY29uc3RydWN0b3IpOwogICAgYXNzZXJ0KHBvc2l0aW9uID49IDAsIGZhaWxlZEF0KGJvZHksICJjb25zdHJ1Y3RvciBib2R5IG1pc3NpbmciKSk7CiAgICByZXR1cm4gIkBjb25zdHJ1Y3RvckJvZHlAJHtfc3RhcnRJbmRleCArIHBvc2l0aW9ufSI7CiAgfQoKICBzdGF0aWMgTGlzdDxDb25zdHJ1Y3RvckVudGl0eT4gX2dldENvbnN0cnVjdG9yTGlzdCgKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCBFbGVtZW50RW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIHZhciByZXN1bHQgPSA8Q29uc3RydWN0b3JFbnRpdHk+W107CiAgICBlbnZpcm9ubWVudC5mb3JFYWNoQ29uc3RydWN0b3IoY2xzLCByZXN1bHQuYWRkKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBfTWluaWZ5Q29uc3RydWN0b3JCb2R5TmFtZXIgaW1wbGVtZW50cyBOYW1lciB7CiAgTWFwPENsYXNzRW50aXR5LCBfQ29uc3RydWN0b3JCb2R5TmFtaW5nU2NvcGU+IF9jb25zdHJ1Y3RvckJvZHlTY29wZXMgPQogICAgICBuZXcgTWFwPENsYXNzRW50aXR5LCBfQ29uc3RydWN0b3JCb2R5TmFtaW5nU2NvcGU+KCk7CgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgY29uc3RydWN0b3JCb2R5TmFtZShDb25zdHJ1Y3RvckJvZHlFbnRpdHkgbWV0aG9kKSB7CiAgICBfQ29uc3RydWN0b3JCb2R5TmFtaW5nU2NvcGUgc2NvcGUgPSBuZXcgX0NvbnN0cnVjdG9yQm9keU5hbWluZ1Njb3BlKAogICAgICAgIG1ldGhvZC5lbmNsb3NpbmdDbGFzcywgX2NvbnN0cnVjdG9yQm9keVNjb3BlcywgX2VsZW1lbnRFbnZpcm9ubWVudCk7CiAgICBTdHJpbmcga2V5ID0gc2NvcGUuY29uc3RydWN0b3JCb2R5S2V5Rm9yKG1ldGhvZCk7CiAgICByZXR1cm4gX2Rpc2FtYmlndWF0ZU1lbWJlckJ5S2V5KAogICAgICAgIGtleSwgKCkgPT4gX3Byb3Bvc2VOYW1lRm9yQ29uc3RydWN0b3JCb2R5KG1ldGhvZCkpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgX01pbmlmaWVkT25lU2hvdEludGVyY2VwdG9yTmFtZXIgaW1wbGVtZW50cyBOYW1lciB7CiAgLy8vIFByb3BlcnR5IG5hbWUgdXNlZCBmb3IgdGhlIG9uZS1zaG90IGludGVyY2VwdG9yIG1ldGhvZCBmb3IgdGhlIGdpdmVuCiAgLy8vIFtzZWxlY3Rvcl0gYW5kIHJldHVybi10eXBlIHNwZWNpYWxpemF0aW9uLgogIEBvdmVycmlkZQogIGpzQXN0Lk5hbWUgbmFtZUZvck9uZVNob3RJbnRlcmNlcHRvcigKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBjbGFzc2VzKSB7CiAgICBTdHJpbmcgcm9vdCA9IHNlbGVjdG9yLmlzT3BlcmF0b3IKICAgICAgICA/IG9wZXJhdG9yTmFtZVRvSWRlbnRpZmllcihzZWxlY3Rvci5uYW1lKQogICAgICAgIDogcHJpdmF0ZU5hbWUoc2VsZWN0b3IubWVtYmVyTmFtZSk7CiAgICBTdHJpbmcgcHJlZml4ID0KICAgICAgICBzZWxlY3Rvci5pc0dldHRlciA/IHIiJGdldCIgOiBzZWxlY3Rvci5pc1NldHRlciA/IHIiJHNldCIgOiAiIjsKICAgIFN0cmluZyBjYWxsU3VmZml4ID0gc2VsZWN0b3IuaXNDYWxsCiAgICAgICAgPyBOYW1lci5jYWxsU3VmZml4Rm9yU3RydWN0dXJlKHNlbGVjdG9yLmNhbGxTdHJ1Y3R1cmUpLmpvaW4oKQogICAgICAgIDogIiI7CiAgICBTdHJpbmcgc3VmZml4ID0KICAgICAgICBzdWZmaXhGb3JHZXRJbnRlcmNlcHRvcihfY29tbW9uRWxlbWVudHMsIF9uYXRpdmVEYXRhLCBjbGFzc2VzKTsKICAgIFN0cmluZyBmdWxsTmFtZSA9ICJcJGludGVyY2VwdGVkJHByZWZpeFwkJHJvb3QkY2FsbFN1ZmZpeFwkJHN1ZmZpeCI7CiAgICByZXR1cm4gX2Rpc2FtYmlndWF0ZUludGVybmFsR2xvYmFsKGZ1bGxOYW1lKTsKICB9Cn0KgZUATk48ARoBTyAJHSUrD1AyGzQEAQwmAQwhDCsMIQwyAS00AU5PBlBRDE1OFjk8Hg03BiIWBAFIS0wYSDsRTEYRSkpKSkMRTExMTExMTExMTDsFAR81HUkpOggnUE1JHSQ2CAYBRE5MTRE7DxAPDhIPDg4RFA8SExEODg4OFQ8NEg8PEBEPEBAQGQ8PDw8PEBQIATkRFw4MEBwRDw8ODg4ODg4ZFxIWGg4PDhIPGS0vDhsTExIhER0bCAQBThQTJwsZJDBCKikGBAFLTU1BQi06QwFLUFFOOSMUFzMrJi4qCjspLyw5HApMQBEIBiIEAUoPLiMlBAEkDywfFxQXExcGDgQBUEkxAU4qMTYZQSERDwkjIlBNOREEAR08HxgEASNEHyQYBAEMPkccFwY1BAIBLgRHS01BBEhFNyQZLzgBKTcZPwE4TlA/AU80Mz9QIgEnFz4oKj8gTDhIUQ85EVAaCAgEAT08RzkEATY5KDUTBAIBPkk7AQxBSU02JTwEAgFDSzEMKDomMiwUSChGDhRISTIEAgExcGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9taW5pZnlfbmFtZXIuZGFydDlzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19iYWNrZW5kL25hbWVyX25hbWVzLmRhcnSb3i8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGpzX2JhY2tlbmQubmFtZXI7CgphYnN0cmFjdCBjbGFzcyBfTmFtZXJOYW1lIGV4dGVuZHMganNBc3QuTmFtZSB7CiAgaW50IGdldCBfa2luZDsKICBfTmFtZXJOYW1lIGdldCBfdGFyZ2V0ID0+IHRoaXM7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGlmIChERUJVR19NT0RFKSB7CiAgICAgIHJldHVybiAnTmFtZSgka2V5KSc7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGNvbnZlcnQgYSBuYW1lIHRvIGEgc3RyaW5nIik7CiAgfQp9CgplbnVtIF9OYW1lck5hbWVLaW5kcyB7IFN0cmluZ0JhY2tlZCwgR2V0dGVyLCBTZXR0ZXIsIEFzeW5jLCBDb21wb3VuZCwgVG9rZW4gfQoKY2xhc3MgU3RyaW5nQmFja2VkTmFtZSBleHRlbmRzIF9OYW1lck5hbWUgewogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lOwogIEBvdmVycmlkZQogIGludCBnZXQgX2tpbmQgPT4gX05hbWVyTmFtZUtpbmRzLlN0cmluZ0JhY2tlZC5pbmRleDsKCiAgU3RyaW5nQmFja2VkTmFtZSh0aGlzLm5hbWUpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGtleSA9PiBuYW1lOwoKICBAb3ZlcnJpZGUKICBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKG90aGVyIGlzIF9OYW1lUmVmZXJlbmNlKSBvdGhlciA9IG90aGVyLl90YXJnZXQ7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gKG90aGVyIGlzIFN0cmluZ0JhY2tlZE5hbWUpICYmIG90aGVyLm5hbWUgPT0gbmFtZTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gbmFtZS5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgaW50IGNvbXBhcmVUbyhqc0FzdC5OYW1lIG90aGVyKSB7CiAgICBfTmFtZXJOYW1lIG90aGVyTmFtZXJOYW1lOwogICAgaWYgKG90aGVyIGlzIE1vZHVsYXJOYW1lKSB7CiAgICAgIG90aGVyTmFtZXJOYW1lID0gb3RoZXIudmFsdWU7CiAgICB9IGVsc2UgewogICAgICBvdGhlck5hbWVyTmFtZSA9IG90aGVyOwogICAgfQogICAgb3RoZXJOYW1lck5hbWUgPSBvdGhlck5hbWVyTmFtZS5fdGFyZ2V0OwogICAgaWYgKG90aGVyTmFtZXJOYW1lLl9raW5kICE9IF9raW5kKSByZXR1cm4gb3RoZXJOYW1lck5hbWUuX2tpbmQgLSBfa2luZDsKICAgIHJldHVybiBuYW1lLmNvbXBhcmVUbyhvdGhlck5hbWVyTmFtZS5uYW1lKTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9QcmVmaXhlZE5hbWUgZXh0ZW5kcyBfTmFtZXJOYW1lIGltcGxlbWVudHMganNBc3QuQXN0Q29udGFpbmVyIHsKICBmaW5hbCBqc0FzdC5OYW1lIHByZWZpeDsKICBmaW5hbCBqc0FzdC5OYW1lIGJhc2U7CiAgQG92ZXJyaWRlCiAgaW50IGdldCBfa2luZDsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8anNBc3QuTm9kZT4gZ2V0IGNvbnRhaW5lZE5vZGVzID0+IFtwcmVmaXgsIGJhc2VdOwoKICBfUHJlZml4ZWROYW1lKHRoaXMucHJlZml4LCB0aGlzLmJhc2UpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gcHJlZml4Lm5hbWUgKyBiYXNlLm5hbWU7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQga2V5ID0+IHByZWZpeC5rZXkgKyBiYXNlLmtleTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKG90aGVyIGlzIF9OYW1lUmVmZXJlbmNlKSBvdGhlciA9IG90aGVyLl90YXJnZXQ7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIF9QcmVmaXhlZE5hbWUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBvdGhlci5iYXNlID09IGJhc2UgJiYgb3RoZXIucHJlZml4ID09IHByZWZpeDsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gYmFzZS5oYXNoQ29kZSAqIDEzICsgcHJlZml4Lmhhc2hDb2RlOwoKICBAb3ZlcnJpZGUKICBpbnQgY29tcGFyZVRvKGpzQXN0Lk5hbWUgb3RoZXIpIHsKICAgIF9OYW1lck5hbWUgb3RoZXJOYW1lck5hbWU7CiAgICBpZiAob3RoZXIgaXMgTW9kdWxhck5hbWUpIHsKICAgICAgb3RoZXJOYW1lck5hbWUgPSBvdGhlci52YWx1ZTsKICAgIH0gZWxzZSB7CiAgICAgIG90aGVyTmFtZXJOYW1lID0gb3RoZXI7CiAgICB9CiAgICBvdGhlck5hbWVyTmFtZSA9IG90aGVyTmFtZXJOYW1lLl90YXJnZXQ7CiAgICBpZiAob3RoZXJOYW1lck5hbWUuX2tpbmQgIT0gX2tpbmQpIHJldHVybiBvdGhlck5hbWVyTmFtZS5fa2luZCAtIF9raW5kOwogICAgX1ByZWZpeGVkTmFtZSBvdGhlclNhbWVLaW5kID0gb3RoZXJOYW1lck5hbWU7CiAgICBpbnQgcmVzdWx0ID0gcHJlZml4LmNvbXBhcmVUbyhvdGhlclNhbWVLaW5kLnByZWZpeCk7CiAgICBpZiAocmVzdWx0ID09IDApIHsKICAgICAgcmVzdWx0ID0gcHJlZml4LmNvbXBhcmVUbyhvdGhlclNhbWVLaW5kLnByZWZpeCk7CiAgICAgIGlmIChyZXN1bHQgPT0gMCkgewogICAgICAgIHJlc3VsdCA9IGJhc2UuY29tcGFyZVRvKG90aGVyU2FtZUtpbmQuYmFzZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CgpjbGFzcyBHZXR0ZXJOYW1lIGV4dGVuZHMgX1ByZWZpeGVkTmFtZSB7CiAgQG92ZXJyaWRlCiAgaW50IGdldCBfa2luZCA9PiBfTmFtZXJOYW1lS2luZHMuR2V0dGVyLmluZGV4OwoKICBHZXR0ZXJOYW1lKGpzQXN0Lk5hbWUgcHJlZml4LCBqc0FzdC5OYW1lIGJhc2UpIDogc3VwZXIocHJlZml4LCBiYXNlKTsKfQoKY2xhc3MgU2V0dGVyTmFtZSBleHRlbmRzIF9QcmVmaXhlZE5hbWUgewogIEBvdmVycmlkZQogIGludCBnZXQgX2tpbmQgPT4gX05hbWVyTmFtZUtpbmRzLlNldHRlci5pbmRleDsKCiAgU2V0dGVyTmFtZShqc0FzdC5OYW1lIHByZWZpeCwganNBc3QuTmFtZSBiYXNlKSA6IHN1cGVyKHByZWZpeCwgYmFzZSk7Cn0KCmNsYXNzIEFzeW5jTmFtZSBleHRlbmRzIF9QcmVmaXhlZE5hbWUgewogIEBvdmVycmlkZQogIGludCBnZXQgX2tpbmQgPT4gX05hbWVyTmFtZUtpbmRzLkFzeW5jLmluZGV4OwoKICBBc3luY05hbWUoanNBc3QuTmFtZSBwcmVmaXgsIGpzQXN0Lk5hbWUgYmFzZSkgOiBzdXBlcihwcmVmaXgsIGJhc2UpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBhbGxvd1JlbmFtZSA9PiB0cnVlOwp9CgpjbGFzcyBDb21wb3VuZE5hbWUgZXh0ZW5kcyBfTmFtZXJOYW1lIGltcGxlbWVudHMganNBc3QuQXN0Q29udGFpbmVyIHsKICBmaW5hbCBMaXN0PF9OYW1lck5hbWU+IF9wYXJ0czsKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IF9raW5kID0+IF9OYW1lck5hbWVLaW5kcy5Db21wb3VuZC5pbmRleDsKICBTdHJpbmcgX2NhY2hlZE5hbWU7CiAgaW50IF9jYWNoZWRIYXNoQ29kZSA9IC0xOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxqc0FzdC5Ob2RlPiBnZXQgY29udGFpbmVkTm9kZXMgPT4gX3BhcnRzOwoKICBDb21wb3VuZE5hbWUodGhpcy5fcGFydHMpOwoKICBDb21wb3VuZE5hbWUuZnJvbShMaXN0PGpzQXN0Lk5hbWU+IHBhcnRzKSA6IHRoaXMoPF9OYW1lck5hbWU+Wy4uLnBhcnRzXSk7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgbmFtZSB7CiAgICBpZiAoX2NhY2hlZE5hbWUgPT0gbnVsbCkgewogICAgICBfY2FjaGVkTmFtZSA9IF9wYXJ0cy5tYXAoKGpzQXN0Lk5hbWUgbmFtZSkgPT4gbmFtZS5uYW1lKS5qb2luKCk7CiAgICB9CiAgICByZXR1cm4gX2NhY2hlZE5hbWU7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGtleSA9PiBfcGFydHMubWFwKChfTmFtZXJOYW1lIG5hbWUpID0+IG5hbWUua2V5KS5qb2luKCk7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyBfTmFtZVJlZmVyZW5jZSkgb3RoZXIgPSBvdGhlci5fdGFyZ2V0OwogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBDb21wb3VuZE5hbWUpIHJldHVybiBmYWxzZTsKICAgIGlmIChvdGhlci5fcGFydHMubGVuZ3RoICE9IF9wYXJ0cy5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX3BhcnRzLmxlbmd0aDsgKytpKSB7CiAgICAgIGlmIChvdGhlci5fcGFydHNbaV0gIT0gX3BhcnRzW2ldKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgewogICAgaWYgKF9jYWNoZWRIYXNoQ29kZSA8IDApIHsKICAgICAgX2NhY2hlZEhhc2hDb2RlID0gMDsKICAgICAgZm9yIChqc0FzdC5OYW1lIG5hbWUgaW4gX3BhcnRzKSB7CiAgICAgICAgX2NhY2hlZEhhc2hDb2RlID0gKF9jYWNoZWRIYXNoQ29kZSAqIDE3ICsgbmFtZS5oYXNoQ29kZSkgJiAweDdmZmZmZmZmOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX2NhY2hlZEhhc2hDb2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGNvbXBhcmVUbyhqc0FzdC5OYW1lIG90aGVyKSB7CiAgICBfTmFtZXJOYW1lIG90aGVyTmFtZXJOYW1lOwogICAgaWYgKG90aGVyIGlzIE1vZHVsYXJOYW1lKSB7CiAgICAgIG90aGVyTmFtZXJOYW1lID0gb3RoZXIudmFsdWU7CiAgICB9IGVsc2UgewogICAgICBvdGhlck5hbWVyTmFtZSA9IG90aGVyOwogICAgfQogICAgb3RoZXJOYW1lck5hbWUgPSBvdGhlck5hbWVyTmFtZS5fdGFyZ2V0OwogICAgaWYgKG90aGVyTmFtZXJOYW1lLl9raW5kICE9IF9raW5kKSByZXR1cm4gb3RoZXJOYW1lck5hbWUuX2tpbmQgLSBfa2luZDsKICAgIENvbXBvdW5kTmFtZSBvdGhlclNhbWVLaW5kID0gb3RoZXJOYW1lck5hbWU7CiAgICBpZiAob3RoZXJTYW1lS2luZC5fcGFydHMubGVuZ3RoICE9IF9wYXJ0cy5sZW5ndGgpIHsKICAgICAgcmV0dXJuIG90aGVyU2FtZUtpbmQuX3BhcnRzLmxlbmd0aCAtIF9wYXJ0cy5sZW5ndGg7CiAgICB9CiAgICBpbnQgcmVzdWx0ID0gMDsKICAgIGZvciAoaW50IHBvcyA9IDA7IHJlc3VsdCA9PSAwICYmIHBvcyA8IF9wYXJ0cy5sZW5ndGg7IHBvcysrKSB7CiAgICAgIHJlc3VsdCA9IF9wYXJ0c1twb3NdLmNvbXBhcmVUbyhvdGhlclNhbWVLaW5kLl9wYXJ0c1twb3NdKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CgpjbGFzcyBUb2tlbk5hbWUgZXh0ZW5kcyBfTmFtZXJOYW1lIGltcGxlbWVudHMganNBc3QuUmVmZXJlbmNlQ291bnRlZEFzdE5vZGUgewogIEBvdmVycmlkZQogIGludCBnZXQgX2tpbmQgPT4gX05hbWVyTmFtZUtpbmRzLlRva2VuLmluZGV4OwogIFN0cmluZyBfbmFtZTsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcga2V5OwogIGZpbmFsIFRva2VuU2NvcGUgX3Njb3BlOwogIGludCBfcmMgPSAwOwoKICBUb2tlbk5hbWUodGhpcy5fc2NvcGUsIHRoaXMua2V5KTsKCiAgYm9vbCBnZXQgaXNGaW5hbGl6ZWQgPT4gX25hbWUgIT0gbnVsbDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBuYW1lIHsKICAgIGFzc2VydChpc0ZpbmFsaXplZCwgIlRva2VuTmFtZSgka2V5KSBoYXMgbm90IGJlZW4gZmluYWxpemVkLiIpOwogICAgcmV0dXJuIF9uYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGNvbXBhcmVUbyhjb3ZhcmlhbnQgX05hbWVyTmFtZSBvdGhlcikgewogICAgb3RoZXIgPSBvdGhlci5fdGFyZ2V0OwogICAgaWYgKG90aGVyLl9raW5kICE9IF9raW5kKSByZXR1cm4gb3RoZXIuX2tpbmQgLSBfa2luZDsKICAgIFRva2VuTmFtZSBvdGhlclRva2VuID0gb3RoZXI7CiAgICByZXR1cm4ga2V5LmNvbXBhcmVUbyhvdGhlclRva2VuLmtleSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIG1hcmtTZWVuKGpzQXN0LlRva2VuQ291bnRlciBjb3VudGVyKSA9PiBfcmMrKzsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKG90aGVyIGlzIF9OYW1lUmVmZXJlbmNlKSBvdGhlciA9IG90aGVyLl90YXJnZXQ7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHN1cGVyLmhhc2hDb2RlOwoKICB2b2lkIGZpbmFsaXplKCkgewogICAgYXNzZXJ0KAogICAgICAgICFpc0ZpbmFsaXplZCwKICAgICAgICBmYWlsZWRBdChOT19MT0NBVElPTl9TUEFOTkFCTEUsCiAgICAgICAgICAgICJUb2tlbk5hbWUoJGtleSk9JF9uYW1lIGhhcyBhbHJlYWR5IGJlZW4gZmluYWxpemVkLiIpKTsKICAgIF9uYW1lID0gX3Njb3BlLmdldE5leHROYW1lKCk7CiAgfQp9CgpjbGFzcyBfTmFtZVJlZmVyZW5jZSBleHRlbmRzIF9OYW1lck5hbWUgaW1wbGVtZW50cyBqc0FzdC5Bc3RDb250YWluZXIgewogIEBvdmVycmlkZQogIF9OYW1lck5hbWUgX3RhcmdldDsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBfa2luZCA9PiBfdGFyZ2V0Ll9raW5kOwogIEBvdmVycmlkZQogIFN0cmluZyBnZXQga2V5ID0+IF90YXJnZXQua2V5OwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxqc0FzdC5Ob2RlPiBnZXQgY29udGFpbmVkTm9kZXMgPT4gW190YXJnZXRdOwoKICBfTmFtZVJlZmVyZW5jZSh0aGlzLl90YXJnZXQpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gX3RhcmdldC5uYW1lOwoKICBAb3ZlcnJpZGUKICBpbnQgY29tcGFyZVRvKGpzQXN0Lk5hbWUgb3RoZXIpIHsKICAgIF9OYW1lck5hbWUgb3RoZXJOYW1lck5hbWU7CiAgICBpZiAob3RoZXIgaXMgTW9kdWxhck5hbWUpIHsKICAgICAgb3RoZXJOYW1lck5hbWUgPSBvdGhlci52YWx1ZTsKICAgIH0gZWxzZSB7CiAgICAgIG90aGVyTmFtZXJOYW1lID0gb3RoZXI7CiAgICB9CiAgICByZXR1cm4gX3RhcmdldC5jb21wYXJlVG8ob3RoZXJOYW1lck5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgPT4gX3RhcmdldCA9PSBvdGhlcjsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBfdGFyZ2V0Lmhhc2hDb2RlOwp9CoEdAE5OPAEaAS8RIgEMFhYbBkUEAgFOASwMFQw3AR8BDBoBDBc4LT4EAQwlAQwkHyAkDR4GLUwwBAIBUBsZDBEBDD0BKQEMLgEMKwEMHDgtLzkEAQw8AQwkHyAkDR4GLUwyORc3GTUIBhMEAgEpDDEBSAIBKQwxAUgCASgMMAFHAQwgAgFGIQwzFhwBDDUBHQFMAQwUH0cGGAQBDEYBDBw4LS48LjYGEQQBDBUfGyhPCAYcBAEMJB8gJA0eBi1MMTg6BhRDQQYTBAIBTgwwEAwUGw8BJAEpAQwURBIEAQwuGzoiKgQBDDYBDBw4LRIEAQwmARQMFihEIgQCAUgMFgEMIgwhAQw4ASABDCMBDCQfICQNHgYuBAEMLwEMKAIBMHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvbmFtZXJfbmFtZXMuZGFydDJzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9uYXRpdmUvYmVoYXZpb3IuZGFydMAAgBAvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBDb21tb25FbGVtZW50cywgRWxlbWVudEVudmlyb25tZW50OwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIGFzIGpzOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmF0aXZlX2RhdGEuZGFydCcgc2hvdyBOYXRpdmVCYXNpY0RhdGE7CmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NpZGVfZWZmZWN0cy5kYXJ0JyBzaG93IFNpZGVFZmZlY3RzOwppbXBvcnQgJ2pzLmRhcnQnOwoKdHlwZWRlZiBkeW5hbWljIC8qRGFydFR5cGV8U3BlY2lhbFR5cGUqLyBUeXBlTG9va3VwKFN0cmluZyB0eXBlU3RyaW5nLAogICAge2Jvb2wgcmVxdWlyZWR9KTsKCi8vLyBUaGlzIGNsYXNzIGlzIGEgdGVtcG9yYXJ5IHdvcmstYXJvdW5kIHVudGlsIHdlIGdldCBhIG1vcmUgcG93ZXJmdWwgRGFydFR5cGUuCmNsYXNzIFNwZWNpYWxUeXBlIHsKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBjb25zdCBTcGVjaWFsVHlwZS5fKHRoaXMubmFtZSk7CgogIC8vLyBUaGUgdHlwZSBPYmplY3QsIGJ1dCBubyBzdWJ0eXBlczoKICBzdGF0aWMgY29uc3QgSnNPYmplY3QgPSBjb25zdCBTcGVjaWFsVHlwZS5fKCc9T2JqZWN0Jyk7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gbmFtZS5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gbmFtZTsKCiAgc3RhdGljIFNwZWNpYWxUeXBlIGZyb21OYW1lKFN0cmluZyBuYW1lKSB7CiAgICBpZiAobmFtZSA9PSAnPU9iamVjdCcpIHsKICAgICAgcmV0dXJuIEpzT2JqZWN0OwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlVua25vd24gU3BlY2lhbFR5cGUgJyRuYW1lJy4iKTsKICAgIH0KICB9Cn0KCi8vLyBEZXNjcmlwdGlvbiBvZiB0aGUgZXhjZXB0aW9uIGJlaGF2aW91ciBvZiBuYXRpdmUgY29kZS4KY2xhc3MgTmF0aXZlVGhyb3dCZWhhdmlvciB7CiAgc3RhdGljIGNvbnN0IE5hdGl2ZVRocm93QmVoYXZpb3IgTkVWRVIgPSBOYXRpdmVUaHJvd0JlaGF2aW9yLl8oMCk7CiAgc3RhdGljIGNvbnN0IE5hdGl2ZVRocm93QmVoYXZpb3IgTUFZID0gTmF0aXZlVGhyb3dCZWhhdmlvci5fKDEpOwoKICAvLy8gVGhyb3dzIG9ubHkgaWYgZmlyc3QgYXJndW1lbnQgaXMgbnVsbC4KICBzdGF0aWMgY29uc3QgTmF0aXZlVGhyb3dCZWhhdmlvciBOVUxMX05TTSA9IE5hdGl2ZVRocm93QmVoYXZpb3IuXygyKTsKCiAgLy8vIFRocm93cyBpZiBmaXJzdCBhcmd1bWVudCBpcyBudWxsLCB0aGVuIG1heSB0aHJvdy4KICBzdGF0aWMgY29uc3QgTmF0aXZlVGhyb3dCZWhhdmlvciBOVUxMX05TTV9USEVOX01BWSA9IE5hdGl2ZVRocm93QmVoYXZpb3IuXygzKTsKCiAgZmluYWwgaW50IF9iaXRzOwogIGNvbnN0IE5hdGl2ZVRocm93QmVoYXZpb3IuXyh0aGlzLl9iaXRzKTsKCiAgYm9vbCBnZXQgY2FuVGhyb3cgPT4gdGhpcyAhPSBORVZFUjsKCiAgLy8vIERvZXMgdGhpcyBiZWhhdmlvciBhbHdheXMgdGhyb3cgYSBub1N1Y2hNZXRob2QgY2hlY2sgb24gYSBudWxsIGZpcnN0CiAgLy8vIGFyZ3VtZW50IGJlZm9yZSBhbnkgc2lkZSBlZmZlY3Qgb3Igb3RoZXIgZXhjZXB0aW9uPwogIGJvb2wgZ2V0IGlzTnVsbE5TTUd1YXJkID0+IHRoaXMgPT0gTlVMTF9OU00gfHwgdGhpcyA9PSBOVUxMX05TTV9USEVOX01BWTsKCiAgLy8vIERvZXMgdGhpcyBiZWhhdmlvciBhbHdheXMgYWN0IGFzIGEgbnVsbCBub1N1Y2hNZXRob2QgY2hlY2ssIGFuZCBoYXMgbm8KICAvLy8gb3RoZXIgdGhyb3dpbmcgYmVoYXZpb3I/CiAgYm9vbCBnZXQgaXNPbmx5TnVsbE5TTUd1YXJkID0+IHRoaXMgPT0gTlVMTF9OU007CgogIC8vLyBSZXR1cm5zIHRoZSBiZWhhdmlvciBpZiB3ZSBhc3N1bWUgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIG5vdCBudWxsLgogIE5hdGl2ZVRocm93QmVoYXZpb3IgZ2V0IG9uTm9uTnVsbCB7CiAgICBpZiAodGhpcyA9PSBOVUxMX05TTSkgcmV0dXJuIE5FVkVSOwogICAgaWYgKHRoaXMgPT0gTlVMTF9OU01fVEhFTl9NQVkpIHJldHVybiBNQVk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGlmICh0aGlzID09IE5FVkVSKSByZXR1cm4gJ25ldmVyJzsKICAgIGlmICh0aGlzID09IE1BWSkgcmV0dXJuICdtYXknOwogICAgaWYgKHRoaXMgPT0gTlVMTF9OU00pIHJldHVybiAnbnVsbCgxKSc7CiAgICBpZiAodGhpcyA9PSBOVUxMX05TTV9USEVOX01BWSkgcmV0dXJuICdudWxsKDEpK21heSc7CiAgICByZXR1cm4gJ05hdGl2ZVRocm93QmVoYXZpb3IoJF9iaXRzKSc7CiAgfQoKICAvLy8gQ2Fub25pY2FsIGxpc3Qgb2YgbWFya2VyIHZhbHVlcy4KICAvLy8KICAvLy8gQWRkZWQgdG8gbWFrZSBbTmF0aXZlVGhyb3dCZWhhdmlvcl0gZW51bS1saWtlLgogIHN0YXRpYyBjb25zdCBMaXN0PE5hdGl2ZVRocm93QmVoYXZpb3I+IHZhbHVlcyA9IFsKICAgIE5FVkVSLAogICAgTUFZLAogICAgTlVMTF9OU00sCiAgICBOVUxMX05TTV9USEVOX01BWSwKICBdOwoKICAvLy8gSW5kZXggdG8gdGhpcyBtYXJrZXIgd2l0aGluIFt2YWx1ZXNdLgogIC8vLwogIC8vLyBBZGRlZCB0byBtYWtlIFtOYXRpdmVUaHJvd0JlaGF2aW9yXSBlbnVtLWxpa2UuCiAgaW50IGdldCBpbmRleCA9PiB2YWx1ZXMuaW5kZXhPZih0aGlzKTsKCiAgLy8vIERlc2VyaWFsaXplciBoZWxwZXIuCiAgc3RhdGljIE5hdGl2ZVRocm93QmVoYXZpb3IgX2JpdHNUb1ZhbHVlKGludCBiaXRzKSB7CiAgICBzd2l0Y2ggKGJpdHMpIHsKICAgICAgY2FzZSAwOgogICAgICAgIHJldHVybiBORVZFUjsKICAgICAgY2FzZSAxOgogICAgICAgIHJldHVybiBNQVk7CiAgICAgIGNhc2UgMjoKICAgICAgICByZXR1cm4gTlVMTF9OU007CiAgICAgIGNhc2UgMzoKICAgICAgICByZXR1cm4gTlVMTF9OU01fVEhFTl9NQVk7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICAvLy8gU2VxdWVuY2Ugb3BlcmF0b3IuCiAgTmF0aXZlVGhyb3dCZWhhdmlvciB0aGVuKE5hdGl2ZVRocm93QmVoYXZpb3Igc2Vjb25kKSB7CiAgICBpZiAodGhpcyA9PSBORVZFUikgcmV0dXJuIHNlY29uZDsKICAgIGlmICh0aGlzID09IE1BWSkgcmV0dXJuIE1BWTsKICAgIGlmICh0aGlzID09IE5VTExfTlNNX1RIRU5fTUFZKSByZXR1cm4gTlVMTF9OU01fVEhFTl9NQVk7CiAgICBhc3NlcnQodGhpcyA9PSBOVUxMX05TTSk7CiAgICBpZiAoc2Vjb25kID09IE5FVkVSKSByZXR1cm4gdGhpczsKICAgIHJldHVybiBOVUxMX05TTV9USEVOX01BWTsKICB9CgogIC8vLyBDaG9pY2Ugb3BlcmF0b3IuCiAgTmF0aXZlVGhyb3dCZWhhdmlvciBvcihOYXRpdmVUaHJvd0JlaGF2aW9yIG90aGVyKSB7CiAgICBpZiAodGhpcyA9PSBvdGhlcikgcmV0dXJuIHRoaXM7CiAgICByZXR1cm4gTUFZOwogIH0KfQoKLy8vIEEgc3VtbWFyeSBvZiB0aGUgYmVoYXZpb3Igb2YgYSBuYXRpdmUgZWxlbWVudC4KLy8vCi8vLyBOYXRpdmUgY29kZSBjYW4gcmV0dXJuIHZhbHVlcyBvZiBvbmUgdHlwZSBhbmQgY2F1c2UgbmF0aXZlIHN1YnR5cGVzIG9mCi8vLyBhbm90aGVyIHR5cGUgdG8gYmUgaW5zdGFudGlhdGVkLiAgQnkgZGVmYXVsdCwgd2UgY29tcHV0ZSBib3RoIGZyb20gdGhlCi8vLyBkZWNsYXJlZCB0eXBlLgovLy8KLy8vIEEgZmllbGQgbWlnaHQgeWllbGQgYW55IG5hdGl2ZSB0eXBlIHRoYXQgJ2lzJyB0aGUgZmllbGQgdHlwZS4KLy8vCi8vLyBBIG1ldGhvZCBtaWdodCBjcmVhdGUgYW5kIHJldHVybiBpbnN0YW5jZXMgb2YgbmF0aXZlIHN1YmNsYXNzZXMgb2YgaXRzCi8vLyBkZWNsYXJlZCByZXR1cm4gdHlwZSwgYW5kIGEgY2FsbGJhY2sgYXJndW1lbnQgbWF5IGJlIGNhbGxlZCB3aXRoIGluc3RhbmNlcwovLy8gb2YgdGhlIGNhbGxiYWNrIHBhcmFtZXRlciB0eXBlIChlLmcuIEV2ZW50KS4KLy8vCi8vLyBJZiB0aGVyZSBpcyBvbmUgb3IgbW9yZSBgQENyZWF0ZXNgIGFubm90YXRpb25zLCB0aGUgdW5pb24gb2YgdGhlIG5hbWVkIHR5cGVzCi8vLyByZXBsYWNlcyB0aGUgaW5mZXJyZWQgaW5zdGFudGlhdGVkIHR5cGUsIGFuZCB0aGUgcmV0dXJuIHR5cGUgaXMgaWdub3JlZCBmb3IKLy8vIHRoZSBwdXJwb3NlIG9mIGluZmVycmluZyBpbnN0YW50aWF0ZWQgdHlwZXMuCi8vLwovLy8gICAgIEBDcmVhdGVzKCdJREJDdXJzb3InKSAgICAvLyBDcmVhdGVkIGFzeW5jaHJvbm91c2x5LgovLy8gICAgIEBDcmVhdGVzKCdJREJSZXF1ZXN0JykgICAvLyBDcmVhdGVkIHN5bmNocm9ub3VzbHkgKGZvciByZXR1cm4gdmFsdWUpLgovLy8gICAgIElEQlJlcXVlc3Qgb3BlbkN1cnNvcigpOwovLy8KLy8vIElmIHRoZXJlIGlzIG9uZSBvciBtb3JlIGBAUmV0dXJuc2AgYW5ub3RhdGlvbnMsIHRoZSB1bmlvbiBvZiB0aGUgbmFtZWQgdHlwZXMKLy8vIHJlcGxhY2VzIHRoZSBkZWNsYXJlZCByZXR1cm4gdHlwZS4KLy8vCi8vLyAgICAgQFJldHVybnMoJ0lEQlJlcXVlc3QnKQovLy8gICAgIElEQlJlcXVlc3Qgb3BlbkN1cnNvcigpOwovLy8KLy8vIFR5cGVzIGluIGFubm90YXRpb25zIGFyZSBub24tbnVsbGFibGUsIHNvIGluY2x1ZGUgYEBSZXR1cm5zKCdOdWxsJylgIGlmCi8vLyBgbnVsbGAgbWF5IGJlIHJldHVybmVkLgpjbGFzcyBOYXRpdmVCZWhhdmlvciB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtOYXRpdmVCZWhhdmlvcl0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICduYXRpdmUtYmVoYXZpb3InOwoKICAvLy8gW0RhcnRUeXBlXXMgb3IgW1NwZWNpYWxUeXBlXXMgcmV0dXJuZWQgb3IgeWllbGRlZCBieSB0aGUgbmF0aXZlCiAgLy8vIGVsZW1lbnQuCiAgZmluYWwgTGlzdCB0eXBlc1JldHVybmVkID0gW107CgogIC8vLyBbRGFydFR5cGVdcyBvciBbU3BlY2lhbFR5cGVdcyBpbnN0YW50aWF0ZWQgYnkgdGhlIG5hdGl2ZQogIC8vLyBlbGVtZW50LgogIGZpbmFsIExpc3QgdHlwZXNJbnN0YW50aWF0ZWQgPSBbXTsKCiAgU3RyaW5nIGNvZGVUZW1wbGF0ZVRleHQ7CiAgLy8gSWYgdGhpcyBiZWhhdmlvciBpcyBmb3IgYSBKUyBleHByZXNzaW9uLCBbY29kZVRlbXBsYXRlXSBjb250YWlucyB0aGUKICAvLyBwYXJzZWQgdHJlZS4KICBqcy5UZW1wbGF0ZSBjb2RlVGVtcGxhdGU7CgogIGZpbmFsIFNpZGVFZmZlY3RzIHNpZGVFZmZlY3RzOwoKICBOYXRpdmVUaHJvd0JlaGF2aW9yIHRocm93QmVoYXZpb3IgPSBOYXRpdmVUaHJvd0JlaGF2aW9yLk1BWTsKCiAgYm9vbCBpc0FsbG9jYXRpb24gPSBmYWxzZTsKICBib29sIHVzZUd2biA9IGZhbHNlOwoKICAvLyBUT0RPKHNyYSk6IE1ha2UgTmF0aXZlQmVoYXZpb3IgaW1tdXRhYmxlIHNvIFBVUkUgYW5kIFBVUkVfQUxMT0NBVElPTiBjYW4gYmUKICAvLyBmaW5hbCBjb25zdGFudC1saWtlIG9iamVjdHMuCiAgc3RhdGljIE5hdGl2ZUJlaGF2aW9yIGdldCBQVVJFID0+IE5hdGl2ZUJlaGF2aW9yLl9tYWtlUHVyZSgpOwogIHN0YXRpYyBOYXRpdmVCZWhhdmlvciBnZXQgUFVSRV9BTExPQ0FUSU9OID0+CiAgICAgIE5hdGl2ZUJlaGF2aW9yLl9tYWtlUHVyZShpc0FsbG9jYXRpb246IHRydWUpOwogIHN0YXRpYyBOYXRpdmVCZWhhdmlvciBnZXQgQ0hBTkdFU19PVEhFUiA9PiBOYXRpdmVCZWhhdmlvci5fbWFrZUNoYW5nZXNPdGhlcigpOwogIHN0YXRpYyBOYXRpdmVCZWhhdmlvciBnZXQgREVQRU5EU19PVEhFUiA9PiBOYXRpdmVCZWhhdmlvci5fbWFrZURlcGVuZHNPdGhlcigpOwoKICBOYXRpdmVCZWhhdmlvcigpIDogc2lkZUVmZmVjdHMgPSBuZXcgU2lkZUVmZmVjdHMuZW1wdHkoKTsKCiAgTmF0aXZlQmVoYXZpb3IuaW50ZXJuYWwodGhpcy5zaWRlRWZmZWN0cyk7CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbTmF0aXZlQmVoYXZpb3JdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgTmF0aXZlQmVoYXZpb3IucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKCiAgICBMaXN0IHJlYWRUeXBlcygpIHsKICAgICAgTGlzdCB0eXBlcyA9IFtdOwogICAgICB0eXBlcy5hZGRBbGwoc291cmNlLnJlYWREYXJ0VHlwZXMoKSk7CiAgICAgIGludCBzcGVjaWFsQ291bnQgPSBzb3VyY2UucmVhZEludCgpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNwZWNpYWxDb3VudDsgaSsrKSB7CiAgICAgICAgU3RyaW5nIG5hbWUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgICAgIHR5cGVzLmFkZChTcGVjaWFsVHlwZS5mcm9tTmFtZShuYW1lKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHR5cGVzOwogICAgfQoKICAgIExpc3QgdHlwZXNSZXR1cm5lZCA9IHJlYWRUeXBlcygpOwogICAgTGlzdCB0eXBlc0luc3RhbnRpYXRlZCA9IHJlYWRUeXBlcygpOwogICAgU3RyaW5nIGNvZGVUZW1wbGF0ZVRleHQgPSBzb3VyY2UucmVhZFN0cmluZ09yTnVsbCgpOwogICAgU2lkZUVmZmVjdHMgc2lkZUVmZmVjdHMgPSBuZXcgU2lkZUVmZmVjdHMucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBpbnQgdGhyb3dCZWhhdmlvciA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBib29sIGlzQWxsb2NhdGlvbiA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgYm9vbCB1c2VHdm4gPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKCiAgICBOYXRpdmVCZWhhdmlvciBiZWhhdmlvciA9IG5ldyBOYXRpdmVCZWhhdmlvci5pbnRlcm5hbChzaWRlRWZmZWN0cyk7CiAgICBiZWhhdmlvci50eXBlc1JldHVybmVkLmFkZEFsbCh0eXBlc1JldHVybmVkKTsKICAgIGJlaGF2aW9yLnR5cGVzSW5zdGFudGlhdGVkLmFkZEFsbCh0eXBlc0luc3RhbnRpYXRlZCk7CiAgICBpZiAoY29kZVRlbXBsYXRlVGV4dCAhPSBudWxsKSB7CiAgICAgIGJlaGF2aW9yLmNvZGVUZW1wbGF0ZVRleHQgPSBjb2RlVGVtcGxhdGVUZXh0OwogICAgICBiZWhhdmlvci5jb2RlVGVtcGxhdGUgPSBqcy5qcy5wYXJzZUZvcmVpZ25KUyhjb2RlVGVtcGxhdGVUZXh0KTsKICAgIH0KICAgIGJlaGF2aW9yLnRocm93QmVoYXZpb3IgPSBOYXRpdmVUaHJvd0JlaGF2aW9yLl9iaXRzVG9WYWx1ZSh0aHJvd0JlaGF2aW9yKTsKICAgIGFzc2VydChiZWhhdmlvci50aHJvd0JlaGF2aW9yLl9iaXRzID09IHRocm93QmVoYXZpb3IpOwogICAgYmVoYXZpb3IuaXNBbGxvY2F0aW9uID0gaXNBbGxvY2F0aW9uOwogICAgYmVoYXZpb3IudXNlR3ZuID0gdXNlR3ZuOwogICAgcmV0dXJuIGJlaGF2aW9yOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbTmF0aXZlQmVoYXZpb3JdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CgogICAgdm9pZCB3cml0ZVR5cGVzKExpc3QgdHlwZXMpIHsKICAgICAgTGlzdDxEYXJ0VHlwZT4gZGFydFR5cGVzID0gW107CiAgICAgIExpc3Q8U3BlY2lhbFR5cGU+IHNwZWNpYWxUeXBlcyA9IFtdOwogICAgICBmb3IgKHZhciB0eXBlIGluIHR5cGVzKSB7CiAgICAgICAgaWYgKHR5cGUgaXMgRGFydFR5cGUpIHsKICAgICAgICAgIGRhcnRUeXBlcy5hZGQodHlwZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNwZWNpYWxUeXBlcy5hZGQodHlwZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHNpbmsud3JpdGVEYXJ0VHlwZXMoZGFydFR5cGVzKTsKICAgICAgc2luay53cml0ZUludChzcGVjaWFsVHlwZXMubGVuZ3RoKTsKICAgICAgZm9yIChTcGVjaWFsVHlwZSB0eXBlIGluIHNwZWNpYWxUeXBlcykgewogICAgICAgIHNpbmsud3JpdGVTdHJpbmcodHlwZS5uYW1lKTsKICAgICAgfQogICAgfQoKICAgIHdyaXRlVHlwZXModHlwZXNSZXR1cm5lZCk7CiAgICB3cml0ZVR5cGVzKHR5cGVzSW5zdGFudGlhdGVkKTsKICAgIHNpbmsud3JpdGVTdHJpbmdPck51bGwoY29kZVRlbXBsYXRlVGV4dCk7CiAgICBzaWRlRWZmZWN0cy53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLndyaXRlSW50KHRocm93QmVoYXZpb3IuX2JpdHMpOwogICAgc2luay53cml0ZUJvb2woaXNBbGxvY2F0aW9uKTsKICAgIHNpbmsud3JpdGVCb29sKHVzZUd2bik7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdOYXRpdmVCZWhhdmlvcignCiAgICAgICAgJ3JldHVybnM6ICR7dHlwZXNSZXR1cm5lZH0nCiAgICAgICAgJywgY3JlYXRlczogJHt0eXBlc0luc3RhbnRpYXRlZH0nCiAgICAgICAgJywgc2lkZUVmZmVjdHM6ICR7c2lkZUVmZmVjdHN9JwogICAgICAgICcsIHRocm93czogJHt0aHJvd0JlaGF2aW9yfScKICAgICAgICAnJHtpc0FsbG9jYXRpb24gPyAiLCBpc0FsbG9jYXRpb24iIDogIiJ9JwogICAgICAgICcke3VzZUd2biA/ICIsIHVzZUd2biIgOiAiIn0nCiAgICAgICAgJyknOwogIH0KCiAgc3RhdGljIE5hdGl2ZUJlaGF2aW9yIF9tYWtlUHVyZSh7Ym9vbCBpc0FsbG9jYXRpb246IGZhbHNlfSkgewogICAgTmF0aXZlQmVoYXZpb3IgYmVoYXZpb3IgPSBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKICAgIGJlaGF2aW9yLnNpZGVFZmZlY3RzLmNsZWFyQWxsRGVwZW5kZW5jaWVzKCk7CiAgICBiZWhhdmlvci5zaWRlRWZmZWN0cy5jbGVhckFsbFNpZGVFZmZlY3RzKCk7CiAgICBiZWhhdmlvci50aHJvd0JlaGF2aW9yID0gTmF0aXZlVGhyb3dCZWhhdmlvci5ORVZFUjsKICAgIGJlaGF2aW9yLmlzQWxsb2NhdGlvbiA9IGlzQWxsb2NhdGlvbjsKICAgIHJldHVybiBiZWhhdmlvcjsKICB9CgogIHN0YXRpYyBOYXRpdmVCZWhhdmlvciBfbWFrZUNoYW5nZXNPdGhlcigpIHsKICAgIC8vIFRPRE8oMjU1NDQpOiBIYXZlIGEgZGlzdGluY3QgZWZmZWN0IGluc3RlYWQgb2YgdXNpbmcgc3RhdGljIHByb3BlcnRpZXMgdG8KICAgIC8vIG1vZGVsICdvdGhlcicgZWZmZWN0cy4KICAgIHJldHVybiBfbWFrZVB1cmUoKS4uc2lkZUVmZmVjdHMuc2V0Q2hhbmdlc1N0YXRpY1Byb3BlcnR5KCk7CiAgfQoKICBzdGF0aWMgTmF0aXZlQmVoYXZpb3IgX21ha2VEZXBlbmRzT3RoZXIoKSB7CiAgICAvLyBUT0RPKDI1NTQ0KTogSGF2ZSBhIGRpc3RpbmN0IGVmZmVjdCBpbnN0ZWFkIG9mIHVzaW5nIHN0YXRpYyBwcm9wZXJ0aWVzIHRvCiAgICAvLyBtb2RlbCAnb3RoZXInIGVmZmVjdHMuCiAgICByZXR1cm4gX21ha2VQdXJlKCkuLnNpZGVFZmZlY3RzLnNldERlcGVuZHNPblN0YXRpY1Byb3BlcnR5U3RvcmUoKTsKICB9CgogIC8vLyBQcm9jZXNzZXMgdGhlIHR5cGUgc3BlY2lmaWNhdGlvbiBzdHJpbmcgb2YgYSBjYWxsIHRvIEpTIGFuZCBzdG9yZXMgdGhlCiAgLy8vIHJlc3VsdCBpbiB0aGUgW3R5cGVzUmV0dXJuZWRdIGFuZCBbdHlwZXNJbnN0YW50aWF0ZWRdLiBJdCBmdXJ0aGVybW9yZQogIC8vLyBjb21wdXRlcyB0aGUgc2lkZSBlZmZlY3RzLCBhbmQsIGlmIGdpdmVuLCBpbnZva2VzIFtzZXRTaWRlRWZmZWN0c10gd2l0aAogIC8vLyB0aGUgY29tcHV0ZWQgZWZmZWN0cy4gSWYgbm8gc2lkZSBlZmZlY3RzIGFyZSBlbmNvZGVkIGluIHRoZSBbc3BlY1N0cmluZ10KICAvLy8gdGhlIFtzZXRTaWRlRWZmZWN0c10gbWV0aG9kIGlzIG5vdCBpbnZva2VkLgogIC8vLwogIC8vLyBUd28gZm9ybXMgb2YgdGhlIHN0cmluZyBpcyBzdXBwb3J0ZWQ6CiAgLy8vCiAgLy8vIDEpIEEgc2luZ2xlIHR5cGUgc3RyaW5nIG9mIHRoZSBmb3JtICd2b2lkJywgJycsICd2YXInIG9yICdUMXwuLi58VG4nIHdoaWNoCiAgLy8vICAgIGRlZmluZXMgdGhlIHR5cGVzIHJldHVybmVkLCBhbmQsIGZvciB0aGUgbGFzdCBmb3JtLCB0aGUgdHlwZXMgYWxzbwogIC8vLyAgICBjcmVhdGVkIGJ5IHRoZSBjYWxsIHRvIEpTLiAgJ3ZhcicgKGFuZCAnJykgYXJlIGxpa2UgJ2R5bmFtaWMnIG9yCiAgLy8vICAgICdPYmplY3QnIGV4Y2VwdCB0aGF0ICdkeW5hbWljJyB3b3VsZCBpbmRpY2F0ZSB0aGF0IG9iamVjdHMgb2YgYW55IHR5cGUKICAvLy8gICAgYXJlIGNyZWF0ZWQsIHdoaWNoIGRlZmVhdHMgdHJlZS1zaGFraW5nLiAgVGhpbmsgb2YgJ3ZhcicgKGFuZCAnJykgYXMKICAvLy8gICAgbWVhbmluZyAnYW55IHByZS1leGlzdGluZyB0eXBlJy4KICAvLy8KICAvLy8gICAgVGhlIHR5cGVzIFRpIGFyZSBub24tbnVsbGFibGUsIHNvIGFkZCBjbGFzcyBgTnVsbGAgdG8gc3BlY2lmeSBhCiAgLy8vICAgIG51bGxhYmxlIHR5cGUsIGUuZyBgJ1N0cmluZ3xOdWxsJ2AuCiAgLy8vCiAgLy8vIDIpIEEgc2VxdWVuY2Ugb2YgPHRhZz46PHZhbHVlPiBwYWlycyBvZiB0aGUgZm9sbG93aW5nIGtpbmRzCiAgLy8vCiAgLy8vICAgICAgICA8dHlwZS10YWc+Ojx0eXBlLXN0cmluZz4KICAvLy8gICAgICAgIDxlZmZlY3QtdGFnPjo8ZWZmZWN0LXN0cmluZz4KICAvLy8gICAgICAgIHRocm93czo8dGhyb3dzLXN0cmluZz4KICAvLy8gICAgICAgIGd2bjo8Z3ZuLXN0cmluZz4KICAvLy8gICAgICAgIG5ldzo8bmV3LXN0cmluZz4KICAvLy8KICAvLy8gICAgQSA8dHlwZS10YWc+IGlzIGVpdGhlciAncmV0dXJucycgb3IgJ2NyZWF0ZXMnIGFuZCA8dHlwZS1zdHJpbmc+IGlzIGEKICAvLy8gICAgdHlwZSBzdHJpbmcgbGlrZSBpbiAxKS4gVGhlIHR5cGUgc3RyaW5nIG1hcmtlZCBieSAncmV0dXJucycgZGVmaW5lcyB0aGUKICAvLy8gICAgdHlwZXMgcmV0dXJuZWQgYW5kICdjcmVhdGVzJyBkZWZpbmVzIHRoZSB0eXBlcyBjcmVhdGVkIGJ5IHRoZSBjYWxsIHRvCiAgLy8vICAgIEpTLiBJZiAnY3JlYXRlcycgaXMgbWlzc2luZywgaXQgZGVmYXVsdHMgdG8gJ3JldHVybnMnLgogIC8vLwogIC8vLyAgICBBbiA8ZWZmZWN0LXRhZz4gaXMgZWl0aGVyICdlZmZlY3RzJyBvciAnZGVwZW5kcycgYW5kIDxlZmZlY3Qtc3RyaW5nPiBpcwogIC8vLyAgICBlaXRoZXIgJ2FsbCcsICdub25lJyBvciBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mICduby1pbmRleCcsCiAgLy8vICAgICduby1pbnN0YW5jZScsICduby1zdGF0aWMnLgogIC8vLwogIC8vLyAgICBUaGUgZmxhZyAnYWxsJyBpbmRpY2F0ZXMgdGhhdCB0aGUgY2FsbCBhZmZlY3RzL2RlcGVuZHMgb24gZXZlcnkKICAvLy8gICAgc2lkZS1lZmZlY3QuIFRoZSBmbGFnICdub25lJyBpbmRpY2F0ZXMgdGhhdCB0aGUgY2FsbCBkb2VzIG5vdCBhZmZlY3QKICAvLy8gICAgKHJlc3AuIGRlcGVuZHMgb24pIGFueXRoaW5nLgogIC8vLwogIC8vLyAgICAnbm8taW5kZXgnIGluZGljYXRlcyB0aGF0IHRoZSBjYWxsIGRvZXMgKm5vdCogZG8gYW55IGFycmF5IGluZGV4LXN0b3JlCiAgLy8vICAgIChmb3IgJ2VmZmVjdHMnKSwgb3IgZGVwZW5kcyBvbiBhbnkgdmFsdWUgaW4gYW4gYXJyYXkgKGZvciAnZGVwZW5kcycpLgogIC8vLyAgICBUaGUgZmxhZyAnbm8taW5zdGFuY2UnIGluZGljYXRlcyB0aGF0IHRoZSBjYWxsIGRvZXMgbm90IG1vZGlmeSAocmVzcC4KICAvLy8gICAgZGVwZW5kcyBvbikgYW55IGluc3RhbmNlIHZhcmlhYmxlLiBTaW1pbGFybHkgc3RhdGljIHZhcmlhYmxlcyBhcmUKICAvLy8gICAgaW5kaWNhdGVkIHdpdGggJ25vLXN0YXRpYycuIFRoZSBmbGFncyAnZWZmZWN0cycgYW5kICdkZXBlbmRzJyBtdXN0IGJlCiAgLy8vICAgIHVzZWQgaW4gdW5pc29uIChlaXRoZXIgYm90aCBhcmUgcHJlc2VudCBvciBub25lIGlzKS4KICAvLy8KICAvLy8gICAgVGhlIDx0aHJvd3Mtc3RyaW5nPiB2YWx1ZXMgYXJlICduZXZlcicsICdtYXknLCAnbnVsbCgxKScsIGFuZAogIC8vLyAgICAnbnVsbCgxKSttYXknLiAgVGhlIGRlZmF1bHQgaWYgdW5zcGVjaWZpZWQgaXMgJ21heScuICdudWxsKDEpJyBtZWFucwogIC8vLyAgICB0aGF0IHRoZSB0ZW1wbGF0ZSBleHByZXNzaW9uIHRocm93cyBpZiBhbmQgb25seSBpZiB0aGUgZmlyc3QgdGVtcGxhdGUKICAvLy8gICAgcGFyYW1ldGVyIGlzIGBudWxsYCBvciBgdW5kZWZpbmVkYCwgYW5kICdudWxsKDEpK21heScgdGhyb3dzIGlmIHRoZQogIC8vLyAgICBmaXJzdCBhcmd1bWVudCBpcyBgbnVsbGAgLyBgdW5kZWZpbmVkYCwgYW5kIHRoZW4gbWF5IHRocm93IGZvciBvdGhlcgogIC8vLyAgICByZWFzb25zLgogIC8vLwogIC8vLyAgICA8Z3ZuLXN0cmluZz4gdmFsdWVzIGFyZSAndHJ1ZScgYW5kICdmYWxzZScuIFRoZSBkZWZhdWx0IGlmIHVuc3BlY2lmaWVkCiAgLy8vICAgIGlzICdmYWxzZScuCiAgLy8vCiAgLy8vICAgIDxuZXctc3RyaW5nPiB2YWx1ZXMgYXJlICd0cnVlJyBhbmQgJ2ZhbHNlJy4gVGhlIGRlZmF1bHQgaWYgdW5zcGVjaWZpZWQKICAvLy8gICAgaXMgJ2ZhbHNlJy4gQSAndHJ1ZScgdmFsdWUgbWVhbnMgdGhhdCBlYWNoIGV2YWx1YXRpb24gcmV0dXJucyBhIGZyZXNoCiAgLy8vICAgIChuZXcpIG9iamVjdCB0aGF0IGNhbm5vdCBiZSB1bmFsaWFzZWQgd2l0aCBleGlzdGluZyBvYmplY3RzLgogIC8vLwogIC8vLyAgICBFYWNoIHRhZyBraW5kIChpbmNsdWRpbmcgdGhlICd0eXBlLXRhZydzKSBjYW4gb25seSBvY2N1ciBvbmNlIGluIHRoZQogIC8vLyAgICBzZXF1ZW5jZS4KICAvLy8KICAvLy8gW3NwZWNTdHJpbmddIGlzIHRoZSBzcGVjaWZpY2F0aW9uIHN0cmluZywgW2xvb2t1cFR5cGVdIHJlc29sdmVzIG5hbWVkCiAgLy8vIHR5cGVzIGludG8gdHlwZSB2YWx1ZXMsIFt0eXBlc1JldHVybmVkXSBhbmQgW3R5cGVzSW5zdGFudGlhdGVkXSBjb2xsZWN0cwogIC8vLyB0aGUgdHlwZXMgZGVmaW5lZCBieSB0aGUgc3BlY2lmaWNhdGlvbiBzdHJpbmcsIGFuZCBbb2JqZWN0VHlwZV0gYW5kCiAgLy8vIFtudWxsVHlwZV0gZGVmaW5lIHRoZSB0eXBlcyBmb3IgYE9iamVjdGAgYW5kIGBOdWxsYCwgcmVzcGVjdGl2ZWx5LiBUaGUKICAvLy8gbGF0dGVyIGlzIHVzZWQgZm9yIHRoZSB0eXBlIHN0cmluZ3Mgb2YgdGhlIGZvcm0gJycgYW5kICd2YXInLgogIC8vLyBbdmFsaWRUYWdzXSBjYW4gYmUgdXNlZCB0byByZXN0cmljdCB3aGljaCB0YWdzIGFyZSBhY2NlcHRlZC4KICBzdGF0aWMgdm9pZCBwcm9jZXNzU3BlY1N0cmluZygKICAgICAgRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyLCBTcGFubmFibGUgc3Bhbm5hYmxlLCBTdHJpbmcgc3BlY1N0cmluZywKICAgICAge0l0ZXJhYmxlPFN0cmluZz4gdmFsaWRUYWdzLAogICAgICB2b2lkIHNldFNpZGVFZmZlY3RzKFNpZGVFZmZlY3RzIG5ld0VmZmVjdHMpLAogICAgICB2b2lkIHNldFRocm93cyhOYXRpdmVUaHJvd0JlaGF2aW9yIHRocm93S2luZCksCiAgICAgIHZvaWQgc2V0SXNBbGxvY2F0aW9uKGJvb2wgaXNBbGxvY2F0aW9uKSwKICAgICAgdm9pZCBzZXRVc2VHdm4oYm9vbCB1c2VHdm4pLAogICAgICBUeXBlTG9va3VwIGxvb2t1cFR5cGUsCiAgICAgIExpc3QgdHlwZXNSZXR1cm5lZCwKICAgICAgTGlzdCB0eXBlc0luc3RhbnRpYXRlZCwKICAgICAgb2JqZWN0VHlwZSwKICAgICAgbnVsbFR5cGV9KSB7CiAgICBib29sIHNlZW5FcnJvciA9IGZhbHNlOwoKICAgIHZvaWQgcmVwb3J0RXJyb3IoU3RyaW5nIG1lc3NhZ2UpIHsKICAgICAgc2VlbkVycm9yID0gdHJ1ZTsKICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgc3Bhbm5hYmxlLCBNZXNzYWdlS2luZC5HRU5FUklDLCB7J3RleHQnOiBtZXNzYWdlfSk7CiAgICB9CgogICAgY29uc3QgTGlzdDxTdHJpbmc+IGtub3duVGFncyA9IGNvbnN0IFsKICAgICAgJ2NyZWF0ZXMnLAogICAgICAncmV0dXJucycsCiAgICAgICdkZXBlbmRzJywKICAgICAgJ2VmZmVjdHMnLAogICAgICAndGhyb3dzJywKICAgICAgJ2d2bicsCiAgICAgICduZXcnCiAgICBdOwoKICAgIC8vLyBSZXNvbHZlIGEgdHlwZSBzdHJpbmcgb2Ygb25lIG9mIHRoZSB0aHJlZSBmb3JtczoKICAgIC8vLyAqICAndm9pZCcgLSBpbiB3aGljaCBjYXNlIFtvblZvaWRdIGlzIGNhbGxlZCwKICAgIC8vLyAqICAnJyBvciAndmFyJyAtIGluIHdoaWNoIGNhc2UgW29uVmFyXSBpcyBjYWxsZWQsCiAgICAvLy8gKiAgJ1QxfC4uLnxUbicgLSBpbiB3aGljaCBjYXNlIFtvblR5cGVdIGlzIGNhbGxlZCBmb3IgZWFjaCByZXNvbHZlZCBUaS4KICAgIHZvaWQgcmVzb2x2ZVR5cGVzU3RyaW5nKFN0cmluZyB0eXBlc1N0cmluZywKICAgICAgICB7b25Wb2lkKCksIG9uVmFyKCksIG9uVHlwZSh0eXBlKX0pIHsKICAgICAgLy8gVmFyaW91cyB0aGluZ3MgdGhhdCBhcmUgbm90IGluIGZhY3QgdHlwZXMuCiAgICAgIGlmICh0eXBlc1N0cmluZyA9PSAndm9pZCcpIHsKICAgICAgICBpZiAob25Wb2lkICE9IG51bGwpIHsKICAgICAgICAgIG9uVm9pZCgpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKHR5cGVzU3RyaW5nID09ICcnIHx8IHR5cGVzU3RyaW5nID09ICd2YXInKSB7CiAgICAgICAgaWYgKG9uVmFyICE9IG51bGwpIHsKICAgICAgICAgIG9uVmFyKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBmb3IgKGZpbmFsIHR5cGVTdHJpbmcgaW4gdHlwZXNTdHJpbmcuc3BsaXQoJ3wnKSkgewogICAgICAgIG9uVHlwZShfcGFyc2VUeXBlKHR5cGVTdHJpbmcudHJpbSgpLCBsb29rdXBUeXBlKSk7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoIXNwZWNTdHJpbmcuY29udGFpbnMoJzsnKSAmJiAhc3BlY1N0cmluZy5jb250YWlucygnOicpKSB7CiAgICAgIC8vIEZvcm0gKDEpLCB0eXBlcyBvciBwc2V1ZG8tdHlwZXMgbGlrZSAndm9pZCcgYW5kICd2YXInLgogICAgICByZXNvbHZlVHlwZXNTdHJpbmcoc3BlY1N0cmluZy50cmltKCksIG9uVmFyOiAoKSB7CiAgICAgICAgdHlwZXNSZXR1cm5lZC5hZGQob2JqZWN0VHlwZSk7CiAgICAgICAgdHlwZXNSZXR1cm5lZC5hZGQobnVsbFR5cGUpOwogICAgICB9LCBvblR5cGU6ICh0eXBlKSB7CiAgICAgICAgdHlwZXNJbnN0YW50aWF0ZWQuYWRkKHR5cGUpOwogICAgICAgIHR5cGVzUmV0dXJuZWQuYWRkKHR5cGUpOwogICAgICB9KTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIExpc3Q8U3RyaW5nPiBzcGVjcyA9IHNwZWNTdHJpbmcuc3BsaXQoJzsnKS5tYXAoKHMpID0+IHMudHJpbSgpKS50b0xpc3QoKTsKICAgIGlmIChzcGVjcy5sYXN0ID09ICIiKSBzcGVjcy5yZW1vdmVMYXN0KCk7IC8vIEFsbG93IHNlcGFyYXRvciB0byB0ZXJtaW5hdGUuCgogICAgYXNzZXJ0KAogICAgICAgIHZhbGlkVGFncyA9PSBudWxsIHx8ICh2YWxpZFRhZ3MudG9TZXQoKS4ucmVtb3ZlQWxsKHZhbGlkVGFncykpLmlzRW1wdHkpOwogICAgaWYgKHZhbGlkVGFncyA9PSBudWxsKSB2YWxpZFRhZ3MgPSBrbm93blRhZ3M7CgogICAgTWFwPFN0cmluZywgU3RyaW5nPiB2YWx1ZXMgPSA8U3RyaW5nLCBTdHJpbmc+e307CgogICAgZm9yIChTdHJpbmcgc3BlYyBpbiBzcGVjcykgewogICAgICBMaXN0PFN0cmluZz4gdGFnQW5kVmFsdWUgPSBzcGVjLnNwbGl0KCc6Jyk7CiAgICAgIGlmICh0YWdBbmRWYWx1ZS5sZW5ndGggIT0gMikgewogICAgICAgIHJlcG9ydEVycm9yKCJJbnZhbGlkIDx0YWc+Ojx2YWx1ZT4gcGFpciAnJHNwZWMnLiIpOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIFN0cmluZyB0YWcgPSB0YWdBbmRWYWx1ZVswXS50cmltKCk7CiAgICAgIFN0cmluZyB2YWx1ZSA9IHRhZ0FuZFZhbHVlWzFdLnRyaW0oKTsKCiAgICAgIGlmICh2YWxpZFRhZ3MuY29udGFpbnModGFnKSkgewogICAgICAgIGlmICh2YWx1ZXNbdGFnXSA9PSBudWxsKSB7CiAgICAgICAgICB2YWx1ZXNbdGFnXSA9IHZhbHVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXBvcnRFcnJvcigiRHVwbGljYXRlIHRhZyAnJHRhZycuIik7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmIChrbm93blRhZ3MuY29udGFpbnModGFnKSkgewogICAgICAgICAgcmVwb3J0RXJyb3IoIlRhZyAnJHRhZycgaXMgbm90IHZhbGlkIGhlcmUuIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlcG9ydEVycm9yKCJVbmtub3duIHRhZyAnJHRhZycuIik7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgLy8gRW51bS1saWtlIHRhZ3MgYXJlIGxvb2tlZCB1cCBpbiBhIG1hcC4gVHJ1ZSBzaWduYXR1cmUgaXM6CiAgICAvLwogICAgLy8gIFQgdGFnVmFsdWVMb29rdXA8VD4oU3RyaW5nIHRhZywgTWFwPFN0cmluZywgVD4gbWFwKTsKICAgIC8vCiAgICBkeW5hbWljIHRhZ1ZhbHVlTG9va3VwKFN0cmluZyB0YWcsIE1hcDxTdHJpbmcsIGR5bmFtaWM+IG1hcCkgewogICAgICBTdHJpbmcgdGFnU3RyaW5nID0gdmFsdWVzW3RhZ107CiAgICAgIGlmICh0YWdTdHJpbmcgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIHZhciB2YWx1ZSA9IG1hcFt0YWdTdHJpbmddOwogICAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICAgIHJlcG9ydEVycm9yKCJVbmtub3duICckdGFnJyBzcGVjaWZpY2F0aW9uOiAnJHRhZ1N0cmluZycuIik7CiAgICAgIH0KICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQoKICAgIFN0cmluZyByZXR1cm5zID0gdmFsdWVzWydyZXR1cm5zJ107CiAgICBpZiAocmV0dXJucyAhPSBudWxsKSB7CiAgICAgIHJlc29sdmVUeXBlc1N0cmluZyhyZXR1cm5zLCBvblZhcjogKCkgewogICAgICAgIHR5cGVzUmV0dXJuZWQuYWRkKG9iamVjdFR5cGUpOwogICAgICAgIHR5cGVzUmV0dXJuZWQuYWRkKG51bGxUeXBlKTsKICAgICAgfSwgb25UeXBlOiAodHlwZSkgewogICAgICAgIHR5cGVzUmV0dXJuZWQuYWRkKHR5cGUpOwogICAgICB9KTsKICAgIH0KCiAgICBTdHJpbmcgY3JlYXRlcyA9IHZhbHVlc1snY3JlYXRlcyddOwogICAgaWYgKGNyZWF0ZXMgIT0gbnVsbCkgewogICAgICByZXNvbHZlVHlwZXNTdHJpbmcoY3JlYXRlcywgb25Wb2lkOiAoKSB7CiAgICAgICAgcmVwb3J0RXJyb3IoIkludmFsaWQgdHlwZSBzdHJpbmcgJ2NyZWF0ZXM6JGNyZWF0ZXMnIik7CiAgICAgIH0sIG9uVHlwZTogKHR5cGUpIHsKICAgICAgICB0eXBlc0luc3RhbnRpYXRlZC5hZGQodHlwZSk7CiAgICAgIH0pOwogICAgfSBlbHNlIGlmIChyZXR1cm5zICE9IG51bGwpIHsKICAgICAgcmVzb2x2ZVR5cGVzU3RyaW5nKHJldHVybnMsIG9uVHlwZTogKHR5cGUpIHsKICAgICAgICB0eXBlc0luc3RhbnRpYXRlZC5hZGQodHlwZSk7CiAgICAgIH0pOwogICAgfQoKICAgIGNvbnN0IHRocm93c09wdGlvbiA9IDxTdHJpbmcsIE5hdGl2ZVRocm93QmVoYXZpb3I+ewogICAgICAnbmV2ZXInOiBOYXRpdmVUaHJvd0JlaGF2aW9yLk5FVkVSLAogICAgICAnbWF5JzogTmF0aXZlVGhyb3dCZWhhdmlvci5NQVksCiAgICAgICdudWxsKDEpJzogTmF0aXZlVGhyb3dCZWhhdmlvci5OVUxMX05TTSwKICAgICAgJ251bGwoMSkrbWF5JzogTmF0aXZlVGhyb3dCZWhhdmlvci5OVUxMX05TTV9USEVOX01BWSwKICAgIH07CgogICAgY29uc3QgYm9vbE9wdGlvbnMgPSA8U3RyaW5nLCBib29sPnsndHJ1ZSc6IHRydWUsICdmYWxzZSc6IGZhbHNlfTsKCiAgICBTaWRlRWZmZWN0cyBzaWRlRWZmZWN0cyA9CiAgICAgICAgcHJvY2Vzc0VmZmVjdHMocmVwb3J0RXJyb3IsIHZhbHVlc1snZWZmZWN0cyddLCB2YWx1ZXNbJ2RlcGVuZHMnXSk7CiAgICBOYXRpdmVUaHJvd0JlaGF2aW9yIHRocm93c0tpbmQgPSB0YWdWYWx1ZUxvb2t1cCgndGhyb3dzJywgdGhyb3dzT3B0aW9uKTsKICAgIGJvb2wgaXNBbGxvY2F0aW9uID0gdGFnVmFsdWVMb29rdXAoJ25ldycsIGJvb2xPcHRpb25zKTsKICAgIGJvb2wgdXNlR3ZuID0gdGFnVmFsdWVMb29rdXAoJ2d2bicsIGJvb2xPcHRpb25zKTsKCiAgICBpZiAoaXNBbGxvY2F0aW9uID09IHRydWUgJiYgdXNlR3ZuID09IHRydWUpIHsKICAgICAgcmVwb3J0RXJyb3IoIiduZXcnIGFuZCAnZ3ZuJyBhcmUgaW5jb21wYXRpYmxlIik7CiAgICB9CgogICAgaWYgKHNlZW5FcnJvcikgcmV0dXJuOyAvLyBBdm9pZCBjYWxsYmFja3MuCgogICAgLy8gVE9ETyhzcmEpOiBTaW1wbGlmeSBbdGhyb3dCZWhhdmlvcl0gdXNpbmcgW3NpZGVFZmZlY3RzXS4KCiAgICBpZiAoc2lkZUVmZmVjdHMgIT0gbnVsbCkgc2V0U2lkZUVmZmVjdHMoc2lkZUVmZmVjdHMpOwogICAgaWYgKHRocm93c0tpbmQgIT0gbnVsbCkgc2V0VGhyb3dzKHRocm93c0tpbmQpOwogICAgaWYgKGlzQWxsb2NhdGlvbiAhPSBudWxsKSBzZXRJc0FsbG9jYXRpb24oaXNBbGxvY2F0aW9uKTsKICAgIGlmICh1c2VHdm4gIT0gbnVsbCkgc2V0VXNlR3ZuKHVzZUd2bik7CiAgfQoKICBzdGF0aWMgU2lkZUVmZmVjdHMgcHJvY2Vzc0VmZmVjdHMoCiAgICAgIHZvaWQgcmVwb3J0RXJyb3IoU3RyaW5nIG1lc3NhZ2UpLCBTdHJpbmcgZWZmZWN0cywgU3RyaW5nIGRlcGVuZHMpIHsKICAgIGlmIChlZmZlY3RzID09IG51bGwgJiYgZGVwZW5kcyA9PSBudWxsKSByZXR1cm4gbnVsbDsKCiAgICBpZiAoZWZmZWN0cyA9PSBudWxsIHx8IGRlcGVuZHMgPT0gbnVsbCkgewogICAgICByZXBvcnRFcnJvcigiJ2VmZmVjdHMnIGFuZCAnZGVwZW5kcycgbXVzdCBvY2N1ciB0b2dldGhlci4iKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgU2lkZUVmZmVjdHMgc2lkZUVmZmVjdHMgPSBuZXcgU2lkZUVmZmVjdHMoKTsKICAgIGlmIChlZmZlY3RzID09ICJub25lIikgewogICAgICBzaWRlRWZmZWN0cy5jbGVhckFsbFNpZGVFZmZlY3RzKCk7CiAgICB9IGVsc2UgaWYgKGVmZmVjdHMgPT0gImFsbCIpIHsKICAgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcuCiAgICB9IGVsc2UgewogICAgICBMaXN0PFN0cmluZz4gc3BsaXRFZmZlY3RzID0gZWZmZWN0cy5zcGxpdCgiLCIpOwogICAgICBpZiAoc3BsaXRFZmZlY3RzLmlzRW1wdHkpIHsKICAgICAgICByZXBvcnRFcnJvcigiTWlzc2luZyBzaWRlLWVmZmVjdCBmbGFnLiIpOwogICAgICB9CiAgICAgIGZvciAoU3RyaW5nIGVmZmVjdCBpbiBzcGxpdEVmZmVjdHMpIHsKICAgICAgICBzd2l0Y2ggKGVmZmVjdCkgewogICAgICAgICAgY2FzZSAibm8taW5kZXgiOgogICAgICAgICAgICBzaWRlRWZmZWN0cy5jbGVhckNoYW5nZXNJbmRleCgpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgIm5vLWluc3RhbmNlIjoKICAgICAgICAgICAgc2lkZUVmZmVjdHMuY2xlYXJDaGFuZ2VzSW5zdGFuY2VQcm9wZXJ0eSgpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgIm5vLXN0YXRpYyI6CiAgICAgICAgICAgIHNpZGVFZmZlY3RzLmNsZWFyQ2hhbmdlc1N0YXRpY1Byb3BlcnR5KCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmVwb3J0RXJyb3IoIlVucmVjb2duaXplZCBzaWRlLWVmZmVjdCBmbGFnOiAnJGVmZmVjdCcuIik7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgaWYgKGRlcGVuZHMgPT0gIm5vbmUiKSB7CiAgICAgIHNpZGVFZmZlY3RzLmNsZWFyQWxsRGVwZW5kZW5jaWVzKCk7CiAgICB9IGVsc2UgaWYgKGRlcGVuZHMgPT0gImFsbCIpIHsKICAgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcuCiAgICB9IGVsc2UgewogICAgICBMaXN0PFN0cmluZz4gc3BsaXREZXBlbmRlbmNpZXMgPSBkZXBlbmRzLnNwbGl0KCIsIik7CiAgICAgIGlmIChzcGxpdERlcGVuZGVuY2llcy5pc0VtcHR5KSB7CiAgICAgICAgcmVwb3J0RXJyb3IoIk1pc3Npbmcgc2lkZS1lZmZlY3QgZGVwZW5kZW5jeSBmbGFnLiIpOwogICAgICB9CiAgICAgIGZvciAoU3RyaW5nIGRlcGVuZGVuY3kgaW4gc3BsaXREZXBlbmRlbmNpZXMpIHsKICAgICAgICBzd2l0Y2ggKGRlcGVuZGVuY3kpIHsKICAgICAgICAgIGNhc2UgIm5vLWluZGV4IjoKICAgICAgICAgICAgc2lkZUVmZmVjdHMuY2xlYXJEZXBlbmRzT25JbmRleFN0b3JlKCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAibm8taW5zdGFuY2UiOgogICAgICAgICAgICBzaWRlRWZmZWN0cy5jbGVhckRlcGVuZHNPbkluc3RhbmNlUHJvcGVydHlTdG9yZSgpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgIm5vLXN0YXRpYyI6CiAgICAgICAgICAgIHNpZGVFZmZlY3RzLmNsZWFyRGVwZW5kc09uU3RhdGljUHJvcGVydHlTdG9yZSgpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJlcG9ydEVycm9yKCJVbnJlY29nbml6ZWQgc2lkZS1lZmZlY3QgZmxhZzogJyRkZXBlbmRlbmN5Jy4iKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gc2lkZUVmZmVjdHM7CiAgfQoKICAvLy8gQ29tcHV0ZSB0aGUgW05hdGl2ZUJlaGF2aW9yXSBmb3IgYSBjYWxsIHRvIHRoZSAnSlMnIGZ1bmN0aW9uIHdpdGggdGhlCiAgLy8vIGdpdmVuIFtzcGVjU3RyaW5nXSBhbmQgW2NvZGVTdHJpbmddIChmaXJzdCBhbmQgc2Vjb25kIGFyZ3VtZW50cykuCiAgc3RhdGljIE5hdGl2ZUJlaGF2aW9yIG9mSnNDYWxsKAogICAgICBTdHJpbmcgc3BlY1N0cmluZywKICAgICAgU3RyaW5nIGNvZGVTdHJpbmcsCiAgICAgIFR5cGVMb29rdXAgbG9va3VwVHlwZSwKICAgICAgU3Bhbm5hYmxlIHNwYW5uYWJsZSwKICAgICAgRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyLAogICAgICBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgewogICAgLy8gVGhlIGZpcnN0IGFyZ3VtZW50IG9mIGEgSlMtY2FsbCBpcyBhIHN0cmluZyBlbmNvZGluZyB2YXJpb3VzIGF0dHJpYnV0ZXMKICAgIC8vIG9mIHRoZSBjb2RlLgogICAgLy8KICAgIC8vICAnVHlwZTF8VHlwZTInLiAgQSB1bmlvbiB0eXBlLgogICAgLy8gICc9T2JqZWN0Jy4gICAgICBBIEphdmFTY3JpcHQgT2JqZWN0LCBubyBzdWJ0eXBlLgoKICAgIE5hdGl2ZUJlaGF2aW9yIGJlaGF2aW9yID0gbmV3IE5hdGl2ZUJlaGF2aW9yKCk7CgogICAgYmVoYXZpb3IuY29kZVRlbXBsYXRlVGV4dCA9IGNvZGVTdHJpbmc7CiAgICBiZWhhdmlvci5jb2RlVGVtcGxhdGUgPSBqcy5qcy5wYXJzZUZvcmVpZ25KUyhiZWhhdmlvci5jb2RlVGVtcGxhdGVUZXh0KTsKCiAgICBib29sIHNpZGVFZmZlY3RzQXJlRW5jb2RlZEluU3BlY1N0cmluZyA9IGZhbHNlOwoKICAgIHZvaWQgc2V0U2lkZUVmZmVjdHMoU2lkZUVmZmVjdHMgbmV3RWZmZWN0cykgewogICAgICBzaWRlRWZmZWN0c0FyZUVuY29kZWRJblNwZWNTdHJpbmcgPSB0cnVlOwogICAgICBiZWhhdmlvci5zaWRlRWZmZWN0cy5zZXRUbyhuZXdFZmZlY3RzKTsKICAgIH0KCiAgICBib29sIHRocm93QmVoYXZpb3JGcm9tU3BlY1N0cmluZyA9IGZhbHNlOwogICAgdm9pZCBzZXRUaHJvd3MoTmF0aXZlVGhyb3dCZWhhdmlvciB0aHJvd0JlaGF2aW9yKSB7CiAgICAgIHRocm93QmVoYXZpb3JGcm9tU3BlY1N0cmluZyA9IHRydWU7CiAgICAgIGJlaGF2aW9yLnRocm93QmVoYXZpb3IgPSB0aHJvd0JlaGF2aW9yOwogICAgfQoKICAgIHZvaWQgc2V0SXNBbGxvY2F0aW9uKGJvb2wgaXNBbGxvY2F0aW9uKSB7CiAgICAgIGJlaGF2aW9yLmlzQWxsb2NhdGlvbiA9IGlzQWxsb2NhdGlvbjsKICAgIH0KCiAgICB2b2lkIHNldFVzZUd2bihib29sIHVzZUd2bikgewogICAgICBiZWhhdmlvci51c2VHdm4gPSB1c2VHdm47CiAgICB9CgogICAgcHJvY2Vzc1NwZWNTdHJpbmcocmVwb3J0ZXIsIHNwYW5uYWJsZSwgc3BlY1N0cmluZywKICAgICAgICBzZXRTaWRlRWZmZWN0czogc2V0U2lkZUVmZmVjdHMsCiAgICAgICAgc2V0VGhyb3dzOiBzZXRUaHJvd3MsCiAgICAgICAgc2V0SXNBbGxvY2F0aW9uOiBzZXRJc0FsbG9jYXRpb24sCiAgICAgICAgc2V0VXNlR3ZuOiBzZXRVc2VHdm4sCiAgICAgICAgbG9va3VwVHlwZTogbG9va3VwVHlwZSwKICAgICAgICB0eXBlc1JldHVybmVkOiBiZWhhdmlvci50eXBlc1JldHVybmVkLAogICAgICAgIHR5cGVzSW5zdGFudGlhdGVkOiBiZWhhdmlvci50eXBlc0luc3RhbnRpYXRlZCwKICAgICAgICBvYmplY3RUeXBlOiBjb21tb25FbGVtZW50cy5vYmplY3RUeXBlLAogICAgICAgIG51bGxUeXBlOiBjb21tb25FbGVtZW50cy5udWxsVHlwZSk7CgogICAgaWYgKCFzaWRlRWZmZWN0c0FyZUVuY29kZWRJblNwZWNTdHJpbmcpIHsKICAgICAgbmV3IFNpZGVFZmZlY3RzVmlzaXRvcihiZWhhdmlvci5zaWRlRWZmZWN0cykKICAgICAgICAgIC52aXNpdChiZWhhdmlvci5jb2RlVGVtcGxhdGUuYXN0KTsKICAgIH0KICAgIGlmICghdGhyb3dCZWhhdmlvckZyb21TcGVjU3RyaW5nKSB7CiAgICAgIGJlaGF2aW9yLnRocm93QmVoYXZpb3IgPQogICAgICAgICAgbmV3IFRocm93QmVoYXZpb3JWaXNpdG9yKCkuYW5hbHl6ZShiZWhhdmlvci5jb2RlVGVtcGxhdGUuYXN0KTsKICAgIH0KCiAgICByZXR1cm4gYmVoYXZpb3I7CiAgfQoKICBzdGF0aWMgdm9pZCBfZmlsbE5hdGl2ZUJlaGF2aW9yT2ZCdWlsdGluT3JFbWJlZGRlZEdsb2JhbCgKICAgICAgTmF0aXZlQmVoYXZpb3IgYmVoYXZpb3IsCiAgICAgIFNwYW5uYWJsZSBzcGFubmFibGUsCiAgICAgIFN0cmluZyBzcGVjU3RyaW5nLAogICAgICBUeXBlTG9va3VwIGxvb2t1cFR5cGUsCiAgICAgIERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlciwKICAgICAgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIHtMaXN0PFN0cmluZz4gdmFsaWRUYWdzfSkgewogICAgdm9pZCBzZXRTaWRlRWZmZWN0cyhTaWRlRWZmZWN0cyBuZXdFZmZlY3RzKSB7CiAgICAgIGJlaGF2aW9yLnNpZGVFZmZlY3RzLnNldFRvKG5ld0VmZmVjdHMpOwogICAgfQoKICAgIHByb2Nlc3NTcGVjU3RyaW5nKHJlcG9ydGVyLCBzcGFubmFibGUsIHNwZWNTdHJpbmcsCiAgICAgICAgdmFsaWRUYWdzOiB2YWxpZFRhZ3MsCiAgICAgICAgbG9va3VwVHlwZTogbG9va3VwVHlwZSwKICAgICAgICBzZXRTaWRlRWZmZWN0czogc2V0U2lkZUVmZmVjdHMsCiAgICAgICAgdHlwZXNSZXR1cm5lZDogYmVoYXZpb3IudHlwZXNSZXR1cm5lZCwKICAgICAgICB0eXBlc0luc3RhbnRpYXRlZDogYmVoYXZpb3IudHlwZXNJbnN0YW50aWF0ZWQsCiAgICAgICAgb2JqZWN0VHlwZTogY29tbW9uRWxlbWVudHMub2JqZWN0VHlwZSwKICAgICAgICBudWxsVHlwZTogY29tbW9uRWxlbWVudHMubnVsbFR5cGUpOwogIH0KCiAgc3RhdGljIE5hdGl2ZUJlaGF2aW9yIG9mSnNCdWlsdGluQ2FsbCgKICAgICAgU3RyaW5nIHNwZWNTdHJpbmcsCiAgICAgIFR5cGVMb29rdXAgbG9va3VwVHlwZSwKICAgICAgU3Bhbm5hYmxlIHNwYW5uYWJsZSwKICAgICAgRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyLAogICAgICBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgewogICAgTmF0aXZlQmVoYXZpb3IgYmVoYXZpb3IgPSBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKICAgIGJlaGF2aW9yLnNpZGVFZmZlY3RzLnNldFRvKG5ldyBTaWRlRWZmZWN0cygpKTsKICAgIF9maWxsTmF0aXZlQmVoYXZpb3JPZkJ1aWx0aW5PckVtYmVkZGVkR2xvYmFsKAogICAgICAgIGJlaGF2aW9yLCBzcGFubmFibGUsIHNwZWNTdHJpbmcsIGxvb2t1cFR5cGUsIHJlcG9ydGVyLCBjb21tb25FbGVtZW50cyk7CiAgICByZXR1cm4gYmVoYXZpb3I7CiAgfQoKICBzdGF0aWMgTmF0aXZlQmVoYXZpb3Igb2ZKc0VtYmVkZGVkR2xvYmFsQ2FsbCgKICAgICAgU3RyaW5nIHNwZWNTdHJpbmcsCiAgICAgIFR5cGVMb29rdXAgbG9va3VwVHlwZSwKICAgICAgU3Bhbm5hYmxlIHNwYW5uYWJsZSwKICAgICAgRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyLAogICAgICBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgewogICAgTmF0aXZlQmVoYXZpb3IgYmVoYXZpb3IgPSBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKICAgIC8vIFRPRE8oc3JhKTogQWxsb3cgdGhlIHVzZSBzaXRlIHRvIG92ZXJyaWRlIHRoZXNlIGRlZmF1bHRzLgogICAgLy8gRW1iZWRkZWQgZ2xvYmFscyBhcmUgdXN1YWxseSBwcmUtY29tcHV0ZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIEphdmFTY3JpcHQKICAgIC8vIGZ1bmN0aW9ucyB0aGF0IG5ldmVyIGNoYW5nZS4KICAgIGJlaGF2aW9yLnNpZGVFZmZlY3RzLnNldFRvKG5ldyBTaWRlRWZmZWN0cy5lbXB0eSgpKTsKICAgIGJlaGF2aW9yLnRocm93QmVoYXZpb3IgPSBOYXRpdmVUaHJvd0JlaGF2aW9yLk5FVkVSOwogICAgX2ZpbGxOYXRpdmVCZWhhdmlvck9mQnVpbHRpbk9yRW1iZWRkZWRHbG9iYWwoCiAgICAgICAgYmVoYXZpb3IsIHNwYW5uYWJsZSwgc3BlY1N0cmluZywgbG9va3VwVHlwZSwgcmVwb3J0ZXIsIGNvbW1vbkVsZW1lbnRzLAogICAgICAgIHZhbGlkVGFnczogWydyZXR1cm5zJywgJ2NyZWF0ZXMnXSk7CiAgICByZXR1cm4gYmVoYXZpb3I7CiAgfQoKICBzdGF0aWMgZHluYW1pYyAvKkRhcnRUeXBlfFNwZWNpYWxUeXBlKi8gX3BhcnNlVHlwZSgKICAgICAgU3RyaW5nIHR5cGVTdHJpbmcsIFR5cGVMb29rdXAgbG9va3VwVHlwZSkgewogICAgaWYgKHR5cGVTdHJpbmcgPT0gJz1PYmplY3QnKSByZXR1cm4gU3BlY2lhbFR5cGUuSnNPYmplY3Q7CiAgICBpZiAodHlwZVN0cmluZyA9PSAnZHluYW1pYycpIHsKICAgICAgcmV0dXJuIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICB9CiAgICBpbnQgaW5kZXggPSB0eXBlU3RyaW5nLmluZGV4T2YoJzwnKTsKICAgIHZhciB0eXBlID0gbG9va3VwVHlwZSh0eXBlU3RyaW5nLCByZXF1aXJlZDogaW5kZXggPT0gLTEpOwogICAgaWYgKHR5cGUgIT0gbnVsbCkgcmV0dXJuIHR5cGU7CgogICAgaWYgKGluZGV4ICE9IC0xKSB7CiAgICAgIHR5cGUgPSBsb29rdXBUeXBlKHR5cGVTdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KSwgcmVxdWlyZWQ6IHRydWUpOwogICAgICBpZiAodHlwZSAhPSBudWxsKSB7CiAgICAgICAgLy8gVE9ETyhzcmEpOiBQYXJzZSB0eXBlIHBhcmFtZXRlcnMuCiAgICAgICAgcmV0dXJuIHR5cGU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBjb25zdCBEeW5hbWljVHlwZSgpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgQmVoYXZpb3JCdWlsZGVyIHsKICBDb21tb25FbGVtZW50cyBnZXQgY29tbW9uRWxlbWVudHM7CiAgRGlhZ25vc3RpY1JlcG9ydGVyIGdldCByZXBvcnRlcjsKICBOYXRpdmVCYXNpY0RhdGEgZ2V0IG5hdGl2ZUJhc2ljRGF0YTsKICBib29sIGdldCB0cnVzdEpTSW50ZXJvcFR5cGVBbm5vdGF0aW9uczsKICBFbGVtZW50RW52aXJvbm1lbnQgZ2V0IGVsZW1lbnRFbnZpcm9ubWVudDsKCiAgTmF0aXZlQmVoYXZpb3IgX2JlaGF2aW9yOwoKICB2b2lkIF9vdmVycmlkZVdpdGhBbm5vdGF0aW9ucyhJdGVyYWJsZTxTdHJpbmc+IGNyZWF0ZXNBbm5vdGF0aW9ucywKICAgICAgSXRlcmFibGU8U3RyaW5nPiByZXR1cm5zQW5ub3RhdGlvbnMsIFR5cGVMb29rdXAgbG9va3VwVHlwZSkgewogICAgaWYgKGNyZWF0ZXNBbm5vdGF0aW9ucy5pc0VtcHR5ICYmIHJldHVybnNBbm5vdGF0aW9ucy5pc0VtcHR5KSByZXR1cm47CgogICAgTGlzdCBjcmVhdGVzID0gX2NvbGxlY3QoY3JlYXRlc0Fubm90YXRpb25zLCBsb29rdXBUeXBlKTsKICAgIExpc3QgcmV0dXJucyA9IF9jb2xsZWN0KHJldHVybnNBbm5vdGF0aW9ucywgbG9va3VwVHlwZSk7CgogICAgaWYgKGNyZWF0ZXMgIT0gbnVsbCkgewogICAgICBfYmVoYXZpb3IudHlwZXNJbnN0YW50aWF0ZWQKICAgICAgICAuLmNsZWFyKCkKICAgICAgICAuLmFkZEFsbChjcmVhdGVzKTsKICAgIH0KICAgIGlmIChyZXR1cm5zICE9IG51bGwpIHsKICAgICAgX2JlaGF2aW9yLnR5cGVzUmV0dXJuZWQKICAgICAgICAuLmNsZWFyKCkKICAgICAgICAuLmFkZEFsbChyZXR1cm5zKTsKICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIGEgbGlzdCBvZiB0eXBlIGNvbnN0cmFpbnRzIGZyb20gdGhlIGFubm90YXRpb25zIG9mCiAgLy8vIFthbm5vdGF0aW9uQ2xhc3NdLgogIC8vLyBSZXR1cm5zIGBudWxsYCBpZiBubyBjb25zdHJhaW50cy4KICBMaXN0IF9jb2xsZWN0KEl0ZXJhYmxlPFN0cmluZz4gYW5ub3RhdGlvbnMsIFR5cGVMb29rdXAgbG9va3VwVHlwZSkgewogICAgdmFyIHR5cGVzID0gbnVsbDsKICAgIGZvciAoU3RyaW5nIHNwZWNTdHJpbmcgaW4gYW5ub3RhdGlvbnMpIHsKICAgICAgZm9yIChmaW5hbCB0eXBlU3RyaW5nIGluIHNwZWNTdHJpbmcuc3BsaXQoJ3wnKSkgewogICAgICAgIHZhciB0eXBlID0gTmF0aXZlQmVoYXZpb3IuX3BhcnNlVHlwZSh0eXBlU3RyaW5nLCBsb29rdXBUeXBlKTsKICAgICAgICBpZiAodHlwZXMgPT0gbnVsbCkgdHlwZXMgPSBbXTsKICAgICAgICB0eXBlcy5hZGQodHlwZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0eXBlczsKICB9CgogIC8vLyBNb2RlbHMgdGhlIGJlaGF2aW9yIG9mIGhhdmluZyBpbnN0YW5jZXMgb2YgW3R5cGVdIGVzY2FwZSBmcm9tIERhcnQgY29kZQogIC8vLyBpbnRvIG5hdGl2ZSBjb2RlLgogIHZvaWQgX2VzY2FwZShEYXJ0VHlwZSB0eXBlLCBib29sIGlzSnNJbnRlcm9wKSB7CiAgICB0eXBlID0gZWxlbWVudEVudmlyb25tZW50LmdldFVuYWxpYXNlZFR5cGUodHlwZSk7CiAgICBpZiAodHlwZSBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9IHR5cGU7CiAgICAgIC8vIEEgZnVuY3Rpb24gbWlnaHQgYmUgY2FsbGVkIGZyb20gbmF0aXZlIGNvZGUsIHBhc3NpbmcgdXMgbm92ZWwKICAgICAgLy8gcGFyYW1ldGVycy4KICAgICAgX2VzY2FwZShmdW5jdGlvblR5cGUucmV0dXJuVHlwZSwgaXNKc0ludGVyb3ApOwogICAgICBmb3IgKERhcnRUeXBlIHBhcmFtZXRlciBpbiBmdW5jdGlvblR5cGUucGFyYW1ldGVyVHlwZXMpIHsKICAgICAgICBfY2FwdHVyZShwYXJhbWV0ZXIsIGlzSnNJbnRlcm9wKTsKICAgICAgfQogICAgfQogIH0KCiAgLy8vIE1vZGVscyB0aGUgYmVoYXZpb3Igb2YgRGFydCBjb2RlIHJlY2VpdmluZyBpbnN0YW5jZXMgYW5kIG1ldGhvZHMgb2YgW3R5cGVdCiAgLy8vIGZyb20gbmF0aXZlIGNvZGUuICBXZSB1c3VhbGx5IHN0YXJ0IHRoZSBhbmFseXNpcyBieSBjYXB0dXJpbmcgYSBuYXRpdmUKICAvLy8gbWV0aG9kIHRoYXQgaGFzIGJlZW4gdXNlZC4KICAvLy8KICAvLy8gV2UgYXNzdW1lIHRoYXQgSlMtaW50ZXJvcCBBUElzIGNhbm5vdCBpbnN0YW50aWF0ZSBEYXJ0IHR5cGVzIG9yCiAgLy8vIG5vbi1KU0ludGVyb3AgbmF0aXZlIHR5cGVzLgogIHZvaWQgX2NhcHR1cmUoRGFydFR5cGUgdHlwZSwgYm9vbCBpc0pzSW50ZXJvcCkgewogICAgdHlwZSA9IGVsZW1lbnRFbnZpcm9ubWVudC5nZXRVbmFsaWFzZWRUeXBlKHR5cGUpOwogICAgaWYgKHR5cGUgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSB0eXBlOwogICAgICBfY2FwdHVyZShmdW5jdGlvblR5cGUucmV0dXJuVHlwZSwgaXNKc0ludGVyb3ApOwogICAgICBmb3IgKERhcnRUeXBlIHBhcmFtZXRlciBpbiBmdW5jdGlvblR5cGUucGFyYW1ldGVyVHlwZXMpIHsKICAgICAgICBfZXNjYXBlKHBhcmFtZXRlciwgaXNKc0ludGVyb3ApOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpZiAoIWlzSnNJbnRlcm9wKSB7CiAgICAgICAgX2JlaGF2aW9yLnR5cGVzSW5zdGFudGlhdGVkLmFkZCh0eXBlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlICYmCiAgICAgICAgICAgIG5hdGl2ZUJhc2ljRGF0YS5pc05hdGl2ZUNsYXNzKHR5cGUuZWxlbWVudCkpIHsKICAgICAgICAgIC8vIEFueSBkZWNsYXJlZCBuYXRpdmUgb3IgaW50ZXJvcCB0eXBlIChpc05hdGl2ZSBpbXBsaWVzIGlzSnNJbnRlcm9wKQogICAgICAgICAgLy8gaXMgYXNzdW1lZCB0byBiZSBhbGxvY2F0ZWQuCiAgICAgICAgICBfYmVoYXZpb3IudHlwZXNJbnN0YW50aWF0ZWQuYWRkKHR5cGUpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCF0cnVzdEpTSW50ZXJvcFR5cGVBbm5vdGF0aW9ucyB8fAogICAgICAgICAgICB0eXBlLmlzRHluYW1pYyB8fAogICAgICAgICAgICB0eXBlID09IGNvbW1vbkVsZW1lbnRzLm9iamVjdFR5cGUpIHsKICAgICAgICAgIC8vIEJ5IHNheWluZyB0aGF0IG9ubHkgSlMtaW50ZXJvcCB0eXBlcyBjYW4gYmUgY3JlYXRlZCwgd2UgcHJldmVudAogICAgICAgICAgLy8gcHVsbGluZyBpbiBldmVyeSBvdGhlciBuYXRpdmUgdHlwZSAoZS5nLiBhbGwgb2YgZGFydDpodG1sKSB3aGVuIGEKICAgICAgICAgIC8vIEpTIGludGVyb3AgQVBJIHJldHVybnMgZHluYW1pYyBvciB3aGVuIHdlIGRvbid0IHRydXN0IHRoZSB0eXBlCiAgICAgICAgICAvLyBhbm5vdGF0aW9ucy4gVGhpcyBtZWFucyB0aGF0IHRvIHNvbWUgZGVncmVlIHdlIHN0aWxsIHVzZSB0aGUgcmV0dXJuCiAgICAgICAgICAvLyB0eXBlIHRvIGRlY2lkZSB3aGV0aGVyIHRvIGluY2x1ZGUgbmF0aXZlIHR5cGVzLCBldmVuIGlmIHdlIGRvbid0CiAgICAgICAgICAvLyB0cnVzdCB0aGUgdHlwZSBhbm5vdGF0aW9uLgogICAgICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gY29tbW9uRWxlbWVudHMuanNKYXZhU2NyaXB0T2JqZWN0Q2xhc3M7CiAgICAgICAgICBfYmVoYXZpb3IudHlwZXNJbnN0YW50aWF0ZWQuYWRkKGVsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShjbHMpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3aGVuIHRoZSBkZWNsYXJlZCB0eXBlIGlzIGEgRGFydCB0eXBlLCB3ZSBkbyBub3QKICAgICAgICAgIC8vIHJlZ2lzdGVyIGFuIGFsbG9jYXRpb24gYmVjYXVzZSB3ZSBhc3N1bWUgaXQgY2Fubm90IGJlIGluc3RhbnRpYXRlZAogICAgICAgICAgLy8gZnJvbSB3aXRoaW4gdGhlIEpTLWludGVyb3AgY29kZS4gSXQgbXVzdCBoYXZlIGVzY2FwZWQgZnJvbSBhbm90aGVyCiAgICAgICAgICAvLyBBUEkuCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBOYXRpdmVCZWhhdmlvciBidWlsZEZpZWxkTG9hZEJlaGF2aW9yKAogICAgICBEYXJ0VHlwZSB0eXBlLAogICAgICBJdGVyYWJsZTxTdHJpbmc+IGNyZWF0ZXNBbm5vdGF0aW9ucywKICAgICAgSXRlcmFibGU8U3RyaW5nPiByZXR1cm5zQW5ub3RhdGlvbnMsCiAgICAgIFR5cGVMb29rdXAgbG9va3VwVHlwZSwKICAgICAge2Jvb2wgaXNKc0ludGVyb3B9KSB7CiAgICBfYmVoYXZpb3IgPSBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKICAgIC8vIFRPRE8oc2lnbXVuZCxzcmEpOiBjb25zaWRlciBkb2luZyBzb21ldGhpbmcgYmV0dGVyIGZvciBudW1lcmljIHR5cGVzLgogICAgX2JlaGF2aW9yLnR5cGVzUmV0dXJuZWQuYWRkKCFpc0pzSW50ZXJvcCB8fCB0cnVzdEpTSW50ZXJvcFR5cGVBbm5vdGF0aW9ucwogICAgICAgID8gdHlwZQogICAgICAgIDogY29tbW9uRWxlbWVudHMuZHluYW1pY1R5cGUpOwogICAgLy8gRGVjbGFyZWQgdHlwZXMgYXJlIG51bGxhYmxlLgogICAgX2JlaGF2aW9yLnR5cGVzUmV0dXJuZWQuYWRkKGNvbW1vbkVsZW1lbnRzLm51bGxUeXBlKTsKICAgIF9jYXB0dXJlKHR5cGUsIGlzSnNJbnRlcm9wKTsKICAgIF9vdmVycmlkZVdpdGhBbm5vdGF0aW9ucygKICAgICAgICBjcmVhdGVzQW5ub3RhdGlvbnMsIHJldHVybnNBbm5vdGF0aW9ucywgbG9va3VwVHlwZSk7CiAgICByZXR1cm4gX2JlaGF2aW9yOwogIH0KCiAgTmF0aXZlQmVoYXZpb3IgYnVpbGRGaWVsZFN0b3JlQmVoYXZpb3IoRGFydFR5cGUgdHlwZSkgewogICAgX2JlaGF2aW9yID0gbmV3IE5hdGl2ZUJlaGF2aW9yKCk7CiAgICBfZXNjYXBlKHR5cGUsIGZhbHNlKTsKICAgIC8vIFdlIGRvbid0IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW91ciAtIHRoZSBhbm5vdGF0aW9ucyBhcHBseSB0bwogICAgLy8gbG9hZGluZyB0aGUgZmllbGQuCiAgICByZXR1cm4gX2JlaGF2aW9yOwogIH0KCiAgTmF0aXZlQmVoYXZpb3IgYnVpbGRNZXRob2RCZWhhdmlvcigKICAgICAgRnVuY3Rpb25UeXBlIHR5cGUsCiAgICAgIEl0ZXJhYmxlPFN0cmluZz4gY3JlYXRlQW5ub3RhdGlvbnMsCiAgICAgIEl0ZXJhYmxlPFN0cmluZz4gcmV0dXJuc0Fubm90YXRpb25zLAogICAgICBUeXBlTG9va3VwIGxvb2t1cFR5cGUsCiAgICAgIHtib29sIGlzSnNJbnRlcm9wfSkgewogICAgX2JlaGF2aW9yID0gbmV3IE5hdGl2ZUJlaGF2aW9yKCk7CiAgICBEYXJ0VHlwZSByZXR1cm5UeXBlID0gdHlwZS5yZXR1cm5UeXBlOwogICAgLy8gTm90ZTogRm9yIGRhcnQ6aHRtbCBhbmQgb3RoZXIgaW50ZXJuYWwgbGlicmFyaWVzIHdlIG1haW50YWluLCB3ZSBjYW4KICAgIC8vIHRydXN0IHRoZSByZXR1cm4gdHlwZSBhbmQgdXNlIGl0IHRvIGxpbWl0IHdoYXQgd2UgZW5xdWV1ZS4gV2UgaGF2ZSB0bwogICAgLy8gYmUgbW9yZSBjb25zZXJ2YXRpdmUgYWJvdXQgSlMgaW50ZXJvcCB0eXBlcyBhbmQgYXNzdW1lIHRoZXkgY2FuIHJldHVybgogICAgLy8gYW55dGhpbmcgKHVubGVzcyB0aGUgdXNlciBwcm92aWRlcyB0aGUgZXhwZXJpbWVudGFsIGZsYWcgdG8gdHJ1c3QgdGhlCiAgICAvLyB0eXBlIG9mIGpzLWludGVyb3AgQVBJcykuIFdlIGRvIHJlc3RyaWN0IHRoZSBhbGxvY2F0aW9uIGVmZmVjdHMgYW5kIHNheQogICAgLy8gdGhhdCBpbnRlcm9wIGNhbGxzIGNyZWF0ZSBvbmx5IGludGVyb3AgdHlwZXMgKHdoaWNoIG1heSBiZSB1bnNvdW5kIGlmCiAgICAvLyBhbiBpbnRlcm9wIGNhbGwgcmV0dXJucyBhIERPTSB0eXBlIGFuZCBkZWNsYXJlcyBhIGR5bmFtaWMgcmV0dXJuIHR5cGUsCiAgICAvLyBidXQgb3RoZXJ3aXNlIHdlIHdvdWxkIGluY2x1ZGUgYSBsb3Qgb2YgY29kZSBieSBkZWZhdWx0KS4KICAgIC8vIFRPRE8oc2lnbXVuZCxzcmEpOiBjb25zaWRlciBkb2luZyBzb21ldGhpbmcgYmV0dGVyIGZvciBudW1lcmljIHR5cGVzLgogICAgX2JlaGF2aW9yLnR5cGVzUmV0dXJuZWQuYWRkKCFpc0pzSW50ZXJvcCB8fCB0cnVzdEpTSW50ZXJvcFR5cGVBbm5vdGF0aW9ucwogICAgICAgID8gcmV0dXJuVHlwZQogICAgICAgIDogY29tbW9uRWxlbWVudHMuZHluYW1pY1R5cGUpOwogICAgaWYgKCF0eXBlLnJldHVyblR5cGUuaXNWb2lkKSB7CiAgICAgIC8vIERlY2xhcmVkIHR5cGVzIGFyZSBudWxsYWJsZS4KICAgICAgX2JlaGF2aW9yLnR5cGVzUmV0dXJuZWQuYWRkKGNvbW1vbkVsZW1lbnRzLm51bGxUeXBlKTsKICAgIH0KICAgIF9jYXB0dXJlKHR5cGUsIGlzSnNJbnRlcm9wKTsKCiAgICBmb3IgKERhcnRUeXBlIHR5cGUgaW4gdHlwZS5vcHRpb25hbFBhcmFtZXRlclR5cGVzKSB7CiAgICAgIF9lc2NhcGUodHlwZSwgaXNKc0ludGVyb3ApOwogICAgfQogICAgZm9yIChEYXJ0VHlwZSB0eXBlIGluIHR5cGUubmFtZWRQYXJhbWV0ZXJUeXBlcykgewogICAgICBfZXNjYXBlKHR5cGUsIGlzSnNJbnRlcm9wKTsKICAgIH0KCiAgICBfb3ZlcnJpZGVXaXRoQW5ub3RhdGlvbnMoY3JlYXRlQW5ub3RhdGlvbnMsIHJldHVybnNBbm5vdGF0aW9ucywgbG9va3VwVHlwZSk7CiAgICByZXR1cm4gX2JlaGF2aW9yOwogIH0KfQoKTGlzdDxTdHJpbmc+IF9nZXRBbm5vdGF0aW9ucyhEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIsCiAgICBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBtZXRhZGF0YSwgQ2xhc3NFbnRpdHkgY2xzKSB7CiAgTGlzdDxTdHJpbmc+IGFubm90YXRpb25zID0gW107CiAgZm9yIChDb25zdGFudFZhbHVlIHZhbHVlIGluIG1ldGFkYXRhKSB7CiAgICBpZiAoIXZhbHVlLmlzQ29uc3RydWN0ZWRPYmplY3QpIGNvbnRpbnVlOwogICAgQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlIGNvbnN0cnVjdGVkT2JqZWN0ID0gdmFsdWU7CiAgICBpZiAoY29uc3RydWN0ZWRPYmplY3QudHlwZS5lbGVtZW50ICE9IGNscykgY29udGludWU7CgogICAgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gZmllbGRzID0gY29uc3RydWN0ZWRPYmplY3QuZmllbGRzLnZhbHVlczsKICAgIC8vIFRPRE8oc3JhKTogQmV0dGVyIHZhbGlkYXRpb24gb2YgdGhlIGNvbnN0YW50LgogICAgaWYgKGZpZWxkcy5sZW5ndGggIT0gMSB8fCAhZmllbGRzLnNpbmdsZS5pc1N0cmluZykgewogICAgICByZXBvcnRlci5pbnRlcm5hbEVycm9yKENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAnQW5ub3RhdGlvbnMgbmVlZHMgb25lIHN0cmluZzogJHt2YWx1ZS50b1N0cnVjdHVyZWRUZXh0KCl9Jyk7CiAgICB9CiAgICBTdHJpbmdDb25zdGFudFZhbHVlIHNwZWNTdHJpbmdDb25zdGFudCA9IGZpZWxkcy5zaW5nbGU7CiAgICBTdHJpbmcgc3BlY1N0cmluZyA9IHNwZWNTdHJpbmdDb25zdGFudC5zdHJpbmdWYWx1ZTsKICAgIGFubm90YXRpb25zLmFkZChzcGVjU3RyaW5nKTsKICB9CiAgcmV0dXJuIGFubm90YXRpb25zOwp9CgpMaXN0PFN0cmluZz4gZ2V0Q3JlYXRlc0Fubm90YXRpb25zKERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlciwKICAgIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLCBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBtZXRhZGF0YSkgewogIHJldHVybiBfZ2V0QW5ub3RhdGlvbnMoCiAgICAgIHJlcG9ydGVyLCBtZXRhZGF0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CgppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2lyL3J1bnRpbWVfdHlwZV9hbmFseXNpcy5kYXJ0JzsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnOwoKLy8vIEEgbGFuZ3VhZ2UgZmVhdHVyZSB0aGF0IG1heSBiZSBzZWVuIGluIHRoZSBwcm9ncmFtLgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTaG91bGQgbWlycm9yIHVzYWdlIGJlIHBhcnQgb2YgdGhpcz8KZW51bSBGZWF0dXJlIHsKICAvLy8gSW52b2NhdGlvbiBvZiBhIGdlbmVyYXRpdmUgY29uc3RydWN0aW9uIG9uIGFuIGFic3RyYWN0IGNsYXNzLgogIEFCU1RSQUNUX0NMQVNTX0lOU1RBTlRJQVRJT04sCgogIC8vLyBBbiBhc3NlcnQgc3RhdGVtZW50IHdpdGggbm8gbWVzc2FnZS4KICBBU1NFUlQsCgogIC8vLyBBbiBhc3NlcnQgc3RhdGVtZW50IHdpdGggYSBtZXNzYWdlLgogIEFTU0VSVF9XSVRIX01FU1NBR0UsCgogIC8vLyBBIG1ldGhvZCB3aXRoIGFuIGBhc3luY2AgYm9keSBtb2RpZmllci4KICBBU1lOQywKCiAgLy8vIEFuIGFzeW5jaHJvbm91cyBmb3IgaW4gc3RhdGVtZW50IGxpa2UgYGF3YWl0IGZvciAodmFyIGUgaW4gaSkge31gLgogIEFTWU5DX0ZPUl9JTiwKCiAgLy8vIEEgbWV0aG9kIHdpdGggYW4gYGFzeW5jKmAgYm9keSBtb2RpZmllci4KICBBU1lOQ19TVEFSLAoKICAvLy8gQSBjYXRjaCBzdGF0ZW1lbnQuCiAgQ0FUQ0hfU1RBVEVNRU5ULAoKICAvLy8gQSBmYWxsIHRocm91Z2ggaW4gYSBzd2l0Y2ggY2FzZS4KICBGQUxMX1RIUk9VR0hfRVJST1IsCgogIC8vLyBBIGZpZWxkIHdpdGhvdXQgYW4gaW5pdGlhbGl6ZXIuCiAgRklFTERfV0lUSE9VVF9JTklUSUFMSVpFUiwKCiAgLy8vIEEgZmllbGQgd2hvc2UgaW5pdGlhbGl6YXRpb24gaXMgbm90IGEgY29uc3RhbnQuCiAgTEFaWV9GSUVMRCwKCiAgLy8vIEEgbG9jYWwgdmFyaWFibGUgd2l0aG91dCBhbiBpbml0aWFsaXplci4KICBMT0NBTF9XSVRIT1VUX0lOSVRJQUxJWkVSLAoKICAvLy8gQWNjZXNzIHRvIGBsb2FkTGlicmFyeWAgb24gYSBkZWZlcnJlZCBpbXBvcnQuCiAgTE9BRF9MSUJSQVJZLAoKICAvLy8gQSBjYXRjaCBjbGF1c2Ugd2l0aCBhIHZhcmlhYmxlIGZvciB0aGUgc3RhY2sgdHJhY2UuCiAgU1RBQ0tfVFJBQ0VfSU5fQ0FUQ0gsCgogIC8vLyBTdHJpbmcgaW50ZXJwb2xhdGlvbi4KICBTVFJJTkdfSU5URVJQT0xBVElPTiwKCiAgLy8vIFN0cmluZyBqdXh0YXBvc2l0aW9uLgogIFNUUklOR19KVVhUQVBPU0lUSU9OLAoKICAvLy8gQW4gaW1wbGljaXQgY2FsbCB0byBgc3VwZXIubm9TdWNoTWV0aG9kYCwgbGlrZSBjYWxsaW5nIGFuIHVucmVzb2x2ZWQKICAvLy8gc3VwZXIgbWV0aG9kLgogIFNVUEVSX05PX1NVQ0hfTUVUSE9ELAoKICAvLy8gQSByZWRpcmVjdGlvbiB0byB0aGUgYFN5bWJvbGAgY29uc3RydWN0b3IuCiAgU1lNQk9MX0NPTlNUUlVDVE9SLAoKICAvLy8gQW4gc3luY2hyb25vdXMgZm9yIGluIHN0YXRlbWVudCwgbGlrZSBgZm9yICh2YXIgZSBpbiBpKSB7fWAuCiAgU1lOQ19GT1JfSU4sCgogIC8vLyBBIG1ldGhvZCB3aXRoIGEgYHN5bmMqYCBib2R5IG1vZGlmaWVyLgogIFNZTkNfU1RBUiwKCiAgLy8vIEEgdGhyb3cgZXhwcmVzc2lvbi4KICBUSFJPV19FWFBSRVNTSU9OLAoKICAvLy8gQW4gaW1wbGljaXQgdGhyb3cgb2YgYSBgTm9TdWNoTWV0aG9kRXJyb3JgLCBsaWtlIGNhbGxpbmcgYW4gdW5yZXNvbHZlZAogIC8vLyBzdGF0aWMgbWV0aG9kLgogIFRIUk9XX05PX1NVQ0hfTUVUSE9ELAoKICAvLy8gQW4gaW1wbGljaXQgdGhyb3cgb2YgYSBydW50aW1lIGVycm9yLCBsaWtlIGluIGEgcnVudGltZSB0eXBlIGNoZWNrLgogIFRIUk9XX1JVTlRJTUVfRVJST1IsCgogIC8vLyBBbiBpbXBsaWNpdCB0aHJvdyBvZiBhIGBVbnN1cHBvcnRlZEVycm9yYCwgbGlrZSBjYWxsaW5nIGBuZXcKICAvLy8gYm9vbC5mcm9tRW52aXJvbm1lbnRgLgogIFRIUk9XX1VOU1VQUE9SVEVEX0VSUk9SLAoKICAvLy8gVGhlIG5lZWQgZm9yIGEgdHlwZSB2YXJpYWJsZSBib3VuZCBjaGVjaywgbGlrZSBpbnN0YW50aWF0aW9uIG9mIGEgZ2VuZXJpYwogIC8vLyB0eXBlIHdob3NlIHR5cGUgdmFyaWFibGUgaGF2ZSBub24tdHJpdmlhbCBib3VuZHMuCiAgVFlQRV9WQVJJQUJMRV9CT1VORFNfQ0hFQ0ssCn0KCi8vLyBEZXNjcmliZXMgYSB1c2Ugb2YgYSBtYXAgbGl0ZXJhbCBpbiB0aGUgcHJvZ3JhbS4KY2xhc3MgTWFwTGl0ZXJhbFVzZSB7CiAgZmluYWwgSW50ZXJmYWNlVHlwZSB0eXBlOwogIGZpbmFsIGJvb2wgaXNDb25zdGFudDsKICBmaW5hbCBib29sIGlzRW1wdHk7CgogIE1hcExpdGVyYWxVc2UodGhpcy50eXBlLCB7dGhpcy5pc0NvbnN0YW50OiBmYWxzZSwgdGhpcy5pc0VtcHR5OiBmYWxzZX0pOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiB0eXBlLmhhc2hDb2RlICogMTMgKwogICAgICAgIGlzQ29uc3RhbnQuaGFzaENvZGUgKiAxNyArCiAgICAgICAgaXNFbXB0eS5oYXNoQ29kZSAqIDE5OwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBNYXBMaXRlcmFsVXNlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHlwZSA9PSBvdGhlci50eXBlICYmCiAgICAgICAgaXNDb25zdGFudCA9PSBvdGhlci5pc0NvbnN0YW50ICYmCiAgICAgICAgaXNFbXB0eSA9PSBvdGhlci5pc0VtcHR5OwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdNYXBMaXRlcmFsVXNlKCR0eXBlLGlzQ29uc3RhbnQ6JGlzQ29uc3RhbnQsaXNFbXB0eTokaXNFbXB0eSknOwogIH0KfQoKLy8vIERlc2NyaWJlcyBhIHVzZSBvZiBhIHNldCBsaXRlcmFsIGluIHRoZSBwcm9ncmFtLgpjbGFzcyBTZXRMaXRlcmFsVXNlIHsKICBmaW5hbCBJbnRlcmZhY2VUeXBlIHR5cGU7CiAgZmluYWwgYm9vbCBpc0NvbnN0YW50OwogIGZpbmFsIGJvb2wgaXNFbXB0eTsKCiAgU2V0TGl0ZXJhbFVzZSh0aGlzLnR5cGUsIHt0aGlzLmlzQ29uc3RhbnQ6IGZhbHNlLCB0aGlzLmlzRW1wdHk6IGZhbHNlfSk7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4KICAgICAgdHlwZS5oYXNoQ29kZSAqIDEzICsgaXNDb25zdGFudC5oYXNoQ29kZSAqIDE3ICsgaXNFbXB0eS5oYXNoQ29kZSAqIDE5OwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIFNldExpdGVyYWxVc2UpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0eXBlID09IG90aGVyLnR5cGUgJiYKICAgICAgICBpc0NvbnN0YW50ID09IG90aGVyLmlzQ29uc3RhbnQgJiYKICAgICAgICBpc0VtcHR5ID09IG90aGVyLmlzRW1wdHk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PgogICAgICAnU2V0TGl0ZXJhbFVzZSgkdHlwZSxpc0NvbnN0YW50OiRpc0NvbnN0YW50LGlzRW1wdHk6JGlzRW1wdHkpJzsKfQoKLy8vIERlc2NyaWJlcyB0aGUgdXNlIG9mIGEgbGlzdCBsaXRlcmFsIGluIHRoZSBwcm9ncmFtLgpjbGFzcyBMaXN0TGl0ZXJhbFVzZSB7CiAgZmluYWwgSW50ZXJmYWNlVHlwZSB0eXBlOwogIGZpbmFsIGJvb2wgaXNDb25zdGFudDsKICBmaW5hbCBib29sIGlzRW1wdHk7CgogIExpc3RMaXRlcmFsVXNlKHRoaXMudHlwZSwge3RoaXMuaXNDb25zdGFudDogZmFsc2UsIHRoaXMuaXNFbXB0eTogZmFsc2V9KTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gdHlwZS5oYXNoQ29kZSAqIDEzICsKICAgICAgICBpc0NvbnN0YW50Lmhhc2hDb2RlICogMTcgKwogICAgICAgIGlzRW1wdHkuaGFzaENvZGUgKiAxOTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgTGlzdExpdGVyYWxVc2UpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0eXBlID09IG90aGVyLnR5cGUgJiYKICAgICAgICBpc0NvbnN0YW50ID09IG90aGVyLmlzQ29uc3RhbnQgJiYKICAgICAgICBpc0VtcHR5ID09IG90aGVyLmlzRW1wdHk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ0xpc3RMaXRlcmFsVXNlKCR0eXBlLGlzQ29uc3RhbnQ6JGlzQ29uc3RhbnQsaXNFbXB0eTokaXNFbXB0eSknOwogIH0KfQoKLy8vIEEgdXNlIG9mIGBPYmplY3QucnVudGltZVR5cGVgLgpjbGFzcyBSdW50aW1lVHlwZVVzZSB7CiAgLy8vIFRoZSB1c2Uga2luZCBvZiBgT2JqZWN0LnJ1bnRpbWVUeXBlYC4KICBmaW5hbCBSdW50aW1lVHlwZVVzZUtpbmQga2luZDsKCiAgLy8vIFRoZSBzdGF0aWMgdHlwZSBvZiB0aGUgcmVjZWl2ZXIuCiAgZmluYWwgRGFydFR5cGUgcmVjZWl2ZXJUeXBlOwoKICAvLy8gVGhlIHN0YXRpYyB0eXBlIG9mIHRoZSBhcmd1bWVudCBpZiBba2luZF0gaXMgYFJ1bnRpbWVUeXBlVXNlS2luZC5lcXVhbHNgLgogIGZpbmFsIERhcnRUeXBlIGFyZ3VtZW50VHlwZTsKCiAgUnVudGltZVR5cGVVc2UodGhpcy5raW5kLCB0aGlzLnJlY2VpdmVyVHlwZSwgdGhpcy5hcmd1bWVudFR5cGUpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+CiAgICAgIGtpbmQuaGFzaENvZGUgKiAxMyArCiAgICAgIHJlY2VpdmVyVHlwZS5oYXNoQ29kZSAqIDE3ICsKICAgICAgYXJndW1lbnRUeXBlLmhhc2hDb2RlICogMTk7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgUnVudGltZVR5cGVVc2UpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBraW5kID09IG90aGVyLmtpbmQgJiYKICAgICAgICByZWNlaXZlclR5cGUgPT0gb3RoZXIucmVjZWl2ZXJUeXBlICYmCiAgICAgICAgYXJndW1lbnRUeXBlID09IG90aGVyLmFyZ3VtZW50VHlwZTsKICB9CgogIC8vLyBTaG9ydCB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIHVzZSBmb3IgdGVzdGluZy4KICBTdHJpbmcgZ2V0IHNob3J0VGV4dCB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBSdW50aW1lVHlwZVVzZUtpbmQuc3RyaW5nOgogICAgICAgIHNiLndyaXRlKCdzdHJpbmc6Jyk7CiAgICAgICAgc2Iud3JpdGUocmVjZWl2ZXJUeXBlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBSdW50aW1lVHlwZVVzZUtpbmQuZXF1YWxzOgogICAgICAgIHNiLndyaXRlKCdlcXVhbHM6Jyk7CiAgICAgICAgc2Iud3JpdGUocmVjZWl2ZXJUeXBlKTsKICAgICAgICBzYi53cml0ZSgnLycpOwogICAgICAgIHNiLndyaXRlKGFyZ3VtZW50VHlwZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgUnVudGltZVR5cGVVc2VLaW5kLnVua25vd246CiAgICAgICAgc2Iud3JpdGUoJ3Vua25vd246Jyk7CiAgICAgICAgc2Iud3JpdGUocmVjZWl2ZXJUeXBlKTsKICAgICAgICBicmVhazsKICAgIH0KICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1J1bnRpbWVUeXBlVXNlKGtpbmQ9JGtpbmQscmVjZWl2ZXI9JHJlY2VpdmVyVHlwZScKICAgICAgJyxhcmd1bWVudD0kYXJndW1lbnRUeXBlKSc7Cn0KCi8vLyBBIGdlbmVyaWMgaW5zdGFudGlhdGlvbiBvZiBhbiBleHByZXNzaW9uIG9mIHR5cGUgW2Z1bmN0aW9uVHlwZV0gd2l0aCB0aGUKLy8vIGdpdmVuIFt0eXBlQXJndW1lbnRzXS4KY2xhc3MgR2VuZXJpY0luc3RhbnRpYXRpb24gewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2dlbmVyaWMtaW5zdGFudGlhdGlvbic7CgogIC8vLyBUaGUgc3RhdGljIHR5cGUgb2YgdGhlIGluc3RhbnRpYXRlZCBleHByZXNzaW9uLgogIGZpbmFsIERhcnRUeXBlIGZ1bmN0aW9uVHlwZTsKCiAgLy8vIFRoZSB0eXBlIGFyZ3VtZW50cyBvZiB0aGUgaW5zdGFudGlhdGlvbi4KICBmaW5hbCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzOwoKICBHZW5lcmljSW5zdGFudGlhdGlvbih0aGlzLmZ1bmN0aW9uVHlwZSwgdGhpcy50eXBlQXJndW1lbnRzKTsKCiAgZmFjdG9yeSBHZW5lcmljSW5zdGFudGlhdGlvbi5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgRGFydFR5cGUgZnVuY3Rpb25UeXBlID0gc291cmNlLnJlYWREYXJ0VHlwZSgpOwogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9IHNvdXJjZS5yZWFkRGFydFR5cGVzKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEdlbmVyaWNJbnN0YW50aWF0aW9uKGZ1bmN0aW9uVHlwZSwgdHlwZUFyZ3VtZW50cyk7CiAgfQoKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlRGFydFR5cGUoZnVuY3Rpb25UeXBlKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZXModHlwZUFyZ3VtZW50cyk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgLy8vIFNob3J0IHRleHR1YWwgcmVwcmVzZW50YXRpb24gdXNlIGZvciB0ZXN0aW5nLgogIFN0cmluZyBnZXQgc2hvcnRUZXh0ID0+ICc8JHt0eXBlQXJndW1lbnRzLmpvaW4oJywnKX0+JzsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PgogICAgICBIYXNoaW5nLmxpc3RIYXNoKHR5cGVBcmd1bWVudHMsIEhhc2hpbmcub2JqZWN0SGFzaChmdW5jdGlvblR5cGUpKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBHZW5lcmljSW5zdGFudGlhdGlvbikgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIGZ1bmN0aW9uVHlwZSA9PSBvdGhlci5mdW5jdGlvblR5cGUgJiYKICAgICAgICBlcXVhbEVsZW1lbnRzKHR5cGVBcmd1bWVudHMsIG90aGVyLnR5cGVBcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdHZW5lcmljSW5zdGFudGlhdGlvbihmdW5jdGlvblR5cGU6JGZ1bmN0aW9uVHlwZSwnCiAgICAgICAgJ3R5cGVBcmd1bWVudHM6JHR5cGVBcmd1bWVudHMpJzsKICB9Cn0KgR8AK09OTSgETzkjASErLhwBOD0PRCABKwoBKhcBLgkBSRABLw4BGRMBJxYBJh0BNg4BLx0BNBABOhgBHBgBHBgBSxQYATEWAUMPAS0NARoUAU0VGAFKFwFDHRsBUDgeAgE1FhwZFgFLAQwVICMfBAEMHC0vISoiBAEMFksEAgE1FhwZFgFLAQwWTQEMHC0vISoiBAEMF0YCATgXHBkWAUwBDBUgIx8EAQwcLTAhKiIEAQwWTAQCASMXLCEBJx8BUB8BQwEMFhsjIgEMHC0wIS4sBAE0GSoUJh0gDyYdIBcgDyceIA8GGgQBDEoiAgFNGx01ATYfAS8mAT8BRxczOxVCBAEoFSYoEwQBNDoBDBZJAQwcLTYxOwQBDBY+KQQCASpwYWNrYWdlOmNvbXBpbGVyL3NyYy91bml2ZXJzZS9mZWF0dXJlLmRhcnQvc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvdW5pdmVyc2UvdXNlLmRhcnTAAHffLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBUaGlzIGxpYnJhcnkgZGVmaW5lcyBpbmRpdmlkdWFsIHdvcmxkIGltcGFjdHMuCi8vLwovLy8gV2UgY2FsbCB0aGVzZSBidWlsZGluZyBibG9ja3MgYHVzZXNgLiBFYWNoIGB1c2VgIGlzIGEgc2luZ2xlIGltcGFjdCBvZiB0aGUKLy8vIHdvcmxkLiBTb21lIGV4YW1wbGUgdXNlcyBhcmU6Ci8vLwovLy8gICogYW4gaW52b2NhdGlvbiBvZiBhIHRvcCBsZXZlbCBmdW5jdGlvbgovLy8gICogYSBjYWxsIHRvIHRoZSBgZm9vKClgIG1ldGhvZCBvbiBhbiB1bmtub3duIGNsYXNzLgovLy8gICogYW4gaW5zdGFudGlhdGlvbiBvZiBjbGFzcyBUCi8vLwovLy8gVGhlIGRpZmZlcmVudCBjb21waWxlciBzdGFnZXMgY29tYmluZSB0aGVzZSB1c2VzIGludG8gYFdvcmxkSW1wYWN0YCBvYmplY3RzLAovLy8gd2hpY2ggYXJlIGxhdGVyIHVzZWQgdG8gY29uc3RydWN0IGEgY2xvc2VkLXdvcmxkIHVuZGVyc3RhbmRpbmcgb2YgdGhlCi8vLyBwcm9ncmFtLgpsaWJyYXJ5IGRhcnQyanMudW5pdmVyc2UudXNlOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnIHNob3cgZXF1YWxFbGVtZW50cywgSGFzaGluZzsKaW1wb3J0ICdjYWxsX3N0cnVjdHVyZS5kYXJ0JyBzaG93IENhbGxTdHJ1Y3R1cmU7CmltcG9ydCAnc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvcjsKaW1wb3J0ICd3b3JsZF9idWlsZGVyLmRhcnQnIHNob3cgU3Ryb25nTW9kZUNvbnN0cmFpbnQ7CgplbnVtIER5bmFtaWNVc2VLaW5kIHsKICBJTlZPS0UsCiAgR0VULAogIFNFVCwKfQoKLy8vIFRoZSB1c2Ugb2YgYSBkeW5hbWljIHByb3BlcnR5LiBbc2VsZWN0b3JdIGRlZmluZWQgdGhlIG5hbWUgYW5kIGtpbmQgb2YgdGhlCi8vLyBwcm9wZXJ0eSBhbmQgW3JlY2VpdmVyQ29uc3RyYWludF0gZGVmaW5lcyB0aGUga25vd24gY29uc3RyYWludCBmb3IgdGhlCi8vLyBvYmplY3Qgb24gd2hpY2ggdGhlIHByb3BlcnR5IGlzIGFjY2Vzc2VkLgpjbGFzcyBEeW5hbWljVXNlIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdkeW5hbWljLXVzZSc7CgogIGZpbmFsIFNlbGVjdG9yIHNlbGVjdG9yOwogIGZpbmFsIE9iamVjdCByZWNlaXZlckNvbnN0cmFpbnQ7CiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gX3R5cGVBcmd1bWVudHM7CgogIER5bmFtaWNVc2UodGhpcy5zZWxlY3RvciwgdGhpcy5yZWNlaXZlckNvbnN0cmFpbnQsIHRoaXMuX3R5cGVBcmd1bWVudHMpIHsKICAgIGFzc2VydCgKICAgICAgICBzZWxlY3Rvci5jYWxsU3RydWN0dXJlLnR5cGVBcmd1bWVudENvdW50ID09CiAgICAgICAgICAgIChfdHlwZUFyZ3VtZW50cz8ubGVuZ3RoID8/IDApLAogICAgICAgICJUeXBlIGFyZ3VtZW50IGNvdW50IG1pc21hdGNoLiBTZWxlY3RvciBoYXMgIgogICAgICAgICIke3NlbGVjdG9yLmNhbGxTdHJ1Y3R1cmUudHlwZUFyZ3VtZW50Q291bnR9IGJ1dCAiCiAgICAgICAgIiR7X3R5cGVBcmd1bWVudHM/Lmxlbmd0aCA/PyAwfSB3ZXJlIHBhc3NlZC4iKTsKICB9CgogIGZhY3RvcnkgRHluYW1pY1VzZS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBTZWxlY3Rvci5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIGJvb2wgaGFzQ29uc3RyYWludCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgT2JqZWN0IHJlY2VpdmVyQ29uc3RyYWludDsKICAgIGlmIChoYXNDb25zdHJhaW50KSB7CiAgICAgIHJlY2VpdmVyQ29uc3RyYWludCA9IHNvdXJjZS5yZWFkQWJzdHJhY3RWYWx1ZSgpOwogICAgfQogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9IHNvdXJjZS5yZWFkRGFydFR5cGVzKGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgRHluYW1pY1VzZShzZWxlY3RvciwgcmVjZWl2ZXJDb25zdHJhaW50LCB0eXBlQXJndW1lbnRzKTsKICB9CgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNlbGVjdG9yLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsud3JpdGVCb29sKHJlY2VpdmVyQ29uc3RyYWludCAhPSBudWxsKTsKICAgIGlmIChyZWNlaXZlckNvbnN0cmFpbnQgIT0gbnVsbCkgewogICAgICBpZiAocmVjZWl2ZXJDb25zdHJhaW50IGlzIEFic3RyYWN0VmFsdWUpIHsKICAgICAgICBzaW5rLndyaXRlQWJzdHJhY3RWYWx1ZShyZWNlaXZlckNvbnN0cmFpbnQpOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgICAiVW5zdXBwb3J0ZWQgcmVjZWl2ZXIgY29uc3RyYWludDogJHtyZWNlaXZlckNvbnN0cmFpbnR9Iik7CiAgICAgIH0KICAgIH0KICAgIHNpbmsud3JpdGVEYXJ0VHlwZXMoX3R5cGVBcmd1bWVudHMsIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgLy8vIFNob3J0IHRleHR1YWwgcmVwcmVzZW50YXRpb24gdXNlIGZvciB0ZXN0aW5nLgogIFN0cmluZyBnZXQgc2hvcnRUZXh0IHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGlmIChyZWNlaXZlckNvbnN0cmFpbnQgIT0gbnVsbCkgewogICAgICB2YXIgY29uc3RyYWludCA9IHJlY2VpdmVyQ29uc3RyYWludDsKICAgICAgaWYgKGNvbnN0cmFpbnQgaXMgU3Ryb25nTW9kZUNvbnN0cmFpbnQpIHsKICAgICAgICBpZiAoY29uc3RyYWludC5pc1RoaXMpIHsKICAgICAgICAgIHNiLndyaXRlKCd0aGlzOicpOwogICAgICAgIH0gZWxzZSBpZiAoY29uc3RyYWludC5pc0V4YWN0KSB7CiAgICAgICAgICBzYi53cml0ZSgnZXhhY3Q6Jyk7CiAgICAgICAgfQogICAgICAgIHNiLndyaXRlKGNvbnN0cmFpbnQuY2xzLm5hbWUpOwogICAgICB9IGVsc2UgewogICAgICAgIHNiLndyaXRlKGNvbnN0cmFpbnQpOwogICAgICB9CiAgICAgIHNiLndyaXRlKCcuJyk7CiAgICB9CiAgICBzYi53cml0ZShzZWxlY3Rvci5uYW1lKTsKICAgIGlmICh0eXBlQXJndW1lbnRzICE9IG51bGwgJiYgdHlwZUFyZ3VtZW50cy5pc05vdEVtcHR5KSB7CiAgICAgIHNiLndyaXRlKCc8Jyk7CiAgICAgIHNiLndyaXRlKHR5cGVBcmd1bWVudHMuam9pbignLCcpKTsKICAgICAgc2Iud3JpdGUoJz4nKTsKICAgIH0KICAgIGlmIChzZWxlY3Rvci5pc0NhbGwpIHsKICAgICAgc2Iud3JpdGUoc2VsZWN0b3IuY2FsbFN0cnVjdHVyZS5zaG9ydFRleHQpOwogICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pc1NldHRlcikgewogICAgICBzYi53cml0ZSgnPScpOwogICAgfQogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICBEeW5hbWljVXNlS2luZCBnZXQga2luZCB7CiAgICBpZiAoc2VsZWN0b3IuaXNHZXR0ZXIpIHsKICAgICAgcmV0dXJuIER5bmFtaWNVc2VLaW5kLkdFVDsKICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuaXNTZXR0ZXIpIHsKICAgICAgcmV0dXJuIER5bmFtaWNVc2VLaW5kLlNFVDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBEeW5hbWljVXNlS2luZC5JTlZPS0U7CiAgICB9CiAgfQoKICBMaXN0PERhcnRUeXBlPiBnZXQgdHlwZUFyZ3VtZW50cyA9PiBfdHlwZUFyZ3VtZW50cyA/PyBjb25zdCA8RGFydFR5cGU+W107CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gSGFzaGluZy5saXN0SGFzaCgKICAgICAgdHlwZUFyZ3VtZW50cywgSGFzaGluZy5vYmplY3RzSGFzaChzZWxlY3RvciwgcmVjZWl2ZXJDb25zdHJhaW50KSk7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgRHluYW1pY1VzZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHNlbGVjdG9yID09IG90aGVyLnNlbGVjdG9yICYmCiAgICAgICAgcmVjZWl2ZXJDb25zdHJhaW50ID09IG90aGVyLnJlY2VpdmVyQ29uc3RyYWludCAmJgogICAgICAgIGVxdWFsRWxlbWVudHModHlwZUFyZ3VtZW50cywgb3RoZXIudHlwZUFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJHNlbGVjdG9yLCRyZWNlaXZlckNvbnN0cmFpbnQsJHR5cGVBcmd1bWVudHMnOwp9CgplbnVtIFN0YXRpY1VzZUtpbmQgewogIFNUQVRJQ19URUFSX09GRiwKICBTVVBFUl9URUFSX09GRiwKICBTVVBFUl9GSUVMRF9TRVQsCiAgU1VQRVJfR0VULAogIFNVUEVSX1NFVFRFUl9TRVQsCiAgU1VQRVJfSU5WT0tFLAogIElOU1RBTkNFX0ZJRUxEX0dFVCwKICBJTlNUQU5DRV9GSUVMRF9TRVQsCiAgQ0xPU1VSRSwKICBDTE9TVVJFX0NBTEwsCiAgQ0FMTF9NRVRIT0QsCiAgQ09OU1RSVUNUT1JfSU5WT0tFLAogIENPTlNUX0NPTlNUUlVDVE9SX0lOVk9LRSwKICBESVJFQ1RfSU5WT0tFLAogIElOTElOSU5HLAogIFNUQVRJQ19JTlZPS0UsCiAgU1RBVElDX0dFVCwKICBTVEFUSUNfU0VULAogIEZJRUxEX0lOSVQsCiAgRklFTERfQ09OU1RBTlRfSU5JVCwKfQoKLy8vIFN0YXRpY2FsbHkga25vd24gdXNlIG9mIGFuIFtFbnRpdHldLgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDcmVhdGUgYmFja2VuZC1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgd2l0aCBiZXR0ZXIKLy8gaW52YXJpYW50cy4KY2xhc3MgU3RhdGljVXNlIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdzdGF0aWMtdXNlJzsKCiAgZmluYWwgRW50aXR5IGVsZW1lbnQ7CiAgZmluYWwgU3RhdGljVXNlS2luZCBraW5kOwogIEBvdmVycmlkZQogIGZpbmFsIGludCBoYXNoQ29kZTsKICBmaW5hbCBJbnRlcmZhY2VUeXBlIHR5cGU7CiAgZmluYWwgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlOwogIGZpbmFsIEltcG9ydEVudGl0eSBkZWZlcnJlZEltcG9ydDsKICBmaW5hbCBDb25zdGFudFZhbHVlIGNvbnN0YW50OwogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CgogIFN0YXRpY1VzZS5pbnRlcm5hbChFbnRpdHkgZWxlbWVudCwgdGhpcy5raW5kLAogICAgICB7dGhpcy50eXBlLAogICAgICB0aGlzLmNhbGxTdHJ1Y3R1cmUsCiAgICAgIHRoaXMuZGVmZXJyZWRJbXBvcnQsCiAgICAgIHRoaXMudHlwZUFyZ3VtZW50cywKICAgICAgdGhpcy5jb25zdGFudH0pCiAgICAgIDogdGhpcy5lbGVtZW50ID0gZWxlbWVudCwKICAgICAgICB0aGlzLmhhc2hDb2RlID0gSGFzaGluZy5saXN0SGFzaChbCiAgICAgICAgICBlbGVtZW50LAogICAgICAgICAga2luZCwKICAgICAgICAgIHR5cGUsCiAgICAgICAgICBIYXNoaW5nLmxpc3RIYXNoKHR5cGVBcmd1bWVudHMpLAogICAgICAgICAgY2FsbFN0cnVjdHVyZSwKICAgICAgICAgIGRlZmVycmVkSW1wb3J0LAogICAgICAgICAgY29uc3RhbnQKICAgICAgICBdKTsKCiAgYm9vbCBfY2hlY2tHZW5lcmljSW52YXJpYW50cygpIHsKICAgIGFzc2VydCgKICAgICAgICAoY2FsbFN0cnVjdHVyZT8udHlwZUFyZ3VtZW50Q291bnQgPz8gMCkgPT0gKHR5cGVBcmd1bWVudHM/Lmxlbmd0aCA/PyAwKSwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgIlR5cGUgYXJndW1lbnQgY291bnQgbWlzbWF0Y2guIENhbGwgc3RydWN0dXJlIGhhcyAiCiAgICAgICAgICAgICIke2NhbGxTdHJ1Y3R1cmU/LnR5cGVBcmd1bWVudENvdW50ID8/IDB9IGJ1dCAiCiAgICAgICAgICAgICIke3R5cGVBcmd1bWVudHM/Lmxlbmd0aCA/PyAwfSB3ZXJlIHBhc3NlZCBpbiAkdGhpcy4iKSk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGZhY3RvcnkgU3RhdGljVXNlLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCA9IHNvdXJjZS5yZWFkTWVtYmVyKCk7CiAgICBTdGF0aWNVc2VLaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oU3RhdGljVXNlS2luZC52YWx1ZXMpOwogICAgSW50ZXJmYWNlVHlwZSB0eXBlID0gc291cmNlLnJlYWREYXJ0VHlwZShhbGxvd051bGw6IHRydWUpOwogICAgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlID0KICAgICAgICBzb3VyY2UucmVhZFZhbHVlT3JOdWxsKCgpID0+IENhbGxTdHJ1Y3R1cmUucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSkpOwogICAgSW1wb3J0RW50aXR5IGRlZmVycmVkSW1wb3J0ID0gc291cmNlLnJlYWRJbXBvcnRPck51bGwoKTsKICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSBzb3VyY2UucmVhZENvbnN0YW50T3JOdWxsKCk7CiAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0gc291cmNlLnJlYWREYXJ0VHlwZXMoZW1wdHlBc051bGw6IHRydWUpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoZWxlbWVudCwga2luZCwKICAgICAgICB0eXBlOiB0eXBlLAogICAgICAgIGNhbGxTdHJ1Y3R1cmU6IGNhbGxTdHJ1Y3R1cmUsCiAgICAgICAgZGVmZXJyZWRJbXBvcnQ6IGRlZmVycmVkSW1wb3J0LAogICAgICAgIGNvbnN0YW50OiBjb25zdGFudCwKICAgICAgICB0eXBlQXJndW1lbnRzOiB0eXBlQXJndW1lbnRzKTsKICB9CgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIGFzc2VydChlbGVtZW50IGlzIE1lbWJlckVudGl0eSwgIlVuc3VwcG9ydGVkIGVudGl0eTogJGVsZW1lbnQiKTsKICAgIHNpbmsud3JpdGVNZW1iZXIoZWxlbWVudCk7CiAgICBzaW5rLndyaXRlRW51bShraW5kKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZSh0eXBlLCBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZVZhbHVlT3JOdWxsKAogICAgICAgIGNhbGxTdHJ1Y3R1cmUsIChDYWxsU3RydWN0dXJlIGMpID0+IGMud3JpdGVUb0RhdGFTaW5rKHNpbmspKTsKICAgIHNpbmsud3JpdGVJbXBvcnRPck51bGwoZGVmZXJyZWRJbXBvcnQpOwogICAgc2luay53cml0ZUNvbnN0YW50T3JOdWxsKGNvbnN0YW50KTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZXModHlwZUFyZ3VtZW50cywgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICAvLy8gU2hvcnQgdGV4dHVhbCByZXByZXNlbnRhdGlvbiB1c2UgZm9yIHRlc3RpbmcuCiAgU3RyaW5nIGdldCBzaG9ydFRleHQgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5JTlNUQU5DRV9GSUVMRF9TRVQ6CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVVBFUl9GSUVMRF9TRVQ6CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVVBFUl9TRVRURVJfU0VUOgogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1RBVElDX1NFVDoKICAgICAgICBzYi53cml0ZSgnc2V0OicpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuRklFTERfSU5JVDoKICAgICAgICBzYi53cml0ZSgnaW5pdDonKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNMT1NVUkU6CiAgICAgICAgc2Iud3JpdGUoJ2RlZjonKTsKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgIH0KICAgIGlmIChlbGVtZW50IGlzIE1lbWJlckVudGl0eSkgewogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gZWxlbWVudDsKICAgICAgaWYgKG1lbWJlci5lbmNsb3NpbmdDbGFzcyAhPSBudWxsKSB7CiAgICAgICAgc2Iud3JpdGUobWVtYmVyLmVuY2xvc2luZ0NsYXNzLm5hbWUpOwogICAgICAgIHNiLndyaXRlKCcuJyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChlbGVtZW50Lm5hbWUgPT0gbnVsbCkgewogICAgICBzYi53cml0ZSgnPGFub255bW91cz4nKTsKICAgIH0gZWxzZSB7CiAgICAgIHNiLndyaXRlKGVsZW1lbnQubmFtZSk7CiAgICB9CiAgICBpZiAodHlwZUFyZ3VtZW50cyAhPSBudWxsICYmIHR5cGVBcmd1bWVudHMuaXNOb3RFbXB0eSkgewogICAgICBzYi53cml0ZSgnPCcpOwogICAgICBzYi53cml0ZSh0eXBlQXJndW1lbnRzLmpvaW4oJywnKSk7CiAgICAgIHNiLndyaXRlKCc+Jyk7CiAgICB9CiAgICBpZiAoY2FsbFN0cnVjdHVyZSAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCcoJyk7CiAgICAgIHNiLndyaXRlKGNhbGxTdHJ1Y3R1cmUucG9zaXRpb25hbEFyZ3VtZW50Q291bnQpOwogICAgICBpZiAoY2FsbFN0cnVjdHVyZS5uYW1lZEFyZ3VtZW50Q291bnQgPiAwKSB7CiAgICAgICAgc2Iud3JpdGUoJywnKTsKICAgICAgICBzYi53cml0ZShjYWxsU3RydWN0dXJlLmdldE9yZGVyZWROYW1lZEFyZ3VtZW50cygpLmpvaW4oJywnKSk7CiAgICAgIH0KICAgICAgc2Iud3JpdGUoJyknKTsKICAgIH0KICAgIGlmIChkZWZlcnJlZEltcG9ydCAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCd7Jyk7CiAgICAgIHNiLndyaXRlKGRlZmVycmVkSW1wb3J0Lm5hbWUpOwogICAgICBzYi53cml0ZSgnfScpOwogICAgfQogICAgaWYgKGNvbnN0YW50ICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJz0nKTsKICAgICAgc2Iud3JpdGUoY29uc3RhbnQudG9TdHJ1Y3R1cmVkVGV4dCgpKTsKICAgIH0KICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgLy8vIEludm9jYXRpb24gb2YgYSBzdGF0aWMgb3IgdG9wLWxldmVsIFtlbGVtZW50XSB3aXRoIHRoZSBnaXZlbgogIC8vLyBbY2FsbFN0cnVjdHVyZV0uCiAgZmFjdG9yeSBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKAogICAgICBGdW5jdGlvbkVudGl0eSBlbGVtZW50LCBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUsCiAgICAgIFtMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzLCBJbXBvcnRFbnRpdHkgZGVmZXJyZWRJbXBvcnRdKSB7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc1N0YXRpYyB8fCBlbGVtZW50LmlzVG9wTGV2ZWwsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICJTdGF0aWMgaW52b2tlIGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhIHRvcC1sZXZlbCAiCiAgICAgICAgICAgICJvciBzdGF0aWMgbWV0aG9kLiIpKTsKICAgIGFzc2VydChlbGVtZW50LmlzRnVuY3Rpb24sCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwgIlN0YXRpYyBnZXQgZWxlbWVudCAkZWxlbWVudCBtdXN0IGJlIGEgZnVuY3Rpb24uIikpOwogICAgYXNzZXJ0KAogICAgICAgIGNhbGxTdHJ1Y3R1cmUgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdChlbGVtZW50LAogICAgICAgICAgICAiTm90IENhbGxTdHJ1Y3R1cmUgZm9yIHN0YXRpYyBpbnZvY2F0aW9uIG9mIGVsZW1lbnQgJGVsZW1lbnQuIikpOwoKICAgIFN0YXRpY1VzZSBzdGF0aWNVc2UgPSBuZXcgU3RhdGljVXNlLmludGVybmFsKAogICAgICAgIGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuU1RBVElDX0lOVk9LRSwKICAgICAgICBjYWxsU3RydWN0dXJlOiBjYWxsU3RydWN0dXJlLAogICAgICAgIHR5cGVBcmd1bWVudHM6IHR5cGVBcmd1bWVudHMsCiAgICAgICAgZGVmZXJyZWRJbXBvcnQ6IGRlZmVycmVkSW1wb3J0KTsKICAgIGFzc2VydChzdGF0aWNVc2UuX2NoZWNrR2VuZXJpY0ludmFyaWFudHMoKSk7CiAgICByZXR1cm4gc3RhdGljVXNlOwogIH0KCiAgLy8vIENsb3N1cml6YXRpb24gb2YgYSBzdGF0aWMgb3IgdG9wLWxldmVsIGZ1bmN0aW9uIFtlbGVtZW50XS4KICBmYWN0b3J5IFN0YXRpY1VzZS5zdGF0aWNUZWFyT2ZmKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQsCiAgICAgIFtJbXBvcnRFbnRpdHkgZGVmZXJyZWRJbXBvcnRdKSB7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc1N0YXRpYyB8fCBlbGVtZW50LmlzVG9wTGV2ZWwsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICJTdGF0aWMgdGVhci1vZmYgZWxlbWVudCAkZWxlbWVudCBtdXN0IGJlIGEgdG9wLWxldmVsICIKICAgICAgICAgICAgIm9yIHN0YXRpYyBtZXRob2QuIikpOwogICAgYXNzZXJ0KGVsZW1lbnQuaXNGdW5jdGlvbiwKICAgICAgICBmYWlsZWRBdChlbGVtZW50LCAiU3RhdGljIGdldCBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYSBmdW5jdGlvbi4iKSk7CiAgICByZXR1cm4gbmV3IFN0YXRpY1VzZS5pbnRlcm5hbChlbGVtZW50LCBTdGF0aWNVc2VLaW5kLlNUQVRJQ19URUFSX09GRiwKICAgICAgICBkZWZlcnJlZEltcG9ydDogZGVmZXJyZWRJbXBvcnQpOwogIH0KCiAgLy8vIFJlYWQgYWNjZXNzIG9mIGEgc3RhdGljIG9yIHRvcC1sZXZlbCBmaWVsZCBvciBnZXR0ZXIgW2VsZW1lbnRdLgogIGZhY3RvcnkgU3RhdGljVXNlLnN0YXRpY0dldChNZW1iZXJFbnRpdHkgZWxlbWVudCwKICAgICAgW0ltcG9ydEVudGl0eSBkZWZlcnJlZEltcG9ydF0pIHsKICAgIGFzc2VydCgKICAgICAgICBlbGVtZW50LmlzU3RhdGljIHx8IGVsZW1lbnQuaXNUb3BMZXZlbCwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgIlN0YXRpYyBnZXQgZWxlbWVudCAkZWxlbWVudCBtdXN0IGJlIGEgdG9wLWxldmVsICIKICAgICAgICAgICAgIm9yIHN0YXRpYyBmaWVsZCBvciBnZXR0ZXIuIikpOwogICAgYXNzZXJ0KAogICAgICAgIGVsZW1lbnQuaXNGaWVsZCB8fCBlbGVtZW50LmlzR2V0dGVyLAogICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsCiAgICAgICAgICAgICJTdGF0aWMgZ2V0IGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhIGZpZWxkIG9yIGEgZ2V0dGVyLiIpKTsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuU1RBVElDX0dFVCwKICAgICAgICBkZWZlcnJlZEltcG9ydDogZGVmZXJyZWRJbXBvcnQpOwogIH0KCiAgLy8vIFdyaXRlIGFjY2VzcyBvZiBhIHN0YXRpYyBvciB0b3AtbGV2ZWwgZmllbGQgb3Igc2V0dGVyIFtlbGVtZW50XS4KICBmYWN0b3J5IFN0YXRpY1VzZS5zdGF0aWNTZXQoTWVtYmVyRW50aXR5IGVsZW1lbnQsCiAgICAgIFtJbXBvcnRFbnRpdHkgZGVmZXJyZWRJbXBvcnRdKSB7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc1N0YXRpYyB8fCBlbGVtZW50LmlzVG9wTGV2ZWwsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICJTdGF0aWMgc2V0IGVsZW1lbnQgJGVsZW1lbnQgIgogICAgICAgICAgICAibXVzdCBiZSBhIHRvcC1sZXZlbCBvciBzdGF0aWMgbWV0aG9kLiIpKTsKICAgIGFzc2VydCgKICAgICAgICAoZWxlbWVudC5pc0ZpZWxkICYmIGVsZW1lbnQuaXNBc3NpZ25hYmxlKSB8fCBlbGVtZW50LmlzU2V0dGVyLAogICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsCiAgICAgICAgICAgICJTdGF0aWMgc2V0IGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhIGZpZWxkIG9yIGEgc2V0dGVyLiIpKTsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuU1RBVElDX1NFVCwKICAgICAgICBkZWZlcnJlZEltcG9ydDogZGVmZXJyZWRJbXBvcnQpOwogIH0KCiAgLy8vIEludm9jYXRpb24gb2YgdGhlIGxhenkgaW5pdGlhbGl6ZXIgZm9yIGEgc3RhdGljIG9yIHRvcC1sZXZlbCBmaWVsZAogIC8vLyBbZWxlbWVudF0uCiAgZmFjdG9yeSBTdGF0aWNVc2Uuc3RhdGljSW5pdChGaWVsZEVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc1N0YXRpYyB8fCBlbGVtZW50LmlzVG9wTGV2ZWwsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICJTdGF0aWMgaW5pdCBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYSB0b3AtbGV2ZWwgIgogICAgICAgICAgICAib3Igc3RhdGljIG1ldGhvZC4iKSk7CiAgICBhc3NlcnQoZWxlbWVudC5pc0ZpZWxkLAogICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsICJTdGF0aWMgaW5pdCBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYSBmaWVsZC4iKSk7CiAgICByZXR1cm4gbmV3IFN0YXRpY1VzZS5pbnRlcm5hbChlbGVtZW50LCBTdGF0aWNVc2VLaW5kLkZJRUxEX0lOSVQpOwogIH0KCiAgLy8vIEludm9jYXRpb24gb2YgYSBzdXBlciBtZXRob2QgW2VsZW1lbnRdIHdpdGggdGhlIGdpdmVuIFtjYWxsU3RydWN0dXJlXS4KICBmYWN0b3J5IFN0YXRpY1VzZS5zdXBlckludm9rZSgKICAgICAgRnVuY3Rpb25FbnRpdHkgZWxlbWVudCwgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlLAogICAgICBbTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50c10pIHsKICAgIGFzc2VydCgKICAgICAgICBlbGVtZW50LmlzSW5zdGFuY2VNZW1iZXIsCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwKICAgICAgICAgICAgIlN1cGVyIGludm9rZSBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYW4gaW5zdGFuY2UgbWV0aG9kLiIpKTsKICAgIGFzc2VydCgKICAgICAgICBjYWxsU3RydWN0dXJlICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwKICAgICAgICAgICAgIk5vdCBDYWxsU3RydWN0dXJlIGZvciBzdXBlciBpbnZvY2F0aW9uIG9mIGVsZW1lbnQgJGVsZW1lbnQuIikpOwogICAgU3RhdGljVXNlIHN0YXRpY1VzZSA9IG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoCiAgICAgICAgZWxlbWVudCwgU3RhdGljVXNlS2luZC5TVVBFUl9JTlZPS0UsCiAgICAgICAgY2FsbFN0cnVjdHVyZTogY2FsbFN0cnVjdHVyZSwgdHlwZUFyZ3VtZW50czogdHlwZUFyZ3VtZW50cyk7CiAgICBhc3NlcnQoc3RhdGljVXNlLl9jaGVja0dlbmVyaWNJbnZhcmlhbnRzKCkpOwogICAgcmV0dXJuIHN0YXRpY1VzZTsKICB9CgogIC8vLyBSZWFkIGFjY2VzcyBvZiBhIHN1cGVyIGZpZWxkIG9yIGdldHRlciBbZWxlbWVudF0uCiAgZmFjdG9yeSBTdGF0aWNVc2Uuc3VwZXJHZXQoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydCgKICAgICAgICBlbGVtZW50LmlzSW5zdGFuY2VNZW1iZXIsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGVsZW1lbnQsICJTdXBlciBnZXQgZWxlbWVudCAkZWxlbWVudCBtdXN0IGJlIGFuIGluc3RhbmNlIG1ldGhvZC4iKSk7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc0ZpZWxkIHx8IGVsZW1lbnQuaXNHZXR0ZXIsCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwKICAgICAgICAgICAgIlN1cGVyIGdldCBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYSBmaWVsZCBvciBhIGdldHRlci4iKSk7CiAgICByZXR1cm4gbmV3IFN0YXRpY1VzZS5pbnRlcm5hbChlbGVtZW50LCBTdGF0aWNVc2VLaW5kLlNVUEVSX0dFVCk7CiAgfQoKICAvLy8gV3JpdGUgYWNjZXNzIG9mIGEgc3VwZXIgZmllbGQgW2VsZW1lbnRdLgogIGZhY3RvcnkgU3RhdGljVXNlLnN1cGVyRmllbGRTZXQoRmllbGRFbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KAogICAgICAgIGVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlciwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZWxlbWVudCwgIlN1cGVyIHNldCBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYW4gaW5zdGFuY2UgbWV0aG9kLiIpKTsKICAgIGFzc2VydChlbGVtZW50LmlzRmllbGQsCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwgIlN1cGVyIHNldCBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYSBmaWVsZC4iKSk7CiAgICByZXR1cm4gbmV3IFN0YXRpY1VzZS5pbnRlcm5hbChlbGVtZW50LCBTdGF0aWNVc2VLaW5kLlNVUEVSX0ZJRUxEX1NFVCk7CiAgfQoKICAvLy8gV3JpdGUgYWNjZXNzIG9mIGEgc3VwZXIgc2V0dGVyIFtlbGVtZW50XS4KICBmYWN0b3J5IFN0YXRpY1VzZS5zdXBlclNldHRlclNldChGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc0luc3RhbmNlTWVtYmVyLAogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBlbGVtZW50LCAiU3VwZXIgc2V0IGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhbiBpbnN0YW5jZSBtZXRob2QuIikpOwogICAgYXNzZXJ0KGVsZW1lbnQuaXNTZXR0ZXIsCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwgIlN1cGVyIHNldCBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYSBzZXR0ZXIuIikpOwogICAgcmV0dXJuIG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoZWxlbWVudCwgU3RhdGljVXNlS2luZC5TVVBFUl9TRVRURVJfU0VUKTsKICB9CgogIC8vLyBDbG9zdXJpemF0aW9uIG9mIGEgc3VwZXIgbWV0aG9kIFtlbGVtZW50XS4KICBmYWN0b3J5IFN0YXRpY1VzZS5zdXBlclRlYXJPZmYoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KAogICAgICAgIGVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlciAmJiBlbGVtZW50LmlzRnVuY3Rpb24sCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwKICAgICAgICAgICAgIlN1cGVyIGludm9rZSBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYW4gaW5zdGFuY2UgbWV0aG9kLiIpKTsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuU1VQRVJfVEVBUl9PRkYpOwogIH0KCiAgLy8vIEludm9jYXRpb24gb2YgYSBjb25zdHJ1Y3RvciBbZWxlbWVudF0gdGhyb3VnaCBhIHRoaXMgb3Igc3VwZXIKICAvLy8gY29uc3RydWN0b3IgY2FsbCB3aXRoIHRoZSBnaXZlbiBbY2FsbFN0cnVjdHVyZV0uCiAgZmFjdG9yeSBTdGF0aWNVc2Uuc3VwZXJDb25zdHJ1Y3Rvckludm9rZSgKICAgICAgQ29uc3RydWN0b3JFbnRpdHkgZWxlbWVudCwgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlKSB7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc0dlbmVyYXRpdmVDb25zdHJ1Y3RvciwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgIkNvbnN0cnVjdG9yIGludm9rZSBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYSAiCiAgICAgICAgICAgICJnZW5lcmF0aXZlIGNvbnN0cnVjdG9yLiIpKTsKICAgIGFzc2VydCgKICAgICAgICBjYWxsU3RydWN0dXJlICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICJOb3QgQ2FsbFN0cnVjdHVyZSBmb3Igc3VwZXIgY29uc3RydWN0b3IgaW52b2NhdGlvbiBvZiBlbGVtZW50ICIKICAgICAgICAgICAgIiRlbGVtZW50LiIpKTsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuU1RBVElDX0lOVk9LRSwKICAgICAgICBjYWxsU3RydWN0dXJlOiBjYWxsU3RydWN0dXJlKTsKICB9CgogIC8vLyBJbnZvY2F0aW9uIG9mIGEgY29uc3RydWN0b3IgKGJvZHkpIFtlbGVtZW50XSB0aHJvdWdoIGEgdGhpcyBvciBzdXBlcgogIC8vLyBjb25zdHJ1Y3RvciBjYWxsIHdpdGggdGhlIGdpdmVuIFtjYWxsU3RydWN0dXJlXS4KICBmYWN0b3J5IFN0YXRpY1VzZS5jb25zdHJ1Y3RvckJvZHlJbnZva2UoCiAgICAgIENvbnN0cnVjdG9yQm9keUVudGl0eSBlbGVtZW50LCBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUpIHsKICAgIGFzc2VydCgKICAgICAgICBjYWxsU3RydWN0dXJlICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICJOb3QgQ2FsbFN0cnVjdHVyZSBmb3IgY29uc3RydWN0b3IgYm9keSBpbnZvY2F0aW9uIG9mIGVsZW1lbnQgIgogICAgICAgICAgICAiJGVsZW1lbnQuIikpOwogICAgcmV0dXJuIG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoZWxlbWVudCwgU3RhdGljVXNlS2luZC5TVEFUSUNfSU5WT0tFLAogICAgICAgIGNhbGxTdHJ1Y3R1cmU6IGNhbGxTdHJ1Y3R1cmUpOwogIH0KCiAgLy8vIERpcmVjdCBpbnZvY2F0aW9uIG9mIGEgZ2VuZXJhdG9yIChib2R5KSBbZWxlbWVudF0sIGFzIGEgc3RhdGljIGNhbGwgb3IKICAvLy8gdGhyb3VnaCBhIHRoaXMgb3Igc3VwZXIgY29uc3RydWN0b3IgY2FsbC4KICBmYWN0b3J5IFN0YXRpY1VzZS5nZW5lcmF0b3JCb2R5SW52b2tlKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuU1RBVElDX0lOVk9LRSwKICAgICAgICBjYWxsU3RydWN0dXJlOiBDYWxsU3RydWN0dXJlLk5PX0FSR1MpOwogIH0KCiAgLy8vIERpcmVjdCBpbnZvY2F0aW9uIG9mIGEgbWV0aG9kIFtlbGVtZW50XSB3aXRoIHRoZSBnaXZlbiBbY2FsbFN0cnVjdHVyZV0uCiAgZmFjdG9yeSBTdGF0aWNVc2UuZGlyZWN0SW52b2tlKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQsCiAgICAgIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgYXNzZXJ0KAogICAgICAgIGVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlciwKICAgICAgICBmYWlsZWRBdChlbGVtZW50LAogICAgICAgICAgICAiRGlyZWN0IGludm9rZSBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYW4gaW5zdGFuY2UgbWVtYmVyLiIpKTsKICAgIGFzc2VydChlbGVtZW50LmlzRnVuY3Rpb24sCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwgIkRpcmVjdCBpbnZva2UgZWxlbWVudCAkZWxlbWVudCBtdXN0IGJlIGEgbWV0aG9kLiIpKTsKICAgIFN0YXRpY1VzZSBzdGF0aWNVc2UgPSBuZXcgU3RhdGljVXNlLmludGVybmFsKAogICAgICAgIGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuRElSRUNUX0lOVk9LRSwKICAgICAgICBjYWxsU3RydWN0dXJlOiBjYWxsU3RydWN0dXJlLCB0eXBlQXJndW1lbnRzOiB0eXBlQXJndW1lbnRzKTsKICAgIGFzc2VydChzdGF0aWNVc2UuX2NoZWNrR2VuZXJpY0ludmFyaWFudHMoKSk7CiAgICByZXR1cm4gc3RhdGljVXNlOwogIH0KCiAgLy8vIERpcmVjdCByZWFkIGFjY2VzcyBvZiBhIGZpZWxkIG9yIGdldHRlciBbZWxlbWVudF0uCiAgZmFjdG9yeSBTdGF0aWNVc2UuZGlyZWN0R2V0KE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc0luc3RhbmNlTWVtYmVyLAogICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsCiAgICAgICAgICAgICJEaXJlY3QgZ2V0IGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhbiBpbnN0YW5jZSBtZW1iZXIuIikpOwogICAgYXNzZXJ0KAogICAgICAgIGVsZW1lbnQuaXNGaWVsZCB8fCBlbGVtZW50LmlzR2V0dGVyLAogICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsCiAgICAgICAgICAgICJEaXJlY3QgZ2V0IGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhIGZpZWxkIG9yIGEgZ2V0dGVyLiIpKTsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuU1RBVElDX0dFVCk7CiAgfQoKICAvLy8gRGlyZWN0IHdyaXRlIGFjY2VzcyBvZiBhIGZpZWxkIFtlbGVtZW50XS4KICBmYWN0b3J5IFN0YXRpY1VzZS5kaXJlY3RTZXQoRmllbGRFbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KAogICAgICAgIGVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlciwKICAgICAgICBmYWlsZWRBdChlbGVtZW50LAogICAgICAgICAgICAiRGlyZWN0IHNldCBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYW4gaW5zdGFuY2UgbWVtYmVyLiIpKTsKICAgIGFzc2VydChlbGVtZW50LmlzRmllbGQsCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwgIkRpcmVjdCBzZXQgZWxlbWVudCAkZWxlbWVudCBtdXN0IGJlIGEgZmllbGQuIikpOwogICAgcmV0dXJuIG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoZWxlbWVudCwgU3RhdGljVXNlS2luZC5TVEFUSUNfU0VUKTsKICB9CgogIC8vLyBDb25zdHJ1Y3RvciBpbnZvY2F0aW9uIG9mIFtlbGVtZW50XSB3aXRoIHRoZSBnaXZlbiBbY2FsbFN0cnVjdHVyZV0uCiAgZmFjdG9yeSBTdGF0aWNVc2UuY29uc3RydWN0b3JJbnZva2UoCiAgICAgIENvbnN0cnVjdG9yRW50aXR5IGVsZW1lbnQsIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSkgewogICAgYXNzZXJ0KAogICAgICAgIGVsZW1lbnQuaXNDb25zdHJ1Y3RvciwKICAgICAgICBmYWlsZWRBdChlbGVtZW50LAogICAgICAgICAgICAiQ29uc3RydWN0b3IgaW52b2NhdGlvbiBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYSBjb25zdHJ1Y3Rvci4iKSk7CiAgICBhc3NlcnQoCiAgICAgICAgY2FsbFN0cnVjdHVyZSAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgICAiTm90IENhbGxTdHJ1Y3R1cmUgZm9yIGNvbnN0cnVjdG9yIGludm9jYXRpb24gb2YgZWxlbWVudCAiCiAgICAgICAgICAgICIkZWxlbWVudC4iKSk7CiAgICByZXR1cm4gbmV3IFN0YXRpY1VzZS5pbnRlcm5hbChlbGVtZW50LCBTdGF0aWNVc2VLaW5kLlNUQVRJQ19JTlZPS0UsCiAgICAgICAgY2FsbFN0cnVjdHVyZTogY2FsbFN0cnVjdHVyZSk7CiAgfQoKICAvLy8gQ29uc3RydWN0b3IgaW52b2NhdGlvbiBvZiBbZWxlbWVudF0gd2l0aCB0aGUgZ2l2ZW4gW2NhbGxTdHJ1Y3R1cmVdIG9uCiAgLy8vIFt0eXBlXS4KICBmYWN0b3J5IFN0YXRpY1VzZS50eXBlZENvbnN0cnVjdG9ySW52b2tlKAogICAgICBDb25zdHJ1Y3RvckVudGl0eSBlbGVtZW50LAogICAgICBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUsCiAgICAgIEludGVyZmFjZVR5cGUgdHlwZSwKICAgICAgSW1wb3J0RW50aXR5IGRlZmVycmVkSW1wb3J0KSB7CiAgICBhc3NlcnQodHlwZSAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsICJObyB0eXBlIHByb3ZpZGVkIGZvciBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uLiIpKTsKICAgIGFzc2VydCgKICAgICAgICBlbGVtZW50LmlzQ29uc3RydWN0b3IsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICJUeXBlZCBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uIGVsZW1lbnQgJGVsZW1lbnQgIgogICAgICAgICAgICAibXVzdCBiZSBhIGNvbnN0cnVjdG9yLiIpKTsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuQ09OU1RSVUNUT1JfSU5WT0tFLAogICAgICAgIHR5cGU6IHR5cGUsCiAgICAgICAgY2FsbFN0cnVjdHVyZTogY2FsbFN0cnVjdHVyZSwKICAgICAgICBkZWZlcnJlZEltcG9ydDogZGVmZXJyZWRJbXBvcnQpOwogIH0KCiAgLy8vIENvbnN0YW50IGNvbnN0cnVjdG9yIGludm9jYXRpb24gb2YgW2VsZW1lbnRdIHdpdGggdGhlIGdpdmVuCiAgLy8vIFtjYWxsU3RydWN0dXJlXSBvbiBbdHlwZV0uCiAgZmFjdG9yeSBTdGF0aWNVc2UuY29uc3RDb25zdHJ1Y3Rvckludm9rZSgKICAgICAgQ29uc3RydWN0b3JFbnRpdHkgZWxlbWVudCwKICAgICAgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlLAogICAgICBJbnRlcmZhY2VUeXBlIHR5cGUsCiAgICAgIEltcG9ydEVudGl0eSBkZWZlcnJlZEltcG9ydCkgewogICAgYXNzZXJ0KHR5cGUgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdChlbGVtZW50LCAiTm8gdHlwZSBwcm92aWRlZCBmb3IgY29uc3RydWN0b3IgaW52b2NhdGlvbi4iKSk7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc0NvbnN0cnVjdG9yLAogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgICAiQ29uc3QgY29uc3RydWN0b3IgaW52b2NhdGlvbiBlbGVtZW50ICRlbGVtZW50ICIKICAgICAgICAgICAgIm11c3QgYmUgYSBjb25zdHJ1Y3Rvci4iKSk7CiAgICByZXR1cm4gbmV3IFN0YXRpY1VzZS5pbnRlcm5hbCgKICAgICAgICBlbGVtZW50LCBTdGF0aWNVc2VLaW5kLkNPTlNUX0NPTlNUUlVDVE9SX0lOVk9LRSwKICAgICAgICB0eXBlOiB0eXBlLAogICAgICAgIGNhbGxTdHJ1Y3R1cmU6IGNhbGxTdHJ1Y3R1cmUsCiAgICAgICAgZGVmZXJyZWRJbXBvcnQ6IGRlZmVycmVkSW1wb3J0KTsKICB9CgogIC8vLyBJbml0aWFsaXphdGlvbiBvZiBhbiBpbnN0YW5jZSBmaWVsZCBbZWxlbWVudF0uCiAgZmFjdG9yeSBTdGF0aWNVc2UuZmllbGRJbml0KEZpZWxkRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydCgKICAgICAgICBlbGVtZW50LmlzSW5zdGFuY2VNZW1iZXIsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGVsZW1lbnQsICJGaWVsZCBpbml0IGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhbiBpbnN0YW5jZSBmaWVsZC4iKSk7CiAgICByZXR1cm4gbmV3IFN0YXRpY1VzZS5pbnRlcm5hbChlbGVtZW50LCBTdGF0aWNVc2VLaW5kLkZJRUxEX0lOSVQpOwogIH0KCiAgLy8vIENvbnN0YW50IGluaXRpYWxpemF0aW9uIG9mIGFuIGluc3RhbmNlIGZpZWxkIFtlbGVtZW50XS4KICBmYWN0b3J5IFN0YXRpY1VzZS5maWVsZENvbnN0YW50SW5pdCgKICAgICAgRmllbGRFbnRpdHkgZWxlbWVudCwgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgewogICAgYXNzZXJ0KAogICAgICAgIGVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlciwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZWxlbWVudCwgIkZpZWxkIGluaXQgZWxlbWVudCAkZWxlbWVudCBtdXN0IGJlIGFuIGluc3RhbmNlIGZpZWxkLiIpKTsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuRklFTERfQ09OU1RBTlRfSU5JVCwKICAgICAgICBjb25zdGFudDogY29uc3RhbnQpOwogIH0KCiAgLy8vIFJlYWQgYWNjZXNzIG9mIGFuIGluc3RhbmNlIGZpZWxkIG9yIGJveGVkIGZpZWxkIFtlbGVtZW50XS4KICBmYWN0b3J5IFN0YXRpY1VzZS5maWVsZEdldChGaWVsZEVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc0luc3RhbmNlTWVtYmVyIHx8IGVsZW1lbnQgaXMgSlJlY29yZEZpZWxkLAogICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsCiAgICAgICAgICAgICJGaWVsZCBpbml0IGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvciBib3hlZCBmaWVsZC4iKSk7CiAgICByZXR1cm4gbmV3IFN0YXRpY1VzZS5pbnRlcm5hbChlbGVtZW50LCBTdGF0aWNVc2VLaW5kLklOU1RBTkNFX0ZJRUxEX0dFVCk7CiAgfQoKICAvLy8gV3JpdGUgYWNjZXNzIG9mIGFuIGluc3RhbmNlIGZpZWxkIG9yIGJveGVkIGZpZWxkIFtlbGVtZW50XS4KICBmYWN0b3J5IFN0YXRpY1VzZS5maWVsZFNldChGaWVsZEVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc0luc3RhbmNlTWVtYmVyIHx8IGVsZW1lbnQgaXMgSlJlY29yZEZpZWxkLAogICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsCiAgICAgICAgICAgICJGaWVsZCBpbml0IGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvciBib3hlZCBmaWVsZC4iKSk7CiAgICByZXR1cm4gbmV3IFN0YXRpY1VzZS5pbnRlcm5hbChlbGVtZW50LCBTdGF0aWNVc2VLaW5kLklOU1RBTkNFX0ZJRUxEX1NFVCk7CiAgfQoKICAvLy8gUmVhZCBvZiBhIGxvY2FsIGZ1bmN0aW9uIFtlbGVtZW50XS4KICBmYWN0b3J5IFN0YXRpY1VzZS5jbG9zdXJlKExvY2FsIGVsZW1lbnQpIHsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuQ0xPU1VSRSk7CiAgfQoKICAvLy8gQW4gaW52b2NhdGlvbiBvZiBhIGxvY2FsIGZ1bmN0aW9uIFtlbGVtZW50XSB3aXRoIHRoZSBwcm92aWRlZAogIC8vLyBbY2FsbFN0cnVjdHVyZV0gYW5kIFt0eXBlQXJndW1lbnRzXS4KICBmYWN0b3J5IFN0YXRpY1VzZS5jbG9zdXJlQ2FsbChMb2NhbCBlbGVtZW50LCBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUsCiAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIFN0YXRpY1VzZSBzdGF0aWNVc2UgPSBuZXcgU3RhdGljVXNlLmludGVybmFsKAogICAgICAgIGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuQ0xPU1VSRV9DQUxMLAogICAgICAgIGNhbGxTdHJ1Y3R1cmU6IGNhbGxTdHJ1Y3R1cmUsIHR5cGVBcmd1bWVudHM6IHR5cGVBcmd1bWVudHMpOwogICAgYXNzZXJ0KHN0YXRpY1VzZS5fY2hlY2tHZW5lcmljSW52YXJpYW50cygpKTsKICAgIHJldHVybiBzdGF0aWNVc2U7CiAgfQoKICAvLy8gUmVhZCBvZiBhIGNhbGwgW21ldGhvZF0gb24gYSBjbG9zdXJlQ2xhc3MuCiAgZmFjdG9yeSBTdGF0aWNVc2UuY2FsbE1ldGhvZChGdW5jdGlvbkVudGl0eSBtZXRob2QpIHsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKG1ldGhvZCwgU3RhdGljVXNlS2luZC5DQUxMX01FVEhPRCk7CiAgfQoKICAvLy8gSW1wbGljaXQgbWV0aG9kL2NvbnN0cnVjdG9yIGludm9jYXRpb24gb2YgW2VsZW1lbnRdIGNyZWF0ZWQgYnkgdGhlCiAgLy8vIGJhY2tlbmQuCiAgZmFjdG9yeSBTdGF0aWNVc2UuaW1wbGljaXRJbnZva2UoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoZWxlbWVudCwgU3RhdGljVXNlS2luZC5TVEFUSUNfSU5WT0tFLAogICAgICAgIGNhbGxTdHJ1Y3R1cmU6IGVsZW1lbnQucGFyYW1ldGVyU3RydWN0dXJlLmNhbGxTdHJ1Y3R1cmUpOwogIH0KCiAgLy8vIElubGluaW5nIG9mIFtlbGVtZW50XS4KICBmYWN0b3J5IFN0YXRpY1VzZS5jb25zdHJ1Y3RvcklubGluaW5nKAogICAgICBDb25zdHJ1Y3RvckVudGl0eSBlbGVtZW50LCBJbnRlcmZhY2VUeXBlIGluc3RhbmNlVHlwZSkgewogICAgcmV0dXJuIG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoZWxlbWVudCwgU3RhdGljVXNlS2luZC5JTkxJTklORywKICAgICAgICB0eXBlOiBpbnN0YW5jZVR5cGUpOwogIH0KCiAgLy8vIElubGluaW5nIG9mIFtlbGVtZW50XS4KICBmYWN0b3J5IFN0YXRpY1VzZS5tZXRob2RJbmxpbmluZygKICAgICAgRnVuY3Rpb25FbnRpdHkgZWxlbWVudCwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgcmV0dXJuIG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoZWxlbWVudCwgU3RhdGljVXNlS2luZC5JTkxJTklORywKICAgICAgICB0eXBlQXJndW1lbnRzOiB0eXBlQXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBvdGhlciBpcyBTdGF0aWNVc2UgJiYKICAgICAgICBlbGVtZW50ID09IG90aGVyLmVsZW1lbnQgJiYKICAgICAgICBraW5kID09IG90aGVyLmtpbmQgJiYKICAgICAgICB0eXBlID09IG90aGVyLnR5cGUgJiYKICAgICAgICBjYWxsU3RydWN0dXJlID09IG90aGVyLmNhbGxTdHJ1Y3R1cmUgJiYKICAgICAgICBlcXVhbEVsZW1lbnRzKHR5cGVBcmd1bWVudHMsIG90aGVyLnR5cGVBcmd1bWVudHMpICYmCiAgICAgICAgZGVmZXJyZWRJbXBvcnQgPT0gb3RoZXIuZGVmZXJyZWRJbXBvcnQgJiYKICAgICAgICBjb25zdGFudCA9PSBvdGhlci5jb25zdGFudDsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+CiAgICAgICdTdGF0aWNVc2UoJGVsZW1lbnQsJGtpbmQsJHR5cGUsJHR5cGVBcmd1bWVudHMsJGNhbGxTdHJ1Y3R1cmUpJzsKfQoKZW51bSBUeXBlVXNlS2luZCB7CiAgSVNfQ0hFQ0ssCiAgQVNfQ0FTVCwKICBDQVRDSF9UWVBFLAogIFRZUEVfTElURVJBTCwKICBJTlNUQU5USUFUSU9OLAogIE5BVElWRV9JTlNUQU5USUFUSU9OLAogIENPTlNUX0lOU1RBTlRJQVRJT04sCiAgSU1QTElDSVRfQ0FTVCwKICBQQVJBTUVURVJfQ0hFQ0ssCiAgUlRJX1ZBTFVFLAogIFRZUEVfQVJHVU1FTlQsCiAgTkFNRURfVFlQRV9WQVJJQUJMRV9ORVdfUlRJLAp9CgovLy8gVXNlIG9mIGEgW0RhcnRUeXBlXS4KY2xhc3MgVHlwZVVzZSB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAndHlwZS11c2UnOwoKICBmaW5hbCBEYXJ0VHlwZSB0eXBlOwogIGZpbmFsIFR5cGVVc2VLaW5kIGtpbmQ7CiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGhhc2hDb2RlOwogIGZpbmFsIEltcG9ydEVudGl0eSBkZWZlcnJlZEltcG9ydDsKCiAgVHlwZVVzZS5pbnRlcm5hbChEYXJ0VHlwZSB0eXBlLCBUeXBlVXNlS2luZCBraW5kLCBbdGhpcy5kZWZlcnJlZEltcG9ydF0pCiAgICAgIDogdGhpcy50eXBlID0gdHlwZSwKICAgICAgICB0aGlzLmtpbmQgPSBraW5kLAogICAgICAgIHRoaXMuaGFzaENvZGUgPSBIYXNoaW5nLm9iamVjdHNIYXNoKHR5cGUsIGtpbmQsIGRlZmVycmVkSW1wb3J0KTsKCiAgZmFjdG9yeSBUeXBlVXNlLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBEYXJ0VHlwZSB0eXBlID0gc291cmNlLnJlYWREYXJ0VHlwZSgpOwogICAgVHlwZVVzZUtpbmQga2luZCA9IHNvdXJjZS5yZWFkRW51bShUeXBlVXNlS2luZC52YWx1ZXMpOwogICAgSW1wb3J0RW50aXR5IGRlZmVycmVkSW1wb3J0ID0gc291cmNlLnJlYWRJbXBvcnRPck51bGwoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgVHlwZVVzZS5pbnRlcm5hbCh0eXBlLCBraW5kLCBkZWZlcnJlZEltcG9ydCk7CiAgfQoKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlRGFydFR5cGUodHlwZSk7CiAgICBzaW5rLndyaXRlRW51bShraW5kKTsKICAgIHNpbmsud3JpdGVJbXBvcnRPck51bGwoZGVmZXJyZWRJbXBvcnQpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIC8vLyBTaG9ydCB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIHVzZSBmb3IgdGVzdGluZy4KICBTdHJpbmcgZ2V0IHNob3J0VGV4dCB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5JU19DSEVDSzoKICAgICAgICBzYi53cml0ZSgnaXM6Jyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuQVNfQ0FTVDoKICAgICAgICBzYi53cml0ZSgnYXM6Jyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuQ0FUQ0hfVFlQRToKICAgICAgICBzYi53cml0ZSgnY2F0Y2g6Jyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuVFlQRV9MSVRFUkFMOgogICAgICAgIHNiLndyaXRlKCdsaXQ6Jyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuSU5TVEFOVElBVElPTjoKICAgICAgICBzYi53cml0ZSgnaW5zdDonKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5DT05TVF9JTlNUQU5USUFUSU9OOgogICAgICAgIHNiLndyaXRlKCdjb25zdDonKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5OQVRJVkVfSU5TVEFOVElBVElPTjoKICAgICAgICBzYi53cml0ZSgnbmF0aXZlOicpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLklNUExJQ0lUX0NBU1Q6CiAgICAgICAgc2Iud3JpdGUoJ2ltcGw6Jyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuUEFSQU1FVEVSX0NIRUNLOgogICAgICAgIHNiLndyaXRlKCdwYXJhbTonKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5SVElfVkFMVUU6CiAgICAgICAgc2Iud3JpdGUoJ3J0aTonKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5UWVBFX0FSR1VNRU5UOgogICAgICAgIHNiLndyaXRlKCd0eXBlQXJnOicpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLk5BTUVEX1RZUEVfVkFSSUFCTEVfTkVXX1JUSToKICAgICAgICBzYi53cml0ZSgnbmFtZWQ6Jyk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBzYi53cml0ZSh0eXBlKTsKICAgIGlmIChkZWZlcnJlZEltcG9ydCAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCd7Jyk7CiAgICAgIHNiLndyaXRlKGRlZmVycmVkSW1wb3J0Lm5hbWUpOwogICAgICBzYi53cml0ZSgnfScpOwogICAgfQogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICAvLy8gW3R5cGVdIHVzZWQgaW4gYW4gaXMgY2hlY2ssIGxpa2UgYGUgaXMgVGAgb3IgYGUgaXMhIFRgLgogIGZhY3RvcnkgVHlwZVVzZS5pc0NoZWNrKERhcnRUeXBlIHR5cGUpIHsKICAgIHJldHVybiBuZXcgVHlwZVVzZS5pbnRlcm5hbCh0eXBlLCBUeXBlVXNlS2luZC5JU19DSEVDSyk7CiAgfQoKICAvLy8gW3R5cGVdIHVzZWQgaW4gYW4gYXMgY2FzdCwgbGlrZSBgZSBhcyBUYC4KICBmYWN0b3J5IFR5cGVVc2UuYXNDYXN0KERhcnRUeXBlIHR5cGUpIHsKICAgIHJldHVybiBuZXcgVHlwZVVzZS5pbnRlcm5hbCh0eXBlLCBUeXBlVXNlS2luZC5BU19DQVNUKTsKICB9CgogIC8vLyBbdHlwZV0gdXNlZCBhcyBhIHBhcmFtZXRlciB0eXBlIG9yIGZpZWxkIHR5cGUgaW4gRGFydCAyLCBsaWtlIGBUYCBpbjoKICAvLy8KICAvLy8gICAgbWV0aG9kKFQgdCkge30KICAvLy8gICAgVCBmaWVsZDsKICAvLy8KICBmYWN0b3J5IFR5cGVVc2UucGFyYW1ldGVyQ2hlY2soRGFydFR5cGUgdHlwZSkgewogICAgcmV0dXJuIG5ldyBUeXBlVXNlLmludGVybmFsKHR5cGUsIFR5cGVVc2VLaW5kLlBBUkFNRVRFUl9DSEVDSyk7CiAgfQoKICAvLy8gW3R5cGVdIHVzZWQgaW4gYW4gaW1wbGljaXQgY2FzdCBpbiBEYXJ0IDIsIGxpa2UgYFRgIGluCiAgLy8vCiAgLy8vICAgIGR5bmFtaWMgZm9vID0gbmV3IE9iamVjdCgpOwogIC8vLyAgICBUIGJhciA9IGZvbzsgLy8gSW1wbGljaXRseSBgVCBiYXIgPSBmb28gYXMgVGAuCiAgLy8vCiAgZmFjdG9yeSBUeXBlVXNlLmltcGxpY2l0Q2FzdChEYXJ0VHlwZSB0eXBlKSB7CiAgICByZXR1cm4gbmV3IFR5cGVVc2UuaW50ZXJuYWwodHlwZSwgVHlwZVVzZUtpbmQuSU1QTElDSVRfQ0FTVCk7CiAgfQoKICAvLy8gW3R5cGVdIHVzZWQgaW4gYSBvbiB0eXBlIGNhdGNoIGNsYXVzZSwgbGlrZSBgdHJ5IHt9IG9uIFQgY2F0Y2ggKGUpIHt9YC4KICBmYWN0b3J5IFR5cGVVc2UuY2F0Y2hUeXBlKERhcnRUeXBlIHR5cGUpIHsKICAgIHJldHVybiBuZXcgVHlwZVVzZS5pbnRlcm5hbCh0eXBlLCBUeXBlVXNlS2luZC5DQVRDSF9UWVBFKTsKICB9CgogIC8vLyBbdHlwZV0gdXNlZCBhcyBhIHR5cGUgbGl0ZXJhbCwgbGlrZSBgZm9vKCkgPT4gVDtgLgogIGZhY3RvcnkgVHlwZVVzZS50eXBlTGl0ZXJhbChEYXJ0VHlwZSB0eXBlLCBJbXBvcnRFbnRpdHkgZGVmZXJyZWRJbXBvcnQpIHsKICAgIHJldHVybiBuZXcgVHlwZVVzZS5pbnRlcm5hbCh0eXBlLCBUeXBlVXNlS2luZC5UWVBFX0xJVEVSQUwsIGRlZmVycmVkSW1wb3J0KTsKICB9CgogIC8vLyBbdHlwZV0gdXNlZCBpbiBhbiBpbnN0YW50aWF0aW9uLCBsaWtlIGBuZXcgVCgpO2AuCiAgZmFjdG9yeSBUeXBlVXNlLmluc3RhbnRpYXRpb24oSW50ZXJmYWNlVHlwZSB0eXBlKSB7CiAgICByZXR1cm4gbmV3IFR5cGVVc2UuaW50ZXJuYWwodHlwZSwgVHlwZVVzZUtpbmQuSU5TVEFOVElBVElPTik7CiAgfQoKICAvLy8gW3R5cGVdIHVzZWQgaW4gYSBjb25zdGFudCBpbnN0YW50aWF0aW9uLCBsaWtlIGBjb25zdCBUKCk7YC4KICBmYWN0b3J5IFR5cGVVc2UuY29uc3RJbnN0YW50aWF0aW9uKAogICAgICBJbnRlcmZhY2VUeXBlIHR5cGUsIEltcG9ydEVudGl0eSBkZWZlcnJlZEltcG9ydCkgewogICAgcmV0dXJuIG5ldyBUeXBlVXNlLmludGVybmFsKAogICAgICAgIHR5cGUsIFR5cGVVc2VLaW5kLkNPTlNUX0lOU1RBTlRJQVRJT04sIGRlZmVycmVkSW1wb3J0KTsKICB9CgogIC8vLyBbdHlwZV0gdXNlZCBpbiBhIG5hdGl2ZSBpbnN0YW50aWF0aW9uLgogIGZhY3RvcnkgVHlwZVVzZS5uYXRpdmVJbnN0YW50aWF0aW9uKEludGVyZmFjZVR5cGUgdHlwZSkgewogICAgcmV0dXJuIG5ldyBUeXBlVXNlLmludGVybmFsKHR5cGUsIFR5cGVVc2VLaW5kLk5BVElWRV9JTlNUQU5USUFUSU9OKTsKICB9CgogIC8vLyBbdHlwZV0gdXNlZCBhcyBhIGRpcmVjdCBSVEkgdmFsdWUuCiAgZmFjdG9yeSBUeXBlVXNlLmNvbnN0VHlwZUxpdGVyYWwoRGFydFR5cGUgdHlwZSkgewogICAgcmV0dXJuIG5ldyBUeXBlVXNlLmludGVybmFsKHR5cGUsIFR5cGVVc2VLaW5kLlJUSV9WQUxVRSk7CiAgfQoKICAvLy8gW3R5cGVdIHVzZWQgaW4gYSBgaW5zdGFuY2VvZmAgY2hlY2suCiAgZmFjdG9yeSBUeXBlVXNlLmluc3RhbmNlQ29uc3RydWN0b3IoRGFydFR5cGUgdHlwZSkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyLHNyYSk6IFVzZSBhIHNlcGFyYXRlIHVzZSBraW5kIGlmIGNvbnN0cnVjdG9ycyBpcyBubwogICAgLy8gbG9uZ2VyIHVzZWQgZm9yIFJUSS4KICAgIHJldHVybiBuZXcgVHlwZVVzZS5pbnRlcm5hbCh0eXBlLCBUeXBlVXNlS2luZC5SVElfVkFMVUUpOwogIH0KCiAgLy8vIFt0eXBlXSB1c2VkIGRpcmVjdGx5IGFzIGEgdHlwZSBhcmd1bWVudC4KICAvLy8KICAvLy8gVGhlIGhhcHBlbnMgZHVyaW5nIG9wdGltaXphdGlvbiB3aGVyZSBhIHR5cGUgdmFyaWFibGUgY2FuIGJlIHJlcGxhY2VkIGJ5CiAgLy8vIGFuIGludmFyaWFibGUgdHlwZSBhcmd1bWVudCBkZXJpdmVkIGZyb20gYSBjb25zdGFudCByZWNlaXZlci4KICBmYWN0b3J5IFR5cGVVc2UudHlwZUFyZ3VtZW50KERhcnRUeXBlIHR5cGUpIHsKICAgIHJldHVybiBuZXcgVHlwZVVzZS5pbnRlcm5hbCh0eXBlLCBUeXBlVXNlS2luZC5UWVBFX0FSR1VNRU5UKTsKICB9CgogIC8vLyBbdHlwZV0gdXNlZCBhcyBhIG5hbWVkIHR5cGUgdmFyaWFibGUgaW4gYSByZWNpcGUuCiAgZmFjdG9yeSBUeXBlVXNlLm5hbWVkVHlwZVZhcmlhYmxlTmV3UnRpKFR5cGVWYXJpYWJsZVR5cGUgdHlwZSkgPT4KICAgICAgVHlwZVVzZS5pbnRlcm5hbCh0eXBlLCBUeXBlVXNlS2luZC5OQU1FRF9UWVBFX1ZBUklBQkxFX05FV19SVEkpOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIFR5cGVVc2UpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0eXBlID09IG90aGVyLnR5cGUgJiYga2luZCA9PSBvdGhlci5raW5kOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1R5cGVVc2UoJHR5cGUsJGtpbmQpJzsKfQoKLy8vIFVzZSBvZiBhIFtDb25zdGFudFZhbHVlXS4KY2xhc3MgQ29uc3RhbnRVc2UgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2NvbnN0YW50LXVzZSc7CgogIGZpbmFsIENvbnN0YW50VmFsdWUgdmFsdWU7CgogIENvbnN0YW50VXNlLl8odGhpcy52YWx1ZSk7CgogIGZhY3RvcnkgQ29uc3RhbnRVc2UucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPSBzb3VyY2UucmVhZENvbnN0YW50KCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IENvbnN0YW50VXNlLl8odmFsdWUpOwogIH0KCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUNvbnN0YW50KHZhbHVlKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICAvLy8gU2hvcnQgdGV4dHVhbCByZXByZXNlbnRhdGlvbiB1c2UgZm9yIHRlc3RpbmcuCiAgU3RyaW5nIGdldCBzaG9ydFRleHQgewogICAgcmV0dXJuIHZhbHVlLnRvRGFydFRleHQoKTsKICB9CgogIC8vLyBDb25zdGFudCB1c2VkIGFzIHRoZSBpbml0aWFsIHZhbHVlIG9mIGEgZmllbGQuCiAgQ29uc3RhbnRVc2UuaW5pdChDb25zdGFudFZhbHVlIHZhbHVlKSA6IHRoaXMuXyh2YWx1ZSk7CgogIC8vLyBUeXBlIGNvbnN0YW50IHVzZWQgZm9yIHJlZ2lzdHJhdGlvbiBvZiBjdXN0b20gZWxlbWVudHMuCiAg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aW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy51dGlsLmVudW1zZXQ7CgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbic7CgovLy8gQSBzZXQgb2YgZW51bSB2YWx1ZXMgYmFzZWQgb24gYSBiaXQgbWFzayBvZiB0aGUgc2hpZnRlZCBlbnVtIGluZGljZXMuCmFic3RyYWN0IGNsYXNzIEVudW1TZXQ8RT4gewogIC8vLyBDcmVhdGVzIGFuIGVtcHR5IG11dGFibGUgc2V0LgogIGZhY3RvcnkgRW51bVNldCgpID0gX0VudW1TZXQ8RT47CgogIC8vLyBDcmVhdGVzIGEgbXV0YWJsZSBzZXQgZnJvbSB0aGUgYml0IG1hc2sgW3ZhbHVlXS4KICBmYWN0b3J5IEVudW1TZXQuZnJvbVZhbHVlKGludCB2YWx1ZSkgPSBfRW51bVNldDxFPi5mcm9tVmFsdWU7CgogIC8vLyBDcmVhdGVzIGFuIGltbXV0YWJsZSBzZXQgZnJvbSB0aGUgYml0IG1hc2sgW3ZhbHVlXS4KICBjb25zdCBmYWN0b3J5IEVudW1TZXQuZml4ZWQoaW50IHZhbHVlKSA9IF9Db25zdEVudW1TZXQ8RT47CgogIC8vLyBDcmVhdGUgYSBzZXQgY29udGFpbmluZyB0aGUgW3ZhbHVlc10uIElmIFtmaXhlZF0gaXMgYHRydWVgIHRoZSBzZXQgaXMKICAvLy8gaW1tdXRhYmxlLgogIGZhY3RvcnkgRW51bVNldC5mcm9tVmFsdWVzKEl0ZXJhYmxlPEU+IHZhbHVlcywge2Jvb2wgZml4ZWQ6IGZhbHNlfSkgewogICAgaWYgKGZpeGVkKSB7CiAgICAgIHJldHVybiBuZXcgX0NvbnN0RW51bVNldDxFPi5mcm9tVmFsdWVzKHZhbHVlcyk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IF9FbnVtU2V0PEU+LmZyb21WYWx1ZXModmFsdWVzKTsKICAgIH0KICB9CgogIGNvbnN0IEVudW1TZXQuXygpOwoKICAvLy8gVGhlIGJpdCBtYXNrIG9mIHRoZSBzaGlmdGVkIGluZGljZXMgZm9yIHRoZSBlbnVtIHZhbHVlcyBpbiB0aGlzIHNldC4KICBpbnQgZ2V0IHZhbHVlOwoKICAvLy8gU2V0cyB0aGUgZW51bSB2YWx1ZXMgaW4gdGhpcyBzZXQgdGhyb3VnaCBhIGJpdCBtYXNrIG9mIHRoZSBzaGlmdGVkIGVudW0KICAvLy8gdmFsdWUgaW5kaWNlcy4KICB2b2lkIHNldCB2YWx1ZShpbnQgbWFzayk7CgogIC8vLyBBZGRzIFtlbnVtVmFsdWVdIHRvIHRoaXMgc2V0LiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgc2V0IHdhcyBjaGFuZ2VkIGJ5CiAgLy8vIHRoaXMgYWN0aW9uLgogIGJvb2wgYWRkKEUgZW51bVZhbHVlKTsKCiAgLy8vIEFkZHMgYWxsIGVudW0gdmFsdWVzIGluIFtzZXRdIHRvIHRoaXMgc2V0LgogIHZvaWQgYWRkQWxsKEVudW1TZXQ8RT4gc2V0KTsKCiAgLy8vIFJlbW92ZXMgW2VudW1WYWx1ZV0gZnJvbSB0aGlzIHNldC4gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHNldCB3YXMgY2hhbmdlZAogIC8vLyBieSB0aGlzIGFjdGlvbi4KICBib29sIHJlbW92ZShFIGVudW1WYWx1ZSk7CgogIC8vLyBSZW1vdmVzIGFsbCBlbnVtIHZhbHVlcyBpbiBbc2V0XSBmcm9tIHRoaXMgc2V0LiBUaGUgc2V0IG9mIHJlbW92ZWQgdmFsdWVzCiAgLy8vIGlzIHJldHVybmVkLgogIEVudW1TZXQ8RT4gcmVtb3ZlQWxsKEVudW1TZXQ8RT4gc2V0KTsKCiAgLy8vIFJldHVybnMgYSBuZXcgc2V0IGNvbnRhaW5pbmcgYWxsIHZhbHVlcyBpbiBib3RoIHRoaXMgYW5kIHRoZSBbb3RoZXJdIHNldC4KICBFbnVtU2V0PEU+IGludGVyc2VjdGlvbihFbnVtU2V0PEU+IG90aGVyKSB7CiAgICByZXR1cm4gbmV3IEVudW1TZXQuZnJvbVZhbHVlKHZhbHVlICYgb3RoZXIudmFsdWUpOwogIH0KCiAgLy8vIFJldHVybnMgYSBuZXcgc2V0IGNvbnRhaW5pbmcgYWxsIHZhbHVlcyBlaXRoZXIgaW4gdGhpcyBzZXQgb3IgaW4gdGhlCiAgLy8vIFtvdGhlcl0gc2V0LgogIEVudW1TZXQ8RT4gdW5pb24oRW51bVNldDxFPiBvdGhlcikgewogICAgcmV0dXJuIG5ldyBFbnVtU2V0LmZyb21WYWx1ZSh2YWx1ZSB8IG90aGVyLnZhbHVlKTsKICB9CgogIC8vLyBSZXR1cm5zIGEgbmV3IHNldCBjb250YWluaW5nIGFsbCB2YWx1ZXMgaW4gdGhpcyBzZXQgdGhhdCBhcmUgbm90IGluIHRoZQogIC8vLyBbb3RoZXJdIHNldC4KICBFbnVtU2V0PEU+IG1pbnVzKEVudW1TZXQ8RT4gb3RoZXIpIHsKICAgIHJldHVybiBuZXcgRW51bVNldC5mcm9tVmFsdWUodmFsdWUgJiB+b3RoZXIudmFsdWUpOwogIH0KCiAgLy8vIENsZWFycyB0aGlzIHNldC4KICB2b2lkIGNsZWFyKCk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbZW51bVZhbHVlXSBpcyBpbiB0aGlzIHNldC4KICBib29sIGNvbnRhaW5zKEUgZW51bVZhbHVlKSB7CiAgICByZXR1cm4gKHZhbHVlICYgKDEgPDwgKGVudW1WYWx1ZSBhcyBkeW5hbWljKS5pbmRleCkpICE9IDA7CiAgfQoKICAvLy8gUmV0dXJucyBhbiBbSXRlcmFibGVdIG9mIHRoZSB2YWx1ZXMgaXMgaW4gdGhpcyBzZXQgdXNpbmcgW3ZhbHVlc10gdG8KICAvLy8gY29udmVydCB0aGUgc3RvcmVkIGluZGljZXMgdG8gZW51bSB2YWx1ZXMuCiAgLy8vCiAgLy8vIFRoZSBtZXRob2QgaXMgdHlwaWNhbGx5IGNhbGxlZCB3aXRoIHRoZSBgdmFsdWVzYCBwcm9wZXJ0eSBvZiB0aGUgZW51bQogIC8vLyBjbGFzcyBhcyBhcmd1bWVudDoKICAvLy8KICAvLy8gICAgIEVudW1TZXQ8RW51bUNsYXNzPiBzZXQgPSAuLi4KICAvLy8gICAgIEl0ZXJhYmxlPEVudW1DbGFzcz4gaXRlcmFibGUgPSBzZXQuaXRlcmFibGUoRW51bUNsYXNzLnZhbHVlcyk7CiAgLy8vCiAgSXRlcmFibGU8RT4gaXRlcmFibGUoTGlzdDxFPiB2YWx1ZXMpIHsKICAgIHJldHVybiBuZXcgX0VudW1TZXRJdGVyYWJsZSh0aGlzLCB2YWx1ZXMpOwogIH0KCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoaXMgYW5kIFtvdGhlcl0gaGF2ZSBhbnkgZWxlbWVudHMgaW4gY29tbW9uLgogIGJvb2wgaW50ZXJzZWN0cyhFbnVtU2V0PEU+IG90aGVyKSB7CiAgICByZXR1cm4gKHZhbHVlICYgb3RoZXIudmFsdWUpICE9IDA7CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBzZXQgaXMgZW1wdHkuCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiB2YWx1ZSA9PSAwOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBzZXQgaXMgbm90IGVtcHR5LgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gdmFsdWUgIT0gMDsKCiAgLy8vIFJldHVybnMgYSBuZXcgbXV0YWJsZSBlbnVtIHNldCB0aGF0IGNvbnRhaW5zIHRoZSB2YWx1ZXMgb2YgdGhpcyBzZXQuCiAgRW51bVNldDxFPiBjbG9uZSgpID0+IG5ldyBFbnVtU2V0PEU+LmZyb21WYWx1ZSh2YWx1ZSk7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gdmFsdWUuaGFzaENvZGUgKiAxOTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBFbnVtU2V0PEU+KSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdmFsdWUgPT0gb3RoZXIudmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBpZiAodmFsdWUgPT0gMCkgcmV0dXJuICcwJzsKICAgIGludCBpbmRleCA9IHZhbHVlLmJpdExlbmd0aCAtIDE7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBpbnQgbWFzayA9IDEgPDwgaW5kZXg7CiAgICB3aGlsZSAoaW5kZXggPj0gMCkgewogICAgICBzYi53cml0ZSgodmFsdWUgJiBtYXNrKSAhPSAwID8gJzEnIDogJzAnKTsKICAgICAgaW5kZXgtLTsKICAgICAgbWFzayA+Pj0gMTsKICAgIH0KICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKLy8vIE11dGFibGUgaW1wbGVtZW50YXRpb24gb2YgW0VudW1TZXRdLgpjbGFzcyBfRW51bVNldDxFPiBleHRlbmRzIEVudW1TZXQ8RT4gewogIGludCBfdmFsdWU7CgogIF9FbnVtU2V0KCkgOiB0aGlzLmZyb21WYWx1ZSgwKTsKCiAgX0VudW1TZXQuZnJvbVZhbHVlKHRoaXMuX3ZhbHVlKSA6IHN1cGVyLl8oKTsKCiAgX0VudW1TZXQuZnJvbVZhbHVlcyhJdGVyYWJsZTxFPiB2YWx1ZXMpCiAgICAgIDogdGhpcy5fdmFsdWUgPSAwLAogICAgICAgIHN1cGVyLl8oKSB7CiAgICB2YWx1ZXMuZm9yRWFjaChhZGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCB2YWx1ZSA9PiBfdmFsdWU7CgogIEBvdmVycmlkZQogIHZvaWQgc2V0IHZhbHVlKGludCBtYXNrKSB7CiAgICBfdmFsdWUgPSBtYXNrOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBhZGQoRSBlbnVtVmFsdWUpIHsKICAgIGludCBiZWZvcmUgPSBfdmFsdWU7CiAgICBfdmFsdWUgfD0gMSA8PCAoZW51bVZhbHVlIGFzIGR5bmFtaWMpLmluZGV4OwogICAgcmV0dXJuIF92YWx1ZSAhPSBiZWZvcmU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZEFsbChFbnVtU2V0PEU+IHNldCkgewogICAgX3ZhbHVlIHw9IHNldC52YWx1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgcmVtb3ZlKEUgZW51bVZhbHVlKSB7CiAgICBpbnQgYmVmb3JlID0gX3ZhbHVlOwogICAgX3ZhbHVlICY9IH4oMSA8PCAoZW51bVZhbHVlIGFzIGR5bmFtaWMpLmluZGV4KTsKICAgIHJldHVybiBfdmFsdWUgIT0gYmVmb3JlOwogIH0KCiAgQG92ZXJyaWRlCiAgRW51bVNldDxFPiByZW1vdmVBbGwoRW51bVNldDxFPiBzZXQpIHsKICAgIGludCByZW1vdmVkID0gX3ZhbHVlICYgc2V0LnZhbHVlOwogICAgX3ZhbHVlICY9IH5zZXQudmFsdWU7CiAgICByZXR1cm4gbmV3IEVudW1TZXQ8RT4uZnJvbVZhbHVlKHJlbW92ZWQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjbGVhcigpIHsKICAgIF92YWx1ZSA9IDA7CiAgfQp9CgovLy8gSW1tdXRhYmxlIGltcGxlbWVudGF0aW9uIG9mIFtFbnVtU2V0XS4KY2xhc3MgX0NvbnN0RW51bVNldDxFPiBleHRlbmRzIEVudW1TZXQ8RT4gewogIEBvdmVycmlkZQogIGZpbmFsIGludCB2YWx1ZTsKCiAgY29uc3QgX0NvbnN0RW51bVNldCh0aGlzLnZhbHVlKSA6IHN1cGVyLl8oKTsKCiAgZmFjdG9yeSBfQ29uc3RFbnVtU2V0LmZyb21WYWx1ZXMoSXRlcmFibGU8RT4gdmFsdWVzKSB7CiAgICBpbnQgdmFsdWUgPSAwOwogICAgdm9pZCBhZGQoRSBlbnVtVmFsdWUpIHsKICAgICAgaWYgKGVudW1WYWx1ZSAhPSBudWxsKSB7CiAgICAgICAgdmFsdWUgfD0gMSA8PCAoZW51bVZhbHVlIGFzIGR5bmFtaWMpLmluZGV4OwogICAgICB9CiAgICB9CgogICAgdmFsdWVzLmZvckVhY2goYWRkKTsKICAgIHJldHVybiBuZXcgX0NvbnN0RW51bVNldCh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHNldCB2YWx1ZShpbnQgbWFzaykgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ0VudW1TZXQudmFsdWU9Jyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGFkZChFIGVudW1WYWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ0VudW1TZXQuYWRkJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZEFsbChFbnVtU2V0PEU+IHNldCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ0VudW1TZXQuYWRkQWxsJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsZWFyKCkgewogICAgaWYgKGlzRW1wdHkpIHsKICAgICAgLy8gV2UgYWxsb3cgdGhpcyBuby1vcCBvcGVyYXRpb24gb24gYW4gaW1tdXRhYmxlIHNldCB0byBzdXBwb3J0IHVzaW5nIGEKICAgICAgLy8gY29uc3RhbnQgZW1wdHkgc2V0IHRvZ2V0aGVyIHdpdGggbXV0YWJsZSBzZXRzIHdoZXJlIGFwcGxpY2FibGUuCiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignRW51bVNldC5jbGVhcicpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCByZW1vdmUoRSBlbnVtVmFsdWUpIHsKICAgIGlmIChpc0VtcHR5KSB7CiAgICAgIC8vIFdlIGFsbG93IHRoaXMgbm8tb3Agb3BlcmF0aW9uIG9uIGFuIGltbXV0YWJsZSBzZXQgdG8gc3VwcG9ydCB1c2luZyBhCiAgICAgIC8vIGNvbnN0YW50IGVtcHR5IHNldCB0b2dldGhlciB3aXRoIG11dGFibGUgc2V0cyB3aGVyZSBhcHBsaWNhYmxlLgogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignRW51bVNldC5yZW1vdmUnKTsKICB9CgogIEBvdmVycmlkZQogIEVudW1TZXQ8RT4gcmVtb3ZlQWxsKEVudW1TZXQ8RT4gc2V0KSB7CiAgICBpZiAoaXNFbXB0eSkgewogICAgICAvLyBXZSBhbGxvdyB0aGlzIG5vLW9wIG9wZXJhdGlvbiBvbiBhbiBpbW11dGFibGUgc2V0IHRvIHN1cHBvcnQgdXNpbmcgYQogICAgICAvLyBjb25zdGFudCBlbXB0eSBzZXQgdG9nZXRoZXIgd2l0aCBtdXRhYmxlIHNldHMgd2hlcmUgYXBwbGljYWJsZS4KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICBpZiAoc2V0LmlzRW1wdHkpIHsKICAgICAgLy8gV2UgYWxsb3cgdGhpcyBuby1vcCBvcGVyYXRpb24gb24gYW4gaW1tdXRhYmxlIHNldCB0byBzdXBwb3J0IHVzaW5nIGEKICAgICAgLy8gY29uc3RhbnQgZW1wdHkgc2V0IHRvZ2V0aGVyIHdpdGggbXV0YWJsZSBzZXRzIHdoZXJlIGFwcGxpY2FibGUuCiAgICAgIHJldHVybiBzZXQuY2xvbmUoKTsKICAgIH0KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdFbnVtU2V0LnJlbW92ZUFsbCcpOwogIH0KfQoKY2xhc3MgX0VudW1TZXRJdGVyYWJsZTxFPiBleHRlbmRzIEl0ZXJhYmxlQmFzZTxFPiB7CiAgZmluYWwgRW51bVNldDxFPiBfZW51bVNldDsKICBmaW5hbCBMaXN0PEU+IF92YWx1ZXM7CgogIF9FbnVtU2V0SXRlcmFibGUodGhpcy5fZW51bVNldCwgdGhpcy5fdmFsdWVzKTsKCiAgQG92ZXJyaWRlCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yID0+IG5ldyBfRW51bVNldEl0ZXJhdG9yKF9lbnVtU2V0LnZhbHVlLCBfdmFsdWVzKTsKfQoKY2xhc3MgX0VudW1TZXRJdGVyYXRvcjxFPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPEU+IHsKICBpbnQgX3ZhbHVlOwogIGludCBfaW5kZXg7CiAgaW50IF9tYXNrOwogIGZpbmFsIExpc3Q8RT4gX3ZhbHVlczsKICBFIF9jdXJyZW50OwoKICBfRW51bVNldEl0ZXJhdG9yKHRoaXMuX3ZhbHVlLCB0aGlzLl92YWx1ZXMpOwoKICBAb3ZlcnJpZGUKICBFIGdldCBjdXJyZW50ID0+IF9jdXJyZW50OwoKICBAb3ZlcnJpZGUKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKF92YWx1ZSA9PSAwKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChfbWFzayA9PSBudWxsKSB7CiAgICAgICAgX2luZGV4ID0gX3ZhbHVlLmJpdExlbmd0aCAtIDE7CiAgICAgICAgX21hc2sgPSAxIDw8IF9pbmRleDsKICAgICAgfQogICAgICBfY3VycmVudCA9IG51bGw7CiAgICAgIHdoaWxlIChfaW5kZXggPj0gMCkgewogICAgICAgIGlmIChfbWFzayAmIF92YWx1ZSAhPSAwKSB7CiAgICAgICAgICBfY3VycmVudCA9IF92YWx1ZXNbX2luZGV4XTsKICAgICAgICB9CiAgICAgICAgX21hc2sgPj49IDE7CiAgICAgICAgX2luZGV4LS07CiAgICAgICAgaWYgKF9jdXJyZW50ICE9IG51bGwpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gX2N1cnJlbnQgIT0gbnVsbDsKICAgIH0KICB9Cn0KgS4ATk48AR4BGgFKHCQjATdAATo9AUwRSBE2DTEGBAEVAUsRAU4VHAFNExkBMR8BTxYcAVATKAFQLjcEAUsTJzcEAU4TJzgEARcQATQfPwQBSzEGTBkGJ0kGKS8EAUYmJwQBKyIBLyUBSzkBDCsBDBwtLCEEAQwWICUqGxkxDxIGGgQCASknDgEiAS8BKhkUGQQBDBsBDB0TBAEMGhkxHQQBDCAZBAEMHRk0HQQBDCkmGi4EAQwREAQCASssDBMBLwE5ExwfNAgGARklBAEMHTIEAQwaLwQBDCAyBAEMERNOSQ0zBgQBDB0TTkkUBjIEAQwpE05JEwYXTkkaBjUEAgE0HRkBMQEMTQIBMw4ODRkOAS8BDB0BDBQXFA0bJx0IFxwjJgoVEiARCggfBgQCASZwYWNrYWdlOmNvbXBpbGVyL3NyYy91dGlsL2VudW1zZXQuZGFydDFzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9lbGVtZW50cy9uYW1lcy5kYXJ0j5wvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmVsZW1lbnRzLm5hbWVzOwoKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Vuc3RhYmxlL2RhcnQyanMuZGFydCcgc2hvdyAkXzsKCmltcG9ydCAnZW50aXRpZXMuZGFydCcgc2hvdyBMaWJyYXJ5RW50aXR5OwoKLy8vIEEgW05hbWVdIHJlcHJlc2VudHMgdGhlIGFic3RyYWN0aW9uIG9mIGEgRGFydCBpZGVudGlmaWVyIHdoaWNoIHRha2VzIHByaXZhY3kKLy8vIGFuZCBzZXR0ZXIgaW50byBhY2NvdW50LgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBUcnkgdG8gc2hhcmUgbG9naWMgd2l0aCBbU2VsZWN0b3JdLgphYnN0cmFjdCBjbGFzcyBOYW1lIHsKICAvLy8gQ3JlYXRlIGEgW05hbWVdIGZvciBhbiBpZGVudGlmaWVyIFt0ZXh0XS4gSWYgW3RleHRdIGJlZ2lucyB3aXRoICdfJyBhCiAgLy8vIHByaXZhdGUgbmFtZSB3aXRoIHJlc3BlY3QgdG8gW2xpYnJhcnldIGlzIGNyZWF0ZWQuIElmIFtpc1NldHRlcl0gaXMgYHRydWVgCiAgLy8vIHRoZSBjcmVhdGVkIG5hbWUgcmVwcmVzZW50cyB0aGUgc2V0dGVyIG5hbWUgJ3RleHQ9Jy4KICBmYWN0b3J5IE5hbWUoU3RyaW5nIHRleHQsIExpYnJhcnlFbnRpdHkgbGlicmFyeSwge2Jvb2wgaXNTZXR0ZXI6IGZhbHNlfSkgewogICAgaWYgKGlzUHJpdmF0ZU5hbWUodGV4dCkpIHsKICAgICAgcmV0dXJuIG5ldyBQcml2YXRlTmFtZSh0ZXh0LCBsaWJyYXJ5LCBpc1NldHRlcjogaXNTZXR0ZXIpOwogICAgfQogICAgcmV0dXJuIG5ldyBQdWJsaWNOYW1lKHRleHQsIGlzU2V0dGVyOiBpc1NldHRlcik7CiAgfQoKICAvLy8gVGhlIHRleHQgb2YgdGhlIG5hbWUgd2l0aG91dCBwcmVmaXhlZCBsaWJyYXJ5IG5hbWUgb3Igc3VmZml4ZWQgJz0nIGlmCiAgLy8vIGFwcGxpY2FibGUuCiAgU3RyaW5nIGdldCB0ZXh0OwoKICAvLy8gSXMgYHRydWVgIGlmIHRoaXMgbmFtZSByZXByZXNlbnRzIHRoZSBuYW1lIG9mIGEgc2V0dGVyLgogIGJvb2wgZ2V0IGlzU2V0dGVyOwoKICAvLy8gUmV0dXJucyB0aGUgZ2V0dGVyIG5hbWUgY29ycmVzcG9uZGluZyB0byB0aGlzIG5hbWUuIElmIHRoaXMgbmFtZSBpcyBhCiAgLy8vIHNldHRlciBuYW1lICd2PScgdGhlbiB0aGUgbmFtZSAndicgaXMgcmV0dXJuZWQsIG90aGVyd2lzZSB0aGUgbmFtZSBpdHNlbGYKICAvLy8gaXMgcmV0dXJuZWQuCiAgTmFtZSBnZXQgZ2V0dGVyOwoKICAvLy8gUmV0dXJucyB0aGUgc2VldGVyIG5hbWUgY29ycmVzcG9uZGluZyB0byB0aGlzIG5hbWUuIElmIHRoaXMgbmFtZSBpcyBhCiAgLy8vIGdldHRlciBuYW1lICd2JyB0aGVuIHRoZSBuYW1lICd2PScgaXMgcmV0dXJuZWQsIG90aGVyd3NpZSB0aGUgbmFtZSBpdHNlbGYKICAvLy8gaXMgcmV0dXJuZWQuCiAgTmFtZSBnZXQgc2V0dGVyOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50aXR5IG9mIHRoaXMgbmFtZSBpcyBhY2Nlc3NpYmxlIGZyb20gbGlicmFyeQogIC8vLyBbZWxlbWVudF0uCiAgYm9vbCBpc0FjY2Vzc2libGVGcm9tKExpYnJhcnlFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIG5hbWUgaXMgcHJpdmF0ZS4KICBib29sIGdldCBpc1ByaXZhdGU7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIG5hbWUgaXMgdGhlIHNhbWUgYXMgW290aGVyXSBub3QgdGFraW5nIHRoZSBsaWJyYXJ5CiAgLy8vIHByaXZhY3kgaW50byBhY2NvdW50LgogIGJvb2wgaXNTaW1pbGFyVG8oTmFtZSBvdGhlcik7CiAgaW50IGdldCBzaW1pbGFySGFzaENvZGU7CgogIExpYnJhcnlFbnRpdHkgZ2V0IGxpYnJhcnk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCB3aGVuIFtzXSBpcyBwcml2YXRlIGlmIHVzZWQgYXMgYW4gaWRlbnRpZmllci4KICBzdGF0aWMgYm9vbCBpc1ByaXZhdGVOYW1lKFN0cmluZyBzKSA9PiAhcy5pc0VtcHR5ICYmIHMuY29kZVVuaXRBdCgwKSA9PSAkXzsKCiAgLy8vIFJldHVybnMgYHRydWVgIHdoZW4gW3NdIGlzIHB1YmxpYyBpZiB1c2VkIGFzIGFuIGlkZW50aWZpZXIuCiAgc3RhdGljIGJvb2wgaXNQdWJsaWNOYW1lKFN0cmluZyBzKSA9PiAhaXNQcml2YXRlTmFtZShzKTsKfQoKY2xhc3MgUHVibGljTmFtZSBpbXBsZW1lbnRzIE5hbWUgewogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyB0ZXh0OwogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgaXNTZXR0ZXI7CgogIGNvbnN0IFB1YmxpY05hbWUodGhpcy50ZXh0LCB7dGhpcy5pc1NldHRlcjogZmFsc2V9KTsKCiAgQG92ZXJyaWRlCiAgTmFtZSBnZXQgZ2V0dGVyID0+IGlzU2V0dGVyID8gbmV3IFB1YmxpY05hbWUodGV4dCkgOiB0aGlzOwoKICBAb3ZlcnJpZGUKICBOYW1lIGdldCBzZXR0ZXIgPT4gaXNTZXR0ZXIgPyB0aGlzIDogbmV3IFB1YmxpY05hbWUodGV4dCwgaXNTZXR0ZXI6IHRydWUpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzQWNjZXNzaWJsZUZyb20oTGlicmFyeUVudGl0eSBlbGVtZW50KSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1ByaXZhdGUgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gc2ltaWxhckhhc2hDb2RlOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIFB1YmxpY05hbWUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBpc1NpbWlsYXJUbyhvdGhlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzU2ltaWxhclRvKE5hbWUgb3RoZXIpID0+CiAgICAgIHRleHQgPT0gb3RoZXIudGV4dCAmJiBpc1NldHRlciA9PSBvdGhlci5pc1NldHRlcjsKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IHNpbWlsYXJIYXNoQ29kZSA9PiB0ZXh0Lmhhc2hDb2RlICsgMTEgKiBpc1NldHRlci5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgTGlicmFyeUVudGl0eSBnZXQgbGlicmFyeSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBpc1NldHRlciA/ICckdGV4dD0nIDogdGV4dDsKfQoKY2xhc3MgUHJpdmF0ZU5hbWUgZXh0ZW5kcyBQdWJsaWNOYW1lIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBMaWJyYXJ5RW50aXR5IGxpYnJhcnk7CgogIFByaXZhdGVOYW1lKFN0cmluZyB0ZXh0LCB0aGlzLmxpYnJhcnksIHtib29sIGlzU2V0dGVyOiBmYWxzZX0pCiAgICAgIDogc3VwZXIodGV4dCwgaXNTZXR0ZXI6IGlzU2V0dGVyKTsKCiAgQG92ZXJyaWRlCiAgTmFtZSBnZXQgZ2V0dGVyID0+IGlzU2V0dGVyID8gbmV3IFByaXZhdGVOYW1lKHRleHQsIGxpYnJhcnkpIDogdGhpczsKCiAgQG92ZXJyaWRlCiAgTmFtZSBnZXQgc2V0dGVyIHsKICAgIHJldHVybiBpc1NldHRlciA/IHRoaXMgOiBuZXcgUHJpdmF0ZU5hbWUodGV4dCwgbGlicmFyeSwgaXNTZXR0ZXI6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0FjY2Vzc2libGVGcm9tKExpYnJhcnlFbnRpdHkgZWxlbWVudCkgPT4gbGlicmFyeSA9PSBlbGVtZW50OwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1ByaXZhdGUgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBzdXBlci5oYXNoQ29kZSArIDEzICogbGlicmFyeS5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBQcml2YXRlTmFtZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHN1cGVyID09IChvdGhlcikgJiYgbGlicmFyeSA9PSBvdGhlci5saWJyYXJ5OwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyR7bGlicmFyeS5uYW1lfSMke3N1cGVyLnRvU3RyaW5nKCl9JzsKfQqAiwBOTjwBIAFCASsBUR08FkxRO00fQQY1BAFMEhMBPhUBTFATEwFMUBMTAUoRMAEuFgFQHCAbAR0BQ04BQjsCASMMFQwXATcBDD0BDE0BDDgBDB8BDCcBDBwsHwQBDCI4DEUBDCUBDDMCAScMHwFBKQEMRwEMFE0EAQxGAQweAQw+AQwcLTkEAQw+AgEocGFja2FnZTpjb21waWxlci9zcmMvZWxlbWVudHMvbmFtZXMuZGFydDpzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0obEvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmNhbGxfc3RydWN0dXJlOwoKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCcgc2hvdyBOYW1lczsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JyBzaG93IFBhcmFtZXRlclN0cnVjdHVyZTsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnOwppbXBvcnQgJ3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CgovLy8gVGhlIHN0cnVjdHVyZSBvZiB0aGUgYXJndW1lbnRzIGF0IGEgY2FsbC1zaXRlLgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTaG91bGQgdGhlc2UgYmUgY2FjaGVkPwovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTaG91bGQgaXNHZXR0ZXIvaXNTZXR0ZXIgYmUgcGFydCBvZiB0aGUgY2FsbCBzdHJ1Y3R1cmUKLy8gaW5zdGVhZCBvZiB0aGUgc2VsZWN0b3I/CmNsYXNzIENhbGxTdHJ1Y3R1cmUgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbQ2FsbFN0cnVjdHVyZV0gb2JqZWN0cyBpbiBhIGRlYnVnZ2luZwogIC8vLyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdjYWxsLXN0cnVjdHVyZSc7CgogIHN0YXRpYyBjb25zdCBDYWxsU3RydWN0dXJlIE5PX0FSR1MgPSBjb25zdCBDYWxsU3RydWN0dXJlLnVubmFtZWQoMCk7CiAgc3RhdGljIGNvbnN0IENhbGxTdHJ1Y3R1cmUgT05FX0FSRyA9IGNvbnN0IENhbGxTdHJ1Y3R1cmUudW5uYW1lZCgxKTsKICBzdGF0aWMgY29uc3QgQ2FsbFN0cnVjdHVyZSBUV09fQVJHUyA9IGNvbnN0IENhbGxTdHJ1Y3R1cmUudW5uYW1lZCgyKTsKICBzdGF0aWMgY29uc3QgQ2FsbFN0cnVjdHVyZSBUSFJFRV9BUkdTID0gY29uc3QgQ2FsbFN0cnVjdHVyZS51bm5hbWVkKDMpOwogIHN0YXRpYyBjb25zdCBDYWxsU3RydWN0dXJlIEZPVVJfQVJHUyA9IGNvbnN0IENhbGxTdHJ1Y3R1cmUudW5uYW1lZCg0KTsKCiAgLy8vIFRoZSBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHMgb2YgdGhlIGNhbGwuCiAgZmluYWwgaW50IHR5cGVBcmd1bWVudENvdW50OwoKICAvLy8gVGhlIG51bWJlcnMgb2YgYXJndW1lbnRzIG9mIHRoZSBjYWxsLiBJbmNsdWRlcyBuYW1lZCBhcmd1bWVudHMuCiAgZmluYWwgaW50IGFyZ3VtZW50Q291bnQ7CgogIC8vLyBUaGUgbnVtYmVyIG9mIG5hbWVkIGFyZ3VtZW50cyBvZiB0aGUgY2FsbC4KICBpbnQgZ2V0IG5hbWVkQXJndW1lbnRDb3VudCA9PiAwOwoKICAvLy8gVGhlIG51bWJlciBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50IG9mIHRoZSBjYWxsLgogIGludCBnZXQgcG9zaXRpb25hbEFyZ3VtZW50Q291bnQgPT4gYXJndW1lbnRDb3VudDsKCiAgY29uc3QgQ2FsbFN0cnVjdHVyZS51bm5hbWVkKHRoaXMuYXJndW1lbnRDb3VudCwgW3RoaXMudHlwZUFyZ3VtZW50Q291bnQgPSAwXSk7CgogIGZhY3RvcnkgQ2FsbFN0cnVjdHVyZShpbnQgYXJndW1lbnRDb3VudCwKICAgICAgW0xpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywgaW50IHR5cGVBcmd1bWVudENvdW50ID0gMF0pIHsKICAgIGlmIChuYW1lZEFyZ3VtZW50cyA9PSBudWxsIHx8IG5hbWVkQXJndW1lbnRzLmlzRW1wdHkpIHsKICAgICAgcmV0dXJuIG5ldyBDYWxsU3RydWN0dXJlLnVubmFtZWQoYXJndW1lbnRDb3VudCwgdHlwZUFyZ3VtZW50Q291bnQpOwogICAgfQogICAgcmV0dXJuIG5ldyBOYW1lZENhbGxTdHJ1Y3R1cmUoCiAgICAgICAgYXJndW1lbnRDb3VudCwgbmFtZWRBcmd1bWVudHMsIHR5cGVBcmd1bWVudENvdW50KTsKICB9CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbQ2FsbFN0cnVjdHVyZV0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBDYWxsU3RydWN0dXJlLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpbnQgYXJndW1lbnRDb3VudCA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMgPSBzb3VyY2UucmVhZFN0cmluZ3MoKTsKICAgIGludCB0eXBlQXJndW1lbnRDb3VudCA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IENhbGxTdHJ1Y3R1cmUoYXJndW1lbnRDb3VudCwgbmFtZWRBcmd1bWVudHMsIHR5cGVBcmd1bWVudENvdW50KTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0NhbGxTdHJ1Y3R1cmVdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlSW50KGFyZ3VtZW50Q291bnQpOwogICAgc2luay53cml0ZVN0cmluZ3MobmFtZWRBcmd1bWVudHMpOwogICAgc2luay53cml0ZUludCh0eXBlQXJndW1lbnRDb3VudCk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoaXMgY2FsbCBzdHJ1Y3R1cmUgaXMgbm9ybWFsaXplZCwgdGhhdCBpcywgaXRzIG5hbWVkCiAgLy8vIGFyZ3VtZW50cyBhcmUgc29ydGVkLgogIGJvb2wgZ2V0IGlzTm9ybWFsaXplZCA9PiB0cnVlOwoKICAvLy8gUmV0dXJucyB0aGUgbm9ybWFsaXplZCB2ZXJzaW9uIG9mIHRoaXMgY2FsbCBzdHJ1Y3R1cmUuCiAgLy8vCiAgLy8vIEEgW0NhbGxTdHJ1Y3R1cmVdIGlzIG5vcm1hbGl6ZWQgaWYgaXRzIG5hbWVkIGFyZ3VtZW50cyBhcmUgc29ydGVkLgogIENhbGxTdHJ1Y3R1cmUgdG9Ob3JtYWxpemVkKCkgPT4gdGhpczsKCiAgQ2FsbFN0cnVjdHVyZSB3aXRoVHlwZUFyZ3VtZW50Q291bnQoaW50IHR5cGVBcmd1bWVudENvdW50KSA9PgogICAgICBuZXcgQ2FsbFN0cnVjdHVyZShhcmd1bWVudENvdW50LCBuYW1lZEFyZ3VtZW50cywgdHlwZUFyZ3VtZW50Q291bnQpOwoKICAvLy8gYHRydWVgIGlmIHRoaXMgY2FsbCBoYXMgbmFtZWQgYXJndW1lbnRzLgogIGJvb2wgZ2V0IGlzTmFtZWQgPT4gZmFsc2U7CgogIC8vLyBgdHJ1ZWAgaWYgdGhpcyBjYWxsIGhhcyBubyBuYW1lZCBhcmd1bWVudHMuCiAgYm9vbCBnZXQgaXNVbm5hbWVkID0+IHRydWU7CgogIC8vLyBUaGUgbmFtZXMgb2YgdGhlIG5hbWVkIGFyZ3VtZW50cyBpbiBjYWxsLXNpdGUgb3JkZXIuCiAgTGlzdDxTdHJpbmc+IGdldCBuYW1lZEFyZ3VtZW50cyA9PiBjb25zdCA8U3RyaW5nPltdOwoKICAvLy8gVGhlIG5hbWVzIG9mIHRoZSBuYW1lZCBhcmd1bWVudHMgaW4gY2Fub25pY2FsaXplZCBvcmRlci4KICBMaXN0PFN0cmluZz4gZ2V0T3JkZXJlZE5hbWVkQXJndW1lbnRzKCkgPT4gY29uc3QgPFN0cmluZz5bXTsKCiAgQ2FsbFN0cnVjdHVyZSBnZXQgbm9uR2VuZXJpYyA9PiB0eXBlQXJndW1lbnRDb3VudCA9PSAwCiAgICAgID8gdGhpcwogICAgICA6IG5ldyBDYWxsU3RydWN0dXJlKGFyZ3VtZW50Q291bnQsIG5hbWVkQXJndW1lbnRzKTsKCiAgLy8vIFNob3J0IHRleHR1YWwgcmVwcmVzZW50YXRpb24gdXNlIGZvciB0ZXN0aW5nLgogIFN0cmluZyBnZXQgc2hvcnRUZXh0IHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCcoJyk7CiAgICBzYi53cml0ZShwb3NpdGlvbmFsQXJndW1lbnRDb3VudCk7CiAgICBpZiAobmFtZWRBcmd1bWVudENvdW50ID4gMCkgewogICAgICBzYi53cml0ZSgnLCcpOwogICAgICBzYi53cml0ZShnZXRPcmRlcmVkTmFtZWRBcmd1bWVudHMoKS5qb2luKCcsJykpOwogICAgfQogICAgc2Iud3JpdGUoJyknKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgLy8vIEEgZGVzY3JpcHRpb24gb2YgdGhlIGFyZ3VtZW50IHN0cnVjdHVyZS4KICBTdHJpbmcgc3RydWN0dXJlVG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnYXJpdHk9JGFyZ3VtZW50Q291bnQnKTsKICAgIGlmICh0eXBlQXJndW1lbnRDb3VudCAhPSAwKSB7CiAgICAgIHNiLndyaXRlKCcsIHR5cGVzPSR0eXBlQXJndW1lbnRDb3VudCcpOwogICAgfQogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnQ2FsbFN0cnVjdHVyZSgke3N0cnVjdHVyZVRvU3RyaW5nKCl9KSc7CgogIFNlbGVjdG9yIGdldCBjYWxsU2VsZWN0b3IgPT4gbmV3IFNlbGVjdG9yLmNhbGwoTmFtZXMuY2FsbCwgdGhpcyk7CgogIGJvb2wgbWF0Y2goQ2FsbFN0cnVjdHVyZSBvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIHRoaXMuYXJndW1lbnRDb3VudCA9PSBvdGhlci5hcmd1bWVudENvdW50ICYmCiAgICAgICAgdGhpcy5uYW1lZEFyZ3VtZW50Q291bnQgPT0gb3RoZXIubmFtZWRBcmd1bWVudENvdW50ICYmCiAgICAgICAgdGhpcy50eXBlQXJndW1lbnRDb3VudCA9PSBvdGhlci50eXBlQXJndW1lbnRDb3VudCAmJgogICAgICAgIHNhbWVOYW1lcyh0aGlzLm5hbWVkQXJndW1lbnRzLCBvdGhlci5uYW1lZEFyZ3VtZW50cyk7CiAgfQoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDYWNoZSBoYXNoIGNvZGU/CiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gSGFzaGluZy5saXN0SGFzaCgKICAgICAgICBuYW1lZEFyZ3VtZW50cywKICAgICAgICBIYXNoaW5nLm9iamVjdEhhc2goYXJndW1lbnRDb3VudCwKICAgICAgICAgICAgSGFzaGluZy5vYmplY3RIYXNoKHR5cGVBcmd1bWVudENvdW50LCBuYW1lZEFyZ3VtZW50cy5sZW5ndGgpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIENhbGxTdHJ1Y3R1cmUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBtYXRjaChvdGhlcik7CiAgfQoKICBib29sIHNpZ25hdHVyZUFwcGxpZXMoUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlcnMpIHsKICAgIGludCByZXF1aXJlZFBhcmFtZXRlckNvdW50ID0gcGFyYW1ldGVycy5yZXF1aXJlZFBhcmFtZXRlcnM7CiAgICBpbnQgb3B0aW9uYWxQYXJhbWV0ZXJDb3VudCA9IHBhcmFtZXRlcnMub3B0aW9uYWxQYXJhbWV0ZXJzOwogICAgaW50IHBhcmFtZXRlckNvdW50ID0gcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCArIG9wdGlvbmFsUGFyYW1ldGVyQ291bnQ7CiAgICBpZiAoYXJndW1lbnRDb3VudCA+IHBhcmFtZXRlckNvdW50KSByZXR1cm4gZmFsc2U7CiAgICBpZiAocG9zaXRpb25hbEFyZ3VtZW50Q291bnQgPCByZXF1aXJlZFBhcmFtZXRlckNvdW50KSByZXR1cm4gZmFsc2U7CiAgICBpZiAodHlwZUFyZ3VtZW50Q291bnQgIT0gMCkgewogICAgICBpZiAodHlwZUFyZ3VtZW50Q291bnQgIT0gcGFyYW1ldGVycy50eXBlUGFyYW1ldGVycykgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChwYXJhbWV0ZXJzLm5hbWVkUGFyYW1ldGVycy5pc0VtcHR5KSB7CiAgICAgIC8vIFdlIGhhdmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgYXJlCiAgICAgIC8vIG5vdCBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzLiBUaGVyZWZvcmUgdGhlCiAgICAgIC8vIG51bWJlciBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50cyBhcmUgbm90IGdyZWF0ZXIgdGhhbiB0aGUKICAgICAgLy8gbnVtYmVyIG9mIHBhcmFtZXRlcnMuCiAgICAgIGFzc2VydChwb3NpdGlvbmFsQXJndW1lbnRDb3VudCA8PSBwYXJhbWV0ZXJDb3VudCk7CiAgICAgIHJldHVybiBuYW1lZEFyZ3VtZW50cy5pc0VtcHR5OwogICAgfSBlbHNlIHsKICAgICAgaWYgKHBvc2l0aW9uYWxBcmd1bWVudENvdW50ID4gcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCkgcmV0dXJuIGZhbHNlOwogICAgICBhc3NlcnQocG9zaXRpb25hbEFyZ3VtZW50Q291bnQgPT0gcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCk7CiAgICAgIGlmIChuYW1lZEFyZ3VtZW50Q291bnQgPiBvcHRpb25hbFBhcmFtZXRlckNvdW50KSByZXR1cm4gZmFsc2U7CgogICAgICBpbnQgbmFtZUluZGV4ID0gMDsKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkUGFyYW1ldGVycyA9IHBhcmFtZXRlcnMubmFtZWRQYXJhbWV0ZXJzOwogICAgICBmb3IgKFN0cmluZyBuYW1lIGluIGdldE9yZGVyZWROYW1lZEFyZ3VtZW50cygpKSB7CiAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgICAgIC8vIE5vdGU6IHdlIHN0YXJ0IGF0IHRoZSBleGlzdGluZyBpbmRleCBiZWNhdXNlIGFyZ3VtZW50cyBhcmUgc29ydGVkLgogICAgICAgIHdoaWxlIChuYW1lSW5kZXggPCBuYW1lZFBhcmFtZXRlcnMubGVuZ3RoKSB7CiAgICAgICAgICBpZiAobmFtZSA9PSBuYW1lZFBhcmFtZXRlcnNbbmFtZUluZGV4XSkgewogICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgbmFtZUluZGV4Kys7CiAgICAgICAgfQogICAgICAgIGlmICghZm91bmQpIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CgogIHN0YXRpYyBib29sIHNhbWVOYW1lcyhMaXN0PFN0cmluZz4gZmlyc3QsIExpc3Q8U3RyaW5nPiBzZWNvbmQpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmlyc3QubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGZpcnN0W2ldICE9IHNlY29uZFtpXSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQp9CgovLy8gQ2FsbCBzdHJ1Y3R1cmUgd2l0aCBuYW1lZCBhcmd1bWVudHMuCmNsYXNzIE5hbWVkQ2FsbFN0cnVjdHVyZSBleHRlbmRzIENhbGxTdHJ1Y3R1cmUgewogIEBvdmVycmlkZQogIGZpbmFsIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50czsKICBmaW5hbCBMaXN0PFN0cmluZz4gX29yZGVyZWROYW1lZEFyZ3VtZW50czsKCiAgTmFtZWRDYWxsU3RydWN0dXJlKAogICAgICBpbnQgYXJndW1lbnRDb3VudCwgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLCBpbnQgdHlwZUFyZ3VtZW50Q291bnQpCiAgICAgIDogdGhpcy5pbnRlcm5hbCgKICAgICAgICAgICAgYXJndW1lbnRDb3VudCwgbmFtZWRBcmd1bWVudHMsIHR5cGVBcmd1bWVudENvdW50LCA8U3RyaW5nPltdKTsKCiAgTmFtZWRDYWxsU3RydWN0dXJlLmludGVybmFsKGludCBhcmd1bWVudENvdW50LCB0aGlzLm5hbWVkQXJndW1lbnRzLAogICAgICBpbnQgdHlwZUFyZ3VtZW50Q291bnQsIHRoaXMuX29yZGVyZWROYW1lZEFyZ3VtZW50cykKICAgICAgOiBhc3NlcnQobmFtZWRBcmd1bWVudHMuaXNOb3RFbXB0eSksCiAgICAgICAgc3VwZXIudW5uYW1lZChhcmd1bWVudENvdW50LCB0eXBlQXJndW1lbnRDb3VudCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTmFtZWQgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNVbm5hbWVkID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IG5hbWVkQXJndW1lbnRDb3VudCA9PiBuYW1lZEFyZ3VtZW50cy5sZW5ndGg7CgogIEBvdmVycmlkZQogIGludCBnZXQgcG9zaXRpb25hbEFyZ3VtZW50Q291bnQgPT4gYXJndW1lbnRDb3VudCAtIG5hbWVkQXJndW1lbnRDb3VudDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOb3JtYWxpemVkID0+IG5hbWVkQXJndW1lbnRzID09IF9vcmRlcmVkTmFtZWRBcmd1bWVudHM7CgogIEBvdmVycmlkZQogIENhbGxTdHJ1Y3R1cmUgdG9Ob3JtYWxpemVkKCkgPT4gbmV3IE5hbWVkQ2FsbFN0cnVjdHVyZS5pbnRlcm5hbCgKICAgICAgYXJndW1lbnRDb3VudCwKICAgICAgZ2V0T3JkZXJlZE5hbWVkQXJndW1lbnRzKCksCiAgICAgIHR5cGVBcmd1bWVudENvdW50LAogICAgICBnZXRPcmRlcmVkTmFtZWRBcmd1bWVudHMoKSk7CgogIEBvdmVycmlkZQogIExpc3Q8U3RyaW5nPiBnZXRPcmRlcmVkTmFtZWRBcmd1bWVudHMoKSB7CiAgICBpZiAoIV9vcmRlcmVkTmFtZWRBcmd1bWVudHMuaXNFbXB0eSkgcmV0dXJuIF9vcmRlcmVkTmFtZWRBcmd1bWVudHM7CgogICAgX29yZGVyZWROYW1lZEFyZ3VtZW50cy5hZGRBbGwobmFtZWRBcmd1bWVudHMpOwogICAgX29yZGVyZWROYW1lZEFyZ3VtZW50cy5zb3J0KChTdHJpbmcgZmlyc3QsIFN0cmluZyBzZWNvbmQpIHsKICAgICAgcmV0dXJuIGZpcnN0LmNvbXBhcmVUbyhzZWNvbmQpOwogICAgfSk7CiAgICByZXR1cm4gX29yZGVyZWROYW1lZEFyZ3VtZW50czsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBzdHJ1Y3R1cmVUb1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdhcml0eT0kYXJndW1lbnRDb3VudCwgbmFtZWQ9WyR7bmFtZWRBcmd1bWVudHMuam9pbignLCAnKX1dJyk7CiAgICBpZiAodHlwZUFyZ3VtZW50Q291bnQgIT0gMCkgewogICAgICBzYi53cml0ZSgnLCB0eXBlcz0kdHlwZUFyZ3VtZW50Q291bnQnKTsKICAgIH0KICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQqBAQBOTjwBIAEqPC4cJgEzME8cFlETLgFHR0hKSQEwHwFGGwExIwE1NAFRAStCPEoGIzsEATtAFyo4LhVQBAExKBUiJyYTBAFOHCEBPQZJKAFASwEvHQEyHgE7NwE/PwE5DToBNBkqEyciFTYGExoEAS8fKiYiLgYaBAEMQAFEASQtOD89PgQBKwwVHRgqTAQBDBwvGQQBOUBASjZIIkgGAS5CQkEfOSUNSkFFARlBOBxONTQaEwwXCiIIEwYEAUMtLwYRBAIBKTEMJS0BFk0XSwFGOis5AQwcAQwfAQw3AQxJAQxFAQxDFSIZIwEMLEgBM0AmCCMEAQwfKkwiLgYaBAIBMXBhY2thZ2U6Y29tcGlsZXIvc3JjL3VuaXZlcnNlL2NhbGxfc3RydWN0dXJlLmRhcnQ8c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvY29uc3RhbnRzL2NvbnN0YW50X3N5c3RlbS5kYXJ0wAB0ei8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gQ29uc3RhbnQgc3lzdGVtIGZvbGxvd2luZyB0aGUgc2VtYW50aWNzIGZvciBEYXJ0IGNvZGUgdGhhdCBoYXMgYmVlbgovLy8gY29tcGlsZWQgdG8gSmF2YVNjcmlwdC4KbGlicmFyeSBkYXJ0MmpzLmNvbnN0YW50X3N5c3RlbTsKCmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgQ29tbW9uRWxlbWVudHM7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvb3BlcmF0b3JzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJ3ZhbHVlcy5kYXJ0JzsKCmZpbmFsIF9CSVRTMzIgPSBuZXcgQmlnSW50LmZyb20oMHhGRkZGRkZGRik7Cgpjb25zdCBhZGQgPSBjb25zdCBBZGRPcGVyYXRpb24oKTsKY29uc3QgYml0QW5kID0gY29uc3QgQml0QW5kT3BlcmF0aW9uKCk7CmNvbnN0IGJpdE5vdCA9IGNvbnN0IEJpdE5vdE9wZXJhdGlvbigpOwpjb25zdCBiaXRPciA9IGNvbnN0IEJpdE9yT3BlcmF0aW9uKCk7CmNvbnN0IGJpdFhvciA9IGNvbnN0IEJpdFhvck9wZXJhdGlvbigpOwpjb25zdCBib29sZWFuQW5kID0gY29uc3QgQm9vbGVhbkFuZE9wZXJhdGlvbigpOwpjb25zdCBib29sZWFuT3IgPSBjb25zdCBCb29sZWFuT3JPcGVyYXRpb24oKTsKY29uc3QgZGl2aWRlID0gY29uc3QgRGl2aWRlT3BlcmF0aW9uKCk7CmNvbnN0IGVxdWFsID0gY29uc3QgRXF1YWxzT3BlcmF0aW9uKCk7CmNvbnN0IGdyZWF0ZXJFcXVhbCA9IGNvbnN0IEdyZWF0ZXJFcXVhbE9wZXJhdGlvbigpOwpjb25zdCBncmVhdGVyID0gY29uc3QgR3JlYXRlck9wZXJhdGlvbigpOwpjb25zdCBpZGVudGl0eSA9IGNvbnN0IElkZW50aXR5T3BlcmF0aW9uKCk7CmNvbnN0IGlmTnVsbCA9IGNvbnN0IElmTnVsbE9wZXJhdGlvbigpOwpjb25zdCBsZXNzRXF1YWwgPSBjb25zdCBMZXNzRXF1YWxPcGVyYXRpb24oKTsKY29uc3QgbGVzcyA9IGNvbnN0IExlc3NPcGVyYXRpb24oKTsKY29uc3QgbW9kdWxvID0gY29uc3QgTW9kdWxvT3BlcmF0aW9uKCk7CmNvbnN0IG11bHRpcGx5ID0gY29uc3QgTXVsdGlwbHlPcGVyYXRpb24oKTsKY29uc3QgbmVnYXRlID0gY29uc3QgTmVnYXRlT3BlcmF0aW9uKCk7CmNvbnN0IG5vdCA9IGNvbnN0IE5vdE9wZXJhdGlvbigpOwpjb25zdCByZW1haW5kZXIgPSBjb25zdCBSZW1haW5kZXJPcGVyYXRpb24oKTsKY29uc3Qgc2hpZnRMZWZ0ID0gY29uc3QgU2hpZnRMZWZ0T3BlcmF0aW9uKCk7CmNvbnN0IHNoaWZ0UmlnaHQgPSBjb25zdCBTaGlmdFJpZ2h0T3BlcmF0aW9uKCk7CmNvbnN0IHN1YnRyYWN0ID0gY29uc3QgU3VidHJhY3RPcGVyYXRpb24oKTsKY29uc3QgdHJ1bmNhdGluZ0RpdmlkZSA9IGNvbnN0IFRydW5jYXRpbmdEaXZpZGVPcGVyYXRpb24oKTsKY29uc3QgY29kZVVuaXRBdCA9IGNvbnN0IENvZGVVbml0QXRPcGVyYXRpb24oKTsKY29uc3Qgcm91bmQgPSBjb25zdCBSb3VuZE9wZXJhdGlvbigpOwpjb25zdCBhYnMgPSBjb25zdCBVbmZvbGRlZFVuYXJ5T3BlcmF0aW9uKCdhYnMnKTsKCi8vLyBSZXR1cm5zIHRydWUgaWYgW3ZhbHVlXSB3aWxsIHR1cm4gaW50byBOYU4gb3IgaW5maW5pdHkKLy8vIGF0IHJ1bnRpbWUuCmJvb2wgX2ludGVnZXJCZWNvbWVzTmFuT3JJbmZpbml0eShCaWdJbnQgdmFsdWUpIHsKICBkb3VibGUgZG91YmxlVmFsdWUgPSB2YWx1ZS50b0RvdWJsZSgpOwogIHJldHVybiBkb3VibGVWYWx1ZS5pc05hTiB8fCBkb3VibGVWYWx1ZS5pc0luZmluaXRlOwp9CgpOdW1Db25zdGFudFZhbHVlIF9jb252ZXJ0VG9KYXZhU2NyaXB0Q29uc3RhbnQoTnVtQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgewogIGlmIChjb25zdGFudC5pc0ludCkgewogICAgSW50Q29uc3RhbnRWYWx1ZSBpbnRDb25zdGFudCA9IGNvbnN0YW50OwogICAgQmlnSW50IGludFZhbHVlID0gaW50Q29uc3RhbnQuaW50VmFsdWU7CiAgICBpZiAoX2ludGVnZXJCZWNvbWVzTmFuT3JJbmZpbml0eShpbnRWYWx1ZSkpIHsKICAgICAgcmV0dXJuIG5ldyBEb3VibGVDb25zdGFudFZhbHVlKGludFZhbHVlLnRvRG91YmxlKCkpOwogICAgfQogICAgLy8gSWYgdGhlIGludGVnZXIgbG9zZXMgcHJlY2lzaW9uIHdpdGggSmF2YVNjcmlwdCBudW1iZXJzLCB1c2UKICAgIC8vIHRoZSBmbG9vcmVkIHZlcnNpb24gSmF2YVNjcmlwdCB3aWxsIHVzZS4KICAgIEJpZ0ludCBmbG9vclZhbHVlID0gbmV3IEJpZ0ludC5mcm9tKGludFZhbHVlLnRvRG91YmxlKCkpOwogICAgaWYgKGZsb29yVmFsdWUgIT0gaW50VmFsdWUpIHsKICAgICAgcmV0dXJuIG5ldyBJbnRDb25zdGFudFZhbHVlKGZsb29yVmFsdWUpOwogICAgfQogIH0gZWxzZSBpZiAoY29uc3RhbnQuaXNEb3VibGUpIHsKICAgIERvdWJsZUNvbnN0YW50VmFsdWUgZG91YmxlUmVzdWx0ID0gY29uc3RhbnQ7CiAgICBkb3VibGUgZG91YmxlVmFsdWUgPSBkb3VibGVSZXN1bHQuZG91YmxlVmFsdWU7CiAgICBpZiAoIWRvdWJsZVZhbHVlLmlzSW5maW5pdGUgJiYKICAgICAgICAhZG91YmxlVmFsdWUuaXNOYU4gJiYKICAgICAgICAhY29uc3RhbnQuaXNNaW51c1plcm8pIHsKICAgICAgZG91YmxlIHRydW5jYXRlZCA9IGRvdWJsZVZhbHVlLnRydW5jYXRlVG9Eb3VibGUoKTsKICAgICAgaWYgKHRydW5jYXRlZCA9PSBkb3VibGVWYWx1ZSkgewogICAgICAgIHJldHVybiBuZXcgSW50Q29uc3RhbnRWYWx1ZShuZXcgQmlnSW50LmZyb20odHJ1bmNhdGVkKSk7CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIGNvbnN0YW50Owp9CgpOdW1Db25zdGFudFZhbHVlIGNyZWF0ZUludChCaWdJbnQgaSkgPT4KICAgIF9jb252ZXJ0VG9KYXZhU2NyaXB0Q29uc3RhbnQobmV3IEludENvbnN0YW50VmFsdWUoaSkpOwpOdW1Db25zdGFudFZhbHVlIGNyZWF0ZUludEZyb21JbnQoaW50IGkpID0+IGNyZWF0ZUludChuZXcgQmlnSW50LmZyb20oaSkpOwpOdW1Db25zdGFudFZhbHVlIF9jcmVhdGVJbnQzMihCaWdJbnQgaSkgPT4gbmV3IEludENvbnN0YW50VmFsdWUoaSAmIF9CSVRTMzIpOwpOdW1Db25zdGFudFZhbHVlIGNyZWF0ZURvdWJsZShkb3VibGUgZCkgPT4KICAgIF9jb252ZXJ0VG9KYXZhU2NyaXB0Q29uc3RhbnQobmV3IERvdWJsZUNvbnN0YW50VmFsdWUoZCkpOwpTdHJpbmdDb25zdGFudFZhbHVlIGNyZWF0ZVN0cmluZyhTdHJpbmcgc3RyaW5nKSA9PgogICAgbmV3IFN0cmluZ0NvbnN0YW50VmFsdWUoc3RyaW5nKTsKQm9vbENvbnN0YW50VmFsdWUgY3JlYXRlQm9vbChib29sIHZhbHVlKSA9PiBuZXcgQm9vbENvbnN0YW50VmFsdWUodmFsdWUpOwpOdWxsQ29uc3RhbnRWYWx1ZSBjcmVhdGVOdWxsKCkgPT4gbmV3IE51bGxDb25zdGFudFZhbHVlKCk7Ckxpc3RDb25zdGFudFZhbHVlIGNyZWF0ZUxpc3QoSW50ZXJmYWNlVHlwZSB0eXBlLCBMaXN0PENvbnN0YW50VmFsdWU+IHZhbHVlcykgPT4KICAgIG5ldyBMaXN0Q29uc3RhbnRWYWx1ZSh0eXBlLCB2YWx1ZXMpOwoKQ29uc3RhbnRWYWx1ZSBjcmVhdGVUeXBlKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLCBEYXJ0VHlwZSB0eXBlKSB7CiAgSW50ZXJmYWNlVHlwZSBpbnN0YW5jZVR5cGUgPSBjb21tb25FbGVtZW50cy50eXBlTGl0ZXJhbFR5cGU7CiAgcmV0dXJuIG5ldyBUeXBlQ29uc3RhbnRWYWx1ZSh0eXBlLCBpbnN0YW5jZVR5cGUpOwp9CgovLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBbY29uc3RhbnRdIGlzIGFuIGludGVnZXIgYXQgcnVudGltZS4KLy8vCi8vLyBJbnRlZ2VyIGNoZWNrcyByZXBvcnQgdHJ1ZSBmb3IgLTAuMCwgSU5GSU5JVFksIGFuZCAtSU5GSU5JVFkuICBBdAovLy8gcnVudGltZSBhbiAnWCBpcyBpbnQnIGNoZWNrIGlzIGltcGxlbWVudGVkIGFzOgovLy8KLy8vIHR5cGVvZihYKSA9PT0gIm51bWJlciIgJiYgTWF0aC5mbG9vcihYKSA9PT0gWAovLy8KLy8vIFdlIGNvbnNpc3RlbnRseSBtYXRjaCB0aGF0IHJ1bnRpbWUgc2VtYW50aWNzIGF0IGNvbXBpbGUgdGltZSBhcyB3ZWxsLgpib29sIGlzSW50KENvbnN0YW50VmFsdWUgY29uc3RhbnQpID0+CiAgICBjb25zdGFudC5pc0ludCB8fAogICAgY29uc3RhbnQuaXNNaW51c1plcm8gfHwKICAgIGNvbnN0YW50LmlzUG9zaXRpdmVJbmZpbml0eSB8fAogICAgY29uc3RhbnQuaXNOZWdhdGl2ZUluZmluaXR5OwoKLy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgW2NvbnN0YW50XSBpcyBhIGRvdWJsZSBhdCBydW50aW1lLgpib29sIGlzRG91YmxlKENvbnN0YW50VmFsdWUgY29uc3RhbnQpID0+CiAgICBjb25zdGFudC5pc0RvdWJsZSAmJiAhY29uc3RhbnQuaXNNaW51c1plcm87CgovLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBbY29uc3RhbnRdIGlzIGEgc3RyaW5nIGF0IHJ1bnRpbWUuCmJvb2wgaXNTdHJpbmcoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgPT4gY29uc3RhbnQuaXNTdHJpbmc7CgovLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBbY29uc3RhbnRdIGlzIGEgYm9vbGVhbiBhdCBydW50aW1lLgpib29sIGlzQm9vbChDb25zdGFudFZhbHVlIGNvbnN0YW50KSA9PiBjb25zdGFudC5pc0Jvb2w7CgovLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBbY29uc3RhbnRdIGlzIG51bGwgYXQgcnVudGltZS4KYm9vbCBpc051bGwoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgPT4gY29uc3RhbnQuaXNOdWxsOwoKYm9vbCBpc1N1YnR5cGUoRGFydFR5cGVzIHR5cGVzLCBEYXJ0VHlwZSBzLCBEYXJ0VHlwZSB0KSB7CiAgLy8gQXQgcnVudGltZSwgYW4gaW50ZWdlciBpcyBib3RoIGFuIGludGVnZXIgYW5kIGEgZG91YmxlOiB0aGUKICAvLyBpbnRlZ2VyIHR5cGUgY2hlY2sgaXMgTWF0aC5mbG9vciwgd2hpY2ggd2lsbCByZXR1cm4gdHJ1ZSBvbmx5CiAgLy8gZm9yIHJlYWwgaW50ZWdlcnMsIGFuZCBvdXIgZG91YmxlIHR5cGUgY2hlY2sgaXMgJ3R5cGVvZiBudW1iZXInCiAgLy8gd2hpY2ggd2lsbCByZXR1cm4gdHJ1ZSBmb3IgYm90aCBpbnRlZ2VycyBhbmQgZG91Ymxlcy4KICBpZiAocyA9PSB0eXBlcy5jb21tb25FbGVtZW50cy5pbnRUeXBlICYmCiAgICAgIHQgPT0gdHlwZXMuY29tbW9uRWxlbWVudHMuZG91YmxlVHlwZSkgewogICAgcmV0dXJuIHRydWU7CiAgfQogIHJldHVybiB0eXBlcy5pc1N1YnR5cGUocywgdCk7Cn0KClNldENvbnN0YW50VmFsdWUgY3JlYXRlU2V0KENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgSW50ZXJmYWNlVHlwZSBzb3VyY2VUeXBlLCBMaXN0PENvbnN0YW50VmFsdWU+IHZhbHVlcykgewogIEludGVyZmFjZVR5cGUgdHlwZSA9IGNvbW1vbkVsZW1lbnRzLmdldENvbnN0YW50U2V0VHlwZUZvcihzb3VyY2VUeXBlKTsKICBEYXJ0VHlwZSBlbGVtZW50VHlwZSA9IHR5cGUudHlwZUFyZ3VtZW50cy5maXJzdDsKICBJbnRlcmZhY2VUeXBlIG1hcFR5cGUgPQogICAgICBjb21tb25FbGVtZW50cy5tYXBUeXBlKGVsZW1lbnRUeXBlLCBjb21tb25FbGVtZW50cy5udWxsVHlwZSk7CiAgTGlzdDxOdWxsQ29uc3RhbnRWYWx1ZT4gbnVsbHMgPSBuZXcgTGlzdDxOdWxsQ29uc3RhbnRWYWx1ZT4uZmlsbGVkKAogICAgICB2YWx1ZXMubGVuZ3RoLCBjb25zdCBOdWxsQ29uc3RhbnRWYWx1ZSgpKTsKICBNYXBDb25zdGFudFZhbHVlIGVudHJpZXMgPSBjcmVhdGVNYXAoY29tbW9uRWxlbWVudHMsIG1hcFR5cGUsIHZhbHVlcywgbnVsbHMpOwogIHJldHVybiBuZXcgSmF2YVNjcmlwdFNldENvbnN0YW50KHR5cGUsIGVudHJpZXMpOwp9CgpNYXBDb25zdGFudFZhbHVlIGNyZWF0ZU1hcCgKICAgIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgSW50ZXJmYWNlVHlwZSBzb3VyY2VUeXBlLAogICAgTGlzdDxDb25zdGFudFZhbHVlPiBrZXlzLAogICAgTGlzdDxDb25zdGFudFZhbHVlPiB2YWx1ZXMpIHsKICBib29sIG9ubHlTdHJpbmdLZXlzID0gdHJ1ZTsKICBDb25zdGFudFZhbHVlIHByb3RvVmFsdWUgPSBudWxsOwogIGZvciAoaW50IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykgewogICAgZHluYW1pYyBrZXkgPSBrZXlzW2ldOwogICAgaWYgKGtleS5pc1N0cmluZykgewogICAgICBpZiAoa2V5LnN0cmluZ1ZhbHVlID09IEphdmFTY3JpcHRNYXBDb25zdGFudC5QUk9UT19QUk9QRVJUWSkgewogICAgICAgIHByb3RvVmFsdWUgPSB2YWx1ZXNbaV07CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIG9ubHlTdHJpbmdLZXlzID0gZmFsc2U7CiAgICAgIC8vIERvbid0IGhhbmRsZSBfX3Byb3RvX18gdmFsdWVzIHNwZWNpYWxseSBpbiB0aGUgZ2VuZXJhbCBtYXAgY2FzZS4KICAgICAgcHJvdG9WYWx1ZSA9IG51bGw7CiAgICAgIGJyZWFrOwogICAgfQogIH0KCiAgYm9vbCBoYXNQcm90b0tleSA9IChwcm90b1ZhbHVlICE9IG51bGwpOwogIEludGVyZmFjZVR5cGUga2V5c1R5cGU7CiAgaWYgKHNvdXJjZVR5cGUudHJlYXRBc1JhdykgewogICAga2V5c1R5cGUgPSBjb21tb25FbGVtZW50cy5saXN0VHlwZSgpOwogIH0gZWxzZSB7CiAgICBrZXlzVHlwZSA9IGNvbW1vbkVsZW1lbnRzLmxpc3RUeXBlKHNvdXJjZVR5cGUudHlwZUFyZ3VtZW50cy5maXJzdCk7CiAgfQogIExpc3RDb25zdGFudFZhbHVlIGtleXNMaXN0ID0gbmV3IExpc3RDb25zdGFudFZhbHVlKGtleXNUeXBlLCBrZXlzKTsKICBJbnRlcmZhY2VUeXBlIHR5cGUgPSBjb21tb25FbGVtZW50cy5nZXRDb25zdGFudE1hcFR5cGVGb3Ioc291cmNlVHlwZSwKICAgICAgaGFzUHJvdG9LZXk6IGhhc1Byb3RvS2V5LCBvbmx5U3RyaW5nS2V5czogb25seVN0cmluZ0tleXMpOwogIHJldHVybiBuZXcgSmF2YVNjcmlwdE1hcENvbnN0YW50KAogICAgICB0eXBlLCBrZXlzTGlzdCwgdmFsdWVzLCBwcm90b1ZhbHVlLCBvbmx5U3RyaW5nS2V5cyk7Cn0KCkNvbnN0YW50VmFsdWUgY3JlYXRlU3ltYm9sKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLCBTdHJpbmcgdGV4dCkgewogIEludGVyZmFjZVR5cGUgdHlwZSA9IGNvbW1vbkVsZW1lbnRzLnN5bWJvbEltcGxlbWVudGF0aW9uVHlwZTsKICBGaWVsZEVudGl0eSBmaWVsZCA9IGNvbW1vbkVsZW1lbnRzLnN5bWJvbEZpZWxkOwogIENvbnN0YW50VmFsdWUgYXJndW1lbnQgPSBjcmVhdGVTdHJpbmcodGV4dCk7CiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIHR5cGUgYXJndW1lbnRzIHdoZW4gYWxsIHVzZXMgbm8gbG9uZ2VyIGV4cGVjdAogIC8vIGEgW0ZpZWxkRWxlbWVudF0uCiAgdmFyIGZpZWxkcyA9IDxGaWVsZEVudGl0eSwgQ29uc3RhbnRWYWx1ZT57ZmllbGQ6IGFyZ3VtZW50fTsKICByZXR1cm4gbmV3IENvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZSh0eXBlLCBmaWVsZHMpOwp9CgpVbmFyeU9wZXJhdGlvbiBsb29rdXBVbmFyeShVbmFyeU9wZXJhdG9yIG9wZXJhdG9yKSB7CiAgc3dpdGNoIChvcGVyYXRvci5raW5kKSB7CiAgICBjYXNlIFVuYXJ5T3BlcmF0b3JLaW5kLkNPTVBMRU1FTlQ6CiAgICAgIHJldHVybiBiaXROb3Q7CiAgICBjYXNlIFVuYXJ5T3BlcmF0b3JLaW5kLk5FR0FURToKICAgICAgcmV0dXJuIG5lZ2F0ZTsKICAgIGNhc2UgVW5hcnlPcGVyYXRvcktpbmQuTk9UOgogICAgICByZXR1cm4gbm90OwogICAgZGVmYXVsdDoKICAgICAgcmV0dXJuIG51bGw7CiAgfQp9CgpCaW5hcnlPcGVyYXRpb24gbG9va3VwQmluYXJ5KEJpbmFyeU9wZXJhdG9yIG9wZXJhdG9yKSB7CiAgc3dpdGNoIChvcGVyYXRvci5raW5kKSB7CiAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5BREQ6CiAgICAgIHJldHVybiBhZGQ7CiAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5TVUI6CiAgICAgIHJldHVybiBzdWJ0cmFjdDsKICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLk1VTDoKICAgICAgcmV0dXJuIG11bHRpcGx5OwogICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuRElWOgogICAgICByZXR1cm4gZGl2aWRlOwogICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTU9EOgogICAgICByZXR1cm4gbW9kdWxvOwogICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuSURJVjoKICAgICAgcmV0dXJuIHRydW5jYXRpbmdEaXZpZGU7CiAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5PUjoKICAgICAgcmV0dXJuIGJpdE9yOwogICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuQU5EOgogICAgICByZXR1cm4gYml0QW5kOwogICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuWE9SOgogICAgICByZXR1cm4gYml0WG9yOwogICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTE9HSUNBTF9PUjoKICAgICAgcmV0dXJuIGJvb2xlYW5PcjsKICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkxPR0lDQUxfQU5EOgogICAgICByZXR1cm4gYm9vbGVhbkFuZDsKICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLlNITDoKICAgICAgcmV0dXJuIHNoaWZ0TGVmdDsKICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLlNIUjoKICAgICAgcmV0dXJuIHNoaWZ0UmlnaHQ7CiAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5MVDoKICAgICAgcmV0dXJuIGxlc3M7CiAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5MVEVROgogICAgICByZXR1cm4gbGVzc0VxdWFsOwogICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuR1Q6CiAgICAgIHJldHVybiBncmVhdGVyOwogICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuR1RFUToKICAgICAgcmV0dXJuIGdyZWF0ZXJFcXVhbDsKICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkVROgogICAgICByZXR1cm4gZXF1YWw7CiAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5JRl9OVUxMOgogICAgICByZXR1cm4gaWZOdWxsOwogICAgZGVmYXVsdDoKICAgICAgcmV0dXJuIG51bGw7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBPcGVyYXRpb24gewogIFN0cmluZyBnZXQgbmFtZTsKfQoKYWJzdHJhY3QgY2xhc3MgVW5hcnlPcGVyYXRpb24gZXh0ZW5kcyBPcGVyYXRpb24gewogIC8vLyBSZXR1cm5zIFs6bnVsbDpdIGlmIGl0IHdhcyB1bmFibGUgdG8gZm9sZCB0aGUgb3BlcmF0aW9uLgogIENvbnN0YW50VmFsdWUgZm9sZChDb25zdGFudFZhbHVlIGNvbnN0YW50KTsKfQoKYWJzdHJhY3QgY2xhc3MgQmluYXJ5T3BlcmF0aW9uIGV4dGVuZHMgT3BlcmF0aW9uIHsKICAvLy8gUmV0dXJucyBbOm51bGw6XSBpZiBpdCB3YXMgdW5hYmxlIHRvIGZvbGQgdGhlIG9wZXJhdGlvbi4KICBDb25zdGFudFZhbHVlIGZvbGQoQ29uc3RhbnRWYWx1ZSBsZWZ0LCBDb25zdGFudFZhbHVlIHJpZ2h0KTsKICBhcHBseShsZWZ0LCByaWdodCk7Cn0KCmNsYXNzIEJpdE5vdE9wZXJhdGlvbiBpbXBsZW1lbnRzIFVuYXJ5T3BlcmF0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZSA9ICd+JzsKCiAgY29uc3QgQml0Tm90T3BlcmF0aW9uKCk7CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZm9sZChDb25zdGFudFZhbHVlIGNvbnN0YW50KSB7CiAgICBpZiAoaXNJbnQoY29uc3RhbnQpKSB7CiAgICAgIC8vIEluIEphdmFTY3JpcHQgd2UgZG9uJ3QgY2hlY2sgZm9yIC0wIGFuZCB0cmVhdCBpdCBhcyBpZiBpdCB3YXMgemVyby4KICAgICAgaWYgKGNvbnN0YW50LmlzTWludXNaZXJvKSB7CiAgICAgICAgY29uc3RhbnQgPSBjcmVhdGVJbnQoQmlnSW50Lnplcm8pOwogICAgICB9CiAgICAgIEludENvbnN0YW50VmFsdWUgaW50Q29uc3RhbnQgPSBjb25zdGFudDsKICAgICAgLy8gV2UgY29udmVydCB0aGUgcmVzdWx0IG9mIGJpdC1vcGVyYXRpb25zIHRvIDMyIGJpdCB1bnNpZ25lZCBpbnRlZ2Vycy4KICAgICAgcmV0dXJuIF9jcmVhdGVJbnQzMih+aW50Q29uc3RhbnQuaW50VmFsdWUpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQp9CgpjbGFzcyBOZWdhdGVPcGVyYXRpb24gaW1wbGVtZW50cyBVbmFyeU9wZXJhdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAnbmVnYXRlJzsKCiAgY29uc3QgTmVnYXRlT3BlcmF0aW9uKCk7CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZm9sZChDb25zdGFudFZhbHVlIGNvbnN0YW50KSB7CiAgICBDb25zdGFudFZhbHVlIF9mb2xkKENvbnN0YW50VmFsdWUgY29uc3RhbnQpIHsKICAgICAgaWYgKGNvbnN0YW50LmlzSW50KSB7CiAgICAgICAgSW50Q29uc3RhbnRWYWx1ZSBpbnRDb25zdGFudCA9IGNvbnN0YW50OwogICAgICAgIHJldHVybiBjcmVhdGVJbnQoLWludENvbnN0YW50LmludFZhbHVlKTsKICAgICAgfQogICAgICBpZiAoY29uc3RhbnQuaXNEb3VibGUpIHsKICAgICAgICBEb3VibGVDb25zdGFudFZhbHVlIGRvdWJsZUNvbnN0YW50ID0gY29uc3RhbnQ7CiAgICAgICAgcmV0dXJuIGNyZWF0ZURvdWJsZSgtZG91YmxlQ29uc3RhbnQuZG91YmxlVmFsdWUpOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGlmIChjb25zdGFudC5pc0ludCkgewogICAgICBJbnRDb25zdGFudFZhbHVlIGludENvbnN0YW50ID0gY29uc3RhbnQ7CiAgICAgIGlmIChpbnRDb25zdGFudC5pbnRWYWx1ZSA9PSBCaWdJbnQuemVybykgewogICAgICAgIHJldHVybiBjcmVhdGVEb3VibGUoLTAuMCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfZm9sZChjb25zdGFudCk7CiAgfQp9CgpjbGFzcyBOb3RPcGVyYXRpb24gaW1wbGVtZW50cyBVbmFyeU9wZXJhdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAnISc7CgogIGNvbnN0IE5vdE9wZXJhdGlvbigpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGZvbGQoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgewogICAgaWYgKGNvbnN0YW50LmlzQm9vbCkgewogICAgICBCb29sQ29uc3RhbnRWYWx1ZSBib29sQ29uc3RhbnQgPSBjb25zdGFudDsKICAgICAgcmV0dXJuIGNyZWF0ZUJvb2woIWJvb2xDb25zdGFudC5ib29sVmFsdWUpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQp9CgovLy8gT3BlcmF0aW9ucyB0aGF0IG9ubHkgd29yayBpZiBib3RoIGFyZ3VtZW50cyBhcmUgaW50ZWdlcnMuCmFic3RyYWN0IGNsYXNzIEJpbmFyeUJpdE9wZXJhdGlvbiBpbXBsZW1lbnRzIEJpbmFyeU9wZXJhdGlvbiB7CiAgY29uc3QgQmluYXJ5Qml0T3BlcmF0aW9uKCk7CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZm9sZChDb25zdGFudFZhbHVlIGxlZnQsIENvbnN0YW50VmFsdWUgcmlnaHQpIHsKICAgIENvbnN0YW50VmFsdWUgX2ZvbGQoQ29uc3RhbnRWYWx1ZSBsZWZ0LCBDb25zdGFudFZhbHVlIHJpZ2h0KSB7CiAgICAgIGlmIChsZWZ0LmlzSW50ICYmIHJpZ2h0LmlzSW50KSB7CiAgICAgICAgSW50Q29uc3RhbnRWYWx1ZSBsZWZ0SW50ID0gbGVmdDsKICAgICAgICBJbnRDb25zdGFudFZhbHVlIHJpZ2h0SW50ID0gcmlnaHQ7CiAgICAgICAgQmlnSW50IHJlc3VsdFZhbHVlID0gZm9sZEludHMobGVmdEludC5pbnRWYWx1ZSwgcmlnaHRJbnQuaW50VmFsdWUpOwogICAgICAgIGlmIChyZXN1bHRWYWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICByZXR1cm4gY3JlYXRlSW50KHJlc3VsdFZhbHVlKTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvLyBJbiBKYXZhU2NyaXB0IHdlIGRvbid0IGNoZWNrIGZvciAtMCBhbmQgdHJlYXQgaXQgYXMgaWYgaXQgd2FzIHplcm8uCiAgICBpZiAobGVmdC5pc01pbnVzWmVybykgewogICAgICBsZWZ0ID0gY3JlYXRlSW50KEJpZ0ludC56ZXJvKTsKICAgIH0KICAgIGlmIChyaWdodC5pc01pbnVzWmVybykgewogICAgICByaWdodCA9IGNyZWF0ZUludChCaWdJbnQuemVybyk7CiAgICB9CiAgICBJbnRDb25zdGFudFZhbHVlIHJlc3VsdCA9IF9mb2xkKGxlZnQsIHJpZ2h0KTsKICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgewogICAgICAvLyBXZSBjb252ZXJ0IHRoZSByZXN1bHQgb2YgYml0LW9wZXJhdGlvbnMgdG8gMzIgYml0IHVuc2lnbmVkIGludGVnZXJzLgogICAgICByZXR1cm4gX2NyZWF0ZUludDMyKHJlc3VsdC5pbnRWYWx1ZSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQmlnSW50IGZvbGRJbnRzKEJpZ0ludCBsZWZ0LCBCaWdJbnQgcmlnaHQpOwp9CgpjbGFzcyBCaXRBbmRPcGVyYXRpb24gZXh0ZW5kcyBCaW5hcnlCaXRPcGVyYXRpb24gewogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lID0gJyYnOwoKICBjb25zdCBCaXRBbmRPcGVyYXRpb24oKTsKCiAgQG92ZXJyaWRlCiAgQmlnSW50IGZvbGRJbnRzKEJpZ0ludCBsZWZ0LCBCaWdJbnQgcmlnaHQpID0+IGxlZnQgJiByaWdodDsKCiAgQG92ZXJyaWRlCiAgYXBwbHkobGVmdCwgcmlnaHQpID0+IGxlZnQgJiByaWdodDsKfQoKY2xhc3MgQml0T3JPcGVyYXRpb24gZXh0ZW5kcyBCaW5hcnlCaXRPcGVyYXRpb24gewogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lID0gJ3wnOwoKICBjb25zdCBCaXRPck9wZXJhdGlvbigpOwoKICBAb3ZlcnJpZGUKICBCaWdJbnQgZm9sZEludHMoQmlnSW50IGxlZnQsIEJpZ0ludCByaWdodCkgPT4gbGVmdCB8IHJpZ2h0OwoKICBAb3ZlcnJpZGUKICBhcHBseShsZWZ0LCByaWdodCkgPT4gbGVmdCB8IHJpZ2h0Owp9CgpjbGFzcyBCaXRYb3JPcGVyYXRpb24gZXh0ZW5kcyBCaW5hcnlCaXRPcGVyYXRpb24gewogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lID0gJ14nOwoKICBjb25zdCBCaXRYb3JPcGVyYXRpb24oKTsKCiAgQG92ZXJyaWRlCiAgQmlnSW50IGZvbGRJbnRzKEJpZ0ludCBsZWZ0LCBCaWdJbnQgcmlnaHQpID0+IGxlZnQgXiByaWdodDsKCiAgQG92ZXJyaWRlCiAgYXBwbHkobGVmdCwgcmlnaHQpID0+IGxlZnQgXiByaWdodDsKfQoKY2xhc3MgU2hpZnRMZWZ0T3BlcmF0aW9uIGV4dGVuZHMgQmluYXJ5Qml0T3BlcmF0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZSA9ICc8PCc7CgogIGNvbnN0IFNoaWZ0TGVmdE9wZXJhdGlvbigpOwoKICBAb3ZlcnJpZGUKICBCaWdJbnQgZm9sZEludHMoQmlnSW50IGxlZnQsIEJpZ0ludCByaWdodCkgewogICAgLy8gVE9ETyhmbG9pdHNjaCk6IGZpbmQgYSBiZXR0ZXIgd2F5IHRvIGd1YXJkIGFnYWluc3QgZXhjZXNzaXZlIHNoaWZ0cyB0bwogICAgLy8gdGhlIGxlZnQuCiAgICBpZiAocmlnaHQgPiBuZXcgQmlnSW50LmZyb20oMTAwKSB8fCByaWdodCA8IEJpZ0ludC56ZXJvKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBsZWZ0IDw8IHJpZ2h0LnRvSW50KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBhcHBseShsZWZ0LCByaWdodCkgPT4gbGVmdCA8PCByaWdodDsKfQoKY2xhc3MgU2hpZnRSaWdodE9wZXJhdGlvbiBleHRlbmRzIEJpbmFyeUJpdE9wZXJhdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAnPj4nOwoKICBjb25zdCBTaGlmdFJpZ2h0T3BlcmF0aW9uKCk7CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZm9sZChDb25zdGFudFZhbHVlIGxlZnQsIENvbnN0YW50VmFsdWUgcmlnaHQpIHsKICAgIC8vIFRydW5jYXRlIHRoZSBpbnB1dCB2YWx1ZSB0byAzMiBiaXRzIGlmIG5lY2Vzc2FyeS4KICAgIGlmIChsZWZ0LmlzSW50KSB7CiAgICAgIEludENvbnN0YW50VmFsdWUgaW50Q29uc3RhbnQgPSBsZWZ0OwogICAgICBCaWdJbnQgdmFsdWUgPSBpbnRDb25zdGFudC5pbnRWYWx1ZTsKICAgICAgQmlnSW50IHRydW5jYXRlZFZhbHVlID0gdmFsdWUgJiBfQklUUzMyOwogICAgICBpZiAodmFsdWUgPCBCaWdJbnQuemVybykgewogICAgICAgIC8vIFNpZ24tZXh0ZW5kIGlmIHRoZSBpbnB1dCB3YXMgbmVnYXRpdmUuIFRoZSBjdXJyZW50IHNlbWFudGljcyBkb24ndAogICAgICAgIC8vIG1ha2UgbXVjaCBzZW5zZSwgc2luY2Ugd2Ugb25seSBsb29rIGF0IGJpdCAzMS4KICAgICAgICAvLyBUT0RPKGZsb2l0c2NoKTogd2Ugc2hvdWxkIHRyZWF0IHRoZSBpbnB1dCB0byByaWdodCBzaGlmdHMgYXMKICAgICAgICAvLyB1bnNpZ25lZC4KCiAgICAgICAgLy8gQSAzMiBiaXQgY29tcGxlbWVudC10d28gdmFsdWUgeCBjYW4gYmUgY29tcHV0ZWQgYnk6CiAgICAgICAgLy8gICAgeF91IC0gMl4zMiAod2hlcmUgeF91IGlzIGl0cyB1bnNpZ25lZCByZXByZXNlbnRhdGlvbikuCiAgICAgICAgLy8gRXhhbXBsZTogMHhGRkZGRkZGRiAtIDB4MTAwMDAwMDAwID0+IC0xLgogICAgICAgIC8vIFdlIHNpbXBseSBhbmQgd2l0aCB0aGUgc2lnbi1iaXQgYW5kIG11bHRpcGx5IGJ5IHR3by4gSWYgdGhlIHNpZ24tYml0CiAgICAgICAgLy8gd2FzIHNldCwgdGhlbiB0aGUgcmVzdWx0IGlzIDAuIE90aGVyd2lzZSBpdCB3aWxsIGJlY29tZSAyXjMyLgogICAgICAgIGZpbmFsIEJpZ0ludCBTSUdOX0JJVCA9IG5ldyBCaWdJbnQuZnJvbSgweDgwMDAwMDAwKTsKICAgICAgICB0cnVuY2F0ZWRWYWx1ZSAtPSBCaWdJbnQudHdvICogKHRydW5jYXRlZFZhbHVlICYgU0lHTl9CSVQpOwogICAgICB9CiAgICAgIGlmICh2YWx1ZSAhPSB0cnVuY2F0ZWRWYWx1ZSkgewogICAgICAgIGxlZnQgPSBjcmVhdGVJbnQodHJ1bmNhdGVkVmFsdWUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3VwZXIuZm9sZChsZWZ0LCByaWdodCk7CiAgfQoKICBAb3ZlcnJpZGUKICBCaWdJbnQgZm9sZEludHMoQmlnSW50IGxlZnQsIEJpZ0ludCByaWdodCkgewogICAgaWYgKHJpZ2h0IDwgQmlnSW50Lnplcm8pIHJldHVybiBudWxsOwogICAgcmV0dXJuIGxlZnQgPj4gcmlnaHQudG9JbnQoKTsKICB9CgogIEBvdmVycmlkZQogIGFwcGx5KGxlZnQsIHJpZ2h0KSA9PiBsZWZ0ID4+IHJpZ2h0Owp9CgphYnN0cmFjdCBjbGFzcyBCaW5hcnlCb29sT3BlcmF0aW9uIGltcGxlbWVudHMgQmluYXJ5T3BlcmF0aW9uIHsKICBjb25zdCBCaW5hcnlCb29sT3BlcmF0aW9uKCk7CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZm9sZChDb25zdGFudFZhbHVlIGxlZnQsIENvbnN0YW50VmFsdWUgcmlnaHQpIHsKICAgIGlmIChsZWZ0LmlzQm9vbCAmJiByaWdodC5pc0Jvb2wpIHsKICAgICAgQm9vbENvbnN0YW50VmFsdWUgbGVmdEJvb2wgPSBsZWZ0OwogICAgICBCb29sQ29uc3RhbnRWYWx1ZSByaWdodEJvb2wgPSByaWdodDsKICAgICAgYm9vbCByZXN1bHRWYWx1ZSA9IGZvbGRCb29scyhsZWZ0Qm9vbC5ib29sVmFsdWUsIHJpZ2h0Qm9vbC5ib29sVmFsdWUpOwogICAgICByZXR1cm4gY3JlYXRlQm9vbChyZXN1bHRWYWx1ZSk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIGJvb2wgZm9sZEJvb2xzKGJvb2wgbGVmdCwgYm9vbCByaWdodCk7Cn0KCmNsYXNzIEJvb2xlYW5BbmRPcGVyYXRpb24gZXh0ZW5kcyBCaW5hcnlCb29sT3BlcmF0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZSA9ICcmJic7CgogIGNvbnN0IEJvb2xlYW5BbmRPcGVyYXRpb24oKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBmb2xkQm9vbHMoYm9vbCBsZWZ0LCBib29sIHJpZ2h0KSA9PiBsZWZ0ICYmIHJpZ2h0OwoKICBAb3ZlcnJpZGUKICBhcHBseShsZWZ0LCByaWdodCkgPT4gbGVmdCAmJiByaWdodDsKfQoKY2xhc3MgQm9vbGVhbk9yT3BlcmF0aW9uIGV4dGVuZHMgQmluYXJ5Qm9vbE9wZXJhdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAnfHwnOwoKICBjb25zdCBCb29sZWFuT3JPcGVyYXRpb24oKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBmb2xkQm9vbHMoYm9vbCBsZWZ0LCBib29sIHJpZ2h0KSA9PiBsZWZ0IHx8IHJpZ2h0OwoKICBAb3ZlcnJpZGUKICBhcHBseShsZWZ0LCByaWdodCkgPT4gbGVmdCB8fCByaWdodDsKfQoKYWJzdHJhY3QgY2xhc3MgQXJpdGhtZXRpY051bU9wZXJhdGlvbiBpbXBsZW1lbnRzIEJpbmFyeU9wZXJhdGlvbiB7CiAgY29uc3QgQXJpdGhtZXRpY051bU9wZXJhdGlvbigpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGZvbGQoQ29uc3RhbnRWYWx1ZSBsZWZ0LCBDb25zdGFudFZhbHVlIHJpZ2h0KSB7CiAgICBDb25zdGFudFZhbHVlIF9mb2xkKENvbnN0YW50VmFsdWUgbGVmdCwgQ29uc3RhbnRWYWx1ZSByaWdodCkgewogICAgICBpZiAobGVmdC5pc051bSAmJiByaWdodC5pc051bSkgewogICAgICAgIE51bUNvbnN0YW50VmFsdWUgbGVmdE51bSA9IGxlZnQ7CiAgICAgICAgTnVtQ29uc3RhbnRWYWx1ZSByaWdodE51bSA9IHJpZ2h0OwogICAgICAgIHZhciBmb2xkZWRWYWx1ZTsKICAgICAgICBpZiAobGVmdC5pc0ludCAmJiByaWdodC5pc0ludCkgewogICAgICAgICAgSW50Q29uc3RhbnRWYWx1ZSBsZWZ0SW50ID0gbGVmdE51bTsKICAgICAgICAgIEludENvbnN0YW50VmFsdWUgcmlnaHRJbnQgPSByaWdodE51bTsKICAgICAgICAgIGZvbGRlZFZhbHVlID0gZm9sZEludHMobGVmdEludC5pbnRWYWx1ZSwgcmlnaHRJbnQuaW50VmFsdWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmb2xkZWRWYWx1ZSA9IGZvbGROdW1zKGxlZnROdW0uZG91YmxlVmFsdWUsIHJpZ2h0TnVtLmRvdWJsZVZhbHVlKTsKICAgICAgICB9CiAgICAgICAgLy8gQSBkaXZpc2lvbiBieSAwIG1lYW5zIHRoYXQgd2UgbWlnaHQgbm90IGhhdmUgYSBmb2xkZWQgdmFsdWUuCiAgICAgICAgaWYgKGZvbGRlZFZhbHVlID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIGlmIChsZWZ0LmlzSW50ICYmIHJpZ2h0LmlzSW50ICYmICFpc0RpdmlkZSgpIHx8IGlzVHJ1bmNhdGluZ0RpdmlkZSgpKSB7CiAgICAgICAgICBhc3NlcnQoZm9sZGVkVmFsdWUgaXMgQmlnSW50KTsKICAgICAgICAgIHJldHVybiBjcmVhdGVJbnQoZm9sZGVkVmFsdWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gY3JlYXRlRG91YmxlKGZvbGRlZFZhbHVlKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgQ29uc3RhbnRWYWx1ZSByZXN1bHQgPSBfZm9sZChsZWZ0LCByaWdodCk7CiAgICBpZiAocmVzdWx0ID09IG51bGwpIHJldHVybiByZXN1bHQ7CiAgICByZXR1cm4gX2NvbnZlcnRUb0phdmFTY3JpcHRDb25zdGFudChyZXN1bHQpOwogIH0KCiAgYm9vbCBpc0RpdmlkZSgpID0+IGZhbHNlOwogIGJvb2wgaXNUcnVuY2F0aW5nRGl2aWRlKCkgPT4gZmFsc2U7CiAgZm9sZEludHMoQmlnSW50IGxlZnQsIEJpZ0ludCByaWdodCk7CiAgZm9sZE51bXMobnVtIGxlZnQsIG51bSByaWdodCk7Cn0KCmNsYXNzIFN1YnRyYWN0T3BlcmF0aW9uIGV4dGVuZHMgQXJpdGhtZXRpY051bU9wZXJhdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAnLSc7CgogIGNvbnN0IFN1YnRyYWN0T3BlcmF0aW9uKCk7CgogIEBvdmVycmlkZQogIEJpZ0ludCBmb2xkSW50cyhCaWdJbnQgbGVmdCwgQmlnSW50IHJpZ2h0KSA9PiBsZWZ0IC0gcmlnaHQ7CgogIEBvdmVycmlkZQogIG51bSBmb2xkTnVtcyhudW0gbGVmdCwgbnVtIHJpZ2h0KSA9PiBsZWZ0IC0gcmlnaHQ7CgogIEBvdmVycmlkZQogIGFwcGx5KGxlZnQsIHJpZ2h0KSA9PiBsZWZ0IC0gcmlnaHQ7Cn0KCmNsYXNzIE11bHRpcGx5T3BlcmF0aW9uIGV4dGVuZHMgQXJpdGhtZXRpY051bU9wZXJhdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAnKic7CgogIGNvbnN0IE11bHRpcGx5T3BlcmF0aW9uKCk7CgogIEBvdmVycmlkZQogIEJpZ0ludCBmb2xkSW50cyhCaWdJbnQgbGVmdCwgQmlnSW50IHJpZ2h0KSA9PiBsZWZ0ICogcmlnaHQ7CgogIEBvdmVycmlkZQogIG51bSBmb2xkTnVtcyhudW0gbGVmdCwgbnVtIHJpZ2h0KSA9PiBsZWZ0ICogcmlnaHQ7CgogIEBvdmVycmlkZQogIGFwcGx5KGxlZnQsIHJpZ2h0KSA9PiBsZWZ0ICogcmlnaHQ7Cn0KCmNsYXNzIE1vZHVsb09wZXJhdGlvbiBleHRlbmRzIEFyaXRobWV0aWNOdW1PcGVyYXRpb24gewogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lID0gJyUnOwoKICBjb25zdCBNb2R1bG9PcGVyYXRpb24oKTsKCiAgQG92ZXJyaWRlCiAgQmlnSW50IGZvbGRJbnRzKEJpZ0ludCBsZWZ0LCBCaWdJbnQgcmlnaHQpIHsKICAgIGlmIChyaWdodCA9PSBCaWdJbnQuemVybykgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gbGVmdCAlIHJpZ2h0OwogIH0KCiAgQG92ZXJyaWRlCiAgbnVtIGZvbGROdW1zKG51bSBsZWZ0LCBudW0gcmlnaHQpID0+IGxlZnQgJSByaWdodDsKCiAgQG92ZXJyaWRlCiAgYXBwbHkobGVmdCwgcmlnaHQpID0+IGxlZnQgJSByaWdodDsKfQoKY2xhc3MgUmVtYWluZGVyT3BlcmF0aW9uIGV4dGVuZHMgQXJpdGhtZXRpY051bU9wZXJhdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAncmVtYWluZGVyJzsKCiAgY29uc3QgUmVtYWluZGVyT3BlcmF0aW9uKCk7CgogIEBvdmVycmlkZQogIEJpZ0ludCBmb2xkSW50cyhCaWdJbnQgbGVmdCwgQmlnSW50IHJpZ2h0KSB7CiAgICBpZiAocmlnaHQgPT0gQmlnSW50Lnplcm8pIHJldHVybiBudWxsOwogICAgcmV0dXJuIGxlZnQucmVtYWluZGVyKHJpZ2h0KTsKICB9CgogIEBvdmVycmlkZQogIG51bSBmb2xkTnVtcyhudW0gbGVmdCwgbnVtIHJpZ2h0KSA9PiBsZWZ0LnJlbWFpbmRlcihyaWdodCk7CgogIEBvdmVycmlkZQogIGFwcGx5KGxlZnQsIHJpZ2h0KSA9PiBsZWZ0LnJlbWFpbmRlcihyaWdodCk7Cn0KCmNsYXNzIFRydW5jYXRpbmdEaXZpZGVPcGVyYXRpb24gZXh0ZW5kcyBBcml0aG1ldGljTnVtT3BlcmF0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZSA9ICd+Lyc7CgogIGNvbnN0IFRydW5jYXRpbmdEaXZpZGVPcGVyYXRpb24oKTsKCiAgQG92ZXJyaWRlCiAgQmlnSW50IGZvbGRJbnRzKEJpZ0ludCBsZWZ0LCBCaWdJbnQgcmlnaHQpIHsKICAgIGlmIChyaWdodCA9PSBCaWdJbnQuemVybykgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gbGVmdCB+LyByaWdodDsKICB9CgogIEBvdmVycmlkZQogIEJpZ0ludCBmb2xkTnVtcyhudW0gbGVmdCwgbnVtIHJpZ2h0KSB7CiAgICBudW0gcmF0aW8gPSBsZWZ0IC8gcmlnaHQ7CiAgICBpZiAocmF0aW8uaXNOYU4gfHwgcmF0aW8uaXNJbmZpbml0ZSkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gbmV3IEJpZ0ludC5mcm9tKHJhdGlvLnRydW5jYXRlKCkudG9JbnQoKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBhcHBseShsZWZ0LCByaWdodCkgPT4gbGVmdCB+LyByaWdodDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1RydW5jYXRpbmdEaXZpZGUoKSA9PiB0cnVlOwp9CgpjbGFzcyBEaXZpZGVPcGVyYXRpb24gZXh0ZW5kcyBBcml0aG1ldGljTnVtT3BlcmF0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZSA9ICcvJzsKCiAgY29uc3QgRGl2aWRlT3BlcmF0aW9uKCk7CgogIEBvdmVycmlkZQogIGRvdWJsZSBmb2xkSW50cyhCaWdJbnQgbGVmdCwgQmlnSW50IHJpZ2h0KSA9PiBsZWZ0IC8gcmlnaHQ7CgogIEBvdmVycmlkZQogIG51bSBmb2xkTnVtcyhudW0gbGVmdCwgbnVtIHJpZ2h0KSA9PiBsZWZ0IC8gcmlnaHQ7CgogIEBvdmVycmlkZQogIGJvb2wgaXNEaXZpZGUoKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBhcHBseShsZWZ0LCByaWdodCkgPT4gbGVmdCAvIHJpZ2h0Owp9CgpjbGFzcyBBZGRPcGVyYXRpb24gaW1wbGVtZW50cyBCaW5hcnlPcGVyYXRpb24gewogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lID0gJysnOwoKICBjb25zdCBBZGRPcGVyYXRpb24oKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBmb2xkKENvbnN0YW50VmFsdWUgbGVmdCwgQ29uc3RhbnRWYWx1ZSByaWdodCkgewogICAgQ29uc3RhbnRWYWx1ZSBfZm9sZChDb25zdGFudFZhbHVlIGxlZnQsIENvbnN0YW50VmFsdWUgcmlnaHQpIHsKICAgICAgaWYgKGxlZnQuaXNJbnQgJiYgcmlnaHQuaXNJbnQpIHsKICAgICAgICBJbnRDb25zdGFudFZhbHVlIGxlZnRJbnQgPSBsZWZ0OwogICAgICAgIEludENvbnN0YW50VmFsdWUgcmlnaHRJbnQgPSByaWdodDsKICAgICAgICBCaWdJbnQgcmVzdWx0ID0gbGVmdEludC5pbnRWYWx1ZSArIHJpZ2h0SW50LmludFZhbHVlOwogICAgICAgIHJldHVybiBjcmVhdGVJbnQocmVzdWx0KTsKICAgICAgfSBlbHNlIGlmIChsZWZ0LmlzTnVtICYmIHJpZ2h0LmlzTnVtKSB7CiAgICAgICAgTnVtQ29uc3RhbnRWYWx1ZSBsZWZ0TnVtID0gbGVmdDsKICAgICAgICBOdW1Db25zdGFudFZhbHVlIHJpZ2h0TnVtID0gcmlnaHQ7CiAgICAgICAgZG91YmxlIHJlc3VsdCA9IGxlZnROdW0uZG91YmxlVmFsdWUgKyByaWdodE51bS5kb3VibGVWYWx1ZTsKICAgICAgICByZXR1cm4gY3JlYXRlRG91YmxlKHJlc3VsdCk7CiAgICAgIH0gZWxzZSBpZiAobGVmdC5pc1N0cmluZyAmJiByaWdodC5pc1N0cmluZykgewogICAgICAgIFN0cmluZ0NvbnN0YW50VmFsdWUgbGVmdFN0cmluZyA9IGxlZnQ7CiAgICAgICAgU3RyaW5nQ29uc3RhbnRWYWx1ZSByaWdodFN0cmluZyA9IHJpZ2h0OwogICAgICAgIFN0cmluZyByZXN1bHQgPSBsZWZ0U3RyaW5nLnN0cmluZ1ZhbHVlICsgcmlnaHRTdHJpbmcuc3RyaW5nVmFsdWU7CiAgICAgICAgcmV0dXJuIGNyZWF0ZVN0cmluZyhyZXN1bHQpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CgogICAgQ29uc3RhbnRWYWx1ZSByZXN1bHQgPSBfZm9sZChsZWZ0LCByaWdodCk7CiAgICBpZiAocmVzdWx0ICE9IG51bGwgJiYgcmVzdWx0LmlzTnVtKSB7CiAgICAgIHJldHVybiBfY29udmVydFRvSmF2YVNjcmlwdENvbnN0YW50KHJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgYXBwbHkobGVmdCwgcmlnaHQpID0+IGxlZnQgKyByaWdodDsKfQoKYWJzdHJhY3QgY2xhc3MgUmVsYXRpb25hbE51bU9wZXJhdGlvbiBpbXBsZW1lbnRzIEJpbmFyeU9wZXJhdGlvbiB7CiAgY29uc3QgUmVsYXRpb25hbE51bU9wZXJhdGlvbigpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGZvbGQoQ29uc3RhbnRWYWx1ZSBsZWZ0LCBDb25zdGFudFZhbHVlIHJpZ2h0KSB7CiAgICBpZiAoIWxlZnQuaXNOdW0gfHwgIXJpZ2h0LmlzTnVtKSByZXR1cm4gbnVsbDsKICAgIGJvb2wgZm9sZGVkVmFsdWU7CiAgICBpZiAobGVmdC5pc0ludCAmJiByaWdodC5pc0ludCkgewogICAgICBJbnRDb25zdGFudFZhbHVlIGxlZnRJbnQgPSBsZWZ0OwogICAgICBJbnRDb25zdGFudFZhbHVlIHJpZ2h0SW50ID0gcmlnaHQ7CiAgICAgIGZvbGRlZFZhbHVlID0gZm9sZEludHMobGVmdEludC5pbnRWYWx1ZSwgcmlnaHRJbnQuaW50VmFsdWUpOwogICAgfSBlbHNlIHsKICAgICAgTnVtQ29uc3RhbnRWYWx1ZSBsZWZ0TnVtID0gbGVmdDsKICAgICAgTnVtQ29uc3RhbnRWYWx1ZSByaWdodE51bSA9IHJpZ2h0OwogICAgICBmb2xkZWRWYWx1ZSA9IGZvbGROdW1zKGxlZnROdW0uZG91YmxlVmFsdWUsIHJpZ2h0TnVtLmRvdWJsZVZhbHVlKTsKICAgIH0KICAgIGFzc2VydChmb2xkZWRWYWx1ZSAhPSBudWxsKTsKICAgIHJldHVybiBjcmVhdGVCb29sKGZvbGRlZFZhbHVlKTsKICB9CgogIGJvb2wgZm9sZEludHMoQmlnSW50IGxlZnQsIEJpZ0ludCByaWdodCk7CiAgYm9vbCBmb2xkTnVtcyhudW0gbGVmdCwgbnVtIHJpZ2h0KTsKfQoKY2xhc3MgTGVzc09wZXJhdGlvbiBleHRlbmRzIFJlbGF0aW9uYWxOdW1PcGVyYXRpb24gewogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lID0gJzwnOwoKICBjb25zdCBMZXNzT3BlcmF0aW9uKCk7CgogIEBvdmVycmlkZQogIGJvb2wgZm9sZEludHMoQmlnSW50IGxlZnQsIEJpZ0ludCByaWdodCkgPT4gbGVmdCA8IHJpZ2h0OwoKICBAb3ZlcnJpZGUKICBib29sIGZvbGROdW1zKG51bSBsZWZ0LCBudW0gcmlnaHQpID0+IGxlZnQgPCByaWdodDsKCiAgQG92ZXJyaWRlCiAgYXBwbHkobGVmdCwgcmlnaHQpID0+IGxlZnQgPCByaWdodDsKfQoKY2xhc3MgTGVzc0VxdWFsT3BlcmF0aW9uIGV4dGVuZHMgUmVsYXRpb25hbE51bU9wZXJhdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAnPD0nOwoKICBjb25zdCBMZXNzRXF1YWxPcGVyYXRpb24oKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBmb2xkSW50cyhCaWdJbnQgbGVmdCwgQmlnSW50IHJpZ2h0KSA9PiBsZWZ0IDw9IHJpZ2h0OwoKICBAb3ZlcnJpZGUKICBib29sIGZvbGROdW1zKG51bSBsZWZ0LCBudW0gcmlnaHQpID0+IGxlZnQgPD0gcmlnaHQ7CgogIEBvdmVycmlkZQogIGFwcGx5KGxlZnQsIHJpZ2h0KSA9PiBsZWZ0IDw9IHJpZ2h0Owp9CgpjbGFzcyBHcmVhdGVyT3BlcmF0aW9uIGV4dGVuZHMgUmVsYXRpb25hbE51bU9wZXJhdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAnPic7CgogIGNvbnN0IEdyZWF0ZXJPcGVyYXRpb24oKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBmb2xkSW50cyhCaWdJbnQgbGVmdCwgQmlnSW50IHJpZ2h0KSA9PiBsZWZ0ID4gcmlnaHQ7CgogIEBvdmVycmlkZQogIGJvb2wgZm9sZE51bXMobnVtIGxlZnQsIG51bSByaWdodCkgPT4gbGVmdCA+IHJpZ2h0OwoKICBAb3ZlcnJpZGUKICBhcHBseShsZWZ0LCByaWdodCkgPT4gbGVmdCA+IHJpZ2h0Owp9CgpjbGFzcyBHcmVhdGVyRXF1YWxPcGVyYXRpb24gZXh0ZW5kcyBSZWxhdGlvbmFsTnVtT3BlcmF0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZSA9ICc+PSc7CgogIGNvbnN0IEdyZWF0ZXJFcXVhbE9wZXJhdGlvbigpOwoKICBAb3ZlcnJpZGUKICBib29sIGZvbGRJbnRzKEJpZ0ludCBsZWZ0LCBCaWdJbnQgcmlnaHQpID0+IGxlZnQgPj0gcmlnaHQ7CgogIEBvdmVycmlkZQogIGJvb2wgZm9sZE51bXMobnVtIGxlZnQsIG51bSByaWdodCkgPT4gbGVmdCA+PSByaWdodDsKCiAgQG92ZXJyaWRlCiAgYXBwbHkobGVmdCwgcmlnaHQpID0+IGxlZnQgPj0gcmlnaHQ7Cn0KCmNsYXNzIEVxdWFsc09wZXJhdGlvbiBpbXBsZW1lbnRzIEJpbmFyeU9wZXJhdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAnPT0nOwoKICBjb25zdCBFcXVhbHNPcGVyYXRpb24oKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBmb2xkKENvbnN0YW50VmFsdWUgbGVmdCwgQ29uc3RhbnRWYWx1ZSByaWdodCkgewogICAgLy8gTnVtYmVycyBuZWVkIHRvIGJlIHRyZWF0ZWQgc3BlY2lhbGx5IGJlY2F1c2U6IE5hTiAhPSBOYU4sIC0wLjAgPT0gMC4wLAogICAgLy8gYW5kIDEgPT0gMS4wLgogICAgaWYgKGxlZnQuaXNJbnQgJiYgcmlnaHQuaXNJbnQpIHsKICAgICAgSW50Q29uc3RhbnRWYWx1ZSBsZWZ0SW50ID0gbGVmdDsKICAgICAgSW50Q29uc3RhbnRWYWx1ZSByaWdodEludCA9IHJpZ2h0OwogICAgICBib29sIHJlc3VsdCA9IGxlZnRJbnQuaW50VmFsdWUgPT0gcmlnaHRJbnQuaW50VmFsdWU7CiAgICAgIHJldHVybiBjcmVhdGVCb29sKHJlc3VsdCk7CiAgICB9CgogICAgaWYgKGxlZnQuaXNOdW0gJiYgcmlnaHQuaXNOdW0pIHsKICAgICAgTnVtQ29uc3RhbnRWYWx1ZSBsZWZ0TnVtID0gbGVmdDsKICAgICAgTnVtQ29uc3RhbnRWYWx1ZSByaWdodE51bSA9IHJpZ2h0OwogICAgICBib29sIHJlc3VsdCA9IGxlZnROdW0uZG91YmxlVmFsdWUgPT0gcmlnaHROdW0uZG91YmxlVmFsdWU7CiAgICAgIHJldHVybiBjcmVhdGVCb29sKHJlc3VsdCk7CiAgICB9CgogICAgaWYgKGxlZnQuaXNDb25zdHJ1Y3RlZE9iamVjdCkgewogICAgICBpZiAocmlnaHQuaXNOdWxsKSB7CiAgICAgICAgcmV0dXJuIGNyZWF0ZUJvb2woZmFsc2UpOwogICAgICB9CiAgICAgIC8vIFVubGVzcyB3ZSBrbm93IHRoYXQgdGhlIHVzZXItZGVmaW5lZCBvYmplY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZQogICAgICAvLyBlcXVhbGl0eSBvcGVyYXRvciB3ZSBjYW5ub3QgZm9sZCBoZXJlLgogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICByZXR1cm4gY3JlYXRlQm9vbChsZWZ0ID09IHJpZ2h0KTsKICB9CgogIEBvdmVycmlkZQogIGFwcGx5KGxlZnQsIHJpZ2h0KSA9PiBsZWZ0ID09IHJpZ2h0Owp9CgpjbGFzcyBJZGVudGl0eU9wZXJhdGlvbiBpbXBsZW1lbnRzIEJpbmFyeU9wZXJhdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAnPT09JzsKCiAgY29uc3QgSWRlbnRpdHlPcGVyYXRpb24oKTsKCiAgQG92ZXJyaWRlCiAgQm9vbENvbnN0YW50VmFsdWUgZm9sZChDb25zdGFudFZhbHVlIGxlZnQsIENvbnN0YW50VmFsdWUgcmlnaHQpIHsKICAgIEJvb2xDb25zdGFudFZhbHVlIF9mb2xkKENvbnN0YW50VmFsdWUgbGVmdCwgQ29uc3RhbnRWYWx1ZSByaWdodCkgewogICAgICAvLyBJbiBvcmRlciB0byBwcmVzZXJ2ZSBydW50aW1lIHNlbWFudGljcyB3aGljaCBzYXlzIHRoYXQgTmFOICE9PSBOYU4KICAgICAgLy8gZG9uJ3QgY29uc3RhbnQgZm9sZCBOYU4gPT09IE5hTi4gT3RoZXJ3aXNlIHRoZSBvdXRwdXQgZGVwZW5kcyBvbgogICAgICAvLyBpbmxpbmVkIHZhcmlhYmxlcyBhbmQgb3RoZXIgb3B0aW1pemF0aW9ucy4KICAgICAgaWYgKGxlZnQuaXNOYU4gJiYgcmlnaHQuaXNOYU4pIHJldHVybiBuZXcgRmFsc2VDb25zdGFudFZhbHVlKCk7CiAgICAgIHJldHVybiBjcmVhdGVCb29sKGxlZnQgPT0gcmlnaHQpOwogICAgfQoKICAgIEJvb2xDb25zdGFudFZhbHVlIHJlc3VsdCA9IF9mb2xkKGxlZnQsIHJpZ2h0KTsKICAgIGlmIChyZXN1bHQgPT0gbnVsbCB8fCByZXN1bHQuYm9vbFZhbHVlKSByZXR1cm4gcmVzdWx0OwogICAgLy8gSW4gSmF2YVNjcmlwdCAtMC4wID09PSAwIGFuZCBhbGwgZG91YmxlcyBhcmUgZXF1YWwgdG8gdGhlaXIgaW50ZWdlcgogICAgLy8gdmFsdWVzLiBGdXJ0aGVybW9yZSBOYU4gIT09IE5hTi4KICAgIGlmIChsZWZ0LmlzSW50ICYmIHJpZ2h0LmlzSW50KSB7CiAgICAgIEludENvbnN0YW50VmFsdWUgbGVmdEludCA9IGxlZnQ7CiAgICAgIEludENvbnN0YW50VmFsdWUgcmlnaHRJbnQgPSByaWdodDsKICAgICAgcmV0dXJuIG5ldyBCb29sQ29uc3RhbnRWYWx1ZShsZWZ0SW50LmludFZhbHVlID09IHJpZ2h0SW50LmludFZhbHVlKTsKICAgIH0KICAgIGlmIChsZWZ0LmlzTnVtICYmIHJpZ2h0LmlzTnVtKSB7CiAgICAgIE51bUNvbnN0YW50VmFsdWUgbGVmdE51bSA9IGxlZnQ7CiAgICAgIE51bUNvbnN0YW50VmFsdWUgcmlnaHROdW0gPSByaWdodDsKICAgICAgZG91YmxlIGxlZnREb3VibGUgPSBsZWZ0TnVtLmRvdWJsZVZhbHVlOwogICAgICBkb3VibGUgcmlnaHREb3VibGUgPSByaWdodE51bS5kb3VibGVWYWx1ZTsKICAgICAgcmV0dXJuIG5ldyBCb29sQ29uc3RhbnRWYWx1ZShsZWZ0RG91YmxlID09IHJpZ2h0RG91YmxlKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBhcHBseShsZWZ0LCByaWdodCkgPT4gaWRlbnRpY2FsKGxlZnQsIHJpZ2h0KTsKfQoKY2xhc3MgSWZOdWxsT3BlcmF0aW9uIGltcGxlbWVudHMgQmluYXJ5T3BlcmF0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZSA9ICc/Pyc7CgogIGNvbnN0IElmTnVsbE9wZXJhdGlvbigpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGZvbGQoQ29uc3RhbnRWYWx1ZSBsZWZ0LCBDb25zdGFudFZhbHVlIHJpZ2h0KSB7CiAgICBpZiAobGVmdC5pc051bGwpIHJldHVybiByaWdodDsKICAgIHJldHVybiBsZWZ0OwogIH0KCiAgQG92ZXJyaWRlCiAgYXBwbHkobGVmdCwgcmlnaHQpID0+IGxlZnQgPz8gcmlnaHQ7Cn0KCmNsYXNzIENvZGVVbml0QXRPcGVyYXRpb24gaW1wbGVtZW50cyBCaW5hcnlPcGVyYXRpb24gewogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lID0gJ2NoYXJDb2RlQXQnOwoKICBjb25zdCBDb2RlVW5pdEF0T3BlcmF0aW9uKCk7CgogIEBvdmVycmlkZQogIEludENvbnN0YW50VmFsdWUgZm9sZChDb25zdGFudFZhbHVlIGxlZnQsIENvbnN0YW50VmFsdWUgcmlnaHQpIHsKICAgIGlmIChsZWZ0LmlzU3RyaW5nICYmIHJpZ2h0LmlzSW50KSB7CiAgICAgIFN0cmluZ0NvbnN0YW50VmFsdWUgc3RyaW5nQ29uc3RhbnQgPSBsZWZ0OwogICAgICBJbnRDb25zdGFudFZhbHVlIGluZGV4Q29uc3RhbnQgPSByaWdodDsKICAgICAgU3RyaW5nIHN0cmluZyA9IHN0cmluZ0NvbnN0YW50LnN0cmluZ1ZhbHVlOwogICAgICBpbnQgaW5kZXggPSBpbmRleENvbnN0YW50LmludFZhbHVlLnRvSW50KCk7CiAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIG51bGw7CiAgICAgIGludCB2YWx1ZSA9IHN0cmluZy5jb2RlVW5pdEF0KGluZGV4KTsKICAgICAgcmV0dXJuIGNyZWF0ZUludEZyb21JbnQodmFsdWUpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBhcHBseShsZWZ0LCByaWdodCkgPT4gbGVmdC5jb2RlVW5pdEF0KHJpZ2h0KTsKfQoKY2xhc3MgUm91bmRPcGVyYXRpb24gaW1wbGVtZW50cyBVbmFyeU9wZXJhdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAncm91bmQnOwoKICBjb25zdCBSb3VuZE9wZXJhdGlvbigpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGZvbGQoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgewogICAgLy8gQmUgY2FyZWZ1bCB0byByb3VuZCgpIG9ubHkgdmFsdWVzIHRoYXQgZG8gbm90IHRocm93IG9uIGVpdGhlciB0aGUgaG9zdCBvcgogICAgLy8gdGFyZ2V0IHBsYXRmb3JtLgogICAgQ29uc3RhbnRWYWx1ZSB0cnlUb1JvdW5kKGRvdWJsZSB2YWx1ZSkgewogICAgICAvLyBEdWUgdG8gZGlmZmVyZW5jZXMgYmV0d2VlbiBicm93c2Vycywgb25seSAncm91bmQnIGVhc3kgY2FzZXMuIEF2b2lkCiAgICAgIC8vIGNhc2VzIHdoZXJlIG51ZGdpbmcgdGhlIHZhbHVlIHVwIG9yIGRvd24gY2hhbmdlcyB0aGUgYW5zd2VyLgogICAgICAvLyAxMyBkaWdpdHMgaXMgc2FmZWx5IHdpdGhpbiB0aGUgfjE1IGRpZ2l0IHByZWNpc2lvbiBvZiBkb3VibGVzLgogICAgICBjb25zdCBzZXZlcmFsVUxQID0gMC4wMDAwMDAwMDAwMDAxOwogICAgICAvLyBVc2UgJ3JvdW5kVG9Eb3VibGUoKScgdG8gYXZvaWQgZXhjZXB0aW9ucyBvbiByb3VuZGluZyB0aGUgbnVkZ2VkIHZhbHVlLgogICAgICBkb3VibGUgcm91bmRlZCA9IHZhbHVlLnJvdW5kVG9Eb3VibGUoKTsKICAgICAgZG91YmxlIHJvdW5kZWQxID0gKHZhbHVlICogKDEuMCArIHNldmVyYWxVTFApKS5yb3VuZFRvRG91YmxlKCk7CiAgICAgIGRvdWJsZSByb3VuZGVkMiA9ICh2YWx1ZSAqICgxLjAgLSBzZXZlcmFsVUxQKSkucm91bmRUb0RvdWJsZSgpOwogICAgICBpZiAocm91bmRlZCAhPSByb3VuZGVkMSB8fCByb3VuZGVkICE9IHJvdW5kZWQyKSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuIF9jb252ZXJ0VG9KYXZhU2NyaXB0Q29uc3RhbnQoCiAgICAgICAgICBuZXcgSW50Q29uc3RhbnRWYWx1ZShuZXcgQmlnSW50LmZyb20odmFsdWUucm91bmQoKSkpKTsKICAgIH0KCiAgICBpZiAoY29uc3RhbnQuaXNJbnQpIHsKICAgICAgSW50Q29uc3RhbnRWYWx1ZSBpbnRDb25zdGFudCA9IGNvbnN0YW50OwogICAgICBkb3VibGUgdmFsdWUgPSBpbnRDb25zdGFudC5pbnRWYWx1ZS50b0RvdWJsZSgpOwogICAgICBpZiAodmFsdWUgPj0gLWRvdWJsZS5tYXhGaW5pdGUgJiYgdmFsdWUgPD0gZG91YmxlLm1heEZpbml0ZSkgewogICAgICAgIHJldHVybiB0cnlUb1JvdW5kKHZhbHVlKTsKICAgICAgfQogICAgfQogICAgaWYgKGNvbnN0YW50LmlzRG91YmxlKSB7CiAgICAgIERvdWJsZUNvbnN0YW50VmFsdWUgZG91YmxlQ29uc3RhbnQgPSBjb25zdGFudDsKICAgICAgZG91YmxlIHZhbHVlID0gZG91YmxlQ29uc3RhbnQuZG91YmxlVmFsdWU7CiAgICAgIC8vIE5hTiBhbmQgaW5maW5pdGllcyB3aWxsIHRocm93LgogICAgICBpZiAodmFsdWUuaXNOYU4pIHJldHVybiBudWxsOwogICAgICBpZiAodmFsdWUuaXNJbmZpbml0ZSkgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiB0cnlUb1JvdW5kKHZhbHVlKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KfQoKY2xhc3MgVW5mb2xkZWRVbmFyeU9wZXJhdGlvbiBpbXBsZW1lbnRzIFVuYXJ5T3BlcmF0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZTsKCiAgY29uc3QgVW5mb2xkZWRVbmFyeU9wZXJhdGlvbih0aGlzLm5hbWUpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGZvbGQoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgewogICAgcmV0dXJuIG51bGw7CiAgfQp9CgpjbGFzcyBKYXZhU2NyaXB0U2V0Q29uc3RhbnQgZXh0ZW5kcyBTZXRDb25zdGFudFZhbHVlIHsKICBmaW5hbCBNYXBDb25zdGFudFZhbHVlIGVudHJpZXM7CgogIEphdmFTY3JpcHRTZXRDb25zdGFudChJbnRlcmZhY2VUeXBlIHR5cGUsIHRoaXMuZW50cmllcykKICAgICAgOiBzdXBlcih0eXBlLCBlbnRyaWVzLmtleXMpOwoKICBAb3ZlcnJpZGUKICBMaXN0PENvbnN0YW50VmFsdWU+IGdldERlcGVuZGVuY2llcygpID0+IFtlbnRyaWVzXTsKfQoKY2xhc3MgSmF2YVNjcmlwdE1hcENvbnN0YW50IGV4dGVuZHMgTWFwQ29uc3RhbnRWYWx1ZSB7CiAgLy8vIFRoZSBbUFJPVE9fUFJPUEVSVFldIG11c3Qgbm90IGJlIHVzZWQgYXMgbm9ybWFsIHByb3BlcnR5IGluIGFueSBKYXZhU2NyaXB0CiAgLy8vIG9iamVjdC4gSXQgd291bGQgY2hhbmdlIHRoZSBwcm90b3R5cGUgY2hhaW4uCiAgc3RhdGljIGNvbnN0IFN0cmluZyBQUk9UT19QUk9QRVJUWSA9ICJfX3Byb3RvX18iOwoKICAvLy8gVGhlIGRhcnQgY2xhc3MgaW1wbGVtZW50aW5nIGNvbnN0YW50IG1hcCBsaXRlcmFscy4KICBzdGF0aWMgY29uc3QgU3RyaW5nIERBUlRfQ0xBU1MgPSAiQ29uc3RhbnRNYXAiOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgREFSVF9TVFJJTkdfQ0xBU1MgPSAiQ29uc3RhbnRTdHJpbmdNYXAiOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgREFSVF9QUk9UT19DTEFTUyA9ICJDb25zdGFudFByb3RvTWFwIjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIERBUlRfR0VORVJBTF9DTEFTUyA9ICJHZW5lcmFsQ29uc3RhbnRNYXAiOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgTEVOR1RIX05BTUUgPSAiX2xlbmd0aCI7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBKU19PQkpFQ1RfTkFNRSA9ICJfanNPYmplY3QiOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgS0VZU19OQU1FID0gIl9rZXlzIjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIFBST1RPX1ZBTFVFID0gIl9wcm90b1ZhbHVlIjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIEpTX0RBVEFfTkFNRSA9ICJfanNEYXRhIjsKCiAgZmluYWwgTGlzdENvbnN0YW50VmFsdWUga2V5TGlzdDsKICBmaW5hbCBDb25zdGFudFZhbHVlIHByb3RvVmFsdWU7CiAgZmluYWwgYm9vbCBvbmx5U3RyaW5nS2V5czsKCiAgSmF2YVNjcmlwdE1hcENvbnN0YW50KEludGVyZmFjZVR5cGUgdHlwZSwgTGlzdENvbnN0YW50VmFsdWUga2V5TGlzdCwKICAgICAgTGlzdDxDb25zdGFudFZhbHVlPiB2YWx1ZXMsIHRo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IGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkganNfYmFja2VuZC5uYXRpdmVfZGF0YTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgRWxlbWVudEVudmlyb25tZW50OwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2lyL2Fubm90YXRpb25zLmRhcnQnOwppbXBvcnQgJy4uL2tlcm5lbC9lbGVtZW50X21hcC5kYXJ0JzsKaW1wb3J0ICcuLi9uYXRpdmUvYmVoYXZpb3IuZGFydCcgc2hvdyBOYXRpdmVCZWhhdmlvcjsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnOwoKLy8vIEJhc2ljIGluZm9ybWF0aW9uIGZvciBuYXRpdmUgY2xhc3NlcyBhbmQganMtaW50ZXJvcCBsaWJyYXJpZXMgYW5kIGNsYXNzZXMuCi8vLwovLy8gVGhpcyBpbmZvcm1hdGlvbiBpcyBjb21wdXRlZCBkdXJpbmcgbG9hZGluZyB1c2luZyBbTmF0aXZlQmFzaWNEYXRhQnVpbGRlcl0uCmFic3RyYWN0IGNsYXNzIE5hdGl2ZUJhc2ljRGF0YSB7CiAgLy8vIERlc2VyaWFsaXplcyBhIFtOYXRpdmVCYXNpY0RhdGFdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgTmF0aXZlQmFzaWNEYXRhLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50KSA9CiAgICAgIE5hdGl2ZUJhc2ljRGF0YUltcGwucmVhZEZyb21EYXRhU291cmNlOwoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtOYXRpdmVCYXNpY0RhdGFdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtjbHNdIGNvcnJlc3BvbmRzIHRvIGEgbmF0aXZlIEphdmFTY3JpcHQgY2xhc3MuCiAgLy8vCiAgLy8vIEEgY2xhc3MgaXMgbWFya2VkIGFzIG5hdGl2ZSBlaXRoZXIgdGhyb3VnaCB0aGUgYEBOYXRpdmUoLi4uKWAgYW5ub3RhdGlvbgogIC8vLyBhbGxvd2VkIGZvciBpbnRlcm5hbCBsaWJyYXJpZXMgb3IgdmlhIHRoZSB0eXBlZCBKYXZhU2NyaXB0SW50ZXJvcAogIC8vLyBtZWNoYW5pc20gYWxsb3dlZCBmb3IgdXNlciBsaWJyYXJpZXMuCiAgYm9vbCBpc05hdGl2ZUNsYXNzKENsYXNzRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyB0aGUgbGlzdCBvZiBub24tZGlyZWN0aXZlIG5hdGl2ZSB0YWcgd29yZHMgZm9yIFtjbHNdLgogIExpc3Q8U3RyaW5nPiBnZXROYXRpdmVUYWdzT2ZDbGFzcyhDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2Nsc10gaGFzIGEgYCFub25sZWFmYCB0YWcgd29yZC4KICBib29sIGhhc05hdGl2ZVRhZ3NGb3JjZWROb25MZWFmKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbZWxlbWVudF0gb3IgYW55IG9mIGl0cyBzdXBlcmNsYXNzZXMgaXMgbmF0aXZlLgogIGJvb2wgaXNOYXRpdmVPckV4dGVuZHNOYXRpdmUoQ2xhc3NFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBqcyBpbnRlcm9wIGZlYXR1cmVzIGFyZSB1c2VkLgogIGJvb2wgZ2V0IGlzSnNJbnRlcm9wVXNlZDsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGBhbGxvd0ludGVyb3AoKWAgaXMgaW52b2tlZC4KICBib29sIGdldCBpc0FsbG93SW50ZXJvcFVzZWQ7CgogIC8vLyBNYXJrcyBgYWxsb3dJbnRlcm9wKClgIGFzIHVzZWQuCiAgLy8vCiAgLy8vIFtpc0FsbG93SW50ZXJvcFVzZWRdIGlzIGluaXRpYWxseSBmYWxzZSBvbiB0aGUgY2xvc2VkIHdvcmxkLCBhbmQgaXMgb25seQogIC8vLyBzZXQgZHVyaW5nIGNvZGVnZW4gZW5xdWV1aW5nLgogIHZvaWQgcmVnaXN0ZXJBbGxvd0ludGVyb3AoKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtlbGVtZW50XSBpcyBhIEpzSW50ZXJvcCBsaWJyYXJ5LgogIGJvb2wgaXNKc0ludGVyb3BMaWJyYXJ5KExpYnJhcnlFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbZWxlbWVudF0gaXMgYSBKc0ludGVyb3AgY2xhc3MuCiAgYm9vbCBpc0pzSW50ZXJvcENsYXNzKENsYXNzRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2VsZW1lbnRdIGlzIGEgSnNJbnRlcm9wIG1lbWJlci4KICBib29sIGlzSnNJbnRlcm9wTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KTsKfQoKLy8vIEFkZGl0aW9uYWwgZWxlbWVudCBpbmZvcm1hdGlvbiBmb3IgbmF0aXZlIGNsYXNzZXMgYW5kIG1ldGhvZHMgYW5kIGpzLWludGVyb3AKLy8vIG1ldGhvZHMuCi8vLwovLy8gVGhpcyBpbmZvcm1hdGlvbiBpcyBjb21wdXRlZCBkdXJpbmcgcmVzb2x1dGlvbiB1c2luZyBbTmF0aXZlRGF0YUJ1aWxkZXJdLgphYnN0cmFjdCBjbGFzcyBOYXRpdmVEYXRhIGV4dGVuZHMgTmF0aXZlQmFzaWNEYXRhIHsKICAvLy8gRGVzZXJpYWxpemVzIGEgW05hdGl2ZURhdGFdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgTmF0aXZlRGF0YS5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgICAgICBEYXRhU291cmNlIHNvdXJjZSwgRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCkgPQogICAgICBOYXRpdmVEYXRhSW1wbC5yZWFkRnJvbURhdGFTb3VyY2U7CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW05hdGl2ZURhdGFdIHRvIFtzaW5rXS4KICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtlbGVtZW50XSBjb3JyZXNwb25kcyB0byBhIG5hdGl2ZSBKYXZhU2NyaXB0IG1lbWJlci4KICAvLy8KICAvLy8gQSBtZW1iZXIgaXMgbWFya2VkIGFzIG5hdGl2ZSBlaXRoZXIgdGhyb3VnaCB0aGUgbmF0aXZlIG1lY2hhbmlzbQogIC8vLyAoYEBOYXRpdmUoLi4uKWAgb3IgdGhlIGBuYXRpdmVgIHBzZXVkbyBrZXl3b3JkKSBhbGxvd2VkIGZvciBpbnRlcm5hbAogIC8vLyBsaWJyYXJpZXMgb3IgdmlhIHRoZSB0eXBlZCBKYXZhU2NyaXB0SW50ZXJvcCBtZWNoYW5pc20gYWxsb3dlZCBmb3IgdXNlcgogIC8vLyBsaWJyYXJpZXMuCiAgYm9vbCBpc05hdGl2ZU1lbWJlcihNZW1iZXJFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIHRoZSBbTmF0aXZlQmVoYXZpb3JdIGZvciBjYWxsaW5nIHRoZSBuYXRpdmUgW21ldGhvZF0uCiAgTmF0aXZlQmVoYXZpb3IgZ2V0TmF0aXZlTWV0aG9kQmVoYXZpb3IoRnVuY3Rpb25FbnRpdHkgbWV0aG9kKTsKCiAgLy8vIFJldHVybnMgdGhlIFtOYXRpdmVCZWhhdmlvcl0gZm9yIHJlYWRpbmcgZnJvbSB0aGUgbmF0aXZlIFtmaWVsZF0uCiAgTmF0aXZlQmVoYXZpb3IgZ2V0TmF0aXZlRmllbGRMb2FkQmVoYXZpb3IoRmllbGRFbnRpdHkgZmllbGQpOwoKICAvLy8gUmV0dXJucyB0aGUgW05hdGl2ZUJlaGF2aW9yXSBmb3Igd3JpdGluZyB0byB0aGUgbmF0aXZlIFtmaWVsZF0uCiAgTmF0aXZlQmVoYXZpb3IgZ2V0TmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yKEZpZWxkRW50aXR5IGZpZWxkKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoZSBuYW1lIG9mIFtlbGVtZW50XSBpcyBmaXhlZCBmb3IgdGhlIGdlbmVyYXRlZAogIC8vLyBKYXZhU2NyaXB0LgogIGJvb2wgaGFzRml4ZWRCYWNrZW5kTmFtZShNZW1iZXJFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBDb21wdXRlcyB0aGUgbmFtZSBmb3IgW2VsZW1lbnRdIHRvIHVzZSBpbiB0aGUgZ2VuZXJhdGVkIEphdmFTY3JpcHQuIFRoaXMKICAvLy8gaXMgZWl0aGVyIGdpdmVuIHRocm91Z2ggYSBuYXRpdmUgYW5ub3RhdGlvbiBvciBhIGpzIGludGVyb3AgYW5ub3RhdGlvbi4KICBTdHJpbmcgZ2V0Rml4ZWRCYWNrZW5kTmFtZShNZW1iZXJFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBDb21wdXRlcyB0aGUgbmFtZSBwcmVmaXggZm9yIFtlbGVtZW50XSB0byB1c2UgaW4gdGhlIGdlbmVyYXRlZCBKYXZhU2NyaXB0LgogIC8vLwogIC8vLyBGb3Igc3RhdGljIGFuZCB0b3AtbGV2ZWwgbWVtYmVycyBhbmQgY29uc3RydWN0b3JzIHRoaXMgaXMgYmFzZWQgb24gdGhlCiAgLy8vIEphdmFTY3JpcHQgbmFtZXMgZm9yIHRoZSBsaWJyYXJ5IGFuZC9vciB0aGUgZW5jbG9zaW5nIGNsYXNzLgogIFN0cmluZyBnZXRGaXhlZEJhY2tlbmRNZXRob2RQYXRoKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzSnNJbnRlcm9wTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgdGhlIGV4cGxpY2l0IGpzIGludGVyb3AgbmFtZSBmb3IgbGlicmFyeSBbZWxlbWVudF0uCiAgU3RyaW5nIGdldEpzSW50ZXJvcExpYnJhcnlOYW1lKExpYnJhcnlFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbZWxlbWVudF0gaGFzIGFuIGBAQW5vbnltb3VzYCBhbm5vdGF0aW9uLgogIGJvb2wgaXNBbm9ueW1vdXNKc0ludGVyb3BDbGFzcyhDbGFzc0VudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgdGhlIGV4cGxpY2l0IGpzIGludGVyb3AgbmFtZSBmb3IgY2xhc3MgW2VsZW1lbnRdLgogIFN0cmluZyBnZXRKc0ludGVyb3BDbGFzc05hbWUoQ2xhc3NFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIHRoZSBleHBsaWNpdCBqcyBpbnRlcm9wIG5hbWUgZm9yIG1lbWJlciBbZWxlbWVudF0uCiAgU3RyaW5nIGdldEpzSW50ZXJvcE1lbWJlck5hbWUoTWVtYmVyRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gQXBwbHkgSlMkIGVzY2FwaW5nIHNjaGVtZSB0byBjb252ZXJ0IHBvc3NpYmxlIGVzY2FwZWQgRGFydCBuYW1lcyBpbnRvCiAgLy8vIEpTIG5hbWVzLgogIFN0cmluZyBjb21wdXRlVW5lc2NhcGVkSlNJbnRlcm9wTmFtZShTdHJpbmcgbmFtZSk7Cn0KCmFic3RyYWN0IGNsYXNzIE5hdGl2ZUJhc2ljRGF0YUJ1aWxkZXIgewogIC8vLyBTZXRzIHRoZSBuYXRpdmUgdGFnIGluZm8gZm9yIFtjbHNdLgogIC8vLwogIC8vLyBUaGUgdGFnIGluZm8gc3RyaW5nIGNvbnRhaW5zIGNvbW1hLXNlcGFyYXRlZCAnd29yZHMnIHdoaWNoIGFyZSBlaXRoZXIKICAvLy8gZGlzcGF0Y2ggdGFncyAoaGF2aW5nIEphdmFTY3JpcHQgaWRlbnRpZmllciBzeW50YXgpIGFuZCBkaXJlY3RpdmVzIHRoYXQKICAvLy8gYmVnaW4gd2l0aCBgIWAuCiAgdm9pZCBzZXROYXRpdmVDbGFzc1RhZ0luZm8oQ2xhc3NFbnRpdHkgY2xzLCBTdHJpbmcgdGFnSW5mbyk7CgogIC8vLyBNYXJrcyBbZWxlbWVudF0gYXMgYW4gZXhwbGljaXQgcGFydCBvZiBqcyBpbnRlcm9wLgogIC8vLwogIC8vLyBJZiBbbmFtZV0gaXMgcHJvdmlkZWQsIGl0IHNldHMgdGhlIGV4cGxpY2l0IGpzIGludGVyb3AgbmFtZSBmb3IgdGhlCiAgLy8vIGxpYnJhcnkgW2VsZW1lbnRdLCBvdGhlciB0aGUganMgaW50ZXJvcCBuYW1lIGlzIGV4cGVjdGVkIHRvIGJlIGNvbXB1dGVkCiAgLy8vIGxhdGVyLgogIHZvaWQgbWFya0FzSnNJbnRlcm9wTGlicmFyeShMaWJyYXJ5RW50aXR5IGVsZW1lbnQsIHtTdHJpbmcgbmFtZX0pOwoKICAvLy8gTWFya3MgW2VsZW1lbnRdIGFzIGFuIGV4cGxpY2l0IHBhcnQgb2YganMgaW50ZXJvcC4KICAvLy8KICAvLy8gSWYgW25hbWVdIGlzIHByb3ZpZGVkLCBpdCBzZXRzIHRoZSBleHBsaWNpdCBqcyBpbnRlcm9wIG5hbWUgZm9yIHRoZQogIC8vLyBjbGFzcyBbZWxlbWVudF0sIG90aGVyIHRoZSBqcyBpbnRlcm9wIG5hbWUgaXMgZXhwZWN0ZWQgdG8gYmUgY29tcHV0ZWQKICAvLy8gbGF0ZXIuCiAgdm9pZCBtYXJrQXNKc0ludGVyb3BDbGFzcyhDbGFzc0VudGl0eSBlbGVtZW50LAogICAgICB7U3RyaW5nIG5hbWUsIGJvb2wgaXNBbm9ueW1vdXM6IGZhbHNlfSk7CgogIC8vLyBNYXJrcyBbZWxlbWVudF0gYXMgYW4gZXhwbGljaXQgcGFydCBvZiBqcyBpbnRlcm9wIGFuZCBzZXRzIHRoZSBleHBsaWNpdCBqcwogIC8vLyBpbnRlcm9wIFtuYW1lXSBmb3IgdGhlIG1lbWJlciBbZWxlbWVudF0uCiAgdm9pZCBtYXJrQXNKc0ludGVyb3BNZW1iZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQsIFN0cmluZyBuYW1lKTsKCiAgLy8vIENyZWF0ZXMgdGhlIFtOYXRpdmVCYXNpY0RhdGFdIG9iamVjdCBmb3IgdGhlIGRhdGEgY29sbGVjdGVkIGluIHRoaXMKICAvLy8gYnVpbGRlci4KICBOYXRpdmVCYXNpY0RhdGEgY2xvc2UoRWxlbWVudEVudmlyb25tZW50IGVudmlyb25tZW50KTsKfQoKYWJzdHJhY3QgY2xhc3MgTmF0aXZlRGF0YUJ1aWxkZXIgewogIC8vLyBSZWdpc3RlcnMgdGhlIFtiZWhhdmlvcl0gZm9yIGNhbGxpbmcgdGhlIG5hdGl2ZSBbbWV0aG9kXS4KICB2b2lkIHNldE5hdGl2ZU1ldGhvZEJlaGF2aW9yKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCwgTmF0aXZlQmVoYXZpb3IgYmVoYXZpb3IpOwoKICAvLy8gUmVnaXN0ZXJzIHRoZSBbYmVoYXZpb3JdIGZvciByZWFkaW5nIGZyb20gdGhlIG5hdGl2ZSBbZmllbGRdLgogIHZvaWQgc2V0TmF0aXZlRmllbGRMb2FkQmVoYXZpb3IoRmllbGRFbnRpdHkgZmllbGQsIE5hdGl2ZUJlaGF2aW9yIGJlaGF2aW9yKTsKCiAgLy8vIFJlZ2lzdGVycyB0aGUgW2JlaGF2aW9yXSBmb3Igd3JpdGluZyB0byB0aGUgbmF0aXZlIFtmaWVsZF0uCiAgdm9pZCBzZXROYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3IoRmllbGRFbnRpdHkgZmllbGQsIE5hdGl2ZUJlaGF2aW9yIGJlaGF2aW9yKTsKCiAgLy8vIFNldHMgdGhlIG5hdGl2ZSBbbmFtZV0gZm9yIHRoZSBtZW1iZXIgW2VsZW1lbnRdLgogIC8vLwogIC8vLyBUaGlzIG5hbWUgaXMgdXNlZCBmb3IgW2VsZW1lbnRdIGluIHRoZSBnZW5lcmF0ZWQgSmF2YVNjcmlwdC4KICB2b2lkIHNldE5hdGl2ZU1lbWJlck5hbWUoTWVtYmVyRW50aXR5IGVsZW1lbnQsIFN0cmluZyBuYW1lKTsKCiAgLy8vIENsb3NlcyB0aGlzIGJ1aWxkZXIgYW5kIGNyZWF0ZXMgdGhlIHJlc3VsdGluZyBbTmF0aXZlRGF0YV0gb2JqZWN0LgogIE5hdGl2ZURhdGEgY2xvc2UoKTsKfQoKY2xhc3MgTmF0aXZlQmFzaWNEYXRhQnVpbGRlckltcGwgaW1wbGVtZW50cyBOYXRpdmVCYXNpY0RhdGFCdWlsZGVyIHsKICBib29sIF9jbG9zZWQgPSBmYWxzZTsKCiAgLy8vIFRhZyBpbmZvIGZvciBuYXRpdmUgSmF2YVNjcmlwdCBjbGFzc2VzIG5hbWVzLiBTZWUKICAvLy8gW3NldE5hdGl2ZUNsYXNzVGFnSW5mb10uCiAgTWFwPENsYXNzRW50aXR5LCBOYXRpdmVDbGFzc1RhZz4gbmF0aXZlQ2xhc3NUYWdJbmZvID0KICAgICAgPENsYXNzRW50aXR5LCBOYXRpdmVDbGFzc1RhZz57fTsKCiAgLy8vIFRoZSBKYXZhU2NyaXB0IGxpYnJhcmllcyBpbXBsZW1lbnRlZCB2aWEgdHlwZWQgSmF2YVNjcmlwdCBpbnRlcm9wLgogIE1hcDxMaWJyYXJ5RW50aXR5LCBTdHJpbmc+IGpzSW50ZXJvcExpYnJhcmllcyA9IDxMaWJyYXJ5RW50aXR5LCBTdHJpbmc+e307CgogIC8vLyBUaGUgSmF2YVNjcmlwdCBjbGFzc2VzIGltcGxlbWVudGVkIHZpYSB0eXBlZCBKYXZhU2NyaXB0IGludGVyb3AuCiAgTWFwPENsYXNzRW50aXR5LCBTdHJpbmc+IGpzSW50ZXJvcENsYXNzZXMgPSA8Q2xhc3NFbnRpdHksIFN0cmluZz57fTsKCiAgLy8vIEphdmFTY3JpcHQgaW50ZXJvcCBjbGFzc2VzIGFubm90YXRlZCB3aXRoIGBAYW5vbnltb3VzYAogIFNldDxDbGFzc0VudGl0eT4gYW5vbnltb3VzSnNJbnRlcm9wQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CgogIC8vLyBUaGUgSmF2YVNjcmlwdCBtZW1iZXJzIGltcGxlbWVudGVkIHZpYSB0eXBlZCBKYXZhU2NyaXB0IGludGVyb3AuCiAgTWFwPE1lbWJlckVudGl0eSwgU3RyaW5nPiBqc0ludGVyb3BNZW1iZXJzID0gPE1lbWJlckVudGl0eSwgU3RyaW5nPnt9OwoKICBAb3ZlcnJpZGUKICB2b2lkIHNldE5hdGl2ZUNsYXNzVGFnSW5mbyhDbGFzc0VudGl0eSBjbHMsIFN0cmluZyB0YWdUZXh0KSB7CiAgICBhc3NlcnQoCiAgICAgICAgIV9jbG9zZWQsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGNscywKICAgICAgICAgICAgIk5hdGl2ZUJhc2ljRGF0YUJ1aWxkZXIgaXMgY2xvc2VkLiAiCiAgICAgICAgICAgICJUcnlpbmcgdG8gbWFyayAkY2xzIGFzIGEgbmF0aXZlIGNsYXNzLiIpKTsKCiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBc3NlcnQgdGhhdCB0aGlzIGlzIG9ubHkgY2FsbGVkIG9uY2UuIFRoZSBtZW1vcnkKICAgIC8vIGNvbXBpbGVyIGNvcGllcyBwcmUtcHJvY2Vzc2VkIGVsZW1lbnRzIGludG8gYSBuZXcgY29tcGlsZXIgdGhyb3VnaAogICAgLy8gW0NvbXBpbGVyLm9uTGlicmFyeVNjYW5uZWRdIGFuZCB0aGVyZWJ5IGNhdXNlcyBtdWx0aXBsZSBjYWxscyB0byB0aGlzCiAgICAvLyBtZXRob2QuCiAgICBhc3NlcnQoCiAgICAgICAgbmF0aXZlQ2xhc3NUYWdJbmZvW2Nsc10gPT0gbnVsbCB8fAogICAgICAgICAgICBuYXRpdmVDbGFzc1RhZ0luZm9bY2xzXS50ZXh0ID09IHRhZ1RleHQsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGNscywKICAgICAgICAgICAgIk5hdGl2ZSB0YWcgaW5mbyBzZXQgaW5jb25zaXN0ZW50bHkgb24gJGNsczogIgogICAgICAgICAgICAiRXhpc3RpbmcgdGFnIGluZm8gJyR7bmF0aXZlQ2xhc3NUYWdJbmZvW2Nsc119JywgIgogICAgICAgICAgICAibmV3IHRhZyBpbmZvICckdGFnVGV4dCcuIikpOwogICAgbmF0aXZlQ2xhc3NUYWdJbmZvW2Nsc10gPSBuZXcgTmF0aXZlQ2xhc3NUYWcodGFnVGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIG1hcmtBc0pzSW50ZXJvcExpYnJhcnkoTGlicmFyeUVudGl0eSBlbGVtZW50LCB7U3RyaW5nIG5hbWV9KSB7CiAgICBhc3NlcnQoCiAgICAgICAgIV9jbG9zZWQsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICJOYXRpdmVCYXNpY0RhdGFCdWlsZGVyIGlzIGNsb3NlZC4gIgogICAgICAgICAgICAiVHJ5aW5nIHRvIG1hcmsgJGVsZW1lbnQgYXMgYSBqcy1pbnRlcm9wIGxpYnJhcnkuIikpOwogICAganNJbnRlcm9wTGlicmFyaWVzW2VsZW1lbnRdID0gbmFtZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgbWFya0FzSnNJbnRlcm9wQ2xhc3MoQ2xhc3NFbnRpdHkgZWxlbWVudCwKICAgICAge1N0cmluZyBuYW1lLCBib29sIGlzQW5vbnltb3VzOiBmYWxzZX0pIHsKICAgIGFzc2VydCgKICAgICAgICAhX2Nsb3NlZCwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgIk5hdGl2ZUJhc2ljRGF0YUJ1aWxkZXIgaXMgY2xvc2VkLiAiCiAgICAgICAgICAgICJUcnlpbmcgdG8gbWFyayAkZWxlbWVudCBhcyBhIGpzLWludGVyb3AgY2xhc3MuIikpOwogICAganNJbnRlcm9wQ2xhc3Nlc1tlbGVtZW50XSA9IG5hbWU7CiAgICBpZiAoaXNBbm9ueW1vdXMpIHsKICAgICAgYW5vbnltb3VzSnNJbnRlcm9wQ2xhc3Nlcy5hZGQoZWxlbWVudCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIG1hcmtBc0pzSW50ZXJvcE1lbWJlcihNZW1iZXJFbnRpdHkgZWxlbWVudCwgU3RyaW5nIG5hbWUpIHsKICAgIGFzc2VydCgKICAgICAgICAhX2Nsb3NlZCwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgIk5hdGl2ZUJhc2ljRGF0YUJ1aWxkZXIgaXMgY2xvc2VkLiAiCiAgICAgICAgICAgICJUcnlpbmcgdG8gbWFyayAkZWxlbWVudCBhcyBhIGpzLWludGVyb3AgbWVtYmVyLiIpKTsKICAgIGpzSW50ZXJvcE1lbWJlcnNbZWxlbWVudF0gPSBuYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAgTmF0aXZlQmFzaWNEYXRhIGNsb3NlKEVsZW1lbnRFbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgX2Nsb3NlZCA9IHRydWU7CiAgICByZXR1cm4gbmV3IE5hdGl2ZUJhc2ljRGF0YUltcGwoCiAgICAgICAgZW52aXJvbm1lbnQsCiAgICAgICAgZmFsc2UsCiAgICAgICAgbmF0aXZlQ2xhc3NUYWdJbmZvLAogICAgICAgIGpzSW50ZXJvcExpYnJhcmllcywKICAgICAgICBqc0ludGVyb3BDbGFzc2VzLAogICAgICAgIGFub255bW91c0pzSW50ZXJvcENsYXNzZXMsCiAgICAgICAganNJbnRlcm9wTWVtYmVycyk7CiAgfQoKICB2b2lkIHJlb3BlbkZvclRlc3RpbmcoKSB7CiAgICBfY2xvc2VkID0gZmFsc2U7CiAgfQp9CgpjbGFzcyBOYXRpdmVCYXNpY0RhdGFJbXBsIGltcGxlbWVudHMgTmF0aXZlQmFzaWNEYXRhIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW05hdGl2ZUJhc2ljRGF0YV0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICduYXRpdmUtYmFzaWMtZGF0YSc7CgogIGZpbmFsIEVsZW1lbnRFbnZpcm9ubWVudCBfZW52OwoKICBib29sIF9pc0FsbG93SW50ZXJvcFVzZWQ7CgogIC8vLyBUYWcgaW5mbyBmb3IgbmF0aXZlIEphdmFTY3JpcHQgY2xhc3NlcyBuYW1lcy4gU2VlCiAgLy8vIFtzZXROYXRpdmVDbGFzc1RhZ0luZm9dLgogIGZpbmFsIE1hcDxDbGFzc0VudGl0eSwgTmF0aXZlQ2xhc3NUYWc+IG5hdGl2ZUNsYXNzVGFnSW5mbzsKCiAgLy8vIFRoZSBKYXZhU2NyaXB0IGxpYnJhcmllcyBpbXBsZW1lbnRlZCB2aWEgdHlwZWQgSmF2YVNjcmlwdCBpbnRlcm9wLgogIGZpbmFsIE1hcDxMaWJyYXJ5RW50aXR5LCBTdHJpbmc+IGpzSW50ZXJvcExpYnJhcmllczsKCiAgLy8vIFRoZSBKYXZhU2NyaXB0IGNsYXNzZXMgaW1wbGVtZW50ZWQgdmlhIHR5cGVkIEphdmFTY3JpcHQgaW50ZXJvcC4KICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIFN0cmluZz4ganNJbnRlcm9wQ2xhc3NlczsKCiAgLy8vIEphdmFTY3JpcHQgaW50ZXJvcCBjbGFzc2VzIGFubm90YXRlZCB3aXRoIGBAYW5vbnltb3VzYAogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gYW5vbnltb3VzSnNJbnRlcm9wQ2xhc3NlczsKCiAgLy8vIFRoZSBKYXZhU2NyaXB0IG1lbWJlcnMgaW1wbGVtZW50ZWQgdmlhIHR5cGVkIEphdmFTY3JpcHQgaW50ZXJvcC4KICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBTdHJpbmc+IGpzSW50ZXJvcE1lbWJlcnM7CgogIE5hdGl2ZUJhc2ljRGF0YUltcGwoCiAgICAgIHRoaXMuX2VudiwKICAgICAgdGhpcy5faXNBbGxvd0ludGVyb3BVc2VkLAogICAgICB0aGlzLm5hdGl2ZUNsYXNzVGFnSW5mbywKICAgICAgdGhpcy5qc0ludGVyb3BMaWJyYXJpZXMsCiAgICAgIHRoaXMuanNJbnRlcm9wQ2xhc3NlcywKICAgICAgdGhpcy5hbm9ueW1vdXNKc0ludGVyb3BDbGFzc2VzLAogICAgICB0aGlzLmpzSW50ZXJvcE1lbWJlcnMpOwoKICBmYWN0b3J5IE5hdGl2ZUJhc2ljRGF0YUltcGwuZnJvbUlyKAogICAgICBLZXJuZWxUb0VsZW1lbnRNYXAgbWFwLCBJckFubm90YXRpb25EYXRhIGRhdGEpIHsKICAgIEVsZW1lbnRFbnZpcm9ubWVudCBlbnYgPSBtYXAuZWxlbWVudEVudmlyb25tZW50OwogICAgTWFwPENsYXNzRW50aXR5LCBOYXRpdmVDbGFzc1RhZz4gbmF0aXZlQ2xhc3NUYWdJbmZvID0ge307CiAgICBNYXA8TGlicmFyeUVudGl0eSwgU3RyaW5nPiBqc0ludGVyb3BMaWJyYXJpZXMgPSB7fTsKICAgIE1hcDxDbGFzc0VudGl0eSwgU3RyaW5nPiBqc0ludGVyb3BDbGFzc2VzID0ge307CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGFub255bW91c0pzSW50ZXJvcENsYXNzZXMgPSB7fTsKICAgIE1hcDxNZW1iZXJFbnRpdHksIFN0cmluZz4ganNJbnRlcm9wTWVtYmVycyA9IHt9OwoKICAgIGRhdGEuZm9yRWFjaE5hdGl2ZUNsYXNzKChpci5DbGFzcyBub2RlLCBTdHJpbmcgdGV4dCkgewogICAgICBuYXRpdmVDbGFzc1RhZ0luZm9bbWFwLmdldENsYXNzKG5vZGUpXSA9IG5ldyBOYXRpdmVDbGFzc1RhZyh0ZXh0KTsKICAgIH0pOwogICAgZGF0YS5mb3JFYWNoSnNJbnRlcm9wTGlicmFyeSgoaXIuTGlicmFyeSBub2RlLCBTdHJpbmcgbmFtZSkgewogICAgICBqc0ludGVyb3BMaWJyYXJpZXNbZW52Lmxvb2t1cExpYnJhcnkobm9kZS5pbXBvcnRVcmksIHJlcXVpcmVkOiB0cnVlKV0gPQogICAgICAgICAgbmFtZTsKICAgIH0pOwogICAgZGF0YS5mb3JFYWNoSnNJbnRlcm9wQ2xhc3MoKGlyLkNsYXNzIG5vZGUsIFN0cmluZyBuYW1lLAogICAgICAgIHtib29sIGlzQW5vbnltb3VzfSkgewogICAgICBDbGFzc0VudGl0eSBjbHMgPSBtYXAuZ2V0Q2xhc3Mobm9kZSk7CiAgICAgIGpzSW50ZXJvcENsYXNzZXNbY2xzXSA9IG5hbWU7CiAgICAgIGlmIChpc0Fub255bW91cykgewogICAgICAgIGFub255bW91c0pzSW50ZXJvcENsYXNzZXMuYWRkKGNscyk7CiAgICAgIH0KICAgIH0pOwogICAgZGF0YS5mb3JFYWNoSnNJbnRlcm9wTWVtYmVyKChpci5NZW1iZXIgbm9kZSwgU3RyaW5nIG5hbWUpIHsKICAgICAganNJbnRlcm9wTWVtYmVyc1ttYXAuZ2V0TWVtYmVyKG5vZGUpXSA9IG5hbWU7CiAgICB9KTsKCiAgICByZXR1cm4gbmV3IE5hdGl2ZUJhc2ljRGF0YUltcGwoCiAgICAgICAgZW52LAogICAgICAgIGZhbHNlLAogICAgICAgIG5hdGl2ZUNsYXNzVGFnSW5mbywKICAgICAgICBqc0ludGVyb3BMaWJyYXJpZXMsCiAgICAgICAganNJbnRlcm9wQ2xhc3NlcywKICAgICAgICBhbm9ueW1vdXNKc0ludGVyb3BDbGFzc2VzLAogICAgICAgIGpzSW50ZXJvcE1lbWJlcnMpOwogIH0KCiAgZmFjdG9yeSBOYXRpdmVCYXNpY0RhdGFJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIEVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgYm9vbCBpc0FsbG93SW50ZXJvcFVzZWQgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIE1hcDxDbGFzc0VudGl0eSwgTmF0aXZlQ2xhc3NUYWc+IG5hdGl2ZUNsYXNzVGFnSW5mbyA9CiAgICAgICAgc291cmNlLnJlYWRDbGFzc01hcCgoKSB7CiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lcyA9IHNvdXJjZS5yZWFkU3RyaW5ncygpOwogICAgICBib29sIGlzTm9uTGVhZiA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgICByZXR1cm4gbmV3IE5hdGl2ZUNsYXNzVGFnLmludGVybmFsKG5hbWVzLCBpc05vbkxlYWYpOwogICAgfSk7CiAgICBNYXA8TGlicmFyeUVudGl0eSwgU3RyaW5nPiBqc0ludGVyb3BMaWJyYXJpZXMgPQogICAgICAgIHNvdXJjZS5yZWFkTGlicmFyeU1hcChzb3VyY2UucmVhZFN0cmluZyk7CiAgICBNYXA8Q2xhc3NFbnRpdHksIFN0cmluZz4ganNJbnRlcm9wQ2xhc3NlcyA9CiAgICAgICAgc291cmNlLnJlYWRDbGFzc01hcChzb3VyY2UucmVhZFN0cmluZyk7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGFub255bW91c0pzSW50ZXJvcENsYXNzZXMgPSBzb3VyY2UucmVhZENsYXNzZXMoKS50b1NldCgpOwogICAgTWFwPE1lbWJlckVudGl0eSwgU3RyaW5nPiBqc0ludGVyb3BNZW1iZXJzID0KICAgICAgICBzb3VyY2UucmVhZE1lbWJlck1hcCgoTWVtYmVyRW50aXR5IG1lbWJlcikgPT4gc291cmNlLnJlYWRTdHJpbmcoKSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IE5hdGl2ZUJhc2ljRGF0YUltcGwoCiAgICAgICAgZWxlbWVudEVudmlyb25tZW50LAogICAgICAgIGlzQWxsb3dJbnRlcm9wVXNlZCwKICAgICAgICBuYXRpdmVDbGFzc1RhZ0luZm8sCiAgICAgICAganNJbnRlcm9wTGlicmFyaWVzLAogICAgICAgIGpzSW50ZXJvcENsYXNzZXMsCiAgICAgICAgYW5vbnltb3VzSnNJbnRlcm9wQ2xhc3NlcywKICAgICAgICBqc0ludGVyb3BNZW1iZXJzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVCb29sKGlzQWxsb3dJbnRlcm9wVXNlZCk7CiAgICBzaW5rLndyaXRlQ2xhc3NNYXAobmF0aXZlQ2xhc3NUYWdJbmZvLCAoTmF0aXZlQ2xhc3NUYWcgdGFnKSB7CiAgICAgIHNpbmsud3JpdGVTdHJpbmdzKHRhZy5uYW1lcyk7CiAgICAgIHNpbmsud3JpdGVCb29sKHRhZy5pc05vbkxlYWYpOwogICAgfSk7CiAgICBzaW5rLndyaXRlTGlicmFyeU1hcChqc0ludGVyb3BMaWJyYXJpZXMsIHNpbmsud3JpdGVTdHJpbmcpOwogICAgc2luay53cml0ZUNsYXNzTWFwKGpzSW50ZXJvcENsYXNzZXMsIHNpbmsud3JpdGVTdHJpbmcpOwogICAgc2luay53cml0ZUNsYXNzZXMoYW5vbnltb3VzSnNJbnRlcm9wQ2xhc3Nlcyk7CiAgICBzaW5rLndyaXRlTWVtYmVyTWFwKGpzSW50ZXJvcE1lbWJlcnMsCiAgICAgICAgKE1lbWJlckVudGl0eSBtZW1iZXIsIFN0cmluZyBuYW1lKSA9PiBzaW5rLndyaXRlU3RyaW5nKG5hbWUpKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0FsbG93SW50ZXJvcFVzZWQgPT4gX2lzQWxsb3dJbnRlcm9wVXNlZDsKCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckFsbG93SW50ZXJvcCgpIHsKICAgIF9pc0FsbG93SW50ZXJvcFVzZWQgPSB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc05hdGl2ZUNsYXNzKENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgIGlmIChpc0pzSW50ZXJvcENsYXNzKGVsZW1lbnQpKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBuYXRpdmVDbGFzc1RhZ0luZm8uY29udGFpbnNLZXkoZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PFN0cmluZz4gZ2V0TmF0aXZlVGFnc09mQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gbmF0aXZlQ2xhc3NUYWdJbmZvW2Nsc10ubmFtZXM7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc05hdGl2ZVRhZ3NGb3JjZWROb25MZWFmKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIG5hdGl2ZUNsYXNzVGFnSW5mb1tjbHNdLmlzTm9uTGVhZjsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzSnNJbnRlcm9wVXNlZCA9PgogICAgICBqc0ludGVyb3BMaWJyYXJpZXMuaXNOb3RFbXB0eSB8fCBqc0ludGVyb3BDbGFzc2VzLmlzTm90RW1wdHk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNKc0ludGVyb3BMaWJyYXJ5KExpYnJhcnlFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIGpzSW50ZXJvcExpYnJhcmllcy5jb250YWluc0tleShlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNKc0ludGVyb3BDbGFzcyhDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4ganNJbnRlcm9wQ2xhc3Nlcy5jb250YWluc0tleShlbGVtZW50KTsKICB9CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbZWxlbWVudF0gaXMgZXhwbGljaXRseSBtYXJrZWQgYXMgcGFydCBvZiBKc0ludGVyb3AuCiAgYm9vbCBfaXNKc0ludGVyb3BNZW1iZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBqc0ludGVyb3BNZW1iZXJzLmNvbnRhaW5zS2V5KGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0pzSW50ZXJvcE1lbWJlcihNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU2hhcmUgdGhpcyB3aXRoIFtOYXRpdmVEYXRhSW1wbC5pc0pzSW50ZXJvcE1lbWJlcl0uCiAgICBpZiAoZWxlbWVudC5pc0Z1bmN0aW9uIHx8CiAgICAgICAgZWxlbWVudC5pc0NvbnN0cnVjdG9yIHx8CiAgICAgICAgZWxlbWVudC5pc0dldHRlciB8fAogICAgICAgIGVsZW1lbnQuaXNTZXR0ZXIpIHsKICAgICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24gPSBlbGVtZW50OwogICAgICBpZiAoIWZ1bmN0aW9uLmlzRXh0ZXJuYWwpIHJldHVybiBmYWxzZTsKCiAgICAgIGlmIChfaXNKc0ludGVyb3BNZW1iZXIoZnVuY3Rpb24pKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGZ1bmN0aW9uLmVuY2xvc2luZ0NsYXNzICE9IG51bGwpIHsKICAgICAgICByZXR1cm4gaXNKc0ludGVyb3BDbGFzcyhmdW5jdGlvbi5lbmNsb3NpbmdDbGFzcyk7CiAgICAgIH0KICAgICAgaWYgKGZ1bmN0aW9uLmlzVG9wTGV2ZWwpIHsKICAgICAgICByZXR1cm4gaXNKc0ludGVyb3BMaWJyYXJ5KGZ1bmN0aW9uLmxpYnJhcnkpOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfaXNKc0ludGVyb3BNZW1iZXIoZWxlbWVudCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzTmF0aXZlT3JFeHRlbmRzTmF0aXZlKENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgIGlmIChlbGVtZW50ID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIGlmIChpc05hdGl2ZUNsYXNzKGVsZW1lbnQpIHx8IGlzSnNJbnRlcm9wQ2xhc3MoZWxlbWVudCkpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gaXNOYXRpdmVPckV4dGVuZHNOYXRpdmUoX2Vudi5nZXRTdXBlckNsYXNzKGVsZW1lbnQpKTsKICB9Cn0KCmNsYXNzIE5hdGl2ZURhdGFCdWlsZGVySW1wbCBpbXBsZW1lbnRzIE5hdGl2ZURhdGFCdWlsZGVyIHsKICBmaW5hbCBOYXRpdmVCYXNpY0RhdGFJbXBsIF9uYXRpdmVCYXNpY0RhdGE7CgogIC8vLyBUaGUgSmF2YVNjcmlwdCBuYW1lcyBmb3IgbmF0aXZlIEphdmFTY3JpcHQgZWxlbWVudHMgaW1wbGVtZW50ZWQuCiAgTWFwPE1lbWJlckVudGl0eSwgU3RyaW5nPiBuYXRpdmVNZW1iZXJOYW1lID0gPE1lbWJlckVudGl0eSwgU3RyaW5nPnt9OwoKICAvLy8gQ2FjaGUgZm9yIFtOYXRpdmVCZWhhdmlvcl1zIGZvciBjYWxsaW5nIG5hdGl2ZSBtZXRob2RzLgogIE1hcDxGdW5jdGlvbkVudGl0eSwgTmF0aXZlQmVoYXZpb3I+IG5hdGl2ZU1ldGhvZEJlaGF2aW9yID0KICAgICAgPEZ1bmN0aW9uRW50aXR5LCBOYXRpdmVCZWhhdmlvcj57fTsKCiAgLy8vIENhY2hlIGZvciBbTmF0aXZlQmVoYXZpb3JdcyBmb3IgcmVhZGluZyBmcm9tIG5hdGl2ZSBmaWVsZHMuCiAgTWFwPE1lbWJlckVudGl0eSwgTmF0aXZlQmVoYXZpb3I+IG5hdGl2ZUZpZWxkTG9hZEJlaGF2aW9yID0KICAgICAgPEZpZWxkRW50aXR5LCBOYXRpdmVCZWhhdmlvcj57fTsKCiAgLy8vIENhY2hlIGZvciBbTmF0aXZlQmVoYXZpb3JdcyBmb3Igd3JpdGluZyB0byBuYXRpdmUgZmllbGRzLgogIE1hcDxNZW1iZXJFbnRpdHksIE5hdGl2ZUJlaGF2aW9yPiBuYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3IgPQogICAgICA8RmllbGRFbnRpdHksIE5hdGl2ZUJlaGF2aW9yPnt9OwoKICBOYXRpdmVEYXRhQnVpbGRlckltcGwodGhpcy5fbmF0aXZlQmFzaWNEYXRhKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXROYXRpdmVNZW1iZXJOYW1lKE1lbWJlckVudGl0eSBlbGVtZW50LCBTdHJpbmcgbmFtZSkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQXZvaWQgc2V0dGluZyB0aGlzIG1vcmUgdGhhbiBvbmNlLiBUaGUgZW5xdWV1ZXIKICAgIC8vIG1pZ2h0IGVucXVldWUgW2VsZW1lbnRdIHNldmVyYWwgdGltZXMgKGJlZm9yZSBwcm9jZXNzaW5nIGl0KSBhbmQgY29tcHV0ZXMKICAgIC8vIG5hbWUgb24gZWFjaCBjYWxsIHRvIGBpbnRlcm5hbEFkZFRvV29ya0xpc3RgLgogICAgYXNzZXJ0KAogICAgICAgIG5hdGl2ZU1lbWJlck5hbWVbZWxlbWVudF0gPT0gbnVsbCB8fCBuYXRpdmVNZW1iZXJOYW1lW2VsZW1lbnRdID09IG5hbWUsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICJOYXRpdmUgbWVtYmVyIG5hbWUgc2V0IGluY29uc2lzdGVudGx5IG9uICRlbGVtZW50OiAiCiAgICAgICAgICAgICJFeGlzdGluZyBuYW1lICcke25hdGl2ZU1lbWJlck5hbWVbZWxlbWVudF19JywgIgogICAgICAgICAgICAibmV3IG5hbWUgJyRuYW1lJy4iKSk7CiAgICBuYXRpdmVNZW1iZXJOYW1lW2VsZW1lbnRdID0gbmFtZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgc2V0TmF0aXZlTWV0aG9kQmVoYXZpb3IoRnVuY3Rpb25FbnRpdHkgbWV0aG9kLCBOYXRpdmVCZWhhdmlvciBiZWhhdmlvcikgewogICAgbmF0aXZlTWV0aG9kQmVoYXZpb3JbbWV0aG9kXSA9IGJlaGF2aW9yOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXROYXRpdmVGaWVsZExvYWRCZWhhdmlvcihGaWVsZEVudGl0eSBmaWVsZCwgTmF0aXZlQmVoYXZpb3IgYmVoYXZpb3IpIHsKICAgIG5hdGl2ZUZpZWxkTG9hZEJlaGF2aW9yW2ZpZWxkXSA9IGJlaGF2aW9yOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXROYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3IoRmllbGRFbnRpdHkgZmllbGQsIE5hdGl2ZUJlaGF2aW9yIGJlaGF2aW9yKSB7CiAgICBuYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3JbZmllbGRdID0gYmVoYXZpb3I7CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVEYXRhIGNsb3NlKCkgPT4gbmV3IE5hdGl2ZURhdGFJbXBsKF9uYXRpdmVCYXNpY0RhdGEsIG5hdGl2ZU1lbWJlck5hbWUsCiAgICAgIG5hdGl2ZU1ldGhvZEJlaGF2aW9yLCBuYXRpdmVGaWVsZExvYWRCZWhhdmlvciwgbmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yKTsKfQoKLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIGZpZWxkcyB0aGF0IG92ZXJsYXAgd2l0aCBbTmF0aXZlQmFzaWNEYXRhXSwgbGlrZQovLyBbYW5vbnltb3VzSnNJbnRlcm9wQ2xhc3Nlc10uCmNsYXNzIE5hdGl2ZURhdGFJbXBsIGltcGxlbWVudHMgTmF0aXZlRGF0YSwgTmF0aXZlQmFzaWNEYXRhSW1wbCB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtOYXRpdmVEYXRhXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ25hdGl2ZS1kYXRhJzsKCiAgLy8vIFByZWZpeCB1c2VkIHRvIGVzY2FwZSBKUyBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgRGFydCBuYW1lcwogIC8vLyB3aGVuIHVzaW5nIEpTSW50ZXJvcC4KICBzdGF0aWMgY29uc3QgU3RyaW5nIF9qc0ludGVyb3BFc2NhcGVQcmVmaXggPSByJ0pTJCc7CgogIGZpbmFsIE5hdGl2ZUJhc2ljRGF0YUltcGwgX25hdGl2ZUJhc2ljRGF0YTsKCiAgLy8vIFRoZSBKYXZhU2NyaXB0IG5hbWVzIGZvciBuYXRpdmUgSmF2YVNjcmlwdCBlbGVtZW50cyBpbXBsZW1lbnRlZC4KICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBTdHJpbmc+IG5hdGl2ZU1lbWJlck5hbWU7CgogIC8vLyBDYWNoZSBmb3IgW05hdGl2ZUJlaGF2aW9yXXMgZm9yIGNhbGxpbmcgbmF0aXZlIG1ldGhvZHMuCiAgZmluYWwgTWFwPEZ1bmN0aW9uRW50aXR5LCBOYXRpdmVCZWhhdmlvcj4gbmF0aXZlTWV0aG9kQmVoYXZpb3I7CgogIC8vLyBDYWNoZSBmb3IgW05hdGl2ZUJlaGF2aW9yXXMgZm9yIHJlYWRpbmcgZnJvbSBuYXRpdmUgZmllbGRzLgogIGZpbmFsIE1hcDxNZW1iZXJFbnRpdHksIE5hdGl2ZUJlaGF2aW9yPiBuYXRpdmVGaWVsZExvYWRCZWhhdmlvcjsKCiAgLy8vIENhY2hlIGZvciBbTmF0aXZlQmVoYXZpb3JdcyBmb3Igd3JpdGluZyB0byBuYXRpdmUgZmllbGRzLgogIGZpbmFsIE1hcDxNZW1iZXJFbnRpdHksIE5hdGl2ZUJlaGF2aW9yPiBuYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3I7CgogIE5hdGl2ZURhdGFJbXBsKAogICAgICB0aGlzLl9uYXRpdmVCYXNpY0RhdGEsCiAgICAgIHRoaXMubmF0aXZlTWVtYmVyTmFtZSwKICAgICAgdGhpcy5uYXRpdmVNZXRob2RCZWhhdmlvciwKICAgICAgdGhpcy5uYXRpdmVGaWVsZExvYWRCZWhhdmlvciwKICAgICAgdGhpcy5uYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3IpOwoKICBmYWN0b3J5IE5hdGl2ZURhdGFJbXBsLmZyb21JcihLZXJuZWxUb0VsZW1lbnRNYXAgbWFwLCBJckFubm90YXRpb25EYXRhIGRhdGEpIHsKICAgIE5hdGl2ZUJhc2ljRGF0YUltcGwgbmF0aXZlQmFzaWNEYXRhID0KICAgICAgICBuZXcgTmF0aXZlQmFzaWNEYXRhSW1wbC5mcm9tSXIobWFwLCBkYXRhKTsKICAgIE1hcDxNZW1iZXJFbnRpdHksIFN0cmluZz4gbmF0aXZlTWVtYmVyTmFtZSA9IHt9OwogICAgTWFwPEZ1bmN0aW9uRW50aXR5LCBOYXRpdmVCZWhhdmlvcj4gbmF0aXZlTWV0aG9kQmVoYXZpb3IgPSB7fTsKICAgIE1hcDxNZW1iZXJFbnRpdHksIE5hdGl2ZUJlaGF2aW9yPiBuYXRpdmVGaWVsZExvYWRCZWhhdmlvciA9IHt9OwogICAgTWFwPE1lbWJlckVudGl0eSwgTmF0aXZlQmVoYXZpb3I+IG5hdGl2ZUZpZWxkU3RvcmVCZWhhdmlvciA9IHt9OwoKICAgIGRhdGEuZm9yRWFjaE5hdGl2ZU1ldGhvZERhdGEoKGlyLk1lbWJlciBub2RlLAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIEl0ZXJhYmxlPFN0cmluZz4gY3JlYXRlc0Fubm90YXRpb25zLAogICAgICAgIEl0ZXJhYmxlPFN0cmluZz4gcmV0dXJuc0Fubm90YXRpb25zKSB7CiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBtYXAuZ2V0TWVtYmVyKG5vZGUpOwogICAgICBuYXRpdmVNZW1iZXJOYW1lW21lbWJlcl0gPSBuYW1lOwogICAgICBib29sIGlzSnNJbnRlcm9wID0gbmF0aXZlQmFzaWNEYXRhLmlzSnNJbnRlcm9wTWVtYmVyKG1lbWJlcik7CiAgICAgIG5hdGl2ZU1ldGhvZEJlaGF2aW9yW21lbWJlcl0gPSBtYXAuZ2V0TmF0aXZlQmVoYXZpb3JGb3JNZXRob2QoCiAgICAgICAgICBub2RlLCBjcmVhdGVzQW5ub3RhdGlvbnMsIHJldHVybnNBbm5vdGF0aW9ucywKICAgICAgICAgIGlzSnNJbnRlcm9wOiBpc0pzSW50ZXJvcCk7CiAgICB9KTsKCiAgICBkYXRhLmZvckVhY2hOYXRpdmVGaWVsZERhdGEoKGlyLk1lbWJlciBub2RlLAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIEl0ZXJhYmxlPFN0cmluZz4gY3JlYXRlc0Fubm90YXRpb25zLAogICAgICAgIEl0ZXJhYmxlPFN0cmluZz4gcmV0dXJuc0Fubm90YXRpb25zKSB7CiAgICAgIEZpZWxkRW50aXR5IGZpZWxkID0gbWFwLmdldE1lbWJlcihub2RlKTsKICAgICAgbmF0aXZlTWVtYmVyTmFtZVtmaWVsZF0gPSBuYW1lOwogICAgICBib29sIGlzSnNJbnRlcm9wID0gbmF0aXZlQmFzaWNEYXRhLmlzSnNJbnRlcm9wTWVtYmVyKGZpZWxkKTsKICAgICAgbmF0aXZlRmllbGRMb2FkQmVoYXZpb3JbZmllbGRdID0gbWFwLmdldE5hdGl2ZUJlaGF2aW9yRm9yRmllbGRMb2FkKAogICAgICAgICAgbm9kZSwgY3JlYXRlc0Fubm90YXRpb25zLCByZXR1cm5zQW5ub3RhdGlvbnMsCiAgICAgICAgICBpc0pzSW50ZXJvcDogaXNKc0ludGVyb3ApOwogICAgICBuYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3JbZmllbGRdID0KICAgICAgICAgIG1hcC5nZXROYXRpdmVCZWhhdmlvckZvckZpZWxkU3RvcmUobm9kZSk7CiAgICB9KTsKCiAgICByZXR1cm4gbmV3IE5hdGl2ZURhdGFJbXBsKAogICAgICAgIG5hdGl2ZUJhc2ljRGF0YSwKICAgICAgICBuYXRpdmVNZW1iZXJOYW1lLAogICAgICAgIG5hdGl2ZU1ldGhvZEJlaGF2aW9yLAogICAgICAgIG5hdGl2ZUZpZWxkTG9hZEJlaGF2aW9yLAogICAgICAgIG5hdGl2ZUZpZWxkU3RvcmVCZWhhdmlvcik7CiAgfQoKICBmYWN0b3J5IE5hdGl2ZURhdGFJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIEVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgTmF0aXZlQmFzaWNEYXRhIG5hdGl2ZUJhc2ljRGF0YSA9CiAgICAgICAgbmV3IE5hdGl2ZUJhc2ljRGF0YS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlLCBlbGVtZW50RW52aXJvbm1lbnQpOwogICAgTWFwPE1lbWJlckVudGl0eSwgU3RyaW5nPiBuYXRpdmVNZW1iZXJOYW1lID0KICAgICAgICBzb3VyY2UucmVhZE1lbWJlck1hcCgoTWVtYmVyRW50aXR5IG1lbWJlcikgPT4gc291cmNlLnJlYWRTdHJpbmcoKSk7CiAgICBNYXA8RnVuY3Rpb25FbnRpdHksIE5hdGl2ZUJlaGF2aW9yPiBuYXRpdmVNZXRob2RCZWhhdmlvciA9CiAgICAgICAgc291cmNlLnJlYWRNZW1iZXJNYXAoKE1lbWJlckVudGl0eSBtZW1iZXIpID0+CiAgICAgICAgICAgIG5ldyBOYXRpdmVCZWhhdmlvci5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKSk7CiAgICBNYXA8TWVtYmVyRW50aXR5LCBOYXRpdmVCZWhhdmlvcj4gbmF0aXZlRmllbGRMb2FkQmVoYXZpb3IgPQogICAgICAgIHNvdXJjZS5yZWFkTWVtYmVyTWFwKChNZW1iZXJFbnRpdHkgbWVtYmVyKSA9PgogICAgICAgICAgICBuZXcgTmF0aXZlQmVoYXZpb3IucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSkpOwogICAgTWFwPE1lbWJlckVudGl0eSwgTmF0aXZlQmVoYXZpb3I+IG5hdGl2ZUZpZWxkU3RvcmVCZWhhdmlvciA9CiAgICAgICAgc291cmNlLnJlYWRNZW1iZXJNYXAoKE1lbWJlckVudGl0eSBtZW1iZXIpID0+CiAgICAgICAgICAgIG5ldyBOYXRpdmVCZWhhdmlvci5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IE5hdGl2ZURhdGFJbXBsKAogICAgICAgIG5hdGl2ZUJhc2ljRGF0YSwKICAgICAgICBuYXRpdmVNZW1iZXJOYW1lLAogICAgICAgIG5hdGl2ZU1ldGhvZEJlaGF2aW9yLAogICAgICAgIG5hdGl2ZUZpZWxkTG9hZEJlaGF2aW9yLAogICAgICAgIG5hdGl2ZUZpZWxkU3RvcmVCZWhhdmlvcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBfbmF0aXZlQmFzaWNEYXRhLndyaXRlVG9EYXRhU2luayhzaW5rKTsKCiAgICBzaW5rLndyaXRlTWVtYmVyTWFwKG5hdGl2ZU1lbWJlck5hbWUsCiAgICAgICAgKE1lbWJlckVudGl0eSBtZW1iZXIsIFN0cmluZyBuYW1lKSA9PiBzaW5rLndyaXRlU3RyaW5nKG5hbWUpKTsKCiAgICBzaW5rLndyaXRlTWVtYmVyTWFwKG5hdGl2ZU1ldGhvZEJlaGF2aW9yLAogICAgICAgIChNZW1iZXJFbnRpdHkgbWVtYmVyLCBOYXRpdmVCZWhhdmlvciBiZWhhdmlvcikgewogICAgICBiZWhhdmlvci53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICB9KTsKCiAgICBzaW5rLndyaXRlTWVtYmVyTWFwKG5hdGl2ZUZpZWxkTG9hZEJlaGF2aW9yLAogICAgICAgIChNZW1iZXJFbnRpdHkgbWVtYmVyLCBOYXRpdmVCZWhhdmlvciBiZWhhdmlvcikgewogICAgICBiZWhhdmlvci53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICB9KTsKICAgIHNpbmsud3JpdGVNZW1iZXJNYXAobmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yLAogICAgICAgIChNZW1iZXJFbnRpdHkgbWVtYmVyLCBOYXRpdmVCZWhhdmlvciBiZWhhdmlvcikgewogICAgICBiZWhhdmlvci53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICB9KTsKCiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgX2lzQWxsb3dJbnRlcm9wVXNlZCA9PiBfbmF0aXZlQmFzaWNEYXRhLl9pc0FsbG93SW50ZXJvcFVzZWQ7CgogIEBvdmVycmlkZQogIHNldCBfaXNBbGxvd0ludGVyb3BVc2VkKGJvb2wgdmFsdWUpID0+CiAgICAgIF9uYXRpdmVCYXNpY0RhdGEuX2lzQWxsb3dJbnRlcm9wVXNlZCA9IHZhbHVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0FsbG93SW50ZXJvcFVzZWQgPT4gX25hdGl2ZUJhc2ljRGF0YS5pc0FsbG93SW50ZXJvcFVzZWQ7CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJBbGxvd0ludGVyb3AoKSA9PiBfbmF0aXZlQmFzaWNEYXRhLnJlZ2lzdGVyQWxsb3dJbnRlcm9wKCk7CgogIEBvdmVycmlkZQogIE1hcDxMaWJyYXJ5RW50aXR5LCBTdHJpbmc+IGdldCBqc0ludGVyb3BMaWJyYXJpZXMgPT4KICAgICAgX25hdGl2ZUJhc2ljRGF0YS5qc0ludGVyb3BMaWJyYXJpZXM7CgogIEBvdmVycmlkZQogIFNldDxDbGFzc0VudGl0eT4gZ2V0IGFub255bW91c0pzSW50ZXJvcENsYXNzZXMgPT4KICAgICAgX25hdGl2ZUJhc2ljRGF0YS5hbm9ueW1vdXNKc0ludGVyb3BDbGFzc2VzOwoKICBAb3ZlcnJpZGUKICBNYXA8Q2xhc3NFbnRpdHksIFN0cmluZz4gZ2V0IGpzSW50ZXJvcENsYXNzZXMgPT4KICAgICAgX25hdGl2ZUJhc2ljRGF0YS5qc0ludGVyb3BDbGFzc2VzOwoKICBAb3ZlcnJpZGUKICBNYXA8TWVtYmVyRW50aXR5LCBTdHJpbmc+IGdldCBqc0ludGVyb3BNZW1iZXJzID0+CiAgICAgIF9uYXRpdmVCYXNpY0RhdGEuanNJbnRlcm9wTWVtYmVyczsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Fub255bW91c0pzSW50ZXJvcENsYXNzKENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBhbm9ueW1vdXNKc0ludGVyb3BDbGFzc2VzLmNvbnRhaW5zKGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc05hdGl2ZUNsYXNzKENsYXNzRW50aXR5IGVsZW1lbnQpID0+CiAgICAgIF9uYXRpdmVCYXNpY0RhdGEuaXNOYXRpdmVDbGFzcyhlbGVtZW50KTsKCiAgQG92ZXJyaWRlCiAgTGlzdDxTdHJpbmc+IGdldE5hdGl2ZVRhZ3NPZkNsYXNzKENsYXNzRW50aXR5IGNscykgPT4KICAgICAgX25hdGl2ZUJhc2ljRGF0YS5nZXROYXRpdmVUYWdzT2ZDbGFzcyhjbHMpOwoKICBAb3ZlcnJpZGUKICBib29sIGhhc05hdGl2ZVRhZ3NGb3JjZWROb25MZWFmKENsYXNzRW50aXR5IGNscykgPT4KICAgICAgX25hdGl2ZUJhc2ljRGF0YS5oYXNOYXRpdmVUYWdzRm9yY2VkTm9uTGVhZihjbHMpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0pzSW50ZXJvcFVzZWQgPT4gX25hdGl2ZUJhc2ljRGF0YS5pc0pzSW50ZXJvcFVzZWQ7CgogIEBvdmVycmlkZQogIGJvb2wgaXNKc0ludGVyb3BMaWJyYXJ5KExpYnJhcnlFbnRpdHkgZWxlbWVudCkgPT4KICAgICAgX25hdGl2ZUJhc2ljRGF0YS5pc0pzSW50ZXJvcExpYnJhcnkoZWxlbWVudCk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNKc0ludGVyb3BDbGFzcyhDbGFzc0VudGl0eSBlbGVtZW50KSA9PgogICAgICBfbmF0aXZlQmFzaWNEYXRhLmlzSnNJbnRlcm9wQ2xhc3MoZWxlbWVudCk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNOYXRpdmVPckV4dGVuZHNOYXRpdmUoQ2xhc3NFbnRpdHkgZWxlbWVudCkgPT4KICAgICAgX25hdGl2ZUJhc2ljRGF0YS5pc05hdGl2ZU9yRXh0ZW5kc05hdGl2ZShlbGVtZW50KTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldEpzSW50ZXJvcExpYnJhcnlOYW1lKExpYnJhcnlFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIGpzSW50ZXJvcExpYnJhcmllc1tlbGVtZW50XTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXRKc0ludGVyb3BDbGFzc05hbWUoQ2xhc3NFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIGpzSW50ZXJvcENsYXNzZXNbZWxlbWVudF07CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0SnNJbnRlcm9wTWVtYmVyTmFtZShNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIGpzSW50ZXJvcE1lbWJlcnNbZWxlbWVudF07CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIF9pc0pzSW50ZXJvcE1lbWJlcihNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIGpzSW50ZXJvcE1lbWJlcnMuY29udGFpbnNLZXkoZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSnNJbnRlcm9wTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoZWxlbWVudC5pc0Z1bmN0aW9uIHx8CiAgICAgICAgZWxlbWVudC5pc0NvbnN0cnVjdG9yIHx8CiAgICAgICAgZWxlbWVudC5pc0dldHRlciB8fAogICAgICAgIGVsZW1lbnQuaXNTZXR0ZXIpIHsKICAgICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24gPSBlbGVtZW50OwogICAgICBpZiAoIWZ1bmN0aW9uLmlzRXh0ZXJuYWwpIHJldHVybiBmYWxzZTsKCiAgICAgIGlmIChfaXNKc0ludGVyb3BNZW1iZXIoZnVuY3Rpb24pKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGZ1bmN0aW9uLmVuY2xvc2luZ0NsYXNzICE9IG51bGwpIHsKICAgICAgICByZXR1cm4gaXNKc0ludGVyb3BDbGFzcyhmdW5jdGlvbi5lbmNsb3NpbmdDbGFzcyk7CiAgICAgIH0KICAgICAgaWYgKGZ1bmN0aW9uLmlzVG9wTGV2ZWwpIHsKICAgICAgICByZXR1cm4gaXNKc0ludGVyb3BMaWJyYXJ5KGZ1bmN0aW9uLmxpYnJhcnkpOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfaXNKc0ludGVyb3BNZW1iZXIoZWxlbWVudCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc0ZpeGVkQmFja2VuZE5hbWUoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBpc0pzSW50ZXJvcE1lbWJlcihlbGVtZW50KSB8fCBuYXRpdmVNZW1iZXJOYW1lLmNvbnRhaW5zS2V5KGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldEZpeGVkQmFja2VuZE5hbWUoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIFN0cmluZyBuYW1lID0gbmF0aXZlTWVtYmVyTmFtZVtlbGVtZW50XTsKICAgIGlmIChuYW1lID09IG51bGwgJiYgaXNKc0ludGVyb3BNZW1iZXIoZWxlbWVudCkpIHsKICAgICAgLy8gSWYgYW4gZWxlbWVudCBpc0pzSW50ZXJvcCBidXQgX2lzSnNJbnRlcm9wIGlzIGZhbHNlIHRoYXQgbWVhbnMgaXQgaXMKICAgICAgLy8gY29uc2lkZXJlZCBpbnRlcm9wIGFzIHRoZSBwYXJlbnQgY2xhc3MgaXMgaW50ZXJvcC4KICAgICAgbmFtZSA9IGVsZW1lbnQuaXNDb25zdHJ1Y3RvcgogICAgICAgICAgPyBfanNDbGFzc05hbWVIZWxwZXIoZWxlbWVudC5lbmNsb3NpbmdDbGFzcykKICAgICAgICAgIDogX2pzTWVtYmVyTmFtZUhlbHBlcihlbGVtZW50KTsKICAgICAgbmF0aXZlTWVtYmVyTmFtZVtlbGVtZW50XSA9IG5hbWU7CiAgICB9CiAgICByZXR1cm4gbmFtZTsKICB9CgogIFN0cmluZyBfanNMaWJyYXJ5TmFtZUhlbHBlcihMaWJyYXJ5RW50aXR5IGVsZW1lbnQpIHsKICAgIFN0cmluZyBqc0ludGVyb3BOYW1lID0gZ2V0SnNJbnRlcm9wTGlicmFyeU5hbWUoZWxlbWVudCk7CiAgICBpZiAoanNJbnRlcm9wTmFtZSAhPSBudWxsICYmIGpzSW50ZXJvcE5hbWUuaXNOb3RFbXB0eSkgcmV0dXJuIGpzSW50ZXJvcE5hbWU7CiAgICByZXR1cm4gJ3NlbGYnOwogIH0KCiAgU3RyaW5nIF9qc0NsYXNzTmFtZUhlbHBlcihDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICBTdHJpbmcganNJbnRlcm9wTmFtZSA9IGdldEpzSW50ZXJvcENsYXNzTmFtZShlbGVtZW50KTsKICAgIGlmIChqc0ludGVyb3BOYW1lICE9IG51bGwgJiYganNJbnRlcm9wTmFtZS5pc05vdEVtcHR5KSByZXR1cm4ganNJbnRlcm9wTmFtZTsKICAgIHJldHVybiBjb21wdXRlVW5lc2NhcGVkSlNJbnRlcm9wTmFtZShlbGVtZW50Lm5hbWUpOwogIH0KCiAgU3RyaW5nIF9qc01lbWJlck5hbWVIZWxwZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIFN0cmluZyBqc0ludGVyb3BOYW1lID0ganNJbnRlcm9wTWVtYmVyc1tlbGVtZW50XTsKICAgIGFzc2VydCgKICAgICAgICAhKGpzSW50ZXJvcE1lbWJlcnMuY29udGFpbnNLZXkoZWxlbWVudCkgJiYganNJbnRlcm9wTmFtZSA9PSBudWxsKSwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgJ01lbWJlciAkZWxlbWVudCBpcyBqcyBpbnRlcm9wIGJ1dCBqcyBpbnRlcm9wIG5hbWUgaGFzIG5vdCB5ZXQgJwogICAgICAgICAgICAnYmVlbiBjb21wdXRlZC4nKSk7CiAgICBpZiAoanNJbnRlcm9wTmFtZSAhPSBudWxsICYmIGpzSW50ZXJvcE5hbWUuaXNOb3RFbXB0eSkgewogICAgICByZXR1cm4ganNJbnRlcm9wTmFtZTsKICAgIH0KICAgIHJldHVybiBjb21wdXRlVW5lc2NhcGVkSlNJbnRlcm9wTmFtZShlbGVtZW50Lm5hbWUpOwogIH0KCiAgLy8vIFJldHVybnMgYSBKYXZhU2NyaXB0IHBhdGggc3BlY2lmeWluZyB0aGUgY29udGV4dCBpbiB3aGljaAogIC8vLyBbZWxlbWVudC5maXhlZEJhY2tlbmROYW1lXSBzaG91bGQgYmUgZXZhbHVhdGVkLiBPbmx5IGFwcGxpY2FibGUgZm9yCiAgLy8vIGVsZW1lbnRzIHVzaW5nIHR5cGVkIEphdmFTY3JpcHQgaW50ZXJvcC4KICAvLy8gRm9yIGV4YW1wbGU6IGZpeGVkQmFja2VuZFBhdGggZm9yIHRoZSBzdGF0aWMgbWV0aG9kIGNyZWF0ZU1hcCBpbiB0aGUKICAvLy8gTWFwIGNsYXNzIG9mIHRoZSBnb29nLm1hcCBKYXZhU2NyaXB0IGxpYnJhcnkgd291bGQgaGF2ZSBwYXRoCiAgLy8vICJnb29nLm1hcHMuTWFwIi4KICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0Rml4ZWRCYWNrZW5kTWV0aG9kUGF0aChGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoIWlzSnNJbnRlcm9wTWVtYmVyKGVsZW1lbnQpKSByZXR1cm4gbnVsbDsKICAgIGlmIChlbGVtZW50LmlzSW5zdGFuY2VNZW1iZXIpIHJldHVybiAndGhpcyc7CiAgICBpZiAoZWxlbWVudC5pc0NvbnN0cnVjdG9yKSB7CiAgICAgIHJldHVybiBfZml4ZWRCYWNrZW5kQ2xhc3NQYXRoKGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MpOwogICAgfQogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoX2pzTGlicmFyeU5hbWVIZWxwZXIoZWxlbWVudC5saWJyYXJ5KSk7CiAgICBpZiAoZWxlbWVudC5lbmNsb3NpbmdDbGFzcyAhPSBudWxsKSB7CiAgICAgIHNiLi53cml0ZSgnLicpLi53cml0ZShfanNDbGFzc05hbWVIZWxwZXIoZWxlbWVudC5lbmNsb3NpbmdDbGFzcykpOwogICAgfQogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICBTdHJpbmcgX2ZpeGVkQmFja2VuZENsYXNzUGF0aChDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoIWlzSnNJbnRlcm9wQ2xhc3MoZWxlbWVudCkpIHJldHVybiBudWxsOwogICAgcmV0dXJuIF9qc0xpYnJhcnlOYW1lSGVscGVyKGVsZW1lbnQubGlicmFyeSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzTmF0aXZlTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoaXNKc0ludGVyb3BNZW1iZXIoZWxlbWVudCkpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIG5hdGl2ZU1lbWJlck5hbWUuY29udGFpbnNLZXkoZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVCZWhhdmlvciBnZXROYXRpdmVNZXRob2RCZWhhdmlvcihGdW5jdGlvbkVudGl0eSBtZXRob2QpIHsKICAgIGFzc2VydCgKICAgICAgICBuYXRpdmVNZXRob2RCZWhhdmlvci5jb250YWluc0tleShtZXRob2QpLAogICAgICAgIGZhaWxlZEF0KG1ldGhvZCwKICAgICAgICAgICAgIk5vIG5hdGl2ZSBtZXRob2QgYmVoYXZpb3IgaGFzIGJlZW4gY29tcHV0ZWQgZm9yICRtZXRob2QuIikpOwogICAgcmV0dXJuIG5hdGl2ZU1ldGhvZEJlaGF2aW9yW21ldGhvZF07CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVCZWhhdmlvciBnZXROYXRpdmVGaWVsZExvYWRCZWhhdmlvcihGaWVsZEVudGl0eSBmaWVsZCkgewogICAgYXNzZXJ0KAogICAgICAgIG5hdGl2ZUZpZWxkTG9hZEJlaGF2aW9yLmNvbnRhaW5zS2V5KGZpZWxkKSwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZmllbGQsCiAgICAgICAgICAgICJObyBuYXRpdmUgZmllbGQgbG9hZCBiZWhhdmlvciBoYXMgYmVlbiAiCiAgICAgICAgICAgICJjb21wdXRlZCBmb3IgJGZpZWxkLiIpKTsKICAgIHJldHVybiBuYXRpdmVGaWVsZExvYWRCZWhhdmlvcltmaWVsZF07CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVCZWhhdmlvciBnZXROYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3IoRmllbGRFbnRpdHkgZmllbGQpIHsKICAgIGFzc2VydCgKICAgICAgICBuYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3IuY29udGFpbnNLZXkoZmllbGQpLAogICAgICAgIGZhaWxlZEF0KGZpZWxkLAogICAgICAgICAgICAiTm8gbmF0aXZlIGZpZWxkIHN0b3JlIGJlaGF2aW9yIGhhcyBiZWVuIGNvbXB1dGVkIGZvciAkZmllbGQuIikpOwogICAgcmV0dXJuIG5hdGl2ZUZpZWxkU3RvcmVCZWhhdmlvcltmaWVsZF07CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgY29tcHV0ZVVuZXNjYXBlZEpTSW50ZXJvcE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgIHJldHVybiBuYW1lLnN0YXJ0c1dpdGgoX2pzSW50ZXJvcEVzY2FwZVByZWZpeCkKICAgICAgICA/IG5hbWUuc3Vic3RyaW5nKF9qc0ludGVyb3BFc2NhcGVQcmVmaXgubGVuZ3RoKQogICAgICAgIDogbmFtZTsKICB9CgogIEBvdmVycmlkZQogIE1hcDxDbGFzc0VudGl0eSwgTmF0aXZlQ2xhc3NUYWc+IGdldCBuYXRpdmVDbGFzc1RhZ0luZm8gPT4KICAgICAgX25hdGl2ZUJhc2ljRGF0YS5uYXRpdmVDbGFzc1RhZ0luZm87CgogIEBvdmVycmlkZQogIEVsZW1lbnRFbnZpcm9ubWVudCBnZXQgX2VudiA9PiBfbmF0aXZlQmFzaWNEYXRhLl9lbnY7Cn0KCmNsYXNzIE5hdGl2ZUNsYXNzVGFnIHsKICBmaW5hbCBMaXN0PFN0cmluZz4gbmFtZXM7CiAgZmluYWwgYm9vbCBpc05vbkxlYWY7CgogIGZhY3RvcnkgTmF0aXZlQ2xhc3NUYWcoU3RyaW5nIHRhZ1RleHQpIHsKICAgIExpc3Q8U3RyaW5nPiB0YWdzID0gdGFnVGV4dC5zcGxpdCgnLCcpOwogICAgTGlzdDxTdHJpbmc+IG5hbWVzID0gdGFncy53aGVyZSgocykgPT4gIXMuc3RhcnRzV2l0aCgnIScpKS50b0xpc3QoKTsKICAgIGJvb2wgaXNOb25MZWFmID0gdGFncy5jb250YWlucygnIW5vbmxlYWYnKTsKICAgIHJldHVybiBuZXcgTmF0aXZlQ2xhc3NUYWcuaW50ZXJuYWwobmFtZXMsIGlzTm9uTGVhZik7CiAgfQoKICBOYXRpdmVDbGFzc1RhZy5pbnRlcm5hbCh0aGlzLm5hbWVzLCB0aGlzLmlzTm9uTGVhZik7CgogIFN0cmluZyBnZXQgdGV4dCB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZShuYW1lcy5qb2luKCcsJykpOwogICAgaWYgKGlzTm9uTGVhZikgewogICAgICBpZiAobmFtZXMuaXNOb3RFbXB0eSkgewogICAgICAgIHNiLndyaXRlKCcsJyk7CiAgICAgIH0KICAgICAgc2Iud3JpdGUoJyFub25sZWFmJyk7CiAgICB9CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gSGFzaGlu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OwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKCmltcG9ydCAnZWxlbWVudF9tYXAuZGFydCc7CmltcG9ydCAnZWxlbWVudHMuZGFydCcgc2hvdyBKR2VuZXJhdG9yQm9keTsKCmNsYXNzIEdsb2JhbExvY2Fsc01hcCB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtHbG9iYWxMb2NhbHNNYXBdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnZ2xvYmFsLWxvY2Fscy1tYXAnOwoKICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBLZXJuZWxUb0xvY2Fsc01hcD4gX2xvY2Fsc01hcHM7CgogIEdsb2JhbExvY2Fsc01hcCgpIDogX2xvY2Fsc01hcHMgPSB7fTsKCiAgR2xvYmFsTG9jYWxzTWFwLmludGVybmFsKHRoaXMuX2xvY2Fsc01hcHMpOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW0dsb2JhbExvY2Fsc01hcF0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBHbG9iYWxMb2NhbHNNYXAucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIE1hcDxNZW1iZXJFbnRpdHksIEtlcm5lbFRvTG9jYWxzTWFwPiBfbG9jYWxzTWFwcyA9IHt9OwogICAgaW50IG1hcENvdW50ID0gc291cmNlLnJlYWRJbnQoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWFwQ291bnQ7IGkrKykgewogICAgICBLZXJuZWxUb0xvY2Fsc01hcCBsb2NhbHNNYXAgPQogICAgICAgICAgbmV3IEtlcm5lbFRvTG9jYWxzTWFwSW1wbC5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgTGlzdDxNZW1iZXJFbnRpdHk+IG1lbWJlcnMgPSBzb3VyY2UucmVhZE1lbWJlcnMoKTsKICAgICAgZm9yIChNZW1iZXJFbnRpdHkgbWVtYmVyIGluIG1lbWJlcnMpIHsKICAgICAgICBfbG9jYWxzTWFwc1ttZW1iZXJdID0gbG9jYWxzTWFwOwogICAgICB9CiAgICB9CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEdsb2JhbExvY2Fsc01hcC5pbnRlcm5hbChfbG9jYWxzTWFwcyk7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtHbG9iYWxMb2NhbHNNYXBdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICAvLyBbS2VybmVsVG9Mb2NhbHNNYXBdcyBhcmUgc2hhcmVkIGJldHdlZW4gbWVtYmVycyBhbmQgdGhlaXIgbmVzdGVkCiAgICAvLyBjbG9zdXJlcywgc28gd2UgcmV2ZXJzZSBbX2xvY2Fsc01hcHNdIHRvIGVuc3VyZSB0aGF0IFtLZXJuZWxUb0xvY2Fsc01hcF1zCiAgICAvLyBhcmUgc2hhcmVkIHVwb24gZGVzZXJpYWxpemF0aW9uLiBUaGUgc2hhcmluZyBpcyBuZWVkZWQgZm9yIGNvcnJlY3RuZXNzCiAgICAvLyBzaW5jZSBjYXB0dXJlZCB2YXJpYWJsZXMgd2lsbCBvdGhlcndpc2UgaGF2ZSBkaXN0aW5jdCBsb2NhbHMgZm9yIHRoZWlyCiAgICAvLyBub24tY2FwdHVyZWQgYW5kIGNhcHR1cmVkIHVzZXMuCiAgICBNYXA8S2VybmVsVG9Mb2NhbHNNYXAsIExpc3Q8TWVtYmVyRW50aXR5Pj4gcmV2ZXJzZU1hcCA9IHt9OwogICAgX2xvY2Fsc01hcHMuZm9yRWFjaCgoTWVtYmVyRW50aXR5IG1lbWJlciwgS2VybmVsVG9Mb2NhbHNNYXAgbG9jYWxzTWFwKSB7CiAgICAgIHJldmVyc2VNYXAucHV0SWZBYnNlbnQobG9jYWxzTWFwLCAoKSA9PiBbXSkuYWRkKG1lbWJlcik7CiAgICB9KTsKICAgIHNpbmsud3JpdGVJbnQocmV2ZXJzZU1hcC5sZW5ndGgpOwogICAgcmV2ZXJzZU1hcAogICAgICAgIC5mb3JFYWNoKChLZXJuZWxUb0xvY2Fsc01hcCBsb2NhbHNNYXAsIExpc3Q8TWVtYmVyRW50aXR5PiBtZW1iZXJzKSB7CiAgICAgIGxvY2Fsc01hcC53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICAgIHNpbmsud3JpdGVNZW1iZXJzKG1lbWJlcnMpOwogICAgfSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIFtLZXJuZWxUb0xvY2Fsc01hcF0gZm9yIFttZW1iZXJdLgogIEtlcm5lbFRvTG9jYWxzTWFwIGdldExvY2Fsc01hcChNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAvLyBJZiBlbGVtZW50IGlzIGEgQ29uc3RydWN0b3JCb2R5RW50aXR5LCBpdHMgbG9jYWxzTWFwIGlzIHRoZSBzYW1lIGFzIGZvcgogICAgLy8gQ29uc3RydWN0b3JFbnRpdHksIGJlY2F1c2UgYm90aCBvZiB0aGVzZSBlbnRpdGllcyBjYW1lIGZyb20gdGhlIHNhbWUKICAgIC8vIGNvbnN0cnVjdG9yIG5vZGUuIFRoZSBlbnRpdGllcyBhcmUgdHdvIHNlcGFyYXRlIHBhcnRzIGJlY2F1c2UgSlMgZG9lcyBub3QKICAgIC8vIGhhdmUgdGhlIGNvbmNlcHQgb2YgYW4gaW5pdGlhbGl6ZXIgbGlzdCwgc28gdGhlIGNvbnN0cnVjdG9yIChpbml0aWFsaXplcgogICAgLy8gbGlzdCkgYW5kIHRoZSBjb25zdHJ1Y3RvciBib2R5IGFyZSBpbXBsZW1lbnRlZCBhcyB0d28gc2VwYXJhdGUKICAgIC8vIGNvbnN0cnVjdG9yIHN0ZXBzLgogICAgTWVtYmVyRW50aXR5IGVudGl0eSA9IG1lbWJlcjsKICAgIGlmIChlbnRpdHkgaXMgQ29uc3RydWN0b3JCb2R5RW50aXR5KSBtZW1iZXIgPSBlbnRpdHkuY29uc3RydWN0b3I7CiAgICByZXR1cm4gX2xvY2Fsc01hcHMucHV0SWZBYnNlbnQoCiAgICAgICAgbWVtYmVyLCAoKSA9PiBuZXcgS2VybmVsVG9Mb2NhbHNNYXBJbXBsKG1lbWJlcikpOwogIH0KCiAgLy8vIEFzc29jaWF0ZXMgW2xvY2Fsc01hcF0gd2l0aCBbbWVtYmVyXS4KICAvLy8KICAvLy8gVXNlIHRoaXMgZm9yIHNoYXJpbmcgbWFwcyBiZXR3ZWVuIG1lbWJlcnMgdGhhdCBzaGFyZSBJUiBub2Rlcy4KICB2b2lkIHNldExvY2Fsc01hcChNZW1iZXJFbnRpdHkgbWVtYmVyLCBLZXJuZWxUb0xvY2Fsc01hcCBsb2NhbHNNYXApIHsKICAgIGFzc2VydChtZW1iZXIgIT0gbnVsbCwgIk5vIG1lbWJlciBwcm92aWRlZC4iKTsKICAgIGFzc2VydCghX2xvY2Fsc01hcHMuY29udGFpbnNLZXkobWVtYmVyKSwKICAgICAgICAiTG9jYWxzIG1hcCBhbHJlYWR5IGNyZWF0ZWQgZm9yICRtZW1iZXIuIik7CiAgICBfbG9jYWxzTWFwc1ttZW1iZXJdID0gbG9jYWxzTWFwOwogIH0KfQoKY2xhc3MgS2VybmVsVG9Mb2NhbHNNYXBJbXBsIGltcGxlbWVudHMgS2VybmVsVG9Mb2NhbHNNYXAgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbS2VybmVsVG9Mb2NhbHNNYXBJbXBsXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2xvY2Fscy1tYXAnOwoKICBNZW1iZXJFbnRpdHkgX2N1cnJlbnRNZW1iZXI7CiAgZmluYWwgRW50aXR5RGF0YU1hcDxKTG9jYWwsIExvY2FsRGF0YT4gX2xvY2FscyA9CiAgICAgIG5ldyBFbnRpdHlEYXRhTWFwPEpMb2NhbCwgTG9jYWxEYXRhPigpOwogIE1hcDxpci5WYXJpYWJsZURlY2xhcmF0aW9uLCBKTG9jYWw+IF92YXJpYWJsZU1hcCA9CiAgICAgIDxpci5WYXJpYWJsZURlY2xhcmF0aW9uLCBKTG9jYWw+e307CiAgTWFwPGlyLlRyZWVOb2RlLCBKSnVtcFRhcmdldD4gX2p1bXBUYXJnZXRNYXA7CiAgSXRlcmFibGU8aXIuQnJlYWtTdGF0ZW1lbnQ+IF9icmVha3NBc0NvbnRpbnVlOwoKICBLZXJuZWxUb0xvY2Fsc01hcEltcGwodGhpcy5fY3VycmVudE1lbWJlcik7CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbS2VybmVsVG9Mb2NhbHNNYXBJbXBsXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBLZXJuZWxUb0xvY2Fsc01hcEltcGwucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIF9jdXJyZW50TWVtYmVyID0gc291cmNlLnJlYWRNZW1iZXIoKTsKICAgIGludCBsb2NhbHNDb3VudCA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxvY2Fsc0NvdW50OyBpKyspIHsKICAgICAgaW50IGluZGV4ID0gc291cmNlLnJlYWRJbnQoKTsKICAgICAgU3RyaW5nIG5hbWUgPSBzb3VyY2UucmVhZFN0cmluZ09yTnVsbCgpOwogICAgICBib29sIGlzUmVndWxhclBhcmFtZXRlciA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgICBpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUgPSBzb3VyY2UucmVhZFRyZWVOb2RlKCk7CiAgICAgIEpMb2NhbCBsb2NhbCA9IG5ldyBKTG9jYWwobmFtZSwgY3VycmVudE1lbWJlciwKICAgICAgICAgIGlzUmVndWxhclBhcmFtZXRlcjogaXNSZWd1bGFyUGFyYW1ldGVyKTsKICAgICAgTG9jYWxEYXRhIGRhdGEgPSBuZXcgTG9jYWxEYXRhKG5vZGUpOwogICAgICBfbG9jYWxzLnJlZ2lzdGVyQnlJbmRleChpbmRleCwgbG9jYWwsIGRhdGEpOwogICAgICBfdmFyaWFibGVNYXBbbm9kZV0gPSBsb2NhbDsKICAgIH0KICAgIGludCBqdW1wQ291bnQgPSBzb3VyY2UucmVhZEludCgpOwogICAgaWYgKGp1bXBDb3VudCA+IDApIHsKICAgICAgX2p1bXBUYXJnZXRNYXAgPSB7fTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBqdW1wQ291bnQ7IGkrKykgewogICAgICAgIEpKdW1wVGFyZ2V0IHRhcmdldCA9IG5ldyBKSnVtcFRhcmdldC5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgICBMaXN0PGlyLlRyZWVOb2RlPiBub2RlcyA9IHNvdXJjZS5yZWFkVHJlZU5vZGVzKCk7CiAgICAgICAgZm9yIChpci5UcmVlTm9kZSBub2RlIGluIG5vZGVzKSB7CiAgICAgICAgICBfanVtcFRhcmdldE1hcFtub2RlXSA9IHRhcmdldDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIF9icmVha3NBc0NvbnRpbnVlID0gc291cmNlLnJlYWRUcmVlTm9kZXMoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0tlcm5lbFRvTG9jYWxzTWFwSW1wbF0gdG8gW3NpbmtdLgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVNZW1iZXIoY3VycmVudE1lbWJlcik7CiAgICBzaW5rLndyaXRlSW50KF9sb2NhbHMuc2l6ZSk7CiAgICBfbG9jYWxzLmZvckVhY2goKEpMb2NhbCBsb2NhbCwgTG9jYWxEYXRhIGRhdGEpIHsKICAgICAgYXNzZXJ0KGxvY2FsLm1lbWJlckNvbnRleHQgPT0gY3VycmVudE1lbWJlcik7CiAgICAgIHNpbmsud3JpdGVJbnQobG9jYWwubG9jYWxJbmRleCk7CiAgICAgIHNpbmsud3JpdGVTdHJpbmdPck51bGwobG9jYWwubmFtZSk7CiAgICAgIHNpbmsud3JpdGVCb29sKGxvY2FsLmlzUmVndWxhclBhcmFtZXRlcik7CiAgICAgIHNpbmsud3JpdGVUcmVlTm9kZShkYXRhLm5vZGUpOwogICAgfSk7CiAgICBpZiAoX2p1bXBUYXJnZXRNYXAgIT0gbnVsbCkgewogICAgICAvLyBbSkp1bXBUYXJnZXRdcyBhcmUgc2hhcmVkIGJldHdlZW4gbm9kZXMsIHNvIHdlIHJldmVyc2UKICAgICAgLy8gW19qdW1wVGFyZ2V0TWFwXSB0byBlbnN1cmUgdGhhdCBbSkp1bXBUYXJnZXRdcyBhcmUgc2hhcmVkIHVwb24KICAgICAgLy8gZGVzZXJpYWxpemF0aW9uLiBUaGlzIHNoYXJpbmcgaXMgbmVlZGVkIGZvciBjb3JyZWN0bmVzcyBzaW5jZSBmb3IKICAgICAgLy8gaW5zdGFuY2UgYSBsYWJlbCBzdGF0ZW1lbnQgY29udGFpbmluZyBhIGZvciBsb29wIGJvdGggY29uc3RpdHV0ZXMgdGhlCiAgICAgIC8vIHNhbWUganVtcCB0YXJnZXQgYW5kIHRoZSBTU0EgZ3JhcGggYnVpbGRlciBkZXBlbmRlbnRzIG9uIHRoaXMgcHJvcGVydHkuCiAgICAgIE1hcDxKSnVtcFRhcmdldCwgTGlzdDxpci5UcmVlTm9kZT4+IHJldmVyc2VkTWFwID0ge307CiAgICAgIF9qdW1wVGFyZ2V0TWFwLmZvckVhY2goKGlyLlRyZWVOb2RlIG5vZGUsIEpKdW1wVGFyZ2V0IHRhcmdldCkgewogICAgICAgIHJldmVyc2VkTWFwLnB1dElmQWJzZW50KHRhcmdldCwgKCkgPT4gW10pLmFkZChub2RlKTsKICAgICAgfSk7CiAgICAgIHNpbmsud3JpdGVJbnQocmV2ZXJzZWRNYXAubGVuZ3RoKTsKICAgICAgcmV2ZXJzZWRNYXAuZm9yRWFjaCgoSkp1bXBUYXJnZXQgdGFyZ2V0LCBMaXN0PGlyLlRyZWVOb2RlPiBub2RlcykgewogICAgICAgIHRhcmdldC53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICAgICAgc2luay53cml0ZVRyZWVOb2Rlcyhub2Rlcyk7CiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgc2luay53cml0ZUludCgwKTsKICAgIH0KICAgIHNpbmsud3JpdGVUcmVlTm9kZXMoX2JyZWFrc0FzQ29udGludWUsIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ29tcHV0ZSB0aGlzIGVhZ2VybHkgZnJvbSB0aGUgcm9vdCBvZiB0aGUgbWVtYmVyLgogIHZvaWQgX2Vuc3VyZUp1bXBNYXAoaXIuVHJlZU5vZGUgbm9kZSkgewogICAgaWYgKF9qdW1wVGFyZ2V0TWFwID09IG51bGwpIHsKICAgICAgSnVtcFZpc2l0b3IgdmlzaXRvciA9IG5ldyBKdW1wVmlzaXRvcihjdXJyZW50TWVtYmVyKTsKCiAgICAgIC8vIEZpbmQgdGhlIHJvb3Qgbm9kZSBmb3IgdGhlIGN1cnJlbnQgbWVtYmVyLgogICAgICB3aGlsZSAobm9kZSBpcyEgaXIuTWVtYmVyKSB7CiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50OwogICAgICB9CgogICAgICBub2RlLmFjY2VwdCh2aXNpdG9yKTsKICAgICAgX2p1bXBUYXJnZXRNYXAgPSB2aXNpdG9yLmp1bXBUYXJnZXRNYXA7CiAgICAgIF9icmVha3NBc0NvbnRpbnVlID0gdmlzaXRvci5icmVha3NBc0NvbnRpbnVlOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyRW50aXR5IGdldCBjdXJyZW50TWVtYmVyID0+IF9jdXJyZW50TWVtYmVyOwoKICBMb2NhbCBnZXRMb2NhbEJ5SW5kZXgoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2xvY2Fscy5nZXRFbnRpdHkoaW5kZXgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSnVtcFRhcmdldCBnZXRKdW1wVGFyZ2V0Rm9yQnJlYWsoaXIuQnJlYWtTdGF0ZW1lbnQgbm9kZSkgewogICAgX2Vuc3VyZUp1bXBNYXAobm9kZS50YXJnZXQpOwogICAgSnVtcFRhcmdldCB0YXJnZXQgPSBfanVtcFRhcmdldE1hcFtub2RlXTsKICAgIGFzc2VydCh0YXJnZXQgIT0gbnVsbCwgZmFpbGVkQXQoY3VycmVudE1lbWJlciwgJ05vIHRhcmdldCBmb3IgJG5vZGUuJykpOwogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2VuZXJhdGVDb250aW51ZUZvckJyZWFrKGlyLkJyZWFrU3RhdGVtZW50IG5vZGUpIHsKICAgIHJldHVybiBfYnJlYWtzQXNDb250aW51ZS5jb250YWlucyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIEp1bXBUYXJnZXQgZ2V0SnVtcFRhcmdldEZvckNvbnRpbnVlU3dpdGNoKGlyLkNvbnRpbnVlU3dpdGNoU3RhdGVtZW50IG5vZGUpIHsKICAgIF9lbnN1cmVKdW1wTWFwKG5vZGUudGFyZ2V0KTsKICAgIEp1bXBUYXJnZXQgdGFyZ2V0ID0gX2p1bXBUYXJnZXRNYXBbbm9kZV07CiAgICBhc3NlcnQodGFyZ2V0ICE9IG51bGwsIGZhaWxlZEF0KGN1cnJlbnRNZW1iZXIsICdObyB0YXJnZXQgZm9yICRub2RlLicpKTsKICAgIHJldHVybiB0YXJnZXQ7CiAgfQoKICBAb3ZlcnJpZGUKICBKdW1wVGFyZ2V0IGdldEp1bXBUYXJnZXRGb3JTd2l0Y2hDYXNlKGlyLlN3aXRjaENhc2Ugbm9kZSkgewogICAgX2Vuc3VyZUp1bXBNYXAobm9kZSk7CiAgICByZXR1cm4gX2p1bXBUYXJnZXRNYXBbbm9kZV07CiAgfQoKICBAb3ZlcnJpZGUKICBKdW1wVGFyZ2V0IGdldEp1bXBUYXJnZXRGb3JEbyhpci5Eb1N0YXRlbWVudCBub2RlKSB7CiAgICBfZW5zdXJlSnVtcE1hcChub2RlKTsKICAgIHJldHVybiBfanVtcFRhcmdldE1hcFtub2RlXTsKICB9CgogIEBvdmVycmlkZQogIEp1bXBUYXJnZXQgZ2V0SnVtcFRhcmdldEZvckxhYmVsKGlyLkxhYmVsZWRTdGF0ZW1lbnQgbm9kZSkgewogICAgX2Vuc3VyZUp1bXBNYXAobm9kZSk7CiAgICByZXR1cm4gX2p1bXBUYXJnZXRNYXBbbm9kZV07CiAgfQoKICBAb3ZlcnJpZGUKICBKdW1wVGFyZ2V0IGdldEp1bXBUYXJnZXRGb3JTd2l0Y2goaXIuU3dpdGNoU3RhdGVtZW50IG5vZGUpIHsKICAgIF9lbnN1cmVKdW1wTWFwKG5vZGUpOwogICAgcmV0dXJuIF9qdW1wVGFyZ2V0TWFwW25vZGVdOwogIH0KCiAgQG92ZXJyaWRlCiAgSnVtcFRhcmdldCBnZXRKdW1wVGFyZ2V0Rm9yRm9yKGlyLkZvclN0YXRlbWVudCBub2RlKSB7CiAgICBfZW5zdXJlSnVtcE1hcChub2RlKTsKICAgIHJldHVybiBfanVtcFRhcmdldE1hcFtub2RlXTsKICB9CgogIEBvdmVycmlkZQogIEp1bXBUYXJnZXQgZ2V0SnVtcFRhcmdldEZvckZvckluKGlyLkZvckluU3RhdGVtZW50IG5vZGUpIHsKICAgIF9lbnN1cmVKdW1wTWFwKG5vZGUpOwogICAgcmV0dXJuIF9qdW1wVGFyZ2V0TWFwW25vZGVdOwogIH0KCiAgQG92ZXJyaWRlCiAgSnVtcFRhcmdldCBnZXRKdW1wVGFyZ2V0Rm9yV2hpbGUoaXIuV2hpbGVTdGF0ZW1lbnQgbm9kZSkgewogICAgX2Vuc3VyZUp1bXBNYXAobm9kZSk7CiAgICByZXR1cm4gX2p1bXBUYXJnZXRNYXBbbm9kZV07CiAgfQoKICBAb3ZlcnJpZGUKICBMb2NhbCBnZXRMb2NhbFZhcmlhYmxlKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgcmV0dXJuIF92YXJpYWJsZU1hcC5wdXRJZkFic2VudChub2RlLCAoKSB7CiAgICAgIEpMb2NhbCBsb2NhbCA9IG5ldyBKTG9jYWwobm9kZS5uYW1lLCBjdXJyZW50TWVtYmVyLAogICAgICAgICAgaXNSZWd1bGFyUGFyYW1ldGVyOiBub2RlLnBhcmVudCBpcyBpci5GdW5jdGlvbk5vZGUpOwogICAgICBfbG9jYWxzLnJlZ2lzdGVyPEpMb2NhbCwgTG9jYWxEYXRhPihsb2NhbCwgbmV3IExvY2FsRGF0YShub2RlKSk7CiAgICAgIHJldHVybiBsb2NhbDsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgTG9jYWwgZ2V0TG9jYWxUeXBlVmFyaWFibGUoCiAgICAgIGlyLlR5cGVQYXJhbWV0ZXJUeXBlIG5vZGUsIEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApIHsKICAgIC8vIFRPRE8oZWZvcnR1bmEsIGpvaG5uaXdpbnRoZXIpOiBXZSdyZSBub3QgcmVnaXN0ZXJpbmcgdGhlIHR5cGUgdmFyaWFibGVzCiAgICAvLyBsaWtlIHdlIGFyZSBmb3IgdGhlIHZhcmlhYmxlIGRlY2xhcmF0aW9ucy4gSXMgdGhhdCBva2F5IG9yIGRvIHdlIG5lZWQgdG8KICAgIC8vIG1ha2UgVHlwZVZhcmlhYmxlTG9jYWwgYSBKTG9jYWw/CiAgICByZXR1cm4gbmV3IFR5cGVWYXJpYWJsZUxvY2FsKGVsZW1lbnRNYXAuZ2V0VHlwZVZhcmlhYmxlVHlwZShub2RlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5GdW5jdGlvbk5vZGUgZ2V0RnVuY3Rpb25Ob2RlRm9yUGFyYW1ldGVyKGNvdmFyaWFudCBKTG9jYWwgcGFyYW1ldGVyKSB7CiAgICByZXR1cm4gX2xvY2Fscy5nZXREYXRhKHBhcmFtZXRlcikuZnVuY3Rpb25Ob2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0TG9jYWxUeXBlKEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIGNvdmFyaWFudCBKTG9jYWwgbG9jYWwpIHsKICAgIHJldHVybiBfbG9jYWxzLmdldERhdGEobG9jYWwpLmdldERhcnRUeXBlKGVsZW1lbnRNYXApOwogIH0KfQoKY2xhc3MgSnVtcFZpc2l0b3IgZXh0ZW5kcyBpci5WaXNpdG9yIHsKICBpbnQganVtcEluZGV4ID0gMDsKICBpbnQgbGFiZWxJbmRleCA9IDA7CiAgZmluYWwgTWVtYmVyRW50aXR5IG1lbWJlcjsKICBmaW5hbCBNYXA8aXIuVHJlZU5vZGUsIEpKdW1wVGFyZ2V0PiBqdW1wVGFyZ2V0TWFwID0KICAgICAgPGlyLlRyZWVOb2RlLCBKSnVtcFRhcmdldD57fTsKICBmaW5hbCBTZXQ8aXIuQnJlYWtTdGF0ZW1lbnQ+IGJyZWFrc0FzQ29udGludWUgPSBuZXcgU2V0PGlyLkJyZWFrU3RhdGVtZW50PigpOwoKICBKdW1wVmlzaXRvcih0aGlzLm1lbWJlcik7CgogIEpKdW1wVGFyZ2V0IF9nZXRKdW1wVGFyZ2V0KGlyLlRyZWVOb2RlIG5vZGUpIHsKICAgIHJldHVybiBqdW1wVGFyZ2V0TWFwLnB1dElmQWJzZW50KG5vZGUsICgpIHsKICAgICAgcmV0dXJuIG5ldyBKSnVtcFRhcmdldChtZW1iZXIsIGp1bXBJbmRleCsrLAogICAgICAgICAgaXNTd2l0Y2g6IG5vZGUgaXMgaXIuU3dpdGNoU3RhdGVtZW50LAogICAgICAgICAgaXNTd2l0Y2hDYXNlOiBub2RlIGlzIGlyLlN3aXRjaENhc2UpOwogICAgfSk7CiAgfQoKICBKTGFiZWxEZWZpbml0aW9uIF9nZXRPckNyZWF0ZUxhYmVsKEpKdW1wVGFyZ2V0IHRhcmdldCkgewogICAgaWYgKHRhcmdldC5sYWJlbHMuaXNFbXB0eSkgewogICAgICByZXR1cm4gdGFyZ2V0LmFkZExhYmVsKCdsYWJlbCR7bGFiZWxJbmRleCsrfScpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHRhcmdldC5sYWJlbHMuc2luZ2xlOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgZGVmYXVsdE5vZGUoaXIuTm9kZSBub2RlKSA9PiBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CgogIHN0YXRpYyBib29sIGNhbkJlQnJlYWtUYXJnZXQoaXIuVHJlZU5vZGUgbm9kZSkgewogICAgcmV0dXJuIG5vZGUgaXMgaXIuRm9yU3RhdGVtZW50IHx8CiAgICAgICAgbm9kZSBpcyBpci5Gb3JJblN0YXRlbWVudCB8fAogICAgICAgIG5vZGUgaXMgaXIuV2hpbGVTdGF0ZW1lbnQgfHwKICAgICAgICBub2RlIGlzIGlyLkRvU3RhdGVtZW50IHx8CiAgICAgICAgbm9kZSBpcyBpci5Td2l0Y2hTdGF0ZW1lbnQ7CiAgfQoKICBzdGF0aWMgYm9vbCBjYW5CZUNvbnRpbnVlVGFyZ2V0KGlyLlRyZWVOb2RlIG5vZGUpIHsKICAgIHJldHVybiBub2RlIGlzIGlyLkZvclN0YXRlbWVudCB8fAogICAgICAgIG5vZGUgaXMgaXIuRm9ySW5TdGF0ZW1lbnQgfHwKICAgICAgICBub2RlIGlzIGlyLldoaWxlU3RhdGVtZW50IHx8CiAgICAgICAgbm9kZSBpcyBpci5Eb1N0YXRlbWVudDsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0QnJlYWtTdGF0ZW1lbnQoaXIuQnJlYWtTdGF0ZW1lbnQgbm9kZSkgewogICAgSkp1bXBUYXJnZXQgdGFyZ2V0OwogICAgaXIuVHJlZU5vZGUgYm9keSA9IG5vZGUudGFyZ2V0LmJvZHk7CiAgICBpci5UcmVlTm9kZSBwYXJlbnQgPSBub2RlLnRhcmdldC5wYXJlbnQ7CgogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ29vcmRpbmF0ZSB3aXRoIENGRS10ZWFtIHRvIGF2b2lkIHN1Y2ggYXJiaXRyYXJ5CiAgICAvLyByZXZlcnNlIGVuZ2luZWVyaW5nIG1pc21hdGNoZXM6CiAgICBpZiAocGFyZW50IGlzIGlyLkJsb2NrICYmIHBhcmVudC5zdGF0ZW1lbnRzLmxhc3QgPT0gbm9kZS50YXJnZXQpIHsKICAgICAgLy8gSW4gc3Ryb25nIG1vZGUgZm9yIGNvZGUgbGlrZSB0aGlzOgogICAgICAvLwogICAgICAvLyAgICAgZm9yIChpbnQgaSBpbiBsaXN0KSB7CiAgICAgIC8vICAgICAgIGNvbnRpbnVlOwogICAgICAvLyAgICAgfQogICAgICAvLwogICAgICAvLyBhbiBpbXBsaWNpdCBjYXN0IG1heSBiZSBpbnNlcnRlZCBiZWZvcmUgdGhlIGxhYmVsIHN0YXRlbWVudCwgcmVzdWx0aW5nCiAgICAgIC8vIGluIGNvZGUgbGlrZSB0aGlzOgogICAgICAvLwogICAgICAvLyAgICAgZm9yICh2YXIgaSBpbiBsaXN0KSB7CiAgICAgIC8vICAgICAgIHZhciAjMSA9IGkgYXMgaW50OwogICAgICAvLyAgICAgICBsMTogewogICAgICAvLyAgICAgICAgICBicmVhayBsMToKICAgICAgLy8gICAgICAgfQogICAgICAvLyAgICAgfQogICAgICAvLwogICAgICAvLyBmb3Igd2hpY2ggd2Ugc2hvdWxkIHN0aWxsIHVzZSB0aGUgZm9yIGxvb3AgYXMgYSBjb250aW51ZSB0YXJnZXQuCiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7CiAgICB9CiAgICBpZiAoY2FuQmVCcmVha1RhcmdldChib2R5KSkgewogICAgICAvLyBXZSBoYXZlIGNvZGUgbGlrZQogICAgICAvLwogICAgICAvLyAgICAgbDE6IGZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykgewogICAgICAvLyAgICAgICAgYnJlYWsgbDE6CiAgICAgIC8vICAgICB9CiAgICAgIC8vCiAgICAgIC8vIGFuZCBjYW4gdGhlcmVmb3JlIHVzZSB0aGUgZm9yIGxvb3AgYXMgdGhlIGJyZWFrIHRhcmdldC4KICAgICAgdGFyZ2V0ID0gX2dldEp1bXBUYXJnZXQoYm9keSk7CiAgICAgIHRhcmdldC5pc0JyZWFrVGFyZ2V0ID0gdHJ1ZTsKICAgICAgaXIuVHJlZU5vZGUgc2VhcmNoID0gbm9kZTsKICAgICAgYm9vbCBuZWVkc0xhYmVsID0gZmFsc2U7CiAgICAgIHdoaWxlIChzZWFyY2ggIT0gbm9kZS50YXJnZXQpIHsKICAgICAgICBpZiAoY2FuQmVCcmVha1RhcmdldChzZWFyY2gpKSB7CiAgICAgICAgICBuZWVkc0xhYmVsID0gc2VhcmNoICE9IGJvZHk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgc2VhcmNoID0gc2VhcmNoLnBhcmVudDsKICAgICAgfQogICAgICBpZiAobmVlZHNMYWJlbCkgewogICAgICAgIEpMYWJlbERlZmluaXRpb24gbGFiZWwgPSBfZ2V0T3JDcmVhdGVMYWJlbCh0YXJnZXQpOwogICAgICAgIGxhYmVsLmlzQnJlYWtUYXJnZXQgPSB0cnVlOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGNhbkJlQ29udGludWVUYXJnZXQocGFyZW50KSkgewogICAgICAvLyBXZSBoYXZlIGNvZGUgbGlrZQogICAgICAvLwogICAgICAvLyAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSBsMTogewogICAgICAvLyAgICAgICAgYnJlYWsgbDE6CiAgICAgIC8vICAgICB9CiAgICAgIC8vCiAgICAgIC8vIGFuZCBjYW4gdGhlcmVmb3JlIHVzZSB0aGUgZm9yIGxvb3AgYXMgYSBjb250aW51ZSB0YXJnZXQuCiAgICAgIHRhcmdldCA9IF9nZXRKdW1wVGFyZ2V0KHBhcmVudCk7CiAgICAgIHRhcmdldC5pc0NvbnRpbnVlVGFyZ2V0ID0gdHJ1ZTsKICAgICAgYnJlYWtzQXNDb250aW51ZS5hZGQobm9kZSk7CiAgICAgIGlyLlRyZWVOb2RlIHNlYXJjaCA9IG5vZGU7CiAgICAgIGJvb2wgbmVlZHNMYWJlbCA9IGZhbHNlOwogICAgICB3aGlsZSAoc2VhcmNoICE9IG5vZGUudGFyZ2V0KSB7CiAgICAgICAgaWYgKGNhbkJlQ29udGludWVUYXJnZXQoc2VhcmNoKSkgewogICAgICAgICAgbmVlZHNMYWJlbCA9IHNlYXJjaCAhPSBib2R5OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHNlYXJjaCA9IHNlYXJjaC5wYXJlbnQ7CiAgICAgIH0KICAgICAgaWYgKG5lZWRzTGFiZWwpIHsKICAgICAgICBKTGFiZWxEZWZpbml0aW9uIGxhYmVsID0gX2dldE9yQ3JlYXRlTGFiZWwodGFyZ2V0KTsKICAgICAgICBsYWJlbC5pc0NvbnRpbnVlVGFyZ2V0ID0gdHJ1ZTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgLy8gV2UgaGF2ZSBjb2RlIGxpa2UKICAgICAgLy8KICAgICAgLy8gICAgIGxhYmVsOiBpZiAoYykgewogICAgICAvLyAgICAgICAgIGlmIChjIDwgMTApIGJyZWFrIGxhYmVsOwogICAgICAvLyAgICAgfQogICAgICAvLwogICAgICAvLyBhbmQgbGFiZWwgaXMgdGhlcmVmb3JlIGFsd2F5cyBuZWVkZWQuCiAgICAgIHRhcmdldCA9IF9nZXRKdW1wVGFyZ2V0KG5vZGUudGFyZ2V0KTsKICAgICAgdGFyZ2V0LmlzQnJlYWtUYXJnZXQgPSB0cnVlOwogICAgICBKTGFiZWxEZWZpbml0aW9uIGxhYmVsID0gX2dldE9yQ3JlYXRlTGFiZWwodGFyZ2V0KTsKICAgICAgbGFiZWwuaXNCcmVha1RhcmdldCA9IHRydWU7CiAgICB9CiAgICBqdW1wVGFyZ2V0TWFwW25vZGVdID0gdGFyZ2V0OwogICAgc3VwZXIudmlzaXRCcmVha1N0YXRlbWVudChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q29udGludWVTd2l0Y2hTdGF0ZW1lbnQoaXIuQ29udGludWVTd2l0Y2hTdGF0ZW1lbnQgbm9kZSkgewogICAgSkp1bXBUYXJnZXQgdGFyZ2V0ID0gX2dldEp1bXBUYXJnZXQobm9kZS50YXJnZXQpOwogICAgdGFyZ2V0LmlzQ29udGludWVUYXJnZXQgPSB0cnVlOwogICAganVtcFRhcmdldE1hcFtub2RlXSA9IHRhcmdldDsKICAgIEpMYWJlbERlZmluaXRpb24gbGFiZWwgPSBfZ2V0T3JDcmVhdGVMYWJlbCh0YXJnZXQpOwogICAgbGFiZWwuaXNDb250aW51ZVRhcmdldCA9IHRydWU7CiAgICBzdXBlci52aXNpdENvbnRpbnVlU3dpdGNoU3RhdGVtZW50KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRTd2l0Y2hTdGF0ZW1lbnQoaXIuU3dpdGNoU3RhdGVtZW50IG5vZGUpIHsKICAgIG5vZGUuZXhwcmVzc2lvbi5hY2NlcHQodGhpcyk7CiAgICBpZiAobm9kZS5jYXNlcy5pc05vdEVtcHR5KSB7CiAgICAgIC8vIEVuc3VyZSB0aGF0IFtub2RlXSBoYXMgYSBjb3JyZXNwb25kaW5nIHRhcmdldC4gV2UgZ2VuZXJhdGUgYSBicmVhayBpZjoKICAgICAgLy8gICAtIGEgc3dpdGNoIGNhc2UgY2FsbHMgYSBmdW5jdGlvbiB0aGF0IGFsd2F5cyB0aHJvd3MKICAgICAgLy8gICAtIHRoZXJlJ3MgYSBtaXNzaW5nIGJyZWFrIG9uIHRoZSBsYXN0IGNhc2UgaWYgaXQgaXNuJ3QgYSBkZWZhdWx0IGNhc2UKICAgICAgX2dldEp1bXBUYXJnZXQobm9kZSk7CiAgICB9CiAgICBzdXBlci52aXNpdFN3aXRjaFN0YXRlbWVudChub2RlKTsKICB9Cn0KCmNsYXNzIEpKdW1wVGFyZ2V0IGV4dGVuZHMgSnVtcFRhcmdldCB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtKSnVtcFRhcmdldF0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdqdW1wLXRhcmdldCc7CgogIGZpbmFsIE1lbWJlckVudGl0eSBtZW1iZXJDb250ZXh0OwogIEBvdmVycmlkZQogIGZpbmFsIGludCBuZXN0aW5nTGV2ZWw7CiAgTGlzdDxMYWJlbERlZmluaXRpb24+IF9sYWJlbHM7CiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc1N3aXRjaDsKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzU3dpdGNoQ2FzZTsKICBAb3ZlcnJpZGUKICBib29sIGlzQnJlYWtUYXJnZXQ7CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvbnRpbnVlVGFyZ2V0OwoKICBKSnVtcFRhcmdldCh0aGlzLm1lbWJlckNvbnRleHQsIHRoaXMubmVzdGluZ0xldmVsLAogICAgICB7dGhpcy5pc1N3aXRjaDogZmFsc2UsCiAgICAgIHRoaXMuaXNTd2l0Y2hDYXNlOiBmYWxzZSwKICAgICAgdGhpcy5pc0JyZWFrVGFyZ2V0OiBmYWxzZSwKICAgICAgdGhpcy5pc0NvbnRpbnVlVGFyZ2V0OiBmYWxzZX0pOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW0pKdW1wVGFyZ2V0XSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IEpKdW1wVGFyZ2V0LnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBNZW1iZXJFbnRpdHkgbWVtYmVyQ29udGV4dCA9IHNvdXJjZS5yZWFkTWVtYmVyKCk7CiAgICBpbnQgbmVzdGluZ0xldmVsID0gc291cmNlLnJlYWRJbnQoKTsKICAgIGJvb2wgaXNTd2l0Y2ggPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGJvb2wgaXNTd2l0Y2hDYXNlID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBib29sIGlzQnJlYWtUYXJnZXQgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGJvb2wgaXNDb250aW51ZVRhcmdldCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgSkp1bXBUYXJnZXQgdGFyZ2V0ID0gbmV3IEpKdW1wVGFyZ2V0KG1lbWJlckNvbnRleHQsIG5lc3RpbmdMZXZlbCwKICAgICAgICBpc1N3aXRjaDogaXNTd2l0Y2gsCiAgICAgICAgaXNTd2l0Y2hDYXNlOiBpc1N3aXRjaENhc2UsCiAgICAgICAgaXNCcmVha1RhcmdldDogaXNCcmVha1RhcmdldCwKICAgICAgICBpc0NvbnRpbnVlVGFyZ2V0OiBpc0NvbnRpbnVlVGFyZ2V0KTsKICAgIGludCBsYWJlbENvdW50ID0gc291cmNlLnJlYWRJbnQoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGFiZWxDb3VudDsgaSsrKSB7CiAgICAgIFN0cmluZyBsYWJlbE5hbWUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgICBib29sIGlzQnJlYWtUYXJnZXQgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgICAgYm9vbCBpc0NvbnRpbnVlVGFyZ2V0ID0gc291cmNlLnJlYWRCb29sKCk7CiAgICAgIHRhcmdldC5hZGRMYWJlbChsYWJlbE5hbWUsCiAgICAgICAgICBpc0JyZWFrVGFyZ2V0OiBpc0JyZWFrVGFyZ2V0LCBpc0NvbnRpbnVlVGFyZ2V0OiBpc0NvbnRpbnVlVGFyZ2V0KTsKICAgIH0KICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiB0YXJnZXQ7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtKSnVtcFRhcmdldF0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVNZW1iZXIobWVtYmVyQ29udGV4dCk7CiAgICBzaW5rLndyaXRlSW50KG5lc3RpbmdMZXZlbCk7CiAgICBzaW5rLndyaXRlQm9vbChpc1N3aXRjaCk7CiAgICBzaW5rLndyaXRlQm9vbChpc1N3aXRjaENhc2UpOwogICAgc2luay53cml0ZUJvb2woaXNCcmVha1RhcmdldCk7CiAgICBzaW5rLndyaXRlQm9vbChpc0NvbnRpbnVlVGFyZ2V0KTsKICAgIGlmIChfbGFiZWxzICE9IG51bGwpIHsKICAgICAgc2luay53cml0ZUludChfbGFiZWxzLmxlbmd0aCk7CiAgICAgIGZvciAoTGFiZWxEZWZpbml0aW9uIGRlZmluaXRpb24gaW4gX2xhYmVscykgewogICAgICAgIHNpbmsud3JpdGVTdHJpbmcoZGVmaW5pdGlvbi5uYW1lKTsKICAgICAgICBzaW5rLndyaXRlQm9vbChkZWZpbml0aW9uLmlzQnJlYWtUYXJnZXQpOwogICAgICAgIHNpbmsud3JpdGVCb29sKGRlZmluaXRpb24uaXNDb250aW51ZVRhcmdldCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHNpbmsud3JpdGVJbnQoMCk7CiAgICB9CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgTGFiZWxEZWZpbml0aW9uIGFkZExhYmVsKFN0cmluZyBsYWJlbE5hbWUsCiAgICAgIHtib29sIGlzQnJlYWtUYXJnZXQ6IGZhbHNlLCBib29sIGlzQ29udGludWVUYXJnZXQ6IGZhbHNlfSkgewogICAgX2xhYmVscyA/Pz0gPExhYmVsRGVmaW5pdGlvbj5bXTsKICAgIExhYmVsRGVmaW5pdGlvbiBsYWJlbERlZmluaXRpb24gPSBuZXcgSkxhYmVsRGVmaW5pdGlvbih0aGlzLCBsYWJlbE5hbWUsCiAgICAgICAgaXNCcmVha1RhcmdldDogaXNCcmVha1RhcmdldCwgaXNDb250aW51ZVRhcmdldDogaXNDb250aW51ZVRhcmdldCk7CiAgICBfbGFiZWxzLmFkZChsYWJlbERlZmluaXRpb24pOwogICAgcmV0dXJuIGxhYmVsRGVmaW5pdGlvbjsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8TGFiZWxEZWZpbml0aW9uPiBnZXQgbGFiZWxzIHsKICAgIHJldHVybiBfbGFiZWxzID8/IGNvbnN0IDxMYWJlbERlZmluaXRpb24+W107CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnSkp1bXBUYXJnZXQoJyk7CiAgICBzYi53cml0ZSgnbWVtYmVyQ29udGV4dD0nKTsKICAgIHNiLndyaXRlKG1lbWJlckNvbnRleHQpOwogICAgc2Iud3JpdGUoJyxuZXN0aW5nTGV2ZWw9Jyk7CiAgICBzYi53cml0ZShuZXN0aW5nTGV2ZWwpOwogICAgc2Iud3JpdGUoJyxpc0JyZWFrVGFyZ2V0PScpOwogICAgc2Iud3JpdGUoaXNCcmVha1RhcmdldCk7CiAgICBzYi53cml0ZSgnLGlzQ29udGludWVUYXJnZXQ9Jyk7CiAgICBzYi53cml0ZShpc0NvbnRpbnVlVGFyZ2V0KTsKICAgIGlmIChfbGFiZWxzICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJyxsYWJlbHM9Jyk7CiAgICAgIHNiLndyaXRlKF9sYWJlbHMpOwogICAgfQogICAgc2Iud3JpdGUoJyknKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKY2xhc3MgSkxhYmVsRGVmaW5pdGlvbiBleHRlbmRzIExhYmVsRGVmaW5pdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgSnVtcFRhcmdldCB0YXJnZXQ7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIGxhYmVsTmFtZTsKICBAb3ZlcnJpZGUKICBib29sIGlzQnJlYWtUYXJnZXQ7CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvbnRpbnVlVGFyZ2V0OwoKICBKTGFiZWxEZWZpbml0aW9uKHRoaXMudGFyZ2V0LCB0aGlzLmxhYmVsTmFtZSwKICAgICAge3RoaXMuaXNCcmVha1RhcmdldDogZmFsc2UsIHRoaXMuaXNDb250aW51ZVRhcmdldDogZmFsc2V9KTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBuYW1lID0+IGxhYmVsTmFtZTsKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnSkxhYmVsRGVmaW5pdGlvbignKTsKICAgIHNiLndyaXRlKCcsbGFiZWxOYW1lPScpOwogICAgc2Iud3JpdGUobGFiZWxOYW1lKTsKICAgIHNiLndyaXRlKCcsaXNCcmVha1RhcmdldD0nKTsKICAgIHNiLndyaXRlKGlzQnJlYWtUYXJnZXQpOwogICAgc2Iud3JpdGUoJyxpc0NvbnRpbnVlVGFyZ2V0PScpOwogICAgc2Iud3JpdGUoaXNDb250aW51ZVRhcmdldCk7CiAgICBzYi53cml0ZSgnKScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgpjbGFzcyBKTG9jYWwgZXh0ZW5kcyBJbmRleGVkTG9jYWwgewogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lOwogIGZpbmFsIE1lbWJlckVudGl0eSBtZW1iZXJDb250ZXh0OwoKICAvLy8gVHJ1ZSBpZiB0aGlzIGxvY2FsIHJlcHJlc2VudHMgYSBsb2NhbCBwYXJhbWV0ZXIuCiAgZmluYWwgYm9vbCBpc1JlZ3VsYXJQYXJhbWV0ZXI7CgogIEpMb2NhbCh0aGlzLm5hbWUsIHRoaXMubWVtYmVyQ29udGV4dCwge3RoaXMuaXNSZWd1bGFyUGFyYW1ldGVyOiBmYWxzZX0pIHsKICAgIGFzc2VydChtZW1iZXJDb250ZXh0IGlzISBKR2VuZXJhdG9yQm9keSk7CiAgfQoKICBTdHJpbmcgZ2V0IF9raW5kID0+ICdsb2NhbCc7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCckX2tpbmQoJyk7CiAgICBpZiAobWVtYmVyQ29udGV4dC5lbmNsb3NpbmdDbGFzcyAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKG1lbWJlckNvbnRleHQuZW5jbG9zaW5nQ2xhc3MubmFtZSk7CiAgICAgIHNiLndyaXRlKCcuJyk7CiAgICB9CiAgICBzYi53cml0ZShtZW1iZXJDb250ZXh0Lm5hbWUpOwogICAgc2Iud3JpdGUoJyMnKTsKICAgIHNiLndyaXRlKG5hbWUpOwogICAgc2Iud3JpdGUoJyknKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKY2xhc3MgTG9jYWxEYXRhIHsKICBmaW5hbCBpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGU7CgogIERhcnRUeXBlIF90eXBlOwoKICBMb2NhbERhdGEodGhpcy5ub2RlKTsKCiAgRGFydFR5cGUgZ2V0RGFydFR5cGUoSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgcmV0dXJuIF90eXBlID8/PSBlbGVtZW50TWFwLmdldERhcnRUeXBlKG5vZGUudHlwZSk7CiAgfQoKICBpci5GdW5jdGlvbk5vZGUgZ2V0IGZ1bmN0aW9uTm9kZSA9PiBub2RlLnBhcmVudDsKfQoKLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBwYXJhbWV0ZXIgaW4gW2Z1bmN0aW9uXSBpbiB0aGUgY2Fub25pY2FsIG9yZGVyOgovLy8gUG9zaXRpb25hbCBwYXJhbWV0ZXJzIGJ5IGluZGV4LCB0aGVuIG5hbWVkIHBhcmFtZXRlcnMgbGV4aWNvZ3JhcGhpY2FsbHkuCnZvaWQgZm9yRWFjaE9yZGVyZWRQYXJhbWV0ZXJBc0xvY2FsKAogICAgR2xvYmFsTG9jYWxzTWFwIGdsb2JhbExvY2Fsc01hcCwKICAgIEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsCiAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwKICAgIHZvaWQgZihMb2NhbCBwYXJhbWV0ZXIsIHtib29sIGlzRWxpZGVkfSkpIHsKICBLZXJuZWxUb0xvY2Fsc01hcCBsb2NhbHNNYXAgPSBnbG9iYWxMb2NhbHNNYXAuZ2V0TG9jYWxzTWFwKGZ1bmN0aW9uKTsKICBmb3JFYWNoT3JkZXJlZFBhcmFtZXRlcihlbGVtZW50TWFwLCBmdW5jdGlvbiwKICAgICAgKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIHtib29sIGlzRWxpZGVkfSkgewogICAgZihsb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZSh2YXJpYWJsZSksIGlzRWxpZGVkOiBpc0VsaWRlZCk7CiAgfSk7Cn0KgoYATk48ASEBKAEaGSQjISEuARssARhJHTEBOgEoAS4BPUIXOyUpJEA5LSkIBhU2BAEzKBVIUU5OJ0BNPwgmD00nIggTBAE0OE9MUVBGGiJGJDoEASwGRUgzLTQlBAIBO08dKgEfMy41KjAxAS4BQ0AXKigsJC8zOzUzLDMiBiYZGyxJOiopCggGMBUEATkMKBUlITU0JyowJQgiQEhLT1E8Rj0KKUomJAoNGAY9EwQBTCoiPAE0IxwIARwuNAYEAQw0ASUlBAEMPSEuTRMEAQw6LQQBDE8hLk0TBAEMPhohBAEMNxohBAEMPxohBAEMPxohBAEMORohBAEMPRohBAEMPRohBAEMOC86P0cUCAQBDB4+T1AoSAQBDEw0BAEMTTsEAgEnFRYdNiRQARwBMTAyMDAIBAE7ITYNIwYEAQw5ATMmJSUiJAQBNiYlJSAEAQwwGCktAU0nRywJIxkPCVAcCSMiFRwRDwlKHgYiGwkwGg8JQSUjIR8mKCcRCiAIGDwkCC4bCTAaDwlCJyYiIR8mKycRCiAIGDwnCA0bCR0qDwkvLCM6IgYiJQQBDEI2JCI4Iy4EAQwyIiFQP1EcBiYEAgEnRR0rASQMGiEMFwwbDBYMGQE1HSAhJgE5Phc2KScrLC9GHCQmLScrLi4xIU0GFRMEAS8oFSUhHiIjJhslNCsyNQgNGAYTBAEMLUMlTEsiHAQBDCUxBAEMFioeIB0gHCEdJCAbHBkGExoEAgExDBsMGgwWDBkBMEIBDCAMFiojHRkhHSQgExoEAgEkDBUkATchAUwuBAEfAQwWKhkwMxUGIhMUExoEAgESJQESARgBNDgEATMCAUdNJSUfHTBIMDtBBgIBKXBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX21vZGVsL2xvY2Fscy5kYXJ0OHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2tlcm5lbC9kYXJ0MmpzX3RhcmdldC5kYXJ0l3QvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gVE9ETyhqb2hubml3aW50aGVyKTogQWRkIGEgdGVzdCB0aGF0IGVuc3VyZSB0aGF0IHRoaXMgbGlicmFyeSBkb2Vzbid0IGRlcGVuZAovLyBvbiB0aGUgZGFydDJqcyBpbnRlcm5hbHMuCmxpYnJhcnkgY29tcGlsZXIuc3JjLmtlcm5lbC5kYXJ0MmpzX3RhcmdldDsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NvcmVfdHlwZXMuZGFydCc7CmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3RhcmdldC90YXJnZXRzLmRhcnQnOwppbXBvcnQgJ2ludm9jYXRpb25fbWlycm9yX2NvbnN0YW50cy5kYXJ0JzsKCmNvbnN0IEl0ZXJhYmxlPFN0cmluZz4gX2FsbG93ZWREYXJ0U2NoZW1lUGF0aHMgPSBjb25zdCA8U3RyaW5nPlsKICAnYXN5bmMnLAogICdodG1sJywKICAnaHRtbF9jb21tb24nLAogICdpbmRleGVkX2RiJywKICAnanMnLAogICdqc191dGlsJywKICAnc3ZnJywKICAnX25hdGl2ZV90eXBlZF9kYXRhJywKICAnd2ViX2F1ZGlvJywKICAnd2ViX2dsJywKICAnd2ViX3NxbCcKXTsKCmJvb2wgbWF5YmVFbmFibGVOYXRpdmUoVXJpIHVyaSkgewogIGJvb2wgYWxsb3dlZFRlc3RMaWJyYXJ5KCkgewogICAgU3RyaW5nIHNjcmlwdE5hbWUgPSB1cmkucGF0aDsKICAgIHJldHVybiBzY3JpcHROYW1lLmNvbnRhaW5zKCd0ZXN0cy9jb21waWxlci9kYXJ0MmpzX25hdGl2ZScpIHx8CiAgICAgICAgc2NyaXB0TmFtZS5jb250YWlucygndGVzdHMvY29tcGlsZXIvZGFydDJqc19leHRyYScpIHx8CiAgICAgICAgc2NyaXB0TmFtZS5jb250YWlucygnZ2VuZXJhdGVkX3Rlc3RzL2RhcnQyanNfbmF0aXZlL25hdGl2ZV90ZXN0Jyk7CiAgfQoKICBib29sIGFsbG93ZWREYXJ0TGlicmFyeSgpIHsKICAgIGlmICh1cmkuc2NoZW1lICE9ICdkYXJ0JykgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIF9hbGxvd2VkRGFydFNjaGVtZVBhdGhzLmNvbnRhaW5zKHVyaS5wYXRoKTsKICB9CgogIHJldHVybiBhbGxvd2VkVGVzdExpYnJhcnkoKSB8fCBhbGxvd2VkRGFydExpYnJhcnkoKTsKfQoKLy8vIEEga2VybmVsIFtUYXJnZXRdIHRvIGNvbmZpZ3VyZSB0aGUgRGFydCBGcm9udCBFbmQgZm9yIGRhcnQyanMuCmNsYXNzIERhcnQyanNUYXJnZXQgZXh0ZW5kcyBUYXJnZXQgewogIGZpbmFsIFRhcmdldEZsYWdzIGZsYWdzOwogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lOwoKICBEYXJ0MmpzVGFyZ2V0KHRoaXMubmFtZSwgdGhpcy5mbGFncyk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGxlZ2FjeU1vZGUgPT4gZmxhZ3MubGVnYWN5TW9kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgZW5hYmxlTm9TdWNoTWV0aG9kRm9yd2FyZGVycyA9PiAhZmxhZ3MubGVnYWN5TW9kZTsKCiAgQG92ZXJyaWRlCiAgTGlzdDxTdHJpbmc+IGdldCBleHRyYVJlcXVpcmVkTGlicmFyaWVzID0+IF9yZXF1aXJlZExpYnJhcmllc1tuYW1lXTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBtYXlEZWZpbmVSZXN0cmljdGVkVHlwZShVcmkgdXJpKSA9PgogICAgICB1cmkuc2NoZW1lID09ICdkYXJ0JyAmJgogICAgICAodXJpLnBhdGggPT0gJ2NvcmUnIHx8IHVyaS5wYXRoID09ICdfaW50ZXJjZXB0b3JzJyk7CgogIEBvdmVycmlkZQogIGJvb2wgYWxsb3dQbGF0Zm9ybVByaXZhdGVMaWJyYXJ5QWNjZXNzKFVyaSBpbXBvcnRlciwgVXJpIGltcG9ydGVkKSA9PgogICAgICBzdXBlci5hbGxvd1BsYXRmb3JtUHJpdmF0ZUxpYnJhcnlBY2Nlc3MoaW1wb3J0ZXIsIGltcG9ydGVkKSB8fAogICAgICBtYXliZUVuYWJsZU5hdGl2ZShpbXBvcnRlcik7CgogIEBvdmVycmlkZQogIGJvb2wgZW5hYmxlTmF0aXZlKFVyaSB1cmkpID0+IG1heWJlRW5hYmxlTmF0aXZlKHVyaSk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IG5hdGl2ZUV4dGVuc2lvbkV4cGVjdHNTdHJpbmcgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGVycm9yT25VbmV4YWN0V2ViSW50TGl0ZXJhbHMgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBwZXJmb3JtTW9kdWxhclRyYW5zZm9ybWF0aW9uc09uTGlicmFyaWVzKAogICAgICBpci5Db21wb25lbnQgY29tcG9uZW50LAogICAgICBDb3JlVHlwZXMgY29yZVR5cGVzLAogICAgICBDbGFzc0hpZXJhcmNoeSBoaWVyYXJjaHksCiAgICAgIExpc3Q8aXIuTGlicmFyeT4gbGlicmFyaWVzLAogICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50RGVmaW5lcywKICAgICAgRGlhZ25vc3RpY1JlcG9ydGVyIGRpYWdub3N0aWNSZXBvcnRlciwKICAgICAge3ZvaWQgbG9nZ2VyKFN0cmluZyBtc2cpfSkge30KCiAgQG92ZXJyaWRlCiAgaXIuRXhwcmVzc2lvbiBpbnN0YW50aWF0ZUludm9jYXRpb24oCiAgICAgIENvcmVUeXBlcyBjb3JlVHlwZXMsCiAgICAgIGlyLkV4cHJlc3Npb24gcmVjZWl2ZXIsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBpci5Bcmd1bWVudHMgYXJndW1lbnRzLAogICAgICBpbnQgb2Zmc2V0LAogICAgICBib29sIGlzU3VwZXIpIHsKICAgIGludCBraW5kOwogICAgaWYgKG5hbWUuc3RhcnRzV2l0aCgnZ2V0OicpKSB7CiAgICAgIGtpbmQgPSBpbnZvY2F0aW9uTWlycm9yR2V0dGVyS2luZDsKICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKDQpOwogICAgfSBlbHNlIGlmIChuYW1lLnN0YXJ0c1dpdGgoJ3NldDonKSkgewogICAgICBraW5kID0gaW52b2NhdGlvbk1pcnJvclNldHRlcktpbmQ7CiAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cmluZyg0KTsKICAgIH0gZWxzZSB7CiAgICAgIGtpbmQgPSBpbnZvY2F0aW9uTWlycm9yTWV0aG9kS2luZDsKICAgIH0KICAgIHJldHVybiBuZXcgaXIuU3RhdGljSW52b2NhdGlvbigKICAgICAgICBjb3JlVHlwZXMuaW5kZXgKICAgICAgICAgICAgLmdldFRvcExldmVsTWVtYmVyKCdkYXJ0OmNvcmUnLCAnX2NyZWF0ZUludm9jYXRpb25NaXJyb3InKSwKICAgICAgICBuZXcgaXIuQXJndW1lbnRzKDxpci5FeHByZXNzaW9uPlsKICAgICAgICAgIG5ldyBpci5TdHJpbmdMaXRlcmFsKG5hbWUpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0LAogICAgICAgICAgbmV3IGlyLkxpc3RMaXRlcmFsKAogICAgICAgICAgICAgIGFyZ3VtZW50cy50eXBlcy5tYXAoKHQpID0+IG5ldyBpci5UeXBlTGl0ZXJhbCh0KSkudG9MaXN0KCkpLAogICAgICAgICAgbmV3IGlyLkxpc3RMaXRlcmFsKGFyZ3VtZW50cy5wb3NpdGlvbmFsKS4uZmlsZU9mZnNldCA9IG9mZnNldCwKICAgICAgICAgIG5ldyBpci5NYXBMaXRlcmFsKG5ldyBMaXN0PGlyLk1hcEVudHJ5Pi5mcm9tKAogICAgICAgICAgICAgIGFyZ3VtZW50cy5uYW1lZC5tYXAoKGlyLk5hbWVkRXhwcmVzc2lvbiBhcmcpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBpci5NYXBFbnRyeSgKICAgICAgICAgICAgICAgIG5ldyBpci5TdHJpbmdMaXRlcmFsKGFyZy5uYW1lKS4uZmlsZU9mZnNldCA9IGFyZy5maWxlT2Zmc2V0LAogICAgICAgICAgICAgICAgYXJnLnZhbHVlKQogICAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGFyZy5maWxlT2Zmc2V0OwogICAgICAgICAgfSkpLCBrZXlUeXBlOiBjb3JlVHlwZXMuc3RyaW5nQ2xhc3MucmF3VHlwZSkKICAgICAgICAgICAgLi5pc0NvbnN0ID0gKGFyZ3VtZW50cy5uYW1lZC5sZW5ndGggPT0gMCkKICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gYXJndW1lbnRzLmZpbGVPZmZzZXQsCiAgICAgICAgICBuZXcgaXIuSW50TGl0ZXJhbChraW5kKS4uZmlsZU9mZnNldCA9IG9mZnNldCwKICAgICAgICBdKSkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRXhwcmVzc2lvbiBpbnN0YW50aWF0ZU5vU3VjaE1ldGhvZEVycm9yKENvcmVUeXBlcyBjb3JlVHlwZXMsCiAgICAgIGlyLkV4cHJlc3Npb24gcmVjZWl2ZXIsIFN0cmluZyBuYW1lLCBpci5Bcmd1bWVudHMgYXJndW1lbnRzLCBpbnQgb2Zmc2V0LAogICAgICB7Ym9vbCBpc01ldGhvZDogZmFsc2UsCiAgICAgIGJvb2wgaXNHZXR0ZXI6IGZhbHNlLAogICAgICBib29sIGlzU2V0dGVyOiBmYWxzZSwKICAgICAgYm9vbCBpc0ZpZWxkOiBmYWxzZSwKICAgICAgYm9vbCBpc0xvY2FsVmFyaWFibGU6IGZhbHNlLAogICAgICBib29sIGlzRHluYW1pYzogZmFsc2UsCiAgICAgIGJvb2wgaXNTdXBlcjogZmFsc2UsCiAgICAgIGJvb2wgaXNTdGF0aWM6IGZhbHNlLAogICAgICBib29sIGlzQ29uc3RydWN0b3I6IGZhbHNlLAogICAgICBib29sIGlzVG9wTGV2ZWw6IGZhbHNlfSkgewogICAgLy8gVE9ETyhzaWdtdW5kKTogaW1wbGVtZW50OwogICAgcmV0dXJuIG5ldyBpci5JbnZhbGlkRXhwcmVzc2lvbihudWxsKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50c0JhY2tlbmQgY29uc3RhbnRzQmFja2VuZChDb3JlVHlwZXMgY29yZVR5cGVzKSA9PgogICAgICBjb25zdCBEYXJ0MmpzQ29uc3RhbnRzQmFja2VuZChzdXBwb3J0c1VuZXZhbHVhdGVkQ29uc3RhbnRzOiB0cnVlKTsKfQoKLy8gVE9ETyhzaWdtdW5kKTogdGhpcyAiZXh0cmFSZXF1aXJlZExpYnJhcmllcyIgbmVlZHMgdG8gYmUgcmVtb3ZlZC4uLgovLyBjb21waWxlLXBsYXRmb3JtIHNob3VsZCBqdXN0IHNwZWNpZnkgd2hpY2ggbGlicmFyaWVzIHRvIGNvbXBpbGUgaW5zdGVhZC4KY29uc3QgX3JlcXVpcmVkTGlicmFyaWVzID0gY29uc3QgPFN0cmluZywgTGlzdDxTdHJpbmc+PnsKICAnZGFydDJqcyc6IGNvbnN0IDxTdHJpbmc+WwogICAgJ2RhcnQ6X2Nocm9tZScsCiAgICAnZGFydDpfZm9yZWlnbl9oZWxwZXInLAogICAgJ2RhcnQ6X2ludGVyY2VwdG9ycycsCiAgICAnZGFydDpfaW50ZXJuYWwnLAogICAgJ2RhcnQ6X2pzX2VtYmVkZGVkX25hbWVzJywKICAgICdkYXJ0Ol9qc19oZWxwZXInLAogICAgJ2RhcnQ6X2pzX25hbWVzJywKICAgICdkYXJ0Ol9uYXRpdmVfdHlwZWRfZGF0YScsCiAgICAnZGFydDphc3luYycsCiAgICAnZGFydDpjb2xsZWN0aW9uJywKICAgICdkYXJ0Omh0bWwnLAogICAgJ2RhcnQ6aHRtbF9jb21tb24nLAogICAgJ2RhcnQ6aW5kZXhlZF9kYicsCiAgICAnZGFydDppbycsCiAgICAnZGFydDpqcycsCiAgICAnZGFydDpqc191dGlsJywKICAgICdkYXJ0Om1pcnJvcnMnLAogICAgJ2RhcnQ6c3ZnJywKICAgICdkYXJ0OndlYl9hdWRpbycsCiAgICAnZGFydDp3ZWJfZ2wnLAogICAgJ2RhcnQ6d2ViX3NxbCcsCiAgXSwKICAnZGFydDJqc19zZXJ2ZXInOiBjb25zdCA8U3RyaW5nPlsKICAgICdkYXJ0Ol9mb3JlaWduX2hlbHBlcicsCiAgICAnZGFydDpfaW50ZXJjZXB0b3JzJywKICAgICdkYXJ0Ol9pbnRlcm5hbCcsCiAgICAnZGFydDpfanNfZW1iZWRkZWRfbmFtZXMnLAogICAgJ2RhcnQ6X2pzX2hlbHBlcicsCiAgICAnZGFydDpfanNfbmFtZXMnLAogICAgJ2RhcnQ6X25hdGl2ZV90eXBlZF9kYXRhJywKICAgICdkYXJ0OmFzeW5jJywKICAgICdkYXJ0OmNvbGxlY3Rpb24nLAogICAgJ2RhcnQ6aW8nLAogICAgJ2RhcnQ6anMnLAogICAgJ2RhcnQ6anNfdXRpbCcsCiAgICAnZGFydDptaXJyb3JzJywKICBdCn07CgpjbGFzcyBEYXJ0MmpzQ29uc3RhbnRzQmFja2VuZCBleHRlbmRzIENvbnN0YW50c0JhY2tlbmQgewogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgc3VwcG9ydHNVbmV2YWx1YXRlZENvbnN0YW50czsKCiAgY29uc3QgRGFydDJqc0NvbnN0YW50c0JhY2tlbmQoe3RoaXMuc3VwcG9ydHNVbmV2YWx1YXRlZENvbnN0YW50c30pOwoKICBAb3ZlcnJpZGUKICBOdW1iZXJTZW1hbnRpY3MgZ2V0IG51bWJlclNlbWFudGljcyA9PiBOdW1iZXJTZW1hbnRpY3MuanM7Cn0KgM4ATk48AVAdLAEoKS4tKwFBCwoREAgNCRgPDAwDASIeIkM/SwQBHiw3BAE3AgFDJRsMFQEoAQwrAQw+AQxHAQwrHjsBDEhFIwEMOAEMMgEMMQEMMR4bICIuLSQBDCcbHhMeEhYOIykgKikgDSkGJBhIKjseS0k4PSRNGy03NjE4DB0EAQxCTx0cHBsjHRscISEhKwQBDDxJAgFHTDkdFBwaFh8XFh8SFxEYFw8PFBQQFhMUBSQcGhYfFxYfEhcPDxQUBAMBOQwrAUYBDD0CAS9wYWNrYWdlOmNvbXBpbGVyL3NyYy9rZXJuZWwvZGFydDJqc190YXJnZXQuZGFydDNzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9rZXJuZWwva2VsZW1lbnRzLmRhcnSdRy8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gRW50aXR5IG1vZGVsIGZvciBlbGVtZW50cyBkZXJpdmVkIGZyb20gS2VybmVsIElSLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvaW5kZXhlZC5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKCmNvbnN0IFN0cmluZyBrRWxlbWVudFByZWZpeCA9ICdrOic7CgpjbGFzcyBLTGlicmFyeSBleHRlbmRzIEluZGV4ZWRMaWJyYXJ5IHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBAb3ZlcnJpZGUKICBmaW5hbCBVcmkgY2Fub25pY2FsVXJpOwoKICBLTGlicmFyeSh0aGlzLm5hbWUsIHRoaXMuY2Fub25pY2FsVXJpKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyR7a0VsZW1lbnRQcmVmaXh9bGlicmFyeSgkbmFtZSknOwp9CgpjbGFzcyBLQ2xhc3MgZXh0ZW5kcyBJbmRleGVkQ2xhc3MgewogIEBvdmVycmlkZQogIGZpbmFsIEtMaWJyYXJ5IGxpYnJhcnk7CgogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lOwogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgaXNBYnN0cmFjdDsKCiAgS0NsYXNzKHRoaXMubGlicmFyeSwgdGhpcy5uYW1lLCB7dGhpcy5pc0Fic3RyYWN0fSk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQ2xvc3VyZSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyR7a0VsZW1lbnRQcmVmaXh9Y2xhc3MoJG5hbWUpJzsKfQoKY2xhc3MgS1R5cGVkZWYgZXh0ZW5kcyBJbmRleGVkVHlwZWRlZiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgS0xpYnJhcnkgbGlicmFyeTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIEtUeXBlZGVmKHRoaXMubGlicmFyeSwgdGhpcy5uYW1lKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyR7a0VsZW1lbnRQcmVmaXh9dHlwZWRlZigkbmFtZSknOwp9CgphYnN0cmFjdCBjbGFzcyBLTWVtYmVyIGV4dGVuZHMgSW5kZXhlZE1lbWJlciB7CiAgQG92ZXJyaWRlCiAgZmluYWwgS0xpYnJhcnkgbGlicmFyeTsKICBAb3ZlcnJpZGUKICBmaW5hbCBLQ2xhc3MgZW5jbG9zaW5nQ2xhc3M7CiAgZmluYWwgTmFtZSBfbmFtZTsKICBmaW5hbCBib29sIF9pc1N0YXRpYzsKCiAgS01lbWJlcih0aGlzLmxpYnJhcnksIHRoaXMuZW5jbG9zaW5nQ2xhc3MsIHRoaXMuX25hbWUsIHtib29sIGlzU3RhdGljOiBmYWxzZX0pCiAgICAgIDogX2lzU3RhdGljID0gaXNTdGF0aWM7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgbmFtZSA9PiBfbmFtZS50ZXh0OwoKICBAb3ZlcnJpZGUKICBOYW1lIGdldCBtZW1iZXJOYW1lID0+IF9uYW1lOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0Fzc2lnbmFibGUgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQ29uc3QgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQWJzdHJhY3QgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU2V0dGVyID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0dldHRlciA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNGdW5jdGlvbiA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNGaWVsZCA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNDb25zdHJ1Y3RvciA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNJbnN0YW5jZU1lbWJlciA9PiBlbmNsb3NpbmdDbGFzcyAhPSBudWxsICYmICFfaXNTdGF0aWM7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU3RhdGljID0+IGVuY2xvc2luZ0NsYXNzICE9IG51bGwgJiYgX2lzU3RhdGljOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1RvcExldmVsID0+IGVuY2xvc2luZ0NsYXNzID09IG51bGw7CgogIFN0cmluZyBnZXQgX2tpbmQ7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICcke2tFbGVtZW50UHJlZml4fSRfa2luZCcKICAgICAgJygke2VuY2xvc2luZ0NsYXNzICE9IG51bGwgPyAnJHtlbmNsb3NpbmdDbGFzcy5uYW1lfS4nIDogJyd9JG5hbWUpJzsKfQoKYWJzdHJhY3QgY2xhc3MgS0Z1bmN0aW9uIGV4dGVuZHMgS01lbWJlcgogICAgaW1wbGVtZW50cyBGdW5jdGlvbkVudGl0eSwgSW5kZXhlZEZ1bmN0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlOwogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgaXNFeHRlcm5hbDsKICBAb3ZlcnJpZGUKICBmaW5hbCBBc3luY01hcmtlciBhc3luY01hcmtlcjsKCiAgS0Z1bmN0aW9uKEtMaWJyYXJ5IGxpYnJhcnksIEtDbGFzcyBlbmNsb3NpbmdDbGFzcywgTmFtZSBuYW1lLAogICAgICB0aGlzLnBhcmFtZXRlclN0cnVjdHVyZSwgdGhpcy5hc3luY01hcmtlciwKICAgICAge2Jvb2wgaXNTdGF0aWM6IGZhbHNlLCB0aGlzLmlzRXh0ZXJuYWw6IGZhbHNlfSkKICAgICAgOiBzdXBlcihsaWJyYXJ5LCBlbmNsb3NpbmdDbGFzcywgbmFtZSwgaXNTdGF0aWM6IGlzU3RhdGljKTsKfQoKYWJzdHJhY3QgY2xhc3MgS0NvbnN0cnVjdG9yIGV4dGVuZHMgS0Z1bmN0aW9uCiAgICBpbXBsZW1lbnRzIENvbnN0cnVjdG9yRW50aXR5LCBJbmRleGVkQ29uc3RydWN0b3IgewogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgaXNDb25zdDsKCiAgS0NvbnN0cnVjdG9yKAogICAgICBLQ2xhc3MgZW5jbG9zaW5nQ2xhc3MsIE5hbWUgbmFtZSwgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAge2Jvb2wgaXNFeHRlcm5hbCwgdGhpcy5pc0NvbnN0fSkKICAgICAgOiBzdXBlcihlbmNsb3NpbmdDbGFzcy5saWJyYXJ5LCBlbmNsb3NpbmdDbGFzcywgbmFtZSwgcGFyYW1ldGVyU3RydWN0dXJlLAogICAgICAgICAgICBBc3luY01hcmtlci5TWU5DLAogICAgICAgICAgICBpc0V4dGVybmFsOiBpc0V4dGVybmFsKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNDb25zdHJ1Y3RvciA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0luc3RhbmNlTWVtYmVyID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1N0YXRpYyA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNUb3BMZXZlbCA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNGcm9tRW52aXJvbm1lbnRDb25zdHJ1Y3RvciA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfa2luZCA9PiAnY29uc3RydWN0b3InOwp9CgpjbGFzcyBLR2VuZXJhdGl2ZUNvbnN0cnVjdG9yIGV4dGVuZHMgS0NvbnN0cnVjdG9yIHsKICBLR2VuZXJhdGl2ZUNvbnN0cnVjdG9yKAogICAgICBLQ2xhc3MgZW5jbG9zaW5nQ2xhc3MsIE5hbWUgbmFtZSwgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAge2Jvb2wgaXNFeHRlcm5hbCwgYm9vbCBpc0NvbnN0fSkKICAgICAgOiBzdXBlcihlbmNsb3NpbmdDbGFzcywgbmFtZSwgcGFyYW1ldGVyU3RydWN0dXJlLAogICAgICAgICAgICBpc0V4dGVybmFsOiBpc0V4dGVybmFsLCBpc0NvbnN0OiBpc0NvbnN0KTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNGYWN0b3J5Q29uc3RydWN0b3IgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yID0+IHRydWU7Cn0KCmNsYXNzIEtGYWN0b3J5Q29uc3RydWN0b3IgZXh0ZW5kcyBLQ29uc3RydWN0b3IgewogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgaXNGcm9tRW52aXJvbm1lbnRDb25zdHJ1Y3RvcjsKCiAgS0ZhY3RvcnlDb25zdHJ1Y3RvcigKICAgICAgS0NsYXNzIGVuY2xvc2luZ0NsYXNzLCBOYW1lIG5hbWUsIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgIHtib29sIGlzRXh0ZXJuYWwsIGJvb2wgaXNDb25zdCwgdGhpcy5pc0Zyb21FbnZpcm9ubWVudENvbnN0cnVjdG9yfSkKICAgICAgOiBzdXBlcihlbmNsb3NpbmdDbGFzcywgbmFtZSwgcGFyYW1ldGVyU3RydWN0dXJlLAogICAgICAgICAgICBpc0V4dGVybmFsOiBpc0V4dGVybmFsLCBpc0NvbnN0OiBpc0NvbnN0KTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNGYWN0b3J5Q29uc3RydWN0b3IgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNHZW5lcmF0aXZlQ29uc3RydWN0b3IgPT4gZmFsc2U7Cn0KCmNsYXNzIEtNZXRob2QgZXh0ZW5kcyBLRnVuY3Rpb24gewogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgaXNBYnN0cmFjdDsKCiAgS01ldGhvZChLTGlicmFyeSBsaWJyYXJ5LCBLQ2xhc3MgZW5jbG9zaW5nQ2xhc3MsIE5hbWUgbmFtZSwKICAgICAgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSwgQXN5bmNNYXJrZXIgYXN5bmNNYXJrZXIsCiAgICAgIHtib29sIGlzU3RhdGljLCBib29sIGlzRXh0ZXJuYWwsIHRoaXMuaXNBYnN0cmFjdH0pCiAgICAgIDogc3VwZXIobGlicmFyeSwgZW5jbG9zaW5nQ2xhc3MsIG5hbWUsIHBhcmFtZXRlclN0cnVjdHVyZSwgYXN5bmNNYXJrZXIsCiAgICAgICAgICAgIGlzU3RhdGljOiBpc1N0YXRpYywgaXNFeHRlcm5hbDogaXNFeHRlcm5hbCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRnVuY3Rpb24gPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfa2luZCA9PiAnbWV0aG9kJzsKfQoKY2xhc3MgS0dldHRlciBleHRlbmRzIEtGdW5jdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0Fic3RyYWN0OwoKICBLR2V0dGVyKEtMaWJyYXJ5IGxpYnJhcnksIEtDbGFzcyBlbmNsb3NpbmdDbGFzcywgTmFtZSBuYW1lLAogICAgICBBc3luY01hcmtlciBhc3luY01hcmtlciwKICAgICAge2Jvb2wgaXNTdGF0aWMsIGJvb2wgaXNFeHRlcm5hbCwgdGhpcy5pc0Fic3RyYWN0fSkKICAgICAgOiBzdXBlcihsaWJyYXJ5LCBlbmNsb3NpbmdDbGFzcywgbmFtZSwgY29uc3QgUGFyYW1ldGVyU3RydWN0dXJlLmdldHRlcigpLAogICAgICAgICAgICBhc3luY01hcmtlciwKICAgICAgICAgICAgaXNTdGF0aWM6IGlzU3RhdGljLCBpc0V4dGVybmFsOiBpc0V4dGVybmFsKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNHZXR0ZXIgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfa2luZCA9PiAnZ2V0dGVyJzsKfQoKY2xhc3MgS1NldHRlciBleHRlbmRzIEtGdW5jdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0Fic3RyYWN0OwoKICBLU2V0dGVyKEtMaWJyYXJ5IGxpYnJhcnksIEtDbGFzcyBlbmNsb3NpbmdDbGFzcywgTmFtZSBuYW1lLAogICAgICB7Ym9vbCBpc1N0YXRpYywgYm9vbCBpc0V4dGVybmFsLCB0aGlzLmlzQWJzdHJhY3R9KQogICAgICA6IHN1cGVyKGxpYnJhcnksIGVuY2xvc2luZ0NsYXNzLCBuYW1lLCBjb25zdCBQYXJhbWV0ZXJTdHJ1Y3R1cmUuc2V0dGVyKCksCiAgICAgICAgICAgIEFzeW5jTWFya2VyLlNZTkMsCiAgICAgICAgICAgIGlzU3RhdGljOiBpc1N0YXRpYywgaXNFeHRlcm5hbDogaXNFeHRlcm5hbCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQXNzaWduYWJsZSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1NldHRlciA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9raW5kID0+ICdzZXR0ZXInOwp9CgpjbGFzcyBLRmllbGQgZXh0ZW5kcyBLTWVtYmVyIGltcGxlbWVudHMgRmllbGRFbnRpdHksIEluZGV4ZWRGaWVsZCB7CiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0Fzc2lnbmFibGU7CiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0NvbnN0OwoKICBLRmllbGQoS0xpYnJhcnkgbGlicmFyeSwgS0NsYXNzIGVuY2xvc2luZ0NsYXNzLCBOYW1lIG5hbWUsCiAgICAgIHtib29sIGlzU3RhdGljLCB0aGlzLmlzQXNzaWduYWJsZSwgdGhpcy5pc0NvbnN0fSkKICAgICAgOiBzdXBlcihsaWJyYXJ5LCBlbmNsb3NpbmdDbGFzcywgbmFtZSwgaXNTdGF0aWM6IGlzU3RhdGljKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNGaWVsZCA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9raW5kID0+ICdmaWVsZCc7Cn0KCmNsYXNzIEtUeXBlVmFyaWFibGUgZXh0ZW5kcyBJbmRleGVkVHlwZVZhcmlhYmxlIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBFbnRpdHkgdHlwZURlY2xhcmF0aW9uOwogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lOwogIEBvdmVycmlkZQogIGZpbmFsIGludCBpbmRleDsKCiAgS1R5cGVWYXJpYWJsZSh0aGlzLnR5cGVEZWNsYXJhdGlvbiwgdGhpcy5uYW1lLCB0aGlzLmluZGV4KTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgJyR7a0VsZW1lbnRQcmVmaXh9dHlwZV92YXJpYWJsZSgke3R5cGVEZWNsYXJhdGlvbi5uYW1lfS4kbmFtZSknOwp9CgpjbGFzcyBLTG9jYWxGdW5jdGlvbiBpbXBsZW1lbnRzIExvY2FsIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBmaW5hbCBNZW1iZXJFbnRpdHkgbWVtYmVyQ29udGV4dDsKICBmaW5hbCBFbnRpdHkgZXhlY3V0YWJsZUNvbnRleHQ7CiAgZmluYWwgaXIuTG9jYWxGdW5jdGlvbiBub2RlOwogIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGU7CgogIEtMb2NhbEZ1bmN0aW9uKAogICAgICB0aGlzLm5hbWUsIHRoaXMubWVtYmVyQ29udGV4dCwgdGhpcy5leGVjdXRhYmxlQ29udGV4dCwgdGhpcy5ub2RlKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyR7a0VsZW1lbnRQcmVmaXh9bG9jYWxfZnVuY3Rpb24nCiAgICAgICcoJHttZW1iZXJDb250ZXh0Lm5hbWV9LiR7bmFtZSA/PyAnPGFub255bW91cz4nfSknOwp9CgpjbGFzcyBLTG9jYWxUeXBlVmFyaWFibGUgaW1wbGVtZW50cyBUeXBlVmFyaWFibGVFbnRpdHkgewogIEBvdmVycmlkZQogIGZpbmFsIEVudGl0eSB0eXBlRGVjbGFyYXRpb247CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGluZGV4OwogIERhcnRUeXBlIGJvdW5kOwogIERhcnRUeXBlIGRlZmF1bHRUeXBlOwoKICBLTG9jYWxUeXBlVmFyaWFibGUodGhpcy50eXBlRGVjbGFyYXRpb24sIHRoaXMubmFtZSwgdGhpcy5pbmRleCk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+CiAgICAgICcke2tFbGVtZW50UHJlZml4fWxvY2FsX3R5cGVfdmFyaWFibGUoJHt0eXBlRGVjbGFyYXRpb24ubmFtZX0uJG5hbWUpJzsKfQqBOABOTjwBNgEoJCMhIQEkASgMFQwaASoBDDoCASQMGgEMFQwZATYBDB8BDDgCASgMGgEMFQElAQw6AgEvDBoMHxQYAVEeAQwhAQwgAQwiAQwdAQwgAQweAQweAQwgAQwdAQwjAQxFAQw8AQwxARQBDDFLAgEpMQwvDBkMIQFAMTZCAgEuNwwWARBPJ1AeJQEMIgEMJgEMHgEMIAEMMgEMJQIBNBpPJzg3AQwqAQwsAgExDCsBF09KODcBDCkBDC0CASIMGQE+RjlOOQEMHwEMIAIBIgwZAT4fOVAZOQEMHQEMIAIBIgwZAT45UB45AQwhAQwdAQwgAgFEDBsMFgE9OEIBDBwBDB8CATIMIAwVDBMBPgEMF0cCASgMFSQiHx0BEkkBDDk6AgE5DCAMFQwTEhgBQwEMF00CASpwYWNrYWdlOmNvbXBpbGVyL3NyYy9rZXJuZWwva2VsZW1lbnRzLmRhcnQzc2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2RhcnQyanNfaW5mby9saWIvaW5mby5kYXJ0wABAaC8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gRGF0YSBwcm9kdWNlZCBieSBkYXJ0MmpzIHdoZW4gcnVuIHdpdGggdGhlIGAtLWR1bXAtaW5mb2AgZmxhZy4KbGlicmFyeSBkYXJ0MmpzX2luZm8uaW5mbzsKCi8vLyBDb21tb24gaW50ZXJmYWNlIHRvIG1hbnkgcGllY2VzIG9mIGluZm9ybWF0aW9uIGdlbmVyYXRlZCBieSB0aGUgZGFydDJqcwovLy8gY29tcGlsZXIgdGhhdCBhcmUgZGlyZWN0bHkgYXNzb2NpYXRlZCB3aXRoIGFuIGVsZW1lbnQgKGNvbXBpbGF0aW9uIHVuaXQsCi8vLyBsaWJyYXJ5LCBjbGFzcywgZnVuY3Rpb24sIG9yIGZpZWxkKS4KYWJzdHJhY3QgY2xhc3MgSW5mbyB7CiAgLy8vIEFuIGlkZW50aWZpZXIgZm9yIHRoZSBraW5kIG9mIGluZm9ybWF0aW9uLgogIEluZm9LaW5kIGdldCBraW5kOwoKICAvLy8gTmFtZSBvZiB0aGUgZWxlbWVudCBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbmZvLgogIFN0cmluZyBuYW1lOwoKICAvLy8gSWQgdXNlZCBieSB0aGUgY29tcGlsZXIgd2hlbiBpbnN0cnVtZW50aW5nIGNvZGUgZm9yIGNvZGUgY292ZXJhZ2UuCiAgLy8gVE9ETyhzaWdtdW5kKTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBjb3VsZCB1c2UgdGhlIHNhbWUgaWQgZm9yCiAgLy8gc2VyaWFsaXphdGlvbiBhbmQgZm9yIGNvdmVyYWdlLiBDb3VsZCB3ZSB1bmlmeSB0aGVtPwogIFN0cmluZyBjb3ZlcmFnZUlkOwoKICAvLy8gQnl0ZXMgdXNlZCBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQuCiAgaW50IHNpemU7CgogIC8vLyBJbmZvIG9mIHRoZSBlbmNsb3NpbmcgZWxlbWVudC4KICBJbmZvIHBhcmVudDsKCiAgVCBhY2NlcHQ8VD4oSW5mb1Zpc2l0b3I8VD4gdmlzaXRvcik7Cn0KCi8vLyBDb21tb24gaW5mb3JtYXRpb24gdXNlZCBmb3IgbW9zdCBraW5kIG9mIGVsZW1lbnRzLgovLyBUT0RPKHNpZ211bmQpOiBhZGQgbW9yZToKLy8gIC0gaW5wdXRTaXplOiBieXRlcyB1c2VkIGluIHRoZSBEYXJ0IHNvdXJjZSBwcm9ncmFtCmFic3RyYWN0IGNsYXNzIEJhc2ljSW5mbyBpbXBsZW1lbnRzIEluZm8gewogIGZpbmFsIEluZm9LaW5kIGtpbmQ7CgogIFN0cmluZyBjb3ZlcmFnZUlkOwogIGludCBzaXplOwogIEluZm8gcGFyZW50OwoKICBTdHJpbmcgbmFtZTsKCiAgLy8vIElmIHVzaW5nIGRlZmVycmVkIGxpYnJhcmllcywgd2hlcmUgdGhlIGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW5mbwogIC8vLyBpcyBnZW5lcmF0ZWQuCiAgT3V0cHV0VW5pdEluZm8gb3V0cHV0VW5pdDsKCiAgQmFzaWNJbmZvKHRoaXMua2luZCwgdGhpcy5uYW1lLCB0aGlzLm91dHB1dFVuaXQsIHRoaXMuc2l6ZSwgdGhpcy5jb3ZlcmFnZUlkKTsKCiAgQmFzaWNJbmZvLmludGVybmFsKHRoaXMua2luZCk7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICcka2luZCAkbmFtZSBbJHNpemVdJzsKfQoKLy8vIEluZm8gYXNzb2NpYXRlZCB3aXRoIGVsZW1lbnRzIGNvbnRhaW5pbmcgZXhlY3V0YWJsZSBjb2RlIChsaWtlIGZpZWxkcyBhbmQKLy8vIG1ldGhvZHMpCmFic3RyYWN0IGNsYXNzIENvZGVJbmZvIGltcGxlbWVudHMgSW5mbyB7CiAgLy8vIEhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gb3IgZmllbGQgZGVwZW5kIG9uIG90aGVycy4KICBMaXN0PERlcGVuZGVuY3lJbmZvPiB1c2VzID0gW107Cn0KCi8vLyBUaGUgZW50aXJlIGluZm9ybWF0aW9uIHByb2R1Y2VkIHdoaWxlIGNvbXBpbGluZyBhIHByb2dyYW0uCmNsYXNzIEFsbEluZm8gewogIC8vLyBTdW1tYXJ5IGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9ncmFtLgogIFByb2dyYW1JbmZvIHByb2dyYW07CgogIC8vLyBJbmZvcm1hdGlvbiBhYm91dCBlYWNoIGxpYnJhcnkgcHJvY2Vzc2VkIGJ5IHRoZSBjb21waWxlci4KICBMaXN0PExpYnJhcnlJbmZvPiBsaWJyYXJpZXMgPSA8TGlicmFyeUluZm8+W107CgogIC8vLyBJbmZvcm1hdGlvbiBhYm91dCBlYWNoIGZ1bmN0aW9uIChpbmNsdWRlcyBtZXRob2RzIGFuZCBnZXR0ZXJzIGluIGFueQogIC8vLyBsaWJyYXJ5KQogIExpc3Q8RnVuY3Rpb25JbmZvPiBmdW5jdGlvbnMgPSA8RnVuY3Rpb25JbmZvPltdOwoKICAvLy8gSW5mb3JtYXRpb24gYWJvdXQgdHlwZSBkZWZzIGluIHRoZSBwcm9ncmFtLgogIExpc3Q8VHlwZWRlZkluZm8+IHR5cGVkZWZzID0gPFR5cGVkZWZJbmZvPltdOwoKICAvLy8gSW5mb3JtYXRpb24gYWJvdXQgZWFjaCBjbGFzcyAoaW4gYW55IGxpYnJhcnkpLgogIExpc3Q8Q2xhc3NJbmZvPiBjbGFzc2VzID0gPENsYXNzSW5mbz5bXTsKCiAgLy8vIEluZm9ybWF0aW9uIGFib3V0IGZpZWxkcyAoaW4gYW55IGNsYXNzKS4KICBMaXN0PEZpZWxkSW5mbz4gZmllbGRzID0gPEZpZWxkSW5mbz5bXTsKCiAgLy8vIEluZm9ybWF0aW9uIGFib3V0IGNvbnN0YW50cyBhbnl3aGVyZSBpbiB0aGUgcHJvZ3JhbS4KICAvLyBUT0RPKHNpZ211bmQpOiBleHBhbmQgZG9jcyBhYm91dCBjYW5vbmljYWxpemF0aW9uLiBXZSBkb24ndCBwdXQgdGhlc2UKICAvLyBpbnNpZGUgbGlicmFyeSBiZWNhdXNlIGEgc2luZ2xlIGNvbnN0YW50IGNhbiBiZSB1c2VkIGluIG1vcmUgdGhhbiBvbmUgbGliLAogIC8vIGFuZCB3ZSdsbCBpbmNsdWRlIGl0IG9ubHkgb25jZSBpbiB0aGUgb3V0cHV0LgogIExpc3Q8Q29uc3RhbnRJbmZvPiBjb25zdGFudHMgPSA8Q29uc3RhbnRJbmZvPltdOwoKICAvLy8gSW5mb3JtYXRpb24gYWJvdXQgY2xvc3VyZXMgYW55d2hlcmUgaW4gdGhlIHByb2dyYW0uCiAgTGlzdDxDbG9zdXJlSW5mbz4gY2xvc3VyZXMgPSA8Q2xvc3VyZUluZm8+W107CgogIC8vLyBJbmZvcm1hdGlvbiBhYm91dCBvdXRwdXQgdW5pdHMgKHNob3VsZCBiZSBqdXN0IG9uZSBlbnRyeSBpZiBub3QgdXNpbmcKICAvLy8gZGVmZXJyZWQgbG9hZGluZykuCiAgTGlzdDxPdXRwdXRVbml0SW5mbz4gb3V0cHV0VW5pdHMgPSA8T3V0cHV0VW5pdEluZm8+W107CgogIC8vLyBEZXRhaWxzIGFib3V0IGFsbCBkZWZlcnJlZCBpbXBvcnRzIGFuZCB3aGF0IGZpbGVzIHdvdWxkIGJlIGxvYWRlZCB3aGVuIHRoZQogIC8vLyBpbXBvcnQgaXMgcmVzb2x2ZWQuCiAgLy8gVE9ETyhzaWdtdW5kKTogdXNlIGEgZGlmZmVyZW50IGZvcm1hdCBmb3IgZHVtcC1pbmZvLiBUaGlzIGN1cnJlbnRseSBlbWl0cwogIC8vIHRoZSBzYW1lIG1hcCB0aGF0IGlzIGNyZWF0ZWQgZm9yIHRoZSBgLS1kZWZlcnJlZC1tYXBgIGZsYWcuCiAgTWFwPFN0cmluZywgTWFwPFN0cmluZywgZHluYW1pYz4+IGRlZmVycmVkRmlsZXM7CgogIC8vLyBBIG5ldyByZXByZXNlbnRhdGlvbiBvZiBkZXBlbmRlbmNpZXMgZnJvbSBvbmUgaW5mbyB0byBhbm90aGVyLiBBbiBlbnRyeSBpbgogIC8vLyB0aGlzIG1hcCBpbmRpY2F0ZXMgdGhhdCBhbiBbSW5mb10gZGVwZW5kcyBvbiBhbm90aGVyIChlLmcuIGEgZnVuY3Rpb24KICAvLy8gaW52b2tlcyBhbm90aGVyKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGUgZGF0YSBpbiB0aGlzIGZpZWxkIG1pZ2h0IG5vdCBiZQogIC8vLyBhY2N1cmF0ZSB5ZXQgKHRoaXMgaXMgd29yayBpbiBwcm9ncmVzcykuCiAgTWFwPEluZm8sIExpc3Q8SW5mbz4+IGRlcGVuZGVuY2llcyA9IHt9OwoKICAvLy8gTWFqb3IgdmVyc2lvbiBpbmRpY2F0aW5nIGJyZWFraW5nIGNoYW5nZXMgaW4gdGhlIGZvcm1hdC4gQSBuZXcgdmVyc2lvbgogIC8vLyBtZWFucyB0aGF0IGFuIG9sZCBkZXNlcmlhbGl6YXRpb24gYWxnb3JpdGhtIHdpbGwgbm90IHdvcmsgd2l0aCB0aGUgbmV3CiAgLy8vIGZvcm1hdC4KICBmaW5hbCBpbnQgdmVyc2lvbiA9IDY7CgogIC8vLyBNaW5vciB2ZXJzaW9uIGluZGljYXRpbmcgbm9uLWJyZWFraW5nIGNoYW5nZXMgaW4gdGhlIGZvcm1hdC4gQSBjaGFuZ2UgaW4KICAvLy8gdGhpcyB2ZXJzaW9uIG51bWJlciBtZWFucyB0aGF0IHRoZSBqc29uIHBhcnNpbmcgaW4gdGhpcyBsaWJyYXJ5IGZyb20gYQogIC8vLyBwcmV2aW91cyB3aWxsIGNvbnRpbnVlIHRvIHdvcmsgYWZ0ZXIgdGhlIGNoYW5nZS4gVGhpcyBpcyB0eXBpY2FsbHkKICAvLy8gaW5jcmVhc2VkIHdoZW4gYWRkaW5nIG5ldyBlbnRyaWVzIHRvIHRoZSBmaWxlIGZvcm1hdC4KICAvLyBOb3RlOiB0aGUgZHVtcC1pbmZvLnZpZXdlciBhcHAgd2FzIHdyaXR0ZW4gdXNpbmcgYSBqc29uIHBhcnNlciB2ZXJzaW9uIDMuMi4KICBmaW5hbCBpbnQgbWlub3JWZXJzaW9uID0gMDsKCiAgQWxsSW5mbygpOwoKICBUIGFjY2VwdDxUPihJbmZvVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0QWxsKHRoaXMpOwp9CgpjbGFzcyBQcm9ncmFtSW5mbyB7CiAgRnVuY3Rpb25JbmZvIGVudHJ5cG9pbnQ7CiAgaW50IHNpemU7CiAgU3RyaW5nIGRhcnQyanNWZXJzaW9uOwogIERhdGVUaW1lIGNvbXBpbGF0aW9uTW9tZW50OwogIER1cmF0aW9uIGNvbXBpbGF0aW9uRHVyYXRpb247CiAgRHVyYXRpb24gdG9Kc29uRHVyYXRpb247CiAgRHVyYXRpb24gZHVtcEluZm9EdXJhdGlvbjsKCiAgLy8vIGB0cnVlYCBpZiBgbm9TdWNoTWV0aG9kYCBpcyB1c2VkLgogIGJvb2wgbm9TdWNoTWV0aG9kRW5hYmxlZDsKCiAgLy8vIGB0cnVlYCBpZiBgT2JqZWN0LnJ1bnRpbWVUeXBlYCBpcyB1c2VkLgogIGJvb2wgaXNSdW50aW1lVHlwZVVzZWQ7CgogIC8vLyBgdHJ1ZWAgaWYgdGhlIGBkYXJ0Omlzb2xhdGVgIGxpYnJhcnkgaXMgaW4gdXNlLgogIGJvb2wgaXNJc29sYXRlSW5Vc2U7CgogIC8vLyBgdHJ1ZWAgaWYgYEZ1bmN0aW9uLmFwcGx5YCBpcyB1c2VkLgogIGJvb2wgaXNGdW5jdGlvbkFwcGx5VXNlZDsKCiAgLy8vIGB0cnVlYCBpZiBgZGFydDptaXJyb3JzYCBmZWF0dXJlcyBhcmUgdXNlZC4KICBib29sIGlzTWlycm9yc1VzZWQ7CgogIGJvb2wgbWluaWZpZWQ7CgogIFByb2dyYW1JbmZvKAogICAgICB7dGhpcy5lbnRyeXBvaW50LAogICAgICB0aGlzLnNpemUsCiAgICAgIHRoaXMuZGFydDJqc1ZlcnNpb24sCiAgICAgIHRoaXMuY29tcGlsYXRpb25Nb21lbnQsCiAgICAgIHRoaXMuY29tcGlsYXRpb25EdXJhdGlvbiwKICAgICAgdGhpcy50b0pzb25EdXJhdGlvbiwKICAgICAgdGhpcy5kdW1wSW5mb0R1cmF0aW9uLAogICAgICB0aGlzLm5vU3VjaE1ldGhvZEVuYWJsZWQsCiAgICAgIHRoaXMuaXNSdW50aW1lVHlwZVVzZWQsCiAgICAgIHRoaXMuaXNJc29sYXRlSW5Vc2UsCiAgICAgIHRoaXMuaXNGdW5jdGlvbkFwcGx5VXNlZCwKICAgICAgdGhpcy5pc01pcnJvcnNVc2VkLAogICAgICB0aGlzLm1pbmlmaWVkfSk7CgogIFQgYWNjZXB0PFQ+KEluZm9WaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRQcm9ncmFtKHRoaXMpOwp9CgovLy8gSW5mbyBhc3NvY2lhdGVkIHdpdGggYSBsaWJyYXJ5IGVsZW1lbnQuCmNsYXNzIExpYnJhcnlJbmZvIGV4dGVuZHMgQmFzaWNJbmZvIHsKICAvLy8gQ2Fub25pY2FsIHVyaSB0aGF0IGlkZW50aWZpZXMgdGhlIGxpYnJhcnkuCiAgVXJpIHVyaTsKCiAgLy8vIFRvcCBsZXZlbCBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gdGhlIGxpYnJhcnkuCiAgTGlzdDxGdW5jdGlvbkluZm8+IHRvcExldmVsRnVuY3Rpb25zID0gPEZ1bmN0aW9uSW5mbz5bXTsKCiAgLy8vIFRvcCBsZXZlbCBmaWVsZHMgZGVmaW5lZCB3aXRoaW4gdGhlIGxpYnJhcnkuCiAgTGlzdDxGaWVsZEluZm8+IHRvcExldmVsVmFyaWFibGVzID0gPEZpZWxkSW5mbz5bXTsKCiAgLy8vIENsYXNzZXMgZGVmaW5lZCB3aXRoaW4gdGhlIGxpYnJhcnkuCiAgTGlzdDxDbGFzc0luZm8+IGNsYXNzZXMgPSA8Q2xhc3NJbmZvPltdOwoKICAvLy8gVHlwZWRlZnMgZGVmaW5lZCB3aXRoaW4gdGhlIGxpYnJhcnkuCiAgTGlzdDxUeXBlZGVmSW5mbz4gdHlwZWRlZnMgPSA8VHlwZWRlZkluZm8+W107CgogIC8vIFRPRE8oc2lnbXVuZCk6IGFkZCBoZXJlIGEgbGlzdCBvZiBwYXJ0cy4gVGhhdCBjYW4gaGVscCB1cyBpbXByb3ZlIGhvdyB3ZQogIC8vIGVuY29kZSBzb3VyY2Utc3BhbiBpbmZvcm1hdGlvbiBpbiBtZXRyaWNzIChyYXRoZXIgdGhhbiBpbmNsdWRlIHRoZSB1cmkgb24KICAvLyBlYWNoIGZ1bmN0aW9uLCBpbmNsdWRlIGFuIGluZGV4IGludG8gdGhpcyBsaXN0KS4KCiAgLy8vIFdoZXRoZXIgdGhlcmUgaXMgYW55IGluZm9ybWF0aW9uIHJlY29yZGVkIGZvciB0aGlzIGxpYnJhcnkuCiAgYm9vbCBnZXQgaXNFbXB0eSA9PgogICAgICB0b3BMZXZlbEZ1bmN0aW9ucy5pc0VtcHR5ICYmIHRvcExldmVsVmFyaWFibGVzLmlzRW1wdHkgJiYgY2xhc3Nlcy5pc0VtcHR5OwoKICBMaWJyYXJ5SW5mbyhTdHJpbmcgbmFtZSwgdGhpcy51cmksIE91dHB1dFVuaXRJbmZvIG91dHB1dFVuaXQsIGludCBzaXplKQogICAgICA6IHN1cGVyKEluZm9LaW5kLmxpYnJhcnksIG5hbWUsIG91dHB1dFVuaXQsIHNpemUsIG51bGwpOwoKICBMaWJyYXJ5SW5mby5pbnRlcm5hbCgpIDogc3VwZXIuaW50ZXJuYWwoSW5mb0tpbmQubGlicmFyeSk7CgogIFQgYWNjZXB0PFQ+KEluZm9WaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRMaWJyYXJ5KHRoaXMpOwp9CgovLy8gSW5mb3JtYXRpb24gYWJvdXQgYW4gb3V0cHV0IHVuaXQuIE5vcm1hbGx5IHRoZXJlIGlzIGp1c3Qgb25lIGZvciB0aGUgZW50aXJlCi8vLyBwcm9ncmFtIHVubGVzcyB0aGUgYXBwbGljYXRpb24gdXNlcyBkZWZlcnJlZCBpbXBvcnRzLCBpbiB3aGljaCBjYXNlIHRoZXJlCi8vLyB3b3VsZCBiZSBhbiBhZGRpdGlvbmFsIG91dHB1dCB1bml0IHBlciBkZWZlcnJlZCBjaHVuay4KY2xhc3MgT3V0cHV0VW5pdEluZm8gZXh0ZW5kcyBCYXNpY0luZm8gewogIFN0cmluZyBmaWxlbmFtZTsKCiAgLy8vIFRoZSBkZWZlcnJlZCBpbXBvcnRzIHRoYXQgd2lsbCBsb2FkIHRoaXMgb3V0cHV0IHVuaXQuCiAgTGlzdDxTdHJpbmc+IGltcG9ydHMgPSA8U3RyaW5nPltdOwoKICBPdXRwdXRVbml0SW5mbyh0aGlzLmZpbGVuYW1lLCBTdHJpbmcgbmFtZSwgaW50IHNpemUpCiAgICAgIDogc3VwZXIoSW5mb0tpbmQub3V0cHV0VW5pdCwgbmFtZSwgbnVsbCwgc2l6ZSwgbnVsbCk7CgogIE91dHB1dFVuaXRJbmZvLmludGVybmFsKCkgOiBzdXBlci5pbnRlcm5hbChJbmZvS2luZC5vdXRwdXRVbml0KTsKCiAgVCBhY2NlcHQ8VD4oSW5mb1Zpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdE91dHB1dCh0aGlzKTsKfQoKLy8vIEluZm9ybWF0aW9uIGFib3V0IGEgY2xhc3MgZWxlbWVudC4KY2xhc3MgQ2xhc3NJbmZvIGV4dGVuZHMgQmFzaWNJbmZvIHsKICAvLy8gV2hldGhlciB0aGUgY2xhc3MgaXMgYWJzdHJhY3QuCiAgYm9vbCBpc0Fic3RyYWN0OwoKICAvLyBUT0RPKHNpZ211bmQpOiBzcGxpdCBzdGF0aWMgdnMgaW5zdGFuY2UgdnMgY2xvc3VyZXMKICAvLy8gRnVuY3Rpb25zIChzdGF0aWMgb3IgaW5zdGFuY2UpIGRlZmluZWQgaW4gdGhlIGNsYXNzLgogIExpc3Q8RnVuY3Rpb25JbmZvPiBmdW5jdGlvbnMgPSA8RnVuY3Rpb25JbmZvPltdOwoKICAvLy8gRmllbGRzIGRlZmluZWQgaW4gdGhlIGNsYXNzLgogIC8vIFRPRE8oc2lnbXVuZCk6IGN1cnJlbnRseSBhcHBlYXJzIHRvIG9ubHkgYmUgcG9wdWxhdGVkIHdpdGggaW5zdGFuY2UgZmllbGRzLAogIC8vIGJ1dCB0aGlzIHNob3VsZCBiZSBmaXhlZC4KICBMaXN0PEZpZWxkSW5mbz4gZmllbGRzID0gPEZpZWxkSW5mbz5bXTsKCiAgQ2xhc3NJbmZvKAogICAgICB7U3RyaW5nIG5hbWUsIHRoaXMuaXNBYnN0cmFjdCwgT3V0cHV0VW5pdEluZm8gb3V0cHV0VW5pdCwgaW50IHNpemU6IDB9KQogICAgICA6IHN1cGVyKEluZm9LaW5kLmNsYXp6LCBuYW1lLCBvdXRwdXRVbml0LCBzaXplLCBudWxsKTsKCiAgQ2xhc3NJbmZvLmludGVybmFsKCkgOiBzdXBlci5pbnRlcm5hbChJbmZvS2luZC5jbGF6eik7CgogIFQgYWNjZXB0PFQ+KEluZm9WaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRDbGFzcyh0aGlzKTsKfQoKLy8vIEEgY29kZSBzcGFuIG9mIGdlbmVyYXRlZCBjb2RlLiBBIFtDb2RlU3Bhbl0gb2JqZWN0IGlzIGFzc29jaWF0ZWQgd2l0aCBhCi8vLyBzaW5nbGUgW0Jhc2ljSW5mb10uIFRoZSBvZmZzZXRzIGluIHRoZSBzcGFuIGNvcnJlc3BvbmRzIHRvIG9mZnNldHMgb24gdGhlCi8vLyBmaWxlIG9mIFtCYXNpY0luZm8ub3V0cHV0VW5pdF0uCmNsYXNzIENvZGVTcGFuIHsKICAvLy8gU3RhcnQgb2Zmc2V0IGluIHRoZSBnZW5lcmF0ZWQgZmlsZS4KICBpbnQgc3RhcnQ7CgogIC8vLyBlbmQgb2Zmc2V0IGluIHRoZSBnZW5lcmF0ZWQgZmlsZS4KICBpbnQgZW5kOwoKICAvLy8gVGhlIGFjdHVhbCBjb2RlIChvcHRpb25hbCwgYmxhbmsgd2hlbiB1c2luZyBhIGNvbXBhY3QgcmVwcmVzZW50YXRpb24gb2YKICAvLy8gdGhlIGVuY29kaW5nKS4KICBTdHJpbmcgdGV4dDsKCiAgQ29kZVNwYW4oe3RoaXMuc3RhcnQsIHRoaXMuZW5kLCB0aGlzLnRleHR9KTsKfQoKLy8vIEluZm9ybWF0aW9uIGFib3V0IGEgY29uc3RhbnQgdmFsdWUuCi8vIFRPRE8oc2lnbXVuZCk6IGFkZCBkZXBlbmRlbmN5IGRhdGEgZm9yIENvbnN0YW50SW5mbwpjbGFzcyBDb25zdGFudEluZm8gZXh0ZW5kcyBCYXNpY0luZm8gewogIC8vLyBUaGUgYWN0dWFsIGdlbmVyYXRlZCBjb2RlIGZvciB0aGUgY29uc3RhbnQuCiAgTGlzdDxDb2RlU3Bhbj4gY29kZTsKCiAgLy8gVE9ETyhzaWdtdW5kKTogQWRkIGNvdmVyYWdlIHN1cHBvcnQgdG8gY29uc3RhbnRzPwogIENvbnN0YW50SW5mbyh7aW50IHNpemU6IDAsIHRoaXMuY29kZSwgT3V0cHV0VW5pdEluZm8gb3V0cHV0VW5pdH0pCiAgICAgIDogc3VwZXIoSW5mb0tpbmQuY29uc3RhbnQsIG51bGwsIG91dHB1dFVuaXQsIHNpemUsIG51bGwpOwoKICBDb25zdGFudEluZm8uaW50ZXJuYWwoKSA6IHN1cGVyLmludGVybmFsKEluZm9LaW5kLmNvbnN0YW50KTsKCiAgVCBhY2NlcHQ8VD4oSW5mb1Zpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdENvbnN0YW50KHRoaXMpOwp9CgovLy8gSW5mb3JtYXRpb24gYWJvdXQgYSBmaWVsZCBlbGVtZW50LgpjbGFzcyBGaWVsZEluZm8gZXh0ZW5kcyBCYXNpY0luZm8gd2l0aCBDb2RlSW5mbyB7CiAgLy8vIFRoZSB0eXBlIG9mIHRoZSBmaWVsZC4KICBTdHJpbmcgdHlwZTsKCiAgLy8vIFRoZSB0eXBlIGluZmVycmVkIGJ5IGRhcnQyanMncyB3aG9sZSBwcm9ncmFtIGFuYWx5c2lzCiAgU3RyaW5nIGluZmVycmVkVHlwZTsKCiAgLy8vIE5lc3RlZCBjbG9zdXJlcyBzZWVuIGluIHRoZSBmaWVsZCBpbml0aWFsaXplci4KICBMaXN0PENsb3N1cmVJbmZvPiBjbG9zdXJlczsKCiAgLy8vIFRoZSBhY3R1YWwgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBmaWVsZC4KICBMaXN0PENvZGVTcGFuPiBjb2RlOwoKICAvLy8gV2hldGhlciB0aGlzIGNvcnJlc3BvbmRzIHRvIGEgY29uc3QgZmllbGQgZGVjbGFyYXRpb24uCiAgYm9vbCBpc0NvbnN0OwoKICAvLy8gV2hlbiBbaXNDb25zdF0gaXMgdHJ1ZSwgdGhlIGNvbnN0YW50IGluaXRpYWxpemVyIGV4cHJlc3Npb24uCiAgQ29uc3RhbnRJbmZvIGluaXRpYWxpemVyOwoKICBGaWVsZEluZm8oCiAgICAgIHtTdHJpbmcgbmFtZSwKICAgICAgU3RyaW5nIGNvdmVyYWdlSWQsCiAgICAgIGludCBzaXplOiAwLAogICAgICB0aGlzLnR5cGUsCiAgICAgIHRoaXMuaW5mZXJyZWRUeXBlLAogICAgICB0aGlzLmNsb3N1cmVzLAogICAgICB0aGlzLmNvZGUsCiAgICAgIE91dHB1dFVuaXRJbmZvIG91dHB1dFVuaXQsCiAgICAgIHRoaXMuaXNDb25zdH0pCiAgICAgIDogc3VwZXIoSW5mb0tpbmQuZmllbGQsIG5hbWUsIG91dHB1dFVuaXQsIHNpemUsIGNvdmVyYWdlSWQpOwoKICBGaWVsZEluZm8uaW50ZXJuYWwoKSA6IHN1cGVyLmludGVybmFsKEluZm9LaW5kLmZpZWxkKTsKCiAgVCBhY2NlcHQ8VD4oSW5mb1Zpc2l0b3I8VD4gdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEZpZWxkKHRoaXMpOwp9CgovLy8gSW5mb3JtYXRpb24gYWJvdXQgYSB0eXBlZGVmIGRlY2xhcmF0aW9uLgpjbGFzcyBUeXBlZGVmSW5mbyBleHRlbmRzIEJhc2ljSW5mbyB7CiAgLy8vIFRoZSBkZWNsYXJlZCB0eXBlLgogIFN0cmluZyB0eXBlOwoKICBUeXBlZGVmSW5mbyhTdHJpbmcgbmFtZSwgdGhpcy50eXBlLCBPdXRwdXRVbml0SW5mbyBvdXRwdXRVbml0KQogICAgICA6IHN1cGVyKEluZm9LaW5kLnR5cGVkZWYsIG5hbWUsIG91dHB1dFVuaXQsIDAsIG51bGwpOwoKICBUeXBlZGVmSW5mby5pbnRlcm5hbCgpIDogc3VwZXIuaW50ZXJuYWwoSW5mb0tpbmQudHlwZWRlZik7CgogIFQgYWNjZXB0PFQ+KEluZm9WaXNpdG9yPFQ+IHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRUeXBlZGVmKHRoaXMpOwp9CgovLy8gSW5mb3JtYXRpb24gYWJvdXQgYSBmdW5jdGlvbiBvciBtZXRob2QuCmNsYXNzIEZ1bmN0aW9uSW5mbyBleHRlbmRzIEJhc2ljSW5mbyB3aXRoIENvZGVJbmZvIHsKICBzdGF0aWMgY29uc3QgaW50IFRPUF9MRVZFTF9GVU5DVElPTl9LSU5EID0gMDsKICBzdGF0aWMgY29uc3QgaW50IENMT1NVUkVfRlVOQ1RJT05fS0lORCA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBNRVRIT0RfRlVOQ1RJT05fS0lORCA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBDT05TVFJVQ1RPUl9GVU5DVElPTl9LSU5EID0gMzsKCiAgLy8vIEtpbmQgb2YgZnVuY3Rpb24gKHRvcC1sZXZlbCBmdW5jdGlvbiwgY2xvc3VyZSwgbWV0aG9kLCBvciBjb25zdHJ1Y3RvcikuCiAgaW50IGZ1bmN0aW9uS2luZDsKCiAgLy8vIE1vZGlmaWVycyBhcHBsaWVkIHRvIHRoaXMgZnVuY3Rpb24uCiAgRnVuY3Rpb25Nb2RpZmllcnMgbW9kaWZpZXJzOwoKICAvLy8gTmVzdGVkIGNsb3N1cmVzIHRoYXQgYXBwZWFyIHdpdGhpbiB0aGUgYm9keSBvZiB0aGlzIGZ1bmN0aW9uLgogIExpc3Q8Q2xvc3VyZUluZm8+IGNsb3N1cmVzOwoKICAvLy8gVGhlIHR5cGUgb2YgdGhpcyBmdW5jdGlvbi4KICBTdHJpbmcgdHlwZTsKCiAgLy8vIFRoZSBkZWNsYXJlZCByZXR1cm4gdHlwZS4KICBTdHJpbmcgcmV0dXJuVHlwZTsKCiAgLy8vIFRoZSBpbmZlcnJlZCByZXR1cm4gdHlwZS4KICBTdHJpbmcgaW5mZXJyZWRSZXR1cm5UeXBlOwoKICAvLy8gTmFtZSBhbmQgdHlwZSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBwYXJhbWV0ZXIuCiAgTGlzdDxQYXJhbWV0ZXJJbmZvPiBwYXJhbWV0ZXJzOwoKICAvLy8gU2lkZS1lZmZlY3RzLgogIC8vIFRPRE8oc2lnbXVuZCk6IHNlcmlhbGl6ZSBtb3JlIHByZWNpc2VseSwgbm90IGp1c3QgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uCiAgU3RyaW5nIHNpZGVFZmZlY3RzOwoKICAvLy8gSG93IG1hbnkgZnVuY3Rpb24gY2FsbHMgd2VyZSBpbmxpbmVkIGludG8gdGhpcyBmdW5jdGlvbi4KICBpbnQgaW5saW5lZENvdW50OwoKICAvLy8gVGhlIGFjdHVhbCBnZW5lcmF0ZWQgY29kZS4KICBMaXN0PENvZGVTcGFuPiBjb2RlOwoKICBGdW5jdGlvbkluZm8oCiAgICAgIHtTdHJpbmcgbmFtZSwKICAgICAgU3RyaW5nIGNvdmVyYWdlSWQsCiAgICAgIE91dHB1dFVuaXRJbmZvIG91dHB1dFVuaXQsCiAgICAgIGludCBzaXplOiAwLAogICAgICB0aGlzLmZ1bmN0aW9uS2luZCwKICAgICAgdGhpcy5tb2RpZmllcnMsCiAgICAgIHRoaXMuY2xvc3VyZXMsCiAgICAgIHRoaXMudHlwZSwKICAgICAgdGhpcy5yZXR1cm5UeXBlLAogICAgICB0aGlzLmluZmVycmVkUmV0dXJuVHlwZSwKICAgICAgdGhpcy5wYXJhbWV0ZXJzLAogICAgICB0aGlzLnNpZGVFZmZlY3RzLAogICAgICB0aGlzLmlubGluZWRDb3VudCwKICAgICAgdGhpcy5jb2RlfSkKICAgICAgOiBzdXBlcihJbmZvS2luZC5mdW5jdGlvbiwgbmFtZSwgb3V0cHV0VW5pdCwgc2l6ZSwgY292ZXJhZ2VJZCk7CgogIEZ1bmN0aW9uSW5mby5pbnRlcm5hbCgpIDogc3VwZXIuaW50ZXJuYWwoSW5mb0tpbmQuZnVuY3Rpb24pOwoKICBUIGFjY2VwdDxUPihJbmZvVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0RnVuY3Rpb24odGhpcyk7Cn0KCi8vLyBJbmZvcm1hdGlvbiBhYm91dCBhIGNsb3N1cmUsIGFsc28ga25vd24gYXMgYSBsb2NhbCBmdW5jdGlvbi4KY2xhc3MgQ2xvc3VyZUluZm8gZXh0ZW5kcyBCYXNpY0luZm8gewogIC8vLyBUaGUgZnVuY3Rpb24gdGhhdCBpcyB3cmFwcGVkIGJ5IHRoaXMgY2xvc3VyZS4KICBGdW5jdGlvbkluZm8gZnVuY3Rpb247CgogIENsb3N1cmVJbmZvKAogICAgICB7U3RyaW5nIG5hbWUsIE91dHB1dFVuaXRJbmZvIG91dHB1dFVuaXQsIGludCBzaXplOiAwLCB0aGlzLmZ1bmN0aW9ufSkKICAgICAgOiBzdXBlcihJbmZvS2luZC5jbG9zdXJlLCBuYW1lLCBvdXRwdXRVbml0LCBzaXplLCBudWxsKTsKCiAgQ2xvc3VyZUluZm8uaW50ZXJuYWwoKSA6IHN1cGVyLmludGVybmFsKEluZm9LaW5kLmNsb3N1cmUpOwoKICBUIGFjY2VwdDxUPihJbmZvVmlzaXRvcjxUPiB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0Q2xvc3VyZSh0aGlzKTsKfQoKLy8vIEluZm9ybWF0aW9uIGFib3V0IGhvdyBhIGRlcGVuZGVuY3kgaXMgdXNlZC4KY2xhc3MgRGVwZW5kZW5jeUluZm8gewogIC8vLyBUaGUgZGVwZW5kZW5jeSwgZWl0aGVyIGEgRnVuY3Rpb25JbmZvIG9yIEZpZWxkSW5mby4KICBmaW5hbCBJbmZvIHRhcmdldDsKCiAgLy8vIEVpdGhlciBhIHNlbGVjdG9yIG1hc2sgaW5kaWNhdGluZyBob3cgdGhpcyBpcyB1c2VkLCBvciAnaW5saW5lZCcuCiAgLy8gVE9ETyhzaWdtdW5kKTogc3BsaXQgbWFzayBpbnRvIGFuIGVudW0gb3Igc29tZXRoaW5nIG1vcmUgcHJlY2lzZSB0byByZWFsbHkKICAvLyBkZXNjcmliZSB0aGUgZGVwZW5kZW5jaWVzIGluIGRldGFpbC4KICBmaW5hbCBTdHJpbmcgbWFzazsKCiAgRGVwZW5kZW5jeUluZm8odGhpcy50YXJnZXQsIHRoaXMubWFzayk7Cn0KCi8vLyBOYW1lIGFuZCB0eXBlIGluZm9ybWF0aW9uIGFib3V0IGEgZnVuY3Rpb24gcGFyYW1ldGVyLgpjbGFzcyBQYXJhbWV0ZXJJbmZvIHsKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBmaW5hbCBTdHJpbmcgdHlwZTsKICBmaW5hbCBTdHJpbmcgZGVjbGFyZWRUeXBlOwoKICBQYXJhbWV0ZXJJbmZvKHRoaXMubmFtZSwgdGhpcy50eXBlLCB0aGlzLmRlY2xhcmVkVHlwZSk7Cn0KCi8vLyBNb2RpZmllcnMgdGhhdCBtYXkgYXBwbHkgdG8gbWV0aG9kcy4KY2xhc3MgRnVuY3Rpb25Nb2RpZmllcnMgewogIGZpbmFsIGJvb2wgaXNTdGF0aWM7CiAgZmluYWwgYm9vbCBpc0NvbnN0OwogIGZpbmFsIGJvb2wgaXNGYWN0b3J5OwogIGZpbmFsIGJvb2wgaXNFeHRlcm5hbDsKCiAgRnVuY3Rpb25Nb2RpZmllcnMoCiAgICAgIHt0aGlzLmlzU3RhdGljOiBmYWxzZSwKICAgICAgdGhpcy5pc0NvbnN0OiBmYWxzZSwKICAgICAgdGhpcy5pc0ZhY3Rvcnk6IGZhbHNlLAogICAgICB0aGlzLmlzRXh0ZXJuYWw6IGZhbHNlfSk7Cn0KCi8vLyBQb3NzaWJsZSB2YWx1ZXMgb2YgdGhlIGBraW5kYCBmaWVsZCBpbiB0aGUgc2VyaWFsaXplZCBpbmZvcy4KZW51bSBJbmZvS2luZCB7CiAgbGlicmFyeSwKICBjbGF6eiwKICBmdW5jdGlvbiwKICBmaWVsZCwKICBjb25zdGFudCwKICBvdXRwdXRVbml0LAogIHR5cGVkZWYsCiAgY2xvc3VyZSwKfQoKU3RyaW5nIGtpbmRUb1N0cmluZyhJbmZvS2luZCBraW5kKSB7CiAgc3dpdGNoIChraW5kKSB7CiAgICBjYXNlIEluZm9LaW5kLmxpYnJhcnk6CiAgICAgIHJldHVybiAnbGlicmFyeSc7CiAgICBjYXNlIEluZm9LaW5kLmNsYXp6OgogICAgICByZXR1cm4gJ2NsYXNzJzsKICAgIGNhc2UgSW5mb0tpbmQuZnVuY3Rpb246CiAgICAgIHJldHVybiAnZnVuY3Rpb24nOwogICAgY2FzZSBJbmZvS2luZC5maWVsZDoKICAgICAgcmV0dXJuICdmaWVsZCc7CiAgICBjYXNlIEluZm9LaW5kLmNvbnN0YW50OgogICAgICByZXR1cm4gJ2NvbnN0YW50JzsKICAgIGNhc2UgSW5mb0tpbmQub3V0cHV0VW5pdDoKICAgICAgcmV0dXJuICdvdXRwdXRVbml0JzsKICAgIGNhc2UgSW5mb0tpbmQudHlwZWRlZjoKICAgICAgcmV0dXJuICd0eXBlZGVmJzsKICAgIGNhc2UgSW5mb0tpbmQuY2xvc3VyZToKICAgICAgcmV0dXJuICdjbG9zdXJlJzsKICAgIGRlZmF1bHQ6CiAgICAgIHJldHVybiBudWxsOwogIH0KfQoKSW5mb0tpbmQga2luZEZyb21TdHJpbmcoU3RyaW5nIGtpbmQpIHsKICBzd2l0Y2ggKGtpbmQpIHsKICAgIGNhc2UgJ2xpYnJhcnknOgogICAgICByZXR1cm4gSW5mb0tpbmQubGlicmFyeTsKICAgIGNhc2UgJ2NsYXNzJzoKICAgICAgcmV0dXJuIEluZm9LaW5kLmNsYXp6OwogICAgY2FzZSAnZnVuY3Rpb24nOgogICAgICByZXR1cm4gSW5mb0tpbmQuZnVuY3Rpb247CiAgICBjYXNlICdmaWVsZCc6CiAgICAgIHJldHVybiBJbmZvS2luZC5maWVsZDsKICAgIGNhc2UgJ2NvbnN0YW50JzoKICAgICAgcmV0dXJuIEluZm9LaW5kLmNvbnN0YW50OwogICAgY2FzZSAnb3V0cHV0VW5pdCc6CiAgICAgIHJldHVybiBJbmZvS2luZC5vdXRwdXRVbml0OwogICAgY2FzZSAndHlwZWRlZic6CiAgICAgIHJldHVybiBJbmZvS2luZC50eXBlZGVmOwogICAgY2FzZSAnY2xvc3VyZSc6CiAgICAgIHJldHVybiBJbmZvS2luZC5jbG9zdXJlOwogICAgZGVmYXVsdDoKICAgICAgcmV0dXJuIG51bGw7CiAgfQp9CgovLy8gQSBzaW1wbGUgdmlzaXRvciBmb3IgaW5mb3JtYXRpb24gcHJvZHVjZWQgYnkgdGhlIGRhcnQyanMgY29tcGlsZXIuCmFic3RyYWN0IGNsYXNzIEluZm9WaXNpdG9yPFQ+IHsKICBUIHZpc2l0QWxsKEFsbEluZm8gaW5mbyk7CiAgVCB2aXNpdFByb2dyYW0oUHJvZ3JhbUluZm8gaW5mbyk7CiAgVCB2aXNpdExpYnJhcnkoTGlicmFyeUluZm8gaW5mbyk7CiAgVCB2aXNpdENsYXNzKENsYXNzSW5mbyBpbmZvKTsKICBUIHZpc2l0RmllbGQoRmllbGRJbmZvIGluZm8pOwogIFQgdmlzaXRDb25zdGFudChDb25zdGFudEluZm8gaW5mbyk7CiAgVCB2aXNpdEZ1bmN0aW9uKEZ1bmN0aW9uSW5mbyBpbmZvKTsKICBUIHZpc2l0VHlwZWRlZihUeXBlZGVmSW5mbyBpbmZvKTsKICBUIHZpc2l0Q2xvc3VyZShDbG9zdXJlSW5mbyBpbmZvKTsKICBUIHZpc2l0T3V0cHV0KE91dHB1dFVuaXRJbmZvIGluZm8pOwp9CgovLy8gQSB2aXNpdG9yIHRoYXQgcmVjdXJzaXZlbHkgd2Fsa3MgZWFjaCBwb3J0aW9uIG9mIHRoZSBwcm9ncmFtLiBCZWNhdXNlIHRoZQovLy8gaW5mbyByZXByZXNlbnRhdGlvbiBpcyByZWR1bmRhbnQsIHRoaXMgdmlzaXRvciBvbmx5IHdhbGtzIHRoZSBzdHJ1Y3R1cmUgb2YKLy8vIHRoZSBwcm9ncmFtIGFuZCBza2lwcyBzb21lIHJlZHVuZGFudCBsaW5rcy4gRm9yIGV4YW1wbGUsIGV2ZW4gdGhvdWdoCi8vLyB2aXNpdEFsbCBjb250YWlucyByZWZlcmVuY2VzIHRvIGZ1bmN0aW9ucywgdGhpcyB2aXNpdG9yIG9ubHkgcmVjdXJzZXMgdG8KLy8vIHZpc2l0IGxpYnJhcmllcywgdGhlbiBmcm9tIGVhY2ggbGlicmFyeSB3ZSB2aXNpdCBmdW5jdGlvbnMgYW5kIGNsYXNzZXMsIGFuZAovLy8gc28gb24uCmNsYXNzIFJlY3Vyc2l2ZUluZm9WaXNpdG9yIGV4dGVuZHMgSW5mb1Zpc2l0b3I8TnVsbD4gewogIHZpc2l0QWxsKEFsbEluZm8gaW5mbykgewogICAgLy8gTm90ZTogd2UgZG9uJ3QgdmlzaXQgZnVuY3Rpb25zLCBmaWVsZHMsIGNsYXNzZXMsIGFuZCB0eXBlZGVmcyBiZWNhdXNlCiAgICAvLyB0aGV5IGFyZSByZWFjaGFibGUgZnJvbSB0aGUgbGlicmFyeSBpbmZvLgogICAgaW5mby5saWJyYXJpZXMuZm9yRWFjaCh2aXNpdExpYnJhcnkpOwogICAgaW5mby5jb25zdGFudHMuZm9yRWFjaCh2aXNpdENvbnN0YW50KTsKICB9CgogIHZpc2l0UHJvZ3JhbShQcm9ncmFtSW5mbyBpbmZvKSB7fQoKICB2aXNpdExpYnJhcnkoTGlicmFyeUluZm8gaW5mbykgewogICAgaW5mby50b3BMZXZlbEZ1bmN0aW9ucy5mb3JFYWNoKHZpc2l0RnVuY3Rpb24pOwogICAgaW5mby50b3BMZXZlbFZhcmlhYmxlcy5mb3JFYWNoKHZpc2l0RmllbGQpOwogICAgaW5mby5jbGFzc2VzLmZvckVhY2godmlzaXRDbGFzcyk7CiAgICBpbmZvLnR5cGVkZWZzLmZvckVhY2godmlzaXRUeXBlZGVmKTsKICB9CgogIHZpc2l0Q2xhc3MoQ2xhc3NJbmZvIGluZm8pIHsKICAgIGluZm8uZnVuY3Rpb25zLmZvckVhY2godmlzaXRGdW5jdGlvbik7CiAgICBpbmZvLmZpZWxkcy5mb3JFYWNoKHZpc2l0RmllbGQpOwogIH0KCiAgdmlzaXRGaWVsZChGaWVsZEluZm8gaW5mbykgewogICAgaW5mby5jbG9zdXJlcy5mb3JFYWNoKHZpc2l0Q2xvc3VyZSk7CiAgfQoKICB2aXNpdENvbnN0YW50KENvbnN0YW50SW5mbyBpbmZvKSB7fQoKICB2aXNpdEZ1bmN0aW9uKEZ1bmN0aW9uSW5mbyBpbmZvKSB7CiAgICBpbmZvLmNsb3N1cmVzLmZvckVhY2godmlzaXRDbG9zdXJlKTsKICB9CgogIHZpc2l0VHlwZWRlZihUeXBlZGVmSW5mbyBpbmZvKSB7fQogIHZpc2l0T3V0cHV0KE91dHB1dFVuaXRJbmZvIGluZm8pIHt9CiAgdmlzaXRDbG9zdXJlKENsb3N1cmVJbmZvIGluZm8pIHsKICAgIHZpc2l0RnVuY3Rpb24oaW5mby5mdW5jdGlvbik7CiAgfQp9CoInAE5OPAFDGwFMTSkWMRUBNQ8BSUU6FQFGDAElDwEnAgE3HDcrFwEVDA8BDwFPFB0BUAEhAS4CAU4NKjgiAgE/EC0XAUAxAUsPMwEyMAE1KwEvKgE7S1AzMwE6MAFMGTkBURpPQTMBUUxNLysBTU0OGQFPTUk8UR4BDQFBAgEUGwwZHiAbHQEoHAEuGgE2FwEqHAEyFgERAQ8YERseIBsdIB4bIBoXAUUCASwmMQsBNjsBMzUBKisBKzABTk82AUIWUQFKPwE9AUUCAVBOOykTATwlATc8AUMBRAIBJyQlEwE5OzMBI1EfKgENTj0BOQFDAgFMTiQRKg0BKAsBThUPAS8CASg3JzIXATdEQAE/AUYCAScyHQ8BPBcBNR4BLxcBPRABQxwBDRQZExEZFREhFUMBOQFDAgEtJhkPAUE8AT0BRQIBLDUwLi0yAU4UASofAUQeASEPASAVASAdATQiARRQFgE/FAEhFwEQFBkhExkWFREXHxcYGRJGAT8BRgIBQSY0GQEPTD8BPQFFAgEwFzoVAUhQKhUBKgIBOhYVFR0BOgIBKRoXFhgZARUdGx0gAgFBEAsJDAkMDgsLAgElEhsYGRYcGRkWHBkeGxsYGxgNEwQCAScSFB8SHRUgEh0VIBciFB8UHw0TBAIBRyAcJCQgICYmJCQmAgFOT0lNUAs3G00xKisEASQBIzMwJikEAR8rJQQBHykEASYBJSkEASQmIyIEAgEecGFja2FnZTpkYXJ0MmpzX2luZm8vaW5mby5kYXJ0PnNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9kYXJ0MmpzX2luZm8vbGliL2pzb25faW5mb19jb2RlYy5kYXJ0wABO2S8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gQ29udmVydGVycyBhbmQgY29kZWNzIGZvciBjb252ZXJ0aW5nIGJldHdlZW4gSlNPTiBhbmQgW0luZm9dIGNsYXNzZXMuCgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbic7CmltcG9ydCAnZGFydDpjb252ZXJ0JzsKCmltcG9ydCAncGFja2FnZTpjb2xsZWN0aW9uL2NvbGxlY3Rpb24uZGFydCc7CmltcG9ydCAnc3JjL3V0aWwuZGFydCc7CmltcG9ydCAnaW5mby5kYXJ0JzsKCkxpc3Q8U3RyaW5nPiBfdG9Tb3J0ZWRTZXJpYWxpemVkSWRzKAogICAgICAgIEl0ZXJhYmxlPEluZm8+IGluZm9zLCBJZCBGdW5jdGlvbihJbmZvKSBnZXRJZCkgPT4KICAgIGluZm9zLm1hcCgoaSkgPT4gZ2V0SWQoaSkuc2VyaWFsaXplZElkKS50b0xpc3QoKS4uc29ydChjb21wYXJlTmF0dXJhbCk7CgovLyBUT0RPKHNpZ211bmQpOiBhZGQgdW5pdCB0ZXN0cy4KY2xhc3MgSnNvblRvQWxsSW5mb0NvbnZlcnRlciBleHRlbmRzIENvbnZlcnRlcjxNYXA8U3RyaW5nLCBkeW5hbWljPiwgQWxsSW5mbz4gewogIC8vIFVzaW5nIGBNYXNoTWFwYCBoZXJlIGJlY2F1c2UgaXQncyBmYXN0ZXIgdGhhbiB0aGUgZGVmYXVsdCBgTGlua2VkSGFzaE1hcGAuCiAgZmluYWwgTWFwPFN0cmluZywgSW5mbz4gcmVnaXN0cnkgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEluZm8+KCk7CgogIEFsbEluZm8gY29udmVydChNYXA8U3RyaW5nLCBkeW5hbWljPiBqc29uKSB7CiAgICByZWdpc3RyeS5jbGVhcigpOwoKICAgIHZhciByZXN1bHQgPSBuZXcgQWxsSW5mbygpOwogICAgdmFyIGVsZW1lbnRzID0ganNvblsnZWxlbWVudHMnXTsKICAgIC8vIFRPRE8oc3Jhd2xpbnMpOiBTaW5jZSBvbmx5IHRoZSBNYXAgdmFsdWVzIGFyZSBiZWluZyBleHRyYWN0ZWQgYmVsb3csCiAgICAvLyByZXBsYWNlIGBhc2Agd2l0aCBgY2FzdGAgd2hlbiBgY2FzdGAgYmVjb21lcyBhdmFpbGFibGUgaW4gRGFydCAyLjA6CiAgICAvLwogICAgLy8gICAgIC5hZGRBbGwoZWxlbWVudHNbJ2xpYnJhcnknXS52YWx1ZXMuY2FzdDxNYXA+KCkubWFwKHBhcnNlTGlicmFyeSkpOwogICAgcmVzdWx0LmxpYnJhcmllcy5hZGRBbGwoCiAgICAgICAgKGVsZW1lbnRzWydsaWJyYXJ5J10gYXMgTWFwKS52YWx1ZXMubWFwKChsKSA9PiBwYXJzZUxpYnJhcnkobCkpKTsKICAgIHJlc3VsdC5jbGFzc2VzCiAgICAgICAgLmFkZEFsbCgoZWxlbWVudHNbJ2NsYXNzJ10gYXMgTWFwKS52YWx1ZXMubWFwKChjKSA9PiBwYXJzZUNsYXNzKGMpKSk7CiAgICByZXN1bHQuZnVuY3Rpb25zLmFkZEFsbCgKICAgICAgICAoZWxlbWVudHNbJ2Z1bmN0aW9uJ10gYXMgTWFwKS52YWx1ZXMubWFwKChmKSA9PiBwYXJzZUZ1bmN0aW9uKGYpKSk7CgogICAgLy8gVE9ETyhoZXQpOiBSZXZlcnQgdGhpcyB3aGVuIHRoZSBkYXJ0MmpzIHdpdGggdGhlIG5ldyBjb2RlYyBpcyBpbiBzdGFibGUKICAgIGlmIChlbGVtZW50c1snY2xvc3VyZSddICE9IG51bGwpIHsKICAgICAgcmVzdWx0LmNsb3N1cmVzLmFkZEFsbCgKICAgICAgICAgIChlbGVtZW50c1snY2xvc3VyZSddIGFzIE1hcCkudmFsdWVzLm1hcCgoYykgPT4gcGFyc2VDbG9zdXJlKGMpKSk7CiAgICB9CiAgICByZXN1bHQuZmllbGRzCiAgICAgICAgLmFkZEFsbCgoZWxlbWVudHNbJ2ZpZWxkJ10gYXMgTWFwKS52YWx1ZXMubWFwKChmKSA9PiBwYXJzZUZpZWxkKGYpKSk7CiAgICByZXN1bHQudHlwZWRlZnMuYWRkQWxsKAogICAgICAgIChlbGVtZW50c1sndHlwZWRlZiddIGFzIE1hcCkudmFsdWVzLm1hcCgodCkgPT4gcGFyc2VUeXBlZGVmKHQpKSk7CiAgICByZXN1bHQuY29uc3RhbnRzLmFkZEFsbCgKICAgICAgICAoZWxlbWVudHNbJ2NvbnN0YW50J10gYXMgTWFwKS52YWx1ZXMubWFwKChjKSA9PiBwYXJzZUNvbnN0YW50KGMpKSk7CgogICAganNvblsnaG9sZGluZyddLmZvckVhY2goKGssIGRlcHMpIHsKICAgICAgQ29kZUluZm8gc3JjID0gcmVnaXN0cnlba107CiAgICAgIGFzc2VydChzcmMgIT0gbnVsbCk7CiAgICAgIGZvciAodmFyIGRlcCBpbiBkZXBzKSB7CiAgICAgICAgdmFyIHRhcmdldCA9IHJlZ2lzdHJ5W2RlcFsnaWQnXV07CiAgICAgICAgYXNzZXJ0KHRhcmdldCAhPSBudWxsKTsKICAgICAgICBzcmMudXNlcy5hZGQobmV3IERlcGVuZGVuY3lJbmZvKHRhcmdldCwgZGVwWydtYXNrJ10pKTsKICAgICAgfQogICAgfSk7CgogICAganNvblsnZGVwZW5kZW5jaWVzJ10/LmZvckVhY2goKFN0cmluZyBrLCBkZXBlbmRlbmNpZXMpIHsKICAgICAgTGlzdDxTdHJpbmc+IGRlcHMgPSBkZXBlbmRlbmNpZXM7CiAgICAgIHJlc3VsdC5kZXBlbmRlbmNpZXNbcmVnaXN0cnlba11dID0gZGVwcy5tYXAoKGQpID0+IHJlZ2lzdHJ5W2RdKS50b0xpc3QoKTsKICAgIH0pOwoKICAgIHJlc3VsdC5vdXRwdXRVbml0cwogICAgICAgIC5hZGRBbGwoKGpzb25bJ291dHB1dFVuaXRzJ10gYXMgTGlzdCkubWFwKChvKSA9PiBwYXJzZU91dHB1dFVuaXQobykpKTsKCiAgICByZXN1bHQucHJvZ3JhbSA9IHBhcnNlUHJvZ3JhbShqc29uWydwcm9ncmFtJ10pOwoKICAgIGlmIChqc29uWydkZWZlcnJlZEZpbGVzJ10gIT0gbnVsbCkgewogICAgICBmaW5hbCBkZWZlcnJlZEZpbGVzTWFwID0KICAgICAgICAgIChqc29uWydkZWZlcnJlZEZpbGVzJ10gYXMgTWFwKS5jYXN0PFN0cmluZywgTWFwPFN0cmluZywgZHluYW1pYz4+KCk7CiAgICAgIGZvciAoZmluYWwgbGlicmFyeSBpbiBkZWZlcnJlZEZpbGVzTWFwLnZhbHVlcykgewogICAgICAgIGlmIChsaWJyYXJ5WydpbXBvcnRzJ10gIT0gbnVsbCkgewogICAgICAgICAgLy8gVGhlIGltcG9ydE1hcCBuZWVkcyB0byBiZSB0eXBlZCBhcyA8U3RyaW5nLCBMaXN0PFN0cmluZz4+LCBidXQgdGhlCiAgICAgICAgICAvLyBqc29uIHBhcnNlciBwcm9kdWNlcyA8U3RyaW5nLCBkeW5hbWljPi4KICAgICAgICAgIGZpbmFsIGltcG9ydE1hcCA9IGxpYnJhcnlbJ2ltcG9ydHMnXSBhcyBNYXA8U3RyaW5nLCBkeW5hbWljPjsKICAgICAgICAgIGltcG9ydE1hcC5mb3JFYWNoKChwcmVmaXgsIGZpbGVzKSB7CiAgICAgICAgICAgIGltcG9ydE1hcFtwcmVmaXhdID0gKGZpbGVzIGFzIExpc3Q8ZHluYW1pYz4pLmNhc3Q8U3RyaW5nPigpOwogICAgICAgICAgfSk7CiAgICAgICAgICBsaWJyYXJ5WydpbXBvcnRzJ10gPSBpbXBvcnRNYXAuY2FzdDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4oKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmVzdWx0LmRlZmVycmVkRmlsZXMgPSBkZWZlcnJlZEZpbGVzTWFwOwogICAgfQoKICAgIC8vIHRvZG86IHZlcnNpb24sIGV0YwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIE91dHB1dFVuaXRJbmZvIHBhcnNlT3V0cHV0VW5pdChNYXAganNvbikgewogICAgT3V0cHV0VW5pdEluZm8gcmVzdWx0ID0gcGFyc2VJZChqc29uWydpZCddKTsKICAgIHJlc3VsdAogICAgICAuLmZpbGVuYW1lID0ganNvblsnZmlsZW5hbWUnXQogICAgICAuLm5hbWUgPSBqc29uWyduYW1lJ10KICAgICAgLi5zaXplID0ganNvblsnc2l6ZSddOwogICAgcmVzdWx0LmltcG9ydHMKICAgICAgICAuYWRkQWxsKChqc29uWydpbXBvcnRzJ10gYXMgTGlzdCkubWFwKChzKSA9PiBzIGFzIFN0cmluZykgPz8gY29uc3QgW10pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIExpYnJhcnlJbmZvIHBhcnNlTGlicmFyeShNYXAganNvbikgewogICAgTGlicmFyeUluZm8gcmVzdWx0ID0gcGFyc2VJZChqc29uWydpZCddKTsKICAgIHJlc3VsdAogICAgICAuLm5hbWUgPSBqc29uWyduYW1lJ10KICAgICAgLi51cmkgPSBVcmkucGFyc2UoanNvblsnY2Fub25pY2FsVXJpJ10pCiAgICAgIC4ub3V0cHV0VW5pdCA9IHBhcnNlSWQoanNvblsnb3V0cHV0VW5pdCddKQogICAgICAuLnNpemUgPSBqc29uWydzaXplJ107CiAgICBmb3IgKHZhciBjaGlsZCBpbiBqc29uWydjaGlsZHJlbiddLm1hcChwYXJzZUlkKSkgewogICAgICBpZiAoY2hpbGQgaXMgRnVuY3Rpb25JbmZvKSB7CiAgICAgICAgcmVzdWx0LnRvcExldmVsRnVuY3Rpb25zLmFkZChjaGlsZCk7CiAgICAgIH0gZWxzZSBpZiAoY2hpbGQgaXMgRmllbGRJbmZvKSB7CiAgICAgICAgcmVzdWx0LnRvcExldmVsVmFyaWFibGVzLmFkZChjaGlsZCk7CiAgICAgIH0gZWxzZSBpZiAoY2hpbGQgaXMgQ2xhc3NJbmZvKSB7CiAgICAgICAgcmVzdWx0LmNsYXNzZXMuYWRkKGNoaWxkKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQoY2hpbGQgaXMgVHlwZWRlZkluZm8pOwogICAgICAgIHJlc3VsdC50eXBlZGVmcy5hZGQoY2hpbGQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQ2xhc3NJbmZvIHBhcnNlQ2xhc3MoTWFwIGpzb24pIHsKICAgIENsYXNzSW5mbyByZXN1bHQgPSBwYXJzZUlkKGpzb25bJ2lkJ10pOwogICAgcmVzdWx0CiAgICAgIC4ubmFtZSA9IGpzb25bJ25hbWUnXQogICAgICAuLnBhcmVudCA9IHBhcnNlSWQoanNvblsncGFyZW50J10pCiAgICAgIC4ub3V0cHV0VW5pdCA9IHBhcnNlSWQoanNvblsnb3V0cHV0VW5pdCddKQogICAgICAuLnNpemUgPSBqc29uWydzaXplJ10KICAgICAgLi5pc0Fic3RyYWN0ID0ganNvblsnbW9kaWZpZXJzJ11bJ2Fic3RyYWN0J10gPT0gdHJ1ZTsKICAgIGFzc2VydChyZXN1bHQgaXMgQ2xhc3NJbmZvKTsKICAgIGZvciAodmFyIGNoaWxkIGluIGpzb25bJ2NoaWxkcmVuJ10ubWFwKHBhcnNlSWQpKSB7CiAgICAgIGlmIChjaGlsZCBpcyBGdW5jdGlvbkluZm8pIHsKICAgICAgICByZXN1bHQuZnVuY3Rpb25zLmFkZChjaGlsZCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KGNoaWxkIGlzIEZpZWxkSW5mbyk7CiAgICAgICAgcmVzdWx0LmZpZWxkcy5hZGQoY2hpbGQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRmllbGRJbmZvIHBhcnNlRmllbGQoTWFwIGpzb24pIHsKICAgIEZpZWxkSW5mbyByZXN1bHQgPSBwYXJzZUlkKGpzb25bJ2lkJ10pOwogICAgcmV0dXJuIHJlc3VsdAogICAgICAuLm5hbWUgPSBqc29uWyduYW1lJ10KICAgICAgLi5wYXJlbnQgPSBwYXJzZUlkKGpzb25bJ3BhcmVudCddKQogICAgICAuLmNvdmVyYWdlSWQgPSBqc29uWydjb3ZlcmFnZUlkJ10KICAgICAgLi5vdXRwdXRVbml0ID0gcGFyc2VJZChqc29uWydvdXRwdXRVbml0J10pCiAgICAgIC4uc2l6ZSA9IGpzb25bJ3NpemUnXQogICAgICAuLnR5cGUgPSBqc29uWyd0eXBlJ10KICAgICAgLi5pbmZlcnJlZFR5cGUgPSBqc29uWydpbmZlcnJlZFR5cGUnXQogICAgICAuLmNvZGUgPSBwYXJzZUNvZGUoanNvblsnY29kZSddKQogICAgICAuLmlzQ29uc3QgPSBqc29uWydjb25zdCddID8/IGZhbHNlCiAgICAgIC4uaW5pdGlhbGl6ZXIgPSBwYXJzZUlkKGpzb25bJ2luaXRpYWxpemVyJ10pCiAgICAgIC4uY2xvc3VyZXMgPSAoanNvblsnY2hpbGRyZW4nXSBhcyBMaXN0KQogICAgICAgICAgLm1hcDxDbG9zdXJlSW5mbz4oKGMpID0+IHBhcnNlSWQoYykpCiAgICAgICAgICAudG9MaXN0KCk7CiAgfQoKICBDb25zdGFudEluZm8gcGFyc2VDb25zdGFudChNYXAganNvbikgewogICAgQ29uc3RhbnRJbmZvIHJlc3VsdCA9IHBhcnNlSWQoanNvblsnaWQnXSk7CiAgICByZXR1cm4gcmVzdWx0CiAgICAgIC4uY29kZSA9IHBhcnNlQ29kZShqc29uWydjb2RlJ10pCiAgICAgIC4uc2l6ZSA9IGpzb25bJ3NpemUnXQogICAgICAuLm91dHB1dFVuaXQgPSBwYXJzZUlkKGpzb25bJ291dHB1dFVuaXQnXSk7CiAgfQoKICBUeXBlZGVmSW5mbyBwYXJzZVR5cGVkZWYoTWFwIGpzb24pIHsKICAgIFR5cGVkZWZJbmZvIHJlc3VsdCA9IHBhcnNlSWQoanNvblsnaWQnXSk7CiAgICByZXR1cm4gcmVzdWx0CiAgICAgIC4ubmFtZSA9IGpzb25bJ25hbWUnXQogICAgICAuLnBhcmVudCA9IHBhcnNlSWQoanNvblsncGFyZW50J10pCiAgICAgIC4udHlwZSA9IGpzb25bJ3R5cGUnXQogICAgICAuLnNpemUgPSAwOwogIH0KCiAgUHJvZ3JhbUluZm8gcGFyc2VQcm9ncmFtKE1hcCBqc29uKSB7CiAgICB2YXIgcHJvZ3JhbUluZm8gPSBuZXcgUHJvZ3JhbUluZm8oKQogICAgICAuLmVudHJ5cG9pbnQgPSBwYXJzZUlkKGpzb25bJ2VudHJ5cG9pbnQnXSkKICAgICAgLi5zaXplID0ganNvblsnc2l6ZSddCiAgICAgIC4uY29tcGlsYXRpb25Nb21lbnQgPSBEYXRlVGltZS5wYXJzZShqc29uWydjb21waWxhdGlvbk1vbWVudCddKQogICAgICAuLmRhcnQyanNWZXJzaW9uID0ganNvblsnZGFydDJqc1ZlcnNpb24nXQogICAgICAuLm5vU3VjaE1ldGhvZEVuYWJsZWQgPSBqc29uWydub1N1Y2hNZXRob2RFbmFibGVkJ10KICAgICAgLi5pc1J1bnRpbWVUeXBlVXNlZCA9IGpzb25bJ2lzUnVudGltZVR5cGVVc2VkJ10KICAgICAgLi5pc0lzb2xhdGVJblVzZSA9IGpzb25bJ2lzSXNvbGF0ZUluVXNlJ10KICAgICAgLi5pc0Z1bmN0aW9uQXBwbHlVc2VkID0ganNvblsnaXNGdW5jdGlvbkFwcGx5VXNlZCddCiAgICAgIC4uaXNNaXJyb3JzVXNlZCA9IGpzb25bJ2lzTWlycm9yc1VzZWQnXQogICAgICAuLm1pbmlmaWVkID0ganNvblsnbWluaWZpZWQnXTsKCiAgICAvLyBUT0RPKGhldCk6IFJldmVydCB0aGlzIHdoZW4gdGhlIGRhcnQyanMgd2l0aCB0aGUgbmV3IGNvZGVjIGlzIGluIHN0YWJsZQogICAgdmFyIGNvbXBpbGF0aW9uRHVyYXRpb24gPSBqc29uWydjb21waWxhdGlvbkR1cmF0aW9uJ107CiAgICBpZiAoY29tcGlsYXRpb25EdXJhdGlvbiBpcyBTdHJpbmcpIHsKICAgICAgcHJvZ3JhbUluZm8uY29tcGlsYXRpb25EdXJhdGlvbiA9IF9wYXJzZUR1cmF0aW9uKGNvbXBpbGF0aW9uRHVyYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KGNvbXBpbGF0aW9uRHVyYXRpb24gaXMgaW50KTsKICAgICAgcHJvZ3JhbUluZm8uY29tcGlsYXRpb25EdXJhdGlvbiA9CiAgICAgICAgICBuZXcgRHVyYXRpb24obWljcm9zZWNvbmRzOiBjb21waWxhdGlvbkR1cmF0aW9uKTsKICAgIH0KCiAgICB2YXIgdG9Kc29uRHVyYXRpb24gPSBqc29uWyd0b0pzb25EdXJhdGlvbiddOwogICAgaWYgKHRvSnNvbkR1cmF0aW9uIGlzIFN0cmluZykgewogICAgICBwcm9ncmFtSW5mby50b0pzb25EdXJhdGlvbiA9IF9wYXJzZUR1cmF0aW9uKHRvSnNvbkR1cmF0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydCh0b0pzb25EdXJhdGlvbiBpcyBpbnQpOwogICAgICBwcm9ncmFtSW5mby50b0pzb25EdXJhdGlvbiA9IG5ldyBEdXJhdGlvbihtaWNyb3NlY29uZHM6IHRvSnNvbkR1cmF0aW9uKTsKICAgIH0KCiAgICB2YXIgZHVtcEluZm9EdXJhdGlvbiA9IGpzb25bJ2R1bXBJbmZvRHVyYXRpb24nXTsKICAgIGlmIChkdW1wSW5mb0R1cmF0aW9uIGlzIFN0cmluZykgewogICAgICBwcm9ncmFtSW5mby5kdW1wSW5mb0R1cmF0aW9uID0gX3BhcnNlRHVyYXRpb24oZHVtcEluZm9EdXJhdGlvbik7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoZHVtcEluZm9EdXJhdGlvbiBpcyBpbnQpOwogICAgICBwcm9ncmFtSW5mby5kdW1wSW5mb0R1cmF0aW9uID0KICAgICAgICAgIG5ldyBEdXJhdGlvbihtaWNyb3NlY29uZHM6IGR1bXBJbmZvRHVyYXRpb24pOwogICAgfQoKICAgIHJldHVybiBwcm9ncmFtSW5mbzsKICB9CgogIC8vLyBQYXJzZSBhIHN0cmluZyBmb3JtYXR0ZWQgYXMgIlhYOllZOlpaLlpaWlpaIiBpbnRvIGEgW0R1cmF0aW9uXS4KICBEdXJhdGlvbiBfcGFyc2VEdXJhdGlvbihTdHJpbmcgZHVyYXRpb24pIHsKICAgIGlmICghZHVyYXRpb24uY29udGFpbnMoJzonKSkgewogICAgICByZXR1cm4gbmV3IER1cmF0aW9uKG1pbGxpc2Vjb25kczogaW50LnBhcnNlKGR1cmF0aW9uKSk7CiAgICB9CiAgICB2YXIgcGFydHMgPSBkdXJhdGlvbi5zcGxpdCgnOicpOwogICAgdmFyIGhvdXJzID0gZG91YmxlLnBhcnNlKHBhcnRzWzBdKTsKICAgIHZhciBtaW51dGVzID0gZG91YmxlLnBhcnNlKHBhcnRzWzFdKTsKICAgIHZhciBzZWNvbmRzID0gZG91YmxlLnBhcnNlKHBhcnRzWzJdKTsKICAgIGNvbnN0IHNlY29uZHNJbk1pbGxpcyA9IDEwMDA7CiAgICBjb25zdCBtaW51dGVzSW5NaWxsaXMgPSA2MCAqIHNlY29uZHNJbk1pbGxpczsKICAgIGNvbnN0IGhvdXJzSW5NaWxsaXMgPSA2MCAqIG1pbnV0ZXNJbk1pbGxpczsKICAgIHZhciB0b3RhbE1pbGxpcyA9IHNlY29uZHNJbk1pbGxpcyAqIHNlY29uZHMgKwogICAgICAgIG1pbnV0ZXNJbk1pbGxpcyAqIG1pbnV0ZXMgKwogICAgICAgIGhvdXJzSW5NaWxsaXMgKiBob3VyczsKICAgIHJldHVybiBuZXcgRHVyYXRpb24obWlsbGlzZWNvbmRzOiB0b3RhbE1pbGxpcy5yb3VuZCgpKTsKICB9CgogIEZ1bmN0aW9uSW5mbyBwYXJzZUZ1bmN0aW9uKE1hcCBqc29uKSB7CiAgICBGdW5jdGlvbkluZm8gcmVzdWx0ID0gcGFyc2VJZChqc29uWydpZCddKTsKICAgIHJldHVybiByZXN1bHQKICAgICAgLi5uYW1lID0ganNvblsnbmFtZSddCiAgICAgIC4ucGFyZW50ID0gcGFyc2VJZChqc29uWydwYXJlbnQnXSkKICAgICAgLi5jb3ZlcmFnZUlkID0ganNvblsnY292ZXJhZ2VJZCddCiAgICAgIC4ub3V0cHV0VW5pdCA9IHBhcnNlSWQoanNvblsnb3V0cHV0VW5pdCddKQogICAgICAuLnNpemUgPSBqc29uWydzaXplJ10KICAgICAgLi50eXBlID0ganNvblsndHlwZSddCiAgICAgIC4ucmV0dXJuVHlwZSA9IGpzb25bJ3JldHVyblR5cGUnXQogICAgICAuLmluZmVycmVkUmV0dXJuVHlwZSA9IGpzb25bJ2luZmVycmVkUmV0dXJuVHlwZSddCiAgICAgIC4ucGFyYW1ldGVycyA9CiAgICAgICAgICAoanNvblsncGFyYW1ldGVycyddIGFzIExpc3QpLm1hcCgocCkgPT4gcGFyc2VQYXJhbWV0ZXIocCkpLnRvTGlzdCgpCiAgICAgIC4uY29kZSA9IHBhcnNlQ29kZShqc29uWydjb2RlJ10pCiAgICAgIC4uc2lkZUVmZmVjdHMgPSBqc29uWydzaWRlRWZmZWN0cyddCiAgICAgIC4uaW5saW5lZENvdW50ID0ganNvblsnaW5saW5lZENvdW50J10KICAgICAgLi5tb2RpZmllcnMgPQogICAgICAgICAgcGFyc2VNb2RpZmllcnMobmV3IE1hcDxTdHJpbmcsIGJvb2w+LmZyb20oanNvblsnbW9kaWZpZXJzJ10pKQogICAgICAuLmNsb3N1cmVzID0gKGpzb25bJ2NoaWxkcmVuJ10gYXMgTGlzdCkKICAgICAgICAgIC5tYXA8Q2xvc3VyZUluZm8+KChjKSA9PiBwYXJzZUlkKGMpKQogICAgICAgICAgLnRvTGlzdCgpOwogIH0KCiAgUGFyYW1ldGVySW5mbyBwYXJzZVBhcmFtZXRlcihNYXAganNvbikgPT4KICAgICAgbmV3IFBhcmFtZXRlckluZm8oanNvblsnbmFtZSddLCBqc29uWyd0eXBlJ10sIGpzb25bJ2RlY2xhcmVkVHlwZSddKTsKCiAgRnVuY3Rpb25Nb2RpZmllcnMgcGFyc2VNb2RpZmllcnMoTWFwPFN0cmluZywgYm9vbD4ganNvbikgewogICAgcmV0dXJuIG5ldyBGdW5jdGlvbk1vZGlmaWVycygKICAgICAgICBpc1N0YXRpYzoganNvblsnc3RhdGljJ10gPT0gdHJ1ZSwKICAgICAgICBpc0NvbnN0OiBqc29uWydjb25zdCddID09IHRydWUsCiAgICAgICAgaXNGYWN0b3J5OiBqc29uWydmYWN0b3J5J10gPT0gdHJ1ZSwKICAgICAgICBpc0V4dGVybmFsOiBqc29uWydleHRlcm5hbCddID09IHRydWUpOwogIH0KCiAgQ2xvc3VyZUluZm8gcGFyc2VDbG9zdXJlKE1hcCBqc29uKSB7CiAgICBDbG9zdXJlSW5mbyByZXN1bHQgPSBwYXJzZUlkKGpzb25bJ2lkJ10pOwogICAgcmV0dXJuIHJlc3VsdAogICAgICAuLm5hbWUgPSBqc29uWyduYW1lJ10KICAgICAgLi5wYXJlbnQgPSBwYXJzZUlkKGpzb25bJ3BhcmVudCddKQogICAgICAuLm91dHB1dFVuaXQgPSBwYXJzZUlkKGpzb25bJ291dHB1dFVuaXQnXSkKICAgICAgLi5zaXplID0ganNvblsnc2l6ZSddCiAgICAgIC4uZnVuY3Rpb24gPSBwYXJzZUlkKGpzb25bJ2Z1bmN0aW9uJ10pOwogIH0KCiAgSW5mbyBwYXJzZUlkKGlkKSB7CiAgICBTdHJpbmcgc2VyaWFsaXplZElkID0gaWQ7CiAgICBpZiAoc2VyaWFsaXplZElkID09IG51bGwpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gcmVnaXN0cnkucHV0SWZBYnNlbnQoc2VyaWFsaXplZElkLCAoKSB7CiAgICAgIGlmIChzZXJpYWxpemVkSWQuc3RhcnRzV2l0aCgnZnVuY3Rpb24vJykpIHsKICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uSW5mby5pbnRlcm5hbCgpOwogICAgICB9IGVsc2UgaWYgKHNlcmlhbGl6ZWRJZC5zdGFydHNXaXRoKCdjbG9zdXJlLycpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBDbG9zdXJlSW5mby5pbnRlcm5hbCgpOwogICAgICB9IGVsc2UgaWYgKHNlcmlhbGl6ZWRJZC5zdGFydHNXaXRoKCdsaWJyYXJ5LycpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBMaWJyYXJ5SW5mby5pbnRlcm5hbCgpOwogICAgICB9IGVsc2UgaWYgKHNlcmlhbGl6ZWRJZC5zdGFydHNXaXRoKCdjbGFzcy8nKSkgewogICAgICAgIHJldHVybiBuZXcgQ2xhc3NJbmZvLmludGVybmFsKCk7CiAgICAgIH0gZWxzZSBpZiAoc2VyaWFsaXplZElkLnN0YXJ0c1dpdGgoJ2ZpZWxkLycpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBGaWVsZEluZm8uaW50ZXJuYWwoKTsKICAgICAgfSBlbHNlIGlmIChzZXJpYWxpemVkSWQuc3RhcnRzV2l0aCgnY29uc3RhbnQvJykpIHsKICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50SW5mby5pbnRlcm5hbCgpOwogICAgICB9IGVsc2UgaWYgKHNlcmlhbGl6ZWRJZC5zdGFydHNXaXRoKCd0eXBlZGVmLycpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBUeXBlZGVmSW5mby5pbnRlcm5hbCgpOwogICAgICB9IGVsc2UgaWYgKHNlcmlhbGl6ZWRJZC5zdGFydHNXaXRoKCdvdXRwdXRVbml0LycpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBPdXRwdXRVbml0SW5mby5pbnRlcm5hbCgpOwogICAgICB9CiAgICAgIGFzc2VydChmYWxzZSk7CiAgICB9KTsKICB9CgogIExpc3Q8Q29kZVNwYW4+IHBhcnNlQ29kZShkeW5hbWljIGpzb24pIHsKICAgIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggZm9ybWF0IDUuMToKICAgIGlmIChqc29uIGlzIFN0cmluZykgewogICAgICByZXR1cm4gW25ldyBDb2RlU3BhbihzdGFydDogbnVsbCwgZW5kOiBudWxsLCB0ZXh0OiBqc29uKV07CiAgICB9CgogICAgaWYgKGpzb24gaXMgTGlzdCkgewogICAgICByZXR1cm4ganNvbi5tYXAoKGR5bmFtaWMgdmFsdWUpIHsKICAgICAgICBNYXA8U3RyaW5nLCBkeW5hbWljPiBqc29uQ29kZSA9IHZhbHVlOwogICAgICAgIHJldHVybiBuZXcgQ29kZVNwYW4oCiAgICAgICAgICAgIHN0YXJ0OiBqc29uQ29kZVsnc3RhcnQnXSwKICAgICAgICAgICAgZW5kOiBqc29uQ29kZVsnZW5kJ10sCiAgICAgICAgICAgIHRleHQ6IGpzb25Db2RlWyd0ZXh0J10pOwogICAgICB9KS50b0xpc3QoKTsKICAgIH0KCiAgICByZXR1cm4gW107CiAgfQp9CgpjbGFzcyBBbGxJbmZvVG9Kc29uQ29udmVydGVyIGV4dGVuZHMgQ29udmVydGVyPEFsbEluZm8sIE1hcD4KICAgIGltcGxlbWVudHMgSW5mb1Zpc2l0b3I8TWFwPiB7CiAgLy8vIFdoZXRoZXIgdG8gZ2VuZXJhdGUganNvbiBjb21wYXRpYmxlIHdpdGggZm9ybWF0IDUuMQogIGZpbmFsIGJvb2wgaXNCYWNrd2FyZENvbXBhdGlibGU7CiAgZmluYWwgTWFwPEluZm8sIElkPiBpZHMgPSBuZXcgSGFzaE1hcDxJbmZvLCBJZD4oKTsKICBmaW5hbCBTZXQ8aW50PiB1c2VkSWRzID0gbmV3IFNldDxpbnQ+KCk7CgogIEFsbEluZm9Ub0pzb25Db252ZXJ0ZXIoe3RoaXMuaXNCYWNrd2FyZENvbXBhdGlibGU6IGZhbHNlfSk7CgogIElkIGlkRm9yKEluZm8gaW5mbykgewogICAgdmFyIHNlcmlhbGl6ZWRJZCA9IGlkc1tpbmZvXTsKICAgIGlmIChzZXJpYWxpemVkSWQgIT0gbnVsbCkgcmV0dXJuIHNlcmlhbGl6ZWRJZDsKCiAgICBhc3NlcnQoCiAgICAgICAgaW5mbyBpcyBMaWJyYXJ5SW5mbyB8fAogICAgICAgICAgICBpbmZvIGlzIENvbnN0YW50SW5mbyB8fAogICAgICAgICAgICBpbmZvIGlzIE91dHB1dFVuaXRJbmZvIHx8CiAgICAgICAgICAgIGluZm8ucGFyZW50ICE9IG51bGwsCiAgICAgICAgIiRpbmZvIik7CgogICAgaW50IGlkOwogICAgaWYgKGluZm8gaXMgQ29uc3RhbnRJbmZvKSB7CiAgICAgIC8vIE5vIG5hbWUgYW5kIG5vIHBhcmVudCwgc28gYGxvbmdOYW1lYCBpc24ndCBoZWxwZnVsCiAgICAgIGFzc2VydChpbmZvLm5hbWUgPT0gbnVsbCk7CiAgICAgIGFzc2VydChpbmZvLnBhcmVudCA9PSBudWxsKTsKICAgICAgYXNzZXJ0KGluZm8uY29kZSAhPSBudWxsKTsKICAgICAgLy8gSW5zdGVhZCwgdXNlIHRoZSBjb250ZW50IG9mIHRoZSBjb2RlLgogICAgICBpZCA9IGluZm8uY29kZS5maXJzdC50ZXh0Lmhhc2hDb2RlOwogICAgfSBlbHNlIHsKICAgICAgaWQgPSBsb25nTmFtZShpbmZvLCB1c2VMaWJyYXJ5VXJpOiB0cnVlLCBmb3JJZDogdHJ1ZSkuaGFzaENvZGU7CiAgICB9CgogICAgd2hpbGUgKCF1c2VkSWRzLmFkZChpZCkpIHsKICAgICAgaWQrKzsKICAgIH0KICAgIHNlcmlhbGl6ZWRJZCA9IG5ldyBJZChpbmZvLmtpbmQsICckaWQnKTsKICAgIHJldHVybiBpZHNbaW5mb10gPSBzZXJpYWxpemVkSWQ7CiAgfQoKICBNYXAgY29udmVydChBbGxJbmZvIGluZm8pID0+IGluZm8uYWNjZXB0KHRoaXMpOwoKICBNYXAgX3Zpc2l0TGlzdChMaXN0PEluZm8+IGluZm9zKSB7CiAgICAvLyBVc2luZyBTcGxheVRyZWUgdG8gbWFpbnRhaW4gYSBjb25zaXN0ZW50IG9yZGVyIG9mIGtleXMKICAgIHZhciBtYXAgPSBuZXcgU3BsYXlUcmVlTWFwPFN0cmluZywgTWFwPihjb21wYXJlTmF0dXJhbCk7CiAgICBmb3IgKHZhciBpbmZvIGluIGluZm9zKSB7CiAgICAgIG1hcFsnJHtpZEZvcihpbmZvKS5pZH0nXSA9IGluZm8uYWNjZXB0KHRoaXMpOwogICAgfQogICAgcmV0dXJuIG1hcDsKICB9CgogIE1hcCBfdmlzaXRBbGxJbmZvRWxlbWVudHMoQWxsSW5mbyBpbmZvKSB7CiAgICB2YXIganNvbkxpYnJhcmllcyA9IF92aXNpdExpc3QoaW5mby5saWJyYXJpZXMpOwogICAgdmFyIGpzb25DbGFzc2VzID0gX3Zpc2l0TGlzdChpbmZvLmNsYXNzZXMpOwogICAgdmFyIGpzb25GdW5jdGlvbnMgPSBfdmlzaXRMaXN0KGluZm8uZnVuY3Rpb25zKTsKICAgIHZhciBqc29uVHlwZWRlZnMgPSBfdmlzaXRMaXN0KGluZm8udHlwZWRlZnMpOwogICAgdmFyIGpzb25GaWVsZHMgPSBfdmlzaXRMaXN0KGluZm8uZmllbGRzKTsKICAgIHZhciBqc29uQ29uc3RhbnRzID0gX3Zpc2l0TGlzdChpbmZvLmNvbnN0YW50cyk7CiAgICB2YXIganNvbkNsb3N1cmVzID0gX3Zpc2l0TGlzdChpbmZvLmNsb3N1cmVzKTsKICAgIHJldHVybiB7CiAgICAgICdsaWJyYXJ5JzoganNvbkxpYnJhcmllcywKICAgICAgJ2NsYXNzJzoganNvbkNsYXNzZXMsCiAgICAgICdmdW5jdGlvbic6IGpzb25GdW5jdGlvbnMsCiAgICAgICd0eXBlZGVmJzoganNvblR5cGVkZWZzLAogICAgICAnZmllbGQnOiBqc29uRmllbGRzLAogICAgICAnY29uc3RhbnQnOiBqc29uQ29uc3RhbnRzLAogICAgICAnY2xvc3VyZSc6IGpzb25DbG9zdXJlcywKICAgIH07CiAgfQoKICBNYXAgX3Zpc2l0RGVwZW5kZW5jeUluZm8oRGVwZW5kZW5jeUluZm8gaW5mbykgPT4KICAgICAgeydpZCc6IGlkRm9yKGluZm8udGFyZ2V0KS5zZXJpYWxpemVkSWQsICdtYXNrJzogaW5mby5tYXNrfTsKCiAgTWFwIF92aXNpdEFsbEluZm9Ib2xkaW5nKEFsbEluZm8gYWxsSW5mbykgewogICAgdmFyIG1hcCA9IG5ldyBTcGxheVRyZWVNYXA8U3RyaW5nLCBMaXN0Pihjb21wYXJlTmF0dXJhbCk7CiAgICB2b2lkIGhlbHBlcihDb2RlSW5mbyBpbmZvKSB7CiAgICAgIGlmIChpbmZvLnVzZXMuaXNFbXB0eSkgcmV0dXJuOwogICAgICBtYXBbaWRGb3IoaW5mbykuc2VyaWFsaXplZElkXSA9IGluZm8udXNlcwogICAgICAgICAgLm1hcChfdmlzaXREZXBlbmRlbmN5SW5mbykKICAgICAgICAgIC50b0xpc3QoKQogICAgICAgICAgICAuLnNvcnQoKGEsIGIpID0+IGFbJ2lkJ10uY29tcGFyZVRvKGJbJ2lkJ10pKTsKICAgIH0KCiAgICBhbGxJbmZvLmZ1bmN0aW9ucy5mb3JFYWNoKGhlbHBlcik7CiAgICBhbGxJbmZvLmZpZWxkcy5mb3JFYWNoKGhlbHBlcik7CiAgICByZXR1cm4gbWFwOwogIH0KCiAgTWFwIF92aXNpdEFsbEluZm9EZXBlbmRlbmNpZXMoQWxsSW5mbyBhbGxJbmZvKSB7CiAgICB2YXIgbWFwID0gbmV3IFNwbGF5VHJlZU1hcDxTdHJpbmcsIExpc3Q+KGNvbXBhcmVOYXR1cmFsKTsKICAgIGFsbEluZm8uZGVwZW5kZW5jaWVzLmZvckVhY2goKGssIHYpIHsKICAgICAgbWFwW2lkRm9yKGspLnNlcmlhbGl6ZWRJZF0gPSBfdG9Tb3J0ZWRTZXJpYWxpemVkSWRzKHYsIGlkRm9yKTsKICAgIH0pOwogICAgcmV0dXJuIG1hcDsKICB9CgogIE1hcCB2aXNpdEFsbChBbGxJbmZvIGluZm8pIHsKICAgIHZhciBlbGVtZW50cyA9IF92aXNpdEFsbEluZm9FbGVtZW50cyhpbmZvKTsKICAgIHZhciBqc29uSG9sZGluZyA9IF92aXNpdEFsbEluZm9Ib2xkaW5nKGluZm8pOwogICAgdmFyIGpzb25EZXBlbmRlbmNpZXMgPSBfdmlzaXRBbGxJbmZvRGVwZW5kZW5jaWVzKGluZm8pOwogICAgcmV0dXJuIHsKICAgICAgJ2VsZW1lbnRzJzogZWxlbWVudHMsCiAgICAgICdob2xkaW5nJzoganNvbkhvbGRpbmcsCiAgICAgICdkZXBlbmRlbmNpZXMnOiBqc29uRGVwZW5kZW5jaWVzLAogICAgICAnb3V0cHV0VW5pdHMnOiBpbmZvLm91dHB1dFVuaXRzLm1hcCgodSkgPT4gdS5hY2NlcHQodGhpcykpLnRvTGlzdCgpLAogICAgICAnZHVtcF92ZXJzaW9uJzogaXNCYWNrd2FyZENvbXBhdGlibGUgPyA1IDogaW5mby52ZXJzaW9uLAogICAgICAnZGVmZXJyZWRGaWxlcyc6IGluZm8uZGVmZXJyZWRGaWxlcywKICAgICAgJ2R1bXBfbWlub3JfdmVyc2lvbic6IGlzQmFja3dhcmRDb21wYXRpYmxlID8gMSA6IGluZm8ubWlub3JWZXJzaW9uLAogICAgICAncHJvZ3JhbSc6IGluZm8ucHJvZ3JhbS5hY2NlcHQodGhpcykKICAgIH07CiAgfQoKICBNYXAgdmlzaXRQcm9ncmFtKFByb2dyYW1JbmZvIGluZm8pIHsKICAgIHJldHVybiB7CiAgICAgICdlbnRyeXBvaW50JzogaWRGb3IoaW5mby5lbnRyeXBvaW50KS5zZXJpYWxpemVkSWQsCiAgICAgICdzaXplJzogaW5mby5zaXplLAogICAgICAnZGFydDJqc1ZlcnNpb24nOiBpbmZvLmRhcnQyanNWZXJzaW9uLAogICAgICAnY29tcGlsYXRpb25Nb21lbnQnOiAnJHtpbmZvLmNvbXBpbGF0aW9uTW9tZW50fScsCiAgICAgICdjb21waWxhdGlvbkR1cmF0aW9uJzogaW5mby5jb21waWxhdGlvbkR1cmF0aW9uLmluTWljcm9zZWNvbmRzLAogICAgICAndG9Kc29uRHVyYXRpb24nOiBpbmZvLnRvSnNvbkR1cmF0aW9uLmluTWljcm9zZWNvbmRzLAogICAgICAnZHVtcEluZm9EdXJhdGlvbic6IGluZm8uZHVtcEluZm9EdXJhdGlvbi5pbk1pY3Jvc2Vjb25kcywKICAgICAgJ25vU3VjaE1ldGhvZEVuYWJsZWQnOiBpbmZvLm5vU3VjaE1ldGhvZEVuYWJsZWQsCiAgICAgICdpc1J1bnRpbWVUeXBlVXNlZCc6IGluZm8uaXNSdW50aW1lVHlwZVVzZWQsCiAgICAgICdpc0lzb2xhdGVJblVzZSc6IGluZm8uaXNJc29sYXRlSW5Vc2UsCiAgICAgICdpc0Z1bmN0aW9uQXBwbHlVc2VkJzogaW5mby5pc0Z1bmN0aW9uQXBwbHlVc2VkLAogICAgICAnaXNNaXJyb3JzVXNlZCc6IGluZm8uaXNNaXJyb3JzVXNlZCwKICAgICAgJ21pbmlmaWVkJzogaW5mby5taW5pZmllZCwKICAgIH07CiAgfQoKICBNYXAgX3Zpc2l0QmFzaWNJbmZvKEJhc2ljSW5mbyBpbmZvKSB7CiAgICB2YXIgcmVzID0gewogICAgICAnaWQnOiBpZEZvcihpbmZvKS5zZXJpYWxpemVkSWQsCiAgICAgICdraW5kJzoga2luZFRvU3RyaW5nKGluZm8ua2luZCksCiAgICAgICduYW1lJzogaW5mby5uYW1lLAogICAgICAnc2l6ZSc6IGluZm8uc2l6ZSwKICAgIH07CiAgICAvLyBUT0RPKHNpZ211bmQpOiBPbWl0IHRoaXMgYWxzbyB3aGVuIG91dHB1dFVuaXQuaWQgPT0gMCAobW9zdCBjb2RlIGlzIGluCiAgICAvLyB0aGUgbWFpbiBvdXRwdXQgdW5pdCBieSBkZWZhdWx0KS4KICAgIGlmIChpbmZvLm91dHB1dFVuaXQgIT0gbnVsbCkgewogICAgICByZXNbJ291dHB1dFVuaXQnXSA9IGlkRm9yKGluZm8ub3V0cHV0VW5pdCkuc2VyaWFsaXplZElkOwogICAgfQogICAgaWYgKGluZm8uY292ZXJhZ2VJZCAhPSBudWxsKSByZXNbJ2NvdmVyYWdlSWQnXSA9IGluZm8uY292ZXJhZ2VJZDsKICAgIGlmIChpbmZvLnBhcmVudCAhPSBudWxsKSByZXNbJ3BhcmVudCddID0gaWRGb3IoaW5mby5wYXJlbnQpLnNlcmlhbGl6ZWRJZDsKICAgIHJldHVybiByZXM7CiAgfQoKICBNYXAgdmlzaXRMaWJyYXJ5KExpYnJhcnlJbmZvIGluZm8pIHsKICAgIHJldHVybiBfdmlzaXRCYXNpY0luZm8oaW5mbykKICAgICAgLi5hZGRBbGwoPFN0cmluZywgT2JqZWN0PnsKICAgICAgICAnY2hpbGRyZW4nOiBfdG9Tb3J0ZWRTZXJpYWxpemVkSWRzKAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgaW5mby50b3BMZXZlbEZ1bmN0aW9ucywKICAgICAgICAgICAgICBpbmZvLnRvcExldmVsVmFyaWFibGVzLAogICAgICAgICAgICAgIGluZm8uY2xhc3NlcywKICAgICAgICAgICAgICBpbmZvLnR5cGVkZWZzCiAgICAgICAgICAgIF0uZXhwYW5kKChpKSA9PiBpKSwKICAgICAgICAgICAgaWRGb3IpLAogICAgICAgICdjYW5vbmljYWxVcmknOiAnJHtpbmZvLnVyaX0nLAogICAgICB9KTsKICB9CgogIE1hcCB2aXNpdENsYXNzKENsYXNzSW5mbyBpbmZvKSB7CiAgICByZXR1cm4gX3Zpc2l0QmFzaWNJbmZvKGluZm8pCiAgICAgIC4uYWRkQWxsKDxTdHJpbmcsIE9iamVjdD57CiAgICAgICAgLy8gVE9ETyhzaWdtdW5kKTogY2hhbmdlIGZvcm1hdCwgaW5jbHVkZSBvbmx5IHdoZW4gYWJzdHJhY3QgaXMgdHJ1ZS4KICAgICAgICAnbW9kaWZpZXJzJzogeydhYnN0cmFjdCc6IGluZm8uaXNBYnN0cmFjdH0sCiAgICAgICAgJ2NoaWxkcmVuJzogX3RvU29ydGVkU2VyaWFsaXplZElkcygKICAgICAgICAgICAgW2luZm8uZmllbGRzLCBpbmZvLmZ1bmN0aW9uc10uZXhwYW5kKChpKSA9PiBpKSwgaWRGb3IpCiAgICAgIH0pOwogIH0KCiAgTWFwIHZpc2l0RmllbGQoRmllbGRJbmZvIGluZm8pIHsKICAgIHZhciByZXN1bHQgPSBfdmlzaXRCYXNpY0luZm8oaW5mbykKICAgICAgLi5hZGRBbGwoPFN0cmluZywgT2JqZWN0PnsKICAgICAgICAnY2hpbGRyZW4nOiBfdG9Tb3J0ZWRTZXJpYWxpemVkSWRzKGluZm8uY2xvc3VyZXMsIGlkRm9yKSwKICAgICAgICAnaW5mZXJyZWRUeXBlJzogaW5mby5pbmZlcnJlZFR5cGUsCiAgICAgICAgJ2NvZGUnOiBfc2VyaWFsaXplQ29kZShpbmZvLmNvZGUpLAogICAgICAgICd0eXBlJzogaW5mby50eXBlLAogICAgICB9KTsKICAgIGlmIChpbmZvLmlzQ29uc3QpIHsKICAgICAgcmVzdWx0Wydjb25zdCddID0gdHJ1ZTsKICAgICAgaWYgKGluZm8uaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICAgIHJlc3VsdFsnaW5pdGlhbGl6ZXInXSA9IGlkRm9yKGluZm8uaW5pdGlhbGl6ZXIpLnNlcmlhbGl6ZWRJZDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIE1hcCB2aXNpdENvbnN0YW50KENvbnN0YW50SW5mbyBpbmZvKSA9PiBfdmlzaXRCYXNpY0luZm8oaW5mbykKICAgIC4uYWRkQWxsKDxTdHJpbmcsIE9iamVjdD57J2NvZGUnOiBfc2VyaWFsaXplQ29kZShpbmZvLmNvZGUpfSk7CgogIC8vIFRPRE8oc2lnbXVuZCk6IGV4Y2x1ZGUgZmFsc2UgdmFsdWVzIChyZXF1aXJlcyBidW1waW5nIHRoZSBmb3JtYXQgdmVyc2lvbik6CiAgLy8gICAgIHZhciByZXMgPSA8U3RyaW5nLCBib29sPnt9OwogIC8vICAgICBpZiAoaXNTdGF0aWMpIHJlc1snc3RhdGljJ10gPSB0cnVlOwogIC8vICAgICBpZiAoaXNDb25zdCkgcmVzWydjb25zdCddID0gdHJ1ZTsKICAvLyAgICAgaWYgKGlzRmFjdG9yeSkgcmVzWydmYWN0b3J5J10gPSB0cnVlOwogIC8vICAgICBpZiAoaXNFeHRlcm5hbCkgcmVzWydleHRlcm5hbCddID0gdHJ1ZTsKICAvLyAgICAgcmV0dXJuIHJlczsKICBNYXAgX3Zpc2l0RnVuY3Rpb25Nb2RpZmllcnMoRnVuY3Rpb25Nb2RpZmllcnMgbW9kcykgPT4gewogICAgICAgICdzdGF0aWMnOiBtb2RzLmlzU3RhdGljLAogICAgICAgICdjb25zdCc6IG1vZHMuaXNDb25zdCwKICAgICAgICAnZmFjdG9yeSc6IG1vZHMuaXNGYWN0b3J5LAogICAgICAgICdleHRlcm5hbCc6IG1vZHMuaXNFeHRlcm5hbCwKICAgICAgfTsKCiAgTWFwIF92aXNpdFBhcmFtZXRlckluZm8oUGFyYW1ldGVySW5mbyBpbmZvKSA9PgogICAgICB7J25hbWUnOiBpbmZvLm5hbWUsICd0eXBlJzogaW5mby50eXBlLCAnZGVjbGFyZWRUeXBlJzogaW5mby5kZWNsYXJlZFR5cGV9OwoKICBNYXAgdmlzaXRGdW5jdGlvbihGdW5jdGlvbkluZm8gaW5mbykgewogICAgcmV0dXJuIF92aXNpdEJhc2ljSW5mbyhpbmZvKQogICAgICAuLmFkZEFsbCg8U3RyaW5nLCBPYmplY3Q+ewogICAgICAgICdjaGlsZHJlbic6IF90b1NvcnRlZFNlcmlhbGl6ZWRJZHMoaW5mby5jbG9zdXJlcywgaWRGb3IpLAogICAgICAgICdtb2RpZmllcnMnOiBfdmlzaXRGdW5jdGlvbk1vZGlmaWVycyhpbmZvLm1vZGlmaWVycyksCiAgICAgICAgJ3JldHVyblR5cGUnOiBpbmZvLnJldHVyblR5cGUsCiAgICAgICAgJ2luZmVycmVkUmV0dXJuVHlwZSc6IGluZm8uaW5mZXJyZWRSZXR1cm5UeXBlLAogICAgICAgICdwYXJhbWV0ZXJzJzoKICAgICAgICAgICAgaW5mby5wYXJhbWV0ZXJzLm1hcCgocCkgPT4gX3Zpc2l0UGFyYW1ldGVySW5mbyhwKSkudG9MaXN0KCksCiAgICAgICAgJ3NpZGVFZmZlY3RzJzogaW5mby5zaWRlRWZmZWN0cywKICAgICAgICAnaW5saW5lZENvdW50JzogaW5mby5pbmxpbmVkQ291bnQsCiAgICAgICAgJ2NvZGUnOiBfc2VyaWFsaXplQ29kZShpbmZvLmNvZGUpLAogICAgICAgICd0eXBlJzogaW5mby50eXBlLAogICAgICAgIC8vIE5vdGU6IHZlcnNpb24gMy4yIG9mIGR1bXAtaW5mbyBzZXJpYWxpemVzIGB1c2VzYCBpbiBhIHNlY3Rpb24gY2FsbGVkCiAgICAgICAgLy8gYGhvbGRpbmdgIGF0IHRoZSB0b3AtbGV2ZWwuCiAgICAgIH0pOwogIH0KCiAgTWFwIHZpc2l0Q2xvc3VyZShDbG9zdXJlSW5mbyBpbmZvKSB7CiAgICByZXR1cm4gX3Zpc2l0QmFzaWNJbmZvKGluZm8pCiAgICAgIC4uYWRkQWxsKDxTdHJpbmcsIE9iamVjdD57J2Z1bmN0aW9uJzogaWRGb3IoaW5mby5mdW5jdGlvbikuc2VyaWFsaXplZElkfSk7CiAgfQoKICB2aXNpdFR5cGVkZWYoVHlwZWRlZkluZm8gaW5mbykgPT4gX3Zpc2l0QmFzaWNJbmZvKGluZm8pLi5bJ3R5cGUnXSA9IGluZm8udHlwZTsKCiAgdmlzaXRPdXRwdXQoT3V0cHV0VW5pdEluZm8gaW5mbykgPT4gX3Zpc2l0QmFzaWNJbmZvKGluZm8pCiAgICAuLlsnZmlsZW5hbWUnXSA9IGluZm8uZmlsZW5hbWUKICAgIC4uWydpbXBvcnRzJ10gPSBpbmZvLmltcG9ydHM7CgogIE9iamVjdCBfc2VyaWFsaXplQ29kZShMaXN0PENvZGVTcGFuPiBjb2RlKSB7CiAgICBpZiAoaXNCYWNrd2FyZENvbXBhdGlibGUpIHsKICAgICAgcmV0dXJuIGNvZGUubWFwKChjKSA9PiBjLnRleHQpLmpvaW4oJ1xuJyk7CiAgICB9CiAgICByZXR1cm4gY29kZQogICAgICAgIC5tYXA8T2JqZWN0PigoYykgPT4gewogICAgICAgICAgICAgICdzdGFydCc6IGMuc3RhcnQsCiAgICAgICAgICAgICAgJ2VuZCc6IGMuZW5kLAogICAgICAgICAgICAgICd0ZXh0JzogYy50ZXh0LAogICAgICAgICAgICB9KQogICAgICAgIC50b0xpc3QoKTsKICB9Cn0KCmNsYXNzIEFsbEluZm9Kc29uQ29kZWMgZXh0ZW5kcyBDb2RlYzxBbGxJbmZvLCBNYXA+IHsKICBmaW5hbCBDb252ZXJ0ZXI8QWxsSW5mbywgTWFwPiBlbmNvZGVyOwogIGZpbmFsIENvbnZlcnRlcjxNYXAsIEFsbEluZm8+IGRlY29kZXIgPSBuZXcgSnNvblRvQWxsSW5mb0NvbnZlcnRlcigpOwoKICBBbGxJbmZvSnNvbkNvZGVjKHtib29sIGlzQmFja3dhcmRDb21wYXRpYmxlOiBmYWxzZX0pCiAgICAgIDogZW5jb2RlciA9IG5ldyBBbGxJbmZvVG9Kc29uQ29udmVydGVyKAogICAgICAgICAgICBpc0JhY2t3YXJkQ29tcGF0aWJsZTogaXNCYWNrd2FyZENvbXBhdGlibGUpOwp9CgpjbGFzcyBJZCB7CiAgZmluYWwgSW5mb0tpbmQga2luZDsKICBmaW5hbCBTdHJpbmcgaWQ7CgogIElkKHRoaXMua2luZCwgdGhpcy5pZCk7CgogIFN0cmluZyBnZXQgc2VyaWFsaXplZElkID0+ICcke2tpbmRUb1N0cmluZyhraW5kKX0vJGlkJzsKfQqCWQBOTjwBSgEaFwEtGBQBJTpMASJQUEIBLxYBICVMSwdOHUoTTh1MAU8nHkwGEk4cSh1MASgiGx4qID8ICAE9KFAIARdPATQBKR9PNypQNUguSQ5HCggvBgEaEwQBLTELJBwdE1ATBAEnLgscLjEdNyMtJy0nIw8mJAgGEwQBIywLHCkxHDwhNyMlDyQiCAYTBAEjLBIcKSgxHBwsJykzLi8VBAEpLxInHDIEAScuEhwpHBIEAScoMRxGMDo2MDouJQFPOylNDSooOwYBMSRDDSVPBgE1JkcNJyU4BgEYBAFGLSM+BiUoKioiMjAyJB88BAEpLxIcKSgxHBwoOBVOJyosFEguLxUEASxLAT0iKigsLwQBJy4SHCkxHC4EARUeIBMGMzIsOCs4KzYpNik5LDgrOy4IFQgEASswGkEGARgoLx0mIiUTBgEPBAIBPSI6IzUrAT4BGCIzAQwfJCYhEgEMIDwhIyEvKg1GBgEfDAYtJQQBMgElPj0eNAYQBAEsNDA0Mi40Mg0gHCEfGyEfBwQBM0IBLj4hJTAlFDoGASckEAQBMz4qRQgQBAEfMDI8DRweKEs/K0orBwQBJw05GS04RjxANzMtNyshBwQBKBAmJxkZB04pIz8GRk4QBAEnISEsDiYmHBwgFCcKBAEjISFNNCxDCgQBIychQisrGwoYHiZGCAYTBAFAQwFQJS0rLzEVOyEfIyUJATFRASkhIUI+JzcWSSkrKxtQJwoEASchUQQBUQE8IyIBLyAxBhAeIBweDxMEAgE1KUgBNy45AgELFxMBGgE6AgEpcGFja2FnZTpkYXJ0MmpzX2luZm8vanNvbl9pbmZvX2NvZGVjLmRhcnRDc2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2RhcnQyanNfaW5mby9saWIvYmluYXJ5X3NlcmlhbGl6YXRpb24uZGFydLnELy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBJbmZvIHNlcmlhbGl6YXRpb24gdG8gYSBiaW5hcnkgZm9ybS4KLy8vCi8vLyBVbmxpa2UgdGhlIEpTT04gY29kZWMsIHRoaXMgc2VyaWFsaXphdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBzdHJlYW1lZC4KCmltcG9ydCAnZGFydDpjb252ZXJ0JzsKCmltcG9ydCAnc3JjL2JpbmFyeS9zaW5rLmRhcnQnOwppbXBvcnQgJ3NyYy9iaW5hcnkvc291cmNlLmRhcnQnOwppbXBvcnQgJ2luZm8uZGFydCc7Cgp2b2lkIGVuY29kZShBbGxJbmZvIGluZm8sIFNpbms8TGlzdDxpbnQ+PiBzaW5rKSB7CiAgbmV3IEJpbmFyeVByaW50ZXIobmV3IEJpbmFyeVNpbmsoc2luaykpLnZpc2l0QWxsKGluZm8pOwp9CgpBbGxJbmZvIGRlY29kZShMaXN0PGludD4gZGF0YSkgewogIHJldHVybiBuZXcgQmluYXJ5UmVhZGVyKG5ldyBCaW5hcnlTb3VyY2UoZGF0YSkpLnJlYWRBbGwoKTsKfQoKY2xhc3MgQmluYXJ5UHJpbnRlciBpbXBsZW1lbnRzIEluZm9WaXNpdG9yPHZvaWQ+IHsKICBmaW5hbCBCaW5hcnlTaW5rIHNpbms7CgogIEJpbmFyeVByaW50ZXIodGhpcy5zaW5rKTsKCiAgdm9pZCB3cml0ZURhdGUoRGF0ZVRpbWUgZGF0ZSkgewogICAgc2luay53cml0ZVN0cmluZyhkYXRlLnRvSXNvODYwMVN0cmluZygpKTsKICB9CgogIHZvaWQgd3JpdGVEdXJhdGlvbihEdXJhdGlvbiBkdXJhdGlvbikgewogICAgc2luay53cml0ZUludChkdXJhdGlvbi5pbk1pY3Jvc2Vjb25kcyk7CiAgfQoKICB2b2lkIHdyaXRlSW5mb1dpdGhLaW5kKEluZm8gaW5mbykgewogICAgc2luay53cml0ZUVudW0oaW5mby5raW5kKTsKICAgIGluZm8uYWNjZXB0KHRoaXMpOwogIH0KCiAgdm9pZCB2aXNpdEFsbChBbGxJbmZvIGluZm8pIHsKICAgIHNpbmsud3JpdGVJbnQoaW5mby52ZXJzaW9uKTsKICAgIHNpbmsud3JpdGVJbnQoaW5mby5taW5vclZlcnNpb24pOwogICAgc2luay53cml0ZUxpc3QoaW5mby5saWJyYXJpZXMsIHZpc2l0TGlicmFyeSk7CiAgICAvLyBUT0RPKHNpZ211bmQpOiBzeW50aGVzaXplIHRoZSBmb2xsb3dpbmcgbGlzdHMgaW5zdGVhZCBvZiBzZXJpYWxpemluZyB0aGUKICAgIC8vIHZhbHVlcyBhZ2Fpbi4KICAgIHNpbmsud3JpdGVMaXN0KGluZm8uY2xhc3NlcywgdmlzaXRDbGFzcyk7CiAgICBzaW5rLndyaXRlTGlzdChpbmZvLmZ1bmN0aW9ucywgdmlzaXRGdW5jdGlvbik7CiAgICBzaW5rLndyaXRlTGlzdChpbmZvLnR5cGVkZWZzLCB2aXNpdFR5cGVkZWYpOwogICAgc2luay53cml0ZUxpc3QoaW5mby5maWVsZHMsIHZpc2l0RmllbGQpOwogICAgc2luay53cml0ZUxpc3QoaW5mby5jb25zdGFudHMsIHZpc2l0Q29uc3RhbnQpOwogICAgc2luay53cml0ZUxpc3QoaW5mby5jbG9zdXJlcywgdmlzaXRDbG9zdXJlKTsKCiAgICB2b2lkIHdyaXRlRGVwZW5kZW5jaWVzKENvZGVJbmZvIGluZm8pIHsKICAgICAgc2luay53cml0ZUxpc3QoaW5mby51c2VzLCBfd3JpdGVEZXBlbmRlbmN5SW5mbyk7CiAgICB9CgogICAgaW5mby5maWVsZHMuZm9yRWFjaCh3cml0ZURlcGVuZGVuY2llcyk7CiAgICBpbmZvLmZ1bmN0aW9ucy5mb3JFYWNoKHdyaXRlRGVwZW5kZW5jaWVzKTsKCiAgICBzaW5rLndyaXRlSW50KGluZm8uZGVwZW5kZW5jaWVzLmxlbmd0aCk7CiAgICBpbmZvLmRlcGVuZGVuY2llcy5mb3JFYWNoKChJbmZvIGtleSwgTGlzdDxJbmZvPiB2YWx1ZXMpIHsKICAgICAgd3JpdGVJbmZvV2l0aEtpbmQoa2V5KTsKICAgICAgc2luay53cml0ZUxpc3QodmFsdWVzLCB3cml0ZUluZm9XaXRoS2luZCk7CiAgICB9KTsKICAgIHNpbmsud3JpdGVMaXN0KGluZm8ub3V0cHV0VW5pdHMsIHZpc2l0T3V0cHV0KTsKICAgIHNpbmsud3JpdGVTdHJpbmcoanNvbkVuY29kZShpbmZvLmRlZmVycmVkRmlsZXMpKTsKICAgIHZpc2l0UHJvZ3JhbShpbmZvLnByb2dyYW0pOwogICAgc2luay5jbG9zZSgpOwogIH0KCiAgdm9pZCB2aXNpdFByb2dyYW0oUHJvZ3JhbUluZm8gaW5mbykgewogICAgdmlzaXRGdW5jdGlvbihpbmZvLmVudHJ5cG9pbnQpOwogICAgc2luay53cml0ZUludChpbmZvLnNpemUpOwogICAgc2luay53cml0ZVN0cmluZ09yTnVsbChpbmZvLmRhcnQyanNWZXJzaW9uKTsKICAgIHdyaXRlRGF0ZShpbmZvLmNvbXBpbGF0aW9uTW9tZW50KTsKICAgIHdyaXRlRHVyYXRpb24oaW5mby5jb21waWxhdGlvbkR1cmF0aW9uKTsKICAgIC8vIE5vdGU6IHdlIGRvbid0IHJlY29yZCB0aGUgJ3RvSnNvbkR1cmF0aW9uJyBmaWVsZC4gQ29uc2lkZXIgZGVsZXRpbmcgaXQ/CiAgICB3cml0ZUR1cmF0aW9uKGluZm8uZHVtcEluZm9EdXJhdGlvbik7CiAgICBzaW5rLndyaXRlQm9vbChpbmZvLm5vU3VjaE1ldGhvZEVuYWJsZWQpOwogICAgc2luay53cml0ZUJvb2woaW5mby5pc1J1bnRpbWVUeXBlVXNlZCk7CiAgICBzaW5rLndyaXRlQm9vbChpbmZvLmlzSXNvbGF0ZUluVXNlKTsKICAgIHNpbmsud3JpdGVCb29sKGluZm8uaXNGdW5jdGlvbkFwcGx5VXNlZCk7CiAgICBzaW5rLndyaXRlQm9vbChpbmZvLmlzTWlycm9yc1VzZWQpOwogICAgc2luay53cml0ZUJvb2woaW5mby5taW5pZmllZCk7CiAgfQoKICB2b2lkIF92aXNpdEJhc2ljSW5mbyhCYXNpY0luZm8gaW5mbykgewogICAgc2luay53cml0ZVN0cmluZ09yTnVsbChpbmZvLm5hbWUpOwogICAgc2luay53cml0ZUludChpbmZvLnNpemUpOwogICAgc2luay53cml0ZVN0cmluZ09yTnVsbChpbmZvLmNvdmVyYWdlSWQpOwogICAgX3dyaXRlT3V0cHV0T3JOdWxsKGluZm8ub3V0cHV0VW5pdCk7CiAgICAvLyBOb3RlOiBwYXJlbnQtcG9pbnRlcnMgYXJlIG5vdCBzZXJpYWxpemVkLCB0aGV5IGdldCBkZWR1Y2VkIGR1cmluZyBkZXNlcmlhbGl6YXRpb24uCiAgfQoKICB2b2lkIHZpc2l0TGlicmFyeShMaWJyYXJ5SW5mbyBsaWJyYXJ5KSB7CiAgICBzaW5rLndyaXRlQ2FjaGVkKGxpYnJhcnksIChMaWJyYXJ5SW5mbyBpbmZvKSB7CiAgICAgIHNpbmsud3JpdGVVcmkoaW5mby51cmkpOwogICAgICBfdmlzaXRCYXNpY0luZm8oaW5mbyk7CiAgICAgIHNpbmsud3JpdGVMaXN0KGluZm8udG9wTGV2ZWxGdW5jdGlvbnMsIHZpc2l0RnVuY3Rpb24pOwogICAgICBzaW5rLndyaXRlTGlzdChpbmZvLnRvcExldmVsVmFyaWFibGVzLCB2aXNpdEZpZWxkKTsKICAgICAgc2luay53cml0ZUxpc3QoaW5mby5jbGFzc2VzLCB2aXNpdENsYXNzKTsKICAgICAgc2luay53cml0ZUxpc3QoaW5mby50eXBlZGVmcywgdmlzaXRUeXBlZGVmKTsKICAgIH0pOwogIH0KCiAgdm9pZCB2aXNpdENsYXNzKENsYXNzSW5mbyBjbHMpIHsKICAgIHNpbmsud3JpdGVDYWNoZWQoY2xzLCAoQ2xhc3NJbmZvIGluZm8pIHsKICAgICAgX3Zpc2l0QmFzaWNJbmZvKGluZm8pOwogICAgICBzaW5rLndyaXRlQm9vbChpbmZvLmlzQWJzdHJhY3QpOwogICAgICBzaW5rLndyaXRlTGlzdChpbmZvLmZpZWxkcywgdmlzaXRGaWVsZCk7CiAgICAgIHNpbmsud3JpdGVMaXN0KGluZm8uZnVuY3Rpb25zLCB2aXNpdEZ1bmN0aW9uKTsKICAgIH0pOwogIH0KCiAgdm9pZCB2aXNpdEZpZWxkKEZpZWxkSW5mbyBmaWVsZCkgewogICAgc2luay53cml0ZUNhY2hlZChmaWVsZCwgKEZpZWxkSW5mbyBpbmZvKSB7CiAgICAgIF92aXNpdEJhc2ljSW5mbyhpbmZvKTsKICAgICAgc2luay53cml0ZUxpc3QoaW5mby5jbG9zdXJlcywgdmlzaXRDbG9zdXJlKTsKICAgICAgc2luay53cml0ZVN0cmluZyhpbmZvLmluZmVycmVkVHlwZSk7CiAgICAgIHNpbmsud3JpdGVMaXN0KGluZm8uY29kZSwgX3Zpc2l0Q29kZVNwYW4pOwogICAgICBzaW5rLndyaXRlU3RyaW5nKGluZm8udHlwZSk7CiAgICAgIHNpbmsud3JpdGVCb29sKGluZm8uaXNDb25zdCk7CiAgICAgIGlmIChpbmZvLmlzQ29uc3QpIHsKICAgICAgICBfd3JpdGVDb25zdGFudE9yTnVsbChpbmZvLmluaXRpYWxpemVyKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBfdmlzaXRDb2RlU3BhbihDb2RlU3BhbiBjb2RlKSB7CiAgICBzaW5rLndyaXRlSW50T3JOdWxsKGNvZGUuc3RhcnQpOwogICAgc2luay53cml0ZUludE9yTnVsbChjb2RlLmVuZCk7CiAgICBzaW5rLndyaXRlU3RyaW5nT3JOdWxsKGNvZGUudGV4dCk7CiAgfQoKICB2b2lkIF93cml0ZUNvbnN0YW50T3JOdWxsKENvbnN0YW50SW5mbyBpbmZvKSB7CiAgICBzaW5rLndyaXRlQm9vbChpbmZvICE9IG51bGwpOwogICAgaWYgKGluZm8gIT0gbnVsbCkgewogICAgICB2aXNpdENvbnN0YW50KGluZm8pOwogICAgfQogIH0KCiAgdm9pZCB2aXNpdENvbnN0YW50KENvbnN0YW50SW5mbyBjb25zdGFudCkgewogICAgc2luay53cml0ZUNhY2hlZChjb25zdGFudCwgKENvbnN0YW50SW5mbyBpbmZvKSB7CiAgICAgIF92aXNpdEJhc2ljSW5mbyhpbmZvKTsKICAgICAgc2luay53cml0ZUxpc3QoaW5mby5jb2RlLCBfdmlzaXRDb2RlU3Bhbik7CiAgICB9KTsKICB9CgogIHZvaWQgX3Zpc2l0RnVuY3Rpb25Nb2RpZmllcnMoRnVuY3Rpb25Nb2RpZmllcnMgbW9kcykgewogICAgaW50IHZhbHVlID0gMDsKICAgIGlmIChtb2RzLmlzU3RhdGljKSB2YWx1ZSB8PSBfc3RhdGljTWFzazsKICAgIGlmIChtb2RzLmlzQ29uc3QpIHZhbHVlIHw9IF9jb25zdE1hc2s7CiAgICBpZiAobW9kcy5pc0ZhY3RvcnkpIHZhbHVlIHw9IF9mYWN0b3J5TWFzazsKICAgIGlmIChtb2RzLmlzRXh0ZXJuYWwpIHZhbHVlIHw9IF9leHRlcm5hbE1hc2s7CiAgICBzaW5rLndyaXRlSW50KHZhbHVlKTsKICB9CgogIHZvaWQgX3Zpc2l0UGFyYW1ldGVySW5mbyhQYXJhbWV0ZXJJbmZvIGluZm8pIHsKICAgIHNpbmsud3JpdGVTdHJpbmcoaW5mby5uYW1lKTsKICAgIHNpbmsud3JpdGVTdHJpbmcoaW5mby50eXBlKTsKICAgIHNpbmsud3JpdGVTdHJpbmcoaW5mby5kZWNsYXJlZFR5cGUpOwogIH0KCiAgdm9pZCB2aXNpdEZ1bmN0aW9uKEZ1bmN0aW9uSW5mbyBmdW5jdGlvbikgewogICAgc2luay53cml0ZUNhY2hlZChmdW5jdGlvbiwgKEZ1bmN0aW9uSW5mbyBpbmZvKSB7CiAgICAgIF92aXNpdEJhc2ljSW5mbyhpbmZvKTsKICAgICAgc2luay53cml0ZUxpc3QoaW5mby5jbG9zdXJlcywgdmlzaXRDbG9zdXJlKTsKICAgICAgX3Zpc2l0RnVuY3Rpb25Nb2RpZmllcnMoaW5mby5tb2RpZmllcnMpOwogICAgICBzaW5rLndyaXRlU3RyaW5nKGluZm8ucmV0dXJuVHlwZSk7CiAgICAgIHNpbmsud3JpdGVTdHJpbmcoaW5mby5pbmZlcnJlZFJldHVyblR5cGUpOwogICAgICBzaW5rLndyaXRlTGlzdChpbmZvLnBhcmFtZXRlcnMsIF92aXNpdFBhcmFtZXRlckluZm8pOwogICAgICBzaW5rLndyaXRlU3RyaW5nKGluZm8uc2lkZUVmZmVjdHMpOwogICAgICBzaW5rLndyaXRlSW50T3JOdWxsKGluZm8uaW5saW5lZENvdW50KTsKICAgICAgc2luay53cml0ZUxpc3QoaW5mby5jb2RlLCBfdmlzaXRDb2RlU3Bhbik7CiAgICAgIHNpbmsud3JpdGVTdHJpbmcoaW5mby50eXBlKTsKICAgIH0pOwogIH0KCiAgdm9pZCBfd3JpdGVEZXBlbmRlbmN5SW5mbyhEZXBlbmRlbmN5SW5mbyBpbmZvKSB7CiAgICB3cml0ZUluZm9XaXRoS2luZChpbmZvLnRhcmdldCk7CiAgICBzaW5rLndyaXRlU3RyaW5nT3JOdWxsKGluZm8ubWFzayk7CiAgfQoKICB2b2lkIHZpc2l0Q2xvc3VyZShDbG9zdXJlSW5mbyBjbG9zdXJlKSB7CiAgICBzaW5rLndyaXRlQ2FjaGVkKGNsb3N1cmUsIChDbG9zdXJlSW5mbyBpbmZvKSB7CiAgICAgIF92aXNpdEJhc2ljSW5mbyhpbmZvKTsKICAgICAgdmlzaXRGdW5jdGlvbihpbmZvLmZ1bmN0aW9uKTsKICAgIH0pOwogIH0KCiAgdm9pZCB2aXNpdFR5cGVkZWYoVHlwZWRlZkluZm8gdHlwZWRlZikgewogICAgc2luay53cml0ZUNhY2hlZCh0eXBlZGVmLCAoVHlwZWRlZkluZm8gaW5mbykgewogICAgICBfdmlzaXRCYXNpY0luZm8oaW5mbyk7CiAgICAgIHNpbmsud3JpdGVTdHJpbmcoaW5mby50eXBlKTsKICAgIH0pOwogIH0KCiAgdm9pZCBfd3JpdGVPdXRwdXRPck51bGwoT3V0cHV0VW5pdEluZm8gaW5mbykgewogICAgc2luay53cml0ZUJvb2woaW5mbyAhPSBudWxsKTsKICAgIGlmIChpbmZvICE9IG51bGwpIHsKICAgICAgdmlzaXRPdXRwdXQoaW5mbyk7CiAgICB9CiAgfQoKICB2b2lkIHZpc2l0T3V0cHV0KE91dHB1dFVuaXRJbmZvIG91dHB1dCkgewogICAgc2luay53cml0ZUNhY2hlZChvdXRwdXQsIChPdXRwdXRVbml0SW5mbyBpbmZvKSB7CiAgICAgIF92aXNpdEJhc2ljSW5mbyhpbmZvKTsKICAgICAgc2luay53cml0ZVN0cmluZ09yTnVsbChpbmZvLmZpbGVuYW1lKTsKICAgICAgc2luay53cml0ZUxpc3QoaW5mby5pbXBvcnRzLCBzaW5rLndyaXRlU3RyaW5nKTsKICAgIH0pOwogIH0KfQoKY2xhc3MgQmluYXJ5UmVhZGVyIHsKICBmaW5hbCBCaW5hcnlTb3VyY2Ugc291cmNlOwogIEJpbmFyeVJlYWRlcih0aGlzLnNvdXJjZSk7CgogIERhdGVUaW1lIHJlYWREYXRlKCkgewogICAgcmV0dXJuIERhdGVUaW1lLnBhcnNlKHNvdXJjZS5yZWFkU3RyaW5nKCkpOwogIH0KCiAgRHVyYXRpb24gcmVhZER1cmF0aW9uKCkgewogICAgcmV0dXJuIG5ldyBEdXJhdGlvbihtaWNyb3NlY29uZHM6IHNvdXJjZS5yZWFkSW50KCkpOwogIH0KCiAgSW5mbyByZWFkSW5mb1dpdGhLaW5kKCkgewogICAgSW5mb0tpbmQga2luZCA9IHNvdXJjZS5yZWFkRW51bShJbmZvS2luZC52YWx1ZXMpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgSW5mb0tpbmQubGlicmFyeToKICAgICAgICByZXR1cm4gcmVhZExpYnJhcnkoKTsKICAgICAgY2FzZSBJbmZvS2luZC5jbGF6ejoKICAgICAgICByZXR1cm4gcmVhZENsYXNzKCk7CiAgICAgIGNhc2UgSW5mb0tpbmQuZnVuY3Rpb246CiAgICAgICAgcmV0dXJuIHJlYWRGdW5jdGlvbigpOwogICAgICBjYXNlIEluZm9LaW5kLmZpZWxkOgogICAgICAgIHJldHVybiByZWFkRmllbGQoKTsKICAgICAgY2FzZSBJbmZvS2luZC5jb25zdGFudDoKICAgICAgICByZXR1cm4gcmVhZENvbnN0YW50KCk7CiAgICAgIGNhc2UgSW5mb0tpbmQub3V0cHV0VW5pdDoKICAgICAgICByZXR1cm4gcmVhZE91dHB1dCgpOwogICAgICBjYXNlIEluZm9LaW5kLnR5cGVkZWY6CiAgICAgICAgcmV0dXJuIHJlYWRUeXBlZGVmKCk7CiAgICAgIGNhc2UgSW5mb0tpbmQuY2xvc3VyZToKICAgICAgICByZXR1cm4gcmVhZENsb3N1cmUoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQWxsSW5mbyByZWFkQWxsKCkgewogICAgdmFyIGluZm8gPSBuZXcgQWxsSW5mbygpOwogICAgaW50IHZlcnNpb24gPSBzb3VyY2UucmVhZEludCgpOwogICAgaW50IG1pbm9yVmVyc2lvbiA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBpZiAoaW5mby52ZXJzaW9uICE9IHZlcnNpb24gfHwgaW5mby5taW5vclZlcnNpb24gIT0gbWlub3JWZXJzaW9uKSB7CiAgICAgIHByaW50KCJ3YXJuaW5nOiBkYXRhIHdhcyBlbmNvZGVkIHdpdGggZm9ybWF0IHZlcnNpb24gIgogICAgICAgICAgIiR2ZXJzaW9uLiRtaW5vclZlcnNpb24sIGJ1dCBkZWNvZGVkIHdpdGggIgogICAgICAgICAgIiR7aW5mby52ZXJzaW9ufS4ke2luZm8ubWlub3JWZXJzaW9ufSIpOwogICAgfQogICAgaW5mby5saWJyYXJpZXMgPSBzb3VyY2UucmVhZExpc3QocmVhZExpYnJhcnkpOwogICAgaW5mby5jbGFzc2VzID0gc291cmNlLnJlYWRMaXN0KHJlYWRDbGFzcyk7CiAgICBpbmZvLmZ1bmN0aW9ucyA9IHNvdXJjZS5yZWFkTGlzdChyZWFkRnVuY3Rpb24pOwogICAgaW5mby50eXBlZGVmcyA9IHNvdXJjZS5yZWFkTGlzdChyZWFkVHlwZWRlZik7CiAgICBpbmZvLmZpZWxkcyA9IHNvdXJjZS5yZWFkTGlzdChyZWFkRmllbGQpOwogICAgaW5mby5jb25zdGFudHMgPSBzb3VyY2UucmVhZExpc3QocmVhZENvbnN0YW50KTsKICAgIGluZm8uY2xvc3VyZXMgPSBzb3VyY2UucmVhZExpc3QocmVhZENsb3N1cmUpOwoKICAgIHZvaWQgcmVhZERlcGVuZGVuY2llcyhDb2RlSW5mbyBpbmZvKSB7CiAgICAgIGluZm8udXNlcyA9IHNvdXJjZS5yZWFkTGlzdChfcmVhZERlcGVuZGVuY3lJbmZvKTsKICAgIH0KCiAgICBpbmZvLmZpZWxkcy5mb3JFYWNoKHJlYWREZXBlbmRlbmNpZXMpOwogICAgaW5mby5mdW5jdGlvbnMuZm9yRWFjaChyZWFkRGVwZW5kZW5jaWVzKTsKCiAgICBpbnQgZGVwZW5kZW5jaWVzVG90YWwgPSBzb3VyY2UucmVhZEludCgpOwogICAgd2hpbGUgKGRlcGVuZGVuY2llc1RvdGFsID4gMCkgewogICAgICBJbmZvIGtleSA9IHJlYWRJbmZvV2l0aEtpbmQoKTsKICAgICAgTGlzdDxJbmZvPiB2YWx1ZXMgPSBzb3VyY2UucmVhZExpc3QocmVhZEluZm9XaXRoS2luZCk7CiAgICAgIGluZm8uZGVwZW5kZW5jaWVzW2tleV0gPSB2YWx1ZXM7CiAgICAgIGRlcGVuZGVuY2llc1RvdGFsLS07CiAgICB9CgogICAgaW5mby5vdXRwdXRVbml0cyA9IHNvdXJjZS5yZWFkTGlzdChyZWFkT3V0cHV0KTsKCiAgICBNYXA8U3RyaW5nLCBNYXA8U3RyaW5nLCBkeW5hbWljPj4gbWFwID0KICAgICAgICBqc29uRGVjb2RlKHNvdXJjZS5yZWFkU3RyaW5nKCkpLmNhc3Q8U3RyaW5nLCBNYXA8U3RyaW5nLCBkeW5hbWljPj4oKTsKICAgIGZvciAoZmluYWwgbGlicmFyeSBpbiBtYXAudmFsdWVzKSB7CiAgICAgIGlmIChsaWJyYXJ5WydpbXBvcnRzJ10gIT0gbnVsbCkgewogICAgICAgIC8vIFRoZSBpbXBvcnRNYXAgbmVlZHMgdG8gYmUgdHlwZWQgYXMgPFN0cmluZywgTGlzdDxTdHJpbmc+PiwgYnV0IHRoZQogICAgICAgIC8vIGpzb24gcGFyc2VyIHByb2R1Y2VzIDxTdHJpbmcsIGR5bmFtaWM+LgogICAgICAgIGZpbmFsIGltcG9ydE1hcCA9IGxpYnJhcnlbJ2ltcG9ydHMnXSBhcyBNYXA8U3RyaW5nLCBkeW5hbWljPjsKICAgICAgICBpbXBvcnRNYXAuZm9yRWFjaCgocHJlZml4LCBmaWxlcykgewogICAgICAgICAgaW1wb3J0TWFwW3ByZWZpeF0gPSAoZmlsZXMgYXMgTGlzdDxkeW5hbWljPikuY2FzdDxTdHJpbmc+KCk7CiAgICAgICAgfSk7CiAgICAgICAgbGlicmFyeVsnaW1wb3J0cyddID0gaW1wb3J0TWFwLmNhc3Q8U3RyaW5nLCBMaXN0PFN0cmluZz4+KCk7CiAgICAgIH0KICAgIH0KICAgIGluZm8uZGVmZXJyZWRGaWxlcyA9IG1hcDsKICAgIGluZm8ucHJvZ3JhbSA9IHJlYWRQcm9ncmFtKCk7CiAgICByZXR1cm4gaW5mbzsKICB9CgogIFByb2dyYW1JbmZvIHJlYWRQcm9ncmFtKCkgewogICAgdmFyIGluZm8gPSBuZXcgUHJvZ3JhbUluZm8oKTsKICAgIGluZm8uZW50cnlwb2ludCA9IHJlYWRGdW5jdGlvbigpOwogICAgaW5mby5zaXplID0gc291cmNlLnJlYWRJbnQoKTsKICAgIGluZm8uZGFydDJqc1ZlcnNpb24gPSBzb3VyY2UucmVhZFN0cmluZ09yTnVsbCgpOwogICAgaW5mby5jb21waWxhdGlvbk1vbWVudCA9IHJlYWREYXRlKCk7CiAgICBpbmZvLmNvbXBpbGF0aW9uRHVyYXRpb24gPSByZWFkRHVyYXRpb24oKTsKICAgIGluZm8udG9Kc29uRHVyYXRpb24gPSBuZXcgRHVyYXRpb24obWljcm9zZWNvbmRzOiAwKTsKICAgIGluZm8uZHVtcEluZm9EdXJhdGlvbiA9IHJlYWREdXJhdGlvbigpOwogICAgaW5mby5ub1N1Y2hNZXRob2RFbmFibGVkID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBpbmZvLmlzUnVudGltZVR5cGVVc2VkID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBpbmZvLmlzSXNvbGF0ZUluVXNlID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBpbmZvLmlzRnVuY3Rpb25BcHBseVVzZWQgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGluZm8uaXNNaXJyb3JzVXNlZCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgaW5mby5taW5pZmllZCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgcmV0dXJuIGluZm87CiAgfQoKICB2b2lkIF9yZWFkQmFzaWNJbmZvKEJhc2ljSW5mbyBpbmZvKSB7CiAgICBpbmZvLm5hbWUgPSBzb3VyY2UucmVhZFN0cmluZ09yTnVsbCgpOwogICAgaW5mby5zaXplID0gc291cmNlLnJlYWRJbnQoKTsKICAgIGluZm8uY292ZXJhZ2VJZCA9IHNvdXJjZS5yZWFkU3RyaW5nT3JOdWxsKCk7CiAgICBpbmZvLm91dHB1dFVuaXQgPSBfcmVhZE91dHB1dE9yTnVsbCgpOwogICAgLy8gTm90ZTogcGFyZW50IHBvaW50ZXJzIGFyZSBhZGRlZCB3aGVuIGRlc2VyaWFsaXppbmcgcGFyZW50IG5vZGVzLgogIH0KCiAgTGlicmFyeUluZm8gcmVhZExpYnJhcnkoKSA9PiBzb3VyY2UucmVhZENhY2hlZDxMaWJyYXJ5SW5mbz4oKCkgewogICAgICAgIExpYnJhcnlJbmZvIGluZm8gPSBuZXcgTGlicmFyeUluZm8uaW50ZXJuYWwoKTsKICAgICAgICBpbmZvLnVyaSA9IHNvdXJjZS5yZWFkVXJpKCk7CiAgICAgICAgX3JlYWRCYXNpY0luZm8oaW5mbyk7CiAgICAgICAgaW5mby50b3BMZXZlbEZ1bmN0aW9ucyA9IHNvdXJjZS5yZWFkTGlzdChyZWFkRnVuY3Rpb24pOwogICAgICAgIGluZm8udG9wTGV2ZWxWYXJpYWJsZXMgPSBzb3VyY2UucmVhZExpc3QocmVhZEZpZWxkKTsKICAgICAgICBpbmZvLmNsYXNzZXMgPSBzb3VyY2UucmVhZExpc3QocmVhZENsYXNzKTsKICAgICAgICBpbmZvLnR5cGVkZWZzID0gc291cmNlLnJlYWRMaXN0KHJlYWRUeXBlZGVmKTsKCiAgICAgICAgc2V0UGFyZW50KEJhc2ljSW5mbyBjaGlsZCkgPT4gY2hpbGQucGFyZW50ID0gaW5mbzsKICAgICAgICBpbmZvLnRvcExldmVsRnVuY3Rpb25zLmZvckVhY2goc2V0UGFyZW50KTsKICAgICAgICBpbmZvLnRvcExldmVsVmFyaWFibGVzLmZvckVhY2goc2V0UGFyZW50KTsKICAgICAgICBpbmZvLmNsYXNzZXMuZm9yRWFjaChzZXRQYXJlbnQpOwogICAgICAgIGluZm8udHlwZWRlZnMuZm9yRWFjaChzZXRQYXJlbnQpOwogICAgICAgIHJldHVybiBpbmZvOwogICAgICB9KTsKCiAgQ2xhc3NJbmZvIHJlYWRDbGFzcygpID0+IHNvdXJjZS5yZWFkQ2FjaGVkPENsYXNzSW5mbz4oKCkgewogICAgICAgIENsYXNzSW5mbyBpbmZvID0gbmV3IENsYXNzSW5mby5pbnRlcm5hbCgpOwogICAgICAgIF9yZWFkQmFzaWNJbmZvKGluZm8pOwogICAgICAgIGluZm8uaXNBYnN0cmFjdCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgICAgIGluZm8uZmllbGRzID0gc291cmNlLnJlYWRMaXN0KHJlYWRGaWVsZCk7CiAgICAgICAgaW5mby5mdW5jdGlvbnMgPSBzb3VyY2UucmVhZExpc3QocmVhZEZ1bmN0aW9uKTsKCiAgICAgICAgc2V0UGFyZW50KEJhc2ljSW5mbyBjaGlsZCkgPT4gY2hpbGQucGFyZW50ID0gaW5mbzsKICAgICAgICBpbmZvLmZpZWxkcy5mb3JFYWNoKHNldFBhcmVudCk7CiAgICAgICAgaW5mby5mdW5jdGlvbnMuZm9yRWFjaChzZXRQYXJlbnQpOwogICAgICAgIHJldHVybiBpbmZvOwogICAgICB9KTsKCiAgRmllbGRJbmZvIHJlYWRGaWVsZCgpID0+IHNvdXJjZS5yZWFkQ2FjaGVkPEZpZWxkSW5mbz4oKCkgewogICAgICAgIEZpZWxkSW5mbyBpbmZvID0gbmV3IEZpZWxkSW5mby5pbnRlcm5hbCgpOwogICAgICAgIF9yZWFkQmFzaWNJbmZvKGluZm8pOwogICAgICAgIGluZm8uY2xvc3VyZXMgPSBzb3VyY2UucmVhZExpc3QocmVhZENsb3N1cmUpOwogICAgICAgIGluZm8uaW5mZXJyZWRUeXBlID0gc291cmNlLnJlYWRTdHJpbmcoKTsKICAgICAgICBpbmZvLmNvZGUgPSBzb3VyY2UucmVhZExpc3QoX3JlYWRDb2RlU3Bhbik7CiAgICAgICAgaW5mby50eXBlID0gc291cmNlLnJlYWRTdHJpbmcoKTsKICAgICAgICBpbmZvLmlzQ29uc3QgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgICAgICBpZiAoaW5mby5pc0NvbnN0KSB7CiAgICAgICAgICBpbmZvLmluaXRpYWxpemVyID0gX3JlYWRDb25zdGFudE9yTnVsbCgpOwogICAgICAgIH0KICAgICAgICBpbmZvLmNsb3N1cmVzLmZvckVhY2goKGMpID0+IGMucGFyZW50ID0gaW5mbyk7CiAgICAgICAgcmV0dXJuIGluZm87CiAgICAgIH0pOwoKICBDb2RlU3BhbiBfcmVhZENvZGVTcGFuKCkgewogICAgcmV0dXJuIG5ldyBDb2RlU3BhbigpCiAgICAgIC4uc3RhcnQgPSBzb3VyY2UucmVhZEludE9yTnVsbCgpCiAgICAgIC4uZW5kID0gc291cmNlLnJlYWRJbnRPck51bGwoKQogICAgICAuLnRleHQgPSBzb3VyY2UucmVhZFN0cmluZ09yTnVsbCgpOwogIH0KCiAgQ29uc3RhbnRJbmZvIF9yZWFkQ29uc3RhbnRPck51bGwoKSB7CiAgICBib29sIGhhc091dHB1dCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgaWYgKGhhc091dHB1dCkgcmV0dXJuIHJlYWRDb25zdGFudCgpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBDb25zdGFudEluZm8gcmVhZENvbnN0YW50KCkgPT4gc291cmNlLnJlYWRDYWNoZWQ8Q29uc3RhbnRJbmZvPigoKSB7CiAgICAgICAgQ29uc3RhbnRJbmZvIGluZm8gPSBuZXcgQ29uc3RhbnRJbmZvLmludGVybmFsKCk7CiAgICAgICAgX3JlYWRCYXNpY0luZm8oaW5mbyk7CiAgICAgICAgaW5mby5jb2RlID0gc291cmNlLnJlYWRMaXN0KF9yZWFkQ29kZVNwYW4pOwogICAgICAgIHJldHVybiBpbmZvOwogICAgICB9KTsKCiAgRnVuY3Rpb25Nb2RpZmllcnMgX3JlYWRGdW5jdGlvbk1vZGlmaWVycygpIHsKICAgIGludCB2YWx1ZSA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTW9kaWZpZXJzKAogICAgICAgIGlzU3RhdGljOiB2YWx1ZSAmIF9zdGF0aWNNYXNrICE9IDAsCiAgICAgICAgaXNDb25zdDogdmFsdWUgJiBfY29uc3RNYXNrICE9IDAsCiAgICAgICAgaXNGYWN0b3J5OiB2YWx1ZSAmIF9mYWN0b3J5TWFzayAhPSAwLAogICAgICAgIGlzRXh0ZXJuYWw6IHZhbHVlICYgX2V4dGVybmFsTWFzayAhPSAwKTsKICB9CgogIFBhcmFtZXRlckluZm8gX3JlYWRQYXJhbWV0ZXJJbmZvKCkgewogICAgcmV0dXJuIG5ldyBQYXJhbWV0ZXJJbmZvKAogICAgICAgIHNvdXJjZS5yZWFkU3RyaW5nKCksIHNvdXJjZS5yZWFkU3RyaW5nKCksIHNvdXJjZS5yZWFkU3RyaW5nKCkpOwogIH0KCiAgRnVuY3Rpb25JbmZvIHJlYWRGdW5jdGlvbigpID0+IHNvdXJjZS5yZWFkQ2FjaGVkPEZ1bmN0aW9uSW5mbz4oKCkgewogICAgICAgIEZ1bmN0aW9uSW5mbyBpbmZvID0gbmV3IEZ1bmN0aW9uSW5mby5pbnRlcm5hbCgpOwogICAgICAgIF9yZWFkQmFzaWNJbmZvKGluZm8pOwogICAgICAgIGluZm8uY2xvc3VyZXMgPSBzb3VyY2UucmVhZExpc3QocmVhZENsb3N1cmUpOwogICAgICAgIGluZm8ubW9kaWZpZXJzID0gX3JlYWRGdW5jdGlvbk1vZGlmaWVycygpOwogICAgICAgIGluZm8ucmV0dXJuVHlwZSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICAgICAgaW5mby5pbmZlcnJlZFJldHVyblR5cGUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgICAgIGluZm8ucGFyYW1ldGVycyA9IHNvdXJjZS5yZWFkTGlzdChfcmVhZFBhcmFtZXRlckluZm8pOwogICAgICAgIGluZm8uc2lkZUVmZmVjdHMgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgICAgIGluZm8uaW5saW5lZENvdW50ID0gc291cmNlLnJlYWRJbnRPck51bGwoKTsKICAgICAgICBpbmZvLmNvZGUgPSBzb3VyY2UucmVhZExpc3QoX3JlYWRDb2RlU3Bhbik7CiAgICAgICAgaW5mby50eXBlID0gc291cmNlLnJlYWRTdHJpbmcoKTsKICAgICAgICBpbmZvLmNsb3N1cmVzLmZvckVhY2goKGMpID0+IGMucGFyZW50ID0gaW5mbyk7CiAgICAgICAgcmV0dXJuIGluZm87CiAgICAgIH0pOwoKICBEZXBlbmRlbmN5SW5mbyBfcmVhZERlcGVuZGVuY3lJbmZvKCkgPT4KICAgICAgbmV3IERlcGVuZGVuY3lJbmZvKHJlYWRJbmZvV2l0aEtpbmQoKSwgc291cmNlLnJlYWRTdHJpbmdPck51bGwoKSk7CgogIENsb3N1cmVJbmZvIHJlYWRDbG9zdXJlKCkgPT4gc291cmNlLnJlYWRDYWNoZWQ8Q2xvc3VyZUluZm8+KCgpIHsKICAgICAgICBDbG9zdXJlSW5mbyBpbmZvID0gbmV3IENsb3N1cmVJbmZvLmludGVybmFsKCk7CiAgICAgICAgX3JlYWRCYXNpY0luZm8oaW5mbyk7CiAgICAgICAgaW5mby5mdW5jdGlvbiA9IHJlYWRGdW5jdGlvbigpOwogICAgICAgIGluZm8uZnVuY3Rpb24ucGFyZW50ID0gaW5mbzsKICAgICAgICByZXR1cm4gaW5mbzsKICAgICAgfSk7CgogIFR5cGVkZWZJbmZvIHJlYWRUeXBlZGVmKCkgPT4gc291cmNlLnJlYWRDYWNoZWQ8VHlwZWRlZkluZm8+KCgpIHsKICAgICAgICBUeXBlZGVmSW5mbyBpbmZvID0gbmV3IFR5cGVkZWZJbmZvLmludGVybmFsKCk7CiAgICAgICAgX3JlYWRCYXNpY0luZm8oaW5mbyk7CiAgICAgICAgaW5mby50eXBlID0gc291cmNlLnJlYWRTdHJpbmcoKTsKICAgICAgfSk7CgogIE91dHB1dFVuaXRJbmZvIF9yZWFkT3V0cHV0T3JOdWxsKCkgewogICAgYm9vbCBoYXNPdXRwdXQgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGlmIChoYXNPdXRwdXQpIHJldHVybiByZWFkT3V0cHV0KCk7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIE91dHB1dFVuaXRJbmZvIHJlYWRPdXRwdXQoKSA9PiBzb3VyY2UucmVhZENhY2hlZDxPdXRwdXRVbml0SW5mbz4oKCkgewogICAgICAgIE91dHB1dFVuaXRJbmZvIGluZm8gPSBuZXcgT3V0cHV0VW5pdEluZm8uaW50ZXJuYWwoKTsKICAgICAgICBfcmVhZEJhc2ljSW5mbyhpbmZvKTsKICAgICAgICBpbmZvLmZpbGVuYW1lID0gc291cmNlLnJlYWRTdHJpbmdPck51bGwoKTsKICAgICAgICBpbmZvLmltcG9ydHMgPSBzb3VyY2UucmVhZExpc3Qoc291cmNlLnJlYWRTdHJpbmcpOwogICAgICAgIHJldHVybiBpbmZvOwogICAgICB9KTsKfQoKY29uc3QgaW50IF9zdGF0aWNNYXNrID0gMSA8PCAzOwpjb25zdCBpbnQgX2NvbnN0TWFzayA9IDEgPDwgMjsKY29uc3QgaW50IF9mYWN0b3J5TWFzayA9IDEgPDwgMTsKY29uc3QgaW50IF9leHRlcm5hbE1hc2sgPSAxIDw8IDA7CoHMAE5OPAEpBEoBFwEfIRQBMjoCASE9AgEzGQEcASIuBAEqLAQBJh8XBAEgISYyUBUuMzEtMzEBLDcGASwvAS0+HjEIMzYgEgQBKCQeMSctTyouLCkuKCMEASknHi0pWgQBKzMfHT06MDMIBAEjLR0nLzUIBAElLx0zKzEjJBowCAgEASIlIycEATEiGBsGBAEuNR0xCAQBORMtKy8xGgQBMSEhKQQBLjUdMy8pMTwqLjEjCAQBMyQnBAErMx0kCAQBKzMdIwgEATEiGBkGBAEsNR0tNggEAgEVHR0BGDAEARw5BAEcNhQdHhscHh8bHB4fIB0dHh0eBhEEARYeJClIPTYzBjMvNDIuNDIBKzgGASsuAS4kJT0nGwYBNAEsTigoTjNGLEcMRQgGHiIRBAEeIiYiNSkvOSwyMC0yLCcRBAEoKyIxK0gEAUM3JR5APTM2ATszMykqFQoBPTMeLTI4ATsoKxUKAT0zHjYxNCkqHDQKNxUKAR0aJyUqBAEnKCoRBAFGOR40FQoBLyIiLCouMQQBJx5IBAFGOR42My83PzA0NCk3FQoBKkkBQzceKCUVCgFDNx4pCgEnKCgRBAFIPR4zOxUKAgEgHyEiAS5wYWNrYWdlOmRhcnQyanNfaW5mby9iaW5hcnlfc2VyaWFsaXphdGlvbi5kYXJ0PHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2JhY2tlbmQvZmllbGRfYW5hbHlzaXMuZGFydMAAXFYvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0eV91dGlscy5kYXJ0JzsKaW1wb3J0ICcuLi9pci9zY29wZV92aXNpdG9yLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL2VsZW1lbnRzLmRhcnQnIHNob3cgSkZpZWxkOwppbXBvcnQgJy4uL2pzX21vZGVsL2pzX3dvcmxkX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnLi4va2VybmVsL2VsZW1lbnRfbWFwLmRhcnQnOwppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfc3RyYXRlZ3kuZGFydCc7CmltcG9ydCAnLi4va2VybmVsL2tlbGVtZW50cy5kYXJ0JyBzaG93IEtDbGFzcywgS0ZpZWxkLCBLQ29uc3RydWN0b3I7CmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF93b3JsZC5kYXJ0JzsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9tZW1iZXJfdXNhZ2UuZGFydCc7CgovLy8gQWxsb2NhdG9yQW5hbHlzaXMKLy8vCi8vLyBBbmFseXNpcyB0byBkZXRlcm1pbmUgZmVhdHVyZXMgb2YgdGhlIGFsbG9jYXRvciBmdW5jdGlvbnMuIFRoZSBhbGxvY2F0b3IKLy8vIGZ1bmN0aW9uIHRha2VzIHBhcmFtZXRlcnMgZm9yIGVhY2ggZmllbGQgaW5pdGlhbGl6ZXIgYW5kIGluaXRpYWxpemVzIHRoZQovLy8gZmllbGRzLiAgUGFyYW1ldGVycyBtYXkgYmUgb21pdHRlZCBpZiB0aGUgaW5pdGlhbGl6ZXIgaXMgYWx3YXlzIHRoZSBzYW1lCi8vLyBjb25zdGFudCB2YWx1ZS4gIEhvdyB0aGUgYWxsb2NhdG9yIGlzIGVtaXR0ZWQgd2lsbCBkZXRlcm1pbmUgd2hhdCBraW5kIG9mCi8vLyBjb25zdGFudHMgY2FuIGJlIGhhbmRsZWQuICBUaGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvbmx5IHBlcm1pdHMgYG51bGxgLgoKLy8gVE9ETyhzcmEpOiBBbmFseXNpcyB0byBkZXRlcm1pbmUgZmllbGQgb3JkZXIuIEN1cnJlbnQgZmllbGQgb3JkZXIgaXMKLy8gZXNzZW50aWFsbHkgZGVjbGFyYXRpb24gb3JkZXIsIHN1YmNsYXNzIGZpcnN0LiBXZSBjYW4gcmVvcmRlciBmaWVsZHMgc28gdGhhdAovLyBmaWVsZHMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgc2FtZSBjb25zdGFudCBhcmUgdG9nZXRoZXIgdG8gYWxsb3cgY2hhaW5lZAovLyBpbml0aWFsaXphdGlvbi4gRmllbGRzIG9mIGEgY2xhc3MgYW5kIHN1cGVyY2xhc3MgY2FuIGJlIHJlb3JkZXJlZCB0byBhbGxvdwovLyBjaGFpbmluZywgZS5nLgovLwovLyAgICAgdGhpcy54ID0gdGhpcy56ID0gbnVsbDsKLy8KY2xhc3MgS0ZpZWxkQW5hbHlzaXMgewogIGZpbmFsIEtlcm5lbFRvRWxlbWVudE1hcCBfZWxlbWVudE1hcDsKCiAgZmluYWwgTWFwPEtDbGFzcywgQ2xhc3NEYXRhPiBfY2xhc3NEYXRhID0ge307CiAgZmluYWwgTWFwPEtGaWVsZCwgU3RhdGljRmllbGREYXRhPiBfc3RhdGljRmllbGREYXRhID0ge307CgogIEtGaWVsZEFuYWx5c2lzKEtlcm5lbEZyb250ZW5kU3RyYXRlZ3kga2VybmVsU3RyYXRlZ3kpCiAgICAgIDogX2VsZW1lbnRNYXAgPSBrZXJuZWxTdHJhdGVneS5lbGVtZW50TWFwOwoKICAvLyBSZWdpc3RlciBjbGFzcyBkdXJpbmcgcmVzb2x1dGlvbi4gVXNlIHNpbXBsZSBzeW50YWN0aWMgYW5hbHlzaXMgdG8gZmluZAogIC8vIG51bGwtaW5pdGlhbGl6ZWQgZmllbGRzLgogIHZvaWQgcmVnaXN0ZXJJbnN0YW50aWF0ZWRDbGFzcyhLQ2xhc3MgY2xhc3NfKSB7CiAgICBpci5DbGFzcyBjbGFzc05vZGUgPSBfZWxlbWVudE1hcC5nZXRDbGFzc05vZGUoY2xhc3NfKTsKCiAgICBMaXN0PEtDb25zdHJ1Y3Rvcj4gY29uc3RydWN0b3JzID0gW107CiAgICBNYXA8S0ZpZWxkLCBBbGxvY2F0b3JEYXRhPiBmaWVsZERhdGEgPSB7fTsKICAgIGZvciAoaXIuRmllbGQgZmllbGQgaW4gY2xhc3NOb2RlLmZpZWxkcykgewogICAgICBpZiAoIWZpZWxkLmlzSW5zdGFuY2VNZW1iZXIpIGNvbnRpbnVlOwoKICAgICAgRmllbGRFbnRpdHkgZmllbGRFbGVtZW50ID0gX2VsZW1lbnRNYXAuZ2V0RmllbGQoZmllbGQpOwogICAgICBpci5FeHByZXNzaW9uIGV4cHJlc3Npb24gPSBmaWVsZC5pbml0aWFsaXplcjsKICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IF9lbGVtZW50TWFwLmdldENvbnN0YW50VmFsdWUoZXhwcmVzc2lvbiwKICAgICAgICAgIHJlcXVpcmVDb25zdGFudDogZmFsc2UsIGltcGxpY2l0TnVsbDogdHJ1ZSk7CiAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlLmlzQ29uc3RhbnQpIHsKICAgICAgICBmaWVsZERhdGFbZmllbGRFbGVtZW50XSA9IG5ldyBBbGxvY2F0b3JEYXRhKHZhbHVlKTsKICAgICAgfQogICAgfQoKICAgIGZvciAoaXIuQ29uc3RydWN0b3IgY29uc3RydWN0b3IgaW4gY2xhc3NOb2RlLmNvbnN0cnVjdG9ycykgewogICAgICBLQ29uc3RydWN0b3IgY29uc3RydWN0b3JFbGVtZW50ID0gX2VsZW1lbnRNYXAuZ2V0Q29uc3RydWN0b3IoY29uc3RydWN0b3IpOwogICAgICBjb25zdHJ1Y3RvcnMuYWRkKGNvbnN0cnVjdG9yRWxlbWVudCk7CiAgICAgIGZvciAoaXIuSW5pdGlhbGl6ZXIgaW5pdGlhbGl6ZXIgaW4gY29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzKSB7CiAgICAgICAgaWYgKGluaXRpYWxpemVyIGlzIGlyLkZpZWxkSW5pdGlhbGl6ZXIpIHsKICAgICAgICAgIEFsbG9jYXRvckRhdGEgZGF0YSA9CiAgICAgICAgICAgICAgZmllbGREYXRhW19lbGVtZW50TWFwLmdldEZpZWxkKGluaXRpYWxpemVyLmZpZWxkKV07CiAgICAgICAgICBpZiAoZGF0YSA9PSBudWxsKSB7CiAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1cHBvcnQgaW5pdGlhbGl6ZXJzIHdpdGggc2lkZS1lZmZlY3RzPwoKICAgICAgICAgICAgLy8gVGhlIGZpZWxkIGhhcyBhIG5vbi1jb25zdGFudCBpbml0aWFsaXplci4KICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CgogICAgICAgICAgSW5pdGlhbGl6ZXIgaW5pdGlhbGl6ZXJWYWx1ZSA9IGNvbnN0IEluaXRpYWxpemVyLmNvbXBsZXgoKTsKICAgICAgICAgIGlyLkV4cHJlc3Npb24gdmFsdWUgPSBpbml0aWFsaXplci52YWx1ZTsKICAgICAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnRWYWx1ZSA9IF9lbGVtZW50TWFwLmdldENvbnN0YW50VmFsdWUodmFsdWUsCiAgICAgICAgICAgICAgcmVxdWlyZUNvbnN0YW50OiBmYWxzZSwgaW1wbGljaXROdWxsOiB0cnVlKTsKICAgICAgICAgIGlmIChjb25zdGFudFZhbHVlICE9IG51bGwgJiYgY29uc3RhbnRWYWx1ZS5pc0NvbnN0YW50KSB7CiAgICAgICAgICAgIGluaXRpYWxpemVyVmFsdWUgPSBuZXcgSW5pdGlhbGl6ZXIuZGlyZWN0KGNvbnN0YW50VmFsdWUpOwogICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpcyBpci5WYXJpYWJsZUdldCkgewogICAgICAgICAgICBpci5WYXJpYWJsZURlY2xhcmF0aW9uIHBhcmFtZXRlciA9IHZhbHVlLnZhcmlhYmxlOwogICAgICAgICAgICBpbnQgcG9zaXRpb24gPQogICAgICAgICAgICAgICAgY29uc3RydWN0b3IuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMuaW5kZXhPZihwYXJhbWV0ZXIpOwogICAgICAgICAgICBpZiAocG9zaXRpb24gIT0gLTEpIHsKICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPj0gY29uc3RydWN0b3IuZnVuY3Rpb24ucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCkgewogICAgICAgICAgICAgICAgY29uc3RhbnRWYWx1ZSA9IF9lbGVtZW50TWFwLmdldENvbnN0YW50VmFsdWUoCiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLmluaXRpYWxpemVyLAogICAgICAgICAgICAgICAgICAgIHJlcXVpcmVDb25zdGFudDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgaW1wbGljaXROdWxsOiB0cnVlKTsKICAgICAgICAgICAgICAgIGlmIChjb25zdGFudFZhbHVlICE9IG51bGwgJiYgY29uc3RhbnRWYWx1ZS5pc0NvbnN0YW50KSB7CiAgICAgICAgICAgICAgICAgIGluaXRpYWxpemVyVmFsdWUgPQogICAgICAgICAgICAgICAgICAgICAgbmV3IEluaXRpYWxpemVyLnBvc2l0aW9uYWwocG9zaXRpb24sIGNvbnN0YW50VmFsdWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBwb3NpdGlvbiA9CiAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yLmZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycy5pbmRleE9mKHBhcmFtZXRlcik7CiAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uICE9IC0xKSB7CiAgICAgICAgICAgICAgICBjb25zdGFudFZhbHVlID0gX2VsZW1lbnRNYXAuZ2V0Q29uc3RhbnRWYWx1ZSgKICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIuaW5pdGlhbGl6ZXIsCiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZUNvbnN0YW50OiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICBpbXBsaWNpdE51bGw6IHRydWUpOwogICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50VmFsdWUgIT0gbnVsbCAmJiBjb25zdGFudFZhbHVlLmlzQ29uc3RhbnQpIHsKICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZXJWYWx1ZSA9CiAgICAgICAgICAgICAgICAgICAgICBuZXcgSW5pdGlhbGl6ZXIubmFtZWQocGFyYW1ldGVyLm5hbWUsIGNvbnN0YW50VmFsdWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgZGF0YS5pbml0aWFsaXplcnNbY29uc3RydWN0b3JFbGVtZW50XSA9IGluaXRpYWxpemVyVmFsdWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBfY2xhc3NEYXRhW2NsYXNzX10gPSBuZXcgQ2xhc3NEYXRhKGNvbnN0cnVjdG9ycywgZmllbGREYXRhKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJTdGF0aWNGaWVsZChLRmllbGQgZmllbGQsIEluaXRpYWxpemVyQ29tcGxleGl0eSBjb21wbGV4aXR5KSB7CiAgICBpci5GaWVsZCBub2RlID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyTm9kZShmaWVsZCk7CiAgICBpci5FeHByZXNzaW9uIGV4cHJlc3Npb24gPSBub2RlLmluaXRpYWxpemVyOwogICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IF9lbGVtZW50TWFwLmdldENvbnN0YW50VmFsdWUoZXhwcmVzc2lvbiwKICAgICAgICByZXF1aXJlQ29uc3RhbnQ6IG5vZGUuaXNDb25zdCwgaW1wbGljaXROdWxsOiB0cnVlKTsKICAgIGlmICh2YWx1ZSAhPSBudWxsICYmICF2YWx1ZS5pc0NvbnN0YW50KSB7CiAgICAgIHZhbHVlID0gbnVsbDsKICAgIH0KICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSBldmFsdWF0aW9uIG9mIGNvbnN0YW50IHdoZW4gW2NvbXBsZXhpdHldCiAgICAvLyBob2xkcyB0aGUgY29uc3RhbnQgbGl0ZXJhbCBmcm9tIENGRS4KICAgIF9zdGF0aWNGaWVsZERhdGFbZmllbGRdID0gbmV3IFN0YXRpY0ZpZWxkRGF0YSh2YWx1ZSwgY29tcGxleGl0eSk7CiAgfQoKICBBbGxvY2F0b3JEYXRhIGdldEFsbG9jYXRvckRhdGFGb3JUZXN0aW5nKEtGaWVsZCBmaWVsZCkgewogICAgcmV0dXJuIF9jbGFzc0RhdGFbZmllbGQuZW5jbG9zaW5nQ2xhc3NdLmZpZWxkRGF0YVtmaWVsZF07CiAgfQoKICBTdGF0aWNGaWVsZERhdGEgZ2V0U3RhdGljRmllbGREYXRhRm9yVGVzdGluZyhLRmllbGQgZmllbGQpIHsKICAgIHJldHVybiBfc3RhdGljRmllbGREYXRhW2ZpZWxkXTsKICB9Cn0KCmNsYXNzIENsYXNzRGF0YSB7CiAgZmluYWwgTGlzdDxLQ29uc3RydWN0b3I+IGNvbnN0cnVjdG9yczsKICBmaW5hbCBNYXA8S0ZpZWxkLCBBbGxvY2F0b3JEYXRhPiBmaWVsZERhdGE7CgogIENsYXNzRGF0YSh0aGlzLmNvbnN0cnVjdG9ycywgdGhpcy5maWVsZERhdGEpOwp9CgpjbGFzcyBTdGF0aWNGaWVsZERhdGEgewogIGZpbmFsIENvbnN0YW50VmFsdWUgaW5pdGlhbFZhbHVlOwogIGZpbmFsIEluaXRpYWxpemVyQ29tcGxleGl0eSBjb21wbGV4aXR5OwoKICBTdGF0aWNGaWVsZERhdGEodGhpcy5pbml0aWFsVmFsdWUsIHRoaXMuY29tcGxleGl0eSk7CgogIGJvb2wgZ2V0IGhhc0RlcGVuZGVuY2llcyA9PiBjb21wbGV4aXR5ICE9IG51bGwgJiYgY29tcGxleGl0eS5maWVsZHMgIT0gbnVsbDsKfQoKY2xhc3MgQWxsb2NhdG9yRGF0YSB7CiAgZmluYWwgQ29uc3RhbnRWYWx1ZSBpbml0aWFsVmFsdWU7CiAgZmluYWwgTWFwPEtDb25zdHJ1Y3RvciwgSW5pdGlhbGl6ZXI+IGluaXRpYWxpemVycyA9IHt9OwoKICBBbGxvY2F0b3JEYXRhKHRoaXMuaW5pdGlhbFZhbHVlKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgJ0FsbG9jYXRvckRhdGEoaW5pdGlhbFZhbHVlPSR7aW5pdGlhbFZhbHVlPy50b1N0cnVjdHVyZWRUZXh0KCl9LCcKICAgICAgJ2luaXRpYWxpemVycz0kaW5pdGlhbGl6ZXJzKSc7Cn0KCmVudW0gSW5pdGlhbGl6ZXJLaW5kIHsKICBkaXJlY3QsCiAgcG9zaXRpb25hbCwKICBuYW1lZCwKICBjb21wbGV4LAp9CgpjbGFzcyBJbml0aWFsaXplciB7CiAgZmluYWwgSW5pdGlhbGl6ZXJLaW5kIGtpbmQ7CiAgZmluYWwgaW50IGluZGV4OwogIGZpbmFsIFN0cmluZyBuYW1lOwogIGZpbmFsIENvbnN0YW50VmFsdWUgdmFsdWU7CgogIEluaXRpYWxpemVyLmRpcmVjdCh0aGlzLnZhbHVlKQogICAgICA6IGtpbmQgPSBJbml0aWFsaXplcktpbmQuZGlyZWN0LAogICAgICAgIGluZGV4ID0gbnVsbCwKICAgICAgICBuYW1lID0gbnVsbDsKCiAgSW5pdGlhbGl6ZXIucG9zaXRpb25hbCh0aGlzLmluZGV4LCB0aGlzLnZhbHVlKQogICAgICA6IGtpbmQgPSBJbml0aWFsaXplcktpbmQucG9zaXRpb25hbCwKICAgICAgICBuYW1lID0gbnVsbDsKCiAgSW5pdGlhbGl6ZXIubmFtZWQodGhpcy5uYW1lLCB0aGlzLnZhbHVlKQogICAgICA6IGtpbmQgPSBJbml0aWFsaXplcktpbmQubmFtZWQsCiAgICAgICAgaW5kZXggPSBudWxsOwoKICBjb25zdCBJbml0aWFsaXplci5jb21wbGV4KCkKICAgICAgOiBraW5kID0gSW5pdGlhbGl6ZXJLaW5kLmNvbXBsZXgsCiAgICAgICAgaW5kZXggPSBudWxsLAogICAgICAgIG5hbWUgPSBudWxsLAogICAgICAgIHZhbHVlID0gbnVsbDsKCiAgU3RyaW5nIGdldCBzaG9ydFRleHQgewogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgSW5pdGlhbGl6ZXJLaW5kLmRpcmVjdDoKICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJ1Y3R1cmVkVGV4dCgpOwogICAgICBjYXNlIEluaXRpYWxpemVyS2luZC5wb3NpdGlvbmFsOgogICAgICAgIHJldHVybiAnJGluZGV4OiR7dmFsdWUudG9TdHJ1Y3R1cmVkVGV4dCgpfSc7CiAgICAgIGNhc2UgSW5pdGlhbGl6ZXJLaW5kLm5hbWVkOgogICAgICAgIHJldHVybiAnJG5hbWU6JHt2YWx1ZS50b1N0cnVjdHVyZWRUZXh0KCl9JzsKICAgICAgY2FzZSBJbml0aWFsaXplcktpbmQuY29tcGxleDoKICAgICAgICByZXR1cm4gJz8nOwogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ1VuZXhwZWN0ZWQga2luZCAka2luZCcpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gc2hvcnRUZXh0Owp9CgpjbGFzcyBKRmllbGRBbmFseXNpcyB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtKRmllbGRBbmFseXNpc10gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdmaWVsZC1hbmFseXNpcyc7CgogIC8vIC0tY3NwIGFuZCAtLWZhc3Qtc3RhcnR1cCBoYXZlIGRpZmZlcmVudCBjb25zdHJhaW50cyB0byB0aGUgZ2VuZXJhdGVkIGNvZGUuCgogIGZpbmFsIE1hcDxGaWVsZEVudGl0eSwgRmllbGRBbmFseXNpc0RhdGE+IF9maWVsZERhdGE7CgogIEpGaWVsZEFuYWx5c2lzLl8odGhpcy5fZmllbGREYXRhKTsKCiAgLy8vIERlc2VyaWFsaXplcyBhIFtKRmllbGRBbmFseXNpc10gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBKRmllbGRBbmFseXNpcy5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBDb21waWxlck9wdGlvbnMgb3B0aW9ucykgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBNYXA8RmllbGRFbnRpdHksIEZpZWxkQW5hbHlzaXNEYXRhPiBmaWVsZERhdGEgPSBzb3VyY2UucmVhZE1lbWJlck1hcCgKICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlcikgPT4gbmV3IEZpZWxkQW5hbHlzaXNEYXRhLmZyb21EYXRhU291cmNlKHNvdXJjZSkpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBKRmllbGRBbmFseXNpcy5fKGZpZWxkRGF0YSk7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtKRmllbGRBbmFseXNpc10gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVNZW1iZXJNYXAoCiAgICAgICAgX2ZpZWxkRGF0YSwKICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlciwgRmllbGRBbmFseXNpc0RhdGEgZGF0YSkgPT4KICAgICAgICAgICAgZGF0YS53cml0ZVRvRGF0YVNpbmsoc2luaykpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIGZhY3RvcnkgSkZpZWxkQW5hbHlzaXMuZnJvbShLQ2xvc2VkV29ybGRJbXBsIGNsb3NlZFdvcmxkLCBKc1RvRnJvbnRlbmRNYXAgbWFwLAogICAgICBDb21waWxlck9wdGlvbnMgb3B0aW9ucykgewogICAgTWFwPEZpZWxkRW50aXR5LCBGaWVsZEFuYWx5c2lzRGF0YT4gZmllbGREYXRhID0ge307CgogICAgYm9vbCBjYW5CZUVsaWRlZChGaWVsZEVudGl0eSBmaWVsZCkgewogICAgICByZXR1cm4gIWNsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YS5oYXNOb0VsaXNpb24oZmllbGQpICYmCiAgICAgICAgICAhY2xvc2VkV29ybGQubmF0aXZlRGF0YS5pc05hdGl2ZU1lbWJlcihmaWVsZCk7CiAgICB9CgogICAgY2xvc2VkV29ybGQuZmllbGRBbmFseXNpcy5fY2xhc3NEYXRhCiAgICAgICAgLmZvckVhY2goKENsYXNzRW50aXR5IGNscywgQ2xhc3NEYXRhIGNsYXNzRGF0YSkgewogICAgICBjbGFzc0RhdGEuZmllbGREYXRhLmZvckVhY2goKEtGaWVsZCBrRmllbGQsIEFsbG9jYXRvckRhdGEgZGF0YSkgewogICAgICAgIEpGaWVsZCBqRmllbGQgPSBtYXAudG9CYWNrZW5kTWVtYmVyKGtGaWVsZCk7CiAgICAgICAgaWYgKGpGaWVsZCA9PSBudWxsKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTaG91bGQgZWxpZGVkIHN0YXRpYyBmaWVsZHMgYmUgcmVtb3ZlZCBmcm9tIHRoZQogICAgICAgIC8vIEogbW9kZWw/IFN0YXRpYyBzZXR0ZXJzIG1pZ2h0IHN0aWxsIGFzc2lnbiB0byB0aGVtLgoKICAgICAgICBNZW1iZXJVc2FnZSBtZW1iZXJVc2FnZSA9IGNsb3NlZFdvcmxkLmxpdmVNZW1iZXJVc2FnZVtrRmllbGRdOwogICAgICAgIGlmICghbWVtYmVyVXNhZ2UuaGFzUmVhZCkgewogICAgICAgICAgaWYgKGNhbkJlRWxpZGVkKGtGaWVsZCkpIHsKICAgICAgICAgICAgZmllbGREYXRhW2pGaWVsZF0gPSBjb25zdCBGaWVsZEFuYWx5c2lzRGF0YShpc0VsaWRlZDogdHJ1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChkYXRhLmluaXRpYWxWYWx1ZSAhPSBudWxsKSB7CiAgICAgICAgICAgIENvbnN0YW50VmFsdWUgaW5pdGlhbFZhbHVlOwogICAgICAgICAgICBib29sIGlzVG9vQ29tcGxleCA9IGZhbHNlOwoKICAgICAgICAgICAgdm9pZCBpbmNsdWRlSW5pdGlhbFZhbHVlKENvbnN0YW50VmFsdWUgdmFsdWUpIHsKICAgICAgICAgICAgICBpZiAoaXNUb29Db21wbGV4KSByZXR1cm47CiAgICAgICAgICAgICAgaWYgKGluaXRpYWxWYWx1ZSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWUgPSB2YWx1ZTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKGluaXRpYWxWYWx1ZSAhPSB2YWx1ZSkgewogICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlID0gbnVsbDsKICAgICAgICAgICAgICAgIGlzVG9vQ29tcGxleCA9IHRydWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBtZW1iZXJVc2FnZS5pbml0aWFsQ29uc3RhbnRzLmZvckVhY2goaW5jbHVkZUluaXRpYWxWYWx1ZSk7CgogICAgICAgICAgICBib29sIGluQWxsQ29uc3RydWN0b3JzID0gdHJ1ZTsKICAgICAgICAgICAgZm9yIChLQ29uc3RydWN0b3IgY29uc3RydWN0b3IgaW4gY2xhc3NEYXRhLmNvbnN0cnVjdG9ycykgewogICAgICAgICAgICAgIGlmIChpc1Rvb0NvbXBsZXgpIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgTWVtYmVyVXNhZ2UgY29uc3RydWN0b3JVc2FnZSA9CiAgICAgICAgICAgICAgICAgIGNsb3NlZFdvcmxkLmxpdmVNZW1iZXJVc2FnZVtjb25zdHJ1Y3Rvcl07CiAgICAgICAgICAgICAgaWYgKGNvbnN0cnVjdG9yVXNhZ2UgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpc24ndCBjYWxsZWQuCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgUGFyYW1ldGVyU3RydWN0dXJlIGludm9rZWRQYXJhbWV0ZXJzID0KICAgICAgICAgICAgICAgICAgY2xvc2VkV29ybGQuYW5ub3RhdGlvbnNEYXRhLmhhc05vRWxpc2lvbihjb25zdHJ1Y3RvcikKICAgICAgICAgICAgICAgICAgICAgID8gY29uc3RydWN0b3IucGFyYW1ldGVyU3RydWN0dXJlCiAgICAgICAgICAgICAgICAgICAgICA6IGNvbnN0cnVjdG9yVXNhZ2UuaW52b2tlZFBhcmFtZXRlcnM7CgogICAgICAgICAgICAgIEluaXRpYWxpemVyIGluaXRpYWxpemVyID0gZGF0YS5pbml0aWFsaXplcnNbY29uc3RydWN0b3JdOwogICAgICAgICAgICAgIGlmIChpbml0aWFsaXplciA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICBpbkFsbENvbnN0cnVjdG9ycyA9IGZhbHNlOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKGluaXRpYWxpemVyLmtpbmQpIHsKICAgICAgICAgICAgICAgICAgY2FzZSBJbml0aWFsaXplcktpbmQuZGlyZWN0OgogICAgICAgICAgICAgICAgICAgIGluY2x1ZGVJbml0aWFsVmFsdWUoaW5pdGlhbGl6ZXIudmFsdWUpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICBjYXNlIEluaXRpYWxpemVyS2luZC5wb3NpdGlvbmFsOgogICAgICAgICAgICAgICAgICAgIGlmIChpbml0aWFsaXplci5pbmRleCA+PQogICAgICAgICAgICAgICAgICAgICAgICBpbnZva2VkUGFyYW1ldGVycy5wb3NpdGlvbmFsUGFyYW1ldGVycykgewogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZUluaXRpYWxWYWx1ZShpbml0aWFsaXplci52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIGlzVG9vQ29tcGxleCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICBjYXNlIEluaXRpYWxpemVyS2luZC5uYW1lZDoKICAgICAgICAgICAgICAgICAgICBpZiAoIWludm9rZWRQYXJhbWV0ZXJzLm5hbWVkUGFyYW1ldGVycwogICAgICAgICAgICAgICAgICAgICAgICAuY29udGFpbnMoaW5pdGlhbGl6ZXIubmFtZSkpIHsKICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVJbml0aWFsVmFsdWUoaW5pdGlhbGl6ZXIudmFsdWUpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBpc1Rvb0NvbXBsZXggPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgY2FzZSBJbml0aWFsaXplcktpbmQuY29tcGxleDoKICAgICAgICAgICAgICAgICAgICBpc1Rvb0NvbXBsZXggPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIWluQWxsQ29uc3RydWN0b3JzKSB7CiAgICAgICAgICAgICAgaW5jbHVkZUluaXRpYWxWYWx1ZShkYXRhLmluaXRpYWxWYWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFpc1Rvb0NvbXBsZXggJiYgaW5pdGlhbFZhbHVlICE9IG51bGwpIHsKICAgICAgICAgICAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gbWFwLnRvQmFja2VuZENvbnN0YW50KGluaXRpYWxWYWx1ZSk7CiAgICAgICAgICAgICAgYm9vbCBpc0VmZmVjdGl2ZWx5Q29uc3RhbnQgPSBmYWxzZTsKICAgICAgICAgICAgICBib29sIGlzSW5pdGlhbGl6ZWRJbkFsbG9jYXRvciA9IGZhbHNlOwogICAgICAgICAgICAgIGFzc2VydCh2YWx1ZSAhPSBudWxsKTsKICAgICAgICAgICAgICBpZiAoIW1lbWJlclVzYWdlLmhhc1dyaXRlICYmIGNhbkJlRWxpZGVkKGtGaWVsZCkpIHsKICAgICAgICAgICAgICAgIGlzRWZmZWN0aXZlbHlDb25zdGFudCA9IHRydWU7CiAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5pc051bGwgfHwKICAgICAgICAgICAgICAgICAgdmFsdWUuaXNJbnQgfHwKICAgICAgICAgICAgICAgICAgdmFsdWUuaXNCb29sIHx8CiAgICAgICAgICAgICAgICAgIHZhbHVlLmlzU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIsc3JhKTogU3VwcG9ydCBub24tcHJpbWl0aXZlIGNvbnN0YW50cyBpbgogICAgICAgICAgICAgICAgLy8gYWxsb2NhdG9ycyB3aGVuIGl0IGRvZXMgY2F1c2UgYWxsb2NhdG9ycyB0byBkZW9wdGltaXplZAogICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBvZiBkZWZlcnJlZCBsb2FkaW5nLgogICAgICAgICAgICAgICAgaXNJbml0aWFsaXplZEluQWxsb2NhdG9yID0gdHJ1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZmllbGREYXRhW2pGaWVsZF0gPSBuZXcgRmllbGRBbmFseXNpc0RhdGEoCiAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsCiAgICAgICAgICAgICAgICAgIGlzRWZmZWN0aXZlbHlGaW5hbDogaXNFZmZlY3RpdmVseUNvbnN0YW50LAogICAgICAgICAgICAgICAgICBpc0VsaWRlZDogaXNFZmZlY3RpdmVseUNvbnN0YW50LAogICAgICAgICAgICAgICAgICBpc0luaXRpYWxpemVkSW5BbGxvY2F0b3I6IGlzSW5pdGlhbGl6ZWRJbkFsbG9jYXRvcik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CgogICAgTGlzdDxLRmllbGQ+IGluZGVwZW5kZW50RmllbGRzID0gW107CiAgICBMaXN0PEtGaWVsZD4gZGVwZW5kZW50RmllbGRzID0gW107CgogICAgY2xvc2VkV29ybGQubGl2ZU1lbWJlclVzYWdlCiAgICAgICAgLmZvckVhY2goKE1lbWJlckVudGl0eSBtZW1iZXIsIE1lbWJlclVzYWdlIG1lbWJlclVzYWdlKSB7CiAgICAgIGlmIChtZW1iZXIuaXNGaWVsZCAmJiAhbWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgICBTdGF0aWNGaWVsZERhdGEgc3RhdGljRmllbGREYXRhID0KICAgICAgICAgICAgY2xvc2VkV29ybGQuZmllbGRBbmFseXNpcy5fc3RhdGljRmllbGREYXRhW21lbWJlcl07CiAgICAgICAgaWYgKHN0YXRpY0ZpZWxkRGF0YS5oYXNEZXBlbmRlbmNpZXMpIHsKICAgICAgICAgIGRlcGVuZGVudEZpZWxkcy5hZGQobWVtYmVyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaW5kZXBlbmRlbnRGaWVsZHMuYWRkKG1lbWJlcik7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKCiAgICAvLyBGaWVsZHMgYWxyZWFkeSBwcm9jZXNzZWQuCiAgICBTZXQ8S0ZpZWxkPiBwcm9jZXNzZWRGaWVsZHMgPSB7fTsKCiAgICAvLyBGaWVsZHMgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC4gVXNlIGZvciBkZXRlY3RpbmcgY3ljbGljIGRlcGVuZGVuY2llcy4KICAgIFNldDxLRmllbGQ+IGN1cnJlbnRGaWVsZHMgPSB7fTsKCiAgICAvLyBJbmRleCBhc2NyaWJlZCB0byBlYWdlciBmaWVsZHMgdGhhdCBkZXBlbmQgb24gb3RoZXIgZmllbGRzLiBUaGlzIGlzCiAgICAvLyB1c2VkIHRvIHNvcnQgdGhlIGZpZWxkIGluIGVtaXNzaW9uIHRvIGVuc3VyZSB0aGF0IHVzZWQgZmllbGRzIGhhdmUgYmVlbgogICAgLy8gaW5pdGlhbGl6ZWQgd2hlbiByZWFkLgogICAgaW50IGVhZ2VyQ3JlYXRpb25JbmRleCA9IDA7CgogICAgLy8vIENvbXB1dGVzIHRoZSBbRmllbGRBbmFseXNpc0RhdGFdIGZvciB0aGUgSkZpZWxkIGNvcnJlc3BvbmRpbmcgdG8KICAgIC8vLyBba0ZpZWxkXS4KICAgIC8vLwogICAgLy8vIElmIHRoZSBkYXRhIGlzIGN1cnJlbnRseSBiZWVuIGNvbXB1dGVkLCB0aGF0IGlzLCBba0ZpZWxkXSBoYXMgYQogICAgLy8vIGN5Y2xpYyBkZXBlbmRlbmN5LCBgbnVsbGAgaXMgcmV0dXJuZWQuCiAgICBGaWVsZEFuYWx5c2lzRGF0YSBwcm9jZXNzRmllbGQoS0ZpZWxkIGtGaWVsZCkgewogICAgICBKRmllbGQgakZpZWxkID0gbWFwLnRvQmFja2VuZE1lbWJlcihrRmllbGQpOwogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDYW4gd2UgYXNzZXJ0IHRoYXQgW2pGaWVsZF0gZXhpc3RzPwogICAgICBpZiAoakZpZWxkID09IG51bGwpIHJldHVybiBudWxsOwoKICAgICAgRmllbGRBbmFseXNpc0RhdGEgZGF0YSA9IGZpZWxkRGF0YVtqRmllbGRdOwogICAgICBpZiAocHJvY2Vzc2VkRmllbGRzLmNvbnRhaW5zKGtGaWVsZCkpIHsKICAgICAgICAvLyBXZSBvbmx5IHN0b3JlIGRhdGEgZm9yIG5vbi10cml2aWFsIFtGaWVsZEFuYWx5c2lzRGF0YV0uCiAgICAgICAgcmV0dXJuIGRhdGEgPz8gY29uc3QgRmllbGRBbmFseXNpc0RhdGEoKTsKICAgICAgfQogICAgICBpZiAoY3VycmVudEZpZWxkcy5jb250YWlucyhrRmllbGQpKSB7CiAgICAgICAgLy8gQ3ljbGljIGRlcGVuZGVuY3kuCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgY3VycmVudEZpZWxkcy5hZGQoa0ZpZWxkKTsKICAgICAgTWVtYmVyVXNhZ2UgbWVtYmVyVXNhZ2UgPSBjbG9zZWRXb3JsZC5saXZlTWVtYmVyVXNhZ2Vba0ZpZWxkXTsKICAgICAgaWYgKCFtZW1iZXJVc2FnZS5oYXNSZWFkICYmIGNhbkJlRWxpZGVkKGtGaWVsZCkpIHsKICAgICAgICBkYXRhID0gZmllbGREYXRhW2pGaWVsZF0gPSBjb25zdCBGaWVsZEFuYWx5c2lzRGF0YShpc0VsaWRlZDogdHJ1ZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYm9vbCBpc0VmZmVjdGl2ZWx5RmluYWwgPSAhbWVtYmVyVXNhZ2UuaGFzV3JpdGU7CiAgICAgICAgU3RhdGljRmllbGREYXRhIHN0YXRpY0ZpZWxkRGF0YSA9CiAgICAgICAgICAgIGNsb3NlZFdvcmxkLmZpZWxkQW5hbHlzaXMuX3N0YXRpY0ZpZWxkRGF0YVtrRmllbGRdOwogICAgICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPSBtYXAKICAgICAgICAgICAgLnRvQmFja2VuZENvbnN0YW50KHN0YXRpY0ZpZWxkRGF0YS5pbml0aWFsVmFsdWUsIGFsbG93TnVsbDogdHJ1ZSk7CgogICAgICAgIC8vIElmIHRoZSBmaWVsZCBpcyBlZmZlY3RpdmVseSBmaW5hbCB3aXRoIGEgY29uc3RhbnQgaW5pdGlhbGl6ZXIgd2UKICAgICAgICAvLyBlbGlkZSB0aGUgZmllbGQsIGlmIGFsbG93ZWQsIGJlY2F1c2UgaXQgaXMgZWZmZWN0aXZlbHkgY29uc3RhbnQuCiAgICAgICAgYm9vbCBpc0VsaWRlZCA9CiAgICAgICAgICAgIGlzRWZmZWN0aXZlbHlGaW5hbCAmJiB2YWx1ZSAhPSBudWxsICYmIGNhbkJlRWxpZGVkKGtGaWVsZCk7CgogICAgICAgIGJvb2wgaXNFYWdlcjsKCiAgICAgICAgLy8gSWYgdGhlIGZpZWxkIGlzIGVhZ2VyIGFuZCBkZXBlbmRlbnQgb24gb3RoZXIgZWFnZXIgZmllbGRzLAogICAgICAgIC8vIFtlYWdlckZpZWxkRGVwZW5kZW5jaWVzXSBob2xkcyB0aGVzZSBmaWVsZHMgYW5kIFtjcmVhdGlvbkluZGV4XSBpcwogICAgICAgIC8vIGdpdmVuIHRoZSBjcmVhdGlvbiBvcmRlciBpbmRleCB1c2VkIHRvIGVuc3VyZSB0aGF0IGFsbCBkZXBlbmRlbmNpZXMKICAgICAgICAvLyBoYXZlIGJlZW4gYXNzaWduZWQgdGhlaXIgdmFsdWVzIGJlZm9yZSB0aGlzIGZpZWxkIGlzIGluaXRpYWxpemVkLgogICAgICAgIC8vCiAgICAgICAgLy8gU2luY2Ugd2Ugb25seSBuZWVkIHRoZSB2YWx1ZXMgb2YgW2VhZ2VyRmllbGREZXBlbmRlbmNpZXNdIGZvciB0ZXN0aW5nCiAgICAgICAgLy8gYW5kIG9ubHkgdGhlIG5vbi1lbXB0aW5lc3MgZm9yIGRldGVybWluaW5nIHRoZSBuZWVkIGZvciBjcmVhdGlvbgogICAgICAgIC8vIG9yZGVyIGluZGljZXMsIFtlYWdlckZpZWxkRGVwZW5kZW5jaWVzXSBpcyBub24tbnVsbCBpZiB0aGUgZmllbGQgaGFzCiAgICAgICAgLy8gZGVwZW5kZW5jaWVzIGJ1dCBvbmx5IGhvbGQgdGhlc2Ugd2hlbiBbcmV0YWluRGF0YUZvclRlc3RpbmddIGlzCiAgICAgICAgLy8gYHRydWVgLgogICAgICAgIExpc3Q8RmllbGRFbnRpdHk+IGVhZ2VyRmllbGREZXBlbmRlbmNpZXM7CiAgICAgICAgaW50IGNyZWF0aW9uSW5kZXggPSBudWxsOwoKICAgICAgICBpZiAoaXNFbGlkZWQpIHsKICAgICAgICAgIC8vIElmIHRoZSBmaWVsZCBpcyBlbGlkZWQgaXQgbmVlZHMgbm8gaW5pdGlhbGl6ZXIgYW5kIGlzIHRoZXJlZm9yZQogICAgICAgICAgLy8gbm90IGVhZ2VyLgogICAgICAgICAgaXNFYWdlciA9IGZhbHNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBJZiB0aGUgZmllbGQgaGFzIGEgY29uc3RhbnQgaW5pdGlhbGl6ZXIgd2Uga25vdyBpdCBjYW4gYmUKICAgICAgICAgIC8vIGluaXRpYWxpemVkIGVhZ2VybHkuCiAgICAgICAgICAvLwogICAgICAgICAgLy8gSWRlYWxseSB0aGlzIHNob3VsZCBiZSB0aGUgc2FtZSBhcwogICAgICAgICAgLy8gYHN0YXRpY0ZpZWxkRGF0YS5jb21wbGV4aXR5LmlzQ29uc3RhbnRgIGJ1dCBjdXJyZW50bHkgdGhlIGNvbnN0YW50CiAgICAgICAgICAvLyBldmFsdWF0b3IgaGFuZGxlcyBjYXNlcyB0aGF0IHRoZSBhbmFseXNpcyBkb2Vzbid0LCBzbyB3ZSB1c2UgdGhlCiAgICAgICAgICAvLyBiZXR0ZXIgcmVzdWx0LgogICAgICAgICAgaXNFYWdlciA9IHZhbHVlICE9IG51bGw7CiAgICAgICAgICBpZiAoIWlzRWFnZXIpIHsKICAgICAgICAgICAgLy8gVGhlIGZpZWxkIG1pZ2h0IGJlIGVhZ2VyIGRlcGVuZGluZyBvbiB0aGUgaW5pdGlhbGl6ZXIgY29tcGxleGl0eQogICAgICAgICAgICAvLyBhbmQgaXRzIGRlcGVuZGVuY2llcy4KICAgICAgICAgICAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IGNvbXBsZXhpdHkgPSBzdGF0aWNGaWVsZERhdGEuY29tcGxleGl0eTsKICAgICAgICAgICAgaXNFYWdlciA9IGNvbXBsZXhpdHk/LmlzRWFnZXIgPz8gZmFsc2U7CiAgICAgICAgICAgIGlmIChpc0VhZ2VyICYmIGNvbXBsZXhpdHkuZmllbGRzICE9IG51bGwpIHsKICAgICAgICAgICAgICBmb3IgKGlyLkZpZWxkIG5vZGUgaW4gY29tcGxleGl0eS5maWVsZHMpIHsKICAgICAgICAgICAgICAgIEtGaWVsZCBvdGhlckZpZWxkID0gY2xvc2VkV29ybGQuZWxlbWVudE1hcC5nZXRGaWVsZChub2RlKTsKICAgICAgICAgICAgICAgIEZpZWxkQW5hbHlzaXNEYXRhIG90aGVyRGF0YSA9IHByb2Nlc3NGaWVsZChvdGhlckZpZWxkKTsKICAgICAgICAgICAgICAgIGlmIChvdGhlckRhdGEgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAvLyBDeWNsaWMgZGVwZW5kZW5jeSBvbiBbb3RoZXJGaWVsZF0uCiAgICAgICAgICAgICAgICAgIGlzRWFnZXIgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAob3RoZXJEYXRhLmlzTGF6eSkgewogICAgICAgICAgICAgICAgICAvLyBbb3RoZXJGaWVsZF0gbmVlZHMgbGF6eSBpbml0aWFsaXphdGlvbi4KICAgICAgICAgICAgICAgICAgaXNFYWdlciA9IGZhbHNlOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghb3RoZXJEYXRhLmlzRWZmZWN0aXZlbHlGaW5hbCkgewogICAgICAgICAgICAgICAgICAvLyBbb3RoZXJGaWVsZF0gbWlnaHQgbm90IGhvbGQgaXRzIGluaXRpYWwgdmFsdWUgd2hlbiB0aGlzIGZpZWxkCiAgICAgICAgICAgICAgICAgIC8vIGlzIGFjY2Vzc2VkIHRoZSBmaXJzdCB0aW1lLCBzbyB3ZSBuZWVkIHRvIGluaXRpYWxpemUgdGhpcwogICAgICAgICAgICAgICAgICAvLyBmaWVsZCBsYXppbHkuCiAgICAgICAgICAgICAgICAgIGlzRWFnZXIgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIW90aGVyRGF0YS5pc0VmZmVjdGl2ZWx5Q29uc3RhbnQpIHsKICAgICAgICAgICAgICAgICAgZWFnZXJGaWVsZERlcGVuZGVuY2llcyA/Pz0gW107CiAgICAgICAgICAgICAgICAgIGlmIChyZXRhaW5EYXRhRm9yVGVzdGluZykgewogICAgICAgICAgICAgICAgICAgIGVhZ2VyRmllbGREZXBlbmRlbmNpZXMuYWRkKG1hcC50b0JhY2tlbmRNZW1iZXIob3RoZXJGaWVsZCkpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKGlzRWFnZXIgJiYgZWFnZXJGaWVsZERlcGVuZGVuY2llcyAhPSBudWxsKSB7CiAgICAgICAgICAgIGNyZWF0aW9uSW5kZXggPSBlYWdlckNyZWF0aW9uSW5kZXgrKzsKICAgICAgICAgICAgaWYgKCFyZXRhaW5EYXRhRm9yVGVzdGluZykgewogICAgICAgICAgICAgIGVhZ2VyRmllbGREZXBlbmRlbmNpZXMgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBlYWdlckZpZWxkRGVwZW5kZW5jaWVzID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGRhdGEgPSBmaWVsZERhdGFbakZpZWxkXSA9IG5ldyBGaWVsZEFuYWx5c2lzRGF0YSgKICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSwKICAgICAgICAgICAgaXNFZmZlY3RpdmVseUZpbmFsOiBpc0VmZmVjdGl2ZWx5RmluYWwsCiAgICAgICAgICAgIGlzRWxpZGVkOiBpc0VsaWRlZCwKICAgICAgICAgICAgaXNFYWdlcjogaXNFYWdlciwKICAgICAgICAgICAgZWFnZXJDcmVhdGlvbkluZGV4OiBjcmVhdGlvbkluZGV4LAogICAgICAgICAgICBlYWdlckZpZWxkRGVwZW5kZW5jaWVzRm9yVGVzdGluZzogZWFnZXJGaWVsZERlcGVuZGVuY2llcyk7CiAgICAgIH0KCiAgICAgIGN1cnJlbnRGaWVsZHMucmVtb3ZlKGtGaWVsZCk7CiAgICAgIHByb2Nlc3NlZEZpZWxkcy5hZGQoa0ZpZWxkKTsKICAgICAgcmV0dXJuIGRhdGE7CiAgICB9CgogICAgLy8gUHJvY2VzcyBpbmRlcGVuZGVudCBmaWVsZHMgaW4gbm8gcGFydGljdWxhciBvcmRlci4gVGhlIGVtaXR0ZXIgc29ydHMKICAgIC8vIHRoZXNlIGxhdGVyLgogICAgaW5kZXBlbmRlbnRGaWVsZHMuZm9yRWFjaChwcm9jZXNzRmllbGQpOwoKICAgIC8vIFByb2Nlc3MgZGVwZW5kZW50IGZpZWxkcyBpbiBkZWNsYXJhdGlvbiBvcmRlciB0byBtYWtlIGFzY3JpYmVkIGNyZWF0aW9uCiAgICAvLyBpbmRpY2VzIHN0YWJsZS4gVGhlIGVtaXR0ZXIgdXNlcyB0aGUgY3JlYXRpb24gaW5kaWNlcyBmb3Igc29ydGluZwogICAgLy8gZGVwZW5kZW50IGZpZWxkcy4KICAgIGRlcGVuZGVudEZpZWxkcy5zb3J0KChLRmllbGQgYSwgS0ZpZWxkIGIpIHsKICAgICAgaW50IHJlc3VsdCA9CiAgICAgICAgICBjb21wYXJlTGlicmFyaWVzVXJpcyhhLmxpYnJhcnkuY2Fub25pY2FsVXJpLCBiLmxpYnJhcnkuY2Fub25pY2FsVXJpKTsKICAgICAgaWYgKHJlc3VsdCAhPSAwKSByZXR1cm4gcmVzdWx0OwogICAgICBpci5Mb2NhdGlvbiBhTG9jYXRpb24gPSBjbG9zZWRXb3JsZC5lbGVtZW50TWFwLmdldE1lbWJlck5vZGUoYSkubG9jYXRpb247CiAgICAgIGlyLkxvY2F0aW9uIGJMb2NhdGlvbiA9IGNsb3NlZFdvcmxkLmVsZW1lbnRNYXAuZ2V0TWVtYmVyTm9kZShiKS5sb2NhdGlvbjsKICAgICAgcmVzdWx0ID0gY29tcGFyZVNvdXJjZVVyaXMoYUxvY2F0aW9uLmZpbGUsIGJMb2NhdGlvbi5maWxlKTsKICAgICAgaWYgKHJlc3VsdCAhPSAwKSByZXR1cm4gcmVzdWx0OwogICAgICByZXN1bHQgPSBhTG9jYXRpb24ubGluZS5jb21wYXJlVG8oYkxvY2F0aW9uLmxpbmUpOwogICAgICBpZiAocmVzdWx0ICE9IDApIHJldHVybiByZXN1bHQ7CiAgICAgIHJldHVybiBhTG9jYXRpb24uY29sdW1uLmNvbXBhcmVUbyhiTG9jYXRpb24uY29sdW1uKTsKICAgIH0pOwoKICAgIGRlcGVuZGVudEZpZWxkcy5mb3JFYWNoKHByb2Nlc3NGaWVsZCk7CgogICAgcmV0dXJuIG5ldyBKRmllbGRBbmFseXNpcy5fKGZpZWxkRGF0YSk7CiAgfQoKICAvLyBUT0RPKHNyYSk6IEFkZCB3YXkgdG8gbGV0IGluamVjdGVkIGZpZWxkcyBiZSBpbml0aWFsaXplZCB0byBhIGNvbnN0YW50IGluCiAgLy8gYWxsb2NhdG9yLgoKICBGaWVsZEFuYWx5c2lzRGF0YSBnZXRGaWVsZERhdGEoSkZpZWxkIGZpZWxkKSB7CiAgICByZXR1cm4gX2ZpZWxkRGF0YVtmaWVsZF0gPz8gY29uc3QgRmllbGRBbmFseXNpc0RhdGEoKTsKICB9Cn0KCi8vIFRPRE8oam9obm5pd2ludGhlcik6IE1lcmdlIHRoaXMgaW50byBbRmllbGREYXRhXS4KY2xhc3MgRmllbGRBbmFseXNpc0RhdGEgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2ZpZWxkLWFuYWx5c2lzLWRhdGEnOwoKICBmaW5hbCBDb25zdGFudFZhbHVlIGluaXRpYWxWYWx1ZTsKICBmaW5hbCBib29sIGlzSW5pdGlhbGl6ZWRJbkFsbG9jYXRvcjsKICBmaW5hbCBib29sIGlzRWZmZWN0aXZlbHlGaW5hbDsKICBmaW5hbCBib29sIGlzRWxpZGVkOwoKICAvLy8gSWYgYHRydWVgIHRoZSBmaWVsZCBpcyBub3QgZWZmZWN0aXZlbHkgY29uc3RhbnQgYnV0IHRoZSBpbml0aWFsaXplciBjYW4gYmUKICAvLy8gZ2VuZXJhdGVkIGVhZ2VybHkgd2l0aG91dCB0aGUgbmVlZCBmb3IgbGF6eSBpbml0aWFsaXphdGlvbiB3cmFwcGVyLgogIGZpbmFsIGJvb2wgaXNFYWdlcjsKCiAgLy8vIEluZGV4IGFzY3JpYmVkIHRvIGVhZ2VyIGZpZWxkcyB0aGF0IGRlcGVuZCBvbiBvdGhlciBmaWVsZHMuIFRoaXMgaXMKICAvLy8gdXNlZCB0byBzb3J0IHRoZSBmaWVsZCBpbiBlbWlzc2lvbiB0byBlbnN1cmUgdGhhdCB1c2VkIGZpZWxkcyBoYXZlIGJlZW4KICAvLy8gaW5pdGlhbGl6ZWQgd2hlbiByZWFkLgogIGZpbmFsIGludCBlYWdlckNyZWF0aW9uSW5kZXg7CgogIGZpbmFsIExpc3Q8RmllbGRFbnRpdHk+IGVhZ2VyRmllbGREZXBlbmRlbmNpZXNGb3JUZXN0aW5nOwoKICBjb25zdCBGaWVsZEFuYWx5c2lzRGF0YSgKICAgICAge3RoaXMuaW5pdGlhbFZhbHVlLAogICAgICB0aGlzLmlzSW5pdGlhbGl6ZWRJbkFsbG9jYXRvcjogZmFsc2UsCiAgICAgIHRoaXMuaXNFZmZlY3RpdmVseUZpbmFsOiBmYWxzZSwKICAgICAgdGhpcy5pc0VsaWRlZDogZmFsc2UsCiAgICAgIHRoaXMuaXNFYWdlcjogZmFsc2UsCiAgICAgIHRoaXMuZWFnZXJDcmVhdGlvbkluZGV4OiBudWxsLAogICAgICB0aGlzLmVhZ2VyRmllbGREZXBlbmRlbmNpZXNGb3JUZXN0aW5nOiBudWxsfSk7CgogIGZhY3RvcnkgRmllbGRBbmFseXNpc0RhdGEuZnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwoKICAgIENvbnN0YW50VmFsdWUgaW5pdGlhbFZhbHVlID0gc291cmNlLnJlYWRDb25zdGFudE9yTnVsbCgpOwogICAgYm9vbCBpc0luaXRpYWxpemVkSW5BbGxvY2F0b3IgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGJvb2wgaXNFZmZlY3RpdmVseUZpbmFsID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBib29sIGlzRWxpZGVkID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBib29sIGlzRWFnZXIgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGludCBlYWdlckNyZWF0aW9uSW5kZXggPSBzb3VyY2UucmVhZEludE9yTnVsbCgpOwogICAgTGlzdDxGaWVsZEVudGl0eT4gZWFnZXJGaWVsZERlcGVuZGVuY2llcyA9CiAgICAgICAgc291cmNlLnJlYWRNZW1iZXJzPEZpZWxkRW50aXR5PihlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEZpZWxkQW5hbHlzaXNEYXRhKAogICAgICAgIGluaXRpYWxWYWx1ZTogaW5pdGlhbFZhbHVlLAogICAgICAgIGlzSW5pdGlhbGl6ZWRJbkFsbG9jYXRvcjogaXNJbml0aWFsaXplZEluQWxsb2NhdG9yLAogICAgICAgIGlzRWZmZWN0aXZlbHlGaW5hbDogaXNFZmZlY3RpdmVseUZpbmFsLAogICAgICAgIGlzRWxpZGVkOiBpc0VsaWRlZCwKICAgICAgICBpc0VhZ2VyOiBpc0VhZ2VyLAogICAgICAgIGVhZ2VyQ3JlYXRpb25JbmRleDogZWFnZXJDcmVhdGlvbkluZGV4LAogICAgICAgIGVhZ2VyRmllbGREZXBlbmRlbmNpZXNGb3JUZXN0aW5nOiBlYWdlckZpZWxkRGVwZW5kZW5jaWVzKTsKICB9CgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVDb25zdGFudE9yTnVsbChpbml0aWFsVmFsdWUpOwogICAgc2luay53cml0ZUJvb2woaXNJbml0aWFsaXplZEluQWxsb2NhdG9yKTsKICAgIHNpbmsud3JpdGVCb29sKGlzRWZmZWN0aXZlbHlGaW5hbCk7CiAgICBzaW5rLndyaXRlQm9vbChpc0VsaWRlZCk7CiAgICBzaW5rLndyaXRlQm9vbChpc0VhZ2VyKTsKICAgIHNpbmsud3JpdGVJbnRPck51bGwoZWFnZXJDcmVhdGlvbkluZGV4KTsKICAgIHNpbmsud3JpdGVNZW1iZXJzKGVhZ2VyRmllbGREZXBlbmRlbmNpZXNGb3JUZXN0aW5nLCBhbGxvd051bGw6IHRydWUpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIC8vLyBJZiBgdHJ1ZWAgdGhlIGluaXRpYWxpemVyIGZvciB0aGlzIGZpZWxkIHJlcXVpcmVzIGEgbGF6eSBpbml0aWFsaXphdGlvbgogIC8vLyB3cmFwcGVyLgogIGJvb2wgZ2V0IGlzTGF6eSA9PiBpbml0aWFsVmFsdWUgPT0gbnVsbCAmJiAhaXNFYWdlcjsKCiAgYm9vbCBnZXQgaXNFZmZlY3RpdmVseUNvbnN0YW50ID0+CiAgICAgIGlzRWZmZWN0aXZlbHlGaW5hbCAmJiBpc0VsaWRlZCAmJiBpbml0aWFsVmFsdWUgIT0gbnVsbDsKCiAgQ29uc3RhbnRWYWx1ZSBnZXQgY29uc3RhbnRWYWx1ZSA9PiBpc0VmZmVjdGl2ZWx5RmluYWwgPyBpbml0aWFsVmFsdWUgOiBudWxsOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PgogICAgICAnRmllbGRBbmFseXNpc0RhdGEoaW5pdGlhbFZhbHVlPSR7aW5pdGlhbFZhbHVlPy50b1N0cnVjdHVyZWRUZXh0KCl9LCcKICAgICAgJ2lzSW5pdGlhbGl6ZWRJbkFsbG9jYXRvcj0kaXNJbml0aWFsaXplZEluQWxsb2NhdG9yLCcKICAgICAgJ2lzRWZmZWN0aXZlbHlGaW5hbD0kaXNFZmZlY3RpdmVseUZpbmFsLGlzRWxpZGVkPSRpc0VsaWRlZCwnCiAgICAgICdpc0VhZ2VyPSRpc0VhZ2VyLGVhZ2VyQ3JlYXRpb25JbmRleD0kZWFnZXJDcmVhdGlvbkluZGV4LCcKICAgICAgJ2VhZ2VyRmllbGREZXBlbmRlbmNpZXM9JGVhZ2VyRmllbGREZXBlbmRlbmNpZXNGb3JUZXN0aW5nKSc7Cn0Kgn0ATk48ASgBGSMkKCMwLCUpRSYaLigBFgRNTU1OTwFIUEtOEgMfAxcoATA8ATgxAU0eMjsBKi8vLQE+NEU3LzwIBgFBUSxFMh9CHkwBORYMAUYzTDtDRjA/G04iTT4rLClJJUsSEBUZSyQ+KywpSSVMEhAODEQKCAZBBAFNNjFDPC4UBkwsRgQBOz4EAT8kBAIBEikuATACARgkKgE3AU8CARYkOgEkAQwXSCUCARcKDgkLAgEUHhMVHQEhJxYVATErFQErJhYBHigWFRYBGRQjKSc1IjQkFAY5BAEMIgIBF0gdLgFQATgBJQE8LTQXSlAVLAQBMigVGRQ5KRMEAVEhOAEqQTkGASk6SDUeEgoBUD8BRyQlSQwRKygnATwoKiYyJSUQDgFHAStHIhcQAS08LjIaEDVINzwBSCkrFywvPBszLUI+HSsWGy47Nz4dKxYbMCkbEhAOJjYOOUkyNSVCLikhIiRPSzAxEDknPTNHDgwKCggBKScBIEI4KkAvJxEpCggIASEmAVAkAUtPHiABSRIISC80M0InATIuQzIILB4VCCFFOUwPOSpAIk8BTEwYSAEWAUZOT00LUUxQSxMyIgEYTRgbEUciDTBQThwjGlAlSzQ4OUtIKTgjGRIoPSMZEjVTTyMjGRI4MS5RFBIQDgwBOzIpLQ4TKwwKATohNCAeL0cIASQjEwYBTBQtAU9JGTATUCZQUEImOSY7CAErASwEAU8QATE7BAIBNRozASQnIRcBUUoWAUpOHSABPAEbGiwmHBslNQFAFwE+NzEnJjUvPBUiJDwwHBowQwQBKBUsLigeHS1KEwQBTg83ASQ+AU8BDBdMPENBQwIBM3BhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvZmllbGRfYW5hbHlzaXMuZGFydDRzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy91dGlsL3NpbmtfYWRhcHRlci5kYXJ0gStpbXBvcnQgJy4uLy4uL2NvbXBpbGVyX25ldy5kYXJ0JyBhcyBhcGk7CgpjbGFzcyBCaW5hcnlPdXRwdXRTaW5rQWRhcHRlciBpbXBsZW1lbnRzIFNpbms8TGlzdDxpbnQ+PiB7CiAgYXBpLkJpbmFyeU91dHB1dFNpbmsgb3V0cHV0OwoKICBCaW5hcnlPdXRwdXRTaW5rQWRhcHRlcih0aGlzLm91dHB1dCk7CgogIEBvdmVycmlkZQogIHZvaWQgYWRkKExpc3Q8aW50PiBkYXRhKSB7CiAgICBvdXRwdXQud3JpdGUoZGF0YSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsb3NlKCkgewogICAgb3V0cHV0LmNsb3NlKCk7CiAgfQp9ChMAKQE7HwEoAQwdGAQBDBEUBAIBK3BhY2thZ2U6Y29tcGlsZXIvc3JjL3V0aWwvc2lua19hZGFwdGVyLmRhcnQ5c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfYmFja2VuZC9hbm5vdGF0aW9ucy5kYXJ0wABOdC8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGpzX2JhY2tlbmQuYmFja2VuZC5hbm5vdGF0aW9uczsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgS0NvbW1vbkVsZW1lbnRzLCBLRWxlbWVudEVudmlyb25tZW50OwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZGlhZ25vc3RpY3MvZGlhZ25vc3RpY19saXN0ZW5lci5kYXJ0JzsKaW1wb3J0ICcuLi9kaWFnbm9zdGljcy9tZXNzYWdlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9pci9hbm5vdGF0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi9pci91dGlsLmRhcnQnOwppbXBvcnQgJy4uL2tlcm5lbC9kYXJ0MmpzX3RhcmdldC5kYXJ0JzsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi91dGlsL2VudW1zZXQuZGFydCc7CgpjbGFzcyBQcmFnbWFBbm5vdGF0aW9uIHsKICBmaW5hbCBpbnQgX2luZGV4OwogIGZpbmFsIFN0cmluZyBuYW1lOwogIGZpbmFsIGJvb2wgZm9yRnVuY3Rpb25zT25seTsKICBmaW5hbCBib29sIGZvckZpZWxkc09ubHk7CiAgZmluYWwgYm9vbCBpbnRlcm5hbE9ubHk7CgogIGNvbnN0IFByYWdtYUFubm90YXRpb24odGhpcy5faW5kZXgsIHRoaXMubmFtZSwKICAgICAge3RoaXMuZm9yRnVuY3Rpb25zT25seTogZmFsc2UsCiAgICAgIHRoaXMuZm9yRmllbGRzT25seTogZmFsc2UsCiAgICAgIHRoaXMuaW50ZXJuYWxPbmx5OiBmYWxzZX0pOwoKICBpbnQgZ2V0IGluZGV4IHsKICAgIGFzc2VydChfaW5kZXggPT0gdmFsdWVzLmluZGV4T2YodGhpcykpOwogICAgcmV0dXJuIF9pbmRleDsKICB9CgogIC8vLyBUZWxscyB0aGUgb3B0aW1pemluZyBjb21waWxlciB0byBub3QgaW5saW5lIHRoZSBhbm5vdGF0ZWQgbWV0aG9kLgogIHN0YXRpYyBjb25zdCBQcmFnbWFBbm5vdGF0aW9uIG5vSW5saW5lID0KICAgICAgY29uc3QgUHJhZ21hQW5ub3RhdGlvbigwLCAnbm9JbmxpbmUnLCBmb3JGdW5jdGlvbnNPbmx5OiB0cnVlKTsKCiAgLy8vIFRlbGxzIHRoZSBvcHRpbWl6aW5nIGNvbXBpbGVyIHRvIGFsd2F5cyBpbmxpbmUgdGhlIGFubm90YXRlZCBtZXRob2QsIGlmCiAgLy8vIHBvc3NpYmxlLgogIHN0YXRpYyBjb25zdCBQcmFnbWFBbm5vdGF0aW9uIHRyeUlubGluZSA9CiAgICAgIGNvbnN0IFByYWdtYUFubm90YXRpb24oMSwgJ3RyeUlubGluZScsIGZvckZ1bmN0aW9uc09ubHk6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgUHJhZ21hQW5ub3RhdGlvbiBkaXNhYmxlRmluYWwgPSBjb25zdCBQcmFnbWFBbm5vdGF0aW9uKAogICAgICAyLCAnZGlzYWJsZUZpbmFsJywKICAgICAgZm9yRnVuY3Rpb25zT25seTogdHJ1ZSwgaW50ZXJuYWxPbmx5OiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFByYWdtYUFubm90YXRpb24gbm9FbGlzaW9uID0KICAgICAgY29uc3QgUHJhZ21hQW5ub3RhdGlvbigzLCAnbm9FbGlzaW9uJyk7CgogIC8vLyBUZWxscyB0aGUgb3B0aW1pemluZyBjb21waWxlciB0aGF0IHRoZSBhbm5vdGF0ZWQgbWV0aG9kIGNhbm5vdCB0aHJvdy4KICAvLy8gUmVxdWlyZXMgQHByYWdtYSgnZGFydDJqczpub0lubGluZScpIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4KICBzdGF0aWMgY29uc3QgUHJhZ21hQW5ub3RhdGlvbiBub1Rocm93cyA9IGNvbnN0IFByYWdtYUFubm90YXRpb24oNCwgJ25vVGhyb3dzJywKICAgICAgZm9yRnVuY3Rpb25zT25seTogdHJ1ZSwgaW50ZXJuYWxPbmx5OiB0cnVlKTsKCiAgLy8vIFRlbGxzIHRoZSBvcHRpbWl6aW5nIGNvbXBpbGVyIHRoYXQgdGhlIGFubm90YXRlZCBtZXRob2QgaGFzIG5vCiAgLy8vIHNpZGUtZWZmZWN0cy4gQWxsb2NhdGlvbnMgZG9uJ3QgY291bnQgYXMgc2lkZS1lZmZlY3RzLCBzaW5jZSB0aGV5IGNhbiBiZQogIC8vLyBkcm9wcGVkIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHNlbWFudGljcyBvZiB0aGUgcHJvZ3JhbS4KICAvLy8KICAvLy8gUmVxdWlyZXMgQHByYWdtYSgnZGFydDJqczpub0lubGluZScpIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4KICBzdGF0aWMgY29uc3QgUHJhZ21hQW5ub3RhdGlvbiBub1NpZGVFZmZlY3RzID0gY29uc3QgUHJhZ21hQW5ub3RhdGlvbigKICAgICAgNSwgJ25vU2lkZUVmZmVjdHMnLAogICAgICBmb3JGdW5jdGlvbnNPbmx5OiB0cnVlLCBpbnRlcm5hbE9ubHk6IHRydWUpOwoKICAvLy8gVXNlIHRoaXMgYXMgbWV0YWRhdGEgb24gbWV0aG9kIGRlY2xhcmF0aW9ucyB0byBkaXNhYmxlIGNsb3NlZCB3b3JsZAogIC8vLyBhc3N1bXB0aW9ucyBvbiBwYXJhbWV0ZXJzLCBlZmZlY3RpdmVseSBhc3N1bWluZyB0aGF0IHRoZSBydW50aW1lIGFyZ3VtZW50cwogIC8vLyBjb3VsZCBiZSBhbnkgdmFsdWUuIE5vdGUgdGhhdCB0aGUgY29uc3RyYWludHMgZHVlIHRvIHN0YXRpYyB0eXBlcyBzdGlsbAogIC8vLyBhcHBseS4KICBzdGF0aWMgY29uc3QgUHJhZ21hQW5ub3RhdGlvbiBhc3N1bWVEeW5hbWljID0gY29uc3QgUHJhZ21hQW5ub3RhdGlvbigKICAgICAgNiwgJ2Fzc3VtZUR5bmFtaWMnLAogICAgICBmb3JGdW5jdGlvbnNPbmx5OiB0cnVlLCBpbnRlcm5hbE9ubHk6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgUHJhZ21hQW5ub3RhdGlvbiBhc1RydXN0ID0gY29uc3QgUHJhZ21hQW5ub3RhdGlvbig3LCAnYXM6dHJ1c3QnLAogICAgICBmb3JGdW5jdGlvbnNPbmx5OiBmYWxzZSwgaW50ZXJuYWxPbmx5OiBmYWxzZSk7CgogIHN0YXRpYyBjb25zdCBQcmFnbWFBbm5vdGF0aW9uIGFzQ2hlY2sgPSBjb25zdCBQcmFnbWFBbm5vdGF0aW9uKDgsICdhczpjaGVjaycsCiAgICAgIGZvckZ1bmN0aW9uc09ubHk6IGZhbHNlLCBpbnRlcm5hbE9ubHk6IGZhbHNlKTsKCiAgc3RhdGljIGNvbnN0IFByYWdtYUFubm90YXRpb24gdHlwZXNUcnVzdCA9IGNvbnN0IFByYWdtYUFubm90YXRpb24oCiAgICAgIDksICd0eXBlczp0cnVzdCcsCiAgICAgIGZvckZ1bmN0aW9uc09ubHk6IGZhbHNlLCBpbnRlcm5hbE9ubHk6IGZhbHNlKTsKCiAgc3RhdGljIGNvbnN0IFByYWdtYUFubm90YXRpb24gdHlwZXNDaGVjayA9IGNvbnN0IFByYWdtYUFubm90YXRpb24oCiAgICAgIDEwLCAndHlwZXM6Y2hlY2snLAogICAgICBmb3JGdW5jdGlvbnNPbmx5OiBmYWxzZSwgaW50ZXJuYWxPbmx5OiBmYWxzZSk7CgogIHN0YXRpYyBjb25zdCBQcmFnbWFBbm5vdGF0aW9uIHBhcmFtZXRlclRydXN0ID0gY29uc3QgUHJhZ21hQW5ub3RhdGlvbigKICAgICAgMTEsICdwYXJhbWV0ZXI6dHJ1c3QnLAogICAgICBmb3JGdW5jdGlvbnNPbmx5OiBmYWxzZSwgaW50ZXJuYWxPbmx5OiBmYWxzZSk7CgogIHN0YXRpYyBjb25zdCBQcmFnbWFBbm5vdGF0aW9uIHBhcmFtZXRlckNoZWNrID0gY29uc3QgUHJhZ21hQW5ub3RhdGlvbigKICAgICAgMTIsICdwYXJhbWV0ZXI6Y2hlY2snLAogICAgICBmb3JGdW5jdGlvbnNPbmx5OiBmYWxzZSwgaW50ZXJuYWxPbmx5OiBmYWxzZSk7CgogIHN0YXRpYyBjb25zdCBQcmFnbWFBbm5vdGF0aW9uIGRvd25jYXN0VHJ1c3QgPSBjb25zdCBQcmFnbWFBbm5vdGF0aW9uKAogICAgICAxMywgJ2Rvd25jYXN0OnRydXN0JywKICAgICAgZm9yRnVuY3Rpb25zT25seTogZmFsc2UsIGludGVybmFsT25seTogZmFsc2UpOwoKICBzdGF0aWMgY29uc3QgUHJhZ21hQW5ub3RhdGlvbiBkb3duY2FzdENoZWNrID0gY29uc3QgUHJhZ21hQW5ub3RhdGlvbigKICAgICAgMTQsICdkb3duY2FzdDpjaGVjaycsCiAgICAgIGZvckZ1bmN0aW9uc09ubHk6IGZhbHNlLCBpbnRlcm5hbE9ubHk6IGZhbHNlKTsKCiAgc3RhdGljIGNvbnN0IExpc3Q8UHJhZ21hQW5ub3RhdGlvbj4gdmFsdWVzID0gWwogICAgbm9JbmxpbmUsCiAgICB0cnlJbmxpbmUsCiAgICBkaXNhYmxlRmluYWwsCiAgICBub0VsaXNpb24sCiAgICBub1Rocm93cywKICAgIG5vU2lkZUVmZmVjdHMsCiAgICBhc3N1bWVEeW5hbWljLAogICAgYXNUcnVzdCwKICAgIGFzQ2hlY2ssCiAgICB0eXBlc1RydXN0LAogICAgdHlwZXNDaGVjaywKICAgIHBhcmFtZXRlclRydXN0LAogICAgcGFyYW1ldGVyQ2hlY2ssCiAgICBkb3duY2FzdFRydXN0LAogICAgZG93bmNhc3RDaGVjaywKICBdOwoKICBzdGF0aWMgY29uc3QgTWFwPFByYWdtYUFubm90YXRpb24sIFNldDxQcmFnbWFBbm5vdGF0aW9uPj4gaW1wbGllcyA9IHsKICAgIHR5cGVzVHJ1c3Q6IHtwYXJhbWV0ZXJUcnVzdCwgZG93bmNhc3RUcnVzdH0sCiAgICB0eXBlc0NoZWNrOiB7cGFyYW1ldGVyQ2hlY2ssIGRvd25jYXN0Q2hlY2t9LAogIH07CiAgc3RhdGljIGNvbnN0IE1hcDxQcmFnbWFBbm5vdGF0aW9uLCBTZXQ8UHJhZ21hQW5ub3RhdGlvbj4+IGV4Y2x1ZGVzID0gewogICAgbm9JbmxpbmU6IHt0cnlJbmxpbmV9LAogICAgdHJ5SW5saW5lOiB7bm9JbmxpbmV9LAogICAgdHlwZXNUcnVzdDoge3R5cGVzQ2hlY2ssIHBhcmFtZXRlckNoZWNrLCBkb3duY2FzdENoZWNrfSwKICAgIHR5cGVzQ2hlY2s6IHt0eXBlc1RydXN0LCBwYXJhbWV0ZXJUcnVzdCwgZG93bmNhc3RUcnVzdH0sCiAgICBwYXJhbWV0ZXJUcnVzdDoge3BhcmFtZXRlckNoZWNrfSwKICAgIHBhcmFtZXRlckNoZWNrOiB7cGFyYW1ldGVyVHJ1c3R9LAogICAgZG93bmNhc3RUcnVzdDoge2Rvd25jYXN0Q2hlY2t9LAogICAgZG93bmNhc3RDaGVjazoge2Rvd25jYXN0VHJ1c3R9LAogICAgYXNUcnVzdDoge2FzQ2hlY2t9LAogICAgYXNDaGVjazoge2FzVHJ1c3R9LAogIH07CiAgc3RhdGljIGNvbnN0IE1hcDxQcmFnbWFBbm5vdGF0aW9uLCBTZXQ8UHJhZ21hQW5ub3RhdGlvbj4+IHJlcXVpcmVzID0gewogICAgbm9UaHJvd3M6IHtub0lubGluZX0sCiAgICBub1NpZGVFZmZlY3RzOiB7bm9JbmxpbmV9LAogIH07Cn0KCkxpc3Q8UHJhZ21hQW5ub3RhdGlvbkRhdGE+IGNvbXB1dGVQcmFnbWFBbm5vdGF0aW9uRGF0YSgKICAgIEtDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgIEtFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50LAogICAgTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICBMaXN0PFByYWdtYUFubm90YXRpb25EYXRhPiBhbm5vdGF0aW9ucyA9IFtdOwogIGZvciAoQ29uc3RhbnRWYWx1ZSBjb25zdGFudFZhbHVlCiAgICAgIGluIGVsZW1lbnRFbnZpcm9ubWVudC5nZXRNZW1iZXJNZXRhZGF0YShlbGVtZW50KSkgewogICAgaWYgKCFjb25zdGFudFZhbHVlLmlzQ29uc3RydWN0ZWRPYmplY3QpIGNvbnRpbnVlOwogICAgQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlIHZhbHVlID0gY29uc3RhbnRWYWx1ZTsKICAgIENsYXNzRW50aXR5IGNscyA9IHZhbHVlLnR5cGUuZWxlbWVudDsKICAgIGFzc2VydChjbHMgIT0gbnVsbCk7IC8vIFVucmVzb2x2ZWQgY2xhc3NlcyBudWxsLgoKICAgIGlmIChjbHMgPT0gY29tbW9uRWxlbWVudHMubWV0YU5vSW5saW5lQ2xhc3MpIHsKICAgICAgYW5ub3RhdGlvbnMuYWRkKGNvbnN0IFByYWdtYUFubm90YXRpb25EYXRhKCdub0lubGluZScpKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IGNvbW1vbkVsZW1lbnRzLm1ldGFUcnlJbmxpbmVDbGFzcykgewogICAgICBhbm5vdGF0aW9ucy5hZGQoY29uc3QgUHJhZ21hQW5ub3RhdGlvbkRhdGEoJ3RyeUlubGluZScpKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IGNvbW1vbkVsZW1lbnRzLnByYWdtYUNsYXNzKSB7CiAgICAgIENvbnN0YW50VmFsdWUgbmFtZVZhbHVlID0KICAgICAgICAgIHZhbHVlLmZpZWxkc1tjb21tb25FbGVtZW50cy5wcmFnbWFDbGFzc05hbWVGaWVsZF07CiAgICAgIGlmIChuYW1lVmFsdWUgPT0gbnVsbCB8fCAhbmFtZVZhbHVlLmlzU3RyaW5nKSBjb250aW51ZTsKICAgICAgU3RyaW5nIG5hbWUgPSAobmFtZVZhbHVlIGFzIFN0cmluZ0NvbnN0YW50VmFsdWUpLnN0cmluZ1ZhbHVlOwogICAgICBTdHJpbmcgcHJlZml4ID0gJ2RhcnQyanM6JzsKICAgICAgaWYgKCFuYW1lLnN0YXJ0c1dpdGgocHJlZml4KSkgY29udGludWU7CiAgICAgIFN0cmluZyBzdWZmaXggPSBuYW1lLnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKTsKCiAgICAgIENvbnN0YW50VmFsdWUgb3B0aW9uc1ZhbHVlID0KICAgICAgICAgIHZhbHVlLmZpZWxkc1tjb21tb25FbGVtZW50cy5wcmFnbWFDbGFzc09wdGlvbnNGaWVsZF07CiAgICAgIGFubm90YXRpb25zLmFkZCgKICAgICAgICAgIG5ldyBQcmFnbWFBbm5vdGF0aW9uRGF0YShzdWZmaXgsIGhhc09wdGlvbnM6ICFvcHRpb25zVmFsdWUuaXNOdWxsKSk7CiAgICB9CiAgfQogIHJldHVybiBhbm5vdGF0aW9uczsKfQoKRW51bVNldDxQcmFnbWFBbm5vdGF0aW9uPiBwcm9jZXNzTWVtYmVyQW5ub3RhdGlvbnMoCiAgICBDb21waWxlck9wdGlvbnMgb3B0aW9ucywKICAgIERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlciwKICAgIGlyLk1lbWJlciBtZW1iZXIsCiAgICBMaXN0PFByYWdtYUFubm90YXRpb25EYXRhPiBwcmFnbWFBbm5vdGF0aW9uRGF0YSkgewogIEVudW1TZXQ8UHJhZ21hQW5ub3RhdGlvbj4gYW5ub3RhdGlvbnMgPSBuZXcgRW51bVNldDxQcmFnbWFBbm5vdGF0aW9uPigpOwoKICBVcmkgdXJpID0gbWVtYmVyLmVuY2xvc2luZ0xpYnJhcnkuaW1wb3J0VXJpOwogIGJvb2wgcGxhdGZvcm1Bbm5vdGF0aW9uc0FsbG93ZWQgPQogICAgICBvcHRpb25zLnRlc3RNb2RlIHx8IHVyaS5zY2hlbWUgPT0gJ2RhcnQnIHx8IG1heWJlRW5hYmxlTmF0aXZlKHVyaSk7CgogIGZvciAoUHJhZ21hQW5ub3RhdGlvbkRhdGEgZGF0YSBpbiBwcmFnbWFBbm5vdGF0aW9uRGF0YSkgewogICAgU3RyaW5nIG5hbWUgPSBkYXRhLm5hbWU7CiAgICBTdHJpbmcgc3VmZml4ID0gZGF0YS5zdWZmaXg7CiAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICBmb3IgKFByYWdtYUFubm90YXRpb24gYW5ub3RhdGlvbiBpbiBQcmFnbWFBbm5vdGF0aW9uLnZhbHVlcykgewogICAgICBpZiAoYW5ub3RhdGlvbi5uYW1lID09IHN1ZmZpeCkgewogICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICBhbm5vdGF0aW9ucy5hZGQoYW5ub3RhdGlvbik7CgogICAgICAgIGlmIChkYXRhLmhhc09wdGlvbnMpIHsKICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgICAgICBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShtZW1iZXIpLAogICAgICAgICAgICAgIE1lc3NhZ2VLaW5kLkdFTkVSSUMsCiAgICAgICAgICAgICAgeyd0ZXh0JzogIkBwcmFnbWEoJyRuYW1lJykgYW5ub3RhdGlvbiBkb2VzIG5vdCB0YWtlIG9wdGlvbnMifSk7CiAgICAgICAgfQogICAgICAgIGlmIChhbm5vdGF0aW9uLmZvckZ1bmN0aW9uc09ubHkpIHsKICAgICAgICAgIGlmIChtZW1iZXIgaXMhIGlyLlByb2NlZHVyZSAmJiBtZW1iZXIgaXMhIGlyLkNvbnN0cnVjdG9yKSB7CiAgICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgICAgICAgIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKG1lbWJlciksIE1lc3NhZ2VLaW5kLkdFTkVSSUMsIHsKICAgICAgICAgICAgICAndGV4dCc6ICJAcHJhZ21hKCckbmFtZScpIGFubm90YXRpb24gaXMgb25seSBzdXBwb3J0ZWQgIgogICAgICAgICAgICAgICAgICAiZm9yIG1ldGhvZHMgYW5kIGNvbnN0cnVjdG9ycy4iCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoYW5ub3RhdGlvbi5mb3JGaWVsZHNPbmx5KSB7CiAgICAgICAgICBpZiAobWVtYmVyIGlzISBpci5GaWVsZCkgewogICAgICAgICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICAgICAgICBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShtZW1iZXIpLCBNZXNzYWdlS2luZC5HRU5FUklDLCB7CiAgICAgICAgICAgICAgJ3RleHQnOiAiQHByYWdtYSgnJG5hbWUnKSBhbm5vdGF0aW9uIGlzIG9ubHkgc3VwcG9ydGVkICIKICAgICAgICAgICAgICAgICAgImZvciBmaWVsZHMuIgogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGFubm90YXRpb24uaW50ZXJuYWxPbmx5ICYmICFwbGF0Zm9ybUFubm90YXRpb25zQWxsb3dlZCkgewogICAgICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgICAgIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKG1lbWJlciksCiAgICAgICAgICAgICAgTWVzc2FnZUtpbmQuR0VORVJJQywKICAgICAgICAgICAgICB7J3RleHQnOiAiVW5yZWNvZ25pemVkIGRhcnQyanMgcHJhZ21hIEBwcmFnbWEoJyRuYW1lJykifSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBpZiAoIWZvdW5kKSB7CiAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKG1lbWJlciksCiAgICAgICAgICBNZXNzYWdlS2luZC5HRU5FUklDLAogICAgICAgICAgeyd0ZXh0JzogIlVua25vd24gZGFydDJqcyBwcmFnbWEgQHByYWdtYSgnJG5hbWUnKSJ9KTsKICAgIH0KICB9CgogIE1hcDxQcmFnbWFBbm5vdGF0aW9uLCBFbnVtU2V0PFByYWdtYUFubm90YXRpb24+PiByZXBvcnRlZEV4Y2x1c2lvbnMgPSB7fTsKICBmb3IgKFByYWdtYUFubm90YXRpb24gYW5ub3RhdGlvbgogICAgICBpbiBhbm5vdGF0aW9ucy5pdGVyYWJsZShQcmFnbWFBbm5vdGF0aW9uLnZhbHVlcykpIHsKICAgIFNldDxQcmFnbWFBbm5vdGF0aW9uPiBpbXBsaWVzID0gUHJhZ21hQW5ub3RhdGlvbi5pbXBsaWVzW2Fubm90YXRpb25dOwogICAgaWYgKGltcGxpZXMgIT0gbnVsbCkgewogICAgICBmb3IgKFByYWdtYUFubm90YXRpb24gb3RoZXIgaW4gaW1wbGllcykgewogICAgICAgIGlmIChhbm5vdGF0aW9ucy5jb250YWlucyhvdGhlcikpIHsKICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydEhpbnRNZXNzYWdlKAogICAgICAgICAgICAgIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKG1lbWJlciksIE1lc3NhZ2VLaW5kLkdFTkVSSUMsIHsKICAgICAgICAgICAgJ3RleHQnOiAiQHByYWdtYSgnZGFydDJqczoke2Fubm90YXRpb24ubmFtZX0nKSBpbXBsaWVzICIKICAgICAgICAgICAgICAgICJAcHJhZ21hKCdkYXJ0MmpzOiR7b3RoZXIubmFtZX0nKS4iCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIFNldDxQcmFnbWFBbm5vdGF0aW9uPiBleGNsdWRlcyA9IFByYWdtYUFubm90YXRpb24uZXhjbHVkZXNbYW5ub3RhdGlvbl07CiAgICBpZiAoZXhjbHVkZXMgIT0gbnVsbCkgewogICAgICBmb3IgKFByYWdtYUFubm90YXRpb24gb3RoZXIgaW4gZXhjbHVkZXMpIHsKICAgICAgICBpZiAoYW5ub3RhdGlvbnMuY29udGFpbnMob3RoZXIpICYmCiAgICAgICAgICAgICEocmVwb3J0ZWRFeGNsdXNpb25zW290aGVyXT8uY29udGFpbnMoYW5ub3RhdGlvbikgPz8gZmFsc2UpKSB7CiAgICAgICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICAgICAgY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUobWVtYmVyKSwgTWVzc2FnZUtpbmQuR0VORVJJQywgewogICAgICAgICAgICAndGV4dCc6ICJAcHJhZ21hKCdkYXJ0MmpzOiR7YW5ub3RhdGlvbi5uYW1lfScpIG11c3Qgbm90IGJlIHVzZWQgIgogICAgICAgICAgICAgICAgIndpdGggQHByYWdtYSgnZGFydDJqczoke290aGVyLm5hbWV9JykuIgogICAgICAgICAgfSk7CiAgICAgICAgICAocmVwb3J0ZWRFeGNsdXNpb25zW2Fubm90YXRpb25dID8/PSBuZXcgRW51bVNldCgpKS5hZGQob3RoZXIpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgU2V0PFByYWdtYUFubm90YXRpb24+IHJlcXVpcmVzID0gUHJhZ21hQW5ub3RhdGlvbi5yZXF1aXJlc1thbm5vdGF0aW9uXTsKICAgIGlmIChyZXF1aXJlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoUHJhZ21hQW5ub3RhdGlvbiBvdGhlciBpbiByZXF1aXJlcykgewogICAgICAgIGlmICghYW5ub3RhdGlvbnMuY29udGFpbnMob3RoZXIpKSB7CiAgICAgICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICAgICAgY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUobWVtYmVyKSwgTWVzc2FnZUtpbmQuR0VORVJJQywgewogICAgICAgICAgICAndGV4dCc6ICJAcHJhZ21hKCdkYXJ0MmpzOiR7YW5ub3RhdGlvbi5uYW1lfScpIHNob3VsZCBhbHdheXMgYmUgIgogICAgICAgICAgICAgICAgImNvbWJpbmVkIHdpdGggQHByYWdtYSgnZGFydDJqczoke290aGVyLm5hbWV9JykuIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIHJldHVybiBhbm5vdGF0aW9uczsKfQoKYWJzdHJhY3QgY2xhc3MgQW5ub3RhdGlvbnNEYXRhIHsKICAvLy8gRGVzZXJpYWxpemVzIGEgW0Fubm90YXRpb25zRGF0YV0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBBbm5vdGF0aW9uc0RhdGEucmVhZEZyb21EYXRhU291cmNlKAogICAgICAgICAgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMsIERhdGFTb3VyY2Ugc291cmNlKSA9CiAgICAgIEFubm90YXRpb25zRGF0YUltcGwucmVhZEZyb21EYXRhU291cmNlOwoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtBbm5vdGF0aW9uc0RhdGFdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFttZW1iZXJdIGhhcyBhbiBgQHByYWdtYSgnZGFydDJqczphc3N1bWVEeW5hbWljJylgIGFubm90YXRpb24uCiAgYm9vbCBoYXNBc3N1bWVEeW5hbWljKE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW21lbWJlcl0gaGFzIGEgYEBwcmFnbWEoJ2RhcnQyanM6bm9JbmxpbmUnKWAsIG9yCiAgLy8vIGBAcHJhZ21hKCdkYXJ0MmpzOm5vSW5saW5lJylgIGFubm90YXRpb24uCiAgYm9vbCBoYXNOb0lubGluZShNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFttZW1iZXJdIGhhcyBhIGBAcHJhZ21hKCdkYXJ0MmpzOnRyeUlubGluZScpYCwgb3IKICAvLy8gYEBwcmFnbWEoJ2RhcnQyanM6dHJ5SW5saW5lJylgIGFubm90YXRpb24uCiAgYm9vbCBoYXNUcnlJbmxpbmUoTWVtYmVyRW50aXR5IG1lbWJlcik7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbbWVtYmVyXSBoYXMgYSBgQHByYWdtYSgnZGFydDJqczpkaXNhYmxlRmluYWwnKWAKICAvLy8gYW5ub3RhdGlvbi4KICBib29sIGhhc0Rpc2FibGVGaW5hbChNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFttZW1iZXJdIGhhcyBhIGBAcHJhZ21hKCdkYXJ0MmpzOm5vRWxpc2lvbicpYAogIC8vLyBhbm5vdGF0aW9uLgogIGJvb2wgaGFzTm9FbGlzaW9uKE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW21lbWJlcl0gaGFzIGEgYEBOb1Rocm93cygpYCBhbm5vdGF0aW9uLgogIGJvb2wgaGFzTm9UaHJvd3MoTWVtYmVyRW50aXR5IG1lbWJlcik7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbbWVtYmVyXSBoYXMgYSBgQE5vU2lkZUVmZmVjdHMoKWAgYW5ub3RhdGlvbi4KICBib29sIGhhc05vU2lkZUVmZmVjdHMoTWVtYmVyRW50aXR5IG1lbWJlcik7CgogIC8vLyBDYWxscyBbZl0gZm9yIGFsbCBmdW5jdGlvbnMgd2l0aCBhIGBAcHJhZ21hKCdkYXJ0MmpzOm5vSW5saW5lJylgLCBvcgogIC8vLyBgQHByYWdtYSgnZGFydDJqczpub0lubGluZScpYCBhbm5vdGF0aW9uLgogIHZvaWQgZm9yRWFjaE5vSW5saW5lKHZvaWQgZihGdW5jdGlvbkVudGl0eSBmdW5jdGlvbikpOwoKICAvLy8gQ2FsbHMgW2ZdIGZvciBhbGwgZnVuY3Rpb25zIHdpdGggYSBgQHByYWdtYSgnZGFydDJqczp0cnlJbmxpbmUnKWAsIG9yCiAgLy8vIGBAcHJhZ21hKCdkYXJ0MmpzOnRyeUlubGluZScpYCBhbm5vdGF0aW9uLgogIHZvaWQgZm9yRWFjaFRyeUlubGluZSh2b2lkIGYoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pKTsKCiAgLy8vIENhbGxzIFtmXSBmb3IgYWxsIGZ1bmN0aW9ucyB3aXRoIGEgYEBwcmFnbWEoJ2RhcnQyanM6bm9UaHJvd3MnKWAKICAvLy8gYW5ub3RhdGlvbi4KICB2b2lkIGZvckVhY2hOb1Rocm93cyh2b2lkIGYoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pKTsKCiAgLy8vIENhbGxzIFtmXSBmb3IgYWxsIGZ1bmN0aW9ucyB3aXRoIGEgYEBwcmFnbWEoJ2RhcnQyanM6bm9TaWRlRWZmZWN0cycpYAogIC8vLyBhbm5vdGF0aW9uLgogIHZvaWQgZm9yRWFjaE5vU2lkZUVmZmVjdHModm9pZCBmKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKSk7CgogIC8vLyBXaGF0IHNob3VsZCB0aGUgY29tcGlsZXIgZG8gd2l0aCBwYXJhbWV0ZXIgdHlwZSBhc3NlcnRpb25zIGluIFttZW1iZXJdLgogIC8vLwogIC8vLyBJZiBbbWVtYmVyXSBpcyBgbnVsbGAsIHRoZSBkZWZhdWx0IHBvbGljeSBpcyByZXR1cm5lZC4KICBDaGVja1BvbGljeSBnZXRQYXJhbWV0ZXJDaGVja1BvbGljeShNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgLy8vIFdoYXQgc2hvdWxkIHRoZSBjb21waWxlciBkbyB3aXRoIGltcGxpY2l0IGRvd25jYXN0cyBpbiBbbWVtYmVyXS4KICAvLy8KICAvLy8gSWYgW21lbWJlcl0gaXMgYG51bGxgLCB0aGUgZGVmYXVsdCBwb2xpY3kgaXMgcmV0dXJuZWQuCiAgQ2hlY2tQb2xpY3kgZ2V0SW1wbGljaXREb3duY2FzdENoZWNrUG9saWN5KE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICAvLy8gV2hhdCB0aGUgY29tcGlsZXIgc2hvdWxkIGRvIHdpdGggYSBib29sZWFuIHZhbHVlIGluIGEgY29uZGl0aW9uIGNvbnRleHQKICAvLy8gaW4gW21lbWJlcl0gd2hlbiB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWNhdGlvbiBzYXlzIGl0IGlzIGEgcnVudGltZSBlcnJvciBmb3IKICAvLy8gaXQgdG8gYmUgbnVsbC4KICAvLy8KICAvLy8gSWYgW21lbWJlcl0gaXMgYG51bGxgLCB0aGUgZGVmYXVsdCBwb2xpY3kgaXMgcmV0dXJuZWQuCiAgQ2hlY2tQb2xpY3kgZ2V0Q29uZGl0aW9uQ2hlY2tQb2xpY3koTWVtYmVyRW50aXR5IG1lbWJlcik7CgogIC8vLyBXaGV0aGVyIHNob3VsZCB0aGUgY29tcGlsZXIgZG8gd2l0aCBleHBsaWNpdCBjYXN0cyBpbiBbbWVtYmVyXS4KICAvLy8KICAvLy8gSWYgW21lbWJlcl0gaXMgYG51bGxgLCB0aGUgZGVmYXVsdCBwb2xpY3kgaXMgcmV0dXJuZWQuCiAgQ2hlY2tQb2xpY3kgZ2V0RXhwbGljaXRDYXN0Q2hlY2tQb2xpY3koTWVtYmVyRW50aXR5IG1lbWJlcik7Cn0KCmNsYXNzIEFubm90YXRpb25zRGF0YUltcGwgaW1wbGVtZW50cyBBbm5vdGF0aW9uc0RhdGEgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbQW5ub3RhdGlvbnNEYXRhXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2Fubm90YXRpb25zLWRhdGEnOwoKICBmaW5hbCBDaGVja1BvbGljeSBfZGVmYXVsdFBhcmFtZXRlckNoZWNrUG9saWN5OwogIGZpbmFsIENoZWNrUG9saWN5IF9kZWZhdWx0SW1wbGljaXREb3duY2FzdENoZWNrUG9saWN5OwogIGZpbmFsIENoZWNrUG9saWN5IF9kZWZhdWx0Q29uZGl0aW9uQ2hlY2tQb2xpY3k7CiAgZmluYWwgQ2hlY2tQb2xpY3kgX2RlZmF1bHRFeHBsaWNpdENhc3RDaGVja1BvbGljeTsKICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBFbnVtU2V0PFByYWdtYUFubm90YXRpb24+PiBwcmFnbWFBbm5vdGF0aW9uczsKCiAgQW5ub3RhdGlvbnNEYXRhSW1wbChDb21waWxlck9wdGlvbnMgb3B0aW9ucywgdGhpcy5wcmFnbWFBbm5vdGF0aW9ucykKICAgICAgOiB0aGlzLl9kZWZhdWx0UGFyYW1ldGVyQ2hlY2tQb2xpY3kgPSBvcHRpb25zLmRlZmF1bHRQYXJhbWV0ZXJDaGVja1BvbGljeSwKICAgICAgICB0aGlzLl9kZWZhdWx0SW1wbGljaXREb3duY2FzdENoZWNrUG9saWN5ID0KICAgICAgICAgICAgb3B0aW9ucy5kZWZhdWx0SW1wbGljaXREb3duY2FzdENoZWNrUG9saWN5LAogICAgICAgIHRoaXMuX2RlZmF1bHRDb25kaXRpb25DaGVja1BvbGljeSA9IG9wdGlvbnMuZGVmYXVsdENvbmRpdGlvbkNoZWNrUG9saWN5LAogICAgICAgIHRoaXMuX2RlZmF1bHRFeHBsaWNpdENhc3RDaGVja1BvbGljeSA9CiAgICAgICAgICAgIG9wdGlvbnMuZGVmYXVsdEV4cGxpY2l0Q2FzdENoZWNrUG9saWN5OwoKICBmYWN0b3J5IEFubm90YXRpb25zRGF0YUltcGwucmVhZEZyb21EYXRhU291cmNlKAogICAgICBDb21waWxlck9wdGlvbnMgb3B0aW9ucywgRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgTWFwPE1lbWJlckVudGl0eSwgRW51bVNldDxQcmFnbWFBbm5vdGF0aW9uPj4gcHJhZ21hQW5ub3RhdGlvbnMgPQogICAgICAgIHNvdXJjZS5yZWFkTWVtYmVyTWFwKAogICAgICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlcikgPT4gbmV3IEVudW1TZXQuZnJvbVZhbHVlKHNvdXJjZS5yZWFkSW50KCkpKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgQW5ub3RhdGlvbnNEYXRhSW1wbChvcHRpb25zLCBwcmFnbWFBbm5vdGF0aW9ucyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTWVtYmVyTWFwKHByYWdtYUFubm90YXRpb25zLAogICAgICAgIChNZW1iZXJFbnRpdHkgbWVtYmVyLCBFbnVtU2V0PFByYWdtYUFubm90YXRpb24+IHNldCkgewogICAgICBzaW5rLndyaXRlSW50KHNldC52YWx1ZSk7CiAgICB9KTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBib29sIF9oYXNQcmFnbWEoTWVtYmVyRW50aXR5IG1lbWJlciwgUHJhZ21hQW5ub3RhdGlvbiBhbm5vdGF0aW9uKSB7CiAgICBFbnVtU2V0PFByYWdtYUFubm90YXRpb24+IHNldCA9IHByYWdtYUFubm90YXRpb25zW21lbWJlcl07CiAgICByZXR1cm4gc2V0ICE9IG51bGwgJiYgc2V0LmNvbnRhaW5zKGFubm90YXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNBc3N1bWVEeW5hbWljKE1lbWJlckVudGl0eSBtZW1iZXIpID0+CiAgICAgIF9oYXNQcmFnbWEobWVtYmVyLCBQcmFnbWFBbm5vdGF0aW9uLmFzc3VtZUR5bmFtaWMpOwoKICBAb3ZlcnJpZGUKICBib29sIGhhc05vSW5saW5lKE1lbWJlckVudGl0eSBtZW1iZXIpID0+CiAgICAgIF9oYXNQcmFnbWEobWVtYmVyLCBQcmFnbWFBbm5vdGF0aW9uLm5vSW5saW5lKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNUcnlJbmxpbmUoTWVtYmVyRW50aXR5IG1lbWJlcikgPT4KICAgICAgX2hhc1ByYWdtYShtZW1iZXIsIFByYWdtYUFubm90YXRpb24udHJ5SW5saW5lKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNEaXNhYmxlRmluYWwoTWVtYmVyRW50aXR5IG1lbWJlcikgPT4KICAgICAgX2hhc1ByYWdtYShtZW1iZXIsIFByYWdtYUFubm90YXRpb24uZGlzYWJsZUZpbmFsKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNOb0VsaXNpb24oTWVtYmVyRW50aXR5IG1lbWJlcikgPT4KICAgICAgX2hhc1ByYWdtYShtZW1iZXIsIFByYWdtYUFubm90YXRpb24ubm9FbGlzaW9uKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNOb1Rocm93cyhNZW1iZXJFbnRpdHkgbWVtYmVyKSA9PgogICAgICBfaGFzUHJhZ21hKG1lbWJlciwgUHJhZ21hQW5ub3RhdGlvbi5ub1Rocm93cyk7CgogIEBvdmVycmlkZQogIGJvb2wgaGFzTm9TaWRlRWZmZWN0cyhNZW1iZXJFbnRpdHkgbWVtYmVyKSA9PgogICAgICBfaGFzUHJhZ21hKG1lbWJlciwgUHJhZ21hQW5ub3RhdGlvbi5ub1NpZGVFZmZlY3RzKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoTm9JbmxpbmUodm9pZCBmKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKSkgewogICAgcHJhZ21hQW5ub3RhdGlvbnMKICAgICAgICAuZm9yRWFjaCgoTWVtYmVyRW50aXR5IG1lbWJlciwgRW51bVNldDxQcmFnbWFBbm5vdGF0aW9uPiBzZXQpIHsKICAgICAgaWYgKHNldC5jb250YWlucyhQcmFnbWFBbm5vdGF0aW9uLm5vSW5saW5lKSkgewogICAgICAgIGYobWVtYmVyKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hUcnlJbmxpbmUodm9pZCBmKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKSkgewogICAgcHJhZ21hQW5ub3RhdGlvbnMKICAgICAgICAuZm9yRWFjaCgoTWVtYmVyRW50aXR5IG1lbWJlciwgRW51bVNldDxQcmFnbWFBbm5vdGF0aW9uPiBzZXQpIHsKICAgICAgaWYgKHNldC5jb250YWlucyhQcmFnbWFBbm5vdGF0aW9uLnRyeUlubGluZSkpIHsKICAgICAgICBmKG1lbWJlcik7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoTm9UaHJvd3Modm9pZCBmKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKSkgewogICAgcHJhZ21hQW5ub3RhdGlvbnMKICAgICAgICAuZm9yRWFjaCgoTWVtYmVyRW50aXR5IG1lbWJlciwgRW51bVNldDxQcmFnbWFBbm5vdGF0aW9uPiBzZXQpIHsKICAgICAgaWYgKHNldC5jb250YWlucyhQcmFnbWFBbm5vdGF0aW9uLm5vVGhyb3dzKSkgewogICAgICAgIGYobWVtYmVyKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hOb1NpZGVFZmZlY3RzKHZvaWQgZihGdW5jdGlvbkVudGl0eSBmdW5jdGlvbikpIHsKICAgIHByYWdtYUFubm90YXRpb25zCiAgICAgICAgLmZvckVhY2goKE1lbWJlckVudGl0eSBtZW1iZXIsIEVudW1TZXQ8UHJhZ21hQW5ub3RhdGlvbj4gc2V0KSB7CiAgICAgIGlmIChzZXQuY29udGFpbnMoUHJhZ21hQW5ub3RhdGlvbi5ub1NpZGVFZmZlY3RzKSkgewogICAgICAgIGYobWVtYmVyKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDaGVja1BvbGljeSBnZXRQYXJhbWV0ZXJDaGVja1BvbGljeShNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBpZiAobWVtYmVyICE9IG51bGwpIHsKICAgICAgRW51bVNldDxQcmFnbWFBbm5vdGF0aW9uPiBhbm5vdGF0aW9ucyA9IHByYWdtYUFubm90YXRpb25zW21lbWJlcl07CiAgICAgIGlmIChhbm5vdGF0aW9ucyAhPSBudWxsKSB7CiAgICAgICAgaWYgKGFubm90YXRpb25zLmNvbnRhaW5zKFByYWdtYUFubm90YXRpb24udHlwZXNUcnVzdCkpIHsKICAgICAgICAgIHJldHVybiBDaGVja1BvbGljeS50cnVzdGVkOwogICAgICAgIH0gZWxzZSBpZiAoYW5ub3RhdGlvbnMuY29udGFpbnMoUHJhZ21hQW5ub3RhdGlvbi50eXBlc0NoZWNrKSkgewogICAgICAgICAgcmV0dXJuIENoZWNrUG9saWN5LmNoZWNrZWQ7CiAgICAgICAgfSBlbHNlIGlmIChhbm5vdGF0aW9ucy5jb250YWlucyhQcmFnbWFBbm5vdGF0aW9uLnBhcmFtZXRlclRydXN0KSkgewogICAgICAgICAgcmV0dXJuIENoZWNrUG9saWN5LnRydXN0ZWQ7CiAgICAgICAgfSBlbHNlIGlmIChhbm5vdGF0aW9ucy5jb250YWlucyhQcmFnbWFBbm5vdGF0aW9uLnBhcmFtZXRlckNoZWNrKSkgewogICAgICAgICAgcmV0dXJuIENoZWNrUG9saWN5LmNoZWNrZWQ7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gX2RlZmF1bHRQYXJhbWV0ZXJDaGVja1BvbGljeTsKICB9CgogIEBvdmVycmlkZQogIENoZWNrUG9saWN5IGdldEltcGxpY2l0RG93bmNhc3RDaGVja1BvbGljeShNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBpZiAobWVtYmVyICE9IG51bGwpIHsKICAgICAgRW51bVNldDxQcmFnbWFBbm5vdGF0aW9uPiBhbm5vdGF0aW9ucyA9IHByYWdtYUFubm90YXRpb25zW21lbWJlcl07CiAgICAgIGlmIChhbm5vdGF0aW9ucyAhPSBudWxsKSB7CiAgICAgICAgaWYgKGFubm90YXRpb25zLmNvbnRhaW5zKFByYWdtYUFubm90YXRpb24udHlwZXNUcnVzdCkpIHsKICAgICAgICAgIHJldHVybiBDaGVja1BvbGljeS50cnVzdGVkOwogICAgICAgIH0gZWxzZSBpZiAoYW5ub3RhdGlvbnMuY29udGFpbnMoUHJhZ21hQW5ub3RhdGlvbi50eXBlc0NoZWNrKSkgewogICAgICAgICAgcmV0dXJuIENoZWNrUG9saWN5LmNoZWNrZWQ7CiAgICAgICAgfSBlbHNlIGlmIChhbm5vdGF0aW9ucy5jb250YWlucyhQcmFnbWFBbm5vdGF0aW9uLmRvd25jYXN0VHJ1c3QpKSB7CiAgICAgICAgICByZXR1cm4gQ2hlY2tQb2xpY3kudHJ1c3RlZDsKICAgICAgICB9IGVsc2UgaWYgKGFubm90YXRpb25zLmNvbnRhaW5zKFByYWdtYUFubm90YXRpb24uZG93bmNhc3RDaGVjaykpIHsKICAgICAgICAgIHJldHVybiBDaGVja1BvbGljeS5jaGVja2VkOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIF9kZWZhdWx0SW1wbGljaXREb3duY2FzdENoZWNrUG9saWN5OwogIH0KCiAgQG92ZXJyaWRlCiAgQ2hlY2tQb2xpY3kgZ2V0Q29uZGl0aW9uQ2hlY2tQb2xpY3koTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgaWYgKG1lbWJlciAhPSBudWxsKSB7CiAgICAgIEVudW1TZXQ8UHJhZ21hQW5ub3RhdGlvbj4gYW5ub3RhdGlvbnMgPSBwcmFnbWFBbm5vdGF0aW9uc1ttZW1iZXJdOwogICAgICBpZiAoYW5ub3RhdGlvbnMgIT0gbnVsbCkgewogICAgICAgIGlmIChhbm5vdGF0aW9ucy5jb250YWlucyhQcmFnbWFBbm5vdGF0aW9uLnR5cGVzVHJ1c3QpKSB7CiAgICAgICAgICByZXR1cm4gQ2hlY2tQb2xpY3kudHJ1c3RlZDsKICAgICAgICB9IGVsc2UgaWYgKGFubm90YXRpb25zLmNvbnRhaW5zKFByYWdtYUFubm90YXRpb24udHlwZXNDaGVjaykpIHsKICAgICAgICAgIHJldHVybiBDaGVja1BvbGljeS5jaGVja2VkOwogICAgICAgIH0gZWxzZSBpZiAoYW5ub3RhdGlvbnMuY29udGFpbnMoUHJhZ21hQW5ub3RhdGlvbi5kb3duY2FzdFRydXN0KSkgewogICAgICAgICAgcmV0dXJuIENoZWNrUG9saWN5LnRydXN0ZWQ7CiAgICAgICAgfSBlbHNlIGlmIChhbm5vdGF0aW9ucy5jb250YWlucyhQcmFnbWFBbm5vdGF0aW9uLmRvd25jYXN0Q2hlY2spKSB7CiAgICAgICAgICByZXR1cm4gQ2hlY2tQb2xpY3kuY2hlY2tlZDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfZGVmYXVsdENvbmRpdGlvbkNoZWNrUG9saWN5OwogIH0KCiAgQG92ZXJyaWRlCiAgQ2hlY2tQb2xpY3kgZ2V0RXhwbGljaXRDYXN0Q2hlY2tQb2xpY3koTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgaWYgKG1lbWJlciAhPSBudWxsKSB7CiAgICAgIEVudW1TZXQ8UHJhZ21hQW5ub3RhdGlvbj4gYW5ub3RhdGlvbnMgPSBwcmFnbWFBbm5vdGF0aW9uc1ttZW1iZXJdOwogICAgICBpZiAoYW5ub3RhdGlvbnMgIT0gbnVsbCkgewogICAgICAgIGlmIChhbm5vdGF0aW9ucy5jb250YWlucyhQcmFnbWFBbm5vdGF0aW9uLmFzVHJ1c3QpKSB7CiAgICAgICAgICByZXR1cm4gQ2hlY2tQb2xpY3kudHJ1c3RlZDsKICAgICAgICB9IGVsc2UgaWYgKGFubm90YXRpb25zLmNvbnRhaW5zKFByYWdtYUFubm90YXRpb24uYXNDaGVjaykpIHsKICAgICAgICAgIHJldHVybiBDaGVja1BvbGljeS5jaGVja2VkOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIF9kZWZhdWx0RXhwbGljaXRDYXN0Q2hlY2tQb2xpY3k7CiAgfQp9CgpjbGFzcyBBbm5vdGF0aW9uc0RhdGFCdWlsZGVyIHsKICBNYXA8TWVtYmVyRW50aXR5LCBFbnVtU2V0PFByYWdtYUFubm90YXRpb24+PiBwcmFnbWFBbm5vdGF0aW9ucyA9IHt9OwoKICB2b2lkIHJlZ2lzdGVyUHJhZ21hQW5ub3RhdGlvbnMoCiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIsIEVudW1TZXQ8UHJhZ21hQW5ub3RhdGlvbj4gYW5ub3RhdGlvbnMpIHsKICAgIGlmIChhbm5vdGF0aW9ucy5pc05vdEVtcHR5KSB7CiAgICAgIHByYWdtYUFubm90YXRpb25zW21lbWJlcl0gPSBhbm5vdGF0aW9uczsKICAgIH0KICB9CgogIEFubm90YXRpb25zRGF0YSBjbG9zZShDb21waWxlck9wdGlvbnMgb3B0aW9ucykgewogICAgcmV0dXJuIG5ldyBBbm5vdGF0aW9uc0RhdGFJbXBsKG9wdGlvbnMsIHByYWdtYUFubm90YXRpb25zKTsKICB9Cn0KgjAATk48ASgBKAEZTCMyJyQhGigaLh8BGRQVHxwbATElISIBEiwTBAFIK0UBThAsRgFHGTMBLC4BTEJRMwFFTz0GQkgaMwFKUU4NSBozAVA1AVA1AUUYNQFFGTUBSR01AUkdNQFIHDUBSBw1ATEODxIPDhMTDQ0QEBQUExMFAUgxMQVJGxs9PSYmJCQYGAVJGh8FAgE4JCwcLyM6NjQqNQEzPztANCA9PkQiLjUBI0AXTwYEFgIBNB0hFjdLAS8kSgE8HSEYQycWJQEfJzUjTgorRilORzIQDAooJSlORyAQDApGJzUjSQoPCAYSIzEfQAYEAUwjOkobMCsmTEU0DgoIBkwcMStLJ0xOOQ5JCggGTBwxLCdMTkIOCggGBBYCASE9LjguATMnAVcuAUkwKQFKMSoBSRItAUYSKgFBKQFGLgFLMDkBTDE6AUcSOQFMEj4BTgY9PAFHBj1DAU5RFQY9PAFGBj0/AgE3SR0wATI5MjVIAUdRMzhRLzQBMjQXRR5PFUAEAQwoFSs/IAgTBAFGPzQEAQwwOgEMKzUBDCw2AQwvOQEMLDYBDCs1AQwwOgEMOhZINRMICAQBDDsWSDYTCAgEAQw6Fkg1EwgIBAEMPxZIOhMICAQBDD0aSSFBJkgmTCZMJgoIBikEAQxEGkkhQSZIJksmSyYKCAYwBAEMPRpJIUEmSCZLJksmCggGKQQBDEAaSSE+JkUmCggGLAQCAR9HASJEIi8GBAEzQAQCATBwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2Fubm90YXRpb25zLmRhcnQ4c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvdW5pdmVyc2UvbWVtYmVyX3VzYWdlLmRhcnTAAHMRLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDptYXRoJyBhcyBNYXRoOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19tb2RlbC9jbG9zdXJlLmRhcnQnOwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi91dGlsL2VudW1zZXQuZGFydCc7CmltcG9ydCAnY2FsbF9zdHJ1Y3R1cmUuZGFydCc7CgphYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFVzYWdlPFQ+IHsKICBmaW5hbCBFbnVtU2V0PFQ+IF9wZW5kaW5nVXNlOwoKICBBYnN0cmFjdFVzYWdlLmNsb25lZCh0aGlzLl9wZW5kaW5nVXNlKTsKCiAgQWJzdHJhY3RVc2FnZSgpIDogdGhpcy5fcGVuZGluZ1VzZSA9IG5ldyBFbnVtU2V0PFQ+KCkgewogICAgX3BlbmRpbmdVc2UuYWRkQWxsKF9vcmlnaW5hbFVzZSk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgdXNlcyBvZiBbZW50aXR5XSB0aGF0IGhhdmUgYmVlbiByZWdpc3RlcmVkLgogIEVudW1TZXQ8VD4gZ2V0IF9hcHBsaWVkVXNlID0+IF9vcmlnaW5hbFVzZS5taW51cyhfcGVuZGluZ1VzZSk7CgogIEVudW1TZXQ8VD4gZ2V0IF9vcmlnaW5hbFVzZTsKCiAgLy8vIGB0cnVlYCBpZiB0aGUgW19hcHBsaWVkVXNlXSBpcyBub24tZW1wdHkuCiAgYm9vbCBnZXQgaGFzVXNlID0+IF9hcHBsaWVkVXNlLmlzTm90RW1wdHk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbb3RoZXJdIGhhcyB0aGUgc2FtZSBvcmlnaW5hbCBhbmQgcGVuZGluZyB1c2FnZSBhcyB0aGlzLgogIGJvb2wgaGFzU2FtZVVzYWdlKEFic3RyYWN0VXNhZ2U8VD4gb3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBfb3JpZ2luYWxVc2UudmFsdWUgPT0gb3RoZXIuX29yaWdpbmFsVXNlLnZhbHVlICYmCiAgICAgICAgX3BlbmRpbmdVc2UudmFsdWUgPT0gb3RoZXIuX3BlbmRpbmdVc2UudmFsdWU7CiAgfQp9CgovLy8gUmVnaXN0cnkgZm9yIHRoZSBvYnNlcnZlZCB1c2Ugb2YgYSBtZW1iZXIgW2VudGl0eV0gaW4gdGhlIG9wZW4gd29ybGQuCmFic3RyYWN0IGNsYXNzIE1lbWJlclVzYWdlIGV4dGVuZHMgQWJzdHJhY3RVc2FnZTxNZW1iZXJVc2U+IHsKICAvLy8gQ29uc3RhbnQgZW1wdHkgYWNjZXNzIHNldCB1c2VkIGFzIHRoZSBwb3RlbnRpYWwgYWNjZXNzIHNldCBmb3IgaW1wb3NzaWJsZQogIC8vLyBhY2Nlc3NlcywgZm9yIGluc3RhbmNlIHdyaXRpbmcgdG8gYSBmaW5hbCBmaWVsZCBvciBpbnZva2luZyBhIHNldHRlci4KICBzdGF0aWMgY29uc3QgRW51bVNldDxBY2Nlc3M+IGVtcHR5U2V0ID0gY29uc3QgRW51bVNldC5maXhlZCgwKTsKCiAgZmluYWwgTWVtYmVyRW50aXR5IGVudGl0eTsKCiAgTWVtYmVyVXNhZ2UuaW50ZXJuYWwodGhpcy5lbnRpdHkpIDogc3VwZXIoKTsKCiAgTWVtYmVyVXNhZ2UuY2xvbmVkKHRoaXMuZW50aXR5LCBFbnVtU2V0PE1lbWJlclVzZT4gcGVuZGluZ1VzZSkKICAgICAgOiBzdXBlci5jbG9uZWQocGVuZGluZ1VzZSk7CgogIGZhY3RvcnkgTWVtYmVyVXNhZ2UoTWVtYmVyRW50aXR5IG1lbWJlciwge01lbWJlckFjY2VzcyBwb3RlbnRpYWxBY2Nlc3N9KSB7CiAgICAvLy8gQ3JlYXRlIHRoZSBzZXQgb2YgcG90ZW50aWFsIGFjY2Vzc2VzIHRvIFttZW1iZXJdLCBsaW1pdGVkIHRvIFtvcmlnaW5hbF0KICAgIC8vLyBpZiBwcm92aWRlZC4KICAgIEVudW1TZXQ8QWNjZXNzPiBjcmVhdGVQb3RlbnRpYWxBY2Nlc3NTZXQoRW51bVNldDxBY2Nlc3M+IG9yaWdpbmFsKSB7CiAgICAgIGlmIChvcmlnaW5hbCAhPSBudWxsKSB7CiAgICAgICAgaWYgKG9yaWdpbmFsLmlzRW1wdHkpIHJldHVybiBlbXB0eVNldDsKICAgICAgICByZXR1cm4gb3JpZ2luYWwuY2xvbmUoKTsKICAgICAgfQogICAgICBpZiAobWVtYmVyLmlzVG9wTGV2ZWwgfHwgbWVtYmVyLmlzU3RhdGljIHx8IG1lbWJlci5pc0NvbnN0cnVjdG9yKSB7CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVHJhY2sgc3VwZXIgY29uc3RydWN0b3IgaW52b2NhdGlvbnM/CiAgICAgICAgcmV0dXJuIG5ldyBFbnVtU2V0LmZyb21WYWx1ZXMoW0FjY2Vzcy5zdGF0aWNBY2Nlc3NdKTsKICAgICAgfSBlbHNlIGlmIChtZW1iZXIuaXNJbnN0YW5jZU1lbWJlcikgewogICAgICAgIHJldHVybiBuZXcgRW51bVNldC5mcm9tVmFsdWVzKEFjY2Vzcy52YWx1ZXMpOwogICAgICB9IGVsc2UgewogICAgICAgIGFzc2VydChtZW1iZXIgaXMgSlJlY29yZEZpZWxkLCAiVW5leHBlY3RlZCBtZW1iZXI6ICRtZW1iZXIiKTsKICAgICAgICByZXR1cm4gbmV3IEVudW1TZXQoKTsKICAgICAgfQogICAgfQoKICAgIC8vLyBDcmVhdGUgdGhlIHNldCBvZiBwb3RlbnRpYWwgcmVhZCBhY2Nlc3NlcyB0byBbbWVtYmVyXSwgbGltaXRlZCB0byByZWFkcwogICAgLy8vIGluIFtwb3RlbnRpYWxBY2Nlc3NdIGlmIHByb3ZpZGVkLgogICAgRW51bVNldDxBY2Nlc3M+IGNyZWF0ZVBvdGVudGlhbFJlYWRzKCkgewogICAgICByZXR1cm4gY3JlYXRlUG90ZW50aWFsQWNjZXNzU2V0KHBvdGVudGlhbEFjY2Vzcz8ucmVhZHMpOwogICAgfQoKICAgIC8vLyBDcmVhdGUgdGhlIHNldCBvZiBwb3RlbnRpYWwgd3JpdGUgYWNjZXNzZXMgdG8gW21lbWJlcl0sIGxpbWl0ZWQgdG8KICAgIC8vLyB3cml0ZXMgaW4gW3BvdGVudGlhbEFjY2Vzc10gaWYgcHJvdmlkZWQuCiAgICBFbnVtU2V0PEFjY2Vzcz4gY3JlYXRlUG90ZW50aWFsV3JpdGVzKCkgewogICAgICByZXR1cm4gY3JlYXRlUG90ZW50aWFsQWNjZXNzU2V0KHBvdGVudGlhbEFjY2Vzcz8ud3JpdGVzKTsKICAgIH0KCiAgICAvLy8gQ3JlYXRlIHRoZSBzZXQgb2YgcG90ZW50aWFsIGludm9jYXRpb24gYWNjZXNzZXMgdG8gW21lbWJlcl0sIGxpbWl0ZWQgdG8KICAgIC8vLyBpbnZvY2F0aW9ucyBpbiBbcG90ZW50aWFsQWNjZXNzXSBpZiBwcm92aWRlZC4KICAgIEVudW1TZXQ8QWNjZXNzPiBjcmVhdGVQb3RlbnRpYWxJbnZva2VzKCkgewogICAgICByZXR1cm4gY3JlYXRlUG90ZW50aWFsQWNjZXNzU2V0KHBvdGVudGlhbEFjY2Vzcz8uaW52b2tlcyk7CiAgICB9CgogICAgaWYgKG1lbWJlci5pc0ZpZWxkKSB7CiAgICAgIGlmIChtZW1iZXIuaXNBc3NpZ25hYmxlKSB7CiAgICAgICAgcmV0dXJuIG5ldyBGaWVsZFVzYWdlKG1lbWJlciwKICAgICAgICAgICAgcG90ZW50aWFsUmVhZHM6IGNyZWF0ZVBvdGVudGlhbFJlYWRzKCksCiAgICAgICAgICAgIHBvdGVudGlhbFdyaXRlczogY3JlYXRlUG90ZW50aWFsV3JpdGVzKCksCiAgICAgICAgICAgIHBvdGVudGlhbEludm9rZXM6IGNyZWF0ZVBvdGVudGlhbEludm9rZXMoKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG5ldyBGaWVsZFVzYWdlKG1lbWJlciwKICAgICAgICAgICAgcG90ZW50aWFsUmVhZHM6IGNyZWF0ZVBvdGVudGlhbFJlYWRzKCksCiAgICAgICAgICAgIHBvdGVudGlhbFdyaXRlczogZW1wdHlTZXQsCiAgICAgICAgICAgIHBvdGVudGlhbEludm9rZXM6IGNyZWF0ZVBvdGVudGlhbEludm9rZXMoKSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAobWVtYmVyLmlzR2V0dGVyKSB7CiAgICAgIHJldHVybiBuZXcgUHJvcGVydHlVc2FnZShtZW1iZXIsCiAgICAgICAgICBwb3RlbnRpYWxSZWFkczogY3JlYXRlUG90ZW50aWFsUmVhZHMoKSwKICAgICAgICAgIHBvdGVudGlhbFdyaXRlczogZW1wdHlTZXQsCiAgICAgICAgICBwb3RlbnRpYWxJbnZva2VzOiBjcmVhdGVQb3RlbnRpYWxJbnZva2VzKCkpOwogICAgfSBlbHNlIGlmIChtZW1iZXIuaXNTZXR0ZXIpIHsKICAgICAgcmV0dXJuIG5ldyBQcm9wZXJ0eVVzYWdlKG1lbWJlciwKICAgICAgICAgIHBvdGVudGlhbFJlYWRzOiBlbXB0eVNldCwKICAgICAgICAgIHBvdGVudGlhbFdyaXRlczogY3JlYXRlUG90ZW50aWFsV3JpdGVzKCksCiAgICAgICAgICBwb3RlbnRpYWxJbnZva2VzOiBlbXB0eVNldCk7CiAgICB9IGVsc2UgaWYgKG1lbWJlci5pc0NvbnN0cnVjdG9yKSB7CiAgICAgIHJldHVybiBuZXcgTWV0aG9kVXNhZ2UobWVtYmVyLAogICAgICAgICAgcG90ZW50aWFsUmVhZHM6IGVtcHR5U2V0LCBwb3RlbnRpYWxJbnZva2VzOiBjcmVhdGVQb3RlbnRpYWxJbnZva2VzKCkpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KG1lbWJlciBpcyBGdW5jdGlvbkVudGl0eSwKICAgICAgICAgIGZhaWxlZEF0KG1lbWJlciwgIlVuZXhwZWN0ZWQgbWVtYmVyOiAkbWVtYmVyIikpOwogICAgICByZXR1cm4gbmV3IE1ldGhvZFVzYWdlKG1lbWJlciwKICAgICAgICAgIHBvdGVudGlhbFJlYWRzOiBjcmVhdGVQb3RlbnRpYWxSZWFkcygpLAogICAgICAgICAgcG90ZW50aWFsSW52b2tlczogY3JlYXRlUG90ZW50aWFsSW52b2tlcygpKTsKICAgIH0KICB9CgogIC8vLyBgdHJ1ZWAgaWYgW2VudGl0eV0gaGFzIGJlZW4gaW5pdGlhbGl6ZWQuCiAgYm9vbCBnZXQgaGFzSW5pdCA9PiB0cnVlOwoKICAvLy8gVGhlIHNldCBvZiBjb25zdGFudCBpbml0aWFsIHZhbHVlcyBmb3IgYSBmaWVsZC4KICBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBnZXQgaW5pdGlhbENvbnN0YW50cyA9PiBudWxsOwoKICAvLy8gYHRydWVgIGlmIFtlbnRpdHldIGhhcyBiZWVuIHJlYWQgYXMgYSB2YWx1ZS4gRm9yIGEgZmllbGQgdGhpcyBpcyBhIG5vcm1hbAogIC8vLyByZWFkIGFjY2VzcywgZm9yIGEgZnVuY3Rpb24gdGhpcyBpcyBhIGNsb3N1cml6YXRpb24uCiAgYm9vbCBnZXQgaGFzUmVhZCA9PiByZWFkcy5pc05vdEVtcHR5OwoKICAvLy8gVGhlIHNldCBvZiBwb3RlbnRpYWwgcmVhZCBhY2Nlc3NlcyB0byB0aGlzIG1lbWJlciB0aGF0IGhhdmUgbm90IHlldAogIC8vLyBiZWVuIHJlZ2lzdGVyZWQuCiAgRW51bVNldDxBY2Nlc3M+IGdldCBwb3RlbnRpYWxSZWFkcyA9PiBjb25zdCBFbnVtU2V0LmZpeGVkKDApOwoKICAvLy8gVGhlIHNldCBvZiByZWdpc3RlcmVkIHJlYWQgYWNjZXNzZXMgdG8gdGhpcyBtZW1iZXIuCiAgRW51bVNldDxBY2Nlc3M+IGdldCByZWFkcyA9PiBjb25zdCBFbnVtU2V0LmZpeGVkKDApOwoKICAvLy8gYHRydWVgIGlmIGEgdmFsdWUgaGFzIGJlZW4gd3JpdHRlbiB0byBbZW50aXR5XS4KICBib29sIGdldCBoYXNXcml0ZSA9PiB3cml0ZXMuaXNOb3RFbXB0eTsKCiAgLy8vIFRoZSBzZXQgb2YgcG90ZW50aWFsIHdyaXRlIGFjY2Vzc2VzIHRvIHRoaXMgbWVtYmVyIHRoYXQgaGF2ZSBub3QgeWV0CiAgLy8vIGJlZW4gcmVnaXN0ZXJlZC4KICBFbnVtU2V0PEFjY2Vzcz4gZ2V0IHBvdGVudGlhbFdyaXRlcyA9PiBjb25zdCBFbnVtU2V0LmZpeGVkKDApOwoKICAvLy8gVGhlIHNldCBvZiByZWdpc3RlcmVkIHdyaXRlIGFjY2Vzc2VzIHRvIHRoaXMgbWVtYmVyLgogIEVudW1TZXQ8QWNjZXNzPiBnZXQgd3JpdGVzID0+IGNvbnN0IEVudW1TZXQuZml4ZWQoMCk7CgogIC8vLyBgdHJ1ZWAgaWYgYW4gaW52b2NhdGlvbiBoYXMgYmVlbiBwZXJmb3JtZWQgb24gdGhlIHZhbHVlIFtlbnRpdHldLiBGb3IgYQogIC8vLyBmdW5jdGlvbiB0aGlzIGlzIGEgbm9ybWFsIGludm9jYXRpb24sIGZvciBhIGZpZWxkIHRoaXMgaXMgYSByZWFkIGFjY2VzcwogIC8vLyBmb2xsb3dlZCBieSBhbiBpbnZvY2F0aW9uIG9mIHRoZSBmdW5jdGlvbi1saWtlIHZhbHVlLgogIGJvb2wgZ2V0IGhhc0ludm9rZSA9PiBpbnZva2VzLmlzTm90RW1wdHk7CgogIC8vLyBUaGUgc2V0IG9mIHBvdGVudGlhbCBpbnZvY2F0aW9uIGFjY2Vzc2VzIHRvIHRoaXMgbWVtYmVyIHRoYXQgaGF2ZSBub3QgeWV0CiAgLy8vIGJlZW4gcmVnaXN0ZXJlZC4KICBFbnVtU2V0PEFjY2Vzcz4gZ2V0IHBvdGVudGlhbEludm9rZXMgPT4gY29uc3QgRW51bVNldC5maXhlZCgwKTsKCiAgLy8vIFRoZSBzZXQgb2YgcmVnaXN0ZXJlZCBpbnZvY2F0aW9uIGFjY2Vzc2VzIHRvIHRoaXMgbWVtYmVyLgogIEVudW1TZXQ8QWNjZXNzPiBnZXQgaW52b2tlcyA9PiBjb25zdCBFbnVtU2V0LmZpeGVkKDApOwoKICAvLy8gUmV0dXJucyB0aGUgW1BhcmFtZXRlclN0cnVjdHVyZV0gY29ycmVzcG9uZGluZyB0byB0aGUgcGFyYW1ldGVycyB0aGF0IGFyZQogIC8vLyB1c2VkIGluIGludm9jYXRpb25zIG9mIFtlbnRpdHldLiBGb3IgYSBmaWVsZCwgZ2V0dGVyIG9yIHNldHRlciB0aGlzIGlzCiAgLy8vIGFsd2F5cyBgbnVsbGAuCiAgUGFyYW1ldGVyU3RydWN0dXJlIGdldCBpbnZva2VkUGFyYW1ldGVycyA9PiBudWxsOwoKICAvLy8gV2hldGhlciB0aGlzIG1lbWJlciBoYXMgYW55IHBvdGVudGlhbCBidXQgdW5yZWdpc3RlcmVkIGR5bmFtaWMgcmVhZHMsCiAgLy8vIHdyaXRlcyBvciBpbnZvY2F0aW9ucy4KICBib29sIGdldCBoYXNQZW5kaW5nRHluYW1pY1VzZSA9PgogICAgICBoYXNQZW5kaW5nRHluYW1pY0ludm9rZSB8fAogICAgICBoYXNQZW5kaW5nRHluYW1pY1JlYWQgfHwKICAgICAgaGFzUGVuZGluZ0R5bmFtaWNXcml0ZTsKCiAgLy8vIFdoZXRoZXIgdGhpcyBtZW1iZXIgaGFzIGFueSBwb3RlbnRpYWwgYnV0IHVucmVnaXN0ZXJlZCBkeW5hbWljCiAgLy8vIGludm9jYXRpb25zLgogIGJvb2wgZ2V0IGhhc1BlbmRpbmdEeW5hbWljSW52b2tlID0+CiAgICAgIHBvdGVudGlhbEludm9rZXMuY29udGFpbnMoQWNjZXNzLmR5bmFtaWNBY2Nlc3MpOwoKICAvLy8gV2hldGhlciB0aGlzIG1lbWJlciBoYXMgYW55IHBvdGVudGlhbCBidXQgdW5yZWdpc3RlcmVkIGR5bmFtaWMgcmVhZHMuCiAgYm9vbCBnZXQgaGFzUGVuZGluZ0R5bmFtaWNSZWFkID0+CiAgICAgIHBvdGVudGlhbFJlYWRzLmNvbnRhaW5zKEFjY2Vzcy5keW5hbWljQWNjZXNzKTsKCiAgLy8vIFdoZXRoZXIgdGhpcyBtZW1iZXIgaGFzIGFueSBwb3RlbnRpYWwgYnV0IHVucmVnaXN0ZXJlZCBkeW5hbWljIHdyaXRlcy4KICBib29sIGdldCBoYXNQZW5kaW5nRHluYW1pY1dyaXRlID0+CiAgICAgIHBvdGVudGlhbFdyaXRlcy5jb250YWlucyhBY2Nlc3MuZHluYW1pY0FjY2Vzcyk7CgogIC8vLyBSZWdpc3RlcnMgdGhlIFtlbnRpdHldIGhhcyBiZWVuIGluaXRpYWxpemVkIGFuZCByZXR1cm5zIHRoZSBuZXcKICAvLy8gW01lbWJlclVzZV1zIHRoYXQgaXQgY2F1c2VkLgogIC8vLwogIC8vLyBGb3IgYSBmaWVsZCB0aGlzIGlzIHRoZSBpbml0aWFsIHdyaXRlIGFjY2VzcywgZm9yIGEgZnVuY3Rpb24gdGhpcyBpcyBhCiAgLy8vIG5vLW9wLgogIEVudW1TZXQ8TWVtYmVyVXNlPiBpbml0KCkgPT4gTWVtYmVyVXNlcy5OT05FOwoKICAvLy8gUmVnaXN0ZXJzIHRoZSBbZW50aXR5XSBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIFtjb25zdGFudF0gYW5kIHJldHVybnMKICAvLy8gdGhlIG5ldyBbTWVtYmVyVXNlXXMgdGhhdCBpdCBjYXVzZWQuCiAgLy8vCiAgLy8vIEZvciBhIGZpZWxkIHRoaXMgaXMgdGhlIGluaXRpYWwgd3JpdGUgYWNjZXNzLCBmb3IgYSBmdW5jdGlvbiB0aGlzIGlzIGEKICAvLy8gbm8tb3AuCiAgRW51bVNldDxNZW1iZXJVc2U+IGNvbnN0YW50SW5pdChDb25zdGFudFZhbHVlIGNvbnN0YW50KSA9PiBNZW1iZXJVc2VzLk5PTkU7CgogIC8vLyBSZWdpc3RlcnMgYSByZWFkIG9mIHRoZSB2YWx1ZSBvZiBbZW50aXR5XSBhbmQgcmV0dXJucyB0aGUgbmV3IFtNZW1iZXJVc2VdcwogIC8vLyB0aGF0IGl0IGNhdXNlZC4KICAvLy8KICAvLy8gRm9yIGEgZmllbGQgdGhpcyBpcyBhIG5vcm1hbCByZWFkIGFjY2VzcywgZm9yIGEgZnVuY3Rpb24gdGhpcyBpcyBhCiAgLy8vIGNsb3N1cml6YXRpb24uCiAgRW51bVNldDxNZW1iZXJVc2U+IHJlYWQoRW51bVNldDxBY2Nlc3M+IGFjY2Vzc2VzKSA9PiBNZW1iZXJVc2VzLk5PTkU7CgogIC8vLyBSZWdpc3RlcnMgYSB3cml0ZSBvZiBhIHZhbHVlIHRvIFtlbnRpdHldIGFuZCByZXR1cm5zIHRoZSBuZXcgW01lbWJlclVzZV1zCiAgLy8vIHRoYXQgaXQgY2F1c2VkLgogIEVudW1TZXQ8TWVtYmVyVXNlPiB3cml0ZShFbnVtU2V0PEFjY2Vzcz4gYWNjZXNzZXMpID0+IE1lbWJlclVzZXMuTk9ORTsKCiAgLy8vIFJlZ2lzdGVycyBhbiBpbnZvY2F0aW9uIG9uIHRoZSB2YWx1ZSBvZiBbZW50aXR5XSBhbmQgcmV0dXJucyB0aGUgbmV3CiAgLy8vIFtNZW1iZXJVc2VdcyB0aGF0IGl0IGNhdXNlZC4KICAvLy8KICAvLy8gRm9yIGEgZnVuY3Rpb24gdGhpcyBpcyBhIG5vcm1hbCBpbnZvY2F0aW9uLCBmb3IgYSBmaWVsZCB0aGlzIGlzIGEgcmVhZAogIC8vLyBhY2Nlc3MgZm9sbG93ZWQgYnkgYW4gaW52b2NhdGlvbiBvZiB0aGUgZnVuY3Rpb24tbGlrZSB2YWx1ZS4KICBFbnVtU2V0PE1lbWJlclVzZT4gaW52b2tlKAogICAgICAgICAgRW51bVNldDxBY2Nlc3M+IGFjY2Vzc2VzLCBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUpID0+CiAgICAgIE1lbWJlclVzZXMuTk9ORTsKCiAgQG92ZXJyaWRlCiAgRW51bVNldDxNZW1iZXJVc2U+IGdldCBfb3JpZ2luYWxVc2UgPT4gTWVtYmVyVXNlcy5OT1JNQUxfT05MWTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBlbnRpdHkuaGFzaENvZGU7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgTWVtYmVyVXNhZ2UpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBlbnRpdHkgPT0gb3RoZXIuZW50aXR5OwogIH0KCiAgTWVtYmVyVXNhZ2UgY2xvbmUoKTsKCiAgYm9vbCBkYXRhRXF1YWxzKE1lbWJlclVzYWdlIG90aGVyKSB7CiAgICBhc3NlcnQoZW50aXR5ID09IG90aGVyLmVudGl0eSk7CiAgICByZXR1cm4gaGFzSW5pdCA9PSBvdGhlci5oYXNJbml0ICYmCiAgICAgICAgaGFzUmVhZCA9PSBvdGhlci5oYXNSZWFkICYmCiAgICAgICAgaGFzSW52b2tlID09IG90aGVyLmhhc0ludm9rZSAmJgogICAgICAgIGhhc1dyaXRlID09IG90aGVyLmhhc1dyaXRlICYmCiAgICAgICAgaGFzUGVuZGluZ0R5bmFtaWNSZWFkID09IG90aGVyLmhhc1BlbmRpbmdEeW5hbWljUmVhZCAmJgogICAgICAgIGhhc1BlbmRpbmdEeW5hbWljV3JpdGUgPT0gb3RoZXIuaGFzUGVuZGluZ0R5bmFtaWNXcml0ZSAmJgogICAgICAgIGhhc1BlbmRpbmdEeW5hbWljSW52b2tlID09IG90aGVyLmhhc1BlbmRpbmdEeW5hbWljSW52b2tlICYmCiAgICAgICAgaGFzUGVuZGluZ0R5bmFtaWNVc2UgPT0gb3RoZXIuaGFzUGVuZGluZ0R5bmFtaWNVc2UgJiYKICAgICAgICBfcGVuZGluZ1VzZSA9PSBvdGhlci5fcGVuZGluZ1VzZSAmJgogICAgICAgIF9hcHBsaWVkVXNlID09IG90aGVyLl9hcHBsaWVkVXNlICYmCiAgICAgICAgcmVhZHMgPT0gb3RoZXIucmVhZHMgJiYKICAgICAgICB3cml0ZXMgPT0gb3RoZXIud3JpdGVzICYmCiAgICAgICAgaW52b2tlcyA9PSBvdGhlci5pbnZva2VzICYmCiAgICAgICAgcG90ZW50aWFsUmVhZHMgPT0gb3RoZXIucG90ZW50aWFsUmVhZHMgJiYKICAgICAgICBwb3RlbnRpYWxXcml0ZXMgPT0gb3RoZXIucG90ZW50aWFsV3JpdGVzICYmCiAgICAgICAgcG90ZW50aWFsSW52b2tlcyA9PSBvdGhlci5wb3RlbnRpYWxJbnZva2VzICYmCiAgICAgICAgaW52b2tlZFBhcmFtZXRlcnMgPT0gb3RoZXIuaW52b2tlZFBhcmFtZXRlcnM7CiAgfQp9CgovLy8gTWVtYmVyIHVzYWdlIHRyYWNraW5nIGZvciBhIGdldHRlciBvciBzZXR0ZXIuCmNsYXNzIFByb3BlcnR5VXNhZ2UgZXh0ZW5kcyBNZW1iZXJVc2FnZSB7CiAgQG92ZXJyaWRlCiAgZmluYWwgRW51bVNldDxBY2Nlc3M+IHBvdGVudGlhbFJlYWRzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBFbnVtU2V0PEFjY2Vzcz4gcG90ZW50aWFsV3JpdGVzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBFbnVtU2V0PEFjY2Vzcz4gcG90ZW50aWFsSW52b2tlczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgRW51bVNldDxBY2Nlc3M+IHJlYWRzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBFbnVtU2V0PEFjY2Vzcz4gd3JpdGVzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBFbnVtU2V0PEFjY2Vzcz4gaW52b2tlczsKCiAgUHJvcGVydHlVc2FnZS5jbG9uZWQoTWVtYmVyRW50aXR5IG1lbWJlciwgRW51bVNldDxNZW1iZXJVc2U+IHBlbmRpbmdVc2UsCiAgICAgIHt0aGlzLnBvdGVudGlhbFJlYWRzLAogICAgICB0aGlzLnBvdGVudGlhbFdyaXRlcywKICAgICAgdGhpcy5wb3RlbnRpYWxJbnZva2VzLAogICAgICB0aGlzLnJlYWRzLAogICAgICB0aGlzLndyaXRlcywKICAgICAgdGhpcy5pbnZva2VzfSkKICAgICAgOiBhc3NlcnQocG90ZW50aWFsUmVhZHMgIT0gbnVsbCksCiAgICAgICAgYXNzZXJ0KHBvdGVudGlhbFdyaXRlcyAhPSBudWxsKSwKICAgICAgICBhc3NlcnQocG90ZW50aWFsSW52b2tlcyAhPSBudWxsKSwKICAgICAgICBhc3NlcnQocmVhZHMgIT0gbnVsbCksCiAgICAgICAgYXNzZXJ0KHdyaXRlcyAhPSBudWxsKSwKICAgICAgICBhc3NlcnQoaW52b2tlcyAhPSBudWxsKSwKICAgICAgICBzdXBlci5jbG9uZWQobWVtYmVyLCBwZW5kaW5nVXNlKTsKCiAgUHJvcGVydHlVc2FnZShNZW1iZXJFbnRpdHkgbWVtYmVyLAogICAgICB7dGhpcy5wb3RlbnRpYWxSZWFkcywgdGhpcy5wb3RlbnRpYWxXcml0ZXMsIHRoaXMucG90ZW50aWFsSW52b2tlc30pCiAgICAgIDogcmVhZHMgPSBuZXcgRW51bVNldCgpLAogICAgICAgIHdyaXRlcyA9IG5ldyBFbnVtU2V0KCksCiAgICAgICAgaW52b2tlcyA9IG5ldyBFbnVtU2V0KCksCiAgICAgICAgYXNzZXJ0KHBvdGVudGlhbFJlYWRzICE9IG51bGwpLAogICAgICAgIGFzc2VydChwb3RlbnRpYWxXcml0ZXMgIT0gbnVsbCksCiAgICAgICAgYXNzZXJ0KHBvdGVudGlhbEludm9rZXMgIT0gbnVsbCksCiAgICAgICAgc3VwZXIuaW50ZXJuYWwobWVtYmVyKTsKCiAgQG92ZXJyaWRlCiAgRW51bVNldDxNZW1iZXJVc2U+IHJlYWQoRW51bVNldDxBY2Nlc3M+IGFjY2Vzc2VzKSB7CiAgICBib29sIGFscmVhZHlIYXNSZWFkID0gaGFzUmVhZDsKICAgIHJlYWRzLmFkZEFsbChwb3RlbnRpYWxSZWFkcy5yZW1vdmVBbGwoYWNjZXNzZXMpKTsKICAgIGlmIChhbHJlYWR5SGFzUmVhZCkgewogICAgICByZXR1cm4gTWVtYmVyVXNlcy5OT05FOwogICAgfQogICAgcmV0dXJuIF9wZW5kaW5nVXNlLnJlbW92ZUFsbChNZW1iZXJVc2VzLk5PUk1BTF9PTkxZKTsKICB9CgogIEBvdmVycmlkZQogIEVudW1TZXQ8TWVtYmVyVXNlPiB3cml0ZShFbnVtU2V0PEFjY2Vzcz4gYWNjZXNzZXMpIHsKICAgIGJvb2wgYWxyZWFkeUhhc1dyaXRlID0gaGFzV3JpdGU7CiAgICB3cml0ZXMuYWRkQWxsKHBvdGVudGlhbFdyaXRlcy5yZW1vdmVBbGwoYWNjZXNzZXMpKTsKICAgIGlmIChhbHJlYWR5SGFzV3JpdGUpIHsKICAgICAgcmV0dXJuIE1lbWJlclVzZXMuTk9ORTsKICAgIH0KICAgIHJldHVybiBfcGVuZGluZ1VzZS5yZW1vdmVBbGwoTWVtYmVyVXNlcy5OT1JNQUxfT05MWSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFbnVtU2V0PE1lbWJlclVzZT4gaW52b2tlKAogICAgICBFbnVtU2V0PEFjY2Vzcz4gYWNjZXNzZXMsIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSkgewogICAgLy8gV2UgdXNlIGBoYXNSZWFkYCBoZXJlIGluc3RlYWQgb2YgYGhhc0ludm9rZWAgYmVjYXVzZSBnZXR0ZXJzIG9ubHkgaGF2ZQogICAgLy8gJ25vcm1hbCB1c2UnICh0aGV5IGNhbm5vdCBiZSBjbG9zdXJpemVkKS4gVGhpcyBtZWFucyB0aGF0IGludm9raW5nIGFuCiAgICAvLyBhbHJlYWR5IHJlYWQgZ2V0dGVyIGRvZXMgbm90IHJlc3VsdCBhIG5ldyBtZW1iZXIgdXNlLgogICAgYm9vbCBhbHJlYWR5SGFzUmVhZCA9IGhhc1JlYWQ7CiAgICByZWFkcy5hZGRBbGwocG90ZW50aWFsUmVhZHMucmVtb3ZlQWxsKEFjY2Vzc2VzLnN0YXRpY0FjY2VzcykpOwogICAgaW52b2tlcy5hZGRBbGwocG90ZW50aWFsSW52b2tlcy5yZW1vdmVBbGwoYWNjZXNzZXMpKTsKICAgIGlmIChhbHJlYWR5SGFzUmVhZCkgewogICAgICByZXR1cm4gTWVtYmVyVXNlcy5OT05FOwogICAgfQogICAgcmV0dXJuIF9wZW5kaW5nVXNlLnJlbW92ZUFsbChNZW1iZXJVc2VzLk5PUk1BTF9PTkxZKTsKICB9CgogIEBvdmVycmlkZQogIE1lbWJlclVzYWdlIGNsb25lKCkgewogICAgcmV0dXJuIG5ldyBQcm9wZXJ0eVVzYWdlLmNsb25lZChlbnRpdHksIF9wZW5kaW5nVXNlLmNsb25lKCksCiAgICAgICAgcG90ZW50aWFsUmVhZHM6IHBvdGVudGlhbFJlYWRzLmNsb25lKCksCiAgICAgICAgcG90ZW50aWFsV3JpdGVzOiBwb3RlbnRpYWxXcml0ZXMuY2xvbmUoKSwKICAgICAgICBwb3RlbnRpYWxJbnZva2VzOiBwb3RlbnRpYWxJbnZva2VzLmNsb25lKCksCiAgICAgICAgcmVhZHM6IHJlYWRzLmNsb25lKCksCiAgICAgICAgd3JpdGVzOiB3cml0ZXMuY2xvbmUoKSwKICAgICAgICBpbnZva2VzOiBpbnZva2VzLmNsb25lKCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1Byb3BlcnR5VXNhZ2UoJGVudGl0eSwnCiAgICAgICdyZWFkcz0ke3JlYWRzLml0ZXJhYmxlKEFjY2Vzcy52YWx1ZXMpfSwnCiAgICAgICd3cml0ZXM9JHt3cml0ZXMuaXRlcmFibGUoQWNjZXNzLnZhbHVlcyl9LCcKICAgICAgJ2ludm9rZXM9JHtpbnZva2VzLml0ZXJhYmxlKEFjY2Vzcy52YWx1ZXMpfSwnCiAgICAgICdwb3RlbnRpYWxSZWFkcz0ke3BvdGVudGlhbFJlYWRzLml0ZXJhYmxlKEFjY2Vzcy52YWx1ZXMpfSwnCiAgICAgICdwb3RlbnRpYWxXcml0ZXM9JHtwb3RlbnRpYWxXcml0ZXMuaXRlcmFibGUoQWNjZXNzLnZhbHVlcyl9LCcKICAgICAgJ3BvdGVudGlhbEludm9rZXM9JHtwb3RlbnRpYWxJbnZva2VzLml0ZXJhYmxlKEFjY2Vzcy52YWx1ZXMpfSwnCiAgICAgICdwZW5kaW5nVXNlPSR7X3BlbmRpbmdVc2UuaXRlcmFibGUoTWVtYmVyVXNlLnZhbHVlcyl9LCcKICAgICAgJ2luaXRpYWxDb25zdGFudHM9JHtpbml0aWFsQ29uc3RhbnRzPy5tYXAoKGMpID0+IGMudG9TdHJ1Y3R1cmVkVGV4dCgpKX0pJzsKfQoKLy8vIE1lbWJlciB1c2FnZSB0cmFja2luZyBmb3IgYSBmaWVsZC4KY2xhc3MgRmllbGRVc2FnZSBleHRlbmRzIE1lbWJlclVzYWdlIHsKICBAb3ZlcnJpZGUKICBib29sIGhhc0luaXQ7CgogIEBvdmVycmlkZQogIGZpbmFsIEVudW1TZXQ8QWNjZXNzPiBwb3RlbnRpYWxSZWFkczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgRW51bVNldDxBY2Nlc3M+IHBvdGVudGlhbFdyaXRlczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgRW51bVNldDxBY2Nlc3M+IHBvdGVudGlhbEludm9rZXM7CgogIEBvdmVycmlkZQogIGZpbmFsIEVudW1TZXQ8QWNjZXNzPiByZWFkczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgRW51bVNldDxBY2Nlc3M+IGludm9rZXM7CgogIEBvdmVycmlkZQogIGZpbmFsIEVudW1TZXQ8QWNjZXNzPiB3cml0ZXM7CgogIExpc3Q8Q29uc3RhbnRWYWx1ZT4gX2luaXRpYWxDb25zdGFudHM7CgogIEZpZWxkVXNhZ2UuY2xvbmVkKEZpZWxkRW50aXR5IGZpZWxkLCBFbnVtU2V0PE1lbWJlclVzZT4gcGVuZGluZ1VzZSwKICAgICAge3RoaXMucG90ZW50aWFsUmVhZHMsCiAgICAgIHRoaXMucG90ZW50aWFsV3JpdGVzLAogICAgICB0aGlzLnBvdGVudGlhbEludm9rZXMsCiAgICAgIHRoaXMuaGFzSW5pdCwKICAgICAgdGhpcy5yZWFkcywKICAgICAgdGhpcy53cml0ZXMsCiAgICAgIHRoaXMuaW52b2tlc30pCiAgICAgIDogYXNzZXJ0KHBvdGVudGlhbFJlYWRzICE9IG51bGwpLAogICAgICAgIGFzc2VydChwb3RlbnRpYWxXcml0ZXMgIT0gbnVsbCksCiAgICAgICAgYXNzZXJ0KHBvdGVudGlhbEludm9rZXMgIT0gbnVsbCksCiAgICAgICAgYXNzZXJ0KHJlYWRzICE9IG51bGwpLAogICAgICAgIGFzc2VydCh3cml0ZXMgIT0gbnVsbCksCiAgICAgICAgYXNzZXJ0KGludm9rZXMgIT0gbnVsbCksCiAgICAgICAgc3VwZXIuY2xvbmVkKGZpZWxkLCBwZW5kaW5nVXNlKTsKCiAgRmllbGRVc2FnZShGaWVsZEVudGl0eSBmaWVsZCwKICAgICAge3RoaXMucG90ZW50aWFsUmVhZHMsIHRoaXMucG90ZW50aWFsV3JpdGVzLCB0aGlzLnBvdGVudGlhbEludm9rZXN9KQogICAgICA6IGhhc0luaXQgPSBmYWxzZSwKICAgICAgICByZWFkcyA9IG5ldyBFbnVtU2V0KCksCiAgICAgICAgd3JpdGVzID0gbmV3IEVudW1TZXQoKSwKICAgICAgICBpbnZva2VzID0gbmV3IEVudW1TZXQoKSwKICAgICAgICBhc3NlcnQocG90ZW50aWFsUmVhZHMgIT0gbnVsbCksCiAgICAgICAgYXNzZXJ0KHBvdGVudGlhbFdyaXRlcyAhPSBudWxsKSwKICAgICAgICBhc3NlcnQocG90ZW50aWFsSW52b2tlcyAhPSBudWxsKSwKICAgICAgICBzdXBlci5pbnRlcm5hbChmaWVsZCk7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IGdldCBpbml0aWFsQ29uc3RhbnRzID0+IF9pbml0aWFsQ29uc3RhbnRzID8/IGNvbnN0IFtdOwoKICBAb3ZlcnJpZGUKICBFbnVtU2V0PE1lbWJlclVzZT4gaW5pdCgpIHsKICAgIGlmIChoYXNJbml0KSB7CiAgICAgIHJldHVybiBNZW1iZXJVc2VzLk5PTkU7CiAgICB9CiAgICBoYXNJbml0ID0gdHJ1ZTsKICAgIHJldHVybiBfcGVuZGluZ1VzZS5yZW1vdmVBbGwoTWVtYmVyVXNlcy5OT1JNQUxfT05MWSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFbnVtU2V0PE1lbWJlclVzZT4gY29uc3RhbnRJbml0KENvbnN0YW50VmFsdWUgY29uc3RhbnQpIHsKICAgIF9pbml0aWFsQ29uc3RhbnRzID8/PSBbXTsKICAgIF9pbml0aWFsQ29uc3RhbnRzLmFkZChjb25zdGFudCk7CiAgICByZXR1cm4gaW5pdCgpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaGFzUmVhZCA9PiByZWFkcy5pc05vdEVtcHR5OwoKICBAb3ZlcnJpZGUKICBFbnVtU2V0PE1lbWJlclVzZT4gcmVhZChFbnVtU2V0PEFjY2Vzcz4gYWNjZXNzZXMpIHsKICAgIGJvb2wgYWxyZWFkeUhhc1JlYWQgPSBoYXNSZWFkOwogICAgcmVhZHMuYWRkQWxsKHBvdGVudGlhbFJlYWRzLnJlbW92ZUFsbChhY2Nlc3NlcykpOwogICAgaWYgKGFscmVhZHlIYXNSZWFkKSB7CiAgICAgIHJldHVybiBNZW1iZXJVc2VzLk5PTkU7CiAgICB9CiAgICByZXR1cm4gX3BlbmRpbmdVc2UucmVtb3ZlQWxsKE1lbWJlclVzZXMuTk9STUFMX09OTFkpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaGFzV3JpdGUgPT4gd3JpdGVzLmlzTm90RW1wdHk7CgogIEBvdmVycmlkZQogIEVudW1TZXQ8TWVtYmVyVXNlPiB3cml0ZShFbnVtU2V0PEFjY2Vzcz4gYWNjZXNzZXMpIHsKICAgIGJvb2wgYWxyZWFkeUhhc1dyaXRlID0gaGFzV3JpdGU7CiAgICB3cml0ZXMuYWRkQWxsKHBvdGVudGlhbFdyaXRlcy5yZW1vdmVBbGwoYWNjZXNzZXMpKTsKICAgIGlmIChhbHJlYWR5SGFzV3JpdGUpIHsKICAgICAgcmV0dXJuIE1lbWJlclVzZXMuTk9ORTsKICAgIH0KICAgIHJldHVybiBfcGVuZGluZ1VzZS5yZW1vdmVBbGwoTWVtYmVyVXNlcy5OT1JNQUxfT05MWSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFbnVtU2V0PE1lbWJlclVzZT4gaW52b2tlKAogICAgICBFbnVtU2V0PEFjY2Vzcz4gYWNjZXNzZXMsIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSkgewogICAgLy8gV2UgdXNlIGBoYXNSZWFkYCBoZXJlIGluc3RlYWQgb2YgYGhhc0ludm9rZWAgYmVjYXVzZSBmaWVsZHMgb25seSBoYXZlCiAgICAvLyAnbm9ybWFsIHVzZScgKHRoZXkgY2Fubm90IGJlIGNsb3N1cml6ZWQpLiBUaGlzIG1lYW5zIHRoYXQgaW52b2tpbmcgYW4KICAgIC8vIGFscmVhZHkgcmVhZCBmaWVsZCBkb2VzIG5vdCByZXN1bHQgYSBuZXcgbWVtYmVyIHVzZS4KICAgIGJvb2wgYWxyZWFkeUhhc1JlYWQgPSBoYXNSZWFkOwogICAgcmVhZHMuYWRkQWxsKHBvdGVudGlhbFJlYWRzLnJlbW92ZUFsbChBY2Nlc3Nlcy5zdGF0aWNBY2Nlc3MpKTsKICAgIGludm9rZXMuYWRkQWxsKHBvdGVudGlhbEludm9rZXMucmVtb3ZlQWxsKGFjY2Vzc2VzKSk7CiAgICBpZiAoYWxyZWFkeUhhc1JlYWQpIHsKICAgICAgcmV0dXJuIE1lbWJlclVzZXMuTk9ORTsKICAgIH0KICAgIHJldHVybiBfcGVuZGluZ1VzZS5yZW1vdmVBbGwoTWVtYmVyVXNlcy5OT1JNQUxfT05MWSk7CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXJVc2FnZSBjbG9uZSgpIHsKICAgIHJldHVybiBuZXcgRmllbGRVc2FnZS5jbG9uZWQoZW50aXR5LCBfcGVuZGluZ1VzZS5jbG9uZSgpLAogICAgICAgIHBvdGVudGlhbFJlYWRzOiBwb3RlbnRpYWxSZWFkcy5jbG9uZSgpLAogICAgICAgIHBvdGVudGlhbFdyaXRlczogcG90ZW50aWFsV3JpdGVzLmNsb25lKCksCiAgICAgICAgcG90ZW50aWFsSW52b2tlczogcG90ZW50aWFsSW52b2tlcy5jbG9uZSgpLAogICAgICAgIGhhc0luaXQ6IGhhc0luaXQsCiAgICAgICAgcmVhZHM6IHJlYWRzLmNsb25lKCksCiAgICAgICAgd3JpdGVzOiB3cml0ZXMuY2xvbmUoKSwKICAgICAgICBpbnZva2VzOiBpbnZva2VzLmNsb25lKCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0ZpZWxkVXNhZ2UoJGVudGl0eSxoYXNJbml0PSRoYXNJbml0LCcKICAgICAgJ3JlYWRzPSR7cmVhZHMuaXRlcmFibGUoQWNjZXNzLnZhbHVlcyl9LCcKICAgICAgJ3dyaXRlcz0ke3dyaXRlcy5pdGVyYWJsZShBY2Nlc3MudmFsdWVzKX0sJwogICAgICAnaW52b2tlcz0ke2ludm9rZXMuaXRlcmFibGUoQWNjZXNzLnZhbHVlcyl9LCcKICAgICAgJ3BvdGVudGlhbFJlYWRzPSR7cG90ZW50aWFsUmVhZHMuaXRlcmFibGUoQWNjZXNzLnZhbHVlcyl9LCcKICAgICAgJ3BvdGVudGlhbFdyaXRlcz0ke3BvdGVudGlhbFdyaXRlcy5pdGVyYWJsZShBY2Nlc3MudmFsdWVzKX0sJwogICAgICAncG90ZW50aWFsSW52b2tlcz0ke3BvdGVudGlhbEludm9rZXMuaXRlcmFibGUoQWNjZXNzLnZhbHVlcyl9LCcKICAgICAgJ3BlbmRpbmdVc2U9JHtfcGVuZGluZ1VzZS5pdGVyYWJsZShNZW1iZXJVc2UudmFsdWVzKX0sJwogICAgICAnaW5pdGlhbENvbnN0YW50cz0ke2luaXRpYWxDb25zdGFudHMubWFwKChjKSA9PiBjLnRvU3RydWN0dXJlZFRleHQoKSl9KSc7Cn0KCi8vLyBNZW1iZXIgdXNhZ2UgdHJhY2tpbmcgZm9yIGEgY29uc3RydWN0b3Igb3IgbWV0aG9kLgpjbGFzcyBNZXRob2RVc2FnZSBleHRlbmRzIE1lbWJlclVzYWdlIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBFbnVtU2V0PEFjY2Vzcz4gcG90ZW50aWFsUmVhZHM7CgogIEBvdmVycmlkZQogIGZpbmFsIEVudW1TZXQ8QWNjZXNzPiBwb3RlbnRpYWxJbnZva2VzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBFbnVtU2V0PEFjY2Vzcz4gcmVhZHM7CgogIEBvdmVycmlkZQogIGZpbmFsIEVudW1TZXQ8QWNjZXNzPiBpbnZva2VzOwoKICBmaW5hbCBQYXJhbWV0ZXJVc2FnZSBwYXJhbWV0ZXJVc2FnZTsKCiAgTWV0aG9kVXNhZ2UuY2xvbmVkKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uLCB0aGlzLnBhcmFtZXRlclVzYWdlLAogICAgICBFbnVtU2V0PE1lbWJlclVzZT4gcGVuZGluZ1VzZSwKICAgICAge3RoaXMucG90ZW50aWFsUmVhZHMsIHRoaXMucmVhZHMsIHRoaXMucG90ZW50aWFsSW52b2tlcywgdGhpcy5pbnZva2VzfSkKICAgICAgOiBhc3NlcnQocG90ZW50aWFsUmVhZHMgIT0gbnVsbCksCiAgICAgICAgYXNzZXJ0KHBvdGVudGlhbEludm9rZXMgIT0gbnVsbCksCiAgICAgICAgYXNzZXJ0KHJlYWRzICE9IG51bGwpLAogICAgICAgIGFzc2VydChpbnZva2VzICE9IG51bGwpLAogICAgICAgIHN1cGVyLmNsb25lZChmdW5jdGlvbiwgcGVuZGluZ1VzZSk7CgogIE1ldGhvZFVzYWdlKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uLAogICAgICB7dGhpcy5wb3RlbnRpYWxSZWFkcywgdGhpcy5wb3RlbnRpYWxJbnZva2VzfSkKICAgICAgOiByZWFkcyA9IG5ldyBFbnVtU2V0KCksCiAgICAgICAgaW52b2tlcyA9IG5ldyBFbnVtU2V0KCksCiAgICAgICAgcGFyYW1ldGVyVXNhZ2UgPSBuZXcgUGFyYW1ldGVyVXNhZ2UoZnVuY3Rpb24ucGFyYW1ldGVyU3RydWN0dXJlKSwKICAgICAgICBhc3NlcnQocG90ZW50aWFsUmVhZHMgIT0gbnVsbCksCiAgICAgICAgYXNzZXJ0KHBvdGVudGlhbEludm9rZXMgIT0gbnVsbCksCiAgICAgICAgc3VwZXIuaW50ZXJuYWwoZnVuY3Rpb24pOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBoYXNJbnZva2UgPT4gaW52b2tlcy5pc05vdEVtcHR5ICYmIHBhcmFtZXRlclVzYWdlLmhhc0ludm9rZTsKCiAgQG92ZXJyaWRlCiAgRW51bVNldDxNZW1iZXJVc2U+IGdldCBfb3JpZ2luYWxVc2UgPT4KICAgICAgZW50aXR5LmlzSW5zdGFuY2VNZW1iZXIgPyBNZW1iZXJVc2VzLkFMTF9JTlNUQU5DRSA6IE1lbWJlclVzZXMuQUxMX1NUQVRJQzsKCiAgQG92ZXJyaWRlCiAgRW51bVNldDxNZW1iZXJVc2U+IHJlYWQoRW51bVNldDxBY2Nlc3M+IGFjY2Vzc2VzKSB7CiAgICBib29sIGFscmVhZHlIYXNJbnZva2UgPSBoYXNJbnZva2U7CiAgICBib29sIGFscmVhZHlIYXNSZWFkID0gaGFzUmVhZDsKICAgIHJlYWRzLmFkZEFsbChwb3RlbnRpYWxSZWFkcy5yZW1vdmVBbGwoYWNjZXNzZXMpKTsKICAgIGludm9rZXMuYWRkQWxsKHBvdGVudGlhbEludm9rZXMucmVtb3ZlQWxsKEFjY2Vzc2VzLmR5bmFtaWNBY2Nlc3MpKTsKICAgIHBhcmFtZXRlclVzYWdlLmZ1bGx5VXNlKCk7CiAgICBpZiAoYWxyZWFkeUhhc0ludm9rZSkgewogICAgICBpZiAoYWxyZWFkeUhhc1JlYWQpIHsKICAgICAgICByZXR1cm4gTWVtYmVyVXNlcy5OT05FOwogICAgICB9CiAgICAgIHJldHVybiBfcGVuZGluZ1VzZS5yZW1vdmVBbGwoZW50aXR5LmlzSW5zdGFuY2VNZW1iZXIKICAgICAgICAgID8gTWVtYmVyVXNlcy5DTE9TVVJJWkVfSU5TVEFOQ0VfT05MWQogICAgICAgICAgOiBNZW1iZXJVc2VzLkNMT1NVUklaRV9TVEFUSUNfT05MWSk7CiAgICB9IGVsc2UgaWYgKGFscmVhZHlIYXNSZWFkKSB7CiAgICAgIHJldHVybiBfcGVuZGluZ1VzZS5yZW1vdmVBbGwoTWVtYmVyVXNlcy5OT1JNQUxfT05MWSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX3BlbmRpbmdVc2UucmVtb3ZlQWxsKGVudGl0eS5pc0luc3RhbmNlTWVtYmVyCiAgICAgICAgICA/IE1lbWJlclVzZXMuQUxMX0lOU1RBTkNFCiAgICAgICAgICA6IE1lbWJlclVzZXMuQUxMX1NUQVRJQyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBFbnVtU2V0PE1lbWJlclVzZT4gaW52b2tlKAogICAgICBFbnVtU2V0PEFjY2Vzcz4gYWNjZXNzZXMsIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSkgewogICAgYm9vbCBhbHJlYWR5SGFzSW52b2tlID0gaGFzSW52b2tlOwogICAgcGFyYW1ldGVyVXNhZ2UuaW52b2tlKGNhbGxTdHJ1Y3R1cmUpOwogICAgaW52b2tlcy5hZGRBbGwocG90ZW50aWFsSW52b2tlcy5yZW1vdmVBbGwoYWNjZXNzZXMpKTsKICAgIGlmIChhbHJlYWR5SGFzSW52b2tlKSB7CiAgICAgIHJldHVybiBNZW1iZXJVc2VzLk5PTkU7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX3BlbmRpbmdVc2UKICAgICAgICAgIC5yZW1vdmVBbGwoaGFzUmVhZCA/IE1lbWJlclVzZXMuTk9ORSA6IE1lbWJlclVzZXMuTk9STUFMX09OTFkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgUGFyYW1ldGVyU3RydWN0dXJlIGdldCBpbnZva2VkUGFyYW1ldGVycyA9PiBwYXJhbWV0ZXJVc2FnZS5pbnZva2VkUGFyYW1ldGVyczsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaGFzUGVuZGluZ0R5bmFtaWNJbnZva2UgPT4KICAgICAgcG90ZW50aWFsSW52b2tlcy5jb250YWlucyhBY2Nlc3MuZHluYW1pY0FjY2VzcykgfHwKICAgICAgKGludm9rZXMuY29udGFpbnMoQWNjZXNzLmR5bmFtaWNBY2Nlc3MpICYmICFwYXJhbWV0ZXJVc2FnZS5pc0Z1bGx5VXNlZCk7CgogIEBvdmVycmlkZQogIE1lbWJlclVzYWdlIGNsb25lKCkgewogICAgcmV0dXJuIG5ldyBNZXRob2RVc2FnZS5jbG9uZWQoCiAgICAgICAgZW50aXR5LCBwYXJhbWV0ZXJVc2FnZS5jbG9uZSgpLCBfcGVuZGluZ1VzZS5jbG9uZSgpLAogICAgICAgIHJlYWRzOiByZWFkcy5jbG9uZSgpLAogICAgICAgIHBvdGVudGlhbFJlYWRzOiBwb3RlbnRpYWxSZWFkcy5jbG9uZSgpLAogICAgICAgIGludm9rZXM6IGludm9rZXMuY2xvbmUoKSwKICAgICAgICBwb3RlbnRpYWxJbnZva2VzOiBwb3RlbnRpYWxJbnZva2VzLmNsb25lKCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ01ldGhvZFVzYWdlKCRlbnRpdHksJwogICAgICAncmVhZHM9JHtyZWFkcy5pdGVyYWJsZShBY2Nlc3MudmFsdWVzKX0sJwogICAgICAnaW52b2tlcz0ke2ludm9rZXMuaXRlcmFibGUoQWNjZXNzLnZhbHVlcyl9LCcKICAgICAgJ3BhcmFtZXRlclVzYWdlPSR7cGFyYW1ldGVyVXNhZ2V9LCcKICAgICAgJ3BvdGVudGlhbFJlYWRzPSR7cG90ZW50aWFsUmVhZHMuaXRlcmFibGUoQWNjZXNzLnZhbHVlcyl9LCcKICAgICAgJ3BvdGVudGlhbEludm9rZXM9JHtwb3RlbnRpYWxJbnZva2VzLml0ZXJhYmxlKEFjY2Vzcy52YWx1ZXMpfSwnCiAgICAgICdwZW5kaW5nVXNlPSR7X3BlbmRpbmdVc2UuaXRlcmFibGUoTWVtYmVyVXNlLnZhbHVlcyl9KSc7Cn0KCi8vLyBFbnVtIGNsYXNzIGZvciB0aGUgcG9zc2libGUga2luZCBvZiB1c2Ugb2YgW01lbWJlckVudGl0eV0gb2JqZWN0cy4KZW51bSBNZW1iZXJVc2UgewogIC8vLyBSZWFkIG9yIHdyaXRlIG9mIGEgZmllbGQsIG9yIGludm9jYXRpb24gb2YgYSBtZXRob2QuCiAgTk9STUFMLAoKICAvLy8gVGVhci1vZmYgb2YgYW4gaW5zdGFuY2UgbWV0aG9kLgogIENMT1NVUklaRV9JTlNUQU5DRSwKCiAgLy8vIFRlYXItb2ZmIG9mIGEgc3RhdGljIG1ldGhvZC4KICBDTE9TVVJJWkVfU1RBVElDLAp9CgovLy8gQ29tbW9uIFtFbnVtU2V0XXMgdXNlZCBmb3IgW01lbWJlclVzZV0uCmNsYXNzIE1lbWJlclVzZXMgewogIHN0YXRpYyBjb25zdCBFbnVtU2V0PE1lbWJlclVzZT4gTk9ORSA9IGNvbnN0IEVudW1TZXQ8TWVtYmVyVXNlPi5maXhlZCgwKTsKICBzdGF0aWMgY29uc3QgRW51bVNldDxNZW1iZXJVc2U+IE5PUk1BTF9PTkxZID0KICAgICAgY29uc3QgRW51bVNldDxNZW1iZXJVc2U+LmZpeGVkKDEpOwogIHN0YXRpYyBjb25zdCBFbnVtU2V0PE1lbWJlclVzZT4gQ0xPU1VSSVpFX0lOU1RBTkNFX09OTFkgPQogICAgICBjb25zdCBFbnVtU2V0PE1lbWJlclVzZT4uZml4ZWQoMik7CiAgc3RhdGljIGNvbnN0IEVudW1TZXQ8TWVtYmVyVXNlPiBDTE9TVVJJWkVfU1RBVElDX09OTFkgPQogICAgICBjb25zdCBFbnVtU2V0PE1lbWJlclVzZT4uZml4ZWQoNCk7CiAgc3RhdGljIGNvbnN0IEVudW1TZXQ8TWVtYmVyVXNlPiBBTExfSU5TVEFOQ0UgPQogICAgICBjb25zdCBFbnVtU2V0PE1lbWJlclVzZT4uZml4ZWQoMyk7CiAgc3RhdGljIGNvbnN0IEVudW1TZXQ8TWVtYmVyVXNlPiBBTExfU1RBVElDID0KICAgICAgY29uc3QgRW51bVNldDxNZW1iZXJVc2U+LmZpeGVkKDUpOwp9Cgp0eXBlZGVmIHZvaWQgTWVtYmVyVXNlZENhbGxiYWNrKE1lbWJlckVudGl0eSBtZW1iZXIsIEVudW1TZXQ8TWVtYmVyVXNlPiB1c2VTZXQpOwoKLy8vIFJlZ2lzdHJ5IGZvciB0aGUgb2JzZXJ2ZWQgdXNlIG9mIGEgY2xhc3MgW2VudGl0eV0gaW4gdGhlIG9wZW4gd29ybGQuCi8vIFRPRE8oam9obm5pd2ludGhlcik6IE1lcmdlIHRoaXMgd2l0aCBbSW5zdGFudGlhdGlvbkluZm9dLgpjbGFzcyBDbGFzc1VzYWdlIGV4dGVuZHMgQWJzdHJhY3RVc2FnZTxDbGFzc1VzZT4gewogIGJvb2wgaXNJbnN0YW50aWF0ZWQgPSBmYWxzZTsKICBib29sIGlzSW1wbGVtZW50ZWQgPSBmYWxzZTsKCiAgZmluYWwgQ2xhc3NFbnRpdHkgY2xzOwoKICBDbGFzc1VzYWdlKHRoaXMuY2xzKSA6IHN1cGVyKCk7CgogIEVudW1TZXQ8Q2xhc3NVc2U+IGluc3RhbnRpYXRlKCkgewogICAgaWYgKGlzSW5zdGFudGlhdGVkKSB7CiAgICAgIHJldHVybiBDbGFzc1VzZXMuTk9ORTsKICAgIH0KICAgIGlzSW5zdGFudGlhdGVkID0gdHJ1ZTsKICAgIHJldHVybiBfcGVuZGluZ1VzZS5yZW1vdmVBbGwoQ2xhc3NVc2VzLklOU1RBTlRJQVRFRF9PTkxZKTsKICB9CgogIEVudW1TZXQ8Q2xhc3NVc2U+IGltcGxlbWVudCgpIHsKICAgIGlmIChpc0ltcGxlbWVudGVkKSB7CiAgICAgIHJldHVybiBDbGFzc1VzZXMuTk9ORTsKICAgIH0KICAgIGlzSW1wbGVtZW50ZWQgPSB0cnVlOwogICAgcmV0dXJuIF9wZW5kaW5nVXNlLnJlbW92ZUFsbChDbGFzc1VzZXMuSU1QTEVNRU5URURfT05MWSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFbnVtU2V0PENsYXNzVXNlPiBnZXQgX29yaWdpbmFsVXNlID0+IENsYXNzVXNlcy5BTEw7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICckY2xzOiR7X2FwcGxpZWRVc2UuaXRlcmFibGUoQ2xhc3NVc2UudmFsdWVzKX0nOwp9CgovLy8gRW51bSBjbGFzcyBmb3IgdGhlIHBvc3NpYmxlIGtpbmQgb2YgdXNlIG9mIFtDbGFzc0VudGl0eV0gb2JqZWN0cy4KZW51bSBDbGFzc1VzZSB7IElOU1RBTlRJQVRFRCwgSU1QTEVNRU5URUQgfQoKLy8vIENvbW1vbiBbRW51bVNldF1zIHVzZWQgZm9yIFtDbGFzc1VzZV0uCmNsYXNzIENsYXNzVXNlcyB7CiAgc3RhdGljIGNvbnN0IEVudW1TZXQ8Q2xhc3NVc2U+IE5PTkUgPSBjb25zdCBFbnVtU2V0PENsYXNzVXNlPi5maXhlZCgwKTsKICBzdGF0aWMgY29uc3QgRW51bVNldDxDbGFzc1VzZT4gSU5TVEFOVElBVEVEX09OTFkgPQogICAgICBjb25zdCBFbnVtU2V0PENsYXNzVXNlPi5maXhlZCgxKTsKICBzdGF0aWMgY29uc3QgRW51bVNldDxDbGFzc1VzZT4gSU1QTEVNRU5URURfT05MWSA9CiAgICAgIGNvbnN0IEVudW1TZXQ8Q2xhc3NVc2U+LmZpeGVkKDIpOwogIHN0YXRpYyBjb25zdCBFbnVtU2V0PENsYXNzVXNlPiBBTEwgPSBjb25zdCBFbnVtU2V0PENsYXNzVXNlPi5maXhlZCgzKTsKfQoKdHlwZWRlZiB2b2lkIENsYXNzVXNlZENhbGxiYWNrKENsYXNzRW50aXR5IGNscywgRW51bVNldDxDbGFzc1VzZT4gdXNlU2V0KTsKCi8vLyBPYmplY3QgdXNlZCBmb3IgdHJhY2tpbmcgcGFyYW1ldGVyIHVzZSBpbiBjb25zdHJ1Y3RvciBhbmQgbWV0aG9kCi8vLyBpbnZvY2F0aW9ucy4KY2xhc3MgUGFyYW1ldGVyVXNhZ2UgewogIC8vLyBUaGUgb3JpZ2luYWwgcGFyYW1ldGVyIHN0cnVjdHVyZSBvZiB0aGUgbWV0aG9kIG9yIGNvbnN0cnVjdG9yLgogIGZpbmFsIFBhcmFtZXRlclN0cnVjdHVyZSBfcGFyYW1ldGVyU3RydWN0dXJlOwoKICAvLy8gYHRydWVgIGlmIHRoZSBtZXRob2Qgb3IgY29uc3RydWN0b3IgaGFzIGF0IGxlYXN0IG9uZSBpbnZvY2F0aW9uLgogIGJvb2wgX2hhc0ludm9rZTsKCiAgLy8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiAob3B0aW9uYWwpIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBwcm92aWRlZCBpbgogIC8vLyBpbnZvY2F0aW9ucyBvZiB0aGUgbWV0aG9kIG9yIGNvbnN0cnVjdG9yLgogIC8vLwogIC8vLyBJZiBhbGwgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIGhhdmluZyBiZWVuIHByb3ZpZGVkIHRoaXMgaXMgc2V0IHRvIGBudWxsYC4KICBpbnQgX3Byb3ZpZGVkUG9zaXRpb25hbFBhcmFtZXRlcnM7CgogIC8vLyBgdHJ1ZWAgaWYgYWxsIHR5cGUgcGFyYW1ldGVycyBoYXZlIGJlZW4gcHJvdmlkZWQgaW4gYXQgbGVhc3Qgb25lCiAgLy8vIGludm9jYXRpb24gb2YgdGhlIG1ldGhvZCBvciBjb25zdHJ1Y3Rvci4KICBib29sIF9hcmVBbGxUeXBlUGFyYW1ldGVyc1Byb3ZpZGVkOwoKICAvLy8gVGhlIHNldCBvZiBuYW1lZCBwYXJhbWV0ZXJzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gcHJvdmlkZWQgaW4gYW55CiAgLy8vIGludm9jYXRpb24gb2YgdGhlIG1ldGhvZCBvciBjb25zdHJ1Y3Rvci4KICAvLy8KICAvLy8gSWYgYWxsIG5hbWVkIHBhcmFtZXRlcnMgaGF2ZSBiZWVuIHByb3ZpZGVkIHRoaXMgaXMgc2V0IHRvIGBudWxsYC4KICBTZXQ8U3RyaW5nPiBfdW5wcm92aWRlZE5hbWVkUGFyYW1ldGVyczsKCiAgUGFyYW1ldGVyVXNhZ2UodGhpcy5fcGFyYW1ldGVyU3RydWN0dXJlKSB7CiAgICBfaGFzSW52b2tlID0gZmFsc2U7CiAgICBfYXJlQWxsVHlwZVBhcmFtZXRlcnNQcm92aWRlZCA9IF9wYXJhbWV0ZXJTdHJ1Y3R1cmUudHlwZVBhcmFtZXRlcnMgPT0gMDsKICAgIF9wcm92aWRlZFBvc2l0aW9uYWxQYXJhbWV0ZXJzID0gX3BhcmFtZXRlclN0cnVjdHVyZS5wb3NpdGlvbmFsUGFyYW1ldGVycyA9PQogICAgICAgICAgICBfcGFyYW1ldGVyU3RydWN0dXJlLnJlcXVpcmVkUGFyYW1ldGVycwogICAgICAgID8gbnVsbAogICAgICAgIDogMDsKICAgIGlmICghX3BhcmFtZXRlclN0cnVjdHVyZS5uYW1lZFBhcmFtZXRlcnMuaXNFbXB0eSkgewogICAgICBfdW5wcm92aWRlZE5hbWVkUGFyYW1ldGVycyA9CiAgICAgICAgICBuZXcgU2V0PFN0cmluZz4uZnJvbShfcGFyYW1ldGVyU3RydWN0dXJlLm5hbWVkUGFyYW1ldGVycyk7CiAgICB9CiAgfQoKICBQYXJhbWV0ZXJVc2FnZS5jbG9uZWQodGhpcy5fcGFyYW1ldGVyU3RydWN0dXJlLAogICAgICB7Ym9vbCBoYXNJbnZva2UsCiAgICAgIGludCBwcm92aWRlZFBvc2l0aW9uYWxQYXJhbWV0ZXJzLAogICAgICBib29sIGFyZUFsbFR5cGVQYXJhbWV0ZXJzUHJvdmlkZWQsCiAgICAgIFNldDxTdHJpbmc+IHVucHJvdmlkZWROYW1lZFBhcmFtZXRlcnN9KQogICAgICA6IF9oYXNJbnZva2UgPSBoYXNJbnZva2UsCiAgICAgICAgX3Byb3ZpZGVkUG9zaXRpb25hbFBhcmFtZXRlcnMgPSBwcm92aWRlZFBvc2l0aW9uYWxQYXJhbWV0ZXJzLAogICAgICAgIF9hcmVBbGxUeXBlUGFyYW1ldGVyc1Byb3ZpZGVkID0gYXJlQWxsVHlwZVBhcmFtZXRlcnNQcm92aWRlZCwKICAgICAgICBfdW5wcm92aWRlZE5hbWVkUGFyYW1ldGVycyA9IHVucHJvdmlkZWROYW1lZFBhcmFtZXRlcnM7CgogIGJvb2wgaW52b2tlKENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSkgewogICAgaWYgKGlzRnVsbHlVc2VkKSByZXR1cm4gZmFsc2U7CiAgICBfaGFzSW52b2tlID0gdHJ1ZTsKICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgaWYgKF9wcm92aWRlZFBvc2l0aW9uYWxQYXJhbWV0ZXJzICE9IG51bGwpIHsKICAgICAgaW50IG5ld1Byb3ZpZGVkUG9zaXRpb25hbFBhcmFtZXRlcnMgPSBNYXRoLm1heCgKICAgICAgICAgIF9wcm92aWRlZFBvc2l0aW9uYWxQYXJhbWV0ZXJzLCBjYWxsU3RydWN0dXJlLnBvc2l0aW9uYWxBcmd1bWVudENvdW50KTsKICAgICAgY2hhbmdlZCB8PQogICAgICAgICAgbmV3UHJvdmlkZWRQb3NpdGlvbmFsUGFyYW1ldGVycyAhPSBfcHJvdmlkZWRQb3NpdGlvbmFsUGFyYW1ldGVyczsKICAgICAgX3Byb3ZpZGVkUG9zaXRpb25hbFBhcmFtZXRlcnMgPSBuZXdQcm92aWRlZFBvc2l0aW9uYWxQYXJhbWV0ZXJzOwogICAgICBpZiAoX3Byb3ZpZGVkUG9zaXRpb25hbFBhcmFtZXRlcnMgPj0KICAgICAgICAgIF9wYXJhbWV0ZXJTdHJ1Y3R1cmUucG9zaXRpb25hbFBhcmFtZXRlcnMpIHsKICAgICAgICBfcHJvdmlkZWRQb3NpdGlvbmFsUGFyYW1ldGVycyA9IG51bGw7CiAgICAgIH0KICAgIH0KICAgIGlmIChfdW5wcm92aWRlZE5hbWVkUGFyYW1ldGVycyAhPSBudWxsICYmCiAgICAgICAgY2FsbFN0cnVjdHVyZS5uYW1lZEFyZ3VtZW50cy5pc05vdEVtcHR5KSB7CiAgICAgIGludCBfcHJvdmlkZWROYW1lZFBhcmFtZXRlcnNDb3VudCA9IF91bnByb3ZpZGVkTmFtZWRQYXJhbWV0ZXJzLmxlbmd0aDsKICAgICAgX3VucHJvdmlkZWROYW1lZFBhcmFtZXRlcnMucmVtb3ZlQWxsKGNhbGxTdHJ1Y3R1cmUubmFtZWRBcmd1bWVudHMpOwogICAgICBjaGFuZ2VkIHw9CiAgICAgICAgICBfcHJvdmlkZWROYW1lZFBhcmFtZXRlcnNDb3VudCAhPSBfdW5wcm92aWRlZE5hbWVkUGFyYW1ldGVycy5sZW5ndGg7CiAgICAgIGlmIChfdW5wcm92aWRlZE5hbWVkUGFyYW1ldGVycy5pc0VtcHR5KSB7CiAgICAgICAgX3VucHJvdmlkZWROYW1lZFBhcmFtZXRlcnMgPSBudWxsOwogICAgICB9CiAgICB9CiAgICBpZiAoIV9hcmVBbGxUeXBlUGFyYW1ldGVyc1Byb3ZpZGVkICYmIGNhbGxTdHJ1Y3R1cmUudHlwZUFyZ3VtZW50Q291bnQgPiAwKSB7CiAgICAgIF9hcmVBbGxUeXBlUGFyYW1ldGVyc1Byb3ZpZGVkID0gdHJ1ZTsKICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICB9CiAgICByZXR1cm4gY2hhbmdlZDsKICB9CgogIGJvb2wgZ2V0IGhhc0ludm9rZSA9PiBfaGFzSW52b2tlOwoKICBib29sIGdldCBpc0Z1bGx5VXNlZCA9PgogICAgICBfaGFzSW52b2tlICYmCiAgICAgIF9wcm92aWRlZFBvc2l0aW9uYWxQYXJhbWV0ZXJzID09IG51bGwgJiYKICAgICAgX3VucHJvdmlkZWROYW1lZFBhcmFtZXRlcnMgPT0gbnVsbCAmJgogICAgICBfYXJlQWxsVHlwZVBhcmFtZXRlcnNQcm92aWRlZDsKCiAgdm9pZCBmdWxseVVzZSgpIHsKICAgIF9oYXNJbnZva2UgPSB0cnVlOwogICAgX3Byb3ZpZGVkUG9zaXRpb25hbFBhcmFtZXRlcnMgPSBudWxsOwogICAgX3VucHJvdmlkZWROYW1lZFBhcmFtZXRlcnMgPSBudWxsOwogICAgX2FyZUFsbFR5cGVQYXJhbWV0ZXJzUHJvdmlkZWQgPSB0cnVlOwogIH0KCiAgUGFyYW1ldGVyU3RydWN0dXJlIGdldCBpbnZva2VkUGFyYW1ldGVycyB7CiAgICBpZiAoIV9oYXNJbnZva2UpIHJldHVybiBudWxsOwogICAgaWYgKGlzRnVsbHlVc2VkKSByZXR1cm4gX3BhcmFtZXRlclN0cnVjdHVyZTsKICAgIHJldHVybiBuZXcgUGFyYW1ldGVyU3RydWN0dXJlKAogICAgICAgIF9wYXJhbWV0ZXJTdHJ1Y3R1cmUucmVxdWlyZWRQYXJhbWV0ZXJzLAogICAgICAgIF9wcm92aWRlZFBvc2l0aW9uYWxQYXJhbWV0ZXJzID8/CiAgICAgICAgICAgIF9wYXJhbWV0ZXJTdHJ1Y3R1cmUucG9zaXRpb25hbFBhcmFtZXRlcnMsCiAgICAgICAgX3VucHJvdmlkZWROYW1lZFBhcmFtZXRlcnMgPT0gbnVsbAogICAgICAgICAgICA/IF9wYXJhbWV0ZXJTdHJ1Y3R1cmUubmFtZWRQYXJhbWV0ZXJzCiAgICAgICAgICAgIDogX3BhcmFtZXRlclN0cnVjdHVyZS5uYW1lZFBhcmFtZXRlcnMKICAgICAgICAgICAgICAgIC53aGVyZSgobikgPT4gIV91bnByb3ZpZGVkTmFtZWRQYXJhbWV0ZXJzLmNvbnRhaW5zKG4pKQogICAgICAgICAgICAgICAgLnRvTGlzdCgpLAogICAgICAgIF9hcmVBbGxUeXBlUGFyYW1ldGVyc1Byb3ZpZGVkID8gX3BhcmFtZXRlclN0cnVjdHVyZS50eXBlUGFyYW1ldGVycyA6IDApOwogIH0KCiAgUGFyYW1ldGVyVXNhZ2UgY2xvbmUoKSB7CiAgICByZXR1cm4gbmV3IFBhcmFtZXRlclVzYWdlLmNsb25lZChfcGFyYW1ldGVyU3RydWN0dXJlLAogICAgICAgIGhhc0ludm9rZTogX2hhc0ludm9rZSwKICAgICAgICBwcm92aWRlZFBvc2l0aW9uYWxQYXJhbWV0ZXJzOiBfcHJvdmlkZWRQb3NpdGlvbmFsUGFyYW1ldGVycywKICAgICAgICBhcmVBbGxUeXBlUGFyYW1ldGVyc1Byb3ZpZGVkOiBfYXJlQWxsVHlwZVBhcmFtZXRlcnNQcm92aWRlZCwKICAgICAgICB1bnByb3ZpZGVkTmFtZWRQYXJhbWV0ZXJzOiBfdW5wcm92aWRlZE5hbWVkUGFyYW1ldGVycz8udG9TZXQoKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ1BhcmFtZXRlclVzYWdlKCcKICAgICAgICAnX2hhc0ludm9rZT0kX2hhc0ludm9rZSwnCiAgICAgICAgJ19wcm92aWRlZFBvc2l0aW9uYWxQYXJhbWV0ZXJzPSRfcHJvdmlkZWRQb3NpdGlvbmFsUGFyYW1ldGVycywnCiAgICAgICAgJ19hcmVBbGxUeXBlUGFyYW1ldGVyc1Byb3ZpZGVkPSRfYXJlQWxsVHlwZVBhcmFtZXRlcnNQcm92aWRlZCwnCiAgICAgICAgJ191bnByb3ZpZGVkTmFtZWRQYXJhbWV0ZXJzPSRfdW5wcm92aWRlZE5hbWVkUGFyYW1ldGVycyknOwogIH0KfQoKLy8vIEVudW0gZm9yIG1lbWJlciBhY2Nlc3Mga2luZHMgdXNlIGluIFtNZW1iZXJVc2FnZV0gY29tcHV0YXRpb24gZHVyaW5nCi8vLyByZXNvbHV0aW9uIG9yIGNvZGVnZW4gZW5xdWV1ZWluZy4KZW51bSBBY2Nlc3MgewogIC8vLyBTdGF0aWNhbGx5IGJvdW5kIGFjY2VzcyBvZiBhIG1lbWJlci4KICBzdGF0aWNBY2Nlc3MsCgogIC8vLyBEeW5hbWljYWxseSBib3VuZCBhY2Nlc3Mgb2YgYSBtZW1iZXIuCiAgZHluYW1pY0FjY2VzcywKCiAgLy8vIERpcmVjdCBhY2Nlc3Mgb2YgYSBzdXBlciBjbGFzcyBtZW1iZXIuCiAgc3VwZXJBY2Nlc3MsCn0KCi8vLyBBY2Nlc3Mgc2V0cyB1c2VkIGZvciByZWdpc3RyYXRpb24gb2YgbWVtYmVyIHVzYWdlLgpjbGFzcyBBY2Nlc3NlcyB7CiAgLy8vIFN0YXRpY2FsbHkgYm91bmQgYWNjZXNzIG9mIGEgbWVtYmVyLgogIHN0YXRpYyBjb25zdCBFbnVtU2V0PEFjY2Vzcz4gc3RhdGljQWNjZXNzID0gY29uc3QgRW51bVNldDxBY2Nlc3M+LmZpeGVkKDEpOwoKICAvLy8gRHluYW1pY2FsbHkgYm91bmQgYWNjZXNzIG9mIGEgbWVtYmVyLiBUaGlzIGltcGxpZXMgdGhlIHN0YXRpY2FsbHkgYm91bmQKICAvLy8gYWNjZXNzIG9mIHRoZSBtZW1iZXIuCiAgc3RhdGljIGNvbnN0IEVudW1TZXQ8QWNjZXNzPiBkeW5hbWljQWNjZXNzID0gY29uc3QgRW51bVNldDxBY2Nlc3M+LmZpeGVkKDMpOwoKICAvLy8gRGlyZWN0IGFjY2VzcyBvZiBhIHN1cGVyIGNsYXNzIG1lbWJlci4gVGhpcyBpbXBsaWVzIHRoZSBzdGF0aWNhbGx5IGJvdW5kCiAgLy8vIGFjY2VzcyBvZiB0aGUgbWVtYmVyLgogIHN0YXRpYyBjb25zdCBFbnVtU2V0PEFjY2Vzcz4gc3VwZXJBY2Nlc3MgPSBjb25zdCBFbnVtU2V0PEFjY2Vzcz4uZml4ZWQoNSk7Cn0KCi8vLyBUaGUgYWNjZXNzZXMgb2YgYSBtZW1iZXIgY29sbGVjdGVkIGR1cmluZyBjbG9zZWQgd29ybGQgY29tcHV0YXRpb24uCmNsYXNzIE1lbWJlckFjY2VzcyB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnTWVtYmVyQWNjZXNzJzsKCiAgZmluYWwgRW51bVNldDxBY2Nlc3M+IHJlYWRzOwogIGZpbmFsIEVudW1TZXQ8QWNjZXNzPiB3cml0ZXM7CiAgZmluYWwgRW51bVNldDxBY2Nlc3M+IGludm9rZXM7CgogIE1lbWJlckFjY2Vzcyh0aGlzLnJlYWRzLCB0aGlzLndyaXRlcywgdGhpcy5pbnZva2VzKTsKCiAgZmFjdG9yeSBNZW1iZXJBY2Nlc3MucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIEVudW1TZXQ8QWNjZXNzPiByZWFkcyA9IG5ldyBFbnVtU2V0LmZpeGVkKHNvdXJjZS5yZWFkSW50KCkpOwogICAgRW51bVNldDxBY2Nlc3M+IHdyaXRlcyA9IG5ldyBFbnVtU2V0LmZpeGVkKHNvdXJjZS5yZWFkSW50KCkpOwogICAgRW51bVNldDxBY2Nlc3M+IGludm9rZXMgPSBuZXcgRW51bVNldC5maXhlZChzb3VyY2UucmVhZEludCgpKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgTWVtYmVyQWNjZXNzKHJlYWRzLCB3cml0ZXMsIGludm9rZXMpOwogIH0KCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUludChyZWFkcy52YWx1ZSk7CiAgICBzaW5rLndyaXRlSW50KHdyaXRlcy52YWx1ZSk7CiAgICBzaW5rLndyaXRlSW50KGludm9rZXMudmFsdWUpOwogICAgc2luay5lbmQodGFnKTsKICB9Cn0Kg2AATk48ARwBGSMkIy4fHgEiIAEqATomBAE+QQEfATAtAVEuLT02BAIBSj5QTEIBHQEvAUEiAU1QFUkeLyEISkU+LDYPRh4IBgFQKi0/BgFLMS5ABgFQNi9BBgEaISY0NjkPJjQnOQgiJzIlNyInJDQnJyVRDSc7JTI3BgQBLxwBNjgBUDsoAUoXQAE6NwE2KgFLF0EBOzgBTk48LAFQF0IBQDkBUE0VNAFMHSMhHx4BRRMmNwFMJDUBTSU2AUYjBk0NMAFOKwZNDU4BURYGSRVIAVAWSQFLIwZNQx1EFwEMQQEMJwEMHC0tIwQBFwEnJCckKCZAQkQ+LCwgIiQyNDY2BAIBMioMKAEMKQEMKgEMHwEMIAEMIQFLHBwdEhMVKCkqHyAhKgElSh8gISgpKiABDDYjNhoeBjoEAQw3JTgbHgY6BAEMHT9OTT0jQzoaHgY6BAEMGEEwMjQeICMEAQwwMDI0QkRGPlECAScnDBABDCgBDCkBDCoBDB8BDCEBDCABKQFGHBwdFBITFSgpKh8gISkBIEoZHyAhKCkqHwEMUQEMHhMeBhQ6BAEMPB4lEwQBDCgBDDYjNhoeBjoEAQwqAQw3JTgbHgY6BAEMHT9NTTwjQzoaHgY6BAEMGD4wMjQaHiAjBAEMPjAyNEJERj5QAgE3KAwoAQwqAQwfAQwhAScBQyVOKCofISwBJzQfIUooKiIBDEgBDClRAQw2JyM2SB8cHCAIOy8vITwNOyQkBgQBDB0/Jyo6HB4NGUoGBAEMUAEMJjlPAQwYIz0eMCI1BAEMLjA0KkJGPwIBRxE7CgEmFgEjFAIBLBNMMCk8KTopMSkvKQIBUQFJPTMfHgEZASIBJBodBhs/BAEiGR0GGj4EAQw3AQxIAgFGLAErEko1KDQoSQIBSwFFERdFMAFHEwFJMAZPJQFHLyYBSS8GSCoBLRhNUDMPDTgjRQYEATIXKCkuIEZGQAEtIxcaMTZREUxHKzYuCAYuM01KEU4wKwgGUSwWBhQEASQBGhQvLCUBFBcqJyoEAS0iMSMwKTYrMjJHG1EEARs6H0VFSQQBDBYdIkhIQwQCAUkmDisQASwRAS0PAgE3EStOAU4cTwFPHE0CAUgVLAEfICEBNwE/F0FCQxU1BAEoFSAhIhMEAgEvcGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2UvbWVtYmVyX3VzYWdlLmRhcnQ5c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvdW5pdmVyc2Uvd29ybGRfYnVpbGRlci5kYXJ0oUIvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSB3b3JsZF9idWlsZGVyOwoKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaXIvc3RhdGljX3R5cGUuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYXRpdmVfZGF0YS5kYXJ0JyBzaG93IE5hdGl2ZUJhc2ljRGF0YTsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JyBzaG93IFdvcmxkLCBKQ2xvc2VkV29ybGQsIE9wZW5Xb3JsZDsKaW1wb3J0ICdzZWxlY3Rvci5kYXJ0JyBzaG93IFNlbGVjdG9yOwppbXBvcnQgJ3VzZS5kYXJ0JyBzaG93IER5bmFtaWNVc2UsIFN0YXRpY1VzZTsKCi8vLyBUaGUgY29tYmluZWQgY29uc3RyYWludHMgb24gcmVjZWl2ZXJzIGFsbCB0aGUgZHluYW1pYyBjYWxsIHNpdGVzIG9mIHRoZSBzYW1lCi8vLyBzZWxlY3Rvci4KLy8vCi8vLyBGb3IgaW5zdGFuY2UgZm9yIHRoZXNlIGNhbGxzCi8vLwovLy8gICAgIGNsYXNzIEEgewovLy8gICAgICAgIGZvbyhhLCBiKSB7fQovLy8gICAgIH0KLy8vICAgICBjbGFzcyBCIHsKLy8vICAgICAgICBmb28oYSwgYikge30KLy8vICAgICB9Ci8vLyAgICAgY2xhc3MgQyB7Ci8vLyAgICAgICAgZm9vKGEsIGIpIHt9Ci8vLyAgICAgfQovLy8gICAgIG5ldyBBKCkuZm9vKGEsIGIpOwovLy8gICAgIG5ldyBCKCkuZm9vKDAsIDQyKTsKLy8vCi8vLyB0aGUgc2VsZWN0b3IgY29uc3RyYWludHMgZm9yIGR5bmFtaWMgY2FsbHMgdG8gJ2Zvbycgd2l0aCB0d28gcG9zaXRpb25hbAovLy8gYXJndW1lbnRzIGNvdWxkIGJlICdyZWNlaXZlciBvZiBleGFjdCBpbnN0YW5jZSBgQWAgb3IgYEJgJy4KYWJzdHJhY3QgY2xhc3MgU2VsZWN0b3JDb25zdHJhaW50cyB7CiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtuYW1lXSBhcHBsaWVzIHRvIFtlbGVtZW50XSB1bmRlciB0aGVzZSBjb25zdHJhaW50cwogIC8vLyBnaXZlbiB0aGUgY2xvc2VkIFt3b3JsZF0uCiAgLy8vCiAgLy8vIENvbnNpZGVyIGZvciBpbnN0YW5jZSBpbiB0aGlzIHdvcmxkOgogIC8vLwogIC8vLyAgICAgY2xhc3MgQSB7CiAgLy8vICAgICAgICBmb28oYSwgYikge30KICAvLy8gICAgIH0KICAvLy8gICAgIGNsYXNzIEIgewogIC8vLyAgICAgICAgZm9vKGEsIGIpIHt9CiAgLy8vICAgICB9CiAgLy8vICAgICBuZXcgQSgpLmZvbyhhLCBiKTsKICAvLy8KICAvLy8gSWRlYWxseSB0aGUgc2VsZWN0b3IgY29uc3RyYWludHMgZm9yIGNhbGxzIGBmb29gIHdpdGggdHdvIHBvc2l0aW9uYWwKICAvLy8gYXJndW1lbnRzIGFwcGx5IHRvIGBBLmZvb2AgYnV0IGBCLmZvb2AuCiAgYm9vbCBjYW5IaXQoTWVtYmVyRW50aXR5IGVsZW1lbnQsIE5hbWUgbmFtZSwgY292YXJpYW50IFdvcmxkIHdvcmxkKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgcmVjZWl2ZXJzIG1hdGNoaW5nIHRoZXNlIGNvbnN0cmFpbnRzCiAgLy8vIGluIHRoZSBjbG9zZWQgW3dvcmxkXSBoYXZlIG5vIGltcGxlbWVudGF0aW9uIG1hdGNoaW5nIFtzZWxlY3Rvcl0uCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBmb3IgdGhpcyBjb2RlIHNuaXBwZXQKICAvLy8KICAvLy8gICAgIGNsYXNzIEEge30KICAvLy8gICAgIGNsYXNzIEIgeyBmb28oKSB7fSB9CiAgLy8vICAgICBtKGIpID0+IChiID8gbmV3IEEoKSA6IG5ldyBCKCkpLmZvbygpOwogIC8vLwogIC8vLyB0aGUgcG90ZW50aWFsIHJlY2VpdmVyIGBuZXcgQSgpYCBoYXMgbm8gaW1wbGVtZW50YXRpb24gb2YgYGZvb2AgYW5kIHRodXMKICAvLy8gbmVlZHMgdG8gaGFuZGxlIHRoZSBjYWxsIHRocm91Z2ggaXRzIGBub1N1Y2hNZXRob2RgIGhhbmRsZXIuCiAgYm9vbCBuZWVkc05vU3VjaE1ldGhvZEhhbmRsaW5nKFNlbGVjdG9yIHNlbGVjdG9yLCBjb3ZhcmlhbnQgV29ybGQgd29ybGQpOwp9CgovLy8gQSBtdXRhYmxlIFtTZWxlY3RvckNvbnN0cmFpbnRzXSB1c2VkIGluIFtXb3JsZEJ1aWxkZXJdLgphYnN0cmFjdCBjbGFzcyBVbml2ZXJzZVNlbGVjdG9yQ29uc3RyYWludHMgZXh0ZW5kcyBTZWxlY3RvckNvbnN0cmFpbnRzIHsKICAvLy8gQWRkcyBbY29uc3RyYWludF0gdG8gdGhlc2Ugc2VsZWN0b3IgY29uc3RyYWludHMuIFJldHVybiBgdHJ1ZWAgaWYgdGhlIHNldAogIC8vLyBvZiBwb3RlbnRpYWwgcmVjZWl2ZXJzIGV4cGFuZGVkIGR1ZSB0byB0aGUgbmV3IGNvbnN0cmFpbnQuCiAgYm9vbCBhZGRSZWNlaXZlckNvbnN0cmFpbnQoY292YXJpYW50IE9iamVjdCBjb25zdHJhaW50KTsKfQoKLy8vIFN0cmF0ZWd5IGZvciBjb21wdXRpbmcgdGhlIGNvbnN0cmFpbnRzIG9uIHBvdGVudGlhbCByZWNlaXZlcnMgb2YgZHluYW1pYwovLy8gY2FsbCBzaXRlcy4KYWJzdHJhY3QgY2xhc3MgU2VsZWN0b3JDb25zdHJhaW50c1N0cmF0ZWd5IHsKICAvLy8gQ3JlYXRlIGEgW1VuaXZlcnNlU2VsZWN0b3JDb25zdHJhaW50c10gdG8gcmVwcmVzZW50IHRoZSBnbG9iYWwgcmVjZWl2ZXIKICAvLy8gY29uc3RyYWludHMgZm9yIGR5bmFtaWMgY2FsbCBzaXRlcyB3aXRoIFtzZWxlY3Rvcl0uCiAgVW5pdmVyc2VTZWxlY3RvckNvbnN0cmFpbnRzIGNyZWF0ZVNlbGVjdG9yQ29uc3RyYWludHMoCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLCBPYmplY3QgaW5pdGlhbENvbnN0cmFpbnQpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgIGlmIFttZW1iZXJdIGlzIGEgcG90ZW50aWFsIHRhcmdldCBvZiBbZHluYW1pY1VzZV0uCiAgYm9vbCBhcHBsaWVkVW5uYW1lZChEeW5hbWljVXNlIGR5bmFtaWNVc2UsIE1lbWJlckVudGl0eSBtZW1iZXIsIFdvcmxkIHdvcmxkKTsKfQoKLy8vIE9wZW4gd29ybGQgc3RyYXRlZ3kgdGhhdCBjb25zdHJhaW5zIGluc3RhbmNlIG1lbWJlciBhY2Nlc3MgdG8gc3VidHlwZXMgb2YKLy8vIHRoZSBzdGF0aWMgdHlwZSBvZiB0aGUgcmVjZWl2ZXIuCi8vLwovLy8gVGhpcyBzdHJhdGVneSBpcyB1c2VkIGZvciBEYXJ0IDIuCmNsYXNzIFN0cm9uZ01vZGVXb3JsZFN0cmF0ZWd5IGltcGxlbWVudHMgU2VsZWN0b3JDb25zdHJhaW50c1N0cmF0ZWd5IHsKICBjb25zdCBTdHJvbmdNb2RlV29ybGRTdHJhdGVneSgpOwoKICBAb3ZlcnJpZGUKICBTdHJvbmdNb2RlV29ybGRDb25zdHJhaW50cyBjcmVhdGVTZWxlY3RvckNvbnN0cmFpbnRzKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgT2JqZWN0IGluaXRpYWxDb25zdHJhaW50KSB7CiAgICByZXR1cm4gbmV3IFN0cm9uZ01vZGVXb3JsZENvbnN0cmFpbnRzKCkKICAgICAgLi5hZGRSZWNlaXZlckNvbnN0cmFpbnQoaW5pdGlhbENvbnN0cmFpbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBhcHBsaWVkVW5uYW1lZCgKICAgICAgRHluYW1pY1VzZSBkeW5hbWljVXNlLCBNZW1iZXJFbnRpdHkgbWVtYmVyLCBjb3ZhcmlhbnQgT3BlbldvcmxkIHdvcmxkKSB7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IGR5bmFtaWNVc2Uuc2VsZWN0b3I7CiAgICBTdHJvbmdNb2RlQ29uc3RyYWludCBjb25zdHJhaW50ID0gZHluYW1pY1VzZS5yZWNlaXZlckNvbnN0cmFpbnQ7CiAgICByZXR1cm4gc2VsZWN0b3IuYXBwbGllc1VubmFtZWQobWVtYmVyKSAmJgogICAgICAgIChjb25zdHJhaW50ID09IG51bGwgfHwKICAgICAgICAgICAgY29uc3RyYWludC5jYW5IaXQobWVtYmVyLCBzZWxlY3Rvci5tZW1iZXJOYW1lLCB3b3JsZCkpOwogIH0KfQoKY2xhc3MgU3Ryb25nTW9kZVdvcmxkQ29uc3RyYWludHMgZXh0ZW5kcyBVbml2ZXJzZVNlbGVjdG9yQ29uc3RyYWludHMgewogIGJvb2wgaXNBbGwgPSBmYWxzZTsKICBTZXQ8U3Ryb25nTW9kZUNvbnN0cmFpbnQ+IF9jb25zdHJhaW50czsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5IaXQoTWVtYmVyRW50aXR5IGVsZW1lbnQsIE5hbWUgbmFtZSwgV29ybGQgd29ybGQpIHsKICAgIGlmIChpc0FsbCkgcmV0dXJuIHRydWU7CiAgICBpZiAoX2NvbnN0cmFpbnRzID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIGZvciAoU3Ryb25nTW9kZUNvbnN0cmFpbnQgY29uc3RyYWludCBpbiBfY29uc3RyYWludHMpIHsKICAgICAgaWYgKGNvbnN0cmFpbnQuY2FuSGl0KGVsZW1lbnQsIG5hbWUsIHdvcmxkKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG5lZWRzTm9TdWNoTWV0aG9kSGFuZGxpbmcoU2VsZWN0b3Igc2VsZWN0b3IsIFdvcmxkIHdvcmxkKSB7CiAgICBpZiAoaXNBbGwpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoX2NvbnN0cmFpbnRzICE9IG51bGwpIHsKICAgICAgZm9yIChTdHJvbmdNb2RlQ29uc3RyYWludCBjb25zdHJhaW50IGluIF9jb25zdHJhaW50cykgewogICAgICAgIGlmIChjb25zdHJhaW50Lm5lZWRzTm9TdWNoTWV0aG9kSGFuZGxpbmcoc2VsZWN0b3IsIHdvcmxkKSkgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGFkZFJlY2VpdmVyQ29uc3RyYWludChTdHJvbmdNb2RlQ29uc3RyYWludCBjb25zdHJhaW50KSB7CiAgICBpZiAoaXNBbGwpIHJldHVybiBmYWxzZTsKICAgIGlmIChjb25zdHJhaW50Py5jbHMgPT0gbnVsbCkgewogICAgICBpc0FsbCA9IHRydWU7CiAgICAgIF9jb25zdHJhaW50cyA9IG51bGw7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgX2NvbnN0cmFpbnRzID8/PSBuZXcgU2V0PFN0cm9uZ01vZGVDb25zdHJhaW50PigpOwogICAgcmV0dXJuIF9jb25zdHJhaW50cy5hZGQoY29uc3RyYWludCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBpZiAoaXNBbGwpIHsKICAgICAgcmV0dXJuICc8YWxsPic7CiAgICB9IGVsc2UgaWYgKF9jb25zdHJhaW50cyAhPSBudWxsKSB7CiAgICAgIHJldHVybiAnPCR7X2NvbnN0cmFpbnRzLm1hcCgoYykgPT4gYy5jbHMpLmpvaW4oJywnKX0+JzsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAnPG5vbmU+JzsKICAgIH0KICB9Cn0KCmNsYXNzIFN0cm9uZ01vZGVDb25zdHJhaW50IHsKICBmaW5hbCBDbGFzc0VudGl0eSBjbHM7CiAgZmluYWwgQ2xhc3NSZWxhdGlvbiByZWxhdGlvbjsKCiAgZmFjdG9yeSBTdHJvbmdNb2RlQ29uc3RyYWludChDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgTmF0aXZlQmFzaWNEYXRhIG5hdGl2ZUJhc2ljRGF0YSwgQ2xhc3NFbnRpdHkgY2xzLAogICAgICBbQ2xhc3NSZWxhdGlvbiByZWxhdGlvbiA9IENsYXNzUmVsYXRpb24uc3VidHlwZV0pIHsKICAgIGlmIChuYXRpdmVCYXNpY0RhdGEuaXNKc0ludGVyb3BDbGFzcyhjbHMpKSB7CiAgICAgIC8vIFdlIGNhbiBub3QgdGVsbCBqcy1pbnRlcm9wIGNsYXNzZXMgYXBhcnQsIHNvIHdlIGp1c3QgYXNzdW1lIHRoZQogICAgICAvLyByZWNlaXZlciBjb3VsZCBiZSBhbnkganMtaW50ZXJvcCBjbGFzcy4KICAgICAgY2xzID0gY29tbW9uRWxlbWVudHMuanNKYXZhU2NyaXB0T2JqZWN0Q2xhc3M7CiAgICAgIHJlbGF0aW9uID0gQ2xhc3NSZWxhdGlvbi5zdWJ0eXBlOwogICAgfQogICAgcmV0dXJuIG5ldyBTdHJvbmdNb2RlQ29uc3RyYWludC5pbnRlcm5hbChjbHMsIHJlbGF0aW9uKTsKICB9CgogIGNvbnN0IFN0cm9uZ01vZGVDb25zdHJhaW50LmludGVybmFsKHRoaXMuY2xzLCB0aGlzLnJlbGF0aW9uKTsKCiAgYm9vbCBuZWVkc05vU3VjaE1ldGhvZEhhbmRsaW5nKFNlbGVjdG9yIHNlbGVjdG9yLCBXb3JsZCB3b3JsZCkgPT4gdHJ1ZTsKCiAgYm9vbCBjYW5IaXQoTWVtYmVyRW50aXR5IGVsZW1lbnQsIE5hbWUgbmFtZSwgT3BlbldvcmxkIHdvcmxkKSB7CiAgICByZXR1cm4gd29ybGQuaXNJbmhlcml0ZWRJbihlbGVtZW50LCBjbHMsIHJlbGF0aW9uKTsKICB9CgogIGJvb2wgZ2V0IGlzRXhhY3QgPT4gcmVsYXRpb24gPT0gQ2xhc3NSZWxhdGlvbi5leGFjdDsKCiAgYm9vbCBnZXQgaXNUaGlzID0+IHJlbGF0aW9uID09IENsYXNzUmVsYXRpb24udGhpc0V4cHJlc3Npb247CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gb3RoZXIgaXMgU3Ryb25nTW9kZUNvbnN0cmFpbnQgJiYKICAgICAgICBjbHMgPT0gb3RoZXIuY2xzICYmCiAgICAgICAgcmVsYXRpb24gPT0gb3RoZXIucmVsYXRpb247CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IGNscy5oYXNoQ29kZSAqIDEzOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnU3Ryb25nTW9kZUNvbnN0cmFpbnQoJGNscywkcmVsYXRpb24pJzsKfQoKLy8vIFRoZSBbV29ybGRCdWlsZGVyXSBpcyBhbiBhdXhpbGlhcnkgY2xhc3MgdXNlZCBpbiB0aGUgcHJvY2VzcyBvZiBjb21wdXRpbmcKLy8vIHRoZSBbSkNsb3NlZFdvcmxkXS4KLy8gVE9ETyhqb2hubml3aW50aGVyKTogTW92ZSBjb21tb24gaW1wbGVtZW50YXRpb24gdG8gYSBbV29ybGRCdWlsZGVyQmFzZV0gd2hlbgovLyB1bml2ZXJzZXMgYW5kIHdvcmxkcyBoYXZlIGJlZW4gdW5pZmllZC4KYWJzdHJhY3QgY2xhc3MgV29ybGRCdWlsZGVyIHsKICAvLy8gQWxsIGRpcmVjdGx5IGluc3RhbnRpYXRlZCBjbGFzc2VzLCB0aGF0IGlzLCBjbGFzc2VzIHdpdGggYSBnZW5lcmF0aXZlCiAgLy8vIGNvbnN0cnVjdG9yIHRoYXQgaGFzIGJlZW4gY2FsbGVkIGRpcmVjdGx5IGFuZCBub3Qgb25seSB0aHJvdWdoIGEKICAvLy8gc3VwZXItY2FsbC4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJbXByb3ZlIHNlbWFudGljIHByZWNpc2lvbi4KICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gZ2V0IGRpcmVjdGx5SW5zdGFudGlhdGVkQ2xhc3NlczsKfQoKYWJzdHJhY3QgY2xhc3MgV29ybGRCdWlsZGVyQmFzZSB7CiAgZmluYWwgTWFwPEVudGl0eSwgU2V0PERhcnRUeXBlPj4gc3RhdGljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzID0KICAgICAgPEVudGl0eSwgU2V0PERhcnRUeXBlPj57fTsKCiAgZmluYWwgTWFwPFNlbGVjdG9yLCBTZXQ8RGFydFR5cGU+PiBkeW5hbWljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzID0KICAgICAgPFNlbGVjdG9yLCBTZXQ8RGFydFR5cGU+Pnt9OwoKICBmaW5hbCBTZXQ8VHlwZVZhcmlhYmxlVHlwZT4gdHlwZVZhcmlhYmxlVHlwZUxpdGVyYWxzID0KICAgICAgbmV3IFNldDxUeXBlVmFyaWFibGVUeXBlPigpOwoKICB2b2lkIF9yZWdpc3RlclN0YXRpY1R5cGVBcmd1bWVudERlcGVuZGVuY3koCiAgICAgIEVudGl0eSBlbGVtZW50LCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICBzdGF0aWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXMucHV0SWZBYnNlbnQoCiAgICAgICAgZWxlbWVudCwgKCkgPT4gbmV3IFNldDxEYXJ0VHlwZT4oKSkKICAgICAgLi5hZGRBbGwodHlwZUFyZ3VtZW50cyk7CiAgfQoKICB2b2lkIF9yZWdpc3RlckR5bmFtaWNUeXBlQXJndW1lbnREZXBlbmRlbmN5KAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgZHluYW1pY1R5cGVBcmd1bWVudERlcGVuZGVuY2llcy5wdXRJZkFic2VudCgKICAgICAgICBzZWxlY3RvciwgKCkgPT4gbmV3IFNldDxEYXJ0VHlwZT4oKSkKICAgICAgLi5hZGRBbGwodHlwZUFyZ3VtZW50cyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyU3RhdGljSW52b2NhdGlvbihTdGF0aWNVc2Ugc3RhdGljVXNlKSB7CiAgICBpZiAoc3RhdGljVXNlLnR5cGVBcmd1bWVudHMgPT0gbnVsbCB8fCBzdGF0aWNVc2UudHlwZUFyZ3VtZW50cy5pc0VtcHR5KSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIF9yZWdpc3RlclN0YXRpY1R5cGVBcmd1bWVudERlcGVuZGVuY3koCiAgICAgICAgc3RhdGljVXNlLmVsZW1lbnQsIHN0YXRpY1VzZS50eXBlQXJndW1lbnRzKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJEeW5hbWljSW52b2NhdGlvbigKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIGlmICh0eXBlQXJndW1lbnRzLmlzRW1wdHkpIHJldHVybjsKICAgIF9yZWdpc3RlckR5bmFtaWNUeXBlQXJndW1lbnREZXBlbmRlbmN5KHNlbGVjdG9yLCB0eXBlQXJndW1lbnRzKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJUeXBlVmFyaWFibGVUeXBlTGl0ZXJhbChUeXBlVmFyaWFibGVUeXBlIHR5cGVWYXJpYWJsZSkgewogICAgdHlwZVZhcmlhYmxlVHlwZUxpdGVyYWxzLmFkZCh0eXBlVmFyaWFibGUpOwogIH0KfQqBCQBOTjwBFwEiJCEhIT48Ji4BUQ4EIQQSGAoSGAoSGAobHARMQCVMIAYrBhQaDBQaDB0GSy5HAVFIBikGFR8xBk9DTAIBPElQQTsCAU0QLU46OTQBSVACAU4lBCZHIwEMODUsMgQBDBdPLUUuH0QEAgFHFioBDD4cLDw1FQgGEgQBDEMREwYgPkUXCggGEgQBDEAdIxQbEwY2KQQBDBYRFic+DRcGBAIBHRkgAT44OjFJMTQoBj0EAUABSgFCOAQBNwE/AQwjLSwcJAQBDCkBDD8CAU4YUCseTEcSNjkCASJEIQFHIwE5IwEuNjAsHwQBLzkxLR8EATdODgYrNQQBIjknRQQBSDAEAgEwcGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2Uvd29ybGRfYnVpbGRlci5kYXJ0RXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2JhY2tlbmQvbm9fc3VjaF9tZXRob2RfcmVnaXN0cnkuZGFydKuKLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IENvbW1vbkVsZW1lbnRzOwppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JyBzaG93IElkZW50aWZpZXJzLCBTZWxlY3RvcnM7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwoKLy8vIFtOb1N1Y2hNZXRob2RSZWdpc3RyeV0gYW5kIFtOb1N1Y2hNZXRob2REYXRhXSBjYXRlZ29yaXplcyBgbm9TdWNoTWV0aG9kYAovLy8gaW1wbGVtZW50YXRpb25zLgovLy8KLy8vIElmIHVzZXIgY29kZSBpbmNsdWRlcyBgbm9TdWNoTWV0aG9kYCBpbXBsZW1lbnRhdGlvbnMsIHR5cGUgaW5mZXJlbmNlIGlzCi8vLyBoaW5kZXJlZCBiZWNhdXNlIChmb3IgaW5zdGFuY2UpIGFueSBzZWxlY3RvciB3aGVyZSB0aGUgdHlwZSBvZiB0aGUKLy8vIHJlY2VpdmVyIGlzIG5vdCBrbm93biBhbGwgaW1wbGVtZW50YXRpb25zIG9mIGBub1N1Y2hNZXRob2RgIG11c3QgYmUgdGFrZW4KLy8vIGludG8gYWNjb3VudCB3aGVuIGluZmVycmluZyB0aGUgcmV0dXJuIHR5cGUuCi8vLwovLy8gVGhlIHNpdHVhdGlvbiBjYW4gYmUgYW1lbGlvcmF0ZWQgd2l0aCBzb21lIGhldXJpc3RpY3MgZm9yIGRpc3JlZ2FyZGluZyBzb21lCi8vLyBgbm9TdWNoTWV0aG9kYCBpbXBsZW1lbnRhdGlvbnMgZHVyaW5nIHR5cGUgaW5mZXJlbmNlLiBXZSBjYW4gcGFydGl0aW9uCi8vLyBgbm9TdWNoTWV0aG9kYCBpbXBsZW1lbnRhdGlvbnMgaW50byA0IGNhdGVnb3JpZXMuCi8vLwovLy8gSW1wbGVtZW50YXRpb25zIGluIGNhdGVnb3J5IEEgYXJlIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9ucwovLy8gYE9iamVjdC5ub1N1Y2hNZXRob2RgIGFuZCBgSW50ZXJjZXB0b3Iubm9TdWNoTWV0aG9kYC4KLy8vCi8vLyBJbXBsZW1lbnRhdGlvbnMgaW4gY2F0ZWdvcnkgQiBzeW50YWN0aWNhbGx5IGltbWVkaWF0ZWx5IHRocm93LCBmb3IgZXhhbXBsZToKLy8vCi8vLyAgICAgbm9TdWNoTWV0aG9kKHgpID0+IHRocm93ICdub3QgaW1wbGVtZW50ZWQnCi8vLwovLy8gSW1wbGVtZW50YXRpb25zIGluIGNhdGVnb3J5IEMgYXJlIG5vdCBhcHBsaWNhYmxlLCBmb3IgZXhhbXBsZToKLy8vCi8vLyAgICAgbm9TdWNoTWV0aG9kKCkgeyAvKiBtaXNzaW5nIHBhcmFtZXRlciAqLyB9Ci8vLyAgICAgbm9TdWNoTWV0aG9kKGEsIGIpIHsgLyogdG9vIG1hbnkgcGFyYW1ldGVycyAqLyB9Ci8vLwovLy8gSW1wbGVtZW50YXRpb25zIHRoYXQgZG8gbm90IGZhbGwgaW50byBjYXRlZ29yeSBBLCBCIG9yIEMgYXJlIGluIGNhdGVnb3J5IEQuCi8vLyBUaGV5IGFyZSB0aGUgb25seSBjYXRlZ29yeSBvZiBpbXBsZW1lbnRhdGlvbiB0aGF0IGFyZSBjb25zaWRlcmVkIGR1cmluZyB0eXBlCi8vLyBpbmZlcmVuY2UuCi8vLwovLy8gSW1wbGVtZW50YXRpb25zIHRoYXQgc3ludGFjdGljYWxseSBqdXN0IGZvcndhcmQgdG8gdGhlIHN1cGVyIGltcGxlbWVudGF0aW9uLAovLy8gZm9yIGV4YW1wbGU6Ci8vLwovLy8gICAgIG5vU3VjaE1ldGhvZCh4KSA9PiBzdXBlci5ub1N1Y2hNZXRob2QoeCk7Ci8vLwovLy8gYXJlIGluIHRoZSBzYW1lIGNhdGVnb3J5IGFzIHRoZSBzdXBlcmNsYXNzIGltcGxlbWVudGF0aW9uLiBUaGlzIGNvdmVycyBhCi8vLyBjb21tb24gY2FzZSwgd2hlcmUgdXNlcnMgaW1wbGVtZW50IGBub1N1Y2hNZXRob2RgIHdpdGggdGhlc2UgZHVtbXkKLy8vIGltcGxlbWVudGF0aW9ucyB0byBhdm9pZCB3YXJuaW5ncy4KCi8vLyBSZWdpc3RyeSBmb3IgY29sbGVjdGluZyBgbm9TdWNoTWV0aG9kYCBpbXBsZW1lbnRhdGlvbnMgYW5kIGNhdGVnb3JpemluZyB0aGVtCi8vLyBpbnRvIGNhdGVnb3JpZXMgYEFgLCBgQmAsIGBDYCwgYERgLgphYnN0cmFjdCBjbGFzcyBOb1N1Y2hNZXRob2RSZWdpc3RyeSB7CiAgLy8vIFJlZ2lzdGVyIFtub1N1Y2hNZXRob2RFbGVtZW50XS4KICB2b2lkIHJlZ2lzdGVyTm9TdWNoTWV0aG9kKEZ1bmN0aW9uRW50aXR5IG5vU3VjaE1ldGhvZEVsZW1lbnQpOwoKICAvLy8gQ2F0ZWdvcml6ZXMgdGhlIHJlZ2lzdGVyZWQgbWV0aG9kcy4KICB2b2lkIG9uUXVldWVFbXB0eSgpOwoKICAvLy8gYHRydWVgIGlmIGEgY2F0ZWdvcnkgYEJgIG1ldGhvZCBoYXMgYmVlbiBzZWVuIHNvIGZhci4KICBib29sIGdldCBoYXNUaHJvd2luZ05vU3VjaE1ldGhvZDsKCiAgLy8vIGB0cnVlYCBpZiBhIGNhdGVnb3J5IGBEYCBtZXRob2QgaGFzIGJlZW4gc2VlbiBzbyBmYXIuCiAgYm9vbCBnZXQgaGFzQ29tcGxleE5vU3VjaE1ldGhvZDsKCiAgLy8vIENsb3NlcyB0aGUgcmVnaXN0cnkgYW5kIHJldHVybnMgZGF0YSBvYmplY3QgdXNlZCBkdXJpbmcgdHlwZSBpbmZlcmVuY2UuCiAgTm9TdWNoTWV0aG9kRGF0YSBjbG9zZSgpOwp9CgpjbGFzcyBOb1N1Y2hNZXRob2RSZWdpc3RyeUltcGwgaW1wbGVtZW50cyBOb1N1Y2hNZXRob2RSZWdpc3RyeSB7CiAgLy8vIFRoZSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBmYWxsIGludG8gY2F0ZWdvcnkgQSwgZGVzY3JpYmVkIGFib3ZlLgogIGZpbmFsIFNldDxGdW5jdGlvbkVudGl0eT4gZGVmYXVsdEltcGxzID0gbmV3IFNldDxGdW5jdGlvbkVudGl0eT4oKTsKCiAgLy8vIFRoZSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBmYWxsIGludG8gY2F0ZWdvcnkgQiwgZGVzY3JpYmVkIGFib3ZlLgogIGZpbmFsIFNldDxGdW5jdGlvbkVudGl0eT4gdGhyb3dpbmdJbXBscyA9IG5ldyBTZXQ8RnVuY3Rpb25FbnRpdHk+KCk7CgogIC8vLyBUaGUgaW1wbGVtZW50YXRpb25zIHRoYXQgZmFsbCBpbnRvIGNhdGVnb3J5IEMsIGRlc2NyaWJlZCBhYm92ZS4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhpcyBjYXRlZ29yeSB3aGVuIERhcnQgMSBpcyBubyBsb25nZXIKICAvLyBzdXBwb3J0ZWQuCiAgZmluYWwgU2V0PEZ1bmN0aW9uRW50aXR5PiBub3RBcHBsaWNhYmxlSW1wbHMgPSBuZXcgU2V0PEZ1bmN0aW9uRW50aXR5PigpOwoKICAvLy8gVGhlIGltcGxlbWVudGF0aW9ucyB0aGF0IGZhbGwgaW50byBjYXRlZ29yeSBELCBkZXNjcmliZWQgYWJvdmUuCiAgZmluYWwgU2V0PEZ1bmN0aW9uRW50aXR5PiBvdGhlckltcGxzID0gbmV3IFNldDxGdW5jdGlvbkVudGl0eT4oKTsKCiAgLy8vIFRoZSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbiBjYXRlZ29yaXplZC4KICBmaW5hbCBTZXQ8RnVuY3Rpb25FbnRpdHk+IF91bmNhdGVnb3JpemVkSW1wbHMgPSBuZXcgU2V0PEZ1bmN0aW9uRW50aXR5PigpOwoKICAvLy8gVGhlIGltcGxlbWVudGF0aW9ucyB0aGF0IGEgZm9yd2FyZGluZyBzeW50YXggYXMgZGVmaW5lZCBieQogIC8vLyBbTm9TdWNoTWV0aG9kUmVzb2x2ZXIuaGFzRm9yd2FyZFN5bnRheF0uCiAgZmluYWwgU2V0PEZ1bmN0aW9uRW50aXR5PiBmb3J3YXJkaW5nU3ludGF4SW1wbHMgPSBuZXcgU2V0PEZ1bmN0aW9uRW50aXR5PigpOwoKICBmaW5hbCBDb21tb25FbGVtZW50cyBfY29tbW9uRWxlbWVudHM7CiAgZmluYWwgTm9TdWNoTWV0aG9kUmVzb2x2ZXIgX3Jlc29sdmVyOwoKICBOb1N1Y2hNZXRob2RSZWdpc3RyeUltcGwodGhpcy5fY29tbW9uRWxlbWVudHMsIHRoaXMuX3Jlc29sdmVyKTsKCiAgTm9TdWNoTWV0aG9kUmVzb2x2ZXIgZ2V0IGludGVybmFsUmVzb2x2ZXJGb3JUZXN0aW5nID0+IF9yZXNvbHZlcjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaGFzVGhyb3dpbmdOb1N1Y2hNZXRob2QgPT4gdGhyb3dpbmdJbXBscy5pc05vdEVtcHR5OwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGhhc0NvbXBsZXhOb1N1Y2hNZXRob2QgPT4gb3RoZXJJbXBscy5pc05vdEVtcHR5OwoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTm9TdWNoTWV0aG9kKEZ1bmN0aW9uRW50aXR5IG5vU3VjaE1ldGhvZEVsZW1lbnQpIHsKICAgIF91bmNhdGVnb3JpemVkSW1wbHMuYWRkKG5vU3VjaE1ldGhvZEVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBvblF1ZXVlRW1wdHkoKSB7CiAgICBfdW5jYXRlZ29yaXplZEltcGxzLmZvckVhY2goX2NhdGVnb3JpemVJbXBsKTsKICAgIF91bmNhdGVnb3JpemVkSW1wbHMuY2xlYXIoKTsKICB9CgogIE5zbUNhdGVnb3J5IF9jYXRlZ29yaXplSW1wbChGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoZWxlbWVudC5uYW1lID09IElkZW50aWZpZXJzLm5vU3VjaE1ldGhvZF8pOwogICAgYXNzZXJ0KCFlbGVtZW50LmlzQWJzdHJhY3QpOwogICAgaWYgKGRlZmF1bHRJbXBscy5jb250YWlucyhlbGVtZW50KSkgewogICAgICByZXR1cm4gTnNtQ2F0ZWdvcnkuREVGQVVMVDsKICAgIH0KICAgIGlmICh0aHJvd2luZ0ltcGxzLmNvbnRhaW5zKGVsZW1lbnQpKSB7CiAgICAgIHJldHVybiBOc21DYXRlZ29yeS5USFJPV0lORzsKICAgIH0KICAgIGlmIChvdGhlckltcGxzLmNvbnRhaW5zKGVsZW1lbnQpKSB7CiAgICAgIHJldHVybiBOc21DYXRlZ29yeS5PVEhFUjsKICAgIH0KICAgIGlmIChub3RBcHBsaWNhYmxlSW1wbHMuY29udGFpbnMoZWxlbWVudCkpIHsKICAgICAgcmV0dXJuIE5zbUNhdGVnb3J5Lk5PVF9BUFBMSUNBQkxFOwogICAgfQogICAgaWYgKCFTZWxlY3RvcnMubm9TdWNoTWV0aG9kXy5zaWduYXR1cmVBcHBsaWVzKGVsZW1lbnQpKSB7CiAgICAgIG5vdEFwcGxpY2FibGVJbXBscy5hZGQoZWxlbWVudCk7CiAgICAgIHJldHVybiBOc21DYXRlZ29yeS5OT1RfQVBQTElDQUJMRTsKICAgIH0KICAgIGlmIChfY29tbW9uRWxlbWVudHMuaXNEZWZhdWx0Tm9TdWNoTWV0aG9kSW1wbGVtZW50YXRpb24oZWxlbWVudCkpIHsKICAgICAgZGVmYXVsdEltcGxzLmFkZChlbGVtZW50KTsKICAgICAgcmV0dXJuIE5zbUNhdGVnb3J5LkRFRkFVTFQ7CiAgICB9IGVsc2UgaWYgKF9yZXNvbHZlci5oYXNGb3J3YXJkaW5nU3ludGF4KGVsZW1lbnQpKSB7CiAgICAgIGZvcndhcmRpbmdTeW50YXhJbXBscy5hZGQoZWxlbWVudCk7CiAgICAgIC8vIElmIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyAnbm9TdWNoTWV0aG9kKHgpID0+IHN1cGVyLm5vU3VjaE1ldGhvZCh4KTsnCiAgICAgIC8vIHRoZW4gaXQgaXMgaW4gdGhlIHNhbWUgY2F0ZWdvcnkgYXMgdGhlIHN1cGVyIGNhbGwuCiAgICAgIEZ1bmN0aW9uRW50aXR5IHN1cGVyQ2FsbCA9IF9yZXNvbHZlci5nZXRTdXBlck5vU3VjaE1ldGhvZChlbGVtZW50KTsKICAgICAgTnNtQ2F0ZWdvcnkgY2F0ZWdvcnkgPSBfY2F0ZWdvcml6ZUltcGwoc3VwZXJDYWxsKTsKICAgICAgc3dpdGNoIChjYXRlZ29yeSkgewogICAgICAgIGNhc2UgTnNtQ2F0ZWdvcnkuREVGQVVMVDoKICAgICAgICAgIGRlZmF1bHRJbXBscy5hZGQoZWxlbWVudCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIE5zbUNhdGVnb3J5LlRIUk9XSU5HOgogICAgICAgICAgdGhyb3dpbmdJbXBscy5hZGQoZWxlbWVudCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIE5zbUNhdGVnb3J5Lk9USEVSOgogICAgICAgICAgb3RoZXJJbXBscy5hZGQoZWxlbWVudCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIE5zbUNhdGVnb3J5Lk5PVF9BUFBMSUNBQkxFOgogICAgICAgICAgLy8gSWYgdGhlIHN1cGVyIG1ldGhvZCBpcyBub3QgYXBwbGljYWJsZSwgdGhlIGNhbGwgaXMgcmVkaXJlY3RlZCB0bwogICAgICAgICAgLy8gYE9iamVjdC5ub1N1Y2hNZXRob2RgLgogICAgICAgICAgZGVmYXVsdEltcGxzLmFkZChlbGVtZW50KTsKICAgICAgICAgIGNhdGVnb3J5ID0gTnNtQ2F0ZWdvcnkuREVGQVVMVDsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHJldHVybiBjYXRlZ29yeTsKICAgIH0gZWxzZSBpZiAoX3Jlc29sdmVyLmhhc1Rocm93aW5nU3ludGF4KGVsZW1lbnQpKSB7CiAgICAgIHRocm93aW5nSW1wbHMuYWRkKGVsZW1lbnQpOwogICAgICByZXR1cm4gTnNtQ2F0ZWdvcnkuVEhST1dJTkc7CiAgICB9IGVsc2UgewogICAgICBvdGhlckltcGxzLmFkZChlbGVtZW50KTsKICAgICAgcmV0dXJuIE5zbUNhdGVnb3J5Lk9USEVSOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgTm9TdWNoTWV0aG9kRGF0YSBjbG9zZSgpIHsKICAgIHJldHVybiBuZXcgTm9TdWNoTWV0aG9kRGF0YUltcGwoCiAgICAgICAgdGhyb3dpbmdJbXBscywgb3RoZXJJbXBscywgZm9yd2FyZGluZ1N5bnRheEltcGxzKTsKICB9Cn0KCi8vLyBEYXRhIG9iamVjdCB1c2VkIGR1cmluZyB0eXBlIGluZmVyZW5jZS4KLy8vCi8vLyBQb3N0IGluZmVyZW5jZSBjb2xsZWN0ZWQgY2F0ZWdvcnkgYERgIG1ldGhvZHMgYXJlIGludG8gc3ViY2F0ZWdvcmllcyBgRDFgCi8vLyBhbmQgYEQyYC4KYWJzdHJhY3QgY2xhc3MgTm9TdWNoTWV0aG9kRGF0YSB7CiAgLy8vIERlc2VyaWFsaXplcyBhIFtOb1N1Y2hNZXRob2REYXRhXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IE5vU3VjaE1ldGhvZERhdGEucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSA9CiAgICAgIE5vU3VjaE1ldGhvZERhdGFJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZTsKCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbTm9TdWNoTWV0aG9kRGF0YV0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspOwoKICAvLy8gUmV0dXJucyBbdHJ1ZV0gaWYgdGhlIGdpdmVuIGVsZW1lbnQgaXMgYSBjb21wbGV4IFtub1N1Y2hNZXRob2RdCiAgLy8vIGltcGxlbWVudGF0aW9uLiBBbiBpbXBsZW1lbnRhdGlvbiBpcyBjb21wbGV4IGlmIGl0IGZhbGxzIGludG8KICAvLy8gY2F0ZWdvcnkgRCwgYXMgZGVzY3JpYmVkIGFib3ZlLgogIGJvb2wgaXNDb21wbGV4KEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gTm93IHRoYXQgdHlwZSBpbmZlcmVuY2UgaXMgY29tcGxldGUsIHNwbGl0IGNhdGVnb3J5IEQgaW50byB0d28KICAvLy8gc3ViY2F0ZWdvcmllczogRDEsIHRob3NlIHRoYXQgaGF2ZSBubyByZXR1cm4gdHlwZSwgYW5kIEQyLCB0aG9zZQogIC8vLyB0aGF0IGhhdmUgYSByZXR1cm4gdHlwZS4KICB2b2lkIGNhdGVnb3JpemVDb21wbGV4SW1wbGVtZW50YXRpb25zKEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMpOwoKICAvLy8gRW1pdHMgYSBkaWFnbm9zdGljIGFib3V0IG1ldGhvZHMgaW4gY2F0ZWdvcmllcyBgQmAsIGBEMWAgYW5kIGBEMmAuCiAgdm9pZCBlbWl0RGlhZ25vc3RpYyhEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIpOwp9CgpjbGFzcyBOb1N1Y2hNZXRob2REYXRhSW1wbCBpbXBsZW1lbnRzIE5vU3VjaE1ldGhvZERhdGEgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbTm9TdWNoTWV0aG9kRGF0YV0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICduby1zdWNoLW1ldGhvZC1kYXRhJzsKCiAgLy8vIFRoZSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBmYWxsIGludG8gY2F0ZWdvcnkgQiwgZGVzY3JpYmVkIGFib3ZlLgogIGZpbmFsIFNldDxGdW5jdGlvbkVudGl0eT4gdGhyb3dpbmdJbXBsczsKCiAgLy8vIFRoZSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBmYWxsIGludG8gY2F0ZWdvcnkgRCwgZGVzY3JpYmVkIGFib3ZlLgogIGZpbmFsIFNldDxGdW5jdGlvbkVudGl0eT4gb3RoZXJJbXBsczsKCiAgLy8vIFRoZSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBmYWxsIGludG8gY2F0ZWdvcnkgRDEKICBmaW5hbCBTZXQ8RnVuY3Rpb25FbnRpdHk+IGNvbXBsZXhOb1JldHVybkltcGxzID0gbmV3IFNldDxGdW5jdGlvbkVudGl0eT4oKTsKCiAgLy8vIFRoZSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBmYWxsIGludG8gY2F0ZWdvcnkgRDIKICBmaW5hbCBTZXQ8RnVuY3Rpb25FbnRpdHk+IGNvbXBsZXhSZXR1cm5pbmdJbXBscyA9IG5ldyBTZXQ8RnVuY3Rpb25FbnRpdHk+KCk7CgogIGZpbmFsIFNldDxGdW5jdGlvbkVudGl0eT4gZm9yd2FyZGluZ1N5bnRheEltcGxzOwoKICBOb1N1Y2hNZXRob2REYXRhSW1wbCgKICAgICAgdGhpcy50aHJvd2luZ0ltcGxzLCB0aGlzLm90aGVySW1wbHMsIHRoaXMuZm9yd2FyZGluZ1N5bnRheEltcGxzKTsKCiAgZmFjdG9yeSBOb1N1Y2hNZXRob2REYXRhSW1wbC5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgU2V0PEZ1bmN0aW9uRW50aXR5PiB0aHJvd2luZ0ltcGxzID0KICAgICAgICBzb3VyY2UucmVhZE1lbWJlcnM8RnVuY3Rpb25FbnRpdHk+KCkudG9TZXQoKTsKICAgIFNldDxGdW5jdGlvbkVudGl0eT4gb3RoZXJJbXBscyA9CiAgICAgICAgc291cmNlLnJlYWRNZW1iZXJzPEZ1bmN0aW9uRW50aXR5PigpLnRvU2V0KCk7CiAgICBTZXQ8RnVuY3Rpb25FbnRpdHk+IGZvcndhcmRpbmdTeW50YXhJbXBscyA9CiAgICAgICAgc291cmNlLnJlYWRNZW1iZXJzPEZ1bmN0aW9uRW50aXR5PigpLnRvU2V0KCk7CiAgICBMaXN0PEZ1bmN0aW9uRW50aXR5PiBjb21wbGV4Tm9SZXR1cm5JbXBscyA9CiAgICAgICAgc291cmNlLnJlYWRNZW1iZXJzPEZ1bmN0aW9uRW50aXR5PigpOwogICAgTGlzdDxGdW5jdGlvbkVudGl0eT4gY29tcGxleFJldHVybmluZ0ltcGxzID0KICAgICAgICBzb3VyY2UucmVhZE1lbWJlcnM8RnVuY3Rpb25FbnRpdHk+KCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IE5vU3VjaE1ldGhvZERhdGFJbXBsKAogICAgICAgIHRocm93aW5nSW1wbHMsIG90aGVySW1wbHMsIGZvcndhcmRpbmdTeW50YXhJbXBscykKICAgICAgLi5jb21wbGV4Tm9SZXR1cm5JbXBscy5hZGRBbGwoY29tcGxleE5vUmV0dXJuSW1wbHMpCiAgICAgIC4uY29tcGxleFJldHVybmluZ0ltcGxzLmFkZEFsbChjb21wbGV4UmV0dXJuaW5nSW1wbHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZU1lbWJlcnModGhyb3dpbmdJbXBscyk7CiAgICBzaW5rLndyaXRlTWVtYmVycyhvdGhlckltcGxzKTsKICAgIHNpbmsud3JpdGVNZW1iZXJzKGZvcndhcmRpbmdTeW50YXhJbXBscyk7CiAgICBzaW5rLndyaXRlTWVtYmVycyhjb21wbGV4Tm9SZXR1cm5JbXBscyk7CiAgICBzaW5rLndyaXRlTWVtYmVycyhjb21wbGV4UmV0dXJuaW5nSW1wbHMpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2F0ZWdvcml6ZUNvbXBsZXhJbXBsZW1lbnRhdGlvbnMoR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cykgewogICAgb3RoZXJJbXBscy5mb3JFYWNoKChGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICAgIGlmIChyZXN1bHRzLnJlc3VsdE9mTWVtYmVyKGVsZW1lbnQpLnRocm93c0Fsd2F5cykgewogICAgICAgIGNvbXBsZXhOb1JldHVybkltcGxzLmFkZChlbGVtZW50KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb21wbGV4UmV0dXJuaW5nSW1wbHMuYWRkKGVsZW1lbnQpOwogICAgICB9CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW1pdERpYWdub3N0aWMoRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyKSB7CiAgICB0aHJvd2luZ0ltcGxzLmZvckVhY2goKGUpIHsKICAgICAgaWYgKCFmb3J3YXJkaW5nU3ludGF4SW1wbHMuY29udGFpbnMoZSkpIHsKICAgICAgICByZXBvcnRlci5yZXBvcnRIaW50TWVzc2FnZShlLCBNZXNzYWdlS2luZC5ESVJFQ1RMWV9USFJPV0lOR19OU00pOwogICAgICB9CiAgICB9KTsKICAgIGNvbXBsZXhOb1JldHVybkltcGxzLmZvckVhY2goKGUpIHsKICAgICAgaWYgKCFmb3J3YXJkaW5nU3ludGF4SW1wbHMuY29udGFpbnMoZSkpIHsKICAgICAgICByZXBvcnRlci5yZXBvcnRIaW50TWVzc2FnZShlLCBNZXNzYWdlS2luZC5DT01QTEVYX1RIUk9XSU5HX05TTSk7CiAgICAgIH0KICAgIH0pOwogICAgY29tcGxleFJldHVybmluZ0ltcGxzLmZvckVhY2goKGUpIHsKICAgICAgaWYgKCFmb3J3YXJkaW5nU3ludGF4SW1wbHMuY29udGFpbnMoZSkpIHsKICAgICAgICByZXBvcnRlci5yZXBvcnRIaW50TWVzc2FnZShlLCBNZXNzYWdlS2luZC5DT01QTEVYX1JFVFVSTklOR19OU00pOwogICAgICB9CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNDb21wbGV4KEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydChlbGVtZW50Lm5hbWUgPT0gSWRlbnRpZmllcnMubm9TdWNoTWV0aG9kXyk7CiAgICByZXR1cm4gb3RoZXJJbXBscy5jb250YWlucyhlbGVtZW50KTsKICB9Cn0KCmVudW0gTnNtQ2F0ZWdvcnkgewogIERFRkFVTFQsCiAgVEhST1dJTkcsCiAgTk9UX0FQUExJQ0FCTEUsCiAgT1RIRVIsCn0KCi8vLyBJbnRlcmZhY2UgZm9yIGRldGVybWluaW5nIHRoZSBmb3JtIG9mIGEgYG5vU3VjaE1ldGhvZGAgaW1wbGVtZW50YXRpb24uCmFic3RyYWN0IGNsYXNzIE5vU3VjaE1ldGhvZFJlc29sdmVyIHsKICAvLy8gQ29tcHV0ZXMgd2hldGhlciBbbWV0aG9kXSBpcyBvZiB0aGUgZm9ybQogIC8vLwogIC8vLyAgICAgbm9TdWNoTWV0aG9kKGkpID0+IHN1cGVyLm5vU3VjaE1ldGhvZChpKTsKICAvLy8KICBib29sIGhhc0ZvcndhcmRpbmdTeW50YXgoY292YXJpYW50IEZ1bmN0aW9uRW50aXR5IG1ldGhvZCk7CgogIC8vLyBDb21wdXRlcyB3aGV0aGVyIFttZXRob2RdIGlzIG9mIHRoZSBmb3JtCiAgLy8vCiAgLy8vICAgICBub1N1Y2hNZXRob2QoaSkgPT4gdGhyb3cgbmV3IEVycm9yKCk7CiAgLy8vCiAgYm9vbCBoYXNUaHJvd2luZ1N5bnRheChjb3ZhcmlhbnQgRnVuY3Rpb25FbnRpdHkgbWV0aG9kKTsKCiAgLy8vIFJldHVybnMgdGhlIGBub1N1Y2hNZXRob2RgIHRoYXQgW21ldGhvZF0gb3ZlcnJpZGVzLgogIEZ1bmN0aW9uRW50aXR5IGdldFN1cGVyTm9TdWNoTWV0aG9kKGNvdmFyaWFudCBGdW5jdGlvbkVudGl0eSBtZXRob2QpOwp9CoE7AE5OPAEZNjskIS4BTRUETEdOMQRQSzYEQjoEUAQzBEMEMzkEUFEPBFERBDIETUcnAVEoJiZBASoXATwkATwjAU4cAgFBRkYBRkcBRkgQTAFGRAE+TQFBL08BKCgBQgFEAQxADDwBDEIyBAEMGDIhBAE4NyEqIgYrIwYoIAYwKQY+JykGSCEiOSpOPEo5GiIlESMmESAjESlOJCUqEQgXNyIjDR8gBgQBDB0lOwQCASwETg4iPkMvATQnAUZEJioBRUcfTQFJNAIBOUodMwFGKwFGKAE1TgE1TwEzARhIAUcXKDYlNjA2MC4xLhUlOjo9BAEMKBUmIy4tLhMEAQxOMjorDywICAQBDDUgMEoICCcwSQgIKDBKCAgEAQwrNykEAgETCwwSCQIBSyYvBjQGPQEvBjAGOwE6SAIBPHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvbm9fc3VjaF9tZXRob2RfcmVnaXN0cnkuZGFydDFzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pci9zdGF0aWNfdHlwZS5kYXJ0wAEJpS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbGFzc19oaWVyYXJjaHkuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2FsZ2VicmEuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9lbnZpcm9ubWVudC5kYXJ0JyBhcyBpcjsKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnOwppbXBvcnQgJ3J1bnRpbWVfdHlwZV9hbmFseXNpcy5kYXJ0JzsKaW1wb3J0ICdzY29wZS5kYXJ0JzsKaW1wb3J0ICdzdGF0aWNfdHlwZV9iYXNlLmRhcnQnOwppbXBvcnQgJ3N0YXRpY190eXBlX2NhY2hlLmRhcnQnOwoKLy8vIEVudW0gdmFsdWVzIGZvciBob3cgdGhlIHRhcmdldCBvZiBhIHN0YXRpYyB0eXBlIHNob3VsZCBiZSBpbnRlcnByZXRlZC4KZW51bSBDbGFzc1JlbGF0aW9uIHsKICAvLy8gVGhlIHRhcmdldCBpcyBhbnkgc3VidHlwZSBvZiB0aGUgc3RhdGljIHR5cGUuCiAgc3VidHlwZSwKCiAgLy8vIFRoZSB0YXJnZXQgaXMgYSBzdWJjbGFzcyBvciBtaXhpbiBhcHBsaWNhdGlvbiBvZiB0aGUgc3RhdGljIHR5cGUuCiAgLy8vCiAgLy8vIFRoaXMgY29ycmVzcG9uZHMgdG8gYWNjZXNzaW5nIGEgbWVtYmVyIHRocm91Z2ggYSB0aGlzIGV4cHJlc3Npb24uCiAgdGhpc0V4cHJlc3Npb24sCgogIC8vLyBUaGUgdGFyZ2V0IGlzIGFuIGV4YWN0IGluc3RhbmNlIG9mIHRoZSBzdGF0aWMgdHlwZS4KICBleGFjdCwKfQoKQ2xhc3NSZWxhdGlvbiBjb21wdXRlQ2xhc3NSZWxhdGlvbkZyb21UeXBlKGlyLkRhcnRUeXBlIHR5cGUpIHsKICBpZiAodHlwZSBpcyBUaGlzSW50ZXJmYWNlVHlwZSkgewogICAgcmV0dXJuIENsYXNzUmVsYXRpb24udGhpc0V4cHJlc3Npb247CiAgfSBlbHNlIGlmICh0eXBlIGlzIEV4YWN0SW50ZXJmYWNlVHlwZSkgewogICAgcmV0dXJuIENsYXNzUmVsYXRpb24uZXhhY3Q7CiAgfSBlbHNlIHsKICAgIHJldHVybiBDbGFzc1JlbGF0aW9uLnN1YnR5cGU7CiAgfQp9CgovLy8gVmlzaXRvciB0aGF0IGNvbXB1dGVzIGFuZCBjYWNoZXMgdGhlIHN0YXRpYyB0eXBlIG9mIGV4cHJlc3Npb24gd2hpbGUKLy8vIHZpc2l0aW5nIHRoZSBmdWxsIHRyZWUgYXQgZXhwcmVzc2lvbiBsZXZlbC4KLy8vCi8vLyBUbyBlbnN1cmUgdGhhdCB0aGUgdHJhdmVyc2FsIG9ubHkgdmlzaXRzIGFuZCBjb21wdXRlcyB0aGUgZXhwcmVzc2lvbiB0eXBlCi8vLyBmb3IgZWFjaCBleHByZXNzaW9uIG9uY2UsIHRoaXMgY2xhc3MgcGVyZm9ybXMgdGhlIHRyYXZlcnNhbCBleHBsaWNpdGx5IGFuZAovLy8gYWRkcyAnaGFuZGxlWCcgaG9va3MgZm9yIHN1YmNsYXNzZXMgdG8gaGFuZGxlIGluZGl2aWR1YWwgZXhwcmVzc2lvbnMgdXNpbmcKLy8vIHRoZSByZWFkaWx5IGNvbXB1dGUgc3RhdGljIHR5cGVzIG9mIHN1YmV4cHJlc3Npb25zLgphYnN0cmFjdCBjbGFzcyBTdGF0aWNUeXBlVmlzaXRvciBleHRlbmRzIFN0YXRpY1R5cGVCYXNlIHsKICBmaW5hbCBNYXA8aXIuRXhwcmVzc2lvbiwgaXIuRGFydFR5cGU+IF9leHByZXNzaW9uVHlwZUNhY2hlID0ge307CiAgTWFwPGlyLkZvckluU3RhdGVtZW50LCBpci5EYXJ0VHlwZT4gX2ZvckluSXRlcmF0b3JUeXBlQ2FjaGU7CiAgTWFwPGlyLkV4cHJlc3Npb24sIFR5cGVNYXA+IHR5cGVNYXBzRm9yVGVzdGluZzsKICBNYXA8aXIuUHJvcGVydHlHZXQsIFJ1bnRpbWVUeXBlVXNlRGF0YT4gX3BlbmRpbmdSdW50aW1lVHlwZVVzZURhdGEgPSB7fTsKCiAgZmluYWwgaXIuQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5OwoKICBUaGlzSW50ZXJmYWNlVHlwZSBfdGhpc1R5cGU7CgogIFN0YXRpY1R5cGVWaXNpdG9yKGlyLlR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQsIHRoaXMuaGllcmFyY2h5KQogICAgICA6IHN1cGVyKHR5cGVFbnZpcm9ubWVudCk7CgogIFN0YXRpY1R5cGVDYWNoZSBnZXRTdGF0aWNUeXBlQ2FjaGUoKSB7CiAgICByZXR1cm4gbmV3IFN0YXRpY1R5cGVDYWNoZShfZXhwcmVzc2lvblR5cGVDYWNoZSwgX2ZvckluSXRlcmF0b3JUeXBlQ2FjaGUpOwogIH0KCiAgLy8vIElmIGB0cnVlYCwgdGhlIGVmZmVjdCBvZiBleGVjdXRpbmcgYXNzZXJ0IHN0YXRlbWVudHMgaXMgdGFrZW4gaW50byBhY2NvdW50CiAgLy8vIHdoZW4gY29tcHV0aW5nIHRoZSBzdGF0aWMgdHlwZS4KICBib29sIGdldCB1c2VBc3NlcnRzOwoKICAvLy8gSWYgYHRydWVgLCB0aGUgc3RhdGljIHR5cGUgb2YgYW4gZWZmZWN0aXZlbHkgZmluYWwgdmFyaWFibGUgaXMgaW5mZXJyZWQKICAvLy8gZnJvbSB0aGUgc3RhdGljIHR5cGUgb2YgaXRzIGluaXRpYWxpemVyLgogIGJvb2wgZ2V0IGluZmVyRWZmZWN0aXZlbHlGaW5hbFZhcmlhYmxlVHlwZXM7CgogIFZhcmlhYmxlU2NvcGVNb2RlbCBnZXQgdmFyaWFibGVTY29wZU1vZGVsOwoKICBAb3ZlcnJpZGUKICBUaGlzSW50ZXJmYWNlVHlwZSBnZXQgdGhpc1R5cGUgewogICAgYXNzZXJ0KF90aGlzVHlwZSAhPSBudWxsKTsKICAgIHJldHVybiBfdGhpc1R5cGU7CiAgfQoKICB2b2lkIHNldCB0aGlzVHlwZShUaGlzSW50ZXJmYWNlVHlwZSB2YWx1ZSkgewogICAgYXNzZXJ0KHZhbHVlID09IG51bGwgfHwgX3RoaXNUeXBlID09IG51bGwpOwogICAgX3RoaXNUeXBlID0gdmFsdWU7CiAgfQoKICBib29sIGNvbXBsZXRlcyhpci5EYXJ0VHlwZSB0eXBlKSA9PiB0eXBlICE9IGNvbnN0IERvZXNOb3RDb21wbGV0ZVR5cGUoKTsKCiAgU2V0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+IF9jdXJyZW50VmFyaWFibGVzOwogIFNldDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBfaW52YWxpZGF0ZWRWYXJpYWJsZXMgPQogICAgICBuZXcgU2V0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+KCk7CgogIFR5cGVNYXAgX3R5cGVNYXBCYXNlID0gY29uc3QgVHlwZU1hcCgpOwogIFR5cGVNYXAgX3R5cGVNYXBXaGVuVHJ1ZTsKICBUeXBlTWFwIF90eXBlTWFwV2hlbkZhbHNlOwoKICAvLy8gUmV0dXJucyB0aGUgbG9jYWwgdmFyaWFibGUgdHlwZSBwcm9tb3Rpb25zIGZvciB3aGVuIHRoZSBib29sZWFuIHZhbHVlIG9mCiAgLy8vIHRoZSBtb3N0IHJlY2VudCBub2RlIGlzIG5vdCB0YWtlbiBpbnRvIGFjY291bnQuCiAgVHlwZU1hcCBnZXQgdHlwZU1hcCB7CiAgICBpZiAoX3R5cGVNYXBCYXNlID09IG51bGwpIHsKICAgICAgX3R5cGVNYXBCYXNlID0gX3R5cGVNYXBXaGVuVHJ1ZS5qb2luKF90eXBlTWFwV2hlbkZhbHNlKTsKICAgICAgX3R5cGVNYXBXaGVuVHJ1ZSA9IF90eXBlTWFwV2hlbkZhbHNlID0gbnVsbDsKICAgIH0KICAgIHJldHVybiBfdHlwZU1hcEJhc2U7CiAgfQoKICAvLy8gU2V0cyB0aGUgbG9jYWwgdmFyaWFibGUgdHlwZSBwcm9tb3Rpb25zIGZvciB3aGVuIHRoZSBib29sZWFuIHZhbHVlIG9mCiAgLy8vIHRoZSBtb3N0IHJlY2VudCBub2RlIGlzIG5vdCB0YWtlbiBpbnRvIGFjY291bnQuCiAgdm9pZCBzZXQgdHlwZU1hcChUeXBlTWFwIHZhbHVlKSB7CiAgICBfdHlwZU1hcEJhc2UgPSB2YWx1ZTsKICAgIF90eXBlTWFwV2hlblRydWUgPSBfdHlwZU1hcFdoZW5GYWxzZSA9IG51bGw7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbG9jYWwgdmFyaWFibGUgdHlwZSBwcm9tb3Rpb25zIGZvciB3aGVuIHRoZSBib29sZWFuIHZhbHVlIG9mCiAgLy8vIHRoZSBtb3N0IHJlY2VudCBub2RlIGlzIGB0cnVlYC4KICBUeXBlTWFwIGdldCB0eXBlTWFwV2hlblRydWUgPT4gX3R5cGVNYXBXaGVuVHJ1ZSA/PyBfdHlwZU1hcEJhc2U7CgogIC8vLyBTZXRzIHRoZSBsb2NhbCB2YXJpYWJsZSB0eXBlIHByb21vdGlvbnMgZm9yIHdoZW4gdGhlIGJvb2xlYW4gdmFsdWUgb2YKICAvLy8gdGhlIG1vc3QgcmVjZW50IG5vZGUgaXMgYHRydWVgLgogIHZvaWQgc2V0IHR5cGVNYXBXaGVuVHJ1ZShUeXBlTWFwIHZhbHVlKSB7CiAgICBfdHlwZU1hcFdoZW5UcnVlID0gdmFsdWU7CiAgICBfdHlwZU1hcEJhc2UgPSBudWxsOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGxvY2FsIHZhcmlhYmxlIHR5cGUgcHJvbW90aW9ucyBmb3Igd2hlbiB0aGUgYm9vbGVhbiB2YWx1ZSBvZgogIC8vLyB0aGUgbW9zdCByZWNlbnQgbm9kZSBpcyBgZmFsc2VgLgogIFR5cGVNYXAgZ2V0IHR5cGVNYXBXaGVuRmFsc2UgPT4gX3R5cGVNYXBXaGVuRmFsc2UgPz8gX3R5cGVNYXBCYXNlOwoKICAvLy8gU2V0cyB0aGUgbG9jYWwgdmFyaWFibGUgdHlwZSBwcm9tb3Rpb25zIGZvciB3aGVuIHRoZSBib29sZWFuIHZhbHVlIG9mCiAgLy8vIHRoZSBtb3N0IHJlY2VudCBub2RlIGlzIGBmYWxzZWAuCiAgdm9pZCBzZXQgdHlwZU1hcFdoZW5GYWxzZShUeXBlTWFwIHZhbHVlKSB7CiAgICBfdHlwZU1hcFdoZW5GYWxzZSA9IHZhbHVlOwogICAgX3R5cGVNYXBCYXNlID0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIGRlZmF1bHROb2RlKGlyLk5vZGUgbm9kZSkgPT4KICAgICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcignVW5oYW5kbGVkIG5vZGUgJG5vZGUgKCR7bm9kZS5ydW50aW1lVHlwZX0pJyk7CgogIEBvdmVycmlkZQogIE51bGwgdmlzaXRDb21wb25lbnQoaXIuQ29tcG9uZW50IG5vZGUpIHsKICAgIHZpc2l0Tm9kZXMobm9kZS5saWJyYXJpZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgTnVsbCB2aXNpdExpYnJhcnkoaXIuTGlicmFyeSBub2RlKSB7CiAgICB2aXNpdE5vZGVzKG5vZGUuY2xhc3Nlcyk7CiAgICB2aXNpdE5vZGVzKG5vZGUucHJvY2VkdXJlcyk7CiAgICB2aXNpdE5vZGVzKG5vZGUuZmllbGRzKTsKICB9CgogIEBvdmVycmlkZQogIE51bGwgdmlzaXRDbGFzcyhpci5DbGFzcyBub2RlKSB7CiAgICB2aXNpdE5vZGVzKG5vZGUuY29uc3RydWN0b3JzKTsKICAgIHZpc2l0Tm9kZXMobm9kZS5wcm9jZWR1cmVzKTsKICAgIHZpc2l0Tm9kZXMobm9kZS5maWVsZHMpOwogIH0KCiAgaXIuSW50ZXJmYWNlVHlwZSBnZXRJbnRlcmZhY2VUeXBlT2YoaXIuRGFydFR5cGUgdHlwZSkgewogICAgd2hpbGUgKHR5cGUgaXMgaXIuVHlwZVBhcmFtZXRlclR5cGUpIHsKICAgICAgdHlwZSA9ICh0eXBlIGFzIGlyLlR5cGVQYXJhbWV0ZXJUeXBlKS5wYXJhbWV0ZXIuYm91bmQ7CiAgICB9CiAgICByZXR1cm4gdHlwZSBpcyBpci5JbnRlcmZhY2VUeXBlID8gdHlwZSA6IG51bGw7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgc3RhdGljIHR5cGUgb2YgdGhlIGV4cHJlc3Npb24gYXMgYW4gaW5zdGFudGlhdGlvbiBvZgogIC8vLyBbc3VwZXJjbGFzc10uCiAgLy8vCiAgLy8vIFNob3VsZCBvbmx5IGJlIHVzZWQgb24gY29kZSBjb21waWxlZCBpbiBzdHJvbmcgbW9kZSwgYXMgdGhpcyBtZXRob2QKICAvLy8gYXNzdW1lcyB0aGUgSVIgaXMgc3Ryb25nbHkgdHlwZWQuCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIGZ1cnRoZXJtb3JlIGFzc3VtZXMgdGhhdCB0aGUgdHlwZSBvZiB0aGUgZXhwcmVzc2lvbiBhY3R1YWxseQogIC8vLyBpcyBhIHN1YnR5cGUgb2YgKHNvbWUgaW5zdGFudGlhdGlvbiBvZikgdGhlIGdpdmVuIFtzdXBlcmNsYXNzXS4KICAvLy8gSWYgdGhpcyBpcyBub3QgdGhlIGNhc2UgdGhlIHJhdyB0eXBlIG9mIFtzdXBlcmNsYXNzXSBpcyByZXR1cm5lZC4KICAvLy8KICAvLy8gVGhpcyBtZXRob2QgaXMgZGVyaXZlZCBmcm9tIGBpci5FeHByZXNzaW9uLmdldFN0YXRpY1R5cGVBc0luc3RhbmNlT2ZgLgogIGlyLkludGVyZmFjZVR5cGUgZ2V0VHlwZUFzSW5zdGFuY2VPZihpci5EYXJ0VHlwZSB0eXBlLCBpci5DbGFzcyBzdXBlcmNsYXNzKSB7CiAgICAvLyBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoZSBwcm9ncmFtIGlzIGNvcnJlY3RseSB0eXBlZCwgc28gaWYgdGhlIHN1cGVyY2xhc3MKICAgIC8vIGlzIG5vdCBnZW5lcmljLCB3ZSBjYW4ganVzdCByZXR1cm4gaXRzIHJhdyB0eXBlIHdpdGhvdXQgY29tcHV0aW5nIHRoZQogICAgLy8gdHlwZSBvZiB0aGlzIGV4cHJlc3Npb24uICBJdCBhbHNvIGVuc3VyZXMgdGhhdCBhbGwgdHlwZXMgYXJlIGNvbnNpZGVyZWQKICAgIC8vIHN1YnR5cGVzIG9mIE9iamVjdCAobm90IGp1c3QgaW50ZXJmYWNlIHR5cGVzKSwgYW5kIGZ1bmN0aW9uIHR5cGVzIGFyZQogICAgLy8gY29uc2lkZXJlZCBzdWJ0eXBlcyBvZiBGdW5jdGlvbi4KICAgIGlmIChzdXBlcmNsYXNzLnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkpIHsKICAgICAgcmV0dXJuIHN1cGVyY2xhc3MucmF3VHlwZTsKICAgIH0KICAgIHdoaWxlICh0eXBlIGlzIGlyLlR5cGVQYXJhbWV0ZXJUeXBlKSB7CiAgICAgIHR5cGUgPSAodHlwZSBhcyBpci5UeXBlUGFyYW1ldGVyVHlwZSkucGFyYW1ldGVyLmJvdW5kOwogICAgfQogICAgaWYgKHR5cGUgPT0gdHlwZUVudmlyb25tZW50Lm51bGxUeXBlKSB7CiAgICAgIHJldHVybiBzdXBlcmNsYXNzLmJvdHRvbVR5cGU7CiAgICB9CiAgICBpZiAodHlwZSBpcyBpci5JbnRlcmZhY2VUeXBlKSB7CiAgICAgIGlyLkludGVyZmFjZVR5cGUgdXBjYXN0VHlwZSA9CiAgICAgICAgICB0eXBlRW52aXJvbm1lbnQuZ2V0VHlwZUFzSW5zdGFuY2VPZih0eXBlLCBzdXBlcmNsYXNzKTsKICAgICAgaWYgKHVwY2FzdFR5cGUgIT0gbnVsbCkgcmV0dXJuIHVwY2FzdFR5cGU7CiAgICB9IGVsc2UgaWYgKHR5cGUgaXMgaXIuQm90dG9tVHlwZSkgewogICAgICByZXR1cm4gc3VwZXJjbGFzcy5ib3R0b21UeXBlOwogICAgfQogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU2hvdWxkIHdlIGFzc2VydCB0aGF0IHRoaXMgZG9lc24ndCBoYXBwZW4/CiAgICByZXR1cm4gc3VwZXJjbGFzcy5yYXdUeXBlOwogIH0KCiAgLy8vIENvbXB1dGVzIHRoZSByZXN1bHQgdHlwZSBvZiB0aGUgcHJvcGVydHkgYWNjZXNzIFtub2RlXSBvbiBhIHJlY2VpdmVyIG9mCiAgLy8vIHR5cGUgW3JlY2VpdmVyVHlwZV0uCiAgLy8vCiAgLy8vIElmIHRoZSBgbm9kZS5pbnRlcmZhY2VUYXJnZXRgIGlzIGBudWxsYCBidXQgbWF0Y2hlcyBhbiBgT2JqZWN0YCBtZW1iZXIKICAvLy8gaXQgaXMgdXBkYXRlZCB0byB0YXJnZXQgdGhpcyBtZW1iZXIuCiAgaXIuRGFydFR5cGUgX2NvbXB1dGVQcm9wZXJ0eUdldFR5cGUoCiAgICAgIGlyLlByb3BlcnR5R2V0IG5vZGUsIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSkgewogICAgaXIuTWVtYmVyIGludGVyZmFjZVRhcmdldCA9IG5vZGUuaW50ZXJmYWNlVGFyZ2V0OwogICAgaWYgKGludGVyZmFjZVRhcmdldCA9PSBudWxsICYmIHJlY2VpdmVyVHlwZSBpcyBpci5JbnRlcmZhY2VUeXBlKSB7CiAgICAgIGludGVyZmFjZVRhcmdldCA9IG5vZGUuaW50ZXJmYWNlVGFyZ2V0ID0KICAgICAgICAgIGhpZXJhcmNoeS5nZXRJbnRlcmZhY2VNZW1iZXIocmVjZWl2ZXJUeXBlLmNsYXNzTm9kZSwgbm9kZS5uYW1lKTsKICAgIH0KICAgIGlmIChpbnRlcmZhY2VUYXJnZXQgIT0gbnVsbCkgewogICAgICBpci5DbGFzcyBzdXBlcmNsYXNzID0gaW50ZXJmYWNlVGFyZ2V0LmVuY2xvc2luZ0NsYXNzOwogICAgICByZWNlaXZlclR5cGUgPSBnZXRUeXBlQXNJbnN0YW5jZU9mKHJlY2VpdmVyVHlwZSwgc3VwZXJjbGFzcyk7CiAgICAgIHJldHVybiBpci5TdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUocmVjZWl2ZXJUeXBlKQogICAgICAgICAgLnN1YnN0aXR1dGVUeXBlKGludGVyZmFjZVRhcmdldC5nZXR0ZXJUeXBlKTsKICAgIH0KICAgIC8vIFRyZWF0IHRoZSBwcm9wZXJ0aWVzIG9mIE9iamVjdCBzcGVjaWFsbHkuCiAgICBTdHJpbmcgbmFtZVN0cmluZyA9IG5vZGUubmFtZS5uYW1lOwogICAgaWYgKG5hbWVTdHJpbmcgPT0gJ2hhc2hDb2RlJykgewogICAgICByZXR1cm4gdHlwZUVudmlyb25tZW50LmludFR5cGU7CiAgICB9IGVsc2UgaWYgKG5hbWVTdHJpbmcgPT0gJ3J1bnRpbWVUeXBlJykgewogICAgICByZXR1cm4gdHlwZUVudmlyb25tZW50LnR5cGVUeXBlOwogICAgfQogICAgcmV0dXJuIGNvbnN0IGlyLkR5bmFtaWNUeXBlKCk7CiAgfQoKICB2b2lkIGhhbmRsZVByb3BlcnR5R2V0KAogICAgICBpci5Qcm9wZXJ0eUdldCBub2RlLCBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsIGlyLkRhcnRUeXBlIHJlc3VsdFR5cGUpIHt9CgogIHZvaWQgaGFuZGxlUnVudGltZVR5cGVVc2UoaXIuUHJvcGVydHlHZXQgbm9kZSwgUnVudGltZVR5cGVVc2VLaW5kIGtpbmQsCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwgaXIuRGFydFR5cGUgYXJndW1lbnRUeXBlKSB7fQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdFByb3BlcnR5R2V0KGlyLlByb3BlcnR5R2V0IG5vZGUpIHsKICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSA9IHZpc2l0Tm9kZShub2RlLnJlY2VpdmVyKTsKICAgIGlyLkRhcnRUeXBlIHJlc3VsdFR5cGUgPSBfZXhwcmVzc2lvblR5cGVDYWNoZVtub2RlXSA9CiAgICAgICAgX2NvbXB1dGVQcm9wZXJ0eUdldFR5cGUobm9kZSwgcmVjZWl2ZXJUeXBlKTsKICAgIHJlY2VpdmVyVHlwZSA9IF9uYXJyb3dJbnN0YW5jZVJlY2VpdmVyKG5vZGUuaW50ZXJmYWNlVGFyZ2V0LCByZWNlaXZlclR5cGUpOwogICAgaGFuZGxlUHJvcGVydHlHZXQobm9kZSwgcmVjZWl2ZXJUeXBlLCByZXN1bHRUeXBlKTsKICAgIGlmIChub2RlLm5hbWUubmFtZSA9PSBJZGVudGlmaWVycy5ydW50aW1lVHlwZV8pIHsKICAgICAgUnVudGltZVR5cGVVc2VEYXRhIGRhdGEgPQogICAgICAgICAgY29tcHV0ZVJ1bnRpbWVUeXBlVXNlKF9wZW5kaW5nUnVudGltZVR5cGVVc2VEYXRhLCBub2RlKTsKICAgICAgaWYgKGRhdGEubGVmdFJ1bnRpbWVUeXBlRXhwcmVzc2lvbiA9PSBub2RlKSB7CiAgICAgICAgLy8gW25vZGVdIGlzIHRoZSBsZWZ0IChvciBzaW5nbGUpIG9jY3VycmVuY2Ugb2YgYC5ydW50aW1lVHlwZWAgc28gd2UKICAgICAgICAvLyBjYW4gc2V0IHRoZSBzdGF0aWMgdHlwZSBvZiB0aGUgcmVjZWl2ZXIgZXhwcmVzc2lvbi4KICAgICAgICBkYXRhLnJlY2VpdmVyVHlwZSA9IHJlY2VpdmVyVHlwZTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBbbm9kZV0gaXMgdGhlIHJpZ2h0IG9jY3VycmVuY2Ugb2YgYC5ydW50aW1lVHlwZWAgc28gd2UKICAgICAgICAvLyBjYW4gc2V0IHRoZSBzdGF0aWMgdHlwZSBvZiB0aGUgYXJndW1lbnQgZXhwcmVzc2lvbi4KICAgICAgICBhc3NlcnQoZGF0YS5yaWdodFJ1bnRpbWVUeXBlRXhwcmVzc2lvbiA9PSBub2RlLAogICAgICAgICAgICAiVW5leHBlY3RlZCBSdW50aW1lVHlwZVVzZURhdGEgZm9yICRub2RlOiAkZGF0YSIpOwogICAgICAgIGRhdGEuYXJndW1lbnRUeXBlID0gcmVjZWl2ZXJUeXBlOwogICAgICB9CiAgICAgIGlmIChkYXRhLmlzQ29tcGxldGUpIHsKICAgICAgICAvLy8gV2Ugbm93IGhhdmUgYWxsIG5lZWQgc3RhdGljIHR5cGVzIHNvIHdlIGNhbiByZW1vdmUgdGhlIGRhdGEgZnJvbQogICAgICAgIC8vLyB0aGUgY2FjaGUgYW5kIGhhbmRsZSB0aGUgcnVudGltZSB0eXBlIHVzZS4KICAgICAgICBfcGVuZGluZ1J1bnRpbWVUeXBlVXNlRGF0YS5yZW1vdmUoZGF0YS5sZWZ0UnVudGltZVR5cGVFeHByZXNzaW9uKTsKICAgICAgICBpZiAoZGF0YS5yaWdodFJ1bnRpbWVUeXBlRXhwcmVzc2lvbiAhPSBudWxsKSB7CiAgICAgICAgICBfcGVuZGluZ1J1bnRpbWVUeXBlVXNlRGF0YS5yZW1vdmUoZGF0YS5yaWdodFJ1bnRpbWVUeXBlRXhwcmVzc2lvbik7CiAgICAgICAgfQogICAgICAgIGhhbmRsZVJ1bnRpbWVUeXBlVXNlKAogICAgICAgICAgICBub2RlLCBkYXRhLmtpbmQsIGRhdGEucmVjZWl2ZXJUeXBlLCBkYXRhLmFyZ3VtZW50VHlwZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHRUeXBlOwogIH0KCiAgdm9pZCBoYW5kbGVQcm9wZXJ0eVNldCgKICAgICAgaXIuUHJvcGVydHlTZXQgbm9kZSwgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBpci5EYXJ0VHlwZSB2YWx1ZVR5cGUpIHt9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0UHJvcGVydHlTZXQoaXIuUHJvcGVydHlTZXQgbm9kZSkgewogICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlID0gdmlzaXROb2RlKG5vZGUucmVjZWl2ZXIpOwogICAgaXIuRGFydFR5cGUgdmFsdWVUeXBlID0gc3VwZXIudmlzaXRQcm9wZXJ0eVNldChub2RlKTsKICAgIGlyLk1lbWJlciBpbnRlcmZhY2VUYXJnZXQgPSBub2RlLmludGVyZmFjZVRhcmdldDsKICAgIGlmIChpbnRlcmZhY2VUYXJnZXQgPT0gbnVsbCAmJiByZWNlaXZlclR5cGUgaXMgaXIuSW50ZXJmYWNlVHlwZSkgewogICAgICBpbnRlcmZhY2VUYXJnZXQgPSBoaWVyYXJjaHkKICAgICAgICAgIC5nZXRJbnRlcmZhY2VNZW1iZXIocmVjZWl2ZXJUeXBlLmNsYXNzTm9kZSwgbm9kZS5uYW1lLCBzZXR0ZXI6IHRydWUpOwogICAgICBpZiAoaW50ZXJmYWNlVGFyZ2V0ICE9IG51bGwpIHsKICAgICAgICBpci5DbGFzcyBzdXBlcmNsYXNzID0gaW50ZXJmYWNlVGFyZ2V0LmVuY2xvc2luZ0NsYXNzOwogICAgICAgIGlyLlN1YnN0aXR1dGlvbiByZWNlaXZlclN1YnN0aXR1dGlvbiA9CiAgICAgICAgICAgIGlyLlN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZSgKICAgICAgICAgICAgICAgIGdldFR5cGVBc0luc3RhbmNlT2YocmVjZWl2ZXJUeXBlLCBzdXBlcmNsYXNzKSk7CiAgICAgICAgaXIuRGFydFR5cGUgc2V0dGVyVHlwZSA9CiAgICAgICAgICAgIHJlY2VpdmVyU3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGludGVyZmFjZVRhcmdldC5zZXR0ZXJUeXBlKTsKICAgICAgICBpZiAoIXR5cGVFbnZpcm9ubWVudC5pc1N1YnR5cGVPZih2YWx1ZVR5cGUsIHNldHRlclR5cGUpKSB7CiAgICAgICAgICAvLyBXZSBuZWVkIHRvIGluc2VydCBhbiBpbXBsaWNpdCBjYXN0IHRvIHByZXNlcnZlIHRoZSBpbnZhcmlhbnQgdGhhdAogICAgICAgICAgLy8gYSBwcm9wZXJ0eSBzZXQgd2l0aCBhIGtub3duIGludGVyZmFjZSB0YXJnZXQgaXMgYWxzbyBzdGF0aWNhbGx5CiAgICAgICAgICAvLyBjaGVja2VkLgogICAgICAgICAgaXIuQXNFeHByZXNzaW9uIGltcGxpY2l0Q2FzdCA9CiAgICAgICAgICAgICAgbmV3IGlyLkFzRXhwcmVzc2lvbihub2RlLnZhbHVlLCBzZXR0ZXJUeXBlKQogICAgICAgICAgICAgICAgLi5pc1R5cGVFcnJvciA9IHRydWUKICAgICAgICAgICAgICAgIC4ucGFyZW50ID0gbm9kZTsKICAgICAgICAgIG5vZGUudmFsdWUgPSBpbXBsaWNpdENhc3Q7CiAgICAgICAgICAvLyBWaXNpdCB0aGUgbmV3bHkgY3JlYXRlZCBhcyBleHByZXNzaW9uOyB0aGUgb3JpZ2luYWwgdmFsdWUgaGFzCiAgICAgICAgICAvLyBhbHJlYWR5IGJlZW4gdmlzaXRlZC4KICAgICAgICAgIGhhbmRsZUFzRXhwcmVzc2lvbihpbXBsaWNpdENhc3QsIHZhbHVlVHlwZSk7CiAgICAgICAgICB2YWx1ZVR5cGUgPSBzZXR0ZXJUeXBlOwogICAgICAgIH0KICAgICAgICBub2RlLmludGVyZmFjZVRhcmdldCA9IGludGVyZmFjZVRhcmdldDsKICAgICAgfQogICAgfQogICAgcmVjZWl2ZXJUeXBlID0gX25hcnJvd0luc3RhbmNlUmVjZWl2ZXIoaW50ZXJmYWNlVGFyZ2V0LCByZWNlaXZlclR5cGUpOwogICAgaGFuZGxlUHJvcGVydHlTZXQobm9kZSwgcmVjZWl2ZXJUeXBlLCB2YWx1ZVR5cGUpOwogICAgcmV0dXJuIHZhbHVlVHlwZTsKICB9CgogIHZvaWQgaGFuZGxlRGlyZWN0UHJvcGVydHlHZXQoaXIuRGlyZWN0UHJvcGVydHlHZXQgbm9kZSwKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBpci5EYXJ0VHlwZSByZXN1bHRUeXBlKSB7fQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdERpcmVjdFByb3BlcnR5R2V0KGlyLkRpcmVjdFByb3BlcnR5R2V0IG5vZGUpIHsKICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSA9IHZpc2l0Tm9kZShub2RlLnJlY2VpdmVyKTsKICAgIGlyLkNsYXNzIHN1cGVyY2xhc3MgPSBub2RlLnRhcmdldC5lbmNsb3NpbmdDbGFzczsKICAgIHJlY2VpdmVyVHlwZSA9IGdldFR5cGVBc0luc3RhbmNlT2YocmVjZWl2ZXJUeXBlLCBzdXBlcmNsYXNzKTsKICAgIGlyLkRhcnRUeXBlIHJlc3VsdFR5cGUgPSBpci5TdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUocmVjZWl2ZXJUeXBlKQogICAgICAgIC5zdWJzdGl0dXRlVHlwZShub2RlLnRhcmdldC5nZXR0ZXJUeXBlKTsKICAgIF9leHByZXNzaW9uVHlwZUNhY2hlW25vZGVdID0gcmVzdWx0VHlwZTsKICAgIGhhbmRsZURpcmVjdFByb3BlcnR5R2V0KG5vZGUsIHJlY2VpdmVyVHlwZSwgcmVzdWx0VHlwZSk7CiAgICByZXR1cm4gcmVzdWx0VHlwZTsKICB9CgogIHZvaWQgaGFuZGxlRGlyZWN0TWV0aG9kSW52b2NhdGlvbigKICAgICAgaXIuRGlyZWN0TWV0aG9kSW52b2NhdGlvbiBub2RlLAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsCiAgICAgIEFyZ3VtZW50VHlwZXMgYXJndW1lbnRUeXBlcywKICAgICAgaXIuRGFydFR5cGUgcmV0dXJuVHlwZSkge30KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXREaXJlY3RNZXRob2RJbnZvY2F0aW9uKGlyLkRpcmVjdE1ldGhvZEludm9jYXRpb24gbm9kZSkgewogICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlID0gdmlzaXROb2RlKG5vZGUucmVjZWl2ZXIpOwogICAgQXJndW1lbnRUeXBlcyBhcmd1bWVudFR5cGVzID0gX3Zpc2l0QXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKTsKICAgIGlyLkRhcnRUeXBlIHJldHVyblR5cGU7CiAgICBpZiAodHlwZUVudmlyb25tZW50LmlzT3ZlcmxvYWRlZEFyaXRobWV0aWNPcGVyYXRvcihub2RlLnRhcmdldCkpIHsKICAgICAgaXIuRGFydFR5cGUgYXJndW1lbnRUeXBlID0gYXJndW1lbnRUeXBlcy5wb3NpdGlvbmFsWzBdOwogICAgICByZXR1cm5UeXBlID0gdHlwZUVudmlyb25tZW50LmdldFR5cGVPZk92ZXJsb2FkZWRBcml0aG1ldGljKAogICAgICAgICAgcmVjZWl2ZXJUeXBlLCBhcmd1bWVudFR5cGUpOwogICAgfSBlbHNlIHsKICAgICAgaXIuQ2xhc3Mgc3VwZXJjbGFzcyA9IG5vZGUudGFyZ2V0LmVuY2xvc2luZ0NsYXNzOwogICAgICByZWNlaXZlclR5cGUgPSBnZXRUeXBlQXNJbnN0YW5jZU9mKHJlY2VpdmVyVHlwZSwgc3VwZXJjbGFzcyk7CiAgICAgIGlyLkRhcnRUeXBlIHJldHVyblR5cGUgPSBpci5TdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUocmVjZWl2ZXJUeXBlKQogICAgICAgICAgLnN1YnN0aXR1dGVUeXBlKG5vZGUudGFyZ2V0LmZ1bmN0aW9uLnJldHVyblR5cGUpOwogICAgICByZXR1cm5UeXBlID0gaXIuU3Vic3RpdHV0aW9uLmZyb21QYWlycygKICAgICAgICAgICAgICBub2RlLnRhcmdldC5mdW5jdGlvbi50eXBlUGFyYW1ldGVycywgbm9kZS5hcmd1bWVudHMudHlwZXMpCiAgICAgICAgICAuc3Vic3RpdHV0ZVR5cGUocmV0dXJuVHlwZSk7CiAgICB9CiAgICBfZXhwcmVzc2lvblR5cGVDYWNoZVtub2RlXSA9IHJldHVyblR5cGU7CiAgICBoYW5kbGVEaXJlY3RNZXRob2RJbnZvY2F0aW9uKG5vZGUsIHJlY2VpdmVyVHlwZSwgYXJndW1lbnRUeXBlcywgcmV0dXJuVHlwZSk7CiAgICByZXR1cm4gcmV0dXJuVHlwZTsKICB9CgogIHZvaWQgaGFuZGxlRGlyZWN0UHJvcGVydHlTZXQoaXIuRGlyZWN0UHJvcGVydHlTZXQgbm9kZSwKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBpci5EYXJ0VHlwZSB2YWx1ZVR5cGUpIHt9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0RGlyZWN0UHJvcGVydHlTZXQoaXIuRGlyZWN0UHJvcGVydHlTZXQgbm9kZSkgewogICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlID0gdmlzaXROb2RlKG5vZGUucmVjZWl2ZXIpOwogICAgaXIuRGFydFR5cGUgdmFsdWVUeXBlID0gc3VwZXIudmlzaXREaXJlY3RQcm9wZXJ0eVNldChub2RlKTsKICAgIGhhbmRsZURpcmVjdFByb3BlcnR5U2V0KG5vZGUsIHJlY2VpdmVyVHlwZSwgdmFsdWVUeXBlKTsKICAgIHJldHVybiB2YWx1ZVR5cGU7CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2ludGVyZmFjZVRhcmdldF0gaXMgYW4gYXJpdGhtZXRpYyBvcGVyYXRvciB3aG9zZSByZXN1bHQKICAvLy8gdHlwZSBpcyBjb21wdXRlZCB1c2luZyBib3RoIHRoZSByZWNlaXZlciB0eXBlIGFuZCB0aGUgYXJndW1lbnQgdHlwZS4KICAvLy8KICAvLy8gVmlzaXRvcnMgdGhhdCBzdWJjbGFzcyB0aGUgW1N0YXRpY1R5cGVWaXNpdG9yXSBtdXN0IHNwZWNpYWwgY2FzZSB0aGlzCiAgLy8vIHRhcmdldCBhcyB0byBhdm9pZCB2aXNpdGluZyB0aGUgYXJndW1lbnQgdHdpY2UuCiAgYm9vbCBpc1NwZWNpYWxDYXNlZEJpbmFyeU9wZXJhdG9yKGlyLk1lbWJlciBpbnRlcmZhY2VUYXJnZXQpIHsKICAgIHJldHVybiBpbnRlcmZhY2VUYXJnZXQgaXMgaXIuUHJvY2VkdXJlICYmCiAgICAgICAgdHlwZUVudmlyb25tZW50LmlzT3ZlcmxvYWRlZEFyaXRobWV0aWNPcGVyYXRvcihpbnRlcmZhY2VUYXJnZXQpOwogIH0KCiAgaXIuTWVtYmVyIF9nZXRNZW1iZXIoaXIuQ2xhc3MgY2xzLCBTdHJpbmcgbmFtZSkgewogICAgZm9yIChpci5NZW1iZXIgbWVtYmVyIGluIGNscy5tZW1iZXJzKSB7CiAgICAgIGlmIChtZW1iZXIubmFtZS5uYW1lID09IG5hbWUpIHJldHVybiBtZW1iZXI7CiAgICB9CiAgICB0aHJvdyBmYWlsKCJNZW1iZXIgJyRuYW1lJyBub3QgZm91bmQgaW4gJGNscyIpOwogIH0KCiAgaXIuUHJvY2VkdXJlIF9vYmplY3RFcXVhbHM7CiAgaXIuUHJvY2VkdXJlIGdldCBvYmplY3RFcXVhbHMgPT4KICAgICAgX29iamVjdEVxdWFscyA/Pz0gX2dldE1lbWJlcih0eXBlRW52aXJvbm1lbnQub2JqZWN0VHlwZS5jbGFzc05vZGUsICc9PScpOwoKICAvLy8gUmV0dXJucyBbcmVjZWl2ZXJUeXBlXSBuYXJyb3dlZCB0byBlbmNsb3NpbmcgY2xhc3Mgb2YgW2ludGVyZmFjZVRhcmdldF0uCiAgLy8vCiAgLy8vIElmIFtpbnRlcmZhY2VUYXJnZXRdIGlzIGBudWxsYCBvciBgcmVjZWl2ZXJUeXBlYCBpcyBfbm90XyBgZHluYW1pY2Agbm8KICAvLy8gbmFycm93aW5nIGlzIHBlcmZvcm1lZC4KICBpci5EYXJ0VHlwZSBfbmFycm93SW5zdGFuY2VSZWNlaXZlcigKICAgICAgaXIuTWVtYmVyIGludGVyZmFjZVRhcmdldCwgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlKSB7CiAgICBpZiAoaW50ZXJmYWNlVGFyZ2V0ICE9IG51bGwgJiYgcmVjZWl2ZXJUeXBlID09IGNvbnN0IGlyLkR5bmFtaWNUeXBlKCkpIHsKICAgICAgcmVjZWl2ZXJUeXBlID0gaW50ZXJmYWNlVGFyZ2V0LmVuY2xvc2luZ0NsYXNzLnRoaXNUeXBlOwogICAgfQogICAgcmV0dXJuIHJlY2VpdmVyVHlwZTsKICB9CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbbWVtYmVyXSBjYW4gYmUgY2FsbGVkIHdpdGggdGhlIHN0cnVjdHVyZSBvZgogIC8vLyBbYXJndW1lbnRzXS4KICBib29sIF9pc0FwcGxpY2FibGUoaXIuQXJndW1lbnRzIGFyZ3VtZW50cywgaXIuTWVtYmVyIG1lbWJlcikgewogICAgLy8vIFJldHVybnMgYHRydWVgIGlmIFthcmd1bWVudHNdIGFyZSBhcHBsaWNhYmxlIHRvIHRoZSBmdW5jdGlvbiB0eXBlCiAgICAvLy8gc3RydWN0dXJlLgogICAgYm9vbCBpc0Z1bmN0aW9uVHlwZUFwcGxpY2FibGUoCiAgICAgICAgaW50IHR5cGVQYXJhbWV0ZXJDb3VudCwKICAgICAgICBpbnQgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICBpbnQgcG9zaXRpb25hbFBhcmFtZXRlckNvdW50LAogICAgICAgIEl0ZXJhYmxlPFN0cmluZz4gRnVuY3Rpb24oKSBnZXROYW1lZFBhcmFtZXRlcnMpIHsKICAgICAgaWYgKGFyZ3VtZW50cy50eXBlcy5pc05vdEVtcHR5ICYmCiAgICAgICAgICBhcmd1bWVudHMudHlwZXMubGVuZ3RoICE9IHR5cGVQYXJhbWV0ZXJDb3VudCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBpZiAoYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoIDwgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBpZiAoYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoID4gcG9zaXRpb25hbFBhcmFtZXRlckNvdW50KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIEl0ZXJhYmxlPFN0cmluZz4gbmFtZWRQYXJhbWV0ZXJzID0gZ2V0TmFtZWRQYXJhbWV0ZXJzKCk7CiAgICAgIGlmIChhcmd1bWVudHMubmFtZWQubGVuZ3RoID4gbmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBpZiAoYXJndW1lbnRzLm5hbWVkLmlzTm90RW1wdHkpIHsKICAgICAgICBmb3IgKGlyLk5hbWVkRXhwcmVzc2lvbiBuYW1lZEFyZ3VtZW50cyBpbiBhcmd1bWVudHMubmFtZWQpIHsKICAgICAgICAgIGlmICghbmFtZWRQYXJhbWV0ZXJzLmNvbnRhaW5zKG5hbWVkQXJndW1lbnRzLm5hbWUpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLy8vIFJldHVybnMgYHRydWVgIGlmIFthcmd1bWVudHNdIGFyZSBhcHBsaWNhYmxlIHRvIGEgdmFsdWUgb2YgdGhlIHN0YXRpYwogICAgLy8vIFt0eXBlXS4KICAgIGJvb2wgaXNUeXBlQXBwbGljYWJsZShpci5EYXJ0VHlwZSB0eXBlKSB7CiAgICAgIGlmICh0eXBlIGlzIGlyLkR5bmFtaWNUeXBlKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKHR5cGUgPT0gdHlwZUVudmlyb25tZW50LnJhd0Z1bmN0aW9uVHlwZSkgcmV0dXJuIHRydWU7CiAgICAgIGlmICh0eXBlIGlzIGlyLkZ1bmN0aW9uVHlwZSkgewogICAgICAgIHJldHVybiBpc0Z1bmN0aW9uVHlwZUFwcGxpY2FibGUoCiAgICAgICAgICAgIHR5cGUudHlwZVBhcmFtZXRlcnMubGVuZ3RoLAogICAgICAgICAgICB0eXBlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICAgICAgICAgIHR5cGUucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoLAogICAgICAgICAgICAoKSA9PiB0eXBlLm5hbWVkUGFyYW1ldGVycy5tYXAoKHApID0+IHAubmFtZSkudG9TZXQoKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChtZW1iZXIgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICAgIGlmIChtZW1iZXIua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLlNldHRlciB8fAogICAgICAgICAgbWVtYmVyLmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5GYWN0b3J5KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9IGVsc2UgaWYgKG1lbWJlci5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuR2V0dGVyKSB7CiAgICAgICAgcmV0dXJuIGlzVHlwZUFwcGxpY2FibGUobWVtYmVyLmdldHRlclR5cGUpOwogICAgICB9IGVsc2UgaWYgKG1lbWJlci5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuTWV0aG9kIHx8CiAgICAgICAgICBtZW1iZXIua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLk9wZXJhdG9yKSB7CiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb25UeXBlQXBwbGljYWJsZSgKICAgICAgICAgICAgbWVtYmVyLmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCwKICAgICAgICAgICAgbWVtYmVyLmZ1bmN0aW9uLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICAgICAgICAgIG1lbWJlci5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgsCiAgICAgICAgICAgICgpID0+IG1lbWJlci5mdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMubWFwKChwKSA9PiBwLm5hbWUpLnRvU2V0KCkpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKG1lbWJlciBpcyBpci5GaWVsZCkgewogICAgICByZXR1cm4gaXNUeXBlQXBwbGljYWJsZShtZW1iZXIudHlwZSk7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLy8gVXBkYXRlIHRoZSBpbnRlcmZhY2UgdGFyZ2V0IG9uIFtub2RlXS4KICAvLy8KICAvLy8gVGhpcyBpbnNlcnRzIGFueSBpbXBsaWNpdCBjYXN0IG9mIHRoZSBhcmd1bWVudHMgbmVjZXNzYXJ5IHRvIHVwaG9sZCB0aGUKICAvLy8gaW52YXJpYW50IHRoYXQgYSBtZXRob2QgaW52b2NhdGlvbiB3aXRoIGFuIGludGVyZmFjZSB0YXJnZXQgaGFuZGxlcwogIC8vLyB0aGUgc3RhdGljIHR5cGVzIGF0IHRoZSBjYWxsIHNpdGUuCiAgdm9pZCBfdXBkYXRlTWV0aG9kSW52b2NhdGlvblRhcmdldCgKICAgICAgaXIuTWV0aG9kSW52b2NhdGlvbiBub2RlLAogICAgICBBcmd1bWVudFR5cGVzIGFyZ3VtZW50VHlwZXMsCiAgICAgIGlyLkRhcnRUeXBlIGZ1bmN0aW9uVHlwZSwKICAgICAgaXIuTWVtYmVyIGludGVyZmFjZVRhcmdldCkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSGFuZGxlIGluY3JlbWVudGFsIHRhcmdldCBpbXByb3ZlbWVudC4KICAgIGlmIChub2RlLmludGVyZmFjZVRhcmdldCAhPSBudWxsKSByZXR1cm47CiAgICBub2RlLmludGVyZmFjZVRhcmdldCA9IGludGVyZmFjZVRhcmdldDsKICAgIGlmIChmdW5jdGlvblR5cGUgaXMhIGlyLkZ1bmN0aW9uVHlwZSkgcmV0dXJuOwogICAgaXIuRnVuY3Rpb25UeXBlIHBhcmFtZXRlclR5cGVzID0gZnVuY3Rpb25UeXBlOwogICAgTWFwPGludCwgaXIuRGFydFR5cGU+IG5lZWRlZFBvc2l0aW9uYWxDaGVja3MgPSB7fTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGg7IGkrKykgewogICAgICBpci5EYXJ0VHlwZSBhcmd1bWVudFR5cGUgPSBhcmd1bWVudFR5cGVzLnBvc2l0aW9uYWxbaV07CiAgICAgIGlyLkRhcnRUeXBlIHBhcmFtZXRlclR5cGUgPSBwYXJhbWV0ZXJUeXBlcy5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXTsKICAgICAgaWYgKCF0eXBlRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YoYXJndW1lbnRUeXBlLCBwYXJhbWV0ZXJUeXBlKSkgewogICAgICAgIG5lZWRlZFBvc2l0aW9uYWxDaGVja3NbaV0gPSBwYXJhbWV0ZXJUeXBlOwogICAgICB9CiAgICB9CiAgICBNYXA8aW50LCBpci5EYXJ0VHlwZT4gbmVlZGVkTmFtZWRDaGVja3MgPSB7fTsKICAgIGZvciAoaW50IGFyZ3VtZW50SW5kZXggPSAwOwogICAgICAgIGFyZ3VtZW50SW5kZXggPCBub2RlLmFyZ3VtZW50cy5uYW1lZC5sZW5ndGg7CiAgICAgICAgYXJndW1lbnRJbmRleCsrKSB7CiAgICAgIGlyLk5hbWVkRXhwcmVzc2lvbiBuYW1lZEFyZ3VtZW50ID0gbm9kZS5hcmd1bWVudHMubmFtZWRbYXJndW1lbnRJbmRleF07CiAgICAgIGlyLkRhcnRUeXBlIGFyZ3VtZW50VHlwZSA9IGFyZ3VtZW50VHlwZXMubmFtZWRbYXJndW1lbnRJbmRleF07CiAgICAgIGlyLkRhcnRUeXBlIHBhcmFtZXRlclR5cGUgPSBwYXJhbWV0ZXJUeXBlcy5uYW1lZFBhcmFtZXRlcnMKICAgICAgICAgIC5zaW5nbGVXaGVyZSgobmFtZWRUeXBlKSA9PiBuYW1lZFR5cGUubmFtZSA9PSBuYW1lZEFyZ3VtZW50Lm5hbWUpCiAgICAgICAgICAudHlwZTsKICAgICAgaWYgKCF0eXBlRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YoYXJndW1lbnRUeXBlLCBwYXJhbWV0ZXJUeXBlKSkgewogICAgICAgIG5lZWRlZE5hbWVkQ2hlY2tzW2FyZ3VtZW50SW5kZXhdID0gcGFyYW1ldGVyVHlwZTsKICAgICAgfQogICAgfQogICAgaWYgKG5lZWRlZFBvc2l0aW9uYWxDaGVja3MuaXNFbXB0eSAmJiBuZWVkZWROYW1lZENoZWNrcy5pc0VtcHR5KSB7CiAgICAgIC8vIE5vIGltcGxpY2l0IGNhc3RzIG5lZWRlZAogICAgICByZXR1cm47CiAgICB9CgogICAgTGlzdDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBsZXRWYXJpYWJsZXMgPSBbXTsKCiAgICAvLyBBcmd1bWVudHMgbmVlZCB0byBiZSBob2lzdGVkIHRvIGFuIGVuY2xvc2luZyBsZXQgZXhwcmVzc2lvbiBpbiBvcmRlcgogICAgLy8gdG8gZW5zdXJlIHRoYXQgdGhlIGFyZ3VtZW50cyBhcmUgZXZhbHVhdGVkIGJlZm9yZSBhbnkgaW1wbGljaXQgY2FzdC4KCiAgICBpci5FeHByZXNzaW9uIHVwZGF0ZUFyZ3VtZW50KGlyLkV4cHJlc3Npb24gZXhwcmVzc2lvbiwgaXIuVHJlZU5vZGUgcGFyZW50LAogICAgICAgIGlyLkRhcnRUeXBlIGFyZ3VtZW50VHlwZSwgaXIuRGFydFR5cGUgY2hlY2tlZFBhcmFtZXRlclR5cGUpIHsKICAgICAgaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSA9CiAgICAgICAgICBuZXcgaXIuVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZShleHByZXNzaW9uLCB0eXBlOiBhcmd1bWVudFR5cGUpOwogICAgICAvLyBWaXNpdCB0aGUgbmV3bHkgY3JlYXRlZCB2YXJpYWJsZSBkZWNsYXJhdGlvbi4KICAgICAgaGFuZGxlVmFyaWFibGVEZWNsYXJhdGlvbih2YXJpYWJsZSk7CiAgICAgIGxldFZhcmlhYmxlcy5hZGQodmFyaWFibGUpOwogICAgICBpci5WYXJpYWJsZUdldCBnZXQgPSBuZXcgaXIuVmFyaWFibGVHZXQodmFyaWFibGUpLi5wYXJlbnQgPSBwYXJlbnQ7CiAgICAgIC8vIFZpc2l0IHRoZSBuZXdseSBjcmVhdGVkIHZhcmlhYmxlIGdldC4KICAgICAgaGFuZGxlVmFyaWFibGVHZXQoZ2V0LCBhcmd1bWVudFR5cGUpOwogICAgICBfZXhwcmVzc2lvblR5cGVDYWNoZVtnZXRdID0gYXJndW1lbnRUeXBlOwoKICAgICAgaWYgKGNoZWNrZWRQYXJhbWV0ZXJUeXBlID09IG51bGwpIHsKICAgICAgICByZXR1cm4gZ2V0OwogICAgICB9CiAgICAgIC8vIFdlIG5lZWQgdG8gaW5zZXJ0IGFuIGltcGxpY2l0IGNhc3QgdG8gcHJlc2VydmUgdGhlIGludmFyaWFudCB0aGF0CiAgICAgIC8vIGEgbWV0aG9kIGludm9jYXRpb24gd2l0aCBhIGtub3duIGludGVyZmFjZSB0YXJnZXQgaXMgYWxzbwogICAgICAvLyBzdGF0aWNhbGx5IGNoZWNrZWQuCiAgICAgIGlyLkFzRXhwcmVzc2lvbiBpbXBsaWNpdENhc3QgPQogICAgICAgICAgbmV3IGlyLkFzRXhwcmVzc2lvbihnZXQsIGNoZWNrZWRQYXJhbWV0ZXJUeXBlKQogICAgICAgICAgICAuLmlzVHlwZUVycm9yID0gdHJ1ZQogICAgICAgICAgICAuLnBhcmVudCA9IHBhcmVudDsKICAgICAgLy8gVmlzaXQgdGhlIG5ld2x5IGNyZWF0ZWQgYXMgZXhwcmVzc2lvbjsgdGhlIG9yaWdpbmFsIHZhbHVlIGhhcwogICAgICAvLyBhbHJlYWR5IGJlZW4gdmlzaXRlZC4KICAgICAgaGFuZGxlQXNFeHByZXNzaW9uKGltcGxpY2l0Q2FzdCwgYXJndW1lbnRUeXBlKTsKICAgICAgcmV0dXJuIGltcGxpY2l0Q2FzdDsKICAgIH0KCiAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgbm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGg7IGluZGV4KyspIHsKICAgICAgaXIuRGFydFR5cGUgYXJndW1lbnRUeXBlID0gYXJndW1lbnRUeXBlcy5wb3NpdGlvbmFsW2luZGV4XTsKICAgICAgbm9kZS5hcmd1bWVudHMucG9zaXRpb25hbFtpbmRleF0gPSB1cGRhdGVBcmd1bWVudCgKICAgICAgICAgIG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWxbaW5kZXhdLAogICAgICAgICAgbm9kZS5hcmd1bWVudHMsCiAgICAgICAgICBhcmd1bWVudFR5cGUsCiAgICAgICAgICBuZWVkZWRQb3NpdGlvbmFsQ2hlY2tzW2luZGV4XSk7CiAgICB9CiAgICBmb3IgKGludCBhcmd1bWVudEluZGV4ID0gMDsKICAgICAgICBhcmd1bWVudEluZGV4IDwgbm9kZS5hcmd1bWVudHMubmFtZWQubGVuZ3RoOwogICAgICAgIGFyZ3VtZW50SW5kZXgrKykgewogICAgICBpci5OYW1lZEV4cHJlc3Npb24gbmFtZWRBcmd1bWVudCA9IG5vZGUuYXJndW1lbnRzLm5hbWVkW2FyZ3VtZW50SW5kZXhdOwogICAgICBpci5EYXJ0VHlwZSBhcmd1bWVudFR5cGUgPSBhcmd1bWVudFR5cGVzLm5hbWVkW2FyZ3VtZW50SW5kZXhdOwogICAgICBuYW1lZEFyZ3VtZW50LnZhbHVlID0gdXBkYXRlQXJndW1lbnQobmFtZWRBcmd1bWVudC52YWx1ZSwgbmFtZWRBcmd1bWVudCwKICAgICAgICAgIGFyZ3VtZW50VHlwZSwgbmVlZGVkTmFtZWRDaGVja3NbYXJndW1lbnRJbmRleF0pOwogICAgfQoKICAgIGlyLkV4cHJlc3Npb24gZHVtbXkgPSBuZXcgaXIuTnVsbExpdGVyYWwoKTsKICAgIG5vZGUucmVwbGFjZVdpdGgoZHVtbXkpOwogICAgaXIuRXhwcmVzc2lvbiBib2R5ID0gbm9kZTsKICAgIGZvciAoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSBpbiBsZXRWYXJpYWJsZXMucmV2ZXJzZWQpIHsKICAgICAgYm9keSA9IG5ldyBpci5MZXQodmFyaWFibGUsIGJvZHkpOwogICAgfQogICAgZHVtbXkucmVwbGFjZVdpdGgoYm9keSk7CiAgfQoKICAvLy8gQ29tcHV0ZXMgdGhlIHJlc3VsdCB0eXBlIG9mIHRoZSBtZXRob2QgaW52b2NhdGlvbiBbbm9kZV0gb24gYSByZWNlaXZlciBvZgogIC8vLyB0eXBlIFtyZWNlaXZlclR5cGVdLgogIC8vLwogIC8vLyBJZiB0aGUgYG5vZGUuaW50ZXJmYWNlVGFyZ2V0YCBpcyBgbnVsbGAgYnV0IG1hdGNoZXMgYW4gYE9iamVjdGAgbWVtYmVyCiAgLy8vIGl0IGlzIHVwZGF0ZWQgdG8gdGFyZ2V0IHRoaXMgbWVtYmVyLgogIGlyLkRhcnRUeXBlIF9jb21wdXRlTWV0aG9kSW52b2NhdGlvblR5cGUoaXIuTWV0aG9kSW52b2NhdGlvbiBub2RlLAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsIEFyZ3VtZW50VHlwZXMgYXJndW1lbnRUeXBlcykgewogICAgaXIuTWVtYmVyIGludGVyZmFjZVRhcmdldCA9IG5vZGUuaW50ZXJmYWNlVGFyZ2V0OwogICAgLy8gVE9ETygzNDYwMik6IFJlbW92ZSB3aGVuIGBpbnRlcmZhY2VUYXJnZXRgIGlzIHNldCBvbiBzeW50aGV0aWMgY2FsbHMgdG8KICAgIC8vID09LgogICAgaWYgKGludGVyZmFjZVRhcmdldCA9PSBudWxsICYmCiAgICAgICAgbm9kZS5uYW1lLm5hbWUgPT0gJz09JyAmJgogICAgICAgIG5vZGUuYXJndW1lbnRzLnR5cGVzLmlzRW1wdHkgJiYKICAgICAgICBub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCA9PSAxICYmCiAgICAgICAgbm9kZS5hcmd1bWVudHMubmFtZWQuaXNFbXB0eSkgewogICAgICBpbnRlcmZhY2VUYXJnZXQgPSBub2RlLmludGVyZmFjZVRhcmdldCA9IG9iamVjdEVxdWFsczsKICAgIH0KICAgIGlmIChpbnRlcmZhY2VUYXJnZXQgPT0gbnVsbCAmJiByZWNlaXZlclR5cGUgaXMgaXIuSW50ZXJmYWNlVHlwZSkgewogICAgICBpci5NZW1iZXIgbWVtYmVyID0KICAgICAgICAgIGhpZXJhcmNoeS5nZXRJbnRlcmZhY2VNZW1iZXIocmVjZWl2ZXJUeXBlLmNsYXNzTm9kZSwgbm9kZS5uYW1lKTsKICAgICAgaWYgKF9pc0FwcGxpY2FibGUobm9kZS5hcmd1bWVudHMsIG1lbWJlcikpIHsKICAgICAgICBpbnRlcmZhY2VUYXJnZXQgPSBtZW1iZXI7CiAgICAgIH0KICAgIH0KICAgIGlmIChpbnRlcmZhY2VUYXJnZXQgIT0gbnVsbCkgewogICAgICBpci5DbGFzcyBzdXBlcmNsYXNzID0gaW50ZXJmYWNlVGFyZ2V0LmVuY2xvc2luZ0NsYXNzOwogICAgICBpci5TdWJzdGl0dXRpb24gcmVjZWl2ZXJTdWJzdGl0dXRpb24gPSBpci5TdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUoCiAgICAgICAgICBnZXRUeXBlQXNJbnN0YW5jZU9mKHJlY2VpdmVyVHlwZSwgc3VwZXJjbGFzcykpOwogICAgICBpci5EYXJ0VHlwZSBnZXR0ZXJUeXBlID0KICAgICAgICAgIHJlY2VpdmVyU3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGludGVyZmFjZVRhcmdldC5nZXR0ZXJUeXBlKTsKICAgICAgaWYgKGdldHRlclR5cGUgaXMgaXIuRnVuY3Rpb25UeXBlKSB7CiAgICAgICAgaXIuRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9IGdldHRlclR5cGU7CiAgICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9IG5vZGUuYXJndW1lbnRzLnR5cGVzOwogICAgICAgIGlmIChpbnRlcmZhY2VUYXJnZXQgaXMgaXIuUHJvY2VkdXJlICYmCiAgICAgICAgICAgIGludGVyZmFjZVRhcmdldC5mdW5jdGlvbi50eXBlUGFyYW1ldGVycy5pc05vdEVtcHR5ICYmCiAgICAgICAgICAgIHR5cGVBcmd1bWVudHMuaXNFbXB0eSkgewogICAgICAgICAgLy8gSWYgdGhpcyB3YXMgYSBkeW5hbWljIGNhbGwgdGhlIGludm9jYXRpb24gZG9lcyBub3QgaGF2ZSB0aGUKICAgICAgICAgIC8vIGluZmVycmVkIGRlZmF1bHQgdHlwZSBhcmd1bWVudHMgc28gd2UgbmVlZCB0byBjcmVhdGUgdGhlbSBoZXJlCiAgICAgICAgICAvLyB0byBwZXJmb3JtIGEgdmFsaWQgc3Vic3RpdHV0aW9uLgogICAgICAgICAgdHlwZUFyZ3VtZW50cyA9IGludGVyZmFjZVRhcmdldC5mdW5jdGlvbi50eXBlUGFyYW1ldGVycwogICAgICAgICAgICAgIC5tYXAoKHQpID0+IHJlY2VpdmVyU3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKHQuZGVmYXVsdFR5cGUpKQogICAgICAgICAgICAgIC50b0xpc3QoKTsKICAgICAgICB9CiAgICAgICAgZ2V0dGVyVHlwZSA9IGlyLlN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoCiAgICAgICAgICAgICAgICBmdW5jdGlvblR5cGUudHlwZVBhcmFtZXRlcnMsIHR5cGVBcmd1bWVudHMpCiAgICAgICAgICAgIC5zdWJzdGl0dXRlVHlwZShmdW5jdGlvblR5cGUud2l0aG91dFR5cGVQYXJhbWV0ZXJzKTsKICAgICAgfQogICAgICBfdXBkYXRlTWV0aG9kSW52b2NhdGlvblRhcmdldCgKICAgICAgICAgIG5vZGUsIGFyZ3VtZW50VHlwZXMsIGdldHRlclR5cGUsIGludGVyZmFjZVRhcmdldCk7CiAgICAgIGlmIChpc1NwZWNpYWxDYXNlZEJpbmFyeU9wZXJhdG9yKGludGVyZmFjZVRhcmdldCkpIHsKICAgICAgICBpci5EYXJ0VHlwZSBhcmd1bWVudFR5cGUgPSBhcmd1bWVudFR5cGVzLnBvc2l0aW9uYWxbMF07CiAgICAgICAgcmV0dXJuIHR5cGVFbnZpcm9ubWVudC5nZXRUeXBlT2ZPdmVybG9hZGVkQXJpdGhtZXRpYygKICAgICAgICAgICAgcmVjZWl2ZXJUeXBlLCBhcmd1bWVudFR5cGUpOwogICAgICB9IGVsc2UgaWYgKGdldHRlclR5cGUgaXMgaXIuRnVuY3Rpb25UeXBlKSB7CiAgICAgICAgcmV0dXJuIGdldHRlclR5cGUucmV0dXJuVHlwZTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gY29uc3QgaXIuRHluYW1pY1R5cGUoKTsKICAgICAgfQogICAgfQogICAgaWYgKG5vZGUubmFtZS5uYW1lID09ICdjYWxsJykgewogICAgICBpZiAocmVjZWl2ZXJUeXBlIGlzIGlyLkZ1bmN0aW9uVHlwZSkgewogICAgICAgIGlmIChyZWNlaXZlclR5cGUudHlwZVBhcmFtZXRlcnMubGVuZ3RoICE9IG5vZGUuYXJndW1lbnRzLnR5cGVzLmxlbmd0aCkgewogICAgICAgICAgcmV0dXJuIGNvbnN0IERvZXNOb3RDb21wbGV0ZVR5cGUoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGlyLlN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoCiAgICAgICAgICAgICAgICByZWNlaXZlclR5cGUudHlwZVBhcmFtZXRlcnMsIG5vZGUuYXJndW1lbnRzLnR5cGVzKQogICAgICAgICAgICAuc3Vic3RpdHV0ZVR5cGUocmVjZWl2ZXJUeXBlLnJldHVyblR5cGUpOwogICAgICB9CiAgICB9CiAgICBpZiAobm9kZS5uYW1lLm5hbWUgPT0gJz09JykgewogICAgICAvLyBXZSB1c2UgdGhpcyBzcGVjaWFsIGNhc2UgdG8gc2ltcGxpZnkgZ2VuZXJhdGlvbiBvZiAnPT0nIGNoZWNrcy4KICAgICAgcmV0dXJuIHR5cGVFbnZpcm9ubWVudC5ib29sVHlwZTsKICAgIH0KICAgIHJldHVybiBjb25zdCBpci5EeW5hbWljVHlwZSgpOwogIH0KCiAgQXJndW1lbnRUeXBlcyBfdmlzaXRBcmd1bWVudHMoaXIuQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgTGlzdDxpci5EYXJ0VHlwZT4gcG9zaXRpb25hbDsKICAgIExpc3Q8aXIuRGFydFR5cGU+IG5hbWVkOwogICAgaWYgKGFyZ3VtZW50cy5wb3NpdGlvbmFsLmlzRW1wdHkpIHsKICAgICAgcG9zaXRpb25hbCA9IGNvbnN0IDxpci5EYXJ0VHlwZT5bXTsKICAgIH0gZWxzZSB7CiAgICAgIHBvc2l0aW9uYWwgPSBuZXcgTGlzdDxpci5EYXJ0VHlwZT4oYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoKTsKICAgICAgaW50IGluZGV4ID0gMDsKICAgICAgZm9yIChpci5FeHByZXNzaW9uIGFyZ3VtZW50IGluIGFyZ3VtZW50cy5wb3NpdGlvbmFsKSB7CiAgICAgICAgcG9zaXRpb25hbFtpbmRleCsrXSA9IHZpc2l0Tm9kZShhcmd1bWVudCk7CiAgICAgIH0KICAgIH0KICAgIGlmIChhcmd1bWVudHMubmFtZWQuaXNFbXB0eSkgewogICAgICBuYW1lZCA9IGNvbnN0IDxpci5EYXJ0VHlwZT5bXTsKICAgIH0gZWxzZSB7CiAgICAgIG5hbWVkID0gbmV3IExpc3Q8aXIuRGFydFR5cGU+KGFyZ3VtZW50cy5uYW1lZC5sZW5ndGgpOwogICAgICBpbnQgaW5kZXggPSAwOwogICAgICBmb3IgKGlyLk5hbWVkRXhwcmVzc2lvbiBhcmd1bWVudCBpbiBhcmd1bWVudHMubmFtZWQpIHsKICAgICAgICBuYW1lZFtpbmRleCsrXSA9IHZpc2l0Tm9kZShhcmd1bWVudCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgQXJndW1lbnRUeXBlcyhwb3NpdGlvbmFsLCBuYW1lZCk7CiAgfQoKICB2b2lkIGhhbmRsZU1ldGhvZEludm9jYXRpb24oCiAgICAgIGlyLk1ldGhvZEludm9jYXRpb24gbm9kZSwKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLAogICAgICBBcmd1bWVudFR5cGVzIGFyZ3VtZW50VHlwZXMsCiAgICAgIGlyLkRhcnRUeXBlIHJldHVyblR5cGUpIHt9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0TWV0aG9kSW52b2NhdGlvbihpci5NZXRob2RJbnZvY2F0aW9uIG5vZGUpIHsKICAgIEFyZ3VtZW50VHlwZXMgYXJndW1lbnRUeXBlcyA9IF92aXNpdEFyZ3VtZW50cyhub2RlLmFyZ3VtZW50cyk7CiAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUgPSB2aXNpdE5vZGUobm9kZS5yZWNlaXZlcik7CiAgICBpci5EYXJ0VHlwZSByZXR1cm5UeXBlID0KICAgICAgICBfY29tcHV0ZU1ldGhvZEludm9jYXRpb25UeXBlKG5vZGUsIHJlY2VpdmVyVHlwZSwgYXJndW1lbnRUeXBlcyk7CiAgICByZWNlaXZlclR5cGUgPSBfbmFycm93SW5zdGFuY2VSZWNlaXZlcihub2RlLmludGVyZmFjZVRhcmdldCwgcmVjZWl2ZXJUeXBlKTsKICAgIGlmIChub2RlLm5hbWUubmFtZSA9PSAnPT0nKSB7CiAgICAgIGlyLkV4cHJlc3Npb24gbGVmdCA9IG5vZGUucmVjZWl2ZXI7CiAgICAgIGlyLkV4cHJlc3Npb24gcmlnaHQgPSBub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsWzBdOwogICAgICBUeXBlTWFwIGFmdGVySW52b2NhdGlvbiA9IHR5cGVNYXA7CiAgICAgIGlmIChsZWZ0IGlzIGlyLlZhcmlhYmxlR2V0ICYmCiAgICAgICAgICByaWdodCBpcyBpci5OdWxsTGl0ZXJhbCAmJgogICAgICAgICAgIV9pbnZhbGlkYXRlZFZhcmlhYmxlcy5jb250YWlucyhsZWZ0LnZhcmlhYmxlKSkgewogICAgICAgIC8vIElmIGBsZWZ0ID09IG51bGxgIGlzIHRydWUsIHdlIHByb21vdGUgdGhlIHR5cGUgb2YgdGhlIHZhcmlhYmxlIHRvCiAgICAgICAgLy8gYE51bGxgIGJ5IHJlZ2lzdGVyaW5nIHRoYXQgaXMga25vd24gX25vdF8gdG8gYmUgb2YgaXRzIGRlY2xhcmVkIHR5cGUuCiAgICAgICAgdHlwZU1hcFdoZW5UcnVlID0gYWZ0ZXJJbnZvY2F0aW9uCiAgICAgICAgICAgIC5wcm9tb3RlKGxlZnQudmFyaWFibGUsIGxlZnQudmFyaWFibGUudHlwZSwgaXNUcnVlOiBmYWxzZSk7CiAgICAgICAgdHlwZU1hcFdoZW5GYWxzZSA9IGFmdGVySW52b2NhdGlvbgogICAgICAgICAgICAucHJvbW90ZShsZWZ0LnZhcmlhYmxlLCBsZWZ0LnZhcmlhYmxlLnR5cGUsIGlzVHJ1ZTogdHJ1ZSk7CiAgICAgIH0KICAgICAgaWYgKHJpZ2h0IGlzIGlyLlZhcmlhYmxlR2V0ICYmCiAgICAgICAgICBsZWZ0IGlzIGlyLk51bGxMaXRlcmFsICYmCiAgICAgICAgICAhX2ludmFsaWRhdGVkVmFyaWFibGVzLmNvbnRhaW5zKHJpZ2h0LnZhcmlhYmxlKSkgewogICAgICAgIC8vIElmIGBudWxsID09IHJpZ2h0YCBpcyB0cnVlLCB3ZSBwcm9tb3RlIHRoZSB0eXBlIG9mIHRoZSB2YXJpYWJsZSB0bwogICAgICAgIC8vIGBOdWxsYCBieSByZWdpc3RlcmluZyB0aGF0IGlzIGtub3duIF9ub3RfIHRvIGJlIG9mIGl0cyBkZWNsYXJlZCB0eXBlLgogICAgICAgIHR5cGVNYXBXaGVuVHJ1ZSA9IGFmdGVySW52b2NhdGlvbgogICAgICAgICAgICAucHJvbW90ZShyaWdodC52YXJpYWJsZSwgcmlnaHQudmFyaWFibGUudHlwZSwgaXNUcnVlOiBmYWxzZSk7CiAgICAgICAgdHlwZU1hcFdoZW5GYWxzZSA9IGFmdGVySW52b2NhdGlvbgogICAgICAgICAgICAucHJvbW90ZShyaWdodC52YXJpYWJsZSwgcmlnaHQudmFyaWFibGUudHlwZSwgaXNUcnVlOiB0cnVlKTsKICAgICAgfQogICAgfQogICAgX2V4cHJlc3Npb25UeXBlQ2FjaGVbbm9kZV0gPSByZXR1cm5UeXBlOwogICAgaGFuZGxlTWV0aG9kSW52b2NhdGlvbihub2RlLCByZWNlaXZlclR5cGUsIGFyZ3VtZW50VHlwZXMsIHJldHVyblR5cGUpOwogICAgcmV0dXJuIHJldHVyblR5cGU7CiAgfQoKICB2b2lkIGhhbmRsZVZhcmlhYmxlR2V0KGlyLlZhcmlhYmxlR2V0IG5vZGUsIGlyLkRhcnRUeXBlIHR5cGUpIHt9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0VmFyaWFibGVHZXQoaXIuVmFyaWFibGVHZXQgbm9kZSkgewogICAgaWYgKHR5cGVNYXBzRm9yVGVzdGluZyAhPSBudWxsKSB7CiAgICAgIHR5cGVNYXBzRm9yVGVzdGluZ1tub2RlXSA9IHR5cGVNYXA7CiAgICB9CiAgICBpci5EYXJ0VHlwZSBwcm9tb3RlZFR5cGUgPSB0eXBlTWFwLnR5cGVPZihub2RlLCB0eXBlRW52aXJvbm1lbnQpOwogICAgYXNzZXJ0KAogICAgICAgIG5vZGUucHJvbW90ZWRUeXBlID09IG51bGwgfHwKICAgICAgICAgICAgcHJvbW90ZWRUeXBlID09IHR5cGVFbnZpcm9ubWVudC5udWxsVHlwZSB8fAogICAgICAgICAgICB0eXBlRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YocHJvbW90ZWRUeXBlLCBub2RlLnByb21vdGVkVHlwZSksCiAgICAgICAgIlVuZXhwZWN0ZWQgcHJvbW90aW9uIG9mICR7bm9kZS52YXJpYWJsZX0gaW4gJHtub2RlLnBhcmVudH0uICIKICAgICAgICAiRXhwZWN0ZWQgJHtub2RlLnByb21vdGVkVHlwZX0sIGZvdW5kICRwcm9tb3RlZFR5cGUiKTsKICAgIF9leHByZXNzaW9uVHlwZUNhY2hlW25vZGVdID0gcHJvbW90ZWRUeXBlOwogICAgaGFuZGxlVmFyaWFibGVHZXQobm9kZSwgcHJvbW90ZWRUeXBlKTsKICAgIHJldHVybiBwcm9tb3RlZFR5cGU7CiAgfQoKICB2b2lkIGhhbmRsZVZhcmlhYmxlU2V0KGlyLlZhcmlhYmxlU2V0IG5vZGUsIGlyLkRhcnRUeXBlIHJlc3VsdFR5cGUpIHt9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0VmFyaWFibGVTZXQoaXIuVmFyaWFibGVTZXQgbm9kZSkgewogICAgaXIuRGFydFR5cGUgcmVzdWx0VHlwZSA9IHN1cGVyLnZpc2l0VmFyaWFibGVTZXQobm9kZSk7CiAgICBoYW5kbGVWYXJpYWJsZVNldChub2RlLCByZXN1bHRUeXBlKTsKICAgIGlmICghX2N1cnJlbnRWYXJpYWJsZXMuY29udGFpbnMobm9kZS52YXJpYWJsZSkpIHsKICAgICAgX2ludmFsaWRhdGVkVmFyaWFibGVzLmFkZChub2RlLnZhcmlhYmxlKTsKICAgICAgdHlwZU1hcCA9IHR5cGVNYXAucmVtb3ZlKFtub2RlLnZhcmlhYmxlXSk7CiAgICB9IGVsc2UgewogICAgICB0eXBlTWFwID0gdHlwZU1hcC5yZWR1Y2Uobm9kZSwgcmVzdWx0VHlwZSwgdHlwZUVudmlyb25tZW50KTsKICAgIH0KICAgIHJldHVybiByZXN1bHRUeXBlOwogIH0KCiAgdm9pZCBoYW5kbGVTdGF0aWNHZXQoaXIuU3RhdGljR2V0IG5vZGUsIGlyLkRhcnRUeXBlIHJlc3VsdFR5cGUpIHt9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0U3RhdGljR2V0KGlyLlN0YXRpY0dldCBub2RlKSB7CiAgICBpci5EYXJ0VHlwZSByZXN1bHRUeXBlID0gc3VwZXIudmlzaXRTdGF0aWNHZXQobm9kZSk7CiAgICBoYW5kbGVTdGF0aWNHZXQobm9kZSwgcmVzdWx0VHlwZSk7CiAgICByZXR1cm4gcmVzdWx0VHlwZTsKICB9CgogIHZvaWQgaGFuZGxlU3RhdGljU2V0KGlyLlN0YXRpY1NldCBub2RlLCBpci5EYXJ0VHlwZSB2YWx1ZVR5cGUpIHt9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0U3RhdGljU2V0KGlyLlN0YXRpY1NldCBub2RlKSB7CiAgICBpci5EYXJ0VHlwZSB2YWx1ZVR5cGUgPSBzdXBlci52aXNpdFN0YXRpY1NldChub2RlKTsKICAgIGhhbmRsZVN0YXRpY1NldChub2RlLCB2YWx1ZVR5cGUpOwogICAgcmV0dXJuIHZhbHVlVHlwZTsKICB9CgogIHZvaWQgaGFuZGxlU3RhdGljSW52b2NhdGlvbihpci5TdGF0aWNJbnZvY2F0aW9uIG5vZGUsCiAgICAgIEFyZ3VtZW50VHlwZXMgYXJndW1lbnRUeXBlcywgaXIuRGFydFR5cGUgcmV0dXJuVHlwZSkge30KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRTdGF0aWNJbnZvY2F0aW9uKGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSkgewogICAgQXJndW1lbnRUeXBlcyBhcmd1bWVudFR5cGVzID0gX3Zpc2l0QXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKTsKICAgIGlyLkRhcnRUeXBlIHJldHVyblR5cGUgPSBpci5TdWJzdGl0dXRpb24uZnJvbVBhaXJzKAogICAgICAgICAgICBub2RlLnRhcmdldC5mdW5jdGlvbi50eXBlUGFyYW1ldGVycywgbm9kZS5hcmd1bWVudHMudHlwZXMpCiAgICAgICAgLnN1YnN0aXR1dGVUeXBlKG5vZGUudGFyZ2V0LmZ1bmN0aW9uLnJldHVyblR5cGUpOwogICAgX2V4cHJlc3Npb25UeXBlQ2FjaGVbbm9kZV0gPSByZXR1cm5UeXBlOwogICAgaGFuZGxlU3RhdGljSW52b2NhdGlvbihub2RlLCBhcmd1bWVudFR5cGVzLCByZXR1cm5UeXBlKTsKICAgIHJldHVybiByZXR1cm5UeXBlOwogIH0KCiAgdm9pZCBoYW5kbGVDb25zdHJ1Y3Rvckludm9jYXRpb24oaXIuQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUsCiAgICAgIEFyZ3VtZW50VHlwZXMgYXJndW1lbnRUeXBlcywgaXIuRGFydFR5cGUgcmVzdWx0VHlwZSkge30KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRDb25zdHJ1Y3Rvckludm9jYXRpb24oaXIuQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUpIHsKICAgIEFyZ3VtZW50VHlwZXMgYXJndW1lbnRUeXBlcyA9IF92aXNpdEFyZ3VtZW50cyhub2RlLmFyZ3VtZW50cyk7CiAgICBpci5EYXJ0VHlwZSByZXN1bHRUeXBlID0gbm9kZS5hcmd1bWVudHMudHlwZXMuaXNFbXB0eQogICAgICAgID8gbmV3IEV4YWN0SW50ZXJmYWNlVHlwZS5mcm9tKG5vZGUudGFyZ2V0LmVuY2xvc2luZ0NsYXNzLnJhd1R5cGUpCiAgICAgICAgOiBuZXcgRXhhY3RJbnRlcmZhY2VUeXBlKAogICAgICAgICAgICBub2RlLnRhcmdldC5lbmNsb3NpbmdDbGFzcywgbm9kZS5hcmd1bWVudHMudHlwZXMpOwogICAgX2V4cHJlc3Npb25UeXBlQ2FjaGVbbm9kZV0gPSByZXN1bHRUeXBlOwogICAgaGFuZGxlQ29uc3RydWN0b3JJbnZvY2F0aW9uKG5vZGUsIGFyZ3VtZW50VHlwZXMsIHJlc3VsdFR5cGUpOwogICAgcmV0dXJuIHJlc3VsdFR5cGU7CiAgfQoKICB2b2lkIGhhbmRsZVN1cGVyUHJvcGVydHlHZXQoCiAgICAgIGlyLlN1cGVyUHJvcGVydHlHZXQgbm9kZSwgaXIuRGFydFR5cGUgcmVzdWx0VHlwZSkge30KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRTdXBlclByb3BlcnR5R2V0KGlyLlN1cGVyUHJvcGVydHlHZXQgbm9kZSkgewogICAgaXIuRGFydFR5cGUgcmVzdWx0VHlwZTsKICAgIGlmIChub2RlLmludGVyZmFjZVRhcmdldCA9PSBudWxsKSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlc29sdmUgYW5kIHNldCB0aGUgdGFyZ2V0IGhlcmUuCiAgICAgIHJlc3VsdFR5cGUgPSBjb25zdCBpci5EeW5hbWljVHlwZSgpOwogICAgfSBlbHNlIHsKICAgICAgaXIuQ2xhc3MgZGVjbGFyaW5nQ2xhc3MgPSBub2RlLmludGVyZmFjZVRhcmdldC5lbmNsb3NpbmdDbGFzczsKICAgICAgaWYgKGRlY2xhcmluZ0NsYXNzLnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkpIHsKICAgICAgICByZXN1bHRUeXBlID0gbm9kZS5pbnRlcmZhY2VUYXJnZXQuZ2V0dGVyVHlwZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpci5EYXJ0VHlwZSByZWNlaXZlciA9CiAgICAgICAgICAgIHR5cGVFbnZpcm9ubWVudC5nZXRUeXBlQXNJbnN0YW5jZU9mKHRoaXNUeXBlLCBkZWNsYXJpbmdDbGFzcyk7CiAgICAgICAgcmVzdWx0VHlwZSA9IGlyLlN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZShyZWNlaXZlcikKICAgICAgICAgICAgLnN1YnN0aXR1dGVUeXBlKG5vZGUuaW50ZXJmYWNlVGFyZ2V0LmdldHRlclR5cGUpOwogICAgICB9CiAgICB9CiAgICBfZXhwcmVzc2lvblR5cGVDYWNoZVtub2RlXSA9IHJlc3VsdFR5cGU7CiAgICBoYW5kbGVTdXBlclByb3BlcnR5R2V0KG5vZGUsIHJlc3VsdFR5cGUpOwogICAgcmV0dXJuIHJlc3VsdFR5cGU7CiAgfQoKICB2b2lkIGhhbmRsZVN1cGVyUHJvcGVydHlTZXQoCiAgICAgIGlyLlN1cGVyUHJvcGVydHlTZXQgbm9kZSwgaXIuRGFydFR5cGUgdmFsdWVUeXBlKSB7fQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdFN1cGVyUHJvcGVydHlTZXQoaXIuU3VwZXJQcm9wZXJ0eVNldCBub2RlKSB7CiAgICBpci5EYXJ0VHlwZSB2YWx1ZVR5cGUgPSBzdXBlci52aXNpdFN1cGVyUHJvcGVydHlTZXQobm9kZSk7CiAgICBoYW5kbGVTdXBlclByb3BlcnR5U2V0KG5vZGUsIHZhbHVlVHlwZSk7CiAgICByZXR1cm4gdmFsdWVUeXBlOwogIH0KCiAgdm9pZCBoYW5kbGVTdXBlck1ldGhvZEludm9jYXRpb24oaXIuU3VwZXJNZXRob2RJbnZvY2F0aW9uIG5vZGUsCiAgICAgIEFyZ3VtZW50VHlwZXMgYXJndW1lbnRUeXBlcywgaXIuRGFydFR5cGUgcmV0dXJuVHlwZSkge30KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRTdXBlck1ldGhvZEludm9jYXRpb24oaXIuU3VwZXJNZXRob2RJbnZvY2F0aW9uIG5vZGUpIHsKICAgIEFyZ3VtZW50VHlwZXMgYXJndW1lbnRUeXBlcyA9IF92aXNpdEFyZ3VtZW50cyhub2RlLmFyZ3VtZW50cyk7CiAgICBpci5EYXJ0VHlwZSByZXR1cm5UeXBlOwogICAgaWYgKG5vZGUuaW50ZXJmYWNlVGFyZ2V0ID09IG51bGwpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVzb2x2ZSBhbmQgc2V0IHRoZSB0YXJnZXQgaGVyZS4KICAgICAgcmV0dXJuVHlwZSA9IGNvbnN0IGlyLkR5bmFtaWNUeXBlKCk7CiAgICB9IGVsc2UgewogICAgICBpci5DbGFzcyBzdXBlcmNsYXNzID0gbm9kZS5pbnRlcmZhY2VUYXJnZXQuZW5jbG9zaW5nQ2xhc3M7CiAgICAgIGlyLkludGVyZmFjZVR5cGUgcmVjZWl2ZXJUeXBlID0KICAgICAgICAgIHR5cGVFbnZpcm9ubWVudC5nZXRUeXBlQXNJbnN0YW5jZU9mKHRoaXNUeXBlLCBzdXBlcmNsYXNzKTsKICAgICAgcmV0dXJuVHlwZSA9IGlyLlN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZShyZWNlaXZlclR5cGUpCiAgICAgICAgICAuc3Vic3RpdHV0ZVR5cGUobm9kZS5pbnRlcmZhY2VUYXJnZXQuZnVuY3Rpb24ucmV0dXJuVHlwZSk7CiAgICAgIHJldHVyblR5cGUgPSBpci5TdWJzdGl0dXRpb24uZnJvbVBhaXJzKAogICAgICAgICAgICAgIG5vZGUuaW50ZXJmYWNlVGFyZ2V0LmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzLAogICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRzLnR5cGVzKQogICAgICAgICAgLnN1YnN0aXR1dGVUeXBlKHJldHVyblR5cGUpOwogICAgfQogICAgX2V4cHJlc3Npb25UeXBlQ2FjaGVbbm9kZV0gPSByZXR1cm5UeXBlOwogICAgaGFuZGxlU3VwZXJNZXRob2RJbnZvY2F0aW9uKG5vZGUsIGFyZ3VtZW50VHlwZXMsIHJldHVyblR5cGUpOwogICAgcmV0dXJuIHJldHVyblR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdExvZ2ljYWxFeHByZXNzaW9uKGlyLkxvZ2ljYWxFeHByZXNzaW9uIG5vZGUpIHsKICAgIGlmIChub2RlLm9wZXJhdG9yID09ICcmJicpIHsKICAgICAgdmlzaXROb2RlKG5vZGUubGVmdCk7CiAgICAgIFR5cGVNYXAgYWZ0ZXJMZWZ0V2hlblRydWUgPSB0eXBlTWFwV2hlblRydWU7CiAgICAgIFR5cGVNYXAgYWZ0ZXJMZWZ0V2hlbkZhbHNlID0gdHlwZU1hcFdoZW5GYWxzZTsKICAgICAgdHlwZU1hcCA9IGFmdGVyTGVmdFdoZW5UcnVlOwogICAgICB2aXNpdE5vZGUobm9kZS5yaWdodCk7CiAgICAgIFR5cGVNYXAgYWZ0ZXJSaWdodFdoZW5UcnVlID0gdHlwZU1hcFdoZW5UcnVlOwogICAgICBUeXBlTWFwIGFmdGVyUmlnaHRXaGVuRmFsc2UgPSB0eXBlTWFwV2hlbkZhbHNlOwogICAgICB0eXBlTWFwV2hlblRydWUgPSBhZnRlclJpZ2h0V2hlblRydWU7CiAgICAgIHR5cGVNYXBXaGVuRmFsc2UgPSBhZnRlckxlZnRXaGVuRmFsc2Uuam9pbihhZnRlclJpZ2h0V2hlbkZhbHNlKTsKICAgIH0gZWxzZSB7CiAgICAgIHZpc2l0Tm9kZShub2RlLmxlZnQpOwogICAgICBUeXBlTWFwIGFmdGVyTGVmdFdoZW5UcnVlID0gdHlwZU1hcFdoZW5UcnVlOwogICAgICBUeXBlTWFwIGFmdGVyTGVmdFdoZW5GYWxzZSA9IHR5cGVNYXBXaGVuRmFsc2U7CiAgICAgIHR5cGVNYXAgPSBhZnRlckxlZnRXaGVuRmFsc2U7CiAgICAgIHZpc2l0Tm9kZShub2RlLnJpZ2h0KTsKICAgICAgVHlwZU1hcCBhZnRlclJpZ2h0V2hlblRydWUgPSB0eXBlTWFwV2hlblRydWU7CiAgICAgIFR5cGVNYXAgYWZ0ZXJSaWdodFdoZW5GYWxzZSA9IHR5cGVNYXBXaGVuRmFsc2U7CiAgICAgIHR5cGVNYXBXaGVuVHJ1ZSA9IGFmdGVyTGVmdFdoZW5UcnVlLmpvaW4oYWZ0ZXJSaWdodFdoZW5UcnVlKTsKICAgICAgdHlwZU1hcFdoZW5GYWxzZSA9IGFmdGVyUmlnaHRXaGVuRmFsc2U7CiAgICB9CiAgICByZXR1cm4gc3VwZXIudmlzaXRMb2dpY2FsRXhwcmVzc2lvbihub2RlKTsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0Tm90KGlyLk5vdCBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5vcGVyYW5kKTsKICAgIFR5cGVNYXAgYWZ0ZXJPcGVyYW5kV2hlblRydWUgPSB0eXBlTWFwV2hlblRydWU7CiAgICBUeXBlTWFwIGFmdGVyT3BlcmFuZFdoZW5GYWxzZSA9IHR5cGVNYXBXaGVuRmFsc2U7CiAgICB0eXBlTWFwV2hlblRydWUgPSBhZnRlck9wZXJhbmRXaGVuRmFsc2U7CiAgICB0eXBlTWFwV2hlbkZhbHNlID0gYWZ0ZXJPcGVyYW5kV2hlblRydWU7CiAgICByZXR1cm4gc3VwZXIudmlzaXROb3Qobm9kZSk7CiAgfQoKICBpci5EYXJ0VHlwZSBfaGFuZGxlQ29uZGl0aW9uYWwoCiAgICAgIGlyLkV4cHJlc3Npb24gY29uZGl0aW9uLCBpci5UcmVlTm9kZSB0aGVuLCBpci5UcmVlTm9kZSBvdGhlcndpc2UpIHsKICAgIHZpc2l0Tm9kZShjb25kaXRpb24pOwogICAgVHlwZU1hcCBhZnRlckNvbmRpdGlvbldoZW5UcnVlID0gdHlwZU1hcFdoZW5UcnVlOwogICAgVHlwZU1hcCBhZnRlckNvbmRpdGlvbldoZW5GYWxzZSA9IHR5cGVNYXBXaGVuRmFsc2U7CiAgICB0eXBlTWFwID0gYWZ0ZXJDb25kaXRpb25XaGVuVHJ1ZTsKICAgIGlyLkRhcnRUeXBlIHRoZW5UeXBlID0gdmlzaXROb2RlKHRoZW4pOwogICAgVHlwZU1hcCBhZnRlclRoZW4gPSB0eXBlTWFwOwogICAgdHlwZU1hcCA9IGFmdGVyQ29uZGl0aW9uV2hlbkZhbHNlOwogICAgaXIuRGFydFR5cGUgb3RoZXJ3aXNlVHlwZSA9IHZpc2l0Tm9kZShvdGhlcndpc2UpOwogICAgVHlwZU1hcCBhZnRlck90aGVyd2lzZSA9IHR5cGVNYXA7CiAgICBpZiAoY29tcGxldGVzKHRoZW5UeXBlKSAmJiBjb21wbGV0ZXMob3RoZXJ3aXNlVHlwZSkpIHsKICAgICAgdHlwZU1hcCA9IGFmdGVyVGhlbi5qb2luKGFmdGVyT3RoZXJ3aXNlKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgaWYgKGNvbXBsZXRlcyh0aGVuVHlwZSkpIHsKICAgICAgdHlwZU1hcCA9IGFmdGVyVGhlbjsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgaWYgKGNvbXBsZXRlcyhvdGhlcndpc2VUeXBlKSkgewogICAgICB0eXBlTWFwID0gYWZ0ZXJPdGhlcndpc2U7CiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIHsKICAgICAgdHlwZU1hcCA9IGFmdGVyVGhlbi5qb2luKGFmdGVyT3RoZXJ3aXNlKTsKICAgICAgcmV0dXJuIGNvbnN0IERvZXNOb3RDb21wbGV0ZVR5cGUoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0Q29uZGl0aW9uYWxFeHByZXNzaW9uKGlyLkNvbmRpdGlvbmFsRXhwcmVzc2lvbiBub2RlKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTaG91bGQgd2UgcmV0dXJuIGBjb25zdCBEb2VzTm90Q29tcGxldGVUeXBlKClgIGlmCiAgICAvLyBib3RoIGJyYW5jaGVzIGFyZSBmYWlsaW5nPwogICAgX2hhbmRsZUNvbmRpdGlvbmFsKG5vZGUuY29uZGl0aW9uLCBub2RlLnRoZW4sIG5vZGUub3RoZXJ3aXNlKTsKICAgIHJldHVybiBzdXBlci52aXNpdENvbmRpdGlvbmFsRXhwcmVzc2lvbihub2RlKTsKICB9CgogIHZvaWQgaGFuZGxlSXNFeHByZXNzaW9uKGlyLklzRXhwcmVzc2lvbiBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdElzRXhwcmVzc2lvbihpci5Jc0V4cHJlc3Npb24gbm9kZSkgewogICAgaXIuRXhwcmVzc2lvbiBvcGVyYW5kID0gbm9kZS5vcGVyYW5kOwogICAgdmlzaXROb2RlKG9wZXJhbmQpOwogICAgaWYgKG9wZXJhbmQgaXMgaXIuVmFyaWFibGVHZXQgJiYKICAgICAgICAhX2ludmFsaWRhdGVkVmFyaWFibGVzLmNvbnRhaW5zKG9wZXJhbmQudmFyaWFibGUpKSB7CiAgICAgIFR5cGVNYXAgYWZ0ZXJPcGVyYW5kID0gdHlwZU1hcDsKICAgICAgdHlwZU1hcFdoZW5UcnVlID0KICAgICAgICAgIGFmdGVyT3BlcmFuZC5wcm9tb3RlKG9wZXJhbmQudmFyaWFibGUsIG5vZGUudHlwZSwgaXNUcnVlOiB0cnVlKTsKICAgICAgdHlwZU1hcFdoZW5GYWxzZSA9CiAgICAgICAgICBhZnRlck9wZXJhbmQucHJvbW90ZShvcGVyYW5kLnZhcmlhYmxlLCBub2RlLnR5cGUsIGlzVHJ1ZTogZmFsc2UpOwogICAgfQogICAgaGFuZGxlSXNFeHByZXNzaW9uKG5vZGUpOwogICAgcmV0dXJuIHN1cGVyLnZpc2l0SXNFeHByZXNzaW9uKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRMZXQoaXIuTGV0IG5vZGUpIHsKICAgIF9wcm9jZXNzTG9jYWxWYXJpYWJsZShub2RlLnZhcmlhYmxlKTsKICAgIHJldHVybiBzdXBlci52aXNpdExldChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0QmxvY2tFeHByZXNzaW9uKGlyLkJsb2NrRXhwcmVzc2lvbiBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5ib2R5KTsKICAgIHJldHVybiBzdXBlci52aXNpdEJsb2NrRXhwcmVzc2lvbihub2RlKTsKICB9CgogIGlyLkRhcnRUeXBlIF9jb21wdXRlSW5zdGFudGlhdGlvblR5cGUoCiAgICAgIGlyLkluc3RhbnRpYXRpb24gbm9kZSwgaXIuRnVuY3Rpb25UeXBlIGV4cHJlc3Npb25UeXBlKSB7CiAgICByZXR1cm4gaXIuU3Vic3RpdHV0aW9uLmZyb21QYWlycygKICAgICAgICAgICAgZXhwcmVzc2lvblR5cGUudHlwZVBhcmFtZXRlcnMsIG5vZGUudHlwZUFyZ3VtZW50cykKICAgICAgICAuc3Vic3RpdHV0ZVR5cGUoZXhwcmVzc2lvblR5cGUud2l0aG91dFR5cGVQYXJhbWV0ZXJzKTsKICB9CgogIHZvaWQgaGFuZGxlSW5zdGFudGlhdGlvbihpci5JbnN0YW50aWF0aW9uIG5vZGUsCiAgICAgIGlyLkZ1bmN0aW9uVHlwZSBleHByZXNzaW9uVHlwZSwgaXIuRGFydFR5cGUgcmVzdWx0VHlwZSkge30KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRJbnN0YW50aWF0aW9uKGlyLkluc3RhbnRpYXRpb24gbm9kZSkgewogICAgaXIuRnVuY3Rpb25UeXBlIGV4cHJlc3Npb25UeXBlID0gdmlzaXROb2RlKG5vZGUuZXhwcmVzc2lvbik7CiAgICBpci5EYXJ0VHlwZSByZXN1bHRUeXBlID0gX2NvbXB1dGVJbnN0YW50aWF0aW9uVHlwZShub2RlLCBleHByZXNzaW9uVHlwZSk7CiAgICBfZXhwcmVzc2lvblR5cGVDYWNoZVtub2RlXSA9IHJlc3VsdFR5cGU7CiAgICBoYW5kbGVJbnN0YW50aWF0aW9uKG5vZGUsIGV4cHJlc3Npb25UeXBlLCByZXN1bHRUeXBlKTsKICAgIHJldHVybiByZXN1bHRUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRCbG9jayhpci5CbG9jayBub2RlKSB7CiAgICBhc3NlcnQoX3BlbmRpbmdSdW50aW1lVHlwZVVzZURhdGEuaXNFbXB0eSk7CiAgICBpci5EYXJ0VHlwZSB0eXBlOwogICAgZm9yIChpci5TdGF0ZW1lbnQgc3RhdGVtZW50IGluIG5vZGUuc3RhdGVtZW50cykgewogICAgICBpZiAoIWNvbXBsZXRlcyh2aXNpdE5vZGUoc3RhdGVtZW50KSkpIHsKICAgICAgICB0eXBlID0gY29uc3QgRG9lc05vdENvbXBsZXRlVHlwZSgpOwogICAgICB9CiAgICB9CiAgICBhc3NlcnQoX3BlbmRpbmdSdW50aW1lVHlwZVVzZURhdGEuaXNFbXB0eSwKICAgICAgICAiSW5jb21wbGV0ZSBSdW50aW1lVHlwZVVzZURhdGE6ICRfcGVuZGluZ1J1bnRpbWVUeXBlVXNlRGF0YSIpOwogICAgcmV0dXJuIHR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnQoaXIuRXhwcmVzc2lvblN0YXRlbWVudCBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5leHByZXNzaW9uKTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCBoYW5kbGVBc0V4cHJlc3Npb24oaXIuQXNFeHByZXNzaW9uIG5vZGUsIGlyLkRhcnRUeXBlIG9wZXJhbmRUeXBlKSB7fQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdEFzRXhwcmVzc2lvbihpci5Bc0V4cHJlc3Npb24gbm9kZSkgewogICAgaXIuRGFydFR5cGUgb3BlcmFuZFR5cGUgPSB2aXNpdE5vZGUobm9kZS5vcGVyYW5kKTsKICAgIGhhbmRsZUFzRXhwcmVzc2lvbihub2RlLCBvcGVyYW5kVHlwZSk7CiAgICByZXR1cm4gc3VwZXIudmlzaXRBc0V4cHJlc3Npb24obm9kZSk7CiAgfQoKICB2b2lkIGhhbmRsZVN0cmluZ0NvbmNhdGVuYXRpb24oaXIuU3RyaW5nQ29uY2F0ZW5hdGlvbiBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdFN0cmluZ0NvbmNhdGVuYXRpb24oaXIuU3RyaW5nQ29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICB2aXNpdE5vZGVzKG5vZGUuZXhwcmVzc2lvbnMpOwogICAgaGFuZGxlU3RyaW5nQ29uY2F0ZW5hdGlvbihub2RlKTsKICAgIHJldHVybiBzdXBlci52aXNpdFN0cmluZ0NvbmNhdGVuYXRpb24obm9kZSk7CiAgfQoKICB2b2lkIGhhbmRsZUludExpdGVyYWwoaXIuSW50TGl0ZXJhbCBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdEludExpdGVyYWwoaXIuSW50TGl0ZXJhbCBub2RlKSB7CiAgICBoYW5kbGVJbnRMaXRlcmFsKG5vZGUpOwogICAgcmV0dXJuIHN1cGVyLnZpc2l0SW50TGl0ZXJhbChub2RlKTsKICB9CgogIHZvaWQgaGFuZGxlRG91YmxlTGl0ZXJhbChpci5Eb3VibGVMaXRlcmFsIG5vZGUpIHt9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0RG91YmxlTGl0ZXJhbChpci5Eb3VibGVMaXRlcmFsIG5vZGUpIHsKICAgIGhhbmRsZURvdWJsZUxpdGVyYWwobm9kZSk7CiAgICByZXR1cm4gc3VwZXIudmlzaXREb3VibGVMaXRlcmFsKG5vZGUpOwogIH0KCiAgdm9pZCBoYW5kbGVCb29sTGl0ZXJhbChpci5Cb29sTGl0ZXJhbCBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdEJvb2xMaXRlcmFsKGlyLkJvb2xMaXRlcmFsIG5vZGUpIHsKICAgIGhhbmRsZUJvb2xMaXRlcmFsKG5vZGUpOwogICAgcmV0dXJuIHN1cGVyLnZpc2l0Qm9vbExpdGVyYWwobm9kZSk7CiAgfQoKICB2b2lkIGhhbmRsZVN0cmluZ0xpdGVyYWwoaXIuU3RyaW5nTGl0ZXJhbCBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdFN0cmluZ0xpdGVyYWwoaXIuU3RyaW5nTGl0ZXJhbCBub2RlKSB7CiAgICBoYW5kbGVTdHJpbmdMaXRlcmFsKG5vZGUpOwogICAgcmV0dXJuIHN1cGVyLnZpc2l0U3RyaW5nTGl0ZXJhbChub2RlKTsKICB9CgogIHZvaWQgaGFuZGxlU3ltYm9sTGl0ZXJhbChpci5TeW1ib2xMaXRlcmFsIG5vZGUpIHt9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0U3ltYm9sTGl0ZXJhbChpci5TeW1ib2xMaXRlcmFsIG5vZGUpIHsKICAgIGhhbmRsZVN5bWJvbExpdGVyYWwobm9kZSk7CiAgICByZXR1cm4gc3VwZXIudmlzaXRTeW1ib2xMaXRlcmFsKG5vZGUpOwogIH0KCiAgdm9pZCBoYW5kbGVOdWxsTGl0ZXJhbChpci5OdWxsTGl0ZXJhbCBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdE51bGxMaXRlcmFsKGlyLk51bGxMaXRlcmFsIG5vZGUpIHsKICAgIGhhbmRsZU51bGxMaXRlcmFsKG5vZGUpOwogICAgcmV0dXJuIHN1cGVyLnZpc2l0TnVsbExpdGVyYWwobm9kZSk7CiAgfQoKICB2b2lkIGhhbmRsZUxpc3RMaXRlcmFsKGlyLkxpc3RMaXRlcmFsIG5vZGUpIHt9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0TGlzdExpdGVyYWwoaXIuTGlzdExpdGVyYWwgbm9kZSkgewogICAgdmlzaXROb2Rlcyhub2RlLmV4cHJlc3Npb25zKTsKICAgIGhhbmRsZUxpc3RMaXRlcmFsKG5vZGUpOwogICAgcmV0dXJuIHN1cGVyLnZpc2l0TGlzdExpdGVyYWwobm9kZSk7CiAgfQoKICB2b2lkIGhhbmRsZVNldExpdGVyYWwoaXIuU2V0TGl0ZXJhbCBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdFNldExpdGVyYWwoaXIuU2V0TGl0ZXJhbCBub2RlKSB7CiAgICB2aXNpdE5vZGVzKG5vZGUuZXhwcmVzc2lvbnMpOwogICAgaGFuZGxlU2V0TGl0ZXJhbChub2RlKTsKICAgIHJldHVybiBzdXBlci52aXNpdFNldExpdGVyYWwobm9kZSk7CiAgfQoKICB2b2lkIGhhbmRsZU1hcExpdGVyYWwoaXIuTWFwTGl0ZXJhbCBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdE1hcExpdGVyYWwoaXIuTWFwTGl0ZXJhbCBub2RlKSB7CiAgICB2aXNpdE5vZGVzKG5vZGUuZW50cmllcyk7CiAgICBoYW5kbGVNYXBMaXRlcmFsKG5vZGUpOwogICAgcmV0dXJuIHN1cGVyLnZpc2l0TWFwTGl0ZXJhbChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIE51bGwgdmlzaXRNYXBFbnRyeShpci5NYXBFbnRyeSBlbnRyeSkgewogICAgdmlzaXROb2RlKGVudHJ5LmtleSk7CiAgICB2aXNpdE5vZGUoZW50cnkudmFsdWUpOwogIH0KCiAgdm9pZCBoYW5kbGVGdW5jdGlvbkV4cHJlc3Npb24oaXIuRnVuY3Rpb25FeHByZXNzaW9uIG5vZGUpIHt9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKGlyLkZ1bmN0aW9uRXhwcmVzc2lvbiBub2RlKSB7CiAgICBUeXBlTWFwIGJlZm9yZUNsb3N1cmUgPQogICAgICAgIHR5cGVNYXAucmVtb3ZlKHZhcmlhYmxlU2NvcGVNb2RlbC5nZXRTY29wZUZvcihub2RlKS5hc3NpZ25lZFZhcmlhYmxlcyk7CiAgICB0eXBlTWFwID0gdHlwZU1hcC5yZW1vdmUodmFyaWFibGVTY29wZU1vZGVsLmFzc2lnbmVkVmFyaWFibGVzKTsKICAgIGlyLkRhcnRUeXBlIHJldHVyblR5cGUgPSBzdXBlci52aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbihub2RlKTsKICAgIFNldDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBfb2xkVmFyaWFibGVzID0gX2N1cnJlbnRWYXJpYWJsZXM7CiAgICBfY3VycmVudFZhcmlhYmxlcyA9IHt9OwogICAgdmlzaXRTaWduYXR1cmUobm9kZS5mdW5jdGlvbik7CiAgICB2aXNpdE5vZGUobm9kZS5mdW5jdGlvbi5ib2R5KTsKICAgIGhhbmRsZUZ1bmN0aW9uRXhwcmVzc2lvbihub2RlKTsKICAgIF9pbnZhbGlkYXRlZFZhcmlhYmxlcy5yZW1vdmVBbGwoX2N1cnJlbnRWYXJpYWJsZXMpOwogICAgX2N1cnJlbnRWYXJpYWJsZXMgPSBfb2xkVmFyaWFibGVzOwogICAgdHlwZU1hcCA9IGJlZm9yZUNsb3N1cmU7CiAgICByZXR1cm4gcmV0dXJuVHlwZTsKICB9CgogIHZvaWQgaGFuZGxlVGhyb3coaXIuVGhyb3cgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRUaHJvdyhpci5UaHJvdyBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5leHByZXNzaW9uKTsKICAgIGhhbmRsZVRocm93KG5vZGUpOwogICAgcmV0dXJuIHN1cGVyLnZpc2l0VGhyb3cobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBOdWxsIHZpc2l0U3dpdGNoQ2FzZShpci5Td2l0Y2hDYXNlIG5vZGUpIHsKICAgIHZpc2l0Tm9kZXMobm9kZS5leHByZXNzaW9ucyk7CiAgICB2aXNpdE5vZGUobm9kZS5ib2R5KTsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0Q29udGludWVTd2l0Y2hTdGF0ZW1lbnQoaXIuQ29udGludWVTd2l0Y2hTdGF0ZW1lbnQgbm9kZSkgewogICAgcmV0dXJuIGNvbnN0IERvZXNOb3RDb21wbGV0ZVR5cGUoKTsKICB9CgogIEBvdmVycmlkZQogIE51bGwgdmlzaXRMYWJlbGVkU3RhdGVtZW50KGlyLkxhYmVsZWRTdGF0ZW1lbnQgbm9kZSkgewogICAgdmlzaXROb2RlKG5vZGUuYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdEJyZWFrU3RhdGVtZW50KGlyLkJyZWFrU3RhdGVtZW50IG5vZGUpIHsKICAgIHJldHVybiBjb25zdCBEb2VzTm90Q29tcGxldGVUeXBlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBOdWxsIHZpc2l0WWllbGRTdGF0ZW1lbnQoaXIuWWllbGRTdGF0ZW1lbnQgbm9kZSkgewogICAgdmlzaXROb2RlKG5vZGUuZXhwcmVzc2lvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBOdWxsIHZpc2l0QXNzZXJ0SW5pdGlhbGl6ZXIoaXIuQXNzZXJ0SW5pdGlhbGl6ZXIgbm9kZSkgewogICAgdmlzaXROb2RlKG5vZGUuc3RhdGVtZW50KTsKICB9CgogIHZvaWQgaGFuZGxlRmllbGRJbml0aWFsaXplcihpci5GaWVsZEluaXRpYWxpemVyIG5vZGUpIHt9CgogIEBvdmVycmlkZQogIE51bGwgdmlzaXRGaWVsZEluaXRpYWxpemVyKGlyLkZpZWxkSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgdmlzaXROb2RlKG5vZGUudmFsdWUpOwogICAgaGFuZGxlRmllbGRJbml0aWFsaXplcihub2RlKTsKICB9CgogIHZvaWQgaGFuZGxlUmVkaXJlY3RpbmdJbml0aWFsaXplcigKICAgICAgaXIuUmVkaXJlY3RpbmdJbml0aWFsaXplciBub2RlLCBBcmd1bWVudFR5cGVzIGFyZ3VtZW50VHlwZXMpIHt9CgogIEBvdmVycmlkZQogIE51bGwgdmlzaXRSZWRpcmVjdGluZ0luaXRpYWxpemVyKGlyLlJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgQXJndW1lbnRUeXBlcyBhcmd1bWVudFR5cGVzID0gX3Zpc2l0QXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKTsKICAgIGhhbmRsZVJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIobm9kZSwgYXJndW1lbnRUeXBlcyk7CiAgfQoKICB2b2lkIGhhbmRsZVN1cGVySW5pdGlhbGl6ZXIoCiAgICAgIGlyLlN1cGVySW5pdGlhbGl6ZXIgbm9kZSwgQXJndW1lbnRUeXBlcyBhcmd1bWVudFR5cGVzKSB7fQoKICBAb3ZlcnJpZGUKICBOdWxsIHZpc2l0U3VwZXJJbml0aWFsaXplcihpci5TdXBlckluaXRpYWxpemVyIG5vZGUpIHsKICAgIEFyZ3VtZW50VHlwZXMgYXJndW1lbnRUeXBlcyA9IF92aXNpdEFyZ3VtZW50cyhub2RlLmFyZ3VtZW50cyk7CiAgICBoYW5kbGVTdXBlckluaXRpYWxpemVyKG5vZGUsIGFyZ3VtZW50VHlwZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgTnVsbCB2aXNpdExvY2FsSW5pdGlhbGl6ZXIoaXIuTG9jYWxJbml0aWFsaXplciBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS52YXJpYWJsZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdE5hbWVkRXhwcmVzc2lvbihpci5OYW1lZEV4cHJlc3Npb24gbm9kZSkgPT4KICAgICAgdmlzaXROb2RlKG5vZGUudmFsdWUpOwoKICBAb3ZlcnJpZGUKICBOdWxsIHZpc2l0RW1wdHlTdGF0ZW1lbnQoaXIuRW1wdHlTdGF0ZW1lbnQgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgTnVsbCB2aXNpdEZvclN0YXRlbWVudChpci5Gb3JTdGF0ZW1lbnQgbm9kZSkgewogICAgdmlzaXROb2Rlcyhub2RlLnZhcmlhYmxlcyk7CiAgICBUeXBlTWFwIGJlZm9yZUxvb3AgPSB0eXBlTWFwID0KICAgICAgICB0eXBlTWFwLnJlbW92ZSh2YXJpYWJsZVNjb3BlTW9kZWwuZ2V0U2NvcGVGb3Iobm9kZSkuYXNzaWduZWRWYXJpYWJsZXMpOwogICAgdmlzaXROb2RlKG5vZGUuY29uZGl0aW9uKTsKICAgIHR5cGVNYXAgPSB0eXBlTWFwV2hlblRydWU7CiAgICB2aXNpdE5vZGUobm9kZS5ib2R5KTsKICAgIHZpc2l0Tm9kZXMobm9kZS51cGRhdGVzKTsKICAgIHR5cGVNYXAgPSBiZWZvcmVMb29wOwogIH0KCiAgdm9pZCBoYW5kbGVGb3JJblN0YXRlbWVudChpci5Gb3JJblN0YXRlbWVudCBub2RlLCBpci5EYXJ0VHlwZSBpdGVyYWJsZVR5cGUsCiAgICAgIGlyLkRhcnRUeXBlIGl0ZXJhdG9yVHlwZSkge30KCiAgQG92ZXJyaWRlCiAgTnVsbCB2aXNpdEZvckluU3RhdGVtZW50KGlyLkZvckluU3RhdGVtZW50IG5vZGUpIHsKICAgIC8vIEZvciBzeW5jIGZvci1pbiBbaXRlcmFibGVUeXBlXSBpcyBhIHN1YnR5cGUgb2YgYEl0ZXJhYmxlYCwgZm9yIGFzeW5jCiAgICAvLyBmb3ItaW4gW2l0ZXJhYmxlVHlwZV0gaXMgYSBzdWJ0eXBlIG9mIGBTdHJlYW1gLgogICAgaXIuRGFydFR5cGUgaXRlcmFibGVUeXBlID0gdmlzaXROb2RlKG5vZGUuaXRlcmFibGUpOwogICAgaXIuRGFydFR5cGUgaXRlcmF0b3JUeXBlID0gY29uc3QgaXIuRHluYW1pY1R5cGUoKTsKICAgIGlmIChub2RlLmlzQXN5bmMpIHsKICAgICAgaXIuSW50ZXJmYWNlVHlwZSBzdHJlYW1JbnRlcmZhY2VUeXBlID0gZ2V0SW50ZXJmYWNlVHlwZU9mKGl0ZXJhYmxlVHlwZSk7CiAgICAgIGlyLkludGVyZmFjZVR5cGUgc3RyZWFtVHlwZSA9IHR5cGVFbnZpcm9ubWVudC5nZXRUeXBlQXNJbnN0YW5jZU9mKAogICAgICAgICAgc3RyZWFtSW50ZXJmYWNlVHlwZSwgdHlwZUVudmlyb25tZW50LmNvcmVUeXBlcy5zdHJlYW1DbGFzcyk7CiAgICAgIGlmIChzdHJlYW1UeXBlICE9IG51bGwpIHsKICAgICAgICBpdGVyYXRvclR5cGUgPSBuZXcgaXIuSW50ZXJmYWNlVHlwZSgKICAgICAgICAgICAgdHlwZUVudmlyb25tZW50LmNvcmVUeXBlcy5zdHJlYW1JdGVyYXRvckNsYXNzLAogICAgICAgICAgICBzdHJlYW1UeXBlLnR5cGVBcmd1bWVudHMpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpci5JbnRlcmZhY2VUeXBlIGl0ZXJhYmxlSW50ZXJmYWNlVHlwZSA9IGdldEludGVyZmFjZVR5cGVPZihpdGVyYWJsZVR5cGUpOwogICAgICBpci5NZW1iZXIgbWVtYmVyID0gaGllcmFyY2h5LmdldEludGVyZmFjZU1lbWJlcigKICAgICAgICAgIGl0ZXJhYmxlSW50ZXJmYWNlVHlwZS5jbGFzc05vZGUsIG5ldyBpci5OYW1lKElkZW50aWZpZXJzLml0ZXJhdG9yKSk7CiAgICAgIGlmIChtZW1iZXIgIT0gbnVsbCkgewogICAgICAgIGl0ZXJhdG9yVHlwZSA9IGlyLlN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZSgKICAgICAgICAgICAgICAgIHR5cGVFbnZpcm9ubWVudC5nZXRUeXBlQXNJbnN0YW5jZU9mKAogICAgICAgICAgICAgICAgICAgIGl0ZXJhYmxlSW50ZXJmYWNlVHlwZSwgbWVtYmVyLmVuY2xvc2luZ0NsYXNzKSkKICAgICAgICAgICAgLnN1YnN0aXR1dGVUeXBlKG1lbWJlci5nZXR0ZXJUeXBlKTsKICAgICAgfQogICAgfQogICAgX2ZvckluSXRlcmF0b3JUeXBlQ2FjaGUgPz89IHt9OwogICAgX2ZvckluSXRlcmF0b3JUeXBlQ2FjaGVbbm9kZV0gPSBpdGVyYXRvclR5cGU7CiAgICBUeXBlTWFwIGJlZm9yZUxvb3AgPSB0eXBlTWFwID0KICAgICAgICB0eXBlTWFwLnJlbW92ZSh2YXJpYWJsZVNjb3BlTW9kZWwuZ2V0U2NvcGVGb3Iobm9kZSkuYXNzaWduZWRWYXJpYWJsZXMpOwogICAgdmlzaXROb2RlKG5vZGUudmFyaWFibGUpOwogICAgdmlzaXROb2RlKG5vZGUuYm9keSk7CiAgICBoYW5kbGVGb3JJblN0YXRlbWVudChub2RlLCBpdGVyYWJsZVR5cGUsIGl0ZXJhdG9yVHlwZSk7CiAgICB0eXBlTWFwID0gYmVmb3JlTG9vcDsKICB9CgogIEBvdmVycmlkZQogIE51bGwgdmlzaXREb1N0YXRlbWVudChpci5Eb1N0YXRlbWVudCBub2RlKSB7CiAgICBUeXBlTWFwIGJlZm9yZUxvb3AgPSB0eXBlTWFwID0KICAgICAgICB0eXBlTWFwLnJlbW92ZSh2YXJpYWJsZVNjb3BlTW9kZWwuZ2V0U2NvcGVGb3Iobm9kZSkuYXNzaWduZWRWYXJpYWJsZXMpOwogICAgdmlzaXROb2RlKG5vZGUuYm9keSk7CiAgICB2aXNpdE5vZGUobm9kZS5jb25kaXRpb24pOwogICAgdHlwZU1hcCA9IGJlZm9yZUxvb3A7CiAgfQoKICBAb3ZlcnJpZGUKICBOdWxsIHZpc2l0V2hpbGVTdGF0ZW1lbnQoaXIuV2hpbGVTdGF0ZW1lbnQgbm9kZSkgewogICAgVHlwZU1hcCBiZWZvcmVMb29wID0gdHlwZU1hcCA9CiAgICAgICAgdHlwZU1hcC5yZW1vdmUodmFyaWFibGVTY29wZU1vZGVsLmdldFNjb3BlRm9yKG5vZGUpLmFzc2lnbmVkVmFyaWFibGVzKTsKICAgIHZpc2l0Tm9kZShub2RlLmNvbmRpdGlvbik7CiAgICB0eXBlTWFwID0gdHlwZU1hcFdoZW5UcnVlOwogICAgdmlzaXROb2RlKG5vZGUuYm9keSk7CiAgICB0eXBlTWFwID0gYmVmb3JlTG9vcDsKICB9CgogIHZvaWQgaGFuZGxlU3dpdGNoU3RhdGVtZW50KGlyLlN3aXRjaFN0YXRlbWVudCBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICBOdWxsIHZpc2l0U3dpdGNoU3RhdGVtZW50KGlyLlN3aXRjaFN0YXRlbWVudCBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5leHByZXNzaW9uKTsKICAgIFR5cGVNYXAgYWZ0ZXJFeHByZXNzaW9uID0gdHlwZU1hcDsKICAgIFZhcmlhYmxlU2NvcGUgc2NvcGUgPSB2YXJpYWJsZVNjb3BlTW9kZWwuZ2V0U2NvcGVGb3Iobm9kZSk7CiAgICBUeXBlTWFwIGFmdGVyU3RhdGVtZW50ID0gYWZ0ZXJFeHByZXNzaW9uLnJlbW92ZShzY29wZS5hc3NpZ25lZFZhcmlhYmxlcyk7CiAgICBUeXBlTWFwIGJlZm9yZUNhc2UgPQogICAgICAgIHNjb3BlLmhhc0NvbnRpbnVlU3dpdGNoID8gYWZ0ZXJTdGF0ZW1lbnQgOiBhZnRlckV4cHJlc3Npb247CiAgICBmb3IgKGlyLlN3aXRjaENhc2Ugc3dpdGNoQ2FzZSBpbiBub2RlLmNhc2VzKSB7CiAgICAgIHR5cGVNYXAgPSBiZWZvcmVDYXNlOwogICAgICB2aXNpdE5vZGUoc3dpdGNoQ2FzZSk7CiAgICB9CiAgICBoYW5kbGVTd2l0Y2hTdGF0ZW1lbnQobm9kZSk7CiAgICB0eXBlTWFwID0gYWZ0ZXJTdGF0ZW1lbnQ7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdFJldHVyblN0YXRlbWVudChpci5SZXR1cm5TdGF0ZW1lbnQgbm9kZSkgewogICAgdmlzaXROb2RlKG5vZGUuZXhwcmVzc2lvbik7CiAgICByZXR1cm4gY29uc3QgRG9lc05vdENvbXBsZXRlVHlwZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRJZlN0YXRlbWVudChpci5JZlN0YXRlbWVudCBub2RlKSB7CiAgICByZXR1cm4gX2hhbmRsZUNvbmRpdGlvbmFsKG5vZGUuY29uZGl0aW9uLCBub2RlLnRoZW4sIG5vZGUub3RoZXJ3aXNlKTsKICB9CgogIEBvdmVycmlkZQogIE51bGwgdmlzaXRUcnlDYXRjaChpci5UcnlDYXRjaCBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5ib2R5KTsKICAgIHZpc2l0Tm9kZXMobm9kZS5jYXRjaGVzKTsKICB9CgogIHZvaWQgaGFuZGxlQ2F0Y2goaXIuQ2F0Y2ggbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgTnVsbCB2aXNpdENhdGNoKGlyLkNhdGNoIG5vZGUpIHsKICAgIGhhbmRsZUNhdGNoKG5vZGUpOwogICAgdmlzaXROb2RlKG5vZGUuYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICBOdWxsIHZpc2l0VHJ5RmluYWxseShpci5UcnlGaW5hbGx5IG5vZGUpIHsKICAgIHZpc2l0Tm9kZShub2RlLmJvZHkpOwogICAgdmlzaXROb2RlKG5vZGUuZmluYWxpemVyKTsKICB9CgogIHZvaWQgaGFuZGxlVHlwZUxpdGVyYWwoaXIuVHlwZUxpdGVyYWwgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRUeXBlTGl0ZXJhbChpci5UeXBlTGl0ZXJhbCBub2RlKSB7CiAgICBoYW5kbGVUeXBlTGl0ZXJhbChub2RlKTsKICAgIHJldHVybiBzdXBlci52aXNpdFR5cGVMaXRlcmFsKG5vZGUpOwogIH0KCiAgdm9pZCBoYW5kbGVMb2FkTGlicmFyeShpci5Mb2FkTGlicmFyeSBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdExvYWRMaWJyYXJ5KGlyLkxvYWRMaWJyYXJ5IG5vZGUpIHsKICAgIGhhbmRsZUxvYWRMaWJyYXJ5KG5vZGUpOwogICAgcmV0dXJuIHN1cGVyLnZpc2l0TG9hZExpYnJhcnkobm9kZSk7CiAgfQoKICB2b2lkIGhhbmRsZUFzc2VydFN0YXRlbWVudChpci5Bc3NlcnRTdGF0ZW1lbnQgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgTnVsbCB2aXNpdEFzc2VydFN0YXRlbWVudChpci5Bc3NlcnRTdGF0ZW1lbnQgbm9kZSkgewogICAgVHlwZU1hcCBiZWZvcmVDb25kaXRpb24gPSB0eXBlTWFwOwogICAgdmlzaXROb2RlKG5vZGUuY29uZGl0aW9uKTsKICAgIFR5cGVNYXAgYWZ0ZXJDb25kaXRpb25XaGVuVHJ1ZSA9IHR5cGVNYXBXaGVuVHJ1ZTsKICAgIFR5cGVNYXAgYWZ0ZXJDb25kaXRpb25XaGVuRmFsc2UgPSB0eXBlTWFwV2hlbkZhbHNlOwogICAgdHlwZU1hcCA9IGFmdGVyQ29uZGl0aW9uV2hlbkZhbHNlOwogICAgdmlzaXROb2RlKG5vZGUubWVzc2FnZSk7CiAgICBoYW5kbGVBc3NlcnRTdGF0ZW1lbnQobm9kZSk7CiAgICB0eXBlTWFwID0gdXNlQXNzZXJ0cyA/IGFmdGVyQ29uZGl0aW9uV2hlblRydWUgOiBiZWZvcmVDb25kaXRpb247CiAgfQoKICB2b2lkIGhhbmRsZUZ1bmN0aW9uRGVjbGFyYXRpb24oaXIuRnVuY3Rpb25EZWNsYXJhdGlvbiBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICBOdWxsIHZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbihpci5GdW5jdGlvbkRlY2xhcmF0aW9uIG5vZGUpIHsKICAgIFR5cGVNYXAgYmVmb3JlQ2xvc3VyZSA9CiAgICAgICAgdHlwZU1hcC5yZW1vdmUodmFyaWFibGVTY29wZU1vZGVsLmdldFNjb3BlRm9yKG5vZGUpLmFzc2lnbmVkVmFyaWFibGVzKTsKICAgIHR5cGVNYXAgPSB0eXBlTWFwLnJlbW92ZSh2YXJpYWJsZVNjb3BlTW9kZWwuYXNzaWduZWRWYXJpYWJsZXMpOwogICAgU2V0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+IF9vbGRWYXJpYWJsZXMgPSBfY3VycmVudFZhcmlhYmxlczsKICAgIF9jdXJyZW50VmFyaWFibGVzID0ge307CiAgICB2aXNpdFNpZ25hdHVyZShub2RlLmZ1bmN0aW9uKTsKICAgIHZpc2l0Tm9kZShub2RlLmZ1bmN0aW9uLmJvZHkpOwogICAgaGFuZGxlRnVuY3Rpb25EZWNsYXJhdGlvbihub2RlKTsKICAgIF9pbnZhbGlkYXRlZFZhcmlhYmxlcy5yZW1vdmVBbGwoX2N1cnJlbnRWYXJpYWJsZXMpOwogICAgX2N1cnJlbnRWYXJpYWJsZXMgPSBfb2xkVmFyaWFibGVzOwogICAgdHlwZU1hcCA9IGJlZm9yZUNsb3N1cmU7CiAgfQoKICB2b2lkIGhhbmRsZVBhcmFtZXRlcihpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHt9CgogIHZvaWQgdmlzaXRQYXJhbWV0ZXIoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICBfY3VycmVudFZhcmlhYmxlcy5hZGQobm9kZSk7CiAgICB2aXNpdE5vZGUobm9kZS5pbml0aWFsaXplcik7CiAgICBoYW5kbGVQYXJhbWV0ZXIobm9kZSk7CiAgfQoKICB2b2lkIGhhbmRsZVNpZ25hdHVyZShpci5GdW5jdGlvbk5vZGUgbm9kZSkge30KCiAgdm9pZCB2aXNpdFNpZ25hdHVyZShpci5GdW5jdGlvbk5vZGUgbm9kZSkgewogICAgbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5mb3JFYWNoKHZpc2l0UGFyYW1ldGVyKTsKICAgIG5vZGUubmFtZWRQYXJhbWV0ZXJzLmZvckVhY2godmlzaXRQYXJhbWV0ZXIpOwogICAgaGFuZGxlU2lnbmF0dXJlKG5vZGUpOwogIH0KCiAgdm9pZCBoYW5kbGVQcm9jZWR1cmUoaXIuUHJvY2VkdXJlIG5vZGUpIHt9CgogIEBvdmVycmlkZQogIE51bGwgdmlzaXRQcm9jZWR1cmUoaXIuUHJvY2VkdXJlIG5vZGUpIHsKICAgIHRoaXNUeXBlID0gbmV3IFRoaXNJbnRlcmZhY2VUeXBlLmZyb20obm9kZS5lbmNsb3NpbmdDbGFzcz8udGhpc1R5cGUpOwogICAgX2N1cnJlbnRWYXJpYWJsZXMgPSB7fTsKICAgIHZpc2l0U2lnbmF0dXJlKG5vZGUuZnVuY3Rpb24pOwogICAgdmlzaXROb2RlKG5vZGUuZnVuY3Rpb24uYm9keSk7CiAgICBoYW5kbGVQcm9jZWR1cmUobm9kZSk7CiAgICBfaW52YWxpZGF0ZWRWYXJpYWJsZXMucmVtb3ZlQWxsKF9jdXJyZW50VmFyaWFibGVzKTsKICAgIF9jdXJyZW50VmFyaWFibGVzID0gbnVsbDsKICAgIHRoaXNUeXBlID0gbnVsbDsKICB9CgogIHZvaWQgaGFuZGxlQ29uc3RydWN0b3IoaXIuQ29uc3RydWN0b3Igbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgTnVsbCB2aXNpdENvbnN0cnVjdG9yKGlyLkNvbnN0cnVjdG9yIG5vZGUpIHsKICAgIHRoaXNUeXBlID0gbmV3IFRoaXNJbnRlcmZhY2VUeXBlLmZyb20obm9kZS5lbmNsb3NpbmdDbGFzcy50aGlzVHlwZSk7CiAgICBfY3VycmVudFZhcmlhYmxlcyA9IHt9OwogICAgdmlzaXRTaWduYXR1cmUobm9kZS5mdW5jdGlvbik7CiAgICB2aXNpdE5vZGVzKG5vZGUuaW5pdGlhbGl6ZXJzKTsKICAgIHZpc2l0Tm9kZShub2RlLmZ1bmN0aW9uLmJvZHkpOwogICAgaGFuZGxlQ29uc3RydWN0b3Iobm9kZSk7CiAgICBfaW52YWxpZGF0ZWRWYXJpYWJsZXMucmVtb3ZlQWxsKF9jdXJyZW50VmFyaWFibGVzKTsKICAgIF9jdXJyZW50VmFyaWFibGVzID0gbnVsbDsKICAgIHRoaXNUeXBlID0gbnVsbDsKICB9CgogIHZvaWQgaGFuZGxlRmllbGQoaXIuRmllbGQgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgTnVsbCB2aXNpdEZpZWxkKGlyLkZpZWxkIG5vZGUpIHsKICAgIHRoaXNUeXBlID0gbmV3IFRoaXNJbnRlcmZhY2VUeXBlLmZyb20obm9kZS5lbmNsb3NpbmdDbGFzcz8udGhpc1R5cGUpOwogICAgX2N1cnJlbnRWYXJpYWJsZXMgPSB7fTsKICAgIHZpc2l0Tm9kZShub2RlLmluaXRpYWxpemVyKTsKICAgIGhhbmRsZUZpZWxkKG5vZGUpOwogICAgX2ludmFsaWRhdGVkVmFyaWFibGVzLnJlbW92ZUFsbChfY3VycmVudFZhcmlhYmxlcyk7CiAgICBfY3VycmVudFZhcmlhYmxlcyA9IG51bGw7CiAgICB0aGlzVHlwZSA9IG51bGw7CiAgfQoKICB2b2lkIGhhbmRsZVZhcmlhYmxlRGVjbGFyYXRpb24oaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7fQoKICB2b2lkIF9wcm9jZXNzTG9jYWxWYXJpYWJsZShpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIF9jdXJyZW50VmFyaWFibGVzLmFkZChub2RlKTsKICAgIGlyLkRhcnRUeXBlIHR5cGUgPSB2aXNpdE5vZGUobm9kZS5pbml0aWFsaXplcik7CiAgICBpZiAobm9kZS5pbml0aWFsaXplciAhPSBudWxsICYmCiAgICAgICAgdmFyaWFibGVTY29wZU1vZGVsLmlzRWZmZWN0aXZlbHlGaW5hbChub2RlKSAmJgogICAgICAgIGluZmVyRWZmZWN0aXZlbHlGaW5hbFZhcmlhYmxlVHlwZXMpIHsKICAgICAgbm9kZS50eXBlID0gdHlwZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIE51bGwgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgX3Byb2Nlc3NMb2NhbFZhcmlhYmxlKG5vZGUpOwogICAgaGFuZGxlVmFyaWFibGVEZWNsYXJhdGlvbihub2RlKTsKICB9CgogIHZvaWQgaGFuZGxlQ29uc3RhbnRFeHByZXNzaW9uKGlyLkNvbnN0YW50RXhwcmVzc2lvbiBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdENvbnN0YW50RXhwcmVzc2lvbihpci5Db25zdGFudEV4cHJlc3Npb24gbm9kZSkgewogICAgaGFuZGxlQ29uc3RhbnRFeHByZXNzaW9uKG5vZGUpOwogICAgcmV0dXJuIHN1cGVyLnZpc2l0Q29uc3RhbnRFeHByZXNzaW9uKG5vZGUpOwogIH0KfQoKY2xhc3MgQXJndW1lbnRUeXBlcyB7CiAgZmluYWwgTGlzdDxpci5EYXJ0VHlwZT4gcG9zaXRpb25hbDsKICBmaW5hbCBMaXN0PGlyLkRhcnRUeXBlPiBuYW1lZDsKCiAgQXJndW1lbnRUeXBlcyh0aGlzLnBvc2l0aW9uYWwsIHRoaXMubmFtZWQpOwp9CgovLy8gVHlwZSBpbmZvcm1hdGlvbiBjb2xsZWN0ZWQgZm9yIGEgc2luZ2xlIHBhdGggZm9yIGEgbG9jYWwgdmFyaWFibGUuCi8vLwovLy8gVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCBndWFyZGVkIHR5cGUgcHJvbW90aW9uLgovLy8KLy8vIFRoZSB0ZXJtaW5vbG9neSBhbmQgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gdGhpcyBwYXBlcjoKLy8vCi8vLyAgIGh0dHA6Ly93d3cuY3Mud2lsbGlhbXMuZWR1L0ZUZkpQMjAxMS82LVdpbnRoZXIucGRmCi8vLwpjbGFzcyBUeXBlSG9sZGVyIHsKICAvLy8gVGhlIGRlY2xhcmVkIHR5cGUgb2YgdGhlIGxvY2FsIHZhcmlhYmxlLgogIGZpbmFsIGlyLkRhcnRUeXBlIGRlY2xhcmVkVHlwZTsKCiAgLy8vIFRoZSB0eXBlcyB0aGF0IHRoZSBsb2NhbCB2YXJpYWJsZSBpcyBrbm93biB0byBiZSBhbiBpbnN0YW5jZSBvZi4KICBmaW5hbCBTZXQ8aXIuRGFydFR5cGU+IHRydWVUeXBlczsKCiAgLy8vIFRoZSB0eXBlcyB0aGF0IHRoZSBsb2NhbCB2YXJpYWJsZSBpcyBrbm93biBfbm90XyB0byBiZSBhbiBpbnN0YW5jZSBvZi4KICBmaW5hbCBTZXQ8aXIuRGFydFR5cGU+IGZhbHNlVHlwZXM7CgogIGludCBfaGFzaENvZGU7CgogIFR5cGVIb2xkZXIodGhpcy5kZWNsYXJlZFR5cGUsIHRoaXMudHJ1ZVR5cGVzLCB0aGlzLmZhbHNlVHlwZXMpOwoKICAvLy8gQ29tcHV0ZXMgYSBzaW5nbGUgdHlwZSB0aGF0IHNvdW5kbHkgcmVwcmVzZW50cyB0aGUgcHJvbW90ZWQgdHlwZSBvZiB0aGUKICAvLy8gbG9jYWwgdmFyaWFibGUgb24gdGhpcyBzaW5nbGUgcGF0aC4KICBpci5EYXJ0VHlwZSB0eXBlT2YoaXIuVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCkgewogICAgaXIuRGFydFR5cGUgY2FuZGlkYXRlID0gZGVjbGFyZWRUeXBlOwogICAgaWYgKGZhbHNlVHlwZXMgIT0gbnVsbCkgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTcGVjaWFsLWNhc2UgdGhlIGA9PSBudWxsYCByZXByZXNlbnRhdGlvbiB0bwogICAgICAvLyBtYWtlIGl0IGZhc3Rlci4KICAgICAgZm9yIChpci5EYXJ0VHlwZSB0eXBlIGluIGZhbHNlVHlwZXMpIHsKICAgICAgICBpZiAodHlwZUVudmlyb25tZW50LmlzU3VidHlwZU9mKGRlY2xhcmVkVHlwZSwgdHlwZSkpIHsKICAgICAgICAgIHJldHVybiB0eXBlRW52aXJvbm1lbnQubnVsbFR5cGU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAodHJ1ZVR5cGVzICE9IG51bGwpIHsKICAgICAgZm9yIChpci5EYXJ0VHlwZSB0eXBlIGluIHRydWVUeXBlcykgewogICAgICAgIGlmICh0eXBlID09IHR5cGVFbnZpcm9ubWVudC5udWxsVHlwZSkgewogICAgICAgICAgcmV0dXJuIHR5cGU7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YodHlwZSwgY2FuZGlkYXRlKSkgewogICAgICAgICAgY2FuZGlkYXRlID0gdHlwZTsKICAgICAgICB9IGVsc2UgaWYgKCF0eXBlRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YoY2FuZGlkYXRlLCB0eXBlKSkgewogICAgICAgICAgLy8gV2UgY2Fubm90IHByb21vdGUuIE5vIHNpbmdsZSB0eXBlIGlzIG1vc3Qgc3BlY2lmaWMuCiAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDb21wdXRlIGltcGxpZWQgdHlwZXM/IEZvciBpbnN0YW5jZSB3aGVuIHRoZQogICAgICAgICAgLy8gZGVjbGFyZWQgdHlwZSBpcyBgSXRlcmFibGU8U3RyaW5nPmAgYW5kIHRlc3RlZCB0eXBlIGlzCiAgICAgICAgICAvLyBgTGlzdDxkeW5hbWljPmAgd2UgY291bGQgcHJvbW90ZSB0byB0aGUgaW1wbGllZCB0eXBlCiAgICAgICAgICAvLyBgTGlzdDxTdHJpbmc+YC4KICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGNhbmRpZGF0ZTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgewogICAgaWYgKF9oYXNoQ29kZSA9PSBudWxsKSB7CiAgICAgIF9oYXNoQ29kZSA9IEhhc2hpbmcuc2V0SGFzaChmYWxzZVR5cGVzLAogICAgICAgICAgSGFzaGluZy5zZXRIYXNoKHRydWVUeXBlcywgSGFzaGluZy5vYmplY3RIYXNoKGRlY2xhcmVkVHlwZSkpKTsKICAgIH0KICAgIHJldHVybiBfaGFzaENvZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gb3RoZXIgaXMgVHlwZUhvbGRlciAmJgogICAgICAgIGRlY2xhcmVkVHlwZSA9PSBvdGhlci5kZWNsYXJlZFR5cGUgJiYKICAgICAgICBlcXVhbFNldHModHJ1ZVR5cGVzLCBvdGhlci50cnVlVHlwZXMpICYmCiAgICAgICAgZXF1YWxTZXRzKGZhbHNlVHlwZXMsIG90aGVyLmZhbHNlVHlwZXMpOwogIH0KCiAgdm9pZCBfZ2V0VGV4dCgKICAgICAgU3RyaW5nQnVmZmVyIHNiLCBTdHJpbmcgRnVuY3Rpb24oSXRlcmFibGU8aXIuRGFydFR5cGU+KSB0eXBlc1RvVGV4dCkgewogICAgc2Iud3JpdGUoJ3snKTsKICAgIFN0cmluZyBjb21tYSA9ICcnOwogICAgaWYgKHRydWVUeXBlcyAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCd0cnVlOicpOwogICAgICBzYi53cml0ZSh0eXBlc1RvVGV4dCh0cnVlVHlwZXMpKTsKICAgICAgY29tbWEgPSAnLCc7CiAgICB9CiAgICBpZiAoZmFsc2VUeXBlcyAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKGNvbW1hKTsKICAgICAgc2Iud3JpdGUoJ2ZhbHNlOicpOwogICAgICBzYi53cml0ZSh0eXBlc1RvVGV4dChmYWxzZVR5cGVzKSk7CiAgICB9CiAgICBzYi53cml0ZSgnfScpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoJ1R5cGVIb2xkZXIoJyk7CiAgICBzYi53cml0ZSgnZGVjbGFyZWQ9JGRlY2xhcmVkVHlwZScpOwogICAgaWYgKHRydWVUeXBlcyAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCcsdHJ1ZT0kdHJ1ZVR5cGVzJyk7CiAgICB9CiAgICBpZiAoZmFsc2VUeXBlcyAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCcsZmFsc2U9JGZhbHNlVHlwZXMnKTsKICAgIH0KICAgIHNiLndyaXRlKCcpJyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCi8vLyBUeXBlIGluZm9ybWF0aW9uIGZvciBhIHNpbmdsZSBsb2NhbCB2YXJpYWJsZSBvbiBhbGwgcG9zc2libGUgcGF0aHMuCi8vLwovLy8gVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCBndWFyZGVkIHR5cGUgcHJvbW90aW9uLgovLy8KLy8vIFRoZSB0ZXJtaW5vbG9neSBhbmQgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gdGhpcyBwYXBlcjoKLy8vCi8vLyAgIGh0dHA6Ly93d3cuY3Mud2lsbGlhbXMuZWR1L0ZUZkpQMjAxMS82LVdpbnRoZXIucGRmCi8vLwpjbGFzcyBUYXJnZXRJbmZvIHsKICAvLy8gVGhlIGRlY2xhcmVkIHR5cGUgb2YgdGhlIGxvY2FsIHZhcmlhYmxlLgogIGZpbmFsIGlyLkRhcnRUeXBlIGRlY2xhcmVkVHlwZTsKCiAgLy8vIENvbGxlY3RlZCB0eXBlIGluZm9ybWF0aW9uIGZvciBkaXNqb2ludCBwYXRocy4KICBmaW5hbCBJdGVyYWJsZTxUeXBlSG9sZGVyPiB0eXBlSG9sZGVyczsKCiAgLy8vIFR5cGVzIHJlbGV2YW50IGZvciBwcm9tb3Rpb24gb2YgdGhlIGxvY2FsIHZhcmlhYmxlLgogIGZpbmFsIEl0ZXJhYmxlPGlyLkRhcnRUeXBlPiB0eXBlc09mSW50ZXJlc3Q7CgogIFRhcmdldEluZm8odGhpcy5kZWNsYXJlZFR5cGUsIHRoaXMudHlwZUhvbGRlcnMsIHRoaXMudHlwZXNPZkludGVyZXN0KTsKCiAgLy8vIFJldHVybnMgdGhlIFtUYXJnZXRJbmZvXSB0aGF0IGRlc2NyaWJlcyB0aGUgYWRkZWQgdHlwZSBrbm93bGVkZ2UgZm9yIHRoZQogIC8vLyBsb2NhbCB2YXJpYWJsZS4gSWYgW2lzVHJ1ZV0gaXMgYHRydWVgLCB0aGUgbG9jYWwgdmFyaWFibGUgaXMga25vd24gdG8KICAvLy8gYmUgYW4gaW5zdGFuY2Ugb2YgW3R5cGVdLiBJZiBbaXNUcnVlXSBpcyBgZmFsc2VgLCB0aGUgbG9jYWwgdmFyaWFibGUgaXMKICAvLy8ga25vd24gX25vdF8gdG8gYmUgYW4gaW5zdGFuY2Ugb2YgW3R5cGVdLgogIFRhcmdldEluZm8gcHJvbW90ZShpci5EYXJ0VHlwZSB0eXBlLCB7Ym9vbCBpc1RydWV9KSB7CiAgICBTZXQ8VHlwZUhvbGRlcj4gbmV3VHlwZUhvbGRlcnMgPSBuZXcgU2V0PFR5cGVIb2xkZXI+KCk7CgogICAgYm9vbCBhZGRUeXBlSG9sZGVyKFR5cGVIb2xkZXIgdHlwZUhvbGRlcikgewogICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKCiAgICAgIFNldDxpci5EYXJ0VHlwZT4gYWRkQXNDb3B5KFNldDxpci5EYXJ0VHlwZT4gc2V0LCBpci5EYXJ0VHlwZSB0eXBlKSB7CiAgICAgICAgU2V0PGlyLkRhcnRUeXBlPiByZXN1bHQ7CiAgICAgICAgaWYgKHNldCA9PSBudWxsKSB7CiAgICAgICAgICByZXN1bHQgPSBuZXcgU2V0PGlyLkRhcnRUeXBlPigpOwogICAgICAgIH0gZWxzZSBpZiAoc2V0LmNvbnRhaW5zKHR5cGUpKSB7CiAgICAgICAgICByZXR1cm4gc2V0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXN1bHQgPSBTZXQ8aXIuRGFydFR5cGU+LmZyb20oc2V0KTsKICAgICAgICB9CiAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgcmV0dXJuIHJlc3VsdC4uYWRkKHR5cGUpOwogICAgICB9CgogICAgICBTZXQ8aXIuRGFydFR5cGU+IHRydWVUeXBlcyA9IHR5cGVIb2xkZXI/LnRydWVUeXBlczsKICAgICAgU2V0PGlyLkRhcnRUeXBlPiBmYWxzZVR5cGVzID0gdHlwZUhvbGRlcj8uZmFsc2VUeXBlczsKICAgICAgaWYgKGlzVHJ1ZSkgewogICAgICAgIHRydWVUeXBlcyA9IGFkZEFzQ29weSh0cnVlVHlwZXMsIHR5cGUpOwogICAgICB9IGVsc2UgewogICAgICAgIGZhbHNlVHlwZXMgPSBhZGRBc0NvcHkoZmFsc2VUeXBlcywgdHlwZSk7CiAgICAgIH0KICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2hlY2sgdmFsaWRpdHk7IGlmIHRoZSB0cnVlIHR5cGVzIGFyZQogICAgICAvLyBjb250cmFkaWN0aW5nLCBmb3IgaW5zdGFuY2UgaWYgdGhlIGxvY2FsIGlzIGtub3duIHRvIGJlIGFuZCBpbnN0YW5jZQogICAgICAvLyBvZiB0eXBlcyBgaW50YCBhbmQgYFN0cmluZ2Agc2ltdWx0YW5lb3VzbHksIHRoZW4gd2UgY291bGQgZmxhZyBjb2RlCiAgICAgIC8vIGFzIGRlYWQgY29kZS4KICAgICAgbmV3VHlwZUhvbGRlcnMuYWRkKFR5cGVIb2xkZXIoZGVjbGFyZWRUeXBlLCB0cnVlVHlwZXMsIGZhbHNlVHlwZXMpKTsKICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICB9CgogICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICBpZiAodHlwZUhvbGRlcnMuaXNFbXB0eSkgewogICAgICBjaGFuZ2VkIHw9IGFkZFR5cGVIb2xkZXIobnVsbCk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKFR5cGVIb2xkZXIgdHlwZUhvbGRlciBpbiB0eXBlSG9sZGVycykgewogICAgICAgIGNoYW5nZWQgfD0gYWRkVHlwZUhvbGRlcih0eXBlSG9sZGVyKTsKICAgICAgfQogICAgfQogICAgSXRlcmFibGU8aXIuRGFydFR5cGU+IG5ld1R5cGVzT2ZJbnRlcmVzdDsKICAgIGlmICh0eXBlc09mSW50ZXJlc3QuY29udGFpbnModHlwZSkpIHsKICAgICAgbmV3VHlwZXNPZkludGVyZXN0ID0gdHlwZXNPZkludGVyZXN0OwogICAgfSBlbHNlIHsKICAgICAgbmV3VHlwZXNPZkludGVyZXN0ID0gbmV3IFNldDxpci5EYXJ0VHlwZT4uZnJvbSh0eXBlc09mSW50ZXJlc3QpCiAgICAgICAgLi5hZGQodHlwZSk7CiAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgfQogICAgcmV0dXJuIGNoYW5nZWQKICAgICAgICA/IG5ldyBUYXJnZXRJbmZvKGRlY2xhcmVkVHlwZSwgbmV3VHlwZUhvbGRlcnMsIG5ld1R5cGVzT2ZJbnRlcmVzdCkKICAgICAgICA6IHRoaXM7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgW1RhcmdldEluZm9dIHRoYXQgZGVzY3JpYmVzIHRoYXQgdGhlIGxvY2FsIGlzIGVpdGhlciBvZiBbdGhpc10KICAvLy8gb3IgdGhlIFtvdGhlcl0gdHlwZS4KICAvLy8KICAvLy8gUmV0dXJucyBgbnVsbGAgaWYgdGhlIGpvaW4gaXMgZW1wdHkuCiAgVGFyZ2V0SW5mbyBqb2luKFRhcmdldEluZm8gb3RoZXIpIHsKICAgIGlmIChvdGhlciA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdGhpczsKCiAgICBTZXQ8VHlwZUhvbGRlcj4gbmV3VHlwZUhvbGRlcnMgPSBuZXcgU2V0PFR5cGVIb2xkZXI+KCk7CiAgICBTZXQ8aXIuRGFydFR5cGU+IG5ld1R5cGVzT2ZJbnRlcmVzdCA9IG5ldyBTZXQ8aXIuRGFydFR5cGU+KCk7CgogICAgLy8vIEFkZHMgdGhlIFt0eXBlSG9sZGVyc10gdG8gW25ld1R5cGVIb2xkZXJzXSBmb3IgdHlwZXMgaW4KICAgIC8vLyBbb3RoZXJUeXBlc09mSW50ZXJlc3RdIHdoaWxlIHJlbW92aW5nIHRoZSBpbmZvcm1hdGlvbgogICAgLy8vIGludmFsaWRhdGVkIGJ5IFtvdGhlclRydWVUeXBlc10gYW5kIFtvdGhlckZhbHNlVHlwZXNdLgogICAgdm9pZCBhZGRUeXBlSG9sZGVycygKICAgICAgICBJdGVyYWJsZTxUeXBlSG9sZGVyPiB0eXBlSG9sZGVycywKICAgICAgICBTZXQ8aXIuRGFydFR5cGU+IG90aGVyVHJ1ZVR5cGVzLAogICAgICAgIFNldDxpci5EYXJ0VHlwZT4gb3RoZXJGYWxzZVR5cGVzLAogICAgICAgIEl0ZXJhYmxlPGlyLkRhcnRUeXBlPiBvdGhlclR5cGVzT2ZJbnRlcmVzdCkgewogICAgICBmb3IgKFR5cGVIb2xkZXIgdHlwZUhvbGRlciBpbiB0eXBlSG9sZGVycykgewogICAgICAgIFNldDxpci5EYXJ0VHlwZT4gbmV3VHJ1ZVR5cGVzOwogICAgICAgIGlmICh0eXBlSG9sZGVyLnRydWVUeXBlcyAhPSBudWxsKSB7CiAgICAgICAgICBuZXdUcnVlVHlwZXMgPSBuZXcgU2V0PGlyLkRhcnRUeXBlPi5mcm9tKHR5cGVIb2xkZXIudHJ1ZVR5cGVzKTsKCiAgICAgICAgICAvLy8gT25seSB0eXBlcyBpbiBbb3RoZXJUeXBlc09mSW50ZXJlc3RdIGhhcyBpbmZvcm1hdGlvbiBmcm9tIGFsbAogICAgICAgICAgLy8vIHBhdGhzLgogICAgICAgICAgbmV3VHJ1ZVR5cGVzLnJldGFpbkFsbChvdGhlclR5cGVzT2ZJbnRlcmVzdCk7CgogICAgICAgICAgLy8vIFJlbW92ZSB0eXBlcyB0aGF0IGFyZSBrbm93biB0byBiZSBmYWxzZSBvbiBvdGhlciBwYXRoczsgdGhlc2UKICAgICAgICAgIC8vLyB3b3VsZCBhbW91bnQgdG8ga25vd2luZyB0aGF0IGEgdmFyaWFibGUgaXMgb3IgaXMgbm90IG9mIHNvbWUKICAgICAgICAgIC8vLyB0eXBlLgogICAgICAgICAgbmV3VHJ1ZVR5cGVzLnJlbW92ZUFsbChvdGhlckZhbHNlVHlwZXMpOwogICAgICAgICAgaWYgKG5ld1RydWVUeXBlcy5pc0VtcHR5KSB7CiAgICAgICAgICAgIG5ld1RydWVUeXBlcyA9IG51bGw7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBuZXdUeXBlc09mSW50ZXJlc3QuYWRkQWxsKG5ld1RydWVUeXBlcyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIFNldDxpci5EYXJ0VHlwZT4gbmV3RmFsc2VUeXBlczsKICAgICAgICBpZiAodHlwZUhvbGRlci5mYWxzZVR5cGVzICE9IG51bGwpIHsKICAgICAgICAgIG5ld0ZhbHNlVHlwZXMgPSBuZXcgU2V0PGlyLkRhcnRUeXBlPi5mcm9tKHR5cGVIb2xkZXIuZmFsc2VUeXBlcyk7CgogICAgICAgICAgLy8vIE9ubHkgdHlwZXMgaW4gW290aGVyVHlwZXNPZkludGVyZXN0XSBoYXMgaW5mb3JtYXRpb24gZnJvbSBhbGwKICAgICAgICAgIC8vLyBwYXRocy4KICAgICAgICAgIG5ld0ZhbHNlVHlwZXMucmV0YWluQWxsKG90aGVyVHlwZXNPZkludGVyZXN0KTsKCiAgICAgICAgICAvLy8gUmVtb3ZlIHR5cGVzIHRoYXQgYXJlIGtub3duIHRvIGJlIHRydWUgb24gb3RoZXIgcGF0aHM7IHRoZXNlCiAgICAgICAgICAvLy8gd291bGQgYW1vdW50IHRvIGtub3dpbmcgdGhhdCBhIHZhcmlhYmxlIGlzIG9yIGlzIG5vdCBvZiBzb21lCiAgICAgICAgICAvLy8gdHlwZS4KICAgICAgICAgIG5ld0ZhbHNlVHlwZXMucmVtb3ZlQWxsKG90aGVyVHJ1ZVR5cGVzKTsKICAgICAgICAgIGlmIChuZXdGYWxzZVR5cGVzLmlzRW1wdHkpIHsKICAgICAgICAgICAgbmV3RmFsc2VUeXBlcyA9IG51bGw7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBuZXdUeXBlc09mSW50ZXJlc3QuYWRkQWxsKG5ld0ZhbHNlVHlwZXMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAobmV3VHJ1ZVR5cGVzICE9IG51bGwgfHwgbmV3RmFsc2VUeXBlcyAhPSBudWxsKSB7CiAgICAgICAgICAvLyBPbmx5IGluY2x1ZGUgdHlwZSBob2xkZXJzIHdpdGggaW5mb3JtYXRpb24uCiAgICAgICAgICBuZXdUeXBlSG9sZGVycwogICAgICAgICAgICAgIC5hZGQobmV3IFR5cGVIb2xkZXIoZGVjbGFyZWRUeXBlLCBuZXdUcnVlVHlwZXMsIG5ld0ZhbHNlVHlwZXMpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBTZXQ8aXIuRGFydFR5cGU+IHRoaXNUcnVlVHlwZXMgPSBuZXcgU2V0PGlyLkRhcnRUeXBlPigpOwogICAgU2V0PGlyLkRhcnRUeXBlPiB0aGlzRmFsc2VUeXBlcyA9IG5ldyBTZXQ8aXIuRGFydFR5cGU+KCk7CiAgICBmb3IgKFR5cGVIb2xkZXIgdHlwZUhvbGRlciBpbiB0eXBlSG9sZGVycykgewogICAgICBpZiAodHlwZUhvbGRlci50cnVlVHlwZXMgIT0gbnVsbCkgewogICAgICAgIHRoaXNUcnVlVHlwZXMuYWRkQWxsKHR5cGVIb2xkZXIudHJ1ZVR5cGVzKTsKICAgICAgfQogICAgICBpZiAodHlwZUhvbGRlci5mYWxzZVR5cGVzICE9IG51bGwpIHsKICAgICAgICB0aGlzRmFsc2VUeXBlcy5hZGRBbGwodHlwZUhvbGRlci5mYWxzZVR5cGVzKTsKICAgICAgfQogICAgfQoKICAgIFNldDxpci5EYXJ0VHlwZT4gb3RoZXJUcnVlVHlwZXMgPSBuZXcgU2V0PGlyLkRhcnRUeXBlPigpOwogICAgU2V0PGlyLkRhcnRUeXBlPiBvdGhlckZhbHNlVHlwZXMgPSBuZXcgU2V0PGlyLkRhcnRUeXBlPigpOwogICAgZm9yIChUeXBlSG9sZGVyIHR5cGVIb2xkZXIgaW4gb3RoZXIudHlwZUhvbGRlcnMpIHsKICAgICAgaWYgKHR5cGVIb2xkZXIudHJ1ZVR5cGVzICE9IG51bGwpIHsKICAgICAgICBvdGhlclRydWVUeXBlcy5hZGRBbGwodHlwZUhvbGRlci50cnVlVHlwZXMpOwogICAgICB9CiAgICAgIGlmICh0eXBlSG9sZGVyLmZhbHNlVHlwZXMgIT0gbnVsbCkgewogICAgICAgIG90aGVyRmFsc2VUeXBlcy5hZGRBbGwodHlwZUhvbGRlci5mYWxzZVR5cGVzKTsKICAgICAgfQogICAgfQoKICAgIGFkZFR5cGVIb2xkZXJzKHRoaXMudHlwZUhvbGRlcnMsIG90aGVyVHJ1ZVR5cGVzLCBvdGhlckZhbHNlVHlwZXMsCiAgICAgICAgb3RoZXIudHlwZXNPZkludGVyZXN0KTsKICAgIGFkZFR5cGVIb2xkZXJzKAogICAgICAgIG90aGVyLnR5cGVIb2xkZXJzLCB0aGlzVHJ1ZVR5cGVzLCB0aGlzRmFsc2VUeXBlcywgdGhpcy50eXBlc09mSW50ZXJlc3QpOwoKICAgIGlmIChuZXdUeXBlSG9sZGVycy5pc0VtcHR5KSB7CiAgICAgIGFzc2VydChuZXdUeXBlc09mSW50ZXJlc3QuaXNFbXB0eSk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHJldHVybiBuZXcgVGFyZ2V0SW5mbyhkZWNsYXJlZFR5cGUsIG5ld1R5cGVIb2xkZXJzLCBuZXdUeXBlc09mSW50ZXJlc3QpOwogIH0KCiAgLy8vIENvbXB1dGVzIGEgc2luZ2xlIHR5cGUgdGhhdCBzb3VuZGx5IHJlcHJlc2VudHMgdGhlIHByb21vdGVkIHR5cGUgb2YgdGhlCiAgLy8vIGxvY2FsIHZhcmlhYmxlIG9uIGFsbCBwb3NzaWJsZSBwYXRocy4KICBpci5EYXJ0VHlwZSB0eXBlT2YoaXIuVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCkgewogICAgaXIuRGFydFR5cGUgY2FuZGlkYXRlID0gbnVsbDsKICAgIGZvciAoVHlwZUhvbGRlciB0eXBlSG9sZGVyIGluIHR5cGVIb2xkZXJzKSB7CiAgICAgIGlyLkRhcnRUeXBlIHR5cGUgPSB0eXBlSG9sZGVyLnR5cGVPZih0eXBlRW52aXJvbm1lbnQpOwogICAgICBpZiAodHlwZSA9PSBudWxsKSB7CiAgICAgICAgLy8gV2UgY2Fubm90IHByb21vdGUuIE5vIHNpbmdsZSB0eXBlIGlzIG1vc3Qgc3BlY2lmaWMuCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgaWYgKGNhbmRpZGF0ZSA9PSBudWxsKSB7CiAgICAgICAgY2FuZGlkYXRlID0gdHlwZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAodHlwZSA9PSB0eXBlRW52aXJvbm1lbnQubnVsbFR5cGUpIHsKICAgICAgICAgIC8vIEtlZXAgdGhlIGN1cnJlbnQgY2FuZGlkYXRlLgogICAgICAgIH0gZWxzZSBpZiAoY2FuZGlkYXRlID09IHR5cGVFbnZpcm9ubWVudC5udWxsVHlwZSkgewogICAgICAgICAgY2FuZGlkYXRlID0gdHlwZTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVFbnZpcm9ubWVudC5pc1N1YnR5cGVPZihjYW5kaWRhdGUsIHR5cGUpKSB7CiAgICAgICAgICBjYW5kaWRhdGUgPSB0eXBlOwogICAgICAgIH0gZWxzZSBpZiAoIXR5cGVFbnZpcm9ubWVudC5pc1N1YnR5cGVPZih0eXBlLCBjYW5kaWRhdGUpKSB7CiAgICAgICAgICAvLyBXZSBjYW5ub3QgcHJvbW90ZS4gTm8gcHJvbW90ZWQgdHlwZSBvZiBvbmUgcGF0aCBpcyBhIHN1cGVydHlwZSBvZgogICAgICAgICAgLy8gdGhlIHByb21vdGVkIHR5cGUgZnJvbSBhbGwgb3RoZXIgcGF0aHMuCiAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDb21wdXRlIGEgZ3JlYXRlc3QgbG93ZXIgYm91bmQsIGluc3RlYWQ/CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBjYW5kaWRhdGU7CiAgfQoKICB2b2lkIF9nZXRUZXh0KAogICAgICBTdHJpbmdCdWZmZXIgc2IsIFN0cmluZyBGdW5jdGlvbihJdGVyYWJsZTxpci5EYXJ0VHlwZT4pIHR5cGVzVG9UZXh0KSB7CiAgICBzYi53cml0ZSgnWycpOwogICAgU3RyaW5nIGNvbW1hID0gJyc7CiAgICBmb3IgKFR5cGVIb2xkZXIgdHlwZUhvbGRlciBpbiB0eXBlSG9sZGVycykgewogICAgICBzYi53cml0ZShjb21tYSk7CiAgICAgIHR5cGVIb2xkZXIuX2dldFRleHQoc2IsIHR5cGVzVG9UZXh0KTsKICAgICAgY29tbWEgPSAnLCc7CiAgICB9CiAgICBzYi53cml0ZSgnfCcpOwogICAgc2Iud3JpdGUodHlwZXNUb1RleHQodHlwZXNPZkludGVyZXN0KSk7CiAgICBzYi53cml0ZSgnXScpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoJ1RhcmdldEluZm8oJyk7CiAgICBzYi53cml0ZSgnZGVjbGFyZWRUeXBlPSRkZWNsYXJlZFR5cGUsJyk7CiAgICBzYi53cml0ZSgndHlwZUhvbGRlcnM9JHR5cGVIb2xkZXJzLCcpOwogICAgc2Iud3JpdGUoJ2RlY2xhcmF0aW9uc09mSW50ZXJlc3Q9JHR5cGVzT2ZJbnRlcmVzdCcpOwogICAgc2Iud3JpdGUoJyknKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKLy8vIE1hcCBmcm9tIGxvY2FsIHZhcmlhYmxlcyB0byB0eXBlIGluZm9ybWF0aW9uIHVzZWQgZm9yIGd1YXJkZWQgdHlwZQovLy8gcHJvbW90aW9uLgovLy8KLy8vIFRoZSB0ZXJtaW5vbG9neSBhbmQgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gdGhpcyBwYXBlcjoKLy8vCi8vLyAgIGh0dHA6Ly93d3cuY3Mud2lsbGlhbXMuZWR1L0ZUZkpQMjAxMS82LVdpbnRoZXIucGRmCi8vLwpjbGFzcyBUeXBlTWFwIHsKICBmaW5hbCBNYXA8aXIuVmFyaWFibGVEZWNsYXJhdGlvbiwgVGFyZ2V0SW5mbz4gX3RhcmdldEluZm9NYXA7CgogIGNvbnN0IFR5cGVNYXAoW3RoaXMuX3RhcmdldEluZm9NYXAgPSBjb25zdCB7fV0pOwoKICAvLy8gUmV0dXJucyB0aGUgW1R5cGVNYXBdIHRoYXQgZGVzY3JpYmVzIHRoZSBhZGRlZCB0eXBlIGtub3dsZWRnZSBmb3IgdGhlCiAgLy8vIGxvY2FsIFt2YXJpYWJsZV0uIElmIFtpc1RydWVdIGlzIGB0cnVlYCwgdGhlIGxvY2FsIFt2YXJpYWJsZV0gaXMga25vd24gdG8KICAvLy8gYmUgYW4gaW5zdGFuY2Ugb2YgW3R5cGVdLiBJZiBbaXNUcnVlXSBpcyBgZmFsc2VgLCB0aGUgbG9jYWwgW3ZhcmlhYmxlXSBpcwogIC8vLyBrbm93biBfbm90XyB0byBiZSBhbiBpbnN0YW5jZSBvZiBbdHlwZV0uCiAgVHlwZU1hcCBwcm9tb3RlKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIGlyLkRhcnRUeXBlIHR5cGUsCiAgICAgIHtib29sIGlzVHJ1ZX0pIHsKICAgIE1hcDxpci5WYXJpYWJsZURlY2xhcmF0aW9uLCBUYXJnZXRJbmZvPiBuZXdJbmZvTWFwID0KICAgICAgICBuZXcgTWFwPGlyLlZhcmlhYmxlRGVjbGFyYXRpb24sIFRhcmdldEluZm8+LmZyb20oX3RhcmdldEluZm9NYXApOwogICAgVGFyZ2V0SW5mbyB0YXJnZXRJbmZvID0gbmV3SW5mb01hcFt2YXJpYWJsZV07CiAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgIGlmICh0YXJnZXRJbmZvICE9IG51bGwpIHsKICAgICAgVGFyZ2V0SW5mbyByZXN1bHQgPSB0YXJnZXRJbmZvLnByb21vdGUodHlwZSwgaXNUcnVlOiBpc1RydWUpOwogICAgICBjaGFuZ2VkID0gIWlkZW50aWNhbCh0YXJnZXRJbmZvLCByZXN1bHQpOwogICAgICB0YXJnZXRJbmZvID0gcmVzdWx0OwogICAgfSBlbHNlIHsKICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgIFNldDxpci5EYXJ0VHlwZT4gdHJ1ZVR5cGVzID0KICAgICAgICAgIGlzVHJ1ZSA/IChuZXcgU2V0PGlyLkRhcnRUeXBlPigpLi5hZGQodHlwZSkpIDogbnVsbDsKICAgICAgU2V0PGlyLkRhcnRUeXBlPiBmYWxzZVR5cGVzID0KICAgICAgICAgIGlzVHJ1ZSA/IG51bGwgOiAobmV3IFNldDxpci5EYXJ0VHlwZT4oKS4uYWRkKHR5cGUpKTsKICAgICAgVHlwZUhvbGRlciB0eXBlSG9sZGVyID0KICAgICAgICAgIG5ldyBUeXBlSG9sZGVyKHZhcmlhYmxlLnR5cGUsIHRydWVUeXBlcywgZmFsc2VUeXBlcyk7CiAgICAgIHRhcmdldEluZm8gPSBuZXcgVGFyZ2V0SW5mbygKICAgICAgICAgIHZhcmlhYmxlLnR5cGUsIDxUeXBlSG9sZGVyPlt0eXBlSG9sZGVyXSwgPGlyLkRhcnRUeXBlPlt0eXBlXSk7CiAgICB9CiAgICBuZXdJbmZvTWFwW3ZhcmlhYmxlXSA9IHRhcmdldEluZm87CiAgICByZXR1cm4gY2hhbmdlZCA/IG5ldyBUeXBlTWFwKG5ld0luZm9NYXApIDogdGhpczsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBbVHlwZU1hcF0gdGhhdCBkZXNjcmliZXMgdGhhdCB0aGUgbG9jYWxzIGFyZSBlaXRoZXIgb2YgW3RoaXNdCiAgLy8vIG9yIHRoZSBbb3RoZXJdIHR5cGVzLgogIFR5cGVNYXAgam9pbihUeXBlTWFwIG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRoaXM7CgogICAgTWFwPGlyLlZhcmlhYmxlRGVjbGFyYXRpb24sIFRhcmdldEluZm8+IG5ld0luZm9NYXAgPSB7fTsKICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgX3RhcmdldEluZm9NYXAuZm9yRWFjaCgoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwgVGFyZ2V0SW5mbyBpbmZvKSB7CiAgICAgIFRhcmdldEluZm8gcmVzdWx0ID0gaW5mby5qb2luKG90aGVyLl90YXJnZXRJbmZvTWFwW3ZhcmlhYmxlXSk7CiAgICAgIGNoYW5nZWQgfD0gIWlkZW50aWNhbChpbmZvLCByZXN1bHQpOwogICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHsKICAgICAgICAvLyBBZGQgb25seSBub24tZW1wdHkgaW5mb3JtYXRpb24uCiAgICAgICAgbmV3SW5mb01hcFt2YXJpYWJsZV0gPSByZXN1bHQ7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIGNoYW5nZWQgPyBuZXcgVHlwZU1hcChuZXdJbmZvTWFwKSA6IHRoaXM7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgW1R5cGVNYXBdIGluIHdoaWNoIGFsbCB0eXBlIGluZm9ybWF0aW9uIGZvciBhbnkgb2YgdGhlCiAgLy8vIFt2YXJpYWJsZXNdIGhhcyBiZWVuIHJlbW92ZWQuCiAgVHlwZU1hcCByZW1vdmUoSXRlcmFibGU8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4gdmFyaWFibGVzKSB7CiAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgIE1hcDxpci5WYXJpYWJsZURlY2xhcmF0aW9uLCBUYXJnZXRJbmZvPiBuZXdJbmZvTWFwID0ge307CiAgICBfdGFyZ2V0SW5mb01hcC5mb3JFYWNoKChpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBUYXJnZXRJbmZvIGluZm8pIHsKICAgICAgaWYgKCF2YXJpYWJsZXMuY29udGFpbnModmFyaWFibGUpKSB7CiAgICAgICAgbmV3SW5mb01hcFt2YXJpYWJsZV0gPSBpbmZvOwogICAgICB9IGVsc2UgewogICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBjaGFuZ2VkID8gbmV3IFR5cGVNYXAobmV3SW5mb01hcCkgOiB0aGlzOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIFtUeXBlTWFwXSB3aGVyZSB0eXBlIGluZm9ybWF0aW9uIGZvciBgbm9kZS52YXJpYWJsZWAgaXMKICAvLy8gcmVkdWNlZCB0byB0aGUgcHJvbW90aW9ucyB1cGhlbGQgYnkgYW4gYXNzaWdubWVudCB0byBgbm9kZS52YXJpYWJsZWAgb2YKICAvLy8gdGhlIHN0YXRpYyBbdHlwZV0uCiAgVHlwZU1hcCByZWR1Y2UoaXIuVmFyaWFibGVTZXQgbm9kZSwgaXIuRGFydFR5cGUgdHlwZSwKICAgICAgaXIuVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCkgewogICAgTWFwPGlyLlZhcmlhYmxlRGVjbGFyYXRpb24sIFRhcmdldEluZm8+IG5ld0luZm9NYXAgPSB7fTsKICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgX3RhcmdldEluZm9NYXAuZm9yRWFjaCgoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwgVGFyZ2V0SW5mbyBpbmZvKSB7CiAgICAgIGlmICh2YXJpYWJsZSAhPSBub2RlLnZhcmlhYmxlKSB7CiAgICAgICAgbmV3SW5mb01hcFt2YXJpYWJsZV0gPSBpbmZvOwogICAgICB9IGVsc2UgaWYgKHR5cGUgIT0gbnVsbCkgewogICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgIFNldDxpci5EYXJ0VHlwZT4gbmV3VHlwZXNPZkludGVyZXN0ID0gbmV3IFNldDxpci5EYXJ0VHlwZT4oKTsKICAgICAgICBmb3IgKGlyLkRhcnRUeXBlIHR5cGVPZkludGVyZXN0IGluIGluZm8udHlwZXNPZkludGVyZXN0KSB7CiAgICAgICAgICBpZiAodHlwZUVudmlyb25tZW50LmlzU3VidHlwZU9mKHR5cGUsIHR5cGVPZkludGVyZXN0KSkgewogICAgICAgICAgICBuZXdUeXBlc09mSW50ZXJlc3QuYWRkKHR5cGVPZkludGVyZXN0KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKG5ld1R5cGVzT2ZJbnRlcmVzdC5pc05vdEVtcHR5KSB7CiAgICAgICAgICBUeXBlSG9sZGVyIHR5cGVIb2xkZXJJZk5vbk51bGwgPQogICAgICAgICAgICAgIG5ldyBUeXBlSG9sZGVyKGluZm8uZGVjbGFyZWRUeXBlLCBuZXdUeXBlc09mSW50ZXJlc3QsIG51bGwpOwogICAgICAgICAgVHlwZUhvbGRlciB0eXBlSG9sZGVySWZOdWxsID0gbmV3IFR5cGVIb2xkZXIoaW5mby5kZWNsYXJlZFR5cGUsIG51bGwsCiAgICAgICAgICAgICAgbmV3IFNldDxpci5EYXJ0VHlwZT4oKS4uYWRkKGluZm8uZGVjbGFyZWRUeXBlKSk7CiAgICAgICAgICBuZXdJbmZvTWFwW3ZhcmlhYmxlXSA9IG5ldyBUYXJnZXRJbmZvKAogICAgICAgICAgICAgIGluZm8uZGVjbGFyZWRUeXBlLAogICAgICAgICAgICAgIDxUeXBlSG9sZGVyPlt0eXBlSG9sZGVySWZOb25OdWxsLCB0eXBlSG9sZGVySWZOdWxsXSwKICAgICAgICAgICAgICBuZXdUeXBlc09mSW50ZXJlc3QpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gY2hhbmdlZCA/IG5ldyBUeXBlTWFwKG5ld0luZm9NYXApIDogdGhpczsKICB9CgogIC8vLyBDb21wdXRlcyBhIHNpbmdsZSB0eXBlIHRoYXQgc291bmRseSByZXByZXNlbnRzIHRoZSBwcm9tb3RlZCB0eXBlIG9mCiAgLy8vIGBub2RlLnZhcmlhYmxlYCBvbiBhbGwgcG9zc2libGUgcGF0aHMuCiAgaXIuRGFydFR5cGUgdHlwZU9mKGlyLlZhcmlhYmxlR2V0IG5vZGUsIGlyLlR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQpIHsKICAgIFRhcmdldEluZm8gaW5mbyA9IF90YXJnZXRJbmZvTWFwW25vZGUudmFyaWFibGVdOwogICAgaXIuRGFydFR5cGUgdHlwZTsKICAgIGlmIChpbmZvICE9IG51bGwpIHsKICAgICAgdHlwZSA9IGluZm8udHlwZU9mKHR5cGVFbnZpcm9ubWVudCk7CiAgICB9CiAgICByZXR1cm4gdHlwZSA/PyBub2RlLnByb21vdGVkVHlwZSA/PyBub2RlLnZhcmlhYmxlLnR5cGU7CiAgfQoKICBTdHJpbmcgZ2V0VGV4dChTdHJpbmcgRnVuY3Rpb24oSXRlcmFibGU8aXIuRGFydFR5cGU+KSB0eXBlc1RvVGV4dCkgewogICAgU3RyaW5n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MTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnIHNob3cgSW50ZXJmYWNlVHlwZTsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnY2xhc3Nfc2V0LmRhcnQnOwoKLy8gVE9ETyhqb2hubml3aW50aGVyKTogTW92ZSBtb3JlIG1ldGhvZHMgZnJvbSBgSkNsb3NlZFdvcmxkYCB0bwovLyBgQ2xhc3NIaWVyYXJjaHlgLgphYnN0cmFjdCBjbGFzcyBDbGFzc0hpZXJhcmNoeSB7CiAgLy8vIERlc2VyaWFsaXplcyBhIFtDbGFzc0hpZXJhcmNoeV0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBDbGFzc0hpZXJhcmNoeS5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgICAgICBEYXRhU291cmNlIHNvdXJjZSwgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpID0KICAgICAgQ2xhc3NIaWVyYXJjaHlJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZTsKCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbQ2xhc3NIaWVyYXJjaHldIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtjbHNdIGlzIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluc3RhbnRpYXRlZC4KICBib29sIGlzSW5zdGFudGlhdGVkKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbY2xzXSBpcyBkaXJlY3RseSBpbnN0YW50aWF0ZWQuIFRoaXMgbWVhbnMgdGhhdCBhdAogIC8vLyBydW50aW1lIGluc3RhbmNlcyBvZiBleGFjdGx5IFtjbHNdIGFyZSBhc3N1bWVkIHRvIGV4aXN0LgogIGJvb2wgaXNEaXJlY3RseUluc3RhbnRpYXRlZChDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2Nsc10gaXMgYWJzdHJhY3RseSBpbnN0YW50aWF0ZWQuIFRoaXMgbWVhbnMgdGhhdCBhdAogIC8vLyBydW50aW1lIGluc3RhbmNlcyBvZiBbY2xzXSBvciB1bmtub3duIHN1YmNsYXNzZXMgb2YgW2Nsc10gYXJlIGFzc3VtZWQgdG8KICAvLy8gZXhpc3QuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCB0byBtYXJrIG5hdGl2ZSBhbmQvb3IgcmVmbGVjdGFibGUgY2xhc3NlcyBhcyBpbnN0YW50aWF0ZWQuCiAgLy8vIEZvciBuYXRpdmUgY2xhc3NlcyB3ZSBkbyBub3Qga25vdyB0aGUgZXhhY3QgY2xhc3MgdGhhdCBpbnN0YW50aWF0ZXMgW2Nsc10KICAvLy8gc28gW2Nsc10gaGVyZSByZXByZXNlbnRzIHRoZSByb290IG9mIHRoZSBzdWJjbGFzc2VzLiBGb3IgcmVmbGVjdGFibGUKICAvLy8gY2xhc3NlcyB3ZSBuZWVkIGV2ZW50IGFic3RyYWN0IGNsYXNzZXMgdG8gYmUgJ2xpdmUnIGV2ZW4gdGhvdWdoIHRoZXkKICAvLy8gY2Fubm90IHRoZW1zZWx2ZXMgYmUgaW5zdGFudGlhdGVkLgogIGJvb2wgaXNBYnN0cmFjdGx5SW5zdGFudGlhdGVkKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbY2xzXSBpcyBlaXRoZXIgZGlyZWN0bHkgb3IgYWJzdHJhY3RseSBpbnN0YW50aWF0ZWQuCiAgLy8vCiAgLy8vIFNlZSBbaXNEaXJlY3RseUluc3RhbnRpYXRlZF0gYW5kIFtpc0Fic3RyYWN0bHlJbnN0YW50aWF0ZWRdLgogIGJvb2wgaXNFeHBsaWNpdGx5SW5zdGFudGlhdGVkKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbY2xzXSBpcyBpbmRpcmVjdGx5IGluc3RhbnRpYXRlZCwgdGhhdCBpcyB0aHJvdWdoIGEKICAvLy8gc3ViY2xhc3MuCiAgYm9vbCBpc0luZGlyZWN0bHlJbnN0YW50aWF0ZWQoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybiBgdHJ1ZWAgaWYgW3hdIGlzIGEgKG5vbi1zdHJpY3QpIHN1YmNsYXNzIG9mIFt5XS4KICBib29sIGlzU3ViY2xhc3NPZihDbGFzc0VudGl0eSB4LCBDbGFzc0VudGl0eSB5KTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFt4XSBpcyBhIHN1YnR5cGUgb2YgW3ldLCB0aGF0IGlzLCBpZiBbeF0gaW1wbGVtZW50cyBhbgogIC8vLyBpbnN0YW5jZSBvZiBbeV0uCiAgYm9vbCBpc1N1YnR5cGVPZihDbGFzc0VudGl0eSB4LCBDbGFzc0VudGl0eSB5KTsKCiAgLy8vIFJldHVybnMgYW4gaXRlcmFibGUgb3ZlciB0aGUgZGlyZWN0bHkgaW5zdGFudGlhdGVkIGNsYXNzZXMgdGhhdCBleHRlbmQKICAvLy8gW2Nsc10gcG9zc2libHkgaW5jbHVkaW5nIFtjbHNdIGl0c2VsZiwgaWYgaXQgaXMgbGl2ZS4KICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gc3ViY2xhc3Nlc09mKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGFuIGl0ZXJhYmxlIG92ZXIgdGhlIGRpcmVjdGx5IGluc3RhbnRpYXRlZCBjbGFzc2VzIHRoYXQgZXh0ZW5kCiAgLy8vIFtjbHNdIF9ub3RfIGluY2x1ZGluZyBbY2xzXSBpdHNlbGYuCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IHN0cmljdFN1YmNsYXNzZXNPZihDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGxpdmUgY2xhc3NlcyB0aGF0IGV4dGVuZCBbY2xzXSBfbm90XwogIC8vLyBpbmNsdWRpbmcgW2Nsc10gaXRzZWxmLgogIGludCBzdHJpY3RTdWJjbGFzc0NvdW50KENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBBcHBsaWVzIFtmXSB0byBlYWNoIGxpdmUgY2xhc3MgdGhhdCBleHRlbmQgW2Nsc10gX25vdF8gaW5jbHVkaW5nIFtjbHNdCiAgLy8vIGl0c2VsZi4KICB2b2lkIGZvckVhY2hTdHJpY3RTdWJjbGFzc09mKAogICAgICBDbGFzc0VudGl0eSBjbHMsIEl0ZXJhdGlvblN0ZXAgZihDbGFzc0VudGl0eSBjbHMpKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtwcmVkaWNhdGVdIGFwcGxpZXMgdG8gYW55IGxpdmUgY2xhc3MgdGhhdCBleHRlbmQgW2Nsc10KICAvLy8gX25vdF8gaW5jbHVkaW5nIFtjbHNdIGl0c2VsZi4KICBib29sIGFueVN0cmljdFN1YmNsYXNzT2YoQ2xhc3NFbnRpdHkgY2xzLCBib29sIHByZWRpY2F0ZShDbGFzc0VudGl0eSBjbHMpKTsKCiAgLy8vIFJldHVybnMgYW4gaXRlcmFibGUgb3ZlciB0aGUgZGlyZWN0bHkgaW5zdGFudGlhdGVkIHRoYXQgaW1wbGVtZW50IFtjbHNdCiAgLy8vIHBvc3NpYmx5IGluY2x1ZGluZyBbY2xzXSBpdHNlbGYsIGlmIGl0IGlzIGxpdmUuCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IHN1YnR5cGVzT2YoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYW4gaXRlcmFibGUgb3ZlciB0aGUgZGlyZWN0bHkgaW5zdGFudGlhdGVkIHRoYXQgaW1wbGVtZW50IFtjbHNdCiAgLy8vIF9ub3RfIGluY2x1ZGluZyBbY2xzXS4KICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gc3RyaWN0U3VidHlwZXNPZihDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGxpdmUgY2xhc3NlcyB0aGF0IGltcGxlbWVudCBbY2xzXSBfbm90XwogIC8vLyBpbmNsdWRpbmcgW2Nsc10gaXRzZWxmLgogIGludCBzdHJpY3RTdWJ0eXBlQ291bnQoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIEFwcGxpZXMgW2ZdIHRvIGVhY2ggbGl2ZSBjbGFzcyB0aGF0IGltcGxlbWVudHMgW2Nsc10gX25vdF8gaW5jbHVkaW5nIFtjbHNdCiAgLy8vIGl0c2VsZi4KICB2b2lkIGZvckVhY2hTdHJpY3RTdWJ0eXBlT2YoCiAgICAgIENsYXNzRW50aXR5IGNscywgSXRlcmF0aW9uU3RlcCBmKENsYXNzRW50aXR5IGNscykpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW3ByZWRpY2F0ZV0gYXBwbGllcyB0byBhbnkgbGl2ZSBjbGFzcyB0aGF0IGltcGxlbWVudHMKICAvLy8gW2Nsc10gX25vdF8gaW5jbHVkaW5nIFtjbHNdIGl0c2VsZi4KICBib29sIGFueVN0cmljdFN1YnR5cGVPZihDbGFzc0VudGl0eSBjbHMsIGJvb2wgcHJlZGljYXRlKENsYXNzRW50aXR5IGNscykpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2FdIGFuZCBbYl0gaGF2ZSBhbnkga25vd24gY29tbW9uIHN1YnR5cGVzLgogIGJvb2wgaGF2ZUFueUNvbW1vblN1YnR5cGVzKENsYXNzRW50aXR5IGEsIENsYXNzRW50aXR5IGIpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGRpcmVjdGx5IGluc3RhbnRpYXRlZCBjbGFzcyBvdGhlciB0aGFuIFtjbHNdIGV4dGVuZHMKICAvLy8gW2Nsc10uCiAgYm9vbCBoYXNBbnlTdHJpY3RTdWJjbGFzcyhDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGRpcmVjdGx5IGluc3RhbnRpYXRlZCBjbGFzcyBvdGhlciB0aGFuIFtjbHNdCiAgLy8vIGltcGxlbWVudHMgW2Nsc10uCiAgYm9vbCBoYXNBbnlTdHJpY3RTdWJ0eXBlKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBhbGwgZGlyZWN0bHkgaW5zdGFudGlhdGVkIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgW2Nsc10KICAvLy8gZXh0ZW5kIGl0LgogIGJvb2wgaGFzT25seVN1YmNsYXNzZXMoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYSBbU3ViY2xhc3NSZXN1bHRdIGZvciB0aGUgc3ViY2xhc3NlcyB0aGF0IGFyZSBjb250YWluZWQgaW4KICAvLy8gdGhlIHN1YmNsYXNzL3N1YnR5cGUgc2V0cyBvZiBib3RoIFtjbHMxXSBhbmQgW2NsczJdLgogIC8vLwogIC8vLyBDbGFzc2VzIHRoYXQgYXJlIGltcGxpZWQgYnkgaW5jbHVkZWQgc3VwZXJjbGFzc2VzL3N1cGVydHlwZXMgYXJlIG5vdAogIC8vLyByZXR1cm5lZC4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGZvciB0aGlzIGhpZXJhcmNoeQogIC8vLwogIC8vLyAgICAgY2xhc3MgQSB7fQogIC8vLyAgICAgY2xhc3MgQiB7fQogIC8vLyAgICAgY2xhc3MgQyBpbXBsZW1lbnRzIEEsIEIge30KICAvLy8gICAgIGNsYXNzIEQgZXh0ZW5kcyBDIHt9CiAgLy8vCiAgLy8vIHRoZSBxdWVyeQogIC8vLwogIC8vLyAgICAgY29tbW9uU3ViY2xhc3NlcyhBLCBDbGFzc1F1ZXJ5LlNVQlRZUEUsIEIsIENsYXNzUXVlcnkuU1VCVFlQRSkKICAvLy8KICAvLy8gcmV0dXJuIHRoZSBzZXQge0N9IGJlY2F1c2UgW0RdIGlzIGltcGxpZWQgYnkgW0NdLgogIFN1YmNsYXNzUmVzdWx0IGNvbW1vblN1YmNsYXNzZXMoCiAgICAgIENsYXNzRW50aXR5IGNsczEsIENsYXNzUXVlcnkgcXVlcnkxLCBDbGFzc0VudGl0eSBjbHMyLCBDbGFzc1F1ZXJ5IHF1ZXJ5Mik7CgogIC8vLyBSZXR1cm5zIFtDbGFzc0hpZXJhcmNoeU5vZGVdIGZvciBbY2xzXSB1c2VkIHRvIG1vZGVsIHRoZSBjbGFzcyBoaWVyYXJjaGllcwogIC8vLyBvZiBrbm93biBjbGFzc2VzLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBpcyBvbmx5IHByb3ZpZGVkIGZvciB0ZXN0aW5nLiBGb3IgcXVlcmllcyBvbiBjbGFzc2VzLCB1c2UgdGhlCiAgLy8vIG1ldGhvZHMgZGVmaW5lZCBpbiBbSkNsb3NlZFdvcmxkXS4KICBDbGFzc0hpZXJhcmNoeU5vZGUgZ2V0Q2xhc3NIaWVyYXJjaHlOb2RlKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIFtDbGFzc1NldF0gZm9yIFtjbHNdIHVzZWQgdG8gbW9kZWwgdGhlIGV4dGVuZHMgYW5kIGltcGxlbWVudHMKICAvLy8gcmVsYXRpb25zIG9mIGtub3duIGNsYXNzZXMuCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIGlzIG9ubHkgcHJvdmlkZWQgZm9yIHRlc3RpbmcuIEZvciBxdWVyaWVzIG9uIGNsYXNzZXMsIHVzZSB0aGUKICAvLy8gbWV0aG9kcyBkZWZpbmVkIGluIFtKQ2xvc2VkV29ybGRdLgogIENsYXNzU2V0IGdldENsYXNzU2V0KENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjbG9zZWQgd29ybGQuCiAgLy8vCiAgLy8vIElmIFtjbHNdIGlzIHByb3ZpZGVkLCB0aGUgZHVtcCB3aWxsIGNvbnRhaW4gb25seSBjbGFzc2VzIHJlbGF0ZWQgdG8gW2Nsc10uCiAgU3RyaW5nIGR1bXAoW0NsYXNzRW50aXR5IGNsc10pOwp9CgpjbGFzcyBDbGFzc0hpZXJhcmNoeUltcGwgaW1wbGVtZW50cyBDbGFzc0hpZXJhcmNoeSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtDbGFzc0hpZXJhcmNoeV0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdjbGFzcy1oaWVyYXJjaHknOwoKICBmaW5hbCBDb21tb25FbGVtZW50cyBfY29tbW9uRWxlbWVudHM7CiAgZmluYWwgTWFwPENsYXNzRW50aXR5LCBDbGFzc0hpZXJhcmNoeU5vZGU+IF9jbGFzc0hpZXJhcmNoeU5vZGVzOwogIGZpbmFsIE1hcDxDbGFzc0VudGl0eSwgQ2xhc3NTZXQ+IF9jbGFzc1NldHM7CgogIENsYXNzSGllcmFyY2h5SW1wbCgKICAgICAgdGhpcy5fY29tbW9uRWxlbWVudHMsIHRoaXMuX2NsYXNzSGllcmFyY2h5Tm9kZXMsIHRoaXMuX2NsYXNzU2V0cyk7CgogIGZhY3RvcnkgQ2xhc3NIaWVyYXJjaHlJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIE1hcDxDbGFzc0VudGl0eSwgQ2xhc3NIaWVyYXJjaHlOb2RlPiBjbGFzc0hpZXJhcmNoeU5vZGVzID0KICAgICAgICBuZXcgQ2xhc3NIaWVyYXJjaHlOb2Rlc01hcCgpOwogICAgaW50IGNsYXNzQ291bnQgPSBzb3VyY2UucmVhZEludCgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbGFzc0NvdW50OyBpKyspIHsKICAgICAgQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUgPSBuZXcgQ2xhc3NIaWVyYXJjaHlOb2RlLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgICAgIHNvdXJjZSwgY2xhc3NIaWVyYXJjaHlOb2Rlcyk7CiAgICAgIGNsYXNzSGllcmFyY2h5Tm9kZXNbbm9kZS5jbHNdID0gbm9kZTsKICAgIH0KICAgIE1hcDxDbGFzc0VudGl0eSwgQ2xhc3NTZXQ+IGNsYXNzU2V0cyA9IHt9OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbGFzc0NvdW50OyBpKyspIHsKICAgICAgQ2xhc3NTZXQgY2xhc3NTZXQgPQogICAgICAgICAgbmV3IENsYXNzU2V0LnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIGNsYXNzSGllcmFyY2h5Tm9kZXMpOwogICAgICBjbGFzc1NldHNbY2xhc3NTZXQuY2xzXSA9IGNsYXNzU2V0OwogICAgfQoKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgQ2xhc3NIaWVyYXJjaHlJbXBsKAogICAgICAgIGNvbW1vbkVsZW1lbnRzLCBjbGFzc0hpZXJhcmNoeU5vZGVzLCBjbGFzc1NldHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUludChfY2xhc3NTZXRzLmxlbmd0aCk7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZSA9CiAgICAgICAgZ2V0Q2xhc3NIaWVyYXJjaHlOb2RlKF9jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcyk7CiAgICBub2RlLmZvckVhY2hTdWJjbGFzcygoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICAgIGdldENsYXNzSGllcmFyY2h5Tm9kZShjbHMpLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9LCBDbGFzc0hpZXJhcmNoeU5vZGUuQUxMKTsKICAgIENsYXNzU2V0IHNldCA9IGdldENsYXNzU2V0KF9jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcyk7CiAgICBzZXQuZm9yRWFjaFN1YmNsYXNzKChDbGFzc0VudGl0eSBjbHMpIHsKICAgICAgZ2V0Q2xhc3NTZXQoY2xzKS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICAgIHJldHVybiBudWxsOwogICAgfSwgQ2xhc3NIaWVyYXJjaHlOb2RlLkFMTCk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0luc3RhbnRpYXRlZChDbGFzc0VudGl0eSBjbHMpIHsKICAgIENsYXNzSGllcmFyY2h5Tm9kZSBub2RlID0gX2NsYXNzSGllcmFyY2h5Tm9kZXNbY2xzXTsKICAgIHJldHVybiBub2RlICE9IG51bGwgJiYgbm9kZS5pc0luc3RhbnRpYXRlZDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNEaXJlY3RseUluc3RhbnRpYXRlZChDbGFzc0VudGl0eSBjbHMpIHsKICAgIENsYXNzSGllcmFyY2h5Tm9kZSBub2RlID0gX2NsYXNzSGllcmFyY2h5Tm9kZXNbY2xzXTsKICAgIHJldHVybiBub2RlICE9IG51bGwgJiYgbm9kZS5pc0RpcmVjdGx5SW5zdGFudGlhdGVkOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Fic3RyYWN0bHlJbnN0YW50aWF0ZWQoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZSA9IF9jbGFzc0hpZXJhcmNoeU5vZGVzW2Nsc107CiAgICByZXR1cm4gbm9kZSAhPSBudWxsICYmIG5vZGUuaXNBYnN0cmFjdGx5SW5zdGFudGlhdGVkOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0V4cGxpY2l0bHlJbnN0YW50aWF0ZWQoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZSA9IF9jbGFzc0hpZXJhcmNoeU5vZGVzW2Nsc107CiAgICByZXR1cm4gbm9kZSAhPSBudWxsICYmIG5vZGUuaXNFeHBsaWNpdGx5SW5zdGFudGlhdGVkOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0luZGlyZWN0bHlJbnN0YW50aWF0ZWQoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZSA9IF9jbGFzc0hpZXJhcmNoeU5vZGVzW2Nsc107CiAgICByZXR1cm4gbm9kZSAhPSBudWxsICYmIG5vZGUuaXNJbmRpcmVjdGx5SW5zdGFudGlhdGVkOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1N1YnR5cGVPZihDbGFzc0VudGl0eSB4LCBDbGFzc0VudGl0eSB5KSB7CiAgICBDbGFzc1NldCBjbGFzc1NldCA9IF9jbGFzc1NldHNbeV07CiAgICBhc3NlcnQoCiAgICAgICAgY2xhc3NTZXQgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgeSwKICAgICAgICAgICAgIk5vIENsYXNzU2V0IGZvciAkeSAoJHt5LnJ1bnRpbWVUeXBlfSk6ICIKICAgICAgICAgICAgIiR7ZHVtcCh5KX0gOiAke19jbGFzc1NldHN9IikpOwogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIGNsYXNzSGllcmFyY2h5Tm9kZSA9IF9jbGFzc0hpZXJhcmNoeU5vZGVzW3hdOwogICAgYXNzZXJ0KGNsYXNzSGllcmFyY2h5Tm9kZSAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KHgsICJObyBDbGFzc0hpZXJhcmNoeU5vZGUgZm9yICR4OiAke2R1bXAoeCl9IikpOwogICAgcmV0dXJuIGNsYXNzU2V0Lmhhc1N1YnR5cGUoY2xhc3NIaWVyYXJjaHlOb2RlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNTdWJjbGFzc09mKENsYXNzRW50aXR5IHgsIENsYXNzRW50aXR5IHkpIHsKICAgIHJldHVybiBfY2xhc3NIaWVyYXJjaHlOb2Rlc1t5XS5oYXNTdWJjbGFzcyhfY2xhc3NIaWVyYXJjaHlOb2Rlc1t4XSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gc3ViY2xhc3Nlc09mKENsYXNzRW50aXR5IGNscykgewogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIGhpZXJhcmNoeSA9IF9jbGFzc0hpZXJhcmNoeU5vZGVzW2Nsc107CiAgICBpZiAoaGllcmFyY2h5ID09IG51bGwpIHJldHVybiBjb25zdCA8Q2xhc3NFbnRpdHk+W107CiAgICByZXR1cm4gaGllcmFyY2h5CiAgICAgICAgLnN1YmNsYXNzZXNCeU1hc2soQ2xhc3NIaWVyYXJjaHlOb2RlLkVYUExJQ0lUTFlfSU5TVEFOVElBVEVEKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBzdHJpY3RTdWJjbGFzc2VzT2YoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgc3ViY2xhc3NlcyA9IF9jbGFzc0hpZXJhcmNoeU5vZGVzW2Nsc107CiAgICBpZiAoc3ViY2xhc3NlcyA9PSBudWxsKSByZXR1cm4gY29uc3QgPENsYXNzRW50aXR5PltdOwogICAgcmV0dXJuIHN1YmNsYXNzZXMuc3ViY2xhc3Nlc0J5TWFzaygKICAgICAgICBDbGFzc0hpZXJhcmNoeU5vZGUuRVhQTElDSVRMWV9JTlNUQU5USUFURUQsCiAgICAgICAgc3RyaWN0OiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIGludCBzdHJpY3RTdWJjbGFzc0NvdW50KENsYXNzRW50aXR5IGNscykgewogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIHN1YmNsYXNzZXMgPSBfY2xhc3NIaWVyYXJjaHlOb2Rlc1tjbHNdOwogICAgaWYgKHN1YmNsYXNzZXMgPT0gbnVsbCkgcmV0dXJuIDA7CiAgICByZXR1cm4gc3ViY2xhc3Nlcy5pbnN0YW50aWF0ZWRTdWJjbGFzc0NvdW50OwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoU3RyaWN0U3ViY2xhc3NPZigKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCBJdGVyYXRpb25TdGVwIGYoQ2xhc3NFbnRpdHkgY2xzKSkgewogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIHN1YmNsYXNzZXMgPSBfY2xhc3NIaWVyYXJjaHlOb2Rlc1tjbHNdOwogICAgaWYgKHN1YmNsYXNzZXMgPT0gbnVsbCkgcmV0dXJuOwogICAgc3ViY2xhc3Nlcy5mb3JFYWNoU3ViY2xhc3MoZiwgQ2xhc3NIaWVyYXJjaHlOb2RlLkVYUExJQ0lUTFlfSU5TVEFOVElBVEVELAogICAgICAgIHN0cmljdDogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGFueVN0cmljdFN1YmNsYXNzT2YoQ2xhc3NFbnRpdHkgY2xzLCBib29sIHByZWRpY2F0ZShDbGFzc0VudGl0eSBjbHMpKSB7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgc3ViY2xhc3NlcyA9IF9jbGFzc0hpZXJhcmNoeU5vZGVzW2Nsc107CiAgICBpZiAoc3ViY2xhc3NlcyA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gc3ViY2xhc3Nlcy5hbnlTdWJjbGFzcygKICAgICAgICBwcmVkaWNhdGUsIENsYXNzSGllcmFyY2h5Tm9kZS5FWFBMSUNJVExZX0lOU1RBTlRJQVRFRCwKICAgICAgICBzdHJpY3Q6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IHN1YnR5cGVzT2YoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBDbGFzc1NldCBjbGFzc1NldCA9IF9jbGFzc1NldHNbY2xzXTsKICAgIGlmIChjbGFzc1NldCA9PSBudWxsKSB7CiAgICAgIHJldHVybiBjb25zdCA8Q2xhc3NFbnRpdHk+W107CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gY2xhc3NTZXQKICAgICAgICAgIC5zdWJ0eXBlc0J5TWFzayhDbGFzc0hpZXJhcmNoeU5vZGUuRVhQTElDSVRMWV9JTlNUQU5USUFURUQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IHN0cmljdFN1YnR5cGVzT2YoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBDbGFzc1NldCBjbGFzc1NldCA9IF9jbGFzc1NldHNbY2xzXTsKICAgIGlmIChjbGFzc1NldCA9PSBudWxsKSB7CiAgICAgIHJldHVybiBjb25zdCA8Q2xhc3NFbnRpdHk+W107CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gY2xhc3NTZXQuc3VidHlwZXNCeU1hc2soQ2xhc3NIaWVyYXJjaHlOb2RlLkVYUExJQ0lUTFlfSU5TVEFOVElBVEVELAogICAgICAgICAgc3RyaWN0OiB0cnVlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGludCBzdHJpY3RTdWJ0eXBlQ291bnQoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBDbGFzc1NldCBjbGFzc1NldCA9IF9jbGFzc1NldHNbY2xzXTsKICAgIGlmIChjbGFzc1NldCA9PSBudWxsKSByZXR1cm4gMDsKICAgIHJldHVybiBjbGFzc1NldC5pbnN0YW50aWF0ZWRTdWJ0eXBlQ291bnQ7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hTdHJpY3RTdWJ0eXBlT2YoCiAgICAgIENsYXNzRW50aXR5IGNscywgSXRlcmF0aW9uU3RlcCBmKENsYXNzRW50aXR5IGNscykpIHsKICAgIENsYXNzU2V0IGNsYXNzU2V0ID0gX2NsYXNzU2V0c1tjbHNdOwogICAgaWYgKGNsYXNzU2V0ID09IG51bGwpIHJldHVybjsKICAgIGNsYXNzU2V0LmZvckVhY2hTdWJ0eXBlKGYsIENsYXNzSGllcmFyY2h5Tm9kZS5FWFBMSUNJVExZX0lOU1RBTlRJQVRFRCwKICAgICAgICBzdHJpY3Q6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBhbnlTdHJpY3RTdWJ0eXBlT2YoQ2xhc3NFbnRpdHkgY2xzLCBib29sIHByZWRpY2F0ZShDbGFzc0VudGl0eSBjbHMpKSB7CiAgICBDbGFzc1NldCBjbGFzc1NldCA9IF9jbGFzc1NldHNbY2xzXTsKICAgIGlmIChjbGFzc1NldCA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gY2xhc3NTZXQuYW55U3VidHlwZSgKICAgICAgICBwcmVkaWNhdGUsIENsYXNzSGllcmFyY2h5Tm9kZS5FWFBMSUNJVExZX0lOU1RBTlRJQVRFRCwKICAgICAgICBzdHJpY3Q6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXZlQW55Q29tbW9uU3VidHlwZXMoQ2xhc3NFbnRpdHkgYSwgQ2xhc3NFbnRpdHkgYikgewogICAgQ2xhc3NTZXQgY2xhc3NTZXRBID0gX2NsYXNzU2V0c1thXTsKICAgIENsYXNzU2V0IGNsYXNzU2V0QiA9IF9jbGFzc1NldHNbYl07CiAgICBpZiAoY2xhc3NTZXRBID09IG51bGwgfHwgY2xhc3NTZXRCID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEltcGxlbWVudCBhbiBvcHRpbWl6ZWQgcXVlcnkgb24gW0NsYXNzU2V0XS4KICAgIFNldDxDbGFzc0VudGl0eT4gc3VidHlwZXNPZkIgPSBjbGFzc1NldEIuc3VidHlwZXMoKS50b1NldCgpOwogICAgZm9yIChDbGFzc0VudGl0eSBzdWJ0eXBlT2ZBIGluIGNsYXNzU2V0QS5zdWJ0eXBlcygpKSB7CiAgICAgIGlmIChzdWJ0eXBlc09mQi5jb250YWlucyhzdWJ0eXBlT2ZBKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc0FueVN0cmljdFN1YmNsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIHN1YmNsYXNzZXMgPSBfY2xhc3NIaWVyYXJjaHlOb2Rlc1tjbHNdOwogICAgaWYgKHN1YmNsYXNzZXMgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHN1YmNsYXNzZXMuaXNJbmRpcmVjdGx5SW5zdGFudGlhdGVkOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNBbnlTdHJpY3RTdWJ0eXBlKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIHN0cmljdFN1YnR5cGVDb3VudChjbHMpID4gMDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaGFzT25seVN1YmNsYXNzZXMoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBtb3ZlIHRoaXMgdG8gQ2xhc3NTZXQ/CiAgICBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcykgcmV0dXJuIHRydWU7CiAgICBDbGFzc1NldCBjbGFzc1NldCA9IF9jbGFzc1NldHNbY2xzXTsKICAgIGlmIChjbGFzc1NldCA9PSBudWxsKSB7CiAgICAgIC8vIFZhY3VvdXNseSB0cnVlLgogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBjbGFzc1NldC5oYXNPbmx5SW5zdGFudGlhdGVkU3ViY2xhc3NlczsKICB9CgogIEBvdmVycmlkZQogIFN1YmNsYXNzUmVzdWx0IGNvbW1vblN1YmNsYXNzZXMoQ2xhc3NFbnRpdHkgY2xzMSwgQ2xhc3NRdWVyeSBxdWVyeTEsCiAgICAgIENsYXNzRW50aXR5IGNsczIsIENsYXNzUXVlcnkgcXVlcnkyKSB7CiAgICBpZiAocXVlcnkxID09IENsYXNzUXVlcnkuRVhBQ1QgJiYgcXVlcnkyID09IENsYXNzUXVlcnkuRVhBQ1QpIHsKICAgICAgLy8gRXhhY3QgY2xhc3NlcyBbY2xzMV0gYW5kIFtjbHMyXSBtdXN0IGJlIGlkZW50aWNhbCB0byBoYXZlIGFueSBjbGFzc2VzCiAgICAgIC8vIGluIGNvbW1vbi4KICAgICAgaWYgKGNsczEgIT0gY2xzMikgewogICAgICAgIHJldHVybiBTdWJjbGFzc1Jlc3VsdC5FTVBUWTsKICAgICAgfQogICAgICByZXR1cm4gU3ViY2xhc3NSZXN1bHQuRVhBQ1QxOwogICAgfSBlbHNlIGlmIChxdWVyeTEgPT0gQ2xhc3NRdWVyeS5FWEFDVCkgewogICAgICBpZiAocXVlcnkyID09IENsYXNzUXVlcnkuU1VCQ0xBU1MpIHsKICAgICAgICAvLyBFeGFjdCBbY2xzMV0gbXVzdCBiZSBhIHN1YmNsYXNzIG9mIFtjbHMyXSB0byBoYXZlIGFueSBjbGFzc2VzIGluCiAgICAgICAgLy8gY29tbW9uLgogICAgICAgIGlmIChpc1N1YmNsYXNzT2YoY2xzMSwgY2xzMikpIHsKICAgICAgICAgIHJldHVybiBTdWJjbGFzc1Jlc3VsdC5FWEFDVDE7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHF1ZXJ5MiA9PSBDbGFzc1F1ZXJ5LlNVQlRZUEUpIHsKICAgICAgICAvLyBFeGFjdCBbY2xzMV0gbXVzdCBiZSBhIHN1YnR5cGUgb2YgW2NsczJdIHRvIGhhdmUgYW55IGNsYXNzZXMgaW4KICAgICAgICAvLyBjb21tb24uCiAgICAgICAgaWYgKGlzU3VidHlwZU9mKGNsczEsIGNsczIpKSB7CiAgICAgICAgICByZXR1cm4gU3ViY2xhc3NSZXN1bHQuRVhBQ1QxOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gU3ViY2xhc3NSZXN1bHQuRU1QVFk7CiAgICB9IGVsc2UgaWYgKHF1ZXJ5MiA9PSBDbGFzc1F1ZXJ5LkVYQUNUKSB7CiAgICAgIGlmIChxdWVyeTEgPT0gQ2xhc3NRdWVyeS5TVUJDTEFTUykgewogICAgICAgIC8vIEV4YWN0IFtjbHMyXSBtdXN0IGJlIGEgc3ViY2xhc3Mgb2YgW2NsczFdIHRvIGhhdmUgYW55IGNsYXNzZXMgaW4KICAgICAgICAvLyBjb21tb24uCiAgICAgICAgaWYgKGlzU3ViY2xhc3NPZihjbHMyLCBjbHMxKSkgewogICAgICAgICAgcmV0dXJuIFN1YmNsYXNzUmVzdWx0LkVYQUNUMjsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAocXVlcnkxID09IENsYXNzUXVlcnkuU1VCVFlQRSkgewogICAgICAgIC8vIEV4YWN0IFtjbHMyXSBtdXN0IGJlIGEgc3VidHlwZSBvZiBbY2xzMV0gdG8gaGF2ZSBhbnkgY2xhc3NlcyBpbgogICAgICAgIC8vIGNvbW1vbi4KICAgICAgICBpZiAoaXNTdWJ0eXBlT2YoY2xzMiwgY2xzMSkpIHsKICAgICAgICAgIHJldHVybiBTdWJjbGFzc1Jlc3VsdC5FWEFDVDI7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBTdWJjbGFzc1Jlc3VsdC5FTVBUWTsKICAgIH0gZWxzZSBpZiAocXVlcnkxID09IENsYXNzUXVlcnkuU1VCQ0xBU1MgJiYgcXVlcnkyID09IENsYXNzUXVlcnkuU1VCQ0xBU1MpIHsKICAgICAgLy8gW2NsczFdIG11c3QgYmUgYSBzdWJjbGFzcyBvZiBbY2xzMl0gb3IgdmljZSB2ZXJzYSB0byBoYXZlIGFueSBjbGFzc2VzCiAgICAgIC8vIGluIGNvbW1vbi4KICAgICAgaWYgKGNsczEgPT0gY2xzMiB8fCBpc1N1YmNsYXNzT2YoY2xzMSwgY2xzMikpIHsKICAgICAgICAvLyBUaGUgc3ViY2xhc3NlcyBvZiBbY2xzMV0gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHN1YmNsYXNzZXMgb2YKICAgICAgICAvLyBbY2xzMl0uCiAgICAgICAgcmV0dXJuIFN1YmNsYXNzUmVzdWx0LlNVQkNMQVNTMTsKICAgICAgfSBlbHNlIGlmIChpc1N1YmNsYXNzT2YoY2xzMiwgY2xzMSkpIHsKICAgICAgICAvLyBUaGUgc3ViY2xhc3NlcyBvZiBbY2xzMl0gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHN1YmNsYXNzZXMgb2YKICAgICAgICAvLyBbY2xzMV0uCiAgICAgICAgcmV0dXJuIFN1YmNsYXNzUmVzdWx0LlNVQkNMQVNTMjsKICAgICAgfQogICAgICByZXR1cm4gU3ViY2xhc3NSZXN1bHQuRU1QVFk7CiAgICB9IGVsc2UgaWYgKHF1ZXJ5MSA9PSBDbGFzc1F1ZXJ5LlNVQkNMQVNTKSB7CiAgICAgIGlmIChpc1N1YnR5cGVPZihjbHMxLCBjbHMyKSkgewogICAgICAgIC8vIFRoZSBzdWJjbGFzc2VzIG9mIFtjbHMxXSBhcmUgYWxsIHN1YnR5cGVzIG9mIFtjbHMyXS4KICAgICAgICByZXR1cm4gU3ViY2xhc3NSZXN1bHQuU1VCQ0xBU1MxOwogICAgICB9CiAgICAgIGlmIChjbHMxID09IF9jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcykgewogICAgICAgIC8vIFNpbmNlIFtjbHMxXSBpcyBgT2JqZWN0YCBhbGwgc3VidHlwZXMgb2YgW2NsczJdIGFyZSBjb250YWluZWQgd2l0aGluCiAgICAgICAgLy8gdGhlIHN1YmNsYXNzZXMgb2YgW2NsczFdLgogICAgICAgIHJldHVybiBTdWJjbGFzc1Jlc3VsdC5TVUJUWVBFMjsKICAgICAgfQogICAgICAvLyBGaW5kIGFsbCB0aGUgcm9vdCBzdWJjbGFzc2VzIG9mIFtjbHMxXSBvZiB0aGF0IGltcGxlbWVudCBbY2xzMl0uCiAgICAgIC8vCiAgICAgIC8vIEZvciB0aGlzIGhpZXJhcmNoeToKICAgICAgLy8KICAgICAgLy8gICAgIGNsYXNzIEkge30KICAgICAgLy8gICAgIGNsYXNzIEEge30KICAgICAgLy8gICAgIGNsYXNzIEIgZXh0ZW5kcyBBIGltcGxlbWVudHMgSSB7fQogICAgICAvLyAgICAgY2xhc3MgQyBleHRlbmRzIEIge30KICAgICAgLy8gICAgIGNsYXNzIEQgZXh0ZW5kcyBBIGltcGxlbWVudHMgSSB7fQogICAgICAvLwogICAgICAvLyB0aGUgY29tbW9uIHN1YmNsYXNzZXMgb2YgInN1YmNsYXNzIG9mIEEiIGFuZCAic3VidHlwZSBvZiBJIiByZXR1cm5zCiAgICAgIC8vICJzdWJjbGFzc2VzIG9mIHtCLCBEfSIuIFRoZSBpbmNsdXNpb24gb2YgY2xhc3MgYENgIGlzIGltcGxpZWQgYmVjYXVzZQogICAgICAvLyBpdCBpcyBhIHN1YmNsYXNzIG9mIGBCYC4KICAgICAgTGlzdDxDbGFzc0VudGl0eT4gY2xhc3NlcyA9IDxDbGFzc0VudGl0eT5bXTsKICAgICAgZm9yRWFjaFN0cmljdFN1YmNsYXNzT2YoY2xzMSwgKENsYXNzRW50aXR5IHN1YmNsYXNzKSB7CiAgICAgICAgaWYgKGlzU3VidHlwZU9mKHN1YmNsYXNzLCBjbHMyKSkgewogICAgICAgICAgY2xhc3Nlcy5hZGQoc3ViY2xhc3MpOwogICAgICAgICAgLy8gU2tpcCBzdWJjbGFzc2VzIG9mIFtzdWJjbGFzc107IHRoZXkgYWxsIGltcGxlbWVudCBbY2xzMl0gYnkKICAgICAgICAgIC8vIGluaGVyaXRhbmNlIGFuZCBhcmUgaW5jbHVkZWQgaW4gdGhlIHN1YmNsYXNzZXMgb2YgW3N1YmNsYXNzXS4KICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGVwLlNLSVBfU1VCQ0xBU1NFUzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0ZXAuQ09OVElOVUU7CiAgICAgIH0pOwogICAgICByZXR1cm4gbmV3IFN1YmNsYXNzUmVzdWx0KGNsYXNzZXMpOwogICAgfSBlbHNlIGlmIChxdWVyeTIgPT0gQ2xhc3NRdWVyeS5TVUJDTEFTUykgewogICAgICBpZiAoaXNTdWJ0eXBlT2YoY2xzMiwgY2xzMSkpIHsKICAgICAgICAvLyBUaGUgc3ViY2xhc3NlcyBvZiBbY2xzMl0gYXJlIGFsbCBzdWJ0eXBlcyBvZiBbY2xzMV0uCiAgICAgICAgcmV0dXJuIFN1YmNsYXNzUmVzdWx0LlNVQkNMQVNTMjsKICAgICAgfQogICAgICBpZiAoY2xzMiA9PSBfY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MpIHsKICAgICAgICAvLyBTaW5jZSBbY2xzMl0gaXMgYE9iamVjdGAgYWxsIHN1YnR5cGVzIG9mIFtjbHMxXSBhcmUgY29udGFpbmVkIHdpdGhpbgogICAgICAgIC8vIHRoZSBzdWJjbGFzc2VzIG9mIFtjbHMyXS4KICAgICAgICByZXR1cm4gU3ViY2xhc3NSZXN1bHQuU1VCVFlQRTE7CiAgICAgIH0KICAgICAgLy8gRmluZCBhbGwgdGhlIHJvb3Qgc3ViY2xhc3NlcyBvZiBbY2xzMl0gb2YgdGhhdCBpbXBsZW1lbnQgW2NsczFdLgogICAgICBMaXN0PENsYXNzRW50aXR5PiBjbGFzc2VzID0gPENsYXNzRW50aXR5PltdOwogICAgICBmb3JFYWNoU3RyaWN0U3ViY2xhc3NPZihjbHMyLCAoQ2xhc3NFbnRpdHkgc3ViY2xhc3MpIHsKICAgICAgICBpZiAoaXNTdWJ0eXBlT2Yoc3ViY2xhc3MsIGNsczEpKSB7CiAgICAgICAgICBjbGFzc2VzLmFkZChzdWJjbGFzcyk7CiAgICAgICAgICAvLyBTa2lwIHN1YmNsYXNzZXMgb2YgW3N1YmNsYXNzXTsgdGhleSBhbGwgaW1wbGVtZW50IFtjbHMxXSBieQogICAgICAgICAgLy8gaW5oZXJpdGFuY2UgYW5kIGFyZSBpbmNsdWRlZCBpbiB0aGUgc3ViY2xhc3NlcyBvZiBbc3ViY2xhc3NdLgogICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0ZXAuU0tJUF9TVUJDTEFTU0VTOwogICAgICAgIH0KICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RlcC5DT05USU5VRTsKICAgICAgfSk7CiAgICAgIHJldHVybiBuZXcgU3ViY2xhc3NSZXN1bHQoY2xhc3Nlcyk7CiAgICB9IGVsc2UgewogICAgICBpZiAoY2xzMSA9PSBjbHMyIHx8IGlzU3VidHlwZU9mKGNsczEsIGNsczIpKSB7CiAgICAgICAgLy8gVGhlIHN1YnR5cGVzIG9mIFtjbHMxXSBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGUgc3VidHlwZXMgb2YgW2NsczJdLgogICAgICAgIHJldHVybiBTdWJjbGFzc1Jlc3VsdC5TVUJUWVBFMTsKICAgICAgfSBlbHNlIGlmIChpc1N1YnR5cGVPZihjbHMyLCBjbHMxKSkgewogICAgICAgIC8vIFRoZSBzdWJ0eXBlcyBvZiBbY2xzMl0gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHN1YnR5cGVzIG9mIFtjbHMxXS4KICAgICAgICByZXR1cm4gU3ViY2xhc3NSZXN1bHQuU1VCVFlQRTI7CiAgICAgIH0KICAgICAgLy8gRmluZCBhbGwgdGhlIHJvb3Qgc3ViY2xhc3NlcyBvZiBbY2xzMV0gb2YgdGhhdCBpbXBsZW1lbnQgW2NsczJdLgogICAgICAvLwogICAgICAvLyBGb3IgdGhpcyBoaWVyYXJjaHk6CiAgICAgIC8vCiAgICAgIC8vICAgICBjbGFzcyBJIHt9CiAgICAgIC8vICAgICBjbGFzcyBBIHt9CiAgICAgIC8vICAgICBjbGFzcyBCIGV4dGVuZHMgQSBpbXBsZW1lbnRzIEkge30KICAgICAgLy8gICAgIGNsYXNzIEMgZXh0ZW5kcyBCIHt9CiAgICAgIC8vICAgICBjbGFzcyBEIGV4dGVuZHMgQSBpbXBsZW1lbnRzIEkge30KICAgICAgLy8gICAgIGNsYXNzIEUgaW1wbGVtZW50cyBCIHt9CiAgICAgIC8vICAgICBjbGFzcyBGIGV4dGVuZHMgRSB7fQogICAgICAvLwogICAgICAvLyB0aGUgY29tbW9uIHN1YmNsYXNzZXMgb2YgInN1YnR5cGUgb2YgQSIgYW5kICJzdWJ0eXBlIG9mIEkiIHJldHVybnMKICAgICAgLy8gInN1YmNsYXNzZXMgb2Yge0IsIEQsIEV9Ii4gVGhlIGluY2x1c2lvbiBvZiBjbGFzc2VzIGBDYCBhbmQgYEZgIGlzCiAgICAgIC8vIGltcGxpZWQgYmVjYXVzZSB0aGV5IGFyZSBzdWJjbGFzc2VzIG9mIGBCYCBhbmQgYEVgLCByZXNwZWN0aXZlbHkuCiAgICAgIExpc3Q8Q2xhc3NFbnRpdHk+IGNsYXNzZXMgPSA8Q2xhc3NFbnRpdHk+W107CiAgICAgIGZvckVhY2hTdHJpY3RTdWJ0eXBlT2YoY2xzMSwgKENsYXNzRW50aXR5IHN1YmNsYXNzKSB7CiAgICAgICAgaWYgKGlzU3VidHlwZU9mKHN1YmNsYXNzLCBjbHMyKSkgewogICAgICAgICAgY2xhc3Nlcy5hZGQoc3ViY2xhc3MpOwogICAgICAgICAgLy8gU2tpcCBzdWJjbGFzc2VzIG9mIFtzdWJjbGFzc107IHRoZXkgYWxsIGltcGxlbWVudCBbY2xzMl0gYnkKICAgICAgICAgIC8vIGluaGVyaXRhbmNlIGFuZCBhcmUgaW5jbHVkZWQgaW4gdGhlIHN1YmNsYXNzZXMgb2YgW3N1YmNsYXNzXS4KICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGVwLlNLSVBfU1VCQ0xBU1NFUzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0ZXAuQ09OVElOVUU7CiAgICAgIH0pOwogICAgICByZXR1cm4gbmV3IFN1YmNsYXNzUmVzdWx0KGNsYXNzZXMpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NIaWVyYXJjaHlOb2RlIGdldENsYXNzSGllcmFyY2h5Tm9kZShDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBfY2xhc3NIaWVyYXJjaHlOb2Rlc1tjbHNdOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NTZXQgZ2V0Q2xhc3NTZXQoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gX2NsYXNzU2V0c1tjbHNdOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGR1bXAoW0NsYXNzRW50aXR5IGNsc10pIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGlmIChjbHMgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgiQ2xhc3NlcyBpbiB0aGUgY2xvc2VkIHdvcmxkIHJlbGF0ZWQgdG8gJGNsczpcbiIpOwogICAgfSBlbHNlIHsKICAgICAgc2Iud3JpdGUoIkluc3RhbnRpYXRlZCBjbGFzc2VzIGluIHRoZSBjbG9zZWQgd29ybGQ6XG4iKTsKICAgIH0KICAgIGdldENsYXNzSGllcmFyY2h5Tm9kZShfY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MpCiAgICAgICAgLnByaW50T24oc2IsICcgJywgaW5zdGFudGlhdGVkT25seTogY2xzID09IG51bGwsIHdpdGhSZXNwZWN0VG86IGNscyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCmNsYXNzIENsYXNzSGllcmFyY2h5QnVpbGRlciB7CiAgLy8gV2Uga2VlcCB0cmFjayBvZiBzdWJ0eXBlIGFuZCBzdWJjbGFzcyByZWxhdGlvbnNoaXBzIGluIGZvdXIKICAvLyBkaXN0aW5jdCBzZXRzIHRvIG1ha2UgY2xhc3MgaGllcmFyY2h5IGFuYWx5c2lzIGZhc3Rlci4KICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIENsYXNzSGllcmFyY2h5Tm9kZT4gX2NsYXNzSGllcmFyY2h5Tm9kZXMgPQogICAgICA8Q2xhc3NFbnRpdHksIENsYXNzSGllcmFyY2h5Tm9kZT57fTsKICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIENsYXNzU2V0PiBfY2xhc3NTZXRzID0gPENsYXNzRW50aXR5LCBDbGFzc1NldD57fTsKICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIFNldDxDbGFzc0VudGl0eT4+IG1peGluVXNlcyA9CiAgICAgIG5ldyBNYXA8Q2xhc3NFbnRpdHksIFNldDxDbGFzc0VudGl0eT4+KCk7CgogIGZpbmFsIENvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKICBmaW5hbCBDbGFzc1F1ZXJpZXMgX2NsYXNzUXVlcmllczsKCiAgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyKHRoaXMuX2NvbW1vbkVsZW1lbnRzLCB0aGlzLl9jbGFzc1F1ZXJpZXMpOwoKICBDbGFzc0hpZXJhcmNoeSBjbG9zZSgpIHsKICAgIGFzc2VydCgKICAgICAgICBfY2xhc3NIaWVyYXJjaHlOb2Rlcy5sZW5ndGggPT0gX2NsYXNzU2V0cy5sZW5ndGgsCiAgICAgICAgIkNsYXNzSGllcmFyY2h5Tm9kZS9DbGFzc1NldCBtaXNtYXRjaDogIgogICAgICAgICIke19jbGFzc0hpZXJhcmNoeU5vZGVzfSB2cyAiCiAgICAgICAgIiR7X2NsYXNzU2V0c30iKTsKICAgIHJldHVybiBuZXcgQ2xhc3NIaWVyYXJjaHlJbXBsKAogICAgICAgIF9jb21tb25FbGVtZW50cywgX2NsYXNzSGllcmFyY2h5Tm9kZXMsIF9jbGFzc1NldHMpOwogIH0KCiAgdm9pZCByZWdpc3RlckNsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgX2Vuc3VyZUNsYXNzU2V0KF9jbGFzc1F1ZXJpZXMuZ2V0RGVjbGFyYXRpb24oY2xzKSk7CiAgfQoKICBDbGFzc0hpZXJhcmNoeU5vZGUgX2Vuc3VyZUNsYXNzSGllcmFyY2h5Tm9kZShDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBfY2xhc3NIaWVyYXJjaHlOb2Rlcy5wdXRJZkFic2VudChjbHMsICgpIHsKICAgICAgQ2xhc3NIaWVyYXJjaHlOb2RlIHBhcmVudE5vZGU7CiAgICAgIENsYXNzRW50aXR5IHN1cGVyY2xhc3MgPSBfY2xhc3NRdWVyaWVzLmdldFN1cGVyQ2xhc3MoY2xzKTsKICAgICAgaWYgKHN1cGVyY2xhc3MgIT0gbnVsbCkgewogICAgICAgIHBhcmVudE5vZGUgPSBfZW5zdXJlQ2xhc3NIaWVyYXJjaHlOb2RlKHN1cGVyY2xhc3MpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgQ2xhc3NIaWVyYXJjaHlOb2RlKAogICAgICAgICAgcGFyZW50Tm9kZSwgY2xzLCBfY2xhc3NRdWVyaWVzLmdldEhpZXJhcmNoeURlcHRoKGNscykpOwogICAgfSk7CiAgfQoKICBDbGFzc1NldCBfZW5zdXJlQ2xhc3NTZXQoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gX2NsYXNzU2V0cy5wdXRJZkFic2VudChjbHMsICgpIHsKICAgICAgQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUgPSBfZW5zdXJlQ2xhc3NIaWVyYXJjaHlOb2RlKGNscyk7CiAgICAgIENsYXNzU2V0IGNsYXNzU2V0ID0gbmV3IENsYXNzU2V0KG5vZGUpOwoKICAgICAgZm9yIChJbnRlcmZhY2VUeXBlIHR5cGUgaW4gX2NsYXNzUXVlcmllcy5nZXRTdXBlcnR5cGVzKGNscykpIHsKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBPcHRpbWl6YXRpb246IEF2b2lkIGFkZGluZyBbY2xzXSB0bwogICAgICAgIC8vIHN1cGVyY2xhc3Nlcy4KICAgICAgICBDbGFzc1NldCBzdWJ0eXBlU2V0ID0gX2Vuc3VyZUNsYXNzU2V0KHR5cGUuZWxlbWVudCk7CiAgICAgICAgc3VidHlwZVNldC5hZGRTdWJ0eXBlKG5vZGUpOwogICAgICB9CgogICAgICBDbGFzc0VudGl0eSBhcHBsaWVkTWl4aW4gPSBfY2xhc3NRdWVyaWVzLmdldEFwcGxpZWRNaXhpbihjbHMpOwogICAgICB3aGlsZSAoYXBwbGllZE1peGluICE9IG51bGwpIHsKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVc2UgdGhlIGRhdGEgc3RvcmVkIGluIFtDbGFzc1NldF0uCiAgICAgICAgcmVnaXN0ZXJNaXhpblVzZShjbHMsIGFwcGxpZWRNaXhpbik7CiAgICAgICAgQ2xhc3NTZXQgbWl4aW5TZXQgPSBfZW5zdXJlQ2xhc3NTZXQoYXBwbGllZE1peGluKTsKICAgICAgICBtaXhpblNldC5hZGRNaXhpbkFwcGxpY2F0aW9uKG5vZGUpOwoKICAgICAgICAvLyBJbiBjYXNlIG9mCiAgICAgICAgLy8KICAgICAgICAvLyAgICBjbGFzcyBBIHt9CiAgICAgICAgLy8gICAgY2xhc3MgQiA9IE9iamVjdCB3aXRoIEE7CiAgICAgICAgLy8gICAgY2xhc3MgQyA9IE9iamVjdCB3aXRoIEI7CiAgICAgICAgLy8KICAgICAgICAvLyB3ZSBuZWVkIHRvIHJlZ2lzdGVyIHRoYXQgQyBub3Qgb25seSBtaXhlcyBpbiBCIGJ1dCBhbHNvIEEuCiAgICAgICAgYXBwbGllZE1peGluID0gX2NsYXNzUXVlcmllcy5nZXRBcHBsaWVkTWl4aW4oYXBwbGllZE1peGluKTsKICAgICAgfQogICAgICByZXR1cm4gY2xhc3NTZXQ7CiAgICB9KTsKICB9CgogIHZvaWQgX3VwZGF0ZVN1cGVyQ2xhc3NIaWVyYXJjaHlOb2RlRm9yQ2xhc3MoQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUpIHsKICAgIC8vIEVuc3VyZSB0aGF0IGNsYXNzZXMgaW1wbGljaXRseSBpbXBsZW1lbnRpbmcgYEZ1bmN0aW9uYCBhcmUgaW4gaXRzCiAgICAvLyBzdWJ0eXBlIHNldC4KICAgIENsYXNzRW50aXR5IGNscyA9IG5vZGUuY2xzOwogICAgaWYgKGNscyAhPSBfY29tbW9uRWxlbWVudHMuZnVuY3Rpb25DbGFzcyAmJgogICAgICAgIF9jbGFzc1F1ZXJpZXMuaW1wbGVtZW50c0Z1bmN0aW9uKGNscykpIHsKICAgICAgQ2xhc3NTZXQgc3VidHlwZVNldCA9IF9lbnN1cmVDbGFzc1NldChfY29tbW9uRWxlbWVudHMuZnVuY3Rpb25DbGFzcyk7CiAgICAgIHN1YnR5cGVTZXQuYWRkU3VidHlwZShub2RlKTsKICAgIH0KICAgIGlmICghbm9kZS5pc0luc3RhbnRpYXRlZCAmJiBub2RlLnBhcmVudE5vZGUgIT0gbnVsbCkgewogICAgICBfdXBkYXRlU3VwZXJDbGFzc0hpZXJhcmNoeU5vZGVGb3JDbGFzcyhub2RlLnBhcmVudE5vZGUpOwogICAgfQogIH0KCiAgdm9pZCB1cGRhdGVDbGFzc0hpZXJhcmNoeU5vZGVGb3JDbGFzcyhDbGFzc0VudGl0eSBjbHMsCiAgICAgIHtib29sIGRpcmVjdGx5SW5zdGFudGlhdGVkOiBmYWxzZSwgYm9vbCBhYnN0cmFjdGx5SW5zdGFudGlhdGVkOiBmYWxzZX0pIHsKICAgIENsYXNzSGllcmFyY2h5Tm9kZSBub2RlID0gX2Vuc3VyZUNsYXNzU2V0KGNscykubm9kZTsKICAgIF91cGRhdGVTdXBlckNsYXNzSGllcmFyY2h5Tm9kZUZvckNsYXNzKG5vZGUpOwogICAgaWYgKGRpcmVjdGx5SW5zdGFudGlhdGVkKSB7CiAgICAgIG5vZGUuaXNEaXJlY3RseUluc3RhbnRpYXRlZCA9IHRydWU7CiAgICB9CiAgICBpZiAoYWJzdHJhY3RseUluc3RhbnRpYXRlZCkgewogICAgICBub2RlLmlzQWJzdHJhY3RseUluc3RhbnRpYXRlZCA9IHRydWU7CiAgICB9CiAgfQoKICB2b2lkIHJlZ2lzdGVyTWl4aW5Vc2UoQ2xhc3NFbnRpdHkgbWl4aW5BcHBsaWNhdGlvbiwgQ2xhc3NFbnRpdHkgbWl4aW4pIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEFkZCBtYXAgcmVzdHJpY3RlZCB0byBsaXZlIGNsYXNzZXMuCiAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHBhdGNoIGNsYXNzZXMgYXMgbWl4aW4uCiAgICBTZXQ8Q2xhc3NFbnRpdHk+IHVzZXJzID0KICAgICAgICBtaXhpblVzZXMucHV0SWZBYnNlbnQobWl4aW4sICgpID0+IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCkpOwogICAgdXNlcnMuYWRkKG1peGluQXBwbGljYXRpb24pOwogIH0KCiAgYm9vbCBfaXNTdWJ0eXBlT2YoQ2xhc3NFbnRpdHkgeCwgQ2xhc3NFbnRpdHkgeSkgewogICAgYXNzZXJ0KF9jbGFzc1NldHMuY29udGFpbnNLZXkoeCksCiAgICAgICAgIkNsYXNzU2V0IGZvciAkeCBoYXMgbm90IGJlZW4gY29tcHV0ZWQgeWV0LiIpOwogICAgQ2xhc3NTZXQgY2xhc3NTZXQgPSBfY2xhc3NTZXRzW3ldOwogICAgYXNzZXJ0KGNsYXNzU2V0ICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoeSwgIk5vIENsYXNzU2V0IGZvciAkeSAoJHt5LnJ1bnRpbWVUeXBlfSk6ICR7X2NsYXNzU2V0c30iKSk7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgY2xhc3NIaWVyYXJjaHlOb2RlID0gX2NsYXNzSGllcmFyY2h5Tm9kZXNbeF07CiAgICBhc3NlcnQoY2xhc3NIaWVyYXJjaHlOb2RlICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoeCwgIk5vIENsYXNzSGllcmFyY2h5Tm9kZSBmb3IgJHgiKSk7CiAgICByZXR1cm4gY2xhc3NTZXQuaGFzU3VidHlwZShjbGFzc0hpZXJhcmNoeU5vZGUpOwogIH0KCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGEgZHluYW1pYyBhY2Nlc3Mgb24gYW4gaW5zdGFuY2Ugb2YgW2V4YWN0Q2xhc3NdIGNhbgogIC8vLyB0YXJnZXQgYSBtZW1iZXIgZGVjbGFyZWQgaW4gW21lbWJlckhvbGRpbmdDbGFzc10uCiAgYm9vbCBpc0luaGVyaXRlZEluRXhhY3RDbGFzcygKICAgICAgQ2xhc3NFbnRpdHkgbWVtYmVySG9sZGluZ0NsYXNzLCBDbGFzc0VudGl0eSBleGFjdENsYXNzKSB7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgZXhhY3RDbGFzc05vZGUgPSBfY2xhc3NIaWVyYXJjaHlOb2Rlc1tleGFjdENsYXNzXTsKICAgIGlmICghZXhhY3RDbGFzc05vZGUuaXNBYnN0cmFjdGx5SW5zdGFudGlhdGVkICYmCiAgICAgICAgIWV4YWN0Q2xhc3NOb2RlLmlzRGlyZWN0bHlJbnN0YW50aWF0ZWQpIHsKICAgICAgLy8gTm8gaW5zdGFuY2VzIG9mIFt0aGlzQ2xhc3NdIGFyZSBsaXZlLgogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBDbGFzc1NldCBtZW1iZXJIb2xkaW5nQ2xhc3NTZXQgPSBfY2xhc3NTZXRzW21lbWJlckhvbGRpbmdDbGFzc107CiAgICBpZiAobWVtYmVySG9sZGluZ0NsYXNzU2V0Lmhhc1N1YmNsYXNzKGV4YWN0Q2xhc3NOb2RlKSkgewogICAgICAvLy8gQSBtZW1iZXIgZnJvbSBhIHN1cGVyIGNsYXNzIGNhbiBiZSBhY2Nlc3NlZC4KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmb3IgKENsYXNzSGllcmFyY2h5Tm9kZSBtaXhpbkFwcGxpY2F0aW9uCiAgICAgICAgaW4gbWVtYmVySG9sZGluZ0NsYXNzU2V0Lm1peGluQXBwbGljYXRpb25Ob2RlcykgewogICAgICBpZiAobWl4aW5BcHBsaWNhdGlvbi5oYXNTdWJjbGFzcyhleGFjdENsYXNzTm9kZSkpIHsKICAgICAgICAvLy8gQSBtZW1iZXIgZnJvbSBhIG1peGVkIGluIGNsYXNzIGNhbiBiZSBhY2Nlc3NlZC4KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgTWFwPENsYXNzRW50aXR5LCBfSW5oZXJpdGVkSW5UaGlzQ2xhc3NDYWNoZT4gX2luaGVyaXRlZEluVGhpc0NsYXNzQ2FjaGVNYXAgPQogICAgICB7fTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGEgYHRoaXNgIGV4cHJlc3Npb24gaW4gW3RoaXNDbGFzc10gY2FuIHRhcmdldCBhIG1lbWJlcgogIC8vLyBkZWNsYXJlZCBpbiBbbWVtYmVySG9sZGluZ0NsYXNzXS4KICBib29sIGlzSW5oZXJpdGVkSW5UaGlzQ2xhc3MoCiAgICAgIENsYXNzRW50aXR5IG1lbWJlckhvbGRpbmdDbGFzcywgQ2xhc3NFbnRpdHkgdGhpc0NsYXNzKSB7CiAgICBfSW5oZXJpdGVkSW5UaGlzQ2xhc3NDYWNoZSBjYWNoZSA9CiAgICAgICAgX2luaGVyaXRlZEluVGhpc0NsYXNzQ2FjaGVNYXBbbWVtYmVySG9sZGluZ0NsYXNzXSA/Pz0KICAgICAgICAgICAgbmV3IF9Jbmhlcml0ZWRJblRoaXNDbGFzc0NhY2hlKCk7CiAgICByZXR1cm4gY2FjaGUuaXNJbmhlcml0ZWRJblRoaXNDbGFzc09mKHRoaXMsIG1lbWJlckhvbGRpbmdDbGFzcywgdGhpc0NsYXNzKTsKICB9CgogIE1hcDxDbGFzc0VudGl0eSwgX0luaGVyaXRlZEluU3VidHlwZUNhY2hlPiBfaW5oZXJpdGVkSW5TdWJ0eXBlQ2FjaGVNYXAgPSB7fTsKCiAgYm9vbCBpc0luaGVyaXRlZEluU3VidHlwZU9mKENsYXNzRW50aXR5IHgsIENsYXNzRW50aXR5IHkpIHsKICAgIF9Jbmhlcml0ZWRJblN1YnR5cGVDYWNoZSBjYWNoZSA9CiAgICAgICAgX2luaGVyaXRlZEluU3VidHlwZUNhY2hlTWFwW3hdID8/PSBuZXcgX0luaGVyaXRlZEluU3VidHlwZUNhY2hlKCk7CiAgICByZXR1cm4gY2FjaGUuaXNJbmhlcml0ZWRJblN1YnR5cGVPZih0aGlzLCB4LCB5KTsKICB9Cn0KCi8vLyBDYWNoZSB1c2VkIGZvciBjb21wdXRpbmcgd2hlbiBhIG1lbWJlciBvZiBhIGdpdmVuIGNsYXNzLCB0aGUgc28tY2FsbGVkCi8vLyBtZW1iZXIgaG9sZGluZyBjbGFzcywgY2FuIGJlIGluaGVyaXRlZCBpbnRvIGEgbGl2ZSBjbGFzcy4KY2xhc3MgX0luaGVyaXRlZEluVGhpc0NsYXNzQ2FjaGUgewogIC8vLyBTZXQgb2YgY2xhc3NlcyB0aGF0IGluaGVyaXRzIG1lbWJlcnMgZnJvbSB0aGUgbWVtYmVyIGhvbGRpbmcgY2xhc3MuCiAgU2V0PENsYXNzRW50aXR5PiBfaW5oZXJpdGluZ0NsYXNzZXM7CgogIC8vLyBDYWNoZSBmb3IgbGl2ZW5lc3MgY29tcHV0YXRpb24gZm9yIGEgYHRoaXNgIGV4cHJlc3Npb25zIG9mIGEgZ2l2ZW4gY2xhc3MuCiAgTWFwPENsYXNzRW50aXR5LCBfTGl2ZVNldD4gX21hcDsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIG1lbWJlcnMgb2YgW21lbWJlckhvbGRpbmdDbGFzc10gY2FuIGJlIGluaGVyaXRlZCBpbnRvCiAgLy8vIGEgbGl2ZSBjbGFzcyB0aGF0IGNhbiBiZSB0aGUgdGFyZ2V0IG9mIGEgYHRoaXNgIGV4cHJlc3Npb24gaW4gW3RoaXNDbGFzc10uCiAgYm9vbCBpc0luaGVyaXRlZEluVGhpc0NsYXNzT2YoQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGJ1aWxkZXIsCiAgICAgIENsYXNzRW50aXR5IG1lbWJlckhvbGRpbmdDbGFzcywgQ2xhc3NFbnRpdHkgdGhpc0NsYXNzKSB7CiAgICBfTGl2ZVNldCBzZXQ7CiAgICBpZiAoX21hcCA9PSBudWxsKSB7CiAgICAgIF9tYXAgPSB7fTsKICAgIH0gZWxzZSB7CiAgICAgIHNldCA9IF9tYXBbdGhpc0NsYXNzXTsKICAgIH0KICAgIGlmIChzZXQgPT0gbnVsbCkgewogICAgICBzZXQgPSBfbWFwW3RoaXNDbGFzc10gPSBfY29tcHV0ZUluaGVyaXRpbmdJblRoaXNDbGFzc1NldCgKICAgICAgICAgIGJ1aWxkZXIsIG1lbWJlckhvbGRpbmdDbGFzcywgdGhpc0NsYXNzKTsKICAgIH0KICAgIHJldHVybiBzZXQuaGFzTGl2ZUNsYXNzKGJ1aWxkZXIpOwogIH0KCiAgX0xpdmVTZXQgX2NvbXB1dGVJbmhlcml0aW5nSW5UaGlzQ2xhc3NTZXQoQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGJ1aWxkZXIsCiAgICAgIENsYXNzRW50aXR5IG1lbWJlckhvbGRpbmdDbGFzcywgQ2xhc3NFbnRpdHkgdGhpc0NsYXNzKSB7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgbWVtYmVySG9sZGluZ0NsYXNzTm9kZSA9CiAgICAgICAgYnVpbGRlci5fY2xhc3NIaWVyYXJjaHlOb2Rlc1ttZW1iZXJIb2xkaW5nQ2xhc3NdOwoKICAgIGlmIChfaW5oZXJpdGluZ0NsYXNzZXMgPT0gbnVsbCkgewogICAgICBfaW5oZXJpdGluZ0NsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwogICAgICBfaW5oZXJpdGluZ0NsYXNzZXMuYWRkQWxsKG1lbWJlckhvbGRpbmdDbGFzc05vZGUKICAgICAgICAgIC5zdWJjbGFzc2VzQnlNYXNrKENsYXNzSGllcmFyY2h5Tm9kZS5BTEwsIHN0cmljdDogZmFsc2UpKTsKICAgICAgZm9yIChDbGFzc0hpZXJhcmNoeU5vZGUgbWl4aW5BcHBsaWNhdGlvbgogICAgICAgICAgaW4gYnVpbGRlci5fY2xhc3NTZXRzW21lbWJlckhvbGRpbmdDbGFzc10ubWl4aW5BcHBsaWNhdGlvbk5vZGVzKSB7CiAgICAgICAgX2luaGVyaXRpbmdDbGFzc2VzLmFkZEFsbChtaXhpbkFwcGxpY2F0aW9uCiAgICAgICAgICAgIC5zdWJjbGFzc2VzQnlNYXNrKENsYXNzSGllcmFyY2h5Tm9kZS5BTEwsIHN0cmljdDogZmFsc2UpKTsKICAgICAgfQogICAgfQoKICAgIFNldDxDbGFzc0VudGl0eT4gdmFsaWRhdGluZ1NldCA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CgogICAgdm9pZCBwcm9jZXNzSGllcmFyY2h5KENsYXNzSGllcmFyY2h5Tm9kZSBtaXhlck5vZGUpIHsKICAgICAgZm9yIChDbGFzc0VudGl0eSBpbmhlcml0aW5nQ2xhc3MgaW4gX2luaGVyaXRpbmdDbGFzc2VzKSB7CiAgICAgICAgQ2xhc3NIaWVyYXJjaHlOb2RlIGluaGVyaXRpbmdDbGFzc05vZGUgPQogICAgICAgICAgICBidWlsZGVyLl9jbGFzc0hpZXJhcmNoeU5vZGVzW2luaGVyaXRpbmdDbGFzc107CiAgICAgICAgaWYgKCF2YWxpZGF0aW5nU2V0LmNvbnRhaW5zKG1peGVyTm9kZS5jbHMpICYmCiAgICAgICAgICAgIGluaGVyaXRpbmdDbGFzc05vZGUuaGFzU3ViY2xhc3MobWl4ZXJOb2RlKSkgewogICAgICAgICAgLy8gSWYgW21peGVyTm9kZS5jbHNdIGlzIGxpdmUgdGhlbiBhIGB0aGlzYCBleHByZXNzaW9uIGNhbiB0YXJnZXQKICAgICAgICAgIC8vIG1lbWJlcnMgaW5oZXJpdGVkIGZyb20gW21lbWJlckhvbGRpbmdDbGFzc10gaW50byBbaW5oZXJpdGluZ0NsYXNzXS4KICAgICAgICAgIHZhbGlkYXRpbmdTZXQuYWRkKG1peGVyTm9kZS5jbHMpOwogICAgICAgIH0KICAgICAgICBpZiAobWl4ZXJOb2RlLmhhc1N1YmNsYXNzKGluaGVyaXRpbmdDbGFzc05vZGUpKSB7CiAgICAgICAgICAvLyBJZiBbaW5oZXJpdGluZ0NsYXNzXSBpcyBsaXZlIHRoZW4gYSBgdGhpc2AgZXhwcmVzc2lvbiBjYW4gdGFyZ2V0CiAgICAgICAgICAvLyBtZW1iZXJzIGluaGVyaXRlZCBmcm9tIFttZW1iZXJIb2xkaW5nQ2xhc3NdIGludG8gYGluaGVyaXRpbmdDbGFzc2AKICAgICAgICAgIC8vIGludG8gYSBzdWJjbGFzcyBvZiBbbWl4ZXJOb2RlLmNsc10uCiAgICAgICAgICB2YWxpZGF0aW5nU2V0LmFkZChpbmhlcml0aW5nQ2xhc3MpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIENsYXNzU2V0IHRoaXNDbGFzc1NldCA9IGJ1aWxkZXIuX2NsYXNzU2V0c1t0aGlzQ2xhc3NdOwoKICAgIHByb2Nlc3NIaWVyYXJjaHkodGhpc0NsYXNzU2V0Lm5vZGUpOwoKICAgIGZvciAoQ2xhc3NIaWVyYXJjaHlOb2RlIG1peGluQXBwbGljYXRpb24KICAgICAgICBpbiB0aGlzQ2xhc3NTZXQubWl4aW5BcHBsaWNhdGlvbk5vZGVzKSB7CiAgICAgIHByb2Nlc3NIaWVyYXJjaHkobWl4aW5BcHBsaWNhdGlvbik7CiAgICB9CgogICAgcmV0dXJuIG5ldyBfTGl2ZVNldCh2YWxpZGF0aW5nU2V0KTsKICB9Cn0KCi8vLyBBIGNhY2hlIG9iamVjdCB1c2VkIGZvciBbQ2xhc3NIaWVyYXJjaHlCdWlsZGVyLmlzSW5oZXJpdGVkSW5TdWJ0eXBlT2ZdLgpjbGFzcyBfSW5oZXJpdGVkSW5TdWJ0eXBlQ2FjaGUgewogIE1hcDxDbGFzc0VudGl0eSwgX0xpdmVTZXQ+IF9tYXA7CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgYSBsaXZlIGNsYXNzIGN1cnJlbnRseSBrbm93biB0byBpbmhlcml0IGZyb20gW3hdIGFuZAogIC8vLyBpbXBsZW1lbnQgW3ldLgogIGJvb2wgaXNJbmhlcml0ZWRJblN1YnR5cGVPZigKICAgICAgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGJ1aWxkZXIsIENsYXNzRW50aXR5IHgsIENsYXNzRW50aXR5IHkpIHsKICAgIF9MaXZlU2V0IHNldDsKICAgIGlmIChfbWFwID09IG51bGwpIHsKICAgICAgX21hcCA9IHt9OwogICAgfSBlbHNlIHsKICAgICAgc2V0ID0gX21hcFt5XTsKICAgIH0KICAgIGlmIChzZXQgPT0gbnVsbCkgewogICAgICBzZXQgPSBfbWFwW3ldID0gX2NvbXB1dGVJbmhlcml0aW5nSW5TdWJ0eXBlU2V0KGJ1aWxkZXIsIHgsIHkpOwogICAgfQogICAgcmV0dXJuIHNldC5oYXNMaXZlQ2xhc3MoYnVpbGRlcik7CiAgfQoKICAvLy8gQ3JlYXRlcyBhbiBbX0xpdmVTZXRdIG9mIGNsYXNzZXMgdGhhdCBpbmhlcml0IG1lbWJlcnMgb2YgYSBjbGFzcyBbeF0KICAvLy8gd2hpbGUgaW1wbGVtZW50aW5nIGNsYXNzIFt5XS4KICBfTGl2ZVNldCBfY29tcHV0ZUluaGVyaXRpbmdJblN1YnR5cGVTZXQoCiAgICAgIENsYXNzSGllcmFyY2h5QnVpbGRlciBidWlsZGVyLCBDbGFzc0VudGl0eSB4LCBDbGFzc0VudGl0eSB5KSB7CiAgICBDbGFzc1NldCBjbGFzc1NldCA9IGJ1aWxkZXIuX2NsYXNzU2V0c1t4XTsKCiAgICBhc3NlcnQoCiAgICAgICAgY2xhc3NTZXQgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgeCwgIk5vIENsYXNzU2V0IGZvciAkeCAoJHt4LnJ1bnRpbWVUeXBlfSk6ICR7YnVpbGRlci5fY2xhc3NTZXRzfSIpKTsKCiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICAgIGlmIChidWlsZGVyLl9pc1N1YnR5cGVPZih4LCB5KSkgewogICAgICAvLyBbeF0gaW1wbGVtZW50cyBbeV0gaXRzZWxmLCBwb3NzaWJsZSB0aHJvdWdoIHN1cGVydHlwZXMuCiAgICAgIGNsYXNzZXMuYWRkKHgpOwogICAgfQoKICAgIC8vLyBBZGQgc3ViY2xhc3NlcyBvZiBbbm9kZV0gdGhhdCBpbXBsZW1lbnQgW3ldLgogICAgdm9pZCBzdWJjbGFzc0ltcGxlbWVudHMoQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUsIHtib29sIHN0cmljdH0pIHsKICAgICAgbm9kZS5mb3JFYWNoU3ViY2xhc3MoKENsYXNzRW50aXR5IHopIHsKICAgICAgICBpZiAoYnVpbGRlci5faXNTdWJ0eXBlT2YoeiwgeSkpIHsKICAgICAgICAgIGNsYXNzZXMuYWRkKHopOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfSwgQ2xhc3NIaWVyYXJjaHlOb2RlLkFMTCwgc3RyaWN0OiBzdHJpY3QpOwogICAgfQoKICAgIC8vIEEgc3ViY2xhc3NlcyBvZiBbeF0gdGhhdCBpbXBsZW1lbnQgW3ldLgogICAgc3ViY2xhc3NJbXBsZW1lbnRzKGNsYXNzU2V0Lm5vZGUsIHN0cmljdDogdHJ1ZSk7CgogICAgZm9yIChDbGFzc0hpZXJhcmNoeU5vZGUgbWl4aW5BcHBsaWNhdGlvbgogICAgICAgIGluIGNsYXNzU2V0Lm1peGluQXBwbGljYXRpb25Ob2RlcykgewogICAgICAvLyBBIHN1YmNsYXNzIG9mIFttaXhpbkFwcGxpY2F0aW9uXSBpbXBsZW1lbnRzIFt5XS4KICAgICAgc3ViY2xhc3NJbXBsZW1lbnRzKG1peGluQXBwbGljYXRpb24sIHN0cmljdDogZmFsc2UpOwogICAgfQoKICAgIHJldHVybiBuZXcgX0xpdmVTZXQoY2xhc3Nlcyk7CiAgfQp9CgovLy8gQSBzZXQgb2YgcG90ZW50aWFsbHkgbGl2ZSBjbGFzc2VzLgovLy8KLy8vIFRoZSBzZXQgaXMgdXNlZCBbQ2xhc3NIaWVyYXJjaHlCdWlsZGVyLmlzSW5oZXJpdGVkSW5TdWJ0eXBlT2ZdIGFuZAovLy8gW0NsYXNzSGllcmFyY2h5QnVpbGRlci5pc0luaGVyaXRlZEluVGhpc0NsYXNzT2ZdIHRvIGRldGVybWluZQovLy8gd2hlbiBtZW1iZXJzIG9mIGEgY2xhc3MgaXMgbGl2ZS4KY2xhc3MgX0xpdmVTZXQgewogIC8vLyBJZiBgdHJ1ZWAgdGhlIHNldCBvZiBjbGFzc2VzIGlzIGtub3duIHRvIGNvbnRhaW4gYSBsaXZlIGNsYXNzLiBJbiB0aGlzCiAgLy8vIGNhc2UgW19jbGFzc2VzXSBpcyBgbnVsbGAuIElmIGBmYWxzZWAgdGhlIHNldCBvZiBjbGFzc2VzIGlzIGVtcHR5IGFuZAogIC8vLyB0aGVyZWZvcmUga25vd24gbmV2ZXIgdG8gY29udGFpbiBsaXZlIGNsYXNzZXMuIEluIHRoaXMgY2FzZSBbX2NsYXNzZXNdCiAgLy8vIGlzIGBudWxsYC4gSWYgYG51bGxgIFtfY2xhc3Nlc10gaXMgYSBub24tZW1wdHkgc2V0IGNvbnRhaW5pbmcgY2xhc3NlcwogIC8vLyB0aGF0IGFyZSBub3QgeWV0IGtub3duIHRvIGJlIGxpdmUuCiAgYm9vbCBfcmVzdWx0OwogIFNldDxDbGFzc0VudGl0eT4gX2NsYXNzZXM7CgogIF9MaXZlU2V0KFNldDxDbGFzc0VudGl0eT4gY2xhc3NlcykKICAgICAgOiBfcmVzdWx0ID0gY2xhc3Nlcy5pc0VtcHR5ID8gZmFsc2UgOiBudWxsLAogICAgICAgIF9jbGFzc2VzID0gY2xhc3Nlcy5pc05vdEVtcHR5ID8gY2xhc3NlcyA6IG51bGw7CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgdGhlIHNldCBvZiBjbGFzc2VzIGlzIGN1cnJlbnRseSBrbm93biB0byBjb250YWluIGEgbGl2ZQogIC8vLyBjbGFzc2VzLgogIC8vLwogIC8vLyBUaGUgcmVzdWx0IG9mIHRoaXMgbWV0aG9kIGNoYW5nZXMgZHVyaW5nIHRoZSBjbG9zZWQgd29ybGQgY29tcHV0YXRpb24uCiAgLy8vIEluaXRpYWxseSwgd2UgaGF2ZW4ndCBzZWVuIGFueSBsaXZlIGNsYXNzZXMgc28gd2Ugd2lsbCByZXR1cm4gYGZhbHNlYCBldmVuCiAgLy8vIGZvciBhIG5vbi1lbXB0eSBzZXQgb2YgY2xhc3Nlcy4gQXMgbW9yZSBjbGFzc2VzIGFyZSBtYXJrZWQgYXMKICAvLy8gaW5zdGFudGlhdGVkLCBkdXJpbmcgdHJlZS1zaGFraW5nLCB0aGUgcmVzdWx0IG1pZ2h0IGNoYW5nZSB0byBgdHJ1ZWAgaWYKICAvLy8gb25lIG9mIHRoZSBbX2NsYXNzZXNdIGhhcyBiZWVuIG1hcmtlZCBhcyBsaXZlLgogIC8vLwogIC8vLyBUaGUgcmVzdWx0IG9mIHRoaXMgbWV0aG9kIF9pc18gbW9ub3RvbmUsIHRob3VnaDsgd2hlbiB3ZSBoYXZlIHJldHVybmVkCiAgLy8vIGB0cnVlYCAoYmVjYXVzZSBhdCBsZWFzdCBvbmUgY2xhc3MgaXMga25vd24gdG8gYmUgbGl2ZSkgd2Ugd2lsbCBjb250aW51ZQogIC8vLyB0byByZXR1cm4gYHRydWVgLgogIGJvb2wgaGFzTGl2ZUNsYXNzKENsYXNzSGllcmFyY2h5QnVpbGRlciBidWlsZGVyKSB7CiAgICBpZiAoX3Jlc3VsdCAhPSBudWxsKSByZXR1cm4gX3Jlc3VsdDsKICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xzIGluIF9jbGFzc2VzKSB7CiAgICAgIGlmIChidWlsZGVyLl9jbGFzc0hpZXJhcmNoeU5vZGVzW2Nsc10uaXNJbnN0YW50aWF0ZWQpIHsKICAgICAgICAvLyBXZSBub3cga25vdyB0aGlzIHNldCBjb250YWlucyBhIGxpdmUgY2xhc3MgYW5kIGRvbmUgbmVlZCB0byByZW1lbWJlcgogICAgICAgIC8vIHRoYXQgc2V0IG9mIGNsYXNzZXMgYW55bW9yZS4KICAgICAgICBfcmVzdWx0ID0gdHJ1ZTsKICAgICAgICBfY2xhc3NlcyA9IG51bGw7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIENsYXNzUXVlcmllcyB7CiAgLy8vIFJldHVybnMgdGhlIGRlY2xhcmF0aW9uIG9mIFtjbHNdLgogIENsYXNzRW50aXR5IGdldERlY2xhcmF0aW9uKGNvdmFyaWFudCBDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyB0aGUgY2xhc3MgbWl4ZWQgaW50byBbY2xzXSBpZiBhbnkuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVwbGFjZSB0aGlzIGJ5IGEgYGdldEFwcGxpZWRNaXhpbnNgIGZ1bmN0aW9uIHRoYXQKICAvLyByZXR1cm4gdHJhbnNpdGl2ZWx5IG1peGVkIGluIGNsYXNzZXMgbGlrZSBpbjoKICAvLyAgICAgY2xhc3MgQSB7fQogIC8vICAgICBjbGFzcyBCID0gT2JqZWN0IHdpdGggQTsKICAvLyAgICAgY2xhc3MgQyA9IE9iamVjdCB3aXRoIEI7CiAgQ2xhc3NFbnRpdHkgZ2V0QXBwbGllZE1peGluKGNvdmFyaWFudCBDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyB0aGUgaGllcmFyY2h5IGRlcHRoIG9mIFtjbHNdLgogIGludCBnZXRIaWVyYXJjaHlEZXB0aChjb3ZhcmlhbnQgQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtjbHNdIGltcGxlbWVudHMgYEZ1bmN0aW9uYCBlaXRoZXIgZXhwbGljaXRseSBvciB0aHJvdWdoCiAgLy8vIGEgYGNhbGxgIG1ldGhvZC4KICBib29sIGltcGxlbWVudHNGdW5jdGlvbihjb3ZhcmlhbnQgQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgdGhlIHN1cGVyY2xhc3Mgb2YgW2Nsc10gaWYgYW55LgogIENsYXNzRW50aXR5IGdldFN1cGVyQ2xhc3MoY292YXJpYW50IENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGFsbCBzdXBlcnR5cGVzIG9mIFtjbHNdLgogIEl0ZXJhYmxlPEludGVyZmFjZVR5cGU+IGdldFN1cGVydHlwZXMoY292YXJpYW50IENsYXNzRW50aXR5IGNscyk7Cn0KCi8vLyBFbnVtIHZhbHVlcyBkZWZpbmluZyBzdWJzZXQgb2YgY2xhc3NlcyBpbmNsdWRlZCBpbiBxdWVyaWVzLgplbnVtIENsYXNzUXVlcnkgewogIC8vLyBPbmx5IHRoZSBjbGFzcyBpdHNlbGYgaXMgaW5jbHVkZWQuCiAgRVhBQ1QsCgogIC8vLyBUaGUgY2xhc3MgYW5kIGFsbCBzdWJjbGFzc2VzICh0cmFuc2l0aXZlbHkpIGFyZSBpbmNsdWRlZC4KICBTVUJDTEFTUywKCiAgLy8vIFRoZSBjbGFzcyBhbmQgYWxsIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgb3Igc3ViY2xhc3MgaXQgKHRyYW5zaXRpdmVseSkKICAvLy8gYXJlIGluY2x1ZGVkLgogIFNVQlRZUEUsCn0KCi8vLyBSZXN1bHQga2luZCBmb3IgW0NsYXNzSGllcmFyY2h5LmNvbW1vblN1YmNsYXNzZXNdLgplbnVtIFN1YmNsYXNzUmVzdWx0S2luZCB7CiAgLy8vIE5vIGNvbW1vbiBzdWJjbGFzc2VzLgogIEVNUFRZLAoKICAvLy8gRXhhY3RseSB0aGUgZmlyc3QgY2xhc3MgaW4gY29tbW9uLgogIEVYQUNUMSwKCiAgLy8vIEV4YWN0bHkgdGhlIHNlY29uZCBjbGFzcyBpbiBjb21tb24uCiAgRVhBQ1QyLAoKICAvLy8gU3ViY2xhc3NlcyBvZiB0aGUgZmlyc3QgY2xhc3MgaW4gY29tbW9uLgogIFNVQkNMQVNTMSwKCiAgLy8vIFN1YmNsYXNzZXMgb2YgdGhlIHNlY29uZCBjbGFzcyBpbiBjb21tb24uCiAgU1VCQ0xBU1MyLAoKICAvLy8gU3VidHlwZXMgb2YgdGhlIGZpcnN0IGNsYXNzIGluIGNvbW1vbi4KICBTVUJUWVBFMSwKCiAgLy8vIFN1YnR5cGVzIG9mIHRoZSBzZWNvbmQgY2xhc3MgaW4gY29tbW9uLgogIFNVQlRZUEUyLAoKICAvLy8gU3ViY2xhc3NlcyBvZiBhIHNldCBvZiBjbGFzc2VzIGluIGNvbW1vbi4KICBTRVQKfQoKLy8vIFJlc3VsdCBjb21wdXRlZCBpbiBbQ2xhc3NIaWVyYXJjaHkuY29tbW9uU3ViY2xhc3Nlc10uCmNsYXNzIFN1YmNsYXNzUmVzdWx0IHsKICBmaW5hbCBTdWJjbGFzc1Jlc3VsdEtpbmQga2luZDsKICBmaW5hbCBMaXN0PENsYXNzRW50aXR5PiBjbGFzc2VzOwoKICBTdWJjbGFzc1Jlc3VsdCh0aGlzLmNsYXNzZXMpIDoga2luZCA9IFN1YmNsYXNzUmVzdWx0S2luZC5TRVQ7CgogIGNvbnN0IFN1YmNsYXNzUmVzdWx0LmludGVybmFsKHRoaXMua2luZCkgOiBjbGFzc2VzID0gbnVsbDsKCiAgc3RhdGljIGNvbnN0IFN1YmNsYXNzUmVzdWx0IEVNUFRZID0KICAgICAgY29uc3QgU3ViY2xhc3NSZXN1bHQuaW50ZXJuYWwoU3ViY2xhc3NSZXN1bHRLaW5kLkVNUFRZKTsKICBzdGF0aWMgY29uc3QgU3ViY2xhc3NSZXN1bHQgRVhBQ1QxID0KICAgICAgY29uc3QgU3ViY2xhc3NSZXN1bHQuaW50ZXJuYWwoU3ViY2xhc3NSZXN1bHRLaW5kLkVYQUNUMSk7CiAgc3RhdGljIGNvbnN0IFN1YmNsYXNzUmVzdWx0IEVYQUNUMiA9CiAgICAgIGNvbnN0IFN1YmNsYXNzUmVzdWx0Lmlu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ZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IHR5cGVfZ3JhcGhfaW5mZXJyZXI7CgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbicgc2hvdyBRdWV1ZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJy4uL2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnLi4vY29tcGlsZXIuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9pbmZlcnJlZF9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL2VsZW1lbnRzLmRhcnQnIHNob3cgSkNsb3N1cmVDYWxsTWV0aG9kOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnOwppbXBvcnQgJ2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICdpbmZlcnJlcl9lbmdpbmUuZGFydCc7CmltcG9ydCAndHlwZV9ncmFwaF9ub2Rlcy5kYXJ0JzsKaW1wb3J0ICd0eXBlcy5kYXJ0JzsKCi8vLyBBIHdvcmsgcXVldWUgZm9yIHRoZSBpbmZlcnJlci4gSXQgZmlsdGVycyBvdXQgbm9kZXMgdGhhdCBhcmUgdGFnZ2VkIGFzCi8vLyBbVHlwZUluZm9ybWF0aW9uLmRvTm90RW5xdWV1ZV0sIGFzIHdlbGwgYXMgZW5zdXJlcyB0aHJvdWdoCi8vLyBbVHlwZUluZm9ybWF0aW9uLmluUXVldWVdIHRoYXQgYSBub2RlIGlzIGluIHRoZSBxdWV1ZSBvbmx5IG9uY2UgYXQKLy8vIGEgdGltZS4KY2xhc3MgV29ya1F1ZXVlIHsKICBmaW5hbCBRdWV1ZTxUeXBlSW5mb3JtYXRpb24+IHF1ZXVlID0gbmV3IFF1ZXVlPFR5cGVJbmZvcm1hdGlvbj4oKTsKCiAgdm9pZCBhZGQoVHlwZUluZm9ybWF0aW9uIGVsZW1lbnQpIHsKICAgIGlmIChlbGVtZW50LmRvTm90RW5xdWV1ZSkgcmV0dXJuOwogICAgaWYgKGVsZW1lbnQuaW5RdWV1ZSkgcmV0dXJuOwogICAgcXVldWUuYWRkTGFzdChlbGVtZW50KTsKICAgIGVsZW1lbnQuaW5RdWV1ZSA9IHRydWU7CiAgfQoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxUeXBlSW5mb3JtYXRpb24+IGFsbCkgewogICAgYWxsLmZvckVhY2goYWRkKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiByZW1vdmUoKSB7CiAgICBUeXBlSW5mb3JtYXRpb24gZWxlbWVudCA9IHF1ZXVlLnJlbW92ZUZpcnN0KCk7CiAgICBlbGVtZW50LmluUXVldWUgPSBmYWxzZTsKICAgIHJldHVybiBlbGVtZW50OwogIH0KCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBxdWV1ZS5pc0VtcHR5OwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBxdWV1ZS5sZW5ndGg7Cn0KCmNsYXNzIFR5cGVHcmFwaEluZmVycmVyIGltcGxlbWVudHMgVHlwZXNJbmZlcnJlciB7CiAgSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXI7CiAgZmluYWwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkOwoKICBmaW5hbCBDb21waWxlciBfY29tcGlsZXI7CiAgZmluYWwgSW5mZXJyZWREYXRhQnVpbGRlciBfaW5mZXJyZWREYXRhQnVpbGRlcjsKCiAgVHlwZUdyYXBoSW5mZXJyZXIoCiAgICAgIHRoaXMuX2NvbXBpbGVyLCB0aGlzLmNsb3NlZFdvcmxkLCB0aGlzLl9pbmZlcnJlZERhdGFCdWlsZGVyKTsKCiAgU3RyaW5nIGdldCBuYW1lID0+ICdHcmFwaCBpbmZlcnJlcic7CgogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IGFic3RyYWN0VmFsdWVEb21haW4gPT4KICAgICAgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKCiAgQG92ZXJyaWRlCiAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgYW5hbHl6ZU1haW4oRnVuY3Rpb25FbnRpdHkgbWFpbikgewogICAgaW5mZXJyZXIgPSBjcmVhdGVJbmZlcnJlckVuZ2luZUZvcihtYWluKTsKICAgIGluZmVycmVyLnJ1bk92ZXJBbGxFbGVtZW50cygpOwogICAgcmV0dXJuIGJ1aWxkUmVzdWx0cygpOwogIH0KCiAgSW5mZXJyZXJFbmdpbmUgY3JlYXRlSW5mZXJyZXJFbmdpbmVGb3IoRnVuY3Rpb25FbnRpdHkgbWFpbikgewogICAgcmV0dXJuIG5ldyBJbmZlcnJlckVuZ2luZUltcGwoCiAgICAgICAgX2NvbXBpbGVyLm9wdGlvbnMsCiAgICAgICAgX2NvbXBpbGVyLnByb2dyZXNzLAogICAgICAgIF9jb21waWxlci5yZXBvcnRlciwKICAgICAgICBfY29tcGlsZXIub3V0cHV0UHJvdmlkZXIsCiAgICAgICAgY2xvc2VkV29ybGQsCiAgICAgICAgX2NvbXBpbGVyLmZyb250ZW5kU3RyYXRlZ3kubm9TdWNoTWV0aG9kUmVnaXN0cnksCiAgICAgICAgbWFpbiwKICAgICAgICBfaW5mZXJyZWREYXRhQnVpbGRlcik7CiAgfQoKICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGdldENhbGxlcnNPZkZvclRlc3RpbmcoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBpbmZlcnJlci5nZXRDYWxsZXJzT2ZGb3JUZXN0aW5nKGVsZW1lbnQpOwogIH0KCiAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgYnVpbGRSZXN1bHRzKCkgewogICAgaW5mZXJyZXIuY2xvc2UoKTsKCiAgICBNYXA8TWVtYmVyRW50aXR5LCBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0PiBtZW1iZXJSZXN1bHRzID0KICAgICAgICA8TWVtYmVyRW50aXR5LCBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0Pnt9OwogICAgTWFwPExvY2FsLCBBYnN0cmFjdFZhbHVlPiBwYXJhbWV0ZXJSZXN1bHRzID0gPExvY2FsLCBBYnN0cmFjdFZhbHVlPnt9OwoKICAgIHZvaWQgY3JlYXRlTWVtYmVyUmVzdWx0cygKICAgICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyLCBNZW1iZXJUeXBlSW5mb3JtYXRpb24gdHlwZUluZm9ybWF0aW9uKSB7CiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VFbGVtZW50RGF0YSBkYXRhID0KICAgICAgICAgIGluZmVycmVyLmRhdGFPZk1lbWJlcihtZW1iZXIpLmNvbXByZXNzKCk7CiAgICAgIGJvb2wgaXNKc0ludGVyb3AgPSBjbG9zZWRXb3JsZC5uYXRpdmVEYXRhLmlzSnNJbnRlcm9wTWVtYmVyKG1lbWJlcik7CgogICAgICBBYnN0cmFjdFZhbHVlIHJldHVyblR5cGU7CiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZTsKCiAgICAgIGlmIChpc0pzSW50ZXJvcCkgewogICAgICAgIHJldHVyblR5cGUgPSB0eXBlID0gYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZTsKICAgICAgfSBlbHNlIGlmIChtZW1iZXIgaXMgRnVuY3Rpb25FbnRpdHkpIHsKICAgICAgICByZXR1cm5UeXBlID0gdHlwZUluZm9ybWF0aW9uLnR5cGU7CiAgICAgICAgdHlwZSA9IGFic3RyYWN0VmFsdWVEb21haW4uZnVuY3Rpb25UeXBlOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVyblR5cGUgPSBhYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlOwogICAgICAgIHR5cGUgPSB0eXBlSW5mb3JtYXRpb24udHlwZTsKICAgICAgfQoKICAgICAgYm9vbCB0aHJvd3NBbHdheXMgPQogICAgICAgICAgLy8gQWx3YXlzIHRocm93cyBpZiB0aGUgcmV0dXJuIHR5cGUgd2FzIGluZmVycmVkIHRvIGJlIG5vbi1udWxsIGVtcHR5LgogICAgICAgICAgcmV0dXJuVHlwZSAhPSBudWxsICYmCiAgICAgICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0VtcHR5KHJldHVyblR5cGUpLmlzRGVmaW5pdGVseVRydWU7CgogICAgICBib29sIGlzQ2FsbGVkT25jZSA9CiAgICAgICAgICB0eXBlSW5mb3JtYXRpb24uaXNDYWxsZWRPbmNlKCk7IC8vaXNNZW1iZXJDYWxsZWRPbmNlKG1lbWJlcik7CgogICAgICBtZW1iZXJSZXN1bHRzW21lbWJlcl0gPSBuZXcgR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdEltcGwoCiAgICAgICAgICBkYXRhLCByZXR1cm5UeXBlLCB0eXBlLAogICAgICAgICAgdGhyb3dzQWx3YXlzOiB0aHJvd3NBbHdheXMsIGlzQ2FsbGVkT25jZTogaXNDYWxsZWRPbmNlKTsKICAgIH0KCiAgICBTZXQ8RmllbGRFbnRpdHk+IGZyZWVWYXJpYWJsZXMgPSBuZXcgU2V0PEZpZWxkRW50aXR5PigpOwogICAgaW5mZXJyZXIudHlwZXMuZm9yRWFjaE1lbWJlclR5cGUoCiAgICAgICAgKE1lbWJlckVudGl0eSBtZW1iZXIsIE1lbWJlclR5cGVJbmZvcm1hdGlvbiB0eXBlSW5mb3JtYXRpb24pIHsKICAgICAgY3JlYXRlTWVtYmVyUmVzdWx0cyhtZW1iZXIsIHR5cGVJbmZvcm1hdGlvbik7CiAgICAgIGlmIChtZW1iZXIgaXMgSkNsb3N1cmVDYWxsTWV0aG9kKSB7CiAgICAgICAgQ2xvc3VyZVJlcHJlc2VudGF0aW9uSW5mbyBpbmZvID0KICAgICAgICAgICAgY2xvc2VkV29ybGQuY2xvc3VyZURhdGFMb29rdXAuZ2V0U2NvcGVJbmZvKG1lbWJlcik7CiAgICAgICAgaW5mby5mb3JFYWNoRnJlZVZhcmlhYmxlKChMb2NhbCBmcm9tLCBGaWVsZEVudGl0eSB0bykgewogICAgICAgICAgZnJlZVZhcmlhYmxlcy5hZGQodG8pOwogICAgICAgIH0pOwogICAgICB9CiAgICB9KTsKICAgIGZvciAoRmllbGRFbnRpdHkgZmllbGQgaW4gZnJlZVZhcmlhYmxlcykgewogICAgICBpZiAoIW1lbWJlclJlc3VsdHMuY29udGFpbnNLZXkoZmllbGQpKSB7CiAgICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIHR5cGVJbmZvcm1hdGlvbiA9CiAgICAgICAgICAgIGluZmVycmVyLnR5cGVzLmdldEluZmVycmVkVHlwZU9mTWVtYmVyKGZpZWxkKTsKICAgICAgICB0eXBlSW5mb3JtYXRpb24uY29tcHV0ZUlzQ2FsbGVkT25jZSgpOwogICAgICAgIGNyZWF0ZU1lbWJlclJlc3VsdHMoZmllbGQsIHR5cGVJbmZvcm1hdGlvbik7CiAgICAgIH0KICAgIH0KCiAgICBpbmZlcnJlci50eXBlcy5mb3JFYWNoUGFyYW1ldGVyVHlwZSgKICAgICAgICAoTG9jYWwgcGFyYW1ldGVyLCBQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24gdHlwZUluZm9ybWF0aW9uKSB7CiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSA9IHR5cGVJbmZvcm1hdGlvbi50eXBlOwogICAgICBwYXJhbWV0ZXJSZXN1bHRzW3BhcmFtZXRlcl0gPSB0eXBlOwogICAgfSk7CgogICAgTWFwPGlyLlRyZWVOb2RlLCBBYnN0cmFjdFZhbHVlPiBhbGxvY2F0ZWRMaXN0cyA9CiAgICAgICAgPGlyLlRyZWVOb2RlLCBBYnN0cmFjdFZhbHVlPnt9OwogICAgU2V0PGlyLlRyZWVOb2RlPiBjaGVja2VkRm9yR3Jvd2FibGVMaXN0cyA9IG5ldyBTZXQ8aXIuVHJlZU5vZGU+KCk7CiAgICBpbmZlcnJlci50eXBlcy5hbGxvY2F0ZWRMaXN0cwogICAgICAgIC5mb3JFYWNoKChpci5UcmVlTm9kZSBub2RlLCBMaXN0VHlwZUluZm9ybWF0aW9uIHR5cGVJbmZvcm1hdGlvbikgewogICAgICBMaXN0VHlwZUluZm9ybWF0aW9uIGluZm8gPSBpbmZlcnJlci50eXBlcy5hbGxvY2F0ZWRMaXN0c1tub2RlXTsKICAgICAgaWYgKGluZm8uY2hlY2tzR3Jvd2FibGUpIHsKICAgICAgICBjaGVja2VkRm9yR3Jvd2FibGVMaXN0cy5hZGQobm9kZSk7CiAgICAgIH0KICAgICAgYWxsb2NhdGVkTGlzdHNbbm9kZV0gPSB0eXBlSW5mb3JtYXRpb24udHlwZTsKICAgIH0pOwoKICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMgPSBuZXcgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHNJbXBsKAogICAgICAgIGNsb3NlZFdvcmxkLAogICAgICAgIF9pbmZlcnJlZERhdGFCdWlsZGVyLmNsb3NlKGNsb3NlZFdvcmxkKSwKICAgICAgICBtZW1iZXJSZXN1bHRzLAogICAgICAgIHBhcmFtZXRlclJlc3VsdHMsCiAgICAgICAgY2hlY2tlZEZvckdyb3dhYmxlTGlzdHMsCiAgICAgICAgaW5mZXJyZXIucmV0dXJuc0xpc3RFbGVtZW50VHlwZVNldCwKICAgICAgICBhbGxvY2F0ZWRMaXN0cyk7CgogICAgaW5mZXJyZXIuY2xlYXIoKTsKCiAgICByZXR1cm4gcmVzdWx0czsKICB9Cn0KgLUATk48AR0BJQEoGhskKzwYJR8gFQFLP0cMEkUBJiYhHBwEAS8WBAEdMx0UBAElASICATMbIgEcMgEVRAEnATEnAQxALiMbBAFAIxscHCIVOQ4fBAFINQQBLhYBRztLAR5GLDRLASAaARk9LSsxDzYlCAEaUSBIARpIAUciQwYBPSZHNCopQEAhDAgILy8wOy81CAYBKUYxKggBNShHIktGISsIMwgBTRUxFxohLBkBFgEUBAIBNnBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL3R5cGVfZ3JhcGhfaW5mZXJyZXIuZGFydD9zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pbmZlcnJlci90eXBlbWFza3MvY29uc3RhbnRzLmRhcnSRCC8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IHR5cGVzLmNvbnN0YW50czsKCmltcG9ydCAnLi4vLi4vY29uc3RhbnRzL2NvbnN0YW50X3N5c3RlbS5kYXJ0JyBhcyBjb25zdGFudF9zeXN0ZW07CmltcG9ydCAnLi4vLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi8uLi93b3JsZC5kYXJ0JyBzaG93IEpDbG9zZWRXb3JsZDsKaW1wb3J0ICdtYXNrcy5kYXJ0JzsKCi8vLyBDb21wdXRlcyB0aGUgW1R5cGVNYXNrXSBmb3IgdGhlIGNvbnN0YW50IFt2YWx1ZV0uClR5cGVNYXNrIGNvbXB1dGVUeXBlTWFzayhKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsIENvbnN0YW50VmFsdWUgdmFsdWUpIHsKICByZXR1cm4gdmFsdWUuYWNjZXB0KGNvbnN0IENvbnN0YW50VmFsdWVUeXBlTWFza3MoKSwgY2xvc2VkV29ybGQpOwp9CgpjbGFzcyBDb25zdGFudFZhbHVlVHlwZU1hc2tzCiAgICBleHRlbmRzIENvbnN0YW50VmFsdWVWaXNpdG9yPFR5cGVNYXNrLCBKQ2xvc2VkV29ybGQ+IHsKICBjb25zdCBDb25zdGFudFZhbHVlVHlwZU1hc2tzKCk7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIHZpc2l0Q29uc3RydWN0ZWQoCiAgICAgIENvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBpZiAoY2xvc2VkV29ybGQuaW50ZXJjZXB0b3JEYXRhLmlzSW50ZXJjZXB0ZWRDbGFzcyhjb25zdGFudC50eXBlLmVsZW1lbnQpKSB7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLm5vbk51bGxUeXBlOwogICAgfQogICAgcmV0dXJuIG5ldyBUeXBlTWFzay5ub25OdWxsRXhhY3QoY29uc3RhbnQudHlwZS5lbGVtZW50LCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayB2aXNpdERlZmVycmVkR2xvYmFsKAogICAgICBEZWZlcnJlZEdsb2JhbENvbnN0YW50VmFsdWUgY29uc3RhbnQsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGNvbnN0YW50LnJlZmVyZW5jZWQuYWNjZXB0KHRoaXMsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIHZpc2l0RG91YmxlKERvdWJsZUNvbnN0YW50VmFsdWUgY29uc3RhbnQsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgLy8gV2UgaGF2ZSB0byByZWNvZ25pemUgZG91YmxlIGNvbnN0YW50cyB0aGF0IGFyZSAnaXMgaW50Jy4KICAgIGlmIChjb25zdGFudF9zeXN0ZW0uaXNJbnQoY29uc3RhbnQpKSB7CiAgICAgIGlmIChjb25zdGFudC5pc01pbnVzWmVybykgewogICAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLnVpbnQzMVR5cGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KGNvbnN0YW50LmlzUG9zaXRpdmVJbmZpbml0eSB8fCBjb25zdGFudC5pc05lZ2F0aXZlSW5maW5pdHkpOwogICAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmludFR5cGU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmRvdWJsZVR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayB2aXNpdER1bW15SW50ZXJjZXB0b3IoCiAgICAgIER1bW15SW50ZXJjZXB0b3JDb25zdGFudFZhbHVlIGNvbnN0YW50LCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBjb25zdGFudC5hYnN0cmFjdFZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgdmlzaXRVbnJlYWNoYWJsZSgKICAgICAgVW5yZWFjaGFibGVDb25zdGFudFZhbHVlIGNvbnN0YW50LCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmVtcHR5VHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIHZpc2l0SnNOYW1lKEpzTmFtZUNvbnN0YW50VmFsdWUgY29uc3RhbnQsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uc3RyaW5nVHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIHZpc2l0Qm9vbChCb29sQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIHZpc2l0RnVuY3Rpb24oCiAgICAgIEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5mdW5jdGlvblR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayB2aXNpdEluc3RhbnRpYXRpb24oCiAgICAgIEluc3RhbnRpYXRpb25Db25zdGFudFZhbHVlIGNvbnN0YW50LCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmZ1bmN0aW9uVHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIHZpc2l0SW50KEludENvbnN0YW50VmFsdWUgY29uc3RhbnQsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgaWYgKGNvbnN0YW50LmlzVUludDMxKCkpIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLnVpbnQzMVR5cGU7CiAgICBpZiAoY29uc3RhbnQuaXNVSW50MzIoKSkgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4udWludDMyVHlwZTsKICAgIGlmIChjb25zdGFudC5pc1Bvc2l0aXZlKCkpCiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLnBvc2l0aXZlSW50VHlwZTsKICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmludFR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayB2aXNpdEludGVyY2VwdG9yKAogICAgICBJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgY29uc3RhbnQsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4ubm9uTnVsbFR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayB2aXNpdExpc3QoTGlzdENvbnN0YW50VmFsdWUgY29uc3RhbnQsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uY29uc3RMaXN0VHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIHZpc2l0U2V0KFNldENvbnN0YW50VmFsdWUgY29uc3RhbnQsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uY29uc3RTZXRUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgdmlzaXRNYXAoTWFwQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5jb25zdE1hcFR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayB2aXNpdE51bGwoTnVsbENvbnN0YW50VmFsdWUgY29uc3RhbnQsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4ubnVsbFR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayB2aXNpdE5vbkNvbnN0YW50KAogICAgICBOb25Db25zdGFudFZhbHVlIGNvbnN0YW50LCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLm51bGxUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgdmlzaXRTdHJpbmcoU3RyaW5nQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5zdHJpbmdUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgdmlzaXRUeXBlKFR5cGVDb25zdGFudFZhbHVlIGNvbnN0YW50LCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLnR5cGVUeXBlOwogIH0KfQqAiABOTjwBGQFCJi0VATZKRAIBHTsiAQwdRVE6BkoEAQwgSDoEAQxRQCsiOw9MOAgGNwQBDCJKIwQBDB1FNgQBDFE3BAEMTTUEAQwaQjkEAQwfRzkEAQxLUFAfPjQEAQwdRTgEAQxNOgQBDEs5BAEMSzkEAQxNNQQBDB09NQQBDFE3BAEMTTUEAgE2cGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvdHlwZW1hc2tzL2NvbnN0YW50cy5kYXJ0N3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX21vZGVsL2VsZW1lbnRfbWFwLmRhcnTAAFLJLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBKQ29tbW9uRWxlbWVudHMsIEpFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvanVtcHMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJy4uL2lyL2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnLi4vaXIvc3RhdGljX3R5cGVfcHJvdmlkZXIuZGFydCc7CmltcG9ydCAnLi4vaXIvdXRpbC5kYXJ0JzsKaW1wb3J0ICcuLi9qc19tb2RlbC9jbG9zdXJlLmRhcnQnIHNob3cgSlJlY29yZEZpZWxkOwppbXBvcnQgJy4uL2pzX21vZGVsL2VsZW1lbnRzLmRhcnQnIHNob3cgSkdlbmVyYXRvckJvZHk7CmltcG9ydCAnLi4vbmF0aXZlL2JlaGF2aW9yLmRhcnQnOwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi9zc2EvdHlwZV9idWlsZGVyLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NhbGxfc3RydWN0dXJlLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnOwppbXBvcnQgJ2Nsb3N1cmUuZGFydCc7CgovLy8gSW50ZXJmYWNlIHRoYXQgdHJhbnNsYXRlcyBiZXR3ZWVuIEtlcm5lbCBJUiBub2RlcyBhbmQgZW50aXRpZXMgdXNlZCBmb3IKLy8vIGdsb2JhbCB0eXBlIGluZmVyZW5jZSBhbmQgYnVpbGRpbmcgdGhlIFNTQSBncmFwaCBmb3IgbWVtYmVycy4KYWJzdHJhY3QgY2xhc3MgSnNUb0VsZW1lbnRNYXAgewogIC8vLyBBY2Nlc3MgdG8gdGhlIGNvbW1vbmx5IHVzZWQgZWxlbWVudHMgYW5kIHR5cGVzLgogIEpDb21tb25FbGVtZW50cyBnZXQgY29tbW9uRWxlbWVudHM7CgogIC8vLyBBY2Nlc3MgdG8gdGhlIFtEYXJ0VHlwZXNdIG9iamVjdC4KICBEYXJ0VHlwZXMgZ2V0IHR5cGVzOwoKICAvLy8gUmV0dXJucyB0aGUgW0RhcnRUeXBlXSBjb3JyZXNwb25kaW5nIHRvIFt0eXBlXS4KICBEYXJ0VHlwZSBnZXREYXJ0VHlwZShpci5EYXJ0VHlwZSB0eXBlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtJbnRlcmZhY2VUeXBlXSBjb3JyZXNwb25kaW5nIHRvIFt0eXBlXS4KICBJbnRlcmZhY2VUeXBlIGdldEludGVyZmFjZVR5cGUoaXIuSW50ZXJmYWNlVHlwZSB0eXBlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtUeXBlVmFyaWFibGVUeXBlXSBjb3JyZXNwb25kaW5nIHRvIFt0eXBlXS4KICBUeXBlVmFyaWFibGVUeXBlIGdldFR5cGVWYXJpYWJsZVR5cGUoaXIuVHlwZVBhcmFtZXRlclR5cGUgdHlwZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbRnVuY3Rpb25UeXBlXSBvZiB0aGUgW25vZGVdLgogIEZ1bmN0aW9uVHlwZSBnZXRGdW5jdGlvblR5cGUoaXIuRnVuY3Rpb25Ob2RlIG5vZGUpOwoKICAvLy8gUmV0dXJuIHRoZSBbSW50ZXJmYWNlVHlwZV0gY29ycmVzcG9uZGluZyB0byB0aGUgW2Nsc10gd2l0aCB0aGUgZ2l2ZW4KICAvLy8gW3R5cGVBcmd1bWVudHNdLgogIEludGVyZmFjZVR5cGUgY3JlYXRlSW50ZXJmYWNlVHlwZSgKICAgICAgaXIuQ2xhc3MgY2xzLCBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKTsKCiAgLy8vIFJldHVybnMgdGhlIFtDYWxsU3RydWN0dXJlXSBjb3JyZXNwb25kaW5nIHRvIHRoZSBbYXJndW1lbnRzXS4KICBDYWxsU3RydWN0dXJlIGdldENhbGxTdHJ1Y3R1cmUoaXIuQXJndW1lbnRzIGFyZ3VtZW50cyk7CgogIC8vLyBSZXR1cm5zIHRoZSBbU2VsZWN0b3JdIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGludm9jYXRpb24gb3IgZ2V0dGVyL3NldHRlcgogIC8vLyBhY2Nlc3Mgb2YgW25vZGVdLgogIFNlbGVjdG9yIGdldFNlbGVjdG9yKGlyLkV4cHJlc3Npb24gbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbTWVtYmVyRW50aXR5XSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtZW1iZXIgW25vZGVdLgogIE1lbWJlckVudGl0eSBnZXRNZW1iZXIoaXIuTWVtYmVyIG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgW0Z1bmN0aW9uRW50aXR5XSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9jZWR1cmUgW25vZGVdLgogIEZ1bmN0aW9uRW50aXR5IGdldE1ldGhvZChpci5Qcm9jZWR1cmUgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbQ29uc3RydWN0b3JFbnRpdHldIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdlbmVyYXRpdmUgb3IgZmFjdG9yeQogIC8vLyBjb25zdHJ1Y3RvciBbbm9kZV0uCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0Q29uc3RydWN0b3IoaXIuTWVtYmVyIG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgW0ZpZWxkRW50aXR5XSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaWVsZCBbbm9kZV0uCiAgRmllbGRFbnRpdHkgZ2V0RmllbGQoaXIuRmllbGQgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbQ2xhc3NFbnRpdHldIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNsYXNzIFtub2RlXS4KICBDbGFzc0VudGl0eSBnZXRDbGFzcyhpci5DbGFzcyBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtUeXBlZGVmVHlwZV0gY29ycmVzcG9uZGluZyB0byByYXcgdHlwZSBvZiB0aGUgdHlwZWRlZiBbbm9kZV0uCiAgVHlwZWRlZlR5cGUgZ2V0VHlwZWRlZlR5cGUoaXIuVHlwZWRlZiBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIHN1cGVyIFtNZW1iZXJFbnRpdHldIGZvciBhIHN1cGVyIGludm9jYXRpb24sIGdldCBvciBzZXQgb2YKICAvLy8gW25hbWVdIGZyb20gdGhlIG1lbWJlciBbY29udGV4dF0uCiAgTWVtYmVyRW50aXR5IGdldFN1cGVyTWVtYmVyKE1lbWJlckVudGl0eSBjb250ZXh0LCBpci5OYW1lIG5hbWUsCiAgICAgIHtib29sIHNldHRlcjogZmFsc2V9KTsKCiAgLy8vIFJldHVybnMgdGhlIGBub1N1Y2hNZXRob2RgIFtGdW5jdGlvbkVudGl0eV0gY2FsbCBmcm9tIGEKICAvLy8gYHN1cGVyLm5vU3VjaE1ldGhvZGAgaW52b2NhdGlvbiB3aXRoaW4gW2Nsc10uCiAgRnVuY3Rpb25FbnRpdHkgZ2V0U3VwZXJOb1N1Y2hNZXRob2QoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgdGhlIFtOYW1lXSBjb3JyZXNwb25kaW5nIHRvIFtuYW1lXS4KICBOYW1lIGdldE5hbWUoaXIuTmFtZSBuYW1lKTsKCiAgLy8vIENvbXB1dGVzIHRoZSBbbmF0aXZlLk5hdGl2ZUJlaGF2aW9yXSBmb3IgYSBjYWxsIHRvIHRoZSBbSlNdIGZ1bmN0aW9uLgogIE5hdGl2ZUJlaGF2aW9yIGdldE5hdGl2ZUJlaGF2aW9yRm9ySnNDYWxsKGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSk7CgogIC8vLyBDb21wdXRlcyB0aGUgW25hdGl2ZS5OYXRpdmVCZWhhdmlvcl0gZm9yIGEgY2FsbCB0byB0aGUgW0pTX0JVSUxUSU5dCiAgLy8vIGZ1bmN0aW9uLgogIE5hdGl2ZUJlaGF2aW9yIGdldE5hdGl2ZUJlaGF2aW9yRm9ySnNCdWlsdGluQ2FsbChpci5TdGF0aWNJbnZvY2F0aW9uIG5vZGUpOwoKICAvLy8gQ29tcHV0ZXMgdGhlIFtuYXRpdmUuTmF0aXZlQmVoYXZpb3JdIGZvciBhIGNhbGwgdG8gdGhlCiAgLy8vIFtKU19FTUJFRERFRF9HTE9CQUxdIGZ1bmN0aW9uLgogIE5hdGl2ZUJlaGF2aW9yIGdldE5hdGl2ZUJlaGF2aW9yRm9ySnNFbWJlZGRlZEdsb2JhbENhbGwoCiAgICAgIGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSk7CgogIC8vLyBDb21wdXRlcyB0aGUgW0NvbnN0YW50VmFsdWVdIGZvciB0aGUgY29uc3RhbnQgW2V4cHJlc3Npb25dLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1vdmUgdG8gW0tlcm5lbFRvRWxlbWVudE1hcEZvckJ1aWxkaW5nXS4gVGhpcyBpcyBvbmx5CiAgLy8gdXNlZCBpbiBpbXBhY3QgYnVpbGRlciBmb3Igc3ltYm9sIGNvbnN0YW50cy4KICBDb25zdGFudFZhbHVlIGdldENvbnN0YW50VmFsdWUoaXIuRXhwcmVzc2lvbiBleHByZXNzaW9uLAogICAgICB7Ym9vbCByZXF1aXJlQ29uc3RhbnQ6IHRydWUsIGJvb2wgaW1wbGljaXROdWxsOiBmYWxzZX0pOwoKICAvLy8gUmV0dXJuIHRoZSBbSW1wb3J0RW50aXR5XSBjb3JyZXNwb25kaW5nIHRvIFtub2RlXS4KICBJbXBvcnRFbnRpdHkgZ2V0SW1wb3J0KGlyLkxpYnJhcnlEZXBlbmRlbmN5IG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgZGVmaW5pdGlvbiBpbmZvcm1hdGlvbiBmb3IgW2Nsc10uCiAgQ2xhc3NEZWZpbml0aW9uIGdldENsYXNzRGVmaW5pdGlvbihjb3ZhcmlhbnQgQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFtFbGVtZW50RW52aXJvbm1lbnRdIGZvciBsaWJyYXJ5LCBjbGFzcyBhbmQgbWVtYmVyIGxvb2t1cC4KICBKRWxlbWVudEVudmlyb25tZW50IGdldCBlbGVtZW50RW52aXJvbm1lbnQ7CgogIC8vLyBSZXR1cm5zIHRoZSBsaXN0IG9mIFtEYXJ0VHlwZV1zIGNvcnJlc3BvbmRpbmcgdG8gW3R5cGVzXS4KICBMaXN0PERhcnRUeXBlPiBnZXREYXJ0VHlwZXMoTGlzdDxpci5EYXJ0VHlwZT4gdHlwZXMpOwoKICAvLy8gUmV0dXJucyB0aGUgZGVmaW5pdGlvbiBpbmZvcm1hdGlvbiBmb3IgW21lbWJlcl0uCiAgTWVtYmVyRGVmaW5pdGlvbiBnZXRNZW1iZXJEZWZpbml0aW9uKE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICAvLy8gUmV0dXJucyB0aGUgW2lyLk1lbWJlcl0gY29udGFpbmluZyB0aGUgZGVmaW5pdGlvbiBvZiBbbWVtYmVyXSwgaWYgYW55LgogIGlyLk1lbWJlciBnZXRNZW1iZXJDb250ZXh0Tm9kZShNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgLy8vIFJldHVybnMgdGhlIHR5cGUgb2YgYHRoaXNgIGluIFttZW1iZXJdLCBvciBgbnVsbGAgaWYgbWVtYmVyIGlzIGRlZmluZWQgaW4KICAvLy8gYSBzdGF0aWMgY29udGV4dC4KICBJbnRlcmZhY2VUeXBlIGdldE1lbWJlclRoaXNUeXBlKE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICAvLy8gUmV0dXJucyBob3cgW21lbWJlcl0gaGFzIGFjY2VzcyB0byB0eXBlIHZhcmlhYmxlcyBvZiB0aGUgdGhpcyB0eXBlCiAgLy8vIHJldHVybmVkIGJ5IFtnZXRNZW1iZXJUaGlzVHlwZV0uCiAgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgZ2V0Q2xhc3NUeXBlVmFyaWFibGVBY2Nlc3NGb3JNZW1iZXIoCiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICAvLy8gUmV0dXJucyB0aGUgW0xpYnJhcnlFbnRpdHldIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxpYnJhcnkgW25vZGVdLgogIExpYnJhcnlFbnRpdHkgZ2V0TGlicmFyeShpci5MaWJyYXJ5IG5vZGUpOwoKICAvLy8gUmV0dXJucyBhIFtTcGFubmFibGVdIGZvciBhIG1lc3NhZ2UgcG9pbnRpbmcgdG8gdGhlIElSIFtub2RlXSBpbiB0aGUKICAvLy8gY29udGV4dCBvZiBbbWVtYmVyXS4KICBTcGFubmFibGUgZ2V0U3Bhbm5hYmxlKE1lbWJlckVudGl0eSBtZW1iZXIsIGlyLk5vZGUgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBjb25zdHJ1Y3RvciBib2R5IGVudGl0eSBjb3JyZXNwb25kaW5nIHRvIFtjb25zdHJ1Y3Rvcl0uCiAgRnVuY3Rpb25FbnRpdHkgZ2V0Q29uc3RydWN0b3JCb2R5KGlyLkNvbnN0cnVjdG9yIG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgY29uc3RydWN0b3IgYm9keSBlbnRpdHkgY29ycmVzcG9uZGluZyB0byBbZnVuY3Rpb25dLgogIEpHZW5lcmF0b3JCb2R5IGdldEdlbmVyYXRvckJvZHkoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pOwoKICAvLy8gTWFrZSBhIHJlY29yZCB0byBlbnN1cmUgdmFyaWFibGVzIHRoYXQgYXJlIGFyZSBkZWNsYXJlZCBpbiBvbmUgc2NvcGUgYW5kCiAgLy8vIG1vZGlmaWVkIGluIGFub3RoZXIgZ2V0IHRoZWlyIHZhbHVlcyB1cGRhdGVkIGNvcnJlY3RseS4KICBNYXA8TG9jYWwsIEpSZWNvcmRGaWVsZD4gbWFrZVJlY29yZENvbnRhaW5lcigKICAgICAgS2VybmVsU2NvcGVJbmZvIGluZm8sIE1lbWJlckVudGl0eSBtZW1iZXIsIEtlcm5lbFRvTG9jYWxzTWFwIGxvY2Fsc01hcCk7CgogIC8vLyBSZXR1cm5zIGEgcHJvdmlkZXIgZm9yIHN0YXRpYyB0eXBlcyBmb3IgW21lbWJlcl0uCiAgU3RhdGljVHlwZVByb3ZpZGVyIGdldFN0YXRpY1R5cGVQcm92aWRlcihNZW1iZXJFbnRpdHkgbWVtYmVyKTsKfQoKLy8vIEludGVyZmFjZSBmb3IgdHlwZSBpbmZlcmVuY2UgcmVzdWx0cyBmb3Iga2VybmVsIElSIG5vZGVzLgphYnN0cmFjdCBjbGFzcyBLZXJuZWxUb1R5cGVJbmZlcmVuY2VNYXAgewogIC8vLyBSZXR1cm5zIHRoZSBpbmZlcnJlZCByZXR1cm4gdHlwZSBvZiBbZnVuY3Rpb25dLgogIEFic3RyYWN0VmFsdWUgZ2V0UmV0dXJuVHlwZU9mKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKTsKCiAgLy8vIFJldHVybnMgdGhlIGluZmVycmVkIHJlY2VpdmVyIHR5cGUgb2YgdGhlIGR5bmFtaWMgW2ludm9jYXRpb25dLgogIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXJUeXBlT2ZJbnZvY2F0aW9uKAogICAgICBpci5NZXRob2RJbnZvY2F0aW9uIGludm9jYXRpb24sIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbik7CgogIC8vLyBSZXR1cm5zIHRoZSBpbmZlcnJlZCByZWNlaXZlciB0eXBlIG9mIHRoZSBkeW5hbWljIFtyZWFkXS4KICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZU9mR2V0KGlyLlByb3BlcnR5R2V0IHJlYWQpOwoKICAvLy8gUmV0dXJucyB0aGUgaW5mZXJyZWQgcmVjZWl2ZXIgdHlwZSBvZiB0aGUgZGlyZWN0IFtyZWFkXS4KICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZU9mRGlyZWN0R2V0KGlyLkRpcmVjdFByb3BlcnR5R2V0IHJlYWQpOwoKICAvLy8gUmV0dXJucyB0aGUgaW5mZXJyZWQgcmVjZWl2ZXIgdHlwZSBvZiB0aGUgZHluYW1pYyBbd3JpdGVdLgogIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXJUeXBlT2ZTZXQoCiAgICAgIGlyLlByb3BlcnR5U2V0IHdyaXRlLCBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4pOwoKICAvLy8gUmV0dXJucyB0aGUgaW5mZXJyZWQgdHlwZSBvZiBbbGlzdExpdGVyYWxdLgogIEFic3RyYWN0VmFsdWUgdHlwZU9mTGlzdExpdGVyYWwoCiAgICAgIGlyLkxpc3RMaXRlcmFsIGxpc3RMaXRlcmFsLCBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4pOwoKICAvLy8gUmV0dXJucyB0aGUgaW5mZXJyZWQgdHlwZSBvZiBpdGVyYXRvciBpbiBbZm9ySW5TdGF0ZW1lbnRdLgogIEFic3RyYWN0VmFsdWUgdHlwZU9mSXRlcmF0b3IoaXIuRm9ySW5TdGF0ZW1lbnQgZm9ySW5TdGF0ZW1lbnQpOwoKICAvLy8gUmV0dXJucyB0aGUgaW5mZXJyZWQgdHlwZSBvZiBgY3VycmVudGAgaW4gW2ZvckluU3RhdGVtZW50XS4KICBBYnN0cmFjdFZhbHVlIHR5cGVPZkl0ZXJhdG9yQ3VycmVudChpci5Gb3JJblN0YXRlbWVudCBmb3JJblN0YXRlbWVudCk7CgogIC8vLyBSZXR1cm5zIHRoZSBpbmZlcnJlZCB0eXBlIG9mIGBtb3ZlTmV4dGAgaW4gW2ZvckluU3RhdGVtZW50XS4KICBBYnN0cmFjdFZhbHVlIHR5cGVPZkl0ZXJhdG9yTW92ZU5leHQoaXIuRm9ySW5TdGF0ZW1lbnQgZm9ySW5TdGF0ZW1lbnQpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2ZvckluU3RhdGVtZW50XSBpcyBpbmZlcnJlZCB0byBiZSBhIEphdmFTY3JpcHQKICAvLy8gaW5kZXhhYmxlIGl0ZXJhdG9yLgogIGJvb2wgaXNKc0luZGV4YWJsZUl0ZXJhdG9yKGlyLkZvckluU3RhdGVtZW50IGZvckluU3RhdGVtZW50LAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4pOwoKICAvLy8gUmV0dXJucyB0aGUgaW5mZXJyZWQgaW5kZXggdHlwZSBvZiBbZm9ySW5TdGF0ZW1lbnRdLgogIEFic3RyYWN0VmFsdWUgaW5mZXJyZWRJbmRleFR5cGUoaXIuRm9ySW5TdGF0ZW1lbnQgZm9ySW5TdGF0ZW1lbnQpOwoKICAvLy8gUmV0dXJucyB0aGUgaW5mZXJyZWQgdHlwZSBvZiBbbWVtYmVyXS4KICBBYnN0cmFjdFZhbHVlIGdldEluZmVycmVkVHlwZU9mKE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICAvLy8gUmV0dXJucyB0aGUgaW5mZXJyZWQgdHlwZSBvZiB0aGUgW3BhcmFtZXRlcl0uCiAgQWJzdHJhY3RWYWx1ZSBnZXRJbmZlcnJlZFR5cGVPZlBhcmFtZXRlcihMb2NhbCBwYXJhbWV0ZXIpOwoKICAvLy8gUmV0dXJucyB0aGUgaW5mZXJyZWQgcmVzdWx0IHR5cGUgb2YgYSBkeW5hbWljIFtzZWxlY3Rvcl0gYWNjZXNzIG9uIHRoZQogIC8vLyBbcmVjZWl2ZXJdLgogIEFic3RyYWN0VmFsdWUgcmVzdWx0VHlwZU9mU2VsZWN0b3IoU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXIpOwoKICAvLy8gUmV0dXJucyB0aGUgcmV0dXJuZWQgdHlwZSBhbm5vdGF0aW9uIGluIHRoZSBbbmF0aXZlQmVoYXZpb3JdLgogIEFic3RyYWN0VmFsdWUgdHlwZUZyb21OYXRpdmVCZWhhdmlvcigKICAgICAgTmF0aXZlQmVoYXZpb3IgbmF0aXZlQmVoYXZpb3IsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCk7Cn0KCi8vLyBNYXAgZnJvbSBrZXJuZWwgSVIgbm9kZXMgdG8gbG9jYWwgZW50aXRpZXMuCmFic3RyYWN0IGNsYXNzIEtlcm5lbFRvTG9jYWxzTWFwIHsKICAvLy8gVGhlIG1lbWJlciBjdXJyZW50bHkgYmVpbmcgYnVpbHQuCiAgTWVtYmVyRW50aXR5IGdldCBjdXJyZW50TWVtYmVyOwoKICAvLy8gUmV0dXJucyB0aGUgW0xvY2FsXSBmb3IgW25vZGVdLgogIExvY2FsIGdldExvY2FsVmFyaWFibGUoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKTsKCiAgTG9jYWwgZ2V0TG9jYWxUeXBlVmFyaWFibGUoCiAgICAgIGlyLlR5cGVQYXJhbWV0ZXJUeXBlIG5vZGUsIEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApOwoKICAvLy8gUmV0dXJucyB0aGUgW2lyLkZ1bmN0aW9uTm9kZV0gdGhhdCBkZWNsYXJlZCBbcGFyYW1ldGVyXS4KICBpci5GdW5jdGlvbk5vZGUgZ2V0RnVuY3Rpb25Ob2RlRm9yUGFyYW1ldGVyKExvY2FsIHBhcmFtZXRlcik7CgogIC8vLyBSZXR1cm5zIHRoZSBbRGFydFR5cGVdIG9mIFtsb2NhbF0uCiAgRGFydFR5cGUgZ2V0TG9jYWxUeXBlKEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIExvY2FsIGxvY2FsKTsKCiAgLy8vIFJldHVybnMgdGhlIFtKdW1wVGFyZ2V0XSBmb3IgdGhlIGJyZWFrIHN0YXRlbWVudCBbbm9kZV0uCiAgSnVtcFRhcmdldCBnZXRKdW1wVGFyZ2V0Rm9yQnJlYWsoaXIuQnJlYWtTdGF0ZW1lbnQgbm9kZSk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbbm9kZV0gc2hvdWxkIGdlbmVyYXRlIGEgYGNvbnRpbnVlYCB0byBpdHMgW0p1bXBUYXJnZXRdLgogIGJvb2wgZ2VuZXJhdGVDb250aW51ZUZvckJyZWFrKGlyLkJyZWFrU3RhdGVtZW50IG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgW0p1bXBUYXJnZXRdIGRlZmluZWQgYnkgdGhlIGxhYmVsbGVkIHN0YXRlbWVudCBbbm9kZV0gb3IKICAvLy8gYG51bGxgIGlmIFtub2RlXSBpcyBub3QgYSBqdW1wIHRhcmdldC4KICBKdW1wVGFyZ2V0IGdldEp1bXBUYXJnZXRGb3JMYWJlbChpci5MYWJlbGVkU3RhdGVtZW50IG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgW0p1bXBUYXJnZXRdIGRlZmluZWQgYnkgdGhlIHN3aXRjaCBzdGF0ZW1lbnQgW25vZGVdIG9yIGBudWxsYAogIC8vLyBpZiBbbm9kZV0gaXMgbm90IGEganVtcCB0YXJnZXQuCiAgSnVtcFRhcmdldCBnZXRKdW1wVGFyZ2V0Rm9yU3dpdGNoKGlyLlN3aXRjaFN0YXRlbWVudCBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtKdW1wVGFyZ2V0XSBmb3IgdGhlIGNvbnRpbnVlIHN3aXRjaCBzdGF0ZW1lbnQgW25vZGVdLgogIEp1bXBUYXJnZXQgZ2V0SnVtcFRhcmdldEZvckNvbnRpbnVlU3dpdGNoKGlyLkNvbnRpbnVlU3dpdGNoU3RhdGVtZW50IG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgW0p1bXBUYXJnZXRdIGRlZmluZWQgYnkgdGhlIHN3aXRjaCBjYXNlIFtub2RlXSBvciBgbnVsbGAKICAvLy8gaWYgW25vZGVdIGlzIG5vdCBhIGp1bXAgdGFyZ2V0LgogIEp1bXBUYXJnZXQgZ2V0SnVtcFRhcmdldEZvclN3aXRjaENhc2UoaXIuU3dpdGNoQ2FzZSBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtKdW1wVGFyZ2V0XSBkZWZpbmVkIHRoZSBkbyBzdGF0ZW1lbnQgW25vZGVdIG9yIGBudWxsYAogIC8vLyBpZiBbbm9kZV0gaXMgbm90IGEganVtcCB0YXJnZXQuCiAgSnVtcFRhcmdldCBnZXRKdW1wVGFyZ2V0Rm9yRG8oaXIuRG9TdGF0ZW1lbnQgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbSnVtcFRhcmdldF0gZGVmaW5lZCBieSB0aGUgZm9yIHN0YXRlbWVudCBbbm9kZV0gb3IgYG51bGxgCiAgLy8vIGlmIFtub2RlXSBpcyBub3QgYSBqdW1wIHRhcmdldC4KICBKdW1wVGFyZ2V0IGdldEp1bXBUYXJnZXRGb3JGb3IoaXIuRm9yU3RhdGVtZW50IG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgW0p1bXBUYXJnZXRdIGRlZmluZWQgYnkgdGhlIGZvci1pbiBzdGF0ZW1lbnQgW25vZGVdIG9yIGBudWxsYAogIC8vLyBpZiBbbm9kZV0gaXMgbm90IGEganVtcCB0YXJnZXQuCiAgSnVtcFRhcmdldCBnZXRKdW1wVGFyZ2V0Rm9yRm9ySW4oaXIuRm9ySW5TdGF0ZW1lbnQgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbSnVtcFRhcmdldF0gZGVmaW5lZCBieSB0aGUgd2hpbGUgc3RhdGVtZW50IFtub2RlXSBvciBgbnVsbGAKICAvLy8gaWYgW25vZGVdIGlzIG5vdCBhIGp1bXAgdGFyZ2V0LgogIEp1bXBUYXJnZXQgZ2V0SnVtcFRhcmdldEZvcldoaWxlKGlyLldoaWxlU3RhdGVtZW50IG5vZGUpOwoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtLZXJuZWxUb0xvY2Fsc01hcF0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspOwp9CgovLy8gUmV0dXJucyB0aGUgW2lyLkZ1bmN0aW9uTm9kZV0gdGhhdCBkZWZpbmVzIFttZW1iZXJdIG9yIGBudWxsYCBpZiBbbWVtYmVyXQovLy8gaXMgbm90IGEgY29uc3RydWN0b3IsIG1ldGhvZCBvciBsb2NhbCBmdW5jdGlvbi4KaXIuRnVuY3Rpb25Ob2RlIGdldEZ1bmN0aW9uTm9kZSgKICAgIEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICBNZW1iZXJEZWZpbml0aW9uIGRlZmluaXRpb24gPSBlbGVtZW50TWFwLmdldE1lbWJlckRlZmluaXRpb24obWVtYmVyKTsKICBzd2l0Y2ggKGRlZmluaXRpb24ua2luZCkgewogICAgY2FzZSBNZW1iZXJLaW5kLnJlZ3VsYXI6CiAgICAgIGlyLk1lbWJlciBub2RlID0gZGVmaW5pdGlvbi5ub2RlOwogICAgICByZXR1cm4gbm9kZS5mdW5jdGlvbjsKICAgIGNhc2UgTWVtYmVyS2luZC5jb25zdHJ1Y3RvcjoKICAgIGNhc2UgTWVtYmVyS2luZC5jb25zdHJ1Y3RvckJvZHk6CiAgICAgIGlyLk1lbWJlciBub2RlID0gZGVmaW5pdGlvbi5ub2RlOwogICAgICByZXR1cm4gbm9kZS5mdW5jdGlvbjsKICAgIGNhc2UgTWVtYmVyS2luZC5jbG9zdXJlQ2FsbDoKICAgICAgaXIuTG9jYWxGdW5jdGlvbiBub2RlID0gZGVmaW5pdGlvbi5ub2RlOwogICAgICByZXR1cm4gbm9kZS5mdW5jdGlvbjsKICAgIGRlZmF1bHQ6CiAgfQogIHJldHVybiBudWxsOwp9CgovLyBUT0RPKGpvaG5uaXdpbnRoZXIsZWZvcnR1bmEpOiBBZGQgbW9yZSB3aGVuIG5lZWRlZC4KLy8gVE9ETyhqb2hubml3aW50aGVyKTogU2hvdWxkIHdlIHNwbGl0IHJlZ3VsYXIgaW50byBtZXRob2QsIGZpZWxkLCBldGMuPwplbnVtIE1lbWJlcktpbmQgewogIC8vLyBBIHJlZ3VsYXIgbWVtYmVyIGRlZmluZWQgYnkgYW4gW2lyLk5vZGVdLgogIHJlZ3VsYXIsCgogIC8vLyBBIGNvbnN0cnVjdG9yIHdob3NlIGluaXRpYWxpemVyIGlzIGRlZmluZWQgYnkgYW4gW2lyLkNvbnN0cnVjdG9yXSBub2RlLgogIGNvbnN0cnVjdG9yLAoKICAvLy8gQSBjb25zdHJ1Y3RvciB3aG9zZSBib2R5IGlzIGRlZmluZWQgYnkgYW4gW2lyLkNvbnN0cnVjdG9yXSBub2RlLgogIGNvbnN0cnVjdG9yQm9keSwKCiAgLy8vIEEgY2xvc3VyZSBjbGFzcyBgY2FsbGAgbWV0aG9kIHdob3NlIGJvZHkgaXMgZGVmaW5lZCBieSBhbgogIC8vLyBbaXIuTG9jYWxGdW5jdGlvbl0uCiAgY2xvc3VyZUNhbGwsCgogIC8vLyBBIGZpZWxkIGNvcnJlc3BvbmRpbmcgdG8gYSBjYXB0dXJlZCB2YXJpYWJsZSBpbiB0aGUgY2xvc3VyZS4gSXQgZG9lcyBub3QKICAvLy8gaGF2ZSBhIGNvcnJlc3BvbmRpbmcgaXIuTm9kZS4KICBjbG9zdXJlRmllbGQsCgogIC8vLyBBIG1ldGhvZCB0aGF0IGRlc2NyaWJlcyB0aGUgdHlwZSBvZiBhIGZ1bmN0aW9uIChpbiB0aGlzIGNhc2UgdGhlIHR5cGUgb2YKICAvLy8gdGhlIGNsb3N1cmUgY2xhc3MuIEl0IGRvZXMgbm90IGhhdmUgYSBjb3JyZXNwb25kaW5nIGlyLk5vZGUgb3IgYSBtZXRob2QKICAvLy8gYm9keS4KICBzaWduYXR1cmUsCgogIC8vLyBBIHNlcGFyYXRlZCBib2R5IG9mIGEgZ2VuZXJhdG9yIChzeW5jKi9hc3luYy9hc3luYyopIGZ1bmN0aW9uLgogIGdlbmVyYXRvckJvZHksCn0KCi8vLyBEZWZpbml0aW9uIGluZm9ybWF0aW9uIGZvciBhIFtNZW1iZXJFbnRpdHldLgphYnN0cmFjdCBjbGFzcyBNZW1iZXJEZWZpbml0aW9uIHsKICAvLy8gVGhlIGtpbmQgb2YgdGhlIGRlZmluZWQgbWVtYmVyLiBUaGlzIGRldGVybWluZXMgdGhlIHNlbWFudGljcyBvZiBbbm9kZV0uCiAgTWVtYmVyS2luZCBnZXQga2luZDsKCiAgLy8vIFRoZSBkZWZpbmluZyBbaXIuTm9kZV0gZm9yIHRoaXMgbWVtYmVyLCBpZiBzdXBwb3J0ZWQgYnkgaXRzIFtraW5kXS4KICAvLy8KICAvLy8gRm9yIGEgcmVndWxhciBjbGFzcyB0aGlzIGlzIHRoZSBbaXIuQ2xhc3NdIG5vZGUuIEZvciBjbG9zdXJlIGNsYXNzZXMgdGhpcwogIC8vLyBtaWdodCBiZSBhbiBbaXIuRnVuY3Rpb25FeHByZXNzaW9uXSBub2RlIGlmIG5lZWRlZC4KICBpci5Ob2RlIGdldCBub2RlOwoKICAvLy8gVGhlIGNhbm9uaWNhbCBsb2NhdGlvbiBvZiBbbWVtYmVyXS4gVGhpcyBpcyB1c2VkIGZvciBzb3J0aW5nIHRoZSBtZW1iZXJzCiAgLy8vIGluIHRoZSBlbWl0dGVkIGNvZGUuCiAgU291cmNlU3BhbiBnZXQgbG9jYXRpb247CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbTWVtYmVyRGVmaW5pdGlvbl0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBNZW1iZXJEZWZpbml0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgTWVtYmVyS2luZCBraW5kID0gc291cmNlLnJlYWRFbnVtKE1lbWJlcktpbmQudmFsdWVzKTsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIE1lbWJlcktpbmQucmVndWxhcjoKICAgICAgICByZXR1cm4gbmV3IFJlZ3VsYXJNZW1iZXJEZWZpbml0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBjYXNlIE1lbWJlcktpbmQuY29uc3RydWN0b3I6CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jb25zdHJ1Y3RvckJvZHk6CiAgICAgIGNhc2UgTWVtYmVyS2luZC5zaWduYXR1cmU6CiAgICAgIGNhc2UgTWVtYmVyS2luZC5nZW5lcmF0b3JCb2R5OgogICAgICAgIHJldHVybiBuZXcgU3BlY2lhbE1lbWJlckRlZmluaXRpb24ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwga2luZCk7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jbG9zdXJlQ2FsbDoKICAgICAgY2FzZSBNZW1iZXJLaW5kLmNsb3N1cmVGaWVsZDoKICAgICAgICByZXR1cm4gbmV3IENsb3N1cmVNZW1iZXJEZWZpbml0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIGtpbmQpOwogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlVuZXhwZWN0ZWQgTWVtYmVyS2luZCAka2luZCIpOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbTWVtYmVyRGVmaW5pdGlvbl0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspOwp9CgplbnVtIENsYXNzS2luZCB7CiAgcmVndWxhciwKICBjbG9zdXJlLAogIC8vIFRPRE8oZWZvcnR1bmEsIGpvaG5uaXdpbnRoZXIpOiBSZWNvcmQgaXMgbm90IGEgY2xhc3MsIGJ1dCBpcwogIC8vIG1hc3F1ZXJhZGluZyBhcyBvbmUgY3VycmVudGx5IGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBvbGQgZWxlbWVudCBtb2RlbC4KICByZWNvcmQsCn0KCi8vLyBBIG1lbWJlciBkaXJlY3RseSBkZWZpbmVkIGJ5IGl0cyBbaXIuTWVtYmVyXSBub2RlLgpjbGFzcyBSZWd1bGFyTWVtYmVyRGVmaW5pdGlvbiBpbXBsZW1lbnRzIE1lbWJlckRlZmluaXRpb24gewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbUmVndWxhck1lbWJlckRlZmluaXRpb25dIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAncmVndWxhci1tZW1iZXItZGVmaW5pdGlvbic7CgogIEBvdmVycmlkZQogIGZpbmFsIGlyLk1lbWJlciBub2RlOwoKICBSZWd1bGFyTWVtYmVyRGVmaW5pdGlvbih0aGlzLm5vZGUpOwoKICBmYWN0b3J5IFJlZ3VsYXJNZW1iZXJEZWZpbml0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5NZW1iZXIgbm9kZSA9IHNvdXJjZS5yZWFkTWVtYmVyTm9kZSgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBSZWd1bGFyTWVtYmVyRGVmaW5pdGlvbihub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKE1lbWJlcktpbmQucmVndWxhcik7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTWVtYmVyTm9kZShub2RlKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VTcGFuIGdldCBsb2NhdGlvbiA9PiBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShub2RlKTsKCiAgQG92ZXJyaWRlCiAgTWVtYmVyS2luZCBnZXQga2luZCA9PiBNZW1iZXJLaW5kLnJlZ3VsYXI7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdSZWd1bGFyTWVtYmVyRGVmaW5pdGlvbihraW5kOiRraW5kLCcKICAgICAgJ25vZGU6JG5vZGUsbG9jYXRpb246JGxvY2F0aW9uKSc7Cn0KCi8vLyBUaGUgZGVmaW5pdGlvbiBvZiBhIHNwZWNpYWwga2luZCBvZiBtZW1iZXIKY2xhc3MgU3BlY2lhbE1lbWJlckRlZmluaXRpb24gaW1wbGVtZW50cyBNZW1iZXJEZWZpbml0aW9uIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW1NwZWNpYWxNZW1iZXJEZWZpbml0aW9uXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ3NwZWNpYWwtbWVtYmVyLWRlZmluaXRpb24nOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBpci5UcmVlTm9kZSBub2RlOwogIEBvdmVycmlkZQogIGZpbmFsIE1lbWJlcktpbmQga2luZDsKCiAgU3BlY2lhbE1lbWJlckRlZmluaXRpb24odGhpcy5ub2RlLCB0aGlzLmtpbmQpOwoKICBmYWN0b3J5IFNwZWNpYWxNZW1iZXJEZWZpbml0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIE1lbWJlcktpbmQga2luZCkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5UcmVlTm9kZSBub2RlID0gc291cmNlLnJlYWRUcmVlTm9kZSgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBTcGVjaWFsTWVtYmVyRGVmaW5pdGlvbihub2RlLCBraW5kKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKGtpbmQpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZVRyZWVOb2RlKG5vZGUpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZVNwYW4gZ2V0IGxvY2F0aW9uID0+IGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnU3BlY2lhbE1lbWJlckRlZmluaXRpb24oa2luZDoka2luZCwnCiAgICAgICdub2RlOiRub2RlLGxvY2F0aW9uOiRsb2NhdGlvbiknOwp9CgovLy8gRGVmaW5pdGlvbiBpbmZvcm1hdGlvbiBmb3IgYSBbQ2xhc3NFbnRpdHldLgphYnN0cmFjdCBjbGFzcyBDbGFzc0RlZmluaXRpb24gewogIC8vLyBUaGUga2luZCBvZiB0aGUgZGVmaW5lZCBjbGFzcy4gVGhpcyBkZXRlcm1pbmVzIHRoZSBzZW1hbnRpY3Mgb2YgW25vZGVdLgogIENsYXNzS2luZCBnZXQga2luZDsKCiAgLy8vIFRoZSBkZWZpbmluZyBbaXIuTm9kZV0gZm9yIHRoaXMgY2xhc3MsIGlmIHN1cHBvcnRlZCBieSBpdHMgW2tpbmRdLgogIGlyLk5vZGUgZ2V0IG5vZGU7CgogIC8vLyBUaGUgY2Fub25pY2FsIGxvY2F0aW9uIG9mIFtjbHNdLiBUaGlzIGlzIHVzZWQgZm9yIHNvcnRpbmcgdGhlIGNsYXNzZXMKICAvLy8gaW4gdGhlIGVtaXR0ZWQgY29kZS4KICBTb3VyY2VTcGFuIGdldCBsb2NhdGlvbjsKCiAgLy8vIERlc2VyaWFsaXplcyBhIFtDbGFzc0RlZmluaXRpb25dIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgQ2xhc3NEZWZpbml0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgQ2xhc3NLaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oQ2xhc3NLaW5kLnZhbHVlcyk7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBDbGFzc0tpbmQucmVndWxhcjoKICAgICAgICByZXR1cm4gbmV3IFJlZ3VsYXJDbGFzc0RlZmluaXRpb24ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgQ2xhc3NLaW5kLmNsb3N1cmU6CiAgICAgICAgcmV0dXJuIG5ldyBDbG9zdXJlQ2xhc3NEZWZpbml0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBjYXNlIENsYXNzS2luZC5yZWNvcmQ6CiAgICAgICAgcmV0dXJuIG5ldyBSZWNvcmRDb250YWluZXJEZWZpbml0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlVuZXhwZWN0ZWQgQ2xhc3NLaW5kICRraW5kIik7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtDbGFzc0RlZmluaXRpb25dIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKTsKfQoKLy8vIEEgY2xhc3MgZGlyZWN0bHkgZGVmaW5lZCBieSBpdHMgW2lyLkNsYXNzXSBub2RlLgpjbGFzcyBSZWd1bGFyQ2xhc3NEZWZpbml0aW9uIGltcGxlbWVudHMgQ2xhc3NEZWZpbml0aW9uIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW1JlZ3VsYXJDbGFzc0RlZmluaXRpb25dIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAncmVndWxhci1jbGFzcy1kZWZpbml0aW9uJzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgaXIuQ2xhc3Mgbm9kZTsKCiAgUmVndWxhckNsYXNzRGVmaW5pdGlvbih0aGlzLm5vZGUpOwoKICBmYWN0b3J5IFJlZ3VsYXJDbGFzc0RlZmluaXRpb24ucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLkNsYXNzIG5vZGUgPSBzb3VyY2UucmVhZENsYXNzTm9kZSgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBSZWd1bGFyQ2xhc3NEZWZpbml0aW9uKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oa2luZCk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlQ2xhc3NOb2RlKG5vZGUpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZVNwYW4gZ2V0IGxvY2F0aW9uID0+IGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBDbGFzc0tpbmQgZ2V0IGtpbmQgPT4gQ2xhc3NLaW5kLnJlZ3VsYXI7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdSZWd1bGFyQ2xhc3NEZWZpbml0aW9uKGtpbmQ6JGtpbmQsJwogICAgICAnbm9kZTokbm9kZSxsb2NhdGlvbjokbG9jYXRpb24pJzsKfQoKLy8vIFJldHVybnMgdGhlIGluaXRpYWxpemVyIGZvciBbZmllbGRdLgovLy8KLy8vIElmIFtmaWVsZF0gaXMgYW4gaW5zdGFuY2UgZmllbGQgd2l0aCBhIG51bGwgbGl0ZXJhbCBpbml0aWFsaXplciBgbnVsbGAgaXMKLy8vIHJldHVybmVkLCBvdGhlcndpc2UgdGhlIGluaXRpYWxpemVyIG9mIHRoZSBbaXIuRmllbGRdIGlzIHJldHVybmVkLgppci5Ob2RlIGdldEZpZWxkSW5pdGlhbGl6ZXIoSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgRmllbGRFbnRpdHkgZmllbGQpIHsKICBNZW1iZXJEZWZpbml0aW9uIGRlZmluaXRpb24gPSBlbGVtZW50TWFwLmdldE1lbWJlckRlZmluaXRpb24oZmllbGQpOwogIGlyLkZpZWxkIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgaWYgKG5vZGUuaXNJbnN0YW5jZU1lbWJlciAmJgogICAgICAhbm9kZS5pc0ZpbmFsICYmCiAgICAgIG5vZGUuaW5pdGlhbGl6ZXIgaXMgaXIuTnVsbExpdGVyYWwpIHsKICAgIHJldHVybiBudWxsOwogIH0KICByZXR1cm4gbm9kZS5pbml0aWFsaXplcjsKfQoKdm9pZCBmb3JFYWNoT3JkZXJlZFBhcmFtZXRlckJ5RnVuY3Rpb25Ob2RlKAogICAgaXIuRnVuY3Rpb25Ob2RlIG5vZGUsCiAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlLAogICAgdm9pZCBmKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyLCB7Ym9vbCBpc09wdGlvbmFsLCBib29sIGlzRWxpZGVkfSksCiAgICB7Ym9vbCB1c2VOYXRpdmVPcmRlcmluZzogZmFsc2V9KSB7CiAgZm9yIChpbnQgcG9zaXRpb24gPSAwOwogICAgICBwb3NpdGlvbiA8IG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoOwogICAgICBwb3NpdGlvbisrKSB7CiAgICBpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlID0gbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVyc1twb3NpdGlvbl07CiAgICBmKHZhcmlhYmxlLAogICAgICAgIGlzT3B0aW9uYWw6IHBvc2l0aW9uID49IHBhcmFtZXRlclN0cnVjdHVyZS5yZXF1aXJlZFBhcmFtZXRlcnMsCiAgICAgICAgaXNFbGlkZWQ6IHBvc2l0aW9uID49IHBhcmFtZXRlclN0cnVjdHVyZS5wb3NpdGlvbmFsUGFyYW1ldGVycyk7CiAgfQoKICBpZiAobm9kZS5uYW1lZFBhcmFtZXRlcnMuaXNFbXB0eSkgewogICAgcmV0dXJuOwogIH0KCiAgTGlzdDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBuYW1lZFBhcmFtZXRlcnMgPSBub2RlLm5hbWVkUGFyYW1ldGVycy50b0xpc3QoKTsKICBpZiAodXNlTmF0aXZlT3JkZXJpbmcpIHsKICAgIG5hbWVkUGFyYW1ldGVycy5zb3J0KG5hdGl2ZU9yZGVyaW5nKTsKICB9IGVsc2UgewogICAgbmFtZWRQYXJhbWV0ZXJzLnNvcnQobmFtZWRPcmRlcmluZyk7CiAgfQogIGZvciAoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSBpbiBuYW1lZFBhcmFtZXRlcnMpIHsKICAgIGYodmFyaWFibGUsCiAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSwKICAgICAgICBpc0VsaWRlZDogIXBhcmFtZXRlclN0cnVjdHVyZS5uYW1lZFBhcmFtZXRlcnMuY29udGFpbnModmFyaWFibGUubmFtZSkpOwogIH0KfQoKdm9pZCBmb3JFYWNoT3JkZXJlZFBhcmFtZXRlcihKc1RvRWxlbWVudE1hcCBlbGVtZW50TWFwLCBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwKICAgIHZvaWQgZihpci5WYXJpYWJsZURlY2xhcmF0aW9uIHBhcmFtZXRlciwge2Jvb2wgaXNFbGlkZWR9KSkgewogIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUgPSBmdW5jdGlvbi5wYXJhbWV0ZXJTdHJ1Y3R1cmU7CgogIHZvaWQgaGFuZGxlUGFyYW1ldGVyKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyLAogICAgICB7Ym9vbCBpc09wdGlvbmFsLCBib29sIGlzRWxpZGVkfSkgewogICAgZihwYXJhbWV0ZXIsIGlzRWxpZGVkOiBpc0VsaWRlZCk7CiAgfQoKICBNZW1iZXJEZWZpbml0aW9uIGRlZmluaXRpb24gPSBlbGVtZW50TWFwLmdldE1lbWJlckRlZmluaXRpb24oZnVuY3Rpb24pOwogIHN3aXRjaCAoZGVmaW5pdGlvbi5raW5kKSB7CiAgICBjYXNlIE1lbWJlcktpbmQucmVndWxhcjoKICAgICAgaXIuTm9kZSBub2RlID0gZGVmaW5pdGlvbi5ub2RlOwogICAgICBpZiAobm9kZSBpcyBpci5Qcm9jZWR1cmUpIHsKICAgICAgICBmb3JFYWNoT3JkZXJlZFBhcmFtZXRlckJ5RnVuY3Rpb25Ob2RlKAogICAgICAgICAgICBub2RlLmZ1bmN0aW9uLCBwYXJhbWV0ZXJTdHJ1Y3R1cmUsIGhhbmRsZVBhcmFtZXRlcik7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGJyZWFrOwogICAgY2FzZSBNZW1iZXJLaW5kLmNvbnN0cnVjdG9yOgogICAgY2FzZSBNZW1iZXJLaW5kLmNvbnN0cnVjdG9yQm9keToKICAgICAgaXIuTm9kZSBub2RlID0gZGVmaW5pdGlvbi5ub2RlOwogICAgICBpZiAobm9kZSBpcyBpci5Qcm9jZWR1cmUpIHsKICAgICAgICBmb3JFYWNoT3JkZXJlZFBhcmFtZXRlckJ5RnVuY3Rpb25Ob2RlKAogICAgICAgICAgICBub2RlLmZ1bmN0aW9uLCBwYXJhbWV0ZXJTdHJ1Y3R1cmUsIGhhbmRsZVBhcmFtZXRlcik7CiAgICAgICAgcmV0dXJuOwogICAgICB9IGVsc2UgaWYgKG5vZGUgaXMgaXIuQ29uc3RydWN0b3IpIHsKICAgICAgICBmb3JFYWNoT3JkZXJlZFBhcmFtZXRlckJ5RnVuY3Rpb25Ob2RlKAogICAgICAgICAgICBub2RlLmZ1bmN0aW9uLCBwYXJhbWV0ZXJTdHJ1Y3R1cmUsIGhhbmRsZVBhcmFtZXRlcik7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGJyZWFrOwogICAgY2FzZSBNZW1iZXJLaW5kLmNsb3N1cmVDYWxsOgogICAgICBpci5Mb2NhbEZ1bmN0aW9uIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgIGZvckVhY2hPcmRlcmVkUGFyYW1ldGVyQnlGdW5jdGlvbk5vZGUoCiAgICAgICAgICBub2RlLmZ1bmN0aW9uLCBwYXJhbWV0ZXJTdHJ1Y3R1cmUsIGhhbmRsZVBhcmFtZXRlcik7CiAgICAgIHJldHVybjsKICAgIGRlZmF1bHQ6CiAgfQogIGZhaWxlZEF0KGZ1bmN0aW9uLCAiVW5leHBlY3RlZCBmdW5jdGlvbiBkZWZpbml0aW9uICRkZWZpbml0aW9uLiIpOwp9CoJUAE5OPAEoARkjTCQhISExHSoaNTgiLiMqJBgXAUxCIDYmASgXATYqATs5AT5DATA2AUsXJTYBRDoBThgsAUUqAUovAVEaNAFDJwFDJwFRLwFNKEIdAT40OAEyHgFMRwFKEE4BPSU7IQFCUDI7PwE5NQE0QQFBLgFAOAE3PQFNNwFQGDgBSSc/HAFHLQFLGz0BSjoBRzwBTz4wTwE4QQIBPio2OgFGKlABQDgBP0QBQSNGATIjTAFBQgFCSQFDSgFIGj8wATtFAS04ATQ9AU0SUQFEKEACATAjKCIBJjcBHj0BP0ABKUEBPzwBUTkBSy0+AVAmPgFJTgFLJj0BSSY2AU0mOAFQJjwBTyY8ATUnAgFONCE2SB0dKBwhJSgcIS8cDQQPAgE3ShIwCwFODwFHEwFAGg8BTyQQAU9ODA0BRRECATEiTxcBSgZQOhQBTxsbAT5DOhQfRyMnISVNIyRNBj8EATQnAgERCwtCTwoCATc8UR05AQwYASYBShcuFS4EAQwoKBUgEwQBDEIBDC0BDD0oAgEvPFEdOQEMGgwZATEBNiwXLhU0BAEMKBoVHhMEAQxCAQw9KAIBMCFOFgFJFAFMGxsBPUI4FB5GHkYdSQY+BAEzJwIBNTpQHTgBDBcBJQFJFywVLQQBDCgaFR8TBAEMQgEMKwEMPCgCASkETkdMRyMfFywRBBsCASwaK1AnGTMUSxBHSAQBJgwEAVAbKgspBD0QGlAEAgFRQUcBOSomBAFKHR0mIi9BEAgNISUmIi9BECsvQRAIDSEvLT8ODQRFAgEucGFja2FnZTpjb21waWxlci9zcmMvanNfbW9kZWwvZWxlbWVudF9tYXAuZGFydDtzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pbmZlcnJlci9pbmZlcnJlcl9lbmdpbmUuZGFydMAA2lcvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uLy4uL2NvbXBpbGVyX25ldy5kYXJ0JzsKaW1wb3J0ICcuLi9jbG9zdXJlLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vY29tcGlsZXIuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9pbmZlcnJlZF9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbm9fc3VjaF9tZXRob2RfcmVnaXN0cnkuZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvZWxlbWVudF9tYXAuZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvanNfd29ybGQuZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvbG9jYWxzLmRhcnQnOwppbXBvcnQgJy4uL25hdGl2ZS9iZWhhdmlvci5kYXJ0JzsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zaWRlX2VmZmVjdHMuZGFydCc7CmltcG9ydCAnLi4vd29ybGQuZGFydCc7CmltcG9ydCAnYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJ2J1aWxkZXJfa2VybmVsLmRhcnQnOwppbXBvcnQgJ2Nsb3N1cmVfdHJhY2VyLmRhcnQnOwppbXBvcnQgJ2RlYnVnLmRhcnQnIGFzIGRlYnVnOwppbXBvcnQgJ2xvY2Fsc19oYW5kbGVyLmRhcnQnOwppbXBvcnQgJ2xpc3RfdHJhY2VyLmRhcnQnOwppbXBvcnQgJ21hcF90cmFjZXIuZGFydCc7CmltcG9ydCAnc2V0X3RyYWNlci5kYXJ0JzsKaW1wb3J0ICd0eXBlX2dyYXBoX2R1bXAuZGFydCc7CmltcG9ydCAndHlwZV9ncmFwaF9pbmZlcnJlci5kYXJ0JzsKaW1wb3J0ICd0eXBlX2dyYXBoX25vZGVzLmRhcnQnOwppbXBvcnQgJ3R5cGVfc3lzdGVtLmRhcnQnOwppbXBvcnQgJ3R5cGVzLmRhcnQnOwoKLy8vIEFuIGluZmVyZW5jaW5nIGVuZ2luZSB0aGF0IGNvbXB1dGVzIGEgY2FsbCBncmFwaCBvZiBbVHlwZUluZm9ybWF0aW9uXSBub2RlcwovLy8gYnkgdmlzaXRpbmcgdGhlIEFTVCBvZiB0aGUgYXBwbGljYXRpb24sIGFuZCB0aGVuIGRvZXMgdGhlIGluZmVyZW5jaW5nIG9uIHRoZQovLy8gZ3JhcGguCmFic3RyYWN0IGNsYXNzIEluZmVycmVyRW5naW5lIHsKICAvLy8gQSBzZXQgb2Ygc2VsZWN0b3IgbmFtZXMgdGhhdCBbTGlzdF0gaW1wbGVtZW50cywgdGhhdCB3ZSBrbm93IHJldHVybiB0aGVpcgogIC8vLyBlbGVtZW50IHR5cGUuCiAgZmluYWwgU2V0PFNlbGVjdG9yPiByZXR1cm5zTGlzdEVsZW1lbnRUeXBlU2V0ID0KICAgICAgbmV3IFNldDxTZWxlY3Rvcj4uZnJvbSg8U2VsZWN0b3I+WwogICAgbmV3IFNlbGVjdG9yLmdldHRlcihjb25zdCBQdWJsaWNOYW1lKCdmaXJzdCcpKSwKICAgIG5ldyBTZWxlY3Rvci5nZXR0ZXIoY29uc3QgUHVibGljTmFtZSgnbGFzdCcpKSwKICAgIG5ldyBTZWxlY3Rvci5nZXR0ZXIoY29uc3QgUHVibGljTmFtZSgnc2luZ2xlJykpLAogICAgbmV3IFNlbGVjdG9yLmNhbGwoY29uc3QgUHVibGljTmFtZSgnc2luZ2xlV2hlcmUnKSwgQ2FsbFN0cnVjdHVyZS5PTkVfQVJHKSwKICAgIG5ldyBTZWxlY3Rvci5jYWxsKGNvbnN0IFB1YmxpY05hbWUoJ2VsZW1lbnRBdCcpLCBDYWxsU3RydWN0dXJlLk9ORV9BUkcpLAogICAgbmV3IFNlbGVjdG9yLmluZGV4KCksCiAgICBuZXcgU2VsZWN0b3IuY2FsbChjb25zdCBQdWJsaWNOYW1lKCdyZW1vdmVBdCcpLCBDYWxsU3RydWN0dXJlLk9ORV9BUkcpLAogICAgbmV3IFNlbGVjdG9yLmNhbGwoY29uc3QgUHVibGljTmFtZSgncmVtb3ZlTGFzdCcpLCBDYWxsU3RydWN0dXJlLk5PX0FSR1MpCiAgXSk7CgogIENvbXBpbGVyT3B0aW9ucyBnZXQgb3B0aW9uczsKCiAgLy8vIFRoZSBbSkNsb3NlZFdvcmxkXSBvbiB3aGljaCBpbmZlcmVuY2UgcmVhc29uaW5nIGlzIGJhc2VkLgogIEpDbG9zZWRXb3JsZCBnZXQgY2xvc2VkV29ybGQ7CiAgRGlhZ25vc3RpY1JlcG9ydGVyIGdldCByZXBvcnRlcjsKICBBYnN0cmFjdFZhbHVlRG9tYWluIGdldCBhYnN0cmFjdFZhbHVlRG9tYWluID0+CiAgICAgIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW47CiAgQ29tbW9uRWxlbWVudHMgZ2V0IGNvbW1vbkVsZW1lbnRzID0+IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBUaGlzIHNob3VsZCBiZSBwYXJ0IG9mIFtDbG9zZWRXb3JsZF0gb3IKICAvLyBbQ2xvc3VyZVdvcmxkUmVmaW5lcl0uCiAgTm9TdWNoTWV0aG9kRGF0YSBnZXQgbm9TdWNoTWV0aG9kRGF0YSA9PiBjbG9zZWRXb3JsZC5ub1N1Y2hNZXRob2REYXRhOwoKICBUeXBlU3lzdGVtIGdldCB0eXBlczsKICBNYXA8aXIuVHJlZU5vZGUsIFR5cGVJbmZvcm1hdGlvbj4gZ2V0IGNvbmNyZXRlVHlwZXM7CiAgSW5mZXJyZWREYXRhQnVpbGRlciBnZXQgaW5mZXJyZWREYXRhQnVpbGRlcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IG1haW5FbGVtZW50OwoKICB2b2lkIHJ1bk92ZXJBbGxFbGVtZW50cygpOwoKICB2b2lkIGFuYWx5emUoTWVtYmVyRW50aXR5IG1lbWJlcik7CiAgdm9pZCBhbmFseXplTGlzdEFuZEVucXVldWUoTGlzdFR5cGVJbmZvcm1hdGlvbiBpbmZvKTsKICB2b2lkIGFuYWx5emVTZXRBbmRFbnF1ZXVlKFNldFR5cGVJbmZvcm1hdGlvbiBpbmZvKTsKICB2b2lkIGFuYWx5emVNYXBBbmRFbnF1ZXVlKE1hcFR5cGVJbmZvcm1hdGlvbiBpbmZvKTsKCiAgLy8vIE5vdGlmaWVzIHRvIHRoZSBpbmZlcnJlciB0aGF0IFthbmFseXplZEVsZW1lbnRdIGNhbiBoYXZlIHJldHVybiB0eXBlCiAgLy8vIFtuZXdUeXBlXS4gW2N1cnJlbnRUeXBlXSBpcyB0aGUgdHlwZSB0aGUgaW5mZXJlbmNlIGhhcyBjdXJyZW50bHkgZm91bmQuCiAgLy8vCiAgLy8vIFJldHVybnMgdGhlIG5ldyB0eXBlIGZvciBbYW5hbHl6ZWRFbGVtZW50XS4KICBUeXBlSW5mb3JtYXRpb24gYWRkUmV0dXJuVHlwZUZvck1ldGhvZCgKICAgICAgRnVuY3Rpb25FbnRpdHkgZWxlbWVudCwgVHlwZUluZm9ybWF0aW9uIHVudXNlZCwgVHlwZUluZm9ybWF0aW9uIG5ld1R5cGUpOwoKICAvLy8gQXBwbGllcyBbZl0gdG8gYWxsIGVsZW1lbnRzIGluIHRoZSB1bml2ZXJzZSB0aGF0IG1hdGNoIFtzZWxlY3Rvcl0gYW5kCiAgLy8vIFttYXNrXS4gSWYgW2ZdIHJldHVybnMgZmFsc2UsIGFib3J0cyB0aGUgaXRlcmF0aW9uLgogIHZvaWQgZm9yRWFjaEVsZW1lbnRNYXRjaGluZygKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgbWFzaywgYm9vbCBmKE1lbWJlckVudGl0eSBlbGVtZW50KSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbVHlwZUluZm9ybWF0aW9uXSBub2RlIGZvciB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBhIHBhcmFtZXRlci4KICAvLy8gSWYgdGhpcyBpcyBxdWVyaWVkIGJlZm9yZSBpdCBpcyBzZXQgYnkgW3NldERlZmF1bHRUeXBlT2ZQYXJhbWV0ZXJdLCBhCiAgLy8vIFtQbGFjZWhvbGRlclR5cGVJbmZvcm1hdGlvbl0gaXMgcmV0dXJuZWQsIHdoaWNoIHdpbGwgbGF0ZXIgYmUgcmVwbGFjZWQKICAvLy8gYnkgdGhlIGFjdHVhbCBub2RlIHdoZW4gW3NldERlZmF1bHRUeXBlT2ZQYXJhbWV0ZXJdIGlzIGNhbGxlZC4KICAvLy8KICAvLy8gSW52YXJpYW50OiBBZnRlciBncmFwaCBjb25zdHJ1Y3Rpb24sIG5vIFtQbGFjZWhvbGRlclR5cGVJbmZvcm1hdGlvbl0gbm9kZXMKICAvLy8gc2hvdWxkIGJlIHByZXNlbnQgYW5kIGEgZGVmYXVsdCB0eXBlIGZvciBlYWNoIHBhcmFtZXRlciBzaG91bGQgZXhpc3QuCiAgVHlwZUluZm9ybWF0aW9uIGdldERlZmF1bHRUeXBlT2ZQYXJhbWV0ZXIoTG9jYWwgcGFyYW1ldGVyKTsKCiAgLy8vIFRoaXMgaGVscGVyIGJyZWFrcyBhYnN0cmFjdGlvbnMgYnV0IGlzIGN1cnJlbnRseSByZXF1aXJlZCB0byB3b3JrIGFyb3VuZAogIC8vLyB0aGUgd3JvbmcgbW9kZWxpbmcgb2YgZGVmYXVsdCB2YWx1ZXMgb2Ygb3B0aW9uYWwgcGFyYW1ldGVycyBvZgogIC8vLyBzeW50aGV0aWMgY29uc3RydWN0b3JzLgogIC8vLwogIC8vLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgb25jZSBkZWZhdWx0IHZhbHVlcyBvZiBzeW50aGV0aWMgcGFyYW1ldGVycwogIC8vLyBhcmUgZml4ZWQuCiAgYm9vbCBoYXNBbHJlYWR5Q29tcHV0ZWRUeXBlT2ZQYXJhbWV0ZXJEZWZhdWx0KExvY2FsIHBhcmFtZXRlcik7CgogIC8vLyBTZXRzIHRoZSB0eXBlIG9mIGEgcGFyYW1ldGVyJ3MgZGVmYXVsdCB2YWx1ZSB0byBbdHlwZV0uIElmIHRoZSBnbG9iYWwKICAvLy8gbWFwcGluZyBpbiBbZGVmYXVsdFR5cGVPZlBhcmFtZXRlcl0gYWxyZWFkeSBjb250YWlucyBhIHR5cGUsIGl0IG11c3QgYmUKICAvLy8gYSBbUGxhY2Vob2xkZXJUeXBlSW5mb3JtYXRpb25dLCB3aGljaCB3aWxsIGJlIHJlcGxhY2VkLiBBbGwgaXRzIHVzZXMgYXJlCiAgLy8vIHVwZGF0ZWQuCiAgdm9pZCBzZXREZWZhdWx0VHlwZU9mUGFyYW1ldGVyKExvY2FsIHBhcmFtZXRlciwgVHlwZUluZm9ybWF0aW9uIHR5cGUsCiAgICAgIHtib29sIGlzSW5zdGFuY2VNZW1iZXJ9KTsKCiAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBnZXRDYWxsZXJzT2ZGb3JUZXN0aW5nKE1lbWJlckVudGl0eSBlbGVtZW50KTsKCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWFrZSB0aGlzIHByaXZhdGUgYWdhaW4uCiAgR2xvYmFsVHlwZUluZmVyZW5jZUVsZW1lbnREYXRhIGRhdGFPZk1lbWJlcihNZW1iZXJFbnRpdHkgZWxlbWVudCk7CgogIGJvb2wgY2hlY2tJZkV4cG9zZXNUaGlzKENvbnN0cnVjdG9yRW50aXR5IGVsZW1lbnQpOwoKICB2b2lkIHJlY29yZEV4cG9zZXNUaGlzKENvbnN0cnVjdG9yRW50aXR5IGVsZW1lbnQsIGJvb2wgZXhwb3Nlc1RoaXMpOwoKICAvLy8gUmVjb3JkcyB0aGF0IHRoZSByZXR1cm4gdHlwZSBbZWxlbWVudF0gaXMgb2YgdHlwZSBbdHlwZV0uCiAgdm9pZCByZWNvcmRSZXR1cm5UeXBlKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQsIFR5cGVJbmZvcm1hdGlvbiB0eXBlKTsKCiAgLy8vIFJlY29yZHMgdGhhdCBbZWxlbWVudF0gaXMgb2YgdHlwZSBbdHlwZV0uCiAgdm9pZCByZWNvcmRUeXBlT2ZGaWVsZChGaWVsZEVudGl0eSBlbGVtZW50LCBUeXBlSW5mb3JtYXRpb24gdHlwZSk7CgogIC8vLyBSZWdpc3RlcnMgYSBjYWxsIHRvIGF3YWl0IHdpdGggYW4gZXhwcmVzc2lvbiBvZiB0eXBlIFthcmd1bWVudFR5cGVdIGFzCiAgLy8vIGFyZ3VtZW50LgogIFR5cGVJbmZvcm1hdGlvbiByZWdpc3RlckF3YWl0KGlyLk5vZGUgbm9kZSwgVHlwZUluZm9ybWF0aW9uIGFyZ3VtZW50KTsKCiAgLy8vIFJlZ2lzdGVycyBhIGNhbGwgdG8geWllbGQgd2l0aCBhbiBleHByZXNzaW9uIG9mIHR5cGUgW2FyZ3VtZW50VHlwZV0gYXMKICAvLy8gYXJndW1lbnQuCiAgVHlwZUluZm9ybWF0aW9uIHJlZ2lzdGVyWWllbGQoaXIuTm9kZSBub2RlLCBUeXBlSW5mb3JtYXRpb24gYXJndW1lbnQpOwoKICAvLy8gUmVnaXN0ZXJzIHRoYXQgW2NhbGxlcl0gY2FsbHMgW2Nsb3N1cmVdIHdpdGggW2FyZ3VtZW50c10uCiAgLy8vCiAgLy8vIFtzaWRlRWZmZWN0c0J1aWxkZXJdIHdpbGwgYmUgdXBkYXRlZCB0byBpbmNvcnBvcmF0ZSB0aGUgcG90ZW50aWFsIGNhbGxlZXMnCiAgLy8vIHNpZGUgZWZmZWN0cy4KICAvLy8KICAvLy8gW2luTG9vcF0gdGVsbHMgd2hldGhlciB0aGUgY2FsbCBoYXBwZW5zIGluIGEgbG9vcC4KICBUeXBlSW5mb3JtYXRpb24gcmVnaXN0ZXJDYWxsZWRDbG9zdXJlKAogICAgICBpci5Ob2RlIG5vZGUsCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIG1hc2ssCiAgICAgIFR5cGVJbmZvcm1hdGlvbiBjbG9zdXJlLAogICAgICBNZW1iZXJFbnRpdHkgY2FsbGVyLAogICAgICBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHMsCiAgICAgIFNpZGVFZmZlY3RzQnVpbGRlciBzaWRlRWZmZWN0c0J1aWxkZXIsCiAgICAgIHtib29sIGluTG9vcH0pOwoKICAvLy8gUmVnaXN0ZXJzIHRoYXQgW2NhbGxlcl0gY2FsbHMgW2NhbGxlZV0gYXQgbG9jYXRpb24gW25vZGVdLCB3aXRoCiAgLy8vIFtzZWxlY3Rvcl0sIGFuZCBbYXJndW1lbnRzXS4gTm90ZSB0aGF0IFtzZWxlY3Rvcl0gaXMgbnVsbCBmb3IgZm9yd2FyZGluZwogIC8vLyBjb25zdHJ1Y3RvcnMuCiAgLy8vCiAgLy8vIFtzaWRlRWZmZWN0c0J1aWxkZXJdIHdpbGwgYmUgdXBkYXRlZCB0byBpbmNvcnBvcmF0ZSBbY2FsbGVlXSdzIHNpZGUKICAvLy8gZWZmZWN0cy4KICAvLy8KICAvLy8gW2luTG9vcF0gdGVsbHMgd2hldGhlciB0aGUgY2FsbCBoYXBwZW5zIGluIGEgbG9vcC4KICBUeXBlSW5mb3JtYXRpb24gcmVnaXN0ZXJDYWxsZWRNZW1iZXIoCiAgICAgIE9iamVjdCBub2RlLAogICAgICBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrLAogICAgICBNZW1iZXJFbnRpdHkgY2FsbGVyLAogICAgICBNZW1iZXJFbnRpdHkgY2FsbGVlLAogICAgICBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHMsCiAgICAgIFNpZGVFZmZlY3RzQnVpbGRlciBzaWRlRWZmZWN0c0J1aWxkZXIsCiAgICAgIGJvb2wgaW5Mb29wKTsKCiAgLy8vIFJlZ2lzdGVycyB0aGF0IFtjYWxsZXJdIGNhbGxzIFtzZWxlY3Rvcl0gd2l0aCBbcmVjZWl2ZXJUeXBlXSBhcyByZWNlaXZlciwKICAvLy8gYW5kIFthcmd1bWVudHNdLgogIC8vLwogIC8vLyBbc2lkZUVmZmVjdHNCdWlsZGVyXSB3aWxsIGJlIHVwZGF0ZWQgdG8gaW5jb3Jwb3JhdGUgdGhlIHBvdGVudGlhbCBjYWxsZWVzJwogIC8vLyBzaWRlIGVmZmVjdHMuCiAgLy8vCiAgLy8vIFtpbkxvb3BdIHRlbGxzIHdoZXRoZXIgdGhlIGNhbGwgaGFwcGVucyBpbiBhIGxvb3AuCiAgVHlwZUluZm9ybWF0aW9uIHJlZ2lzdGVyQ2FsbGVkU2VsZWN0b3IoCiAgICAgIENhbGxUeXBlIGNhbGxUeXBlLAogICAgICBpci5Ob2RlIG5vZGUsCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIG1hc2ssCiAgICAgIFR5cGVJbmZvcm1hdGlvbiByZWNlaXZlclR5cGUsCiAgICAgIE1lbWJlckVudGl0eSBjYWxsZXIsCiAgICAgIEFyZ3VtZW50c1R5cGVzIGFyZ3VtZW50cywKICAgICAgU2lkZUVmZmVjdHNCdWlsZGVyIHNpZGVFZmZlY3RzQnVpbGRlciwKICAgICAge2Jvb2wgaW5Mb29wLAogICAgICBib29sIGlzQ29uZGl0aW9uYWx9KTsKCiAgLy8vIFVwZGF0ZSB0aGUgYXNzaWdubWVudHMgdG8gcGFyYW1ldGVycyBpbiB0aGUgZ3JhcGguIFtyZW1vdmVdIHRlbGxzIHdoZXRoZXIKICAvLy8gYXNzaWdubWVudHMgbXVzdCBiZSBhZGRlZCBvciByZW1vdmVkLiBJZiBbaW5pdF0gaXMgZmFsc2UsIHBhcmFtZXRlcnMgYXJlCiAgLy8vIGFkZGVkIHRvIHRoZSB3b3JrIHF1ZXVlLgogIHZvaWQgdXBkYXRlUGFyYW1ldGVyQXNzaWdubWVudHMoVHlwZUluZm9ybWF0aW9uIGNhbGxlciwgTWVtYmVyRW50aXR5IGNhbGxlZSwKICAgICAgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzLCBTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSBtYXNrLAogICAgICB7Ym9vbCByZW1vdmUsIGJvb2wgYWRkVG9RdWV1ZTogdHJ1ZX0pOwoKICB2b2lkIHVwZGF0ZVNlbGVjdG9ySW5NZW1iZXIoTWVtYmVyRW50aXR5IG93bmVyLCBDYWxsVHlwZSBjYWxsVHlwZSwKICAgICAgaXIuTm9kZSBub2RlLCBTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSBtYXNrKTsKCiAgLy8vIFJldHVybnMgdGhlIHJldHVybiB0eXBlIG9mIFtlbGVtZW50XS4KICBUeXBlSW5mb3JtYXRpb24gcmV0dXJuVHlwZU9mTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgdGhlIHR5cGUgb2YgW2VsZW1lbnRdIHdoZW4gYmVpbmcgY2FsbGVkIHdpdGggW3NlbGVjdG9yXS4KICBUeXBlSW5mb3JtYXRpb24gdHlwZU9mTWVtYmVyV2l0aFNlbGVjdG9yKAogICAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCwgU2VsZWN0b3Igc2VsZWN0b3IpOwoKICAvLy8gUmV0dXJucyB0aGUgdHlwZSBvZiBbZWxlbWVudF0uCiAgVHlwZUluZm9ybWF0aW9uIHR5cGVPZk1lbWJlcihNZW1iZXJFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIHRoZSB0eXBlIG9mIFtlbGVtZW50XS4KICBUeXBlSW5mb3JtYXRpb24gdHlwZU9mUGFyYW1ldGVyKExvY2FsIGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyB0aGUgdHlwZSBmb3IgW25hdGl2ZUJlaGF2aW9yXS4gU2VlIGRvY3VtZW50YXRpb24gb24KICAvLy8gW05hdGl2ZUJlaGF2aW9yXS4KICBUeXBlSW5mb3JtYXRpb24gdHlwZU9mTmF0aXZlQmVoYXZpb3IoTmF0aXZlQmVoYXZpb3IgbmF0aXZlQmVoYXZpb3IpOwoKICBib29sIHJldHVybnNMaXN0RWxlbWVudFR5cGUoU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgbWFzayk7CgogIGJvb2wgcmV0dXJuc01hcFZhbHVlVHlwZShTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSBtYXNrKTsKCiAgdm9pZCBjbG9zZSgpOwoKICB2b2lkIGNsZWFyKCk7CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgZ2xvYmFsIG9wdGltaXphdGlvbnMgc3VjaCBhcyB0eXBlIGluZmVyZW5jaW5nIGNhbiBhcHBseSB0bwogIC8vLyB0aGUgZmllbGQgW2VsZW1lbnRdLgogIC8vLwogIC8vLyBPbmUgY2F0ZWdvcnkgb2YgZWxlbWVudHMgdGhhdCBkbyBub3QgYXBwbHkgaXMgcnVudGltZSBoZWxwZXJzIHRoYXQgdGhlCiAgLy8vIGJhY2tlbmQgY2FsbHMsIGJ1dCB0aGUgb3B0aW1pemF0aW9ucyBkb24ndCBzZWUgdGhvc2UgY2FsbHMuCiAgYm9vbCBjYW5GaWVsZEJlVXNlZEZvckdsb2JhbE9wdGltaXphdGlvbnMoRmllbGRFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgZ2xvYmFsIG9wdGltaXphdGlvbnMgc3VjaCBhcyB0eXBlIGluZmVyZW5jaW5nIGNhbiBhcHBseSB0bwogIC8vLyB0aGUgcGFyYW1ldGVyIFtlbGVtZW50XS4KICAvLy8KICAvLy8gT25lIGNhdGVnb3J5IG9mIGVsZW1lbnRzIHRoYXQgZG8gbm90IGFwcGx5IGlzIHJ1bnRpbWUgaGVscGVycyB0aGF0IHRoZQogIC8vLyBiYWNrZW5kIGNhbGxzLCBidXQgdGhlIG9wdGltaXphdGlvbnMgZG9uJ3Qgc2VlIHRob3NlIGNhbGxzLgogIGJvb2wgY2FuRnVuY3Rpb25QYXJhbWV0ZXJzQmVVc2VkRm9yR2xvYmFsT3B0aW1pemF0aW9ucygKICAgICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgaW5mZXJlbmNlIG9mIHBhcmFtZXRlciB0eXBlcyBpcyBkaXNhYmxlZCBmb3IgW21lbWJlcl0uCiAgYm9vbCBhc3N1bWVEeW5hbWljKE1lbWJlckVudGl0eSBtZW1iZXIpOwp9CgpjbGFzcyBJbmZlcnJlckVuZ2luZUltcGwgZXh0ZW5kcyBJbmZlcnJlckVuZ2luZSB7CiAgZmluYWwgTWFwPExvY2FsLCBUeXBlSW5mb3JtYXRpb24+IGRlZmF1bHRUeXBlT2ZQYXJhbWV0ZXIgPQogICAgICBuZXcgTWFwPExvY2FsLCBUeXBlSW5mb3JtYXRpb24+KCk7CiAgZmluYWwgV29ya1F1ZXVlIHdvcmtRdWV1ZSA9IG5ldyBXb3JrUXVldWUoKTsKICBAb3ZlcnJpZGUKICBmaW5hbCBGdW5jdGlvbkVudGl0eSBtYWluRWxlbWVudDsKICBmaW5hbCBTZXQ8TWVtYmVyRW50aXR5PiBhbmFseXplZEVsZW1lbnRzID0gbmV3IFNldDxNZW1iZXJFbnRpdHk+KCk7CgogIC8vLyBUaGUgbWF4aW11bSBudW1iZXIgb2YgdGltZXMgd2UgYWxsb3cgYSBub2RlIGluIHRoZSBncmFwaCB0bwogIC8vLyBjaGFuZ2UgdHlwZXMuIElmIGEgbm9kZSByZWFjaGVzIHRoYXQgbGltaXQsIHdlIGdpdmUgdXAKICAvLy8gaW5mZXJlbmNpbmcgb24gaXQgYW5kIGdpdmUgaXQgdGhlIGR5bmFtaWMgdHlwZS4KICBmaW5hbCBpbnQgTUFYX0NIQU5HRV9DT1VOVCA9IDY7CgogIGludCBvdmVyYWxsUmVmaW5lQ291bnQgPSAwOwogIGludCBhZGRlZEluR3JhcGggPSAwOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBDb21waWxlck9wdGlvbnMgb3B0aW9uczsKICBmaW5hbCBQcm9ncmVzcyBwcm9ncmVzczsKICBAb3ZlcnJpZGUKICBmaW5hbCBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXI7CiAgZmluYWwgQ29tcGlsZXJPdXRwdXQgX2NvbXBpbGVyT3V0cHV0OwoKICBAb3ZlcnJpZGUKICBmaW5hbCBKc0Nsb3NlZFdvcmxkIGNsb3NlZFdvcmxkOwogIEBvdmVycmlkZQogIGZpbmFsIEluZmVycmVkRGF0YUJ1aWxkZXIgaW5mZXJyZWREYXRhQnVpbGRlcjsKCiAgQG92ZXJyaWRlCiAgZmluYWwgVHlwZVN5c3RlbSB0eXBlczsKICBAb3ZlcnJpZGUKICBmaW5hbCBNYXA8aXIuVHJlZU5vZGUsIFR5cGVJbmZvcm1hdGlvbj4gY29uY3JldGVUeXBlcyA9CiAgICAgIG5ldyBNYXA8aXIuVHJlZU5vZGUsIFR5cGVJbmZvcm1hdGlvbj4oKTsKCiAgZmluYWwgU2V0PENvbnN0cnVjdG9yRW50aXR5PiBnZW5lcmF0aXZlQ29uc3RydWN0b3JzRXhwb3NpbmdUaGlzID0KICAgICAgbmV3IFNldDxDb25zdHJ1Y3RvckVudGl0eT4oKTsKCiAgLy8vIERhdGEgY29tcHV0ZWQgaW50ZXJuYWxseSB3aXRoaW4gZWxlbWVudHMsIGxpa2UgdGhlIHR5cGUtbWFzayBvZiBhIHNlbmQgYQogIC8vLyBsaXN0IGFsbG9jYXRpb24sIG9yIGEgZm9yLWluIGxvb3AuCiAgZmluYWwgTWFwPE1lbWJlckVudGl0eSwgR2xvYmFsVHlwZUluZmVyZW5jZUVsZW1lbnREYXRhPiBfbWVtYmVyRGF0YSA9CiAgICAgIG5ldyBNYXA8TWVtYmVyRW50aXR5LCBHbG9iYWxUeXBlSW5mZXJlbmNlRWxlbWVudERhdGE+KCk7CgogIGZpbmFsIE5vU3VjaE1ldGhvZFJlZ2lzdHJ5IG5vU3VjaE1ldGhvZFJlZ2lzdHJ5OwoKICBJbmZlcnJlckVuZ2luZUltcGwoCiAgICAgIHRoaXMub3B0aW9ucywKICAgICAgdGhpcy5wcm9ncmVzcywKICAgICAgdGhpcy5yZXBvcnRlciwKICAgICAgdGhpcy5fY29tcGlsZXJPdXRwdXQsCiAgICAgIHRoaXMuY2xvc2VkV29ybGQsCiAgICAgIHRoaXMubm9TdWNoTWV0aG9kUmVnaXN0cnksCiAgICAgIHRoaXMubWFpbkVsZW1lbnQsCiAgICAgIHRoaXMuaW5mZXJyZWREYXRhQnVpbGRlcikKICAgICAgOiB0aGlzLnR5cGVzID0gbmV3IFR5cGVTeXN0ZW0oCiAgICAgICAgICAgIGNsb3NlZFdvcmxkLCBuZXcgS2VybmVsVHlwZVN5c3RlbVN0cmF0ZWd5KGNsb3NlZFdvcmxkKSk7CgogIEVsZW1lbnRFbnZpcm9ubWVudCBnZXQgX2VsZW1lbnRFbnZpcm9ubWVudCA9PiBjbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQ7CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaEVsZW1lbnRNYXRjaGluZygKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgbWFzaywgYm9vbCBmKE1lbWJlckVudGl0eSBlbGVtZW50KSkgewogICAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBlbGVtZW50cyA9IGNsb3NlZFdvcmxkLmxvY2F0ZU1lbWJlcnMoc2VsZWN0b3IsIG1hc2spOwogICAgZm9yIChNZW1iZXJFbnRpdHkgZSBpbiBlbGVtZW50cykgewogICAgICBpZiAoIWYoZSkpIHJldHVybjsKICAgIH0KICB9CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1ha2UgdGhpcyBwcml2YXRlIGFnYWluLgogIEBvdmVycmlkZQogIEdsb2JhbFR5cGVJbmZlcmVuY2VFbGVtZW50RGF0YSBkYXRhT2ZNZW1iZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQpID0+CiAgICAgIF9tZW1iZXJEYXRhW2VsZW1lbnRdID8/PSBuZXcgS2VybmVsR2xvYmFsVHlwZUluZmVyZW5jZUVsZW1lbnREYXRhKCk7CgogIC8vLyBVcGRhdGUgW3NpZGVFZmZlY3RzXSB3aXRoIHRoZSBzaWRlIGVmZmVjdHMgb2YgW2NhbGxlZV0gYmVpbmcKICAvLy8gY2FsbGVkIHdpdGggW3NlbGVjdG9yXS4KICB2b2lkIHVwZGF0ZVNpZGVFZmZlY3RzKFNpZGVFZmZlY3RzQnVpbGRlciBzaWRlRWZmZWN0c0J1aWxkZXIsCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLCBNZW1iZXJFbnRpdHkgY2FsbGVlKSB7CiAgICBpZiAoY2FsbGVlLmlzRmllbGQpIHsKICAgICAgaWYgKGNhbGxlZS5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgICAgaWYgKHNlbGVjdG9yLmlzU2V0dGVyKSB7CiAgICAgICAgICBzaWRlRWZmZWN0c0J1aWxkZXIuc2V0Q2hhbmdlc0luc3RhbmNlUHJvcGVydHkoKTsKICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLmlzR2V0dGVyKSB7CiAgICAgICAgICBzaWRlRWZmZWN0c0J1aWxkZXIuc2V0RGVwZW5kc09uSW5zdGFuY2VQcm9wZXJ0eVN0b3JlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNpZGVFZmZlY3RzQnVpbGRlci5zZXRBbGxTaWRlRWZmZWN0c0FuZERlcGVuZHNPblNvbWV0aGluZygpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoc2VsZWN0b3IuaXNTZXR0ZXIpIHsKICAgICAgICAgIHNpZGVFZmZlY3RzQnVpbGRlci5zZXRDaGFuZ2VzU3RhdGljUHJvcGVydHkoKTsKICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLmlzR2V0dGVyKSB7CiAgICAgICAgICBzaWRlRWZmZWN0c0J1aWxkZXIuc2V0RGVwZW5kc09uU3RhdGljUHJvcGVydHlTdG9yZSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzaWRlRWZmZWN0c0J1aWxkZXIuc2V0QWxsU2lkZUVmZmVjdHNBbmREZXBlbmRzT25Tb21ldGhpbmcoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoY2FsbGVlLmlzR2V0dGVyICYmICFzZWxlY3Rvci5pc0dldHRlcikgewogICAgICBzaWRlRWZmZWN0c0J1aWxkZXIuc2V0QWxsU2lkZUVmZmVjdHNBbmREZXBlbmRzT25Tb21ldGhpbmcoKTsKICAgIH0gZWxzZSB7CiAgICAgIHNpZGVFZmZlY3RzQnVpbGRlcgogICAgICAgICAgLmFkZElucHV0KGluZmVycmVkRGF0YUJ1aWxkZXIuZ2V0U2lkZUVmZmVjdHNCdWlsZGVyKGNhbGxlZSkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHR5cGVPZk5hdGl2ZUJlaGF2aW9yKE5hdGl2ZUJlaGF2aW9yIG5hdGl2ZUJlaGF2aW9yKSB7CiAgICBpZiAobmF0aXZlQmVoYXZpb3IgPT0gbnVsbCkgcmV0dXJuIHR5cGVzLmR5bmFtaWNUeXBlOwogICAgTGlzdCB0eXBlc1JldHVybmVkID0gbmF0aXZlQmVoYXZpb3IudHlwZXNSZXR1cm5lZDsKICAgIGlmICh0eXBlc1JldHVybmVkLmlzRW1wdHkpIHJldHVybiB0eXBlcy5keW5hbWljVHlwZTsKICAgIFR5cGVJbmZvcm1hdGlvbiByZXR1cm5UeXBlOwogICAgZm9yICh2YXIgdHlwZSBpbiB0eXBlc1JldHVybmVkKSB7CiAgICAgIFR5cGVJbmZvcm1hdGlvbiBtYXBwZWRUeXBlOwogICAgICBpZiAodHlwZSA9PSBTcGVjaWFsVHlwZS5Kc09iamVjdCkgewogICAgICAgIG1hcHBlZFR5cGUgPSB0eXBlcy5ub25OdWxsRXhhY3QoY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MpOwogICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gY29tbW9uRWxlbWVudHMuc3RyaW5nVHlwZSkgewogICAgICAgIG1hcHBlZFR5cGUgPSB0eXBlcy5zdHJpbmdUeXBlOwogICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gY29tbW9uRWxlbWVudHMuaW50VHlwZSkgewogICAgICAgIG1hcHBlZFR5cGUgPSB0eXBlcy5pbnRUeXBlOwogICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gY29tbW9uRWxlbWVudHMubnVtVHlwZSB8fAogICAgICAgICAgdHlwZSA9PSBjb21tb25FbGVtZW50cy5kb3VibGVUeXBlKSB7CiAgICAgICAgLy8gTm90ZTogdGhlIGJhY2tlbmQgZG91YmxlIGNsYXNzIGlzIHNwZWNpZmljYWxseSBmb3Igbm9uLWludGVnZXIKICAgICAgICAvLyBkb3VibGVzLCBhbmQgYSBuYXRpdmUgYmVoYXZpb3IgcmV0dXJuaW5nICdkb3VibGUnIGRvZXMgbm90IGd1YXJhbnRlZQogICAgICAgIC8vIGEgbm9uLWludGVnZXIgcmV0dXJuIHR5cGUsIHNvIHdlIHJldHVybiB0aGUgbnVtYmVyIHR5cGUgZm9yIHRob3NlLgogICAgICAgIG1hcHBlZFR5cGUgPSB0eXBlcy5udW1UeXBlOwogICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gY29tbW9uRWxlbWVudHMuYm9vbFR5cGUpIHsKICAgICAgICBtYXBwZWRUeXBlID0gdHlwZXMuYm9vbFR5cGU7CiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBjb21tb25FbGVtZW50cy5udWxsVHlwZSkgewogICAgICAgIG1hcHBlZFR5cGUgPSB0eXBlcy5udWxsVHlwZTsKICAgICAgfSBlbHNlIGlmICh0eXBlLmlzVm9pZCkgewogICAgICAgIG1hcHBlZFR5cGUgPSB0eXBlcy5udWxsVHlwZTsKICAgICAgfSBlbHNlIGlmICh0eXBlLmlzRHluYW1pYykgewogICAgICAgIHJldHVybiB0eXBlcy5keW5hbWljVHlwZTsKICAgICAgfSBlbHNlIGlmICh0eXBlLmlzSW50ZXJmYWNlVHlwZSkgewogICAgICAgIG1hcHBlZFR5cGUgPSB0eXBlcy5ub25OdWxsU3VidHlwZSh0eXBlLmVsZW1lbnQpOwogICAgICB9IGVsc2UgewogICAgICAgIG1hcHBlZFR5cGUgPSB0eXBlcy5keW5hbWljVHlwZTsKICAgICAgfQogICAgICByZXR1cm5UeXBlID0gdHlwZXMuY29tcHV0ZUxVQihyZXR1cm5UeXBlLCBtYXBwZWRUeXBlKTsKICAgICAgaWYgKHJldHVyblR5cGUgPT0gdHlwZXMuZHluYW1pY1R5cGUpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJldHVyblR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHVwZGF0ZVNlbGVjdG9ySW5NZW1iZXIoTWVtYmVyRW50aXR5IG93bmVyLCBDYWxsVHlwZSBjYWxsVHlwZSwKICAgICAgaXIuTm9kZSBub2RlLCBTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSBtYXNrKSB7CiAgICBLZXJuZWxHbG9iYWxUeXBlSW5mZXJlbmNlRWxlbWVudERhdGEgZGF0YSA9IGRhdGFPZk1lbWJlcihvd25lcik7CiAgICBhc3NlcnQodmFsaWRDYWxsVHlwZShjYWxsVHlwZSwgbm9kZSkpOwogICAgc3dpdGNoIChjYWxsVHlwZSkgewogICAgICBjYXNlIENhbGxUeXBlLmFjY2VzczoKICAgICAgICBkYXRhLnNldFR5cGVNYXNrKG5vZGUsIG1hc2spOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENhbGxUeXBlLmZvckluOgogICAgICAgIGlmIChzZWxlY3RvciA9PSBTZWxlY3RvcnMuaXRlcmF0b3IpIHsKICAgICAgICAgIGRhdGEuc2V0SXRlcmF0b3JUeXBlTWFzayhub2RlLCBtYXNrKTsKICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yID09IFNlbGVjdG9ycy5jdXJyZW50KSB7CiAgICAgICAgICBkYXRhLnNldEN1cnJlbnRUeXBlTWFzayhub2RlLCBtYXNrKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYXNzZXJ0KHNlbGVjdG9yID09IFNlbGVjdG9ycy5tb3ZlTmV4dCk7CiAgICAgICAgICBkYXRhLnNldE1vdmVOZXh0VHlwZU1hc2sobm9kZSwgbWFzayk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjaGVja0lmRXhwb3Nlc1RoaXMoQ29uc3RydWN0b3JFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIGdlbmVyYXRpdmVDb25zdHJ1Y3RvcnNFeHBvc2luZ1RoaXMuY29udGFpbnMoZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlY29yZEV4cG9zZXNUaGlzKENvbnN0cnVjdG9yRW50aXR5IGVsZW1lbnQsIGJvb2wgZXhwb3Nlc1RoaXMpIHsKICAgIGlmIChleHBvc2VzVGhpcykgewogICAgICBnZW5lcmF0aXZlQ29uc3RydWN0b3JzRXhwb3NpbmdUaGlzLmFkZChlbGVtZW50KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGJvb2wgcmV0dXJuc0xpc3RFbGVtZW50VHlwZShTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSBtYXNrKSB7CiAgICByZXR1cm4gbWFzayAhPSBudWxsICYmCiAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0NvbnRhaW5lcihtYXNrKSAmJgogICAgICAgIHJldHVybnNMaXN0RWxlbWVudFR5cGVTZXQuY29udGFpbnMoc2VsZWN0b3IpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCByZXR1cm5zTWFwVmFsdWVUeXBlKFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIG1hc2spIHsKICAgIHJldHVybiBtYXNrICE9IG51bGwgJiYgYWJzdHJhY3RWYWx1ZURvbWFpbi5pc01hcChtYXNrKSAmJiBzZWxlY3Rvci5pc0luZGV4OwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhbmFseXplTGlzdEFuZEVucXVldWUoTGlzdFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBpZiAoaW5mby5hbmFseXplZCkgcmV0dXJuOwogICAgaW5mby5hbmFseXplZCA9IHRydWU7CgogICAgTGlzdFRyYWNlclZpc2l0b3IgdHJhY2VyID0gbmV3IExpc3RUcmFjZXJWaXNpdG9yKGluZm8sIHRoaXMpOwogICAgYm9vbCBzdWNjZWVkZWQgPSB0cmFjZXIucnVuKCk7CiAgICBpZiAoIXN1Y2NlZWRlZCkgcmV0dXJuOwoKICAgIGluZm8uYmFpbGVkT3V0ID0gZmFsc2U7CiAgICBpbmZvLmVsZW1lbnRUeXBlLmluZmVycmVkID0gdHJ1ZTsKICAgIGlmIChhYnN0cmFjdFZhbHVlRG9tYWluLmlzU3BlY2lhbGl6YXRpb25PZigKICAgICAgICBpbmZvLm9yaWdpbmFsVHlwZSwgYWJzdHJhY3RWYWx1ZURvbWFpbi5maXhlZExpc3RUeXBlKSkgewogICAgICBpbmZvLmNoZWNrc0dyb3dhYmxlID0gdHJhY2VyLmNhbGxzR3Jvd2FibGVNZXRob2Q7CiAgICB9CiAgICB0cmFjZXIuYXNzaWdubWVudHMuZm9yRWFjaChpbmZvLmVsZW1lbnRUeXBlLmFkZEFzc2lnbm1lbnQpOwogICAgLy8gRW5xdWV1ZSB0aGUgbGlzdCBmb3IgbGF0ZXIgcmVmaW5lbWVudAogICAgd29ya1F1ZXVlLmFkZChpbmZvKTsKICAgIHdvcmtRdWV1ZS5hZGQoaW5mby5lbGVtZW50VHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFuYWx5emVTZXRBbmRFbnF1ZXVlKFNldFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBpZiAoaW5mby5hbmFseXplZCkgcmV0dXJuOwogICAgaW5mby5hbmFseXplZCA9IHRydWU7CgogICAgU2V0VHJhY2VyVmlzaXRvciB0cmFjZXIgPSBuZXcgU2V0VHJhY2VyVmlzaXRvcihpbmZvLCB0aGlzKTsKICAgIGJvb2wgc3VjY2VlZGVkID0gdHJhY2VyLnJ1bigpOwogICAgaWYgKCFzdWNjZWVkZWQpIHJldHVybjsKCiAgICBpbmZvLmJhaWxlZE91dCA9IGZhbHNlOwogICAgaW5mby5lbGVtZW50VHlwZS5pbmZlcnJlZCA9IHRydWU7CgogICAgdHJhY2VyLmFzc2lnbm1lbnRzLmZvckVhY2goaW5mby5lbGVtZW50VHlwZS5hZGRBc3NpZ25tZW50KTsKICAgIC8vIEVucXVldWUgdGhlIHNldCBmb3IgbGF0ZXIgcmVmaW5lbWVudC4KICAgIHdvcmtRdWV1ZS5hZGQoaW5mbyk7CiAgICB3b3JrUXVldWUuYWRkKGluZm8uZWxlbWVudFR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhbmFseXplTWFwQW5kRW5xdWV1ZShNYXBUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgaWYgKGluZm8uYW5hbHl6ZWQpIHJldHVybjsKICAgIGluZm8uYW5hbHl6ZWQgPSB0cnVlOwogICAgTWFwVHJhY2VyVmlzaXRvciB0cmFjZXIgPSBuZXcgTWFwVHJhY2VyVmlzaXRvcihpbmZvLCB0aGlzKTsKCiAgICBib29sIHN1Y2NlZWRlZCA9IHRyYWNlci5ydW4oKTsKICAgIGlmICghc3VjY2VlZGVkKSByZXR1cm47CgogICAgaW5mby5iYWlsZWRPdXQgPSBmYWxzZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHJhY2VyLmtleUFzc2lnbm1lbnRzLmxlbmd0aDsgKytpKSB7CiAgICAgIFR5cGVJbmZvcm1hdGlvbiBuZXdUeXBlID0gaW5mby5hZGRFbnRyeUFzc2lnbm1lbnQoYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgICAgIHRyYWNlci5rZXlBc3NpZ25tZW50c1tpXSwgdHJhY2VyLnZhbHVlQXNzaWdubWVudHNbaV0pOwogICAgICBpZiAobmV3VHlwZSAhPSBudWxsKSB3b3JrUXVldWUuYWRkKG5ld1R5cGUpOwogICAgfQogICAgZm9yIChUeXBlSW5mb3JtYXRpb24gbWFwIGluIHRyYWNlci5tYXBBc3NpZ25tZW50cykgewogICAgICB3b3JrUXVldWUuYWRkQWxsKGluZm8uYWRkTWFwQXNzaWdubWVudChhYnN0cmFjdFZhbHVlRG9tYWluLCBtYXApKTsKICAgIH0KCiAgICBpbmZvLm1hcmtBc0luZmVycmVkKCk7CiAgICB3b3JrUXVldWUuYWRkKGluZm8ua2V5VHlwZSk7CiAgICB3b3JrUXVldWUuYWRkKGluZm8udmFsdWVUeXBlKTsKICAgIHdvcmtRdWV1ZS5hZGRBbGwoaW5mby50eXBlSW5mb01hcC52YWx1ZXMpOwogICAgd29ya1F1ZXVlLmFkZChpbmZvKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcnVuT3ZlckFsbEVsZW1lbnRzKCkgewogICAgYW5hbHl6ZUFsbEVsZW1lbnRzKCk7CiAgICBUeXBlR3JhcGhEdW1wIGR1bXAgPQogICAgICAgIGRlYnVnLlBSSU5UX0dSQVBIID8gbmV3IFR5cGVHcmFwaER1bXAoX2NvbXBpbGVyT3V0cHV0LCB0aGlzKSA6IG51bGw7CgogICAgZHVtcD8uYmVmb3JlQW5hbHlzaXMoKTsKICAgIGJ1aWxkV29ya1F1ZXVlKCk7CiAgICByZWZpbmUoKTsKCiAgICAvLyBUcnkgdG8gaW5mZXIgZWxlbWVudCB0eXBlcyBvZiBsaXN0cyBhbmQgY29tcHV0ZSB0aGVpciBlc2NhcGUgaW5mb3JtYXRpb24uCiAgICB0eXBlcy5hbGxvY2F0ZWRMaXN0cy52YWx1ZXMuZm9yRWFjaCgoVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgICAgYW5hbHl6ZUxpc3RBbmRFbnF1ZXVlKGluZm8pOwogICAgfSk7CgogICAgLy8gVHJ5IHRvIGluZmVyIGVsZW1lbnQgdHlwZXMgb2Ygc2V0cyBhbmQgY29tcHV0ZSB0aGVpciBlc2NhcGUgaW5mb3JtYXRpb24uCiAgICB0eXBlcy5hbGxvY2F0ZWRTZXRzLnZhbHVlcy5mb3JFYWNoKChUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgICBhbmFseXplU2V0QW5kRW5xdWV1ZShpbmZvKTsKICAgIH0pOwoKICAgIC8vIFRyeSB0byBpbmZlciB0aGUga2V5IGFuZCB2YWx1ZSB0eXBlcyBmb3IgbWFwcyBhbmQgY29tcHV0ZSB0aGUgdmFsdWVzJwogICAgLy8gZXNjYXBlIGluZm9ybWF0aW9uLgogICAgdHlwZXMuYWxsb2NhdGVkTWFwcy52YWx1ZXMuZm9yRWFjaCgoVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgICAgYW5hbHl6ZU1hcEFuZEVucXVldWUoaW5mbyk7CiAgICB9KTsKCiAgICBTZXQ8RnVuY3Rpb25FbnRpdHk+IGJhaWxlZE91dE9uID0gbmV3IFNldDxGdW5jdGlvbkVudGl0eT4oKTsKCiAgICAvLyBUcmFjZSBjbG9zdXJlcyB0byBwb3RlbnRpYWxseSBpbmZlciBhcmd1bWVudCB0eXBlcy4KICAgIHR5cGVzLmFsbG9jYXRlZENsb3N1cmVzLmZvckVhY2goKGR5bmFtaWMgaW5mbykgewogICAgICB2b2lkIHRyYWNlKAogICAgICAgICAgSXRlcmFibGU8RnVuY3Rpb25FbnRpdHk+IGVsZW1lbnRzLCBDbG9zdXJlVHJhY2VyVmlzaXRvciB0cmFjZXIpIHsKICAgICAgICB0cmFjZXIucnVuKCk7CiAgICAgICAgaWYgKCF0cmFjZXIuY29udGludWVBbmFseXppbmcpIHsKICAgICAgICAgIGVsZW1lbnRzLmZvckVhY2goKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgICAgICAgICAgaW5mZXJyZWREYXRhQnVpbGRlci5yZWdpc3Rlck1pZ2h0QmVQYXNzZWRUb0FwcGx5KGVsZW1lbnQpOwogICAgICAgICAgICBpZiAoZGVidWcuVkVSQk9TRSkgewogICAgICAgICAgICAgIHByaW50KCJ0cmFjZWQgY2xvc3VyZSAkZWxlbWVudCBhcyAke3RydWV9IChiYWlsKSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHR5cGVzLnN0cmF0ZWd5LmZvckVhY2hQYXJhbWV0ZXIoZWxlbWVudCwgKExvY2FsIHBhcmFtZXRlcikgewogICAgICAgICAgICAgIHR5cGVzCiAgICAgICAgICAgICAgICAgIC5nZXRJbmZlcnJlZFR5cGVPZlBhcmFtZXRlcihwYXJhbWV0ZXIpCiAgICAgICAgICAgICAgICAgIC5naXZlVXAodGhpcywgY2xlYXJBc3NpZ25tZW50czogZmFsc2UpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0pOwogICAgICAgICAgYmFpbGVkT3V0T24uYWRkQWxsKGVsZW1lbnRzKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZWxlbWVudHMKICAgICAgICAgICAgLndoZXJlKChlKSA9PiAhYmFpbGVkT3V0T24uY29udGFpbnMoZSkpCiAgICAgICAgICAgIC5mb3JFYWNoKChGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICAgICAgICB0eXBlcy5zdHJhdGVneS5mb3JFYWNoUGFyYW1ldGVyKGVsZW1lbnQsIChMb2NhbCBwYXJhbWV0ZXIpIHsKICAgICAgICAgICAgUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uIGluZm8gPQogICAgICAgICAgICAgICAgdHlwZXMuZ2V0SW5mZXJyZWRUeXBlT2ZQYXJhbWV0ZXIocGFyYW1ldGVyKTsKICAgICAgICAgICAgaW5mby5tYXliZVJlc3VtZSgpOwogICAgICAgICAgICB3b3JrUXVldWUuYWRkKGluZm8pOwogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAodHJhY2VyLnRyYWNlZFR5cGUubWlnaHRCZVBhc3NlZFRvRnVuY3Rpb25BcHBseSkgewogICAgICAgICAgICBpbmZlcnJlZERhdGFCdWlsZGVyLnJlZ2lzdGVyTWlnaHRCZVBhc3NlZFRvQXBwbHkoZWxlbWVudCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZGVidWcuVkVSQk9TRSkgewogICAgICAgICAgICBwcmludCgidHJhY2VkIGNsb3N1cmUgJGVsZW1lbnQgYXMgIgogICAgICAgICAgICAgICAgIiR7aW5mZXJyZWREYXRhQnVpbGRlci5nZXRDdXJyZW50bHlLbm93bk1pZ2h0QmVQYXNzZWRUb0FwcGx5KGVsZW1lbnQpfSIpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CgogICAgICBpZiAoaW5mbyBpcyBDbG9zdXJlVHlwZUluZm9ybWF0aW9uKSB7CiAgICAgICAgSXRlcmFibGU8RnVuY3Rpb25FbnRpdHk+IGVsZW1lbnRzID0gW2luZm8uY2xvc3VyZV07CiAgICAgICAgdHJhY2UoZWxlbWVudHMsIG5ldyBDbG9zdXJlVHJhY2VyVmlzaXRvcihlbGVtZW50cywgaW5mbywgdGhpcykpOwogICAgICB9IGVsc2UgaWYgKGluZm8gaXMgQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24pIHsKICAgICAgICBpZiAoaW5mbyBpcyBTdGF0aWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiAmJgogICAgICAgICAgICBpbmZvLnNlbGVjdG9yICE9IG51bGwgJiYKICAgICAgICAgICAgaW5mby5zZWxlY3Rvci5pc0NhbGwpIHsKICAgICAgICAgIC8vIFRoaXMgaXMgYSBjb25zdHJ1Y3RvciBjYWxsIHRvIGEgY2xhc3Mgd2l0aCBhIGNhbGwgbWV0aG9kLiBTbyB3ZQogICAgICAgICAgLy8gbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBtZXRob2QgaGVyZS4KICAgICAgICAgIEZ1bmN0aW9uRW50aXR5IGNhbGxlZEVsZW1lbnQgPSBpbmZvLmNhbGxlZEVsZW1lbnQ7CiAgICAgICAgICBhc3NlcnQoY2FsbGVkRWxlbWVudCBpcyBDb25zdHJ1Y3RvckVudGl0eSAmJgogICAgICAgICAgICAgIGNhbGxlZEVsZW1lbnQuaXNHZW5lcmF0aXZlQ29uc3RydWN0b3IpOwogICAgICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gY2FsbGVkRWxlbWVudC5lbmNsb3NpbmdDbGFzczsKICAgICAgICAgIEZ1bmN0aW9uRW50aXR5IGNhbGxNZXRob2QgPSBsb29rdXBDYWxsTWV0aG9kKGNscyk7CiAgICAgICAgICBhc3NlcnQoY2FsbE1ldGhvZCAhPSBudWxsLCBmYWlsZWRBdChjbHMpKTsKICAgICAgICAgIEl0ZXJhYmxlPEZ1bmN0aW9uRW50aXR5PiBlbGVtZW50cyA9IFtjYWxsTWV0aG9kXTsKICAgICAgICAgIHRyYWNlKGVsZW1lbnRzLCBuZXcgQ2xvc3VyZVRyYWNlclZpc2l0b3IoZWxlbWVudHMsIGluZm8sIHRoaXMpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gV2Ugb25seSBhcmUgaW50ZXJlc3RlZCBpbiBmdW5jdGlvbnMgaGVyZSwgYXMgb3RoZXIgdGFyZ2V0cwogICAgICAgICAgLy8gb2YgdGhpcyBjbG9zdXJlIGNhbGwgYXJlIG5vdCBhIHJvb3QgdG8gdHJhY2UgYnV0IGFuIGludGVybWVkaWF0ZQogICAgICAgICAgLy8gZm9yIHNvbWUgb3RoZXIgZnVuY3Rpb24uCiAgICAgICAgICBJdGVyYWJsZTxGdW5jdGlvbkVudGl0eT4gZWxlbWVudHMgPSBuZXcgTGlzdDxGdW5jdGlvbkVudGl0eT4uZnJvbSgKICAgICAgICAgICAgICBpbmZvLmNhbGxlZXMud2hlcmUoKGUpID0+IGUuaXNGdW5jdGlvbikpOwogICAgICAgICAgdHJhY2UoZWxlbWVudHMsIG5ldyBDbG9zdXJlVHJhY2VyVmlzaXRvcihlbGVtZW50cywgaW5mbywgdGhpcykpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChpbmZvIGlzIE1lbWJlclR5cGVJbmZvcm1hdGlvbikgewogICAgICAgIHRyYWNlKDxGdW5jdGlvbkVudGl0eT5baW5mby5tZW1iZXJdLAogICAgICAgICAgICBuZXcgU3RhdGljVGVhck9mZkNsb3N1cmVUcmFjZXJWaXNpdG9yKGluZm8ubWVtYmVyLCBpbmZvLCB0aGlzKSk7CiAgICAgIH0gZWxzZSBpZiAoaW5mbyBpcyBQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24pIHsKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgTk9fTE9DQVRJT05fU1BBTk5BQkxFLCAnVW5leHBlY3RlZCBjbG9zdXJlIGFsbG9jYXRpb24gaW5mbyAkaW5mbycpOwogICAgICB9CiAgICB9KTsKCiAgICBkdW1wPy5iZWZvcmVUcmFjaW5nKCk7CgogICAgLy8gUmVzZXQgYWxsIG5vZGVzIHRoYXQgdXNlIGxpc3RzL21hcHMgdGhhdCBoYXZlIGJlZW4gaW5mZXJyZWQsIGFzIHdlbGwKICAgIC8vIGFzIG5vZGVzIHRoYXQgdXNlIGVsZW1lbnRzIGZldGNoZWQgZnJvbSB0aGVzZSBsaXN0cy9tYXBzLiBUaGUKICAgIC8vIHdvcmtzZXQgZm9yIGEgbmV3IHJ1biBvZiB0aGUgYW5hbHlzaXMgd2lsbCBiZSB0aGVzZSBub2Rlcy4KICAgIFNldDxUeXBlSW5mb3JtYXRpb24+IHNlZW5UeXBlcyA9IG5ldyBTZXQ8VHlwZUluZm9ybWF0aW9uPigpOwogICAgd2hpbGUgKCF3b3JrUXVldWUuaXNFbXB0eSkgewogICAgICBUeXBlSW5mb3JtYXRpb24gaW5mbyA9IHdvcmtRdWV1ZS5yZW1vdmUoKTsKICAgICAgaWYgKHNlZW5UeXBlcy5jb250YWlucyhpbmZvKSkgY29udGludWU7CiAgICAgIC8vIElmIHRoZSBub2RlIGNhbm5vdCBiZSByZXNldCwgd2UgZG8gbm90IG5lZWQgdG8gdXBkYXRlIGl0cyB1c2VycyBlaXRoZXIuCiAgICAgIGlmICghaW5mby5yZXNldCh0aGlzKSkgY29udGludWU7CiAgICAgIHNlZW5UeXBlcy5hZGQoaW5mbyk7CiAgICAgIHdvcmtRdWV1ZS5hZGRBbGwoaW5mby51c2Vycyk7CiAgICB9CgogICAgd29ya1F1ZXVlLmFkZEFsbChzZWVuVHlwZXMpOwogICAgcmVmaW5lKCk7CgogICAgaWYgKGRlYnVnLlBSSU5UX1NVTU1BUlkpIHsKICAgICAgdHlwZXMuYWxsb2NhdGVkTGlzdHMudmFsdWVzLmZvckVhY2goKF9pbmZvKSB7CiAgICAgICAgTGlzdFR5cGVJbmZvcm1hdGlvbiBpbmZvID0gX2luZm87CiAgICAgICAgcHJpbnQoJyR7aW5mby50eXBlfSAnCiAgICAgICAgICAgICdmb3IgJHthYnN0cmFjdFZhbHVlRG9tYWluLmdldEFsbG9jYXRpb25Ob2RlKGluZm8ub3JpZ2luYWxUeXBlKX0gJwogICAgICAgICAgICAnYXQgJHthYnN0cmFjdFZhbHVlRG9tYWluLmdldEFsbG9jYXRpb25FbGVtZW50KGluZm8ub3JpZ2luYWxUeXBlKX0nCiAgICAgICAgICAgICdhZnRlciAke2luZm8ucmVmaW5lQ291bnR9Jyk7CiAgICAgIH0pOwogICAgICB0eXBlcy5hbGxvY2F0ZWRTZXRzLnZhbHVlcy5mb3JFYWNoKChfaW5mbykgewogICAgICAgIFNldFR5cGVJbmZvcm1hdGlvbiBpbmZvID0gX2luZm87CiAgICAgICAgcHJpbnQoJyR7aW5mby50eXBlfSAnCiAgICAgICAgICAgICdmb3IgJHthYnN0cmFjdFZhbHVlRG9tYWluLmdldEFsbG9jYXRpb25Ob2RlKGluZm8ub3JpZ2luYWxUeXBlKX0gJwogICAgICAgICAgICAnYXQgJHthYnN0cmFjdFZhbHVlRG9tYWluLmdldEFsbG9jYXRpb25FbGVtZW50KGluZm8ub3JpZ2luYWxUeXBlKX0gJwogICAgICAgICAgICAnYWZ0ZXIgJHtpbmZvLnJlZmluZUNvdW50fScpOwogICAgICB9KTsKICAgICAgdHlwZXMuYWxsb2NhdGVkTWFwcy52YWx1ZXMuZm9yRWFjaCgoX2luZm8pIHsKICAgICAgICBNYXBUeXBlSW5mb3JtYXRpb24gaW5mbyA9IF9pbmZvOwogICAgICAgIHByaW50KCcke2luZm8udHlwZX0gJwogICAgICAgICAgICAnZm9yICR7YWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRBbGxvY2F0aW9uTm9kZShpbmZvLm9yaWdpbmFsVHlwZSl9ICcKICAgICAgICAgICAgJ2F0ICR7YWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRBbGxvY2F0aW9uRWxlbWVudChpbmZvLm9yaWdpbmFsVHlwZSl9JwogICAgICAgICAgICAnYWZ0ZXIgJHtpbmZvLnJlZmluZUNvdW50fScpOwogICAgICB9KTsKICAgICAgdHlwZXMuYWxsb2NhdGVkQ2xvc3VyZXMuZm9yRWFjaCgoVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgICAgICBpZiAoaW5mbyBpcyBFbGVtZW50VHlwZUluZm9ybWF0aW9uKSB7CiAgICAgICAgICBwcmludCgnJHtpbmZvLmdldEluZmVycmVkU2lnbmF0dXJlKHR5cGVzKX0gZm9yICcKICAgICAgICAgICAgICAnJHtpbmZvLmRlYnVnTmFtZX0nKTsKICAgICAgICB9IGVsc2UgaWYgKGluZm8gaXMgQ2xvc3VyZVR5cGVJbmZvcm1hdGlvbikgewogICAgICAgICAgcHJpbnQoJyR7aW5mby5nZXRJbmZlcnJlZFNpZ25hdHVyZSh0eXBlcyl9IGZvciAnCiAgICAgICAgICAgICAgJyR7aW5mby5kZWJ1Z05hbWV9Jyk7CiAgICAgICAgfSBlbHNlIGlmIChpbmZvIGlzIER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbikgewogICAgICAgICAgaWYgKGluZm8uaGFzQ2xvc3VyZUNhbGxUYXJnZXRzKSB7CiAgICAgICAgICAgIHByaW50KCc8Q2xvc3VyZS5jYWxsPicpOwogICAgICAgICAgfQogICAgICAgICAgZm9yIChNZW1iZXJFbnRpdHkgdGFyZ2V0IGluIGluZm8uY29uY3JldGVUYXJnZXRzKSB7CiAgICAgICAgICAgIGlmICh0YXJnZXQgaXMgRnVuY3Rpb25FbnRpdHkpIHsKICAgICAgICAgICAgICBwcmludCgnJHt0eXBlcy5nZXRJbmZlcnJlZFNpZ25hdHVyZU9mTWV0aG9kKHRhcmdldCl9ICcKICAgICAgICAgICAgICAgICAgJ2ZvciAke3RhcmdldH0nKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBwcmludCgnJHt0eXBlcy5nZXRJbmZlcnJlZFR5cGVPZk1lbWJlcih0YXJnZXQpLnR5cGV9ICcKICAgICAgICAgICAgICAgICAgJ2ZvciAke3RhcmdldH0nKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoaW5mbyBpcyBTdGF0aWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbikgewogICAgICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gaW5mby5jYWxsZWRFbGVtZW50LmVuY2xvc2luZ0NsYXNzOwogICAgICAgICAgRnVuY3Rpb25FbnRpdHkgY2FsbE1ldGhvZCA9IGxvb2t1cENhbGxNZXRob2QoY2xzKTsKICAgICAgICAgIHByaW50KCcke3R5cGVzLmdldEluZmVycmVkU2lnbmF0dXJlT2ZNZXRob2QoY2FsbE1ldGhvZCl9IGZvciAke2Nsc30nKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcHJpbnQoJyR7aW5mby50eXBlfSBmb3Igc29tZSB1bmtub3duIGtpbmQgb2YgY2xvc3VyZScpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGFuYWx5emVkRWxlbWVudHMuZm9yRWFjaCgoTWVtYmVyRW50aXR5IGVsZW0pIHsKICAgICAgICBUeXBlSW5mb3JtYXRpb24gdHlwZSA9IHR5cGVzLmdldEluZmVycmVkVHlwZU9mTWVtYmVyKGVsZW0pOwogICAgICAgIHByaW50KCcke2VsZW19IDo6ICR7dHlwZX0gZnJvbSAke3R5cGUuYXNzaWdubWVudHN9ICcpOwogICAgICB9KTsKICAgIH0KICAgIGR1bXA/LmFmdGVyQW5hbHlzaXMoKTsKCiAgICByZXBvcnRlci5sb2coJ0luZmVycmVkICRvdmVyYWxsUmVmaW5lQ291bnQgdHlwZXMuJyk7CgogICAgcHJvY2Vzc0xvb3BJbmZvcm1hdGlvbigpOwogIH0KCiAgLy8vIENhbGwgW2FuYWx5emVdIGZvciBhbGwgbGl2ZSBtZW1iZXJzLgogIHZvaWQgYW5hbHl6ZUFsbEVsZW1lbnRzKCkgewogICAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBwcm9jZXNzZWRNZW1iZXJzID0gY2xvc2VkV29ybGQucHJvY2Vzc2VkTWVtYmVycwogICAgICAgIC53aGVyZSgoTWVtYmVyRW50aXR5IG1lbWJlcikgPT4gIW1lbWJlci5pc0Fic3RyYWN0KTsKCiAgICBwcm9ncmVzcy5zdGFydFBoYXNlKCk7CiAgICBwcm9jZXNzZWRNZW1iZXJzLmZvckVhY2goKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgICAgcHJvZ3Jlc3Muc2hvd1Byb2dyZXNzKAogICAgICAgICAgJ0FkZGVkICcsIGFkZGVkSW5HcmFwaCwgJyBlbGVtZW50cyBpbiBpbmZlcmVuY2luZyBncmFwaC4nKTsKICAgICAgLy8gVGhpcyBhbHNvIGZvcmNlcyB0aGUgY3JlYXRpb24gb2YgdGhlIFtFbGVtZW50VHlwZUluZm9ybWF0aW9uXSB0byBlbnN1cmUKICAgICAgLy8gaXQgaXMgaW4gdGhlIGdyYXBoLgogICAgICB0eXBlcy53aXRoTWVtYmVyKG1lbWJlciwgKCkgPT4gYW5hbHl6ZShtZW1iZXIpKTsKICAgIH0pOwogICAgcmVwb3J0ZXIubG9nKCdBZGRlZCAkYWRkZWRJbkdyYXBoIGVsZW1lbnRzIGluIGluZmVyZW5jaW5nIGdyYXBoLicpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGJvZHkgbm9kZSBmb3IgW21lbWJlcl0uCiAgaXIuTm9kZSBjb21wdXRlTWVtYmVyQm9keShNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBNZW1iZXJEZWZpbml0aW9uIGRlZmluaXRpb24gPQogICAgICAgIGNsb3NlZFdvcmxkLmVsZW1lbnRNYXAuZ2V0TWVtYmVyRGVmaW5pdGlvbihtZW1iZXIpOwogICAgc3dpdGNoIChkZWZpbml0aW9uLmtpbmQpIHsKICAgICAgY2FzZSBNZW1iZXJLaW5kLnJlZ3VsYXI6CiAgICAgICAgaXIuTWVtYmVyIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgaWYgKG5vZGUgaXMgaXIuRmllbGQpIHsKICAgICAgICAgIHJldHVybiBnZXRGaWVsZEluaXRpYWxpemVyKGNsb3NlZFdvcmxkLmVsZW1lbnRNYXAsIG1lbWJlcik7CiAgICAgICAgfSBlbHNlIGlmIChub2RlIGlzIGlyLlByb2NlZHVyZSkgewogICAgICAgICAgcmV0dXJuIG5vZGUuZnVuY3Rpb247CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1lbWJlcktpbmQuY29uc3RydWN0b3I6CiAgICAgICAgcmV0dXJuIGRlZmluaXRpb24ubm9kZTsKICAgICAgY2FzZSBNZW1iZXJLaW5kLmNvbnN0cnVjdG9yQm9keToKICAgICAgICBpci5NZW1iZXIgbm9kZSA9IGRlZmluaXRpb24ubm9kZTsKICAgICAgICBpZiAobm9kZSBpcyBpci5Db25zdHJ1Y3RvcikgewogICAgICAgICAgcmV0dXJuIG5vZGUuZnVuY3Rpb247CiAgICAgICAgfSBlbHNlIGlmIChub2RlIGlzIGlyLlByb2NlZHVyZSkgewogICAgICAgICAgcmV0dXJuIG5vZGUuZnVuY3Rpb247CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1lbWJlcktpbmQuY2xvc3VyZUNhbGw6CiAgICAgICAgaXIuTG9jYWxGdW5jdGlvbiBub2RlID0gZGVmaW5pdGlvbi5ub2RlOwogICAgICAgIHJldHVybiBub2RlLmZ1bmN0aW9uOwogICAgICBjYXNlIE1lbWJlcktpbmQuY2xvc3VyZUZpZWxkOgogICAgICBjYXNlIE1lbWJlcktpbmQuc2lnbmF0dXJlOgogICAgICBjYXNlIE1lbWJlcktpbmQuZ2VuZXJhdG9yQm9keToKICAgICAgICBicmVhazsKICAgIH0KICAgIGZhaWxlZEF0KG1lbWJlciwgJ1VuZXhwZWN0ZWQgbWVtYmVyIGRlZmluaXRpb246ICRkZWZpbml0aW9uLicpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgYGNhbGxgIG1ldGhvZCBvbiBbY2xzXSBvciB0aGUgYG5vU3VjaE1ldGhvZGAgaWYgW2Nsc10gZG9lc24ndAogIC8vLyBpbXBsZW1lbnQgYGNhbGxgLgogIEZ1bmN0aW9uRW50aXR5IGxvb2t1cENhbGxNZXRob2QoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiA9CiAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5sb29rdXBDbGFzc01lbWJlcihjbHMsIElkZW50aWZpZXJzLmNhbGwpOwogICAgaWYgKGZ1bmN0aW9uID09IG51bGwgfHwgZnVuY3Rpb24uaXNBYnN0cmFjdCkgewogICAgICBmdW5jdGlvbiA9CiAgICAgICAgICBfZWxlbWVudEVudmlyb25tZW50Lmxvb2t1cENsYXNzTWVtYmVyKGNscywgSWRlbnRpZmllcnMubm9TdWNoTWV0aG9kXyk7CiAgICB9CiAgICByZXR1cm4gZnVuY3Rpb247CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFuYWx5emUoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIGlmIChhbmFseXplZEVsZW1lbnRzLmNvbnRhaW5zKGVsZW1lbnQpKSByZXR1cm47CiAgICBhbmFseXplZEVsZW1lbnRzLmFkZChlbGVtZW50KTsKCiAgICBpci5Ob2RlIGJvZHkgPSBjb21wdXRlTWVtYmVyQm9keShlbGVtZW50KTsKCiAgICBUeXBlSW5mb3JtYXRpb24gdHlwZTsKICAgIHJlcG9ydGVyLndpdGhDdXJyZW50RWxlbWVudChlbGVtZW50LCAoKSB7CiAgICAgIHR5cGUgPSBjb21wdXRlTWVtYmVyVHlwZUluZm9ybWF0aW9uKGVsZW1lbnQsIGJvZHkpOwogICAgfSk7CiAgICBhZGRlZEluR3JhcGgrKzsKCiAgICBpZiAoZWxlbWVudC5pc0ZpZWxkKSB7CiAgICAgIEZpZWxkRW50aXR5IGZpZWxkID0gZWxlbWVudDsKICAgICAgaWYgKCFmaWVsZC5pc0Fzc2lnbmFibGUpIHsKICAgICAgICAvLyBJZiBbZWxlbWVudF0gaXMgZmluYWwgYW5kIGhhcyBhbiBpbml0aWFsaXplciwgd2UgcmVjb3JkCiAgICAgICAgLy8gdGhlIGluZmVycmVkIHR5cGUuCiAgICAgICAgaWYgKGJvZHkgIT0gbnVsbCkgewogICAgICAgICAgaWYgKHR5cGUgaXMhIExpc3RUeXBlSW5mb3JtYXRpb24gJiYgdHlwZSBpcyEgTWFwVHlwZUluZm9ybWF0aW9uKSB7CiAgICAgICAgICAgIC8vIEZvciBub24tY29udGFpbmVyIHR5cGVzLCB0aGUgY29uc3RhbnQgaGFuZGxlciBkb2VzCiAgICAgICAgICAgIC8vIGNvbnN0YW50IGZvbGRpbmcgdGhhdCBjb3VsZCBnaXZlIG1vcmUgcHJlY2lzZSByZXN1bHRzLgogICAgICAgICAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gZ2V0RmllbGRDb25zdGFudChmaWVsZCk7CiAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgaWYgKHZhbHVlLmlzRnVuY3Rpb24pIHsKICAgICAgICAgICAgICAgIEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZSBmdW5jdGlvbkNvbnN0YW50ID0gdmFsdWU7CiAgICAgICAgICAgICAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiA9IGZ1bmN0aW9uQ29uc3RhbnQuZWxlbWVudDsKICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlcy5hbGxvY2F0ZUNsb3N1cmUoZnVuY3Rpb24pOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBBbHRob3VnaCB3ZSBtaWdodCBmaW5kIGEgYmV0dGVyIHR5cGUsIHdlIGhhdmUgdG8ga2VlcAogICAgICAgICAgICAgICAgLy8gdGhlIG9sZCB0eXBlIGFyb3VuZCB0byBlbnN1cmUgdGhhdCB3ZSBnZXQgYSBjb21wbGV0ZSB2aWV3CiAgICAgICAgICAgICAgICAvLyBvZiB0aGUgdHlwZSBncmFwaCBhbmQgZG8gbm90IGRyb3AgYW55IGZsb3cgZWRnZXMuCiAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHJlZmluZWRUeXBlID0KICAgICAgICAgICAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmNvbXB1dGVBYnN0cmFjdFZhbHVlRm9yQ29uc3RhbnQodmFsdWUpOwogICAgICAgICAgICAgICAgdHlwZSA9IG5ldyBOYXJyb3dUeXBlSW5mb3JtYXRpb24oCiAgICAgICAgICAgICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbiwgdHlwZSwgcmVmaW5lZFR5cGUpOwogICAgICAgICAgICAgICAgdHlwZXMuYWxsb2NhdGVkVHlwZXMuYWRkKHR5cGUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmVjb3JkVHlwZU9mRmllbGQoZmllbGQsIHR5cGUpOwogICAgICAgIH0gZWxzZSBpZiAoIWVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlcikgewogICAgICAgICAgcmVjb3JkVHlwZU9mRmllbGQoZmllbGQsIHR5cGVzLm51bGxUeXBlKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoYm9keSA9PSBudWxsKSB7CiAgICAgICAgLy8gT25seSB1cGRhdGUgdHlwZXMgb2Ygc3RhdGljIGZpZWxkcyBpZiB0aGVyZSBpcyBubwogICAgICAgIC8vIGFzc2lnbm1lbnQuIEluc3RhbmNlIGZpZWxkcyBhcmUgZGVhbHQgd2l0aCBpbiB0aGUgY29uc3RydWN0b3IuCiAgICAgICAgaWYgKGVsZW1lbnQuaXNTdGF0aWMgfHwgZWxlbWVudC5pc1RvcExldmVsKSB7CiAgICAgICAgICByZWNvcmRUeXBlT2ZGaWVsZChmaWVsZCwgdHlwZSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHJlY29yZFR5cGVPZkZpZWxkKGZpZWxkLCB0eXBlKTsKICAgICAgfQogICAgICBpZiAoKGVsZW1lbnQuaXNTdGF0aWMgfHwgZWxlbWVudC5pc1RvcExldmVsKSAmJgogICAgICAgICAgYm9keSAhPSBudWxsICYmCiAgICAgICAgICAhZWxlbWVudC5pc0NvbnN0KSB7CiAgICAgICAgaWYgKGlzRmllbGRJbml0aWFsaXplclBvdGVudGlhbGx5TnVsbChlbGVtZW50LCBib2R5KSkgewogICAgICAgICAgcmVjb3JkVHlwZU9mRmllbGQoZmllbGQsIHR5cGVzLm51bGxUeXBlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIEZ1bmN0aW9uRW50aXR5IG1ldGhvZCA9IGVsZW1lbnQ7CiAgICAgIHJlY29yZFJldHVyblR5cGUobWV0aG9kLCB0eXBlKTsKICAgIH0KICB9CgogIC8vLyBWaXNpdHMgW2JvZHldIHRvIGNvbXB1dGUgdGhlIFtUeXBlSW5mb3JtYXRpb25dIG5vZGUgZm9yIFttZW1iZXJdLgogIFR5cGVJbmZvcm1hdGlvbiBjb21wdXRlTWVtYmVyVHlwZUluZm9ybWF0aW9uKAogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyLCBpci5Ob2RlIGJvZHkpIHsKICAgIEtlcm5lbFR5cGVHcmFwaEJ1aWxkZXIgdmlzaXRvciA9IG5ldyBLZXJuZWxUeXBlR3JhcGhCdWlsZGVyKAogICAgICAgIG9wdGlvbnMsCiAgICAgICAgY2xvc2VkV29ybGQsCiAgICAgICAgdGhpcywKICAgICAgICBtZW1iZXIsCiAgICAgICAgYm9keSwKICAgICAgICBjbG9zZWRXb3JsZC5nbG9iYWxMb2NhbHNNYXAuZ2V0TG9jYWxzTWFwKG1lbWJlciksCiAgICAgICAgY2xvc2VkV29ybGQuZWxlbWVudE1hcC5nZXRTdGF0aWNUeXBlUHJvdmlkZXIobWVtYmVyKSk7CiAgICByZXR1cm4gdmlzaXRvci5ydW4oKTsKICB9CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgW2luaXRpYWxpemVyXSBvZiB0aGUgbm9uLWNvbnN0IHN0YXRpYyBvciB0b3AtbGV2ZWwKICAvLy8gW2ZpZWxkXSBpcyBwb3RlbnRpYWxseSBgbnVsbGAuCiAgYm9vbCBpc0ZpZWxkSW5pdGlhbGl6ZXJQb3RlbnRpYWxseU51bGwoCiAgICAgIEZpZWxkRW50aXR5IGZpZWxkLCBpci5Ob2RlIGluaXRpYWxpemVyKSB7CiAgICAvLyBUT0RPKDEzNDI5KTogV2UgY291bGQgZG8gYmV0dGVyIGhlcmUgYnkgdXNpbmcgdGhlCiAgICAvLyBjb25zdGFudCBoYW5kbGVyIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBhIGxhenkgZmllbGQgb3Igbm90LgogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSW1wbGVtZW50IHRoZSBhZC1ob2MgY2hlY2sgaW4gYXN0IGluZmVycmVyPyBUaGlzCiAgICAvLyBtaW1pY2tzIHRoYXQgYXN0IGluZmVycmVyIHdoaWNoIHJldHVybiBgdHJ1ZWAgZm9yIFthc3QuU2VuZF0gYW5kCiAgICAvLyBub24tY29uc3QgW2FzdC5OZXdFeHByZXNzaW9uXS4KICAgIGlmIChpbml0aWFsaXplciBpcyBpci5NZXRob2RJbnZvY2F0aW9uIHx8CiAgICAgICAgaW5pdGlhbGl6ZXIgaXMgaXIuUHJvcGVydHlHZXQgfHwKICAgICAgICBpbml0aWFsaXplciBpcyBpci5Qcm9wZXJ0eVNldCB8fAogICAgICAgIGluaXRpYWxpemVyIGlzIGlyLlN0YXRpY0ludm9jYXRpb24gfHwKICAgICAgICBpbml0aWFsaXplciBpcyBpci5TdGF0aWNHZXQgfHwKICAgICAgICBpbml0aWFsaXplciBpcyBpci5TdGF0aWNTZXQgfHwKICAgICAgICBpbml0aWFsaXplciBpcyBpci5MZXQgfHwKICAgICAgICBpbml0aWFsaXplciBpcyBpci5Db25zdHJ1Y3Rvckludm9jYXRpb24gJiYgIWluaXRpYWxpemVyLmlzQ29uc3QpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgW0NvbnN0YW50VmFsdWVdIGZvciB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBbZmllbGRdLCBvcgogIC8vLyBgbnVsbGAgaWYgdGhlIGluaXRpYWxpemVyIGlzIG5vdCBhIGNvbnN0YW50IHZhbHVlLgogIENvbnN0YW50VmFsdWUgZ2V0RmllbGRDb25zdGFudChGaWVsZEVudGl0eSBmaWVsZCkgewogICAgcmV0dXJuIGNsb3NlZFdvcmxkLmZpZWxkQW5hbHlzaXMuZ2V0RmllbGREYXRhKGZpZWxkKS5pbml0aWFsVmFsdWU7CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2Nsc10gaGFzIGEgJ2NhbGwnIG1ldGhvZC4KICBib29sIGhhc0NhbGxUeXBlKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGNsb3NlZFdvcmxkLmVsZW1lbnRNYXAudHlwZXMKICAgICAgICAgICAgLmdldENhbGxUeXBlKGNsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShjbHMpKSAhPQogICAgICAgIG51bGw7CiAgfQoKICB2b2lkIHByb2Nlc3NMb29wSW5mb3JtYXRpb24oKSB7CiAgICB0eXBlcy5hbGxvY2F0ZWRDYWxscy5mb3JFYWNoKChDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICAgIGlmICghaW5mby5pbkxvb3ApIHJldHVybjsKICAgICAgLy8gV2UgY2FuJ3QgY29tcHV0ZSB0aGUgY2FsbGVlcyBvZiBjbG9zdXJlcywgbm8gbmV3IGluZm9ybWF0aW9uIHRvIGFkZC4KICAgICAgaWYgKGluZm8gaXMgQ2xvc3VyZUNhbGxTaXRlVHlwZUluZm9ybWF0aW9uKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChpbmZvIGlzIFN0YXRpY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKSB7CiAgICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IGluZm8uY2FsbGVkRWxlbWVudDsKICAgICAgICBpbmZlcnJlZERhdGFCdWlsZGVyLmFkZEZ1bmN0aW9uQ2FsbGVkSW5Mb29wKG1lbWJlcik7CiAgICAgIH0gZWxzZSBpZiAoaW5mby5tYXNrICE9IG51bGwgJiYKICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uY29udGFpbnNBbGwoaW5mby5tYXNrKS5pc0RlZmluaXRlbHlGYWxzZSkgewogICAgICAgIC8vIEZvciBpbnN0YW5jZSBtZXRob2RzLCB3ZSBvbmx5IHJlZ2lzdGVyIGEgc2VsZWN0b3IgY2FsbGVkIGluIGEKICAgICAgICAvLyBsb29wIGlmIGl0IGlzIGEgdHlwZWQgc2VsZWN0b3IsIHRvIGF2b2lkIG1hcmtpbmcgdG9vIG1hbnkKICAgICAgICAvLyBtZXRob2RzIGFzIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBhIGxvb3AuIFRoaXMgY3V0cyBkb3duCiAgICAgICAgLy8gb24gdGhlIGNvZGUgYmxvYXQuCiAgICAgICAgaW5mby5jYWxsZWVzLmZvckVhY2goKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICAgICAgICBpbmZlcnJlZERhdGFCdWlsZGVyLmFkZEZ1bmN0aW9uQ2FsbGVkSW5Mb29wKGVsZW1lbnQpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9KTsKICB9CgogIHZvaWQgcmVmaW5lKCkgewogICAgcHJvZ3Jlc3Muc3RhcnRQaGFzZSgpOwogICAgd2hpbGUgKCF3b3JrUXVldWUuaXNFbXB0eSkgewogICAgICBwcm9ncmVzcy5zaG93UHJvZ3Jlc3MoJ0luZmVycmVkICcsIG92ZXJhbGxSZWZpbmVDb3VudCwgJyB0eXBlcy4nKTsKICAgICAgVHlwZUluZm9ybWF0aW9uIGluZm8gPSB3b3JrUXVldWUucmVtb3ZlKCk7CiAgICAgIEFic3RyYWN0VmFsdWUgb2xkVHlwZSA9IGluZm8udHlwZTsKICAgICAgQWJzdHJhY3RWYWx1ZSBuZXdUeXBlID0gaW5mby5yZWZpbmUodGhpcyk7CiAgICAgIC8vIENoZWNrIHRoYXQgcmVmaW5lbWVudCBoYXMgbm90IGFjY2lkZW50YWxseSBjaGFuZ2VkIHRoZSB0eXBlLgogICAgICBhc3NlcnQob2xkVHlwZSA9PSBpbmZvLnR5cGUpOwogICAgICBpZiAoaW5mby5hYmFuZG9uSW5mZXJlbmNpbmcpIGluZm8uZG9Ob3RFbnF1ZXVlID0gdHJ1ZTsKICAgICAgaWYgKChpbmZvLnR5cGUgPSBuZXdUeXBlKSAhPSBvbGRUeXBlKSB7CiAgICAgICAgb3ZlcmFsbFJlZmluZUNvdW50Kys7CiAgICAgICAgaW5mby5yZWZpbmVDb3VudCsrOwogICAgICAgIGlmIChpbmZvLnJlZmluZUNvdW50ID4gTUFYX0NIQU5HRV9DT1VOVCkgewogICAgICAgICAgaWYgKGRlYnVnLkFOT01BTFlfV0FSTikgewogICAgICAgICAgICBwcmludCgiQU5PTUFMWSBXQVJOSU5HOiBtYXggcmVmaW5lbWVudCByZWFjaGVkIGZvciAkaW5mbyIpOwogICAgICAgICAgfQogICAgICAgICAgaW5mby5naXZlVXAodGhpcyk7CiAgICAgICAgICBpbmZvLnR5cGUgPSBpbmZvLnJlZmluZSh0aGlzKTsKICAgICAgICAgIGluZm8uZG9Ob3RFbnF1ZXVlID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgd29ya1F1ZXVlLmFkZEFsbChpbmZvLnVzZXJzKTsKICAgICAgICBpZiAoaW5mby5oYXNTdGFibGVUeXBlKHRoaXMpKSB7CiAgICAgICAgICBpbmZvLnN0YWJpbGl6ZSh0aGlzKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgYnVpbGRXb3JrUXVldWUoKSB7CiAgICB3b3JrUXVldWUuYWRkQWxsKHR5cGVzLm9yZGVyZWRUeXBlSW5mb3JtYXRpb25zKTsKICAgIHdvcmtRdWV1ZS5hZGRBbGwodHlwZXMuYWxsb2NhdGVkVHlwZXMpOwogICAgd29ya1F1ZXVlLmFkZEFsbCh0eXBlcy5hbGxvY2F0ZWRDbG9zdXJlcyk7CiAgICB3b3JrUXVldWUuYWRkQWxsKHR5cGVzLmFsbG9jYXRlZENhbGxzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdXBkYXRlUGFyYW1ldGVyQXNzaWdubWVudHMoVHlwZUluZm9ybWF0aW9uIGNhbGxlciwgTWVtYmVyRW50aXR5IGNhbGxlZSwKICAgICAgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzLCBTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSBtYXNrLAogICAgICB7Ym9vbCByZW1vdmUsIGJvb2wgYWRkVG9RdWV1ZTogdHJ1ZX0pIHsKICAgIGlmIChjYWxsZWUubmFtZSA9PSBJZGVudGlmaWVycy5ub1N1Y2hNZXRob2RfKSByZXR1cm47CiAgICBpZiAoY2FsbGVlLmlzRmllbGQpIHsKICAgICAgaWYgKHNlbGVjdG9yLmlzU2V0dGVyKSB7CiAgICAgICAgRWxlbWVudFR5cGVJbmZvcm1hdGlvbiBpbmZvID0gdHlwZXMuZ2V0SW5mZXJyZWRUeXBlT2ZNZW1iZXIoY2FsbGVlKTsKICAgICAgICBpZiAocmVtb3ZlKSB7CiAgICAgICAgICBpbmZvLnJlbW92ZUFzc2lnbm1lbnQoYXJndW1lbnRzLnBvc2l0aW9uYWxbMF0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbmZvLmFkZEFzc2lnbm1lbnQoYXJndW1lbnRzLnBvc2l0aW9uYWxbMF0pOwogICAgICAgIH0KICAgICAgICBpZiAoYWRkVG9RdWV1ZSkgd29ya1F1ZXVlLmFkZChpbmZvKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChjYWxsZWUuaXNHZXR0ZXIpIHsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmIChzZWxlY3RvciAhPSBudWxsICYmIHNlbGVjdG9yLmlzR2V0dGVyKSB7CiAgICAgIC8vIFdlIGFyZSB0ZWFyaW5nIGEgZnVuY3Rpb24gb2ZmIGFuZCB0aHVzIGNyZWF0ZSBhIGNsb3N1cmUuCiAgICAgIGFzc2VydChjYWxsZWUuaXNGdW5jdGlvbik7CiAgICAgIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBpbmZvID0gdHlwZXMuZ2V0SW5mZXJyZWRUeXBlT2ZNZW1iZXIoY2FsbGVlKTsKICAgICAgaWYgKHJlbW92ZSkgewogICAgICAgIGluZm8uY2xvc3VyaXplZENvdW50LS07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW5mby5jbG9zdXJpemVkQ291bnQrKzsKICAgICAgICBpZiAoY2FsbGVlLmlzU3RhdGljIHx8IGNhbGxlZS5pc1RvcExldmVsKSB7CiAgICAgICAgICB0eXBlcy5hbGxvY2F0ZWRDbG9zdXJlcy5hZGQoaW5mbyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIFdlIGFkZCB0aGUgY2FsbC1zaXRlIHR5cGUgaW5mb3JtYXRpb24gaGVyZSBzbyB0aGF0IHdlCiAgICAgICAgICAvLyBjYW4gYmVuZWZpdCBmcm9tIGZ1cnRoZXIgcmVmaW5lbWVudCBvZiB0aGUgc2VsZWN0b3IuCiAgICAgICAgICB0eXBlcy5hbGxvY2F0ZWRDbG9zdXJlcy5hZGQoY2FsbGVyKTsKICAgICAgICB9CiAgICAgICAgdHlwZXMuc3RyYXRlZ3kuZm9yRWFjaFBhcmFtZXRlcihjYWxsZWUsIChMb2NhbCBwYXJhbWV0ZXIpIHsKICAgICAgICAgIFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbiBpbmZvID0KICAgICAgICAgICAgICB0eXBlcy5nZXRJbmZlcnJlZFR5cGVPZlBhcmFtZXRlcihwYXJhbWV0ZXIpOwogICAgICAgICAgaW5mby50YWdBc1RlYXJPZmZDbG9zdXJlUGFyYW1ldGVyKHRoaXMpOwogICAgICAgICAgaWYgKGFkZFRvUXVldWUpIHdvcmtRdWV1ZS5hZGQoaW5mbyk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIEZ1bmN0aW9uRW50aXR5IG1ldGhvZCA9IGNhbGxlZTsKICAgICAgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSA9IG1ldGhvZC5wYXJhbWV0ZXJTdHJ1Y3R1cmU7CiAgICAgIGludCBwYXJhbWV0ZXJJbmRleCA9IDA7CiAgICAgIHR5cGVzLnN0cmF0ZWd5LmZvckVhY2hQYXJhbWV0ZXIoY2FsbGVlLCAoTG9jYWwgcGFyYW1ldGVyKSB7CiAgICAgICAgVHlwZUluZm9ybWF0aW9uIHR5cGU7CiAgICAgICAgaWYgKHBhcmFtZXRlckluZGV4IDwgcGFyYW1ldGVyU3RydWN0dXJlLnJlcXVpcmVkUGFyYW1ldGVycykgewogICAgICAgICAgdHlwZSA9IGFyZ3VtZW50cy5wb3NpdGlvbmFsW3BhcmFtZXRlckluZGV4XTsKICAgICAgICB9IGVsc2UgaWYgKHBhcmFtZXRlclN0cnVjdHVyZS5uYW1lZFBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgewogICAgICAgICAgdHlwZSA9IGFyZ3VtZW50cy5uYW1lZFtwYXJhbWV0ZXIubmFtZV07CiAgICAgICAgfSBlbHNlIGlmIChwYXJhbWV0ZXJJbmRleCA8IGFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCkgewogICAgICAgICAgdHlwZSA9IGFyZ3VtZW50cy5wb3NpdGlvbmFsW3BhcmFtZXRlckluZGV4XTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGUgPT0gbnVsbCkgdHlwZSA9IGdldERlZmF1bHRUeXBlT2ZQYXJhbWV0ZXIocGFyYW1ldGVyKTsKICAgICAgICBUeXBlSW5mb3JtYXRpb24gaW5mbyA9IHR5cGVzLmdldEluZmVycmVkVHlwZU9mUGFyYW1ldGVyKHBhcmFtZXRlcik7CiAgICAgICAgaWYgKHJlbW92ZSkgewogICAgICAgICAgaW5mby5yZW1vdmVBc3NpZ25tZW50KHR5cGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbmZvLmFkZEFzc2lnbm1lbnQodHlwZSk7CiAgICAgICAgfQogICAgICAgIHBhcmFtZXRlckluZGV4Kys7CiAgICAgICAgaWYgKGFkZFRvUXVldWUpIHdvcmtRdWV1ZS5hZGQoaW5mbyk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXREZWZhdWx0VHlwZU9mUGFyYW1ldGVyKExvY2FsIHBhcmFtZXRlciwgVHlwZUluZm9ybWF0aW9uIHR5cGUsCiAgICAgIHtib29sIGlzSW5zdGFuY2VNZW1iZXJ9KSB7CiAgICBhc3NlcnQoCiAgICAgICAgdHlwZSAhPSBudWxsLCBmYWlsZWRBdChwYXJhbWV0ZXIsICJObyBkZWZhdWx0IHR5cGUgZm9yICRwYXJhbWV0ZXIuIikpOwogICAgVHlwZUluZm9ybWF0aW9uIGV4aXN0aW5nID0gZGVmYXVsdFR5cGVPZlBhcmFtZXRlcltwYXJhbWV0ZXJdOwogICAgZGVmYXVsdFR5cGVPZlBhcmFtZXRlcltwYXJhbWV0ZXJdID0gdHlwZTsKICAgIFR5cGVJbmZvcm1hdGlvbiBpbmZvID0gdHlwZXMuZ2V0SW5mZXJyZWRUeXBlT2ZQYXJhbWV0ZXIocGFyYW1ldGVyKTsKICAgIGlmIChleGlzdGluZyAhPSBudWxsICYmIGV4aXN0aW5nIGlzIFBsYWNlaG9sZGVyVHlwZUluZm9ybWF0aW9uKSB7CiAgICAgIC8vIFJlcGxhY2UgcmVmZXJlbmNlcyB0byBbZXhpc3RpbmddIHRvIHVzZSBbdHlwZV0gaW5zdGVhZC4KICAgICAgaWYgKGlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgICBQYXJhbWV0ZXJBc3NpZ25tZW50cyBhc3NpZ25tZW50cyA9IGluZm8uYXNzaWdubWVudHM7CiAgICAgICAgYXNzaWdubWVudHMucmVwbGFjZShleGlzdGluZywgdHlwZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgTGlzdDxUeXBlSW5mb3JtYXRpb24+IGFzc2lnbm1lbnRzID0gaW5mby5hc3NpZ25tZW50czsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFzc2lnbm1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBpZiAoYXNzaWdubWVudHNbaV0gPT0gZXhpc3RpbmcpIHsKICAgICAgICAgICAgYXNzaWdubWVudHNbaV0gPSB0eXBlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICAvLyBBbHNvIGZvcndhcmQgYWxsIHVzZXJzLgogICAgICB0eXBlLmFkZFVzZXJzT2YoZXhpc3RpbmcpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KGV4aXN0aW5nID09IG51bGwpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIGdldERlZmF1bHRUeXBlT2ZQYXJhbWV0ZXIoTG9jYWwgcGFyYW1ldGVyKSB7CiAgICByZXR1cm4gZGVmYXVsdFR5cGVPZlBhcmFtZXRlci5wdXRJZkFic2VudChwYXJhbWV0ZXIsICgpIHsKICAgICAgcmV0dXJuIG5ldyBQbGFjZWhvbGRlclR5cGVJbmZvcm1hdGlvbigKICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4sIHR5cGVzLmN1cnJlbnRNZW1iZXIpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc0FscmVhZHlDb21wdXRlZFR5cGVPZlBhcmFtZXRlckRlZmF1bHQoTG9jYWwgcGFyYW1ldGVyKSB7CiAgICBUeXBlSW5mb3JtYXRpb24gc2VlbiA9IGRlZmF1bHRUeXBlT2ZQYXJhbWV0ZXJbcGFyYW1ldGVyXTsKICAgIHJldHVybiAoc2VlbiAhPSBudWxsICYmIHNlZW4gaXMhIFBsYWNlaG9sZGVyVHlwZUluZm9ybWF0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB0eXBlT2ZQYXJhbWV0ZXIoTG9jYWwgZWxlbWVudCkgewogICAgcmV0dXJuIHR5cGVzLmdldEluZmVycmVkVHlwZU9mUGFyYW1ldGVyKGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHR5cGVPZk1lbWJlcihNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgaWYgKGVsZW1lbnQgaXMgRnVuY3Rpb25FbnRpdHkpIHJldHVybiB0eXBlcy5mdW5jdGlvblR5cGU7CiAgICByZXR1cm4gdHlwZXMuZ2V0SW5mZXJyZWRUeXBlT2ZNZW1iZXIoZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gcmV0dXJuVHlwZU9mTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoZWxlbWVudCBpcyEgRnVuY3Rpb25FbnRpdHkpIHJldHVybiB0eXBlcy5keW5hbWljVHlwZTsKICAgIHJldHVybiB0eXBlcy5nZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVjb3JkVHlwZU9mRmllbGQoRmllbGRFbnRpdHkgZWxlbWVudCwgVHlwZUluZm9ybWF0aW9uIHR5cGUpIHsKICAgIHR5cGVzLmdldEluZmVycmVkVHlwZU9mTWVtYmVyKGVsZW1lbnQpLmFkZEFzc2lnbm1lbnQodHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlY29yZFJldHVyblR5cGUoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCwgVHlwZUluZm9ybWF0aW9uIHR5cGUpIHsKICAgIFR5cGVJbmZvcm1hdGlvbiBpbmZvID0gdHlwZXMuZ2V0SW5mZXJyZWRUeXBlT2ZNZW1iZXIoZWxlbWVudCk7CiAgICBpZiAoZWxlbWVudC5uYW1lID09ICc9PScpIHsKICAgICAgLy8gRXZlbiBpZiB4Lj09IGRvZXNuJ3QgcmV0dXJuIGEgYm9vbCwgJ3ggPT0gbnVsbCcgZXZhbHVhdGVzIHRvICdmYWxzZScuCiAgICAgIGluZm8uYWRkQXNzaWdubWVudCh0eXBlcy5ib29sVHlwZSk7CiAgICB9CiAgICAvLyBUT0RPKG5nZW9mZnJheSk6IENsZWFuIHVwLiBXZSBkbyB0aGVzZSBjaGVja3MgYmVjYXVzZQogICAgLy8gW1NpbXBsZVR5cGVzSW5mZXJyZXJdIGRlYWxzIHdpdGggdHdvIGRpZmZlcmVudCBpbmZlcnJlcnMuCiAgICBpZiAodHlwZSA9PSBudWxsKSByZXR1cm47CiAgICBpZiAoaW5mby5hc3NpZ25tZW50cy5pc0VtcHR5KSBpbmZvLmFkZEFzc2lnbm1lbnQodHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gYWRkUmV0dXJuVHlwZUZvck1ldGhvZCgKICAgICAgRnVuY3Rpb25FbnRpdHkgZWxlbWVudCwgVHlwZUluZm9ybWF0aW9uIHVudXNlZCwgVHlwZUluZm9ybWF0aW9uIG5ld1R5cGUpIHsKICAgIFR5cGVJbmZvcm1hdGlvbiB0eXBlID0gdHlwZXMuZ2V0SW5mZXJyZWRUeXBlT2ZNZW1iZXIoZWxlbWVudCk7CiAgICAvLyBUT0RPKG5nZW9mZnJheSk6IENsZWFuIHVwLiBXZSBkbyB0aGlzIGNoZWNrIGJlY2F1c2UKICAgIC8vIFtTaW1wbGVUeXBlc0luZmVycmVyXSBkZWFscyB3aXRoIHR3byBkaWZmZXJlbnQgaW5mZXJyZXJzLgogICAgaWYgKGVsZW1lbnQgaXMgQ29uc3RydWN0b3JFbnRpdHkgJiYgZWxlbWVudC5pc0dlbmVyYXRpdmVDb25zdHJ1Y3RvcikgewogICAgICByZXR1cm4gdHlwZTsKICAgIH0KICAgIHR5cGUuYWRkQXNzaWdubWVudChuZXdUeXBlKTsKICAgIHJldHVybiB0eXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHJlZ2lzdGVyQ2FsbGVkTWVtYmVyKAogICAgICBPYmplY3Qgbm9kZSwKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgbWFzaywKICAgICAgTWVtYmVyRW50aXR5IGNhbGxlciwKICAgICAgTWVtYmVyRW50aXR5IGNhbGxlZSwKICAgICAgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzLAogICAgICBTaWRlRWZmZWN0c0J1aWxkZXIgc2lkZUVmZmVjdHNCdWlsZGVyLAogICAgICBib29sIGluTG9vcCkgewogICAgQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbyA9IG5ldyBTdGF0aWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbigKICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICAgIHR5cGVzLmN1cnJlbnRNZW1iZXIsCiAgICAgICAgbm9kZSwKICAgICAgICBjYWxsZXIsCiAgICAgICAgY2FsbGVlLAogICAgICAgIHNlbGVjdG9yLAogICAgICAgIG1hc2ssCiAgICAgICAgYXJndW1lbnRzLAogICAgICAgIGluTG9vcCk7CiAgICAvLyBJZiB0aGlzIGNsYXNzIGhhcyBhICdjYWxsJyBtZXRob2QgdGhlbiB3ZSBoYXZlIGVzc2VudGlhbGx5IGNyZWF0ZWQgYQogICAgLy8gY2xvc3VyZSBoZXJlLiBSZWdpc3RlciBpdCBhcyBzdWNoIHNvIHRoYXQgaXQgaXMgdHJhY2VkLgogICAgLy8gTm90ZTogd2UgZXhjbHVkZSBmYWN0b3J5IGNvbnN0cnVjdG9ycyBiZWNhdXNlIHRoZXkgZG9uJ3QgYWx3YXlzIGNyZWF0ZSBhbgogICAgLy8gaW5zdGFuY2Ugb2YgdGhlIHR5cGUuIFRoZXkgYXJlIHN0YXRpYyBtZXRob2RzIHRoYXQgZGVsZWdhdGUgdG8gc29tZSBvdGhlcgogICAgLy8gZ2VuZXJhdGl2ZSBjb25zdHJ1Y3RvciB0byBkbyB0aGUgYWN0dWFsIGNyZWF0aW9uIG9mIHRoZSBvYmplY3QuCiAgICBpZiAoc2VsZWN0b3IgIT0gbnVsbCAmJgogICAgICAgIHNlbGVjdG9yLmlzQ2FsbCAmJgogICAgICAgIGNhbGxlZSBpcyBDb25zdHJ1Y3RvckVudGl0eSAmJgogICAgICAgIGNhbGxlZS5pc0dlbmVyYXRpdmVDb25zdHJ1Y3RvcikgewogICAgICBDbGFzc0VudGl0eSBjbHMgPSBjYWxsZWUuZW5jbG9zaW5nQ2xhc3M7CiAgICAgIGlmIChoYXNDYWxsVHlwZShjbHMpKSB7CiAgICAgICAgdHlwZXMuYWxsb2NhdGVkQ2xvc3VyZXMuYWRkKGluZm8pOwogICAgICB9CiAgICB9CiAgICBpbmZvLmFkZFRvR3JhcGgodGhpcyk7CiAgICB0eXBlcy5hbGxvY2F0ZWRDYWxscy5hZGQoaW5mbyk7CiAgICB1cGRhdGVTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c0J1aWxkZXIsIHNlbGVjdG9yLCBjYWxsZWUpOwogICAgcmV0dXJuIGluZm87CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gcmVnaXN0ZXJDYWxsZWRTZWxlY3RvcigKICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUsCiAgICAgIGlyLk5vZGUgbm9kZSwKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgbWFzaywKICAgICAgVHlwZUluZm9ybWF0aW9uIHJlY2VpdmVyVHlwZSwKICAgICAgTWVtYmVyRW50aXR5IGNhbGxlciwKICAgICAgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzLAogICAgICBTaWRlRWZmZWN0c0J1aWxkZXIgc2lkZUVmZmVjdHNCdWlsZGVyLAogICAgICB7Ym9vbCBpbkxvb3AsCiAgICAgIGJvb2wgaXNDb25kaXRpb25hbH0pIHsKICAgIGlmIChzZWxlY3Rvci5pc0Nsb3N1cmVDYWxsKSB7CiAgICAgIHJldHVybiByZWdpc3RlckNhbGxlZENsb3N1cmUobm9kZSwgc2VsZWN0b3IsIG1hc2ssIHJlY2VpdmVyVHlwZSwgY2FsbGVyLAogICAgICAgICAgYXJndW1lbnRzLCBzaWRlRWZmZWN0c0J1aWxkZXIsCiAgICAgICAgICBpbkxvb3A6IGluTG9vcCk7CiAgICB9CgogICAgaWYgKGNsb3NlZFdvcmxkLmluY2x1ZGVzQ2xvc3VyZUNhbGwoc2VsZWN0b3IsIG1hc2spKSB7CiAgICAgIHNpZGVFZmZlY3RzQnVpbGRlci5zZXRBbGxTaWRlRWZmZWN0c0FuZERlcGVuZHNPblNvbWV0aGluZygpOwogICAgfQogICAgY2xvc2VkV29ybGQubG9jYXRlTWVtYmVycyhzZWxlY3RvciwgbWFzaykuZm9yRWFjaCgoY2FsbGVlKSB7CiAgICAgIHVwZGF0ZVNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzQnVpbGRlciwgc2VsZWN0b3IsIGNhbGxlZSk7CiAgICB9KTsKCiAgICBDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvID0gbmV3IER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbigKICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICAgIHR5cGVzLmN1cnJlbnRNZW1iZXIsCiAgICAgICAgY2FsbFR5cGUsCiAgICAgICAgbm9kZSwKICAgICAgICBjYWxsZXIsCiAgICAgICAgc2VsZWN0b3IsCiAgICAgICAgbWFzaywKICAgICAgICByZWNlaXZlclR5cGUsCiAgICAgICAgYXJndW1lbnRzLAogICAgICAgIGluTG9vcCwKICAgICAgICBpc0NvbmRpdGlvbmFsKTsKCiAgICBpbmZvLmFkZFRvR3JhcGgodGhpcyk7CiAgICB0eXBlcy5hbGxvY2F0ZWRDYWxscy5hZGQoaW5mbyk7CiAgICByZXR1cm4gaW5mbzsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiByZWdpc3RlckF3YWl0KGlyLk5vZGUgbm9kZSwgVHlwZUluZm9ybWF0aW9uIGFyZ3VtZW50KSB7CiAgICBBd2FpdFR5cGVJbmZvcm1hdGlvbiBpbmZvID0gbmV3IEF3YWl0VHlwZUluZm9ybWF0aW9uKAogICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4sIHR5cGVzLmN1cnJlbnRNZW1iZXIsIG5vZGUpOwogICAgaW5mby5hZGRBc3NpZ25tZW50KGFyZ3VtZW50KTsKICAgIHR5cGVzLmFsbG9jYXRlZFR5cGVzLmFkZChpbmZvKTsKICAgIHJldHVybiBpbmZvOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHJlZ2lzdGVyWWllbGQoaXIuTm9kZSBub2RlLCBUeXBlSW5mb3JtYXRpb24gYXJndW1lbnQpIHsKICAgIFlpZWxkVHlwZUluZm9ybWF0aW9uIGluZm8gPSBuZXcgWWllbGRUeXBlSW5mb3JtYXRpb24oCiAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbiwgdHlwZXMuY3VycmVudE1lbWJlciwgbm9kZSk7CiAgICBpbmZvLmFkZEFzc2lnbm1lbnQoYXJndW1lbnQpOwogICAgdHlwZXMuYWxsb2NhdGVkVHlwZXMuYWRkKGluZm8pOwogICAgcmV0dXJuIGluZm87CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gcmVnaXN0ZXJDYWxsZWRDbG9zdXJlKAogICAgICBpci5Ob2RlIG5vZGUsCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIG1hc2ssCiAgICAgIFR5cGVJbmZvcm1hdGlvbiBjbG9zdXJlLAogICAgICBNZW1iZXJFbnRpdHkgY2FsbGVyLAogICAgICBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHMsCiAgICAgIFNpZGVFZmZlY3RzQnVpbGRlciBzaWRlRWZmZWN0c0J1aWxkZXIsCiAgICAgIHtib29sIGluTG9vcH0pIHsKICAgIHNpZGVFZmZlY3RzQnVpbGRlci5zZXRBbGxTaWRlRWZmZWN0c0FuZERlcGVuZHNPblNvbWV0aGluZygpOwogICAgQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbyA9IG5ldyBDbG9zdXJlQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oCiAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgICB0eXBlcy5jdXJyZW50TWVtYmVyLAogICAgICAgIG5vZGUsCiAgICAgICAgY2FsbGVyLAogICAgICAgIHNlbGVjdG9yLAogICAgICAgIG1hc2ssCiAgICAgICAgY2xvc3VyZSwKICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgaW5Mb29wKTsKICAgIGluZm8uYWRkVG9HcmFwaCh0aGlzKTsKICAgIHR5cGVzLmFsbG9jYXRlZENhbGxzLmFkZChpbmZvKTsKICAgIHJldHVybiBpbmZvOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjbG9zZSgpIHsKICAgIGZvciAoTWVtYmVyVHlwZUluZm9ybWF0aW9uIHR5cGVJbmZvcm1hdGlvbgogICAgICAgIGluIHR5cGVzLm1lbWJlclR5cGVJbmZvcm1hdGlvbnMudmFsdWVzKSB7CiAgICAgIHR5cGVJbmZvcm1hdGlvbi5jb21wdXRlSXNDYWxsZWRPbmNlKCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsZWFyKCkgewogICAgaWYgKHJldGFpbkRhdGFGb3JUZXN0aW5nKSByZXR1cm47CgogICAgdm9pZCBjbGVhbnVwKFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICAgIGluZm8uY2xlYW51cCgpOwogICAgfQoKICAgIHR5cGVzLmFsbG9jYXRlZENhbGxzLmZvckVhY2goY2xlYW51cCk7CiAgICB0eXBlcy5hbGxvY2F0ZWRDYWxscy5jbGVhcigpOwoKICAgIGRlZmF1bHRUeXBlT2ZQYXJhbWV0ZXIuY2xlYXIoKTsKCiAgICB0eXBlcy5wYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb25zLnZhbHVlcy5mb3JFYWNoKGNsZWFudXApOwogICAgdHlwZXMubWVtYmVyVHlwZUluZm9ybWF0aW9ucy52YWx1ZXMuZm9yRWFjaChjbGVhbnVwKTsKCiAgICB0eXBlcy5hbGxvY2F0ZWRUeXBlcy5mb3JFYWNoKGNsZWFudXApOwogICAgdHlwZXMuYWxsb2NhdGVkVHlwZXMuY2xlYXIoKTsKCiAgICB0eXBlcy5jb25jcmV0ZVR5cGVzLmNsZWFyKCk7CgogICAgdHlwZXMuYWxsb2NhdGVkQ2xvc3VyZXMuZm9yRWFjaChjbGVhbnVwKTsKICAgIHR5cGVzLmFsbG9jYXRlZENsb3N1cmVzLmNsZWFyKCk7CgogICAgYW5hbHl6ZWRFbGVtZW50cy5jbGVhcigpOwogICAgZ2VuZXJhdGl2ZUNvbnN0cnVjdG9yc0V4cG9zaW5nVGhpcy5jbGVhcigpOwoKICAgIHR5cGVzLmFsbG9jYXRlZE1hcHMudmFsdWVzLmZvckVhY2goY2xlYW51cCk7CiAgICB0eXBlcy5hbGxvY2F0ZWRTZXRzLnZhbHVlcy5mb3JFYWNoKGNsZWFudXApOwogICAgdHlwZXMuYWxsb2NhdGVkTGlzdHMudmFsdWVzLmZvckVhY2goY2xlYW51cCk7CgogICAgX21lbWJlckRhdGEuY2xlYXIoKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZ2V0Q2FsbGVyc09mRm9yVGVzdGluZyhNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGluZm8gPSB0eXBlcy5nZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihlbGVtZW50KTsKICAgIHJldHVybiBpbmZvLmNhbGxlcnNGb3JUZXN0aW5nOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHR5cGVPZk1lbWJlcldpdGhTZWxlY3RvcigKICAgICAgTWVtYmVyRW50aXR5IGVsZW1lbnQsIFNlbGVjdG9yIHNlbGVjdG9yKSB7CiAgICBpZiAoZWxlbWVudC5uYW1lID09IElkZW50aWZpZXJzLm5vU3VjaE1ldGhvZF8gJiYKICAgICAgICBzZWxlY3Rvci5uYW1lICE9IGVsZW1lbnQubmFtZSkgewogICAgICAvLyBBbiBpbnZvY2F0aW9uIGNhbiByZXNvbHZlIHRvIGEgW25vU3VjaE1ldGhvZF0sIGluIHdoaWNoIGNhc2UKICAgICAgLy8gd2UgZ2V0IHRoZSByZXR1cm4gdHlwZSBvZiBbbm9TdWNoTWV0aG9kXS4KICAgICAgcmV0dXJuIHJldHVyblR5cGVPZk1lbWJlcihlbGVtZW50KTsKICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuaXNHZXR0ZXIpIHsKICAgICAgaWYgKGVsZW1lbnQuaXNGdW5jdGlvbikgewogICAgICAgIC8vIFtmdW5jdGlvblR5cGVdIGlzIG51bGwgaWYgdGhlIGluZmVycmVyIGRpZCBub3QgcnVuLgogICAgICAgIHJldHVybiB0eXBlcy5mdW5jdGlvblR5cGUgPT0gbnVsbAogICAgICAgICAgICA/IHR5cGVzLmR5bmFtaWNUeXBlCiAgICAgICAgICAgIDogdHlwZXMuZnVuY3Rpb25UeXBlOwogICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuaXNGaWVsZCkgewogICAgICAgIHJldHVybiB0eXBlT2ZNZW1iZXIoZWxlbWVudCk7CiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5pc0dldHRlcikgewogICAgICAgIHJldHVybiByZXR1cm5UeXBlT2ZNZW1iZXIoZWxlbWVudCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KGZhbHNlLCBmYWlsZWRBdChlbGVtZW50LCAiVW5leHBlY3RlZCBtZW1iZXIgJGVsZW1lbnQiKSk7CiAgICAgICAgcmV0dXJuIHR5cGVzLmR5bmFtaWNUeXBlOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQuaXNHZXR0ZXIgfHwgZWxlbWVudC5pc0ZpZWxkKSB7CiAgICAgIGFzc2VydChzZWxlY3Rvci5pc0NhbGwgfHwgc2VsZWN0b3IuaXNTZXR0ZXIpOwogICAgICByZXR1cm4gdHlwZXMuZHluYW1pY1R5cGU7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gcmV0dXJuVHlwZU9mTWVtYmVyKGVsZW1lbnQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5GaWVsZEJlVXNlZEZvckdsb2JhbE9wdGltaXphdGlvbnMoRmllbGRFbnRpdHkgZWxlbWVudCkgewogICAgaWYgKGNsb3NlZFdvcmxkLmJhY2tlbmRVc2FnZS5pc0ZpZWxkVXNlZEJ5QmFja2VuZChlbGVtZW50KSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoKGVsZW1lbnQuaXNUb3BMZXZlbCB8fCBlbGVtZW50LmlzU3RhdGljKSAmJiAhZWxlbWVudC5pc0Fzc2lnbmFibGUpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY2FuRnVuY3Rpb25QYXJhbWV0ZXJzQmVVc2VkRm9yR2xvYmFsT3B0aW1pemF0aW9ucygKICAgICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pIHsKICAgIHJldHVybiAhY2xvc2VkV29ybGQuYmFja2VuZFVzYWdlLmlzRnVuY3Rpb25Vc2VkQnlCYWNrZW5kKGZ1bmN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgYXNzdW1lRHluYW1pYyhNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICByZXR1cm4gY2xvc2VkV29ybGQuYW5ub3RhdGlvbnNEYXRhLmhhc0Fzc3VtZUR5bmFtaWMobWVtYmVyKTsKICB9Cn0KCmNsYXNzIEtlcm5lbFR5cGVTeXN0ZW1TdHJhdGVneSBpbXBsZW1lbnRzIFR5cGVTeXN0ZW1TdHJhdGVneSB7CiAgZmluYWwgSnNDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CgogIEtlcm5lbFR5cGVTeXN0ZW1TdHJhdGVneSh0aGlzLl9jbG9zZWRXb3JsZCk7CgogIEpFbGVtZW50RW52aXJvbm1lbnQgZ2V0IF9lbGVtZW50RW52aXJvbm1lbnQgPT4KICAgICAgX2Nsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjaGVja0NsYXNzRW50aXR5KENsYXNzRW50aXR5IGNscykgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjaGVja01hcE5vZGUoaXIuTm9kZSBub2RlKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGNoZWNrU2V0Tm9kZShpci5Ob2RlIG5vZGUpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgY2hlY2tMaXN0Tm9kZShpci5Ob2RlIG5vZGUpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgY2hlY2tMb29wUGhpTm9kZShpci5Ob2RlIG5vZGUpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgY2hlY2tQaGlOb2RlKGlyLk5vZGUgbm9kZSkgPT4KICAgICAgbm9kZSA9PSBudWxsIHx8IG5vZGUgaXMgaXIuVHJ5Q2F0Y2ggfHwgbm9kZSBpcyBpci5UcnlGaW5hbGx5OwoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hQYXJhbWV0ZXIoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24sIHZvaWQgZihMb2NhbCBwYXJhbWV0ZXIpKSB7CiAgICBmb3JFYWNoT3JkZXJlZFBhcmFtZXRlckFzTG9jYWwoCiAgICAgICAgX2Nsb3NlZFdvcmxkLmdsb2JhbExvY2Fsc01hcCwgX2Nsb3NlZFdvcmxkLmVsZW1lbnRNYXAsIGZ1bmN0aW9uLAogICAgICAgIChMb2NhbCBwYXJhbWV0ZXIsIHtib29sIGlzRWxpZGVkfSkgewogICAgICBmKHBhcmFtZXRlcik7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbiBjcmVhdGVQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24oCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgY292YXJpYW50IEpMb2NhbCBwYXJhbWV0ZXIsCiAgICAgIFR5cGVTeXN0ZW0gdHlwZXMpIHsKICAgIE1lbWJlckVudGl0eSBjb250ZXh0ID0gcGFyYW1ldGVyLm1lbWJlckNvbnRleHQ7CiAgICBLZXJuZWxUb0xvY2Fsc01hcCBsb2NhbHNNYXAgPQogICAgICAgIF9jbG9zZWRXb3JsZC5nbG9iYWxMb2NhbHNNYXAuZ2V0TG9jYWxzTWFwKGNvbnRleHQpOwogICAgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uTm9kZSA9CiAgICAgICAgbG9jYWxzTWFwLmdldEZ1bmN0aW9uTm9kZUZvclBhcmFtZXRlcihwYXJhbWV0ZXIpOwogICAgRGFydFR5cGUgdHlwZSA9IGxvY2Fsc01hcC5nZXRMb2NhbFR5cGUoX2Nsb3NlZFdvcmxkLmVsZW1lbnRNYXAsIHBhcmFtZXRlcik7CiAgICBNZW1iZXJFbnRpdHkgbWVtYmVyOwogICAgYm9vbCBpc0Nsb3N1cmUgPSBmYWxzZTsKICAgIGlmIChmdW5jdGlvbk5vZGUucGFyZW50IGlzIGlyLk1lbWJlcikgewogICAgICBtZW1iZXIgPSBfY2xvc2VkV29ybGQuZWxlbWVudE1hcC5nZXRNZW1iZXIoZnVuY3Rpb25Ob2RlLnBhcmVudCk7CiAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uTm9kZS5wYXJlbnQgaXMgaXIuTG9jYWxGdW5jdGlvbikgewogICAgICBDbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvIGluZm8gPQogICAgICAgICAgX2Nsb3NlZFdvcmxkLmNsb3N1cmVEYXRhTG9va3VwLmdldENsb3N1cmVJbmZvKGZ1bmN0aW9uTm9kZS5wYXJlbnQpOwogICAgICBtZW1iZXIgPSBpbmZvLmNhbGxNZXRob2Q7CiAgICAgIGlzQ2xvc3VyZSA9IHRydWU7CiAgICB9CiAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gbWVtYmVyVHlwZUluZm9ybWF0aW9uID0KICAgICAgICB0eXBlcy5nZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihtZW1iZXIpOwogICAgaWYgKGlzQ2xvc3VyZSkgewogICAgICByZXR1cm4gbmV3IFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbi5sb2NhbEZ1bmN0aW9uKAogICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbiwgbWVtYmVyVHlwZUluZm9ybWF0aW9uLCBwYXJhbWV0ZXIsIHR5cGUsIG1lbWJlcik7CiAgICB9IGVsc2UgaWYgKG1lbWJlci5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgIHJldHVybiBuZXcgUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uLmluc3RhbmNlTWVtYmVyKAogICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgICAgIG1lbWJlclR5cGVJbmZvcm1hdGlvbiwKICAgICAgICAgIHBhcmFtZXRlciwKICAgICAgICAgIHR5cGUsCiAgICAgICAgICBtZW1iZXIsCiAgICAgICAgICBuZXcgUGFyYW1ldGVyQXNzaWdubWVudHMoKSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbi5zdGF0aWMoCiAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLCBtZW1iZXJUeXBlSW5mb3JtYXRpb24sIHBhcmFtZXRlciwgdHlwZSwgbWVtYmVyKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBjcmVhdGVNZW1iZXJUeXBlSW5mb3JtYXRpb24oCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwgTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgaWYgKG1lbWJlci5pc0ZpZWxkKSB7CiAgICAgIEZpZWxkRW50aXR5IGZpZWxkID0gbWVtYmVyOwogICAgICBEYXJ0VHlwZSB0eXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGaWVsZFR5cGUoZmllbGQpOwogICAgICByZXR1cm4gbmV3IEZpZWxkVHlwZUluZm9ybWF0aW9uKGFic3RyYWN0VmFsdWVEb21haW4sIGZpZWxkLCB0eXBlKTsKICAgIH0gZWxzZSBpZiAobWVtYmVyLmlzR2V0dGVyKSB7CiAgICAgIEZ1bmN0aW9uRW50aXR5IGdldHRlciA9IG1lbWJlcjsKICAgICAgRGFydFR5cGUgdHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlKGdldHRlcik7CiAgICAgIHJldHVybiBuZXcgR2V0dGVyVHlwZUluZm9ybWF0aW9uKGFic3RyYWN0VmFsdWVEb21haW4sIGdldHRlciwgdHlwZSk7CiAgICB9IGVsc2UgaWYgKG1lbWJlci5pc1NldHRlcikgewogICAgICBGdW5jdGlvbkVudGl0eSBzZXR0ZXIgPSBtZW1iZXI7CiAgICAgIHJldHVybiBuZXcgU2V0dGVyVHlwZUluZm9ybWF0aW9uKGFic3RyYWN0VmFsdWVEb21haW4sIHNldHRlcik7CiAgICB9IGVsc2UgaWYgKG1lbWJlci5pc0Z1bmN0aW9uKSB7CiAgICAgIEZ1bmN0aW9uRW50aXR5IG1ldGhvZCA9IG1lbWJlcjsKICAgICAgRGFydFR5cGUgdHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlKG1ldGhvZCk7CiAgICAgIHJldHVybiBuZXcgTWV0aG9kVHlwZUluZm9ybWF0aW9uKGFic3RyYWN0VmFsdWVEb21haW4sIG1ldGhvZCwgdHlwZSk7CiAgICB9IGVsc2UgewogICAgICBDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvciA9IG1lbWJlcjsKICAgICAgaWYgKGNvbnN0cnVjdG9yLmlzRmFjdG9yeUNvbnN0cnVjdG9yKSB7CiAgICAgICAgRGFydFR5cGUgdHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlKGNvbnN0cnVjdG9yKTsKICAgICAgICByZXR1cm4gbmV3IEZhY3RvcnlDb25zdHJ1Y3RvclR5cGVJbmZvcm1hdGlvbigKICAgICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbiwgY29uc3RydWN0b3IsIHR5cGUpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBuZXcgR2VuZXJhdGl2ZUNvbnN0cnVjdG9yVHlwZUluZm9ybWF0aW9uKAogICAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLCBjb25zdHJ1Y3Rvcik7CiAgICAgIH0KICAgIH0KICB9Cn0KCmNsYXNzIEtlcm5lbEdsb2JhbFR5cGVJbmZlcmVuY2VFbGVtZW50RGF0YQogICAgaW1wbGVtZW50cyBHbG9iYWxUeXBlSW5mZXJlbmNlRWxlbWVudERhdGEgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbR2xvYmFsVHlwZUluZmVyZW5jZUVsZW1lbnREYXRhXQogIC8vLyBvYmplY3RzIGluIGEgZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2dsb2JhbC10eXBlLWluZmVyZW5jZS1lbGVtZW50LWRhdGEnOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW5hbWUgdGhpcyB0b2dldGhlciB3aXRoIFt0eXBlT2ZTZW5kXS4KICBNYXA8aXIuVHJlZU5vZGUsIEFic3RyYWN0VmFsdWU+IF9zZW5kTWFwOwoKICBNYXA8aXIuRm9ySW5TdGF0ZW1lbnQsIEFic3RyYWN0VmFsdWU+IF9pdGVyYXRvck1hcDsKICBNYXA8aXIuRm9ySW5TdGF0ZW1lbnQsIEFic3RyYWN0VmFsdWU+IF9jdXJyZW50TWFwOwogIE1hcDxpci5Gb3JJblN0YXRlbWVudCwgQWJzdHJhY3RWYWx1ZT4gX21vdmVOZXh0TWFwOwoKICBLZXJuZWxHbG9iYWxUeXBlSW5mZXJlbmNlRWxlbWVudERhdGEoKTsKCiAgS2VybmVsR2xvYmFsVHlwZUluZmVyZW5jZUVsZW1lbnREYXRhLmludGVybmFsKAogICAgICB0aGlzLl9zZW5kTWFwLCB0aGlzLl9pdGVyYXRvck1hcCwgdGhpcy5fY3VycmVudE1hcCwgdGhpcy5fbW92ZU5leHRNYXApOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW0dsb2JhbFR5cGVJbmZlcmVuY2VFbGVtZW50RGF0YV0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBLZXJuZWxHbG9iYWxUeXBlSW5mZXJlbmNlRWxlbWVudERhdGEucmVhZEZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwKICAgICAgaXIuTWVtYmVyIGNvbnRleHQsCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbikgewogICAgcmV0dXJuIHNvdXJjZS5pbk1lbWJlckNvbnRleHQoY29udGV4dCwgKCkgewogICAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgICAgTWFwPGlyLlRyZWVOb2RlLCBBYnN0cmFjdFZhbHVlPiBzZW5kTWFwID0gc291cmNlLnJlYWRUcmVlTm9kZU1hcEluQ29udGV4dCgKICAgICAgICAgICgpID0+IGFic3RyYWN0VmFsdWVEb21haW4ucmVhZEFic3RyYWN0VmFsdWVGcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgICBNYXA8aXIuRm9ySW5TdGF0ZW1lbnQsIEFic3RyYWN0VmFsdWU+IGl0ZXJhdG9yTWFwID0KICAgICAgICAgIHNvdXJjZS5yZWFkVHJlZU5vZGVNYXBJbkNvbnRleHQoCiAgICAgICAgICAgICAgKCkgPT4gYWJzdHJhY3RWYWx1ZURvbWFpbi5yZWFkQWJzdHJhY3RWYWx1ZUZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgICBNYXA8aXIuRm9ySW5TdGF0ZW1lbnQsIEFic3RyYWN0VmFsdWU+IGN1cnJlbnRNYXAgPQogICAgICAgICAgc291cmNlLnJlYWRUcmVlTm9kZU1hcEluQ29udGV4dCgKICAgICAgICAgICAgICAoKSA9PiBhYnN0cmFjdFZhbHVlRG9tYWluLnJlYWRBYnN0cmFjdFZhbHVlRnJvbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICAgIE1hcDxpci5Gb3JJblN0YXRlbWVudCwgQWJzdHJhY3RWYWx1ZT4gbW92ZU5leHRNYXAgPQogICAgICAgICAgc291cmNlLnJlYWRUcmVlTm9kZU1hcEluQ29udGV4dCgKICAgICAgICAgICAgICAoKSA9PiBhYnN0cmFjdFZhbHVlRG9tYWluLnJlYWRBYnN0cmFjdFZhbHVlRnJvbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICAgIHNvdXJjZS5lbmQodGFnKTsKICAgICAgcmV0dXJuIG5ldyBLZXJuZWxHbG9iYWxUeXBlSW5mZXJlbmNlRWxlbWVudERhdGEuaW50ZXJuYWwoCiAgICAgICAgICBzZW5kTWFwLCBpdGVyYXRvck1hcCwgY3VycmVudE1hcCwgbW92ZU5leHRNYXApOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rLCBpci5NZW1iZXIgY29udGV4dCwKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluKSB7CiAgICBzaW5rLmluTWVtYmVyQ29udGV4dChjb250ZXh0LCAoKSB7CiAgICAgIHNpbmsuYmVnaW4odGFnKTsKICAgICAgc2luay53cml0ZVRyZWVOb2RlTWFwSW5Db250ZXh0KAogICAgICAgICAgX3NlbmRNYXAsCiAgICAgICAgICAoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4KICAgICAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLndyaXRlQWJzdHJhY3RWYWx1ZVRvRGF0YVNpbmsoc2luaywgdmFsdWUpLAogICAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgICAgc2luay53cml0ZVRyZWVOb2RlTWFwSW5Db250ZXh0KAogICAgICAgICAgX2l0ZXJhdG9yTWFwLAogICAgICAgICAgKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+CiAgICAgICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi53cml0ZUFic3RyYWN0VmFsdWVUb0RhdGFTaW5rKHNpbmssIHZhbHVlKSwKICAgICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICAgIHNpbmsud3JpdGVUcmVlTm9kZU1hcEluQ29udGV4dCgKICAgICAgICAgIF9jdXJyZW50TWFwLAogICAgICAgICAgKEFic3RyYWN0VmFsdWUgdmFsdWUpID0+CiAgICAgICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi53cml0ZUFic3RyYWN0VmFsdWVUb0RhdGFTaW5rKHNpbmssIHZhbHVlKSwKICAgICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICAgIHNpbmsud3JpdGVUcmVlTm9kZU1hcEluQ29udGV4dCgKICAgICAgICAgIF9tb3ZlTmV4dE1hcCwKICAgICAgICAgIChBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PgogICAgICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4ud3JpdGVBYnN0cmFjdFZhbHVlVG9EYXRhU2luayhzaW5rLCB2YWx1ZSksCiAgICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgICBzaW5rLmVuZCh0YWcpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBHbG9iYWxUeXBlSW5mZXJlbmNlRWxlbWVudERhdGEgY29tcHJlc3MoKSB7CiAgICBpZiAoX3NlbmRNYXAgIT0gbnVsbCkgewogICAgICBfc2VuZE1hcC5yZW1vdmVXaGVyZShfbWFwc1RvTnVsbCk7CiAgICAgIGlmIChfc2VuZE1hcC5pc0VtcHR5KSB7CiAgICAgICAgX3NlbmRNYXAgPSBudWxsOwogICAgICB9CiAgICB9CiAgICBpZiAoX2l0ZXJhdG9yTWFwICE9IG51bGwpIHsKICAgICAgX2l0ZXJhdG9yTWFwLnJlbW92ZVdoZXJlKF9tYXBzVG9OdWxsKTsKICAgICAgaWYgKF9pdGVyYXRvck1hcC5pc0VtcHR5KSB7CiAgICAgICAgX2l0ZXJhdG9yTWFwID0gbnVsbDsKICAgICAgfQogICAgfQogICAgaWYgKF9jdXJyZW50TWFwICE9IG51bGwpIHsKICAgICAgX2N1cnJlbnRNYXAucmVtb3ZlV2hlcmUoX21hcHNUb051bGwpOwogICAgICBpZiAoX2N1cnJlbnRNYXAuaXNFbXB0eSkgewogICAgICAgIF9jdXJyZW50TWFwID0gbnVsbDsKICAgICAgfQogICAgfQogICAgaWYgKF9tb3ZlTmV4dE1hcCAhPSBudWxsKSB7CiAgICAgIF9tb3ZlTmV4dE1hcC5yZW1vdmVXaGVyZShfbWFwc1RvTnVsbCk7CiAgICAgIGlmIChfbW92ZU5leHRNYXAuaXNFbXB0eSkgewogICAgICAgIF9tb3ZlTmV4dE1hcCA9IG51bGw7CiAgICAgIH0KICAgIH0KICAgIGlmIChfc2VuZE1hcCA9PSBudWxsICYmCiAgICAgICAgX2l0ZXJhdG9yTWFwID09IG51bGwgJiYKICAgICAgICBfY3VycmVudE1hcCA9PSBudWxsICYmCiAgICAgICAgX21vdmVOZXh0TWFwID09IG51bGwpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gdGhpczsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mU2VuZChpci5UcmVlTm9kZSBub2RlKSB7CiAgICBpZiAoX3NlbmRNYXAgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX3NlbmRNYXBbbm9kZV07CiAgfQoKICB2b2lkIHNldEN1cnJlbnRUeXBlTWFzayhpci5Gb3JJblN0YXRlbWVudCBub2RlLCBBYnN0cmFjdFZhbHVlIG1hc2spIHsKICAgIF9jdXJyZW50TWFwID8/PSA8aXIuRm9ySW5TdGF0ZW1lbnQsIEFic3RyYWN0VmFsdWU+e307CiAgICBfY3VycmVudE1hcFtub2RlXSA9IG1hc2s7CiAgfQoKICB2b2lkIHNldE1vdmVOZXh0VHlwZU1hc2soaXIuRm9ySW5TdGF0ZW1lbnQgbm9kZSwgQWJzdHJhY3RWYWx1ZSBtYXNrKSB7CiAgICBfbW92ZU5leHRNYXAgPz89IDxpci5Gb3JJblN0YXRlbWVudCwgQWJzdHJhY3RWYWx1ZT57fTsKICAgIF9tb3ZlTmV4dE1hcFtub2RlXSA9IG1hc2s7CiAgfQoKICB2b2lkIHNldEl0ZXJhdG9yVHlwZU1hc2soaXIuRm9ySW5TdGF0ZW1lbnQgbm9kZSwgQWJzdHJhY3RWYWx1ZSBtYXNrKSB7CiAgICBfaXRlcmF0b3JNYXAgPz89IDxpci5Gb3JJblN0YXRlbWVudCwgQWJzdHJhY3RWYWx1ZT57fTsKICAgIF9pdGVyYXRvck1hcFtub2RlXSA9IG1hc2s7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkl0ZXJhdG9yQ3VycmVudChjb3ZhcmlhbnQgaXIuRm9ySW5TdGF0ZW1lbnQgbm9kZSkgewogICAgaWYgKF9jdXJyZW50TWFwID09IG51bGwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIF9jdXJyZW50TWFwW25vZGVdOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZJdGVyYXRvck1vdmVOZXh0KGNvdmFyaWFudCBpci5Gb3JJblN0YXRlbWVudCBub2RlKSB7CiAgICBpZiAoX21vdmVOZXh0TWFwID09IG51bGwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIF9tb3ZlTmV4dE1hcFtub2RlXTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mSXRlcmF0b3IoY292YXJpYW50IGlyLkZvckluU3RhdGVtZW50IG5vZGUpIHsKICAgIGlmIChfaXRlcmF0b3JNYXAgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX2l0ZXJhdG9yTWFwW25vZGVdOwogIH0KCiAgdm9pZCBzZXRUeXBlTWFzayhpci5UcmVlTm9kZSBub2RlLCBBYnN0cmFjdFZhbHVlIG1hc2spIHsKICAgIF9zZW5kTWFwID8/PSA8aXIuVHJlZU5vZGUsIEFic3RyYWN0VmFsdWU+e307CiAgICBfc2VuZE1hcFtub2RlXSA9IG1hc2s7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkdldHRlcihp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ZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pby9wb3NpdGlvbl9pbmZvcm1hdGlvbi5kYXJ0wACxui8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gU291cmNlIGluZm9ybWF0aW9uIHN5c3RlbSBtYXBwaW5nIHRoYXQgYXR0ZW1wdHMgYSBzZW1hbnRpYyBtYXBwaW5nIGJldHdlZW4KLy8vIG9mZnNldHMgb2YgSmF2YVNjcmlwdCBjb2RlIHBvaW50cyB0byBvZmZzZXRzIG9mIERhcnQgY29kZSBwb2ludHMuCgpsaWJyYXJ5IGRhcnQyanMuc291cmNlX2luZm9ybWF0aW9uLnBvc2l0aW9uOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganM7CmltcG9ydCAnLi4vanMvanNfZGVidWcuZGFydCc7CmltcG9ydCAnLi4vanMvanNfc291cmNlX21hcHBpbmcuZGFydCc7CmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL3V0aWwvdXRpbC5kYXJ0JzsKaW1wb3J0ICdjb2RlX291dHB1dC5kYXJ0JyBzaG93IEJ1ZmZlcmVkQ29kZU91dHB1dDsKaW1wb3J0ICdzb3VyY2VfaW5mb3JtYXRpb24uZGFydCc7CgovLy8gW1NvdXJjZUluZm9ybWF0aW9uXSB0aGF0IGNvbnNpc3RzIG9mIGFuIG9mZnNldCBwb3NpdGlvbiBpbnRvIHRoZSBzb3VyY2UKLy8vIGNvZGUuCmNsYXNzIFBvc2l0aW9uU291cmNlSW5mb3JtYXRpb24gZXh0ZW5kcyBTb3VyY2VJbmZvcm1hdGlvbiB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnc291cmNlLWluZm9ybWF0aW9uJzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgU291cmNlTG9jYXRpb24gc3RhcnRQb3NpdGlvbjsKCiAgQG92ZXJyaWRlCiAgZmluYWwgU291cmNlTG9jYXRpb24gaW5uZXJQb3NpdGlvbjsKCiAgQG92ZXJyaWRlCiAgZmluYWwgTGlzdDxGcmFtZUNvbnRleHQ+IGlubGluaW5nQ29udGV4dDsKCiAgUG9zaXRpb25Tb3VyY2VJbmZvcm1hdGlvbigKICAgICAgdGhpcy5zdGFydFBvc2l0aW9uLCB0aGlzLmlubmVyUG9zaXRpb24sIHRoaXMuaW5saW5pbmdDb250ZXh0KTsKCiAgZmFjdG9yeSBQb3NpdGlvblNvdXJjZUluZm9ybWF0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBTb3VyY2VMb2NhdGlvbiBzdGFydFBvc2l0aW9uID0gc291cmNlLnJlYWRDYWNoZWQ8U291cmNlTG9jYXRpb24+KAogICAgICAgICgpID0+IFNvdXJjZUxvY2F0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpKTsKICAgIFNvdXJjZUxvY2F0aW9uIGlubmVyUG9zaXRpb24gPSBzb3VyY2UucmVhZENhY2hlZDxTb3VyY2VMb2NhdGlvbj4oCiAgICAgICAgKCkgPT4gU291cmNlTG9jYXRpb24ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSkpOwogICAgTGlzdDxGcmFtZUNvbnRleHQ+IGlubGluaW5nQ29udGV4dCA9IHNvdXJjZS5yZWFkTGlzdCgKICAgICAgICAoKSA9PiBGcmFtZUNvbnRleHQucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBQb3NpdGlvblNvdXJjZUluZm9ybWF0aW9uKAogICAgICAgIHN0YXJ0UG9zaXRpb24sIGlubmVyUG9zaXRpb24sIGlubGluaW5nQ29udGV4dCk7CiAgfQoKICB2b2lkIHdyaXRlVG9EYXRhU2lua0ludGVybmFsKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVDYWNoZWQoCiAgICAgICAgc3RhcnRQb3NpdGlvbiwKICAgICAgICAoU291cmNlTG9jYXRpb24gc291cmNlTG9jYXRpb24pID0+CiAgICAgICAgICAgIFNvdXJjZUxvY2F0aW9uLndyaXRlVG9EYXRhU2luayhzaW5rLCBzb3VyY2VMb2NhdGlvbikpOwogICAgc2luay53cml0ZUNhY2hlZCgKICAgICAgICBpbm5lclBvc2l0aW9uLAogICAgICAgIChTb3VyY2VMb2NhdGlvbiBzb3VyY2VMb2NhdGlvbikgPT4KICAgICAgICAgICAgU291cmNlTG9jYXRpb24ud3JpdGVUb0RhdGFTaW5rKHNpbmssIHNvdXJjZUxvY2F0aW9uKSk7CiAgICBzaW5rLndyaXRlTGlzdChpbmxpbmluZ0NvbnRleHQsCiAgICAgICAgKEZyYW1lQ29udGV4dCBjb250ZXh0KSA9PiBjb250ZXh0LndyaXRlVG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8U291cmNlTG9jYXRpb24+IGdldCBzb3VyY2VMb2NhdGlvbnMgewogICAgTGlzdDxTb3VyY2VMb2NhdGlvbj4gbGlzdCA9IDxTb3VyY2VMb2NhdGlvbj5bXTsKICAgIGlmIChzdGFydFBvc2l0aW9uICE9IG51bGwpIHsKICAgICAgbGlzdC5hZGQoc3RhcnRQb3NpdGlvbik7CiAgICB9CiAgICBpZiAoaW5uZXJQb3NpdGlvbiAhPSBudWxsKSB7CiAgICAgIGxpc3QuYWRkKGlubmVyUG9zaXRpb24pOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VTcGFuIGdldCBzb3VyY2VTcGFuIHsKICAgIFNvdXJjZUxvY2F0aW9uIGxvY2F0aW9uID0KICAgICAgICBzdGFydFBvc2l0aW9uICE9IG51bGwgPyBzdGFydFBvc2l0aW9uIDogaW5uZXJQb3NpdGlvbjsKICAgIFVyaSB1cmkgPSBsb2NhdGlvbi5zb3VyY2VVcmk7CiAgICBpbnQgb2Zmc2V0ID0gbG9jYXRpb24ub2Zmc2V0OwogICAgcmV0dXJuIG5ldyBTb3VyY2VTcGFuKHVyaSwgb2Zmc2V0LCBvZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gSGFzaGluZy5saXN0SGFzaCgKICAgICAgICBpbmxpbmluZ0NvbnRleHQsIEhhc2hpbmcub2JqZWN0c0hhc2goc3RhcnRQb3NpdGlvbiwgaW5uZXJQb3NpdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIG90aGVyIGlzIFBvc2l0aW9uU291cmNlSW5mb3JtYXRpb24gJiYKICAgICAgICBzdGFydFBvc2l0aW9uID09IG90aGVyLnN0YXJ0UG9zaXRpb24gJiYKICAgICAgICBpbm5lclBvc2l0aW9uID09IG90aGVyLmlubmVyUG9zaXRpb24gJiYKICAgICAgICBlcXVhbEVsZW1lbnRzKGlubGluaW5nQ29udGV4dCwgb3RoZXIuaW5saW5pbmdDb250ZXh0KTsKICB9CgogIC8vLyBDcmVhdGUgYSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzb3VyY2UgaW5mb3JtYXRpb24gdXNpbmcgW3VyaVRleHRdCiAgLy8vIGFzIHRoZSBVcmkgcmVwcmVzZW50YXRpb24uCiAgU3RyaW5nIF9jb21wdXRlVGV4dChTdHJpbmcgdXJpVGV4dCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoJyR1cmlUZXh0OicpOwogICAgLy8gVXNlIDEtYmFzZWQgbGluZS9jb2x1bW4gaW5mbyB0byBtYXRjaCB1c3VhbCBkYXJ0IHRvb2wgb3V0cHV0LgogICAgaWYgKHN0YXJ0UG9zaXRpb24gIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgnWyR7c3RhcnRQb3NpdGlvbi5saW5lfSwnCiAgICAgICAgICAnJHtzdGFydFBvc2l0aW9uLmNvbHVtbn1dJyk7CiAgICB9CiAgICBpZiAoaW5uZXJQb3NpdGlvbiAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCctWyR7aW5uZXJQb3NpdGlvbi5saW5lfSwnCiAgICAgICAgICAnJHtpbm5lclBvc2l0aW9uLmNvbHVtbn1dJyk7CiAgICB9CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgc2hvcnRUZXh0IHsKICAgIGlmIChzdGFydFBvc2l0aW9uICE9IG51bGwpIHsKICAgICAgcmV0dXJuIF9jb21wdXRlVGV4dChzdGFydFBvc2l0aW9uLnNvdXJjZVVyaS5wYXRoU2VnbWVudHMubGFzdCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX2NvbXB1dGVUZXh0KGlubmVyUG9zaXRpb24uc291cmNlVXJpLnBhdGhTZWdtZW50cy5sYXN0KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGlmIChzdGFydFBvc2l0aW9uICE9IG51bGwpIHsKICAgICAgcmV0dXJuIF9jb21wdXRlVGV4dCgnJHtzdGFydFBvc2l0aW9uLnNvdXJjZVVyaX0nKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfY29tcHV0ZVRleHQoJyR7aW5uZXJQb3NpdGlvbi5zb3VyY2VVcml9Jyk7CiAgICB9CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFBvc2l0aW9uU291cmNlSW5mb3JtYXRpb25TdHJhdGVneQogICAgaW1wbGVtZW50cyBKYXZhU2NyaXB0U291cmNlSW5mb3JtYXRpb25TdHJhdGVneSB7CiAgY29uc3QgQWJzdHJhY3RQb3NpdGlvblNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3koKTsKCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb25Qcm9jZXNzb3IgY3JlYXRlUHJvY2Vzc29yKAogICAgICBTb3VyY2VNYXBwZXJQcm92aWRlciBwcm92aWRlciwgU291cmNlSW5mb3JtYXRpb25SZWFkZXIgcmVhZGVyKSB7CiAgICByZXR1cm4gbmV3IFBvc2l0aW9uU291cmNlSW5mb3JtYXRpb25Qcm9jZXNzb3IocHJvdmlkZXIsIHJlYWRlcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIG9uQ29tcGxldGUoKSB7fQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFNvdXJjZU1hcHBlZE1hcmtlcigpIHsKICAgIHJldHVybiBjb25zdCBTb3VyY2VNYXBwZWRNYXJrZXIoKTsKICB9Cn0KCi8vLyBNYXJrZXIgdXNlZCB0byB0YWcgdGhlIHJvb3Qgbm9kZXMgb2Ygc291cmNlLW1hcHBlZCBjb2RlLgovLy8KLy8vIFRoaXMgaXMgbmVlZGVkIHRvIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2ggSmF2YVNjcmlwdCBub2RlcyB0aGF0IHNob3VsZG4ndAovLy8gaGF2ZSBzb3VyY2UgbG9jYXRpb25zIChsaWtlIHRoZSBwcmVtYWJsZSkgZnJvbSB0aGUgbm9kZXMgdGhhdCBzaG91bGQKLy8vIChsaWtlIGZ1bmN0aW9ucyBjb21waWxlZCBmcm9tIERhcnQgY29kZSkuCmNsYXNzIFNvdXJjZU1hcHBlZE1hcmtlciBleHRlbmRzIFNvdXJjZUluZm9ybWF0aW9uIHsKICBjb25zdCBTb3VyY2VNYXBwZWRNYXJrZXIoKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBzaG9ydFRleHQgPT4gJyc7CgogIEBvdmVycmlkZQogIExpc3Q8U291cmNlTG9jYXRpb24+IGdldCBzb3VyY2VMb2NhdGlvbnMgPT4gY29uc3QgPFNvdXJjZUxvY2F0aW9uPltdOwoKICBAb3ZlcnJpZGUKICBTb3VyY2VTcGFuIGdldCBzb3VyY2VTcGFuID0+IG5ldyBTb3VyY2VTcGFuKG51bGwsIG51bGwsIG51bGwpOwp9CgovLy8gVGhlIHN0YXJ0LCBlbmQgYW5kIGNsb3Npbmcgb2Zmc2V0cyBmb3IgYSBbanMuTm9kZV0uCmNsYXNzIENvZGVQb3NpdGlvbiB7CiAgZmluYWwgaW50IHN0YXJ0UG9zaXRpb247CiAgZmluYWwgaW50IGVuZFBvc2l0aW9uOwogIGZpbmFsIGludCBjbG9zaW5nUG9zaXRpb247CgogIENvZGVQb3NpdGlvbih0aGlzLnN0YXJ0UG9zaXRpb24sIHRoaXMuZW5kUG9zaXRpb24sIHRoaXMuY2xvc2luZ1Bvc2l0aW9uKTsKCiAgLy8gaWdub3JlOiBNSVNTSU5HX1JFVFVSTgogIGludCBnZXRQb3NpdGlvbihDb2RlUG9zaXRpb25LaW5kIGtpbmQpIHsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIENvZGVQb3NpdGlvbktpbmQuU1RBUlQ6CiAgICAgICAgcmV0dXJuIHN0YXJ0UG9zaXRpb247CiAgICAgIGNhc2UgQ29kZVBvc2l0aW9uS2luZC5FTkQ6CiAgICAgICAgcmV0dXJuIGVuZFBvc2l0aW9uOwogICAgICBjYXNlIENvZGVQb3NpdGlvbktpbmQuQ0xPU0lORzoKICAgICAgICByZXR1cm4gY2xvc2luZ1Bvc2l0aW9uOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdDb2RlUG9zaXRpb24oc3RhcnQ9JHN0YXJ0UG9zaXRpb24sJwogICAgICAgICdlbmQ9JGVuZFBvc2l0aW9uLGNsb3Npbmc9JGNsb3NpbmdQb3NpdGlvbiknOwogIH0KfQoKLy8vIEEgbWFwIGZyb20gYSBbanMuTm9kZV0gdG8gaXRzIFtDb2RlUG9zaXRpb25dLgphYnN0cmFjdCBjbGFzcyBDb2RlUG9zaXRpb25NYXAgewogIENvZGVQb3NpdGlvbiBvcGVyYXRvciBbXShqcy5Ob2RlIG5vZGUpOwp9CgovLy8gUmVnaXN0cnkgZm9yIG1hcHBpbmcgW2pzLk5vZGVdcyB0byB0aGVpciBbQ29kZVBvc2l0aW9uXS4KY2xhc3MgQ29kZVBvc2l0aW9uUmVjb3JkZXIgaW1wbGVtZW50cyBDb2RlUG9zaXRpb25NYXAgewogIE1hcDxqcy5Ob2RlLCBDb2RlUG9zaXRpb24+IF9jb2RlUG9zaXRpb25NYXAgPQogICAgICBuZXcgTWFwPGpzLk5vZGUsIENvZGVQb3NpdGlvbj4uaWRlbnRpdHkoKTsKCiAgdm9pZCByZWdpc3RlclBvc2l0aW9ucygKICAgICAganMuTm9kZSBub2RlLCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uLCBpbnQgY2xvc2luZ1Bvc2l0aW9uKSB7CiAgICByZWdpc3RlckNvZGVQb3NpdGlvbigKICAgICAgICBub2RlLCBuZXcgQ29kZVBvc2l0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCBjbG9zaW5nUG9zaXRpb24pKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJDb2RlUG9zaXRpb24oanMuTm9kZSBub2RlLCBDb2RlUG9zaXRpb24gY29kZVBvc2l0aW9uKSB7CiAgICBfY29kZVBvc2l0aW9uTWFwW25vZGVdID0gY29kZVBvc2l0aW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29kZVBvc2l0aW9uIG9wZXJhdG9yIFtdKGpzLk5vZGUgbm9kZSkgPT4gX2NvZGVQb3NpdGlvbk1hcFtub2RlXTsKfQoKLy8vIEVudW0gdmFsdWVzIGZvciB0aGUgcGFydCBvZiBhIERhcnQgbm9kZSB1c2VkIGZvciB0aGUgc291cmNlIGxvY2F0aW9uIG9mZnNldC4KZW51bSBTb3VyY2VQb3NpdGlvbktpbmQgewogIC8vLyBUaGUgc291cmNlIG1hcHBpbmcgc2hvdWxkIHBvaW50IHRvIHRoZSBzdGFydCBvZiB0aGUgRGFydCBub2RlLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UgdGhlIGZpcnN0ICcoJyBmb3IgdGhlIGAoKikoKWAgY2FsbCBhbmQgJ2YnIG9mIGJvdGggdGhlCiAgLy8vIGBmb28oKWAgYW5kIHRoZSBgKi5iYXIoKWAgY2FsbDoKICAvLy8KICAvLy8gICAgIChmb28oKS5iYXIoKSkoKQogIC8vLyAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHN0YXJ0IG9mIHRoZSBgKCopKClgIG5vZGUKICAvLy8gICAgICBeICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBzdGFydCBvZiB0aGUgYGZvbygpYCBub2RlCiAgLy8vICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgc3RhcnQgb2YgdGhlIGAqLmJhcigpYCBub2RlCiAgLy8vCiAgU1RBUlQsCgogIC8vLyBUaGUgc291cmNlIG1hcHBpbmcgc2hvdWxkIHBvaW50IGFuIGlubmVyIHBvc2l0aW9uIG9mIHRoZSBEYXJ0IG5vZGUuCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSB0aGUgc2Vjb25kICcoJyBvZiB0aGUgYCgqKSgpYCBjYWxsLCB0aGUgJ2YnIG9mIHRoZSBgZm9vKClgCiAgLy8vIGNhbGwgYW5kIHRoZSAnYicgb2YgdGhlIGAqLmJhcigpYCBjYWxsOgogIC8vLwogIC8vLyAgICAgKGZvbygpLmJhcigpKSgpCiAgLy8vICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAvLyB0aGUgaW5uZXIgcG9zaXRpb24gb2YgdGhlIGAoKikoKWAgbm9kZQogIC8vLyAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGlubmVyIHBvc2l0aW9uIG9mIHRoZSBgZm9vKClgIG5vZGUKICAvLy8gICAgICAgICAgICBeICAgICAgICAgICAgICAgIC8vIHRoZSBpbm5lciBwb3NpdGlvbiBvZiB0aGUgYCouYmFyKClgIG5vZGUKICAvLy8KICAvLy8gRm9yIGZ1bmN0aW9uIGV4cHJlc3Npb25zIHRoZSBpbm5lciBwb3NpdGlvbiBpcyB0aGUgY2xvc2luZyBicmFjZSBvciB0aGUKICAvLy8gYXJyb3c6CiAgLy8vCiAgLy8vICAgICBmb28oKSA9PiAoKSB7fQogIC8vLyAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgLy8gdGhlIGlubmVyIHBvc2l0aW9uIG9mIHRoZSAnZm9vJyBmdW5jdGlvbgogIC8vLyAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgLy8gdGhlIGlubmVyIHBvc2l0aW9uIG9mIHRoZSBjbG9zdXJlCiAgLy8vCiAgSU5ORVIsCn0KCi8vIGlnbm9yZTogTUlTU0lOR19SRVRVUk4KU291cmNlTG9jYXRpb24gZ2V0U291cmNlTG9jYXRpb24oU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICBbU291cmNlUG9zaXRpb25LaW5kIHNvdXJjZVBvc2l0aW9uS2luZCA9IFNvdXJjZVBvc2l0aW9uS2luZC5TVEFSVF0pIHsKICBpZiAoc291cmNlSW5mb3JtYXRpb24gPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgc3dpdGNoIChzb3VyY2VQb3NpdGlvbktpbmQpIHsKICAgIGNhc2UgU291cmNlUG9zaXRpb25LaW5kLlNUQVJUOgogICAgICByZXR1cm4gc291cmNlSW5mb3JtYXRpb24uc3RhcnRQb3NpdGlvbjsKICAgIGNhc2UgU291cmNlUG9zaXRpb25LaW5kLklOTkVSOgogICAgICByZXR1cm4gc291cmNlSW5mb3JtYXRpb24uaW5uZXJQb3NpdGlvbiA/PyBzb3VyY2VJbmZvcm1hdGlvbi5zdGFydFBvc2l0aW9uOwogIH0KfQoKLy8vIEVudW0gdmFsdWVzIGZvciB0aGUgcGFydCBvZiB0aGUgSmF2YVNjcmlwdCBub2RlIHVzZWQgZm9yIHRoZSBKYXZhU2NyaXB0Ci8vLyBjb2RlIG9mZnNldCBvZiBhIHNvdXJjZSBtYXBwaW5nLgplbnVtIENvZGVQb3NpdGlvbktpbmQgewogIC8vLyBUaGUgc291cmNlIG1hcHBpbmcgaXMgcHV0IG9uIGxlZnQtbW9zdCBvZmZzZXQgb2YgdGhlIG5vZGUuCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBvbiB0aGUgJ2YnIG9mIGEgZnVuY3Rpb24gb3IgJ3InIG9mIGEgcmV0dXJuIHN0YXRlbWVudDoKICAvLy8KICAvLy8gICAgIGZvbzogZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9CiAgLy8vICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZnVuY3Rpb24gc3RhcnQgcG9zaXRpb24KICAvLy8gICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgIC8vIHRoZSByZXR1cm4gc3RhcnQgcG9zaXRpb24KICBTVEFSVCwKCiAgLy8vIFRoZSBzb3VyY2UgbWFwcGluZyBpcyBwdXQgb24gdGhlIGNsb3NpbmcgdG9rZW4uCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBvbiB0aGUgJ30nIG9mIGEgZnVuY3Rpb24gb3IgdGhlICc7JyBvZiBhIHJldHVybiBzdGF0ZW1lbnQ6CiAgLy8vCiAgLy8vICAgICBmb286IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfQogIC8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgLy8gdGhlIGZ1bmN0aW9uIGNsb3NpbmcgcG9zaXRpb24KICAvLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgIC8vIHRoZSByZXR1cm4gY2xvc2luZyBwb3NpdGlvbgogIC8vLwogIENMT1NJTkcsCgogIC8vLyBUaGUgc291cmNlIG1hcHBpbmcgaXMgcHV0IGF0IHRoZSBlbmQgb2YgdGhlIGNvZGUgZm9yIHRoZSBub2RlLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UgYWZ0ZXIgJ30nIG9mIGEgZnVuY3Rpb24gb3IgYWZ0ZXIgdGhlICc7JyBvZiBhIHJldHVybgogIC8vLyBzdGF0ZW1lbnQ6CiAgLy8vCiAgLy8vICAgICBmb286IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfQogIC8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeICAgICAgIC8vIHRoZSBmdW5jdGlvbiBlbmQgcG9zaXRpb24KICAvLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAvLyB0aGUgcmV0dXJuIGVuZCBwb3NpdGlvbgogIC8vLwogIEVORCwKfQoKLy8vIFByb2Nlc3NvciB0aGF0IGFzc29jaWF0ZXMgW1NvdXJjZUxvY2F0aW9uXXMgZnJvbSBbU291cmNlSW5mb3JtYXRpb25dIG9uCi8vLyBbanMuTm9kZV1zIHdpdGggdGhlIHRhcmdldCBvZmZzZXRzIGluIGEgW1NvdXJjZU1hcHBlcl0uCmNsYXNzIFBvc2l0aW9uU291cmNlSW5mb3JtYXRpb25Qcm9jZXNzb3IgZXh0ZW5kcyBTb3VyY2VJbmZvcm1hdGlvblByb2Nlc3NvciB7CiAgLy8vIFRoZSBpZCBmb3IgdGhpcyBzb3VyY2UgaW5mb3JtYXRpb24gZW5naW5lLgogIC8vLwogIC8vLyBUaGUgaWQgaXMgYWRkZWQgdG8gdGhlIHNvdXJjZSBtYXAgZmlsZSBpbiBhbiBleHRyYSAiZW5naW5lIiBwcm9wZXJ0eSBhbmQKICAvLy8gc2VydmVzIGFzIGEgdmVyc2lvbiBudW1iZXIgZm9yIHRoZSBlbmdpbmUuCiAgLy8vCiAgLy8vIFRoZSB2ZXJzaW9uIGhpc3Rvcnkgb2YgdGhpcyBlbmdpbmUgaXM6CiAgLy8vCiAgLy8vICAgdjI6IFRoZSBpbml0aWFsIHZlcnNpb24gd2l0aCBhbiBpZC4KICBzdGF0aWMgY29uc3QgU3RyaW5nIGlkID0gJ3YyJzsKCiAgZmluYWwgQ29kZVBvc2l0aW9uUmVjb3JkZXIgY29kZVBvc2l0aW9uUmVjb3JkZXIgPSBuZXcgQ29kZVBvc2l0aW9uUmVjb3JkZXIoKTsKICBmaW5hbCBTb3VyY2VJbmZvcm1hdGlvblJlYWRlciByZWFkZXI7CiAgQ29kZVBvc2l0aW9uTWFwIGNvZGVQb3NpdGlvbk1hcDsKICBMaXN0PFRyYWNlTGlzdGVuZXI+IHRyYWNlTGlzdGVuZXJzOwogIElubGluaW5nVHJhY2VMaXN0ZW5lciBpbmxpbmluZ0xpc3RlbmVyOwoKICBQb3NpdGlvblNvdXJjZUluZm9ybWF0aW9uUHJvY2Vzc29yKFNvdXJjZU1hcHBlclByb3ZpZGVyIHByb3ZpZGVyLCB0aGlzLnJlYWRlciwKICAgICAgW0NvdmVyYWdlIGNvdmVyYWdlXSkgewogICAgY29kZVBvc2l0aW9uTWFwID0gY292ZXJhZ2UgIT0gbnVsbAogICAgICAgID8gbmV3IENvZGVQb3NpdGlvbkNvdmVyYWdlKGNvZGVQb3NpdGlvblJlY29yZGVyLCBjb3ZlcmFnZSkKICAgICAgICA6IGNvZGVQb3NpdGlvblJlY29yZGVyOwogICAgdmFyIHNvdXJjZU1hcHBlciA9IHByb3ZpZGVyLmNyZWF0ZVNvdXJjZU1hcHBlcihpZCk7CiAgICB0cmFjZUxpc3RlbmVycyA9IFsKICAgICAgbmV3IFBvc2l0aW9uVHJhY2VMaXN0ZW5lcihzb3VyY2VNYXBwZXIsIHJlYWRlciksCiAgICAgIGlubGluaW5nTGlzdGVuZXIgPSBuZXcgSW5saW5pbmdUcmFjZUxpc3RlbmVyKHNvdXJjZU1hcHBlciwgcmVhZGVyKSwKICAgIF07CiAgICBpZiAoY292ZXJhZ2UgIT0gbnVsbCkgewogICAgICB0cmFjZUxpc3RlbmVycy5hZGQobmV3IENvdmVyYWdlTGlzdGVuZXIoY292ZXJhZ2UsIHJlYWRlcikpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBwcm9jZXNzKGpzLk5vZGUgbm9kZSwgQnVmZmVyZWRDb2RlT3V0cHV0IGNvZGUpIHsKICAgIG5ldyBKYXZhU2NyaXB0VHJhY2VyKGNvZGVQb3NpdGlvbk1hcCwgcmVhZGVyLCB0cmFjZUxpc3RlbmVycykuYXBwbHkobm9kZSk7CiAgICBpbmxpbmluZ0xpc3RlbmVyPy5maW5pc2goKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgb25Qb3NpdGlvbnMoCiAgICAgIGpzLk5vZGUgbm9kZSwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlvbiwgaW50IGNsb3NpbmdQb3NpdGlvbikgewogICAgY29kZVBvc2l0aW9uUmVjb3JkZXIucmVnaXN0ZXJQb3NpdGlvbnMoCiAgICAgICAgbm9kZSwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIGNsb3NpbmdQb3NpdGlvbik7CiAgfQp9CgovLy8gVmlzaXRvciB0aGF0IGNvbXB1dGVzIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIGEgW2pzLk5vZGVdIHVzaW5nIGluZm9ybWF0aW9uCi8vLyBhdHRhY2hlZCB0byB0aGUgbm9kZSBpdHNlbGYgb3IgYWx0ZXJuYXRpdmVseSBmcm9tIGNoaWxkIG5vZGVzLgpjbGFzcyBOb2RlU291cmNlSW5mb3JtYXRpb24gZXh0ZW5kcyBqcy5CYXNlVmlzaXRvcjxTb3VyY2VJbmZvcm1hdGlvbj4gewogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uUmVhZGVyIHJlYWRlcjsKCiAgY29uc3QgTm9kZVNvdXJjZUluZm9ybWF0aW9uKHRoaXMucmVhZGVyKTsKCiAgU291cmNlSW5mb3JtYXRpb24gdmlzaXQoanMuTm9kZSBub2RlKSA9PiBub2RlPy5hY2NlcHQodGhpcyk7CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIHZpc2l0Tm9kZShqcy5Ob2RlIG5vZGUpID0+CiAgICAgIHJlYWRlci5nZXRTb3VyY2VJbmZvcm1hdGlvbihub2RlKTsKCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gdmlzaXRFeHByZXNzaW9uU3RhdGVtZW50KGpzLkV4cHJlc3Npb25TdGF0ZW1lbnQgbm9kZSkgewogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPSByZWFkZXIuZ2V0U291cmNlSW5mb3JtYXRpb24obm9kZSk7CiAgICBpZiAoc291cmNlSW5mb3JtYXRpb24gIT0gbnVsbCkgewogICAgICByZXR1cm4gc291cmNlSW5mb3JtYXRpb247CiAgICB9CiAgICByZXR1cm4gdmlzaXQobm9kZS5leHByZXNzaW9uKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoCiAgICAgIGpzLlZhcmlhYmxlRGVjbGFyYXRpb25MaXN0IG5vZGUpIHsKICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0gcmVhZGVyLmdldFNvdXJjZUluZm9ybWF0aW9uKG5vZGUpOwogICAgaWYgKHNvdXJjZUluZm9ybWF0aW9uICE9IG51bGwpIHsKICAgICAgcmV0dXJuIHNvdXJjZUluZm9ybWF0aW9uOwogICAgfQogICAgZm9yIChqcy5Ob2RlIGRlY2xhcmF0aW9uIGluIG5vZGUuZGVjbGFyYXRpb25zKSB7CiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0gdmlzaXQoZGVjbGFyYXRpb24pOwogICAgICBpZiAoc291cmNlSW5mb3JtYXRpb24gIT0gbnVsbCkgewogICAgICAgIHJldHVybiBzb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiB2aXNpdFZhcmlhYmxlSW5pdGlhbGl6YXRpb24oCiAgICAgIGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24gbm9kZSkgewogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPSByZWFkZXIuZ2V0U291cmNlSW5mb3JtYXRpb24obm9kZSk7CiAgICBpZiAoc291cmNlSW5mb3JtYXRpb24gIT0gbnVsbCkgewogICAgICByZXR1cm4gc291cmNlSW5mb3JtYXRpb247CiAgICB9CiAgICByZXR1cm4gdmlzaXQobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiB2aXNpdEFzc2lnbm1lbnQoanMuQXNzaWdubWVudCBub2RlKSB7CiAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9IHJlYWRlci5nZXRTb3VyY2VJbmZvcm1hdGlvbihub2RlKTsKICAgIGlmIChzb3VyY2VJbmZvcm1hdGlvbiAhPSBudWxsKSB7CiAgICAgIHJldHVybiBzb3VyY2VJbmZvcm1hdGlvbjsKICAgIH0KICAgIHJldHVybiB2aXNpdChub2RlLnZhbHVlKTsKICB9Cn0KCi8vLyBNaXhpbiB0aGF0IGFkZCBzdXBwb3J0IGZvciBjb21wdXRpbmcgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgYSBbanMuTm9kZV0uCmFic3RyYWN0IGNsYXNzIE5vZGVUb1NvdXJjZUluZm9ybWF0aW9uTWl4aW4gewogIFNvdXJjZUluZm9ybWF0aW9uUmVhZGVyIGdldCByZWFkZXI7CgogIFNvdXJjZUluZm9ybWF0aW9uIGNvbXB1dGVTb3VyY2VJbmZvcm1hdGlvbihqcy5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBuZXcgTm9kZVNvdXJjZUluZm9ybWF0aW9uKHJlYWRlcikudmlzaXQobm9kZSk7CiAgfQp9CgovLy8gW1RyYWNlTGlzdGVuZXJdIHRoYXQgcmVnaXN0ZXIgaW5saW5pbmcgY29udGV4dC1kYXRhIHdpdGggYSBbU291cmNlTWFwcGVyXS4KY2xhc3MgSW5saW5pbmdUcmFjZUxpc3RlbmVyIGV4dGVuZHMgVHJhY2VMaXN0ZW5lcgogICAgd2l0aCBOb2RlVG9Tb3VyY2VJbmZvcm1hdGlvbk1peGluIHsKICBmaW5hbCBTb3VyY2VNYXBwZXIgc291cmNlTWFwcGVyOwogIEBvdmVycmlkZQogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uUmVhZGVyIHJlYWRlcjsKICBmaW5hbCBNYXA8aW50LCBMaXN0PEZyYW1lQ29udGV4dD4+IF9mcmFtZXMgPSB7fTsKCiAgSW5saW5pbmdUcmFjZUxpc3RlbmVyKHRoaXMuc291cmNlTWFwcGVyLCB0aGlzLnJlYWRlcik7CgogIEBvdmVycmlkZQogIHZvaWQgb25TdGVwKGpzLk5vZGUgbm9kZSwgT2Zmc2V0IG9mZnNldCwgU3RlcEtpbmQga2luZCkgewogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPSBjb21wdXRlU291cmNlSW5mb3JtYXRpb24obm9kZSk7CiAgICBpZiAoc291cmNlSW5mb3JtYXRpb24gPT0gbnVsbCkgcmV0dXJuOwogICAgLy8gVE9ETyhzaWdtdW5kKTogZW5hYmxlIHRoaXMgYXNzZXJ0aW9uLgogICAgLy8gYXNzZXJ0KG9mZnNldC52YWx1ZSAhPSBudWxsLCAiRXhwZWN0ZWQgYSB2YWxpZCBvZmZzZXQ6ICRub2RlICRvZmZzZXQiKTsKICAgIGlmIChvZmZzZXQudmFsdWUgPT0gbnVsbCkgcmV0dXJuOwoKICAgIC8vIFRPRE8oc2lnbXVuZCk6IGVuYWJsZSB0aGlzIGFzc2VydGlvbgogICAgLy9hc3NlcnQoX2ZyYW1lc1tvZmZzZXQudmFsdWVdID09IG51bGwsCiAgICAvLyAgICAgIkV4cGVjdCBhIHNpbmdsZSBlbnRyeSBwZXIgb2Zmc2V0OiAkb2Zmc2V0ICRub2RlIik7CiAgICBpZiAoX2ZyYW1lc1tvZmZzZXQudmFsdWVdICE9IG51bGwpIHJldHVybjsKCiAgICAvLyBEdXJpbmcgdHJhY2luZyB3ZSBvbmx5IGNvbGxlY3QgaW5mb3JtYXRpb24gcGVyIG9mZnNldCBiZWNhdXNlIHRoZSB0cmFjZXIKICAgIC8vIHZpc2l0cyBub2RlcyBpbiB0cmVlIG9yZGVyLiBXZSdsbCBsYXRlciBzb3J0IHRoZSBkYXRhIGJ5IG9mZnNldCBiZWZvcmUKICAgIC8vIHJlZ2lzdGVyaW5nIHRoZSBmcmFtZSBkYXRhIHdpdGggW1NvdXJjZU1hcHBlcl0uCiAgICBpZiAoa2luZCA9PSBTdGVwS2luZC5GVU5fRVhJVCkgewogICAgICBfZnJhbWVzW29mZnNldC52YWx1ZV0gPSBudWxsOwogICAgfSBlbHNlIHsKICAgICAgX2ZyYW1lc1tvZmZzZXQudmFsdWVdID0gc291cmNlSW5mb3JtYXRpb24uaW5saW5pbmdDb250ZXh0OwogICAgfQogIH0KCiAgLy8vIENvbnZlcnRzIHRoZSBpbmxpbmluZyBjb250ZXh0IGRhdGEgY29sbGVjdGVkIGR1cmluZyB0cmFjaW5nIGludG8gcHVzaC9wb3AKICAvLy8gc3RhY2sgb3BlcmF0aW9ucyB0aGF0IHdpbGwgYmUgZW1pdHRlZCB3aXRoIHRoZSBzb3VyY2UtbWFwIGZpbGVzLgogIHZvaWQgZmluaXNoKCkgewogICAgTGlzdDxGcmFtZUNvbnRleHQ+IGxhc3RJbmxpbmluZ0NvbnRleHQ7CiAgICBmb3IgKHZhciBvZmZzZXQgaW4gX2ZyYW1lcy5rZXlzLnRvTGlzdCgpLi5zb3J0KCkpIHsKICAgICAgdmFyIG5ld0lubGluaW5nQ29udGV4dCA9IF9mcmFtZXNbb2Zmc2V0XTsKCiAgICAgIC8vIE5vdGU6IHRoaXMgcmVsaWVzIG9uIHRoZSBpbnZhcmlhbnQgdGhhdCwgd2hlbiB3ZSBidWlsdCB0aGUgaW5saW5pbmcKICAgICAgLy8gY29udGV4dCBsaXN0cyBkdXJpbmcgU1NBLCB3ZSBrZXB0IGxpc3RzIGlkZW50aWNhbCB3aGVuZXZlciB0aGVyZSB3ZXJlCiAgICAgIC8vIG5vIGlubGluaW5nIGNoYW5nZXMuCiAgICAgIGlmIChsYXN0SW5saW5pbmdDb250ZXh0ID09IG5ld0lubGluaW5nQ29udGV4dCkgY29udGludWU7CgogICAgICBib29sIGlzRW1wdHkgPSBmYWxzZTsKICAgICAgaW50IHBvcENvdW50ID0gMDsKICAgICAgTGlzdDxGcmFtZUNvbnRleHQ+IHB1c2hlcyA9IGNvbnN0IFtdOwogICAgICBpZiAobmV3SW5saW5pbmdDb250ZXh0ID09IG51bGwpIHsKICAgICAgICBwb3BDb3VudCA9IGxhc3RJbmxpbmluZ0NvbnRleHQubGVuZ3RoOwogICAgICAgIGlzRW1wdHkgPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKGxhc3RJbmxpbmluZ0NvbnRleHQgPT0gbnVsbCkgewogICAgICAgIHB1c2hlcyA9IG5ld0lubGluaW5nQ29udGV4dDsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbnQgbWluID0gbmV3SW5saW5pbmdDb250ZXh0Lmxlbmd0aDsKICAgICAgICBpZiAobWluID4gbGFzdElubGluaW5nQ29udGV4dC5sZW5ndGgpIG1pbiA9IGxhc3RJbmxpbmluZ0NvbnRleHQubGVuZ3RoOwogICAgICAgIC8vIERldGVybWluZSB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbW1vbiBmcmFtZXMsIHRvIHByb2R1Y2UgdGhlIG1pbmltYWwKICAgICAgICAvLyBzZXQgb2YgcG9wIGFuZCBwdXNoIG9wZXJhdGlvbnMuCiAgICAgICAgaW50IGkgPSAwOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBtaW47IGkrKykgewogICAgICAgICAgaWYgKCFpZGVudGljYWwobmV3SW5saW5pbmdDb250ZXh0W2ldLCBsYXN0SW5saW5pbmdDb250ZXh0W2ldKSkgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlzRW1wdHkgPSBpID09IDA7CiAgICAgICAgcG9wQ291bnQgPSBsYXN0SW5saW5pbmdDb250ZXh0Lmxlbmd0aCAtIGk7CiAgICAgICAgaWYgKGkgPCBuZXdJbmxpbmluZ0NvbnRleHQubGVuZ3RoKSB7CiAgICAgICAgICBwdXNoZXMgPSBuZXdJbmxpbmluZ0NvbnRleHQuc3VibGlzdChpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgbGFzdElubGluaW5nQ29udGV4dCA9IG5ld0lubGluaW5nQ29udGV4dDsKCiAgICAgIHdoaWxlIChwb3BDb3VudC0tID4gMCkgewogICAgICAgIHNvdXJjZU1hcHBlci5yZWdpc3RlclBvcChvZmZzZXQsIGlzRW1wdHk6IHBvcENvdW50ID09IDAgJiYgaXNFbXB0eSk7CiAgICAgIH0KICAgICAgZm9yIChGcmFtZUNvbnRleHQgcHVzaCBpbiBwdXNoZXMpIHsKICAgICAgICBzb3VyY2VNYXBwZXIucmVnaXN0ZXJQdXNoKG9mZnNldCwKICAgICAgICAgICAgZ2V0U291cmNlTG9jYXRpb24ocHVzaC5jYWxsSW5mb3JtYXRpb24pLCBwdXNoLmlubGluZWRNZXRob2ROYW1lKTsKICAgICAgfQogICAgfQogIH0KfQoKLy8vIFtUcmFjZUxpc3RlbmVyXSB0aGF0IHJlZ2lzdGVyIFtTb3VyY2VMb2NhdGlvbl1zIHdpdGggYSBbU291cmNlTWFwcGVyXS4KY2xhc3MgUG9zaXRpb25UcmFjZUxpc3RlbmVyIGV4dGVuZHMgVHJhY2VMaXN0ZW5lcgogICAgd2l0aCBOb2RlVG9Tb3VyY2VJbmZvcm1hdGlvbk1peGluIHsKICBmaW5hbCBTb3VyY2VNYXBwZXIgc291cmNlTWFwcGVyOwogIEBvdmVycmlkZQogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uUmVhZGVyIHJlYWRlcjsKCiAgUG9zaXRpb25UcmFjZUxpc3RlbmVyKHRoaXMuc291cmNlTWFwcGVyLCB0aGlzLnJlYWRlcik7CgogIC8vLyBSZWdpc3RlcnMgc291cmNlIGluZm9ybWF0aW9uIGZvciBbbm9kZV0gb24gdGhlIFtvZmZzZXRdIGluIHRoZSBKYXZhU2NyaXB0CiAgLy8vIGNvZGUgdXNpbmcgW2tpbmRdIHRvIGRldGVybWluZSB3aGF0IGluZm9ybWF0aW9uIHRvIHVzZS4KICAvLy8KICAvLy8gRm9yIG1vc3Qgbm9kZXMgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBzb3VyY2UgaW5mb3JtYXRpb24gaXMgdXNlZC4KICAvLy8gRm9yIGluc3RhbmNlIGEgcmV0dXJuIGV4cHJlc3Npb24gcG9pbnRzIHRvIHRoZSB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlCiAgLy8vIHNvdXJjZSBpbmZvcm1hdGlvbiwgdHlwaWNhbGx5IHRoZSBzdGFydCBvZiB0aGUgcmV0dXJuIHN0YXRlbWVudCB0aGF0CiAgLy8vIGNyZWF0ZWQgdGhlIEphdmFTY3JpcHQgcmV0dXJuIG5vZGU6CiAgLy8vCiAgLy8vICAgICBKYXZhU2NyaXB0OiAgICAgICAgICAgICAgICAgICAgRGFydDoKICAvLy8KICAvLy8gICAgIEByZXR1cm4gImZvbyI7ICAgICAgICAgICAgICAgICByZXR1cm4gImZvbyI7CiAgLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogIC8vLyAoQCBtYXJrcyB0aGUgY3VycmVudCBKYXZhU2NyaXB0IHBvc2l0aW9uIGFuZCBeIHBvaW50IHRvIHRoZSBtYXBwZWQgRGFydAogIC8vLyBjb2RlIHBvc2l0aW9uLikKICAvLy8KICAvLy8KICAvLy8gRm9yIFtTdGVwS2luZC5DQUxMXSB0aGUgYENhbGxQb3NpdGlvbi5nZXRTZW1hbnRpY1Bvc2l0aW9uRm9yQ2FsbGAgbWV0aG9kCiAgLy8vIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgc3RhcnQgb3IgdGhlIGlubmVyIHBvc2l0aW9uIHNob3VsZCBiZQogIC8vLyB1c2VkLiBGb3IgaW5zdGFuY2UgaWYgdGhlIHJlY2VpdmVyIG9mIHRoZSBKYXZhU2NyaXB0IGNhbGwgaXMgYSAic2ltcGxlIgogIC8vLyBleHByZXNzaW9uIHRoZW4gdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBzb3VyY2UgaW5mb3JtYXRpb24gaXMgdXNlZDoKICAvLy8KICAvLy8gICAgIEphdmFTY3JpcHQ6ICAgICAgICAgICAgICAgICAgICBEYXJ0OgogIC8vLwogIC8vLyAgICAgdDEuQGZvbyQwKCkgICAgICAgICAgICAgICAgICAgIGxvY2FsLmZvbygpCiAgLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogIC8vLwogIC8vLyBJZiB0aGUgcmVjZWl2ZXIgb2YgdGhlIEphdmFTY3JpcHQgY2FsbCBpcyAiY29tcGxleCIgdGhlbiB0aGUgaW5uZXIKICAvLy8gcG9zaXRpb24gb2YgdGhlIHNvdXJjZSBpbmZvcm1hdGlvbiBpcyB1c2VkOgogIC8vLwogIC8vLyAgICAgSmF2YVNjcmlwdDogICAgICAgICAgICAgICAgICAgIERhcnQ6CiAgLy8vCiAgLy8vICAgICBnZXQkYmFyKCkuQGZvbygpICAgICAgICAgICAgICAgYmFyLmZvbygpCiAgLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAvLy8KICAvLy8gRm9yIFtTdGVwS2luZC5GVU5fRVhJVF0gdGhlIGlubmVyIHBvc2l0aW9uIG9mIHRoZSBzb3VyY2UgaW5mb3JtYXRpb24KICAvLy8gaXMgdXNlZC4gRm9yIGEgSmF2YVNjcmlwdCBmdW5jdGlvbiB3aXRob3V0IGEgcmV0dXJuIHN0YXRlbWVudCB0aGlzIG1hcHMKICAvLy8gdGhlIGVuZCBicmFjZSB0byB0aGUgZW5kIGJyYWNlIG9mIHRoZSBjb3JyZXNwb25kaW5nIERhcnQgZnVuY3Rpb24uIEZvciBhCiAgLy8vIEphdmFTY3JpcHQgZnVuY3Rpb24gZXhpdGVkIHRocm91Z2ggYSByZXR1cm4gc3RhdGVtZW50IHRoaXMgbWFwcyB0aGUgZW5kIG9mCiAgLy8vIHRoZSByZXR1cm4gc3RhdGVtZW50IHRvIHRoZSBlbmQgYnJhY2Ugb2YgdGhlIERhcnQgZnVuY3Rpb246CiAgLy8vCiAgLy8vICAgICBKYXZhU2NyaXB0OiAgICAgICAgICAgICAgICAgICAgRGFydDoKICAvLy8KICAvLy8gICAgIGZvbzogZnVuY3Rpb24oKSB7ICAgICAgICAgICAgICBmb28oKSB7CiAgLy8vICAgICBAfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogIC8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAvLy8gICAgIGZvbzogZnVuY3Rpb24oKSB7ICAgICAgICAgICAgICBmb28oKSB7CiAgLy8vICAgICAgIHJldHVybiAwO0AgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAvLy8gICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogIEBvdmVycmlkZQogIHZvaWQgb25TdGVwKGpzLk5vZGUgbm9kZSwgT2Zmc2V0IG9mZnNldCwgU3RlcEtpbmQga2luZCkgewogICAgaW50IGNvZGVMb2NhdGlvbiA9IG9mZnNldC52YWx1ZTsKICAgIGlmIChjb2RlTG9jYXRpb24gPT0gbnVsbCkgcmV0dXJuOwoKICAgIGlmIChraW5kID09IFN0ZXBLaW5kLk5PX0lORk8pIHsKICAgICAgc291cmNlTWFwcGVyLnJlZ2lzdGVyKG5vZGUsIGNvZGVMb2NhdGlvbiwgY29uc3QgTm9Tb3VyY2VMb2NhdGlvbk1hcmtlcigpKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0gY29tcHV0ZVNvdXJjZUluZm9ybWF0aW9uKG5vZGUpOwogICAgaWYgKHNvdXJjZUluZm9ybWF0aW9uID09IG51bGwpIHJldHVybjsKCiAgICB2b2lkIHJlZ2lzdGVyUG9zaXRpb24oU291cmNlUG9zaXRpb25LaW5kIHNvdXJjZVBvc2l0aW9uS2luZCkgewogICAgICBTb3VyY2VMb2NhdGlvbiBzb3VyY2VMb2NhdGlvbiA9CiAgICAgICAgICBnZXRTb3VyY2VMb2NhdGlvbihzb3VyY2VJbmZvcm1hdGlvbiwgc291cmNlUG9zaXRpb25LaW5kKTsKICAgICAgaWYgKHNvdXJjZUxvY2F0aW9uICE9IG51bGwpIHsKICAgICAgICBzb3VyY2VNYXBwZXIucmVnaXN0ZXIobm9kZSwgY29kZUxvY2F0aW9uLCBzb3VyY2VMb2NhdGlvbik7CiAgICAgIH0KICAgIH0KCiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBTdGVwS2luZC5GVU5fRU5UUlk6CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgd2hlbiBmdWxseSB0cmFuc2l0aW9uZWQgdG8gdGhlCiAgICAgICAgLy8gbmV3IHNvdXJjZSBpbmZvIHN5c3RlbS4gVmVyaWZ5IHRoYXQgdG9vbHMgbm8gbG9uZ2VyIGV4cGVjdCBKUwogICAgICAgIC8vIGZ1bmN0aW9uIHNpZ25hdHVyZXMgdG8gbWFwIHRvIHRoZSBvcmlnaW4uIFRoZSBtYWluIG1ldGhvZCBtYXkgc3RpbGwKICAgICAgICAvLyBuZWVkIG1hcHBpbmcgdG8gZW5hYmxlIGJyZWFrcG9pbnRzIGJlZm9yZSBjYWxsaW5nIG1haW4uCiAgICAgICAgcmVnaXN0ZXJQb3NpdGlvbihTb3VyY2VQb3NpdGlvbktpbmQuU1RBUlQpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0ZXBLaW5kLkZVTl9FWElUOgogICAgICAgIHJlZ2lzdGVyUG9zaXRpb24oU291cmNlUG9zaXRpb25LaW5kLklOTkVSKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGVwS2luZC5DQUxMOgogICAgICAgIENhbGxQb3NpdGlvbiBjYWxsUG9zaXRpb24gPQogICAgICAgICAgICBDYWxsUG9zaXRpb24uZ2V0U2VtYW50aWNQb3NpdGlvbkZvckNhbGwobm9kZSk7CiAgICAgICAgcmVnaXN0ZXJQb3NpdGlvbihjYWxsUG9zaXRpb24uc291cmNlUG9zaXRpb25LaW5kKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGVwS2luZC5BQ0NFU1M6CiAgICAgIGNhc2UgU3RlcEtpbmQuTkVXOgogICAgICBjYXNlIFN0ZXBLaW5kLlJFVFVSTjoKICAgICAgY2FzZSBTdGVwS2luZC5CUkVBSzoKICAgICAgY2FzZSBTdGVwS2luZC5DT05USU5VRToKICAgICAgY2FzZSBTdGVwS2luZC5USFJPVzoKICAgICAgY2FzZSBTdGVwS2luZC5FWFBSRVNTSU9OX1NUQVRFTUVOVDoKICAgICAgY2FzZSBTdGVwS2luZC5JRl9DT05ESVRJT046CiAgICAgIGNhc2UgU3RlcEtpbmQuRk9SX0lOSVRJQUxJWkVSOgogICAgICBjYXNlIFN0ZXBLaW5kLkZPUl9DT05ESVRJT046CiAgICAgIGNhc2UgU3RlcEtpbmQuRk9SX1VQREFURToKICAgICAgY2FzZSBTdGVwS2luZC5XSElMRV9DT05ESVRJT046CiAgICAgIGNhc2UgU3RlcEtpbmQuRE9fQ09ORElUSU9OOgogICAgICBjYXNlIFN0ZXBLaW5kLlNXSVRDSF9FWFBSRVNTSU9OOgogICAgICAgIHJlZ2lzdGVyUG9zaXRpb24oU291cmNlUG9zaXRpb25LaW5kLlNUQVJUKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGVwS2luZC5OT19JTkZPOgogICAgICAgIGJyZWFrOwogICAgfQogIH0KfQoKLy8vIFRoZSBwb3NpdGlvbiBvZiBhIFtqcy5DYWxsXSBub2RlLgpjbGFzcyBDYWxsUG9zaXRpb24gewogIC8vLyBUaGUgY2FsbCBub2RlIGZvciB3aGljaCB0aGUgcG9zaXRpb25zIGhhdmUgYmVlbiBjb21wdXRlZC4KICBmaW5hbCBqcy5Ob2RlIG5vZGU7CgogIC8vLyBUaGUgcG9zaXRpb24gZm9yIFtub2RlXSB1c2VkIGFzIHRoZSBvZmZzZXQgaW4gdGhlIEphdmFTY3JpcHQgY29kZS4KICAvLy8KICAvLy8gVGhpcyBpcyBlaXRoZXIgYENvZGVQb3NpdGlvbktpbmQuU1RBUlRgIGZvciBjb2RlIGxpa2UKICAvLy8KICAvLy8gICAgIHQxLmZvbyQwKCkKICAvLy8gICAgIF4KICAvLy8gd2hlcmUgdGhlIGxlZnQtbW9zdCBvZmZzZXQgb2YgdGhlIHJlY2VpdmVyIHNob3VsZCBiZSB1c2VkLCBvcgogIC8vLyBgQ29kZVBvc2l0aW9uS2luZC5DTE9TSU5HYCBmb3IgY29kZSBsaWtlCiAgLy8vCiAgLy8vICAgICBnZXQkYmFyKCkuZm9vJDAoKQogIC8vLyAgICAgICAgICAgICAgIF4KICAvLy8KICAvLy8gd2hlcmUgdGhlIG5hbWUgb2YgdGhlIGNhbGxlZCBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgKGhlcmUgdGhlIG1ldGhvZAogIC8vLyAnZm9vJDAnKS4KICBmaW5hbCBDb2RlUG9zaXRpb25LaW5kIGNvZGVQb3NpdGlvbktpbmQ7CgogIC8vLyBUaGUgcG9zaXRpb24gZnJvbSB0aGUgW1NvdXJjZUluZm9ybWF0aW9uXSB1c2VkIGluIHRoZSBtYXBwZWQgRGFydCBjb2RlLgogIC8vLwogIC8vLyBUaGlzIGlzIGVpdGhlciBgU291cmNlUG9zaXRpb25LaW5kLlNUQVJUYCBmb3IgY29kZSBsaWtlCiAgLy8vCiAgLy8vICAgICBKYXZhU2NyaXB0OiAgICAgICAgICAgICAgICAgICAgRGFydDoKICAvLy8KICAvLy8gICAgIHQxLkBmb28kMCgpICAgICAgICAgICAgICAgICAgICBsb2NhbC5mb28oKQogIC8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAvLy8KICAvLy8gd2hlcmUgdGhlIEphdmFTY3JpcHQgcmVjZWl2ZXIgaXMgYSAic2ltcGxlIiBleHByZXNzaW9uLCBvcgogIC8vLyBgU291cmNlUG9zaXRpb25LaW5kLkNMT1NJTkdgIGZvciBjb2RlIGxpa2UKICAvLy8KICAvLy8gICAgIEphdmFTY3JpcHQ6ICAgICAgICAgICAgICAgICAgICBEYXJ0OgogIC8vLwogIC8vLyAgICAgZ2V0JGJhcigpLkBmb28oKSAgICAgICAgICAgICAgIGJhci5mb28oKQogIC8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAgLy8vCiAgLy8vIHdoZXJlIHRoZSBKYXZhU2NyaXB0IHJlY2VpdmVyIGlzIGEgImNvbXBsZXgiIGV4cHJlc3Npb24uCiAgLy8vCiAgLy8vIChAIG1hcmtzIHRoZSBjdXJyZW50IEphdmFTY3JpcHQgcG9zaXRpb24gYW5kIF4gcG9pbnQgdG8gdGhlIG1hcHBlZCBEYXJ0CiAgLy8vIGNvZGUgcG9zaXRpb24uKQogIGZpbmFsIFNvdXJjZVBvc2l0aW9uS2luZCBzb3VyY2VQb3NpdGlvbktpbmQ7CgogIENhbGxQb3NpdGlvbih0aGlzLm5vZGUsIHRoaXMuY29kZVBvc2l0aW9uS2luZCwgdGhpcy5zb3VyY2VQb3NpdGlvbktpbmQpOwoKICAvLy8gQ29tcHV0ZXMgdGhlIFtDYWxsUG9zaXRpb25dIGZvciB0aGUgY2FsbCBbbm9kZV0uCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBpZiB0aGUgcmVjZWl2ZXIgb2YgdGhlIEphdmFTY3JpcHQgY2FsbCBpcyBhICJzaW1wbGUiCiAgLy8vIGV4cHJlc3Npb24gdGhlbiB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHNvdXJjZSBpbmZvcm1hdGlvbiBpcyB1c2VkOgogIC8vLwogIC8vLyAgICAgSmF2YVNjcmlwdDogICAgICAgICAgICAgICAgICAgIERhcnQ6CiAgLy8vCiAgLy8vICAgICB0MS5AZm9vJDAoKSAgICAgICAgICAgICAgICAgICAgbG9jYWwuZm9vKCkKICAvLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAgLy8vCiAgLy8vIElmIHRoZSByZWNlaXZlciBvZiB0aGUgSmF2YVNjcmlwdCBjYWxsIGlzICJjb21wbGV4IiB0aGVuIHRoZSBpbm5lcgogIC8vLyBwb3NpdGlvbiBvZiB0aGUgc291cmNlIGluZm9ybWF0aW9uIGlzIHVzZWQ6CiAgLy8vCiAgLy8vICAgICBKYXZhU2NyaXB0OiAgICAgICAgICAgICAgICAgICAgRGFydDoKICAvLy8KICAvLy8gICAgIGdldCRiYXIoKS5AZm9vKCkgICAgICAgICAgICAgICBiYXIuZm9vKCkKICAvLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogIC8vLyAoQCBtYXJrcyB0aGUgY3VycmVudCBKYXZhU2NyaXB0IHBvc2l0aW9uIGFuZCBeIHBvaW50IHRvIHRoZSBtYXBwZWQgRGFydAogIC8vLyBjb2RlIHBvc2l0aW9uLikKICBzdGF0aWMgQ2FsbFBvc2l0aW9uIGdldFNlbWFudGljUG9zaXRpb25Gb3JDYWxsKGpzLkNhbGwgbm9kZSkgewogICAganMuRXhwcmVzc2lvbiBhY2Nlc3MgPSBqcy51bmRlZmVyKG5vZGUudGFyZ2V0KTsKICAgIGlmIChhY2Nlc3MgaXMganMuUHJvcGVydHlBY2Nlc3MpIHsKICAgICAganMuTm9kZSB0YXJnZXQgPSBhY2Nlc3M7CiAgICAgIGJvb2wgcHVyZUFjY2VzcyA9IGZhbHNlOwogICAgICB3aGlsZSAodGFyZ2V0IGlzIGpzLlByb3BlcnR5QWNjZXNzKSB7CiAgICAgICAganMuUHJvcGVydHlBY2Nlc3MgdGFyZ2V0QWNjZXNzID0gdGFyZ2V0OwogICAgICAgIGpzLk5vZGUgcmVjZWl2ZXIgPSBqcy51bmRlZmVyKHRhcmdldEFjY2Vzcy5yZWNlaXZlcik7CiAgICAgICAgaWYgKHJlY2VpdmVyIGlzIGpzLlZhcmlhYmxlVXNlIHx8IHJlY2VpdmVyIGlzIGpzLlRoaXMpIHsKICAgICAgICAgIHB1cmVBY2Nlc3MgPSB0cnVlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRhcmdldCA9IHJlY2VpdmVyOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAocHVyZUFjY2VzcykgewogICAgICAgIC8vIGEubSgpICAgdGhpcy5tKCkgIGEuYi5jLmQubSgpCiAgICAgICAgLy8gXiAgICAgICBeICAgICAgICAgXgogICAgICAgIHJldHVybiBuZXcgQ2FsbFBvc2l0aW9uKAogICAgICAgICAgICBub2RlLCBDb2RlUG9zaXRpb25LaW5kLlNUQVJULCBTb3VyY2VQb3NpdGlvbktpbmQuU1RBUlQpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vICoubSgpICAqLmEuYi5jLmQubSgpCiAgICAgICAgLy8gICBeICAgICAgICAgICAgICBeCiAgICAgICAgcmV0dXJuIG5ldyBDYWxsUG9zaXRpb24oCiAgICAgICAgICAgIGFjY2Vzcy5zZWxlY3RvciwgQ29kZVBvc2l0aW9uS2luZC5TVEFSVCwgU291cmNlUG9zaXRpb25LaW5kLklOTkVSKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChhY2Nlc3MgaXMganMuVmFyaWFibGVVc2UgfHwgYWNjZXNzIGlzIGpzLlRoaXMpIHsKICAgICAgLy8gbSgpICAgdGhpcygpCiAgICAgIC8vIF4gICAgIF4KICAgICAgcmV0dXJuIG5ldyBDYWxsUG9zaXRpb24oCiAgICAgICAgICBub2RlLCBDb2RlUG9zaXRpb25LaW5kLlNUQVJULCBTb3VyY2VQb3NpdGlvbktpbmQuU1RBUlQpOwogICAgfSBlbHNlIGlmIChhY2Nlc3MgaXMganMuRnVuIHx8CiAgICAgICAgYWNjZXNzIGlzIGpzLk5ldyB8fAogICAgICAgIGFjY2VzcyBpcyBqcy5OYW1lZEZ1bmN0aW9uKSB7CiAgICAgIC8vIGZ1bmN0aW9uKCl7fSgpICBuZXcgRnVuY3Rpb24oIi4uLiIpKCkgICBmdW5jdGlvbiBmb28oKXt9KCkKICAgICAgLy8gICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICBeCiAgICAgIHJldHVybiBuZXcgQ2FsbFBvc2l0aW9uKAogICAgICAgICAgbm9kZS50YXJnZXQsIENvZGVQb3NpdGlvbktpbmQuRU5ELCBTb3VyY2VQb3NpdGlvbktpbmQuSU5ORVIpOwogICAgfSBlbHNlIGlmIChhY2Nlc3MgaXMganMuQmluYXJ5IHx8IGFjY2VzcyBpcyBqcy5DYWxsKSB7CiAgICAgIC8vICgwLGEpKCkgICBtKCkoKQogICAgICAvLyAgICAgIF4gICAgICAgXgogICAgICByZXR1cm4gbmV3IENhbGxQb3NpdGlvbigKICAgICAgICAgIG5vZGUudGFyZ2V0LCBDb2RlUG9zaXRpb25LaW5kLkVORCwgU291cmNlUG9zaXRpb25LaW5kLklOTkVSKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1heWJlIHJlbW92ZSB0aGlzIGFzc2VydGlvbi4KICAgICAgYXNzZXJ0KAogICAgICAgICAgZmFsc2UsCiAgICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgICBOT19MT0NBVElPTl9TUEFOTkFCTEUsCiAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgcHJvcGVydHkgYWNjZXNzICR7bm9kZVRvU3RyaW5nKG5vZGUpfTpcbiIKICAgICAgICAgICAgICAiJHtEZWJ1Z1ByaW50ZXIucHJldHR5UHJpbnQobm9kZSl9IikpOwogICAgICAvLyBEb24ndCBrbm93Li4uLgogICAgICByZXR1cm4gbmV3IENhbGxQb3NpdGlvbigKICAgICAgICAgIG5vZGUsIENvZGVQb3NpdGlvbktpbmQuU1RBUlQsIFNvdXJjZVBvc2l0aW9uS2luZC5TVEFSVCk7CiAgICB9CiAgfQp9CgovLy8gQW4gb2Zmc2V0IG9mIGEgSmF2YVNjcmlwdCBub2RlIHdpdGhpbiB0aGUgb3V0cHV0IGNvZGUuCi8vLwovLy8gVGhpcyBvYmplY3QgaG9sZHMgdGhyZWUgZGlmZmVyZW50IHZhbHVlcyBmb3IgdGhlIG9mZnNldCBjb3JyZXNwb25kaW5nIHRvCi8vLyB0aHJlZSBkaWZmZXJlbnQgd2F5cyBicm93c2VycyBjYW4gY29tcHV0ZSB0aGUgb2Zmc2V0IG9mIGEgSmF2YVNjcmlwdCBub2RlLgovLy8KLy8vIEN1cnJlbnRseSBbc3ViZXhwcmVzc2lvbk9mZnNldF0gaXMgdXNlZCBzaW5jZSBpdCBjb3JyZXNwb25kcyB0aGUgbW9zdCB0byB0aGUKLy8vIG9mZnNldCB1c2VkIGJ5IG1vc3QgYnJvd3NlcnMuCmNsYXNzIE9mZnNldCB7CiAgLy8vIFRoZSBvZmZzZXQgb2YgdGhlIGVuY2xvc2luZyBzdGF0ZW1lbnQgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUKICAvLy8gZmlsZS4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlOgogIC8vLwogIC8vLyAgICAgZm9vKCkuYmFyKGJheigpKTsKICAvLy8gICAgIF4gICAgICAgICAgICAgICAgICAvLyB0aGUgc3RhdGVtZW50IG9mZnNldCBvZiB0aGUgYGZvbygpYCBjYWxsCiAgLy8vICAgICBeICAgICAgICAgICAgICAgICAgLy8gdGhlIHN0YXRlbWVudCBvZmZzZXQgb2YgdGhlIGAqLmJhcigpYCBjYWxsCiAgLy8vICAgICBeICAgICAgICAgICAgICAgICAgLy8gdGhlIHN0YXRlbWVudCBvZmZzZXQgb2YgdGhlIGBiYXooKWAgY2FsbAogIC8vLwogIGZpbmFsIGludCBzdGF0ZW1lbnRPZmZzZXQ7CgogIC8vLyBUaGUgYHN1YmV4cHJlc3Npb25gIG9mZnNldCBvZiB0aGUgc3RlcC4gVGhpcyBpcyB0aGUgKG1vc3RseSkgdW5pcXVlCiAgLy8vIG9mZnNldCByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLCB0aGF0IGlkZW50aWZpZXMgdGhlCiAgLy8vIGN1cnJlbnQgb2YgZXhlY3V0aW9uLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2U6CiAgLy8vCiAgLy8vICAgICBmb28oKS5iYXIoYmF6KCkpOwogIC8vLyAgICAgXiAgICAgICAgICAgICAgICAgICAvLyB0aGUgc3ViZXhwcmVzc2lvbiBvZmZzZXQgb2YgdGhlIGBmb28oKWAgY2FsbAogIC8vLyAgICAgICAgICAgXiAgICAgICAgICAgICAvLyB0aGUgc3ViZXhwcmVzc2lvbiBvZmZzZXQgb2YgdGhlIGAqLmJhcigpYCBjYWxsCiAgLy8vICAgICAgICAgICAgICAgXiAgICAgICAgIC8vIHRoZSBzdWJleHByZXNzaW9uIG9mZnNldCBvZiB0aGUgYGJheigpYCBjYWxsCiAgLy8vCiAgLy8vIEhlcmUsIGV2ZW4gdGhvdWdoIHRoZSBKYXZhU2NyaXB0IG5vZGUgZm9yIHRoZSBgKi5iYXIoKWAgY2FsbCBjb250YWlucwogIC8vLyB0aGUgYGZvbygpYCBpdHMgZXhlY3V0aW9uIGlzIGlkZW50aWZpZWQgYnkgdGhlIGBiYXJgIGlkZW50aWZpZXIgbW9yZSB0aGFuCiAgLy8vIHRoZSBmb28gaWRlbnRpZmllci4KICAvLy8KICBmaW5hbCBpbnQgc3ViZXhwcmVzc2lvbk9mZnNldDsKCiAgLy8vIFRoZSBgbGVmdC10by1yaWdodGAgb2Zmc2V0IG9mIHRoZSBzdGVwLiBUaGlzIGlzIGxpa2UgW3N1YmV4cHJlc3Npb25PZmZzZXRdCiAgLy8vIGJ1dCByZXN0cmljdGVkIHNvIHRoYXQgdGhlIG9mZnNldCBvZiBlYWNoIHN1YmV4cHJlc3Npb24gaW4gZXhlY3V0aW9uCiAgLy8vIG9yZGVyIGlzIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZy4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlOgogIC8vLwogIC8vLyAgICAgZm9vKCkuYmFyKGJheigpKTsKICAvLy8gICAgIF4gICAgICAgICAgICAgICAgICAgLy8gdGhlIGxlZnQtdG8tcmlnaHQgb2Zmc2V0IG9mIHRoZSBgZm9vKClgIGNhbGwKICAvLy8gICAgICAgICAgIF4gICAgICAgICAgICAgLy8gdGhlIGxlZnQtdG8tcmlnaHQgb2Zmc2V0IG9mIHRoZSBgKi5iYXIoKWAgY2FsbAogIC8vLyAgICAgXiAgICAgICAgICAgICAgICAgICAvLyB0aGUgbGVmdC10by1yaWdodCBvZmZzZXQgb2YgdGhlIGBiYXooKWAgY2FsbAogIC8vLwogIC8vLyBIZXJlLCBgYmF6KClgIGlzIGV4ZWN1dGVkIGJlZm9yZSBgZm9vKClgIHNvIHdlIG5lZWQgdG8gdXNlICdmJyBhcyBpdHMgYmVzdAogIC8vLyBwb3NpdGlvbiB1bmRlciB0aGUgcmVzdHJpY3Rpb24uCiAgLy8vCiAgZmluYWwgaW50IGxlZnRUb1JpZ2h0T2Zmc2V0OwoKICBPZmZzZXQoCiAgICAgIHRoaXMuc3RhdGVtZW50T2Zmc2V0LCB0aGlzLmxlZnRUb1JpZ2h0T2Zmc2V0LCB0aGlzLnN1YmV4cHJlc3Npb25PZmZzZXQpOwoKICBpbnQgZ2V0IHZhbHVlID0+IHN1YmV4cHJlc3Npb25PZmZzZXQ7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnT2Zmc2V0W3N0YXRlbWVudE9mZnNldD0kc3RhdGVtZW50T2Zmc2V0LCcKICAgICAgICAnbGVmdFRvUmlnaHRPZmZzZXQ9JGxlZnRUb1JpZ2h0T2Zmc2V0LCcKICAgICAgICAnc3ViZXhwcmVzc2lvbk9mZnNldD0kc3ViZXhwcmVzc2lvbk9mZnNldF0nOwogIH0KfQoKZW51bSBCcmFuY2hLaW5kIHsKICBDT05ESVRJT04sCiAgTE9PUCwKICBDQVRDSCwKICBGSU5BTExZLAogIENBU0UsCn0KCmVudW0gU3RlcEtpbmQgewogIEZVTl9FTlRSWSwKICBGVU5fRVhJVCwKICBDQUxMLAogIE5FVywKICBBQ0NFU1MsCiAgUkVUVVJOLAogIEJSRUFLLAogIENPTlRJTlVFLAogIFRIUk9XLAogIEVYUFJFU1NJT05fU1RBVEVNRU5ULAogIElGX0NPTkRJVElPTiwKICBGT1JfSU5JVElBTElaRVIsCiAgRk9SX0NPTkRJVElPTiwKICBGT1JfVVBEQVRFLAogIFdISUxFX0NPTkRJVElPTiwKICBET19DT05ESVRJT04sCiAgU1dJVENIX0VYUFJFU1NJT04sCiAgTk9fSU5GTywKfQoKLy8vIExpc3RlbmVyIGZvciB0aGUgW0phdmFTY3JpcHRUcmFjZXJdLgphYnN0cmFjdCBjbGFzcyBUcmFjZUxpc3RlbmVyIHsKICAvLy8gQ2FsbGVkIGJlZm9yZSBbcm9vdF0gbm9kZSBpcyBwcm9jZXNlZCBieSB0aGUgW0phdmFTY3JpcHRUcmFjZXJdLgogIHZvaWQgb25TdGFydChqcy5Ob2RlIHJvb3QpIHt9CgogIC8vLyBDYWxsZWQgYWZ0ZXIgW3Jvb3RdIG5vZGUgaGFzIGJlZW4gcHJvY2VzZWQgYnkgdGhlIFtKYXZhU2NyaXB0VHJhY2VyXS4KICB2b2lkIG9uRW5kKGpzLk5vZGUgcm9vdCkge30KCiAgLy8vIENhbGxlZCB3aGVuIGEgYnJhbmNoIG9mIHRoZSBnaXZlbiBba2luZF0gaXMgc3RhcnRlZC4gW3ZhbHVlXSBpcyBwcm92aWRlZAogIC8vLyB0byBkaXN0aW5ndWlzaCB0cnVlL2ZhbHNlIGJyYW5jaGVzIG9mIFtCcmFuY2hLaW5kLkNPTkRJVElPTl0gYW5kIGNhc2VzIG9mCiAgLy8vIFtCcmFuY2guQ0FTRV0uCiAgdm9pZCBwdXNoQnJhbmNoKEJyYW5jaEtpbmQga2luZCwgW3ZhbHVlXSkge30KCiAgLy8vIENhbGxlZCB3aGVuIHRoZSBjdXJyZW50IGJyYW5jaCBlbmRzLgogIHZvaWQgcG9wQnJhbmNoKCkge30KCiAgLy8vIENhbGxlZCB3aGVuIFtub2RlXSBkZWZpbmVzIGEgc3RlcCBvZiB0aGUgZ2l2ZW4gW2tpbmRdIGF0IHRoZSBnaXZlbgogIC8vLyBbb2Zmc2V0XSB3aGVuIHRoZSBnZW5lcmF0ZWQgSmF2YVNjcmlwdCBjb2RlLgogIHZvaWQgb25TdGVwKGpzLk5vZGUgbm9kZSwgT2Zmc2V0IG9mZnNldCwgU3RlcEtpbmQga2luZCkge30KfQoKLy8vIFZpc2l0b3IgdGhhdCBjb21wdXRlcyB0aGUgW2pzLk5vZGVdcyB0aGUgYXJlIHBhcnQgb2YgdGhlIEphdmFTY3JpcHQKLy8vIHN0ZXBwYWJsZSBleGVjdXRpb24gYW5kIHRodXMgbmVlZHMgc291cmNlIG1hcHBpbmcgbG9jYXRpb25zLgpjbGFzcyBKYXZhU2NyaXB0VHJhY2VyIGV4dGVuZHMganMuQmFzZVZpc2l0b3IgewogIGZpbmFsIENvZGVQb3NpdGlvbk1hcCBjb2RlUG9zaXRpb25zOwogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uUmVhZGVyIHJlYWRlcjsKICBmaW5hbCBMaXN0PFRyYWNlTGlzdGVuZXI+IGxpc3RlbmVyczsKCiAgLy8vIFRoZSBzdGVwcyBhZGRlZCBieSBzdWJleHByZXNzaW9ucy4KICBMaXN0IHN0ZXBzID0gW107CgogIC8vLyBUaGUgb2Zmc2V0IG9mIHRoZSBjdXJyZW50IHN0YXRlbWVudC4KICBpbnQgc3RhdGVtZW50T2Zmc2V0OwoKICAvLy8gVGhlIGN1cnJlbnQgb2Zmc2V0IGluIGxlZnQtdG8tcmlnaHQgcHJvZ3Jlc3Npb24uCiAgaW50IGxlZnRUb1JpZ2h0T2Zmc2V0OwoKICAvLy8gVGhlIG9mZnNldCBvZiB0aGUgc3Vycm91bmRpbmcgc3RhdGVtZW50LCB1c2VkIGZvciB0aGUgZmlyc3Qgc3ViZXhwcmVzc2lvbi4KICBpbnQgb2Zmc2V0UG9zaXRpb247CgogIGJvb2wgYWN0aXZlOwoKICBKYXZhU2NyaXB0VHJhY2VyKHRoaXMuY29kZVBvc2l0aW9ucywgdGhpcy5yZWFkZXIsIHRoaXMubGlzdGVuZXJzLAogICAgICB7dGhpcy5hY3RpdmU6IGZhbHNlfSk7CgogIHZvaWQgbm90aWZ5U3RhcnQoanMuTm9kZSBub2RlKSB7CiAgICBsaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IGxpc3RlbmVyLm9uU3RhcnQobm9kZSkpOwogIH0KCiAgdm9pZCBub3RpZnlFbmQoanMuTm9kZSBub2RlKSB7CiAgICBsaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IGxpc3RlbmVyLm9uRW5kKG5vZGUpKTsKICB9CgogIHZvaWQgbm90aWZ5UHVzaEJyYW5jaChCcmFuY2hLaW5kIGtpbmQsIFt2YWx1ZV0pIHsKICAgIGlmIChhY3RpdmUpIHsKICAgICAgbGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiBsaXN0ZW5lci5wdXNoQnJhbmNoKGtpbmQsIHZhbHVlKSk7CiAgICB9CiAgfQoKICB2b2lkIG5vdGlmeVBvcEJyYW5jaCgpIHsKICAgIGlmIChhY3RpdmUpIHsKICAgICAgbGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiBsaXN0ZW5lci5wb3BCcmFuY2goKSk7CiAgICB9CiAgfQoKICB2b2lkIG5vdGlmeVN0ZXAoanMuTm9kZSBub2RlLCBPZmZzZXQgb2Zmc2V0LCBTdGVwS2luZCBraW5kLAogICAgICB7Ym9vbCBmb3JjZTogZmFsc2V9KSB7CiAgICBpZiAoYWN0aXZlIHx8IGZvcmNlKSB7CiAgICAgIGxpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4gbGlzdGVuZXIub25TdGVwKG5vZGUsIG9mZnNldCwga2luZCkpOwogICAgfQogIH0KCiAgdm9pZCBhcHBseShqcy5Ob2RlIG5vZGUpIHsKICAgIG5vdGlmeVN0YXJ0KG5vZGUpOwoKICAgIGludCBzdGFydFBvc2l0aW9uID0gZ2V0U3ludGF4T2Zmc2V0KG5vZGUsIGtpbmQ6IENvZGVQb3NpdGlvbktpbmQuU1RBUlQpOwogICAgT2Zmc2V0IHN0YXJ0T2Zmc2V0ID0gZ2V0T2Zmc2V0Rm9yTm9kZShub2RlLCBzdGFydFBvc2l0aW9uKTsKICAgIG5vdGlmeVN0ZXAobm9kZSwgc3RhcnRPZmZzZXQsIFN0ZXBLaW5kLk5PX0lORk8sIGZvcmNlOiB0cnVlKTsKCiAgICBub2RlLmFjY2VwdCh0aGlzKTsKICAgIG5vdGlmeUVuZChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0Tm9kZShqcy5Ob2RlIG5vZGUpIHsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICB9CgogIHZpc2l0KGpzLk5vZGUgbm9kZSwgW0JyYW5jaEtpbmQgYnJhbmNoLCB2YWx1ZV0pIHsKICAgIGlmIChub2RlICE9IG51bGwpIHsKICAgICAgaWYgKGJyYW5jaCAhPSBudWxsKSB7CiAgICAgICAgbm90aWZ5UHVzaEJyYW5jaChicmFuY2gsIHZhbHVlKTsKICAgICAgICBub2RlLmFjY2VwdCh0aGlzKTsKICAgICAgICBub3RpZnlQb3BCcmFuY2goKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBub2RlLmFjY2VwdCh0aGlzKTsKICAgICAgfQogICAgfQogIH0KCiAgdmlzaXRMaXN0KExpc3Q8anMuTm9kZT4gbm9kZUxpc3QpIHsKICAgIGlmIChub2RlTGlzdCAhPSBudWxsKSB7CiAgICAgIGZvciAoanMuTm9kZSBub2RlIGluIG5vZGVMaXN0KSB7CiAgICAgICAgdmlzaXQobm9kZSk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgX2hhbmRsZUZ1bmN0aW9uKGpzLk5vZGUgbm9kZSwganMuTm9kZSBib2R5KSB7CiAgICBib29sIGFjdGl2ZUJlZm9yZSA9IGFjdGl2ZTsKICAgIGlmICghYWN0aXZlKSB7CiAgICAgIGFjdGl2ZSA9IHJlYWRlci5nZXRTb3VyY2VJbmZvcm1hdGlvbihub2RlKSAhPSBudWxsOwogICAgfQogICAgbGVmdFRvUmlnaHRPZmZzZXQgPQogICAgICAgIHN0YXRlbWVudE9mZnNldCA9IGdldFN5bnRheE9mZnNldChub2RlLCBraW5kOiBDb2RlUG9zaXRpb25LaW5kLlNUQVJUKTsKICAgIE9mZnNldCBlbnRyeU9mZnNldCA9IGdldE9mZnNldEZvck5vZGUobm9kZSwgc3RhdGVtZW50T2Zmc2V0KTsKICAgIG5vdGlmeVN0ZXAobm9kZSwgZW50cnlPZmZzZXQsIFN0ZXBLaW5kLkZVTl9FTlRSWSk7CgogICAgdmlzaXQoYm9keSk7CgogICAgbGVmdFRvUmlnaHRPZmZzZXQgPQogICAgICAgIHN0YXRlbWVudE9mZnNldCA9IGdldFN5bnRheE9mZnNldChub2RlLCBraW5kOiBDb2RlUG9zaXRpb25LaW5kLkNMT1NJTkcpOwogICAgT2Zmc2V0IGV4aXRPZmZzZXQgPSBnZXRPZmZzZXRGb3JOb2RlKG5vZGUsIHN0YXRlbWVudE9mZnNldCk7CiAgICBub3RpZnlTdGVwKG5vZGUsIGV4aXRPZmZzZXQsIFN0ZXBLaW5kLkZVTl9FWElUKTsKICAgIGlmIChhY3RpdmUgJiYgIWFjdGl2ZUJlZm9yZSkgewogICAgICBpbnQgZW5kUG9zaXRpb24gPSBnZXRTeW50YXhPZmZzZXQobm9kZSwga2luZDogQ29kZVBvc2l0aW9uS2luZC5FTkQpOwogICAgICBPZmZzZXQgZW5kT2Zmc2V0ID0gZ2V0T2Zmc2V0Rm9yTm9kZShub2RlLCBlbmRQb3NpdGlvbik7CiAgICAgIG5vdGlmeVN0ZXAobm9kZSwgZW5kT2Zmc2V0LCBTdGVwS2luZC5OT19JTkZPKTsKICAgIH0KICAgIGFjdGl2ZSA9IGFjdGl2ZUJlZm9yZTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0RnVuKGpzLkZ1biBub2RlKSB7CiAgICBfaGFuZGxlRnVuY3Rpb24obm9kZSwgbm9kZS5ib2R5KTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0TmFtZWRGdW5jdGlvbihqcy5OYW1lZEZ1bmN0aW9uIG5vZGUpIHsKICAgIF9oYW5kbGVGdW5jdGlvbihub2RlLCBub2RlLmZ1bmN0aW9uLmJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRCbG9jayhqcy5CbG9jayBub2RlKSB7CiAgICBmb3IgKGpzLlN0YXRlbWVudCBzdGF0ZW1lbnQgaW4gbm9kZS5zdGF0ZW1lbnRzKSB7CiAgICAgIHZpc2l0KHN0YXRlbWVudCk7CiAgICB9CiAgfQoKICBpbnQgZ2V0U3ludGF4T2Zmc2V0KGpzLk5vZGUgbm9kZSwKICAgICAge0NvZGVQb3NpdGlvbktpbmQga2luZDogQ29kZVBvc2l0aW9uS2luZC5TVEFSVH0pIHsKICAgIENvZGVQb3NpdGlvbiBjb2RlUG9zaXRpb24gPSBjb2RlUG9zaXRpb25zW25vZGVdOwogICAgaWYgKGNvZGVQb3NpdGlvbiAhPSBudWxsKSB7CiAgICAgIHJldHVybiBjb2RlUG9zaXRpb24uZ2V0UG9zaXRpb24oa2luZCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZpc2l0U3ViZXhwcmVzc2lvbigKICAgICAganMuTm9kZSBwYXJlbnQsIGpzLkV4cHJlc3Npb24gY2hpbGQsIGludCBjb2RlT2Zmc2V0LCBTdGVwS2luZCBraW5kKSB7CiAgICB2YXIgb2xkU3RlcHMgPSBzdGVwczsKICAgIHN0ZXBzID0gW107CiAgICBvZmZzZXRQb3NpdGlvbiA9IGNvZGVPZmZzZXQ7CiAgICB2aXNpdChjaGlsZCk7CiAgICBpZiAoc3RlcHMuaXNFbXB0eSkgewogICAgICBub3RpZnlTdGVwKHBhcmVudCwgZ2V0T2Zmc2V0Rm9yTm9kZShwYXJlbnQsIG9mZnNldFBvc2l0aW9uKSwga2luZCk7CiAgICAgIC8vIFRoZSBbb2Zmc2V0UG9zaXRpb25dIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgdGhlIGZpcnN0IHN1YmV4cHJlc3Npb24uCiAgICAgIG9mZnNldFBvc2l0aW9uID0gbnVsbDsKICAgIH0KICAgIHN0ZXBzID0gb2xkU3RlcHM7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnQoanMuRXhwcmVzc2lvblN0YXRlbWVudCBub2RlKSB7CiAgICBzdGF0ZW1lbnRPZmZzZXQgPSBnZXRTeW50YXhPZmZzZXQobm9kZSk7CiAgICB2aXNpdFN1YmV4cHJlc3Npb24oCiAgICAgICAgbm9kZSwgbm9kZS5leHByZXNzaW9uLCBzdGF0ZW1lbnRPZmZzZXQsIFN0ZXBLaW5kLkVYUFJFU1NJT05fU1RBVEVNRU5UKTsKICAgIHN0YXRlbWVudE9mZnNldCA9IG51bGw7CiAgICBsZWZ0VG9SaWdodE9mZnNldCA9IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEVtcHR5U3RhdGVtZW50KGpzLkVtcHR5U3RhdGVtZW50IG5vZGUpIHt9CgogIEBvdmVycmlkZQogIHZpc2l0Q2FsbChqcy5DYWxsIG5vZGUpIHsKICAgIHZpc2l0KG5vZGUudGFyZ2V0KTsKICAgIGludCBvbGRQb3NpdGlvbiA9IG9mZnNldFBvc2l0aW9uOwogICAgb2Zmc2V0UG9zaXRpb24gPSBudWxsOwogICAgdmlzaXRMaXN0KG5vZGUuYXJndW1lbnRzKTsKICAgIG9mZnNldFBvc2l0aW9uID0gb2xkUG9zaXRpb247CiAgICBDYWxsUG9zaXRpb24gY2FsbFBvc2l0aW9uID0gQ2FsbFBvc2l0aW9uLmdldFNlbWFudGljUG9zaXRpb25Gb3JDYWxsKG5vZGUpOwogICAganMuTm9kZSBwb3NpdGlvbk5vZGUgPSBjYWxsUG9zaXRpb24ubm9kZTsKICAgIGludCBjYWxsT2Zmc2V0ID0KICAgICAgICBnZXRTeW50YXhPZmZzZXQocG9zaXRpb25Ob2RlLCBraW5kOiBjYWxsUG9zaXRpb24uY29kZVBvc2l0aW9uS2luZCk7CiAgICBpZiAob2Zmc2V0UG9zaXRpb24gPT0gbnVsbCkgewogICAgICAvLyBVc2UgdGhlIGNhbGwgb2Zmc2V0IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBzdWJleHByZXNzaW9uLgogICAgICBvZmZzZXRQb3NpdGlvbiA9IGNhbGxPZmZzZXQ7CiAgICB9CiAgICBPZmZzZXQgb2Zmc2V0ID0gZ2V0T2Zmc2V0Rm9yTm9kZShwb3NpdGlvbk5vZGUsIG9mZnNldFBvc2l0aW9uKTsKICAgIG5vdGlmeVN0ZXAobm9kZSwgb2Zmc2V0LCBTdGVwS2luZC5DQUxMKTsKICAgIHN0ZXBzLmFkZChub2RlKTsKICAgIG9mZnNldFBvc2l0aW9uID0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0TmV3KGpzLk5ldyBub2RlKSB7CiAgICB2aXNpdChub2RlLnRhcmdldCk7CiAgICBpbnQgb2xkUG9zaXRpb24gPSBvZmZzZXRQb3NpdGlvbjsKICAgIG9mZnNldFBvc2l0aW9uID0gbnVsbDsKICAgIHZpc2l0TGlzdChub2RlLmFyZ3VtZW50cyk7CiAgICBvZmZzZXRQb3NpdGlvbiA9IG9sZFBvc2l0aW9uOwogICAgaWYgKG9mZnNldFBvc2l0aW9uID09IG51bGwpIHsKICAgICAgLy8gVXNlIHRoZSBzeW50YXggb2Zmc2V0IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBzdWJleHByZXNzaW9uLgogICAgICBvZmZzZXRQb3NpdGlvbiA9IGdldFN5bnRheE9mZnNldChub2RlKTsKICAgIH0KICAgIG5vdGlmeVN0ZXAobm9kZSwgZ2V0T2Zmc2V0Rm9yTm9kZShub2RlLCBvZmZzZXRQb3NpdGlvbiksIFN0ZXBLaW5kLk5FVyk7CiAgICBzdGVwcy5hZGQobm9kZSk7CiAgICBvZmZzZXRQb3NpdGlvbiA9IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEFjY2Vzcyhqcy5Qcm9wZXJ0eUFjY2VzcyBub2RlKSB7CiAgICB2aXNpdChub2RlLnJlY2VpdmVyKTsKICAgIG5vdGlmeVN0ZXAoCiAgICAgICAgbm9kZSwKICAgICAgICAvLyBUZWNobmljYWxseSB3ZSdkIGxpa2UgdG8gdXNlIHRoZSBvZmZzZXQgb2YgdGhlIGAuYCBpbiB0aGUgcHJvcGVydHkKICAgICAgICAvLyBhY2Nlc3MsIGJ1dCB0aGUganNfYXN0IGRvZXNuJ3QgZXhwb3NlIGl0LiBTaW5jZSB0aGlzIGlzIG9ubHkgdXNlZCB0bwogICAgICAgIC8vIHNlYXJjaCBiYWNrd2FyZHMgZm9yIGlubGluZWQgZnJhbWVzLCB3ZSB1c2UgdGhlIHJlY2VpdmVyJ3MgRU5EIG9mZnNldAogICAgICAgIC8vIGluc3RlYWQgYXMgYW4gYXBwcm94aW1hdGlvbi4gTm90ZSB0aGF0IHRoZSBFTkQgb2Zmc2V0IHBvaW50cyBvbmUKICAgICAgICAvLyBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgbm9kZSwgc28gaXQgaXMgbGlrZWx5IGFsd2F5cyB0aGUKICAgICAgICAvLyBvZmZzZXQgd2Ugd2FudC4KICAgICAgICBnZXRPZmZzZXRGb3JOb2RlKAogICAgICAgICAgICBub2RlLCBnZXRTeW50YXhPZmZzZXQobm9kZS5yZWNlaXZlciwga2luZDogQ29kZVBvc2l0aW9uS2luZC5FTkQpKSwKICAgICAgICBTdGVwS2luZC5BQ0NFU1MpOwogICAgc3RlcHMuYWRkKG5vZGUpOwogICAgdmlzaXQobm9kZS5zZWxlY3Rvcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFZhcmlhYmxlVXNlKGpzLlZhcmlhYmxlVXNlIG5vZGUpIHt9CgogIEBvdmVycmlkZQogIHZpc2l0TGl0ZXJhbEJvb2woanMuTGl0ZXJhbEJvb2wgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgdmlzaXRMaXRlcmFsU3RyaW5nKGpzLkxpdGVyYWxTdHJpbmcgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgdmlzaXRMaXRlcmFsTnVtYmVyKGpzLkxpdGVyYWxOdW1iZXIgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgdmlzaXRMaXRlcmFsTnVsbChqcy5MaXRlcmFsTnVsbCBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICB2aXNpdE5hbWUoanMuTmFtZSBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGpzLlZhcmlhYmxlRGVjbGFyYXRpb25MaXN0IG5vZGUpIHsKICAgIHZpc2l0TGlzdChub2RlLmRlY2xhcmF0aW9ucyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24oanMuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICB2aXNpdFZhcmlhYmxlSW5pdGlhbGl6YXRpb24oanMuVmFyaWFibGVJbml0aWFsaXphdGlvbiBub2RlKSB7CiAgICB2aXNpdChub2RlLmxlZnRIYW5kU2lkZSk7CiAgICB2aXNpdChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0QXNzaWdubWVudChqcy5Bc3NpZ25tZW50IG5vZGUpIHsKICAgIHZpc2l0KG5vZGUubGVmdEhhbmRTaWRlKTsKICAgIHZpc2l0KG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRJZihqcy5JZiBub2RlKSB7CiAgICBzdGF0ZW1lbnRPZmZzZXQgPSBnZXRTeW50YXhPZmZzZXQobm9kZSk7CiAgICB2aXNpdFN1YmV4cHJlc3Npb24oCiAgICAgICAgbm9kZSwgbm9kZS5jb25kaXRpb24sIHN0YXRlbWVudE9mZnNldCwgU3RlcEtpbmQuSUZfQ09ORElUSU9OKTsKICAgIHN0YXRlbWVudE9mZnNldCA9IG51bGw7CiAgICB2aXNpdChub2RlLnRoZW4sIEJyYW5jaEtpbmQuQ09ORElUSU9OLCB0cnVlKTsKICAgIHZpc2l0KG5vZGUub3RoZXJ3aXNlLCBCcmFuY2hLaW5kLkNPTkRJVElPTiwgZmFsc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRGb3IoanMuRm9yIG5vZGUpIHsKICAgIGludCBvZmZzZXQgPSBzdGF0ZW1lbnRPZmZzZXQgPSBnZXRTeW50YXhPZmZzZXQobm9kZSk7CiAgICBzdGF0ZW1lbnRPZmZzZXQgPSBvZmZzZXQ7CiAgICBsZWZ0VG9SaWdodE9mZnNldCA9IG51bGw7CiAgICBpZiAobm9kZS5pbml0ICE9IG51bGwpIHsKICAgICAgdmlzaXRTdWJleHByZXNzaW9uKAogICAgICAgICAgbm9kZSwgbm9kZS5pbml0LCBnZXRTeW50YXhPZmZzZXQobm9kZSksIFN0ZXBLaW5kLkZPUl9JTklUSUFMSVpFUik7CiAgICB9CgogICAgaWYgKG5vZGUuY29uZGl0aW9uICE9IG51bGwpIHsKICAgICAgdmlzaXRTdWJleHByZXNzaW9uKG5vZGUsIG5vZGUuY29uZGl0aW9uLCBnZXRTeW50YXhPZmZzZXQobm9kZS5jb25kaXRpb24pLAogICAgICAgICAgU3RlcEtpbmQuRk9SX0NPTkRJVElPTik7CiAgICB9CgogICAgbm90aWZ5UHVzaEJyYW5jaChCcmFuY2hLaW5kLkxPT1ApOwogICAgdmlzaXQobm9kZS5ib2R5KTsKCiAgICBzdGF0ZW1lbnRPZmZzZXQgPSBvZmZzZXQ7CiAgICBpZiAobm9kZS51cGRhdGUgIT0gbnVsbCkgewogICAgICB2aXNpdFN1YmV4cHJlc3Npb24oCiAgICAgICAgICBub2RlLCBub2RlLnVwZGF0ZSwgZ2V0U3ludGF4T2Zmc2V0KG5vZGUudXBkYXRlKSwgU3RlcEtpbmQuRk9SX1VQREFURSk7CiAgICB9CgogICAgbm90aWZ5UG9wQnJhbmNoKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFdoaWxlKGpzLldoaWxlIG5vZGUpIHsKICAgIHN0YXRlbWVudE9mZnNldCA9IGdldFN5bnRheE9mZnNldChub2RlKTsKICAgIGlmIChub2RlLmNvbmRpdGlvbiAhPSBudWxsKSB7CiAgICAgIHZpc2l0U3ViZXhwcmVzc2lvbihub2RlLCBub2RlLmNvbmRpdGlvbiwgZ2V0U3ludGF4T2Zmc2V0KG5vZGUpLAogICAgICAgICAgU3RlcEtpbmQuV0hJTEVfQ09ORElUSU9OKTsKICAgIH0KICAgIHN0YXRlbWVudE9mZnNldCA9IG51bGw7CiAgICBsZWZ0VG9SaWdodE9mZnNldCA9IG51bGw7CgogICAgdmlzaXQobm9kZS5ib2R5LCBCcmFuY2hLaW5kLkxPT1ApOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXREbyhqcy5EbyBub2RlKSB7CiAgICBzdGF0ZW1lbnRPZmZzZXQgPSBnZXRTeW50YXhPZmZzZXQobm9kZSk7CiAgICB2aXNpdChub2RlLmJvZHkpOwogICAgaWYgKG5vZGUuY29uZGl0aW9uICE9IG51bGwpIHsKICAgICAgdmlzaXRTdWJleHByZXNzaW9uKG5vZGUsIG5vZGUuY29uZGl0aW9uLCBnZXRTeW50YXhPZmZzZXQobm9kZS5jb25kaXRpb24pLAogICAgICAgICAgU3RlcEtpbmQuRE9fQ09ORElUSU9OKTsKICAgIH0KICAgIHN0YXRlbWVudE9mZnNldCA9IG51bGw7CiAgICBsZWZ0VG9SaWdodE9mZnNldCA9IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEJpbmFyeShqcy5CaW5hcnkgbm9kZSkgewogICAgdmlzaXQobm9kZS5sZWZ0KTsKICAgIHZpc2l0KG5vZGUucmlnaHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUaGlzKGpzLlRoaXMgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgdmlzaXRSZXR1cm4oanMuUmV0dXJuIG5vZGUpIHsKICAgIHN0YXRlbWVudE9mZnNldCA9IGdldFN5bnRheE9mZnNldChub2RlKTsKICAgIHZpc2l0KG5vZGUudmFsdWUpOwogICAgbm90aWZ5U3RlcCgKICAgICAgICBub2RlLCBnZXRPZmZzZXRGb3JOb2RlKG5vZGUsIGdldFN5bnRheE9mZnNldChub2RlKSksIFN0ZXBLaW5kLlJFVFVSTik7CiAgICBPZmZzZXQgZXhpdE9mZnNldCA9IGdldE9mZnNldEZvck5vZGUoCiAgICAgICAgbm9kZSwgZ2V0U3ludGF4T2Zmc2V0KG5vZGUsIGtpbmQ6IENvZGVQb3NpdGlvbktpbmQuQ0xPU0lORykpOwogICAgbm90aWZ5U3RlcChub2RlLCBleGl0T2Zmc2V0LCBTdGVwS2luZC5GVU5fRVhJVCk7CiAgICBzdGF0ZW1lbnRPZmZzZXQgPSBudWxsOwogICAgbGVmdFRvUmlnaHRPZmZzZXQgPSBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUaHJvdyhqcy5UaHJvdyBub2RlKSB7CiAgICBzdGF0ZW1lbnRPZmZzZXQgPSBnZXRTeW50YXhPZmZzZXQobm9kZSk7CiAgICAvLyBEbyBub3QgdXNlIFtvZmZzZXRQb3NpdGlvbl0gZm9yIHRoZSBzdWJleHByZXNzaW9uLgogICAgb2Zmc2V0UG9zaXRpb24gPSBudWxsOwogICAgdmlzaXQobm9kZS5leHByZXNzaW9uKTsKICAgIG5vdGlmeVN0ZXAoCiAgICAgICAgbm9kZSwgZ2V0T2Zmc2V0Rm9yTm9kZShub2RlLCBnZXRTeW50YXhPZmZzZXQobm9kZSkpLCBTdGVwS2luZC5USFJPVyk7CiAgICBzdGF0ZW1lbnRPZmZzZXQgPSBudWxsOwogICAgbGVmdFRvUmlnaHRPZmZzZXQgPSBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDb250aW51ZShqcy5Db250aW51ZSBub2RlKSB7CiAgICBzdGF0ZW1lbnRPZmZzZXQgPSBnZXRTeW50YXhPZmZzZXQobm9kZSk7CiAgICBub3RpZnlTdGVwKAogICAgICAgIG5vZGUsIGdldE9mZnNldEZvck5vZGUobm9kZSwgZ2V0U3ludGF4T2Zmc2V0KG5vZGUpKSwgU3RlcEtpbmQuQ09OVElOVUUpOwogICAgc3RhdGVtZW50T2Zmc2V0ID0gbnVsbDsKICAgIGxlZnRUb1JpZ2h0T2Zmc2V0ID0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0QnJlYWsoanMuQnJlYWsgbm9kZSkgewogICAgc3RhdGVtZW50T2Zmc2V0ID0gZ2V0U3ludGF4T2Zmc2V0KG5vZGUpOwogICAgbm90aWZ5U3RlcCgKICAgICAgICBub2RlLCBnZXRPZmZzZXRGb3JOb2RlKG5vZGUsIGdldFN5bnRheE9mZnNldChub2RlKSksIFN0ZXBLaW5kLkJSRUFLKTsKICAgIHN0YXRlbWVudE9mZnNldCA9IG51bGw7CiAgICBsZWZ0VG9SaWdodE9mZnNldCA9IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFRyeShqcy5Ucnkgbm9kZSkgewogICAgdmlzaXQobm9kZS5ib2R5KTsKICAgIHZpc2l0KG5vZGUuY2F0Y2hQYXJ0LCBCcmFuY2hLaW5kLkNBVENIKTsKICAgIHZpc2l0KG5vZGUuZmluYWxseVBhcnQsIEJyYW5jaEtpbmQuRklOQUxMWSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENhdGNoKGpzLkNhdGNoIG5vZGUpIHsKICAgIHZpc2l0KG5vZGUuYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENvbmRpdGlvbmFsKGpzLkNvbmRpdGlvbmFsIG5vZGUpIHsKICAgIHZpc2l0KG5vZGUuY29uZGl0aW9uKTsKICAgIHZpc2l0KG5vZGUudGhlbiwgQnJhbmNoS2luZC5DT05ESVRJT04sIHRydWUpOwogICAgdmlzaXQobm9kZS5vdGhlcndpc2UsIEJyYW5jaEtpbmQuQ09ORElUSU9OLCBmYWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFByZWZpeChqcy5QcmVmaXggbm9kZSkgewogICAgdmlzaXQobm9kZS5hcmd1bWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFBvc3RmaXgoanMuUG9zdGZpeCBub2RlKSB7CiAgICB2aXNpdChub2RlLmFyZ3VtZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0T2JqZWN0SW5pdGlhbGl6ZXIoanMuT2JqZWN0SW5pdGlhbGl6ZXIgbm9kZSkgewogICAgdmlzaXRMaXN0KG5vZGUucHJvcGVydGllcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFByb3BlcnR5KGpzLlByb3BlcnR5IG5vZGUpIHsKICAgIHZpc2l0KG5vZGUubmFtZSk7CiAgICB2aXNpdChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0UmVnRXhwTGl0ZXJhbChqcy5SZWdFeHBMaXRlcmFsIG5vZGUpIHt9CgogIEBvdmVycmlkZQogIHZpc2l0U3dpdGNoKGpzLlN3aXRjaCBub2RlKSB7CiAgICBzdGF0ZW1lbnRPZmZzZXQgPSBnZXRTeW50YXhPZmZzZXQobm9kZSk7CiAgICB2aXNpdFN1YmV4cHJlc3Npb24oCiAgICAgICAgbm9kZSwgbm9kZS5rZXksIGdldFN5bnRheE9mZnNldChub2RlKSwgU3RlcEtpbmQuU1dJVENIX0VYUFJFU1NJT04pOwogICAgc3RhdGVtZW50T2Zmc2V0ID0gbnVsbDsKICAgIGxlZnRUb1JpZ2h0T2Zmc2V0ID0gbnVsbDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZS5jYXNlcy5sZW5ndGg7IGkrKykgewogICAgICB2aXNpdChub2RlLmNhc2VzW2ldLCBCcmFuY2hLaW5kLkNBU0UsIGkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDYXNlKGpzLkNhc2Ugbm9kZSkgewogICAgdmlzaXQobm9kZS5leHByZXNzaW9uKTsKICAgIHZpc2l0KG5vZGUuYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdERlZmF1bHQoanMuRGVmYXVsdCBub2RlKSB7CiAgICB2aXNpdChub2RlLmJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRBcnJheUluaXRpYWxpemVyKGpzLkFycmF5SW5pdGlhbGl6ZXIgbm9kZSkgewogICAgdmlzaXRMaXN0KG5vZGUuZWxlbWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRBcnJheUhvbGUoanMuQXJyYXlIb2xlIG5vZGUpIHt9CgogIEBvdmVycmlkZQogIHZpc2l0TGFiZWxlZFN0YXRlbWVudChqcy5MYWJlbGVkU3RhdGVtZW50IG5vZGUpIHsKICAgIHN0YXRlbWVudE9mZnNldCA9IGdldFN5bnRheE9mZnNldChub2RlKTsKICAgIHZpc2l0KG5vZGUuYm9keSk7CiAgICBzdGF0ZW1lbnRPZmZzZXQgPSBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXREZWZlcnJlZEV4cHJlc3Npb24oanMuRGVmZXJyZWRFeHByZXNzaW9uIG5vZGUpIHsKICAgIHZpc2l0KG5vZGUudmFsdWUpOwogIH0KCiAgT2Zmc2V0IGdldE9mZnNldEZvck5vZGUoanMuTm9kZSBub2RlLCBpbnQgY29kZU9mZnNldCkgewogICAgaWYgKGNvZGVPZmZzZXQgPT0gbnVsbCkgewogICAgICBDb2RlUG9zaXRpb24gY29kZVBvc2l0aW9uID0gY29kZVBvc2l0aW9uc1tub2RlXTsKICAgICAgaWYgKGNvZGVQb3NpdGlvbiAhPSBudWxsKSB7CiAgICAgICAgY29kZU9mZnNldCA9IGNvZGVQb3NpdGlvbi5zdGFydFBvc2l0aW9uOwogICAgICB9CiAgICB9CiAgICBpZiAobGVmdFRvUmlnaHRPZmZzZXQgIT0gbnVsbCAmJgogICAgICAgIGNvZGVPZmZzZXQgIT0gbnVsbCAmJgogICAgICAgIGxlZnRUb1JpZ2h0T2Zmc2V0IDwgY29kZU9mZnNldCkgewogICAgICBsZWZ0VG9SaWdodE9mZnNldCA9IGNvZGVPZmZzZXQ7CiAgICB9CiAgICBpZiAobGVmdFRvUmlnaHRPZmZzZXQgPT0gbnVsbCkgewogICAgICBsZWZ0VG9SaWdodE9mZnNldCA9IHN0YXRlbWVudE9mZnNldDsKICAgIH0KICAgIHJldHVybiBuZXcgT2Zmc2V0KHN0YXRlbWVudE9mZnNldCwgbGVmdFRvUmlnaHRPZmZzZXQsIGNvZGVPZmZzZXQpOwogIH0KfQoKY2xhc3MgQ292ZXJhZ2UgewogIFNldDxqcy5Ob2RlPiBfbm9kZXNXaXRoSW5mbyA9IG5ldyBTZXQ8anMuTm9kZT4oKTsKICBpbnQgX25vZGVzV2l0aEluZm9Db3VudCA9IDA7CiAgU2V0PGpzLk5vZGU+IF9ub2Rlc1dpdGhvdXRJbmZvID0gbmV3IFNldDxqcy5Ob2RlPigpOwogIGludCBfbm9kZXNXaXRob3V0SW5mb0NvdW50ID0gMDsKICBNYXA8VHlwZSwgaW50PiBfbm9kZXNXaXRob3V0SW5mb0NvdW50QnlUeXBlID0gPFR5cGUsIGludD57fTsKICBTZXQ8anMuTm9kZT4gX25vZGVzV2l0aG91dE9mZnNldCA9IG5ldyBTZXQ8anMuTm9kZT4oKTsKICBpbnQgX25vZGVzV2l0aG91dE9mZnNldENvdW50ID0gMDsKCiAgdm9pZCByZWdpc3Rlck5vZGVXaXRoSW5mbyhqcy5Ob2RlIG5vZGUpIHsKICAgIF9ub2Rlc1dpdGhJbmZvLmFkZChub2RlKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJOb2RlV2l0aG91dEluZm8oanMuTm9kZSBub2RlKSB7CiAgICBfbm9kZXNXaXRob3V0SW5mby5hZGQobm9kZSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyTm9kZXNXaXRob3V0T2Zmc2V0KGpzLk5vZGUgbm9kZSkgewogICAgX25vZGVzV2l0aG91dE9mZnNldC5hZGQobm9kZSk7CiAgfQoKICB2b2lkIGNvbGxhcHNlKCkgewogICAgX25vZGVzV2l0aEluZm9Db3VudCArPSBfbm9kZXNXaXRoSW5mby5sZW5ndGg7CiAgICBfbm9kZXNXaXRoSW5mby5jbGVhcigpOwogICAgX25vZGVzV2l0aG91dE9mZnNldENvdW50ICs9IF9ub2Rlc1dpdGhvdXRPZmZzZXQubGVuZ3RoOwogICAgX25vZGVzV2l0aG91dE9mZnNldC5jbGVhcigpOwoKICAgIF9ub2Rlc1dpdGhvdXRJbmZvQ291bnQgKz0gX25vZGVzV2l0aG91dEluZm8ubGVuZ3RoOwogICAgZm9yIChqcy5Ob2RlIG5vZGUgaW4gX25vZGVzV2l0aG91dEluZm8pIHsKICAgICAgaWYgKG5vZGUgaXMganMuRXhwcmVzc2lvblN0YXRlbWVudCkgewogICAgICAgIF9ub2Rlc1dpdGhvdXRJbmZvQ291bnRCeVR5cGUucHV0SWZBYnNlbnQoCiAgICAgICAgICAgIG5vZGUuZXhwcmVzc2lvbi5ydW50aW1lVHlwZSwgKCkgPT4gMCk7CiAgICAgICAgX25vZGVzV2l0aG91dEluZm9Db3VudEJ5VHlwZVtub2RlLmV4cHJlc3Npb24ucnVudGltZVR5cGVdKys7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX25vZGVzV2l0aG91dEluZm9Db3VudEJ5VHlwZS5wdXRJZkFic2VudChub2RlLnJ1bnRpbWVUeXBlLCAoKSA9PiAwKTsKICAgICAgICBfbm9kZXNXaXRob3V0SW5mb0NvdW50QnlUeXBlW25vZGUucnVudGltZVR5cGVdKys7CiAgICAgIH0KICAgIH0KICAgIF9ub2Rlc1dpdGhvdXRJbmZvLmNsZWFyKCk7CiAgfQoKICBTdHJpbmcgZ2V0Q292ZXJhZ2VSZXBvcnQoKSB7CiAgICBjb2xsYXBzZSgpOwogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgaW50IHRvdGFsID0gX25vZGVzV2l0aEluZm9Db3VudCArIF9ub2Rlc1dpdGhvdXRJbmZvQ291bnQ7CiAgICBpZiAodG90YWwgPiAwKSB7CiAgICAgIHNiLndyaXRlKF9ub2Rlc1dpdGhJbmZvQ291bnQpOwogICAgICBzYi53cml0ZSgnLycpOwogICAgICBzYi53cml0ZSh0b3RhbCk7CiAgICAgIHNiLndyaXRlKCcgKCcpOwogICAgICBzYi53cml0ZSgoMTAwLjAgKiBfbm9kZXNXaXRoSW5mb0NvdW50IC8gdG90YWwpLnRvU3RyaW5nQXNGaXhlZCgyKSk7CiAgICAgIHNiLndyaXRlKCclKSBub2RlcyB3aXRoIGluZm8uJyk7CiAgICB9IGVsc2UgewogICAgICBzYi53cml0ZSgnTm8gbm9kZXMuJyk7CiAgICB9CiAgICBpZiAoX25vZGVzV2l0aG91dE9mZnNldENvdW50ID4gMCkgewogICAgICBzYi53cml0ZSgnICcpOwogICAgICBzYi53cml0ZShfbm9kZXNXaXRob3V0T2Zmc2V0Q291bnQpOwogICAgICBzYi53cml0ZSgnIG5vZGUnKTsKICAgICAgaWYgKF9ub2Rlc1dpdGhvdXRPZmZzZXRDb3VudCA+IDEpIHsKICAgICAgICBzYi53cml0ZSgncycpOwogICAgICB9CiAgICAgIHNiLndyaXRlKCcgd2l0aG91dCBvZmZzZXQuJyk7CiAgICB9CiAgICBpZiAoX25vZGVzV2l0aG91dEluZm9Db3VudCA+IDApIHsKICAgICAgc2Iud3JpdGUoJ1xuTm9kZXMgd2l0aG91dCBpbmZvICgnKTsKICAgICAgc2Iud3JpdGUoX25vZGVzV2l0aG91dEluZm9Db3VudCk7CiAgICAgIHNiLndyaXRlKCcpIGJ5IHJ1bnRpbWUgdHlwZTonKTsKICAgICAgTGlzdDxUeXBlPiB0eXBlcyA9IF9ub2Rlc1dpdGhvdXRJbmZvQ291bnRCeVR5cGUua2V5cy50b0xpc3QoKTsKICAgICAgdHlwZXMuc29ydCgoYSwgYikgewogICAgICAgIHJldHVybiAtX25vZGVzV2l0aG91dEluZm9Db3VudEJ5VHlwZVthXQogICAgICAgICAgICAuY29tcGFyZVRvKF9ub2Rlc1dpdGhvdXRJbmZvQ291bnRCeVR5cGVbYl0pOwogICAgICB9KTsKCiAgICAgIHR5cGVzLmZvckVhY2goKFR5cGUgdHlwZSkgewogICAgICAgIGludCBjb3VudCA9IF9ub2Rlc1dpdGhvdXRJbmZvQ291bnRCeVR5cGVbdHlwZV07CiAgICAgICAgc2Iud3JpdGUoJ1xuICcpOwogICAgICAgIHNiLndyaXRlKGNvdW50KTsKICAgICAgICBzYi53cml0ZSgnICcpOwogICAgICAgIHNiLndyaXRlKHR5cGUpOwogICAgICAgIHNiLndyaXRlKCcgbm9kZScpOwogICAgICAgIGlmIChjb3VudCA+IDEpIHsKICAgICAgICAgIHNiLndyaXRlKCdzJyk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgc2Iud3JpdGUoJ1xuJyk7CiAgICB9CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IGdldENvdmVyYWdlUmVwb3J0KCk7Cn0KCi8vLyBbVHJhY2VMaXN0ZW5lcl0gdGhhdCByZWdpc3RlcnMgW29uU3RlcF0gY2FsbGJhY2tzIHdpdGggW2NvdmVyYWdlXS4KY2xhc3MgQ292ZXJhZ2VMaXN0ZW5lciBleHRlbmRzIFRyYWNlTGlzdGVuZXIgd2l0aCBOb2RlVG9Tb3VyY2VJbmZvcm1hdGlvbk1peGluIHsKICBmaW5hbCBDb3ZlcmFnZSBjb3ZlcmFnZTsKICBAb3ZlcnJpZGUKICBmaW5hbCBTb3VyY2VJbmZvcm1hdGlvblJlYWRlciByZWFkZXI7CgogIENvdmVyYWdlTGlzdGVuZXIodGhpcy5jb3ZlcmFnZSwgdGhpcy5yZWFkZXIpOwoKICBAb3ZlcnJpZGUKICB2b2lkIG9uU3RlcChqcy5Ob2RlIG5vZGUsIE9mZnNldCBvZmZzZXQsIFN0ZXBLaW5kIGtpbmQpIHsKICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0gY29tcHV0ZVNvdXJjZUluZm9ybWF0aW9uKG5vZGUpOwogICAgaWYgKHNvdXJjZUluZm9ybWF0aW9uICE9IG51bGwpIHsKICAgICAgY292ZXJhZ2UucmVnaXN0ZXJOb2RlV2l0aEluZm8obm9kZSk7CiAgICB9IGVsc2UgewogICAgICBjb3ZlcmFnZS5yZWdpc3Rlck5vZGVXaXRob3V0SW5mbyhu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AQwqGzI4BAEMIBoEAQwiGgQBDDYgBAEMJBYXBAEMLwEMIC0YTBweMjAGBAEMHBwWBAEMIhYEAQw0HgQBDCcBDDQtFhwEAQw4FwQBOh43IjEIBiUeKiYGJSsGRwQCARE0HzciPzkkASweBAEvIQQBMiMEARQyHDwhATguLDIzRQ9NOggGHwQBHxAqPhUlFRcWSicNHQYoFSoZKhcIJAYmKigmRRowOQoBIjgZGRcYGxkZCgoWBhoEAQwsAgFHURsMKAEwAQw8SiUrDS4GBAEMHRkEAgE8OCcbATsBDCs1IDEGGQQCATFwYWNrYWdlOmNvbXBpbGVyL3NyYy9pby9wb3NpdGlvbl9pbmZvcm1hdGlvbi5kYXJ0NHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX21vZGVsL2VsZW1lbnRzLmRhcnTAAGYmLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5qc19tb2RlbC5lbGVtZW50czsKCmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnIHNob3cgTmFtZXM7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvaW5kZXhlZC5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2xhc3Nfc2V0LmRhcnQnIHNob3cgQ2xhc3NIaWVyYXJjaHlOb2Rlc01hcEtleTsKaW1wb3J0ICdjbG9zdXJlLmRhcnQnOwoKY29uc3QgU3RyaW5nIGpzRWxlbWVudFByZWZpeCA9ICdqOic7CgpjbGFzcyBKTGlicmFyeSBleHRlbmRzIEluZGV4ZWRMaWJyYXJ5IHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pMaWJyYXJ5XSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2xpYnJhcnknOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBAb3ZlcnJpZGUKICBmaW5hbCBVcmkgY2Fub25pY2FsVXJpOwoKICBKTGlicmFyeSh0aGlzLm5hbWUsIHRoaXMuY2Fub25pY2FsVXJpKTsKCiAgLy8vIERlc2VyaWFsaXplcyBhIFtKTGlicmFyeV0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBKTGlicmFyeS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgU3RyaW5nIG5hbWUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgVXJpIGNhbm9uaWNhbFVyaSA9IHNvdXJjZS5yZWFkVXJpKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpMaWJyYXJ5KG5hbWUsIGNhbm9uaWNhbFVyaSk7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtKTGlicmFyeV0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVTdHJpbmcobmFtZSk7CiAgICBzaW5rLndyaXRlVXJpKGNhbm9uaWNhbFVyaSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyR7anNFbGVtZW50UHJlZml4fWxpYnJhcnkoJG5hbWUpJzsKfQoKLy8vIEVudW0gdXNlZCBmb3IgaWRlbnRpZnlpbmcgW0pDbGFzc10gc3ViY2xhc3NlcyBpbiBzZXJpYWxpemF0aW9uLgplbnVtIEpDbGFzc0tpbmQgeyBub2RlLCBjbG9zdXJlLCByZWNvcmQgfQoKY2xhc3MgSkNsYXNzIGV4dGVuZHMgSW5kZXhlZENsYXNzIHdpdGggQ2xhc3NIaWVyYXJjaHlOb2Rlc01hcEtleSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtKQ2xhc3NdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnY2xhc3MnOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBKTGlicmFyeSBsaWJyYXJ5OwoKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzQWJzdHJhY3Q7CgogIEpDbGFzcyh0aGlzLmxpYnJhcnksIHRoaXMubmFtZSwge3RoaXMuaXNBYnN0cmFjdH0pOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW0pDbGFzc10gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBKQ2xhc3MucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBKQ2xhc3NLaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oSkNsYXNzS2luZC52YWx1ZXMpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgSkNsYXNzS2luZC5ub2RlOgogICAgICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgICAgIEpMaWJyYXJ5IGxpYnJhcnkgPSBzb3VyY2UucmVhZExpYnJhcnkoKTsKICAgICAgICBTdHJpbmcgbmFtZSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICAgICAgYm9vbCBpc0Fic3RyYWN0ID0gc291cmNlLnJlYWRCb29sKCk7CiAgICAgICAgc291cmNlLmVuZCh0YWcpOwogICAgICAgIHJldHVybiBuZXcgSkNsYXNzKGxpYnJhcnksIG5hbWUsIGlzQWJzdHJhY3Q6IGlzQWJzdHJhY3QpOwogICAgICBjYXNlIEpDbGFzc0tpbmQuY2xvc3VyZToKICAgICAgICByZXR1cm4gbmV3IEpDbG9zdXJlQ2xhc3MucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSkNsYXNzS2luZC5yZWNvcmQ6CiAgICAgICAgcmV0dXJuIG5ldyBKUmVjb3JkLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlVuZXhwZWN0ZWQgQ2xhc3NLaW5kICRraW5kIik7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtKQ2xhc3NdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShKQ2xhc3NLaW5kLm5vZGUpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUxpYnJhcnkobGlicmFyeSk7CiAgICBzaW5rLndyaXRlU3RyaW5nKG5hbWUpOwogICAgc2luay53cml0ZUJvb2woaXNBYnN0cmFjdCk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNDbG9zdXJlID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJHtqc0VsZW1lbnRQcmVmaXh9Y2xhc3MoJG5hbWUpJzsKfQoKY2xhc3MgSlR5cGVkZWYgZXh0ZW5kcyBJbmRleGVkVHlwZWRlZiB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtKVHlwZWRlZl0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICd0eXBlZGVmJzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgSkxpYnJhcnkgbGlicmFyeTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIEpUeXBlZGVmKHRoaXMubGlicmFyeSwgdGhpcy5uYW1lKTsKCiAgLy8vIERlc2VyaWFsaXplcyBhIFtKVHlwZWRlZl0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBKVHlwZWRlZi5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgSkxpYnJhcnkgbGlicmFyeSA9IHNvdXJjZS5yZWFkTGlicmFyeSgpOwogICAgU3RyaW5nIG5hbWUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBKVHlwZWRlZihsaWJyYXJ5LCBuYW1lKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0pUeXBlZGVmXSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUxpYnJhcnkobGlicmFyeSk7CiAgICBzaW5rLndyaXRlU3RyaW5nKG5hbWUpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICcke2pzRWxlbWVudFByZWZpeH10eXBlZGVmKCRuYW1lKSc7Cn0KCi8vLyBFbnVtIHVzZWQgZm9yIGlkZW50aWZ5aW5nIFtKTWVtYmVyXSBzdWJjbGFzc2VzIGluIHNlcmlhbGl6YXRpb24uCmVudW0gSk1lbWJlcktpbmQgewogIGdlbmVyYXRpdmVDb25zdHJ1Y3RvciwKICBmYWN0b3J5Q29uc3RydWN0b3IsCiAgY29uc3RydWN0b3JCb2R5LAogIGZpZWxkLAogIGdldHRlciwKICBzZXR0ZXIsCiAgbWV0aG9kLAogIGNsb3N1cmVGaWVsZCwKICBjbG9zdXJlQ2FsbE1ldGhvZCwKICBnZW5lcmF0b3JCb2R5LAogIHNpZ25hdHVyZU1ldGhvZCwKICByZWNvcmRGaWVsZCwKfQoKYWJzdHJhY3QgY2xhc3MgSk1lbWJlciBleHRlbmRzIEluZGV4ZWRNZW1iZXIgewogIEBvdmVycmlkZQogIGZpbmFsIEpMaWJyYXJ5IGxpYnJhcnk7CiAgQG92ZXJyaWRlCiAgZmluYWwgSkNsYXNzIGVuY2xvc2luZ0NsYXNzOwogIGZpbmFsIE5hbWUgX25hbWU7CiAgZmluYWwgYm9vbCBfaXNTdGF0aWM7CgogIEpNZW1iZXIodGhpcy5saWJyYXJ5LCB0aGlzLmVuY2xvc2luZ0NsYXNzLCB0aGlzLl9uYW1lLCB7Ym9vbCBpc1N0YXRpYzogZmFsc2V9KQogICAgICA6IF9pc1N0YXRpYyA9IGlzU3RhdGljOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW0pNZW1iZXJdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgSk1lbWJlci5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIEpNZW1iZXJLaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oSk1lbWJlcktpbmQudmFsdWVzKTsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIEpNZW1iZXJLaW5kLmdlbmVyYXRpdmVDb25zdHJ1Y3RvcjoKICAgICAgICByZXR1cm4gbmV3IEpHZW5lcmF0aXZlQ29uc3RydWN0b3IucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSk1lbWJlcktpbmQuZmFjdG9yeUNvbnN0cnVjdG9yOgogICAgICAgIHJldHVybiBuZXcgSkZhY3RvcnlDb25zdHJ1Y3Rvci5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBKTWVtYmVyS2luZC5jb25zdHJ1Y3RvckJvZHk6CiAgICAgICAgcmV0dXJuIG5ldyBKQ29uc3RydWN0b3JCb2R5LnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBjYXNlIEpNZW1iZXJLaW5kLmZpZWxkOgogICAgICAgIHJldHVybiBuZXcgSkZpZWxkLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBjYXNlIEpNZW1iZXJLaW5kLmdldHRlcjoKICAgICAgICByZXR1cm4gbmV3IEpHZXR0ZXIucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSk1lbWJlcktpbmQuc2V0dGVyOgogICAgICAgIHJldHVybiBuZXcgSlNldHRlci5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBKTWVtYmVyS2luZC5tZXRob2Q6CiAgICAgICAgcmV0dXJuIG5ldyBKTWV0aG9kLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBjYXNlIEpNZW1iZXJLaW5kLmNsb3N1cmVGaWVsZDoKICAgICAgICByZXR1cm4gbmV3IEpDbG9zdXJlRmllbGQucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSk1lbWJlcktpbmQuY2xvc3VyZUNhbGxNZXRob2Q6CiAgICAgICAgcmV0dXJuIG5ldyBKQ2xvc3VyZUNhbGxNZXRob2QucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSk1lbWJlcktpbmQuZ2VuZXJhdG9yQm9keToKICAgICAgICByZXR1cm4gbmV3IEpHZW5lcmF0b3JCb2R5LnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBjYXNlIEpNZW1iZXJLaW5kLnNpZ25hdHVyZU1ldGhvZDoKICAgICAgICByZXR1cm4gbmV3IEpTaWduYXR1cmVNZXRob2QucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSk1lbWJlcktpbmQucmVjb3JkRmllbGQ6CiAgICAgICAgcmV0dXJuIG5ldyBKUmVjb3JkRmllbGQucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBKTWVtYmVyS2luZCAka2luZCIpOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbSk1lbWJlcl0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gX25hbWUudGV4dDsKCiAgQG92ZXJyaWRlCiAgTmFtZSBnZXQgbWVtYmVyTmFtZSA9PiBfbmFtZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNBc3NpZ25hYmxlID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0NvbnN0ID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0Fic3RyYWN0ID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1NldHRlciA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNHZXR0ZXIgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRnVuY3Rpb24gPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRmllbGQgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQ29uc3RydWN0b3IgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzSW5zdGFuY2VNZW1iZXIgPT4gZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCAmJiAhX2lzU3RhdGljOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1N0YXRpYyA9PiBlbmNsb3NpbmdDbGFzcyAhPSBudWxsICYmIF9pc1N0YXRpYzsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNUb3BMZXZlbCA9PiBlbmNsb3NpbmdDbGFzcyA9PSBudWxsOwoKICBTdHJpbmcgZ2V0IF9raW5kOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJHtqc0VsZW1lbnRQcmVmaXh9JF9raW5kJwogICAgICAnKCR7ZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCA/ICcke2VuY2xvc2luZ0NsYXNzLm5hbWV9LicgOiAnJ30kbmFtZSknOwp9CgphYnN0cmFjdCBjbGFzcyBKRnVuY3Rpb24gZXh0ZW5kcyBKTWVtYmVyCiAgICBpbXBsZW1lbnRzIEZ1bmN0aW9uRW50aXR5LCBJbmRleGVkRnVuY3Rpb24gewogIEBvdmVycmlkZQogIGZpbmFsIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmU7CiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0V4dGVybmFsOwogIEBvdmVycmlkZQogIGZpbmFsIEFzeW5jTWFya2VyIGFzeW5jTWFya2VyOwoKICBKRnVuY3Rpb24oSkxpYnJhcnkgbGlicmFyeSwgSkNsYXNzIGVuY2xvc2luZ0NsYXNzLCBOYW1lIG5hbWUsCiAgICAgIHRoaXMucGFyYW1ldGVyU3RydWN0dXJlLCB0aGlzLmFzeW5jTWFya2VyLAogICAgICB7Ym9vbCBpc1N0YXRpYzogZmFsc2UsIHRoaXMuaXNFeHRlcm5hbDogZmFsc2V9KQogICAgICA6IHN1cGVyKGxpYnJhcnksIGVuY2xvc2luZ0NsYXNzLCBuYW1lLCBpc1N0YXRpYzogaXNTdGF0aWMpOwp9CgphYnN0cmFjdCBjbGFzcyBKQ29uc3RydWN0b3IgZXh0ZW5kcyBKRnVuY3Rpb24KICAgIGltcGxlbWVudHMgQ29uc3RydWN0b3JFbnRpdHksIEluZGV4ZWRDb25zdHJ1Y3RvciB7CiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0NvbnN0OwoKICBKQ29uc3RydWN0b3IoCiAgICAgIEpDbGFzcyBlbmNsb3NpbmdDbGFzcywgTmFtZSBuYW1lLCBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlLAogICAgICB7Ym9vbCBpc0V4dGVybmFsLCB0aGlzLmlzQ29uc3R9KQogICAgICA6IHN1cGVyKGVuY2xvc2luZ0NsYXNzLmxpYnJhcnksIGVuY2xvc2luZ0NsYXNzLCBuYW1lLCBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgICAgICAgIEFzeW5jTWFya2VyLlNZTkMsCiAgICAgICAgICAgIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0NvbnN0cnVjdG9yID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzSW5zdGFuY2VNZW1iZXIgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU3RhdGljID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1RvcExldmVsID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0Zyb21FbnZpcm9ubWVudENvbnN0cnVjdG9yID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9raW5kID0+ICdjb25zdHJ1Y3Rvcic7Cn0KCmNsYXNzIEpHZW5lcmF0aXZlQ29uc3RydWN0b3IgZXh0ZW5kcyBKQ29uc3RydWN0b3IgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSkdlbmVyYXRpdmVDb25zdHJ1Y3Rvcl0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdnZW5lcmF0aXZlLWNvbnN0cnVjdG9yJzsKCiAgSkdlbmVyYXRpdmVDb25zdHJ1Y3RvcigKICAgICAgSkNsYXNzIGVuY2xvc2luZ0NsYXNzLCBOYW1lIG5hbWUsIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgIHtib29sIGlzRXh0ZXJuYWwsIGJvb2wgaXNDb25zdH0pCiAgICAgIDogc3VwZXIoZW5jbG9zaW5nQ2xhc3MsIG5hbWUsIHBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAgICAgICAgaXNFeHRlcm5hbDogaXNFeHRlcm5hbCwgaXNDb25zdDogaXNDb25zdCk7CgogIGZhY3RvcnkgSkdlbmVyYXRpdmVDb25zdHJ1Y3Rvci5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgSkNsYXNzIGVuY2xvc2luZ0NsYXNzID0gc291cmNlLnJlYWRDbGFzcygpOwogICAgU3RyaW5nIG5hbWUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSA9CiAgICAgICAgbmV3IFBhcmFtZXRlclN0cnVjdHVyZS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIGJvb2wgaXNFeHRlcm5hbCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgYm9vbCBpc0NvbnN0ID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpHZW5lcmF0aXZlQ29uc3RydWN0b3IoZW5jbG9zaW5nQ2xhc3MsCiAgICAgICAgbmV3IE5hbWUobmFtZSwgZW5jbG9zaW5nQ2xhc3MubGlicmFyeSksIHBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAgICBpc0V4dGVybmFsOiBpc0V4dGVybmFsLCBpc0NvbnN0OiBpc0NvbnN0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKEpNZW1iZXJLaW5kLmdlbmVyYXRpdmVDb25zdHJ1Y3Rvcik7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlQ2xhc3MoZW5jbG9zaW5nQ2xhc3MpOwogICAgc2luay53cml0ZVN0cmluZyhuYW1lKTsKICAgIHBhcmFtZXRlclN0cnVjdHVyZS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLndyaXRlQm9vbChpc0V4dGVybmFsKTsKICAgIHNpbmsud3JpdGVCb29sKGlzQ29uc3QpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRmFjdG9yeUNvbnN0cnVjdG9yID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0dlbmVyYXRpdmVDb25zdHJ1Y3RvciA9PiB0cnVlOwp9CgpjbGFzcyBKRmFjdG9yeUNvbnN0cnVjdG9yIGV4dGVuZHMgSkNvbnN0cnVjdG9yIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pGYWN0b3J5Q29uc3RydWN0b3JdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnZmFjdG9yeS1jb25zdHJ1Y3Rvcic7CgogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgaXNGcm9tRW52aXJvbm1lbnRDb25zdHJ1Y3RvcjsKCiAgSkZhY3RvcnlDb25zdHJ1Y3RvcigKICAgICAgSkNsYXNzIGVuY2xvc2luZ0NsYXNzLCBOYW1lIG5hbWUsIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgIHtib29sIGlzRXh0ZXJuYWwsIGJvb2wgaXNDb25zdCwgdGhpcy5pc0Zyb21FbnZpcm9ubWVudENvbnN0cnVjdG9yfSkKICAgICAgOiBzdXBlcihlbmNsb3NpbmdDbGFzcywgbmFtZSwgcGFyYW1ldGVyU3RydWN0dXJlLAogICAgICAgICAgICBpc0V4dGVybmFsOiBpc0V4dGVybmFsLCBpc0NvbnN0OiBpc0NvbnN0KTsKCiAgZmFjdG9yeSBKRmFjdG9yeUNvbnN0cnVjdG9yLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBKQ2xhc3MgZW5jbG9zaW5nQ2xhc3MgPSBzb3VyY2UucmVhZENsYXNzKCk7CiAgICBTdHJpbmcgbmFtZSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlID0KICAgICAgICBuZXcgUGFyYW1ldGVyU3RydWN0dXJlLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgYm9vbCBpc0V4dGVybmFsID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBib29sIGlzQ29uc3QgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGJvb2wgaXNGcm9tRW52aXJvbm1lbnRDb25zdHJ1Y3RvciA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBKRmFjdG9yeUNvbnN0cnVjdG9yKGVuY2xvc2luZ0NsYXNzLAogICAgICAgIG5ldyBOYW1lKG5hbWUsIGVuY2xvc2luZ0NsYXNzLmxpYnJhcnkpLCBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgICAgaXNFeHRlcm5hbDogaXNFeHRlcm5hbCwKICAgICAgICBpc0NvbnN0OiBpc0NvbnN0LAogICAgICAgIGlzRnJvbUVudmlyb25tZW50Q29uc3RydWN0b3I6IGlzRnJvbUVudmlyb25tZW50Q29uc3RydWN0b3IpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSk1lbWJlcktpbmQuZmFjdG9yeUNvbnN0cnVjdG9yKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVDbGFzcyhlbmNsb3NpbmdDbGFzcyk7CiAgICBzaW5rLndyaXRlU3RyaW5nKG5hbWUpOwogICAgcGFyYW1ldGVyU3RydWN0dXJlLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsud3JpdGVCb29sKGlzRXh0ZXJuYWwpOwogICAgc2luay53cml0ZUJvb2woaXNDb25zdCk7CiAgICBzaW5rLndyaXRlQm9vbChpc0Zyb21FbnZpcm9ubWVudENvbnN0cnVjdG9yKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0ZhY3RvcnlDb25zdHJ1Y3RvciA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0dlbmVyYXRpdmVDb25zdHJ1Y3RvciA9PiBmYWxzZTsKfQoKY2xhc3MgSkNvbnN0cnVjdG9yQm9keSBleHRlbmRzIEpGdW5jdGlvbiBpbXBsZW1lbnRzIENvbnN0cnVjdG9yQm9keUVudGl0eSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtKQ29uc3RydWN0b3JCb2R5XSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2NvbnN0cnVjdG9yLWJvZHknOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBKQ29uc3RydWN0b3IgY29uc3RydWN0b3I7CgogIEpDb25zdHJ1Y3RvckJvZHkodGhpcy5jb25zdHJ1Y3RvciwgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSkKICAgICAgOiBzdXBlcihjb25zdHJ1Y3Rvci5saWJyYXJ5LCBjb25zdHJ1Y3Rvci5lbmNsb3NpbmdDbGFzcywKICAgICAgICAgICAgY29uc3RydWN0b3IubWVtYmVyTmFtZSwgcGFyYW1ldGVyU3RydWN0dXJlLCBBc3luY01hcmtlci5TWU5DLAogICAgICAgICAgICBpc1N0YXRpYzogZmFsc2UsIGlzRXh0ZXJuYWw6IGZhbHNlKTsKCiAgZmFjdG9yeSBKQ29uc3RydWN0b3JCb2R5LnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBKQ29uc3RydWN0b3IgY29uc3RydWN0b3IgPSBzb3VyY2UucmVhZE1lbWJlcigpOwogICAgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSA9CiAgICAgICAgbmV3IFBhcmFtZXRlclN0cnVjdHVyZS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgSkNvbnN0cnVjdG9yQm9keShjb25zdHJ1Y3RvciwgcGFyYW1ldGVyU3RydWN0dXJlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKEpNZW1iZXJLaW5kLmNvbnN0cnVjdG9yQm9keSk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTWVtYmVyKGNvbnN0cnVjdG9yKTsKICAgIHBhcmFtZXRlclN0cnVjdHVyZS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfa2luZCA9PiAnY29uc3RydWN0b3JfYm9keSc7Cn0KCmNsYXNzIEpNZXRob2QgZXh0ZW5kcyBKRnVuY3Rpb24gewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSk1ldGhvZF0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdtZXRob2QnOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzQWJzdHJhY3Q7CgogIEpNZXRob2QoSkxpYnJhcnkgbGlicmFyeSwgSkNsYXNzIGVuY2xvc2luZ0NsYXNzLCBOYW1lIG5hbWUsCiAgICAgIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUsIEFzeW5jTWFya2VyIGFzeW5jTWFya2VyLAogICAgICB7Ym9vbCBpc1N0YXRpYywgYm9vbCBpc0V4dGVybmFsLCB0aGlzLmlzQWJzdHJhY3R9KQogICAgICA6IHN1cGVyKGxpYnJhcnksIGVuY2xvc2luZ0NsYXNzLCBuYW1lLCBwYXJhbWV0ZXJTdHJ1Y3R1cmUsIGFzeW5jTWFya2VyLAogICAgICAgICAgICBpc1N0YXRpYzogaXNTdGF0aWMsIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwpOwoKICBmYWN0b3J5IEpNZXRob2QucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIE1lbWJlckNvbnRleHRLaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oTWVtYmVyQ29udGV4dEtpbmQudmFsdWVzKTsKICAgIEpMaWJyYXJ5IGxpYnJhcnk7CiAgICBKQ2xhc3MgZW5jbG9zaW5nQ2xhc3M7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBNZW1iZXJDb250ZXh0S2luZC5saWJyYXJ5OgogICAgICAgIGxpYnJhcnkgPSBzb3VyY2UucmVhZExpYnJhcnkoKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBNZW1iZXJDb250ZXh0S2luZC5jbHM6CiAgICAgICAgZW5jbG9zaW5nQ2xhc3MgPSBzb3VyY2UucmVhZENsYXNzKCk7CiAgICAgICAgbGlicmFyeSA9IGVuY2xvc2luZ0NsYXNzLmxpYnJhcnk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBTdHJpbmcgbmFtZSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlID0KICAgICAgICBuZXcgUGFyYW1ldGVyU3RydWN0dXJlLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgQXN5bmNNYXJrZXIgYXN5bmNNYXJrZXIgPSBzb3VyY2UucmVhZEVudW0oQXN5bmNNYXJrZXIudmFsdWVzKTsKICAgIGJvb2wgaXNTdGF0aWMgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGJvb2wgaXNFeHRlcm5hbCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgYm9vbCBpc0Fic3RyYWN0ID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpNZXRob2QobGlicmFyeSwgZW5jbG9zaW5nQ2xhc3MsIG5ldyBOYW1lKG5hbWUsIGxpYnJhcnkpLAogICAgICAgIHBhcmFtZXRlclN0cnVjdHVyZSwgYXN5bmNNYXJrZXIsCiAgICAgICAgaXNTdGF0aWM6IGlzU3RhdGljLCBpc0V4dGVybmFsOiBpc0V4dGVybmFsLCBpc0Fic3RyYWN0OiBpc0Fic3RyYWN0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKEpNZW1iZXJLaW5kLm1ldGhvZCk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBpZiAoZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCkgewogICAgICBzaW5rLndyaXRlRW51bShNZW1iZXJDb250ZXh0S2luZC5jbHMpOwogICAgICBzaW5rLndyaXRlQ2xhc3MoZW5jbG9zaW5nQ2xhc3MpOwogICAgfSBlbHNlIHsKICAgICAgc2luay53cml0ZUVudW0oTWVtYmVyQ29udGV4dEtpbmQubGlicmFyeSk7CiAgICAgIHNpbmsud3JpdGVMaWJyYXJ5KGxpYnJhcnkpOwogICAgfQogICAgc2luay53cml0ZVN0cmluZyhuYW1lKTsKICAgIHBhcmFtZXRlclN0cnVjdHVyZS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLndyaXRlRW51bShhc3luY01hcmtlcik7CiAgICBzaW5rLndyaXRlQm9vbChpc1N0YXRpYyk7CiAgICBzaW5rLndyaXRlQm9vbChpc0V4dGVybmFsKTsKICAgIHNpbmsud3JpdGVCb29sKGlzQWJzdHJhY3QpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRnVuY3Rpb24gPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfa2luZCA9PiAnbWV0aG9kJzsKfQoKY2xhc3MgSkdlbmVyYXRvckJvZHkgZXh0ZW5kcyBKRnVuY3Rpb24gewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSkdlbmVyYXRvckJvZHldIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnZ2VuZXJhdG9yLWJvZHknOwoKICBmaW5hbCBKRnVuY3Rpb24gZnVuY3Rpb247CiAgZmluYWwgRGFydFR5cGUgZWxlbWVudFR5cGU7CiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGhhc2hDb2RlOwoKICBKR2VuZXJhdG9yQm9keSh0aGlzLmZ1bmN0aW9uLCB0aGlzLmVsZW1lbnRUeXBlKQogICAgICA6IGhhc2hDb2RlID0gZnVuY3Rpb24uaGFzaENvZGUgKyAxLCAvLyBIYWNrIHN0YWJpbGl6ZSBzb3J0IG9yZGVyLgogICAgICAgIHN1cGVyKGZ1bmN0aW9uLmxpYnJhcnksIGZ1bmN0aW9uLmVuY2xvc2luZ0NsYXNzLCBmdW5jdGlvbi5tZW1iZXJOYW1lLAogICAgICAgICAgICBmdW5jdGlvbi5wYXJhbWV0ZXJTdHJ1Y3R1cmUsIGZ1bmN0aW9uLmFzeW5jTWFya2VyLAogICAgICAgICAgICBpc1N0YXRpYzogZnVuY3Rpb24uaXNTdGF0aWMsIGlzRXh0ZXJuYWw6IGZhbHNlKTsKCiAgZmFjdG9yeSBKR2VuZXJhdG9yQm9keS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgSkZ1bmN0aW9uIGZ1bmN0aW9uID0gc291cmNlLnJlYWRNZW1iZXIoKTsKICAgIERhcnRUeXBlIGVsZW1lbnRUeXBlID0gc291cmNlLnJlYWREYXJ0VHlwZSgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBKR2VuZXJhdG9yQm9keShmdW5jdGlvbiwgZWxlbWVudFR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSk1lbWJlcktpbmQuZ2VuZXJhdG9yQm9keSk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTWVtYmVyKGZ1bmN0aW9uKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZShlbGVtZW50VHlwZSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfa2luZCA9PiAnZ2VuZXJhdG9yX2JvZHknOwp9CgpjbGFzcyBKR2V0dGVyIGV4dGVuZHMgSkZ1bmN0aW9uIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pHZXR0ZXJdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnZ2V0dGVyJzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0Fic3RyYWN0OwoKICBKR2V0dGVyKEpMaWJyYXJ5IGxpYnJhcnksIEpDbGFzcyBlbmNsb3NpbmdDbGFzcywgTmFtZSBuYW1lLAogICAgICBBc3luY01hcmtlciBhc3luY01hcmtlciwKICAgICAge2Jvb2wgaXNTdGF0aWMsIGJvb2wgaXNFeHRlcm5hbCwgdGhpcy5pc0Fic3RyYWN0fSkKICAgICAgOiBzdXBlcihsaWJyYXJ5LCBlbmNsb3NpbmdDbGFzcywgbmFtZSwgY29uc3QgUGFyYW1ldGVyU3RydWN0dXJlLmdldHRlcigpLAogICAgICAgICAgICBhc3luY01hcmtlciwKICAgICAgICAgICAgaXNTdGF0aWM6IGlzU3RhdGljLCBpc0V4dGVybmFsOiBpc0V4dGVybmFsKTsKCiAgZmFjdG9yeSBKR2V0dGVyLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBNZW1iZXJDb250ZXh0S2luZCBraW5kID0gc291cmNlLnJlYWRFbnVtKE1lbWJlckNvbnRleHRLaW5kLnZhbHVlcyk7CiAgICBKTGlicmFyeSBsaWJyYXJ5OwogICAgSkNsYXNzIGVuY2xvc2luZ0NsYXNzOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgTWVtYmVyQ29udGV4dEtpbmQubGlicmFyeToKICAgICAgICBsaWJyYXJ5ID0gc291cmNlLnJlYWRMaWJyYXJ5KCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTWVtYmVyQ29udGV4dEtpbmQuY2xzOgogICAgICAgIGVuY2xvc2luZ0NsYXNzID0gc291cmNlLnJlYWRDbGFzcygpOwogICAgICAgIGxpYnJhcnkgPSBlbmNsb3NpbmdDbGFzcy5saWJyYXJ5OwogICAgICAgIGJyZWFrOwogICAgfQogICAgU3RyaW5nIG5hbWUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgQXN5bmNNYXJrZXIgYXN5bmNNYXJrZXIgPSBzb3VyY2UucmVhZEVudW0oQXN5bmNNYXJrZXIudmFsdWVzKTsKICAgIGJvb2wgaXNTdGF0aWMgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGJvb2wgaXNFeHRlcm5hbCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgYm9vbCBpc0Fic3RyYWN0ID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpHZXR0ZXIoCiAgICAgICAgbGlicmFyeSwgZW5jbG9zaW5nQ2xhc3MsIG5ldyBOYW1lKG5hbWUsIGxpYnJhcnkpLCBhc3luY01hcmtlciwKICAgICAgICBpc1N0YXRpYzogaXNTdGF0aWMsIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwsIGlzQWJzdHJhY3Q6IGlzQWJzdHJhY3QpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSk1lbWJlcktpbmQuZ2V0dGVyKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIGlmIChlbmNsb3NpbmdDbGFzcyAhPSBudWxsKSB7CiAgICAgIHNpbmsud3JpdGVFbnVtKE1lbWJlckNvbnRleHRLaW5kLmNscyk7CiAgICAgIHNpbmsud3JpdGVDbGFzcyhlbmNsb3NpbmdDbGFzcyk7CiAgICB9IGVsc2UgewogICAgICBzaW5rLndyaXRlRW51bShNZW1iZXJDb250ZXh0S2luZC5saWJyYXJ5KTsKICAgICAgc2luay53cml0ZUxpYnJhcnkobGlicmFyeSk7CiAgICB9CiAgICBzaW5rLndyaXRlU3RyaW5nKG5hbWUpOwogICAgc2luay53cml0ZUVudW0oYXN5bmNNYXJrZXIpOwogICAgc2luay53cml0ZUJvb2woaXNTdGF0aWMpOwogICAgc2luay53cml0ZUJvb2woaXNFeHRlcm5hbCk7CiAgICBzaW5rLndyaXRlQm9vbChpc0Fic3RyYWN0KTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0dldHRlciA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9raW5kID0+ICdnZXR0ZXInOwp9CgpjbGFzcyBKU2V0dGVyIGV4dGVuZHMgSkZ1bmN0aW9uIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pTZXR0ZXJdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnc2V0dGVyJzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0Fic3RyYWN0OwoKICBKU2V0dGVyKEpMaWJyYXJ5IGxpYnJhcnksIEpDbGFzcyBlbmNsb3NpbmdDbGFzcywgTmFtZSBuYW1lLAogICAgICB7Ym9vbCBpc1N0YXRpYywgYm9vbCBpc0V4dGVybmFsLCB0aGlzLmlzQWJzdHJhY3R9KQogICAgICA6IHN1cGVyKGxpYnJhcnksIGVuY2xvc2luZ0NsYXNzLCBuYW1lLCBjb25zdCBQYXJhbWV0ZXJTdHJ1Y3R1cmUuc2V0dGVyKCksCiAgICAgICAgICAgIEFzeW5jTWFya2VyLlNZTkMsCiAgICAgICAgICAgIGlzU3RhdGljOiBpc1N0YXRpYywgaXNFeHRlcm5hbDogaXNFeHRlcm5hbCk7CgogIGZhY3RvcnkgSlNldHRlci5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgTWVtYmVyQ29udGV4dEtpbmQga2luZCA9IHNvdXJjZS5yZWFkRW51bShNZW1iZXJDb250ZXh0S2luZC52YWx1ZXMpOwogICAgSkxpYnJhcnkgbGlicmFyeTsKICAgIEpDbGFzcyBlbmNsb3NpbmdDbGFzczsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIE1lbWJlckNvbnRleHRLaW5kLmxpYnJhcnk6CiAgICAgICAgbGlicmFyeSA9IHNvdXJjZS5yZWFkTGlicmFyeSgpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1lbWJlckNvbnRleHRLaW5kLmNsczoKICAgICAgICBlbmNsb3NpbmdDbGFzcyA9IHNvdXJjZS5yZWFkQ2xhc3MoKTsKICAgICAgICBsaWJyYXJ5ID0gZW5jbG9zaW5nQ2xhc3MubGlicmFyeTsKICAgICAgICBicmVhazsKICAgIH0KICAgIFN0cmluZyBuYW1lID0gc291cmNlLnJlYWRTdHJpbmcoKTsKICAgIGJvb2wgaXNTdGF0aWMgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGJvb2wgaXNFeHRlcm5hbCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgYm9vbCBpc0Fic3RyYWN0ID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpTZXR0ZXIoCiAgICAgICAgbGlicmFyeSwgZW5jbG9zaW5nQ2xhc3MsIG5ldyBOYW1lKG5hbWUsIGxpYnJhcnksIGlzU2V0dGVyOiB0cnVlKSwKICAgICAgICBpc1N0YXRpYzogaXNTdGF0aWMsIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwsIGlzQWJzdHJhY3Q6IGlzQWJzdHJhY3QpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSk1lbWJlcktpbmQuc2V0dGVyKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIGlmIChlbmNsb3NpbmdDbGFzcyAhPSBudWxsKSB7CiAgICAgIHNpbmsud3JpdGVFbnVtKE1lbWJlckNvbnRleHRLaW5kLmNscyk7CiAgICAgIHNpbmsud3JpdGVDbGFzcyhlbmNsb3NpbmdDbGFzcyk7CiAgICB9IGVsc2UgewogICAgICBzaW5rLndyaXRlRW51bShNZW1iZXJDb250ZXh0S2luZC5saWJyYXJ5KTsKICAgICAgc2luay53cml0ZUxpYnJhcnkobGlicmFyeSk7CiAgICB9CiAgICBzaW5rLndyaXRlU3RyaW5nKG5hbWUpOwogICAgc2luay53cml0ZUJvb2woaXNTdGF0aWMpOwogICAgc2luay53cml0ZUJvb2woaXNFeHRlcm5hbCk7CiAgICBzaW5rLndyaXRlQm9vbChpc0Fic3RyYWN0KTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0Fzc2lnbmFibGUgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTZXR0ZXIgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfa2luZCA9PiAnc2V0dGVyJzsKfQoKY2xhc3MgSkZpZWxkIGV4dGVuZHMgSk1lbWJlciBpbXBsZW1lbnRzIEZpZWxkRW50aXR5LCBJbmRleGVkRmllbGQgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSkZpZWxkXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2ZpZWxkJzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0Fzc2lnbmFibGU7CiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0NvbnN0OwoKICBKRmllbGQoSkxpYnJhcnkgbGlicmFyeSwgSkNsYXNzIGVuY2xvc2luZ0NsYXNzLCBOYW1lIG5hbWUsCiAgICAgIHtib29sIGlzU3RhdGljLCB0aGlzLmlzQXNzaWduYWJsZSwgdGhpcy5pc0NvbnN0fSkKICAgICAgOiBzdXBlcihsaWJyYXJ5LCBlbmNsb3NpbmdDbGFzcywgbmFtZSwgaXNTdGF0aWM6IGlzU3RhdGljKTsKCiAgZmFjdG9yeSBKRmllbGQucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIE1lbWJlckNvbnRleHRLaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oTWVtYmVyQ29udGV4dEtpbmQudmFsdWVzKTsKICAgIEpMaWJyYXJ5IGxpYnJhcnk7CiAgICBKQ2xhc3MgZW5jbG9zaW5nQ2xhc3M7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBNZW1iZXJDb250ZXh0S2luZC5saWJyYXJ5OgogICAgICAgIGxpYnJhcnkgPSBzb3VyY2UucmVhZExpYnJhcnkoKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBNZW1iZXJDb250ZXh0S2luZC5jbHM6CiAgICAgICAgZW5jbG9zaW5nQ2xhc3MgPSBzb3VyY2UucmVhZENsYXNzKCk7CiAgICAgICAgbGlicmFyeSA9IGVuY2xvc2luZ0NsYXNzLmxpYnJhcnk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBTdHJpbmcgbmFtZSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICBib29sIGlzU3RhdGljID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBib29sIGlzQXNzaWduYWJsZSA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgYm9vbCBpc0NvbnN0ID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpGaWVsZChsaWJyYXJ5LCBlbmNsb3NpbmdDbGFzcywgbmV3IE5hbWUobmFtZSwgbGlicmFyeSksCiAgICAgICAgaXNTdGF0aWM6IGlzU3RhdGljLCBpc0Fzc2lnbmFibGU6IGlzQXNzaWduYWJsZSwgaXNDb25zdDogaXNDb25zdCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShKTWVtYmVyS2luZC5maWVsZCk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBpZiAoZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCkgewogICAgICBzaW5rLndyaXRlRW51bShNZW1iZXJDb250ZXh0S2luZC5jbHMpOwogICAgICBzaW5rLndyaXRlQ2xhc3MoZW5jbG9zaW5nQ2xhc3MpOwogICAgfSBlbHNlIHsKICAgICAgc2luay53cml0ZUVudW0oTWVtYmVyQ29udGV4dEtpbmQubGlicmFyeSk7CiAgICAgIHNpbmsud3JpdGVMaWJyYXJ5KGxpYnJhcnkpOwogICAgfQogICAgc2luay53cml0ZVN0cmluZyhuYW1lKTsKICAgIHNpbmsud3JpdGVCb29sKGlzU3RhdGljKTsKICAgIHNpbmsud3JpdGVCb29sKGlzQXNzaWduYWJsZSk7CiAgICBzaW5rLndyaXRlQm9vbChpc0NvbnN0KTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0ZpZWxkID0+IHRydWU7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2tpbmQgPT4gJ2ZpZWxkJzsKfQoKY2xhc3MgSkNsb3N1cmVDYWxsTWV0aG9kIGV4dGVuZHMgSk1ldGhvZCB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtKQ2xvc3VyZUNhbGxNZXRob2RdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnY2xvc3VyZS1jYWxsLW1ldGhvZCc7CgogIEpDbG9zdXJlQ2FsbE1ldGhvZChDbGFzc0VudGl0eSBlbmNsb3NpbmdDbGFzcywKICAgICAgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSwgQXN5bmNNYXJrZXIgYXN5bmNNYXJrZXIpCiAgICAgIDogc3VwZXIoZW5jbG9zaW5nQ2xhc3MubGlicmFyeSwgZW5jbG9zaW5nQ2xhc3MsIE5hbWVzLmNhbGwsCiAgICAgICAgICAgIHBhcmFtZXRlclN0cnVjdHVyZSwgYXN5bmNNYXJrZXIsCiAgICAgICAgICAgIGlzU3RhdGljOiBmYWxzZSwgaXNFeHRlcm5hbDogZmFsc2UsIGlzQWJzdHJhY3Q6IGZhbHNlKTsKCiAgZmFjdG9yeSBKQ2xvc3VyZUNhbGxNZXRob2QucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIEpDbGFzcyBlbmNsb3NpbmdDbGFzcyA9IHNvdXJjZS5yZWFkQ2xhc3MoKTsKICAgIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUgPQogICAgICAgIG5ldyBQYXJhbWV0ZXJTdHJ1Y3R1cmUucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBBc3luY01hcmtlciBhc3luY01hcmtlciA9IHNvdXJjZS5yZWFkRW51bShBc3luY01hcmtlci52YWx1ZXMpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBKQ2xvc3VyZUNhbGxNZXRob2QoCiAgICAgICAgZW5jbG9zaW5nQ2xhc3MsIHBhcmFtZXRlclN0cnVjdHVyZSwgYXN5bmNNYXJrZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSk1lbWJlcktpbmQuY2xvc3VyZUNhbGxNZXRob2QpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUNsYXNzKGVuY2xvc2luZ0NsYXNzKTsKICAgIHBhcmFtZXRlclN0cnVjdHVyZS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLndyaXRlRW51bShhc3luY01hcmtlcik7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfa2luZCA9PiAnY2xvc3VyZV9jYWxsJzsKfQoKLy8vIEEgbWV0aG9kIHRoYXQgcmV0dXJucyB0aGUgc2lnbmF0dXJlIG9mIHRoZSBEYXJ0IGNsb3N1cmUvdGVhcm9mZiB0aGF0IHRoaXMKLy8vIG1ldGhvZCdzIHBhcmVudCBjbGFzcyBpcyByZXByZXNlbnRpbmcuCmNsYXNzIEpTaWduYXR1cmVNZXRob2QgZXh0ZW5kcyBKTWV0aG9kIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pTaWduYXR1cmVNZXRob2RdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnc2lnbmF0dXJlLW1ldGhvZCc7CgogIEpTaWduYXR1cmVNZXRob2QoQ2xhc3NFbnRpdHkgZW5jbG9zaW5nQ2xhc3MpCiAgICAgIDogc3VwZXIoZW5jbG9zaW5nQ2xhc3MubGlicmFyeSwgZW5jbG9zaW5nQ2xhc3MsIE5hbWVzLnNpZ25hdHVyZSwKICAgICAgICAgICAgY29uc3QgUGFyYW1ldGVyU3RydWN0dXJlKDAsIDAsIGNvbnN0IFtdLCAwKSwgQXN5bmNNYXJrZXIuU1lOQywKICAgICAgICAgICAgaXNTdGF0aWM6IGZhbHNlLCBpc0V4dGVybmFsOiBmYWxzZSwgaXNBYnN0cmFjdDogZmFsc2UpOwoKICBmYWN0b3J5IEpTaWduYXR1cmVNZXRob2QucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIEpDbGFzcyBjbHMgPSBzb3VyY2UucmVhZENsYXNzKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpTaWduYXR1cmVNZXRob2QoY2xzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKEpNZW1iZXJLaW5kLnNpZ25hdHVyZU1ldGhvZCk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlQ2xhc3MoZW5jbG9zaW5nQ2xhc3MpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2tpbmQgPT4gJ3NpZ25hdHVyZSc7Cn0KCi8vLyBFbnVtIHVzZWQgZm9yIGlkZW50aWZ5aW5nIFtKVHlwZVZhcmlhYmxlXSB2YXJpYW50cyBpbiBzZXJpYWxpemF0aW9uLgplbnVtIEpUeXBlVmFyaWFibGVLaW5kIHsgY2xzLCBtZW1iZXIsIHR5cGVkZWYsIGxvY2FsIH0KCmNsYXNzIEpUeXBlVmFyaWFibGUgZXh0ZW5kcyBJbmRleGVkVHlwZVZhcmlhYmxlIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pUeXBlVmFyaWFibGVdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAndHlwZS12YXJpYWJsZSc7CgogIEBvdmVycmlkZQogIGZpbmFsIEVudGl0eSB0eXBlRGVjbGFyYXRpb247CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGluZGV4OwoKICBKVHlwZVZhcmlhYmxlKHRoaXMudHlwZURlY2xhcmF0aW9uLCB0aGlzLm5hbWUsIHRoaXMuaW5kZXgpOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW0pUeXBlVmFyaWFibGVdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgSlR5cGVWYXJpYWJsZS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgSlR5cGVWYXJpYWJsZUtpbmQga2luZCA9IHNvdXJjZS5yZWFkRW51bShKVHlwZVZhcmlhYmxlS2luZC52YWx1ZXMpOwogICAgRW50aXR5IHR5cGVEZWNsYXJhdGlvbjsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIEpUeXBlVmFyaWFibGVLaW5kLmNsczoKICAgICAgICB0eXBlRGVjbGFyYXRpb24gPSBzb3VyY2UucmVhZENsYXNzKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSlR5cGVWYXJpYWJsZUtpbmQubWVtYmVyOgogICAgICAgIHR5cGVEZWNsYXJhdGlvbiA9IHNvdXJjZS5yZWFkTWVtYmVyKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSlR5cGVWYXJpYWJsZUtpbmQudHlwZWRlZjoKICAgICAgICB0eXBlRGVjbGFyYXRpb24gPSBzb3VyY2UucmVhZFR5cGVkZWYoKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKVHlwZVZhcmlhYmxlS2luZC5sb2NhbDoKICAgICAgICAvLyBUeXBlIHZhcmlhYmxlcyBkZWNsYXJlZCBieSBsb2NhbCBmdW5jdGlvbnMgZG9uJ3QgcG9pbnQgdG8gdGhlaXIKICAgICAgICAvLyBkZWNsYXJhdGlvbiwgc2luY2UgdGhlIGNvcnJlc3BvbmRpbmcgY2xvc3VyZSBjYWxsIG1ldGhvZHMgaXMgY3JlYXRlZAogICAgICAgIC8vIGFmdGVyIHRoZSB0eXBlIHZhcmlhYmxlLgogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEZpeCB0aGlzLgogICAgICAgIGJyZWFrOwogICAgfQogICAgU3RyaW5nIG5hbWUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgaW50IGluZGV4ID0gc291cmNlLnJlYWRJbnQoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgSlR5cGVWYXJpYWJsZSh0eXBlRGVjbGFyYXRpb24sIG5hbWUsIGluZGV4KTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0pUeXBlVmFyaWFibGVdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBpZiAodHlwZURlY2xhcmF0aW9uIGlzIEluZGV4ZWRDbGFzcykgewogICAgICBJbmRleGVkQ2xhc3MgY2xzID0gdHlwZURlY2xhcmF0aW9uOwogICAgICBzaW5rLndyaXRlRW51bShKVHlwZVZhcmlhYmxlS2luZC5jbHMpOwogICAgICBzaW5rLndyaXRlQ2xhc3MoY2xzKTsKICAgIH0gZWxzZSBpZiAodHlwZURlY2xhcmF0aW9uIGlzIEluZGV4ZWRNZW1iZXIpIHsKICAgICAgSW5kZXhlZE1lbWJlciBtZW1iZXIgPSB0eXBlRGVjbGFyYXRpb247CiAgICAgIHNpbmsud3JpdGVFbnVtKEpUeXBlVmFyaWFibGVLaW5kLm1lbWJlcik7CiAgICAgIHNpbmsud3JpdGVNZW1iZXIobWVtYmVyKTsKICAgIH0gZWxzZSBpZiAodHlwZURlY2xhcmF0aW9uIGlzIEluZGV4ZWRUeXBlZGVmKSB7CiAgICAgIEluZGV4ZWRUeXBlZGVmIHR5cGVkZWYgPSB0eXBlRGVjbGFyYXRpb247CiAgICAgIHNpbmsud3JpdGVFbnVtKEpUeXBlVmFyaWFibGVLaW5kLnR5cGVkZWYpOwogICAgICBzaW5rLndyaXRlVHlwZWRlZih0eXBlZGVmKTsKICAgIH0gZWxz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dGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi91dGlsL2VudW1zZXQuZGFydCcgc2hvdyBFbnVtU2V0OwoKLy8vIEVudW0gZm9yIHRoZSBkaWZmZXJlbnQga2luZHMgb2YgaW5zdGFudGlhdGlvbiBvZiBhIGNsYXNzLgplbnVtIEluc3RhbnRpYXRpb24gewogIFVOSU5TVEFOVElBVEVELAogIERJUkVDVExZX0lOU1RBTlRJQVRFRCwKICBJTkRJUkVDVExZX0lOU1RBTlRJQVRFRCwKICBBQlNUUkFDVExZX0lOU1RBTlRJQVRFRCwKfQoKLy8vIE5vZGUgZm9yIFtjbHNdIGluIGEgdHJlZSBmb3JtaW5nIHRoZSBzdWJjbGFzcyByZWxhdGlvbiBvZiBbQ2xhc3NFbnRpdHldcy4KLy8vCi8vLyBUaGlzIGlzIHVzZWQgYnkgdGhlIFtDbG9zZWRXb3JsZF0gdG8gcGVyZm9ybSBxdWVyaWVzIG9uIHN1YmNsYXNzIGFuZCBzdWJ0eXBlCi8vLyByZWxhdGlvbnMuCi8vLwovLy8gRm9yIHRoaXMgY2xhc3MgaGllcmFyY2h5OgovLy8KLy8vICAgICBjbGFzcyBBIHt9Ci8vLyAgICAgY2xhc3MgQiBleHRlbmRzIEEge30KLy8vICAgICBjbGFzcyBDIGV4dGVuZHMgQSB7fQovLy8gICAgIGNsYXNzIEQgZXh0ZW5kcyBCIHt9Ci8vLyAgICAgY2xhc3MgRSBleHRlbmRzIEQge30KLy8vCi8vLyB0aGUgW0NsYXNzSGllcmFyY2h5Tm9kZV1zIGZvcm0gdGhpcyBzdWJjbGFzcyB0cmVlOgovLy8KLy8vICAgICAgIE9iamVjdAovLy8gICAgICAgICB8Ci8vLyAgICAgICAgIEEKLy8vICAgICAgICAvIFwKLy8vICAgICAgIEIgICBDCi8vLyAgICAgICB8Ci8vLyAgICAgICBECi8vLyAgICAgICB8Ci8vLyAgICAgICBFCi8vLwpjbGFzcyBDbGFzc0hpZXJhcmNoeU5vZGUgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbQ2xhc3NIaWVyYXJjaHlOb2RlXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2NsYXNzLWhpZXJhcmNoeS1ub2RlJzsKCiAgLy8vIEVudW0gc2V0IGZvciBzZWxlY3RpbmcgaW5zdGFudGlhdGVkIGNsYXNzZXMgaW4KICAvLy8gW0NsYXNzSGllcmFyY2h5Tm9kZS5zdWJjbGFzc2VzQnlNYXNrXSwKICAvLy8gW0NsYXNzSGllcmFyY2h5Tm9kZS5zdWJjbGFzc2VzQnlNYXNrXSBhbmQgW0NsYXNzU2V0LnN1YnR5cGVzQnlNYXNrXS4KICBzdGF0aWMgZmluYWwgRW51bVNldDxJbnN0YW50aWF0aW9uPiBJTlNUQU5USUFURUQgPQogICAgICBuZXcgRW51bVNldDxJbnN0YW50aWF0aW9uPi5mcm9tVmFsdWVzKGNvbnN0IDxJbnN0YW50aWF0aW9uPlsKICAgIEluc3RhbnRpYXRpb24uRElSRUNUTFlfSU5TVEFOVElBVEVELAogICAgSW5zdGFudGlhdGlvbi5JTkRJUkVDVExZX0lOU1RBTlRJQVRFRCwKICAgIEluc3RhbnRpYXRpb24uQUJTVFJBQ1RMWV9JTlNUQU5USUFURUQsCiAgXSwgZml4ZWQ6IHRydWUpOwoKICAvLy8gRW51bSBzZXQgZm9yIHNlbGVjdGluZyBkaXJlY3RseSBhbmQgYWJzdHJhY3RseSBpbnN0YW50aWF0ZWQgY2xhc3NlcyBpbgogIC8vLyBbQ2xhc3NIaWVyYXJjaHlOb2RlLnN1YmNsYXNzZXNCeU1hc2tdLAogIC8vLyBbQ2xhc3NIaWVyYXJjaHlOb2RlLnN1YmNsYXNzZXNCeU1hc2tdIGFuZCBbQ2xhc3NTZXQuc3VidHlwZXNCeU1hc2tdLgogIHN0YXRpYyBmaW5hbCBFbnVtU2V0PEluc3RhbnRpYXRpb24+IEVYUExJQ0lUTFlfSU5TVEFOVElBVEVEID0KICAgICAgbmV3IEVudW1TZXQ8SW5zdGFudGlhdGlvbj4uZnJvbVZhbHVlcyhjb25zdCA8SW5zdGFudGlhdGlvbj5bCiAgICBJbnN0YW50aWF0aW9uLkRJUkVDVExZX0lOU1RBTlRJQVRFRCwKICAgIEluc3RhbnRpYXRpb24uQUJTVFJBQ1RMWV9JTlNUQU5USUFURUQKICBdLCBmaXhlZDogdHJ1ZSk7CgogIC8vLyBFbnVtIHNldCBmb3Igc2VsZWN0aW5nIGFsbCBjbGFzc2VzIGluCiAgLy8vIFtDbGFzc0hpZXJhcmNoeU5vZGUuc3ViY2xhc3Nlc0J5TWFza10sCiAgLy8vIFtDbGFzc0hpZXJhcmNoeU5vZGUuc3ViY2xhc3Nlc0J5TWFza10gYW5kIFtDbGFzc1NldC5zdWJ0eXBlc0J5TWFza10uCiAgc3RhdGljIGZpbmFsIEVudW1TZXQ8SW5zdGFudGlhdGlvbj4gQUxMID0KICAgICAgbmV3IEVudW1TZXQ8SW5zdGFudGlhdGlvbj4uZnJvbVZhbHVlcyhJbnN0YW50aWF0aW9uLnZhbHVlcywgZml4ZWQ6IHRydWUpOwoKICAvLy8gQ3JlYXRlcyBhbiBlbnVtIHNldCBmb3Igc2VsZWN0aW5nIHRoZSByZXR1cm5lZCBjbGFzc2VzIGluCiAgLy8vIFtDbGFzc0hpZXJhcmNoeU5vZGUuc3ViY2xhc3Nlc0J5TWFza10sCiAgLy8vIFtDbGFzc0hpZXJhcmNoeU5vZGUuc3ViY2xhc3Nlc0J5TWFza10gYW5kIFtDbGFzc1NldC5zdWJ0eXBlc0J5TWFza10uCiAgc3RhdGljIEVudW1TZXQ8SW5zdGFudGlhdGlvbj4gY3JlYXRlTWFzaygKICAgICAge2Jvb2wgaW5jbHVkZURpcmVjdGx5SW5zdGFudGlhdGVkOiB0cnVlLAogICAgICBib29sIGluY2x1ZGVJbmRpcmVjdGx5SW5zdGFudGlhdGVkOiB0cnVlLAogICAgICBib29sIGluY2x1ZGVVbmluc3RhbnRpYXRlZDogdHJ1ZSwKICAgICAgYm9vbCBpbmNsdWRlQWJzdHJhY3RseUluc3RhbnRpYXRlZDogdHJ1ZX0pIHsKICAgIEVudW1TZXQ8SW5zdGFudGlhdGlvbj4gbWFzayA9IG5ldyBFbnVtU2V0PEluc3RhbnRpYXRpb24+KCk7CiAgICBpZiAoaW5jbHVkZURpcmVjdGx5SW5zdGFudGlhdGVkKSB7CiAgICAgIG1hc2suYWRkKEluc3RhbnRpYXRpb24uRElSRUNUTFlfSU5TVEFOVElBVEVEKTsKICAgIH0KICAgIGlmIChpbmNsdWRlSW5kaXJlY3RseUluc3RhbnRpYXRlZCkgewogICAgICBtYXNrLmFkZChJbnN0YW50aWF0aW9uLklORElSRUNUTFlfSU5TVEFOVElBVEVEKTsKICAgIH0KICAgIGlmIChpbmNsdWRlVW5pbnN0YW50aWF0ZWQpIHsKICAgICAgbWFzay5hZGQoSW5zdGFudGlhdGlvbi5VTklOU1RBTlRJQVRFRCk7CiAgICB9CiAgICBpZiAoaW5jbHVkZUFic3RyYWN0bHlJbnN0YW50aWF0ZWQpIHsKICAgICAgbWFzay5hZGQoSW5zdGFudGlhdGlvbi5BQlNUUkFDVExZX0lOU1RBTlRJQVRFRCk7CiAgICB9CiAgICByZXR1cm4gbWFzazsKICB9CgogIGZpbmFsIENsYXNzSGllcmFyY2h5Tm9kZSBwYXJlbnROb2RlOwogIGZpbmFsIEVudW1TZXQ8SW5zdGFudGlhdGlvbj4gX21hc2sgPSBuZXcgRW51bVNldDxJbnN0YW50aWF0aW9uPi5mcm9tVmFsdWVzKAogICAgICBjb25zdCA8SW5zdGFudGlhdGlvbj5bSW5zdGFudGlhdGlvbi5VTklOU1RBTlRJQVRFRF0pOwogIGZpbmFsIEluZGV4ZWRDbGFzcyBjbHM7CgogIGZpbmFsIGludCBoaWVyYXJjaHlEZXB0aDsKCiAgQ2xhc3NFbnRpdHkgX2xlYXN0VXBwZXJJbnN0YW50aWF0ZWRTdWJjbGFzczsKICBpbnQgX2luc3RhbnRpYXRlZFN1YmNsYXNzQ291bnQgPSAwOwoKICAvLy8gYHRydWVgIGlmIFtjbHNdIGhhcyBiZWVuIGRpcmVjdGx5IGluc3RhbnRpYXRlZC4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGBDYCBidXQgX25vdF8gYEJgIGluOgogIC8vLyAgIGNsYXNzIEIge30KICAvLy8gICBjbGFzcyBDIGV4dGVuZHMgQiB7fQogIC8vLyAgIG1haW4oKSA9PiBuZXcgQygpOwogIC8vLwogIGJvb2wgZ2V0IGlzRGlyZWN0bHlJbnN0YW50aWF0ZWQgPT4KICAgICAgX21hc2suY29udGFpbnMoSW5zdGFudGlhdGlvbi5ESVJFQ1RMWV9JTlNUQU5USUFURUQpOwoKICB2b2lkIHNldCBpc0RpcmVjdGx5SW5zdGFudGlhdGVkKGJvb2wgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSAhPSBpc0RpcmVjdGx5SW5zdGFudGlhdGVkKSB7CiAgICAgIF91cGRhdGVQYXJlbnRJbnN0YW50aWF0ZWRTdWJjbGFzc0NvdW50KAogICAgICAgICAgSW5zdGFudGlhdGlvbi5ESVJFQ1RMWV9JTlNUQU5USUFURUQsCiAgICAgICAgICBhZGQ6IHZhbHVlKTsKICAgIH0KICB9CgogIC8vLyBgdHJ1ZWAgaWYgW2Nsc10gaGFzIGJlZW4gYWJzdHJhY3RseSBpbnN0YW50aWF0ZWQuIFRoaXMgbWVhbnMgdGhhdCBhdAogIC8vLyBydW50aW1lIGluc3RhbmNlcyBvZiBbY2xzXSBvciB1bmtub3duIHN1YmNsYXNzZXMgb2YgW2Nsc10gYXJlIGFzc3VtZWQgdG8KICAvLy8gZXhpc3QuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCB0byBtYXJrIG5hdGl2ZSBhbmQvb3IgcmVmbGVjdGFibGUgY2xhc3NlcyBhcyBpbnN0YW50aWF0ZWQuCiAgLy8vIEZvciBuYXRpdmUgY2xhc3NlcyB3ZSBkbyBub3Qga25vdyB0aGUgZXhhY3QgY2xhc3MgdGhhdCBpbnN0YW50aWF0ZXMgW2Nsc10KICAvLy8gc28gW2Nsc10gaGVyZSByZXByZXNlbnRzIHRoZSByb290IG9mIHRoZSBzdWJjbGFzc2VzLiBGb3IgcmVmbGVjdGFibGUKICAvLy8gY2xhc3NlcyB3ZSBuZWVkIGV2ZW50IGFic3RyYWN0IGNsYXNzZXMgdG8gYmUgJ2xpdmUnIGV2ZW4gdGhvdWdoIHRoZXkKICAvLy8gY2Fubm90IHRoZW1zZWx2ZXMgYmUgaW5zdGFudGlhdGVkLgogIGJvb2wgZ2V0IGlzQWJzdHJhY3RseUluc3RhbnRpYXRlZCA9PgogICAgICBfbWFzay5jb250YWlucyhJbnN0YW50aWF0aW9uLkFCU1RSQUNUTFlfSU5TVEFOVElBVEVEKTsKCiAgdm9pZCBzZXQgaXNBYnN0cmFjdGx5SW5zdGFudGlhdGVkKGJvb2wgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSAhPSBpc0Fic3RyYWN0bHlJbnN0YW50aWF0ZWQpIHsKICAgICAgX3VwZGF0ZVBhcmVudEluc3RhbnRpYXRlZFN1YmNsYXNzQ291bnQoCiAgICAgICAgICBJbnN0YW50aWF0aW9uLkFCU1RSQUNUTFlfSU5TVEFOVElBVEVELAogICAgICAgICAgYWRkOiB2YWx1ZSk7CiAgICB9CiAgfQoKICAvLy8gYHRydWVgIGlmIFtjbHNdIGlzIGVpdGhlciBkaXJlY3RseSBvciBhYnN0cmFjdGx5IGluc3RhbnRpYXRlZC4KICBib29sIGdldCBpc0V4cGxpY2l0bHlJbnN0YW50aWF0ZWQgPT4KICAgICAgaXNEaXJlY3RseUluc3RhbnRpYXRlZCB8fCBpc0Fic3RyYWN0bHlJbnN0YW50aWF0ZWQ7CgogIHZvaWQgX3VwZGF0ZVBhcmVudEluc3RhbnRpYXRlZFN1YmNsYXNzQ291bnQoSW5zdGFudGlhdGlvbiBpbnN0YW50aWF0aW9uLAogICAgICB7Ym9vbCBhZGR9KSB7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgcGFyZW50ID0gcGFyZW50Tm9kZTsKICAgIGlmIChhZGQpIHsKICAgICAgX21hc2sucmVtb3ZlKEluc3RhbnRpYXRpb24uVU5JTlNUQU5USUFURUQpOwogICAgICBfbWFzay5hZGQoaW5zdGFudGlhdGlvbik7CiAgICAgIHdoaWxlIChwYXJlbnQgIT0gbnVsbCkgewogICAgICAgIHBhcmVudC5fdXBkYXRlSW5zdGFudGlhdGVkU3ViY2xhc3NDb3VudCgxKTsKICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgX21hc2sucmVtb3ZlKGluc3RhbnRpYXRpb24pOwogICAgICBpZiAoX21hc2suaXNFbXB0eSkgewogICAgICAgIF9tYXNrLmFkZChJbnN0YW50aWF0aW9uLlVOSU5TVEFOVElBVEVEKTsKICAgICAgfQogICAgICB3aGlsZSAocGFyZW50ICE9IG51bGwpIHsKICAgICAgICBwYXJlbnQuX3VwZGF0ZUluc3RhbnRpYXRlZFN1YmNsYXNzQ291bnQoLTEpOwogICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gYHRydWVgIGlmIFtjbHNdIGhhcyBiZWVuIGluc3RhbnRpYXRlZCB0aHJvdWdoIHN1YmNsYXNzZXMuCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBgQWAgYW5kIGBCYCBidXQgX25vdF8gYENgIGluOgogIC8vLyAgIGNsYXNzIEEge30KICAvLy8gICBjbGFzcyBCIGV4dGVuZHMgQSB7fQogIC8vLyAgIGNsYXNzIEMgZXh0ZW5kcyBCIHt9CiAgLy8vICAgbWFpbigpID0+IFtuZXcgQigpLCBuZXcgQygpXTsKICAvLy8KICBib29sIGdldCBpc0luZGlyZWN0bHlJbnN0YW50aWF0ZWQgPT4gX2luc3RhbnRpYXRlZFN1YmNsYXNzQ291bnQgPiAwOwoKICAvLy8gVGhlIG51bWJlciBvZiBzdHJpY3Qgc3ViY2xhc3NlcyB0aGF0IGFyZSBkaXJlY3RseSBvciBpbmRpcmVjdGx5CiAgLy8vIGluc3RhbnRpYXRlZC4KICBpbnQgZ2V0IGluc3RhbnRpYXRlZFN1YmNsYXNzQ291bnQgPT4gX2luc3RhbnRpYXRlZFN1YmNsYXNzQ291bnQ7CgogIHZvaWQgX3VwZGF0ZUluc3RhbnRpYXRlZFN1YmNsYXNzQ291bnQoaW50IGNoYW5nZSkgewogICAgYm9vbCBiZWZvcmUgPSBpc0luZGlyZWN0bHlJbnN0YW50aWF0ZWQ7CiAgICBfaW5zdGFudGlhdGVkU3ViY2xhc3NDb3VudCArPSBjaGFuZ2U7CiAgICBib29sIGFmdGVyID0gaXNJbmRpcmVjdGx5SW5zdGFudGlhdGVkOwogICAgaWYgKGJlZm9yZSAhPSBhZnRlcikgewogICAgICBpZiAoYWZ0ZXIpIHsKICAgICAgICBfbWFzay5yZW1vdmUoSW5zdGFudGlhdGlvbi5VTklOU1RBTlRJQVRFRCk7CiAgICAgICAgX21hc2suYWRkKEluc3RhbnRpYXRpb24uSU5ESVJFQ1RMWV9JTlNUQU5USUFURUQpOwogICAgICB9IGVsc2UgewogICAgICAgIF9tYXNrLnJlbW92ZShJbnN0YW50aWF0aW9uLklORElSRUNUTFlfSU5TVEFOVElBVEVEKTsKICAgICAgICBpZiAoX21hc2suaXNFbXB0eSkgewogICAgICAgICAgX21hc2suYWRkKEluc3RhbnRpYXRpb24uVU5JTlNUQU5USUFURUQpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgLy8vIFRoZSBub2RlcyBmb3IgdGhlIGRpcmVjdCBzdWJjbGFzc2VzIG9mIFtjbHNdLgogIExpc3Q8Q2xhc3NIaWVyYXJjaHlOb2RlPiBfZGlyZWN0U3ViY2xhc3NlcyA9IDxDbGFzc0hpZXJhcmNoeU5vZGU+W107CgogIENsYXNzSGllcmFyY2h5Tm9kZSh0aGlzLnBhcmVudE5vZGUsIHRoaXMuY2xzLCB0aGlzLmhpZXJhcmNoeURlcHRoKSB7CiAgICBpZiAocGFyZW50Tm9kZSAhPSBudWxsKSB7CiAgICAgIHBhcmVudE5vZGUuYWRkRGlyZWN0U3ViY2xhc3ModGhpcyk7CiAgICB9CiAgfQoKICAvLy8gRGVzZXJpYWxpemVzIGEgW0NsYXNzSGllcmFyY2h5Tm9kZV0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBDbGFzc0hpZXJhcmNoeU5vZGUucmVhZEZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgTWFwPENsYXNzRW50aXR5LCBDbGFzc0hpZXJhcmNoeU5vZGU+IG5vZGVNYXApIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgSW5kZXhlZENsYXNzIGNscyA9IHNvdXJjZS5yZWFkQ2xhc3MoKTsKICAgIENsYXNzSGllcmFyY2h5Tm9kZSBwYXJlbnROb2RlOwogICAgSW5kZXhlZENsYXNzIHN1cGVyY2xhc3MgPSBzb3VyY2UucmVhZENsYXNzT3JOdWxsKCk7CiAgICBpZiAoc3VwZXJjbGFzcyAhPSBudWxsKSB7CiAgICAgIHBhcmVudE5vZGUgPSBub2RlTWFwW3N1cGVyY2xhc3NdOwogICAgICBhc3NlcnQocGFyZW50Tm9kZSAhPSBudWxsLAogICAgICAgICAgIk5vIENsYXNzSGllcmFyY2h5Tm9kZSBmb3Igc3VwZXJjbGFzcyAkc3VwZXJjbGFzcy4iKTsKICAgIH0KICAgIGludCBtYXNrVmFsdWUgPSBzb3VyY2UucmVhZEludCgpOwogICAgaW50IGhpZXJhcmNoeURlcHRoID0gc291cmNlLnJlYWRJbnQoKTsKICAgIGludCBpbnN0YW50aWF0ZWRTdWJjbGFzc0NvdW50ID0gc291cmNlLnJlYWRJbnQoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgQ2xhc3NIaWVyYXJjaHlOb2RlKHBhcmVudE5vZGUsIGNscywgaGllcmFyY2h5RGVwdGgpCiAgICAgIC4uX2luc3RhbnRpYXRlZFN1YmNsYXNzQ291bnQgPSBpbnN0YW50aWF0ZWRTdWJjbGFzc0NvdW50CiAgICAgIC4uX21hc2sudmFsdWUgPSBtYXNrVmFsdWU7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtDbGFzc0hpZXJhcmNoeU5vZGVdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlQ2xhc3MoY2xzKTsKICAgIHNpbmsud3JpdGVDbGFzc09yTnVsbChwYXJlbnROb2RlPy5jbHMpOwogICAgc2luay53cml0ZUludChfbWFzay52YWx1ZSk7CiAgICBzaW5rLndyaXRlSW50KGhpZXJhcmNoeURlcHRoKTsKICAgIHNpbmsud3JpdGVJbnQoX2luc3RhbnRpYXRlZFN1YmNsYXNzQ291bnQpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIC8vLyBBZGRzIFtzdWJjbGFzc10gYXMgYSBkaXJlY3Qgc3ViY2xhc3Mgb2YgW2Nsc10uCiAgdm9pZCBhZGREaXJlY3RTdWJjbGFzcyhDbGFzc0hpZXJhcmNoeU5vZGUgc3ViY2xhc3MpIHsKICAgIGFzc2VydCghX2RpcmVjdFN1YmNsYXNzZXMuY29udGFpbnMoc3ViY2xhc3MpKTsKICAgIF9kaXJlY3RTdWJjbGFzc2VzLmFkZChzdWJjbGFzcyk7CiAgfQoKICBJdGVyYWJsZTxDbGFzc0hpZXJhcmNoeU5vZGU+IGdldCBkaXJlY3RTdWJjbGFzc2VzID0+IF9kaXJlY3RTdWJjbGFzc2VzOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW290aGVyXSBpcyBjb250YWluZWQgaW4gdGhlIHN1YnRyZWUgb2YgdGhpcyBub2RlLgogIC8vLwogIC8vLyBUaGlzIG1lYW5zIHRoYXQgW290aGVyXSBpcyBhIHN1YmNsYXNzIG9mIFtjbHNdLgogIGJvb2wgY29udGFpbnMoQ2xhc3NIaWVyYXJjaHlOb2RlIG90aGVyKSB7CiAgICB3aGlsZSAob3RoZXIgIT0gbnVsbCkgewogICAgICBpZiAoY2xzID09IG90aGVyLmNscykgcmV0dXJuIHRydWU7CiAgICAgIGlmIChoaWVyYXJjaHlEZXB0aCA+PSBvdGhlci5oaWVyYXJjaHlEZXB0aCkgcmV0dXJuIGZhbHNlOwogICAgICBvdGhlciA9IG90aGVyLnBhcmVudE5vZGU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgYG90aGVyLmNsc2AgaXMgYSBzdWJjbGFzcyBvZiBbY2xzXS4KICBib29sIGhhc1N1YmNsYXNzKENsYXNzSGllcmFyY2h5Tm9kZSBvdGhlcikgewogICAgcmV0dXJuIGNvbnRhaW5zKG90aGVyKTsKICB9CgogIC8vLyBgdHJ1ZWAgaWYgW2Nsc10gaGFzIGJlZW4gZGlyZWN0bHksIGluZGlyZWN0bHksIG9yIGFic3RyYWN0bHkgaW5zdGFudGlhdGVkLgogIGJvb2wgZ2V0IGlzSW5zdGFudGlhdGVkID0+CiAgICAgIGlzRXhwbGljaXRseUluc3RhbnRpYXRlZCB8fCBpc0luZGlyZWN0bHlJbnN0YW50aWF0ZWQ7CgogIC8vLyBSZXR1cm5zIGFuIFtJdGVyYWJsZV0gb2YgdGhlIHN1YmNsYXNzZXMgb2YgW2Nsc10gcG9zc2libHkgaW5jbHVkaW5nIFtjbHNdLgogIC8vLwogIC8vLyBTdWJjbGFzc2VzIGFyZSBpbmNsdWRlZCBpZiB0aGVpciBpbnN0YW50aWF0aW9uIHByb3BlcnRpZXMgaW50ZXJzZWN0IHdpdGgKICAvLy8gdGhlaXIgY29ycmVzcG9uZGluZyBbSW5zdGFudGlhdGlvbl0gdmFsdWVzIGluIFttYXNrXS4gSWYgW3N0cmljdF0gaXMKICAvLy8gYHRydWVgLCBbY2xzXSBpdHNlbGYgaXMgX25vdF8gcmV0dXJuZWQuCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IHN1YmNsYXNzZXNCeU1hc2soRW51bVNldDxJbnN0YW50aWF0aW9uPiBtYXNrLAogICAgICB7Ym9vbCBzdHJpY3Q6IGZhbHNlfSkgewogICAgcmV0dXJuIG5ldyBDbGFzc0hpZXJhcmNoeU5vZGVJdGVyYWJsZSh0aGlzLCBtYXNrLCBpbmNsdWRlUm9vdDogIXN0cmljdCk7CiAgfQoKICAvLy8gQXBwbGllcyBbcHJlZGljYXRlXSB0byBlYWNoIHN1YmNsYXNzIG9mIFtjbHNdIG1hdGNoaW5nIHRoZSBjcml0ZXJpYQogIC8vLyBzcGVjaWZpZWQgYnkgW21hc2tdIGFuZCBbc3RyaWN0XS4gSWYgW3ByZWRpY2F0ZV0gcmV0dXJucyBgdHJ1ZWAgb24gYQogIC8vLyBjbGFzcywgdmlzaXRhdGlvbiBpcyBzdG9wcGVkIGltbWVkaWF0ZWx5IGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgdHJ1ZWAuCiAgLy8vCiAgLy8vIFtwcmVkaWNhdGVdIGlzIGFwcGxpZWQgdG8gc3ViY2xhc3NlcyBpZiB0aGVpciBpbnN0YW50aWF0aW9uIHByb3BlcnRpZXMKICAvLy8gaW50ZXJzZWN0IHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBbSW5zdGFudGlhdGlvbl0gdmFsdWVzIGluIFttYXNrXS4gSWYKICAvLy8gW3N0cmljdF0gaXMgYHRydWVgLCBbcHJlZGljYXRlXSBpcyBfbm90XyBjYWxsZWQgb24gW2Nsc10gaXRzZWxmLgogIGJvb2wgYW55U3ViY2xhc3MoYm9vbCBwcmVkaWNhdGUoQ2xhc3NFbnRpdHkgY2xzKSwgRW51bVNldDxJbnN0YW50aWF0aW9uPiBtYXNrLAogICAgICB7Ym9vbCBzdHJpY3Q6IGZhbHNlfSkgewogICAgSXRlcmF0aW9uU3RlcCB3cmFwcGVyKENsYXNzRW50aXR5IGNscykgewogICAgICByZXR1cm4gcHJlZGljYXRlKGNscykgPyBJdGVyYXRpb25TdGVwLlNUT1AgOiBJdGVyYXRpb25TdGVwLkNPTlRJTlVFOwogICAgfQoKICAgIHJldHVybiBmb3JFYWNoU3ViY2xhc3Mod3JhcHBlciwgbWFzaywgc3RyaWN0OiBzdHJpY3QpID09IEl0ZXJhdGlvblN0ZXAuU1RPUDsKICB9CgogIC8vLyBBcHBsaWVzIFtmXSB0byBlYWNoIHN1YmNsYXNzIG9mIFtjbHNdIG1hdGNoaW5nIHRoZSBjcml0ZXJpYSBzcGVjaWZpZWQgYnkKICAvLy8gW21hc2tdIGFuZCBbc3RyaWN0XS4KICAvLy8KICAvLy8gW2ZdIGlzIGEgYXBwbGllZCB0byBzdWJjbGFzc2VzIGlmIHRoZWlyIGluc3RhbnRpYXRpb24gcHJvcGVydGllcyBpbnRlcnNlY3QKICAvLy8gd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIFtJbnN0YW50aWF0aW9uXSB2YWx1ZXMgaW4gW21hc2tdLiBJZiBbc3RyaWN0XSBpcwogIC8vLyBgdHJ1ZWAsIFtmXSBpcyBfbm90XyBjYWxsZWQgb24gW2Nsc10gaXRzZWxmLgogIC8vLwogIC8vLyBUaGUgdmlzaXRhdGlvbiBvZiBzdWJjbGFzc2VzIGNhbiBiZSBjdXQgc2hvcnQgYnkgdGhlIHJldHVybiB2YWx1ZSBvZiBbZl0uCiAgLy8vIElmIFtGb3JFYWNoLlNUT1BdIGlzIHJldHVybmVkLCBubyBmdXJ0aGVyIGNsYXNzZXMgYXJlIHZpc2l0ZWQgYW5kIHRoZQogIC8vLyBmdW5jdGlvbiBzdG9wcyBpbW1lZGlhdGVseS4gSWYgW0ZvckVhY2guU0tJUF9TVUJDTEFTU0VTXSBpcyByZXR1cm5lZCwgdGhlCiAgLy8vIHN1YmNsYXNzZXMgb2YgdGhlIGxhc3QgdmlzaXRlZCBjbGFzcyBhcmUgc2tpcHBlZCwgYnV0IHZpc2l0YXRpb24KICAvLy8gY29udGludWVzLiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBpcyBlaXRoZXIgW0ZvckVhY2guU1RPUF0sIGlmCiAgLy8vIHZpc2l0YXRpb24gd2FzIHN0b3BwZWQsIG9yIFtGb3JFYWNoLkNPTlRJTlVFXSBpZiB2aXNpdGF0aW9uIGNvbnRpbnVlZCB0bwogIC8vLyB0aGUgZW5kLgogIEl0ZXJhdGlvblN0ZXAgZm9yRWFjaFN1YmNsYXNzKEZvckVhY2hGdW5jdGlvbiBmLCBFbnVtU2V0PEluc3RhbnRpYXRpb24+IG1hc2ssCiAgICAgIHtib29sIHN0cmljdDogZmFsc2V9KSB7CiAgICBJdGVyYXRpb25TdGVwIG5leHRTdGVwOwogICAgaWYgKCFzdHJpY3QgJiYgbWFzay5pbnRlcnNlY3RzKF9tYXNrKSkgewogICAgICBuZXh0U3RlcCA9IGYoY2xzKTsKICAgIH0KICAgIC8vIEludGVycHJldCBgZm9yRWFjaCA9PSBudWxsYCBhcyBgZm9yRWFjaCA9PSBGb3JFYWNoLkNPTlRJTlVFYC4KICAgIG5leHRTdGVwID8/PSBJdGVyYXRpb25TdGVwLkNPTlRJTlVFOwoKICAgIGlmIChuZXh0U3RlcCA9PSBJdGVyYXRpb25TdGVwLkNPTlRJTlVFKSB7CiAgICAgIGlmIChtYXNrLmNvbnRhaW5zKEluc3RhbnRpYXRpb24uVU5JTlNUQU5USUFURUQpIHx8IGlzSW5zdGFudGlhdGVkKSB7CiAgICAgICAgZm9yIChDbGFzc0hpZXJhcmNoeU5vZGUgc3ViY2xhc3MgaW4gX2RpcmVjdFN1YmNsYXNzZXMpIHsKICAgICAgICAgIEl0ZXJhdGlvblN0ZXAgc3ViRm9yRWFjaCA9IHN1YmNsYXNzLmZvckVhY2hTdWJjbGFzcyhmLCBtYXNrKTsKICAgICAgICAgIGlmIChzdWJGb3JFYWNoID09IEl0ZXJhdGlvblN0ZXAuU1RPUCkgewogICAgICAgICAgICByZXR1cm4gc3ViRm9yRWFjaDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChuZXh0U3RlcCA9PSBJdGVyYXRpb25TdGVwLlNUT1ApIHsKICAgICAgcmV0dXJuIG5leHRTdGVwOwogICAgfQogICAgcmV0dXJuIEl0ZXJhdGlvblN0ZXAuQ09OVElOVUU7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbW9zdCBzcGVjaWZpYyBzdWJjbGFzcyBvZiBbY2xzXSAoaW5jbHVkaW5nIFtjbHNdKSB0aGF0IGlzCiAgLy8vIGRpcmVjdGx5IGluc3RhbnRpYXRlZCBvciBhIHN1cGVyY2xhc3Mgb2YgYWxsIGRpcmVjdGx5IGluc3RhbnRpYXRlZAogIC8vLyBzdWJjbGFzc2VzLiBJZiBbY2xzXSBpcyBub3QgaW5zdGFudGlhdGVkLCBgbnVsbGAgaXMgcmV0dXJuZWQuCiAgQ2xhc3NFbnRpdHkgZ2V0THViT2ZJbnN0YW50aWF0ZWRTdWJjbGFzc2VzKCkgewogICAgaWYgKCFpc0luc3RhbnRpYXRlZCkgcmV0dXJuIG51bGw7CiAgICBpZiAoX2xlYXN0VXBwZXJJbnN0YW50aWF0ZWRTdWJjbGFzcyA9PSBudWxsKSB7CiAgICAgIF9sZWFzdFVwcGVySW5zdGFudGlhdGVkU3ViY2xhc3MgPQogICAgICAgICAgX2NvbXB1dGVMZWFzdFVwcGVySW5zdGFudGlhdGVkU3ViY2xhc3MoKTsKICAgIH0KICAgIHJldHVybiBfbGVhc3RVcHBlckluc3RhbnRpYXRlZFN1YmNsYXNzOwogIH0KCiAgQ2xhc3NFbnRpdHkgX2NvbXB1dGVMZWFzdFVwcGVySW5zdGFudGlhdGVkU3ViY2xhc3MoKSB7CiAgICBpZiAoaXNFeHBsaWNpdGx5SW5zdGFudGlhdGVkKSB7CiAgICAgIHJldHVybiBjbHM7CiAgICB9CiAgICBpZiAoIWlzSW5zdGFudGlhdGVkKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIHN1YmNsYXNzOwogICAgZm9yIChDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZSBpbiBfZGlyZWN0U3ViY2xhc3NlcykgewogICAgICBpZiAobm9kZS5pc0luc3RhbnRpYXRlZCkgewogICAgICAgIGlmIChzdWJjbGFzcyA9PSBudWxsKSB7CiAgICAgICAgICBzdWJjbGFzcyA9IG5vZGU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBjbHM7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoc3ViY2xhc3MgIT0gbnVsbCkgewogICAgICByZXR1cm4gc3ViY2xhc3MuZ2V0THViT2ZJbnN0YW50aWF0ZWRTdWJjbGFzc2VzKCk7CiAgICB9CiAgICByZXR1cm4gY2xzOwogIH0KCiAgdm9pZCBwcmludE9uKFN0cmluZ0J1ZmZlciBzYiwgU3RyaW5nIGluZGVudGF0aW9uLAogICAgICB7Ym9vbCBpbnN0YW50aWF0ZWRPbmx5OiBmYWxzZSwKICAgICAgYm9vbCBzb3J0ZWQ6IHRydWUsCiAgICAgIENsYXNzRW50aXR5IHdpdGhSZXNwZWN0VG99KSB7CiAgICBib29sIGlzUmVsYXRlZFRvKENsYXNzRW50aXR5IF9zdWJjbGFzcykgewogICAgICByZXR1cm4gdHJ1ZTsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3VwcG9ydCB0aGlzIGZvciBrZXJuZWwgYmFzZWQgZWxlbWVudHM6CiAgICAgIC8vIHJldHVybiBzdWJjbGFzcyA9PSB3aXRoUmVzcGVjdFRvIHx8CiAgICAgIC8vICAgIHN1YmNsYXNzLmltcGxlbWVudHNJbnRlcmZhY2Uod2l0aFJlc3BlY3RUbyk7CiAgICB9CgogICAgc2Iud3JpdGUoaW5kZW50YXRpb24pOwogICAgaWYgKGNscy5pc0Fic3RyYWN0KSB7CiAgICAgIHNiLndyaXRlKCdhYnN0cmFjdCAnKTsKICAgIH0KICAgIHNiLndyaXRlKCdjbGFzcyAke2Nscy5uYW1lfTonKTsKICAgIGlmIChpc0RpcmVjdGx5SW5zdGFudGlhdGVkKSB7CiAgICAgIHNiLndyaXRlKCcgZGlyZWN0bHknKTsKICAgIH0KICAgIGlmIChpc0luZGlyZWN0bHlJbnN0YW50aWF0ZWQpIHsKICAgICAgc2Iud3JpdGUoJyBpbmRpcmVjdGx5Jyk7CiAgICB9CiAgICBpZiAoaXNBYnN0cmFjdGx5SW5zdGFudGlhdGVkKSB7CiAgICAgIHNiLndyaXRlKCcgYWJzdHJhY3RseScpOwogICAgfQogICAgc2Iud3JpdGUoJyBbJyk7CiAgICBpZiAoX2RpcmVjdFN1YmNsYXNzZXMuaXNFbXB0eSkgewogICAgICBzYi53cml0ZSgnXScpOwogICAgfSBlbHNlIHsKICAgICAgZHluYW1pYyBzdWJjbGFzc2VzID0gX2RpcmVjdFN1YmNsYXNzZXM7CiAgICAgIGlmIChzb3J0ZWQpIHsKICAgICAgICBzdWJjbGFzc2VzID0gX2RpcmVjdFN1YmNsYXNzZXMudG9MaXN0KCkKICAgICAgICAgIC4uc29ydCgoYSwgYikgewogICAgICAgICAgICByZXR1cm4gYS5jbHMubmFtZS5jb21wYXJlVG8oYi5jbHMubmFtZSk7CiAgICAgICAgICB9KTsKICAgICAgfQogICAgICBib29sIG5lZWRzQ29tbWEgPSBmYWxzZTsKICAgICAgZm9yIChDbGFzc0hpZXJhcmNoeU5vZGUgY2hpbGQgaW4gc3ViY2xhc3NlcykgewogICAgICAgIGlmIChpbnN0YW50aWF0ZWRPbmx5ICYmICFjaGlsZC5pc0luc3RhbnRpYXRlZCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmICh3aXRoUmVzcGVjdFRvICE9IG51bGwgJiYKICAgICAgICAgICAgIWNoaWxkLmFueVN1YmNsYXNzKGlzUmVsYXRlZFRvLCBDbGFzc0hpZXJhcmNoeU5vZGUuQUxMKSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmIChuZWVkc0NvbW1hKSB7CiAgICAgICAgICBzYi53cml0ZSgnLFxuJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNiLndyaXRlKCdcbicpOwogICAgICAgIH0KICAgICAgICBjaGlsZC5wcmludE9uKHNiLCAnJGluZGVudGF0aW9uICAnLAogICAgICAgICAgICBpbnN0YW50aWF0ZWRPbmx5OiBpbnN0YW50aWF0ZWRPbmx5LAogICAgICAgICAgICBzb3J0ZWQ6IHNvcnRlZCwKICAgICAgICAgICAgd2l0aFJlc3BlY3RUbzogd2l0aFJlc3BlY3RUbyk7CiAgICAgICAgbmVlZHNDb21tYSA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKG5lZWRzQ29tbWEpIHsKICAgICAgICBzYi53cml0ZSgnXG4nKTsKICAgICAgICBzYi53cml0ZSgnJGluZGVudGF0aW9uXScpOwogICAgICB9IGVsc2UgewogICAgICAgIHNiLndyaXRlKCddJyk7CiAgICAgIH0KICAgIH0KICB9CgogIFN0cmluZyBkdW1wKAogICAgICB7U3RyaW5nIGluZGVudGF0aW9uOiAnJywKICAgICAgYm9vbCBpbnN0YW50aWF0ZWRPbmx5OiBmYWxzZSwKICAgICAgQ2xhc3NFbnRpdHkgd2l0aFJlc3BlY3RUb30pIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHByaW50T24oc2IsIGluZGVudGF0aW9uLAogICAgICAgIGluc3RhbnRpYXRlZE9ubHk6IGluc3RhbnRpYXRlZE9ubHksIHdpdGhSZXNwZWN0VG86IHdpdGhSZXNwZWN0VG8pOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBjbHMudG9TdHJpbmcoKTsKfQoKLy8vIE9iamVjdCBob2xkaW5nIHRoZSBzdWJjbGFzcyBhbmQgc3VidHlwZSByZWxhdGlvbiBmb3IgYSBzaW5nbGUKLy8vIFtDbGFzc0VudGl0eV0uCi8vLwovLy8gVGhlIHN1YmNsYXNzIHJlbGF0aW9uIGZvciBhIGNsYXNzIGBDYCBpcyBtb2RlbGxlZCB0aHJvdWdoIGEgcmVmZXJlbmNlIHRvCi8vLyB0aGUgW0NsYXNzSGllcmFyY2h5Tm9kZV0gZm9yIGBDYCBpbiB0aGUgZ2xvYmFsIFtDbGFzc0hpZXJhcmNoeU5vZGVdIHRyZWUKLy8vIGNvbXB1dGVkIGluIFtXb3JsZF0uCi8vLwovLy8gVGhlIHN1YnR5cGUgcmVsYXRpb24gZm9yIGEgY2xhc3MgYENgIGlzIG1vZGVsbGVkIHRocm91Z2ggYSBjb2xsZWN0aW9uIG9mCi8vLyBkaXNqb2ludCBbQ2xhc3NIaWVyYXJjaHlOb2RlXSBzdWJ0cmVlcy4gVGhlIHN1YmNsYXNzZXMgb2YgYENgLCBtb2RlbGxlZAovLy8gdGhyb3VnaCB0aGUgYWZvcmVtZW50aW9uZWQgW0NsYXNzSGllcmFyY2h5Tm9kZV0gcG9pbnRlciwgYXJlIGV4dGVuZGVkIHdpdGgKLy8vIHRoZSBzdWJ0eXBlcyB0aGF0IGRvIG5vdCBleHRlbmQgYENgIHRocm91Z2ggYSBsaXN0IG9mIGFkZGl0aW9uYWwKLy8vIFtDbGFzc0hpZXJhcmNoeU5vZGVdIG5vZGVzLiBUaGlzIGxpc3QgaXMgbm9ybWFsaXplZCB0byBjb250YWluIG9ubHkgdGhlCi8vLyBub2RlcyBmb3IgdGhlIHRvcG1vc3Qgc3VidHlwZXMgYW5kIGlzIGZ1cnRoZXJtb3JlIG9yZGVyZWQgaW4gaW5jcmVhc2luZwovLy8gaGllcmFyY2h5IGRlcHRoIG9yZGVyLgovLy8KLy8vIEZvciB0aGlzIGNsYXNzIGhpZXJhcmNoeToKLy8vCi8vLyAgICAgY2xhc3MgQSB7fQovLy8gICAgIGNsYXNzIEIgZXh0ZW5kcyBBIHt9Ci8vLyAgICAgY2xhc3MgQyBpbXBsZW1lbnRzIEIge30KLy8vICAgICBjbGFzcyBEIGltcGxlbWVudHMgQSB7fQovLy8gICAgIGNsYXNzIEUgZXh0ZW5kcyBEIHt9Ci8vLyAgICAgY2xhc3MgRiBpbXBsZW1lbnRzIEQge30KLy8vCi8vLyB0aGUgW0NsYXNzSGllcmFyY2h5Tm9kZV0gdHJlZSBpcwovLy8KLy8vICAgICAgIE9iamVjdAovLy8gICAgICAvIHwgIHwgXAovLy8gICAgIEEgIEMgIEQgIEYKLy8vICAgICB8ICAgICB8Ci8vLyAgICAgQiAgICAgRQovLy8KLy8vIGFuZCB0aGUgW0NsYXNzU2V0XSBmb3IgYEFgIGhvbGRzIHRoZXNlIFtDbGFzc0hpZXJhcmNoeU5vZGVdIG5vZGVzOgovLy8KLy8vICAgICAgQSAgLT4gIFtDLCBELCBGXQovLy8KLy8vIFRoZSBzdWJ0eXBlcyBgQmAgYW5kIGBFYCBhcmUgbm90IGRpcmVjdGx5IG1vZGVsZWQgYmVjYXVzZSB0aGV5IGFyZSBpbXBsaWVkCi8vLyBieSB0aGVpciBzdWJjbGFzcyByZWxhdGlvbiB0byBgQWAgYW5kIGBEYCwgcmVzcGVjdGl2ZWx5LiBUaGlzIGNhbiBiZSBzZWVuCi8vLyBpZiB3ZSBleHBhbmQgdGhlIHN1YmNsYXNzIHN1YnRyZWVzOgovLy8KLy8vICAgICAgQSAgLT4gIFtDLCBELCBGXQovLy8gICAgICB8ICAgICAgICAgIHwKLy8vICAgICAgQiAgICAgICAgICBFCi8vLwpjbGFzcyBDbGFzc1NldCB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtDbGFzc1NldF0gb2JqZWN0cyBpbiBhIGRlYnVnZ2luZwogIC8vLyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdjbGFzcy1zZXQnOwoKICBmaW5hbCBDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZTsKICBDbGFzc0VudGl0eSBfbGVhc3RVcHBlckluc3RhbnRpYXRlZFN1YnR5cGU7CgogIC8vLyBBIGxpc3Qgb2YgdGhlIGNsYXNzIGhpZXJhcmNoeSBub2RlcyBmb3IgdGhlIHN1YnR5cGVzIHRoYXQgZGVjbGFyZSBhCiAgLy8vIHN1YnR5cGUgcmVsYXRpb25zaGlwIHRvIFtjbHNdIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UKICAvLy8KICAvLy8gICAgIGNsYXNzIEEge30KICAvLy8gICAgIGNsYXNzIEIgZXh0ZW5kcyBBIHt9CiAgLy8vICAgICBjbGFzcyBDIGltcGxlbWVudHMgQiB7fQogIC8vLyAgICAgY2xhc3MgRCBpbXBsZW1lbnRzIEEge30KICAvLy8gICAgIGNsYXNzIEUgZXh0ZW5kcyBEIHt9CiAgLy8vCiAgLy8vIFRoZSBjbGFzcyBoaWVyYXJjaHkgbm9kZXMgZm9yIGNsYXNzZXMgYENgIGFuZCBgRGAgYXJlIGluIFtfc3VidHlwZXNdLiBgQ2AKICAvLy8gYmVjYXVzZSBpdCBpbXBsZW1lbnRzIGBBYCB0aHJvdWdoIGBCYCBhbmQgYERgIGJlY2F1c2UgaXQgaW1wbGVtZW50cyBgQWAKICAvLy8gZGlyZWN0bHkuIGBFYCBhbHNvIGltcGxlbWVudHMgYEFgIHRocm91Z2ggaXRzIGV4dGVuc2lvbiBvZiBgRGAgYW5kIGl0IGlzCiAgLy8vIHRoZXJlZm9yZSBpbmNsdWRlZCB0aHJvdWdoIHRoZSBjbGFzcyBoaWVyYXJjaHkgbm9kZSBmb3IgYERgLgogIC8vLwogIExpc3Q8Q2xhc3NIaWVyYXJjaHlOb2RlPiBfc3VidHlwZXM7CgogIC8vLyBBIGxpc3Qgb2YgdGhlIGNsYXNzIGhpZXJhcmNoeSBub2RlcyBmb3IgdGhlIGNsYXNzIHRoYXQgZGlyZWN0bHkgbWl4IGluCiAgLy8vIFtjbHNdLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UKICAvLy8KICAvLy8gICAgIGNsYXNzIEEge30KICAvLy8gICAgIGNsYXNzIEIgZXh0ZW5kcyBPYmplY3Qgd2l0aCBBIHt9CiAgLy8vICAgICBjbGFzcyBDID0gT2JqZWN0IHdpdGggQTsKICAvLy8gICAgIGNsYXNzIEQgZXh0ZW5kcyBCIHt9CiAgLy8vICAgICBjbGFzcyBFIGV4dGVuZHMgQyB7fQogIC8vLwogIC8vLyBUaGUgY2xhc3MgaGllcmFyY2h5IG5vZGVzIGZvciB0aGUgdW5uYW1lZCBtaXhpbiBhcHBsaWNhdGlvbiBgT2JqZWN0K0FgIGFuZAogIC8vLyB0aGUgbmFtZWQgbWl4aW4gYXBwbGljYXRpb24gYENgIGFyZSBpbiBbX21peGluQXBwbGljYXRpb25zXS4KICAvLy8KICBMaXN0PENsYXNzSGllcmFyY2h5Tm9kZT4gX21peGluQXBwbGljYXRpb25zOwoKICBDbGFzc1NldCh0aGlzLm5vZGUpOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW0NsYXNzU2V0XSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IENsYXNzU2V0LnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIE1hcDxDbGFzc0VudGl0eSwgQ2xhc3NIaWVyYXJjaHlOb2RlPiBub2RlTWFwKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIENsYXNzSGllcmFyY2h5Tm9kZSBub2RlID0gbm9kZU1hcFtzb3VyY2UucmVhZENsYXNzKCldOwogICAgTGlzdDxDbGFzc0hpZXJhcmNoeU5vZGU+IHN1YnR5cGVzID0gc291cmNlLnJlYWRMaXN0KCgpIHsKICAgICAgcmV0dXJuIG5vZGVNYXBbc291cmNlLnJlYWRDbGFzcygpXTsKICAgIH0sIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIExpc3Q8Q2xhc3NIaWVyYXJjaHlOb2RlPiBtaXhpbkFwcGxpY2F0aW9ucyA9IHNvdXJjZS5yZWFkTGlzdCgoKSB7CiAgICAgIHJldHVybiBub2RlTWFwW3NvdXJjZS5yZWFkQ2xhc3MoKV07CiAgICB9LCBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IENsYXNzU2V0KG5vZGUpCiAgICAgIC4uX3N1YnR5cGVzID0gc3VidHlwZXMKICAgICAgLi5fbWl4aW5BcHBsaWNhdGlvbnMgPSBtaXhpbkFwcGxpY2F0aW9uczsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0NsYXNzU2V0XSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUNsYXNzKG5vZGUuY2xzKTsKICAgIHNpbmsud3JpdGVMaXN0KF9zdWJ0eXBlcywgKENsYXNzSGllcmFyY2h5Tm9kZSBub2RlKSB7CiAgICAgIHNpbmsud3JpdGVDbGFzcyhub2RlLmNscyk7CiAgICB9LCBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoX21peGluQXBwbGljYXRpb25zLCAoQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUpIHsKICAgICAgc2luay53cml0ZUNsYXNzKG5vZGUuY2xzKTsKICAgIH0sIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQ2xhc3NFbnRpdHkgZ2V0IGNscyA9PiBub2RlLmNsczsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGBvdGhlci5jbHNgIGlzIGEgc3ViY2xhc3Mgb2YgW2Nsc10uCiAgYm9vbCBoYXNTdWJjbGFzcyhDbGFzc0hpZXJhcmNoeU5vZGUgb3RoZXIpID0+IG5vZGUuaGFzU3ViY2xhc3Mob3RoZXIpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgYG90aGVyLmNsc2AgaXMgYSBzdWJ0eXBlIG9mIFtjbHNdLgogIGJvb2wgaGFzU3VidHlwZShDbGFzc0hpZXJhcmNoeU5vZGUgb3RoZXIpIHsKICAgIGlmIChoYXNTdWJjbGFzcyhvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKF9zdWJ0eXBlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoQ2xhc3NIaWVyYXJjaHlOb2RlIHN1YnR5cGVOb2RlIGluIF9zdWJ0eXBlcykgewogICAgICAgIGlmIChzdWJ0eXBlTm9kZS5oYXNTdWJjbGFzcyhvdGhlcikpIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRpcmVjdGx5IGluc3RhbnRpYXRlZCBzdWJ0eXBlcyBvZiBbY2xzXS4KICBpbnQgZ2V0IGluc3RhbnRpYXRlZFN1YnR5cGVDb3VudCB7CiAgICBpbnQgY291bnQgPSBub2RlLmluc3RhbnRpYXRlZFN1YmNsYXNzQ291bnQ7CiAgICBpZiAoX3N1YnR5cGVzICE9IG51bGwpIHsKICAgICAgZm9yIChDbGFzc0hpZXJhcmNoeU5vZGUgc3VidHlwZU5vZGUgaW4gX3N1YnR5cGVzKSB7CiAgICAgICAgaWYgKHN1YnR5cGVOb2RlLmlzRXhwbGljaXRseUluc3RhbnRpYXRlZCkgewogICAgICAgICAgY291bnQrKzsKICAgICAgICB9CiAgICAgICAgY291bnQgKz0gc3VidHlwZU5vZGUuaW5zdGFudGlhdGVkU3ViY2xhc3NDb3VudDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNvdW50OwogIH0KCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGFsbCBpbnN0YW50aWF0ZWQgc3VidHlwZXMgb2YgW2Nsc10gYXJlIHN1YmNsYXNzZXMgb2YKICAvLy8gW2Nsc10uCiAgYm9vbCBnZXQgaGFzT25seUluc3RhbnRpYXRlZFN1YmNsYXNzZXMgewogICAgaWYgKF9zdWJ0eXBlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoQ2xhc3NIaWVyYXJjaHlOb2RlIHN1YnR5cGVOb2RlIGluIF9zdWJ0eXBlcykgewogICAgICAgIGlmIChzdWJ0eXBlTm9kZS5pc0luc3RhbnRpYXRlZCkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLy8gUmV0dXJucyBhbiBbSXRlcmFibGVdIG9mIHRoZSBjbGFzc2VzIHRoYXQgaW1wbGVtZW50IFtjbHNdIGRpcmVjdGx5IG9yCiAgLy8vIHRocm91Z2ggc3VwZXJ0eXBlcy4KICAvLy8KICAvLy8gQSBjbGFzcyB0aGF0IGltcGxlbWVudHMgW2Nsc10gdGhyb3VnaCBpdHMgc3VwZXJjbGFzc2VzIGlzIG5vdCBpbmNsdWRlZCBpbgogIC8vLyB0aGUgaXRlcmFibGUuCiAgSXRlcmFibGU8Q2xhc3NIaWVyYXJjaHlOb2RlPiBnZXQgc3VidHlwZU5vZGVzIHsKICAgIHJldHVybiBfc3VidHlwZXMgPz8gY29uc3QgPENsYXNzSGllcmFyY2h5Tm9kZT5bXTsKICB9CgogIC8vLyBSZXR1cm5zIGFuIFtJdGVyYWJsZV0gb2YgdGhlIGNsYXNzZXMgdGhhdCBtaXggaW4gW2Nsc10gZGlyZWN0bHkuCiAgSXRlcmFibGU8Q2xhc3NIaWVyYXJjaHlOb2RlPiBnZXQgbWl4aW5BcHBsaWNhdGlvbk5vZGVzIHsKICAgIHJldHVybiBfbWl4aW5BcHBsaWNhdGlvbnMgPz8gY29uc3QgPENsYXNzSGllcmFyY2h5Tm9kZT5bXTsKICB9CgogIC8vLyBSZXR1cm5zIGFuIFtJdGVyYWJsZV0gb2YgdGhlIHN1YmNsYXNzZXMgb2YgW2Nsc10gcG9zc2libHkgaW5jbHVkaW5nIFtjbHNdLgogIC8vLwogIC8vLyBTdWJjbGFzc2VzIGFyZSBpbmNsdWRlZCBpZiB0aGVpciBpbnN0YW50aWF0aW9uIHByb3BlcnRpZXMgaW50ZXJzZWN0IHdpdGgKICAvLy8gdGhlaXIgY29ycmVzcG9uZGluZyBbSW5zdGFudGlhdGlvbl0gdmFsdWVzIGluIFttYXNrXS4gSWYgW3N0cmljdF0gaXMKICAvLy8gYHRydWVgLCBbY2xzXSBpdHNlbGYgaXMgX25vdF8gcmV0dXJuZWQuCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IHN1YmNsYXNzZXNCeU1hc2soRW51bVNldDxJbnN0YW50aWF0aW9uPiBtYXNrLAogICAgICB7Ym9vbCBzdHJpY3Q6IGZhbHNlfSkgewogICAgcmV0dXJuIG5vZGUuc3ViY2xhc3Nlc0J5TWFzayhtYXNrLCBzdHJpY3Q6IHN0cmljdCk7CiAgfQoKICAvLy8gUmV0dXJucyBhbiBbSXRlcmFibGVdIG9mIHRoZSBzdWJ0eXBlcyBvZiBbY2xzXSBwb3NzaWJseSBpbmNsdWRpbmcgW2Nsc10uCiAgLy8vCiAgLy8vIFRoZSBkaXJlY3RseSBpbnN0YW50aWF0ZWQsIGluZGlyZWN0bHkgaW5zdGFudGlhdGVkIGFuZCB1bmluc3RhbnRpYXRlZAogIC8vLyBzdWJ0eXBlcyBvZiBbY2xzXSBhcmUgcmV0dXJuZWQgaWYgW2luY2x1ZGVEaXJlY3RseUluc3RhbnRpYXRlZF0sCiAgLy8vIFtpbmNsdWRlSW5kaXJlY3RseUluc3RhbnRpYXRlZF0sIGFuZCBbaW5jbHVkZVVuaW5zdGFudGlhdGVkXSBhcmUgYHRydWVgLAogIC8vLyByZXNwZWN0aXZlbHkuIElmIFtzdHJpY3RdIGlzIGB0cnVlYCwgW2Nsc10gaXRzZWxmIGlzIF9ub3RfIHJldHVybmVkLgogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBzdWJ0eXBlcygKICAgICAge2Jvb2wgaW5jbHVkZURpcmVjdGx5SW5zdGFudGlhdGVkOiB0cnVlLAogICAgICBib29sIGluY2x1ZGVJbmRpcmVjdGx5SW5zdGFudGlhdGVkOiB0cnVlLAogICAgICBib29sIGluY2x1ZGVVbmluc3RhbnRpYXRlZDogdHJ1ZSwKICAgICAgYm9vbCBzdHJpY3Q6IGZhbHNlfSkgewogICAgRW51bVNldDxJbnN0YW50aWF0aW9uPiBtYXNrID0gQ2xhc3NIaWVyYXJjaHlOb2RlLmNyZWF0ZU1hc2soCiAgICAgICAgaW5jbHVkZURpcmVjdGx5SW5zdGFudGlhdGVkOiBpbmNsdWRlRGlyZWN0bHlJbnN0YW50aWF0ZWQsCiAgICAgICAgaW5jbHVkZUluZGlyZWN0bHlJbnN0YW50aWF0ZWQ6IGluY2x1ZGVJbmRpcmVjdGx5SW5zdGFudGlhdGVkLAogICAgICAgIGluY2x1ZGVVbmluc3RhbnRpYXRlZDogaW5jbHVkZVVuaW5zdGFudGlhdGVkKTsKICAgIHJldHVybiBzdWJ0eXBlc0J5TWFzayhtYXNrLCBzdHJpY3Q6IHN0cmljdCk7CiAgfQoKICAvLy8gUmV0dXJucyBhbiBbSXRlcmFibGVdIG9mIHRoZSBzdWJ0eXBlcyBvZiBbY2xzXSBwb3NzaWJseSBpbmNsdWRpbmcgW2Nsc10uCiAgLy8vCiAgLy8vIFN1YnR5cGVzIGFyZSBpbmNsdWRlZCBpZiB0aGVpciBpbnN0YW50aWF0aW9uIHByb3BlcnRpZXMgaW50ZXJzZWN0IHdpdGgKICAvLy8gdGhlaXIgY29ycmVzcG9uZGluZyBbSW5zdGFudGlhdGlvbl0gdmFsdWVzIGluIFttYXNrXS4gSWYgW3N0cmljdF0gaXMKICAvLy8gYHRydWVgLCBbY2xzXSBpdHNlbGYgaXMgX25vdF8gcmV0dXJuZWQuCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IHN1YnR5cGVzQnlNYXNrKEVudW1TZXQ8SW5zdGFudGlhdGlvbj4gbWFzaywKICAgICAge2Jvb2wgc3RyaWN0OiBmYWxzZX0pIHsKICAgIGlmIChfc3VidHlwZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gbm9kZS5zdWJjbGFzc2VzQnlNYXNrKG1hc2ssIHN0cmljdDogc3RyaWN0KTsKICAgIH0KCiAgICByZXR1cm4gbmV3IFN1YnR5cGVzSXRlcmFibGUuU3VidHlwZXNJdGVyYXRvcih0aGlzLCBtYXNrLAogICAgICAgIGluY2x1ZGVSb290OiAhc3RyaWN0KTsKICB9CgogIC8vLyBBcHBsaWVzIFtwcmVkaWNhdGVdIHRvIGVhY2ggc3ViY2xhc3Mgb2YgW2Nsc10gbWF0Y2hpbmcgdGhlIGNyaXRlcmlhCiAgLy8vIHNwZWNpZmllZCBieSBbbWFza10gYW5kIFtzdHJpY3RdLiBJZiBbcHJlZGljYXRlXSByZXR1cm5zIGB0cnVlYCBvbiBhCiAgLy8vIGNsYXNzLCB2aXNpdGF0aW9uIGlzIHN0b3BwZWQgaW1tZWRpYXRlbHkgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIGB0cnVlYC4KICAvLy8KICAvLy8gW3ByZWRpY2F0ZV0gaXMgYXBwbGllZCB0byBzdWJjbGFzc2VzIGlmIHRoZWlyIGluc3RhbnRpYXRpb24gcHJvcGVydGllcwogIC8vLyBpbnRlcnNlY3Qgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIFtJbnN0YW50aWF0aW9uXSB2YWx1ZXMgaW4gW21hc2tdLiBJZgogIC8vLyBbc3RyaWN0XSBpcyBgdHJ1ZWAsIFtwcmVkaWNhdGVdIGlzIF9ub3RfIGNhbGxlZCBvbiBbY2xzXSBpdHNlbGYuCiAgYm9vbCBhbnlTdWJjbGFzcyhib29sIHByZWRpY2F0ZShDbGFzc0VudGl0eSBjbHMpLCBFbnVtU2V0PEluc3RhbnRpYXRpb24+IG1hc2ssCiAgICAgIHtib29sIHN0cmljdDogZmFsc2V9KSB7CiAgICByZXR1cm4gbm9kZS5hbnlTdWJjbGFzcyhwcmVkaWNhdGUsIG1hc2ssIHN0cmljdDogc3RyaWN0KTsKICB9CgogIC8vLyBBcHBsaWVzIFtmXSB0byBlYWNoIHN1YmNsYXNzIG9mIFtjbHNdIG1hdGNoaW5nIHRoZSBjcml0ZXJpYSBzcGVjaWZpZWQgYnkKICAvLy8gW21hc2tdIGFuZCBbc3RyaWN0XS4KICAvLy8KICAvLy8gW2ZdIGlzIGEgYXBwbGllZCB0byBzdWJjbGFzc2VzIGlmIHRoZWlyIGluc3RhbnRpYXRpb24gcHJvcGVydGllcyBpbnRlcnNlY3QKICAvLy8gd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIFtJbnN0YW50aWF0aW9uXSB2YWx1ZXMgaW4gW21hc2tdLiBJZiBbc3RyaWN0XSBpcwogIC8vLyBgdHJ1ZWAsIFtmXSBpcyBfbm90XyBjYWxsZWQgb24gW2Nsc10gaXRzZWxmLgogIC8vLwogIC8vLyBUaGUgdmlzaXRhdGlvbiBvZiBzdWJjbGFzc2VzIGNhbiBiZSBjdXQgc2hvcnQgYnkgdGhlIHJldHVybiB2YWx1ZSBvZiBbZl0uCiAgLy8vIElmIFtGb3JFYWNoLlNUT1BdIGlzIHJldHVybmVkLCBubyBmdXJ0aGVyIGNsYXNzZXMgYXJlIHZpc2l0ZWQgYW5kIHRoZQogIC8vLyBmdW5jdGlvbiBzdG9wcyBpbW1lZGlhdGVseS4gSWYgW0ZvckVhY2guU0tJUF9TVUJDTEFTU0VTXSBpcyByZXR1cm5lZCwgdGhlCiAgLy8vIHN1YmNsYXNzZXMgb2YgdGhlIGxhc3QgdmlzaXRlZCBjbGFzcyBhcmUgc2tpcHBlZCwgYnV0IHZpc2l0YXRpb24KICAvLy8gY29udGludWVzLiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBpcyBlaXRoZXIgW0ZvckVhY2guU1RPUF0sIGlmCiAgLy8vIHZpc2l0YXRpb24gd2FzIHN0b3BwZWQsIG9yIFtGb3JFYWNoLkNPTlRJTlVFXSBpZiB2aXNpdGF0aW9uIGNvbnRpbnVlZCB0bwogIC8vLyB0aGUgZW5kLgogIEl0ZXJhdGlvblN0ZXAgZm9yRWFjaFN1YmNsYXNzKEZvckVhY2hGdW5jdGlvbiBmLCBFbnVtU2V0PEluc3RhbnRpYXRpb24+IG1hc2ssCiAgICAgIHtib29sIHN0cmljdDogZmFsc2V9KSB7CiAgICByZXR1cm4gbm9kZS5mb3JFYWNoU3ViY2xhc3MoZiwgbWFzaywgc3RyaWN0OiBzdHJpY3QpOwogIH0KCiAgLy8vIEFwcGxpZXMgW3ByZWRpY2F0ZV0gdG8gZWFjaCBzdWJ0eXBlIG9mIFtjbHNdIG1hdGNoaW5nIHRoZSBjcml0ZXJpYQogIC8vLyBzcGVjaWZpZWQgYnkgW21hc2tdIGFuZCBbc3RyaWN0XS4gSWYgW3ByZWRpY2F0ZV0gcmV0dXJucyBgdHJ1ZWAgb24gYQogIC8vLyBjbGFzcywgdmlzaXRhdGlvbiBpcyBzdG9wcGVkIGltbWVkaWF0ZWx5IGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgdHJ1ZWAuCiAgLy8vCiAgLy8vIFtwcmVkaWNhdGVdIGlzIGFwcGxpZWQgdG8gc3VidHlwZXMgaWYgdGhlaXIgaW5zdGFudGlhdGlvbiBwcm9wZXJ0aWVzCiAgLy8vIGludGVyc2VjdCB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgW0luc3RhbnRpYXRpb25dIHZhbHVlcyBpbiBbbWFza10uIElmCiAgLy8vIFtzdHJpY3RdIGlzIGB0cnVlYCwgW3ByZWRpY2F0ZV0gaXMgX25vdF8gY2FsbGVkIG9uIFtjbHNdIGl0c2VsZi4KICBib29sIGFueVN1YnR5cGUoYm9vbCBwcmVkaWNhdGUoQ2xhc3NFbnRpdHkgY2xzKSwgRW51bVNldDxJbnN0YW50aWF0aW9uPiBtYXNrLAogICAgICB7Ym9vbCBzdHJpY3Q6IGZhbHNlfSkgewogICAgSXRlcmF0aW9uU3RlcCB3cmFwcGVyKENsYXNzRW50aXR5IGNscykgewogICAgICByZXR1cm4gcHJlZGljYXRlKGNscykgPyBJdGVyYXRpb25TdGVwLlNUT1AgOiBJdGVyYXRpb25TdGVwLkNPTlRJTlVFOwogICAgfQoKICAgIHJldHVybiBmb3JFYWNoU3VidHlwZSh3cmFwcGVyLCBtYXNrLCBzdHJpY3Q6IHN0cmljdCkgPT0gSXRlcmF0aW9uU3RlcC5TVE9QOwogIH0KCiAgLy8vIEFwcGxpZXMgW2ZdIHRvIGVhY2ggc3VidHlwZSBvZiBbY2xzXSBtYXRjaGluZyB0aGUgY3JpdGVyaWEgc3BlY2lmaWVkIGJ5CiAgLy8vIFttYXNrXSBhbmQgW3N0cmljdF0uCiAgLy8vCiAgLy8vIFtmXSBpcyBhIGFwcGxpZWQgdG8gc3VidHlwZXMgaWYgdGhlaXIgaW5zdGFudGlhdGlvbiBwcm9wZXJ0aWVzIGludGVyc2VjdAogIC8vLyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgW0luc3RhbnRpYXRpb25dIHZhbHVlcyBpbiBbbWFza10uIElmIFtzdHJpY3RdIGlzCiAgLy8vIGB0cnVlYCwgW2ZdIGlzIF9ub3RfIGNhbGxlZCBvbiBbY2xzXSBpdHNlbGYuCiAgLy8vCiAgLy8vIFRoZSB2aXNpdGF0aW9uIG9mIHN1YnR5cGVzIGNhbiBiZSBjdXQgc2hvcnQgYnkgdGhlIHJldHVybiB2YWx1ZSBvZiBbZl0uCiAgLy8vIElmIFtGb3JFYWNoLlNUT1BdIGlzIHJldHVybmVkLCBubyBmdXJ0aGVyIGNsYXNzZXMgYXJlIHZpc2l0ZWQgYW5kIHRoZQogIC8vLyBmdW5jdGlvbiBzdG9wcyBpbW1lZGlhdGVseS4gSWYgW0ZvckVhY2guU0tJUF9TVUJDTEFTU0VTXSBpcyByZXR1cm5lZCwgdGhlCiAgLy8vIHN1YmNsYXNzZXMgb2YgdGhlIGxhc3QgdmlzaXRlZCBjbGFzcyBhcmUgc2tpcHBlZCwgYnV0IHZpc2l0YXRpb24KICAvLy8gY29udGludWVzLiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBpcyBlaXRoZXIgW0ZvckVhY2guU1RPUF0sIGlmCiAgLy8vIHZpc2l0YXRpb24gd2FzIHN0b3BwZWQsIG9yIFtGb3JFYWNoLkNPTlRJTlVFXSBpZiB2aXNpdGF0aW9uIGNvbnRpbnVlZCB0bwogIC8vLyB0aGUgZW5kLgogIEl0ZXJhdGlvblN0ZXAgZm9yRWFjaFN1YnR5cGUoRm9yRWFjaEZ1bmN0aW9uIGYsIEVudW1TZXQ8SW5zdGFudGlhdGlvbj4gbWFzaywKICAgICAge2Jvb2wgc3RyaWN0OiBmYWxzZX0pIHsKICAgIEl0ZXJhdGlvblN0ZXAgbmV4dFN0ZXAgPQogICAgICAgIG5vZGUuZm9yRWFjaFN1YmNsYXNzKGYsIG1hc2ssIHN0cmljdDogc3RyaWN0KSA/PyBJdGVyYXRpb25TdGVwLkNPTlRJTlVFOwogICAgaWYgKG5leHRTdGVwID09IEl0ZXJhdGlvblN0ZXAuQ09OVElOVUUgJiYgX3N1YnR5cGVzICE9IG51bGwpIHsKICAgICAgZm9yIChDbGFzc0hpZXJhcmNoeU5vZGUgc3ViY2xhc3MgaW4gX3N1YnR5cGVzKSB7CiAgICAgICAgSXRlcmF0aW9uU3RlcCBzdWJGb3JFYWNoID0gc3ViY2xhc3MuZm9yRWFjaFN1YmNsYXNzKGYsIG1hc2spOwogICAgICAgIGlmIChzdWJGb3JFYWNoID09IEl0ZXJhdGlvblN0ZXAuU1RPUCkgewogICAgICAgICAgcmV0dXJuIHN1YkZvckVhY2g7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBhc3NlcnQobmV4dFN0ZXAgIT0gSXRlcmF0aW9uU3RlcC5TS0lQX1NVQkNMQVNTRVMpOwogICAgcmV0dXJuIG5leHRTdGVwOwogIH0KCiAgLy8vIEFkZHMgW3N1YnR5cGVdIGFzIGEgc3VidHlwZSBvZiBbY2xzXS4KICB2b2lkIGFkZFN1YnR5cGUoQ2xhc3NIaWVyYXJjaHlOb2RlIHN1YnR5cGUpIHsKICAgIGlmIChub2RlLmNvbnRhaW5zKHN1YnR5cGUpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChfc3VidHlwZXMgPT0gbnVsbCkgewogICAgICBfc3VidHlwZXMgPSA8Q2xhc3NIaWVyYXJjaHlOb2RlPltzdWJ0eXBlXTsKICAgIH0gZWxzZSB7CiAgICAgIGludCBoaWVyYXJjaHlEZXB0aCA9IHN1YnR5cGUuaGllcmFyY2h5RGVwdGg7CiAgICAgIExpc3Q8Q2xhc3NIaWVyYXJjaHlOb2RlPiBuZXdTdWJ0eXBlcyA9IDxDbGFzc0hpZXJhcmNoeU5vZGU+W107CiAgICAgIGJvb2wgYWRkZWQgPSBmYWxzZTsKICAgICAgZm9yIChDbGFzc0hpZXJhcmNoeU5vZGUgb3RoZXJTdWJ0eXBlIGluIF9zdWJ0eXBlcykgewogICAgICAgIGludCBvdGhlckhpZXJhcmNoeURlcHRoID0gb3RoZXJTdWJ0eXBlLmhpZXJhcmNoeURlcHRoOwogICAgICAgIGlmIChoaWVyYXJjaHlEZXB0aCA9PSBvdGhlckhpZXJhcmNoeURlcHRoKSB7CiAgICAgICAgICBpZiAoc3VidHlwZSA9PSBvdGhlclN1YnR5cGUpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gW290aGVyU3VidHlwZV0gaXMgdW5yZWxhdGVkIHRvIFtzdWJ0eXBlXS4KICAgICAgICAgICAgbmV3U3VidHlwZXMuYWRkKG90aGVyU3VidHlwZSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChoaWVyYXJjaHlEZXB0aCA+IG90aGVyU3VidHlwZS5oaWVyYXJjaHlEZXB0aCkgewogICAgICAgICAgLy8gW290aGVyU3VidHlwZV0gY291bGQgYmUgYSBzdXBlcmNsYXNzIG9mIFtzdWJ0eXBlXS4KICAgICAgICAgIGlmIChvdGhlclN1YnR5cGUuY29udGFpbnMoc3VidHlwZSkpIHsKICAgICAgICAgICAgLy8gW3N1YnR5cGVdIGlzIGFscmVhZHkgaW4gdGhpcyBzZXQuCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFtvdGhlclN1YnR5cGVdIGlzIHVucmVsYXRlZCB0byBbc3VidHlwZV0uCiAgICAgICAgICAgIG5ld1N1YnR5cGVzLmFkZChvdGhlclN1YnR5cGUpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoIWFkZGVkKSB7CiAgICAgICAgICAgIC8vIEluc2VydCBbc3VidHlwZV0gYmVmb3JlIG90aGVyIHN1YnR5cGVzIG9mIGhpZ2hlciBoaWVyYXJjaHkgZGVwdGguCiAgICAgICAgICAgIG5ld1N1YnR5cGVzLmFkZChzdWJ0eXBlKTsKICAgICAgICAgICAgYWRkZWQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgLy8gW3N1YnR5cGVdIGNvdWxkIGJlIGEgc3VwZXJjbGFzcyBvZiBbb3RoZXJTdWJ0eXBlXS4KICAgICAgICAgIGlmIChzdWJ0eXBlLmNvbnRhaW5zKG90aGVyU3VidHlwZSkpIHsKICAgICAgICAgICAgLy8gUmVwbGFjZSBbb3RoZXJTdWJ0eXBlXS4KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG5ld1N1YnR5cGVzLmFkZChvdGhlclN1YnR5cGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIWFkZGVkKSB7CiAgICAgICAgbmV3U3VidHlwZXMuYWRkKHN1YnR5cGUpOwogICAgICB9CiAgICAgIF9zdWJ0eXBlcyA9IG5ld1N1YnR5cGVzOwogICAgfQogIH0KCiAgLy8vIEFkZHMgW21peGluQXBwbGljYXRpb25dIGFzIGEgY2xhc3MgdGhhdCBtaXhlcyBpbiBbY2xzXS4KICB2b2lkIGFkZE1peGluQXBwbGljYXRpb24oQ2xhc3NIaWVyYXJjaHlOb2RlIG1peGluQXBwbGljYXRpb24pIHsKICAgIGlmIChfbWl4aW5BcHBsaWNhdGlvbnMgPT0gbnVsbCkgewogICAgICBfbWl4aW5BcHBsaWNhdGlvbnMgPSA8Q2xhc3NIaWVyYXJjaHlOb2RlPlttaXhpbkFwcGxpY2F0aW9uXTsKICAgIH0gZWxzZSB7CiAgICAgIF9taXhpbkFwcGxpY2F0aW9ucy5hZGQobWl4aW5BcHBsaWNhdGlvbik7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbW9zdCBzcGVjaWZpYyBzdWJ0eXBlIG9mIFtjbHNdIChpbmNsdWRpbmcgW2Nsc10pIHRoYXQgaXMKICAvLy8gZGlyZWN0bHkgaW5zdGFudGlhdGVkIG9yIGEgc3VwZXJjbGFzcyBvZiBhbGwgZGlyZWN0bHkgaW5zdGFudGlhdGVkCiAgLy8vIHN1YnR5cGVzLiBJZiBubyBzdWJ0eXBlcyBvZiBbY2xzXSBhcmUgaW5zdGFudGlhdGVkLCBgbnVsbGAgaXMgcmV0dXJuZWQuCiAgQ2xhc3NFbnRpdHkgZ2V0THViT2ZJbnN0YW50aWF0ZWRTdWJ0eXBlcygpIHsKICAgIGlmIChfbGVhc3RVcHBlckluc3RhbnRpYXRlZFN1YnR5cGUgPT0gbnVsbCkgewogICAgICBfbGVhc3RVcHBlckluc3RhbnRpYXRlZFN1YnR5cGUgPSBfY29tcHV0ZUxlYXN0VXBwZXJJbnN0YW50aWF0ZWRTdWJ0eXBlKCk7CiAgICB9CiAgICByZXR1cm4gX2xlYXN0VXBwZXJJbnN0YW50aWF0ZWRTdWJ0eXBlOwogIH0KCiAgQ2xhc3NFbnRpdHkgX2NvbXB1dGVMZWFzdFVwcGVySW5zdGFudGlhdGVkU3VidHlwZSgpIHsKICAgIGlmIChub2RlLmlzRXhwbGljaXRseUluc3RhbnRpYXRlZCkgewogICAgICByZXR1cm4gY2xzOwogICAgfQogICAgaWYgKF9zdWJ0eXBlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBub2RlLmdldEx1Yk9mSW5zdGFudGlhdGVkU3ViY2xhc3NlcygpOwogICAgfQogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIHN1YnR5cGU7CiAgICBpZiAobm9kZS5pc0luc3RhbnRpYXRlZCkgewogICAgICBzdWJ0eXBlID0gbm9kZTsKICAgIH0KICAgIGZvciAoQ2xhc3NIaWVyYXJjaHlOb2RlIHN1Ym5vZGUgaW4gX3N1YnR5cGVzKSB7CiAgICAgIGlmIChzdWJub2RlLmlzSW5zdGFudGlhdGVkKSB7CiAgICAgICAgaWYgKHN1YnR5cGUgPT0gbnVsbCkgewogICAgICAgICAgc3VidHlwZSA9IHN1Ym5vZGU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBjbHM7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoc3VidHlwZSAhPSBudWxsKSB7CiAgICAgIHJldHVybiBzdWJ0eXBlLmdldEx1Yk9mSW5zdGFudGlhdGVkU3ViY2xhc3NlcygpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnW1xuJyk7CiAgICBub2RlLnByaW50T24oc2IsICcgICcpOwogICAgc2Iud3JpdGUoJ1xuJyk7CiAgICBpZiAoX3N1YnR5cGVzICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJyAgc3VidHlwZXM6XG4nKTsKICAgICAgZm9yIChDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZSBpbiBfc3VidHlwZXMpIHsKICAgICAgICBub2RlLnByaW50T24oc2IsICcgICcpOwogICAgICAgIHNiLndyaXRlKCdcbicpOwogICAgICB9CiAgICB9CiAgICBpZiAoX21peGluQXBwbGljYXRpb25zICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJyAgbWl4aW4tYXBwbGljYXRpb25zOlxuJyk7CiAgICAgIGZvciAoQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUgaW4gX21peGluQXBwbGljYXRpb25zKSB7CiAgICAgICAgbm9kZS5wcmludE9uKHNiLCAnICAnKTsKICAgICAgICBzYi53cml0ZSgnXG4nKTsKICAgICAgfQogICAgfQogICAgc2Iud3JpdGUoJ10nKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKLy8vIEl0ZXJhYmxlIGZvciBzdWJjbGFzc2VzIG9mIGEgW0NsYXNzSGllcmFyY2h5Tm9kZV0uCmNsYXNzIENsYXNzSGllcmFyY2h5Tm9kZUl0ZXJhYmxlIGV4dGVuZHMgSXRlcmFibGVCYXNlPENsYXNzRW50aXR5PiB7CiAgZmluYWwgQ2xhc3NIaWVyYXJjaHlOb2RlIHJvb3Q7CiAgZmluYWwgRW51bVNldDxJbnN0YW50aWF0aW9uPiBtYXNrOwogIGZpbmFsIGJvb2wgaW5jbHVkZVJvb3Q7CgogIENsYXNzSGllcmFyY2h5Tm9kZUl0ZXJhYmxlKHRoaXMucm9vdCwgdGhpcy5tYXNrLCB7dGhpcy5pbmNsdWRlUm9vdDogdHJ1ZX0pIHsKICAgIGlmIChyb290ID09IG51bGwpIHRocm93IG5ldyBTdGF0ZUVycm9yKCJObyByb290IGZvciBpdGVyYWJsZS4iKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhdG9yPENsYXNzRW50aXR5PiBnZXQgaXRlcmF0b3IgewogICAgcmV0dXJuIG5ldyBDbGFzc0hpZXJhcmNoeU5vZGVJdGVyYXRvcih0aGlzKTsKICB9Cn0KCi8vLyBJdGVyYXRvciBmb3Igc3ViY2xhc3NlcyBvZiBhIFtDbGFzc0hpZXJhcmNoeU5vZGVdLgovLy8KLy8vIENsYXNzZXMgYXJlIHJldHVybmVkIGluIHByZS1vcmRlciBERlMgZmFzaGlvbi4KY2xhc3MgQ2xhc3NIaWVyYXJjaHlOb2RlSXRlcmF0b3IgaW1wbGVtZW50cyBJdGVyYXRvcjxDbGFzc0VudGl0eT4gewogIGZpbmFsIENsYXNzSGllcmFyY2h5Tm9kZUl0ZXJhYmxlIGl0ZXJhYmxlOwoKICAvLy8gVGhlIGNsYXNzIG5vZGUgaG9sZGluZyB0aGUgW2N1cnJlbnRdIGNsYXNzLgogIC8vLwogIC8vLyBUaGlzIGlzIGBudWxsYCBiZWZvcmUgdGhlIGZpcnN0IGNhbGwgdG8gW21vdmVOZXh0XSBhbmQgYXQgdGhlIGVuZCBvZgogIC8vLyBpdGVyYXRpb24sIGkuZS4gYWZ0ZXIgW21vdmVOZXh0XSBoYXMgcmV0dXJuZWQgYGZhbHNlYC4KICBDbGFzc0hpZXJhcmNoeU5vZGUgY3VycmVudE5vZGU7CgogIC8vLyBTdGFjayBvZiBwZW5kaW5nIGNsYXNzIG5vZGVzLgogIC8vLwogIC8vLyBUaGlzIGlzIGBudWxsYCBiZWZvcmUgdGhlIGZpcnN0IGNhbGwgdG8gW21vdmVOZXh0XS4KICBMaXN0PENsYXNzSGllcmFyY2h5Tm9kZT4gc3RhY2s7CgogIENsYXNzSGllcmFyY2h5Tm9kZUl0ZXJhdG9yKHRoaXMuaXRlcmFibGUpOwoKICBDbGFzc0hpZXJhcmNoeU5vZGUgZ2V0IHJvb3QgPT4gaXRlcmFibGUucm9vdDsKCiAgYm9vbCBnZXQgaW5jbHVkZVJvb3QgPT4gaXRlcmFibGUuaW5jbHVkZVJvb3Q7CgogIEVudW1TZXQ8SW5zdGFudGlhdGlvbj4gZ2V0IG1hc2sgPT4gaXRlcmFibGUubWFzazsKCiAgYm9vbCBnZXQgaW5jbHVkZVVuaW5zdGFudGlhdGVkIHsKICAgIHJldHVybiBtYXNrLmNvbnRhaW5zKEluc3RhbnRpYXRpb24uVU5JTlNUQU5USUFURUQpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGN1cnJlbnQgewogICAgcmV0dXJuIGN1cnJlbnROb2RlICE9IG51bGwgPyBjdXJyZW50Tm9kZS5jbHMgOiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChzdGFjayA9PSBudWxsKSB7CiAgICAgIC8vIEZpcnN0IGNhbGwgdG8gbW92ZU5leHQKICAgICAgc3RhY2sgPSBbcm9vdF07CiAgICAgIHJldHVybiBfZmluZE5leHQoKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIEluaXRpYWxpemVkIHN0YXRlLgogICAgICBpZiAoY3VycmVudE5vZGUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gX2ZpbmROZXh0KCk7CiAgICB9CiAgfQoKICAvLy8gRmluZCB0aGUgbmV4dCBjbGFzcyB1c2luZyB0aGUgW3N0YWNrXS4KICBib29sIF9maW5kTmV4dCgpIHsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGlmIChzdGFjay5pc0VtcHR5KSB7CiAgICAgICAgLy8gTm8gbW9yZSBjbGFzc2VzLiBTZXQgW2N1cnJlbnROb2RlXSB0byBgbnVsbGAgdG8gc2lnbmFsIHRoZSBlbmQgb2YKICAgICAgICAvLyBpdGVyYXRpb24uCiAgICAgICAgY3VycmVudE5vZGUgPSBudWxsOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBjdXJyZW50Tm9kZSA9IHN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgaWYgKCFpbmNsdWRlVW5pbnN0YW50aWF0ZWQgJiYgIWN1cnJlbnROb2RlLmlzSW5zdGFudGlhdGVkKSB7CiAgICAgICAgLy8gV2UncmUgb25seSBpdGVyYXRpbmcgaW5zdGFudGlhdGVkIGNsYXNzZXMgc28gdGhlcmUgaXMgbm8gdXNlIGluCiAgICAgICAgLy8gdmlzaXRpbmcgdGhlIGN1cnJlbnQgbm9kZSBhbmQgaXRzIHN1YnRyZWUuCiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgLy8gQWRkIGRpcmVjdCBzdWJjbGFzc2VzIGluIHJldmVyc2Ugb3JkZXIgc28gd2lsbCB2aXNpdCB0aGVtIGluIHRoZSBsaXN0CiAgICAgIC8vIG9yZGVyLgogICAgICBmb3IgKGludCBpID0gY3VycmVudE5vZGUuX2RpcmVjdFN1YmNsYXNzZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICBzdGFjay5hZGQoY3VycmVudE5vZGUuX2RpcmVjdFN1YmNsYXNzZXNbaV0pOwogICAgICB9CiAgICAgIGlmIChfaXNWYWxpZChjdXJyZW50Tm9kZSkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogIH0KCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoZSBjbGFzcyBvZiBbbm9kZV0gaXMgYSB2YWxpZCByZXN1bHQgZm9yIHRoaXMgaXRlcmF0b3IuCiAgYm9vbCBfaXNWYWxpZChDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZSkgewogICAgaWYgKCFpbmNsdWRlUm9vdCAmJiBub2RlID09IHJvb3QpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBtYXNrLmludGVyc2VjdHMobm9kZS5fbWFzayk7CiAgfQp9CgovLy8gSXRlcmFibGUgZm9yIHRoZSBzdWJ0eXBlcyBpbiBhIFtDbGFzc1NldF0uCmNsYXNzIFN1YnR5cGVzSXRlcmFibGUgZXh0ZW5kcyBJdGVyYWJsZUJhc2U8Q2xhc3NFbnRpdHk+IHsKICBmaW5hbCBDbGFzc1NldCBzdWJ0eXBlU2V0OwogIGZpbmFsIEVudW1TZXQ8SW5zdGFudGlhdGlvbj4gbWFzazsKICBmaW5hbCBib29sIGluY2x1ZGVSb290OwoKICBTdWJ0eXBlc0l0ZXJhYmxlLlN1YnR5cGVzSXRlcmF0b3IodGhpcy5zdWJ0eXBlU2V0LCB0aGlzLm1hc2ssCiAgICAgIHt0aGlzLmluY2x1ZGVSb290OiB0cnVlfSk7CgogIEBvdmVycmlkZQogIEl0ZXJhdG9yPENsYXNzRW50aXR5PiBnZXQgaXRlcmF0b3IgPT4gbmV3IFN1YnR5cGVzSXRlcmF0b3IodGhpcyk7Cn0KCi8vLyBJdGVyYXRvciBmb3IgdGhlIHN1YnR5cGVzIGluIGEgW0NsYXNzU2V0XS4KY2xhc3MgU3VidHlwZXNJdGVyYXRvciBleHRlbmRzIEl0ZXJhdG9yPENsYXNzRW50aXR5PiB7CiAgZmluYWwgU3VidHlwZXNJdGVyYWJsZSBpdGVyYWJsZTsKICBJdGVyYXRvcjxDbGFzc0VudGl0eT4gZWxlbWVudHM7CiAgSXRlcmF0b3I8Q2xhc3NIaWVyYXJjaHlOb2RlPiBoaWVyYXJjaHlOb2RlczsKCiAgU3VidHlwZXNJdGVyYXRvcih0aGlzLml0ZXJhYmxlKTsKCiAgYm9vbCBnZXQgaW5jbHVkZVJvb3QgPT4gaXRlcmFibGUuaW5jbHVkZVJvb3Q7CgogIEVudW1TZXQ8SW5zdGFudGlhdGlvbj4gZ2V0IG1hc2sgPT4gaXRlcmFibGUubWFzazsKCiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGN1cnJlbnQgewogICAgaWYgKGVsZW1lbnRzICE9IG51bGwpIHsKICAgICAgcmV0dXJuIGVsZW1lbnRzLmN1cnJlbnQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoZWxlbWVudHMgPT0gbnVsbCAmJiBoaWVyYXJjaHlOb2RlcyA9PSBudWxsKSB7CiAgICAgIC8vIEluaXRpYWwgc3RhdGUuIEl0ZXJhdGUgdGhyb3VnaCBzdWJjbGFzc2VzLgogICAgICBlbGVtZW50cyA9IGl0ZXJhYmxlLnN1YnR5cGVTZXQubm9kZQogICAgICAgICAgLnN1YmNsYXNzZXNCeU1hc2sobWFzaywgc3RyaWN0OiAhaW5jbHVkZVJvb3QpCiAgICAgICAgICAuaXRlcmF0b3I7CiAgICB9CiAgICBpZiAoZWxlbWVudHMgIT0gbnVsbCAmJiBlbGVtZW50cy5tb3ZlTmV4dCgpKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKGhpZXJhcmNoeU5vZGVzID09IG51bGwpIHsKICAgICAgLy8gU3RhcnQgaXRlcmF0aW5nIHRocm91Z2ggc3VidHlwZXMuCiAgICAgIGhpZXJhcmNoeU5vZGVzID0gaXRlcmFibGUuc3VidHlwZVNldC5fc3VidHlwZXMuaXRlcmF0b3I7CiAgICB9CiAgICB3aGlsZSAoaGllcmFyY2h5Tm9kZXMubW92ZU5leHQoKSkgewogICAgICBlbGVtZW50cyA9IGhpZXJhcmNoeU5vZGVzLmN1cnJlbnQuc3ViY2xhc3Nlc0J5TWFzayhtYXNrKS5pdGVyYXRvcjsKICAgICAgaWYgKGVsZW1lbnRzLm1vdmVOZXh0KCkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKLy8vIEVudW0gdmFsdWVzIHJldHVybmVkIGZyb20gdGhlIFtGb3JFYWNoRnVuY3Rpb25dIHByb3ZpZGVkIHRvIHRoZSBgZm9yRWFjaFhgCi8vLyBmdW5jdGlvbnMgb2YgW0NsYXNzSGllcmFyY2h5Tm9kZV0gYW5kIFtDbGFzc1NldF0uIFRoZSB2YWx1ZSBpcyB1c2VkIHRvCi8vLyBjb250cm9sIHRoZSBjb250aW51ZWQgaXRlcmF0aW9uLgplbnVtIEl0ZXJhdGlvblN0ZXAgewogIC8vLyBJdGVyYXRpb24gY29udGludWVzLgogIENPTlRJTlVFLAoKICAvLy8gSXRlcmF0aW9uIHN0b3BzIGltbWVkaWF0ZWx5LgogIFNUT1AsCgogIC8vLyBJdGVyYXRpb24gc2tpcHMgdGhlIHN1YmNsYXNzZXMgb2YgdGhlIGN1cnJlbnQgY2xhc3MuCiAgU0tJUF9TVUJDTEFTU0VTLAp9CgovLy8gVmlzaXRpbmcgZnVuY3Rpb24gdXNlZCBmb3IgdGhlIGBmb3JFYWNoWGAgZnVuY3Rpb25zIG9mIFtDbGFzc0hpZXJhcmNoeU5vZGVdCi8vLyBhbmQgW0NsYXNzU2V0XS4gVGhlIHJldHVybiB2YWx1ZSBjb250cm9scyB0aGUgY29udGludWVkIGl0ZXJhdGlvbi4gSWYgYG51bGxgCi8vLyBpcyByZXR1cm5lZCwgaXRlcmF0aW9uIGNvbnRpbnVlcyB0byB0aGUgZW5kLgp0eXBlZGVmIEl0ZXJhdGlvblN0ZXAgRm9yRWFjaEZ1bmN0aW9uKENsYXNzRW50aXR5IGNscyk7CgovLy8gU2luZ2xldG9uIG1hcCBpbXBsZW1lbnRlZCBhcyBhIGZpZWxkIG9uIHRoZSBrZXkuCmNsYXNzIENsYXNzSGllcmFyY2h5Tm9kZXNNYXAgZXh0ZW5kcyBNYXBCYXNlPENsYXNzRW50aXR5LCBDbGFzc0hpZXJhcmNoeU5vZGU+IHsKICBAb3ZlcnJpZGUKICBDbGFzc0hpZXJhcmNoeU5vZGUgb3BlcmF0b3IgW10oT2JqZWN0IGNscykgewogICAgLy8gVE9ETyhzcmEpOiBDaGFuZ2UgdGhlIGtleSB0eXBlIHRvIGBjb3ZhcmlhbnQgQ2xhc3NIaWVyYXJjaHlOb2Rlc01hcEtleWAuCiAgICBpZiAoY2xzIGlzIENsYXNzSGllcmFyY2h5Tm9kZXNNYXBLZXkpIHsKICAgICAgcmV0dXJuIGNscy5fY2xhc3NIaWVyYXJjaHlOb2RlOwogICAgfQogICAgdGhyb3cgbmV3IFVuaW1wbGVtZW50ZWRFcnJvcignQ2xhc3NIaWVyYXJjaHlOb2Rlc01hcCBmb3IgJGNscycpOwogIH0KCiAgQG92ZXJyaWRlCiAgb3BlcmF0b3IgW109KE9iamVjdCBjbHMsIENsYXNzSGllcmFyY2h5Tm9kZSBub2RlKSB7CiAgICAvLyBUT0RPKHNyYSk6IENoYW5nZSB0aGUga2V5IHR5cGUgdG8gYGNvdmFyaWFudCBDbGFzc0hpZXJhcmNoeU5vZGVzTWFwS2V5YC4KICAgIGlmIChjbHMgaXMgQ2xhc3NIaWVyYXJjaHlOb2Rlc01hcEtleSkgewogICAgICBjbHMuX2NsYXNzSGllcmFyY2h5Tm9kZSA9IG5vZGU7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRocm93IG5ldyBVbmltcGxlbWVudGVkRXJyb3IoJ0NsYXNzSGllcmFyY2h5Tm9kZXNNYXAgZm9yICRjbHMnKTsKICB9CgogIEBvdmVycmlkZQogIENsYXNzSGllcmFyY2h5Tm9kZSBwdXRJZkFic2VudCgKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCBDbGFzc0hpZXJhcmNoeU5vZGUgaWZBYnNlbnQoKSkgewogICAgcmV0dXJuIHRoaXNbY2xzXSA/Pz0gaWZBYnNlbnQoKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQga2V5cyB7CiAgICB0aHJvdyBuZXcgVW5pbXBsZW1lbnRlZEVycm9yKCdDbGFzc0hpZXJhcmNoeU5vZGVzTWFwLmtleXMnKTsKICB9CgogIEBvdmVycmlk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YXJ0JyBhcyBzc2Egc2hvdyBIR3JhcGg7CmltcG9ydCAnc3NhL3NzYV90cmFjZXIuZGFydCcgc2hvdyBIVHJhY2VyOwppbXBvcnQgJ3V0aWwvdXRpbC5kYXJ0JyBzaG93IEluZGVudGF0aW9uOwppbXBvcnQgJ3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwoKLy8vIElmIG5vbi1udWxsLCB3ZSBvbmx5IHRyYWNlIG1ldGhvZHMgd2hvc2UgbmFtZSBtYXRjaCB0aGUgcmVnZXhwIGRlZmluZWQgYnkKLy8vIHRoZSBnaXZlbiBwYXR0ZXJuLgpTdHJpbmcgZ2V0IFRSQUNFX0ZJTFRFUl9QQVRURVJOID0+CiAgICBUUkFDRV9GSUxURVJfUEFUVEVSTl9GUk9NX0VOVklST05NRU5UID8/IFRSQUNFX0ZJTFRFUl9QQVRURVJOX0ZPUl9URVNUOwoKY29uc3QgU3RyaW5nIFRSQUNFX0ZJTFRFUl9QQVRURVJOX0ZST01fRU5WSVJPTk1FTlQgPQogICAgY29uc3QgU3RyaW5nLmZyb21FbnZpcm9ubWVudCgiRFVNUF9JUiIpOwpTdHJpbmcgVFJBQ0VfRklMVEVSX1BBVFRFUk5fRk9SX1RFU1Q7CgovLy8gRHVtcHMgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbiBhZnRlciBlYWNoIHBoYXNlIGluIGEgZm9ybWF0Ci8vLyByZWFkYWJsZSBieSBJUiBIeWRyYS4KY2xhc3MgVHJhY2VyIGV4dGVuZHMgVHJhY2VyVXRpbCB7CiAgZmluYWwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkOwogIGJvb2wgdHJhY2VBY3RpdmUgPSBmYWxzZTsKICBAb3ZlcnJpZGUKICBmaW5hbCBhcGkuT3V0cHV0U2luayBvdXRwdXQ7CiAgZmluYWwgUmVnRXhwIHRyYWNlRmlsdGVyOwoKICBUcmFjZXIodGhpcy5jbG9zZWRXb3JsZCwgYXBpLkNvbXBpbGVyT3V0cHV0IGNvbXBpbGVyT3V0cHV0KQogICAgICA6IHRyYWNlRmlsdGVyID0gVFJBQ0VfRklMVEVSX1BBVFRFUk4gPT0gbnVsbAogICAgICAgICAgICA/IG51bGwKICAgICAgICAgICAgOiBuZXcgUmVnRXhwKFRSQUNFX0ZJTFRFUl9QQVRURVJOKSwKICAgICAgICBvdXRwdXQgPSBUUkFDRV9GSUxURVJfUEFUVEVSTiAhPSBudWxsCiAgICAgICAgICAgID8gY29tcGlsZXJPdXRwdXQuY3JlYXRlT3V0cHV0U2luaygKICAgICAgICAgICAgICAgICdkYXJ0JywgJ2NmZycsIGFwaS5PdXRwdXRUeXBlLmRlYnVnKQogICAgICAgICAgICA6IG51bGw7CgogIGJvb2wgZ2V0IGlzRW5hYmxlZCA9PiB0cmFjZUZpbHRlciAhPSBudWxsOwoKICB2b2lkIHRyYWNlQ29tcGlsYXRpb24oU3RyaW5nIG1ldGhvZE5hbWUpIHsKICAgIGlmICghaXNFbmFibGVkKSByZXR1cm47CiAgICB0cmFjZUFjdGl2ZSA9IHRyYWNlRmlsdGVyLmhhc01hdGNoKG1ldGhvZE5hbWUpOwogICAgaWYgKCF0cmFjZUFjdGl2ZSkgcmV0dXJuOwogICAgdGFnKCJjb21waWxhdGlvbiIsICgpIHsKICAgICAgcHJpbnRQcm9wZXJ0eSgibmFtZSIsIG1ldGhvZE5hbWUpOwogICAgICBwcmludFByb3BlcnR5KCJtZXRob2QiLCBtZXRob2ROYW1lKTsKICAgICAgcHJpbnRQcm9wZXJ0eSgiZGF0ZSIsIG5ldyBEYXRlVGltZS5ub3coKS5taWxsaXNlY29uZHNTaW5jZUVwb2NoKTsKICAgIH0pOwogIH0KCiAgdm9pZCB0cmFjZUdyYXBoKFN0cmluZyBuYW1lLCB2YXIgaXJPYmplY3QpIHsKICAgIGlmICghdHJhY2VBY3RpdmUpIHJldHVybjsKICAgIGlmIChpck9iamVjdCBpcyBzc2EuSEdyYXBoKSB7CiAgICAgIG5ldyBIVHJhY2VyKG91dHB1dCwgY2xvc2VkV29ybGQpLnRyYWNlR3JhcGgobmFtZSwgaXJPYmplY3QpOwogICAgfQogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIGlmIChvdXRwdXQgIT0gbnVsbCkgewogICAgICBvdXRwdXQuY2xvc2UoKTsKICAgIH0KICB9Cn0KCmFic3RyYWN0IGNsYXNzIFRyYWNlclV0aWwgewogIGFwaS5PdXRwdXRTaW5rIGdldCBvdXRwdXQ7CiAgZmluYWwgSW5kZW50YXRpb24gX2luZCA9IG5ldyBJbmRlbnRhdGlvbigpOwoKICB2b2lkIHRhZyhTdHJpbmcgdGFnTmFtZSwgRnVuY3Rpb24gZikgewogICAgcHJpbnRsbigiYmVnaW5fJHRhZ05hbWUiKTsKICAgIF9pbmQuaW5kZW50QmxvY2soZik7CiAgICBwcmludGxuKCJlbmRfJHRhZ05hbWUiKTsKICB9CgogIHZvaWQgcHJpbnRsbihTdHJpbmcgc3RyaW5nKSB7CiAgICBhZGRJbmRlbnQoKTsKICAgIGFkZChzdHJpbmcpOwogICAgYWRkKCJcbiIpOwogIH0KCiAgdm9pZCBwcmludEVtcHR5UHJvcGVydHkoU3RyaW5nIHByb3BlcnR5TmFtZSkgewogICAgcHJpbnRsbihwcm9wZXJ0eU5hbWUpOwogIH0KCiAgU3RyaW5nIGZvcm1hdFBydHkoeCkgewogICAgaWYgKHggaXMgbnVtKSB7CiAgICAgIHJldHVybiAnJHt4fSc7CiAgICB9IGVsc2UgaWYgKHggaXMgU3RyaW5nKSB7CiAgICAgIHJldHVybiAnIiR7eH0iJzsKICAgIH0gZWxzZSBpZiAoeCBpcyBJdGVyYWJsZSkgewogICAgICByZXR1cm4geC5tYXAoKHMpID0+IGZvcm1hdFBydHkocykpLmpvaW4oJyAnKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93ICJpbnZhbGlkIHByb3BlcnR5IHR5cGU6ICR7eH0iOwogICAgfQogIH0KCiAgdm9pZCBwcmludFByb3BlcnR5KFN0cmluZyBwcm9wZXJ0eU5hbWUsIHZhbHVlKSB7CiAgICBwcmludGxuKCIkcHJvcGVydHlOYW1lICR7Zm9ybWF0UHJ0eSh2YWx1ZSl9Iik7CiAgfQoKICB2b2lkIGFkZChTdHJpbmcgc3RyaW5nKSB7CiAgICBvdXRwdXQuYWRkKHN0cmluZyk7CiAgfQoKICB2b2lkIGFkZEluZGVudCgpIHsKICAgIGFkZChfaW5kLmluZGVudGF0aW9uKTsKICB9Cn0KcABOTjwBEAEmLCsqJwFOFyNMATUtJgFHGiIiHAwfHAE+MxMwLi81FAEtAS0cNB4cKStICAQBLx4iQwYEAREaFgYEAgEcHS4BKR8ZHQQBIBERDwQBMRsEARkUFR4XIDQNKwYEATMzBAEcGAQBFRsEAgEgcGFja2FnZTpjb21waWxlci9zcmMvdHJhY2VyLmRhcnRCc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfYmFja2VuZC9jaGVja2VkX21vZGVfaGVscGVycy5kYXJ0rKIvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIGFzIGpzQXN0OwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIHNob3cganM7CmltcG9ydCAnLi4vc3NhL2NvZGVnZW4uZGFydCcgc2hvdyBTc2FDb2RlR2VuZXJhdG9yOwppbXBvcnQgJy4uL3NzYS9ub2Rlcy5kYXJ0JyBzaG93IEhUeXBlQ29udmVyc2lvbjsKaW1wb3J0ICcuLi91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0JyBzaG93IENhbGxTdHJ1Y3R1cmU7CmltcG9ydCAnLi4vdW5pdmVyc2UvdXNlLmRhcnQnIHNob3cgU3RhdGljVXNlOwppbXBvcnQgJ25hbWVyLmRhcnQnIHNob3cgTW9kdWxhck5hbWVyOwoKY2xhc3MgQ2hlY2tlZE1vZGVIZWxwZXIgewogIGZpbmFsIFN0cmluZyBuYW1lOwoKICBjb25zdCBDaGVja2VkTW9kZUhlbHBlcihTdHJpbmcgdGhpcy5uYW1lKTsKCiAgU3RhdGljVXNlIGdldFN0YXRpY1VzZShDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVmYWN0b3IgdGhpcyB0byBhdm9pZCBsb29raW5nIHVwIGRpcmVjdGx5IGluIHRoZQogICAgLy8ganMgaGVscGVyIGxpYnJhcnkgYnV0IGluc3RlYWQgYWNjZXNzIGNvbW1vbkVsZW1lbnRzLgogICAgcmV0dXJuIG5ldyBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKAogICAgICAgIGNvbW1vbkVsZW1lbnRzLmZpbmRIZWxwZXJGdW5jdGlvbihuYW1lKSwgY2FsbFN0cnVjdHVyZSk7CiAgfQoKICBDYWxsU3RydWN0dXJlIGdldCBjYWxsU3RydWN0dXJlID0+IENhbGxTdHJ1Y3R1cmUuT05FX0FSRzsKCiAgdm9pZCBnZW5lcmF0ZUFkZGl0aW9uYWxBcmd1bWVudHMoU3NhQ29kZUdlbmVyYXRvciBjb2RlZ2VuLCBNb2R1bGFyTmFtZXIgbmFtZXIsCiAgICAgIEhUeXBlQ29udmVyc2lvbiBub2RlLCBMaXN0PGpzQXN0LkV4cHJlc3Npb24+IGFyZ3VtZW50cykgewogICAgLy8gTm8gYWRkaXRpb25hbCBhcmd1bWVudHMgbmVlZGVkLgogIH0KfQoKY2xhc3MgUHJvcGVydHlDaGVja2VkTW9kZUhlbHBlciBleHRlbmRzIENoZWNrZWRNb2RlSGVscGVyIHsKICBjb25zdCBQcm9wZXJ0eUNoZWNrZWRNb2RlSGVscGVyKFN0cmluZyBuYW1lKSA6IHN1cGVyKG5hbWUpOwoKICBAb3ZlcnJpZGUKICBDYWxsU3RydWN0dXJlIGdldCBjYWxsU3RydWN0dXJlID0+IENhbGxTdHJ1Y3R1cmUuVFdPX0FSR1M7CgogIEBvdmVycmlkZQogIHZvaWQgZ2VuZXJhdGVBZGRpdGlvbmFsQXJndW1lbnRzKFNzYUNvZGVHZW5lcmF0b3IgY29kZWdlbiwgTW9kdWxhck5hbWVyIG5hbWVyLAogICAgICBIVHlwZUNvbnZlcnNpb24gbm9kZSwgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiBhcmd1bWVudHMpIHsKICAgIERhcnRUeXBlIHR5cGUgPSBub2RlLnR5cGVFeHByZXNzaW9uOwogICAganNBc3QuTmFtZSBhZGRpdGlvbmFsQXJndW1lbnQgPSBuYW1lci5vcGVyYXRvcklzVHlwZSh0eXBlKTsKICAgIGFyZ3VtZW50cy5hZGQoanMucXVvdGVOYW1lKGFkZGl0aW9uYWxBcmd1bWVudCkpOwogIH0KfQoKY2xhc3MgVHlwZVZhcmlhYmxlQ2hlY2tlZE1vZGVIZWxwZXIgZXh0ZW5kcyBDaGVja2VkTW9kZUhlbHBlciB7CiAgY29uc3QgVHlwZVZhcmlhYmxlQ2hlY2tlZE1vZGVIZWxwZXIoU3RyaW5nIG5hbWUpIDogc3VwZXIobmFtZSk7CgogIEBvdmVycmlkZQogIENhbGxTdHJ1Y3R1cmUgZ2V0IGNhbGxTdHJ1Y3R1cmUgPT4gQ2FsbFN0cnVjdHVyZS5UV09fQVJHUzsKCiAgQG92ZXJyaWRlCiAgdm9pZCBnZW5lcmF0ZUFkZGl0aW9uYWxBcmd1bWVudHMoU3NhQ29kZUdlbmVyYXRvciBjb2RlZ2VuLCBNb2R1bGFyTmFtZXIgbmFtZXIsCiAgICAgIEhUeXBlQ29udmVyc2lvbiBub2RlLCBMaXN0PGpzQXN0LkV4cHJlc3Npb24+IGFyZ3VtZW50cykgewogICAgYXNzZXJ0KG5vZGUudHlwZUV4cHJlc3Npb24uaXNUeXBlVmFyaWFibGUpOwogICAgY29kZWdlbi51c2Uobm9kZS50eXBlUmVwcmVzZW50YXRpb24pOwogICAgYXJndW1lbnRzLmFkZChjb2RlZ2VuLnBvcCgpKTsKICB9Cn0KCmNsYXNzIEZ1bmN0aW9uVHlwZVJlcHJlc2VudGF0aW9uQ2hlY2tlZE1vZGVIZWxwZXIgZXh0ZW5kcyBDaGVja2VkTW9kZUhlbHBlciB7CiAgY29uc3QgRnVuY3Rpb25UeXBlUmVwcmVzZW50YXRpb25DaGVja2VkTW9kZUhlbHBlcihTdHJpbmcgbmFtZSkgOiBzdXBlcihuYW1lKTsKCiAgQG92ZXJyaWRlCiAgQ2FsbFN0cnVjdHVyZSBnZXQgY2FsbFN0cnVjdHVyZSA9PiBDYWxsU3RydWN0dXJlLlRXT19BUkdTOwoKICBAb3ZlcnJpZGUKICB2b2lkIGdlbmVyYXRlQWRkaXRpb25hbEFyZ3VtZW50cyhTc2FDb2RlR2VuZXJhdG9yIGNvZGVnZW4sIE1vZHVsYXJOYW1lciBuYW1lciwKICAgICAgSFR5cGVDb252ZXJzaW9uIG5vZGUsIExpc3Q8anNBc3QuRXhwcmVzc2lvbj4gYXJndW1lbnRzKSB7CiAgICBhc3NlcnQobm9kZS50eXBlRXhwcmVzc2lvbi5pc0Z1bmN0aW9uVHlwZSk7CiAgICBjb2RlZ2VuLnVzZShub2RlLnR5cGVSZXByZXNlbnRhdGlvbik7CiAgICBhcmd1bWVudHMuYWRkKGNvZGVnZW4ucG9wKCkpOwogIH0KfQoKY2xhc3MgRnV0dXJlT3JSZXByZXNlbnRhdGlvbkNoZWNrZWRNb2RlSGVscGVyIGV4dGVuZHMgQ2hlY2tlZE1vZGVIZWxwZXIgewogIGNvbnN0IEZ1dHVyZU9yUmVwcmVzZW50YXRpb25DaGVja2VkTW9kZUhlbHBlcihTdHJpbmcgbmFtZSkgOiBzdXBlcihuYW1lKTsKCiAgQG92ZXJyaWRlCiAgQ2FsbFN0cnVjdHVyZSBnZXQgY2FsbFN0cnVjdHVyZSA9PiBDYWxsU3RydWN0dXJlLlRXT19BUkdTOwoKICBAb3ZlcnJpZGUKICB2b2lkIGdlbmVyYXRlQWRkaXRpb25hbEFyZ3VtZW50cyhTc2FDb2RlR2VuZXJhdG9yIGNvZGVnZW4sIE1vZHVsYXJOYW1lciBuYW1lciwKICAgICAgSFR5cGVDb252ZXJzaW9uIG5vZGUsIExpc3Q8anNBc3QuRXhwcmVzc2lvbj4gYXJndW1lbnRzKSB7CiAgICBhc3NlcnQobm9kZS50eXBlRXhwcmVzc2lvbi5pc0Z1dHVyZU9yKTsKICAgIGNvZGVnZW4udXNlKG5vZGUudHlwZVJlcHJlc2VudGF0aW9uKTsKICAgIGFyZ3VtZW50cy5hZGQoY29kZWdlbi5wb3AoKSk7CiAgfQp9CgpjbGFzcyBTdWJ0eXBlQ2hlY2tlZE1vZGVIZWxwZXIgZXh0ZW5kcyBDaGVja2VkTW9kZUhlbHBlciB7CiAgY29uc3QgU3VidHlwZUNoZWNrZWRNb2RlSGVscGVyKFN0cmluZyBuYW1lKSA6IHN1cGVyKG5hbWUpOwoKICBAb3ZlcnJpZGUKICBDYWxsU3RydWN0dXJlIGdldCBjYWxsU3RydWN0dXJlID0+IGNvbnN0IENhbGxTdHJ1Y3R1cmUudW5uYW1lZCg0KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBnZW5lcmF0ZUFkZGl0aW9uYWxBcmd1bWVudHMoU3NhQ29kZUdlbmVyYXRvciBjb2RlZ2VuLCBNb2R1bGFyTmFtZXIgbmFtZXIsCiAgICAgIEhUeXBlQ29udmVyc2lvbiBub2RlLCBMaXN0PGpzQXN0LkV4cHJlc3Npb24+IGFyZ3VtZW50cykgewogICAgLy8gVE9ETyhzcmEpOiBNb3ZlIHRoZXNlIGNhbGxzIGludG8gdGhlIFNTQSBncmFwaCBzbyB0aGF0IHRoZSBhcmd1bWVudHMgY2FuCiAgICAvLyBiZSBvcHRpbWl6ZWQsIGUsZywgR1ZOZWQuCiAgICBJbnRlcmZhY2VUeXBlIHR5cGUgPSBub2RlLnR5cGVFeHByZXNzaW9uOwogICAgQ2xhc3NFbnRpdHkgZWxlbWVudCA9IHR5cGUuZWxlbWVudDsKICAgIGpzQXN0Lk5hbWUgaXNGaWVsZCA9IG5hbWVyLm9wZXJhdG9ySXMoZWxlbWVudCk7CiAgICBhcmd1bWVudHMuYWRkKGpzLnF1b3RlTmFtZShpc0ZpZWxkKSk7CiAgICBjb2RlZ2VuLnVzZShub2RlLnR5cGVSZXByZXNlbnRhdGlvbik7CiAgICBhcmd1bWVudHMuYWRkKGNvZGVnZW4ucG9wKCkpOwogICAganNBc3QuTmFtZSBhc0ZpZWxkID0gbmFtZXIuc3Vic3RpdHV0aW9uTmFtZShlbGVtZW50KTsKICAgIGFyZ3VtZW50cy5hZGQoanMucXVvdGVOYW1lKGFzRmllbGQpKTsKICB9Cn0KCmNsYXNzIENoZWNrZWRNb2RlSGVscGVycyB7CiAgQ2hlY2tlZE1vZGVIZWxwZXJzKCk7CgogIC8vLyBBbGwgdGhlIGNoZWNrZWQgbW9kZSBoZWxwZXJzLgogIHN0YXRpYyBjb25zdCBMaXN0PENoZWNrZWRNb2RlSGVscGVyPiBoZWxwZXJzID0gY29uc3QgPENoZWNrZWRNb2RlSGVscGVyPlsKICAgIGNvbnN0IENoZWNrZWRNb2RlSGVscGVyKCdzdHJpbmdUeXBlQ2FzdCcpLAogICAgY29uc3QgQ2hlY2tlZE1vZGVIZWxwZXIoJ3N0cmluZ1R5cGVDaGVjaycpLAogICAgY29uc3QgQ2hlY2tlZE1vZGVIZWxwZXIoJ2RvdWJsZVR5cGVDYXN0JyksCiAgICBjb25zdCBDaGVja2VkTW9kZUhlbHBlcignZG91YmxlVHlwZUNoZWNrJyksCiAgICBjb25zdCBDaGVja2VkTW9kZUhlbHBlcignbnVtVHlwZUNhc3QnKSwKICAgIGNvbnN0IENoZWNrZWRNb2RlSGVscGVyKCdudW1UeXBlQ2hlY2snKSwKICAgIGNvbnN0IENoZWNrZWRNb2RlSGVscGVyKCdib29sQ29udmVyc2lvbkNoZWNrJyksCiAgICBjb25zdCBDaGVja2VkTW9kZUhlbHBlcignYm9vbFR5cGVDYXN0JyksCiAgICBjb25zdCBDaGVja2VkTW9kZUhlbHBlcignYm9vbFR5cGVDaGVjaycpLAogICAgY29uc3QgQ2hlY2tlZE1vZGVIZWxwZXIoJ2ludFR5cGVDYXN0JyksCiAgICBjb25zdCBDaGVja2VkTW9kZUhlbHBlcignaW50VHlwZUNoZWNrJyksCiAgICBjb25zdCBQcm9wZXJ0eUNoZWNrZWRNb2RlSGVscGVyKCdudW1iZXJPclN0cmluZ1N1cGVyTmF0aXZlVHlwZUNhc3QnKSwKICAgIGNvbnN0IFByb3BlcnR5Q2hlY2tlZE1vZGVIZWxwZXIoJ251bWJlck9yU3RyaW5nU3VwZXJOYXRpdmVUeXBlQ2hlY2snKSwKICAgIGNvbnN0IFByb3BlcnR5Q2hlY2tlZE1vZGVIZWxwZXIoJ251bWJlck9yU3RyaW5nU3VwZXJUeXBlQ2FzdCcpLAogICAgY29uc3QgUHJvcGVydHlDaGVja2VkTW9kZUhlbHBlcignbnVtYmVyT3JTdHJpbmdTdXBlclR5cGVDaGVjaycpLAogICAgY29uc3QgUHJvcGVydHlDaGVja2VkTW9kZUhlbHBlcignc3RyaW5nU3VwZXJOYXRpdmVUeXBlQ2FzdCcpLAogICAgY29uc3QgUHJvcGVydHlDaGVja2VkTW9kZUhlbHBlcignc3RyaW5nU3VwZXJOYXRpdmVUeXBlQ2hlY2snKSwKICAgIGNvbnN0IFByb3BlcnR5Q2hlY2tlZE1vZGVIZWxwZXIoJ3N0cmluZ1N1cGVyVHlwZUNhc3QnKSwKICAgIGNvbnN0IFByb3BlcnR5Q2hlY2tlZE1vZGVIZWxwZXIoJ3N0cmluZ1N1cGVyVHlwZUNoZWNrJyksCiAgICBjb25zdCBDaGVja2VkTW9kZUhlbHBlcignbGlzdFR5cGVDYXN0JyksCiAgICBjb25zdCBDaGVja2VkTW9kZUhlbHBlcignbGlzdFR5cGVDaGVjaycpLAogICAgY29uc3QgUHJvcGVydHlDaGVja2VkTW9kZUhlbHBlcignbGlzdFN1cGVyTmF0aXZlVHlwZUNhc3QnKSwKICAgIGNvbnN0IFByb3BlcnR5Q2hlY2tlZE1vZGVIZWxwZXIoJ2xpc3RTdXBlck5hdGl2ZVR5cGVDaGVjaycpLAogICAgY29uc3QgUHJvcGVydHlDaGVja2VkTW9kZUhlbHBlcignbGlzdFN1cGVyVHlwZUNhc3QnKSwKICAgIGNvbnN0IFByb3BlcnR5Q2hlY2tlZE1vZGVIZWxwZXIoJ2xpc3RTdXBlclR5cGVDaGVjaycpLAogICAgY29uc3QgUHJvcGVydHlDaGVja2VkTW9kZUhlbHBlcignaW50ZXJjZXB0ZWRUeXBlQ2FzdCcpLAogICAgY29uc3QgUHJvcGVydHlDaGVja2VkTW9kZUhlbHBlcignaW50ZXJjZXB0ZWRUeXBlQ2hlY2snKSwKICAgIGNvbnN0IFN1YnR5cGVDaGVja2VkTW9kZUhlbHBlcignc3VidHlwZUNhc3QnKSwKICAgIGNvbnN0IFN1YnR5cGVDaGVja2VkTW9kZUhlbHBlcignYXNzZXJ0U3VidHlwZScpLAogICAgY29uc3QgVHlwZVZhcmlhYmxlQ2hlY2tlZE1vZGVIZWxwZXIoJ3N1YnR5cGVPZlJ1bnRpbWVUeXBlQ2FzdCcpLAogICAgY29uc3QgVHlwZVZhcmlhYmxlQ2hlY2tlZE1vZGVIZWxwZXIoJ2Fzc2VydFN1YnR5cGVPZlJ1bnRpbWVUeXBlJyksCiAgICBjb25zdCBQcm9wZXJ0eUNoZWNrZWRNb2RlSGVscGVyKCdwcm9wZXJ0eVR5cGVDYXN0JyksCiAgICBjb25zdCBQcm9wZXJ0eUNoZWNrZWRNb2RlSGVscGVyKCdwcm9wZXJ0eVR5cGVDaGVjaycpLAogICAgY29uc3QgRnVuY3Rpb25UeXBlUmVwcmVzZW50YXRpb25DaGVja2VkTW9kZUhlbHBlcignZnVuY3Rpb25UeXBlQ2FzdCcpLAogICAgY29uc3QgRnVuY3Rpb25UeXBlUmVwcmVzZW50YXRpb25DaGVja2VkTW9kZUhlbHBlcignZnVuY3Rpb25UeXBlQ2hlY2snKSwKICAgIGNvbnN0IEZ1dHVyZU9yUmVwcmVzZW50YXRpb25DaGVja2VkTW9kZUhlbHBlcignZnV0dXJlT3JDYXN0JyksCiAgICBjb25zdCBGdXR1cmVPclJlcHJlc2VudGF0aW9uQ2hlY2tlZE1vZGVIZWxwZXIoJ2Z1dHVyZU9yQ2hlY2snKSwKICBdOwoKICAvLyBDaGVja2VkIG1vZGUgaGVscGVycyBpbmRleGVkIGJ5IG5hbWUuCiAgc3RhdGljIGZpbmFsIE1hcDxTdHJpbmcsIENoZWNrZWRNb2RlSGVscGVyPiBjaGVja2VkTW9kZUhlbHBlckJ5TmFtZSA9CiAgICAgIG5ldyBNYXA8U3RyaW5nLCBDaGVja2VkTW9kZUhlbHBlcj4uZnJvbUl0ZXJhYmxlKGhlbHBlcnMsCiAgICAgICAgICBrZXk6IChoZWxwZXIpID0+IGhlbHBlci5uYW1lKTsKCiAgLy8vIFJldHVybnMgdGhlIGNoZWNrZWQgbW9kZSBoZWxwZXIgdGhhdCB3aWxsIGJlIG5lZWRlZCB0byBkbyBhIHR5cGUKICAvLy8gY2hlY2svdHlwZSBjYXN0IG9uIFt0eXBlXSBhdCBydW50aW1lLiBOb3RlIHRoYXQgdGhpcyBtZXRob2QgaXMgYmVpbmcKICAvLy8gY2FsbGVkIGJvdGggYnkgdGhlIHJlc29sdmVyIHdpdGggaW50ZXJmYWNlIHR5cGVzIChpbnQsIFN0cmluZywgLi4uKSwgYW5kCiAgLy8vIGJ5IHRoZSBTU0EgYmFja2VuZCB3aXRoIGltcGxlbWVudGF0aW9uIHR5cGVzIChKU0ludCwgSlNTdHJpbmcsIC4uLikuCiAgQ2hlY2tlZE1vZGVIZWxwZXIgZ2V0Q2hlY2tlZE1vZGVIZWxwZXIoCiAgICAgIERhcnRUeXBlIHR5cGUsIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICB7Ym9vbCB0eXBlQ2FzdH0pIHsKICAgIHJldHVybiBnZXRDaGVja2VkTW9kZUhlbHBlckludGVybmFsKHR5cGUsIGNvbW1vbkVsZW1lbnRzLAogICAgICAgIHR5cGVDYXN0OiB0eXBlQ2FzdCwgbmF0aXZlQ2hlY2tPbmx5OiBmYWxzZSk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbmF0aXZlIGNoZWNrZWQgbW9kZSBoZWxwZXIgdGhhdCB3aWxsIGJlIG5lZWRlZCB0byBkbyBhIHR5cGUKICAvLy8gY2hlY2svdHlwZSBjYXN0IG9uIFt0eXBlXSBhdCBydW50aW1lLiBJZiBubyBuYXRpdmUgaGVscGVyIGV4aXN0cyBmb3IKICAvLy8gW3R5cGVdLCBbOm51bGw6XSBpcyByZXR1cm5lZC4KICBDaGVja2VkTW9kZUhlbHBlciBnZXROYXRpdmVDaGVja2VkTW9kZUhlbHBlcigKICAgICAgRGFydFR5cGUgdHlwZSwgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIHtib29sIHR5cGVDYXN0fSkgewogICAgcmV0dXJuIGdldENoZWNrZWRNb2RlSGVscGVySW50ZXJuYWwodHlwZSwgY29tbW9uRWxlbWVudHMsCiAgICAgICAgdHlwZUNhc3Q6IHR5cGVDYXN0LCBuYXRpdmVDaGVja09ubHk6IHRydWUpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGNoZWNrZWQgbW9kZSBoZWxwZXIgZm9yIHRoZSB0eXBlIGNoZWNrL3R5cGUgY2FzdCBmb3IKICAvLy8gW3R5cGVdLiBJZiBbbmF0aXZlQ2hlY2tPbmx5XSBpcyBbOnRydWU6XSwgb25seSBuYW1lcyBmb3IgbmF0aXZlIGhlbHBlcnMKICAvLy8gYXJlIHJldHVybmVkLgogIENoZWNrZWRNb2RlSGVscGVyIGdldENoZWNrZWRNb2RlSGVscGVySW50ZXJuYWwoCiAgICAgIERhcnRUeXBlIHR5cGUsIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICB7Ym9vbCB0eXBlQ2FzdCwgYm9vbCBuYXRpdmVDaGVja09ubHl9KSB7CiAgICBTdHJpbmcgbmFtZSA9IGdldENoZWNrZWRNb2RlSGVscGVyTmFtZUludGVybmFsKHR5cGUsIGNvbW1vbkVsZW1lbnRzLAogICAgICAgIHR5cGVDYXN0OiB0eXBlQ2FzdCwgbmF0aXZlQ2hlY2tPbmx5OiBuYXRpdmVDaGVja09ubHkpOwogICAgaWYgKG5hbWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBDaGVja2VkTW9kZUhlbHBlciBoZWxwZXIgPSBjaGVja2VkTW9kZUhlbHBlckJ5TmFtZVtuYW1lXTsKICAgIGFzc2VydChoZWxwZXIgIT0gbnVsbCk7CiAgICByZXR1cm4gaGVscGVyOwogIH0KCiAgU3RyaW5nIGdldENoZWNrZWRNb2RlSGVscGVyTmFtZUludGVybmFsKAogICAgICBEYXJ0VHlwZSB0eXBlLCBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAge2Jvb2wgdHlwZUNhc3QsIGJvb2wgbmF0aXZlQ2hlY2tPbmx5fSkgewogICAgYXNzZXJ0KCF0eXBlLmlzVHlwZWRlZik7CgogICAgaWYgKHR5cGUuaXNUeXBlVmFyaWFibGUpIHsKICAgICAgcmV0dXJuIHR5cGVDYXN0CiAgICAgICAgICA/ICdzdWJ0eXBlT2ZSdW50aW1lVHlwZUNhc3QnCiAgICAgICAgICA6ICdhc3NlcnRTdWJ0eXBlT2ZSdW50aW1lVHlwZSc7CiAgICB9CgogICAgaWYgKHR5cGUuaXNGdW5jdGlvblR5cGUpIHsKICAgICAgcmV0dXJuIHR5cGVDYXN0ID8gJ2Z1bmN0aW9uVHlwZUNhc3QnIDogJ2Z1bmN0aW9uVHlwZUNoZWNrJzsKICAgIH0KCiAgICBpZiAodHlwZS5pc0Z1dHVyZU9yKSB7CiAgICAgIHJldHVybiB0eXBlQ2FzdCA/ICdmdXR1cmVPckNhc3QnIDogJ2Z1dHVyZU9yQ2hlY2snOwogICAgfQoKICAgIGFzc2VydCh0eXBlLmlzSW50ZXJmYWNlVHlwZSwKICAgICAgICBmYWlsZWRBdChOT19MT0NBVElPTl9TUEFOTkFCTEUsICJVbmV4cGVjdGVkIHR5cGU6ICR0eXBlIikpOwogICAgSW50ZXJmYWNlVHlwZSBpbnRlcmZhY2VUeXBlID0gdHlwZTsKICAgIENsYXNzRW50aXR5IGVsZW1lbnQgPSBpbnRlcmZhY2VUeXBlLmVsZW1lbnQ7CiAgICBib29sIG5hdGl2ZUNoZWNrID0gdHJ1ZTsKICAgIC8vIFRPRE8oMTM5NTUpLCBUT0RPKDk3MzEpLiAgVGhlIHRlc3QgZm9yIG5vbi1wcmltaXRpdmUgdHlwZXMgc2hvdWxkIHVzZSBhbgogICAgLy8gaW50ZXJjZXB0b3IuICBUaGUgaW50ZXJjZXB0b3Igc2hvdWxkIGJlIGFuIGFyZ3VtZW50IHRvIEhUeXBlQ29udmVyc2lvbiBzbwogICAgLy8gdGhhdCBpdCBjYW4gYmUgb3B0aW1pemVkIGJ5IHN0YW5kYXJkIGludGVyY2VwdG9yIG9wdGltaXphdGlvbnMuCiAgICAvLyAgbmF0aXZlQ2hlY2tPbmx5IHx8IGVtaXR0ZXIubmF0aXZlRW1pdHRlci5yZXF1aXJlc05hdGl2ZUlzQ2hlY2soZWxlbWVudCk7CgogICAgdmFyIHN1ZmZpeCA9IHR5cGVDYXN0ID8gJ1R5cGVDYXN0JyA6ICdUeXBlQ2hlY2snOwogICAgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuanNTdHJpbmdDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuc3RyaW5nQ2xhc3MpIHsKICAgICAgaWYgKG5hdGl2ZUNoZWNrT25seSkgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiAnc3RyaW5nJHN1ZmZpeCc7CiAgICB9CgogICAgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuanNEb3VibGVDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuZG91YmxlQ2xhc3MpIHsKICAgICAgaWYgKG5hdGl2ZUNoZWNrT25seSkgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiAnZG91YmxlJHN1ZmZpeCc7CiAgICB9CgogICAgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuanNOdW1iZXJDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMubnVtQ2xhc3MpIHsKICAgICAgaWYgKG5hdGl2ZUNoZWNrT25seSkgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiAnbnVtJHN1ZmZpeCc7CiAgICB9CgogICAgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuanNCb29sQ2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLmJvb2xDbGFzcykgewogICAgICBpZiAobmF0aXZlQ2hlY2tPbmx5KSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuICdib29sJHN1ZmZpeCc7CiAgICB9CgogICAgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuanNJbnRDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuaW50Q2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLmpzVUludDMyQ2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLmpzVUludDMxQ2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLmpzUG9zaXRpdmVJbnRDbGFzcykgewogICAgICBpZiAobmF0aXZlQ2hlY2tPbmx5KSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuICdpbnQkc3VmZml4JzsKICAgIH0KCiAgICBpZiAoY29tbW9uRWxlbWVudHMuaXNOdW1iZXJPclN0cmluZ1N1cGVydHlwZShlbGVtZW50KSkgewogICAgICByZXR1cm4gbmF0aXZlQ2hlY2sKICAgICAgICAgID8gJ251bWJlck9yU3RyaW5nU3VwZXJOYXRpdmUkc3VmZml4JwogICAgICAgICAgOiAnbnVtYmVyT3JTdHJpbmdTdXBlciRzdWZmaXgnOwogICAgfQoKICAgIGlmIChjb21tb25FbGVtZW50cy5pc1N0cmluZ09ubHlTdXBlcnR5cGUoZWxlbWVudCkpIHsKICAgICAgcmV0dXJuIG5hdGl2ZUNoZWNrID8gJ3N0cmluZ1N1cGVyTmF0aXZlJHN1ZmZpeCcgOiAnc3RyaW5nU3VwZXIkc3VmZml4JzsKICAgIH0KCiAgICBpZiAoKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMubGlzdENsYXNzIHx8CiAgICAgICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzKSAmJgogICAgICAgIHR5cGUudHJlYXRBc1JhdykgewogICAgICBpZiAobmF0aXZlQ2hlY2tPbmx5KSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuICdsaXN0JHN1ZmZpeCc7CiAgICB9CgogICAgaWYgKGNvbW1vbkVsZW1lbnRzLmlzTGlzdFN1cGVydHlwZShlbGVtZW50KSAmJiB0eXBlLnRyZWF0QXNSYXcpIHsKICAgICAgcmV0dXJuIG5hdGl2ZUNoZWNrID8gJ2xpc3RTdXBlck5hdGl2ZSRzdWZmaXgnIDogJ2xpc3RTdXBlciRzdWZmaXgnOwogICAgfQoKICAgIGlmICh0eXBlLmlzSW50ZXJmYWNlVHlwZSAmJiAhdHlwZS50cmVhdEFzUmF3KSB7CiAgICAgIHJldHVybiB0eXBlQ2FzdCA/ICdzdWJ0eXBlQ2FzdCcgOiAnYXNzZXJ0U3VidHlwZSc7CiAgICB9CgogICAgaWYgKG5hdGl2ZUNoZWNrKSB7CiAgICAgIC8vIFRPRE8oa2FybGtsb3NlKTogY2FuIHdlIGdldCByaWQgb2YgdGhpcyBicmFuY2ggd2hlbiB3ZSB1c2UKICAgICAgLy8gaW50ZXJjZXB0b3JzPwogICAgICByZXR1cm4gJ2ludGVyY2VwdGVkJHN1ZmZpeCc7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gJ3Byb3BlcnR5JHN1ZmZpeCc7CiAgICB9CiAgfQp9CoEtAE5OPAEZIiQhISA0MT0uJwEaFQEtATpOPCdBBAE8AVFAJwQCATw+AQw9AQxRQClANQQCAUBCAQw9AQxRQDAqIgQCAU5QAQw9AQxRQDAqIgQCAUpMAQw9AQxRQCwqIgQCATs9AQxFAQxRQFAhLig0KioiOioEAgEbGAEkTC8wLzAsLTQtLiwtSktERUJDPD0tLkBBOjs8PTM1RUc5OktMQ0QFAStIPykBR0tPSyo0GT41BAFOSyQwNBk+NAQBR04UMjQvST8jPhwTBAErNC8dAR8WJyoGAR9CBgEbOgYBIUQoMR1QUUdRATYzMSgeBgEzMSgeBgEzLigbBgExLygcBgEwLjMzOCgbBgE9GS8qBgE5TgYBMDcbKBwGAUZKBgE0OQYBF0QXIw0gBgQCATlwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2NoZWNrZWRfbW9kZV9oZWxwZXJzLmRhcnQ7c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfYmFja2VuZC9ydW50aW1lX3R5cGVzLmRhcnTAANQ8Ly8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkganNfYmFja2VuZC5ydW50aW1lX3R5cGVzOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnIHNob3cgSWRlbnRpZmllcnM7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnCiAgICBzaG93CiAgICAgICAgQ29tbW9uRWxlbWVudHMsCiAgICAgICAgRWxlbWVudEVudmlyb25tZW50LAogICAgICAgIEpDb21tb25FbGVtZW50cywKICAgICAgICBKRWxlbWVudEVudmlyb25tZW50OwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIGFzIGpzQXN0OwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIHNob3cganM7CmltcG9ydCAnLi4vanNfZW1pdHRlci9qc19lbWl0dGVyLmRhcnQnIHNob3cgTW9kdWxhckVtaXR0ZXI7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jb2RlZ2VuX3dvcmxkX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvZmVhdHVyZS5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JzsKaW1wb3J0ICduYW1lci5kYXJ0JzsKaW1wb3J0ICduYXRpdmVfZGF0YS5kYXJ0JzsKaW1wb3J0ICdydW50aW1lX3R5cGVzX2NvZGVnZW4uZGFydCc7CmltcG9ydCAncnVudGltZV90eXBlc19yZXNvbHV0aW9uLmRhcnQnOwoKdHlwZWRlZiBqc0FzdC5FeHByZXNzaW9uIE9uVmFyaWFibGVDYWxsYmFjayhUeXBlVmFyaWFibGVUeXBlIHZhcmlhYmxlKTsKdHlwZWRlZiBib29sIFNob3VsZEVuY29kZVR5cGVkZWZDYWxsYmFjayhUeXBlZGVmVHlwZSB2YXJpYWJsZSk7CgovLy8gSW50ZXJmYWNlIGZvciB0aGUgbmVlZGVkIHJ1bnRpbWUgdHlwZSBjaGVja3MuCmFic3RyYWN0IGNsYXNzIFJ1bnRpbWVUeXBlc0NoZWNrcyB7CiAgLy8vIFJldHVybnMgdGhlIHJlcXVpcmVkIHJ1bnRpbWUgdHlwZSBjaGVja3MuCiAgVHlwZUNoZWNrcyBnZXQgcmVxdWlyZWRDaGVja3M7CgogIC8vLyBSZXR1cm4gYWxsIGNsYXNzZXMgbmVlZGVkIGZvciBydW50aW1lIHR5cGUgaW5mb3JtYXRpb24uCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCByZXF1aXJlZENsYXNzZXM7Cn0KCmNsYXNzIFRyaXZpYWxUeXBlc0NoZWNrcyBpbXBsZW1lbnRzIFJ1bnRpbWVUeXBlc0NoZWNrcyB7CiAgZmluYWwgVHlwZUNoZWNrcyBfdHlwZUNoZWNrczsKICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IF9hbGxDbGFzc2VzOwoKICBUcml2aWFsVHlwZXNDaGVja3ModGhpcy5fdHlwZUNoZWNrcykKICAgICAgOiBfYWxsQ2xhc3NlcyA9IF90eXBlQ2hlY2tzLmNsYXNzZXMudG9TZXQoKTsKCiAgQG92ZXJyaWRlCiAgVHlwZUNoZWNrcyBnZXQgcmVxdWlyZWRDaGVja3MgPT4gX3R5cGVDaGVja3M7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgcmVxdWlyZWRDbGFzc2VzID0+IF9hbGxDbGFzc2VzOwp9CgovLy8gSW50ZXJmYWNlIGZvciBjb21wdXRpbmcgdGhlIG5lZWRlZCBydW50aW1lIHR5cGUgY2hlY2tzLgphYnN0cmFjdCBjbGFzcyBSdW50aW1lVHlwZXNDaGVja3NCdWlsZGVyIHsKICB2b2lkIHJlZ2lzdGVyVHlwZVZhcmlhYmxlQm91bmRzU3VidHlwZUNoZWNrKAogICAgICBEYXJ0VHlwZSB0eXBlQXJndW1lbnQsIERhcnRUeXBlIGJvdW5kKTsKCiAgLy8vIFJlZ2lzdGVycyB0aGF0IGEgZ2VuZXJpYyBbaW5zdGFudGlhdGlvbl0gaXMgdXNlZC4KICB2b2lkIHJlZ2lzdGVyR2VuZXJpY0luc3RhbnRpYXRpb24oR2VuZXJpY0luc3RhbnRpYXRpb24gaW5zdGFudGlhdGlvbik7CgogIC8vLyBDb21wdXRlcyB0aGUgW1J1bnRpbWVUeXBlc0NoZWNrc10gZm9yIHRoZSBkYXRhIGluIHRoaXMgYnVpbGRlci4KICBSdW50aW1lVHlwZXNDaGVja3MgY29tcHV0ZVJlcXVpcmVkQ2hlY2tzKAogICAgICBDb2RlZ2VuV29ybGQgY29kZWdlbldvcmxkLCBDb21waWxlck9wdGlvbnMgb3B0aW9ucyk7CgogIGJvb2wgZ2V0IHJ0aUNoZWNrc0J1aWxkZXJDbG9zZWQ7Cn0KCmNsYXNzIFRyaXZpYWxSdW50aW1lVHlwZXNDaGVja3NCdWlsZGVyIGltcGxlbWVudHMgUnVudGltZVR5cGVzQ2hlY2tzQnVpbGRlciB7CiAgZmluYWwgSkNsb3NlZFdvcmxkIF9jbG9zZWRXb3JsZDsKICBmaW5hbCBUcml2aWFsUnVudGltZVR5cGVzU3Vic3RpdHV0aW9ucyBfc3Vic3RpdHV0aW9uczsKICBAb3ZlcnJpZGUKICBib29sIHJ0aUNoZWNrc0J1aWxkZXJDbG9zZWQgPSBmYWxzZTsKCiAgVHJpdmlhbFJ1bnRpbWVUeXBlc0NoZWNrc0J1aWxkZXIodGhpcy5fY2xvc2VkV29ybGQsIHRoaXMuX3N1YnN0aXR1dGlvbnMpOwoKICBFbGVtZW50RW52aXJvbm1lbnQgZ2V0IF9lbGVtZW50RW52aXJvbm1lbnQgPT4gX2Nsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudDsKCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclR5cGVWYXJpYWJsZUJvdW5kc1N1YnR5cGVDaGVjaygKICAgICAgRGFydFR5cGUgdHlwZUFyZ3VtZW50LCBEYXJ0VHlwZSBib3VuZCkge30KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckdlbmVyaWNJbnN0YW50aWF0aW9uKEdlbmVyaWNJbnN0YW50aWF0aW9uIGluc3RhbnRpYXRpb24pIHt9CgogIEBvdmVycmlkZQogIFJ1bnRpbWVUeXBlc0NoZWNrcyBjb21wdXRlUmVxdWlyZWRDaGVja3MoCiAgICAgIENvZGVnZW5Xb3JsZCBjb2RlZ2VuV29ybGQsIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zKSB7CiAgICBydGlDaGVja3NCdWlsZGVyQ2xvc2VkID0gdHJ1ZTsKCiAgICBNYXA8Q2xhc3NFbnRpdHksIENsYXNzVXNlPiBjbGFzc1VzZU1hcCA9IDxDbGFzc0VudGl0eSwgQ2xhc3NVc2U+e307CiAgICBmb3IgKENsYXNzRW50aXR5IGNscyBpbiBfY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkKICAgICAgICAuZ2V0Q2xhc3NTZXQoX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzKQogICAgICAgIC5zdWJ0eXBlcygpKSB7CiAgICAgIENsYXNzVXNlIGNsYXNzVXNlID0gbmV3IENsYXNzVXNlKCkKICAgICAgICAuLmRpcmVjdEluc3RhbmNlID0gdHJ1ZQogICAgICAgIC4uY2hlY2tlZEluc3RhbmNlID0gdHJ1ZQogICAgICAgIC4udHlwZUFyZ3VtZW50ID0gdHJ1ZQogICAgICAgIC4uY2hlY2tlZFR5cGVBcmd1bWVudCA9IHRydWUKICAgICAgICAuLnR5cGVMaXRlcmFsID0gdHJ1ZQogICAgICAgIC4uZnVuY3Rpb25UeXBlID0gX2NvbXB1dGVGdW5jdGlvblR5cGUoX2VsZW1lbnRFbnZpcm9ubWVudCwgY2xzKTsKICAgICAgY2xhc3NVc2VNYXBbY2xzXSA9IGNsYXNzVXNlOwogICAgfQogICAgVHlwZUNoZWNrcyB0eXBlQ2hlY2tzID0gX3N1YnN0aXR1dGlvbnMuX3JlcXVpcmVkQ2hlY2tzID0KICAgICAgICBfc3Vic3RpdHV0aW9ucy5fY29tcHV0ZUNoZWNrcyhjbGFzc1VzZU1hcCk7CiAgICByZXR1cm4gbmV3IFRyaXZpYWxUeXBlc0NoZWNrcyh0eXBlQ2hlY2tzKTsKICB9CgogIFNldDxDbGFzc0VudGl0eT4gY29tcHV0ZUNoZWNrZWRDbGFzc2VzKAogICAgICBDb2RlZ2VuV29ybGRCdWlsZGVyIGNvZGVnZW5Xb3JsZEJ1aWxkZXIsIFNldDxEYXJ0VHlwZT4gaW1wbGljaXRJc0NoZWNrcykgewogICAgcmV0dXJuIF9jbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeQogICAgICAgIC5nZXRDbGFzc1NldChfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MpCiAgICAgICAgLnN1YnR5cGVzKCkKICAgICAgICAudG9TZXQoKTsKICB9CgogIFNldDxGdW5jdGlvblR5cGU+IGNvbXB1dGVDaGVja2VkRnVuY3Rpb25zKAogICAgICBDb2RlZ2VuV29ybGRCdWlsZGVyIGNvZGVnZW5Xb3JsZEJ1aWxkZXIsIFNldDxEYXJ0VHlwZT4gaW1wbGljaXRJc0NoZWNrcykgewogICAgcmV0dXJuIG5ldyBTZXQ8RnVuY3Rpb25UeXBlPigpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgUnVudGltZVR5cGVzU3Vic3RpdHV0aW9uc01peGluCiAgICBpbXBsZW1lbnRzIFJ1bnRpbWVUeXBlc1N1YnN0aXR1dGlvbnMgewogIEpDbG9zZWRXb3JsZCBnZXQgX2Nsb3NlZFdvcmxkOwogIFR5cGVDaGVja3MgZ2V0IF9yZXF1aXJlZENoZWNrczsKCiAgSkVsZW1lbnRFbnZpcm9ubWVudCBnZXQgX2VsZW1lbnRFbnZpcm9ubWVudCA9PgogICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50OwogIERhcnRUeXBlcyBnZXQgX3R5cGVzID0+IF9jbG9zZWRXb3JsZC5kYXJ0VHlwZXM7CiAgUnVudGltZVR5cGVzTmVlZCBnZXQgX3J0aU5lZWQgPT4gX2Nsb3NlZFdvcmxkLnJ0aU5lZWQ7CgogIC8vLyBDb21wdXRlIHRoZSByZXF1aXJlZCB0eXBlIGNoZWNrcyBhbmQgc3Vic3RpdHV0aW9ucyBmb3IgdGhlIGdpdmVuCiAgLy8vIGluc3RhbnRpYXRlZCBhbmQgY2hlY2tlZCBjbGFzc2VzLgogIFR5cGVDaGVja3MgX2NvbXB1dGVDaGVja3MoTWFwPENsYXNzRW50aXR5LCBDbGFzc1VzZT4gY2xhc3NVc2VNYXApIHsKICAgIC8vIFJ1biB0aHJvdWdoIHRoZSBjb21iaW5hdGlvbiBvZiBpbnN0YW50aWF0ZWQgYW5kIGNoZWNrZWQKICAgIC8vIGFyZ3VtZW50cyBhbmQgcmVjb3JkIGFsbCBjb21iaW5hdGlvbiB3aGVyZSB0aGUgZWxlbWVudCBvZiBhIGNoZWNrZWQKICAgIC8vIGFyZ3VtZW50IGlzIGEgc3VwZXJjbGFzcyBvZiB0aGUgZWxlbWVudCBvZiBhbiBpbnN0YW50aWF0ZWQgdHlwZS4KICAgIFR5cGVDaGVja01hcHBpbmcgcmVzdWx0ID0gbmV3IFR5cGVDaGVja01hcHBpbmcoKTsKICAgIFNldDxDbGFzc0VudGl0eT4gaGFuZGxlZCA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CgogICAgLy8gRW1wdHkgdXNhZ2Ugb2JqZWN0IGZvciBjbGFzc2VzIHdpdGggbm8gZGlyZWN0IHJ0aSB1c2FnZS4KICAgIGZpbmFsIENsYXNzVXNlIGVtcHR5VXNlID0gbmV3IENsYXNzVXNlKCk7CgogICAgLy8vIENvbXB1dGUgdGhlICRpc1ggYW5kICRhc1ggZnVuY3Rpb25zIG5lZWQgZm9yIFtjbHNdLgogICAgQ2xhc3NDaGVja3MgY29tcHV0ZUNoZWNrcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgICAgaWYgKCFoYW5kbGVkLmFkZChjbHMpKSByZXR1cm4gcmVzdWx0W2Nsc107CgogICAgICBDbGFzc1VzZSBjbGFzc1VzZSA9IGNsYXNzVXNlTWFwW2Nsc10gPz8gZW1wdHlVc2U7CiAgICAgIENsYXNzQ2hlY2tzIGNoZWNrcyA9IG5ldyBDbGFzc0NoZWNrcyhjbGFzc1VzZS5mdW5jdGlvblR5cGUpOwogICAgICByZXN1bHRbY2xzXSA9IGNoZWNrczsKCiAgICAgIC8vIEZpbmQgdGhlIHN1cGVyY2xhc3MgZnJvbSB3aGljaCBbY2xzXSBpbmhlcml0cyBjaGVja3MuCiAgICAgIENsYXNzRW50aXR5IHN1cGVyQ2xhc3MgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFN1cGVyQ2xhc3MoY2xzLAogICAgICAgICAgc2tpcFVubmFtZWRNaXhpbkFwcGxpY2F0aW9uczogdHJ1ZSk7CiAgICAgIENsYXNzQ2hlY2tzIHN1cGVyQ2hlY2tzOwogICAgICBib29sIGV4dGVuZHNTdXBlckNsYXNzVHJpdmlhbGx5ID0gZmFsc2U7CiAgICAgIGlmIChzdXBlckNsYXNzICE9IG51bGwpIHsKICAgICAgICAvLyBDb21wdXRlIHRoZSBjaGVja3MgaW5oZXJpdGVkIGZyb20gW3N1cGVyQ2xhc3NdLgogICAgICAgIHN1cGVyQ2hlY2tzID0gY29tcHV0ZUNoZWNrcyhzdXBlckNsYXNzKTsKCiAgICAgICAgLy8gRG9lcyBbY2xzXSBleHRlbmQgW3N1cGVyQ2xhc3NdIHRyaXZpYWxseT8KICAgICAgICAvLwogICAgICAgIC8vIEZvciBpbnN0YW5jZToKICAgICAgICAvLwogICAgICAgIC8vICAgICBjbGFzcyBBPFQ+IHt9CiAgICAgICAgLy8gICAgIGNsYXNzIEI8Uz4gZXh0ZW5kcyBBPFM+IHt9CiAgICAgICAgLy8gICAgIGNsYXNzIEM8VSwgVj4gZXh0ZW5kcyBBPFU+IHt9CiAgICAgICAgLy8gICAgIGNsYXNzIEQgZXh0ZW5kcyBBPGludD4ge30KICAgICAgICAvLwogICAgICAgIC8vIGhlcmUgYEJgIGV4dGVuZHMgYEFgIHRyaXZpYWxseSwgYnV0IGBDYCBhbmQgYERgIGRvbid0LgogICAgICAgIGV4dGVuZHNTdXBlckNsYXNzVHJpdmlhbGx5ID0gaXNUcml2aWFsU3Vic3RpdHV0aW9uKGNscywgc3VwZXJDbGFzcyk7CiAgICAgIH0KCiAgICAgIGJvb2wgaXNOYXRpdmVDbGFzcyA9IF9jbG9zZWRXb3JsZC5uYXRpdmVEYXRhLmlzTmF0aXZlQ2xhc3MoY2xzKTsKICAgICAgaWYgKGNsYXNzVXNlLnR5cGVBcmd1bWVudCB8fAogICAgICAgICAgY2xhc3NVc2UudHlwZUxpdGVyYWwgfHwKICAgICAgICAgIChpc05hdGl2ZUNsYXNzICYmIGNsYXNzVXNlLmNoZWNrZWRJbnN0YW5jZSkpIHsKICAgICAgICBTdWJzdGl0dXRpb24gc3Vic3RpdHV0aW9uID0gY29tcHV0ZVN1YnN0aXR1dGlvbihjbHMsIGNscyk7CiAgICAgICAgLy8gV2UgbmVlZCBbY2xzXSBhdCBydW50aW1lIC0gZXZlbiBpZiBbY2xzXSBpcyBub3QgaW5zdGFudGlhdGVkLiBFaXRoZXIKICAgICAgICAvLyBhcyBhIHR5cGUgYXJndW1lbnQsIGZvciBhIHR5cGUgbGl0ZXJhbCBvciBmb3IgYW4gaXMtdGVzdCBpZiBbY2xzXSBpcwogICAgICAgIC8vIG5hdGl2ZS4KICAgICAgICBjaGVja3MuYWRkKG5ldyBUeXBlQ2hlY2soY2xzLCBzdWJzdGl0dXRpb24sIG5lZWRzSXM6IGlzTmF0aXZlQ2xhc3MpKTsKICAgICAgfQoKICAgICAgLy8gQ29tcHV0ZSB0aGUgc2V0IG9mIGNsYXNzZXMgdGhhdCBbY2xzXSBpbmhlcml0ZWQgcHJvcGVydGllcyBmcm9tLgogICAgICAvLwogICAgICAvLyBUaGlzIHNldCByZWZsZWN0cyB0aGUgZW1pdHRlZCBjbGFzcyBoaWVyYXJjaHkgYW5kIHRoZXJlZm9yZSB1c2VzCiAgICAgIC8vIGBnZXRFZmZlY3RpdmVNaXhpbkNsYXNzYCB0byBmaW5kIHRoZSBpbmhlcml0ZWQgbWl4aW5zLgogICAgICBTZXQ8Q2xhc3NFbnRpdHk+IGluaGVyaXRlZENsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwogICAgICBDbGFzc0VudGl0eSBvdGhlciA9IGNsczsKICAgICAgd2hpbGUgKG90aGVyICE9IG51bGwpIHsKICAgICAgICBpbmhlcml0ZWRDbGFzc2VzLmFkZChvdGhlcik7CiAgICAgICAgaWYgKGNsYXNzVXNlLmluc3RhbmNlICYmCiAgICAgICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuaXNNaXhpbkFwcGxpY2F0aW9uKG90aGVyKSkgewogICAgICAgICAgLy8gV2UgZG9uJ3QgbWl4aW4gW290aGVyXSBpZiBbY2xzXSBpc24ndCBpbnN0YW50aWF0ZWQsIGRpcmVjdGx5IG9yCiAgICAgICAgICAvLyBpbmRpcmVjdGx5LgogICAgICAgICAgaW5oZXJpdGVkQ2xhc3NlcwogICAgICAgICAgICAgIC5hZGQoX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRFZmZlY3RpdmVNaXhpbkNsYXNzKG90aGVyKSk7CiAgICAgICAgfQogICAgICAgIG90aGVyID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRTdXBlckNsYXNzKG90aGVyKTsKICAgICAgfQoKICAgICAgLy8vIENvbXB1dGUgdGhlIG5lZWRlZCBjaGVjayBmb3IgW2Nsc10gYWdhaW5zdCB0aGUgY2xhc3Mgb2YgdGhlIHN1cGVyCiAgICAgIC8vLyBbdHlwZV0uCiAgICAgIHZvaWQgcHJvY2Vzc1N1cGVydHlwZShJbnRlcmZhY2VUeXBlIHR5cGUpIHsKICAgICAgICBDbGFzc0VudGl0eSBjaGVja2VkQ2xhc3MgPSB0eXBlLmVsZW1lbnQ7CiAgICAgICAgQ2xhc3NVc2UgY2hlY2tlZENsYXNzVXNlID0gY2xhc3NVc2VNYXBbY2hlY2tlZENsYXNzXSA/PyBlbXB0eVVzZTsKCiAgICAgICAgLy8gV2hlcmUgW2Nsc10gaW5oZXJpdHMgcHJvcGVydGllcyBmb3IgW2NoZWNrZWRDbGFzc10uCiAgICAgICAgYm9vbCBpbmhlcml0c0Zyb21DaGVja2VkQ2xhc3MgPSBpbmhlcml0ZWRDbGFzc2VzLmNvbnRhaW5zKGNoZWNrZWRDbGFzcyk7CgogICAgICAgIC8vIElmIFtjbHNdIGluaGVyaXRzIHByb3BlcnRpZXMgZnJvbSBbY2hlY2tlZENsYXNzXSBhbmQgW2NoZWNrZWRDbGFzc10KICAgICAgICAvLyBuZWVkcyB0eXBlIGFyZ3VtZW50cywgW2Nsc10gbXVzdCBwcm92aWRlIGEgc3Vic3RpdHV0aW9uIGZvcgogICAgICAgIC8vIFtjaGVja2VkQ2xhc3NdLgogICAgICAgIC8vCiAgICAgICAgLy8gRm9yIGluc3RhbmNlOgogICAgICAgIC8vCiAgICAgICAgLy8gICAgIGNsYXNzIE08VD4gewogICAgICAgIC8vICAgICAgICBtKCkgPT4gVDsKICAgICAgICAvLyAgICAgfQogICAgICAgIC8vICAgICBjbGFzcyBTIHt9CiAgICAgICAgLy8gICAgIGNsYXNzIEMgZXh0ZW5kcyBTIHdpdGggTTxpbnQ+IHt9CiAgICAgICAgLy8KICAgICAgICAvLyBIZXJlIGBDYCBuZWVkcyBhbiBgJGFzTWAgc3Vic3RpdHV0aW9uIGZ1bmN0aW9uIHRvIHByb3ZpZGUgdGhlIHZhbHVlCiAgICAgICAgLy8gb2YgYFRgIGluIGBNLm1gLgogICAgICAgIGJvb2wgbmVlZHNUeXBlQXJndW1lbnRzRm9yQ2hlY2tlZENsYXNzID0gaW5oZXJpdHNGcm9tQ2hlY2tlZENsYXNzICYmCiAgICAgICAgICAgIF9ydGlOZWVkLmNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKGNoZWNrZWRDbGFzcyk7CgogICAgICAgIC8vIFdoZXRoZXIgW2NoZWNrZWRDbGFzc10gaXMgdXNlZCBpbiBhbiBpbnN0YW5jZSB0ZXN0IG9yIHR5cGUgYXJndW1lbnQKICAgICAgICAvLyB0ZXN0LgogICAgICAgIC8vCiAgICAgICAgLy8gRm9yIGluc3RhbmNlOgogICAgICAgIC8vCiAgICAgICAgLy8gICAgY2xhc3MgQSB7fQogICAgICAgIC8vICAgIGNsYXNzIEIge30KICAgICAgICAvLyAgICB0ZXN0KG8pID0+IG8gaXMgQSB8fCBvIGlzIExpc3Q8Qj47CiAgICAgICAgLy8KICAgICAgICAvLyBIZXJlIGBBYCBpcyB1c2VkIGluIGFuIGluc3RhbmNlIHRlc3QgYW5kIGBCYCBpcyB1c2VkIGluIGEgdHlwZQogICAgICAgIC8vIGFyZ3VtZW50IHRlc3QuCiAgICAgICAgYm9vbCBpc0NoZWNrZWQgPSBjaGVja2VkQ2xhc3NVc2UuY2hlY2tlZFR5cGVBcmd1bWVudCB8fAogICAgICAgICAgICBjaGVja2VkQ2xhc3NVc2UuY2hlY2tlZEluc3RhbmNlOwoKICAgICAgICBpZiAoaXNDaGVja2VkIHx8IG5lZWRzVHlwZUFyZ3VtZW50c0ZvckNoZWNrZWRDbGFzcykgewogICAgICAgICAgLy8gV2UgbmVlZCBhbiAkaXNYIGFuZC9vciAkYXNYIHByb3BlcnR5IG9uIFtjbHNdIGZvciBbY2hlY2tlZENsYXNzXS4KCiAgICAgICAgICAvLyBXaGV0aGVyIGBjbHNgIGltcGxlbWVudHMgYGNoZWNrZWRDbGFzc2AgdHJpdmlhbGx5LgogICAgICAgICAgLy8KICAgICAgICAgIC8vIEZvciBpbnN0YW5jZToKICAgICAgICAgIC8vCiAgICAgICAgICAvLyAgICAgY2xhc3MgQTxUPiB7fQogICAgICAgICAgLy8gICAgIGNsYXNzIEI8Uz4gaW1wbGVtZW50cyBBPFM+IHt9CiAgICAgICAgICAvLyAgICAgY2xhc3MgQzxVLCBWPiBpbXBsZW1lbnRzIEE8VT4ge30KICAgICAgICAgIC8vICAgICBjbGFzcyBEIGltcGxlbWVudHMgQTxpbnQ+IHt9CiAgICAgICAgICAvLwogICAgICAgICAgLy8gaGVyZSBgQmAgaW1wbGVtZW50cyBgQWAgdHJpdmlhbGx5LCBidXQgYENgIGFuZCBgRGAgZG9uJ3QuCiAgICAgICAgICBib29sIGltcGxlbWVudHNDaGVja2VkVHJpdmlhbGx5ID0KICAgICAgICAgICAgICBpc1RyaXZpYWxTdWJzdGl0dXRpb24oY2xzLCBjaGVja2VkQ2xhc3MpOwoKICAgICAgICAgIC8vIFdoZXRoZXIgW2NoZWNrZWRDbGFzc10gaXMgZ2VuZXJpYy4KICAgICAgICAgIC8vCiAgICAgICAgICAvLyBDdXJyZW50bHkgW2lzVHJpdmlhbFN1YnN0aXR1dGlvbl0gcmVwb3J0cyB0aGF0IFtjbHNdIGltcGxlbWVudHMKICAgICAgICAgIC8vIFtjaGVja2VkQ2xhc3NdIHRyaXZpYWxseSBpZiBbY2hlY2tlZENsYXNzXSBpcyBub3QgZ2VuZXJpYy4gSW4gdGhpcwogICAgICAgICAgLy8gY2FzZSB0aGUgc3Vic3RpdHV0aW9uIGlzIG5vdCBvbmx5IHRyaXZpYWwgaXQgaXMgYWxzbyBub3QgbmVlZGVkLgogICAgICAgICAgYm9vbCBpc0NoZWNrZWRHZW5lcmljID0KICAgICAgICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmlzR2VuZXJpY0NsYXNzKGNoZWNrZWRDbGFzcyk7CgogICAgICAgICAgLy8gVGhlIGNoZWNrcyBmb3IgW2NoZWNrZWRDbGFzc10gaW5oZXJpdGVkIGZvciBbc3VwZXJDbGFzc10uCiAgICAgICAgICBUeXBlQ2hlY2sgY2hlY2tGcm9tU3VwZXJDbGFzcyA9CiAgICAgICAgICAgICAgc3VwZXJDaGVja3MgIT0gbnVsbCA/IHN1cGVyQ2hlY2tzW2NoZWNrZWRDbGFzc10gOiBudWxsOwoKICAgICAgICAgIC8vIFdoZXRoZXIgW2Nsc10gbmVlZCBhbiBleHBsaWNpdCAkaXNYIHByb3BlcnR5IGZvciBbY2hlY2tlZENsYXNzXS4KICAgICAgICAgIC8vCiAgICAgICAgICAvLyBJZiBbY2xzXSBpbmhlcml0cyBmcm9tIFtjaGVja2VkQ2xhc3NdIGl0IGFsc28gaW5oZXJpdHMgdGhlICRpc1gKICAgICAgICAgIC8vIHByb3BlcnR5IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG9uIFtjaGVja2VkQ2xhc3NdLgogICAgICAgICAgYm9vbCBuZWVkc0lzID0gIWluaGVyaXRzRnJvbUNoZWNrZWRDbGFzcyAmJiBpc0NoZWNrZWQ7CgogICAgICAgICAgaWYgKGNoZWNrRnJvbVN1cGVyQ2xhc3MgIT0gbnVsbCkgewogICAgICAgICAgICAvLyBUaGUgc3VwZXJjbGFzcyBoYXMgYSBzdWJzdGl0dXRpb24gZnVuY3Rpb24gZm9yIFtjaGVja2VkQ2xhc3NdLgogICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBjYW4gcmV1c2UgdGhpcyBpdCBvZiBuZWVkIHRvIG92ZXJyaWRlIGl0LgogICAgICAgICAgICAvLwogICAgICAgICAgICAvLyBUaGUgaW5oZXJpdGVkICRpc1ggcHJvcGVydHkgZG9lcyBfbm90XyBuZWVkIHRvIGJlIG92ZXJyaWRpbmcuCiAgICAgICAgICAgIGlmIChleHRlbmRzU3VwZXJDbGFzc1RyaXZpYWxseSkgewogICAgICAgICAgICAgIC8vIFtjbHNdIGltcGxlbWVudHMgW2NoZWNrZWRDbGFzc10gdGhlIHNhbWUgd2F5IGFzIFtzdXBlckNsYXNzXQogICAgICAgICAgICAgIC8vIHNvIHRoZSBpbmhlcml0ZWQgc3Vic3RpdHV0aW9uIGZ1bmN0aW9uIGFscmVhZHkgd29ya3MuCiAgICAgICAgICAgICAgY2hlY2tzLmFkZChuZXcgVHlwZUNoZWNrKGNoZWNrZWRDbGFzcywgbnVsbCwgbmVlZHNJczogZmFsc2UpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAvLyBbY2xzXSBpbXBsZW1lbnRzIFtjaGVja2VkQ2xhc3NdIGRpZmZlcmVudGx5IGZyb20gW3N1cGVyQ2xhc3NdCiAgICAgICAgICAgICAgLy8gc28gdGhlIGluaGVyaXRlZCBzdWJzdGl0dXRpb24gZnVuY3Rpb24gbmVlZHMgdG8gYmUgcmVwbGFjZWQuCiAgICAgICAgICAgICAgaWYgKGltcGxlbWVudHNDaGVja2VkVHJpdmlhbGx5KSB7CiAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIGFuIGV4cGxpY2l0IHRyaXZpYWwgc3Vic3RpdHV0aW9uIGZ1bmN0aW9uIGZvcgogICAgICAgICAgICAgICAgLy8gW2NoZWNrZWRDbGFzc10gdGhhdCBvdmVycmlkZXMgdGhlIGluaGVyaXRlZCBmdW5jdGlvbi4KICAgICAgICAgICAgICAgIGNoZWNrcy5hZGQobmV3IFR5cGVDaGVjayhjaGVja2VkQ2xhc3MsCiAgICAgICAgICAgICAgICAgICAgaXNDaGVja2VkR2VuZXJpYyA/IGNvbnN0IFN1YnN0aXR1dGlvbi50cml2aWFsKCkgOiBudWxsLAogICAgICAgICAgICAgICAgICAgIG5lZWRzSXM6IGZhbHNlKSk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgYSBub24tdHJpdmlhbCBzdWJzdGl0dXRpb24gZnVuY3Rpb24gZm9yCiAgICAgICAgICAgICAgICAvLyBbY2hlY2tlZENsYXNzXS4KICAgICAgICAgICAgICAgIGNoZWNrcy5hZGQobmV3IFR5cGVDaGVjaygKICAgICAgICAgICAgICAgICAgICBjaGVja2VkQ2xhc3MsIGNvbXB1dGVTdWJzdGl0dXRpb24oY2xzLCBjaGVja2VkQ2xhc3MpLAogICAgICAgICAgICAgICAgICAgIG5lZWRzSXM6IGZhbHNlKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBUaGUgc3VwZXJjbGFzcyBoYXMgbm8gc3Vic3RpdHV0aW9uIGZ1bmN0aW9uIGZvciBbY2hlY2tlZENsYXNzXS4KICAgICAgICAgICAgaWYgKGltcGxlbWVudHNDaGVja2VkVHJpdmlhbGx5KSB7CiAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgYWRkIGFuIGV4cGxpY2l0IHN1YnN0aXR1dGlvbiBmdW5jdGlvbiBmb3IKICAgICAgICAgICAgICAvLyBbY2hlY2tlZENsYXNzXSBiZWNhdXNlIHRoZSBzdWJzdGl0dXRpb24gaXMgdHJpdmlhbCBhbmQgZG9lc24ndAogICAgICAgICAgICAgIC8vIG5lZWQgdG8gb3ZlcnJpZGUgYW4gaW5oZXJpdGVkIGZ1bmN0aW9uLgogICAgICAgICAgICAgIGNoZWNrcy5hZGQobmV3IFR5cGVDaGVjayhjaGVja2VkQ2xhc3MsIG51bGwsIG5lZWRzSXM6IG5lZWRzSXMpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAvLyBXZSBuZWVkIGEgbm9uLXRyaXZpYWwgc3Vic3RpdHV0aW9uIGZ1bmN0aW9uIGZvcgogICAgICAgICAgICAgIC8vIFtjaGVja2VkQ2xhc3NdLgogICAgICAgICAgICAgIGNoZWNrcy5hZGQobmV3IFR5cGVDaGVjaygKICAgICAgICAgICAgICAgICAgY2hlY2tlZENsYXNzLCBjb21wdXRlU3Vic3RpdHV0aW9uKGNscywgY2hlY2tlZENsYXNzKSwKICAgICAgICAgICAgICAgICAgbmVlZHNJczogbmVlZHNJcykpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICBmb3IgKEludGVyZmFjZVR5cGUgdHlwZSBpbiBfdHlwZXMuZ2V0U3VwZXJ0eXBlcyhjbHMpKSB7CiAgICAgICAgcHJvY2Vzc1N1cGVydHlwZSh0eXBlKTsKICAgICAgfQogICAgICBGdW5jdGlvblR5cGUgY2FsbFR5cGUgPSBfdHlwZXMuZ2V0Q2FsbFR5cGUoX3R5cGVzLmdldFRoaXNUeXBlKGNscykpOwogICAgICBpZiAoY2FsbFR5cGUgIT0gbnVsbCkgewogICAgICAgIHByb2Nlc3NTdXBlcnR5cGUoX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmZ1bmN0aW9uVHlwZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGNoZWNrczsKICAgIH0KCiAgICBmb3IgKENsYXNzRW50aXR5IGNscyBpbiBjbGFzc1VzZU1hcC5rZXlzKSB7CiAgICAgIENsYXNzVXNlIGNsYXNzVXNlID0gY2xhc3NVc2VNYXBbY2xzXSA/PyBlbXB0eVVzZTsKICAgICAgaWYgKGNsYXNzVXNlLmRpcmVjdEluc3RhbmNlIHx8CiAgICAgICAgICBjbGFzc1VzZS50eXBlQXJndW1lbnQgfHwKICAgICAgICAgIGNsYXNzVXNlLnR5cGVMaXRlcmFsKSB7CiAgICAgICAgLy8gQWRkIGNoZWNrcyBvbmx5IGZvciBjbGFzc2VzIHRoYXQgYXJlIGxpdmUgZWl0aGVyIGFzIGluc3RhbnRpYXRlZAogICAgICAgIC8vIGNsYXNzZXMgb3IgdHlwZSBhcmd1bWVudHMgcGFzc2VkIGF0IHJ1bnRpbWUuCiAgICAgICAgY29tcHV0ZUNoZWNrcyhjbHMpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIFNldDxDbGFzc0VudGl0eT4gZ2V0Q2xhc3Nlc1VzZWRJblN1YnN0aXR1dGlvbnMoVHlwZUNoZWNrcyBjaGVja3MpIHsKICAgIFNldDxDbGFzc0VudGl0eT4gaW5zdGFudGlhdGVkID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKICAgIEFyZ3VtZW50Q29sbGVjdG9yIGNvbGxlY3RvciA9IG5ldyBBcmd1bWVudENvbGxlY3RvcigpOwogICAgZm9yIChDbGFzc0VudGl0eSB0YXJnZXQgaW4gY2hlY2tzLmNsYXNzZXMpIHsKICAgICAgQ2xhc3NDaGVja3MgY2xhc3NDaGVja3MgPSBjaGVja3NbdGFyZ2V0XTsKICAgICAgZm9yIChUeXBlQ2hlY2sgY2hlY2sgaW4gY2xhc3NDaGVja3MuY2hlY2tzKSB7CiAgICAgICAgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbiA9IGNoZWNrLnN1YnN0aXR1dGlvbjsKICAgICAgICBpZiAoc3Vic3RpdHV0aW9uICE9IG51bGwpIHsKICAgICAgICAgIGNvbGxlY3Rvci5jb2xsZWN0QWxsKHN1YnN0aXR1dGlvbi5hcmd1bWVudHMpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGluc3RhbnRpYXRlZC4uYWRkQWxsKGNvbGxlY3Rvci5jbGFzc2VzKTsKCiAgICAvLyBUT0RPKHNyYSk6IFRoaXMgY29tcHV0YXRpb24gbWlzc2VzIHN1YnN0aXR1dGlvbnMgZm9yIHJlYWRpbmcgdHlwZQogICAgLy8gcGFyYW1ldGVycy4KICB9CgogIC8vIFRPRE8oa2FybGtsb3NlKTogbWF5YmUgcHJlY29tcHV0ZSB0aGlzIHZhbHVlIGFuZCBzdG9yZSBpdCBpbiB0eXBlQ2hlY2tzPwogIEBvdmVycmlkZQogIGJvb2wgaXNUcml2aWFsU3Vic3RpdHV0aW9uKENsYXNzRW50aXR5IGNscywgQ2xhc3NFbnRpdHkgY2hlY2spIHsKICAgIGlmIChjbHMuaXNDbG9zdXJlKSB7CiAgICAgIC8vIFRPRE8oa2FybGtsb3NlKTogaGFuZGxlIGNsb3N1cmVzLgogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvLyBJZiB0aGVyZSBhcmUgbm8gdHlwZSB2YXJpYWJsZXMsIHdlIGRvIG5vdCBuZWVkIGEgc3Vic3RpdHV0aW9uLgogICAgaWYgKCFfZWxlbWVudEVudmlyb25tZW50LmlzR2VuZXJpY0NsYXNzKGNoZWNrKSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvLyBKUy1pbnRlcm9wIGNsYXNzZXMgbmVlZCBhbiBleHBsaWNpdCBzdWJzdGl0dXRpb24gdG8gbWFyayB0aGUgdHlwZQogICAgLy8gYXJndW1lbnRzIGFzIGBhbnlgIHR5cGUuCiAgICBpZiAoX2Nsb3NlZFdvcmxkLm5hdGl2ZURhdGEuaXNKc0ludGVyb3BDbGFzcyhjbHMpKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvLyBJZiB0aGUgdHlwZSBpcyB0aGUgc2FtZSwgd2UgZG8gbm90IG5lZWQgYSBzdWJzdGl0dXRpb24uCiAgICBpZiAoY2xzID09IGNoZWNrKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIEludGVyZmFjZVR5cGUgb3JpZ2luYWxUeXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShjbHMpOwogICAgSW50ZXJmYWNlVHlwZSB0eXBlID0gX3R5cGVzLmFzSW5zdGFuY2VPZihvcmlnaW5hbFR5cGUsIGNoZWNrKTsKICAgIC8vIFt0eXBlXSBpcyBub3QgYSBzdWJ0eXBlIG9mIFtjaGVja10uIHdlIGRvIG5vdCBnZW5lcmF0ZSBhIGNoZWNrIGFuZCBkbyBub3QKICAgIC8vIG5lZWQgYSBzdWJzdGl0dXRpb24uCiAgICBpZiAodHlwZSA9PSBudWxsKSByZXR1cm4gdHJ1ZTsKCiAgICAvLyBSdW4gdGhyb3VnaCBib3RoIGxpc3RzIG9mIHR5cGUgdmFyaWFibGVzIGFuZCBjaGVjayBpZiB0aGUgdHlwZSB2YXJpYWJsZXMKICAgIC8vIGFyZSBpZGVudGljYWwgYXQgZWFjaCBwb3NpdGlvbi4gSWYgdGhleSBhcmUgbm90LCB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSBhCiAgICAvLyBzdWJzdGl0dXRpb24gZnVuY3Rpb24uCiAgICBMaXN0PERhcnRUeXBlPiB2YXJpYWJsZXMgPSBvcmlnaW5hbFR5cGUudHlwZUFyZ3VtZW50czsKICAgIExpc3Q8RGFydFR5cGU+IGFyZ3VtZW50cyA9IHR5cGUudHlwZUFyZ3VtZW50czsKICAgIGlmICh2YXJpYWJsZXMubGVuZ3RoICE9IGFyZ3VtZW50cy5sZW5ndGgpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHZhcmlhYmxlcy5sZW5ndGg7IGluZGV4KyspIHsKICAgICAgaWYgKHZhcmlhYmxlc1tpbmRleF0gIT0gYXJndW1lbnRzW2luZGV4XSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBTdWJzdGl0dXRpb24gZ2V0U3Vic3RpdHV0aW9uKENsYXNzRW50aXR5IGNscywgQ2xhc3NFbnRpdHkgb3RoZXIpIHsKICAgIC8vIExvb2sgZm9yIGEgcHJlY29tcHV0ZWQgY2hlY2suCiAgICBmb3IgKFR5cGVDaGVjayBjaGVjayBpbiBfcmVxdWlyZWRDaGVja3NbY2xzXS5jaGVja3MpIHsKICAgICAgaWYgKGNoZWNrLmNscyA9PSBvdGhlcikgewogICAgICAgIHJldHVybiBjaGVjay5zdWJzdGl0dXRpb247CiAgICAgIH0KICAgIH0KICAgIC8vIFRoZXJlIGlzIG5vIHByZWNvbXB1dGVkIGNoZWNrIGZvciB0aGlzIHBhaXIgKGJlY2F1c2UgdGhlIGNoZWNrIGlzIG5vdAogICAgLy8gZG9uZSBvbiB0eXBlIGFyZ3VtZW50cyBvbmx5LiAgQ29tcHV0ZSBhIG5ldyBzdWJzdGl0dXRpb24uCiAgICByZXR1cm4gY29tcHV0ZVN1YnN0aXR1dGlvbihjbHMsIG90aGVyKTsKICB9CgogIFN1YnN0aXR1dGlvbiBjb21wdXRlU3Vic3RpdHV0aW9uKENsYXNzRW50aXR5IGNscywgQ2xhc3NFbnRpdHkgY2hlY2ssCiAgICAgIHtib29sIGFsd2F5c0dlbmVyYXRlRnVuY3Rpb246IGZhbHNlfSkgewogICAgaWYgKGlzVHJpdmlhbFN1YnN0aXR1dGlvbihjbHMsIGNoZWNrKSkgcmV0dXJuIG51bGw7CgogICAgLy8gVW5uYW1lZCBtaXhpbiBhcHBsaWNhdGlvbiBjbGFzc2VzIGRvIG5vdCBuZWVkIHN1YnN0aXR1dGlvbnMsIGJlY2F1c2UgdGhleQogICAgLy8gYXJlIG5ldmVyIGluc3RhbnRpYXRlZCBhbmQgdGhlaXIgY2hlY2tzIGFyZSBvdmVyd3JpdHRlbiBieSB0aGUgY2xhc3MgdGhhdAogICAgLy8gdGhleSBhcmUgbWl4ZWQgaW50by4KICAgIEludGVyZmFjZVR5cGUgdHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0VGhpc1R5cGUoY2xzKTsKICAgIEludGVyZmFjZVR5cGUgdGFyZ2V0ID0gX3R5cGVzLmFzSW5zdGFuY2VPZih0eXBlLCBjaGVjayk7CiAgICBMaXN0PERhcnRUeXBlPiB0eXBlVmFyaWFibGVzID0gdHlwZS50eXBlQXJndW1lbnRzOwogICAgaWYgKF9jbG9zZWRXb3JsZC5uYXRpdmVEYXRhLmlzSnNJbnRlcm9wQ2xhc3MoY2xzKSkgewogICAgICBpbnQgdHlwZUFyZ3VtZW50cyA9IHRhcmdldC50eXBlQXJndW1lbnRzLmxlbmd0aDsKICAgICAgLy8gR2VuZXJpYyBKUy1pbnRlcm9wIGNsYXNzIG5lZWQgYW4gZXhwbGljaXQgc3Vic3RpdHV0aW9uIHRvIG1hcmsKICAgICAgLy8gdGhlIHR5cGUgYXJndW1lbnRzIGFzIGBhbnlgIHR5cGUuCiAgICAgIHJldHVybiBuZXcgU3Vic3RpdHV0aW9uLmpzSW50ZXJvcCh0eXBlQXJndW1lbnRzKTsKICAgIH0gZWxzZSBpZiAodHlwZVZhcmlhYmxlcy5pc0VtcHR5ICYmICFhbHdheXNHZW5lcmF0ZUZ1bmN0aW9uKSB7CiAgICAgIHJldHVybiBuZXcgU3Vic3RpdHV0aW9uLmxpc3QodGFyZ2V0LnR5cGVBcmd1bWVudHMpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBTdWJzdGl0dXRpb24uZnVuY3Rpb24odGFyZ2V0LnR5cGVBcmd1bWVudHMsIHR5cGVWYXJpYWJsZXMpOwogICAgfQogIH0KfQoKY2xhc3MgVHJpdmlhbFJ1bnRpbWVUeXBlc1N1YnN0aXR1dGlvbnMgZXh0ZW5kcyBSdW50aW1lVHlwZXNTdWJzdGl0dXRpb25zTWl4aW4gewogIEBvdmVycmlkZQogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CiAgQG92ZXJyaWRlCiAgVHlwZUNoZWNrcyBfcmVxdWlyZWRDaGVja3M7CgogIFRyaXZpYWxSdW50aW1lVHlwZXNTdWJzdGl0dXRpb25zKHRoaXMuX2Nsb3NlZFdvcmxkKTsKfQoKYWJzdHJhY3QgY2xhc3MgUnVudGltZVR5cGVzRW5jb2RlciB7CiAganNBc3QuRXhwcmVzc2lvbiBnZXRTaWduYXR1cmVFbmNvZGluZyhNb2R1bGFyTmFtZXIgbmFtZXIsCiAgICAgIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIsIERhcnRUeXBlIHR5cGUsIGpzQXN0LkV4cHJlc3Npb24gdGhpc18pOwoKICAvLy8gUmV0dXJucyB0aGUgSmF2YVNjcmlwdCB0ZW1wbGF0ZSB0byBkZXRlcm1pbmUgYXQgcnVudGltZSBpZiBhIHR5cGUgb2JqZWN0CiAgLy8vIGlzIGEgZnVuY3Rpb24gdHlwZS4KICBqc0FzdC5UZW1wbGF0ZSBnZXQgdGVtcGxhdGVGb3JJc0Z1bmN0aW9uVHlwZTsKCiAgLy8vIFJldHVybnMgdGhlIEphdmFTY3JpcHQgdGVtcGxhdGUgdG8gZGV0ZXJtaW5lIGF0IHJ1bnRpbWUgaWYgYSB0eXBlIG9iamVjdAogIC8vLyBpcyBhIEZ1dHVyZU9yIHR5cGUuCiAganNBc3QuVGVtcGxhdGUgZ2V0IHRlbXBsYXRlRm9ySXNGdXR1cmVPclR5cGU7CgogIC8vLyBSZXR1cm5zIHRoZSBKYXZhU2NyaXB0IHRlbXBsYXRlIHRvIGRldGVybWluZSBhdCBydW50aW1lIGlmIGEgdHlwZSBvYmplY3QKICAvLy8gaXMgdGhlIHZvaWQgdHlwZS4KICBqc0FzdC5UZW1wbGF0ZSBnZXQgdGVtcGxhdGVGb3JJc1ZvaWRUeXBlOwoKICAvLy8gUmV0dXJucyB0aGUgSmF2YVNjcmlwdCB0ZW1wbGF0ZSB0byBkZXRlcm1pbmUgYXQgcnVudGltZSBpZiBhIHR5cGUgb2JqZWN0CiAgLy8vIGlzIHRoZSBkeW5hbWljIHR5cGUuCiAganNBc3QuVGVtcGxhdGUgZ2V0IHRlbXBsYXRlRm9ySXNEeW5hbWljVHlwZTsKCiAgLy8vIFJldHVybnMgdGhlIEphdmFTY3JpcHQgdGVtcGxhdGUgdG8gZGV0ZXJtaW5lIGF0IHJ1bnRpbWUgaWYgYSB0eXBlIG9iamVjdAogIC8vLyBpcyBhIHR5cGUgYXJndW1lbnQgb2YganMtaW50ZXJvcCBjbGFzcy4KICBqc0FzdC5UZW1wbGF0ZSBnZXQgdGVtcGxhdGVGb3JJc0pzSW50ZXJvcFR5cGVBcmd1bWVudDsKCiAgLy8vIFJldHVybnMgYSBbanNBc3QuRXhwcmVzc2lvbl0gcmVwcmVzZW50aW5nIHRoZSBnaXZlbiBbdHlwZV0uIFR5cGUgdmFyaWFibGVzCiAgLy8vIGFyZSByZXBsYWNlZCBieSB0aGUgW2pzQXN0LkV4cHJlc3Npb25dIHJldHVybmVkIGJ5IFtvblZhcmlhYmxlXS4KICBqc0FzdC5FeHByZXNzaW9uIGdldFR5cGVSZXByZXNlbnRhdGlvbigKICAgICAgTW9kdWxhckVtaXR0ZXIgZW1pdHRlciwgRGFydFR5cGUgdHlwZSwgT25WYXJpYWJsZUNhbGxiYWNrIG9uVmFyaWFibGUsCiAgICAgIFtTaG91bGRFbmNvZGVUeXBlZGVmQ2FsbGJhY2sgc2hvdWxkRW5jb2RlVHlwZWRlZl0pOwoKICBqc0FzdC5FeHByZXNzaW9uIGdldEpzSW50ZXJvcFR5cGVBcmd1bWVudHMoaW50IGNvdW50KTsKCiAgLy8vIEZpeGVkIHN0cmluZ3MgdXNlZCBmb3IgcnVudGltZSB0eXBlcyBlbmNvZGluZy4KICBSdW50aW1lVHlwZVRhZ3MgZ2V0IHJ0aVRhZ3M7Cn0KCmNsYXNzIF9SdW50aW1lVHlwZXNDaGVja3MgaW1wbGVtZW50cyBSdW50aW1lVHlwZXNDaGVja3MgewogIGZpbmFsIFJ1bnRpbWVUeXBlc1N1YnN0aXR1dGlvbnMgX3N1YnN0aXR1dGlvbnM7CiAgQG92ZXJyaWRlCiAgZmluYWwgVHlwZUNoZWNrcyByZXF1aXJlZENoZWNrczsKICBmaW5hbCBJdGVyYWJsZTxDbGFzc0VudGl0eT4gX3R5cGVMaXRlcmFsczsKICBmaW5hbCBJdGVyYWJsZTxDbGFzc0VudGl0eT4gX3R5cGVBcmd1bWVudHM7CgogIF9SdW50aW1lVHlwZXNDaGVja3ModGhpcy5fc3Vic3RpdHV0aW9ucywgdGhpcy5yZXF1aXJlZENoZWNrcywKICAgICAgdGhpcy5fdHlwZUxpdGVyYWxzLCB0aGlzLl90eXBlQXJndW1lbnRzKTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCByZXF1aXJlZENsYXNzZXMgewogICAgU2V0PENsYXNzRW50aXR5PiByZXF1aXJlZCA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CiAgICByZXF1aXJlZC5hZGRBbGwoX3R5cGVBcmd1bWVudHMpOwogICAgcmVxdWlyZWQuYWRkQWxsKF90eXBlTGl0ZXJhbHMpOwogICAgcmVxdWlyZWQKICAgICAgICAuYWRkQWxsKF9zdWJzdGl0dXRpb25zLmdldENsYXNzZXNVc2VkSW5TdWJzdGl0dXRpb25zKHJlcXVpcmVkQ2hlY2tzKSk7CiAgICByZXR1cm4gcmVxdWlyZWQ7CiAgfQp9CgpjbGFzcyBSdW50aW1lVHlwZXNJbXBsCiAgICB3aXRoIFJ1bnRpbWVUeXBlc1N1YnN0aXR1dGlvbnNNaXhpbgogICAgaW1wbGVtZW50cyBSdW50aW1lVHlwZXNDaGVja3NCdWlsZGVyIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwoKICAvLyBUaGUgc2V0IG9mIHR5cGUgYXJndW1lbnRzIHRlc3RlZCBhZ2FpbnN0IHR5cGUgdmFyaWFibGUgYm91bmRzLgogIGZpbmFsIFNldDxEYXJ0VHlwZT4gY2hlY2tlZFR5cGVBcmd1bWVudHMgPSBuZXcgU2V0PERhcnRUeXBlPigpOwogIC8vIFRoZSBzZXQgb2YgdGVzdGVkIHR5cGUgdmFyaWFibGUgYm91bmRzLgogIGZpbmFsIFNldDxEYXJ0VHlwZT4gY2hlY2tlZEJvdW5kcyA9IG5ldyBTZXQ8RGFydFR5cGU+KCk7CgogIFR5cGVDaGVja3MgY2FjaGVkUmVxdWlyZWRDaGVja3M7CgogIEBvdmVycmlkZQogIGJvb2wgcnRpQ2hlY2tzQnVpbGRlckNsb3NlZCA9IGZhbHNlOwoKICBSdW50aW1lVHlwZXNJbXBsKHRoaXMuX2Nsb3NlZFdvcmxkKTsKCiAgSkNvbW1vbkVsZW1lbnRzIGdldCBfY29tbW9uRWxlbWVudHMgPT4gX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzOwogIEBvdmVycmlkZQogIEpFbGVtZW50RW52aXJvbm1lbnQgZ2V0IF9lbGVtZW50RW52aXJvbm1lbnQgPT4KICAgICAgX2Nsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudDsKICBAb3ZlcnJpZGUKICBSdW50aW1lVHlwZXNOZWVkIGdldCBfcnRpTmVlZCA9PiBfY2xvc2VkV29ybGQucnRpTmVlZDsKCiAgQG92ZXJyaWRlCiAgVHlwZUNoZWNrcyBnZXQgX3JlcXVpcmVkQ2hlY2tzID0+IGNhY2hlZFJlcXVpcmVkQ2hlY2tzOwoKICBNYXA8Q2xhc3NFbnRpdHksIENsYXNzVXNlPiBjbGFzc1VzZU1hcEZvclRlc3Rpbmc7CgogIGZpbmFsIFNldDxHZW5lcmljSW5zdGFudGlhdGlvbj4gX2dlbmVyaWNJbnN0YW50aWF0aW9ucyA9CiAgICAgIG5ldyBTZXQ8R2VuZXJpY0luc3RhbnRpYXRpb24+KCk7CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJUeXBlVmFyaWFibGVCb3VuZHNTdWJ0eXBlQ2hlY2soCiAgICAgIERhcnRUeXBlIHR5cGVBcmd1bWVudCwgRGFydFR5cGUgYm91bmQpIHsKICAgIGNoZWNrZWRUeXBlQXJndW1lbnRzLmFkZCh0eXBlQXJndW1lbnQpOwogICAgY2hlY2tlZEJvdW5kcy5hZGQoYm91bmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckdlbmVyaWNJbnN0YW50aWF0aW9uKEdlbmVyaWNJbnN0YW50aWF0aW9uIGluc3RhbnRpYXRpb24pIHsKICAgIF9nZW5lcmljSW5zdGFudGlhdGlvbnMuYWRkKGluc3RhbnRpYXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgUnVudGltZVR5cGVzQ2hlY2tzIGNvbXB1dGVSZXF1aXJlZENoZWNrcygKICAgICAgQ29kZWdlbldvcmxkIGNvZGVnZW5Xb3JsZCwgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMpIHsKICAgIFR5cGVWYXJpYWJsZVRlc3RzIHR5cGVWYXJpYWJsZVRlc3RzID0gbmV3IFR5cGVWYXJpYWJsZVRlc3RzKAogICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLAogICAgICAgIF90eXBlcywKICAgICAgICBjb2RlZ2VuV29ybGQsCiAgICAgICAgX2dlbmVyaWNJbnN0YW50aWF0aW9ucywKICAgICAgICBmb3JSdGlOZWVkczogZmFsc2UpOwogICAgU2V0PERhcnRUeXBlPiBleHBsaWNpdElzQ2hlY2tzID0gdHlwZVZhcmlhYmxlVGVzdHMuZXhwbGljaXRJc0NoZWNrczsKICAgIFNldDxEYXJ0VHlwZT4gaW1wbGljaXRJc0NoZWNrcyA9IHR5cGVWYXJpYWJsZVRlc3RzLmltcGxpY2l0SXNDaGVja3M7CgogICAgTWFwPENsYXNzRW50aXR5LCBDbGFzc1VzZT4gY2xhc3NVc2VNYXAgPSA8Q2xhc3NFbnRpdHksIENsYXNzVXNlPnt9OwogICAgaWYgKHJldGFpbkRhdGFGb3JUZXN0aW5nKSB7CiAgICAgIGNsYXNzVXNlTWFwRm9yVGVzdGluZyA9IGNsYXNzVXNlTWFwOwogICAgfQoKICAgIFNldDxGdW5jdGlvblR5cGU+IGNoZWNrZWRGdW5jdGlvblR5cGVzID0gbmV3IFNldDxGdW5jdGlvblR5cGU+KCk7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IHR5cGVMaXRlcmFscyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IHR5cGVBcmd1bWVudHMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICAgIC8vIFRoZSBbbGl2ZVR5cGVWaXNpdG9yXSBpcyB1c2VkIHRvIHJlZ2lzdGVyIGNsYXNzIHVzZSBpbiB0aGUgdHlwZSBvZgogICAgLy8gaW5zdGFudGlhdGVkIG9iamVjdHMgbGlrZSBgbmV3IFRgIGFuZCB0aGUgZnVuY3Rpb24gdHlwZXMgb2YKICAgIC8vIHRlYXIgb2ZmcyBhbmQgY2xvc3VyZXMuCiAgICAvLwogICAgLy8gQSB0eXBlIGZvdW5kIGluIGEgY292YXJpYW50IHBvc2l0aW9uIG9mIHN1Y2ggdHlwZXMgaXMgY29uc2lkZXJlZCBsaXZlCiAgICAvLyB3aGVyZWFzIGEgdHlwZSBmb3VuZCBpbiBhIGNvbnRyYXZhcmlhbnQgcG9zaXRpb24gb2Ygc3VjaCB0eXBlcyBpcwogICAgLy8gY29uc2lkZXJlZCB0ZXN0ZWQuCiAgICAvLwogICAgLy8gRm9yIGluc3RhbmNlCiAgICAvLwogICAgLy8gICAgbmV3IEE8QiBGdW5jdGlvbihDKT4oKTsKICAgIC8vCiAgICAvLyBtYWtlcyBBIGFuZCBCIGxpdmUgYnV0IEMgdGVzdGVkLgogICAgVHlwZVZpc2l0b3IgbGl2ZVR5cGVWaXNpdG9yID0KICAgICAgICBuZXcgVHlwZVZpc2l0b3Iob25DbGFzczogKENsYXNzRW50aXR5IGNscywge1R5cGVWaXNpdG9yU3RhdGUgc3RhdGV9KSB7CiAgICAgIENsYXNzVXNlIGNsYXNzVXNlID0gY2xhc3NVc2VNYXAucHV0SWZBYnNlbnQoY2xzLCAoKSA9PiBuZXcgQ2xhc3NVc2UoKSk7CiAgICAgIHN3aXRjaCAoc3RhdGUpIHsKICAgICAgICBjYXNlIFR5cGVWaXNpdG9yU3RhdGUuY292YXJpYW50VHlwZUFyZ3VtZW50OgogICAgICAgICAgY2xhc3NVc2UudHlwZUFyZ3VtZW50ID0gdHJ1ZTsKICAgICAgICAgIHR5cGVBcmd1bWVudHMuYWRkKGNscyk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFR5cGVWaXNpdG9yU3RhdGUuY29udHJhdmFyaWFudFR5cGVBcmd1bWVudDoKICAgICAgICAgIGNsYXNzVXNlLnR5cGVBcmd1bWVudCA9IHRydWU7CiAgICAgICAgICBjbGFzc1VzZS5jaGVja2VkVHlwZUFyZ3VtZW50ID0gdHJ1ZTsKICAgICAgICAgIHR5cGVBcmd1bWVudHMuYWRkKGNscyk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFR5cGVWaXNpdG9yU3RhdGUudHlwZUxpdGVyYWw6CiAgICAgICAgICBjbGFzc1VzZS50eXBlTGl0ZXJhbCA9IHRydWU7CiAgICAgICAgICB0eXBlTGl0ZXJhbHMuYWRkKGNscyk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFR5cGVWaXNpdG9yU3RhdGUuZGlyZWN0OgogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0pOwoKICAgIC8vIFRoZSBbdGVzdGVkVHlwZVZpc2l0b3JdIGlzIHVzZWQgdG8gcmVnaXN0ZXIgY2xhc3MgdXNlIGluIHR5cGUgdGVzdHMgbGlrZQogICAgLy8gYG8gaXMgVGAgYW5kIGBvIGFzIFRgIChib3RoIGltcGxpY2l0IGFuZCBleHBsaWNpdCkuCiAgICAvLwogICAgLy8gQSB0eXBlIGZvdW5kIGluIGEgY292YXJpYW50IHBvc2l0aW9uIG9mIHN1Y2ggdHlwZXMgaXMgY29uc2lkZXJlZCB0ZXN0ZWQKICAgIC8vIHdoZXJlYXMgYSB0eXBlIGZvdW5kIGluIGEgY29udHJhdmFyaWFudCBwb3NpdGlvbiBvZiBzdWNoIHR5cGVzIGlzCiAgICAvLyBjb25zaWRlcmVkIGxpdmUuCiAgICAvLwogICAgLy8gRm9yIGluc3RhbmNlCiAgICAvLwogICAgLy8gICAgbyBpcyBBPEIgRnVuY3Rpb24oQyk+OwogICAgLy8KICAgIC8vIG1ha2VzIEEgYW5kIEIgdGVzdGVkIGJ1dCBDIGxpdmUuCiAgICBUeXBlVmlzaXRvciB0ZXN0ZWRUeXBlVmlzaXRvciA9CiAgICAgICAgbmV3IFR5cGVWaXNpdG9yKG9uQ2xhc3M6IChDbGFzc0VudGl0eSBjbHMsIHtUeXBlVmlzaXRvclN0YXRlIHN0YXRlfSkgewogICAgICBDbGFzc1VzZSBjbGFzc1VzZSA9IGNsYXNzVXNlTWFwLnB1dElmQWJzZW50KGNscywgKCkgPT4gbmV3IENsYXNzVXNlKCkpOwogICAgICBzd2l0Y2ggKHN0YXRlKSB7CiAgICAgICAgY2FzZSBUeXBlVmlzaXRvclN0YXRlLmNvdmFyaWFudFR5cGVBcmd1bWVudDoKICAgICAgICAgIGNsYXNzVXNlLnR5cGVBcmd1bWVudCA9IHRydWU7CiAgICAgICAgICBjbGFzc1VzZS5jaGVja2VkVHlwZUFyZ3VtZW50ID0gdHJ1ZTsKICAgICAgICAgIHR5cGVBcmd1bWVudHMuYWRkKGNscyk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFR5cGVWaXNpdG9yU3RhdGUuY29udHJhdmFyaWFudFR5cGVBcmd1bWVudDoKICAgICAgICAgIGNsYXNzVXNlLnR5cGVBcmd1bWVudCA9IHRydWU7CiAgICAgICAgICB0eXBlQXJndW1lbnRzLmFkZChjbHMpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBUeXBlVmlzaXRvclN0YXRlLnR5cGVMaXRlcmFsOgogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBUeXBlVmlzaXRvclN0YXRlLmRpcmVjdDoKICAgICAgICAgIGNsYXNzVXNlLmNoZWNrZWRJbnN0YW5jZSA9IHRydWU7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfSk7CgogICAgY29kZWdlbldvcmxkLmluc3RhbnRpYXRlZENsYXNzZXMuZm9yRWFjaCgoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICAgIENsYXNzVXNlIGNsYXNzVXNlID0gY2xhc3NVc2VNYXAucHV0SWZBYnNlbnQoY2xzLCAoKSA9PiBuZXcgQ2xhc3NVc2UoKSk7CiAgICAgIGNsYXNzVXNlLmluc3RhbmNlID0gdHJ1ZTsKICAgIH0pOwoKICAgIFNldDxDbGFzc0VudGl0eT4gdmlzaXRlZFN1cGVyQ2xhc3NlcyA9IHt9OwogICAgY29kZWdlbldvcmxkLmluc3RhbnRpYXRlZFR5cGVzLmZvckVhY2goKEludGVyZmFjZVR5cGUgdHlwZSkgewogICAgICBsaXZlVHlwZVZpc2l0b3IudmlzaXRUeXBlKHR5cGUsIFR5cGVWaXNpdG9yU3RhdGUuZGlyZWN0KTsKICAgICAgQ2xhc3NVc2UgY2xhc3NVc2UgPQogICAgICAgICAgY2xhc3NVc2VNYXAucHV0SWZBYnNlbnQodHlwZS5lbGVtZW50LCAoKSA9PiBuZXcgQ2xhc3NVc2UoKSk7CiAgICAgIGNsYXNzVXNlLmRpcmVjdEluc3RhbmNlID0gdHJ1ZTsKICAgICAgRnVuY3Rpb25UeXBlIGNhbGxUeXBlID0gX3R5cGVzLmdldENhbGxUeXBlKHR5cGUpOwogICAgICBpZiAoY2FsbFR5cGUgIT0gbnVsbCkgewogICAgICAgIGxpdmVUeXBlVmlzaXRvci52aXNpdFR5cGUoY2FsbFR5cGUsIFR5cGVWaXNpdG9yU3RhdGUuZGlyZWN0KTsKICAgICAgfQoKICAgICAgLy8gU3VwZXJjbGFzcyBtaWdodCBtYWtlIGNsYXNzZXMgbGl2ZSBhcyB0eXBlIGFyZ3VtZW50cy4gRm9yIGluc3RhbmNlCiAgICAgIC8vCiAgICAgIC8vICAgIGNsYXNzIEEge30KICAgICAgLy8gICAgY2xhc3MgQjxUPiB7fQogICAgICAvLyAgICBjbGFzcyBDIGltcGxlbWVudHMgQjxBPiB7fQogICAgICAvLyAgICBtYWluKCkgPT4gbmV3IEMoKTsKICAgICAgLy8KICAgICAgLy8gSGVyZSBgQWAgaXMgbGl2ZSBhcyBhIHR5cGUgYXJndW1lbnQgdGhyb3VnaCB0aGUgbGl2ZW5lc3Mgb2YgYENgLgogICAgICBmb3IgKEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlCiAgICAgICAgICBpbiBfY2xvc2VkV29ybGQuZGFydFR5cGVzLmdldFN1cGVydHlwZXModHlwZS5lbGVtZW50KSkgewogICAgICAgIGlmIChzdXBlcnR5cGUudHlwZUFyZ3VtZW50cy5pc0VtcHR5ICYmCiAgICAgICAgICAgIHZpc2l0ZWRTdXBlckNsYXNzZXMuY29udGFpbnMoc3VwZXJ0eXBlLmVsZW1lbnQpKSB7CiAgICAgICAgICAvLyBJZiBbc3VwZXJjbGFzc10gaXMgbm90IGdlbmVyaWMgdGhlbiBhIHNlY29uZCB2aXNpdCBjYW5ub3QgYWRkIG1vcmUKICAgICAgICAgIC8vIGluZm9ybWF0aW9uIHRoYXQgdGhlIGZpcnN0LiBJbiB0aGUgZXhhbXBsZSBhYm92ZSwgdmlzaXRpbmcgYENgCiAgICAgICAgICAvLyB0d2ljZSBjYW4gb25seSByZXN1bHQgaW4gYSBzZWNvbmQgcmVnaXN0cmF0aW9uIG9mIGBBYCBhcyBsaXZlCiAgICAgICAgICAvLyB0eXBlIGFyZ3VtZW50LgogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHZpc2l0ZWRTdXBlckNsYXNzZXMuYWRkKHN1cGVydHlwZS5lbGVtZW50KTsKICAgICAgICBsaXZlVHlwZVZpc2l0b3IudmlzaXRUeXBlKHN1cGVydHlwZSwgVHlwZVZpc2l0b3JTdGF0ZS5kaXJlY3QpOwogICAgICB9CiAgICB9KTsKCiAgICBmb3IgKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQgaW4gY29kZWdlbldvcmxkLmNsb3N1cml6ZWRTdGF0aWNzKSB7CiAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZShlbGVtZW50KTsKICAgICAgbGl2ZVR5cGVWaXNpdG9yLnZpc2l0VHlwZShmdW5jdGlvblR5cGUsIFR5cGVWaXNpdG9yU3RhdGUuZGlyZWN0KTsKICAgIH0KCiAgICBmb3IgKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQgaW4gY29kZWdlbldvcmxkLmNsb3N1cml6ZWRNZW1iZXJzKSB7CiAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZShlbGVtZW50KTsKICAgICAgbGl2ZVR5cGVWaXNpdG9yLnZpc2l0VHlwZShmdW5jdGlvblR5cGUsIFR5cGVWaXNpdG9yU3RhdGUuZGlyZWN0KTsKICAgIH0KCiAgICB2b2lkIHByb2Nlc3NNZXRob2RUeXBlQXJndW1lbnRzKF8sIFNldDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgICBmb3IgKERhcnRUeXBlIHR5cGVBcmd1bWVudCBpbiB0eXBlQXJndW1lbnRzKSB7CiAgICAgICAgbGl2ZVR5cGVWaXNpdG9yLnZpc2l0KAogICAgICAgICAgICB0eXBlQXJndW1lbnQsIFR5cGVWaXNpdG9yU3RhdGUuY292YXJpYW50VHlwZUFyZ3VtZW50KTsKICAgICAgfQogICAgfQoKICAgIGNvZGVnZW5Xb3JsZC5mb3JFYWNoU3RhdGljVHlwZUFyZ3VtZW50KHByb2Nlc3NNZXRob2RUeXBlQXJndW1lbnRzKTsKICAgIGNvZGVnZW5Xb3JsZC5mb3JFYWNoRHluYW1pY1R5cGVBcmd1bWVudChwcm9jZXNzTWV0aG9kVHlwZUFyZ3VtZW50cyk7CiAgICBjb2RlZ2VuV29ybGQubGl2ZVR5cGVBcmd1bWVudHMuZm9yRWFjaCgoRGFydFR5cGUgdHlwZSkgewogICAgICBsaXZlVHlwZVZpc2l0b3IudmlzaXRUeXBlKHR5cGUsIFR5cGVWaXNpdG9yU3RhdGUuY292YXJpYW50VHlwZUFyZ3VtZW50KTsKICAgIH0pOwogICAgY29kZWdlbldvcmxkLmNvbnN0VHlwZUxpdGVyYWxzLmZvckVhY2goKERhcnRUeXBlIHR5cGUpIHsKICAgICAgbGl2ZVR5cGVWaXNpdG9yLnZpc2l0VHlwZSh0eXBlLCBUeXBlVmlzaXRvclN0YXRlLnR5cGVMaXRlcmFsKTsKICAgIH0pOwoKICAgIGJvb2wgaXNGdW5jdGlvbkNoZWNrZWQgPSBmYWxzZTsKCiAgICB2b2lkIHByb2Nlc3NDaGVja2VkVHlwZShEYXJ0VHlwZSB0KSB7CiAgICAgIGlmICh0IGlzIEZ1bmN0aW9uVHlwZSkgewogICAgICAgIGNoZWNrZWRGdW5jdGlvblR5cGVzLmFkZCh0KTsKICAgICAgfSBlbHNlIGlmICh0IGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgICBpc0Z1bmN0aW9uQ2hlY2tlZCA9CiAgICAgICAgICAgIGlzRnVuY3Rpb25DaGVja2VkIHx8IHQuZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuZnVuY3Rpb25DbGFzczsKICAgICAgfQogICAgICB0ZXN0ZWRUeXBlVmlzaXRvci52aXNpdFR5cGUodCwgVHlwZVZpc2l0b3JTdGF0ZS5kaXJlY3QpOwogICAgfQoKICAgIGV4cGxpY2l0SXNDaGVja3MuZm9yRWFjaChwcm9jZXNzQ2hlY2tlZFR5cGUpOwogICAgaW1wbGljaXRJc0NoZWNrcy5mb3JFYWNoKHByb2Nlc3NDaGVja2VkVHlwZSk7CgogICAgLy8gQSBjbG9zdXJlIGNsYXNzIGltcGxlbWVudHMgdGhlIGZ1bmN0aW9uIHR5cGUgb2YgaXRzIGBjYWxsYAogICAgLy8gbWV0aG9kIGFuZCBuZWVkcyBhIHNpZ25hdHVyZSBmdW5jdGlvbiBmb3IgdGVzdGluZyBpdHMgZnVuY3Rpb24gdHlwZQogICAgLy8gYWdhaW5zdCB0eXBlZGVmcyBhbmQgZnVuY3Rpb24gdHlwZXMgdGhhdCBhcmUgdXNlZCBpbiBpcy1jaGVja3MuIFNpbmNlCiAgICAvLyBjbG9zdXJlcyBoYXZlIGEgc2lnbmF0dXJlIG1ldGhvZCBpZmYgdGhleSBuZWVkIGl0IGFuZCBzaG91bGQgaGF2ZSBhCiAgICAvLyBmdW5jdGlvbiB0eXBlIGlmZiB0aGV5IGhhdmUgYSBzaWduYXR1cmUsIHdlIHByb2Nlc3MgYWxsIGNsYXNzZXMuCiAgICB2b2lkIHByb2Nlc3NDbGFzcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgICAgQ2xhc3NGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlID0KICAgICAgICAgIF9jb21wdXRlRnVuY3Rpb25UeXBlKF9lbGVtZW50RW52aXJvbm1lbnQsIGNscyk7CiAgICAgIGlmIChmdW5jdGlvblR5cGUgIT0gbnVsbCkgewogICAgICAgIENsYXNzVXNlIGNsYXNzVXNlID0gY2xhc3NVc2VNYXAucHV0SWZBYnNlbnQoY2xzLCAoKSA9PiBuZXcgQ2xhc3NVc2UoKSk7CiAgICAgICAgY2xhc3NVc2UuZnVuY3Rpb25UeXBlID0gZnVuY3Rpb25UeXBlOwogICAgICB9CiAgICB9CgogICAgLy8gQ29sbGVjdCBjbGFzc2VzIHRoYXQgYXJlICdsaXZlJyBlaXRoZXIgdGhyb3VnaCBpbnN0YW50aWF0aW9uIG9yIHVzZSBpbgogICAgLy8gdHlwZSBhcmd1bWVudHMuCiAgICBMaXN0PENsYXNzRW50aXR5PiBsaXZlQ2xhc3NlcyA9IDxDbGFzc0VudGl0eT5bXTsKICAgIGNsYXNzVXNlTWFwLmZvckVhY2goKENsYXNzRW50aXR5IGNscywgQ2xhc3NVc2UgY2xhc3NVc2UpIHsKICAgICAgaWYgKGNsYXNzVXNlLmlzTGl2ZSkgewogICAgICAgIGxpdmVDbGFzc2VzLmFkZChjbHMpOwogICAgICB9CiAgICB9KTsKICAgIGxpdmVDbGFzc2VzLmZvckVhY2gocHJvY2Vzc0NsYXNzKTsKCiAgICBjb2RlZ2VuV29ybGQuZm9yRWFjaEdlbmVyaWNNZXRob2QoKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCkgewogICAgICBpZiAoX2Nsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YQogICAgICAgICAgLmdldFBhcmFtZXRlckNoZWNrUG9saWN5KG1ldGhvZCkKICAgICAgICAgIC5pc0VtaXR0ZWQpIHsKICAgICAgICBpZiAoX3J0aU5lZWQubWV0aG9kTmVlZHNUeXBlQXJndW1lbnRzKG1ldGhvZCkpIHsKICAgICAgICAgIGZvciAoVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGUKICAgICAgICAgICAgICBpbiBfZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZVZhcmlhYmxlcyhtZXRob2QpKSB7CiAgICAgICAgICAgIERhcnRUeXBlIGJvdW5kID0KICAgICAgICAgICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0VHlwZVZhcmlhYmxlQm91bmQodHlwZVZhcmlhYmxlLmVsZW1lbnQpOwogICAgICAgICAgICBwcm9jZXNzQ2hlY2tlZFR5cGUoYm91bmQpOwogICAgICAgICAgICBsaXZlVHlwZVZpc2l0b3IudmlzaXQoCiAgICAgICAgICAgICAgICBib3VuZCwgVHlwZVZpc2l0b3JTdGF0ZS5jb3ZhcmlhbnRUeXBlQXJndW1lbnQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSk7CgogICAgY2FjaGVkUmVxdWlyZWRDaGVja3MgPSBfY29tcHV0ZUNoZWNrcyhjbGFzc1VzZU1hcCk7CiAgICBydGlDaGVja3NCdWlsZGVyQ2xvc2VkID0gdHJ1ZTsKICAgIHJldHVybiBuZXcgX1J1bnRpbWVUeXBlc0NoZWNrcygKICAgICAgICB0aGlzLCBjYWNoZWRSZXF1aXJlZENoZWNrcywgdHlwZUFyZ3VtZW50cywgdHlwZUxpdGVyYWxzKTsKICB9Cn0KCi8vLyBDb21wdXRlcyB0aGUgZnVuY3Rpb24gdHlwZSBvZiBbY2xzXSwgaWYgYW55LgovLy8KLy8vIEluIERhcnQgMSwgYW55IGNsYXNzIHdpdGggYSBgY2FsbGAgbWV0aG9kIGhhcyBhIGZ1bmN0aW9uIHR5cGUsIGluIERhcnQgMgovLy8gb25seSBjbG9zdXJlIGNsYXNzZXMgaGF2ZSBhIGZ1bmN0aW9uIHR5cGUuCkNsYXNzRnVuY3Rpb25UeXBlIF9jb21wdXRlRnVuY3Rpb25UeXBlKAogICAgRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCwgQ2xhc3NFbnRpdHkgY2xzKSB7CiAgRnVuY3Rpb25FbnRpdHkgc2lnbmF0dXJlRnVuY3Rpb247CiAgaWYgKGNscy5pc0Nsb3N1cmUpIHsKICAgIC8vIFVzZSBzaWduYXR1cmUgZnVuY3Rpb24gaWYgYXZhaWxhYmxlLgogICAgc2lnbmF0dXJlRnVuY3Rpb24gPQogICAgICAgIGVsZW1lbnRFbnZpcm9ubWVudC5sb29rdXBMb2NhbENsYXNzTWVtYmVyKGNscywgSWRlbnRpZmllcnMuc2lnbmF0dXJlKTsKICAgIGlmIChzaWduYXR1cmVGdW5jdGlvbiA9PSBudWxsKSB7CiAgICAgIC8vIEluIERhcnQgMiwgYSBjbG9zdXJlIG9ubHkgbmVlZHMgaXRzIGZ1bmN0aW9uIHR5cGUgaWYgaXQgaGFzIGEKICAgICAgLy8gc2lnbmF0dXJlIGZ1bmN0aW9uLgogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9IGVsc2UgewogICAgLy8gT25seSBjbG9zdXJlcyBoYXZlIGZ1bmN0aW9uIHR5cGUgaW4gRGFydCAyLgogICAgcmV0dXJuIG51bGw7CiAgfQogIE1lbWJlckVudGl0eSBjYWxsID0KICAgICAgZWxlbWVudEVudmlyb25tZW50Lmxvb2t1cExvY2FsQ2xhc3NNZW1iZXIoY2xzLCBJZGVudGlmaWVycy5jYWxsKTsKICBpZiAoY2FsbCAhPSBudWxsICYmIGNhbGwuaXNGdW5jdGlvbikgewogICAgRnVuY3Rpb25FbnRpdHkgY2FsbEZ1bmN0aW9uID0gY2FsbDsKICAgIEZ1bmN0aW9uVHlwZSBjYWxsVHlwZSA9IGVsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvblR5cGUoY2FsbEZ1bmN0aW9uKTsKICAgIHJldHVybiBuZXcgQ2xhc3NGdW5jdGlvblR5cGUoY2FsbEZ1bmN0aW9uLCBjYWxsVHlwZSwgc2lnbmF0dXJlRnVuY3Rpb24pOwogIH0KICByZXR1cm4gbnVsbDsKfQoKY2xhc3MgUnVudGltZVR5cGVzRW5jb2RlckltcGwgaW1wbGVtZW50cyBSdW50aW1lVHlwZXNFbmNvZGVyIHsKICBmaW5hbCBFbGVtZW50RW52aXJvbm1lbnQgX2VsZW1lbnRFbnZpcm9ubWVudDsKICBmaW5hbCBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50czsKICBmaW5hbCBUeXBlUmVwcmVzZW50YXRpb25HZW5lcmF0b3IgX3JlcHJlc2VudGF0aW9uR2VuZXJhdG9yOwogIGZpbmFsIFJ1bnRpbWVUeXBlc05lZWQgX3J0aU5lZWQ7CiAgQG92ZXJyaWRlCiAgZmluYWwgUnVudGltZVR5cGVUYWdzIHJ0aVRhZ3M7CgogIFJ1bnRpbWVUeXBlc0VuY29kZXJJbXBsKHRoaXMucnRpVGFncywgTmF0aXZlQmFzaWNEYXRhIG5hdGl2ZURhdGEsCiAgICAgIHRoaXMuX2VsZW1lbnRFbnZpcm9ubWVudCwgdGhpcy5jb21tb25FbGVtZW50cywgdGhpcy5fcnRpTmVlZCkKICAgICAgOiBfcmVwcmVzZW50YXRpb25HZW5lcmF0b3IgPQogICAgICAgICAgICBuZXcgVHlwZVJlcHJlc2VudGF0aW9uR2VuZXJhdG9yKHJ0aVRhZ3MsIG5hdGl2ZURhdGEpOwoKICAvLy8gUmV0dXJucyB0aGUgSmF2YVNjcmlwdCB0ZW1wbGF0ZSB0byBkZXRlcm1pbmUgYXQgcnVudGltZSBpZiBhIHR5cGUgb2JqZWN0CiAgLy8vIGlzIGEgZnVuY3Rpb24gdHlwZS4KICBAb3ZlcnJpZGUKICBqc0FzdC5UZW1wbGF0ZSBnZXQgdGVtcGxhdGVGb3JJc0Z1bmN0aW9uVHlwZSB7CiAgICByZXR1cm4gX3JlcHJlc2VudGF0aW9uR2VuZXJhdG9yLnRlbXBsYXRlRm9ySXNGdW5jdGlvblR5cGU7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgSmF2YVNjcmlwdCB0ZW1wbGF0ZSB0byBkZXRlcm1pbmUgYXQgcnVudGltZSBpZiBhIHR5cGUgb2JqZWN0CiAgLy8vIGlzIGEgRnV0dXJlT3IgdHlwZS4KICBAb3ZlcnJpZGUKICBqc0FzdC5UZW1wbGF0ZSBnZXQgdGVtcGxhdGVGb3JJc0Z1dHVyZU9yVHlwZSB7CiAgICByZXR1cm4gX3JlcHJlc2VudGF0aW9uR2VuZXJhdG9yLnRlbXBsYXRlRm9ySXNGdXR1cmVPclR5cGU7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgSmF2YVNjcmlwdCB0ZW1wbGF0ZSB0byBkZXRlcm1pbmUgYXQgcnVudGltZSBpZiBhIHR5cGUgb2JqZWN0CiAgLy8vIGlzIHRoZSB2b2lkIHR5cGUuCiAgQG92ZXJyaWRlCiAganNBc3QuVGVtcGxhdGUgZ2V0IHRlbXBsYXRlRm9ySXNWb2lkVHlwZSB7CiAgICByZXR1cm4gX3JlcHJlc2VudGF0aW9uR2VuZXJhdG9yLnRlbXBsYXRlRm9ySXNWb2lkVHlwZTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBKYXZhU2NyaXB0IHRlbXBsYXRlIHRvIGRldGVybWluZSBhdCBydW50aW1lIGlmIGEgdHlwZSBvYmplY3QKICAvLy8gaXMgdGhlIGR5bmFtaWMgdHlwZS4KICBAb3ZlcnJpZGUKICBqc0FzdC5UZW1wbGF0ZSBnZXQgdGVtcGxhdGVGb3JJc0R5bmFtaWNUeXBlIHsKICAgIHJldHVybiBfcmVwcmVzZW50YXRpb25HZW5lcmF0b3IudGVtcGxhdGVGb3JJc0R5bmFtaWNUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuVGVtcGxhdGUgZ2V0IHRlbXBsYXRlRm9ySXNKc0ludGVyb3BUeXBlQXJndW1lbnQgewogICAgcmV0dXJuIF9yZXByZXNlbnRhdGlvbkdlbmVyYXRvci50ZW1wbGF0ZUZvcklzSnNJbnRlcm9wVHlwZUFyZ3VtZW50OwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiBnZXRUeXBlUmVwcmVzZW50YXRpb24oCiAgICAgIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIsIERhcnRUeXBlIHR5cGUsIE9uVmFyaWFibGVDYWxsYmFjayBvblZhcmlhYmxlLAogICAgICBbU2hvdWxkRW5jb2RlVHlwZWRlZkNhbGxiYWNrIHNob3VsZEVuY29kZVR5cGVkZWZdKSB7CiAgICByZXR1cm4gX3JlcHJlc2VudGF0aW9uR2VuZXJhdG9yLmdldFR5cGVSZXByZXNlbnRhdGlvbigKICAgICAgICBlbWl0dGVyLCB0eXBlLCBvblZhcmlhYmxlLCBzaG91bGRFbmNvZGVUeXBlZGVmKTsKICB9CgogIFN0cmluZyBnZXRUeXBlVmFyaWFibGVOYW1lKFR5cGVWYXJpYWJsZVR5cGUgdHlwZSkgewogICAgU3RyaW5nIG5hbWUgPSB0eXBlLmVsZW1lbnQubmFtZTsKICAgIHJldHVybiBuYW1lLnJlcGxhY2VBbGwoJyMnLCAnXycpOwogIH0KCiAganNBc3QuRXhwcmVzc2lvbiBnZXRUeXBlRW5jb2RpbmcoTW9kdWxhckVtaXR0ZXIgZW1pdHRlciwgRGFydFR5cGUgdHlwZSwKICAgICAge2Jvb2wgYWx3YXlzR2VuZXJhdGVGdW5jdGlvbjogZmFsc2V9KSB7CiAgICBDbGFzc0VudGl0eSBjb250ZXh0Q2xhc3MgPSBEYXJ0VHlwZXMuZ2V0Q2xhc3NDb250ZXh0KHR5cGUpOwogICAganNBc3QuRXhwcmVzc2lvbiBvblZhcmlhYmxlKFR5cGVWYXJpYWJsZVR5cGUgdikgewogICAgICByZXR1cm4gbmV3IGpzQXN0LlZhcmlhYmxlVXNlKGdldFR5cGVWYXJpYWJsZU5hbWUodikpOwogICAgfQoKICAgIGpzQXN0LkV4cHJlc3Npb24gZW5jb2RpbmcgPQogICAgICAgIGdldFR5cGVSZXByZXNlbnRhdGlvbihlbWl0dGVyLCB0eXBlLCBvblZhcmlhYmxlKTsKICAgIGlmIChjb250ZXh0Q2xhc3MgPT0gbnVsbCAmJiAhYWx3YXlzR2VuZXJhdGVGdW5jdGlvbikgewogICAgICByZXR1cm4gZW5jb2Rpbmc7CiAgICB9IGVsc2UgewogICAgICBMaXN0PFN0cmluZz4gcGFyYW1ldGVycyA9IGNvbnN0IDxTdHJpbmc+W107CiAgICAgIGlmIChjb250ZXh0Q2xhc3MgIT0gbnVsbCkgewogICAgICAgIHBhcmFtZXRlcnMgPSBfZWxlbWVudEVudmlyb25tZW50CiAgICAgICAgICAgIC5nZXRUaGlzVHlwZShjb250ZXh0Q2xhc3MpCiAgICAgICAgICAgIC50eXBlQXJndW1lbnRzCiAgICAgICAgICAgIC5tYXAoKERhcnRUeXBlIF90eXBlKSB7CiAgICAgICAgICBUeXBlVmFyaWFibGVUeXBlIHR5cGUgPSBfdHlwZTsKICAgICAgICAgIHJldHVybiBnZXRUeXBlVmFyaWFibGVOYW1lKHR5cGUpOwogICAgICAgIH0pLnRvTGlzdCgpOwogICAgICB9CiAgICAgIHJldHVybiBqcygnZnVuY3Rpb24oIykgeyByZXR1cm4gIyB9JywgW3BhcmFtZXRlcnMsIGVuY29kaW5nXSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIGdldFNpZ25hdHVyZUVuY29kaW5nKE1vZHVsYXJOYW1lciBuYW1lciwKICAgICAgTW9kdWxhckVtaXR0ZXIgZW1pdHRlciwgRGFydFR5cGUgdHlwZSwganNBc3QuRXhwcmVzc2lvbiB0aGlzXykgewogICAgQ2xhc3NFbnRpdHkgY29udGV4dENsYXNzID0gRGFydFR5cGVzLmdldENsYXNzQ29udGV4dCh0eXBlKTsKICAgIGpzQXN0LkV4cHJlc3Npb24gZW5jb2RpbmcgPQogICAgICAgIGdldFR5cGVFbmNvZGluZyhlbWl0dGVyLCB0eXBlLCBhbHdheXNHZW5lcmF0ZUZ1bmN0aW9uOiB0cnVlKTsKICAgIGlmIChjb250ZXh0Q2xhc3MgIT0gbnVsbCAmJgogICAgICAgIC8vIFdlIG9ubHkgZ2VuZXJhdGUgZm9sZGluZyB1c2luZyAnY29tcHV0ZVNpZ25hdHVyZScgaWYgW2NvbnRleHRDbGFzc10KICAgICAgICAvLyBoYXMgcmVpZmllZCB0eXBlIGFyZ3VtZW50cy4gVGhlICdjb21wdXRlU2lnbmF0dXJlJyBmdW5jdGlvbiBtaWdodCBub3QKICAgICAgICAvLyBiZSBlbWl0dGVkIChpZiBpdCdzIG5vdCBuZWVkZWQgZWxzZXdoZXJlKSBhbmQgdGhlIGdlbmVyYXRlZCBzaWduYXR1cmUKICAgICAgICAvLyB3aWxsIGhhdmUgYHVuZGVmaW5lZGAgYXMgaXRzIHR5cGUgdmFyaWFibGVzIGluIGFueSBjYXNlLgogICAgICAgIC8vCiAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgc3BlY2lmaWNhbGx5IGZvciAtLWxheC1ydW50aW1lLXR5cGUtdG8tc3RyaW5nIHdoaWNoCiAgICAgICAgLy8gbWF5IHJlcXVpcmUgYSBzaWduYXR1cmUgb24gYSBtZXRob2QgdGhhdCB1c2VzIGNsYXNzIHR5cGUgdmFyaWFibGVzCiAgICAgICAgLy8gd2hpbGUgYXQgdGhlIHNhbWUgdGltZSBub3QgbmVlZGluZyB0eXBlIGFyZ3VtZW50cyBvbiB0aGUgY2xhc3MuCiAgICAgICAgX3J0aU5lZWQuY2xhc3NOZWVkc1R5cGVBcmd1bWVudHMoY29udGV4dENsYXNzKSkgewogICAgICBqc0FzdC5OYW1lIGNvbnRleHROYW1lID0gbmFtZXIuY2xhc3NOYW1lKGNvbnRleHRDbGFzcyk7CiAgICAgIHJldHVybiBqcygnZnVuY3Rpb24gKCkgeyByZXR1cm4gIygjLCAjLCAjKTsgfScsIFsKICAgICAgICBlbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGNvbW1vbkVsZW1lbnRzLmNvbXB1dGVTaWduYXR1cmUpLAogICAgICAgIGVuY29kaW5nLAogICAgICAgIHRoaXNfLAogICAgICAgIGpzLnF1b3RlTmFtZShjb250ZXh0TmFtZSkKICAgICAgXSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZW5jb2Rpbmc7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIGdldEpzSW50ZXJvcFR5cGVBcmd1bWVudHMoaW50IGNvdW50KSB7CiAgICByZXR1cm4gX3JlcHJlc2VudGF0aW9uR2VuZXJhdG9yLmdldEpzSW50ZXJvcFR5cGVBcmd1bWVudHMoY291bnQpOwogIH0KfQoKLy8vIEZpeGVkIHN0cmluZ3MgdXNlZCBmb3IgcnVudGltZSB0eXBlcyBlbmNvZGluZy4KLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIGRpZmZlcmVudCBuYW1lcyBmb3IgbWluaWZpZWQgY29kZT8KY2xhc3MgUnVudGltZVR5cGVUYWdzIHsKICBjb25zdCBSdW50aW1lVHlwZVRhZ3MoKTsKCiAgU3RyaW5nIGdldCB0eXBlZGVmVGFnID0+IHIndHlwZWRlZic7CgogIFN0cmluZyBnZXQgZnVuY3Rpb25UeXBlVGFnID0+IHInZnVuYyc7CgogIFN0cmluZyBnZXQgZnVuY3Rpb25UeXBlVm9pZFJldHVyblRhZyA9PiByJ3YnOwoKICBTdHJpbmcgZ2V0IGZ1bmN0aW9uVHlwZVJldHVyblR5cGVUYWcgPT4gcidyZXQnOwoKICBTdHJpbmcgZ2V0IGZ1bmN0aW9uVHlwZVJlcXVpcmVkUGFyYW1ldGVyc1RhZyA9PiByJ2FyZ3MnOwoKICBTdHJpbmcgZ2V0IGZ1bmN0aW9uVHlwZU9wdGlvbmFsUGFyYW1ldGVyc1RhZyA9PiByJ29wdCc7CgogIFN0cmluZyBnZXQgZnVuY3Rpb25UeXBlTmFtZWRQYXJhbWV0ZXJzVGFnID0+IHInbmFtZWQnOwoKICBTdHJpbmcgZ2V0IGZ1bmN0aW9uVHlwZUdlbmVyaWNCb3VuZHNUYWcgPT4gcidib3VuZHMnOwoKICBTdHJpbmcgZ2V0IGZ1dHVyZU9yVGFnID0+IHInZnV0dXJlT3InOwoKICBTdHJpbmcgZ2V0IGZ1dHVyZU9yVHlwZVRhZyA9PiByJ3R5cGUnOwp9CgpjbGFzcyBUeXBlUmVwcmVzZW50YXRpb25HZW5lcmF0b3IKICAgIGltcGxlbWVudHMgRGFydFR5cGVWaXNpdG9yPGpzQXN0LkV4cHJlc3Npb24sIE1vZHVsYXJFbWl0dGVyPiB7CiAgZmluYWwgUnVudGltZVR5cGVUYWdzIF9ydGlUYWdzOwogIGZpbmFsIE5hdGl2ZUJhc2ljRGF0YSBfbmF0aXZlRGF0YTsKCiAgT25WYXJpYWJsZUNhbGxiYWNrIG9uVmFyaWFibGU7CiAgU2hvdWxkRW5jb2RlVHlwZWRlZkNhbGxiYWNrIHNob3VsZEVuY29kZVR5cGVkZWY7CiAgTWFwPFR5cGVWYXJpYWJsZVR5cGUsIGpzQXN0LkV4cHJlc3Npb24+IHR5cGVkZWZCaW5kaW5nczsKICBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMgPSA8RnVuY3Rpb25UeXBlVmFyaWFibGU+W107CgogIFR5cGVSZXByZXNlbnRhdGlvbkdlbmVyYXRvcih0aGlzLl9ydGlUYWdzLCB0aGlzLl9uYXRpdmVEYXRhKTsKCiAgLy8vIENyZWF0ZXMgYSB0eXBlIHJlcHJlc2VudGF0aW9uIGZvciBbdHlwZV0uIFtvblZhcmlhYmxlXSBpcyBjYWxsZWQgdG8KICAvLy8gcHJvdmlkZSB0aGUgdHlwZSByZXByZXNlbnRhdGlvbiBmb3IgdHlwZSB2YXJpYWJsZXMuCiAganNBc3QuRXhwcmVzc2lvbiBnZXRUeXBlUmVwcmVzZW50YXRpb24oCiAgICAgIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIsCiAgICAgIERhcnRUeXBlIHR5cGUsCiAgICAgIE9uVmFyaWFibGVDYWxsYmFjayBvblZhcmlhYmxlLAogICAgICBTaG91bGRFbmNvZGVUeXBlZGVmQ2FsbGJhY2sgZW5jb2RlVHlwZWRlZikgewogICAgYXNzZXJ0KHR5cGVkZWZCaW5kaW5ncyA9PSBudWxsKTsKICAgIHRoaXMub25WYXJpYWJsZSA9IG9uVmFyaWFibGU7CiAgICB0aGlzLnNob3VsZEVuY29kZVR5cGVkZWYgPQogICAgICAgIChlbmNvZGVUeXBlZGVmICE9IG51bGwpID8gZW5jb2RlVHlwZWRlZiA6IChUeXBlZGVmVHlwZSB0eXBlKSA9PiBmYWxzZTsKICAgIGpzQXN0LkV4cHJlc3Npb24gcmVwcmVzZW50YXRpb24gPSB2aXNpdCh0eXBlLCBlbWl0dGVyKTsKICAgIHRoaXMub25WYXJpYWJsZSA9IG51bGw7CiAgICB0aGlzLnNob3VsZEVuY29kZVR5cGVkZWYgPSBudWxsOwogICAgYXNzZXJ0KGZ1bmN0aW9uVHlwZVZhcmlhYmxlcy5pc0VtcHR5KTsKICAgIHJldHVybiByZXByZXNlbnRhdGlvbjsKICB9CgogIGpzQXN0LkV4cHJlc3Npb24gZ2V0SmF2YVNjcmlwdENsYXNzTmFtZSgKICAgICAgRW50aXR5IGVsZW1lbnQsIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIpIHsKICAgIHJldHVybiBlbWl0dGVyLnR5cGVBY2Nlc3MoZWxlbWVudCk7CiAgfQoKICBqc0FzdC5FeHByZXNzaW9uIGdldER5bmFtaWNWYWx1ZSgpID0+IGpzKCdudWxsJyk7CgogIGpzQXN0LkV4cHJlc3Npb24gZ2V0Vm9pZFZhbHVlKCkgPT4ganMoJy0xJyk7CgogIGpzQXN0LkV4cHJlc3Npb24gZ2V0SnNJbnRlcm9wVHlwZUFyZ3VtZW50VmFsdWUoKSA9PiBqcygnLTInKTsKCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdChEYXJ0VHlwZSB0eXBlLCBNb2R1bGFyRW1pdHRlciBlbWl0dGVyKSA9PgogICAgICB0eXBlLmFjY2VwdCh0aGlzLCBlbWl0dGVyKTsKCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdFR5cGVWYXJpYWJsZVR5cGUoCiAgICAgIFR5cGVWYXJpYWJsZVR5cGUgdHlwZSwgTW9kdWxhckVtaXR0ZXIgZW1pdHRlcikgewogICAgaWYgKHR5cGVkZWZCaW5kaW5ncyAhPSBudWxsKSB7CiAgICAgIGFzc2VydCh0eXBlZGVmQmluZGluZ3NbdHlwZV0gIT0gbnVsbCk7CiAgICAgIHJldHVybiB0eXBlZGVmQmluZGluZ3NbdHlwZV07CiAgICB9CiAgICByZXR1cm4gb25WYXJpYWJsZSh0eXBlKTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRGdW5jdGlvblR5cGVWYXJpYWJsZSgKICAgICAgRnVuY3Rpb25UeXBlVmFyaWFibGUgdHlwZSwgTW9kdWxhckVtaXR0ZXIgZW1pdHRlcikgewogICAgaW50IHBvc2l0aW9uID0gZnVuY3Rpb25UeXBlVmFyaWFibGVzLmluZGV4T2YodHlwZSk7CiAgICBhc3NlcnQocG9zaXRpb24gPj0gMCk7CiAgICByZXR1cm4ganMubnVtYmVyKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcy5sZW5ndGggLSBwb3NpdGlvbiAtIDEpOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdER5bmFtaWNUeXBlKER5bmFtaWNUeXBlIHR5cGUsIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIpIHsKICAgIHJldHVybiBnZXREeW5hbWljVmFsdWUoKTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRBbnlUeXBlKEFueVR5cGUgdHlwZSwgTW9kdWxhckVtaXR0ZXIgZW1pdHRlcikgPT4KICAgICAgZ2V0SnNJbnRlcm9wVHlwZUFyZ3VtZW50VmFsdWUoKTsKCiAganNBc3QuRXhwcmVzc2lvbiBnZXRKc0ludGVyb3BUeXBlQXJndW1lbnRzKGludCBjb3VudCwKICAgICAge2pzQXN0LkV4cHJlc3Npb24gbmFtZX0pIHsKICAgIExpc3Q8anNBc3QuRXhwcmVzc2lvbj4gZWxlbWVudHMgPSA8anNBc3QuRXhwcmVzc2lvbj5bXTsKICAgIGlmIChuYW1lICE9IG51bGwpIHsKICAgICAgZWxlbWVudHMuYWRkKG5hbWUpOwogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIGVsZW1lbnRzLmFkZChnZXRKc0ludGVyb3BUeXBlQXJndW1lbnRWYWx1ZSgpKTsKICAgIH0KICAgIHJldHVybiBuZXcganNBc3QuQXJyYXlJbml0aWFsaXplcihlbGVtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0SW50ZXJmYWNlVHlwZSgKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlLCBNb2R1bGFyRW1pdHRlciBlbWl0dGVyKSB7CiAgICBqc0FzdC5FeHByZXNzaW9uIG5hbWUgPSBnZXRKYXZhU2NyaXB0Q2xhc3NOYW1lKHR5cGUuZWxlbWVudCwgZW1pdHRlcik7CiAgICBqc0FzdC5FeHByZXNzaW9uIHJlc3VsdDsKICAgIGlmICh0eXBlLnR5cGVBcmd1bWVudHMuaXNFbXB0eSkgewogICAgICByZXN1bHQgPSBuYW1lOwogICAgfSBlbHNlIHsKICAgICAgLy8gVmlzaXQgYWxsIHR5cGUgYXJndW1lbnRzLiBUaGlzIGlzIGRvbmUgZXZlbiBmb3IganNpbnRlcm9wIGNsYXNzZXMgdG8KICAgICAgLy8gZW5mb3JjZSB0aGUgaW52YXJpYW50IHRoYXQgW29uVmFyaWFibGVdIGlzIGNhbGxlZCBmb3IgZWFjaCB0eXBlCiAgICAgIC8vIHZhcmlhYmxlIGluIHRoZSB0eXBlLgogICAgICByZXN1bHQgPSB2aXNpdExpc3QodHlwZS50eXBlQXJndW1lbnRzLCBlbWl0dGVyLCBoZWFkOiBuYW1lKTsKICAgICAgaWYgKF9uYXRpdmVEYXRhLmlzSnNJbnRlcm9wQ2xhc3ModHlwZS5lbGVtZW50KSkgewogICAgICAgIC8vIFJlcGxhY2UgdHlwZSBhcmd1bWVudHMgb2YgZ2VuZXJpYyBqc2ludGVyb3AgY2xhc3NlcyB3aXRoICdhbnknIHR5cGUuCiAgICAgICAgcmVzdWx0ID0KICAgICAgICAgICAgZ2V0SnNJbnRlcm9wVHlwZUFyZ3VtZW50cyh0eXBlLnR5cGVBcmd1bWVudHMubGVuZ3RoLCBuYW1lOiBuYW1lKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRMaXN0KExpc3Q8RGFydFR5cGU+IHR5cGVzLCBNb2R1bGFyRW1pdHRlciBlbWl0dGVyLAogICAgICB7anNBc3QuRXhwcmVzc2lvbiBoZWFkfSkgewogICAgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiBlbGVtZW50cyA9IDxqc0FzdC5FeHByZXNzaW9uPltdOwogICAgaWYgKGhlYWQgIT0gbnVsbCkgewogICAgICBlbGVtZW50cy5hZGQoaGVhZCk7CiAgICB9CiAgICBmb3IgKERhcnRUeXBlIHR5cGUgaW4gdHlwZXMpIHsKICAgICAganNBc3QuRXhwcmVzc2lvbiBlbGVtZW50ID0gdmlzaXQodHlwZSwgZW1pdHRlcik7CiAgICAgIGlmIChlbGVtZW50IGlzIGpzQXN0LkxpdGVyYWxOdWxsKSB7CiAgICAgICAgZWxlbWVudHMuYWRkKG5ldyBqc0FzdC5BcnJheUhvbGUoKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZWxlbWVudHMuYWRkKGVsZW1lbnQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IGpzQXN0LkFycmF5SW5pdGlhbGl6ZXIoZWxlbWVudHMpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIEphdmFTY3JpcHQgdGVtcGxhdGUgdG8gZGV0ZXJtaW5lIGF0IHJ1bnRpbWUgaWYgYSB0eXBlIG9iamVjdAogIC8vLyBpcyBhIGZ1bmN0aW9uIHR5cGUuCiAganNBc3QuVGVtcGxhdGUgZ2V0IHRlbXBsYXRlRm9ySXNGdW5jdGlvblR5cGUgewogICAgcmV0dXJuIGpzQXN0LmpzLmV4cHJlc3Npb25UZW1wbGF0ZUZvcigiJyR7X3J0aVRhZ3MuZnVuY3Rpb25UeXBlVGFnfScgaW4gIyIpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIEphdmFTY3JpcHQgdGVtcGxhdGUgdG8gZGV0ZXJtaW5lIGF0IHJ1bnRpbWUgaWYgYSB0eXBlIG9iamVjdAogIC8vLyBpcyBhIEZ1dHVyZU9yIHR5cGUuCiAganNBc3QuVGVtcGxhdGUgZ2V0IHRlbXBsYXRlRm9ySXNGdXR1cmVPclR5cGUgewogICAgcmV0dXJuIGpzQXN0LmpzLmV4cHJlc3Npb25UZW1wbGF0ZUZvcigiJyR7X3J0aVRhZ3MuZnV0dXJlT3JUYWd9JyBpbiAjIik7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgSmF2YVNjcmlwdCB0ZW1wbGF0ZSB0byBkZXRlcm1pbmUgYXQgcnVudGltZSBpZiBhIHR5cGUgb2JqZWN0CiAgLy8vIGlzIHRoZSB2b2lkIHR5cGUuCiAganNBc3QuVGVtcGxhdGUgZ2V0IHRlbXBsYXRlRm9ySXNWb2lkVHlwZSB7CiAgICByZXR1cm4ganNBc3QuanMuZXhwcmVzc2lvblRlbXBsYXRlRm9yKCIjID09PSAtMSIpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIEphdmFTY3JpcHQgdGVtcGxhdGUgdG8gZGV0ZXJtaW5lIGF0IHJ1bnRpbWUgaWYgYSB0eXBlIG9iamVjdAogIC8vLyBpcyB0aGUgZHluYW1pYyB0eXBlLgogIGpzQXN0LlRlbXBsYXRlIGdldCB0ZW1wbGF0ZUZvcklzRHluYW1pY1R5cGUgewogICAgcmV0dXJuIGpzQXN0LmpzLmV4cHJlc3Npb25UZW1wbGF0ZUZvcigiIyA9PSBudWxsIik7CiAgfQoKICBqc0FzdC5UZW1wbGF0ZSBnZXQgdGVtcGxhdGVGb3JJc0pzSW50ZXJvcFR5cGVBcmd1bWVudCB7CiAgICByZXR1cm4ganNBc3QuanMuZXhwcmVzc2lvblRlbXBsYXRlRm9yKCIjID09PSAtMiIpOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdEZ1bmN0aW9uVHlwZSgKICAgICAgRnVuY3Rpb25UeXBlIHR5cGUsIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIpIHsKICAgIExpc3Q8anNBc3QuUHJvcGVydHk+IHByb3BlcnRpZXMgPSA8anNBc3QuUHJvcGVydHk+W107CgogICAgdm9pZCBhZGRQcm9wZXJ0eShTdHJpbmcgbmFtZSwganNBc3QuRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgICBwcm9wZXJ0aWVzLmFkZChuZXcganNBc3QuUHJvcGVydHkoanMuc3RyaW5nKG5hbWUpLCB2YWx1ZSkpOwogICAgfQoKICAgIC8vIFR5cGUgcmVwcmVzZW50YXRpb25zIGZvciBmdW5jdGlvbnMgaGF2ZSBhIHByb3BlcnR5IHdoaWNoIGlzIGEgdGFnIG1hcmtpbmcKICAgIC8vIHRoZW0gYXMgZnVuY3Rpb24gdHlwZXMuIFRoZSB2YWx1ZSBpcyBub3QgdXNlZCwgc28gJzEnIGlzIGp1c3QgYSBkdW1teS4KICAgIGFkZFByb3BlcnR5KF9ydGlUYWdzLmZ1bmN0aW9uVHlwZVRhZywganMubnVtYmVyKDEpKTsKCiAgICBpZiAodHlwZS50eXBlVmFyaWFibGVzLmlzTm90RW1wdHkpIHsKICAgICAgLy8gR2VuZXJpYyBmdW5jdGlvbiB0eXBlcyBoYXZlIHR5cGUgcGFyYW1ldGVycyB3aGljaCBhcmUgcmVkdWNlZCB0byBkZQogICAgICAvLyBCcnVpam4gaW5kZXhlcy4KICAgICAgZm9yIChGdW5jdGlvblR5cGVWYXJpYWJsZSB2YXJpYWJsZSBpbiB0eXBlLnR5cGVWYXJpYWJsZXMucmV2ZXJzZWQpIHsKICAgICAgICBmdW5jdGlvblR5cGVWYXJpYWJsZXMuYWRkKHZhcmlhYmxlKTsKICAgICAgfQogICAgICAvLyBUT0RPKHNyYSk6IFRoaXMgZW1pdHMgYFAuT2JqZWN0YCBmb3IgdGhlIGNvbW1vbiB1bmJvdW5kZWQgY2FzZS4gV2UKICAgICAgLy8gY291bGQgcmVwbGFjZSB0aGUgT2JqZWN0IGJvdW5kcyB3aXRoIGFuIGFycmF5IGhvbGUgZm9yIGEgY29tcGFjdCBgWywsXWAKICAgICAgLy8gcmVwcmVzZW50YXRpb24uCiAgICAgIGFkZFByb3BlcnR5KF9ydGlUYWdzLmZ1bmN0aW9uVHlwZUdlbmVyaWNCb3VuZHNUYWcsCiAgICAgICAgICB2aXNpdExpc3QodHlwZS50eXBlVmFyaWFibGVzLm1hcCgodikgPT4gdi5ib3VuZCkudG9MaXN0KCksIGVtaXR0ZXIpKTsKICAgIH0KCiAgICBpZiAoIXR5cGUucmV0dXJuVHlwZS50cmVhdEFzRHluYW1pYykgewogICAgICBhZGRQcm9wZXJ0eSgKICAgICAgICAgIF9ydGlUYWdzLmZ1bmN0aW9uVHlwZVJldHVyblR5cGVUYWcsIHZpc2l0KHR5cGUucmV0dXJuVHlwZSwgZW1pdHRlcikpOwogICAgfQogICAgaWYgKCF0eXBlLnBhcmFtZXRlclR5cGVzLmlzRW1wdHkpIHsKICAgICAgYWRkUHJvcGVydHkoX3J0aVRhZ3MuZnVuY3Rpb25UeXBlUmVxdWlyZWRQYXJhbWV0ZXJzVGFnLAogICAgICAgICAgdmlzaXRMaXN0KHR5cGUucGFyYW1ldGVyVHlwZXMsIGVtaXR0ZXIpKTsKICAgIH0KICAgIGlmICghdHlwZS5vcHRpb25hbFBhcmFtZXRlclR5cGVzLmlzRW1wdHkpIHsKICAgICAgYWRkUHJvcGVydHkoX3J0aVRhZ3MuZnVuY3Rpb25UeXBlT3B0aW9uYWxQYXJhbWV0ZXJzVGFnLAogICAgICAgICAgdmlzaXRMaXN0KHR5cGUub3B0aW9uYWxQYXJhbWV0ZXJUeXBlcywgZW1pdHRlcikpOwogICAgfQogICAgaWYgKCF0eXBlLm5hbWVkUGFyYW1ldGVyVHlwZXMuaXNFbXB0eSkgewogICAgICBMaXN0PGpzQXN0LlByb3BlcnR5PiBuYW1lZEFyZ3VtZW50cyA9IDxqc0FzdC5Qcm9wZXJ0eT5bXTsKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVzID0gdHlwZS5uYW1lZFBhcmFtZXRlcnM7CiAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVzID0gdHlwZS5uYW1lZFBhcmFtZXRlclR5cGVzOwogICAgICBhc3NlcnQodHlwZXMubGVuZ3RoID09IG5hbWVzLmxlbmd0aCk7CiAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCB0eXBlcy5sZW5ndGg7IGluZGV4KyspIHsKICAgICAgICBqc0FzdC5FeHByZXNzaW9uIG5hbWUgPSBqcy5zdHJpbmcobmFtZXNbaW5kZXhdKTsKICAgICAgICBuYW1lZEFyZ3VtZW50cwogICAgICAgICAgICAuYWRkKG5ldyBqc0FzdC5Qcm9wZXJ0eShuYW1lLCB2aXNpdCh0eXBlc1tpbmRleF0sIGVtaXR0ZXIpKSk7CiAgICAgIH0KICAgICAgYWRkUHJvcGVydHkoX3J0aVRhZ3MuZnVuY3Rpb25UeXBlTmFtZWRQYXJhbWV0ZXJzVGFnLAogICAgICAgICAgbmV3IGpzQXN0Lk9iamVjdEluaXRpYWxpemVyKG5hbWVkQXJndW1lbnRzKSk7CiAgICB9CgogICAgLy8gRXhpdCBnZW5lcmljIGZ1bmN0aW9uIHNjb3BlLgogICAgaWYgKHR5cGUudHlwZVZhcmlhYmxlcy5pc05vdEVtcHR5KSB7CiAgICAgIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcy5sZW5ndGggLT0gdHlwZS50eXBlVmFyaWFibGVzLmxlbmd0aDsKICAgIH0KCiAgICByZXR1cm4gbmV3IGpzQXN0Lk9iamVjdEluaXRpYWxpemVyKHByb3BlcnRpZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdFZvaWRUeXBlKFZvaWRUeXBlIHR5cGUsIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIpIHsKICAgIHJldHVybiBnZXRWb2lkVmFsdWUoKTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSB0eXBlLCBNb2R1bGFyRW1pdHRlciBlbWl0dGVyKSB7CiAgICBib29sIHNob3VsZEVuY29kZSA9IHNob3VsZEVuY29kZVR5cGVkZWYodHlwZSk7CiAgICBEYXJ0VHlwZSB1bmFsaWFzZWRUeXBlID0gdHlwZS51bmFsaWFzZWQ7CgogICAgdmFyIG9sZEJpbmRpbmdzID0gdHlwZWRlZkJpbmRpbmdzOwogICAgaWYgKHR5cGVkZWZCaW5kaW5ncyA9PSBudWxsKSB7CiAgICAgIC8vIEZpcnN0IGxldmVsIHR5cGVkZWYgLSBjYXB0dXJlIGFyZ3VtZW50cyBmb3IgcmUtdXNlIHdpdGhpbiB0eXBlZGVmIGJvZHkuCiAgICAgIC8vCiAgICAgIC8vIFRoZSB0eXBlIGBNYXA8VCwgRm9vPFNldDxUPj4+YCBjb250YWlucyBvbmUgdHlwZSB2YXJpYWJsZSByZWZlcmVuY2VkCiAgICAgIC8vIHR3aWNlLCBzbyB0aGVyZSBhcmUgdHdvIGlucHV0cyBpbnRvIHRoZSBIVHlwZUluZm9FeHByZXNzaW9uCiAgICAgIC8vIGluc3RydWN0aW9uLgogICAgICAvLwogICAgICAvLyBJZiBGb28gaXMgYSB0eXBlZGVmLCBUIGNhbiBiZSByZXVzZWQsIGUuZy4KICAgICAgLy8KICAgICAgLy8gICAgIHR5cGVkZWYgRSBGb288RT4oRSBhLCBFIGIpOwogICAgICAvLwogICAgICAvLyBBcyB0aGUgdHlwZWRlZiBpcyBleHBhbmRlZCAodG8gKFNldDxUPiwgU2V0PFQ+KSA9PiBTZXQ8VD4pIGl0IHNob3VsZAogICAgICAvLyBub3QgY29uc3VtZSBhZGRpdGlvbmFsIHR5cGVzIGZyb20gdGhlIHRvLWxldmVsIGlucHV0LiAgV2UgcHJldmVudCB0aGlzCiAgICAgIC8vIGJ5IGNhcHR1cmluZyB0aGUgdHlwZXMgYW5kIHVzaW5nIHRoZSBjYXB0dXJlZCB0eXBlIGV4cHJlc3Npb25zIGluc2lkZQogICAgICAvLyB0aGUgdHlwZWRlZiBleHBhbnNpb24uCiAgICAgIC8vCiAgICAgIC8vIFRPRE8oc3JhKTogV2Ugc2hvdWxkIG1ha2UgdGhlIHR5cGUgc3ViZXhwcmVzc2lvbiBGb288Li4uPiBiZSBhIHNlY29uZAogICAgICAvLyBIVHlwZUluZm9FeHByZXNzaW9uLCB3aXRoIFNldDxUPiBhcyBpdHMgaW5wdXQgKGEgdGhpcmQKICAgICAgLy8gSFR5cGVJbmZvRXhwcmVzc2lvbikuIFRoaXMgd291bGQgc2hhcmUgYWxsIHRoZSBTZXQ8VD4gc3ViZXhwcmVzc2lvbnMKICAgICAgLy8gaW5zdGVhZCBvZiBkdXBsaWNhdGluZyB0aGVtLiBUaGlzIHdvdWxkIHJlcXVpcmUgSFR5cGVJbmZvRXhwcmVzc2lvbgogICAgICAvLyBpbnB1dHMgdG8gY29ycmVzcG9uZCB0byB0eXBlIHZhcmlhYmxlcyBBTkQgdHlwZWRlZnMuCiAgICAgIHR5cGVkZWZCaW5kaW5ncyA9IDxUeXBlVmFyaWFibGVUeXBlLCBqc0FzdC5FeHByZXNzaW9uPnt9OwogICAgICB0eXBlLmZvckVhY2hUeXBlVmFyaWFibGUoKFR5cGVWYXJpYWJsZVR5cGUgdmFyaWFibGUpIHsKICAgICAgICB0eXBlZGVmQmluZGluZ3NbdmFyaWFibGVdID0gb25WYXJpYWJsZSh2YXJpYWJsZSk7CiAgICAgIH0pOwogICAgfQoKICAgIGpzQXN0LkV4cHJlc3Npb24gZmluaXNoKGpzQXN0LkV4cHJlc3Npb24gcmVzdWx0KSB7CiAgICAgIHR5cGVkZWZCaW5kaW5ncyA9IG9sZEJpbmRpbmdzOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoKICAgIGlmIChzaG91bGRFbmNvZGUpIHsKICAgICAganNBc3QuT2JqZWN0SW5pdGlhbGl6ZXIgaW5pdGlhbGl6ZXIgPSB2aXNpdCh1bmFsaWFzZWRUeXBlLCBlbWl0dGVyKTsKICAgICAgLy8gV2UgaGF2ZSB0byBlbmNvZGUgdGhlIGFsaWFzZWQgdHlwZS4KICAgICAganNBc3QuRXhwcmVzc2lvbiBuYW1lID0gZ2V0SmF2YVNjcmlwdENsYXNzTmFtZSh0eXBlLmVsZW1lbnQsIGVtaXR0ZXIpOwogICAgICBqc0FzdC5FeHByZXNzaW9uIGVuY29kZWRUeXBlZGVmID0gdHlwZS50cmVhdEFzUmF3CiAgICAgICAgICA/IG5hbWUKICAgICAgICAgIDogdmlzaXRMaXN0KHR5cGUudHlwZUFyZ3VtZW50cywgZW1pdHRlciwgaGVhZDogbmFtZSk7CgogICAgICAvLyBBZGQgaXQgdG8gdGhlIGZ1bmN0aW9uLXR5cGUgb2JqZWN0LgogICAgICBqc0FzdC5MaXRlcmFsU3RyaW5nIHRhZyA9IGpzLnN0cmluZyhfcnRpVGFncy50eXBlZGVmVGFnKTsKICAgICAgaW5pdGlhbGl6ZXIucHJvcGVydGllcy5hZGQobmV3IGpzQXN0LlByb3BlcnR5KHRhZywgZW5jb2RlZFR5cGVkZWYpKTsKICAgICAgcmV0dXJuIGZpbmlzaChpbml0aWFsaXplcik7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZmluaXNoKHZpc2l0KHVuYWxpYXNlZFR5cGUsIGVtaXR0ZXIpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRGdXR1cmVPclR5cGUoCiAgICAgIEZ1dHVyZU9yVHlwZSB0eXBlLCBNb2R1bGFyRW1pdHRlciBlbWl0dGVyKSB7CiAgICBMaXN0PGpzQXN0LlByb3BlcnR5PiBwcm9wZXJ0aWVzID0gPGpzQXN0LlByb3BlcnR5PltdOwoKICAgIHZvaWQgYWRkUHJvcGVydHkoU3RyaW5nIG5hbWUsIGpzQXN0LkV4cHJlc3Npb24gdmFsdWUpIHsKICAgICAgcHJvcGVydGllcy5hZGQobmV3IGpzQXN0LlByb3BlcnR5KGpzLnN0cmluZyhuYW1lKSwgdmFsdWUpKTsKICAgIH0KCiAgICAvLyBUeXBlIHJlcHJlc2VudGF0aW9ucyBmb3IgRnV0dXJlT3IgaGF2ZSBhIHByb3BlcnR5IHdoaWNoIGlzIGEgdGFnIG1hcmtpbmcKICAgIC8vIHRoZW0gYXMgRnV0dXJlT3IgdHlwZXMuIFRoZSB2YWx1ZSBpcyBub3QgdXNlZCwgc28gJzEnIGlzIGp1c3QgYSBkdW1teS4KICAgIGFkZFByb3BlcnR5KF9ydGlUYWdzLmZ1dHVyZU9yVGFnLCBqcy5udW1iZXIoMSkpOwogICAgaWYgKCF0eXBlLnR5cGVBcmd1bWVudC50cmVhdEFzRHluYW1pYykgewogICAgICBhZGRQcm9wZXJ0eShfcnRpVGFncy5mdXR1cmVPclR5cGVUYWcsIHZpc2l0KHR5cGUudHlwZUFyZ3VtZW50LCBlbWl0dGVyKSk7CiAgICB9CgogICAgcmV0dXJuIG5ldyBqc0FzdC5PYmplY3RJbml0aWFsaXplcihwcm9wZXJ0aWVzKTsKICB9Cn0KCmNsYXNzIFR5cGVDaGVja01hcHBpbmcgaW1wbGVtZW50cyBUeXBlQ2hlY2tzIHsKICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIENsYXNzQ2hlY2tzPiBtYXAgPSBuZXcgTWFwPENsYXNzRW50aXR5LCBDbGFzc0NoZWNrcz4oKTsKCiAgQG92ZXJyaWRlCiAgQ2xhc3NDaGVja3Mgb3BlcmF0b3IgW10oQ2xhc3NFbnRpdHkgZWxlbWVudCkgewogICAgQ2xhc3NDaGVja3MgcmVzdWx0ID0gbWFwW2VsZW1lbnRdOwogICAgcmV0dXJuIHJlc3VsdCAhPSBudWxsID8gcmVzdWx0IDogY29uc3QgQ2xhc3NDaGVja3MuZW1wdHkoKTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KENsYXNzRW50aXR5IGVsZW1lbnQsIENsYXNzQ2hlY2tzIGNoZWNrcykgewogICAgbWFwW2VsZW1lbnRdID0gY2hlY2tzOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBjbGFzc2VzID0+IG1hcC5rZXlzOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBmb3IgKENsYXNzRW50aXR5IGhvbGRlciBpbiBjbGFzc2VzKSB7CiAgICAgIGZvciAoVHlwZUNoZWNrIGNoZWNrIGluIHRoaXNbaG9sZGVyXS5jaGVja3MpIHsKICAgICAgICBzYi53cml0ZSgnJHtob2xkZXIubmFtZX0gPDogJHtjaGVjay5jbHMubmFtZX0sICcpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gJ1skc2JdJzsKICB9Cn0KCmNsYXNzIEFyZ3VtZW50Q29sbGVjdG9yIGV4dGVuZHMgRGFydFR5cGVWaXNpdG9yPGR5bmFtaWMsIGJvb2w+IHsKICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICB2b2lkIGFkZENsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgY2xhc3Nlcy5hZGQoY2xzKTsKICB9CgogIGNvbGxlY3QoRGFydFR5cGUgdHlwZSwge2Jvb2wgaXNUeXBlQXJndW1lbnQ6IGZhbHNlfSkgewogICAgdmlzaXQodHlwZSwgaXNUeXBlQXJndW1lbnQpOwogIH0KCiAgLy8vIENvbGxlY3QgYWxsIHR5cGVzIGluIHRoZSBsaXN0IGFzIGlmIHRoZXkgd2VyZSBhcmd1bWVudHMgb2YgYW4KICAvLy8gSW50ZXJmYWNlVHlwZS4KICBjb2xsZWN0QWxsKExpc3Q8RGFydFR5cGU+IHR5cGVzLCB7Ym9vbCBpc1R5cGVBcmd1bWVudDogZmFsc2V9KSB7CiAgICBmb3IgKERhcnRUeXBlIHR5cGUgaW4gdHlwZXMpIHsKICAgICAgdmlzaXQodHlwZSwgdHJ1ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFR5cGVkZWZUeXBlKFR5cGVkZWZUeXBlIHR5cGUsIGJvb2wgaXNUeXBlQXJndW1lbnQpIHsKICAgIGNvbGxlY3QodHlwZS51bmFsaWFzZWQsIGlzVHlwZUFyZ3VtZW50OiBpc1R5cGVBcmd1bWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEludGVyZmFjZVR5cGUoSW50ZXJmYWNlVHlwZSB0eXBlLCBib29sIGlzVHlwZUFyZ3VtZW50KSB7CiAgICBpZiAoaXNUeXBlQXJndW1lbnQpIGFkZENsYXNzKHR5cGUuZWxlbWVudCk7CiAgICBjb2xsZWN0QWxsKHR5cGUudHlwZUFyZ3VtZW50cywgaXNUeXBlQXJndW1lbnQ6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIHR5cGUsIF8pIHsKICAgIGNvbGxlY3QodHlwZS5yZXR1cm5UeXBlLCBpc1R5cGVBcmd1bWVudDogdHJ1ZSk7CiAgICBjb2xsZWN0QWxsKHR5cGUucGFyYW1ldGVyVHlwZXMsIGlzVHlwZUFyZ3VtZW50OiB0cnVlKTsKICAgIGNvbGxlY3RBbGwodHlwZS5vcHRpb25hbFBhcmFtZXRlclR5cGVzLCBpc1R5cGVBcmd1bWVudDogdHJ1ZSk7CiAgICBjb2xsZWN0QWxsKHR5cGUubmFtZWRQYXJhbWV0ZXJUeXBlcywgaXNUeXBlQXJndW1lbnQ6IHRydWUpOwogIH0KfQoKY2xhc3MgRnVuY3Rpb25Bcmd1bWVudENvbGxlY3RvciBleHRlbmRzIERhcnRUeXBlVmlzaXRvcjxkeW5hbWljLCBib29sPiB7CiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBjbGFzc2VzID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKCiAgRnVuY3Rpb25Bcmd1bWVudENvbGxlY3RvcigpOwoKICBjb2xsZWN0KERhcnRUeXBlIHR5cGUsIHtib29sIGluRnVuY3Rpb25UeXBlOiBmYWxzZX0pIHsKICAgIHZpc2l0KHR5cGUsIGluRnVuY3Rpb25UeXBlKTsKICB9CgogIGNvbGxlY3RBbGwoSXRlcmFibGU8RGFydFR5cGU+IHR5cGVzLCB7Ym9vbCBpbkZ1bmN0aW9uVHlwZTogZmFsc2V9KSB7CiAgICBmb3IgKERhcnRUeXBlIHR5cGUgaW4gdHlwZXMpIHsKICAgICAgdmlzaXQodHlwZSwgaW5GdW5jdGlvblR5cGUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSB0eXBlLCBib29sIGluRnVuY3Rpb25UeXBlKSB7CiAgICBjb2xsZWN0KHR5cGUudW5hbGlhc2VkLCBpbkZ1bmN0aW9uVHlwZTogaW5GdW5jdGlvblR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgdHlwZSwgYm9vbCBpbkZ1bmN0aW9uVHlwZSkgewogICAgaWYgKGluRnVuY3Rpb25UeXBlKSB7CiAgICAgIGNsYXNzZXMuYWRkKHR5cGUuZWxlbWVudCk7CiAgICB9CiAgICBjb2xsZWN0QWxsKHR5cGUudHlwZUFyZ3VtZW50cywgaW5GdW5jdGlvblR5cGU6IGluRnVuY3Rpb25UeXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0RnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSB0eXBlLCBfKSB7CiAgICBjb2xsZWN0KHR5cGUucmV0dXJuVHlwZSwgaW5GdW5jdGlvblR5cGU6IHRydWUpOwogICAgY29sbGVjdEFsbCh0eXBlLnBhcmFtZXRlclR5cGVzLCBpbkZ1bmN0aW9uVHlwZTogdHJ1ZSk7CiAgICBjb2xsZWN0QWxsKHR5cGUub3B0aW9uYWxQYXJhbWV0ZXJUeXBlcywgaW5GdW5jdGlvblR5cGU6IHRydWUpOwogICAgY29sbGVjdEFsbCh0eXBlLm5hbWVkUGFyYW1ldGVyVHlwZXMsIGluRnVuY3Rpb25UeXBlOiB0cnVlKTsKICAgIGNvbGxlY3RBbGwodHlwZS50eXBlVmFyaWFibGVzLm1hcCgodHlwZSkgPT4gdHlwZS5ib3VuZCksCiAgICAgICAgaW5GdW5jdGlvblR5cGU6IHRydWUpOwogIH0KfQoKZW51bSBUeXBlVmlzaXRvclN0YXRlIHsKICBkaXJlY3QsCiAgY292YXJpYW50VHlwZUFyZ3VtZW50LAogIGNvbnRyYXZhcmlhbnRUeXBlQXJndW1lbnQsCiAgdHlwZUxpdGVyYWwsCn0KCmNsYXNzIFR5cGVWaXNpdG9yIGV4dGVuZHMgRGFydFR5cGVWaXNpdG9yPHZvaWQsIFR5cGVWaXNpdG9yU3RhdGU+IHsKICBTZXQ8RnVuY3Rpb25UeXBlVmFyaWFibGU+IF92aXNpdGVkRnVuY3Rpb25UeXBlVmFyaWFibGVzID0KICAgICAgbmV3IFNldDxGdW5jdGlvblR5cGVWYXJpYWJsZT4oKTsKCiAgZmluYWwgdm9pZCBGdW5jdGlvbihDbGFzc0VudGl0eSBlbnRpdHksIHtUeXBlVmlzaXRvclN0YXRlIHN0YXRlfSkgb25DbGFzczsKICBmaW5hbCB2b2lkIEZ1bmN0aW9uKFR5cGVWYXJpYWJsZUVudGl0eSBlbnRpdHksIHtUeXBlVmlzaXRvclN0YXRlIHN0YXRlfSkKICAgICAgb25UeXBlVmFyaWFibGU7CiAgZmluYWwgdm9pZCBGdW5jdGlvbihGdW5jdGlvblR5cGUgdHlwZSwge1R5cGVWaXNpdG9yU3RhdGUgc3RhdGV9KQogICAgICBvbkZ1bmN0aW9uVHlwZTsKCiAgVHlwZVZpc2l0b3Ioe3RoaXMub25DbGFzcywgdGhpcy5vblR5cGVWYXJpYWJsZSwgdGhpcy5vbkZ1bmN0aW9uVHlwZX0pOwoKICB2aXNpdFR5cGUoRGFydFR5cGUgdHlwZSwgVHlwZVZpc2l0b3JTdGF0ZSBzdGF0ZSkgPT4gdHlwZS5hY2NlcHQodGhpcywgc3RhdGUpOwoKICBUeXBlVmlzaXRvclN0YXRlIGNvdmFyaWFudEFyZ3VtZW50KFR5cGVWaXNpdG9yU3RhdGUgc3RhdGUpIHsKICAgIHN3aXRjaCAoc3RhdGUpIHsKICAgICAgY2FzZSBUeXBlVmlzaXRvclN0YXRlLmRpcmVjdDoKICAgICAgICByZXR1cm4gVHlwZVZpc2l0b3JTdGF0ZS5jb3ZhcmlhbnRUeXBlQXJndW1lbnQ7CiAgICAgIGNhc2UgVHlwZVZpc2l0b3JTdGF0ZS5jb3ZhcmlhbnRUeXBlQXJndW1lbnQ6CiAgICAgICAgcmV0dXJuIFR5cGVWaXNpdG9yU3RhdGUuY292YXJpYW50VHlwZUFyZ3VtZW50OwogICAgICBjYXNlIFR5cGVWaXNpdG9yU3RhdGUuY29udHJhdmFyaWFudFR5cGVBcmd1bWVudDoKICAgICAgICByZXR1cm4gVHlwZVZpc2l0b3JTdGF0ZS5jb250cmF2YXJpYW50VHlwZUFyZ3VtZW50OwogICAgICBjYXNlIFR5cGVWaXNpdG9yU3RhdGUudHlwZUxpdGVyYWw6CiAgICAgICAgcmV0dXJuIFR5cGVWaXNpdG9yU3RhdGUudHlwZUxpdGVyYWw7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBUeXBlVmlzaXRvclN0YXRlICRzdGF0ZSIpOwogIH0KCiAgVHlwZVZpc2l0b3JTdGF0ZSBjb250cmF2YXJpYW50QXJndW1lbnQoVHlwZVZpc2l0b3JTdGF0ZSBzdGF0ZSkgewogICAgc3dpdGNoIChzdGF0ZSkgewogICAgICBjYXNlIFR5cGVWaXNpdG9yU3RhdGUuZGlyZWN0OgogICAgICAgIHJldHVybiBUeXBlVmlzaXRvclN0YXRlLmNvbnRyYXZhcmlhbnRUeXBlQXJndW1lbnQ7CiAgICAgIGNhc2UgVHlwZVZpc2l0b3JTdGF0ZS5jb3ZhcmlhbnRUeXBlQXJndW1lbnQ6CiAgICAgICAgcmV0dXJuIFR5cGVWaXNpdG9yU3RhdGUuY29udHJhdmFyaWFudFR5cGVBcmd1bWVudDsKICAgICAgY2FzZSBUeXBlVmlzaXRvclN0YXRlLmNvbnRyYXZhcmlhbnRUeXBlQXJndW1lbnQ6CiAgICAgICAgcmV0dXJuIFR5cGVWaXNpdG9yU3RhdGUuY292YXJpYW50VHlwZUFyZ3VtZW50OwogICAgICBjYXNlIFR5cGVWaXNpdG9yU3RhdGUudHlwZUxpdGVyYWw6CiAgICAgICAgcmV0dXJuIFR5cGVWaXNpdG9yU3RhdGUudHlwZUxpdGVyYWw7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBUeXBlVmlzaXRvclN0YXRlICRzdGF0ZSIpOwogIH0KCiAgdmlzaXRUeXBlcyhMaXN0PERhcnRUeXBlPiB0eXBlcywgVHlwZVZpc2l0b3JTdGF0ZSBzdGF0ZSkgewogICAgZm9yIChEYXJ0VHlwZSB0eXBlIGluIHR5cGVzKSB7CiAgICAgIHZpc2l0VHlwZSh0eXBlLCBzdGF0ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZVZhcmlhYmxlVHlwZShUeXBlVmFyaWFibGVUeXBlIHR5cGUsIFR5cGVWaXNpdG9yU3RhdGUgc3RhdGUpIHsKICAgIGlmIChvblR5cGVWYXJpYWJsZSAhPSBudWxsKSB7CiAgICAgIG9uVHlwZVZhcmlhYmxlKHR5cGUuZWxlbWVudCwgc3RhdGU6IHN0YXRlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0SW50ZXJmYWNlVHlwZShJbnRlcmZhY2VUeXBlIHR5cGUsIFR5cGVWaXNpdG9yU3RhdGUgc3RhdGUpIHsKICAgIGlmIChvbkNsYXNzICE9IG51bGwpIHsKICAgICAgb25DbGFzcyh0eXBlLmVsZW1lbnQsIHN0YXRlOiBzdGF0ZSk7CiAgICB9CiAgICB2aXNpdFR5cGVzKHR5cGUudHlwZUFyZ3VtZW50cywgY292YXJpYW50QXJndW1lbnQoc3RhdGUpKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0RnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSB0eXBlLCBUeXBlVmlzaXRvclN0YXRlIHN0YXRlKSB7CiAgICBpZiAob25GdW5jdGlvblR5cGUgIT0gbnVsbCkgewogICAgICBvbkZ1bmN0aW9uVHlwZSh0eXBlLCBzdGF0ZTogc3RhdGUpOwogICAgfQogICAgLy8gVmlzaXQgYWxsIG5lc3RlZCB0eXBlcyBhcyB0eXBlIGFyZ3VtZW50czsgdGhlc2UgdHlwZXMgYXJlIG5vdCBydW50aW1lCiAgICAvLyBpbnN0YW5jZXMgYnV0IHJ1bnRpbWUgdHlwZSByZXByZXNlbnRhdGlvbnMuCiAgICB2aXNpdFR5cGUodHlwZS5yZXR1cm5UeXBlLCBjb3ZhcmlhbnRBcmd1bWVudChzdGF0ZSkpOwogICAgdmlzaXRUeXBlcyh0eXBlLnBhcmFtZXRlclR5cGVzLCBjb250cmF2YXJpYW50QXJndW1lbnQoc3RhdGUpKTsKICAgIHZpc2l0VHlwZXModHlwZS5vcHRpb25hbFBhcmFtZXRlclR5cGVzLCBjb250cmF2YXJpYW50QXJndW1lbnQoc3RhdGUpKTsKICAgIHZpc2l0VHlwZXModHlwZS5uYW1lZFBhcmFtZXRlclR5cGVzLCBjb250cmF2YXJpYW50QXJndW1lbnQoc3RhdGUpKTsKICAgIF92aXNpdGVkRnVuY3Rpb25UeXBlVmFyaWFibGVzLnJlbW92ZUFsbCh0eXBlLnR5cGVWYXJpYWJsZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSB0eXBlLCBUeXBlVmlzaXRvclN0YXRlIHN0YXRlKSB7CiAgICB2aXNpdFR5cGUodHlwZS51bmFsaWFzZWQsIHN0YXRlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0RnVuY3Rpb25UeXBlVmFyaWFibGUoRnVuY3Rpb25UeXBlVmFyaWFibGUgdHlwZSwgVHlwZVZpc2l0b3JTdGF0ZSBzdGF0ZSkgewogICAgaWYgKF92aXNpdGVkRnVuY3Rpb25UeXBlVmFyaWFibGVzLmFkZCh0eXBlKSkgewogICAgICB2aXNpdFR5cGUodHlwZS5ib3VuZCwgc3RhdGUpOwogICAgfQogIH0KfQoKLy8vIFJ1bnRpbWUgdHlwZSB1c2FnZSBmb3IgYSBjbGFzcy4KY2xhc3MgQ2xhc3NVc2UgewogIC8vLyBXaGV0aGVyIHRoZSBjbGFzcyBpcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluc3RhbnRpYXRlZC4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGBBYCBhbmQgYEJgIGluOgogIC8vLwogIC8vLyAgICAgY2xhc3MgQSB7fQogIC8vLyAgICAgY2xhc3MgQiBleHRlbmRzIEEge30KICAvLy8gICAgIG1haW4oKSA9PiBuZXcgQigpOwogIC8vLwogIGJvb2wgaW5zdGFuY2UgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdGhlIGNsYXNzIGlzIGRpcmVjdGx5IGluc3RhbnRpYXRlZC4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGBCYCBpbjoKICAvLy8KICAvLy8gICAgIGNsYXNzIEEge30KICAvLy8gICAgIGNsYXNzIEIgZXh0ZW5kcyBBIHt9CiAgLy8vICAgICBtYWluKCkgPT4gbmV3IEIoKTsKICAvLy8KICBib29sIGRpcmVjdEluc3RhbmNlID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIG9iamVjdHMgYXJlIGNoZWNrZWQgdG8gYmUgaW5zdGFuY2VzIG9mIHRoZSBjbGFzcy4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGBBYCBpbjoKICAvLy8KICAvLy8gICAgIGNsYXNzIEEge30KICAvLy8gICAgIG1haW4oKSA9PiBudWxsIGlzIEE7CiAgLy8vCiAgYm9vbCBjaGVja2VkSW5zdGFuY2UgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdGhlIGNsYXNzIGlzIHBhc3NlZCBhcyBhIHR5cGUgYXJndW1lbnQgYXQgcnVudGltZS4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGBBYCBpbjoKICAvLy8KICAvLy8gICAgIGNsYXNzIEEge30KICAvLy8gICAgIG1haW4oKSA9PiBuZXcgTGlzdDxBPigpIGlzIExpc3Q8U3RyaW5nPjsKICAvLy8KICBib29sIHR5cGVBcmd1bWVudCA9IGZhbHNlOwoKICAvLy8gV2hldGhlciB0aGUgY2xhc3MgaXMgY2hlY2tlZCBhcyBhIHR5cGUgYXJndW1lbnQgYXQgcnVudGltZS4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGBBYCBpbjoKICAvLy8KICAvLy8gICAgIGNsYXNzIEEge30KICAvLy8gICAgIG1haW4oKSA9PiBuZXcgTGlzdDxTdHJpbmc+KCkgaXMgTGlzdDxBPjsKICAvLy8KICBib29sIGNoZWNrZWRUeXBlQXJndW1lbnQgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdGhlIGNsYXNzIGlzIHVzZWQgaW4gYSBjb25zdGFudCB0eXBlIGxpdGVyYWwuCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBgQWA6CiAgLy8vCiAgLy8vICAgICBjbGFzcyBBIHt9CiAgLy8vICAgICBtYWluKCkgPT4gQTsKICAvLy8KICBib29sIHR5cGVMaXRlcmFsID0gZmFsc2U7CgogIC8vLyBUaGUgZnVuY3Rpb24gdHlwZSBvZiB0aGUgY2xhc3MsIGlmIGFueS4KICAvLy8KICAvLy8gVGhpcyBpcyBvbmx5IHNldCBpZiB0aGUgZnVuY3Rpb24gdHlwZSBpcyBuZWVkZWQgYXQgcnVudGltZS4gRm9yIGluc3RhbmNlLAogIC8vLyBpZiBubyBmdW5jdGlvbiB0eXBlcyBhcmUgY2hlY2tlZCBhdCBydW50aW1lIHRoZW4gdGhlIGZ1bmN0aW9uIHR5cGUgaXNuJ3QKICAvLy8gbmVlZGVkLgogIC8vLwogIC8vLyBGdXJ0aGVybW9yZSBvcHRpbWl6YXRpb24gbWlnaHQgYWxzbyBvbWl0IGZ1bmN0aW9uIHR5cGUgdGhhdCBhcmUga25vd24gbm90CiAgLy8vIHRvIGJlIHZhbGlkIGluIGFueSBzdWJ0eXBlIHRlc3QuCiAgQ2xhc3NGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlOwoKICAvLy8gYHRydWVgIGlmIHRoZSBjbGFzcyBpcyAnbGl2ZScgZWl0aGVyIHRocm91Z2ggaW5zdGFudGlhdGlvbiBvciB1c2UgaW4KICAvLy8gdHlwZSBhcmd1bWVudHMuCiAgYm9vbCBnZXQgaXNM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YXR1cmUgZnVuY3Rpb24gZm9yIHRoZSBmdW5jdGlvbiB0eXBlIG9mCi8vLyBhIGNsYXNzLgpjbGFzcyBDbGFzc0Z1bmN0aW9uVHlwZSB7CiAgLy8vIFRoZSBgY2FsbGAgZnVuY3Rpb24gdGhhdCBkZWZpbmVzIHRoZSBmdW5jdGlvbiB0eXBlLgogIGZpbmFsIEZ1bmN0aW9uRW50aXR5IGNhbGxGdW5jdGlvbjsKCiAgLy8vIFRoZSB0eXBlIG9mIHRoZSBgY2FsbGAgZnVuY3Rpb24uCiAgZmluYWwgRnVuY3Rpb25UeXBlIGNhbGxUeXBlOwoKICAvLy8gVGhlIHNpZ25hdHVyZSBmdW5jdGlvbiBmb3IgdGhlIGZ1bmN0aW9uIHR5cGUuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCBmb3IgRGFydCAyLgogIGZpbmFsIEZ1bmN0aW9uRW50aXR5IHNpZ25hdHVyZUZ1bmN0aW9uOwoKICBDbGFzc0Z1bmN0aW9uVHlwZSh0aGlzLmNhbGxGdW5jdGlvbiwgdGhpcy5jYWxsVHlwZSwgdGhpcy5zaWduYXR1cmVGdW5jdGlvbik7Cn0KCi8vLyBBIHBhaXIgb2YgYSBjbGFzcyB0aGF0IHdlIG5lZWQgYSBjaGVjayBhZ2FpbnN0IGFuZCB0aGUgdHlwZSBhcmd1bWVudAovLy8gc3Vic3RpdHV0aW9uIGZvciB0aGlzIGNoZWNrLgpjbGFzcyBUeXBlQ2hlY2sgewogIGZpbmFsIENsYXNzRW50aXR5IGNsczsKICBmaW5hbCBib29sIG5lZWRzSXM7CiAgZmluYWwgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbjsKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgaGFzaENvZGUgPSBfbmV4dEhhc2ggPSAoX25leHRIYXNoICsgMTAwMDAzKS50b1Vuc2lnbmVkKDMwKTsKICBzdGF0aWMgaW50IF9uZXh0SGFzaCA9IDA7CgogIFR5cGVDaGVjayh0aGlzLmNscywgdGhpcy5zdWJzdGl0dXRpb24sIHt0aGlzLm5lZWRzSXM6IHRydWV9KTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgJ1R5cGVDaGVjayhjbHM9JGNscyxuZWVkc0lzPSRuZWVkc0lzLHN1YnN0aXR1dGlvbj0kc3Vic3RpdHV0aW9uKSc7Cn0KCi8vLyBbVHlwZUNoZWNrXXMgbmVlZCBmb3IgYSBzaW5nbGUgY2xhc3MuCmNsYXNzIENsYXNzQ2hlY2tzIHsKICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIFR5cGVDaGVjaz4gX21hcDsKCiAgZmluYWwgQ2xhc3NGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlOwoKICBDbGFzc0NoZWNrcyh0aGlzLmZ1bmN0aW9uVHlwZSkgOiBfbWFwID0gPENsYXNzRW50aXR5LCBUeXBlQ2hlY2s+e307CgogIGNvbnN0IENsYXNzQ2hlY2tzLmVtcHR5KCkKICAgICAgOiBfbWFwID0gY29uc3QgPENsYXNzRW50aXR5LCBUeXBlQ2hlY2s+e30sCiAgICAgICAgZnVuY3Rpb25UeXBlID0gbnVsbDsKCiAgdm9pZCBhZGQoVHlwZUNoZWNrIGNoZWNrKSB7CiAgICBfbWFwW2NoZWNrLmNsc10gPSBjaGVjazsKICB9CgogIFR5cGVDaGVjayBvcGVyYXRvciBbXShDbGFzc0VudGl0eSBjbHMpID0+IF9tYXBbY2xzXTsKCiAgSXRlcmFibGU8VHlwZUNoZWNrPiBnZXQgY2hlY2tzID0+IF9tYXAudmFsdWVzOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ0NsYXNzQ2hlY2tzKCRjaGVja3MpJzsKICB9Cn0KCi8vLyBGb3IgZWFjaCBjbGFzcywgc3RvcmVzIHRoZSBwb3NzaWJsZSBjbGFzcyBzdWJ0eXBlIHRlc3RzIHRoYXQgY291bGQgc3VjY2VlZC4KYWJzdHJhY3QgY2xhc3MgVHlwZUNoZWNrcyB7CiAgLy8vIEdldCB0aGUgc2V0IG9mIGNoZWNrcyByZXF1aXJlZCBmb3IgY2xhc3MgW2VsZW1lbnRdLgogIENsYXNzQ2hlY2tzIG9wZXJhdG9yIFtdKENsYXNzRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gR2V0IHRoZSBpdGVyYWJsZSBmb3IgYWxsIGNsYXNzZXMgdGhhdCBuZWVkIHR5cGUgY2hlY2tzLgogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgY2xhc3NlczsKfQoKLy8vIFJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdWJzdGl0dXRpb24gb2YgdHlwZSBhcmd1bWVudHMgd2hlbiBnb2luZyBmcm9tIHRoZQovLy8gdHlwZSBvZiBhIGNsYXNzIHRvIG9uZSBvZiBpdHMgc3VwZXJ0eXBlcy4KLy8vCi8vLyBGb3IgYGNsYXNzIEI8VD4gZXh0ZW5kcyBBPExpc3Q8VD4sIGludD5gLCB0aGUgc3Vic3RpdHV0aW9uIGlzIHRoZQovLy8gcmVwcmVzZW50YXRpb24gb2YgYChUKSA9PiBbPExpc3QsIFQ+LCBpbnRdYC4gRm9yIG1vcmUgZGV0YWlscyBvZiB0aGUKLy8vIHJlcHJlc2VudGF0aW9uIGNvbnN1bHQgdGhlIGRvY3VtZW50YXRpb24gb2YgW2dldFN1cGVydHlwZVN1YnN0aXR1dGlvbl0uCi8vVE9ETyhmbG9pdHNjaCk6IFJlbW92ZSBzdXBwb3J0IGZvciBub24tZnVuY3Rpb24gc3Vic3RpdHV0aW9ucy4KY2xhc3MgU3Vic3RpdHV0aW9uIHsKICBmaW5hbCBib29sIGlzVHJpdmlhbDsKICBmaW5hbCBib29sIGlzRnVuY3Rpb247CiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzOwogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHBhcmFtZXRlcnM7CiAgZmluYWwgaW50IGxlbmd0aDsKCiAgY29uc3QgU3Vic3RpdHV0aW9uLnRyaXZpYWwoKQogICAgICA6IGlzVHJpdmlhbCA9IHRydWUsCiAgICAgICAgaXNGdW5jdGlvbiA9IGZhbHNlLAogICAgICAgIGxlbmd0aCA9IG51bGwsCiAgICAgICAgYXJndW1lbnRzID0gY29uc3QgPERhcnRUeXBlPltdLAogICAgICAgIHBhcmFtZXRlcnMgPSBjb25zdCA8RGFydFR5cGU+W107CgogIFN1YnN0aXR1dGlvbi5saXN0KHRoaXMuYXJndW1lbnRzKQogICAgICA6IGlzVHJpdmlhbCA9IGZhbHNlLAogICAgICAgIGlzRnVuY3Rpb24gPSBmYWxzZSwKICAgICAgICBsZW5ndGggPSBudWxsLAogICAgICAgIHBhcmFtZXRlcnMgPSBjb25zdCA8RGFydFR5cGU+W107CgogIFN1YnN0aXR1dGlvbi5mdW5jdGlvbih0aGlzLmFyZ3VtZW50cywgdGhpcy5wYXJhbWV0ZXJzKQogICAgICA6IGlzVHJpdmlhbCA9IGZhbHNlLAogICAgICAgIGlzRnVuY3Rpb24gPSB0cnVlLAogICAgICAgIGxlbmd0aCA9IG51bGw7CgogIFN1YnN0aXR1dGlvbi5qc0ludGVyb3AodGhpcy5sZW5ndGgpCiAgICAgIDogaXNUcml2aWFsID0gZmFsc2UsCiAgICAgICAgaXNGdW5jdGlvbiA9IGZhbHNlLAogICAgICAgIGFyZ3VtZW50cyA9IGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICBwYXJhbWV0ZXJzID0gY29uc3QgPERhcnRUeXBlPltdOwoKICBib29sIGdldCBpc0pzSW50ZXJvcCA9PiBsZW5ndGggIT0gbnVsbDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1N1YnN0aXR1dGlvbihpc1RyaXZpYWw9JGlzVHJpdmlhbCwnCiAgICAgICdpc0Z1bmN0aW9uPSRpc0Z1bmN0aW9uLGlzSnNJbnRlcm9wPSRpc0pzSW50ZXJvcCxhcmd1bWVudHM9JGFyZ3VtZW50cywnCiAgICAgICdwYXJhbWV0ZXJzPSRwYXJhbWV0ZXJzLGxlbmd0aD0kbGVuZ3RoKSc7Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIGNvbXB1dGluZyBzdWJzdGl0dXRpb25zIG5lZWQgZm9yIHJ1bnRpbWUgdHlwZSBjaGVja3MuCmFic3RyYWN0IGNsYXNzIFJ1bnRpbWVUeXBlc1N1YnN0aXR1dGlvbnMgewogIGJvb2wgaXNUcml2aWFsU3Vic3RpdHV0aW9uKENsYXNzRW50aXR5IGNscywgQ2xhc3NFbnRpdHkgY2hlY2spOwoKICBTdWJzdGl0dXRpb24gZ2V0U3Vic3RpdHV0aW9uKENsYXNzRW50aXR5IGNscywgQ2xhc3NFbnRpdHkgb3RoZXIpOwoKICBTZXQ8Q2xhc3NFbnRpdHk+IGdldENsYXNzZXNVc2VkSW5TdWJzdGl0dXRpb25zKFR5cGVDaGVja3MgY2hlY2tzKTsKCiAgc3RhdGljIGJvb2wgaGFzVHlwZUFyZ3VtZW50cyhEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlVHlwZSA9IHR5cGU7CiAgICAgIHJldHVybiAhaW50ZXJmYWNlVHlwZS50cmVhdEFzUmF3OwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KfQqAjgBOTjwBKgEkIQFNDRo6JQEnHwE0Bh8qAU8CAUkhEhkWIwxIHAFAAQwXSQIBKhQqASgBRgEcMR0BHh0EATcBMQEMFiMEAgFQHDowAT4lAgFNLgRGSUxBFRgZIiMUAR8aHBcoKQEkGxwXKQE5GxsXASYbHCgpASoBDDxOMAIBSCtCAUQBRQEwISooBhIEAgE6cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9ydW50aW1lX3R5cGVzX2NvZGVnZW4uZGFydD9zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfbmV3LmRhcnTAAEumLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkganNfYmFja2VuZC5ydW50aW1lX3R5cGVzX25ldzsKCmltcG9ydCAncGFja2FnZTpqc19ydW50aW1lL3NoYXJlZC9yZWNpcGVfc3ludGF4LmRhcnQnOwoKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcKICAgIHNob3cgQ29tbW9uRWxlbWVudHMsIEpDb21tb25FbGVtZW50cywgSkVsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqc0FzdDsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBzaG93IGpzOwppbXBvcnQgJy4uL2pzX21vZGVsL3R5cGVfcmVjaXBlLmRhcnQnOwppbXBvcnQgJy4uL2pzX2VtaXR0ZXIvanNfZW1pdHRlci5kYXJ0JyBzaG93IE1vZHVsYXJFbWl0dGVyOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JzsKaW1wb3J0ICduYW1lci5kYXJ0JzsKaW1wb3J0ICduYXRpdmVfZGF0YS5kYXJ0JzsKaW1wb3J0ICdydW50aW1lX3R5cGVzX2NvZGVnZW4uZGFydCcgc2hvdyBSdW50aW1lVHlwZXNTdWJzdGl0dXRpb25zOwppbXBvcnQgJ3J1bnRpbWVfdHlwZXNfcmVzb2x1dGlvbi5kYXJ0JyBzaG93IFJ1bnRpbWVUeXBlc05lZWQ7CgpjbGFzcyBSZWNpcGVFbmNvZGluZyB7CiAgZmluYWwganNBc3QuTGl0ZXJhbCByZWNpcGU7CiAgZmluYWwgU2V0PFR5cGVWYXJpYWJsZVR5cGU+IHR5cGVWYXJpYWJsZXM7CgogIGNvbnN0IFJlY2lwZUVuY29kaW5nKHRoaXMucmVjaXBlLCB0aGlzLnR5cGVWYXJpYWJsZXMpOwp9CgphYnN0cmFjdCBjbGFzcyBSZWNpcGVFbmNvZGVyIHsKICAvLy8gUmV0dXJucyBhIFtSZWNpcGVFbmNvZGluZ10gcmVwcmVzZW50aW5nIHRoZSBnaXZlbiBbcmVjaXBlXSB0byBiZQogIC8vLyBldmFsdWF0ZWQgYWdhaW5zdCBhIHR5cGUgZW52aXJvbm1lbnQgd2l0aCBzaGFwZSBbc3RydWN0dXJlXS4KICBSZWNpcGVFbmNvZGluZyBlbmNvZGVSZWNpcGUoTW9kdWxhckVtaXR0ZXIgZW1pdHRlciwKICAgICAgVHlwZUVudmlyb25tZW50U3RydWN0dXJlIGVudmlyb25tZW50U3RydWN0dXJlLCBUeXBlUmVjaXBlIHJlY2lwZSk7CgogIGpzQXN0LkxpdGVyYWwgZW5jb2RlR3JvdW5kUmVjaXBlKE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIsIFR5cGVSZWNpcGUgcmVjaXBlKTsKCiAgLy8vIFJldHVybiB0aGUgcmVjaXBlIHdpdGggdHlwZSB2YXJpYWJsZXMgcmVwbGFjZWQgd2l0aCA8YW55Pi4gVGhpcyBpcyBhIGhhY2sKICAvLy8gdW50aWwgRGFydFR5cGUgY29udGFpbnMgPGFueT4gYW5kIHRoZSBwYXJhbWV0ZXIgc3R1YiBlbWl0dGVyIGlzIHJlcGxhY2VkCiAgLy8vIHdpdGggYW4gU1NBIHBhdGguCiAgLy8gVE9ETygzMzQyMik6IFJlbW92ZSBuZWVkIGZvciB0aGlzLgogIGpzQXN0LkxpdGVyYWwgZW5jb2RlUmVjaXBlV2l0aFZhcmlhYmxlc1JlcGxhY2VCeUFueSgKICAgICAgTW9kdWxhckVtaXR0ZXIgZW1pdHRlciwgRGFydFR5cGUgZGFydFR5cGUpOwoKICAvLy8gUmV0dXJucyBhIFtqc0FzdC5MaXRlcmFsXSByZXByZXNlbnRpbmcgW3N1cGVydHlwZUFyZ3VtZW50XSB0byBiZSBldmFsdWF0ZWQKICAvLy8gYWdhaW5zdCBhIFtGdWxsVHlwZUVudmlyb25tZW50U3RydWN0dXJlXSByZXByZXNlbnRpbmcgW2RlY2xhcmluZ1R5cGVdLiBBbnkKICAvLy8gW1R5cGVWYXJpYWJsZVR5cGVdcyBhcHBlYXJpbmcgaW4gW3N1cGVydHlwZUFyZ3VtZW50XSB3aGljaCBhcmUgZGVjbGFyZWQgYnkKICAvLy8gW2RlY2xhcmluZ1R5cGVdIGFyZSBhbHdheXMgZW5jb2RlZCBhcyBpbmRpY2VzLgogIGpzQXN0LkxpdGVyYWwgZW5jb2RlRGlyZWN0U3VwZXJ0eXBlUmVjaXBlKE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIsCiAgICAgIEludGVyZmFjZVR5cGUgZGVjbGFyaW5nVHlwZSwgRGFydFR5cGUgc3VwZXJ0eXBlQXJndW1lbnQpOwoKICAvLy8gQ29udmVydHMgYSByZWNpcGUgaW50byBhIGZyYWdtZW50IG9mIGNvZGUgdGhhdCBhY2Nlc3NlcyB0aGUgZXZhbHVhdGVkCiAgLy8vIHJlY2lwZS4KICAvLyBUT0RPKDMzNDIyKTogUmVtb3ZlIG5lZWQgZm9yIHRoaXMgYnkgcHVzaGluZyBzdHVicyB0aHJvdWdoIFNTQS4KICBqc0FzdC5FeHByZXNzaW9uIGV2YWx1YXRlUmVjaXBlKE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIsIGpzQXN0LkxpdGVyYWwgcmVjaXBlKTsKCiAgLy8gVE9ETyhzcmEpOiBTdGlsbCBuZWVkIGEgJHNpZ25hdHVyZSBmdW5jdGlvbiB3aGVuIHRoZSBmdW5jdGlvbiB0eXBlIGlzIGEKICAvLyBmdW5jdGlvbiBvZiBjbG9zZWQgdHlwZSB2YXJpYWJsZXMuIFNlZSBpZiB0aGUgJHNpZ25hdHVyZSBtZXRob2QgY2FuIGFsd2F5cwogIC8vIGJlIGdlbmVyYXRlZCB0aHJvdWdoIFNTQSBpbiB0aG9zZSBjYXNlcy4KICBqc0FzdC5FeHByZXNzaW9uIGVuY29kZVNpZ25hdHVyZShNb2R1bGFyTmFtZXIgbmFtZXIsIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIsCiAgICAgIERhcnRUeXBlIHR5cGUsIGpzQXN0LkV4cHJlc3Npb24gdGhpc18pOwp9CgpjbGFzcyBSZWNpcGVFbmNvZGVySW1wbCBpbXBsZW1lbnRzIFJlY2lwZUVuY29kZXIgewogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CiAgZmluYWwgUnVudGltZVR5cGVzU3Vic3RpdHV0aW9ucyBfcnRpU3Vic3RpdHV0aW9uczsKICBmaW5hbCBOYXRpdmVCYXNpY0RhdGEgX25hdGl2ZURhdGE7CiAgZmluYWwgSkVsZW1lbnRFbnZpcm9ubWVudCBfZWxlbWVudEVudmlyb25tZW50OwogIGZpbmFsIEpDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50czsKICBmaW5hbCBSdW50aW1lVHlwZXNOZWVkIF9ydGlOZWVkOwoKICBSZWNpcGVFbmNvZGVySW1wbCh0aGlzLl9jbG9zZWRXb3JsZCwgdGhpcy5fcnRpU3Vic3RpdHV0aW9ucywgdGhpcy5fbmF0aXZlRGF0YSwKICAgICAgdGhpcy5fZWxlbWVudEVudmlyb25tZW50LCB0aGlzLmNvbW1vbkVsZW1lbnRzLCB0aGlzLl9ydGlOZWVkKTsKCiAgQG92ZXJyaWRlCiAgUmVjaXBlRW5jb2RpbmcgZW5jb2RlUmVjaXBlKE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIsCiAgICAgIFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSBlbnZpcm9ubWVudFN0cnVjdHVyZSwgVHlwZVJlY2lwZSByZWNpcGUpIHsKICAgIHJldHVybiBfUmVjaXBlR2VuZXJhdG9yKHRoaXMsIGVtaXR0ZXIsIGVudmlyb25tZW50U3RydWN0dXJlLCByZWNpcGUpLnJ1bigpOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTGl0ZXJhbCBlbmNvZGVHcm91bmRSZWNpcGUoTW9kdWxhckVtaXR0ZXIgZW1pdHRlciwgVHlwZVJlY2lwZSByZWNpcGUpIHsKICAgIHJldHVybiBfUmVjaXBlR2VuZXJhdG9yKHRoaXMsIGVtaXR0ZXIsIG51bGwsIHJlY2lwZSkucnVuKCkucmVjaXBlOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTGl0ZXJhbCBlbmNvZGVSZWNpcGVXaXRoVmFyaWFibGVzUmVwbGFjZUJ5QW55KAogICAgICBNb2R1bGFyRW1pdHRlciBlbWl0dGVyLCBEYXJ0VHlwZSBkYXJ0VHlwZSkgewogICAgcmV0dXJuIF9SZWNpcGVHZW5lcmF0b3IodGhpcywgZW1pdHRlciwgbnVsbCwgVHlwZUV4cHJlc3Npb25SZWNpcGUoZGFydFR5cGUpLAogICAgICAgICAgICBoYWNrVHlwZVZhcmlhYmxlc1RvQW55OiB0cnVlKQogICAgICAgIC5ydW4oKQogICAgICAgIC5yZWNpcGU7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5MaXRlcmFsIGVuY29kZURpcmVjdFN1cGVydHlwZVJlY2lwZShNb2R1bGFyRW1pdHRlciBlbWl0dGVyLAogICAgICBJbnRlcmZhY2VUeXBlIGRlY2xhcmluZ1R5cGUsIERhcnRUeXBlIHN1cGVydHlwZUFyZ3VtZW50KSB7CiAgICByZXR1cm4gX1JlY2lwZUdlbmVyYXRvcigKICAgICAgICAgICAgdGhpcywKICAgICAgICAgICAgZW1pdHRlciwKICAgICAgICAgICAgRnVsbFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZShjbGFzc1R5cGU6IGRlY2xhcmluZ1R5cGUpLAogICAgICAgICAgICBUeXBlRXhwcmVzc2lvblJlY2lwZShzdXBlcnR5cGVBcmd1bWVudCksCiAgICAgICAgICAgIGluZGV4VHlwZVZhcmlhYmxlc09uRGVjbGFyaW5nQ2xhc3M6IHRydWUpCiAgICAgICAgLnJ1bigpCiAgICAgICAgLnJlY2lwZTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gZXZhbHVhdGVSZWNpcGUoCiAgICAgIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIsIGpzQXN0LkxpdGVyYWwgcmVjaXBlKSB7CiAgICByZXR1cm4ganMoJyMoIyknLAogICAgICAgIFtlbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGNvbW1vbkVsZW1lbnRzLmZpbmRUeXBlKSwgcmVjaXBlXSk7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIGVuY29kZVNpZ25hdHVyZShNb2R1bGFyTmFtZXIgbmFtZXIsIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIsCiAgICAgIERhcnRUeXBlIHR5cGUsIGpzQXN0LkV4cHJlc3Npb24gdGhpc18pIHsKICAgIC8vIFRPRE8oc3JhKTogVGhlc2UgaW5wdXRzIChyZWZlcmVuY2VkIHRvIHF1ZWxsIGxpbnRzKSBhcmUgdXNlZCBieSB0aGUgb2xkCiAgICAvLyBydGkgc2lnbmF0dXJlIGdlbmVyYXRvci4gRG8gd2UgbmVlZCB0aGVtPwogICAgX3J0aU5lZWQ7CiAgICBjb21tb25FbGVtZW50czsKICAgIF9lbGVtZW50RW52aXJvbm1lbnQ7CiAgICB0aHJvdyBVbmltcGxlbWVudGVkRXJyb3IoJ1JlY2lwZUVuY29kZXJJbXBsLmdldFNpZ25hdHVyZUVuY29kaW5nJyk7CiAgfQp9CgpjbGFzcyBfUmVjaXBlR2VuZXJhdG9yIGltcGxlbWVudHMgRGFydFR5cGVWaXNpdG9yPHZvaWQsIHZvaWQ+IHsKICBmaW5hbCBSZWNpcGVFbmNvZGVySW1wbCBfZW5jb2RlcjsKICBmaW5hbCBNb2R1bGFyRW1pdHRlciBfZW1pdHRlcjsKICBmaW5hbCBUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUgX2Vudmlyb25tZW50OwogIGZpbmFsIFR5cGVSZWNpcGUgX3JlY2lwZTsKICBmaW5hbCBib29sIGluZGV4VHlwZVZhcmlhYmxlc09uRGVjbGFyaW5nQ2xhc3M7CiAgZmluYWwgYm9vbCBoYWNrVHlwZVZhcmlhYmxlc1RvQW55OwoKICBmaW5hbCBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMgPSBbXTsKICBmaW5hbCBTZXQ8VHlwZVZhcmlhYmxlVHlwZT4gdHlwZVZhcmlhYmxlcyA9IHt9OwoKICAvLyBBY2N1bXVsYXRlZCByZWNpcGUuCiAgZmluYWwgTGlzdDxqc0FzdC5MaXRlcmFsPiBfZnJhZ21lbnRzID0gW107CiAgZmluYWwgTGlzdDxpbnQ+IF9jb2RlcyA9IFtdOwoKICBfUmVjaXBlR2VuZXJhdG9yKAogICAgICB0aGlzLl9lbmNvZGVyLCB0aGlzLl9lbWl0dGVyLCB0aGlzLl9lbnZpcm9ubWVudCwgdGhpcy5fcmVjaXBlLAogICAgICB7dGhpcy5pbmRleFR5cGVWYXJpYWJsZXNPbkRlY2xhcmluZ0NsYXNzID0gZmFsc2UsCiAgICAgIHRoaXMuaGFja1R5cGVWYXJpYWJsZXNUb0FueSA9IGZhbHNlfSk7CgogIEpDbG9zZWRXb3JsZCBnZXQgX2Nsb3NlZFdvcmxkID0+IF9lbmNvZGVyLl9jbG9zZWRXb3JsZDsKICBOYXRpdmVCYXNpY0RhdGEgZ2V0IF9uYXRpdmVEYXRhID0+IF9lbmNvZGVyLl9uYXRpdmVEYXRhOwogIFJ1bnRpbWVUeXBlc1N1YnN0aXR1dGlvbnMgZ2V0IF9ydGlTdWJzdGl0dXRpb25zID0+IF9lbmNvZGVyLl9ydGlTdWJzdGl0dXRpb25zOwoKICBSZWNpcGVFbmNvZGluZyBfZmluaXNoRW5jb2RpbmcoanNBc3QuTGl0ZXJhbCBsaXRlcmFsKSA9PgogICAgICBSZWNpcGVFbmNvZGluZyhsaXRlcmFsLCB0eXBlVmFyaWFibGVzKTsKCiAgUmVjaXBlRW5jb2RpbmcgcnVuKCkgewogICAgX3N0YXJ0KF9yZWNpcGUpOwogICAgYXNzZXJ0KGZ1bmN0aW9uVHlwZVZhcmlhYmxlcy5pc0VtcHR5KTsKICAgIGlmIChfZnJhZ21lbnRzLmlzRW1wdHkpIHsKICAgICAgcmV0dXJuIF9maW5pc2hFbmNvZGluZyhqcy5zdHJpbmcoU3RyaW5nLmZyb21DaGFyQ29kZXMoX2NvZGVzKSkpOwogICAgfQogICAgX2ZsdXNoQ29kZXMoKTsKICAgIGpzQXN0LkxpdGVyYWxTdHJpbmcgcXVvdGUgPSBqc0FzdC5MaXRlcmFsU3RyaW5nKCciJyk7CiAgICByZXR1cm4gX2ZpbmlzaEVuY29kaW5nKAogICAgICAgIGpzQXN0LlN0cmluZ0NvbmNhdGVuYXRpb24oW3F1b3RlLCAuLi5fZnJhZ21lbnRzLCBxdW90ZV0pKTsKICB9CgogIHZvaWQgX3N0YXJ0KFR5cGVSZWNpcGUgcmVjaXBlKSB7CiAgICBpZiAocmVjaXBlIGlzIFR5cGVFeHByZXNzaW9uUmVjaXBlKSB7CiAgICAgIHZpc2l0KHJlY2lwZS50eXBlLCBudWxsKTsKICAgIH0gZWxzZSBpZiAocmVjaXBlIGlzIFNpbmdsZXRvblR5cGVFbnZpcm9ubWVudFJlY2lwZSkgewogICAgICB2aXNpdChyZWNpcGUudHlwZSwgbnVsbCk7CiAgICB9IGVsc2UgaWYgKHJlY2lwZSBpcyBGdWxsVHlwZUVudmlyb25tZW50UmVjaXBlKSB7CiAgICAgIF9zdGFydEZ1bGxUeXBlRW52aXJvbm1lbnRSZWNpcGUocmVjaXBlLCBudWxsKTsKICAgIH0KICB9CgogIHZvaWQgX3N0YXJ0RnVsbFR5cGVFbnZpcm9ubWVudFJlY2lwZShGdWxsVHlwZUVudmlyb25tZW50UmVjaXBlIHJlY2lwZSwgXykgewogICAgaWYgKHJlY2lwZS5jbGFzc1R5cGUgPT0gbnVsbCkgewogICAgICBfZW1pdENvZGUoUmVjaXBlLnB1c2hEeW5hbWljKTsKICAgICAgYXNzZXJ0KHJlY2lwZS50eXBlcy5pc05vdEVtcHR5KTsKICAgIH0gZWxzZSB7CiAgICAgIHZpc2l0KHJlY2lwZS5jbGFzc1R5cGUsIG51bGwpOwogICAgICAvLyBUT0RPKHNyYSk6IFRoZSBzZXBhcmF0b3IgY2FuIGJlIG9taXR0ZWQgd2hlbiB0aGUgcGFyc2VyIHdpbGwgaGF2ZQogICAgICAvLyByZWR1Y2VkIHRvIHRoZSB0b3Agb2Ygc3RhY2sgdG8gYW4gUnRpIHZhbHVlLgogICAgICBfZW1pdENvZGUoUmVjaXBlLnRvVHlwZSk7CiAgICB9CgogICAgaWYgKHJlY2lwZS50eXBlcy5pc05vdEVtcHR5KSB7CiAgICAgIF9lbWl0Q29kZShSZWNpcGUuc3RhcnRUeXBlQXJndW1lbnRzKTsKICAgICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICAgIGZvciAoRGFydFR5cGUgdHlwZSBpbiByZWNpcGUudHlwZXMpIHsKICAgICAgICBpZiAoIWZpcnN0KSB7CiAgICAgICAgICBfZW1pdENvZGUoUmVjaXBlLnNlcGFyYXRvcik7CiAgICAgICAgfQogICAgICAgIHZpc2l0KHR5cGUsIF8pOwogICAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICAgIH0KICAgICAgX2VtaXRDb2RlKFJlY2lwZS5lbmRUeXBlQXJndW1lbnRzKTsKICAgIH0KICB9CgogIHZvaWQgX2VtaXRDb2RlKGludCBjb2RlKSB7CiAgICAvLyBUT0RPKHNyYSk6IFdlIHNob3VsZCBwZXJtaXQgY29kZXMgd2l0aCBzaG9ydCBlc2NhcGVzIChsaWtlICdcbicpIGZvcgogICAgLy8gaW5mcmVxdWVudCBvcGVyYXRvcnMuCiAgICBhc3NlcnQoY29kZSA+PSAweDIwICYmIGNvZGUgPD0gMHg3RSAmJiBjb2RlICE9IDB4MjIpOwogICAgX2NvZGVzLmFkZChjb2RlKTsKICB9CgogIHZvaWQgX2ZsdXNoQ29kZXMoKSB7CiAgICBpZiAoX2NvZGVzLmlzRW1wdHkpIHJldHVybjsKICAgIC8vIFRPRE8oc3JhKTogY29kZXMgbmVlZCBzb21lIGVzY2FwaW5nLgogICAgX2ZyYWdtZW50cy5hZGQoU3RyaW5nQmFja2VkTmFtZShTdHJpbmcuZnJvbUNoYXJDb2RlcyhfY29kZXMpKSk7CiAgICBfY29kZXMuY2xlYXIoKTsKICB9CgogIHZvaWQgX2VtaXRJbnRlZ2VyKGludCB2YWx1ZSkgewogICAgaWYgKF9jb2Rlcy5pc0VtcHR5ID8gX2ZyYWdtZW50cy5pc05vdEVtcHR5IDogUmVjaXBlLmlzRGlnaXQoX2NvZGVzLmxhc3QpKSB7CiAgICAgIF9lbWl0Q29kZShSZWNpcGUuc2VwYXJhdG9yKTsKICAgIH0KICAgIF9lbWl0U3RyaW5nVW5lc2NhcGVkKCckdmFsdWUnKTsKICB9CgogIHZvaWQgX2VtaXRTdHJpbmdVbmVzY2FwZWQoU3RyaW5nIHN0cmluZykgewogICAgZm9yIChpbnQgY29kZSBpbiBzdHJpbmcuY29kZVVuaXRzKSB7CiAgICAgIF9lbWl0Q29kZShjb2RlKTsKICAgIH0KICB9CgogIHZvaWQgX2VtaXROYW1lKGpzQXN0Lk5hbWUgbmFtZSkgewogICAgaWYgKF9mcmFnbWVudHMuaXNOb3RFbXB0eSAmJiBfY29kZXMuaXNFbXB0eSkgewogICAgICBfZW1pdENvZGUoUmVjaXBlLnNlcGFyYXRvcik7CiAgICB9CiAgICBfZmx1c2hDb2RlcygpOwogICAgX2ZyYWdtZW50cy5hZGQobmFtZSk7CiAgfQoKICB2b2lkIF9lbWl0RXh0ZW5zaW9uT3AoaW50IHZhbHVlKSB7CiAgICBfZW1pdEludGVnZXIodmFsdWUpOwogICAgX2VtaXRDb2RlKFJlY2lwZS5leHRlbnNpb25PcCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0KERhcnRUeXBlIHR5cGUsIF8pID0+IHR5cGUuYWNjZXB0KHRoaXMsIF8pOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZVZhcmlhYmxlVHlwZShUeXBlVmFyaWFibGVUeXBlIHR5cGUsIF8pIHsKICAgIGlmIChoYWNrVHlwZVZhcmlhYmxlc1RvQW55KSB7CiAgICAgIC8vIEVtaXQgJ2FueScgdHlwZS4KICAgICAgX2VtaXRFeHRlbnNpb25PcChSZWNpcGUucHVzaEFueUV4dGVuc2lvbik7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUgZW52aXJvbm1lbnQgPSBfZW52aXJvbm1lbnQ7CiAgICBpZiAoZW52aXJvbm1lbnQgaXMgU2luZ2xldG9uVHlwZUVudmlyb25tZW50U3RydWN0dXJlKSB7CiAgICAgIGlmICh0eXBlID09IGVudmlyb25tZW50LnZhcmlhYmxlKSB7CiAgICAgICAgX2VtaXRJbnRlZ2VyKDApOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgaWYgKGVudmlyb25tZW50IGlzIEZ1bGxUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUpIHsKICAgICAgaW50IGkgPSBlbnZpcm9ubWVudC5iaW5kaW5ncy5pbmRleE9mKHR5cGUpOwogICAgICBpZiAoaSA+PSAwKSB7CiAgICAgICAgLy8gSW5kZXhlcyBhcmUgMS1iYXNlZCBzaW5jZSAnMCcgZW5jb2RlcyB1c2luZyB0aGUgZW50aXJlIHR5cGUgZm9yIHRoZQogICAgICAgIC8vIHNpbmdsZXRvbiBzdHJ1Y3R1cmUuCiAgICAgICAgX2VtaXRJbnRlZ2VyKGkgKyAxKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGludCBpbmRleCA9IF9pbmRleEludG9DbGFzc1R5cGVWYXJpYWJsZXModHlwZSk7CiAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7CiAgICAgICAgLy8gSW5kZXhlZCBjbGFzcyB0eXBlIHZhcmlhYmxlcyBjb21lIGFmdGVyIHRoZSBib3VuZCBmdW5jdGlvbiB0eXBlCiAgICAgICAgLy8gdmFyaWFibGVzLgogICAgICAgIF9lbWl0SW50ZWdlcigxICsgZW52aXJvbm1lbnQuYmluZGluZ3MubGVuZ3RoICsgaW5kZXgpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBqc0FzdC5OYW1lIG5hbWUgPSBfZW1pdHRlci50eXBlVmFyaWFibGVBY2Nlc3NOZXdSdGkodHlwZS5lbGVtZW50KTsKICAgICAgX2VtaXROYW1lKG5hbWUpOwogICAgICB0eXBlVmFyaWFibGVzLmFkZCh0eXBlKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gVE9ETyhzcmEpOiBIYW5kbGUgbWlzc2luZyBjYXNlcy4gVGhpcyBqdXN0IGVtaXRzIHNvbWUgcmVhZGFibGUganVuay4gVGhlCiAgICAvLyBiYWNrdGlja3MgZW5zdXJlIGl0IHdvbid0IHBhcnNlIGF0IHJ1bnRpbWUuCiAgICAnYCR0eXBlYCcuY29kZVVuaXRzLmZvckVhY2goX2VtaXRDb2RlKTsKICB9CgogIGludCAvKj8qLyBfaW5kZXhJbnRvQ2xhc3NUeXBlVmFyaWFibGVzKFR5cGVWYXJpYWJsZVR5cGUgdmFyaWFibGUpIHsKICAgIFR5cGVWYXJpYWJsZUVudGl0eSBlbGVtZW50ID0gdmFyaWFibGUuZWxlbWVudDsKICAgIENsYXNzRW50aXR5IGNscyA9IGVsZW1lbnQudHlwZURlY2xhcmF0aW9uOwoKICAgIGlmIChpbmRleFR5cGVWYXJpYWJsZXNPbkRlY2xhcmluZ0NsYXNzKSB7CiAgICAgIFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSBlbnZpcm9ubWVudCA9IF9lbnZpcm9ubWVudDsKICAgICAgaWYgKGVudmlyb25tZW50IGlzIEZ1bGxUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUpIHsKICAgICAgICBpZiAoaWRlbnRpY2FsKGVudmlyb25tZW50LmNsYXNzVHlwZS5lbGVtZW50LCBjbHMpKSB7CiAgICAgICAgICByZXR1cm4gZWxlbWVudC5pbmRleDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBUT0RPKHNyYSk6IFdlIG1pZ2h0IGJlIGluIGEgY29udGV4dCB3aGVyZSB0aGUgY2xhc3MgdHlwZSB2YXJpYWJsZSBoYXMgYW4KICAgIC8vIGluZGV4LCBldmVuIHRob3VnaCBpbiB0aGUgZ2VuZXJhbCBjYXNlIGl0IGlzIG5vdCBhdCBhIHNwZWNpZmljIGluZGV4LgoKICAgIGlmIChfY2xvc2VkV29ybGQuaXNVc2VkQXNNaXhpbihjbHMpKSByZXR1cm4gbnVsbDsKCiAgICAvLyBUT0RPKGZpc2h5dGhlZmlzaCk6IFdlIHNob3VsZCBvbmx5IGNoZWNrIHN0cmljdCBzdWJjbGFzc2VzIGZvcgogICAgLy8gbm9uLXRyaXZpYWwgc3Vic3RpdHV0aW9ucyBpbiB0aGUgZ2VuZXJhbCBjYXNlLiBXZSBzaG91bGQgY2hlY2sgYWxsIHN0cmljdAogICAgLy8gc3VidHlwZXMgb25seSB3aGVuIFtjbHNdIGlzIGEgbWl4aW4gKGFib3ZlKSBvciB3aGVuIFtjbHNdIGlzIGEgdHlwZQogICAgLy8gYXJndW1lbnQgdG8gYGV4dHJhY3RUeXBlQXJndW1lbnRzYC4KICAgIENsYXNzSGllcmFyY2h5IGNsYXNzSGllcmFyY2h5ID0gX2Nsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5OwogICAgaWYgKGNsYXNzSGllcmFyY2h5LmFueVN0cmljdFN1YnR5cGVPZihjbHMsIChDbGFzc0VudGl0eSBzdWJjbGFzcykgewogICAgICByZXR1cm4gIV9ydGlTdWJzdGl0dXRpb25zLmlzVHJpdmlhbFN1YnN0aXR1dGlvbihzdWJjbGFzcywgY2xzKTsKICAgIH0pKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIGVsZW1lbnQuaW5kZXg7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RnVuY3Rpb25UeXBlVmFyaWFibGUoRnVuY3Rpb25UeXBlVmFyaWFibGUgdHlwZSwgXykgewogICAgaW50IHBvc2l0aW9uID0gZnVuY3Rpb25UeXBlVmFyaWFibGVzLmluZGV4T2YodHlwZSk7CiAgICBhc3NlcnQocG9zaXRpb24gPj0gMCk7CiAgICAvLyBTZWUgW3Zpc2l0RnVuY3Rpb25UeXBlXSBmb3IgZXhwbGFuYXRpb24uCiAgICBfZW1pdEludGVnZXIoZnVuY3Rpb25UeXBlVmFyaWFibGVzLmxlbmd0aCAtIHBvc2l0aW9uIC0gMSk7CiAgICBfZW1pdENvZGUoUmVjaXBlLmdlbmVyaWNGdW5jdGlvblR5cGVQYXJhbWV0ZXJJbmRleCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RHluYW1pY1R5cGUoRHluYW1pY1R5cGUgdHlwZSwgXykgewogICAgX2VtaXRDb2RlKFJlY2lwZS5wdXNoRHluYW1pYyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QW55VHlwZShBbnlUeXBlIHR5cGUsIF8pIHsKICAgIF9lbWl0RXh0ZW5zaW9uT3AoUmVjaXBlLnB1c2hBbnlFeHRlbnNpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludGVyZmFjZVR5cGUoSW50ZXJmYWNlVHlwZSB0eXBlLCBfKSB7CiAgICBqc0FzdC5OYW1lIG5hbWUgPSBfZW1pdHRlci50eXBlQWNjZXNzTmV3UnRpKHR5cGUuZWxlbWVudCk7CiAgICBpZiAodHlwZS50eXBlQXJndW1lbnRzLmlzRW1wdHkpIHsKICAgICAgLy8gUHVzaCB0aGUgbmFtZSwgd2hpY2ggaXMgbGF0ZXIgY29udmVydGVkIGJ5IGFuIGltcGxpY2l0IHRvVHlwZQogICAgICAvLyBvcGVyYXRpb24uCiAgICAgIF9lbWl0TmFtZShuYW1lKTsKICAgIH0gZWxzZSB7CiAgICAgIF9lbWl0TmFtZShuYW1lKTsKICAgICAgX2VtaXRDb2RlKFJlY2lwZS5zdGFydFR5cGVBcmd1bWVudHMpOwogICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgICAgZm9yIChEYXJ0VHlwZSBhcmd1bWVudFR5cGUgaW4gdHlwZS50eXBlQXJndW1lbnRzKSB7CiAgICAgICAgaWYgKCFmaXJzdCkgewogICAgICAgICAgX2VtaXRDb2RlKFJlY2lwZS5zZXBhcmF0b3IpOwogICAgICAgIH0KICAgICAgICBpZiAoX25hdGl2ZURhdGEuaXNKc0ludGVyb3BDbGFzcyh0eXBlLmVsZW1lbnQpKSB7CiAgICAgICAgICAvLyBFbWl0ICdhbnknIHR5cGUuCiAgICAgICAgICBfZW1pdEV4dGVuc2lvbk9wKFJlY2lwZS5wdXNoQW55RXh0ZW5zaW9uKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmlzaXQoYXJndW1lbnRUeXBlLCBfKTsKICAgICAgICB9CiAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgfQogICAgICBfZW1pdENvZGUoUmVjaXBlLmVuZFR5cGVBcmd1bWVudHMpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZ1bmN0aW9uVHlwZShGdW5jdGlvblR5cGUgdHlwZSwgXykgewogICAgaWYgKHR5cGUudHlwZVZhcmlhYmxlcy5pc05vdEVtcHR5KSB7CiAgICAgIC8vIEVudGVyIGdlbmVyaWMgZnVuY3Rpb24gc2NvcGUuCiAgICAgIC8vCiAgICAgIC8vIEZ1bmN0aW9uIHR5cGUgdmFyaWFibGVzIGFyZSBlbmNvZGVkIGFzIGEgbW9kaWZpZWQgZGUgQnJ1aW4gaW5kZXguIFdlCiAgICAgIC8vIGNvdW50IHZhcmlhYmxlcyBmcm9tIHRoZSBjdXJyZW50IHNjb3BlIG91dHdhcmRzLCBjb3VudGluZyB0aGUgdmFyaWFibGVzCiAgICAgIC8vIGluIHRoZSBzYW1lIHNjb3BlIGxlZnQtdG8tcmlnaHQuCiAgICAgIC8vCiAgICAgIC8vIElmIHdlIHB1c2ggdGhlIGN1cnJlbnQgc2NvcGUncyB2YXJpYWJsZXMgaW4gcmV2ZXJzZSwgdGhlbiB0aGUgaW5kZXggaXMKICAgICAgLy8gdGhlIHBvc2l0aW9uIG1lYXN1cmVkIGZyb20gdGhlIGVuZC4KICAgICAgLy8KICAgICAgLy8gICAgZm9vPEFBLEJCPigpID0+IC4uLgogICAgICAvLyAgICAgIC8vXjAgXjEKICAgICAgLy8gICAgZnVuY3Rpb25UeXBlVmFyaWFibGVzOiBbQkIsQUFdCiAgICAgIC8vCiAgICAgIC8vICAgIGZvbzxBQSxCQj4oKSA9PiA8VVUsVlYsV1c+KCkgPT4gLi4uCiAgICAgIC8vICAgICAgICBeMyBeNCAgICAgICAgXjAgXjEgXjIKICAgICAgLy8gICAgZnVuY3Rpb25UeXBlVmFyaWFibGVzOiBbQkIsQUEsV1csVlYsVVVdCiAgICAgIC8vCiAgICAgIGZvciAoRnVuY3Rpb25UeXBlVmFyaWFibGUgdmFyaWFibGUgaW4gdHlwZS50eXBlVmFyaWFibGVzLnJldmVyc2VkKSB7CiAgICAgICAgZnVuY3Rpb25UeXBlVmFyaWFibGVzLmFkZCh2YXJpYWJsZSk7CiAgICAgIH0KICAgIH0KCiAgICB2aXNpdCh0eXBlLnJldHVyblR5cGUsIF8pOwogICAgX2VtaXRDb2RlKFJlY2lwZS5zdGFydEZ1bmN0aW9uQXJndW1lbnRzKTsKCiAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgIGZvciAoRGFydFR5cGUgcGFyYW1ldGVyVHlwZSBpbiB0eXBlLnBhcmFtZXRlclR5cGVzKSB7CiAgICAgIGlmICghZmlyc3QpIHsKICAgICAgICBfZW1pdENvZGUoUmVjaXBlLnNlcGFyYXRvcik7CiAgICAgIH0KICAgICAgdmlzaXQocGFyYW1ldGVyVHlwZSwgXyk7CiAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICB9CgogICAgaWYgKHR5cGUub3B0aW9uYWxQYXJhbWV0ZXJUeXBlcy5pc05vdEVtcHR5KSB7CiAgICAgIGZpcnN0ID0gdHJ1ZTsKICAgICAgX2VtaXRDb2RlKFJlY2lwZS5zdGFydE9wdGlvbmFsR3JvdXApOwogICAgICBmb3IgKERhcnRUeXBlIHBhcmFtZXRlclR5cGUgaW4gdHlwZS5vcHRpb25hbFBhcmFtZXRlclR5cGVzKSB7CiAgICAgICAgaWYgKCFmaXJzdCkgewogICAgICAgICAgX2VtaXRDb2RlKFJlY2lwZS5zZXBhcmF0b3IpOwogICAgICAgIH0KICAgICAgICB2aXNpdChwYXJhbWV0ZXJUeXBlLCBfKTsKICAgICAgICBmaXJzdCA9IGZhbHNlOwogICAgICB9CiAgICAgIF9lbWl0Q29kZShSZWNpcGUuZW5kT3B0aW9uYWxHcm91cCk7CiAgICB9CgogICAgdm9pZCBlbWl0TmFtZWRHcm91cChMaXN0PFN0cmluZz4gbmFtZXMsIExpc3Q8RGFydFR5cGU+IHR5cGVzKSB7CiAgICAgIGFzc2VydChuYW1lcy5sZW5ndGggPT0gdHlwZXMubGVuZ3RoKTsKICAgICAgZmlyc3QgPSB0cnVlOwogICAgICBfZW1pdENvZGUoUmVjaXBlLnN0YXJ0TmFtZWRHcm91cCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoIWZpcnN0KSB7CiAgICAgICAgICBfZW1pdENvZGUoUmVjaXBlLnNlcGFyYXRvcik7CiAgICAgICAgfQogICAgICAgIF9lbWl0U3RyaW5nVW5lc2NhcGVkKG5hbWVzW2ldKTsKICAgICAgICBfZW1pdENvZGUoUmVjaXBlLm5hbWVTZXBhcmF0b3IpOwogICAgICAgIHZpc2l0KHR5cGVzW2ldLCBfKTsKICAgICAgICBmaXJzdCA9IGZhbHNlOwogICAgICB9CiAgICAgIF9lbWl0Q29kZShSZWNpcGUuZW5kTmFtZWRHcm91cCk7CiAgICB9CgogICAgLy8gVE9ETyhzcmEpOiBUaGVzZSBhcmUgb3B0aW9uYWwgbmFtZWQgcGFyYW1ldGVycy4gSGFuZGxlIHJlcXVpcmVkIG5hbWVkCiAgICAvLyBwYXJhbWV0ZXJzIHRoZSBzYW1lIHdheSB3aGVuIHRoZXkgYXJlIGltcGxlbWVudGVkLgogICAgaWYgKHR5cGUubmFtZWRQYXJhbWV0ZXJUeXBlcy5pc05vdEVtcHR5KSB7CiAgICAgIGVtaXROYW1lZEdyb3VwKHR5cGUubmFtZWRQYXJhbWV0ZXJzLCB0eXBlLm5hbWVkUGFyYW1ldGVyVHlwZXMpOwogICAgfQoKICAgIF9lbWl0Q29kZShSZWNpcGUuZW5kRnVuY3Rpb25Bcmd1bWVudHMpOwoKICAgIC8vIEVtaXQgZ2VuZXJpYyB0eXBlIGJvdW5kcy4KICAgIGlmICh0eXBlLnR5cGVWYXJpYWJsZXMuaXNOb3RFbXB0eSkgewogICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgICAgX2VtaXRDb2RlKFJlY2lwZS5zdGFydFR5cGVBcmd1bWVudHMpOwogICAgICBmb3IgKEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHR5cGVWYXJpYWJsZSBpbiB0eXBlLnR5cGVWYXJpYWJsZXMpIHsKICAgICAgICBpZiAoIWZpcnN0KSB7CiAgICAgICAgICBfZW1pdENvZGUoUmVjaXBlLnNlcGFyYXRvcik7CiAgICAgICAgfQogICAgICAgIHZpc2l0KHR5cGVWYXJpYWJsZS5ib3VuZCwgXyk7CiAgICAgIH0KICAgICAgX2VtaXRDb2RlKFJlY2lwZS5lbmRUeXBlQXJndW1lbnRzKTsKICAgIH0KCiAgICBpZiAodHlwZS50eXBlVmFyaWFibGVzLmlzTm90RW1wdHkpIHsKICAgICAgLy8gRXhpdCBnZW5lcmljIGZ1bmN0aW9uIHNjb3BlLiBSZW1vdmUgdGhlIHR5cGUgdmFyaWFibGVzIHB1c2hlZCBhdCBlbnRyeS4KICAgICAgZnVuY3Rpb25UeXBlVmFyaWFibGVzLmxlbmd0aCAtPSB0eXBlLnR5cGVWYXJpYWJsZXMubGVuZ3RoOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFZvaWRUeXBlKFZvaWRUeXBlIHR5cGUsIF8pIHsKICAgIF9lbWl0Q29kZShSZWNpcGUucHVzaFZvaWQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVkZWZUeXBlKFR5cGVkZWZUeXBlIHR5cGUsIF8pIHsKICAgIHZpc2l0KHR5cGUudW5hbGlhc2VkLCBfKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGdXR1cmVPclR5cGUoRnV0dXJlT3JUeXBlIHR5cGUsIF8pIHsKICAgIHZpc2l0KHR5cGUudHlwZUFyZ3VtZW50LCBfKTsKICAgIF9lbWl0Q29kZShSZWNpcGUud3JhcEZ1dHVyZU9yKTsKICB9Cn0KCmNsYXNzIF9SdWxlc2V0RW50cnkgewogIGZpbmFsIEludGVyZmFjZVR5cGUgX3RhcmdldFR5cGU7CiAgTGlzdDxJbnRlcmZhY2VUeXBlPiBfc3VwZXJ0eXBlczsKICBNYXA8VHlwZVZhcmlhYmxlVHlwZSwgRGFydFR5cGU+IF90eXBlVmFyaWFibGVzOwoKICBfUnVsZXNldEVudHJ5KAogICAgICB0aGlzLl90YXJnZXRUeXBlLCBJdGVyYWJsZTxJbnRlcmZhY2VUeXBlPiBzdXBlcnR5cGVzLCB0aGlzLl90eXBlVmFyaWFibGVzKQogICAgICA6IF9zdXBlcnR5cGVzID0gc3VwZXJ0eXBlcy50b0xpc3QoKTsKCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfc3VwZXJ0eXBlcy5pc0VtcHR5ICYmIF90eXBlVmFyaWFibGVzLmlzRW1wdHk7Cn0KCmNsYXNzIFJ1bGVzZXQgewogIExpc3Q8X1J1bGVzZXRFbnRyeT4gX2VudHJpZXM7CgogIFJ1bGVzZXQodGhpcy5fZW50cmllcyk7CiAgUnVsZXNldC5lbXB0eSgpIDogdGhpcyhbXSk7CgogIHZvaWQgYWRkKEludGVyZmFjZVR5cGUgdGFyZ2V0VHlwZSwgSXRlcmFibGU8SW50ZXJmYWNlVHlwZT4gc3VwZXJ0eXBlcywKICAgICAgICAgIE1hcDxUeXBlVmFyaWFibGVUeXBlLCBEYXJ0VHlwZT4gdHlwZVZhcmlhYmxlcykgPT4KICAgICAgX2VudHJpZXMuYWRkKF9SdWxlc2V0RW50cnkodGFyZ2V0VHlwZSwgc3VwZXJ0eXBlcywgdHlwZVZhcmlhYmxlcykpOwp9CgpjbGFzcyBSdWxlc2V0RW5jb2RlciB7CiAgZmluYWwgRGFydFR5cGVzIF9kYXJ0VHlwZXM7CiAgZmluYWwgTW9kdWxhckVtaXR0ZXIgX2VtaXR0ZXI7CiAgZmluYWwgUmVjaXBlRW5jb2RlciBfcmVjaXBlRW5jb2RlcjsKCiAgUnVsZXNldEVuY29kZXIodGhpcy5fZGFydFR5cGVzLCB0aGlzLl9lbWl0dGVyLCB0aGlzLl9yZWNpcGVFbmNvZGVyKTsKCiAgQ29tbW9uRWxlbWVudHMgZ2V0IF9jb21tb25FbGVtZW50cyA9PiBfZGFydFR5cGVzLmNvbW1vbkVsZW1lbnRzOwogIENsYXNzRW50aXR5IGdldCBfb2JqZWN0Q2xhc3MgPT4gX2NvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzOwoKICBmaW5hbCBfbGVmdEJyYWNlID0ganMuc3RyaW5nUGFydCgneycpOwogIGZpbmFsIF9yaWdodEJyYWNlID0ganMuc3RyaW5nUGFydCgnfScpOwogIGZpbmFsIF9sZWZ0QnJhY2tldCA9IGpzLnN0cmluZ1BhcnQoJ1snKTsKICBmaW5hbCBfcmlnaHRCcmFja2V0ID0ganMuc3RyaW5nUGFydCgnXScpOwogIGZpbmFsIF9jb2xvbiA9IGpzLnN0cmluZ1BhcnQoJzonKTsKICBmaW5hbCBfY29tbWEgPSBqcy5zdHJpbmdQYXJ0KCcsJyk7CiAgZmluYWwgX3F1b3RlID0ganMuc3RyaW5nUGFydCgiJyIpOwoKICBib29sIF9pc09iamVjdChJbnRlcmZhY2VUeXBlIHR5cGUpID0+IGlkZW50aWNhbCh0eXBlLmVsZW1lbnQsIF9vYmplY3RDbGFzcyk7CgogIHZvaWQgX3ByZXByb2Nlc3NFbnRyeShfUnVsZXNldEVudHJ5IGVudHJ5KSB7CiAgICBlbnRyeS5fc3VwZXJ0eXBlcy5yZW1vdmVXaGVyZSgoSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUpID0+CiAgICAgICAgX2lzT2JqZWN0KHN1cGVydHlwZSkgfHwgaWRlbnRpY2FsKGVudHJ5Ll90YXJnZXRUeXBlLCBzdXBlcnR5cGUpKTsKICB9CgogIHZvaWQgX3ByZXByb2Nlc3NSdWxlc2V0KFJ1bGVzZXQgcnVsZXNldCkgewogICAgcnVsZXNldC5fZW50cmllcwogICAgICAgIC5yZW1vdmVXaGVyZSgoX1J1bGVzZXRFbnRyeSBlbnRyeSkgPT4gX2lzT2JqZWN0KGVudHJ5Ll90YXJnZXRUeXBlKSk7CiAgICBydWxlc2V0Ll9lbnRyaWVzLmZvckVhY2goX3ByZXByb2Nlc3NFbnRyeSk7CiAgICBydWxlc2V0Ll9lbnRyaWVzLnJlbW92ZVdoZXJlKChfUnVsZXNldEVudHJ5IGVudHJ5KSA9PiBlbnRyeS5pc0VtcHR5KTsKICB9CgogIC8vIFRPRE8oZmlzaHl0aGVmaXNoKTogQ29tbW9uIHN1YnN0cmluZyBlbGltaW5hdGlvbi4KCiAgLy8vIFByb2R1Y2VzIGEgc3RyaW5nIHJlYWRhYmxlIGJ5IGBKU09OLnBhcnNlKClgLgogIGpzQXN0LlN0cmluZ0NvbmNhdGVuYXRpb24gZW5jb2RlUnVsZXNldChSdWxlc2V0IHJ1bGVzZXQpIHsKICAgIF9wcmVwcm9jZXNzUnVsZXNldChydWxlc2V0KTsKICAgIHJldHVybiBfZW5jb2RlUnVsZXNldChydWxlc2V0KTsKICB9CgogIGpzQXN0LlN0cmluZ0NvbmNhdGVuYXRpb24gX2VuY29kZVJ1bGVzZXQoUnVsZXNldCBydWxlc2V0KSA9PgogICAgICBqcy5jb25jYXRlbmF0ZVN0cmluZ3MoWwogICAgICAgIF9xdW90ZSwKICAgICAgICBfbGVmdEJyYWNlLAogICAgICAgIC4uLmpzLmpvaW5MaXRlcmFscyhydWxlc2V0Ll9lbnRyaWVzLm1hcChfZW5jb2RlRW50cnkpLCBfY29tbWEpLAogICAgICAgIF9yaWdodEJyYWNlLAogICAgICAgIF9xdW90ZSwKICAgICAgXSk7CgogIGpzQXN0LlN0cmluZ0NvbmNhdGVuYXRpb24gX2VuY29kZUVudHJ5KF9SdWxlc2V0RW50cnkgZW50cnkpID0+CiAgICAgIGpzLmNvbmNhdGVuYXRlU3RyaW5ncyhbCiAgICAgICAganMucXVvdGVOYW1lKF9lbWl0dGVyLnR5cGVBY2Nlc3NOZXdSdGkoZW50cnkuX3RhcmdldFR5cGUuZWxlbWVudCkpLAogICAgICAgIF9jb2xvbiwKICAgICAgICBfbGVmdEJyYWNlLAogICAgICAgIC4uLmpzLmpvaW5MaXRlcmFscyhbCiAgICAgICAgICAuLi5lbnRyeS5fc3VwZXJ0eXBlcy5tYXAoKEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlKSA9PgogICAgICAgICAgICAgIF9lbmNvZGVTdXBlcnR5cGUoZW50cnkuX3RhcmdldFR5cGUsIHN1cGVydHlwZSkpLAogICAgICAgICAgLi4uZW50cnkuX3R5cGVWYXJpYWJsZXMuZW50cmllcy5tYXAoKG1hcEVudHJ5KSA9PiBfZW5jb2RlVHlwZVZhcmlhYmxlKAogICAgICAgICAgICAgIGVudHJ5Ll90YXJnZXRUeXBlLCBtYXBFbnRyeS5rZXksIG1hcEVudHJ5LnZhbHVlKSkKICAgICAgICBdLCBfY29tbWEpLAogICAgICAgIF9yaWdodEJyYWNlLAogICAgICBdKTsKCiAganNBc3QuU3RyaW5nQ29uY2F0ZW5hdGlvbiBfZW5jb2RlU3VwZXJ0eXBlKAogICAgICAgICAgSW50ZXJmYWNlVHlwZSB0YXJnZXRUeXBlLCBJbnRlcmZhY2VUeXBlIHN1cGVydHlwZSkgPT4KICAgICAganMuY29uY2F0ZW5hdGVTdHJpbmdzKFsKICAgICAgICBqcy5xdW90ZU5hbWUoX2VtaXR0ZXIudHlwZUFjY2Vzc05ld1J0aShzdXBlcnR5cGUuZWxlbWVudCkpLAogICAgICAgIF9jb2xvbiwKICAgICAgICBfbGVmdEJyYWNrZXQsCiAgICAgICAgLi4uanMuam9pbkxpdGVyYWxzKAogICAgICAgICAgICBzdXBlcnR5cGUudHlwZUFyZ3VtZW50cy5tYXAoKERhcnRUeXBlIHN1cGVydHlwZUFyZ3VtZW50KSA9PgogICAgICAgICAgICAgICAgX2VuY29kZVN1cGVydHlwZUFyZ3VtZW50KHRhcmdldFR5cGUsIHN1cGVydHlwZUFyZ3VtZW50KSksCiAgICAgICAgICAgIF9jb21tYSksCiAgICAgICAgX3JpZ2h0QnJhY2tldCwKICAgICAgXSk7CgogIGpzQXN0LlN0cmluZ0NvbmNhdGVuYXRpb24gX2VuY29kZVR5cGVWYXJpYWJsZShJbnRlcmZhY2VUeXBlIHRhcmdldFR5cGUsCiAgICAgICAgICBUeXBlVmFyaWFibGVUeXBlIHR5cGVWYXJpYWJsZSwgRGFydFR5cGUgc3VwZXJ0eXBlQXJndW1lbnQpID0+CiAgICAgIGpzLmNvbmNhdGVuYXRlU3RyaW5ncyhbCiAgICAgICAganMucXVvdGVOYW1lKF9lbWl0dGVyLnR5cGVWYXJpYWJsZUFjY2Vzc05ld1J0aSh0eXBlVmFyaWFibGUuZWxlbWVudCkpLAogICAgICAgIF9jb2xvbiwKICAgICAgICBfZW5jb2RlU3VwZXJ0eXBlQXJndW1lbnQodGFyZ2V0VHlwZSwgc3VwZXJ0eXBlQXJndW1lbnQpLAogICAgICBdKTsKCiAganNBc3QuTGl0ZXJhbCBfZW5jb2RlU3VwZXJ0eXBlQXJndW1lbnQoCiAgICAgICAgICBJbnRlcmZhY2VUeXBlIHRhcmdldFR5cGUsIERhcnRUeXBlIHN1cGVydHlwZUFyZ3VtZW50KSA9PgogICAgICBfcmVjaXBlRW5jb2Rlci5lbmNvZGVEaXJlY3RTdXBlcnR5cGVSZWNpcGUoCiAgICAgICAgICBfZW1pdHRlciwgdGFyZ2V0VHlwZSwgc3VwZXJ0eXBlQXJndW1lbnQpOwp9CoJKAE5OPAEmATcBIT8kISEgJzwrGBUbRD4BFx4tATkCAR9HQzZJAU8BUE8YKDcyAVFRUTVEQAFMDkVRAU1QLk8uAgEzIzUlMSgjAVFFAQw2SlAEAQxQRwQBDDczUSoPEQQBDERBHRIVRDU2DxEEAQwjNhZKBAEMTy9PMQ4UGUgEAgFAJCEvHDElAT8yARktHwEURTgtATo7UQE7LgEZFSseRwYTOhxDBAEjKiA7IDY1BgQBTiQlJw0lSzYgBgEjLBksFicKGBcIKgYEAR1MHToWBAEXICxEFAQBIVAjBiQEAS0pFwYEASQzIwYTGgQBJRkjBAEMOAEMOSIaMQ4GATk8KhkQCAY3MhRPIB0QCAE2G0sWPxAISRcfDgZQMywEAUYzLwEuOzk9IAoIBgFQTQE2AUZRSytBSEYKEwYaBAEMQTgbMD85BAEMLyMEAQwnLwQBDDM/JkcUFw0XLBk6FicKOh41ESIKFwgqBgQBDDEpJwlOUSoJUC0JIBYrCTAmNAlLLQgGAR8uARc6FCUIHxUGATIULEQWJwohFwgqBgFELBQpLxYnCigpHBcIJwYBTTovRgYBLAEhKRksRhYnCiYIKgYBKVFBBgQBDCkgBAEMLx4EAQwxISQEAgEWIyMyARFRKwFFAgEQIAEaHgFJPEoCARceISYBRwFDPwEpKissJSUlAU8BLz9KBAEtFU0wSgQBNwE0PSEkBAE/HhAUSBUQCgFBHkwQFB1AP1FAFBUKAS5AHkQQFhxIShUXCgFKSB5PEEEKASpDMjQCATZwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfbmV3LmRhcnQ4c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvdW5pdmVyc2Uvc2lkZV9lZmZlY3RzLmRhcnShPi8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IHVuaXZlcnNlLnNpZGVfZWZmZWN0czsKCmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwoKY2xhc3MgU2lkZUVmZmVjdHMgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbU2lkZUVmZmVjdHNdIG9iamVjdHMgaW4gYSBkZWJ1Z2dpbmcKICAvLy8gZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnc2lkZS1lZmZlY3RzJzsKCiAgLy8gQ2hhbmdlcyBmbGFncy4KICBzdGF0aWMgY29uc3QgaW50IEZMQUdfQ0hBTkdFU19JTkRFWCA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBGTEFHX0NIQU5HRVNfSU5TVEFOQ0VfUFJPUEVSVFkgPSBGTEFHX0NIQU5HRVNfSU5ERVggKyAxOwogIHN0YXRpYyBjb25zdCBpbnQgRkxBR19DSEFOR0VTX1NUQVRJQ19QUk9QRVJUWSA9CiAgICAgIEZMQUdfQ0hBTkdFU19JTlNUQU5DRV9QUk9QRVJUWSArIDE7CiAgc3RhdGljIGNvbnN0IGludCBGTEFHX0NIQU5HRVNfQ09VTlQgPSBGTEFHX0NIQU5HRVNfU1RBVElDX1BST1BFUlRZICsgMTsKCiAgLy8gRGVwZW5kcyBmbGFncyAob25lIGZvciBlYWNoIGNoYW5nZXMgZmxhZykuCiAgc3RhdGljIGNvbnN0IGludCBGTEFHX0RFUEVORFNfT05fSU5ERVhfU1RPUkUgPSBGTEFHX0NIQU5HRVNfQ09VTlQ7CiAgc3RhdGljIGNvbnN0IGludCBGTEFHX0RFUEVORFNfT05fSU5TVEFOQ0VfUFJPUEVSVFlfU1RPUkUgPQogICAgICBGTEFHX0RFUEVORFNfT05fSU5ERVhfU1RPUkUgKyAxOwogIHN0YXRpYyBjb25zdCBpbnQgRkxBR19ERVBFTkRTX09OX1NUQVRJQ19QUk9QRVJUWV9TVE9SRSA9CiAgICAgIEZMQUdfREVQRU5EU19PTl9JTlNUQU5DRV9QUk9QRVJUWV9TVE9SRSArIDE7CiAgc3RhdGljIGNvbnN0IGludCBGTEFHX0RFUEVORFNfT05fQ09VTlQgPQogICAgICBGTEFHX0RFUEVORFNfT05fU1RBVElDX1BST1BFUlRZX1NUT1JFICsgMTsKCiAgaW50IF9mbGFncyA9IDA7CgogIFNpZGVFZmZlY3RzKCkgewogICAgc2V0QWxsU2lkZUVmZmVjdHMoKTsKICAgIHNldERlcGVuZHNPblNvbWV0aGluZygpOwogIH0KCiAgU2lkZUVmZmVjdHMuZW1wdHkoKSB7CiAgICBjbGVhckFsbERlcGVuZGVuY2llcygpOwogICAgY2xlYXJBbGxTaWRlRWZmZWN0cygpOwogIH0KCiAgU2lkZUVmZmVjdHMuZnJvbUZsYWdzKHRoaXMuX2ZsYWdzKTsKCiAgLy8vIERlc2VyaWFsaXplcyBhIFtTaWRlRWZmZWN0c10gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBTaWRlRWZmZWN0cy5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaW50IGZsYWdzID0gc291cmNlLnJlYWRJbnQoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgU2lkZUVmZmVjdHMuZnJvbUZsYWdzKGZsYWdzKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW1NpZGVFZmZlY3RzXSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUludChfZmxhZ3MpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpID0+IF9mbGFncyA9PSBvdGhlci5fZmxhZ3M7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ1NpZGVFZmZlY3RzLmhhc2hDb2RlJyk7CgogIGJvb2wgX2dldEZsYWcoaW50IHBvc2l0aW9uKSB7CiAgICByZXR1cm4gKF9mbGFncyAmICgxIDw8IHBvc2l0aW9uKSkgIT0gMDsKICB9CgogIGJvb2wgX3NldEZsYWcoaW50IHBvc2l0aW9uKSB7CiAgICBpbnQgYmVmb3JlID0gX2ZsYWdzOwogICAgX2ZsYWdzIHw9ICgxIDw8IHBvc2l0aW9uKTsKICAgIHJldHVybiBiZWZvcmUgIT0gX2ZsYWdzOwogIH0KCiAgYm9vbCBfY2xlYXJGbGFnKGludCBwb3NpdGlvbikgewogICAgaW50IGJlZm9yZSA9IF9mbGFnczsKICAgIF9mbGFncyAmPSB+KDEgPDwgcG9zaXRpb24pOwogICAgcmV0dXJuIGJlZm9yZSAhPSBfZmxhZ3M7CiAgfQoKICBpbnQgZ2V0Q2hhbmdlc0ZsYWdzKCkgewogICAgcmV0dXJuIF9mbGFncyAmICgoMSA8PCBGTEFHX0NIQU5HRVNfQ09VTlQpIC0gMSk7CiAgfQoKICBpbnQgZ2V0RGVwZW5kc09uRmxhZ3MoKSB7CiAgICByZXR1cm4gKF9mbGFncyAmICgoMSA8PCBGTEFHX0RFUEVORFNfT05fQ09VTlQpIC0gMSkpID4+IEZMQUdfQ0hBTkdFU19DT1VOVDsKICB9CgogIGJvb2wgaGFzU2lkZUVmZmVjdHMoKSA9PiBnZXRDaGFuZ2VzRmxhZ3MoKSAhPSAwOwogIGJvb2wgZGVwZW5kc09uU29tZXRoaW5nKCkgPT4gZ2V0RGVwZW5kc09uRmxhZ3MoKSAhPSAwOwoKICBib29sIHNldEFsbFNpZGVFZmZlY3RzKCkgewogICAgaW50IGJlZm9yZSA9IF9mbGFnczsKICAgIF9mbGFncyB8PSAoKDEgPDwgRkxBR19DSEFOR0VTX0NPVU5UKSAtIDEpOwogICAgcmV0dXJuIGJlZm9yZSAhPSBfZmxhZ3M7CiAgfQoKICBib29sIGNsZWFyQWxsU2lkZUVmZmVjdHMoKSB7CiAgICBpbnQgYmVmb3JlID0gX2ZsYWdzOwogICAgX2ZsYWdzICY9IH4oKDEgPDwgRkxBR19DSEFOR0VTX0NPVU5UKSAtIDEpOwogICAgcmV0dXJuIGJlZm9yZSAhPSBfZmxhZ3M7CiAgfQoKICBib29sIHNldERlcGVuZHNPblNvbWV0aGluZygpIHsKICAgIGludCBiZWZvcmUgPSBfZmxhZ3M7CiAgICBpbnQgY291bnQgPSBGTEFHX0RFUEVORFNfT05fQ09VTlQgLSBGTEFHX0NIQU5HRVNfQ09VTlQ7CiAgICBfZmxhZ3MgfD0gKCgoMSA8PCBjb3VudCkgLSAxKSA8PCBGTEFHX0NIQU5HRVNfQ09VTlQpOwogICAgcmV0dXJuIGJlZm9yZSAhPSBfZmxhZ3M7CiAgfQoKICBib29sIGNsZWFyQWxsRGVwZW5kZW5jaWVzKCkgewogICAgaW50IGJlZm9yZSA9IF9mbGFnczsKICAgIGludCBjb3VudCA9IEZMQUdfREVQRU5EU19PTl9DT1VOVCAtIEZMQUdfQ0hBTkdFU19DT1VOVDsKICAgIF9mbGFncyAmPSB+KCgoMSA8PCBjb3VudCkgLSAxKSA8PCBGTEFHX0NIQU5HRVNfQ09VTlQpOwogICAgcmV0dXJuIGJlZm9yZSAhPSBfZmxhZ3M7CiAgfQoKICBib29sIGRlcGVuZHNPblN0YXRpY1Byb3BlcnR5U3RvcmUoKSB7CiAgICByZXR1cm4gX2dldEZsYWcoRkxBR19ERVBFTkRTX09OX1NUQVRJQ19QUk9QRVJUWV9TVE9SRSk7CiAgfQoKICBib29sIHNldERlcGVuZHNPblN0YXRpY1Byb3BlcnR5U3RvcmUoKSB7CiAgICByZXR1cm4gX3NldEZsYWcoRkxBR19ERVBFTkRTX09OX1NUQVRJQ19QUk9QRVJUWV9TVE9SRSk7CiAgfQoKICBib29sIGNsZWFyRGVwZW5kc09uU3RhdGljUHJvcGVydHlTdG9yZSgpIHsKICAgIHJldHVybiBfY2xlYXJGbGFnKEZMQUdfREVQRU5EU19PTl9TVEFUSUNfUFJPUEVSVFlfU1RPUkUpOwogIH0KCiAgYm9vbCBzZXRDaGFuZ2VzU3RhdGljUHJvcGVydHkoKSB7CiAgICByZXR1cm4gX3NldEZsYWcoRkxBR19DSEFOR0VTX1NUQVRJQ19QUk9QRVJUWSk7CiAgfQoKICBib29sIGNsZWFyQ2hhbmdlc1N0YXRpY1Byb3BlcnR5KCkgewogICAgcmV0dXJuIF9jbGVhckZsYWcoRkxBR19DSEFOR0VTX1NUQVRJQ19QUk9QRVJUWSk7CiAgfQoKICBib29sIGNoYW5nZXNTdGF0aWNQcm9wZXJ0eSgpID0+IF9nZXRGbGFnKEZMQUdfQ0hBTkdFU19TVEFUSUNfUFJPUEVSVFkpOwoKICBib29sIGRlcGVuZHNPbkluZGV4U3RvcmUoKSA9PiBfZ2V0RmxhZyhGTEFHX0RFUEVORFNfT05fSU5ERVhfU1RPUkUpOwoKICBib29sIHNldERlcGVuZHNPbkluZGV4U3RvcmUoKSB7CiAgICByZXR1cm4gX3NldEZsYWcoRkxBR19ERVBFTkRTX09OX0lOREVYX1NUT1JFKTsKICB9CgogIGJvb2wgY2xlYXJEZXBlbmRzT25JbmRleFN0b3JlKCkgewogICAgcmV0dXJuIF9jbGVhckZsYWcoRkxBR19ERVBFTkRTX09OX0lOREVYX1NUT1JFKTsKICB9CgogIGJvb2wgc2V0Q2hhbmdlc0luZGV4KCkgewogICAgcmV0dXJuIF9zZXRGbGFnKEZMQUdfQ0hBTkdFU19JTkRFWCk7CiAgfQoKICBib29sIGNsZWFyQ2hhbmdlc0luZGV4KCkgewogICAgcmV0dXJuIF9jbGVhckZsYWcoRkxBR19DSEFOR0VTX0lOREVYKTsKICB9CgogIGJvb2wgY2hhbmdlc0luZGV4KCkgPT4gX2dldEZsYWcoRkxBR19DSEFOR0VTX0lOREVYKTsKCiAgYm9vbCBkZXBlbmRzT25JbnN0YW5jZVByb3BlcnR5U3RvcmUoKSB7CiAgICByZXR1cm4gX2dldEZsYWcoRkxBR19ERVBFTkRTX09OX0lOU1RBTkNFX1BST1BFUlRZX1NUT1JFKTsKICB9CgogIGJvb2wgc2V0RGVwZW5kc09uSW5zdGFuY2VQcm9wZXJ0eVN0b3JlKCkgewogICAgcmV0dXJuIF9zZXRGbGFnKEZMQUdfREVQRU5EU19PTl9JTlNUQU5DRV9QUk9QRVJUWV9TVE9SRSk7CiAgfQoKICBib29sIGNsZWFyRGVwZW5kc09uSW5zdGFuY2VQcm9wZXJ0eVN0b3JlKCkgewogICAgcmV0dXJuIF9zZXRGbGFnKEZMQUdfREVQRU5EU19PTl9JTlNUQU5DRV9QUk9QRVJUWV9TVE9SRSk7CiAgfQoKICBib29sIHNldENoYW5nZXNJbnN0YW5jZVByb3BlcnR5KCkgewogICAgcmV0dXJuIF9zZXRGbGFnKEZMQUdfQ0hBTkdFU19JTlNUQU5DRV9QUk9QRVJUWSk7CiAgfQoKICBib29sIGNsZWFyQ2hhbmdlc0luc3RhbmNlUHJvcGVydHkoKSB7CiAgICByZXR1cm4gX2NsZWFyRmxhZyhGTEFHX0NIQU5HRVNfSU5TVEFOQ0VfUFJPUEVSVFkpOwogIH0KCiAgYm9vbCBjaGFuZ2VzSW5zdGFuY2VQcm9wZXJ0eSgpID0+IF9nZXRGbGFnKEZMQUdfQ0hBTkdFU19JTlNUQU5DRV9QUk9QRVJUWSk7CgogIHN0YXRpYyBpbnQgY29tcHV0ZURlcGVuZHNPbkZsYWdzKGludCBmbGFncykgPT4gZmxhZ3MgPDwgRkxBR19DSEFOR0VTX0NPVU5UOwoKICBib29sIGRlcGVuZHNPbihpbnQgZGVwZW5kc0ZsYWdzKSB7CiAgICByZXR1cm4gKF9mbGFncyAmIGRlcGVuZHNGbGFncykgIT0gMDsKICB9CgogIGJvb2wgYWRkKFNpZGVFZmZlY3RzIG90aGVyKSB7CiAgICBpbnQgYmVmb3JlID0gX2ZsYWdzOwogICAgX2ZsYWdzIHw9IG90aGVyLl9mbGFnczsKICAgIHJldHVybiBiZWZvcmUgIT0gX2ZsYWdzOwogIH0KCiAgdm9pZCBzZXRUbyhTaWRlRWZmZWN0cyBvdGhlcikgewogICAgX2ZsYWdzID0gb3RoZXIuX2ZsYWdzOwogIH0KCiAgYm9vbCBjb250YWlucyhTaWRlRWZmZWN0cyBvdGhlcikgewogICAgcmV0dXJuIChfZmxhZ3MgfCBvdGhlci5fZmxhZ3MpID09IF9mbGFnczsKICB9CgogIGludCBnZXQgZmxhZ3MgPT4gX2ZsYWdzOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgYnVmZmVyLndyaXRlKCdTaWRlRWZmZWN0cyhyZWFkcycpOwogICAgaWYgKCFkZXBlbmRzT25Tb21ldGhpbmcoKSkgewogICAgICBidWZmZXIud3JpdGUoJyBub3RoaW5nJyk7CiAgICB9IGVsc2UgaWYgKGRlcGVuZHNPbkluZGV4U3RvcmUoKSAmJgogICAgICAgIGRlcGVuZHNPbkluc3RhbmNlUHJvcGVydHlTdG9yZSgpICYmCiAgICAgICAgZGVwZW5kc09uU3RhdGljUHJvcGVydHlTdG9yZSgpKSB7CiAgICAgIGJ1ZmZlci53cml0ZSgnIGFueXRoaW5nJyk7CiAgICB9IGVsc2UgewogICAgICBTdHJpbmcgY29tbWEgPSAnJzsKICAgICAgaWYgKGRlcGVuZHNPbkluZGV4U3RvcmUoKSkgewogICAgICAgIGJ1ZmZlci53cml0ZSgnIGluZGV4Jyk7CiAgICAgICAgY29tbWEgPSAnLCc7CiAgICAgIH0KICAgICAgaWYgKGRlcGVuZHNPbkluc3RhbmNlUHJvcGVydHlTdG9yZSgpKSB7CiAgICAgICAgYnVmZmVyLndyaXRlKCckY29tbWEgZmllbGQnKTsKICAgICAgICBjb21tYSA9ICcsJzsKICAgICAgfQogICAgICBpZiAoZGVwZW5kc09uU3RhdGljUHJvcGVydHlTdG9yZSgpKSB7CiAgICAgICAgYnVmZmVyLndyaXRlKCckY29tbWEgc3RhdGljJyk7CiAgICAgIH0KICAgIH0KICAgIGJ1ZmZlci53cml0ZSgnOyB3cml0ZXMnKTsKICAgIGlmICghaGFzU2lkZUVmZmVjdHMoKSkgewogICAgICBidWZmZXIud3JpdGUoJyBub3RoaW5nJyk7CiAgICB9IGVsc2UgaWYgKGNoYW5nZXNJbmRleCgpICYmCiAgICAgICAgY2hhbmdlc0luc3RhbmNlUHJvcGVydHkoKSAmJgogICAgICAgIGNoYW5nZXNTdGF0aWNQcm9wZXJ0eSgpKSB7CiAgICAgIGJ1ZmZlci53cml0ZSgnIGFueXRoaW5nJyk7CiAgICB9IGVsc2UgewogICAgICBTdHJpbmcgY29tbWEgPSAnJzsKICAgICAgaWYgKGNoYW5nZXNJbmRleCgpKSB7CiAgICAgICAgYnVmZmVyLndyaXRlKCcgaW5kZXgnKTsKICAgICAgICBjb21tYSA9ICcsJzsKICAgICAgfQogICAgICBpZiAoY2hhbmdlc0luc3RhbmNlUHJvcGVydHkoKSkgewogICAgICAgIGJ1ZmZlci53cml0ZSgnJGNvbW1hIGZpZWxkJyk7CiAgICAgICAgY29tbWEgPSAnLCc7CiAgICAgIH0KICAgICAgaWYgKGNoYW5nZXNTdGF0aWNQcm9wZXJ0eSgpKSB7CiAgICAgICAgYnVmZmVyLndyaXRlKCckY29tbWEgc3RhdGljJyk7CiAgICAgIH0KICAgIH0KICAgIGJ1ZmZlci53cml0ZSgnKScpOwogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KfQoKY2xhc3MgU2lkZUVmZmVjdHNCdWlsZGVyIHsKICBmaW5hbCBNZW1iZXJFbnRpdHkgX21lbWJlcjsKICBmaW5hbCBTaWRlRWZmZWN0cyBfc2lkZUVmZmVjdHMgPSBuZXcgU2lkZUVmZmVjdHMuZW1wdHkoKTsKICBmaW5hbCBib29sIF9mcmVlOwogIFNldDxTaWRlRWZmZWN0c0J1aWxkZXI+IF9kZXBlbmRpbmc7CgogIFNpZGVFZmZlY3RzQnVpbGRlcih0aGlzLl9tZW1iZXIpIDogX2ZyZWUgPSBmYWxzZTsKCiAgU2lkZUVmZmVjdHNCdWlsZGVyLmZyZWUodGhpcy5fbWVtYmVyKSA6IF9mcmVlID0gdHJ1ZTsKCiAgdm9pZCBzZXRDaGFuZ2VzSW5zdGFuY2VQcm9wZXJ0eSgpIHsKICAgIGlmIChfZnJlZSkgcmV0dXJuOwogICAgX3NpZGVFZmZlY3RzLnNldENoYW5nZXNJbnN0YW5jZVByb3BlcnR5KCk7CiAgfQoKICB2b2lkIHNldERlcGVuZHNPbkluc3RhbmNlUHJvcGVydHlTdG9yZSgpIHsKICAgIGlmIChfZnJlZSkgcmV0dXJuOwogICAgX3NpZGVFZmZlY3RzLnNldERlcGVuZHNPbkluc3RhbmNlUHJvcGVydHlTdG9yZSgpOwogIH0KCiAgdm9pZCBzZXRDaGFuZ2VzU3RhdGljUHJvcGVydHkoKSB7CiAgICBpZiAoX2ZyZWUpIHJldHVybjsKICAgIF9zaWRlRWZmZWN0cy5zZXRDaGFuZ2VzU3RhdGljUHJvcGVydHkoKTsKICB9CgogIHZvaWQgc2V0RGVwZW5kc09uU3RhdGljUHJvcGVydHlTdG9yZSgpIHsKICAgIGlmIChfZnJlZSkgcmV0dXJuOwogICAgX3NpZGVFZmZlY3RzLnNldERlcGVuZHNPblN0YXRpY1Byb3BlcnR5U3RvcmUoKTsKICB9CgogIHZvaWQgc2V0QWxsU2lkZUVmZmVjdHNBbmREZXBlbmRzT25Tb21ldGhpbmcoKSB7CiAgICBpZiAoX2ZyZWUpIHJldHVybjsKICAgIF9zaWRlRWZmZWN0cy5zZXRBbGxTaWRlRWZmZWN0cygpOwogICAgX3NpZGVFZmZlY3RzLnNldERlcGVuZHNPblNvbWV0aGluZygpOwogIH0KCiAgdm9pZCBzZXRBbGxTaWRlRWZmZWN0cygpIHsKICAgIGlmIChfZnJlZSkgcmV0dXJuOwogICAgX3NpZGVFZmZlY3RzLnNldEFsbFNpZGVFZmZlY3RzKCk7CiAgfQoKICB2b2lkIGFkZElucHV0KFNpZGVFZmZlY3RzQnVpbGRlciBpbnB1dCkgewogICAgaWYgKF9mcmVlKSByZXR1cm47CiAgICAoaW5wdXQuX2RlcGVuZGluZyA/Pz0gbmV3IFNldDxTaWRlRWZmZWN0c0J1aWxkZXI+KCkpLmFkZCh0aGlzKTsKICB9CgogIGJvb2wgYWRkKFNpZGVFZmZlY3RzIGlucHV0KSB7CiAgICBpZiAoX2ZyZWUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBfc2lkZUVmZmVjdHMuYWRkKGlucHV0KTsKICB9CgogIFNpZGVFZmZlY3RzIGdldCBzaWRlRWZmZWN0cyA9PiBfc2lkZUVmZmVjdHM7CgogIEl0ZXJhYmxlPFNpZGVFZmZlY3RzQnVpbGRlcj4gZ2V0IGRlcGVuZGluZyA9PgogICAgICBfZGVwZW5kaW5nICE9IG51bGwgPyBfZGVwZW5kaW5nIDogY29uc3QgPFNpZGVFZmZlY3RzQnVpbGRlcj5bXTsKCiAgTWVtYmVyRW50aXR5IGdldCBtZW1iZXIgPT4gX21lbWJlcjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoJ1NpZGVFZmZlY3RzQnVpbGRlcihtZW1iZXI9JG1lbWJlciwnKTsKICAgIHNiLndyaXRlKCdmcmVlPSRfZnJlZSwnKTsKICAgIHNiLndyaXRlKCdzaWRlRWZmZWN0cz0kc2lkZUVmZmVjdHMsJyk7CiAgICBzYi53cml0ZSgnZGVwZW5kaW5nPSR7ZGVwZW5kaW5nLm1hcCgocykgPT4gcy5tZW1iZXIpLmpvaW4oJywnKX0sJyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KgUQATk48AR8BJC4BFE8TLAEUK0wyKkoBMEU9JzszKzEBEgESGR0EARgcGwQBJgE5PhciFS0EAS8oFRsTBAEMNQEMSgEgLAQBIBkfHQQBIhkgHQQBGjUEARxQBAEzOQEdGS8dBAEfGTAdBAEhGTw6HQQBIBk8Ox0EASg8BAErPAQBLT4EASQzBAEmNQQBSgFHASIyBAEkNAQBGykEAR0rBAE3ASo+BAEtPgQBLz4EASY1BAEoNwQBTgFOASUpBAEgGRwdBAEiGwQBJS4EARsBDBYuJyEgKCwqIQ0ZIyAVCC4mFQgsJwgGHh0gISUjIQ0ZHCAVCCcmFQglJwgGFx4EAgEbHjwUJgE0ATgBJhcvBAEtFzYEASQXLQQBKxc0BAEyFyYqBAEdFyYEASwXRAQBIB0kBAEvATBGASYBDBYqNB4rSBoEAgEvcGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2Uvc2lkZV9lZmZlY3RzLmRhcnQ/c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW8va2VybmVsX3NvdXJjZV9pbmZvcm1hdGlvbi5kYXJ0ulYvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIFNvdXJjZSBpbmZvcm1hdGlvbiBzeXN0ZW0gbWFwcGluZyB0aGF0IGF0dGVtcHRzIGEgc2VtYW50aWMgbWFwcGluZyBiZXR3ZWVuCi8vLyBvZmZzZXRzIG9mIEphdmFTY3JpcHQgY29kZSBwb2ludHMgdG8gb2Zmc2V0cyBvZiBEYXJ0IGNvZGUgcG9pbnRzLgoKbGlicmFyeSBkYXJ0MmpzLnNvdXJjZV9pbmZvcm1hdGlvbi5rZXJuZWw7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19tb2RlbC9lbGVtZW50X21hcC5kYXJ0JzsKaW1wb3J0ICcuLi9qc19tb2RlbC9qc19zdHJhdGVneS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0JzsKaW1wb3J0ICdzb3VyY2VfaW5mb3JtYXRpb24uZGFydCc7CmltcG9ydCAncG9zaXRpb25faW5mb3JtYXRpb24uZGFydCc7CgpjbGFzcyBLZXJuZWxTb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5CiAgICBleHRlbmRzIEFic3RyYWN0UG9zaXRpb25Tb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5IHsKICBmaW5hbCBKc0JhY2tlbmRTdHJhdGVneSBfYmFja2VuZFN0cmF0ZWd5OwoKICBjb25zdCBLZXJuZWxTb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5KHRoaXMuX2JhY2tlbmRTdHJhdGVneSk7CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uQnVpbGRlciBjcmVhdGVCdWlsZGVyRm9yQ29udGV4dChNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICByZXR1cm4gbmV3IEtlcm5lbFNvdXJjZUluZm9ybWF0aW9uQnVpbGRlcigKICAgICAgICBfYmFja2VuZFN0cmF0ZWd5CiAgICAgICAgICAgIC8vIGlnbm9yZTpkZXByZWNhdGVkX21lbWJlcl91c2VfZnJvbV9zYW1lX3BhY2thZ2UKICAgICAgICAgICAgLmVsZW1lbnRNYXAsCiAgICAgICAgbWVtYmVyKTsKICB9Cn0KCi8vLyBDb21wdXRlIHRoZSBzb3VyY2UgbWFwIG5hbWUgZm9yIGtlcm5lbCBiYXNlZCBbbWVtYmVyXS4gSWYgW2NhbGxTdHJ1Y3R1cmVdCi8vLyBpcyBub24tbnVsbCBpdCBpcyB1c2VkIHRvIG5hbWUgdGhlIHBhcmFtZXRlciBzdHViIGZvciBbZWxlbWVudF0uCi8vLwovLy8gW2VsZW1lbnRNYXBdIGlzIHVzZWQgdG8gY29tcHV0ZSBuYW1lcyBmb3IgY2xvc3VyZSBjYWxsIG1ldGhvZHMuCi8vIFRPRE8oam9obm5pd2ludGhlcik6IE1ha2UgdGhlIGNsb3N1cmUgY2FsbCBuYW1lcyBhdmFpbGFibGUgdG8KLy8gYHNvdXJjZW1hcF9oZWxwZXIuZGFydGAuClN0cmluZyBjb21wdXRlS2VybmVsRWxlbWVudE5hbWVGb3JTb3VyY2VNYXBzKAogICAgSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgTWVtYmVyRW50aXR5IG1lbWJlciwKICAgIFtDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmVdKSB7CiAgTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZWxlbWVudE1hcC5nZXRNZW1iZXJEZWZpbml0aW9uKG1lbWJlcik7CiAgc3dpdGNoIChkZWZpbml0aW9uLmtpbmQpIHsKICAgIGNhc2UgTWVtYmVyS2luZC5jbG9zdXJlQ2FsbDoKICAgICAgaXIuVHJlZU5vZGUgbm9kZSA9IGRlZmluaXRpb24ubm9kZTsKICAgICAgU3RyaW5nIG5hbWU7CiAgICAgIHdoaWxlIChub2RlIGlzISBpci5NZW1iZXIpIHsKICAgICAgICBpZiAobm9kZSBpcyBpci5GdW5jdGlvbkRlY2xhcmF0aW9uKSB7CiAgICAgICAgICBpZiAobmFtZSAhPSBudWxsKSB7CiAgICAgICAgICAgIG5hbWUgPSAnJHtub2RlLnZhcmlhYmxlLm5hbWV9LiRuYW1lJzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG5hbWUgPSBub2RlLnZhcmlhYmxlLm5hbWU7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChub2RlIGlzIGlyLkZ1bmN0aW9uRXhwcmVzc2lvbikgewogICAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCkgewogICAgICAgICAgICBuYW1lID0gJzxhbm9ueW1vdXMgZnVuY3Rpb24+LiRuYW1lJzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG5hbWUgPSAnPGFub255bW91cyBmdW5jdGlvbj4nOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBub2RlID0gbm9kZS5wYXJlbnQ7CiAgICAgIH0KICAgICAgTWVtYmVyRW50aXR5IGVuY2xvc2luZ01lbWJlciA9IGVsZW1lbnRNYXAuZ2V0TWVtYmVyKG5vZGUpOwogICAgICBTdHJpbmcgZW5jbG9zaW5nTWVtYmVyTmFtZSA9CiAgICAgICAgICBjb21wdXRlRWxlbWVudE5hbWVGb3JTb3VyY2VNYXBzKGVuY2xvc2luZ01lbWJlciwgY2FsbFN0cnVjdHVyZSk7CiAgICAgIHJldHVybiAnJGVuY2xvc2luZ01lbWJlck5hbWUuJG5hbWUnOwogICAgZGVmYXVsdDoKICAgICAgcmV0dXJuIGNvbXB1dGVFbGVtZW50TmFtZUZvclNvdXJjZU1hcHMobWVtYmVyLCBjYWxsU3RydWN0dXJlKTsKICB9Cn0KCi8vLyBbU291cmNlSW5mb3JtYXRpb25CdWlsZGVyXSB0aGF0IGdlbmVyYXRlcyBbUG9zaXRpb25Tb3VyY2VJbmZvcm1hdGlvbl0gZnJvbQovLy8gS2VybmVsIG5vZGVzLgpjbGFzcyBLZXJuZWxTb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIgaW1wbGVtZW50cyBTb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIgewogIGZpbmFsIEpzVG9FbGVtZW50TWFwIF9lbGVtZW50TWFwOwogIGZpbmFsIE1lbWJlckVudGl0eSBfbWVtYmVyOwogIGZpbmFsIFN0cmluZyBfbmFtZTsKCiAgLy8vIElubGluaW5nIGNvbnRleHQgb3IgbnVsbCB3aGVuIG5vIGlubGluaW5nIGhhcyB0YWtlbiBwbGFjZS4KICAvLy8KICAvLy8gQSBuZXcgYnVpbGRlciBpcyBjcmVhdGVkIGV2ZXJ5IHRpbWUgdGhlIGJhY2tlbmQgaW5saW5lcyBhIG1ldGhvZC4gVGhpcwogIC8vLyBmaWVsZCBjb250YWlucyB0aGUgbG9jYXRpb24gb2YgZXZlcnkgY2FsbCBzaXRlIHRoYXQgaGFzIGJlZW4gaW5saW5lZC4gVGhlCiAgLy8vIGxhc3QgZW50cnkgb24gdGhlIGxpc3QgaXMgYWx3YXlzIGEgY2FsbCB0byBbX21lbWJlcl0uCiAgZmluYWwgTGlzdDxGcmFtZUNvbnRleHQ+IGlubGluaW5nQ29udGV4dDsKCiAgS2VybmVsU291cmNlSW5mb3JtYXRpb25CdWlsZGVyKHRoaXMuX2VsZW1lbnRNYXAsIHRoaXMuX21lbWJlcikKICAgICAgOiBfbmFtZSA9IGNvbXB1dGVLZXJuZWxFbGVtZW50TmFtZUZvclNvdXJjZU1hcHMoX2VsZW1lbnRNYXAsIF9tZW1iZXIpLAogICAgICAgIGlubGluaW5nQ29udGV4dCA9IG51bGw7CgogIEtlcm5lbFNvdXJjZUluZm9ybWF0aW9uQnVpbGRlci53aXRoQ29udGV4dCgKICAgICAgdGhpcy5fZWxlbWVudE1hcCwgdGhpcy5fbWVtYmVyLCB0aGlzLmlubGluaW5nQ29udGV4dCwgdGhpcy5fbmFtZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbU291cmNlTG9jYXRpb25dIGZvciB0aGUgW29mZnNldF0gd2l0aGluIFtub2RlXSB1c2luZyBbbmFtZV0KICAvLy8gYXMgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBsb2NhdGlvbi4KICAvLy8KICAvLy8gSWYgW29mZnNldF0gaXMgYG51bGxgLCB0aGUgZmlyc3QgYGZpbGVPZmZzZXRgIG9mIFtub2RlXSBvciBpdHMgcGFyZW50cyBpcwogIC8vLyB1c2VkLgogIFNvdXJjZUxvY2F0aW9uIF9nZXRTb3VyY2VMb2NhdGlvbihTdHJpbmcgbmFtZSwgaXIuVHJlZU5vZGUgbm9kZSwKICAgICAgW2ludCBvZmZzZXRdKSB7CiAgICBpci5Mb2NhdGlvbiBsb2NhdGlvbjsKICAgIGlmIChvZmZzZXQgIT0gbnVsbCkgewogICAgICBsb2NhdGlvbiA9IG5vZGUubG9jYXRpb247CiAgICAgIGxvY2F0aW9uID0gbm9kZS5lbmNsb3NpbmdDb21wb25lbnQuZ2V0TG9jYXRpb24obG9jYXRpb24uZmlsZSwgb2Zmc2V0KTsKICAgIH0gZWxzZSB7CiAgICAgIHdoaWxlIChub2RlICE9IG51bGwgJiYgbm9kZS5maWxlT2Zmc2V0ID09IGlyLlRyZWVOb2RlLm5vT2Zmc2V0KSB7CiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50OwogICAgICB9CiAgICAgIGxvY2F0aW9uID0gbm9kZS5sb2NhdGlvbjsKICAgICAgb2Zmc2V0ID0gbm9kZS5maWxlT2Zmc2V0OwogICAgfQogICAgYXNzZXJ0KAogICAgICAgIGxvY2F0aW9uICE9IG51bGwsICJObyBsb2NhdGlvbiBmb3VuZCBmb3IgJG5vZGUgKCR7bm9kZS5ydW50aW1lVHlwZX0pIik7CiAgICByZXR1cm4gbmV3IEtlcm5lbFNvdXJjZUxvY2F0aW9uKGxvY2F0aW9uLCBvZmZzZXQsIG5hbWUpOwogIH0KCiAgLy8vIENyZWF0ZXMgdGhlIHNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgYSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZWQgYnkgdGhlCiAgLy8vIHJvb3QgW25vZGVdIGFuZCBpdHMgW2Z1bmN0aW9uTm9kZV0uCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIGhhbmRsZXMgYm90aCBtZXRob2RzLCBjb25zdHJ1Y3RvcnMsIGFuZCBsb2NhbCBmdW5jdGlvbnMuCiAgU291cmNlSW5mb3JtYXRpb24gX2J1aWxkRnVuY3Rpb24oCiAgICAgIFN0cmluZyBuYW1lLCBpci5UcmVlTm9kZSBub2RlLCBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb25Ob2RlKSB7CiAgICBpZiAoZnVuY3Rpb25Ob2RlLmZpbGVFbmRPZmZzZXQgIT0gaXIuVHJlZU5vZGUubm9PZmZzZXQpIHsKICAgICAgcmV0dXJuIG5ldyBQb3NpdGlvblNvdXJjZUluZm9ybWF0aW9uKAogICAgICAgICAgX2dldFNvdXJjZUxvY2F0aW9uKG5hbWUsIG5vZGUpLAogICAgICAgICAgX2dldFNvdXJjZUxvY2F0aW9uKG5hbWUsIGZ1bmN0aW9uTm9kZSwgZnVuY3Rpb25Ob2RlLmZpbGVFbmRPZmZzZXQpLAogICAgICAgICAgdGhpcy5pbmxpbmluZ0NvbnRleHQpOwogICAgfQogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgLy8vIENyZWF0ZXMgdGhlIHNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgYSBbYmFzZV0gYW5kIGVuZCBvZiBbbWVtYmVyXS4gSWYgW2Jhc2VdCiAgLy8vIGlzIG5vdCBwcm92aWRlZCwgdGhlIG9mZnNldCBvZiBbbWVtYmVyXSBpcyB1c2VkIGFzIHRoZSBzdGFydCBwb3NpdGlvbi4KICAvLy8KICAvLy8gVGhpcyBpcyB1c2VkIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBhbmQgcmV0dXJuIGV4cHJlc3Npb25zIHdoaWNoIGJvdGggcG9pbnQKICAvLy8gdG8gdGhlIGVuZCBvZiB0aGUgbWVtYmVyIGFzIHRoZSBjbG9zaW5nIHBvc2l0aW9uLgogIFNvdXJjZUluZm9ybWF0aW9uIF9idWlsZEZ1bmN0aW9uRW5kKE1lbWJlckVudGl0eSBtZW1iZXIsIFtpci5UcmVlTm9kZSBiYXNlXSkgewogICAgTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyRGVmaW5pdGlvbihtZW1iZXIpOwogICAgU3RyaW5nIG5hbWUgPSBjb21wdXRlS2VybmVsRWxlbWVudE5hbWVGb3JTb3VyY2VNYXBzKF9lbGVtZW50TWFwLCBtZW1iZXIpOwogICAgc3dpdGNoIChkZWZpbml0aW9uLmtpbmQpIHsKICAgICAgY2FzZSBNZW1iZXJLaW5kLnJlZ3VsYXI6CiAgICAgICAgaXIuTWVtYmVyIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgaWYgKG5vZGUgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICAgICAgICByZXR1cm4gX2J1aWxkRnVuY3Rpb24obmFtZSwgYmFzZSA/PyBub2RlLCBub2RlLmZ1bmN0aW9uKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jb25zdHJ1Y3RvcjoKICAgICAgY2FzZSBNZW1iZXJLaW5kLmNvbnN0cnVjdG9yQm9keToKICAgICAgICBpci5NZW1iZXIgbm9kZSA9IGRlZmluaXRpb24ubm9kZTsKICAgICAgICByZXR1cm4gX2J1aWxkRnVuY3Rpb24obmFtZSwgYmFzZSA/PyBub2RlLCBub2RlLmZ1bmN0aW9uKTsKICAgICAgY2FzZSBNZW1iZXJLaW5kLmNsb3N1cmVDYWxsOgogICAgICAgIGlyLkxvY2FsRnVuY3Rpb24gbm9kZSA9IGRlZmluaXRpb24ubm9kZTsKICAgICAgICByZXR1cm4gX2J1aWxkRnVuY3Rpb24obmFtZSwgYmFzZSA/PyBub2RlLCBub2RlLmZ1bmN0aW9uKTsKICAgICAgLy8gVE9ETyhzcmEpOiBnZW5lcmF0b3JCb2R5CiAgICAgIGRlZmF1bHQ6CiAgICB9CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUoYmFzZSA/PyBkZWZpbml0aW9uLm5vZGUsIG5hbWU6IG5hbWUpOwogIH0KCiAgLy8vIENyZWF0ZXMgdGhlIHNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgZXhpdGluZyBhIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lZAogIC8vLyBieSB0aGUgcm9vdCBbbm9kZV0gYW5kIGl0cyBbZnVuY3Rpb25Ob2RlXS4KICAvLy8KICAvLy8gVGhpcyBtZXRob2QgaGFuZGxlcyBib3RoIG1ldGhvZHMsIGNvbnN0cnVjdG9ycywgYW5kIGxvY2FsIGZ1bmN0aW9ucy4KICBTb3VyY2VJbmZvcm1hdGlvbiBfYnVpbGRGdW5jdGlvbkV4aXQoCiAgICAgIGlyLlRyZWVOb2RlIG5vZGUsIGlyLkZ1bmN0aW9uTm9kZSBmdW5jdGlvbk5vZGUpIHsKICAgIGlmIChmdW5jdGlvbk5vZGUuZmlsZUVuZE9mZnNldCAhPSBpci5UcmVlTm9kZS5ub09mZnNldCkgewogICAgICByZXR1cm4gbmV3IFBvc2l0aW9uU291cmNlSW5mb3JtYXRpb24oCiAgICAgICAgICBfZ2V0U291cmNlTG9jYXRpb24oX25hbWUsIGZ1bmN0aW9uTm9kZSwgZnVuY3Rpb25Ob2RlLmZpbGVFbmRPZmZzZXQpLAogICAgICAgICAgbnVsbCwKICAgICAgICAgIHRoaXMuaW5saW5pbmdDb250ZXh0KTsKICAgIH0KICAgIHJldHVybiBfYnVpbGRUcmVlTm9kZShub2RlKTsKICB9CgogIC8vLyBDcmVhdGVzIHRoZSBzb3VyY2UgaW5mb3JtYXRpb24gZm9yIHRoZSBbYm9keV0gb2YgW25vZGVdLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGZvciBjb2RlIGluIHRoZSBiZWdpbm5pbmcgb2YgYSBtZXRob2QsIGxpa2UKICAvLy8gdmFyaWFibGUgZGVjbGFyYXRpb25zIGluIHRoZSBzdGFydCBvZiBhIGZ1bmN0aW9uLgogIFNvdXJjZUluZm9ybWF0aW9uIF9idWlsZEJvZHkoaXIuVHJlZU5vZGUgbm9kZSwgaXIuVHJlZU5vZGUgYm9keSkgewogICAgU291cmNlTG9jYXRpb24gbG9jYXRpb247CiAgICBpZiAoYm9keSAhPSBudWxsKSB7CiAgICAgIGlmIChib2R5IGlzIGlyLkJsb2NrICYmIGJvZHkuc3RhdGVtZW50cy5pc05vdEVtcHR5KSB7CiAgICAgICAgbG9jYXRpb24gPSBfZ2V0U291cmNlTG9jYXRpb24oX25hbWUsIGJvZHkuc3RhdGVtZW50cy5maXJzdCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbG9jYXRpb24gPSBfZ2V0U291cmNlTG9jYXRpb24oX25hbWUsIGJvZHkpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBsb2NhdGlvbiA9IF9nZXRTb3VyY2VMb2NhdGlvbihfbmFtZSwgbm9kZSk7CiAgICB9CiAgICByZXR1cm4gbmV3IFBvc2l0aW9uU291cmNlSW5mb3JtYXRpb24obG9jYXRpb24sIG51bGwsIGlubGluaW5nQ29udGV4dCk7CiAgfQoKICAvLy8gQ3JlYXRlcyBzb3VyY2UgaW5mb3JtYXRpb24gZm9yIHRoZSBib2R5IG9mIHRoZSBjdXJyZW50IG1lbWJlci4KICBTb3VyY2VJbmZvcm1hdGlvbiBfYnVpbGRNZW1iZXJCb2R5KCkgewogICAgTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyRGVmaW5pdGlvbihfbWVtYmVyKTsKICAgIHN3aXRjaCAoZGVmaW5pdGlvbi5raW5kKSB7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5yZWd1bGFyOgogICAgICAgIGlyLk5vZGUgbm9kZSA9IGRlZmluaXRpb24ubm9kZTsKICAgICAgICBpZiAobm9kZSBpcyBpci5Qcm9jZWR1cmUpIHsKICAgICAgICAgIHJldHVybiBfYnVpbGRCb2R5KG5vZGUsIG5vZGUuZnVuY3Rpb24uYm9keSk7CiAgICAgICAgfSBlbHNlIGlmIChub2RlIGlzIGlyLkZpZWxkKSB7CiAgICAgICAgICByZXR1cm4gX2J1aWxkQm9keShub2RlLCBub2RlLmluaXRpYWxpemVyKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jb25zdHJ1Y3RvcjoKICAgICAgY2FzZSBNZW1iZXJLaW5kLmNvbnN0cnVjdG9yQm9keToKICAgICAgICBpci5Ob2RlIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgaWYgKG5vZGUgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICAgICAgICByZXR1cm4gX2J1aWxkQm9keShub2RlLCBub2RlLmZ1bmN0aW9uLmJvZHkpOwogICAgICAgIH0gZWxzZSBpZiAobm9kZSBpcyBpci5Db25zdHJ1Y3RvcikgewogICAgICAgICAgcmV0dXJuIF9idWlsZEJvZHkobm9kZSwgbm9kZS5mdW5jdGlvbi5ib2R5KTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jbG9zdXJlQ2FsbDoKICAgICAgICBpci5Mb2NhbEZ1bmN0aW9uIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgcmV0dXJuIF9idWlsZEJvZHkobm9kZSwgbm9kZS5mdW5jdGlvbi5ib2R5KTsKICAgICAgY2FzZSBNZW1iZXJLaW5kLmdlbmVyYXRvckJvZHk6CiAgICAgICAgaXIuTm9kZSBub2RlID0gZGVmaW5pdGlvbi5ub2RlOwogICAgICAgIGlmIChub2RlIGlzIGlyLkxvY2FsRnVuY3Rpb24pIHsKICAgICAgICAgIHJldHVybiBfYnVpbGRCb2R5KG5vZGUsIG5vZGUuZnVuY3Rpb24uYm9keSk7CiAgICAgICAgfSBlbHNlIGlmIChub2RlIGlzIGlyLk1lbWJlciAmJiBub2RlLmZ1bmN0aW9uICE9IG51bGwpIHsKICAgICAgICAgIHJldHVybiBfYnVpbGRCb2R5KG5vZGUsIG5vZGUuZnVuY3Rpb24uYm9keSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgfQogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKGRlZmluaXRpb24ubm9kZSk7CiAgfQoKICAvLy8gQ3JlYXRlcyBzb3VyY2UgaW5mb3JtYXRpb24gZm9yIHRoZSBleGl0IG9mIHRoZSBjdXJyZW50IG1lbWJlci4KICBTb3VyY2VJbmZvcm1hdGlvbiBfYnVpbGRNZW1iZXJFeGl0KCkgewogICAgTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyRGVmaW5pdGlvbihfbWVtYmVyKTsKICAgIHN3aXRjaCAoZGVmaW5pdGlvbi5raW5kKSB7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5yZWd1bGFyOgogICAgICAgIGlyLk5vZGUgbm9kZSA9IGRlZmluaXRpb24ubm9kZTsKICAgICAgICBpZiAobm9kZSBpcyBpci5Qcm9jZWR1cmUpIHsKICAgICAgICAgIHJldHVybiBfYnVpbGRGdW5jdGlvbkV4aXQobm9kZSwgbm9kZS5mdW5jdGlvbik7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1lbWJlcktpbmQuY29uc3RydWN0b3I6CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jb25zdHJ1Y3RvckJvZHk6CiAgICAgICAgaXIuTWVtYmVyIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgcmV0dXJuIF9idWlsZEZ1bmN0aW9uRXhpdChub2RlLCBub2RlLmZ1bmN0aW9uKTsKICAgICAgY2FzZSBNZW1iZXJLaW5kLmNsb3N1cmVDYWxsOgogICAgICAgIGlyLkxvY2FsRnVuY3Rpb24gbm9kZSA9IGRlZmluaXRpb24ubm9kZTsKICAgICAgICByZXR1cm4gX2J1aWxkRnVuY3Rpb25FeGl0KG5vZGUsIG5vZGUuZnVuY3Rpb24pOwogICAgICBkZWZhdWx0OgogICAgfQogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKGRlZmluaXRpb24ubm9kZSk7CiAgfQoKICAvLy8gQ3JlYXRlcyBzb3VyY2UgaW5mb3JtYXRpb24gYmFzZWQgb24gdGhlIGxvY2F0aW9uIG9mIFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBfYnVpbGRUcmVlTm9kZShpci5UcmVlTm9kZSBub2RlLAogICAgICB7U291cmNlTG9jYXRpb24gY2xvc2luZ1Bvc2l0aW9uLCBTdHJpbmcgbmFtZX0pIHsKICAgIHJldHVybiBuZXcgUG9zaXRpb25Tb3VyY2VJbmZvcm1hdGlvbigKICAgICAgICBfZ2V0U291cmNlTG9jYXRpb24obmFtZSA/PyBfbmFtZSwgbm9kZSksCiAgICAgICAgY2xvc2luZ1Bvc2l0aW9uLAogICAgICAgIGlubGluaW5nQ29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIgZm9yQ29udGV4dCgKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciwgU291cmNlSW5mb3JtYXRpb24gY29udGV4dCkgewogICAgTGlzdDxGcmFtZUNvbnRleHQ+IG5ld0NvbnRleHQgPSBpbmxpbmluZ0NvbnRleHQ/LnRvTGlzdCgpID8/IFtdOwogICAgaWYgKGNvbnRleHQgIT0gbnVsbCkgewogICAgICBuZXdDb250ZXh0LmFkZChuZXcgRnJhbWVDb250ZXh0KGNvbnRleHQsIG1lbWJlci5uYW1lKSk7CiAgICB9IGVsc2UgewogICAgICAvLyBUT0RPKHNpZ211bmQpOiBpbnZlc3RpZ2F0ZSB3aGV0aGVyIHdlIGhhdmUgYW55IG1vcmUgY2FzZXMgd2hlcmUgY29udGV4dAogICAgICAvLyBpcyBudWxsLgogICAgICBuZXdDb250ZXh0ID0gaW5saW5pbmdDb250ZXh0OwogICAgfQoKICAgIFN0cmluZyBuYW1lID0gY29tcHV0ZUtlcm5lbEVsZW1lbnROYW1lRm9yU291cmNlTWFwcyhfZWxlbWVudE1hcCwgX21lbWJlcik7CiAgICByZXR1cm4gbmV3IEtlcm5lbFNvdXJjZUluZm9ybWF0aW9uQnVpbGRlci53aXRoQ29udGV4dCgKICAgICAgICBfZWxlbWVudE1hcCwgbWVtYmVyLCBuZXdDb250ZXh0LCBuYW1lKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkU3dpdGNoQ2FzZShpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkU3dpdGNoKGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRBcyhpci5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBfYnVpbGRUcmVlTm9kZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkSXMoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFRyeShpci5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBfYnVpbGRUcmVlTm9kZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkQ2F0Y2goaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEJpbmFyeShpci5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBfYnVpbGRUcmVlTm9kZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkVW5hcnkoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEluZGV4U2V0KGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRJbmRleChpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkRm9ySW5TZXQoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEZvckluQ3VycmVudChpci5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBfYnVpbGRUcmVlTm9kZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkRm9ySW5Nb3ZlTmV4dChpci5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBfYnVpbGRUcmVlTm9kZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkRm9ySW5JdGVyYXRvcihpci5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBfYnVpbGRUcmVlTm9kZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkU3RyaW5nSW50ZXJwb2xhdGlvbihpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkRm9yZWlnbkNvZGUoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFZhcmlhYmxlRGVjbGFyYXRpb24oKSB7CiAgICByZXR1cm4gX2J1aWxkTWVtYmVyQm9keSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRBd2FpdChpci5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBfYnVpbGRUcmVlTm9kZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkWWllbGQoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEFzeW5jQm9keSgpIHsKICAgIHJldHVybiBfYnVpbGRNZW1iZXJCb2R5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEFzeW5jRXhpdCgpIHsKICAgIHJldHVybiBfYnVpbGRNZW1iZXJFeGl0KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEFzc2lnbm1lbnQoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFRocm93KGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRBc3NlcnQoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZE5ldyhpci5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBfYnVpbGRUcmVlTm9kZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkSWYoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZENhbGwoCiAgICAgIGNvdmFyaWFudCBpci5UcmVlTm9kZSByZWNlaXZlciwgY292YXJpYW50IGlyLlRyZWVOb2RlIGNhbGwpIHsKICAgIHJldHVybiBuZXcgUG9zaXRpb25Tb3VyY2VJbmZvcm1hdGlvbihfZ2V0U291cmNlTG9jYXRpb24oX25hbWUsIHJlY2VpdmVyKSwKICAgICAgICBfZ2V0U291cmNlTG9jYXRpb24oX25hbWUsIGNhbGwpLCBpbmxpbmluZ0NvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRHZXQoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFNldChpci5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBfYnVpbGRUcmVlTm9kZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkTG9vcChpci5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBfYnVpbGRUcmVlTm9kZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkSW1wbGljaXRSZXR1cm4oTWVtYmVyRW50aXR5IGVsZW1lbnQpID0+IG51bGw7CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkUmV0dXJuKGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIF9idWlsZEZ1bmN0aW9uRW5kKF9tZW1iZXIsIG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRDcmVhdGUoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZExpc3RMaXRlcmFsKGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRHZW5lcmljKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGREZWNsYXJhdGlvbihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICByZXR1cm4gX2J1aWxkRnVuY3Rpb25FbmQobWVtYmVyKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkU3R1YigKICAgICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24sIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSkgewogICAgTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyRGVmaW5pdGlvbihmdW5jdGlvbik7CiAgICBTdHJpbmcgbmFtZSA9IGNvbXB1dGVLZXJuZWxFbGVtZW50TmFtZUZvclNvdXJjZU1hcHMoCiAgICAgICAgX2VsZW1lbnRNYXAsIGZ1bmN0aW9uLCBjYWxsU3RydWN0dXJlKTsKICAgIGlyLk5vZGUgbm9kZSA9IGRlZmluaXRpb24ubm9kZTsKICAgIHJldHVybiBfYnVpbGRUcmVlTm9kZShub2RlLCBuYW1lOiBuYW1lKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkR290byhpci5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBfYnVpbGRUcmVlTm9kZShub2RlKTsKICB9Cn0KCmNsYXNzIEtlcm5lbFNvdXJjZUxvY2F0aW9uIGV4dGVuZHMgQWJzdHJhY3RTb3VyY2VMb2NhdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IG9mZnNldDsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgc291cmNlTmFtZTsKICBAb3ZlcnJpZGUKICBmaW5hbCBVcmkgc291cmNlVXJpOwoKICBLZXJuZWxTb3VyY2VMb2NhdGlvbihpci5Mb2NhdGlvbiBsb2NhdGlvbiwgdGhpcy5vZmZzZXQsIHRoaXMuc291cmNlTmFtZSkKICAgICAgOiBzb3VyY2VVcmkgPSBsb2NhdGlvbi5maWxlLAogICAgICAgIHN1cGVyLmZyb21Mb2NhdGlvbihsb2NhdGlvbik7CgogIEtlcm5lbFNvdXJjZUxvY2F0aW9uLmZyb21PdGhlcihLZXJuZWxTb3VyY2VMb2NhdGlvbiBvdGhlciwgdGhpcy5zb3VyY2VOYW1lKQogICAgICA6IHNvdXJjZVVyaSA9IG90aGVyLnNvdXJjZVVyaSwKICAgICAgICBvZmZzZXQgPSBvdGhlci5vZmZzZXQsCiAgICAgICAgc3VwZXIuZnJvbU90aGVyKG90aGVyKTsKfQqB4ABOTjwBT0YBKwEoJCcnKiIkASY4LAFAAQxKLxk+GREEAgFORQREQRwuNCVIHSEqEyMuHjITJww0HjETKwwKHAhBI0srDUUEAgFPEkskHhYBQQZNUDwsAUFNIAEuSQFPKgZQDEMWGhogTQ1IHAggIAYMUD0EAU4qBkskRT4sKk4hBiEEAVFNBlE4UUtOHx8qJEQKDyMnKkIjMUIiDwZABAFPMQZLKDg+LE8QIQYhBAE/Bkk4RR0YPEUPNAgNMgZLBAFFKUwfHygkNyc1Cg8jJygkNy03Cg8jMTUlKCg3QTcKDw8GLAQBRSlMHx8oJDoKDyMnKjgjMTgPBiwEAUI1NyoxGRoEAQwnOEUbPg1REiQGAU87MAQBDDsBDDAhBAEMLCEEAQwsIQQBDC0hBAEMLyEEAQwwIQQBDC8hBAEMOQEMNgEMMiEEAQw2IQQBDDchBAEMNyEEAQxEAQw8AQwxHwQBDC8hBAEMLyEEAQwnHwQBDCcfBAEMNCEEAQwvIQQBDDAhBAEMLSEEAQwsIQQBDB9ETjsEAQwtIQQBDC0hBAEMLiEEAQxHAQwwLQQBDDAhBAEMNSEEAQw4AQw8JgQBDB8+TTkvJC0EAQwuIQQCATwMFAwbDBcBSyMmAU4lHyACATZwYWNrYWdlOmNvbXBpbGVyL3NyYy9pby9rZXJuZWxfc291cmNlX2luZm9ybWF0aW9uLmRhcnQ3c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanMvanNfc291cmNlX21hcHBpbmcuZGFydJB8Ly8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkganMuc291cmNlX21hcHBpbmc7CgppbXBvcnQgJy4uL2lvL2NvZGVfb3V0cHV0LmRhcnQnCiAgICBzaG93IEJ1ZmZlcmVkQ29kZU91dHB1dCwgU291cmNlTG9jYXRpb25zLCBTb3VyY2VMb2NhdGlvbnNQcm92aWRlcjsKaW1wb3J0ICcuLi9pby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydCcKICAgIHNob3cgU291cmNlTG9jYXRpb24sIFNvdXJjZUluZm9ybWF0aW9uLCBTb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5OwppbXBvcnQgJ2pzLmRhcnQnOwoKLy8vIFtTb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5XSB0aGF0IGNhbiBhc3NvY2lhdGUgc291cmNlIGluZm9ybWF0aW9uIHdpdGgKLy8vIEphdmFTY3JpcHQgb3V0cHV0LgpjbGFzcyBKYXZhU2NyaXB0U291cmNlSW5mb3JtYXRpb25TdHJhdGVneSBleHRlbmRzIFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kgewogIGNvbnN0IEphdmFTY3JpcHRTb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5KCk7CgogIC8vLyBDcmVhdGVzIGEgcHJvY2Vzc29yIHRoYXQgY2FuIGFzc29jaWF0ZSBzb3VyY2UgaW5mb3JtYXRpb24gb24gW05vZGVdIHdpdGgKICAvLy8gY29kZSBvZmZzZXRzIGluIGEgW1NvdXJjZU1hcHBlcl0gcHJvdmlkZWQgYnkgW3NvdXJjZU1hcHBlclByb3ZpZGVyXS4KICAvLy8gU291cmNlIGluZm9ybWF0aW9uIGZvciBlYWNoIFtOb2RlXSBpcyBwcm92aWRlciBieSBbcmVhZGVyXS4KICBTb3VyY2VJbmZvcm1hdGlvblByb2Nlc3NvciBjcmVhdGVQcm9jZXNzb3IoCiAgICAgIFNvdXJjZU1hcHBlclByb3ZpZGVyIHNvdXJjZU1hcHBlclByb3ZpZGVyLAogICAgICBTb3VyY2VJbmZvcm1hdGlvblJlYWRlciByZWFkZXIpIHsKICAgIHJldHVybiBjb25zdCBTb3VyY2VJbmZvcm1hdGlvblByb2Nlc3NvcigpOwogIH0KfQoKLy8vIEludGVyZmFjZSBmb3IgZGVyaXZpbmcgW1NvdXJjZUluZm9ybWF0aW9uXSBmcm9tIGEgW05vZGVdLgovLy8KLy8vIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIHJlYWQgdGhlIHZhbHVlIG9mIHRoZSBub2RlIGl0c2VsZi4KY2xhc3MgU291cmNlSW5mb3JtYXRpb25SZWFkZXIgewogIGNvbnN0IFNvdXJjZUluZm9ybWF0aW9uUmVhZGVyKCk7CgogIFNvdXJjZUluZm9ybWF0aW9uIGdldFNvdXJjZUluZm9ybWF0aW9uKE5vZGUgbm9kZSkgPT4gbm9kZS5zb3VyY2VJbmZvcm1hdGlvbjsKfQoKLy8vIEFuIG9ic2VydmVyIG9mIGNvZGUgcG9zaXRpb25zIG9mIHByaW50ZWQgSmF2YVNjcmlwdCBbTm9kZV1zLgpjbGFzcyBDb2RlUG9zaXRpb25MaXN0ZW5lciB7CiAgY29uc3QgQ29kZVBvc2l0aW9uTGlzdGVuZXIoKTsKCiAgLy8vIENhbGxlZCB0byBhc3NvY2lhdGUgW25vZGVdIHdpdGggdGhlIHByb3ZpZGVkIHN0YXJ0IHBvc2l0aW9uLgogIC8vLwogIC8vLyBUaGUgbm9kZXMgYXJlIHNlZW4gaW4gcHJlLXRyYXZlcnNhbCBvcmRlci4KICB2b2lkIG9uU3RhcnRQb3NpdGlvbihOb2RlIG5vZGUsIGludCBzdGFydFBvc2l0aW9uKSB7fQoKICAvLy8gQ2FsbGVkIHRvIGFzc29jaWF0ZSBbbm9kZV0gd2l0aCB0aGUgcHJvdmlkZWQgc3RhcnQsIGVuZCBhbmQgY2xvc2luZwogIC8vLyBwb3NpdGlvbnMuCiAgLy8vCiAgLy8vIFRoZSBub2RlcyBhcmUgc2VlbiBpbiBwb3N0LXRyYXZlcnNhbCBvcmRlci4KICB2b2lkIG9uUG9zaXRpb25zKAogICAgICBOb2RlIG5vZGUsIGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24sIGludCBjbG9zaW5nUG9zaXRpb24pIHt9Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIGNyZWF0aW5nIFtTb3VyY2VNYXBwZXJdcyBmb3IgbXVsdGlwbGUgc291cmNlIGluZm9ybWF0aW9uCi8vLyBlbmdpbmVzLgphYnN0cmFjdCBjbGFzcyBTb3VyY2VNYXBwZXJQcm92aWRlciB7CiAgU291cmNlTWFwcGVyIGNyZWF0ZVNvdXJjZU1hcHBlcihTdHJpbmcgbmFtZSk7Cn0KCi8vLyBCYXNlIGltcGxlbWVudGF0aW9uIG9mIFtTb3VyY2VNYXBwZXJQcm92aWRlcl0uCmNsYXNzIFNvdXJjZU1hcHBlclByb3ZpZGVySW1wbCBpbXBsZW1lbnRzIFNvdXJjZU1hcHBlclByb3ZpZGVyIHsKICBmaW5hbCBTb3VyY2VMb2NhdGlvbnNQcm92aWRlciBwcm92aWRlcjsKCiAgU291cmNlTWFwcGVyUHJvdmlkZXJJbXBsKHRoaXMucHJvdmlkZXIpOwoKICBAb3ZlcnJpZGUKICBTb3VyY2VNYXBwZXIgY3JlYXRlU291cmNlTWFwcGVyKFN0cmluZyBuYW1lKSB7CiAgICByZXR1cm4gbmV3IFNvdXJjZUxvY2F0aW9uc01hcHBlcihwcm92aWRlci5jcmVhdGVTb3VyY2VMb2NhdGlvbnMobmFtZSkpOwogIH0KfQoKLy8vIEFuIGludGVyZmFjZSBmb3IgbWFwcGluZyBjb2RlIG9mZnNldHMgd2l0aCBbU291cmNlTG9jYXRpb25dcyBmb3IgSmF2YVNjcmlwdAovLy8gW05vZGVdcy4KYWJzdHJhY3QgY2xhc3MgU291cmNlTWFwcGVyIHsKICAvLy8gQXNzb2NpYXRlIFtjb2RlT2Zmc2V0XSB3aXRoIFtzb3VyY2VMb2NhdGlvbl0gZm9yIFtub2RlXS4KICB2b2lkIHJlZ2lzdGVyKE5vZGUgbm9kZSwgaW50IGNvZGVPZmZzZXQsIFNvdXJjZUxvY2F0aW9uIHNvdXJjZUxvY2F0aW9uKTsKCiAgLy8vIEFzc29jaWF0ZSBbY29kZU9mZnNldF0gd2l0aCBhbiBpbmxpbmluZyBjYWxsIGF0IFtzb3VyY2VMb2NhdGlvbl0uCiAgdm9pZCByZWdpc3RlclB1c2goCiAgICAgIGludCBjb2RlT2Zmc2V0LCBTb3VyY2VMb2NhdGlvbiBzb3VyY2VMb2NhdGlvbiwgU3RyaW5nIGlubGluZWRNZXRob2ROYW1lKTsKCiAgLy8vIEFzc29jaWF0ZSBbY29kZU9mZnNldF0gd2l0aCBhbiBpbmxpbmluZyByZXR1cm4uCiAgLy8vCiAgLy8vIElmIFtpc0VtcHR5XSBpcyB0cnVlLCBhbHNvIGFzc29jaWF0ZSB0aGF0IHRoZSBpbmxpbmluZyBzdGFjayBpcyBlbXB0eSBhdAogIC8vLyBbY29kZU9mZnNldF0uCiAgdm9pZCByZWdpc3RlclBvcChpbnQgY29kZU9mZnNldCwge2Jvb2wgaXNFbXB0eTogZmFsc2V9KTsKfQoKLy8vIEFuIGltcGxlbWVudGF0aW9uIG9mIFtTb3VyY2VNYXBwZXJdIHRoYXQgc3RvcmVzIHRoZSBpbmZvcm1hdGlvbiBkaXJlY3RseQovLy8gaW50byBhIFtTb3VyY2VMb2NhdGlvbnNdIG9iamVjdC4KY2xhc3MgU291cmNlTG9jYXRpb25zTWFwcGVyIGltcGxlbWVudHMgU291cmNlTWFwcGVyIHsKICBmaW5hbCBTb3VyY2VMb2NhdGlvbnMgc291cmNlTG9jYXRpb25zOwoKICBTb3VyY2VMb2NhdGlvbnNNYXBwZXIodGhpcy5zb3VyY2VMb2NhdGlvbnMpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyKE5vZGUgbm9kZSwgaW50IGNvZGVPZmZzZXQsIFNvdXJjZUxvY2F0aW9uIHNvdXJjZUxvY2F0aW9uKSB7CiAgICBzb3VyY2VMb2NhdGlvbnMuYWRkU291cmNlTG9jYXRpb24oY29kZU9mZnNldCwgc291cmNlTG9jYXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclB1c2goCiAgICAgIGludCBjb2RlT2Zmc2V0LCBTb3VyY2VMb2NhdGlvbiBzb3VyY2VMb2NhdGlvbiwgU3RyaW5nIGlubGluZWRNZXRob2ROYW1lKSB7CiAgICBzb3VyY2VMb2NhdGlvbnMuYWRkUHVzaChjb2RlT2Zmc2V0LCBzb3VyY2VMb2NhdGlvbiwgaW5saW5lZE1ldGhvZE5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclBvcChpbnQgY29kZU9mZnNldCwge2Jvb2wgaXNFbXB0eTogZmFsc2V9KSB7CiAgICBzb3VyY2VMb2NhdGlvbnMuYWRkUG9wKGNvZGVPZmZzZXQsIGlzRW1wdHkpOwogIH0KfQoKLy8vIEEgcHJvY2Vzc29yIHRoYXQgYXNzb2NpYXRlcyBbU291cmNlSW5mb3JtYXRpb25dIHdpdGggY29kZSBwb3NpdGlvbiBvZgovLy8gSmF2YVNjcmlwdCBbTm9kZV1zLgpjbGFzcyBTb3VyY2VJbmZvcm1hdGlvblByb2Nlc3NvciBleHRlbmRzIENvZGVQb3NpdGlvbkxpc3RlbmVyIHsKICBjb25zdCBTb3VyY2VJbmZvcm1hdGlvblByb2Nlc3NvcigpOwoKICAvLy8gUHJvY2VzcyB0aGUgc291cmNlIGluZm9ybWF0aW9uIGFuZCBjb2RlIHBvc2l0aW9ucyBmb3IgdGhlIFtub2RlXSBhbmQgYWxsCiAgLy8vIGl0cyBjaGlsZHJlbi4KICB2b2lkIHByb2Nlc3MoTm9kZSBub2RlLCBCdWZmZXJlZENvZGVPdXRwdXQgY29kZSkge30KfQp7AE5OPAEbASBHJ0cSAUsXTi8BT0tCLjEoLwQCAT4EPyAjAU8CAUEdIAFDBjE4AUoRBjIUTQIBSw0mMAIBM0EqASsBDDFMBAIBUA0eP0sBSBVQATYGTxQ7AgFNJTYpAS8BDExDBAEMFVFMBAEMPDEEAgFKGEAmAU8UNgIBLnBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzL2pzX3NvdXJjZV9tYXBwaW5nLmRhcnQ8c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfYmFja2VuZC9iYWNrZW5kX2ltcGFjdC5kYXJ0wABnfC8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuanNfaGVscGVycy5pbXBhY3Q7CgppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBDb21tb25FbGVtZW50cywgRWxlbWVudEVudmlyb25tZW50OwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnIHNob3cgSW50ZXJmYWNlVHlwZTsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS93b3JsZF9pbXBhY3QuZGFydCcKICAgIHNob3cgV29ybGRJbXBhY3QsIFdvcmxkSW1wYWN0QnVpbGRlciwgV29ybGRJbXBhY3RCdWlsZGVySW1wbDsKaW1wb3J0ICcuLi91bml2ZXJzZS91c2UuZGFydCc7CmltcG9ydCAnLi4vdXRpbC9lbnVtc2V0LmRhcnQnOwoKLy8vIEJhY2tlbmQgc3BlY2lmaWMgZmVhdHVyZXMgcmVxdWlyZWQgYnkgYSBiYWNrZW5kIGltcGFjdC4KZW51bSBCYWNrZW5kRmVhdHVyZSB7CiAgbmVlZFRvSW5pdGlhbGl6ZUlzb2xhdGVBZmZpbml0eVRhZywKICBuZWVkVG9Jbml0aWFsaXplRGlzcGF0Y2hQcm9wZXJ0eSwKfQoKLy8vIEEgc2V0IG9mIEphdmFTY3JpcHQgYmFja2VuZCBkZXBlbmRlbmNpZXMuCmNsYXNzIEJhY2tlbmRJbXBhY3QgewogIGZpbmFsIExpc3Q8RnVuY3Rpb25FbnRpdHk+IHN0YXRpY1VzZXM7CiAgZmluYWwgTGlzdDxGdW5jdGlvbkVudGl0eT4gZ2xvYmFsVXNlczsKICBmaW5hbCBMaXN0PFNlbGVjdG9yPiBkeW5hbWljVXNlczsKICBmaW5hbCBMaXN0PEludGVyZmFjZVR5cGU+IGluc3RhbnRpYXRlZFR5cGVzOwogIGZpbmFsIExpc3Q8Q2xhc3NFbnRpdHk+IGluc3RhbnRpYXRlZENsYXNzZXM7CiAgZmluYWwgTGlzdDxDbGFzc0VudGl0eT4gZ2xvYmFsQ2xhc3NlczsKICBmaW5hbCBMaXN0PEJhY2tlbmRJbXBhY3Q+IG90aGVySW1wYWN0czsKICBmaW5hbCBFbnVtU2V0PEJhY2tlbmRGZWF0dXJlPiBfZmVhdHVyZXM7CgogIGNvbnN0IEJhY2tlbmRJbXBhY3QoCiAgICAgIHt0aGlzLnN0YXRpY1VzZXM6IGNvbnN0IDxGdW5jdGlvbkVudGl0eT5bXSwKICAgICAgdGhpcy5nbG9iYWxVc2VzOiBjb25zdCA8RnVuY3Rpb25FbnRpdHk+W10sCiAgICAgIHRoaXMuZHluYW1pY1VzZXM6IGNvbnN0IDxTZWxlY3Rvcj5bXSwKICAgICAgdGhpcy5pbnN0YW50aWF0ZWRUeXBlczogY29uc3QgPEludGVyZmFjZVR5cGU+W10sCiAgICAgIHRoaXMuaW5zdGFudGlhdGVkQ2xhc3NlczogY29uc3QgPENsYXNzRW50aXR5PltdLAogICAgICB0aGlzLmdsb2JhbENsYXNzZXM6IGNvbnN0IDxDbGFzc0VudGl0eT5bXSwKICAgICAgdGhpcy5vdGhlckltcGFjdHM6IGNvbnN0IDxCYWNrZW5kSW1wYWN0PltdLAogICAgICBFbnVtU2V0PEJhY2tlbmRGZWF0dXJlPiBmZWF0dXJlczogY29uc3QgRW51bVNldDxCYWNrZW5kRmVhdHVyZT4uZml4ZWQoMCl9KQogICAgICA6IHRoaXMuX2ZlYXR1cmVzID0gZmVhdHVyZXM7CgogIEl0ZXJhYmxlPEJhY2tlbmRGZWF0dXJlPiBnZXQgZmVhdHVyZXMgPT4KICAgICAgX2ZlYXR1cmVzLml0ZXJhYmxlKEJhY2tlbmRGZWF0dXJlLnZhbHVlcyk7CgogIFdvcmxkSW1wYWN0IGNyZWF0ZUltcGFjdChFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50KSB7CiAgICBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsIGltcGFjdEJ1aWxkZXIgPSBuZXcgV29ybGRJbXBhY3RCdWlsZGVySW1wbCgpOwogICAgcmVnaXN0ZXJJbXBhY3QoaW1wYWN0QnVpbGRlciwgZWxlbWVudEVudmlyb25tZW50KTsKICAgIHJldHVybiBpbXBhY3RCdWlsZGVyOwogIH0KCiAgLy8vIFJlZ2lzdGVyIHRoaXMgYmFja2VuZCBpbXBhY3QgdG8gdGhlIFt3b3JsZEltcGFjdEJ1aWxkZXJdLgogIHZvaWQgcmVnaXN0ZXJJbXBhY3QoV29ybGRJbXBhY3RCdWlsZGVyIHdvcmxkSW1wYWN0QnVpbGRlciwKICAgICAgRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCkgewogICAgZm9yIChGdW5jdGlvbkVudGl0eSBzdGF0aWNVc2UgaW4gc3RhdGljVXNlcykgewogICAgICBhc3NlcnQoc3RhdGljVXNlICE9IG51bGwpOwogICAgICB3b3JsZEltcGFjdEJ1aWxkZXIKICAgICAgICAgIC5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLmltcGxpY2l0SW52b2tlKHN0YXRpY1VzZSkpOwogICAgfQogICAgZm9yIChGdW5jdGlvbkVudGl0eSBzdGF0aWNVc2UgaW4gZ2xvYmFsVXNlcykgewogICAgICBhc3NlcnQoc3RhdGljVXNlICE9IG51bGwpOwogICAgICB3b3JsZEltcGFjdEJ1aWxkZXIKICAgICAgICAgIC5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLmltcGxpY2l0SW52b2tlKHN0YXRpY1VzZSkpOwogICAgfQogICAgZm9yIChTZWxlY3RvciBzZWxlY3RvciBpbiBkeW5hbWljVXNlcykgewogICAgICBhc3NlcnQoc2VsZWN0b3IgIT0gbnVsbCk7CiAgICAgIHdvcmxkSW1wYWN0QnVpbGRlcgogICAgICAgICAgLnJlZ2lzdGVyRHluYW1pY1VzZShuZXcgRHluYW1pY1VzZShzZWxlY3RvciwgbnVsbCwgY29uc3QgW10pKTsKICAgIH0KICAgIGZvciAoSW50ZXJmYWNlVHlwZSBpbnN0YW50aWF0ZWRUeXBlIGluIGluc3RhbnRpYXRlZFR5cGVzKSB7CiAgICAgIHdvcmxkSW1wYWN0QnVpbGRlcgogICAgICAgICAgLnJlZ2lzdGVyVHlwZVVzZShuZXcgVHlwZVVzZS5pbnN0YW50aWF0aW9uKGluc3RhbnRpYXRlZFR5cGUpKTsKICAgIH0KICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xzIGluIGluc3RhbnRpYXRlZENsYXNzZXMpIHsKICAgICAgd29ybGRJbXBhY3RCdWlsZGVyLnJlZ2lzdGVyVHlwZVVzZSgKICAgICAgICAgIG5ldyBUeXBlVXNlLmluc3RhbnRpYXRpb24oZWxlbWVudEVudmlyb25tZW50LmdldFJhd1R5cGUoY2xzKSkpOwogICAgfQogICAgZm9yIChDbGFzc0VudGl0eSBjbHMgaW4gZ2xvYmFsQ2xhc3NlcykgewogICAgICB3b3JsZEltcGFjdEJ1aWxkZXIucmVnaXN0ZXJUeXBlVXNlKAogICAgICAgICAgbmV3IFR5cGVVc2UuaW5zdGFudGlhdGlvbihlbGVtZW50RW52aXJvbm1lbnQuZ2V0UmF3VHlwZShjbHMpKSk7CiAgICB9CiAgICBmb3IgKEJhY2tlbmRJbXBhY3Qgb3RoZXJJbXBhY3QgaW4gb3RoZXJJbXBhY3RzKSB7CiAgICAgIG90aGVySW1wYWN0LnJlZ2lzdGVySW1wYWN0KHdvcmxkSW1wYWN0QnVpbGRlciwgZWxlbWVudEVudmlyb25tZW50KTsKICAgIH0KICB9Cn0KCi8vLyBUaGUgSmF2YVNjcmlwdCBiYWNrZW5kIGRlcGVuZGVuY2llcyBmb3IgdmFyaW91cyBmZWF0dXJlcy4KY2xhc3MgQmFja2VuZEltcGFjdHMgewogIGZpbmFsIENvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKICBmaW5hbCBib29sIF9uZXdSdGk7CgogIEJhY2tlbmRJbXBhY3RzKHRoaXMuX2NvbW1vbkVsZW1lbnRzLCB0aGlzLl9uZXdSdGkpOwoKICBCYWNrZW5kSW1wYWN0IF9nZXRSdW50aW1lVHlwZUFyZ3VtZW50OwoKICBCYWNrZW5kSW1wYWN0IGdldCBnZXRSdW50aW1lVHlwZUFyZ3VtZW50IHsKICAgIHJldHVybiBfZ2V0UnVudGltZVR5cGVBcmd1bWVudCA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoZ2xvYmFsVXNlczogWwogICAgICBfY29tbW9uRWxlbWVudHMuZ2V0UnVudGltZVR5cGVBcmd1bWVudEludGVyY2VwdGVkLAogICAgICBfY29tbW9uRWxlbWVudHMuZ2V0UnVudGltZVR5cGVBcmd1bWVudCwKICAgICAgX2NvbW1vbkVsZW1lbnRzLmdldFR5cGVBcmd1bWVudEJ5SW5kZXgsCiAgICBdLCBvdGhlckltcGFjdHM6IG5ld1J0aUltcGFjdHMoJ2dldFJ1bnRpbWVUeXBlQXJndW1lbnQnKSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9jb21wdXRlU2lnbmF0dXJlOwoKICBCYWNrZW5kSW1wYWN0IGdldCBjb21wdXRlU2lnbmF0dXJlIHsKICAgIHJldHVybiBfY29tcHV0ZVNpZ25hdHVyZSA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoZ2xvYmFsVXNlczogWwogICAgICBfY29tbW9uRWxlbWVudHMuc2V0UnVudGltZVR5cGVJbmZvLAogICAgICBfY29tbW9uRWxlbWVudHMuZ2V0UnVudGltZVR5cGVJbmZvLAogICAgICBfY29tbW9uRWxlbWVudHMuY29tcHV0ZVNpZ25hdHVyZSwKICAgICAgX2NvbW1vbkVsZW1lbnRzLmdldFJ1bnRpbWVUeXBlQXJndW1lbnRzLAogICAgXSwgb3RoZXJJbXBhY3RzOiBbCiAgICAgIGxpc3RWYWx1ZXMKICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfbWFpbldpdGhBcmd1bWVudHM7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IG1haW5XaXRoQXJndW1lbnRzIHsKICAgIHJldHVybiBfbWFpbldpdGhBcmd1bWVudHMgPz89IG5ldyBCYWNrZW5kSW1wYWN0KGluc3RhbnRpYXRlZENsYXNzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcywKICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzU3RyaW5nQ2xhc3MKICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfYXN5bmNCb2R5OwoKICBCYWNrZW5kSW1wYWN0IGdldCBhc3luY0JvZHkgPT4gX2FzeW5jQm9keSA/Pz0gbmV3IEJhY2tlbmRJbXBhY3Qoc3RhdGljVXNlczogWwogICAgICAgIF9jb21tb25FbGVtZW50cy5hc3luY0hlbHBlckF3YWl0LAogICAgICAgIF9jb21tb25FbGVtZW50cy5hc3luY0hlbHBlclJldHVybiwKICAgICAgICBfY29tbW9uRWxlbWVudHMuYXN5bmNIZWxwZXJSZXRocm93LAogICAgICAgIF9jb21tb25FbGVtZW50cy5zdHJlYW1JdGVyYXRvckNvbnN0cnVjdG9yLAogICAgICAgIF9jb21tb25FbGVtZW50cy53cmFwQm9keSwKICAgICAgICBfY29tbW9uRWxlbWVudHMuYXN5bmNIZWxwZXJTdGFydFN5bmMKICAgICAgXSk7CgogIEJhY2tlbmRJbXBhY3QgX3N5bmNTdGFyQm9keTsKCiAgQmFja2VuZEltcGFjdCBnZXQgc3luY1N0YXJCb2R5IHsKICAgIHJldHVybiBfc3luY1N0YXJCb2R5ID8/PSBuZXcgQmFja2VuZEltcGFjdChzdGF0aWNVc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy5lbmRPZkl0ZXJhdGlvbiwKICAgICAgX2NvbW1vbkVsZW1lbnRzLnlpZWxkU3RhciwKICAgICAgX2NvbW1vbkVsZW1lbnRzLnN5bmNTdGFyVW5jYXVnaHRFcnJvciwKICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfYXN5bmNTdGFyQm9keTsKCiAgQmFja2VuZEltcGFjdCBnZXQgYXN5bmNTdGFyQm9keSB7CiAgICByZXR1cm4gX2FzeW5jU3RhckJvZHkgPz89IG5ldyBCYWNrZW5kSW1wYWN0KHN0YXRpY1VzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLmFzeW5jU3RhckhlbHBlciwKICAgICAgX2NvbW1vbkVsZW1lbnRzLnN0cmVhbU9mQ29udHJvbGxlciwKICAgICAgX2NvbW1vbkVsZW1lbnRzLnlpZWxkU2luZ2xlLAogICAgICBfY29tbW9uRWxlbWVudHMueWllbGRTdGFyLAogICAgICBfY29tbW9uRWxlbWVudHMuc3RyZWFtSXRlcmF0b3JDb25zdHJ1Y3RvciwKICAgICAgX2NvbW1vbkVsZW1lbnRzLndyYXBCb2R5LAogICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF90eXBlVmFyaWFibGVCb3VuZENoZWNrOwoKICBCYWNrZW5kSW1wYWN0IGdldCB0eXBlVmFyaWFibGVCb3VuZENoZWNrIHsKICAgIHJldHVybiBfdHlwZVZhcmlhYmxlQm91bmRDaGVjayA/Pz0gbmV3IEJhY2tlbmRJbXBhY3Qoc3RhdGljVXNlczogWwogICAgICBfY29tbW9uRWxlbWVudHMudGhyb3dUeXBlRXJyb3IsCiAgICAgIF9jb21tb25FbGVtZW50cy5hc3NlcnRJc1N1YnR5cGUsCiAgICAgIGlmIChfbmV3UnRpKSBfY29tbW9uRWxlbWVudHMuY2hlY2tUeXBlQm91bmQsCiAgICBdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2Fic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uOwoKICBCYWNrZW5kSW1wYWN0IGdldCBhYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbiB7CiAgICByZXR1cm4gX2Fic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uID8/PSBuZXcgQmFja2VuZEltcGFjdCgKICAgICAgICBzdGF0aWNVc2VzOiBbX2NvbW1vbkVsZW1lbnRzLnRocm93QWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvcl0sCiAgICAgICAgb3RoZXJJbXBhY3RzOiBbX25lZWRzU3RyaW5nKCdOZWVkZWQgdG8gZW5jb2RlIHRoZSBtZXNzYWdlLicpXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9mYWxsVGhyb3VnaEVycm9yOwoKICBCYWNrZW5kSW1wYWN0IGdldCBmYWxsVGhyb3VnaEVycm9yIHsKICAgIHJldHVybiBfZmFsbFRocm91Z2hFcnJvciA/Pz0KICAgICAgICBuZXcgQmFja2VuZEltcGFjdChzdGF0aWNVc2VzOiBbX2NvbW1vbkVsZW1lbnRzLmZhbGxUaHJvdWdoRXJyb3JdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2FzQ2hlY2s7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IGFzQ2hlY2sgewogICAgcmV0dXJuIF9hc0NoZWNrID8/PSBuZXcgQmFja2VuZEltcGFjdChzdGF0aWNVc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy50aHJvd1J1bnRpbWVFcnJvciwKICAgIF0sIG90aGVySW1wYWN0czogbmV3UnRpSW1wYWN0cygnYXNDaGVjaycpKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX3Rocm93Tm9TdWNoTWV0aG9kOwoKICBCYWNrZW5kSW1wYWN0IGdldCB0aHJvd05vU3VjaE1ldGhvZCB7CiAgICByZXR1cm4gX3Rocm93Tm9TdWNoTWV0aG9kID8/PSBuZXcgQmFja2VuZEltcGFjdChzdGF0aWNVc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy50aHJvd05vU3VjaE1ldGhvZCwKICAgIF0sIG90aGVySW1wYWN0czogWwogICAgICAvLyBBbHNvIHJlZ2lzdGVyIHRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGlzIG1ldGhvZC4KICAgICAgX25lZWRzTGlzdCgnTmVlZGVkIHRvIGVuY29kZSB0aGUgYXJndW1lbnRzIGZvciB0aHJvdyBOb1N1Y2hNZXRob2RFcnJvci4nKSwKICAgICAgX25lZWRzU3RyaW5nKCdOZWVkZWQgdG8gZW5jb2RlIHRoZSBuYW1lIGZvciB0aHJvdyBOb1N1Y2hNZXRob2RFcnJvci4nKSwKICAgICAgbWFwTGl0ZXJhbENsYXNzLCAvLyBub1N1Y2hNZXRob2QgaGVscGVycyBhcmUgcGFzc2VkIGEgTWFwLgogICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9zdHJpbmdWYWx1ZXM7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHN0cmluZ1ZhbHVlcyB7CiAgICByZXR1cm4gX3N0cmluZ1ZhbHVlcyA/Pz0KICAgICAgICBuZXcgQmFja2VuZEltcGFjdChpbnN0YW50aWF0ZWRDbGFzc2VzOiBbX2NvbW1vbkVsZW1lbnRzLmpzU3RyaW5nQ2xhc3NdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX251bVZhbHVlczsKCiAgQmFja2VuZEltcGFjdCBnZXQgbnVtVmFsdWVzIHsKICAgIHJldHVybiBfbnVtVmFsdWVzID8/PSBuZXcgQmFja2VuZEltcGFjdChpbnN0YW50aWF0ZWRDbGFzc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy5qc0ludENsYXNzLAogICAgICBfY29tbW9uRWxlbWVudHMuanNQb3NpdGl2ZUludENsYXNzLAogICAgICBfY29tbW9uRWxlbWVudHMuanNVSW50MzJDbGFzcywKICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzVUludDMxQ2xhc3MsCiAgICAgIF9jb21tb25FbGVtZW50cy5qc051bWJlckNsYXNzLAogICAgICBfY29tbW9uRWxlbWVudHMuanNEb3VibGVDbGFzcwogICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IGdldCBpbnRWYWx1ZXMgPT4gbnVtVmFsdWVzOwoKICBCYWNrZW5kSW1wYWN0IGdldCBkb3VibGVWYWx1ZXMgPT4gbnVtVmFsdWVzOwoKICBCYWNrZW5kSW1wYWN0IF9ib29sVmFsdWVzOwoKICBCYWNrZW5kSW1wYWN0IGdldCBib29sVmFsdWVzIHsKICAgIHJldHVybiBfYm9vbFZhbHVlcyA/Pz0KICAgICAgICBuZXcgQmFja2VuZEltcGFjdChpbnN0YW50aWF0ZWRDbGFzc2VzOiBbX2NvbW1vbkVsZW1lbnRzLmpzQm9vbENsYXNzXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9udWxsVmFsdWU7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IG51bGxWYWx1ZSB7CiAgICByZXR1cm4gX251bGxWYWx1ZSA/Pz0KICAgICAgICBuZXcgQmFja2VuZEltcGFjdChpbnN0YW50aWF0ZWRDbGFzc2VzOiBbX2NvbW1vbkVsZW1lbnRzLmpzTnVsbENsYXNzXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9saXN0VmFsdWVzOwoKICBCYWNrZW5kSW1wYWN0IGdldCBsaXN0VmFsdWVzIHsKICAgIHJldHVybiBfbGlzdFZhbHVlcyA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoZ2xvYmFsQ2xhc3NlczogWwogICAgICBfY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzLAogICAgICBfY29tbW9uRWxlbWVudHMuanNNdXRhYmxlQXJyYXlDbGFzcywKICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzRml4ZWRBcnJheUNsYXNzLAogICAgICBfY29tbW9uRWxlbWVudHMuanNFeHRlbmRhYmxlQXJyYXlDbGFzcywKICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzVW5tb2RpZmlhYmxlQXJyYXlDbGFzcwogICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF90aHJvd1J1bnRpbWVFcnJvcjsKCiAgQmFja2VuZEltcGFjdCBnZXQgdGhyb3dSdW50aW1lRXJyb3IgewogICAgcmV0dXJuIF90aHJvd1J1bnRpbWVFcnJvciA/Pz0gbmV3IEJhY2tlbmRJbXBhY3Qoc3RhdGljVXNlczogWwogICAgICBfY29tbW9uRWxlbWVudHMudGhyb3dSdW50aW1lRXJyb3IsCiAgICBdLCBvdGhlckltcGFjdHM6IFsKICAgICAgLy8gQWxzbyByZWdpc3RlciB0aGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhpcyBtZXRob2QuCiAgICAgIHN0cmluZ1ZhbHVlcwogICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF90aHJvd1Vuc3VwcG9ydGVkRXJyb3I7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHRocm93VW5zdXBwb3J0ZWRFcnJvciB7CiAgICByZXR1cm4gX3Rocm93VW5zdXBwb3J0ZWRFcnJvciA/Pz0gbmV3IEJhY2tlbmRJbXBhY3Qoc3RhdGljVXNlczogWwogICAgICBfY29tbW9uRWxlbWVudHMudGhyb3dVbnN1cHBvcnRlZEVycm9yCiAgICBdLCBvdGhlckltcGFjdHM6IFsKICAgICAgLy8gQWxzbyByZWdpc3RlciB0aGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhpcyBtZXRob2QuCiAgICAgIHN0cmluZ1ZhbHVlcwogICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9zdXBlck5vU3VjaE1ldGhvZDsKCiAgQmFja2VuZEltcGFjdCBnZXQgc3VwZXJOb1N1Y2hNZXRob2QgewogICAgcmV0dXJuIF9zdXBlck5vU3VjaE1ldGhvZCA/Pz0gbmV3IEJhY2tlbmRJbXBhY3Qoc3RhdGljVXNlczogWwogICAgICBfY29tbW9uRWxlbWVudHMuY3JlYXRlSW52b2NhdGlvbk1pcnJvciwKICAgICAgX2NvbW1vbkVsZW1lbnRzLm9iamVjdE5vU3VjaE1ldGhvZAogICAgXSwgb3RoZXJJbXBhY3RzOiBbCiAgICAgIF9uZWVkc0ludCgnTmVlZGVkIHRvIGVuY29kZSB0aGUgaW52b2NhdGlvbiBraW5kIG9mIHN1cGVyLm5vU3VjaE1ldGhvZC4nKSwKICAgICAgX25lZWRzTGlzdCgnTmVlZGVkIHRvIGVuY29kZSB0aGUgYXJndW1lbnRzIG9mIHN1cGVyLm5vU3VjaE1ldGhvZC4nKSwKICAgICAgX25lZWRzU3RyaW5nKCdOZWVkZWQgdG8gZW5jb2RlIHRoZSBuYW1lIG9mIHN1cGVyLm5vU3VjaE1ldGhvZC4nKQogICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9jb25zdGFudE1hcExpdGVyYWw7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IGNvbnN0YW50TWFwTGl0ZXJhbCB7CiAgICByZXR1cm4gX2NvbnN0YW50TWFwTGl0ZXJhbCA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoaW5zdGFudGlhdGVkQ2xhc3NlczogWwogICAgICBfY29tbW9uRWxlbWVudHMuY29uc3RhbnRNYXBDbGFzcywKICAgICAgX2NvbW1vbkVsZW1lbnRzLmNvbnN0YW50UHJvdG9NYXBDbGFzcywKICAgICAgX2NvbW1vbkVsZW1lbnRzLmNvbnN0YW50U3RyaW5nTWFwQ2xhc3MsCiAgICAgIF9jb21tb25FbGVtZW50cy5nZW5lcmFsQ29uc3RhbnRNYXBDbGFzcywKICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfY29uc3RhbnRTZXRMaXRlcmFsOwoKICBCYWNrZW5kSW1wYWN0IGdldCBjb25zdGFudFNldExpdGVyYWwgPT4KICAgICAgX2NvbnN0YW50U2V0TGl0ZXJhbCA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoaW5zdGFudGlhdGVkQ2xhc3NlczogWwogICAgICAgIF9jb21tb25FbGVtZW50cy5jb25zdFNldExpdGVyYWxDbGFzcywKICAgICAgXSwgb3RoZXJJbXBhY3RzOiBbCiAgICAgICAgY29uc3RhbnRNYXBMaXRlcmFsCiAgICAgIF0pOwoKICBCYWNrZW5kSW1wYWN0IF9zeW1ib2xDb25zdHJ1Y3RvcjsKCiAgQmFja2VuZEltcGFjdCBnZXQgc3ltYm9sQ29uc3RydWN0b3IgewogICAgcmV0dXJuIF9zeW1ib2xDb25zdHJ1Y3RvciA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoCiAgICAgICAgc3RhdGljVXNlczogW19jb21tb25FbGVtZW50cy5zeW1ib2xWYWxpZGF0ZWRDb25zdHJ1Y3Rvcl0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfY29uc3RTeW1ib2w7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IGNvbnN0U3ltYm9sIHsKICAgIHJldHVybiBfY29uc3RTeW1ib2wgPz89IG5ldyBCYWNrZW5kSW1wYWN0KAogICAgICAgIGluc3RhbnRpYXRlZENsYXNzZXM6IFtfY29tbW9uRWxlbWVudHMuc3ltYm9sSW1wbGVtZW50YXRpb25DbGFzc10sCiAgICAgICAgc3RhdGljVXNlczogW19jb21tb25FbGVtZW50cy5zeW1ib2xDb25zdHJ1Y3RvclRhcmdldF0pOwogIH0KCiAgLy8vIEhlbHBlciBmb3IgcmVnaXN0ZXJpbmcgdGhhdCBgaW50YCBpcyBuZWVkZWQuCiAgQmFja2VuZEltcGFjdCBfbmVlZHNJbnQoU3RyaW5nIHJlYXNvbikgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVnaXN0ZXIgW3JlYXNvbl0gZm9yIHVzZSBpbiBkdW1wLWluZm8uCiAgICByZXR1cm4gaW50VmFsdWVzOwogIH0KCiAgLy8vIEhlbHBlciBmb3IgcmVnaXN0ZXJpbmcgdGhhdCBgTGlzdGAgaXMgbmVlZGVkLgogIEJhY2tlbmRJbXBhY3QgX25lZWRzTGlzdChTdHJpbmcgcmVhc29uKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZWdpc3RlciBbcmVhc29uXSBmb3IgdXNlIGluIGR1bXAtaW5mby4KICAgIHJldHVybiBsaXN0VmFsdWVzOwogIH0KCiAgLy8vIEhlbHBlciBmb3IgcmVnaXN0ZXJpbmcgdGhhdCBgU3RyaW5nYCBpcyBuZWVkZWQuCiAgQmFja2VuZEltcGFjdCBfbmVlZHNTdHJpbmcoU3RyaW5nIHJlYXNvbikgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVnaXN0ZXIgW3JlYXNvbl0gZm9yIHVzZSBpbiBkdW1wLWluZm8uCiAgICByZXR1cm4gc3RyaW5nVmFsdWVzOwogIH0KCiAgQmFja2VuZEltcGFjdCBfYXNzZXJ0V2l0aG91dE1lc3NhZ2U7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IGFzc2VydFdpdGhvdXRNZXNzYWdlIHsKICAgIHJldHVybiBfYXNzZXJ0V2l0aG91dE1lc3NhZ2UgPz89CiAgICAgICAgbmV3IEJhY2tlbmRJbXBhY3Qoc3RhdGljVXNlczogW19jb21tb25FbGVtZW50cy5hc3NlcnRIZWxwZXJdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2Fzc2VydFdpdGhNZXNzYWdlOwoKICBCYWNrZW5kSW1wYWN0IGdldCBhc3NlcnRXaXRoTWVzc2FnZSB7CiAgICByZXR1cm4gX2Fzc2VydFdpdGhNZXNzYWdlID8/PSBuZXcgQmFja2VuZEltcGFjdCgKICAgICAgICBzdGF0aWNVc2VzOiBbX2NvbW1vbkVsZW1lbnRzLmFzc2VydFRlc3QsIF9jb21tb25FbGVtZW50cy5hc3NlcnRUaHJvd10pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfYXN5bmNGb3JJbjsKCiAgQmFja2VuZEltcGFjdCBnZXQgYXN5bmNGb3JJbiB7CiAgICByZXR1cm4gX2FzeW5jRm9ySW4gPz89IG5ldyBCYWNrZW5kSW1wYWN0KAogICAgICAgIHN0YXRpY1VzZXM6IFtfY29tbW9uRWxlbWVudHMuc3RyZWFtSXRlcmF0b3JDb25zdHJ1Y3Rvcl0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfc3RyaW5nSW50ZXJwb2xhdGlvbjsKCiAgQmFja2VuZEltcGFjdCBnZXQgc3RyaW5nSW50ZXJwb2xhdGlvbiB7CiAgICByZXR1cm4gX3N0cmluZ0ludGVycG9sYXRpb24gPz89IG5ldyBCYWNrZW5kSW1wYWN0KAogICAgICAgIGR5bmFtaWNVc2VzOiBbU2VsZWN0b3JzLnRvU3RyaW5nX10sCiAgICAgICAgc3RhdGljVXNlczogW19jb21tb25FbGVtZW50cy5zdHJpbmdJbnRlcnBvbGF0aW9uSGVscGVyXSwKICAgICAgICBvdGhlckltcGFjdHM6IFtfbmVlZHNTdHJpbmcoJ1N0cmluZ3MgYXJlIGNyZWF0ZWQuJyldKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX3N0cmluZ0p1eHRhcG9zaXRpb247CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHN0cmluZ0p1eHRhcG9zaXRpb24gewogICAgcmV0dXJuIF9zdHJpbmdKdXh0YXBvc2l0aW9uID8/PSBfbmVlZHNTdHJpbmcoJ1N0cmluZy5jb25jYXQgaXMgdXNlZC4nKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgZ2V0IG51bGxMaXRlcmFsID0+IG51bGxWYWx1ZTsKCiAgQmFja2VuZEltcGFjdCBnZXQgYm9vbExpdGVyYWwgPT4gYm9vbFZhbHVlczsKCiAgQmFja2VuZEltcGFjdCBnZXQgaW50TGl0ZXJhbCA9PiBpbnRWYWx1ZXM7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IGRvdWJsZUxpdGVyYWwgPT4gZG91YmxlVmFsdWVzOwoKICBCYWNrZW5kSW1wYWN0IGdldCBzdHJpbmdMaXRlcmFsID0+IHN0cmluZ1ZhbHVlczsKCiAgQmFja2VuZEltcGFjdCBfY2F0Y2hTdGF0ZW1lbnQ7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IGNhdGNoU3RhdGVtZW50IHsKICAgIHJldHVybiBfY2F0Y2hTdGF0ZW1lbnQgPz89IG5ldyBCYWNrZW5kSW1wYWN0KHN0YXRpY1VzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLmV4Y2VwdGlvblVud3JhcHBlcgogICAgXSwgaW5zdGFudGlhdGVkQ2xhc3NlczogWwogICAgICBfY29tbW9uRWxlbWVudHMuanNQbGFpbkphdmFTY3JpcHRPYmplY3RDbGFzcywKICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzVW5rbm93bkphdmFTY3JpcHRPYmplY3RDbGFzcwogICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF90aHJvd0V4cHJlc3Npb247CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHRocm93RXhwcmVzc2lvbiB7CiAgICByZXR1cm4gX3Rocm93RXhwcmVzc2lvbiA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoCiAgICAgICAgLy8gV2UgZG9uJ3Qga25vdyBhaGVhZCBvZiB0aW1lIHdoZXRoZXIgd2Ugd2lsbCBuZWVkIHRoZSB0aHJvdyBpbiBhCiAgICAgICAgLy8gc3RhdGVtZW50IGNvbnRleHQgb3IgYW4gZXhwcmVzc2lvbiBjb250ZXh0LCBzbyB3ZSByZWdpc3RlciBib3RoCiAgICAgICAgLy8gaGVyZSwgZXZlbiB0aG91Z2ggd2UgbWF5IG5vdCBuZWVkIHRoZSB0aHJvd0V4cHJlc3Npb24gaGVscGVyLgogICAgICAgIHN0YXRpY1VzZXM6IFsKICAgICAgICAgIF9jb21tb25FbGVtZW50cy53cmFwRXhjZXB0aW9uSGVscGVyLAogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnRocm93RXhwcmVzc2lvbkhlbHBlcgogICAgICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfbGF6eUZpZWxkOwoKICBCYWNrZW5kSW1wYWN0IGdldCBsYXp5RmllbGQgewogICAgcmV0dXJuIF9sYXp5RmllbGQgPz89CiAgICAgICAgbmV3IEJhY2tlbmRJbXBhY3Qoc3RhdGljVXNlczogW19jb21tb25FbGVtZW50cy5jeWNsaWNUaHJvd0hlbHBlcl0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfdHlwZUxpdGVyYWw7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHR5cGVMaXRlcmFsIHsKICAgIHJldHVybiBfdHlwZUxpdGVyYWwgPz89IG5ldyBCYWNrZW5kSW1wYWN0KGluc3RhbnRpYXRlZENsYXNzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLnR5cGVMaXRlcmFsQ2xhc3MKICAgIF0sIHN0YXRpY1VzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLmNyZWF0ZVJ1bnRpbWVUeXBlLAogICAgICBpZiAoX25ld1J0aSkgX2NvbW1vbkVsZW1lbnRzLnR5cGVMaXRlcmFsTWFrZXIsCiAgICBdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX3N0YWNrVHJhY2VJbkNhdGNoOwoKICBCYWNrZW5kSW1wYWN0IGdldCBzdGFja1RyYWNlSW5DYXRjaCB7CiAgICByZXR1cm4gX3N0YWNrVHJhY2VJbkNhdGNoID8/PSBuZXcgQmFja2VuZEltcGFjdCgKICAgICAgICBpbnN0YW50aWF0ZWRDbGFzc2VzOiBbX2NvbW1vbkVsZW1lbnRzLnN0YWNrVHJhY2VIZWxwZXJDbGFzc10sCiAgICAgICAgc3RhdGljVXNlczogW19jb21tb25FbGVtZW50cy50cmFjZUZyb21FeGNlcHRpb25dKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX3N5bmNGb3JJbjsKCiAgQmFja2VuZEltcGFjdCBnZXQgc3luY0ZvckluIHsKICAgIHJldHVybiBfc3luY0ZvckluID8/PSBuZXcgQmFja2VuZEltcGFjdCgKICAgICAgICAvLyBUaGUgU1NBIGJ1aWxkZXIgcmVjb2duaXplcyBjZXJ0YWluIGZvci1pbiBsb29wcyBhbmQgY2FuIGdlbmVyYXRlCiAgICAgICAgLy8gY2FsbHMgdG8gdGhyb3dDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IuCiAgICAgICAgc3RhdGljVXNlczogW19jb21tb25FbGVtZW50cy5jaGVja0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcl0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfdHlwZVZhcmlhYmxlRXhwcmVzc2lvbjsKCiAgQmFja2VuZEltcGFjdCBnZXQgdHlwZVZhcmlhYmxlRXhwcmVzc2lvbiB7CiAgICByZXR1cm4gX3R5cGVWYXJpYWJsZUV4cHJlc3Npb24gPz89IG5ldyBCYWNrZW5kSW1wYWN0KHN0YXRpY1VzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLnNldFJ1bnRpbWVUeXBlSW5mbywKICAgICAgX2NvbW1vbkVsZW1lbnRzLmdldFJ1bnRpbWVUeXBlSW5mbywKICAgICAgX2NvbW1vbkVsZW1lbnRzLmNyZWF0ZVJ1bnRpbWVUeXBlCiAgICBdLCBvdGhlckltcGFjdHM6IFsKICAgICAgbGlzdFZhbHVlcywKICAgICAgZ2V0UnVudGltZVR5cGVBcmd1bWVudCwKICAgICAgX25lZWRzSW50KCdOZWVkZWQgZm9yIGFjY2Vzc2luZyBhIHR5cGUgdmFyaWFibGUgbGl0ZXJhbCBvbiB0aGlzLicpCiAgICBdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX3R5cGVDaGVjazsKCiAgQmFja2VuZEltcGFjdCBnZXQgdHlwZUNoZWNrIHsKICAgIHJldHVybiBfdHlwZUNoZWNrID8/PSBuZXcgQmFja2VuZEltcGFjdChvdGhlckltcGFjdHM6IFtib29sVmFsdWVzXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9nZW5lcmljVHlwZUNoZWNrOwoKICBCYWNrZW5kSW1wYWN0IGdldCBnZW5lcmljVHlwZUNoZWNrIHsKICAgIHJldHVybiBfZ2VuZXJpY1R5cGVDaGVjayA/Pz0gbmV3IEJhY2tlbmRJbXBhY3Qoc3RhdGljVXNlczogWwogICAgICBfY29tbW9uRWxlbWVudHMuY2hlY2tTdWJ0eXBlLAogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJbnZlc3RpZ2F0ZSB3aHkgdGhpcyBpcyBuZWVkZWQuCiAgICAgIF9jb21tb25FbGVtZW50cy5zZXRSdW50aW1lVHlwZUluZm8sCiAgICAgIF9jb21tb25FbGVtZW50cy5nZXRSdW50aW1lVHlwZUluZm8KICAgIF0sIG90aGVySW1wYWN0czogWwogICAgICBsaXN0VmFsdWVzLAogICAgICBnZXRSdW50aW1lVHlwZUFyZ3VtZW50CiAgICBdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2dlbmVyaWNJc0NoZWNrOwoKICBCYWNrZW5kSW1wYWN0IGdldCBnZW5lcmljSXNDaGVjayB7CiAgICByZXR1cm4gX2dlbmVyaWNJc0NoZWNrID8/PSBuZXcgQmFja2VuZEltcGFjdChvdGhlckltcGFjdHM6IFtpbnRWYWx1ZXNdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX3R5cGVWYXJpYWJsZVR5cGVDaGVjazsKCiAgQmFja2VuZEltcGFjdCBnZXQgdHlwZVZhcmlhYmxlVHlwZUNoZWNrIHsKICAgIHJldHVybiBfdHlwZVZhcmlhYmxlVHlwZUNoZWNrID8/PSBuZXcgQmFja2VuZEltcGFjdCgKICAgICAgICBzdGF0aWNVc2VzOiBbX2NvbW1vbkVsZW1lbnRzLmNoZWNrU3VidHlwZU9mUnVudGltZVR5cGVdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2Z1bmN0aW9uVHlwZUNoZWNrOwoKICBCYWNrZW5kSW1wYWN0IGdldCBmdW5jdGlvblR5cGVDaGVjayB7CiAgICByZXR1cm4gX2Z1bmN0aW9uVHlwZUNoZWNrID8/PQogICAgICAgIG5ldyBCYWNrZW5kSW1wYWN0KHN0YXRpY1VzZXM6IFsvKmhlbHBlcnMuZnVuY3Rpb25UeXBlVGVzdE1ldGFIZWxwZXIqL10pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfZnV0dXJlT3JUeXBlQ2hlY2s7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IGZ1dHVyZU9yVHlwZUNoZWNrIHsKICAgIHJldHVybiBfZnV0dXJlT3JUeXBlQ2hlY2sgPz89CiAgICAgICAgbmV3IEJhY2tlbmRJbXBhY3Qoc3RhdGljVXNlczogW19jb21tb25FbGVtZW50cy5mdXR1cmVPclRlc3RdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX25hdGl2ZVR5cGVDaGVjazsKCiAgQmFja2VuZEltcGFjdCBnZXQgbmF0aXZlVHlwZUNoZWNrIHsKICAgIHJldHVybiBfbmF0aXZlVHlwZUNoZWNrID8/PSBuZXcgQmFja2VuZEltcGFjdChzdGF0aWNVc2VzOiBbCiAgICAgIC8vIFdlIHdpbGwgbmVlZCB0byBhZGQgdGhlICIkaXMiIGFuZCAiJGFzIiBwcm9wZXJ0aWVzIG9uIHRoZQogICAgICAvLyBKYXZhU2NyaXB0IG9iamVjdCBwcm90b3R5cGUsIHNvIHdlIG1ha2Ugc3VyZQogICAgICAvLyBbOmRlZmluZVByb3BlcnR5Ol0gaXMgY29tcGlsZWQuCiAgICAgIF9jb21tb25FbGVtZW50cy5kZWZpbmVQcm9wZXJ0eQogICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9jbG9zdXJlOwoKICBCYWNrZW5kSW1wYWN0IGdldCBjbG9zdXJlIHsKICAgIHJldHVybiBfY2xvc3VyZSA/Pz0KICAgICAgICBuZXcgQmFja2VuZEltcGFjdChpbnN0YW50aWF0ZWRDbGFzc2VzOiBbX2NvbW1vbkVsZW1lbnRzLmZ1bmN0aW9uQ2xhc3NdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2ludGVyY2VwdG9yVXNlOwoKICBCYWNrZW5kSW1wYWN0IGdldCBpbnRlcmNlcHRvclVzZSB7CiAgICByZXR1cm4gX2ludGVyY2VwdG9yVXNlID8/PSBuZXcgQmFja2VuZEltcGFjdCgKICAgICAgICBzdGF0aWNVc2VzOiBbCiAgICAgICAgICBfY29tbW9uRWxlbWVudHMuZ2V0TmF0aXZlSW50ZXJjZXB0b3JNZXRob2QKICAgICAgICBdLAogICAgICAgIGluc3RhbnRpYXRlZENsYXNzZXM6IFsKICAgICAgICAgIF9jb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRPYmplY3RDbGFzcywKICAgICAgICAgIF9jb21tb25FbGVtZW50cy5qc1BsYWluSmF2YVNjcmlwdE9iamVjdENsYXNzLAogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzSmF2YVNjcmlwdEZ1bmN0aW9uQ2xhc3MKICAgICAgICBdLAogICAgICAgIGZlYXR1cmVzOiBuZXcgRW51bVNldDxCYWNrZW5kRmVhdHVyZT4uZnJvbVZhbHVlcyhbCiAgICAgICAgICBCYWNrZW5kRmVhdHVyZS5uZWVkVG9Jbml0aWFsaXplRGlzcGF0Y2hQcm9wZXJ0eSwKICAgICAgICAgIEJhY2tlbmRGZWF0dXJlLm5lZWRUb0luaXRpYWxpemVJc29sYXRlQWZmaW5pdHlUYWcKICAgICAgICBdLCBmaXhlZDogdHJ1ZSkpOwogIH0KCiAgQmFja2VuZEltcGFjdCBfYWxsb3dJbnRlcm9wOwoKICBCYWNrZW5kSW1wYWN0IGdldCBhbGxvd0ludGVyb3AgPT4gX2FsbG93SW50ZXJvcCA/Pz0gQmFja2VuZEltcGFjdCgKICAgICAgICAgIHN0YXRpY1VzZXM6IFsKICAgICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzQWxsb3dJbnRlcm9wLAogICAgICAgICAgXSwKICAgICAgICAgIGZlYXR1cmVzOiBFbnVtU2V0PEJhY2tlbmRGZWF0dXJlPi5mcm9tVmFsdWVzKFsKICAgICAgICAgICAgQmFja2VuZEZlYXR1cmUubmVlZFRvSW5pdGlhbGl6ZUlzb2xhdGVBZmZpbml0eVRhZywKICAgICAgICAgIF0sIGZpeGVkOiB0cnVlKSk7CgogIEJhY2tlbmRJbXBhY3QgX251bUNsYXNzZXM7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IG51bUNsYXNzZXMgewogICAgcmV0dXJuIF9udW1DbGFzc2VzID8/PSBuZXcgQmFja2VuZEltcGFjdCgKICAgICAgICAvLyBUaGUgYmFja2VuZCB3aWxsIHRyeSB0byBvcHRpbWl6ZSBudW1iZXIgb3BlcmF0aW9ucyBhbmQgdXNlIHRoZQogICAgICAgIC8vIGBpYWVgIGhlbHBlciBkaXJlY3RseS4KICAgICAgICBnbG9iYWxVc2VzOiBbX2NvbW1vbkVsZW1lbnRzLnRocm93SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9saXN0T3JTdHJpbmdDbGFzc2VzOwoKICBCYWNrZW5kSW1wYWN0IGdldCBsaXN0T3JTdHJpbmdDbGFzc2VzIHsKICAgIHJldHVybiBfbGlzdE9yU3RyaW5nQ2xhc3NlcyA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoCiAgICAgICAgLy8gVGhlIGJhY2tlbmQgd2lsbCB0cnkgdG8gb3B0aW1pemUgYXJyYXkgYW5kIHN0cmluZyBhY2Nlc3MgYW5kIHVzZSB0aGUKICAgICAgICAvLyBgaW9vcmVgIGFuZCBgaWFlYCBfY29tbW9uRWxlbWVudHMgZGlyZWN0bHkuCiAgICAgICAgZ2xvYmFsVXNlczogWwogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnRocm93SW5kZXhPdXRPZlJhbmdlRXhjZXB0aW9uLAogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnRocm93SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9mdW5jdGlvbkNsYXNzOwoKICBCYWNrZW5kSW1wYWN0IGdldCBmdW5jdGlvbkNsYXNzIHsKICAgIHJldHVybiBfZnVuY3Rpb25DbGFzcyA/Pz0KICAgICAgICBuZXcgQmFja2VuZEltcGFjdChnbG9iYWxDbGFzc2VzOiBbX2NvbW1vbkVsZW1lbnRzLmNsb3N1cmVDbGFzc10pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfbWFwQ2xhc3M7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IG1hcENsYXNzIHsKICAgIHJldHVybiBfbWFwQ2xhc3MgPz89IG5ldyBCYWNrZW5kSW1wYWN0KAogICAgICAgIC8vIFRoZSBiYWNrZW5kIHdpbGwgdXNlIGEgbGl0ZXJhbCBsaXN0IHRvIGluaXRpYWxpemUgdGhlIGVudHJpZXMKICAgICAgICAvLyBvZiB0aGUgbWFwLgogICAgICAgIGdsb2JhbENsYXNzZXM6IFsKICAgICAgICAgIF9jb21tb25FbGVtZW50cy5saXN0Q2xhc3MsCiAgICAgICAgICBfY29tbW9uRWxlbWVudHMubWFwTGl0ZXJhbENsYXNzCiAgICAgICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9zZXRDbGFzczsKCiAgQmFja2VuZEltcGFjdCBnZXQgc2V0Q2xhc3MgPT4gX3NldENsYXNzID8/PSBuZXcgQmFja2VuZEltcGFjdChnbG9iYWxDbGFzc2VzOiBbCiAgICAgICAgLy8gVGhlIGJhY2tlbmQgd2lsbCB1c2UgYSBsaXRlcmFsIGxpc3QgdG8gaW5pdGlhbGl6ZSB0aGUgZW50cmllcwogICAgICAgIC8vIG9mIHRoZSBzZXQuCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmxpc3RDbGFzcywKICAgICAgICBfY29tbW9uRWxlbWVudHMuc2V0TGl0ZXJhbENsYXNzLAogICAgICBdKTsKCiAgQmFja2VuZEltcGFjdCBfYm91bmRDbG9zdXJlQ2xhc3M7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IGJvdW5kQ2xvc3VyZUNsYXNzIHsKICAgIHJldHVybiBfYm91bmRDbG9zdXJlQ2xhc3MgPz89CiAgICAgICAgbmV3IEJhY2tlbmRJbXBhY3QoZ2xvYmFsQ2xhc3NlczogW19jb21tb25FbGVtZW50cy5ib3VuZENsb3N1cmVDbGFzc10pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfbmF0aXZlT3JFeHRlbmRzQ2xhc3M7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IG5hdGl2ZU9yRXh0ZW5kc0NsYXNzIHsKICAgIHJldHVybiBfbmF0aXZlT3JFeHRlbmRzQ2xhc3MgPz89IG5ldyBCYWNrZW5kSW1wYWN0KGdsb2JhbFVzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLmdldE5hdGl2ZUludGVyY2VwdG9yTWV0aG9kCiAgICBdLCBnbG9iYWxDbGFzc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy5qc0ludGVyY2VwdG9yQ2xhc3MsCiAgICAgIF9jb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRPYmplY3RDbGFzcywKICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzUGxhaW5KYXZhU2NyaXB0T2JqZWN0Q2xhc3MsCiAgICAgIF9jb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRGdW5jdGlvbkNsYXNzCiAgICBdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX21hcExpdGVyYWxDbGFzczsKCiAgQmFja2VuZEltcGFjdCBnZXQgbWFwTGl0ZXJhbENsYXNzIHsKICAgIHJldHVybiBfbWFwTGl0ZXJhbENsYXNzID8/PSBuZXcgQmFja2VuZEltcGFjdChnbG9iYWxVc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy5tYXBMaXRlcmFsQ29uc3RydWN0b3IsCiAgICAgIF9jb21tb25FbGVtZW50cy5tYXBMaXRlcmFsQ29uc3RydWN0b3JFbXB0eSwKICAgICAgX2NvbW1vbkVsZW1lbnRzLm1hcExpdGVyYWxVbnR5cGVkTWFrZXIsCiAgICAgIF9jb21tb25FbGVtZW50cy5tYXBMaXRlcmFsVW50eXBlZEVtcHR5TWFrZXIKICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfc2V0TGl0ZXJhbENsYXNzOwoKICBCYWNrZW5kSW1wYWN0IGdldCBzZXRMaXRlcmFsQ2xhc3MgPT4KICAgICAgX3NldExpdGVyYWxDbGFzcyA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoZ2xvYmFsVXNlczogWwogICAgICAgIF9jb21tb25FbGVtZW50cy5zZXRMaXRlcmFsQ29uc3RydWN0b3IsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnNldExpdGVyYWxDb25zdHJ1Y3RvckVtcHR5LAogICAgICAgIF9jb21tb25FbGVtZW50cy5zZXRMaXRlcmFsVW50eXBlZE1ha2VyLAogICAgICAgIF9jb21tb25FbGVtZW50cy5zZXRMaXRlcmFsVW50eXBlZEVtcHR5TWFrZXIsCiAgICAgIF0pOwoKICBCYWNrZW5kSW1wYWN0IF9jbG9zdXJlQ2xhc3M7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IGNsb3N1cmVDbGFzcyB7CiAgICByZXR1cm4gX2Nsb3N1cmVDbGFzcyA/Pz0KICAgICAgICBuZXcgQmFja2VuZEltcGFjdChnbG9iYWxVc2VzOiBbX2NvbW1vbkVsZW1lbnRzLmNsb3N1cmVGcm9tVGVhck9mZl0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfbGlzdENsYXNzZXM7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IGxpc3RDbGFzc2VzIHsKICAgIHJldHVybiBfbGlzdENsYXNzZXMgPz89IG5ldyBCYWNrZW5kSW1wYWN0KAogICAgICAgIC8vIExpdGVyYWwgbGlzdHMgY2FuIGJlIHRyYW5zbGF0ZWQgaW50byBjYWxscyB0byB0aGVzZSBmdW5jdGlvbnM6CiAgICAgICAgZ2xvYmFsVXNlczogWwogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzQXJyYXlUeXBlZENvbnN0cnVjdG9yLAogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnNldFJ1bnRpbWVUeXBlSW5mbywKICAgICAgICAgIF9jb21tb25FbGVtZW50cy5nZXRUeXBlQXJndW1lbnRCeUluZGV4CiAgICAgICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9qc0luZGV4aW5nQmVoYXZpb3I7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IGpzSW5kZXhpbmdCZWhhdmlvciB7CiAgICByZXR1cm4gX2pzSW5kZXhpbmdCZWhhdmlvciA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoCiAgICAgICAgLy8gVGhlc2UgdHdvIF9jb21tb25FbGVtZW50cyBhcmUgdXNlZCBieSB0aGUgZW1pdHRlciBhbmQgdGhlIGNvZGVnZW4uCiAgICAgICAgLy8gQmVjYXVzZSB3ZSBjYW5ub3QgZW5xdWV1ZSBlbGVtZW50cyBhdCB0aGUgdGltZSBvZiBlbWlzc2lvbiwKICAgICAgICAvLyB3ZSBtYWtlIHN1cmUgdGhleSBhcmUgYWx3YXlzIGdlbmVyYXRlZC4KICAgICAgICBnbG9iYWxVc2VzOiBbX2NvbW1vbkVsZW1lbnRzLmlzSnNJbmRleGFibGVdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX3RyYWNlSGVscGVyOwoKICBCYWNrZW5kSW1wYWN0IGdldCB0cmFjZUhlbHBlciB7CiAgICByZXR1cm4gX3RyYWNlSGVscGVyID8/PQogICAgICAgIG5ldyBCYWNrZW5kSW1wYWN0KGdsb2JhbFVzZXM6IFtfY29tbW9uRWxlbWVudHMudHJhY2VIZWxwZXJdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2Fzc2VydFVucmVhY2hhYmxlOwoKICBCYWNrZW5kSW1wYWN0IGdldCBhc3NlcnRVbnJlYWNoYWJsZSB7CiAgICByZXR1cm4gX2Fzc2VydFVucmVhY2hhYmxlID8/PSBuZXcgQmFja2VuZEltcGFjdCgKICAgICAgICBnbG9iYWxVc2VzOiBbX2NvbW1vbkVsZW1lbnRzLmFzc2VydFVucmVhY2hhYmxlTWV0aG9kXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9ydW50aW1lVHlwZVN1cHBvcnQ7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHJ1bnRpbWVUeXBlU3VwcG9ydCB7CiAgICByZXR1cm4gX3J1bnRpbWVUeXBlU3VwcG9ydCA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoZ2xvYmFsQ2xhc3NlczogWwogICAgICBfY29tbW9uRWxlbWVudHMubGlzdENsYXNzCiAgICBdLCBnbG9iYWxVc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy5zZXRSdW50aW1lVHlwZUluZm8sCiAgICAgIF9jb21tb25FbGVtZW50cy5nZXRSdW50aW1lVHlwZUluZm8KICAgIF0sIG90aGVySW1wYWN0czogWwogICAgICBnZXRSdW50aW1lVHlwZUFyZ3VtZW50LAogICAgICBjb21wdXRlU2lnbmF0dXJlCiAgICBdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2RlZmVycmVkTG9hZGluZzsKCiAgQmFja2VuZEltcGFjdCBnZXQgZGVmZXJyZWRMb2FkaW5nIHsKICAgIHJldHVybiBfZGVmZXJyZWRMb2FkaW5nID8/PQogICAgICAgIG5ldyBCYWNrZW5kSW1wYWN0KGdsb2JhbFVzZXM6IFtfY29tbW9uRWxlbWVudHMuY2hlY2tEZWZlcnJlZElzTG9hZGVkXSwKICAgICAgICAgICAgLy8gQWxzbyByZWdpc3RlciB0aGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhpcyBtZXRob2QuCiAgICAgICAgICAgIGdsb2JhbENsYXNzZXM6IFtfY29tbW9uRWxlbWVudHMuc3RyaW5nQ2xhc3NdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX25vU3VjaE1ldGhvZFN1cHBvcnQ7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IG5vU3VjaE1ldGhvZFN1cHBvcnQgewogICAgcmV0dXJuIF9ub1N1Y2hNZXRob2RTdXBwb3J0ID8/PSBuZXcgQmFja2VuZEltcGFjdChnbG9iYWxVc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy5jcmVhdGVJbnZvY2F0aW9uTWlycm9yLAogICAgICBfY29tbW9uRWxlbWVudHMuY3JlYXRlVW5tYW5nbGVkSW52b2NhdGlvbk1pcnJvcgogICAgXSwgZHluYW1pY1VzZXM6IFsKICAgICAgU2VsZWN0b3JzLm5vU3VjaE1ldGhvZF8KICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfbG9hZExpYnJhcnk7CgogIC8vLyBCYWNrZW5kIGltcGFjdCBmb3IgYWNjZXNzaW5nIGEgYGxvYWRMaWJyYXJ5YCBmdW5jdGlvbiBvbiBhIGRlZmVycmVkCiAgLy8vIHByZWZpeC4KICBCYWNrZW5kSW1wYWN0IGdldCBsb2FkTGlicmFyeSB7CiAgICByZXR1cm4gX2xvYWRMaWJyYXJ5ID8/PSBuZXcgQmFja2VuZEltcGFjdChnbG9iYWxVc2VzOiBbCiAgICAgIC8vIFRPRE8ocmVkZW1wdGlvbik6IGRlbGV0ZSB3cmFwcGVyIHdoZW4gd2Ugc3Vuc2V0IHRoZSBvbGQgZnJvbnRlbmQuCiAgICAgIF9jb21tb25FbGVtZW50cy5sb2FkTGlicmFyeVdyYXBwZXIsCiAgICAgIF9jb21tb25FbGVtZW50cy5sb2FkRGVmZXJyZWRMaWJyYXJ5LAogICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9tZW1iZXJDbG9zdXJlOwoKICAvLy8gQmFja2VuZCBpbXBhY3QgZm9yIHBlcmZvcm1pbmcgbWVtYmVyIGNsb3N1cml6YXRpb24uCiAgQmFja2VuZEltcGFjdCBnZXQgbWVtYmVyQ2xvc3VyZSB7CiAgICByZXR1cm4gX21lbWJlckNsb3N1cmUgPz89CiAgICAgICAgbmV3IEJhY2tlbmRJbXBhY3QoZ2xvYmFsQ2xhc3NlczogW19jb21tb25FbGVtZW50cy5ib3VuZENsb3N1cmVDbGFzc10pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfc3RhdGljQ2xvc3VyZTsKCiAgLy8vIEJhY2tlbmQgaW1wYWN0IGZvciBwZXJmb3JtaW5nIGNsb3N1cml6YXRpb24gb2YgYSB0b3AtbGV2ZWwgb3Igc3RhdGljCiAgLy8vIGZ1bmN0aW9uLgogIEJhY2tlbmRJbXBhY3QgZ2V0IHN0YXRpY0Nsb3N1cmUgewogICAgcmV0dXJuIF9zdGF0aWNDbG9zdXJlID8/PQogICAgICAgIG5ldyBCYWNrZW5kSW1wYWN0KGdsb2JhbENsYXNzZXM6IFtfY29tbW9uRWxlbWVudHMuY2xvc3VyZUNsYXNzXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF90eXBlVmFyaWFibGVNaXJyb3I7CgogIC8vLyBCYWNrZW5kIGltcGFjdCBmb3IgdHlwZSB2YXJpYWJsZXMgdGhyb3VnaCBtaXJyb3JzLgogIEJhY2tlbmRJbXBhY3QgZ2V0IHR5cGVWYXJpYWJsZU1pcnJvciB7CiAgICByZXR1cm4gX3R5cGVWYXJpYWJsZU1pcnJvciA/Pz0gbmV3IEJhY2tlbmRJbXBhY3Qoc3RhdGljVXNlczogWwogICAgICBfY29tbW9uRWxlbWVudHMudHlwZVZhcmlhYmxlQ29uc3RydWN0b3IsCiAgICAgIF9jb21tb25FbGVtZW50cy5jcmVhdGVSdW50aW1lVHlwZQogICAgXSwgaW5zdGFudGlhdGVkQ2xhc3NlczogWwogICAgICBfY29tbW9uRWxlbWVudHMudHlwZVZhcmlhYmxlQ2xhc3MKICAgIF0pOwogIH0KCiAgTWFwPGludCwgQmFja2VuZEltcGFjdD4gX2dlbmVyaWNJbnN0YW50aWF0aW9uID0gPGludCwgQmFja2VuZEltcGFjdD57fTsKCiAgQmFja2VuZEltcGFjdCBnZXRHZW5lcmljSW5zdGFudGlhdGlvbihpbnQgdHlwZUFyZ3VtZW50Q291bnQpID0+CiAgICAgIF9nZW5lcmljSW5zdGFudGlhdGlvblt0eXBlQXJndW1lbnRDb3VudF0gPz89CiAgICAgICAgICBuZXcgQmFja2VuZEltcGFjdChzdGF0aWNVc2VzOiBbCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmdldEluc3RhbnRpYXRlRnVuY3Rpb24odHlwZUFyZ3VtZW50Q291bnQpLAogICAgICAgIC4uLl9uZXdSdGkKICAgICAgICAgICAgPyBbCiAgICAgICAgICAgICAgICBfY29tbW9uRWxlbWVudHMuaW5zdGFudGlhdGVkR2VuZXJpY0Z1bmN0aW9uVHlwZU5ld1J0aSwKICAgICAgICAgICAgICAgIF9jb21tb25FbGVtZW50cy5jbG9zdXJlRnVuY3Rpb25UeXBlCiAgICAgICAgICAgICAgXQogICAgICAgICAgICA6IFsKICAgICAgICAgICAgICAgIF9jb21tb25FbGVtZW50cy5pbnN0YW50aWF0ZWRHZW5lcmljRnVuY3Rpb25UeXBlLAogICAgICAgICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmV4dHJhY3RGdW5jdGlvblR5cGVPYmplY3RGcm9tSW50ZXJuYWwKICAgICAgICAgICAgICBdLAogICAgICBdLCBpbnN0YW50aWF0ZWRDbGFzc2VzOiBbCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmdldEluc3RhbnRpYXRpb25DbGFzcyh0eXBlQXJndW1lbnRDb3VudCksCiAgICAgIF0pOwoKICAvLy8gQmFja2VuZCBpbXBhY3QgZm9yIC0tZXhwZXJpbWVudC1uZXctcnRpLgogIExpc3Q8QmFja2VuZEltcGFjdD4gbmV3UnRpSW1wYWN0cyhTdHJpbmcgd2hhdCkgewogICAgaWYgKCFfbmV3UnRpKSByZXR1cm4gW107CiAgICAvLyBUT0RPKHNyYSk6IFNwbGl0IGludG8gcmVmaW5lZCBpbXBhY3RzLgogICAgcmV0dXJuIFsKICAgICAgQmFja2VuZEltcGFjdChzdGF0aWNVc2VzOiBbCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmZpbmRUeXBlLAogICAgICAgIF9jb21tb25FbGVtZW50cy5pbnN0YW5jZVR5cGUsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmFycmF5SW5zdGFuY2VUeXBlLAogICAgICAgIF9jb21tb25FbGVtZW50cy5zaW1wbGVJbnN0YW5jZVR5cGUsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnJ0aUV2YWxNZXRob2QsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnJ0aUJpbmRNZXRob2QsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmdlbmVyYWxJc1Rlc3RJbXBsZW1lbnRhdGlvbiwKICAgICAgICBfY29tbW9uRWxlbWVudHMuZ2VuZXJhbEFzQ2hlY2tJbXBsZW1lbnRhdGlvbiwKICAgICAgICBfY29tbW9uRWxlbWVudHMuZ2VuZXJhbFR5cGVDaGVja0ltcGxlbWVudGF0aW9uLAogICAgICAgIC8vIFNwZWNpYWxpemVkIGNoZWNrcy4KICAgICAgICBfY29tbW9uRWxlbWVudHMuc3BlY2lhbGl6ZWRJc0Jvb2wsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnNwZWNpYWxpemVkQXNCb29sTnVsbGFibGUsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnNwZWNpYWxpemVkQ2hlY2tCb29sTnVsbGFibGUsCiAgICAgICAgLy8gbm8gc3BlY2lhbGl6ZWRJc0RvdWJsZS4KICAgICAgICBfY29tbW9uRWxlbWVudHMuc3BlY2lhbGl6ZWRBc0RvdWJsZU51bGxhYmxlLAogICAgICAgIF9jb21tb25FbGVtZW50cy5zcGVjaWFsaXplZENoZWNrRG91YmxlTnVsbGFibGUsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnNwZWNpYWxpemVkSXNJbnQsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnNwZWNpYWxpemVkQXNJbnROdWxsYWJsZSwKICAgICAgICBfY29tbW9uRWxlbWVudHMuc3BlY2lhbGl6ZWRDaGVja0ludE51bGxhYmxlLAogICAgICAgIF9jb21tb25FbGVtZW50cy5zcGVjaWFsaXplZElzTnVtLAogICAgICAgIF9jb21tb25FbGVtZW50cy5zcGVjaWFsaXplZEFzTnVtTnVsbGFibGUsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnNwZWNpYWxpemVkQ2hlY2tOdW1OdWxsYWJsZSwKICAgICAgICBfY29tbW9uRWxlbWVudHMuc3BlY2lhbGl6ZWRJc1N0cmluZywKICAgICAgICBfY29tbW9uRWxlbWVudHMuc3BlY2lhbGl6ZWRBc1N0cmluZ051bGxhYmxlLAogICAgICAgIF9jb21tb25FbGVtZW50cy5zcGVjaWFsaXpl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ZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vZW5xdWV1ZS5kYXJ0JyBzaG93IEVucXVldWVyLCBFbnF1ZXVlckxpc3RlbmVyOwppbXBvcnQgJy4uL25hdGl2ZS9lbnF1ZXVlLmRhcnQnOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydCcgc2hvdyBDYWxsU3RydWN0dXJlOwppbXBvcnQgJy4uL3VuaXZlcnNlL3VzZS5kYXJ0JyBzaG93IFN0YXRpY1VzZSwgVHlwZVVzZTsKaW1wb3J0ICcuLi91bml2ZXJzZS93b3JsZF9pbXBhY3QuZGFydCcKICAgIHNob3cgV29ybGRJbXBhY3QsIFdvcmxkSW1wYWN0QnVpbGRlciwgV29ybGRJbXBhY3RCdWlsZGVySW1wbDsKaW1wb3J0ICdiYWNrZW5kX2ltcGFjdC5kYXJ0JzsKaW1wb3J0ICdiYWNrZW5kX3VzYWdlLmRhcnQnOwppbXBvcnQgJ2N1c3RvbV9lbGVtZW50c19hbmFseXNpcy5kYXJ0JzsKaW1wb3J0ICdydW50aW1lX3R5cGVzX3Jlc29sdXRpb24uZGFydCc7CgpjbGFzcyBDb2RlZ2VuRW5xdWV1ZXJMaXN0ZW5lciBleHRlbmRzIEVucXVldWVyTGlzdGVuZXIgewogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBfb3B0aW9uczsKICBmaW5hbCBFbGVtZW50RW52aXJvbm1lbnQgX2VsZW1lbnRFbnZpcm9ubWVudDsKICBmaW5hbCBDb21tb25FbGVtZW50cyBfY29tbW9uRWxlbWVudHM7CiAgZmluYWwgQmFja2VuZEltcGFjdHMgX2ltcGFjdHM7CgogIGZpbmFsIEJhY2tlbmRVc2FnZSBfYmFja2VuZFVzYWdlOwogIGZpbmFsIFJ1bnRpbWVUeXBlc05lZWQgX3J0aU5lZWQ7CgogIGZpbmFsIEN1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzIF9jdXN0b21FbGVtZW50c0FuYWx5c2lzOwoKICBmaW5hbCBOYXRpdmVDb2RlZ2VuRW5xdWV1ZXIgX25hdGl2ZUVucXVldWVyOwoKICBib29sIF9pc05vU3VjaE1ldGhvZFVzZWQgPSBmYWxzZTsKICBib29sIF9pc05ld1J0aVVzZWQgPSBmYWxzZTsKCiAgQ29kZWdlbkVucXVldWVyTGlzdGVuZXIoCiAgICAgIHRoaXMuX29wdGlvbnMsCiAgICAgIHRoaXMuX2VsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgdGhpcy5fY29tbW9uRWxlbWVudHMsCiAgICAgIHRoaXMuX2ltcGFjdHMsCiAgICAgIHRoaXMuX2JhY2tlbmRVc2FnZSwKICAgICAgdGhpcy5fcnRpTmVlZCwKICAgICAgdGhpcy5fY3VzdG9tRWxlbWVudHNBbmFseXNpcywKICAgICAgdGhpcy5fbmF0aXZlRW5xdWV1ZXIpOwoKICBAb3ZlcnJpZGUKICBXb3JsZEltcGFjdCByZWdpc3RlckNsb3N1cml6ZWRNZW1iZXIoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgV29ybGRJbXBhY3RCdWlsZGVySW1wbCBpbXBhY3RCdWlsZGVyID0gbmV3IFdvcmxkSW1wYWN0QnVpbGRlckltcGwoKTsKICAgIGltcGFjdEJ1aWxkZXIKICAgICAgICAuYWRkSW1wYWN0KF9pbXBhY3RzLm1lbWJlckNsb3N1cmUuY3JlYXRlSW1wYWN0KF9lbGVtZW50RW52aXJvbm1lbnQpKTsKICAgIEZ1bmN0aW9uVHlwZSB0eXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvblR5cGUoZWxlbWVudCk7CiAgICBpZiAodHlwZS5jb250YWluc1R5cGVWYXJpYWJsZXMgJiYgX3J0aU5lZWQubWV0aG9kTmVlZHNTaWduYXR1cmUoZWxlbWVudCkpIHsKICAgICAgaW1wYWN0QnVpbGRlci5hZGRJbXBhY3QoX3JlZ2lzdGVyQ29tcHV0ZVNpZ25hdHVyZSgpKTsKICAgIH0KICAgIHJldHVybiBpbXBhY3RCdWlsZGVyOwogIH0KCiAgQG92ZXJyaWRlCiAgV29ybGRJbXBhY3QgcmVnaXN0ZXJHZXRPZlN0YXRpY0Z1bmN0aW9uKCkgewogICAgcmV0dXJuIF9pbXBhY3RzLnN0YXRpY0Nsb3N1cmUuY3JlYXRlSW1wYWN0KF9lbGVtZW50RW52aXJvbm1lbnQpOwogIH0KCiAgV29ybGRJbXBhY3QgX3JlZ2lzdGVyQ29tcHV0ZVNpZ25hdHVyZSgpIHsKICAgIHJldHVybiBfaW1wYWN0cy5jb21wdXRlU2lnbmF0dXJlLmNyZWF0ZUltcGFjdChfZWxlbWVudEVudmlyb25tZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJJbnN0YW50aWF0ZWRUeXBlKEludGVyZmFjZVR5cGUgdHlwZSwKICAgICAge2Jvb2wgaXNHbG9iYWw6IGZhbHNlLCBib29sIG5hdGl2ZVVzYWdlOiBmYWxzZX0pIHsKICAgIGlmIChuYXRpdmVVc2FnZSkgewogICAgICBfbmF0aXZlRW5xdWV1ZXIub25JbnN0YW50aWF0ZWRUeXBlKHR5cGUpOwogICAgfQogIH0KCiAgLy8vIENvbXB1dGVzIHRoZSBbV29ybGRJbXBhY3RdIG9mIGNhbGxpbmcgW21haW5NZXRob2RdIGFzIHRoZSBlbnRyeSBwb2ludC4KICBXb3JsZEltcGFjdCBfY29tcHV0ZU1haW5JbXBhY3QoRnVuY3Rpb25FbnRpdHkgbWFpbk1ldGhvZCkgewogICAgV29ybGRJbXBhY3RCdWlsZGVySW1wbCBtYWluSW1wYWN0ID0gbmV3IFdvcmxkSW1wYWN0QnVpbGRlckltcGwoKTsKICAgIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSA9IG1haW5NZXRob2QucGFyYW1ldGVyU3RydWN0dXJlLmNhbGxTdHJ1Y3R1cmU7CiAgICBpZiAoY2FsbFN0cnVjdHVyZS5hcmd1bWVudENvdW50ID4gMCkgewogICAgICBfaW1wYWN0cy5tYWluV2l0aEFyZ3VtZW50cwogICAgICAgICAgLnJlZ2lzdGVySW1wYWN0KG1haW5JbXBhY3QsIF9lbGVtZW50RW52aXJvbm1lbnQpOwogICAgICBtYWluSW1wYWN0LnJlZ2lzdGVyU3RhdGljVXNlKAogICAgICAgICAgbmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UobWFpbk1ldGhvZCwgY2FsbFN0cnVjdHVyZSkpOwogICAgfQogICAgaWYgKG1haW5NZXRob2QuaXNHZXR0ZXIpIHsKICAgICAgbWFpbkltcGFjdC5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY0dldChtYWluTWV0aG9kKSk7CiAgICB9IGVsc2UgewogICAgICBtYWluSW1wYWN0LnJlZ2lzdGVyU3RhdGljVXNlKAogICAgICAgICAgbmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UobWFpbk1ldGhvZCwgQ2FsbFN0cnVjdHVyZS5OT19BUkdTKSk7CiAgICB9CiAgICByZXR1cm4gbWFpbkltcGFjdDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgb25RdWV1ZU9wZW4oCiAgICAgIEVucXVldWVyIGVucXVldWVyLCBGdW5jdGlvbkVudGl0eSBtYWluTWV0aG9kLCBJdGVyYWJsZTxVcmk+IGxpYnJhcmllcykgewogICAgZW5xdWV1ZXIuYXBwbHlJbXBhY3QoX25hdGl2ZUVucXVldWVyLnByb2Nlc3NOYXRpdmVDbGFzc2VzKGxpYnJhcmllcykpOwogICAgaWYgKG1haW5NZXRob2QgIT0gbnVsbCkgewogICAgICBlbnF1ZXVlci5hcHBseUltcGFjdChfY29tcHV0ZU1haW5JbXBhY3QobWFpbk1ldGhvZCkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvblF1ZXVlRW1wdHkoRW5xdWV1ZXIgZW5xdWV1ZXIsIEl0ZXJhYmxlPENsYXNzRW50aXR5PiByZWNlbnRDbGFzc2VzKSB7CiAgICAvLyBBZGQgZWxlbWVudHMgdXNlZCBzeW50aGV0aWNhbGx5LCB0aGF0IGlzLCB0aHJvdWdoIGZlYXR1cmVzIHJhdGhlciB0aGFuCiAgICAvLyBzeW50YXgsIGZvciBpbnN0YW5jZSBjdXN0b20gZWxlbWVudHMuCiAgICAvLwogICAgLy8gUmV0dXJuIGVhcmx5IGlmIGFueSBlbGVtZW50cyBhcmUgYWRkZWQgdG8gYXZvaWQgY291bnRpbmcgdGhlIGVsZW1lbnRzIGFzCiAgICAvLyBkdWUgdG8gbWlycm9ycy4KICAgIGVucXVldWVyLmFwcGx5SW1wYWN0KF9jdXN0b21FbGVtZW50c0FuYWx5c2lzLmZsdXNoKCkpOwoKICAgIGlmIChfYmFja2VuZFVzYWdlLmlzTm9TdWNoTWV0aG9kVXNlZCAmJiAhX2lzTm9TdWNoTWV0aG9kVXNlZCkgewogICAgICBlbnF1ZXVlci5hcHBseUltcGFjdCgKICAgICAgICAgIF9pbXBhY3RzLm5vU3VjaE1ldGhvZFN1cHBvcnQuY3JlYXRlSW1wYWN0KF9lbGVtZW50RW52aXJvbm1lbnQpKTsKICAgICAgX2lzTm9TdWNoTWV0aG9kVXNlZCA9IHRydWU7CiAgICB9CgogICAgLy8gVE9ETyhmaXNoeXRoZWZpc2gpOiBBdm9pZCByZWdpc3RlcmluZyB1bm5lY2Vzc2FyeSBpbXBhY3RzLgogICAgaWYgKF9vcHRpb25zLmV4cGVyaW1lbnROZXdSdGkgJiYgIV9pc05ld1J0aVVzZWQpIHsKICAgICAgV29ybGRJbXBhY3RCdWlsZGVySW1wbCBuZXdSdGlJbXBhY3QgPSBuZXcgV29ybGRJbXBhY3RCdWlsZGVySW1wbCgpOwogICAgICBuZXdSdGlJbXBhY3QucmVnaXN0ZXJTdGF0aWNVc2UoU3RhdGljVXNlLnN0YXRpY0ludm9rZSgKICAgICAgICAgIF9jb21tb25FbGVtZW50cy5ydGlBZGRSdWxlc01ldGhvZCwgQ2FsbFN0cnVjdHVyZS5UV09fQVJHUykpOwogICAgICBlbnF1ZXVlci5hcHBseUltcGFjdChuZXdSdGlJbXBhY3QpOwogICAgICBfaXNOZXdSdGlVc2VkID0gdHJ1ZTsKICAgIH0KCiAgICBpZiAoIWVucXVldWVyLnF1ZXVlSXNFbXB0eSkgcmV0dXJuIGZhbHNlOwoKICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBvblF1ZXVlQ2xvc2VkKCkge30KCiAgLy8vIEFkZHMgdGhlIGltcGFjdCBvZiBbY29uc3RhbnRdIHRvIFtpbXBhY3RCdWlsZGVyXS4KICB2b2lkIF9jb21wdXRlSW1wYWN0Rm9yQ29tcGlsZVRpbWVDb25zdGFudChDb25zdGFudFZhbHVlIGNvbnN0YW50LAogICAgICBXb3JsZEltcGFjdEJ1aWxkZXIgaW1wYWN0QnVpbGRlciwgU2V0PENvbnN0YW50VmFsdWU+IHZpc2l0ZWQpIHsKICAgIGlmICh2aXNpdGVkLmFkZChjb25zdGFudCkpIHsKICAgICAgX2NvbXB1dGVJbXBhY3RGb3JDb21waWxlVGltZUNvbnN0YW50SW50ZXJuYWwoY29uc3RhbnQsIGltcGFjdEJ1aWxkZXIpOwoKICAgICAgZm9yIChDb25zdGFudFZhbHVlIGRlcGVuZGVuY3kgaW4gY29uc3RhbnQuZ2V0RGVwZW5kZW5jaWVzKCkpIHsKICAgICAgICBfY29tcHV0ZUltcGFjdEZvckNvbXBpbGVUaW1lQ29uc3RhbnQoCiAgICAgICAgICAgIGRlcGVuZGVuY3ksIGltcGFjdEJ1aWxkZXIsIHZpc2l0ZWQpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIF9jb21wdXRlSW1wYWN0Rm9yQ29tcGlsZVRpbWVDb25zdGFudEludGVybmFsKAogICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50LCBXb3JsZEltcGFjdEJ1aWxkZXIgaW1wYWN0QnVpbGRlcikgewogICAgRGFydFR5cGUgdHlwZSA9IGNvbnN0YW50LmdldFR5cGUoX2NvbW1vbkVsZW1lbnRzKTsKICAgIF9jb21wdXRlSW1wYWN0Rm9ySW5zdGFudGlhdGVkQ29uc3RhbnRUeXBlKHR5cGUsIGltcGFjdEJ1aWxkZXIpOwoKICAgIGlmIChjb25zdGFudC5pc0Z1bmN0aW9uKSB7CiAgICAgIEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZSBmdW5jdGlvbiA9IGNvbnN0YW50OwogICAgICBpbXBhY3RCdWlsZGVyCiAgICAgICAgICAucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNUZWFyT2ZmKGZ1bmN0aW9uLmVsZW1lbnQpKTsKICAgIH0gZWxzZSBpZiAoY29uc3RhbnQuaXNJbnRlcmNlcHRvcikgewogICAgICAvLyBBbiBpbnRlcmNlcHRvciBjb25zdGFudCByZWZlcmVuY2VzIHRoZSBjbGFzcydzIHByb3RvdHlwZSBjaGFpbi4KICAgICAgSW50ZXJjZXB0b3JDb25zdGFudFZhbHVlIGludGVyY2VwdG9yID0gY29uc3RhbnQ7CiAgICAgIENsYXNzRW50aXR5IGNscyA9IGludGVyY2VwdG9yLmNsczsKICAgICAgX2NvbXB1dGVJbXBhY3RGb3JJbnN0YW50aWF0ZWRDb25zdGFudFR5cGUoCiAgICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGNscyksIGltcGFjdEJ1aWxkZXIpOwogICAgfSBlbHNlIGlmIChjb25zdGFudC5pc1R5cGUpIHsKICAgICAgaW1wYWN0QnVpbGRlcgogICAgICAgICAgLnJlZ2lzdGVyVHlwZVVzZShuZXcgVHlwZVVzZS5pbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy50eXBlVHlwZSkpOwogICAgICAvLyBJZiB0aGUgdHlwZSBpcyBhIHdlYiBjb21wb25lbnQsIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBjb25zdHJ1Y3RvcnMgYXJlCiAgICAgIC8vIGF2YWlsYWJsZSB0byAndXBncmFkZScgdGhlIG5hdGl2ZSBvYmplY3QuCiAgICAgIFR5cGVDb25zdGFudFZhbHVlIHR5cGUgPSBjb25zdGFudDsKICAgICAgaWYgKHR5cGUucmVwcmVzZW50ZWRUeXBlLmlzSW50ZXJmYWNlVHlwZSkgewogICAgICAgIEludGVyZmFjZVR5cGUgcmVwcmVzZW50ZWRUeXBlID0gdHlwZS5yZXByZXNlbnRlZFR5cGU7CiAgICAgICAgX2N1c3RvbUVsZW1lbnRzQW5hbHlzaXMucmVnaXN0ZXJUeXBlQ29uc3RhbnQocmVwcmVzZW50ZWRUeXBlLmVsZW1lbnQpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGNvbnN0YW50IGlzIEluc3RhbnRpYXRpb25Db25zdGFudFZhbHVlKSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlZ2lzdGVyIHRoZXNlIHVzaW5nIGBCYWNrZW5kSW1wYWN0YC4KICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UuaW5zdGFudGlhdGlvbigKICAgICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0VGhpc1R5cGUoX2NvbW1vbkVsZW1lbnRzCiAgICAgICAgICAgICAgLmdldEluc3RhbnRpYXRpb25DbGFzcyhjb25zdGFudC50eXBlQXJndW1lbnRzLmxlbmd0aCkpKSk7CgogICAgICBpZiAoX29wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSkgewogICAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UoU3RhdGljVXNlLnN0YXRpY0ludm9rZSgKICAgICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmluc3RhbnRpYXRlZEdlbmVyaWNGdW5jdGlvblR5cGVOZXdSdGksCiAgICAgICAgICAgIENhbGxTdHJ1Y3R1cmUuVFdPX0FSR1MpKTsKICAgICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoCiAgICAgICAgICAgIF9jb21tb25FbGVtZW50cy5jbG9zdXJlRnVuY3Rpb25UeXBlLCBDYWxsU3RydWN0dXJlLk9ORV9BUkcpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKAogICAgICAgICAgICBfY29tbW9uRWxlbWVudHMuaW5zdGFudGlhdGVkR2VuZXJpY0Z1bmN0aW9uVHlwZSwKICAgICAgICAgICAgQ2FsbFN0cnVjdHVyZS5UV09fQVJHUykpOwogICAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoCiAgICAgICAgICAgIF9jb21tb25FbGVtZW50cy5leHRyYWN0RnVuY3Rpb25UeXBlT2JqZWN0RnJvbUludGVybmFsLAogICAgICAgICAgICBDYWxsU3RydWN0dXJlLk9ORV9BUkcpKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBfY29tcHV0ZUltcGFjdEZvckluc3RhbnRpYXRlZENvbnN0YW50VHlwZSgKICAgICAgRGFydFR5cGUgdHlwZSwgV29ybGRJbXBhY3RCdWlsZGVyIGltcGFjdEJ1aWxkZXIpIHsKICAgIGlmICh0eXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UuaW5zdGFudGlhdGlvbih0eXBlKSk7CiAgICAgIGlmIChfcnRpTmVlZC5jbGFzc05lZWRzVHlwZUFyZ3VtZW50cyh0eXBlLmVsZW1lbnQpKSB7CiAgICAgICAgRnVuY3Rpb25FbnRpdHkgaGVscGVyID0gX2NvbW1vbkVsZW1lbnRzLnNldFJ1bnRpbWVUeXBlSW5mbzsKICAgICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKAogICAgICAgICAgICBoZWxwZXIsIGhlbHBlci5wYXJhbWV0ZXJTdHJ1Y3R1cmUuY2FsbFN0cnVjdHVyZSkpOwogICAgICB9CiAgICAgIGlmICh0eXBlLmVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLnR5cGVMaXRlcmFsQ2xhc3MpIHsKICAgICAgICAvLyBJZiB3ZSB1c2UgYSB0eXBlIGxpdGVyYWwgaW4gYSBjb25zdGFudCwgdGhlIGNvbXBpbGUgdGltZSBjb25zdGFudAogICAgICAgIC8vIGVtaXR0ZXIgd2lsbCBnZW5lcmF0ZSBhIGNhbGwgdG8gYSBoZWxwZXIgc28gd2UgcmVnaXN0ZXIgdGhlIGltcGFjdAogICAgICAgIC8vIHRoYXQgY29udGFpbnMgdGhhdCBjYWxsLgogICAgICAgIF9pbXBhY3RzLnR5cGVMaXRlcmFsLnJlZ2lzdGVySW1wYWN0KGltcGFjdEJ1aWxkZXIsIF9lbGVtZW50RW52aXJvbm1lbnQpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBXb3JsZEltcGFjdCByZWdpc3RlclVzZWRDb25zdGFudChDb25zdGFudFZhbHVlIGNvbnN0YW50KSB7CiAgICBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsIGltcGFjdEJ1aWxkZXIgPSBuZXcgV29ybGRJbXBhY3RCdWlsZGVySW1wbCgpOwogICAgX2NvbXB1dGVJbXBhY3RGb3JDb21waWxlVGltZUNvbnN0YW50KAogICAgICAgIGNvbnN0YW50LCBpbXBhY3RCdWlsZGVyLCBuZXcgTGlua2VkSGFzaFNldC5pZGVudGl0eSgpKTsKICAgIHJldHVybiBpbXBhY3RCdWlsZGVyOwogIH0KCiAgQG92ZXJyaWRlCiAgV29ybGRJbXBhY3QgcmVnaXN0ZXJVc2VkRWxlbWVudChNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsIHdvcmxkSW1wYWN0ID0gbmV3IFdvcmxkSW1wYWN0QnVpbGRlckltcGwoKTsKICAgIF9jdXN0b21FbGVtZW50c0FuYWx5c2lzLnJlZ2lzdGVyU3RhdGljVXNlKG1lbWJlcik7CgogICAgaWYgKG1lbWJlci5pc0Z1bmN0aW9uICYmIG1lbWJlci5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgIENsYXNzRW50aXR5IGNscyA9IG1lbWJlci5lbmNsb3NpbmdDbGFzczsKICAgICAgaWYgKG1lbWJlci5uYW1lID09IElkZW50aWZpZXJzLmNhbGwgJiYKICAgICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuaXNHZW5lcmljQ2xhc3MoY2xzKSAmJgogICAgICAgICAgX3J0aU5lZWQubWV0aG9kTmVlZHNTaWduYXR1cmUobWVtYmVyKSkgewogICAgICAgIHdvcmxkSW1wYWN0LmFkZEltcGFjdChfcmVnaXN0ZXJDb21wdXRlU2lnbmF0dXJlKCkpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHdvcmxkSW1wYWN0OwogIH0KCiAgV29ybGRJbXBhY3QgX3Byb2Nlc3NDbGFzcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIFdvcmxkSW1wYWN0QnVpbGRlckltcGwgaW1wYWN0QnVpbGRlciA9IG5ldyBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsKCk7CiAgICBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5jbG9zdXJlQ2xhc3MpIHsKICAgICAgX2ltcGFjdHMuY2xvc3VyZUNsYXNzLnJlZ2lzdGVySW1wYWN0KGltcGFjdEJ1aWxkZXIsIF9lbGVtZW50RW52aXJvbm1lbnQpOwogICAgfQoKICAgIHZvaWQgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKENsYXNzRW50aXR5IGNscykgewogICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyVHlwZVVzZSgKICAgICAgICAgIG5ldyBUeXBlVXNlLmluc3RhbnRpYXRpb24oX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRSYXdUeXBlKGNscykpKTsKICAgIH0KCiAgICBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5zdHJpbmdDbGFzcyB8fAogICAgICAgIGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNTdHJpbmdDbGFzcykgewogICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLmpzU3RyaW5nQ2xhc3MpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmxpc3RDbGFzcyB8fAogICAgICAgIGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzIHx8CiAgICAgICAgY2xzID09IF9jb21tb25FbGVtZW50cy5qc0ZpeGVkQXJyYXlDbGFzcyB8fAogICAgICAgIGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNFeHRlbmRhYmxlQXJyYXlDbGFzcyB8fAogICAgICAgIGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNVbm1vZGlmaWFibGVBcnJheUNsYXNzKSB7CiAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzKTsKICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy5qc011dGFibGVBcnJheUNsYXNzKTsKICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy5qc0ZpeGVkQXJyYXlDbGFzcyk7CiAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuanNFeHRlbmRhYmxlQXJyYXlDbGFzcyk7CiAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuanNVbm1vZGlmaWFibGVBcnJheUNsYXNzKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5pbnRDbGFzcyB8fAogICAgICAgIGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNJbnRDbGFzcykgewogICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLmpzSW50Q2xhc3MpOwogICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLmpzUG9zaXRpdmVJbnRDbGFzcyk7CiAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuanNVSW50MzJDbGFzcyk7CiAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuanNVSW50MzFDbGFzcyk7CiAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuanNOdW1iZXJDbGFzcyk7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuZG91YmxlQ2xhc3MgfHwKICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzRG91YmxlQ2xhc3MpIHsKICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy5qc0RvdWJsZUNsYXNzKTsKICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy5qc051bWJlckNsYXNzKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5ib29sQ2xhc3MgfHwKICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzQm9vbENsYXNzKSB7CiAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuanNCb29sQ2xhc3MpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLm51bGxDbGFzcyB8fAogICAgICAgIGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNOdWxsQ2xhc3MpIHsKICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy5qc051bGxDbGFzcyk7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMubnVtQ2xhc3MgfHwKICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzTnVtYmVyQ2xhc3MpIHsKICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy5qc0ludENsYXNzKTsKICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy5qc1Bvc2l0aXZlSW50Q2xhc3MpOwogICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLmpzVUludDMyQ2xhc3MpOwogICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLmpzVUludDMxQ2xhc3MpOwogICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLmpzRG91YmxlQ2xhc3MpOwogICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLmpzTnVtYmVyQ2xhc3MpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzSmF2YVNjcmlwdE9iamVjdENsYXNzKSB7CiAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuanNKYXZhU2NyaXB0T2JqZWN0Q2xhc3MpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzUGxhaW5KYXZhU2NyaXB0T2JqZWN0Q2xhc3MpIHsKICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy5qc1BsYWluSmF2YVNjcmlwdE9iamVjdENsYXNzKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5qc1Vua25vd25KYXZhU2NyaXB0T2JqZWN0Q2xhc3MpIHsKICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy5qc1Vua25vd25KYXZhU2NyaXB0T2JqZWN0Q2xhc3MpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzSmF2YVNjcmlwdEZ1bmN0aW9uQ2xhc3MpIHsKICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRGdW5jdGlvbkNsYXNzKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5qc0luZGV4aW5nQmVoYXZpb3JJbnRlcmZhY2UpIHsKICAgICAgX2ltcGFjdHMuanNJbmRleGluZ0JlaGF2aW9yCiAgICAgICAgICAucmVnaXN0ZXJJbXBhY3QoaW1wYWN0QnVpbGRlciwgX2VsZW1lbnRFbnZpcm9ubWVudCk7CiAgICB9CgogICAgX2N1c3RvbUVsZW1lbnRzQW5hbHlzaXMucmVnaXN0ZXJJbnN0YW50aWF0ZWRDbGFzcyhjbHMpOwogICAgcmV0dXJuIGltcGFjdEJ1aWxkZXI7CiAgfQoKICBAb3ZlcnJpZGUKICBXb3JsZEltcGFjdCByZWdpc3RlckltcGxlbWVudGVkQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gX3Byb2Nlc3NDbGFzcyhjbHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgV29ybGRJbXBhY3QgcmVnaXN0ZXJJbnN0YW50aWF0ZWRDbGFzcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBfcHJvY2Vzc0NsYXNzKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGxvZ1N1bW1hcnkodm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UpKSB7CiAgICBfbmF0aXZlRW5xdWV1ZXIubG9nU3VtbWFyeShsb2cpOwogIH0KfQqBRwBOTjwBLQEaATBKIyQhOiEaPTcnQh4dKCgBOSIwKCEBJCMBPwEvASQeARsVIBwVGhUkHQEMQUkSTkZQPAYaBAEMLkUEASxIBAEMNDkXMAYEAU0+Rk8rITwkQgYfSQ0kSgYXBAEMFE9LHjwGBAEMTk4tB1AXOwFEHEsiBgFCN0o9RyocBgEuAREEAQwaAThERiFNAUUuMQgGBAE1QjdEAR8xFE0pSTcpMUAiFFFQMykyPk8IOUQ/OkgBJ0BDJkBKD0Q9JkRDJQgGBAEyOSFGPEREPwg+TU4kUQgGBAEMPUkqQBoEAQw5RzcBOC8tNTM8CAYBGAQBL0kvUAYBMiVLBgEuMDwzLzQ5OztCQEVHMi05QTw8PDUwPDwzLjozLjoyMDlBPDw8PEFGRktITUNIRSI/BgE8GgQBDDofBAEMOx8EAQwuJQQCATVwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2NvZGVnZW5fbGlzdGVuZXIuZGFydEZzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19iYWNrZW5kL2N1c3RvbV9lbGVtZW50c19hbmFseXNpcy5kYXJ0peYvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL2NvbnN0YW50X3N5c3RlbS5kYXJ0JyBhcyBjb25zdGFudF9zeXN0ZW07CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS91c2UuZGFydCcgc2hvdyBDb25zdGFudFVzZSwgU3RhdGljVXNlOwppbXBvcnQgJy4uL3VuaXZlcnNlL3dvcmxkX2ltcGFjdC5kYXJ0JwogICAgc2hvdyBXb3JsZEltcGFjdCwgU3RhZ2VkV29ybGRJbXBhY3RCdWlsZGVyOwppbXBvcnQgJ2JhY2tlbmRfdXNhZ2UuZGFydCcgc2hvdyBCYWNrZW5kVXNhZ2VCdWlsZGVyOwppbXBvcnQgJ25hdGl2ZV9kYXRhLmRhcnQnOwoKLy8vIFN1cHBvcnQgZm9yIEN1c3RvbSBFbGVtZW50cy4KLy8vCi8vLyBUaGUgc3VwcG9ydCBmb3IgY3VzdG9tIGVsZW1lbnRzIHRoZSBjb21waWxlciBidWlsZHMgYSB0YWJsZSB0aGF0IG1hcHMgdGhlCi8vLyBjdXN0b20gZWxlbWVudCBjbGFzcydzIFtUeXBlXSB0byB0aGUgaW50ZXJjZXB0b3IgZm9yIHRoZSBjbGFzcyBhbmQgdGhlCi8vLyBjb25zdHJ1Y3RvcihzKSBmb3IgdGhlIGNsYXNzLgovLy8KLy8vIFdlIHdhbnQgdGhlIHRhYmxlIHRvIGNvbnRhaW4gb25seSB0aGUgY3VzdG9tIGVsZW1lbnQgY2xhc3NlcyB1c2VkLCBhbmQgd2UKLy8vIHdhbnQgdG8gYXZvaWQgcmVzb2x2aW5nIGFuZCBjb21waWxpbmcgY29uc3RydWN0b3JzIHRoYXQgYXJlIG5vdCB1c2VkIHNpbmNlCi8vLyB0aGF0IG1heSBicmluZyBpbiB1bnVzZWQgY29kZS4gIFRoaXMgY2xhc3MgY29udHJvbHMgdGhlIHJlc29sdXRpb24gYW5kIGNvZGUKLy8vIGdlbmVyYXRpb24gdG8gcmVzdHJpY3QgdGhlIGltcGFjdC4KLy8vCi8vLyBUaGUgZm9sbG93aW5nIGxpbmUgb2YgY29kZSByZXF1aXJlcyB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgZ2VuZXJhdGl2ZQovLy8gY29uc3RydWN0b3IgZmFjdG9yeSBmdW5jdGlvbihzKSBmb3IgRmFuY3lCdXR0b24sIGFuZCB0aGVpciBpbnNlcnRpb24gaW50bwovLy8gdGhlIHRhYmxlOgovLy8KLy8vICAgICBkb2N1bWVudC5yZWdpc3RlcihGYW5jeUJ1dHRvbiwgJ3gtZmFuY3ktYnV0dG9uJyk7Ci8vLwovLy8gV2UgZGV0ZWN0IHRoaXMgYnkgJ2pvaW5pbmcnIHRoZSBjbGFzc2VzIHRoYXQgYXJlIHJlZmVyZW5jZWQgYXMgdHlwZSBsaXRlcmFscwovLy8gd2l0aCB0aGUgY2xhc3NlcyB0aGF0IGFyZSBjdXN0b20gZWxlbWVudHMsIGVuYWJsZWQgYnkgZGV0ZWN0aW5nIHRoZSBwcmVzZW5jZQovLy8gb2YgdGhlIHRhYmxlIGFjY2VzcyBjb2RlIHVzZWQgYnkgZG9jdW1lbnQucmVnaXN0ZXIuCi8vLwovLy8gV2UgaGF2ZSB0byBiZSBtb3JlIGNvbnNlcnZhdGl2ZSB3aGVuIHRoZSB0eXBlIGlzIHVua25vd24sIGUuZy4KLy8vCi8vLyAgICAgZG9jdW1lbnQucmVnaXN0ZXIoY2xhc3NNaXJyb3IucmVmbGVjdGVkVHlwZSwgdGFnRnJvbU1ldGFkYXRhKTsKLy8vCi8vLyBhbmQKLy8vCi8vLyAgICAgY2xhc3MgQ29tcG9uZW50PFQ+IHsKLy8vICAgICAgIGZpbmFsIHRhZzsKLy8vICAgICAgIENvbXBvbmVudCh0aGlzLnRhZyk7Ci8vLyAgICAgICB2b2lkIHJlZ2lzdGVyKCkgPT4gZG9jdW1lbnQucmVnaXN0ZXIoVCwgdGFnKTsKLy8vICAgICB9Ci8vLyAgICAgY29uc3QgQ29tcG9uZW50PEZhbmN5QnV0dG9uPigneC1mYW5jeS1idXR0b24nKS5yZWdpc3RlcigpOwovLy8KLy8vIEluIHRoZXNlIGNhc2VzIHdlIGNvbnNlcnZhdGl2ZWx5IGdlbmVyYXRlIGFsbCB2aWFibGUgZW50cmllcyBpbiB0aGUgdGFibGUuCmFic3RyYWN0IGNsYXNzIEN1c3RvbUVsZW1lbnRzQW5hbHlzaXNCYXNlIHsKICBmaW5hbCBOYXRpdmVCYXNpY0RhdGEgX25hdGl2ZURhdGE7CiAgZmluYWwgRWxlbWVudEVudmlyb25tZW50IF9lbGVtZW50RW52aXJvbm1lbnQ7CiAgZmluYWwgQ29tbW9uRWxlbWVudHMgX2NvbW1vbkVsZW1lbnRzOwoKICBDdXN0b21FbGVtZW50c0FuYWx5c2lzQmFzZSgKICAgICAgdGhpcy5fZWxlbWVudEVudmlyb25tZW50LCB0aGlzLl9jb21tb25FbGVtZW50cywgdGhpcy5fbmF0aXZlRGF0YSk7CgogIEN1c3RvbUVsZW1lbnRzQW5hbHlzaXNKb2luIGdldCBqb2luOwoKICB2b2lkIHJlZ2lzdGVySW5zdGFudGlhdGVkQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBpZiAoIV9uYXRpdmVEYXRhLmlzTmF0aXZlT3JFeHRlbmRzTmF0aXZlKGNscykpIHJldHVybjsKICAgIGlmIChfZWxlbWVudEVudmlyb25tZW50LmlzVW5uYW1lZE1peGluQXBwbGljYXRpb24oY2xzKSkgcmV0dXJuOwogICAgaWYgKGNscy5pc0Fic3RyYWN0KSByZXR1cm47CiAgICAvLyBKc0ludGVyb3AgY2xhc3NlcyBhcmUgb3BhcXVlIGludGVyZmFjZXMgd2l0aG91dCBhIGNvbmNyZXRlCiAgICAvLyBpbXBsZW1lbnRhdGlvbi4KICAgIGlmIChfbmF0aXZlRGF0YS5pc0pzSW50ZXJvcENsYXNzKGNscykpIHJldHVybjsKICAgIGpvaW4uaW5zdGFudGlhdGVkQ2xhc3Nlcy5hZGQoY2xzKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJTdGF0aWNVc2UoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydChlbGVtZW50ICE9IG51bGwpOwogICAgaWYgKF9jb21tb25FbGVtZW50cy5pc0ZpbmRJbmRleEZvck5hdGl2ZVN1YmNsYXNzVHlwZShlbGVtZW50KSkgewogICAgICBqb2luLmRlbWFuZGVkID0gdHJ1ZTsKICAgIH0KICB9CgogIC8vLyBDb21wdXRlcyB0aGUgW1dvcmxkSW1wYWN0XSBvZiB0aGUgY2xhc3NlcyByZWdpc3RlcmVkIHNpbmNlIGxhc3QgZmx1c2guCiAgV29ybGRJbXBhY3QgZmx1c2goKSA9PiBqb2luLmZsdXNoKCk7Cn0KCmNsYXNzIEN1c3RvbUVsZW1lbnRzUmVzb2x1dGlvbkFuYWx5c2lzIGV4dGVuZHMgQ3VzdG9tRWxlbWVudHNBbmFseXNpc0Jhc2UgewogIEBvdmVycmlkZQogIGZpbmFsIEN1c3RvbUVsZW1lbnRzQW5hbHlzaXNKb2luIGpvaW47CgogIEN1c3RvbUVsZW1lbnRzUmVzb2x1dGlvbkFuYWx5c2lzKAogICAgICBFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50LAogICAgICBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgTmF0aXZlQmFzaWNEYXRhIG5hdGl2ZURhdGEsCiAgICAgIEJhY2tlbmRVc2FnZUJ1aWxkZXIgYmFja2VuZFVzYWdlQnVpbGRlcikKICAgICAgOiBqb2luID0gbmV3IEN1c3RvbUVsZW1lbnRzQW5hbHlzaXNKb2luKAogICAgICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQsIGNvbW1vbkVsZW1lbnRzLCBuYXRpdmVEYXRhLAogICAgICAgICAgICBiYWNrZW5kVXNhZ2VCdWlsZGVyOiBiYWNrZW5kVXNhZ2VCdWlsZGVyKSwKICAgICAgICBzdXBlcihlbGVtZW50RW52aXJvbm1lbnQsIGNvbW1vbkVsZW1lbnRzLCBuYXRpdmVEYXRhKSB7CiAgICAvLyBUT0RPKHNyYSk6IFJlbW92ZSB0aGlzIHdvcmstYXJvdW5kLiAgV2Ugc2hvdWxkIG1hcmsgYWxsQ2xhc3Nlc1NlbGVjdGVkIGluCiAgICAvLyBib3RoIGpvaW5zIG9ubHkgd2hlbiB3ZSBzZWUgYSBjb25zdHJ1Y3QgZ2VuZXJhdGluZyBhbiB1bmtub3duIFtUeXBlXSBidXQKICAgIC8vIHdlIGNhbid0IGN1cnJlbnRseSByZWNvZ25pemUgYWxsIGNhc2VzLiAgSW4gcGFydGljdWxhciwgdGhlIHdvcmstYXJvdW5kCiAgICAvLyBmb3IgdGhlIHVuaW1wbGVtZW50ZWQgYENsYXNzTWlycm9yLnJlZmxlY3RlZFR5cGVgIGlzIG5vdCByZWNvZ25pemFibGUuCiAgICAvLyBUT0RPKDEyNjA3KTogTWF0Y2ggb24gW0NsYXNzTWlycm9yLnJlZmxlY3RlZFR5cGVdCiAgICBqb2luLmFsbENsYXNzZXNTZWxlY3RlZCA9IHRydWU7CiAgfQoKICB2b2lkIHJlZ2lzdGVyVHlwZUxpdGVyYWwoRGFydFR5cGUgdHlwZSkgewogICAgaWYgKHR5cGUuaXNJbnRlcmZhY2VUeXBlKSB7CiAgICAgIC8vIFRPRE8oc3JhKTogSWYgd2UgaGFkIGEgZmxvdyBxdWVyeSBmcm9tIHRoZSB0eXBlIGxpdGVyYWwgZXhwcmVzc2lvbiB0bwogICAgICAvLyB0aGUgVHlwZSBhcmd1bWVudCBvZiB0aGUgbWV0YWRhdGEgbG9va3VwLCB3ZSBjb3VsZCB0ZWxsIGlmIHRoaXMgdHlwZQogICAgICAvLyBsaXRlcmFsIGlzIHJlYWxseSBhIGRlbWFuZCBmb3IgdGhlIG1ldGFkYXRhLgogICAgICBJbnRlcmZhY2VUeXBlIGludGVyZmFjZVR5cGUgPSB0eXBlOwogICAgICBqb2luLnNlbGVjdGVkQ2xhc3Nlcy5hZGQoaW50ZXJmYWNlVHlwZS5lbGVtZW50KTsKICAgIH0gZWxzZSBpZiAodHlwZS5pc1R5cGVWYXJpYWJsZSkgewogICAgICAvLyBUaGlzIGlzIGEgdHlwZSBwYXJhbWV0ZXIgb2YgYSBwYXJhbWV0ZXJpemVkIGNsYXNzLgogICAgICAvLyBUT0RPKHNyYSk6IElzIHRoZXJlIGEgd2F5IHRvIGRldGVybWluZSB3aGljaCB0eXBlcyBhcmUgYm91bmQgdG8gdGhlCiAgICAgIC8vIHBhcmFtZXRlcj8KICAgICAgam9pbi5hbGxDbGFzc2VzU2VsZWN0ZWQgPSB0cnVlOwogICAgfQogIH0KfQoKY2xhc3MgQ3VzdG9tRWxlbWVudHNDb2RlZ2VuQW5hbHlzaXMgZXh0ZW5kcyBDdXN0b21FbGVtZW50c0FuYWx5c2lzQmFzZSB7CiAgQG92ZXJyaWRlCiAgZmluYWwgQ3VzdG9tRWxlbWVudHNBbmFseXNpc0pvaW4gam9pbjsKCiAgQ3VzdG9tRWxlbWVudHNDb2RlZ2VuQW5hbHlzaXMoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIEVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQsIE5hdGl2ZUJhc2ljRGF0YSBuYXRpdmVEYXRhKQogICAgICA6IGpvaW4gPSBuZXcgQ3VzdG9tRWxlbWVudHNBbmFseXNpc0pvaW4oCiAgICAgICAgICAgIGVsZW1lbnRFbnZpcm9ubWVudCwgY29tbW9uRWxlbWVudHMsIG5hdGl2ZURhdGEpLAogICAgICAgIHN1cGVyKGVsZW1lbnRFbnZpcm9ubWVudCwgY29tbW9uRWxlbWVudHMsIG5hdGl2ZURhdGEpIHsKICAgIC8vIFRPRE8oc3JhKTogUmVtb3ZlIHRoaXMgd29yay1hcm91bmQuICBXZSBzaG91bGQgbWFyayBhbGxDbGFzc2VzU2VsZWN0ZWQgaW4KICAgIC8vIGJvdGggam9pbnMgb25seSB3aGVuIHdlIHNlZSBhIGNvbnN0cnVjdCBnZW5lcmF0aW5nIGFuIHVua25vd24gW1R5cGVdIGJ1dAogICAgLy8gd2UgY2FuJ3QgY3VycmVudGx5IHJlY29nbml6ZSBhbGwgY2FzZXMuICBJbiBwYXJ0aWN1bGFyLCB0aGUgd29yay1hcm91bmQKICAgIC8vIGZvciB0aGUgdW5pbXBsZW1lbnRlZCBgQ2xhc3NNaXJyb3IucmVmbGVjdGVkVHlwZWAgaXMgbm90IHJlY29nbml6YWJsZS4KICAgIC8vIFRPRE8oMTI2MDcpOiBNYXRjaCBvbiBbQ2xhc3NNaXJyb3IucmVmbGVjdGVkVHlwZV0KICAgIGpvaW4uYWxsQ2xhc3Nlc1NlbGVjdGVkID0gdHJ1ZTsKICB9CgogIHZvaWQgcmVnaXN0ZXJUeXBlQ29uc3RhbnQoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBqb2luLnNlbGVjdGVkQ2xhc3Nlcy5hZGQoY2xzKTsKICB9CgogIGJvb2wgZ2V0IG5lZWRzVGFibGUgPT4gam9pbi5kZW1hbmRlZDsKCiAgYm9vbCBuZWVkc0NsYXNzKENsYXNzRW50aXR5IGNscykgPT4gam9pbi5hY3RpdmVDbGFzc2VzLmNvbnRhaW5zKGNscyk7CgogIExpc3Q8Q29uc3RydWN0b3JFbnRpdHk+IGNvbnN0cnVjdG9ycyhDbGFzc0VudGl0eSBjbHMpID0+CiAgICAgIGpvaW4uY29tcHV0ZUVzY2FwaW5nQ29uc3RydWN0b3JzKGNscyk7Cn0KCmNsYXNzIEN1c3RvbUVsZW1lbnRzQW5hbHlzaXNKb2luIHsKICBmaW5hbCBFbGVtZW50RW52aXJvbm1lbnQgX2VsZW1lbnRFbnZpcm9ubWVudDsKICBmaW5hbCBDb21tb25FbGVtZW50cyBfY29tbW9uRWxlbWVudHM7CiAgZmluYWwgTmF0aXZlQmFzaWNEYXRhIF9uYXRpdmVEYXRhOwogIGZpbmFsIEJhY2tlbmRVc2FnZUJ1aWxkZXIgX2JhY2tlbmRVc2FnZUJ1aWxkZXI7CgogIGZpbmFsIGJvb2wgZm9yUmVzb2x1dGlvbjsKCiAgZmluYWwgU3RhZ2VkV29ybGRJbXBhY3RCdWlsZGVyIGltcGFjdEJ1aWxkZXIgPSBuZXcgU3RhZ2VkV29ybGRJbXBhY3RCdWlsZGVyKCk7CgogIC8vIENsYXNzZXMgdGhhdCBhcmUgY2FuZGlkYXRlcyBmb3IgbmVlZGluZyBjb25zdHJ1Y3RvcnMuICBDbGFzc2VzIGFyZSBtb3ZlZCB0bwogIC8vIFthY3RpdmVDbGFzc2VzXSB3aGVuIHdlIGtub3cgdGhleSBuZWVkIGNvbnN0cnVjdG9ycy4KICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IGluc3RhbnRpYXRlZENsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICAvLyBDbGFzc2VzIGV4cGxpY2l0bHkgbmFtZWQuCiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBzZWxlY3RlZENsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICAvLyBUcnVlIGlmIHdlIG11c3QgY29uc2VydmF0aXZlbHkgaW5jbHVkZSBhbGwgZXh0ZW5zaW9uIGNsYXNzZXMuCiAgYm9vbCBhbGxDbGFzc2VzU2VsZWN0ZWQgPSBmYWxzZTsKCiAgLy8gRGlkIHdlIHNlZSBhIGRlbWFuZCBmb3IgdGhlIGRhdGE/CiAgYm9vbCBkZW1hbmRlZCA9IGZhbHNlOwoKICAvLyBDbGFzc2VzT3V0cHV0OiBjbGFzc2VzIHJlcXVpcmluZyBtZXRhZGF0YS4KICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IGFjdGl2ZUNsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICBDdXN0b21FbGVtZW50c0FuYWx5c2lzSm9pbigKICAgICAgdGhpcy5fZWxlbWVudEVudmlyb25tZW50LCB0aGlzLl9jb21tb25FbGVtZW50cywgdGhpcy5fbmF0aXZlRGF0YSwKICAgICAge0JhY2tlbmRVc2FnZUJ1aWxkZXIgYmFja2VuZFVzYWdlQnVpbGRlcn0pCiAgICAgIDogdGhpcy5fYmFja2VuZFVzYWdlQnVpbGRlciA9IGJhY2tlbmRVc2FnZUJ1aWxkZXIsCiAgICAgICAgdGhpcy5mb3JSZXNvbHV0aW9uID0gYmFja2VuZFVzYWdlQnVpbGRlciAhPSBudWxsOwoKICBXb3JsZEltcGFjdCBmbHVzaCgpIHsKICAgIGlmICghZGVtYW5kZWQpIHJldHVybiBjb25zdCBXb3JsZEltcGFjdCgpOwogICAgdmFyIG5ld0FjdGl2ZUNsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwogICAgZm9yIChDbGFzc0VudGl0eSBjbHMgaW4gaW5zdGFudGlhdGVkQ2xhc3NlcykgewogICAgICBib29sIGlzTmF0aXZlID0gX25hdGl2ZURhdGEuaXNOYXRpdmVDbGFzcyhjbHMpOwogICAgICBib29sIGlzRXh0ZW5zaW9uID0gIWlzTmF0aXZlICYmIF9uYXRpdmVEYXRhLmlzTmF0aXZlT3JFeHRlbmRzTmF0aXZlKGNscyk7CiAgICAgIC8vIEdlbmVyYXRlIHRhYmxlIGVudHJpZXMgZm9yIG5hdGl2ZSBjbGFzc2VzIHRoYXQgYXJlIGV4cGxpY2l0bHkgbmFtZWQgYW5kCiAgICAgIC8vIGV4dGVuc2lvbnMgdGhhdCBmaXggb3VyIGNyaXRlcmlhLgogICAgICBpZiAoKGlzTmF0aXZlICYmIHNlbGVjdGVkQ2xhc3Nlcy5jb250YWlucyhjbHMpKSB8fAogICAgICAgICAgKGlzRXh0ZW5zaW9uICYmCiAgICAgICAgICAgICAgKGFsbENsYXNzZXNTZWxlY3RlZCB8fCBzZWxlY3RlZENsYXNzZXMuY29udGFpbnMoY2xzKSkpKSB7CiAgICAgICAgbmV3QWN0aXZlQ2xhc3Nlcy5hZGQoY2xzKTsKICAgICAgICBJdGVyYWJsZTxDb25zdHJ1Y3RvckVudGl0eT4gZXNjYXBpbmdDb25zdHJ1Y3RvcnMgPQogICAgICAgICAgICBjb21wdXRlRXNjYXBpbmdDb25zdHJ1Y3RvcnMoY2xzKTsKICAgICAgICBmb3IgKENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yIGluIGVzY2FwaW5nQ29uc3RydWN0b3JzKSB7CiAgICAgICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2UuY29uc3RydWN0b3JJbnZva2UoCiAgICAgICAgICAgICAgY29uc3RydWN0b3IsIENhbGxTdHJ1Y3R1cmUuTk9fQVJHUykpOwogICAgICAgIH0KICAgICAgICBpZiAoZm9yUmVzb2x1dGlvbikgewogICAgICAgICAgZXNjYXBpbmdDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgICAuZm9yRWFjaChfYmFja2VuZFVzYWdlQnVpbGRlci5yZWdpc3Rlckdsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jeSk7CiAgICAgICAgfQogICAgICAgIC8vIEZvcmNlIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSB0eXBlIGNvbnN0YW50IHRoYXQgaXMgdGhlIGtleSB0byBhbiBlbnRyeQogICAgICAgIC8vIGluIHRoZSBnZW5lcmF0ZWQgdGFibGUuCiAgICAgICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IF9tYWtlVHlwZUNvbnN0YW50KGNscyk7CiAgICAgICAgaW1wYWN0QnVpbGRlcgogICAgICAgICAgICAucmVnaXN0ZXJDb25zdGFudFVzZShuZXcgQ29uc3RhbnRVc2UuY3VzdG9tRWxlbWVudHMoY29uc3RhbnQpKTsKICAgICAgfQogICAgfQogICAgYWN0aXZlQ2xhc3Nlcy5hZGRBbGwobmV3QWN0aXZlQ2xhc3Nlcyk7CiAgICBpbnN0YW50aWF0ZWRDbGFzc2VzLnJlbW92ZUFsbChuZXdBY3RpdmVDbGFzc2VzKTsKICAgIHJldHVybiBpbXBhY3RCdWlsZGVyLmZsdXNoKCk7CiAgfQoKICBUeXBlQ29uc3RhbnRWYWx1ZSBfbWFrZVR5cGVDb25zdGFudChDbGFzc0VudGl0eSBjbHMpIHsKICAgIERhcnRUeXBlIHR5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFJhd1R5cGUoY2xzKTsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uY3JlYXRlVHlwZShfY29tbW9uRWxlbWVudHMsIHR5cGUpOwogIH0KCiAgTGlzdDxDb25zdHJ1Y3RvckVudGl0eT4gY29tcHV0ZUVzY2FwaW5nQ29uc3RydWN0b3JzKENsYXNzRW50aXR5IGNscykgewogICAgTGlzdDxDb25zdHJ1Y3RvckVudGl0eT4gcmVzdWx0ID0gPENvbnN0cnVjdG9yRW50aXR5PltdOwogICAgLy8gT25seSBjbGFzc2VzIHRoYXQgZXh0ZW5kIG5hdGl2ZSBjbGFzc2VzIGhhdmUgY29uc3RydWN0b3JzIGluIHRoZSB0YWJsZS4KICAgIC8vIFdlIGNvdWxkIHJlZmluZSB0aGlzIHRvIGNsYXNzZXMgdGhhdCBleHRlbmQgRWxlbWVudCwgYnV0IHRoYXQgd291bGQgYnJlYWsKICAgIC8vIHRoZSB0ZXN0cyBhbmQgdGhlcmUgaXMgbm8gc2FuZSByZWFzb24gdG8gc3ViY2xhc3Mgb3RoZXIgbmF0aXZlIGNsYXNzZXMuCiAgICBpZiAoX25hdGl2ZURhdGEuaXNOYXRpdmVDbGFzcyhjbHMpKSByZXR1cm4gcmVzdWx0OwoKICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaENvbnN0cnVjdG9yKGNscywKICAgICAgICAoQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IpIHsKICAgICAgaWYgKGNvbnN0cnVjdG9yLmlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yKSB7CiAgICAgICAgLy8gRW5zdXJlIHRoYXQgcGFyYW1ldGVyIHN0cnVjdHVyZSBoYXMgYmVlbiBjb21wdXRlZCBieSBxdWVyeWluZyB0aGUKICAgICAgICAvLyBmdW5jdGlvbiB0eXBlLgogICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlKGNvbnN0cnVjdG9yKTsKICAgICAgICAvLyBJZ25vcmUgY29uc3RydWN0b3JzIHRoYXQgY2Fubm90IGJlIGNhbGxlZCB3aXRoIHplcm8gYXJndW1lbnRzLgogICAgICAgIGlmIChjb25zdHJ1Y3Rvci5wYXJhbWV0ZXJTdHJ1Y3R1cmUucmVxdWlyZWRQYXJhbWV0ZXJzID09IDApIHsKICAgICAgICAgIHJlc3VsdC5hZGQoY29uc3RydWN0b3IpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQqA8wBOTjwBIj8jJCEqOycwNhsBIQROSyIETk9QJwRJTg8EOgRRUTgEQwRHBAgEHRUfOApDBE8sJTAoAR5JAScBNDtEIEIXMycEATEdRRwGBAFNJwIBTAwpASQtJSIvLzw3QFFQT045JAQBLCBPTjYqNyY8TRQmBgQCAUkMKQE/SS89QFFQT045JAQBLyMEASgBSAE7LQIBIzAoJTIBHAFRAVE6RwEfQwFDIwEnGQEwQQEeSDE5OgEYLzMzNlBRKzkaSCM7LkZLNAodH08KUSM5FkwIBiw1IgQBOTk+BAFJPE9RTzcBMCoxTRo6SkYjCggIEwQCAT1wYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2N1c3RvbV9lbGVtZW50c19hbmFseXNpcy5kYXJ0QHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2JhY2tlbmQvaW1wYWN0X3RyYW5zZm9ybWVyLmRhcnTAAEZWLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkganNfYmFja2VuZC5iYWNrZW5kLmltcGFjdF90cmFuc2Zvcm1lcjsKCmltcG9ydCAnLi4vdW5pdmVyc2UvY2xhc3NfaGllcmFyY2h5LmRhcnQnIHNob3cgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi9iYWNrZW5kX2FwaS5kYXJ0JyBzaG93IEltcGFjdFRyYW5zZm9ybWVyOwppbXBvcnQgJy4uL2NvbW1vbi9jb2RlZ2VuLmRhcnQnIHNob3cgQ29kZWdlbkltcGFjdDsKaW1wb3J0ICcuLi9jb21tb24vcmVzb2x1dGlvbi5kYXJ0JyBzaG93IFJlc29sdXRpb25JbXBhY3Q7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgRWxlbWVudEVudmlyb25tZW50OwppbXBvcnQgJy4uL2NvbnN0YW50cy9leHByZXNzaW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2pzX2VtaXR0ZXIvbmF0aXZlX2VtaXR0ZXIuZGFydCc7CmltcG9ydCAnLi4vbmF0aXZlL2VucXVldWUuZGFydCc7CmltcG9ydCAnLi4vbmF0aXZlL2JlaGF2aW9yLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2ZlYXR1cmUuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvdXNlLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3dvcmxkX2ltcGFjdC5kYXJ0JyBzaG93IFRyYW5zZm9ybWVkV29ybGRJbXBhY3QsIFdvcmxkSW1wYWN0OwppbXBvcnQgJy4uL3V0aWwvdXRpbC5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JzsKaW1wb3J0ICdhbm5vdGF0aW9ucy5kYXJ0JzsKaW1wb3J0ICdiYWNrZW5kX2ltcGFjdC5kYXJ0JzsKaW1wb3J0ICdiYWNrZW5kX3VzYWdlLmRhcnQnOwppbXBvcnQgJ2N1c3RvbV9lbGVtZW50c19hbmFseXNpcy5kYXJ0JzsKaW1wb3J0ICdpbnRlcmNlcHRvcl9kYXRhLmRhcnQnOwppbXBvcnQgJ25hbWVyLmRhcnQnOwppbXBvcnQgJ25hdGl2ZV9kYXRhLmRhcnQnOwppbXBvcnQgJ3J1bnRpbWVfdHlwZXMuZGFydCc7CmltcG9ydCAncnVudGltZV90eXBlc19yZXNvbHV0aW9uLmRhcnQnOwoKY2xhc3MgSmF2YVNjcmlwdEltcGFjdFRyYW5zZm9ybWVyIGV4dGVuZHMgSW1wYWN0VHJhbnNmb3JtZXIgewogIGZpbmFsIEVsZW1lbnRFbnZpcm9ubWVudCBfZWxlbWVudEVudmlyb25tZW50OwogIGZpbmFsIENvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKICBmaW5hbCBCYWNrZW5kSW1wYWN0cyBfaW1wYWN0czsKICBmaW5hbCBOYXRpdmVCYXNpY0RhdGEgX25hdGl2ZUJhc2ljRGF0YTsKICBmaW5hbCBOYXRpdmVSZXNvbHV0aW9uRW5xdWV1ZXIgX25hdGl2ZVJlc29sdXRpb25FbnF1ZXVlcjsKICBmaW5hbCBCYWNrZW5kVXNhZ2VCdWlsZGVyIF9iYWNrZW5kVXNhZ2VCdWlsZGVyOwogIGZpbmFsIEN1c3RvbUVsZW1lbnRzUmVzb2x1dGlvbkFuYWx5c2lzIF9jdXN0b21FbGVtZW50c1Jlc29sdXRpb25BbmFseXNpczsKICBmaW5hbCBSdW50aW1lVHlwZXNOZWVkQnVpbGRlciBfcnRpTmVlZEJ1aWxkZXI7CiAgZmluYWwgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIF9jbGFzc0hpZXJhcmNoeUJ1aWxkZXI7CiAgZmluYWwgQW5ub3RhdGlvbnNEYXRhIF9hbm5vdGF0aW9uc0RhdGE7CgogIEphdmFTY3JpcHRJbXBhY3RUcmFuc2Zvcm1lcigKICAgICAgdGhpcy5fZWxlbWVudEVudmlyb25tZW50LAogICAgICB0aGlzLl9jb21tb25FbGVtZW50cywKICAgICAgdGhpcy5faW1wYWN0cywKICAgICAgdGhpcy5fbmF0aXZlQmFzaWNEYXRhLAogICAgICB0aGlzLl9uYXRpdmVSZXNvbHV0aW9uRW5xdWV1ZXIsCiAgICAgIHRoaXMuX2JhY2tlbmRVc2FnZUJ1aWxkZXIsCiAgICAgIHRoaXMuX2N1c3RvbUVsZW1lbnRzUmVzb2x1dGlvbkFuYWx5c2lzLAogICAgICB0aGlzLl9ydGlOZWVkQnVpbGRlciwKICAgICAgdGhpcy5fY2xhc3NIaWVyYXJjaHlCdWlsZGVyLAogICAgICB0aGlzLl9hbm5vdGF0aW9uc0RhdGEpOwoKICBAb3ZlcnJpZGUKICBXb3JsZEltcGFjdCB0cmFuc2Zvcm1SZXNvbHV0aW9uSW1wYWN0KFJlc29sdXRpb25JbXBhY3Qgd29ybGRJbXBhY3QpIHsKICAgIFRyYW5zZm9ybWVkV29ybGRJbXBhY3QgdHJhbnNmb3JtZWQgPQogICAgICAgIG5ldyBUcmFuc2Zvcm1lZFdvcmxkSW1wYWN0KHdvcmxkSW1wYWN0KTsKCiAgICB2b2lkIHJlZ2lzdGVySW1wYWN0KEJhY2tlbmRJbXBhY3QgaW1wYWN0KSB7CiAgICAgIGltcGFjdC5yZWdpc3RlckltcGFjdCh0cmFuc2Zvcm1lZCwgX2VsZW1lbnRFbnZpcm9ubWVudCk7CiAgICAgIF9iYWNrZW5kVXNhZ2VCdWlsZGVyLnByb2Nlc3NCYWNrZW5kSW1wYWN0KGltcGFjdCk7CiAgICB9CgogICAgZm9yIChGZWF0dXJlIGZlYXR1cmUgaW4gd29ybGRJbXBhY3QuZmVhdHVyZXMpIHsKICAgICAgc3dpdGNoIChmZWF0dXJlKSB7CiAgICAgICAgY2FzZSBGZWF0dXJlLkFCU1RSQUNUX0NMQVNTX0lOU1RBTlRJQVRJT046CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5hYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEZlYXR1cmUuQVNTRVJUOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuYXNzZXJ0V2l0aG91dE1lc3NhZ2UpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBGZWF0dXJlLkFTU0VSVF9XSVRIX01FU1NBR0U6CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5hc3NlcnRXaXRoTWVzc2FnZSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEZlYXR1cmUuQVNZTkM6CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5hc3luY0JvZHkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBGZWF0dXJlLkFTWU5DX0ZPUl9JTjoKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLmFzeW5jRm9ySW4pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBGZWF0dXJlLkFTWU5DX1NUQVI6CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5hc3luY1N0YXJCb2R5KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRmVhdHVyZS5DQVRDSF9TVEFURU1FTlQ6CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5jYXRjaFN0YXRlbWVudCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEZlYXR1cmUuRkFMTF9USFJPVUdIX0VSUk9SOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuZmFsbFRocm91Z2hFcnJvcik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEZlYXR1cmUuRklFTERfV0lUSE9VVF9JTklUSUFMSVpFUjoKICAgICAgICBjYXNlIEZlYXR1cmUuTE9DQUxfV0lUSE9VVF9JTklUSUFMSVpFUjoKICAgICAgICAgIHRyYW5zZm9ybWVkLnJlZ2lzdGVyVHlwZVVzZSgKICAgICAgICAgICAgICBuZXcgVHlwZVVzZS5pbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy5udWxsVHlwZSkpOwogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMubnVsbExpdGVyYWwpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBGZWF0dXJlLkxBWllfRklFTEQ6CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5sYXp5RmllbGQpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBGZWF0dXJlLlNUQUNLX1RSQUNFX0lOX0NBVENIOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuc3RhY2tUcmFjZUluQ2F0Y2gpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBGZWF0dXJlLlNUUklOR19JTlRFUlBPTEFUSU9OOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuc3RyaW5nSW50ZXJwb2xhdGlvbik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEZlYXR1cmUuU1RSSU5HX0pVWFRBUE9TSVRJT046CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5zdHJpbmdKdXh0YXBvc2l0aW9uKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRmVhdHVyZS5TVVBFUl9OT19TVUNIX01FVEhPRDoKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLnN1cGVyTm9TdWNoTWV0aG9kKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRmVhdHVyZS5TWU1CT0xfQ09OU1RSVUNUT1I6CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5zeW1ib2xDb25zdHJ1Y3Rvcik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEZlYXR1cmUuU1lOQ19GT1JfSU46CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5zeW5jRm9ySW4pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBGZWF0dXJlLlNZTkNfU1RBUjoKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLnN5bmNTdGFyQm9keSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEZlYXR1cmUuVEhST1dfRVhQUkVTU0lPTjoKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLnRocm93RXhwcmVzc2lvbik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEZlYXR1cmUuVEhST1dfTk9fU1VDSF9NRVRIT0Q6CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy50aHJvd05vU3VjaE1ldGhvZCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEZlYXR1cmUuVEhST1dfUlVOVElNRV9FUlJPUjoKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLnRocm93UnVudGltZUVycm9yKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRmVhdHVyZS5USFJPV19VTlNVUFBPUlRFRF9FUlJPUjoKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLnRocm93VW5zdXBwb3J0ZWRFcnJvcik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEZlYXR1cmUuVFlQRV9WQVJJQUJMRV9CT1VORFNfQ0hFQ0s6CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy50eXBlVmFyaWFibGVCb3VuZENoZWNrKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRmVhdHVyZS5MT0FEX0xJQlJBUlk6CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5sb2FkTGlicmFyeSk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfQoKICAgIGJvb2wgaGFzQXNDYXN0ID0gZmFsc2U7CiAgICBib29sIGhhc1R5cGVMaXRlcmFsID0gZmFsc2U7CiAgICBmb3IgKFR5cGVVc2UgdHlwZVVzZSBpbiB3b3JsZEltcGFjdC50eXBlVXNlcykgewogICAgICBEYXJ0VHlwZSB0eXBlID0gdHlwZVVzZS50eXBlOwogICAgICBzd2l0Y2ggKHR5cGVVc2Uua2luZCkgewogICAgICAgIGNhc2UgVHlwZVVzZUtpbmQuSU5TVEFOVElBVElPTjoKICAgICAgICBjYXNlIFR5cGVVc2VLaW5kLkNPTlNUX0lOU1RBTlRJQVRJT046CiAgICAgICAgY2FzZSBUeXBlVXNlS2luZC5OQVRJVkVfSU5TVEFOVElBVElPTjoKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgVHlwZVVzZUtpbmQuSVNfQ0hFQ0s6CiAgICAgICAgICBvbklzQ2hlY2sodHlwZSwgdHJhbnNmb3JtZWQpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBUeXBlVXNlS2luZC5BU19DQVNUOgogICAgICAgICAgaWYgKF9hbm5vdGF0aW9uc0RhdGEKICAgICAgICAgICAgICAuZ2V0RXhwbGljaXRDYXN0Q2hlY2tQb2xpY3kod29ybGRJbXBhY3QubWVtYmVyKQogICAgICAgICAgICAgIC5pc0VtaXR0ZWQpIHsKICAgICAgICAgICAgb25Jc0NoZWNrKHR5cGUsIHRyYW5zZm9ybWVkKTsKICAgICAgICAgICAgaGFzQXNDYXN0ID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgVHlwZVVzZUtpbmQuSU1QTElDSVRfQ0FTVDoKICAgICAgICAgIGlmIChfYW5ub3RhdGlvbnNEYXRhCiAgICAgICAgICAgICAgLmdldEltcGxpY2l0RG93bmNhc3RDaGVja1BvbGljeSh3b3JsZEltcGFjdC5tZW1iZXIpCiAgICAgICAgICAgICAgLmlzRW1pdHRlZCkgewogICAgICAgICAgICBvbklzQ2hlY2sodHlwZSwgdHJhbnNmb3JtZWQpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBUeXBlVXNlS2luZC5QQVJBTUVURVJfQ0hFQ0s6CiAgICAgICAgICBpZiAoX2Fubm90YXRpb25zRGF0YQogICAgICAgICAgICAgIC5nZXRQYXJhbWV0ZXJDaGVja1BvbGljeSh3b3JsZEltcGFjdC5tZW1iZXIpCiAgICAgICAgICAgICAgLmlzRW1pdHRlZCkgewogICAgICAgICAgICBvbklzQ2hlY2sodHlwZSwgdHJhbnNmb3JtZWQpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBUeXBlVXNlS2luZC5DQVRDSF9UWVBFOgogICAgICAgICAgb25Jc0NoZWNrKHR5cGUsIHRyYW5zZm9ybWVkKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgVHlwZVVzZUtpbmQuVFlQRV9MSVRFUkFMOgogICAgICAgICAgX2N1c3RvbUVsZW1lbnRzUmVzb2x1dGlvbkFuYWx5c2lzLnJlZ2lzdGVyVHlwZUxpdGVyYWwodHlwZSk7CiAgICAgICAgICBpZiAodHlwZS5pc1R5cGVWYXJpYWJsZSkgewogICAgICAgICAgICBUeXBlVmFyaWFibGVUeXBlIHR5cGVWYXJpYWJsZSA9IHR5cGU7CiAgICAgICAgICAgIEVudGl0eSB0eXBlRGVjbGFyYXRpb24gPSB0eXBlVmFyaWFibGUuZWxlbWVudC50eXBlRGVjbGFyYXRpb247CiAgICAgICAgICAgIGlmICh0eXBlRGVjbGFyYXRpb24gaXMgQ2xhc3NFbnRpdHkpIHsKICAgICAgICAgICAgICBfcnRpTmVlZEJ1aWxkZXIKICAgICAgICAgICAgICAgICAgLnJlZ2lzdGVyQ2xhc3NVc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWwodHlwZURlY2xhcmF0aW9uKTsKICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlRGVjbGFyYXRpb24gaXMgRnVuY3Rpb25FbnRpdHkpIHsKICAgICAgICAgICAgICBfcnRpTmVlZEJ1aWxkZXIKICAgICAgICAgICAgICAgICAgLnJlZ2lzdGVyTWV0aG9kVXNpbmdUeXBlVmFyaWFibGVMaXRlcmFsKHR5cGVEZWNsYXJhdGlvbik7CiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZURlY2xhcmF0aW9uIGlzIExvY2FsKSB7CiAgICAgICAgICAgICAgX3J0aU5lZWRCdWlsZGVyLnJlZ2lzdGVyTG9jYWxGdW5jdGlvblVzaW5nVHlwZVZhcmlhYmxlTGl0ZXJhbCgKICAgICAgICAgICAgICAgICAgdHlwZURlY2xhcmF0aW9uKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy50eXBlVmFyaWFibGVFeHByZXNzaW9uKTsKICAgICAgICAgIH0KICAgICAgICAgIGhhc1R5cGVMaXRlcmFsID0gdHJ1ZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgVHlwZVVzZUtpbmQuUlRJX1ZBTFVFOgogICAgICAgIGNhc2UgVHlwZVVzZUtpbmQuVFlQRV9BUkdVTUVOVDoKICAgICAgICBjYXNlIFR5cGVVc2VLaW5kLk5BTUVEX1RZUEVfVkFSSUFCTEVfTkVXX1JUSToKICAgICAgICAgIGZhaWxlZEF0KENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsICJVbmV4cGVjdGVkIHR5cGUgdXNlOiAkdHlwZVVzZS4iKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CgogICAgaWYgKGhhc0FzQ2FzdCkgewogICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5hc0NoZWNrKTsKICAgIH0KCiAgICBpZiAoaGFzVHlwZUxpdGVyYWwpIHsKICAgICAgdHJhbnNmb3JtZWQKICAgICAgICAgIC5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UuaW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMudHlwZVR5cGUpKTsKICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMudHlwZUxpdGVyYWwpOwogICAgfQoKICAgIGZvciAoTWFwTGl0ZXJhbFVzZSBtYXBMaXRlcmFsVXNlIGluIHdvcmxkSW1wYWN0Lm1hcExpdGVyYWxzKSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSB0aGUgW2lzRW1wdHldIHByb3BlcnR5IHdoZW4gZmFjdG9yeQogICAgICAvLyBjb25zdHJ1Y3RvcnMgYXJlIHJlZ2lzdGVyZWQgZGlyZWN0bHkuCiAgICAgIGlmIChtYXBMaXRlcmFsVXNlLmlzQ29uc3RhbnQpIHsKICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5jb25zdGFudE1hcExpdGVyYWwpOwogICAgICB9IGVsc2UgewogICAgICAgIHRyYW5zZm9ybWVkCiAgICAgICAgICAgIC5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UuaW5zdGFudGlhdGlvbihtYXBMaXRlcmFsVXNlLnR5cGUpKTsKICAgICAgfQogICAgfQoKICAgIGZvciAoU2V0TGl0ZXJhbFVzZSBzZXRMaXRlcmFsVXNlIGluIHdvcmxkSW1wYWN0LnNldExpdGVyYWxzKSB7CiAgICAgIGlmIChzZXRMaXRlcmFsVXNlLmlzQ29uc3RhbnQpIHsKICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5jb25zdGFudFNldExpdGVyYWwpOwogICAgICB9IGVsc2UgewogICAgICAgIHRyYW5zZm9ybWVkCiAgICAgICAgICAgIC5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UuaW5zdGFudGlhdGlvbihzZXRMaXRlcmFsVXNlLnR5cGUpKTsKICAgICAgfQogICAgfQoKICAgIGZvciAoTGlzdExpdGVyYWxVc2UgbGlzdExpdGVyYWxVc2UgaW4gd29ybGRJbXBhY3QubGlzdExpdGVyYWxzKSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSB0aGUgW2lzQ29uc3RhbnRdIGFuZCBbaXNFbXB0eV0gcHJvcGVydHkgd2hlbgogICAgICAvLyBmYWN0b3J5IGNvbnN0cnVjdG9ycyBhcmUgcmVnaXN0ZXJlZCBkaXJlY3RseS4KICAgICAgdHJhbnNmb3JtZWQKICAgICAgICAgIC5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UuaW5zdGFudGlhdGlvbihsaXN0TGl0ZXJhbFVzZS50eXBlKSk7CiAgICB9CgogICAgZm9yIChSdW50aW1lVHlwZVVzZSBydW50aW1lVHlwZVVzZSBpbiB3b3JsZEltcGFjdC5ydW50aW1lVHlwZVVzZXMpIHsKICAgICAgLy8gRW5hYmxlIHJ1bnRpbWUgdHlwZSBzdXBwb3J0IGlmIHdlIGRpc2NvdmVyIGEgZ2V0dGVyIGNhbGxlZAogICAgICAvLyBydW50aW1lVHlwZS4gV2UgaGF2ZSB0byBlbmFibGUgcnVudGltZSB0eXBlIGJlZm9yZSBoaXR0aW5nIHRoZQogICAgICAvLyBjb2RlZ2VuLCBzbyB0aGF0IGNvbnN0cnVjdG9ycyBrbm93IHdoZXRoZXIgdGhleSBuZWVkIHRvIGdlbmVyYXRlIGNvZGUKICAgICAgLy8gZm9yIHJ1bnRpbWUgdHlwZS4KICAgICAgX2JhY2tlbmRVc2FnZUJ1aWxkZXIucmVnaXN0ZXJSdW50aW1lVHlwZVVzZShydW50aW1lVHlwZVVzZSk7CiAgICB9CgogICAgaWYgKHdvcmxkSW1wYWN0LmNvbnN0U3ltYm9sTmFtZXMuaXNOb3RFbXB0eSkgewogICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5jb25zdFN5bWJvbCk7CiAgICB9CgogICAgZm9yIChTdGF0aWNVc2Ugc3RhdGljVXNlIGluIHdvcmxkSW1wYWN0LnN0YXRpY1VzZXMpIHsKICAgICAgc3dpdGNoIChzdGF0aWNVc2Uua2luZCkgewogICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5DTE9TVVJFOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuY2xvc3VyZSk7CiAgICAgICAgICBMb2NhbCBjbG9zdXJlID0gc3RhdGljVXNlLmVsZW1lbnQ7CiAgICAgICAgICBGdW5jdGlvblR5cGUgdHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0TG9jYWxGdW5jdGlvblR5cGUoY2xvc3VyZSk7CiAgICAgICAgICBpZiAodHlwZS5jb250YWluc1R5cGVWYXJpYWJsZXMgfHwKICAgICAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDYW4gd2UgYXZvaWQgdGhlIG5lZWQgZm9yIHNpZ25hdHVyZXMgaW4KICAgICAgICAgICAgICAvLyBEYXJ0IDI/CiAgICAgICAgICAgICAgdHJ1ZSkgewogICAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5jb21wdXRlU2lnbmF0dXJlKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgIH0KICAgIH0KCiAgICBmb3IgKENvbnN0YW50RXhwcmVzc2lvbiBjb25zdGFudCBpbiB3b3JsZEltcGFjdC5jb25zdGFudExpdGVyYWxzKSB7CiAgICAgIHN3aXRjaCAoY29uc3RhbnQua2luZCkgewogICAgICAgIGNhc2UgQ29uc3RhbnRFeHByZXNzaW9uS2luZC5OVUxMOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMubnVsbExpdGVyYWwpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBDb25zdGFudEV4cHJlc3Npb25LaW5kLkJPT0w6CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5ib29sTGl0ZXJhbCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIENvbnN0YW50RXhwcmVzc2lvbktpbmQuSU5UOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuaW50TGl0ZXJhbCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIENvbnN0YW50RXhwcmVzc2lvbktpbmQuRE9VQkxFOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuZG91YmxlTGl0ZXJhbCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIENvbnN0YW50RXhwcmVzc2lvbktpbmQuU1RSSU5HOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuc3RyaW5nTGl0ZXJhbCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgYXNzZXJ0KAogICAgICAgICAgICAgIGZhbHNlLAogICAgICAgICAgICAgIGZhaWxlZEF0KE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwKICAgICAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgY29uc3RhbnQgbGl0ZXJhbDogJHtjb25zdGFudC5raW5kfS4iKSk7CiAgICAgIH0KICAgIH0KCiAgICBmb3IgKE5hdGl2ZUJlaGF2aW9yIGJlaGF2aW9yIGluIHdvcmxkSW1wYWN0Lm5hdGl2ZURhdGEpIHsKICAgICAgX25hdGl2ZVJlc29sdXRpb25FbnF1ZXVlci5yZWdpc3Rlck5hdGl2ZUJlaGF2aW9yKAogICAgICAgICAgdHJhbnNmb3JtZWQsIGJlaGF2aW9yLCB3b3JsZEltcGFjdCk7CiAgICB9CgogICAgZm9yIChDbGFzc0VudGl0eSBjbGFzc0VudGl0eSBpbiB3b3JsZEltcGFjdC5zZWVuQ2xhc3NlcykgewogICAgICBfY2xhc3NIaWVyYXJjaHlCdWlsZGVyLnJlZ2lzdGVyQ2xhc3MoY2xhc3NFbnRpdHkpOwogICAgfQoKICAgIGlmICh3b3JsZEltcGFjdC5nZW5lcmljSW5zdGFudGlhdGlvbnMuaXNOb3RFbXB0eSkgewogICAgICBmb3IgKEdlbmVyaWNJbnN0YW50aWF0aW9uIGluc3RhbnRpYXRpb24KICAgICAgICAgIGluIHdvcmxkSW1wYWN0LmdlbmVyaWNJbnN0YW50aWF0aW9ucykgewogICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzCiAgICAgICAgICAgIC5nZXRHZW5lcmljSW5zdGFudGlhdGlvbihpbnN0YW50aWF0aW9uLnR5cGVBcmd1bWVudHMubGVuZ3RoKSk7CiAgICAgICAgX3J0aU5lZWRCdWlsZGVyLnJlZ2lzdGVyR2VuZXJpY0luc3RhbnRpYXRpb24oaW5zdGFudGlhdGlvbik7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gdHJhbnNmb3JtZWQ7CiAgfQoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNYXliZSBzcGxpdCB0aGlzIGludG8gW29uQXNzZXJ0VHlwZV0gYW5kIFtvblRlc3RUeXBlXS4KICB2b2lkIG9uSXNDaGVjayhEYXJ0VHlwZSB0eXBlLCBUcmFuc2Zvcm1lZFdvcmxkSW1wYWN0IHRyYW5zZm9ybWVkKSB7CiAgICB2b2lkIHJlZ2lzdGVySW1wYWN0KEJhY2tlbmRJbXBhY3QgaW1wYWN0KSB7CiAgICAgIGltcGFjdC5yZWdpc3RlckltcGFjdCh0cmFuc2Zvcm1lZCwgX2VsZW1lbnRFbnZpcm9ubWVudCk7CiAgICAgIF9iYWNrZW5kVXNhZ2VCdWlsZGVyLnByb2Nlc3NCYWNrZW5kSW1wYWN0KGltcGFjdCk7CiAgICB9CgogICAgdHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0VW5hbGlhc2VkVHlwZSh0eXBlKTsKICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLnR5cGVDaGVjayk7CgogICAgaWYgKCF0eXBlLnRyZWF0QXNSYXcgfHwgdHlwZS5jb250YWluc1R5cGVWYXJpYWJsZXMgfHwgdHlwZS5pc0Z1bmN0aW9uVHlwZSkgewogICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5nZW5lcmljVHlwZUNoZWNrKTsKICAgICAgaWYgKHR5cGUuaXNUeXBlVmFyaWFibGUpIHsKICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy50eXBlVmFyaWFibGVUeXBlQ2hlY2spOwogICAgICB9CiAgICB9CiAgICBpZiAodHlwZSBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuZnVuY3Rpb25UeXBlQ2hlY2spOwogICAgfQogICAgaWYgKHR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJiBfbmF0aXZlQmFzaWNEYXRhLmlzTmF0aXZlQ2xhc3ModHlwZS5lbGVtZW50KSkgewogICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5uYXRpdmVUeXBlQ2hlY2spOwogICAgfQogICAgaWYgKHR5cGUgaXMgRnV0dXJlT3JUeXBlKSB7CiAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLmZ1dHVyZU9yVHlwZUNoZWNrKTsKICAgIH0KICB9Cn0KCmNsYXNzIENvZGVnZW5JbXBhY3RUcmFuc2Zvcm1lciB7CiAgZmluYWwgSkNsb3NlZFdvcmxkIF9jbG9zZWRXb3JsZDsKICBmaW5hbCBFbGVtZW50RW52aXJvbm1lbnQgX2VsZW1lbnRFbnZpcm9ubWVudDsKICBmaW5hbCBDb21tb25FbGVtZW50cyBfY29tbW9uRWxlbWVudHM7CiAgZmluYWwgQmFja2VuZEltcGFjdHMgX2ltcGFjdHM7CiAgZmluYWwgTmF0aXZlRGF0YSBfbmF0aXZlRGF0YTsKICBmaW5hbCBCYWNrZW5kVXNhZ2UgX2JhY2tlbmRVc2FnZTsKICBmaW5hbCBSdW50aW1lVHlwZXNOZWVkIF9ydGlOZWVkOwogIGZpbmFsIE5hdGl2ZUNvZGVnZW5FbnF1ZXVlciBfbmF0aXZlQ29kZWdlbkVucXVldWVyOwogIGZpbmFsIE5hbWVyIF9uYW1lcjsKICBmaW5hbCBPbmVTaG90SW50ZXJjZXB0b3JEYXRhIF9vbmVTaG90SW50ZXJjZXB0b3JEYXRhOwogIGZpbmFsIFJ1bnRpbWVUeXBlc0NoZWNrc0J1aWxkZXIgX3J0aUNoZWNrc0J1aWxkZXI7CiAgZmluYWwgTmF0aXZlRW1pdHRlciBfbmF0aXZlRW1pdHRlcjsKCiAgQ29kZWdlbkltcGFjdFRyYW5zZm9ybWVyKAogICAgICB0aGlzLl9jbG9zZWRXb3JsZCwKICAgICAgdGhpcy5fZWxlbWVudEVudmlyb25tZW50LAogICAgICB0aGlzLl9jb21tb25FbGVtZW50cywKICAgICAgdGhpcy5faW1wYWN0cywKICAgICAgdGhpcy5fbmF0aXZlRGF0YSwKICAgICAgdGhpcy5fYmFja2VuZFVzYWdlLAogICAgICB0aGlzLl9ydGlOZWVkLAogICAgICB0aGlzLl9uYXRpdmVDb2RlZ2VuRW5xdWV1ZXIsCiAgICAgIHRoaXMuX25hbWVyLAogICAgICB0aGlzLl9vbmVTaG90SW50ZXJjZXB0b3JEYXRhLAogICAgICB0aGlzLl9ydGlDaGVja3NCdWlsZGVyLAogICAgICB0aGlzLl9uYXRpdmVFbWl0dGVyKTsKCiAgdm9pZCBvbklzQ2hlY2tGb3JDb2RlZ2VuKERhcnRUeXBlIHR5cGUsIFRyYW5zZm9ybWVkV29ybGRJbXBhY3QgdHJhbnNmb3JtZWQpIHsKICAgIGlmICh0eXBlLmlzRHluYW1pYykgcmV0dXJuOwogICAgaWYgKHR5cGUuaXNWb2lkKSByZXR1cm47CiAgICB0eXBlID0gdHlwZS51bmFsaWFzZWQ7CiAgICBfaW1wYWN0cy50eXBlQ2hlY2sucmVnaXN0ZXJJbXBhY3QodHJhbnNmb3JtZWQsIF9lbGVtZW50RW52aXJvbm1lbnQpOwoKICAgIGlmICghdHlwZS50cmVhdEFzUmF3IHx8IHR5cGUuY29udGFpbnNUeXBlVmFyaWFibGVzKSB7CiAgICAgIF9pbXBhY3RzLmdlbmVyaWNJc0NoZWNrLnJlZ2lzdGVySW1wYWN0KHRyYW5zZm9ybWVkLCBfZWxlbWVudEVudmlyb25tZW50KTsKICAgIH0KICAgIGlmICh0eXBlIGlzIEludGVyZmFjZVR5cGUgJiYgX25hdGl2ZURhdGEuaXNOYXRpdmVDbGFzcyh0eXBlLmVsZW1lbnQpKSB7CiAgICAgIC8vIFdlIHdpbGwgbmVlZWQgdG8gYWRkIHRoZSAiJGlzIiBhbmQgIiRhcyIgcHJvcGVydGllcyBvbiB0aGUKICAgICAgLy8gSmF2YVNjcmlwdCBvYmplY3QgcHJvdG90eXBlLCBzbyB3ZSBtYWtlIHN1cmUKICAgICAgLy8gWzpkZWZpbmVQcm9wZXJ0eTpdIGlzIGNvbXBpbGVkLgogICAgICBfaW1wYWN0cy5uYXRpdmVUeXBlQ2hlY2sucmVnaXN0ZXJJbXBhY3QodHJhbnNmb3JtZWQsIF9lbGVtZW50RW52aXJvbm1lbnQpOwogICAgfQogIH0KCiAgV29ybGRJbXBhY3QgdHJhbnNmb3JtQ29kZWdlbkltcGFjdChDb2RlZ2VuSW1wYWN0IGltcGFjdCkgewogICAgVHJhbnNmb3JtZWRXb3JsZEltcGFjdCB0cmFuc2Zvcm1lZCA9IG5ldyBUcmFuc2Zvcm1lZFdvcmxkSW1wYWN0KGltcGFjdCk7CgogICAgZm9yIChUeXBlVXNlIHR5cGVVc2UgaW4gaW1wYWN0LnR5cGVVc2VzKSB7CiAgICAgIERhcnRUeXBlIHR5cGUgPSB0eXBlVXNlLnR5cGU7CiAgICAgIGlmICh0eXBlVXNlLmtpbmQgPT0gVHlwZVVzZUtpbmQuSVNfQ0hFQ0spIHsKICAgICAgICBvbklzQ2hlY2tGb3JDb2RlZ2VuKHR5cGUsIHRyYW5zZm9ybWVkKTsKICAgICAgfQogICAgfQoKICAgIGZvciAoQ29uc3RhbnRVc2UgY29uc3RhbnRVc2UgaW4gaW1wYWN0LmNvbnN0YW50VXNlcykgewogICAgICBzd2l0Y2ggKGNvbnN0YW50VXNlLnZhbHVlLmtpbmQpIHsKICAgICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLkRFRkVSUkVEX0dMT0JBTDoKICAgICAgICAgIF9jbG9zZWRXb3JsZC5vdXRwdXRVbml0RGF0YQogICAgICAgICAgICAgIC5yZWdpc3RlckNvbnN0YW50RGVmZXJyZWRVc2UoY29uc3RhbnRVc2UudmFsdWUpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CgogICAgZm9yIChQYWlyPERhcnRUeXBlLCBEYXJ0VHlwZT4gY2hlY2sKICAgICAgICBpbiBpbXBhY3QudHlwZVZhcmlhYmxlQm91bmRzU3VidHlwZUNoZWNrcykgewogICAgICBfcnRpQ2hlY2tzQnVpbGRlci5yZWdpc3RlclR5cGVWYXJpYWJsZUJvdW5kc1N1YnR5cGVDaGVjaygKICAgICAgICAgIGNoZWNrLmEsIGNoZWNrLmIpOwogICAgfQoKICAgIGZvciAoU3RhdGljVXNlIHN0YXRpY1VzZSBpbiBpbXBhY3Quc3RhdGljVXNlcykgewogICAgICBzd2l0Y2ggKHN0YXRpY1VzZS5raW5kKSB7CiAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNBTExfTUVUSE9EOgogICAgICAgICAgRnVuY3Rpb25FbnRpdHkgY2FsbE1ldGhvZCA9IHN0YXRpY1VzZS5lbGVtZW50OwogICAgICAgICAgaWYgKF9ydGlOZWVkLm1ldGhvZE5lZWRzU2lnbmF0dXJlKGNhbGxNZXRob2QpKSB7CiAgICAgICAgICAgIF9pbXBhY3RzLmNvbXB1dGVTaWduYXR1cmUKICAgICAgICAgICAgICAgIC5yZWdpc3RlckltcGFjdCh0cmFuc2Zvcm1lZCwgX2VsZW1lbnRFbnZpcm9ubWVudCk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1RBVElDX1RFQVJfT0ZGOgogICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5JTlNUQU5DRV9GSUVMRF9HRVQ6CiAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLklOU1RBTkNFX0ZJRUxEX1NFVDoKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1VQRVJfSU5WT0tFOgogICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVEFUSUNfSU5WT0tFOgogICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVVBFUl9GSUVMRF9TRVQ6CiAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLlNVUEVSX1NFVFRFUl9TRVQ6CiAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLlNUQVRJQ19TRVQ6CiAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLlNVUEVSX1RFQVJfT0ZGOgogICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVVBFUl9HRVQ6CiAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLlNUQVRJQ19HRVQ6CiAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkZJRUxEX0lOSVQ6CiAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkZJRUxEX0NPTlNUQU5UX0lOSVQ6CiAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNPTlNUUlVDVE9SX0lOVk9LRToKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuQ09OU1RfQ09OU1RSVUNUT1JfSU5WT0tFOgogICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5ESVJFQ1RfSU5WT0tFOgogICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5JTkxJTklORzoKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuQ0xPU1VSRToKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuQ0xPU1VSRV9DQUxMOgogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICBmb3IgKFNldDxDbGFzc0VudGl0eT4gY2xhc3NlcyBpbiBpbXBhY3Quc3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcnMpIHsKICAgICAgX29uZVNob3RJbnRlcmNlcHRvckRhdGEucmVnaXN0ZXJTcGVjaWFsaXplZEdldEludGVyY2VwdG9yKAogICAgICAgICAgY2xhc3NlcywgX25hbWVyKTsKICAgIH0KCiAgICBpZiAoaW1wYWN0LnVzZXNJbnRlcmNlcHRvcikgewogICAgICBpZiAoX25hdGl2ZUNvZGVnZW5FbnF1ZXVlci5oYXNJbnN0YW50aWF0ZWROYXRpdmVDbGFzc2VzKSB7CiAgICAgICAgX2ltcGFjdHMuaW50ZXJjZXB0b3JVc2UKICAgICAgICAgICAgLnJlZ2lzdGVySW1wYWN0KHRyYW5zZm9ybWVkLCBfZWxlbWVudEVudmlyb25tZW50KTsKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBdm9pZCB0aGVzZSB3b3JrYXJvdW5kcy4KICAgICAgICBfYmFja2VuZFVzYWdlLm5lZWRUb0luaXRpYWxpemVJc29sYXRlQWZmaW5pdHlUYWcgPSB0cnVlOwogICAgICAgIF9iYWNrZW5kVXNhZ2UubmVlZFRvSW5pdGlhbGl6ZURpc3BhdGNoUHJvcGVydHkgPSB0cnVlOwogICAgICB9CiAgICB9CgogICAgZm9yIChBc3luY01hcmtlciBhc3luY01hcmtlciBpbiBpbXBhY3QuYXN5bmNNYXJrZXJzKSB7CiAgICAgIHN3aXRjaCAoYXN5bmNNYXJrZXIpIHsKICAgICAgICBjYXNlIEFzeW5jTWFya2VyLkFTWU5DOgogICAgICAgICAgX2ltcGFjdHMuYXN5bmNCb2R5LnJlZ2lzdGVySW1wYWN0KHRyYW5zZm9ybWVkLCBfZWxlbWVudEVudmlyb25tZW50KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQXN5bmNNYXJrZXIuU1lOQ19TVEFSOgogICAgICAgICAgX2ltcGFjdHMuc3luY1N0YXJCb2R5CiAgICAgICAgICAgICAgLnJlZ2lzdGVySW1wYWN0KHRyYW5zZm9ybWVkLCBfZWxlbWVudEVudmlyb25tZW50KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQXN5bmNNYXJrZXIuQVNZTkNfU1RBUjoKICAgICAgICAgIF9pbXBhY3RzLmFzeW5jU3RhckJvZHkKICAgICAgICAgICAgICAucmVnaXN0ZXJJbXBhY3QodHJhbnNmb3JtZWQsIF9lbGVtZW50RW52aXJvbm1lbnQpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICBmb3IgKEdlbmVyaWNJbnN0YW50aWF0aW9uIGluc3RhbnRpYXRpb24gaW4gaW1wYWN0LmdlbmVyaWNJbnN0YW50aWF0aW9ucykgewogICAgICBfcnRpQ2hlY2tzQnVpbGRlci5yZWdpc3RlckdlbmVyaWNJbnN0YW50aWF0aW9uKGluc3RhbnRpYXRpb24pOwogICAgfQoKICAgIGZvciAoTmF0aXZlQmVoYXZpb3IgYmVoYXZpb3IgaW4gaW1wYWN0Lm5hdGl2ZUJlaGF2aW9ycykgewogICAgICBfbmF0aXZlQ29kZWdlbkVucXVldWVyLnJlZ2lzdGVyTmF0aXZlQmVoYXZpb3IoCiAgICAgICAgICB0cmFuc2Zvcm1lZCwgYmVoYXZpb3IsIGltcGFjdCk7CiAgICB9CgogICAgZm9yIChGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiBpbiBpbXBhY3QubmF0aXZlTWV0aG9kcykgewogICAgICBfbmF0aXZlRW1pdHRlci5uYXRpdmVNZXRob2RzLmFkZChmdW5jdGlvbik7CiAgICB9CgogICAgZm9yIChTZWxlY3RvciBzZWxlY3RvciBpbiBpbXBhY3Qub25lU2hvdEludGVyY2VwdG9ycykgewogICAgICBfb25lU2hvdEludGVyY2VwdG9yRGF0YS5yZWdpc3Rlck9uZVNob3RJbnRlcmNlcHRvcigKICAgICAgICAgIHNlbGVjdG9yLCBfbmFtZXIsIF9jbG9zZWRXb3JsZCk7CiAgICB9CgogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIGVhZ2VyIHJlZ2lzdHJhdGlvbi4KICAgIHJldHVybiB0cmFuc2Zvcm1lZDsKICB9Cn0Kgf8ATk48AS8BRgEZIjw0OjooIyQhLCEiIyQfURwYGx4dKCAVGx0oAT4wKCEqPDJMMTYqAR8gHBUdJiEuHCMeAQxIKTEBMD85BgE0GTM/ER05ESo2ERwuESMvESEyESYzESk1ETAwJ0QwESEuESs2ESs4ESs4ESs2ESk2ESIuESAxESc0ESs2ESo2ES46ETE7ESMwEQgGARwhNCQeKC4vESMoESIfPhwqHgwRKB9CHCoMESofOxwqDBElKBEnRyUySzIeSzweTDNNJA49DCERJCg2UREIBgEVKAYBGhJRLAYBQ0YvJjUPFE0IBgFDJjUPFE0IBgFGTzcSTAYBSURITxtDBgEzLAYBOiAkLC1RLE4ZFjcMEREIBgFIHyowESowESkvESwyESwyERESFS5GCAYBPjgvBgE/OQYBOC4yIEtFCAYBGAQBUUYwPzkGATcoAVExITgIBiAyBlEwBiAyBgQCASEjMCghICQjNhY4NSYBHBkgHBUYGhUjEyQeHAFQIB0bSQE6UAZMRDYpUQYEAT1NAS8kMjAIBgE7KDAmPxEREQgGASg1QB0GATUgKDk7JkMMESwvLykqLC0nKyYnJzAvNSolJCkRCAYBSkEcBgEiQSA/OUE/CAYBOx0gTxEkIEERJSFBEQgGAU9FBgE+NSoGATwyBgE8OisGATcYBAIBN3BhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvaW1wYWN0X3RyYW5zZm9ybWVyLmRhcnQ+c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfYmFja2VuZC9pbnRlcmNlcHRvcl9kYXRhLmRhcnS/Li8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGpzX2JhY2tlbmQuaW50ZXJjZXB0b3JfZGF0YTsKCmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnIHNob3cgSWRlbnRpZmllcnM7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnCiAgICBzaG93IENvbW1vbkVsZW1lbnRzLCBLQ29tbW9uRWxlbWVudHMsIEtFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIGFzIGpzQXN0OwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jbGFzc19zZXQuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCc7CmltcG9ydCAnLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CmltcG9ydCAnbmFtZXIuZGFydCcgc2hvdyBNb2R1bGFyTmFtZXIsIHN1ZmZpeEZvckdldEludGVyY2VwdG9yOwppbXBvcnQgJ25hdGl2ZV9kYXRhLmRhcnQnOwoKYWJzdHJhY3QgY2xhc3MgSW50ZXJjZXB0b3JEYXRhIHsKICAvLy8gRGVzZXJpYWxpemVzIGEgW0ludGVyY2VwdG9yRGF0YV0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBJbnRlcmNlcHRvckRhdGEucmVhZEZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwKICAgICAgTmF0aXZlRGF0YSBuYXRpdmVEYXRhLAogICAgICBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgPSBJbnRlcmNlcHRvckRhdGFJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZTsKCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbSW50ZXJjZXB0b3JEYXRhXSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luayk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbY2xzXSBpcyBhbiBpbnRlcmNlcHRlZCBjbGFzcy4KICBib29sIGlzSW50ZXJjZXB0ZWRDbGFzcyhDbGFzc0VudGl0eSBlbGVtZW50KTsKCiAgYm9vbCBpc0ludGVyY2VwdGVkTWV0aG9kKE1lbWJlckVudGl0eSBlbGVtZW50KTsKICBib29sIGZpZWxkSGFzSW50ZXJjZXB0ZWRHZXR0ZXIoRmllbGRFbnRpdHkgZWxlbWVudCk7CiAgYm9vbCBmaWVsZEhhc0ludGVyY2VwdGVkU2V0dGVyKEZpZWxkRW50aXR5IGVsZW1lbnQpOwogIGJvb2wgaXNJbnRlcmNlcHRlZE5hbWUoU3RyaW5nIG5hbWUpOwogIGJvb2wgaXNJbnRlcmNlcHRlZFNlbGVjdG9yKFNlbGVjdG9yIHNlbGVjdG9yKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmZiBbc2VsZWN0b3JdIG1hdGNoZXMgYW4gZWxlbWVudCBkZWZpbmVkIGluIGEgY2xhc3MgbWl4ZWQKICAvLy8gaW50byBhbiBpbnRlcmNlcHRlZCBjbGFzcy4KICAvLy8KICAvLy8gVGhlc2Ugc2VsZWN0b3JzIGFyZSBub3QgZWxpZ2libGUgZm9yIHRoZSAnZHVtbXkgZXhwbGljaXQgcmVjZWl2ZXInCiAgLy8vIG9wdGltaXphdGlvbi4KICBib29sIGlzSW50ZXJjZXB0ZWRNaXhpblNlbGVjdG9yKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSBtYXNrLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpOwoKICAvLy8gU2V0IG9mIGNsYXNzZXMgd2hvc2UgbWV0aG9kcyBhcmUgaW50ZXJjZXB0ZWQuCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBpbnRlcmNlcHRlZENsYXNzZXM7CiAgYm9vbCBpc01peGVkSW50b0ludGVyY2VwdGVkQ2xhc3MoQ2xhc3NFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIGEgc2V0IG9mIGludGVyY2VwdG9yIGNsYXNzZXMgdGhhdCBjb250YWluIGEgbWVtYmVyIG5hbWVkIFtuYW1lXQogIC8vLwogIC8vLyBSZXR1cm5zIGFuIGVtcHR5IHNldCBpZiB0aGVyZSBpcyBubyBjbGFzcy4gRG8gbm90IG1vZGlmeSB0aGUgcmV0dXJuZWQgc2V0LgogIFNldDxDbGFzc0VudGl0eT4gZ2V0SW50ZXJjZXB0ZWRDbGFzc2VzT24oCiAgICAgIFN0cmluZyBuYW1lLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpOwoKICAvLy8gV2hldGhlciB0aGUgY29tcGlsZXIgY2FuIHVzZSB0aGUgbmF0aXZlIGBpbnN0YW5jZW9mYCBjaGVjayB0byB0ZXN0IGZvcgogIC8vLyBpbnN0YW5jZXMgb2YgW3R5cGVdLiBUaGlzIGlzIHRydWUgZm9yIHR5cGVzIHRoYXQgYXJlIG5vdCB1c2VkIGFzIG1peGlucyBvcgogIC8vLyBpbnRlcmZhY2VzLgogIGJvb2wgbWF5R2VuZXJhdGVJbnN0YW5jZW9mQ2hlY2soRGFydFR5cGUgdHlwZSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKTsKfQoKYWJzdHJhY3QgY2xhc3MgSW50ZXJjZXB0b3JEYXRhQnVpbGRlciB7CiAgdm9pZCBhZGRJbnRlcmNlcHRvcnMoQ2xhc3NFbnRpdHkgY2xzKTsKICB2b2lkIGFkZEludGVyY2VwdG9yc0Zvck5hdGl2ZUNsYXNzTWVtYmVycyhDbGFzc0VudGl0eSBjbHMpOwogIEludGVyY2VwdG9yRGF0YSBjbG9zZSgpOwp9CgpjbGFzcyBJbnRlcmNlcHRvckRhdGFJbXBsIGltcGxlbWVudHMgSW50ZXJjZXB0b3JEYXRhIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0ludGVyY2VwdG9yRGF0YV0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdpbnRlcmNlcHRvci1kYXRhJzsKCiAgZmluYWwgTmF0aXZlQmFzaWNEYXRhIF9uYXRpdmVEYXRhOwogIGZpbmFsIENvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKCiAgLy8vIFRoZSBtZW1iZXJzIG9mIGluc3RhbnRpYXRlZCBpbnRlcmNlcHRvciBjbGFzc2VzOiBtYXBzIGEgbWVtYmVyIG5hbWUgdG8gdGhlCiAgLy8vIGxpc3Qgb2YgbWVtYmVycyB0aGF0IGhhdmUgdGhhdCBuYW1lLiBUaGlzIG1hcCBpcyB1c2VkIGJ5IHRoZSBjb2RlZ2VuIHRvCiAgLy8vIGtub3cgd2hldGhlciBhIHNlbmQgbXVzdCBiZSBpbnRlcmNlcHRlZCBvciBub3QuCiAgZmluYWwgTWFwPFN0cmluZywgU2V0PE1lbWJlckVudGl0eT4+IGludGVyY2VwdGVkTWVtYmVyczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBpbnRlcmNlcHRlZENsYXNzZXM7CgogIC8vLyBTZXQgb2YgY2xhc3NlcyB1c2VkIGFzIG1peGlucyBvbiBpbnRlcmNlcHRlZCAobmF0aXZlIGFuZCBwcmltaXRpdmUpCiAgLy8vIGNsYXNzZXMuIE1ldGhvZHMgb24gdGhlc2UgY2xhc3NlcyBtaWdodCBhbHNvIGJlIG1peGVkIGluIHRvIHJlZ3VsYXIgRGFydAogIC8vLyAodW5pbnRlcmNlcHRlZCkgY2xhc3Nlcy4KICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXNNaXhlZEludG9JbnRlcmNlcHRlZENsYXNzZXM7CgogIC8vLyBUaGUgbWVtYmVycyBvZiBtaXhpbiBjbGFzc2VzIHRoYXQgYXJlIG1peGVkIGludG8gYW4gaW5zdGFudGlhdGVkCiAgLy8vIGludGVyY2VwdG9yIGNsYXNzLiAgVGhpcyBpcyBhIGNhY2hlZCBzdWJzZXQgb2YgW19pbnRlcmNlcHRlZEVsZW1lbnRzXS4KICAvLy8KICAvLy8gTWl4aW4gbWV0aG9kcyBhcmUgbm90IHNwZWNpYWxpemVkIGZvciB0aGUgY2xhc3MgdGhleSBhcmUgbWl4ZWQgaW50by4KICAvLy8gTWV0aG9kcyBtaXhlZCBpbnRvIGludGVyY2VwdGVkIGNsYXNzZXMgdGh1cyBhbHdheXMgbWFrZSB1c2Ugb2YgdGhlCiAgLy8vIGV4cGxpY2l0IHJlY2VpdmVyIGFyZ3VtZW50LCBldmVuIHdoZW4gbWl4ZWQgaW50byBub24taW50ZXJjZXB0b3IgY2xhc3Nlcy4KICAvLy8KICAvLy8gVGhlc2UgbWVtYmVycyBtdXN0IGJlIGludm9rZWQgd2l0aCBhIGNvcnJlY3QgZXhwbGljaXQgcmVjZWl2ZXIgZXZlbiB3aGVuCiAgLy8vIHRoZSByZWNlaXZlciBpcyBub3QgYW4gaW50ZXJjZXB0ZWQgY2xhc3MuCiAgZmluYWwgTWFwPFN0cmluZywgU2V0PE1lbWJlckVudGl0eT4+IF9pbnRlcmNlcHRlZE1peGluRWxlbWVudHMgPQogICAgICBuZXcgTWFwPFN0cmluZywgU2V0PE1lbWJlckVudGl0eT4+KCk7CgogIGZpbmFsIE1hcDxTdHJpbmcsIFNldDxDbGFzc0VudGl0eT4+IF9pbnRlcmNlcHRlZENsYXNzZXNDYWNoZSA9CiAgICAgIG5ldyBNYXA8U3RyaW5nLCBTZXQ8Q2xhc3NFbnRpdHk+PigpOwoKICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IF9ub0NsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICBJbnRlcmNlcHRvckRhdGFJbXBsKAogICAgICB0aGlzLl9uYXRpdmVEYXRhLAogICAgICB0aGlzLl9jb21tb25FbGVtZW50cywKICAgICAgdGhpcy5pbnRlcmNlcHRlZE1lbWJlcnMsCiAgICAgIHRoaXMuaW50ZXJjZXB0ZWRDbGFzc2VzLAogICAgICB0aGlzLmNsYXNzZXNNaXhlZEludG9JbnRlcmNlcHRlZENsYXNzZXMpOwoKICBmYWN0b3J5IEludGVyY2VwdG9yRGF0YUltcGwucmVhZEZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgTmF0aXZlRGF0YSBuYXRpdmVEYXRhLCBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpbnQgaW50ZXJjZXB0ZWRNZW1iZXJzQ291bnQgPSBzb3VyY2UucmVhZEludCgpOwogICAgTWFwPFN0cmluZywgU2V0PE1lbWJlckVudGl0eT4+IGludGVyY2VwdGVkTWVtYmVycyA9IHt9OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRlcmNlcHRlZE1lbWJlcnNDb3VudDsgaSsrKSB7CiAgICAgIFN0cmluZyBuYW1lID0gc291cmNlLnJlYWRTdHJpbmcoKTsKICAgICAgU2V0PE1lbWJlckVudGl0eT4gbWVtYmVycyA9IHNvdXJjZS5yZWFkTWVtYmVycygpLnRvU2V0KCk7CiAgICAgIGludGVyY2VwdGVkTWVtYmVyc1tuYW1lXSA9IG1lbWJlcnM7CiAgICB9CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGludGVyY2VwdGVkQ2xhc3NlcyA9IHNvdXJjZS5yZWFkQ2xhc3NlcygpLnRvU2V0KCk7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXNNaXhlZEludG9JbnRlcmNlcHRlZENsYXNzZXMgPQogICAgICAgIHNvdXJjZS5yZWFkQ2xhc3NlcygpLnRvU2V0KCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEludGVyY2VwdG9yRGF0YUltcGwoCiAgICAgICAgbmF0aXZlRGF0YSwKICAgICAgICBjb21tb25FbGVtZW50cywKICAgICAgICBpbnRlcmNlcHRlZE1lbWJlcnMsCiAgICAgICAgaW50ZXJjZXB0ZWRDbGFzc2VzLAogICAgICAgIGNsYXNzZXNNaXhlZEludG9JbnRlcmNlcHRlZENsYXNzZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUludChpbnRlcmNlcHRlZE1lbWJlcnMubGVuZ3RoKTsKICAgIGludGVyY2VwdGVkTWVtYmVycy5mb3JFYWNoKChTdHJpbmcgbmFtZSwgU2V0PE1lbWJlckVudGl0eT4gbWVtYmVycykgewogICAgICBzaW5rLndyaXRlU3RyaW5nKG5hbWUpOwogICAgICBzaW5rLndyaXRlTWVtYmVycyhtZW1iZXJzKTsKICAgIH0pOwogICAgc2luay53cml0ZUNsYXNzZXMoaW50ZXJjZXB0ZWRDbGFzc2VzKTsKICAgIHNpbmsud3JpdGVDbGFzc2VzKGNsYXNzZXNNaXhlZEludG9JbnRlcmNlcHRlZENsYXNzZXMpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbnRlcmNlcHRlZE1ldGhvZChNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgaWYgKCFlbGVtZW50LmlzSW5zdGFuY2VNZW1iZXIpIHJldHVybiBmYWxzZTsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEF2b2lkIHRoaXMgaGFjay4KICAgIGlmIChlbGVtZW50IGlzIENvbnN0cnVjdG9yQm9keUVudGl0eSkgewogICAgICByZXR1cm4gX25hdGl2ZURhdGEuaXNOYXRpdmVPckV4dGVuZHNOYXRpdmUoZWxlbWVudC5lbmNsb3NpbmdDbGFzcyk7CiAgICB9CiAgICByZXR1cm4gaW50ZXJjZXB0ZWRNZW1iZXJzW2VsZW1lbnQubmFtZV0gIT0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZmllbGRIYXNJbnRlcmNlcHRlZEdldHRlcihGaWVsZEVudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gaW50ZXJjZXB0ZWRNZW1iZXJzW2VsZW1lbnQubmFtZV0gIT0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZmllbGRIYXNJbnRlcmNlcHRlZFNldHRlcihGaWVsZEVudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gaW50ZXJjZXB0ZWRNZW1iZXJzW2VsZW1lbnQubmFtZV0gIT0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbnRlcmNlcHRlZE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgIHJldHVybiBpbnRlcmNlcHRlZE1lbWJlcnNbbmFtZV0gIT0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbnRlcmNlcHRlZFNlbGVjdG9yKFNlbGVjdG9yIHNlbGVjdG9yKSB7CiAgICByZXR1cm4gaW50ZXJjZXB0ZWRNZW1iZXJzW3NlbGVjdG9yLm5hbWVdICE9IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSW50ZXJjZXB0ZWRNaXhpblNlbGVjdG9yKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSBtYXNrLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIFNldDxNZW1iZXJFbnRpdHk+IGVsZW1lbnRzID0KICAgICAgICBfaW50ZXJjZXB0ZWRNaXhpbkVsZW1lbnRzLnB1dElmQWJzZW50KHNlbGVjdG9yLm5hbWUsICgpIHsKICAgICAgU2V0PE1lbWJlckVudGl0eT4gZWxlbWVudHMgPSBpbnRlcmNlcHRlZE1lbWJlcnNbc2VsZWN0b3IubmFtZV07CiAgICAgIGlmIChlbGVtZW50cyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuIGVsZW1lbnRzCiAgICAgICAgICAud2hlcmUoKGVsZW1lbnQpID0+IGNsYXNzZXNNaXhlZEludG9JbnRlcmNlcHRlZENsYXNzZXMKICAgICAgICAgICAgICAuY29udGFpbnMoZWxlbWVudC5lbmNsb3NpbmdDbGFzcykpCiAgICAgICAgICAudG9TZXQoKTsKICAgIH0pOwoKICAgIGlmIChlbGVtZW50cyA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoZWxlbWVudHMuaXNFbXB0eSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIGVsZW1lbnRzLmFueSgoZWxlbWVudCkgewogICAgICByZXR1cm4gc2VsZWN0b3IuYXBwbGllcyhlbGVtZW50KSAmJgogICAgICAgICAgKG1hc2sgPT0gbnVsbCB8fAogICAgICAgICAgICAgIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAgICAgICAgICAgLmlzVGFyZ2V0aW5nTWVtYmVyKG1hc2ssIGVsZW1lbnQsIHNlbGVjdG9yLm1lbWJlck5hbWUpCiAgICAgICAgICAgICAgICAgIC5pc1BvdGVudGlhbGx5VHJ1ZSk7CiAgICB9KTsKICB9CgogIC8vLyBUcnVlIGlmIHRoZSBnaXZlbiBjbGFzcyBpcyBhbiBpbnRlcm5hbCBjbGFzcyB1c2VkIGZvciB0eXBlIGluZmVyZW5jZQogIC8vLyBhbmQgbmV2ZXIgZXhpc3RzIGF0IHJ1bnRpbWUuCiAgYm9vbCBfaXNDb21waWxlVGltZU9ubHlDbGFzcyhDbGFzc0VudGl0eSBjbGFzc18pIHsKICAgIHJldHVybiBjbGFzc18gPT0gX2NvbW1vbkVsZW1lbnRzLmpzUG9zaXRpdmVJbnRDbGFzcyB8fAogICAgICAgIGNsYXNzXyA9PSBfY29tbW9uRWxlbWVudHMuanNVSW50MzJDbGFzcyB8fAogICAgICAgIGNsYXNzXyA9PSBfY29tbW9uRWxlbWVudHMuanNVSW50MzFDbGFzcyB8fAogICAgICAgIGNsYXNzXyA9PSBfY29tbW9uRWxlbWVudHMuanNGaXhlZEFycmF5Q2xhc3MgfHwKICAgICAgICBjbGFzc18gPT0gX2NvbW1vbkVsZW1lbnRzLmpzVW5tb2RpZmlhYmxlQXJyYXlDbGFzcyB8fAogICAgICAgIGNsYXNzXyA9PSBfY29tbW9uRWxlbWVudHMuanNNdXRhYmxlQXJyYXlDbGFzcyB8fAogICAgICAgIGNsYXNzXyA9PSBfY29tbW9uRWxlbWVudHMuanNFeHRlbmRhYmxlQXJyYXlDbGFzczsKICB9CgogIC8vLyBSZXR1cm5zIGEgc2V0IG9mIGludGVyY2VwdG9yIGNsYXNzZXMgdGhhdCBjb250YWluIGEgbWVtYmVyIG5hbWVkIFtuYW1lXQogIC8vLwogIC8vLyBSZXR1cm5zIGFuIGVtcHR5IHNldCBpZiB0aGVyZSBpcyBubyBjbGFzcy4gRG8gbm90IG1vZGlmeSB0aGUgcmV0dXJuZWQgc2V0LgogIEBvdmVycmlkZQogIFNldDxDbGFzc0VudGl0eT4gZ2V0SW50ZXJjZXB0ZWRDbGFzc2VzT24oCiAgICAgIFN0cmluZyBuYW1lLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIFNldDxNZW1iZXJFbnRpdHk+IGludGVyY2VwdGVkID0gaW50ZXJjZXB0ZWRNZW1iZXJzW25hbWVdOwogICAgaWYgKGludGVyY2VwdGVkID09IG51bGwpIHJldHVybiBfbm9DbGFzc2VzOwogICAgcmV0dXJuIF9pbnRlcmNlcHRlZENsYXNzZXNDYWNoZS5wdXRJZkFic2VudChuYW1lLCAoKSB7CiAgICAgIC8vIFBvcHVsYXRlIHRoZSBjYWNoZSBieSBydW5uaW5nIHRocm91Z2ggYWxsIHRoZSBlbGVtZW50cyBhbmQKICAgICAgLy8gZGV0ZXJtaW5lIGlmIHRoZSBnaXZlbiBzZWxlY3RvciBhcHBsaWVzIHRvIHRoZW0uCiAgICAgIFNldDxDbGFzc0VudGl0eT4gcmVzdWx0ID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKICAgICAgZm9yIChNZW1iZXJFbnRpdHkgZWxlbWVudCBpbiBpbnRlcmNlcHRlZCkgewogICAgICAgIENsYXNzRW50aXR5IGNsYXNzRWxlbWVudCA9IGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3M7CiAgICAgICAgaWYgKF9pc0NvbXBpbGVUaW1lT25seUNsYXNzKGNsYXNzRWxlbWVudCkpIGNvbnRpbnVlOwogICAgICAgIGlmIChfbmF0aXZlRGF0YS5pc05hdGl2ZU9yRXh0ZW5kc05hdGl2ZShjbGFzc0VsZW1lbnQpIHx8CiAgICAgICAgICAgIGludGVyY2VwdGVkQ2xhc3Nlcy5jb250YWlucyhjbGFzc0VsZW1lbnQpKSB7CiAgICAgICAgICByZXN1bHQuYWRkKGNsYXNzRWxlbWVudCk7CiAgICAgICAgfQogICAgICAgIGlmIChjbGFzc2VzTWl4ZWRJbnRvSW50ZXJjZXB0ZWRDbGFzc2VzLmNvbnRhaW5zKGNsYXNzRWxlbWVudCkpIHsKICAgICAgICAgIFNldDxDbGFzc0VudGl0eT4gbmF0aXZlU3ViY2xhc3NlcyA9CiAgICAgICAgICAgICAgbmF0aXZlU3ViY2xhc3Nlc09mTWl4aW4oY2xhc3NFbGVtZW50LCBjbG9zZWRXb3JsZCk7CiAgICAgICAgICBpZiAobmF0aXZlU3ViY2xhc3NlcyAhPSBudWxsKSByZXN1bHQuYWRkQWxsKG5hdGl2ZVN1YmNsYXNzZXMpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfSk7CiAgfQoKICBTZXQ8Q2xhc3NFbnRpdHk+IG5hdGl2ZVN1YmNsYXNzZXNPZk1peGluKAogICAgICBDbGFzc0VudGl0eSBtaXhpbiwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gdXNlcyA9IGNsb3NlZFdvcmxkLm1peGluVXNlc09mKG1peGluKTsKICAgIFNldDxDbGFzc0VudGl0eT4gcmVzdWx0ID0gbnVsbDsKICAgIGZvciAoQ2xhc3NFbnRpdHkgdXNlIGluIHVzZXMpIHsKICAgICAgY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuZm9yRWFjaFN0cmljdFN1YmNsYXNzT2YodXNlLAogICAgICAgICAgKENsYXNzRW50aXR5IHN1YmNsYXNzKSB7CiAgICAgICAgaWYgKF9uYXRpdmVEYXRhLmlzTmF0aXZlT3JFeHRlbmRzTmF0aXZlKHN1YmNsYXNzKSkgewogICAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwogICAgICAgICAgcmVzdWx0LmFkZChzdWJjbGFzcyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBJdGVyYXRpb25TdGVwLkNPTlRJTlVFOwogICAgICB9KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSW50ZXJjZXB0ZWRDbGFzcyhDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoZWxlbWVudCA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoX25hdGl2ZURhdGEuaXNOYXRpdmVPckV4dGVuZHNOYXRpdmUoZWxlbWVudCkpIHJldHVybiB0cnVlOwogICAgaWYgKGludGVyY2VwdGVkQ2xhc3Nlcy5jb250YWlucyhlbGVtZW50KSkgcmV0dXJuIHRydWU7CiAgICBpZiAoY2xhc3Nlc01peGVkSW50b0ludGVyY2VwdGVkQ2xhc3Nlcy5jb250YWlucyhlbGVtZW50KSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzTWl4ZWRJbnRvSW50ZXJjZXB0ZWRDbGFzcyhDbGFzc0VudGl0eSBlbGVtZW50KSA9PgogICAgICBjbGFzc2VzTWl4ZWRJbnRvSW50ZXJjZXB0ZWRDbGFzc2VzLmNvbnRhaW5zKGVsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICBib29sIG1heUdlbmVyYXRlSW5zdGFuY2VvZkNoZWNrKERhcnRUeXBlIHR5cGUsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgLy8gV2UgY2FuIHVzZSBhbiBpbnN0YW5jZW9mIGNoZWNrIGZvciByYXcgdHlwZXMgdGhhdCBoYXZlIG5vIHN1YmNsYXNzIHRoYXQKICAgIC8vIGlzIG1peGVkLWluIG9yIGluIGFuIGltcGxlbWVudHMgY2xhdXNlLgoKICAgIGlmICghdHlwZS50cmVhdEFzUmF3KSByZXR1cm4gZmFsc2U7CiAgICBpZiAodHlwZS5pc0Z1dHVyZU9yKSByZXR1cm4gZmFsc2U7CiAgICBJbnRlcmZhY2VUeXBlIGludGVyZmFjZVR5cGUgPSB0eXBlOwogICAgQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50ID0gaW50ZXJmYWNlVHlwZS5lbGVtZW50OwogICAgaWYgKGlzSW50ZXJjZXB0ZWRDbGFzcyhjbGFzc0VsZW1lbnQpKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaGFzT25seVN1YmNsYXNzZXMoY2xhc3NFbGVtZW50KTsKICB9Cn0KCmNsYXNzIEludGVyY2VwdG9yRGF0YUJ1aWxkZXJJbXBsIGltcGxlbWVudHMgSW50ZXJjZXB0b3JEYXRhQnVpbGRlciB7CiAgZmluYWwgTmF0aXZlQmFzaWNEYXRhIF9uYXRpdmVEYXRhOwogIGZpbmFsIEtFbGVtZW50RW52aXJvbm1lbnQgX2VsZW1lbnRFbnZpcm9ubWVudDsKICBmaW5hbCBLQ29tbW9uRWxlbWVudHMgX2NvbW1vbkVsZW1lbnRzOwoKICAvLy8gVGhlIG1lbWJlcnMgb2YgaW5zdGFudGlhdGVkIGludGVyY2VwdG9yIGNsYXNzZXM6IG1hcHMgYSBtZW1iZXIgbmFtZSB0byB0aGUKICAvLy8gbGlzdCBvZiBtZW1iZXJzIHRoYXQgaGF2ZSB0aGF0IG5hbWUuIFRoaXMgbWFwIGlzIHVzZWQgYnkgdGhlIGNvZGVnZW4gdG8KICAvLy8ga25vdyB3aGV0aGVyIGEgc2VuZCBtdXN0IGJlIGludGVyY2VwdGVkIG9yIG5vdC4KICBmaW5hbCBNYXA8U3RyaW5nLCBTZXQ8TWVtYmVyRW50aXR5Pj4gX2ludGVyY2VwdGVkRWxlbWVudHMgPQogICAgICA8U3RyaW5nLCBTZXQ8TWVtYmVyRW50aXR5Pj57fTsKCiAgLy8vIFNldCBvZiBjbGFzc2VzIHdob3NlIG1ldGhvZHMgYXJlIGludGVyY2VwdGVkLgogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gX2ludGVyY2VwdGVkQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CgogIC8vLyBTZXQgb2YgY2xhc3NlcyB1c2VkIGFzIG1peGlucyBvbiBpbnRlcmNlcHRlZCAobmF0aXZlIGFuZCBwcmltaXRpdmUpCiAgLy8vIGNsYXNzZXMuIE1ldGhvZHMgb24gdGhlc2UgY2xhc3NlcyBtaWdodCBhbHNvIGJlIG1peGVkIGluIHRvIHJlZ3VsYXIgRGFydAogIC8vLyAodW5pbnRlcmNlcHRlZCkgY2xhc3Nlcy4KICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IF9jbGFzc2VzTWl4ZWRJbnRvSW50ZXJjZXB0ZWRDbGFzc2VzID0KICAgICAgbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKCiAgSW50ZXJjZXB0b3JEYXRhQnVpbGRlckltcGwoCiAgICAgIHRoaXMuX25hdGl2ZURhdGEsIHRoaXMuX2VsZW1lbnRFbnZpcm9ubWVudCwgdGhpcy5fY29tbW9uRWxlbWVudHMpOwoKICBAb3ZlcnJpZGUKICBJbnRlcmNlcHRvckRhdGEgY2xvc2UoKSB7CiAgICByZXR1cm4gbmV3IEludGVyY2VwdG9yRGF0YUltcGwoCiAgICAgICAgX25hdGl2ZURhdGEsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLAogICAgICAgIF9pbnRlcmNlcHRlZEVsZW1lbnRzLAogICAgICAgIF9pbnRlcmNlcHRlZENsYXNzZXMsCiAgICAgICAgX2NsYXNzZXNNaXhlZEludG9JbnRlcmNlcHRlZENsYXNzZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRJbnRlcmNlcHRvcnNGb3JOYXRpdmVDbGFzc01lbWJlcnMoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hDbGFzc01lbWJlcihjbHMsCiAgICAgICAgKENsYXNzRW50aXR5IGNscywgTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICBpZiAobWVtYmVyLm5hbWUgPT0gSWRlbnRpZmllcnMuY2FsbCkgcmV0dXJuOwogICAgICAvLyBBbGwgbWV0aG9kcyBvbiBbT2JqZWN0XSBhcmUgc2hhZG93ZWQgYnkgW0ludGVyY2VwdG9yXS4KICAgICAgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MpIHJldHVybjsKICAgICAgU2V0PE1lbWJlckVudGl0eT4gc2V0ID0KICAgICAgICAgIF9pbnRlcmNlcHRlZEVsZW1lbnRzW21lbWJlci5uYW1lXSA/Pz0gbmV3IFNldDxNZW1iZXJFbnRpdHk+KCk7CiAgICAgIHNldC5hZGQobWVtYmVyKTsKICAgIH0pOwoKICAgIC8vIFdhbGsgc3VwZXJjbGFzcyBjaGFpbiB0byBmaW5kIG1peGlucy4KICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaE1peGluKGNscywgKENsYXNzRW50aXR5IG1peGluKSB7CiAgICAgIF9jbGFzc2VzTWl4ZWRJbnRvSW50ZXJjZXB0ZWRDbGFzc2VzLmFkZChtaXhpbik7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkSW50ZXJjZXB0b3JzKENsYXNzRW50aXR5IGNscykgewogICAgaWYgKF9pbnRlcmNlcHRlZENsYXNzZXMuYWRkKGNscykpIHsKICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoQ2xhc3NNZW1iZXIoY2xzLAogICAgICAgICAgKENsYXNzRW50aXR5IGNscywgTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICAgIC8vIEFsbCBtZXRob2RzIG9uIFtPYmplY3RdIGFyZSBzaGFkb3dlZCBieSBbSW50ZXJjZXB0b3JdLgogICAgICAgIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzKSByZXR1cm47CiAgICAgICAgU2V0PE1lbWJlckVudGl0eT4gc2V0ID0KICAgICAgICAgICAgX2ludGVyY2VwdGVkRWxlbWVudHNbbWVtYmVyLm5hbWVdID8/PSBuZXcgU2V0PE1lbWJlckVudGl0eT4oKTsKICAgICAgICBzZXQuYWRkKG1lbWJlcik7CiAgICAgIH0pOwogICAgfQogICAgX2ludGVyY2VwdGVkQ2xhc3Nlcy5hZGQoX2NvbW1vbkVsZW1lbnRzLmpzSW50ZXJjZXB0b3JDbGFzcyk7CiAgfQp9CgpjbGFzcyBPbmVTaG90SW50ZXJjZXB0b3JEYXRhIHsKICBmaW5hbCBJbnRlcmNlcHRvckRhdGEgX2ludGVyY2VwdG9yRGF0YTsKICBmaW5hbCBDb21tb25FbGVtZW50cyBfY29tbW9uRWxlbWVudHM7CiAgZmluYWwgTmF0aXZlRGF0YSBfbmF0aXZlRGF0YTsKCiAgT25lU2hvdEludGVyY2VwdG9yRGF0YSgKICAgICAgdGhpcy5faW50ZXJjZXB0b3JEYXRhLCB0aGlzLl9jb21tb25FbGVtZW50cywgdGhpcy5fbmF0aXZlRGF0YSk7CgogIEl0ZXJhYmxlPE9uZVNob3RJbnRlcmNlcHRvcj4gZ2V0IG9uZVNob3RJbnRlcmNlcHRvcnMgewogICAgTGlzdDxPbmVTaG90SW50ZXJjZXB0b3I+IGludGVyY2VwdG9ycyA9IFtdOwogICAgZm9yICh2YXIgbWFwIGluIF9vbmVTaG90SW50ZXJjZXB0b3JzLnZhbHVlcykgewogICAgICBpbnRlcmNlcHRvcnMuYWRkQWxsKG1hcC52YWx1ZXMpOwogICAgfQogICAgcmV0dXJuIGludGVyY2VwdG9yczsKICB9CgogIE1hcDxTZWxlY3RvciwgTWFwPFN0cmluZywgT25lU2hvdEludGVyY2VwdG9yPj4gX29uZVNob3RJbnRlcmNlcHRvcnMgPSB7fTsKCiAgLy8vIEEgc2V0IG9mIHNwZWNpYWxpemVkIHZlcnNpb25zIG9mIHRoZSBbZ2V0SW50ZXJjZXB0b3JNZXRob2RdLgogIC8vLwogIC8vLyBTaW5jZSBbZ2V0SW50ZXJjZXB0b3JNZXRob2RdIGlzIGEgaG90IG1ldGhvZCBhdCBydW50aW1lLCB3ZSdyZSBhbHdheXMKICAvLy8gc3BlY2lhbGl6aW5nIGl0IGJhc2VkIG9uIHRoZSBpbmNvbWluZyB0eXBlLiBUaGUga2V5cyBpbiB0aGUgbWFwIGFyZSB0aGUKICAvLy8gbmFtZXMgb2YgdGhlc2Ugc3BlY2lhbGl6ZWQgdmVyc2lvbnMuIE5vdGUgdGhhdCB0aGUgZ2VuZXJpYyB2ZXJzaW9uIHRoYXQKICAvLy8gY29udGFpbnMgYWxsIHBvc3NpYmxlIHR5cGUgY2hlY2tzIGlzIGFsc28gc3RvcmVkIGluIHRoaXMgbWFwLgogIEl0ZXJhYmxlPFNwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3I+IGdldCBzcGVjaWFsaXplZEdldEludGVyY2VwdG9ycyA9PgogICAgICBfc3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcnMudmFsdWVzOwoKICBNYXA8U3RyaW5nLCBTcGVjaWFsaXplZEdldEludGVyY2VwdG9yPiBfc3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcnMgPSB7fTsKCiAganNBc3QuTmFtZSByZWdpc3Rlck9uZVNob3RJbnRlcmNlcHRvcigKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIE1vZHVsYXJOYW1lciBuYW1lciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBzZWxlY3RvciA9IHNlbGVjdG9yLnRvTm9ybWFsaXplZCgpOwogICAgU2V0PENsYXNzRW50aXR5PiBjbGFzc2VzID0KICAgICAgICBfaW50ZXJjZXB0b3JEYXRhLmdldEludGVyY2VwdGVkQ2xhc3Nlc09uKHNlbGVjdG9yLm5hbWUsIGNsb3NlZFdvcmxkKTsKICAgIFN0cmluZyBrZXkgPSBzdWZmaXhGb3JHZXRJbnRlcmNlcHRvcihfY29tbW9uRWxlbWVudHMsIF9uYXRpdmVEYXRhLCBjbGFzc2VzKTsKICAgIE1hcDxTdHJpbmcsIE9uZVNob3RJbnRlcmNlcHRvcj4gaW50ZXJjZXB0b3JzID0KICAgICAgICBfb25lU2hvdEludGVyY2VwdG9yc1tzZWxlY3Rvcl0gPz89IHt9OwogICAgT25lU2hvdEludGVyY2VwdG9yIGludGVyY2VwdG9yID0KICAgICAgICBpbnRlcmNlcHRvcnNba2V5XSA/Pz0gbmV3IE9uZVNob3RJbnRlcmNlcHRvcihrZXksIHNlbGVjdG9yKTsKICAgIGludGVyY2VwdG9yLmNsYXNzZXMuYWRkQWxsKGNsYXNzZXMpOwogICAgcmVnaXN0ZXJTcGVjaWFsaXplZEdldEludGVyY2VwdG9yKGNsYXNzZXMsIG5hbWVyKTsKICAgIHJldHVybiBuYW1lci5uYW1lRm9yT25lU2hvdEludGVyY2VwdG9yKHNlbGVjdG9yLCBjbGFzc2VzKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJTcGVjaWFsaXplZEdldEludGVyY2VwdG9yKAogICAgICBTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXMsIE1vZHVsYXJOYW1lciBuYW1lcikgewogICAgaWYgKGNsYXNzZXMuY29udGFpbnMoX2NvbW1vbkVsZW1lbnRzLmpzSW50ZXJjZXB0b3JDbGFzcykpIHsKICAgICAgLy8gV2UgY2FuJ3QgdXNlIGEgc3BlY2lhbGl6ZWQgW2dldEludGVyY2VwdG9yTWV0aG9kXSwgc28gd2UgbWFrZQogICAgICAvLyBzdXJlIHdlIGVtaXQgdGhlIG9uZSB3aXRoIGFsbCBjaGVja3MuCiAgICAgIGNsYXNzZXMgPSBfaW50ZXJjZXB0b3JEYXRhLmludGVyY2VwdGVkQ2xhc3NlczsKICAgIH0KICAgIFN0cmluZyBrZXkgPSBzdWZmaXhGb3JHZXRJbnRlcmNlcHRvcihfY29tbW9uRWxlbWVudHMsIF9uYXRpdmVEYXRhLCBjbGFzc2VzKTsKICAgIFNwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3IgaW50ZXJjZXB0b3IgPQogICAgICAgIF9zcGVjaWFsaXplZEdldEludGVyY2VwdG9yc1trZXldID8/PSBuZXcgU3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcihrZXkpOwogICAgaW50ZXJjZXB0b3IuY2xhc3Nlcy5hZGRBbGwoY2xhc3Nlcyk7CiAgfQp9CgpjbGFzcyBPbmVTaG90SW50ZXJjZXB0b3IgewogIGZpbmFsIFNlbGVjdG9yIHNlbGVjdG9yOwogIGZpbmFsIFN0cmluZyBrZXk7CiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBjbGFzc2VzID0ge307CgogIE9uZVNob3RJbnRlcmNlcHRvcih0aGlzLmtleSwgdGhpcy5zZWxlY3Rvcik7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+CiAgICAgICdPbmVTaG90SW50ZXJjZXB0b3Ioc2VsZWN0b3I9JHNlbGVjdG9yLGtleT0ka2V5LGNsYXNzZXM9JGNsYXNzZXMpJzsKfQoKY2xhc3MgU3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvciB7CiAgZmluYWwgU3RyaW5nIGtleTsKICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXMgPSB7fTsKCiAgU3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcih0aGlzLmtleSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdTcGVjaWFsaXplZEdldEludGVyY2VwdG9yKGtleT0ka2V5LGNsYXNzZXM9JGNsYXNzZXMpJzsKfQqBtABOTjwBJQEwIT8kITEhLiUkKkAbASE9LhkdTwEzJwE3MAEyNzcnMQFQIQZJFCNIATQwOQFOBlEsLgFNURJMAgEoKT4bAgE3SR0wASUoAVFONjsBDC0BSk8fPQFHTQZLSVAGTzBDLAFBKwE+ARcYHB8fMAEyURc0PDgpQCoGSDomFSQUGBwcLQQBDCgVLkoeIggrOxMEAQwzMS0sSgY1BAEMODUEAQw4NQQBDCgtBAEMMjYEAQwjSSFCRikWQTEUCAEoKCQqGy5JJwgEAUsjNTszMzc+OToEAU4GUQwsLz4wO0Q6ODI7PUE5JApJLkJJCggVCAQBLDVBJCQ+Iz0/IAonCgYTBAEMMSdDO0sSBAEMOzwBDE1PLwEoJyg2OEcEAgFFJTEpAVFONj4lATRHAUpPHz8eAR5JAQwcJBUZHh0uBAEMPzAxM0A2HkkXCAEtQDYIBAEMKigyM0I4IEsZCgZBBAIBHyooIAEaRgE5MDMnBhkEAUwBQwZMTk5ESCoBSwEpSSgfTlEzLyVFKTc/BAEqNkBHLzUGUSxRKQQCARsbFCcBLwEMF0oCASIUJwEnAQxPAgE1cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9pbnRlcmNlcHRvcl9kYXRhLmRhcnQ4c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfZW1pdHRlci9qc19lbWl0dGVyLmRhcnSCiS8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuanNfZW1pdHRlcjsKCmV4cG9ydCAnY2xhc3Nfc3R1Yl9nZW5lcmF0b3IuZGFydCc7CmV4cG9ydCAnY29kZV9lbWl0dGVyX3Rhc2suZGFydCc7CmV4cG9ydCAnaW5zdGFudGlhdGlvbl9zdHViX2dlbmVyYXRvci5kYXJ0JzsKZXhwb3J0ICdpbnRlcmNlcHRvcl9zdHViX2dlbmVyYXRvci5kYXJ0JzsKZXhwb3J0ICdtYWluX2NhbGxfc3R1Yl9nZW5lcmF0b3IuZGFydCc7CmV4cG9ydCAnbWV0YWRhdGFfY29sbGVjdG9yLmRhcnQnOwpleHBvcnQgJ25hdGl2ZV9lbWl0dGVyLmRhcnQnOwpleHBvcnQgJ25hdGl2ZV9nZW5lcmF0b3IuZGFydCc7CmV4cG9ydCAncGFyYW1ldGVyX3N0dWJfZ2VuZXJhdG9yLmRhcnQnOwpleHBvcnQgJ3J1bnRpbWVfdHlwZV9nZW5lcmF0b3IuZGFydCc7CmV4cG9ydCAndHlwZV90ZXN0X3JlZ2lzdHJ5LmRhcnQnOwoTAE5OPAEcASQhLCooIh4gKCYiAS9wYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL2pzX2VtaXR0ZXIuZGFydDFzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9uYXRpdmUvZW5xdWV1ZS5kYXJ0rV8vLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBDb21tb25FbGVtZW50cywgRWxlbWVudEVudmlyb25tZW50OwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmF0aXZlX2RhdGEuZGFydCcgc2hvdyBOYXRpdmVEYXRhOwppbXBvcnQgJy4uL2pzX2VtaXR0ZXIvanNfZW1pdHRlci5kYXJ0JyBzaG93IENvZGVFbWl0dGVyVGFzaywgTmF0aXZlRW1pdHRlcjsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3VzZS5kYXJ0JyBzaG93IFR5cGVVc2U7CmltcG9ydCAnLi4vdW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnQnCiAgICBzaG93IFdvcmxkSW1wYWN0LCBXb3JsZEltcGFjdEJ1aWxkZXIsIFdvcmxkSW1wYWN0QnVpbGRlckltcGw7CmltcG9ydCAnYmVoYXZpb3IuZGFydCc7CmltcG9ydCAncmVzb2x2ZXIuZGFydCcgc2hvdyBOYXRpdmVDbGFzc0ZpbmRlcjsKCi8vLyBUaGlzIGNvdWxkIGJlIGFuIGFic3RyYWN0IGNsYXNzIGJ1dCB3ZSB1c2UgaXQgYXMgYSBzdHViIGZvciB0aGUKLy8vIGRhcnRfYmFja2VuZC4KY2xhc3MgTmF0aXZlRW5xdWV1ZXIgewogIC8vLyBDYWxsZWQgd2hlbiBhIFt0eXBlXSBoYXMgYmVlbiBpbnN0YW50aWF0ZWQgbmF0aXZlbHkuCiAgdm9pZCBvbkluc3RhbnRpYXRlZFR5cGUoSW50ZXJmYWNlVHlwZSB0eXBlKSB7fQoKICAvLy8gSW5pdGlhbCBlbnRyeSBwb2ludCB0byBuYXRpdmUgZW5xdWV1ZXIuCiAgV29ybGRJbXBhY3QgcHJvY2Vzc05hdGl2ZUNsYXNzZXMoSXRlcmFibGU8VXJpPiBsaWJyYXJpZXMpID0+CiAgICAgIGNvbnN0IFdvcmxkSW1wYWN0KCk7CgogIC8vLyBSZWdpc3RlcnMgdGhlIFtuYXRpdmVCZWhhdmlvcl0uIEFkZHMgdGhlIGxpdmVuZXNzIG9mIGl0cyBpbnN0YW50aWF0ZWQKICAvLy8gdHlwZXMgdG8gdGhlIHdvcmxkLgogIHZvaWQgcmVnaXN0ZXJOYXRpdmVCZWhhdmlvcigKICAgICAgV29ybGRJbXBhY3RCdWlsZGVyIGltcGFjdEJ1aWxkZXIsIE5hdGl2ZUJlaGF2aW9yIG5hdGl2ZUJlaGF2aW9yLCBjYXVzZSkge30KCiAgLy8vIFJldHVybnMgd2hldGhlciBuYXRpdmUgY2xhc3NlcyBhcmUgYmVpbmcgdXNlZC4KICBib29sIGdldCBoYXNJbnN0YW50aWF0ZWROYXRpdmVDbGFzc2VzID0+IGZhbHNlOwoKICAvLy8gRW1pdHMgYSBzdW1tYXJ5IGluZm9ybWF0aW9uIHVzaW5nIHRoZSBbbG9nXSBmdW5jdGlvbi4KICB2b2lkIGxvZ1N1bW1hcnkodm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UpKSB7fQp9CgphYnN0cmFjdCBjbGFzcyBOYXRpdmVFbnF1ZXVlckJhc2UgaW1wbGVtZW50cyBOYXRpdmVFbnF1ZXVlciB7CiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBfcmVnaXN0ZXJlZENsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gX3VudXNlZENsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBoYXNJbnN0YW50aWF0ZWROYXRpdmVDbGFzc2VzID0+ICFfcmVnaXN0ZXJlZENsYXNzZXMuaXNFbXB0eTsKCiAgLy8vIExvZyBtZXNzYWdlIHJlcG9ydGVkIGlmIGFsbCBuYXRpdmUgdHlwZXMgYXJlIHVzZWQuCiAgU3RyaW5nIF9hbGxVc2VkTWVzc2FnZTsKCiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwogIGZpbmFsIEVsZW1lbnRFbnZpcm9ubWVudCBfZWxlbWVudEVudmlyb25tZW50OwogIGZpbmFsIERhcnRUeXBlcyBfZGFydFR5cGVzOwogIGZpbmFsIENvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKCiAgLy8vIFN1YmNsYXNzZXMgb2YgW05hdGl2ZUVucXVldWVyQmFzZV0gYXJlIGNvbnN0cnVjdGVkIGJ5IHRoZSBiYWNrZW5kLgogIE5hdGl2ZUVucXVldWVyQmFzZSh0aGlzLl9vcHRpb25zLCB0aGlzLl9lbGVtZW50RW52aXJvbm1lbnQsCiAgICAgIHRoaXMuX2NvbW1vbkVsZW1lbnRzLCB0aGlzLl9kYXJ0VHlwZXMpOwoKICBib29sIGdldCBlbmFibGVMaXZlVHlwZUFuYWx5c2lzID0+IF9vcHRpb25zLmVuYWJsZU5hdGl2ZUxpdmVUeXBlQW5hbHlzaXM7CgogIEBvdmVycmlkZQogIHZvaWQgb25JbnN0YW50aWF0ZWRUeXBlKEludGVyZmFjZVR5cGUgdHlwZSkgewogICAgaWYgKF91bnVzZWRDbGFzc2VzLnJlbW92ZSh0eXBlLmVsZW1lbnQpKSB7CiAgICAgIF9yZWdpc3RlcmVkQ2xhc3Nlcy5hZGQodHlwZS5lbGVtZW50KTsKICAgIH0KICB9CgogIC8vLyBSZWdpc3RlciBbY2xhc3Nlc10gYXMgbmF0aXZlbHkgaW5zdGFudGlhdGVkIGluIFtpbXBhY3RCdWlsZGVyXS4KICB2b2lkIF9yZWdpc3RlclR5cGVVc2VzKAogICAgICBXb3JsZEltcGFjdEJ1aWxkZXIgaW1wYWN0QnVpbGRlciwgU2V0PENsYXNzRW50aXR5PiBjbGFzc2VzLCBjYXVzZSkgewogICAgZm9yIChDbGFzc0VudGl0eSBjbHMgaW4gY2xhc3NlcykgewogICAgICBpZiAoIV91bnVzZWRDbGFzc2VzLmNvbnRhaW5zKGNscykpIHsKICAgICAgICAvLyBObyBuZWVkIHRvIGFkZCBbY2xhc3NFbGVtZW50XSB0byBbaW1wYWN0QnVpbGRlcl06IGl0IGhhcyBhbHJlYWR5IGJlZW4KICAgICAgICAvLyBpbnN0YW50aWF0ZWQgYW5kIHdlIGRvbid0IHRyYWNrIG9yaWdpbnMgb2YgbmF0aXZlIGluc3RhbnRpYXRpb25zCiAgICAgICAgLy8gcHJlY2lzZWx5LgogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJUeXBlVXNlKAogICAgICAgICAgbmV3IFR5cGVVc2UubmF0aXZlSW5zdGFudGlhdGlvbihfZWxlbWVudEVudmlyb25tZW50LmdldFJhd1R5cGUoY2xzKSkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck5hdGl2ZUJlaGF2aW9yKAogICAgICBXb3JsZEltcGFjdEJ1aWxkZXIgaW1wYWN0QnVpbGRlciwgTmF0aXZlQmVoYXZpb3IgbmF0aXZlQmVoYXZpb3IsIGNhdXNlKSB7CiAgICBfcHJvY2Vzc05hdGl2ZUJlaGF2aW9yKGltcGFjdEJ1aWxkZXIsIG5hdGl2ZUJlaGF2aW9yLCBjYXVzZSk7CiAgfQoKICB2b2lkIF9wcm9jZXNzTmF0aXZlQmVoYXZpb3IoCiAgICAgIFdvcmxkSW1wYWN0QnVpbGRlciBpbXBhY3RCdWlsZGVyLCBOYXRpdmVCZWhhdmlvciBiZWhhdmlvciwgY2F1c2UpIHsKICAgIHZvaWQgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKEludGVyZmFjZVR5cGUgdHlwZSkgewogICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyVHlwZVVzZShuZXcgVHlwZVVzZS5uYXRpdmVJbnN0YW50aWF0aW9uKHR5cGUpKTsKICAgIH0KCiAgICBpbnQgdW51c2VkQmVmb3JlID0gX3VudXNlZENsYXNzZXMubGVuZ3RoOwogICAgU2V0PENsYXNzRW50aXR5PiBtYXRjaGluZ0NsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwogICAgZm9yICh2YXIgdHlwZSBpbiBiZWhhdmlvci50eXBlc0luc3RhbnRpYXRlZCkgewogICAgICBpZiAodHlwZSBpcyBTcGVjaWFsVHlwZSkgewogICAgICAgIGlmICh0eXBlID09IFNwZWNpYWxUeXBlLkpzT2JqZWN0KSB7CiAgICAgICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLm9iamVjdFR5cGUpOwogICAgICAgIH0KICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgaWYgKHR5cGUgPT0gX2NvbW1vbkVsZW1lbnRzLm51bVR5cGUpIHsKICAgICAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuZG91YmxlVHlwZSk7CiAgICAgICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLmludFR5cGUpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBfY29tbW9uRWxlbWVudHMuaW50VHlwZSB8fAogICAgICAgICAgICB0eXBlID09IF9jb21tb25FbGVtZW50cy5kb3VibGVUeXBlIHx8CiAgICAgICAgICAgIHR5cGUgPT0gX2NvbW1vbkVsZW1lbnRzLnN0cmluZ1R5cGUgfHwKICAgICAgICAgICAgdHlwZSA9PSBfY29tbW9uRWxlbWVudHMubnVsbFR5cGUgfHwKICAgICAgICAgICAgdHlwZSA9PSBfY29tbW9uRWxlbWVudHMuYm9vbFR5cGUgfHwKICAgICAgICAgICAgX2RhcnRUeXBlcy5pc1N1YnR5cGUodHlwZSwKICAgICAgICAgICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0UmF3VHlwZShfY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzKSkpIHsKICAgICAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbih0eXBlKTsKICAgICAgICB9IGVsc2UgaWYgKF9kYXJ0VHlwZXMuaXNTdWJ0eXBlKAogICAgICAgICAgICB0eXBlLAogICAgICAgICAgICBfZWxlbWVudEVudmlyb25tZW50CiAgICAgICAgICAgICAgICAuZ2V0UmF3VHlwZShfY29tbW9uRWxlbWVudHMuanNKYXZhU2NyaXB0T2JqZWN0Q2xhc3MpKSkgewogICAgICAgICAgbWF0Y2hpbmdDbGFzc2VzLmFkZCh0eXBlLmVsZW1lbnQpOwogICAgICAgIH0KICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJbXByb3ZlIHNwZWMgc3RyaW5nIHByZWNpc2lvbiB0byBoYW5kbGUgdHlwZQogICAgICAgIC8vIGFyZ3VtZW50cyBhbmQgaW1wbGVtZW50cyByZWxhdGlvbnMgdGhhdCBwcmVzZXJ2ZSBnZW5lcmljcy4gQ3VycmVudGx5CiAgICAgICAgLy8gd2UgY2Fubm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gYExpc3RgLCBgTGlzdDxkeW5hbWljPmAsIGFuZAogICAgICAgIC8vIGBMaXN0PGludD5gIGFuZCB0YWtlIGFsbCB0byBtZWFuIGBMaXN0PEU+YDsgaW4gZWZmZWN0IG5vdCBpbmNsdWRpbmcKICAgICAgICAvLyBhbnkgbmF0aXZlIHN1YmNsYXNzZXMgb2YgZ2VuZXJpYyBjbGFzc2VzLgogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcixzcmEpOiBGaW5kIGFuZCByZXBsYWNlIHVzZXMgb2YgYExpc3RgIHdpdGggdGhlCiAgICAgICAgLy8gYWN0dWFsIGltcGxlbWVudGF0aW9uIGNsYXNzZXMgc3VjaCBhcyBgSlNBcnJheWAgZXQgYWwuCiAgICAgICAgbWF0Y2hpbmdDbGFzc2VzCiAgICAgICAgICAgIC5hZGRBbGwoX2ZpbmRVbnVzZWRDbGFzc2VzTWF0Y2hpbmcoKENsYXNzRW50aXR5IG5hdGl2ZUNsYXNzKSB7CiAgICAgICAgICBJbnRlcmZhY2VUeXBlIG5hdGl2ZVR5cGUgPQogICAgICAgICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0UmF3VHlwZShuYXRpdmVDbGFzcyk7CiAgICAgICAgICBJbnRlcmZhY2VUeXBlIHNwZWNUeXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRSYXdUeXBlKHR5cGUuZWxlbWVudCk7CiAgICAgICAgICByZXR1cm4gX2RhcnRUeXBlcy5pc1N1YnR5cGUobmF0aXZlVHlwZSwgc3BlY1R5cGUpOwogICAgICAgIH0pKTsKICAgICAgfSBlbHNlIGlmICh0eXBlLmlzRHluYW1pYykgewogICAgICAgIG1hdGNoaW5nQ2xhc3Nlcy5hZGRBbGwoX3VudXNlZENsYXNzZXMpOwogICAgICB9IGVsc2UgewogICAgICAgIGFzc2VydCh0eXBlIGlzIFZvaWRUeXBlLCAnJHR5cGUgd2FzICR7dHlwZS5ydW50aW1lVHlwZX0nKTsKICAgICAgfQogICAgfQogICAgaWYgKG1hdGNoaW5nQ2xhc3Nlcy5pc05vdEVtcHR5ICYmIF9yZWdpc3RlcmVkQ2xhc3Nlcy5pc0VtcHR5KSB7CiAgICAgIG1hdGNoaW5nQ2xhc3Nlcy5hZGRBbGwoX29uRmlyc3ROYXRpdmVDbGFzcyhpbXBhY3RCdWlsZGVyKSk7CiAgICB9CiAgICBfcmVnaXN0ZXJUeXBlVXNlcyhpbXBhY3RCdWlsZGVyLCBtYXRjaGluZ0NsYXNzZXMsIGNhdXNlKTsKCiAgICAvLyBHaXZlIGFuIGluZm8gc28gdGhhdCBsaWJyYXJ5IGRldmVsb3BlcnMgY2FuIGNvbXBpbGUgd2l0aCAtdiB0byBmaW5kIHdoeQogICAgLy8gYWxsIHRoZSBuYXRpdmUgY2xhc3NlcyBhcmUgaW5jbHVkZWQuCiAgICBpZiAodW51c2VkQmVmb3JlID4gMCAmJiB1bnVzZWRCZWZvcmUgPT0gbWF0Y2hpbmdDbGFzc2VzLmxlbmd0aCkgewogICAgICBfYWxsVXNlZE1lc3NhZ2UgPz89ICdBbGwgbmF0aXZlIHR5cGVzIG1hcmtlZCBhcyB1c2VkIGR1ZSB0byAkY2F1c2UuJzsKICAgIH0KICB9CgogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBfZmluZFVudXNlZENsYXNzZXNNYXRjaGluZygKICAgICAgYm9vbCBwcmVkaWNhdGUoQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50KSkgewogICAgcmV0dXJuIF91bnVzZWRDbGFzc2VzLndoZXJlKHByZWRpY2F0ZSk7CiAgfQoKICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gX29uRmlyc3ROYXRpdmVDbGFzcyhXb3JsZEltcGFjdEJ1aWxkZXIgaW1wYWN0QnVpbGRlcikgewogICAgcmV0dXJuIF9maW5kTmF0aXZlRXhjZXB0aW9ucygpOwogIH0KCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IF9maW5kTmF0aXZlRXhjZXB0aW9ucygpIHsKICAgIHJldHVybiBfZmluZFVudXNlZENsYXNzZXNNYXRjaGluZygoQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50KSB7CiAgICAgIC8vIFRPRE8oc3JhKTogQW5ub3RhdGUgZXhjZXB0aW9uIGNsYXNzZXMgaW4gZGFydDpodG1sLgogICAgICBTdHJpbmcgbmFtZSA9IGNsYXNzRWxlbWVudC5uYW1lOwogICAgICBpZiAobmFtZS5jb250YWlucygnRXhjZXB0aW9uJykpIHJldHVybiB0cnVlOwogICAgICBpZiAobmFtZS5jb250YWlucygnRXJyb3InKSkgcmV0dXJuIHRydWU7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBsb2dTdW1tYXJ5KHZvaWQgbG9nKFN0cmluZyBtZXNzYWdlKSkgewogICAgaWYgKF9hbGxVc2VkTWVzc2FnZSAhPSBudWxsKSB7CiAgICAgIGxvZyhfYWxsVXNlZE1lc3NhZ2UpOwogICAgfQogIH0KfQoKY2xhc3MgTmF0aXZlUmVzb2x1dGlvbkVucXVldWVyIGV4dGVuZHMgTmF0aXZlRW5xdWV1ZXJCYXNlIHsKICBmaW5hbCBOYXRpdmVDbGFzc0ZpbmRlciBfbmF0aXZlQ2xhc3NGaW5kZXI7CgogIC8vLyBUaGUgc2V0IG9mIGFsbCBuYXRpdmUgY2xhc3Nlcy4gIEVhY2ggbmF0aXZlIGNsYXNzIGlzIGluIFtuYXRpdmVDbGFzc2VzXQogIC8vLyBhbmQgZXhhY3RseSBvbmUgb2YgW3VudXNlZENsYXNzZXNdIGFuZCBbcmVnaXN0ZXJlZENsYXNzZXNdLgogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gX25hdGl2ZUNsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICBOYXRpdmVSZXNvbHV0aW9uRW5xdWV1ZXIoCiAgICAgIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zLAogICAgICBFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50LAogICAgICBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgRGFydFR5cGVzIGRhcnRUeXBlcywKICAgICAgdGhpcy5fbmF0aXZlQ2xhc3NGaW5kZXIpCiAgICAgIDogc3VwZXIob3B0aW9ucywgZWxlbWVudEVudmlyb25tZW50LCBjb21tb25FbGVtZW50cywgZGFydFR5cGVzKTsKCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBuYXRpdmVDbGFzc2VzRm9yVGVzdGluZyA9PiBfbmF0aXZlQ2xhc3NlczsKCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCByZWdpc3RlcmVkQ2xhc3Nlc0ZvclRlc3RpbmcgPT4gX3JlZ2lzdGVyZWRDbGFzc2VzOwoKICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gZ2V0IGxpdmVOYXRpdmVDbGFzc2VzID0+IF9yZWdpc3RlcmVkQ2xhc3NlczsKCiAgQG92ZXJyaWRlCiAgV29ybGRJbXBhY3QgcHJvY2Vzc05hdGl2ZUNsYXNzZXMoSXRlcmFibGU8VXJpPiBsaWJyYXJpZXMpIHsKICAgIFdvcmxkSW1wYWN0QnVpbGRlckltcGwgaW1wYWN0QnVpbGRlciA9IG5ldyBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsKCk7CiAgICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gbmF0aXZlQ2xhc3NlcyA9CiAgICAgICAgX25hdGl2ZUNsYXNzRmluZGVyLmNvbXB1dGVOYXRpdmVDbGFzc2VzKGxpYnJhcmllcyk7CiAgICBfbmF0aXZlQ2xhc3Nlcy5hZGRBbGwobmF0aXZlQ2xhc3Nlcyk7CiAgICBfdW51c2VkQ2xhc3Nlcy5hZGRBbGwobmF0aXZlQ2xhc3Nlcyk7CiAgICBpZiAoIWVuYWJsZUxpdmVUeXBlQW5hbHlzaXMpIHsKICAgICAgX3JlZ2lzdGVyVHlwZVVzZXMoaW1wYWN0QnVpbGRlciwgX25hdGl2ZUNsYXNzZXMsICdmb3JjZWQnKTsKICAgIH0KICAgIHJldHVybiBpbXBhY3RCdWlsZGVyOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBsb2dTdW1tYXJ5KHZvaWQgbG9nKFN0cmluZyBtZXNzYWdlKSkgewogICAgc3VwZXIubG9nU3VtbWFyeShsb2cpOwogICAgbG9nKCdSZXNvbHZlZCAke19yZWdpc3RlcmVkQ2xhc3Nlcy5sZW5ndGh9IG5hdGl2ZSBlbGVtZW50cyB1c2VkLCAnCiAgICAgICAgJyR7X3VudXNlZENsYXNzZXMubGVuZ3RofSBuYXRpdmUgZWxlbWVudHMgZGVhZC4nKTsKICB9Cn0KCmNsYXNzIE5hdGl2ZUNvZGVnZW5FbnF1ZXVlciBleHRlbmRzIE5hdGl2ZUVucXVldWVyQmFzZSB7CiAgZmluYWwgQ29kZUVtaXR0ZXJUYXNrIF9lbWl0dGVyOwogIGZpbmFsIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBfbmF0aXZlQ2xhc3NlczsKICBmaW5hbCBOYXRpdmVEYXRhIF9uYXRpdmVEYXRhOwoKICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IF9kb25lQWRkU3VidHlwZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICBOYXRpdmVDb2RlZ2VuRW5xdWV1ZXIoCiAgICAgIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zLAogICAgICBFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50LAogICAgICBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgRGFydFR5cGVzIGRhcnRUeXBlcywKICAgICAgdGhpcy5fZW1pdHRlciwKICAgICAgdGhpcy5fbmF0aXZlQ2xhc3NlcywKICAgICAgdGhpcy5fbmF0aXZlRGF0YSkKICAgICAgOiBzdXBlcihvcHRpb25zLCBlbGVtZW50RW52aXJvbm1lbnQsIGNvbW1vbkVsZW1lbnRzLCBkYXJ0VHlwZXMpOwoKICBAb3ZlcnJpZGUKICBXb3JsZEltcGFjdCBwcm9jZXNzTmF0aXZlQ2xhc3NlcyhJdGVyYWJsZTxVcmk+IGxpYnJhcmllcykgewogICAgV29ybGRJbXBhY3RCdWlsZGVySW1wbCBpbXBhY3RCdWlsZGVyID0gbmV3IFdvcmxkSW1wYWN0QnVpbGRlckltcGwoKTsKICAgIF91bnVzZWRDbGFzc2VzLmFkZEFsbChfbmF0aXZlQ2xhc3Nlcyk7CgogICAgaWYgKCFlbmFibGVMaXZlVHlwZUFuYWx5c2lzKSB7CiAgICAgIF9yZWdpc3RlclR5cGVVc2VzKGltcGFjdEJ1aWxkZXIsIF9uYXRpdmVDbGFzc2VzLCAnZm9yY2VkJyk7CiAgICB9CgogICAgLy8gSEFDSyBIQUNLIC0gYWRkIGFsbCB0aGUgcmVzb2x2ZWQgY2xhc3Nlcy4KICAgIFNldDxDbGFzc0VudGl0eT4gbWF0Y2hpbmdDbGFzc2VzID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50IGluIF9uYXRpdmVDbGFzc2VzKSB7CiAgICAgIGlmIChfdW51c2VkQ2xhc3Nlcy5jb250YWlucyhjbGFzc0VsZW1lbnQpKSB7CiAgICAgICAgbWF0Y2hpbmdDbGFzc2VzLmFkZChjbGFzc0VsZW1lbnQpOwogICAgICB9CiAgICB9CiAgICBpZiAobWF0Y2hpbmdDbGFzc2VzLmlzTm90RW1wdHkgJiYgX3JlZ2lzdGVyZWRDbGFzc2VzLmlzRW1wdHkpIHsKICAgICAgbWF0Y2hpbmdDbGFzc2VzLmFkZEFsbChfb25GaXJzdE5hdGl2ZUNsYXNzKGltcGFjdEJ1aWxkZXIpKTsKICAgIH0KICAgIF9yZWdpc3RlclR5cGVVc2VzKGltcGFjdEJ1aWxkZXIsIG1hdGNoaW5nQ2xhc3NlcywgJ3dhcyByZXNvbHZlZCcpOwogICAgcmV0dXJuIGltcGFjdEJ1aWxkZXI7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9yZWdpc3RlclR5cGVVc2VzKAogICAgICBXb3JsZEltcGFjdEJ1aWxkZXIgaW1wYWN0QnVpbGRlciwgU2V0PENsYXNzRW50aXR5PiBjbGFzc2VzLCBjYXVzZSkgewogICAgc3VwZXIuX3JlZ2lzdGVyVHlwZVVzZXMoaW1wYWN0QnVpbGRlciwgY2xhc3NlcywgY2F1c2UpOwoKICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50IGluIGNsYXNzZXMpIHsKICAgICAgLy8gQWRkIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHRoaXMgY2xhc3MgaXMgYSBzdWJ0eXBlIG9mIGl0cyBzdXBlcnR5cGVzLiBUaGUKICAgICAgLy8gY29kZSBlbWl0dGVyIGFuZCB0aGUgc3NhIGJ1aWxkZXIgdXNlIHRoYXQgaW5mb3JtYXRpb24uCiAgICAgIF9hZGRTdWJ0eXBlcyhjbGFzc0VsZW1lbnQsIF9lbWl0dGVyLm5hdGl2ZUVtaXR0ZXIpOwogICAgfQogIH0KCiAgdm9pZCBfYWRkU3VidHlwZXMoQ2xhc3NFbnRpdHkgY2xzLCBOYXRpdmVFbWl0dGVyIGVtaXR0ZXIpIHsKICAgIGlmICghX25hdGl2ZURhdGEuaXNOYXRpdmVDbGFzcyhjbHMpKSByZXR1cm47CiAgICBpZiAoX2RvbmVBZGRTdWJ0eXBlcy5jb250YWlucyhjbHMpKSByZXR1cm47CiAgICBfZG9uZUFkZFN1YnR5cGVzLmFkZChjbHMpOwoKICAgIC8vIFdhbGsgdGhlIHN1cGVyY2xhc3MgY2hhaW4gc2luY2UgY2xhc3NlcyBvbiB0aGUgc3VwZXJjbGFzcyBjaGFpbiBtaWdodCBub3QKICAgIC8vIGJlIGluc3RhbnRpYXRlZCAoYWJzdHJhY3Qgb3Igc2ltcGx5IHVudXNlZCkuCiAgICBfYWRkU3VidHlwZXMoX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRTdXBlckNsYXNzKGNscyksIGVtaXR0ZXIpOwoKICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaFN1cGVydHlwZShjbHMsIChJbnRlcmZhY2VUeXBlIHR5cGUpIHsKICAgICAgTGlzdDxDbGFzc0VudGl0eT4gc3VidHlwZXMgPQogICAgICAgICAgZW1pdHRlci5zdWJ0eXBlc1t0eXBlLmVsZW1lbnRdID8/PSA8Q2xhc3NFbnRpdHk+W107CiAgICAgIHN1YnR5cGVzLmFkZChjbHMpOwogICAgfSk7CgogICAgLy8gU2tpcCB0aHJvdWdoIGFsbCB0aGUgbWl4aW4gYXBwbGljYXRpb25zIGluIHRoZSBzdXBlciBjbGFzcwogICAgLy8gY2hhaW4uIFRoYXQgd2F5LCB0aGUgZGlyZWN0IHN1YnR5cGVzIHNldCBvbmx5IGNvbnRhaW4gdGhlCiAgICAvLyBuYXRpdmVzIGNsYXNzZXMuCiAgICBDbGFzc0VudGl0eSBzdXBlcmNsYXNzID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRTdXBlckNsYXNzKGNscyk7CiAgICB3aGlsZSAoc3VwZXJjbGFzcyAhPSBudWxsICYmCiAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5pc01peGluQXBwbGljYXRpb24oc3VwZXJjbGFzcykpIHsKICAgICAgYXNzZXJ0KCFfbmF0aXZlRGF0YS5pc05hdGl2ZUNsYXNzKHN1cGVyY2xhc3MpKTsKICAgICAgc3VwZXJjbGFzcyA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0U3VwZXJDbGFzcyhzdXBlcmNsYXNzKTsKICAgIH0KCiAgICBMaXN0PENsYXNzRW50aXR5PiBkaXJlY3RTdWJ0eXBlcyA9CiAgICAgICAgZW1pdHRlci5kaXJlY3RTdWJ0eXBlc1tzdXBlcmNsYXNzXSA/Pz0gPENsYXNzRW50aXR5PltdOwogICAgZGlyZWN0U3VidHlwZXMuYWRkKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGxvZ1N1bW1hcnkodm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UpKSB7CiAgICBzdXBlci5sb2dTdW1tYXJ5KGxvZyk7CiAgICBsb2coJ0NvbXBpbGVkICR7X3JlZ2lzdGVyZWRDbGFzc2VzLmxlbmd0aH0gbmF0aXZlIGNsYXNzZXMsICcKICAgICAgICAnJHtfdW51c2VkQ2xhc3Nlcy5sZW5ndGh9IG5hdGl2ZSBjbGFzc2VzIG9taXR0ZWQuJyk7CiAgfQp9CoE4AE5OPAFKJCE5TBosJ0IYLwFEEhc7MQEuPxsBTBofUQE1MgE8LwIBPkZCAQxIATkaASIwHigBST4uAUwBDDAvLAYEAUYaSycrUUwWEgglUQYEAQwfUEIEAR9KNUwGAS4/MyEsPQoSCCMvPTo2MjIwMCdRJykSIEktCk1QRk81TUIYSyU7UT0NIzAPQwgGREIGPgFPLEZMBgQBNDIsBAFQJAQBMkM9JzMvFAgEAQwuIxwGBAIBPC4BTkJCARwfLSUbH0cBRwFPAUUBDD5JKjwqKiNCBhoEAQwuG0c7BAIBOSIuIAFEARkfLSUbFRsYRwEMPkkrASNCBgExPzczKwgGREIGRxoEAQwaSzwBMFFAOgYEAT4xMB8BUTRDAUUjPhkIAUJBGEUhPjZCBgEnQB0EAQwuG0E9BAIBKHBhY2thZ2U6Y29tcGlsZXIvc3JjL25hdGl2ZS9lbnF1ZXVlLmRhcnQ1c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc3NhL2J1aWxkZXJfa2VybmVsLmRhcnTABCTRLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTpqc19ydW50aW1lL3NoYXJlZC9lbWJlZGRlZF9uYW1lcy5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi9jb2RlZ2VuLmRhcnQnIHNob3cgQ29kZWdlblJlZ2lzdHJ5OwppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL2NvbnN0YW50X3N5c3RlbS5kYXJ0JyBhcyBjb25zdGFudF9zeXN0ZW07CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9kZWZlcnJlZF9sb2FkLmRhcnQnOwppbXBvcnQgJy4uL2R1bXBfaW5mby5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9qdW1wcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaW8vc291cmNlX2luZm9ybWF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL2lyL3N0YXRpY190eXBlLmRhcnQnOwppbXBvcnQgJy4uL2lyL3N0YXRpY190eXBlX3Byb3ZpZGVyLmRhcnQnOwppbXBvcnQgJy4uL2lyL3V0aWwuZGFydCc7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganM7CmltcG9ydCAnLi4vanNfYmFja2VuZC9iYWNrZW5kLmRhcnQnIHNob3cgRnVuY3Rpb25JbmxpbmVDYWNoZTsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2ZpZWxkX2FuYWx5c2lzLmRhcnQnCiAgICBzaG93IEZpZWxkQW5hbHlzaXNEYXRhLCBKRmllbGRBbmFseXNpczsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2ludGVyY2VwdG9yX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9pbmZlcnJlZF9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmFtZXIuZGFydCcgc2hvdyBNb2R1bGFyTmFtZXI7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYXRpdmVfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzX3Jlc29sdXRpb24uZGFydCc7CmltcG9ydCAnLi4vanNfZW1pdHRlci9jb2RlX2VtaXR0ZXJfdGFzay5kYXJ0JyBzaG93IE1vZHVsYXJFbWl0dGVyOwppbXBvcnQgJy4uL2pzX21vZGVsL2xvY2Fscy5kYXJ0JyBzaG93IEp1bXBWaXNpdG9yOwppbXBvcnQgJy4uL2pzX21vZGVsL2VsZW1lbnRzLmRhcnQnIHNob3cgSkdlbmVyYXRvckJvZHk7CmltcG9ydCAnLi4vanNfbW9kZWwvZWxlbWVudF9tYXAuZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvanNfc3RyYXRlZ3kuZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvdHlwZV9yZWNpcGUuZGFydCc7CmltcG9ydCAnLi4va2VybmVsL2ludm9jYXRpb25fbWlycm9yX2NvbnN0YW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9uYXRpdmUvYmVoYXZpb3IuZGFydCc7CmltcG9ydCAnLi4vbmF0aXZlL2pzLmRhcnQnOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vdHJhY2VyLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NhbGxfc3RydWN0dXJlLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2ZlYXR1cmUuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvbWVtYmVyX3VzYWdlLmRhcnQnIHNob3cgTWVtYmVyQWNjZXNzOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NpZGVfZWZmZWN0cy5kYXJ0JyBzaG93IFNpZGVFZmZlY3RzOwppbXBvcnQgJy4uL3VuaXZlcnNlL3RhcmdldF9jaGVja3MuZGFydCcgc2hvdyBUYXJnZXRDaGVja3M7CmltcG9ydCAnLi4vdW5pdmVyc2UvdXNlLmRhcnQnIHNob3cgQ29uc3RhbnRVc2UsIFN0YXRpY1VzZTsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JzsKaW1wb3J0ICdqdW1wX2hhbmRsZXIuZGFydCc7CmltcG9ydCAna2VybmVsX3N0cmluZ19idWlsZGVyLmRhcnQnOwppbXBvcnQgJ2xvY2Fsc19oYW5kbGVyLmRhcnQnOwppbXBvcnQgJ2xvb3BfaGFuZGxlci5kYXJ0JzsKaW1wb3J0ICdub2Rlcy5kYXJ0JzsKaW1wb3J0ICdzc2FfYnJhbmNoX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnc3dpdGNoX2NvbnRpbnVlX2FuYWx5c2lzLmRhcnQnOwppbXBvcnQgJ3R5cGVfYnVpbGRlci5kYXJ0JzsKCi8vIFRPRE8oam9obm5pd2ludGhlcik6IE1lcmdlIHRoaXMgd2l0aCBbS2VybmVsSW5saW5pbmdTdGF0ZV0uCmNsYXNzIFN0YWNrRnJhbWUgewogIGZpbmFsIFN0YWNrRnJhbWUgcGFyZW50OwogIGZpbmFsIE1lbWJlckVudGl0eSBtZW1iZXI7CiAgZmluYWwgQXN5bmNNYXJrZXIgYXN5bmNNYXJrZXI7CiAgZmluYWwgS2VybmVsVG9Mb2NhbHNNYXAgbG9jYWxzTWFwOwogIC8vIFtpci5MZXRdIGFuZCBbaXIuTG9jYWxJbml0aWFsaXplcl0gYmluZGluZ3MuCiAgZmluYWwgTWFwPGlyLlZhcmlhYmxlRGVjbGFyYXRpb24sIEhJbnN0cnVjdGlvbj4gbGV0QmluZGluZ3M7CiAgZmluYWwgS2VybmVsVG9UeXBlSW5mZXJlbmNlTWFwIHR5cGVJbmZlcmVuY2VNYXA7CiAgZmluYWwgU291cmNlSW5mb3JtYXRpb25CdWlsZGVyIHNvdXJjZUluZm9ybWF0aW9uQnVpbGRlcjsKICBmaW5hbCBTdGF0aWNUeXBlUHJvdmlkZXIgc3RhdGljVHlwZVByb3ZpZGVyOwoKICBTdGFja0ZyYW1lKAogICAgICB0aGlzLnBhcmVudCwKICAgICAgdGhpcy5tZW1iZXIsCiAgICAgIHRoaXMuYXN5bmNNYXJrZXIsCiAgICAgIHRoaXMubG9jYWxzTWFwLAogICAgICB0aGlzLmxldEJpbmRpbmdzLAogICAgICB0aGlzLnR5cGVJbmZlcmVuY2VNYXAsCiAgICAgIHRoaXMuc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLAogICAgICB0aGlzLnN0YXRpY1R5cGVQcm92aWRlcik7Cn0KCmNsYXNzIEtlcm5lbFNzYUdyYXBoQnVpbGRlciBleHRlbmRzIGlyLlZpc2l0b3IgewogIC8vLyBIb2xkcyB0aGUgcmVzdWx0aW5nIFNTQSBncmFwaC4KICBmaW5hbCBIR3JhcGggZ3JhcGggPSBuZXcgSEdyYXBoKCk7CgogIC8vLyBUcnVlIGlmIHRoZSBidWlsZGVyIGlzIHByb2Nlc3Npbmcgbm9kZXMgaW5zaWRlIGEgdHJ5IHN0YXRlbWVudC4gVGhpcyBpcwogIC8vLyBpbXBvcnRhbnQgZm9yIGdlbmVyYXRpbmcgY29udHJvbCBmbG93IG91dCBvZiBhIHRyeSBibG9jayBsaWtlIHJldHVybnMgb3IKICAvLy8gYnJlYWtzLgogIGJvb2wgX2luVHJ5U3RhdGVtZW50ID0gZmFsc2U7CgogIC8vLyBVc2VkIHRvIHRyYWNrIHRoZSBsb2NhbHMgd2hpbGUgYnVpbGRpbmcgdGhlIGdyYXBoLgogIExvY2Fsc0hhbmRsZXIgbG9jYWxzSGFuZGxlcjsKCiAgLy8vIEEgc3RhY2sgb2YgaW5zdHJ1Y3Rpb25zLgogIC8vLwogIC8vLyBXZSBidWlsZCB0aGUgU1NBIGdyYXBoIGJ5IHNpbXVsYXRpbmcgYSBzdGFjayBtYWNoaW5lLgogIExpc3Q8SEluc3RydWN0aW9uPiBzdGFjayA9IDxISW5zdHJ1Y3Rpb24+W107CgogIC8vLyBUaGUgY291bnQgb2YgbmVzdGVkIGxvb3BzIHdlIGFyZSBjdXJyZW50bHkgYnVpbGRpbmcuCiAgLy8vCiAgLy8vIFRoZSBsb29wIG5lc3RpbmcgaXMgY29uc3VsdGVkIHdoZW4gaW5saW5pbmcgYSBmdW5jdGlvbiBpbnZvY2F0aW9uLiBUaGUKICAvLy8gaW5saW5pbmcgaGV1cmlzdGljcyB0YWtlIHRoaXMgaW5mb3JtYXRpb24gaW50byBhY2NvdW50LgogIGludCBsb29wRGVwdGggPSAwOwoKICAvLy8gQSBtYXBwaW5nIGZyb20ganVtcCB0YXJnZXRzIHRvIHRoZWlyIGhhbmRsZXJzLgogIE1hcDxKdW1wVGFyZ2V0LCBKdW1wSGFuZGxlcj4ganVtcFRhcmdldHMgPSA8SnVtcFRhcmdldCwgSnVtcEhhbmRsZXI+e307CgogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zOwogIGZpbmFsIERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlcjsKICBmaW5hbCBNb2R1bGFyRW1pdHRlciBfZW1pdHRlcjsKICBmaW5hbCBNb2R1bGFyTmFtZXIgX25hbWVyOwogIGZpbmFsIE1lbWJlckVudGl0eSB0YXJnZXRFbGVtZW50OwogIGZpbmFsIE1lbWJlckVudGl0eSBfaW5pdGlhbFRhcmdldEVsZW1lbnQ7CiAgZmluYWwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkOwogIGZpbmFsIENvZGVnZW5SZWdpc3RyeSByZWdpc3RyeTsKICBmaW5hbCBDbG9zdXJlRGF0YSBfY2xvc3VyZURhdGFMb29rdXA7CiAgZmluYWwgVHJhY2VyIF90cmFjZXI7CiAgZmluYWwgUnVudGltZVR5cGVzRW5jb2RlciBfcnRpRW5jb2RlcjsKCiAgLy8vIEEgc3RhY2sgb2YgW0ludGVyZmFjZVR5cGVdcyB0aGF0IGhhdmUgYmVlbiBzZWVuIGR1cmluZyBpbmxpbmluZyBvZgogIC8vLyBmYWN0b3J5IGNvbnN0cnVjdG9ycy4gIFRoZXNlIHR5cGVzIGFyZSBwcmVzZXJ2ZWQgaW4gW0hJbnZva2VTdGF0aWNdcyBhbmQKICAvLy8gW0hDcmVhdGVdcyBpbnNpZGUgdGhlIGlubGluZSBjb2RlIGFuZCByZWdpc3RlcmVkIGR1cmluZyBjb2RlIGdlbmVyYXRpb24KICAvLy8gZm9yIHRoZXNlIG5vZGVzLgogIC8vIFRPRE8oa2FybGtsb3NlKTogY29uc2lkZXIgcmVtb3ZpbmcgdGhpcyBhbmQga2VlcGluZyB0aGUgKHN1YnN0aXR1dGVkKSB0eXBlcwogIC8vIG9mIHRoZSB0eXBlIHZhcmlhYmxlcyBpbiBhbiBlbnZpcm9ubWVudCAobGlrZSB0aGUgW0xvY2Fsc0hhbmRsZXJdKS4KICBmaW5hbCBMaXN0PEludGVyZmFjZVR5cGU+IF9jdXJyZW50SW1wbGljaXRJbnN0YW50aWF0aW9ucyA9IDxJbnRlcmZhY2VUeXBlPltdOwoKICAvLy8gVXNlZCB0byByZXBvcnQgaW5mb3JtYXRpb24gYWJvdXQgaW5saW5pbmcgKHdoaWNoIG9jY3VycyB3aGlsZSBidWlsZGluZyB0aGUKICAvLy8gU1NBIGdyYXBoKSwgd2hlbiBkdW1wLWluZm8gaXMgZW5hYmxlZC4KICBmaW5hbCBJbmZvUmVwb3J0ZXIgX2luZm9SZXBvcnRlcjsKCiAgSEluc3RydWN0aW9uIF9yZXRocm93YWJsZUV4Y2VwdGlvbjsKCiAgZmluYWwgU291cmNlSW5mb3JtYXRpb25TdHJhdGVneSBfc291cmNlSW5mb3JtYXRpb25TdHJhdGVneTsKICBmaW5hbCBKc1RvRWxlbWVudE1hcCBfZWxlbWVudE1hcDsKICBmaW5hbCBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBnbG9iYWxJbmZlcmVuY2VSZXN1bHRzOwogIExvb3BIYW5kbGVyIF9sb29wSGFuZGxlcjsKICBUeXBlQnVpbGRlciBfdHlwZUJ1aWxkZXI7CgogIC8vLyBUcnVlIGlmIHdlIGFyZSB2aXNpdGluZyB0aGUgZXhwcmVzc2lvbiBvZiBhIHRocm93IHN0YXRlbWVudDsgd2UgYXNzdW1lCiAgLy8vIHRoaXMgaXMgYSBzbG93IHBhdGguCiAgYm9vbCBfaW5FeHByZXNzaW9uT2ZUaHJvdyA9IGZhbHNlOwoKICBmaW5hbCBMaXN0PEtlcm5lbElubGluaW5nU3RhdGU+IF9pbmxpbmluZ1N0YWNrID0gPEtlcm5lbElubGluaW5nU3RhdGU+W107CiAgTG9jYWwgX3JldHVybkxvY2FsOwogIERhcnRUeXBlIF9yZXR1cm5UeXBlOwogIGJvb2wgX2luTGF6eUluaXRpYWxpemVyRXhwcmVzc2lvbiA9IGZhbHNlOwoKICBTdGFja0ZyYW1lIF9jdXJyZW50RnJhbWU7CgogIGZpbmFsIEZ1bmN0aW9uSW5saW5lQ2FjaGUgX2lubGluZUNhY2hlOwogIGZpbmFsIElubGluZURhdGFDYWNoZSBfaW5saW5lRGF0YUNhY2hlOwoKICBLZXJuZWxTc2FHcmFwaEJ1aWxkZXIoCiAgICAgIHRoaXMub3B0aW9ucywKICAgICAgdGhpcy5yZXBvcnRlciwKICAgICAgdGhpcy5faW5pdGlhbFRhcmdldEVsZW1lbnQsCiAgICAgIEludGVyZmFjZVR5cGUgaW5zdGFuY2VUeXBlLAogICAgICB0aGlzLl9pbmZvUmVwb3J0ZXIsCiAgICAgIHRoaXMuX2VsZW1lbnRNYXAsCiAgICAgIHRoaXMuZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cywKICAgICAgdGhpcy5jbG9zZWRXb3JsZCwKICAgICAgdGhpcy5yZWdpc3RyeSwKICAgICAgdGhpcy5fbmFtZXIsCiAgICAgIHRoaXMuX2VtaXR0ZXIsCiAgICAgIHRoaXMuX3RyYWNlciwKICAgICAgdGhpcy5fcnRpRW5jb2RlciwKICAgICAgdGhpcy5fc291cmNlSW5mb3JtYXRpb25TdHJhdGVneSwKICAgICAgdGhpcy5faW5saW5lQ2FjaGUsCiAgICAgIHRoaXMuX2lubGluZURhdGFDYWNoZSkKICAgICAgOiB0aGlzLnRhcmdldEVsZW1lbnQgPSBfZWZmZWN0aXZlVGFyZ2V0RWxlbWVudEZvcihfaW5pdGlhbFRhcmdldEVsZW1lbnQpLAogICAgICAgIHRoaXMuX2Nsb3N1cmVEYXRhTG9va3VwID0gY2xvc2VkV29ybGQuY2xvc3VyZURhdGFMb29rdXAgewogICAgX2VudGVyRnJhbWUodGFyZ2V0RWxlbWVudCwgbnVsbCk7CiAgICB0aGlzLl9sb29wSGFuZGxlciA9IG5ldyBLZXJuZWxMb29wSGFuZGxlcih0aGlzKTsKICAgIF90eXBlQnVpbGRlciA9IG5ldyBLZXJuZWxUeXBlQnVpbGRlcih0aGlzLCBfZWxlbWVudE1hcCk7CiAgICBncmFwaC5lbGVtZW50ID0gdGFyZ2V0RWxlbWVudDsKICAgIGdyYXBoLnNvdXJjZUluZm9ybWF0aW9uID0KICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkVmFyaWFibGVEZWNsYXJhdGlvbigpOwogICAgdGhpcy5sb2NhbHNIYW5kbGVyID0gbmV3IExvY2Fsc0hhbmRsZXIodGhpcywgdGFyZ2V0RWxlbWVudCwgdGFyZ2V0RWxlbWVudCwKICAgICAgICBpbnN0YW5jZVR5cGUsIF9uYXRpdmVEYXRhLCBfaW50ZXJjZXB0b3JEYXRhKTsKICB9CgogIEtlcm5lbFRvTG9jYWxzTWFwIGdldCBfbG9jYWxzTWFwID0+IF9jdXJyZW50RnJhbWUubG9jYWxzTWFwOwoKICBNYXA8aXIuVmFyaWFibGVEZWNsYXJhdGlvbiwgSEluc3RydWN0aW9uPiBnZXQgX2xldEJpbmRpbmdzID0+CiAgICAgIF9jdXJyZW50RnJhbWUubGV0QmluZGluZ3M7CgogIEpDb21tb25FbGVtZW50cyBnZXQgX2NvbW1vbkVsZW1lbnRzID0+IF9lbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzOwoKICBKRWxlbWVudEVudmlyb25tZW50IGdldCBfZWxlbWVudEVudmlyb25tZW50ID0+IF9lbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudDsKCiAgSkZpZWxkQW5hbHlzaXMgZ2V0IF9maWVsZEFuYWx5c2lzID0+IGNsb3NlZFdvcmxkLmZpZWxkQW5hbHlzaXM7CgogIEtlcm5lbFRvVHlwZUluZmVyZW5jZU1hcCBnZXQgX3R5cGVJbmZlcmVuY2VNYXAgPT4KICAgICAgX2N1cnJlbnRGcmFtZS50eXBlSW5mZXJlbmNlTWFwOwoKICBTb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIgZ2V0IF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIgPT4KICAgICAgX2N1cnJlbnRGcmFtZS5zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXI7CgogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IF9hYnN0cmFjdFZhbHVlRG9tYWluID0+CiAgICAgIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW47CgogIE5hdGl2ZURhdGEgZ2V0IF9uYXRpdmVEYXRhID0+IGNsb3NlZFdvcmxkLm5hdGl2ZURhdGE7CgogIEludGVyY2VwdG9yRGF0YSBnZXQgX2ludGVyY2VwdG9yRGF0YSA9PiBjbG9zZWRXb3JsZC5pbnRlcmNlcHRvckRhdGE7CgogIFJ1bnRpbWVUeXBlc05lZWQgZ2V0IF9ydGlOZWVkID0+IGNsb3NlZFdvcmxkLnJ0aU5lZWQ7CgogIEluZmVycmVkRGF0YSBnZXQgX2luZmVycmVkRGF0YSA9PiBnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLmluZmVycmVkRGF0YTsKCiAgRGFydFR5cGVzIGdldCB0eXBlcyA9PiBjbG9zZWRXb3JsZC5kYXJ0VHlwZXM7CgogIHZvaWQgcHVzaChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGFkZChpbnN0cnVjdGlvbik7CiAgICBzdGFjay5hZGQoaW5zdHJ1Y3Rpb24pOwogIH0KCiAgSEluc3RydWN0aW9uIHBvcCgpIHsKICAgIHJldHVybiBzdGFjay5yZW1vdmVMYXN0KCk7CiAgfQoKICAvLy8gUHVzaGVzIGEgYm9vbGVhbiBjaGVja2luZyBbZXhwcmVzc2lvbl0gYWdhaW5zdCBudWxsLgogIHB1c2hDaGVja051bGwoSEluc3RydWN0aW9uIGV4cHJlc3Npb24pIHsKICAgIHB1c2gobmV3IEhJZGVudGl0eShleHByZXNzaW9uLCBncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpLCBudWxsLAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlKSk7CiAgfQoKICBIQmFzaWNCbG9jayBfY3VycmVudDsKCiAgLy8vIFRoZSBjdXJyZW50IGJsb2NrIHRvIGFkZCBpbnN0cnVjdGlvbnMgdG8uIE1pZ2h0IGJlIG51bGwsIGlmIHdlIGFyZQogIC8vLyB2aXNpdGluZyBkZWFkIGNvZGUsIGJ1dCBzZWUgW19pc1JlYWNoYWJsZV0uCiAgSEJhc2ljQmxvY2sgZ2V0IGN1cnJlbnQgPT4gX2N1cnJlbnQ7CgogIHZvaWQgc2V0IGN1cnJlbnQoYykgewogICAgX2lzUmVhY2hhYmxlID0gYyAhPSBudWxsOwogICAgX2N1cnJlbnQgPSBjOwogIH0KCiAgLy8vIFRoZSBtb3N0IHJlY2VudGx5IG9wZW5lZCBibG9jay4gSGFzIHRoZSBzYW1lIHZhbHVlIGFzIFtjdXJyZW50XSB3aGlsZQogIC8vLyB0aGUgYmxvY2sgaXMgb3BlbiwgYnV0IHVubGlrZSBbY3VycmVudF0sIGl0IGlzbid0IGNsZWFyZWQgd2hlbiB0aGUKICAvLy8gY3VycmVudCBibG9jayBpcyBjbG9zZWQuCiAgSEJhc2ljQmxvY2sgbGFzdE9wZW5lZEJsb2NrOwoKICAvLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGN1cnJlbnQgYmxvY2sgaXMgZGVhZCAoYmVjYXVzZSBpdCBoYXMgYSB0aHJvdyBvciBhCiAgLy8vIHJldHVybiBmdXJ0aGVyIHVwKS4gSWYgdGhpcyBpcyBmYWxzZSwgdGhlbiBbY3VycmVudF0gbWF5IGJlIG51bGwuIElmIHRoZQogIC8vLyBibG9jayBpcyBkZWFkIHRoZW4gaXQgbWF5IGFsc28gYmUgYWJvcnRlZCwgYnV0IGZvciBzaW1wbGljaXR5IHdlIG9ubHkKICAvLy8gYWJvcnQgb24gc3RhdGVtZW50IGJvdW5kYXJpZXMsIG5vdCBpbiB0aGUgbWlkZGxlIG9mIGV4cHJlc3Npb25zLiBTZWUKICAvLy8gW2lzQWJvcnRlZF0uCiAgYm9vbCBfaXNSZWFjaGFibGUgPSB0cnVlOwoKICBITG9jYWxWYWx1ZSBsYXN0QWRkZWRQYXJhbWV0ZXI7CgogIE1hcDxMb2NhbCwgSEluc3RydWN0aW9uPiBwYXJhbWV0ZXJzID0gPExvY2FsLCBISW5zdHJ1Y3Rpb24+e307CiAgU2V0PExvY2FsPiBlbGlkZWRQYXJhbWV0ZXJzOwoKICBIQmFzaWNCbG9jayBhZGROZXdCbG9jaygpIHsKICAgIEhCYXNpY0Jsb2NrIGJsb2NrID0gZ3JhcGguYWRkTmV3QmxvY2soKTsKICAgIC8vIElmIGFkZGluZyBhIG5ldyBibG9jayBkdXJpbmcgYnVpbGRpbmcgb2YgYW4gZXhwcmVzc2lvbiwgaXQgaXMgZHVlIHRvCiAgICAvLyBjb25kaXRpb25hbCBleHByZXNzaW9ucyBvciBzaG9ydC1jaXJjdWl0IGxvZ2ljYWwgb3BlcmF0b3JzLgogICAgcmV0dXJuIGJsb2NrOwogIH0KCiAgdm9pZCBvcGVuKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICBibG9jay5vcGVuKCk7CiAgICBjdXJyZW50ID0gYmxvY2s7CiAgICBsYXN0T3BlbmVkQmxvY2sgPSBibG9jazsKICB9CgogIEhCYXNpY0Jsb2NrIGNsb3NlKEhDb250cm9sRmxvdyBlbmQpIHsKICAgIEhCYXNpY0Jsb2NrIHJlc3VsdCA9IGN1cnJlbnQ7CiAgICBjdXJyZW50LmNsb3NlKGVuZCk7CiAgICBjdXJyZW50ID0gbnVsbDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBIQmFzaWNCbG9jayBfY2xvc2VBbmRHb3RvRXhpdChIQ29udHJvbEZsb3cgZW5kKSB7CiAgICBIQmFzaWNCbG9jayByZXN1bHQgPSBjdXJyZW50OwogICAgY3VycmVudC5jbG9zZShlbmQpOwogICAgY3VycmVudCA9IG51bGw7CiAgICByZXN1bHQuYWRkU3VjY2Vzc29yKGdyYXBoLmV4aXQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgZ290byhIQmFzaWNCbG9jayBmcm9tLCBIQmFzaWNCbG9jayB0bykgewogICAgZnJvbS5jbG9zZShuZXcgSEdvdG8oX2Fic3RyYWN0VmFsdWVEb21haW4pKTsKICAgIGZyb20uYWRkU3VjY2Vzc29yKHRvKTsKICB9CgogIGJvb2wgaXNBYm9ydGVkKCkgewogICAgcmV0dXJuIGN1cnJlbnQgPT0gbnVsbDsKICB9CgogIC8vLyBDcmVhdGVzIGEgbmV3IGJsb2NrLCB0cmFuc2l0aW9ucyB0byBpdCBmcm9tIGFueSBjdXJyZW50IGJsb2NrLCBhbmQKICAvLy8gb3BlbnMgdGhlIG5ldyBibG9jay4KICBIQmFzaWNCbG9jayBvcGVuTmV3QmxvY2soKSB7CiAgICBIQmFzaWNCbG9jayBuZXdCbG9jayA9IGFkZE5ld0Jsb2NrKCk7CiAgICBpZiAoIWlzQWJvcnRlZCgpKSBnb3RvKGN1cnJlbnQsIG5ld0Jsb2NrKTsKICAgIG9wZW4obmV3QmxvY2spOwogICAgcmV0dXJuIG5ld0Jsb2NrOwogIH0KCiAgdm9pZCBhZGQoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBjdXJyZW50LmFkZChpbnN0cnVjdGlvbik7CiAgfQoKICBITG9jYWxWYWx1ZSBhZGRQYXJhbWV0ZXIoRW50aXR5IHBhcmFtZXRlciwgQWJzdHJhY3RWYWx1ZSB0eXBlLAogICAgICB7Ym9vbCBpc0VsaWRlZDogZmFsc2V9KSB7CiAgICBITG9jYWxWYWx1ZSByZXN1bHQgPSBpc0VsaWRlZAogICAgICAgID8gbmV3IEhMb2NhbFZhbHVlKHBhcmFtZXRlciwgdHlwZSkKICAgICAgICA6IG5ldyBIUGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyLCB0eXBlKTsKICAgIGlmIChsYXN0QWRkZWRQYXJhbWV0ZXIgPT0gbnVsbCkgewogICAgICBncmFwaC5lbnRyeS5hZGRCZWZvcmUoZ3JhcGguZW50cnkuZmlyc3QsIHJlc3VsdCk7CiAgICB9IGVsc2UgewogICAgICBncmFwaC5lbnRyeS5hZGRBZnRlcihsYXN0QWRkZWRQYXJhbWV0ZXIsIHJlc3VsdCk7CiAgICB9CiAgICBsYXN0QWRkZWRQYXJhbWV0ZXIgPSByZXN1bHQ7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgSFN1YkdyYXBoQmxvY2tJbmZvcm1hdGlvbiB3cmFwU3RhdGVtZW50R3JhcGgoU3ViR3JhcGggc3RhdGVtZW50cykgewogICAgaWYgKHN0YXRlbWVudHMgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gbmV3IEhTdWJHcmFwaEJsb2NrSW5mb3JtYXRpb24oc3RhdGVtZW50cyk7CiAgfQoKICBIU3ViRXhwcmVzc2lvbkJsb2NrSW5mb3JtYXRpb24gd3JhcEV4cHJlc3Npb25HcmFwaChTdWJFeHByZXNzaW9uIGV4cHJlc3Npb24pIHsKICAgIGlmIChleHByZXNzaW9uID09IG51bGwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIG5ldyBIU3ViRXhwcmVzc2lvbkJsb2NrSW5mb3JtYXRpb24oZXhwcmVzc2lvbik7CiAgfQoKICBITGl0ZXJhbExpc3QgX2J1aWxkTGl0ZXJhbExpc3QoTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cykgewogICAgcmV0dXJuIG5ldyBITGl0ZXJhbExpc3QoaW5wdXRzLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ncm93YWJsZUxpc3RUeXBlKTsKICB9CgogIEhJbnN0cnVjdGlvbiBfY2FsbFNldFJ1bnRpbWVUeXBlSW5mb1dpdGhUeXBlQXJndW1lbnRzKAogICAgICBJbnRlcmZhY2VUeXBlIHR5cGUsCiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBydGlJbnB1dHMsCiAgICAgIEhJbnN0cnVjdGlvbiBuZXdPYmplY3QsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBpZiAoIV9ydGlOZWVkLmNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKHR5cGUuZWxlbWVudCkpIHsKICAgICAgcmV0dXJuIG5ld09iamVjdDsKICAgIH0KCiAgICBISW5zdHJ1Y3Rpb24gdHlwZUluZm8gPSBuZXcgSFR5cGVJbmZvRXhwcmVzc2lvbigKICAgICAgICBUeXBlSW5mb0V4cHJlc3Npb25LaW5kLklOU1RBTkNFLAogICAgICAgIGNsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZSh0eXBlLmVsZW1lbnQpLAogICAgICAgIHJ0aUlucHV0cywKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSk7CiAgICBhZGQodHlwZUluZm8pOwogICAgcmV0dXJuIF9jYWxsU2V0UnVudGltZVR5cGVJbmZvKHR5cGVJbmZvLCBuZXdPYmplY3QsIHNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIC8vLyBDYWxsZWQgd2hlbiBjb250cm9sIGZsb3cgaXMgYWJvdXQgdG8gY2hhbmdlLCBpbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8KICAvLy8gc3BlY2lmeSBzcGVjaWFsIHN1Y2Nlc3NvcnMgaWYgd2UgYXJlIGFscmVhZHkgaW4gYSB0cnkvY2F0Y2gvZmluYWxseSBibG9jay4KICB2b2lkIF9oYW5kbGVJblRyeVN0YXRlbWVudCgpIHsKICAgIGlmICghX2luVHJ5U3RhdGVtZW50KSByZXR1cm47CiAgICBIQmFzaWNCbG9jayBibG9jayA9IGNsb3NlKG5ldyBIRXhpdFRyeShfYWJzdHJhY3RWYWx1ZURvbWFpbikpOwogICAgSEJhc2ljQmxvY2sgbmV3QmxvY2sgPSBncmFwaC5hZGROZXdCbG9jaygpOwogICAgYmxvY2suYWRkU3VjY2Vzc29yKG5ld0Jsb2NrKTsKICAgIG9wZW4obmV3QmxvY2spOwogIH0KCiAgLy8vIEhlbHBlciB0byBpbXBsZW1lbnQgSlNfR0VUX0ZMQUcuCiAgLy8vCiAgLy8vIFRoZSBjb25jcmV0ZSBTU0EgZ3JhcGggYnVpbGRlciB3aWxsIGV4dHJhY3QgYSBmbGFnIHBhcmFtZXRlciBmcm9tIHRoZQogIC8vLyBKU19HRVRfRkxBRyBjYWxsIGFuZCB0aGVuIHB1c2ggYSBib29sZWFuIHJlc3VsdCBvbnRvIHRoZSBzdGFjay4gVGhpcwogIC8vLyBmdW5jdGlvbiBwcm92aWRlcyB0aGUgYm9vbGVhbiB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBbZmxhZ05hbWVdLgogIC8vLyBJZiBbZmxhZ05hbWVdIGlzIG5vdCByZWNvZ25pemVkLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYG51bGxgIGFuZCB0aGUKICAvLy8gY29uY3JldGUgU1NBIGJ1aWxkZXIgcmVwb3J0cyBhbiBlcnJvci4KICBib29sIF9nZXRGbGFnVmFsdWUoU3RyaW5nIGZsYWdOYW1lKSB7CiAgICBzd2l0Y2ggKGZsYWdOYW1lKSB7CiAgICAgIGNhc2UgJ01JTklGSUVEJzoKICAgICAgICByZXR1cm4gb3B0aW9ucy5lbmFibGVNaW5pZmljYXRpb247CiAgICAgIGNhc2UgJ01VU1RfUkVUQUlOX01FVEFEQVRBJzoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGNhc2UgJ1VTRV9DT05URU5UX1NFQ1VSSVRZX1BPTElDWSc6CiAgICAgICAgcmV0dXJuIG9wdGlvbnMudXNlQ29udGVudFNlY3VyaXR5UG9saWN5OwogICAgICBjYXNlICdVU0VfTkVXX1JUSSc6CiAgICAgICAgcmV0dXJuIG9wdGlvbnMuZXhwZXJpbWVudE5ld1J0aTsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIFN0YXRpY1R5cGUgX2dldFN0YXRpY1R5cGUoaXIuRXhwcmVzc2lvbiBub2RlKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdWJzdGl0dXRlIHRoZSB0eXBlIGJ5IHRoZSB0aGlzIHR5cGUgYW5kIHR5cGUKICAgIC8vIGFyZ3VtZW50cyBvZiB0aGUgY3VycmVudCBmcmFtZS4KICAgIGlyLkRhcnRUeXBlIHR5cGUgPSBfY3VycmVudEZyYW1lLnN0YXRpY1R5cGVQcm92aWRlci5nZXRTdGF0aWNUeXBlKG5vZGUpOwogICAgcmV0dXJuIG5ldyBTdGF0aWNUeXBlKAogICAgICAgIF9lbGVtZW50TWFwLmdldERhcnRUeXBlKHR5cGUpLCBjb21wdXRlQ2xhc3NSZWxhdGlvbkZyb21UeXBlKHR5cGUpKTsKICB9CgogIFN0YXRpY1R5cGUgX2dldFN0YXRpY0ZvckluSXRlcmF0b3JUeXBlKGlyLkZvckluU3RhdGVtZW50IG5vZGUpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1YnN0aXR1dGUgdGhlIHR5cGUgYnkgdGhlIHRoaXMgdHlwZSBhbmQgdHlwZQogICAgLy8gYXJndW1lbnRzIG9mIHRoZSBjdXJyZW50IGZyYW1lLgogICAgaXIuRGFydFR5cGUgdHlwZSA9CiAgICAgICAgX2N1cnJlbnRGcmFtZS5zdGF0aWNUeXBlUHJvdmlkZXIuZ2V0Rm9ySW5JdGVyYXRvclR5cGUobm9kZSk7CiAgICByZXR1cm4gbmV3IFN0YXRpY1R5cGUoCiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0RGFydFR5cGUodHlwZSksIGNvbXB1dGVDbGFzc1JlbGF0aW9uRnJvbVR5cGUodHlwZSkpOwogIH0KCiAgc3RhdGljIE1lbWJlckVudGl0eSBfZWZmZWN0aXZlVGFyZ2V0RWxlbWVudEZvcihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBpZiAobWVtYmVyIGlzIEpHZW5lcmF0b3JCb2R5KSByZXR1cm4gbWVtYmVyLmZ1bmN0aW9uOwogICAgcmV0dXJuIG1lbWJlcjsKICB9CgogIHZvaWQgX2VudGVyRnJhbWUoCiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIsIFNvdXJjZUluZm9ybWF0aW9uIGNhbGxTb3VyY2VJbmZvcm1hdGlvbikgewogICAgQXN5bmNNYXJrZXIgYXN5bmNNYXJrZXIgPSBBc3luY01hcmtlci5TWU5DOwogICAgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uID0gZ2V0RnVuY3Rpb25Ob2RlKF9lbGVtZW50TWFwLCBtZW1iZXIpOwogICAgaWYgKGZ1bmN0aW9uICE9IG51bGwpIHsKICAgICAgYXN5bmNNYXJrZXIgPSBnZXRBc3luY01hcmtlcihmdW5jdGlvbik7CiAgICB9CiAgICBfY3VycmVudEZyYW1lID0gbmV3IFN0YWNrRnJhbWUoCiAgICAgICAgX2N1cnJlbnRGcmFtZSwKICAgICAgICBtZW1iZXIsCiAgICAgICAgYXN5bmNNYXJrZXIsCiAgICAgICAgY2xvc2VkV29ybGQuZ2xvYmFsTG9jYWxzTWFwLmdldExvY2Fsc01hcChtZW1iZXIpLAogICAgICAgIHt9LAogICAgICAgIG5ldyBLZXJuZWxUb1R5cGVJbmZlcmVuY2VNYXBJbXBsKG1lbWJlciwgZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cyksCiAgICAgICAgX2N1cnJlbnRGcmFtZSAhPSBudWxsCiAgICAgICAgICAgID8gX2N1cnJlbnRGcmFtZS5zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIKICAgICAgICAgICAgICAgIC5mb3JDb250ZXh0KG1lbWJlciwgY2FsbFNvdXJjZUluZm9ybWF0aW9uKQogICAgICAgICAgICA6IF9zb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5LmNyZWF0ZUJ1aWxkZXJGb3JDb250ZXh0KG1lbWJlciksCiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U3RhdGljVHlwZVByb3ZpZGVyKG1lbWJlcikpOwogIH0KCiAgdm9pZCBfbGVhdmVGcmFtZSgpIHsKICAgIF9jdXJyZW50RnJhbWUgPSBfY3VycmVudEZyYW1lLnBhcmVudDsKICB9CgogIEhHcmFwaCBidWlsZCgpIHsKICAgIHJldHVybiByZXBvcnRlci53aXRoQ3VycmVudEVsZW1lbnQoX2xvY2Fsc01hcC5jdXJyZW50TWVtYmVyLCAoKSB7CiAgICAgIC8vIFRPRE8oaGV0KTogbm8gcmVhc29uIHRvIGRvIHRoaXMgaGVyZS4uLgogICAgICBISW5zdHJ1Y3Rpb24uaWRDb3VudGVyID0gMDsKICAgICAgTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uID0KICAgICAgICAgIF9lbGVtZW50TWFwLmdldE1lbWJlckRlZmluaXRpb24oX2luaXRpYWxUYXJnZXRFbGVtZW50KTsKCiAgICAgIHN3aXRjaCAoZGVmaW5pdGlvbi5raW5kKSB7CiAgICAgICAgY2FzZSBNZW1iZXJLaW5kLnJlZ3VsYXI6CiAgICAgICAgY2FzZSBNZW1iZXJLaW5kLmNsb3N1cmVDYWxsOgogICAgICAgICAgaXIuTm9kZSB0YXJnZXQgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgICBpZiAodGFyZ2V0IGlzIGlyLlByb2NlZHVyZSkgewogICAgICAgICAgICBpZiAodGFyZ2V0LmlzRXh0ZXJuYWwpIHsKICAgICAgICAgICAgICBfYnVpbGRFeHRlcm5hbEZ1bmN0aW9uTm9kZSgKICAgICAgICAgICAgICAgICAgdGFyZ2V0RWxlbWVudCwgX2Vuc3VyZURlZmF1bHRBcmd1bWVudFZhbHVlcyh0YXJnZXQuZnVuY3Rpb24pKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBfYnVpbGRGdW5jdGlvbk5vZGUoCiAgICAgICAgICAgICAgICAgIHRhcmdldEVsZW1lbnQsIF9lbnN1cmVEZWZhdWx0QXJndW1lbnRWYWx1ZXModGFyZ2V0LmZ1bmN0aW9uKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0IGlzIGlyLkZpZWxkKSB7CiAgICAgICAgICAgIEZpZWxkQW5hbHlzaXNEYXRhIGZpZWxkRGF0YSA9CiAgICAgICAgICAgICAgICBjbG9zZWRXb3JsZC5maWVsZEFuYWx5c2lzLmdldEZpZWxkRGF0YSh0YXJnZXRFbGVtZW50KTsKCiAgICAgICAgICAgIGlmIChmaWVsZERhdGEuaW5pdGlhbFZhbHVlICE9IG51bGwpIHsKICAgICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckNvbnN0YW50VXNlKAogICAgICAgICAgICAgICAgICBuZXcgQ29uc3RhbnRVc2UuaW5pdChmaWVsZERhdGEuaW5pdGlhbFZhbHVlKSk7CiAgICAgICAgICAgICAgaWYgKHRhcmdldEVsZW1lbnQuaXNTdGF0aWMgfHwgdGFyZ2V0RWxlbWVudC5pc1RvcExldmVsKSB7CiAgICAgICAgICAgICAgICAvLy8gTm8gY29kZSBpcyBjcmVhdGVkIGZvciB0aGlzIGZpZWxkOiBBbGwgcmVmZXJlbmNlcyBpbmxpbmUgdGhlCiAgICAgICAgICAgICAgICAvLy8gY29uc3RhbnQgdmFsdWUuCiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGREYXRhLmlzTGF6eSkgewogICAgICAgICAgICAgIC8vIFRoZSBnZW5lcmF0ZWQgaW5pdGlhbGl6ZXIgbmVlZHMgYmUgd3JhcHBlZCBpbiB0aGUgY3ljbGljLWVycm9yCiAgICAgICAgICAgICAgLy8gaGVscGVyLgogICAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKAogICAgICAgICAgICAgICAgICBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5jeWNsaWNUaHJvd0hlbHBlciwKICAgICAgICAgICAgICAgICAgQ2FsbFN0cnVjdHVyZS5PTkVfQVJHKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRhcmdldEVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlcikgewogICAgICAgICAgICAgIGlmIChmaWVsZERhdGEuaXNFZmZlY3RpdmVseUZpbmFsIHx8CiAgICAgICAgICAgICAgICAgICFjbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGEKICAgICAgICAgICAgICAgICAgICAgIC5nZXRQYXJhbWV0ZXJDaGVja1BvbGljeSh0YXJnZXRFbGVtZW50KQogICAgICAgICAgICAgICAgICAgICAgLmlzRW1pdHRlZCkgewogICAgICAgICAgICAgICAgLy8gTm8gbmVlZCBmb3IgYSBjaGVja2VkIHNldHRlci4KICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBfYnVpbGRGaWVsZCh0YXJnZXQpOwogICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgaXMgaXIuTG9jYWxGdW5jdGlvbikgewogICAgICAgICAgICBfYnVpbGRGdW5jdGlvbk5vZGUoCiAgICAgICAgICAgICAgICB0YXJnZXRFbGVtZW50LCBfZW5zdXJlRGVmYXVsdEFyZ3VtZW50VmFsdWVzKHRhcmdldC5mdW5jdGlvbikpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3cgJ05vIGNhc2UgaW1wbGVtZW50ZWQgdG8gaGFuZGxlIHRhcmdldDogJwogICAgICAgICAgICAgICAgJyR0YXJnZXQgZm9yICR0YXJnZXRFbGVtZW50JzsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTWVtYmVyS2luZC5jb25zdHJ1Y3RvcjoKICAgICAgICAgIGlyLkNvbnN0cnVjdG9yIGNvbnN0cnVjdG9yID0gZGVmaW5pdGlvbi5ub2RlOwogICAgICAgICAgX2Vuc3VyZURlZmF1bHRBcmd1bWVudFZhbHVlcyhjb25zdHJ1Y3Rvci5mdW5jdGlvbik7CiAgICAgICAgICBfYnVpbGRDb25zdHJ1Y3Rvcih0YXJnZXRFbGVtZW50LCBjb25zdHJ1Y3Rvcik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIE1lbWJlcktpbmQuY29uc3RydWN0b3JCb2R5OgogICAgICAgICAgaXIuQ29uc3RydWN0b3IgY29uc3RydWN0b3IgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgICBfZW5zdXJlRGVmYXVsdEFyZ3VtZW50VmFsdWVzKGNvbnN0cnVjdG9yLmZ1bmN0aW9uKTsKICAgICAgICAgIF9idWlsZENvbnN0cnVjdG9yQm9keShjb25zdHJ1Y3Rvcik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIE1lbWJlcktpbmQuY2xvc3VyZUZpZWxkOgogICAgICAgICAgLy8gQ2xvc3VyZSBmaWVsZHMgaGF2ZSBubyBzZXR0ZXIgYW5kIHRoZXJlZm9yZSBuZXZlciByZXF1aXJlIGFueSBjb2RlLgogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgY2FzZSBNZW1iZXJLaW5kLnNpZ25hdHVyZToKICAgICAgICAgIGlyLk5vZGUgdGFyZ2V0ID0gZGVmaW5pdGlvbi5ub2RlOwogICAgICAgICAgaXIuRnVuY3Rpb25Ob2RlIG9yaWdpbmFsQ2xvc3VyZU5vZGU7CiAgICAgICAgICBpZiAodGFyZ2V0IGlzIGlyLlByb2NlZHVyZSkgewogICAgICAgICAgICBvcmlnaW5hbENsb3N1cmVOb2RlID0gdGFyZ2V0LmZ1bmN0aW9uOwogICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgaXMgaXIuTG9jYWxGdW5jdGlvbikgewogICAgICAgICAgICBvcmlnaW5hbENsb3N1cmVOb2RlID0gdGFyZ2V0LmZ1bmN0aW9uOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgICAgICB0YXJnZXRFbGVtZW50LAogICAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgZnVuY3Rpb24gc2lnbmF0dXJlOiAiCiAgICAgICAgICAgICAgICAiJHRhcmdldEVsZW1lbnQgaW5zaWRlIGEgbm9uLWNsb3N1cmU6ICR0YXJnZXQiKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChvcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpIHsKICAgICAgICAgICAgX2J1aWxkTWV0aG9kU2lnbmF0dXJlTmV3UnRpKG9yaWdpbmFsQ2xvc3VyZU5vZGUpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX2J1aWxkTWV0aG9kU2lnbmF0dXJlKG9yaWdpbmFsQ2xvc3VyZU5vZGUpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNZW1iZXJLaW5kLmdlbmVyYXRvckJvZHk6CiAgICAgICAgICBfYnVpbGRHZW5lcmF0b3JCb2R5KAogICAgICAgICAgICAgIF9pbml0aWFsVGFyZ2V0RWxlbWVudCwgX2Z1bmN0aW9uTm9kZU9mKGRlZmluaXRpb24ubm9kZSkpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgYXNzZXJ0KGdyYXBoLmlzVmFsaWQoKSwgIkludmFsaWQgZ3JhcGggZm9yICRfaW5pdGlhbFRhcmdldEVsZW1lbnQuIik7CgogICAgICBpZiAoX3RyYWNlci5pc0VuYWJsZWQpIHsKICAgICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gX2luaXRpYWxUYXJnZXRFbGVtZW50OwogICAgICAgIFN0cmluZyBuYW1lID0gbWVtYmVyLm5hbWU7CiAgICAgICAgaWYgKG1lbWJlci5pc0luc3RhbmNlTWVtYmVyIHx8CiAgICAgICAgICAgIG1lbWJlci5pc0NvbnN0cnVjdG9yIHx8CiAgICAgICAgICAgIG1lbWJlci5pc1N0YXRpYykgewogICAgICAgICAgbmFtZSA9ICIke21lbWJlci5lbmNsb3NpbmdDbGFzcy5uYW1lfS4kbmFtZSI7CiAgICAgICAgICBpZiAoZGVmaW5pdGlvbi5raW5kID09IE1lbWJlcktpbmQuY29uc3RydWN0b3JCb2R5KSB7CiAgICAgICAgICAgIG5hbWUgKz0gIiAoYm9keSkiOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBfdHJhY2VyLnRyYWNlQ29tcGlsYXRpb24obmFtZSk7CiAgICAgICAgX3RyYWNlci50cmFjZUdyYXBoKCdidWlsZGVyJywgZ3JhcGgpOwogICAgICB9CgogICAgICByZXR1cm4gZ3JhcGg7CiAgICB9KTsKICB9CgogIGlyLkZ1bmN0aW9uTm9kZSBfZnVuY3Rpb25Ob2RlT2YoaXIuVHJlZU5vZGUgbm9kZSkgewogICAgaWYgKG5vZGUgaXMgaXIuTWVtYmVyKSByZXR1cm4gbm9kZS5mdW5jdGlvbjsKICAgIGlmIChub2RlIGlzIGlyLkxvY2FsRnVuY3Rpb24pIHJldHVybiBub2RlLmZ1bmN0aW9uOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBpci5GdW5jdGlvbk5vZGUgX2Vuc3VyZURlZmF1bHRBcmd1bWVudFZhbHVlcyhpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb24pIHsKICAgIC8vIFJlZ2lzdGVyIGFsbCBbZnVuY3Rpb25dJ3MgZGVmYXVsdCBhcmd1bWVudCB2YWx1ZXMuCiAgICAvLwogICAgLy8gRGVmYXVsdCB2YWx1ZXMgbWlnaHQgYmUgKG9yIGNvbnRhaW4pIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgcmVmZXJlbmNlZAogICAgLy8gZnJvbSBhbnl3aGVyZSBlbHNlIHNvIHdlIG5lZWQgdG8gZW5zdXJlIHRoZXNlIGFyZSBlbnF1ZXVlZC4gIFN0dWJzIGFuZAogICAgLy8gYEZ1bmN0aW9uLmFwcGx5YCBkYXRhIGFyZSBjcmVhdGVkIGFmdGVyIHRoZSBjb2RlZ2VuIHF1ZXVlIGlzIGNsb3NlZCwgc28KICAgIC8vIHdlIGZvcmNlIHRoZXNlIGZ1bmN0aW9ucyBpbnRvIHRoZSBxdWV1ZSBieSByZWdpc3RlcmluZyB0aGUgY29uc3RhbnRzIGFzCiAgICAvLyB1c2VkIGluIGFkdmFuY2UuIFNlZSBsYW5ndWFnZS9jeWNsaWNfZGVmYXVsdF92YWx1ZXNfdGVzdC5kYXJ0IGZvciBhbgogICAgLy8gZXhhbXBsZS4KICAgIC8vCiAgICAvLyBUT0RPKHNyYSk6IFdlIGNvdWxkIGJlIG1vcmUgcHJlY2lzZSBpZiBzdHVicyBhbmQgYEZ1bmN0aW9uLmFwcGx5YCBkYXRhCiAgICAvLyB3ZXJlIGdlbmVyYXRlZCBieSB0aGUgY29kZWdlbiBlbnF1ZXVlci4gSW4gcHJhY3RpY2UgZXZlbiBpbiBodWdlIHByb2dyYW1zCiAgICAvLyB0aGVyZSBhcmUgb25seSB2ZXJ5IHNtYWxsIG51bWJlciBvZiBjb25zdGFudHMgY3JlYXRlZCBoZXJlIHRoYXQgYXJlIG5vdAogICAgLy8gYWN0dWFsbHkgdXNlZC4KICAgIHZvaWQgX3JlZ2lzdGVyRGVmYXVsdFZhbHVlKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50VmFsdWUgPQogICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0Q29uc3RhbnRWYWx1ZShub2RlLmluaXRpYWxpemVyLCBpbXBsaWNpdE51bGw6IHRydWUpOwogICAgICBhc3NlcnQoCiAgICAgICAgICBjb25zdGFudFZhbHVlICE9IG51bGwsCiAgICAgICAgICBmYWlsZWRBdChfZWxlbWVudE1hcC5nZXRNZXRob2QoZnVuY3Rpb24ucGFyZW50KSwKICAgICAgICAgICAgICAnTm8gY29uc3RhbnQgY29tcHV0ZWQgZm9yICRub2RlJykpOwogICAgICByZWdpc3RyeT8ucmVnaXN0ZXJDb25zdGFudFVzZShuZXcgQ29uc3RhbnRVc2UuaW5pdChjb25zdGFudFZhbHVlKSk7CiAgICB9CgogICAgZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMKICAgICAgICAuc2tpcChmdW5jdGlvbi5yZXF1aXJlZFBhcmFtZXRlckNvdW50KQogICAgICAgIC5mb3JFYWNoKF9yZWdpc3RlckRlZmF1bHRWYWx1ZSk7CiAgICBmdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMuZm9yRWFjaChfcmVnaXN0ZXJEZWZhdWx0VmFsdWUpOwogICAgcmV0dXJuIGZ1bmN0aW9uOwogIH0KCiAgdm9pZCBfYnVpbGRGaWVsZChpci5GaWVsZCBub2RlKSB7CiAgICBfaW5MYXp5SW5pdGlhbGl6ZXJFeHByZXNzaW9uID0gbm9kZS5pc1N0YXRpYzsKICAgIEZpZWxkRW50aXR5IGZpZWxkID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyKG5vZGUpOwogICAgX29wZW5GdW5jdGlvbihmaWVsZCwgY2hlY2tzOiBUYXJnZXRDaGVja3Mubm9uZSk7CiAgICBpZiAobm9kZS5pc0luc3RhbmNlTWVtYmVyICYmCiAgICAgICAgY2xvc2VkV29ybGQuYW5ub3RhdGlvbnNEYXRhLmdldFBhcmFtZXRlckNoZWNrUG9saWN5KGZpZWxkKS5pc0VtaXR0ZWQpIHsKICAgICAgSEluc3RydWN0aW9uIHRoaXNJbnN0cnVjdGlvbiA9IGxvY2Fsc0hhbmRsZXIucmVhZFRoaXMoCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEdldChub2RlKSk7CiAgICAgIC8vIFVzZSBkeW5hbWljIHR5cGUgYmVjYXVzZSB0aGUgdHlwZSBjb21wdXRlZCBieSB0aGUgaW5mZXJyZXIgaXMKICAgICAgLy8gbmFycm93ZWQgdG8gdGhlIHR5cGUgYW5ub3RhdGlvbi4KICAgICAgSEluc3RydWN0aW9uIHBhcmFtZXRlciA9CiAgICAgICAgICBuZXcgSFBhcmFtZXRlclZhbHVlKGZpZWxkLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSk7CiAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyIGFzIHRoZSBsYXN0IGluc3RydWN0aW9uIG9mIHRoZSBlbnRyeSBibG9jay4KICAgICAgLy8gSWYgdGhlIG1ldGhvZCBpcyBpbnRlcmNlcHRlZCwgd2Ugd2FudCB0aGUgYWN0dWFsIHJlY2VpdmVyCiAgICAgIC8vIHRvIGJlIHRoZSBmaXJzdCBwYXJhbWV0ZXIuCiAgICAgIGdyYXBoLmVudHJ5LmFkZEJlZm9yZShncmFwaC5lbnRyeS5sYXN0LCBwYXJhbWV0ZXIpOwogICAgICBISW5zdHJ1Y3Rpb24gdmFsdWUgPSBfdHlwZUJ1aWxkZXIucG90ZW50aWFsbHlDaGVja09yVHJ1c3RUeXBlT2ZQYXJhbWV0ZXIoCiAgICAgICAgICBmaWVsZCwgcGFyYW1ldGVyLCBfZ2V0RGFydFR5cGVJZlZhbGlkKG5vZGUudHlwZSkpOwogICAgICBpZiAoIV9maWVsZEFuYWx5c2lzLmdldEZpZWxkRGF0YShmaWVsZCkuaXNFbGlkZWQpIHsKICAgICAgICBhZGQobmV3IEhGaWVsZFNldChfYWJzdHJhY3RWYWx1ZURvbWFpbiwgZmllbGQsIHRoaXNJbnN0cnVjdGlvbiwgdmFsdWUpKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaWYgKG5vZGUuaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICAgIG5vZGUuaW5pdGlhbGl6ZXIuYWNjZXB0KHRoaXMpOwogICAgICAgIEhJbnN0cnVjdGlvbiBmaWVsZFZhbHVlID0gcG9wKCk7CiAgICAgICAgSEluc3RydWN0aW9uIGNoZWNrSW5zdHJ1Y3Rpb24gPQogICAgICAgICAgICBfdHlwZUJ1aWxkZXIucG90ZW50aWFsbHlDaGVja09yVHJ1c3RUeXBlT2ZBc3NpZ25tZW50KAogICAgICAgICAgICAgICAgZmllbGQsIGZpZWxkVmFsdWUsIF9nZXREYXJ0VHlwZUlmVmFsaWQobm9kZS50eXBlKSk7CiAgICAgICAgc3RhY2suYWRkKGNoZWNrSW5zdHJ1Y3Rpb24pOwogICAgICB9IGVsc2UgewogICAgICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpKTsKICAgICAgfQogICAgICBISW5zdHJ1Y3Rpb24gdmFsdWUgPSBwb3AoKTsKICAgICAgX2Nsb3NlQW5kR290b0V4aXQobmV3IEhSZXR1cm4oX2Fic3RyYWN0VmFsdWVEb21haW4sIHZhbHVlLAogICAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZFJldHVybihub2RlKSkpOwogICAgfQogICAgX2Nsb3NlRnVuY3Rpb24oKTsKICB9CgogIERhcnRUeXBlIF9nZXREYXJ0VHlwZUlmVmFsaWQoaXIuRGFydFR5cGUgdHlwZSkgewogICAgaWYgKHR5cGUgaXMgaXIuSW52YWxpZFR5cGUpIHJldHVybiBudWxsOwogICAgcmV0dXJuIF9lbGVtZW50TWFwLmdldERhcnRUeXBlKHR5cGUpOwogIH0KCiAgLy8vIFBvcHMgdGhlIG1vc3QgcmVjZW50IGluc3RydWN0aW9uIGZyb20gdGhlIHN0YWNrIGFuZCBlbnN1cmVzIHRoYXQgaXQgaXMgYQogIC8vLyBub24tbnVsbCBib29sLgogIEhJbnN0cnVjdGlvbiBwb3BCb29saWZpZWQoKSB7CiAgICBISW5zdHJ1Y3Rpb24gdmFsdWUgPSBwb3AoKTsKICAgIHJldHVybiBfdHlwZUJ1aWxkZXIucG90ZW50aWFsbHlDaGVja09yVHJ1c3RUeXBlT2ZDb25kaXRpb24oCiAgICAgICAgX2N1cnJlbnRGcmFtZS5tZW1iZXIsIHZhbHVlKTsKICB9CgogIC8vLyBFeHRlbmQgY3VycmVudCBtZXRob2QgcGFyYW1ldGVycyB3aXRoIHBhcmFtZXRlcnMgZm9yIHRoZSBjbGFzcyB0eXBlCiAgLy8vIHBhcmFtZXRlcnMuICBJZiB0aGUgY2xhc3MgaGFzIHR5cGUgcGFyYW1ldGVycyBidXQgZG9lcyBub3QgbmVlZCB0aGVtLCBiaW5kCiAgLy8vIHRvIGBkeW5hbWljYCAocmVwcmVzZW50ZWQgYXMgYG51bGxgKSBzbyB0aGUgYmluZGluZ3MgYXJlIGF2YWlsYWJsZSBmb3IKICAvLy8gYnVpbGRpbmcgdHlwZXMgdXAgdGhlIGluaGVyaXRhbmNlIGNoYWluIG9mIGdlbmVyYXRpdmUgY29uc3RydWN0b3JzLgogIHZvaWQgX2FkZENsYXNzVHlwZVZhcmlhYmxlc0lmTmVlZGVkKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIGlmICghbWVtYmVyLmlzQ29uc3RydWN0b3IgJiYgbWVtYmVyIGlzISBDb25zdHJ1Y3RvckJvZHlFbnRpdHkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgQ2xhc3NFbnRpdHkgY2xzID0gbWVtYmVyLmVuY2xvc2luZ0NsYXNzOwogICAgSW50ZXJmYWNlVHlwZSB0aGlzVHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0VGhpc1R5cGUoY2xzKTsKICAgIGlmICh0aGlzVHlwZS50eXBlQXJndW1lbnRzLmlzRW1wdHkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgYm9vbCBuZWVkc1R5cGVBcmd1bWVudHMgPSBfcnRpTmVlZC5jbGFzc05lZWRzVHlwZUFyZ3VtZW50cyhjbHMpOwogICAgdGhpc1R5cGUudHlwZUFyZ3VtZW50cy5mb3JFYWNoKChEYXJ0VHlwZSBfdHlwZVZhcmlhYmxlKSB7CiAgICAgIFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlVHlwZSA9IF90eXBlVmFyaWFibGU7CiAgICAgIEhJbnN0cnVjdGlvbiBwYXJhbTsKICAgICAgaWYgKG5lZWRzVHlwZUFyZ3VtZW50cykgewogICAgICAgIHBhcmFtID0gYWRkUGFyYW1ldGVyKAogICAgICAgICAgICB0eXBlVmFyaWFibGVUeXBlLmVsZW1lbnQsIF9hYnN0cmFjdFZhbHVlRG9tYWluLm5vbk51bGxUeXBlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBVbnVzZWQsIHNvIGJpbmQgdG8gYGR5bmFtaWNgLgogICAgICAgIHBhcmFtID0gZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKTsKICAgICAgfQogICAgICBMb2NhbCBsb2NhbCA9IGxvY2Fsc0hhbmRsZXIuZ2V0VHlwZVZhcmlhYmxlQXNMb2NhbCh0eXBlVmFyaWFibGVUeXBlKTsKICAgICAgbG9jYWxzSGFuZGxlci5kaXJlY3RMb2NhbHNbbG9jYWxdID0gcGFyYW07CiAgICB9KTsKICB9CgogIC8vLyBFeHRlbmQgY3VycmVudCBtZXRob2QgcGFyYW1ldGVycyB3aXRoIHBhcmFtZXRlcnMgZm9yIHRoZSBmdW5jdGlvbiB0eXBlCiAgLy8vIHZhcmlhYmxlcy4KICAvLy8KICAvLy8gVE9ETyhqb2hubml3aW50aGVyKTogRG8gd2UgbmVlZCB0aGlzPwogIC8vLyBJZiB0aGUgbWV0aG9kIGhhcyB0eXBlIHZhcmlhYmxlcyBidXQgZG9lcyBub3QgbmVlZCB0aGVtLCBiaW5kIHRvIGBkeW5hbWljYAogIC8vLyAocmVwcmVzZW50ZWQgYXMgYG51bGxgKS4KICB2b2lkIF9hZGRGdW5jdGlvblR5cGVWYXJpYWJsZXNJZk5lZWRlZChNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBpZiAobWVtYmVyIGlzISBGdW5jdGlvbkVudGl0eSkgcmV0dXJuOwoKICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uID0gbWVtYmVyOwogICAgTGlzdDxUeXBlVmFyaWFibGVUeXBlPiB0eXBlVmFyaWFibGVzID0KICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZVZhcmlhYmxlcyhmdW5jdGlvbik7CiAgICBpZiAodHlwZVZhcmlhYmxlcy5pc0VtcHR5KSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGJvb2wgbmVlZHNUeXBlQXJndW1lbnRzID0gX3J0aU5lZWQubWV0aG9kTmVlZHNUeXBlQXJndW1lbnRzKGZ1bmN0aW9uKTsKICAgIGJvb2wgZWxpZGVUeXBlUGFyYW1ldGVycyA9IGZ1bmN0aW9uLnBhcmFtZXRlclN0cnVjdHVyZS50eXBlUGFyYW1ldGVycyA9PSAwOwogICAgZm9yIChUeXBlVmFyaWFibGVUeXBlIHR5cGVWYXJpYWJsZQogICAgICAgIGluIF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlVmFyaWFibGVzKGZ1bmN0aW9uKSkgewogICAgICBISW5zdHJ1Y3Rpb24gcGFyYW07CiAgICAgIGlmIChlbGlkZVR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgICAgLy8gQWRkIGVsaWRlZCB0eXBlIHBhcmFtZXRlcnMuCiAgICAgICAgcGFyYW0gPSBfY29tcHV0ZVR5cGVBcmd1bWVudERlZmF1bHRWYWx1ZShmdW5jdGlvbiwgdHlwZVZhcmlhYmxlKTsKICAgICAgfSBlbHNlIGlmIChuZWVkc1R5cGVBcmd1bWVudHMpIHsKICAgICAgICBwYXJhbSA9IGFkZFBhcmFtZXRlcigKICAgICAgICAgICAgdHlwZVZhcmlhYmxlLmVsZW1lbnQsIF9hYnN0cmFjdFZhbHVlRG9tYWluLm5vbk51bGxUeXBlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBVbnVzZWQsIHNvIGJpbmQgdG8gYGR5bmFtaWNgLgogICAgICAgIHBhcmFtID0gZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKTsKICAgICAgfQogICAgICBMb2NhbCBsb2NhbCA9IGxvY2Fsc0hhbmRsZXIuZ2V0VHlwZVZhcmlhYmxlQXNMb2NhbCh0eXBlVmFyaWFibGUpOwogICAgICBsb2NhbHNIYW5kbGVyLmRpcmVjdExvY2Fsc1tsb2NhbF0gPSBwYXJhbTsKICAgICAgX2Z1bmN0aW9uVHlwZVBhcmFtZXRlckxvY2Fscy5hZGQobG9jYWwpOwogICAgfQogIH0KCiAgTGlzdDxMb2NhbD4gX2Z1bmN0aW9uVHlwZVBhcmFtZXRlckxvY2FscyA9IDxMb2NhbD5bXTsKCiAgLy8vIEJ1aWxkcyBhIGdlbmVyYXRpdmUgY29uc3RydWN0b3IuCiAgLy8vCiAgLy8vIEdlbmVyYXRpdmUgY29uc3RydWN0b3JzIGFyZSBidWlsdCBpbiBzdGFnZXMsIGluIGVmZmVjdCBpbmxpbmluZyB0aGUKICAvLy8gaW5pdGlhbGl6ZXJzIGFuZCBjb25zdHJ1Y3RvciBib2RpZXMgdXAgdGhlIGluaGVyaXRhbmNlIGNoYWluLgogIC8vLwogIC8vLyAgMS4gRXh0ZW5kIG1ldGhvZCBwYXJhbWV0ZXJzIHdpdGggcGFyYW1ldGVycyB0aGUgY2xhc3MncyB0eXBlIHBhcmFtZXRlcnMuCiAgLy8vCiAgLy8vICAyLiBBZGQgdHlwZSBjaGVja3MgZm9yIHZhbHVlIHBhcmFtZXRlcnMgKG1pZ2h0IG5lZWQgcmVzdWx0IG9mICgxKSkuCiAgLy8vCiAgLy8vICAzLiBXYWxrIGluaGVyaXRhbmNlIGNoYWluIHRvIGJ1aWxkIGJpbmRpbmdzIGZvciB0eXBlIHBhcmFtZXRlcnMgb2YKICAvLy8gICAgIHN1cGVyY2xhc3NlcyBhbmQgbWl4ZWQtaW4gY2xhc3Nlcy4KICAvLy8KICAvLy8gIDQuIENvbGxlY3QgaW5pdGlhbGl6ZXIgdmFsdWVzLiBXYWxrIHVwIGluaGVyaXRhbmNlIGNoYWluIHRvIGNvbGxlY3QgZmllbGQKICAvLy8gICAgIGluaXRpYWxpemVycyBmcm9tIGZpZWxkIGRlY2xhcmF0aW9ucywgaW5pdGlhbGl6aW5nIHBhcmFtZXRlcnMgYW5kCiAgLy8vICAgICBpbml0aWFsaXplci4KICAvLy8KICAvLy8gIDUuIENyZWF0ZSByZWlmaWVkIHR5cGUgaW5mb3JtYXRpb24gZm9yIGluc3RhbmNlLgogIC8vLwogIC8vLyAgNi4gQWxsb2NhdGUgaW5zdGFuY2UgYW5kIGFzc2lnbiBpbml0aWFsaXplcnMgYW5kIHJlaWZpZWQgdHlwZSBpbmZvcm1hdGlvbgogIC8vLyAgICAgdG8gZmllbGRzIGJ5IGNhbGxpbmcgSmF2YVNjcmlwdCBjb25zdHJ1Y3Rvci4KICAvLy8KICAvLy8gIDcuIFdhbGsgaW5oZXJpdGFuY2UgY2hhaW4gdG8gY2FsbCBvciBpbmxpbmUgY29uc3RydWN0b3IgYm9kaWVzLgogIC8vLwogIC8vLyBBbGwgdGhlIGJpbmRpbmdzIGFyZSBwdXQgaW4gdGhlIGNvbnN0cnVjdG9yJ3MgbG9jYWxzIGhhbmRsZXIuIFRoZQogIC8vLyBpbXBsaWNhdGlvbiBpcyB0aGF0IGEgY2xhc3MgY2Fubm90IGJlIGV4dGVuZGVkIG9yIG1peGVkLWluIHR3aWNlLiBJZiB3ZSBpbgogIC8vLyBmdXR1cmUgc3VwcG9ydCByZXBlYXRlZCB1c2VzIG9mIGEgbWl4aW4gY2xhc3MsIHdlIHNob3VsZCBkbyBzbyBieSBjbG9uaW5nCiAgLy8vIHRoZSBtaXhpbiBjbGFzcyBpbiB0aGUgS2VybmVsIGlucHV0LgogIHZvaWQgX2J1aWxkQ29uc3RydWN0b3IoQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IsIGlyLkNvbnN0cnVjdG9yIG5vZGUpIHsKICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0KICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkQ3JlYXRlKG5vZGUpOwogICAgQ2xhc3NFbnRpdHkgY2xzID0gY29uc3RydWN0b3IuZW5jbG9zaW5nQ2xhc3M7CgogICAgaWYgKF9pbmxpbmluZ1N0YWNrLmlzRW1wdHkpIHsKICAgICAgX29wZW5GdW5jdGlvbihjb25zdHJ1Y3RvciwKICAgICAgICAgIGZ1bmN0aW9uTm9kZTogbm9kZS5mdW5jdGlvbiwKICAgICAgICAgIHBhcmFtZXRlclN0cnVjdHVyZTogY29uc3RydWN0b3IucGFyYW1ldGVyU3RydWN0dXJlLAogICAgICAgICAgY2hlY2tzOiBUYXJnZXRDaGVja3Mubm9uZSk7CiAgICB9CgogICAgLy8gW2NvbnN0cnVjdG9yRGF0YS5maWVsZFZhbHVlc10gYWNjdW11bGF0ZXMgdGhlIGZpZWxkIGluaXRpYWxpemVyIHZhbHVlcywKICAgIC8vIHdoaWNoIG1heSBiZSBvdmVyd3JpdHRlbiBieSBpbml0aWFsaXplci1saXN0IGluaXRpYWxpemVycy4KICAgIENvbnN0cnVjdG9yRGF0YSBjb25zdHJ1Y3RvckRhdGEgPSBDb25zdHJ1Y3RvckRhdGEoKTsKICAgIF9idWlsZEluaXRpYWxpemVycyhub2RlLCBjb25zdHJ1Y3RvckRhdGEpOwoKICAgIExpc3Q8SEluc3RydWN0aW9uPiBjb25zdHJ1Y3RvckFyZ3VtZW50cyA9IDxISW5zdHJ1Y3Rpb24+W107CiAgICAvLyBEb2luZyB0aGlzIGluc3RlYWQgb2YgZmllbGRWYWx1ZXMuZm9yRWFjaCBiZWNhdXNlIHdlIGhhdmVuJ3QgZGVmaW5lZCB0aGUKICAgIC8vIG9yZGVyIG9mIHRoZSBhcmd1bWVudHMgaGVyZS4gV2UgY2FuIGRlZmluZSB0aGF0IHdpdGggSkVsZW1lbnRzLgogICAgYm9vbCBpc0N1c3RvbUVsZW1lbnQgPSBfbmF0aXZlRGF0YS5pc05hdGl2ZU9yRXh0ZW5kc05hdGl2ZShjbHMpICYmCiAgICAgICAgIV9uYXRpdmVEYXRhLmlzSnNJbnRlcm9wQ2xhc3MoY2xzKTsKICAgIEludGVyZmFjZVR5cGUgdGhpc1R5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGNscyk7CiAgICBMaXN0PEZpZWxkRW50aXR5PiBmaWVsZHMgPSA8RmllbGRFbnRpdHk+W107CiAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hJbnN0YW5jZUZpZWxkKGNscywKICAgICAgICAoQ2xhc3NFbnRpdHkgZW5jbG9zaW5nQ2xhc3MsIEZpZWxkRW50aXR5IG1lbWJlcikgewogICAgICBISW5zdHJ1Y3Rpb24gdmFsdWUgPSBjb25zdHJ1Y3RvckRhdGEuZmllbGRWYWx1ZXNbbWVtYmVyXTsKICAgICAgRmllbGRBbmFseXNpc0RhdGEgZmllbGREYXRhID0gX2ZpZWxkQW5hbHlzaXMuZ2V0RmllbGREYXRhKG1lbWJlcik7CiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7CiAgICAgICAgYXNzZXJ0KAogICAgICAgICAgICBmaWVsZERhdGEuaXNJbml0aWFsaXplZEluQWxsb2NhdG9yIHx8CiAgICAgICAgICAgICAgICBpc0N1c3RvbUVsZW1lbnQgfHwKICAgICAgICAgICAgICAgIHJlcG9ydGVyLmhhc1JlcG9ydGVkRXJyb3IsCiAgICAgICAgICAgICdObyBpbml0aWFsaXplciB2YWx1ZSBmb3IgZmllbGQgJHttZW1iZXJ9Jyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKCFmaWVsZERhdGEuaXNFbGlkZWQpIHsKICAgICAgICAgIGZpZWxkcy5hZGQobWVtYmVyKTsKICAgICAgICAgIERhcnRUeXBlIHR5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldEZpZWxkVHlwZShtZW1iZXIpOwogICAgICAgICAgdHlwZSA9IGxvY2Fsc0hhbmRsZXIuc3Vic3RJbkNvbnRleHQodHlwZSk7CiAgICAgICAgICBjb25zdHJ1Y3RvckFyZ3VtZW50cy5hZGQoX3R5cGVCdWlsZGVyCiAgICAgICAgICAgICAgLnBvdGVudGlhbGx5Q2hlY2tPclRydXN0VHlwZU9mQXNzaWdubWVudChtZW1iZXIsIHZhbHVlLCB0eXBlKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKCiAgICBfYWRkSW1wbGljaXRJbnN0YW50aWF0aW9uKHRoaXNUeXBlKTsKICAgIExpc3Q8RGFydFR5cGU+IGluc3RhbnRpYXRlZFR5cGVzID0KICAgICAgICBuZXcgTGlzdDxJbnRlcmZhY2VUeXBlPi5mcm9tKF9jdXJyZW50SW1wbGljaXRJbnN0YW50aWF0aW9ucyk7CgogICAgSEluc3RydWN0aW9uIG5ld09iamVjdDsKICAgIGlmIChpc0N1c3RvbUVsZW1lbnQpIHsKICAgICAgLy8gQnVsayBhc3NpZ24gdG8gdGhlIGluaXRpYWxpemVkIGZpZWxkcy4KICAgICAgbmV3T2JqZWN0ID0gZ3JhcGguZXhwbGljaXRSZWNlaXZlclBhcmFtZXRlcjsKICAgICAgLy8gTnVsbCBndWFyZCBlbnN1cmVzIGFuIGVycm9yIGlmIHdlIGFyZSBiZWluZyBjYWxsZWQgZnJvbSBhbiBleHBsaWNpdAogICAgICAvLyAnbmV3JyBvZiB0aGUgY29uc3RydWN0b3IgaW5zdGVhZCBvZiB2aWEgYW4gdXBncmFkZS4gSXQgaXMgb3B0aW1pemVkIG91dAogICAgICAvLyBpZiB0aGVyZSBhcmUgZmllbGQgaW5pdGlhbGl6ZXJzLgogICAgICBhZGQobmV3IEhGaWVsZEdldCgKICAgICAgICAgIG51bGwsIG5ld09iamVjdCwgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUsIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgICAgaXNBc3NpZ25hYmxlOiBmYWxzZSkpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykgewogICAgICAgIGFkZChuZXcgSEZpZWxkU2V0KF9hYnN0cmFjdFZhbHVlRG9tYWluLCBmaWVsZHNbaV0sIG5ld09iamVjdCwKICAgICAgICAgICAgY29uc3RydWN0b3JBcmd1bWVudHNbaV0pKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgLy8gQ3JlYXRlIHRoZSBydW50aW1lIHR5cGUgaW5mb3JtYXRpb24sIGlmIG5lZWRlZC4KICAgICAgYm9vbCBuZWVkc1R5cGVBcmd1bWVudHMgPQogICAgICAgICAgY2xvc2VkV29ybGQucnRpTmVlZC5jbGFzc05lZWRzVHlwZUFyZ3VtZW50cyhjbHMpOwogICAgICBpZiAobmVlZHNUeXBlQXJndW1lbnRzKSB7CiAgICAgICAgaWYgKG9wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSkgewogICAgICAgICAgSW50ZXJmYWNlVHlwZSB0aGlzVHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0VGhpc1R5cGUoY2xzKTsKICAgICAgICAgIEhJbnN0cnVjdGlvbiB0eXBlQXJndW1lbnQgPQogICAgICAgICAgICAgIF90eXBlQnVpbGRlci5hbmFseXplVHlwZUFyZ3VtZW50TmV3UnRpKHRoaXNUeXBlLCBzb3VyY2VFbGVtZW50KTsKICAgICAgICAgIGNvbnN0cnVjdG9yQXJndW1lbnRzLmFkZCh0eXBlQXJndW1lbnQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBSZWFkIHRoZSB2YWx1ZXMgb2YgdGhlIHR5cGUgYXJndW1lbnRzIGFuZCBjcmVhdGUgYQogICAgICAgICAgLy8gSFR5cGVJbmZvRXhwcmVzc2lvbiB0byBzZXQgb24gdGhlIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LgogICAgICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IHR5cGVBcmd1bWVudHMgPSA8SEluc3RydWN0aW9uPltdOwogICAgICAgICAgSW50ZXJmYWNlVHlwZSB0aGlzVHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0VGhpc1R5cGUoY2xzKTsKICAgICAgICAgIGZvciAoRGFydFR5cGUgdHlwZVZhcmlhYmxlIGluIHRoaXNUeXBlLnR5cGVBcmd1bWVudHMpIHsKICAgICAgICAgICAgSEluc3RydWN0aW9uIGFyZ3VtZW50ID0gbG9jYWxzSGFuZGxlcgogICAgICAgICAgICAgICAgLnJlYWRMb2NhbChsb2NhbHNIYW5kbGVyLmdldFR5cGVWYXJpYWJsZUFzTG9jYWwodHlwZVZhcmlhYmxlKSk7CiAgICAgICAgICAgIHR5cGVBcmd1bWVudHMuYWRkKGFyZ3VtZW50KTsKICAgICAgICAgIH0KCiAgICAgICAgICBISW5zdHJ1Y3Rpb24gdHlwZUluZm8gPSBuZXcgSFR5cGVJbmZvRXhwcmVzc2lvbigKICAgICAgICAgICAgICBUeXBlSW5mb0V4cHJlc3Npb25LaW5kLklOU1RBTkNFLAogICAgICAgICAgICAgIHRoaXNUeXBlLAogICAgICAgICAgICAgIHR5cGVBcmd1bWVudHMsCiAgICAgICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpOwogICAgICAgICAgYWRkKHR5cGVJbmZvKTsKICAgICAgICAgIGNvbnN0cnVjdG9yQXJndW1lbnRzLmFkZCh0eXBlSW5mbyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIG5ld09iamVjdCA9IG5ldyBIQ3JlYXRlKGNscywgY29uc3RydWN0b3JBcmd1bWVudHMsCiAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVOb25OdWxsRXhhY3QoY2xzKSwgc291cmNlSW5mb3JtYXRpb24sCiAgICAgICAgICBpbnN0YW50aWF0ZWRUeXBlczogaW5zdGFudGlhdGVkVHlwZXMsCiAgICAgICAgICBoYXNSdGlJbnB1dDogbmVlZHNUeXBlQXJndW1lbnRzKTsKCiAgICAgIGFkZChuZXdPYmplY3QpOwogICAgfQogICAgX3JlbW92ZUltcGxpY2l0SW5zdGFudGlhdGlvbih0aGlzVHlwZSk7CgogICAgSEluc3RydWN0aW9uIGludGVyY2VwdG9yOwogICAgLy8gR2VuZXJhdGUgY2FsbHMgdG8gdGhlIGNvbnN0cnVjdG9yIGJvZGllcy4KICAgIGZvciAoaXIuQ29uc3RydWN0b3IgYm9keSBpbiBjb25zdHJ1Y3RvckRhdGEuY29uc3RydWN0b3JDaGFpbi5yZXZlcnNlZCkgewogICAgICBpZiAoX2lzRW1wdHlTdGF0ZW1lbnQoYm9keS5mdW5jdGlvbi5ib2R5KSkgY29udGludWU7CgogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gYm9keUNhbGxJbnB1dHMgPSA8SEluc3RydWN0aW9uPltdOwogICAgICBpZiAoaXNDdXN0b21FbGVtZW50KSB7CiAgICAgICAgaWYgKGludGVyY2VwdG9yID09IG51bGwpIHsKICAgICAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSBuZXcgSW50ZXJjZXB0b3JDb25zdGFudFZhbHVlKGNscyk7CiAgICAgICAgICBpbnRlcmNlcHRvciA9IGdyYXBoLmFkZENvbnN0YW50KGNvbnN0YW50LCBjbG9zZWRXb3JsZCk7CiAgICAgICAgfQogICAgICAgIGJvZHlDYWxsSW5wdXRzLmFkZChpbnRlcmNlcHRvcik7CiAgICAgIH0KICAgICAgYm9keUNhbGxJbnB1dHMuYWRkKG5ld09iamVjdCk7CgogICAgICAvLyBQYXNzIHVuY2FwdHVyZWQgYXJndW1lbnRzIGZpcnN0LCBjYXB0dXJlZCBhcmd1bWVudHMgaW4gYSBib3gsIHRoZW4gdHlwZQogICAgICAvLyBhcmd1bWVudHMuCgogICAgICBDb25zdHJ1Y3RvckVudGl0eSBpbmxpbmVkQ29uc3RydWN0b3IgPSBfZWxlbWVudE1hcC5nZXRDb25zdHJ1Y3Rvcihib2R5KTsKCiAgICAgIF9pbmxpbmVkRnJvbSgKICAgICAgICAgIGlubGluZWRDb25zdHJ1Y3RvciwgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZENhbGwoYm9keSwgYm9keSksCiAgICAgICAgICAoKSB7CiAgICAgICAgQ29uc3RydWN0b3JCb2R5RW50aXR5IGNvbnN0cnVjdG9yQm9keSA9CiAgICAgICAgICAgIF9lbGVtZW50TWFwLmdldENvbnN0cnVjdG9yQm9keShib2R5KTsKCiAgICAgICAgdm9pZCBoYW5kbGVQYXJhbWV0ZXIoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlLCB7Ym9vbCBpc0VsaWRlZH0pIHsKICAgICAgICAgIGlmIChpc0VsaWRlZCkgcmV0dXJuOwoKICAgICAgICAgIExvY2FsIHBhcmFtZXRlciA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZShub2RlKTsKICAgICAgICAgIC8vIElmIFtwYXJhbWV0ZXJdIGlzIGJveGVkLCBpdCB3aWxsIGJlIGEgZmllbGQgaW4gdGhlIGJveCBwYXNzZWQgYXMKICAgICAgICAgIC8vIHRoZSBsYXN0IHBhcmFtZXRlci4gU28gbm8gbmVlZCB0byBkaXJlY3RseSBwYXNzIGl0LgogICAgICAgICAgaWYgKCFsb2NhbHNIYW5kbGVyLmlzQm94ZWQocGFyYW1ldGVyKSkgewogICAgICAgICAgICBib2R5Q2FsbElucHV0cy5hZGQobG9jYWxzSGFuZGxlci5yZWFkTG9jYWwocGFyYW1ldGVyKSk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBQcm92aWRlIHRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBnZW5lcmF0aXZlIGNvbnN0cnVjdG9yIGJvZHkuCiAgICAgICAgZm9yRWFjaE9yZGVyZWRQYXJhbWV0ZXIoX2VsZW1lbnRNYXAsIGNvbnN0cnVjdG9yQm9keSwgaGFuZGxlUGFyYW1ldGVyKTsKCiAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGxvY2FscyB0aGF0IGVzY2FwZSAoaS5lLiBtdXRhdGVkIGluIGNsb3N1cmVzKSwgd2UgcGFzcyB0aGUKICAgICAgICAvLyBib3ggdG8gdGhlIGNvbnN0cnVjdG9yLgogICAgICAgIENhcHR1cmVkU2NvcGUgc2NvcGVEYXRhID0KICAgICAgICAgICAgX2Nsb3N1cmVEYXRhTG9va3VwLmdldENhcHR1cmVkU2NvcGUoY29uc3RydWN0b3JCb2R5KTsKICAgICAgICBpZiAoc2NvcGVEYXRhLnJlcXVpcmVzQ29udGV4dEJveCkgewogICAgICAgICAgYm9keUNhbGxJbnB1dHMuYWRkKGxvY2Fsc0hhbmRsZXIucmVhZExvY2FsKHNjb3BlRGF0YS5jb250ZXh0KSk7CiAgICAgICAgfQoKICAgICAgICAvLyBQYXNzIHR5cGUgYXJndW1lbnRzLgogICAgICAgIENsYXNzRW50aXR5IGlubGluZWRDb25zdHJ1Y3RvckNsYXNzID0gY29uc3RydWN0b3JCb2R5LmVuY2xvc2luZ0NsYXNzOwogICAgICAgIGlmIChjbG9zZWRXb3JsZC5ydGlOZWVkCiAgICAgICAgICAgIC5jbGFzc05lZWRzVHlwZUFyZ3VtZW50cyhpbmxpbmVkQ29uc3RydWN0b3JDbGFzcykpIHsKICAgICAgICAgIEludGVyZmFjZVR5cGUgdGhpc1R5cGUgPQogICAgICAgICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0VGhpc1R5cGUoaW5saW5lZENvbnN0cnVjdG9yQ2xhc3MpOwogICAgICAgICAgZm9yIChEYXJ0VHlwZSB0eXBlVmFyaWFibGUgaW4gdGhpc1R5cGUudHlwZUFyZ3VtZW50cykgewogICAgICAgICAgICBEYXJ0VHlwZSByZXN1bHQgPSBsb2NhbHNIYW5kbGVyLnN1YnN0SW5Db250ZXh0KHR5cGVWYXJpYWJsZSk7CiAgICAgICAgICAgIEhJbnN0cnVjdGlvbiBhcmd1bWVudCA9CiAgICAgICAgICAgICAgICBfdHlwZUJ1aWxkZXIuYW5hbHl6ZVR5cGVBcmd1bWVudChyZXN1bHQsIHNvdXJjZUVsZW1lbnQpOwogICAgICAgICAgICBib2R5Q2FsbElucHV0cy5hZGQoYXJndW1lbnQpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCFpc0N1c3RvbUVsZW1lbnQgJiYgLy8gVE9ETygxMzgzNik6IEZpeCBpbmxpbmluZy4KICAgICAgICAgICAgX3RyeUlubGluZU1ldGhvZChjb25zdHJ1Y3RvckJvZHksIG51bGwsIG51bGwsIGJvZHlDYWxsSW5wdXRzLCBudWxsLAogICAgICAgICAgICAgICAgbm9kZSwgc291cmNlSW5mb3JtYXRpb24pKSB7CiAgICAgICAgICBwb3AoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgX2ludm9rZUNvbnN0cnVjdG9yQm9keShib2R5LCBib2R5Q2FsbElucHV0cywKICAgICAgICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkRGVjbGFyYXRpb24oY29uc3RydWN0b3IpKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQoKICAgIGlmIChfaW5saW5pbmdTdGFjay5pc0VtcHR5KSB7CiAgICAgIF9jbG9zZUFuZEdvdG9FeGl0KAogICAgICAgICAgbmV3IEhSZXR1cm4oX2Fic3RyYWN0VmFsdWVEb21haW4sIG5ld09iamVjdCwgc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgX2Nsb3NlRnVuY3Rpb24oKTsKICAgIH0gZWxzZSB7CiAgICAgIGxvY2Fsc0hhbmRsZXIudXBkYXRlTG9jYWwoX3JldHVybkxvY2FsLCBuZXdPYmplY3QsCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwogICAgfQogIH0KCiAgc3RhdGljIGJvb2wgX2lzRW1wdHlTdGF0ZW1lbnQoaXIuU3RhdGVtZW50IGJvZHkpIHsKICAgIGlmIChib2R5IGlzIGlyLkVtcHR5U3RhdGVtZW50KSByZXR1cm4gdHJ1ZTsKICAgIGlmIChib2R5IGlzIGlyLkJsb2NrKSByZXR1cm4gYm9keS5zdGF0ZW1lbnRzLmV2ZXJ5KF9pc0VtcHR5U3RhdGVtZW50KTsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgX2ludm9rZUNvbnN0cnVjdG9yQm9keShpci5Db25zdHJ1Y3RvciBjb25zdHJ1Y3RvciwKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cywgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIE1lbWJlckVudGl0eSBjb25zdHJ1Y3RvckJvZHkgPSBfZWxlbWVudE1hcC5nZXRDb25zdHJ1Y3RvckJvZHkoY29uc3RydWN0b3IpOwogICAgSEludm9rZUNvbnN0cnVjdG9yQm9keSBpbnZva2UgPSBuZXcgSEludm9rZUNvbnN0cnVjdG9yQm9keShjb25zdHJ1Y3RvckJvZHksCiAgICAgICAgaW5wdXRzLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ub25OdWxsVHlwZSwgc291cmNlSW5mb3JtYXRpb24pOwogICAgYWRkKGludm9rZSk7CiAgfQoKICAvLy8gU2V0cyBjb250ZXh0IGZvciBnZW5lcmF0aW5nIGNvZGUgdGhhdCBpcyB0aGUgcmVzdWx0IG9mIGlubGluaW5nCiAgLy8vIFtpbmxpbmVkVGFyZ2V0XS4KICB2b2lkIF9pbmxpbmVkRnJvbShNZW1iZXJFbnRpdHkgaW5saW5lZFRhcmdldCwKICAgICAgU291cmNlSW5mb3JtYXRpb24gY2FsbFNvdXJjZUluZm9ybWF0aW9uLCBmKCkpIHsKICAgIHJlcG9ydGVyLndpdGhDdXJyZW50RWxlbWVudChpbmxpbmVkVGFyZ2V0LCAoKSB7CiAgICAgIF9lbnRlckZyYW1lKGlubGluZWRUYXJnZXQsIGNhbGxTb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIHZhciByZXN1bHQgPSBmKCk7CiAgICAgIF9sZWF2ZUZyYW1lKCk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9KTsKICB9CgogIHZvaWQgX2Vuc3VyZVR5cGVWYXJpYWJsZXNGb3JJbml0aWFsaXplcnMoCiAgICAgIENvbnN0cnVjdG9yRGF0YSBjb25zdHJ1Y3RvckRhdGEsIENsYXNzRW50aXR5IGVuY2xvc2luZ0NsYXNzKSB7CiAgICBpZiAoIWNvbnN0cnVjdG9yRGF0YS5pbmNsdWRlZENsYXNzZXMuYWRkKGVuY2xvc2luZ0NsYXNzKSkgcmV0dXJuOwogICAgaWYgKF9ydGlOZWVkLmNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKGVuY2xvc2luZ0NsYXNzKSkgewogICAgICAvLyBJZiBbZW5jbG9zaW5nQ2xhc3NdIG5lZWRzIFJUSSwgd2UgaGF2ZSB0byBnaXZlIGEgdmFsdWUgdG8gaXRzIHR5cGUKICAgICAgLy8gcGFyYW1ldGVycy4gRm9yIGEgc3VwZXIgY29uc3RydWN0b3IgY2FsbCwgdGhlIHR5cGUgaXMgdGhlIHN1cGVydHlwZQogICAgICAvLyBvZiBjdXJyZW50IGNsYXNzLiBGb3IgYSByZWRpcmVjdGluZyBjb25zdHJ1Y3RvciwgdGhlIHR5cGUgaXMgdGhlCiAgICAgIC8vIGN1cnJlbnQgdHlwZS4gW0xvY2Fsc0hhbmRsZXIuc3Vic3RJbkNvbnRleHRdIHRha2VzIGNhcmUgb2YgYm90aC4KICAgICAgSW50ZXJmYWNlVHlwZSB0aGlzVHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0VGhpc1R5cGUoZW5jbG9zaW5nQ2xhc3MpOwogICAgICBJbnRlcmZhY2VUeXBlIHR5cGUgPSBsb2NhbHNIYW5kbGVyLnN1YnN0SW5Db250ZXh0KHRoaXNUeXBlKTsKICAgICAgTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzID0gdHlwZS50eXBlQXJndW1lbnRzOwogICAgICBMaXN0PERhcnRUeXBlPiB0eXBlVmFyaWFibGVzID0gdGhpc1R5cGUudHlwZUFyZ3VtZW50czsKICAgICAgYXNzZXJ0KGFyZ3VtZW50cy5sZW5ndGggPT0gdHlwZVZhcmlhYmxlcy5sZW5ndGgpOwogICAgICBJdGVyYXRvcjxEYXJ0VHlwZT4gdmFyaWFibGVzID0gdHlwZVZhcmlhYmxlcy5pdGVyYXRvcjsKICAgICAgdHlwZS50eXBlQXJndW1lbnRzLmZvckVhY2goKERhcnRUeXBlIGFyZ3VtZW50KSB7CiAgICAgICAgdmFyaWFibGVzLm1vdmVOZXh0KCk7CiAgICAgICAgVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGUgPSB2YXJpYWJsZXMuY3VycmVudDsKICAgICAgICBsb2NhbHNIYW5kbGVyLnVwZGF0ZUxvY2FsKAogICAgICAgICAgICBsb2NhbHNIYW5kbGVyLmdldFR5cGVWYXJpYWJsZUFzTG9jYWwodHlwZVZhcmlhYmxlKSwKICAgICAgICAgICAgX3R5cGVCdWlsZGVyLmFuYWx5emVUeXBlQXJndW1lbnQoYXJndW1lbnQsIHNvdXJjZUVsZW1lbnQpKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICAvLy8gQ29sbGVjdHMgdGhlIHZhbHVlcyBmb3IgZmllbGQgaW5pdGlhbGl6ZXJzIGZvciB0aGUgZGlyZWN0IGZpZWxkcyBvZgogIC8vLyBbY2xhenpdLgogIHZvaWQgX2NvbGxlY3RGaWVsZFZhbHVlcyhpci5DbGFzcyBjbGF6eiwgQ29uc3RydWN0b3JEYXRhIGNvbnN0cnVjdG9yRGF0YSkgewogICAgQ2xhc3NFbnRpdHkgY2xzID0gX2VsZW1lbnRNYXAuZ2V0Q2xhc3MoY2xhenopOwogICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoRGlyZWN0SW5zdGFuY2VGaWVsZChjbHMsIChGaWVsZEVudGl0eSBmaWVsZCkgewogICAgICBfZW5zdXJlVHlwZVZhcmlhYmxlc0ZvckluaXRpYWxpemVycygKICAgICAgICAgIGNvbnN0cnVjdG9yRGF0YSwgZmllbGQuZW5jbG9zaW5nQ2xhc3MpOwoKICAgICAgTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyRGVmaW5pdGlvbihmaWVsZCk7CiAgICAgIGlyLkZpZWxkIG5vZGU7CiAgICAgIHN3aXRjaCAoZGVmaW5pdGlvbi5raW5kKSB7CiAgICAgICAgY2FzZSBNZW1iZXJLaW5kLnJlZ3VsYXI6CiAgICAgICAgICBub2RlID0gZGVmaW5pdGlvbi5ub2RlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGZhaWxlZEF0KGZpZWxkLCAiVW5leHBlY3RlZCBtZW1iZXIgZGVmaW5pdGlvbiAkZGVmaW5pdGlvbi4iKTsKICAgICAgfQoKICAgICAgYm9vbCBpZ25vcmVBbGxvY2F0b3JBbmFseXNpcyA9IGZhbHNlOwogICAgICBpZiAoX25hdGl2ZURhdGEuaXNOYXRpdmVPckV4dGVuZHNOYXRpdmUoY2xzKSkgewogICAgICAgIC8vIEBOYXRpdmUgY2xhc3NlcyBoYXZlICdmaWVsZHMnIHdoaWNoIGFyZSByZWFsbHkgZ2V0dGVycy9zZXR0ZXIuICBEbwogICAgICAgIC8vIG5vdCB0cnkgdG8gaW5pdGlhbGl6ZSBlLmcuICd0YWdOYW1lJy4KICAgICAgICBpZiAoX25hdGl2ZURhdGEuaXNOYXRpdmVDbGFzcyhjbHMpKSByZXR1cm47CiAgICAgICAgLy8gRmllbGRzIHRoYXQgc3Vydml2ZSB0aGlzIHRlc3QgYXJlIGZpZWxkcyBvZiBjdXN0b20gZWxlbWVudHMuCiAgICAgICAgaWdub3JlQWxsb2NhdG9yQW5hbHlzaXMgPSB0cnVlOwogICAgICB9CgogICAgICBpZiAoaWdub3JlQWxsb2NhdG9yQW5hbHlzaXMgfHwKICAgICAgICAgICFfZmllbGRBbmFseXNpcy5nZXRGaWVsZERhdGEoZmllbGQpLmlzSW5pdGlhbGl6ZWRJbkFsbG9jYXRvcikgewogICAgICAgIGlmIChub2RlLmluaXRpYWxpemVyID09IG51bGwpIHsKICAgICAgICAgIGNvbnN0cnVjdG9yRGF0YS5maWVsZFZhbHVlc1tmaWVsZF0gPQogICAgICAgICAgICAgIGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIENvbXBpbGUgdGhlIGluaXRpYWxpemVyIGluIHRoZSBjb250ZXh0IG9mIHRoZSBmaWVsZCBzbyB3ZSBrbm93IHRoYXQKICAgICAgICAgIC8vIGNsYXNzIHR5cGUgcGFyYW1ldGVycyBhcmUgYWNjZXNzZWQgYXMgdmFsdWVzLgogICAgICAgICAgLy8gVE9ETyhzcmEpOiBJdCB3b3VsZCBiZSBzdWZmaWNpZW50IHRvIGtub3cgdGhlIGNvbnRleHQgd2FzIGEgZmllbGQKICAgICAgICAgIC8vIGluaXRpYWxpemVyLgogICAgICAgICAgX2lubGluZWRGcm9tKGZpZWxkLAogICAgICAgICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRBc3NpZ25tZW50KG5vZGUuaW5pdGlhbGl6ZXIpLCAoKSB7CiAgICAgICAgICAgIG5vZGUuaW5pdGlhbGl6ZXIuYWNjZXB0KHRoaXMpOwogICAgICAgICAgICBjb25zdHJ1Y3RvckRhdGEuZmllbGRWYWx1ZXNbZmllbGRdID0gcG9wKCk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogIH0KCiAgc3RhdGljIGJvb2wgX2lzUmVkaXJlY3RpbmdDb25zdHJ1Y3Rvcihpci5Db25zdHJ1Y3RvciBjb25zdHJ1Y3RvcikgPT4KICAgICAgY29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzCiAgICAgICAgICAuYW55KChpbml0aWFsaXplcikgPT4gaW5pdGlhbGl6ZXIgaXMgaXIuUmVkaXJlY3RpbmdJbml0aWFsaXplcik7CgogIC8vLyBDb2xsZWN0cyBmaWVsZCBpbml0aWFsaXplcnMgYWxsIHRoZSB3YXkgdXAgdGhlIGluaGVyaXRhbmNlIGNoYWluLgogIHZvaWQgX2J1aWxkSW5pdGlhbGl6ZXJzKAogICAgICBpci5Db25zdHJ1Y3RvciBjb25zdHJ1Y3RvciwgQ29uc3RydWN0b3JEYXRhIGNvbnN0cnVjdG9yRGF0YSkgewogICAgYXNzZXJ0KAogICAgICAgIF9lbGVtZW50TWFwLmdldENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKSA9PSBfbG9jYWxzTWFwLmN1cnJlbnRNZW1iZXIsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIF9sb2NhbHNNYXAuY3VycmVudE1lbWJlciwKICAgICAgICAgICAgJ0V4cGVjdGVkICR7X2xvY2Fsc01hcC5jdXJyZW50TWVtYmVyfSAnCiAgICAgICAgICAgICdidXQgZm91bmQgJHtfZWxlbWVudE1hcC5nZXRDb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvcil9LicpKTsKICAgIGNvbnN0cnVjdG9yRGF0YS5jb25zdHJ1Y3RvckNoYWluLmFkZChjb25zdHJ1Y3Rvcik7CgogICAgaWYgKCFfaXNSZWRpcmVjdGluZ0NvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKSkgewogICAgICAvLyBDb21wdXRlIHZhbHVlcyBmb3IgZmllbGQgaW5pdGlhbGl6ZXJzLCBidXQgb25seSBpZiB0aGlzIGlzIG5vdCBhCiAgICAgIC8vIHJlZGlyZWN0aW5nIGNvbnN0cnVjdG9yLCBzaW5jZSB0aGUgdGFyZ2V0IHdpbGwgY29tcHV0ZSB0aGUgZmllbGRzLgogICAgICBfY29sbGVjdEZpZWxkVmFsdWVzKGNvbnN0cnVjdG9yLmVuY2xvc2luZ0NsYXNzLCBjb25zdHJ1Y3RvckRhdGEpOwogICAgfQogICAgdmFyIGZvdW5kU3VwZXJPclJlZGlyZWN0Q2FsbCA9IGZhbHNlOwogICAgZm9yICh2YXIgaW5pdGlhbGl6ZXIgaW4gY29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzKSB7CiAgICAgIGlmIChpbml0aWFsaXplciBpcyBpci5GaWVsZEluaXRpYWxpemVyKSB7CiAgICAgICAgRmllbGRFbnRpdHkgZmllbGQgPSBfZWxlbWVudE1hcC5nZXRGaWVsZChpbml0aWFsaXplci5maWVsZCk7CiAgICAgICAgaWYgKCFfZmllbGRBbmFseXNpcy5nZXRGaWVsZERhdGEoZmllbGQpLmlzSW5pdGlhbGl6ZWRJbkFsbG9jYXRvcikgewogICAgICAgICAgaW5pdGlhbGl6ZXIudmFsdWUuYWNjZXB0KHRoaXMpOwogICAgICAgICAgY29uc3RydWN0b3JEYXRhLmZpZWxkVmFsdWVzW2ZpZWxkXSA9IHBvcCgpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChpbml0aWFsaXplciBpcyBpci5TdXBlckluaXRpYWxpemVyKSB7CiAgICAgICAgYXNzZXJ0KCFmb3VuZFN1cGVyT3JSZWRpcmVjdENhbGwpOwogICAgICAgIGZvdW5kU3VwZXJPclJlZGlyZWN0Q2FsbCA9IHRydWU7CiAgICAgICAgX2lubGluZVN1cGVySW5pdGlhbGl6ZXIoaW5pdGlhbGl6ZXIsIGNvbnN0cnVjdG9yRGF0YSwgY29uc3RydWN0b3IpOwogICAgICB9IGVsc2UgaWYgKGluaXRpYWxpemVyIGlzIGlyLlJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIpIHsKICAgICAgICBhc3NlcnQoIWZvdW5kU3VwZXJPclJlZGlyZWN0Q2FsbCk7CiAgICAgICAgZm91bmRTdXBlck9yUmVkaXJlY3RDYWxsID0gdHJ1ZTsKICAgICAgICBfaW5saW5lUmVkaXJlY3RpbmdJbml0aWFsaXplcigKICAgICAgICAgICAgaW5pdGlhbGl6ZXIsIGNvbnN0cnVjdG9yRGF0YSwgY29uc3RydWN0b3IpOwogICAgICB9IGVsc2UgaWYgKGluaXRpYWxpemVyIGlzIGlyLkxvY2FsSW5pdGlhbGl6ZXIpIHsKICAgICAgICAvLyBMb2NhbEluaXRpYWxpemVyIGlzIGxpa2UgYSBsZXQtZXhwcmVzc2lvbiB0aGF0IGlzIGluIHNjb3BlIGZvciB0aGUKICAgICAgICAvLyByZXN0IG9mIHRoZSBpbml0aWFsaXplcnMuCiAgICAgICAgaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSA9IGluaXRpYWxpemVyLnZhcmlhYmxlOwogICAgICAgIGFzc2VydCh2YXJpYWJsZS5pc0ZpbmFsKTsKICAgICAgICB2YXJpYWJsZS5pbml0aWFsaXplci5hY2NlcHQodGhpcyk7CiAgICAgICAgSEluc3RydWN0aW9uIHZhbHVlID0gcG9wKCk7CiAgICAgICAgLy8gVE9ETyhzcmEpOiBBcHBseSBpbmZlcnJlZCB0eXBlIGluZm9ybWF0aW9uLgogICAgICAgIF9sZXRCaW5kaW5nc1t2YXJpYWJsZV0gPSB2YWx1ZTsKICAgICAgfSBlbHNlIGlmIChpbml0aWFsaXplciBpcyBpci5Bc3NlcnRJbml0aWFsaXplcikgewogICAgICAgIC8vIEFzc2VydCBpbiBpbml0aWFsaXplciBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBpbiBkYXJ0MmpzLgogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1cHBvcnQgYXNzZXJ0IGluIGluaXRpYWxpemVyLgogICAgICB9IGVsc2UgaWYgKGluaXRpYWxpemVyIGlzIGlyLkludmFsaWRJbml0aWFsaXplcikgewogICAgICAgIGFzc2VydChmYWxzZSwgJ2lyLkludmFsaWRJbml0aWFsaXplciBub3QgaGFuZGxlZCcpOwogICAgICB9IGVsc2UgewogICAgICAgIGFzc2VydChmYWxzZSwgJ1VuaGFuZGxlZCBpbml0aWFsaXplciBpci4ke2luaXRpYWxpemVyLnJ1bnRpbWVUeXBlfScpOwogICAgICB9CiAgICB9CgogICAgaWYgKCFmb3VuZFN1cGVyT3JSZWRpcmVjdENhbGwpIHsKICAgICAgYXNzZXJ0KAogICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0Q2xhc3MoY29uc3RydWN0b3IuZW5jbG9zaW5nQ2xhc3MpID09CiAgICAgICAgICAgICAgICAgIF9lbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzIHx8CiAgICAgICAgICAgICAgY29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzLmFueShfRXJyb25lb3VzSW5pdGlhbGl6ZXJWaXNpdG9yLmNoZWNrKSwKICAgICAgICAgICdBbGwgY29uc3RydWN0b3JzIHNob3VsZCBoYXZlIHN1cGVyLSBvciByZWRpcmVjdGluZy0gaW5pdGlhbGl6ZXJzLCcKICAgICAgICAgICcgZXhjZXB0IE9iamVjdCgpJwogICAgICAgICAgJyAke2NvbnN0cnVjdG9yLmluaXRpYWxpemVyc30nKTsKICAgIH0KICB9CgogIExpc3Q8SEluc3RydWN0aW9uPiBfbm9ybWFsaXplQW5kQnVpbGRBcmd1bWVudHMoCiAgICAgIGlyLkZ1bmN0aW9uTm9kZSBmdW5jdGlvbiwgaXIuQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgdmFyIGJ1aWx0QXJndW1lbnRzID0gPEhJbnN0cnVjdGlvbj5bXTsKICAgIHZhciBwb3NpdGlvbmFsSW5kZXggPSAwOwogICAgZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMuZm9yRWFjaCgoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICAgIGlmIChwb3NpdGlvbmFsSW5kZXggPCBhcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGgpIHsKICAgICAgICBhcmd1bWVudHMucG9zaXRpb25hbFtwb3NpdGlvbmFsSW5kZXgrK10uYWNjZXB0KHRoaXMpOwogICAgICAgIGJ1aWx0QXJndW1lbnRzLmFkZChwb3AoKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudFZhbHVlID0KICAgICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0Q29uc3RhbnRWYWx1ZShub2RlLmluaXRpYWxpemVyLCBpbXBsaWNpdE51bGw6IHRydWUpOwogICAgICAgIGFzc2VydCgKICAgICAgICAgICAgY29uc3RhbnRWYWx1ZSAhPSBudWxsLAogICAgICAgICAgICBmYWlsZWRBdChfZWxlbWVudE1hcC5nZXRNZXRob2QoZnVuY3Rpb24ucGFyZW50KSwKICAgICAgICAgICAgICAgICdObyBjb25zdGFudCBjb21wdXRlZCBmb3IgJG5vZGUnKSk7CiAgICAgICAgYnVpbHRBcmd1bWVudHMuYWRkKGdyYXBoLmFkZENvbnN0YW50KGNvbnN0YW50VmFsdWUsIGNsb3NlZFdvcmxkKSk7CiAgICAgIH0KICAgIH0pOwogICAgZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzLnRvTGlzdCgpCiAgICAgIC4uc29ydChuYW1lZE9yZGVyaW5nKQogICAgICAuLmZvckVhY2goKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgICAgIHZhciBjb3JyZXNwb25kaW5nTmFtZWQgPSBhcmd1bWVudHMubmFtZWQKICAgICAgICAgICAgLmZpcnN0V2hlcmUoKG5hbWVkKSA9PiBuYW1lZC5uYW1lID09IG5vZGUubmFtZSwgb3JFbHNlOiAoKSA9PiBudWxsKTsKICAgICAgICBpZiAoY29ycmVzcG9uZGluZ05hbWVkICE9IG51bGwpIHsKICAgICAgICAgIGNvcnJlc3BvbmRpbmdOYW1lZC52YWx1ZS5hY2NlcHQodGhpcyk7CiAgICAgICAgICBidWlsdEFyZ3VtZW50cy5hZGQocG9wKCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50VmFsdWUgPSBfZWxlbWVudE1hcAogICAgICAgICAgICAgIC5nZXRDb25zdGFudFZhbHVlKG5vZGUuaW5pdGlhbGl6ZXIsIGltcGxpY2l0TnVsbDogdHJ1ZSk7CiAgICAgICAgICBhc3NlcnQoCiAgICAgICAgICAgICAgY29uc3RhbnRWYWx1ZSAhPSBudWxsLAogICAgICAgICAgICAgIGZhaWxlZEF0KF9lbGVtZW50TWFwLmdldE1ldGhvZChmdW5jdGlvbi5wYXJlbnQpLAogICAgICAgICAgICAgICAgICAnTm8gY29uc3RhbnQgY29tcHV0ZWQgZm9yICRub2RlJykpOwogICAgICAgICAgYnVpbHRBcmd1bWVudHMuYWRkKGdyYXBoLmFkZENvbnN0YW50KGNvbnN0YW50VmFsdWUsIGNsb3NlZFdvcmxkKSk7CiAgICAgICAgfQogICAgICB9KTsKCiAgICByZXR1cm4gYnVpbHRBcmd1bWVudHM7CiAgfQoKICAvLy8gSW5saW5lcyB0aGUgZ2l2ZW4gcmVkaXJlY3RpbmcgW2NvbnN0cnVjdG9yXSdzIGluaXRpYWxpemVycyBieSBjb2xsZWN0aW5nCiAgLy8vIGl0cyBmaWVsZCB2YWx1ZXMgYW5kIGJ1aWxkaW5nIGl0cyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcnMuIFdlIHZpc2l0IHN1cGVyCiAgLy8vIGNvbnN0cnVjdG9ycyBhbGwgdGhlIHdheSB1cCB0byB0aGUgW09iamVjdF0gY29uc3RydWN0b3IuCiAgdm9pZCBfaW5saW5lUmVkaXJlY3RpbmdJbml0aWFsaXplcihpci5SZWRpcmVjdGluZ0luaXRpYWxpemVyIGluaXRpYWxpemVyLAogICAgICBDb25zdHJ1Y3RvckRhdGEgY29uc3RydWN0b3JEYXRhLCBpci5Db25zdHJ1Y3RvciBjYWxsZXIpIHsKICAgIHZhciBzdXBlck9yUmVkaXJlY3RDb25zdHJ1Y3RvciA9IGluaXRpYWxpemVyLnRhcmdldDsKICAgIHZhciBhcmd1bWVudHMgPSBfbm9ybWFsaXplQW5kQnVpbGRBcmd1bWVudHMoCiAgICAgICAgc3VwZXJPclJlZGlyZWN0Q29uc3RydWN0b3IuZnVuY3Rpb24sIGluaXRpYWxpemVyLmFyZ3VtZW50cyk7CgogICAgLy8gUmVkaXJlY3RpbmcgaW5pdGlhbGl6ZXIgYWxyZWFkeSBoYXMgW2xvY2Fsc0hhbmRsZXJdIGJpbmRpbmdzIGZvciB0eXBlCiAgICAvLyBwYXJhbWV0ZXJzIGZyb20gdGhlIHJlZGlyZWN0aW5nIGNvbnN0cnVjdG9yLgoKICAgIC8vIEZvciByZWRpcmVjdGluZyBjb25zdHJ1Y3RvcnMsIHRoZSBmaWVsZHMgd2lsbCBiZSBpbml0aWFsaXplZCBsYXRlciBieSB0aGUKICAgIC8vIGVmZmVjdGl2ZSB0YXJnZXQsIHNvIHdlIGRvbid0IGRvIGl0IGhlcmUuCgogICAgX2lubGluZVN1cGVyT3JSZWRpcmVjdENvbW1vbihpbml0aWFsaXplciwgc3VwZXJPclJlZGlyZWN0Q29uc3RydWN0b3IsCiAgICAgICAgYXJndW1lbnRzLCBjb25zdHJ1Y3RvckRhdGEsIGNhbGxlcik7CiAgfQoKICAvLy8gSW5saW5lcyB0aGUgZ2l2ZW4gc3VwZXIgW2NvbnN0cnVjdG9yXSdzIGluaXRpYWxpemVycyBieSBjb2xsZWN0aW5nIGl0cwogIC8vLyBmaWVsZCB2YWx1ZXMgYW5kIGJ1aWxkaW5nIGl0cyBjb25zdHJ1Y3RvciBpbml0aWFsaXplcnMuIFdlIHZpc2l0IHN1cGVyCiAgLy8vIGNvbnN0cnVjdG9ycyBhbGwgdGhlIHdheSB1cCB0byB0aGUgW09iamVjdF0gY29uc3RydWN0b3IuCiAgdm9pZCBfaW5saW5lU3VwZXJJbml0aWFsaXplcihpci5TdXBlckluaXRpYWxpemVyIGluaXRpYWxpemVyLAogICAgICBDb25zdHJ1Y3RvckRhdGEgY29uc3RydWN0b3JEYXRhLCBpci5Db25zdHJ1Y3RvciBjYWxsZXIpIHsKICAgIHZhciB0YXJnZXQgPSBpbml0aWFsaXplci50YXJnZXQ7CiAgICB2YXIgYXJndW1lbnRzID0KICAgICAgICBfbm9ybWFsaXplQW5kQnVpbGRBcmd1bWVudHModGFyZ2V0LmZ1bmN0aW9uLCBpbml0aWFsaXplci5hcmd1bWVudHMpOwoKICAgIGlyLkNsYXNzIGNhbGxlckNsYXNzID0gY2FsbGVyLmVuY2xvc2luZ0NsYXNzOwogICAgaXIuU3VwZXJ0eXBlIHN1cGVydHlwZSA9IGNhbGxlckNsYXNzLnN1cGVydHlwZTsKCiAgICAvLyBUaGUgY2xhc3Mgb2YgdGhlIHN1cGVyLWNvbnN0cnVjdG9yIG1heSBub3QgYmUgdGhlIHN1cGVydHlwZSBjbGFzcy4gSW4KICAgIC8vIHRoaXMgY2FzZSwgd2UgbXVzdCBnbyB1cCB0aGUgY2xhc3MgaGllcmFyY2h5IHVudGlsIHdlIHJlYWNoIHRoZSBjbGFzcwogICAgLy8gY29udGFpbmluZyB0aGUgc3VwZXItY29uc3RydWN0b3IuCiAgICB3aGlsZSAoc3VwZXJ0eXBlLmNsYXNzTm9kZSAhPSB0YXJnZXQuZW5jbG9zaW5nQ2xhc3MpIHsKICAgICAgLy8gRmllbGRzIGZyb20gdW5uYW1lZCBtaXhpbiBhcHBsaWNhdGlvbiBjbGFzc2VzIChpZSBPYmplY3QmRm9vKSBnZXQKICAgICAgLy8gImNvbGxlY3RlZCIgd2l0aCB0aGUgcmVndWxhciBzdXBlcnR5cGUgZmllbGRzLCBzbyB3ZSBtdXN0IGJpbmQgdHlwZQogICAgICAvLyBwYXJhbWV0ZXJzIGZyb20gYm90aCB0aGUgc3VwZXJ0eXBlIGFuZCB0aGUgc3VwZXJ0eXBlJ3MgbWl4aW4gY2xhc3NlcwogICAgICAvLyBiZWZvcmUgY29sbGVjdGluZyB0aGUgZmllbGQgdmFsdWVzLgogICAgICBfY29sbGVjdEZpZWxkVmFsdWVzKHN1cGVydHlwZS5jbGFzc05vZGUsIGNvbnN0cnVjdG9yRGF0YSk7CiAgICAgIHN1cGVydHlwZSA9IHN1cGVydHlwZS5jbGFzc05vZGUuc3VwZXJ0eXBlOwogICAgfQogICAgc3VwZXJ0eXBlID0gc3VwZXJ0eXBlLmNsYXNzTm9kZS5zdXBlcnR5cGU7CgogICAgX2lubGluZVN1cGVyT3JSZWRpcmVjdENvbW1vbigKICAgICAgICBpbml0aWFsaXplciwgdGFyZ2V0LCBhcmd1bWVudHMsIGNvbnN0cnVjdG9yRGF0YSwgY2FsbGVyKTsKICB9CgogIHZvaWQgX2lubGluZVN1cGVyT3JSZWRpcmVjdENvbW1vbigKICAgICAgaXIuSW5pdGlhbGl6ZXIgaW5pdGlhbGl6ZXIsCiAgICAgIGlyLkNvbnN0cnVjdG9yIGNvbnN0cnVjdG9yLAogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gYXJndW1lbnRzLAogICAgICBDb25zdHJ1Y3RvckRhdGEgY29uc3RydWN0b3JEYXRhLAogICAgICBpci5Db25zdHJ1Y3RvciBjYWxsZXIpIHsKICAgIHZhciBpbmRleCA9IDA7CgogICAgQ29uc3RydWN0b3JFbnRpdHkgZWxlbWVudCA9IF9lbGVtZW50TWFwLmdldENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKTsKICAgIFNjb3BlSW5mbyBvbGRTY29wZUluZm8gPSBsb2NhbHNIYW5kbGVyLnNjb3BlSW5mbzsKCiAgICBfaW5saW5lZEZyb20oCiAgICAgICAgZWxlbWVudCwgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZENhbGwoaW5pdGlhbGl6ZXIsIGluaXRpYWxpemVyKSwKICAgICAgICAoKSB7CiAgICAgIHZvaWQgaGFuZGxlUGFyYW1ldGVyKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgICAgIExvY2FsIHBhcmFtZXRlciA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZShub2RlKTsKICAgICAgICBISW5zdHJ1Y3Rpb24gYXJndW1lbnQgPSBhcmd1bWVudHNbaW5kZXgrK107CiAgICAgICAgLy8gQmVjYXVzZSB3ZSBhcmUgaW5saW5pbmcgdGhlIGluaXRpYWxpemVyLCB3ZSBtdXN0IHVwZGF0ZQogICAgICAgIC8vIHdoYXQgd2FzIGdpdmVuIGFzIHBhcmFtZXRlci4gVGhpcyB3aWxsIGJlIHVzZWQgaW4gY2FzZQogICAgICAgIC8vIHRoZXJlIGlzIGEgcGFyYW1ldGVyIGNoZWNrIGV4cHJlc3Npb24gaW4gdGhlIGluaXRpYWxpemVyLgogICAgICAgIHBhcmFtZXRlcnNbcGFyYW1ldGVyXSA9IGFyZ3VtZW50OwogICAgICAgIGxvY2Fsc0hhbmRsZXIudXBkYXRlTG9jYWwocGFyYW1ldGVyLCBhcmd1bWVudCk7CiAgICAgIH0KCiAgICAgIGNvbnN0cnVjdG9yLmZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmZvckVhY2goaGFuZGxlUGFyYW1ldGVyKTsKICAgICAgY29uc3RydWN0b3IuZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzLnRvTGlzdCgpCiAgICAgICAgLi5zb3J0KG5hbWVkT3JkZXJpbmcpCiAgICAgICAgLi5mb3JFYWNoKGhhbmRsZVBhcmFtZXRlcik7CgogICAgICBfZW5zdXJlVHlwZVZhcmlhYmxlc0ZvckluaXRpYWxpemVycygKICAgICAgICAgIGNvbnN0cnVjdG9yRGF0YSwgZWxlbWVudC5lbmNsb3NpbmdDbGFzcyk7CgogICAgICAvLyBTZXQgdGhlIGxvY2FscyBoYW5kbGVyIHN0YXRlIGFzIGlmIHdlIHdlcmUgaW5saW5pbmcgdGhlIGNvbnN0cnVjdG9yLgogICAgICBTY29wZUluZm8gbmV3U2NvcGVJbmZvID0gX2Nsb3N1cmVEYXRhTG9va3VwLmdldFNjb3BlSW5mbyhlbGVtZW50KTsKICAgICAgbG9jYWxzSGFuZGxlci5zY29wZUluZm8gPSBuZXdTY29wZUluZm87CiAgICAgIGxvY2Fsc0hhbmRsZXIuZW50ZXJTY29wZShfY2xvc3VyZURhdGFMb29rdXAuZ2V0Q2FwdHVyZWRTY29wZShlbGVtZW50KSwKICAgICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGREZWNsYXJhdGlvbihlbGVtZW50KSk7CiAgICAgIF9idWlsZEluaXRpYWxpemVycyhjb25zdHJ1Y3RvciwgY29uc3RydWN0b3JEYXRhKTsKICAgIH0pOwogICAgbG9jYWxzSGFuZGxlci5zY29wZUluZm8gPSBvbGRTY29wZUluZm87CiAgfQoKICAvLy8gQ29uc3RydWN0cyBhIHNwZWNpYWwgc2lnbmF0dXJlIGZ1bmN0aW9uIGZvciBhIGNsb3N1cmUuIEl0IGlzIHVuaXF1ZSBpbgogIC8vLyB0aGF0IG5vIGNvcnJlc3BvbmRpbmcgaXIuTm9kZSBhY3R1YWxseSBleGlzdHMgZm9yIGl0LiBXZSBqdXN0IHVzZSB0aGUKICAvLy8gdGFyZ2V0RWxlbWVudC4KICB2b2lkIF9idWlsZE1ldGhvZFNpZ25hdHVyZShpci5GdW5jdGlvbk5vZGUgb3JpZ2luYWxDbG9zdXJlTm9kZSkgewogICAgX29wZW5GdW5jdGlvbih0YXJnZXRFbGVtZW50LCBjaGVja3M6IFRhcmdldENoZWNrcy5ub25lKTsKICAgIExpc3Q8SEluc3RydWN0aW9uPiB0eXBlQXJndW1lbnRzID0gPEhJbnN0cnVjdGlvbj5bXTsKCiAgICAvLyBBZGQgZnVuY3Rpb24gdHlwZSB2YXJpYWJsZXMuCiAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlID0KICAgICAgICBfZWxlbWVudE1hcC5nZXRGdW5jdGlvblR5cGUob3JpZ2luYWxDbG9zdXJlTm9kZSk7CiAgICBmdW5jdGlvblR5cGUuZm9yRWFjaFR5cGVWYXJpYWJsZSgoVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGVUeXBlKSB7CiAgICAgIERhcnRUeXBlIHJlc3VsdCA9IGxvY2Fsc0hhbmRsZXIuc3Vic3RJbkNvbnRleHQodHlwZVZhcmlhYmxlVHlwZSk7CiAgICAgIEhJbnN0cnVjdGlvbiBhcmd1bWVudCA9CiAgICAgICAgICBfdHlwZUJ1aWxkZXIuYW5hbHl6ZVR5cGVBcmd1bWVudChyZXN1bHQsIHNvdXJjZUVsZW1lbnQpOwogICAgICB0eXBlQXJndW1lbnRzLmFkZChhcmd1bWVudCk7CiAgICB9KTsKICAgIHB1c2gobmV3IEhUeXBlSW5mb0V4cHJlc3Npb24oCiAgICAgICAgVHlwZUluZm9FeHByZXNzaW9uS2luZC5DT01QTEVURSwKICAgICAgICBfZWxlbWVudE1hcC5nZXRGdW5jdGlvblR5cGUob3JpZ2luYWxDbG9zdXJlTm9kZSksCiAgICAgICAgdHlwZUFyZ3VtZW50cywKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5mdW5jdGlvblR5cGUpKTsKICAgIEhJbnN0cnVjdGlvbiB2YWx1ZSA9IHBvcCgpOwogICAgY2xvc2UobmV3IEhSZXR1cm4oX2Fic3RyYWN0VmFsdWVEb21haW4sIHZhbHVlLAogICAgICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkUmV0dXJuKG9yaWdpbmFsQ2xvc3VyZU5vZGUpKSkKICAgICAgICAuYWRkU3VjY2Vzc29yKGdyYXBoLmV4aXQpOwoKICAgIF9jbG9zZUZ1bmN0aW9uKCk7CiAgfQoKICAvLy8gQ29uc3RydWN0cyBhIHNwZWNpYWwgc2lnbmF0dXJlIGZ1bmN0aW9uIGZvciBhIGNsb3N1cmUuCiAgdm9pZCBfYnVpbGRNZXRob2RTaWduYXR1cmVOZXdSdGkoaXIuRnVuY3Rpb25Ob2RlIG9yaWdpbmFsQ2xvc3VyZU5vZGUpIHsKICAgIC8vIFRoZSBzaWduYXR1cmUgZnVuY3Rpb24gaGFzIG5vIGNvcnJlc3BvbmRpbmcgaXIuTm9kZSwgc28gd2UganVzdCB1c2UgdGhlCiAgICAvLyB0YXJnZXRFbGVtZW50IHRvIHNldCB1cCB0aGUgdHlwZSBlbnZpcm9ubWVudC4KICAgIF9vcGVuRnVuY3Rpb24odGFyZ2V0RWxlbWVudCwgY2hlY2tzOiBUYXJnZXRDaGVja3Mubm9uZSk7CiAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlID0KICAgICAgICBfZWxlbWVudE1hcC5nZXRGdW5jdGlvblR5cGUob3JpZ2luYWxDbG9zdXJlTm9kZSk7CiAgICBISW5zdHJ1Y3Rpb24gcnRpID0KICAgICAgICBfdHlwZUJ1aWxkZXIuYW5hbHl6ZVR5cGVBcmd1bWVudE5ld1J0aShmdW5jdGlvblR5cGUsIHNvdXJjZUVsZW1lbnQpOwogICAgY2xvc2UobmV3IEhSZXR1cm4oX2Fic3RyYWN0VmFsdWVEb21haW4sIHJ0aSwKICAgICAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZFJldHVybihvcmlnaW5hbENsb3N1cmVOb2RlKSkpCiAgICAgICAgLmFkZFN1Y2Nlc3NvcihncmFwaC5leGl0KTsKICAgIF9jbG9zZUZ1bmN0aW9uKCk7CiAgfQoKICAvLy8gQnVpbGRzIGdlbmVyYXRpdmUgY29uc3RydWN0b3IgYm9keS4KICB2b2lkIF9idWlsZENvbnN0cnVjdG9yQm9keShpci5Db25zdHJ1Y3RvciBjb25zdHJ1Y3RvcikgewogICAgRnVuY3Rpb25FbnRpdHkgY29uc3RydWN0b3JCb2R5ID0KICAgICAgICBfZWxlbWVudE1hcC5nZXRDb25zdHJ1Y3RvckJvZHkoY29uc3RydWN0b3IpOwogICAgX29wZW5GdW5jdGlvbihjb25zdHJ1Y3RvckJvZHksCiAgICAgICAgZnVuY3Rpb25Ob2RlOiBjb25zdHJ1Y3Rvci5mdW5jdGlvbiwKICAgICAgICBwYXJhbWV0ZXJTdHJ1Y3R1cmU6IGNvbnN0cnVjdG9yQm9keS5wYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgICAgY2hlY2tzOiBUYXJnZXRDaGVja3Mubm9uZSk7CiAgICBjb25zdHJ1Y3Rvci5mdW5jdGlvbi5ib2R5LmFjY2VwdCh0aGlzKTsKICAgIF9jbG9zZUZ1bmN0aW9uKCk7CiAgfQoKICAvLy8gQnVpbGRzIGEgU1NBIGdyYXBoIGZvciBGdW5jdGlvbk5vZGVzLCBmb3VuZCBpbiBGdW5jdGlvbkV4cHJlc3Npb25zIGFuZAogIC8vLyBQcm9jZWR1cmVzLgogIHZvaWQgX2J1aWxkRnVuY3Rpb25Ob2RlKAogICAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uTm9kZSkgewogICAgaWYgKGZ1bmN0aW9uTm9kZS5hc3luY01hcmtlciAhPSBpci5Bc3luY01hcmtlci5TeW5jKSB7CiAgICAgIF9idWlsZEdlbmVyYXRvcihmdW5jdGlvbiwgZnVuY3Rpb25Ob2RlKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIF9vcGVuRnVuY3Rpb24oZnVuY3Rpb24sCiAgICAgICAgZnVuY3Rpb25Ob2RlOiBmdW5jdGlvbk5vZGUsCiAgICAgICAgcGFyYW1ldGVyU3RydWN0dXJlOiBmdW5jdGlvbi5wYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgICAgY2hlY2tzOiBfY2hlY2tzRm9yRnVuY3Rpb24oZnVuY3Rpb24pKTsKCiAgICAvLyBJZiBbZnVuY3Rpb25Ob2RlXSBpcyBgb3BlcmF0b3I9PWAgd2UgZXhwbGljaXRseSBhZGQgYSBudWxsIGNoZWNrIGF0IHRoZQogICAgLy8gYmVnaW5uaW5nIG9mIHRoZSBtZXRob2QuIFRoaXMgaXMgdG8gYXZvaWQgaGF2aW5nIGNhbGwgc2l0ZXMgZG8gdGhlIG51bGwKICAgIC8vIGNoZWNrLgogICAgaWYgKGZ1bmN0aW9uLm5hbWUgPT0gJz09JykgewogICAgICBpZiAoIV9jb21tb25FbGVtZW50cy5vcGVyYXRvckVxSGFuZGxlc051bGxBcmd1bWVudChmdW5jdGlvbikpIHsKICAgICAgICBfaGFuZGxlSWYoCiAgICAgICAgICAgIHZpc2l0Q29uZGl0aW9uOiAoKSB7CiAgICAgICAgICAgICAgSFBhcmFtZXRlclZhbHVlIHBhcmFtZXRlciA9IHBhcmFtZXRlcnMudmFsdWVzLmZpcnN0OwogICAgICAgICAgICAgIHB1c2gobmV3IEhJZGVudGl0eShwYXJhbWV0ZXIsIGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCksCiAgICAgICAgICAgICAgICAgIG51bGwsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlKSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHZpc2l0VGhlbjogKCkgewogICAgICAgICAgICAgIF9jbG9zZUFuZEdvdG9FeGl0KG5ldyBIUmV0dXJuKAogICAgICAgICAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgICAgICAgICAgICAgZ3JhcGguYWRkQ29uc3RhbnRCb29sKGZhbHNlLCBjbG9zZWRXb3JsZCksCiAgICAgICAgICAgICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRSZXR1cm4oZnVuY3Rpb25Ob2RlKSkpOwogICAgICAgICAgICB9LAogICAgICAgICAgICB2aXNpdEVsc2U6IG51bGwsCiAgICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkSWYoZnVuY3Rpb25Ob2RlKSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChjb25zdCBib29sLmZyb21FbnZpcm9ubWVudCgndW5yZWFjaGFibGUtdGhyb3cnKSkgewogICAgICB2YXIgZW1wdHlQYXJhbWV0ZXJzID0gcGFyYW1ldGVycy52YWx1ZXMud2hlcmUoKHApID0+CiAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0VtcHR5KHAuaW5zdHJ1Y3Rpb25UeXBlKS5pc0RlZmluaXRlbHlUcnVlKTsKICAgICAgaWYgKGVtcHR5UGFyYW1ldGVycy5sZW5ndGggPiAwKSB7CiAgICAgICAgX2FkZENvbW1lbnQoJyR7ZW1wdHlQYXJhbWV0ZXJzfSBpbmZlcnJlZCBhcyBbZW1wdHldJyk7CiAgICAgICAgYWRkKG5ldyBISW52b2tlU3RhdGljKAogICAgICAgICAgICBfY29tbW9uRWxlbWVudHMuYXNzZXJ0VW5yZWFjaGFibGVNZXRob2QsCiAgICAgICAgICAgIDxISW5zdHJ1Y3Rpb24+W10sCiAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlLAogICAgICAgICAgICBjb25zdCA8RGFydFR5cGU+W10pKTsKICAgICAgICBfY2xvc2VGdW5jdGlvbigpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb25Ob2RlLmJvZHkuYWNjZXB0KHRoaXMpOwogICAgX2Nsb3NlRnVuY3Rpb24oKTsKICB9CgogIC8vLyBBZGRzIGEgSmF2YVNjcmlwdCBjb21tZW50IHRvIHRoZSBvdXRwdXQuIFRoZSBjb21tZW50IHdpbGwgYmUgb21pdHRlZCBpbgogIC8vLyBtaW5pZmllZCBtb2RlLiAgRWFjaCBsaW5lIGluIFt0ZXh0XSBpcyBwcmVjZWRlZCB3aXRoIGAvL2AgYW5kIGluZGVudGVkLgogIC8vLyBVc2Ugc3BhcmluZ2x5LiBJbiBvcmRlciBmb3IgdGhlIGNvbW1lbnQgdG8gYmUgcmV0YWluZWQgaXQgaXMgbW9kZWxlZCBhcwogIC8vLyBoYXZpbmcgc2lkZSBlZmZlY3RzIHdoaWNoIHdpbGwgaW5oaWJpdCBjb2RlIG1vdGlvbi4KICAvLyBUT0RPKHNyYSk6IEZpZ3VyZSBvdXQgaG93IHRvIGtlZXAgY29tbWVudCBhbmNob3JlZCB3aXRob3V0IGVmZmVjdHMuCiAgdm9pZCBfYWRkQ29tbWVudChTdHJpbmcgdGV4dCkgewogICAgYWRkKG5ldyBIRm9yZWlnbkNvZGUoanMuanMuc3RhdGVtZW50VGVtcGxhdGVZaWVsZGluZyhuZXcganMuQ29tbWVudCh0ZXh0KSksCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUsIDxISW5zdHJ1Y3Rpb24+W10sCiAgICAgICAgaXNTdGF0ZW1lbnQ6IHRydWUpKTsKICB9CgogIC8vLyBCdWlsZHMgYSBTU0EgZ3JhcGggZm9yIGEgc3luYyovYXN5bmMvYXN5bmMqIGdlbmVyYXRvci4gIFdlIGdlbmVyYXRlIGEKICAvLy8gZW50cnkgZnVuY3Rpb24gd2hpY2ggdGFpbC1jYWxscyBhIGJvZHkgZnVuY3Rpb24uIFRoZSBlbnRyeSBjb250YWlucwogIC8vLyBwZXItaW52b2NhdGlvbiBjaGVja3MgYW5kIHRoZSBib2R5LCB3aGljaCBpcyBsYXRlciB0cmFuc2Zvcm1lZCwgY29udGFpbnMKICAvLy8gdGhlIHJlLWVudHJhbnQgJ3N0YXRlIG1hY2hpbmUnIGNvZGUuCiAgdm9pZCBfYnVpbGRHZW5lcmF0b3IoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24sIGlyLkZ1bmN0aW9uTm9kZSBmdW5jdGlvbk5vZGUpIHsKICAgIF9vcGVuRnVuY3Rpb24oZnVuY3Rpb24sCiAgICAgICAgZnVuY3Rpb25Ob2RlOiBmdW5jdGlvbk5vZGUsCiAgICAgICAgcGFyYW1ldGVyU3RydWN0dXJlOiBmdW5jdGlvbi5wYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgICAgY2hlY2tzOiBfY2hlY2tzRm9yRnVuY3Rpb24oZnVuY3Rpb24pKTsKCiAgICAvLyBQcmVwYXJlIHRvIHRhaWwtY2FsbCB0aGUgYm9keS4KCiAgICAvLyBJcyAnYnVpbGRBc3luY0JvZHknIHRoZSBiZXN0IGxvY2F0aW9uIGZvciB0aGUgZW50cnk/CiAgICB2YXIgc291cmNlSW5mb3JtYXRpb24gPSBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkQXN5bmNCb2R5KCk7CgogICAgLy8gRm9yd2FyZCBhbGwgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIGJvZHkuCiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzID0gPEhJbnN0cnVjdGlvbj5bXTsKICAgIGlmIChncmFwaC50aGlzSW5zdHJ1Y3Rpb24gIT0gbnVsbCkgewogICAgICBpbnB1dHMuYWRkKGdyYXBoLnRoaXNJbnN0cnVjdGlvbik7CiAgICB9CiAgICBpZiAoZ3JhcGguZXhwbGljaXRSZWNlaXZlclBhcmFtZXRlciAhPSBudWxsKSB7CiAgICAgIGlucHV0cy5hZGQoZ3JhcGguZXhwbGljaXRSZWNlaXZlclBhcmFtZXRlcik7CiAgICB9CiAgICBmb3IgKExvY2FsIGxvY2FsIGluIHBhcmFtZXRlcnMua2V5cykgewogICAgICBpZiAoIWVsaWRlZFBhcmFtZXRlcnMuY29udGFpbnMobG9jYWwpKSB7CiAgICAgICAgaW5wdXRzLmFkZChsb2NhbHNIYW5kbGVyLnJlYWRMb2NhbChsb2NhbCkpOwogICAgICB9CiAgICB9CiAgICBmb3IgKExvY2FsIGxvY2FsIGluIF9mdW5jdGlvblR5cGVQYXJhbWV0ZXJMb2NhbHMpIHsKICAgICAgaW5wdXRzLmFkZChsb2NhbHNIYW5kbGVyLnJlYWRMb2NhbChsb2NhbCkpOwogICAgfQoKICAgIC8vIEFkZCB0aGUgdHlwZSBwYXJhbWV0ZXIgZm9yIHRoZSBnZW5lcmF0b3IncyBlbGVtZW50IHR5cGUuCiAgICBEYXJ0VHlwZSBlbGVtZW50VHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0QXN5bmNPclN5bmNTdGFyRWxlbWVudFR5cGUoCiAgICAgICAgZnVuY3Rpb24uYXN5bmNNYXJrZXIsIF9yZXR1cm5UeXBlKTsKCiAgICBpZiAoZWxlbWVudFR5cGUuY29udGFpbnNGcmVlVHlwZVZhcmlhYmxlcykgewogICAgICAvLyBUeXBlIG11c3QgYmUgY29tcHV0ZWQgaW4gdGhlIGVudHJ5IGZ1bmN0aW9uLCB3aGVyZSB0aGUgdHlwZSB2YXJpYWJsZXMKICAgICAgLy8gYXJlIGluIHNjb3BlLCBhbmQgcGFzc2VkIHRvIHRoZSBib2R5IGZ1bmN0aW9uLgogICAgICBpZiAob3B0aW9ucy5leHBlcmltZW50TmV3UnRpKSB7CiAgICAgICAgaW5wdXRzCiAgICAgICAgICAgIC5hZGQoX3R5cGVCdWlsZGVyLmFuYWx5emVUeXBlQXJndW1lbnROZXdSdGkoZWxlbWVudFR5cGUsIGZ1bmN0aW9uKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW5wdXRzLmFkZChfdHlwZUJ1aWxkZXIuYW5hbHl6ZVR5cGVBcmd1bWVudChlbGVtZW50VHlwZSwgZnVuY3Rpb24pKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgLy8gVHlwZXMgd2l0aCBubyB0eXBlIHZhcmlhYmxlcyBjYW4gYmUgZW1pdHRlZCBhcyBwYXJ0IG9mIHRoZSBnZW5lcmF0b3IsCiAgICAgIC8vIGF2b2lkaW5nIGFuIGV4dHJhIGFyZ3VtZW50LgogICAgICBpZiAoX2dlbmVyYXRlZEVudHJ5SXNFbXB0eSgpKSB7CiAgICAgICAgLy8gSWYgdGhlIGVudHJ5IGZ1bmN0aW9uIGlzIGVtcHR5IChlLmcuIG5vIGFyZ3VtZW50IGNoZWNrcykgYW5kIHRoZSB0eXBlCiAgICAgICAgLy8gY2FuIGJlIGdlbmVyYXRlZCBpbiBib2R5LCAnaW5saW5lJyB0aGUgYm9keSBieSBnZW5lcmF0aW5nIGl0IGluCiAgICAgICAgLy8gcGxhY2UuIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgc3Vic2VxdWVudCB0cmFuc2Zvcm1hdGlvbiBvZiB0aGUgY29kZQogICAgICAgIC8vIGlzICdjb3JyZWN0JyBmb3IgdGhlIGVtcHR5IGVudHJ5IGZ1bmN0aW9uIGNvZGUuCiAgICAgICAgZ3JhcGgubmVlZHNBc3luY1Jld3JpdGUgPSB0cnVlOwogICAgICAgIGdyYXBoLmFzeW5jRWxlbWVudFR5cGUgPSBlbGVtZW50VHlwZTsKICAgICAgICBmdW5jdGlvbk5vZGUuYm9keS5hY2NlcHQodGhpcyk7CiAgICAgICAgX2Nsb3NlRnVuY3Rpb24oKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KCiAgICBKR2VuZXJhdG9yQm9keSBib2R5ID0gX2VsZW1lbnRNYXAuZ2V0R2VuZXJhdG9yQm9keShmdW5jdGlvbik7CiAgICBwdXNoKG5ldyBISW52b2tlR2VuZXJhdG9yQm9keSgKICAgICAgICBib2R5LAogICAgICAgIGlucHV0cywKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSwgLy8gVE9ETzogYmV0dGVyIHR5cGUuCiAgICAgICAgc291cmNlSW5mb3JtYXRpb24pKTsKCiAgICBfY2xvc2VBbmRHb3RvRXhpdCgKICAgICAgICBuZXcgSFJldHVybihfYWJzdHJhY3RWYWx1ZURvbWFpbiwgcG9wKCksIHNvdXJjZUluZm9ybWF0aW9uKSk7CgogICAgX2Nsb3NlRnVuY3Rpb24oKTsKICB9CgogIC8vLyBCdWlsZHMgYSBTU0EgZ3JhcGggZm9yIGEgc3luYyovYXN5bmMvYXN5bmMqIGdlbmVyYXRvciBib2R5LgogIHZvaWQgX2J1aWxkR2VuZXJhdG9yQm9keSgKICAgICAgSkdlbmVyYXRvckJvZHkgZnVuY3Rpb24sIGlyLkZ1bmN0aW9uTm9kZSBmdW5jdGlvbk5vZGUpIHsKICAgIEZ1bmN0aW9uRW50aXR5IGVudHJ5ID0gZnVuY3Rpb24uZnVuY3Rpb247CiAgICBfb3BlbkZ1bmN0aW9uKGVudHJ5LAogICAgICAgIGZ1bmN0aW9uTm9kZTogZnVuY3Rpb25Ob2RlLAogICAgICAgIHBhcmFtZXRlclN0cnVjdHVyZTogZnVuY3Rpb24ucGFyYW1ldGVyU3RydWN0dXJlLAogICAgICAgIGNoZWNrczogVGFyZ2V0Q2hlY2tzLm5vbmUpOwogICAgZ3JhcGgubmVlZHNBc3luY1Jld3JpdGUgPSB0cnVlOwogICAgaWYgKCFmdW5jdGlvbi5lbGVtZW50VHlwZS5jb250YWluc0ZyZWVUeXBlVmFyaWFibGVzKSB7CiAgICAgIC8vIFdlIGNhbiBnZW5lcmF0ZSB0aGUgZWxlbWVudCB0eXBlIGluIHBsYWNlCiAgICAgIGdyYXBoLmFzeW5jRWxlbWVudFR5cGUgPSBmdW5jdGlvbi5lbGVtZW50VHlwZTsKICAgIH0KICAgIGZ1bmN0aW9uTm9kZS5ib2R5LmFjY2VwdCh0aGlzKTsKICAgIF9jbG9zZUZ1bmN0aW9uKCk7CiAgfQoKICBib29sIF9nZW5lcmF0ZWRFbnRyeUlzRW1wdHkoKSB7CiAgICBIQmFzaWNCbG9jayBibG9jayA9IGN1cnJlbnQ7CiAgICAvLyBJZiBgYmxvY2suaWRgIGlzIG5vdCAxIHRoZW4gd2UgZ2VuZXJhdGVkIHNvbWUgY29udHJvbCBmbG93LgogICAgaWYgKGJsb2NrLmlkICE9IDEpIHJldHVybiBmYWxzZTsKICAgIGZvciAoSEluc3RydWN0aW9uIG5vZGUgPSBibG9jay5maXJzdDsgbm9kZSAhPSBudWxsOyBub2RlID0gbm9kZS5uZXh0KSB7CiAgICAgIGlmIChub2RlIGlzIEhHb3RvKSBjb250aW51ZTsKICAgICAgaWYgKG5vZGUgaXMgSExvYWRUeXBlKSBjb250aW51ZTsgLy8gT3JwaGFuZWQgaWYgY2hlY2sgaXMgcmVkdW5kYW50LgogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIHZvaWQgX3BvdGVudGlhbGx5QWRkRnVuY3Rpb25QYXJhbWV0ZXJUeXBlQ2hlY2tzKAogICAgICBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb24sIFRhcmdldENoZWNrcyB0YXJnZXRDaGVja3MpIHsKICAgIC8vIFB1dCB0aGUgdHlwZSBjaGVja3MgaW4gdGhlIGZpcnN0IHN1Y2Nlc3NvciBvZiB0aGUgZW50cnksCiAgICAvLyBiZWNhdXNlIHRoYXQgaXMgd2hlcmUgdGhlIHR5cGUgZ3VhcmRzIHdpbGwgYWxzbyBiZSBpbnNlcnRlZC4KICAgIC8vIFRoaXMgd2F5IHdlIGVuc3VyZSB0aGF0IGEgdHlwZSBndWFyZCB3aWxsIGRvbWluYXRlIHRoZSB0eXBlCiAgICAvLyBjaGVjay4KCiAgICBpZiAodGFyZ2V0Q2hlY2tzLmNoZWNrVHlwZVBhcmFtZXRlcnMpIHsKICAgICAgX2NoZWNrVHlwZVZhcmlhYmxlQm91bmRzKHRhcmdldEVsZW1lbnQpOwogICAgfQoKICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9CiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0TWVtYmVyRGVmaW5pdGlvbih0YXJnZXRFbGVtZW50KTsKICAgIGJvb2wgbm9kZUlzQ29uc3RydWN0b3JCb2R5ID0gZGVmaW5pdGlvbi5raW5kID09IE1lbWJlcktpbmQuY29uc3RydWN0b3JCb2R5OwoKICAgIHZvaWQgX2hhbmRsZVBhcmFtZXRlcihpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKSB7CiAgICAgIExvY2FsIGxvY2FsID0gX2xvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKHZhcmlhYmxlKTsKICAgICAgaWYgKG5vZGVJc0NvbnN0cnVjdG9yQm9keSAmJgogICAgICAgICAgX2Nsb3N1cmVEYXRhTG9va3VwCiAgICAgICAgICAgICAgLmdldENhcHR1cmVkU2NvcGUodGFyZ2V0RWxlbWVudCkKICAgICAgICAgICAgICAuaXNCb3hlZFZhcmlhYmxlKGxvY2FsKSkgewogICAgICAgIC8vIElmIGxvY2FsIGlzIGJveGVkLCB0aGVuIGB2YXJpYWJsZWAgd2lsbCBiZSBhIGZpZWxkIGluc2lkZSB0aGUgYm94CiAgICAgICAgLy8gcGFzc2VkIGFzIHRoZSBsYXN0IHBhcmFtZXRlciwgc28gbm8gbmVlZCB0byB1cGRhdGUgb3VyIGxvY2FscwogICAgICAgIC8vIGhhbmRsZXIgb3IgY2hlY2sgdHlwZXMgYXQgdGhpcyBwb2ludC4KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgSEluc3RydWN0aW9uIG5ld1BhcmFtZXRlciA9IGxvY2Fsc0hhbmRsZXIuZGlyZWN0TG9jYWxzW2xvY2FsXTsKICAgICAgYXNzZXJ0KG5ld1BhcmFtZXRlciAhPSBudWxsLCAiTm8gaW5pdGlhbCBpbnN0cnVjdGlvbiBmb3IgJHtsb2NhbH0uIik7CiAgICAgIERhcnRUeXBlIHR5cGUgPSBfZ2V0RGFydFR5cGVJZlZhbGlkKHZhcmlhYmxlLnR5cGUpOwoKICAgICAgaWYgKHRhcmdldENoZWNrcy5jaGVja0FsbFBhcmFtZXRlcnMgfHwKICAgICAgICAgICh0YXJnZXRDaGVja3MuY2hlY2tDb3ZhcmlhbnRQYXJhbWV0ZXJzICYmCiAgICAgICAgICAgICAgKHZhcmlhYmxlLmlzR2VuZXJpY0NvdmFyaWFudEltcGwgfHwgdmFyaWFibGUuaXNDb3ZhcmlhbnQpKSkgewogICAgICAgIG5ld1BhcmFtZXRlciA9IF90eXBlQnVpbGRlci5wb3RlbnRpYWxseUNoZWNrT3JUcnVzdFR5cGVPZlBhcmFtZXRlcigKICAgICAgICAgICAgdGFyZ2V0RWxlbWVudCwgbmV3UGFyYW1ldGVyLCB0eXBlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBuZXdQYXJhbWV0ZXIgPSBfdHlwZUJ1aWxkZXIudHJ1c3RUeXBlT2ZQYXJhbWV0ZXIobmV3UGFyYW1ldGVyLCB0eXBlKTsKICAgICAgfQoKICAgICAgbG9jYWxzSGFuZGxlci5kaXJlY3RMb2NhbHNbbG9jYWxdID0gbmV3UGFyYW1ldGVyOwogICAgfQoKICAgIGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmZvckVhY2goX2hhbmRsZVBhcmFtZXRlcik7CiAgICBmdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMudG9MaXN0KCkuLmZvckVhY2goX2hhbmRsZVBhcmFtZXRlcik7CiAgfQoKICB2b2lkIF9jaGVja1R5cGVWYXJpYWJsZUJvdW5kcyhGdW5jdGlvbkVudGl0eSBtZXRob2QpIHsKICAgIGlmIChfcnRpTmVlZC5tZXRob2ROZWVkc1R5cGVBcmd1bWVudHMobWV0aG9kKSAmJgogICAgICAgIGNsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YS5nZXRQYXJhbWV0ZXJDaGVja1BvbGljeShtZXRob2QpLmlzRW1pdHRlZCkgewogICAgICBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb24gPSBnZXRGdW5jdGlvbk5vZGUoX2VsZW1lbnRNYXAsIG1ldGhvZCk7CiAgICAgIGZvciAoaXIuVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyIGluIGZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgICAgTG9jYWwgbG9jYWwgPSBfbG9jYWxzTWFwLmdldExvY2FsVHlwZVZhcmlhYmxlKAogICAgICAgICAgICBuZXcgaXIuVHlwZVBhcmFtZXRlclR5cGUodHlwZVBhcmFtZXRlciksIF9lbGVtZW50TWFwKTsKICAgICAgICBISW5zdHJ1Y3Rpb24gbmV3UGFyYW1ldGVyID0gbG9jYWxzSGFuZGxlci5kaXJlY3RMb2NhbHNbbG9jYWxdOwogICAgICAgIERhcnRUeXBlIGJvdW5kID0gX2dldERhcnRUeXBlSWZWYWxpZCh0eXBlUGFyYW1ldGVyLmJvdW5kKTsKICAgICAgICBpZiAoIWJvdW5kLmlzRHluYW1pYyAmJgogICAgICAgICAgICAhYm91bmQuaXNWb2lkICYmCiAgICAgICAgICAgIGJvdW5kICE9IF9jb21tb25FbGVtZW50cy5vYmplY3RUeXBlKSB7CiAgICAgICAgICBpZiAob3B0aW9ucy5leHBlcmltZW50TmV3UnRpKSB7CiAgICAgICAgICAgIF9jaGVja1R5cGVCb3VuZChuZXdQYXJhbWV0ZXIsIGJvdW5kLCBsb2NhbC5uYW1lKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9hc3NlcnRJc1R5cGUoCiAgICAgICAgICAgICAgICBuZXdQYXJhbWV0ZXIsCiAgICAgICAgICAgICAgICBib3VuZCwKICAgICAgICAgICAgICAgICJUaGUgdHlwZSBhcmd1bWVudCAnIiwKICAgICAgICAgICAgICAgICInIGlzIG5vdCBhIHN1YnR5cGUgb2YgdGhlIHR5cGUgdmFyaWFibGUgYm91bmQgJyIsCiAgICAgICAgICAgICAgICAiJyBvZiB0eXBlIHZhcmlhYmxlICcke2xvY2FsLm5hbWV9JyBpbiAnJHttZXRob2QubmFtZX0nLiIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgLy8vIEJ1aWxkcyBhIFNTQSBncmFwaCBmb3IgRnVuY3Rpb25Ob2RlcyBvZiBleHRlcm5hbCBtZXRob2RzLgogIHZvaWQgX2J1aWxkRXh0ZXJuYWxGdW5jdGlvbk5vZGUoCiAgICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uLCBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb25Ob2RlKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBOb24tanMtaW50ZXJvcCBleHRlcm5hbCBmdW5jdGlvbnMgc2hvdWxkCiAgICAvLyB0aHJvdyBhIHJ1bnRpbWUgZXJyb3IuCiAgICBhc3NlcnQoZnVuY3Rpb25Ob2RlLmJvZHkgPT0gbnVsbCk7CiAgICBfb3BlbkZ1bmN0aW9uKGZ1bmN0aW9uLAogICAgICAgIGZ1bmN0aW9uTm9kZTogZnVuY3Rpb25Ob2RlLAogICAgICAgIHBhcmFtZXRlclN0cnVjdHVyZTogZnVuY3Rpb24ucGFyYW1ldGVyU3RydWN0dXJlLAogICAgICAgIGNoZWNrczogX2NoZWNrc0ZvckZ1bmN0aW9uKGZ1bmN0aW9uKSk7CgogICAgaWYgKGNsb3NlZFdvcmxkLm5hdGl2ZURhdGEuaXNOYXRpdmVNZW1iZXIodGFyZ2V0RWxlbWVudCkpIHsKICAgICAgcmVnaXN0cnkucmVnaXN0ZXJOYXRpdmVNZXRob2QodGFyZ2V0RWxlbWVudCk7CiAgICAgIFN0cmluZyBuYXRpdmVOYW1lOwogICAgICBpZiAoY2xvc2VkV29ybGQubmF0aXZlRGF0YS5oYXNGaXhlZEJhY2tlbmROYW1lKHRhcmdldEVsZW1lbnQpKSB7CiAgICAgICAgbmF0aXZlTmFtZSA9IGNsb3NlZFdvcmxkLm5hdGl2ZURhdGEuZ2V0Rml4ZWRCYWNrZW5kTmFtZSh0YXJnZXRFbGVtZW50KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBuYXRpdmVOYW1lID0gdGFyZ2V0RWxlbWVudC5uYW1lOwogICAgICB9CgogICAgICBTdHJpbmcgdGVtcGxhdGVSZWNlaXZlciA9ICcnOwogICAgICBMaXN0PFN0cmluZz4gdGVtcGxhdGVBcmd1bWVudHMgPSA8U3RyaW5nPltdOwogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzID0gPEhJbnN0cnVjdGlvbj5bXTsKICAgICAgaWYgKHRhcmdldEVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlcikgewogICAgICAgIHRlbXBsYXRlUmVjZWl2ZXIgPSAnIy4nOwogICAgICAgIGlucHV0cy5hZGQobG9jYWxzSGFuZGxlci5yZWFkVGhpcygKICAgICAgICAgICAgc291cmNlSW5mb3JtYXRpb246CiAgICAgICAgICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkR2V0KGZ1bmN0aW9uTm9kZSkpKTsKICAgICAgfQoKICAgICAgdm9pZCBoYW5kbGVQYXJhbWV0ZXIoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBwYXJhbSkgewogICAgICAgIHRlbXBsYXRlQXJndW1lbnRzLmFkZCgnIycpOwogICAgICAgIExvY2FsIGxvY2FsID0gX2xvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKHBhcmFtKTsKICAgICAgICAvLyBDb252ZXJ0IERhcnQgZnVuY3Rpb24gdG8gSmF2YVNjcmlwdCBmdW5jdGlvbi4KICAgICAgICBISW5zdHJ1Y3Rpb24gYXJndW1lbnQgPSBsb2NhbHNIYW5kbGVyLnJlYWRMb2NhbChsb2NhbCk7CiAgICAgICAgaXIuRGFydFR5cGUgdHlwZSA9IHBhcmFtLnR5cGU7CiAgICAgICAgaWYgKHR5cGUgaXMgaXIuRnVuY3Rpb25UeXBlKSB7CiAgICAgICAgICBpbnQgYXJpdHkgPSB0eXBlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aDsKICAgICAgICAgIF9wdXNoU3RhdGljSW52b2NhdGlvbigKICAgICAgICAgICAgICBfY29tbW9uRWxlbWVudHMuY2xvc3VyZUNvbnZlcnRlciwKICAgICAgICAgICAgICBbYXJndW1lbnQsIGdyYXBoLmFkZENvbnN0YW50SW50KGFyaXR5LCBjbG9zZWRXb3JsZCldLAogICAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlLAogICAgICAgICAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogbnVsbCk7CiAgICAgICAgICBhcmd1bWVudCA9IHBvcCgpOwogICAgICAgIH0KICAgICAgICBpbnB1dHMuYWRkKGFyZ3VtZW50KTsKICAgICAgfQoKICAgICAgZm9yIChpbnQgcG9zaXRpb24gPSAwOwogICAgICAgICAgcG9zaXRpb24gPCBmdW5jdGlvbi5wYXJhbWV0ZXJTdHJ1Y3R1cmUucG9zaXRpb25hbFBhcmFtZXRlcnM7CiAgICAgICAgICBwb3NpdGlvbisrKSB7CiAgICAgICAgaGFuZGxlUGFyYW1ldGVyKGZ1bmN0aW9uTm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVyc1twb3NpdGlvbl0pOwogICAgICB9CiAgICAgIGlmIChmdW5jdGlvbk5vZGUubmFtZWRQYXJhbWV0ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgICBMaXN0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+IG5hbWVkUGFyYW1ldGVycyA9IGZ1bmN0aW9uTm9kZQogICAgICAgICAgICAubmFtZWRQYXJhbWV0ZXJzCiAgICAgICAgICAgIC8vIEZpbHRlciBlbGlkZWQgcGFyYW1ldGVycy4KICAgICAgICAgICAgLndoZXJlKChwKSA9PgogICAgICAgICAgICAgICAgZnVuY3Rpb24ucGFyYW1ldGVyU3RydWN0dXJlLm5hbWVkUGFyYW1ldGVycy5jb250YWlucyhwLm5hbWUpKQogICAgICAgICAgICAudG9MaXN0KCk7CiAgICAgICAgLy8gU29ydCBieSBmaWxlIG9mZnNldCB0byB2aXNpdCBwYXJhbWV0ZXJzIGluIGRlY2xhcmF0aW9uIG9yZGVyLgogICAgICAgIG5hbWVkUGFyYW1ldGVycy5zb3J0KG5hdGl2ZU9yZGVyaW5nKTsKICAgICAgICBuYW1lZFBhcmFtZXRlcnMuZm9yRWFjaChoYW5kbGVQYXJhbWV0ZXIpOwogICAgICB9CgogICAgICBTdHJpbmcgYXJndW1lbnRzID0gdGVtcGxhdGVBcmd1bWVudHMuam9pbignLCcpOwoKICAgICAgLy8gVE9ETyhzcmEpOiBVc2UgZGVjbGFyZWQgdHlwZSBvciBOYXRpdmVCZWhhdmlvciB0eXBlLgogICAgICBBYnN0cmFjdFZhbHVlIHR5cGVNYXNrID0gX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGU7CiAgICAgIFN0cmluZyB0ZW1wbGF0ZTsKICAgICAgaWYgKHRhcmdldEVsZW1lbnQuaXNHZXR0ZXIpIHsKICAgICAgICB0ZW1wbGF0ZSA9ICcke3RlbXBsYXRlUmVjZWl2ZXJ9JG5hdGl2ZU5hbWUnOwogICAgICB9IGVsc2UgaWYgKHRhcmdldEVsZW1lbnQuaXNTZXR0ZXIpIHsKICAgICAgICB0ZW1wbGF0ZSA9ICcke3RlbXBsYXRlUmVjZWl2ZXJ9JG5hdGl2ZU5hbWUgPSAke2FyZ3VtZW50c30nOwogICAgICB9IGVsc2UgewogICAgICAgIHRlbXBsYXRlID0gJyR7dGVtcGxhdGVSZWNlaXZlcn0kbmF0aXZlTmFtZSgke2FyZ3VtZW50c30pJzsKICAgICAgfQoKICAgICAgcHVzaChuZXcgSEZvcmVpZ25Db2RlKAogICAgICAgICAganMuanMudW5jYWNoZWRFeHByZXNzaW9uVGVtcGxhdGUodGVtcGxhdGUpLCB0eXBlTWFzaywgaW5wdXRzLAogICAgICAgICAgZWZmZWN0czogbmV3IFNpZGVFZmZlY3RzKCkpKTsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUHJvdmlkZSBzb3VyY2UgaW5mb3JtYXRpb24uCiAgICAgIEhJbnN0cnVjdGlvbiB2YWx1ZSA9IHBvcCgpOwogICAgICBpZiAodGFyZ2V0RWxlbWVudC5pc1NldHRlcikgewogICAgICAgIHZhbHVlID0gZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKTsKICAgICAgfQogICAgICBjbG9zZShuZXcgSFJldHVybihfYWJzdHJhY3RWYWx1ZURvbWFpbiwgdmFsdWUsCiAgICAgICAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZFJldHVybihmdW5jdGlvbk5vZGUpKSkKICAgICAgICAgIC5hZGRTdWNjZXNzb3IoZ3JhcGguZXhpdCk7CiAgICB9CiAgICAvLyBUT0RPKHNyYSk6IEhhbmRsZSBKUy1pbnRlcm9wIG1ldGhvZHMuCiAgICBfY2xvc2VGdW5jdGlvbigpOwogIH0KCiAgdm9pZCBfYWRkSW1wbGljaXRJbnN0YW50aWF0aW9uKERhcnRUeXBlIHR5cGUpIHsKICAgIGlmICh0eXBlICE9IG51bGwpIHsKICAgICAgX2N1cnJlbnRJbXBsaWNpdEluc3RhbnRpYXRpb25zLmFkZCh0eXBlKTsKICAgIH0KICB9CgogIHZvaWQgX3JlbW92ZUltcGxpY2l0SW5zdGFudGlhdGlvbihEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSAhPSBudWxsKSB7CiAgICAgIF9jdXJyZW50SW1wbGljaXRJbnN0YW50aWF0aW9ucy5yZW1vdmVMYXN0KCk7CiAgICB9CiAgfQoKICBUYXJnZXRDaGVja3MgX2NoZWNrc0ZvckZ1bmN0aW9uKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKSB7CiAgICBpZiAoIWZ1bmN0aW9uLmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgLy8gU3RhdGljIG1ldGhvZHMgd2l0aCBubyB0ZWFyLW9mZiBjYW4gYmUgZ2VuZXJhdGVkIHdpdGggbm8gY2hlY2tzLgogICAgICBNZW1iZXJBY2Nlc3MgYWNjZXNzID0gY2xvc2VkV29ybGQuZ2V0TWVtYmVyQWNjZXNzKGZ1bmN0aW9uKTsKICAgICAgaWYgKGFjY2VzcyAhPSBudWxsICYmIGFjY2Vzcy5yZWFkcy5pc0VtcHR5KSB7CiAgICAgICAgcmV0dXJuIFRhcmdldENoZWNrcy5ub25lOwogICAgICB9CiAgICB9CiAgICAvLyBUT0RPKHNyYSk6IEluc3RhbmNlIG1ldGhvZHMgY2FuIGJlIGdlbmVyYXRlZCB3aXRoIHJlZHVjZWQgY2hlY2tzIGlmCiAgICAvLyBjYWxsZWQgb25seSBmcm9tIG5vbi1keW5hbWljIGNhbGwtc2l0ZXMuCiAgICByZXR1cm4gVGFyZ2V0Q2hlY2tzLmR5bmFtaWNDaGVja3M7CiAgfQoKICB2b2lkIF9vcGVuRnVuY3Rpb24oTWVtYmVyRW50aXR5IG1lbWJlciwKICAgICAge2lyLkZ1bmN0aW9uTm9kZSBmdW5jdGlvbk5vZGUsCiAgICAgIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgIFRhcmdldENoZWNrcyBjaGVja3N9KSB7CiAgICBhc3NlcnQoY2hlY2tzICE9IG51bGwpOwoKICAgIE1hcDxMb2NhbCwgQWJzdHJhY3RWYWx1ZT4gcGFyYW1ldGVyTWFwID0ge307CiAgICBMaXN0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+IGVsaWRlZFBhcmFtZXRlcnMgPSBbXTsKICAgIFNldDxMb2NhbD4gZWxpZGVkUGFyYW1ldGVyU2V0ID0gbmV3IFNldCgpOwogICAgaWYgKGZ1bmN0aW9uTm9kZSAhPSBudWxsKSB7CiAgICAgIGFzc2VydChwYXJhbWV0ZXJTdHJ1Y3R1cmUgIT0gbnVsbCk7CgogICAgICB2b2lkIGhhbmRsZVBhcmFtZXRlcihpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUsCiAgICAgICAgICB7Ym9vbCBpc09wdGlvbmFsLCBib29sIGlzRWxpZGVkfSkgewogICAgICAgIExvY2FsIGxvY2FsID0gX2xvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKG5vZGUpOwogICAgICAgIGlmIChpc0VsaWRlZCkgewogICAgICAgICAgZWxpZGVkUGFyYW1ldGVycy5hZGQobm9kZSk7CiAgICAgICAgICBlbGlkZWRQYXJhbWV0ZXJTZXQuYWRkKGxvY2FsKTsKICAgICAgICB9CiAgICAgICAgcGFyYW1ldGVyTWFwW2xvY2FsXSA9CiAgICAgICAgICAgIF90eXBlSW5mZXJlbmNlTWFwLmdldEluZmVycmVkVHlwZU9mUGFyYW1ldGVyKGxvY2FsKTsKICAgICAgfQoKICAgICAgZm9yRWFjaE9yZGVyZWRQYXJhbWV0ZXJCeUZ1bmN0aW9uTm9kZSgKICAgICAgICAgIGZ1bmN0aW9uTm9kZSwgcGFyYW1ldGVyU3RydWN0dXJlLCBoYW5kbGVQYXJhbWV0ZXIpOwoKICAgICAgX3JldHVyblR5cGUgPSBfZWxlbWVudE1hcC5nZXREYXJ0VHlwZShmdW5jdGlvbk5vZGUucmV0dXJuVHlwZSk7CiAgICB9CgogICAgSEJhc2ljQmxvY2sgYmxvY2sgPSBncmFwaC5hZGROZXdCbG9jaygpOwogICAgLy8gQ3JlYXRlIGBncmFwaC5lbnRyeWAgYXMgYW4gaW5pdGlhbGx5IGVtcHR5IGJsb2NrLiBgZ3JhcGguZW50cnlgIGlzCiAgICAvLyB0cmVhdGVkIHNwZWNpYWxseSAoaG9sZGluZyBwYXJhbWV0ZXJzLCBsb2NhbCB2YXJpYWJsZXMgYW5kIGNvbnN0YW50cykKICAgIC8vIGJ1dCBjYW5ub3QgcmVjZWl2ZSBjb25zdGFudHMgYmVmb3JlIGl0IGhhcyBiZWVuIGNsb3NlZC4gQnkgY2xvc2luZyBpdAogICAgLy8gaGVyZSwgd2UgY2FuIHVzZSBjb25zdGFudHMgaW4gdGhlIGNvZGUgdGhhdCBzZXRzIHVwIHRoZSBmdW5jdGlvbi4KICAgIG9wZW4oZ3JhcGguZW50cnkpOwogICAgY2xvc2UobmV3IEhHb3RvKF9hYnN0cmFjdFZhbHVlRG9tYWluKSkuYWRkU3VjY2Vzc29yKGJsb2NrKTsKICAgIG9wZW4oYmxvY2spOwoKICAgIGxvY2Fsc0hhbmRsZXIuc3RhcnRGdW5jdGlvbigKICAgICAgICB0YXJnZXRFbGVtZW50LAogICAgICAgIF9jbG9zdXJlRGF0YUxvb2t1cC5nZXRTY29wZUluZm8odGFyZ2V0RWxlbWVudCksCiAgICAgICAgX2Nsb3N1cmVEYXRhTG9va3VwLmdldENhcHR1cmVkU2NvcGUodGFyZ2V0RWxlbWVudCksCiAgICAgICAgcGFyYW1ldGVyTWFwLAogICAgICAgIGVsaWRlZFBhcmFtZXRlclNldCwKICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkRGVjbGFyYXRpb24odGFyZ2V0RWxlbWVudCksCiAgICAgICAgaXNHZW5lcmF0aXZlQ29uc3RydWN0b3JCb2R5OiB0YXJnZXRFbGVtZW50IGlzIENvbnN0cnVjdG9yQm9keUVudGl0eSk7CgogICAgZm9yIChpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUgaW4gZWxpZGVkUGFyYW1ldGVycykgewogICAgICBMb2NhbCBsb2NhbCA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZShub2RlKTsKICAgICAgbG9jYWxzSGFuZGxlci51cGRhdGVMb2NhbChsb2NhbCwgX2RlZmF1bHRWYWx1ZUZvclBhcmFtZXRlcihub2RlKSk7CiAgICB9CgogICAgX2FkZENsYXNzVHlwZVZhcmlhYmxlc0lmTmVlZGVkKG1lbWJlcik7CiAgICBfYWRkRnVuY3Rpb25UeXBlVmFyaWFibGVzSWZOZWVkZWQobWVtYmVyKTsKCiAgICBpZiAoZnVuY3Rpb25Ob2RlICE9IG51bGwpIHsKICAgICAgX3BvdGVudGlhbGx5QWRkRnVuY3Rpb25QYXJhbWV0ZXJUeXBlQ2hlY2tzKGZ1bmN0aW9uTm9kZSwgY2hlY2tzKTsKICAgIH0KICAgIF9pbnNlcnRDb3ZlcmFnZUNhbGwobWVtYmVyKTsKICB9CgogIHZvaWQgX2Nsb3NlRnVuY3Rpb24oKSB7CiAgICBpZiAoIWlzQWJvcnRlZCgpKSBfY2xvc2VBbmRHb3RvRXhpdChuZXcgSEdvdG8oX2Fic3RyYWN0VmFsdWVEb21haW4pKTsKICAgIGdyYXBoLmZpbmFsaXplKF9hYnN0cmFjdFZhbHVlRG9tYWluKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZGVmYXVsdE5vZGUoaXIuTm9kZSBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5oYW5kbGVkIG5vZGUgJG5vZGUgKCR7bm9kZS5ydW50aW1lVHlwZX0pIik7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgY3VycmVudCBzb3VyY2UgZWxlbWVudC4gVGhpcyBpcyB1c2VkIGJ5IHRoZSB0eXBlIGJ1aWxkZXIuCiAgLy8gVE9ETyhlZm9ydHVuYSk6IFVwZGF0ZSB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IGlubGluaW5nLgogIC8vIFRPRE8oc3JhKTogUmUtaW1wbGVtZW50IHR5cGUgYnVpbGRlciB1c2luZyBLZXJuZWwgdHlwZXMgYW5kIHRoZQogIC8vIGB0YXJnZXRgIGZvciBjb250ZXh0LgogIE1lbWJlckVudGl0eSBnZXQgc291cmNlRWxlbWVudCA9PiBfY3VycmVudEZyYW1lLm1lbWJlcjsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENoZWNrTGlicmFyeUlzTG9hZGVkKGlyLkNoZWNrTGlicmFyeUlzTG9hZGVkIGNoZWNrTG9hZCkgewogICAgSW1wb3J0RW50aXR5IGltcG9ydCA9IF9lbGVtZW50TWFwLmdldEltcG9ydChjaGVja0xvYWQuaW1wb3J0KTsKICAgIFN0cmluZyBsb2FkSWQgPSBjbG9zZWRXb3JsZC5vdXRwdXRVbml0RGF0YS5nZXRJbXBvcnREZWZlck5hbWUoCiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U3Bhbm5hYmxlKHRhcmdldEVsZW1lbnQsIGNoZWNrTG9hZCksIGltcG9ydCk7CiAgICBISW5zdHJ1Y3Rpb24gcHJlZml4Q29uc3RhbnQgPSBncmFwaC5hZGRDb25zdGFudFN0cmluZyhsb2FkSWQsIGNsb3NlZFdvcmxkKTsKICAgIEhJbnN0cnVjdGlvbiB1cmlDb25zdGFudCA9CiAgICAgICAgZ3JhcGguYWRkQ29uc3RhbnRTdHJpbmcoJyR7aW1wb3J0LnVyaX0nLCBjbG9zZWRXb3JsZCk7CiAgICBfcHVzaFN0YXRpY0ludm9jYXRpb24oCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmNoZWNrRGVmZXJyZWRJc0xvYWRlZCwKICAgICAgICBbcHJlZml4Q29uc3RhbnQsIHVyaUNvbnN0YW50XSwKICAgICAgICBfdHlwZUluZmVyZW5jZU1hcAogICAgICAgICAgICAuZ2V0UmV0dXJuVHlwZU9mKF9jb21tb25FbGVtZW50cy5jaGVja0RlZmVycmVkSXNMb2FkZWQpLAogICAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TG9hZExpYnJhcnkoaXIuTG9hZExpYnJhcnkgbG9hZExpYnJhcnkpIHsKICAgIFN0cmluZyBsb2FkSWQgPSBjbG9zZWRXb3JsZC5vdXRwdXRVbml0RGF0YS5nZXRJbXBvcnREZWZlck5hbWUoCiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U3Bhbm5hYmxlKHRhcmdldEVsZW1lbnQsIGxvYWRMaWJyYXJ5KSwKICAgICAgICBfZWxlbWVudE1hcC5nZXRJbXBvcnQobG9hZExpYnJhcnkuaW1wb3J0KSk7CiAgICAvLyBUT0RPKGVmb3J0dW5hKTogU291cmNlIGluZm9ybWF0aW9uIQogICAgcHVzaChuZXcgSEludm9rZVN0YXRpYygKICAgICAgICBfY29tbW9uRWxlbWVudHMubG9hZERlZmVycmVkTGlicmFyeSwKICAgICAgICA8SEluc3RydWN0aW9uPltncmFwaC5hZGRDb25zdGFudFN0cmluZyhsb2FkSWQsIGNsb3NlZFdvcmxkKV0sCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4ubm9uTnVsbFR5cGUsCiAgICAgICAgY29uc3QgPERhcnRUeXBlPltdLAogICAgICAgIHRhcmdldENhblRocm93OiBmYWxzZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJsb2NrKGlyLkJsb2NrIGJsb2NrKSB7CiAgICBhc3NlcnQoIWlzQWJvcnRlZCgpKTsKICAgIGlmICghX2lzUmVhY2hhYmxlKSByZXR1cm47IC8vIFRoaXMgY2FuIG9ubHkgaGFwcGVuIHdoZW4gaW5saW5pbmcuCiAgICBmb3IgKGlyLlN0YXRlbWVudCBzdGF0ZW1lbnQgaW4gYmxvY2suc3RhdGVtZW50cykgewogICAgICBzdGF0ZW1lbnQuYWNjZXB0KHRoaXMpOwogICAgICBpZiAoIV9pc1JlYWNoYWJsZSkgewogICAgICAgIC8vIFRoZSBibG9jayBoYXMgYmVlbiBhYm9ydGVkIGJ5IGEgcmV0dXJuIG9yIGEgdGhyb3cuCiAgICAgICAgaWYgKHN0YWNrLmlzTm90RW1wdHkpIHsKICAgICAgICAgIHJlcG9ydGVyLmludGVybmFsRXJyb3IoCiAgICAgICAgICAgICAgTk9fTE9DQVRJT05fU1BBTk5BQkxFLCAnTm9uLWVtcHR5IGluc3RydWN0aW9uIHN0YWNrLicpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICAgIGFzc2VydCghY3VycmVudC5pc0Nsb3NlZCgpKTsKICAgIGlmIChzdGFjay5pc05vdEVtcHR5KSB7CiAgICAgIHJlcG9ydGVyLmludGVybmFsRXJyb3IoCiAgICAgICAgICBOT19MT0NBVElPTl9TUEFOTkFCTEUsICdOb24tZW1wdHkgaW5zdHJ1Y3Rpb24gc3RhY2snKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRFbXB0eVN0YXRlbWVudChpci5FbXB0eVN0YXRlbWVudCBub2RlKSB7CiAgICAvLyBFbXB0eSBzdGF0ZW1lbnQgYWRkcyBubyBpbnN0cnVjdGlvbnMgdG8gY3VycmVudCBibG9jay4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRFeHByZXNzaW9uU3RhdGVtZW50KGlyLkV4cHJlc3Npb25TdGF0ZW1lbnQgbm9kZSkgewogICAgaWYgKCFfaXNSZWFjaGFibGUpIHJldHVybjsKICAgIGlyLkV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IG5vZGUuZXhwcmVzc2lvbjsKICAgIGlmIChleHByZXNzaW9uIGlzIGlyLlRocm93ICYmIF9pbmxpbmluZ1N0YWNrLmlzRW1wdHkpIHsKICAgICAgX3Zpc2l0VGhyb3dFeHByZXNzaW9uKGV4cHJlc3Npb24uZXhwcmVzc2lvbik7CiAgICAgIF9oYW5kbGVJblRyeVN0YXRlbWVudCgpOwogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9CiAgICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkVGhyb3cobm9kZS5leHByZXNzaW9uKTsKICAgICAgX2Nsb3NlQW5kR290b0V4aXQoCiAgICAgICAgICBuZXcgSFRocm93KF9hYnN0cmFjdFZhbHVlRG9tYWluLCBwb3AoKSwgc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0gZWxzZSB7CiAgICAgIGV4cHJlc3Npb24uYWNjZXB0KHRoaXMpOwogICAgICBwb3AoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb25zdGFudEV4cHJlc3Npb24oaXIuQ29uc3RhbnRFeHByZXNzaW9uIG5vZGUpIHsKICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPSBfZWxlbWVudE1hcC5nZXRDb25zdGFudFZhbHVlKG5vZGUpOwogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRHZXQobm9kZSk7CiAgICBpZiAoIWNsb3NlZFdvcmxkLm91dHB1dFVuaXREYXRhCiAgICAgICAgLmhhc09ubHlOb25EZWZlcnJlZEltcG9ydFBhdGhzVG9Db25zdGFudCh0YXJnZXRFbGVtZW50LCB2YWx1ZSkpIHsKICAgICAgT3V0cHV0VW5pdCBvdXRwdXRVbml0ID0KICAgICAgICAgIGNsb3NlZFdvcmxkLm91dHB1dFVuaXREYXRhLm91dHB1dFVuaXRGb3JDb25zdGFudCh2YWx1ZSk7CiAgICAgIENvbnN0YW50VmFsdWUgZGVmZXJyZWRDb25zdGFudCA9CiAgICAgICAgICBuZXcgRGVmZXJyZWRHbG9iYWxDb25zdGFudFZhbHVlKHZhbHVlLCBvdXRwdXRVbml0KTsKICAgICAgcmVnaXN0cnkucmVnaXN0ZXJDb25zdGFudFVzZShuZXcgQ29uc3RhbnRVc2UuZGVmZXJyZWQoZGVmZXJyZWRDb25zdGFudCkpOwogICAgICBzdGFjay5hZGQoZ3JhcGguYWRkRGVmZXJyZWRDb25zdGFudCgKICAgICAgICAgIGRlZmVycmVkQ29uc3RhbnQsIHNvdXJjZUluZm9ybWF0aW9uLCBjbG9zZWRXb3JsZCkpOwogICAgfSBlbHNlIHsKICAgICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50KHZhbHVlLCBjbG9zZWRXb3JsZCwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFJldHVyblN0YXRlbWVudChpci5SZXR1cm5TdGF0ZW1lbnQgbm9kZSkgewogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRSZXR1cm4obm9kZSk7CiAgICBISW5zdHJ1Y3Rpb24gdmFsdWU7CiAgICBpZiAobm9kZS5leHByZXNzaW9uID09IG51bGwpIHsKICAgICAgdmFsdWUgPSBncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpOwogICAgfSBlbHNlIHsKICAgICAgbm9kZS5leHByZXNzaW9uLmFjY2VwdCh0aGlzKTsKICAgICAgdmFsdWUgPSBwb3AoKTsKICAgICAgaWYgKF9jdXJyZW50RnJhbWUuYXN5bmNNYXJrZXIgPT0gQXN5bmNNYXJrZXIuQVNZTkMpIHsKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJcyB0aGlzIHNwZWNpYWwtY2FzaW5nIG9mIGFzeW5jIHN0aWxsIG5lZWRlZAogICAgICAgIC8vIG9yIHNob3VsZCB3ZSB1c2UgdGhlIGdlbmVyYWwgY2hlY2sgYmVsb3c/CiAgICAgICAgLyppZiAob3B0aW9ucy5lbmFibGVUeXBlQXNzZXJ0aW9ucyAmJgogICAgICAgICAgICAhaXNWYWxpZEFzeW5jUmV0dXJuVHlwZShfcmV0dXJuVHlwZSkpIHsKICAgICAgICAgIGdlbmVyYXRlVHlwZUVycm9yKAogICAgICAgICAgICAgICJBc3luYyBmdW5jdGlvbiByZXR1cm5lZCBhIEZ1dHVyZSwiCiAgICAgICAgICAgICAgIiB3YXMgZGVjbGFyZWQgdG8gcmV0dXJuIGEgJHtfcmV0dXJuVHlwZX0uIiwKICAgICAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgICAgICBwb3AoKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9Ki8KICAgICAgfSBlbHNlIHsKICAgICAgICB2YWx1ZSA9IF90eXBlQnVpbGRlci5wb3RlbnRpYWxseUNoZWNrT3JUcnVzdFR5cGVPZkFzc2lnbm1lbnQoCiAgICAgICAgICAgIF9jdXJyZW50RnJhbWUubWVtYmVyLCB2YWx1ZSwgX3JldHVyblR5cGUpOwogICAgICB9CiAgICB9CiAgICBfaGFuZGxlSW5UcnlTdGF0ZW1lbnQoKTsKICAgIGlmIChfaW5saW5pbmdTdGFjay5pc0VtcHR5ICYmIHRhcmdldEVsZW1lbnQuaXNTZXR0ZXIpIHsKICAgICAgaWYgKG5vZGUucGFyZW50IGlzIGlyLkZ1bmN0aW9uTm9kZSkgewogICAgICAgIC8vIEFuIGFycm93IGZ1bmN0aW9uIGRlZmluaXRpb24gb2YgYSBzZXR0ZXIgaGFzIGEgUmV0dXJuU3RhdGVtbnQgYXMgYQogICAgICAgIC8vIGJvZHksIGUuZy4gInNldCBmb28oeCkgPT4gdGhpcy5feCA9IHg7Ii4gVGhlcmUgaXMgbm8gd2F5IHRvIGFjY2VzcwogICAgICAgIC8vIHRoZSByZXR1cm5lZCB2YWx1ZSwgc28gZG9uJ3QgZW1pdCBhIHJldHVybi4KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICAgIF9lbWl0UmV0dXJuKHZhbHVlLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Rm9yU3RhdGVtZW50KGlyLkZvclN0YXRlbWVudCBub2RlKSB7CiAgICBhc3NlcnQoX2lzUmVhY2hhYmxlKTsKICAgIGFzc2VydChub2RlLmJvZHkgIT0gbnVsbCk7CiAgICB2b2lkIGJ1aWxkSW5pdGlhbGl6ZXIoKSB7CiAgICAgIGZvciAoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbiBpbiBub2RlLnZhcmlhYmxlcykgewogICAgICAgIGRlY2xhcmF0aW9uLmFjY2VwdCh0aGlzKTsKICAgICAgfQogICAgfQoKICAgIEhJbnN0cnVjdGlvbiBidWlsZENvbmRpdGlvbigpIHsKICAgICAgaWYgKG5vZGUuY29uZGl0aW9uID09IG51bGwpIHsKICAgICAgICByZXR1cm4gZ3JhcGguYWRkQ29uc3RhbnRCb29sKHRydWUsIGNsb3NlZFdvcmxkKTsKICAgICAgfQogICAgICBub2RlLmNvbmRpdGlvbi5hY2NlcHQodGhpcyk7CiAgICAgIHJldHVybiBwb3BCb29saWZpZWQoKTsKICAgIH0KCiAgICB2b2lkIGJ1aWxkVXBkYXRlKCkgewogICAgICBmb3IgKGlyLkV4cHJlc3Npb24gZXhwcmVzc2lvbiBpbiBub2RlLnVwZGF0ZXMpIHsKICAgICAgICBleHByZXNzaW9uLmFjY2VwdCh0aGlzKTsKICAgICAgICBhc3NlcnQoIWlzQWJvcnRlZCgpKTsKICAgICAgICAvLyBUaGUgcmVzdWx0IG9mIHRoZSB1cGRhdGUgaW5zdHJ1Y3Rpb24gaXNuJ3QgdXNlZCwgYW5kIGNhbiBqdXN0CiAgICAgICAgLy8gYmUgZHJvcHBlZC4KICAgICAgICBwb3AoKTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgYnVpbGRCb2R5KCkgewogICAgICBub2RlLmJvZHkuYWNjZXB0KHRoaXMpOwogICAgfQoKICAgIEp1bXBUYXJnZXQganVtcFRhcmdldCA9IF9sb2NhbHNNYXAuZ2V0SnVtcFRhcmdldEZvckZvcihub2RlKTsKICAgIF9sb29wSGFuZGxlci5oYW5kbGVMb29wKAogICAgICAgIG5vZGUsCiAgICAgICAgX2Nsb3N1cmVEYXRhTG9va3VwLmdldENhcHR1cmVkTG9vcFNjb3BlKG5vZGUpLAogICAgICAgIGp1bXBUYXJnZXQsCiAgICAgICAgYnVpbGRJbml0aWFsaXplciwKICAgICAgICBidWlsZENvbmRpdGlvbiwKICAgICAgICBidWlsZFVwZGF0ZSwKICAgICAgICBidWlsZEJvZHksCiAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZExvb3Aobm9kZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZvckluU3RhdGVtZW50KGlyLkZvckluU3RhdGVtZW50IG5vZGUpIHsKICAgIGlmIChub2RlLmlzQXN5bmMpIHsKICAgICAgX2J1aWxkQXN5bmNGb3JJbihub2RlKTsKICAgIH0gZWxzZSBpZiAoX3R5cGVJbmZlcmVuY2VNYXAuaXNKc0luZGV4YWJsZUl0ZXJhdG9yKAogICAgICAgIG5vZGUsIF9hYnN0cmFjdFZhbHVlRG9tYWluKSkgewogICAgICAvLyBJZiB0aGUgZXhwcmVzc2lvbiBiZWluZyBpdGVyYXRlZCBvdmVyIGlzIGEgSlMgaW5kZXhhYmxlIHR5cGUsIHdlIGNhbgogICAgICAvLyBnZW5lcmF0ZSBhbiBvcHRpbWl6ZWQgdmVyc2lvbiBvZiBmb3ItaW4gdGhhdCB1c2VzIGluZGV4aW5nLgogICAgICBfYnVpbGRGb3JJbkluZGV4YWJsZShub2RlKTsKICAgIH0gZWxzZSB7CiAgICAgIF9idWlsZEZvckluSXRlcmF0b3Iobm9kZSk7CiAgICB9CiAgfQoKICAvLy8gQnVpbGRzIHRoZSBncmFwaCBmb3IgYSBmb3ItaW4gbm9kZSB3aXRoIGFuIGluZGV4YWJsZSBleHByZXNzaW9uLgogIC8vLwogIC8vLyBJbiB0aGlzIGNhc2Ugd2UgYnVpbGQ6CiAgLy8vCiAgLy8vICAgIGludCBlbmQgPSBhLmxlbmd0aDsKICAvLy8gICAgZm9yIChpbnQgaSA9IDA7CiAgLy8vICAgICAgICAgaSA8IGEubGVuZ3RoOwogIC8vLyAgICAgICAgIGNoZWNrQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKGEubGVuZ3RoID09IGVuZCwgYSksICsraSkgewogIC8vLyAgICAgIDxkZWNsYXJlZElkZW50aWZpZXI+ID0gYVtpXTsKICAvLy8gICAgICA8Ym9keT4KICAvLy8gICAgfQogIHZvaWQgX2J1aWxkRm9ySW5JbmRleGFibGUoaXIuRm9ySW5TdGF0ZW1lbnQgbm9kZSkgewogICAgU3ludGhldGljTG9jYWwgaW5kZXhWYXJpYWJsZSA9IGxvY2Fsc0hhbmRsZXIuY3JlYXRlTG9jYWwoJ19pJyk7CgogICAgLy8gVGhlc2UgdmFyaWFibGVzIGFyZSBzaGFyZWQgYnkgaW5pdGlhbGl6ZXIsIGNvbmRpdGlvbiwgYm9keSBhbmQgdXBkYXRlLgogICAgSEluc3RydWN0aW9uIGFycmF5OyAvLyBTZXQgaW4gYnVpbGRJbml0aWFsaXplci4KICAgIGJvb2wgaXNGaXhlZDsgLy8gU2V0IGluIGJ1aWxkSW5pdGlhbGl6ZXIuCiAgICBISW5zdHJ1Y3Rpb24gb3JpZ2luYWxMZW5ndGggPSBudWxsOyAvLyBTZXQgZm9yIGdyb3dhYmxlIGxpc3RzLgoKICAgIEhJbnN0cnVjdGlvbiBidWlsZEdldExlbmd0aChTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgICBIR2V0TGVuZ3RoIHJlc3VsdCA9IG5ldyBIR2V0TGVuZ3RoKAogICAgICAgICAgYXJyYXksIF9hYnN0cmFjdFZhbHVlRG9tYWluLnBvc2l0aXZlSW50VHlwZSwKICAgICAgICAgIGlzQXNzaWduYWJsZTogIWlzRml4ZWQpCiAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogICAgICBhZGQocmVzdWx0KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICB2b2lkIGJ1aWxkQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yQ2hlY2soKSB7CiAgICAgIGlmIChvcmlnaW5hbExlbmd0aCA9PSBudWxsKSByZXR1cm47CiAgICAgIC8vIFRoZSBzdGF0aWMgY2FsbCBjaGVja0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcigpIGlzIGV4cGFuZGVkIGluCiAgICAgIC8vIGNvZGVnZW4gdG86CiAgICAgIC8vCiAgICAgIC8vICAgICBhcnJheS5sZW5ndGggPT0gX2VuZCB8fCB0aHJvd0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcihhcnJheSkKICAgICAgLy8KICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEZvckluTW92ZU5leHQobm9kZSk7CiAgICAgIEhJbnN0cnVjdGlvbiBsZW5ndGggPSBidWlsZEdldExlbmd0aChzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIHB1c2gobmV3IEhJZGVudGl0eSgKICAgICAgICAgIGxlbmd0aCwgb3JpZ2luYWxMZW5ndGgsIG51bGwsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlKQogICAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIF9wdXNoU3RhdGljSW52b2NhdGlvbigKICAgICAgICAgIF9jb21tb25FbGVtZW50cy5jaGVja0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvciwKICAgICAgICAgIFtwb3AoKSwgYXJyYXldLAogICAgICAgICAgX3R5cGVJbmZlcmVuY2VNYXAuZ2V0UmV0dXJuVHlwZU9mKAogICAgICAgICAgICAgIF9jb21tb25FbGVtZW50cy5jaGVja0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvciksCiAgICAgICAgICBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwogICAgICBwb3AoKTsKICAgIH0KCiAgICB2b2lkIGJ1aWxkSW5pdGlhbGl6ZXIoKSB7CiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0KICAgICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRGb3JJbkl0ZXJhdG9yKG5vZGUpOwoKICAgICAgbm9kZS5pdGVyYWJsZS5hY2NlcHQodGhpcyk7CiAgICAgIGFycmF5ID0gcG9wKCk7CiAgICAgIGlzRml4ZWQgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgICAgLmlzRml4ZWRMZW5ndGhKc0luZGV4YWJsZShhcnJheS5pbnN0cnVjdGlvblR5cGUpCiAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZTsKICAgICAgbG9jYWxzSGFuZGxlci51cGRhdGVMb2NhbCgKICAgICAgICAgIGluZGV4VmFyaWFibGUsIGdyYXBoLmFkZENvbnN0YW50SW50KDAsIGNsb3NlZFdvcmxkKSwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIG9yaWdpbmFsTGVuZ3RoID0gYnVpbGRHZXRMZW5ndGgoc291cmNlSW5mb3JtYXRpb24pOwogICAgfQoKICAgIEhJbnN0cnVjdGlvbiBidWlsZENvbmRpdGlvbigpIHsKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEZvckluTW92ZU5leHQobm9kZSk7CiAgICAgIEhJbnN0cnVjdGlvbiBpbmRleCA9IGxvY2Fsc0hhbmRsZXIucmVhZExvY2FsKGluZGV4VmFyaWFibGUsCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwogICAgICBISW5zdHJ1Y3Rpb24gbGVuZ3RoID0gYnVpbGRHZXRMZW5ndGgoc291cmNlSW5mb3JtYXRpb24pOwogICAgICBISW5zdHJ1Y3Rpb24gY29tcGFyZSA9CiAgICAgICAgICBuZXcgSExlc3MoaW5kZXgsIGxlbmd0aCwgbnVsbCwgX2Fic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUpCiAgICAgICAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgYWRkKGNvbXBhcmUpOwogICAgICByZXR1cm4gY29tcGFyZTsKICAgIH0KCiAgICB2b2lkIGJ1aWxkQm9keSgpIHsKICAgICAgLy8gSWYgd2UgaGFkIG1lY2hhbmljYWxseSBpbmxpbmVkIEFycmF5SXRlcmF0b3IubW92ZU5leHQoKSwgaXQgd291bGQgaGF2ZQogICAgICAvLyBpbnNlcnRlZCB0aGUgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yIGNoZWNrIGFzIHBhcnQgb2YgdGhlCiAgICAgIC8vIGNvbmRpdGlvbi4gIEl0IGlzIG5vdCBuZWNlc3Nhcnkgb24gdGhlIGZpcnN0IGl0ZXJhdGlvbiBzaW5jZSB0aGVyZSBpcwogICAgICAvLyBubyBjb2RlIGJldHdlZW4gY2FsbHMgdG8gYGdldCBpdGVyYXRvcmAgYW5kIGBtb3ZlTmV4dGAsIHNvIHRoZSB0ZXN0IGlzCiAgICAgIC8vIG1vdmVkIHRvIHRoZSBsb29wIHVwZGF0ZS4KCiAgICAgIC8vIEZpbmQgYSB0eXBlIGZvciB0aGUgZWxlbWVudC4gVXNlIHRoZSBlbGVtZW50IHR5cGUgb2YgdGhlIGluZGV4ZXIgb2YgdGhlCiAgICAgIC8vIGFycmF5LCBhcyB0aGlzIGlzIHN0cm9uZ2VyIHRoYW4gdGhlIGl0ZXJhdG9yJ3MgYGdldCBjdXJyZW50YCB0eXBlLCBmb3IKICAgICAgLy8gZXhhbXBsZSwgYGdldCBjdXJyZW50YCBpbmNsdWRlcyBudWxsLgogICAgICAvLyBUT0RPKHNyYSk6IFRoZSBlbGVtZW50IHR5cGUgb2YgYSBjb250YWluZXIgdHlwZSBtYXNrIG1pZ2h0IGJlIGJldHRlci4KICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlID0gX3R5cGVJbmZlcmVuY2VNYXAuaW5mZXJyZWRJbmRleFR5cGUobm9kZSk7CgogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9CiAgICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkRm9ySW5DdXJyZW50KG5vZGUpOwogICAgICBISW5zdHJ1Y3Rpb24gaW5kZXggPSBsb2NhbHNIYW5kbGVyLnJlYWRMb2NhbChpbmRleFZhcmlhYmxlLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgSEluc3RydWN0aW9uIHZhbHVlID0gbmV3IEhJbmRleChhcnJheSwgaW5kZXgsIG51bGwsIHR5cGUpCiAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogICAgICBhZGQodmFsdWUpOwoKICAgICAgTG9jYWwgbG9vcFZhcmlhYmxlTG9jYWwgPSBfbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUobm9kZS52YXJpYWJsZSk7CiAgICAgIGxvY2Fsc0hhbmRsZXIudXBkYXRlTG9jYWwobG9vcFZhcmlhYmxlTG9jYWwsIHZhbHVlLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgLy8gSGludCB0byBuYW1lIGxvb3AgdmFsdWUgYWZ0ZXIgbmFtZSBvZiBsb29wIHZhcmlhYmxlLgogICAgICBpZiAobG9vcFZhcmlhYmxlTG9jYWwgaXMhIFN5bnRoZXRpY0xvY2FsKSB7CiAgICAgICAgdmFsdWUuc291cmNlRWxlbWVudCA/Pz0gbG9vcFZhcmlhYmxlTG9jYWw7CiAgICAgIH0KCiAgICAgIG5vZGUuYm9keS5hY2NlcHQodGhpcyk7CiAgICB9CgogICAgdm9pZCBidWlsZFVwZGF0ZSgpIHsKICAgICAgLy8gU2VlIGJ1aWxkQm9keSBhcyB0byB3aHkgd2UgY2hlY2sgaGVyZS4KICAgICAgYnVpbGRDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3JDaGVjaygpOwoKICAgICAgLy8gVE9ETyhzcmEpOiBJdCB3b3VsZCBiZSBzbGlnaHRseSBzaG9ydGVyIHRvIGdlbmVyYXRlIGBhW2krK11gIGluIHRoZQogICAgICAvLyBib2R5IChhbmQgdGhhdCBtb3JlIGNsb3NlbHkgZm9sbG93cyB3aGF0IGFuIGlubGluZWQgaXRlcmF0b3Igd291bGQgZG8pCiAgICAgIC8vIGJ1dCB0aGUgY29kZSBpcyBob3JyaWJsZSBhcyBgaSsxYCBpcyBjYXJyaWVkIGFyb3VuZCB0aGUgbG9vcCBpbiBhbgogICAgICAvLyBhZGRpdGlvbmFsIHZhcmlhYmxlLgogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9CiAgICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkRm9ySW5TZXQobm9kZSk7CiAgICAgIEhJbnN0cnVjdGlvbiBpbmRleCA9IGxvY2Fsc0hhbmRsZXIucmVhZExvY2FsKGluZGV4VmFyaWFibGUsCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwogICAgICBISW5zdHJ1Y3Rpb24gb25lID0gZ3JhcGguYWRkQ29uc3RhbnRJbnQoMSwgY2xvc2VkV29ybGQpOwogICAgICBISW5zdHJ1Y3Rpb24gYWRkSW5zdHJ1Y3Rpb24gPQogICAgICAgICAgbmV3IEhBZGQoaW5kZXgsIG9uZSwgbnVsbCwgX2Fic3RyYWN0VmFsdWVEb21haW4ucG9zaXRpdmVJbnRUeXBlKQogICAgICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgICAgIGFkZChhZGRJbnN0cnVjdGlvbik7CiAgICAgIGxvY2Fsc0hhbmRsZXIudXBkYXRlTG9jYWwoaW5kZXhWYXJpYWJsZSwgYWRkSW5zdHJ1Y3Rpb24sCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwogICAgfQoKICAgIF9sb29wSGFuZGxlci5oYW5kbGVMb29wKAogICAgICAgIG5vZGUsCiAgICAgICAgX2Nsb3N1cmVEYXRhTG9va3VwLmdldENhcHR1cmVkTG9vcFNjb3BlKG5vZGUpLAogICAgICAgIF9sb2NhbHNNYXAuZ2V0SnVtcFRhcmdldEZvckZvckluKG5vZGUpLAogICAgICAgIGJ1aWxkSW5pdGlhbGl6ZXIsCiAgICAgICAgYnVpbGRDb25kaXRpb24sCiAgICAgICAgYnVpbGRVcGRhdGUsCiAgICAgICAgYnVpbGRCb2R5LAogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRMb29wKG5vZGUpKTsKICB9CgogIHZvaWQgX2J1aWxkRm9ySW5JdGVyYXRvcihpci5Gb3JJblN0YXRlbWVudCBub2RlKSB7CiAgICAvLyBHZW5lcmF0ZSBhIHN0cnVjdHVyZSBlcXVpdmFsZW50IHRvOgogICAgLy8gICBJdGVyYXRvcjxFPiAkaXRlciA9IDxpdGVyYWJsZT4uaXRlcmF0b3I7CiAgICAvLyAgIHdoaWxlICgkaXRlci5tb3ZlTmV4dCgpKSB7CiAgICAvLyAgICAgPHZhcmlhYmxlPiA9ICRpdGVyLmN1cnJlbnQ7CiAgICAvLyAgICAgPGJvZHk+CiAgICAvLyAgIH0KCiAgICAvLyBUaGUgaXRlcmF0b3IgaXMgc2hhcmVkIGJldHdlZW4gaW5pdGlhbGl6ZXIsIGNvbmRpdGlvbiBhbmQgYm9keS4KICAgIEhJbnN0cnVjdGlvbiBpdGVyYXRvcjsKICAgIFN0YXRpY1R5cGUgaXRlcmF0b3JUeXBlID0gX2dldFN0YXRpY0ZvckluSXRlcmF0b3JUeXBlKG5vZGUpOwoKICAgIHZvaWQgYnVpbGRJbml0aWFsaXplcigpIHsKICAgICAgQWJzdHJhY3RWYWx1ZSByZWNlaXZlclR5cGUgPSBfdHlwZUluZmVyZW5jZU1hcC50eXBlT2ZJdGVyYXRvcihub2RlKTsKICAgICAgbm9kZS5pdGVyYWJsZS5hY2NlcHQodGhpcyk7CiAgICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciA9IHBvcCgpOwogICAgICBfcHVzaER5bmFtaWNJbnZvY2F0aW9uKAogICAgICAgICAgbm9kZSwKICAgICAgICAgIF9nZXRTdGF0aWNUeXBlKG5vZGUuaXRlcmFibGUpLAogICAgICAgICAgcmVjZWl2ZXJUeXBlLAogICAgICAgICAgU2VsZWN0b3JzLml0ZXJhdG9yLAogICAgICAgICAgPEhJbnN0cnVjdGlvbj5bcmVjZWl2ZXJdLAogICAgICAgICAgY29uc3QgPERhcnRUeXBlPltdLAogICAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEZvckluSXRlcmF0b3Iobm9kZSkpOwogICAgICBpdGVyYXRvciA9IHBvcCgpOwogICAgfQoKICAgIEhJbnN0cnVjdGlvbiBidWlsZENvbmRpdGlvbigpIHsKICAgICAgQWJzdHJhY3RWYWx1ZSByZWNlaXZlclR5cGUgPQogICAgICAgICAgX3R5cGVJbmZlcmVuY2VNYXAudHlwZU9mSXRlcmF0b3JNb3ZlTmV4dChub2RlKTsKICAgICAgX3B1c2hEeW5hbWljSW52b2NhdGlvbigKICAgICAgICAgIG5vZGUsCiAgICAgICAgICBpdGVyYXRvclR5cGUsCiAgICAgICAgICByZWNlaXZlclR5cGUsCiAgICAgICAgICBTZWxlY3RvcnMubW92ZU5leHQsCiAgICAgICAgICA8SEluc3RydWN0aW9uPltpdGVyYXRvcl0sCiAgICAgICAgICBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkRm9ySW5Nb3ZlTmV4dChub2RlKSk7CiAgICAgIHJldHVybiBwb3BCb29saWZpZWQoKTsKICAgIH0KCiAgICB2b2lkIGJ1aWxkQm9keSgpIHsKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEZvckluQ3VycmVudChub2RlKTsKICAgICAgQWJzdHJhY3RWYWx1ZSByZWNlaXZlclR5cGUgPQogICAgICAgICAgX3R5cGVJbmZlcmVuY2VNYXAudHlwZU9mSXRlcmF0b3JDdXJyZW50KG5vZGUpOwogICAgICBfcHVzaER5bmFtaWNJbnZvY2F0aW9uKG5vZGUsIGl0ZXJhdG9yVHlwZSwgcmVjZWl2ZXJUeXBlLAogICAgICAgICAgU2VsZWN0b3JzLmN1cnJlbnQsIFtpdGVyYXRvcl0sIGNvbnN0IDxEYXJ0VHlwZT5bXSwgc291cmNlSW5mb3JtYXRpb24pOwoKICAgICAgTG9jYWwgbG9vcFZhcmlhYmxlTG9jYWwgPSBfbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUobm9kZS52YXJpYWJsZSk7CiAgICAgIEhJbnN0cnVjdGlvbiB2YWx1ZSA9IF90eXBlQnVpbGRlci5wb3RlbnRpYWxseUNoZWNrT3JUcnVzdFR5cGVPZkFzc2lnbm1lbnQoCiAgICAgICAgICBfY3VycmVudEZyYW1lLm1lbWJlciwgcG9wKCksIF9nZXREYXJ0VHlwZUlmVmFsaWQobm9kZS52YXJpYWJsZS50eXBlKSk7CiAgICAgIGxvY2Fsc0hhbmRsZXIudXBkYXRlTG9jYWwobG9vcFZhcmlhYmxlTG9jYWwsIHZhbHVlLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgLy8gSGludCB0byBuYW1lIGxvb3AgdmFsdWUgYWZ0ZXIgbmFtZSBvZiBsb29wIHZhcmlhYmxlLgogICAgICBpZiAobG9vcFZhcmlhYmxlTG9jYWwgaXMhIFN5bnRoZXRpY0xvY2FsKSB7CiAgICAgICAgdmFsdWUuc291cmNlRWxlbWVudCA/Pz0gbG9vcFZhcmlhYmxlTG9jYWw7CiAgICAgIH0KICAgICAgbm9kZS5ib2R5LmFjY2VwdCh0aGlzKTsKICAgIH0KCiAgICBfbG9vcEhhbmRsZXIuaGFuZGxlTG9vcCgKICAgICAgICBub2RlLAogICAgICAgIF9jbG9zdXJlRGF0YUxvb2t1cC5nZXRDYXB0dXJlZExvb3BTY29wZShub2RlKSwKICAgICAgICBfbG9jYWxzTWFwLmdldEp1bXBUYXJnZXRGb3JGb3JJbihub2RlKSwKICAgICAgICBidWlsZEluaXRpYWxpemVyLAogICAgICAgIGJ1aWxkQ29uZGl0aW9uLAogICAgICAgICgpIHt9LAogICAgICAgIGJ1aWxkQm9keSwKICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkTG9vcChub2RlKSk7CiAgfQoKICB2b2lkIF9idWlsZEFzeW5jRm9ySW4oaXIuRm9ySW5TdGF0ZW1lbnQgbm9kZSkgewogICAgLy8gVGhlIGFzeW5jLWZvciBpcyBpbXBsZW1lbnRlZCB3aXRoIGEgU3RyZWFtSXRlcmF0b3IuCiAgICBISW5zdHJ1Y3Rpb24gc3RyZWFtSXRlcmF0b3I7CgogICAgbm9kZS5pdGVyYWJsZS5hY2NlcHQodGhpcyk7CgogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGFyZ3VtZW50cyA9IFtwb3AoKV07CiAgICBDbGFzc0VudGl0eSBjbHMgPSBfY29tbW9uRWxlbWVudHMuc3RyZWFtSXRlcmF0b3I7CiAgICBEYXJ0VHlwZSB0eXBlQXJnID0gX2VsZW1lbnRNYXAuZ2V0RGFydFR5cGUobm9kZS52YXJpYWJsZS50eXBlKTsKICAgIEludGVyZmFjZVR5cGUgaW5zdGFuY2VUeXBlID0KICAgICAgICBsb2NhbHNIYW5kbGVyLnN1YnN0SW5Db250ZXh0KG5ldyBJbnRlcmZhY2VUeXBlKGNscywgW3R5cGVBcmddKSk7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBUaGlzIHNob3VsZCBiZSB0aGUgZXhhY3QgdHlwZS4KICAgIFN0YXRpY1R5cGUgc3RhdGljSW5zdGFuY2VUeXBlID0KICAgICAgICBuZXcgU3RhdGljVHlwZShpbnN0YW5jZVR5cGUsIENsYXNzUmVsYXRpb24uc3VidHlwZSk7CiAgICBfYWRkSW1wbGljaXRJbnN0YW50aWF0aW9uKGluc3RhbmNlVHlwZSk7CiAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9CiAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEZvckluSXRlcmF0b3Iobm9kZSk7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBQYXNzIHR5cGUgYXJndW1lbnRzIHRvIGNvbnN0cnVjdG9ycyBsaWtlIGNhbGxpbmcKICAgIC8vIGEgZ2VuZXJpYyBtZXRob2QuCiAgICBpZiAoX3J0aU5lZWQuY2xhc3NOZWVkc1R5cGVBcmd1bWVudHMoY2xzKSkgewogICAgICBfYWRkVHlwZUFyZ3VtZW50cyhhcmd1bWVudHMsIFt0eXBlQXJnXSwgc291cmNlSW5mb3JtYXRpb24pOwogICAgfQogICAgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IgPSBfY29tbW9uRWxlbWVudHMuc3RyZWFtSXRlcmF0b3JDb25zdHJ1Y3RvcjsKICAgIF9wdXNoU3RhdGljSW52b2NhdGlvbihjb25zdHJ1Y3RvciwgYXJndW1lbnRzLAogICAgICAgIF90eXBlSW5mZXJlbmNlTWFwLmdldFJldHVyblR5cGVPZihjb25zdHJ1Y3RvciksIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICBpbnN0YW5jZVR5cGU6IGluc3RhbmNlVHlwZSwgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKCiAgICBzdHJlYW1JdGVyYXRvciA9IHBvcCgpOwoKICAgIHZvaWQgYnVpbGRJbml0aWFsaXplcigpIHt9CgogICAgSEluc3RydWN0aW9uIGJ1aWxkQ29uZGl0aW9uKCkgewogICAgICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZSA9CiAgICAgICAgICBfdHlwZUluZmVyZW5jZU1hcC50eXBlT2ZJdGVyYXRvck1vdmVOZXh0KG5vZGUpOwogICAgICBfcHVzaER5bmFtaWNJbnZvY2F0aW9uKAogICAgICAgICAgbm9kZSwKICAgICAgICAgIHN0YXRpY0luc3RhbmNlVHlwZSwKICAgICAgICAgIHJlY2VpdmVyVHlwZSwKICAgICAgICAgIFNlbGVjdG9ycy5tb3ZlTmV4dCwKICAgICAgICAgIFtzdHJlYW1JdGVyYXRvcl0sCiAgICAgICAgICBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkRm9ySW5Nb3ZlTmV4dChub2RlKSk7CiAgICAgIEhJbnN0cnVjdGlvbiBmdXR1cmUgPSBwb3AoKTsKICAgICAgcHVzaChuZXcgSEF3YWl0KGZ1dHVyZSwgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpKTsKICAgICAgcmV0dXJuIHBvcEJvb2xpZmllZCgpOwogICAgfQoKICAgIHZvaWQgYnVpbGRCb2R5KCkgewogICAgICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZSA9CiAgICAgICAgICBfdHlwZUluZmVyZW5jZU1hcC50eXBlT2ZJdGVyYXRvckN1cnJlbnQobm9kZSk7CiAgICAgIF9wdXNoRHluYW1pY0ludm9jYXRpb24oCiAgICAgICAgICBub2RlLAogICAgICAgICAgc3RhdGljSW5zdGFuY2VUeXBlLAogICAgICAgICAgcmVjZWl2ZXJUeXBlLAogICAgICAgICAgU2VsZWN0b3JzLmN1cnJlbnQsCiAgICAgICAgICBbc3RyZWFtSXRlcmF0b3JdLAogICAgICAgICAgY29uc3QgPERhcnRUeXBlPltdLAogICAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEZvckluSXRlcmF0b3Iobm9kZSkpOwogICAgICBsb2NhbHNIYW5kbGVyLnVwZGF0ZUxvY2FsKAogICAgICAgICAgX2xvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKG5vZGUudmFyaWFibGUpLCBwb3AoKSk7CiAgICAgIG5vZGUuYm9keS5hY2NlcHQodGhpcyk7CiAgICB9CgogICAgdm9pZCBidWlsZFVwZGF0ZSgpIHt9CgogICAgLy8gQ3JlYXRlcyBhIHN5bnRoZXRpYyB0cnkvZmluYWxseSBibG9jayBpbiBjYXNlIGFueXRoaW5nIGFzeW5jIGdvZXMgYW1pc3MuCiAgICBUcnlDYXRjaEZpbmFsbHlCdWlsZGVyIHRyeUJ1aWxkZXIgPSBuZXcgVHJ5Q2F0Y2hGaW5hbGx5QnVpbGRlcigKICAgICAgICB0aGlzLCBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkTG9vcChub2RlKSk7CiAgICAvLyBCdWlsZCBmYWtlIHRyeSBib2R5OgogICAgX2xvb3BIYW5kbGVyLmhhbmRsZUxvb3AoCiAgICAgICAgbm9kZSwKICAgICAgICBfY2xvc3VyZURhdGFMb29rdXAuZ2V0Q2FwdHVyZWRMb29wU2NvcGUobm9kZSksCiAgICAgICAgX2xvY2Fsc01hcC5nZXRKdW1wVGFyZ2V0Rm9yRm9ySW4obm9kZSksCiAgICAgICAgYnVpbGRJbml0aWFsaXplciwKICAgICAgICBidWlsZENvbmRpdGlvbiwKICAgICAgICBidWlsZFVwZGF0ZSwKICAgICAgICBidWlsZEJvZHksCiAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZExvb3Aobm9kZSkpOwoKICAgIHZvaWQgZmluYWxpemVyRnVuY3Rpb24oKSB7CiAgICAgIF9wdXNoRHluYW1pY0ludm9jYXRpb24oCiAgICAgICAgICBub2RlLAogICAgICAgICAgc3RhdGljSW5zdGFuY2VUeXBlLAogICAgICAgICAgbnVsbCwKICAgICAgICAgIFNlbGVjdG9ycy5jYW5jZWwsCiAgICAgICAgICBbc3RyZWFtSXRlcmF0b3JdLAogICAgICAgICAgY29uc3QgPERhcnRUeXBlPltdLAogICAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlcgogICAgICAgICAgICAgIC8vIGlnbm9yZTpkZXByZWNhdGVkX21lbWJlcl91c2VfZnJvbV9zYW1lX3BhY2thZ2UKICAgICAgICAgICAgICAuYnVpbGRHZW5lcmljKG5vZGUpKTsKICAgICAgYWRkKG5ldyBIQXdhaXQocG9wKCksIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKSk7CiAgICB9CgogICAgdHJ5QnVpbGRlcgogICAgICAuLmNsb3NlVHJ5Qm9keSgpCiAgICAgIC4uYnVpbGRGaW5hbGx5QmxvY2soZmluYWxpemVyRnVuY3Rpb24pCiAgICAgIC4uY2xlYW5VcCgpOwogIH0KCiAgSEluc3RydWN0aW9uIF9jYWxsU2V0UnVudGltZVR5cGVJbmZvKEhJbnN0cnVjdGlvbiB0eXBlSW5mbywKICAgICAgSEluc3RydWN0aW9uIG5ld09iamVjdCwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIC8vIFNldCB0aGUgcnVudGltZSB0eXBlIGluZm9ybWF0aW9uIG9uIHRoZSBvYmplY3QuCiAgICBGdW5jdGlvbkVudGl0eSB0eXBlSW5mb1NldHRlckZuID0gX2NvbW1vbkVsZW1lbnRzLnNldFJ1bnRpbWVUeXBlSW5mbzsKICAgIC8vIFRPRE8oZWZvcnR1bmEpOiBJbnNlcnQgc291cmNlIGluZm9ybWF0aW9uIGluIHRoaXMgc3RhdGljIGludm9jYXRpb24uCiAgICBfcHVzaFN0YXRpY0ludm9jYXRpb24odHlwZUluZm9TZXR0ZXJGbiwgPEhJbnN0cnVjdGlvbj5bbmV3T2JqZWN0LCB0eXBlSW5mb10sCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUsIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwoKICAgIC8vIFRoZSBuZXcgb2JqZWN0IHdpbGwgbm93IGJlIHJlZmVyZW5jZWQgdGhyb3VnaCB0aGUKICAgIC8vIGBzZXRSdW50aW1lVHlwZUluZm9gIGNhbGwuIFdlIHRoZXJlZm9yZSBzZXQgdGhlIHR5cGUgb2YgdGhhdAogICAgLy8gaW5zdHJ1Y3Rpb24gdG8gYmUgb2YgdGhlIG9iamVjdCdzIHR5cGUuCiAgICBhc3NlcnQoCiAgICAgICAgc3RhY2subGFzdCBpcyBISW52b2tlU3RhdGljIHx8IHN0YWNrLmxhc3QgPT0gbmV3T2JqZWN0LAogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICAgICAiVW5leHBlY3RlZCBgc3RhY2subGFzdGA6IEZvdW5kICR7c3RhY2subGFzdH0sICIKICAgICAgICAgICAgImV4cGVjdGVkICR7bmV3T2JqZWN0fSBvciBhbiBISW52b2tlU3RhdGljLiAiCiAgICAgICAgICAgICJTdGF0ZTogdHlwZUluZm89JHR5cGVJbmZvLCBzdGFjaz0kc3RhY2suIikpOwogICAgc3RhY2subGFzdC5pbnN0cnVjdGlvblR5cGUgPSBuZXdPYmplY3QuaW5zdHJ1Y3Rpb25UeXBlOwogICAgcmV0dXJuIHBvcCgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFdoaWxlU3RhdGVtZW50KGlyLldoaWxlU3RhdGVtZW50IG5vZGUpIHsKICAgIGFzc2VydChfaXNSZWFjaGFibGUpOwogICAgSEluc3RydWN0aW9uIGJ1aWxkQ29uZGl0aW9uKCkgewogICAgICBub2RlLmNvbmRpdGlvbi5hY2NlcHQodGhpcyk7CiAgICAgIHJldHVybiBwb3BCb29saWZpZWQoKTsKICAgIH0KCiAgICBfbG9vcEhhbmRsZXIuaGFuZGxlTG9vcCgKICAgICAgICBub2RlLAogICAgICAgIF9jbG9zdXJlRGF0YUxvb2t1cC5nZXRDYXB0dXJlZExvb3BTY29wZShub2RlKSwKICAgICAgICBfbG9jYWxzTWFwLmdldEp1bXBUYXJnZXRGb3JXaGlsZShub2RlKSwKICAgICAgICAoKSB7fSwKICAgICAgICBidWlsZENvbmRpdGlvbiwKICAgICAgICAoKSB7fSwgKCkgewogICAgICBub2RlLmJvZHkuYWNjZXB0KHRoaXMpOwogICAgfSwgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZExvb3Aobm9kZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERvU3RhdGVtZW50KGlyLkRvU3RhdGVtZW50IG5vZGUpIHsKICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0KICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkTG9vcChub2RlKTsKICAgIC8vIFRPRE8oZWZvcnR1bmEpOiBJIHRoaW5rIHRoaXMgY2FuIGJlIHJld3JpdHRlbiB1c2luZwogICAgLy8gTG9vcEhhbmRsZXIuaGFuZGxlTG9vcCB3aXRoIHNvbWUgdHJpY2tzIGFib3V0IHdoZW4gdGhlICJ1cGRhdGUiIGhhcHBlbnMuCiAgICBMb2NhbHNIYW5kbGVyIHNhdmVkTG9jYWxzID0gbmV3IExvY2Fsc0hhbmRsZXIuZnJvbShsb2NhbHNIYW5kbGVyKTsKICAgIENhcHR1cmVkTG9vcFNjb3BlIGxvb3BDbG9zdXJlSW5mbyA9CiAgICAgICAgX2Nsb3N1cmVEYXRhTG9va3VwLmdldENhcHR1cmVkTG9vcFNjb3BlKG5vZGUpOwogICAgbG9jYWxzSGFuZGxlci5zdGFydExvb3AobG9vcENsb3N1cmVJbmZvLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBKdW1wVGFyZ2V0IHRhcmdldCA9IF9sb2NhbHNNYXAuZ2V0SnVtcFRhcmdldEZvckRvKG5vZGUpOwogICAgSnVtcEhhbmRsZXIganVtcEhhbmRsZXIgPSBfbG9vcEhhbmRsZXIuYmVnaW5Mb29wSGVhZGVyKG5vZGUsIHRhcmdldCk7CiAgICBITG9vcEluZm9ybWF0aW9uIGxvb3BJbmZvID0gY3VycmVudC5sb29wSW5mb3JtYXRpb247CiAgICBIQmFzaWNCbG9jayBsb29wRW50cnlCbG9jayA9IGN1cnJlbnQ7CiAgICBIQmFzaWNCbG9jayBib2R5RW50cnlCbG9jayA9IGN1cnJlbnQ7CiAgICBib29sIGhhc0NvbnRpbnVlcyA9IHRhcmdldCAhPSBudWxsICYmIHRhcmdldC5pc0NvbnRpbnVlVGFyZ2V0OwogICAgaWYgKGhhc0NvbnRpbnVlcykgewogICAgICAvLyBBZGQgZXh0cmEgYmxvY2sgdG8gaGFuZyBsYWJlbHMgb24uCiAgICAgIC8vIEl0IGRvZXNuJ3QgY3VycmVudGx5IHdvcmsgaWYgdGhleSBhcmUgb24gdGhlIHNhbWUgYmxvY2sgYXMgdGhlCiAgICAgIC8vIEhMb29wSW5mby4gVGhlIGhhbmRsaW5nIG9mIEhMYWJlbGVkQmxvY2tJbmZvcm1hdGlvbiB3aWxsIHZpc2l0IGEKICAgICAgLy8gU3ViR3JhcGggdGhhdCBzdGFydHMgYXQgdGhlIHNhbWUgYmxvY2sgYWdhaW4sIHNvIHRoZSBITG9vcEluZm8gaXMKICAgICAgLy8gZWl0aGVyIGhhbmRsZWQgdHdpY2UsIG9yIGl0J3MgaGFuZGxlZCBhZnRlciB0aGUgbGFiZWxlZCBibG9jayBpbmZvLAogICAgICAvLyBib3RoIG9mIHdoaWNoIGdlbmVyYXRlIHRoZSB3cm9uZyBjb2RlLgogICAgICAvLyBVc2luZyBhIHNlcGFyYXRlIGJsb2NrIGlzIGp1c3QgYSBzaW1wbGUgd29ya2Fyb3VuZC4KICAgICAgYm9keUVudHJ5QmxvY2sgPSBvcGVuTmV3QmxvY2soKTsKICAgIH0KICAgIGxvY2Fsc0hhbmRsZXIuZW50ZXJMb29wQm9keShsb29wQ2xvc3VyZUluZm8sIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIG5vZGUuYm9keS5hY2NlcHQodGhpcyk7CgogICAgLy8gSWYgdGhlcmUgYXJlIG5vIGNvbnRpbnVlcyB3ZSBjb3VsZCBhdm9pZCB0aGUgY3JlYXRpb24gb2YgdGhlIGNvbmRpdGlvbgogICAgLy8gYmxvY2suIFRoaXMgY291bGQgYWxzbyBsZWFkIHRvIGEgYmxvY2sgaGF2aW5nIG11bHRpcGxlIGVudHJpZXMgYW5kIGV4aXRzLgogICAgSEJhc2ljQmxvY2sgYm9keUV4aXRCbG9jazsKICAgIGJvb2wgaXNBYm9ydGluZ0JvZHkgPSBmYWxzZTsKICAgIGlmIChjdXJyZW50ICE9IG51bGwpIHsKICAgICAgYm9keUV4aXRCbG9jayA9IGNsb3NlKG5ldyBIR290byhfYWJzdHJhY3RWYWx1ZURvbWFpbikpOwogICAgfSBlbHNlIHsKICAgICAgaXNBYm9ydGluZ0JvZHkgPSB0cnVlOwogICAgICBib2R5RXhpdEJsb2NrID0gbGFzdE9wZW5lZEJsb2NrOwogICAgfQoKICAgIFN1YkV4cHJlc3Npb24gY29uZGl0aW9uRXhwcmVzc2lvbjsKICAgIGJvb2wgbG9vcElzRGVnZW5lcmF0ZSA9IGlzQWJvcnRpbmdCb2R5ICYmICFoYXNDb250aW51ZXM7CiAgICBpZiAoIWxvb3BJc0RlZ2VuZXJhdGUpIHsKICAgICAgSEJhc2ljQmxvY2sgY29uZGl0aW9uQmxvY2sgPSBhZGROZXdCbG9jaygpOwoKICAgICAgTGlzdDxMb2NhbHNIYW5kbGVyPiBjb250aW51ZUhhbmRsZXJzID0gPExvY2Fsc0hhbmRsZXI+W107CiAgICAgIGp1bXBIYW5kbGVyCiAgICAgICAgICAuZm9yRWFjaENvbnRpbnVlKChIQ29udGludWUgaW5zdHJ1Y3Rpb24sIExvY2Fsc0hhbmRsZXIgbG9jYWxzKSB7CiAgICAgICAgaW5zdHJ1Y3Rpb24uYmxvY2suYWRkU3VjY2Vzc29yKGNvbmRpdGlvbkJsb2NrKTsKICAgICAgICBjb250aW51ZUhhbmRsZXJzLmFkZChsb2NhbHMpOwogICAgICB9KTsKCiAgICAgIGlmICghaXNBYm9ydGluZ0JvZHkpIHsKICAgICAgICBib2R5RXhpdEJsb2NrLmFkZFN1Y2Nlc3Nvcihjb25kaXRpb25CbG9jayk7CiAgICAgIH0KCiAgICAgIGlmICghY29udGludWVIYW5kbGVycy5pc0VtcHR5KSB7CiAgICAgICAgaWYgKCFpc0Fib3J0aW5nQm9keSkgY29udGludWVIYW5kbGVycy5hZGQobG9jYWxzSGFuZGxlcik7CiAgICAgICAgbG9jYWxzSGFuZGxlciA9CiAgICAgICAgICAgIHNhdmVkTG9jYWxzLm1lcmdlTXVsdGlwbGUoY29udGludWVIYW5kbGVycywgY29uZGl0aW9uQmxvY2spOwogICAgICAgIFN1YkdyYXBoIGJvZHlHcmFwaCA9IG5ldyBTdWJHcmFwaChib2R5RW50cnlCbG9jaywgYm9keUV4aXRCbG9jayk7CiAgICAgICAgTGlzdDxMYWJlbERlZmluaXRpb24+IGxhYmVscyA9IGp1bXBIYW5kbGVyLmxhYmVsczsKICAgICAgICBIU3ViR3JhcGhCbG9ja0luZm9ybWF0aW9uIGJvZHlJbmZvID0KICAgICAgICAgICAgbmV3IEhTdWJHcmFwaEJsb2NrSW5mb3JtYXRpb24oYm9keUdyYXBoKTsKICAgICAgICBITGFiZWxlZEJsb2NrSW5mb3JtYXRpb24gaW5mbzsKICAgICAgICBpZiAoIWxhYmVscy5pc0VtcHR5KSB7CiAgICAgICAgICBpbmZvID0KICAgICAgICAgICAgICBuZXcgSExhYmVsZWRCbG9ja0luZm9ybWF0aW9uKGJvZHlJbmZvLCBsYWJlbHMsIGlzQ29udGludWU6IHRydWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbmZvID0gbmV3IEhMYWJlbGVkQmxvY2tJbmZvcm1hdGlvbi5pbXBsaWNpdChib2R5SW5mbywgdGFyZ2V0LAogICAgICAgICAgICAgIGlzQ29udGludWU6IHRydWUpOwogICAgICAgIH0KICAgICAgICBib2R5RW50cnlCbG9jay5zZXRCbG9ja0Zsb3coaW5mbywgY29uZGl0aW9uQmxvY2spOwogICAgICB9CiAgICAgIG9wZW4oY29uZGl0aW9uQmxvY2spOwoKICAgICAgbm9kZS5jb25kaXRpb24uYWNjZXB0KHRoaXMpOwogICAgICBhc3NlcnQoIWlzQWJvcnRlZCgpKTsKICAgICAgSEluc3RydWN0aW9uIGNvbmRpdGlvbkluc3RydWN0aW9uID0gcG9wQm9vbGlmaWVkKCk7CiAgICAgIEhCYXNpY0Jsb2NrIGNvbmRpdGlvbkVuZEJsb2NrID0gY2xvc2UobmV3IEhMb29wQnJhbmNoKAogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4sCiAgICAgICAgICBjb25kaXRpb25JbnN0cnVjdGlvbiwKICAgICAgICAgIEhMb29wQnJhbmNoLkRPX1dISUxFX0xPT1ApKTsKCiAgICAgIEhCYXNpY0Jsb2NrIGF2b2lkQ3JpdGljYWxFZGdlID0gYWRkTmV3QmxvY2soKTsKICAgICAgY29uZGl0aW9uRW5kQmxvY2suYWRkU3VjY2Vzc29yKGF2b2lkQ3JpdGljYWxFZGdlKTsKICAgICAgb3Blbihhdm9pZENyaXRpY2FsRWRnZSk7CiAgICAgIGNsb3NlKG5ldyBIR290byhfYWJzdHJhY3RWYWx1ZURvbWFpbikpOwogICAgICBhdm9pZENyaXRpY2FsRWRnZS5hZGRTdWNjZXNzb3IobG9vcEVudHJ5QmxvY2spOyAvLyBUaGUgYmFjay1lZGdlLgoKICAgICAgY29uZGl0aW9uRXhwcmVzc2lvbiA9CiAgICAgICAgICBuZXcgU3ViRXhwcmVzc2lvbihjb25kaXRpb25CbG9jaywgY29uZGl0aW9uRW5kQmxvY2spOwoKICAgICAgLy8gQXZvaWQgYSBjcml0aWNhbCBlZGdlIGZyb20gdGhlIGNvbmRpdGlvbiB0byB0aGUgbG9vcC1leGl0IGJvZHkuCiAgICAgIEhCYXNpY0Jsb2NrIGNvbmRpdGlvbkV4aXRCbG9jayA9IGFkZE5ld0Jsb2NrKCk7CiAgICAgIG9wZW4oY29uZGl0aW9uRXhpdEJsb2NrKTsKICAgICAgY2xvc2UobmV3IEhHb3RvKF9hYnN0cmFjdFZhbHVlRG9tYWluKSk7CiAgICAgIGNvbmRpdGlvbkVuZEJsb2NrLmFkZFN1Y2Nlc3Nvcihjb25kaXRpb25FeGl0QmxvY2spOwoKICAgICAgX2xvb3BIYW5kbGVyLmVuZExvb3AoCiAgICAgICAgICBsb29wRW50cnlCbG9jaywgY29uZGl0aW9uRXhpdEJsb2NrLCBqdW1wSGFuZGxlciwgbG9jYWxzSGFuZGxlcik7CgogICAgICBsb29wRW50cnlCbG9jay5wb3N0UHJvY2Vzc0xvb3BIZWFkZXIoKTsKICAgICAgU3ViR3JhcGggYm9keUdyYXBoID0gbmV3IFN1YkdyYXBoKGxvb3BFbnRyeUJsb2NrLCBib2R5RXhpdEJsb2NrKTsKICAgICAgSExvb3BCbG9ja0luZm9ybWF0aW9uIGxvb3BCbG9ja0luZm8gPSBuZXcgSExvb3BCbG9ja0luZm9ybWF0aW9uKAogICAgICAgICAgSExvb3BCbG9ja0luZm9ybWF0aW9uLkRPX1dISUxFX0xPT1AsCiAgICAgICAgICBudWxsLAogICAgICAgICAgd3JhcEV4cHJlc3Npb25HcmFwaChjb25kaXRpb25FeHByZXNzaW9uKSwKICAgICAgICAgIHdyYXBTdGF0ZW1lbnRHcmFwaChib2R5R3JhcGgpLAogICAgICAgICAgbnVsbCwKICAgICAgICAgIGxvb3BFbnRyeUJsb2NrLmxvb3BJbmZvcm1hdGlvbi50YXJnZXQsCiAgICAgICAgICBsb29wRW50cnlCbG9jay5sb29wSW5mb3JtYXRpb24ubGFiZWxzLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb24pOwogICAgICBsb29wRW50cnlCbG9jay5zZXRCbG9ja0Zsb3cobG9vcEJsb2NrSW5mbywgY3VycmVudCk7CiAgICAgIGxvb3BJbmZvLmxvb3BCbG9ja0luZm9ybWF0aW9uID0gbG9vcEJsb2NrSW5mbzsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFNpbmNlIHRoZSBsb29wIGhhcyBubyBiYWNrIGVkZ2UsIHdlIHJlbW92ZSB0aGUgbG9vcCBpbmZvcm1hdGlvbiBvbiB0aGUKICAgICAgLy8gaGVhZGVyLgogICAgICBsb29wRW50cnlCbG9jay5sb29wSW5mb3JtYXRpb24gPSBudWxsOwoKICAgICAgaWYgKGp1bXBIYW5kbGVyLmhhc0FueUJyZWFrKCkpIHsKICAgICAgICAvLyBOdWxsIGJyYW5jaEJsb2NrIGJlY2F1c2UgdGhlIGJvZHkgb2YgdGhlIGRvLXdoaWxlIGxvb3AgYWx3YXlzIGFib3J0cywKICAgICAgICAvLyBzbyB3ZSBuZXZlciBnZXQgdG8gdGhlIGNvbmRpdGlvbi4KICAgICAgICBfbG9vcEhhbmRsZXIuZW5kTG9vcChsb29wRW50cnlCbG9jaywgbnVsbCwganVtcEhhbmRsZXIsIGxvY2Fsc0hhbmRsZXIpOwoKICAgICAgICAvLyBTaW5jZSB0aGUgYm9keSBvZiB0aGUgbG9vcCBoYXMgYSBicmVhaywgd2UgYXR0YWNoIGEgc3ludGhlc2l6ZWQgbGFiZWwKICAgICAgICAvLyB0byB0aGUgYm9keS4KICAgICAgICBTdWJHcmFwaCBib2R5R3JhcGggPSBuZXcgU3ViR3JhcGgoYm9keUVudHJ5QmxvY2ssIGJvZHlFeGl0QmxvY2spOwogICAgICAgIEp1bXBUYXJnZXQgdGFyZ2V0ID0gX2xvY2Fsc01hcC5nZXRKdW1wVGFyZ2V0Rm9yRG8obm9kZSk7CiAgICAgICAgTGFiZWxEZWZpbml0aW9uIGxhYmVsID0gdGFyZ2V0LmFkZExhYmVsKCdsb29wJywgaXNCcmVha1RhcmdldDogdHJ1ZSk7CiAgICAgICAgSExhYmVsZWRCbG9ja0luZm9ybWF0aW9uIGluZm8gPSBuZXcgSExhYmVsZWRCbG9ja0luZm9ybWF0aW9uKAogICAgICAgICAgICBuZXcgSFN1YkdyYXBoQmxvY2tJbmZvcm1hdGlvbihib2R5R3JhcGgpLCA8TGFiZWxEZWZpbml0aW9uPltsYWJlbF0pOwogICAgICAgIGxvb3BFbnRyeUJsb2NrLnNldEJsb2NrRmxvdyhpbmZvLCBjdXJyZW50KTsKICAgICAgICBqdW1wSGFuZGxlci5mb3JFYWNoQnJlYWsoKEhCcmVhayBicmVha0luc3RydWN0aW9uLCBfKSB7CiAgICAgICAgICBIQmFzaWNCbG9jayBibG9jayA9IGJyZWFrSW5zdHJ1Y3Rpb24uYmxvY2s7CiAgICAgICAgICBibG9jay5hZGRBdEV4aXQobmV3IEhCcmVhay50b0xhYmVsKAogICAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLCBsYWJlbCwgc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgICAgIGJsb2NrLnJlbW92ZShicmVha0luc3RydWN0aW9uKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAganVtcEhhbmRsZXIuY2xvc2UoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJZlN0YXRlbWVudChpci5JZlN0YXRlbWVudCBub2RlKSB7CiAgICBfaGFuZGxlSWYoCiAgICAgICAgdmlzaXRDb25kaXRpb246ICgpID0+IG5vZGUuY29uZGl0aW9uLmFjY2VwdCh0aGlzKSwKICAgICAgICB2aXNpdFRoZW46ICgpID0+IG5vZGUudGhlbi5hY2NlcHQodGhpcyksCiAgICAgICAgdmlzaXRFbHNlOiAoKSA9PiBub2RlLm90aGVyd2lzZT8uYWNjZXB0KHRoaXMpLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkSWYobm9kZSkpOwogIH0KCiAgdm9pZCBfaGFuZGxlSWYoCiAgICAgIHtpci5Ob2RlIG5vZGUsCiAgICAgIHZvaWQgdmlzaXRDb25kaXRpb24oKSwKICAgICAgdm9pZCB2aXNpdFRoZW4oKSwKICAgICAgdm9pZCB2aXNpdEVsc2UoKSwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb259KSB7CiAgICBTc2FCcmFuY2hCdWlsZGVyIGJyYW5jaEJ1aWxkZXIgPSBuZXcgU3NhQnJhbmNoQnVpbGRlcih0aGlzLAogICAgICAgIG5vZGUgPT0gbnVsbCA/IG51bGwgOiBfZWxlbWVudE1hcC5nZXRTcGFubmFibGUodGFyZ2V0RWxlbWVudCwgbm9kZSkpOwogICAgYnJhbmNoQnVpbGRlci5oYW5kbGVJZih2aXNpdENvbmRpdGlvbiwgdmlzaXRUaGVuLCB2aXNpdEVsc2UsCiAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBc0V4cHJlc3Npb24oaXIuQXNFeHByZXNzaW9uIG5vZGUpIHsKICAgIGlyLkV4cHJlc3Npb24gb3BlcmFuZCA9IG5vZGUub3BlcmFuZDsKICAgIG9wZXJhbmQuYWNjZXB0KHRoaXMpOwoKICAgIFN0YXRpY1R5cGUgb3BlcmFuZFR5cGUgPSBfZ2V0U3RhdGljVHlwZShvcGVyYW5kKTsKICAgIERhcnRUeXBlIHR5cGUgPSBfZWxlbWVudE1hcC5nZXREYXJ0VHlwZShub2RlLnR5cGUpOwogICAgaWYgKF9lbGVtZW50TWFwLnR5cGVzLmlzU3VidHlwZShvcGVyYW5kVHlwZS50eXBlLCB0eXBlKSkgewogICAgICAvLyBTa2lwIHVubmVlZGVkIGNhc3RzLgogICAgICBpZiAob3BlcmFuZCBpcyEgaXIuUHJvcGVydHlHZXQpIHsKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdXBwb3J0IHByb3BlcnR5IGdldC4gQ3VycmVudGx5IENGRSBpbnNlcnRzCiAgICAgICAgLy8gYSBzZWVtaW5nbHkgdW5uZWNlc3NhcnkgY2FzdCBvbiB0ZWFyb2ZmcyB0aGF0IGNvbnRhaW4gdHlwZSB2YXJpYWJsZXMKICAgICAgICAvLyBpbiBjb250cmF2YXJpYW50IHBvc2l0aW9ucy4gU2luY2UgdGhlc2UgY2FzdHMgYXJlIG5vdCBtYXJrZWQgd2UKICAgICAgICAvLyBjYW5ub3QgZWFzaWx5IGRldGVjdCB3aGVuIHdlIGFjdHVhbGx5IG5lZWQgdGhlIGNhc3QuIFNlZSB0ZXN0CiAgICAgICAgLy8gYGxhbmd1YWdlXzIvaW5zdGFudGlhdGVfdGVhcm9mZl9hZnRlcl9jb250cmF2YXJpYW5jZV9jaGVja190ZXN0YC4KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KCiAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9CiAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEFzKG5vZGUpOwogICAgSEluc3RydWN0aW9uIGV4cHJlc3Npb25JbnN0cnVjdGlvbiA9IHBvcCgpOwoKICAgIGlmIChub2RlLnR5cGUgaXMgaXIuSW52YWxpZFR5cGUpIHsKICAgICAgX2dlbmVyYXRlVHlwZUVycm9yKCdpbnZhbGlkIHR5cGUnLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBDaGVja1BvbGljeSBwb2xpY3k7CiAgICBpZiAobm9kZS5pc1R5cGVFcnJvcikgewogICAgICBwb2xpY3kgPSBjbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGEKICAgICAgICAgIC5nZXRJbXBsaWNpdERvd25jYXN0Q2hlY2tQb2xpY3koX2N1cnJlbnRGcmFtZS5tZW1iZXIpOwogICAgfSBlbHNlIHsKICAgICAgcG9saWN5ID0gY2xvc2VkV29ybGQuYW5ub3RhdGlvbnNEYXRhCiAgICAgICAgICAuZ2V0RXhwbGljaXRDYXN0Q2hlY2tQb2xpY3koX2N1cnJlbnRGcmFtZS5tZW1iZXIpOwogICAgfQoKICAgIGlmIChwb2xpY3kuaXNFbWl0dGVkKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQgPSBfdHlwZUJ1aWxkZXIuYnVpbGRUeXBlQ29udmVyc2lvbigKICAgICAgICAgIGV4cHJlc3Npb25JbnN0cnVjdGlvbiwKICAgICAgICAgIGxvY2Fsc0hhbmRsZXIuc3Vic3RJbkNvbnRleHQodHlwZSksCiAgICAgICAgICBub2RlLmlzVHlwZUVycm9yCiAgICAgICAgICAgICAgPyBIVHlwZUNvbnZlcnNpb24uVFlQRV9DSEVDSwogICAgICAgICAgICAgIDogSFR5cGVDb252ZXJzaW9uLkNBU1RfQ0hFQ0ssCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwogICAgICBpZiAoY29udmVydGVkICE9IGV4cHJlc3Npb25JbnN0cnVjdGlvbikgewogICAgICAgIGFkZChjb252ZXJ0ZWQpOwogICAgICB9CiAgICAgIHN0YWNrLmFkZChjb252ZXJ0ZWQpOwogICAgfSBlbHNlIHsKICAgICAgc3RhY2suYWRkKGV4cHJlc3Npb25JbnN0cnVjdGlvbik7CiAgICB9CiAgfQoKICB2b2lkIF9nZW5lcmF0ZUVycm9yKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uLCBTdHJpbmcgbWVzc2FnZSwKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlTWFzaywgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIEhJbnN0cnVjdGlvbiBlcnJvck1lc3NhZ2UgPSBncmFwaC5hZGRDb25zdGFudFN0cmluZyhtZXNzYWdlLCBjbG9zZWRXb3JsZCk7CiAgICBfcHVzaFN0YXRpY0ludm9jYXRpb24oCiAgICAgICAgZnVuY3Rpb24sIFtlcnJvck1lc3NhZ2VdLCB0eXBlTWFzaywgY29uc3QgPERhcnRUeXBlPltdLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICB2b2lkIF9nZW5lcmF0ZVR5cGVFcnJvcihTdHJpbmcgbWVzc2FnZSwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIF9nZW5lcmF0ZUVycm9yKAogICAgICAgIF9jb21tb25FbGVtZW50cy50aHJvd1R5cGVFcnJvciwKICAgICAgICBtZXNzYWdlLAogICAgICAgIF90eXBlSW5mZXJlbmNlTWFwLmdldFJldHVyblR5cGVPZihfY29tbW9uRWxlbWVudHMudGhyb3dUeXBlRXJyb3IpLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIHZvaWQgX2dlbmVyYXRlVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgU3RyaW5nIG1lc3NhZ2UsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBfZ2VuZXJhdGVFcnJvcigKICAgICAgICBfY29tbW9uRWxlbWVudHMudGhyb3dVbnN1cHBvcnRlZEVycm9yLAogICAgICAgIG1lc3NhZ2UsCiAgICAgICAgX3R5cGVJbmZlcmVuY2VNYXAKICAgICAgICAgICAgLmdldFJldHVyblR5cGVPZihfY29tbW9uRWxlbWVudHMudGhyb3dVbnN1cHBvcnRlZEVycm9yKSwKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QXNzZXJ0U3RhdGVtZW50KGlyLkFzc2VydFN0YXRlbWVudCBub2RlKSB7CiAgICBpZiAoIW9wdGlvbnMuZW5hYmxlVXNlckFzc2VydGlvbnMpIHJldHVybjsKICAgIHZhciBzb3VyY2VJbmZvcm1hdGlvbiA9IF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRBc3NlcnQobm9kZSk7CiAgICBpZiAobm9kZS5tZXNzYWdlID09IG51bGwpIHsKICAgICAgbm9kZS5jb25kaXRpb24uYWNjZXB0KHRoaXMpOwogICAgICBfcHVzaFN0YXRpY0ludm9jYXRpb24oCiAgICAgICAgICBfY29tbW9uRWxlbWVudHMuYXNzZXJ0SGVscGVyLAogICAgICAgICAgPEhJbnN0cnVjdGlvbj5bcG9wKCldLAogICAgICAgICAgX3R5cGVJbmZlcmVuY2VNYXAuZ2V0UmV0dXJuVHlwZU9mKF9jb21tb25FbGVtZW50cy5hc3NlcnRIZWxwZXIpLAogICAgICAgICAgY29uc3QgPERhcnRUeXBlPltdLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgcG9wKCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyBpZiAoYXNzZXJ0VGVzdChjb25kaXRpb24pKSBhc3NlcnRUaHJvdyhtZXNzYWdlKTsKICAgIHZvaWQgYnVpbGRDb25kaXRpb24oKSB7CiAgICAgIG5vZGUuY29uZGl0aW9uLmFjY2VwdCh0aGlzKTsKICAgICAgX3B1c2hTdGF0aWNJbnZvY2F0aW9uKAogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmFzc2VydFRlc3QsCiAgICAgICAgICA8SEluc3RydWN0aW9uPltwb3AoKV0sCiAgICAgICAgICBfdHlwZUluZmVyZW5jZU1hcC5nZXRSZXR1cm5UeXBlT2YoX2NvbW1vbkVsZW1lbnRzLmFzc2VydFRlc3QpLAogICAgICAgICAgY29uc3QgPERhcnRUeXBlPltdLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0KCiAgICB2b2lkIGZhaWwoKSB7CiAgICAgIG5vZGUubWVzc2FnZS5hY2NlcHQodGhpcyk7CiAgICAgIF9wdXNoU3RhdGljSW52b2NhdGlvbigKICAgICAgICAgIF9jb21tb25FbGVtZW50cy5hc3NlcnRUaHJvdywKICAgICAgICAgIDxISW5zdHJ1Y3Rpb24+W3BvcCgpXSwKICAgICAgICAgIF90eXBlSW5mZXJlbmNlTWFwLmdldFJldHVyblR5cGVPZihfY29tbW9uRWxlbWVudHMuYXNzZXJ0VGhyb3cpLAogICAgICAgICAgY29uc3QgPERhcnRUeXBlPltdLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgcG9wKCk7CiAgICB9CgogICAgX2hhbmRsZUlmKHZpc2l0Q29uZGl0aW9uOiBidWlsZENvbmRpdGlvbiwgdmlzaXRUaGVuOiBmYWlsKTsKICB9CgogIC8vLyBDcmVhdGVzIGEgW0p1bXBIYW5kbGVyXSBmb3IgYSBzdGF0ZW1lbnQuIFRoZSBub2RlIG11c3QgYmUgYSBqdW1wCiAgLy8vIHRhcmdldC4gSWYgdGhlcmUgYXJlIG5vIGJyZWFrcyBvciBjb250aW51ZXMgdGFyZ2V0aW5nIHRoZSBzdGF0ZW1lbnQsCiAgLy8vIGEgc3BlY2lhbCAibnVsbCBoYW5kbGVyIiBpcyByZXR1cm5lZC4KICAvLy8KICAvLy8gW2lzTG9vcEp1bXBdIGlzIHRydWUgd2hlbiB0aGUganVtcCBoYW5kbGVyIGlzIGZvciBhIGxvb3AuIFRoaXMgaXMgdXNlZAogIC8vLyB0byBkaXN0aW5ndWlzaCB0aGUgc3ludGhlc2l6ZWQgbG9vcCBjcmVhdGVkIGZvciBhIHN3aXRjaCBzdGF0ZW1lbnQgd2l0aAogIC8vLyBjb250aW51ZSBzdGF0ZW1lbnRzIGZyb20gc2ltcGxlIHN3aXRjaCBzdGF0ZW1lbnRzLgogIEp1bXBIYW5kbGVyIGNyZWF0ZUp1bXBIYW5kbGVyKGlyLlRyZWVOb2RlIG5vZGUsIEp1bXBUYXJnZXQgdGFyZ2V0LAogICAgICB7Ym9vbCBpc0xvb3BKdW1wOiBmYWxzZX0pIHsKICAgIGlmICh0YXJnZXQgPT0gbnVsbCkgewogICAgICAvLyBObyBicmVha3Mgb3IgY29udGludWVzIHRvIHRoaXMgbm9kZS4KICAgICAgcmV0dXJuIG5ldyBOdWxsSnVtcEhhbmRsZXIocmVwb3J0ZXIpOwogICAgfQogICAgaWYgKGlzTG9vcEp1bXAgJiYgbm9kZSBpcyBpci5Td2l0Y2hTdGF0ZW1lbnQpIHsKICAgICAgcmV0dXJuIG5ldyBLZXJuZWxTd2l0Y2hDYXNlSnVtcEhhbmRsZXIodGhpcywgdGFyZ2V0LCBub2RlLCBfbG9jYWxzTWFwKTsKICAgIH0KCiAgICByZXR1cm4gbmV3IEp1bXBIYW5kbGVyKHRoaXMsIHRhcmdldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QnJlYWtTdGF0ZW1lbnQoaXIuQnJlYWtTdGF0ZW1lbnQgbm9kZSkgewogICAgYXNzZXJ0KCFpc0Fib3J0ZWQoKSk7CiAgICBfaGFuZGxlSW5UcnlTdGF0ZW1lbnQoKTsKICAgIEp1bXBUYXJnZXQgdGFyZ2V0ID0gX2xvY2Fsc01hcC5nZXRKdW1wVGFyZ2V0Rm9yQnJlYWsobm9kZSk7CiAgICBhc3NlcnQodGFyZ2V0ICE9IG51bGwpOwogICAgSnVtcEhhbmRsZXIgaGFuZGxlciA9IGp1bXBUYXJnZXRzW3RhcmdldF07CiAgICBhc3NlcnQoaGFuZGxlciAhPSBudWxsKTsKICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0KICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkR290byhub2RlKTsKICAgIGlmIChfbG9jYWxzTWFwLmdlbmVyYXRlQ29udGludWVGb3JCcmVhayhub2RlKSkgewogICAgICBpZiAoaGFuZGxlci5sYWJlbHMuaXNOb3RFbXB0eSkgewogICAgICAgIGhhbmRsZXIuZ2VuZXJhdGVDb250aW51ZShzb3VyY2VJbmZvcm1hdGlvbiwgaGFuZGxlci5sYWJlbHMuZmlyc3QpOwogICAgICB9IGVsc2UgewogICAgICAgIGhhbmRsZXIuZ2VuZXJhdGVDb250aW51ZShzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmIChoYW5kbGVyLmxhYmVscy5pc05vdEVtcHR5KSB7CiAgICAgICAgaGFuZGxlci5nZW5lcmF0ZUJyZWFrKHNvdXJjZUluZm9ybWF0aW9uLCBoYW5kbGVyLmxhYmVscy5maXJzdCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaGFuZGxlci5nZW5lcmF0ZUJyZWFrKHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExhYmVsZWRTdGF0ZW1lbnQoaXIuTGFiZWxlZFN0YXRlbWVudCBub2RlKSB7CiAgICBpci5TdGF0ZW1lbnQgYm9keSA9IG5vZGUuYm9keTsKICAgIGlmIChKdW1wVmlzaXRvci5jYW5CZUJyZWFrVGFyZ2V0KGJvZHkpKSB7CiAgICAgIC8vIGxvb3BzIGFuZCBzd2l0Y2hlcyBoYW5kbGUgYnJlYWtzIG9uIHRoZWlyIG93bgogICAgICBib2R5LmFjY2VwdCh0aGlzKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgSnVtcFRhcmdldCBqdW1wVGFyZ2V0ID0gX2xvY2Fsc01hcC5nZXRKdW1wVGFyZ2V0Rm9yTGFiZWwobm9kZSk7CiAgICBpZiAoanVtcFRhcmdldCA9PSBudWxsKSB7CiAgICAgIC8vIFRoZSBsYWJlbCBpcyBub3QgbmVlZGVkLgogICAgICBib2R5LmFjY2VwdCh0aGlzKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIEp1bXBIYW5kbGVyIGhhbmRsZXIgPSBjcmVhdGVKdW1wSGFuZGxlcihub2RlLCBqdW1wVGFyZ2V0KTsKCiAgICBMb2NhbHNIYW5kbGVyIGJlZm9yZUxvY2FscyA9IG5ldyBMb2NhbHNIYW5kbGVyLmZyb20obG9jYWxzSGFuZGxlcik7CgogICAgSEJhc2ljQmxvY2sgbmV3QmxvY2sgPSBvcGVuTmV3QmxvY2soKTsKICAgIGJvZHkuYWNjZXB0KHRoaXMpOwogICAgU3ViR3JhcGggYm9keUdyYXBoID0gbmV3IFN1YkdyYXBoKG5ld0Jsb2NrLCBsYXN0T3BlbmVkQmxvY2spOwoKICAgIEhCYXNpY0Jsb2NrIGpvaW5CbG9jayA9IGdyYXBoLmFkZE5ld0Jsb2NrKCk7CiAgICBMaXN0PExvY2Fsc0hhbmRsZXI+IGJyZWFrSGFuZGxlcnMgPSA8TG9jYWxzSGFuZGxlcj5bXTsKICAgIGhhbmRsZXIuZm9yRWFjaEJyZWFrKChIQnJlYWsgYnJlYWtJbnN0cnVjdGlvbiwgTG9jYWxzSGFuZGxlciBsb2NhbHMpIHsKICAgICAgYnJlYWtJbnN0cnVjdGlvbi5ibG9jay5hZGRTdWNjZXNzb3Ioam9pbkJsb2NrKTsKICAgICAgYnJlYWtIYW5kbGVycy5hZGQobG9jYWxzKTsKICAgIH0pOwoKICAgIGlmICghaXNBYm9ydGVkKCkpIHsKICAgICAgZ290byhjdXJyZW50LCBqb2luQmxvY2spOwogICAgICBicmVha0hhbmRsZXJzLmFkZChsb2NhbHNIYW5kbGVyKTsKICAgIH0KCiAgICBvcGVuKGpvaW5CbG9jayk7CiAgICBsb2NhbHNIYW5kbGVyID0gYmVmb3JlTG9jYWxzLm1lcmdlTXVsdGlwbGUoYnJlYWtIYW5kbGVycywgam9pbkJsb2NrKTsKCiAgICAvLyBUaGVyZSB3YXMgYXQgbGVhc3Qgb25lIHJlYWNoYWJsZSBicmVhaywgc28gdGhlIGxhYmVsIGlzIG5lZWRlZC4KICAgIG5ld0Jsb2NrLnNldEJsb2NrRmxvdygKICAgICAgICBuZXcgSExhYmVsZWRCbG9ja0luZm9ybWF0aW9uKAogICAgICAgICAgICBuZXcgSFN1YkdyYXBoQmxvY2tJbmZvcm1hdGlvbihib2R5R3JhcGgpLCBoYW5kbGVyLmxhYmVscyksCiAgICAgICAgam9pbkJsb2NrKTsKICAgIGhhbmRsZXIuY2xvc2UoKTsKICB9CgogIC8vLyBMb29wIHRocm91Z2ggdGhlIGNhc2VzIGluIGEgc3dpdGNoIGFuZCBjcmVhdGUgYSBtYXBwaW5nIG9mIGNhc2UKICAvLy8gZXhwcmVzc2lvbnMgdG8gY29uc3RhbnRzLgogIE1hcDxpci5FeHByZXNzaW9uLCBDb25zdGFudFZhbHVlPiBfYnVpbGRTd2l0Y2hDYXNlQ29uc3RhbnRzKAogICAgICBpci5Td2l0Y2hTdGF0ZW1lbnQgc3dpdGNoU3RhdGVtZW50KSB7CiAgICBNYXA8aXIuRXhwcmVzc2lvbiwgQ29uc3RhbnRWYWx1ZT4gY29uc3RhbnRzID0KICAgICAgICBuZXcgTWFwPGlyLkV4cHJlc3Npb24sIENvbnN0YW50VmFsdWU+KCk7CiAgICBmb3IgKGlyLlN3aXRjaENhc2Ugc3dpdGNoQ2FzZSBpbiBzd2l0Y2hTdGF0ZW1lbnQuY2FzZXMpIHsKICAgICAgZm9yIChpci5FeHByZXNzaW9uIGNhc2VFeHByZXNzaW9uIGluIHN3aXRjaENhc2UuZXhwcmVzc2lvbnMpIHsKICAgICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gX2VsZW1lbnRNYXAuZ2V0Q29uc3RhbnRWYWx1ZShjYXNlRXhwcmVzc2lvbik7CiAgICAgICAgY29uc3RhbnRzW2Nhc2VFeHByZXNzaW9uXSA9IGNvbnN0YW50OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gY29uc3RhbnRzOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnRpbnVlU3dpdGNoU3RhdGVtZW50KGlyLkNvbnRpbnVlU3dpdGNoU3RhdGVtZW50IG5vZGUpIHsKICAgIF9oYW5kbGVJblRyeVN0YXRlbWVudCgpOwogICAgSnVtcFRhcmdldCB0YXJnZXQgPSBfbG9jYWxzTWFwLmdldEp1bXBUYXJnZXRGb3JDb250aW51ZVN3aXRjaChub2RlKTsKICAgIGFzc2VydCh0YXJnZXQgIT0gbnVsbCk7CiAgICBKdW1wSGFuZGxlciBoYW5kbGVyID0ganVtcFRhcmdldHNbdGFyZ2V0XTsKICAgIGFzc2VydChoYW5kbGVyICE9IG51bGwpOwogICAgYXNzZXJ0KHRhcmdldC5sYWJlbHMuaXNOb3RFbXB0eSk7CiAgICBoYW5kbGVyLmdlbmVyYXRlQ29udGludWUoCiAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEdvdG8obm9kZSksIHRhcmdldC5sYWJlbHMuZmlyc3QpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN3aXRjaFN0YXRlbWVudChpci5Td2l0Y2hTdGF0ZW1lbnQgbm9kZSkgewogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRTd2l0Y2gobm9kZSk7CiAgICAvLyBUaGUgc3dpdGNoIGNhc2UgaW5kaWNlcyBtdXN0IG1hdGNoIHRob3NlIGNvbXB1dGVkIGluCiAgICAvLyBbS2VybmVsU3dpdGNoQ2FzZUp1bXBIYW5kbGVyXS4KICAgIGJvb2wgaGFzQ29udGludWUgPSBmYWxzZTsKICAgIE1hcDxpci5Td2l0Y2hDYXNlLCBpbnQ+IGNhc2VJbmRleCA9IG5ldyBNYXA8aXIuU3dpdGNoQ2FzZSwgaW50PigpOwogICAgaW50IHN3aXRjaEluZGV4ID0gMTsKICAgIGJvb2wgaGFzRGVmYXVsdCA9IGZhbHNlOwogICAgZm9yIChpci5Td2l0Y2hDYXNlIHN3aXRjaENhc2UgaW4gbm9kZS5jYXNlcykgewogICAgICBpZiAoX2lzRGVmYXVsdENhc2Uoc3dpdGNoQ2FzZSkpIHsKICAgICAgICBoYXNEZWZhdWx0ID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoU3dpdGNoQ29udGludWVBbmFseXNpcy5jb250YWluc0NvbnRpbnVlKHN3aXRjaENhc2UuYm9keSkpIHsKICAgICAgICBoYXNDb250aW51ZSA9IHRydWU7CiAgICAgIH0KICAgICAgY2FzZUluZGV4W3N3aXRjaENhc2VdID0gc3dpdGNoSW5kZXg7CiAgICAgIHN3aXRjaEluZGV4Kys7CiAgICB9CgogICAgSnVtcEhhbmRsZXIganVtcEhhbmRsZXIgPQogICAgICAgIGNyZWF0ZUp1bXBIYW5kbGVyKG5vZGUsIF9sb2NhbHNNYXAuZ2V0SnVtcFRhcmdldEZvclN3aXRjaChub2RlKSk7CiAgICBpZiAoIWhhc0NvbnRpbnVlKSB7CiAgICAgIC8vIElmIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGhhcyBubyBzd2l0Y2ggY2FzZXMgdGFyZ2V0ZWQgYnkgY29udGludWUKICAgICAgLy8gc3RhdGVtZW50cyB3ZSBlbmNvZGUgdGhlIHN3aXRjaCBzdGF0ZW1lbnQgZGlyZWN0bHkuCiAgICAgIF9idWlsZFNpbXBsZVN3aXRjaFN0YXRlbWVudChub2RlLCBqdW1wSGFuZGxlciwgc291cmNlSW5mb3JtYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgX2J1aWxkQ29tcGxleFN3aXRjaFN0YXRlbWVudCgKICAgICAgICAgIG5vZGUsIGp1bXBIYW5kbGVyLCBjYXNlSW5kZXgsIGhhc0RlZmF1bHQsIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0KICB9CgogIC8vLyBIZWxwZXIgZm9yIGJ1aWxkaW5nIHN3aXRjaCBzdGF0ZW1lbnRzLgogIHN0YXRpYyBib29sIF9pc0RlZmF1bHRDYXNlKGlyLlN3aXRjaENhc2Ugc3dpdGNoQ2FzZSkgPT4KICAgICAgc3dpdGNoQ2FzZSA9PSBudWxsIHx8IHN3aXRjaENhc2UuaXNEZWZhdWx0OwoKICAvLy8gSGVscGVyIGZvciBidWlsZGluZyBzd2l0Y2ggc3RhdGVtZW50cy4KICBISW5zdHJ1Y3Rpb24gX2J1aWxkRXhwcmVzc2lvbihpci5Td2l0Y2hTdGF0ZW1lbnQgc3dpdGNoU3RhdGVtZW50KSB7CiAgICBzd2l0Y2hTdGF0ZW1lbnQuZXhwcmVzc2lvbi5hY2NlcHQodGhpcyk7CiAgICByZXR1cm4gcG9wKCk7CiAgfQoKICAvLy8gSGVscGVyIG1ldGhvZCBmb3IgY3JlYXRpbmcgdGhlIGxpc3Qgb2YgY29uc3RhbnRzIHRoYXQgbWFrZSB1cCB0aGUKICAvLy8gc3dpdGNoIGNhc2UgYnJhbmNoZXMuCiAgTGlzdDxDb25zdGFudFZhbHVlPiBfZ2V0U3dpdGNoQ29uc3RhbnRzKAogICAgICBpci5Td2l0Y2hTdGF0ZW1lbnQgcGFyZW50U3dpdGNoLCBpci5Td2l0Y2hDYXNlIHN3aXRjaENhc2UpIHsKICAgIE1hcDxpci5FeHByZXNzaW9uLCBDb25zdGFudFZhbHVlPiBjb25zdGFudHNMb29rdXAgPQogICAgICAgIF9idWlsZFN3aXRjaENhc2VDb25zdGFudHMocGFyZW50U3dpdGNoKTsKICAgIExpc3Q8Q29uc3RhbnRWYWx1ZT4gY29uc3RhbnRMaXN0ID0gPENvbnN0YW50VmFsdWU+W107CiAgICBpZiAoc3dpdGNoQ2FzZSAhPSBudWxsKSB7CiAgICAgIGZvciAodmFyIGV4cHJlc3Npb24gaW4gc3dpdGNoQ2FzZS5leHByZXNzaW9ucykgewogICAgICAgIGNvbnN0YW50TGlzdC5hZGQoY29uc3RhbnRzTG9va3VwW2V4cHJlc3Npb25dKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNvbnN0YW50TGlzdDsKICB9CgogIC8vLyBCdWlsZHMgYSBzaW1wbGUgc3dpdGNoIHN0YXRlbWVudCB3aGljaCBkb2VzIG5vdCBoYW5kbGUgdXNlcyBvZiBjb250aW51ZQogIC8vLyBzdGF0ZW1lbnRzIHRvIGxhYmVsZWQgc3dpdGNoIGNhc2VzLgogIHZvaWQgX2J1aWxkU2ltcGxlU3dpdGNoU3RhdGVtZW50KGlyLlN3aXRjaFN0YXRlbWVudCBzd2l0Y2hTdGF0ZW1lbnQsCiAgICAgIEp1bXBIYW5kbGVyIGp1bXBIYW5kbGVyLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgdm9pZCBidWlsZFN3aXRjaENhc2UoaXIuU3dpdGNoQ2FzZSBzd2l0Y2hDYXNlKSB7CiAgICAgIHN3aXRjaENhc2UuYm9keS5hY2NlcHQodGhpcyk7CiAgICB9CgogICAgX2hhbmRsZVN3aXRjaCgKICAgICAgICBzd2l0Y2hTdGF0ZW1lbnQsCiAgICAgICAganVtcEhhbmRsZXIsCiAgICAgICAgX2J1aWxkRXhwcmVzc2lvbiwKICAgICAgICBzd2l0Y2hTdGF0ZW1lbnQuY2FzZXMsCiAgICAgICAgX2dldFN3aXRjaENvbnN0YW50cywKICAgICAgICBfaXNEZWZhdWx0Q2FzZSwKICAgICAgICBidWlsZFN3aXRjaENhc2UsCiAgICAgICAgc291cmNlSW5mb3JtYXRpb24pOwogICAganVtcEhhbmRsZXIuY2xvc2UoKTsKICB9CgogIC8vLyBCdWlsZHMgYSBzd2l0Y2ggc3RhdGVtZW50IHRoYXQgY2FuIGhhbmRsZSBhcmJpdHJhcnkgdXNlcyBvZiBjb250aW51ZQogIC8vLyBzdGF0ZW1lbnRzIHRvIGxhYmVsZWQgc3dpdGNoIGNhc2VzLgogIHZvaWQgX2J1aWxkQ29tcGxleFN3aXRjaFN0YXRlbWVudCgKICAgICAgaXIuU3dpdGNoU3RhdGVtZW50IHN3aXRjaFN0YXRlbWVudCwKICAgICAgSnVtcEhhbmRsZXIganVtcEhhbmRsZXIsCiAgICAgIE1hcDxpci5Td2l0Y2hDYXNlLCBpbnQ+IGNhc2VJbmRleCwKICAgICAgYm9vbCBoYXNEZWZhdWx0LAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgLy8gSWYgdGhlIHN3aXRjaCBzdGF0ZW1lbnQgaGFzIHN3aXRjaCBjYXNlcyB0YXJnZXRlZCBieSBjb250aW51ZQogICAgLy8gc3RhdGVtZW50cyB3ZSBjcmVhdGUgdGhlIGZvbGxvd2luZyBlbmNvZGluZzoKICAgIC8vCiAgICAvLyAgIHN3aXRjaCAoZSkgewogICAgLy8gICAgIGxfMTogY2FzZSBlMDogc18xOyBicmVhazsKICAgIC8vICAgICBsXzI6IGNhc2UgZTE6IHNfMjsgY29udGludWUgbF9pOwogICAgLy8gICAgIC4uLgogICAgLy8gICAgIGxfbjogZGVmYXVsdDogc19uOyBjb250aW51ZSBsX2o7CiAgICAvLyAgIH0KICAgIC8vCiAgICAvLyBpcyBlbmNvZGVkIGFzCiAgICAvLwogICAgLy8gICB2YXIgdGFyZ2V0OwogICAgLy8gICBzd2l0Y2ggKGUpIHsKICAgIC8vICAgICBjYXNlIGUxOiB0YXJnZXQgPSAxOyBicmVhazsKICAgIC8vICAgICBjYXNlIGUyOiB0YXJnZXQgPSAyOyBicmVhazsKICAgIC8vICAgICAuLi4KICAgIC8vICAgICBkZWZhdWx0OiB0YXJnZXQgPSBuOyBicmVhazsKICAgIC8vICAgfQogICAgLy8gICBsOiB3aGlsZSAodHJ1ZSkgewogICAgLy8gICAgc3dpdGNoICh0YXJnZXQpIHsKICAgIC8vICAgICAgIGNhc2UgMTogc18xOyBicmVhayBsOwogICAgLy8gICAgICAgY2FzZSAyOiBzXzI7IHRhcmdldCA9IGk7IGNvbnRpbnVlIGw7CiAgICAvLyAgICAgICAuLi4KICAgIC8vICAgICAgIGNhc2Ugbjogc19uOyB0YXJnZXQgPSBqOyBjb250aW51ZSBsOwogICAgLy8gICAgIH0KICAgIC8vICAgfQogICAgLy8KICAgIC8vIFRoaXMgaXMgYmVjYXVzZSBKUyBkb2VzIG5vdCBoYXZlIHRoaXMgc2FtZSAiY29udGludWUgbGFiZWwiIHNlbWFudGljcyBzbwogICAgLy8gd2UgZW5jb2RlIGl0IGluIHRoZSBmb3JtIG9mIGEgc3RhdGUgbWFjaGluZS4KCiAgICBKdW1wVGFyZ2V0IHN3aXRjaFRhcmdldCA9CiAgICAgICAgX2xvY2Fsc01hcC5nZXRKdW1wVGFyZ2V0Rm9yU3dpdGNoKHN3aXRjaFN0YXRlbWVudCk7CiAgICBsb2NhbHNIYW5kbGVyLnVwZGF0ZUxvY2FsKHN3aXRjaFRhcmdldCwgZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKSk7CgogICAgdmFyIHN3aXRjaENhc2VzID0gc3dpdGNoU3RhdGVtZW50LmNhc2VzOwogICAgaWYgKCFoYXNEZWZhdWx0KSB7CiAgICAgIC8vIFVzZSBudWxsIGFzIHRoZSBtYXJrZXIgZm9yIGEgc3ludGhldGljIGRlZmF1bHQgY2xhdXNlLgogICAgICAvLyBUaGUgc3ludGhldGljIGRlZmF1bHQgaXMgYWRkZWQgYmVjYXVzZSBvdGhlcndpc2UgdGhlcmUgd291bGQgYmUgbm8KICAgICAgLy8gZ29vZCBwbGFjZSB0byBnaXZlIGEgZGVmYXVsdCB2YWx1ZSB0byB0aGUgbG9jYWwuCiAgICAgIHN3aXRjaENhc2VzID0gbmV3IExpc3Q8aXIuU3dpdGNoQ2FzZT4uZnJvbShzd2l0Y2hDYXNlcyk7CiAgICAgIHN3aXRjaENhc2VzLmFkZChudWxsKTsKICAgIH0KCiAgICB2b2lkIGJ1aWxkU3dpdGNoQ2FzZShpci5Td2l0Y2hDYXNlIHN3aXRjaENhc2UpIHsKICAgICAgU291cmNlSW5mb3JtYXRpb24gY2FzZVNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgICAgIGlmIChzd2l0Y2hDYXNlICE9IG51bGwpIHsKICAgICAgICBjYXNlU291cmNlSW5mb3JtYXRpb24gPSBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkR290byhzd2l0Y2hDYXNlKTsKICAgICAgICAvLyBHZW5lcmF0ZSAndGFyZ2V0ID0gaTsgYnJlYWs7JyBmb3Igc3dpdGNoIGNhc2UgaS4KICAgICAgICBpbnQgaW5kZXggPSBjYXNlSW5kZXhbc3dpdGNoQ2FzZV07CiAgICAgICAgSEluc3RydWN0aW9uIHZhbHVlID0gZ3JhcGguYWRkQ29uc3RhbnRJbnQoaW5kZXgsIGNsb3NlZFdvcmxkKTsKICAgICAgICBsb2NhbHNIYW5kbGVyLnVwZGF0ZUxvY2FsKHN3aXRjaFRhcmdldCwgdmFsdWUsCiAgICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBjYXNlU291cmNlSW5mb3JtYXRpb24pOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIEdlbmVyYXRlIHN5bnRoZXRpYyBkZWZhdWx0IGNhc2UgJ3RhcmdldCA9IG51bGw7IGJyZWFrOycuCiAgICAgICAgSEluc3RydWN0aW9uIG51bGxWYWx1ZSA9IGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCk7CiAgICAgICAgbG9jYWxzSGFuZGxlci51cGRhdGVMb2NhbChzd2l0Y2hUYXJnZXQsIG51bGxWYWx1ZSwKICAgICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IGNhc2VTb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIH0KICAgICAganVtcFRhcmdldHNbc3dpdGNoVGFyZ2V0XS5nZW5lcmF0ZUJyZWFrKGNhc2VTb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CgogICAgX2hhbmRsZVN3aXRjaCgKICAgICAgICBzd2l0Y2hTdGF0ZW1lbnQsCiAgICAgICAganVtcEhhbmRsZXIsCiAgICAgICAgX2J1aWxkRXhwcmVzc2lvbiwKICAgICAgICBzd2l0Y2hDYXNlcywKICAgICAgICBfZ2V0U3dpdGNoQ29uc3RhbnRzLAogICAgICAgIF9pc0RlZmF1bHRDYXNlLAogICAgICAgIGJ1aWxkU3dpdGNoQ2FzZSwKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBqdW1wSGFuZGxlci5jbG9zZSgpOwoKICAgIEhJbnN0cnVjdGlvbiBidWlsZENvbmRpdGlvbigpID0+IGdyYXBoLmFkZENvbnN0YW50Qm9vbCh0cnVlLCBjbG9zZWRXb3JsZCk7CgogICAgdm9pZCBidWlsZFN3aXRjaCgpIHsKICAgICAgSEluc3RydWN0aW9uIGJ1aWxkRXhwcmVzc2lvbihpci5Td2l0Y2hTdGF0ZW1lbnQgbm90VXNlZCkgewogICAgICAgIHJldHVybiBsb2NhbHNIYW5kbGVyLnJlYWRMb2NhbChzd2l0Y2hUYXJnZXQpOwogICAgICB9CgogICAgICBMaXN0PENvbnN0YW50VmFsdWU+IGdldENvbnN0YW50cygKICAgICAgICAgIGlyLlN3aXRjaFN0YXRlbWVudCBwYXJlbnRTd2l0Y2gsIGlyLlN3aXRjaENhc2Ugc3dpdGNoQ2FzZSkgewogICAgICAgIHJldHVybiA8Q29uc3RhbnRWYWx1ZT5bCiAgICAgICAgICBjb25zdGFudF9zeXN0ZW0uY3JlYXRlSW50RnJvbUludChjYXNlSW5kZXhbc3dpdGNoQ2FzZV0pCiAgICAgICAgXTsKICAgICAgfQoKICAgICAgdm9pZCBidWlsZFN3aXRjaENhc2UoaXIuU3dpdGNoQ2FzZSBzd2l0Y2hDYXNlKSB7CiAgICAgICAgc3dpdGNoQ2FzZS5ib2R5LmFjY2VwdCh0aGlzKTsKICAgICAgICBpZiAoIWlzQWJvcnRlZCgpKSB7CiAgICAgICAgICAvLyBFbnN1cmUgdGhhdCB3ZSBicmVhayB0aGUgbG9vcCBpZiB0aGUgY2FzZSBmYWxscyB0aHJvdWdoLiAoVGhpcwogICAgICAgICAgLy8gaXMgb25seSBwb3NzaWJsZSBmb3IgdGhlIGxhc3QgY2FzZS4pCiAgICAgICAgICBqdW1wVGFyZ2V0c1tzd2l0Y2hUYXJnZXRdLmdlbmVyYXRlQnJlYWsoc291cmNlSW5mb3JtYXRpb24pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gUGFzcyBhIFtOdWxsSnVtcEhhbmRsZXJdIGJlY2F1c2UgdGhlIHRhcmdldCBmb3IgdGhlIGNvbnRhaW5lZCBicmVhawogICAgICAvLyBpcyBub3QgdGhlIGdlbmVyYXRlZCBzd2l0Y2ggc3RhdGVtZW50IGJ1dCBpbnN0ZWFkIHRoZSBsb29wIGdlbmVyYXRlZAogICAgICAvLyBpbiB0aGUgY2FsbCB0byBbaGFuZGxlTG9vcF0gYmVsb3cuCiAgICAgIF9oYW5kbGVTd2l0Y2goCiAgICAgICAgICBzd2l0Y2hTdGF0ZW1lbnQsIC8vIG5vciBpcyBidWlsZEV4cHJlc3Npb24uCiAgICAgICAgICBuZXcgTnVsbEp1bXBIYW5kbGVyKHJlcG9ydGVyKSwKICAgICAgICAgIGJ1aWxkRXhwcmVzc2lvbiwKICAgICAgICAgIHN3aXRjaFN0YXRlbWVudC5jYXNlcywKICAgICAgICAgIGdldENvbnN0YW50cywKICAgICAgICAgIChfKSA9PiBmYWxzZSwgLy8gTm8gY2FzZSBpcyBkZWZhdWx0LgogICAgICAgICAgYnVpbGRTd2l0Y2hDYXNlLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb24pOwogICAgfQoKICAgIHZvaWQgYnVpbGRMb29wKCkgewogICAgICBfbG9vcEhhbmRsZXIuaGFuZGxlTG9vcCgKICAgICAgICAgIHN3aXRjaFN0YXRlbWVudCwKICAgICAgICAgIF9jbG9zdXJlRGF0YUxvb2t1cC5nZXRDYXB0dXJlZExvb3BTY29wZShzd2l0Y2hTdGF0ZW1lbnQpLAogICAgICAgICAgc3dpdGNoVGFyZ2V0LAogICAgICAgICAgKCkge30sCiAgICAgICAgICBidWlsZENvbmRpdGlvbiwKICAgICAgICAgICgpIHt9LAogICAgICAgICAgYnVpbGRTd2l0Y2gsCiAgICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkTG9vcChzd2l0Y2hTdGF0ZW1lbnQpKTsKICAgIH0KCiAgICBpZiAoaGFzRGVmYXVsdCkgewogICAgICBidWlsZExvb3AoKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIElmIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGhhcyBubyBkZWZhdWx0IGNhc2UsIHN1cnJvdW5kIHRoZSBsb29wIHdpdGgKICAgICAgLy8gYSB0ZXN0IG9mIHRoZSB0YXJnZXQuIFNvOgogICAgICAvLyBgaWYgKHRhcmdldCkgd2hpbGUgKHRydWUpIC4uLmAgSWYgdGhlcmUncyBubyBkZWZhdWx0IGNhc2UsIHRhcmdldCBpcwogICAgICAvLyBudWxsLCBzbyB3ZSBkb24ndCBkcm9wIGludG8gdGhlIHdoaWxlIGxvb3AuCiAgICAgIHZvaWQgYnVpbGRDb25kaXRpb24oKSB7CiAgICAgICAganMuVGVtcGxhdGUgY29kZSA9IGpzLmpzLnBhcnNlRm9yZWlnbkpTKCcjJyk7CiAgICAgICAgcHVzaChuZXcgSEZvcmVpZ25Db2RlKGNvZGUsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlLAogICAgICAgICAgICBbbG9jYWxzSGFuZGxlci5yZWFkTG9jYWwoc3dpdGNoVGFyZ2V0KV0sCiAgICAgICAgICAgIG5hdGl2ZUJlaGF2aW9yOiBOYXRpdmVCZWhhdmlvci5QVVJFKSk7CiAgICAgIH0KCiAgICAgIF9oYW5kbGVJZigKICAgICAgICAgIG5vZGU6IHN3aXRjaFN0YXRlbWVudCwKICAgICAgICAgIHZpc2l0Q29uZGl0aW9uOiBidWlsZENvbmRpdGlvbiwKICAgICAgICAgIHZpc2l0VGhlbjogYnVpbGRMb29wLAogICAgICAgICAgdmlzaXRFbHNlOiAoKSA9PiB7fSwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CiAgfQoKICAvLy8gQ3JlYXRlcyBhIHN3aXRjaCBzdGF0ZW1lbnQuCiAgLy8vCiAgLy8vIFtqdW1wSGFuZGxlcl0gaXMgdGhlIFtKdW1wSGFuZGxlcl0gZm9yIHRoZSBjcmVhdGVkIHN3aXRjaCBzdGF0ZW1lbnQuCiAgLy8vIFtidWlsZFN3aXRjaENhc2VdIGNyZWF0ZXMgdGhlIHN0YXRlbWVudHMgZm9yIHRoZSBzd2l0Y2ggY2FzZS4KICB2b2lkIF9oYW5kbGVTd2l0Y2goCiAgICAgIGlyLlN3aXRjaFN0YXRlbWVudCBzd2l0Y2hTdGF0ZW1lbnQsCiAgICAgIEp1bXBIYW5kbGVyIGp1bXBIYW5kbGVyLAogICAgICBISW5zdHJ1Y3Rpb24gYnVpbGRFeHByZXNzaW9uKGlyLlN3aXRjaFN0YXRlbWVudCBzdGF0ZW1lbnQpLAogICAgICBMaXN0PGlyLlN3aXRjaENhc2U+IHN3aXRjaENhc2VzLAogICAgICBMaXN0PENvbnN0YW50VmFsdWU+IGdldENvbnN0YW50cygKICAgICAgICAgIGlyLlN3aXRjaFN0YXRlbWVudCBwYXJlbnRTd2l0Y2gsIGlyLlN3aXRjaENhc2Ugc3dpdGNoQ2FzZSksCiAgICAgIGJvb2wgaXNEZWZhdWx0Q2FzZShpci5Td2l0Y2hDYXNlIHN3aXRjaENhc2UpLAogICAgICB2b2lkIGJ1aWxkU3dpdGNoQ2FzZShpci5Td2l0Y2hDYXNlIHN3aXRjaENhc2UpLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgSEJhc2ljQmxvY2sgZXhwcmVzc2lvblN0YXJ0ID0gb3Blbk5ld0Jsb2NrKCk7CiAgICBISW5zdHJ1Y3Rpb24gZXhwcmVzc2lvbiA9IGJ1aWxkRXhwcmVzc2lvbihzd2l0Y2hTdGF0ZW1lbnQpOwoKICAgIGlmIChzd2l0Y2hDYXNlcy5pc0VtcHR5KSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBIU3dpdGNoIHN3aXRjaEluc3RydWN0aW9uID0KICAgICAgICBuZXcgSFN3aXRjaChfYWJzdHJhY3RWYWx1ZURvbWFpbiwgPEhJbnN0cnVjdGlvbj5bZXhwcmVzc2lvbl0pOwogICAgSEJhc2ljQmxvY2sgZXhwcmVzc2lvbkVuZCA9IGNsb3NlKHN3aXRjaEluc3RydWN0aW9uKTsKICAgIExvY2Fsc0hhbmRsZXIgc2F2ZWRMb2NhbHMgPSBsb2NhbHNIYW5kbGVyOwoKICAgIExpc3Q8SFN0YXRlbWVudEluZm9ybWF0aW9uPiBzdGF0ZW1lbnRzID0gPEhTdGF0ZW1lbnRJbmZvcm1hdGlvbj5bXTsKICAgIGJvb2wgaGFzRGVmYXVsdCA9IGZhbHNlOwogICAgZm9yIChpci5Td2l0Y2hDYXNlIHN3aXRjaENhc2UgaW4gc3dpdGNoQ2FzZXMpIHsKICAgICAgSEJhc2ljQmxvY2sgYmxvY2sgPSBncmFwaC5hZGROZXdCbG9jaygpOwogICAgICBmb3IgKENvbnN0YW50VmFsdWUgY29uc3RhbnQKICAgICAgICAgIGluIGdldENvbnN0YW50cyhzd2l0Y2hTdGF0ZW1lbnQsIHN3aXRjaENhc2UpKSB7CiAgICAgICAgSENvbnN0YW50IGhDb25zdGFudCA9IGdyYXBoLmFkZENvbnN0YW50KGNvbnN0YW50LCBjbG9zZWRXb3JsZCk7CiAgICAgICAgc3dpdGNoSW5zdHJ1Y3Rpb24uaW5wdXRzLmFkZChoQ29uc3RhbnQpOwogICAgICAgIGhDb25zdGFudC51c2VkQnkuYWRkKHN3aXRjaEluc3RydWN0aW9uKTsKICAgICAgICBleHByZXNzaW9uRW5kLmFkZFN1Y2Nlc3NvcihibG9jayk7CiAgICAgIH0KCiAgICAgIGlmIChpc0RlZmF1bHRDYXNlKHN3aXRjaENhc2UpKSB7CiAgICAgICAgLy8gQW4gSFN3aXRjaCBoYXMgbiBpbnB1dHMgYW5kIG4rMSBzdWNjZXNzb3JzLCB0aGUgbGFzdCBiZWluZyB0aGUKICAgICAgICAvLyBkZWZhdWx0IGNhc2UuCiAgICAgICAgZXhwcmVzc2lvbkVuZC5hZGRTdWNjZXNzb3IoYmxvY2spOwogICAgICAgIGhhc0RlZmF1bHQgPSB0cnVlOwogICAgICB9CiAgICAgIG9wZW4oYmxvY2spOwogICAgICBsb2NhbHNIYW5kbGVyID0gbmV3IExvY2Fsc0hhbmRsZXIuZnJvbShzYXZlZExvY2Fscyk7CiAgICAgIGJ1aWxkU3dpdGNoQ2FzZShzd2l0Y2hDYXNlKTsKICAgICAgaWYgKCFpc0Fib3J0ZWQoKSAmJgogICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVpbnNlcnQgdGhpcyBpZiBgaXNSZWFjaGFibGVgIGlzIG5vIGxvbmdlcgogICAgICAgICAgLy8gc2V0IHRvIGBmYWxzZWAgd2hlbiBgX3RyeUlubGluZU1ldGhvZGAgc2VlcyBhbiBhbHdheXMgdGhyb3dpbmcKICAgICAgICAgIC8vIG1ldGhvZC4KICAgICAgICAgIC8vc3dpdGNoQ2FzZSA9PSBzd2l0Y2hDYXNlcy5sYXN0ICYmCiAgICAgICAgICAhaXNEZWZhdWx0Q2FzZShzd2l0Y2hDYXNlKSkgewogICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGRlZmF1bHQsIHdlIHdpbGwgYWRkIG9uZSBsYXRlciB0byBhdm9pZAogICAgICAgIC8vIHRoZSBjcml0aWNhbCBlZGdlLiBTbyB3ZSBnZW5lcmF0ZSBhIGJyZWFrIHN0YXRlbWVudCB0byBtYWtlCiAgICAgICAgLy8gc3VyZSB0aGUgbGFzdCBjYXNlIGRvZXMgbm90IGZhbGwgdGhyb3VnaCB0byB0aGUgZGVmYXVsdCBjYXNlLgogICAgICAgIGp1bXBIYW5kbGVyLmdlbmVyYXRlQnJlYWsoc291cmNlSW5mb3JtYXRpb24pOwogICAgICB9CiAgICAgIHN0YXRlbWVudHMuYWRkKAogICAgICAgICAgbmV3IEhTdWJHcmFwaEJsb2NrSW5mb3JtYXRpb24obmV3IFN1YkdyYXBoKGJsb2NrLCBsYXN0T3BlbmVkQmxvY2spKSk7CiAgICB9CgogICAgLy8gQWRkIGEgam9pbi1ibG9jayBpZiBuZWNlc3NhcnkuCiAgICAvLyBXZSBjcmVhdGUgW2pvaW5CbG9ja10gZWFybHksIGFuZCB0aGVuIGdvIHRocm91Z2ggdGhlIGNhc2VzIHRoYXQgbWlnaHQKICAgIC8vIHdhbnQgdG8ganVtcCB0byBpdC4gSW4gZWFjaCBjYXNlLCBpZiB3ZSBhZGQgW2pvaW5CbG9ja10gYXMgYSBzdWNjZXNzb3IKICAgIC8vIG9mIGFub3RoZXIgYmxvY2ssIHdlIGFsc28gYWRkIGFuIGVsZW1lbnQgdG8gW2Nhc2VIYW5kbGVyc10gdGhhdCBpcyB1c2VkCiAgICAvLyB0byBjcmVhdGUgdGhlIHBoaXMgaW4gW2pvaW5CbG9ja10uCiAgICAvLyBJZiB3ZSBuZXZlciBqdW1wIHRvIHRoZSBqb2luIGJsb2NrLCBbY2FzZUhhbmRsZXJzXSB3aWxsIHN0YXkgZW1wdHksIGFuZAogICAgLy8gdGhlIGpvaW4gYmxvY2sgaXMgbmV2ZXIgYWRkZWQgdG8gdGhlIGdyYXBoLgogICAgSEJhc2ljQmxvY2sgam9pbkJsb2NrID0gbmV3IEhCYXNpY0Jsb2NrKCk7CiAgICBMaXN0PExvY2Fsc0hhbmRsZXI+IGNhc2VIYW5kbGVycyA9IDxMb2NhbHNIYW5kbGVyPltdOwogICAganVtcEhhbmRsZXIuZm9yRWFjaEJyZWFrKChIQnJlYWsgaW5zdHJ1Y3Rpb24sIExvY2Fsc0hhbmRsZXIgbG9jYWxzKSB7CiAgICAgIGluc3RydWN0aW9uLmJsb2NrLmFkZFN1Y2Nlc3Nvcihqb2luQmxvY2spOwogICAgICBjYXNlSGFuZGxlcnMuYWRkKGxvY2Fscyk7CiAgICB9KTsKICAgIGp1bXBIYW5kbGVyLmZvckVhY2hDb250aW51ZSgoSENvbnRpbnVlIGluc3RydWN0aW9uLCBMb2NhbHNIYW5kbGVyIGxvY2FscykgewogICAgICBhc3NlcnQoCiAgICAgICAgICBmYWxzZSwKICAgICAgICAgIGZhaWxlZEF0KF9lbGVtZW50TWFwLmdldFNwYW5uYWJsZSh0YXJnZXRFbGVtZW50LCBzd2l0Y2hTdGF0ZW1lbnQpLAogICAgICAgICAgICAgICdDb250aW51ZSBjYW5ub3QgdGFyZ2V0IGEgc3dpdGNoLicpKTsKICAgIH0pOwogICAgaWYgKCFpc0Fib3J0ZWQoKSkgewogICAgICBjdXJyZW50LmNsb3NlKG5ldyBIR290byhfYWJzdHJhY3RWYWx1ZURvbWFpbikpOwogICAgICBsYXN0T3BlbmVkQmxvY2suYWRkU3VjY2Vzc29yKGpvaW5CbG9jayk7CiAgICAgIGNhc2VIYW5kbGVycy5hZGQobG9jYWxzSGFuZGxlcik7CiAgICB9CiAgICBpZiAoIWhhc0RlZmF1bHQpIHsKICAgICAgLy8gQWx3YXlzIGNyZWF0ZSBhIGRlZmF1bHQgY2FzZSwgdG8gYXZvaWQgYSBjcml0aWNhbCBlZGdlIGluIHRoZQogICAgICAvLyBncmFwaC4KICAgICAgSEJhc2ljQmxvY2sgZGVmYXVsdENhc2UgPSBhZGROZXdCbG9jaygpOwogICAgICBleHByZXNzaW9uRW5kLmFkZFN1Y2Nlc3NvcihkZWZhdWx0Q2FzZSk7CiAgICAgIG9wZW4oZGVmYXVsdENhc2UpOwogICAgICBjbG9zZShuZXcgSEdvdG8oX2Fic3RyYWN0VmFsdWVEb21haW4pKTsKICAgICAgZGVmYXVsdENhc2UuYWRkU3VjY2Vzc29yKGpvaW5CbG9jayk7CiAgICAgIGNhc2VIYW5kbGVycy5hZGQoc2F2ZWRMb2NhbHMpOwogICAgICBzdGF0ZW1lbnRzLmFkZChuZXcgSFN1YkdyYXBoQmxvY2tJbmZvcm1hdGlvbigKICAgICAgICAgIG5ldyBTdWJHcmFwaChkZWZhdWx0Q2FzZSwgZGVmYXVsdENhc2UpKSk7CiAgICB9CiAgICBhc3NlcnQoY2FzZUhhbmRsZXJzLmxlbmd0aCA9PSBqb2luQmxvY2sucHJlZGVjZXNzb3JzLmxlbmd0aCk7CiAgICBpZiAoY2FzZUhhbmRsZXJzLmlzTm90RW1wdHkpIHsKICAgICAgZ3JhcGguYWRkQmxvY2soam9pbkJsb2NrKTsKICAgICAgb3Blbihqb2luQmxvY2spOwogICAgICBpZiAoY2FzZUhhbmRsZXJzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgbG9jYWxzSGFuZGxlciA9IGNhc2VIYW5kbGVyc1swXTsKICAgICAgfSBlbHNlIHsKICAgICAgICBsb2NhbHNIYW5kbGVyID0gc2F2ZWRMb2NhbHMubWVyZ2VNdWx0aXBsZShjYXNlSGFuZGxlcnMsIGpvaW5CbG9jayk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIFRoZSBqb2luYmxvY2sgaXMgbm90IHVzZWQuCiAgICAgIGpvaW5CbG9jayA9IG51bGw7CiAgICB9CgogICAgSFN1YkV4cHJlc3Npb25CbG9ja0luZm9ybWF0aW9uIGV4cHJlc3Npb25JbmZvID0KICAgICAgICBuZXcgSFN1YkV4cHJlc3Npb25CbG9ja0luZm9ybWF0aW9uKAogICAgICAgICAgICBuZXcgU3ViRXhwcmVzc2lvbihleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25FbmQpKTsKICAgIGV4cHJlc3Npb25TdGFydC5zZXRCbG9ja0Zsb3coCiAgICAgICAgbmV3IEhTd2l0Y2hCbG9ja0luZm9ybWF0aW9uKGV4cHJlc3Npb25JbmZvLCBzdGF0ZW1lbnRzLAogICAgICAgICAgICBqdW1wSGFuZGxlci50YXJnZXQsIGp1bXBIYW5kbGVyLmxhYmVscywgc291cmNlSW5mb3JtYXRpb24pLAogICAgICAgIGpvaW5CbG9jayk7CgogICAganVtcEhhbmRsZXIuY2xvc2UoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb25kaXRpb25hbEV4cHJlc3Npb24oaXIuQ29uZGl0aW9uYWxFeHByZXNzaW9uIG5vZGUpIHsKICAgIFNzYUJyYW5jaEJ1aWxkZXIgYnJhbmNoZXIgPSBuZXcgU3NhQnJhbmNoQnVpbGRlcih0aGlzKTsKICAgIGJyYW5jaGVyLmhhbmRsZUNvbmRpdGlvbmFsKCgpID0+IG5vZGUuY29uZGl0aW9uLmFjY2VwdCh0aGlzKSwKICAgICAgICAoKSA9PiBub2RlLnRoZW4uYWNjZXB0KHRoaXMpLCAoKSA9PiBub2RlLm90aGVyd2lzZS5hY2NlcHQodGhpcykpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExvZ2ljYWxFeHByZXNzaW9uKGlyLkxvZ2ljYWxFeHByZXNzaW9uIG5vZGUpIHsKICAgIFNzYUJyYW5jaEJ1aWxkZXIgYnJhbmNoZXIgPSBuZXcgU3NhQnJhbmNoQnVpbGRlcih0aGlzKTsKICAgIFN0cmluZyBvcGVyYXRvciA9IG5vZGUub3BlcmF0b3I7CiAgICAvLyBpci5Mb2dpY2FsRXhwcmVzc2lvbiBjbGFpbXMgdG8gYWxsb3cgJz8/JyBhcyBhbiBvcGVyYXRvciBidXQgY3VycmVudGx5CiAgICAvLyB0aGF0IGlzIGV4cGFuZGVkIGludG8gYSBsZXQtdHJlZS4KICAgIGFzc2VydChvcGVyYXRvciA9PSAnJiYnIHx8IG9wZXJhdG9yID09ICd8fCcpOwogICAgX2hhbmRsZUxvZ2ljYWxFeHByZXNzaW9uKG5vZGUubGVmdCwgKCkgPT4gbm9kZS5yaWdodC5hY2NlcHQodGhpcyksIGJyYW5jaGVyLAogICAgICAgIG9wZXJhdG9yLCBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkQmluYXJ5KG5vZGUpKTsKICB9CgogIC8vLyBPcHRpbWl6ZXMgbG9naWNhbCBiaW5hcnkgZXhwcmVzc2lvbiB3aGVyZSB0aGUgbGVmdCBoYXMgdGhlIHNhbWUgbG9naWNhbAogIC8vLyBiaW5hcnkgb3BlcmF0b3IuCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIHRyYW5zZm9ybXMgdGhlIG9wZXJhdG9yIGJ5IG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgW2xlZnRdIGlzCiAgLy8vIGEgbG9naWNhbCAiYW5kIiBvciBsb2dpY2FsICJvciIuIFRoZW4gaXQgdXNlcyBbYnJhbmNoQnVpbGRlcl0gdG8gYnVpbGQgdGhlCiAgLy8vIGdyYXBoIGZvciB0aGUgb3B0aW1pemVkIGV4cHJlc3Npb24uCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCBgKHggJiYgeSkgJiYgemAgaXMgdHJhbnNmb3JtZWQgaW50byBgeCAmJiAoeSAmJiB6KWA6CiAgLy8vCiAgdm9pZCBfaGFuZGxlTG9naWNhbEV4cHJlc3Npb24oCiAgICAgIGlyLkV4cHJlc3Npb24gbGVmdCwKICAgICAgdm9pZCB2aXNpdFJpZ2h0KCksCiAgICAgIFNzYUJyYW5jaEJ1aWxkZXIgYnJhbmNoZXIsCiAgICAgIFN0cmluZyBvcGVyYXRvciwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIGlmIChsZWZ0IGlzIGlyLkxvZ2ljYWxFeHByZXNzaW9uICYmIGxlZnQub3BlcmF0b3IgPT0gb3BlcmF0b3IpIHsKICAgICAgaXIuRXhwcmVzc2lvbiBpbm5lckxlZnQgPSBsZWZ0LmxlZnQ7CiAgICAgIGlyLkV4cHJlc3Npb24gbWlkZGxlID0gbGVmdC5yaWdodDsKICAgICAgX2hhbmRsZUxvZ2ljYWxFeHByZXNzaW9uKAogICAgICAgICAgaW5uZXJMZWZ0LAogICAgICAgICAgKCkgPT4gX2hhbmRsZUxvZ2ljYWxFeHByZXNzaW9uKG1pZGRsZSwgdmlzaXRSaWdodCwgYnJhbmNoZXIsIG9wZXJhdG9yLAogICAgICAgICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRCaW5hcnkobWlkZGxlKSksCiAgICAgICAgICBicmFuY2hlciwKICAgICAgICAgIG9wZXJhdG9yLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgYnJhbmNoZXIuaGFuZGxlTG9naWNhbEJpbmFyeSgKICAgICAgICAgICgpID0+IGxlZnQuYWNjZXB0KHRoaXMpLCB2aXNpdFJpZ2h0LCBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICAgIGlzQW5kOiBvcGVyYXRvciA9PSAnJiYnKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRMaXRlcmFsKGlyLkludExpdGVyYWwgbm9kZSkgewogICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50SW50QXNVbnNpZ25lZChub2RlLnZhbHVlLCBjbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERvdWJsZUxpdGVyYWwoaXIuRG91YmxlTGl0ZXJhbCBub2RlKSB7CiAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnREb3VibGUobm9kZS52YWx1ZSwgY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCb29sTGl0ZXJhbChpci5Cb29sTGl0ZXJhbCBub2RlKSB7CiAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnRCb29sKG5vZGUudmFsdWUsIGNsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RyaW5nTGl0ZXJhbChpci5TdHJpbmdMaXRlcmFsIG5vZGUpIHsKICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudFN0cmluZyhub2RlLnZhbHVlLCBjbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN5bWJvbExpdGVyYWwoaXIuU3ltYm9sTGl0ZXJhbCBub2RlKSB7CiAgICBzdGFjay5hZGQoCiAgICAgICAgZ3JhcGguYWRkQ29uc3RhbnQoX2VsZW1lbnRNYXAuZ2V0Q29uc3RhbnRWYWx1ZShub2RlKSwgY2xvc2VkV29ybGQpKTsKICAgIHJlZ2lzdHJ5Py5yZWdpc3RlckNvbnN0U3ltYm9sKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE51bGxMaXRlcmFsKGlyLk51bGxMaXRlcmFsIG5vZGUpIHsKICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpKTsKICB9CgogIC8vLyBTZXQgdGhlIHJ1bnRpbWUgdHlwZSBpbmZvcm1hdGlvbiBpZiBuZWNlc3NhcnkuCiAgSEluc3RydWN0aW9uIF9zZXRMaXN0UnVudGltZVR5cGVJbmZvSWZOZWVkZWQoSEluc3RydWN0aW9uIG9iamVjdCwKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgaWYgKCFfcnRpTmVlZC5jbGFzc05lZWRzVHlwZUFyZ3VtZW50cyh0eXBlLmVsZW1lbnQpIHx8IHR5cGUudHJlYXRBc1JhdykgewogICAgICByZXR1cm4gb2JqZWN0OwogICAgfQogICAgaWYgKG9wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSkgewogICAgICAvLyBbdHlwZV0gY291bGQgYmUgYExpc3Q8VD5gLCBzbyBlbnN1cmUgaXQgaXMgYEpTQXJyYXk8VD5gLgogICAgICBJbnRlcmZhY2VUeXBlIGFycmF5VHlwZSA9CiAgICAgICAgICBJbnRlcmZhY2VUeXBlKF9jb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3MsIHR5cGUudHlwZUFyZ3VtZW50cyk7CiAgICAgIEhJbnN0cnVjdGlvbiBydGkgPQogICAgICAgICAgX3R5cGVCdWlsZGVyLmFuYWx5emVUeXBlQXJndW1lbnROZXdSdGkoYXJyYXlUeXBlLCBzb3VyY2VFbGVtZW50KTsKCiAgICAgIC8vIFRPRE8oMTU0ODkpOiBSZWdpc3RlciBhdCBjb2RlZ2VuLgogICAgICByZWdpc3RyeT8ucmVnaXN0ZXJJbnN0YW50aWF0aW9uKHR5cGUpOwogICAgICByZXR1cm4gX2NhbGxTZXRSdW50aW1lVHlwZUluZm8ocnRpLCBvYmplY3QsIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0KICAgIExpc3Q8SEluc3RydWN0aW9uPiBhcmd1bWVudHMgPSA8SEluc3RydWN0aW9uPltdOwogICAgZm9yIChEYXJ0VHlwZSBhcmd1bWVudCBpbiB0eXBlLnR5cGVBcmd1bWVudHMpIHsKICAgICAgYXJndW1lbnRzLmFkZChfdHlwZUJ1aWxkZXIuYW5hbHl6ZVR5cGVBcmd1bWVudChhcmd1bWVudCwgc291cmNlRWxlbWVudCkpOwogICAgfQogICAgLy8gVE9ETygxNTQ4OSk6IFJlZ2lzdGVyIGF0IGNvZGVnZW4uCiAgICByZWdpc3RyeT8ucmVnaXN0ZXJJbnN0YW50aWF0aW9uKHR5cGUpOwogICAgcmV0dXJuIF9jYWxsU2V0UnVudGltZVR5cGVJbmZvV2l0aFR5cGVBcmd1bWVudHMoCiAgICAgICAgdHlwZSwgYXJndW1lbnRzLCBvYmplY3QsIHNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXN0TGl0ZXJhbChpci5MaXN0TGl0ZXJhbCBub2RlKSB7CiAgICBISW5zdHJ1Y3Rpb24gbGlzdEluc3RydWN0aW9uOwogICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICBsaXN0SW5zdHJ1Y3Rpb24gPQogICAgICAgICAgZ3JhcGguYWRkQ29uc3RhbnQoX2VsZW1lbnRNYXAuZ2V0Q29uc3RhbnRWYWx1ZShub2RlKSwgY2xvc2VkV29ybGQpOwogICAgfSBlbHNlIHsKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGVsZW1lbnRzID0gPEhJbnN0cnVjdGlvbj5bXTsKICAgICAgZm9yIChpci5FeHByZXNzaW9uIGVsZW1lbnQgaW4gbm9kZS5leHByZXNzaW9ucykgewogICAgICAgIGVsZW1lbnQuYWNjZXB0KHRoaXMpOwogICAgICAgIGVsZW1lbnRzLmFkZChwb3AoKSk7CiAgICAgIH0KICAgICAgbGlzdEluc3RydWN0aW9uID0gX2J1aWxkTGl0ZXJhbExpc3QoZWxlbWVudHMpOwogICAgICBhZGQobGlzdEluc3RydWN0aW9uKTsKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZExpc3RMaXRlcmFsKG5vZGUpOwogICAgICBJbnRlcmZhY2VUeXBlIHR5cGUgPSBsb2NhbHNIYW5kbGVyLnN1YnN0SW5Db250ZXh0KAogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmxpc3RUeXBlKF9lbGVtZW50TWFwLmdldERhcnRUeXBlKG5vZGUudHlwZUFyZ3VtZW50KSkpOwogICAgICBsaXN0SW5zdHJ1Y3Rpb24gPSBfc2V0TGlzdFJ1bnRpbWVUeXBlSW5mb0lmTmVlZGVkKAogICAgICAgICAgbGlzdEluc3RydWN0aW9uLCB0eXBlLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CgogICAgQWJzdHJhY3RWYWx1ZSB0eXBlID0KICAgICAgICBfdHlwZUluZmVyZW5jZU1hcC50eXBlT2ZMaXN0TGl0ZXJhbChub2RlLCBfYWJzdHJhY3RWYWx1ZURvbWFpbik7CiAgICBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4uY29udGFpbnNBbGwodHlwZSkuaXNEZWZpbml0ZWx5RmFsc2UpIHsKICAgICAgbGlzdEluc3RydWN0aW9uLmluc3RydWN0aW9uVHlwZSA9IHR5cGU7CiAgICB9CiAgICBzdGFjay5hZGQobGlzdEluc3RydWN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTZXRMaXRlcmFsKGlyLlNldExpdGVyYWwgbm9kZSkgewogICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICBzdGFjay5hZGQoCiAgICAgICAgICBncmFwaC5hZGRDb25zdGFudChfZWxlbWVudE1hcC5nZXRDb25zdGFudFZhbHVlKG5vZGUpLCBjbG9zZWRXb3JsZCkpOwogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gVGhlIHNldCBsaXRlcmFsIGNvbnN0cnVjdG9ycyB0YWtlIHRoZSBlbGVtZW50cyBhcyBhIExpc3QuCiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gZWxlbWVudHMgPSA8SEluc3RydWN0aW9uPltdOwogICAgZm9yIChpci5FeHByZXNzaW9uIGVsZW1lbnQgaW4gbm9kZS5leHByZXNzaW9ucykgewogICAgICBlbGVtZW50LmFjY2VwdCh0aGlzKTsKICAgICAgZWxlbWVudHMuYWRkKHBvcCgpKTsKICAgIH0KCiAgICAvLyBUaGUgY29uc3RydWN0b3IgaXMgYSBwcm9jZWR1cmUgYmVjYXVzZSBpdCdzIGEgZmFjdG9yeS4KICAgIEZ1bmN0aW9uRW50aXR5IGNvbnN0cnVjdG9yOwogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cyA9IDxISW5zdHJ1Y3Rpb24+W107CiAgICBpZiAoZWxlbWVudHMuaXNFbXB0eSkgewogICAgICBjb25zdHJ1Y3RvciA9IF9jb21tb25FbGVtZW50cy5zZXRMaXRlcmFsQ29uc3RydWN0b3JFbXB0eTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0cnVjdG9yID0gX2NvbW1vbkVsZW1lbnRzLnNldExpdGVyYWxDb25zdHJ1Y3RvcjsKICAgICAgSExpdGVyYWxMaXN0IGFyZ0xpc3QgPSBfYnVpbGRMaXRlcmFsTGlzdChlbGVtZW50cyk7CiAgICAgIGFkZChhcmdMaXN0KTsKICAgICAgaW5wdXRzLmFkZChhcmdMaXN0KTsKICAgIH0KCiAgICBhc3NlcnQoCiAgICAgICAgY29uc3RydWN0b3IgaXMgQ29uc3RydWN0b3JFbnRpdHkgJiYgY29uc3RydWN0b3IuaXNGYWN0b3J5Q29uc3RydWN0b3IpOwoKICAgIEludGVyZmFjZVR5cGUgdHlwZSA9IGxvY2Fsc0hhbmRsZXIuc3Vic3RJbkNvbnRleHQoCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnNldFR5cGUoX2VsZW1lbnRNYXAuZ2V0RGFydFR5cGUobm9kZS50eXBlQXJndW1lbnQpKSk7CiAgICBDbGFzc0VudGl0eSBjbHMgPSBjb25zdHJ1Y3Rvci5lbmNsb3NpbmdDbGFzczsKCiAgICBpZiAoX3J0aU5lZWQuY2xhc3NOZWVkc1R5cGVBcmd1bWVudHMoY2xzKSkgewogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gdHlwZUlucHV0cyA9IDxISW5zdHJ1Y3Rpb24+W107CiAgICAgIHR5cGUudHlwZUFyZ3VtZW50cy5mb3JFYWNoKChEYXJ0VHlwZSBhcmd1bWVudCkgewogICAgICAgIHR5cGVJbnB1dHMKICAgICAgICAgICAgLmFkZChfdHlwZUJ1aWxkZXIuYW5hbHl6ZVR5cGVBcmd1bWVudChhcmd1bWVudCwgc291cmNlRWxlbWVudCkpOwogICAgICB9KTsKCiAgICAgIC8vIFdlIGxpZnQgdGhpcyBjb21tb24gY2FsbCBwYXR0ZXJuIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gdG8gc2F2ZSBzcGFjZQogICAgICAvLyBpbiB0aGUgb3V0cHV0LgogICAgICBpZiAodHlwZUlucHV0cy5ldmVyeSgoSEluc3RydWN0aW9uIGlucHV0KSA9PgogICAgICAgICAgaW5wdXQuaXNOdWxsKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSkgewogICAgICAgIGlmIChlbGVtZW50cy5pc0VtcHR5KSB7CiAgICAgICAgICBjb25zdHJ1Y3RvciA9IF9jb21tb25FbGVtZW50cy5zZXRMaXRlcmFsVW50eXBlZEVtcHR5TWFrZXI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0cnVjdG9yID0gX2NvbW1vbkVsZW1lbnRzLnNldExpdGVyYWxVbnR5cGVkTWFrZXI7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlucHV0cy5hZGRBbGwodHlwZUlucHV0cyk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBJZiBydW50aW1lIHR5cGUgaW5mb3JtYXRpb24gaXMgbmVlZGVkIGFuZCB0aGUgc2V0IGxpdGVyYWwgaGFzIG5vIHR5cGUKICAgIC8vIHBhcmFtZXRlciwgJ2NvbnN0cnVjdG9yJyBpcyBhIHN0YXRpYyBmdW5jdGlvbiB0aGF0IGZvcndhcmRzIHRoZSBjYWxsIHRvCiAgICAvLyB0aGUgZmFjdG9yeSBjb25zdHJ1Y3RvciB3aXRob3V0IGEgdHlwZSBwYXJhbWV0ZXIuCiAgICBhc3NlcnQoY29uc3RydWN0b3IuaXNGdW5jdGlvbiB8fAogICAgICAgIChjb25zdHJ1Y3RvciBpcyBDb25zdHJ1Y3RvckVudGl0eSAmJiBjb25zdHJ1Y3Rvci5pc0ZhY3RvcnlDb25zdHJ1Y3RvcikpOwoKICAgIC8vIFRoZSBpbnN0cnVjdGlvbiB0eXBlIHdpbGwgYWx3YXlzIGJlIGEgc3VidHlwZSBvZiB0aGUgc2V0TGl0ZXJhbENsYXNzLCBidXQKICAgIC8vIHR5cGUgaW5mZXJlbmNlIG1pZ2h0IGRpc2NvdmVyIGEgbW9yZSBzcGVjaWZpYyB0eXBlIG9yIGZpbmQgbm90aGluZyAoaW4KICAgIC8vIGRhcnQyanMgdW5pdCB0ZXN0cykuCgogICAgQWJzdHJhY3RWYWx1ZSBzZXRUeXBlID0gX2Fic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAuY3JlYXRlTm9uTnVsbFN1YnR5cGUoX2NvbW1vbkVsZW1lbnRzLnNldExpdGVyYWxDbGFzcyk7CiAgICBBYnN0cmFjdFZhbHVlIHJldHVyblR5cGVNYXNrID0KICAgICAgICBfdHlwZUluZmVyZW5jZU1hcC5nZXRSZXR1cm5UeXBlT2YoY29uc3RydWN0b3IpOwogICAgQWJzdHJhY3RWYWx1ZSBpbnN0cnVjdGlvblR5cGUgPQogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmludGVyc2VjdGlvbihzZXRUeXBlLCByZXR1cm5UeXBlTWFzayk7CgogICAgX2FkZEltcGxpY2l0SW5zdGFudGlhdGlvbih0eXBlKTsKICAgIF9wdXNoU3RhdGljSW52b2NhdGlvbigKICAgICAgICBjb25zdHJ1Y3RvciwgaW5wdXRzLCBpbnN0cnVjdGlvblR5cGUsIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZE5ldyhub2RlKSk7CiAgICBfcmVtb3ZlSW1wbGljaXRJbnN0YW50aWF0aW9uKHR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE1hcExpdGVyYWwoaXIuTWFwTGl0ZXJhbCBub2RlKSB7CiAgICBpZiAobm9kZS5pc0NvbnN0KSB7CiAgICAgIHN0YWNrLmFkZCgKICAgICAgICAgIGdyYXBoLmFkZENvbnN0YW50KF9lbGVtZW50TWFwLmdldENvbnN0YW50VmFsdWUobm9kZSksIGNsb3NlZFdvcmxkKSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyBUaGUgbWFwIGxpdGVyYWwgY29uc3RydWN0b3JzIHRha2UgdGhlIGtleS12YWx1ZSBwYWlycyBhcyBhIExpc3QKICAgIExpc3Q8SEluc3RydWN0aW9uPiBjb25zdHJ1Y3RvckFyZ3MgPSA8SEluc3RydWN0aW9uPltdOwogICAgZm9yIChpci5NYXBFbnRyeSBtYXBFbnRyeSBpbiBub2RlLmVudHJpZXMpIHsKICAgICAgbWFwRW50cnkua2V5LmFjY2VwdCh0aGlzKTsKICAgICAgY29uc3RydWN0b3JBcmdzLmFkZChwb3AoKSk7CiAgICAgIG1hcEVudHJ5LnZhbHVlLmFjY2VwdCh0aGlzKTsKICAgICAgY29uc3RydWN0b3JBcmdzLmFkZChwb3AoKSk7CiAgICB9CgogICAgLy8gVGhlIGNvbnN0cnVjdG9yIGlzIGEgcHJvY2VkdXJlIGJlY2F1c2UgaXQncyBhIGZhY3RvcnkuCiAgICBGdW5jdGlvbkVudGl0eSBjb25zdHJ1Y3RvcjsKICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMgPSA8SEluc3RydWN0aW9uPltdOwogICAgaWYgKGNvbnN0cnVjdG9yQXJncy5pc0VtcHR5KSB7CiAgICAgIGNvbnN0cnVjdG9yID0gX2NvbW1vbkVsZW1lbnRzLm1hcExpdGVyYWxDb25zdHJ1Y3RvckVtcHR5OwogICAgfSBlbHNlIHsKICAgICAgY29uc3RydWN0b3IgPSBfY29tbW9uRWxlbWVudHMubWFwTGl0ZXJhbENvbnN0cnVjdG9yOwogICAgICBITGl0ZXJhbExpc3QgYXJnTGlzdCA9IF9idWlsZExpdGVyYWxMaXN0KGNvbnN0cnVjdG9yQXJncyk7CiAgICAgIGFkZChhcmdMaXN0KTsKICAgICAgaW5wdXRzLmFkZChhcmdMaXN0KTsKICAgIH0KCiAgICBhc3NlcnQoCiAgICAgICAgY29uc3RydWN0b3IgaXMgQ29uc3RydWN0b3JFbnRpdHkgJiYgY29uc3RydWN0b3IuaXNGYWN0b3J5Q29uc3RydWN0b3IpOwoKICAgIEludGVyZmFjZVR5cGUgdHlwZSA9IGxvY2Fsc0hhbmRsZXIuc3Vic3RJbkNvbnRleHQoX2NvbW1vbkVsZW1lbnRzLm1hcFR5cGUoCiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0RGFydFR5cGUobm9kZS5rZXlUeXBlKSwKICAgICAgICBfZWxlbWVudE1hcC5nZXREYXJ0VHlwZShub2RlLnZhbHVlVHlwZSkpKTsKICAgIENsYXNzRW50aXR5IGNscyA9IGNvbnN0cnVjdG9yLmVuY2xvc2luZ0NsYXNzOwoKICAgIGlmIChfcnRpTmVlZC5jbGFzc05lZWRzVHlwZUFyZ3VtZW50cyhjbHMpKSB7CiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiB0eXBlSW5wdXRzID0gPEhJbnN0cnVjdGlvbj5bXTsKICAgICAgdHlwZS50eXBlQXJndW1lbnRzLmZvckVhY2goKERhcnRUeXBlIGFyZ3VtZW50KSB7CiAgICAgICAgdHlwZUlucHV0cwogICAgICAgICAgICAuYWRkKF90eXBlQnVpbGRlci5hbmFseXplVHlwZUFyZ3VtZW50KGFyZ3VtZW50LCBzb3VyY2VFbGVtZW50KSk7CiAgICAgIH0pOwoKICAgICAgLy8gV2UgbGlmdCB0aGlzIGNvbW1vbiBjYWxsIHBhdHRlcm4gaW50byBhIGhlbHBlciBmdW5jdGlvbiB0byBzYXZlIHNwYWNlCiAgICAgIC8vIGluIHRoZSBvdXRwdXQuCiAgICAgIGlmICh0eXBlSW5wdXRzLmV2ZXJ5KChISW5zdHJ1Y3Rpb24gaW5wdXQpID0+CiAgICAgICAgICBpbnB1dC5pc051bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpKSB7CiAgICAgICAgaWYgKGNvbnN0cnVjdG9yQXJncy5pc0VtcHR5KSB7CiAgICAgICAgICBjb25zdHJ1Y3RvciA9IF9jb21tb25FbGVtZW50cy5tYXBMaXRlcmFsVW50eXBlZEVtcHR5TWFrZXI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0cnVjdG9yID0gX2NvbW1vbkVsZW1lbnRzLm1hcExpdGVyYWxVbnR5cGVkTWFrZXI7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlucHV0cy5hZGRBbGwodHlwZUlucHV0cyk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBJZiBydW50aW1lIHR5cGUgaW5mb3JtYXRpb24gaXMgbmVlZGVkIGFuZCB0aGUgbWFwIGxpdGVyYWwgaGFzIG5vIHR5cGUKICAgIC8vIHBhcmFtZXRlcnMsICdjb25zdHJ1Y3RvcicgaXMgYSBzdGF0aWMgZnVuY3Rpb24gdGhhdCBmb3J3YXJkcyB0aGUgY2FsbCB0bwogICAgLy8gdGhlIGZhY3RvcnkgY29uc3RydWN0b3Igd2l0aG91dCB0eXBlIHBhcmFtZXRlcnMuCiAgICBhc3NlcnQoY29uc3RydWN0b3IuaXNGdW5jdGlvbiB8fAogICAgICAgIChjb25zdHJ1Y3RvciBpcyBDb25zdHJ1Y3RvckVudGl0eSAmJiBjb25zdHJ1Y3Rvci5pc0ZhY3RvcnlDb25zdHJ1Y3RvcikpOwoKICAgIC8vIFRoZSBpbnN0cnVjdGlvbiB0eXBlIHdpbGwgYWx3YXlzIGJlIGEgc3VidHlwZSBvZiB0aGUgbWFwTGl0ZXJhbENsYXNzLCBidXQKICAgIC8vIHR5cGUgaW5mZXJlbmNlIG1pZ2h0IGRpc2NvdmVyIGEgbW9yZSBzcGVjaWZpYyB0eXBlLCBvciBmaW5kIG5vdGhpbmcgKGluCiAgICAvLyBkYXJ0MmpzIHVuaXQgdGVzdHMpLgoKICAgIEFic3RyYWN0VmFsdWUgbWFwVHlwZSA9IF9hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgLmNyZWF0ZU5vbk51bGxTdWJ0eXBlKF9jb21tb25FbGVtZW50cy5tYXBMaXRlcmFsQ2xhc3MpOwogICAgQWJzdHJhY3RWYWx1ZSByZXR1cm5UeXBlTWFzayA9CiAgICAgICAgX3R5cGVJbmZlcmVuY2VNYXAuZ2V0UmV0dXJuVHlwZU9mKGNvbnN0cnVjdG9yKTsKICAgIEFic3RyYWN0VmFsdWUgaW5zdHJ1Y3Rpb25UeXBlID0KICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5pbnRlcnNlY3Rpb24obWFwVHlwZSwgcmV0dXJuVHlwZU1hc2spOwoKICAgIF9hZGRJbXBsaWNpdEluc3RhbnRpYXRpb24odHlwZSk7CiAgICBfcHVzaFN0YXRpY0ludm9jYXRpb24oCiAgICAgICAgY29uc3RydWN0b3IsIGlucHV0cywgaW5zdHJ1Y3Rpb25UeXBlLCBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgc291cmNlSW5mb3JtYXRpb246IF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGROZXcobm9kZSkpOwogICAgX3JlbW92ZUltcGxpY2l0SW5zdGFudGlhdGlvbih0eXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRNYXBFbnRyeShpci5NYXBFbnRyeSBub2RlKSB7CiAgICBmYWlsZWRBdChDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICdpci5NYXBFbnRyeSBzaG91bGQgYmUgaGFuZGxlZCBpbiB2aXNpdE1hcExpdGVyYWwnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlTGl0ZXJhbChpci5UeXBlTGl0ZXJhbCBub2RlKSB7CiAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9CiAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEdldChub2RlKTsKICAgIGlyLkRhcnRUeXBlIHR5cGUgPSBub2RlLnR5cGU7CiAgICBpZiAodHlwZSBpcyBpci5JbnRlcmZhY2VUeXBlIHx8CiAgICAgICAgdHlwZSBpcyBpci5EeW5hbWljVHlwZSB8fAogICAgICAgIHR5cGUgaXMgaXIuVHlwZWRlZlR5cGUgfHwKICAgICAgICB0eXBlIGlzIGlyLkZ1bmN0aW9uVHlwZSkgewogICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gX2VsZW1lbnRNYXAuZ2V0Q29uc3RhbnRWYWx1ZShub2RlKTsKICAgICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50KGNvbnN0YW50LCBjbG9zZWRXb3JsZCwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICByZXR1cm47CiAgICB9CiAgICBhc3NlcnQoCiAgICAgICAgdHlwZSBpcyBpci5UeXBlUGFyYW1ldGVyVHlwZSwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwgIlVuZXhwZWN0ZWQgdHlwZSBsaXRlcmFsICR7bm9kZX0uIikpOwogICAgLy8gRm9yIG90aGVyIHR5cGVzIChlLmcuIFR5cGVQYXJhbWV0ZXJUeXBlLCBmdW5jdGlvbiB0eXBlcyBmcm9tIGV4cGFuZGVkCiAgICAvLyB0eXBlZGVmcyksIGxvb2stdXAgb3IgY29uc3RydWN0IGEgcmVpZmllZCB0eXBlIHJlcHJlc2VudGF0aW9uIGFuZCBjb252ZXJ0CiAgICAvLyB0byBhIFJ1bnRpbWVUeXBlLgoKICAgIERhcnRUeXBlIGRhcnRUeXBlID0gX2VsZW1lbnRNYXAuZ2V0RGFydFR5cGUodHlwZSk7CiAgICBkYXJ0VHlwZSA9IGxvY2Fsc0hhbmRsZXIuc3Vic3RJbkNvbnRleHQoZGFydFR5cGUpOwogICAgSEluc3RydWN0aW9uIHZhbHVlID0gX3R5cGVCdWlsZGVyLmFuYWx5emVUeXBlQXJndW1lbnQoCiAgICAgICAgZGFydFR5cGUsIHNvdXJjZUVsZW1lbnQsCiAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIF9wdXNoU3RhdGljSW52b2NhdGlvbigKICAgICAgICBfY29tbW9uRWxlbWVudHMuY3JlYXRlUnVudGltZVR5cGUsCiAgICAgICAgPEhJbnN0cnVjdGlvbj5bdmFsdWVdLAogICAgICAgIF90eXBlSW5mZXJlbmNlTWFwLmdldFJldHVyblR5cGVPZihfY29tbW9uRWxlbWVudHMuY3JlYXRlUnVudGltZVR5cGUpLAogICAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0YXRpY0dldChpci5TdGF0aWNHZXQgbm9kZSkgewogICAgaXIuTWVtYmVyIHN0YXRpY1RhcmdldCA9IG5vZGUudGFyZ2V0OwogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRHZXQobm9kZSk7CiAgICBpZiAoc3RhdGljVGFyZ2V0IGlzIGlyLlByb2NlZHVyZSAmJgogICAgICAgIHN0YXRpY1RhcmdldC5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuR2V0dGVyKSB7CiAgICAgIEZ1bmN0aW9uRW50aXR5IGdldHRlciA9IF9lbGVtZW50TWFwLmdldE1lbWJlcihzdGF0aWNUYXJnZXQpOwogICAgICAvLyBJbnZva2UgdGhlIGdldHRlcgogICAgICBfcHVzaFN0YXRpY0ludm9jYXRpb24oZ2V0dGVyLCBjb25zdCA8SEluc3RydWN0aW9uPltdLAogICAgICAgICAgX3R5cGVJbmZlcmVuY2VNYXAuZ2V0UmV0dXJuVHlwZU9mKGdldHRlciksIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9IGVsc2UgaWYgKHN0YXRpY1RhcmdldCBpcyBpci5GaWVsZCkgewogICAgICBGaWVsZEVudGl0eSBmaWVsZCA9IF9lbGVtZW50TWFwLmdldEZpZWxkKHN0YXRpY1RhcmdldCk7CiAgICAgIEZpZWxkQW5hbHlzaXNEYXRhIGZpZWxkRGF0YSA9IF9maWVsZEFuYWx5c2lzLmdldEZpZWxkRGF0YShmaWVsZCk7CiAgICAgIGlmIChmaWVsZERhdGEuaXNFYWdlcikgewogICAgICAgIHB1c2gobmV3IEhTdGF0aWMoZmllbGQsIF90eXBlSW5mZXJlbmNlTWFwLmdldEluZmVycmVkVHlwZU9mKGZpZWxkKSwKICAgICAgICAgICAgc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgfSBlbHNlIGlmIChmaWVsZERhdGEuaXNFZmZlY3RpdmVseUNvbnN0YW50KSB7CiAgICAgICAgT3V0cHV0VW5pdCBvdXRwdXRVbml0ID0KICAgICAgICAgICAgY2xvc2VkV29ybGQub3V0cHV0VW5pdERhdGEub3V0cHV0VW5pdEZvck1lbWJlcihmaWVsZCk7CiAgICAgICAgLy8gVE9ETyhzaWdtdW5kKTogdGhpcyBpcyBub3QgZXF1aXZhbGVudCB0byB3aGF0IHRoZSBvbGQgRkUgZG9lczogaWYKICAgICAgICAvLyB0aGVyZSBpcyBubyBwcmVmaXggdGhlIG9sZCBGRSB3b3VsZG4ndCB0cmVhdCB0aGlzIGluIGFueSBzcGVjaWFsCiAgICAgICAgLy8gd2F5LiBBbHNvLCBpZiB0aGUgcHJlZml4IHBvaW50cyB0byBhIGNvbnN0YW50IGluIHRoZSBtYWluIG91dHB1dAogICAgICAgIC8vIHVuaXQsIHRoZSBvbGQgRkUgd291bGQgc3RpbGwgZ2VuZXJhdGUgYSBkZWZlcnJlZCB3cmFwcGVyIGhlcmUuCiAgICAgICAgaWYgKCFjbG9zZWRXb3JsZC5vdXRwdXRVbml0RGF0YQogICAgICAgICAgICAuaGFzT25seU5vbkRlZmVycmVkSW1wb3J0UGF0aHModGFyZ2V0RWxlbWVudCwgZmllbGQpKSB7CiAgICAgICAgICBDb25zdGFudFZhbHVlIGRlZmVycmVkQ29uc3RhbnQgPSBuZXcgRGVmZXJyZWRHbG9iYWxDb25zdGFudFZhbHVlKAogICAgICAgICAgICAgIGZpZWxkRGF0YS5pbml0aWFsVmFsdWUsIG91dHB1dFVuaXQpOwogICAgICAgICAgcmVnaXN0cnkKICAgICAgICAgICAgICAucmVnaXN0ZXJDb25zdGFudFVzZShuZXcgQ29uc3RhbnRVc2UuZGVmZXJyZWQoZGVmZXJyZWRDb25zdGFudCkpOwogICAgICAgICAgc3RhY2suYWRkKGdyYXBoLmFkZERlZmVycmVkQ29uc3RhbnQoCiAgICAgICAgICAgICAgZGVmZXJyZWRDb25zdGFudCwgc291cmNlSW5mb3JtYXRpb24sIGNsb3NlZFdvcmxkKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudChmaWVsZERhdGEuaW5pdGlhbFZhbHVlLCBjbG9zZWRXb3JsZCwKICAgICAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KAogICAgICAgICAgICBmaWVsZERhdGEuaXNMYXp5LCAiVW5leHBlY3RlZCBmaWVsZCBkYXRhIGZvciAkZmllbGQ6ICRmaWVsZERhdGEiKTsKICAgICAgICBwdXNoKG5ldyBITGF6eVN0YXRpYyhmaWVsZCwgX3R5cGVJbmZlcmVuY2VNYXAuZ2V0SW5mZXJyZWRUeXBlT2YoZmllbGQpLAogICAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBUaGlzIGlzIGEgY29uc3RhbnQgdGVhciBvZmYsIHNvIHdlIHNob3VsZCBoYXZlCiAgICAgIC8vIGNyZWF0ZWQgYSBjb25zdGFudCB2YWx1ZSBpbnN0ZWFkLiBSZW1vdmUgdGhpcyBjYXNlIHdoZW4gd2UgdXNlIENGRQogICAgICAvLyBjb25zdGFudHMuCiAgICAgIEZ1bmN0aW9uRW50aXR5IG1lbWJlciA9IF9lbGVtZW50TWFwLmdldE1lbWJlcihzdGF0aWNUYXJnZXQpOwogICAgICBwdXNoKG5ldyBIU3RhdGljKG1lbWJlciwgX3R5cGVJbmZlcmVuY2VNYXAuZ2V0SW5mZXJyZWRUeXBlT2YobWVtYmVyKSwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RhdGljU2V0KGlyLlN0YXRpY1NldCBub2RlKSB7CiAgICBub2RlLnZhbHVlLmFjY2VwdCh0aGlzKTsKICAgIEhJbnN0cnVjdGlvbiB2YWx1ZSA9IHBvcCgpOwoKICAgIGlyLk1lbWJlciBzdGF0aWNUYXJnZXQgPSBub2RlLnRhcmdldDsKICAgIGlmIChzdGF0aWNUYXJnZXQgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICAgIEZ1bmN0aW9uRW50aXR5IHNldHRlciA9IF9lbGVtZW50TWFwLmdldE1lbWJlcihzdGF0aWNUYXJnZXQpOwogICAgICAvLyBJbnZva2UgdGhlIHNldHRlcgogICAgICBfcHVzaFN0YXRpY0ludm9jYXRpb24oc2V0dGVyLCA8SEluc3RydWN0aW9uPlt2YWx1ZV0sCiAgICAgICAgICBfdHlwZUluZmVyZW5jZU1hcC5nZXRSZXR1cm5UeXBlT2Yoc2V0dGVyKSwgY29uc3QgPERhcnRUeXBlPltdLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRTZXQobm9kZSkpOwogICAgICBwb3AoKTsKICAgIH0gZWxzZSB7CiAgICAgIE1lbWJlckVudGl0eSB0YXJnZXQgPSBfZWxlbWVudE1hcC5nZXRNZW1iZXIoc3RhdGljVGFyZ2V0KTsKICAgICAgaWYgKCFfZmllbGRBbmFseXNpcy5nZXRGaWVsZERhdGEodGFyZ2V0KS5pc0VsaWRlZCkgewogICAgICAgIGFkZChuZXcgSFN0YXRpY1N0b3JlKAogICAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgICAgICAgdGFyZ2V0LAogICAgICAgICAgICBfdHlwZUJ1aWxkZXIucG90ZW50aWFsbHlDaGVja09yVHJ1c3RUeXBlT2ZBc3NpZ25tZW50KAogICAgICAgICAgICAgICAgdGFyZ2V0LCB2YWx1ZSwgX2dldERhcnRUeXBlSWZWYWxpZChzdGF0aWNUYXJnZXQuc2V0dGVyVHlwZSkpKSk7CiAgICAgIH0KICAgIH0KICAgIHN0YWNrLmFkZCh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UHJvcGVydHlHZXQoaXIuUHJvcGVydHlHZXQgbm9kZSkgewogICAgbm9kZS5yZWNlaXZlci5hY2NlcHQodGhpcyk7CiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSBwb3AoKTsKCiAgICBfcHVzaER5bmFtaWNJbnZvY2F0aW9uKAogICAgICAgIG5vZGUsCiAgICAgICAgX2dldFN0YXRpY1R5cGUobm9kZS5yZWNlaXZlciksCiAgICAgICAgX3R5cGVJbmZlcmVuY2VNYXAucmVjZWl2ZXJUeXBlT2ZHZXQobm9kZSksCiAgICAgICAgbmV3IFNlbGVjdG9yLmdldHRlcihfZWxlbWVudE1hcC5nZXROYW1lKG5vZGUubmFtZSkpLAogICAgICAgIDxISW5zdHJ1Y3Rpb24+W3JlY2VpdmVyXSwKICAgICAgICBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEdldChub2RlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VmFyaWFibGVHZXQoaXIuVmFyaWFibGVHZXQgbm9kZSkgewogICAgaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSA9IG5vZGUudmFyaWFibGU7CiAgICBISW5zdHJ1Y3Rpb24gbGV0QmluZGluZyA9IF9sZXRCaW5kaW5nc1t2YXJpYWJsZV07CiAgICBpZiAobGV0QmluZGluZyAhPSBudWxsKSB7CiAgICAgIHN0YWNrLmFkZChsZXRCaW5kaW5nKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIExvY2FsIGxvY2FsID0gX2xvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKG5vZGUudmFyaWFibGUpOwogICAgc3RhY2suYWRkKGxvY2Fsc0hhbmRsZXIucmVhZExvY2FsKGxvY2FsLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkR2V0KG5vZGUpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UHJvcGVydHlTZXQoaXIuUHJvcGVydHlTZXQgbm9kZSkgewogICAgbm9kZS5yZWNlaXZlci5hY2NlcHQodGhpcyk7CiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSBwb3AoKTsKICAgIG5vZGUudmFsdWUuYWNjZXB0KHRoaXMpOwogICAgSEluc3RydWN0aW9uIHZhbHVlID0gcG9wKCk7CgogICAgX3B1c2hEeW5hbWljSW52b2NhdGlvbigKICAgICAgICBub2RlLAogICAgICAgIF9nZXRTdGF0aWNUeXBlKG5vZGUucmVjZWl2ZXIpLAogICAgICAgIF90eXBlSW5mZXJlbmNlTWFwLnJlY2VpdmVyVHlwZU9mU2V0KG5vZGUsIF9hYnN0cmFjdFZhbHVlRG9tYWluKSwKICAgICAgICBuZXcgU2VsZWN0b3Iuc2V0dGVyKF9lbGVtZW50TWFwLmdldE5hbWUobm9kZS5uYW1lKSksCiAgICAgICAgPEhJbnN0cnVjdGlvbj5bcmVjZWl2ZXIsIHZhbHVlXSwKICAgICAgICBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEFzc2lnbm1lbnQobm9kZSkpOwoKICAgIHBvcCgpOwogICAgc3RhY2suYWRkKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREaXJlY3RQcm9wZXJ0eUdldChpci5EaXJlY3RQcm9wZXJ0eUdldCBub2RlKSB7CiAgICBub2RlLnJlY2VpdmVyLmFjY2VwdCh0aGlzKTsKICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciA9IHBvcCgpOwoKICAgIC8vIEZha2UgZGlyZWN0IGNhbGwgd2l0aCBhIGR5bmFtaWMgY2FsbC4KICAgIC8vIFRPRE8oc3JhKTogSW1wbGVtZW50IGRpcmVjdCBpbnZvY2F0aW9ucyBwcm9wZXJseS4KICAgIF9wdXNoRHluYW1pY0ludm9jYXRpb24oCiAgICAgICAgbm9kZSwKICAgICAgICBfZ2V0U3RhdGljVHlwZShub2RlLnJlY2VpdmVyKSwKICAgICAgICBfdHlwZUluZmVyZW5jZU1hcC5yZWNlaXZlclR5cGVPZkRpcmVjdEdldChub2RlKSwKICAgICAgICBuZXcgU2VsZWN0b3IuZ2V0dGVyKF9lbGVtZW50TWFwLmdldE1lbWJlcihub2RlLnRhcmdldCkubWVtYmVyTmFtZSksCiAgICAgICAgPEhJbnN0cnVjdGlvbj5bcmVjZWl2ZXJdLAogICAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkR2V0KG5vZGUpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREaXJlY3RQcm9wZXJ0eVNldChpci5EaXJlY3RQcm9wZXJ0eVNldCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5pbXBsZW1lbnRlZEVycm9yKCdpci5EaXJlY3RQcm9wZXJ0eVNldCcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERpcmVjdE1ldGhvZEludm9jYXRpb24oaXIuRGlyZWN0TWV0aG9kSW52b2NhdGlvbiBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5pbXBsZW1lbnRlZEVycm9yKCdpci5EaXJlY3RNZXRob2RJbnZvY2F0aW9uJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3VwZXJQcm9wZXJ0eVNldChpci5TdXBlclByb3BlcnR5U2V0IG5vZGUpIHsKICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0KICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkQXNzaWdubWVudChub2RlKTsKICAgIG5vZGUudmFsdWUuYWNjZXB0KHRoaXMpOwogICAgSEluc3RydWN0aW9uIHZhbHVlID0gcG9wKCk7CgogICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IF9lbGVtZW50TWFwCiAgICAgICAgLmdldFN1cGVyTWVtYmVyKF9jdXJyZW50RnJhbWUubWVtYmVyLCBub2RlLm5hbWUsIHNldHRlcjogdHJ1ZSk7CiAgICBpZiAobWVtYmVyID09IG51bGwpIHsKICAgICAgX2dlbmVyYXRlU3VwZXJOb1N1Y2hNZXRob2Qobm9kZSwgX2VsZW1lbnRNYXAuZ2V0U2VsZWN0b3Iobm9kZSkubmFtZSArICI9IiwKICAgICAgICAgIDxISW5zdHJ1Y3Rpb24+W3ZhbHVlXSwgY29uc3QgPERhcnRUeXBlPltdLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9IGVsc2UgewogICAgICBfYnVpbGRJbnZva2VTdXBlcigKICAgICAgICAgIF9lbGVtZW50TWFwLmdldFNlbGVjdG9yKG5vZGUpLAogICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0Q2xhc3MoX2NvbnRhaW5pbmdDbGFzcyhub2RlKSksCiAgICAgICAgICBtZW1iZXIsCiAgICAgICAgICA8SEluc3RydWN0aW9uPlt2YWx1ZV0sCiAgICAgICAgICBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CiAgICBwb3AoKTsKICAgIHN0YWNrLmFkZCh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VmFyaWFibGVTZXQoaXIuVmFyaWFibGVTZXQgbm9kZSkgewogICAgbm9kZS52YWx1ZS5hY2NlcHQodGhpcyk7CiAgICBISW5zdHJ1Y3Rpb24gdmFsdWUgPSBwb3AoKTsKICAgIF92aXNpdExvY2FsU2V0dGVyKAogICAgICAgIG5vZGUudmFyaWFibGUsIHZhbHVlLCBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkQXNzaWdubWVudChub2RlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbihpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIExvY2FsIGxvY2FsID0gX2xvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKG5vZGUpOwogICAgaWYgKG5vZGUuaW5pdGlhbGl6ZXIgPT0gbnVsbCkgewogICAgICBISW5zdHJ1Y3Rpb24gaW5pdGlhbFZhbHVlID0gZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKTsKICAgICAgbG9jYWxzSGFuZGxlci51cGRhdGVMb2NhbChsb2NhbCwgaW5pdGlhbFZhbHVlKTsKICAgIH0gZWxzZSBpZiAobm9kZS5pc0NvbnN0KSB7CiAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSBfZWxlbWVudE1hcC5nZXRDb25zdGFudFZhbHVlKG5vZGUuaW5pdGlhbGl6ZXIpOwogICAgICBhc3NlcnQoY29uc3RhbnQgIT0gbnVsbCwgZmFpbGVkQXQoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSkpOwogICAgICBISW5zdHJ1Y3Rpb24gaW5pdGlhbFZhbHVlID0gZ3JhcGguYWRkQ29uc3RhbnQoY29uc3RhbnQsIGNsb3NlZFdvcmxkKTsKICAgICAgbG9jYWxzSGFuZGxlci51cGRhdGVMb2NhbChsb2NhbCwgaW5pdGlhbFZhbHVlKTsKICAgIH0gZWxzZSB7CiAgICAgIG5vZGUuaW5pdGlhbGl6ZXIuYWNjZXB0KHRoaXMpOwogICAgICBISW5zdHJ1Y3Rpb24gaW5pdGlhbFZhbHVlID0gcG9wKCk7CgogICAgICBfdmlzaXRMb2NhbFNldHRlcigKICAgICAgICAgIG5vZGUsIGluaXRpYWxWYWx1ZSwgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEFzc2lnbm1lbnQobm9kZSkpOwoKICAgICAgLy8gSWdub3JlIHZhbHVlCiAgICAgIHBvcCgpOwogICAgfQogIH0KCiAgdm9pZCBfdmlzaXRMb2NhbFNldHRlcihpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBISW5zdHJ1Y3Rpb24gdmFsdWUsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBMb2NhbCBsb2NhbCA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZSh2YXJpYWJsZSk7CgogICAgLy8gR2l2ZSB0aGUgdmFsdWUgYSBuYW1lIGlmIGl0IGRvZXNuJ3QgaGF2ZSBvbmUgYWxyZWFkeS4KICAgIGlmICh2YWx1ZS5zb3VyY2VFbGVtZW50ID09IG51bGwpIHsKICAgICAgdmFsdWUuc291cmNlRWxlbWVudCA9IGxvY2FsOwogICAgfQoKICAgIHN0YWNrLmFkZCh2YWx1ZSk7CiAgICBsb2NhbHNIYW5kbGVyLnVwZGF0ZUxvY2FsKAogICAgICAgIGxvY2FsLAogICAgICAgIF90eXBlQnVpbGRlci5wb3RlbnRpYWxseUNoZWNrT3JUcnVzdFR5cGVPZkFzc2lnbm1lbnQoCiAgICAgICAgICAgIF9jdXJyZW50RnJhbWUubWVtYmVyLCB2YWx1ZSwgX2dldERhcnRUeXBlSWZWYWxpZCh2YXJpYWJsZS50eXBlKSksCiAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMZXQoaXIuTGV0IG5vZGUpIHsKICAgIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBub2RlLnZhcmlhYmxlOwogICAgdmFyaWFibGUuaW5pdGlhbGl6ZXIuYWNjZXB0KHRoaXMpOwogICAgSEluc3RydWN0aW9uIGluaXRpYWxpemVkVmFsdWUgPSBwb3AoKTsKICAgIC8vIFRPRE8oc3JhKTogQXBwbHkgaW5mZXJyZWQgdHlwZSBpbmZvcm1hdGlvbi4KICAgIF9sZXRCaW5kaW5nc1t2YXJpYWJsZV0gPSBpbml0aWFsaXplZFZhbHVlOwogICAgbm9kZS5ib2R5LmFjY2VwdCh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCbG9ja0V4cHJlc3Npb24oaXIuQmxvY2tFeHByZXNzaW9uIG5vZGUpIHsKICAgIG5vZGUuYm9keS5hY2NlcHQodGhpcyk7CiAgICBub2RlLnZhbHVlLmFjY2VwdCh0aGlzKTsKICB9CgogIC8vLyBFeHRyYWN0cyB0aGUgbGlzdCBvZiBpbnN0cnVjdGlvbnMgZm9yIHRoZSBwb3NpdGlvbmFsIHN1YnNldCBvZiBhcmd1bWVudHMuCiAgTGlzdDxISW5zdHJ1Y3Rpb24+IF92aXNpdFBvc2l0aW9uYWxBcmd1bWVudHMoaXIuQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IHJlc3VsdCA9IDxISW5zdHJ1Y3Rpb24+W107CiAgICBmb3IgKGlyLkV4cHJlc3Npb24gYXJndW1lbnQgaW4gYXJndW1lbnRzLnBvc2l0aW9uYWwpIHsKICAgICAgYXJndW1lbnQuYWNjZXB0KHRoaXMpOwogICAgICByZXN1bHQuYWRkKHBvcCgpKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gQnVpbGRzIHRoZSBsaXN0IG9mIGluc3RydWN0aW9ucyBmb3IgdGhlIGV4cHJlc3Npb25zIGluIHRoZSBhcmd1bWVudHMgdG8gYQogIC8vLyBkeW5hbWljIHRhcmdldCAobWVtYmVyIGZ1bmN0aW9uKS4gIER5bmFtaWMgdGFyZ2V0cyB1c2Ugc3R1YnMgdG8gYWRkCiAgLy8vIGRlZmF1bHRlZCBhcmd1bWVudHMsIHNvICh1bmxpa2Ugc3RhdGljIHRhcmdldHMpIHdlIGRvIG5vdCBhZGQgdGhlIGRlZmF1bHQKICAvLy8gdmFsdWVzLgogIExpc3Q8SEluc3RydWN0aW9uPiBfdmlzaXRBcmd1bWVudHNGb3JEeW5hbWljVGFyZ2V0KAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgaXIuQXJndW1lbnRzIGFyZ3VtZW50cywgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cywKICAgICAgW1NvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uXSkgewogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IHZhbHVlcyA9IF92aXNpdFBvc2l0aW9uYWxBcmd1bWVudHMoYXJndW1lbnRzKTsKCiAgICBpZiAoYXJndW1lbnRzLm5hbWVkLmlzTm90RW1wdHkpIHsKICAgICAgTWFwPFN0cmluZywgSEluc3RydWN0aW9uPiBuYW1lZFZhbHVlcyA9IDxTdHJpbmcsIEhJbnN0cnVjdGlvbj57fTsKICAgICAgZm9yIChpci5OYW1lZEV4cHJlc3Npb24gYXJndW1lbnQgaW4gYXJndW1lbnRzLm5hbWVkKSB7CiAgICAgICAgYXJndW1lbnQudmFsdWUuYWNjZXB0KHRoaXMpOwogICAgICAgIG5hbWVkVmFsdWVzW2FyZ3VtZW50Lm5hbWVdID0gcG9wKCk7CiAgICAgIH0KICAgICAgZm9yIChTdHJpbmcgbmFtZSBpbiBzZWxlY3Rvci5jYWxsU3RydWN0dXJlLmdldE9yZGVyZWROYW1lZEFyZ3VtZW50cygpKSB7CiAgICAgICAgdmFsdWVzLmFkZChuYW1lZFZhbHVlc1tuYW1lXSk7CiAgICAgIH0KICAgIH0KCiAgICBfYWRkVHlwZUFyZ3VtZW50cyh2YWx1ZXMsIHR5cGVBcmd1bWVudHMsIHNvdXJjZUluZm9ybWF0aW9uKTsKCiAgICByZXR1cm4gdmFsdWVzOwogIH0KCiAgLy8vIEJ1aWxkIHRoZSBhcmd1bWVudCBsaXN0IGZvciBKUy1pbnRlcm9wIGludm9jYXRpb25zLCB3aGljaCBoYXZlIHNsaWdodGx5CiAgLy8vIGRpZmZlcmVudCBzZW1hbnRpY3MgdGhhbiBkYXJ0IGJlY2F1c2Ugb2YgSlMncyBudWxsIHZzIHVuZGVmaW5lZCBhbmQgbGFjawogIC8vLyBvZiBuYW1lZCBhcmd1bWVudHMuIFJldHVybiBudWxsIGlmIHRoZSBhcmd1bWVudHMgY291bGQgbm90IGJlIGNvcnJlY3RseQogIC8vLyBwYXJzZWQgYmVjYXVzZSB0aGUgdXNlciBwcm92aWRlZCBjb2RlIHdpdGggbmFtZWQgcGFyYW1ldGVycyBpbiBhIEpTIChub24KICAvLy8gZmFjdG9yeSkgZnVuY3Rpb24uCiAgTGlzdDxISW5zdHJ1Y3Rpb24+IF92aXNpdEFyZ3VtZW50c0Zvck5hdGl2ZVN0YXRpY1RhcmdldCgKICAgICAgaXIuRnVuY3Rpb25Ob2RlIHRhcmdldCwgaXIuQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgLy8gVmlzaXQgYXJndW1lbnRzIGluIHNvdXJjZSBvcmRlciwgdGhlbiByZS1vcmRlciBhbmQgZmlsbCBpbiBkZWZhdWx0cy4KICAgIHZhciB2YWx1ZXMgPSBfdmlzaXRQb3NpdGlvbmFsQXJndW1lbnRzKGFyZ3VtZW50cyk7CgogICAgaWYgKHRhcmdldC5uYW1lZFBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgewogICAgICAvLyBPbmx5IGFub255bW91cyBmYWN0b3J5IGNvbnN0cnVjdG9ycyBpbnZvbHZpbmcgSlMgaW50ZXJvcCBhcmUgYWxsb3dlZCB0bwogICAgICAvLyBoYXZlIG5hbWVkIHBhcmFtZXRlcnMuIE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3IuCiAgICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyKHRhcmdldC5wYXJlbnQpOwogICAgICBpZiAoZnVuY3Rpb24gaXMgQ29uc3RydWN0b3JFbnRpdHkgJiYgZnVuY3Rpb24uaXNGYWN0b3J5Q29uc3RydWN0b3IpIHsKICAgICAgICAvLyBUT0RPKHNyYSk6IEhhdmUgYSAiQ29tcGlsZWRBcmd1bWVudHMiIHN0cnVjdHVyZSB0byBqdXN0IHVwZGF0ZSB3aXRoCiAgICAgICAgLy8gd2hhdCB2YWx1ZXMgd2UgaGF2ZSByYXRoZXIgdGhhbiBjcmVhdGluZyBhIG1hcCBhbmQgZGUtcG9wdWxhdGluZyBpdC4KICAgICAgICB2YXIgbmFtZWRWYWx1ZXMgPSA8U3RyaW5nLCBISW5zdHJ1Y3Rpb24+e307CiAgICAgICAgZm9yIChpci5OYW1lZEV4cHJlc3Npb24gYXJndW1lbnQgaW4gYXJndW1lbnRzLm5hbWVkKSB7CiAgICAgICAgICBhcmd1bWVudC52YWx1ZS5hY2NlcHQodGhpcyk7CiAgICAgICAgICBuYW1lZFZhbHVlc1thcmd1bWVudC5uYW1lXSA9IHBvcCgpOwogICAgICAgIH0KCiAgICAgICAgLy8gVmlzaXQgbmFtZWQgYXJndW1lbnRzIGluIHBhcmFtZXRlci1wb3NpdGlvbiBvcmRlciwgc2VsZWN0aW5nIHByb3ZpZGVkCiAgICAgICAgLy8gb3IgZGVmYXVsdCB2YWx1ZS4KICAgICAgICB2YXIgbmFtZWRQYXJhbWV0ZXJzID0gdGFyZ2V0Lm5hbWVkUGFyYW1ldGVycy50b0xpc3QoKTsKICAgICAgICBuYW1lZFBhcmFtZXRlcnMuc29ydChuYXRpdmVPcmRlcmluZyk7CiAgICAgICAgZm9yIChpci5WYXJpYWJsZURlY2xhcmF0aW9uIHBhcmFtZXRlciBpbiBuYW1lZFBhcmFtZXRlcnMpIHsKICAgICAgICAgIEhJbnN0cnVjdGlvbiB2YWx1ZSA9IG5hbWVkVmFsdWVzW3BhcmFtZXRlci5uYW1lXTsKICAgICAgICAgIHZhbHVlcy5hZGQodmFsdWUpOwogICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgICAgICAgbmFtZWRWYWx1ZXMucmVtb3ZlKHBhcmFtZXRlci5uYW1lKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYXNzZXJ0KG5hbWVkVmFsdWVzLmlzRW1wdHkpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRocm93IGFuIGVycm9yIGJlY2F1c2UgSlMgY2Fubm90IGhhbmRsZSBuYW1lZCBwYXJhbWV0ZXJzLgogICAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U3Bhbm5hYmxlKHRhcmdldEVsZW1lbnQsIHRhcmdldCksCiAgICAgICAgICAgIE1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfTUVUSE9EX1dJVEhfTkFNRURfQVJHVU1FTlRTLAogICAgICAgICAgICB7J21ldGhvZCc6IGZ1bmN0aW9uLm5hbWV9KTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHZhbHVlczsKICB9CgogIC8vLyBGaWxscyBbdHlwZUFyZ3VtZW50c10gd2l0aCB0aGUgdHlwZSBhcmd1bWVudHMgbmVlZGVkIGZvciBbc2VsZWN0b3JdIGFuZAogIC8vLyByZXR1cm5zIHRoZSBzZWxlY3RvciBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXNzZWQgdHlwZSBhcmd1bWVudHMuCiAgU2VsZWN0b3IgX2ZpbGxEeW5hbWljVHlwZUFyZ3VtZW50cygKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIGlyLkFyZ3VtZW50cyBhcmd1bWVudHMsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIGlmIChzZWxlY3Rvci50eXBlQXJndW1lbnRDb3VudCA+IDApIHsKICAgICAgaWYgKF9ydGlOZWVkLnNlbGVjdG9yTmVlZHNUeXBlQXJndW1lbnRzKHNlbGVjdG9yKSkgewogICAgICAgIHR5cGVBcmd1bWVudHMuYWRkQWxsKGFyZ3VtZW50cy50eXBlcy5tYXAoX2VsZW1lbnRNYXAuZ2V0RGFydFR5cGUpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gc2VsZWN0b3IudG9Ob25HZW5lcmljKCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBzZWxlY3RvcjsKICB9CgogIExpc3Q8RGFydFR5cGU+IF9nZXRDb25zdHJ1Y3RvclR5cGVBcmd1bWVudHMoCiAgICAgIENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yLCBpci5Bcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBQYXNzIHR5cGUgYXJndW1lbnRzIHRvIGNvbnN0cnVjdG9ycyBsaWtlIGNhbGxpbmcKICAgIC8vIGEgZ2VuZXJpYyBtZXRob2QuCiAgICByZXR1cm4gY29uc3QgPERhcnRUeXBlPltdOwogIH0KCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgd2hlbiB0eXBlIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvCiAgLy8gY29uc3RydWN0b3JzIGxpa2UgY2FsbGluZyBhIGdlbmVyaWMgbWV0aG9kLgogIExpc3Q8RGFydFR5cGU+IF9nZXRDbGFzc1R5cGVBcmd1bWVudHMoCiAgICAgIENsYXNzRW50aXR5IGNscywgaXIuQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgaWYgKF9ydGlOZWVkLmNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKGNscykpIHsKICAgICAgcmV0dXJuIGFyZ3VtZW50cy50eXBlcy5tYXAoX2VsZW1lbnRNYXAuZ2V0RGFydFR5cGUpLnRvTGlzdCgpOwogICAgfQogICAgcmV0dXJuIGNvbnN0IDxEYXJ0VHlwZT5bXTsKICB9CgogIExpc3Q8RGFydFR5cGU+IF9nZXRTdGF0aWNUeXBlQXJndW1lbnRzKAogICAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwgaXIuQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgaWYgKF9ydGlOZWVkLm1ldGhvZE5lZWRzVHlwZUFyZ3VtZW50cyhmdW5jdGlvbikpIHsKICAgICAgcmV0dXJuIGFyZ3VtZW50cy50eXBlcy5tYXAoX2VsZW1lbnRNYXAuZ2V0RGFydFR5cGUpLnRvTGlzdCgpOwogICAgfQogICAgcmV0dXJuIGNvbnN0IDxEYXJ0VHlwZT5bXTsKICB9CgogIC8vLyBCdWlsZCBhcmd1bWVudCBsaXN0IGluIGNhbm9uaWNhbCBvcmRlciBmb3IgYSBzdGF0aWMgW3RhcmdldF0sIGluY2x1ZGluZwogIC8vLyBmaWxsaW5nIGluIHRoZSBkZWZhdWx0IGFyZ3VtZW50IHZhbHVlLgogIExpc3Q8SEluc3RydWN0aW9uPiBfdmlzaXRBcmd1bWVudHNGb3JTdGF0aWNUYXJnZXQoCiAgICAgIGlyLkZ1bmN0aW9uTm9kZSB0YXJnZXQsCiAgICAgIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgIGlyLkFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICAvLyBWaXNpdCBhcmd1bWVudHMgaW4gc291cmNlIG9yZGVyLCB0aGVuIHJlLW9yZGVyIGFuZCBmaWxsIGluIGRlZmF1bHRzLgogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IHZhbHVlcyA9IF92aXNpdFBvc2l0aW9uYWxBcmd1bWVudHMoYXJndW1lbnRzKTsKCiAgICB3aGlsZSAodmFsdWVzLmxlbmd0aCA8IHBhcmFtZXRlclN0cnVjdHVyZS5wb3NpdGlvbmFsUGFyYW1ldGVycykgewogICAgICBpci5WYXJpYWJsZURlY2xhcmF0aW9uIHBhcmFtZXRlciA9CiAgICAgICAgICB0YXJnZXQucG9zaXRpb25hbFBhcmFtZXRlcnNbdmFsdWVzLmxlbmd0aF07CiAgICAgIHZhbHVlcy5hZGQoX2RlZmF1bHRWYWx1ZUZvclBhcmFtZXRlcihwYXJhbWV0ZXIpKTsKICAgIH0KCiAgICBpZiAocGFyYW1ldGVyU3RydWN0dXJlLm5hbWVkUGFyYW1ldGVycy5pc05vdEVtcHR5KSB7CiAgICAgIE1hcDxTdHJpbmcsIEhJbnN0cnVjdGlvbj4gbmFtZWRWYWx1ZXMgPSB7fTsKICAgICAgZm9yIChpci5OYW1lZEV4cHJlc3Npb24gYXJndW1lbnQgaW4gYXJndW1lbnRzLm5hbWVkKSB7CiAgICAgICAgYXJndW1lbnQudmFsdWUuYWNjZXB0KHRoaXMpOwogICAgICAgIG5hbWVkVmFsdWVzW2FyZ3VtZW50Lm5hbWVdID0gcG9wKCk7CiAgICAgIH0KCiAgICAgIC8vIFZpc2l0IG5hbWVkIGFyZ3VtZW50cyBpbiBwYXJhbWV0ZXItcG9zaXRpb24gb3JkZXIsIHNlbGVjdGluZyBwcm92aWRlZAogICAgICAvLyBvciBkZWZhdWx0IHZhbHVlLgogICAgICAvLyBUT0RPKHNyYSk6IEVuc3VyZSB0aGUgc3RvcmVkIG9yZGVyIGlzIGNhbm9uaWNhbCBzbyB3ZSBkb24ndCBoYXZlIHRvCiAgICAgIC8vIHNvcnQuIFRoZSBvbGQgYnVpbGRlciB1c2VzIENhbGxTdHJ1Y3R1cmUubWFrZUFyZ3VtZW50TGlzdCB3aGljaCBkZXBlbmRzCiAgICAgIC8vIG9uIHRoZSBvbGQgZWxlbWVudCBtb2RlbC4KICAgICAgTGlzdDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBuYW1lZFBhcmFtZXRlcnMgPSB0YXJnZXQubmFtZWRQYXJhbWV0ZXJzCiAgICAgICAgICAvLyBGaWx0ZXIgZWxpZGVkIHBhcmFtZXRlcnMuCiAgICAgICAgICAud2hlcmUoKHApID0+IHBhcmFtZXRlclN0cnVjdHVyZS5uYW1lZFBhcmFtZXRlcnMuY29udGFpbnMocC5uYW1lKSkKICAgICAgICAgIC50b0xpc3QoKQogICAgICAgICAgICAuLnNvcnQobmFtZWRPcmRlcmluZyk7CiAgICAgIGZvciAoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBwYXJhbWV0ZXIgaW4gbmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgICAgSEluc3RydWN0aW9uIHZhbHVlID0gbmFtZWRWYWx1ZXNbcGFyYW1ldGVyLm5hbWVdOwogICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7CiAgICAgICAgICB2YWx1ZXMuYWRkKF9kZWZhdWx0VmFsdWVGb3JQYXJhbWV0ZXIocGFyYW1ldGVyKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZhbHVlcy5hZGQodmFsdWUpOwogICAgICAgICAgbmFtZWRWYWx1ZXMucmVtb3ZlKHBhcmFtZXRlci5uYW1lKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXNzZXJ0KG5hbWVkVmFsdWVzLmlzRW1wdHkpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KGFyZ3VtZW50cy5uYW1lZC5pc0VtcHR5KTsKICAgIH0KCiAgICBfYWRkVHlwZUFyZ3VtZW50cyh2YWx1ZXMsIHR5cGVBcmd1bWVudHMsIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIHJldHVybiB2YWx1ZXM7CiAgfQoKICB2b2lkIF9hZGRUeXBlQXJndW1lbnRzKExpc3Q8SEluc3RydWN0aW9uPiB2YWx1ZXMsCiAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBpZiAodHlwZUFyZ3VtZW50cy5pc0VtcHR5KSByZXR1cm47CiAgICBmb3IgKERhcnRUeXBlIHR5cGUgaW4gdHlwZUFyZ3VtZW50cykgewogICAgICB2YWx1ZXMuYWRkKF90eXBlQnVpbGRlci5hbmFseXplVHlwZUFyZ3VtZW50KHR5cGUsIHNvdXJjZUVsZW1lbnQsCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICB9CgogIEhJbnN0cnVjdGlvbiBfZGVmYXVsdFZhbHVlRm9yUGFyYW1ldGVyKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyKSB7CiAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50ID0KICAgICAgICBfZWxlbWVudE1hcC5nZXRDb25zdGFudFZhbHVlKHBhcmFtZXRlci5pbml0aWFsaXplciwgaW1wbGljaXROdWxsOiB0cnVlKTsKICAgIGFzc2VydChjb25zdGFudCAhPSBudWxsLCBmYWlsZWRBdChDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFKSk7CiAgICByZXR1cm4gZ3JhcGguYWRkQ29uc3RhbnQoY29uc3RhbnQsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdGF0aWNJbnZvY2F0aW9uKGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSkgewogICAgaXIuUHJvY2VkdXJlIHRhcmdldCA9IG5vZGUudGFyZ2V0OwogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRDYWxsKG5vZGUsIG5vZGUpOwogICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24gPSBfZWxlbWVudE1hcC5nZXRNZW1iZXIodGFyZ2V0KTsKICAgIGlmIChfY29tbW9uRWxlbWVudHMuaXNGb3JlaWduSGVscGVyKGZ1bmN0aW9uKSkgewogICAgICBfaGFuZGxlSW52b2tlU3RhdGljRm9yZWlnbihub2RlLCBmdW5jdGlvbik7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoX2NvbW1vbkVsZW1lbnRzLmlzRXh0cmFjdFR5cGVBcmd1bWVudHMoZnVuY3Rpb24pICYmCiAgICAgICAgX2hhbmRsZUV4dHJhY3RUeXBlQXJndW1lbnRzKG5vZGUsIHNvdXJjZUluZm9ybWF0aW9uKSkgewogICAgICByZXR1cm47CiAgICB9CgogICAgQWJzdHJhY3RWYWx1ZSB0eXBlTWFzayA9IF90eXBlSW5mZXJlbmNlTWFwLmdldFJldHVyblR5cGVPZihmdW5jdGlvbik7CgogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9CiAgICAgICAgX2dldFN0YXRpY1R5cGVBcmd1bWVudHMoZnVuY3Rpb24sIG5vZGUuYXJndW1lbnRzKTsKICAgIExpc3Q8SEluc3RydWN0aW9uPiBhcmd1bWVudHMgPSBjbG9zZWRXb3JsZC5uYXRpdmVEYXRhCiAgICAgICAgICAgIC5pc0pzSW50ZXJvcE1lbWJlcihmdW5jdGlvbikKICAgICAgICA/IF92aXNpdEFyZ3VtZW50c0Zvck5hdGl2ZVN0YXRpY1RhcmdldCh0YXJnZXQuZnVuY3Rpb24sIG5vZGUuYXJndW1lbnRzKQogICAgICAgIDogX3Zpc2l0QXJndW1lbnRzRm9yU3RhdGljVGFyZ2V0KAogICAgICAgICAgICB0YXJnZXQuZnVuY3Rpb24sCiAgICAgICAgICAgIGZ1bmN0aW9uLnBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAgICAgICAgbm9kZS5hcmd1bWVudHMsCiAgICAgICAgICAgIHR5cGVBcmd1bWVudHMsCiAgICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uKTsKCiAgICAvLyBFcnJvciBpbiB0aGUgYXJndW1lbnRzIHByb3ZpZGVkLiBEbyBub3QgcHJvY2VzcyBmdXJ0aGVyLgogICAgaWYgKGFyZ3VtZW50cyA9PSBudWxsKSB7CiAgICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpKTsgLy8gUmVzdWx0IGV4cGVjdGVkIG9uIHN0YWNrCiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoZnVuY3Rpb24gaXMgQ29uc3RydWN0b3JFbnRpdHkgJiYgZnVuY3Rpb24uaXNGYWN0b3J5Q29uc3RydWN0b3IpIHsKICAgICAgX2hhbmRsZUludm9rZUZhY3RvcnlDb25zdHJ1Y3RvcigKICAgICAgICAgIG5vZGUsIGZ1bmN0aW9uLCB0eXBlTWFzaywgYXJndW1lbnRzLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyBTdGF0aWMgbWV0aG9kcyBjdXJyZW50bHkgaWdub3JlIHRoZSB0eXBlIHBhcmFtZXRlcnMuCiAgICBfcHVzaFN0YXRpY0ludm9jYXRpb24oZnVuY3Rpb24sIGFyZ3VtZW50cywgdHlwZU1hc2ssIHR5cGVBcmd1bWVudHMsCiAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIHZvaWQgX2hhbmRsZUludm9rZUZhY3RvcnlDb25zdHJ1Y3RvcigKICAgICAgaXIuU3RhdGljSW52b2NhdGlvbiBpbnZvY2F0aW9uLAogICAgICBDb25zdHJ1Y3RvckVudGl0eSBmdW5jdGlvbiwKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlTWFzaywKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGFyZ3VtZW50cywKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIGlmIChmdW5jdGlvbi5pc0V4dGVybmFsICYmIGZ1bmN0aW9uLmlzRnJvbUVudmlyb25tZW50Q29uc3RydWN0b3IpIHsKICAgICAgaWYgKGludm9jYXRpb24uaXNDb25zdCkgewogICAgICAgIC8vIEp1c3QgbGlrZSBhbGwgY29uc3QgY29uc3RydWN0b3JzIChzZWUgdmlzaXRDb25zdHJ1Y3Rvckludm9jYXRpb24pLgogICAgICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudCgKICAgICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0Q29uc3RhbnRWYWx1ZShpbnZvY2F0aW9uKSwgY2xvc2VkV29ybGQsCiAgICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICB9IGVsc2UgewogICAgICAgIF9nZW5lcmF0ZVVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAgICcke2Z1bmN0aW9uLmVuY2xvc2luZ0NsYXNzLm5hbWV9LiR7ZnVuY3Rpb24ubmFtZX0gJwogICAgICAgICAgICAnY2FuIG9ubHkgYmUgdXNlZCBhcyBhIGNvbnN0IGNvbnN0cnVjdG9yJywKICAgICAgICAgICAgc291cmNlSW5mb3JtYXRpb24pOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBib29sIGlzRml4ZWRMaXN0ID0gZmFsc2U7IC8vIEFueSBmaXhlZCBsaXN0LCBlLmcuIG5ldyBMaXN0KDEwKSwgIFVJbnQ4TGlzdC4KCiAgICAvLyBSZWNvZ25pemUgYG5ldyBMaXN0KClgIGFuZCBgbmV3IExpc3QobilgLgogICAgYm9vbCBpc0ZpeGVkTGlzdENvbnN0cnVjdG9yQ2FsbCA9IGZhbHNlOwogICAgYm9vbCBpc0dyb3dhYmxlTGlzdENvbnN0cnVjdG9yQ2FsbCA9IGZhbHNlOwogICAgaWYgKF9jb21tb25FbGVtZW50cy5pc1VubmFtZWRMaXN0Q29uc3RydWN0b3IoZnVuY3Rpb24pICYmCiAgICAgICAgaW52b2NhdGlvbi5hcmd1bWVudHMubmFtZWQuaXNFbXB0eSkgewogICAgICBpbnQgYXJndW1lbnRDb3VudCA9IGludm9jYXRpb24uYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoOwogICAgICBpc0ZpeGVkTGlzdENvbnN0cnVjdG9yQ2FsbCA9IGFyZ3VtZW50Q291bnQgPT0gMTsKICAgICAgaXNHcm93YWJsZUxpc3RDb25zdHJ1Y3RvckNhbGwgPSBhcmd1bWVudENvdW50ID09IDA7CiAgICAgIGlzRml4ZWRMaXN0ID0gaXNGaXhlZExpc3RDb25zdHJ1Y3RvckNhbGw7CiAgICB9CgogICAgSW50ZXJmYWNlVHlwZSBpbnN0YW5jZVR5cGUgPSBfZWxlbWVudE1hcC5jcmVhdGVJbnRlcmZhY2VUeXBlKAogICAgICAgIGludm9jYXRpb24udGFyZ2V0LmVuY2xvc2luZ0NsYXNzLCBpbnZvY2F0aW9uLmFyZ3VtZW50cy50eXBlcyk7CgogICAgQWJzdHJhY3RWYWx1ZSByZXN1bHRUeXBlID0gdHlwZU1hc2s7CgogICAgYm9vbCBpc0pTQXJyYXlUeXBlZENvbnN0cnVjdG9yID0KICAgICAgICBmdW5jdGlvbiA9PSBfY29tbW9uRWxlbWVudHMuanNBcnJheVR5cGVkQ29uc3RydWN0b3I7CgogICAgX2luZmVycmVkVHlwZU9mTmV3TGlzdChpci5TdGF0aWNJbnZvY2F0aW9uIG5vZGUpIHsKICAgICAgcmV0dXJuIGdsb2JhbEluZmVyZW5jZVJlc3VsdHMudHlwZU9mTmV3TGlzdChub2RlKSA/PwogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGU7CiAgICB9CgogICAgaWYgKGlzRml4ZWRMaXN0Q29uc3RydWN0b3JDYWxsKSB7CiAgICAgIGFzc2VydCgKICAgICAgICAgIC8vIEFyZ3VtZW50cyBtYXkgaW5jbHVkZSB0aGUgdHlwZS4KICAgICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPT0gMSB8fCBhcmd1bWVudHMubGVuZ3RoID09IDIsCiAgICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgICBmdW5jdGlvbiwKICAgICAgICAgICAgICAiVW5leHBlY3RlZCBhcmd1bWVudHMuICIKICAgICAgICAgICAgICAiRXhwZWN0ZWQgMS0yIGFyZ3VtZW50LCBhY3R1YWw6ICRhcmd1bWVudHMuIikpOwogICAgICBISW5zdHJ1Y3Rpb24gbGVuZ3RoSW5wdXQgPSBhcmd1bWVudHMuZmlyc3Q7CiAgICAgIGlmIChsZW5ndGhJbnB1dC5pc051bWJlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNQb3RlbnRpYWxseUZhbHNlKSB7CiAgICAgICAgSFByaW1pdGl2ZUNoZWNrIGNvbnZlcnNpb24gPSBuZXcgSFByaW1pdGl2ZUNoZWNrKAogICAgICAgICAgICBfY29tbW9uRWxlbWVudHMubnVtVHlwZSwKICAgICAgICAgICAgSFByaW1pdGl2ZUNoZWNrLkFSR1VNRU5UX1RZUEVfQ0hFQ0ssCiAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLm51bVR5cGUsCiAgICAgICAgICAgIGxlbmd0aElucHV0LAogICAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgICAgYWRkKGNvbnZlcnNpb24pOwogICAgICAgIGxlbmd0aElucHV0ID0gY29udmVyc2lvbjsKICAgICAgfQogICAgICBqcy5UZW1wbGF0ZSBjb2RlID0ganMuanMucGFyc2VGb3JlaWduSlMoJ25ldyBBcnJheSgjKScpOwogICAgICB2YXIgYmVoYXZpb3IgPSBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKCiAgICAgIHZhciBleHBlY3RlZFR5cGUgPQogICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0RGFydFR5cGUoaW52b2NhdGlvbi5nZXRTdGF0aWNUeXBlKG51bGwpKTsKICAgICAgYmVoYXZpb3IudHlwZXNJbnN0YW50aWF0ZWQuYWRkKGV4cGVjdGVkVHlwZSk7CiAgICAgIGJlaGF2aW9yLnR5cGVzUmV0dXJuZWQuYWRkKGV4cGVjdGVkVHlwZSk7CgogICAgICAvLyBUaGUgYWxsb2NhdGlvbiBjYW4gdGhyb3cgb25seSBpZiB0aGUgZ2l2ZW4gbGVuZ3RoIGlzIGEgZG91YmxlIG9yCiAgICAgIC8vIG91dHNpZGUgdGhlIHVuc2lnbmVkIDMyIGJpdCByYW5nZS4KICAgICAgLy8gVE9ETyhzcmEpOiBBcnJheSBhbGxvY2F0aW9uIHNob3VsZCBiZSBhbiBpbnN0cnVjdGlvbiBzbyB0aGF0IGNhblRocm93CiAgICAgIC8vIGNhbiBkZXBlbmQgb24gYSBsZW5ndGggdHlwZSBkaXNjb3ZlcmVkIGluIG9wdGltaXphdGlvbi4KICAgICAgYm9vbCBjYW5UaHJvdyA9IHRydWU7CiAgICAgIGlmIChsZW5ndGhJbnB1dC5pc1VJbnQzMihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIGNhblRocm93ID0gZmFsc2U7CiAgICAgIH0KCiAgICAgIHZhciBpbmZlcnJlZFR5cGUgPSBfaW5mZXJyZWRUeXBlT2ZOZXdMaXN0KGludm9jYXRpb24pOwogICAgICByZXN1bHRUeXBlID0KICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmNvbnRhaW5zQWxsKGluZmVycmVkVHlwZSkuaXNQb3RlbnRpYWxseVRydWUKICAgICAgICAgICAgICA/IF9hYnN0cmFjdFZhbHVlRG9tYWluLmZpeGVkTGlzdFR5cGUKICAgICAgICAgICAgICA6IGluZmVycmVkVHlwZTsKICAgICAgSEZvcmVpZ25Db2RlIGZvcmVpZ24gPSBuZXcgSEZvcmVpZ25Db2RlKAogICAgICAgICAgY29kZSwgcmVzdWx0VHlwZSwgPEhJbnN0cnVjdGlvbj5bbGVuZ3RoSW5wdXRdLAogICAgICAgICAgbmF0aXZlQmVoYXZpb3I6IGJlaGF2aW9yLAogICAgICAgICAgdGhyb3dCZWhhdmlvcjoKICAgICAgICAgICAgICBjYW5UaHJvdyA/IE5hdGl2ZVRocm93QmVoYXZpb3IuTUFZIDogTmF0aXZlVGhyb3dCZWhhdmlvci5ORVZFUikKICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgICAgIHB1c2goZm9yZWlnbik7CiAgICAgIC8vIFRPRE8ocmVkZW1wdGlvbik6IEdsb2JhbCB0eXBlIGFuYWx5c2lzIHRyYWNpbmcgbWF5IGhhdmUgZGV0ZXJtaW5lZCB0aGF0CiAgICAgIC8vIHRoZSBmaXhlZC1sZW5ndGggcHJvcGVydHkgaXMgbmV2ZXIgY2hlY2tlZC4gSWYgc28sIHdlIGNhbiBhdm9pZCBtYXJraW5nCiAgICAgIC8vIHRoZSBhcnJheS4KICAgICAgewogICAgICAgIGpzLlRlbXBsYXRlIGNvZGUgPSBqcy5qcy5wYXJzZUZvcmVpZ25KUyhyJyMuZml4ZWQkbGVuZ3RoID0gQXJyYXknKTsKICAgICAgICAvLyBXZSBzZXQgdGhlIGluc3RydWN0aW9uIGFzIFtjYW5UaHJvd10gdG8gYXZvaWQgaXQgYmVpbmcgZGVhZCBjb2RlLgogICAgICAgIC8vIFdlIG5lZWQgYSBmaW5lciBncmFpbmVkIHNpZGUgZWZmZWN0LgogICAgICAgIGFkZChuZXcgSEZvcmVpZ25Db2RlKGNvZGUsIF9hYnN0cmFjdFZhbHVlRG9tYWluLm51bGxUeXBlLCBbc3RhY2subGFzdF0sCiAgICAgICAgICAgIHRocm93QmVoYXZpb3I6IE5hdGl2ZVRocm93QmVoYXZpb3IuTUFZKSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoaXNHcm93YWJsZUxpc3RDb25zdHJ1Y3RvckNhbGwpIHsKICAgICAgcHVzaChfYnVpbGRMaXRlcmFsTGlzdCg8SEluc3RydWN0aW9uPltdKSk7CiAgICAgIHZhciBpbmZlcnJlZFR5cGUgPSBfaW5mZXJyZWRUeXBlT2ZOZXdMaXN0KGludm9jYXRpb24pOwogICAgICByZXN1bHRUeXBlID0KICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmNvbnRhaW5zQWxsKGluZmVycmVkVHlwZSkuaXNQb3RlbnRpYWxseVRydWUKICAgICAgICAgICAgICA/IF9hYnN0cmFjdFZhbHVlRG9tYWluLmdyb3dhYmxlTGlzdFR5cGUKICAgICAgICAgICAgICA6IGluZmVycmVkVHlwZTsKICAgICAgc3RhY2subGFzdC5pbnN0cnVjdGlvblR5cGUgPSByZXN1bHRUeXBlOwogICAgfSBlbHNlIGlmIChpc0pTQXJyYXlUeXBlZENvbnN0cnVjdG9yKSB7CiAgICAgIC8vIFRPRE8oc3JhKTogSW5zdGVhZCBvZiBjYWxsaW5nIHRoZSBpZGVudGl0eS1saWtlIGZhY3RvcnkgY29uc3RydWN0b3IsCiAgICAgIC8vIHNpbXBseSBzZWxlY3QgdGhlIHNpbmdsZSBhcmd1bWVudC4KICAgICAgLy8gRmFjdG9yeSBjb25zdHJ1Y3RvcnMgdGFrZSB0eXBlIHBhcmFtZXRlcnMuCiAgICAgIGlmIChjbG9zZWRXb3JsZC5ydGlOZWVkCiAgICAgICAgICAuY2xhc3NOZWVkc1R5cGVBcmd1bWVudHMoZnVuY3Rpb24uZW5jbG9zaW5nQ2xhc3MpKSB7fQogICAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0KICAgICAgICAgIF9nZXRDb25zdHJ1Y3RvclR5cGVBcmd1bWVudHMoZnVuY3Rpb24sIGludm9jYXRpb24uYXJndW1lbnRzKTsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgd2hlbiB0eXBlIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvCiAgICAgIC8vIGNvbnN0cnVjdG9ycyBsaWtlIGNhbGxpbmcgYSBnZW5lcmljIG1ldGhvZC4KICAgICAgX2FkZFR5cGVBcmd1bWVudHMoCiAgICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgICBfZ2V0Q2xhc3NUeXBlQXJndW1lbnRzKGZ1bmN0aW9uLmVuY2xvc2luZ0NsYXNzLCBpbnZvY2F0aW9uLmFyZ3VtZW50cyksCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIF9wdXNoU3RhdGljSW52b2NhdGlvbihmdW5jdGlvbiwgYXJndW1lbnRzLCB0eXBlTWFzaywgdHlwZUFyZ3VtZW50cywKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9IGVsc2UgewogICAgICAvLyBGYWN0b3J5IGNvbnN0cnVjdG9ycyB0YWtlIHR5cGUgcGFyYW1ldGVycy4KICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9CiAgICAgICAgICBfZ2V0Q29uc3RydWN0b3JUeXBlQXJndW1lbnRzKGZ1bmN0aW9uLCBpbnZvY2F0aW9uLmFyZ3VtZW50cyk7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGlzIHdoZW4gdHlwZSBhcmd1bWVudHMgYXJlIHBhc3NlZCB0bwogICAgICAvLyBjb25zdHJ1Y3RvcnMgbGlrZSBjYWxsaW5nIGEgZ2VuZXJpYyBtZXRob2QuCiAgICAgIF9hZGRUeXBlQXJndW1lbnRzKAogICAgICAgICAgYXJndW1lbnRzLAogICAgICAgICAgX2dldENsYXNzVHlwZUFyZ3VtZW50cyhmdW5jdGlvbi5lbmNsb3NpbmdDbGFzcywgaW52b2NhdGlvbi5hcmd1bWVudHMpLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb24pOwogICAgICBpbnN0YW5jZVR5cGUgPSBsb2NhbHNIYW5kbGVyLnN1YnN0SW5Db250ZXh0KGluc3RhbmNlVHlwZSk7CiAgICAgIF9hZGRJbXBsaWNpdEluc3RhbnRpYXRpb24oaW5zdGFuY2VUeXBlKTsKICAgICAgX3B1c2hTdGF0aWNJbnZvY2F0aW9uKGZ1bmN0aW9uLCBhcmd1bWVudHMsIHR5cGVNYXNrLCB0eXBlQXJndW1lbnRzLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uLCBpbnN0YW5jZVR5cGU6IGluc3RhbmNlVHlwZSk7CiAgICB9CgogICAgSEluc3RydWN0aW9uIG5ld0luc3RhbmNlID0gc3RhY2subGFzdDsKCiAgICBpZiAoaXNGaXhlZExpc3QpIHsKICAgICAgLy8gSWYgd2UgaW5saW5lZCBhIGNvbnN0cnVjdG9yIHRoZSBjYWxsLXNpdGUtc3BlY2lmaWMgdHlwZSBmcm9tIHR5cGUKICAgICAgLy8gaW5mZXJlbmNlIChlLmcuIGEgY29udGFpbmVyIHR5cGUpIHdpbGwgbm90IGJlIG9uIHRoZSBub2RlLiBTdG9yZSB0aGUKICAgICAgLy8gbW9yZSBzcGVjaWFsaXplZCB0eXBlIG9uIHRoZSBhbGxvY2F0aW9uLgogICAgICBuZXdJbnN0YW5jZS5pbnN0cnVjdGlvblR5cGUgPSByZXN1bHRUeXBlOwogICAgICBncmFwaC5hbGxvY2F0ZWRGaXhlZExpc3RzLmFkZChuZXdJbnN0YW5jZSk7CiAgICB9CgogICAgaWYgKF9ydGlOZWVkLmNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKF9jb21tb25FbGVtZW50cy5saXN0Q2xhc3MpICYmCiAgICAgICAgKGlzRml4ZWRMaXN0Q29uc3RydWN0b3JDYWxsIHx8CiAgICAgICAgICAgIGlzR3Jvd2FibGVMaXN0Q29uc3RydWN0b3JDYWxsIHx8CiAgICAgICAgICAgIGlzSlNBcnJheVR5cGVkQ29uc3RydWN0b3IpKSB7CiAgICAgIEludGVyZmFjZVR5cGUgdHlwZSA9IF9lbGVtZW50TWFwLmNyZWF0ZUludGVyZmFjZVR5cGUoCiAgICAgICAgICBpbnZvY2F0aW9uLnRhcmdldC5lbmNsb3NpbmdDbGFzcywgaW52b2NhdGlvbi5hcmd1bWVudHMudHlwZXMpOwogICAgICBzdGFjawogICAgICAgICAgLmFkZChfc2V0TGlzdFJ1bnRpbWVUeXBlSW5mb0lmTmVlZGVkKHBvcCgpLCB0eXBlLCBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQogIH0KCiAgLy8vIFJlcGxhY2UgY2FsbHMgdG8gYGV4dHJhY3RUeXBlQXJndW1lbnRzYCB3aXRoIGVxdWl2YWxlbnQgY29kZS4gUmV0dXJucwogIC8vLyBgdHJ1ZWAgaWYgYGV4dHJhY3RUeXBlQXJndW1lbnRzYCBpcyBoYW5kbGVkLgogIGJvb2wgX2hhbmRsZUV4dHJhY3RUeXBlQXJndW1lbnRzKAogICAgICBpci5TdGF0aWNJbnZvY2F0aW9uIGludm9jYXRpb24sIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICAvLyBFeHBhbmQgY2FsbHMgYXMgZm9sbG93czoKICAgIC8vCiAgICAvLyAgICAgciA9IGV4dHJhY3RUeXBlQXJndW1lbnRzPE1hcD4oZSwgZikKICAgIC8vIC0tPgogICAgLy8gICAgIGludGVyY2VwdG9yID0gZ2V0SW50ZXJjZXB0b3IoZSk7CiAgICAvLyAgICAgVDEgPSBnZXRSdW50aW1lVHlwZUFyZ3VtZW50SW50ZXJjZXB0ZWQoaW50ZXJjZXB0b3IsIGUsICdNYXAnLCAwKTsKICAgIC8vICAgICBUMiA9IGdldFJ1bnRpbWVUeXBlQXJndW1lbnRJbnRlcmNlcHRlZChpbnRlcmNlcHRvciwgZSwgJ01hcCcsIDEpOwogICAgLy8gICAgIHIgPSBmPFQxLCBUMj4oKTsKICAgIC8vCiAgICAvLyBUT0RPKHNyYSk6IFNob3VsZCB3ZSBhZGQgYSBjaGVjayBiZWZvcmUgdGhlIHZhcmlhYmxlIGV4dHJhY3Rpb24/IFdlIGNvdWxkCiAgICAvLyBhZGQgYSB0eXBlIGNoZWNrICh3aGljaCB3b3VsZCBwZXJtaXQgYG51bGxgKSwgb3IgYWRkIGFuIGlzLWNoZWNrIHdpdGggYW4KICAgIC8vIGV4cGxpY2l0IHRocm93LgoKICAgIGlmIChpbnZvY2F0aW9uLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCAhPSAyKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoaW52b2NhdGlvbi5hcmd1bWVudHMubmFtZWQuaXNOb3RFbXB0eSkgcmV0dXJuIGZhbHNlOwogICAgdmFyIHR5cGVzID0gaW52b2NhdGlvbi5hcmd1bWVudHMudHlwZXM7CiAgICBpZiAodHlwZXMubGVuZ3RoICE9IDEpIHJldHVybiBmYWxzZTsKCiAgICAvLyBUaGUgdHlwZSBzaG91bGQgYmUgYSBzaW5nbGUgdHlwZSBuYW1lLgogICAgaXIuRGFydFR5cGUgdHlwZSA9IHR5cGVzLmZpcnN0OwogICAgRGFydFR5cGUgdHlwZVZhbHVlID0KICAgICAgICBsb2NhbHNIYW5kbGVyLnN1YnN0SW5Db250ZXh0KF9lbGVtZW50TWFwLmdldERhcnRUeXBlKHR5cGUpKTsKICAgIGlmICh0eXBlVmFsdWUgaXMhIEludGVyZmFjZVR5cGUpIHJldHVybiBmYWxzZTsKICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlVHlwZSA9IHR5cGVWYWx1ZTsKICAgIGlmICghaW50ZXJmYWNlVHlwZS50cmVhdEFzUmF3KSByZXR1cm4gZmFsc2U7CgogICAgQ2xhc3NFbnRpdHkgY2xzID0gaW50ZXJmYWNlVHlwZS5lbGVtZW50OwogICAgSW50ZXJmYWNlVHlwZSB0aGlzVHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0VGhpc1R5cGUoY2xzKTsKCiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gYXJndW1lbnRzID0KICAgICAgICBfdmlzaXRQb3NpdGlvbmFsQXJndW1lbnRzKGludm9jYXRpb24uYXJndW1lbnRzKTsKCiAgICBISW5zdHJ1Y3Rpb24gb2JqZWN0ID0gYXJndW1lbnRzWzBdOwogICAgSEluc3RydWN0aW9uIGNsb3N1cmUgPSBhcmd1bWVudHNbMV07CiAgICBISW5zdHJ1Y3Rpb24gaW50ZXJjZXB0b3IgPSBfaW50ZXJjZXB0b3JGb3Iob2JqZWN0LCBzb3VyY2VJbmZvcm1hdGlvbik7CgogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cyA9IDxISW5zdHJ1Y3Rpb24+W2Nsb3N1cmVdOwogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9IDxEYXJ0VHlwZT5bXTsKCiAgICBpZiAob3B0aW9ucy5leHBlcmltZW50TmV3UnRpKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBpbnN0YW5jZVR5cGUgPQogICAgICAgICAgSEluc3RhbmNlRW52aXJvbm1lbnQob2JqZWN0LCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSk7CiAgICAgIGFkZChpbnN0YW5jZVR5cGUpOwogICAgICBUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUgZW52U3RydWN0dXJlID0KICAgICAgICAgIEZ1bGxUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUoY2xhc3NUeXBlOiB0aGlzVHlwZSk7CgogICAgICB0aGlzVHlwZS50eXBlQXJndW1lbnRzLmZvckVhY2goKF90eXBlVmFyaWFibGUpIHsKICAgICAgICBUeXBlVmFyaWFibGVUeXBlIHZhcmlhYmxlID0gX3R5cGVWYXJpYWJsZTsKICAgICAgICB0eXBlQXJndW1lbnRzLmFkZCh2YXJpYWJsZSk7CiAgICAgICAgVHlwZVJlY2lwZSByZWNpcGUgPSBUeXBlRXhwcmVzc2lvblJlY2lwZSh2YXJpYWJsZSk7CiAgICAgICAgSEluc3RydWN0aW9uIHR5cGVFdmFsID0gbmV3IEhUeXBlRXZhbChpbnN0YW5jZVR5cGUsIGVudlN0cnVjdHVyZSwKICAgICAgICAgICAgcmVjaXBlLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSk7CiAgICAgICAgYWRkKHR5cGVFdmFsKTsKICAgICAgICBpbnB1dHMuYWRkKHR5cGVFdmFsKTsKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICB0aGlzVHlwZS50eXBlQXJndW1lbnRzLmZvckVhY2goKF90eXBlVmFyaWFibGUpIHsKICAgICAgICBUeXBlVmFyaWFibGVUeXBlIHZhcmlhYmxlID0gX3R5cGVWYXJpYWJsZTsKICAgICAgICB0eXBlQXJndW1lbnRzLmFkZCh2YXJpYWJsZSk7CiAgICAgICAgSEluc3RydWN0aW9uIHJlYWRUeXBlID0gbmV3IEhUeXBlSW5mb1JlYWRWYXJpYWJsZS5pbnRlcmNlcHRlZCgKICAgICAgICAgICAgdmFyaWFibGUsIGludGVyY2VwdG9yLCBvYmplY3QsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKTsKICAgICAgICBhZGQocmVhZFR5cGUpOwogICAgICAgIGlucHV0cy5hZGQocmVhZFR5cGUpOwogICAgICB9KTsKICAgIH0KCiAgICAvLyBUT0RPKHNyYSk6IEluIGNvbXBsaWFuY2UgbW9kZSwgaW5zZXJ0IGEgY2hlY2sgdGhhdCBbY2xvc3VyZV0gaXMgYQogICAgLy8gZnVuY3Rpb24gb2YgTiB0eXBlIGFyZ3VtZW50cy4KCiAgICBTZWxlY3RvciBzZWxlY3RvciA9CiAgICAgICAgbmV3IFNlbGVjdG9yLmNhbGxDbG9zdXJlKDAsIGNvbnN0IDxTdHJpbmc+W10sIHR5cGVBcmd1bWVudHMubGVuZ3RoKTsKICAgIFN0YXRpY1R5cGUgcmVjZWl2ZXJTdGF0aWNUeXBlID0KICAgICAgICBfZ2V0U3RhdGljVHlwZShpbnZvY2F0aW9uLmFyZ3VtZW50cy5wb3NpdGlvbmFsWzFdKTsKICAgIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXJUeXBlID0gX2Fic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAuY3JlYXRlRnJvbVN0YXRpY1R5cGUocmVjZWl2ZXJTdGF0aWNUeXBlLnR5cGUsCiAgICAgICAgICAgIGNsYXNzUmVsYXRpb246IHJlY2VpdmVyU3RhdGljVHlwZS5yZWxhdGlvbiwgbnVsbGFibGU6IHRydWUpCiAgICAgICAgLmFic3RyYWN0VmFsdWU7CiAgICBwdXNoKG5ldyBISW52b2tlQ2xvc3VyZShzZWxlY3RvciwgcmVjZWl2ZXJUeXBlLCBpbnB1dHMsCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUsIHR5cGVBcmd1bWVudHMpKTsKCiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIHZvaWQgX2hhbmRsZUludm9rZVN0YXRpY0ZvcmVpZ24oCiAgICAgIGlyLlN0YXRpY0ludm9jYXRpb24gaW52b2NhdGlvbiwgTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgU3RyaW5nIG5hbWUgPSBtZW1iZXIubmFtZTsKICAgIGlmIChuYW1lID09ICdKUycpIHsKICAgICAgX2hhbmRsZUZvcmVpZ25KcyhpbnZvY2F0aW9uKTsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSAnREFSVF9DTE9TVVJFX1RPX0pTJykgewogICAgICBfaGFuZGxlRm9yZWlnbkRhcnRDbG9zdXJlVG9KcyhpbnZvY2F0aW9uLCAnREFSVF9DTE9TVVJFX1RPX0pTJyk7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJ1JBV19EQVJUX0ZVTkNUSU9OX1JFRicpIHsKICAgICAgX2hhbmRsZUZvcmVpZ25SYXdGdW5jdGlvblJlZihpbnZvY2F0aW9uLCAnUkFXX0RBUlRfRlVOQ1RJT05fUkVGJyk7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJ0pTX1NFVF9TVEFUSUNfU1RBVEUnKSB7CiAgICAgIF9oYW5kbGVGb3JlaWduSnNTZXRTdGF0aWNTdGF0ZShpbnZvY2F0aW9uKTsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSAnSlNfR0VUX1NUQVRJQ19TVEFURScpIHsKICAgICAgX2hhbmRsZUZvcmVpZ25Kc0dldFN0YXRpY1N0YXRlKGludm9jYXRpb24pOwogICAgfSBlbHNlIGlmIChuYW1lID09ICdKU19HRVRfTkFNRScpIHsKICAgICAgX2hhbmRsZUZvcmVpZ25Kc0dldE5hbWUoaW52b2NhdGlvbik7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJ0pTX0VNQkVEREVEX0dMT0JBTCcpIHsKICAgICAgX2hhbmRsZUZvcmVpZ25Kc0VtYmVkZGVkR2xvYmFsKGludm9jYXRpb24pOwogICAgfSBlbHNlIGlmIChuYW1lID09ICdKU19CVUlMVElOJykgewogICAgICBfaGFuZGxlRm9yZWlnbkpzQnVpbHRpbihpbnZvY2F0aW9uKTsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSAnSlNfR0VUX0ZMQUcnKSB7CiAgICAgIF9oYW5kbGVGb3JlaWduSnNHZXRGbGFnKGludm9jYXRpb24pOwogICAgfSBlbHNlIGlmIChuYW1lID09ICdKU19FRkZFQ1QnKSB7CiAgICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpKTsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSAnSlNfSU5URVJDRVBUT1JfQ09OU1RBTlQnKSB7CiAgICAgIF9oYW5kbGVKc0ludGVyY2VwdG9yQ29uc3RhbnQoaW52b2NhdGlvbik7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJ2dldEludGVyY2VwdG9yJykgewogICAgICBfaGFuZGxlRm9yZWlnbkdldEludGVyY2VwdG9yKGludm9jYXRpb24pOwogICAgfSBlbHNlIGlmIChuYW1lID09ICdnZXRKU0FycmF5SW50ZXJvcFJ0aScpIHsKICAgICAgX2hhbmRsZUZvcmVpZ25HZXRKU0FycmF5SW50ZXJvcFJ0aShpbnZvY2F0aW9uKTsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSAnSlNfU1RSSU5HX0NPTkNBVCcpIHsKICAgICAgX2hhbmRsZUpzU3RyaW5nQ29uY2F0KGludm9jYXRpb24pOwogICAgfSBlbHNlIGlmIChuYW1lID09ICdfY3JlYXRlSW52b2NhdGlvbk1pcnJvcicpIHsKICAgICAgX2hhbmRsZUNyZWF0ZUludm9jYXRpb25NaXJyb3IoaW52b2NhdGlvbik7CiAgICB9IGVsc2UgewogICAgICByZXBvcnRlci5pbnRlcm5hbEVycm9yKAogICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U3Bhbm5hYmxlKHRhcmdldEVsZW1lbnQsIGludm9jYXRpb24pLAogICAgICAgICAgIlVua25vd24gZm9yZWlnbjogJHtuYW1lfSIpOwogICAgfQogIH0KCiAgdm9pZCBfaGFuZGxlQ3JlYXRlSW52b2NhdGlvbk1pcnJvcihpci5TdGF0aWNJbnZvY2F0aW9uIGludm9jYXRpb24pIHsKICAgIGlyLlN0cmluZ0xpdGVyYWwgbmFtZUxpdGVyYWwgPSBpbnZvY2F0aW9uLmFyZ3VtZW50cy5wb3NpdGlvbmFsWzBdOwogICAgU3RyaW5nIG5hbWUgPSBuYW1lTGl0ZXJhbC52YWx1ZTsKCiAgICBpci5MaXN0TGl0ZXJhbCB0eXBlQXJndW1lbnRzTGl0ZXJhbCA9IGludm9jYXRpb24uYXJndW1lbnRzLnBvc2l0aW9uYWxbMV07CiAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0KICAgICAgICB0eXBlQXJndW1lbnRzTGl0ZXJhbC5leHByZXNzaW9ucy5tYXAoKGlyLkV4cHJlc3Npb24gZXhwcmVzc2lvbikgewogICAgICBpci5UeXBlTGl0ZXJhbCB0eXBlTGl0ZXJhbCA9IGV4cHJlc3Npb247CiAgICAgIHJldHVybiBfZWxlbWVudE1hcC5nZXREYXJ0VHlwZSh0eXBlTGl0ZXJhbC50eXBlKTsKICAgIH0pLnRvTGlzdCgpOwoKICAgIGlyLkxpc3RMaXRlcmFsIHBvc2l0aW9uYWxBcmd1bWVudHNMaXRlcmFsID0KICAgICAgICBpbnZvY2F0aW9uLmFyZ3VtZW50cy5wb3NpdGlvbmFsWzJdOwogICAgaXIuRXhwcmVzc2lvbiBuYW1lZEFyZ3VtZW50c0xpdGVyYWwgPSBpbnZvY2F0aW9uLmFyZ3VtZW50cy5wb3NpdGlvbmFsWzNdOwogICAgTWFwPFN0cmluZywgaXIuRXhwcmVzc2lvbj4gbmFtZWRBcmd1bWVudHMgPSB7fTsKICAgIGlyLkludExpdGVyYWwga2luZExpdGVyYWwgPSBpbnZvY2F0aW9uLmFyZ3VtZW50cy5wb3NpdGlvbmFsWzRdOwoKICAgIE5hbWUgbWVtYmVyTmFtZSA9IG5ldyBOYW1lKG5hbWUsIF9jdXJyZW50RnJhbWUubWVtYmVyLmxpYnJhcnkpOwogICAgU2VsZWN0b3Igc2VsZWN0b3I7CiAgICBzd2l0Y2ggKGtpbmRMaXRlcmFsLnZhbHVlKSB7CiAgICAgIGNhc2UgaW52b2NhdGlvbk1pcnJvckdldHRlcktpbmQ6CiAgICAgICAgc2VsZWN0b3IgPSBuZXcgU2VsZWN0b3IuZ2V0dGVyKG1lbWJlck5hbWUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIGludm9jYXRpb25NaXJyb3JTZXR0ZXJLaW5kOgogICAgICAgIHNlbGVjdG9yID0gbmV3IFNlbGVjdG9yLnNldHRlcihtZW1iZXJOYW1lKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBpbnZvY2F0aW9uTWlycm9yTWV0aG9kS2luZDoKICAgICAgICBpZiAobWVtYmVyTmFtZSA9PSBOYW1lcy5JTkRFWF9OQU1FKSB7CiAgICAgICAgICBzZWxlY3RvciA9IG5ldyBTZWxlY3Rvci5pbmRleCgpOwogICAgICAgIH0gZWxzZSBpZiAobWVtYmVyTmFtZSA9PSBOYW1lcy5JTkRFWF9TRVRfTkFNRSkgewogICAgICAgICAgc2VsZWN0b3IgPSBuZXcgU2VsZWN0b3IuaW5kZXhTZXQoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKG5hbWVkQXJndW1lbnRzTGl0ZXJhbCBpcyBpci5NYXBMaXRlcmFsKSB7CiAgICAgICAgICAgIG5hbWVkQXJndW1lbnRzTGl0ZXJhbC5lbnRyaWVzLmZvckVhY2goKGlyLk1hcEVudHJ5IGVudHJ5KSB7CiAgICAgICAgICAgICAgaXIuU3RyaW5nTGl0ZXJhbCBrZXkgPSBlbnRyeS5rZXk7CiAgICAgICAgICAgICAgbmFtZWRBcmd1bWVudHNba2V5LnZhbHVlXSA9IGVudHJ5LnZhbHVlOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSBpZiAobmFtZWRBcmd1bWVudHNMaXRlcmFsIGlzIGlyLkNvbnN0YW50RXhwcmVzc2lvbiAmJgogICAgICAgICAgICAgIG5hbWVkQXJndW1lbnRzTGl0ZXJhbC5jb25zdGFudCBpcyBpci5NYXBDb25zdGFudCkgewogICAgICAgICAgICBpci5NYXBDb25zdGFudCBjb25zdGFudCA9IG5hbWVkQXJndW1lbnRzTGl0ZXJhbC5jb25zdGFudDsKICAgICAgICAgICAgZm9yIChpci5Db25zdGFudE1hcEVudHJ5IGVudHJ5IGluIGNvbnN0YW50LmVudHJpZXMpIHsKICAgICAgICAgICAgICBpci5TdHJpbmdDb25zdGFudCBrZXkgPSBlbnRyeS5rZXk7CiAgICAgICAgICAgICAgbmFtZWRBcmd1bWVudHNba2V5LnZhbHVlXSA9CiAgICAgICAgICAgICAgICAgIG5ldyBpci5Db25zdGFudEV4cHJlc3Npb24oZW50cnkudmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXBvcnRlci5pbnRlcm5hbEVycm9yKAogICAgICAgICAgICAgICAgY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUoaW52b2NhdGlvbiksCiAgICAgICAgICAgICAgICAiVW5leHBlY3RlZCBuYW1lZCBhcmd1bWVudHMgdmFsdWUgaW4gY3JlYXRlSW52b2NhdGlvbk1pcnJyb3I6ICIKICAgICAgICAgICAgICAgICIke25hbWVkQXJndW1lbnRzTGl0ZXJhbH0uIik7CiAgICAgICAgICB9CiAgICAgICAgICBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUgPSBuZXcgQ2FsbFN0cnVjdHVyZSgKICAgICAgICAgICAgICBwb3NpdGlvbmFsQXJndW1lbnRzTGl0ZXJhbC5leHByZXNzaW9ucy5sZW5ndGgsCiAgICAgICAgICAgICAgbmFtZWRBcmd1bWVudHMua2V5cy50b0xpc3QoKSwKICAgICAgICAgICAgICB0eXBlQXJndW1lbnRzLmxlbmd0aCk7CiAgICAgICAgICBpZiAoU2VsZWN0b3IuaXNPcGVyYXRvck5hbWUobmFtZSkpIHsKICAgICAgICAgICAgc2VsZWN0b3IgPQogICAgICAgICAgICAgICAgbmV3IFNlbGVjdG9yKFNlbGVjdG9yS2luZC5PUEVSQVRPUiwgbWVtYmVyTmFtZSwgY2FsbFN0cnVjdHVyZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzZWxlY3RvciA9IG5ldyBTZWxlY3Rvci5jYWxsKG1lbWJlck5hbWUsIGNhbGxTdHJ1Y3R1cmUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBicmVhazsKICAgIH0KCiAgICBIQ29uc3RhbnQgbmFtZUNvbnN0YW50ID0gZ3JhcGguYWRkQ29uc3RhbnQoCiAgICAgICAgY29uc3RhbnRfc3lzdGVtLmNyZWF0ZVN5bWJvbChjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cywgbmFtZSksCiAgICAgICAgY2xvc2VkV29ybGQpOwoKICAgIExpc3Q8SEluc3RydWN0aW9uPiBhcmd1bWVudHMgPSA8SEluc3RydWN0aW9uPltdOwogICAgZm9yIChpci5FeHByZXNzaW9uIGFyZ3VtZW50IGluIHBvc2l0aW9uYWxBcmd1bWVudHNMaXRlcmFsLmV4cHJlc3Npb25zKSB7CiAgICAgIGFyZ3VtZW50LmFjY2VwdCh0aGlzKTsKICAgICAgYXJndW1lbnRzLmFkZChwb3AoKSk7CiAgICB9CiAgICBpZiAobmFtZWRBcmd1bWVudHMuaXNOb3RFbXB0eSkgewogICAgICBNYXA8U3RyaW5nLCBISW5zdHJ1Y3Rpb24+IG5hbWVkVmFsdWVzID0gPFN0cmluZywgSEluc3RydWN0aW9uPnt9OwogICAgICBuYW1lZEFyZ3VtZW50cy5mb3JFYWNoKChTdHJpbmcgbmFtZSwgaXIuRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgICAgIHZhbHVlLmFjY2VwdCh0aGlzKTsKICAgICAgICBuYW1lZFZhbHVlc1tuYW1lXSA9IHBvcCgpOwogICAgICB9KTsKICAgICAgZm9yIChTdHJpbmcgbmFtZSBpbiBzZWxlY3Rvci5jYWxsU3RydWN0dXJlLmdldE9yZGVyZWROYW1lZEFyZ3VtZW50cygpKSB7CiAgICAgICAgYXJndW1lbnRzLmFkZChuYW1lZFZhbHVlc1tuYW1lXSk7CiAgICAgIH0KICAgIH0KCiAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9CiAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZENhbGwoaW52b2NhdGlvbiwgaW52b2NhdGlvbik7CiAgICBfYWRkVHlwZUFyZ3VtZW50cyhhcmd1bWVudHMsIHR5cGVBcmd1bWVudHMsIHNvdXJjZUluZm9ybWF0aW9uKTsKCiAgICBISW5zdHJ1Y3Rpb24gYXJndW1lbnRzSW5zdHJ1Y3Rpb24gPSBfYnVpbGRMaXRlcmFsTGlzdChhcmd1bWVudHMpOwogICAgYWRkKGFyZ3VtZW50c0luc3RydWN0aW9uKTsKCiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gYXJndW1lbnROYW1lcyA9IDxISW5zdHJ1Y3Rpb24+W107CiAgICBmb3IgKFN0cmluZyBhcmd1bWVudE5hbWUKICAgICAgICBpbiBzZWxlY3Rvci5jYWxsU3RydWN0dXJlLmdldE9yZGVyZWROYW1lZEFyZ3VtZW50cygpKSB7CiAgICAgIENvbnN0YW50VmFsdWUgYXJndW1lbnROYW1lQ29uc3RhbnQgPQogICAgICAgICAgY29uc3RhbnRfc3lzdGVtLmNyZWF0ZVN0cmluZyhhcmd1bWVudE5hbWUpOwogICAgICBhcmd1bWVudE5hbWVzLmFkZChncmFwaC5hZGRDb25zdGFudChhcmd1bWVudE5hbWVDb25zdGFudCwgY2xvc2VkV29ybGQpKTsKICAgIH0KICAgIEhJbnN0cnVjdGlvbiBhcmd1bWVudE5hbWVzSW5zdHJ1Y3Rpb24gPSBfYnVpbGRMaXRlcmFsTGlzdChhcmd1bWVudE5hbWVzKTsKICAgIGFkZChhcmd1bWVudE5hbWVzSW5zdHJ1Y3Rpb24pOwoKICAgIEhJbnN0cnVjdGlvbiB0eXBlQXJndW1lbnRDb3VudCA9CiAgICAgICAgZ3JhcGguYWRkQ29uc3RhbnRJbnQodHlwZUFyZ3VtZW50cy5sZW5ndGgsIGNsb3NlZFdvcmxkKTsKCiAgICBqcy5OYW1lIGludGVybmFsTmFtZSA9IF9uYW1lci5pbnZvY2F0aW9uTmFtZShzZWxlY3Rvcik7CgogICAgQ29uc3RhbnRWYWx1ZSBraW5kQ29uc3RhbnQgPQogICAgICAgIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVJbnRGcm9tSW50KHNlbGVjdG9yLmludm9jYXRpb25NaXJyb3JLaW5kKTsKCiAgICBfcHVzaFN0YXRpY0ludm9jYXRpb24oCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmNyZWF0ZVVubWFuZ2xlZEludm9jYXRpb25NaXJyb3IsCiAgICAgICAgWwogICAgICAgICAgbmFtZUNvbnN0YW50LAogICAgICAgICAgZ3JhcGguYWRkQ29uc3RhbnRTdHJpbmdGcm9tTmFtZShpbnRlcm5hbE5hbWUsIGNsb3NlZFdvcmxkKSwKICAgICAgICAgIGdyYXBoLmFkZENvbnN0YW50KGtpbmRDb25zdGFudCwgY2xvc2VkV29ybGQpLAogICAgICAgICAgYXJndW1lbnRzSW5zdHJ1Y3Rpb24sCiAgICAgICAgICBhcmd1bWVudE5hbWVzSW5zdHJ1Y3Rpb24sCiAgICAgICAgICB0eXBlQXJndW1lbnRDb3VudCwKICAgICAgICBdLAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlLAogICAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgYm9vbCBfdW5leHBlY3RlZEZvcmVpZ25Bcmd1bWVudHMoaXIuU3RhdGljSW52b2NhdGlvbiBpbnZvY2F0aW9uLAogICAgICB7aW50IG1pblBvc2l0aW9uYWwsIGludCBtYXhQb3NpdGlvbmFsLCBpbnQgdHlwZUFyZ3VtZW50Q291bnQgPSAwfSkgewogICAgU3RyaW5nIHBsdXJhbGl6ZUFyZ3VtZW50cyhpbnQgY291bnQsIFtTdHJpbmcgYWRqZWN0aXZlID0gJyddKSB7CiAgICAgIGlmIChjb3VudCA9PSAwKSByZXR1cm4gJ25vICR7YWRqZWN0aXZlfWFyZ3VtZW50cyc7CiAgICAgIGlmIChjb3VudCA9PSAxKSByZXR1cm4gJ29uZSAke2FkamVjdGl2ZX1hcmd1bWVudCc7CiAgICAgIGlmIChjb3VudCA9PSAyKSByZXR1cm4gJ3R3byAke2FkamVjdGl2ZX1hcmd1bWVudHMnOwogICAgICByZXR1cm4gJyRjb3VudCAke2FkamVjdGl2ZX1hcmd1bWVudHMnOwogICAgfQoKICAgIFN0cmluZyBuYW1lKCkgPT4gaW52b2NhdGlvbi50YXJnZXQubmFtZS5uYW1lOwoKICAgIGlyLkFyZ3VtZW50cyBhcmd1bWVudHMgPSBpbnZvY2F0aW9uLmFyZ3VtZW50czsKICAgIGJvb2wgYmFkID0gZmFsc2U7CiAgICBpZiAoYXJndW1lbnRzLnR5cGVzLmxlbmd0aCAhPSB0eXBlQXJndW1lbnRDb3VudCkgewogICAgICBTdHJpbmcgZXhwZWN0ZWQgPSBwbHVyYWxpemVBcmd1bWVudHModHlwZUFyZ3VtZW50Q291bnQsICd0eXBlICcpOwogICAgICBTdHJpbmcgYWN0dWFsID0gcGx1cmFsaXplQXJndW1lbnRzKGFyZ3VtZW50cy50eXBlcy5sZW5ndGgsICd0eXBlICcpOwogICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICBfZWxlbWVudE1hcC5nZXRTcGFubmFibGUodGFyZ2V0RWxlbWVudCwgaW52b2NhdGlvbiksCiAgICAgICAgICBNZXNzYWdlS2luZC5HRU5FUklDLAogICAgICAgICAgeyd0ZXh0JzogIkVycm9yOiAnJHtuYW1lKCl9JyB0YWtlcyAkZXhwZWN0ZWQsIG5vdCAkYWN0dWFsLiJ9KTsKICAgICAgYmFkID0gdHJ1ZTsKICAgIH0KICAgIGlmIChhcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggPCBtaW5Qb3NpdGlvbmFsKSB7CiAgICAgIFN0cmluZyBwaHJhc2UgPSBwbHVyYWxpemVBcmd1bWVudHMobWluUG9zaXRpb25hbCk7CiAgICAgIGlmIChtYXhQb3NpdGlvbmFsICE9IG1pblBvc2l0aW9uYWwpIHBocmFzZSA9ICdhdCBsZWFzdCAkcGhyYXNlJzsKICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U3Bhbm5hYmxlKHRhcmdldEVsZW1lbnQsIGludm9jYXRpb24pLAogICAgICAgICAgTWVzc2FnZUtpbmQuR0VORVJJQywKICAgICAgICAgIHsndGV4dCc6ICJFcnJvcjogVG9vIGZldyBhcmd1bWVudHMuICcke25hbWUoKX0nIHRha2VzICRwaHJhc2UuIn0pOwogICAgICBiYWQgPSB0cnVlOwogICAgfQogICAgaWYgKG1heFBvc2l0aW9uYWwgIT0gbnVsbCAmJiBhcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggPiBtYXhQb3NpdGlvbmFsKSB7CiAgICAgIFN0cmluZyBwaHJhc2UgPSBwbHVyYWxpemVBcmd1bWVudHMobWF4UG9zaXRpb25hbCk7CiAgICAgIGlmIChtYXhQb3NpdGlvbmFsICE9IG1pblBvc2l0aW9uYWwpIHBocmFzZSA9ICdhdCBtb3N0ICRwaHJhc2UnOwogICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICBfZWxlbWVudE1hcC5nZXRTcGFubmFibGUodGFyZ2V0RWxlbWVudCwgaW52b2NhdGlvbiksCiAgICAgICAgICBNZXNzYWdlS2luZC5HRU5FUklDLAogICAgICAgICAgeyd0ZXh0JzogIkVycm9yOiBUb28gbWFueSBhcmd1bWVudHMuICcke25hbWUoKX0nIHRha2VzICRwaHJhc2UuIn0pOwogICAgICBiYWQgPSB0cnVlOwogICAgfQogICAgaWYgKGFyZ3VtZW50cy5uYW1lZC5pc05vdEVtcHR5KSB7CiAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgIF9lbGVtZW50TWFwLmdldFNwYW5uYWJsZSh0YXJnZXRFbGVtZW50LCBpbnZvY2F0aW9uKSwKICAgICAgICAgIE1lc3NhZ2VLaW5kLkdFTkVSSUMsCiAgICAgICAgICB7J3RleHQnOiAiRXJyb3I6ICcke25hbWUoKX0nIGRvZXMgbm90IHRha2UgbmFtZWQgYXJndW1lbnRzLiJ9KTsKICAgICAgYmFkID0gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBiYWQ7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHN0cmluZyBhcmd1bWVudC4gVGhlIGFyZ3VtZW50IG11c3QgZXZhbHVhdGUgdG8gYQogIC8vLyBjb25zdGFudC4gIElmIHRoZXJlIGlzIGFuIGVycm9yLCB0aGUgZXJyb3IgaXMgcmVwb3J0ZWQgYW5kIGBudWxsYCBpcwogIC8vLyByZXR1cm5lZC4KICBTdHJpbmcgX2ZvcmVpZ25Db25zdGFudFN0cmluZ0FyZ3VtZW50KAogICAgICBpci5TdGF0aWNJbnZvY2F0aW9uIGludm9jYXRpb24sIGludCBwb3NpdGlvbiwgU3RyaW5nIG1ldGhvZE5hbWUsCiAgICAgIFtTdHJpbmcgYWRqZWN0aXZlID0gJyddKSB7CiAgICBpci5FeHByZXNzaW9uIGFyZ3VtZW50ID0gaW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbFtwb3NpdGlvbl07CiAgICBhcmd1bWVudC5hY2NlcHQodGhpcyk7CiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBwb3AoKTsKCiAgICBpZiAoIWluc3RydWN0aW9uLmlzQ29uc3RhbnRTdHJpbmcoKSkgewogICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICBfZWxlbWVudE1hcC5nZXRTcGFubmFibGUodGFyZ2V0RWxlbWVudCwgYXJndW1lbnQpLAogICAgICAgICAgTWVzc2FnZUtpbmQuR0VORVJJQywgewogICAgICAgICd0ZXh0JzogIkVycm9yOiBFeHBlY3RlZCBTdHJpbmcgY29uc3RhbnQgYXMgJHthZGplY3RpdmV9YXJndW1lbnQgIgogICAgICAgICAgICAidG8gJyRtZXRob2ROYW1lJy4iCiAgICAgIH0pOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBIQ29uc3RhbnQgaENvbnN0YW50ID0gaW5zdHJ1Y3Rpb247CiAgICBTdHJpbmdDb25zdGFudFZhbHVlIHN0cmluZ0NvbnN0YW50ID0gaENvbnN0YW50LmNvbnN0YW50OwogICAgcmV0dXJuIHN0cmluZ0NvbnN0YW50LnN0cmluZ1ZhbHVlOwogIH0KCiAgdm9pZCBfaGFuZGxlRm9yZWlnbkRhcnRDbG9zdXJlVG9KcygKICAgICAgaXIuU3RhdGljSW52b2NhdGlvbiBpbnZvY2F0aW9uLCBTdHJpbmcgbmFtZSkgewogICAgLy8gVE9ETyhzcmEpOiBEbyB3ZSBuZWVkIHRvIHdyYXAgdGhlIGNsb3N1cmUgaW4gc29tZXRoaW5nIHRoYXQgc2F2ZXMgdGhlCiAgICAvLyBjdXJyZW50IGlzb2xhdGU/CiAgICBfaGFuZGxlRm9yZWlnblJhd0Z1bmN0aW9uUmVmKGludm9jYXRpb24sIG5hbWUpOwogIH0KCiAgdm9pZCBfaGFuZGxlRm9yZWlnblJhd0Z1bmN0aW9uUmVmKAogICAgICBpci5TdGF0aWNJbnZvY2F0aW9uIGludm9jYXRpb24sIFN0cmluZyBuYW1lKSB7CiAgICBpZiAoX3VuZXhwZWN0ZWRGb3JlaWduQXJndW1lbnRzKGludm9jYXRpb24sCiAgICAgICAgbWluUG9zaXRpb25hbDogMSwgbWF4UG9zaXRpb25hbDogMSkpIHsKICAgICAgLy8gUmVzdWx0IGV4cGVjdGVkIG9uIHN0YWNrLgogICAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpci5FeHByZXNzaW9uIGNsb3N1cmUgPSBpbnZvY2F0aW9uLmFyZ3VtZW50cy5wb3NpdGlvbmFsLnNpbmdsZTsKICAgIFN0cmluZyBwcm9ibGVtID0gJ3JlcXVpcmVzIGEgc3RhdGljIG1ldGhvZCBvciB0b3AtbGV2ZWwgbWV0aG9kJzsKCiAgICBib29sIGhhbmRsZVRhcmdldChpci5Qcm9jZWR1cmUgcHJvY2VkdXJlKSB7CiAgICAgIGlyLkZ1bmN0aW9uTm9kZSBmdW5jdGlvbiA9IHByb2NlZHVyZS5mdW5jdGlvbjsKICAgICAgaWYgKGZ1bmN0aW9uICE9IG51bGwgJiYKICAgICAgICAgIGZ1bmN0aW9uLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPT0KICAgICAgICAgICAgICBmdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGggJiYKICAgICAgICAgIGZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycy5pc0VtcHR5KSB7CiAgICAgICAgcHVzaChuZXcgSEZvcmVpZ25Db2RlKAogICAgICAgICAgICBqcy5qcy5leHByZXNzaW9uVGVtcGxhdGVZaWVsZGluZyhfZW1pdHRlcgogICAgICAgICAgICAgICAgLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKF9lbGVtZW50TWFwLmdldE1ldGhvZChwcm9jZWR1cmUpKSksCiAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlLAogICAgICAgICAgICA8SEluc3RydWN0aW9uPltdLAogICAgICAgICAgICBuYXRpdmVCZWhhdmlvcjogTmF0aXZlQmVoYXZpb3IuUFVSRSwKICAgICAgICAgICAgZm9yZWlnbkZ1bmN0aW9uOiBfZWxlbWVudE1hcC5nZXRNZXRob2QocHJvY2VkdXJlKSkpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIHByb2JsZW0gPSAnZG9lcyBub3QgaGFuZGxlIGEgY2xvc3VyZSB3aXRoIG9wdGlvbmFsIHBhcmFtZXRlcnMnOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKGNsb3N1cmUgaXMgaXIuU3RhdGljR2V0KSB7CiAgICAgIGlyLk1lbWJlciBzdGF0aWNUYXJnZXQgPSBjbG9zdXJlLnRhcmdldDsKICAgICAgaWYgKHN0YXRpY1RhcmdldCBpcyBpci5Qcm9jZWR1cmUpIHsKICAgICAgICBpZiAoc3RhdGljVGFyZ2V0LmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5NZXRob2QpIHsKICAgICAgICAgIGlmIChoYW5kbGVUYXJnZXQoc3RhdGljVGFyZ2V0KSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYgKGNsb3N1cmUgaXMgaXIuQ29uc3RhbnRFeHByZXNzaW9uICYmCiAgICAgICAgY2xvc3VyZS5jb25zdGFudCBpcyBpci5UZWFyT2ZmQ29uc3RhbnQpIHsKICAgICAgaXIuVGVhck9mZkNvbnN0YW50IHRlYXJPZmYgPSBjbG9zdXJlLmNvbnN0YW50OwogICAgICBpZiAoaGFuZGxlVGFyZ2V0KHRlYXJPZmYucHJvY2VkdXJlKSkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQoKICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICBfZWxlbWVudE1hcC5nZXRTcGFubmFibGUodGFyZ2V0RWxlbWVudCwgaW52b2NhdGlvbiksCiAgICAgICAgTWVzc2FnZUtpbmQuR0VORVJJQywKICAgICAgICB7J3RleHQnOiAiJyRuYW1lJyAkcHJvYmxlbS4ifSk7CiAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKSk7IC8vIFJlc3VsdCBleHBlY3RlZCBvbiBzdGFjay4KICAgIHJldHVybjsKICB9CgogIHZvaWQgX2hhbmRsZUZvcmVpZ25Kc1NldFN0YXRpY1N0YXRlKGlyLlN0YXRpY0ludm9jYXRpb24gaW52b2NhdGlvbikgewogICAgaWYgKF91bmV4cGVjdGVkRm9yZWlnbkFyZ3VtZW50cyhpbnZvY2F0aW9uLAogICAgICAgIG1pblBvc2l0aW9uYWw6IDEsIG1heFBvc2l0aW9uYWw6IDEpKSB7CiAgICAgIC8vIFJlc3VsdCBleHBlY3RlZCBvbiBzdGFjay4KICAgICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCkpOwogICAgICByZXR1cm47CiAgICB9CgogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cyA9IF92aXNpdFBvc2l0aW9uYWxBcmd1bWVudHMoaW52b2NhdGlvbi5hcmd1bWVudHMpOwoKICAgIFN0cmluZyBpc29sYXRlTmFtZSA9IF9uYW1lci5zdGF0aWNTdGF0ZUhvbGRlcjsKICAgIFNpZGVFZmZlY3RzIHNpZGVFZmZlY3RzID0gbmV3IFNpZGVFZmZlY3RzLmVtcHR5KCk7CiAgICBzaWRlRWZmZWN0cy5zZXRBbGxTaWRlRWZmZWN0cygpOwogICAgcHVzaChuZXcgSEZvcmVpZ25Db2RlKGpzLmpzLnBhcnNlRm9yZWlnbkpTKCIkaXNvbGF0ZU5hbWUgPSAjIiksCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUsIGlucHV0cywKICAgICAgICBuYXRpdmVCZWhhdmlvcjogTmF0aXZlQmVoYXZpb3IuQ0hBTkdFU19PVEhFUiwgZWZmZWN0czogc2lkZUVmZmVjdHMpKTsKICB9CgogIHZvaWQgX2hhbmRsZUZvcmVpZ25Kc0dldFN0YXRpY1N0YXRlKGlyLlN0YXRpY0ludm9jYXRpb24gaW52b2NhdGlvbikgewogICAgaWYgKF91bmV4cGVjdGVkRm9yZWlnbkFyZ3VtZW50cyhpbnZvY2F0aW9uLAogICAgICAgIG1pblBvc2l0aW9uYWw6IDAsIG1heFBvc2l0aW9uYWw6IDApKSB7CiAgICAgIC8vIFJlc3VsdCBleHBlY3RlZCBvbiBzdGFjay4KICAgICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCkpOwogICAgICByZXR1cm47CiAgICB9CgogICAgcHVzaChuZXcgSEZvcmVpZ25Db2RlKGpzLmpzLnBhcnNlRm9yZWlnbkpTKF9uYW1lci5zdGF0aWNTdGF0ZUhvbGRlciksCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUsIDxISW5zdHJ1Y3Rpb24+W10sCiAgICAgICAgbmF0aXZlQmVoYXZpb3I6IE5hdGl2ZUJlaGF2aW9yLkRFUEVORFNfT1RIRVIpKTsKICB9CgogIHZvaWQgX2hhbmRsZUZvcmVpZ25Kc0dldE5hbWUoaXIuU3RhdGljSW52b2NhdGlvbiBpbnZvY2F0aW9uKSB7CiAgICBpZiAoX3VuZXhwZWN0ZWRGb3JlaWduQXJndW1lbnRzKGludm9jYXRpb24sCiAgICAgICAgbWluUG9zaXRpb25hbDogMSwgbWF4UG9zaXRpb25hbDogMSkpIHsKICAgICAgLy8gUmVzdWx0IGV4cGVjdGVkIG9uIHN0YWNrLgogICAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpci5Ob2RlIGFyZ3VtZW50ID0gaW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbC5maXJzdDsKICAgIGFyZ3VtZW50LmFjY2VwdCh0aGlzKTsKICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IHBvcCgpOwoKICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIQ29uc3RhbnQpIHsKICAgICAganMuTmFtZSBuYW1lID0gX2dldE5hbWVGb3JKc0dldE5hbWUoaW5zdHJ1Y3Rpb24uY29uc3RhbnQsIF9uYW1lcik7CiAgICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudFN0cmluZ0Zyb21OYW1lKG5hbWUsIGNsb3NlZFdvcmxkKSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U3Bhbm5hYmxlKHRhcmdldEVsZW1lbnQsIGFyZ3VtZW50KSwKICAgICAgICBNZXNzYWdlS2luZC5HRU5FUklDLAogICAgICAgIHsndGV4dCc6ICdFcnJvcjogRXhwZWN0ZWQgYSBKc0dldE5hbWUgZW51bSB2YWx1ZS4nfSk7CiAgICAvLyBSZXN1bHQgZXhwZWN0ZWQgb24gc3RhY2suCiAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKSk7CiAgfQoKICBpbnQgX2V4dHJhY3RFbnVtSW5kZXhGcm9tQ29uc3RhbnRWYWx1ZSgKICAgICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50KSB7CiAgICBpZiAoY29uc3RhbnQgaXMgQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlKSB7CiAgICAgIGlmIChjb25zdGFudC50eXBlLmVsZW1lbnQgPT0gY2xhc3NFbGVtZW50KSB7CiAgICAgICAgYXNzZXJ0KGNvbnN0YW50LmZpZWxkcy5sZW5ndGggPT0gMSB8fCBjb25zdGFudC5maWVsZHMubGVuZ3RoID09IDIpOwogICAgICAgIENvbnN0YW50VmFsdWUgaW5kZXhDb25zdGFudCA9IGNvbnN0YW50LmZpZWxkcy52YWx1ZXMuZmlyc3Q7CiAgICAgICAgaWYgKGluZGV4Q29uc3RhbnQgaXMgSW50Q29uc3RhbnRWYWx1ZSkgewogICAgICAgICAgcmV0dXJuIGluZGV4Q29uc3RhbnQuaW50VmFsdWUudG9JbnQoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIFtqcy5OYW1lXSBmb3IgdGhlIGBKc0dldE5hbWVgIFtjb25zdGFudF0gdmFsdWUuCiAganMuTmFtZSBfZ2V0TmFtZUZvckpzR2V0TmFtZShDb25zdGFudFZhbHVlIGNvbnN0YW50LCBNb2R1bGFyTmFtZXIgbmFtZXIpIHsKICAgIGludCBpbmRleCA9IF9leHRyYWN0RW51bUluZGV4RnJvbUNvbnN0YW50VmFsdWUoCiAgICAgICAgY29uc3RhbnQsIF9jb21tb25FbGVtZW50cy5qc0dldE5hbWVFbnVtKTsKICAgIGlmIChpbmRleCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBuYW1lci5nZXROYW1lRm9ySnNHZXROYW1lKAogICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsIEpzR2V0TmFtZS52YWx1ZXNbaW5kZXhdKTsKICB9CgogIHZvaWQgX2hhbmRsZUZvcmVpZ25Kc0VtYmVkZGVkR2xvYmFsKGlyLlN0YXRpY0ludm9jYXRpb24gaW52b2NhdGlvbikgewogICAgaWYgKF91bmV4cGVjdGVkRm9yZWlnbkFyZ3VtZW50cyhpbnZvY2F0aW9uLAogICAgICAgIG1pblBvc2l0aW9uYWw6IDIsIG1heFBvc2l0aW9uYWw6IDIpKSB7CiAgICAgIC8vIFJlc3VsdCBleHBlY3RlZCBvbiBzdGFjay4KICAgICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCkpOwogICAgICByZXR1cm47CiAgICB9CiAgICBTdHJpbmcgZ2xvYmFsTmFtZSA9IF9mb3JlaWduQ29uc3RhbnRTdHJpbmdBcmd1bWVudCgKICAgICAgICBpbnZvY2F0aW9uLCAxLCAnSlNfRU1CRURERURfR0xPQkFMJywgJ3NlY29uZCAnKTsKICAgIGpzLlRlbXBsYXRlIGV4cHIgPSBqcy5qcy5leHByZXNzaW9uVGVtcGxhdGVZaWVsZGluZygKICAgICAgICBfZW1pdHRlci5nZW5lcmF0ZUVtYmVkZGVkR2xvYmFsQWNjZXNzKGdsb2JhbE5hbWUpKTsKCiAgICBOYXRpdmVCZWhhdmlvciBuYXRpdmVCZWhhdmlvciA9CiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0TmF0aXZlQmVoYXZpb3JGb3JKc0VtYmVkZGVkR2xvYmFsQ2FsbChpbnZvY2F0aW9uKTsKICAgIGFzc2VydCgKICAgICAgICBuYXRpdmVCZWhhdmlvciAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KF9lbGVtZW50TWFwLmdldFNwYW5uYWJsZSh0YXJnZXRFbGVtZW50LCBpbnZvY2F0aW9uKSwKICAgICAgICAgICAgIk5vIE5hdGl2ZUJlaGF2aW9yIGZvciAkaW52b2NhdGlvbiIpKTsKCiAgICBBYnN0cmFjdFZhbHVlIHNzYVR5cGUgPQogICAgICAgIF90eXBlSW5mZXJlbmNlTWFwLnR5cGVGcm9tTmF0aXZlQmVoYXZpb3IobmF0aXZlQmVoYXZpb3IsIGNsb3NlZFdvcmxkKTsKICAgIHB1c2gobmV3IEhGb3JlaWduQ29kZShleHByLCBzc2FUeXBlLCBjb25zdCA8SEluc3RydWN0aW9uPltdLAogICAgICAgIG5hdGl2ZUJlaGF2aW9yOiBuYXRpdmVCZWhhdmlvcikpOwogIH0KCiAgdm9pZCBfaGFuZGxlRm9yZWlnbkpzQnVpbHRpbihpci5TdGF0aWNJbnZvY2F0aW9uIGludm9jYXRpb24pIHsKICAgIGlmIChfdW5leHBlY3RlZEZvcmVpZ25Bcmd1bWVudHMoaW52b2NhdGlvbiwgbWluUG9zaXRpb25hbDogMikpIHsKICAgICAgLy8gUmVzdWx0IGV4cGVjdGVkIG9uIHN0YWNrLgogICAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBMaXN0PGlyLkV4cHJlc3Npb24+IGFyZ3VtZW50cyA9IGludm9jYXRpb24uYXJndW1lbnRzLnBvc2l0aW9uYWw7CiAgICBpci5FeHByZXNzaW9uIG5hbWVBcmd1bWVudCA9IGFyZ3VtZW50c1sxXTsKCiAgICBuYW1lQXJndW1lbnQuYWNjZXB0KHRoaXMpOwogICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gcG9wKCk7CgogICAganMuVGVtcGxhdGUgdGVtcGxhdGU7CiAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSENvbnN0YW50KSB7CiAgICAgIHRlbXBsYXRlID0gX2dldEpzQnVpbHRpblRlbXBsYXRlKGluc3RydWN0aW9uLmNvbnN0YW50LCBfZW1pdHRlcik7CiAgICB9CiAgICBpZiAodGVtcGxhdGUgPT0gbnVsbCkgewogICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICBfZWxlbWVudE1hcC5nZXRTcGFubmFibGUodGFyZ2V0RWxlbWVudCwgbmFtZUFyZ3VtZW50KSwKICAgICAgICAgIE1lc3NhZ2VLaW5kLkdFTkVSSUMsCiAgICAgICAgICB7J3RleHQnOiAnRXJyb3I6IEV4cGVjdGVkIGEgSnNCdWlsdGluIGVudW0gdmFsdWUuJ30pOwogICAgICAvLyBSZXN1bHQgZXhwZWN0ZWQgb24gc3RhY2suCiAgICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMgPSA8SEluc3RydWN0aW9uPltdOwogICAgZm9yIChpci5FeHByZXNzaW9uIGFyZ3VtZW50IGluIGFyZ3VtZW50cy5za2lwKDIpKSB7CiAgICAgIGFyZ3VtZW50LmFjY2VwdCh0aGlzKTsKICAgICAgaW5wdXRzLmFkZChwb3AoKSk7CiAgICB9CgogICAgTmF0aXZlQmVoYXZpb3IgbmF0aXZlQmVoYXZpb3IgPQogICAgICAgIF9lbGVtZW50TWFwLmdldE5hdGl2ZUJlaGF2aW9yRm9ySnNCdWlsdGluQ2FsbChpbnZvY2F0aW9uKTsKICAgIGFzc2VydCgKICAgICAgICBuYXRpdmVCZWhhdmlvciAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KF9lbGVtZW50TWFwLmdldFNwYW5uYWJsZSh0YXJnZXRFbGVtZW50LCBpbnZvY2F0aW9uKSwKICAgICAgICAgICAgIk5vIE5hdGl2ZUJlaGF2aW9yIGZvciAkaW52b2NhdGlvbiIpKTsKCiAgICBBYnN0cmFjdFZhbHVlIHNzYVR5cGUgPQogICAgICAgIF90eXBlSW5mZXJlbmNlTWFwLnR5cGVGcm9tTmF0aXZlQmVoYXZpb3IobmF0aXZlQmVoYXZpb3IsIGNsb3NlZFdvcmxkKTsKICAgIHB1c2gobmV3IEhGb3JlaWduQ29kZSh0ZW1wbGF0ZSwgc3NhVHlwZSwgaW5wdXRzLAogICAgICAgIG5hdGl2ZUJlaGF2aW9yOiBuYXRpdmVCZWhhdmlvcikpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIFtqcy5UZW1wbGF0ZV0gZm9yIHRoZSBgSnNCdWlsdGluYCBbY29uc3RhbnRdIHZhbHVlLgogIGpzLlRlbXBsYXRlIF9nZXRKc0J1aWx0aW5UZW1wbGF0ZSgKICAgICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgTW9kdWxhckVtaXR0ZXIgZW1pdHRlcikgewogICAgaW50IGluZGV4ID0gX2V4dHJhY3RFbnVtSW5kZXhGcm9tQ29uc3RhbnRWYWx1ZSgKICAgICAgICBjb25zdGFudCwgX2NvbW1vbkVsZW1lbnRzLmpzQnVpbHRpbkVudW0pOwogICAgaWYgKGluZGV4ID09IG51bGwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIF90ZW1wbGF0ZUZvckJ1aWx0aW4oSnNCdWlsdGluLnZhbHVlc1tpbmRleF0pOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIEpTIHRlbXBsYXRlIGZvciB0aGUgZ2l2ZW4gW2J1aWx0aW5dLgogIGpzLlRlbXBsYXRlIF90ZW1wbGF0ZUZvckJ1aWx0aW4oSnNCdWlsdGluIGJ1aWx0aW4pIHsKICAgIHN3aXRjaCAoYnVpbHRpbikgewogICAgICBjYXNlIEpzQnVpbHRpbi5kYXJ0T2JqZWN0Q29uc3RydWN0b3I6CiAgICAgICAgQ2xhc3NFbnRpdHkgb2JqZWN0Q2xhc3MgPSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5vYmplY3RDbGFzczsKICAgICAgICByZXR1cm4ganMuanMKICAgICAgICAgICAgLmV4cHJlc3Npb25UZW1wbGF0ZVlpZWxkaW5nKF9lbWl0dGVyLnR5cGVBY2Nlc3Mob2JqZWN0Q2xhc3MpKTsKCiAgICAgIGNhc2UgSnNCdWlsdGluLmRhcnRDbG9zdXJlQ29uc3RydWN0b3I6CiAgICAgICAgQ2xhc3NFbnRpdHkgY2xvc3VyZUNsYXNzID0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuY2xvc3VyZUNsYXNzOwogICAgICAgIC8vIFRPRE8oc3JhKTogU2hvdWxkIGFkZCBhIGRlcGVuZGVuY3kgb24gdGhlIGNvbnN0cnVjdG9yIHVzZWQgYXMgYQogICAgICAgIC8vIHRva2VuLgogICAgICAgIHJlZ2lzdHJ5CiAgICAgICAgICAgIC8vIGlnbm9yZTpkZXByZWNhdGVkX21lbWJlcl91c2VfZnJvbV9zYW1lX3BhY2thZ2UKICAgICAgICAgICAgLnJlZ2lzdGVySW5zdGFudGlhdGVkQ2xhc3MoY2xvc3VyZUNsYXNzKTsKICAgICAgICByZXR1cm4ganMuanMKICAgICAgICAgICAgLmV4cHJlc3Npb25UZW1wbGF0ZVlpZWxkaW5nKF9lbWl0dGVyLnR5cGVBY2Nlc3MoY2xvc3VyZUNsYXNzKSk7CgogICAgICBjYXNlIEpzQnVpbHRpbi5pc0NoZWNrUHJvcGVydHlUb0pzQ29uc3RydWN0b3JOYW1lOgogICAgICAgIGludCBpc1ByZWZpeExlbmd0aCA9IF9uYW1lci5maXhlZE5hbWVzLm9wZXJhdG9ySXNQcmVmaXgubGVuZ3RoOwogICAgICAgIHJldHVybiBqcy5qcy5leHByZXNzaW9uVGVtcGxhdGVGb3IoJyMuc3Vic3RyaW5nKCRpc1ByZWZpeExlbmd0aCknKTsKCiAgICAgIGNhc2UgSnNCdWlsdGluLmlzRnVuY3Rpb25UeXBlOgogICAgICAgIHJldHVybiBfcnRpRW5jb2Rlci50ZW1wbGF0ZUZvcklzRnVuY3Rpb25UeXBlOwoKICAgICAgY2FzZSBKc0J1aWx0aW4uaXNGdXR1cmVPclR5cGU6CiAgICAgICAgcmV0dXJuIF9ydGlFbmNvZGVyLnRlbXBsYXRlRm9ySXNGdXR1cmVPclR5cGU7CgogICAgICBjYXNlIEpzQnVpbHRpbi5pc1ZvaWRUeXBlOgogICAgICAgIHJldHVybiBfcnRpRW5jb2Rlci50ZW1wbGF0ZUZvcklzVm9pZFR5cGU7CgogICAgICBjYXNlIEpzQnVpbHRpbi5pc0R5bmFtaWNUeXBlOgogICAgICAgIHJldHVybiBfcnRpRW5jb2Rlci50ZW1wbGF0ZUZvcklzRHluYW1pY1R5cGU7CgogICAgICBjYXNlIEpzQnVpbHRpbi5pc0pzSW50ZXJvcFR5cGVBcmd1bWVudDoKICAgICAgICByZXR1cm4gX3J0aUVuY29kZXIudGVtcGxhdGVGb3JJc0pzSW50ZXJvcFR5cGVBcmd1bWVudDsKCiAgICAgIGNhc2UgSnNCdWlsdGluLnJhd1J0aVRvSnNDb25zdHJ1Y3Rvck5hbWU6CiAgICAgICAgcmV0dXJuIGpzLmpzLmV4cHJlc3Npb25UZW1wbGF0ZUZvcigiIy5uYW1lIik7CgogICAgICBjYXNlIEpzQnVpbHRpbi5yYXdSdW50aW1lVHlwZToKICAgICAgICByZXR1cm4ganMuanMuZXhwcmVzc2lvblRlbXBsYXRlRm9yKCIjLmNvbnN0cnVjdG9yIik7CgogICAgICBjYXNlIEpzQnVpbHRpbi5pc1N1YnR5cGU6CiAgICAgICAgLy8gVE9ETyhmbG9pdHNjaCk6IG1vdmUgdGhpcyBjbG9zZXIgdG8gd2hlcmUgaXMtY2hlY2sgcHJvcGVydGllcyBhcmUKICAgICAgICAvLyBidWlsdC4KICAgICAgICBTdHJpbmcgaXNQcmVmaXggPSBfbmFtZXIuZml4ZWROYW1lcy5vcGVyYXRvcklzUHJlZml4OwogICAgICAgIHJldHVybiBqcy5qcy5leHByZXNzaW9uVGVtcGxhdGVGb3IoIignJGlzUHJlZml4JyArICMpIGluICMucHJvdG90eXBlIik7CgogICAgICBjYXNlIEpzQnVpbHRpbi5pc0dpdmVuVHlwZVJ0aToKICAgICAgICByZXR1cm4ganMuanMuZXhwcmVzc2lvblRlbXBsYXRlRm9yKCcjLm5hbWUgPT09ICMnKTsKCiAgICAgIGNhc2UgSnNCdWlsdGluLmdldE1ldGFkYXRhOgogICAgICAgIFN0cmluZyBtZXRhZGF0YUFjY2VzcyA9CiAgICAgICAgICAgIF9lbWl0dGVyLmdlbmVyYXRlRW1iZWRkZWRHbG9iYWxBY2Nlc3NTdHJpbmcoTUVUQURBVEEpOwogICAgICAgIHJldHVybiBqcy5qcy5leHByZXNzaW9uVGVtcGxhdGVGb3IoIiRtZXRhZGF0YUFjY2Vzc1sjXSIpOwoKICAgICAgY2FzZSBKc0J1aWx0aW4uZ2V0VHlwZToKICAgICAgICBTdHJpbmcgdHlwZXNBY2Nlc3MgPSBfZW1pdHRlci5nZW5lcmF0ZUVtYmVkZGVkR2xvYmFsQWNjZXNzU3RyaW5nKFRZUEVTKTsKICAgICAgICByZXR1cm4ganMuanMuZXhwcmVzc2lvblRlbXBsYXRlRm9yKCIkdHlwZXNBY2Nlc3NbI10iKTsKCiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmVwb3J0ZXIuaW50ZXJuYWxFcnJvcigKICAgICAgICAgICAgTk9fTE9DQVRJT05fU1BBTk5BQkxFLCAiVW5oYW5kbGVkIEJ1aWx0aW46ICRidWlsdGluIik7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICB2b2lkIF9oYW5kbGVGb3JlaWduSnNHZXRGbGFnKGlyLlN0YXRpY0ludm9jYXRpb24gaW52b2NhdGlvbikgewogICAgaWYgKF91bmV4cGVjdGVkRm9yZWlnbkFyZ3VtZW50cyhpbnZvY2F0aW9uLAogICAgICAgIG1pblBvc2l0aW9uYWw6IDEsIG1heFBvc2l0aW9uYWw6IDEpKSB7CiAgICAgIHN0YWNrLmFkZCgKICAgICAgICAgIC8vIFJlc3VsdCBleHBlY3RlZCBvbiBzdGFjay4KICAgICAgICAgIGdyYXBoLmFkZENvbnN0YW50Qm9vbChmYWxzZSwgY2xvc2VkV29ybGQpKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgU3RyaW5nIG5hbWUgPSBfZm9yZWlnbkNvbnN0YW50U3RyaW5nQXJndW1lbnQoaW52b2NhdGlvbiwgMCwgJ0pTX0dFVF9GTEFHJyk7CiAgICBib29sIHZhbHVlID0gX2dldEZsYWdWYWx1ZShuYW1lKTsKICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7CiAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgIF9lbGVtZW50TWFwLmdldFNwYW5uYWJsZSh0YXJnZXRFbGVtZW50LCBpbnZvY2F0aW9uKSwKICAgICAgICAgIE1lc3NhZ2VLaW5kLkdFTkVSSUMsCiAgICAgICAgICB7J3RleHQnOiAnRXJyb3I6IFVua25vd24gaW50ZXJuYWwgZmxhZyAiJG5hbWUiLid9KTsKICAgIH0gZWxzZSB7CiAgICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudEJvb2wodmFsdWUsIGNsb3NlZFdvcmxkKSk7CiAgICB9CiAgfQoKICB2b2lkIF9oYW5kbGVKc0ludGVyY2VwdG9yQ29uc3RhbnQoaXIuU3RhdGljSW52b2NhdGlvbiBpbnZvY2F0aW9uKSB7CiAgICAvLyBTaW5nbGUgYXJndW1lbnQgbXVzdCBiZSBhIFR5cGVDb25zdGFudCB3aGljaCBpcyBjb252ZXJ0ZWQgaW50byBhCiAgICAvLyBJbnRlcmNlcHRvckNvbnN0YW50LgogICAgaWYgKF91bmV4cGVjdGVkRm9yZWlnbkFyZ3VtZW50cyhpbnZvY2F0aW9uLAogICAgICAgIG1pblBvc2l0aW9uYWw6IDEsIG1heFBvc2l0aW9uYWw6IDEpKSB7CiAgICAgIC8vIFJlc3VsdCBleHBlY3RlZCBvbiBzdGFjay4KICAgICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCkpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpci5FeHByZXNzaW9uIGFyZ3VtZW50ID0gaW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbC5zaW5nbGU7CiAgICBhcmd1bWVudC5hY2NlcHQodGhpcyk7CiAgICBISW5zdHJ1Y3Rpb24gYXJndW1lbnRJbnN0cnVjdGlvbiA9IHBvcCgpOwogICAgaWYgKGFyZ3VtZW50SW5zdHJ1Y3Rpb24gaXMgSENvbnN0YW50KSB7CiAgICAgIENvbnN0YW50VmFsdWUgYXJndW1lbnRDb25zdGFudCA9IGFyZ3VtZW50SW5zdHJ1Y3Rpb24uY29uc3RhbnQ7CiAgICAgIGlmIChhcmd1bWVudENvbnN0YW50IGlzIFR5cGVDb25zdGFudFZhbHVlICYmCiAgICAgICAgICBhcmd1bWVudENvbnN0YW50LnJlcHJlc2VudGVkVHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlID0gYXJndW1lbnRDb25zdGFudC5yZXByZXNlbnRlZFR5cGU7CiAgICAgICAgLy8gVE9ETyhzcmEpOiBDaGVjayB0aGF0IHR5cGUgaXMgYSBzdWJjbGFzcyBvZiBbSW50ZXJjZXB0b3JdLgogICAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSBuZXcgSW50ZXJjZXB0b3JDb25zdGFudFZhbHVlKHR5cGUuZWxlbWVudCk7CiAgICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gZ3JhcGguYWRkQ29uc3RhbnQoY29uc3RhbnQsIGNsb3NlZFdvcmxkKTsKICAgICAgICBzdGFjay5hZGQoaW5zdHJ1Y3Rpb24pOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQoKICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICBfZWxlbWVudE1hcC5nZXRTcGFubmFibGUodGFyZ2V0RWxlbWVudCwgaW52b2NhdGlvbiksCiAgICAgICAgTWVzc2FnZUtpbmQuV1JPTkdfQVJHVU1FTlRfRk9SX0pTX0lOVEVSQ0VQVE9SX0NPTlNUQU5UKTsKICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpKTsKICB9CgogIHZvaWQgX2hhbmRsZUZvcmVpZ25HZXRJbnRlcmNlcHRvcihpci5TdGF0aWNJbnZvY2F0aW9uIGludm9jYXRpb24pIHsKICAgIC8vIFNpbmdsZSBhcmd1bWVudCBpcyB0aGUgaW50ZXJjZXB0ZWQgb2JqZWN0LgogICAgaWYgKF91bmV4cGVjdGVkRm9yZWlnbkFyZ3VtZW50cyhpbnZvY2F0aW9uLAogICAgICAgIG1pblBvc2l0aW9uYWw6IDEsIG1heFBvc2l0aW9uYWw6IDEpKSB7CiAgICAgIC8vIFJlc3VsdCBleHBlY3RlZCBvbiBzdGFjay4KICAgICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCkpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpci5FeHByZXNzaW9uIGFyZ3VtZW50ID0gaW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbC5zaW5nbGU7CiAgICBhcmd1bWVudC5hY2NlcHQodGhpcyk7CiAgICBISW5zdHJ1Y3Rpb24gYXJndW1lbnRJbnN0cnVjdGlvbiA9IHBvcCgpOwoKICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0KICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkQ2FsbChpbnZvY2F0aW9uLCBpbnZvY2F0aW9uKTsKICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9CiAgICAgICAgX2ludGVyY2VwdG9yRm9yKGFyZ3VtZW50SW5zdHJ1Y3Rpb24sIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIHN0YWNrLmFkZChpbnN0cnVjdGlvbik7CiAgfQoKICB2b2lkIF9oYW5kbGVGb3JlaWduR2V0SlNBcnJheUludGVyb3BSdGkoaXIuU3RhdGljSW52b2NhdGlvbiBpbnZvY2F0aW9uKSB7CiAgICBpZiAoX3VuZXhwZWN0ZWRGb3JlaWduQXJndW1lbnRzKGludm9jYXRpb24sCiAgICAgICAgICAgIG1pblBvc2l0aW9uYWw6IDAsIG1heFBvc2l0aW9uYWw6IDApIHx8CiAgICAgICAgIW9wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSkgewogICAgICAvLyBSZXN1bHQgZXhwZWN0ZWQgb24gc3RhY2suCiAgICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gVE9ETyhzcmEpOiBJbnRyb2R1Y2UgJ2FueScgdHlwZS4KICAgIEludGVyZmFjZVR5cGUgaW50ZXJvcFR5cGUgPQogICAgICAgIEludGVyZmFjZVR5cGUoX2NvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcywgW0R5bmFtaWNUeXBlKCldKTsKICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0KICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkQ2FsbChpbnZvY2F0aW9uLCBpbnZvY2F0aW9uKTsKICAgIEhJbnN0cnVjdGlvbiBydGkgPSBITG9hZFR5cGUoaW50ZXJvcFR5cGUsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKQogICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgICBwdXNoKHJ0aSk7CiAgfQoKICB2b2lkIF9oYW5kbGVGb3JlaWduSnMoaXIuU3RhdGljSW52b2NhdGlvbiBpbnZvY2F0aW9uKSB7CiAgICBpZiAoX3VuZXhwZWN0ZWRGb3JlaWduQXJndW1lbnRzKGludm9jYXRpb24sCiAgICAgICAgbWluUG9zaXRpb25hbDogMiwgbWF4UG9zaXRpb25hbDogbnVsbCwgdHlwZUFyZ3VtZW50Q291bnQ6IDEpKSB7CiAgICAgIC8vIFJlc3VsdCBleHBlY3RlZCBvbiBzdGFjay4KICAgICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCkpOwogICAgICByZXR1cm47CiAgICB9CgogICAgTmF0aXZlQmVoYXZpb3IgbmF0aXZlQmVoYXZpb3IgPQogICAgICAgIF9lbGVtZW50TWFwLmdldE5hdGl2ZUJlaGF2aW9yRm9ySnNDYWxsKGludm9jYXRpb24pOwogICAgYXNzZXJ0KAogICAgICAgIG5hdGl2ZUJlaGF2aW9yICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoX2VsZW1lbnRNYXAuZ2V0U3Bhbm5hYmxlKHRhcmdldEVsZW1lbnQsIGludm9jYXRpb24pLAogICAgICAgICAgICAiTm8gTmF0aXZlQmVoYXZpb3IgZm9yICRpbnZvY2F0aW9uIikpOwoKICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMgPSA8SEluc3RydWN0aW9uPltdOwogICAgZm9yIChpci5FeHByZXNzaW9uIGFyZ3VtZW50IGluIGludm9jYXRpb24uYXJndW1lbnRzLnBvc2l0aW9uYWwuc2tpcCgyKSkgewogICAgICBhcmd1bWVudC5hY2NlcHQodGhpcyk7CiAgICAgIGlucHV0cy5hZGQocG9wKCkpOwogICAgfQoKICAgIGlmIChuYXRpdmVCZWhhdmlvci5jb2RlVGVtcGxhdGUucG9zaXRpb25hbEFyZ3VtZW50Q291bnQgIT0gaW5wdXRzLmxlbmd0aCkgewogICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICBfZWxlbWVudE1hcC5nZXRTcGFubmFibGUodGFyZ2V0RWxlbWVudCwgaW52b2NhdGlvbiksCiAgICAgICAgICBNZXNzYWdlS2luZC5HRU5FUklDLCB7CiAgICAgICAgJ3RleHQnOiAnTWlzbWF0Y2ggYmV0d2VlbiBudW1iZXIgb2YgcGxhY2Vob2xkZXJzJwogICAgICAgICAgICAnIGFuZCBudW1iZXIgb2YgYXJndW1lbnRzLicKICAgICAgfSk7CiAgICAgIC8vIFJlc3VsdCBleHBlY3RlZCBvbiBzdGFjay4KICAgICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCkpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKEhhc0NhcHR1cmVkUGxhY2Vob2xkZXJzLmNoZWNrKG5hdGl2ZUJlaGF2aW9yLmNvZGVUZW1wbGF0ZS5hc3QpKSB7CiAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgIF9lbGVtZW50TWFwLmdldFNwYW5uYWJsZSh0YXJnZXRFbGVtZW50LCBpbnZvY2F0aW9uKSwKICAgICAgICAgIE1lc3NhZ2VLaW5kLkpTX1BMQUNFSE9MREVSX0NBUFRVUkUpOwogICAgfQoKICAgIEFic3RyYWN0VmFsdWUgc3NhVHlwZSA9CiAgICAgICAgX3R5cGVJbmZlcmVuY2VNYXAudHlwZUZyb21OYXRpdmVCZWhhdmlvcihuYXRpdmVCZWhhdmlvciwgY2xvc2VkV29ybGQpOwoKICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0gbnVsbDsKICAgIEhJbnN0cnVjdGlvbiBjb2RlID0gbmV3IEhGb3JlaWduQ29kZSgKICAgICAgICBuYXRpdmVCZWhhdmlvci5jb2RlVGVtcGxhdGUsIHNzYVR5cGUsIGlucHV0cywKICAgICAgICBpc1N0YXRlbWVudDogIW5hdGl2ZUJlaGF2aW9yLmNvZGVUZW1wbGF0ZS5pc0V4cHJlc3Npb24sCiAgICAgICAgZWZmZWN0czogbmF0aXZlQmVoYXZpb3Iuc2lkZUVmZmVjdHMsCiAgICAgICAgbmF0aXZlQmVoYXZpb3I6IG5hdGl2ZUJlaGF2aW9yKQogICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgICBwdXNoKGNvZGUpOwoKICAgIERhcnRUeXBlIHR5cGUgPSBfZ2V0RGFydFR5cGVJZlZhbGlkKGludm9jYXRpb24uYXJndW1lbnRzLnR5cGVzLnNpbmdsZSk7CiAgICBBYnN0cmFjdFZhbHVlIHRydXN0ZWRNYXNrID0gX3R5cGVCdWlsZGVyLnRydXN0VHlwZU1hc2sodHlwZSk7CgogICAgaWYgKHRydXN0ZWRNYXNrICE9IG51bGwpIHsKICAgICAgLy8gV2Ugb25seSBhbGxvdyB0aGUgdHlwZSBhcmd1bWVudCB0byBuYXJyb3cgYGR5bmFtaWNgLCB3aGljaCBwcm9iYWJseQogICAgICAvLyBjb21lcyBmcm9tIGFuIHVuc3BlY2lmaWVkIHJldHVybiB0eXBlIGluIHRoZSBOYXRpdmVCZWhhdmlvci4KICAgICAgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAuY29udGFpbnNBbGwoY29kZS5pbnN0cnVjdGlvblR5cGUpCiAgICAgICAgICAuaXNQb3RlbnRpYWxseVRydWUpIHsKICAgICAgICAvLyBPdmVyd3JpdGUgdGhlIHR5cGUgd2l0aCB0aGUgbmFycm93ZXIgdHlwZS4KICAgICAgICBjb2RlLmluc3RydWN0aW9uVHlwZSA9IHRydXN0ZWRNYXNrOwogICAgICB9IGVsc2UgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAuY29udGFpbnModHJ1c3RlZE1hc2ssIGNvZGUuaW5zdHJ1Y3Rpb25UeXBlKQogICAgICAgICAgLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgICAgLy8gSXQgaXMgYWNjZXB0YWJsZSBmb3IgdGhlIHR5cGUgcGFyYW1ldGVyIHRvIGJlIGJyb2FkZXIgdGhhbiB0aGUKICAgICAgICAvLyBzcGVjaWZpZWQgdHlwZS4KICAgICAgfSBlbHNlIHsKICAgICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICAgIF9lbGVtZW50TWFwLmdldFNwYW5uYWJsZSh0YXJnZXRFbGVtZW50LCBpbnZvY2F0aW9uKSwKICAgICAgICAgICAgTWVzc2FnZUtpbmQuR0VORVJJQywgewogICAgICAgICAgJ3RleHQnOiAnVHlwZSBhcmd1bWVudCB0b28gbmFycm93IGZvciBzcGVjaWZpZWQgYmVoYXZpb3IgdHlwZSAnCiAgICAgICAgICAgICAgJygke3RydXN0ZWRNYXNrfSBkb2VzIG5vdCBhbGxvdyAnCiAgICAgICAgICAgICAgJ2FsbCB2YWx1ZXMgaW4gJHtjb2RlLmluc3RydWN0aW9uVHlwZX0pJwogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIF9oYW5kbGVKc1N0cmluZ0NvbmNhdChpci5TdGF0aWNJbnZvY2F0aW9uIGludm9jYXRpb24pIHsKICAgIGlmIChfdW5leHBlY3RlZEZvcmVpZ25Bcmd1bWVudHMoaW52b2NhdGlvbiwKICAgICAgICBtaW5Qb3NpdGlvbmFsOiAyLCBtYXhQb3NpdGlvbmFsOiAyKSkgewogICAgICAvLyBSZXN1bHQgZXhwZWN0ZWQgb24gc3RhY2suCiAgICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cyA9IF92aXNpdFBvc2l0aW9uYWxBcmd1bWVudHMoaW52b2NhdGlvbi5hcmd1bWVudHMpOwogICAgcHVzaChuZXcgSFN0cmluZ0NvbmNhdCgKICAgICAgICBpbnB1dHNbMF0sIGlucHV0c1sxXSwgX2Fic3RyYWN0VmFsdWVEb21haW4uc3RyaW5nVHlwZSkpOwogIH0KCiAgdm9pZCBfcHVzaFN0YXRpY0ludm9jYXRpb24oTWVtYmVyRW50aXR5IHRhcmdldCwgTGlzdDxISW5zdHJ1Y3Rpb24+IGFyZ3VtZW50cywKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlTWFzaywgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cywKICAgICAge1NvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uLCBJbnRlcmZhY2VUeXBlIGluc3RhbmNlVHlwZX0pIHsKICAgIC8vIFRPRE8ocmVkZW1wdGlvbik6IFBhc3MgY3VycmVudCBub2RlIGlmIG5lZWRlZC4KICAgIGlmIChfdHJ5SW5saW5lTWV0aG9kKAogICAgICAgIHRhcmdldCwgbnVsbCwgbnVsbCwgYXJndW1lbnRzLCB0eXBlQXJndW1lbnRzLCBudWxsLCBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICBpbnN0YW5jZVR5cGU6IGluc3RhbmNlVHlwZSkpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHZhciBpbnN0cnVjdGlvbjsKICAgIGlmIChjbG9zZWRXb3JsZC5uYXRpdmVEYXRhLmlzSnNJbnRlcm9wTWVtYmVyKHRhcmdldCkpIHsKICAgICAgaW5zdHJ1Y3Rpb24gPSBfaW52b2tlSnNJbnRlcm9wRnVuY3Rpb24odGFyZ2V0LCBhcmd1bWVudHMpOwogICAgfSBlbHNlIHsKICAgICAgaW5zdHJ1Y3Rpb24gPSBuZXcgSEludm9rZVN0YXRpYygKICAgICAgICAgIHRhcmdldCwgYXJndW1lbnRzLCB0eXBlTWFzaywgdHlwZUFyZ3VtZW50cywKICAgICAgICAgIHRhcmdldENhblRocm93OiAhX2luZmVycmVkRGF0YS5nZXRDYW5ub3RUaHJvdyh0YXJnZXQpKQogICAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKCiAgICAgIGlmIChfY3VycmVudEltcGxpY2l0SW5zdGFudGlhdGlvbnMuaXNOb3RFbXB0eSkgewogICAgICAgIGluc3RydWN0aW9uLmluc3RhbnRpYXRlZFR5cGVzID0KICAgICAgICAgICAgbmV3IExpc3Q8SW50ZXJmYWNlVHlwZT4uZnJvbShfY3VycmVudEltcGxpY2l0SW5zdGFudGlhdGlvbnMpOwogICAgICB9CiAgICAgIGluc3RydWN0aW9uLnNpZGVFZmZlY3RzID0gX2luZmVycmVkRGF0YS5nZXRTaWRlRWZmZWN0c09mRWxlbWVudCh0YXJnZXQpOwogICAgfQogICAgcHVzaChpbnN0cnVjdGlvbik7CiAgfQoKICB2b2lkIF9wdXNoRHluYW1pY0ludm9jYXRpb24oCiAgICAgIGlyLk5vZGUgbm9kZSwKICAgICAgU3RhdGljVHlwZSBzdGF0aWNSZWNlaXZlclR5cGUsCiAgICAgIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXJUeXBlLAogICAgICBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGFyZ3VtZW50cywKICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cywKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIEFic3RyYWN0VmFsdWUgdHlwZUJvdW5kID0gX2Fic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAuY3JlYXRlRnJvbVN0YXRpY1R5cGUoc3RhdGljUmVjZWl2ZXJUeXBlLnR5cGUsCiAgICAgICAgICAgIGNsYXNzUmVsYXRpb246IHN0YXRpY1JlY2VpdmVyVHlwZS5yZWxhdGlvbiwgbnVsbGFibGU6IHRydWUpCiAgICAgICAgLmFic3RyYWN0VmFsdWU7CiAgICByZWNlaXZlclR5cGUgPSByZWNlaXZlclR5cGUgPT0gbnVsbAogICAgICAgID8gdHlwZUJvdW5kCiAgICAgICAgOiBfYWJzdHJhY3RWYWx1ZURvbWFpbi5pbnRlcnNlY3Rpb24ocmVjZWl2ZXJUeXBlLCB0eXBlQm91bmQpOwoKICAgIC8vIFdlIHByZWZlciB0byBub3QgaW5saW5lIGNlcnRhaW4gb3BlcmF0aW9ucyBvbiBpbmRleGFibGVzLAogICAgLy8gYmVjYXVzZSB0aGUgY29uc3RhbnQgZm9sZGVyIHdpbGwgaGFuZGxlIHRoZW0gYmV0dGVyIGFuZCB0dXJuCiAgICAvLyB0aGVtIGludG8gc2ltcGxlciBpbnN0cnVjdGlvbnMgdGhhdCBhbGxvdyBmdXJ0aGVyCiAgICAvLyBvcHRpbWl6YXRpb25zLgogICAgYm9vbCBpc09wdGltaXphYmxlT3BlcmF0aW9uT25JbmRleGFibGUoCiAgICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICAgIGJvb2wgaXNMZW5ndGggPSBzZWxlY3Rvci5pc0dldHRlciAmJiBzZWxlY3Rvci5uYW1lID09ICJsZW5ndGgiOwogICAgICBpZiAoaXNMZW5ndGggfHwgc2VsZWN0b3IuaXNJbmRleCkgewogICAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc1N1YnR5cGVPZigKICAgICAgICAgICAgZWxlbWVudC5lbmNsb3NpbmdDbGFzcywgX2NvbW1vbkVsZW1lbnRzLmpzSW5kZXhhYmxlQ2xhc3MpOwogICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLmlzSW5kZXhTZXQpIHsKICAgICAgICByZXR1cm4gY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNTdWJ0eXBlT2YoCiAgICAgICAgICAgIGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MsIF9jb21tb25FbGVtZW50cy5qc011dGFibGVJbmRleGFibGVDbGFzcyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CgogICAgYm9vbCBpc09wdGltaXphYmxlT3BlcmF0aW9uKFNlbGVjdG9yIHNlbGVjdG9yLCBNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgICBDbGFzc0VudGl0eSBjbHMgPSBlbGVtZW50LmVuY2xvc2luZ0NsYXNzOwogICAgICBpZiAoaXNPcHRpbWl6YWJsZU9wZXJhdGlvbk9uSW5kZXhhYmxlKHNlbGVjdG9yLCBlbGVtZW50KSkgcmV0dXJuIHRydWU7CiAgICAgIGlmICghX2ludGVyY2VwdG9yRGF0YS5pbnRlcmNlcHRlZENsYXNzZXMuY29udGFpbnMoY2xzKSkgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoc2VsZWN0b3IuaXNPcGVyYXRvcikgcmV0dXJuIHRydWU7CiAgICAgIGlmIChzZWxlY3Rvci5pc1NldHRlcikgcmV0dXJuIHRydWU7CiAgICAgIGlmIChzZWxlY3Rvci5pc0luZGV4KSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKHNlbGVjdG9yLmlzSW5kZXhTZXQpIHJldHVybiB0cnVlOwogICAgICBpZiAoZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuanNBcnJheUFkZCB8fAogICAgICAgICAgZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuanNBcnJheVJlbW92ZUxhc3QgfHwKICAgICAgICAgIF9jb21tb25FbGVtZW50cy5pc0pzU3RyaW5nU3BsaXQoZWxlbWVudCkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgTWVtYmVyRW50aXR5IGVsZW1lbnQgPQogICAgICAgIGNsb3NlZFdvcmxkLmxvY2F0ZVNpbmdsZU1lbWJlcihzZWxlY3RvciwgcmVjZWl2ZXJUeXBlKTsKICAgIGlmIChlbGVtZW50ICE9IG51bGwgJiYKICAgICAgICAhZWxlbWVudC5pc0ZpZWxkICYmCiAgICAgICAgIShlbGVtZW50LmlzR2V0dGVyICYmIHNlbGVjdG9yLmlzQ2FsbCkgJiYKICAgICAgICAhKGVsZW1lbnQuaXNGdW5jdGlvbiAmJiBzZWxlY3Rvci5pc0dldHRlcikgJiYKICAgICAgICAhaXNPcHRpbWl6YWJsZU9wZXJhdGlvbihzZWxlY3RvciwgZWxlbWVudCkpIHsKICAgICAgaWYgKF90cnlJbmxpbmVNZXRob2QoZWxlbWVudCwgc2VsZWN0b3IsIHJlY2VpdmVyVHlwZSwgYXJndW1lbnRzLAogICAgICAgICAgdHlwZUFyZ3VtZW50cywgbm9kZSwgc291cmNlSW5mb3JtYXRpb24pKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CgogICAgSEluc3RydWN0aW9uIHJlY2VpdmVyID0gYXJndW1lbnRzLmZpcnN0OwogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cyA9IDxISW5zdHJ1Y3Rpb24+W107CgogICAgc2VsZWN0b3IgPz89IF9lbGVtZW50TWFwLmdldFNlbGVjdG9yKG5vZGUpOwoKICAgIGJvb2wgaXNJbnRlcmNlcHRlZCA9CiAgICAgICAgY2xvc2VkV29ybGQuaW50ZXJjZXB0b3JEYXRhLmlzSW50ZXJjZXB0ZWRTZWxlY3RvcihzZWxlY3Rvcik7CgogICAgaWYgKGlzSW50ZXJjZXB0ZWQpIHsKICAgICAgSEludGVyY2VwdG9yIGludGVyY2VwdG9yID0gX2ludGVyY2VwdG9yRm9yKHJlY2VpdmVyLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIGlucHV0cy5hZGQoaW50ZXJjZXB0b3IpOwogICAgfQogICAgaW5wdXRzLmFkZEFsbChhcmd1bWVudHMpOwoKICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0VHlwZSA9CiAgICAgICAgX3R5cGVJbmZlcmVuY2VNYXAucmVzdWx0VHlwZU9mU2VsZWN0b3Ioc2VsZWN0b3IsIHJlY2VpdmVyVHlwZSk7CiAgICBpZiAoc2VsZWN0b3IuaXNHZXR0ZXIpIHsKICAgICAgcHVzaChuZXcgSEludm9rZUR5bmFtaWNHZXR0ZXIoc2VsZWN0b3IsIHJlY2VpdmVyVHlwZSwgZWxlbWVudCwgaW5wdXRzLAogICAgICAgICAgaXNJbnRlcmNlcHRlZCwgcmVzdWx0VHlwZSwgc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuaXNTZXR0ZXIpIHsKICAgICAgcHVzaChuZXcgSEludm9rZUR5bmFtaWNTZXR0ZXIoc2VsZWN0b3IsIHJlY2VpdmVyVHlwZSwgZWxlbWVudCwgaW5wdXRzLAogICAgICAgICAgaXNJbnRlcmNlcHRlZCwgcmVzdWx0VHlwZSwgc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuaXNDbG9zdXJlQ2FsbCkgewogICAgICBhc3NlcnQoIWlzSW50ZXJjZXB0ZWQpOwogICAgICBwdXNoKG5ldyBISW52b2tlQ2xvc3VyZSgKICAgICAgICAgIHNlbGVjdG9yLCByZWNlaXZlclR5cGUsIGlucHV0cywgcmVzdWx0VHlwZSwgdHlwZUFyZ3VtZW50cykKICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChuZXcgSEludm9rZUR5bmFtaWNNZXRob2Qoc2VsZWN0b3IsIHJlY2VpdmVyVHlwZSwgaW5wdXRzLCByZXN1bHRUeXBlLAogICAgICAgICAgdHlwZUFyZ3VtZW50cywgc291cmNlSW5mb3JtYXRpb24sCiAgICAgICAgICBpc0ludGVyY2VwdGVkOiBpc0ludGVyY2VwdGVkKSk7CiAgICB9CiAgfQoKICBIRm9yZWlnbkNvZGUgX2ludm9rZUpzSW50ZXJvcEZ1bmN0aW9uKAogICAgICBGdW5jdGlvbkVudGl0eSBlbGVtZW50LCBMaXN0PEhJbnN0cnVjdGlvbj4gYXJndW1lbnRzKSB7CiAgICBhc3NlcnQoY2xvc2VkV29ybGQubmF0aXZlRGF0YS5pc0pzSW50ZXJvcE1lbWJlcihlbGVtZW50KSk7CiAgICByZWdpc3RyeS5yZWdpc3Rlck5hdGl2ZU1ldGhvZChlbGVtZW50KTsKCiAgICBpZiAoZWxlbWVudCBpcyBDb25zdHJ1Y3RvckVudGl0eSAmJgogICAgICAgIGVsZW1lbnQuaXNGYWN0b3J5Q29uc3RydWN0b3IgJiYKICAgICAgICBfbmF0aXZlRGF0YS5pc0Fub255bW91c0pzSW50ZXJvcENsYXNzKGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MpKSB7CiAgICAgIC8vIEZhY3RvcnkgY29uc3RydWN0b3IgdGhhdCBpcyBzeW50YWN0aWMgc3VnYXIgZm9yIGNyZWF0aW5nIGEgSmF2YVNjcmlwdAogICAgICAvLyBvYmplY3QgbGl0ZXJhbC4KICAgICAgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IgPSBlbGVtZW50OwogICAgICBpbnQgaSA9IDA7CiAgICAgIGludCBwb3NpdGlvbnMgPSAwOwogICAgICB2YXIgZmlsdGVyZWRBcmd1bWVudHMgPSA8SEluc3RydWN0aW9uPltdOwogICAgICB2YXIgcGFyYW1ldGVyTmFtZU1hcCA9IG5ldyBNYXA8U3RyaW5nLCBqcy5FeHByZXNzaW9uPigpOwoKICAgICAgLy8gTm90ZTogd2UgZG9uJ3QgdXNlIGBjb25zdHJ1Y3Rvci5wYXJhbWV0ZXJTdHJ1Y3R1cmVgIGhlcmUgYmVjYXVzZQogICAgICAvLyB3ZSBkb24ndCBlbGlkZSBwYXJhbWV0ZXJzIHRvIGpzLWludGVyb3AgZXh0ZXJuYWwgc3RhdGljIHRhcmdldHMKICAgICAgLy8gKGluY2x1ZGluZyBmYWN0b3J5IGNvbnN0cnVjdG9ycy4pCiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IGNhbiB3ZSBlbGlkZSB0aG9zZSBwYXJhbWV0ZXJzPyBUaGlzIHNob3VsZCBiZQogICAgICAvLyBjb25zaXN0ZW50IHdpdGggd2hhdCB3ZSBkbyB3aXRoIGluc3RhbmNlIG1ldGhvZHMuCiAgICAgIGlyLlByb2NlZHVyZSBub2RlID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyRGVmaW5pdGlvbihjb25zdHJ1Y3Rvcikubm9kZTsKICAgICAgTGlzdDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBuYW1lZFBhcmFtZXRlcnMgPQogICAgICAgICAgbm9kZS5mdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMudG9MaXN0KCk7CiAgICAgIG5hbWVkUGFyYW1ldGVycy5zb3J0KG5hdGl2ZU9yZGVyaW5nKTsKICAgICAgZm9yIChpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlIGluIG5hbWVkUGFyYW1ldGVycykgewogICAgICAgIFN0cmluZyBwYXJhbWV0ZXJOYW1lID0gdmFyaWFibGUubmFtZTsKICAgICAgICAvLyBUT0RPKGphY29icik6IGNvbnNpZGVyIHRocm93aW5nIGlmIHBhcmFtZXRlciBuYW1lcyBkbyBub3QgbWF0Y2gKICAgICAgICAvLyBuYW1lcyBvZiBwcm9wZXJ0aWVzIGluIHRoZSBjbGFzcy4KICAgICAgICBISW5zdHJ1Y3Rpb24gYXJndW1lbnQgPSBhcmd1bWVudHNbaV07CiAgICAgICAgaWYgKGFyZ3VtZW50ICE9IG51bGwpIHsKICAgICAgICAgIGZpbHRlcmVkQXJndW1lbnRzLmFkZChhcmd1bWVudCk7CiAgICAgICAgICB2YXIganNOYW1lID0gX25hdGl2ZURhdGEuY29tcHV0ZVVuZXNjYXBlZEpTSW50ZXJvcE5hbWUocGFyYW1ldGVyTmFtZSk7CiAgICAgICAgICBwYXJhbWV0ZXJOYW1lTWFwW2pzTmFtZV0gPSBuZXcganMuSW50ZXJwb2xhdGVkRXhwcmVzc2lvbihwb3NpdGlvbnMrKyk7CiAgICAgICAgfQogICAgICAgIGkrKzsKICAgICAgfQogICAgICB2YXIgY29kZVRlbXBsYXRlID0KICAgICAgICAgIG5ldyBqcy5UZW1wbGF0ZShudWxsLCBqcy5vYmplY3RMaXRlcmFsKHBhcmFtZXRlck5hbWVNYXApKTsKCiAgICAgIHZhciBuYXRpdmVCZWhhdmlvciA9IG5ldyBOYXRpdmVCZWhhdmlvcigpLi5jb2RlVGVtcGxhdGUgPSBjb2RlVGVtcGxhdGU7CiAgICAgIGlmIChvcHRpb25zLnRydXN0SlNJbnRlcm9wVHlwZUFubm90YXRpb25zKSB7CiAgICAgICAgSW50ZXJmYWNlVHlwZSB0aGlzVHlwZSA9CiAgICAgICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0VGhpc1R5cGUoY29uc3RydWN0b3IuZW5jbG9zaW5nQ2xhc3MpOwogICAgICAgIG5hdGl2ZUJlaGF2aW9yLnR5cGVzUmV0dXJuZWQuYWRkKHRoaXNUeXBlKTsKICAgICAgfQogICAgICAvLyBUT0RPKGVmb3J0dW5hKTogU291cmNlIGluZm9ybWF0aW9uLgogICAgICByZXR1cm4gbmV3IEhGb3JlaWduQ29kZSgKICAgICAgICAgIGNvZGVUZW1wbGF0ZSwgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUsIGZpbHRlcmVkQXJndW1lbnRzLAogICAgICAgICAgbmF0aXZlQmVoYXZpb3I6IG5hdGl2ZUJlaGF2aW9yKTsKICAgIH0KCiAgICB2YXIgdGFyZ2V0ID0gbmV3IEhGb3JlaWduQ29kZSgKICAgICAgICBqcy5qcwogICAgICAgICAgICAucGFyc2VGb3JlaWduSlMoIiR7X25hdGl2ZURhdGEuZ2V0Rml4ZWRCYWNrZW5kTWV0aG9kUGF0aChlbGVtZW50KX0uIgogICAgICAgICAgICAgICAgIiR7X25hdGl2ZURhdGEuZ2V0Rml4ZWRCYWNrZW5kTmFtZShlbGVtZW50KX0iKSwKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSwKICAgICAgICA8SEluc3RydWN0aW9uPltdKTsKICAgIGFkZCh0YXJnZXQpOwogICAgLy8gU3RyaXAgb2ZmIHRyYWlsaW5nIGFyZ3VtZW50cyB0aGF0IHdlcmUgbm90IHNwZWNpZmllZC4KICAgIC8vIHdlIGNvdWxkIGFzc2VydCB0aGF0IHRoZSB0cmFpbGluZyBhcmd1bWVudHMgYXJlIGFsbCBudWxsLgogICAgLy8gVE9ETyhqYWNvYnIpOiByZXdyaXRlIG5hbWVkIGFyZ3VtZW50cyB0byBhbiBvYmplY3QgbGl0ZXJhbCBtYXRjaGluZwogICAgLy8gdGhlIGZhY3RvcnkgY29uc3RydWN0b3IgY2FzZS4KICAgIGFyZ3VtZW50cyA9IGFyZ3VtZW50cy53aGVyZSgoYXJnKSA9PiBhcmcgIT0gbnVsbCkudG9MaXN0KCk7CiAgICB2YXIgaW5wdXRzID0gPEhJbnN0cnVjdGlvbj5bdGFyZ2V0XS4uYWRkQWxsKGFyZ3VtZW50cyk7CgogICAgdmFyIG5hdGl2ZUJlaGF2aW9yID0gbmV3IE5hdGl2ZUJlaGF2aW9yKCkuLnNpZGVFZmZlY3RzLnNldEFsbFNpZGVFZmZlY3RzKCk7CgogICAgRGFydFR5cGUgdHlwZSA9IGVsZW1lbnQgaXMgQ29uc3RydWN0b3JFbnRpdHkKICAgICAgICA/IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0VGhpc1R5cGUoZWxlbWVudC5lbmNsb3NpbmdDbGFzcykKICAgICAgICA6IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlKGVsZW1lbnQpLnJldHVyblR5cGU7CiAgICAvLyBOYXRpdmUgYmVoYXZpb3IgZWZmZWN0cyBoZXJlIGFyZSBzaW1pbGFyIHRvIG5hdGl2ZS9iZWhhdmlvci5kYXJ0LgogICAgLy8gVGhlIHJldHVybiB0eXBlIGlzIGR5bmFtaWMgaWYgd2UgZG9uJ3QgdHJ1c3QganMtaW50ZXJvcCB0eXBlCiAgICAvLyBkZWNsYXJhdGlvbnMuCiAgICBuYXRpdmVCZWhhdmlvci50eXBlc1JldHVybmVkLmFkZCgKICAgICAgICBvcHRpb25zLnRydXN0SlNJbnRlcm9wVHlwZUFubm90YXRpb25zID8gdHlwZSA6IGNvbnN0IER5bmFtaWNUeXBlKCkpOwoKICAgIC8vIFRoZSBhbGxvY2F0aW9uIGVmZmVjdHMgaW5jbHVkZSB0aGUgZGVjbGFyZWQgdHlwZSBpZiBpdCBpcyBuYXRpdmUgKHdoaWNoCiAgICAvLyBpbmNsdWRlcyBqcyBpbnRlcm9wIHR5cGVzKS4KICAgIGlmICh0eXBlIGlzIEludGVyZmFjZVR5cGUgJiYgX25hdGl2ZURhdGEuaXNOYXRpdmVDbGFzcyh0eXBlLmVsZW1lbnQpKSB7CiAgICAgIG5hdGl2ZUJlaGF2aW9yLnR5cGVzSW5zdGFudGlhdGVkLmFkZCh0eXBlKTsKICAgIH0KCiAgICAvLyBJdCBhbHNvIGluY2x1ZGVzIGFueSBvdGhlciBKUyBpbnRlcm9wIHR5cGUgaWYgd2UgZG9uJ3QgdHJ1c3QgdGhlCiAgICAvLyBhbm5vdGF0aW9uIG9yIGlmIGlzIGRlY2xhcmVkIHRvbyBicm9hZC4KICAgIGlmICghb3B0aW9ucy50cnVzdEpTSW50ZXJvcFR5cGVBbm5vdGF0aW9ucyB8fAogICAgICAgIHR5cGUgPT0gX2NvbW1vbkVsZW1lbnRzLm9iamVjdFR5cGUgfHwKICAgICAgICB0eXBlIGlzIER5bmFtaWNUeXBlKSB7CiAgICAgIG5hdGl2ZUJlaGF2aW9yLnR5cGVzSW5zdGFudGlhdGVkLmFkZChfZWxlbWVudEVudmlyb25tZW50CiAgICAgICAgICAuZ2V0VGhpc1R5cGUoX2NvbW1vbkVsZW1lbnRzLmpzSmF2YVNjcmlwdE9iamVjdENsYXNzKSk7CiAgICB9CgogICAgU3RyaW5nIHRlbXBsYXRlOwogICAgaWYgKGVsZW1lbnQuaXNHZXR0ZXIpIHsKICAgICAgdGVtcGxhdGUgPSAnIyc7CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQuaXNTZXR0ZXIpIHsKICAgICAgdGVtcGxhdGUgPSAnIyA9ICMnOwogICAgfSBlbHNlIHsKICAgICAgdmFyIGFyZ3MgPSBuZXcgTGlzdC5maWxsZWQoYXJndW1lbnRzLmxlbmd0aCwgJyMnKS5qb2luKCcsJyk7CiAgICAgIHRlbXBsYXRlID0gZWxlbWVudC5pc0NvbnN0cnVjdG9yID8gIm5ldyAjKCRhcmdzKSIgOiAiIygkYXJncykiOwogICAgfQogICAganMuVGVtcGxhdGUgY29kZVRlbXBsYXRlID0ganMuanMucGFyc2VGb3JlaWduSlModGVtcGxhdGUpOwogICAgbmF0aXZlQmVoYXZpb3IuY29kZVRlbXBsYXRlID0gY29kZVRlbXBsYXRlOwoKICAgIC8vIFRPRE8oZWZvcnR1bmEpOiBBZGQgc291cmNlIGluZm9ybWF0aW9uLgogICAgcmV0dXJuIG5ldyBIRm9yZWlnbkNvZGUoCiAgICAgICAgY29kZVRlbXBsYXRlLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSwgaW5wdXRzLAogICAgICAgIG5hdGl2ZUJlaGF2aW9yOiBuYXRpdmVCZWhhdmlvcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RnVuY3Rpb25Ob2RlKGlyLkZ1bmN0aW9uTm9kZSBub2RlKSB7CiAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9CiAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZENyZWF0ZShub2RlKTsKICAgIENsb3N1cmVSZXByZXNlbnRhdGlvbkluZm8gY2xvc3VyZUluZm8gPQogICAgICAgIF9jbG9zdXJlRGF0YUxvb2t1cC5nZXRDbG9zdXJlSW5mbyhub2RlLnBhcmVudCk7CiAgICBDbGFzc0VudGl0eSBjbG9zdXJlQ2xhc3NFbnRpdHkgPSBjbG9zdXJlSW5mby5jbG9zdXJlQ2xhc3NFbnRpdHk7CgogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGNhcHR1cmVkVmFyaWFibGVzID0gPEhJbnN0cnVjdGlvbj5bXTsKICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaEluc3RhbmNlRmllbGQoY2xvc3VyZUNsYXNzRW50aXR5LAogICAgICAgIChfLCBGaWVsZEVudGl0eSBmaWVsZCkgewogICAgICBpZiAoX2ZpZWxkQW5hbHlzaXMuZ2V0RmllbGREYXRhKGZpZWxkKS5pc0VsaWRlZCkgcmV0dXJuOwogICAgICBjYXB0dXJlZFZhcmlhYmxlcwogICAgICAgICAgLmFkZChsb2NhbHNIYW5kbGVyLnJlYWRMb2NhbChjbG9zdXJlSW5mby5nZXRMb2NhbEZvckZpZWxkKGZpZWxkKSkpOwogICAgfSk7CgogICAgQWJzdHJhY3RWYWx1ZSB0eXBlID0KICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVOb25OdWxsRXhhY3QoY2xvc3VyZUNsYXNzRW50aXR5KTsKICAgIC8vIFRPRE8oZWZvcnR1bmEpOiBBZGQgc291cmNlIGluZm9ybWF0aW9uIGhlcmUuCiAgICBwdXNoKG5ldyBIQ3JlYXRlKAogICAgICAgIGNsb3N1cmVDbGFzc0VudGl0eSwgY2FwdHVyZWRWYXJpYWJsZXMsIHR5cGUsIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgIGNhbGxNZXRob2Q6IGNsb3N1cmVJbmZvLmNhbGxNZXRob2QpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGdW5jdGlvbkRlY2xhcmF0aW9uKGlyLkZ1bmN0aW9uRGVjbGFyYXRpb24gZGVjbGFyYXRpb24pIHsKICAgIGFzc2VydChfaXNSZWFjaGFibGUpOwogICAgZGVjbGFyYXRpb24uZnVuY3Rpb24uYWNjZXB0KHRoaXMpOwogICAgTG9jYWwgbG9jYWwgPSBfbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUoZGVjbGFyYXRpb24udmFyaWFibGUpOwogICAgbG9jYWxzSGFuZGxlci51cGRhdGVMb2NhbChsb2NhbCwgcG9wKCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbihpci5GdW5jdGlvbkV4cHJlc3Npb24gZnVuY0V4cHJlc3Npb24pIHsKICAgIGZ1bmNFeHByZXNzaW9uLmZ1bmN0aW9uLmFjY2VwdCh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnN0YW50aWF0aW9uKGlyLkluc3RhbnRpYXRpb24gbm9kZSkgewogICAgdmFyIGFyZ3VtZW50cyA9IDxISW5zdHJ1Y3Rpb24+W107CiAgICBub2RlLmV4cHJlc3Npb24uYWNjZXB0KHRoaXMpOwogICAgYXJndW1lbnRzLmFkZChwb3AoKSk7CiAgICBTdGF0aWNUeXBlIGV4cHJlc3Npb25UeXBlID0gX2dldFN0YXRpY1R5cGUobm9kZS5leHByZXNzaW9uKTsKICAgIGJvb2wgdHlwZUFyZ3VtZW50c05lZWRlZCA9IF9ydGlOZWVkLmluc3RhbnRpYXRpb25OZWVkc1R5cGVBcmd1bWVudHMoCiAgICAgICAgZXhwcmVzc2lvblR5cGUudHlwZSwgbm9kZS50eXBlQXJndW1lbnRzLmxlbmd0aCk7CiAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0gbm9kZS50eXBlQXJndW1lbnRzCiAgICAgICAgLm1hcCgodHlwZSkgPT4gdHlwZUFyZ3VtZW50c05lZWRlZAogICAgICAgICAgICA/IF9lbGVtZW50TWFwLmdldERhcnRUeXBlKHR5cGUpCiAgICAgICAgICAgIDogX2NvbW1vbkVsZW1lbnRzLmR5bmFtaWNUeXBlKQogICAgICAgIC50b0xpc3QoKTsKICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyR2VuZXJpY0luc3RhbnRpYXRpb24oCiAgICAgICAgbmV3IEdlbmVyaWNJbnN0YW50aWF0aW9uKGV4cHJlc3Npb25UeXBlLnR5cGUsIHR5cGVBcmd1bWVudHMpKTsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENhbiB3ZSBhdm9pZCBjcmVhdGluZyB0aGUgaW5zdGFudGlhdGlvbiBvYmplY3Q/CiAgICBmb3IgKERhcnRUeXBlIHR5cGUgaW4gdHlwZUFyZ3VtZW50cykgewogICAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPQogICAgICAgICAgX3R5cGVCdWlsZGVyLmFuYWx5emVUeXBlQXJndW1lbnQodHlwZSwgc291cmNlRWxlbWVudCk7CiAgICAgIGFyZ3VtZW50cy5hZGQoaW5zdHJ1Y3Rpb24pOwogICAgfQogICAgaW50IHR5cGVBcmd1bWVudENvdW50ID0gbm9kZS50eXBlQXJndW1lbnRzLmxlbmd0aDsKICAgIGJvb2wgdGFyZ2V0Q2FuVGhyb3cgPSBmYWxzZTsgLy8gVE9ETyhzcmEpOiBJcyB0aGlzIHRydWU/CiAgICBGdW5jdGlvbkVudGl0eSB0YXJnZXQgPQogICAgICAgIF9jb21tb25FbGVtZW50cy5nZXRJbnN0YW50aWF0ZUZ1bmN0aW9uKHR5cGVBcmd1bWVudENvdW50KTsKICAgIGlmICh0YXJnZXQgPT0gbnVsbCkgewogICAgICByZXBvcnRlci5pbnRlcm5hbEVycm9yKAogICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U3Bhbm5hYmxlKHRhcmdldEVsZW1lbnQsIG5vZGUpLAogICAgICAgICAgJ0dlbmVyaWMgZnVuY3Rpb24gaW5zdGFudGlhdGlvbiBub3QgaW1wbGVtZW50ZWQgZm9yICcKICAgICAgICAgICcke3R5cGVBcmd1bWVudENvdW50fSB0eXBlIGFyZ3VtZW50cycpOwogICAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IG5ldyBISW52b2tlU3RhdGljKAogICAgICAgIHRhcmdldCwgYXJndW1lbnRzLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5mdW5jdGlvblR5cGUsIDxEYXJ0VHlwZT5bXSwKICAgICAgICB0YXJnZXRDYW5UaHJvdzogdGFyZ2V0Q2FuVGhyb3cpOwogICAgLy8gVE9ETyhzcmEpOiAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb24KICAgIGluc3RydWN0aW9uLnNpZGVFZmZlY3RzCiAgICAgIC4uY2xlYXJBbGxEZXBlbmRlbmNpZXMoKQogICAgICAuLmNsZWFyQWxsU2lkZUVmZmVjdHMoKTsKCiAgICBwdXNoKGluc3RydWN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRNZXRob2RJbnZvY2F0aW9uKGlyLk1ldGhvZEludm9jYXRpb24gbm9kZSkgewogICAgbm9kZS5yZWNlaXZlci5hY2NlcHQodGhpcyk7CiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSBwb3AoKTsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gX2VsZW1lbnRNYXAuZ2V0U2VsZWN0b3Iobm9kZSk7CiAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0gPERhcnRUeXBlPltdOwogICAgc2VsZWN0b3IgPQogICAgICAgIF9maWxsRHluYW1pY1R5cGVBcmd1bWVudHMoc2VsZWN0b3IsIG5vZGUuYXJndW1lbnRzLCB0eXBlQXJndW1lbnRzKTsKICAgIF9wdXNoRHluYW1pY0ludm9jYXRpb24oCiAgICAgICAgbm9kZSwKICAgICAgICBfZ2V0U3RhdGljVHlwZShub2RlLnJlY2VpdmVyKSwKICAgICAgICBfdHlwZUluZmVyZW5jZU1hcC5yZWNlaXZlclR5cGVPZkludm9jYXRpb24obm9kZSwgX2Fic3RyYWN0VmFsdWVEb21haW4pLAogICAgICAgIHNlbGVjdG9yLAogICAgICAgIDxISW5zdHJ1Y3Rpb24+W3JlY2VpdmVyXS4uYWRkQWxsKF92aXNpdEFyZ3VtZW50c0ZvckR5bmFtaWNUYXJnZXQoCiAgICAgICAgICAgIHNlbGVjdG9yLCBub2RlLmFyZ3VtZW50cywgdHlwZUFyZ3VtZW50cykpLAogICAgICAgIHR5cGVBcmd1bWVudHMsCiAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZENhbGwobm9kZS5yZWNlaXZlciwgbm9kZSkpOwogIH0KCiAgSEludGVyY2VwdG9yIF9pbnRlcmNlcHRvckZvcigKICAgICAgSEluc3RydWN0aW9uIGludGVyY2VwdGVkLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgSEludGVyY2VwdG9yIGludGVyY2VwdG9yID0KICAgICAgICBuZXcgSEludGVyY2VwdG9yKGludGVyY2VwdGVkLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ub25OdWxsVHlwZSkKICAgICAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgIGFkZChpbnRlcmNlcHRvcik7CiAgICByZXR1cm4gaW50ZXJjZXB0b3I7CiAgfQoKICBzdGF0aWMgaXIuQ2xhc3MgX2NvbnRhaW5pbmdDbGFzcyhpci5UcmVlTm9kZSBub2RlKSB7CiAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7CiAgICAgIGlmIChub2RlIGlzIGlyLkNsYXNzKSByZXR1cm4gbm9kZTsKICAgICAgbm9kZSA9IG5vZGUucGFyZW50OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIF9nZW5lcmF0ZVN1cGVyTm9TdWNoTWV0aG9kKAogICAgICBpci5FeHByZXNzaW9uIGludm9jYXRpb24sCiAgICAgIFN0cmluZyBwdWJsaWNOYW1lLAogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gYXJndW1lbnRzLAogICAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBfZWxlbWVudE1hcC5nZXRTZWxlY3RvcihpbnZvY2F0aW9uKTsKICAgIENsYXNzRW50aXR5IGNvbnRhaW5pbmdDbGFzcyA9CiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0Q2xhc3MoX2NvbnRhaW5pbmdDbGFzcyhpbnZvY2F0aW9uKSk7CiAgICBGdW5jdGlvbkVudGl0eSBub1N1Y2hNZXRob2QgPQogICAgICAgIF9lbGVtZW50TWFwLmdldFN1cGVyTm9TdWNoTWV0aG9kKGNvbnRhaW5pbmdDbGFzcyk7CgogICAgQ29uc3RhbnRWYWx1ZSBuYW1lQ29uc3RhbnQgPSBjb25zdGFudF9zeXN0ZW0uY3JlYXRlU3RyaW5nKHB1YmxpY05hbWUpOwoKICAgIGpzLk5hbWUgaW50ZXJuYWxOYW1lID0gX25hbWVyLmludm9jYXRpb25OYW1lKHNlbGVjdG9yKTsKCiAgICB2YXIgYXJndW1lbnRzSW5zdHJ1Y3Rpb24gPSBfYnVpbGRMaXRlcmFsTGlzdChhcmd1bWVudHMpOwogICAgYWRkKGFyZ3VtZW50c0luc3RydWN0aW9uKTsKCiAgICB2YXIgYXJndW1lbnROYW1lcyA9IG5ldyBMaXN0PEhJbnN0cnVjdGlvbj4oKTsKICAgIGZvciAoU3RyaW5nIGFyZ3VtZW50TmFtZSBpbiBzZWxlY3Rvci5uYW1lZEFyZ3VtZW50cykgewogICAgICBDb25zdGFudFZhbHVlIGFyZ3VtZW50TmFtZUNvbnN0YW50ID0KICAgICAgICAgIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVTdHJpbmcoYXJndW1lbnROYW1lKTsKICAgICAgYXJndW1lbnROYW1lcy5hZGQoZ3JhcGguYWRkQ29uc3RhbnQoYXJndW1lbnROYW1lQ29uc3RhbnQsIGNsb3NlZFdvcmxkKSk7CiAgICB9CiAgICB2YXIgYXJndW1lbnROYW1lc0luc3RydWN0aW9uID0gX2J1aWxkTGl0ZXJhbExpc3QoYXJndW1lbnROYW1lcyk7CiAgICBhZGQoYXJndW1lbnROYW1lc0luc3RydWN0aW9uKTsKCiAgICBDb25zdGFudFZhbHVlIGtpbmRDb25zdGFudCA9CiAgICAgICAgY29uc3RhbnRfc3lzdGVtLmNyZWF0ZUludEZyb21JbnQoc2VsZWN0b3IuaW52b2NhdGlvbk1pcnJvcktpbmQpOwoKICAgIF9wdXNoU3RhdGljSW52b2NhdGlvbigKICAgICAgICBfY29tbW9uRWxlbWVudHMuY3JlYXRlSW52b2NhdGlvbk1pcnJvciwKICAgICAgICBbCiAgICAgICAgICBncmFwaC5hZGRDb25zdGFudChuYW1lQ29uc3RhbnQsIGNsb3NlZFdvcmxkKSwKICAgICAgICAgIGdyYXBoLmFkZENvbnN0YW50U3RyaW5nRnJvbU5hbWUoaW50ZXJuYWxOYW1lLCBjbG9zZWRXb3JsZCksCiAgICAgICAgICBncmFwaC5hZGRDb25zdGFudChraW5kQ29uc3RhbnQsIGNsb3NlZFdvcmxkKSwKICAgICAgICAgIGFyZ3VtZW50c0luc3RydWN0aW9uLAogICAgICAgICAgYXJndW1lbnROYW1lc0luc3RydWN0aW9uLAogICAgICAgICAgZ3JhcGguYWRkQ29uc3RhbnRJbnQodHlwZUFyZ3VtZW50cy5sZW5ndGgsIGNsb3NlZFdvcmxkKSwKICAgICAgICBdLAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlLAogICAgICAgIHR5cGVBcmd1bWVudHMsCiAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKCiAgICBfYnVpbGRJbnZva2VTdXBlcihTZWxlY3RvcnMubm9TdWNoTWV0aG9kXywgY29udGFpbmluZ0NsYXNzLCBub1N1Y2hNZXRob2QsCiAgICAgICAgPEhJbnN0cnVjdGlvbj5bcG9wKCldLCB0eXBlQXJndW1lbnRzLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICBISW5zdHJ1Y3Rpb24gX2J1aWxkSW52b2tlU3VwZXIoCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBDbGFzc0VudGl0eSBjb250YWluaW5nQ2xhc3MsCiAgICAgIE1lbWJlckVudGl0eSB0YXJnZXQsCiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBhcmd1bWVudHMsCiAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPQogICAgICAgIGxvY2Fsc0hhbmRsZXIucmVhZFRoaXMoc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKCiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzID0gPEhJbnN0cnVjdGlvbj5bXTsKICAgIGJvb2wgaXNJbnRlcmNlcHRlZCA9CiAgICAgICAgY2xvc2VkV29ybGQuaW50ZXJjZXB0b3JEYXRhLmlzSW50ZXJjZXB0ZWRTZWxlY3RvcihzZWxlY3Rvcik7CiAgICBpZiAoaXNJbnRlcmNlcHRlZCkgewogICAgICBpbnB1dHMuYWRkKF9pbnRlcmNlcHRvckZvcihyZWNlaXZlciwgc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICAgIGlucHV0cy5hZGQocmVjZWl2ZXIpOwogICAgaW5wdXRzLmFkZEFsbChhcmd1bWVudHMpOwoKICAgIEFic3RyYWN0VmFsdWUgdHlwZU1hc2s7CiAgICBpZiAodGFyZ2V0IGlzIEZ1bmN0aW9uRW50aXR5KSB7CiAgICAgIHR5cGVNYXNrID0gX3R5cGVJbmZlcmVuY2VNYXAuZ2V0UmV0dXJuVHlwZU9mKHRhcmdldCk7CiAgICB9IGVsc2UgewogICAgICB0eXBlTWFzayA9IF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlOwogICAgfQogICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gbmV3IEhJbnZva2VTdXBlcigKICAgICAgICB0YXJnZXQsCiAgICAgICAgY29udGFpbmluZ0NsYXNzLAogICAgICAgIHNlbGVjdG9yLAogICAgICAgIGlucHV0cywKICAgICAgICBpc0ludGVyY2VwdGVkLAogICAgICAgIHR5cGVNYXNrLAogICAgICAgIHR5cGVBcmd1bWVudHMsCiAgICAgICAgc291cmNlSW5mb3JtYXRpb24sCiAgICAgICAgaXNTZXR0ZXI6IHNlbGVjdG9yLmlzU2V0dGVyIHx8IHNlbGVjdG9yLmlzSW5kZXhTZXQpOwogICAgaW5zdHJ1Y3Rpb24uc2lkZUVmZmVjdHMgPQogICAgICAgIF9pbmZlcnJlZERhdGEuZ2V0U2lkZUVmZmVjdHNPZlNlbGVjdG9yKHNlbGVjdG9yLCBudWxsKTsKICAgIHB1c2goaW5zdHJ1Y3Rpb24pOwogICAgcmV0dXJuIGluc3RydWN0aW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN1cGVyUHJvcGVydHlHZXQoaXIuU3VwZXJQcm9wZXJ0eUdldCBub2RlKSB7CiAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9CiAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEdldChub2RlKTsKICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPQogICAgICAgIF9lbGVtZW50TWFwLmdldFN1cGVyTWVtYmVyKF9jdXJyZW50RnJhbWUubWVtYmVyLCBub2RlLm5hbWUpOwogICAgaWYgKG1lbWJlciA9PSBudWxsKSB7CiAgICAgIF9nZW5lcmF0ZVN1cGVyTm9TdWNoTWV0aG9kKG5vZGUsIF9lbGVtZW50TWFwLmdldFNlbGVjdG9yKG5vZGUpLm5hbWUsCiAgICAgICAgICBjb25zdCA8SEluc3RydWN0aW9uPltdLCBjb25zdCA8RGFydFR5cGU+W10sIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKG1lbWJlci5pc0ZpZWxkKSB7CiAgICAgIEZpZWxkQW5hbHlzaXNEYXRhIGZpZWxkRGF0YSA9IF9maWVsZEFuYWx5c2lzLmdldEZpZWxkRGF0YShtZW1iZXIpOwogICAgICBpZiAoZmllbGREYXRhLmlzRWZmZWN0aXZlbHlDb25zdGFudCkgewogICAgICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPSBmaWVsZERhdGEuY29uc3RhbnRWYWx1ZTsKICAgICAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnQodmFsdWUsIGNsb3NlZFdvcmxkLAogICAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICAgIF9idWlsZEludm9rZVN1cGVyKAogICAgICAgIF9lbGVtZW50TWFwLmdldFNlbGVjdG9yKG5vZGUpLAogICAgICAgIF9lbGVtZW50TWFwLmdldENsYXNzKF9jb250YWluaW5nQ2xhc3Mobm9kZSkpLAogICAgICAgIG1lbWJlciwKICAgICAgICBjb25zdCA8SEluc3RydWN0aW9uPltdLAogICAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3VwZXJNZXRob2RJbnZvY2F0aW9uKGlyLlN1cGVyTWV0aG9kSW52b2NhdGlvbiBub2RlKSB7CiAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9CiAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZENhbGwobm9kZSwgbm9kZSk7CiAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0KICAgICAgICBfZWxlbWVudE1hcC5nZXRTdXBlck1lbWJlcihfY3VycmVudEZyYW1lLm1lbWJlciwgbm9kZS5uYW1lKTsKICAgIGlmIChtZW1iZXIgPT0gbnVsbCkgewogICAgICBTZWxlY3RvciBzZWxlY3RvciA9IF9lbGVtZW50TWFwLmdldFNlbGVjdG9yKG5vZGUpOwogICAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0gPERhcnRUeXBlPltdOwogICAgICBzZWxlY3RvciA9CiAgICAgICAgICBfZmlsbER5bmFtaWNUeXBlQXJndW1lbnRzKHNlbGVjdG9yLCBub2RlLmFyZ3VtZW50cywgdHlwZUFyZ3VtZW50cyk7CiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBhcmd1bWVudHMgPSBfdmlzaXRBcmd1bWVudHNGb3JEeW5hbWljVGFyZ2V0KAogICAgICAgICAgc2VsZWN0b3IsIG5vZGUuYXJndW1lbnRzLCB0eXBlQXJndW1lbnRzKTsKICAgICAgX2dlbmVyYXRlU3VwZXJOb1N1Y2hNZXRob2QoCiAgICAgICAgICBub2RlLCBzZWxlY3Rvci5uYW1lLCBhcmd1bWVudHMsIHR5cGVBcmd1bWVudHMsIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9CiAgICAgICAgX2dldFN0YXRpY1R5cGVBcmd1bWVudHMobWVtYmVyLCBub2RlLmFyZ3VtZW50cyk7CgogICAgTWVtYmVyRGVmaW5pdGlvbiB0YXJnZXREZWZpbml0aW9uID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyRGVmaW5pdGlvbihtZW1iZXIpOwogICAgaXIuUHJvY2VkdXJlIHRhcmdldCA9IHRhcmdldERlZmluaXRpb24ubm9kZTsKICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uID0gbWVtYmVyOwogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGFyZ3VtZW50cyA9IF92aXNpdEFyZ3VtZW50c0ZvclN0YXRpY1RhcmdldCgKICAgICAgICB0YXJnZXQuZnVuY3Rpb24sCiAgICAgICAgZnVuY3Rpb24ucGFyYW1ldGVyU3RydWN0dXJlLAogICAgICAgIG5vZGUuYXJndW1lbnRzLAogICAgICAgIHR5cGVBcmd1bWVudHMsCiAgICAgICAgc291cmNlSW5mb3JtYXRpb24pOwogICAgX2J1aWxkSW52b2tlU3VwZXIoCiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U2VsZWN0b3Iobm9kZSksCiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0Q2xhc3MoX2NvbnRhaW5pbmdDbGFzcyhub2RlKSksCiAgICAgICAgbWVtYmVyLAogICAgICAgIGFyZ3VtZW50cywKICAgICAgICB0eXBlQXJndW1lbnRzLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIHZvaWQgX2Fzc2VydElzVHlwZShISW5zdHJ1Y3Rpb24gc3VidHlwZUluc3RydWN0aW9uLCBEYXJ0VHlwZSBzdXBlcnR5cGUsCiAgICAgIFN0cmluZyBwcmVmaXgsIFN0cmluZyBpbmZpeCwgU3RyaW5nIHN1ZmZpeCkgewogICAgSEluc3RydWN0aW9uIHN1cGVydHlwZUluc3RydWN0aW9uID0gX3R5cGVCdWlsZGVyLmFuYWx5emVUeXBlQXJndW1lbnQoCiAgICAgICAgbG9jYWxzSGFuZGxlci5zdWJzdEluQ29udGV4dChzdXBlcnR5cGUpLCBzb3VyY2VFbGVtZW50KTsKICAgIEhJbnN0cnVjdGlvbiBwcmVmaXhJbnN0cnVjdGlvbiA9CiAgICAgICAgZ3JhcGguYWRkQ29uc3RhbnRTdHJpbmcocHJlZml4LCBjbG9zZWRXb3JsZCk7CiAgICBISW5zdHJ1Y3Rpb24gaW5maXhJbnN0cnVjdGlvbiA9IGdyYXBoLmFkZENvbnN0YW50U3RyaW5nKGluZml4LCBjbG9zZWRXb3JsZCk7CiAgICBISW5zdHJ1Y3Rpb24gc3VmZml4SW5zdHJ1Y3Rpb24gPQogICAgICAgIGdyYXBoLmFkZENvbnN0YW50U3RyaW5nKHN1ZmZpeCwgY2xvc2VkV29ybGQpOwogICAgRnVuY3Rpb25FbnRpdHkgZWxlbWVudCA9IF9jb21tb25FbGVtZW50cy5hc3NlcnRJc1N1YnR5cGU7CiAgICB2YXIgaW5wdXRzID0gPEhJbnN0cnVjdGlvbj5bCiAgICAgIHN1YnR5cGVJbnN0cnVjdGlvbiwKICAgICAgc3VwZXJ0eXBlSW5zdHJ1Y3Rpb24sCiAgICAgIHByZWZpeEluc3RydWN0aW9uLAogICAgICBpbmZpeEluc3RydWN0aW9uLAogICAgICBzdWZmaXhJbnN0cnVjdGlvbgogICAgXTsKICAgIEhJbnN0cnVjdGlvbiBhc3NlcnRJc1N1YnR5cGUgPSBuZXcgSEludm9rZVN0YXRpYyhlbGVtZW50LCBpbnB1dHMsCiAgICAgICAgc3VidHlwZUluc3RydWN0aW9uLmluc3RydWN0aW9uVHlwZSwgY29uc3QgPERhcnRUeXBlPltdKTsKICAgIGFkZChhc3NlcnRJc1N1YnR5cGUpOwogIH0KCiAgdm9pZCBfY2hlY2tUeXBlQm91bmQoCiAgICAgIEhJbnN0cnVjdGlvbiB0eXBlSW5zdHJ1Y3Rpb24sIERhcnRUeXBlIGJvdW5kLCBTdHJpbmcgdmFyaWFibGVOYW1lKSB7CiAgICBISW5zdHJ1Y3Rpb24gYm91bmRJbnN0cnVjdGlvbiA9IF90eXBlQnVpbGRlci5hbmFseXplVHlwZUFyZ3VtZW50TmV3UnRpKAogICAgICAgIGxvY2Fsc0hhbmRsZXIuc3Vic3RJbkNvbnRleHQoYm91bmQpLCBzb3VyY2VFbGVtZW50KTsKCiAgICBISW5zdHJ1Y3Rpb24gdmFyaWFibGVOYW1lSW5zdHJ1Y3Rpb24gPQogICAgICAgIGdyYXBoLmFkZENvbnN0YW50U3RyaW5nKHZhcmlhYmxlTmFtZSwgY2xvc2VkV29ybGQpOwogICAgRnVuY3Rpb25FbnRpdHkgZWxlbWVudCA9IF9jb21tb25FbGVtZW50cy5jaGVja1R5cGVCb3VuZDsKICAgIHZhciBpbnB1dHMgPSA8SEluc3RydWN0aW9uPlsKICAgICAgdHlwZUluc3RydWN0aW9uLAogICAgICBib3VuZEluc3RydWN0aW9uLAogICAgICB2YXJpYWJsZU5hbWVJbnN0cnVjdGlvbgogICAgXTsKICAgIEhJbnN0cnVjdGlvbiBjaGVja0JvdW5kID0gbmV3IEhJbnZva2VTdGF0aWMoCiAgICAgICAgZWxlbWVudCwgaW5wdXRzLCB0eXBlSW5zdHJ1Y3Rpb24uaW5zdHJ1Y3Rpb25UeXBlLCBjb25zdCA8RGFydFR5cGU+W10pOwogICAgYWRkKGNoZWNrQm91bmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnN0cnVjdG9ySW52b2NhdGlvbihpci5Db25zdHJ1Y3Rvckludm9jYXRpb24gbm9kZSkgewogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGROZXcobm9kZSk7CiAgICBpci5Db25zdHJ1Y3RvciB0YXJnZXQgPSBub2RlLnRhcmdldDsKICAgIGlmIChub2RlLmlzQ29uc3QpIHsKICAgICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IF9lbGVtZW50TWFwLmdldENvbnN0YW50VmFsdWUobm9kZSk7CiAgICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudChjb25zdGFudCwgY2xvc2VkV29ybGQsCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yID0gX2VsZW1lbnRNYXAuZ2V0Q29uc3RydWN0b3IodGFyZ2V0KTsKICAgIENsYXNzRW50aXR5IGNscyA9IGNvbnN0cnVjdG9yLmVuY2xvc2luZ0NsYXNzOwogICAgQWJzdHJhY3RWYWx1ZSB0eXBlTWFzayA9IF9hYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZU5vbk51bGxFeGFjdChjbHMpOwogICAgSW50ZXJmYWNlVHlwZSBpbnN0YW5jZVR5cGUgPSBfZWxlbWVudE1hcC5jcmVhdGVJbnRlcmZhY2VUeXBlKAogICAgICAgIHRhcmdldC5lbmNsb3NpbmdDbGFzcywgbm9kZS5hcmd1bWVudHMudHlwZXMpOwogICAgaW5zdGFuY2VUeXBlID0gbG9jYWxzSGFuZGxlci5zdWJzdEluQ29udGV4dChpbnN0YW5jZVR5cGUpOwoKICAgIExpc3Q8SEluc3RydWN0aW9uPiBhcmd1bWVudHMgPSA8SEluc3RydWN0aW9uPltdOwogICAgaWYgKGNvbnN0cnVjdG9yLmlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yICYmCiAgICAgICAgX25hdGl2ZURhdGEuaXNOYXRpdmVPckV4dGVuZHNOYXRpdmUoY29uc3RydWN0b3IuZW5jbG9zaW5nQ2xhc3MpICYmCiAgICAgICAgIV9uYXRpdmVEYXRhLmlzSnNJbnRlcm9wTWVtYmVyKGNvbnN0cnVjdG9yKSkgewogICAgICAvLyBOYXRpdmUgY2xhc3MgZ2VuZXJhdGl2ZSBjb25zdHJ1Y3RvcnMgdGFrZSBhIHByZS1jb25zdHJ1Y3RlZCBvYmplY3QuCiAgICAgIGFyZ3VtZW50cy5hZGQoZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKSk7CiAgICB9CiAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0KICAgICAgICBfZ2V0Q29uc3RydWN0b3JUeXBlQXJndW1lbnRzKGNvbnN0cnVjdG9yLCBub2RlLmFyZ3VtZW50cyk7CiAgICBhcmd1bWVudHMuYWRkQWxsKGNsb3NlZFdvcmxkLm5hdGl2ZURhdGEuaXNKc0ludGVyb3BNZW1iZXIoY29uc3RydWN0b3IpCiAgICAgICAgPyBfdmlzaXRBcmd1bWVudHNGb3JOYXRpdmVTdGF0aWNUYXJnZXQodGFyZ2V0LmZ1bmN0aW9uLCBub2RlLmFyZ3VtZW50cykKICAgICAgICA6IF92aXNpdEFyZ3VtZW50c0ZvclN0YXRpY1RhcmdldCgKICAgICAgICAgICAgdGFyZ2V0LmZ1bmN0aW9uLAogICAgICAgICAgICBjb25zdHJ1Y3Rvci5wYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgICAgICAgIG5vZGUuYXJndW1lbnRzLAogICAgICAgICAgICB0eXBlQXJndW1lbnRzLAogICAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgaWYgKF9jb21tb25FbGVtZW50cy5pc1N5bWJvbENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKSkgewogICAgICBjb25zdHJ1Y3RvciA9IF9jb21tb25FbGVtZW50cy5zeW1ib2xWYWxpZGF0ZWRDb25zdHJ1Y3RvcjsKICAgIH0KICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGlzIHdoZW4gdHlwZSBhcmd1bWVudHMgYXJlIHBhc3NlZCB0bwogICAgLy8gY29uc3RydWN0b3JzIGxpa2UgY2FsbGluZyBhIGdlbmVyaWMgbWV0aG9kLgogICAgX2FkZFR5cGVBcmd1bWVudHMoYXJndW1lbnRzLCBfZ2V0Q2xhc3NUeXBlQXJndW1lbnRzKGNscywgbm9kZS5hcmd1bWVudHMpLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIF9hZGRJbXBsaWNpdEluc3RhbnRpYXRpb24oaW5zdGFuY2VUeXBlKTsKICAgIF9wdXNoU3RhdGljSW52b2NhdGlvbihjb25zdHJ1Y3RvciwgYXJndW1lbnRzLCB0eXBlTWFzaywgdHlwZUFyZ3VtZW50cywKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24sIGluc3RhbmNlVHlwZTogaW5zdGFuY2VUeXBlKTsKICAgIF9yZW1vdmVJbXBsaWNpdEluc3RhbnRpYXRpb24oaW5zdGFuY2VUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJc0V4cHJlc3Npb24oaXIuSXNFeHByZXNzaW9uIG5vZGUpIHsKICAgIG5vZGUub3BlcmFuZC5hY2NlcHQodGhpcyk7CiAgICBISW5zdHJ1Y3Rpb24gZXhwcmVzc2lvbiA9IHBvcCgpOwogICAgX3B1c2hJc1Rlc3Qobm9kZS50eXBlLCBleHByZXNzaW9uLCBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkSXMobm9kZSkpOwogIH0KCiAgdm9pZCBfcHVzaElzVGVzdChpci5EYXJ0VHlwZSB0eXBlLCBISW5zdHJ1Y3Rpb24gZXhwcmVzc2lvbiwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIC8vIE5vdGU6IFRoZSBjYWxsIHRvICJ1bmFsaWFzIiB0aGlzIHR5cGUgbGlrZSBpbiB0aGUgb3JpZ2luYWwgU1NBIGJ1aWxkZXIgaXMKICAgIC8vIHVubmVjZXNzYXJ5IGluIGtlcm5lbCBiZWNhdXNlIEtlcm5lbCBoYXMgbm8gbm90aW9uIG9mIHR5cGVkZWYuCiAgICAvLyBUT0RPKGVmb3J0dW5hKTogQWRkIHRlc3QgZm9yIHRoaXMuCgogICAgaWYgKHR5cGUgaXMgaXIuSW52YWxpZFR5cGUpIHsKICAgICAgLy8gVE9ETyhzcmEpOiBNYWtlIEludmFsaWRUeXBlIGNhcnJ5IGEgbWVzc2FnZS4KICAgICAgX2dlbmVyYXRlVHlwZUVycm9yKCdpbnZhbGlkIHR5cGUnLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIHBvcCgpOwogICAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnRCb29sKHRydWUsIGNsb3NlZFdvcmxkKSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBEYXJ0VHlwZSB0eXBlVmFsdWUgPQogICAgICAgIGxvY2Fsc0hhbmRsZXIuc3Vic3RJbkNvbnRleHQoX2VsZW1lbnRNYXAuZ2V0RGFydFR5cGUodHlwZSkpOwoKICAgIGlmICh0eXBlVmFsdWUudHJlYXRBc0R5bmFtaWMpIHsKICAgICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50Qm9vbCh0cnVlLCBjbG9zZWRXb3JsZCkpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKG9wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSkgewogICAgICBISW5zdHJ1Y3Rpb24gcnRpID0KICAgICAgICAgIF90eXBlQnVpbGRlci5hbmFseXplVHlwZUFyZ3VtZW50TmV3UnRpKHR5cGVWYWx1ZSwgc291cmNlRWxlbWVudCk7CiAgICAgIEFic3RyYWN0VmFsdWVXaXRoUHJlY2lzaW9uIGNoZWNrZWRUeXBlID0KICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZUZyb21TdGF0aWNUeXBlKHR5cGVWYWx1ZSwgbnVsbGFibGU6IGZhbHNlKTsKCiAgICAgIHB1c2goSElzVGVzdCh0eXBlVmFsdWUsIGNoZWNrZWRUeXBlLCBleHByZXNzaW9uLCBydGksCiAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSkpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKHR5cGVWYWx1ZSBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgSEluc3RydWN0aW9uIHJlcHJlc2VudGF0aW9uID0KICAgICAgICAgIF90eXBlQnVpbGRlci5hbmFseXplVHlwZUFyZ3VtZW50KHR5cGVWYWx1ZSwgc291cmNlRWxlbWVudCk7CiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMgPSA8SEluc3RydWN0aW9uPlsKICAgICAgICBleHByZXNzaW9uLAogICAgICAgIHJlcHJlc2VudGF0aW9uLAogICAgICBdOwogICAgICBfcHVzaFN0YXRpY0ludm9jYXRpb24oX2NvbW1vbkVsZW1lbnRzLmZ1bmN0aW9uVHlwZVRlc3QsIGlucHV0cywKICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlLCBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwogICAgICBISW5zdHJ1Y3Rpb24gY2FsbCA9IHBvcCgpOwogICAgICBwdXNoKG5ldyBISXMuY29tcG91bmQodHlwZVZhbHVlLCBleHByZXNzaW9uLCBjYWxsLAogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUsIHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAodHlwZVZhbHVlIGlzIEZ1dHVyZU9yVHlwZSkgewogICAgICBISW5zdHJ1Y3Rpb24gcmVwcmVzZW50YXRpb24gPQogICAgICAgICAgX3R5cGVCdWlsZGVyLmFuYWx5emVUeXBlQXJndW1lbnQodHlwZVZhbHVlLCBzb3VyY2VFbGVtZW50KTsKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cyA9IDxISW5zdHJ1Y3Rpb24+WwogICAgICAgIGV4cHJlc3Npb24sCiAgICAgICAgcmVwcmVzZW50YXRpb24sCiAgICAgIF07CiAgICAgIF9wdXNoU3RhdGljSW52b2NhdGlvbihfY29tbW9uRWxlbWVudHMuZnV0dXJlT3JUZXN0LCBpbnB1dHMsCiAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSwgY29uc3QgPERhcnRUeXBlPltdLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgSEluc3RydWN0aW9uIGNhbGwgPSBwb3AoKTsKICAgICAgcHVzaChuZXcgSElzLmNvbXBvdW5kKHR5cGVWYWx1ZSwgZXhwcmVzc2lvbiwgY2FsbCwKICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlLCBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKHR5cGVWYWx1ZSBpcyBUeXBlVmFyaWFibGVUeXBlKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBydW50aW1lVHlwZSA9CiAgICAgICAgICBfdHlwZUJ1aWxkZXIuYWRkVHlwZVZhcmlhYmxlUmVmZXJlbmNlKHR5cGVWYWx1ZSwgc291cmNlRWxlbWVudCk7CiAgICAgIF9wdXNoU3RhdGljSW52b2NhdGlvbigKICAgICAgICAgIF9jb21tb25FbGVtZW50cy5jaGVja1N1YnR5cGVPZlJ1bnRpbWVUeXBlLAogICAgICAgICAgPEhJbnN0cnVjdGlvbj5bZXhwcmVzc2lvbiwgcnVudGltZVR5cGVdLAogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUsCiAgICAgICAgICBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwogICAgICBwdXNoKG5ldyBISXMudmFyaWFibGUodHlwZVZhbHVlLCBleHByZXNzaW9uLCBwb3AoKSwKICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlLCBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKHR5cGVWYWx1ZSBpcyBJbnRlcmZhY2VUeXBlICYmICFfY2FuSWdub3JlVHlwZUFyZ3VtZW50cyh0eXBlVmFsdWUpKSB7CiAgICAgIEhJbnN0cnVjdGlvbiByZXByZXNlbnRhdGlvbnMgPSBfdHlwZUJ1aWxkZXIKICAgICAgICAgIC5idWlsZFR5cGVBcmd1bWVudFJlcHJlc2VudGF0aW9ucyh0eXBlVmFsdWUsIHNvdXJjZUVsZW1lbnQpOwogICAgICBhZGQocmVwcmVzZW50YXRpb25zKTsKICAgICAgQ2xhc3NFbnRpdHkgZWxlbWVudCA9IHR5cGVWYWx1ZS5lbGVtZW50OwogICAgICBqcy5OYW1lIG9wZXJhdG9yID0gX25hbWVyLm9wZXJhdG9ySXMoZWxlbWVudCk7CiAgICAgIEhJbnN0cnVjdGlvbiBpc0ZpZWxkTmFtZSA9CiAgICAgICAgICBncmFwaC5hZGRDb25zdGFudFN0cmluZ0Zyb21OYW1lKG9wZXJhdG9yLCBjbG9zZWRXb3JsZCk7CiAgICAgIEhJbnN0cnVjdGlvbiBhc0ZpZWxkTmFtZSA9CiAgICAgICAgICBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5oYXNBbnlTdHJpY3RTdWJ0eXBlKGVsZW1lbnQpIHx8CiAgICAgICAgICAgICAgICAgIGNsb3NlZFdvcmxkLm5hdGl2ZURhdGEuaXNKc0ludGVyb3BDbGFzcyhlbGVtZW50KQogICAgICAgICAgICAgID8gZ3JhcGguYWRkQ29uc3RhbnRTdHJpbmdGcm9tTmFtZSgKICAgICAgICAgICAgICAgICAgX25hbWVyLnN1YnN0aXR1dGlvbk5hbWUoZWxlbWVudCksIGNsb3NlZFdvcmxkKQogICAgICAgICAgICAgIDogZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKTsKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cyA9IDxISW5zdHJ1Y3Rpb24+WwogICAgICAgIGV4cHJlc3Npb24sCiAgICAgICAgaXNGaWVsZE5hbWUsCiAgICAgICAgcmVwcmVzZW50YXRpb25zLAogICAgICAgIGFzRmllbGROYW1lCiAgICAgIF07CiAgICAgIF9wdXNoU3RhdGljSW52b2NhdGlvbihfY29tbW9uRWxlbWVudHMuY2hlY2tTdWJ0eXBlLCBpbnB1dHMsCiAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSwgY29uc3QgPERhcnRUeXBlPltdLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgcHVzaChuZXcgSElzLmNvbXBvdW5kKHR5cGVWYWx1ZSwgZXhwcmVzc2lvbiwgcG9wKCksCiAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSwgc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChfaGFzRGlyZWN0Q2hlY2tGb3IodHlwZVZhbHVlKSkgewogICAgICBwdXNoKG5ldyBISXMuZGlyZWN0KHR5cGVWYWx1ZSwgZXhwcmVzc2lvbiwgX2Fic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUsCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBUaGUgaW50ZXJjZXB0b3IgaXMgbm90IGFsd2F5cyBuZWVkZWQuICBJdCBpcyByZW1vdmVkIGJ5IG9wdGltaXphdGlvbgogICAgLy8gd2hlbiB0aGUgcmVjZWl2ZXIgdHlwZSBvciB0ZXN0ZWQgdHlwZSBwZXJtaXQuCiAgICBwdXNoKG5ldyBISXMucmF3KAogICAgICAgIHR5cGVWYWx1ZSwKICAgICAgICBleHByZXNzaW9uLAogICAgICAgIF9pbnRlcmNlcHRvckZvcihleHByZXNzaW9uLCBzb3VyY2VJbmZvcm1hdGlvbiksCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUsCiAgICAgICAgc291cmNlSW5mb3JtYXRpb24pKTsKICAgIHJldHVybjsKICB9CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgY2hlY2tpbmcgb2YgW3R5cGVdIGlzIHBlcmZvcm1lZCBkaXJlY3RseSBvbiB0aGUKICAvLy8gb2JqZWN0IGFuZCBub3Qgb24gYW4gaW50ZXJjZXB0b3IuCiAgYm9vbCBfaGFzRGlyZWN0Q2hlY2tGb3IoRGFydFR5cGUgdHlwZSkgewogICAgaWYgKCF0eXBlLmlzSW50ZXJmYWNlVHlwZSkgcmV0dXJuIGZhbHNlOwogICAgSW50ZXJmYWNlVHlwZSBpbnRlcmZhY2VUeXBlID0gdHlwZTsKICAgIENsYXNzRW50aXR5IGVsZW1lbnQgPSBpbnRlcmZhY2VUeXBlLmVsZW1lbnQ7CiAgICByZXR1cm4gZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuc3RyaW5nQ2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5ib29sQ2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5udW1DbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLmludENsYXNzIHx8CiAgICAgICAgZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuZG91YmxlQ2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5qc011dGFibGVBcnJheUNsYXNzIHx8CiAgICAgICAgZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuanNFeHRlbmRhYmxlQXJyYXlDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLmpzRml4ZWRBcnJheUNsYXNzIHx8CiAgICAgICAgZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuanNVbm1vZGlmaWFibGVBcnJheUNsYXNzOwogIH0KCiAgLy8vIFdoZXRoZXIgYW4gaXMtY2hlY2sgZm9yIFt0eXBlXSBjYW4gYmUgZG9uZSBpZ25vcmluZyB0eXBlLWFyZ3VtZW50cy4KICAvLy8gVGhpcyB3aWxsIGJlIHRydWUgaWYgW3R5cGVdIGlzIHJhdywgb3IgYWxsIGl0cyB0eXBlLWFyZ3VtZW50cyBtYXRjaCB0aGUKICAvLy8gdHlwZS1wYXJhbWV0ZXIgYm91bmRzLgogIGJvb2wgX2Nhbklnbm9yZVR5cGVBcmd1bWVudHMoSW50ZXJmYWNlVHlwZSB0eXBlKSB7CiAgICBJbnRlcmZhY2VUeXBlIHRoaXNUeXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZSh0eXBlLmVsZW1lbnQpOwogICAgTGlzdDxEYXJ0VHlwZT4gYm91bmRzID0gdGhpc1R5cGUudHlwZUFyZ3VtZW50czsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYm91bmRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIERhcnRUeXBlIGFyZyA9IHR5cGUudHlwZUFyZ3VtZW50c1tpXTsKICAgICAgaWYgKGFyZy50cmVhdEFzRHluYW1pYykgY29udGludWU7CiAgICAgIFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlID0gYm91bmRzW2ldOwogICAgICBEYXJ0VHlwZSBib3VuZCA9CiAgICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmdldFR5cGVWYXJpYWJsZUJvdW5kKHR5cGVWYXJpYWJsZS5lbGVtZW50KTsKICAgICAgaWYgKGJvdW5kICE9IGFyZykgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VGhyb3coaXIuVGhyb3cgbm9kZSkgewogICAgX3Zpc2l0VGhyb3dFeHByZXNzaW9uKG5vZGUuZXhwcmVzc2lvbik7CiAgICBpZiAoX2lzUmVhY2hhYmxlKSB7CiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0KICAgICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRUaHJvdyhub2RlKTsKICAgICAgX2hhbmRsZUluVHJ5U3RhdGVtZW50KCk7CiAgICAgIHB1c2goCiAgICAgICAgICBuZXcgSFRocm93RXhwcmVzc2lvbihfYWJzdHJhY3RWYWx1ZURvbWFpbiwgcG9wKCksIHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIF9pc1JlYWNoYWJsZSA9IGZhbHNlOwogICAgfQogIH0KCiAgdm9pZCBfdmlzaXRUaHJvd0V4cHJlc3Npb24oaXIuRXhwcmVzc2lvbiBleHByZXNzaW9uKSB7CiAgICBib29sIG9sZCA9IF9pbkV4cHJlc3Npb25PZlRocm93OwogICAgdHJ5IHsKICAgICAgX2luRXhwcmVzc2lvbk9mVGhyb3cgPSB0cnVlOwogICAgICBleHByZXNzaW9uLmFjY2VwdCh0aGlzKTsKICAgIH0gZmluYWxseSB7CiAgICAgIF9pbkV4cHJlc3Npb25PZlRocm93ID0gb2xkOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFlpZWxkU3RhdGVtZW50KGlyLllpZWxkU3RhdGVtZW50IG5vZGUpIHsKICAgIG5vZGUuZXhwcmVzc2lvbi5hY2NlcHQodGhpcyk7CiAgICBhZGQobmV3IEhZaWVsZChfYWJzdHJhY3RWYWx1ZURvbWFpbiwgcG9wKCksIG5vZGUuaXNZaWVsZFN0YXIsCiAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZFlpZWxkKG5vZGUpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QXdhaXRFeHByZXNzaW9uKGlyLkF3YWl0RXhwcmVzc2lvbiBub2RlKSB7CiAgICBub2RlLm9wZXJhbmQuYWNjZXB0KHRoaXMpOwogICAgSEluc3RydWN0aW9uIGF3YWl0ZWQgPSBwb3AoKTsKICAgIC8vIFRPRE8oaGVyaHV0KTogSW1wcm92ZSB0aGlzIHR5cGUuCiAgICBwdXNoKG5ldyBIQXdhaXQoYXdhaXRlZCwgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpCiAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkQXdhaXQobm9kZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFJldGhyb3coaXIuUmV0aHJvdyBub2RlKSB7CiAgICBISW5zdHJ1Y3Rpb24gZXhjZXB0aW9uID0gX3JldGhyb3dhYmxlRXhjZXB0aW9uOwogICAgaWYgKGV4Y2VwdGlvbiA9PSBudWxsKSB7CiAgICAgIGV4Y2VwdGlvbiA9IGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCk7CiAgICAgIHJlcG9ydGVyLmludGVybmFsRXJyb3IoX2VsZW1lbnRNYXAuZ2V0U3Bhbm5hYmxlKHRhcmdldEVsZW1lbnQsIG5vZGUpLAogICAgICAgICAgJ3JldGhyb3dhYmxlRXhjZXB0aW9uIHNob3VsZCBub3QgYmUgbnVsbC4nKTsKICAgIH0KICAgIF9oYW5kbGVJblRyeVN0YXRlbWVudCgpOwogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRUaHJvdyhub2RlKTsKICAgIF9jbG9zZUFuZEdvdG9FeGl0KG5ldyBIVGhyb3coCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4sIGV4Y2VwdGlvbiwgc291cmNlSW5mb3JtYXRpb24sCiAgICAgICAgaXNSZXRocm93OiB0cnVlKSk7CiAgICAvLyBpci5SZXRocm93IGlzIGFuIGV4cHJlc3Npb24gc28gd2UgbmVlZCB0byBwdXNoIGEgdmFsdWUgLSBhIGNvbnN0YW50IHdpdGgKICAgIC8vIG5vIHR5cGUuCiAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnRVbnJlYWNoYWJsZShjbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFRoaXNFeHByZXNzaW9uKGlyLlRoaXNFeHByZXNzaW9uIG5vZGUpIHsKICAgIHN0YWNrLmFkZChsb2NhbHNIYW5kbGVyLnJlYWRUaGlzKAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkR2V0KG5vZGUpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Tm90KGlyLk5vdCBub2RlKSB7CiAgICBub2RlLm9wZXJhbmQuYWNjZXB0KHRoaXMpOwogICAgcHVzaChuZXcgSE5vdChwb3BCb29saWZpZWQoKSwgX2Fic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUpCiAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkVW5hcnkobm9kZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0cmluZ0NvbmNhdGVuYXRpb24oaXIuU3RyaW5nQ29uY2F0ZW5hdGlvbiBzdHJpbmdDb25jYXQpIHsKICAgIEtlcm5lbFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlciA9IG5ldyBLZXJuZWxTdHJpbmdCdWlsZGVyKHRoaXMpOwogICAgc3RyaW5nQ29uY2F0LmFjY2VwdChzdHJpbmdCdWlsZGVyKTsKICAgIHN0YWNrLmFkZChzdHJpbmdCdWlsZGVyLnJlc3VsdCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHJ5Q2F0Y2goaXIuVHJ5Q2F0Y2ggbm9kZSkgewogICAgVHJ5Q2F0Y2hGaW5hbGx5QnVpbGRlciB0cnlCdWlsZGVyID0gbmV3IFRyeUNhdGNoRmluYWxseUJ1aWxkZXIoCiAgICAgICAgdGhpcywgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZFRyeShub2RlKSk7CiAgICBub2RlLmJvZHkuYWNjZXB0KHRoaXMpOwogICAgdHJ5QnVpbGRlcgogICAgICAuLmNsb3NlVHJ5Qm9keSgpCiAgICAgIC4uYnVpbGRDYXRjaChub2RlKQogICAgICAuLmNsZWFuVXAoKTsKICB9CgogIC8vLyBgdHJ5IHsgLi4uIH0gY2F0Y2ggeyAuLi4gfSBmaW5hbGx5IHsgLi4uIH1gIHN0YXRlbWVudHMgYXJlIGEgbGl0dGxlIGZ1bm55CiAgLy8vIGJlY2F1c2UgYSB0cnkgY2FuIGhhdmUgb25lIG9yIGJvdGggb2Yge2NhdGNofGZpbmFsbHl9LiBUaGUgd2F5IHRoaXMgaXMKICAvLy8gZW5jb2RlZCBpbiBrZXJuZWwgQVNUIGFyZSB0d28gc2VwYXJhdGUgY2xhc3NlcyB3aXRoIG5vIGNvbW1vbiBzdXBlcmNsYXNzCiAgLy8vIGFzaWRlIGZyb20gU3RhdGVtZW50LiBJZiBhIHN0YXRlbWVudCBoYXMgYm90aCBgY2F0Y2hgIGFuZCBgZmluYWxseWAKICAvLy8gY2xhdXNlcyB0aGVuIGl0IGlzIGVuY29kZWQgaW4ga2VybmVsIGFzIHNvIHRoYXQgdGhlIFRyeUNhdGNoIGlzIHRoZSBib2R5CiAgLy8vIHN0YXRlbWVudCBvZiB0aGUgVHJ5RmluYWxseS4gVG8gcHJvZHVjZSBtb3JlIGVmZmljaWVudCBjb2RlIHJhdGhlciB0aGFuCiAgLy8vIG5lc3RlZCB0cnkgc3RhdGVtZW50cywgdGhlIHZpc2l0b3JzIGF2b2lkIG9uZSBwb3RlbnRpYWwgbGV2ZWwgb2YKICAvLy8gcmVjdXJzaW9uLgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUcnlGaW5hbGx5KGlyLlRyeUZpbmFsbHkgbm9kZSkgewogICAgVHJ5Q2F0Y2hGaW5hbGx5QnVpbGRlciB0cnlCdWlsZGVyID0gbmV3IFRyeUNhdGNoRmluYWxseUJ1aWxkZXIoCiAgICAgICAgdGhpcywgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZFRyeShub2RlKSk7CgogICAgLy8gV2UgZG8gdGhlc2Ugc2hlbmFuaWdhbnMgdG8gcHJvZHVjZSBiZXR0ZXIgbG9va2luZyBjb2RlIHRoYXQgZG9lc24ndAogICAgLy8gaGF2ZSBuZXN0ZWQgdHJ5IHN0YXRlbWVudHMuCiAgICBpZiAobm9kZS5ib2R5IGlzIGlyLlRyeUNhdGNoKSB7CiAgICAgIGlyLlRyeUNhdGNoIHRyeUNhdGNoID0gbm9kZS5ib2R5OwogICAgICB0cnlDYXRjaC5ib2R5LmFjY2VwdCh0aGlzKTsKICAgICAgdHJ5QnVpbGRlcgogICAgICAgIC4uY2xvc2VUcnlCb2R5KCkKICAgICAgICAuLmJ1aWxkQ2F0Y2godHJ5Q2F0Y2gpOwogICAgfSBlbHNlIHsKICAgICAgbm9kZS5ib2R5LmFjY2VwdCh0aGlzKTsKICAgICAgdHJ5QnVpbGRlci5jbG9zZVRyeUJvZHkoKTsKICAgIH0KCiAgICB0cnlCdWlsZGVyCiAgICAgIC4uYnVpbGRGaW5hbGx5QmxvY2soKCkgewogICAgICAgIG5vZGUuZmluYWxpemVyLmFjY2VwdCh0aGlzKTsKICAgICAgfSkKICAgICAgLi5jbGVhblVwKCk7CiAgfQoKICAvLy8gVHJ5IHRvIGlubGluZSBbZWxlbWVudF0gd2l0aGluIHRoZSBjb3JyZWN0IGNvbnRleHQgb2YgdGhlIGJ1aWxkZXIuIFRoZQogIC8vLyBpbnNlcnRpb24gcG9pbnQgaXMgdGhlIHN0YXRlIG9mIHRoZSBidWlsZGVyLgogIGJvb2wgX3RyeUlubGluZU1ldGhvZCgKICAgICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24sCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIG1hc2ssCiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBwcm92aWRlZEFyZ3VtZW50cywKICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cywKICAgICAgaXIuTm9kZSBjdXJyZW50Tm9kZSwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIHtJbnRlcmZhY2VUeXBlIGluc3RhbmNlVHlwZX0pIHsKICAgIGlmIChmdW5jdGlvbi5pc0V4dGVybmFsKSB7CiAgICAgIC8vIERvbid0IGlubGluZSBleHRlcm5hbCBtZXRob2RzOyB0aGVzZSBzaG91bGQganVzdCBmYWlsIGF0IHJ1bnRpbWUuCiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAoX25hdGl2ZURhdGEuaXNKc0ludGVyb3BNZW1iZXIoZnVuY3Rpb24pICYmCiAgICAgICAgIShmdW5jdGlvbiBpcyBDb25zdHJ1Y3RvckVudGl0eSAmJiBmdW5jdGlvbi5pc0ZhY3RvcnlDb25zdHJ1Y3RvcikpIHsKICAgICAgLy8gV2Ugb25seSBpbmxpbmUgZmFjdG9yeSBKYXZhU2NyaXB0IGludGVyb3AgY29uc3RydWN0b3JzLgogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgYm9vbCBpbnNpZGVMb29wID0gbG9vcERlcHRoID4gMCB8fCBncmFwaC5jYWxsZWRJbkxvb3A7CgogICAgLy8gQmFpbCBvdXQgZWFybHkgaWYgdGhlIGlubGluaW5nIGRlY2lzaW9uIGlzIGluIHRoZSBjYWNoZSBhbmQgd2UgY2FuJ3QKICAgIC8vIGlubGluZSAobm8gbmVlZCB0byBjaGVjayB0aGUgaGFyZCBjb25zdHJhaW50cykuCiAgICBpZiAoX2lubGluZUNhY2hlLm1hcmtlZEFzTm9JbmxpbmUoZnVuY3Rpb24pKSByZXR1cm4gZmFsc2U7CiAgICBib29sIGNhY2hlZENhbkJlSW5saW5lZCA9CiAgICAgICAgX2lubGluZUNhY2hlLmNhbklubGluZShmdW5jdGlvbiwgaW5zaWRlTG9vcDogaW5zaWRlTG9vcCk7CiAgICBpZiAoY2FjaGVkQ2FuQmVJbmxpbmVkID09IGZhbHNlKSByZXR1cm4gZmFsc2U7CgogICAgYm9vbCBtZWV0c0hhcmRDb25zdHJhaW50cygpIHsKICAgICAgaWYgKG9wdGlvbnMuZGlzYWJsZUlubGluaW5nKSByZXR1cm4gZmFsc2U7CgogICAgICBhc3NlcnQoCiAgICAgICAgICBzZWxlY3RvciAhPSBudWxsIHx8CiAgICAgICAgICAgICAgZnVuY3Rpb24uaXNTdGF0aWMgfHwKICAgICAgICAgICAgICBmdW5jdGlvbi5pc1RvcExldmVsIHx8CiAgICAgICAgICAgICAgZnVuY3Rpb24uaXNDb25zdHJ1Y3RvciB8fAogICAgICAgICAgICAgIGZ1bmN0aW9uIGlzIENvbnN0cnVjdG9yQm9keUVudGl0eSwKICAgICAgICAgIGZhaWxlZEF0KGZ1bmN0aW9uLCAiTWlzc2luZyBzZWxlY3RvciBmb3IgaW5saW5pbmcgb2YgJGZ1bmN0aW9uLiIpKTsKICAgICAgaWYgKHNlbGVjdG9yICE9IG51bGwpIHsKICAgICAgICBpZiAoIXNlbGVjdG9yLmFwcGxpZXMoZnVuY3Rpb24pKSByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKG1hc2sgIT0gbnVsbCAmJgogICAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgICAgICAgICAgLmlzVGFyZ2V0aW5nTWVtYmVyKG1hc2ssIGZ1bmN0aW9uLCBzZWxlY3Rvci5tZW1iZXJOYW1lKQogICAgICAgICAgICAgICAgLmlzRGVmaW5pdGVseUZhbHNlKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAoX25hdGl2ZURhdGEuaXNKc0ludGVyb3BNZW1iZXIoZnVuY3Rpb24pKSByZXR1cm4gZmFsc2U7CgogICAgICAvLyBEb24ndCBpbmxpbmUgb3BlcmF0b3I9PSBtZXRob2RzIGlmIHRoZSBwYXJhbWV0ZXIgY2FuIGJlIG51bGwuCiAgICAgIGlmIChmdW5jdGlvbi5uYW1lID09ICc9PScpIHsKICAgICAgICBpZiAoZnVuY3Rpb24uZW5jbG9zaW5nQ2xhc3MgIT0gX2NvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzICYmCiAgICAgICAgICAgIHByb3ZpZGVkQXJndW1lbnRzWzFdCiAgICAgICAgICAgICAgICAuaXNOdWxsKF9hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAgICAgLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CgogICAgICAvLyBHZW5lcmF0aXZlIGNvbnN0cnVjdG9ycyBvZiBuYXRpdmUgY2xhc3NlcyBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseQogICAgICAvLyBhbmQgaGF2ZSBhbiBleHRyYSBhcmd1bWVudCB0aGF0IGNhdXNlcyBwcm9ibGVtcyB3aXRoIGlubGluaW5nLgogICAgICBpZiAoZnVuY3Rpb24gaXMgQ29uc3RydWN0b3JFbnRpdHkgJiYKICAgICAgICAgIGZ1bmN0aW9uLmlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yICYmCiAgICAgICAgICBfbmF0aXZlRGF0YS5pc05hdGl2ZU9yRXh0ZW5kc05hdGl2ZShmdW5jdGlvbi5lbmNsb3NpbmdDbGFzcykpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAgIC8vIEEgZ2VuZXJhdGl2ZSBjb25zdHJ1Y3RvciBib2R5IGlzIG5vdCBzZWVuIGJ5IGdsb2JhbCBhbmFseXNpcywKICAgICAgLy8gc28gd2Ugc2hvdWxkIG5vdCBxdWVyeSBmb3IgaXRzIHR5cGUuCiAgICAgIGlmIChmdW5jdGlvbiBpcyEgQ29uc3RydWN0b3JCb2R5RW50aXR5KSB7CiAgICAgICAgaWYgKGdsb2JhbEluZmVyZW5jZVJlc3VsdHMucmVzdWx0T2ZNZW1iZXIoZnVuY3Rpb24pLnRocm93c0Fsd2F5cykgewogICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSXQgc2VlbXMgd3JvbmcgdG8gc2V0IGBpc1JlYWNoYWJsZWAgdG8gYGZhbHNlYAogICAgICAgICAgLy8gc2luY2Ugd2UgYXJlIF9ub3RfIGdvaW5nIHRvIGlubGluZSBbZnVuY3Rpb25dLiBUaGlzIGhhcwogICAgICAgICAgLy8gaW1wbGljYXRpb25zIGluIHN3aXRjaCBjYXNlcyB3aGVyZSB3ZSBtaWdodCBuZWVkIHRvIGluc2VydCBhCiAgICAgICAgICAvLyBgYnJlYWtgIHRoYXQgd2FzIHNraXBwZWQgZHVlIHRvIGBpc1JlYWNoYWJsZWAgYmVpbmcgYGZhbHNlYC4KICAgICAgICAgIF9pc1JlYWNoYWJsZSA9IGZhbHNlOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgYm9vbCBkb2VzTm90Q29udGFpbkNvZGUoSW5saW5lRGF0YSBpbmxpbmVEYXRhKSB7CiAgICAgIC8vIEEgZnVuY3Rpb24gd2l0aCBzaXplIDEgZG9lcyBub3QgY29udGFpbiBhbnkgY29kZS4KICAgICAgcmV0dXJuIGlubGluZURhdGEuY2FuQmVJbmxpbmVkKG1heElubGluaW5nTm9kZXM6IDEpOwogICAgfQoKICAgIGJvb2wgcmVkdWN0aXZlSGV1cmlzdGljKElubGluZURhdGEgaW5saW5lRGF0YSkgewogICAgICAvLyBUaGUgY2FsbCBpcyBvbiBhIHBhdGggd2hpY2ggaXMgZXhlY3V0ZWQgcmFyZWx5LCBzbyBpbmxpbmUgb25seSBpZiBpdAogICAgICAvLyBkb2VzIG5vdCBtYWtlIHRoZSBwcm9ncmFtIGxhcmdlci4KICAgICAgaWYgKF9pc0NhbGxlZE9uY2UoZnVuY3Rpb24pKSB7CiAgICAgICAgcmV0dXJuIGlubGluZURhdGEuY2FuQmVJbmxpbmVkKCk7CiAgICAgIH0KICAgICAgaWYgKGlubGluZURhdGEuY2FuQmVJbmxpbmVkUmVkdWN0aXZlKAogICAgICAgICAgYXJndW1lbnRDb3VudDogcHJvdmlkZWRBcmd1bWVudHMubGVuZ3RoKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIHJldHVybiBkb2VzTm90Q29udGFpbkNvZGUoaW5saW5lRGF0YSk7CiAgICB9CgogICAgYm9vbCBoZXVyaXN0aWNTYXlHb29kVG9HbygpIHsKICAgICAgLy8gRG9uJ3QgaW5saW5lIHJlY3Vyc2l2ZWx5LAogICAgICBpZiAoX2lubGluaW5nU3RhY2suYW55KChlbnRyeSkgPT4gZW50cnkuZnVuY3Rpb24gPT0gZnVuY3Rpb24pKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgICAvLyBEb24ndCBpbmxpbmUgYWNyb3NzIGRlZmVycmVkIGltcG9ydCB0byBwcmV2ZW50IGxlYWtpbmcgY29kZS4gVGhlIG9ubHkKICAgICAgLy8gZXhjZXB0aW9uIGlzIGFuIGVtcHR5IGZ1bmN0aW9uICh3aGljaCBkb2VzIG5vdCBjb250YWluIGNvZGUpLgogICAgICBib29sIGhhc09ubHlOb25EZWZlcnJlZEltcG9ydFBhdGhzID0gY2xvc2VkV29ybGQub3V0cHV0VW5pdERhdGEKICAgICAgICAgIC5oYXNPbmx5Tm9uRGVmZXJyZWRJbXBvcnRQYXRocyhfaW5pdGlhbFRhcmdldEVsZW1lbnQsIGZ1bmN0aW9uKTsKCiAgICAgIElubGluZURhdGEgaW5saW5lRGF0YSA9CiAgICAgICAgICBfaW5saW5lRGF0YUNhY2hlLmdldElubGluZURhdGEoX2VsZW1lbnRNYXAsIGZ1bmN0aW9uKTsKCiAgICAgIGlmICghaGFzT25seU5vbkRlZmVycmVkSW1wb3J0UGF0aHMpIHsKICAgICAgICByZXR1cm4gZG9lc05vdENvbnRhaW5Db2RlKGlubGluZURhdGEpOwogICAgICB9CgogICAgICAvLyBEbyBub3QgaW5saW5lIGNvZGUgdGhhdCBpcyByYXJlbHkgZXhlY3V0ZWQgdW5sZXNzIGl0IHJlZHVjZXMgc2l6ZS4KICAgICAgaWYgKF9pbkV4cHJlc3Npb25PZlRocm93IHx8IF9pbkxhenlJbml0aWFsaXplckV4cHJlc3Npb24pIHsKICAgICAgICByZXR1cm4gcmVkdWN0aXZlSGV1cmlzdGljKGlubGluZURhdGEpOwogICAgICB9CgogICAgICBpZiAoY2FjaGVkQ2FuQmVJbmxpbmVkID09IHRydWUpIHsKICAgICAgICAvLyBXZSBtYXkgaGF2ZSBmb3JjZWQgdGhlIGlubGluaW5nIG9mIHNvbWUgbWV0aG9kcy4gVGhlcmVmb3JlIGNoZWNrCiAgICAgICAgLy8gaWYgd2UgY2FuIGlubGluZSB0aGlzIG1ldGhvZCByZWdhcmRsZXNzIG9mIHNpemUuCiAgICAgICAgU3RyaW5nIHJlYXNvbjsKICAgICAgICBhc3NlcnQoCiAgICAgICAgICAgIChyZWFzb24gPSBpbmxpbmVEYXRhLmNhbm5vdEJlSW5saW5lZFJlYXNvbihhbGxvd0xvb3BzOiB0cnVlKSkgPT0KICAgICAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgIGZhaWxlZEF0KGZ1bmN0aW9uLCAiQ2Fubm90IGlubGluZSAkZnVuY3Rpb246ICRyZWFzb24iKSk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KCiAgICAgIGludCBudW1QYXJhbWV0ZXJzID0gZnVuY3Rpb24ucGFyYW1ldGVyU3RydWN0dXJlLnRvdGFsUGFyYW1ldGVyczsKICAgICAgaW50IG1heElubGluaW5nTm9kZXM7CiAgICAgIGlmIChpbnNpZGVMb29wKSB7CiAgICAgICAgbWF4SW5saW5pbmdOb2RlcyA9IElubGluZVdlZWRlci5JTkxJTklOR19OT0RFU19JTlNJREVfTE9PUCArCiAgICAgICAgICAgIElubGluZVdlZWRlci5JTkxJTklOR19OT0RFU19JTlNJREVfTE9PUF9BUkdfRkFDVE9SICogbnVtUGFyYW1ldGVyczsKICAgICAgfSBlbHNlIHsKICAgICAgICBtYXhJbmxpbmluZ05vZGVzID0gSW5saW5lV2VlZGVyLklOTElOSU5HX05PREVTX09VVFNJREVfTE9PUCArCiAgICAgICAgICAgIElubGluZVdlZWRlci5JTkxJTklOR19OT0RFU19PVVRTSURFX0xPT1BfQVJHX0ZBQ1RPUiAqIG51bVBhcmFtZXRlcnM7CiAgICAgIH0KCiAgICAgIGJvb2wgbWFya2VkVHJ5SW5saW5lID0gX2lubGluZUNhY2hlLm1hcmtlZEFzVHJ5SW5saW5lKGZ1bmN0aW9uKTsKICAgICAgYm9vbCBjYWxsZWRPbmNlID0gX2lzQ2FsbGVkT25jZShmdW5jdGlvbik7CiAgICAgIC8vIElmIGEgbWV0aG9kIGlzIGNhbGxlZCBvbmx5IG9uY2UsIGFuZCBhbGwgdGhlIG1ldGhvZHMgaW4gdGhlIGlubGluaW5nCiAgICAgIC8vIHN0YWNrIGFyZSBjYWxsZWQgb25seSBvbmNlIGFzIHdlbGwsIHdlIGtub3cgd2Ugd2lsbCBzYXZlIG9uIG91dHB1dCBzaXplCiAgICAgIC8vIGJ5IGlubGluaW5nIHRoaXMgbWV0aG9kLgogICAgICBpZiAobWFya2VkVHJ5SW5saW5lIHx8IGNhbGxlZE9uY2UpIHsKICAgICAgICBtYXhJbmxpbmluZ05vZGVzID0gbnVsbDsKICAgICAgfQogICAgICBib29sIGFsbG93TG9vcHMgPSBmYWxzZTsKICAgICAgaWYgKG1hcmtlZFRyeUlubGluZSkgewogICAgICAgIGFsbG93TG9vcHMgPSB0cnVlOwogICAgICB9CgogICAgICBib29sIGNhbklubGluZSA9IGlubGluZURhdGEuY2FuQmVJbmxpbmVkKAogICAgICAgICAgbWF4SW5saW5pbmdOb2RlczogbWF4SW5saW5pbmdOb2RlcywgYWxsb3dMb29wczogYWxsb3dMb29wcyk7CiAgICAgIGlmIChtYXJrZWRUcnlJbmxpbmUpIHsKICAgICAgICBpZiAoY2FuSW5saW5lKSB7CiAgICAgICAgICBfaW5saW5lQ2FjaGUubWFya0FzSW5saW5hYmxlKGZ1bmN0aW9uLCBpbnNpZGVMb29wOiB0cnVlKTsKICAgICAgICAgIF9pbmxpbmVDYWNoZS5tYXJrQXNJbmxpbmFibGUoZnVuY3Rpb24sIGluc2lkZUxvb3A6IGZhbHNlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgX2lubGluZUNhY2hlLm1hcmtBc05vbklubGluYWJsZShmdW5jdGlvbiwgaW5zaWRlTG9vcDogdHJ1ZSk7CiAgICAgICAgICBfaW5saW5lQ2FjaGUubWFya0FzTm9uSW5saW5hYmxlKGZ1bmN0aW9uLCBpbnNpZGVMb29wOiBmYWxzZSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGNhbGxlZE9uY2UpIHsKICAgICAgICAvLyBUT0RPKDM0MjAzKTogV2UgY2FuJ3QgdXBkYXRlIHRoZSBkZWNpc2lvbiBkdWUgdG8gaW1wcmVjaXNpb24gaW4gdGhlCiAgICAgICAgLy8gY2FsbGVkT25jZSBkYXRhLCBkZXNjcmliZWQgaW4gSXNzdWUgMzQyMDMuCiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGNhbklubGluZSkgewogICAgICAgICAgX2lubGluZUNhY2hlLm1hcmtBc0lubGluYWJsZShmdW5jdGlvbiwgaW5zaWRlTG9vcDogaW5zaWRlTG9vcCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChfaXNGdW5jdGlvbkNhbGxlZE9uY2UoZnVuY3Rpb24pKSB7CiAgICAgICAgICAgIC8vIFRPRE8oMzQyMDMpOiBXZSBjYW4ndCB1cGRhdGUgdGhlIGRlY2lzaW9uIGR1ZSB0byBpbXByZWNpc2lvbiBpbgogICAgICAgICAgICAvLyB0aGUgY2FsbGVkT25jZSBkYXRhLCBkZXNjcmliZWQgaW4gSXNzdWUgMzQyMDMuCiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfaW5saW5lQ2FjaGUubWFya0FzTm9uSW5saW5hYmxlKGZ1bmN0aW9uLCBpbnNpZGVMb29wOiBpbnNpZGVMb29wKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGNhbklubGluZTsKICAgIH0KCiAgICB2b2lkIGRvSW5saW5pbmcoKSB7CiAgICAgIGlmIChmdW5jdGlvbi5pc0NvbnN0cnVjdG9yKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UoCiAgICAgICAgICAgIG5ldyBTdGF0aWNVc2UuY29uc3RydWN0b3JJbmxpbmluZyhmdW5jdGlvbiwgaW5zdGFuY2VUeXBlKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KGluc3RhbmNlVHlwZSA9PSBudWxsLAogICAgICAgICAgICAiVW5leHBlY3RlZCBpbnN0YW5jZSB0eXBlIGZvciAkZnVuY3Rpb246ICRpbnN0YW5jZVR5cGUiKTsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZSgKICAgICAgICAgICAgbmV3IFN0YXRpY1VzZS5tZXRob2RJbmxpbmluZyhmdW5jdGlvbiwgdHlwZUFyZ3VtZW50cykpOwogICAgICB9CgogICAgICAvLyBBZGQgYW4gZXhwbGljaXQgbnVsbCBjaGVjayBvbiB0aGUgcmVjZWl2ZXIgYmVmb3JlIGRvaW5nIHRoZQogICAgICAvLyBpbmxpbmluZy4gV2UgdXNlIFtlbGVtZW50XSB0byBnZXQgdGhlIHNhbWUgbmFtZSBpbiB0aGUKICAgICAgLy8gTm9TdWNoTWV0aG9kRXJyb3IgbWVzc2FnZSBhcyBpZiB3ZSBoYWQgY2FsbGVkIGl0LgogICAgICBpZiAoZnVuY3Rpb24uaXNJbnN0YW5jZU1lbWJlciAmJgogICAgICAgICAgZnVuY3Rpb24gaXMhIENvbnN0cnVjdG9yQm9keUVudGl0eSAmJgogICAgICAgICAgKG1hc2sgPT0gbnVsbCB8fAogICAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzTnVsbChtYXNrKS5pc1BvdGVudGlhbGx5VHJ1ZSkpIHsKICAgICAgICBhZGQobmV3IEhGaWVsZEdldChudWxsLCBwcm92aWRlZEFyZ3VtZW50c1swXSwKICAgICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUsIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgICAgICBpc0Fzc2lnbmFibGU6IGZhbHNlKSk7CiAgICAgIH0KICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGNvbXBpbGVkQXJndW1lbnRzID0gX2NvbXBsZXRlQ2FsbEFyZ3VtZW50c0xpc3QoCiAgICAgICAgICBmdW5jdGlvbiwgc2VsZWN0b3IsIHByb3ZpZGVkQXJndW1lbnRzLCBjdXJyZW50Tm9kZSk7CiAgICAgIF9lbnRlcklubGluZWRNZXRob2QoZnVuY3Rpb24sIGNvbXBpbGVkQXJndW1lbnRzLCBpbnN0YW5jZVR5cGUpOwogICAgICBfaW5saW5lZEZyb20oZnVuY3Rpb24sIHNvdXJjZUluZm9ybWF0aW9uLCAoKSB7CiAgICAgICAgaWYgKCFfaXNSZWFjaGFibGUpIHsKICAgICAgICAgIF9lbWl0UmV0dXJuKGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCksIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgX2RvSW5saW5lKGZ1bmN0aW9uKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBfbGVhdmVJbmxpbmVkTWV0aG9kKCk7CiAgICB9CgogICAgaWYgKG1lZXRzSGFyZENvbnN0cmFpbnRzKCkgJiYgaGV1cmlzdGljU2F5R29vZFRvR28oKSkgewogICAgICBkb0lubGluaW5nKCk7CiAgICAgIF9pbmZvUmVwb3J0ZXI/LnJlcG9ydElubGluZWQoCiAgICAgICAgICBmdW5jdGlvbiwKICAgICAgICAgIF9pbmxpbmluZ1N0YWNrLmlzRW1wdHkKICAgICAgICAgICAgICA/IHRhcmdldEVsZW1lbnQKICAgICAgICAgICAgICA6IF9pbmxpbmluZ1N0YWNrLmxhc3QuZnVuY3Rpb24pOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLy8gUmV0dXJucyBhIGNvbXBsZXRlIGFyZ3VtZW50IGxpc3QgZm9yIGEgY2FsbCBvZiBbZnVuY3Rpb25dLgogIExpc3Q8SEluc3RydWN0aW9uPiBfY29tcGxldGVDYWxsQXJndW1lbnRzTGlzdCgKICAgICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24sCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gcHJvdmlkZWRBcmd1bWVudHMsCiAgICAgIGlyLk5vZGUgY3VycmVudE5vZGUpIHsKICAgIGFzc2VydChwcm92aWRlZEFyZ3VtZW50cyAhPSBudWxsKTsKCiAgICBib29sIGlzSW5zdGFuY2VNZW1iZXIgPSBmdW5jdGlvbi5pc0luc3RhbmNlTWVtYmVyOwogICAgLy8gRm9yIHN0YXRpYyBjYWxscywgW3Byb3ZpZGVkQXJndW1lbnRzXSBpcyBjb21wbGV0ZSwgZGVmYXVsdCBhcmd1bWVudHMKICAgIC8vIGhhdmUgYmVlbiBpbmNsdWRlZCBpZiBuZWNlc3NhcnksIHNlZSBbbWFrZVN0YXRpY0FyZ3VtZW50TGlzdF0uCiAgICBpZiAoIWlzSW5zdGFuY2VNZW1iZXIgfHwKICAgICAgICBjdXJyZW50Tm9kZSA9PSBudWxsIHx8IC8vIEluIGVycm9uZW91cyBjb2RlLCBjdXJyZW50Tm9kZSBjYW4gYmUgbnVsbC4KICAgICAgICBfcHJvdmlkZWRBcmd1bWVudHNLbm93blRvQmVDb21wbGV0ZShjdXJyZW50Tm9kZSkgfHwKICAgICAgICBmdW5jdGlvbiBpcyBDb25zdHJ1Y3RvckJvZHlFbnRpdHkgfHwKICAgICAgICBzZWxlY3Rvci5pc0dldHRlcikgewogICAgICAvLyBGb3IgdGhlc2UgY2FzZXMsIHRoZSBwcm92aWRlZCBhcmd1bWVudCBsaXN0IGlzIGtub3duIHRvIGJlIGNvbXBsZXRlLgogICAgICByZXR1cm4gcHJvdmlkZWRBcmd1bWVudHM7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX2NvbXBsZXRlRHluYW1pY0NhbGxBcmd1bWVudHNMaXN0KAogICAgICAgICAgc2VsZWN0b3IsIGZ1bmN0aW9uLCBwcm92aWRlZEFyZ3VtZW50cyk7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyBhIGNvbXBsZXRlIGFyZ3VtZW50IGxpc3QgZm9yIGEgZHluYW1pYyBjYWxsIG9mIFtmdW5jdGlvbl0uIFRoZQogIC8vLyBpbml0aWFsIGFyZ3VtZW50IGxpc3QgW3Byb3ZpZGVkQXJndW1lbnRzXSwgY3JlYXRlZCBieQogIC8vLyBbYWRkRHluYW1pY1NlbmRBcmd1bWVudHNUb0xpc3RdLCBkb2VzIG5vdCBpbmNsdWRlIHZhbHVlcyBmb3IgZGVmYXVsdAogIC8vLyBhcmd1bWVudHMgdXNlZCBpbiB0aGUgY2FsbC4gVGhlIHJlYXNvbiBpcyB0aGF0IHRoZSB0YXJnZXQgZnVuY3Rpb24gKHdoaWNoCiAgLy8vIGRlZmluZXMgdGhlIGRlZmF1bHRzKSBpcyBub3Qga25vd24uCiAgLy8vCiAgLy8vIEhvd2V2ZXIsIGlubGluaW5nIGNhbiBvbmx5IGJlIHBlcmZvcm1lZCB3aGVuIHRoZSB0YXJnZXQgZnVuY3Rpb24gY2FuIGJlCiAgLy8vIHJlc29sdmVkIHN0YXRpY2FsbHkuIFRoZSBkZWZhdWx0cyBjYW4gdGhlcmVmb3JlIGJlIGluY2x1ZGVkIGF0IHRoaXMgcG9pbnQuCiAgLy8vCiAgLy8vIFRoZSBbcHJvdmlkZWRBcmd1bWVudHNdIGxpc3QgY29udGFpbnMgZmlyc3QgYWxsIHBvc2l0aW9uYWwgYXJndW1lbnRzLCB0aGVuCiAgLy8vIHRoZSBwcm92aWRlZCBuYW1lZCBhcmd1bWVudHMgKHRoZSBuYW1lZCBhcmd1bWVudHMgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUKICAvLy8gW3NlbGVjdG9yXSkgaW4gYSBzcGVjaWZpYyBvcmRlciAoc2VlIFthZGREeW5hbWljU2VuZEFyZ3VtZW50c1RvTGlzdF0pLgogIExpc3Q8SEluc3RydWN0aW9uPiBfY29tcGxldGVEeW5hbWljQ2FsbEFyZ3VtZW50c0xpc3QoU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uLCBMaXN0PEhJbnN0cnVjdGlvbj4gcHJvdmlkZWRBcmd1bWVudHMpIHsKICAgIGFzc2VydChzZWxlY3Rvci5hcHBsaWVzKGZ1bmN0aW9uKSk7CiAgICBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUgPSBzZWxlY3Rvci5jYWxsU3RydWN0dXJlOwogICAgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSA9IGZ1bmN0aW9uLnBhcmFtZXRlclN0cnVjdHVyZTsKICAgIExpc3Q8U3RyaW5nPiBzZWxlY3RvckFyZ3VtZW50TmFtZXMgPQogICAgICAgIHNlbGVjdG9yLmNhbGxTdHJ1Y3R1cmUuZ2V0T3JkZXJlZE5hbWVkQXJndW1lbnRzKCk7CiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gY29tcGlsZWRBcmd1bWVudHMgPSBuZXcgTGlzdDxISW5zdHJ1Y3Rpb24+KAogICAgICAgIHBhcmFtZXRlclN0cnVjdHVyZS50b3RhbFBhcmFtZXRlcnMgKwogICAgICAgICAgICBwYXJhbWV0ZXJTdHJ1Y3R1cmUudHlwZVBhcmFtZXRlcnMgKwogICAgICAgICAgICAxKTsgLy8gUGx1cyBvbmUgZm9yIHJlY2VpdmVyLgoKICAgIGludCBjb21waWxlZEFyZ3VtZW50SW5kZXggPSAwOwoKICAgIC8vIENvcHkgcmVjZWl2ZXIuCiAgICBjb21waWxlZEFyZ3VtZW50c1tjb21waWxlZEFyZ3VtZW50SW5kZXgrK10gPSBwcm92aWRlZEFyZ3VtZW50c1swXTsKCiAgICAvLy8gT2Zmc2V0IG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzIGluIFtwcm92aWRlZEFyZ3VtZW50c10uCiAgICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50T2Zmc2V0ID0gMTsKCiAgICAvLy8gT2Zmc2V0IG9mIG5hbWVkIGFyZ3VtZW50cyBpbiBbcHJvdmlkZWRBcmd1bWVudHNdLgogICAgaW50IG5hbWVkQXJndW1lbnRPZmZzZXQgPSBjYWxsU3RydWN0dXJlLnBvc2l0aW9uYWxBcmd1bWVudENvdW50ICsgMTsKCiAgICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50SW5kZXggPSAwOwogICAgaW50IG5hbWVkQXJndW1lbnRJbmRleCA9IDA7CgogICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoUGFyYW1ldGVyKGZ1bmN0aW9uLAogICAgICAgIChEYXJ0VHlwZSB0eXBlLCBTdHJpbmcgbmFtZSwgQ29uc3RhbnRWYWx1ZSBkZWZhdWx0VmFsdWUpIHsKICAgICAgaWYgKHBvc2l0aW9uYWxBcmd1bWVudEluZGV4IDwgcGFyYW1ldGVyU3RydWN0dXJlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzKSB7CiAgICAgICAgaWYgKHBvc2l0aW9uYWxBcmd1bWVudEluZGV4IDwgY2FsbFN0cnVjdHVyZS5wb3NpdGlvbmFsQXJndW1lbnRDb3VudCkgewogICAgICAgICAgY29tcGlsZWRBcmd1bWVudHNbY29tcGlsZWRBcmd1bWVudEluZGV4KytdID0gcHJvdmlkZWRBcmd1bWVudHNbCiAgICAgICAgICAgICAgcG9zaXRpb25hbEFyZ3VtZW50T2Zmc2V0ICsgcG9zaXRpb25hbEFyZ3VtZW50SW5kZXgrK107CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFzc2VydChkZWZhdWx0VmFsdWUgIT0gbnVsbCwKICAgICAgICAgICAgICBmYWlsZWRBdChmdW5jdGlvbiwgJ05vIGNvbnN0YW50IGNvbXB1dGVkIGZvciBwYXJhbWV0ZXIgJG5hbWUnKSk7CiAgICAgICAgICBjb21waWxlZEFyZ3VtZW50c1tjb21waWxlZEFyZ3VtZW50SW5kZXgrK10gPQogICAgICAgICAgICAgIGdyYXBoLmFkZENvbnN0YW50KGRlZmF1bHRWYWx1ZSwgY2xvc2VkV29ybGQpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBFeGFtcGxlOgogICAgICAgIC8vICAgICB2b2lkIGZvbyhhLCB7YiwgZCwgY30pCiAgICAgICAgLy8gICAgIGZvbygwLCBkID0gMSwgYiA9IDIpCiAgICAgICAgLy8KICAgICAgICAvLyBwcm92aWRlZEFyZ3VtZW50cyA9IFswLCAyLCAxXQogICAgICAgIC8vIHNlbGVjdG9yQXJndW1lbnROYW1lcyA9IFtiLCBkXQogICAgICAgIC8vIHBhcmFtZXRlclN0cnVjdHVyZS5uYW1lZFBhcmFtZXRlcnMgPSBbYiwgYywgZF0KICAgICAgICAvLwogICAgICAgIC8vIEZvciBlYWNoIHBhcmFtZXRlciBuYW1lIGluIHRoZSBzaWduYXR1cmUsIGlmIHRoZSBhcmd1bWVudCBuYW1lCiAgICAgICAgLy8gbWF0Y2hlcyB3ZSB1c2UgdGhlIG5leHQgcHJvdmlkZWQgYXJndW1lbnQsIG90aGVyd2lzZSB3ZSBnZXQgdGhlCiAgICAgICAgLy8gZGVmYXVsdC4KICAgICAgICBpZiAobmFtZWRBcmd1bWVudEluZGV4IDwgc2VsZWN0b3JBcmd1bWVudE5hbWVzLmxlbmd0aCAmJgogICAgICAgICAgICBuYW1lID09IHNlbGVjdG9yQXJndW1lbnROYW1lc1tuYW1lZEFyZ3VtZW50SW5kZXhdKSB7CiAgICAgICAgICAvLyBUaGUgbmFtZWQgYXJndW1lbnQgd2FzIHByb3ZpZGVkIGluIHRoZSBmdW5jdGlvbiBpbnZvY2F0aW9uLgogICAgICAgICAgY29tcGlsZWRBcmd1bWVudHNbY29tcGlsZWRBcmd1bWVudEluZGV4KytdID0KICAgICAgICAgICAgICBwcm92aWRlZEFyZ3VtZW50c1tuYW1lZEFyZ3VtZW50T2Zmc2V0ICsgbmFtZWRBcmd1bWVudEluZGV4KytdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhc3NlcnQoZGVmYXVsdFZhbHVlICE9IG51bGwsCiAgICAgICAgICAgICAgZmFpbGVkQXQoZnVuY3Rpb24sICdObyBjb25zdGFudCBjb21wdXRlZCBmb3IgcGFyYW1ldGVyICRuYW1lJykpOwogICAgICAgICAgY29tcGlsZWRBcmd1bWVudHNbY29tcGlsZWRBcmd1bWVudEluZGV4KytdID0KICAgICAgICAgICAgICBncmFwaC5hZGRDb25zdGFudChkZWZhdWx0VmFsdWUsIGNsb3NlZFdvcmxkKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgaWYgKF9ydGlOZWVkLm1ldGhvZE5lZWRzVHlwZUFyZ3VtZW50cyhmdW5jdGlvbikpIHsKICAgICAgaWYgKGNhbGxTdHJ1Y3R1cmUudHlwZUFyZ3VtZW50Q291bnQgPT0KICAgICAgICAgIHBhcmFtZXRlclN0cnVjdHVyZS50eXBlUGFyYW1ldGVycykgewogICAgICAgIC8vLyBPZmZzZXQgb2YgdHlwZSBhcmd1bWVudHMgaW4gW3Byb3ZpZGVkQXJndW1lbnRzXS4KICAgICAgICBpbnQgdHlwZUFyZ3VtZW50T2Zmc2V0ID0gY2FsbFN0cnVjdHVyZS5hcmd1bWVudENvdW50ICsgMTsKICAgICAgICAvLyBQYXNzIGV4cGxpY2l0IHR5cGUgYXJndW1lbnRzLgogICAgICAgIGZvciAoaW50IHR5cGVBcmd1bWVudEluZGV4ID0gMDsKICAgICAgICAgICAgdHlwZUFyZ3VtZW50SW5kZXggPCBjYWxsU3RydWN0dXJlLnR5cGVBcmd1bWVudENvdW50OwogICAgICAgICAgICB0eXBlQXJndW1lbnRJbmRleCsrKSB7CiAgICAgICAgICBjb21waWxlZEFyZ3VtZW50c1tjb21waWxlZEFyZ3VtZW50SW5kZXgrK10gPQogICAgICAgICAgICAgIHByb3ZpZGVkQXJndW1lbnRzW3R5cGVBcmd1bWVudE9mZnNldCArIHR5cGVBcmd1bWVudEluZGV4XTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KGNhbGxTdHJ1Y3R1cmUudHlwZUFyZ3VtZW50Q291bnQgPT0gMCk7CiAgICAgICAgLy8gUGFzcyB0eXBlIHZhcmlhYmxlIGJvdW5kcyBhcyB0eXBlIGFyZ3VtZW50cy4KICAgICAgICBmb3IgKFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlCiAgICAgICAgICAgIGluIF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlVmFyaWFibGVzKGZ1bmN0aW9uKSkgewogICAgICAgICAgY29tcGlsZWRBcmd1bWVudHNbY29tcGlsZWRBcmd1bWVudEluZGV4KytdID0KICAgICAgICAgICAgICBfY29tcHV0ZVR5cGVBcmd1bWVudERlZmF1bHRWYWx1ZShmdW5jdGlvbiwgdHlwZVZhcmlhYmxlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBjb21waWxlZEFyZ3VtZW50czsKICB9CgogIEhJbnN0cnVjdGlvbiBfY29tcHV0ZVR5cGVBcmd1bWVudERlZmF1bHRWYWx1ZSgKICAgICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24sIFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlKSB7CiAgICBEYXJ0VHlwZSBib3VuZCA9CiAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRUeXBlVmFyaWFibGVEZWZhdWx0VHlwZSh0eXBlVmFyaWFibGUuZWxlbWVudCk7CiAgICBpZiAoYm91bmQuY29udGFpbnNUeXBlVmFyaWFibGVzICYmICFvcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpIHsKICAgICAgLy8gVE9ETygzMzQyMik6IFN1cHBvcnQgdHlwZSB2YXJpYWJsZXMgaW4gZGVmYXVsdAogICAgICAvLyB0eXBlcy4gVGVtcG9yYXJpbHkgdXNpbmcgdGhlICJhbnkiIHR5cGUgKGVuY29kZWQgYXMgLTIpIHRvCiAgICAgIC8vIGF2b2lkIGZhaWxpbmcgb24gYm91bmRzIGNoZWNrcy4KICAgICAgcmV0dXJuIGdyYXBoLmFkZENvbnN0YW50SW50KC0yLCBjbG9zZWRXb3JsZCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX3R5cGVCdWlsZGVyLmFuYWx5emVUeXBlQXJndW1lbnQoYm91bmQsIGZ1bmN0aW9uKTsKICAgIH0KICB9CgogIC8vLyBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIGJlZm9yZSBpbmxpbmluZyB0aGUgYm9keSBvZiBbZnVuY3Rpb25dIGludG8gdGhpcwogIC8vLyBbU3NhR3JhcGhCdWlsZGVyXS4KICB2b2lkIF9lbnRlcklubGluZWRNZXRob2QoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24sCiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBjb21waWxlZEFyZ3VtZW50cywgSW50ZXJmYWNlVHlwZSBpbnN0YW5jZVR5cGUpIHsKICAgIEtlcm5lbElubGluaW5nU3RhdGUgc3RhdGUgPSBuZXcgS2VybmVsSW5saW5pbmdTdGF0ZSgKICAgICAgICBmdW5jdGlvbiwKICAgICAgICBfcmV0dXJuTG9jYWwsCiAgICAgICAgX3JldHVyblR5cGUsCiAgICAgICAgc3RhY2ssCiAgICAgICAgbG9jYWxzSGFuZGxlciwKICAgICAgICBfaW5UcnlTdGF0ZW1lbnQsCiAgICAgICAgX2lzQ2FsbGVkT25jZShmdW5jdGlvbikpOwogICAgX2lubGluaW5nU3RhY2suYWRkKHN0YXRlKTsKCiAgICAvLyBTZXR0aW5nIHVwIHRoZSBzdGF0ZSBvZiB0aGUgKEFTVCkgYnVpbGRlciBpcyBwZXJmb3JtZWQgZXZlbiB3aGVuIHRoZQogICAgLy8gaW5saW5lZCBmdW5jdGlvbiBpcyBpbiBJUiwgYmVjYXVzZSB0aGUgaXJJbmxpbmVyIHVzZXMgdGhlIFtyZXR1cm5FbGVtZW50XQogICAgLy8gb2YgdGhlIEFTVCBidWlsZGVyLgogICAgX3NldHVwU3RhdGVGb3JJbmxpbmluZyhmdW5jdGlvbiwgY29tcGlsZWRBcmd1bWVudHMsIGluc3RhbmNlVHlwZSk7CiAgfQoKICAvLy8gVGhpcyBtZXRob2Qgc2V0cyB1cCB0aGUgbG9jYWwgc3RhdGUgb2YgdGhlIGJ1aWxkZXIgZm9yIGlubGluaW5nCiAgLy8vIFtmdW5jdGlvbl0uIFRoZSBhcmd1bWVudHMgb2YgdGhlIGZ1bmN0aW9uIGFyZSBpbnNlcnRlZCBpbnRvIHRoZQogIC8vLyBbbG9jYWxzSGFuZGxlcl0uCiAgLy8vCiAgLy8vIFdoZW4gaW5saW5pbmcgYSBmdW5jdGlvbiwgYHJldHVybmAgc3RhdGVtZW50cyBhcmUgbm90IGVtaXR0ZWQgYXMKICAvLy8gW0hSZXR1cm5dIGluc3RydWN0aW9ucy4gSW5zdGVhZCwgdGhlIHZhbHVlIG9mIGEgc3ludGhldGljIGVsZW1lbnQgaXMKICAvLy8gdXBkYXRlZCBpbiB0aGUgW2xvY2Fsc0hhbmRsZXJdLiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgc3VjaCBhbiBlbGVtZW50IGFuZAogIC8vLyBzdG9yZXMgaXQgaW4gdGhlIFtfcmV0dXJuTG9jYWxdIGZpZWxkLgogIHZvaWQgX3NldHVwU3RhdGVGb3JJbmxpbmluZyhGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGNvbXBpbGVkQXJndW1lbnRzLCBJbnRlcmZhY2VUeXBlIGluc3RhbmNlVHlwZSkgewogICAgbG9jYWxzSGFuZGxlciA9IG5ldyBMb2NhbHNIYW5kbGVyKAogICAgICAgIHRoaXMsCiAgICAgICAgZnVuY3Rpb24sCiAgICAgICAgZnVuY3Rpb24sCiAgICAgICAgaW5zdGFuY2VUeXBlID8/IF9lbGVtZW50TWFwLmdldE1lbWJlclRoaXNUeXBlKGZ1bmN0aW9uKSwKICAgICAgICBfbmF0aXZlRGF0YSwKICAgICAgICBfaW50ZXJjZXB0b3JEYXRhKTsKICAgIGxvY2Fsc0hhbmRsZXIuc2NvcGVJbmZvID0gX2Nsb3N1cmVEYXRhTG9va3VwLmdldFNjb3BlSW5mbyhmdW5jdGlvbik7CgogICAgQ2FwdHVyZWRTY29wZSBzY29wZURhdGEgPSBfY2xvc3VyZURhdGFMb29rdXAuZ2V0Q2FwdHVyZWRTY29wZShmdW5jdGlvbik7CiAgICBib29sIGZvckdlbmVyYXRpdmVDb25zdHJ1Y3RvckJvZHkgPSBmdW5jdGlvbiBpcyBDb25zdHJ1Y3RvckJvZHlFbnRpdHk7CgogICAgX3JldHVybkxvY2FsID0gbmV3IFN5bnRoZXRpY0xvY2FsKCJyZXN1bHQiLCBmdW5jdGlvbiwgZnVuY3Rpb24pOwogICAgbG9jYWxzSGFuZGxlci51cGRhdGVMb2NhbChfcmV0dXJuTG9jYWwsIGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCkpOwoKICAgIF9pblRyeVN0YXRlbWVudCA9IGZhbHNlOyAvLyBUT0RPKGxyeSk6IHdoeT8gRG9jdW1lbnQuCgogICAgaW50IGFyZ3VtZW50SW5kZXggPSAwOwogICAgaWYgKGZ1bmN0aW9uLmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgbG9jYWxzSGFuZGxlci51cGRhdGVMb2NhbChsb2NhbHNIYW5kbGVyLnNjb3BlSW5mby50aGlzTG9jYWwsCiAgICAgICAgICBjb21waWxlZEFyZ3VtZW50c1thcmd1bWVudEluZGV4KytdKTsKICAgIH0KCiAgICBib29sIGhhc0JveCA9IGZhbHNlOwogICAgS2VybmVsVG9Mb2NhbHNNYXAgbG9jYWxzTWFwID0KICAgICAgICBjbG9zZWRXb3JsZC5nbG9iYWxMb2NhbHNNYXAuZ2V0TG9jYWxzTWFwKGZ1bmN0aW9uKTsKICAgIGZvckVhY2hPcmRlcmVkUGFyYW1ldGVyKF9lbGVtZW50TWFwLCBmdW5jdGlvbiwKICAgICAgICAoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwge2Jvb2wgaXNFbGlkZWR9KSB7CiAgICAgIExvY2FsIGxvY2FsID0gbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUodmFyaWFibGUpOwogICAgICBpZiAoaXNFbGlkZWQpIHsKICAgICAgICBsb2NhbHNIYW5kbGVyLnVwZGF0ZUxvY2FsKGxvY2FsLCBfZGVmYXVsdFZhbHVlRm9yUGFyYW1ldGVyKHZhcmlhYmxlKSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChmb3JHZW5lcmF0aXZlQ29uc3RydWN0b3JCb2R5ICYmIHNjb3BlRGF0YS5pc0JveGVkVmFyaWFibGUobG9jYWwpKSB7CiAgICAgICAgLy8gVGhlIHBhcmFtZXRlciB3aWxsIGJlIGEgZmllbGQgaW4gdGhlIGJveCBwYXNzZWQgYXMgdGhlIGxhc3QKICAgICAgICAvLyBwYXJhbWV0ZXIuIFNvIG5vIG5lZWQgdG8gaGF2ZSBpdC4KICAgICAgICBoYXNCb3ggPSB0cnVlOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBISW5zdHJ1Y3Rpb24gYXJndW1lbnQgPSBjb21waWxlZEFyZ3VtZW50c1thcmd1bWVudEluZGV4KytdOwogICAgICBsb2NhbHNIYW5kbGVyLnVwZGF0ZUxvY2FsKGxvY2FsLCBhcmd1bWVudCk7CiAgICB9KTsKCiAgICBpZiAoaGFzQm94KSB7CiAgICAgIEhJbnN0cnVjdGlvbiBib3ggPSBjb21waWxlZEFyZ3VtZW50c1thcmd1bWVudEluZGV4KytdOwogICAgICBhc3NlcnQoYm94IGlzIEhDcmVhdGVCb3gpOwogICAgICAvLyBUT0RPKHNyYSk6IE1ha2UgaW5saW5pbmcgb2YgY2xvc3VyZXMgd29yay4gV2Ugc2hvdWxkIGFsd2F5cyBjYWxsCiAgICAgIC8vIGVudGVyU2NvcGUsIGFuZCBwYXNzIGluIHRoZSBpbmxpbmVkICd0aGlzJyBhcyB3ZWxsIGFzIHRoZSAnYm94Jy4KICAgICAgbG9jYWxzSGFuZGxlci5lbnRlclNjb3BlKHNjb3BlRGF0YSwgbnVsbCwKICAgICAgICAgIGlubGluZWRCb3g6IGJveCwKICAgICAgICAgIGZvckdlbmVyYXRpdmVDb25zdHJ1Y3RvckJvZHk6IGZvckdlbmVyYXRpdmVDb25zdHJ1Y3RvckJvZHkpOwogICAgfQoKICAgIENsYXNzRW50aXR5IGVuY2xvc2luZyA9IGZ1bmN0aW9uLmVuY2xvc2luZ0NsYXNzOwogICAgaWYgKChmdW5jdGlvbi5pc0NvbnN0cnVjdG9yIHx8IGZ1bmN0aW9uIGlzIENvbnN0cnVjdG9yQm9keUVudGl0eSkgJiYKICAgICAgICBfcnRpTmVlZC5jbGFzc05lZWRzVHlwZUFyZ3VtZW50cyhlbmNsb3NpbmcpKSB7CiAgICAgIEludGVyZmFjZVR5cGUgdGhpc1R5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGVuY2xvc2luZyk7CiAgICAgIHRoaXNUeXBlLnR5cGVBcmd1bWVudHMuZm9yRWFjaCgoX3R5cGVWYXJpYWJsZSkgewogICAgICAgIFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlID0gX3R5cGVWYXJpYWJsZTsKICAgICAgICBISW5zdHJ1Y3Rpb24gYXJndW1lbnQgPSBjb21waWxlZEFyZ3VtZW50c1thcmd1bWVudEluZGV4KytdOwogICAgICAgIGxvY2Fsc0hhbmRsZXIudXBkYXRlTG9jYWwoCiAgICAgICAgICAgIGxvY2Fsc0hhbmRsZXIuZ2V0VHlwZVZhcmlhYmxlQXNMb2NhbCh0eXBlVmFyaWFibGUpLCBhcmd1bWVudCk7CiAgICAgIH0pOwogICAgfQogICAgaWYgKF9ydGlOZWVkLm1ldGhvZE5lZWRzVHlwZUFyZ3VtZW50cyhmdW5jdGlvbikpIHsKICAgICAgYm9vbCBpbmxpbmVUeXBlUGFyYW1ldGVycyA9CiAgICAgICAgICBmdW5jdGlvbi5wYXJhbWV0ZXJTdHJ1Y3R1cmUudHlwZVBhcmFtZXRlcnMgPT0gMDsKICAgICAgZm9yIChUeXBlVmFyaWFibGVUeXBlIHR5cGVWYXJpYWJsZQogICAgICAgICAgaW4gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvblR5cGVWYXJpYWJsZXMoZnVuY3Rpb24pKSB7CiAgICAgICAgSEluc3RydWN0aW9uIGFyZ3VtZW50OwogICAgICAgIGlmIChpbmxpbmVUeXBlUGFyYW1ldGVycykgewogICAgICAgICAgLy8gQWRkIGlubGluZWQgdHlwZSBwYXJhbWV0ZXJzLgogICAgICAgICAgYXJndW1lbnQgPSBfY29tcHV0ZVR5cGVBcmd1bWVudERlZmF1bHRWYWx1ZShmdW5jdGlvbiwgdHlwZVZhcmlhYmxlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYXJndW1lbnQgPSBjb21waWxlZEFyZ3VtZW50c1thcmd1bWVudEluZGV4KytdOwogICAgICAgIH0KICAgICAgICBsb2NhbHNIYW5kbGVyLnVwZGF0ZUxvY2FsKAogICAgICAgICAgICBsb2NhbHNIYW5kbGVyLmdldFR5cGVWYXJpYWJsZUFzTG9jYWwodHlwZVZhcmlhYmxlKSwgYXJndW1lbnQpOwogICAgICB9CiAgICB9CiAgICBhc3NlcnQoCiAgICAgICAgYXJndW1lbnRJbmRleCA9PSBjb21waWxlZEFyZ3VtZW50cy5sZW5ndGggfHwKICAgICAgICAgICAgIV9ydGlOZWVkLm1ldGhvZE5lZWRzVHlwZUFyZ3VtZW50cyhmdW5jdGlvbikgJiYKICAgICAgICAgICAgICAgIGNvbXBpbGVkQXJndW1lbnRzLmxlbmd0aCAtIGFyZ3VtZW50SW5kZXggPT0KICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbi5wYXJhbWV0ZXJTdHJ1Y3R1cmUudHlwZVBhcmFtZXRlcnMsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGZ1bmN0aW9uLAogICAgICAgICAgICAiT25seSAke2FyZ3VtZW50SW5kZXh9IG9mICR7Y29tcGlsZWRBcmd1bWVudHMubGVuZ3RofSAiCiAgICAgICAgICAgICJhcmd1bWVudHMgaGF2ZSBiZWVuIHJlYWQgZnJvbTogJHtjb21waWxlZEFyZ3VtZW50c30gcGFzc2VkIHRvICIKICAgICAgICAgICAgIiRmdW5jdGlvbi4iKSk7CgogICAgX3JldHVyblR5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZShmdW5jdGlvbikucmV0dXJuVHlwZTsKICAgIHN0YWNrID0gPEhJbnN0cnVjdGlvbj5bXTsKCiAgICBfaW5zZXJ0Q292ZXJhZ2VDYWxsKGZ1bmN0aW9uKTsKICB9CgogIHZvaWQgX2xlYXZlSW5saW5lZE1ldGhvZCgpIHsKICAgIEhJbnN0cnVjdGlvbiByZXN1bHQgPSBsb2NhbHNIYW5kbGVyLnJlYWRMb2NhbChfcmV0dXJuTG9jYWwpOwogICAgS2VybmVsSW5saW5pbmdTdGF0ZSBzdGF0ZSA9IF9pbmxpbmluZ1N0YWNrLnJlbW92ZUxhc3QoKTsKICAgIF9yZXN0b3JlU3RhdGUoc3RhdGUpOwogICAgc3RhY2suYWRkKHJlc3VsdCk7CiAgfQoKICB2b2lkIF9yZXN0b3JlU3RhdGUoS2VybmVsSW5saW5pbmdTdGF0ZSBzdGF0ZSkgewogICAgbG9jYWxzSGFuZGxlciA9IHN0YXRlLm9sZExvY2Fsc0hhbmRsZXI7CiAgICBfcmV0dXJuTG9jYWwgPSBzdGF0ZS5vbGRSZXR1cm5Mb2NhbDsKICAgIF9pblRyeVN0YXRlbWVudCA9IHN0YXRlLmluVHJ5U3RhdGVtZW50OwogICAgX3JldHVyblR5cGUgPSBzdGF0ZS5vbGRSZXR1cm5UeXBlOwogICAgYXNzZXJ0KHN0YWNrLmlzRW1wdHkpOwogICAgc3RhY2sgPSBzdGF0ZS5vbGRTdGFjazsKICB9CgogIGJvb2wgX3Byb3ZpZGVkQXJndW1lbnRzS25vd25Ub0JlQ29tcGxldGUoaXIuTm9kZSBjdXJyZW50Tm9kZSkgewogICAgLyogV2hlbiBpbmxpbmluZyB0aGUgaXRlcmF0b3IgbWV0aG9kcyBnZW5lcmF0ZWQgZm9yIGEgZm9yLWluIGxvb3AsIHRoZQogICAgICogW2N1cnJlbnROb2RlXSBpcyB0aGUgW0ZvckluXSB0cmVlLiBUaGUgY29tcGlsZXItZ2VuZXJhdGVkIGl0ZXJhdG9yCiAgICAgKiBpbnZvY2F0aW9ucyBhcmUga25vd24gdG8gaGF2ZSBmdWxseSBzcGVjaWZpZWQgYXJndW1lbnQgbGlzdHMsIG5vIGRlZmF1bHQKICAgICAqIGFyZ3VtZW50cyBhcmUgdXNlZC4gU2VlIGludm9jYXRpb25zIG9mIFtwdXNoSW52b2tlRHluYW1pY10gaW4KICAgICAqIFt2aXNpdEZvckluXS4KICAgICAqLwogICAgLy8gVE9ETyhyZWRlbXB0aW9uKTogSXMgdGhpcyB2YWxpZCBoZXJlPwogICAgcmV0dXJuIGN1cnJlbnROb2RlIGlzIGlyLkZvckluU3RhdGVtZW50OwogIH0KCiAgdm9pZCBfZW1pdFJldHVybihISW5zdHJ1Y3Rpb24gdmFsdWUsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBpZiAoX2lubGluaW5nU3RhY2suaXNFbXB0eSkgewogICAgICBfY2xvc2VBbmRHb3RvRXhpdCgKICAgICAgICAgIG5ldyBIUmV0dXJuKF9hYnN0cmFjdFZhbHVlRG9tYWluLCB2YWx1ZSwgc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0gZWxzZSB7CiAgICAgIGxvY2Fsc0hhbmRsZXIudXBkYXRlTG9jYWwoX3JldHVybkxvY2FsLCB2YWx1ZSk7CiAgICB9CiAgfQoKICB2b2lkIF9kb0lubGluZShGdW5jdGlvbkVudGl0eSBmdW5jdGlvbikgewogICAgX3Zpc2l0SW5saW5lZEZ1bmN0aW9uKGZ1bmN0aW9uKTsKICB9CgogIC8vLyBSdW4gdGhpcyBidWlsZGVyIG9uIHRoZSBib2R5IG9mIHRoZSBbZnVuY3Rpb25dIHRvIGJlIGlubGluZWQuCiAgdm9pZCBfdmlzaXRJbmxpbmVkRnVuY3Rpb24oRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pIHsKICAgIF9wb3RlbnRpYWxseUNoZWNrSW5saW5lZFBhcmFtZXRlclR5cGVzKGZ1bmN0aW9uKTsKCiAgICBNZW1iZXJEZWZpbml0aW9uIGRlZmluaXRpb24gPSBfZWxlbWVudE1hcC5nZXRNZW1iZXJEZWZpbml0aW9uKGZ1bmN0aW9uKTsKICAgIHN3aXRjaCAoZGVmaW5pdGlvbi5raW5kKSB7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jb25zdHJ1Y3RvcjoKICAgICAgICBfYnVpbGRDb25zdHJ1Y3RvcihmdW5jdGlvbiwgZGVmaW5pdGlvbi5ub2RlKTsKICAgICAgICByZXR1cm47CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jb25zdHJ1Y3RvckJvZHk6CiAgICAgICAgaXIuQ29uc3RydWN0b3IgY29uc3RydWN0b3IgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgY29uc3RydWN0b3IuZnVuY3Rpb24uYm9keS5hY2NlcHQodGhpcyk7CiAgICAgICAgcmV0dXJuOwogICAgICBjYXNlIE1lbWJlcktpbmQucmVndWxhcjoKICAgICAgICBpci5Ob2RlIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgaWYgKG5vZGUgaXMgaXIuQ29uc3RydWN0b3IpIHsKICAgICAgICAgIG5vZGUuZnVuY3Rpb24uYm9keS5hY2NlcHQodGhpcyk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlIGlmIChub2RlIGlzIGlyLlByb2NlZHVyZSkgewogICAgICAgICAgbm9kZS5mdW5jdGlvbi5ib2R5LmFjY2VwdCh0aGlzKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jbG9zdXJlQ2FsbDoKICAgICAgICBpci5Mb2NhbEZ1bmN0aW9uIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgbm9kZS5mdW5jdGlvbi5ib2R5LmFjY2VwdCh0aGlzKTsKICAgICAgICByZXR1cm47CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBmYWlsZWRBdChmdW5jdGlvbiwgIlVuZXhwZWN0ZWQgaW5saW5lZCBmdW5jdGlvbjogJGRlZmluaXRpb24iKTsKICB9CgogIC8vLyBHZW5lcmF0ZXMgdHlwZSB0ZXN0cyBmb3IgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGlubGluZWQgZnVuY3Rpb24uCiAgdm9pZCBfcG90ZW50aWFsbHlDaGVja0lubGluZWRQYXJhbWV0ZXJUeXBlcyhGdW5jdGlvbkVudGl0eSBmdW5jdGlvbikgewogICAgLy8gVE9ETyhzcmEpOiBJbmNvcnBvcmF0ZSBwcm9wZXJ0aWVzIG9mIGNhbGwgc2l0ZSB0byBoZWxwIGRldGVybWluZSB3aGljaAogICAgLy8gdHlwZSBwYXJhbWV0ZXJzIGFuZCB2YWx1ZSBwYXJhbWV0ZXJzIG5lZWQgdG8gYmUgY2hlY2tlZC4KICAgIGJvb2wgdHJ1c3RlZCA9IGZhbHNlOwogICAgaWYgKGZ1bmN0aW9uLmlzU3RhdGljIHx8CiAgICAgICAgZnVuY3Rpb24uaXNUb3BMZXZlbCB8fAogICAgICAgIGZ1bmN0aW9uLmlzQ29uc3RydWN0b3IgfHwKICAgICAgICBmdW5jdGlvbiBpcyBDb25zdHJ1Y3RvckJvZHlFbnRpdHkpIHsKICAgICAgLy8gV2UgaW5saW5lIHN0YXRpYyBtZXRob2RzLCB0b3AtbGV2ZWwgbWV0aG9kcywgY29uc3RydWN0b3JzIGFuZAogICAgICAvLyBjb25zdHJ1Y3RvciBib2RpZXMgb25seSBmcm9tIGRpcmVjdCBjYWxsIHNpdGVzLgogICAgICB0cnVzdGVkID0gdHJ1ZTsKICAgIH0KCiAgICBpZiAoIXRydXN0ZWQpIHsKICAgICAgX2NoZWNrVHlwZVZhcmlhYmxlQm91bmRzKGZ1bmN0aW9uKTsKICAgIH0KCiAgICBLZXJuZWxUb0xvY2Fsc01hcCBsb2NhbHNNYXAgPQogICAgICAgIGNsb3NlZFdvcmxkLmdsb2JhbExvY2Fsc01hcC5nZXRMb2NhbHNNYXAoZnVuY3Rpb24pOwogICAgZm9yRWFjaE9yZGVyZWRQYXJhbWV0ZXIoX2VsZW1lbnRNYXAsIGZ1bmN0aW9uLAogICAgICAgIChpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCB7Ym9vbCBpc0VsaWRlZH0pIHsKICAgICAgTG9jYWwgcGFyYW1ldGVyID0gbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUodmFyaWFibGUpOwogICAgICBISW5zdHJ1Y3Rpb24gYXJndW1lbnQgPSBsb2NhbHNIYW5kbGVyLnJlYWRMb2NhbChwYXJhbWV0ZXIpOwogICAgICBEYXJ0VHlwZSB0eXBlID0gbG9jYWxzTWFwLmdldExvY2FsVHlwZShfZWxlbWVudE1hcCwgcGFyYW1ldGVyKTsKICAgICAgSEluc3RydWN0aW9uIGNoZWNrZWRPclRydXN0ZWQ7CiAgICAgIGlmICh0cnVzdGVkKSB7CiAgICAgICAgY2hlY2tlZE9yVHJ1c3RlZCA9IF90eXBlQnVpbGRlci50cnVzdFR5cGVPZlBhcmFtZXRlcihhcmd1bWVudCwgdHlwZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY2hlY2tlZE9yVHJ1c3RlZCA9IF90eXBlQnVpbGRlci5wb3RlbnRpYWxseUNoZWNrT3JUcnVzdFR5cGVPZlBhcmFtZXRlcigKICAgICAgICAgICAgZnVuY3Rpb24sIGFyZ3VtZW50LCB0eXBlKTsKICAgICAgfQogICAgICBsb2NhbHNIYW5kbGVyLnVwZGF0ZUxvY2FsKHBhcmFtZXRlciwgY2hlY2tlZE9yVHJ1c3RlZCk7CiAgICB9KTsKICB9CgogIGJvb2wgZ2V0IF9hbGxJbmxpbmVkRnVuY3Rpb25zQ2FsbGVkT25jZSB7CiAgICByZXR1cm4gX2lubGluaW5nU3RhY2suaXNFbXB0eSB8fCBfaW5saW5pbmdTdGFjay5sYXN0LmFsbEZ1bmN0aW9uc0NhbGxlZE9uY2U7CiAgfQoKICBib29sIF9pc0Z1bmN0aW9uQ2FsbGVkT25jZShGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICAvLyBDb25zdHJ1Y3RvckJvZHlFbGVtZW50cyBhcmUgbm90IGluIHRoZSB0eXBlIGluZmVyZW5jZSBncmFwaC4KICAgIGlmIChlbGVtZW50IGlzIENvbnN0cnVjdG9yQm9keUVudGl0eSkgewogICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gc3ViY2xhc3NlcyB3aXRoIGNvbnN0cnVjdG9ycyB0aGF0IGhhdmUgdGhpcyBjb25zdHJ1Y3RvcgogICAgICAvLyBhcyBhIHN1cGVyY29uc3RydWN0b3IsIGl0IGlzIGNhbGxlZCBvbmNlIGJ5IHRoZSBnZW5lcmF0aXZlCiAgICAgIC8vIGNvbnN0cnVjdG9yJ3MgZmFjdG9yeS4gIEEgc2ltcGxpZmllZCB2ZXJzaW9uIGlzIHRvIGNoZWNrIHRoaXMgaXMgYQogICAgICAvLyBjb25zdHJ1Y3RvciBib2R5IGZvciBhIGxlYWYgY2xhc3MuCiAgICAgIENsYXNzRW50aXR5IGNsYXNzXyA9IGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3M7CiAgICAgIGlmIChjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc0RpcmVjdGx5SW5zdGFudGlhdGVkKGNsYXNzXykpIHsKICAgICAgICByZXR1cm4gIWNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzSW5kaXJlY3RseUluc3RhbnRpYXRlZChjbGFzc18pOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiBnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLnJlc3VsdE9mTWVtYmVyKGVsZW1lbnQpLmlzQ2FsbGVkT25jZTsKICB9CgogIGJvb2wgX2lzQ2FsbGVkT25jZShGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gX2FsbElubGluZWRGdW5jdGlvbnNDYWxsZWRPbmNlICYmIF9pc0Z1bmN0aW9uQ2FsbGVkT25jZShlbGVtZW50KTsKICB9CgogIHZvaWQgX2luc2VydENvdmVyYWdlQ2FsbChNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgaWYgKCFvcHRpb25zLmV4cGVyaW1lbnRDYWxsSW5zdHJ1bWVudGF0aW9uKSByZXR1cm47CiAgICBpZiAoZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMudHJhY2VIZWxwZXIpIHJldHVybjsKICAgIC8vIFRPRE8oc2lnbXVuZCk6IGNyZWF0ZSBhIGJldHRlciB1dWlkIGZvciBlbGVtZW50cy4KICAgIEhDb25zdGFudCBpZENvbnN0YW50ID0gZ3JhcGguYWRkQ29uc3RhbnRJbnQoZWxlbWVudC5oYXNoQ29kZSwgY2xvc2VkV29ybGQpOwogICAgbihlKSA9PiBlID09IG51bGwgPyAnJyA6IGUubmFtZTsKICAgIFN0cmluZyBuYW1lID0gIiR7bihlbGVtZW50LmxpYnJhcnkpfToke24oZWxlbWVudC5lbmNsb3NpbmdDbGFzcyl9LiIKICAgICAgICAiJHtuKGVsZW1lbnQpfSI7CiAgICBIQ29uc3RhbnQgbmFtZUNvbnN0YW50ID0gZ3JhcGguYWRkQ29uc3RhbnRTdHJpbmcobmFtZSwgY2xvc2VkV29ybGQpOwogICAgYWRkKG5ldyBISW52b2tlU3RhdGljKAogICAgICAgIF9jb21tb25FbGVtZW50cy50cmFjZUhlbHBlciwKICAgICAgICA8SEluc3RydWN0aW9uPltpZENvbnN0YW50LCBuYW1lQ29uc3RhbnRdLAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlLAogICAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSkpOwogIH0KfQoKLy8vIERhdGEgY29sbGVjdGVkIHRvIGNyZWF0ZSBhIGNvbnN0cnVjdG9yLgpjbGFzcyBDb25zdHJ1Y3RvckRhdGEgewogIC8vLyBJbmxpbmVkIChzdXBlcikgY29uc3RydWN0b3JzLgogIGZpbmFsIExpc3Q8aXIuQ29uc3RydWN0b3I+IGNvbnN0cnVjdG9yQ2hhaW4gPSA8aXIuQ29uc3RydWN0b3I+W107CgogIC8vLyBJbml0aWFsIHZhbHVlcyBmb3IgYWxsIGluc3RhbmNlIGZpZWxkcy4KICBmaW5hbCBNYXA8RmllbGRFbnRpdHksIEhJbnN0cnVjdGlvbj4gZmllbGRWYWx1ZXMgPQogICAgICA8RmllbGRFbnRpdHksIEhJbnN0cnVjdGlvbj57fTsKCiAgLy8vIENsYXNzZXMgZm9yIHdoaWNoIHR5cGUgdmFyaWFibGVzIGhhdmUgYmVlbiBwcmVwYXJlZC4KICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IGluY2x1ZGVkQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7Cn0KCmNsYXNzIEtlcm5lbElubGluaW5nU3RhdGUgewogIGZpbmFsIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uOwogIGZpbmFsIExvY2FsIG9sZFJldHVybkxvY2FsOwogIGZpbmFsIERhcnRUeXBlIG9sZFJldHVyblR5cGU7CiAgZmluYWwgTGlzdDxISW5zdHJ1Y3Rpb24+IG9sZFN0YWNrOwogIGZpbmFsIExvY2Fsc0hhbmRsZXIgb2xkTG9jYWxzSGFuZGxlcjsKICBmaW5hbCBib29sIGluVHJ5U3RhdGVtZW50OwogIGZpbmFsIGJvb2wgYWxsRnVuY3Rpb25zQ2FsbGVkT25jZTsKCiAgS2VybmVsSW5saW5pbmdTdGF0ZSgKICAgICAgdGhpcy5mdW5jdGlvbiwKICAgICAgdGhpcy5vbGRSZXR1cm5Mb2NhbCwKICAgICAgdGhpcy5vbGRSZXR1cm5UeXBlLAogICAgICB0aGlzLm9sZFN0YWNrLAogICAgICB0aGlzLm9sZExvY2Fsc0hhbmRsZXIsCiAgICAgIHRoaXMuaW5UcnlTdGF0ZW1lbnQsCiAgICAgIHRoaXMuYWxsRnVuY3Rpb25zQ2FsbGVkT25jZSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdLZXJuZWxJbmxpbmluZ1N0YXRlKCRmdW5jdGlvbiwnCiAgICAgICdhbGxGdW5jdGlvbnNDYWxsZWRPbmNlPSRhbGxGdW5jdGlvbnNDYWxsZWRPbmNlKSc7Cn0KCi8vLyBDbGFzcyBpbiBjaGFyZ2Ugb2YgYnVpbGRpbmcgdHJ5LCBjYXRjaCBhbmQvb3IgZmluYWxseSBibG9ja3MuIFRoaXMgaGFuZGxlcwovLy8gdGhlIGluc3RydWN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgb3V0cHV0IGFuZCB0aGUgZG9taW5hdG9yIGNhbGN1bGF0aW9uIG9mCi8vLyB0aGlzIHNlcXVlbmNlIG9mIGNvZGUuCmNsYXNzIFRyeUNhdGNoRmluYWxseUJ1aWxkZXIgewogIGZpbmFsIEtlcm5lbFNzYUdyYXBoQnVpbGRlciBrZXJuZWxCdWlsZGVyOwogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uIHRyeVNvdXJjZUluZm9ybWF0aW9uOwoKICBIQmFzaWNCbG9jayBlbnRlckJsb2NrOwogIEhCYXNpY0Jsb2NrIHN0YXJ0VHJ5QmxvY2s7CiAgSEJhc2ljQmxvY2sgZW5kVHJ5QmxvY2s7CiAgSEJhc2ljQmxvY2sgc3RhcnRDYXRjaEJsb2NrOwogIEhCYXNpY0Jsb2NrIGVuZENhdGNoQmxvY2s7CiAgSEJhc2ljQmxvY2sgc3RhcnRGaW5hbGx5QmxvY2s7CiAgSEJhc2ljQmxvY2sgZW5kRmluYWxseUJsb2NrOwogIEhCYXNpY0Jsb2NrIGV4aXRCbG9jazsKICBIVHJ5IHRyeUluc3RydWN0aW9uOwogIEhMb2NhbFZhbHVlIGV4Y2VwdGlvbjsKCiAgLy8vIFRydWUgaWYgdGhlIGNvZGUgc3Vycm91bmRpbmcgdGhpcyB0cnkgc3RhdGVtZW50IHdhcyBhbHNvIHBhcnQgb2YgYQogIC8vLyB0cnkvY2F0Y2gvZmluYWxseSBzdGF0ZW1lbnQuCiAgYm9vbCBwcmV2aW91c2x5SW5UcnlTdGF0ZW1lbnQ7CgogIFN1YkdyYXBoIGJvZHlHcmFwaDsKICBTdWJHcmFwaCBjYXRjaEdyYXBoOwogIFN1YkdyYXBoIGZpbmFsbHlHcmFwaDsKCiAgLy8gVGhlIG9yaWdpbmFsIHNldCBvZiBsb2NhbHMgdGhhdCB3ZXJlIGRlZmluZWQgYmVmb3JlIHRoaXMgdHJ5IGJsb2NrLgogIC8vIFRoZSBjYXRjaCBibG9jayBhbmQgdGhlIGZpbmFsbHkgYmxvY2sgbXVzdCBub3QgcmV1c2UgdGhlIGV4aXN0aW5nIGxvY2FscwogIC8vIGhhbmRsZXIuIE5vbmUgb2YgdGhlIHZhcmlhYmxlcyB0aGF0IGhhdmUgYmVlbiBkZWZpbmVkIGluIHRoZSBib2R5LWJsb2NrCiAgLy8gd2lsbCBiZSB1c2VkLCBidXQgZm9yIGxvb3BzIHdlIHdpbGwgYWRkICh1bm5lY2Vzc2FyeSkgcGhpcyB0aGF0IHdpbGwKICAvLyByZWZlcmVuY2UgdGhlIGJvZHkgdmFyaWFibGVzLiBUaGlzIG1ha2VzIGl0IGxvb2sgYXMgaWYgdGhlIHZhcmlhYmxlcyB3ZXJlCiAgLy8gdXNlZCBpbiBhIG5vbi1kb21pbmF0ZWQgYmxvY2suCiAgTG9jYWxzSGFuZGxlciBvcmlnaW5hbFNhdmVkTG9jYWxzOwoKICBUcnlDYXRjaEZpbmFsbHlCdWlsZGVyKHRoaXMua2VybmVsQnVpbGRlciwgdGhpcy50cnlTb3VyY2VJbmZvcm1hdGlvbikgewogICAgdHJ5SW5zdHJ1Y3Rpb24gPSBuZXcgSFRyeShrZXJuZWxCdWlsZGVyLl9hYnN0cmFjdFZhbHVlRG9tYWluKTsKICAgIG9yaWdpbmFsU2F2ZWRMb2NhbHMgPSBuZXcgTG9jYWxzSGFuZGxlci5mcm9tKGtlcm5lbEJ1aWxkZXIubG9jYWxzSGFuZGxlcik7CiAgICBlbnRlckJsb2NrID0ga2VybmVsQnVpbGRlci5vcGVuTmV3QmxvY2soKTsKICAgIGtlcm5lbEJ1aWxkZXIuY2xvc2UodHJ5SW5zdHJ1Y3Rpb24pOwogICAgcHJldmlvdXNseUluVHJ5U3RhdGVtZW50ID0ga2VybmVsQnVpbGRlci5faW5UcnlTdGF0ZW1lbnQ7CiAgICBrZXJuZWxCdWlsZGVyLl9pblRyeVN0YXRlbWVudCA9IHRydWU7CgogICAgc3RhcnRUcnlCbG9jayA9IGtlcm5lbEJ1aWxkZXIuZ3JhcGguYWRkTmV3QmxvY2soKTsKICAgIGtlcm5lbEJ1aWxkZXIub3BlbihzdGFydFRyeUJsb2NrKTsKICB9CgogIHZvaWQgX2FkZEV4aXRUcnlTdWNjZXNzb3Ioc3VjY2Vzc29yKSB7CiAgICBpZiAoc3VjY2Vzc29yID09IG51bGwpIHJldHVybjsKICAgIC8vIEl0ZXJhdGUgb3ZlciBhbGwgYmxvY2tzIGNyZWF0ZWQgaW5zaWRlIHRoaXMgdHJ5L2NhdGNoLCBhbmQKICAgIC8vIGF0dGFjaCBzdWNjZXNzb3IgaW5mb3JtYXRpb24gdG8gYmxvY2tzIHRoYXQgZW5kIHdpdGgKICAgIC8vIFtIRXhpdFRyeV0uCiAgICBmb3IgKGludCBpID0gc3RhcnRUcnlCbG9jay5pZDsgaSA8IHN1Y2Nlc3Nvci5pZDsgaSsrKSB7CiAgICAgIEhCYXNpY0Jsb2NrIGJsb2NrID0ga2VybmVsQnVpbGRlci5ncmFwaC5ibG9ja3NbaV07CiAgICAgIHZhciBsYXN0ID0gYmxvY2subGFzdDsKICAgICAgaWYgKGxhc3QgaXMgSEV4aXRUcnkpIHsKICAgICAgICBibG9jay5hZGRTdWNjZXNzb3Ioc3VjY2Vzc29yKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBfYWRkT3B0aW9uYWxTdWNjZXNzb3IoYmxvY2sxLCBibG9jazIpIHsKICAgIGlmIChibG9jazIgIT0gbnVsbCkgYmxvY2sxLmFkZFN1Y2Nlc3NvcihibG9jazIpOwogIH0KCiAgLy8vIEhlbHBlciBmdW5jdGlvbiB0byBzZXQgdXAgYmFzaWMgYmxvY2sgc3VjY2Vzc29ycyBmb3IgdHJ5LWNhdGNoLWZpbmFsbHkKICAvLy8gc2VxdWVuY2VzLgogIHZvaWQgX3NldEJsb2NrU3VjY2Vzc29ycygpIHsKICAgIC8vIFNldHVwIGFsbCBzdWNjZXNzb3JzLiBUaGUgZW50cnkgYmxvY2sgdGhhdCBjb250YWlucyB0aGUgW0hUcnldCiAgICAvLyBoYXMgMSkgdGhlIGJvZHksIDIpIHRoZSBjYXRjaCwgMykgdGhlIGZpbmFsbHksIGFuZCA0KSB0aGUgZXhpdAogICAgLy8gYmxvY2tzIGFzIHN1Y2Nlc3NvcnMuCiAgICBlbnRlckJsb2NrLmFkZFN1Y2Nlc3NvcihzdGFydFRyeUJsb2NrKTsKICAgIF9hZGRPcHRpb25hbFN1Y2Nlc3NvcihlbnRlckJsb2NrLCBzdGFydENhdGNoQmxvY2spOwogICAgX2FkZE9wdGlvbmFsU3VjY2Vzc29yKGVudGVyQmxvY2ssIHN0YXJ0RmluYWxseUJsb2NrKTsKICAgIGVudGVyQmxvY2suYWRkU3VjY2Vzc29yKGV4aXRCbG9jayk7CgogICAgLy8gVGhlIGJvZHkgaGFzIGVpdGhlciB0aGUgY2F0Y2ggb3IgdGhlIGZpbmFsbHkgYmxvY2sgYXMgc3VjY2Vzc29yLgogICAgaWYgKGVuZFRyeUJsb2NrICE9IG51bGwpIHsKICAgICAgYXNzZXJ0KHN0YXJ0Q2F0Y2hCbG9jayAhPSBudWxsIHx8IHN0YXJ0RmluYWxseUJsb2NrICE9IG51bGwpOwogICAgICBlbmRUcnlCbG9jay5hZGRTdWNjZXNzb3IoCiAgICAgICAgICBzdGFydENhdGNoQmxvY2sgIT0gbnVsbCA/IHN0YXJ0Q2F0Y2hCbG9jayA6IHN0YXJ0RmluYWxseUJsb2NrKTsKICAgICAgZW5kVHJ5QmxvY2suYWRkU3VjY2Vzc29yKGV4aXRCbG9jayk7CiAgICB9CgogICAgLy8gVGhlIGNhdGNoIGJsb2NrIGhhcyBlaXRoZXIgdGhlIGZpbmFsbHkgb3IgdGhlIGV4aXQgYmxvY2sgYXMKICAgIC8vIHN1Y2Nlc3Nvci4KICAgIGVuZENhdGNoQmxvY2s/LmFkZFN1Y2Nlc3NvcigKICAgICAgICBzdGFydEZpbmFsbHlCbG9jayAhPSBudWxsID8gc3RhcnRGaW5hbGx5QmxvY2sgOiBleGl0QmxvY2spOwoKICAgIC8vIFRoZSBmaW5hbGx5IGJsb2NrIGhhcyB0aGUgZXhpdCBibG9jayBhcyBzdWNjZXNzb3IuCiAgICBlbmRGaW5hbGx5QmxvY2s/LmFkZFN1Y2Nlc3NvcihleGl0QmxvY2spOwoKICAgIC8vIElmIGEgYmxvY2sgaW5zaWRlIHRyeS9jYXRjaCBhYm9ydHMgKGVnIHdpdGggYSByZXR1cm4gc3RhdGVtZW50KSwKICAgIC8vIHdlIGV4cGxpY2l0bHkgbWFyayB0aGlzIGJsb2NrIGEgcHJlZGVjZXNzb3Igb2YgdGhlIGNhdGNoCiAgICAvLyBibG9jayBhbmQgdGhlIGZpbmFsbHkgYmxvY2suCiAgICBfYWRkRXhpdFRyeVN1Y2Nlc3NvcihzdGFydENhdGNoQmxvY2spOwogICAgX2FkZEV4aXRUcnlTdWNjZXNzb3Ioc3RhcnRGaW5hbGx5QmxvY2spOwogIH0KCiAgLy8vIEJ1aWxkIHRoZSBmaW5hbGx5e30gY2xhdXNlIG9mIGEgdHJ5L3tjYXRjaH0vZmluYWxseSBzdGF0ZW1lbnQuIE5vdGUgdGhpcwogIC8vLyBkb2VzIG5vdCBleGFtaW5lIHRoZSBib2R5IG9mIHRoZSB0cnkgY2xhdXNlLCBvbmx5IHRoZSBmaW5hbGx5IHBvcnRpb24uCiAgdm9pZCBidWlsZEZpbmFsbHlCbG9jayh2b2lkIGJ1aWxkRmluYWxpemVyKCkpIHsKICAgIGtlcm5lbEJ1aWxkZXIubG9jYWxzSGFuZGxlciA9IG5ldyBMb2NhbHNIYW5kbGVyLmZyb20ob3JpZ2luYWxTYXZlZExvY2Fscyk7CiAgICBzdGFydEZpbmFsbHlCbG9jayA9IGtlcm5lbEJ1aWxkZXIuZ3JhcGguYWRkTmV3QmxvY2soKTsKICAgIGtlcm5lbEJ1aWxkZXIub3BlbihzdGFydEZpbmFsbHlCbG9jayk7CiAgICBidWlsZEZpbmFsaXplcigpOwogICAgaWYgKCFrZXJuZWxCdWlsZGVyLmlzQWJvcnRlZCgpKSB7CiAgICAgIGVuZEZpbmFsbHlCbG9jayA9CiAgICAgICAgICBrZXJuZWxCdWlsZGVyLmNsb3NlKG5ldyBIR290byhrZXJuZWxCdWlsZGVyLl9hYnN0cmFjdFZhbHVlRG9tYWluKSk7CiAgICB9CiAgICB0cnlJbnN0cnVjdGlvbi5maW5hbGx5QmxvY2sgPSBzdGFydEZpbmFsbHlCbG9jazsKICAgIGZpbmFsbHlHcmFwaCA9CiAgICAgICAgbmV3IFN1YkdyYXBoKHN0YXJ0RmluYWxseUJsb2NrLCBrZXJuZWxCdWlsZGVyLmxhc3RPcGVuZWRCbG9jayk7CiAgfQoKICB2b2lkIGNsb3NlVHJ5Qm9keSgpIHsKICAgIC8vIFdlIHVzZSBhIFtIRXhpdFRyeV0gaW5zdGVhZCBvZiBhIFtIR290b10gZm9yIHRoZSB0cnkgYmxvY2sKICAgIC8vIGJlY2F1c2UgaXQgd2lsbCBoYXZlIG11bHRpcGxlIHN1Y2Nlc3NvcnM6IHRoZSBqb2luIGJsb2NrLCBhbmQKICAgIC8vIHRoZSBjYXRjaCBvciBmaW5hbGx5IGJsb2NrLgogICAgaWYgKCFrZXJuZWxCdWlsZGVyLmlzQWJvcnRlZCgpKSB7CiAgICAgIGVuZFRyeUJsb2NrID0KICAgICAgICAgIGtlcm5lbEJ1aWxkZXIuY2xvc2UobmV3IEhFeGl0VHJ5KGtlcm5lbEJ1aWxkZXIuX2Fic3RyYWN0VmFsdWVEb21haW4pKTsKICAgIH0KICAgIGJvZHlHcmFwaCA9IG5ldyBTdWJHcmFwaChzdGFydFRyeUJsb2NrLCBrZXJuZWxCdWlsZGVyLmxhc3RPcGVuZWRCbG9jayk7CiAgfQoKICB2b2lkIGJ1aWxkQ2F0Y2goaXIuVHJ5Q2F0Y2ggdHJ5Q2F0Y2gpIHsKICAgIGtlcm5lbEJ1aWxkZXIubG9jYWxzSGFuZGxlciA9IG5ldyBMb2NhbHNIYW5kbGVyLmZyb20ob3JpZ2luYWxTYXZlZExvY2Fscyk7CiAgICBzdGFydENhdGNoQmxvY2sgPSBrZXJuZWxCdWlsZGVyLmdyYXBoLmFkZE5ld0Jsb2NrKCk7CiAgICBrZXJuZWxCdWlsZGVyLm9wZW4oc3RhcnRDYXRjaEJsb2NrKTsKICAgIC8vIE5vdGUgdGhhdCB0aGUgbmFtZSBvZiB0aGlzIGxvY2FsIGlzIGlycmVsZXZhbnQuCiAgICBTeW50aGV0aWNMb2NhbCBsb2NhbCA9IGtlcm5lbEJ1aWxkZXIubG9jYWxzSGFuZGxlci5jcmVhdGVMb2NhbCgnZXhjZXB0aW9uJyk7CiAgICBleGNlcHRpb24gPQogICAgICAgIG5ldyBITG9jYWxWYWx1ZShsb2NhbCwga2VybmVsQnVpbGRlci5fYWJzdHJhY3RWYWx1ZURvbWFpbi5ub25OdWxsVHlwZSkKICAgICAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSB0cnlTb3VyY2VJbmZvcm1hdGlvbjsKICAgIGtlcm5lbEJ1aWxkZXIuYWRkKGV4Y2VwdGlvbik7CiAgICBISW5zdHJ1Y3Rpb24gb2xkUmV0aHJvd2FibGVFeGNlcHRpb24gPSBrZXJuZWxCdWlsZGVyLl9yZXRocm93YWJsZUV4Y2VwdGlvbjsKICAgIGtlcm5lbEJ1aWxkZXIuX3JldGhyb3dhYmxlRXhjZXB0aW9uID0gZXhjZXB0aW9uOwoKICAgIGtlcm5lbEJ1aWxkZXIuX3B1c2hTdGF0aWNJbnZvY2F0aW9uKAogICAgICAgIGtlcm5lbEJ1aWxkZXIuX2NvbW1vbkVsZW1lbnRzLmV4Y2VwdGlvblVud3JhcHBlciwKICAgICAgICBbZXhjZXB0aW9uXSwKICAgICAgICBrZXJuZWxCdWlsZGVyLl90eXBlSW5mZXJlbmNlTWFwCiAgICAgICAgICAgIC5nZXRSZXR1cm5UeXBlT2Yoa2VybmVsQnVpbGRlci5fY29tbW9uRWxlbWVudHMuZXhjZXB0aW9uVW53cmFwcGVyKSwKICAgICAgICBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHRyeVNvdXJjZUluZm9ybWF0aW9uKTsKICAgIEhJbnZva2VTdGF0aWMgdW53cmFwcGVkRXhjZXB0aW9uID0ga2VybmVsQnVpbGRlci5wb3AoKTsKICAgIHRyeUluc3RydWN0aW9uLmV4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKICAgIGludCBjYXRjaGVzSW5kZXggPSAwOwoKICAgIHZvaWQgcHVzaENvbmRpdGlvbihpci5DYXRjaCBjYXRjaEJsb2NrKSB7CiAgICAgIC8vIGBndWFyZGAgaXMgb2Z0ZW4gYGR5bmFtaWNgLCB3aGljaCBnZW5lcmF0ZXMgYHRydWVgLgogICAgICBrZXJuZWxCdWlsZGVyLl9wdXNoSXNUZXN0KGNhdGNoQmxvY2suZ3VhcmQsIHVud3JhcHBlZEV4Y2VwdGlvbiwKICAgICAgICAgIGtlcm5lbEJ1aWxkZXIuX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZENhdGNoKGNhdGNoQmxvY2spKTsKICAgIH0KCiAgICB2b2lkIHZpc2l0VGhlbigpIHsKICAgICAgaXIuQ2F0Y2ggY2F0Y2hCbG9jayA9IHRyeUNhdGNoLmNhdGNoZXNbY2F0Y2hlc0luZGV4XTsKICAgICAgY2F0Y2hlc0luZGV4Kys7CiAgICAgIGlmIChjYXRjaEJsb2NrLmV4Y2VwdGlvbiAhPSBudWxsKSB7CiAgICAgICAgTG9jYWwgZXhjZXB0aW9uVmFyaWFibGUgPQogICAgICAgICAgICBrZXJuZWxCdWlsZGVyLl9sb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZShjYXRjaEJsb2NrLmV4Y2VwdGlvbik7CiAgICAgICAga2VybmVsQnVpbGRlci5sb2NhbHNIYW5kbGVyLnVwZGF0ZUxvY2FsKAogICAgICAgICAgICBleGNlcHRpb25WYXJpYWJsZSwgdW53cmFwcGVkRXhjZXB0aW9uLAogICAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjoKICAgICAgICAgICAgICAgIGtlcm5lbEJ1aWxkZXIuX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZENhdGNoKGNhdGNoQmxvY2spKTsKICAgICAgfQogICAgICBpZiAoY2F0Y2hCbG9jay5zdGFja1RyYWNlICE9IG51bGwpIHsKICAgICAgICBrZXJuZWxCdWlsZGVyLl9wdXNoU3RhdGljSW52b2NhdGlvbigKICAgICAgICAgICAga2VybmVsQnVpbGRlci5fY29tbW9uRWxlbWVudHMudHJhY2VGcm9tRXhjZXB0aW9uLAogICAgICAgICAgICBbZXhjZXB0aW9uXSwKICAgICAgICAgICAga2VybmVsQnVpbGRlci5fdHlwZUluZmVyZW5jZU1hcC5nZXRSZXR1cm5UeXBlT2YoCiAgICAgICAgICAgICAgICBrZXJuZWxCdWlsZGVyLl9jb21tb25FbGVtZW50cy50cmFjZUZyb21FeGNlcHRpb24pLAogICAgICAgICAgICBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOgogICAgICAgICAgICAgICAga2VybmVsQnVpbGRlci5fc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkQ2F0Y2goY2F0Y2hCbG9jaykpOwogICAgICAgIEhJbnN0cnVjdGlvbiB0cmFjZUluc3RydWN0aW9uID0ga2VybmVsQnVpbGRlci5wb3AoKTsKICAgICAgICBMb2NhbCB0cmFjZVZhcmlhYmxlID0KICAgICAgICAgICAga2VybmVsQnVpbGRlci5fbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUoY2F0Y2hCbG9jay5zdGFja1RyYWNlKTsKICAgICAgICBrZXJuZWxCdWlsZGVyLmxvY2Fsc0hhbmRsZXIudXBkYXRlTG9jYWwodHJhY2VWYXJpYWJsZSwgdHJhY2VJbnN0cnVjdGlvbiwKICAgICAgICAgICAgc291cmNlSW5mb3JtYXRpb246CiAgICAgICAgICAgICAgICBrZXJuZWxCdWlsZGVyLl9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRDYXRjaChjYXRjaEJsb2NrKSk7CiAgICAgIH0KICAgICAgY2F0Y2hCbG9jay5ib2R5LmFjY2VwdChrZXJuZWxCdWlsZGVyKTsKICAgIH0KCiAgICB2b2lkIHZpc2l0RWxzZSgpIHsKICAgICAgaWYgKGNhdGNoZXNJbmRleCA+PSB0cnlDYXRjaC5jYXRjaGVzLmxlbmd0aCkgewogICAgICAgIGtlcm5lbEJ1aWxkZXIuX2Nsb3NlQW5kR290b0V4aXQobmV3IEhUaHJvdygKICAgICAgICAgICAga2VybmVsQnVpbGRlci5fYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgICAgICAgZXhjZXB0aW9uLAogICAgICAgICAgICBleGNlcHRpb24uc291cmNlSW5mb3JtYXRpb24sCiAgICAgICAgICAgIGlzUmV0aHJvdzogdHJ1ZSkpOwogICAgICB9IGVsc2UgewogICAgICAgIGlyLkNhdGNoIG5leHRDYXRjaCA9IHRyeUNhdGNoLmNhdGNoZXNbY2F0Y2hlc0luZGV4XTsKICAgICAgICBrZXJuZWxCdWlsZGVyLl9oYW5kbGVJZigKICAgICAgICAgICAgdmlzaXRDb25kaXRpb246ICgpIHsKICAgICAgICAgICAgICBwdXNoQ29uZGl0aW9uKG5leHRDYXRjaCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHZpc2l0VGhlbjogdmlzaXRUaGVuLAogICAgICAgICAgICB2aXNpdEVsc2U6IHZpc2l0RWxzZSwKICAgICAgICAgICAgc291cmNlSW5mb3JtYXRpb246CiAgICAgICAgICAgICAgICBrZXJuZWxCdWlsZGVyLl9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRDYXRjaChuZXh0Q2F0Y2gpKTsKICAgICAgfQogICAgfQoKICAgIGlyLkNhdGNoIGZpcnN0QmxvY2sgPSB0cnlDYXRjaC5jYXRjaGVzW2NhdGNoZXNJbmRleF07CiAgICBrZXJuZWxCdWlsZGVyLl9oYW5kbGVJZigKICAgICAgICB2aXNpdENvbmRpdGlvbjogKCkgewogICAgICAgICAgcHVzaENvbmRpdGlvbihmaXJzdEJsb2NrKTsKICAgICAgICB9LAogICAgICAgIHZpc2l0VGhlbjogdmlzaXRUaGVuLAogICAgICAgIHZpc2l0RWxzZTogdmlzaXRFbHNlLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOgogICAgICAgICAgICBrZXJuZWxCdWlsZGVyLl9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRDYXRjaChmaXJzdEJsb2NrKSk7CiAgICBpZiAoIWtlcm5lbEJ1aWxkZXIuaXNBYm9ydGVkKCkpIHsKICAgICAgZW5kQ2F0Y2hCbG9jayA9CiAgICAgICAgICBrZXJuZWxCdWlsZGVyLmNsb3NlKG5ldyBIR290byhrZXJuZWxCdWlsZGVyLl9hYnN0cmFjdFZhbHVlRG9tYWluKSk7CiAgICB9CgogICAga2VybmVsQnVpbGRlci5fcmV0aHJvd2FibGVFeGNlcHRpb24gPSBvbGRSZXRocm93YWJsZUV4Y2VwdGlvbjsKICAgIHRyeUluc3RydWN0aW9uLmNhdGNoQmxvY2sgPSBzdGFydENhdGNoQmxvY2s7CiAgICBjYXRjaEdyYXBoID0gbmV3IFN1YkdyYXBoKHN0YXJ0Q2F0Y2hCbG9jaywga2VybmVsQnVpbGRlci5sYXN0T3BlbmVkQmxvY2spOwogIH0KCiAgdm9pZCBjbGVhblVwKCkgewogICAgZXhpdEJsb2NrID0ga2VybmVsQnVpbGRlci5ncmFwaC5hZGROZXdCbG9jaygpOwogICAgX3NldEJsb2NrU3VjY2Vzc29ycygpOwoKICAgIC8vIFVzZSB0aGUgbG9jYWxzIGhhbmRsZXIgbm90IGFsdGVyZWQgYnkgdGhlIGNhdGNoIGFuZCBmaW5hbGx5CiAgICAvLyBibG9ja3MuCiAgICBrZXJuZWxCdWlsZGVyLmxvY2Fsc0hhbmRsZXIgPSBvcmlnaW5hbFNhdmVkTG9jYWxzOwogICAga2VybmVsQnVpbGRlci5vcGVuKGV4aXRCbG9jayk7CiAgICBlbnRlckJsb2NrLnNldEJsb2NrRmxvdygKICAgICAgICBuZXcgSFRyeUJsb2NrSW5mb3JtYXRpb24oCiAgICAgICAgICAgIGtlcm5lbEJ1aWxkZXIud3JhcFN0YXRlbWVudEdyYXBoKGJvZHlHcmFwaCksCiAgICAgICAgICAgIGV4Y2VwdGlvbiwKICAgICAgICAgICAga2VybmVsQnVpbGRlci53cmFwU3RhdGVtZW50R3JhcGgoY2F0Y2hHcmFwaCksCiAgICAgICAgICAgIGtlcm5lbEJ1aWxkZXIud3JhcFN0YXRlbWVudEdyYXBoKGZpbmFsbHlHcmFwaCkpLAogICAgICAgIGV4aXRCbG9jayk7CiAgICBrZXJuZWxCdWlsZGVyLl9pblRyeVN0YXRlbWVudCA9IHByZXZpb3VzbHlJblRyeVN0YXRlbWVudDsKICB9Cn0KCmNsYXNzIEtlcm5lbFR5cGVCdWlsZGVyIGV4dGVuZHMgVHlwZUJ1aWxkZXIgewogIEpzVG9FbGVtZW50TWFwIF9lbGVtZW50TWFwOwoKICBLZXJuZWxUeXBlQnVpbGRlcihLZXJuZWxTc2FHcmFwaEJ1aWxkZXIgYnVpbGRlciwgdGhpcy5fZWxlbWVudE1hcCkKICAgICAgOiBzdXBlcihidWlsZGVyKTsKCiAgQG92ZXJyaWRlCiAgS2VybmVsU3NhR3JhcGhCdWlsZGVyIGdldCBidWlsZGVyID0+IHN1cGVyLmJ1aWxkZXI7CgogIEBvdmVycmlkZQogIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzIGNvbXB1dGVUeXBlVmFyaWFibGVBY2Nlc3MoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgcmV0dXJuIF9lbGVtZW50TWFwLmdldENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzRm9yTWVtYmVyKG1lbWJlcik7CiAgfQp9CgpjbGFzcyBfRXJyb25lb3VzSW5pdGlhbGl6ZXJWaXNpdG9yIGV4dGVuZHMgaXIuVmlzaXRvcjxib29sPiB7CiAgX0Vycm9uZW91c0luaXRpYWxpemVyVmlzaXRvcigpOwoKICAvLyBUT0RPKDMwODA5KTogVXNlIGNvbnN0IGNvbnN0cnVjdG9yLgogIHN0YXRpYyBib29sIGNoZWNrKGlyLkluaXRpYWxpemVyIGluaXRpYWxpemVyKSA9PgogICAgICBpbml0aWFsaXplci5hY2NlcHQobmV3IF9FcnJvbmVvdXNJbml0aWFsaXplclZpc2l0b3IoKSk7CgogIEBvdmVycmlkZQogIGJvb2wgZGVmYXVsdEluaXRpYWxpemVyKGlyLk5vZGUgbm9kZSkgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRJbnZhbGlkSW5pdGlhbGl6ZXIoaXIuSW52YWxpZEluaXRpYWxpemVyIG5vZGUpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRMb2NhbEluaXRpYWxpemVyKGlyLkxvY2FsSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgcmV0dXJuIG5vZGUudmFyaWFibGUuaW5pdGlhbGl6ZXI/LmFjY2VwdCh0aGlzKSA/PyBmYWxzZTsKICB9CgogIC8vIEV4cHJlc3Npb25zOiBEb2VzIHRoZSBleHByZXNzaW9uIGFsd2F5cyB0aHJvdz8KICBAb3ZlcnJpZGUKICBib29sIGRlZmF1bHRFeHByZXNzaW9uKGlyLkV4cHJlc3Npb24gbm9kZSkgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUaHJvdyhpci5UaHJvdyBub2RlKSA9PiB0cnVlOwoKICAvLyBUT0RPKHNyYSk6IFdlIG1pZ2h0IG5lZWQgdG8gbWF0Y2ggb3RoZXIgZXhwcmVzc2lvbnMgdGhhdCBhbHdheXMgdGhyb3cgYnV0CiAgLy8gaW4gYSBzdWJleHByZXNzaW9uLgp9CgovLy8gU3BlY2lhbCBbSnVtcEhhbmRsZXJdIGltcGxlbWVudGF0aW9uIHVzZWQgdG8gaGFuZGxlIGNvbnRpbnVlIHN0YXRlbWVudHMKLy8vIHRhcmdldGluZyBzd2l0Y2ggY2FzZXMuCmNsYXNzIEtlcm5lbFN3aXRjaENhc2VKdW1wSGFuZGxlciBleHRlbmRzIFN3aXRjaENhc2VKdW1wSGFuZGxlciB7CiAgS2VybmVsU3dpdGNoQ2FzZUp1bXBIYW5kbGVyKEtlcm5lbFNzYUdyYXBoQnVpbGRlciBidWlsZGVyLCBKdW1wVGFyZ2V0IHRhcmdldCwKICAgICAgaXIuU3dpdGNoU3RhdGVtZW50IHN3aXRjaFN0YXRlbWVudCwgS2VybmVsVG9Mb2NhbHNNYXAgbG9jYWxzTWFwKQogICAgICA6IHN1cGVyKGJ1aWxkZXIsIHRhcmdldCkgewogICAgLy8gVGhlIHN3aXRjaCBjYXNlIGluZGljZXMgbXVzdCBtYXRjaCB0aG9zZSBjb21wdXRlZCBpbgogICAgLy8gW0tlcm5lbFNzYUJ1aWxkZXIuYnVpbGRTd2l0Y2hDYXNlQ29uc3RhbnRzXS4KICAgIC8vIFN3aXRjaCBpbmRpY2VzIGFyZSAxLWJhc2VkIHNvIHdlIGNhbiBieXBhc3MgdGhlIHN5bnRoZXRpYyBsb29wIHdoZW4gbm8KICAgIC8vIGNhc2VzIG1hdGNoIHNpbXBseSBieSBicmFuY2hpbmcgb24gdGhlIGluZGV4ICh3aGljaCBkZWZhdWx0cyB0byBudWxsKS4KICAgIC8vIFRPRE8KICAgIGludCBzd2l0Y2hJbmRleCA9IDE7CiAgICBmb3IgKGlyLlN3aXRjaENhc2Ugc3dpdGNoQ2FzZSBpbiBzd2l0Y2hTdGF0ZW1lbnQuY2FzZXMpIHsKICAgICAgSnVtcFRhcmdldCBjb250aW51ZVRhcmdldCA9CiAgICAgICAgICBsb2NhbHNNYXAuZ2V0SnVtcFRhcmdldEZvclN3aXRjaENhc2Uoc3dpdGNoQ2FzZSk7CiAgICAgIGlmIChjb250aW51ZVRhcmdldCAhPSBudWxsKSB7CiAgICAgICAgdGFyZ2V0SW5kZXhNYXBbY29udGludWVUYXJnZXRdID0gc3dpdGNoSW5kZXg7CiAgICAgICAgYXNzZXJ0KGJ1aWxkZXIuanVtcFRhcmdldHNbY29udGludWVUYXJnZXRdID09IG51bGwpOwogICAgICAgIGJ1aWxkZXIuanVtcFRhcmdldHNbY29udGludWVUYXJnZXRdID0gdGhpczsKICAgICAgfQogICAgICBzd2l0Y2hJbmRleCsrOwogICAgfQogIH0KfQoKY2xhc3MgU3RhdGljVHlwZSB7CiAgZmluYWwgRGFydFR5cGUgdHlwZTsKICBmaW5hbCBDbGFzc1JlbGF0aW9uIHJlbGF0aW9uOwoKICBTdGF0aWNUeXBlKHRoaXMudHlwZSwgdGhpcy5yZWxhdGlvbik7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gdHlwZS5oYXNoQ29kZSAqIDEzICsgcmVsYXRpb24uaGFzaENvZGUgKiAxOTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIG90aGVyIGlzIFN0YXRpY1R5cGUgJiYKICAgICAgICB0eXBlID09IG90aGVyLnR5cGUgJiYKICAgICAgICByZWxhdGlvbiA9PSBvdGhlci5yZWxhdGlvbjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdTdGF0aWNUeXBlKCR0eXBlLCRyZWxhdGlvbiknOwp9CgpjbGFzcyBJbmxpbmVEYXRhIHsKICBib29sIGlzQ29uc3RydWN0b3IgPSBmYWxzZTsKICBib29sIGNvZGVBZnRlclJldHVybiA9IGZhbHNlOwogIGJvb2wgaGFzTG9vcCA9IGZhbHNlOwogIGJvb2wgaGFzQ2xvc3VyZSA9IGZhbHNlOwogIGJvb2wgaGFzVHJ5ID0gZmFsc2U7CiAgYm9vbCBoYXNBc3luY0F3YWl0ID0gZmFsc2U7CiAgYm9vbCBoYXNUaHJvdyA9IGZhbHNlOwogIGJvb2wgaGFzTG9uZ1N0cmluZyA9IGZhbHNlOwogIGJvb2wgaGFzRXh0ZXJuYWxDb25zdGFudENvbnN0cnVjdG9yQ2FsbCA9IGZhbHNlOwogIGJvb2wgaGFzVHlwZUFyZ3VtZW50cyA9IGZhbHNlOwogIGJvb2wgaGFzQXJndW1lbnREZWZhdWx0aW5nID0gZmFsc2U7CiAgYm9vbCBoYXNDYXN0ID0gZmFsc2U7CiAgYm9vbCBoYXNJZiA9IGZhbHNlOwogIExpc3Q8aW50PiBhcmd1bWVudENvdW50cyA9IFtdOwogIGludCByZWd1bGFyTm9kZUNvdW50ID0gMDsKICBpbnQgY2FsbENvdW50ID0gMDsKICBpbnQgcmVkdWN0aXZlTm9kZUNvdW50ID0gMDsKCiAgSW5saW5lRGF0YSgpOwoKICBJbmxpbmVEYXRhLmludGVybmFsKAogICAgICB7dGhpcy5jb2RlQWZ0ZXJSZXR1cm4sCiAgICAgIHRoaXMuaGFzTG9vcCwKICAgICAgdGhpcy5oYXNDbG9zdXJlLAogICAgICB0aGlzLmhhc1RyeSwKICAgICAgdGhpcy5oYXNBc3luY0F3YWl0LAogICAgICB0aGlzLmhhc1Rocm93LAogICAgICB0aGlzLmhhc0xvbmdTdHJpbmcsCiAgICAgIHRoaXMucmVndWxhck5vZGVDb3VudCwKICAgICAgdGhpcy5jYWxsQ291bnR9KTsKCiAgYm9vbCBjYW5CZUlubGluZWQoe2ludCBtYXhJbmxpbmluZ05vZGVzLCBib29sIGFsbG93TG9vcHM6IGZhbHNlfSkgewogICAgcmV0dXJuIGNhbm5vdEJlSW5saW5lZFJlYXNvbigKICAgICAgICAgICAgbWF4SW5saW5pbmdOb2RlczogbWF4SW5saW5pbmdOb2RlcywgYWxsb3dMb29wczogYWxsb3dMb29wcykgPT0KICAgICAgICBudWxsOwogIH0KCiAgU3RyaW5nIGNhbm5vdEJlSW5saW5lZFJlYXNvbih7aW50IG1heElubGluaW5nTm9kZXMsIGJvb2wgYWxsb3dMb29wczogZmFsc2V9KSB7CiAgICBpZiAoaGFzTG9vcCAmJiAhYWxsb3dMb29wcykgewogICAgICByZXR1cm4gJ2xvb3AnOwogICAgfSBlbHNlIGlmIChoYXNUcnkpIHsKICAgICAgcmV0dXJuICd0cnknOwogICAgfSBlbHNlIGlmIChoYXNDbG9zdXJlKSB7CiAgICAgIHJldHVybiAnY2xvc3VyZSc7CiAgICB9IGVsc2UgaWYgKGNvZGVBZnRlclJldHVybikgewogICAgICByZXR1cm4gJ2NvZGUgYWZ0ZXIgcmV0dXJuJzsKICAgIH0gZWxzZSBpZiAoaGFzQXN5bmNBd2FpdCkgewogICAgICByZXR1cm4gJ2FzeW5jL2F3YWl0JzsKICAgIH0gZWxzZSBpZiAobWF4SW5saW5pbmdOb2RlcyAhPSBudWxsICYmCiAgICAgICAgcmVndWxhck5vZGVDb3VudCAtIDEgPiBtYXhJbmxpbmluZ05vZGVzKSB7CiAgICAgIHJldHVybiAndG9vIG1hbnkgbm9kZXMgKCR7cmVndWxhck5vZGVDb3VudCAtIDF9PiRtYXhJbmxpbmluZ05vZGVzKSc7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIGJvb2wgY2FuQmVJbmxpbmVkUmVkdWN0aXZlKHtpbnQgYXJndW1lbnRDb3VudH0pIHsKICAgIHJldHVybiBjYW5ub3RCZUlubGluZWRSZWR1Y3RpdmVSZWFzb24oYXJndW1lbnRDb3VudDogYXJndW1lbnRDb3VudCkgPT0gbnVsbDsKICB9CgogIFN0cmluZyBjYW5ub3RCZUlubGluZWRSZWR1Y3RpdmVSZWFzb24oe2ludCBhcmd1bWVudENvdW50fSkgewogICAgaWYgKGhhc1RyeSkgewogICAgICByZXR1cm4gJ3RyeSc7CiAgICB9IGVsc2UgaWYgKGhhc0Nsb3N1cmUpIHsKICAgICAgcmV0dXJuICdjbG9zdXJlJzsKICAgIH0gZWxzZSBpZiAoY29kZUFmdGVyUmV0dXJuKSB7CiAgICAgIHJldHVybiAnY29kZSBhZnRlciByZXR1cm4nOwogICAgfSBlbHNlIGlmIChoYXNBc3luY0F3YWl0KSB7CiAgICAgIHJldHVybiAnYXN5bmMvYXdhaXQnOwogICAgfSBlbHNlIGlmIChjYWxsQ291bnQgPiAxKSB7CiAgICAgIHJldHVybiAndG9vIG1hbnkgY2FsbHMnOwogICAgfSBlbHNlIGlmIChoYXNUaHJvdykgewogICAgICByZXR1cm4gJ3Rocm93JzsKICAgIH0gZWxzZSBpZiAoaGFzTG9uZ1N0cmluZykgewogICAgICByZXR1cm4gJ2xvbmcgc3RyaW5nJzsKICAgIH0gZWxzZSBpZiAoaGFzRXh0ZXJuYWxDb25zdGFudENvbnN0cnVjdG9yQ2FsbCkgewogICAgICByZXR1cm4gJ2V4dGVybmFsIGNvbnN0IGNvbnN0cnVjdG9yJzsKICAgIH0gZWxzZSBpZiAoaGFzVHlwZUFyZ3VtZW50cykgewogICAgICByZXR1cm4gJ3R5cGUgYXJndW1lbnRzJzsKICAgIH0gZWxzZSBpZiAoaGFzQXJndW1lbnREZWZhdWx0aW5nKSB7CiAgICAgIHJldHVybiAnYXJndW1lbnQgZGVmYXVsdGluZyc7CiAgICB9IGVsc2UgaWYgKGhhc0Nhc3QpIHsKICAgICAgcmV0dXJuICdjYXN0JzsKICAgIH0gZWxzZSBpZiAoaGFzSWYpIHsKICAgICAgcmV0dXJuICdpZic7CiAgICB9IGVsc2UgaWYgKGlzQ29uc3RydWN0b3IpIHsKICAgICAgcmV0dXJuICdjb25zdHJ1Y3Rvcic7CiAgICB9CiAgICBmb3IgKGludCBjb3VudCBpbiBhcmd1bWVudENvdW50cykgewogICAgICBpZiAoY291bnQgPiBhcmd1bWVudENvdW50KSB7CiAgICAgICAgcmV0dXJuICdpbmNyZWFzaW5nIGFyZ3VtZW50cyc7CiAgICAgIH0KICAgIH0KICAgIC8vIE5vZGUgYnVkZ2V0IHRoYXQgY292ZXJzIG9uZSBjYWxsIGFuZCB0aGUgcGFzc2VkLWluIGFyZ3VtZW50cy4KICAgIC8vIFRoZSArMSBhbHNvIGFsbG93cyBhIHRvcC1sZXZlbCB6ZXJvLWFyZ3VtZW50IHRvIGJlIGlubGluZWQgaWYgaXQKICAgIC8vIHJldHVybnMgYSBjb25zdGFudC4KICAgIGludCBtYXhJbmxpbmluZ05vZGVzID0gYXJndW1lbnRDb3VudCArIDE7CiAgICBpZiAocmVkdWN0aXZlTm9kZUNvdW50ID4gbWF4SW5saW5pbmdOb2RlcykgewogICAgICByZXR1cm4gJ3RvbyBtYW55IG5vZGVzICgke3JlZHVjdGl2ZU5vZGVDb3VudH0+JG1heElubGluaW5nTm9kZXMpJzsKICAgIH0KCiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdJbmxpbmVEYXRhKCcpOwogICAgU3RyaW5nIGNvbW1hID0gJyc7CiAgICBpZiAoaXNDb25zdHJ1Y3RvcikgewogICAgICBzYi53cml0ZSgnaXNDb25zdHJ1Y3RvcicpOwogICAgICBjb21tYSA9ICcsJzsKICAgIH0KICAgIGlmIChjb2RlQWZ0ZXJSZXR1cm4pIHsKICAgICAgc2Iud3JpdGUoY29tbWEpOwogICAgICBzYi53cml0ZSgnY29kZUFmdGVyUmV0dXJuJyk7CiAgICAgIGNvbW1hID0gJywnOwogICAgfQogICAgaWYgKGhhc0xvb3ApIHsKICAgICAgc2Iud3JpdGUoY29tbWEpOwogICAgICBzYi53cml0ZSgnaGFzTG9vcCcpOwogICAgICBjb21tYSA9ICcsJzsKICAgIH0KICAgIGlmIChoYXNDbG9zdXJlKSB7CiAgICAgIHNiLndyaXRlKGNvbW1hKTsKICAgICAgc2Iud3JpdGUoJ2hhc0Nsb3N1cmUnKTsKICAgICAgY29tbWEgPSAnLCc7CiAgICB9CiAgICBpZiAoaGFzVHJ5KSB7CiAgICAgIHNiLndyaXRlKGNvbW1hKTsKICAgICAgc2Iud3JpdGUoJ2hhc1RyeScpOwogICAgICBjb21tYSA9ICcsJzsKICAgIH0KICAgIGlmIChoYXNBc3luY0F3YWl0KSB7CiAgICAgIHNiLndyaXRlKGNvbW1hKTsKICAgICAgc2Iud3JpdGUoJ2hhc0FzeW5jQXdhaXQnKTsKICAgICAgY29tbWEgPSAnLCc7CiAgICB9CiAgICBpZiAoaGFzVGhyb3cpIHsKICAgICAgc2Iud3JpdGUoY29tbWEpOwogICAgICBzYi53cml0ZSgnaGFzVGhyb3cnKTsKICAgICAgY29tbWEgPSAnLCc7CiAgICB9CiAgICBpZiAoaGFzTG9uZ1N0cmluZykgewogICAgICBzYi53cml0ZShjb21tYSk7CiAgICAgIHNiLndyaXRlKCdoYXNMb25nU3RyaW5nJyk7CiAgICAgIGNvbW1hID0gJywnOwogICAgfQogICAgaWYgKGhhc0V4dGVybmFsQ29uc3RhbnRDb25zdHJ1Y3RvckNhbGwpIHsKICAgICAgc2Iud3JpdGUoY29tbWEpOwogICAgICBzYi53cml0ZSgnaGFzRXh0ZXJuYWxDb25zdGFudENvbnN0cnVjdG9yQ2FsbCcpOwogICAgICBjb21tYSA9ICcsJzsKICAgIH0KICAgIGlmIChoYXNUeXBlQXJndW1lbnRzKSB7CiAgICAgIHNiLndyaXRlKGNvbW1hKTsKICAgICAgc2Iud3JpdGUoJ2hhc1R5cGVBcmd1bWVudHMnKTsKICAgICAgY29tbWEgPSAnLCc7CiAgICB9CiAgICBpZiAoaGFzQXJndW1lbnREZWZhdWx0aW5nKSB7CiAgICAgIHNiLndyaXRlKGNvbW1hKTsKICAgICAgc2Iud3JpdGUoJ2hhc0FyZ3VtZW50RGVmYXVsdGluZycpOwogICAgICBjb21tYSA9ICcsJzsKICAgIH0KICAgIGlmIChoYXNDYXN0KSB7CiAgICAgIHNiLndyaXRlKGNvbW1hKTsKICAgICAgc2Iud3JpdGUoJ2hhc0Nhc3QnKTsKICAgICAgY29tbWEgPSAnLCc7CiAgICB9CiAgICBpZiAoaGFzSWYpIHsKICAgICAgc2Iud3JpdGUoY29tbWEpOwogICAgICBzYi53cml0ZSgnaGFzSWYnKTsKICAgICAgY29tbWEgPSAnLCc7CiAgICB9CiAgICBpZiAoYXJndW1lbnRDb3VudHMuaXNOb3RFbXB0eSkgewogICAgICBzYi53cml0ZShjb21tYSk7CiAgICAgIHNiLndyaXRlKCdhcmd1bWVudENvdW50cz17JHthcmd1bWVudENvdW50cy5qb2luKCcsJyl9fScpOwogICAgICBjb21tYSA9ICcsJzsKICAgIH0KICAgIHNiLndyaXRlKGNvbW1hKTsKICAgIHNiLndyaXRlKCdyZWd1bGFyTm9kZUNvdW50PSRyZWd1bGFyTm9kZUNvdW50LCcpOwogICAgc2Iud3JpdGUoJ2NhbGxDb3VudD0kY2FsbENvdW50LCcpOwogICAgc2Iud3JpdGUoJ3JlZHVjdGl2ZU5vZGVDb3VudD0kcmVkdWN0aXZlTm9kZUNvdW50Jyk7CiAgICBzYi53cml0ZSgnKScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgpjbGFzcyBJbmxpbmVEYXRhQ2FjaGUgewogIGZpbmFsIGJvb2wgZW5hYmxlVXNlckFzc2VydGlvbnM7CiAgZmluYWwgYm9vbCBvbWl0SW1wbGljaXRDYXN0czsKCiAgSW5saW5lRGF0YUNhY2hlKAogICAgICB7dGhpcy5lbmFibGVVc2VyQXNzZXJ0aW9uczogZmFsc2UsIHRoaXMub21pdEltcGxpY2l0Q2FzdHM6IGZhbHNlfSk7CgogIE1hcDxGdW5jdGlvbkVudGl0eSwgSW5saW5lRGF0YT4gX2NhY2hlID0ge307CgogIElubGluZURhdGEgZ2V0SW5saW5lRGF0YShKc1RvRWxlbWVudE1hcCBlbGVtZW50TWFwLCBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbikgewogICAgcmV0dXJuIF9jYWNoZVtmdW5jdGlvbl0gPz89IElubGluZVdlZWRlci5jb21wdXRlSW5saW5lRGF0YSgKICAgICAgICBlbGVtZW50TWFwLCBmdW5jdGlvbiwKICAgICAgICBlbmFibGVVc2VyQXNzZXJ0aW9uczogZW5hYmxlVXNlckFzc2VydGlvbnMsCiAgICAgICAgb21pdEltcGxpY2l0Q2FzdHM6IG9taXRJbXBsaWNpdENhc3RzKTsKICB9Cn0KCmNsYXNzIElubGluZVdlZWRlciBleHRlbmRzIGlyLlZpc2l0b3IgewogIC8vIEludmFyaWFudDogKklOU0lERV9MT09QKiA+ICpPVVRTSURFX0xPT1AqCiAgc3RhdGljIGNvbnN0IElOTElOSU5HX05PREVTX09VVFNJREVfTE9PUCA9IDE1OwogIHN0YXRpYyBjb25zdCBJTkxJTklOR19OT0RFU19PVVRTSURFX0xPT1BfQVJHX0ZBQ1RPUiA9IDM7CiAgc3RhdGljIGNvbnN0IElOTElOSU5HX05PREVTX0lOU0lERV9MT09QID0gMzQ7CiAgc3RhdGljIGNvbnN0IElOTElOSU5HX05PREVTX0lOU0lERV9MT09QX0FSR19GQUNUT1IgPSA0OwoKICBmaW5hbCBib29sIGVuYWJsZVVzZXJBc3NlcnRpb25zOwogIGZpbmFsIGJvb2wgb21pdEltcGxpY2l0Q2FzdHM7CgogIGZpbmFsIElubGluZURhdGEgZGF0YSA9IG5ldyBJbmxpbmVEYXRhKCk7CiAgYm9vbCBzZWVuUmV0dXJuID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIG5vZGUtY291bnQgaXMgY29sbGVjdG9yIHRvIGRldGVybWluZSBpZiBhIGZ1bmN0aW9uIGNhbiBiZQogIC8vLyBpbmxpbmVkLgogIGJvb2wgY291bnRSZWd1bGFyTm9kZSA9IHRydWU7CgogIC8vLyBXaGV0aGVyIG5vZGUtY291bnQgaXMgY29sbGVjdGVkIHRvIGRldGVybWluZSBpZiBpbmxpbmluZyBhIGZ1bmN0aW9uIGlzCiAgLy8vIHZlcnkgbGlrZWx5IHRvIHJlZHVjZSBjb2RlIHNpemUuCiAgLy8vCiAgLy8vIEZvciB0aGUgcmVkdWN0aXZlIGFuYWx5c2lzOgogIC8vLyBXZSBhbGxvdyB0aGUgYm9keSB0byBiZSBhIHNpbmdsZSBmdW5jdGlvbiBjYWxsIHRoYXQgZG9lcyBub3QgaGF2ZSBhbnkgbW9yZQogIC8vLyBpbnB1dHMgdGhhbiB0aGUgaW5saW5lZS4KICAvLy8KICAvLy8gV2UgYWxsb3cgdGhlIGJvZHkgdG8gYmUgdGhlIHJldHVybiBvZiBhbiAnZWxpZ2libGUnIGNvbnN0YW50LiBBIGNvbnN0YW50CiAgLy8vIGlzICdlbGlnaWJsZScgaWYgaXQgaXMgbm90IGxhcmdlIChlLmcuIGEgbG9uZyBzdHJpbmcpLgogIC8vLwogIC8vLyBXZSBza2lwICdlIGFze1R5cGVFcnJvcn0gVCcgd2hlbiB0aGUgY2hlY2tzIGFyZSBvbWl0dGVkLgogIC8vCiAgLy8gVE9ETyhzcmEpOiBDb25zaWRlciBzbGlnaHRseSBleHBhbnNpdmUgc2ltcGxlIGNvbnN0cnVjdG9ycyB3aGVyZSBhbGwgd2UKICAvLyBnYWluIGlzIGEgJ25ldycga2V5d29yZCwgZS5nLiBgbmV3IFguRm9vKGEpYCB2cyBgWC5Gb28kKGEpYC4KICAvLwogIC8vIFRPRE8oMjUyMzEpOiBNYWtlIGxhcmdlciBzdHJpbmcgY29uc3RhbnRzIGVsaWdpYmxlIGJ5IHNoYXJpbmcgcmVmZXJlbmNlcy4KICBib29sIGNvdW50UmVkdWN0aXZlTm9kZSA9IHRydWU7CgogIElubGluZVdlZWRlcigKICAgICAge3RoaXMuZW5hYmxlVXNlckFzc2VydGlvbnM6IGZhbHNlLCB0aGlzLm9taXRJbXBsaWNpdENhc3RzOiBmYWxzZX0pOwoKICBzdGF0aWMgSW5saW5lRGF0YSBjb21wdXRlSW5saW5lRGF0YSgKICAgICAgSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24sCiAgICAgIHtib29sIGVuYWJsZVVzZXJBc3NlcnRpb25zOiBmYWxzZSwgYm9vbCBvbWl0SW1wbGljaXRDYXN0czogZmFsc2V9KSB7CiAgICBJbmxpbmVXZWVkZXIgdmlzaXRvciA9IG5ldyBJbmxpbmVXZWVkZXIoCiAgICAgICAgZW5hYmxlVXNlckFzc2VydGlvbnM6IGVuYWJsZVVzZXJBc3NlcnRpb25zLAogICAgICAgIG9taXRJbXBsaWNpdENhc3RzOiBvbWl0SW1wbGljaXRDYXN0cyk7CiAgICBpci5GdW5jdGlvbk5vZGUgbm9kZSA9IGdldEZ1bmN0aW9uTm9kZShlbGVtZW50TWFwLCBmdW5jdGlvbik7CiAgICBub2RlLmFjY2VwdCh2aXNpdG9yKTsKICAgIGlmIChmdW5jdGlvbi5pc0NvbnN0cnVjdG9yKSB7CiAgICAgIHZpc2l0b3IuZGF0YS5pc0NvbnN0cnVjdG9yID0gdHJ1ZTsKICAgICAgTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gZWxlbWVudE1hcC5nZXRNZW1iZXJEZWZpbml0aW9uKGZ1bmN0aW9uKTsKICAgICAgdmlzaXRvci5za2lwUmVkdWN0aXZlTm9kZXMoKCkgewogICAgICAgIGlyLk5vZGUgbm9kZSA9IGRlZmluaXRpb24ubm9kZTsKICAgICAgICBpZiAobm9kZSBpcyBpci5Db25zdHJ1Y3RvcikgewogICAgICAgICAgdmlzaXRvci52aXNpdExpc3Qobm9kZS5pbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gdmlzaXRvci5kYXRhOwogIH0KCiAgdm9pZCBza2lwUmVndWxhck5vZGVzKHZvaWQgZigpKSB7CiAgICBib29sIG9sZENvdW50UmVndWxhck5vZGUgPSBjb3VudFJlZ3VsYXJOb2RlOwogICAgY291bnRSZWd1bGFyTm9kZSA9IGZhbHNlOwogICAgZigpOwogICAgY291bnRSZWd1bGFyTm9kZSA9IG9sZENvdW50UmVndWxhck5vZGU7CiAgfQoKICB2b2lkIHNraXBSZWR1Y3RpdmVOb2Rlcyh2b2lkIGYoKSkgewogICAgYm9vbCBvbGRDb3VudFJlZHVjdGl2ZU5vZGUgPSBjb3VudFJlZHVjdGl2ZU5vZGU7CiAgICBjb3VudFJlZHVjdGl2ZU5vZGUgPSBmYWxzZTsKICAgIGYoKTsKICAgIGNvdW50UmVkdWN0aXZlTm9kZSA9IG9sZENvdW50UmVkdWN0aXZlTm9kZTsKICB9CgogIHZvaWQgcmVnaXN0ZXJSZWd1bGFyTm9kZSgpIHsKICAgIGlmIChjb3VudFJlZ3VsYXJOb2RlKSB7CiAgICAgIGRhdGEucmVndWxhck5vZGVDb3VudCsrOwogICAgICBpZiAoc2VlblJldHVybikgewogICAgICAgIGRhdGEuY29kZUFmdGVyUmV0dXJuID0gdHJ1ZTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCByZWdpc3RlclJlZHVjdGl2ZU5vZGUoKSB7CiAgICBpZiAoY291bnRSZWR1Y3RpdmVOb2RlKSB7CiAgICAgIGRhdGEucmVkdWN0aXZlTm9kZUNvdW50Kys7CiAgICAgIGlmIChzZWVuUmV0dXJuKSB7CiAgICAgICAgZGF0YS5jb2RlQWZ0ZXJSZXR1cm4gPSB0cnVlOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIHVucmVnaXN0ZXJSZWR1Y3RpdmVOb2RlKCkgewogICAgaWYgKGNvdW50UmVkdWN0aXZlTm9kZSkgewogICAgICBkYXRhLnJlZHVjdGl2ZU5vZGVDb3VudC0tOwogICAgfQogIH0KCiAgdm9pZCB2aXNpdChpci5Ob2RlIG5vZGUpID0+IG5vZGU/LmFjY2VwdCh0aGlzKTsKCiAgdm9pZCB2aXNpdExpc3QoTGlzdDxpci5Ob2RlPiBub2RlcykgewogICAgZm9yIChpci5Ob2RlIG5vZGUgaW4gbm9kZXMpIHsKICAgICAgdmlzaXQobm9kZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBkZWZhdWx0Tm9kZShpci5Ob2RlIG5vZGUpIHsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICAgIHJlZ2lzdGVyUmVkdWN0aXZlTm9kZSgpOwogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDb25zdGFudEV4cHJlc3Npb24oaXIuQ29uc3RhbnRFeHByZXNzaW9uIG5vZGUpIHsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICAgIHJlZ2lzdGVyUmVkdWN0aXZlTm9kZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRSZXR1cm5TdGF0ZW1lbnQoaXIuUmV0dXJuU3RhdGVtZW50IG5vZGUpIHsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICAgIHNlZW5SZXR1cm4gPSB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUaHJvdyhpci5UaHJvdyBub2RlKSB7CiAgICByZWdpc3RlclJlZ3VsYXJOb2RlKCk7CiAgICBkYXRhLmhhc1Rocm93ID0gdHJ1ZTsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICB9CgogIF9oYW5kbGVMb29wKGlyLk5vZGUgbm9kZSkgewogICAgLy8gSXQncyBhY3R1YWxseSBub3QgZGlmZmljdWx0IHRvIGlubGluZSBhIG1ldGhvZCB3aXRoIGEgbG9vcCwgYnV0IG91cgogICAgLy8gbWVhc3VyZW1lbnRzIHNob3cgdGhhdCBpdCdzIGN1cnJlbnRseSBiZXR0ZXIgdG8gbm90IGlubGluZSBhIG1ldGhvZCB0aGF0CiAgICAvLyBjb250YWlucyBhIGxvb3AuCiAgICBkYXRhLmhhc0xvb3AgPSB0cnVlOwogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRGb3JTdGF0ZW1lbnQoaXIuRm9yU3RhdGVtZW50IG5vZGUpIHsKICAgIF9oYW5kbGVMb29wKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRGb3JJblN0YXRlbWVudChpci5Gb3JJblN0YXRlbWVudCBub2RlKSB7CiAgICBfaGFuZGxlTG9vcChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0V2hpbGVTdGF0ZW1lbnQoaXIuV2hpbGVTdGF0ZW1lbnQgbm9kZSkgewogICAgX2hhbmRsZUxvb3Aobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdERvU3RhdGVtZW50KGlyLkRvU3RhdGVtZW50IG5vZGUpIHsKICAgIF9oYW5kbGVMb29wKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUcnlDYXRjaChpci5UcnlDYXRjaCBub2RlKSB7CiAgICBkYXRhLmhhc1RyeSA9IHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFRyeUZpbmFsbHkoaXIuVHJ5RmluYWxseSBub2RlKSB7CiAgICBkYXRhLmhhc1RyeSA9IHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbihpci5GdW5jdGlvbkV4cHJlc3Npb24gbm9kZSkgewogICAgcmVnaXN0ZXJSZWd1bGFyTm9kZSgpOwogICAgZGF0YS5oYXNDbG9zdXJlID0gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbihpci5GdW5jdGlvbkRlY2xhcmF0aW9uIG5vZGUpIHsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICAgIGRhdGEuaGFzQ2xvc3VyZSA9IHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEZ1bmN0aW9uTm9kZShpci5GdW5jdGlvbk5vZGUgbm9kZSkgewogICAgaWYgKG5vZGUuYXN5bmNNYXJrZXIgIT0gaXIuQXN5bmNNYXJrZXIuU3luYykgewogICAgICBkYXRhLmhhc0FzeW5jQXdhaXQgPSB0cnVlOwogICAgfQogICAgLy8gVE9ETyhzcmEpOiBDb3N0IG9mIHBhcmFtZXRlciBjaGVja2luZz8KICAgIHNraXBSZWR1Y3RpdmVOb2RlcygoKSB7CiAgICAgIHZpc2l0TGlzdChub2RlLnR5cGVQYXJhbWV0ZXJzKTsKICAgICAgdmlzaXRMaXN0KG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMpOwogICAgICB2aXNpdExpc3Qobm9kZS5uYW1lZFBhcmFtZXRlcnMpOwogICAgICB2aXNpdChub2RlLnJldHVyblR5cGUpOwogICAgfSk7CiAgICB2aXNpdChub2RlLmJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDb25kaXRpb25hbEV4cHJlc3Npb24oaXIuQ29uZGl0aW9uYWxFeHByZXNzaW9uIG5vZGUpIHsKICAgIC8vIEhldXJpc3RpYzogSW4gInBhcmFtZXRlciA/IEEgOiBCIiB0aGVyZSBpcyBhIGhpZ2ggcHJvYmFiaWxpdHkgdGhhdAogICAgLy8gcGFyYW1ldGVyIGlzIGEgY29uc3RhbnQuIEFzc3VtaW5nIHRoZSBwYXJhbWV0ZXIgaXMgY29uc3RhbnQsIHdlIGNhbgogICAgLy8gY29tcHV0ZSBhIGNvdW50IHRoYXQgaXMgYm91bmRlZCBieSB0aGUgbGFyZ2VzdCBhcm0gcmF0aGVyIHRoYW4gdGhlIHN1bSBvZgogICAgLy8gYm90aCBhcm1zLgogICAgaXIuRXhwcmVzc2lvbiBjb25kaXRpb24gPSBub2RlLmNvbmRpdGlvbjsKICAgIHZpc2l0KGNvbmRpdGlvbik7CiAgICBpbnQgY29tbW9uUHJlZml4Q291bnQgPSBkYXRhLnJlZ3VsYXJOb2RlQ291bnQ7CgogICAgdmlzaXQobm9kZS50aGVuKTsKICAgIGludCB0aGVuQ291bnQgPSBkYXRhLnJlZ3VsYXJOb2RlQ291bnQgLSBjb21tb25QcmVmaXhDb3VudDsKCiAgICBkYXRhLnJlZ3VsYXJOb2RlQ291bnQgPSBjb21tb25QcmVmaXhDb3VudDsKICAgIHZpc2l0KG5vZGUub3RoZXJ3aXNlKTsKICAgIGludCBlbHNlQ291bnQgPSBkYXRhLnJlZ3VsYXJOb2RlQ291bnQgLSBjb21tb25QcmVmaXhDb3VudDsKCiAgICBkYXRhLnJlZ3VsYXJOb2RlQ291bnQgPSBjb21tb25QcmVmaXhDb3VudCArIHRoZW5Db3VudCArIGVsc2VDb3VudDsKICAgIGlmIChjb25kaXRpb24gaXMgaXIuVmFyaWFibGVHZXQgJiYKICAgICAgICBjb25kaXRpb24udmFyaWFibGUucGFyZW50IGlzIGlyLkZ1bmN0aW9uTm9kZSkgewogICAgICBkYXRhLnJlZ3VsYXJOb2RlQ291bnQgPQogICAgICAgICAgY29tbW9uUHJlZml4Q291bnQgKyAodGhlbkNvdW50ID4gZWxzZUNvdW50ID8gdGhlbkNvdW50IDogZWxzZUNvdW50KTsKICAgIH0KICAgIC8vIFRoaXMgaXMgbGFzdCBzbyB0aGF0IFt0b29EaWZmaWN1bHRdIGlzIGFsd2F5cyB1cGRhdGVkLgogICAgcmVnaXN0ZXJSZWd1bGFyTm9kZSgpOwogICAgcmVnaXN0ZXJSZWR1Y3RpdmVOb2RlKCk7CiAgICBza2lwUmVndWxhck5vZGVzKCgpID0+IHZpc2l0KG5vZGUuc3RhdGljVHlwZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRBc3NlcnRJbml0aWFsaXplcihpci5Bc3NlcnRJbml0aWFsaXplciBub2RlKSB7CiAgICBpZiAoIWVuYWJsZVVzZXJBc3NlcnRpb25zKSByZXR1cm47CiAgICBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEFzc2VydFN0YXRlbWVudChpci5Bc3NlcnRTdGF0ZW1lbnQgbm9kZSkgewogICAgaWYgKCFlbmFibGVVc2VyQXNzZXJ0aW9ucykgcmV0dXJuOwogICAgZGVmYXVsdE5vZGUobm9kZSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyQ2FsbCgpIHsKICAgICsrZGF0YS5jYWxsQ291bnQ7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEVtcHR5U3RhdGVtZW50KGlyLkVtcHR5U3RhdGVtZW50IG5vZGUpIHsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChpci5FeHByZXNzaW9uU3RhdGVtZW50IG5vZGUpIHsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0QmxvY2soaXIuQmxvY2sgbm9kZSkgewogICAgcmVnaXN0ZXJSZWd1bGFyTm9kZSgpOwogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRTdHJpbmdMaXRlcmFsKGlyLlN0cmluZ0xpdGVyYWwgbm9kZSkgewogICAgcmVnaXN0ZXJSZWd1bGFyTm9kZSgpOwogICAgcmVnaXN0ZXJSZWR1Y3RpdmVOb2RlKCk7CiAgICAvLyBBdm9pZCBjb3B5aW5nIGxvbmcgc3RyaW5ncyBpbnRvIGNhbGwgc2l0ZS4KICAgIGlmIChub2RlLnZhbHVlLmxlbmd0aCA+IDE0KSB7CiAgICAgIGRhdGEuaGFzTG9uZ1N0cmluZyA9IHRydWU7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFByb3BlcnR5R2V0KGlyLlByb3BlcnR5R2V0IG5vZGUpIHsKICAgIHJlZ2lzdGVyQ2FsbCgpOwogICAgcmVnaXN0ZXJSZWd1bGFyTm9kZSgpOwogICAgcmVnaXN0ZXJSZWR1Y3RpdmVOb2RlKCk7CiAgICBza2lwUmVkdWN0aXZlTm9kZXMoKCkgPT4gdmlzaXQobm9kZS5uYW1lKSk7CiAgICB2aXNpdChub2RlLnJlY2VpdmVyKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0RGlyZWN0UHJvcGVydHlHZXQoaXIuRGlyZWN0UHJvcGVydHlHZXQgbm9kZSkgewogICAgcmVnaXN0ZXJDYWxsKCk7CiAgICByZWdpc3RlclJlZ3VsYXJOb2RlKCk7CiAgICByZWdpc3RlclJlZHVjdGl2ZU5vZGUoKTsKICAgIHZpc2l0KG5vZGUucmVjZWl2ZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRQcm9wZXJ0eVNldChpci5Qcm9wZXJ0eVNldCBub2RlKSB7CiAgICByZWdpc3RlckNhbGwoKTsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICAgIHJlZ2lzdGVyUmVkdWN0aXZlTm9kZSgpOwogICAgc2tpcFJlZHVjdGl2ZU5vZGVzKCgpID0+IHZpc2l0KG5vZGUubmFtZSkpOwogICAgdmlzaXQobm9kZS5yZWNlaXZlcik7CiAgICB2aXNpdChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0RGlyZWN0UHJvcGVydHlTZXQoaXIuRGlyZWN0UHJvcGVydHlTZXQgbm9kZSkgewogICAgcmVnaXN0ZXJDYWxsKCk7CiAgICByZWdpc3RlclJlZ3VsYXJOb2RlKCk7CiAgICByZWdpc3RlclJlZHVjdGl2ZU5vZGUoKTsKICAgIHZpc2l0KG5vZGUucmVjZWl2ZXIpOwogICAgdmlzaXQobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFZhcmlhYmxlR2V0KGlyLlZhcmlhYmxlR2V0IG5vZGUpIHsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICAgIHJlZ2lzdGVyUmVkdWN0aXZlTm9kZSgpOwogICAgc2tpcFJlZHVjdGl2ZU5vZGVzKCgpID0+IHZpc2l0KG5vZGUucHJvbW90ZWRUeXBlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFRoaXNFeHByZXNzaW9uKGlyLlRoaXNFeHByZXNzaW9uIG5vZGUpIHsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICAgIHJlZ2lzdGVyUmVkdWN0aXZlTm9kZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRTdGF0aWNHZXQoaXIuU3RhdGljR2V0IG5vZGUpIHsKICAgIC8vIEFzc3VtZSBsYXp5LWluaXQgc3RhdGljLCBsb2FkZWQgdmlhIGEgY2FsbDogYCQuJGdldCRmb28oKWAuCiAgICByZWdpc3RlckNhbGwoKTsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICAgIHJlZ2lzdGVyUmVkdWN0aXZlTm9kZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDb25zdHJ1Y3Rvckludm9jYXRpb24oaXIuQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUpIHsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICAgIHJlZ2lzdGVyUmVkdWN0aXZlTm9kZSgpOwogICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICAvLyBBIGNvbnN0IGNvbnN0cnVjdG9yIGNhbGwgY29tcGlsZXMgdG8gYSBjb25zdGFudCBwb29sIHJlZmVyZW5jZS4KICAgICAgc2tpcFJlZHVjdGl2ZU5vZGVzKCgpID0+IG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKSk7CiAgICB9IGVsc2UgewogICAgICByZWdpc3RlckNhbGwoKTsKICAgICAgX3Byb2Nlc3NBcmd1bWVudHMobm9kZS5hcmd1bWVudHMsIG5vZGUudGFyZ2V0Py5mdW5jdGlvbik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFN0YXRpY0ludm9jYXRpb24oaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKSB7CiAgICByZWdpc3RlclJlZ3VsYXJOb2RlKCk7CiAgICBpZiAobm9kZS5pc0NvbnN0KSB7CiAgICAgIGRhdGEuaGFzRXh0ZXJuYWxDb25zdGFudENvbnN0cnVjdG9yQ2FsbCA9IHRydWU7CiAgICAgIHNraXBSZWR1Y3RpdmVOb2RlcygoKSA9PiBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcykpOwogICAgfSBlbHNlIHsKICAgICAgcmVnaXN0ZXJDYWxsKCk7CiAgICAgIHJlZ2lzdGVyUmVkdWN0aXZlTm9kZSgpOwogICAgICBfcHJvY2Vzc0FyZ3VtZW50cyhub2RlLmFyZ3VtZW50cywgbm9kZS50YXJnZXQ/LmZ1bmN0aW9uKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0TWV0aG9kSW52b2NhdGlvbihpci5NZXRob2RJbnZvY2F0aW9uIG5vZGUpIHsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICAgIHJlZ2lzdGVyUmVkdWN0aXZlTm9kZSgpOwogICAgcmVnaXN0ZXJDYWxsKCk7CiAgICB2aXNpdChub2RlLnJlY2VpdmVyKTsKICAgIHNraXBSZWR1Y3RpdmVOb2RlcygoKSA9PiB2aXNpdChub2RlLm5hbWUpKTsKICAgIF9wcm9jZXNzQXJndW1lbnRzKG5vZGUuYXJndW1lbnRzLCBudWxsKTsKICB9CgogIF9wcm9jZXNzQXJndW1lbnRzKGlyLkFyZ3VtZW50cyBhcmd1bWVudHMsIGlyLkZ1bmN0aW9uTm9kZSB0YXJnZXQpIHsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICAgIGlmIChhcmd1bWVudHMudHlwZXMuaXNOb3RFbXB0eSkgewogICAgICBkYXRhLmhhc1R5cGVBcmd1bWVudHMgPSB0cnVlOwogICAgICBza2lwUmVkdWN0aXZlTm9kZXMoKCkgPT4gdmlzaXRMaXN0KGFyZ3VtZW50cy50eXBlcykpOwogICAgfQogICAgaW50IGNvdW50ID0gYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoICsgYXJndW1lbnRzLm5hbWVkLmxlbmd0aDsKICAgIGRhdGEuYXJndW1lbnRDb3VudHMuYWRkKGNvdW50KTsKCiAgICBpZiAodGFyZ2V0ICE9IG51bGwpIHsKICAgICAgLy8gRGlzYWxsb3cgZGVmYXVsdGVkIG9wdGlvbmFsIGFyZ3VtZW50cyBzaW5jZSB0aGV5IHdpbGwgYmUgcGFzc2VkCiAgICAgIC8vIGV4cGxpY2l0bHkuCiAgICAgIGlmICh0YXJnZXQucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoICsgdGFyZ2V0Lm5hbWVkUGFyYW1ldGVycy5sZW5ndGggPgogICAgICAgICAgY291bnQpIHsKICAgICAgICBkYXRhLmhhc0FyZ3VtZW50RGVmYXVsdGluZyA9IHRydWU7CiAgICAgIH0KICAgIH0KCiAgICB2aXNpdExpc3QoYXJndW1lbnRzLnBvc2l0aW9uYWwpOwogICAgZm9yIChpci5OYW1lZEV4cHJlc3Npb24gZXhwcmVzc2lvbiBpbiBhcmd1bWVudHMubmFtZWQpIHsKICAgICAgcmVnaXN0ZXJSZWd1bGFyTm9kZSgpOwogICAgICBleHByZXNzaW9uLnZhbHVlLmFjY2VwdCh0aGlzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0QXNFeHByZXNzaW9uKGlyLkFzRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZWdpc3RlclJlZ3VsYXJOb2RlKCk7CiAgICB2aXNpdChub2RlLm9wZXJhbmQpOwogICAgc2tpcFJlZHVjdGl2ZU5vZGVzKCgpID0+IHZpc2l0KG5vZGUudHlwZSkpOwogICAgaWYgKCEobm9kZS5pc1R5cGVFcnJvciAmJiBvbWl0SW1wbGljaXRDYXN0cykpIHsKICAgICAgZGF0YS5oYXNDYXN0ID0gdHJ1ZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbihpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIHJlZ2lzdGVyUmVndWxhck5vZGUoKTsKICAgIHNraXBSZWR1Y3RpdmVOb2RlcygoKSB7CiAgICAgIHZpc2l0TGlzdChub2RlLmFubm90YXRpb25zKTsKICAgICAgdmlzaXQobm9kZS50eXBlKTsKICAgIH0pOwogICAgdmlzaXQobm9kZS5pbml0aWFsaXplcik7CgogICAgLy8gQSBsb2NhbCB2YXJpYWJsZSBpcyBhbiBhbGlhcyBmb3IgdGhlIGluaXRpYWxpemVyIGV4cHJlc3Npb24uCiAgICBpZiAobm9kZS5pbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgIHVucmVnaXN0ZXJSZWR1Y3RpdmVOb2RlKCk7IC8vIGRpc2NvdW50IG9uZSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlLgogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRJZlN0YXRlbWVudChpci5JZlN0YXRlbWVudCBub2RlKSB7CiAgICByZWdpc3RlclJlZ3VsYXJOb2RlKCk7CiAgICBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgICBkYXRhLmhhc0lmID0gdHJ1ZTsKICB9Cn0KnJ8ATk48ATgoARoZNh8iPyMgHCQhISExISghKhoePissLis1KSs2QzM4JycnNSIcGhkqIzokOTs7GBwlHhwVIigcAT8TGx0hJTI/MzsvAQ4TExgWGB0lIAIBMSUlAU5PDiABOR8BHwY8LwE7Bk0+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GAgdAUQkTAYEAQwqGx4XBAIBLHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9idWlsZGVyX2tlcm5lbC5kYXJ0LHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NzYS90eXBlcy5kYXJ0i0svLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBDb21tb25FbGVtZW50czsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vbmF0aXZlL2JlaGF2aW9yLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CmltcG9ydCAnLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CgpjbGFzcyBBYnN0cmFjdFZhbHVlRmFjdG9yeSB7CiAgc3RhdGljIEFic3RyYWN0VmFsdWUgaW5mZXJyZWRSZXR1cm5UeXBlRm9yRWxlbWVudCgKICAgICAgRnVuY3Rpb25FbnRpdHkgZWxlbWVudCwgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cykgewogICAgcmV0dXJuIHJlc3VsdHMucmVzdWx0T2ZNZW1iZXIoZWxlbWVudCkucmV0dXJuVHlwZSA/PwogICAgICAgIHJlc3VsdHMuY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZTsKICB9CgogIHN0YXRpYyBBYnN0cmFjdFZhbHVlIGluZmVycmVkVHlwZUZvck1lbWJlcigKICAgICAgTWVtYmVyRW50aXR5IGVsZW1lbnQsIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMpIHsKICAgIHJldHVybiByZXN1bHRzLnJlc3VsdE9mTWVtYmVyKGVsZW1lbnQpLnR5cGUgPz8KICAgICAgICByZXN1bHRzLmNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGU7CiAgfQoKICBzdGF0aWMgQWJzdHJhY3RWYWx1ZSBpbmZlcnJlZFR5cGVGb3JQYXJhbWV0ZXIoCiAgICAgIExvY2FsIGVsZW1lbnQsIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMpIHsKICAgIHJldHVybiByZXN1bHRzLnJlc3VsdE9mUGFyYW1ldGVyKGVsZW1lbnQpID8/CiAgICAgICAgcmVzdWx0cy5jbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlOwogIH0KCiAgc3RhdGljIEFic3RyYWN0VmFsdWUgaW5mZXJyZWRSZXN1bHRUeXBlRm9yU2VsZWN0b3IoU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXIsIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMpIHsKICAgIHJldHVybiByZXN1bHRzLnJlc3VsdFR5cGVPZlNlbGVjdG9yKHNlbGVjdG9yLCByZWNlaXZlcikgPz8KICAgICAgICByZXN1bHRzLmNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGU7CiAgfQoKICBzdGF0aWMgQWJzdHJhY3RWYWx1ZSBmcm9tTmF0aXZlQmVoYXZpb3IoCiAgICAgIE5hdGl2ZUJlaGF2aW9yIG5hdGl2ZUJlaGF2aW9yLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiA9IGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW47CiAgICB2YXIgdHlwZXNSZXR1cm5lZCA9IG5hdGl2ZUJlaGF2aW9yLnR5cGVzUmV0dXJuZWQ7CiAgICBpZiAodHlwZXNSZXR1cm5lZC5pc0VtcHR5KSByZXR1cm4gYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZTsKCiAgICBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cyA9IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzOwoKICAgIC8vIFt0eXBlXSBpcyBlaXRoZXIgYW4gaW5zdGFuY2Ugb2YgW0RhcnRUeXBlXSBvciBzcGVjaWFsIG9iamVjdHMKICAgIC8vIGxpa2UgW25hdGl2ZS5TcGVjaWFsVHlwZS5Kc09iamVjdF0uCiAgICBBYnN0cmFjdFZhbHVlIGZyb21OYXRpdmVUeXBlKGR5bmFtaWMgdHlwZSkgewogICAgICBpZiAodHlwZSA9PSBTcGVjaWFsVHlwZS5Kc09iamVjdCkgewogICAgICAgIHJldHVybiBhYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAgIC5jcmVhdGVOb25OdWxsRXhhY3QoY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MpOwogICAgICB9IGVsc2UgaWYgKHR5cGUuaXNWb2lkKSB7CiAgICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4ubnVsbFR5cGU7CiAgICAgIH0gZWxzZSBpZiAodHlwZS5pc0R5bmFtaWMpIHsKICAgICAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZTsKICAgICAgfSBlbHNlIGlmICh0eXBlID09IGNvbW1vbkVsZW1lbnRzLm51bGxUeXBlKSB7CiAgICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4ubnVsbFR5cGU7CiAgICAgIH0gZWxzZSBpZiAodHlwZS50cmVhdEFzRHluYW1pYykgewogICAgICAgIHJldHVybiBhYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBhYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZU5vbk51bGxTdWJ0eXBlKHR5cGUuZWxlbWVudCk7CiAgICAgIH0KICAgIH0KCiAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdCA9CiAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi51bmlvbk9mTWFueSh0eXBlc1JldHVybmVkLm1hcChmcm9tTmF0aXZlVHlwZSkpOwogICAgYXNzZXJ0KGFic3RyYWN0VmFsdWVEb21haW4uaXNFbXB0eShyZXN1bHQpLmlzUG90ZW50aWFsbHlGYWxzZSwKICAgICAgICAiVW5leHBlY3RlZCBlbXB0eSByZXR1cm4gdmFsdWUgZm9yICRuYXRpdmVCZWhhdmlvci4iKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CkkATk48ATYkMSEiMioBHTVEOT0EAS5CMz0EATE7MT0EAUhEPz0EAStBTzZHAUABRSsxKiM9IC0jMDQtKDAPRwgGARtMQz8TBAIBI3BhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS90eXBlcy5kYXJ0M3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX21vZGVsL2Nsb3N1cmUuZGFydMAAq70vLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbnN0YW50cy9leHByZXNzaW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9uYW1lcy5kYXJ0JyBzaG93IE5hbWU7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaXIvY2xvc3VyZS5kYXJ0JzsKaW1wb3J0ICcuLi9pci9lbGVtZW50X21hcC5kYXJ0JzsKaW1wb3J0ICcuLi9pci9zdGF0aWNfdHlwZV9jYWNoZS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2Fubm90YXRpb25zLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL2VsZW1lbnRfbWFwLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL2Vudi5kYXJ0JzsKaW1wb3J0ICcuLi9vcmRlcmVkX3R5cGVzZXQuZGFydCc7CmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL3NzYS90eXBlX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCc7CmltcG9ydCAnZWxlbWVudHMuZGFydCc7CmltcG9ydCAnanNfd29ybGRfYnVpbGRlci5kYXJ0JyBzaG93IEpzQ2xvc2VkV29ybGRCdWlsZGVyOwppbXBvcnQgJ2xvY2Fscy5kYXJ0JzsKCmNsYXNzIENsb3N1cmVEYXRhSW1wbCBpbXBsZW1lbnRzIENsb3N1cmVEYXRhIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0Nsb3N1cmVEYXRhXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2Nsb3N1cmUtZGF0YSc7CgogIGZpbmFsIEpzVG9FbGVtZW50TWFwIF9lbGVtZW50TWFwOwoKICAvLy8gTWFwIG9mIHRoZSBzY29waW5nIGluZm9ybWF0aW9uIHRoYXQgY29ycmVzcG9uZHMgdG8gYSBwYXJ0aWN1bGFyIGVudGl0eS4KICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBTY29wZUluZm8+IF9zY29wZU1hcDsKICBmaW5hbCBNYXA8aXIuVHJlZU5vZGUsIENhcHR1cmVkU2NvcGU+IF9jYXB0dXJlZFNjb3Blc01hcDsKICAvLyBJbmRpY2F0ZXMgdGhlIHR5cGUgdmFyaWFibGVzIChpZiBhbnkpIHRoYXQgYXJlIGNhcHR1cmVkIGluIGEgZ2l2ZW4KICAvLyBTaWduYXR1cmUgZnVuY3Rpb24uCiAgZmluYWwgTWFwPE1lbWJlckVudGl0eSwgQ2FwdHVyZWRTY29wZT4gX2NhcHR1cmVkU2NvcGVGb3JTaWduYXR1cmVNYXA7CgogIGZpbmFsIE1hcDxpci5Mb2NhbEZ1bmN0aW9uLCBDbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvPgogICAgICBfbG9jYWxDbG9zdXJlUmVwcmVzZW50YXRpb25NYXA7CgogIENsb3N1cmVEYXRhSW1wbCh0aGlzLl9lbGVtZW50TWFwLCB0aGlzLl9zY29wZU1hcCwgdGhpcy5fY2FwdHVyZWRTY29wZXNNYXAsCiAgICAgIHRoaXMuX2NhcHR1cmVkU2NvcGVGb3JTaWduYXR1cmVNYXAsIHRoaXMuX2xvY2FsQ2xvc3VyZVJlcHJlc2VudGF0aW9uTWFwKTsKCiAgLy8vIERlc2VyaWFsaXplcyBhIFtDbG9zdXJlRGF0YV0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBDbG9zdXJlRGF0YUltcGwucmVhZEZyb21EYXRhU291cmNlKAogICAgICBKc1RvRWxlbWVudE1hcCBlbGVtZW50TWFwLCBEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdXBwb3J0IHNoYXJlZCBbU2NvcGVJbmZvXS4KICAgIE1hcDxNZW1iZXJFbnRpdHksIFNjb3BlSW5mbz4gc2NvcGVNYXAgPSBzb3VyY2UucmVhZE1lbWJlck1hcCgKICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlcikgPT4gbmV3IFNjb3BlSW5mby5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKSk7CiAgICBNYXA8aXIuVHJlZU5vZGUsIENhcHR1cmVkU2NvcGU+IGNhcHR1cmVkU2NvcGVzTWFwID0gc291cmNlCiAgICAgICAgLnJlYWRUcmVlTm9kZU1hcCgoKSA9PiBuZXcgQ2FwdHVyZWRTY29wZS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKSk7CiAgICBNYXA8TWVtYmVyRW50aXR5LCBDYXB0dXJlZFNjb3BlPiBjYXB0dXJlZFNjb3BlRm9yU2lnbmF0dXJlTWFwID0KICAgICAgICBzb3VyY2UucmVhZE1lbWJlck1hcCgoTWVtYmVyRW50aXR5IG1lbWJlcikgPT4KICAgICAgICAgICAgbmV3IENhcHR1cmVkU2NvcGUucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSkpOwogICAgTWFwPGlyLkxvY2FsRnVuY3Rpb24sIENsb3N1cmVSZXByZXNlbnRhdGlvbkluZm8+CiAgICAgICAgbG9jYWxDbG9zdXJlUmVwcmVzZW50YXRpb25NYXAgPSBzb3VyY2UucmVhZFRyZWVOb2RlTWFwKAogICAgICAgICAgICAoKSA9PiBuZXcgQ2xvc3VyZVJlcHJlc2VudGF0aW9uSW5mby5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IENsb3N1cmVEYXRhSW1wbChlbGVtZW50TWFwLCBzY29wZU1hcCwgY2FwdHVyZWRTY29wZXNNYXAsCiAgICAgICAgY2FwdHVyZWRTY29wZUZvclNpZ25hdHVyZU1hcCwgbG9jYWxDbG9zdXJlUmVwcmVzZW50YXRpb25NYXApOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbQ2xvc3VyZURhdGFdIHRvIFtzaW5rXS4KICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTWVtYmVyTWFwKF9zY29wZU1hcCwKICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlciwgU2NvcGVJbmZvIGluZm8pID0+IGluZm8ud3JpdGVUb0RhdGFTaW5rKHNpbmspKTsKICAgIHNpbmsud3JpdGVUcmVlTm9kZU1hcChfY2FwdHVyZWRTY29wZXNNYXAsIChDYXB0dXJlZFNjb3BlIHNjb3BlKSB7CiAgICAgIHNjb3BlLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIH0pOwogICAgc2luay53cml0ZU1lbWJlck1hcCgKICAgICAgICBfY2FwdHVyZWRTY29wZUZvclNpZ25hdHVyZU1hcCwKICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlciwgQ2FwdHVyZWRTY29wZSBzY29wZSkgPT4KICAgICAgICAgICAgc2NvcGUud3JpdGVUb0RhdGFTaW5rKHNpbmspKTsKICAgIHNpbmsud3JpdGVUcmVlTm9kZU1hcChfbG9jYWxDbG9zdXJlUmVwcmVzZW50YXRpb25NYXAsCiAgICAgICAgKENsb3N1cmVSZXByZXNlbnRhdGlvbkluZm8gaW5mbykgewogICAgICBpbmZvLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIH0pOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIFNjb3BlSW5mbyBnZXRTY29wZUluZm8oTWVtYmVyRW50aXR5IGVudGl0eSkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgY2hlY2sgd2hlbiBjb25zdHJ1Y3RvciBib2RpZXMgYSBjcmVhdGVkCiAgICAvLyBlYWdlcmx5IHdpdGggdGhlIEotbW9kZWw7IGEgY29uc3RydWN0b3IgYm9keSBzaG91bGQgaGF2ZSBpdCdzIG93bgogICAgLy8gW0Nsb3N1cmVSZXByZXNlbnRhdGlvbkluZm9dLgogICAgaWYgKGVudGl0eSBpcyBDb25zdHJ1Y3RvckJvZHlFbnRpdHkpIHsKICAgICAgQ29uc3RydWN0b3JCb2R5RW50aXR5IGNvbnN0cnVjdG9yQm9keSA9IGVudGl0eTsKICAgICAgZW50aXR5ID0gY29uc3RydWN0b3JCb2R5LmNvbnN0cnVjdG9yOwogICAgfQoKICAgIFNjb3BlSW5mbyBzY29wZUluZm8gPSBfc2NvcGVNYXBbZW50aXR5XTsKICAgIGFzc2VydCgKICAgICAgICBzY29wZUluZm8gIT0gbnVsbCwgZmFpbGVkQXQoZW50aXR5LCAiTWlzc2luZyBzY29wZSBpbmZvIGZvciAkZW50aXR5LiIpKTsKICAgIHJldHVybiBzY29wZUluZm87CiAgfQoKICAvLyBUT0RPKGVmb3J0dW5hKTogRXZlbnR1YWxseSBjYXB0dXJlZFNjb3Blc01hcFtub2RlXSBzaG91bGQgYWx3YXlzCiAgLy8gYmUgbm9uLW51bGwsIGFuZCB3ZSBzaG91bGQganVzdCB0ZXN0IHRoYXQgd2l0aCBhbiBhc3NlcnQuCiAgQG92ZXJyaWRlCiAgQ2FwdHVyZWRTY29wZSBnZXRDYXB0dXJlZFNjb3BlKE1lbWJlckVudGl0eSBlbnRpdHkpIHsKICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9IF9lbGVtZW50TWFwLmdldE1lbWJlckRlZmluaXRpb24oZW50aXR5KTsKICAgIHN3aXRjaCAoZGVmaW5pdGlvbi5raW5kKSB7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5yZWd1bGFyOgogICAgICBjYXNlIE1lbWJlcktpbmQuY29uc3RydWN0b3I6CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jb25zdHJ1Y3RvckJvZHk6CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jbG9zdXJlQ2FsbDoKICAgICAgICByZXR1cm4gX2NhcHR1cmVkU2NvcGVzTWFwW2RlZmluaXRpb24ubm9kZV0gPz8gY29uc3QgQ2FwdHVyZWRTY29wZSgpOwogICAgICBjYXNlIE1lbWJlcktpbmQuc2lnbmF0dXJlOgogICAgICAgIHJldHVybiBfY2FwdHVyZWRTY29wZUZvclNpZ25hdHVyZU1hcFtlbnRpdHldID8/IGNvbnN0IENhcHR1cmVkU2NvcGUoKTsKICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBmYWlsZWRBdChlbnRpdHksICJVbmV4cGVjdGVkIG1lbWJlciBkZWZpbml0aW9uICRkZWZpbml0aW9uIik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICAvLyBUT0RPKGVmb3J0dW5hKTogRXZlbnR1YWxseSBjYXB0dXJlZFNjb3Blc01hcFtub2RlXSBzaG91bGQgYWx3YXlzCiAgLy8gYmUgbm9uLW51bGwsIGFuZCB3ZSBzaG91bGQganVzdCB0ZXN0IHRoYXQgd2l0aCBhbiBhc3NlcnQuCiAgQ2FwdHVyZWRMb29wU2NvcGUgZ2V0Q2FwdHVyZWRMb29wU2NvcGUoaXIuTm9kZSBsb29wTm9kZSkgPT4KICAgICAgX2NhcHR1cmVkU2NvcGVzTWFwW2xvb3BOb2RlXSA/PyBjb25zdCBDYXB0dXJlZExvb3BTY29wZSgpOwoKICBAb3ZlcnJpZGUKICBDbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvIGdldENsb3N1cmVJbmZvKGlyLkxvY2FsRnVuY3Rpb24gbm9kZSkgewogICAgdmFyIGNsb3N1cmUgPSBfbG9jYWxDbG9zdXJlUmVwcmVzZW50YXRpb25NYXBbbm9kZV07CiAgICBhc3NlcnQoCiAgICAgICAgY2xvc3VyZSAhPSBudWxsLAogICAgICAgICJDb3JyZXNwb25kaW5nIGNsb3N1cmUgY2xhc3Mgbm90IGZvdW5kIGZvciAkbm9kZS4gIgogICAgICAgICJDbG9zdXJlcyBmb3VuZCBmb3IgJHtfbG9jYWxDbG9zdXJlUmVwcmVzZW50YXRpb25NYXAua2V5c30iKTsKICAgIHJldHVybiBjbG9zdXJlOwogIH0KfQoKLy8vIENsb3N1cmUgY29udmVyc2lvbiBjb2RlIHVzaW5nIG91ciBuZXcgRW50aXR5IG1vZGVsLiBDbG9zdXJlIGNvbnZlcnNpb24gaXMKLy8vIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBzZW1hbnRpY3Mgb2YgY2xvc3VyZXMgYXJlIHNsaWdodGx5IGRpZmZlcmVudCBpbiBEYXJ0Ci8vLyB0aGFuIEphdmFTY3JpcHQuIENsb3N1cmUgY29udmVyc2lvbiBpcyBzZXBhcmF0ZWQgb3V0IGludG8gdHdvIHBoYXNlczoKLy8vIGdlbmVyYXRpb24gb2YgYSBuZXcgKHRlbXBvcmFyeSkgcmVwcmVzZW50YXRpb24gdG8gc3RvcmUgd2hlcmUgdmFyaWFibGVzIG5lZWQKLy8vIHRvIGJlIGhvaXN0ZWQvY2FwdHVyZWQgdXAgYXQgYW5vdGhlciBsZXZlbCB0byByZS13cml0ZSB0aGUgY2xvc3VyZSwgYW5kIHRoZW4KLy8vIHRoZSBjb2RlIGdlbmVyYXRpb24gcGhhc2Ugd2hlcmUgd2UgZ2VuZXJhdGUgZWxlbWVudHMgYW5kL29yIGluc3RydWN0aW9ucyB0bwovLy8gcmVwcmVzZW50IHRoaXMgbmV3IGNvZGUgcGF0aC4KLy8vCi8vLyBGb3IgYSBnZW5lcmFsIGV4cGxhbmF0aW9uIG9mIGhvdyBjbG9zdXJlIGNvbnZlcnNpb24gd29ya3MgYXQgYSBoaWdoIGxldmVsLAovLy8gY2hlY2sgb3V0OgovLy8gaHR0cDovL3NpZWsuYmxvZ3Nwb3QuY29tLzIwMTIvMDcvZXNzZW5jZS1vZi1jbG9zdXJlLWNvbnZlcnNpb24uaHRtbCBvcgovLy8gaHR0cDovL21hdHQubWlnaHQubmV0L2FydGljbGVzL2Nsb3N1cmUtY29udmVyc2lvbi8uCgpjbGFzcyBDbG9zdXJlRGF0YUJ1aWxkZXIgewogIGZpbmFsIEpzVG9FbGVtZW50TWFwIF9lbGVtZW50TWFwOwogIGZpbmFsIEdsb2JhbExvY2Fsc01hcCBfZ2xvYmFsTG9jYWxzTWFwOwogIGZpbmFsIEFubm90YXRpb25zRGF0YSBfYW5ub3RhdGlvbnNEYXRhOwoKICAvLy8gTWFwIG9mIHRoZSBzY29waW5nIGluZm9ybWF0aW9uIHRoYXQgY29ycmVzcG9uZHMgdG8gYSBwYXJ0aWN1bGFyIGVudGl0eS4KICBNYXA8TWVtYmVyRW50aXR5LCBTY29wZUluZm8+IF9zY29wZU1hcCA9IHt9OwogIE1hcDxpci5UcmVlTm9kZSwgQ2FwdHVyZWRTY29wZT4gX2NhcHR1cmVkU2NvcGVzTWFwID0ge307CiAgLy8gSW5kaWNhdGVzIHRoZSB0eXBlIHZhcmlhYmxlcyAoaWYgYW55KSB0aGF0IGFyZSBjYXB0dXJlZCBpbiBhIGdpdmVuCiAgLy8gU2lnbmF0dXJlIGZ1bmN0aW9uLgogIE1hcDxNZW1iZXJFbnRpdHksIENhcHR1cmVkU2NvcGU+IF9jYXB0dXJlZFNjb3BlRm9yU2lnbmF0dXJlTWFwID0ge307CgogIE1hcDxpci5Mb2NhbEZ1bmN0aW9uLCBDbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvPgogICAgICBfbG9jYWxDbG9zdXJlUmVwcmVzZW50YXRpb25NYXAgPSB7fTsKCiAgQ2xvc3VyZURhdGFCdWlsZGVyKAogICAgICB0aGlzLl9lbGVtZW50TWFwLCB0aGlzLl9nbG9iYWxMb2NhbHNNYXAsIHRoaXMuX2Fubm90YXRpb25zRGF0YSk7CgogIHZvaWQgX3VwZGF0ZVNjb3BlQmFzZWRPblJ0aU5lZWQoS2VybmVsU2NvcGVJbmZvIHNjb3BlLCBDbG9zdXJlUnRpTmVlZCBydGlOZWVkLAogICAgICBNZW1iZXJFbnRpdHkgb3V0ZXJtb3N0RW50aXR5KSB7CiAgICBib29sIGluY2x1ZGVGb3JSdGkoU2V0PFZhcmlhYmxlVXNlPiB1c2VTZXQpIHsKICAgICAgZm9yIChWYXJpYWJsZVVzZSB1c2FnZSBpbiB1c2VTZXQpIHsKICAgICAgICBzd2l0Y2ggKHVzYWdlLmtpbmQpIHsKICAgICAgICAgIGNhc2UgVmFyaWFibGVVc2VLaW5kLmV4cGxpY2l0OgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIFZhcmlhYmxlVXNlS2luZC5pbXBsaWNpdENhc3Q6CiAgICAgICAgICAgIGlmIChfYW5ub3RhdGlvbnNEYXRhCiAgICAgICAgICAgICAgICAuZ2V0SW1wbGljaXREb3duY2FzdENoZWNrUG9saWN5KG91dGVybW9zdEVudGl0eSkKICAgICAgICAgICAgICAgIC5pc0VtaXR0ZWQpIHsKICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgVmFyaWFibGVVc2VLaW5kLmxvY2FsVHlwZToKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIFZhcmlhYmxlVXNlS2luZC5jb25zdHJ1Y3RvclR5cGVBcmd1bWVudDoKICAgICAgICAgICAgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IgPQogICAgICAgICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0Q29uc3RydWN0b3IodXNhZ2UubWVtYmVyKTsKICAgICAgICAgICAgaWYgKHJ0aU5lZWQuY2xhc3NOZWVkc1R5cGVBcmd1bWVudHMoY29uc3RydWN0b3IuZW5jbG9zaW5nQ2xhc3MpKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIFZhcmlhYmxlVXNlS2luZC5zdGF0aWNUeXBlQXJndW1lbnQ6CiAgICAgICAgICAgIEZ1bmN0aW9uRW50aXR5IG1ldGhvZCA9IF9lbGVtZW50TWFwLmdldE1ldGhvZCh1c2FnZS5tZW1iZXIpOwogICAgICAgICAgICBpZiAocnRpTmVlZC5tZXRob2ROZWVkc1R5cGVBcmd1bWVudHMobWV0aG9kKSkgewogICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBWYXJpYWJsZVVzZUtpbmQuaW5zdGFuY2VUeXBlQXJndW1lbnQ6CiAgICAgICAgICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gX2VsZW1lbnRNYXAuZ2V0U2VsZWN0b3IodXNhZ2UuaW52b2NhdGlvbik7CiAgICAgICAgICAgIGlmIChydGlOZWVkLnNlbGVjdG9yTmVlZHNUeXBlQXJndW1lbnRzKHNlbGVjdG9yKSkgewogICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBWYXJpYWJsZVVzZUtpbmQubG9jYWxUeXBlQXJndW1lbnQ6CiAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHRyYWNrIGRpcmVjdCBsb2NhbAogICAgICAgICAgICAvLyBmdW5jdGlvbiBpbnZvY2F0aW9ucyBhbmQgbm90IGhhdmUgdG8gdXNlIHRoZSBzZWxlY3RvciBoZXJlLgogICAgICAgICAgICBTZWxlY3RvciBzZWxlY3RvciA9IF9lbGVtZW50TWFwLmdldFNlbGVjdG9yKHVzYWdlLmludm9jYXRpb24pOwogICAgICAgICAgICBpZiAocnRpTmVlZC5sb2NhbEZ1bmN0aW9uTmVlZHNUeXBlQXJndW1lbnRzKHVzYWdlLmxvY2FsRnVuY3Rpb24pIHx8CiAgICAgICAgICAgICAgICBydGlOZWVkLnNlbGVjdG9yTmVlZHNUeXBlQXJndW1lbnRzKHNlbGVjdG9yKSkgewogICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBWYXJpYWJsZVVzZUtpbmQubWVtYmVyUGFyYW1ldGVyOgogICAgICAgICAgICBpZiAoX2Fubm90YXRpb25zRGF0YQogICAgICAgICAgICAgICAgLmdldFBhcmFtZXRlckNoZWNrUG9saWN5KG91dGVybW9zdEVudGl0eSkKICAgICAgICAgICAgICAgIC5pc0VtaXR0ZWQpIHsKICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBGdW5jdGlvbkVudGl0eSBtZXRob2QgPSBfZWxlbWVudE1hcC5nZXRNZXRob2QodXNhZ2UubWVtYmVyKTsKICAgICAgICAgICAgICBpZiAocnRpTmVlZC5tZXRob2ROZWVkc1NpZ25hdHVyZShtZXRob2QpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIFZhcmlhYmxlVXNlS2luZC5sb2NhbFBhcmFtZXRlcjoKICAgICAgICAgICAgaWYgKF9hbm5vdGF0aW9uc0RhdGEKICAgICAgICAgICAgICAgIC5nZXRQYXJhbWV0ZXJDaGVja1BvbGljeShvdXRlcm1vc3RFbnRpdHkpCiAgICAgICAgICAgICAgICAuaXNFbWl0dGVkKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0gZWxzZSBpZiAocnRpTmVlZAogICAgICAgICAgICAgICAgLmxvY2FsRnVuY3Rpb25OZWVkc1NpZ25hdHVyZSh1c2FnZS5sb2NhbEZ1bmN0aW9uKSkgewogICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBWYXJpYWJsZVVzZUtpbmQubWVtYmVyUmV0dXJuVHlwZToKICAgICAgICAgICAgRnVuY3Rpb25FbnRpdHkgbWV0aG9kID0gX2VsZW1lbnRNYXAuZ2V0TWV0aG9kKHVzYWdlLm1lbWJlcik7CiAgICAgICAgICAgIGlmIChydGlOZWVkLm1ldGhvZE5lZWRzU2lnbmF0dXJlKG1ldGhvZCkpIHsKICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgVmFyaWFibGVVc2VLaW5kLmxvY2FsUmV0dXJuVHlwZToKICAgICAgICAgICAgaWYgKHJ0aU5lZWQubG9jYWxGdW5jdGlvbk5lZWRzU2lnbmF0dXJlKHVzYWdlLmxvY2FsRnVuY3Rpb24pKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIFZhcmlhYmxlVXNlS2luZC5maWVsZFR5cGU6CiAgICAgICAgICAgIGlmIChfYW5ub3RhdGlvbnNEYXRhCiAgICAgICAgICAgICAgICAuZ2V0UGFyYW1ldGVyQ2hlY2tQb2xpY3kob3V0ZXJtb3N0RW50aXR5KQogICAgICAgICAgICAgICAgLmlzRW1pdHRlZCkgewogICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBWYXJpYWJsZVVzZUtpbmQubGlzdExpdGVyYWw6CiAgICAgICAgICAgIGlmIChydGlOZWVkLmNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKAogICAgICAgICAgICAgICAgX2VsZW1lbnRNYXAuY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzKSkgewogICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBWYXJpYWJsZVVzZUtpbmQuc2V0TGl0ZXJhbDoKICAgICAgICAgICAgaWYgKHJ0aU5lZWQuY2xhc3NOZWVkc1R5cGVBcmd1bWVudHMoCiAgICAgICAgICAgICAgICBfZWxlbWVudE1hcC5jb21tb25FbGVtZW50cy5zZXRMaXRlcmFsQ2xhc3MpKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIFZhcmlhYmxlVXNlS2luZC5tYXBMaXRlcmFsOgogICAgICAgICAgICBpZiAocnRpTmVlZC5jbGFzc05lZWRzVHlwZUFyZ3VtZW50cygKICAgICAgICAgICAgICAgIF9lbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzLm1hcExpdGVyYWxDbGFzcykpIHsKICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgVmFyaWFibGVVc2VLaW5kLmluc3RhbnRpYXRpb25UeXBlQXJndW1lbnQ6CiAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSB0aGUgc3RhdGljIHR5cGUgb2YgdGhlIGV4cHJlc3Npb24uCiAgICAgICAgICAgIGlmIChydGlOZWVkLmluc3RhbnRpYXRpb25OZWVkc1R5cGVBcmd1bWVudHMoCiAgICAgICAgICAgICAgICBudWxsLCB1c2FnZS5pbnN0YW50aWF0aW9uLnR5cGVBcmd1bWVudHMubGVuZ3RoKSkgewogICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKGluY2x1ZGVGb3JSdGkoc2NvcGUudGhpc1VzZWRBc0ZyZWVWYXJpYWJsZUlmTmVlZHNSdGkpKSB7CiAgICAgIHNjb3BlLnRoaXNVc2VkQXNGcmVlVmFyaWFibGUgPSB0cnVlOwogICAgfQogICAgc2NvcGUuZnJlZVZhcmlhYmxlc0ZvclJ0aS5mb3JFYWNoKAogICAgICAgIChUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQgdHlwZVZhcmlhYmxlLCBTZXQ8VmFyaWFibGVVc2U+IHVzZVNldCkgewogICAgICBpZiAoaW5jbHVkZUZvclJ0aSh1c2VTZXQpKSB7CiAgICAgICAgc2NvcGUuZnJlZVZhcmlhYmxlcy5hZGQodHlwZVZhcmlhYmxlKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBDbG9zdXJlRGF0YSBjcmVhdGVDbG9zdXJlRW50aXRpZXMoCiAgICAgIEpzQ2xvc2VkV29ybGRCdWlsZGVyIGNsb3NlZFdvcmxkQnVpbGRlciwKICAgICAgTWFwPE1lbWJlckVudGl0eSwgQ2xvc3VyZVNjb3BlTW9kZWw+IGNsb3N1cmVNb2RlbHMsCiAgICAgIENsb3N1cmVSdGlOZWVkIHJ0aU5lZWQsCiAgICAgIExpc3Q8RnVuY3Rpb25FbnRpdHk+IGNhbGxNZXRob2RzKSB7CiAgICBjbG9zdXJlTW9kZWxzLmZvckVhY2goKE1lbWJlckVudGl0eSBtZW1iZXIsIENsb3N1cmVTY29wZU1vZGVsIG1vZGVsKSB7CiAgICAgIEtlcm5lbFRvTG9jYWxzTWFwIGxvY2Fsc01hcCA9IF9nbG9iYWxMb2NhbHNNYXAuZ2V0TG9jYWxzTWFwKG1lbWJlcik7CiAgICAgIE1hcDxMb2NhbCwgSlJlY29yZEZpZWxkPiBhbGxCb3hlZFZhcmlhYmxlcyA9CiAgICAgICAgICBfZWxlbWVudE1hcC5tYWtlUmVjb3JkQ29udGFpbmVyKG1vZGVsLnNjb3BlSW5mbywgbWVtYmVyLCBsb2NhbHNNYXApOwogICAgICBfc2NvcGVNYXBbbWVtYmVyXSA9IG5ldyBKc1Njb3BlSW5mby5mcm9tKAogICAgICAgICAgYWxsQm94ZWRWYXJpYWJsZXMsIG1vZGVsLnNjb3BlSW5mbywgbG9jYWxzTWFwLCBfZWxlbWVudE1hcCk7CgogICAgICBtb2RlbC5jYXB0dXJlZFNjb3Blc01hcAogICAgICAgICAgLmZvckVhY2goKGlyLk5vZGUgbm9kZSwgS2VybmVsQ2FwdHVyZWRTY29wZSBzY29wZSkgewogICAgICAgIE1hcDxMb2NhbCwgSlJlY29yZEZpZWxkPiBib3hlZFZhcmlhYmxlcyA9CiAgICAgICAgICAgIF9lbGVtZW50TWFwLm1ha2VSZWNvcmRDb250YWluZXIoc2NvcGUsIG1lbWJlciwgbG9jYWxzTWFwKTsKICAgICAgICBfdXBkYXRlU2NvcGVCYXNlZE9uUnRpTmVlZChzY29wZSwgcnRpTmVlZCwgbWVtYmVyKTsKCiAgICAgICAgaWYgKHNjb3BlIGlzIEtlcm5lbENhcHR1cmVkTG9vcFNjb3BlKSB7CiAgICAgICAgICBfY2FwdHVyZWRTY29wZXNNYXBbbm9kZV0gPSBuZXcgSnNDYXB0dXJlZExvb3BTY29wZS5mcm9tKAogICAgICAgICAgICAgIGJveGVkVmFyaWFibGVzLCBzY29wZSwgbG9jYWxzTWFwLCBfZWxlbWVudE1hcCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF9jYXB0dXJlZFNjb3Blc01hcFtub2RlXSA9IG5ldyBKc0NhcHR1cmVkU2NvcGUuZnJvbSgKICAgICAgICAgICAgICBib3hlZFZhcmlhYmxlcywgc2NvcGUsIGxvY2Fsc01hcCwgX2VsZW1lbnRNYXApOwogICAgICAgIH0KICAgICAgICBhbGxCb3hlZFZhcmlhYmxlcy5hZGRBbGwoYm94ZWRWYXJpYWJsZXMpOwogICAgICB9KTsKCiAgICAgIE1hcDxpci5Mb2NhbEZ1bmN0aW9uLCBLZXJuZWxTY29wZUluZm8+IGNsb3N1cmVzVG9HZW5lcmF0ZSA9CiAgICAgICAgICBtb2RlbC5jbG9zdXJlc1RvR2VuZXJhdGU7CiAgICAgIGZvciAoaXIuTG9jYWxGdW5jdGlvbiBub2RlIGluIGNsb3N1cmVzVG9HZW5lcmF0ZS5rZXlzKSB7CiAgICAgICAgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uTm9kZSA9IG5vZGUuZnVuY3Rpb247CiAgICAgICAgS2VybmVsQ2xvc3VyZUNsYXNzSW5mbyBjbG9zdXJlQ2xhc3NJbmZvID0gX3Byb2R1Y2VTeW50aGV0aWNFbGVtZW50cygKICAgICAgICAgICAgY2xvc2VkV29ybGRCdWlsZGVyLAogICAgICAgICAgICBtZW1iZXIsCiAgICAgICAgICAgIGZ1bmN0aW9uTm9kZSwKICAgICAgICAgICAgY2xvc3VyZXNUb0dlbmVyYXRlW25vZGVdLAogICAgICAgICAgICBhbGxCb3hlZFZhcmlhYmxlcywKICAgICAgICAgICAgcnRpTmVlZCwKICAgICAgICAgICAgY3JlYXRlU2lnbmF0dXJlTWV0aG9kOgogICAgICAgICAgICAgICAgcnRpTmVlZC5sb2NhbEZ1bmN0aW9uTmVlZHNTaWduYXR1cmUoZnVuY3Rpb25Ob2RlLnBhcmVudCkpOwogICAgICAgIC8vIEFkZCBhbHNvIGZvciB0aGUgY2FsbCBtZXRob2QuCiAgICAgICAgX3Njb3BlTWFwW2Nsb3N1cmVDbGFzc0luZm8uY2FsbE1ldGhvZF0gPSBjbG9zdXJlQ2xhc3NJbmZvOwogICAgICAgIGlmIChjbG9zdXJlQ2xhc3NJbmZvLnNpZ25hdHVyZU1ldGhvZCAhPSBudWxsKSB7CiAgICAgICAgICBfc2NvcGVNYXBbY2xvc3VyZUNsYXNzSW5mby5zaWduYXR1cmVNZXRob2RdID0gY2xvc3VyZUNsYXNzSW5mbzsKCiAgICAgICAgICAvLyBTZXQgdXAgY2FwdHVyZWRTY29wZSBmb3Igc2lnbmF0dXJlIG1ldGhvZC4gVGhpcyBpcyBkaXN0aW5jdCBmcm9tCiAgICAgICAgICAvLyBfY2FwdHVyZWRTY29wZXNNYXAgYmVjYXVzZSB0aGVyZSBpcyBubyBjb3JyZXNwb25kaW5nIGlyLk5vZGUgZm9yCiAgICAgICAgICAvLyB0aGUgc2lnbmF0dXJlLgogICAgICAgICAgaWYgKHJ0aU5lZWQubG9jYWxGdW5jdGlvbk5lZWRzU2lnbmF0dXJlKGZ1bmN0aW9uTm9kZS5wYXJlbnQpICYmCiAgICAgICAgICAgICAgbW9kZWwuY2FwdHVyZWRTY29wZXNNYXBbZnVuY3Rpb25Ob2RlXSAhPSBudWxsKSB7CiAgICAgICAgICAgIEtlcm5lbENhcHR1cmVkU2NvcGUgY2FwdHVyZWRTY29wZSA9CiAgICAgICAgICAgICAgICBtb2RlbC5jYXB0dXJlZFNjb3Blc01hcFtmdW5jdGlvbk5vZGVdOwogICAgICAgICAgICBhc3NlcnQoY2FwdHVyZWRTY29wZSBpcyEgS2VybmVsQ2FwdHVyZWRMb29wU2NvcGUpOwogICAgICAgICAgICBLZXJuZWxDYXB0dXJlZFNjb3BlIHNpZ25hdHVyZUNhcHR1cmVkU2NvcGUgPQogICAgICAgICAgICAgICAgbmV3IEtlcm5lbENhcHR1cmVkU2NvcGUuZm9yU2lnbmF0dXJlKGNhcHR1cmVkU2NvcGUpOwogICAgICAgICAgICBfdXBkYXRlU2NvcGVCYXNlZE9uUnRpTmVlZChzaWduYXR1cmVDYXB0dXJlZFNjb3BlLCBydGlOZWVkLCBtZW1iZXIpOwogICAgICAgICAgICBfY2FwdHVyZWRTY29wZUZvclNpZ25hdHVyZU1hcFtjbG9zdXJlQ2xhc3NJbmZvLnNpZ25hdHVyZU1ldGhvZF0gPQogICAgICAgICAgICAgICAgbmV3IEpzQ2FwdHVyZWRTY29wZS5mcm9tKAogICAgICAgICAgICAgICAgICAgIHt9LCBzaWduYXR1cmVDYXB0dXJlZFNjb3BlLCBsb2NhbHNNYXAsIF9lbGVtZW50TWFwKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2FsbE1ldGhvZHMuYWRkKGNsb3N1cmVDbGFzc0luZm8uY2FsbE1ldGhvZCk7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIG5ldyBDbG9zdXJlRGF0YUltcGwoX2VsZW1lbnRNYXAsIF9zY29wZU1hcCwgX2NhcHR1cmVkU2NvcGVzTWFwLAogICAgICAgIF9jYXB0dXJlZFNjb3BlRm9yU2lnbmF0dXJlTWFwLCBfbG9jYWxDbG9zdXJlUmVwcmVzZW50YXRpb25NYXApOwogIH0KCiAgLy8vIEdpdmVuIHdoYXQgdmFyaWFibGVzIGFyZSBjYXB0dXJlZCBhdCBlYWNoIHBvaW50LCBjb25zdHJ1Y3QgY2xvc3VyZSBjbGFzc2VzCiAgLy8vIHdpdGggZmllbGRzIGNvbnRhaW5pbmcgdGhlIGNhcHR1cmVkIHZhcmlhYmxlcyB0byByZXBsaWNhdGUgdGhlIERhcnQKICAvLy8gY2xvc3VyZSBzZW1hbnRpY3MgaW4gSlMuIElmIHRoaXMgY2xvc3VyZSBjYXB0dXJlcyBhbnkgdmFyaWFibGVzIChtZWFuaW5nCiAgLy8vIHRoZSBjbG9zdXJlIGFjY2Vzc2VzIGEgdmFyaWFibGUgdGhhdCBnZXRzIGFjY2Vzc2VkIGF0IHNvbWUgcG9pbnQpLCB0aGVuCiAgLy8vIGJveEZvckNhcHR1cmVkVmFyaWFibGVzIHN0b3JlcyB0aGUgbG9jYWwgY29udGV4dCBmb3IgdGhvc2UgdmFyaWFibGVzLgogIC8vLyBJZiBubyB2YXJpYWJsZXMgYXJlIGNhcHR1cmVkLCB0aGlzIHBhcmFtZXRlciBpcyBudWxsLgogIEtlcm5lbENsb3N1cmVDbGFzc0luZm8gX3Byb2R1Y2VTeW50aGV0aWNFbGVtZW50cygKICAgICAgSnNDbG9zZWRXb3JsZEJ1aWxkZXIgY2xvc2VkV29ybGRCdWlsZGVyLAogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyLAogICAgICBpci5GdW5jdGlvbk5vZGUgbm9kZSwKICAgICAgS2VybmVsU2NvcGVJbmZvIGluZm8sCiAgICAgIE1hcDxMb2NhbCwgSlJlY29yZEZpZWxkPiBib3hlZFZhcmlhYmxlcywKICAgICAgQ2xvc3VyZVJ0aU5lZWQgcnRpTmVlZCwKICAgICAge2Jvb2wgY3JlYXRlU2lnbmF0dXJlTWV0aG9kfSkgewogICAgX3VwZGF0ZVNjb3BlQmFzZWRPblJ0aU5lZWQoaW5mbywgcnRpTmVlZCwgbWVtYmVyKTsKICAgIEtlcm5lbFRvTG9jYWxzTWFwIGxvY2Fsc01hcCA9IF9nbG9iYWxMb2NhbHNNYXAuZ2V0TG9jYWxzTWFwKG1lbWJlcik7CiAgICBLZXJuZWxDbG9zdXJlQ2xhc3NJbmZvIGNsb3N1cmVDbGFzc0luZm8gPQogICAgICAgIGNsb3NlZFdvcmxkQnVpbGRlci5idWlsZENsb3N1cmVDbGFzcygKICAgICAgICAgICAgbWVtYmVyLCBub2RlLCBtZW1iZXIubGlicmFyeSwgYm94ZWRWYXJpYWJsZXMsIGluZm8sIGxvY2Fsc01hcCwKICAgICAgICAgICAgY3JlYXRlU2lnbmF0dXJlTWV0aG9kOiBjcmVhdGVTaWduYXR1cmVNZXRob2QpOwoKICAgIC8vIFdlIHdhbnQgdGhlIG9yaWdpbmFsIGRlY2xhcmF0aW9uIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgdXNlZCB0byBwb2ludAogICAgLy8gdG8gdGhlIGNvcnJlY3QgY2xvc3VyZSBjbGFzcy4KICAgIF9nbG9iYWxMb2NhbHNNYXAuc2V0TG9jYWxzTWFwKGNsb3N1cmVDbGFzc0luZm8uY2FsbE1ldGhvZCwgbG9jYWxzTWFwKTsKICAgIGlmIChjbG9zdXJlQ2xhc3NJbmZvLnNpZ25hdHVyZU1ldGhvZCAhPSBudWxsKSB7CiAgICAgIF9nbG9iYWxMb2NhbHNNYXAuc2V0TG9jYWxzTWFwKAogICAgICAgICAgY2xvc3VyZUNsYXNzSW5mby5zaWduYXR1cmVNZXRob2QsIGxvY2Fsc01hcCk7CiAgICB9CiAgICBpZiAobm9kZS5wYXJlbnQgaXMgaXIuTWVtYmVyKSB7CiAgICAgIGFzc2VydChfZWxlbWVudE1hcC5nZXRNZW1iZXIobm9kZS5wYXJlbnQpID09IG1lbWJlcik7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQobm9kZS5wYXJlbnQgaXMgaXIuTG9jYWxGdW5jdGlvbik7CiAgICAgIF9sb2NhbENsb3N1cmVSZXByZXNlbnRhdGlvbk1hcFtub2RlLnBhcmVudF0gPSBjbG9zdXJlQ2xhc3NJbmZvOwogICAgfQogICAgcmV0dXJuIGNsb3N1cmVDbGFzc0luZm87CiAgfQp9CgovLy8gSGVscGVyIG1ldGhvZCB0byBnZXQgb3IgY3JlYXRlIGEgTG9jYWwgdmFyaWFibGUgb3V0IG9mIGEgdmFyaWFibGUKLy8vIGRlY2xhcmF0aW9uIG9yIHR5cGUgcGFyYW1ldGVyLgpMb2NhbCBfZ2V0TG9jYWwoCiAgICBpci5Ob2RlIHZhcmlhYmxlLCBLZXJuZWxUb0xvY2Fsc01hcCBsb2NhbHNNYXAsIEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApIHsKICBhc3NlcnQodmFyaWFibGUgaXMgaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB8fAogICAgICB2YXJpYWJsZSBpcyBUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQpOwogIGlmICh2YXJpYWJsZSBpcyBpci5WYXJpYWJsZURlY2xhcmF0aW9uKSB7CiAgICByZXR1cm4gbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUodmFyaWFibGUpOwogIH0gZWxzZSBpZiAodmFyaWFibGUgaXMgVHlwZVZhcmlhYmxlVHlwZVdpdGhDb250ZXh0KSB7CiAgICByZXR1cm4gbG9jYWxzTWFwLmdldExvY2FsVHlwZVZhcmlhYmxlKHZhcmlhYmxlLnR5cGUsIGVsZW1lbnRNYXApOwogIH0KICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignT25seSBrbm93IGhvdyB0byBnZXQvY3JlYXRlIGxvY2FscyBmb3IgJwogICAgICAnVmFyaWFibGVEZWNsYXJhdGlvbnMgb3IgVHlwZVBhcmFtZXRlclR5cGVXaXRoQ29udGV4dC4gUmVjaWV2ZWQgJwogICAgICAnJHt2YXJpYWJsZS5ydW50aW1lVHlwZX0nKTsKfQoKY2xhc3MgSnNTY29wZUluZm8gZXh0ZW5kcyBTY29wZUluZm8gewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSnNTY29wZUluZm9dIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnc2NvcGUtaW5mbyc7CgogIGZpbmFsIEl0ZXJhYmxlPExvY2FsPiBsb2NhbHNVc2VkSW5UcnlPclN5bmM7CiAgQG92ZXJyaWRlCiAgZmluYWwgTG9jYWwgdGhpc0xvY2FsOwogIGZpbmFsIE1hcDxMb2NhbCwgSlJlY29yZEZpZWxkPiBib3hlZFZhcmlhYmxlczsKCiAgLy8vIFRoZSBzZXQgb2YgdmFyaWFibGVzIHRoYXQgd2VyZSBkZWZpbmVkIGluIGFub3RoZXIgc2NvcGUsIGJ1dCBhcmUgdXNlZCBpbgogIC8vLyB0aGlzIHNjb3BlLgogIGZpbmFsIFNldDxMb2NhbD4gZnJlZVZhcmlhYmxlczsKCiAgSnNTY29wZUluZm8uaW50ZXJuYWwodGhpcy5sb2NhbHNVc2VkSW5UcnlPclN5bmMsIHRoaXMudGhpc0xvY2FsLAogICAgICB0aGlzLmJveGVkVmFyaWFibGVzLCB0aGlzLmZyZWVWYXJpYWJsZXMpOwoKICBKc1Njb3BlSW5mby5mcm9tKHRoaXMuYm94ZWRWYXJpYWJsZXMsIEtlcm5lbFNjb3BlSW5mbyBpbmZvLAogICAgICBLZXJuZWxUb0xvY2Fsc01hcCBsb2NhbHNNYXAsIEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApCiAgICAgIDogdGhpcy50aGlzTG9jYWwgPSBpbmZvLmhhc1RoaXNMb2NhbAogICAgICAgICAgICA/IG5ldyBUaGlzTG9jYWwobG9jYWxzTWFwLmN1cnJlbnRNZW1iZXIuZW5jbG9zaW5nQ2xhc3MpCiAgICAgICAgICAgIDogbnVsbCwKICAgICAgICB0aGlzLmxvY2Fsc1VzZWRJblRyeU9yU3luYyA9CiAgICAgICAgICAgIGluZm8ubG9jYWxzVXNlZEluVHJ5T3JTeW5jLm1hcChsb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZSkudG9TZXQoKSwKICAgICAgICB0aGlzLmZyZWVWYXJpYWJsZXMgPSBpbmZvLmZyZWVWYXJpYWJsZXMKICAgICAgICAgICAgLm1hcCgoaXIuTm9kZSBub2RlKSA9PiBfZ2V0TG9jYWwobm9kZSwgbG9jYWxzTWFwLCBlbGVtZW50TWFwKSkKICAgICAgICAgICAgLnRvU2V0KCkgewogICAgaWYgKGluZm8udGhpc1VzZWRBc0ZyZWVWYXJpYWJsZSkgewogICAgICB0aGlzLmZyZWVWYXJpYWJsZXMuYWRkKHRoaXMudGhpc0xvY2FsKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaEJveGVkVmFyaWFibGUoZihMb2NhbCBsb2NhbCwgRmllbGRFbnRpdHkgZmllbGQpKSB7CiAgICBib3hlZFZhcmlhYmxlcy5mb3JFYWNoKChMb2NhbCBsLCBKUmVjb3JkRmllbGQgYm94KSB7CiAgICAgIGYobCwgYm94KTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBsb2NhbElzVXNlZEluVHJ5T3JTeW5jKExvY2FsIHZhcmlhYmxlKSA9PgogICAgICBsb2NhbHNVc2VkSW5UcnlPclN5bmMuY29udGFpbnModmFyaWFibGUpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgndGhpcz0kdGhpc0xvY2FsLCcpOwogICAgc2Iud3JpdGUoJ2xvY2Fsc1VzZWRJblRyeU9yU3luYz17JHtsb2NhbHNVc2VkSW5UcnlPclN5bmMuam9pbignLCAnKX19Jyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNCb3hlZFZhcmlhYmxlKExvY2FsIHZhcmlhYmxlKSA9PiBib3hlZFZhcmlhYmxlcy5jb250YWluc0tleSh2YXJpYWJsZSk7CgogIGZhY3RvcnkgSnNTY29wZUluZm8ucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIEl0ZXJhYmxlPExvY2FsPiBsb2NhbHNVc2VkSW5UcnlPclN5bmMgPSBzb3VyY2UucmVhZExvY2FscygpOwogICAgTG9jYWwgdGhpc0xvY2FsID0gc291cmNlLnJlYWRMb2NhbE9yTnVsbCgpOwogICAgTWFwPExvY2FsLCBKUmVjb3JkRmllbGQ+IGJveGVkVmFyaWFibGVzID0KICAgICAgICBzb3VyY2UucmVhZExvY2FsTWFwPExvY2FsLCBKUmVjb3JkRmllbGQ+KCgpID0+IHNvdXJjZS5yZWFkTWVtYmVyKCkpOwogICAgU2V0PExvY2FsPiBmcmVlVmFyaWFibGVzID0gc291cmNlLnJlYWRMb2NhbHMoKS50b1NldCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBKc1Njb3BlSW5mby5pbnRlcm5hbCgKICAgICAgICBsb2NhbHNVc2VkSW5UcnlPclN5bmMsIHRoaXNMb2NhbCwgYm94ZWRWYXJpYWJsZXMsIGZyZWVWYXJpYWJsZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oU2NvcGVJbmZvS2luZC5zY29wZUluZm8pOwogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUxvY2Fscyhsb2NhbHNVc2VkSW5UcnlPclN5bmMpOwogICAgc2luay53cml0ZUxvY2FsT3JOdWxsKHRoaXNMb2NhbCk7CiAgICBzaW5rLndyaXRlTG9jYWxNYXAoYm94ZWRWYXJpYWJsZXMsIHNpbmsud3JpdGVNZW1iZXIpOwogICAgc2luay53cml0ZUxvY2FscyhmcmVlVmFyaWFibGVzKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQp9CgpjbGFzcyBKc0NhcHR1cmVkU2NvcGUgZXh0ZW5kcyBKc1Njb3BlSW5mbyBpbXBsZW1lbnRzIENhcHR1cmVkU2NvcGUgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSnNDYXB0dXJlZFNjb3BlXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2NhcHR1cmVkLXNjb3BlJzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgTG9jYWwgY29udGV4dDsKCiAgSnNDYXB0dXJlZFNjb3BlLmludGVybmFsKAogICAgICBJdGVyYWJsZTxMb2NhbD4gbG9jYWxzVXNlZEluVHJ5T3JTeW5jLAogICAgICBMb2NhbCB0aGlzTG9jYWwsCiAgICAgIE1hcDxMb2NhbCwgSlJlY29yZEZpZWxkPiBib3hlZFZhcmlhYmxlcywKICAgICAgU2V0PExvY2FsPiBmcmVlVmFyaWFibGVzLAogICAgICB0aGlzLmNvbnRleHQpCiAgICAgIDogc3VwZXIuaW50ZXJuYWwoCiAgICAgICAgICAgIGxvY2Fsc1VzZWRJblRyeU9yU3luYywgdGhpc0xvY2FsLCBib3hlZFZhcmlhYmxlcywgZnJlZVZhcmlhYmxlcyk7CgogIEpzQ2FwdHVyZWRTY29wZS5mcm9tKAogICAgICBNYXA8TG9jYWwsIEpSZWNvcmRGaWVsZD4gYm94ZWRWYXJpYWJsZXMsCiAgICAgIEtlcm5lbENhcHR1cmVkU2NvcGUgY2FwdHVyZWRTY29wZSwKICAgICAgS2VybmVsVG9Mb2NhbHNNYXAgbG9jYWxzTWFwLAogICAgICBKc1RvRWxlbWVudE1hcCBlbGVtZW50TWFwKQogICAgICA6IHRoaXMuY29udGV4dCA9CiAgICAgICAgICAgIGJveGVkVmFyaWFibGVzLmlzTm90RW1wdHkgPyBib3hlZFZhcmlhYmxlcy52YWx1ZXMuZmlyc3QuYm94IDogbnVsbCwKICAgICAgICBzdXBlci5mcm9tKGJveGVkVmFyaWFibGVzLCBjYXB0dXJlZFNjb3BlLCBsb2NhbHNNYXAsIGVsZW1lbnRNYXApOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCByZXF1aXJlc0NvbnRleHRCb3ggPT4gYm94ZWRWYXJpYWJsZXMuaXNOb3RFbXB0eTsKCiAgZmFjdG9yeSBKc0NhcHR1cmVkU2NvcGUucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIEl0ZXJhYmxlPExvY2FsPiBsb2NhbHNVc2VkSW5UcnlPclN5bmMgPSBzb3VyY2UucmVhZExvY2FscygpOwogICAgTG9jYWwgdGhpc0xvY2FsID0gc291cmNlLnJlYWRMb2NhbE9yTnVsbCgpOwogICAgTWFwPExvY2FsLCBKUmVjb3JkRmllbGQ+IGJveGVkVmFyaWFibGVzID0KICAgICAgICBzb3VyY2UucmVhZExvY2FsTWFwPExvY2FsLCBKUmVjb3JkRmllbGQ+KCgpID0+IHNvdXJjZS5yZWFkTWVtYmVyKCkpOwogICAgU2V0PExvY2FsPiBmcmVlVmFyaWFibGVzID0gc291cmNlLnJlYWRMb2NhbHMoKS50b1NldCgpOwogICAgTG9jYWwgY29udGV4dCA9IHNvdXJjZS5yZWFkTG9jYWxPck51bGwoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgSnNDYXB0dXJlZFNjb3BlLmludGVybmFsKGxvY2Fsc1VzZWRJblRyeU9yU3luYywgdGhpc0xvY2FsLAogICAgICAgIGJveGVkVmFyaWFibGVzLCBmcmVlVmFyaWFibGVzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKFNjb3BlSW5mb0tpbmQuY2FwdHVyZWRTY29wZSk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTG9jYWxzKGxvY2Fsc1VzZWRJblRyeU9yU3luYyk7CiAgICBzaW5rLndyaXRlTG9jYWxPck51bGwodGhpc0xvY2FsKTsKICAgIHNpbmsud3JpdGVMb2NhbE1hcChib3hlZFZhcmlhYmxlcywgc2luay53cml0ZU1lbWJlcik7CiAgICBzaW5rLndyaXRlTG9jYWxzKGZyZWVWYXJpYWJsZXMpOwogICAgc2luay53cml0ZUxvY2FsT3JOdWxsKGNvbnRleHQpOwogICAgc2luay5lbmQodGFnKTsKICB9Cn0KCmNsYXNzIEpzQ2FwdHVyZWRMb29wU2NvcGUgZXh0ZW5kcyBKc0NhcHR1cmVkU2NvcGUgaW1wbGVtZW50cyBDYXB0dXJlZExvb3BTY29wZSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtKc0NhcHR1cmVkTG9vcFNjb3BlXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2NhcHR1cmVkLWxvb3Atc2NvcGUnOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBMaXN0PExvY2FsPiBib3hlZExvb3BWYXJpYWJsZXM7CgogIEpzQ2FwdHVyZWRMb29wU2NvcGUuaW50ZXJuYWwoCiAgICAgIEl0ZXJhYmxlPExvY2FsPiBsb2NhbHNVc2VkSW5UcnlPclN5bmMsCiAgICAgIExvY2FsIHRoaXNMb2NhbCwKICAgICAgTWFwPExvY2FsLCBKUmVjb3JkRmllbGQ+IGJveGVkVmFyaWFibGVzLAogICAgICBTZXQ8TG9jYWw+IGZyZWVWYXJpYWJsZXMsCiAgICAgIExvY2FsIGNvbnRleHQsCiAgICAgIHRoaXMuYm94ZWRMb29wVmFyaWFibGVzKQogICAgICA6IHN1cGVyLmludGVybmFsKGxvY2Fsc1VzZWRJblRyeU9yU3luYywgdGhpc0xvY2FsLCBib3hlZFZhcmlhYmxlcywKICAgICAgICAgICAgZnJlZVZhcmlhYmxlcywgY29udGV4dCk7CgogIEpzQ2FwdHVyZWRMb29wU2NvcGUuZnJvbSgKICAgICAgTWFwPExvY2FsLCBKUmVjb3JkRmllbGQ+IGJveGVkVmFyaWFibGVzLAogICAgICBLZXJuZWxDYXB0dXJlZExvb3BTY29wZSBjYXB0dXJlZFNjb3BlLAogICAgICBLZXJuZWxUb0xvY2Fsc01hcCBsb2NhbHNNYXAsCiAgICAgIEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApCiAgICAgIDogdGhpcy5ib3hlZExvb3BWYXJpYWJsZXMgPSBjYXB0dXJlZFNjb3BlLmJveGVkTG9vcFZhcmlhYmxlcwogICAgICAgICAgICAubWFwKGxvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKQogICAgICAgICAgICAudG9MaXN0KCksCiAgICAgICAgc3VwZXIuZnJvbShib3hlZFZhcmlhYmxlcywgY2FwdHVyZWRTY29wZSwgbG9jYWxzTWFwLCBlbGVtZW50TWFwKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaGFzQm94ZWRMb29wVmFyaWFibGVzID0+IGJveGVkTG9vcFZhcmlhYmxlcy5pc05vdEVtcHR5OwoKICBmYWN0b3J5IEpzQ2FwdHVyZWRMb29wU2NvcGUucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIEl0ZXJhYmxlPExvY2FsPiBsb2NhbHNVc2VkSW5UcnlPclN5bmMgPSBzb3VyY2UucmVhZExvY2FscygpOwogICAgTG9jYWwgdGhpc0xvY2FsID0gc291cmNlLnJlYWRMb2NhbE9yTnVsbCgpOwogICAgTWFwPExvY2FsLCBKUmVjb3JkRmllbGQ+IGJveGVkVmFyaWFibGVzID0KICAgICAgICBzb3VyY2UucmVhZExvY2FsTWFwPExvY2FsLCBKUmVjb3JkRmllbGQ+KCgpID0+IHNvdXJjZS5yZWFkTWVtYmVyKCkpOwogICAgU2V0PExvY2FsPiBmcmVlVmFyaWFibGVzID0gc291cmNlLnJlYWRMb2NhbHMoKS50b1NldCgpOwogICAgTG9jYWwgY29udGV4dCA9IHNvdXJjZS5yZWFkTG9jYWxPck51bGwoKTsKICAgIExpc3Q8TG9jYWw+IGJveGVkTG9vcFZhcmlhYmxlcyA9IHNvdXJjZS5yZWFkTG9jYWxzKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpzQ2FwdHVyZWRMb29wU2NvcGUuaW50ZXJuYWwobG9jYWxzVXNlZEluVHJ5T3JTeW5jLCB0aGlzTG9jYWwsCiAgICAgICAgYm94ZWRWYXJpYWJsZXMsIGZyZWVWYXJpYWJsZXMsIGNvbnRleHQsIGJveGVkTG9vcFZhcmlhYmxlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShTY29wZUluZm9LaW5kLmNhcHR1cmVkTG9vcFNjb3BlKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVMb2NhbHMobG9jYWxzVXNlZEluVHJ5T3JTeW5jKTsKICAgIHNpbmsud3JpdGVMb2NhbE9yTnVsbCh0aGlzTG9jYWwpOwogICAgc2luay53cml0ZUxvY2FsTWFwKGJveGVkVmFyaWFibGVzLCBzaW5rLndyaXRlTWVtYmVyKTsKICAgIHNpbmsud3JpdGVMb2NhbHMoZnJlZVZhcmlhYmxlcyk7CiAgICBzaW5rLndyaXRlTG9jYWxPck51bGwoY29udGV4dCk7CiAgICBzaW5rLndyaXRlTG9jYWxzKGJveGVkTG9vcFZhcmlhYmxlcyk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KfQoKLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVuYW1lIHRoaXMgY2xhc3MuCi8vIFRPRE8oam9obm5pd2ludGhlcik6IEFkZCB1bml0dGVzdCBmb3IgdGhlIGNvbXB1dGVkIFtDbG9zdXJlQ2xhc3NdLgpjbGFzcyBLZXJuZWxDbG9zdXJlQ2xhc3NJbmZvIGV4dGVuZHMgSnNTY29wZUluZm8KICAgIGltcGxlbWVudHMgQ2xvc3VyZVJlcHJlc2VudGF0aW9uSW5mbyB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtLZXJuZWxDbG9zdXJlQ2xhc3NJbmZvXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2Nsb3N1cmUtcmVwcmVzZW50YXRpb24taW5mbyc7CgogIEBvdmVycmlkZQogIEpGdW5jdGlvbiBjYWxsTWV0aG9kOwogIEBvdmVycmlkZQogIEpTaWduYXR1cmVNZXRob2Qgc2lnbmF0dXJlTWV0aG9kOwogIEBvdmVycmlkZQogIGZpbmFsIExvY2FsIGNsb3N1cmVFbnRpdHk7CiAgQG92ZXJyaWRlCiAgZmluYWwgTG9jYWwgdGhpc0xvY2FsOwogIEBvdmVycmlkZQogIGZpbmFsIEpDbGFzcyBjbG9zdXJlQ2xhc3NFbnRpdHk7CgogIGZpbmFsIE1hcDxMb2NhbCwgSkZpZWxkPiBsb2NhbFRvRmllbGRNYXA7CgogIEtlcm5lbENsb3N1cmVDbGFzc0luZm8uaW50ZXJuYWwoCiAgICAgIEl0ZXJhYmxlPExvY2FsPiBsb2NhbHNVc2VkSW5UcnlPclN5bmMsCiAgICAgIHRoaXMudGhpc0xvY2FsLAogICAgICBNYXA8TG9jYWwsIEpSZWNvcmRGaWVsZD4gYm94ZWRWYXJpYWJsZXMsCiAgICAgIFNldDxMb2NhbD4gZnJlZVZhcmlhYmxlcywKICAgICAgdGhpcy5jYWxsTWV0aG9kLAogICAgICB0aGlzLnNpZ25hdHVyZU1ldGhvZCwKICAgICAgdGhpcy5jbG9zdXJlRW50aXR5LAogICAgICB0aGlzLmNsb3N1cmVDbGFzc0VudGl0eSwKICAgICAgdGhpcy5sb2NhbFRvRmllbGRNYXApCiAgICAgIDogc3VwZXIuaW50ZXJuYWwoCiAgICAgICAgICAgIGxvY2Fsc1VzZWRJblRyeU9yU3luYywgdGhpc0xvY2FsLCBib3hlZFZhcmlhYmxlcywgZnJlZVZhcmlhYmxlcyk7CgogIEtlcm5lbENsb3N1cmVDbGFzc0luZm8uZnJvbVNjb3BlSW5mbygKICAgICAgdGhpcy5jbG9zdXJlQ2xhc3NFbnRpdHksCiAgICAgIGlyLkZ1bmN0aW9uTm9kZSBjbG9zdXJlU291cmNlTm9kZSwKICAgICAgTWFwPExvY2FsLCBKUmVjb3JkRmllbGQ+IGJveGVkVmFyaWFibGVzLAogICAgICBLZXJuZWxTY29wZUluZm8gaW5mbywKICAgICAgS2VybmVsVG9Mb2NhbHNNYXAgbG9jYWxzTWFwLAogICAgICB0aGlzLmNsb3N1cmVFbnRpdHksCiAgICAgIHRoaXMudGhpc0xvY2FsLAogICAgICBKc1RvRWxlbWVudE1hcCBlbGVtZW50TWFwKQogICAgICA6IGxvY2FsVG9GaWVsZE1hcCA9IG5ldyBNYXA8TG9jYWwsIEpGaWVsZD4oKSwKICAgICAgICBzdXBlci5mcm9tKGJveGVkVmFyaWFibGVzLCBpbmZvLCBsb2NhbHNNYXAsIGVsZW1lbnRNYXApOwoKICBmYWN0b3J5IEtlcm5lbENsb3N1cmVDbGFzc0luZm8ucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIEl0ZXJhYmxlPExvY2FsPiBsb2NhbHNVc2VkSW5UcnlPclN5bmMgPSBzb3VyY2UucmVhZExvY2FscygpOwogICAgTG9jYWwgdGhpc0xvY2FsID0gc291cmNlLnJlYWRMb2NhbE9yTnVsbCgpOwogICAgTWFwPExvY2FsLCBKUmVjb3JkRmllbGQ+IGJveGVkVmFyaWFibGVzID0KICAgICAgICBzb3VyY2UucmVhZExvY2FsTWFwPExvY2FsLCBKUmVjb3JkRmllbGQ+KCgpID0+IHNvdXJjZS5yZWFkTWVtYmVyKCkpOwogICAgU2V0PExvY2FsPiBmcmVlVmFyaWFibGVzID0gc291cmNlLnJlYWRMb2NhbHMoKS50b1NldCgpOwogICAgSkZ1bmN0aW9uIGNhbGxNZXRob2QgPSBzb3VyY2UucmVhZE1lbWJlcigpOwogICAgSlNpZ25hdHVyZU1ldGhvZCBzaWduYXR1cmVNZXRob2QgPSBzb3VyY2UucmVhZE1lbWJlck9yTnVsbCgpOwogICAgTG9jYWwgY2xvc3VyZUVudGl0eSA9IHNvdXJjZS5yZWFkTG9jYWxPck51bGwoKTsKICAgIEpDbGFzcyBjbG9zdXJlQ2xhc3NFbnRpdHkgPSBzb3VyY2UucmVhZENsYXNzKCk7CiAgICBNYXA8TG9jYWwsIEpGaWVsZD4gbG9jYWxUb0ZpZWxkTWFwID0KICAgICAgICBzb3VyY2UucmVhZExvY2FsTWFwKCgpID0+IHNvdXJjZS5yZWFkTWVtYmVyKCkpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBLZXJuZWxDbG9zdXJlQ2xhc3NJbmZvLmludGVybmFsKAogICAgICAgIGxvY2Fsc1VzZWRJblRyeU9yU3luYywKICAgICAgICB0aGlzTG9jYWwsCiAgICAgICAgYm94ZWRWYXJpYWJsZXMsCiAgICAgICAgZnJlZVZhcmlhYmxlcywKICAgICAgICBjYWxsTWV0aG9kLAogICAgICAgIHNpZ25hdHVyZU1ldGhvZCwKICAgICAgICBjbG9zdXJlRW50aXR5LAogICAgICAgIGNsb3N1cmVDbGFzc0VudGl0eSwKICAgICAgICBsb2NhbFRvRmllbGRNYXApOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oU2NvcGVJbmZvS2luZC5jbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVMb2NhbHMobG9jYWxzVXNlZEluVHJ5T3JTeW5jKTsKICAgIHNpbmsud3JpdGVMb2NhbE9yTnVsbCh0aGlzTG9jYWwpOwogICAgc2luay53cml0ZUxvY2FsTWFwKGJveGVkVmFyaWFibGVzLCBzaW5rLndyaXRlTWVtYmVyKTsKICAgIHNpbmsud3JpdGVMb2NhbHMoZnJlZVZhcmlhYmxlcyk7CiAgICBzaW5rLndyaXRlTWVtYmVyKGNhbGxNZXRob2QpOwogICAgc2luay53cml0ZU1lbWJlck9yTnVsbChzaWduYXR1cmVNZXRob2QpOwogICAgc2luay53cml0ZUxvY2FsT3JOdWxsKGNsb3N1cmVFbnRpdHkpOwogICAgc2luay53cml0ZUNsYXNzKGNsb3N1cmVDbGFzc0VudGl0eSk7CiAgICBzaW5rLndyaXRlTG9jYWxNYXAobG9jYWxUb0ZpZWxkTWFwLCBzaW5rLndyaXRlTWVtYmVyKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PExvY2FsPiBnZXQgY3JlYXRlZEZpZWxkRW50aXRpZXMgPT4gbG9jYWxUb0ZpZWxkTWFwLmtleXMudG9MaXN0KCk7CgogIEBvdmVycmlkZQogIExvY2FsIGdldExvY2FsRm9yRmllbGQoRmllbGRFbnRpdHkgZmllbGQpIHsKICAgIGZvciAoTG9jYWwgbG9jYWwgaW4gbG9jYWxUb0ZpZWxkTWFwLmtleXMpIHsKICAgICAgaWYgKGxvY2FsVG9GaWVsZE1hcFtsb2NhbF0gPT0gZmllbGQpIHsKICAgICAgICByZXR1cm4gbG9jYWw7CiAgICAgIH0KICAgIH0KICAgIGZhaWxlZEF0KGZpZWxkLCAiTm8gbG9jYWwgZm9yICRmaWVsZC4gT3B0aW9uczogJGxvY2FsVG9GaWVsZE1hcCIpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBGaWVsZEVudGl0eSBnZXQgdGhpc0ZpZWxkRW50aXR5ID0+IGxvY2FsVG9GaWVsZE1hcFt0aGlzTG9jYWxdOwoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hGcmVlVmFyaWFibGUoZihMb2NhbCB2YXJpYWJsZSwgSkZpZWxkIGZpZWxkKSkgewogICAgbG9jYWxUb0ZpZWxkTWFwLmZvckVhY2goZik7CiAgICBib3hlZFZhcmlhYmxlcy5mb3JFYWNoKGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNDbG9zdXJlID0+IHRydWU7Cn0KCmNsYXNzIEpDbG9zdXJlQ2xhc3MgZXh0ZW5kcyBKQ2xhc3MgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSkNsb3N1cmVDbGFzc10gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdjbG9zdXJlLWNsYXNzJzsKCiAgSkNsb3N1cmVDbGFzcyhKTGlicmFyeSBsaWJyYXJ5LCBTdHJpbmcgbmFtZSkKICAgICAgOiBzdXBlcihsaWJyYXJ5LCBuYW1lLCBpc0Fic3RyYWN0OiBmYWxzZSk7CgogIGZhY3RvcnkgSkNsb3N1cmVDbGFzcy5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgSkxpYnJhcnkgbGlicmFyeSA9IHNvdXJjZS5yZWFkTGlicmFyeSgpOwogICAgU3RyaW5nIG5hbWUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBKQ2xvc3VyZUNsYXNzKGxpYnJhcnksIG5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSkNsYXNzS2luZC5jbG9zdXJlKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVMaWJyYXJ5KGxpYnJhcnkpOwogICAgc2luay53cml0ZVN0cmluZyhuYW1lKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0Nsb3N1cmUgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyR7anNFbGVtZW50UHJlZml4fWNsb3N1cmVfY2xhc3MoJG5hbWUpJzsKfQoKY2xhc3MgQW5vbnltb3VzQ2xvc3VyZUxvY2FsIGltcGxlbWVudHMgTG9jYWwgewogIGZpbmFsIEpDbG9zdXJlQ2xhc3MgY2xvc3VyZUNsYXNzOwoKICBBbm9ueW1vdXNDbG9zdXJlTG9jYWwodGhpcy5jbG9zdXJlQ2xhc3MpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gJyc7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gY2xvc3VyZUNsYXNzLmhhc2hDb2RlICogMTM7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgQW5vbnltb3VzQ2xvc3VyZUxvY2FsKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gY2xvc3VyZUNsYXNzID09IG90aGVyLmNsb3N1cmVDbGFzczsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+CiAgICAgICcke2pzRWxlbWVudFByZWZpeH1hbm9ueW1vdXNfY2xvc3VyZV9sb2NhbCgke2Nsb3N1cmVDbGFzcy5uYW1lfSknOwp9CgpjbGFzcyBKQ2xvc3VyZUZpZWxkIGV4dGVuZHMgSkZpZWxkIGltcGxlbWVudHMgUHJpdmF0ZWx5TmFtZWRKU0VudGl0eSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtKQ2xvc3VyZUNsYXNzXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2Nsb3N1cmUtZmllbGQnOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgZGVjbGFyZWROYW1lOwoKICBKQ2xvc3VyZUZpZWxkKAogICAgICBTdHJpbmcgbmFtZSwgS2VybmVsQ2xvc3VyZUNsYXNzSW5mbyBjb250YWluaW5nQ2xhc3MsIFN0cmluZyBkZWNsYXJlZE5hbWUsCiAgICAgIHtib29sIGlzQ29uc3QsIGJvb2wgaXNBc3NpZ25hYmxlfSkKICAgICAgOiB0aGlzLmludGVybmFsKAogICAgICAgICAgICBjb250YWluaW5nQ2xhc3MuY2xvc3VyZUNsYXNzRW50aXR5LmxpYnJhcnksCiAgICAgICAgICAgIGNvbnRhaW5pbmdDbGFzcy5jbG9zdXJlQ2xhc3NFbnRpdHksCiAgICAgICAgICAgIG5ldyBOYW1lKG5hbWUsIGNvbnRhaW5pbmdDbGFzcy5jbG9zdXJlQ2xhc3NFbnRpdHkubGlicmFyeSksCiAgICAgICAgICAgIGRlY2xhcmVkTmFtZSwKICAgICAgICAgICAgaXNBc3NpZ25hYmxlOiBpc0Fzc2lnbmFibGUsCiAgICAgICAgICAgIGlzQ29uc3Q6IGlzQ29uc3QpOwoKICBKQ2xvc3VyZUZpZWxkLmludGVybmFsKEpMaWJyYXJ5IGxpYnJhcnksIEpDbG9zdXJlQ2xhc3MgZW5jbG9zaW5nQ2xhc3MsCiAgICAgIE5hbWUgbWVtYmVyTmFtZSwgdGhpcy5kZWNsYXJlZE5hbWUsIHtib29sIGlzQ29uc3QsIGJvb2wgaXNBc3NpZ25hYmxlfSkKICAgICAgOiBzdXBlcihsaWJyYXJ5LCBlbmNsb3NpbmdDbGFzcywgbWVtYmVyTmFtZSwKICAgICAgICAgICAgaXNBc3NpZ25hYmxlOiBpc0Fzc2lnbmFibGUsIGlzQ29uc3Q6IGlzQ29uc3QsIGlzU3RhdGljOiBmYWxzZSk7CgogIGZhY3RvcnkgSkNsb3N1cmVGaWVsZC5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgSkNsYXNzIGNscyA9IHNvdXJjZS5yZWFkQ2xhc3MoKTsKICAgIFN0cmluZyBuYW1lID0gc291cmNlLnJlYWRTdHJpbmcoKTsKICAgIFN0cmluZyBkZWNsYXJlZE5hbWUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgYm9vbCBpc0NvbnN0ID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBib29sIGlzQXNzaWduYWJsZSA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBKQ2xvc3VyZUZpZWxkLmludGVybmFsKAogICAgICAgIGNscy5saWJyYXJ5LCBjbHMsIG5ldyBOYW1lKG5hbWUsIGNscy5saWJyYXJ5KSwgZGVjbGFyZWROYW1lLAogICAgICAgIGlzQXNzaWduYWJsZTogaXNBc3NpZ25hYmxlLCBpc0NvbnN0OiBpc0NvbnN0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKEpNZW1iZXJLaW5kLmNsb3N1cmVGaWVsZCk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlQ2xhc3MoZW5jbG9zaW5nQ2xhc3MpOwogICAgc2luay53cml0ZVN0cmluZyhuYW1lKTsKICAgIHNpbmsud3JpdGVTdHJpbmcoZGVjbGFyZWROYW1lKTsKICAgIHNpbmsud3JpdGVCb29sKGlzQ29uc3QpOwogICAgc2luay53cml0ZUJvb2woaXNBc3NpZ25hYmxlKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBFbnRpdHkgZ2V0IHJvb3RPZlNjb3BlID0+IGVuY2xvc2luZ0NsYXNzOwp9CgpjbGFzcyBSZWNvcmRDbGFzc0RhdGEgaW1wbGVtZW50cyBKQ2xhc3NEYXRhIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW1JlY29yZENsYXNzRGF0YV0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdyZWNvcmQtY2xhc3MtZGF0YSc7CgogIEBvdmVycmlkZQogIGZpbmFsIENsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBJbnRlcmZhY2VUeXBlIHRoaXNUeXBlOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBPcmRlcmVkVHlwZVNldCBvcmRlcmVkVHlwZVNldDsKCiAgQG92ZXJyaWRlCiAgZmluYWwgSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGU7CgogIFJlY29yZENsYXNzRGF0YSgKICAgICAgdGhpcy5kZWZpbml0aW9uLCB0aGlzLnRoaXNUeXBlLCB0aGlzLnN1cGVydHlwZSwgdGhpcy5vcmRlcmVkVHlwZVNldCk7CgogIGZhY3RvcnkgUmVjb3JkQ2xhc3NEYXRhLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IG5ldyBDbGFzc0RlZmluaXRpb24ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBJbnRlcmZhY2VUeXBlIHRoaXNUeXBlID0gc291cmNlLnJlYWREYXJ0VHlwZSgpOwogICAgSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlKCk7CiAgICBPcmRlcmVkVHlwZVNldCBvcmRlcmVkVHlwZVNldCA9CiAgICAgICAgbmV3IE9yZGVyZWRUeXBlU2V0LnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBSZWNvcmRDbGFzc0RhdGEoZGVmaW5pdGlvbiwgdGhpc1R5cGUsIHN1cGVydHlwZSwgb3JkZXJlZFR5cGVTZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSkNsYXNzRGF0YUtpbmQucmVjb3JkKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIGRlZmluaXRpb24ud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc2luay53cml0ZURhcnRUeXBlKHRoaXNUeXBlKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZShzdXBlcnR5cGUpOwogICAgb3JkZXJlZFR5cGVTZXQud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTWl4aW5BcHBsaWNhdGlvbiA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFbnVtQ2xhc3MgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldCBjYWxsVHlwZSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBMaXN0PEludGVyZmFjZVR5cGU+IGdldCBpbnRlcmZhY2VzID0+IGNvbnN0IDxJbnRlcmZhY2VUeXBlPltdOwoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldCBtaXhlZEluVHlwZSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldCByYXdUeXBlID0+IHRoaXNUeXBlOwp9CgovLy8gQSBjb250YWluZXIgZm9yIHZhcmlhYmxlcyBkZWNsYXJlZCBpbiBhIHBhcnRpY3VsYXIgc2NvcGUgdGhhdCBhcmUgYWNjZXNzZWQKLy8vIGVsc2V3aGVyZS4KLy8gVE9ETyhqb2hubml3aW50aGVyKTogRG9uJ3QgaW1wbGVtZW50IEpDbGFzcy4gVGhpcyBpc24ndCBhY3R1YWxseSBhCi8vIGNsYXNzLgpjbGFzcyBKUmVjb3JkIGV4dGVuZHMgSkNsYXNzIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pSZWNvcmRdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAncmVjb3JkJzsKCiAgSlJlY29yZChMaWJyYXJ5RW50aXR5IGxpYnJhcnksIFN0cmluZyBuYW1lKQogICAgICA6IHN1cGVyKGxpYnJhcnksIG5hbWUsIGlzQWJzdHJhY3Q6IGZhbHNlKTsKCiAgZmFjdG9yeSBKUmVjb3JkLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBKTGlicmFyeSBsaWJyYXJ5ID0gc291cmNlLnJlYWRMaWJyYXJ5KCk7CiAgICBTdHJpbmcgbmFtZSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpSZWNvcmQobGlicmFyeSwgbmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShKQ2xhc3NLaW5kLnJlY29yZCk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTGlicmFyeShsaWJyYXJ5KTsKICAgIHNpbmsud3JpdGVTdHJpbmcobmFtZSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNDbG9zdXJlID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJHtqc0VsZW1lbnRQcmVmaXh9cmVjb3JkX2NvbnRhaW5lcigkbmFtZSknOwp9CgovLy8gQSB2YXJpYWJsZSB0aGF0IGhhcyBiZWVuICJib3hlZCIgdG8gcHJldmVudCBuYW1lIHNoYWRvd2luZyB3aXRoIHRoZQovLy8gb3JpZ2luYWwgdmFyaWFibGUgYW5kIGVuc3VyZSB0aGF0IHRoaXMgdmFyaWFibGUgaXMgdXBkYXRlZC9yZWFkIHdpdGggdGhlCi8vLyBtb3N0IHJlY2VudCB2YWx1ZS4KY2xhc3MgSlJlY29yZEZpZWxkIGV4dGVuZHMgSkZpZWxkIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pSZWNvcmRGaWVsZF0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdyZWNvcmQtZmllbGQnOwoKICBmaW5hbCBCb3hMb2NhbCBib3g7CgogIEpSZWNvcmRGaWVsZChTdHJpbmcgbmFtZSwgdGhpcy5ib3gsIHtib29sIGlzQ29uc3R9KQogICAgICA6IHN1cGVyKGJveC5jb250YWluZXIubGlicmFyeSwgYm94LmNvbnRhaW5lciwKICAgICAgICAgICAgbmV3IE5hbWUobmFtZSwgYm94LmNvbnRhaW5lci5saWJyYXJ5KSwKICAgICAgICAgICAgaXNTdGF0aWM6IGZhbHNlLCBpc0Fzc2lnbmFibGU6IHRydWUsIGlzQ29uc3Q6IGlzQ29uc3QpOwoKICBmYWN0b3J5IEpSZWNvcmRGaWVsZC5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgU3RyaW5nIG5hbWUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgSkNsYXNzIGVuY2xvc2luZ0NsYXNzID0gc291cmNlLnJlYWRDbGFzcygpOwogICAgYm9vbCBpc0NvbnN0ID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpSZWNvcmRGaWVsZChuYW1lLCBuZXcgQm94TG9jYWwoZW5jbG9zaW5nQ2xhc3MpLAogICAgICAgIGlzQ29uc3Q6IGlzQ29uc3QpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSk1lbWJlcktpbmQucmVjb3JkRmllbGQpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZVN0cmluZyhuYW1lKTsKICAgIHNpbmsud3JpdGVDbGFzcyhlbmNsb3NpbmdDbGFzcyk7CiAgICBzaW5rLndyaXRlQm9vbChpc0NvbnN0KTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhlc2UgYW5vbWFsaWVzLiBNYXliZSBieSBzZXBhcmF0aW5nIHRoZQogIC8vIEotZW50aXRpZXMgZnJvbSB0aGUgSy1lbnRpdGllcy4KICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0luc3RhbmNlTWVtYmVyID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1RvcExldmVsID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1N0YXRpYyA9PiBmYWxzZTsKfQoKY2xhc3MgQ2xvc3VyZUNsYXNzRGF0YSBleHRlbmRzIFJlY29yZENsYXNzRGF0YSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtDbG9zdXJlQ2xhc3NEYXRhXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2Nsb3N1cmUtY2xhc3MtZGF0YSc7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uVHlwZSBjYWxsVHlwZTsKCiAgQ2xvc3VyZUNsYXNzRGF0YShDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbiwgSW50ZXJmYWNlVHlwZSB0aGlzVHlwZSwKICAgICAgSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUsIE9yZGVyZWRUeXBlU2V0IG9yZGVyZWRUeXBlU2V0KQogICAgICA6IHN1cGVyKGRlZmluaXRpb24sIHRoaXNUeXBlLCBzdXBlcnR5cGUsIG9yZGVyZWRUeXBlU2V0KTsKCiAgZmFjdG9yeSBDbG9zdXJlQ2xhc3NEYXRhLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbiA9IG5ldyBDbGFzc0RlZmluaXRpb24ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBJbnRlcmZhY2VUeXBlIHRoaXNUeXBlID0gc291cmNlLnJlYWREYXJ0VHlwZSgpOwogICAgSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlKCk7CiAgICBPcmRlcmVkVHlwZVNldCBvcmRlcmVkVHlwZVNldCA9CiAgICAgICAgbmV3IE9yZGVyZWRUeXBlU2V0LnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgRnVuY3Rpb25UeXBlIGNhbGxUeXBlID0gc291cmNlLnJlYWREYXJ0VHlwZSgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBDbG9zdXJlQ2xhc3NEYXRhKGRlZmluaXRpb24sIHRoaXNUeXBlLCBzdXBlcnR5cGUsIG9yZGVyZWRUeXBlU2V0KQogICAgICAuLmNhbGxUeXBlID0gY2FsbFR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShKQ2xhc3NEYXRhS2luZC5jbG9zdXJlKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIGRlZmluaXRpb24ud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc2luay53cml0ZURhcnRUeXBlKHRoaXNUeXBlKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZShzdXBlcnR5cGUpOwogICAgb3JkZXJlZFR5cGVTZXQud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc2luay53cml0ZURhcnRUeXBlKGNhbGxUeXBlKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQp9CgpjbGFzcyBDbG9zdXJlQ2xhc3NEZWZpbml0aW9uIGltcGxlbWVudHMgQ2xhc3NEZWZpbml0aW9uIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0Nsb3N1cmVDbGFzc0RlZmluaXRpb25dIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnY2xvc3VyZS1jbGFzcy1kZWZpbml0aW9uJzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgU291cmNlU3BhbiBsb2NhdGlvbjsKCiAgQ2xvc3VyZUNsYXNzRGVmaW5pdGlvbih0aGlzLmxvY2F0aW9uKTsKCiAgZmFjdG9yeSBDbG9zdXJlQ2xhc3NEZWZpbml0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBTb3VyY2VTcGFuIGxvY2F0aW9uID0gc291cmNlLnJlYWRTb3VyY2VTcGFuKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IENsb3N1cmVDbGFzc0RlZmluaXRpb24obG9jYXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oQ2xhc3NLaW5kLmNsb3N1cmUpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZVNvdXJjZVNwYW4obG9jYXRpb24pOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIENsYXNzS2luZCBnZXQga2luZCA9PiBDbGFzc0tpbmQuY2xvc3VyZTsKCiAgQG92ZXJyaWRlCiAgaXIuTm9kZSBnZXQgbm9kZSA9PgogICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignQ2xvc3VyZUNsYXNzRGVmaW5pdGlvbi5ub2RlIGZvciAkbG9jYXRpb24nKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0Nsb3N1cmVDbGFzc0RlZmluaXRpb24oa2luZDoka2luZCxsb2NhdGlvbjokbG9jYXRpb24pJzsKfQoKYWJzdHJhY3QgY2xhc3MgQ2xvc3VyZU1lbWJlckRhdGEgaW1wbGVtZW50cyBKTWVtYmVyRGF0YSB7CiAgQG92ZXJyaWRlCiAgZmluYWwgTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uOwogIGZpbmFsIEludGVyZmFjZVR5cGUgbWVtYmVyVGhpc1R5cGU7CgogIENsb3N1cmVNZW1iZXJEYXRhKHRoaXMuZGVmaW5pdGlvbiwgdGhpcy5tZW1iZXJUaGlzVHlwZSk7CgogIEBvdmVycmlkZQogIFN0YXRpY1R5cGVDYWNoZSBnZXQgc3RhdGljVHlwZXMgewogICAgLy8gVGhlIGNhY2hlZCB0eXBlcyBhcmUgc3RvcmVkIGluIHRoZSBkYXRhIGZvciBlbmNsb3NpbmcgbWVtYmVyLgogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNsb3N1cmVNZW1iZXJEYXRhLnN0YXRpY1R5cGVzIik7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldE1lbWJlclRoaXNUeXBlKEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApIHsKICAgIHJldHVybiBtZW1iZXJUaGlzVHlwZTsKICB9Cn0KCmNsYXNzIENsb3N1cmVGdW5jdGlvbkRhdGEgZXh0ZW5kcyBDbG9zdXJlTWVtYmVyRGF0YQogICAgd2l0aCBGdW5jdGlvbkRhdGFUeXBlVmFyaWFibGVzTWl4aW4sIEZ1bmN0aW9uRGF0YUZvckVhY2hQYXJhbWV0ZXJNaXhpbgogICAgaW1wbGVtZW50cyBGdW5jdGlvbkRhdGEgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbQ2xvc3VyZUZ1bmN0aW9uRGF0YV0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdjbG9zdXJlLWZ1bmN0aW9uLWRhdGEnOwoKICBmaW5hbCBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlOwogIEBvdmVycmlkZQogIGZpbmFsIGlyLkZ1bmN0aW9uTm9kZSBmdW5jdGlvbk5vZGU7CiAgQG92ZXJyaWRlCiAgZmluYWwgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgY2xhc3NUeXBlVmFyaWFibGVBY2Nlc3M7CgogIENsb3N1cmVGdW5jdGlvbkRhdGEoCiAgICAgIENsb3N1cmVNZW1iZXJEZWZpbml0aW9uIGRlZmluaXRpb24sCiAgICAgIEludGVyZmFjZVR5cGUgbWVtYmVyVGhpc1R5cGUsCiAgICAgIHRoaXMuZnVuY3Rpb25UeXBlLAogICAgICB0aGlzLmZ1bmN0aW9uTm9kZSwKICAgICAgdGhpcy5jbGFzc1R5cGVWYXJpYWJsZUFjY2VzcykKICAgICAgOiBzdXBlcihkZWZpbml0aW9uLCBtZW1iZXJUaGlzVHlwZSk7CgogIGZhY3RvcnkgQ2xvc3VyZUZ1bmN0aW9uRGF0YS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgQ2xvc3VyZU1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9CiAgICAgICAgbmV3IE1lbWJlckRlZmluaXRpb24ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBJbnRlcmZhY2VUeXBlIG1lbWJlclRoaXNUeXBlID0gc291cmNlLnJlYWREYXJ0VHlwZShhbGxvd051bGw6IHRydWUpOwogICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9IHNvdXJjZS5yZWFkRGFydFR5cGUoKTsKICAgIGlyLkZ1bmN0aW9uTm9kZSBmdW5jdGlvbk5vZGUgPSBzb3VyY2UucmVhZFRyZWVOb2RlKCk7CiAgICBDbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyBjbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyA9CiAgICAgICAgc291cmNlLnJlYWRFbnVtKENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLnZhbHVlcyk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IENsb3N1cmVGdW5jdGlvbkRhdGEoZGVmaW5pdGlvbiwgbWVtYmVyVGhpc1R5cGUsIGZ1bmN0aW9uVHlwZSwKICAgICAgICBmdW5jdGlvbk5vZGUsIGNsYXNzVHlwZVZhcmlhYmxlQWNjZXNzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKEpNZW1iZXJEYXRhS2luZC5jbG9zdXJlRnVuY3Rpb24pOwogICAgc2luay5iZWdpbih0YWcpOwogICAgZGVmaW5pdGlvbi53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLndyaXRlRGFydFR5cGUobWVtYmVyVGhpc1R5cGUsIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlRGFydFR5cGUoZnVuY3Rpb25UeXBlKTsKICAgIHNpbmsud3JpdGVUcmVlTm9kZShmdW5jdGlvbk5vZGUpOwogICAgc2luay53cml0ZUVudW0oY2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uVHlwZSBnZXRGdW5jdGlvblR5cGUoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgcmV0dXJuIGZ1bmN0aW9uVHlwZTsKICB9Cn0KCmNsYXNzIENsb3N1cmVGaWVsZERhdGEgZXh0ZW5kcyBDbG9zdXJlTWVtYmVyRGF0YSBpbXBsZW1lbnRzIEpGaWVsZERhdGEgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbQ2xvc3VyZUZpZWxkRGF0YV0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdjbG9zdXJlLWZpZWxkLWRhdGEnOwoKICBEYXJ0VHlwZSBfdHlwZTsKCiAgQ2xvc3VyZUZpZWxkRGF0YShNZW1iZXJEZWZpbml0aW9uIGRlZmluaXRpb24sIEludGVyZmFjZVR5cGUgbWVtYmVyVGhpc1R5cGUpCiAgICAgIDogc3VwZXIoZGVmaW5pdGlvbiwgbWVtYmVyVGhpc1R5cGUpOwoKICBmYWN0b3J5IENsb3N1cmVGaWVsZERhdGEucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9CiAgICAgICAgbmV3IE1lbWJlckRlZmluaXRpb24ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBJbnRlcmZhY2VUeXBlIG1lbWJlclRoaXNUeXBlID0gc291cmNlLnJlYWREYXJ0VHlwZShhbGxvd051bGw6IHRydWUpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBDbG9zdXJlRmllbGREYXRhKGRlZmluaXRpb24sIG1lbWJlclRoaXNUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKEpNZW1iZXJEYXRhS2luZC5jbG9zdXJlRmllbGQpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgZGVmaW5pdGlvbi53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLndyaXRlRGFydFR5cGUobWVtYmVyVGhpc1R5cGUsIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0RmllbGRUeXBlKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApIHsKICAgIGlmIChfdHlwZSAhPSBudWxsKSByZXR1cm4gX3R5cGU7CiAgICBpci5UcmVlTm9kZSBzb3VyY2VOb2RlID0gZGVmaW5pdGlvbi5ub2RlOwogICAgaXIuRGFydFR5cGUgdHlwZTsKICAgIGlmIChzb3VyY2VOb2RlIGlzIGlyLkNsYXNzKSB7CiAgICAgIHR5cGUgPSBzb3VyY2VOb2RlLnRoaXNUeXBlOwogICAgfSBlbHNlIGlmIChzb3VyY2VOb2RlIGlzIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24pIHsKICAgICAgdHlwZSA9IHNvdXJjZU5vZGUudHlwZTsKICAgIH0gZWxzZSBpZiAoc291cmNlTm9kZSBpcyBpci5GaWVsZCkgewogICAgICB0eXBlID0gc291cmNlTm9kZS50eXBlOwogICAgfSBlbHNlIGlmIChzb3VyY2VOb2RlIGlzIGlyLlR5cGVMaXRlcmFsKSB7CiAgICAgIHR5cGUgPSBzb3VyY2VOb2RlLnR5cGU7CiAgICB9IGVsc2UgaWYgKHNvdXJjZU5vZGUgaXMgaXIuVHlwZWRlZikgewogICAgICB0eXBlID0gc291cmNlTm9kZS50eXBlOwogICAgfSBlbHNlIGlmIChzb3VyY2VOb2RlIGlzIGlyLlR5cGVQYXJhbWV0ZXIpIHsKICAgICAgdHlwZSA9IHNvdXJjZU5vZGUuYm91bmQ7CiAgICB9IGVsc2UgewogICAgICBmYWlsZWRBdCgKICAgICAgICAgIGRlZmluaXRpb24ubG9jYXRpb24sCiAgICAgICAgICAnVW5leHBlY3RlZCBub2RlIHR5cGUgJHtzb3VyY2VOb2RlfSBpbiAnCiAgICAgICAgICAnQ2xvc3VyZUZpZWxkRGF0YS5nZXRGaWVsZFR5cGUnKTsKICAgIH0KICAgIHJldHVybiBfdHlwZSA9IGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUodHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gZ2V0RmllbGRDb25zdGFudEV4cHJlc3Npb24oSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgZmFpbGVkQXQoCiAgICAgICAgZGVmaW5pdGlvbi5sb2NhdGlvbiwKICAgICAgICAiVW5leHBlY3RlZCBmaWVsZCAke2RlZmluaXRpb259IGluICIKICAgICAgICAiQ2xvc3VyZUZpZWxkRGF0YS5nZXRGaWVsZENvbnN0YW50RXhwcmVzc2lvbiIpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyBnZXQgY2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgPT4KICAgICAgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3Mubm9uZTsKfQoKY2xhc3MgQ2xvc3VyZU1lbWJlckRlZmluaXRpb24gaW1wbGVtZW50cyBNZW1iZXJEZWZpbml0aW9uIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0Nsb3N1cmVNZW1iZXJEZWZpbml0aW9uXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2Nsb3N1cmUtbWVtYmVyLWRlZmluaXRpb24nOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBTb3VyY2VTcGFuIGxvY2F0aW9uOwogIEBvdmVycmlkZQogIGZpbmFsIE1lbWJlcktpbmQga2luZDsKICBAb3ZlcnJpZGUKICBmaW5hbCBpci5UcmVlTm9kZSBub2RlOwoKICBDbG9zdXJlTWVtYmVyRGVmaW5pdGlvbih0aGlzLmxvY2F0aW9uLCB0aGlzLmtpbmQsIHRoaXMubm9kZSkKICAgICAgOiBhc3NlcnQoCiAgICAgICAgICAgIGtpbmQgPT0gTWVtYmVyS2luZC5jbG9zdXJlQ2FsbCB8fCBraW5kID09IE1lbWJlcktpbmQuY2xvc3VyZUZpZWxkKTsKCiAgZmFjdG9yeSBDbG9zdXJlTWVtYmVyRGVmaW5pdGlvbi5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBNZW1iZXJLaW5kIGtpbmQpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgU291cmNlU3BhbiBsb2NhdGlvbiA9IHNvdXJjZS5yZWFkU291cmNlU3BhbigpOwogICAgaXIuVHJlZU5vZGUgbm9kZSA9IHNvdXJjZS5yZWFkVHJlZU5vZGUoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgQ2xvc3VyZU1lbWJlckRlZmluaXRpb24obG9jYXRpb24sIGtpbmQsIG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oa2luZCk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlU291cmNlU3Bhbihsb2NhdGlvbik7CiAgICBzaW5rLndyaXRlVHJlZU5vZGUobm9kZSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0Nsb3N1cmVNZW1iZXJEZWZpbml0aW9uKGtpbmQ6JGtpbmQsbG9jYXRpb246JGxvY2F0aW9uKSc7Cn0KCmNsYXNzIFJlY29yZENvbnRhaW5lckRlZmluaXRpb24gaW1wbGVtZW50cyBDbGFzc0RlZmluaXRpb24gewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbUmVjb3JkQ29udGFpbmVyRGVmaW5pdGlvbl0gb2JqZWN0cyBpbgogIC8vLyBhIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdyZWNvcmQtZGVmaW5pdGlvbic7CgogIEBvdmVycmlkZQogIGZpbmFsIFNvdXJjZVNwYW4gbG9jYXRpb247CgogIFJlY29yZENvbnRhaW5lckRlZmluaXRpb24odGhpcy5sb2NhdGlvbik7CgogIGZhY3RvcnkgUmVjb3JkQ29udGFpbmVyRGVmaW5pdGlvbi5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgU291cmNlU3BhbiBsb2NhdGlvbiA9IHNvdXJjZS5yZWFkU291cmNlU3BhbigpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBSZWNvcmRDb250YWluZXJEZWZpbml0aW9uKGxvY2F0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKENsYXNzS2luZC5yZWNvcmQpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZVNvdXJjZVNwYW4obG9jYXRpb24pOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIENsYXNzS2luZCBnZXQga2luZCA9PiBDbGFzc0tpbmQucmVjb3JkOwoKICBAb3ZlcnJpZGUKICBpci5Ob2RlIGdldCBub2RlID0+IHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAnUmVjb3JkQ29udGFpbmVyRGVmaW5pdGlvbi5ub2RlIGZvciAkbG9jYXRpb24nKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgJ1JlY29yZENvbnRhaW5lckRlZmluaXRpb24oa2luZDoka2luZCxsb2NhdGlvbjokbG9jYXRpb24pJzsKfQoKYWJzdHJhY3QgY2xhc3MgQ2xvc3VyZVJ0aU5lZWQgewogIGJvb2wgY2xhc3NOZWVkc1R5cGVBcmd1bWVudHMoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgYm9vbCBtZXRob2ROZWVkc1R5cGVBcmd1bWVudHMoRnVuY3Rpb25FbnRpdHkgbWV0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YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmpzX21vZGVsLmVudjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL2NvbnN0cnVjdG9ycy5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvZXhwcmVzc2lvbnMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9pbmRleGVkLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2lyL2VsZW1lbnRfbWFwLmRhcnQnOwppbXBvcnQgJy4uL2lyL3N0YXRpY190eXBlX2NhY2hlLmRhcnQnOwppbXBvcnQgJy4uL2lyL3Zpc2l0b3JzLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL2VsZW1lbnRfbWFwLmRhcnQnOwppbXBvcnQgJy4uL29yZGVyZWRfdHlwZXNldC5kYXJ0JzsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vc3NhL3R5cGVfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICdjbG9zdXJlLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRfbWFwLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRfbWFwX2ltcGwuZGFydCc7CmltcG9ydCAnZWxlbWVudHMuZGFydCc7CgovLy8gRW52aXJvbm1lbnQgZm9yIGZhc3QgbG9va3VwIG9mIGNvbXBvbmVudCBsaWJyYXJpZXMuCmNsYXNzIEpQcm9ncmFtRW52IHsKICBmaW5hbCBJdGVyYWJsZTxpci5Db21wb25lbnQ+IF9jb21wb25lbnRzOwogIGZpbmFsIE1hcDxVcmksIEpMaWJyYXJ5RW52PiBfbGlicmFyeU1hcCA9IHt9OwoKICBKUHJvZ3JhbUVudih0aGlzLl9jb21wb25lbnRzKTsKCiAgLy8vIFRPRE8oam9obm5pd2ludGhlcik6IEhhbmRsZSBhcmJpdHJhcnkgbG9hZCBvcmRlciBpZiBuZWVkZWQuCiAgaXIuTWVtYmVyIGdldCBtYWluTWV0aG9kID0+IF9jb21wb25lbnRzLmZpcnN0Py5tYWluTWV0aG9kOwoKICBpci5Db21wb25lbnQgZ2V0IG1haW5Db21wb25lbnQgPT4gX2NvbXBvbmVudHMuZmlyc3Q7CgogIHZvaWQgcmVnaXN0ZXJMaWJyYXJ5KEpMaWJyYXJ5RW52IGVudikgewogICAgX2xpYnJhcnlNYXBbZW52LmxpYnJhcnkuaW1wb3J0VXJpXSA9IGVudjsKICB9CgogIC8vLyBSZXR1cm4gdGhlIFtKTGlicmFyeUVudl0gZm9yIHRoZSBsaWJyYXJ5IHdpdGggdGhlIGNhbm9uaWNhbCBbdXJpXS4KICBKTGlicmFyeUVudiBsb29rdXBMaWJyYXJ5KFVyaSB1cmkpIHsKICAgIHJldHVybiBfbGlicmFyeU1hcFt1cmldOwogIH0KCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBsaWJyYXJ5IGluIHRoaXMgZW52aXJvbm1lbnQuCiAgdm9pZCBmb3JFYWNoTGlicmFyeSh2b2lkIGYoSkxpYnJhcnlFbnYgbGlicmFyeSkpIHsKICAgIF9saWJyYXJ5TWFwLnZhbHVlcy5mb3JFYWNoKGYpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIG51bWJlciBvZiBsaWJyYXJpZXMgaW4gdGhpcyBlbnZpcm9ubWVudC4KICBpbnQgZ2V0IGxlbmd0aCB7CiAgICByZXR1cm4gX2xpYnJhcnlNYXAubGVuZ3RoOwogIH0KfQoKLy8vIEVudmlyb25tZW50IGZvciBmYXN0IGxvb2t1cCBvZiBsaWJyYXJ5IGNsYXNzZXMgYW5kIG1lbWJlcnMuCmNsYXNzIEpMaWJyYXJ5RW52IHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pMaWJyYXJ5RW52XSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2xpYnJhcnktZW52JzsKCiAgZmluYWwgaXIuTGlicmFyeSBsaWJyYXJ5OwogIGZpbmFsIE1hcDxTdHJpbmcsIEpDbGFzc0Vudj4gX2NsYXNzTWFwID0ge307CiAgZmluYWwgTWFwPFN0cmluZywgaXIuTWVtYmVyPiBfbWVtYmVyTWFwOwogIGZpbmFsIE1hcDxTdHJpbmcsIGlyLk1lbWJlcj4gX3NldHRlck1hcDsKCiAgSkxpYnJhcnlFbnYodGhpcy5saWJyYXJ5LCB0aGlzLl9tZW1iZXJNYXAsIHRoaXMuX3NldHRlck1hcCk7CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbSkxpYnJhcnlFbnZdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgSkxpYnJhcnlFbnYucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLkxpYnJhcnkgbGlicmFyeSA9IHNvdXJjZS5yZWFkTGlicmFyeU5vZGUoKTsKICAgIE1hcDxTdHJpbmcsIGlyLk1lbWJlcj4gbWVtYmVyTWFwID0KICAgICAgICBzb3VyY2UucmVhZFN0cmluZ01hcChzb3VyY2UucmVhZE1lbWJlck5vZGUpOwogICAgTWFwPFN0cmluZywgaXIuTWVtYmVyPiBzZXR0ZXJNYXAgPQogICAgICAgIHNvdXJjZS5yZWFkU3RyaW5nTWFwKHNvdXJjZS5yZWFkTWVtYmVyTm9kZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpMaWJyYXJ5RW52KGxpYnJhcnksIG1lbWJlck1hcCwgc2V0dGVyTWFwKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0pMaWJyYXJ5RW52XSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUxpYnJhcnlOb2RlKGxpYnJhcnkpOwogICAgc2luay53cml0ZVN0cmluZ01hcChfbWVtYmVyTWFwLCBzaW5rLndyaXRlTWVtYmVyTm9kZSk7CiAgICBzaW5rLndyaXRlU3RyaW5nTWFwKF9zZXR0ZXJNYXAsIHNpbmsud3JpdGVNZW1iZXJOb2RlKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyQ2xhc3MoU3RyaW5nIG5hbWUsIEpDbGFzc0VudiBjbGFzc0VudikgewogICAgX2NsYXNzTWFwW25hbWVdID0gY2xhc3NFbnY7CiAgfQoKICAvLy8gUmV0dXJuIHRoZSBbSkNsYXNzRW52XSBmb3IgdGhlIGNsYXNzIFtuYW1lXSBpbiBbbGlicmFyeV0uCiAgSkNsYXNzRW52IGxvb2t1cENsYXNzKFN0cmluZyBuYW1lKSB7CiAgICByZXR1cm4gX2NsYXNzTWFwW25hbWVdOwogIH0KCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBjbGFzcyBpbiB0aGlzIGxpYnJhcnkuCiAgdm9pZCBmb3JFYWNoQ2xhc3Modm9pZCBmKEpDbGFzc0VudiBjbHMpKSB7CiAgICBfY2xhc3NNYXAudmFsdWVzLmZvckVhY2goZik7CiAgfQoKICAvLy8gUmV0dXJuIHRoZSBbaXIuTWVtYmVyXSBmb3IgdGhlIG1lbWJlciBbbmFtZV0gaW4gW2xpYnJhcnldLgogIGlyLk1lbWJlciBsb29rdXBNZW1iZXIoU3RyaW5nIG5hbWUsIHtib29sIHNldHRlcjogZmFsc2V9KSB7CiAgICByZXR1cm4gc2V0dGVyID8gX3NldHRlck1hcFtuYW1lXSA6IF9tZW1iZXJNYXBbbmFtZV07CiAgfQoKICB2b2lkIGZvckVhY2hNZW1iZXIodm9pZCBmKGlyLk1lbWJlciBtZW1iZXIpKSB7CiAgICBfbWVtYmVyTWFwLnZhbHVlcy5mb3JFYWNoKGYpOwogICAgZm9yIChpci5NZW1iZXIgbWVtYmVyIGluIF9zZXR0ZXJNYXAudmFsdWVzKSB7CiAgICAgIGlmIChtZW1iZXIgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICAgICAgZihtZW1iZXIpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFNraXAgZmllbGRzOyB0aGVzZSBhcmUgYWxzbyBpbiBfbWVtYmVyTWFwLgogICAgICB9CiAgICB9CiAgfQp9CgpjbGFzcyBKTGlicmFyeURhdGEgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSkxpYnJhcnlEYXRhXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2xpYnJhcnktZGF0YSc7CgogIGZpbmFsIGlyLkxpYnJhcnkgbGlicmFyeTsKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBdm9pZCBkaXJlY3QgYWNjZXNzIHRvIFtpbXBvcnRzXS4gSXQgbWlnaHQgYmUgbnVsbCBpZgogIC8vIGl0IGhhc24ndCBiZWVuIGNvbXB1dGVkIGZvciB0aGUgY29ycmVzcG9uZGluZyBbS0xpYnJhcnlEYXRhXS4KICBmaW5hbCBNYXA8aXIuTGlicmFyeURlcGVuZGVuY3ksIEltcG9ydEVudGl0eT4gaW1wb3J0czsKCiAgSkxpYnJhcnlEYXRhKHRoaXMubGlicmFyeSwgdGhpcy5pbXBvcnRzKTsKCiAgZmFjdG9yeSBKTGlicmFyeURhdGEucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLkxpYnJhcnkgbGlicmFyeSA9IHNvdXJjZS5yZWFkTGlicmFyeU5vZGUoKTsKICAgIGludCBpbXBvcnRDb3VudCA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBNYXA8aXIuTGlicmFyeURlcGVuZGVuY3ksIEltcG9ydEVudGl0eT4gaW1wb3J0czsKICAgIGlmIChpbXBvcnRDb3VudCA+IDApIHsKICAgICAgaW1wb3J0cyA9IHt9OwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGltcG9ydENvdW50OyBpKyspIHsKICAgICAgICBpbnQgaW5kZXggPSBzb3VyY2UucmVhZEludCgpOwogICAgICAgIEltcG9ydEVudGl0eSBpbXBvcnQgPSBzb3VyY2UucmVhZEltcG9ydCgpOwogICAgICAgIGltcG9ydHNbbGlicmFyeS5kZXBlbmRlbmNpZXNbaW5kZXhdXSA9IGltcG9ydDsKICAgICAgfQogICAgfQogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBKTGlicmFyeURhdGEobGlicmFyeSwgaW1wb3J0cyk7CiAgfQoKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTGlicmFyeU5vZGUobGlicmFyeSk7CiAgICBpZiAoaW1wb3J0cyA9PSBudWxsKSB7CiAgICAgIHNpbmsud3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICBzaW5rLndyaXRlSW50KGltcG9ydHMubGVuZ3RoKTsKICAgICAgaW50IGluZGV4ID0gMDsKICAgICAgZm9yIChpci5MaWJyYXJ5RGVwZW5kZW5jeSBub2RlIGluIGxpYnJhcnkuZGVwZW5kZW5jaWVzKSB7CiAgICAgICAgSW1wb3J0RW50aXR5IGltcG9ydCA9IGltcG9ydHNbbm9kZV07CiAgICAgICAgaWYgKGltcG9ydCAhPSBudWxsKSB7CiAgICAgICAgICBzaW5rLndyaXRlSW50KGluZGV4KTsKICAgICAgICAgIHNpbmsud3JpdGVJbXBvcnQoaW1wb3J0KTsKICAgICAgICB9CiAgICAgICAgaW5kZXgrKzsKICAgICAgfQogICAgfQogICAgc2luay5lbmQodGFnKTsKICB9Cn0KCi8vLyBFbnVtIHVzZWQgZm9yIGlkZW50aWZ5aW5nIFtKQ2xhc3NFbnZdIHN1YmNsYXNzZXMgaW4gc2VyaWFsaXphdGlvbi4KZW51bSBKQ2xhc3NFbnZLaW5kIHsgbm9kZSwgY2xvc3VyZSwgcmVjb3JkIH0KCi8vLyBNZW1iZXIgZGF0YSBmb3IgYSBjbGFzcy4KYWJzdHJhY3QgY2xhc3MgSkNsYXNzRW52IHsKICAvLy8gRGVzZXJpYWxpemVzIGEgW0pDbGFzc0Vudl0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBKQ2xhc3NFbnYucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBKQ2xhc3NFbnZLaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oSkNsYXNzRW52S2luZC52YWx1ZXMpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgSkNsYXNzRW52S2luZC5ub2RlOgogICAgICAgIHJldHVybiBuZXcgSkNsYXNzRW52SW1wbC5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBKQ2xhc3NFbnZLaW5kLmNsb3N1cmU6CiAgICAgICAgcmV0dXJuIG5ldyBDbG9zdXJlQ2xhc3NFbnYucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSkNsYXNzRW52S2luZC5yZWNvcmQ6CiAgICAgICAgcmV0dXJuIG5ldyBSZWNvcmRFbnYucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5zdXBwb3J0ZWQgSkNsYXNzRW52S2luZCAka2luZCIpOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbSkNsYXNzRW52XSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luayk7CgogIC8vLyBUaGUgW2lyLkNsYXNzXSB0aGF0IGRlZmluZWQgdGhlIGNsYXNzLCBpZiBhbnkuCiAgaXIuQ2xhc3MgZ2V0IGNsczsKCiAgLy8vIFdoZXRoZXIgdGhlIGNsYXNzIGlzIGFuIHVubmFtZWQgbWl4aW4gYXBwbGljYXRpb24uCiAgYm9vbCBnZXQgaXNVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbjsKCiAgLy8vIFdoZXRoZXIgdGhlIGNsYXNzIGlzIGEgbWl4aW4gYXBwbGljYXRpb24gdGhhdCBtaXhlcyBpbiBtZXRob2RzIHdpdGggc3VwZXIKICAvLy8gY2FsbHMuCiAgYm9vbCBnZXQgaXNTdXBlck1peGluQXBwbGljYXRpb247CgogIC8vLyBSZXR1cm4gdGhlIFtNZW1iZXJFbnRpdHldIGZvciB0aGUgbWVtYmVyIFtuYW1lXSBpbiB0aGUgY2xhc3MuIElmIFtzZXR0ZXJdCiAgLy8vIGlzIGB0cnVlYCwgdGhlIHNldHRlciBvciBhc3NpZ25hYmxlIGZpZWxkIGNvcnJlc3BvbmRpbmcgdG8gW25hbWVdIGlzCiAgLy8vIHJldHVybmVkLgogIE1lbWJlckVudGl0eSBsb29rdXBNZW1iZXIoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIHNldHRlcjogZmFsc2V9KTsKCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBtZW1iZXIgb2YgW2Nsc10uCiAgdm9pZCBmb3JFYWNoTWVtYmVyKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIHZvaWQgZihNZW1iZXJFbnRpdHkgbWVtYmVyKSk7CgogIC8vLyBSZXR1cm4gdGhlIFtDb25zdHJ1Y3RvckVudGl0eV0gZm9yIHRoZSBjb25zdHJ1Y3RvciBbbmFtZV0gaW4gW2Nsc10uCiAgQ29uc3RydWN0b3JFbnRpdHkgbG9va3VwQ29uc3RydWN0b3IoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgU3RyaW5nIG5hbWUpOwoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIGNvbnN0cnVjdG9yIG9mIFtjbHNdLgogIHZvaWQgZm9yRWFjaENvbnN0cnVjdG9yKAogICAgICBJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwLCB2b2lkIGYoQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IpKTsKCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBjb25zdHJ1Y3RvciBib2R5IGZvciB0aGUgbGl2ZSBjb25zdHJ1Y3RvcnMgaW4gdGhlCiAgLy8vIGNsYXNzLgogIHZvaWQgZm9yRWFjaENvbnN0cnVjdG9yQm9keSh2b2lkIGYoQ29uc3RydWN0b3JCb2R5RW50aXR5IGNvbnN0cnVjdG9yKSk7Cn0KCi8vLyBFbnZpcm9ubWVudCBmb3IgZmFzdCBsb29rdXAgb2YgY2xhc3MgbWVtYmVycy4KY2xhc3MgSkNsYXNzRW52SW1wbCBpbXBsZW1lbnRzIEpDbGFzc0VudiB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtKQ2xhc3NFbnZdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnY2xhc3MtZW52JzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgaXIuQ2xhc3MgY2xzOwogIGZpbmFsIE1hcDxTdHJpbmcsIGlyLk1lbWJlcj4gX2NvbnN0cnVjdG9yTWFwOwogIGZpbmFsIE1hcDxTdHJpbmcsIGlyLk1lbWJlcj4gX21lbWJlck1hcDsKICBmaW5hbCBNYXA8U3RyaW5nLCBpci5NZW1iZXI+IF9zZXR0ZXJNYXA7CiAgZmluYWwgTGlzdDxpci5NZW1iZXI+IF9tZW1iZXJzOyAvLyBpbiBkZWNsYXJhdGlvbiBvcmRlci4KICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzU3VwZXJNaXhpbkFwcGxpY2F0aW9uOwoKICAvLy8gQ29uc3RydWN0b3IgYm9kaWVzIGNyZWF0ZWQgZm9yIHRoaXMgY2xhc3MuCiAgTGlzdDxDb25zdHJ1Y3RvckJvZHlFbnRpdHk+IF9jb25zdHJ1Y3RvckJvZHlMaXN0OwoKICBKQ2xhc3NFbnZJbXBsKHRoaXMuY2xzLCB0aGlzLl9jb25zdHJ1Y3Rvck1hcCwgdGhpcy5fbWVtYmVyTWFwLAogICAgICB0aGlzLl9zZXR0ZXJNYXAsIHRoaXMuX21lbWJlcnMsIHRoaXMuaXNTdXBlck1peGluQXBwbGljYXRpb24pOwoKICBmYWN0b3J5IEpDbGFzc0VudkltcGwucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLkNsYXNzIGNscyA9IHNvdXJjZS5yZWFkQ2xhc3NOb2RlKCk7CiAgICBNYXA8U3RyaW5nLCBpci5NZW1iZXI+IGNvbnN0cnVjdG9yTWFwID0KICAgICAgICBzb3VyY2UucmVhZFN0cmluZ01hcChzb3VyY2UucmVhZE1lbWJlck5vZGUpOwogICAgTWFwPFN0cmluZywgaXIuTWVtYmVyPiBtZW1iZXJNYXAgPQogICAgICAgIHNvdXJjZS5yZWFkU3RyaW5nTWFwKHNvdXJjZS5yZWFkTWVtYmVyTm9kZSk7CiAgICBNYXA8U3RyaW5nLCBpci5NZW1iZXI+IHNldHRlck1hcCA9CiAgICAgICAgc291cmNlLnJlYWRTdHJpbmdNYXAoc291cmNlLnJlYWRNZW1iZXJOb2RlKTsKICAgIExpc3Q8aXIuTWVtYmVyPiBtZW1iZXJzID0gc291cmNlLnJlYWRNZW1iZXJOb2RlcygpOwogICAgYm9vbCBpc1N1cGVyTWl4aW5BcHBsaWNhdGlvbiA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBKQ2xhc3NFbnZJbXBsKGNscywgY29uc3RydWN0b3JNYXAsIG1lbWJlck1hcCwgc2V0dGVyTWFwLCBtZW1iZXJzLAogICAgICAgIGlzU3VwZXJNaXhpbkFwcGxpY2F0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKEpDbGFzc0VudktpbmQubm9kZSk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlQ2xhc3NOb2RlKGNscyk7CiAgICBzaW5rLndyaXRlU3RyaW5nTWFwKF9jb25zdHJ1Y3Rvck1hcCwgc2luay53cml0ZU1lbWJlck5vZGUpOwogICAgc2luay53cml0ZVN0cmluZ01hcChfbWVtYmVyTWFwLCBzaW5rLndyaXRlTWVtYmVyTm9kZSk7CiAgICBzaW5rLndyaXRlU3RyaW5nTWFwKF9zZXR0ZXJNYXAsIHNpbmsud3JpdGVNZW1iZXJOb2RlKTsKICAgIHNpbmsud3JpdGVNZW1iZXJOb2RlcyhfbWVtYmVycyk7CiAgICBzaW5rLndyaXRlQm9vbChpc1N1cGVyTWl4aW5BcHBsaWNhdGlvbik7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbiA9PiBjbHMuaXNBbm9ueW1vdXNNaXhpbjsKCiAgQG92ZXJyaWRlCiAgTWVtYmVyRW50aXR5IGxvb2t1cE1lbWJlcihJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwLCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgc2V0dGVyOiBmYWxzZX0pIHsKICAgIGlyLk1lbWJlciBtZW1iZXIgPSBzZXR0ZXIgPyBfc2V0dGVyTWFwW25hbWVdIDogX21lbWJlck1hcFtuYW1lXTsKICAgIHJldHVybiBtZW1iZXIgIT0gbnVsbCA/IGVsZW1lbnRNYXAuZ2V0TWVtYmVyKG1lbWJlcikgOiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoTWVtYmVyKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIHZvaWQgZihNZW1iZXJFbnRpdHkgbWVtYmVyKSkgewogICAgX21lbWJlcnMuZm9yRWFjaCgoaXIuTWVtYmVyIG1lbWJlcikgewogICAgICBmKGVsZW1lbnRNYXAuZ2V0TWVtYmVyKG1lbWJlcikpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdHJ1Y3RvckVudGl0eSBsb29rdXBDb25zdHJ1Y3RvcihJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwLCBTdHJpbmcgbmFtZSkgewogICAgaXIuTWVtYmVyIGNvbnN0cnVjdG9yID0gX2NvbnN0cnVjdG9yTWFwW25hbWVdOwogICAgcmV0dXJuIGNvbnN0cnVjdG9yICE9IG51bGwgPyBlbGVtZW50TWFwLmdldENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKSA6IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hDb25zdHJ1Y3RvcigKICAgICAgSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgdm9pZCBmKENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yKSkgewogICAgX2NvbnN0cnVjdG9yTWFwLnZhbHVlcy5mb3JFYWNoKChpci5NZW1iZXIgY29uc3RydWN0b3IpIHsKICAgICAgZihlbGVtZW50TWFwLmdldENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKSk7CiAgICB9KTsKICB9CgogIHZvaWQgYWRkQ29uc3RydWN0b3JCb2R5KENvbnN0cnVjdG9yQm9keUVudGl0eSBjb25zdHJ1Y3RvckJvZHkpIHsKICAgIF9jb25zdHJ1Y3RvckJvZHlMaXN0ID8/PSA8Q29uc3RydWN0b3JCb2R5RW50aXR5PltdOwogICAgX2NvbnN0cnVjdG9yQm9keUxpc3QuYWRkKGNvbnN0cnVjdG9yQm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hDb25zdHJ1Y3RvckJvZHkodm9pZCBmKENvbnN0cnVjdG9yQm9keUVudGl0eSBjb25zdHJ1Y3RvcikpIHsKICAgIF9jb25zdHJ1Y3RvckJvZHlMaXN0Py5mb3JFYWNoKGYpOwogIH0KfQoKY2xhc3MgUmVjb3JkRW52IGltcGxlbWVudHMgSkNsYXNzRW52IHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW1JlY29yZEVudl0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdyZWNvcmQtZW52JzsKCiAgZmluYWwgTWFwPFN0cmluZywgSW5kZXhlZE1lbWJlcj4gX21lbWJlck1hcDsKCiAgUmVjb3JkRW52KHRoaXMuX21lbWJlck1hcCk7CgogIGZhY3RvcnkgUmVjb3JkRW52LnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBNYXA8U3RyaW5nLCBJbmRleGVkTWVtYmVyPiBfbWVtYmVyTWFwID0KICAgICAgICBzb3VyY2UucmVhZFN0cmluZ01hcCgoKSA9PiBzb3VyY2UucmVhZE1lbWJlcigpKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgUmVjb3JkRW52KF9tZW1iZXJNYXApOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSkNsYXNzRW52S2luZC5yZWNvcmQpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZVN0cmluZ01hcCgKICAgICAgICBfbWVtYmVyTWFwLCAoSW5kZXhlZE1lbWJlciBtZW1iZXIpID0+IHNpbmsud3JpdGVNZW1iZXIobWVtYmVyKSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoQ29uc3RydWN0b3JCb2R5KHZvaWQgZihDb25zdHJ1Y3RvckJvZHlFbnRpdHkgY29uc3RydWN0b3IpKSB7CiAgICAvLyBXZSBkbyBub3QgY3JlYXRlIGNvbnN0cnVjdG9yIGJvZGllcyBmb3IgY29udGFpbmVycy4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaENvbnN0cnVjdG9yKAogICAgICBJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwLCB2b2lkIGYoQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IpKSB7CiAgICAvLyBXZSBkbyBub3QgY3JlYXRlIGNvbnN0cnVjdG9ycyBmb3IgY29udGFpbmVycy4KICB9CgogIEBvdmVycmlkZQogIENvbnN0cnVjdG9yRW50aXR5IGxvb2t1cENvbnN0cnVjdG9yKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIFN0cmluZyBuYW1lKSB7CiAgICAvLyBXZSBkbyBub3QgY3JlYXRlIGNvbnN0cnVjdG9ycyBmb3IgY29udGFpbmVycy4KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoTWVtYmVyKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIHZvaWQgZihNZW1iZXJFbnRpdHkgbWVtYmVyKSkgewogICAgX21lbWJlck1hcC52YWx1ZXMuZm9yRWFjaChmKTsKICB9CgogIEBvdmVycmlkZQogIE1lbWJlckVudGl0eSBsb29rdXBNZW1iZXIoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIHNldHRlcjogZmFsc2V9KSB7CiAgICByZXR1cm4gX21lbWJlck1hcFtuYW1lXTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzVW5uYW1lZE1peGluQXBwbGljYXRpb24gPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU3VwZXJNaXhpbkFwcGxpY2F0aW9uID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBpci5DbGFzcyBnZXQgY2xzID0+IG51bGw7Cn0KCmNsYXNzIENsb3N1cmVDbGFzc0VudiBleHRlbmRzIFJlY29yZEVudiB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtDbG9zdXJlQ2xhc3NFbnZdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnY2xvc3VyZS1jbGFzcy1lbnYnOwoKICBDbG9zdXJlQ2xhc3NFbnYoTWFwPFN0cmluZywgTWVtYmVyRW50aXR5PiBtZW1iZXJNYXApIDogc3VwZXIobWVtYmVyTWFwKTsKCiAgZmFjdG9yeSBDbG9zdXJlQ2xhc3NFbnYucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIE1hcDxTdHJpbmcsIEluZGV4ZWRNZW1iZXI+IF9tZW1iZXJNYXAgPQogICAgICAgIHNvdXJjZS5yZWFkU3RyaW5nTWFwKCgpID0+IHNvdXJjZS5yZWFkTWVtYmVyKCkpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBDbG9zdXJlQ2xhc3NFbnYoX21lbWJlck1hcCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShKQ2xhc3NFbnZLaW5kLmNsb3N1cmUpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZVN0cmluZ01hcCgKICAgICAgICBfbWVtYmVyTWFwLCAoSW5kZXhlZE1lbWJlciBtZW1iZXIpID0+IHNpbmsud3JpdGVNZW1iZXIobWVtYmVyKSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyRW50aXR5IGxvb2t1cE1lbWJlcihJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwLCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgc2V0dGVyOiBmYWxzZX0pIHsKICAgIGlmIChzZXR0ZXIpIHsKICAgICAgLy8gQWxsIGNsb3N1cmUgZmllbGRzIGFyZSBmaW5hbC4KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gc3VwZXIubG9va3VwTWVtYmVyKGVsZW1lbnRNYXAsIG5hbWUsIHNldHRlcjogc2V0dGVyKTsKICB9Cn0KCi8vLyBFbnVtIHVzZWQgZm9yIGlkZW50aWZ5aW5nIFtKQ2xhc3NEYXRhXSBzdWJjbGFzc2VzIGluIHNlcmlhbGl6YXRpb24uCmVudW0gSkNsYXNzRGF0YUtpbmQgeyBub2RlLCBjbG9zdXJlLCByZWNvcmQgfQoKYWJzdHJhY3QgY2xhc3MgSkNsYXNzRGF0YSB7CiAgLy8vIERlc2VyaWFsaXplcyBhIFtKQ2xhc3NEYXRhXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IEpDbGFzc0RhdGEucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBKQ2xhc3NEYXRhS2luZCBraW5kID0gc291cmNlLnJlYWRFbnVtKEpDbGFzc0RhdGFLaW5kLnZhbHVlcyk7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBKQ2xhc3NEYXRhS2luZC5ub2RlOgogICAgICAgIHJldHVybiBuZXcgSkNsYXNzRGF0YUltcGwucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSkNsYXNzRGF0YUtpbmQuY2xvc3VyZToKICAgICAgICByZXR1cm4gbmV3IENsb3N1cmVDbGFzc0RhdGEucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSkNsYXNzRGF0YUtpbmQucmVjb3JkOgogICAgICAgIHJldHVybiBuZXcgUmVjb3JkQ2xhc3NEYXRhLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlVuZXhwZWN0ZWQgSkNsYXNzRGF0YUtpbmQgJGtpbmQiKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0pDbGFzc0RhdGFdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKTsKCiAgQ2xhc3NEZWZpbml0aW9uIGdldCBkZWZpbml0aW9uOwoKICBJbnRlcmZhY2VUeXBlIGdldCB0aGlzVHlwZTsKICBJbnRlcmZhY2VUeXBlIGdldCByYXdUeXBlOwogIEludGVyZmFjZVR5cGUgZ2V0IHN1cGVydHlwZTsKICBJbnRlcmZhY2VUeXBlIGdldCBtaXhlZEluVHlwZTsKICBMaXN0PEludGVyZmFjZVR5cGU+IGdldCBpbnRlcmZhY2VzOwogIE9yZGVyZWRUeXBlU2V0IGdldCBvcmRlcmVkVHlwZVNldDsKICBEYXJ0VHlwZSBnZXQgY2FsbFR5cGU7CgogIGJvb2wgZ2V0IGlzRW51bUNsYXNzOwogIGJvb2wgZ2V0IGlzTWl4aW5BcHBsaWNhdGlvbjsKfQoKY2xhc3MgSkNsYXNzRGF0YUltcGwgaW1wbGVtZW50cyBKQ2xhc3NEYXRhIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pDbGFzc0RhdGFJbXBsXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2NsYXNzLWRhdGEnOwoKICBmaW5hbCBpci5DbGFzcyBjbHM7CiAgQG92ZXJyaWRlCiAgZmluYWwgQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb247CiAgQG92ZXJyaWRlCiAgYm9vbCBpc01peGluQXBwbGljYXRpb247CiAgYm9vbCBpc0NhbGxUeXBlQ29tcHV0ZWQgPSBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSB0aGlzVHlwZTsKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIHJhd1R5cGU7CiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGU7CiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBtaXhlZEluVHlwZTsKICBAb3ZlcnJpZGUKICBMaXN0PEludGVyZmFjZVR5cGU+IGludGVyZmFjZXM7CiAgQG92ZXJyaWRlCiAgT3JkZXJlZFR5cGVTZXQgb3JkZXJlZFR5cGVTZXQ7CgogIEpDbGFzc0RhdGFJbXBsKHRoaXMuY2xzLCB0aGlzLmRlZmluaXRpb24pOwoKICBmYWN0b3J5IEpDbGFzc0RhdGFJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5DbGFzcyBjbHMgPSBzb3VyY2UucmVhZENsYXNzTm9kZSgpOwogICAgQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb24gPSBuZXcgQ2xhc3NEZWZpbml0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBKQ2xhc3NEYXRhSW1wbChjbHMsIGRlZmluaXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSkNsYXNzRGF0YUtpbmQubm9kZSk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlQ2xhc3NOb2RlKGNscyk7CiAgICBkZWZpbml0aW9uLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0VudW1DbGFzcyA9PiBjbHMgIT0gbnVsbCAmJiBjbHMuaXNFbnVtOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXQgY2FsbFR5cGUgPT4gbnVsbDsKfQoKLy8vIEVudW0gdXNlZCBmb3IgaWRlbnRpZnlpbmcgW0pNZW1iZXJEYXRhXSBzdWJjbGFzc2VzIGluIHNlcmlhbGl6YXRpb24uCmVudW0gSk1lbWJlckRhdGFLaW5kIHsKICBmdW5jdGlvbiwKICBmaWVsZCwKICBjb25zdHJ1Y3RvciwKICBjb25zdHJ1Y3RvckJvZHksCiAgc2lnbmF0dXJlLAogIGdlbmVyYXRvckJvZHksCiAgY2xvc3VyZUZ1bmN0aW9uLAogIGNsb3N1cmVGaWVsZCwKfQoKYWJzdHJhY3QgY2xhc3MgSk1lbWJlckRhdGEgewogIE1lbWJlckRlZmluaXRpb24gZ2V0IGRlZmluaXRpb247CgogIEludGVyZmFjZVR5cGUgZ2V0TWVtYmVyVGhpc1R5cGUoSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCk7CgogIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzIGdldCBjbGFzc1R5cGVWYXJpYWJsZUFjY2VzczsKCiAgU3RhdGljVHlwZUNhY2hlIGdldCBzdGF0aWNUeXBlczsKCiAgSk1lbWJlckRhdGEoKTsKCiAgLy8vIERlc2VyaWFsaXplcyBhIFtKTWVtYmVyRGF0YV0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBKTWVtYmVyRGF0YS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIEpNZW1iZXJEYXRhS2luZCBraW5kID0gc291cmNlLnJlYWRFbnVtKEpNZW1iZXJEYXRhS2luZC52YWx1ZXMpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgSk1lbWJlckRhdGFLaW5kLmZ1bmN0aW9uOgogICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb25EYXRhSW1wbC5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBKTWVtYmVyRGF0YUtpbmQuZmllbGQ6CiAgICAgICAgcmV0dXJuIG5ldyBKRmllbGREYXRhSW1wbC5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBKTWVtYmVyRGF0YUtpbmQuY29uc3RydWN0b3I6CiAgICAgICAgcmV0dXJuIG5ldyBKQ29uc3RydWN0b3JEYXRhSW1wbC5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBKTWVtYmVyRGF0YUtpbmQuY29uc3RydWN0b3JCb2R5OgogICAgICAgIHJldHVybiBuZXcgQ29uc3RydWN0b3JCb2R5RGF0YUltcGwucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSk1lbWJlckRhdGFLaW5kLnNpZ25hdHVyZToKICAgICAgICByZXR1cm4gbmV3IFNpZ25hdHVyZUZ1bmN0aW9uRGF0YS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBKTWVtYmVyRGF0YUtpbmQuZ2VuZXJhdG9yQm9keToKICAgICAgICByZXR1cm4gbmV3IEdlbmVyYXRvckJvZHlGdW5jdGlvbkRhdGEucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSk1lbWJlckRhdGFLaW5kLmNsb3N1cmVGdW5jdGlvbjoKICAgICAgICByZXR1cm4gbmV3IENsb3N1cmVGdW5jdGlvbkRhdGEucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSk1lbWJlckRhdGFLaW5kLmNsb3N1cmVGaWVsZDoKICAgICAgICByZXR1cm4gbmV3IENsb3N1cmVGaWVsZERhdGEucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBKTWVtYmVyRGF0YUtpbmQgJGtpbmQiKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0pNZW1iZXJEYXRhXSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luayk7Cn0KCmFic3RyYWN0IGNsYXNzIEpNZW1iZXJEYXRhSW1wbCBpbXBsZW1lbnRzIEpNZW1iZXJEYXRhIHsKICBmaW5hbCBpci5NZW1iZXIgbm9kZTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBTdGF0aWNUeXBlQ2FjaGUgc3RhdGljVHlwZXM7CgogIEpNZW1iZXJEYXRhSW1wbCh0aGlzLm5vZGUsIHRoaXMuZGVmaW5pdGlvbiwgdGhpcy5zdGF0aWNUeXBlcyk7CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0TWVtYmVyVGhpc1R5cGUoSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IGVsZW1lbnRNYXAuZ2V0TWVtYmVyKG5vZGUpOwogICAgQ2xhc3NFbnRpdHkgY2xzID0gbWVtYmVyLmVuY2xvc2luZ0NsYXNzOwogICAgaWYgKGNscyAhPSBudWxsKSB7CiAgICAgIHJldHVybiBlbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShjbHMpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBGdW5jdGlvbkRhdGEgaW1wbGVtZW50cyBKTWVtYmVyRGF0YSB7CiAgRnVuY3Rpb25UeXBlIGdldEZ1bmN0aW9uVHlwZShJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwKTsKCiAgTGlzdDxUeXBlVmFyaWFibGVUeXBlPiBnZXRGdW5jdGlvblR5cGVWYXJpYWJsZXMoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCk7CgogIHZvaWQgZm9yRWFjaFBhcmFtZXRlcigKICAgICAgSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwKICAgICAgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAgdm9pZCBmKERhcnRUeXBlIHR5cGUsIFN0cmluZyBuYW1lLCBDb25zdGFudFZhbHVlIGRlZmF1bHRWYWx1ZSksCiAgICAgIHtib29sIGlzTmF0aXZlOiBmYWxzZX0pOwp9CgphYnN0cmFjdCBjbGFzcyBGdW5jdGlvbkRhdGFUeXBlVmFyaWFibGVzTWl4aW4gaW1wbGVtZW50cyBGdW5jdGlvbkRhdGEgewogIGlyLkZ1bmN0aW9uTm9kZSBnZXQgZnVuY3Rpb25Ob2RlOwogIExpc3Q8VHlwZVZhcmlhYmxlVHlwZT4gX3R5cGVWYXJpYWJsZXM7CgogIEBvdmVycmlkZQogIExpc3Q8VHlwZVZhcmlhYmxlVHlwZT4gZ2V0RnVuY3Rpb25UeXBlVmFyaWFibGVzKAogICAgICBjb3ZhcmlhbnQgSnNLZXJuZWxUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgaWYgKF90eXBlVmFyaWFibGVzID09IG51bGwpIHsKICAgICAgaWYgKGZ1bmN0aW9uTm9kZS50eXBlUGFyYW1ldGVycy5pc0VtcHR5KSB7CiAgICAgICAgX3R5cGVWYXJpYWJsZXMgPSBjb25zdCA8VHlwZVZhcmlhYmxlVHlwZT5bXTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpci5UcmVlTm9kZSBwYXJlbnQgPSBmdW5jdGlvbk5vZGUucGFyZW50OwogICAgICAgIGlmIChwYXJlbnQgaXMgaXIuQ29uc3RydWN0b3IgfHwKICAgICAgICAgICAgKHBhcmVudCBpcyBpci5Qcm9jZWR1cmUgJiYKICAgICAgICAgICAgICAgIHBhcmVudC5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuRmFjdG9yeSkpIHsKICAgICAgICAgIF90eXBlVmFyaWFibGVzID0gY29uc3QgPFR5cGVWYXJpYWJsZVR5cGU+W107CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF90eXBlVmFyaWFibGVzID0gZnVuY3Rpb25Ob2RlLnR5cGVQYXJhbWV0ZXJzCiAgICAgICAgICAgICAgLm1hcDxUeXBlVmFyaWFibGVUeXBlPigoaXIuVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyKSB7CiAgICAgICAgICAgIHJldHVybiBlbGVtZW50TWFwCiAgICAgICAgICAgICAgICAuZ2V0RGFydFR5cGUobmV3IGlyLlR5cGVQYXJhbWV0ZXJUeXBlKHR5cGVQYXJhbWV0ZXIpKTsKICAgICAgICAgIH0pLnRvTGlzdCgpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIF90eXBlVmFyaWFibGVzOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgRnVuY3Rpb25EYXRhRm9yRWFjaFBhcmFtZXRlck1peGluIGltcGxlbWVudHMgRnVuY3Rpb25EYXRhIHsKICBpci5GdW5jdGlvbk5vZGUgZ2V0IGZ1bmN0aW9uTm9kZTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoUGFyYW1ldGVyKAogICAgICBKc1RvRWxlbWVudE1hcCBlbGVtZW50TWFwLAogICAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlLAogICAgICB2b2lkIGYoRGFydFR5cGUgdHlwZSwgU3RyaW5nIG5hbWUsIENvbnN0YW50VmFsdWUgZGVmYXVsdFZhbHVlKSwKICAgICAge2Jvb2wgaXNOYXRpdmU6IGZhbHNlfSkgewogICAgdm9pZCBoYW5kbGVQYXJhbWV0ZXIoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlLCB7Ym9vbCBpc09wdGlvbmFsOiB0cnVlfSkgewogICAgICBEYXJ0VHlwZSB0eXBlID0gZWxlbWVudE1hcC5nZXREYXJ0VHlwZShub2RlLnR5cGUpOwogICAgICBTdHJpbmcgbmFtZSA9IG5vZGUubmFtZTsKICAgICAgQ29uc3RhbnRWYWx1ZSBkZWZhdWx0VmFsdWU7CiAgICAgIGlmIChpc09wdGlvbmFsKSB7CiAgICAgICAgaWYgKG5vZGUuaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICAgICAgZGVmYXVsdFZhbHVlID0gZWxlbWVudE1hcC5nZXRDb25zdGFudFZhbHVlKG5vZGUuaW5pdGlhbGl6ZXIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBuZXcgTnVsbENvbnN0YW50VmFsdWUoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZih0eXBlLCBuYW1lLCBkZWZhdWx0VmFsdWUpOwogICAgfQoKICAgIGZvckVhY2hPcmRlcmVkUGFyYW1ldGVyQnlGdW5jdGlvbk5vZGUoZnVuY3Rpb25Ob2RlLCBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgICAgKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyLCB7Ym9vbCBpc09wdGlvbmFsLCBib29sIGlzRWxpZGVkfSkgewogICAgICBpZiAoIWlzRWxpZGVkKSB7CiAgICAgICAgaGFuZGxlUGFyYW1ldGVyKHBhcmFtZXRlciwgaXNPcHRpb25hbDogaXNPcHRpb25hbCk7CiAgICAgIH0KICAgIH0sIHVzZU5hdGl2ZU9yZGVyaW5nOiBpc05hdGl2ZSk7CiAgfQp9CgpjbGFzcyBGdW5jdGlvbkRhdGFJbXBsIGV4dGVuZHMgSk1lbWJlckRhdGFJbXBsCiAgICB3aXRoIEZ1bmN0aW9uRGF0YVR5cGVWYXJpYWJsZXNNaXhpbiwgRnVuY3Rpb25EYXRhRm9yRWFjaFBhcmFtZXRlck1peGluCiAgICBpbXBsZW1lbnRzIEZ1bmN0aW9uRGF0YSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtGdW5jdGlvbkRhdGFJbXBsXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2Z1bmN0aW9uLWRhdGEnOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb25Ob2RlOwogIEZ1bmN0aW9uVHlwZSBfdHlwZTsKCiAgRnVuY3Rpb25EYXRhSW1wbChpci5NZW1iZXIgbm9kZSwgdGhpcy5mdW5jdGlvbk5vZGUsCiAgICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RhdGljVHlwZUNhY2hlIHN0YXRpY1R5cGVzKQogICAgICA6IHN1cGVyKG5vZGUsIGRlZmluaXRpb24sIHN0YXRpY1R5cGVzKTsKCiAgZmFjdG9yeSBGdW5jdGlvbkRhdGFJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5NZW1iZXIgbm9kZSA9IHNvdXJjZS5yZWFkTWVtYmVyTm9kZSgpOwogICAgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uTm9kZTsKICAgIGlmIChub2RlIGlzIGlyLlByb2NlZHVyZSkgewogICAgICBmdW5jdGlvbk5vZGUgPSBub2RlLmZ1bmN0aW9uOwogICAgfSBlbHNlIGlmIChub2RlIGlzIGlyLkNvbnN0cnVjdG9yKSB7CiAgICAgIGZ1bmN0aW9uTm9kZSA9IG5vZGUuZnVuY3Rpb247CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAgICJVbmV4cGVjdGVkIG1lbWJlciBub2RlICRub2RlICgke25vZGUucnVudGltZVR5cGV9KS4iKTsKICAgIH0KICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9CiAgICAgICAgbmV3IE1lbWJlckRlZmluaXRpb24ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBTdGF0aWNUeXBlQ2FjaGUgc3RhdGljVHlwZXMgPQogICAgICAgIG5ldyBTdGF0aWNUeXBlQ2FjaGUucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgbm9kZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uRGF0YUltcGwobm9kZSwgZnVuY3Rpb25Ob2RlLCBkZWZpbml0aW9uLCBzdGF0aWNUeXBlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShKTWVtYmVyRGF0YUtpbmQuZnVuY3Rpb24pOwogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZU1lbWJlck5vZGUobm9kZSk7CiAgICBkZWZpbml0aW9uLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHN0YXRpY1R5cGVzLndyaXRlVG9EYXRhU2luayhzaW5rLCBub2RlKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBGdW5jdGlvblR5cGUgZ2V0RnVuY3Rpb25UeXBlKGNvdmFyaWFudCBKc0tlcm5lbFRvRWxlbWVudE1hcCBlbGVtZW50TWFwKSB7CiAgICByZXR1cm4gX3R5cGUgPz89IGVsZW1lbnRNYXAuZ2V0RnVuY3Rpb25UeXBlKGZ1bmN0aW9uTm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyBnZXQgY2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgewogICAgaWYgKG5vZGUuaXNJbnN0YW5jZU1lbWJlcikgcmV0dXJuIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLnByb3BlcnR5OwogICAgcmV0dXJuIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLm5vbmU7CiAgfQp9CgpjbGFzcyBTaWduYXR1cmVGdW5jdGlvbkRhdGEgaW1wbGVtZW50cyBGdW5jdGlvbkRhdGEgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbU2lnbmF0dXJlRnVuY3Rpb25EYXRhXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ3NpZ25hdHVyZS1mdW5jdGlvbi1kYXRhJzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uOwogIGZpbmFsIEludGVyZmFjZVR5cGUgbWVtYmVyVGhpc1R5cGU7CiAgQG92ZXJyaWRlCiAgZmluYWwgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgY2xhc3NUeXBlVmFyaWFibGVBY2Nlc3M7CiAgZmluYWwgTGlzdDxpci5UeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVyczsKCiAgU2lnbmF0dXJlRnVuY3Rpb25EYXRhKHRoaXMuZGVmaW5pdGlvbiwgdGhpcy5tZW1iZXJUaGlzVHlwZSwKICAgICAgdGhpcy50eXBlUGFyYW1ldGVycywgdGhpcy5jbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcyk7CgogIGZhY3RvcnkgU2lnbmF0dXJlRnVuY3Rpb25EYXRhLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBNZW1iZXJEZWZpbml0aW9uIGRlZmluaXRpb24gPQogICAgICAgIG5ldyBNZW1iZXJEZWZpbml0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgSW50ZXJmYWNlVHlwZSBtZW1iZXJUaGlzVHlwZSA9IHNvdXJjZS5yZWFkRGFydFR5cGUoYWxsb3dOdWxsOiB0cnVlKTsKICAgIExpc3Q8aXIuVHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMgPSBzb3VyY2UucmVhZFR5cGVQYXJhbWV0ZXJOb2RlcygpOwogICAgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgY2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgPQogICAgICAgIHNvdXJjZS5yZWFkRW51bShDbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcy52YWx1ZXMpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBTaWduYXR1cmVGdW5jdGlvbkRhdGEoCiAgICAgICAgZGVmaW5pdGlvbiwgbWVtYmVyVGhpc1R5cGUsIHR5cGVQYXJhbWV0ZXJzLCBjbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShKTWVtYmVyRGF0YUtpbmQuc2lnbmF0dXJlKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIGRlZmluaXRpb24ud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc2luay53cml0ZURhcnRUeXBlKG1lbWJlclRoaXNUeXBlLCBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZVR5cGVQYXJhbWV0ZXJOb2Rlcyh0eXBlUGFyYW1ldGVycyk7CiAgICBzaW5rLndyaXRlRW51bShjbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcyk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RhdGljVHlwZUNhY2hlIGdldCBzdGF0aWNUeXBlcyA9PiBjb25zdCBTdGF0aWNUeXBlQ2FjaGUoKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25UeXBlIGdldEZ1bmN0aW9uVHlwZShjb3ZhcmlhbnQgSnNLZXJuZWxUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlNpZ25hdHVyZUZ1bmN0aW9uRGF0YS5nZXRGdW5jdGlvblR5cGUiKTsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8VHlwZVZhcmlhYmxlVHlwZT4gZ2V0RnVuY3Rpb25UeXBlVmFyaWFibGVzKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApIHsKICAgIHJldHVybiB0eXBlUGFyYW1ldGVycwogICAgICAgIC5tYXA8VHlwZVZhcmlhYmxlVHlwZT4oKGlyLlR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlcikgewogICAgICByZXR1cm4gZWxlbWVudE1hcC5nZXREYXJ0VHlwZShuZXcgaXIuVHlwZVBhcmFtZXRlclR5cGUodHlwZVBhcmFtZXRlcikpOwogICAgfSkudG9MaXN0KCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hQYXJhbWV0ZXIoCiAgICAgIEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsCiAgICAgIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgIHZvaWQgZihEYXJ0VHlwZSB0eXBlLCBTdHJpbmcgbmFtZSwgQ29uc3RhbnRWYWx1ZSBkZWZhdWx0VmFsdWUpLAogICAgICB7Ym9vbCBpc05hdGl2ZTogZmFsc2V9KSB7CiAgICB0aHJvdyBuZXcgVW5pbXBsZW1lbnRlZEVycm9yKCdTaWduYXR1cmVEYXRhLmZvckVhY2hQYXJhbWV0ZXInKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0TWVtYmVyVGhpc1R5cGUoSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgcmV0dXJuIG1lbWJlclRoaXNUeXBlOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgRGVsZWdhdGVkRnVuY3Rpb25EYXRhIGltcGxlbWVudHMgRnVuY3Rpb25EYXRhIHsKICBmaW5hbCBGdW5jdGlvbkRhdGEgYmFzZURhdGE7CgogIERlbGVnYXRlZEZ1bmN0aW9uRGF0YSh0aGlzLmJhc2VEYXRhKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25UeXBlIGdldEZ1bmN0aW9uVHlwZShjb3ZhcmlhbnQgSnNLZXJuZWxUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgcmV0dXJuIGJhc2VEYXRhLmdldEZ1bmN0aW9uVHlwZShlbGVtZW50TWFwKTsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8VHlwZVZhcmlhYmxlVHlwZT4gZ2V0RnVuY3Rpb25UeXBlVmFyaWFibGVzKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApIHsKICAgIHJldHVybiBiYXNlRGF0YS5nZXRGdW5jdGlvblR5cGVWYXJpYWJsZXMoZWxlbWVudE1hcCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hQYXJhbWV0ZXIoCiAgICAgIEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsCiAgICAgIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgIHZvaWQgZihEYXJ0VHlwZSB0eXBlLCBTdHJpbmcgbmFtZSwgQ29uc3RhbnRWYWx1ZSBkZWZhdWx0VmFsdWUpLAogICAgICB7Ym9vbCBpc05hdGl2ZTogZmFsc2V9KSB7CiAgICByZXR1cm4gYmFzZURhdGEuZm9yRWFjaFBhcmFtZXRlcihlbGVtZW50TWFwLCBwYXJhbWV0ZXJTdHJ1Y3R1cmUsIGYsCiAgICAgICAgaXNOYXRpdmU6IGlzTmF0aXZlKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0TWVtYmVyVGhpc1R5cGUoSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgcmV0dXJuIGJhc2VEYXRhLmdldE1lbWJlclRoaXNUeXBlKGVsZW1lbnRNYXApOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgZ2V0IGNsYXNzVHlwZVZhcmlhYmxlQWNjZXNzID0+CiAgICAgIGJhc2VEYXRhLmNsYXNzVHlwZVZhcmlhYmxlQWNjZXNzOwp9CgpjbGFzcyBHZW5lcmF0b3JCb2R5RnVuY3Rpb25EYXRhIGV4dGVuZHMgRGVsZWdhdGVkRnVuY3Rpb25EYXRhIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0dlbmVyYXRvckJvZHlGdW5jdGlvbkRhdGFdIG9iamVjdHMgaW4KICAvLy8gYSBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnZ2VuZXJhdG9yLWJvZHktZGF0YSc7CgogIEBvdmVycmlkZQogIGZpbmFsIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbjsKCiAgR2VuZXJhdG9yQm9keUZ1bmN0aW9uRGF0YShGdW5jdGlvbkRhdGEgYmFzZURhdGEsIHRoaXMuZGVmaW5pdGlvbikKICAgICAgOiBzdXBlcihiYXNlRGF0YSk7CgogIGZhY3RvcnkgR2VuZXJhdG9yQm9keUZ1bmN0aW9uRGF0YS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU2hhcmUgdGhlIG9yaWdpbmFsIGJhc2UgZGF0YSBvbiBkZXNlcmlhbGl6YXRpb24uCiAgICBGdW5jdGlvbkRhdGEgYmFzZURhdGEgPSBuZXcgSk1lbWJlckRhdGEucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBNZW1iZXJEZWZpbml0aW9uIGRlZmluaXRpb24gPQogICAgICAgIG5ldyBNZW1iZXJEZWZpbml0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBHZW5lcmF0b3JCb2R5RnVuY3Rpb25EYXRhKGJhc2VEYXRhLCBkZWZpbml0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKEpNZW1iZXJEYXRhS2luZC5nZW5lcmF0b3JCb2R5KTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIGJhc2VEYXRhLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIGRlZmluaXRpb24ud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIFN0YXRpY1R5cGVDYWNoZSBnZXQgc3RhdGljVHlwZXMgPT4gY29uc3QgU3RhdGljVHlwZUNhY2hlKCk7Cn0KCmFic3RyYWN0IGNsYXNzIEpDb25zdHJ1Y3RvckRhdGEgZXh0ZW5kcyBGdW5jdGlvbkRhdGEgewogIENvbnN0YW50Q29uc3RydWN0b3IgZ2V0Q29uc3RydWN0b3JDb25zdGFudCgKICAgICAgSnNLZXJuZWxUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IpOwp9CgpjbGFzcyBKQ29uc3RydWN0b3JEYXRhSW1wbCBleHRlbmRzIEZ1bmN0aW9uRGF0YUltcGwKICAgIGltcGxlbWVudHMgSkNvbnN0cnVjdG9yRGF0YSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtKQ29uc3RydWN0b3JEYXRhSW1wbF0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdjb25zdHJ1Y3Rvci1kYXRhJzsKCiAgQ29uc3RhbnRDb25zdHJ1Y3RvciBfY29uc3RhbnRDb25zdHJ1Y3RvcjsKICBKQ29uc3RydWN0b3JCb2R5IGNvbnN0cnVjdG9yQm9keTsKCiAgSkNvbnN0cnVjdG9yRGF0YUltcGwoaXIuTWVtYmVyIG5vZGUsIGlyLkZ1bmN0aW9uTm9kZSBmdW5jdGlvbk5vZGUsCiAgICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RhdGljVHlwZUNhY2hlIHN0YXRpY1R5cGVzKQogICAgICA6IHN1cGVyKG5vZGUsIGZ1bmN0aW9uTm9kZSwgZGVmaW5pdGlvbiwgc3RhdGljVHlwZXMpOwoKICBmYWN0b3J5IEpDb25zdHJ1Y3RvckRhdGFJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5NZW1iZXIgbm9kZSA9IHNvdXJjZS5yZWFkTWVtYmVyTm9kZSgpOwogICAgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uTm9kZTsKICAgIGlmIChub2RlIGlzIGlyLlByb2NlZHVyZSkgewogICAgICBmdW5jdGlvbk5vZGUgPSBub2RlLmZ1bmN0aW9uOwogICAgfSBlbHNlIGlmIChub2RlIGlzIGlyLkNvbnN0cnVjdG9yKSB7CiAgICAgIGZ1bmN0aW9uTm9kZSA9IG5vZGUuZnVuY3Rpb247CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAgICJVbmV4cGVjdGVkIG1lbWJlciBub2RlICRub2RlICgke25vZGUucnVudGltZVR5cGV9KS4iKTsKICAgIH0KICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9CiAgICAgICAgbmV3IE1lbWJlckRlZmluaXRpb24ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBTdGF0aWNUeXBlQ2FjaGUgc3RhdGljVHlwZXMgPQogICAgICAgIG5ldyBTdGF0aWNUeXBlQ2FjaGUucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgbm9kZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpDb25zdHJ1Y3RvckRhdGFJbXBsKAogICAgICAgIG5vZGUsIGZ1bmN0aW9uTm9kZSwgZGVmaW5pdGlvbiwgc3RhdGljVHlwZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSk1lbWJlckRhdGFLaW5kLmNvbnN0cnVjdG9yKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVNZW1iZXJOb2RlKG5vZGUpOwogICAgZGVmaW5pdGlvbi53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBhc3NlcnQoY29uc3RydWN0b3JCb2R5ID09IG51bGwpOwogICAgc3RhdGljVHlwZXMud3JpdGVUb0RhdGFTaW5rKHNpbmssIG5vZGUpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50Q29uc3RydWN0b3IgZ2V0Q29uc3RydWN0b3JDb25zdGFudCgKICAgICAgSnNLZXJuZWxUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IpIHsKICAgIGlmIChfY29uc3RhbnRDb25zdHJ1Y3RvciA9PSBudWxsKSB7CiAgICAgIGlmIChub2RlIGlzIGlyLkNvbnN0cnVjdG9yICYmIGNvbnN0cnVjdG9yLmlzQ29uc3QpIHsKICAgICAgICBfY29uc3RhbnRDb25zdHJ1Y3RvciA9CiAgICAgICAgICAgIG5ldyBDb25zdGFudGlmaWVyKGVsZW1lbnRNYXApLmNvbXB1dGVDb25zdGFudENvbnN0cnVjdG9yKG5vZGUpOwogICAgICB9IGVsc2UgewogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBjb25zdHJ1Y3RvciwKICAgICAgICAgICAgIlVuZXhwZWN0ZWQgY29uc3RydWN0b3IgJGNvbnN0cnVjdG9yIGluICIKICAgICAgICAgICAgIkNvbnN0cnVjdG9yRGF0YUltcGwuX2dldENvbnN0cnVjdG9yQ29uc3RhbnQiKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIF9jb25zdGFudENvbnN0cnVjdG9yOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgZ2V0IGNsYXNzVHlwZVZhcmlhYmxlQWNjZXNzID0+CiAgICAgIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLnBhcmFtZXRlcjsKfQoKY2xhc3MgQ29uc3RydWN0b3JCb2R5RGF0YUltcGwgZXh0ZW5kcyBGdW5jdGlvbkRhdGFJbXBsIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0NvbnN0cnVjdG9yQm9keURhdGFJbXBsXSBvYmplY3RzIGluCiAgLy8vIGEgZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2NvbnN0cnVjdG9yLWJvZHktZGF0YSc7CgogIENvbnN0cnVjdG9yQm9keURhdGFJbXBsKGlyLk1lbWJlciBub2RlLCBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb25Ob2RlLAogICAgICBNZW1iZXJEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0YXRpY1R5cGVDYWNoZSBzdGF0aWNUeXBlcykKICAgICAgOiBzdXBlcihub2RlLCBmdW5jdGlvbk5vZGUsIGRlZmluaXRpb24sIHN0YXRpY1R5cGVzKTsKCiAgZmFjdG9yeSBDb25zdHJ1Y3RvckJvZHlEYXRhSW1wbC5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuTWVtYmVyIG5vZGUgPSBzb3VyY2UucmVhZE1lbWJlck5vZGUoKTsKICAgIGlyLkZ1bmN0aW9uTm9kZSBmdW5jdGlvbk5vZGU7CiAgICBpZiAobm9kZSBpcyBpci5Qcm9jZWR1cmUpIHsKICAgICAgZnVuY3Rpb25Ob2RlID0gbm9kZS5mdW5jdGlvbjsKICAgIH0gZWxzZSBpZiAobm9kZSBpcyBpci5Db25zdHJ1Y3RvcikgewogICAgICBmdW5jdGlvbk5vZGUgPSBub2RlLmZ1bmN0aW9uOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAiVW5leHBlY3RlZCBtZW1iZXIgbm9kZSAkbm9kZSAoJHtub2RlLnJ1bnRpbWVUeXBlfSkuIik7CiAgICB9CiAgICBNZW1iZXJEZWZpbml0aW9uIGRlZmluaXRpb24gPQogICAgICAgIG5ldyBNZW1iZXJEZWZpbml0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgU3RhdGljVHlwZUNhY2hlIHN0YXRpY1R5cGVzID0KICAgICAgICBuZXcgU3RhdGljVHlwZUNhY2hlLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIG5vZGUpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RvckJvZHlEYXRhSW1wbCgKICAgICAgICBub2RlLCBmdW5jdGlvbk5vZGUsIGRlZmluaXRpb24sIHN0YXRpY1R5cGVzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKEpNZW1iZXJEYXRhS2luZC5jb25zdHJ1Y3RvckJvZHkpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZU1lbWJlck5vZGUobm9kZSk7CiAgICBkZWZpbml0aW9uLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHN0YXRpY1R5cGVzLndyaXRlVG9EYXRhU2luayhzaW5rLCBub2RlKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIsc3JhKTogQ29uc3RydWN0b3IgYm9kaWVzIHNob3VsZCBhY2Nlc3MgdHlwZSB2YXJpYWJsZXMKICAvLyB0aHJvdWdoIGB0aGlzYC4KICBAb3ZlcnJpZGUKICBDbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyBnZXQgY2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgPT4KICAgICAgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MucGFyYW1ldGVyOwp9CgphYnN0cmFjdCBjbGFzcyBKRmllbGREYXRhIGV4dGVuZHMgSk1lbWJlckRhdGEgewogIERhcnRUeXBlIGdldEZpZWxkVHlwZShJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwKTsKCiAgQ29uc3RhbnRFeHByZXNzaW9uIGdldEZpZWxkQ29uc3RhbnRFeHByZXNzaW9uKAogICAgICBKc0tlcm5lbFRvRWxlbWVudE1hcCBlbGVtZW50TWFwKTsKfQoKY2xhc3MgSkZpZWxkRGF0YUltcGwgZXh0ZW5kcyBKTWVtYmVyRGF0YUltcGwgaW1wbGVtZW50cyBKRmllbGREYXRhIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pGaWVsZERhdGFJbXBsXSBvYmplY3RzIGluCiAgLy8vIGEgZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2ZpZWxkLWRhdGEnOwoKICBEYXJ0VHlwZSBfdHlwZTsKICBDb25zdGFudEV4cHJlc3Npb24gX2NvbnN0YW50RXhwcmVzc2lvbjsKCiAgSkZpZWxkRGF0YUltcGwoCiAgICAgIGlyLkZpZWxkIG5vZGUsIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RhdGljVHlwZUNhY2hlIHN0YXRpY1R5cGVzKQogICAgICA6IHN1cGVyKG5vZGUsIGRlZmluaXRpb24sIHN0YXRpY1R5cGVzKTsKCiAgZmFjdG9yeSBKRmllbGREYXRhSW1wbC5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuTWVtYmVyIG5vZGUgPSBzb3VyY2UucmVhZE1lbWJlck5vZGUoKTsKICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9CiAgICAgICAgbmV3IE1lbWJlckRlZmluaXRpb24ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBTdGF0aWNUeXBlQ2FjaGUgc3RhdGljVHlwZXMgPQogICAgICAgIG5ldyBTdGF0aWNUeXBlQ2FjaGUucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgbm9kZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpGaWVsZERhdGFJbXBsKG5vZGUsIGRlZmluaXRpb24sIHN0YXRpY1R5cGVzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKEpNZW1iZXJEYXRhS2luZC5maWVsZCk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTWVtYmVyTm9kZShub2RlKTsKICAgIGRlZmluaXRpb24ud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc3RhdGljVHlwZXMud3JpdGVUb0RhdGFTaW5rKHNpbmssIG5vZGUpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIGlyLkZpZWxkIGdldCBub2RlID0+IHN1cGVyLm5vZGU7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldEZpZWxkVHlwZShjb3ZhcmlhbnQgSnNLZXJuZWxUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgcmV0dXJuIF90eXBlID8/PSBlbGVtZW50TWFwLmdldERhcnRUeXBlKG5vZGUudHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gZ2V0RmllbGRDb25zdGFudEV4cHJlc3Npb24oCiAgICAgIEpzS2VybmVsVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApIHsKICAgIGlmIChfY29uc3RhbnRFeHByZXNzaW9uID09IG51bGwpIHsKICAgICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICAgIF9jb25zdGFudEV4cHJlc3Npb24gPQogICAgICAgICAgICBuZXcgQ29uc3RhbnRpZmllcihlbGVtZW50TWFwKS52aXNpdChub2RlLmluaXRpYWxpemVyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZGVmaW5pdGlvbi5sb2NhdGlvbiwKICAgICAgICAgICAgIlVuZXhwZWN0ZWQgZmllbGQgJHtkZWZpbml0aW9ufSBpbiAiCiAgICAgICAgICAgICJGaWVsZERhdGFJbXBsLmdldEZpZWxkQ29uc3RhbnQiKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIF9jb25zdGFudEV4cHJlc3Npb247CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyBnZXQgY2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgewogICAgaWYgKG5vZGUuaXNJbnN0YW5jZU1lbWJlcikgcmV0dXJuIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLmluc3RhbmNlRmllbGQ7CiAgICByZXR1cm4gQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3Mubm9uZTsKICB9Cn0KCmNsYXNzIEpUeXBlZGVmRGF0YSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtKVHlwZWRlZkRhdGFdIG9iamVjdHMgaW4KICAvLy8gYSBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAndHlwZWRlZi1kYXRhJzsKCiAgZmluYWwgaXIuVHlwZWRlZiBub2RlOwogIGZpbmFsIFR5cGVkZWZUeXBlIHJhd1R5cGU7CgogIEpUeXBlZGVmRGF0YSh0aGlzLm5vZGUsIHRoaXMucmF3VHlwZSk7CgogIGZhY3RvcnkgSlR5cGVkZWZEYXRhLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5UeXBlZGVmIG5vZGUgPSBzb3VyY2UucmVhZFR5cGVkZWZOb2RlKCk7CiAgICBUeXBlZGVmVHlwZSByYXdUeXBlID0gc291cmNlLnJlYWREYXJ0VHlwZSgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBKVHlwZWRlZkRhdGEobm9kZSwgcmF3VHlwZSk7CiAgfQoKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlVHlwZWRlZk5vZGUobm9kZSk7CiAgICBzaW5rLndyaXRlRGFydFR5cGUocmF3VHlwZSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KfQoKY2xhc3MgSlR5cGVWYXJpYWJsZURhdGEgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSlR5cGVWYXJpYWJsZURhdGFdIG9iamVjdHMgaW4KICAvLy8gYSBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAndHlwZS12YXJpYWJsZS1kYXRhJzsKCiAgZmluYWwgaXIuVHlwZVBhcmFtZXRlciBub2RlOwogIERhcnRUeXBlIF9ib3VuZDsKICBEYXJ0VHlwZSBfZGVmYXVsdFR5cGU7CgogIEpUeXBlVmFyaWFibGVEYXRhKHRoaXMubm9kZSk7CgogIGZhY3RvcnkgSlR5cGVWYXJpYWJsZURhdGEucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLlR5cGVQYXJhbWV0ZXIgbm9kZSA9IHNvdXJjZS5yZWFkVHlwZVBhcmFtZXRlck5vZGUoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgSlR5cGVWYXJpYWJsZURhdGEobm9kZSk7CiAgfQoKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlVHlwZVBhcmFtZXRlck5vZGUobm9kZSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgRGFydFR5cGUgZ2V0Qm91bmQoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgcmV0dXJuIF9ib3VuZCA/Pz0gZWxlbWVudE1hcC5nZXREYXJ0VHlwZShub2RlLmJvdW5kKTsKICB9CgogIERhcnRUeXBlIGdldERlZmF1bHRUeXBlKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApIHsKICAgIHJldHVybiBfZGVmYXVsdFR5cGUgPz89IGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUobm9kZS5kZWZhdWx0VHlwZSk7CiAgfQp9CoRJAE5OPAEeASgBGSkoIyQjISEnHiciLiMXGyAYATgULDABIQFCPQE3ASouBAFJJx0EATY1IwQBOxMfBAIBQBRFHSsBHC8rKwE/ATk+FzMnNSc1FTsEAS8oFSQ7OxMEATggBAFAJxwEATAtIQQBQT45BAExIjIkEw82CAYEAgEVRh0sARxQQzkBLAE/FzMoNRsULiYzNwgGFS8EASgVJBsYDSUVQC0eICQKEQgGEwQCAUctAR0bNzxAFB89Ij8hOQZDBAEtJwE1FAE5JgFQDSQBUEsQRB0BKk4BSk8BLxtJAUsNSgIBMitDHSkBDBYwKys7DCYBMTQBQUUBQBcrLDUnNSc1ODYVUSIEAQwoKBUeQDs7JS0TBAEMPgEMRB5FQQQBDE8qJwgEAQxQM1AEAQwbSj0xCAQBQzgvBAEMSyYEAgEnQx0qAS8BHgE8Fyw5FSYEAQwoKhUZSRMEAQxLOwQBDBtKNQQBDFA1EQQBDE8iBAEMRB4dBAEMLwEMLQEMHAIBKkkdMQFLAUIXLDkVLAQBDCgrFRlJEwQBDEQeEicTBkEEAgFILgEcOD1CFCA+I0AiPwZDBAEuJwEiAR4dHyEmJRkBGB8CAS1IHSoBFgwkDBsjAQwaDBkMGwwdDCIMIQEtAUEXK1EVMAQBDCgpFR4mEwQBDDUBDCECAUkXDAkPEw0RExACAR0jAT4BNwEjAREBOT5EFCVAIj4oRCxHJkUqSSxDKUAGRAQBLycCATgYAQwlAQwlAUEBDD82LRc9BhEEAgE1OwFOARkhLUYfAgFIJCkBDDMzIjE1DzIoJzw3ETdIHkcXCggGGwQCAUskAQwZIS1GIFE5HyIYKEgRMgoIIwYBTE8XPAglBAIBL0seSh0tAQwmFgE2QC4BQxcuIiAkKSQNIkIGIjkiPhVOBAEMKC4VICYtEwQBDEw/BAEMOEgpBAIBNk8dNwEMJSYMOS8BPjoBSBciOUlNNjkVJk4EAQwoLxUmOTItEwQBDD4BDExJBAEMTxpCThEEAQwZIS1GIEQEAQw/GwQCAT8fASgBDEwxBAEMTzoEAQwZIS1GIEgdBAEMPzMEAQw5KAIBQFEfMwEMJQFEGQFMF01IIjkVQAQBDCgzFSQmEwQBDD4CATcuRwIBNCJOHTABLCQBRUA8AUcXLiIgJCkkDSJCBiI5Ij4VJTYEAQwoMRUgJiUtEwQBDC5IKDsfTA8SGTY8CAYhBAEMOSkCATlPHzUBSEA8AUoXLiIgJCkkDSJCBiI5Ij4VKDYEAQwoNRUgJi0TBAFOFQw5KQIBMDQBMSgCAUVGHyoBEioBEk8uAUEXLiI5Ij4VPgQBDCgrFSAmLRMEAQwjAQxFOAQBDDEpJxoeQw8SITEvCAYgBAEMOE0pBAIBFUQfLAEZHQEpAT8XMDEVLAQBKBUhIRMEAgEaSR8yAR8TGQEgAUQXPBUoBAEoFScTBAExOgQBN0YEAgEmcGFja2FnZTpjb21waWxlci9zcmMvanNfbW9kZWwvZW52LmRhcnQ8c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfbW9kZWwvZWxlbWVudF9tYXBfaW1wbC5kYXJ0wAF7uC8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JyBzaG93IExpbmssIExpbmtCdWlsZGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NvcmVfdHlwZXMuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfZW52aXJvbm1lbnQuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2Nsb3N1cmUuZGFydCcgc2hvdyBCb3hMb2NhbCwgVGhpc0xvY2FsOwppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL2NvbXBpbGVfdGltZV9jb25zdGFudHMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL2NvbnN0cnVjdG9ycy5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvZXZhbHVhdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvZXhwcmVzc2lvbnMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9kZWZlcnJlZF9sb2FkLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0eV91dGlscy5kYXJ0JyBhcyB1dGlsczsKaW1wb3J0ICcuLi9lbGVtZW50cy9pbmRleGVkLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2Vudmlyb25tZW50LmRhcnQnOwppbXBvcnQgJy4uL2lyL2NhY2hlZF9zdGF0aWNfdHlwZS5kYXJ0JzsKaW1wb3J0ICcuLi9pci9jbG9zdXJlLmRhcnQnOwppbXBvcnQgJy4uL2lyL2RlYnVnLmRhcnQnOwppbXBvcnQgJy4uL2lyL2VsZW1lbnRfbWFwLmRhcnQnOwppbXBvcnQgJy4uL2lyL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2lyL3Zpc2l0b3JzLmRhcnQnOwppbXBvcnQgJy4uL2lyL3N0YXRpY190eXBlX2Jhc2UuZGFydCc7CmltcG9ydCAnLi4vaXIvc3RhdGljX3R5cGVfY2FjaGUuZGFydCc7CmltcG9ydCAnLi4vaXIvc3RhdGljX3R5cGVfcHJvdmlkZXIuZGFydCc7CmltcG9ydCAnLi4vaXIvdXRpbC5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2Fubm90YXRpb25zLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmF0aXZlX2RhdGEuZGFydCc7CmltcG9ydCAnLi4va2VybmVsL2VsZW1lbnRfbWFwX2ltcGwuZGFydCc7CmltcG9ydCAnLi4va2VybmVsL2Vudi5kYXJ0JzsKaW1wb3J0ICcuLi9rZXJuZWwva2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL25hdGl2ZS9iZWhhdmlvci5kYXJ0JzsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL29yZGVyZWRfdHlwZXNldC5kYXJ0JzsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vc3NhL3R5cGVfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9tZW1iZXJfdXNhZ2UuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCc7CgppbXBvcnQgJ2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnZWxlbWVudHMuZGFydCc7CmltcG9ydCAnZWxlbWVudF9tYXAuZGFydCc7CmltcG9ydCAnZW52LmRhcnQnOwppbXBvcnQgJ2xvY2Fscy5kYXJ0JzsKCmNsYXNzIEpzS2VybmVsVG9FbGVtZW50TWFwIGltcGxlbWVudHMgSnNUb0VsZW1lbnRNYXAsIElyVG9FbGVtZW50TWFwIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pzS2VybmVsVG9FbGVtZW50TWFwXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2pzLWtlcm5lbC10by1lbGVtZW50LW1hcCc7CgogIC8vLyBUYWdzIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgc3Vic2VjdGlvbnMgb2YgYQogIC8vLyBbSnNLZXJuZWxUb0VsZW1lbnRNYXBdIG9iamVjdCBpbiBhIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIGxpYnJhcnlUYWcgPSAnbGlicmFyaWVzJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGNsYXNzVGFnID0gJ2NsYXNzZXMnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdHlwZWRlZlRhZyA9ICd0eXBlZGVmcyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBtZW1iZXJUYWcgPSAnbWVtYmVycyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0eXBlVmFyaWFibGVUYWcgPSAndHlwZS12YXJpYWJsZXMnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgbGlicmFyeURhdGFUYWcgPSAnbGlicmFyeS1kYXRhJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGNsYXNzRGF0YVRhZyA9ICdjbGFzcy1kYXRhJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHR5cGVkZWZEYXRhVGFnID0gJ3R5cGVkZWYtZGF0YSc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBtZW1iZXJEYXRhVGFnID0gJ21lbWJlci1kYXRhJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHR5cGVWYXJpYWJsZURhdGFUYWcgPSAndHlwZS12YXJpYWJsZS1kYXRhJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIG5lc3RlZENsb3N1cmVzVGFnID0gJ25lc3RlZC1jbG9zdXJlcyc7CgogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zOwogIEBvdmVycmlkZQogIGZpbmFsIERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlcjsKICBDb21tb25FbGVtZW50c0ltcGwgX2NvbW1vbkVsZW1lbnRzOwogIEpzRWxlbWVudEVudmlyb25tZW50IF9lbGVtZW50RW52aXJvbm1lbnQ7CiAgRGFydFR5cGVDb252ZXJ0ZXIgX3R5cGVDb252ZXJ0ZXI7CiAgSnNDb25zdGFudEVudmlyb25tZW50IF9jb25zdGFudEVudmlyb25tZW50OwogIEtlcm5lbERhcnRUeXBlcyBfdHlwZXM7CiAgaXIuVHlwZUVudmlyb25tZW50IF90eXBlRW52aXJvbm1lbnQ7CiAgaXIuQ2xhc3NIaWVyYXJjaHkgX2NsYXNzSGllcmFyY2h5OwogIENvbnN0YW50VmFsdWVmaWVyIF9jb25zdGFudFZhbHVlZmllcjsKCiAgLy8vIExpYnJhcnkgZW52aXJvbm1lbnQuIFVzZWQgZm9yIGZhc3QgbG9va3VwLgogIEpQcm9ncmFtRW52IHByb2dyYW1FbnY7CgogIGZpbmFsIEVudGl0eURhdGFFbnZNYXA8SW5kZXhlZExpYnJhcnksIEpMaWJyYXJ5RGF0YSwgSkxpYnJhcnlFbnY+IGxpYnJhcmllcyA9CiAgICAgIG5ldyBFbnRpdHlEYXRhRW52TWFwPEluZGV4ZWRMaWJyYXJ5LCBKTGlicmFyeURhdGEsIEpMaWJyYXJ5RW52PigpOwogIGZpbmFsIEVudGl0eURhdGFFbnZNYXA8SW5kZXhlZENsYXNzLCBKQ2xhc3NEYXRhLCBKQ2xhc3NFbnY+IGNsYXNzZXMgPQogICAgICBuZXcgRW50aXR5RGF0YUVudk1hcDxJbmRleGVkQ2xhc3MsIEpDbGFzc0RhdGEsIEpDbGFzc0Vudj4oKTsKICBmaW5hbCBFbnRpdHlEYXRhTWFwPEluZGV4ZWRNZW1iZXIsIEpNZW1iZXJEYXRhPiBtZW1iZXJzID0KICAgICAgbmV3IEVudGl0eURhdGFNYXA8SW5kZXhlZE1lbWJlciwgSk1lbWJlckRhdGE+KCk7CiAgZmluYWwgRW50aXR5RGF0YU1hcDxJbmRleGVkVHlwZVZhcmlhYmxlLCBKVHlwZVZhcmlhYmxlRGF0YT4gdHlwZVZhcmlhYmxlcyA9CiAgICAgIG5ldyBFbnRpdHlEYXRhTWFwPEluZGV4ZWRUeXBlVmFyaWFibGUsIEpUeXBlVmFyaWFibGVEYXRhPigpOwogIGZpbmFsIEVudGl0eURhdGFNYXA8SW5kZXhlZFR5cGVkZWYsIEpUeXBlZGVmRGF0YT4gdHlwZWRlZnMgPQogICAgICBuZXcgRW50aXR5RGF0YU1hcDxJbmRleGVkVHlwZWRlZiwgSlR5cGVkZWZEYXRhPigpOwoKICBmaW5hbCBNYXA8aXIuTGlicmFyeSwgSW5kZXhlZExpYnJhcnk+IGxpYnJhcnlNYXAgPSB7fTsKICBmaW5hbCBNYXA8aXIuQ2xhc3MsIEluZGV4ZWRDbGFzcz4gY2xhc3NNYXAgPSB7fTsKICBmaW5hbCBNYXA8aXIuVHlwZWRlZiwgSW5kZXhlZFR5cGVkZWY+IHR5cGVkZWZNYXAgPSB7fTsKCiAgLy8vIE1hcCBmcm9tIFtpci5UeXBlUGFyYW1ldGVyXSBub2RlcyB0byB0aGUgY29ycmVzcG9uZGluZwogIC8vLyBbVHlwZVZhcmlhYmxlRW50aXR5XS4KICAvLy8KICAvLy8gTm9ybWFsbHkgdGhlIHR5cGUgdmFyaWFibGVzIGFyZSBbSW5kZXhlZFR5cGVWYXJpYWJsZV1zLCBidXQgZm9yIHR5cGUKICAvLy8gcGFyYW1ldGVycyBvbiBsb2NhbCBmdW5jdGlvbiAoaW4gdGhlIGZyb250ZW5kKSB0aGVzZSBhcmUgX25vdF8gc2luY2UKICAvLy8gdGhlaXIgdHlwZSBkZWNsYXJhdGlvbiBpcyBuZWl0aGVyIGEgY2xhc3Mgbm9yIGEgbWVtYmVyLiBJbiB0aGUgYmFja2VuZCwKICAvLy8gdGhlc2UgdHlwZSBwYXJhbWV0ZXJzIGJlbG9uZyB0byB0aGUgY2FsbC1tZXRob2QgYW5kIGFyZSB0aGVyZWZvcmUgaW5kZXhlZC4KICBmaW5hbCBNYXA8aXIuVHlwZVBhcmFtZXRlciwgVHlwZVZhcmlhYmxlRW50aXR5PiB0eXBlVmFyaWFibGVNYXAgPSB7fTsKICBmaW5hbCBNYXA8aXIuTWVtYmVyLCBJbmRleGVkQ29uc3RydWN0b3I+IGNvbnN0cnVjdG9yTWFwID0ge307CiAgZmluYWwgTWFwPGlyLlByb2NlZHVyZSwgSW5kZXhlZEZ1bmN0aW9uPiBtZXRob2RNYXAgPSB7fTsKICBmaW5hbCBNYXA8aXIuRmllbGQsIEluZGV4ZWRGaWVsZD4gZmllbGRNYXAgPSB7fTsKICBmaW5hbCBNYXA8aXIuVHJlZU5vZGUsIExvY2FsPiBsb2NhbEZ1bmN0aW9uTWFwID0ge307CgogIC8vLyBNYXAgZnJvbSBtZW1iZXJzIHRvIHRoZSBjYWxsIG1ldGhvZHMgY3JlYXRlZCBmb3IgdGhlaXIgbmVzdGVkIGNsb3N1cmVzLgogIE1hcDxJbmRleGVkTWVtYmVyLCBMaXN0PEluZGV4ZWRGdW5jdGlvbj4+IF9uZXN0ZWRDbG9zdXJlTWFwID0ge307CgogIC8vLyBOYXRpdmVEYXRhIGlzIG5lZWQgZm9yIGNvbXB1dGF0aW9uIG9mIHRoZSBkZWZhdWx0IHN1cGVyIGNsYXNzIGFuZAogIC8vLyBwYXJhbWV0ZXIgb3JkZXJpbmcuCiAgTmF0aXZlRGF0YSBuYXRpdmVEYXRhOwoKICBNYXA8SW5kZXhlZEZ1bmN0aW9uLCBKR2VuZXJhdG9yQm9keT4gX2dlbmVyYXRvckJvZGllcyA9IHt9OwoKICBNYXA8SW5kZXhlZENsYXNzLCBMaXN0PEluZGV4ZWRNZW1iZXI+PiBfaW5qZWN0ZWRDbGFzc01lbWJlcnMgPSB7fTsKCiAgTGF0ZU91dHB1dFVuaXREYXRhQnVpbGRlciBsYXRlT3V0cHV0VW5pdERhdGFCdWlsZGVyOwoKICBKc0tlcm5lbFRvRWxlbWVudE1hcCgKICAgICAgdGhpcy5yZXBvcnRlciwKICAgICAgRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsCiAgICAgIEtlcm5lbFRvRWxlbWVudE1hcEltcGwgX2VsZW1lbnRNYXAsCiAgICAgIE1hcDxNZW1iZXJFbnRpdHksIE1lbWJlclVzYWdlPiBsaXZlTWVtYmVyVXNhZ2UsCiAgICAgIEFubm90YXRpb25zRGF0YSBhbm5vdGF0aW9ucykKICAgICAgOiB0aGlzLm9wdGlvbnMgPSBfZWxlbWVudE1hcC5vcHRpb25zIHsKICAgIF9lbGVtZW50RW52aXJvbm1lbnQgPSBuZXcgSnNFbGVtZW50RW52aXJvbm1lbnQodGhpcyk7CiAgICBfY29tbW9uRWxlbWVudHMgPQogICAgICAgIG5ldyBDb21tb25FbGVtZW50c0ltcGwoX2VsZW1lbnRFbnZpcm9ubWVudCwgX2VsZW1lbnRNYXAub3B0aW9ucyk7CiAgICBfY29uc3RhbnRFbnZpcm9ubWVudCA9IG5ldyBKc0NvbnN0YW50RW52aXJvbm1lbnQodGhpcywgZW52aXJvbm1lbnQpOwogICAgX3R5cGVDb252ZXJ0ZXIgPSBuZXcgRGFydFR5cGVDb252ZXJ0ZXIodGhpcyk7CiAgICBfdHlwZXMgPSBuZXcgS2VybmVsRGFydFR5cGVzKHRoaXMpOwogICAgX2NvbnN0YW50VmFsdWVmaWVyID0gbmV3IENvbnN0YW50VmFsdWVmaWVyKHRoaXMpOwoKICAgIHByb2dyYW1FbnYgPSBfZWxlbWVudE1hcC5lbnYuY29udmVydCgpOwogICAgZm9yIChpbnQgbGlicmFyeUluZGV4ID0gMDsKICAgICAgICBsaWJyYXJ5SW5kZXggPCBfZWxlbWVudE1hcC5saWJyYXJpZXMubGVuZ3RoOwogICAgICAgIGxpYnJhcnlJbmRleCsrKSB7CiAgICAgIEluZGV4ZWRMaWJyYXJ5IG9sZExpYnJhcnkgPSBfZWxlbWVudE1hcC5saWJyYXJpZXMuZ2V0RW50aXR5KGxpYnJhcnlJbmRleCk7CiAgICAgIEtMaWJyYXJ5RW52IG9sZEVudiA9IF9lbGVtZW50TWFwLmxpYnJhcmllcy5nZXRFbnYob2xkTGlicmFyeSk7CiAgICAgIEtMaWJyYXJ5RGF0YSBkYXRhID0gX2VsZW1lbnRNYXAubGlicmFyaWVzLmdldERhdGEob2xkTGlicmFyeSk7CiAgICAgIEluZGV4ZWRMaWJyYXJ5IG5ld0xpYnJhcnkgPQogICAgICAgICAgbmV3IEpMaWJyYXJ5KG9sZExpYnJhcnkubmFtZSwgb2xkTGlicmFyeS5jYW5vbmljYWxVcmkpOwogICAgICBKTGlicmFyeUVudiBuZXdFbnYgPSBvbGRFbnYuY29udmVydChfZWxlbWVudE1hcCwgbGl2ZU1lbWJlclVzYWdlKTsKICAgICAgbGlicmFyeU1hcFtvbGRFbnYubGlicmFyeV0gPQogICAgICAgICAgbGlicmFyaWVzLnJlZ2lzdGVyPEluZGV4ZWRMaWJyYXJ5LCBKTGlicmFyeURhdGEsIEpMaWJyYXJ5RW52PigKICAgICAgICAgICAgICBuZXdMaWJyYXJ5LCBkYXRhLmNvbnZlcnQoKSwgbmV3RW52KTsKICAgICAgYXNzZXJ0KG5ld0xpYnJhcnkubGlicmFyeUluZGV4ID09IG9sZExpYnJhcnkubGlicmFyeUluZGV4KTsKICAgICAgcHJvZ3JhbUVudi5yZWdpc3RlckxpYnJhcnkobmV3RW52KTsKICAgIH0KICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEZpbHRlciB1bnVzZWQgY2xhc3Nlcy4KICAgIGZvciAoaW50IGNsYXNzSW5kZXggPSAwOwogICAgICAgIGNsYXNzSW5kZXggPCBfZWxlbWVudE1hcC5jbGFzc2VzLmxlbmd0aDsKICAgICAgICBjbGFzc0luZGV4KyspIHsKICAgICAgSW5kZXhlZENsYXNzIG9sZENsYXNzID0gX2VsZW1lbnRNYXAuY2xhc3Nlcy5nZXRFbnRpdHkoY2xhc3NJbmRleCk7CiAgICAgIEtDbGFzc0VudiBlbnYgPSBfZWxlbWVudE1hcC5jbGFzc2VzLmdldEVudihvbGRDbGFzcyk7CiAgICAgIEtDbGFzc0RhdGEgZGF0YSA9IF9lbGVtZW50TWFwLmNsYXNzZXMuZ2V0RGF0YShvbGRDbGFzcyk7CiAgICAgIEluZGV4ZWRMaWJyYXJ5IG9sZExpYnJhcnkgPSBvbGRDbGFzcy5saWJyYXJ5OwogICAgICBMaWJyYXJ5RW50aXR5IG5ld0xpYnJhcnkgPSBsaWJyYXJpZXMuZ2V0RW50aXR5KG9sZExpYnJhcnkubGlicmFyeUluZGV4KTsKICAgICAgSW5kZXhlZENsYXNzIG5ld0NsYXNzID0gbmV3IEpDbGFzcyhuZXdMaWJyYXJ5LCBvbGRDbGFzcy5uYW1lLAogICAgICAgICAgaXNBYnN0cmFjdDogb2xkQ2xhc3MuaXNBYnN0cmFjdCk7CiAgICAgIEpDbGFzc0VudiBuZXdFbnYgPSBlbnYuY29udmVydChfZWxlbWVudE1hcCwgbGl2ZU1lbWJlclVzYWdlKTsKICAgICAgY2xhc3NNYXBbZW52LmNsc10gPSBjbGFzc2VzLnJlZ2lzdGVyKG5ld0NsYXNzLCBkYXRhLmNvbnZlcnQoKSwgbmV3RW52KTsKICAgICAgYXNzZXJ0KG5ld0NsYXNzLmNsYXNzSW5kZXggPT0gb2xkQ2xhc3MuY2xhc3NJbmRleCk7CiAgICAgIGxpYnJhcmllcy5nZXRFbnYobmV3Q2xhc3MubGlicmFyeSkucmVnaXN0ZXJDbGFzcyhuZXdDbGFzcy5uYW1lLCBuZXdFbnYpOwogICAgfQogICAgZm9yIChpbnQgdHlwZWRlZkluZGV4ID0gMDsKICAgICAgICB0eXBlZGVmSW5kZXggPCBfZWxlbWVudE1hcC50eXBlZGVmcy5sZW5ndGg7CiAgICAgICAgdHlwZWRlZkluZGV4KyspIHsKICAgICAgSW5kZXhlZFR5cGVkZWYgb2xkVHlwZWRlZiA9IF9lbGVtZW50TWFwLnR5cGVkZWZzLmdldEVudGl0eSh0eXBlZGVmSW5kZXgpOwogICAgICBLVHlwZWRlZkRhdGEgZGF0YSA9IF9lbGVtZW50TWFwLnR5cGVkZWZzLmdldERhdGEob2xkVHlwZWRlZik7CiAgICAgIEluZGV4ZWRMaWJyYXJ5IG9sZExpYnJhcnkgPSBvbGRUeXBlZGVmLmxpYnJhcnk7CiAgICAgIExpYnJhcnlFbnRpdHkgbmV3TGlicmFyeSA9IGxpYnJhcmllcy5nZXRFbnRpdHkob2xkTGlicmFyeS5saWJyYXJ5SW5kZXgpOwogICAgICBJbmRleGVkVHlwZWRlZiBuZXdUeXBlZGVmID0gbmV3IEpUeXBlZGVmKG5ld0xpYnJhcnksIG9sZFR5cGVkZWYubmFtZSk7CiAgICAgIHR5cGVkZWZNYXBbZGF0YS5ub2RlXSA9IHR5cGVkZWZzLnJlZ2lzdGVyKAogICAgICAgICAgbmV3VHlwZWRlZiwKICAgICAgICAgIG5ldyBKVHlwZWRlZkRhdGEoCiAgICAgICAgICAgICAgZGF0YS5ub2RlLAogICAgICAgICAgICAgIG5ldyBUeXBlZGVmVHlwZSgKICAgICAgICAgICAgICAgICAgbmV3VHlwZWRlZiwKICAgICAgICAgICAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+LmZpbGxlZCgKICAgICAgICAgICAgICAgICAgICAgIGRhdGEubm9kZS50eXBlUGFyYW1ldGVycy5sZW5ndGgsIGNvbnN0IER5bmFtaWNUeXBlKCkpLAogICAgICAgICAgICAgICAgICBnZXREYXJ0VHlwZShkYXRhLm5vZGUudHlwZSkpKSk7CiAgICAgIGFzc2VydChuZXdUeXBlZGVmLnR5cGVkZWZJbmRleCA9PSBvbGRUeXBlZGVmLnR5cGVkZWZJbmRleCk7CiAgICB9CgogICAgZm9yIChpbnQgbWVtYmVySW5kZXggPSAwOwogICAgICAgIG1lbWJlckluZGV4IDwgX2VsZW1lbnRNYXAubWVtYmVycy5sZW5ndGg7CiAgICAgICAgbWVtYmVySW5kZXgrKykgewogICAgICBJbmRleGVkTWVtYmVyIG9sZE1lbWJlciA9IF9lbGVtZW50TWFwLm1lbWJlcnMuZ2V0RW50aXR5KG1lbWJlckluZGV4KTsKICAgICAgTWVtYmVyVXNhZ2UgbWVtYmVyVXNhZ2UgPSBsaXZlTWVtYmVyVXNhZ2Vbb2xkTWVtYmVyXTsKICAgICAgaWYgKG1lbWJlclVzYWdlID09IG51bGwpIHsKICAgICAgICBtZW1iZXJzLnNraXBJbmRleChvbGRNZW1iZXIubWVtYmVySW5kZXgpOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIEtNZW1iZXJEYXRhIGRhdGEgPSBfZWxlbWVudE1hcC5tZW1iZXJzLmdldERhdGEob2xkTWVtYmVyKTsKICAgICAgSW5kZXhlZExpYnJhcnkgb2xkTGlicmFyeSA9IG9sZE1lbWJlci5saWJyYXJ5OwogICAgICBJbmRleGVkQ2xhc3Mgb2xkQ2xhc3MgPSBvbGRNZW1iZXIuZW5jbG9zaW5nQ2xhc3M7CiAgICAgIExpYnJhcnlFbnRpdHkgbmV3TGlicmFyeSA9IGxpYnJhcmllcy5nZXRFbnRpdHkob2xkTGlicmFyeS5saWJyYXJ5SW5kZXgpOwogICAgICBDbGFzc0VudGl0eSBuZXdDbGFzcyA9CiAgICAgICAgICBvbGRDbGFzcyAhPSBudWxsID8gY2xhc3Nlcy5nZXRFbnRpdHkob2xkQ2xhc3MuY2xhc3NJbmRleCkgOiBudWxsOwogICAgICBJbmRleGVkTWVtYmVyIG5ld01lbWJlcjsKICAgICAgTmFtZSBtZW1iZXJOYW1lID0gbmV3IE5hbWUob2xkTWVtYmVyLm1lbWJlck5hbWUudGV4dCwgbmV3TGlicmFyeSwKICAgICAgICAgIGlzU2V0dGVyOiBvbGRNZW1iZXIubWVtYmVyTmFtZS5pc1NldHRlcik7CiAgICAgIGlmIChvbGRNZW1iZXIuaXNGaWVsZCkgewogICAgICAgIEluZGV4ZWRGaWVsZCBmaWVsZCA9IG9sZE1lbWJlcjsKICAgICAgICBuZXdNZW1iZXIgPSBuZXcgSkZpZWxkKG5ld0xpYnJhcnksIG5ld0NsYXNzLCBtZW1iZXJOYW1lLAogICAgICAgICAgICBpc1N0YXRpYzogZmllbGQuaXNTdGF0aWMsCiAgICAgICAgICAgIGlzQXNzaWduYWJsZTogZmllbGQuaXNBc3NpZ25hYmxlLAogICAgICAgICAgICBpc0NvbnN0OiBmaWVsZC5pc0NvbnN0KTsKICAgICAgfSBlbHNlIGlmIChvbGRNZW1iZXIuaXNDb25zdHJ1Y3RvcikgewogICAgICAgIEluZGV4ZWRDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciA9IG9sZE1lbWJlcjsKICAgICAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlID0KICAgICAgICAgICAgYW5ub3RhdGlvbnMuaGFzTm9FbGlzaW9uKGNvbnN0cnVjdG9yKQogICAgICAgICAgICAgICAgPyBjb25zdHJ1Y3Rvci5wYXJhbWV0ZXJTdHJ1Y3R1cmUKICAgICAgICAgICAgICAgIDogbWVtYmVyVXNhZ2UuaW52b2tlZFBhcmFtZXRlcnM7CiAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmlzRmFjdG9yeUNvbnN0cnVjdG9yKSB7CiAgICAgICAgICAvLyBUT0RPKHJlZGVtcHRpb24pOiBUaGlzIHNob3VsZCBiZSBhIEpGdW5jdGlvbi4KICAgICAgICAgIG5ld01lbWJlciA9IG5ldyBKRmFjdG9yeUNvbnN0cnVjdG9yKAogICAgICAgICAgICAgIG5ld0NsYXNzLCBtZW1iZXJOYW1lLCBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgICAgICAgICAgaXNFeHRlcm5hbDogY29uc3RydWN0b3IuaXNFeHRlcm5hbCwKICAgICAgICAgICAgICBpc0NvbnN0OiBjb25zdHJ1Y3Rvci5pc0NvbnN0LAogICAgICAgICAgICAgIGlzRnJvbUVudmlyb25tZW50Q29uc3RydWN0b3I6CiAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yLmlzRnJvbUVudmlyb25tZW50Q29uc3RydWN0b3IpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBuZXdNZW1iZXIgPSBuZXcgSkdlbmVyYXRpdmVDb25zdHJ1Y3RvcigKICAgICAgICAgICAgICBuZXdDbGFzcywgbWVtYmVyTmFtZSwgcGFyYW1ldGVyU3RydWN0dXJlLAogICAgICAgICAgICAgIGlzRXh0ZXJuYWw6IGNvbnN0cnVjdG9yLmlzRXh0ZXJuYWwsIGlzQ29uc3Q6IGNvbnN0cnVjdG9yLmlzQ29uc3QpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChvbGRNZW1iZXIuaXNHZXR0ZXIpIHsKICAgICAgICBJbmRleGVkRnVuY3Rpb24gZ2V0dGVyID0gb2xkTWVtYmVyOwogICAgICAgIG5ld01lbWJlciA9IG5ldyBKR2V0dGVyKAogICAgICAgICAgICBuZXdMaWJyYXJ5LCBuZXdDbGFzcywgbWVtYmVyTmFtZSwgZ2V0dGVyLmFzeW5jTWFya2VyLAogICAgICAgICAgICBpc1N0YXRpYzogZ2V0dGVyLmlzU3RhdGljLAogICAgICAgICAgICBpc0V4dGVybmFsOiBnZXR0ZXIuaXNFeHRlcm5hbCwKICAgICAgICAgICAgaXNBYnN0cmFjdDogZ2V0dGVyLmlzQWJzdHJhY3QpOwogICAgICB9IGVsc2UgaWYgKG9sZE1lbWJlci5pc1NldHRlcikgewogICAgICAgIEluZGV4ZWRGdW5jdGlvbiBzZXR0ZXIgPSBvbGRNZW1iZXI7CiAgICAgICAgbmV3TWVtYmVyID0gbmV3IEpTZXR0ZXIobmV3TGlicmFyeSwgbmV3Q2xhc3MsIG1lbWJlck5hbWUsCiAgICAgICAgICAgIGlzU3RhdGljOiBzZXR0ZXIuaXNTdGF0aWMsCiAgICAgICAgICAgIGlzRXh0ZXJuYWw6IHNldHRlci5pc0V4dGVybmFsLAogICAgICAgICAgICBpc0Fic3RyYWN0OiBzZXR0ZXIuaXNBYnN0cmFjdCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgSW5kZXhlZEZ1bmN0aW9uIGZ1bmN0aW9uID0gb2xkTWVtYmVyOwogICAgICAgIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUgPQogICAgICAgICAgICBhbm5vdGF0aW9ucy5oYXNOb0VsaXNpb24oZnVuY3Rpb24pCiAgICAgICAgICAgICAgICA/IGZ1bmN0aW9uLnBhcmFtZXRlclN0cnVjdHVyZQogICAgICAgICAgICAgICAgOiBtZW1iZXJVc2FnZS5pbnZva2VkUGFyYW1ldGVyczsKICAgICAgICBuZXdNZW1iZXIgPSBuZXcgSk1ldGhvZChuZXdMaWJyYXJ5LCBuZXdDbGFzcywgbWVtYmVyTmFtZSwKICAgICAgICAgICAgcGFyYW1ldGVyU3RydWN0dXJlLCBmdW5jdGlvbi5hc3luY01hcmtlciwKICAgICAgICAgICAgaXNTdGF0aWM6IGZ1bmN0aW9uLmlzU3RhdGljLAogICAgICAgICAgICBpc0V4dGVybmFsOiBmdW5jdGlvbi5pc0V4dGVybmFsLAogICAgICAgICAgICBpc0Fic3RyYWN0OiBmdW5jdGlvbi5pc0Fic3RyYWN0KTsKICAgICAgfQogICAgICBtZW1iZXJzLnJlZ2lzdGVyKG5ld01lbWJlciwgZGF0YS5jb252ZXJ0KCkpOwogICAgICBhc3NlcnQoCiAgICAgICAgICBuZXdNZW1iZXIubWVtYmVySW5kZXggPT0gb2xkTWVtYmVyLm1lbWJlckluZGV4LAogICAgICAgICAgIk1lbWJlciBpbmRleCBtaXNtYXRjaDogIgogICAgICAgICAgIk9sZCBtZW1iZXIgJG9sZE1lbWJlciBoYXMgaW5kZXggJHtvbGRNZW1iZXIubWVtYmVySW5kZXh9ICIKICAgICAgICAgICJ3aGVyZWFzIG5ldyBtZW1iZXIgJG5ld01lbWJlciBoYXMgaW5kZXggJHtuZXdNZW1iZXIubWVtYmVySW5kZXh9Iik7CiAgICAgIGlmIChuZXdNZW1iZXIuaXNGaWVsZCkgewogICAgICAgIGZpZWxkTWFwW2RhdGEubm9kZV0gPSBuZXdNZW1iZXI7CiAgICAgIH0gZWxzZSBpZiAobmV3TWVtYmVyLmlzQ29uc3RydWN0b3IpIHsKICAgICAgICBjb25zdHJ1Y3Rvck1hcFtkYXRhLm5vZGVdID0gbmV3TWVtYmVyOwogICAgICB9IGVsc2UgewogICAgICAgIG1ldGhvZE1hcFtkYXRhLm5vZGVdID0gbmV3TWVtYmVyOwogICAgICB9CiAgICB9CiAgICBmb3IgKGludCB0eXBlVmFyaWFibGVJbmRleCA9IDA7CiAgICAgICAgdHlwZVZhcmlhYmxlSW5kZXggPCBfZWxlbWVudE1hcC50eXBlVmFyaWFibGVzLmxlbmd0aDsKICAgICAgICB0eXBlVmFyaWFibGVJbmRleCsrKSB7CiAgICAgIEluZGV4ZWRUeXBlVmFyaWFibGUgb2xkVHlwZVZhcmlhYmxlID0KICAgICAgICAgIF9lbGVtZW50TWFwLnR5cGVWYXJpYWJsZXMuZ2V0RW50aXR5KHR5cGVWYXJpYWJsZUluZGV4KTsKICAgICAgS1R5cGVWYXJpYWJsZURhdGEgb2xkVHlwZVZhcmlhYmxlRGF0YSA9CiAgICAgICAgICBfZWxlbWVudE1hcC50eXBlVmFyaWFibGVzLmdldERhdGEob2xkVHlwZVZhcmlhYmxlKTsKICAgICAgRW50aXR5IG5ld1R5cGVEZWNsYXJhdGlvbjsKICAgICAgaWYgKG9sZFR5cGVWYXJpYWJsZS50eXBlRGVjbGFyYXRpb24gaXMgQ2xhc3NFbnRpdHkpIHsKICAgICAgICBJbmRleGVkQ2xhc3MgY2xzID0gb2xkVHlwZVZhcmlhYmxlLnR5cGVEZWNsYXJhdGlvbjsKICAgICAgICBuZXdUeXBlRGVjbGFyYXRpb24gPSBjbGFzc2VzLmdldEVudGl0eShjbHMuY2xhc3NJbmRleCk7CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU2tpcCB0eXBlIHZhcmlhYmxlcyBvZiB1bnVzZWQgY2xhc3Nlcy4KICAgICAgfSBlbHNlIGlmIChvbGRUeXBlVmFyaWFibGUudHlwZURlY2xhcmF0aW9uIGlzIE1lbWJlckVudGl0eSkgewogICAgICAgIEluZGV4ZWRNZW1iZXIgbWVtYmVyID0gb2xkVHlwZVZhcmlhYmxlLnR5cGVEZWNsYXJhdGlvbjsKICAgICAgICBuZXdUeXBlRGVjbGFyYXRpb24gPSBtZW1iZXJzLmdldEVudGl0eShtZW1iZXIubWVtYmVySW5kZXgpOwogICAgICAgIGlmIChuZXdUeXBlRGVjbGFyYXRpb24gPT0gbnVsbCkgewogICAgICAgICAgdHlwZVZhcmlhYmxlcy5za2lwSW5kZXgodHlwZVZhcmlhYmxlSW5kZXgpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGFzc2VydChvbGRUeXBlVmFyaWFibGUudHlwZURlY2xhcmF0aW9uIGlzIExvY2FsKTsKICAgICAgfQogICAgICBJbmRleGVkVHlwZVZhcmlhYmxlIG5ld1R5cGVWYXJpYWJsZSA9IGNyZWF0ZVR5cGVWYXJpYWJsZSgKICAgICAgICAgIG5ld1R5cGVEZWNsYXJhdGlvbiwgb2xkVHlwZVZhcmlhYmxlLm5hbWUsIG9sZFR5cGVWYXJpYWJsZS5pbmRleCk7CiAgICAgIHR5cGVWYXJpYWJsZU1hcFtvbGRUeXBlVmFyaWFibGVEYXRhLm5vZGVdID0KICAgICAgICAgIHR5cGVWYXJpYWJsZXMucmVnaXN0ZXI8SW5kZXhlZFR5cGVWYXJpYWJsZSwgSlR5cGVWYXJpYWJsZURhdGE+KAogICAgICAgICAgICAgIG5ld1R5cGVWYXJpYWJsZSwgb2xkVHlwZVZhcmlhYmxlRGF0YS5jb3B5KCkpOwogICAgICBhc3NlcnQobmV3VHlwZVZhcmlhYmxlLnR5cGVWYXJpYWJsZUluZGV4ID09CiAgICAgICAgICBvbGRUeXBlVmFyaWFibGUudHlwZVZhcmlhYmxlSW5kZXgpOwogICAgfQogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogV2Ugc2hvdWxkIGNsb3NlIHRoZSBlbnZpcm9ubWVudCBpbiB0aGUgYmVnaW5uaW5nIG9mCiAgICAvLyB0aGlzIGNvbnN0cnVjdG9yIGJ1dCBjdXJyZW50bHkgd2UgbmVlZCB0aGUgW01lbWJlckVudGl0eV0gdG8gcXVlcnkgaWYgdGhlCiAgICAvLyBtZW1iZXIgaXMgbGl2ZSwgdGh1cyBwb3RlbnRpYWxseSBjcmVhdGluZyB0aGUgW01lbWJlckVudGl0eV0gaW4gdGhlCiAgICAvLyBwcm9jZXNzLiBBdm9pZCB0aGlzLgogICAgX2VsZW1lbnRNYXAuZW52SXNDbG9zZWQgPSB0cnVlOwogIH0KCiAgSnNLZXJuZWxUb0VsZW1lbnRNYXAucmVhZEZyb21EYXRhU291cmNlKHRoaXMub3B0aW9ucywgdGhpcy5yZXBvcnRlciwKICAgICAgRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsIGlyLkNvbXBvbmVudCBjb21wb25lbnQsIERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBfZWxlbWVudEVudmlyb25tZW50ID0gbmV3IEpzRWxlbWVudEVudmlyb25tZW50KHRoaXMpOwogICAgX2NvbW1vbkVsZW1lbnRzID0gbmV3IENvbW1vbkVsZW1lbnRzSW1wbChfZWxlbWVudEVudmlyb25tZW50LCBvcHRpb25zKTsKICAgIF9jb25zdGFudEVudmlyb25tZW50ID0gbmV3IEpzQ29uc3RhbnRFbnZpcm9ubWVudCh0aGlzLCBlbnZpcm9ubWVudCk7CiAgICBfdHlwZUNvbnZlcnRlciA9IG5ldyBEYXJ0VHlwZUNvbnZlcnRlcih0aGlzKTsKICAgIF90eXBlcyA9IG5ldyBLZXJuZWxEYXJ0VHlwZXModGhpcyk7CiAgICBfY29uc3RhbnRWYWx1ZWZpZXIgPSBuZXcgQ29uc3RhbnRWYWx1ZWZpZXIodGhpcyk7CgogICAgc291cmNlLnJlZ2lzdGVyQ29tcG9uZW50TG9va3VwKG5ldyBDb21wb25lbnRMb29rdXAoY29tcG9uZW50KSk7CiAgICBfRW50aXR5TG9va3VwIGVudGl0eUxvb2t1cCA9IG5ldyBfRW50aXR5TG9va3VwKCk7CiAgICBzb3VyY2UucmVnaXN0ZXJFbnRpdHlMb29rdXAoZW50aXR5TG9va3VwKTsKCiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIHNvdXJjZS5iZWdpbihsaWJyYXJ5VGFnKTsKICAgIGludCBsaWJyYXJ5Q291bnQgPSBzb3VyY2UucmVhZEludCgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaWJyYXJ5Q291bnQ7IGkrKykgewogICAgICBpbnQgaW5kZXggPSBzb3VyY2UucmVhZEludCgpOwogICAgICBKTGlicmFyeSBsaWJyYXJ5ID0gbmV3IEpMaWJyYXJ5LnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBlbnRpdHlMb29rdXAucmVnaXN0ZXJMaWJyYXJ5KGluZGV4LCBsaWJyYXJ5KTsKICAgIH0KICAgIHNvdXJjZS5lbmQobGlicmFyeVRhZyk7CgogICAgc291cmNlLmJlZ2luKGNsYXNzVGFnKTsKICAgIGludCBjbGFzc0NvdW50ID0gc291cmNlLnJlYWRJbnQoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2xhc3NDb3VudDsgaSsrKSB7CiAgICAgIGludCBpbmRleCA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICAgIEpDbGFzcyBjbHMgPSBuZXcgSkNsYXNzLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBlbnRpdHlMb29rdXAucmVnaXN0ZXJDbGFzcyhpbmRleCwgY2xzKTsKICAgIH0KICAgIHNvdXJjZS5lbmQoY2xhc3NUYWcpOwoKICAgIHNvdXJjZS5iZWdpbih0eXBlZGVmVGFnKTsKICAgIGludCB0eXBlZGVmQ291bnQgPSBzb3VyY2UucmVhZEludCgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlZGVmQ291bnQ7IGkrKykgewogICAgICBpbnQgaW5kZXggPSBzb3VyY2UucmVhZEludCgpOwogICAgICBKVHlwZWRlZiB0eXBlZGVmID0gbmV3IEpUeXBlZGVmLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBlbnRpdHlMb29rdXAucmVnaXN0ZXJUeXBlZGVmKGluZGV4LCB0eXBlZGVmKTsKICAgIH0KICAgIHNvdXJjZS5lbmQodHlwZWRlZlRhZyk7CgogICAgc291cmNlLmJlZ2luKG1lbWJlclRhZyk7CiAgICBpbnQgbWVtYmVyQ291bnQgPSBzb3VyY2UucmVhZEludCgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtZW1iZXJDb3VudDsgaSsrKSB7CiAgICAgIGludCBpbmRleCA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICAgIEpNZW1iZXIgbWVtYmVyID0gbmV3IEpNZW1iZXIucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGVudGl0eUxvb2t1cC5yZWdpc3Rlck1lbWJlcihpbmRleCwgbWVtYmVyKTsKICAgIH0KICAgIHNvdXJjZS5lbmQobWVtYmVyVGFnKTsKCiAgICBzb3VyY2UuYmVnaW4odHlwZVZhcmlhYmxlVGFnKTsKICAgIGludCB0eXBlVmFyaWFibGVDb3VudCA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVWYXJpYWJsZUNvdW50OyBpKyspIHsKICAgICAgaW50IGluZGV4ID0gc291cmNlLnJlYWRJbnQoKTsKICAgICAgSlR5cGVWYXJpYWJsZSB0eXBlVmFyaWFibGUgPSBuZXcgSlR5cGVWYXJpYWJsZS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgZW50aXR5TG9va3VwLnJlZ2lzdGVyVHlwZVZhcmlhYmxlKGluZGV4LCB0eXBlVmFyaWFibGUpOwogICAgfQogICAgc291cmNlLmVuZCh0eXBlVmFyaWFibGVUYWcpOwoKICAgIHByb2dyYW1FbnYgPSBuZXcgSlByb2dyYW1FbnYoW2NvbXBvbmVudF0pOwogICAgc291cmNlLmJlZ2luKGxpYnJhcnlEYXRhVGFnKTsKICAgIGVudGl0eUxvb2t1cC5mb3JFYWNoTGlicmFyeSgoaW50IGluZGV4LCBKTGlicmFyeSBsaWJyYXJ5KSB7CiAgICAgIEpMaWJyYXJ5RW52IGVudiA9IG5ldyBKTGlicmFyeUVudi5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgSkxpYnJhcnlEYXRhIGRhdGEgPSBuZXcgSkxpYnJhcnlEYXRhLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBsaWJyYXJ5TWFwW2Vudi5saWJyYXJ5XSA9CiAgICAgICAgICBsaWJyYXJpZXMucmVnaXN0ZXJCeUluZGV4KGluZGV4LCBsaWJyYXJ5LCBkYXRhLCBlbnYpOwogICAgICBwcm9ncmFtRW52LnJlZ2lzdGVyTGlicmFyeShlbnYpOwogICAgICBhc3NlcnQoaW5kZXggPT0gbGlicmFyeS5saWJyYXJ5SW5kZXgpOwogICAgfSk7CiAgICBzb3VyY2UuZW5kKGxpYnJhcnlEYXRhVGFnKTsKCiAgICBzb3VyY2UuYmVnaW4oY2xhc3NEYXRhVGFnKTsKICAgIGVudGl0eUxvb2t1cC5mb3JFYWNoQ2xhc3MoKGludCBpbmRleCwgSkNsYXNzIGNscykgewogICAgICBKQ2xhc3NFbnYgZW52ID0gbmV3IEpDbGFzc0Vudi5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgSkNsYXNzRGF0YSBkYXRhID0gbmV3IEpDbGFzc0RhdGEucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNsYXNzTWFwW2Vudi5jbHNdID0gY2xhc3Nlcy5yZWdpc3RlckJ5SW5kZXgoaW5kZXgsIGNscywgZGF0YSwgZW52KTsKICAgICAgaWYgKGNscyBpcyEgSlJlY29yZCAmJiBjbHMgaXMhIEpDbG9zdXJlQ2xhc3MpIHsKICAgICAgICAvLyBTeW50aGVzaXplZCBjbGFzc2VzIGFyZSBub3QgcGFydCBvZiB0aGUgbGlicmFyeSBlbnZpcm9ubWVudC4KICAgICAgICBsaWJyYXJpZXMuZ2V0RW52KGNscy5saWJyYXJ5KS5yZWdpc3RlckNsYXNzKGNscy5uYW1lLCBlbnYpOwogICAgICB9CiAgICAgIGFzc2VydChpbmRleCA9PSBjbHMuY2xhc3NJbmRleCk7CiAgICB9KTsKICAgIHNvdXJjZS5lbmQoY2xhc3NEYXRhVGFnKTsKCiAgICBzb3VyY2UuYmVnaW4odHlwZWRlZkRhdGFUYWcpOwogICAgZW50aXR5TG9va3VwLmZvckVhY2hUeXBlZGVmKChpbnQgaW5kZXgsIEpUeXBlZGVmIHR5cGVkZWYpIHsKICAgICAgSlR5cGVkZWZEYXRhIGRhdGEgPSBuZXcgSlR5cGVkZWZEYXRhLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICB0eXBlZGVmTWFwW2RhdGEubm9kZV0gPSB0eXBlZGVmcy5yZWdpc3RlckJ5SW5kZXgoaW5kZXgsIHR5cGVkZWYsIGRhdGEpOwogICAgICBhc3NlcnQoaW5kZXggPT0gdHlwZWRlZi50eXBlZGVmSW5kZXgpOwogICAgfSk7CiAgICBzb3VyY2UuZW5kKHR5cGVkZWZEYXRhVGFnKTsKCiAgICBzb3VyY2UuYmVnaW4obWVtYmVyRGF0YVRhZyk7CiAgICBlbnRpdHlMb29rdXAuZm9yRWFjaE1lbWJlcigoaW50IGluZGV4LCBJbmRleGVkTWVtYmVyIG1lbWJlcikgewogICAgICBKTWVtYmVyRGF0YSBkYXRhID0gbmV3IEpNZW1iZXJEYXRhLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBtZW1iZXJzLnJlZ2lzdGVyQnlJbmRleChpbmRleCwgbWVtYmVyLCBkYXRhKTsKICAgICAgc3dpdGNoIChkYXRhLmRlZmluaXRpb24ua2luZCkgewogICAgICAgIGNhc2UgTWVtYmVyS2luZC5yZWd1bGFyOgogICAgICAgIGNhc2UgTWVtYmVyS2luZC5jb25zdHJ1Y3RvcjoKICAgICAgICAgIGlyLk1lbWJlciBub2RlID0gZGF0YS5kZWZpbml0aW9uLm5vZGU7CiAgICAgICAgICBpZiAobWVtYmVyLmlzRmllbGQpIHsKICAgICAgICAgICAgZmllbGRNYXBbbm9kZV0gPSBtZW1iZXI7CiAgICAgICAgICB9IGVsc2UgaWYgKG1lbWJlci5pc0NvbnN0cnVjdG9yKSB7CiAgICAgICAgICAgIGNvbnN0cnVjdG9yTWFwW25vZGVdID0gbWVtYmVyOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbWV0aG9kTWFwW25vZGVdID0gbWVtYmVyOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgfQogICAgICBhc3NlcnQoaW5kZXggPT0gbWVtYmVyLm1lbWJlckluZGV4KTsKICAgIH0pOwogICAgc291cmNlLmVuZChtZW1iZXJEYXRhVGFnKTsKCiAgICBzb3VyY2UuYmVnaW4odHlwZVZhcmlhYmxlRGF0YVRhZyk7CiAgICBlbnRpdHlMb29rdXAuZm9yRWFjaFR5cGVWYXJpYWJsZSgoaW50IGluZGV4LCBKVHlwZVZhcmlhYmxlIHR5cGVWYXJpYWJsZSkgewogICAgICBKVHlwZVZhcmlhYmxlRGF0YSBkYXRhID0gbmV3IEpUeXBlVmFyaWFibGVEYXRhLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICB0eXBlVmFyaWFibGVNYXBbZGF0YS5ub2RlXSA9CiAgICAgICAgICB0eXBlVmFyaWFibGVzLnJlZ2lzdGVyQnlJbmRleChpbmRleCwgdHlwZVZhcmlhYmxlLCBkYXRhKTsKICAgICAgYXNzZXJ0KGluZGV4ID09IHR5cGVWYXJpYWJsZS50eXBlVmFyaWFibGVJbmRleCk7CiAgICB9KTsKICAgIHNvdXJjZS5lbmQodHlwZVZhcmlhYmxlRGF0YVRhZyk7CgogICAgc291cmNlLmJlZ2luKG5lc3RlZENsb3N1cmVzVGFnKTsKICAgIF9uZXN0ZWRDbG9zdXJlTWFwLmFkZEFsbChzb3VyY2UucmVhZE1lbWJlck1hcCgKICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlcikgPT4gc291cmNlLnJlYWRNZW1iZXJzPEluZGV4ZWRGdW5jdGlvbj4oKSkpOwogICAgc291cmNlLmVuZChuZXN0ZWRDbG9zdXJlc1RhZyk7CgogICAgc291cmNlLmVuZCh0YWcpOwogIH0KCiAgLy8vIFByZXBhcmVzIHRoZSBlbnRpdHkgbWFwcyBmb3IgY29kZWdlbiBzZXJpYWxpemF0aW9uIGFuZCByZXR1cm5zIHRoZSBtZW1iZXIKICAvLy8gaW5kZXggbGltaXQgZm9yIGVhcmx5IG1lbWJlcnMuCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYWxsIGxhdGUgbWVtYmVycywgc3VjaCBhcyBjb25zdHJ1Y3RvciBib2RpZXMgYW5kCiAgLy8vIGdlbmVyYXRvciBib2RpZXMsIGFuZCBjbG9zZXMgdGhlIGVudGl0eSBtYXBzIGZvciBmdXJ0aGVyIHJlZ2lzdHJhdGlvbi4KICBpbnQgcHJlcGFyZUZvckNvZGVnZW5TZXJpYWxpemF0aW9uKCkgewogICAgaW50IGxlbmd0aCA9IG1lbWJlcnMubGVuZ3RoOwogICAgZm9yIChpbnQgbWVtYmVySW5kZXggPSAwOyBtZW1iZXJJbmRleCA8IGxlbmd0aDsgbWVtYmVySW5kZXgrKykgewogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gbWVtYmVycy5nZXRFbnRpdHkobWVtYmVySW5kZXgpOwogICAgICBpZiAobWVtYmVyID09IG51bGwpIGNvbnRpbnVlOwogICAgICBpZiAobWVtYmVyIGlzIEpHZW5lcmF0aXZlQ29uc3RydWN0b3IpIHsKICAgICAgICBnZXRDb25zdHJ1Y3RvckJvZHkobWVtYmVycy5nZXREYXRhKG1lbWJlcikuZGVmaW5pdGlvbi5ub2RlKTsKICAgICAgfQogICAgICBpZiAobWVtYmVyIGlzIEluZGV4ZWRGdW5jdGlvbiAmJiBtZW1iZXIuYXN5bmNNYXJrZXIgIT0gQXN5bmNNYXJrZXIuU1lOQykgewogICAgICAgIGdldEdlbmVyYXRvckJvZHkobWVtYmVyKTsKICAgICAgfQogICAgfQogICAgbGlicmFyaWVzLmNsb3NlKCk7CiAgICBjbGFzc2VzLmNsb3NlKCk7CiAgICBtZW1iZXJzLmNsb3NlKCk7CiAgICB0eXBlZGVmcy5jbG9zZSgpOwogICAgdHlwZVZhcmlhYmxlcy5jbG9zZSgpOwogICAgcmV0dXJuIGxlbmd0aDsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0pzVG9FbGVtZW50TWFwXSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwoKICAgIC8vIFNlcmlhbGl6ZSB0aGUgZW50aXRpZXMgYmVmb3JlIHNlcmlhbGl6aW5nIHRoZSBkYXRhLgogICAgc2luay5iZWdpbihsaWJyYXJ5VGFnKTsKICAgIHNpbmsud3JpdGVJbnQobGlicmFyaWVzLnNpemUpOwogICAgbGlicmFyaWVzLmZvckVhY2goKEpMaWJyYXJ5IGxpYnJhcnksIF8sIF9fKSB7CiAgICAgIHNpbmsud3JpdGVJbnQobGlicmFyeS5saWJyYXJ5SW5kZXgpOwogICAgICBsaWJyYXJ5LndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIH0pOwogICAgc2luay5lbmQobGlicmFyeVRhZyk7CgogICAgc2luay5iZWdpbihjbGFzc1RhZyk7CiAgICBzaW5rLndyaXRlSW50KGNsYXNzZXMuc2l6ZSk7CiAgICBjbGFzc2VzLmZvckVhY2goKEpDbGFzcyBjbHMsIF8sIF9fKSB7CiAgICAgIHNpbmsud3JpdGVJbnQoY2xzLmNsYXNzSW5kZXgpOwogICAgICBjbHMud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgfSk7CiAgICBzaW5rLmVuZChjbGFzc1RhZyk7CgogICAgc2luay5iZWdpbih0eXBlZGVmVGFnKTsKICAgIHNpbmsud3JpdGVJbnQodHlwZWRlZnMuc2l6ZSk7CiAgICB0eXBlZGVmcy5mb3JFYWNoKChKVHlwZWRlZiB0eXBlZGVmLCBfKSB7CiAgICAgIHNpbmsud3JpdGVJbnQodHlwZWRlZi50eXBlZGVmSW5kZXgpOwogICAgICB0eXBlZGVmLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIH0pOwogICAgc2luay5lbmQodHlwZWRlZlRhZyk7CgogICAgc2luay5iZWdpbihtZW1iZXJUYWcpOwogICAgc2luay53cml0ZUludChtZW1iZXJzLnNpemUpOwogICAgbWVtYmVycy5mb3JFYWNoKChKTWVtYmVyIG1lbWJlciwgXykgewogICAgICBzaW5rLndyaXRlSW50KG1lbWJlci5tZW1iZXJJbmRleCk7CiAgICAgIG1lbWJlci53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICB9KTsKICAgIHNpbmsuZW5kKG1lbWJlclRhZyk7CgogICAgc2luay5iZWdpbih0eXBlVmFyaWFibGVUYWcpOwogICAgc2luay53cml0ZUludCh0eXBlVmFyaWFibGVzLnNpemUpOwogICAgdHlwZVZhcmlhYmxlcy5mb3JFYWNoKChKVHlwZVZhcmlhYmxlIHR5cGVWYXJpYWJsZSwgXykgewogICAgICBzaW5rLndyaXRlSW50KHR5cGVWYXJpYWJsZS50eXBlVmFyaWFibGVJbmRleCk7CiAgICAgIHR5cGVWYXJpYWJsZS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICB9KTsKICAgIHNpbmsuZW5kKHR5cGVWYXJpYWJsZVRhZyk7CgogICAgLy8gU2VyaWFsaXplIHRoZSBlbnRpdHkgZGF0YSBhZnRlciBoYXZpbmcgc2VyaWFsaXplZCB0aGUgZW50aXRpZXMuCiAgICBzaW5rLmJlZ2luKGxpYnJhcnlEYXRhVGFnKTsKICAgIGxpYnJhcmllcy5mb3JFYWNoKChfLCBKTGlicmFyeURhdGEgZGF0YSwgSkxpYnJhcnlFbnYgZW52KSB7CiAgICAgIGVudi53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICAgIGRhdGEud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgfSk7CiAgICBzaW5rLmVuZChsaWJyYXJ5RGF0YVRhZyk7CgogICAgc2luay5iZWdpbihjbGFzc0RhdGFUYWcpOwogICAgY2xhc3Nlcy5mb3JFYWNoKChfLCBKQ2xhc3NEYXRhIGRhdGEsIEpDbGFzc0VudiBlbnYpIHsKICAgICAgZW52LndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgICAgZGF0YS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICB9KTsKICAgIHNpbmsuZW5kKGNsYXNzRGF0YVRhZyk7CgogICAgc2luay5iZWdpbih0eXBlZGVmRGF0YVRhZyk7CiAgICB0eXBlZGVmcy5mb3JFYWNoKChfLCBKVHlwZWRlZkRhdGEgZGF0YSkgewogICAgICBkYXRhLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIH0pOwogICAgc2luay5lbmQodHlwZWRlZkRhdGFUYWcpOwoKICAgIHNpbmsuYmVnaW4obWVtYmVyRGF0YVRhZyk7CiAgICBtZW1iZXJzLmZvckVhY2goKF8sIEpNZW1iZXJEYXRhIGRhdGEpIHsKICAgICAgZGF0YS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICB9KTsKICAgIHNpbmsuZW5kKG1lbWJlckRhdGFUYWcpOwoKICAgIHNpbmsuYmVnaW4odHlwZVZhcmlhYmxlRGF0YVRhZyk7CiAgICB0eXBlVmFyaWFibGVzLmZvckVhY2goKF8sIEpUeXBlVmFyaWFibGVEYXRhIGRhdGEpIHsKICAgICAgZGF0YS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICB9KTsKICAgIHNpbmsuZW5kKHR5cGVWYXJpYWJsZURhdGFUYWcpOwoKICAgIHNpbmsuYmVnaW4obmVzdGVkQ2xvc3VyZXNUYWcpOwogICAgc2luay53cml0ZU1lbWJlck1hcCgKICAgICAgICBfbmVzdGVkQ2xvc3VyZU1hcCwKICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlciwgTGlzdDxJbmRleGVkRnVuY3Rpb24+IGZ1bmN0aW9ucykgPT4KICAgICAgICAgICAgc2luay53cml0ZU1lbWJlcnMoZnVuY3Rpb25zKSk7CiAgICBzaW5rLmVuZChuZXN0ZWRDbG9zdXJlc1RhZyk7CgogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlcyBnZXQgdHlwZXMgPT4gX3R5cGVzOwoKICBAb3ZlcnJpZGUKICBKc0VsZW1lbnRFbnZpcm9ubWVudCBnZXQgZWxlbWVudEVudmlyb25tZW50ID0+IF9lbGVtZW50RW52aXJvbm1lbnQ7CgogIEBvdmVycmlkZQogIENvbW1vbkVsZW1lbnRzSW1wbCBnZXQgY29tbW9uRWxlbWVudHMgPT4gX2NvbW1vbkVsZW1lbnRzOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgX21haW5GdW5jdGlvbiB7CiAgICByZXR1cm4gcHJvZ3JhbUVudi5tYWluTWV0aG9kICE9IG51bGwKICAgICAgICA/IGdldE1ldGhvZEludGVybmFsKHByb2dyYW1FbnYubWFpbk1ldGhvZCkKICAgICAgICA6IG51bGw7CiAgfQoKICBMaWJyYXJ5RW50aXR5IGdldCBfbWFpbkxpYnJhcnkgewogICAgcmV0dXJuIHByb2dyYW1FbnYubWFpbk1ldGhvZCAhPSBudWxsCiAgICAgICAgPyBnZXRMaWJyYXJ5SW50ZXJuYWwocHJvZ3JhbUVudi5tYWluTWV0aG9kLmVuY2xvc2luZ0xpYnJhcnkpCiAgICAgICAgOiBudWxsOwogIH0KCiAgU291cmNlU3BhbiBnZXRTb3VyY2VTcGFuKFNwYW5uYWJsZSBzcGFubmFibGUsIEVudGl0eSBjdXJyZW50RWxlbWVudCkgewogICAgU291cmNlU3BhbiBmcm9tU3Bhbm5hYmxlKFNwYW5uYWJsZSBzcGFubmFibGUpIHsKICAgICAgaWYgKHNwYW5uYWJsZSBpcyBJbmRleGVkTGlicmFyeSAmJgogICAgICAgICAgc3Bhbm5hYmxlLmxpYnJhcnlJbmRleCA8IGxpYnJhcmllcy5sZW5ndGgpIHsKICAgICAgICBKTGlicmFyeUVudiBlbnYgPSBsaWJyYXJpZXMuZ2V0RW52KHNwYW5uYWJsZSk7CiAgICAgICAgcmV0dXJuIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKGVudi5saWJyYXJ5KTsKICAgICAgfSBlbHNlIGlmIChzcGFubmFibGUgaXMgSW5kZXhlZENsYXNzICYmCiAgICAgICAgICBzcGFubmFibGUuY2xhc3NJbmRleCA8IGNsYXNzZXMubGVuZ3RoKSB7CiAgICAgICAgSkNsYXNzRGF0YSBkYXRhID0gY2xhc3Nlcy5nZXREYXRhKHNwYW5uYWJsZSk7CiAgICAgICAgYXNzZXJ0KGRhdGEgIT0gbnVsbCwgIk5vIGRhdGEgZm9yICRzcGFubmFibGUgaW4gJHRoaXMiKTsKICAgICAgICByZXR1cm4gZGF0YS5kZWZpbml0aW9uLmxvY2F0aW9uOwogICAgICB9IGVsc2UgaWYgKHNwYW5uYWJsZSBpcyBJbmRleGVkTWVtYmVyICYmCiAgICAgICAgICBzcGFubmFibGUubWVtYmVySW5kZXggPCBtZW1iZXJzLmxlbmd0aCkgewogICAgICAgIEpNZW1iZXJEYXRhIGRhdGEgPSBtZW1iZXJzLmdldERhdGEoc3Bhbm5hYmxlKTsKICAgICAgICBhc3NlcnQoZGF0YSAhPSBudWxsLCAiTm8gZGF0YSBmb3IgJHNwYW5uYWJsZSBpbiAkdGhpcyIpOwogICAgICAgIHJldHVybiBkYXRhLmRlZmluaXRpb24ubG9jYXRpb247CiAgICAgIH0gZWxzZSBpZiAoc3Bhbm5hYmxlIGlzIEpMb2NhbCkgewogICAgICAgIHJldHVybiBnZXRTb3VyY2VTcGFuKHNwYW5uYWJsZS5tZW1iZXJDb250ZXh0LCBjdXJyZW50RWxlbWVudCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgU291cmNlU3BhbiBzb3VyY2VTcGFuID0gZnJvbVNwYW5uYWJsZShzcGFubmFibGUpOwogICAgc291cmNlU3BhbiA/Pz0gZnJvbVNwYW5uYWJsZShjdXJyZW50RWxlbWVudCk7CiAgICByZXR1cm4gc291cmNlU3BhbjsKICB9CgogIExpYnJhcnlFbnRpdHkgbG9va3VwTGlicmFyeShVcmkgdXJpKSB7CiAgICBKTGlicmFyeUVudiBsaWJyYXJ5RW52ID0gcHJvZ3JhbUVudi5sb29rdXBMaWJyYXJ5KHVyaSk7CiAgICBpZiAobGlicmFyeUVudiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBnZXRMaWJyYXJ5SW50ZXJuYWwobGlicmFyeUVudi5saWJyYXJ5LCBsaWJyYXJ5RW52KTsKICB9CgogIFN0cmluZyBfZ2V0TGlicmFyeU5hbWUoSW5kZXhlZExpYnJhcnkgbGlicmFyeSkgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGxpYnJhcnkpKTsKICAgIEpMaWJyYXJ5RW52IGxpYnJhcnlFbnYgPSBsaWJyYXJpZXMuZ2V0RW52KGxpYnJhcnkpOwogICAgcmV0dXJuIGxpYnJhcnlFbnYubGlicmFyeS5uYW1lID8/ICcnOwogIH0KCiAgTWVtYmVyRW50aXR5IGxvb2t1cExpYnJhcnlNZW1iZXIoSW5kZXhlZExpYnJhcnkgbGlicmFyeSwgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIHNldHRlcjogZmFsc2V9KSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkobGlicmFyeSkpOwogICAgSkxpYnJhcnlFbnYgbGlicmFyeUVudiA9IGxpYnJhcmllcy5nZXRFbnYobGlicmFyeSk7CiAgICBpci5NZW1iZXIgbWVtYmVyID0gbGlicmFyeUVudi5sb29rdXBNZW1iZXIobmFtZSwgc2V0dGVyOiBzZXR0ZXIpOwogICAgcmV0dXJuIG1lbWJlciAhPSBudWxsID8gZ2V0TWVtYmVyKG1lbWJlcikgOiBudWxsOwogIH0KCiAgdm9pZCBfZm9yRWFjaExpYnJhcnlNZW1iZXIoCiAgICAgIEluZGV4ZWRMaWJyYXJ5IGxpYnJhcnksIHZvaWQgZihNZW1iZXJFbnRpdHkgbWVtYmVyKSkgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGxpYnJhcnkpKTsKICAgIEpMaWJyYXJ5RW52IGxpYnJhcnlFbnYgPSBsaWJyYXJpZXMuZ2V0RW52KGxpYnJhcnkpOwogICAgbGlicmFyeUVudi5mb3JFYWNoTWVtYmVyKChpci5NZW1iZXIgbm9kZSkgewogICAgICBmKGdldE1lbWJlcihub2RlKSk7CiAgICB9KTsKICB9CgogIENsYXNzRW50aXR5IGxvb2t1cENsYXNzKEluZGV4ZWRMaWJyYXJ5IGxpYnJhcnksIFN0cmluZyBuYW1lKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkobGlicmFyeSkpOwogICAgSkxpYnJhcnlFbnYgbGlicmFyeUVudiA9IGxpYnJhcmllcy5nZXRFbnYobGlicmFyeSk7CiAgICBKQ2xhc3NFbnYgY2xhc3NFbnYgPSBsaWJyYXJ5RW52Lmxvb2t1cENsYXNzKG5hbWUpOwogICAgaWYgKGNsYXNzRW52ICE9IG51bGwpIHsKICAgICAgcmV0dXJuIGdldENsYXNzSW50ZXJuYWwoY2xhc3NFbnYuY2xzLCBjbGFzc0Vudik7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgX2ZvckVhY2hDbGFzcyhJbmRleGVkTGlicmFyeSBsaWJyYXJ5LCB2b2lkIGYoQ2xhc3NFbnRpdHkgY2xzKSkgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGxpYnJhcnkpKTsKICAgIEpMaWJyYXJ5RW52IGxpYnJhcnlFbnYgPSBsaWJyYXJpZXMuZ2V0RW52KGxpYnJhcnkpOwogICAgbGlicmFyeUVudi5mb3JFYWNoQ2xhc3MoKEpDbGFzc0VudiBjbGFzc0VudikgewogICAgICBpZiAoIWNsYXNzRW52LmlzVW5uYW1lZE1peGluQXBwbGljYXRpb24pIHsKICAgICAgICBmKGdldENsYXNzSW50ZXJuYWwoY2xhc3NFbnYuY2xzLCBjbGFzc0VudikpOwogICAgICB9CiAgICB9KTsKICB9CgogIE1lbWJlckVudGl0eSBsb29rdXBDbGFzc01lbWJlcihJbmRleGVkQ2xhc3MgY2xzLCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgc2V0dGVyOiBmYWxzZX0pIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEpDbGFzc0VudiBjbGFzc0VudiA9IGNsYXNzZXMuZ2V0RW52KGNscyk7CiAgICByZXR1cm4gY2xhc3NFbnYubG9va3VwTWVtYmVyKHRoaXMsIG5hbWUsIHNldHRlcjogc2V0dGVyKTsKICB9CgogIENvbnN0cnVjdG9yRW50aXR5IGxvb2t1cENvbnN0cnVjdG9yKEluZGV4ZWRDbGFzcyBjbHMsIFN0cmluZyBuYW1lKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBKQ2xhc3NFbnYgY2xhc3NFbnYgPSBjbGFzc2VzLmdldEVudihjbHMpOwogICAgcmV0dXJuIGNsYXNzRW52Lmxvb2t1cENvbnN0cnVjdG9yKHRoaXMsIG5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBjcmVhdGVJbnRlcmZhY2VUeXBlKAogICAgICBpci5DbGFzcyBjbHMsIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVHlwZShnZXRDbGFzcyhjbHMpLCBnZXREYXJ0VHlwZXModHlwZUFyZ3VtZW50cykpOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlicmFyeUVudGl0eSBnZXRMaWJyYXJ5KGlyLkxpYnJhcnkgbm9kZSkgPT4gZ2V0TGlicmFyeUludGVybmFsKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXRDbGFzcyhpci5DbGFzcyBub2RlKSA9PiBnZXRDbGFzc0ludGVybmFsKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldFN1cGVyVHlwZShJbmRleGVkQ2xhc3MgY2xzKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBKQ2xhc3NEYXRhIGRhdGEgPSBjbGFzc2VzLmdldERhdGEoY2xzKTsKICAgIF9lbnN1cmVTdXBlcnR5cGVzKGNscywgZGF0YSk7CiAgICByZXR1cm4gZGF0YS5zdXBlcnR5cGU7CiAgfQoKICB2b2lkIF9lbnN1cmVUaGlzQW5kUmF3VHlwZShDbGFzc0VudGl0eSBjbHMsIEpDbGFzc0RhdGEgZGF0YSkgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgaWYgKGRhdGEgaXMgSkNsYXNzRGF0YUltcGwgJiYgZGF0YS50aGlzVHlwZSA9PSBudWxsKSB7CiAgICAgIGlyLkNsYXNzIG5vZGUgPSBkYXRhLmNsczsKICAgICAgaWYgKG5vZGUudHlwZVBhcmFtZXRlcnMuaXNFbXB0eSkgewogICAgICAgIGRhdGEudGhpc1R5cGUgPQogICAgICAgICAgICBkYXRhLnJhd1R5cGUgPSBuZXcgSW50ZXJmYWNlVHlwZShjbHMsIGNvbnN0IDxEYXJ0VHlwZT5bXSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZGF0YS50aGlzVHlwZSA9IG5ldyBJbnRlcmZhY2VUeXBlKAogICAgICAgICAgICBjbHMsCiAgICAgICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPi5nZW5lcmF0ZShub2RlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCwKICAgICAgICAgICAgICAgIChpbnQgaW5kZXgpIHsKICAgICAgICAgICAgICByZXR1cm4gbmV3IFR5cGVWYXJpYWJsZVR5cGUoCiAgICAgICAgICAgICAgICAgIGdldFR5cGVWYXJpYWJsZUludGVybmFsKG5vZGUudHlwZVBhcmFtZXRlcnNbaW5kZXhdKSk7CiAgICAgICAgICAgIH0pKTsKICAgICAgICBkYXRhLnJhd1R5cGUgPSBuZXcgSW50ZXJmYWNlVHlwZSgKICAgICAgICAgICAgY2xzLAogICAgICAgICAgICBuZXcgTGlzdDxEYXJ0VHlwZT4uZmlsbGVkKAogICAgICAgICAgICAgICAgbm9kZS50eXBlUGFyYW1ldGVycy5sZW5ndGgsIGNvbnN0IER5bmFtaWNUeXBlKCkpKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZVZhcmlhYmxlRW50aXR5IGdldFR5cGVWYXJpYWJsZShpci5UeXBlUGFyYW1ldGVyIG5vZGUpID0+CiAgICAgIGdldFR5cGVWYXJpYWJsZUludGVybmFsKG5vZGUpOwoKICB2b2lkIF9lbnN1cmVTdXBlcnR5cGVzKENsYXNzRW50aXR5IGNscywgSkNsYXNzRGF0YSBkYXRhKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBpZiAoZGF0YSBpcyBKQ2xhc3NEYXRhSW1wbCAmJiBkYXRhLm9yZGVyZWRUeXBlU2V0ID09IG51bGwpIHsKICAgICAgX2Vuc3VyZVRoaXNBbmRSYXdUeXBlKGNscywgZGF0YSk7CgogICAgICBpci5DbGFzcyBub2RlID0gZGF0YS5jbHM7CgogICAgICBpZiAobm9kZS5zdXBlcnR5cGUgPT0gbnVsbCkgewogICAgICAgIGRhdGEub3JkZXJlZFR5cGVTZXQgPSBuZXcgT3JkZXJlZFR5cGVTZXQuc2luZ2xldG9uKGRhdGEudGhpc1R5cGUpOwogICAgICAgIGRhdGEuaXNNaXhpbkFwcGxpY2F0aW9uID0gZmFsc2U7CiAgICAgICAgZGF0YS5pbnRlcmZhY2VzID0gY29uc3QgPEludGVyZmFjZVR5cGU+W107CiAgICAgIH0gZWxzZSB7CiAgICAgICAgSW50ZXJmYWNlVHlwZSBwcm9jZXNzU3VwZXJ0eXBlKGlyLlN1cGVydHlwZSBub2RlKSB7CiAgICAgICAgICBJbnRlcmZhY2VUeXBlIHN1cGVydHlwZSA9IF90eXBlQ29udmVydGVyLnZpc2l0U3VwZXJ0eXBlKG5vZGUpOwogICAgICAgICAgSW5kZXhlZENsYXNzIHN1cGVyY2xhc3MgPSBzdXBlcnR5cGUuZWxlbWVudDsKICAgICAgICAgIEpDbGFzc0RhdGEgc3VwZXJkYXRhID0gY2xhc3Nlcy5nZXREYXRhKHN1cGVyY2xhc3MpOwogICAgICAgICAgX2Vuc3VyZVN1cGVydHlwZXMoc3VwZXJjbGFzcywgc3VwZXJkYXRhKTsKICAgICAgICAgIHJldHVybiBzdXBlcnR5cGU7CiAgICAgICAgfQoKICAgICAgICBJbnRlcmZhY2VUeXBlIHN1cGVydHlwZTsKICAgICAgICBMaW5rQnVpbGRlcjxJbnRlcmZhY2VUeXBlPiBsaW5rQnVpbGRlciA9CiAgICAgICAgICAgIG5ldyBMaW5rQnVpbGRlcjxJbnRlcmZhY2VUeXBlPigpOwogICAgICAgIGlmIChub2RlLmlzTWl4aW5EZWNsYXJhdGlvbikgewogICAgICAgICAgLy8gQSBtaXhpbiBkZWNsYXJhdGlvbgogICAgICAgICAgLy8KICAgICAgICAgIC8vICAgbWl4aW4gTSBvbiBBLCBCLCBDIHt9CiAgICAgICAgICAvLwogICAgICAgICAgLy8gaXMgZW5jb2RlZCBieSBDRkUgYXMKICAgICAgICAgIC8vCiAgICAgICAgICAvLyAgIGFic3RyYWN0IGNsYXNzIE0gZXh0ZW5kcyBBIGltcGxlbWVudHMgQiwgQyB7fQogICAgICAgICAgLy8gICBhYnN0cmFjdCBjbGFzcyBNIGV4dGVuZHMgQSZCJkMge30KICAgICAgICAgIC8vCiAgICAgICAgICAvLyBidXQgd2UgZW5jb2RlIGl0IGFzCiAgICAgICAgICAvLwogICAgICAgICAgLy8gICBhYnN0cmFjdCBjbGFzcyBNIGV4dGVuZHMgT2JqZWN0IGltcGxlbWVudHMgQSwgQiwgQyB7fQogICAgICAgICAgLy8KICAgICAgICAgIC8vIHNvIHdlIG5lZWQgZ2V0IHRoZSBzdXBlcmNsYXNzZXMgZnJvbSB0aGUgb24tY2xhdXNlLCBBLCBCLCBhbmQgQywKICAgICAgICAgIC8vIHRocm91Z2ggW3N1cGVyY2xhc3NDb25zdHJhaW50c10uCiAgICAgICAgICBmb3IgKGlyLlN1cGVydHlwZSBjb25zdHJhaW50IGluIG5vZGUuc3VwZXJjbGFzc0NvbnN0cmFpbnRzKCkpIHsKICAgICAgICAgICAgbGlua0J1aWxkZXIuYWRkTGFzdChwcm9jZXNzU3VwZXJ0eXBlKGNvbnN0cmFpbnQpKTsKICAgICAgICAgIH0KICAgICAgICAgIC8vIFNldCBzdXBlcmNsYXNzIHRvIGBPYmplY3RgLgogICAgICAgICAgc3VwZXJ0eXBlID0gX2NvbW1vbkVsZW1lbnRzLm9iamVjdFR5cGU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN1cGVydHlwZSA9IHByb2Nlc3NTdXBlcnR5cGUobm9kZS5zdXBlcnR5cGUpOwogICAgICAgIH0KICAgICAgICBpZiAoc3VwZXJ0eXBlID09IF9jb21tb25FbGVtZW50cy5vYmplY3RUeXBlKSB7CiAgICAgICAgICBDbGFzc0VudGl0eSBkZWZhdWx0U3VwZXJjbGFzcyA9CiAgICAgICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmdldERlZmF1bHRTdXBlcmNsYXNzKGNscywgbmF0aXZlRGF0YSk7CiAgICAgICAgICBkYXRhLnN1cGVydHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0UmF3VHlwZShkZWZhdWx0U3VwZXJjbGFzcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGRhdGEuc3VwZXJ0eXBlID0gc3VwZXJ0eXBlOwogICAgICAgIH0KICAgICAgICBpZiAobm9kZS5taXhlZEluVHlwZSAhPSBudWxsKSB7CiAgICAgICAgICBkYXRhLmlzTWl4aW5BcHBsaWNhdGlvbiA9IHRydWU7CiAgICAgICAgICBsaW5rQnVpbGRlcgogICAgICAgICAgICAgIC5hZGRMYXN0KGRhdGEubWl4ZWRJblR5cGUgPSBwcm9jZXNzU3VwZXJ0eXBlKG5vZGUubWl4ZWRJblR5cGUpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGF0YS5pc01peGluQXBwbGljYXRpb24gPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgbm9kZS5pbXBsZW1lbnRlZFR5cGVzLmZvckVhY2goKGlyLlN1cGVydHlwZSBzdXBlcnR5cGUpIHsKICAgICAgICAgIGxpbmtCdWlsZGVyLmFkZExhc3QocHJvY2Vzc1N1cGVydHlwZShzdXBlcnR5cGUpKTsKICAgICAgICB9KTsKICAgICAgICBMaW5rPEludGVyZmFjZVR5cGU+IGludGVyZmFjZXMgPQogICAgICAgICAgICBsaW5rQnVpbGRlci50b0xpbmsoY29uc3QgTGluazxJbnRlcmZhY2VUeXBlPigpKTsKICAgICAgICBPcmRlcmVkVHlwZVNldEJ1aWxkZXIgc2V0QnVpbGRlciA9CiAgICAgICAgICAgIG5ldyBLZXJuZWxPcmRlcmVkVHlwZVNldEJ1aWxkZXIodGhpcywgY2xzKTsKICAgICAgICBkYXRhLm9yZGVyZWRUeXBlU2V0ID0gc2V0QnVpbGRlci5jcmVhdGVPcmRlcmVkVHlwZVNldCgKICAgICAgICAgICAgZGF0YS5zdXBlcnR5cGUsIGludGVyZmFjZXMucmV2ZXJzZShjb25zdCBMaW5rPEludGVyZmFjZVR5cGU+KCkpKTsKICAgICAgICBkYXRhLmludGVyZmFjZXMgPSBuZXcgTGlzdDxJbnRlcmZhY2VUeXBlPi5mcm9tKGludGVyZmFjZXMudG9MaXN0KCkpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlZGVmVHlwZSBnZXRUeXBlZGVmVHlwZShpci5UeXBlZGVmIG5vZGUpIHsKICAgIEluZGV4ZWRUeXBlZGVmIHR5cGVkZWYgPSBnZXRUeXBlZGVmSW50ZXJuYWwobm9kZSk7CiAgICByZXR1cm4gdHlwZWRlZnMuZ2V0RGF0YSh0eXBlZGVmKS5yYXdUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyRW50aXR5IGdldE1lbWJlcihpci5NZW1iZXIgbm9kZSkgewogICAgaWYgKG5vZGUgaXMgaXIuRmllbGQpIHsKICAgICAgcmV0dXJuIGdldEZpZWxkSW50ZXJuYWwobm9kZSk7CiAgICB9IGVsc2UgaWYgKG5vZGUgaXMgaXIuQ29uc3RydWN0b3IpIHsKICAgICAgcmV0dXJuIGdldENvbnN0cnVjdG9ySW50ZXJuYWwobm9kZSk7CiAgICB9IGVsc2UgaWYgKG5vZGUgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICAgIGlmIChub2RlLmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5GYWN0b3J5KSB7CiAgICAgICAgcmV0dXJuIGdldENvbnN0cnVjdG9ySW50ZXJuYWwobm9kZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGdldE1ldGhvZEludGVybmFsKG5vZGUpOwogICAgICB9CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBtZW1iZXI6ICRub2RlIik7CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXJFbnRpdHkgZ2V0U3VwZXJNZW1iZXIoTWVtYmVyRW50aXR5IGNvbnRleHQsIGlyLk5hbWUgbmFtZSwKICAgICAge2Jvb2wgc2V0dGVyOiBmYWxzZX0pIHsKICAgIC8vIFdlIGNhbiBubyBsb25nZXIgdHJ1c3QgdGhlIGludGVyZmFjZSB0YXJnZXQgb2YgdGhlIHN1cGVyIGFjY2VzcyBzaW5jZSBpdAogICAgLy8gbWlnaHQgYmUgYSBtZW1iZXIgdGhhdCB3ZSBoYXZlIGNsb25lZC4KICAgIENsYXNzRW50aXR5IGNscyA9IGdldE1lbWJlclRoaXNUeXBlKGNvbnRleHQpLmVsZW1lbnQ7CiAgICBhc3NlcnQoCiAgICAgICAgY2xzICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoY29udGV4dCwKICAgICAgICAgICAgIk5vIGVuY2xvc2luZyBjbGFzcyBmb3Igc3VwZXIgbWVtYmVyIGFjY2VzcyBpbiAkY29udGV4dC4iKSk7CiAgICBJbmRleGVkQ2xhc3Mgc3VwZXJjbGFzcyA9IGdldFN1cGVyVHlwZShjbHMpPy5lbGVtZW50OwogICAgd2hpbGUgKHN1cGVyY2xhc3MgIT0gbnVsbCkgewogICAgICBKQ2xhc3NFbnYgZW52ID0gY2xhc3Nlcy5nZXRFbnYoc3VwZXJjbGFzcyk7CiAgICAgIE1lbWJlckVudGl0eSBzdXBlck1lbWJlciA9CiAgICAgICAgICBlbnYubG9va3VwTWVtYmVyKHRoaXMsIG5hbWUubmFtZSwgc2V0dGVyOiBzZXR0ZXIpOwogICAgICBpZiAoc3VwZXJNZW1iZXIgIT0gbnVsbCkgewogICAgICAgIGlmICghc3VwZXJNZW1iZXIuaXNJbnN0YW5jZU1lbWJlcikgcmV0dXJuIG51bGw7CiAgICAgICAgaWYgKCFzdXBlck1lbWJlci5pc0Fic3RyYWN0KSB7CiAgICAgICAgICByZXR1cm4gc3VwZXJNZW1iZXI7CiAgICAgICAgfQogICAgICB9CiAgICAgIHN1cGVyY2xhc3MgPSBnZXRTdXBlclR5cGUoc3VwZXJjbGFzcyk/LmVsZW1lbnQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIENvbnN0cnVjdG9yRW50aXR5IGdldENvbnN0cnVjdG9yKGlyLk1lbWJlciBub2RlKSA9PgogICAgICBnZXRDb25zdHJ1Y3RvckludGVybmFsKG5vZGUpOwoKICBDb25zdHJ1Y3RvckVudGl0eSBnZXRTdXBlckNvbnN0cnVjdG9yKAogICAgICBpci5Db25zdHJ1Y3RvciBzb3VyY2VOb2RlLCBpci5NZW1iZXIgdGFyZ2V0Tm9kZSkgewogICAgQ29uc3RydWN0b3JFbnRpdHkgc291cmNlID0gZ2V0Q29uc3RydWN0b3Ioc291cmNlTm9kZSk7CiAgICBDbGFzc0VudGl0eSBzb3VyY2VDbGFzcyA9IHNvdXJjZS5lbmNsb3NpbmdDbGFzczsKICAgIENvbnN0cnVjdG9yRW50aXR5IHRhcmdldCA9IGdldENvbnN0cnVjdG9yKHRhcmdldE5vZGUpOwogICAgQ2xhc3NFbnRpdHkgdGFyZ2V0Q2xhc3MgPSB0YXJnZXQuZW5jbG9zaW5nQ2xhc3M7CiAgICBJbmRleGVkQ2xhc3Mgc3VwZXJDbGFzcyA9IGdldFN1cGVyVHlwZShzb3VyY2VDbGFzcyk/LmVsZW1lbnQ7CiAgICBpZiAoc3VwZXJDbGFzcyA9PSB0YXJnZXRDbGFzcykgewogICAgICByZXR1cm4gdGFyZ2V0OwogICAgfQogICAgSkNsYXNzRW52IGVudiA9IGNsYXNzZXMuZ2V0RW52KHN1cGVyQ2xhc3MpOwogICAgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IgPSBlbnYubG9va3VwQ29uc3RydWN0b3IodGhpcywgdGFyZ2V0Lm5hbWUpOwogICAgaWYgKGNvbnN0cnVjdG9yICE9IG51bGwpIHsKICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOwogICAgfQogICAgdGhyb3cgZmFpbGVkQXQoc291cmNlLCAiU3VwZXIgY29uc3RydWN0b3IgZm9yICRzb3VyY2Ugbm90IGZvdW5kLiIpOwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0TWV0aG9kKGlyLlByb2NlZHVyZSBub2RlKSA9PiBnZXRNZXRob2RJbnRlcm5hbChub2RlKTsKCiAgQG92ZXJyaWRlCiAgRmllbGRFbnRpdHkgZ2V0RmllbGQoaXIuRmllbGQgbm9kZSkgPT4gZ2V0RmllbGRJbnRlcm5hbChub2RlKTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0RGFydFR5cGUoaXIuRGFydFR5cGUgdHlwZSkgPT4gX3R5cGVDb252ZXJ0ZXIuY29udmVydCh0eXBlKTsKCiAgQG92ZXJyaWRlCiAgVHlwZVZhcmlhYmxlVHlwZSBnZXRUeXBlVmFyaWFibGVUeXBlKGlyLlR5cGVQYXJhbWV0ZXJUeXBlIHR5cGUpID0+CiAgICAgIGdldERhcnRUeXBlKHR5cGUpOwoKICBAb3ZlcnJpZGUKICBMaXN0PERhcnRUeXBlPiBnZXREYXJ0VHlwZXMoTGlzdDxpci5EYXJ0VHlwZT4gdHlwZXMpIHsKICAgIExpc3Q8RGFydFR5cGU+IGxpc3QgPSA8RGFydFR5cGU+W107CiAgICB0eXBlcy5mb3JFYWNoKChpci5EYXJ0VHlwZSB0eXBlKSB7CiAgICAgIGxpc3QuYWRkKGdldERhcnRUeXBlKHR5cGUpKTsKICAgIH0pOwogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldEludGVyZmFjZVR5cGUoaXIuSW50ZXJmYWNlVHlwZSB0eXBlKSA9PgogICAgICBfdHlwZUNvbnZlcnRlci5jb252ZXJ0KHR5cGUpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvblR5cGUgZ2V0RnVuY3Rpb25UeXBlKGlyLkZ1bmN0aW9uTm9kZSBub2RlKSB7CiAgICBEYXJ0VHlwZSByZXR1cm5UeXBlOwogICAgaWYgKG5vZGUucGFyZW50IGlzIGlyLkNvbnN0cnVjdG9yKSB7CiAgICAgIC8vIFRoZSByZXR1cm4gdHlwZSBvbiBnZW5lcmF0aXZlIGNvbnN0cnVjdG9ycyBpcyBgdm9pZGAsIGJ1dCB3ZSBuZWVkCiAgICAgIC8vIGBkeW5hbWljYCB0eXBlIHRvIG1hdGNoIHRoZSBlbGVtZW50IG1vZGVsLgogICAgICByZXR1cm5UeXBlID0gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVyblR5cGUgPSBnZXREYXJ0VHlwZShub2RlLnJldHVyblR5cGUpOwogICAgfQogICAgTGlzdDxEYXJ0VHlwZT4gcGFyYW1ldGVyVHlwZXMgPSA8RGFydFR5cGU+W107CiAgICBMaXN0PERhcnRUeXBlPiBvcHRpb25hbFBhcmFtZXRlclR5cGVzID0gPERhcnRUeXBlPltdOwoKICAgIERhcnRUeXBlIGdldFBhcmFtZXRlclR5cGUoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSkgewogICAgICBpZiAodmFyaWFibGUuaXNDb3ZhcmlhbnQgfHwgdmFyaWFibGUuaXNHZW5lcmljQ292YXJpYW50SW1wbCkgewogICAgICAgIC8vIEEgY292YXJpYW50IHBhcmFtZXRlciBoYXMgdHlwZSBgT2JqZWN0YCBpbiB0aGUgbWV0aG9kIHNpZ25hdHVyZS4KICAgICAgICByZXR1cm4gY29tbW9uRWxlbWVudHMub2JqZWN0VHlwZTsKICAgICAgfQogICAgICByZXR1cm4gZ2V0RGFydFR5cGUodmFyaWFibGUudHlwZSk7CiAgICB9CgogICAgZm9yIChpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlIGluIG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMpIHsKICAgICAgaWYgKHBhcmFtZXRlclR5cGVzLmxlbmd0aCA9PSBub2RlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpIHsKICAgICAgICBvcHRpb25hbFBhcmFtZXRlclR5cGVzLmFkZChnZXRQYXJhbWV0ZXJUeXBlKHZhcmlhYmxlKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcGFyYW1ldGVyVHlwZXMuYWRkKGdldFBhcmFtZXRlclR5cGUodmFyaWFibGUpKTsKICAgICAgfQogICAgfQogICAgTGlzdDxTdHJpbmc+IG5hbWVkUGFyYW1ldGVycyA9IDxTdHJpbmc+W107CiAgICBMaXN0PERhcnRUeXBlPiBuYW1lZFBhcmFtZXRlclR5cGVzID0gPERhcnRUeXBlPltdOwogICAgTGlzdDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBzb3J0ZWROYW1lZFBhcmFtZXRlcnMgPQogICAgICAgIG5vZGUubmFtZWRQYXJhbWV0ZXJzLnRvTGlzdCgpLi5zb3J0KChhLCBiKSA9PiBhLm5hbWUuY29tcGFyZVRvKGIubmFtZSkpOwogICAgZm9yIChpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlIGluIHNvcnRlZE5hbWVkUGFyYW1ldGVycykgewogICAgICBuYW1lZFBhcmFtZXRlcnMuYWRkKHZhcmlhYmxlLm5hbWUpOwogICAgICBuYW1lZFBhcmFtZXRlclR5cGVzLmFkZChnZXRQYXJhbWV0ZXJUeXBlKHZhcmlhYmxlKSk7CiAgICB9CiAgICBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiB0eXBlVmFyaWFibGVzOwogICAgaWYgKG5vZGUudHlwZVBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgewogICAgICBMaXN0PERhcnRUeXBlPiB0eXBlUGFyYW1ldGVycyA9IDxEYXJ0VHlwZT5bXTsKICAgICAgZm9yIChpci5UeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIgaW4gbm9kZS50eXBlUGFyYW1ldGVycykgewogICAgICAgIHR5cGVQYXJhbWV0ZXJzCiAgICAgICAgICAgIC5hZGQoZ2V0RGFydFR5cGUobmV3IGlyLlR5cGVQYXJhbWV0ZXJUeXBlKHR5cGVQYXJhbWV0ZXIpKSk7CiAgICAgIH0KICAgICAgdHlwZVZhcmlhYmxlcyA9IG5ldyBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPi5nZW5lcmF0ZSgKICAgICAgICAgIG5vZGUudHlwZVBhcmFtZXRlcnMubGVuZ3RoLAogICAgICAgICAgKGludCBpbmRleCkgPT4gbmV3IEZ1bmN0aW9uVHlwZVZhcmlhYmxlKGluZGV4KSk7CgogICAgICBEYXJ0VHlwZSBzdWJzdChEYXJ0VHlwZSB0eXBlKSB7CiAgICAgICAgcmV0dXJuIHR5cGUuc3Vic3QodHlwZVZhcmlhYmxlcywgdHlwZVBhcmFtZXRlcnMpOwogICAgICB9CgogICAgICByZXR1cm5UeXBlID0gc3Vic3QocmV0dXJuVHlwZSk7CiAgICAgIHBhcmFtZXRlclR5cGVzID0gcGFyYW1ldGVyVHlwZXMubWFwKHN1YnN0KS50b0xpc3QoKTsKICAgICAgb3B0aW9uYWxQYXJhbWV0ZXJUeXBlcyA9IG9wdGlvbmFsUGFyYW1ldGVyVHlwZXMubWFwKHN1YnN0KS50b0xpc3QoKTsKICAgICAgbmFtZWRQYXJhbWV0ZXJUeXBlcyA9IG5hbWVkUGFyYW1ldGVyVHlwZXMubWFwKHN1YnN0KS50b0xpc3QoKTsKICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHR5cGVWYXJpYWJsZXMubGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgICAgdHlwZVZhcmlhYmxlc1tpbmRleF0uYm91bmQgPQogICAgICAgICAgICBzdWJzdChnZXREYXJ0VHlwZShub2RlLnR5cGVQYXJhbWV0ZXJzW2luZGV4XS5ib3VuZCkpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB0eXBlVmFyaWFibGVzID0gY29uc3QgPEZ1bmN0aW9uVHlwZVZhcmlhYmxlPltdOwogICAgfQoKICAgIHJldHVybiBuZXcgRnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIHBhcmFtZXRlclR5cGVzLCBvcHRpb25hbFBhcmFtZXRlclR5cGVzLAogICAgICAgIG5hbWVkUGFyYW1ldGVycywgbmFtZWRQYXJhbWV0ZXJUeXBlcywgdHlwZVZhcmlhYmxlcyk7CiAgfQoKICBDb25zdGFudFZhbHVlIGNvbXB1dGVDb25zdGFudFZhbHVlKAogICAgICBTcGFubmFibGUgc3Bhbm5hYmxlLCBDb25zdGFudEV4cHJlc3Npb24gY29uc3RhbnQsCiAgICAgIHtib29sIHJlcXVpcmVDb25zdGFudDogdHJ1ZX0pIHsKICAgIHJldHVybiBfY29uc3RhbnRFbnZpcm9ubWVudC5fZ2V0Q29uc3RhbnRWYWx1ZShzcGFubmFibGUsIGNvbnN0YW50LAogICAgICAgIGNvbnN0YW50UmVxdWlyZWQ6IHJlcXVpcmVDb25zdGFudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBzdWJzdEJ5Q29udGV4dChEYXJ0VHlwZSB0eXBlLCBJbnRlcmZhY2VUeXBlIGNvbnRleHQpIHsKICAgIHJldHVybiB0eXBlLnN1YnN0KAogICAgICAgIGNvbnRleHQudHlwZUFyZ3VtZW50cywgZ2V0VGhpc1R5cGUoY29udGV4dC5lbGVtZW50KS50eXBlQXJndW1lbnRzKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBgY2FsbGAgbWV0aG9kIG9uICd0eXBlJy4KICAvLy8KICAvLy8gSWYgW3R5cGVdIGRvZXNuJ3QgaGF2ZSBhIGBjYWxsYCBtZW1iZXIgYG51bGxgIGlzIHJldHVybmVkLiBJZiBbdHlwZV0gaGFzCiAgLy8vIGFuIGludmFsaWQgYGNhbGxgIG1lbWJlciAobm9uLW1ldGhvZCBvciBhIHN5bnRoZXNpemVkIG1ldGhvZCB3aXRoIGJvdGgKICAvLy8gb3B0aW9uYWwgYW5kIG5hbWVkIHBhcmFtZXRlcnMpIGEgW0R5bmFtaWNUeXBlXSBpcyByZXR1cm5lZC4KICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRDYWxsVHlwZShJbnRlcmZhY2VUeXBlIHR5cGUpIHsKICAgIEluZGV4ZWRDbGFzcyBjbHMgPSB0eXBlLmVsZW1lbnQ7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBKQ2xhc3NEYXRhIGRhdGEgPSBjbGFzc2VzLmdldERhdGEoY2xzKTsKICAgIGlmIChkYXRhLmNhbGxUeXBlICE9IG51bGwpIHsKICAgICAgcmV0dXJuIHN1YnN0QnlDb250ZXh0KGRhdGEuY2FsbFR5cGUsIHR5cGUpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldFRoaXNUeXBlKEluZGV4ZWRDbGFzcyBjbHMpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEpDbGFzc0RhdGEgZGF0YSA9IGNsYXNzZXMuZ2V0RGF0YShjbHMpOwogICAgX2Vuc3VyZVRoaXNBbmRSYXdUeXBlKGNscywgZGF0YSk7CiAgICByZXR1cm4gZGF0YS50aGlzVHlwZTsKICB9CgogIEludGVyZmFjZVR5cGUgX2dldFJhd1R5cGUoSW5kZXhlZENsYXNzIGNscykgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgSkNsYXNzRGF0YSBkYXRhID0gY2xhc3Nlcy5nZXREYXRhKGNscyk7CiAgICBfZW5zdXJlVGhpc0FuZFJhd1R5cGUoY2xzLCBkYXRhKTsKICAgIHJldHVybiBkYXRhLnJhd1R5cGU7CiAgfQoKICBGdW5jdGlvblR5cGUgX2dldEZ1bmN0aW9uVHlwZShJbmRleGVkRnVuY3Rpb24gZnVuY3Rpb24pIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShmdW5jdGlvbikpOwogICAgRnVuY3Rpb25EYXRhIGRhdGEgPSBtZW1iZXJzLmdldERhdGEoZnVuY3Rpb24pOwogICAgcmV0dXJuIGRhdGEuZ2V0RnVuY3Rpb25UeXBlKHRoaXMpOwogIH0KCiAgTGlzdDxUeXBlVmFyaWFibGVUeXBlPiBfZ2V0RnVuY3Rpb25UeXBlVmFyaWFibGVzKEluZGV4ZWRGdW5jdGlvbiBmdW5jdGlvbikgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGZ1bmN0aW9uKSk7CiAgICBGdW5jdGlvbkRhdGEgZGF0YSA9IG1lbWJlcnMuZ2V0RGF0YShmdW5jdGlvbik7CiAgICByZXR1cm4gZGF0YS5nZXRGdW5jdGlvblR5cGVWYXJpYWJsZXModGhpcyk7CiAgfQoKICBEYXJ0VHlwZSBfZ2V0RmllbGRUeXBlKEluZGV4ZWRGaWVsZCBmaWVsZCkgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGZpZWxkKSk7CiAgICBKRmllbGREYXRhIGRhdGEgPSBtZW1iZXJzLmdldERhdGEoZmllbGQpOwogICAgcmV0dXJuIGRhdGEuZ2V0RmllbGRUeXBlKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0VHlwZVZhcmlhYmxlQm91bmQoSW5kZXhlZFR5cGVWYXJpYWJsZSB0eXBlVmFyaWFibGUpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseSh0eXBlVmFyaWFibGUpKTsKICAgIEpUeXBlVmFyaWFibGVEYXRhIGRhdGEgPSB0eXBlVmFyaWFibGVzLmdldERhdGEodHlwZVZhcmlhYmxlKTsKICAgIHJldHVybiBkYXRhLmdldEJvdW5kKHRoaXMpOwogIH0KCiAgRGFydFR5cGUgX2dldFR5cGVWYXJpYWJsZURlZmF1bHRUeXBlKEluZGV4ZWRUeXBlVmFyaWFibGUgdHlwZVZhcmlhYmxlKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkodHlwZVZhcmlhYmxlKSk7CiAgICBKVHlwZVZhcmlhYmxlRGF0YSBkYXRhID0gdHlwZVZhcmlhYmxlcy5nZXREYXRhKHR5cGVWYXJpYWJsZSk7CiAgICByZXR1cm4gZGF0YS5nZXREZWZhdWx0VHlwZSh0aGlzKTsKICB9CgogIENsYXNzRW50aXR5IGdldEFwcGxpZWRNaXhpbihJbmRleGVkQ2xhc3MgY2xzKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBKQ2xhc3NEYXRhIGRhdGEgPSBjbGFzc2VzLmdldERhdGEoY2xzKTsKICAgIF9lbnN1cmVTdXBlcnR5cGVzKGNscywgZGF0YSk7CiAgICByZXR1cm4gZGF0YS5taXhlZEluVHlwZT8uZWxlbWVudDsKICB9CgogIGJvb2wgX2lzTWl4aW5BcHBsaWNhdGlvbihJbmRleGVkQ2xhc3MgY2xzKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBKQ2xhc3NEYXRhIGRhdGEgPSBjbGFzc2VzLmdldERhdGEoY2xzKTsKICAgIF9lbnN1cmVTdXBlcnR5cGVzKGNscywgZGF0YSk7CiAgICByZXR1cm4gZGF0YS5pc01peGluQXBwbGljYXRpb247CiAgfQoKICBib29sIF9pc1VubmFtZWRNaXhpbkFwcGxpY2F0aW9uKEluZGV4ZWRDbGFzcyBjbHMpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEpDbGFzc0VudiBlbnYgPSBjbGFzc2VzLmdldEVudihjbHMpOwogICAgcmV0dXJuIGVudi5pc1VubmFtZWRNaXhpbkFwcGxpY2F0aW9uOwogIH0KCiAgYm9vbCBfaXNTdXBlck1peGluQXBwbGljYXRpb24oSW5kZXhlZENsYXNzIGNscykgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgSkNsYXNzRW52IGVudiA9IGNsYXNzZXMuZ2V0RW52KGNscyk7CiAgICByZXR1cm4gZW52LmlzU3VwZXJNaXhpbkFwcGxpY2F0aW9uOwogIH0KCiAgdm9pZCBfZm9yRWFjaFN1cGVydHlwZShJbmRleGVkQ2xhc3MgY2xzLCB2b2lkIGYoSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUpKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBKQ2xhc3NEYXRhIGRhdGEgPSBjbGFzc2VzLmdldERhdGEoY2xzKTsKICAgIF9lbnN1cmVTdXBlcnR5cGVzKGNscywgZGF0YSk7CiAgICBkYXRhLm9yZGVyZWRUeXBlU2V0LnN1cGVydHlwZXMuZm9yRWFjaChmKTsKICB9CgogIHZvaWQgX2ZvckVhY2hDb25zdHJ1Y3RvcihJbmRleGVkQ2xhc3MgY2xzLCB2b2lkIGYoQ29uc3RydWN0b3JFbnRpdHkgbWVtYmVyKSkgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgSkNsYXNzRW52IGVudiA9IGNsYXNzZXMuZ2V0RW52KGNscyk7CiAgICBlbnYuZm9yRWFjaENvbnN0cnVjdG9yKHRoaXMsIGYpOwogIH0KCiAgdm9pZCBfZm9yRWFjaExvY2FsQ2xhc3NNZW1iZXIoSW5kZXhlZENsYXNzIGNscywgdm9pZCBmKE1lbWJlckVudGl0eSBtZW1iZXIpKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBKQ2xhc3NFbnYgZW52ID0gY2xhc3Nlcy5nZXRFbnYoY2xzKTsKICAgIGVudi5mb3JFYWNoTWVtYmVyKHRoaXMsIChNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgIGYobWVtYmVyKTsKICAgIH0pOwogIH0KCiAgdm9pZCBfZm9yRWFjaENsYXNzTWVtYmVyKAogICAgICBJbmRleGVkQ2xhc3MgY2xzLCB2b2lkIGYoQ2xhc3NFbnRpdHkgY2xzLCBNZW1iZXJFbnRpdHkgbWVtYmVyKSkgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgSkNsYXNzRW52IGVudiA9IGNsYXNzZXMuZ2V0RW52KGNscyk7CiAgICBlbnYuZm9yRWFjaE1lbWJlcih0aGlzLCAoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICBmKGNscywgbWVtYmVyKTsKICAgIH0pOwogICAgSkNsYXNzRGF0YSBkYXRhID0gY2xhc3Nlcy5nZXREYXRhKGNscyk7CiAgICBfZW5zdXJlU3VwZXJ0eXBlcyhjbHMsIGRhdGEpOwogICAgaWYgKGRhdGEuc3VwZXJ0eXBlICE9IG51bGwpIHsKICAgICAgX2ZvckVhY2hDbGFzc01lbWJlcihkYXRhLnN1cGVydHlwZS5lbGVtZW50LCBmKTsKICAgIH0KICB9CgogIENvbnN0YW50Q29uc3RydWN0b3IgX2dldENvbnN0cnVjdG9yQ29uc3RhbnQoSW5kZXhlZENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY29uc3RydWN0b3IpKTsKICAgIEpDb25zdHJ1Y3RvckRhdGEgZGF0YSA9IG1lbWJlcnMuZ2V0RGF0YShjb25zdHJ1Y3Rvcik7CiAgICByZXR1cm4gZGF0YS5nZXRDb25zdHJ1Y3RvckNvbnN0YW50KHRoaXMsIGNvbnN0cnVjdG9yKTsKICB9CgogIENvbnN0YW50RXhwcmVzc2lvbiBfZ2V0RmllbGRDb25zdGFudEV4cHJlc3Npb24oSW5kZXhlZEZpZWxkIGZpZWxkKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoZmllbGQpKTsKICAgIEpGaWVsZERhdGEgZGF0YSA9IG1lbWJlcnMuZ2V0RGF0YShmaWVsZCk7CiAgICByZXR1cm4gZGF0YS5nZXRGaWVsZENvbnN0YW50RXhwcmVzc2lvbih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgYXNJbnN0YW5jZU9mKEludGVyZmFjZVR5cGUgdHlwZSwgQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBPcmRlcmVkVHlwZVNldCBvcmRlcmVkVHlwZVNldCA9IGdldE9yZGVyZWRUeXBlU2V0KHR5cGUuZWxlbWVudCk7CiAgICBJbnRlcmZhY2VUeXBlIHN1cGVydHlwZSA9CiAgICAgICAgb3JkZXJlZFR5cGVTZXQuYXNJbnN0YW5jZU9mKGNscywgZ2V0SGllcmFyY2h5RGVwdGgoY2xzKSk7CiAgICBpZiAoc3VwZXJ0eXBlICE9IG51bGwpIHsKICAgICAgc3VwZXJ0eXBlID0gc3Vic3RCeUNvbnRleHQoc3VwZXJ0eXBlLCB0eXBlKTsKICAgIH0KICAgIHJldHVybiBzdXBlcnR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBPcmRlcmVkVHlwZVNldCBnZXRPcmRlcmVkVHlwZVNldChJbmRleGVkQ2xhc3MgY2xzKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBKQ2xhc3NEYXRhIGRhdGEgPSBjbGFzc2VzLmdldERhdGEoY2xzKTsKICAgIF9lbnN1cmVTdXBlcnR5cGVzKGNscywgZGF0YSk7CiAgICByZXR1cm4gZGF0YS5vcmRlcmVkVHlwZVNldDsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXRIaWVyYXJjaHlEZXB0aChJbmRleGVkQ2xhc3MgY2xzKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBKQ2xhc3NEYXRhIGRhdGEgPSBjbGFzc2VzLmdldERhdGEoY2xzKTsKICAgIF9lbnN1cmVTdXBlcnR5cGVzKGNscywgZGF0YSk7CiAgICByZXR1cm4gZGF0YS5vcmRlcmVkVHlwZVNldC5tYXhEZXB0aDsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPEludGVyZmFjZVR5cGU+IGdldEludGVyZmFjZXMoSW5kZXhlZENsYXNzIGNscykgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgSkNsYXNzRGF0YSBkYXRhID0gY2xhc3Nlcy5nZXREYXRhKGNscyk7CiAgICBfZW5zdXJlU3VwZXJ0eXBlcyhjbHMsIGRhdGEpOwogICAgcmV0dXJuIGRhdGEuaW50ZXJmYWNlczsKICB9CgogIE1lbWJlckRlZmluaXRpb24gZ2V0TWVtYmVyRGVmaW5pdGlvbkludGVybmFsKGNvdmFyaWFudCBJbmRleGVkTWVtYmVyIG1lbWJlcikgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KG1lbWJlcikpOwogICAgcmV0dXJuIG1lbWJlcnMuZ2V0RGF0YShtZW1iZXIpLmRlZmluaXRpb247CiAgfQoKICBDbGFzc0RlZmluaXRpb24gZ2V0Q2xhc3NEZWZpbml0aW9uSW50ZXJuYWwoY292YXJpYW50IEluZGV4ZWRDbGFzcyBjbHMpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIHJldHVybiBjbGFzc2VzLmdldERhdGEoY2xzKS5kZWZpbml0aW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgSW1wb3J0RW50aXR5IGdldEltcG9ydChpci5MaWJyYXJ5RGVwZW5kZW5jeSBub2RlKSB7CiAgICBpci5MaWJyYXJ5IGxpYnJhcnkgPSBub2RlLnBhcmVudDsKICAgIEpMaWJyYXJ5RGF0YSBkYXRhID0gbGlicmFyaWVzLmdldERhdGEoZ2V0TGlicmFyeUludGVybmFsKGxpYnJhcnkpKTsKICAgIHJldHVybiBkYXRhLmltcG9ydHNbbm9kZV07CiAgfQoKICBpci5UeXBlRW52aXJvbm1lbnQgZ2V0IHR5cGVFbnZpcm9ubWVudCB7CiAgICBpZiAoX3R5cGVFbnZpcm9ubWVudCA9PSBudWxsKSB7CiAgICAgIF90eXBlRW52aXJvbm1lbnQgPz89IG5ldyBpci5UeXBlRW52aXJvbm1lbnQoCiAgICAgICAgICBuZXcgaXIuQ29yZVR5cGVzKHByb2dyYW1FbnYubWFpbkNvbXBvbmVudCksIGNsYXNzSGllcmFyY2h5KTsKICAgIH0KICAgIHJldHVybiBfdHlwZUVudmlyb25tZW50OwogIH0KCiAgaXIuQ2xhc3NIaWVyYXJjaHkgZ2V0IGNsYXNzSGllcmFyY2h5IHsKICAgIGlmIChfY2xhc3NIaWVyYXJjaHkgPT0gbnVsbCkgewogICAgICBfY2xhc3NIaWVyYXJjaHkgPz89IG5ldyBpci5DbGFzc0hpZXJhcmNoeShwcm9ncmFtRW52Lm1haW5Db21wb25lbnQpOwogICAgfQogICAgcmV0dXJuIF9jbGFzc0hpZXJhcmNoeTsKICB9CgogIEBvdmVycmlkZQogIFN0YXRpY1R5cGVQcm92aWRlciBnZXRTdGF0aWNUeXBlUHJvdmlkZXIoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgTWVtYmVyRGVmaW5pdGlvbiBtZW1iZXJEZWZpbml0aW9uID0gbWVtYmVycy5nZXREYXRhKG1lbWJlcikuZGVmaW5pdGlvbjsKICAgIFN0YXRpY1R5cGVDYWNoZSBjYWNoZWRTdGF0aWNUeXBlczsKICAgIGlyLkludGVyZmFjZVR5cGUgdGhpc1R5cGU7CiAgICBzd2l0Y2ggKG1lbWJlckRlZmluaXRpb24ua2luZCkgewogICAgICBjYXNlIE1lbWJlcktpbmQucmVndWxhcjoKICAgICAgY2FzZSBNZW1iZXJLaW5kLmNvbnN0cnVjdG9yOgogICAgICBjYXNlIE1lbWJlcktpbmQuY29uc3RydWN0b3JCb2R5OgogICAgICAgIGlyLk1lbWJlciBub2RlID0gbWVtYmVyRGVmaW5pdGlvbi5ub2RlOwogICAgICAgIHRoaXNUeXBlID0gbm9kZS5lbmNsb3NpbmdDbGFzcz8udGhpc1R5cGU7CiAgICAgICAgY2FjaGVkU3RhdGljVHlwZXMgPSBtZW1iZXJzLmdldERhdGEobWVtYmVyKS5zdGF0aWNUeXBlczsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBNZW1iZXJLaW5kLmNsb3N1cmVDYWxsOgogICAgICAgIGlyLlRyZWVOb2RlIG5vZGUgPSBtZW1iZXJEZWZpbml0aW9uLm5vZGU7CiAgICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkgewogICAgICAgICAgaWYgKG5vZGUgaXMgaXIuTWVtYmVyKSB7CiAgICAgICAgICAgIGlyLk1lbWJlciBtZW1iZXIgPSBub2RlOwogICAgICAgICAgICB0aGlzVHlwZSA9IG1lbWJlci5lbmNsb3NpbmdDbGFzcz8udGhpc1R5cGU7CiAgICAgICAgICAgIGNhY2hlZFN0YXRpY1R5cGVzID0gbWVtYmVycy5nZXREYXRhKGdldE1lbWJlcihtZW1iZXIpKS5zdGF0aWNUeXBlczsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnQ7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1lbWJlcktpbmQuY2xvc3VyZUZpZWxkOgogICAgICBjYXNlIE1lbWJlcktpbmQuc2lnbmF0dXJlOgogICAgICBjYXNlIE1lbWJlcktpbmQuZ2VuZXJhdG9yQm9keToKICAgICAgICBjYWNoZWRTdGF0aWNUeXBlcyA9IGNvbnN0IFN0YXRpY1R5cGVDYWNoZSgpOwogICAgICAgIGJyZWFrOwogICAgfQoKICAgIGFzc2VydChjYWNoZWRTdGF0aWNUeXBlcyAhPSBudWxsLCAiTm8gc3RhdGljIHR5cGVzIGNhY2hlZCBmb3IgJG1lbWJlci4iKTsKICAgIHJldHVybiBuZXcgQ2FjaGVkU3RhdGljVHlwZSh0eXBlRW52aXJvbm1lbnQsIGNhY2hlZFN0YXRpY1R5cGVzLAogICAgICAgIG5ldyBUaGlzSW50ZXJmYWNlVHlwZS5mcm9tKHRoaXNUeXBlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBOYW1lIGdldE5hbWUoaXIuTmFtZSBuYW1lKSB7CiAgICByZXR1cm4gbmV3IE5hbWUoCiAgICAgICAgbmFtZS5uYW1lLCBuYW1lLmlzUHJpdmF0ZSA/IGdldExpYnJhcnkobmFtZS5saWJyYXJ5KSA6IG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2FsbFN0cnVjdHVyZSBnZXRDYWxsU3RydWN0dXJlKGlyLkFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIGludCBhcmd1bWVudENvdW50ID0gYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoICsgYXJndW1lbnRzLm5hbWVkLmxlbmd0aDsKICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cyA9IGFyZ3VtZW50cy5uYW1lZC5tYXAoKGUpID0+IGUubmFtZSkudG9MaXN0KCk7CiAgICByZXR1cm4gbmV3IENhbGxTdHJ1Y3R1cmUoCiAgICAgICAgYXJndW1lbnRDb3VudCwgbmFtZWRBcmd1bWVudHMsIGFyZ3VtZW50cy50eXBlcy5sZW5ndGgpOwogIH0KCiAgQG92ZXJyaWRlCiAgU2VsZWN0b3IgZ2V0U2VsZWN0b3IoaXIuRXhwcmVzc2lvbiBub2RlKSB7CiAgICAvLyBUT0RPKGVmb3J0dW5hKTogVGhpcyBpcyBzY3JlYW1pbmcgZm9yIGEgY29tbW9uIGludGVyZmFjZSBiZXR3ZWVuCiAgICAvLyBQcm9wZXJ0eUdldCBhbmQgU3VwZXJQcm9wZXJ0eUdldCAoYW5kIHNhbWUgZm9yICpHZXQpLiBUYWxrIHRvIGtlcm5lbAogICAgLy8gZm9sa3MuCiAgICBpZiAobm9kZSBpcyBpci5Qcm9wZXJ0eUdldCkgewogICAgICByZXR1cm4gZ2V0R2V0dGVyU2VsZWN0b3Iobm9kZS5uYW1lKTsKICAgIH0KICAgIGlmIChub2RlIGlzIGlyLkRpcmVjdFByb3BlcnR5R2V0KSB7CiAgICAgIHJldHVybiBnZXRHZXR0ZXJTZWxlY3Rvcihub2RlLnRhcmdldC5uYW1lKTsKICAgIH0KICAgIGlmIChub2RlIGlzIGlyLlN1cGVyUHJvcGVydHlHZXQpIHsKICAgICAgcmV0dXJuIGdldEdldHRlclNlbGVjdG9yKG5vZGUubmFtZSk7CiAgICB9CiAgICBpZiAobm9kZSBpcyBpci5Qcm9wZXJ0eVNldCkgewogICAgICByZXR1cm4gZ2V0U2V0dGVyU2VsZWN0b3Iobm9kZS5uYW1lKTsKICAgIH0KICAgIGlmIChub2RlIGlzIGlyLlN1cGVyUHJvcGVydHlTZXQpIHsKICAgICAgcmV0dXJuIGdldFNldHRlclNlbGVjdG9yKG5vZGUubmFtZSk7CiAgICB9CiAgICBpZiAobm9kZSBpcyBpci5JbnZvY2F0aW9uRXhwcmVzc2lvbikgewogICAgICByZXR1cm4gZ2V0SW52b2NhdGlvblNlbGVjdG9yKG5vZGUpOwogICAgfQogICAgdGhyb3cgZmFpbGVkQXQoCiAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAiQ2FuIG9ubHkgZ2V0IHRoZSBzZWxlY3RvciBmb3IgYSBwcm9wZXJ0eSBnZXQgb3IgYW4gaW52b2NhdGlvbjogIgogICAgICAgICIke25vZGV9Iik7CiAgfQoKICBTZWxlY3RvciBnZXRJbnZvY2F0aW9uU2VsZWN0b3IoaXIuSW52b2NhdGlvbkV4cHJlc3Npb24gaW52b2NhdGlvbikgewogICAgTmFtZSBuYW1lID0gZ2V0TmFtZShpbnZvY2F0aW9uLm5hbWUpOwogICAgU2VsZWN0b3JLaW5kIGtpbmQ7CiAgICBpZiAoU2VsZWN0b3IuaXNPcGVyYXRvck5hbWUobmFtZS50ZXh0KSkgewogICAgICBpZiAobmFtZSA9PSBOYW1lcy5JTkRFWF9OQU1FIHx8IG5hbWUgPT0gTmFtZXMuSU5ERVhfU0VUX05BTUUpIHsKICAgICAgICBraW5kID0gU2VsZWN0b3JLaW5kLklOREVYOwogICAgICB9IGVsc2UgewogICAgICAgIGtpbmQgPSBTZWxlY3RvcktpbmQuT1BFUkFUT1I7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGtpbmQgPSBTZWxlY3RvcktpbmQuQ0FMTDsKICAgIH0KCiAgICBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUgPSBnZXRDYWxsU3RydWN0dXJlKGludm9jYXRpb24uYXJndW1lbnRzKTsKICAgIHJldHVybiBuZXcgU2VsZWN0b3Ioa2luZCwgbmFtZSwgY2FsbFN0cnVjdHVyZSk7CiAgfQoKICBTZWxlY3RvciBnZXRHZXR0ZXJTZWxlY3Rvcihpci5OYW1lIGlyTmFtZSkgewogICAgTmFtZSBuYW1lID0gbmV3IE5hbWUoCiAgICAgICAgaXJOYW1lLm5hbWUsIGlyTmFtZS5pc1ByaXZhdGUgPyBnZXRMaWJyYXJ5KGlyTmFtZS5saWJyYXJ5KSA6IG51bGwpOwogICAgcmV0dXJuIG5ldyBTZWxlY3Rvci5nZXR0ZXIobmFtZSk7CiAgfQoKICBTZWxlY3RvciBnZXRTZXR0ZXJTZWxlY3Rvcihpci5OYW1lIGlyTmFtZSkgewogICAgTmFtZSBuYW1lID0gbmV3IE5hbWUoCiAgICAgICAgaXJOYW1lLm5hbWUsIGlyTmFtZS5pc1ByaXZhdGUgPyBnZXRMaWJyYXJ5KGlyTmFtZS5saWJyYXJ5KSA6IG51bGwpOwogICAgcmV0dXJuIG5ldyBTZWxlY3Rvci5zZXR0ZXIobmFtZSk7CiAgfQoKICAvLy8gTG9va3MgdXAgW3R5cGVOYW1lXSBmb3IgdXNlIGluIHRoZSBzcGVjLXN0cmluZyBvZiBhIGBKU2AgY2FsbC4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVc2UgdGhpcyBpbiBbbmF0aXZlLk5hdGl2ZUJlaGF2aW9yXSBpbnN0ZWFkIG9mIGNhbGxpbmcKICAvLyB0aGUgYEZvcmVpZ25SZXNvbHZlcmAuCiAgVHlwZUxvb2t1cCB0eXBlTG9va3VwKHtib29sIHJlc29sdmVBc1JhdzogdHJ1ZX0pIHsKICAgIHJldHVybiByZXNvbHZlQXNSYXcKICAgICAgICA/IChfY2FjaGVkVHlwZUxvb2t1cFJhdyA/Pz0gX3R5cGVMb29rdXAocmVzb2x2ZUFzUmF3OiB0cnVlKSkKICAgICAgICA6IChfY2FjaGVkVHlwZUxvb2t1cEZ1bGwgPz89IF90eXBlTG9va3VwKHJlc29sdmVBc1JhdzogZmFsc2UpKTsKICB9CgogIFR5cGVMb29rdXAgX2NhY2hlZFR5cGVMb29rdXBSYXc7CiAgVHlwZUxvb2t1cCBfY2FjaGVkVHlwZUxvb2t1cEZ1bGw7CgogIFR5cGVMb29rdXAgX3R5cGVMb29rdXAoe2Jvb2wgcmVzb2x2ZUFzUmF3OiB0cnVlfSkgewogICAgYm9vbCBjYWNoZWRNYXlMb29rdXBJbk1haW47CiAgICBib29sIG1heUxvb2t1cEluTWFpbigpIHsKICAgICAgdmFyIG1haW5VcmkgPSBlbGVtZW50RW52aXJvbm1lbnQubWFpbkxpYnJhcnkuY2Fub25pY2FsVXJpOwogICAgICAvLyBUZXN0cyBwZXJtaXQgbG9va3VwIG91dHNpZGUgb2YgZGFydDogbGlicmFyaWVzLgogICAgICByZXR1cm4gbWFpblVyaS5wYXRoLmNvbnRhaW5zKCd0ZXN0cy9jb21waWxlci9kYXJ0MmpzX25hdGl2ZScpIHx8CiAgICAgICAgICBtYWluVXJpLnBhdGguY29udGFpbnMoJ3Rlc3RzL2NvbXBpbGVyL2RhcnQyanNfZXh0cmEnKTsKICAgIH0KCiAgICBEYXJ0VHlwZSBsb29rdXAoU3RyaW5nIHR5cGVOYW1lLCB7Ym9vbCByZXF1aXJlZH0pIHsKICAgICAgRGFydFR5cGUgZmluZEluTGlicmFyeShMaWJyYXJ5RW50aXR5IGxpYnJhcnkpIHsKICAgICAgICBpZiAobGlicmFyeSAhPSBudWxsKSB7CiAgICAgICAgICBDbGFzc0VudGl0eSBjbHMgPSBlbGVtZW50RW52aXJvbm1lbnQubG9va3VwQ2xhc3MobGlicmFyeSwgdHlwZU5hbWUpOwogICAgICAgICAgaWYgKGNscyAhPSBudWxsKSB7CiAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEFsaWduIHNlbWFudGljcy4KICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVBc1JhdwogICAgICAgICAgICAgICAgPyBlbGVtZW50RW52aXJvbm1lbnQuZ2V0UmF3VHlwZShjbHMpCiAgICAgICAgICAgICAgICA6IGVsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShjbHMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQoKICAgICAgRGFydFR5cGUgZmluZEluKFVyaSB1cmkpIHsKICAgICAgICByZXR1cm4gZmluZEluTGlicmFyeShlbGVtZW50RW52aXJvbm1lbnQubG9va3VwTGlicmFyeSh1cmkpKTsKICAgICAgfQoKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTmFycm93IHRoZSBzZXQgb2YgbG9va3VwcyBiYXNlZCBvbiB0aGUgZGVwZW5kaW5nCiAgICAgIC8vIGxpYnJhcnkuCiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENhY2hlIG1vcmUgcmVzdWx0cyB0byBhdm9pZCByZWR1bmRhbnQgbG9va3Vwcz8KICAgICAgRGFydFR5cGUgdHlwZTsKICAgICAgaWYgKGNhY2hlZE1heUxvb2t1cEluTWFpbiA/Pz0gbWF5TG9va3VwSW5NYWluKCkpIHsKICAgICAgICB0eXBlID8/PSBmaW5kSW5MaWJyYXJ5KGVsZW1lbnRFbnZpcm9ubWVudC5tYWluTGlicmFyeSk7CiAgICAgIH0KICAgICAgdHlwZSA/Pz0gZmluZEluKFVyaXMuZGFydF9jb3JlKTsKICAgICAgdHlwZSA/Pz0gZmluZEluKFVyaXMuZGFydF9fanNfaGVscGVyKTsKICAgICAgdHlwZSA/Pz0gZmluZEluKFVyaXMuZGFydF9faW50ZXJjZXB0b3JzKTsKICAgICAgdHlwZSA/Pz0gZmluZEluKFVyaXMuZGFydF9fbmF0aXZlX3R5cGVkX2RhdGEpOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X2NvbGxlY3Rpb24pOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X21hdGgpOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X2h0bWwpOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X2h0bWxfY29tbW9uKTsKICAgICAgdHlwZSA/Pz0gZmluZEluKFVyaXMuZGFydF9zdmcpOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X3dlYl9hdWRpbyk7CiAgICAgIHR5cGUgPz89IGZpbmRJbihVcmlzLmRhcnRfd2ViX2dsKTsKICAgICAgdHlwZSA/Pz0gZmluZEluKFVyaXMuZGFydF93ZWJfc3FsKTsKICAgICAgdHlwZSA/Pz0gZmluZEluKFVyaXMuZGFydF9pbmRleGVkX2RiKTsKICAgICAgdHlwZSA/Pz0gZmluZEluKFVyaXMuZGFydF90eXBlZF9kYXRhKTsKICAgICAgdHlwZSA/Pz0gZmluZEluKFVyaXMuZGFydF9fcnRpKTsKICAgICAgdHlwZSA/Pz0gZmluZEluKFVyaXMuZGFydF9taXJyb3JzKTsKICAgICAgaWYgKHR5cGUgPT0gbnVsbCAmJiByZXF1aXJlZCkgewogICAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZShDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICAgICBNZXNzYWdlS2luZC5HRU5FUklDLCB7J3RleHQnOiAiVHlwZSAnJHR5cGVOYW1lJyBub3QgZm91bmQuIn0pOwogICAgICB9CiAgICAgIHJldHVybiB0eXBlOwogICAgfQoKICAgIHJldHVybiBsb29rdXA7CiAgfQoKICBTdHJpbmcgX2dldFN0cmluZ0FyZ3VtZW50KGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSwgaW50IGluZGV4KSB7CiAgICByZXR1cm4gbm9kZS5hcmd1bWVudHMucG9zaXRpb25hbFtpbmRleF0uYWNjZXB0KG5ldyBTdHJpbmdpZmllcigpKTsKICB9CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENhY2hlIHRoaXMgZm9yIGxhdGVyIHVzZS4KICBAb3ZlcnJpZGUKICBOYXRpdmVCZWhhdmlvciBnZXROYXRpdmVCZWhhdmlvckZvckpzQ2FsbChpci5TdGF0aWNJbnZvY2F0aW9uIG5vZGUpIHsKICAgIGlmIChub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCA8IDIgfHwKICAgICAgICBub2RlLmFyZ3VtZW50cy5uYW1lZC5pc05vdEVtcHR5KSB7CiAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsIE1lc3NhZ2VLaW5kLldST05HX0FSR1VNRU5UX0ZPUl9KUyk7CiAgICAgIHJldHVybiBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKICAgIH0KICAgIFN0cmluZyBzcGVjU3RyaW5nID0gX2dldFN0cmluZ0FyZ3VtZW50KG5vZGUsIDApOwogICAgaWYgKHNwZWNTdHJpbmcgPT0gbnVsbCkgewogICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLCBNZXNzYWdlS2luZC5XUk9OR19BUkdVTUVOVF9GT1JfSlNfRklSU1QpOwogICAgICByZXR1cm4gbmV3IE5hdGl2ZUJlaGF2aW9yKCk7CiAgICB9CgogICAgU3RyaW5nIGNvZGVTdHJpbmcgPSBfZ2V0U3RyaW5nQXJndW1lbnQobm9kZSwgMSk7CiAgICBpZiAoY29kZVN0cmluZyA9PSBudWxsKSB7CiAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsIE1lc3NhZ2VLaW5kLldST05HX0FSR1VNRU5UX0ZPUl9KU19TRUNPTkQpOwogICAgICByZXR1cm4gbmV3IE5hdGl2ZUJlaGF2aW9yKCk7CiAgICB9CgogICAgcmV0dXJuIE5hdGl2ZUJlaGF2aW9yLm9mSnNDYWxsKAogICAgICAgIHNwZWNTdHJpbmcsCiAgICAgICAgY29kZVN0cmluZywKICAgICAgICB0eXBlTG9va3VwKHJlc29sdmVBc1JhdzogdHJ1ZSksCiAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICByZXBvcnRlciwKICAgICAgICBjb21tb25FbGVtZW50cyk7CiAgfQoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDYWNoZSB0aGlzIGZvciBsYXRlciB1c2UuCiAgQG92ZXJyaWRlCiAgTmF0aXZlQmVoYXZpb3IgZ2V0TmF0aXZlQmVoYXZpb3JGb3JKc0J1aWx0aW5DYWxsKGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSkgewogICAgaWYgKG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoIDwgMSkgewogICAgICByZXBvcnRlci5pbnRlcm5hbEVycm9yKAogICAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwgIkpTIGJ1aWx0aW4gZXhwcmVzc2lvbiBoYXMgbm8gdHlwZS4iKTsKICAgICAgcmV0dXJuIG5ldyBOYXRpdmVCZWhhdmlvcigpOwogICAgfQogICAgaWYgKG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoIDwgMikgewogICAgICByZXBvcnRlci5pbnRlcm5hbEVycm9yKAogICAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwgIkpTIGJ1aWx0aW4gaXMgbWlzc2luZyBuYW1lLiIpOwogICAgICByZXR1cm4gbmV3IE5hdGl2ZUJlaGF2aW9yKCk7CiAgICB9CiAgICBTdHJpbmcgc3BlY1N0cmluZyA9IF9nZXRTdHJpbmdBcmd1bWVudChub2RlLCAwKTsKICAgIGlmIChzcGVjU3RyaW5nID09IG51bGwpIHsKICAgICAgcmVwb3J0ZXIuaW50ZXJuYWxFcnJvcigKICAgICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsICJVbmV4cGVjdGVkIGZpcnN0IGFyZ3VtZW50LiIpOwogICAgICByZXR1cm4gbmV3IE5hdGl2ZUJlaGF2aW9yKCk7CiAgICB9CiAgICByZXR1cm4gTmF0aXZlQmVoYXZpb3Iub2ZKc0J1aWx0aW5DYWxsKAogICAgICAgIHNwZWNTdHJpbmcsCiAgICAgICAgdHlwZUxvb2t1cChyZXNvbHZlQXNSYXc6IHRydWUpLAogICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgcmVwb3J0ZXIsCiAgICAgICAgY29tbW9uRWxlbWVudHMpOwogIH0KCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2FjaGUgdGhpcyBmb3IgbGF0ZXIgdXNlLgogIEBvdmVycmlkZQogIE5hdGl2ZUJlaGF2aW9yIGdldE5hdGl2ZUJlaGF2aW9yRm9ySnNFbWJlZGRlZEdsb2JhbENhbGwoCiAgICAgIGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSkgewogICAgaWYgKG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoIDwgMSkgewogICAgICByZXBvcnRlci5pbnRlcm5hbEVycm9yKENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAiSlMgZW1iZWRkZWQgZ2xvYmFsIGV4cHJlc3Npb24gaGFzIG5vIHR5cGUuIik7CiAgICAgIHJldHVybiBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKICAgIH0KICAgIGlmIChub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCA8IDIpIHsKICAgICAgcmVwb3J0ZXIuaW50ZXJuYWxFcnJvcigKICAgICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsICJKUyBlbWJlZGRlZCBnbG9iYWwgaXMgbWlzc2luZyBuYW1lLiIpOwogICAgICByZXR1cm4gbmV3IE5hdGl2ZUJlaGF2aW9yKCk7CiAgICB9CiAgICBpZiAobm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggPiAyIHx8CiAgICAgICAgbm9kZS5hcmd1bWVudHMubmFtZWQuaXNOb3RFbXB0eSkgewogICAgICByZXBvcnRlci5pbnRlcm5hbEVycm9yKENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAiSlMgZW1iZWRkZWQgZ2xvYmFsIGhhcyBtb3JlIHRoYW4gMiBhcmd1bWVudHMuIik7CiAgICAgIHJldHVybiBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKICAgIH0KICAgIFN0cmluZyBzcGVjU3RyaW5nID0gX2dldFN0cmluZ0FyZ3VtZW50KG5vZGUsIDApOwogICAgaWYgKHNwZWNTdHJpbmcgPT0gbnVsbCkgewogICAgICByZXBvcnRlci5pbnRlcm5hbEVycm9yKAogICAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwgIlVuZXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQuIik7CiAgICAgIHJldHVybiBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKICAgIH0KICAgIHJldHVybiBOYXRpdmVCZWhhdmlvci5vZkpzRW1iZWRkZWRHbG9iYWxDYWxsKAogICAgICAgIHNwZWNTdHJpbmcsCiAgICAgICAgdHlwZUxvb2t1cChyZXNvbHZlQXNSYXc6IHRydWUpLAogICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgcmVwb3J0ZXIsCiAgICAgICAgY29tbW9uRWxlbWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBnZXRDb25zdGFudFZhbHVlKGlyLkV4cHJlc3Npb24gbm9kZSwKICAgICAge2Jvb2wgcmVxdWlyZUNvbnN0YW50OiB0cnVlLCBib29sIGltcGxpY2l0TnVsbDogZmFsc2V9KSB7CiAgICBpZiAobm9kZSBpcyBpci5Db25zdGFudEV4cHJlc3Npb24pIHsKICAgICAgcmV0dXJuIF9jb25zdGFudFZhbHVlZmllci52aXNpdENvbnN0YW50KG5vZGUuY29uc3RhbnQpOwogICAgfQoKICAgIENvbnN0YW50RXhwcmVzc2lvbiBjb25zdGFudDsKICAgIGlmIChub2RlID09IG51bGwpIHsKICAgICAgaWYgKCFpbXBsaWNpdE51bGwpIHsKICAgICAgICB0aHJvdyBmYWlsZWRBdCgKICAgICAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwgJ05vIGV4cHJlc3Npb24gZm9yIGNvbnN0YW50LicpOwogICAgICB9CiAgICAgIGNvbnN0YW50ID0gbmV3IE51bGxDb25zdGFudEV4cHJlc3Npb24oKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0YW50ID0KICAgICAgICAgIG5ldyBDb25zdGFudGlmaWVyKHRoaXMsIHJlcXVpcmVDb25zdGFudDogcmVxdWlyZUNvbnN0YW50KS52aXNpdChub2RlKTsKICAgIH0KICAgIGlmIChjb25zdGFudCA9PSBudWxsKSB7CiAgICAgIGlmIChyZXF1aXJlQ29uc3RhbnQpIHsKICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAgICAgJ05vIGNvbnN0YW50IGZvciAke0RlYnVnUHJpbnRlci5wcmV0dHlQcmludChub2RlKX0nKTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPSBjb21wdXRlQ29uc3RhbnRWYWx1ZSgKICAgICAgICBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShub2RlKSwgY29uc3RhbnQsCiAgICAgICAgcmVxdWlyZUNvbnN0YW50OiByZXF1aXJlQ29uc3RhbnQpOwogICAgaWYgKCF2YWx1ZS5pc0NvbnN0YW50ICYmICFyZXF1aXJlQ29uc3RhbnQpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICAvLy8gQ29udmVydHMgW2Fubm90YXRpb25zXSBpbnRvIGEgbGlzdCBvZiBbQ29uc3RhbnRWYWx1ZV1zLgogIExpc3Q8Q29uc3RhbnRWYWx1ZT4gZ2V0TWV0YWRhdGEoTGlzdDxpci5FeHByZXNzaW9uPiBhbm5vdGF0aW9ucykgewogICAgaWYgKGFubm90YXRpb25zLmlzRW1wdHkpIHJldHVybiBjb25zdCA8Q29uc3RhbnRWYWx1ZT5bXTsKICAgIExpc3Q8Q29uc3RhbnRWYWx1ZT4gbWV0YWRhdGEgPSA8Q29uc3RhbnRWYWx1ZT5bXTsKICAgIGFubm90YXRpb25zLmZvckVhY2goKGlyLkV4cHJlc3Npb24gbm9kZSkgewogICAgICBtZXRhZGF0YS5hZGQoZ2V0Q29uc3RhbnRWYWx1ZShub2RlKSk7CiAgICB9KTsKICAgIHJldHVybiBtZXRhZGF0YTsKICB9CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldFN1cGVyTm9TdWNoTWV0aG9kKENsYXNzRW50aXR5IGNscykgewogICAgd2hpbGUgKGNscyAhPSBudWxsKSB7CiAgICAgIGNscyA9IGVsZW1lbnRFbnZpcm9ubWVudC5nZXRTdXBlckNsYXNzKGNscyk7CiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBlbGVtZW50RW52aXJvbm1lbnQubG9va3VwTG9jYWxDbGFzc01lbWJlcigKICAgICAgICAgIGNscywgSWRlbnRpZmllcnMubm9TdWNoTWV0aG9kXyk7CiAgICAgIGlmIChtZW1iZXIgIT0gbnVsbCAmJiAhbWVtYmVyLmlzQWJzdHJhY3QpIHsKICAgICAgICBpZiAobWVtYmVyLmlzRnVuY3Rpb24pIHsKICAgICAgICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uID0gbWVtYmVyOwogICAgICAgICAgaWYgKGZ1bmN0aW9uLnBhcmFtZXRlclN0cnVjdHVyZS5wb3NpdGlvbmFsUGFyYW1ldGVycyA+PSAxKSB7CiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gSWYgW21lbWJlcl0gaXMgbm90IGEgdmFsaWQgYG5vU3VjaE1ldGhvZGAgdGhlIHRhcmdldCBpcwogICAgICAgIC8vIGBPYmplY3Quc3VwZXJOb1N1Y2hNZXRob2RgLgogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiA9IGVsZW1lbnRFbnZpcm9ubWVudC5sb29rdXBMb2NhbENsYXNzTWVtYmVyKAogICAgICAgIGNvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzLCBJZGVudGlmaWVycy5ub1N1Y2hNZXRob2RfKTsKICAgIGFzc2VydChmdW5jdGlvbiAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KGNscywgIk5vIHN1cGVyIG5vU3VjaE1ldGhvZCBmb3VuZCBmb3IgY2xhc3MgJGNscy4iKSk7CiAgICByZXR1cm4gZnVuY3Rpb247CiAgfQoKICBUeXBlVmFyaWFibGVFbnRpdHkgY3JlYXRlVHlwZVZhcmlhYmxlKAogICAgICBFbnRpdHkgdHlwZURlY2xhcmF0aW9uLCBTdHJpbmcgbmFtZSwgaW50IGluZGV4KSB7CiAgICByZXR1cm4gbmV3IEpUeXBlVmFyaWFibGUodHlwZURlY2xhcmF0aW9uLCBuYW1lLCBpbmRleCk7CiAgfQoKICBKQ29uc3RydWN0b3JCb2R5IGNyZWF0ZUNvbnN0cnVjdG9yQm9keSgKICAgICAgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IsIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUpIHsKICAgIHJldHVybiBuZXcgSkNvbnN0cnVjdG9yQm9keShjb25zdHJ1Y3RvciwgcGFyYW1ldGVyU3RydWN0dXJlKTsKICB9CgogIEpHZW5lcmF0b3JCb2R5IGNyZWF0ZUdlbmVyYXRvckJvZHkoCiAgICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uLCBEYXJ0VHlwZSBlbGVtZW50VHlwZSkgewogICAgcmV0dXJuIG5ldyBKR2VuZXJhdG9yQm9keShmdW5jdGlvbiwgZWxlbWVudFR5cGUpOwogIH0KCiAgdm9pZCBmb3JFYWNoTmVzdGVkQ2xvc3VyZSgKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciwgdm9pZCBmKEZ1bmN0aW9uRW50aXR5IGNsb3N1cmUpKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkobWVtYmVyKSk7CiAgICBfbmVzdGVkQ2xvc3VyZU1hcFttZW1iZXJdPy5mb3JFYWNoKGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRNZW1iZXJUaGlzVHlwZShNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICByZXR1cm4gbWVtYmVycy5nZXREYXRhKG1lbWJlcikuZ2V0TWVtYmVyVGhpc1R5cGUodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyBnZXRDbGFzc1R5cGVWYXJpYWJsZUFjY2Vzc0Zvck1lbWJlcigKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgcmV0dXJuIG1lbWJlcnMuZ2V0RGF0YShtZW1iZXIpLmNsYXNzVHlwZVZhcmlhYmxlQWNjZXNzOwogIH0KCiAgYm9vbCBjaGVja0ZhbWlseShFbnRpdHkgZW50aXR5KSB7CiAgICBhc3NlcnQoCiAgICAgICAgJyRlbnRpdHknLnN0YXJ0c1dpdGgoanNFbGVtZW50UHJlZml4KSwKICAgICAgICBmYWlsZWRBdChlbnRpdHksCiAgICAgICAgICAgICJVbmV4cGVjdGVkIGVudGl0eSAkZW50aXR5LCBleHBlY3RlZCBmYW1pbHkgJGpzRWxlbWVudFByZWZpeC4iKSk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIFNwYW5uYWJsZSBnZXRTcGFubmFibGUoTWVtYmVyRW50aXR5IG1lbWJlciwgaXIuTm9kZSBub2RlKSB7CiAgICBTb3VyY2VTcGFuIHNvdXJjZVNwYW47CiAgICBpZiAobm9kZSBpcyBpci5UcmVlTm9kZSkgewogICAgICBzb3VyY2VTcGFuID0gY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUobm9kZSk7CiAgICB9CiAgICBzb3VyY2VTcGFuID8/PSBnZXRTb3VyY2VTcGFuKG1lbWJlciwgbnVsbCk7CiAgICByZXR1cm4gc291cmNlU3BhbjsKICB9CgogIEl0ZXJhYmxlPExpYnJhcnlFbnRpdHk+IGdldCBsaWJyYXJ5TGlzdEludGVybmFsIHsKICAgIHJldHVybiBsaWJyYXJ5TWFwLnZhbHVlczsKICB9CgogIExpYnJhcnlFbnRpdHkgZ2V0TGlicmFyeUludGVybmFsKGlyLkxpYnJhcnkgbm9kZSwgW0pMaWJyYXJ5RW52IGVudl0pIHsKICAgIExpYnJhcnlFbnRpdHkgbGlicmFyeSA9IGxpYnJhcnlNYXBbbm9kZV07CiAgICBhc3NlcnQobGlicmFyeSAhPSBudWxsLCAiTm8gbGlicmFyeSBlbnRpdHkgZm9yICRub2RlIik7CiAgICByZXR1cm4gbGlicmFyeTsKICB9CgogIENsYXNzRW50aXR5IGdldENsYXNzSW50ZXJuYWwoaXIuQ2xhc3Mgbm9kZSwgW0pDbGFzc0VudiBlbnZdKSB7CiAgICBDbGFzc0VudGl0eSBjbHMgPSBjbGFzc01hcFtub2RlXTsKICAgIGFzc2VydChjbHMgIT0gbnVsbCwgIk5vIGNsYXNzIGVudGl0eSBmb3IgJG5vZGUiKTsKICAgIHJldHVybiBjbHM7CiAgfQoKICBGaWVsZEVudGl0eSBnZXRGaWVsZEludGVybmFsKGlyLkZpZWxkIG5vZGUpIHsKICAgIEZpZWxkRW50aXR5IGZpZWxkID0gZmllbGRNYXBbbm9kZV07CiAgICBhc3NlcnQoZmllbGQgIT0gbnVsbCwgIk5vIGZpZWxkIGVudGl0eSBmb3IgJG5vZGUiKTsKICAgIHJldHVybiBmaWVsZDsKICB9CgogIEZ1bmN0aW9uRW50aXR5IGdldE1ldGhvZEludGVybmFsKGlyLlByb2NlZHVyZSBub2RlKSB7CiAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiA9IG1ldGhvZE1hcFtub2RlXTsKICAgIGFzc2VydChmdW5jdGlvbiAhPSBudWxsLCAiTm8gZnVuY3Rpb24gZW50aXR5IGZvciAkbm9kZSIpOwogICAgcmV0dXJuIGZ1bmN0aW9uOwogIH0KCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0Q29uc3RydWN0b3JJbnRlcm5hbChpci5NZW1iZXIgbm9kZSkgewogICAgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvck1hcFtub2RlXTsKICAgIGFzc2VydChjb25zdHJ1Y3RvciAhPSBudWxsLCAiTm8gY29uc3RydWN0b3IgZW50aXR5IGZvciAkbm9kZSIpOwogICAgcmV0dXJuIGNvbnN0cnVjdG9yOwogIH0KCiAgVHlwZVZhcmlhYmxlRW50aXR5IGdldFR5cGVWYXJpYWJsZUludGVybmFsKGlyLlR5cGVQYXJhbWV0ZXIgbm9kZSkgewogICAgVHlwZVZhcmlhYmxlRW50aXR5IHR5cGVWYXJpYWJsZSA9IHR5cGVWYXJpYWJsZU1hcFtub2RlXTsKICAgIGlmICh0eXBlVmFyaWFibGUgPT0gbnVsbCkgewogICAgICBpZiAobm9kZS5wYXJlbnQgaXMgaXIuRnVuY3Rpb25Ob2RlKSB7CiAgICAgICAgaXIuRnVuY3Rpb25Ob2RlIGZ1bmMgPSBub2RlLnBhcmVudDsKICAgICAgICBpbnQgaW5kZXggPSBmdW5jLnR5cGVQYXJhbWV0ZXJzLmluZGV4T2Yobm9kZSk7CiAgICAgICAgaWYgKGZ1bmMucGFyZW50IGlzIGlyLkNvbnN0cnVjdG9yKSB7CiAgICAgICAgICBpci5Db25zdHJ1Y3RvciBjb25zdHJ1Y3RvciA9IGZ1bmMucGFyZW50OwogICAgICAgICAgaXIuQ2xhc3MgY2xzID0gY29uc3RydWN0b3IuZW5jbG9zaW5nQ2xhc3M7CiAgICAgICAgICB0eXBlVmFyaWFibGVNYXBbbm9kZV0gPQogICAgICAgICAgICAgIHR5cGVWYXJpYWJsZSA9IGdldFR5cGVWYXJpYWJsZUludGVybmFsKGNscy50eXBlUGFyYW1ldGVyc1tpbmRleF0pOwogICAgICAgIH0gZWxzZSBpZiAoZnVuYy5wYXJlbnQgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICAgICAgICBpci5Qcm9jZWR1cmUgcHJvY2VkdXJlID0gZnVuYy5wYXJlbnQ7CiAgICAgICAgICBpZiAocHJvY2VkdXJlLmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5GYWN0b3J5KSB7CiAgICAgICAgICAgIGlyLkNsYXNzIGNscyA9IHByb2NlZHVyZS5lbmNsb3NpbmdDbGFzczsKICAgICAgICAgICAgdHlwZVZhcmlhYmxlTWFwW25vZGVdID0gdHlwZVZhcmlhYmxlID0KICAgICAgICAgICAgICAgIGdldFR5cGVWYXJpYWJsZUludGVybmFsKGNscy50eXBlUGFyYW1ldGVyc1tpbmRleF0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgYXNzZXJ0KAogICAgICAgIHR5cGVWYXJpYWJsZSAhPSBudWxsLAogICAgICAgICJObyB0eXBlIHZhcmlhYmxlIGVudGl0eSBmb3IgJG5vZGUgb24gIgogICAgICAgICIke25vZGUucGFyZW50IGlzIGlyLkZ1bmN0aW9uTm9kZSA/IG5vZGUucGFyZW50LnBhcmVudCA6IG5vZGUucGFyZW50fSIpOwogICAgcmV0dXJuIHR5cGVWYXJpYWJsZTsKICB9CgogIFR5cGVkZWZFbnRpdHkgZ2V0VHlwZWRlZkludGVybmFsKGlyLlR5cGVkZWYgbm9kZSkgewogICAgVHlwZWRlZkVudGl0eSB0eXBlZGVmID0gdHlwZWRlZk1hcFtub2RlXTsKICAgIGFzc2VydCh0eXBlZGVmICE9IG51bGwsICJObyB0eXBlZGVmIGVudGl0eSBmb3IgJG5vZGUiKTsKICAgIHJldHVybiB0eXBlZGVmOwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0Q29uc3RydWN0b3JCb2R5KGlyLkNvbnN0cnVjdG9yIG5vZGUpIHsKICAgIENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yID0gZ2V0Q29uc3RydWN0b3Iobm9kZSk7CiAgICByZXR1cm4gX2dldENvbnN0cnVjdG9yQm9keShjb25zdHJ1Y3Rvcik7CiAgfQoKICBKQ29uc3RydWN0b3JCb2R5IF9nZXRDb25zdHJ1Y3RvckJvZHkoSW5kZXhlZENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yKSB7CiAgICBKQ29uc3RydWN0b3JEYXRhSW1wbCBkYXRhID0gbWVtYmVycy5nZXREYXRhKGNvbnN0cnVjdG9yKTsKICAgIGlmIChkYXRhLmNvbnN0cnVjdG9yQm9keSA9PSBudWxsKSB7CiAgICAgIC8vLyBUaGUgY29uc3RydWN0b3IgY2FsbHMgdGhlIGNvbnN0cnVjdG9yIGJvZHkgd2l0aCBhbGwgcGFyYW1ldGVycy4KICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHBhcmFtZXRlcnMgdGhhdCBhcmUgbm90IHVzZWQgaW4gdGhlCiAgICAgIC8vICBjb25zdHJ1Y3RvciBib2R5LgogICAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlID0KICAgICAgICAgIF9nZXRQYXJhbWV0ZXJTdHJ1Y3R1cmVGcm9tRnVuY3Rpb25Ob2RlKGRhdGEubm9kZS5mdW5jdGlvbik7CgogICAgICBKQ29uc3RydWN0b3JCb2R5IGNvbnN0cnVjdG9yQm9keSA9CiAgICAgICAgICBjcmVhdGVDb25zdHJ1Y3RvckJvZHkoY29uc3RydWN0b3IsIHBhcmFtZXRlclN0cnVjdHVyZSk7CiAgICAgIG1lbWJlcnMucmVnaXN0ZXI8SW5kZXhlZEZ1bmN0aW9uLCBGdW5jdGlvbkRhdGE+KAogICAgICAgICAgY29uc3RydWN0b3JCb2R5LAogICAgICAgICAgbmV3IENvbnN0cnVjdG9yQm9keURhdGFJbXBsKAogICAgICAgICAgICAgIGRhdGEubm9kZSwKICAgICAgICAgICAgICBkYXRhLm5vZGUuZnVuY3Rpb24sCiAgICAgICAgICAgICAgbmV3IFNwZWNpYWxNZW1iZXJEZWZpbml0aW9uKAogICAgICAgICAgICAgICAgICBkYXRhLm5vZGUsIE1lbWJlcktpbmQuY29uc3RydWN0b3JCb2R5KSwKICAgICAgICAgICAgICBkYXRhLnN0YXRpY1R5cGVzKSk7CiAgICAgIEluZGV4ZWRDbGFzcyBjbHMgPSBjb25zdHJ1Y3Rvci5lbmNsb3NpbmdDbGFzczsKICAgICAgSkNsYXNzRW52SW1wbCBjbGFzc0VudiA9IGNsYXNzZXMuZ2V0RW52KGNscyk7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEF2b2lkIHRoaXMgYnkgb25seSBpbmNsdWRpbmcgbGl2ZSBtZW1iZXJzIGluIHRoZQogICAgICAvLyBqcy1tb2RlbC4KICAgICAgY2xhc3NFbnYuYWRkQ29uc3RydWN0b3JCb2R5KGNvbnN0cnVjdG9yQm9keSk7CiAgICAgIGxhdGVPdXRwdXRVbml0RGF0YUJ1aWxkZXIucmVnaXN0ZXJDb2xvY2F0ZWRNZW1iZXJzKAogICAgICAgICAgY29uc3RydWN0b3IsIGNvbnN0cnVjdG9yQm9keSk7CiAgICAgIGRhdGEuY29uc3RydWN0b3JCb2R5ID0gY29uc3RydWN0b3JCb2R5OwogICAgfQogICAgcmV0dXJuIGRhdGEuY29uc3RydWN0b3JCb2R5OwogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyRGVmaW5pdGlvbiBnZXRNZW1iZXJEZWZpbml0aW9uKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIHJldHVybiBnZXRNZW1iZXJEZWZpbml0aW9uSW50ZXJuYWwobWVtYmVyKTsKICB9CgogIEBvdmVycmlkZQogIGlyLk1lbWJlciBnZXRNZW1iZXJDb250ZXh0Tm9kZShNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBpci5NZW1iZXIgZ2V0UGFyZW50TWVtYmVyKGlyLlRyZWVOb2RlIG5vZGUpIHsKICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkgewogICAgICAgIGlmIChub2RlIGlzIGlyLk1lbWJlcikgewogICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgfQogICAgICAgIG5vZGUgPSBub2RlLnBhcmVudDsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBNZW1iZXJEZWZpbml0aW9uIGRlZmluaXRpb24gPSBnZXRNZW1iZXJEZWZpbml0aW9uKG1lbWJlcik7CiAgICBzd2l0Y2ggKGRlZmluaXRpb24ua2luZCkgewogICAgICBjYXNlIE1lbWJlcktpbmQucmVndWxhcjoKICAgICAgY2FzZSBNZW1iZXJLaW5kLmNvbnN0cnVjdG9yOgogICAgICBjYXNlIE1lbWJlcktpbmQuY29uc3RydWN0b3JCb2R5OgogICAgICAgIHJldHVybiBkZWZpbml0aW9uLm5vZGU7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jbG9zdXJlQ2FsbDoKICAgICAgY2FzZSBNZW1iZXJLaW5kLmNsb3N1cmVGaWVsZDoKICAgICAgY2FzZSBNZW1iZXJLaW5kLnNpZ25hdHVyZToKICAgICAgY2FzZSBNZW1iZXJLaW5kLmdlbmVyYXRvckJvZHk6CiAgICAgICAgcmV0dXJuIGdldFBhcmVudE1lbWJlcihkZWZpbml0aW9uLm5vZGUpOwogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ1VuZXhwZWN0ZWQgbWVtYmVyIGtpbmQgJHtkZWZpbml0aW9ufScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NEZWZpbml0aW9uIGdldENsYXNzRGVmaW5pdGlvbihDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBnZXRDbGFzc0RlZmluaXRpb25JbnRlcm5hbChjbHMpOwogIH0KCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBwYXJhbWV0ZXIgb2YgW2Z1bmN0aW9uXSBwcm92aWRpbmcgdGhlIHR5cGUgYW5kIG5hbWUgb2YKICAvLy8gdGhlIHBhcmFtZXRlciBhbmQgdGhlIFtkZWZhdWx0VmFsdWVdIGlmIHRoZSBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwuCiAgdm9pZCBmb3JFYWNoUGFyYW1ldGVyKGNvdmFyaWFudCBJbmRleGVkRnVuY3Rpb24gZnVuY3Rpb24sCiAgICAgIHZvaWQgZihEYXJ0VHlwZSB0eXBlLCBTdHJpbmcgbmFtZSwgQ29uc3RhbnRWYWx1ZSBkZWZhdWx0VmFsdWUpLAogICAgICB7Ym9vbCBpc05hdGl2ZTogZmFsc2V9KSB7CiAgICBGdW5jdGlvbkRhdGEgZGF0YSA9IG1lbWJlcnMuZ2V0RGF0YShmdW5jdGlvbik7CiAgICBkYXRhLmZvckVhY2hQYXJhbWV0ZXIodGhpcywgZnVuY3Rpb24ucGFyYW1ldGVyU3RydWN0dXJlLCBmLAogICAgICAgIGlzTmF0aXZlOiBpc05hdGl2ZSk7CiAgfQoKICB2b2lkIGZvckVhY2hDb25zdHJ1Y3RvckJvZHkoCiAgICAgIEluZGV4ZWRDbGFzcyBjbHMsIHZvaWQgZihDb25zdHJ1Y3RvckJvZHlFbnRpdHkgbWVtYmVyKSkgewogICAgSkNsYXNzRW52IGVudiA9IGNsYXNzZXMuZ2V0RW52KGNscyk7CiAgICBlbnYuZm9yRWFjaENvbnN0cnVjdG9yQm9keShmKTsKICB9CgogIHZvaWQgZm9yRWFjaEluamVjdGVkQ2xhc3NNZW1iZXIoCiAgICAgIEluZGV4ZWRDbGFzcyBjbHMsIHZvaWQgZihNZW1iZXJFbnRpdHkgbWVtYmVyKSkgewogICAgX2luamVjdGVkQ2xhc3NNZW1iZXJzW2Nsc10/LmZvckVhY2goZik7CiAgfQoKICBKUmVjb3JkRmllbGQgX2NvbnN0cnVjdFJlY29yZEZpZWxkRW50cnkoCiAgICAgIEludGVyZmFjZVR5cGUgbWVtYmVyVGhpc1R5cGUsCiAgICAgIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsCiAgICAgIEJveExvY2FsIGJveExvY2FsLAogICAgICBNYXA8U3RyaW5nLCBNZW1iZXJFbnRpdHk+IG1lbWJlck1hcCwKICAgICAgS2VybmVsVG9Mb2NhbHNNYXAgbG9jYWxzTWFwKSB7CiAgICBMb2NhbCBsb2NhbCA9IGxvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKHZhcmlhYmxlKTsKICAgIEpSZWNvcmRGaWVsZCBib3hlZEZpZWxkID0KICAgICAgICBuZXcgSlJlY29yZEZpZWxkKGxvY2FsLm5hbWUsIGJveExvY2FsLCBpc0NvbnN0OiB2YXJpYWJsZS5pc0NvbnN0KTsKICAgIG1lbWJlcnMucmVnaXN0ZXIoCiAgICAgICAgYm94ZWRGaWVsZCwKICAgICAgICBuZXcgQ2xvc3VyZUZpZWxkRGF0YSgKICAgICAgICAgICAgbmV3IENsb3N1cmVNZW1iZXJEZWZpbml0aW9uKGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKHZhcmlhYmxlKSwKICAgICAgICAgICAgICAgIE1lbWJlcktpbmQuY2xvc3VyZUZpZWxkLCB2YXJpYWJsZSksCiAgICAgICAgICAgIG1lbWJlclRoaXNUeXBlKSk7CiAgICBtZW1iZXJNYXBbYm94ZWRGaWVsZC5uYW1lXSA9IGJveGVkRmllbGQ7CgogICAgcmV0dXJuIGJveGVkRmllbGQ7CiAgfQoKICAvLy8gTWFrZSBhIGNvbnRhaW5lciBjb250cm9sbGluZyBhY2Nlc3MgdG8gcmVjb3JkcywgdGhhdCBpcywgdmFyaWFibGVzIHRoYXQKICAvLy8gYXJlIGFjY2Vzc2VkIGluIGRpZmZlcmVudCBzY29wZXMuIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyB0aGUgY29udGFpbmVyCiAgLy8vIGFuZCByZXR1cm5zIGEgbWFwIG9mIGxvY2FscyB0byB0aGUgY29ycmVzcG9uZGluZyByZWNvcmRzIGNyZWF0ZWQuCiAgQG92ZXJyaWRlCiAgTWFwPExvY2FsLCBKUmVjb3JkRmllbGQ+IG1ha2VSZWNvcmRDb250YWluZXIoCiAgICAgIEtlcm5lbFNjb3BlSW5mbyBpbmZvLCBNZW1iZXJFbnRpdHkgbWVtYmVyLCBLZXJuZWxUb0xvY2Fsc01hcCBsb2NhbHNNYXApIHsKICAgIE1hcDxMb2NhbCwgSlJlY29yZEZpZWxkPiBib3hlZEZpZWxkcyA9IHt9OwogICAgaWYgKGluZm8uYm94ZWRWYXJpYWJsZXMuaXNOb3RFbXB0eSkgewogICAgICBOb2RlQm94IGJveCA9IGluZm8uY2FwdHVyZWRWYXJpYWJsZXNBY2Nlc3NvcjsKCiAgICAgIE1hcDxTdHJpbmcsIEluZGV4ZWRNZW1iZXI+IG1lbWJlck1hcCA9IDxTdHJpbmcsIEluZGV4ZWRNZW1iZXI+e307CiAgICAgIEpSZWNvcmQgY29udGFpbmVyID0gbmV3IEpSZWNvcmQobWVtYmVyLmxpYnJhcnksIGJveC5uYW1lKTsKICAgICAgQm94TG9jYWwgYm94TG9jYWwgPSBuZXcgQm94TG9jYWwoY29udGFpbmVyKTsKICAgICAgSW50ZXJmYWNlVHlwZSB0aGlzVHlwZSA9IG5ldyBJbnRlcmZhY2VUeXBlKGNvbnRhaW5lciwgY29uc3QgPERhcnRUeXBlPltdKTsKICAgICAgSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUgPSBjb21tb25FbGVtZW50cy5vYmplY3RUeXBlOwogICAgICBKQ2xhc3NEYXRhIGNvbnRhaW5lckRhdGEgPSBuZXcgUmVjb3JkQ2xhc3NEYXRhKAogICAgICAgICAgbmV3IFJlY29yZENvbnRhaW5lckRlZmluaXRpb24oZ2V0TWVtYmVyRGVmaW5pdGlvbihtZW1iZXIpLmxvY2F0aW9uKSwKICAgICAgICAgIHRoaXNUeXBlLAogICAgICAgICAgc3VwZXJ0eXBlLAogICAgICAgICAgZ2V0T3JkZXJlZFR5cGVTZXQoc3VwZXJ0eXBlLmVsZW1lbnQpLmV4dGVuZENsYXNzKHRoaXNUeXBlKSk7CiAgICAgIGNsYXNzZXMucmVnaXN0ZXIoY29udGFpbmVyLCBjb250YWluZXJEYXRhLCBuZXcgUmVjb3JkRW52KG1lbWJlck1hcCkpOwoKICAgICAgSW50ZXJmYWNlVHlwZSBtZW1iZXJUaGlzVHlwZSA9IG1lbWJlci5lbmNsb3NpbmdDbGFzcyAhPSBudWxsCiAgICAgICAgICA/IGVsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShtZW1iZXIuZW5jbG9zaW5nQ2xhc3MpCiAgICAgICAgICA6IG51bGw7CiAgICAgIGZvciAoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSBpbiBpbmZvLmJveGVkVmFyaWFibGVzKSB7CiAgICAgICAgYm94ZWRGaWVsZHNbbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUodmFyaWFibGUpXSA9CiAgICAgICAgICAgIF9jb25zdHJ1Y3RSZWNvcmRGaWVsZEVudHJ5KAogICAgICAgICAgICAgICAgbWVtYmVyVGhpc1R5cGUsIHZhcmlhYmxlLCBib3hMb2NhbCwgbWVtYmVyTWFwLCBsb2NhbHNNYXApOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYm94ZWRGaWVsZHM7CiAgfQoKICBib29sIF9pc0luUmVjb3JkKAogICAgICAgICAgTG9jYWwgbG9jYWwsIE1hcDxMb2NhbCwgSlJlY29yZEZpZWxkPiByZWNvcmRGaWVsZHNWaXNpYmxlSW5TY29wZSkgPT4KICAgICAgcmVjb3JkRmllbGRzVmlzaWJsZUluU2NvcGUuY29udGFpbnNLZXkobG9jYWwpOwoKICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgX2dldFBhcmFtZXRlclN0cnVjdHVyZUZyb21GdW5jdGlvbk5vZGUoCiAgICAgIGlyLkZ1bmN0aW9uTm9kZSBub2RlKSB7CiAgICBpbnQgcmVxdWlyZWRQYXJhbWV0ZXJzID0gbm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50OwogICAgaW50IHBvc2l0aW9uYWxQYXJhbWV0ZXJzID0gbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGg7CiAgICBpbnQgdHlwZVBhcmFtZXRlcnMgPSBub2RlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsKICAgIExpc3Q8U3RyaW5nPiBuYW1lZFBhcmFtZXRlcnMgPQogICAgICAgIG5vZGUubmFtZWRQYXJhbWV0ZXJzLm1hcCgocCkgPT4gcC5uYW1lKS50b0xpc3QoKS4uc29ydCgpOwogICAgcmV0dXJuIG5ldyBQYXJhbWV0ZXJTdHJ1Y3R1cmUocmVxdWlyZWRQYXJhbWV0ZXJzLCBwb3NpdGlvbmFsUGFyYW1ldGVycywKICAgICAgICBuYW1lZFBhcmFtZXRlcnMsIHR5cGVQYXJhbWV0ZXJzKTsKICB9CgogIEtlcm5lbENsb3N1cmVDbGFzc0luZm8gY29uc3RydWN0Q2xvc3VyZUNsYXNzKAogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyLAogICAgICBpci5GdW5jdGlvbk5vZGUgbm9kZSwKICAgICAgSkxpYnJhcnkgZW5jbG9zaW5nTGlicmFyeSwKICAgICAgTWFwPExvY2FsLCBKUmVjb3JkRmllbGQ+IHJlY29yZEZpZWxkc1Zpc2libGVJblNjb3BlLAogICAgICBLZXJuZWxTY29wZUluZm8gaW5mbywKICAgICAgS2VybmVsVG9Mb2NhbHNNYXAgbG9jYWxzTWFwLAogICAgICBJbnRlcmZhY2VUeXBlIHN1cGVydHlwZSwKICAgICAge2Jvb2wgY3JlYXRlU2lnbmF0dXJlTWV0aG9kfSkgewogICAgSW50ZXJmYWNlVHlwZSBtZW1iZXJUaGlzVHlwZSA9IG1lbWJlci5lbmNsb3NpbmdDbGFzcyAhPSBudWxsCiAgICAgICAgPyBlbGVtZW50RW52aXJvbm1lbnQuZ2V0VGhpc1R5cGUobWVtYmVyLmVuY2xvc2luZ0NsYXNzKQogICAgICAgIDogbnVsbDsKICAgIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzIHR5cGVWYXJpYWJsZUFjY2VzcyA9CiAgICAgICAgbWVtYmVycy5nZXREYXRhKG1lbWJlcikuY2xhc3NUeXBlVmFyaWFibGVBY2Nlc3M7CiAgICBpZiAodHlwZVZhcmlhYmxlQWNjZXNzID09IENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLmluc3RhbmNlRmllbGQpIHsKICAgICAgLy8gQSBjbG9zdXJlIGluIGEgZmllbGQgaW5pdGlhbGl6ZXIgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIGluIHRoZQogICAgICAvLyBjb25zdHJ1Y3RvciBhbmQgdHlwZSB2YXJpYWJsZXMgYXJlIHRoZXJlZm9yZSBhY2Nlc3NlZCB0aHJvdWdoCiAgICAgIC8vIHBhcmFtZXRlcnMuCiAgICAgIHR5cGVWYXJpYWJsZUFjY2VzcyA9IENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLnBhcmFtZXRlcjsKICAgIH0KICAgIFN0cmluZyBuYW1lID0gX2NvbXB1dGVDbG9zdXJlTmFtZShub2RlKTsKICAgIFNvdXJjZVNwYW4gbG9jYXRpb24gPSBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShub2RlKTsKICAgIE1hcDxTdHJpbmcsIEluZGV4ZWRNZW1iZXI+IG1lbWJlck1hcCA9IDxTdHJpbmcsIEluZGV4ZWRNZW1iZXI+e307CgogICAgSkNsYXNzIGNsYXNzRW50aXR5ID0gbmV3IEpDbG9zdXJlQ2xhc3MoZW5jbG9zaW5nTGlicmFyeSwgbmFtZSk7CiAgICAvLyBDcmVhdGUgYSBjbGFzc0RhdGEgYW5kIHNldCB1cCB0aGUgaW50ZXJmYWNlcyBhbmQgc3ViY2xhc3MKICAgIC8vIHJlbGF0aW9uc2hpcHMgdGhhdCBfZW5zdXJlU3VwZXJ0eXBlcyBhbmQgX2Vuc3VyZVRoaXNBbmRSYXdUeXBlIGFyZSBkb2luZwogICAgSW50ZXJmYWNlVHlwZSB0aGlzVHlwZSA9IG5ldyBJbnRlcmZhY2VUeXBlKGNsYXNzRW50aXR5LCBjb25zdCA8RGFydFR5cGU+W10pOwogICAgQ2xvc3VyZUNsYXNzRGF0YSBjbG9zdXJlRGF0YSA9IG5ldyBDbG9zdXJlQ2xhc3NEYXRhKAogICAgICAgIG5ldyBDbG9zdXJlQ2xhc3NEZWZpbml0aW9uKGxvY2F0aW9uKSwKICAgICAgICB0aGlzVHlwZSwKICAgICAgICBzdXBlcnR5cGUsCiAgICAgICAgZ2V0T3JkZXJlZFR5cGVTZXQoc3VwZXJ0eXBlLmVsZW1lbnQpLmV4dGVuZENsYXNzKHRoaXNUeXBlKSk7CiAgICBjbGFzc2VzLnJlZ2lzdGVyKGNsYXNzRW50aXR5LCBjbG9zdXJlRGF0YSwgbmV3IENsb3N1cmVDbGFzc0VudihtZW1iZXJNYXApKTsKCiAgICBMb2NhbCBjbG9zdXJlRW50aXR5OwogICAgaWYgKG5vZGUucGFyZW50IGlzIGlyLkZ1bmN0aW9uRGVjbGFyYXRpb24pIHsKICAgICAgaXIuRnVuY3Rpb25EZWNsYXJhdGlvbiBwYXJlbnQgPSBub2RlLnBhcmVudDsKICAgICAgY2xvc3VyZUVudGl0eSA9IGxvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKHBhcmVudC52YXJpYWJsZSk7CiAgICB9IGVsc2UgaWYgKG5vZGUucGFyZW50IGlzIGlyLkZ1bmN0aW9uRXhwcmVzc2lvbikgewogICAgICBjbG9zdXJlRW50aXR5ID0gbmV3IEFub255bW91c0Nsb3N1cmVMb2NhbChjbGFzc0VudGl0eSk7CiAgICB9CgogICAgSW5kZXhlZEZ1bmN0aW9uIGNhbGxNZXRob2QgPSBuZXcgSkNsb3N1cmVDYWxsTWV0aG9kKGNsYXNzRW50aXR5LAogICAgICAgIF9nZXRQYXJhbWV0ZXJTdHJ1Y3R1cmVGcm9tRnVuY3Rpb25Ob2RlKG5vZGUpLCBnZXRBc3luY01hcmtlcihub2RlKSk7CiAgICBfbmVzdGVkQ2xvc3VyZU1hcAogICAgICAgIC5wdXRJZkFic2VudChtZW1iZXIsICgpID0+IDxJbmRleGVkRnVuY3Rpb24+W10pCiAgICAgICAgLmFkZChjYWxsTWV0aG9kKTsKICAgIC8vIFdlIG5lZWQgY3JlYXRlIHRoZSB0eXBlIHZhcmlhYmxlIGhlcmUgLSBiZWZvcmUgd2UgdHJ5IHRvIG1ha2UgbG9jYWwKICAgIC8vIHZhcmlhYmxlcyBmcm9tIHRoZW0gKGluIGBKc1Njb3BlSW5mby5mcm9tYCBjYWxsZWQgdGhyb3VnaAogICAgLy8gYEtlcm5lbENsb3N1cmVDbGFzc0luZm8uZnJvbVNjb3BlSW5mb2AgYmVsb3cpLgogICAgaW50IGluZGV4ID0gMDsKICAgIGZvciAoaXIuVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyIGluIG5vZGUudHlwZVBhcmFtZXRlcnMpIHsKICAgICAgdHlwZVZhcmlhYmxlTWFwW3R5cGVQYXJhbWV0ZXJdID0gdHlwZVZhcmlhYmxlcy5yZWdpc3RlcigKICAgICAgICAgIGNyZWF0ZVR5cGVWYXJpYWJsZShjYWxsTWV0aG9kLCB0eXBlUGFyYW1ldGVyLm5hbWUsIGluZGV4KSwKICAgICAgICAgIG5ldyBKVHlwZVZhcmlhYmxlRGF0YSh0eXBlUGFyYW1ldGVyKSk7CiAgICAgIGluZGV4Kys7CiAgICB9CgogICAgS2VybmVsQ2xvc3VyZUNsYXNzSW5mbyBjbG9zdXJlQ2xhc3NJbmZvID0KICAgICAgICBuZXcgS2VybmVsQ2xvc3VyZUNsYXNzSW5mby5mcm9tU2NvcGVJbmZvKAogICAgICAgICAgICBjbGFzc0VudGl0eSwKICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgPExvY2FsLCBKUmVjb3JkRmllbGQ+e30sCiAgICAgICAgICAgIGluZm8sCiAgICAgICAgICAgIGxvY2Fsc01hcCwKICAgICAgICAgICAgY2xvc3VyZUVudGl0eSwKICAgICAgICAgICAgaW5mby5oYXNUaGlzTG9jYWwKICAgICAgICAgICAgICAgID8gbmV3IFRoaXNMb2NhbChsb2NhbHNNYXAuY3VycmVudE1lbWJlci5lbmNsb3NpbmdDbGFzcykKICAgICAgICAgICAgICAgIDogbnVsbCwKICAgICAgICAgICAgdGhpcyk7CiAgICBfYnVpbGRDbG9zdXJlQ2xhc3NGaWVsZHMoY2xvc3VyZUNsYXNzSW5mbywgbWVtYmVyLCBtZW1iZXJUaGlzVHlwZSwgaW5mbywKICAgICAgICBsb2NhbHNNYXAsIHJlY29yZEZpZWxkc1Zpc2libGVJblNjb3BlLCBtZW1iZXJNYXApOwoKICAgIGlmIChjcmVhdGVTaWduYXR1cmVNZXRob2QpIHsKICAgICAgX2NvbnN0cnVjdFNpZ25hdHVyZU1ldGhvZChjbG9zdXJlQ2xhc3NJbmZvLCBtZW1iZXJNYXAsIG5vZGUsCiAgICAgICAgICBtZW1iZXJUaGlzVHlwZSwgbG9jYXRpb24sIHR5cGVWYXJpYWJsZUFjY2Vzcyk7CiAgICB9CgogICAgY2xvc3VyZURhdGEuY2FsbFR5cGUgPSBnZXRGdW5jdGlvblR5cGUobm9kZSk7CgogICAgbWVtYmVycy5yZWdpc3RlcjxJbmRleGVkRnVuY3Rpb24sIEZ1bmN0aW9uRGF0YT4oCiAgICAgICAgY2FsbE1ldGhvZCwKICAgICAgICBuZXcgQ2xvc3VyZUZ1bmN0aW9uRGF0YSgKICAgICAgICAgICAgbmV3IENsb3N1cmVNZW1iZXJEZWZpbml0aW9uKAogICAgICAgICAgICAgICAgbG9jYXRpb24sIE1lbWJlcktpbmQuY2xvc3VyZUNhbGwsIG5vZGUucGFyZW50KSwKICAgICAgICAgICAgbWVtYmVyVGhpc1R5cGUsCiAgICAgICAgICAgIGNsb3N1cmVEYXRhLmNhbGxUeXBlLAogICAgICAgICAgICBub2RlLAogICAgICAgICAgICB0eXBlVmFyaWFibGVBY2Nlc3MpKTsKICAgIG1lbWJlck1hcFtjYWxsTWV0aG9kLm5hbWVdID0gY2xvc3VyZUNsYXNzSW5mby5jYWxsTWV0aG9kID0gY2FsbE1ldGhvZDsKICAgIHJldHVybiBjbG9zdXJlQ2xhc3NJbmZvOwogIH0KCiAgdm9pZCBfYnVpbGRDbG9zdXJlQ2xhc3NGaWVsZHMoCiAgICAgIEtlcm5lbENsb3N1cmVDbGFzc0luZm8gY2xvc3VyZUNsYXNzSW5mbywKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciwKICAgICAgSW50ZXJmYWNlVHlwZSBtZW1iZXJUaGlzVHlwZSwKICAgICAgS2VybmVsU2NvcGVJbmZvIGluZm8sCiAgICAgIEtlcm5lbFRvTG9jYWxzTWFwIGxvY2Fsc01hcCwKICAgICAgTWFwPExvY2FsLCBKUmVjb3JkRmllbGQ+IHJlY29yZEZpZWxkc1Zpc2libGVJblNjb3BlLAogICAgICBNYXA8U3RyaW5nLCBNZW1iZXJFbnRpdHk+IG1lbWJlck1hcCkgewogICAgLy8gVE9ETyhlZm9ydHVuYSk6IExpbWl0IGZpZWxkIG51bWJlciB1c2FnZSB0byB3aGVuIHdlIG5lZWQgdG8gZGlzdGluZ3Vpc2gKICAgIC8vIGJldHdlZW4gdHdvIHZhcmlhYmxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgZnJvbSBkaWZmZXJlbnQgc2NvcGVzLgogICAgaW50IGZpZWxkTnVtYmVyID0gMDsKCiAgICAvLyBGb3IgdGhlIGNhcHR1cmVkIHZhcmlhYmxlcyB0aGF0IGFyZSBib3hlZCwgZW5zdXJlIHRoaXMgY2xvc3VyZSBoYXMgYQogICAgLy8gZmllbGQgdG8gcmVmZXJlbmNlIHRoZSBib3guIFRoaXMgcHV0cyB0aGUgYm94ZXMgZmlyc3QgaW4gdGhlIGNsb3N1cmUgbGlrZQogICAgLy8gdGhlIEFTVCBmcm9udC1lbmQsIGJ1dCBvdGhlcndpc2UgdGhlcmUgaXMgbm8gcmVhc29uIHRvIHNlcGFyYXRlIHRoaXMgbG9vcAogICAgLy8gZnJvbSB0aGUgb25lIGJlbG93LgogICAgLy8gVE9ETyhyZWRlbXB0aW9uKTogTWVyZ2UgdGhpcyBsb29wIGFuZCB0aGUgZm9sbG93aW5nLgoKICAgIGZvciAoaXIuTm9kZSB2YXJpYWJsZSBpbiBpbmZvLmZyZWVWYXJpYWJsZXMpIHsKICAgICAgaWYgKHZhcmlhYmxlIGlzIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24pIHsKICAgICAgICBMb2NhbCBjYXB0dXJlZExvY2FsID0gbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUodmFyaWFibGUpOwogICAgICAgIGlmIChfaXNJblJlY29yZChjYXB0dXJlZExvY2FsLCByZWNvcmRGaWVsZHNWaXNpYmxlSW5TY29wZSkpIHsKICAgICAgICAgIGJvb2wgY29uc3RydWN0ZWRGaWVsZCA9IF9jb25zdHJ1Y3RDbG9zdXJlRmllbGRGb3JSZWNvcmQoCiAgICAgICAgICAgICAgY2FwdHVyZWRMb2NhbCwKICAgICAgICAgICAgICBjbG9zdXJlQ2xhc3NJbmZvLAogICAgICAgICAgICAgIG1lbWJlclRoaXNUeXBlLAogICAgICAgICAgICAgIG1lbWJlck1hcCwKICAgICAgICAgICAgICB2YXJpYWJsZSwKICAgICAgICAgICAgICByZWNvcmRGaWVsZHNWaXNpYmxlSW5TY29wZSwKICAgICAgICAgICAgICBmaWVsZE51bWJlcik7CiAgICAgICAgICBpZiAoY29uc3RydWN0ZWRGaWVsZCkgZmllbGROdW1iZXIrKzsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBBZGQgYSBmaWVsZCBmb3IgdGhlIGNhcHR1cmVkICd0aGlzJy4KICAgIGlmIChpbmZvLnRoaXNVc2VkQXNGcmVlVmFyaWFibGUpIHsKICAgICAgX2NvbnN0cnVjdENsb3N1cmVGaWVsZCgKICAgICAgICAgIGNsb3N1cmVDbGFzc0luZm8udGhpc0xvY2FsLAogICAgICAgICAgY2xvc3VyZUNsYXNzSW5mbywKICAgICAgICAgIG1lbWJlclRoaXNUeXBlLAogICAgICAgICAgbWVtYmVyTWFwLAogICAgICAgICAgZ2V0Q2xhc3NEZWZpbml0aW9uKG1lbWJlci5lbmNsb3NpbmdDbGFzcykubm9kZSwKICAgICAgICAgIHRydWUsCiAgICAgICAgICBmYWxzZSwKICAgICAgICAgIGZpZWxkTnVtYmVyKTsKICAgICAgZmllbGROdW1iZXIrKzsKICAgIH0KCiAgICBmb3IgKGlyLk5vZGUgdmFyaWFibGUgaW4gaW5mby5mcmVlVmFyaWFibGVzKSB7CiAgICAgIC8vIE1ha2UgYSBjb3JyZXNwb25kaW5nIGZpZWxkIGVudGl0eSBpbiB0aGlzIGNsb3N1cmUgY2xhc3MgZm9yIHRoZQogICAgICAvLyBmcmVlIHZhcmlhYmxlcyBpbiB0aGUgS2VybmVsU2NvcGVJbmZvLmZyZWVWYXJpYWJsZS4KICAgICAgaWYgKHZhcmlhYmxlIGlzIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24pIHsKICAgICAgICBMb2NhbCBjYXB0dXJlZExvY2FsID0gbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUodmFyaWFibGUpOwogICAgICAgIGlmICghX2lzSW5SZWNvcmQoY2FwdHVyZWRMb2NhbCwgcmVjb3JkRmllbGRzVmlzaWJsZUluU2NvcGUpKSB7CiAgICAgICAgICBfY29uc3RydWN0Q2xvc3VyZUZpZWxkKAogICAgICAgICAgICAgIGNhcHR1cmVkTG9jYWwsCiAgICAgICAgICAgICAgY2xvc3VyZUNsYXNzSW5mbywKICAgICAgICAgICAgICBtZW1iZXJUaGlzVHlwZSwKICAgICAgICAgICAgICBtZW1iZXJNYXAsCiAgICAgICAgICAgICAgdmFyaWFibGUsCiAgICAgICAgICAgICAgdmFyaWFibGUuaXNDb25zdCwKICAgICAgICAgICAgICBmYWxzZSwgLy8gQ2xvc3VyZSBmaWVsZCBpcyBuZXZlciBhc3NpZ25lZCAob25seSBib3ggZmllbGRzKS4KICAgICAgICAgICAgICBmaWVsZE51bWJlcik7CiAgICAgICAgICBmaWVsZE51bWJlcisrOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICh2YXJpYWJsZSBpcyBUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQpIHsKICAgICAgICBfY29uc3RydWN0Q2xvc3VyZUZpZWxkKAogICAgICAgICAgICBsb2NhbHNNYXAuZ2V0TG9jYWxUeXBlVmFyaWFibGUodmFyaWFibGUudHlwZSwgdGhpcyksCiAgICAgICAgICAgIGNsb3N1cmVDbGFzc0luZm8sCiAgICAgICAgICAgIG1lbWJlclRoaXNUeXBlLAogICAgICAgICAgICBtZW1iZXJNYXAsCiAgICAgICAgICAgIHZhcmlhYmxlLnR5cGUucGFyYW1ldGVyLAogICAgICAgICAgICB0cnVlLAogICAgICAgICAgICBmYWxzZSwKICAgICAgICAgICAgZmllbGROdW1iZXIpOwogICAgICAgIGZpZWxkTnVtYmVyKys7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlVuZXhwZWN0ZWQgZmllbGQgbm9kZSB0eXBlOiAkdmFyaWFibGUiKTsKICAgICAgfQogICAgfQogIH0KCiAgLy8vIFJlY29yZHMgcG9pbnQgdG8gb25lIG9yIG1vcmUgbG9jYWwgdmFyaWFibGVzIGRlY2xhcmVkIGluIGFub3RoZXIgc2NvcGUKICAvLy8gdGhhdCBhcmUgY2FwdHVyZWQgaW4gYSBzY29wZS4gQWNjZXNzIHRvIHRob3NlIHZhcmlhYmxlcyBnb2VzIGVudGlyZWx5CiAgLy8vIHRocm91Z2ggdGhlIHJlY29yZCBjb250YWluZXIsIHNvIHdlIG9ubHkgY3JlYXRlIGEgZmllbGQgZm9yIHRoZSAqcmVjb3JkKgogIC8vLyBob2xkaW5nIFtjYXB0dXJlZExvY2FsXSBhbmQgbm90IHRoZSBpbmRpdmlkdWFsIGxvY2FsIHZhcmlhYmxlcyBhY2Nlc3NlZAogIC8vLyB0aHJvdWdoIHRoZSByZWNvcmQuIFJlY29yZHMsIGJ5IGRlZmluaXRpb24sIGFyZSBub3QgbXV0YWJsZSAodGhvdWdoIHRoZQogIC8vLyBsb2NhbHMgdGhleSBjb250YWluIG1heSBiZSkuIFJldHVybnMgYHRydWVgIGlmIHdlIGNvbnN0cnVjdGVkIGEgbmV3IGZpZWxkCiAgLy8vIGluIHRoZSBjbG9zdXJlIGNsYXNzLgogIGJvb2wgX2NvbnN0cnVjdENsb3N1cmVGaWVsZEZvclJlY29yZCgKICAgICAgTG9jYWwgY2FwdHVyZWRMb2NhbCwKICAgICAgS2VybmVsQ2xvc3VyZUNsYXNzSW5mbyBjbG9zdXJlQ2xhc3NJbmZvLAogICAgICBJbnRlcmZhY2VUeXBlIG1lbWJlclRoaXNUeXBlLAogICAgICBNYXA8U3RyaW5nLCBNZW1iZXJFbnRpdHk+IG1lbWJlck1hcCwKICAgICAgaXIuVHJlZU5vZGUgc291cmNlTm9kZSwKICAgICAgTWFwPExvY2FsLCBKUmVjb3JkRmllbGQ+IHJlY29yZEZpZWxkc1Zpc2libGVJblNjb3BlLAogICAgICBpbnQgZmllbGROdW1iZXIpIHsKICAgIEpSZWNvcmRGaWVsZCByZWNvcmRGaWVsZCA9IHJlY29yZEZpZWxkc1Zpc2libGVJblNjb3BlW2NhcHR1cmVkTG9jYWxdOwoKICAgIC8vIERvbid0IGNvbnN0cnVjdCBhIG5ldyBmaWVsZCBpZiB0aGUgYm94IHRoYXQgaG9sZHMgdGhpcyBsb2NhbCBhbHJlYWR5IGhhcwogICAgLy8gYSBmaWVsZCBpbiB0aGUgY2xvc3VyZSBjbGFzcy4KICAgIGlmIChjbG9zdXJlQ2xhc3NJbmZvLmxvY2FsVG9GaWVsZE1hcC5jb250YWluc0tleShyZWNvcmRGaWVsZC5ib3gpKSB7CiAgICAgIGNsb3N1cmVDbGFzc0luZm8uYm94ZWRWYXJpYWJsZXNbY2FwdHVyZWRMb2NhbF0gPSByZWNvcmRGaWVsZDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIEZpZWxkRW50aXR5IGNsb3N1cmVGaWVsZCA9IG5ldyBKQ2xvc3VyZUZpZWxkKAogICAgICAgICdfYm94XyRmaWVsZE51bWJlcicsIGNsb3N1cmVDbGFzc0luZm8sIHJlY29yZEZpZWxkLmJveC5uYW1lLAogICAgICAgIGlzQ29uc3Q6IHRydWUsIGlzQXNzaWduYWJsZTogZmFsc2UpOwoKICAgIG1lbWJlcnMucmVnaXN0ZXI8SW5kZXhlZEZpZWxkLCBKRmllbGREYXRhPigKICAgICAgICBjbG9zdXJlRmllbGQsCiAgICAgICAgbmV3IENsb3N1cmVGaWVsZERhdGEoCiAgICAgICAgICAgIG5ldyBDbG9zdXJlTWVtYmVyRGVmaW5pdGlvbigKICAgICAgICAgICAgICAgIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKHNvdXJjZU5vZGUpLAogICAgICAgICAgICAgICAgTWVtYmVyS2luZC5jbG9zdXJlRmllbGQsCiAgICAgICAgICAgICAgICBzb3VyY2VOb2RlKSwKICAgICAgICAgICAgbWVtYmVyVGhpc1R5cGUpKTsKICAgIG1lbWJlck1hcFtjbG9zdXJlRmllbGQubmFtZV0gPSBjbG9zdXJlRmllbGQ7CiAgICBjbG9zdXJlQ2xhc3NJbmZvLmxvY2FsVG9GaWVsZE1hcFtyZWNvcmRGaWVsZC5ib3hdID0gY2xvc3VyZUZpZWxkOwogICAgY2xvc3VyZUNsYXNzSW5mby5ib3hlZFZhcmlhYmxlc1tjYXB0dXJlZExvY2FsXSA9IHJlY29yZEZpZWxkOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICB2b2lkIF9jb25zdHJ1Y3RTaWduYXR1cmVNZXRob2QoCiAgICAgIEtlcm5lbENsb3N1cmVDbGFzc0luZm8gY2xvc3VyZUNsYXNzSW5mbywKICAgICAgTWFwPFN0cmluZywgTWVtYmVyRW50aXR5PiBtZW1iZXJNYXAsCiAgICAgIGlyLkZ1bmN0aW9uTm9kZSBjbG9zdXJlU291cmNlTm9kZSwKICAgICAgSW50ZXJmYWNlVHlwZSBtZW1iZXJUaGlzVHlwZSwKICAgICAgU291cmNlU3BhbiBsb2NhdGlvbiwKICAgICAgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgdHlwZVZhcmlhYmxlQWNjZXNzKSB7CiAgICBGdW5jdGlvbkVudGl0eSBzaWduYXR1cmVNZXRob2QgPQogICAgICAgIG5ldyBKU2lnbmF0dXJlTWV0aG9kKGNsb3N1cmVDbGFzc0luZm8uY2xvc3VyZUNsYXNzRW50aXR5KTsKICAgIG1lbWJlcnMucmVnaXN0ZXI8SW5kZXhlZEZ1bmN0aW9uLCBGdW5jdGlvbkRhdGE+KAogICAgICAgIHNpZ25hdHVyZU1ldGhvZCwKICAgICAgICBuZXcgU2lnbmF0dXJlRnVuY3Rpb25EYXRhKAogICAgICAgICAgICBuZXcgU3BlY2lhbE1lbWJlckRlZmluaXRpb24oCiAgICAgICAgICAgICAgICBjbG9zdXJlU291cmNlTm9kZS5wYXJlbnQsIE1lbWJlcktpbmQuc2lnbmF0dXJlKSwKICAgICAgICAgICAgbWVtYmVyVGhpc1R5cGUsCiAgICAgICAgICAgIGNsb3N1cmVTb3VyY2VOb2RlLnR5cGVQYXJhbWV0ZXJzLAogICAgICAgICAgICB0eXBlVmFyaWFibGVBY2Nlc3MpKTsKICAgIG1lbWJlck1hcFtzaWduYXR1cmVNZXRob2QubmFtZV0gPQogICAgICAgIGNsb3N1cmVDbGFzc0luZm8uc2lnbmF0dXJlTWV0aG9kID0gc2lnbmF0dXJlTWV0aG9kOwogIH0KCiAgdm9pZCBfY29uc3RydWN0Q2xvc3VyZUZpZWxkKAogICAgICBMb2NhbCBjYXB0dXJlZExvY2FsLAogICAgICBLZXJuZWxDbG9zdXJlQ2xhc3NJbmZvIGNsb3N1cmVDbGFzc0luZm8sCiAgICAgIEludGVyZmFjZVR5cGUgbWVtYmVyVGhpc1R5cGUsCiAgICAgIE1hcDxTdHJpbmcsIE1lbWJlckVudGl0eT4gbWVtYmVyTWFwLAogICAgICBpci5UcmVlTm9kZSBzb3VyY2VOb2RlLAogICAgICBib29sIGlzQ29uc3QsCiAgICAgIGJvb2wgaXNBc3NpZ25hYmxlLAogICAgICBpbnQgZmllbGROdW1iZXIpIHsKICAgIEZpZWxkRW50aXR5IGNsb3N1cmVGaWVsZCA9IG5ldyBKQ2xvc3VyZUZpZWxkKAogICAgICAgIF9nZXRDbG9zdXJlVmFyaWFibGVOYW1lKGNhcHR1cmVkTG9jYWwubmFtZSwgZmllbGROdW1iZXIpLAogICAgICAgIGNsb3N1cmVDbGFzc0luZm8sCiAgICAgICAgY2FwdHVyZWRMb2NhbC5uYW1lLAogICAgICAgIGlzQ29uc3Q6IGlzQ29uc3QsCiAgICAgICAgaXNBc3NpZ25hYmxlOiBpc0Fzc2lnbmFibGUpOwoKICAgIG1lbWJlcnMucmVnaXN0ZXI8SW5kZXhlZEZpZWxkLCBKRmllbGREYXRhPigKICAgICAgICBjbG9zdXJlRmllbGQsCiAgICAgICAgbmV3IENsb3N1cmVGaWVsZERhdGEoCiAgICAgICAgICAgIG5ldyBDbG9zdXJlTWVtYmVyRGVmaW5pdGlvbigKICAgICAgICAgICAgICAgIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKHNvdXJjZU5vZGUpLAogICAgICAgICAgICAgICAgTWVtYmVyS2luZC5jbG9zdXJlRmllbGQsCiAgICAgICAgICAgICAgICBzb3VyY2VOb2RlKSwKICAgICAgICAgICAgbWVtYmVyVGhpc1R5cGUpKTsKICAgIG1lbWJlck1hcFtjbG9zdXJlRmllbGQubmFtZV0gPSBjbG9zdXJlRmllbGQ7CiAgICBjbG9zdXJlQ2xhc3NJbmZvLmxvY2FsVG9GaWVsZE1hcFtjYXB0dXJlZExvY2FsXSA9IGNsb3N1cmVGaWVsZDsKICB9CgogIC8vIFJldHVybnMgYSBub24tdW5pcXVlIG5hbWUgZm9yIHRoZSBnaXZlbiBjbG9zdXJlIGVsZW1lbnQuCiAgU3RyaW5nIF9jb21wdXRlQ2xvc3VyZU5hbWUoaXIuVHJlZU5vZGUgdHJlZU5vZGUpIHsKICAgIHZhciBwYXJ0cyA9IDxTdHJpbmc+W107CiAgICAvLyBGaXJzdCBhbm9ueW1vdXMgaXMgY2FsbGVkICdjbG9zdXJlJywgb3V0ZXIgb25lcyBjYWxsZWQgJycgdG8gZ2l2ZSBhCiAgICAvLyBjb21wb3VuZCBuYW1lIHdoZXJlIGluY3JlYXNpbmcgbmVzdGluZyBsZXZlbCBjb3JyZXNwb25kcyB0byBleHRyYQogICAgLy8gdW5kZXJzY29yZXMuCiAgICB2YXIgYW5vbnltb3VzID0gJ2Nsb3N1cmUnOwogICAgaXIuVHJlZU5vZGUgY3VycmVudCA9IHRyZWVOb2RlOwogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU2ltcGxpZnkgY29tcHV0ZWQgbmFtZXMuCiAgICB3aGlsZSAoY3VycmVudCAhPSBudWxsKSB7CiAgICAgIHZhciBub2RlID0gY3VycmVudDsKICAgICAgaWYgKG5vZGUgaXMgaXIuRnVuY3Rpb25FeHByZXNzaW9uKSB7CiAgICAgICAgcGFydHMuYWRkKGFub255bW91cyk7CiAgICAgICAgYW5vbnltb3VzID0gJyc7CiAgICAgIH0gZWxzZSBpZiAobm9kZSBpcyBpci5GdW5jdGlvbkRlY2xhcmF0aW9uKSB7CiAgICAgICAgU3RyaW5nIG5hbWUgPSBub2RlLnZhcmlhYmxlLm5hbWU7CiAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCAmJiBuYW1lICE9ICIiKSB7CiAgICAgICAgICBwYXJ0cy5hZGQodXRpbHMub3BlcmF0b3JOYW1lVG9JZGVudGlmaWVyKG5hbWUpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcGFydHMuYWRkKGFub255bW91cyk7CiAgICAgICAgICBhbm9ueW1vdXMgPSAnJzsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAobm9kZSBpcyBpci5DbGFzcykgewogICAgICAgIC8vIFRPRE8oc3JhKTogRG8gc29tZXRoaW5nIHdpdGggYWJzdHJhY3RlZCBtaXhpbiB0eXBlIG5hbWVzIGxpa2UgJ14jVTAnLgogICAgICAgIHBhcnRzLmFkZChub2RlLm5hbWUpOwogICAgICAgIGJyZWFrOwogICAgICB9IGVsc2UgaWYgKG5vZGUgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICAgICAgaWYgKG5vZGUua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLkZhY3RvcnkpIHsKICAgICAgICAgIHBhcnRzLmFkZCh1dGlscy5yZWNvbnN0cnVjdENvbnN0cnVjdG9yTmFtZShnZXRNZW1iZXIobm9kZSkpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcGFydHMuYWRkKHV0aWxzLm9wZXJhdG9yTmFtZVRvSWRlbnRpZmllcihub2RlLm5hbWUubmFtZSkpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChub2RlIGlzIGlyLkNvbnN0cnVjdG9yKSB7CiAgICAgICAgcGFydHMuYWRkKHV0aWxzLnJlY29uc3RydWN0Q29uc3RydWN0b3JOYW1lKGdldE1lbWJlcihub2RlKSkpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudDsKICAgIH0KICAgIHJldHVybiBwYXJ0cy5yZXZlcnNlZC5qb2luKCdfJyk7CiAgfQoKICAvLy8gR2VuZXJhdGUgYSB1bmlxdWUgbmFtZSBmb3IgdGhlIFtpZF10aCBjbG9zdXJlIGZpZWxkLCB3aXRoIHByb3Bvc2VkIG5hbWUKICAvLy8gW25hbWVdLgogIC8vLwogIC8vLyBUaGUgcmVzdWx0IGlzIHVzZWQgYXMgdGhlIG5hbWUgb2YgW0Nsb3N1cmVGaWVsZEVsZW1lbnRdcywgYW5kIG11c3QKICAvLy8gdGhlcmVmb3JlIGJlIHVuaXF1ZSB0byBhdm9pZCBicmVha2luZyBhbiBpbnZhcmlhbnQgaW4gdGhlIGVsZW1lbnQgbW9kZWwKICAvLy8gKGNsYXNzZXMgY2Fubm90IGRlY2xhcmUgbXVsdGlwbGUgZmllbGRzIHdpdGggdGhlIHNhbWUgbmFtZSkuCiAgLy8vCiAgLy8vIEFsc28sIHRoZSBuYW1lcyBzaG91bGQgYmUgZGlzdGluY3QgZnJvbSByZWFsIGZpZWxkIG5hbWVzIHRvIHByZXZlbnQKICAvLy8gY2xhc2hlcyB3aXRoIHNlbGVjdG9ycyBmb3IgdGhvc2UgZmllbGRzLgogIC8vLwogIC8vLyBUaGVzZSBuYW1lcyBhcmUgbm90IHVzZWQgaW4gZ2VuZXJhdGVkIGNvZGUsIGp1c3QgYXMgZWxlbWVudCBuYW1lLgogIFN0cmluZyBfZ2V0Q2xvc3VyZVZhcmlhYmxlTmFtZShTdHJpbmcgbmFtZSwgaW50IGlkKSB7CiAgICByZXR1cm4gIl9jYXB0dXJlZF8ke25hbWV9XyRpZCI7CiAgfQoKICBAb3ZlcnJpZGUKICBKR2VuZXJhdG9yQm9keSBnZXRHZW5lcmF0b3JCb2R5KGNvdmFyaWFudCBJbmRleGVkRnVuY3Rpb24gZnVuY3Rpb24pIHsKICAgIEpHZW5lcmF0b3JCb2R5IGdlbmVyYXRvckJvZHkgPSBfZ2VuZXJhdG9yQm9kaWVzW2Z1bmN0aW9uXTsKICAgIGlmIChnZW5lcmF0b3JCb2R5ID09IG51bGwpIHsKICAgICAgRnVuY3Rpb25EYXRhIGZ1bmN0aW9uRGF0YSA9IG1lbWJlcnMuZ2V0RGF0YShmdW5jdGlvbik7CiAgICAgIGlyLlRyZWVOb2RlIG5vZGUgPSBmdW5jdGlvbkRhdGEuZGVmaW5pdGlvbi5ub2RlOwogICAgICBEYXJ0VHlwZSBlbGVtZW50VHlwZSA9CiAgICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25Bc3luY09yU3luY1N0YXJFbGVtZW50VHlwZShmdW5jdGlvbik7CiAgICAgIGdlbmVyYXRvckJvZHkgPSBjcmVhdGVHZW5lcmF0b3JCb2R5KGZ1bmN0aW9uLCBlbGVtZW50VHlwZSk7CiAgICAgIG1lbWJlcnMucmVnaXN0ZXI8SW5kZXhlZEZ1bmN0aW9uLCBGdW5jdGlvbkRhdGE+KAogICAgICAgICAgZ2VuZXJhdG9yQm9keSwKICAgICAgICAgIG5ldyBHZW5lcmF0b3JCb2R5RnVuY3Rpb25EYXRhKGZ1bmN0aW9uRGF0YSwKICAgICAgICAgICAgICBuZXcgU3BlY2lhbE1lbWJlckRlZmluaXRpb24obm9kZSwgTWVtYmVyS2luZC5nZW5lcmF0b3JCb2R5KSkpOwoKICAgICAgaWYgKGZ1bmN0aW9uLmVuY2xvc2luZ0NsYXNzICE9IG51bGwpIHsKICAgICAgICAvLyBUT0RPKHNyYSk6IEludGVncmF0ZSB0aGlzIHdpdGggQ2xhc3NFbnZJbXBsLmFkZENvbnN0cnVjdG9yQm9keSA/CiAgICAgICAgKF9pbmplY3RlZENsYXNzTWVtYmVyc1tmdW5jdGlvbi5lbmNsb3NpbmdDbGFzc10gPz89IDxJbmRleGVkTWVtYmVyPltdKQogICAgICAgICAgICAuYWRkKGdlbmVyYXRvckJvZHkpOwogICAgICB9CiAgICAgIGxhdGVPdXRwdXRVbml0RGF0YUJ1aWxkZXIucmVnaXN0ZXJDb2xvY2F0ZWRNZW1iZXJzKAogICAgICAgICAgZ2VuZXJhdG9yQm9keS5mdW5jdGlvbiwgZ2VuZXJhdG9yQm9keSk7CiAgICAgIF9nZW5lcmF0b3JCb2RpZXNbZnVuY3Rpb25dID0gZ2VuZXJhdG9yQm9keTsKICAgIH0KICAgIHJldHVybiBnZW5lcmF0b3JCb2R5OwogIH0KfQoKY2xhc3MgSnNFbGVtZW50RW52aXJvbm1lbnQgZXh0ZW5kcyBFbGVtZW50RW52aXJvbm1lbnQKICAgIGltcGxlbWVudHMgSkVsZW1lbnRFbnZpcm9ubWVudCB7CiAgZmluYWwgSnNLZXJuZWxUb0VsZW1lbnRNYXAgZWxlbWVudE1hcDsKCiAgSnNFbGVtZW50RW52aXJvbm1lbnQodGhpcy5lbGVtZW50TWFwKTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0IGR5bmFtaWNUeXBlID0+IGNvbnN0IER5bmFtaWNUeXBlKCk7CgogIEBvdmVycmlkZQogIExpYnJhcnlFbnRpdHkgZ2V0IG1haW5MaWJyYXJ5ID0+IGVsZW1lbnRNYXAuX21haW5MaWJyYXJ5OwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgbWFpbkZ1bmN0aW9uID0+IGVsZW1lbnRNYXAuX21haW5GdW5jdGlvbjsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8TGlicmFyeUVudGl0eT4gZ2V0IGxpYnJhcmllcyA9PiBlbGVtZW50TWFwLmxpYnJhcnlMaXN0SW50ZXJuYWw7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXRMaWJyYXJ5TmFtZShMaWJyYXJ5RW50aXR5IGxpYnJhcnkpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLl9nZXRMaWJyYXJ5TmFtZShsaWJyYXJ5KTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0VGhpc1R5cGUoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5nZXRUaGlzVHlwZShjbHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRSYXdUeXBlKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuX2dldFJhd1R5cGUoY2xzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNHZW5lcmljQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gZ2V0VGhpc1R5cGUoY2xzKS50eXBlQXJndW1lbnRzLmlzTm90RW1wdHk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzTWl4aW5BcHBsaWNhdGlvbihDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLl9pc01peGluQXBwbGljYXRpb24oY2xzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbihDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLl9pc1VubmFtZWRNaXhpbkFwcGxpY2F0aW9uKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzU3VwZXJNaXhpbkFwcGxpY2F0aW9uKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuX2lzU3VwZXJNaXhpbkFwcGxpY2F0aW9uKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXRFZmZlY3RpdmVNaXhpbkNsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgaWYgKCFpc01peGluQXBwbGljYXRpb24oY2xzKSkgcmV0dXJuIG51bGw7CiAgICBkbyB7CiAgICAgIGNscyA9IGVsZW1lbnRNYXAuZ2V0QXBwbGllZE1peGluKGNscyk7CiAgICB9IHdoaWxlIChpc01peGluQXBwbGljYXRpb24oY2xzKSk7CiAgICByZXR1cm4gY2xzOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0VHlwZVZhcmlhYmxlQm91bmQoVHlwZVZhcmlhYmxlRW50aXR5IHR5cGVWYXJpYWJsZSkgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuZ2V0VHlwZVZhcmlhYmxlQm91bmQodHlwZVZhcmlhYmxlKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldFR5cGVWYXJpYWJsZURlZmF1bHRUeXBlKFR5cGVWYXJpYWJsZUVudGl0eSB0eXBlVmFyaWFibGUpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLl9nZXRUeXBlVmFyaWFibGVEZWZhdWx0VHlwZSh0eXBlVmFyaWFibGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBjcmVhdGVJbnRlcmZhY2VUeXBlKAogICAgICBDbGFzc0VudGl0eSBjbHMsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVHlwZShjbHMsIHR5cGVBcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25UeXBlIGdldEZ1bmN0aW9uVHlwZShGdW5jdGlvbkVudGl0eSBmdW5jdGlvbikgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuX2dldEZ1bmN0aW9uVHlwZShmdW5jdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PFR5cGVWYXJpYWJsZVR5cGU+IGdldEZ1bmN0aW9uVHlwZVZhcmlhYmxlcyhGdW5jdGlvbkVudGl0eSBmdW5jdGlvbikgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuX2dldEZ1bmN0aW9uVHlwZVZhcmlhYmxlcyhmdW5jdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRGdW5jdGlvbkFzeW5jT3JTeW5jU3RhckVsZW1lbnRUeXBlKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKSB7CiAgICAvLyBUT0RPKHNyYSk6IFNob3VsZCBiZSBnZXR0aW5nIHRoZSBEYXJ0VHlwZSBmcm9tIHRoZSBub2RlLgogICAgRGFydFR5cGUgcmV0dXJuVHlwZSA9IGdldEZ1bmN0aW9uVHlwZShmdW5jdGlvbikucmV0dXJuVHlwZTsKICAgIHJldHVybiBnZXRBc3luY09yU3luY1N0YXJFbGVtZW50VHlwZShmdW5jdGlvbi5hc3luY01hcmtlciwgcmV0dXJuVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRBc3luY09yU3luY1N0YXJFbGVtZW50VHlwZSgKICAgICAgQXN5bmNNYXJrZXIgYXN5bmNNYXJrZXIsIERhcnRUeXBlIHJldHVyblR5cGUpIHsKICAgIHN3aXRjaCAoYXN5bmNNYXJrZXIpIHsKICAgICAgY2FzZSBBc3luY01hcmtlci5TWU5DOgogICAgICAgIHJldHVybiByZXR1cm5UeXBlOwogICAgICBjYXNlIEFzeW5jTWFya2VyLlNZTkNfU1RBUjoKICAgICAgICBpZiAocmV0dXJuVHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgICBpZiAocmV0dXJuVHlwZS5lbGVtZW50ID09IGVsZW1lbnRNYXAuY29tbW9uRWxlbWVudHMuaXRlcmFibGVDbGFzcykgewogICAgICAgICAgICByZXR1cm4gcmV0dXJuVHlwZS50eXBlQXJndW1lbnRzLmZpcnN0OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZHluYW1pY1R5cGU7CiAgICAgIGNhc2UgQXN5bmNNYXJrZXIuQVNZTkM6CiAgICAgICAgaWYgKHJldHVyblR5cGUgaXMgRnV0dXJlT3JUeXBlKSByZXR1cm4gcmV0dXJuVHlwZS50eXBlQXJndW1lbnQ7CiAgICAgICAgaWYgKHJldHVyblR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICAgICAgaWYgKHJldHVyblR5cGUuZWxlbWVudCA9PSBlbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzLmZ1dHVyZUNsYXNzKSB7CiAgICAgICAgICAgIHJldHVybiByZXR1cm5UeXBlLnR5cGVBcmd1bWVudHMuZmlyc3Q7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBkeW5hbWljVHlwZTsKICAgICAgY2FzZSBBc3luY01hcmtlci5BU1lOQ19TVEFSOgogICAgICAgIGlmIChyZXR1cm5UeXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgICAgIGlmIChyZXR1cm5UeXBlLmVsZW1lbnQgPT0gZWxlbWVudE1hcC5jb21tb25FbGVtZW50cy5zdHJlYW1DbGFzcykgewogICAgICAgICAgICByZXR1cm4gcmV0dXJuVHlwZS50eXBlQXJndW1lbnRzLmZpcnN0OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZHluYW1pY1R5cGU7CiAgICB9CiAgICBhc3NlcnQoZmFsc2UsICdVbmV4cGVjdGVkIG1hcmtlciAke2FzeW5jTWFya2VyfScpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRGaWVsZFR5cGUoRmllbGRFbnRpdHkgZmllbGQpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLl9nZXRGaWVsZFR5cGUoZmllbGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25UeXBlIGdldExvY2FsRnVuY3Rpb25UeXBlKGNvdmFyaWFudCBLTG9jYWxGdW5jdGlvbiBmdW5jdGlvbikgewogICAgcmV0dXJuIGZ1bmN0aW9uLmZ1bmN0aW9uVHlwZTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldFVuYWxpYXNlZFR5cGUoRGFydFR5cGUgdHlwZSkgPT4gdHlwZTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RydWN0b3JFbnRpdHkgbG9va3VwQ29uc3RydWN0b3IoQ2xhc3NFbnRpdHkgY2xzLCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgcmVxdWlyZWQ6IGZhbHNlfSkgewogICAgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IgPSBlbGVtZW50TWFwLmxvb2t1cENvbnN0cnVjdG9yKGNscywgbmFtZSk7CiAgICBpZiAoY29uc3RydWN0b3IgPT0gbnVsbCAmJiByZXF1aXJlZCkgewogICAgICB0aHJvdyBmYWlsZWRBdCgKICAgICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAiVGhlIGNvbnN0cnVjdG9yICckbmFtZScgd2FzIG5vdCBmb3VuZCBpbiBjbGFzcyAnJHtjbHMubmFtZX0nICIKICAgICAgICAgICJpbiBsaWJyYXJ5ICR7Y2xzLmxpYnJhcnkuY2Fub25pY2FsVXJpfS4iKTsKICAgIH0KICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKICB9CgogIEBvdmVycmlkZQogIE1lbWJlckVudGl0eSBsb29rdXBMb2NhbENsYXNzTWVtYmVyKENsYXNzRW50aXR5IGNscywgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIHNldHRlcjogZmFsc2UsIGJvb2wgcmVxdWlyZWQ6IGZhbHNlfSkgewogICAgTWVtYmVyRW50aXR5IG1lbWJlciA9CiAgICAgICAgZWxlbWVudE1hcC5sb29rdXBDbGFzc01lbWJlcihjbHMsIG5hbWUsIHNldHRlcjogc2V0dGVyKTsKICAgIGlmIChtZW1iZXIgPT0gbnVsbCAmJiByZXF1aXJlZCkgewogICAgICB0aHJvdyBmYWlsZWRBdChDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICAgIlRoZSBtZW1iZXIgJyRuYW1lJyB3YXMgbm90IGZvdW5kIGluICR7Y2xzLm5hbWV9LiIpOwogICAgfQogICAgcmV0dXJuIG1lbWJlcjsKICB9CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldFN1cGVyQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzLAogICAgICB7Ym9vbCBza2lwVW5uYW1lZE1peGluQXBwbGljYXRpb25zOiBmYWxzZX0pIHsKICAgIGFzc2VydChlbGVtZW50TWFwLmNoZWNrRmFtaWx5KGNscykpOwogICAgQ2xhc3NFbnRpdHkgc3VwZXJjbGFzcyA9IGVsZW1lbnRNYXAuZ2V0U3VwZXJUeXBlKGNscyk/LmVsZW1lbnQ7CiAgICBpZiAoc2tpcFVubmFtZWRNaXhpbkFwcGxpY2F0aW9ucykgewogICAgICB3aGlsZSAoc3VwZXJjbGFzcyAhPSBudWxsICYmCiAgICAgICAgICBlbGVtZW50TWFwLl9pc1VubmFtZWRNaXhpbkFwcGxpY2F0aW9uKHN1cGVyY2xhc3MpKSB7CiAgICAgICAgc3VwZXJjbGFzcyA9IGVsZW1lbnRNYXAuZ2V0U3VwZXJUeXBlKHN1cGVyY2xhc3MpPy5lbGVtZW50OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3VwZXJjbGFzczsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaFN1cGVydHlwZShDbGFzc0VudGl0eSBjbHMsIHZvaWQgZihJbnRlcmZhY2VUeXBlIHN1cGVydHlwZSkpIHsKICAgIGVsZW1lbnRNYXAuX2ZvckVhY2hTdXBlcnR5cGUoY2xzLCBmKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaExvY2FsQ2xhc3NNZW1iZXIoQ2xhc3NFbnRpdHkgY2xzLCB2b2lkIGYoTWVtYmVyRW50aXR5IG1lbWJlcikpIHsKICAgIGVsZW1lbnRNYXAuX2ZvckVhY2hMb2NhbENsYXNzTWVtYmVyKGNscywgZik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hJbmplY3RlZENsYXNzTWVtYmVyKAogICAgICBDbGFzc0VudGl0eSBjbHMsIHZvaWQgZihNZW1iZXJFbnRpdHkgbWVtYmVyKSkgewogICAgZWxlbWVudE1hcC5mb3JFYWNoSW5qZWN0ZWRDbGFzc01lbWJlcihjbHMsIGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoQ2xhc3NNZW1iZXIoCiAgICAgIENsYXNzRW50aXR5IGNscywgdm9pZCBmKENsYXNzRW50aXR5IGRlY2xhcmVyLCBNZW1iZXJFbnRpdHkgbWVtYmVyKSkgewogICAgZWxlbWVudE1hcC5fZm9yRWFjaENsYXNzTWVtYmVyKGNscywgZik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hDb25zdHJ1Y3RvcigKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCB2b2lkIGYoQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IpKSB7CiAgICBlbGVtZW50TWFwLl9mb3JFYWNoQ29uc3RydWN0b3IoY2xzLCBmKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaENvbnN0cnVjdG9yQm9keSgKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCB2b2lkIGYoQ29uc3RydWN0b3JCb2R5RW50aXR5IGNvbnN0cnVjdG9yKSkgewogICAgZWxlbWVudE1hcC5mb3JFYWNoQ29uc3RydWN0b3JCb2R5KGNscywgZik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hOZXN0ZWRDbG9zdXJlKAogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyLCB2b2lkIGYoRnVuY3Rpb25FbnRpdHkgY2xvc3VyZSkpIHsKICAgIGVsZW1lbnRNYXAuZm9yRWFjaE5lc3RlZENsb3N1cmUobWVtYmVyLCBmKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaExpYnJhcnlNZW1iZXIoCiAgICAgIExpYnJhcnlFbnRpdHkgbGlicmFyeSwgdm9pZCBmKE1lbWJlckVudGl0eSBtZW1iZXIpKSB7CiAgICBlbGVtZW50TWFwLl9mb3JFYWNoTGlicmFyeU1lbWJlcihsaWJyYXJ5LCBmKTsKICB9CgogIEBvdmVycmlkZQogIE1lbWJlckVudGl0eSBsb29rdXBMaWJyYXJ5TWVtYmVyKExpYnJhcnlFbnRpdHkgbGlicmFyeSwgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIHNldHRlcjogZmFsc2UsIGJvb2wgcmVxdWlyZWQ6IGZhbHNlfSkgewogICAgTWVtYmVyRW50aXR5IG1lbWJlciA9CiAgICAgICAgZWxlbWVudE1hcC5sb29rdXBMaWJyYXJ5TWVtYmVyKGxpYnJhcnksIG5hbWUsIHNldHRlcjogc2V0dGVyKTsKICAgIGlmIChtZW1iZXIgPT0gbnVsbCAmJiByZXF1aXJlZCkgewogICAgICBmYWlsZWRBdChDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICAgIlRoZSBtZW1iZXIgJyR7bmFtZX0nIHdhcyBub3QgZm91bmQgaW4gbGlicmFyeSAnJHtsaWJyYXJ5Lm5hbWV9Jy4iKTsKICAgIH0KICAgIHJldHVybiBtZW1iZXI7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBsb29rdXBDbGFzcyhMaWJyYXJ5RW50aXR5IGxpYnJhcnksIFN0cmluZyBuYW1lLAogICAgICB7Ym9vbCByZXF1aXJlZDogZmFsc2V9KSB7CiAgICBDbGFzc0VudGl0eSBjbHMgPSBlbGVtZW50TWFwLmxvb2t1cENsYXNzKGxpYnJhcnksIG5hbWUpOwogICAgaWYgKGNscyA9PSBudWxsICYmIHJlcXVpcmVkKSB7CiAgICAgIGZhaWxlZEF0KENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAiVGhlIGNsYXNzICckbmFtZScgIHdhcyBub3QgZm91bmQgaW4gbGlicmFyeSAnJHtsaWJyYXJ5Lm5hbWV9Jy4iKTsKICAgIH0KICAgIHJldHVybiBjbHM7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hDbGFzcyhMaWJyYXJ5RW50aXR5IGxpYnJhcnksIHZvaWQgZihDbGFzc0VudGl0eSBjbHMpKSB7CiAgICBlbGVtZW50TWFwLl9mb3JFYWNoQ2xhc3MobGlicmFyeSwgZik7CiAgfQoKICBAb3ZlcnJpZGUKICBMaWJyYXJ5RW50aXR5IGxvb2t1cExpYnJhcnkoVXJpIHVyaSwge2Jvb2wgcmVxdWlyZWQ6IGZhbHNlfSkgewogICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5ID0gZWxlbWVudE1hcC5sb29rdXBMaWJyYXJ5KHVyaSk7CiAgICBpZiAobGlicmFyeSA9PSBudWxsICYmIHJlcXVpcmVkKSB7CiAgICAgIGZhaWxlZEF0KENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsICJUaGUgbGlicmFyeSAnJHVyaScgd2FzIG5vdCBmb3VuZC4iKTsKICAgIH0KICAgIHJldHVybiBsaWJyYXJ5OwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0VudW1DbGFzcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIGFzc2VydChlbGVtZW50TWFwLmNoZWNrRmFtaWx5KGNscykpOwogICAgSkNsYXNzRGF0YSBjbGFzc0RhdGEgPSBlbGVtZW50TWFwLmNsYXNzZXMuZ2V0RGF0YShjbHMpOwogICAgcmV0dXJuIGNsYXNzRGF0YS5pc0VudW1DbGFzczsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaFBhcmFtZXRlcihGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwKICAgICAgdm9pZCBmKERhcnRUeXBlIHR5cGUsIFN0cmluZyBuYW1lLCBDb25zdGFudFZhbHVlIGRlZmF1bHRWYWx1ZSkpIHsKICAgIGVsZW1lbnRNYXAuZm9yRWFjaFBhcmFtZXRlcihmdW5jdGlvbiwgZiwKICAgICAgICBpc05hdGl2ZTogZWxlbWVudE1hcC5uYXRpdmVEYXRhLmlzTmF0aXZlTWVtYmVyKGZ1bmN0aW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hQYXJhbWV0ZXJBc0xvY2FsKEdsb2JhbExvY2Fsc01hcCBnbG9iYWxMb2NhbHNNYXAsCiAgICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uLCB2b2lkIGYoTG9jYWwgcGFyYW1ldGVyKSkgewogICAgZm9yRWFjaE9yZGVyZWRQYXJhbWV0ZXJBc0xvY2FsKGdsb2JhbExvY2Fsc01hcCwgZWxlbWVudE1hcCwgZnVuY3Rpb24sCiAgICAgICAgKExvY2FsIHBhcmFtZXRlciwge2Jvb2wgaXNFbGlkZWR9KSB7CiAgICAgIGlmICghaXNFbGlkZWQpIHsKICAgICAgICBmKHBhcmFtZXRlcik7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoSW5zdGFuY2VGaWVsZCgKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCB2b2lkIGYoQ2xhc3NFbnRpdHkgZGVjbGFyZXIsIEZpZWxkRW50aXR5IGZpZWxkKSkgewogICAgZm9yRWFjaENsYXNzTWVtYmVyKGNscywgKENsYXNzRW50aXR5IGRlY2xhcmVyLCBNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgIGlmIChtZW1iZXIuaXNGaWVsZCAmJiBtZW1iZXIuaXNJbnN0YW5jZU1lbWJlcikgewogICAgICAgIGYoZGVjbGFyZXIsIG1lbWJlcik7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoRGlyZWN0SW5zdGFuY2VGaWVsZChDbGFzc0VudGl0eSBjbHMsIHZvaWQgZihGaWVsZEVudGl0eSBmaWVsZCkpIHsKICAgIC8vIFRPRE8oc3JhKTogQWRkIEVsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoRGlyZWN0SW5zdGFuY2VGaWVsZCBvcgogICAgLy8gcGFyYW1ldGVyaXplIFtmb3JFYWNoSW5zdGFuY2VGaWVsZF0gdG8gZmlsdGVyIG1lbWJlcnMgdG8gYXZvaWQgYQogICAgLy8gcG90ZW50aWFsbHkgTyhuXjIpIHNjYW4gb2YgdGhlIHN1cGVyY2xhc3Nlcy4KICAgIGZvckVhY2hDbGFzc01lbWJlcihjbHMsIChDbGFzc0VudGl0eSBkZWNsYXJlciwgTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICBpZiAoZGVjbGFyZXIgIT0gY2xzKSByZXR1cm47CiAgICAgIGlmICghbWVtYmVyLmlzRmllbGQpIHJldHVybjsKICAgICAgaWYgKCFtZW1iZXIuaXNJbnN0YW5jZU1lbWJlcikgcmV0dXJuOwogICAgICBmKG1lbWJlcik7CiAgICB9KTsKICB9Cn0KCi8vLyBbQmVoYXZpb3JCdWlsZGVyXSBmb3Iga2VybmVsIGJhc2VkIGVsZW1lbnRzLgpjbGFzcyBKc0JlaGF2aW9yQnVpbGRlciBleHRlbmRzIEJlaGF2aW9yQnVpbGRlciB7CiAgQG92ZXJyaWRlCiAgZmluYWwgRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudDsKICBAb3ZlcnJpZGUKICBmaW5hbCBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50czsKICBAb3ZlcnJpZGUKICBmaW5hbCBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXI7CiAgQG92ZXJyaWRlCiAgZmluYWwgTmF0aXZlQmFzaWNEYXRhIG5hdGl2ZUJhc2ljRGF0YTsKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CgogIEpzQmVoYXZpb3JCdWlsZGVyKHRoaXMuZWxlbWVudEVudmlyb25tZW50LCB0aGlzLmNvbW1vbkVsZW1lbnRzLAogICAgICB0aGlzLm5hdGl2ZUJhc2ljRGF0YSwgdGhpcy5yZXBvcnRlciwgdGhpcy5fb3B0aW9ucyk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IHRydXN0SlNJbnRlcm9wVHlwZUFubm90YXRpb25zID0+CiAgICAgIF9vcHRpb25zLnRydXN0SlNJbnRlcm9wVHlwZUFubm90YXRpb25zOwp9CgovLy8gQ29uc3RhbnQgZW52aXJvbm1lbnQgbWFwcGluZyBbQ29uc3RhbnRFeHByZXNzaW9uXXMgdG8gW0NvbnN0YW50VmFsdWVdcyB1c2luZwovLy8gW19FdmFsdWF0aW9uRW52aXJvbm1lbnRdIGZvciB0aGUgZXZhbHVhdGlvbi4KY2xhc3MgSnNDb25zdGFudEVudmlyb25tZW50IGltcGxlbWVudHMgQ29uc3RhbnRFbnZpcm9ubWVudCB7CiAgZmluYWwgSnNLZXJuZWxUb0VsZW1lbnRNYXAgX2VsZW1lbnRNYXA7CiAgZmluYWwgRW52aXJvbm1lbnQgX2Vudmlyb25tZW50OwoKICBNYXA8Q29uc3RhbnRFeHByZXNzaW9uLCBDb25zdGFudFZhbHVlPiBfdmFsdWVNYXAgPQogICAgICA8Q29uc3RhbnRFeHByZXNzaW9uLCBDb25zdGFudFZhbHVlPnt9OwoKICBKc0NvbnN0YW50RW52aXJvbm1lbnQodGhpcy5fZWxlbWVudE1hcCwgdGhpcy5fZW52aXJvbm1lbnQpOwoKICBDb25zdGFudFZhbHVlIF9nZXRDb25zdGFudFZhbHVlKAogICAgICBTcGFubmFibGUgc3Bhbm5hYmxlLCBDb25zdGFudEV4cHJlc3Npb24gZXhwcmVzc2lvbiwKICAgICAge2Jvb2wgY29uc3RhbnRSZXF1aXJlZH0pIHsKICAgIHJldHVybiBfdmFsdWVNYXAucHV0SWZBYnNlbnQoZXhwcmVzc2lvbiwgKCkgewogICAgICByZXR1cm4gZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgSnNFdmFsdWF0aW9uRW52aXJvbm1lbnQoCiAgICAgICAgICBfZWxlbWVudE1hcCwgX2Vudmlyb25tZW50LCBzcGFubmFibGUsCiAgICAgICAgICBjb25zdGFudFJlcXVpcmVkOiBjb25zdGFudFJlcXVpcmVkKSk7CiAgICB9KTsKICB9Cn0KCi8vLyBFdmFsdWF0aW9uIGVudmlyb25tZW50IHVzZWQgZm9yIGNvbXB1dGluZyBbQ29uc3RhbnRWYWx1ZV1zIGZvcgovLy8ga2VybmVsIGJhc2VkIFtDb25zdGFudEV4cHJlc3Npb25dcy4KY2xhc3MgSnNFdmFsdWF0aW9uRW52aXJvbm1lbnQgZXh0ZW5kcyBFdmFsdWF0aW9uRW52aXJvbm1lbnRCYXNlIHsKICBmaW5hbCBKc0tlcm5lbFRvRWxlbWVudE1hcCBfZWxlbWVudE1hcDsKICBmaW5hbCBFbnZpcm9ubWVudCBfZW52aXJvbm1lbnQ7CgogIEpzRXZhbHVhdGlvbkVudmlyb25tZW50KAogICAgICB0aGlzLl9lbGVtZW50TWFwLCB0aGlzLl9lbnZpcm9ubWVudCwgU3Bhbm5hYmxlIHNwYW5uYWJsZSwKICAgICAge2Jvb2wgY29uc3RhbnRSZXF1aXJlZH0pCiAgICAgIDogc3VwZXIoc3Bhbm5hYmxlLCBjb25zdGFudFJlcXVpcmVkOiBjb25zdGFudFJlcXVpcmVkKTsKCiAgQG92ZXJyaWRlCiAgQ29tbW9uRWxlbWVudHMgZ2V0IGNvbW1vbkVsZW1lbnRzID0+IF9lbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZXMgZ2V0IHR5cGVzID0+IF9lbGVtZW50TWFwLnR5cGVzOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBzdWJzdEJ5Q29udGV4dChEYXJ0VHlwZSBiYXNlLCBJbnRlcmZhY2VUeXBlIHRhcmdldCkgewogICAgcmV0dXJuIF9lbGVtZW50TWFwLnN1YnN0QnlDb250ZXh0KGJhc2UsIHRhcmdldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudENvbnN0cnVjdG9yIGdldENvbnN0cnVjdG9yQ29uc3RhbnQoQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IpIHsKICAgIHJldHVybiBfZWxlbWVudE1hcC5fZ2V0Q29uc3RydWN0b3JDb25zdGFudChjb25zdHJ1Y3Rvcik7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gZ2V0RmllbGRDb25zdGFudChGaWVsZEVudGl0eSBmaWVsZCkgewogICAgcmV0dXJuIF9lbGVtZW50TWFwLl9nZXRGaWVsZENvbnN0YW50RXhwcmVzc2lvbihmaWVsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gZ2V0TG9jYWxDb25zdGFudChMb2NhbCBsb2NhbCkgewogICAgdGhyb3cgbmV3IFVuaW1wbGVtZW50ZWRFcnJvcigiX0V2YWx1YXRpb25FbnZpcm9ubWVudC5nZXRMb2NhbENvbnN0YW50Iik7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgcmVhZEZyb21FbnZpcm9ubWVudChTdHJpbmcgbmFtZSkgewogICAgcmV0dXJuIF9lbnZpcm9ubWVudC52YWx1ZU9mKG5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGlhZ25vc3RpY1JlcG9ydGVyIGdldCByZXBvcnRlciA9PiBfZWxlbWVudE1hcC5yZXBvcnRlcjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgZW5hYmxlQXNzZXJ0aW9ucyA9PiBfZWxlbWVudE1hcC5vcHRpb25zLmVuYWJsZVVzZXJBc3NlcnRpb25zOwp9CgovLy8gW0VudGl0eUxvb2t1cF0gaW1wbGVtZW50YXRpb24gdXNlZCB0byBkZXNlcmlhbGl6ZSBbSnNLZXJuZWxUb0VsZW1lbnRNYXBdLgovLy8KLy8vIFNpbmNlIGRhdGEgb2JqZWN0cyBhbmQgZW52aXJvbm1lbnRzIGFyZSByZWdpc3RlcmVkIHRvZ2V0aGVyIHdpdGggdGhlaXIKLy8vIGVudGl0eSB3ZSBuZWVkIHRvIGhhdmUgYSBzZXBhcmF0ZSBsb29rdXAtYnktaW5kZXggbWVjaGFuaXNtIHRvIGFsbG93IGZvcgovLy8gaW5kZXgtYmFzZWQgcmVmZXJlbmNlIHdpdGhpbiBkYXRhIG9iamVjdHMgYW5kIGVudmlyb25tZW50cy4KY2xhc3MgX0VudGl0eUxvb2t1cCBpbXBsZW1lbnRzIEVudGl0eUxvb2t1cCB7CiAgZmluYWwgTWFwPGludCwgSkxpYnJhcnk+IF9saWJyYXJpZXMgPSB7fTsKICBmaW5hbCBNYXA8aW50LCBKQ2xhc3M+IF9jbGFzc2VzID0ge307CiAgZmluYWwgTWFwPGludCwgSlR5cGVkZWY+IF90eXBlZGVmcyA9IHt9OwogIGZpbmFsIE1hcDxpbnQsIEpNZW1iZXI+IF9tZW1iZXJzID0ge307CiAgZmluYWwgTWFwPGludCwgSlR5cGVWYXJpYWJsZT4gX3R5cGVWYXJpYWJsZXMgPSB7fTsKCiAgdm9pZCByZWdpc3RlckxpYnJhcnkoaW50IGluZGV4LCBKTGlicmFyeSBsaWJyYXJ5KSB7CiAgICBhc3NlcnQoIV9saWJyYXJpZXMuY29udGFpbnNLZXkoaW5kZXgpLAogICAgICAgICJMaWJyYXJ5IGZvciBpbmRleCAkaW5kZXggaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkLiIpOwogICAgX2xpYnJhcmllc1tpbmRleF0gPSBsaWJyYXJ5OwogIH0KCiAgdm9pZCByZWdpc3RlckNsYXNzKGludCBpbmRleCwgSkNsYXNzIGNscykgewogICAgYXNzZXJ0KCFfY2xhc3Nlcy5jb250YWluc0tleShpbmRleCksCiAgICAgICAgIkNsYXNzIGZvciBpbmRleCAkaW5kZXggaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkLiIpOwogICAgX2NsYXNzZXNbaW5kZXhdID0gY2xzOwogIH0KCiAgdm9pZCByZWdpc3RlclR5cGVkZWYoaW50IGluZGV4LCBKVHlwZWRlZiB0eXBlZGVmKSB7CiAgICBhc3NlcnQoIV90eXBlZGVmcy5jb250YWluc0tleShpbmRleCksCiAgICAgICAgIlR5cGVkZWYgZm9yIGluZGV4ICRpbmRleCBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQuIik7CiAgICBfdHlwZWRlZnNbaW5kZXhdID0gdHlwZWRlZjsKICB9CgogIHZvaWQgcmVnaXN0ZXJNZW1iZXIoaW50IGluZGV4LCBKTWVtYmVyIG1lbWJlcikgewogICAgYXNzZXJ0KCFfbWVtYmVycy5jb250YWluc0tleShpbmRleCksCiAgICAgICAgIk1lbWJlciBmb3IgaW5kZXggJGluZGV4IGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZC4iKTsKICAgIF9tZW1iZXJzW2luZGV4XSA9IG1lbWJlcjsKICB9CgogIHZvaWQgcmVnaXN0ZXJUeXBlVmFyaWFibGUoaW50IGluZGV4LCBKVHlwZVZhcmlhYmxlIHR5cGVWYXJpYWJsZSkgewogICAgYXNzZXJ0KCFfdHlwZVZhcmlhYmxlcy5jb250YWluc0tleShpbmRleCksCiAgICAgICAgIlR5cGUgdmFyaWFibGUgZm9yIGluZGV4ICRpbmRleCBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQuIik7CiAgICBfdHlwZVZhcmlhYmxlc1tpbmRleF0gPSB0eXBlVmFyaWFibGU7CiAgfQoKICB2b2lkIGZvckVhY2hMaWJyYXJ5KHZvaWQgZihpbnQgaW5kZXgsIEpMaWJyYXJ5IGxpYnJhcnkpKSB7CiAgICBfbGlicmFyaWVzLmZvckVhY2goZik7CiAgfQoKICB2b2lkIGZvckVhY2hDbGFzcyh2b2lkIGYoaW50IGluZGV4LCBKQ2xhc3MgY2xzKSkgewogICAgX2NsYXNzZXMuZm9yRWFjaChmKTsKICB9CgogIHZvaWQgZm9yRWFjaFR5cGVkZWYodm9pZCBmKGludCBpbmRleCwgSlR5cGVkZWYgdHlwZWRlZikpIHsKICAgIF90eXBlZGVmcy5mb3JFYWNoKGYpOwogIH0KCiAgdm9pZCBmb3JFYWNoTWVtYmVyKHZvaWQgZihpbnQgaW5kZXgsIEpNZW1iZXIgbWVtYmVyKSkgewogICAgX21lbWJlcnMuZm9yRWFjaChmKTsKICB9CgogIHZvaWQgZm9yRWFjaFR5cGVWYXJpYWJsZSh2b2lkIGYoaW50IGluZGV4LCBKVHlwZVZhcmlhYmxlIHR5cGVWYXJpYWJsZSkpIHsKICAgIF90eXBlVmFyaWFibGVzLmZvckVhY2goZik7CiAgfQoKICBAb3ZlcnJpZGUKICBJbmRleGVkTGlicmFyeSBnZXRMaWJyYXJ5QnlJbmRleChpbnQgaW5kZXgpIHsKICAgIEluZGV4ZWRMaWJyYXJ5IGxpYnJhcnkgPSBfbGlicmFyaWVzW2luZGV4XTsKICAgIGFzc2VydChsaWJyYXJ5ICE9IG51bGwsICJObyBsaWJyYXJ5IGZvdW5kIGZvciBpbmRleCAkaW5kZXgiKTsKICAgIHJldHVybiBsaWJyYXJ5OwogIH0KCiAgQG92ZXJyaWRlCiAgSW5kZXhlZENsYXNzIGdldENsYXNzQnlJbmRleChpbnQgaW5kZXgpIHsKICAgIEluZGV4ZWRDbGFzcyBjbHMgPSBfY2xhc3Nlc1tpbmRleF07CiAgICBhc3NlcnQoY2xzICE9IG51bGwsICJObyBjbGFzcyBmb3VuZCBmb3IgaW5kZXggJGluZGV4Iik7CiAgICByZXR1cm4gY2xzOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5kZXhlZFR5cGVkZWYgZ2V0VHlwZWRlZkJ5SW5kZXgoaW50IGluZGV4KSB7CiAgICBJbmRleGVkVHlwZWRlZiB0eXBlZGVmID0gX3R5cGVkZWZzW2luZGV4XTsKICAgIGFzc2VydCh0eXBlZGVmICE9IG51bGwsICJObyB0eXBlZGVmIGZvdW5kIGZvciBpbmRleCAkaW5kZXgiKTsKICAgIHJldHVybiB0eXBlZGVmOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5kZXhlZE1lbWJlciBnZXRNZW1iZXJCeUluZGV4KGludCBpbmRleCkgewogICAgSW5kZXhlZE1lbWJlciBtZW1iZXIgPSBfbWVtYmVyc1tpbmRleF07CiAgICBhc3NlcnQobWVtYmVyICE9IG51bGwsICJObyBtZW1iZXIgZm91bmQgZm9yIGluZGV4ICRpbmRleCIpOwogICAgcmV0dXJuIG1lbWJlcjsKICB9CgogIEBvdmVycmlkZQogIEluZGV4ZWRUeXBlVmFyaWFibGUgZ2V0VHlwZVZhcmlhYmxlQnlJbmRleChpbnQgaW5kZXgpIHsKICAgIEluZGV4ZWRUeXBlVmFyaWFibGUgdHlwZVZhcmlhYmxlID0gX3R5cGVWYXJpYWJsZXNbaW5kZXhdOwogICAgYXNzZXJ0KHR5cGVWYXJpYWJsZSAhPSBudWxsLCAiTm8gdHlwZSB2YXJpYWJsZSBmb3VuZCBmb3IgaW5kZXggJGluZGV4Iik7CiAgICByZXR1cm4gdHlwZVZhcmlhYmxlOwogIH0KfQoKLy8vIFtFbnRpdHlMb29rdXBdIGltcGxlbWVudGF0aW9uIGZvciBhbiBmdWxseSBidWlsdCBbSnNLZXJuZWxUb0VsZW1lbnRNYXBdLgpjbGFzcyBDbG9zZWRFbnRpdHlMb29rdXAgaW1wbGVtZW50cyBFbnRpdHlMb29rdXAgewogIGZpbmFsIEpzS2VybmVsVG9FbGVtZW50TWFwIF9lbGVtZW50TWFwOwoKICBDbG9zZWRFbnRpdHlMb29rdXAodGhpcy5fZWxlbWVudE1hcCk7CgogIEBvdmVycmlkZQogIEluZGV4ZWRUeXBlVmFyaWFibGUgZ2V0VHlwZVZhcmlhYmxlQnlJbmRleChpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZWxlbWVudE1hcC50eXBlVmFyaWFibGVzLmdldEVudGl0eShpbmRleCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbmRleGVkTWVtYmVyIGdldE1lbWJlckJ5SW5kZXgoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2VsZW1lbnRNYXAubWVtYmVycy5nZXRFbnRpdHkoaW5kZXgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5kZXhlZFR5cGVkZWYgZ2V0VHlwZWRlZkJ5SW5kZXgoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2VsZW1lbnRNYXAudHlwZWRlZnMuZ2V0RW50aXR5KGluZGV4KTsKICB9CgogIEBvdmVycmlkZQogIEluZGV4ZWRDbGFzcyBnZXRDbGFzc0J5SW5kZXgoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2VsZW1lbnRNYXAuY2xhc3Nlcy5nZXRFbnRpdHkoaW5kZXgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5kZXhlZExpYnJhcnkgZ2V0TGlicmFyeUJ5SW5kZXgoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2VsZW1lbnRNYXAubGlicmFyaWVzLmdldEVudGl0eShpbmRleCk7CiAgfQp9CgovLy8gRW51bSB1c2VkIGZvciBzZXJpYWxpemF0aW9uIG9mICdsYXRlIG1lbWJlcnMnLCB0aGF0IGlzLCBtZW1iZXJzIG5vcm1hbGx5Ci8vLyBjcmVhdGVkIG9uIGRlbWFuZCwgbGlrZSBjb25zdHJ1Y3RvciBib2RpZXMgYW5kIGdlbmVyYXRvciBib2RpZXMuCmVudW0gTGF0ZU1lbWJlcktpbmQgewogIGNvbnN0cnVjdG9yQm9keSwKICBnZW5lcmF0b3JCb2R5LAp9CgovLy8gRW50aXR5IHJlYWRlciB0aGF0IHN1cHBvcnRzIG1lbWJlciBlbnRpdGllcyBub3JtYWxseSBjcmVhdGVkIG9uLWRlbWFuZCwgbGlrZQovLy8gY29uc3RydWN0b3IgYm9kaWVzIGFuZCBnZW5lcmF0b3IgYm9kaWVzLgovLy8KLy8vIFRoZSBzdXBwb3J0IGVuY29kaW5nIGNvcnJlc3BvbmRzIHRvIHRoZSBlbmNvZGluZyBnZW5lcmF0ZWQgYnkgdGhlCi8vLyBbQ2xvc2VkRW50aXR5V3JpdGVyXS4KY2xhc3MgQ2xvc2VkRW50aXR5UmVhZGVyIGV4dGVuZHMgRW50aXR5UmVhZGVyIHsKICBmaW5hbCBKc0tlcm5lbFRvRWxlbWVudE1hcCBfZWxlbWVudE1hcDsKCiAgQ2xvc2VkRW50aXR5UmVhZGVyKHRoaXMuX2VsZW1lbnRNYXApOwoKICBAb3ZlcnJpZGUKICBJbmRleGVkTWVtYmVyIHJlYWRNZW1iZXJGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIEVudGl0eUxvb2t1cCBlbnRpdHlMb29rdXApIHsKICAgIGludCBpbmRleCA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBpZiAoaW5kZXggPT0gMCkgewogICAgICByZXR1cm4gX3JlYWRMYXRlTWVtYmVyRnJvbURhdGFTb3VyY2Uoc291cmNlLCBlbnRpdHlMb29rdXApOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGVudGl0eUxvb2t1cC5nZXRNZW1iZXJCeUluZGV4KGluZGV4IC0gMSk7CiAgICB9CiAgfQoKICBJbmRleGVkTWVtYmVyIF9yZWFkTGF0ZU1lbWJlckZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgRW50aXR5TG9va3VwIGVudGl0eUxvb2t1cCkgewogICAgTGF0ZU1lbWJlcktpbmQga2luZCA9IHNvdXJjZS5yZWFkRW51bShMYXRlTWVtYmVyS2luZC52YWx1ZXMpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgTGF0ZU1lbWJlcktpbmQuY29uc3RydWN0b3JCb2R5OgogICAgICAgIEluZGV4ZWRDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciA9IHNvdXJjZS5yZWFkTWVtYmVyKCk7CiAgICAgICAgcmV0dXJuIF9lbGVtZW50TWFwLl9nZXRDb25zdHJ1Y3RvckJvZHkoY29uc3RydWN0b3IpOwogICAgICBjYXNlIExhdGVNZW1iZXJLaW5kLmdlbmVyYXRvckJvZHk6CiAgICAgICAgSW5kZXhlZEZ1bmN0aW9uIGZ1bmN0aW9uID0gc291cmNlLnJlYWRNZW1iZXIoKTsKICAgICAgICByZXR1cm4gX2VsZW1lbnRNYXAuZ2V0R2VuZXJhdG9yQm9keShmdW5jdGlvbik7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBsYXRlIG1lbWJlciBraW5kOiAka2luZC4iKTsKICB9Cn0KCi8vLyBFbnRpdHkgd3JpdGVyIHRoYXQgc3VwcG9ydHMgbWVtYmVyIGVudGl0aWVzIG5vcm1hbGx5IGNyZWF0ZWQgb24tZGVtYW5kLCBsaWtlCi8vLyBjb25zdHJ1Y3RvciBib2RpZXMgYW5kIGdlbmVyYXRvciBib2RpZXMuCi8vLwovLy8gVGhlIGdlbmVyYXRlZCBlbmNvZGluZyBjb3JyZXNwb25kcyB0byB0aGUgZW5jb2RpbmcgcmVhZCBieSB0aGUKLy8vIFtDbG9zZWRFbnRpdHlSZWFkZXJdLgpjbGFzcyBDbG9zZWRFbnRpdHlXcml0ZXIgZXh0ZW5kcyBFbnRpdHlXcml0ZXIgewogIGZpbmFsIGludCBfZWFybHlNZW1iZXJJbmRleExpbWl0OwoKICBmaW5hbCBKc0tlcm5lbFRvRWxlbWVudE1hcCBfZWxlbWVudE1hcDsKCiAgQ2xvc2VkRW50aXR5V3JpdGVyKHRoaXMuX2VsZW1lbnRNYXAsIHRoaXMuX2Vhcmx5TWVtYmVySW5kZXhMaW1pdCk7CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVNZW1iZXJUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmssIEluZGV4ZWRNZW1iZXIgdmFsdWUpIHsKICAgIGlmICh2YWx1ZS5tZW1iZXJJbmRleCA+PSBfZWFybHlNZW1iZXJJbmRleExpbWl0KSB7CiAgICAgIHNpbmsud3JpdGVJbnQoMCk7CiAgICAgIF93cml0ZUxhdGVNZW1iZXJUb0RhdGFTaW5rKHNpbmssIHZhbHVlKTsKICAgIH0gZWxzZSB7CiAgICAgIHNpbmsud3JpdGVJbnQodmFsdWUubWVtYmVySW5kZXggKyAxKTsKICAgIH0KICB9CgogIHZvaWQgX3dyaXRlTGF0ZU1lbWJlclRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaywgSW5kZXhlZE1lbWJlciB2YWx1ZSkgewogICAgaWYgKHZhbHVlIGlzIEpDb25zdHJ1Y3RvckJvZHkpIHsKICAgICAgc2luay53cml0ZUVudW0oTGF0ZU1lbWJlcktpbmQuY29uc3RydWN0b3JCb2R5KTsKICAgICAgc2luay53cml0ZU1lbWJlcih2YWx1ZS5jb25zdHJ1Y3Rvcik7CiAgICB9IGVsc2UgaWYgKHZhbHVlIGlzIEpHZW5lcmF0b3JCb2R5KSB7CiAgICAgIHNpbmsud3JpdGVFbnVtKExhdGVNZW1iZXJLaW5kLmdlbmVyYXRvckJvZHkpOwogICAgICBzaW5rLndyaXRlTWVtYmVyKHZhbHVlLmZ1bmN0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJVbmV4cGVjdGVkIGxhdGUgbWVtYmVyICR2YWx1ZS4iKTsKICAgIH0KICB9Cn0Kis4ATk48AVEBKDQvMTUBMxkfIikpJygjICQxIyEhHigdGyEbHiYnKhopKSodIyIaIi4jKigkARcYGxMWAUdOHTgBPEAwLC8tOjczNzVCPQEhDCUmLCQuGiclKAExGgFQSUhDPDdOQz85ATkzOQE9HAZLS05RSEA7MzcBTkQBSBoZAT4BRQE3ARgVHyo2Iy06FkpJMig2ASwfNRpRRUUiQkkjSTNCKgYzHTEYSTw/NE9ELEROOk8GHzQaUEQ2T00xFhwZHx4tTTJCBgEeMhlMPCEyEghBNThPHUwfSDQfKEEmLiUsNDAyMTEwOy84MiwsPREyOFEKJywhQicrLCcsQicrLA8uMC8uMUI2KS0uCDMOOiRGTx8pLC8PKggGJD4fLEIuPiE8PEBHREBEKjYUCg86CEBMMko8Mi4GUFFLHCQEAUdMOkxJMig2AUQ2LwEXHiktJEI0BhwBHCcrJDouBhoBHiktJEI0BhwBHSgsJD8yBhsBIy4yJFE+BiEBLyJAREcgQCctCCABIDhAQ0o2SEQIJwgeASJAR04tCCABIUNFNCYhJTEgJS0rEyYMEREIKwgfASdPUSNENwglASUzSiMBFQQBUCUGS00pIUU8JC5FCFEiCAYXFRUWGxMEATIoFQE7HCMyKyUIGgEaISolIQgYARwiLSslCBoBGyEqKSQIGQEhJzw1KggfAUcgQCEiCB4BHjohIggcASAuIggeAR8sIggdASU4IggjASMZG0IrIQETBAEMIQEMRgEMPAElKTMQBAEjKUUQBAFJNCk3NzsuMzZBKS80N0EpKEcIEwYBNjIXBAEpPCk/BAEzIjgqBAFIHiI4RjYEAR49IjgwGggEAUEiODccNwYRBAFIIjgzMTUICAQBQB4eLj4EAUceLjMEAQwlN0oEAQxJAQxBAQwxHiwiGwQBQR47ICkYRw8rEUQeK0gRKhEnQwgGBAEMPyUBPR5BKAEgASRLKTMPPEk3PjQcCgEhMS4nIQ0lDSINPTENIQ1FDU4uSj8MKTIROAo3KkVOESYKKCoWTxErCkE8DCk9Kzg/Tk0IBgQBDDA3LgQBDCscJSkrJzMtDygIBjwEAQxCHlAuOgwVGkk6ITIhPSE4Jx4KCDYGEQQBDDYkASk5OzU7NUIlFQYwTh8aBkgEAQxKAQxBAQxKAQxFGQEMOSgnIwgRBAEMOyQBDDcZKUs0KA0xBjI6AUFFTCoIKQYBSUJADzgIBi83OVFFKjsGLio0RBdICD8mOwEmOggBJjtLRUMlQggNNgYBUD4EASY4JkcsBAEMQhdMBAE3Bk9NQgwtJR4sITIGEQQBDDAeLCYaBAEwHiwmGQQBPCMzJwQBTyMzMAQBLyAuJAQBDEQnQiAEAUsnQiYEATIeLCImBAEvHiwiJAQBNh4pKgQBNB4pKAQBTh4sIi8EAVEeKSUEAVEeKTQRCAQBHEgeKTQWCCwiIjYGBAFQJjo7BAFHIC4yBAEMRB5FHkIdMwYWBAEMNx4sIiAEAQwsHiwiKQQBDDweLCIcBAFRIS8EAUseLAQBDDYmSB8EASskM0cGHQQBKSNLBhwEAQxCTCcfJR8jJzAyQQ8jMh8jJThQEwweCg8kISU1DwYBTkQvBAEMHxVGBAEMO05PHkAEAQwtSEwOIisGKDIGJysGIisGJysGKyoGFCNKFAQBRyoXLkYjDyYIDSAGAUo0BAEvGkwmBAEvGkwmBAFFURw1GEVIBAEjJAE2IB1BOUdBBgE4Nh9PHTUgNTcMChUIASFFCAFPEk0VOUAIJy0wNS0nJy4mLCkqLS0nKiY/SwgTBgETBAFDRwQBNAxIMCsjSSMGNR4jTyMGATUeI1AjBgEkFBQoIxIZBAE0DE8wHkwjBjAeRSMGNR4eRCMGKxQoIxIZBAE0DDsiMDg5IwYwHk0jBjArODwjBjUeHkQjBjIUKCMSGQQBDDVAKT4GASEYGxhHCC8NEVEGHB0kQggTBjA3KzETBhIEAT5FPTYvLAgVBAEMORozRysyISxHHQwKQycPCAZJQB1HFQQBKTg8BAEqTkIEASY3NgQBHT0hKwQBDDk8BAEMPx08BAEkDC8ZThEEAQw+Gx84BjAXBAE0HgQBSS48FAQBQSY2EAQBMCg4EgQBOC8+FQQBPTpEGAQBRj0gLCw3LTQ1IlEyMDw1M0QMCggGDB4wURkEATYuPBQEAQw7Oi0EAUk+KEpJHC5GASlCNxsnGSIrOiI1NE8TNDopLgYhBAEMPjAEAQw4Mh0hFwocCBMGAT8fHyMnICMkISUxBkgEAQw4LAQBUEk8RiAzQB0EAR9AKSMEASM3LAQBKyQnGSslOB5LFhQeUTQeLQEXBAFOTEgMMFAvKjQBSEEzUTs2TxQVR0wBQ0ISRTwoSwgGGAQBFE81AT0eOkE1I0JMKgQBMBscITscIx8mQUAQMTlHR0cVPgYtP0YBREFQUTkuEhNFUAEZMTNDNz4GAUVNFjgaS0E2E0I/RTEPBgEuMhkSJRIXGx5IGBNNOwEhQzkGATIBNRQhKUAcIhIiSx0EASEvGyQcIzstT0cZAUxRURs8ATMwREZDHSAeGRgqHC8KCAYBLCceJhwaFToQERgVBgEzST0wREciHSAeGRggSxwZCjwgQR4cFyUSExoXD00IBgQBTUxPTk5QHCgbLyQrHjsZSgFQJUlEFAYBMkUtATAWHik7KR0eMUZCEQQBIi8rKSQbNCVDNRkjKUEcLiImPAQBHxsvJCseFBkZMkIaHBolATAWHik7KR0eMUQEAT41HEtJFB8kNR4aKx4YMyoqOxEgGgolUR4PKTVIEUUKK0YPCCAGJQQBTg4GSU5DBkovBkg4JAQBDEg/IT03HU5CNxk2TQEtTE8hCDoyMgYaBAIBNiUpASkBDDMBDDwBDD8BDEsBDDEwBAEMLygEAQwuKAQBDCk2BAEMLTAEAQw0NwQBDDI1BAEMOC8JLScQBAEMQzoEAQxJQQQBDCU3MgQBDDoyBAEMTTsEAQxMQEBMBAEMKjYbHRsiK08zDAocHkgrTTMMChwjK00zDAocBjcRBAEMLSwEAQxJIgQBDDQBDEQgTSsWJUo2BhgEAQxENBpBJjA/BhMEAQwtNClEKCM/QwgGFwQBDEwqBAEMTzEEAQwjNjMEAQwbTCwEAQwbQCwEAQwfRC8EAQwdPTAEAQwdPDIEAQxHNBpHJipPBhMEAQw+ID0jKk0GEAQBDEYqBAEMQTsnUAYUBAEMJik8IgQBDDFILUMEAQxAOkotFxYICAQBDB1KSjcdCAgEAQxQR0g0SiMjLBEIBAIBMTIMLwwnDCUMKSIBQjsBDCwuAgFRMT0qIgE1LQE+ASM6ITI+MDAIBAIBQyhCKiIBG0AfPgEMQwEMLAEMQTUEAQxOPQQBDDs7BAEMNU0EAQwsJwQBDDsBDEkCAU4ES01ALiwoKyk1ATYrPyEEAS4pPRsEATYqPyAEATMpPh4EAUUvRSoEAT0bBAE1GQQBPRoEAToZBAFMHwQBDDAwQhQEAQwsKDwQBAEMMC9CFAQBDC4sQBMEAQw6Pk0ZBAIBTTMqASgBDDo3BAEMLjEEAQwwMgQBDCwxBAEMMDMEAgFNRRYTEQIBUS0ERhowKgEoAQwqNiIWQg03BgQBLzZCFCs+PSk4NwZHBAIBUS0EQxowJAEqAUUBDEM3GC8NLAYEAUglNisqNCgNRAYEAgEzcGFja2FnZTpjb21waWxlci9zcmMvanNfbW9kZWwvZWxlbWVudF9tYXBfaW1wbC5kYXJ0NHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX21vZGVsL2pzX3dvcmxkLmRhcnTAAFiWLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JyBzaG93IExpbms7CgppbXBvcnQgJy4uL2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBKQ29tbW9uRWxlbWVudHMsIEpFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnLi4vZGVmZXJyZWRfbG9hZC5kYXJ0JzsKaW1wb3J0ICcuLi9kaWFnbm9zdGljcy9kaWFnbm9zdGljX2xpc3RlbmVyLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0eV91dGlscy5kYXJ0JyBhcyB1dGlsczsKaW1wb3J0ICcuLi9lbGVtZW50cy9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbnZpcm9ubWVudC5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vanNfZW1pdHRlci9zb3J0ZXIuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9hbm5vdGF0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2ZpZWxkX2FuYWx5c2lzLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvYmFja2VuZF91c2FnZS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2ludGVyY2VwdG9yX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYXRpdmVfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25vX3N1Y2hfbWV0aG9kX3JlZ2lzdHJ5LmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19yZXNvbHV0aW9uLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL2xvY2Fscy5kYXJ0JzsKaW1wb3J0ICcuLi9vcmRlcmVkX3R5cGVzZXQuZGFydCc7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2xhc3NfaGllcmFyY2h5LmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NsYXNzX3NldC5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9mdW5jdGlvbl9zZXQuZGFydCcgc2hvdyBGdW5jdGlvblNldDsKaW1wb3J0ICcuLi91bml2ZXJzZS9tZW1iZXJfdXNhZ2UuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCc7CmltcG9ydCAnLi4vd29ybGQuZGFydCc7CmltcG9ydCAnZWxlbWVudF9tYXAuZGFydCc7CmltcG9ydCAnZWxlbWVudF9tYXBfaW1wbC5kYXJ0JzsKaW1wb3J0ICdsb2NhbHMuZGFydCc7CgpjbGFzcyBKc0Nsb3NlZFdvcmxkIGltcGxlbWVudHMgSkNsb3NlZFdvcmxkIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdjbG9zZWQtd29ybGQnOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBOYXRpdmVEYXRhIG5hdGl2ZURhdGE7CiAgQG92ZXJyaWRlCiAgZmluYWwgSW50ZXJjZXB0b3JEYXRhIGludGVyY2VwdG9yRGF0YTsKICBAb3ZlcnJpZGUKICBmaW5hbCBCYWNrZW5kVXNhZ2UgYmFja2VuZFVzYWdlOwogIEBvdmVycmlkZQogIGZpbmFsIE5vU3VjaE1ldGhvZERhdGEgbm9TdWNoTWV0aG9kRGF0YTsKCiAgRnVuY3Rpb25TZXQgX2FsbEZ1bmN0aW9uczsKCiAgZmluYWwgTWFwPENsYXNzRW50aXR5LCBTZXQ8Q2xhc3NFbnRpdHk+PiBtaXhpblVzZXM7CiAgTWFwPENsYXNzRW50aXR5LCBMaXN0PENsYXNzRW50aXR5Pj4gX2xpdmVNaXhpblVzZXM7CgogIGZpbmFsIE1hcDxDbGFzc0VudGl0eSwgU2V0PENsYXNzRW50aXR5Pj4gdHlwZXNJbXBsZW1lbnRlZEJ5U3ViY2xhc3NlczsKCiAgZmluYWwgTWFwPENsYXNzRW50aXR5LCBNYXA8Q2xhc3NFbnRpdHksIGJvb2w+PiBfc3VidHlwZUNvdmVyZWRCeUNhY2hlID0KICAgICAgPENsYXNzRW50aXR5LCBNYXA8Q2xhc3NFbnRpdHksIGJvb2w+Pnt9OwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDYW4gdGhpcyBiZSBkZXJpdmVkIGZyb20gW0NsYXNzU2V0XXM/CiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBpbXBsZW1lbnRlZENsYXNzZXM7CgogIGZpbmFsIFNldDxNZW1iZXJFbnRpdHk+IGxpdmVJbnN0YW5jZU1lbWJlcnM7CgogIC8vLyBNZW1iZXJzIHRoYXQgYXJlIHdyaXR0ZW4gZWl0aGVyIGRpcmVjdGx5IG9yIHRocm91Z2ggYSBzZXR0ZXIgc2VsZWN0b3IuCiAgZmluYWwgU2V0PE1lbWJlckVudGl0eT4gYXNzaWduZWRJbnN0YW5jZU1lbWJlcnM7CgogIEBvdmVycmlkZQogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gbGl2ZU5hdGl2ZUNsYXNzZXM7CgogIEBvdmVycmlkZQogIGZpbmFsIFNldDxNZW1iZXJFbnRpdHk+IHByb2Nlc3NlZE1lbWJlcnM7CgogIEBvdmVycmlkZQogIGZpbmFsIENsYXNzSGllcmFyY2h5IGNsYXNzSGllcmFyY2h5OwoKICBmaW5hbCBKc0tlcm5lbFRvRWxlbWVudE1hcCBlbGVtZW50TWFwOwogIEBvdmVycmlkZQogIGZpbmFsIFJ1bnRpbWVUeXBlc05lZWQgcnRpTmVlZDsKICBBYnN0cmFjdFZhbHVlRG9tYWluIF9hYnN0cmFjdFZhbHVlRG9tYWluOwogIEBvdmVycmlkZQogIGZpbmFsIEpGaWVsZEFuYWx5c2lzIGZpZWxkQW5hbHlzaXM7CiAgQG92ZXJyaWRlCiAgZmluYWwgQW5ub3RhdGlvbnNEYXRhIGFubm90YXRpb25zRGF0YTsKICBAb3ZlcnJpZGUKICBmaW5hbCBHbG9iYWxMb2NhbHNNYXAgZ2xvYmFsTG9jYWxzTWFwOwogIEBvdmVycmlkZQogIGZpbmFsIENsb3N1cmVEYXRhIGNsb3N1cmVEYXRhTG9va3VwOwogIEBvdmVycmlkZQogIGZpbmFsIE91dHB1dFVuaXREYXRhIG91dHB1dFVuaXREYXRhOwogIFNvcnRlciBfc29ydGVyOwoKICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBNZW1iZXJBY2Nlc3M+IG1lbWJlckFjY2VzczsKCiAgSnNDbG9zZWRXb3JsZCgKICAgICAgdGhpcy5lbGVtZW50TWFwLAogICAgICB0aGlzLm5hdGl2ZURhdGEsCiAgICAgIHRoaXMuaW50ZXJjZXB0b3JEYXRhLAogICAgICB0aGlzLmJhY2tlbmRVc2FnZSwKICAgICAgdGhpcy5ydGlOZWVkLAogICAgICB0aGlzLmZpZWxkQW5hbHlzaXMsCiAgICAgIHRoaXMubm9TdWNoTWV0aG9kRGF0YSwKICAgICAgdGhpcy5pbXBsZW1lbnRlZENsYXNzZXMsCiAgICAgIHRoaXMubGl2ZU5hdGl2ZUNsYXNzZXMsCiAgICAgIHRoaXMubGl2ZUluc3RhbmNlTWVtYmVycywKICAgICAgdGhpcy5hc3NpZ25lZEluc3RhbmNlTWVtYmVycywKICAgICAgdGhpcy5wcm9jZXNzZWRNZW1iZXJzLAogICAgICB0aGlzLm1peGluVXNlcywKICAgICAgdGhpcy50eXBlc0ltcGxlbWVudGVkQnlTdWJjbGFzc2VzLAogICAgICB0aGlzLmNsYXNzSGllcmFyY2h5LAogICAgICBBYnN0cmFjdFZhbHVlU3RyYXRlZ3kgYWJzdHJhY3RWYWx1ZVN0cmF0ZWd5LAogICAgICB0aGlzLmFubm90YXRpb25zRGF0YSwKICAgICAgdGhpcy5nbG9iYWxMb2NhbHNNYXAsCiAgICAgIHRoaXMuY2xvc3VyZURhdGFMb29rdXAsCiAgICAgIHRoaXMub3V0cHV0VW5pdERhdGEsCiAgICAgIHRoaXMubWVtYmVyQWNjZXNzKSB7CiAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiA9IGFic3RyYWN0VmFsdWVTdHJhdGVneS5jcmVhdGVEb21haW4odGhpcyk7CiAgfQoKICAvLy8gRGVzZXJpYWxpemVzIGEgW0pzQ2xvc2VkV29ybGRdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgSnNDbG9zZWRXb3JsZC5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zLAogICAgICBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIsCiAgICAgIEVudmlyb25tZW50IGVudmlyb25tZW50LAogICAgICBBYnN0cmFjdFZhbHVlU3RyYXRlZ3kgYWJzdHJhY3RWYWx1ZVN0cmF0ZWd5LAogICAgICBpci5Db21wb25lbnQgY29tcG9uZW50LAogICAgICBEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CgogICAgSnNLZXJuZWxUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCA9CiAgICAgICAgbmV3IEpzS2VybmVsVG9FbGVtZW50TWFwLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgICAgICAgb3B0aW9ucywgcmVwb3J0ZXIsIGVudmlyb25tZW50LCBjb21wb25lbnQsIHNvdXJjZSk7CiAgICBHbG9iYWxMb2NhbHNNYXAgZ2xvYmFsTG9jYWxzTWFwID0KICAgICAgICBuZXcgR2xvYmFsTG9jYWxzTWFwLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgc291cmNlLnJlZ2lzdGVyTG9jYWxMb29rdXAobmV3IExvY2FsTG9va3VwSW1wbChnbG9iYWxMb2NhbHNNYXApKTsKICAgIENsYXNzSGllcmFyY2h5IGNsYXNzSGllcmFyY2h5ID0gbmV3IENsYXNzSGllcmFyY2h5LnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgICBzb3VyY2UsIGVsZW1lbnRNYXAuY29tbW9uRWxlbWVudHMpOwogICAgTmF0aXZlRGF0YSBuYXRpdmVEYXRhID0gbmV3IE5hdGl2ZURhdGEucmVhZEZyb21EYXRhU291cmNlKAogICAgICAgIHNvdXJjZSwgZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQpOwogICAgZWxlbWVudE1hcC5uYXRpdmVEYXRhID0gbmF0aXZlRGF0YTsKICAgIEludGVyY2VwdG9yRGF0YSBpbnRlcmNlcHRvckRhdGEgPSBuZXcgSW50ZXJjZXB0b3JEYXRhLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgICBzb3VyY2UsIG5hdGl2ZURhdGEsIGVsZW1lbnRNYXAuY29tbW9uRWxlbWVudHMpOwogICAgQmFja2VuZFVzYWdlIGJhY2tlbmRVc2FnZSA9IG5ldyBCYWNrZW5kVXNhZ2UucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBSdW50aW1lVHlwZXNOZWVkIHJ0aU5lZWQgPSBuZXcgUnVudGltZVR5cGVzTmVlZC5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgICAgc291cmNlLCBlbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudCk7CiAgICBKRmllbGRBbmFseXNpcyBhbGxvY2F0b3JBbmFseXNpcyA9CiAgICAgICAgbmV3IEpGaWVsZEFuYWx5c2lzLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIG9wdGlvbnMpOwogICAgTm9TdWNoTWV0aG9kRGF0YSBub1N1Y2hNZXRob2REYXRhID0KICAgICAgICBuZXcgTm9TdWNoTWV0aG9kRGF0YS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKCiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGltcGxlbWVudGVkQ2xhc3NlcyA9IHNvdXJjZS5yZWFkQ2xhc3NlcygpLnRvU2V0KCk7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGxpdmVOYXRpdmVDbGFzc2VzID0gc291cmNlLnJlYWRDbGFzc2VzKCkudG9TZXQoKTsKICAgIFNldDxNZW1iZXJFbnRpdHk+IGxpdmVJbnN0YW5jZU1lbWJlcnMgPSBzb3VyY2UucmVhZE1lbWJlcnMoKS50b1NldCgpOwogICAgU2V0PE1lbWJlckVudGl0eT4gYXNzaWduZWRJbnN0YW5jZU1lbWJlcnMgPSBzb3VyY2UucmVhZE1lbWJlcnMoKS50b1NldCgpOwogICAgU2V0PE1lbWJlckVudGl0eT4gcHJvY2Vzc2VkTWVtYmVycyA9IHNvdXJjZS5yZWFkTWVtYmVycygpLnRvU2V0KCk7CiAgICBNYXA8Q2xhc3NFbnRpdHksIFNldDxDbGFzc0VudGl0eT4+IG1peGluVXNlcyA9CiAgICAgICAgc291cmNlLnJlYWRDbGFzc01hcCgoKSA9PiBzb3VyY2UucmVhZENsYXNzZXMoKS50b1NldCgpKTsKICAgIE1hcDxDbGFzc0VudGl0eSwgU2V0PENsYXNzRW50aXR5Pj4gdHlwZXNJbXBsZW1lbnRlZEJ5U3ViY2xhc3NlcyA9CiAgICAgICAgc291cmNlLnJlYWRDbGFzc01hcCgoKSA9PiBzb3VyY2UucmVhZENsYXNzZXMoKS50b1NldCgpKTsKCiAgICBBbm5vdGF0aW9uc0RhdGEgYW5ub3RhdGlvbnNEYXRhID0KICAgICAgICBuZXcgQW5ub3RhdGlvbnNEYXRhLnJlYWRGcm9tRGF0YVNvdXJjZShvcHRpb25zLCBzb3VyY2UpOwoKICAgIENsb3N1cmVEYXRhIGNsb3N1cmVEYXRhID0KICAgICAgICBuZXcgQ2xvc3VyZURhdGEucmVhZEZyb21EYXRhU291cmNlKGVsZW1lbnRNYXAsIHNvdXJjZSk7CgogICAgT3V0cHV0VW5pdERhdGEgb3V0cHV0VW5pdERhdGEgPQogICAgICAgIG5ldyBPdXRwdXRVbml0RGF0YS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIGVsZW1lbnRNYXAubGF0ZU91dHB1dFVuaXREYXRhQnVpbGRlciA9CiAgICAgICAgbmV3IExhdGVPdXRwdXRVbml0RGF0YUJ1aWxkZXIob3V0cHV0VW5pdERhdGEpOwoKICAgIE1hcDxNZW1iZXJFbnRpdHksIE1lbWJlckFjY2Vzcz4gbWVtYmVyQWNjZXNzID0gc291cmNlLnJlYWRNZW1iZXJNYXAoCiAgICAgICAgKE1lbWJlckVudGl0eSBtZW1iZXIpID0+IG5ldyBNZW1iZXJBY2Nlc3MucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSkpOwoKICAgIHNvdXJjZS5lbmQodGFnKTsKCiAgICByZXR1cm4gbmV3IEpzQ2xvc2VkV29ybGQoCiAgICAgICAgZWxlbWVudE1hcCwKICAgICAgICBuYXRpdmVEYXRhLAogICAgICAgIGludGVyY2VwdG9yRGF0YSwKICAgICAgICBiYWNrZW5kVXNhZ2UsCiAgICAgICAgcnRpTmVlZCwKICAgICAgICBhbGxvY2F0b3JBbmFseXNpcywKICAgICAgICBub1N1Y2hNZXRob2REYXRhLAogICAgICAgIGltcGxlbWVudGVkQ2xhc3NlcywKICAgICAgICBsaXZlTmF0aXZlQ2xhc3NlcywKICAgICAgICBsaXZlSW5zdGFuY2VNZW1iZXJzLAogICAgICAgIGFzc2lnbmVkSW5zdGFuY2VNZW1iZXJzLAogICAgICAgIHByb2Nlc3NlZE1lbWJlcnMsCiAgICAgICAgbWl4aW5Vc2VzLAogICAgICAgIHR5cGVzSW1wbGVtZW50ZWRCeVN1YmNsYXNzZXMsCiAgICAgICAgY2xhc3NIaWVyYXJjaHksCiAgICAgICAgYWJzdHJhY3RWYWx1ZVN0cmF0ZWd5LAogICAgICAgIGFubm90YXRpb25zRGF0YSwKICAgICAgICBnbG9iYWxMb2NhbHNNYXAsCiAgICAgICAgY2xvc3VyZURhdGEsCiAgICAgICAgb3V0cHV0VW5pdERhdGEsCiAgICAgICAgbWVtYmVyQWNjZXNzKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0pzQ2xvc2VkV29ybGRdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBlbGVtZW50TWFwLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIGdsb2JhbExvY2Fsc01hcC53cml0ZVRvRGF0YVNpbmsoc2luayk7CgogICAgY2xhc3NIaWVyYXJjaHkud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgbmF0aXZlRGF0YS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBpbnRlcmNlcHRvckRhdGEud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgYmFja2VuZFVzYWdlLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHJ0aU5lZWQud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgZmllbGRBbmFseXNpcy53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBub1N1Y2hNZXRob2REYXRhLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsud3JpdGVDbGFzc2VzKGltcGxlbWVudGVkQ2xhc3Nlcyk7CiAgICBzaW5rLndyaXRlQ2xhc3NlcyhsaXZlTmF0aXZlQ2xhc3Nlcyk7CiAgICBzaW5rLndyaXRlTWVtYmVycyhsaXZlSW5zdGFuY2VNZW1iZXJzKTsKICAgIHNpbmsud3JpdGVNZW1iZXJzKGFzc2lnbmVkSW5zdGFuY2VNZW1iZXJzKTsKICAgIHNpbmsud3JpdGVNZW1iZXJzKHByb2Nlc3NlZE1lbWJlcnMpOwogICAgc2luay53cml0ZUNsYXNzTWFwKAogICAgICAgIG1peGluVXNlcywgKFNldDxDbGFzc0VudGl0eT4gc2V0KSA9PiBzaW5rLndyaXRlQ2xhc3NlcyhzZXQpKTsKICAgIHNpbmsud3JpdGVDbGFzc01hcCh0eXBlc0ltcGxlbWVudGVkQnlTdWJjbGFzc2VzLAogICAgICAgIChTZXQ8Q2xhc3NFbnRpdHk+IHNldCkgPT4gc2luay53cml0ZUNsYXNzZXMoc2V0KSk7CiAgICBhbm5vdGF0aW9uc0RhdGEud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgY2xvc3VyZURhdGFMb29rdXAud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgb3V0cHV0VW5pdERhdGEud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc2luay53cml0ZU1lbWJlck1hcCgKICAgICAgICBtZW1iZXJBY2Nlc3MsCiAgICAgICAgKE1lbWJlckVudGl0eSBtZW1iZXIsIE1lbWJlckFjY2VzcyBhY2Nlc3MpID0+CiAgICAgICAgICAgIGFjY2Vzcy53cml0ZVRvRGF0YVNpbmsoc2luaykpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIEpFbGVtZW50RW52aXJvbm1lbnQgZ2V0IGVsZW1lbnRFbnZpcm9ubWVudCA9PiBlbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudDsKCiAgQG92ZXJyaWRlCiAgSkNvbW1vbkVsZW1lbnRzIGdldCBjb21tb25FbGVtZW50cyA9PiBlbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZXMgZ2V0IGRhcnRUeXBlcyA9PiBlbGVtZW50TWFwLnR5cGVzOwoKICBAb3ZlcnJpZGUKICBib29sIGlzSW1wbGVtZW50ZWQoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gaW1wbGVtZW50ZWRDbGFzc2VzLmNvbnRhaW5zKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXRMdWJPZkluc3RhbnRpYXRlZFN1YmNsYXNzZXMoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBpZiAobmF0aXZlRGF0YS5pc0pzSW50ZXJvcENsYXNzKGNscykpIHsKICAgICAgcmV0dXJuIGNvbW1vbkVsZW1lbnRzLmpzSmF2YVNjcmlwdE9iamVjdENsYXNzOwogICAgfQogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIGhpZXJhcmNoeSA9IGNsYXNzSGllcmFyY2h5LmdldENsYXNzSGllcmFyY2h5Tm9kZShjbHMpOwogICAgcmV0dXJuIGhpZXJhcmNoeSAhPSBudWxsCiAgICAgICAgPyBoaWVyYXJjaHkuZ2V0THViT2ZJbnN0YW50aWF0ZWRTdWJjbGFzc2VzKCkKICAgICAgICA6IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXRMdWJPZkluc3RhbnRpYXRlZFN1YnR5cGVzKENsYXNzRW50aXR5IGNscykgewogICAgaWYgKG5hdGl2ZURhdGEuaXNKc0ludGVyb3BDbGFzcyhjbHMpKSB7CiAgICAgIHJldHVybiBjb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRPYmplY3RDbGFzczsKICAgIH0KICAgIENsYXNzU2V0IGNsYXNzU2V0ID0gY2xhc3NIaWVyYXJjaHkuZ2V0Q2xhc3NTZXQoY2xzKTsKICAgIHJldHVybiBjbGFzc1NldCAhPSBudWxsID8gY2xhc3NTZXQuZ2V0THViT2ZJbnN0YW50aWF0ZWRTdWJ0eXBlcygpIDogbnVsbDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNVc2VkQXNNaXhpbihDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiAhbWl4aW5Vc2VzT2YoY2xzKS5pc0VtcHR5OwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNBbnlTdWJjbGFzc09mTWl4aW5Vc2VUaGF0SW1wbGVtZW50cygKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCBDbGFzc0VudGl0eSB0eXBlKSB7CiAgICByZXR1cm4gbWl4aW5Vc2VzT2YoY2xzKQogICAgICAgIC5hbnkoKHVzZSkgPT4gaGFzQW55U3ViY2xhc3NUaGF0SW1wbGVtZW50cyh1c2UsIHR5cGUpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZXZlcnlTdWJ0eXBlSXNTdWJjbGFzc09mT3JNaXhpblVzZU9mKENsYXNzRW50aXR5IHgsIENsYXNzRW50aXR5IHkpIHsKICAgIE1hcDxDbGFzc0VudGl0eSwgYm9vbD4gc2Vjb25kTWFwID0KICAgICAgICBfc3VidHlwZUNvdmVyZWRCeUNhY2hlW3hdID8/PSA8Q2xhc3NFbnRpdHksIGJvb2w+e307CiAgICByZXR1cm4gc2Vjb25kTWFwW3ldID8/PSBjbGFzc0hpZXJhcmNoeS5zdWJ0eXBlc09mKHgpLmV2ZXJ5KAogICAgICAgIChDbGFzc0VudGl0eSBjbHMpID0+CiAgICAgICAgICAgIGNsYXNzSGllcmFyY2h5LmlzU3ViY2xhc3NPZihjbHMsIHkpIHx8CiAgICAgICAgICAgIGlzU3ViY2xhc3NPZk1peGluVXNlT2YoY2xzLCB5KSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc0FueVN1YmNsYXNzVGhhdEltcGxlbWVudHMoQ2xhc3NFbnRpdHkgc3VwZXJjbGFzcywgQ2xhc3NFbnRpdHkgdHlwZSkgewogICAgU2V0PENsYXNzRW50aXR5PiBzdWJjbGFzc2VzID0gdHlwZXNJbXBsZW1lbnRlZEJ5U3ViY2xhc3Nlc1tzdXBlcmNsYXNzXTsKICAgIGlmIChzdWJjbGFzc2VzID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBzdWJjbGFzc2VzLmNvbnRhaW5zKHR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBuZWVkc05vU3VjaE1ldGhvZCgKICAgICAgQ2xhc3NFbnRpdHkgYmFzZSwgU2VsZWN0b3Igc2VsZWN0b3IsIENsYXNzUXVlcnkgcXVlcnkpIHsKICAgIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBzdWJjbGFzc2VzIGluIHRoZSBbcm9vdE5vZGVdIHRyZWUgbmVlZHMgbm9TdWNoTWV0aG9kCiAgICAvLy8gaGFuZGxpbmcuCiAgICBib29sIHN1YmNsYXNzZXNOZWVkTm9TdWNoTWV0aG9kKENsYXNzSGllcmFyY2h5Tm9kZSByb290Tm9kZSkgewogICAgICBpZiAoIXJvb3ROb2RlLmlzSW5zdGFudGlhdGVkKSB7CiAgICAgICAgLy8gTm8gc3ViY2xhc3MgbmVlZHMgbm9TdWNoTWV0aG9kIGhhbmRsaW5nIHNpbmNlIHRoZXkgYXJlIGFsbAogICAgICAgIC8vIHVuaW5zdGFudGlhdGVkLgogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBDbGFzc0VudGl0eSByb290Q2xhc3MgPSByb290Tm9kZS5jbHM7CiAgICAgIGlmIChfaGFzQ29uY3JldGVNYXRjaChyb290Q2xhc3MsIHNlbGVjdG9yKSkgewogICAgICAgIC8vIFRoZSByb290IHN1YmNsYXNzIGhhcyBhIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIHNvIG5vIHN1YmNsYXNzIG5lZWRzCiAgICAgICAgLy8gbm9TdWNoTWV0aG9kIGhhbmRsaW5nLgogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfSBlbHNlIGlmIChyb290Tm9kZS5pc0V4cGxpY2l0bHlJbnN0YW50aWF0ZWQpIHsKICAgICAgICAvLyBUaGUgcm9vdCBjbGFzcyBuZWVkIG5vU3VjaE1ldGhvZCBoYW5kbGluZy4KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBJdGVyYXRpb25TdGVwIHJlc3VsdCA9IHJvb3ROb2RlLmZvckVhY2hTdWJjbGFzcygoQ2xhc3NFbnRpdHkgc3ViY2xhc3MpIHsKICAgICAgICBpZiAoX2hhc0NvbmNyZXRlTWF0Y2goc3ViY2xhc3MsIHNlbGVjdG9yLAogICAgICAgICAgICBzdG9wQXRTdXBlcmNsYXNzOiByb290Q2xhc3MpKSB7CiAgICAgICAgICAvLyBGb3VuZCBhIG1hdGNoIC0gc2tpcCBhbGwgc3ViY2xhc3Nlcy4KICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGVwLlNLSVBfU1VCQ0xBU1NFUzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gU3RvcCBmYXN0IC0gd2UgZm91bmQgYSBuZWVkIGZvciBub1N1Y2hNZXRob2QgaGFuZGxpbmcuCiAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RlcC5TVE9QOwogICAgICAgIH0KICAgICAgfSwgQ2xhc3NIaWVyYXJjaHlOb2RlLkVYUExJQ0lUTFlfSU5TVEFOVElBVEVELCBzdHJpY3Q6IHRydWUpOwogICAgICAvLyBXZSBzdG9wcGVkIGZhc3Qgc28gd2UgbmVlZCBub1N1Y2hNZXRob2QgaGFuZGxpbmcuCiAgICAgIHJldHVybiByZXN1bHQgPT0gSXRlcmF0aW9uU3RlcC5TVE9QOwogICAgfQoKICAgIENsYXNzU2V0IGNsYXNzU2V0ID0gY2xhc3NIaWVyYXJjaHkuZ2V0Q2xhc3NTZXQoYmFzZSk7CiAgICBhc3NlcnQoY2xhc3NTZXQgIT0gbnVsbCwgZmFpbGVkQXQoYmFzZSwgIk5vIGNsYXNzIHNldCBmb3IgJGJhc2UuIikpOwogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUgPSBjbGFzc1NldC5ub2RlOwogICAgaWYgKHF1ZXJ5ID09IENsYXNzUXVlcnkuRVhBQ1QpIHsKICAgICAgcmV0dXJuIG5vZGUuaXNFeHBsaWNpdGx5SW5zdGFudGlhdGVkICYmCiAgICAgICAgICAhX2hhc0NvbmNyZXRlTWF0Y2goYmFzZSwgc2VsZWN0b3IpOwogICAgfSBlbHNlIGlmIChxdWVyeSA9PSBDbGFzc1F1ZXJ5LlNVQkNMQVNTKSB7CiAgICAgIHJldHVybiBzdWJjbGFzc2VzTmVlZE5vU3VjaE1ldGhvZChub2RlKTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChzdWJjbGFzc2VzTmVlZE5vU3VjaE1ldGhvZChub2RlKSkgcmV0dXJuIHRydWU7CiAgICAgIGZvciAoQ2xhc3NIaWVyYXJjaHlOb2RlIHN1YnR5cGVOb2RlIGluIGNsYXNzU2V0LnN1YnR5cGVOb2RlcykgewogICAgICAgIGlmIChzdWJjbGFzc2VzTmVlZE5vU3VjaE1ldGhvZChzdWJ0eXBlTm9kZSkpIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBjb21tb25TdXBlcnR5cGVzT2YoSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGNsYXNzZXMpIHsKICAgIEl0ZXJhdG9yPENsYXNzRW50aXR5PiBpdGVyYXRvciA9IGNsYXNzZXMuaXRlcmF0b3I7CiAgICBpZiAoIWl0ZXJhdG9yLm1vdmVOZXh0KCkpIHJldHVybiBjb25zdCA8Q2xhc3NFbnRpdHk+W107CgogICAgQ2xhc3NFbnRpdHkgY2xzID0gaXRlcmF0b3IuY3VycmVudDsKICAgIE9yZGVyZWRUeXBlU2V0IHR5cGVTZXQgPSBlbGVtZW50TWFwLmdldE9yZGVyZWRUeXBlU2V0KGNscyk7CiAgICBpZiAoIWl0ZXJhdG9yLm1vdmVOZXh0KCkpIHJldHVybiB0eXBlU2V0LnR5cGVzLm1hcCgodHlwZSkgPT4gdHlwZS5lbGVtZW50KTsKCiAgICBpbnQgZGVwdGggPSB0eXBlU2V0Lm1heERlcHRoOwogICAgTGluazxPcmRlcmVkVHlwZVNldD4gb3RoZXJUeXBlU2V0cyA9IGNvbnN0IExpbms8T3JkZXJlZFR5cGVTZXQ+KCk7CiAgICBkbyB7CiAgICAgIENsYXNzRW50aXR5IG90aGVyQ2xhc3MgPSBpdGVyYXRvci5jdXJyZW50OwogICAgICBPcmRlcmVkVHlwZVNldCBvdGhlclR5cGVTZXQgPSBlbGVtZW50TWFwLmdldE9yZGVyZWRUeXBlU2V0KG90aGVyQ2xhc3MpOwogICAgICBvdGhlclR5cGVTZXRzID0gb3RoZXJUeXBlU2V0cy5wcmVwZW5kKG90aGVyVHlwZVNldCk7CiAgICAgIGlmIChvdGhlclR5cGVTZXQubWF4RGVwdGggPCBkZXB0aCkgewogICAgICAgIGRlcHRoID0gb3RoZXJUeXBlU2V0Lm1heERlcHRoOwogICAgICB9CiAgICB9IHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKTsKCiAgICBMaXN0PENsYXNzRW50aXR5PiBjb21tb25TdXBlcnR5cGVzID0gPENsYXNzRW50aXR5PltdOwogICAgT1VURVI6CiAgICBmb3IgKExpbms8SW50ZXJmYWNlVHlwZT4gbGluayA9IHR5cGVTZXRbZGVwdGhdOwogICAgICAgIGxpbmsuaGVhZC5lbGVtZW50ICE9IGNvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzOwogICAgICAgIGxpbmsgPSBsaW5rLnRhaWwpIHsKICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gbGluay5oZWFkLmVsZW1lbnQ7CiAgICAgIGZvciAoTGluazxPcmRlcmVkVHlwZVNldD4gbGluayA9IG90aGVyVHlwZVNldHM7CiAgICAgICAgICAhbGluay5pc0VtcHR5OwogICAgICAgICAgbGluayA9IGxpbmsudGFpbCkgewogICAgICAgIGlmIChsaW5rLmhlYWQuYXNJbnN0YW5jZU9mKGNscywgZWxlbWVudE1hcC5nZXRIaWVyYXJjaHlEZXB0aChjbHMpKSA9PQogICAgICAgICAgICBudWxsKSB7CiAgICAgICAgICBjb250aW51ZSBPVVRFUjsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29tbW9uU3VwZXJ0eXBlcy5hZGQoY2xzKTsKICAgIH0KICAgIGNvbW1vblN1cGVydHlwZXMuYWRkKGNvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzKTsKICAgIHJldHVybiBjb21tb25TdXBlcnR5cGVzOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IG1peGluVXNlc09mKENsYXNzRW50aXR5IGNscykgewogICAgaWYgKF9saXZlTWl4aW5Vc2VzID09IG51bGwpIHsKICAgICAgX2xpdmVNaXhpblVzZXMgPSBuZXcgTWFwPENsYXNzRW50aXR5LCBMaXN0PENsYXNzRW50aXR5Pj4oKTsKICAgICAgZm9yIChDbGFzc0VudGl0eSBtaXhpbiBpbiBtaXhpblVzZXMua2V5cykgewogICAgICAgIExpc3Q8Q2xhc3NFbnRpdHk+IHVzZXMgPSA8Q2xhc3NFbnRpdHk+W107CgogICAgICAgIHZvaWQgYWRkTGl2ZVVzZShDbGFzc0VudGl0eSBtaXhpbkFwcGxpY2F0aW9uKSB7CiAgICAgICAgICBpZiAoY2xhc3NIaWVyYXJjaHkuaXNJbnN0YW50aWF0ZWQobWl4aW5BcHBsaWNhdGlvbikpIHsKICAgICAgICAgICAgdXNlcy5hZGQobWl4aW5BcHBsaWNhdGlvbik7CiAgICAgICAgICB9IGVsc2UgaWYgKF9pc05hbWVkTWl4aW5BcHBsaWNhdGlvbihtaXhpbkFwcGxpY2F0aW9uKSkgewogICAgICAgICAgICBTZXQ8Q2xhc3NFbnRpdHk+IG5leHQgPSBtaXhpblVzZXNbbWl4aW5BcHBsaWNhdGlvbl07CiAgICAgICAgICAgIGlmIChuZXh0ICE9IG51bGwpIHsKICAgICAgICAgICAgICBuZXh0LmZvckVhY2goYWRkTGl2ZVVzZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG1peGluVXNlc1ttaXhpbl0uZm9yRWFjaChhZGRMaXZlVXNlKTsKICAgICAgICBpZiAodXNlcy5pc05vdEVtcHR5KSB7CiAgICAgICAgICBfbGl2ZU1peGluVXNlc1ttaXhpbl0gPSB1c2VzOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IHVzZXMgPSBfbGl2ZU1peGluVXNlc1tjbHNdOwogICAgcmV0dXJuIHVzZXMgIT0gbnVsbCA/IHVzZXMgOiBjb25zdCA8Q2xhc3NFbnRpdHk+W107CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc0FueVN1YmNsYXNzVGhhdE1peGVzKENsYXNzRW50aXR5IHN1cGVyY2xhc3MsIENsYXNzRW50aXR5IG1peGluKSB7CiAgICByZXR1cm4gbWl4aW5Vc2VzT2YobWl4aW4pLmFueSgoQ2xhc3NFbnRpdHkgZWFjaCkgewogICAgICByZXR1cm4gY2xhc3NIaWVyYXJjaHkuaXNTdWJjbGFzc09mKGVhY2gsIHN1cGVyY2xhc3MpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzU3ViY2xhc3NPZk1peGluVXNlT2YoQ2xhc3NFbnRpdHkgY2xzLCBDbGFzc0VudGl0eSBtaXhpbikgewogICAgaWYgKGlzVXNlZEFzTWl4aW4obWl4aW4pKSB7CiAgICAgIENsYXNzRW50aXR5IGN1cnJlbnQgPSBjbHM7CiAgICAgIHdoaWxlIChjdXJyZW50ICE9IG51bGwpIHsKICAgICAgICBDbGFzc0VudGl0eSBjdXJyZW50TWl4aW4gPSBlbGVtZW50TWFwLmdldEFwcGxpZWRNaXhpbihjdXJyZW50KTsKICAgICAgICBpZiAoY3VycmVudE1peGluID09IG1peGluKSByZXR1cm4gdHJ1ZTsKICAgICAgICBjdXJyZW50ID0gZWxlbWVudEVudmlyb25tZW50LmdldFN1cGVyQ2xhc3MoY3VycmVudCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgX2Vuc3VyZUZ1bmN0aW9uU2V0KCkgewogICAgaWYgKF9hbGxGdW5jdGlvbnMgPT0gbnVsbCkgewogICAgICAvLyBbRnVuY3Rpb25TZXRdIGlzIGNyZWF0ZWQgbGF6aWx5IGJlY2F1c2UgaXQgaXMgbm90IHVzZWQgd2hlbiB3ZSBzd2l0Y2gKICAgICAgLy8gZnJvbSBhIGZyb250ZW5kIHRvIGEgYmFja2VuZCBtb2RlbCBiZWZvcmUgaW5mZXJlbmNlLgogICAgICBfYWxsRnVuY3Rpb25zID0gbmV3IEZ1bmN0aW9uU2V0KGxpdmVJbnN0YW5jZU1lbWJlcnMpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpbmNsdWRlc0Nsb3N1cmVDYWxsKFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyKSB7CiAgICByZXR1cm4gc2VsZWN0b3IubmFtZSA9PSBJZGVudGlmaWVycy5jYWxsICYmCiAgICAgICAgKHJlY2VpdmVyID09IG51bGwgfHwKICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU2hvdWxkIHRoaXMgaGF2ZSBiZWVuIGBpbnRlcnNlY3RzYCBpbnN0ZWFkPwogICAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAgICAgICAuY29udGFpbnMocmVjZWl2ZXIsIGFic3RyYWN0VmFsdWVEb21haW4uZnVuY3Rpb25UeXBlKQogICAgICAgICAgICAgICAgLmlzUG90ZW50aWFsbHlUcnVlKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVJlY2VpdmVyVHlwZShTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSByZWNlaXZlcikgewogICAgX2Vuc3VyZUZ1bmN0aW9uU2V0KCk7CiAgICBpZiAoaW5jbHVkZXNDbG9zdXJlQ2FsbChzZWxlY3RvciwgcmVjZWl2ZXIpKSB7CiAgICAgIHJldHVybiBhYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlOwogICAgfQogICAgcmV0dXJuIF9hbGxGdW5jdGlvbnMucmVjZWl2ZXJUeXBlKHNlbGVjdG9yLCByZWNlaXZlciwgYWJzdHJhY3RWYWx1ZURvbWFpbik7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGxvY2F0ZU1lbWJlcnMoCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyKSB7CiAgICBfZW5zdXJlRnVuY3Rpb25TZXQoKTsKICAgIHJldHVybiBfYWxsRnVuY3Rpb25zLmZpbHRlcihzZWxlY3RvciwgcmVjZWl2ZXIsIGFic3RyYWN0VmFsdWVEb21haW4pOwogIH0KCiAgYm9vbCBoYXNBbnlVc2VyRGVmaW5lZEdldHRlcihTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSByZWNlaXZlcikgewogICAgX2Vuc3VyZUZ1bmN0aW9uU2V0KCk7CiAgICByZXR1cm4gX2FsbEZ1bmN0aW9ucwogICAgICAgIC5maWx0ZXIoc2VsZWN0b3IsIHJlY2VpdmVyLCBhYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgIC5hbnkoKGVhY2gpID0+IGVhY2guaXNHZXR0ZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyRW50aXR5IGxvY2F0ZVNpbmdsZU1lbWJlcihTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSByZWNlaXZlcikgewogICAgaWYgKGluY2x1ZGVzQ2xvc3VyZUNhbGwoc2VsZWN0b3IsIHJlY2VpdmVyKSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHJlY2VpdmVyID8/PSBhYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlOwogICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4ubG9jYXRlU2luZ2xlTWVtYmVyKHJlY2VpdmVyLCBzZWxlY3Rvcik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGZpZWxkTmV2ZXJDaGFuZ2VzKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoIWVsZW1lbnQuaXNGaWVsZCkgcmV0dXJuIGZhbHNlOwogICAgaWYgKG5hdGl2ZURhdGEuaXNOYXRpdmVNZW1iZXIoZWxlbWVudCkpIHsKICAgICAgLy8gU29tZSBuYXRpdmUgZmllbGRzIGFyZSB2aWV3cyBvZiBkYXRhIHRoYXQgbWF5IGJlIGNoYW5nZWQgYnkgb3BlcmF0aW9ucy4KICAgICAgLy8gRS5nLiBub2RlLmZpcnN0Q2hpbGQgZGVwZW5kcyBvbiBwYXJlbnROb2RlLnJlbW92ZUJlZm9yZShuMSwgbjIpLgogICAgICAvLyBUT0RPKHNyYSk6IFJlZmluZSB0aGUgZWZmZWN0IGNsYXNzaWZpY2F0aW9uIHNvIHRoYXQgbmF0aXZlIGVmZmVjdHMgYXJlCiAgICAgIC8vIGRpc3RpbmN0IGZyb20gb3JkaW5hcnkgRGFydCBlZmZlY3RzLgogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKCFlbGVtZW50LmlzQXNzaWduYWJsZSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChlbGVtZW50LmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgcmV0dXJuICFhc3NpZ25lZEluc3RhbmNlTWVtYmVycy5jb250YWlucyhlbGVtZW50KTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIFNvcnRlciBnZXQgc29ydGVyIHsKICAgIHJldHVybiBfc29ydGVyID8/PSBuZXcgS2VybmVsU29ydGVyKGVsZW1lbnRNYXApOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZURvbWFpbiBnZXQgYWJzdHJhY3RWYWx1ZURvbWFpbiB7CiAgICByZXR1cm4gX2Fic3RyYWN0VmFsdWVEb21haW47CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc0VsZW1lbnRJbihDbGFzc0VudGl0eSBjbHMsIE5hbWUgbmFtZSwgRW50aXR5IGVsZW1lbnQpIHsKICAgIHdoaWxlIChjbHMgIT0gbnVsbCkgewogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gZWxlbWVudEVudmlyb25tZW50CiAgICAgICAgICAubG9va3VwTG9jYWxDbGFzc01lbWJlcihjbHMsIG5hbWUudGV4dCwgc2V0dGVyOiBuYW1lLmlzU2V0dGVyKTsKICAgICAgaWYgKG1lbWJlciAhPSBudWxsICYmCiAgICAgICAgICAhbWVtYmVyLmlzQWJzdHJhY3QgJiYKICAgICAgICAgICghbmFtZS5pc1ByaXZhdGUgfHwgbWVtYmVyLmxpYnJhcnkgPT0gbmFtZS5saWJyYXJ5KSkgewogICAgICAgIHJldHVybiBtZW1iZXIgPT0gZWxlbWVudDsKICAgICAgfQogICAgICBjbHMgPSBlbGVtZW50RW52aXJvbm1lbnQuZ2V0U3VwZXJDbGFzcyhjbHMpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8vIFJldHVybnMgd2hldGhlciBhIFtzZWxlY3Rvcl0gY2FsbCBvbiBhbiBpbnN0YW5jZSBvZiBbY2xzXQogIC8vLyB3aWxsIGhpdCBhIG1ldGhvZCBhdCBydW50aW1lLCBhbmQgbm90IGdvIHRocm91Z2ggW25vU3VjaE1ldGhvZF0uCiAgYm9vbCBfaGFzQ29uY3JldGVNYXRjaChDbGFzc0VudGl0eSBjbHMsIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICB7Q2xhc3NFbnRpdHkgc3RvcEF0U3VwZXJjbGFzc30pIHsKICAgIGFzc2VydChjbGFzc0hpZXJhcmNoeS5pc0luc3RhbnRpYXRlZChjbHMpLAogICAgICAgIGZhaWxlZEF0KGNscywgJyRjbHMgaGFzIG5vdCBiZWVuIGluc3RhbnRpYXRlZC4nKSk7CiAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCA9IGVsZW1lbnRFbnZpcm9ubWVudAogICAgICAgIC5sb29rdXBDbGFzc01lbWJlcihjbHMsIHNlbGVjdG9yLm5hbWUsIHNldHRlcjogc2VsZWN0b3IuaXNTZXR0ZXIpOwogICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwoKICAgIGlmIChlbGVtZW50LmlzQWJzdHJhY3QpIHsKICAgICAgQ2xhc3NFbnRpdHkgZW5jbG9zaW5nQ2xhc3MgPSBlbGVtZW50LmVuY2xvc2luZ0NsYXNzOwogICAgICByZXR1cm4gX2hhc0NvbmNyZXRlTWF0Y2goCiAgICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQuZ2V0U3VwZXJDbGFzcyhlbmNsb3NpbmdDbGFzcyksIHNlbGVjdG9yKTsKICAgIH0KICAgIHJldHVybiBzZWxlY3Rvci5hcHBsaWVzVW5uYW1lZChlbGVtZW50KTsKICB9CgogIGJvb2wgX2lzTmFtZWRNaXhpbkFwcGxpY2F0aW9uKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGVsZW1lbnRFbnZpcm9ubWVudC5pc01peGluQXBwbGljYXRpb24oY2xzKSAmJgogICAgICAgICFlbGVtZW50RW52aXJvbm1lbnQuaXNVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbihjbHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyQWNjZXNzIGdldE1lbWJlckFjY2VzcyhNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICByZXR1cm4gbWVtYmVyQWNjZXNzW21lbWJlcl07CiAgfQp9CgpjbGFzcyBLZXJuZWxTb3J0ZXIgaW1wbGVtZW50cyBTb3J0ZXIgewogIGZpbmFsIEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXA7CgogIEtlcm5lbFNvcnRlcih0aGlzLmVsZW1lbnRNYXApOwoKICBpbnQgX2NvbXBhcmVMaWJyYXJpZXMoTGlicmFyeUVudGl0eSBhLCBMaWJyYXJ5RW50aXR5IGIpIHsKICAgIHJldHVybiB1dGlscy5jb21wYXJlTGlicmFyaWVzVXJpcyhhLmNhbm9uaWNhbFVyaSwgYi5jYW5vbmljYWxVcmkpOwogIH0KCiAgaW50IF9jb21wYXJlU291cmNlU3BhbnMoRW50aXR5IGVudGl0eTEsIFNvdXJjZVNwYW4gc291cmNlU3BhbjEsCiAgICAgIEVudGl0eSBlbnRpdHkyLCBTb3VyY2VTcGFuIHNvdXJjZVNwYW4yKSB7CiAgICBpbnQgciA9IHV0aWxzLmNvbXBhcmVTb3VyY2VVcmlzKHNvdXJjZVNwYW4xLnVyaSwgc291cmNlU3BhbjIudXJpKTsKICAgIGlmIChyICE9IDApIHJldHVybiByOwogICAgcmV0dXJuIHV0aWxzLmNvbXBhcmVFbnRpdGllcygKICAgICAgICBlbnRpdHkxLCBzb3VyY2VTcGFuMS5iZWdpbiwgbnVsbCwgZW50aXR5Miwgc291cmNlU3BhbjIuYmVnaW4sIG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8TGlicmFyeUVudGl0eT4gc29ydExpYnJhcmllcyhJdGVyYWJsZTxMaWJyYXJ5RW50aXR5PiBsaWJyYXJpZXMpIHsKICAgIHJldHVybiBsaWJyYXJpZXMudG9MaXN0KCkuLnNvcnQoX2NvbXBhcmVMaWJyYXJpZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8VD4gc29ydE1lbWJlcnM8VCBleHRlbmRzIE1lbWJlckVudGl0eT4oSXRlcmFibGU8VD4gbWVtYmVycykgewogICAgcmV0dXJuIG1lbWJlcnMudG9MaXN0KCkuLnNvcnQoY29tcGFyZU1lbWJlcnNCeUxvY2F0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBzb3J0Q2xhc3NlcyhJdGVyYWJsZTxDbGFzc0VudGl0eT4gY2xhc3NlcykgewogICAgTGlzdDxDbGFzc0VudGl0eT4gcmVndWxhckNsYXNzZXMgPSA8Q2xhc3NFbnRpdHk+W107CiAgICBMaXN0PENsYXNzRW50aXR5PiB1bm5hbWVkTWl4aW5zID0gPENsYXNzRW50aXR5PltdOwogICAgZm9yIChDbGFzc0VudGl0eSBjbHMgaW4gY2xhc3NlcykgewogICAgICBpZiAoZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQuaXNVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbihjbHMpKSB7CiAgICAgICAgdW5uYW1lZE1peGlucy5hZGQoY2xzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZWd1bGFyQ2xhc3Nlcy5hZGQoY2xzKTsKICAgICAgfQogICAgfQogICAgTGlzdDxDbGFzc0VudGl0eT4gc29ydGVkID0gPENsYXNzRW50aXR5PltdOwogICAgcmVndWxhckNsYXNzZXMuc29ydChjb21wYXJlQ2xhc3Nlc0J5TG9jYXRpb24pOwogICAgc29ydGVkLmFkZEFsbChyZWd1bGFyQ2xhc3Nlcyk7CiAgICB1bm5hbWVkTWl4aW5zLnNvcnQoKGEsIGIpIHsKICAgICAgaW50IHJlc3VsdCA9IF9jb21wYXJlTGlicmFyaWVzKGEubGlicmFyeSwgYi5saWJyYXJ5KTsKICAgICAgaWYgKHJlc3VsdCAhPSAwKSByZXR1cm4gcmVzdWx0OwogICAgICByZXN1bHQgPSBhLm5hbWUuY29tcGFyZVRvKGIubmFtZSk7CiAgICAgIGFzc2VydChyZXN1bHQgIT0gMCwKICAgICAgICAgIGZhaWxlZEF0KGEsICJNdWx0aXBsZSBtaXhpbnMgbmFtZWQgJHthLm5hbWV9OiAkYSB2cyAkYi4iKSk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9KTsKICAgIHNvcnRlZC5hZGRBbGwodW5uYW1lZE1peGlucyk7CiAgICByZXR1cm4gc29ydGVkOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8VHlwZWRlZkVudGl0eT4gc29ydFR5cGVkZWZzKEl0ZXJhYmxlPFR5cGVkZWZFbnRpdHk+IHR5cGVkZWZzKSB7CiAgICAvLyBUT0RPKHJlZGVtcHRpb24pOiBTdXBwb3J0IHRoaXMuCiAgICBhc3NlcnQodHlwZWRlZnMuaXNFbXB0eSk7CiAgICByZXR1cm4gdHlwZWRlZnM7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgY29tcGFyZUxpYnJhcmllc0J5TG9jYXRpb24oTGlicmFyeUVudGl0eSBhLCBMaWJyYXJ5RW50aXR5IGIpIHsKICAgIHJldHVybiBfY29tcGFyZUxpYnJhcmllcyhhLCBiKTsKICB9CgogIEBvdmVycmlkZQogIGludCBjb21wYXJlQ2xhc3Nlc0J5TG9jYXRpb24oQ2xhc3NFbnRpdHkgYSwgQ2xhc3NFbnRpdHkgYikgewogICAgaW50IHIgPSBfY29tcGFyZUxpYnJhcmllcyhhLmxpYnJhcnksIGIubGlicmFyeSk7CiAgICBpZiAociAhPSAwKSByZXR1cm4gcjsKICAgIENsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uMSA9IGVsZW1lbnRNYXAuZ2V0Q2xhc3NEZWZpbml0aW9uKGEpOwogICAgQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb24yID0gZWxlbWVudE1hcC5nZXRDbGFzc0RlZmluaXRpb24oYik7CiAgICByZXR1cm4gX2NvbXBhcmVTb3VyY2VTcGFucygKICAgICAgICBhLCBkZWZpbml0aW9uMS5sb2NhdGlvbiwgYiwgZGVmaW5pdGlvbjIubG9jYXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGNvbXBhcmVUeXBlZGVmc0J5TG9jYXRpb24oVHlwZWRlZkVudGl0eSBhLCBUeXBlZGVmRW50aXR5IGIpIHsKICAgIC8vIFRPRE8ocmVkZW1wdGlvbik6IFN1cHBvcnQgdGhpcy4KICAgIGZhaWxlZEF0KGEsICdLZXJuZWxTb3J0ZXIuY29tcGFyZVR5cGVkZWZzQnlMb2NhdGlvbiB1bmltcGxlbWVudGVkJyk7CiAgICByZXR1cm4gMDsKICB9CgogIEBvdmVycmlkZQogIGludCBjb21wYXJlTWVtYmVyc0J5TG9jYXRpb24oTWVtYmVyRW50aXR5IGEsIE1lbWJlckVudGl0eSBiKSB7CiAgICBpbnQgciA9IF9jb21wYXJlTGlicmFyaWVzKGEubGlicmFyeSwgYi5saWJyYXJ5KTsKICAgIGlmIChyICE9IDApIHJldHVybiByOwogICAgTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uMSA9IGVsZW1lbnRNYXAuZ2V0TWVtYmVyRGVmaW5pdGlvbihhKTsKICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbjIgPSBlbGVtZW50TWFwLmdldE1lbWJlckRlZmluaXRpb24oYik7CiAgICByZXR1cm4gX2NvbXBhcmVTb3VyY2VTcGFucygKICAgICAgICBhLCBkZWZpbml0aW9uMS5sb2NhdGlvbiwgYiwgZGVmaW5pdGlvbjIubG9jYXRpb24pOwogIH0KfQoKLy8vIFtMb2NhbExvb2t1cF0gaW1wbGVtZW50YXRpb24gdXNlZCB0byBkZXNlcmlhbGl6ZSBbSnNDbG9zZWRXb3JsZF0uCmNsYXNzIExvY2FsTG9va3VwSW1wbCBpbXBsZW1lbnRzIExvY2FsTG9va3VwIHsKICBmaW5hbCBHbG9iYWxMb2NhbHNNYXAgX2dsb2JhbExvY2Fsc01hcDsKCiAgTG9jYWxMb29rdXBJbXBsKHRoaXMuX2dsb2JhbExvY2Fsc01hcCk7CgogIEBvdmVycmlkZQogIExvY2FsIGdldExvY2FsQnlJbmRleChNZW1iZXJFbnRpdHkgbWVtYmVyQ29udGV4dCwgaW50IGluZGV4KSB7CiAgICBLZXJuZWxUb0xvY2Fsc01hcEltcGwgbWFwID0gX2dsb2JhbExvY2Fsc01hcC5nZXRMb2NhbHNNYXAobWVtYmVyQ29udGV4dCk7CiAgICByZXR1cm4gbWFwLmdldExvY2FsQnlJbmRleChpbmRleCk7CiAgfQp9CoKdAE5OPAEoRAEaGR9MIDIkMSEhHjEkKSwrLik1NiIiGi4rJTkoJBgbIBYBLiwBDB8MKQwjDCsBHQE2NgFJAUovAUAtAS8BTTMBDCwBDCwBDCcBKQwiLAwmDCkMKQwnDCcSATYBERcXHBkUGh0fHiAkHRYpGzMcHB4bG0UEATssHyMfMx4bFwEmNUAmOEZLLD8wKE44TUgwJ0AoOQFIR0pORzNBRkEBJkEBHkABJDcrNwFJTwEVAR4UFBkWERsaHBsdIRoTJhgfGRkVGBcEATEoFSYrASomKygjKSwrKiwwKRhGNTsrLSoZFjYrEwQBDE8BDEMBDC8BDCgtBAEMQCw1Bk4dNRAEAQw+LDUGOU4EAQwoJgQBDC8rHEAEAQxMJz1AHTMtBAEMUEwqJgQBDBo/TxJDJkYbFggsNFAiFjY2FQhPMiwyMBFEJQpEOysGATpJLSUuLi8vDTlGQggUBgQBDEw3PAEoQFABIkcJMU47KycIIwE6CzQ5HCs2GR5OFBoKCCEGNh0EAQw3IkIyMgE4QShDQSAoDgwKAS4fKAoIBjY4BAEMTDc8CAQBDEQgISBIMD0IBhIEAR4hTz48BgQBDEgwHVAgRiUEAQxRGjMuBlAEAQwoMxpKBAFMGhk5JwQBDE8zEwYyRwQBDDEoLlFKUC4UBgEhEwYkOQYSBAEMFjUEAQwwIQQBDEIaL0ocIEEiCDMGEgQBQEc9KC87LksnAR47IEcGLQQBMzk8BAEMNiEEAgEnIwEhATxHBAFCMEcaIk0EAQxNOAQBDEk9BAEMRTg3J0ogDyEIBjAzIyA8JikaRhUIIhMEAQxLJx4VBAEMRSQEAQw/NRpERCA7BAEMRCdJDgQBDEE1GkZGIDsEAgFGLyoBKgEMQU4nBAIBK3BhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX21vZGVsL2pzX3dvcmxkLmRhcnQ8c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfbW9kZWwvanNfd29ybGRfYnVpbGRlci5kYXJ0wACOLi8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKCmltcG9ydCAnLi4vY2xvc3VyZS5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL2NvbnN0YW50cy9jb25zdGFudF9zeXN0ZW0uZGFydCcgYXMgY29uc3RhbnRfc3lzdGVtOwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZGVmZXJyZWRfbG9hZC5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9pbmRleGVkLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9pci9jbG9zdXJlLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvYW5ub3RhdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9iYWNrZW5kX3VzYWdlLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvZmllbGRfYW5hbHlzaXMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9pbnRlcmNlcHRvcl9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmF0aXZlX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ub19zdWNoX21ldGhvZF9yZWdpc3RyeS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfcmVzb2x1dGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi9rZXJuZWwva2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL25hdGl2ZS9iZWhhdmlvci5kYXJ0JzsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jbGFzc19zZXQuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvZmVhdHVyZS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9tZW1iZXJfdXNhZ2UuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCc7CmltcG9ydCAnLi4vd29ybGQuZGFydCc7CmltcG9ydCAnY2xvc3VyZS5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50X21hcC5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50X21hcF9pbXBsLmRhcnQnOwppbXBvcnQgJ2pzX3dvcmxkLmRhcnQnOwppbXBvcnQgJ2xvY2Fscy5kYXJ0JzsKCmNsYXNzIEpzQ2xvc2VkV29ybGRCdWlsZGVyIHsKICBmaW5hbCBKc0tlcm5lbFRvRWxlbWVudE1hcCBfZWxlbWVudE1hcDsKICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIENsYXNzSGllcmFyY2h5Tm9kZT4gX2NsYXNzSGllcmFyY2h5Tm9kZXMgPQogICAgICBuZXcgQ2xhc3NIaWVyYXJjaHlOb2Rlc01hcCgpOwogIGZpbmFsIE1hcDxDbGFzc0VudGl0eSwgQ2xhc3NTZXQ+IF9jbGFzc1NldHMgPSA8Q2xhc3NFbnRpdHksIENsYXNzU2V0Pnt9OwogIGZpbmFsIEdsb2JhbExvY2Fsc01hcCBfZ2xvYmFsTG9jYWxzTWFwOwogIGZpbmFsIENsb3N1cmVEYXRhQnVpbGRlciBfY2xvc3VyZURhdGFCdWlsZGVyOwogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBfb3B0aW9uczsKICBmaW5hbCBBYnN0cmFjdFZhbHVlU3RyYXRlZ3kgX2Fic3RyYWN0VmFsdWVTdHJhdGVneTsKCiAgSnNDbG9zZWRXb3JsZEJ1aWxkZXIodGhpcy5fZWxlbWVudE1hcCwgdGhpcy5fZ2xvYmFsTG9jYWxzTWFwLAogICAgICB0aGlzLl9jbG9zdXJlRGF0YUJ1aWxkZXIsIHRoaXMuX29wdGlvbnMsIHRoaXMuX2Fic3RyYWN0VmFsdWVTdHJhdGVneSk7CgogIEVsZW1lbnRFbnZpcm9ubWVudCBnZXQgX2VsZW1lbnRFbnZpcm9ubWVudCA9PiBfZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQ7CiAgQ29tbW9uRWxlbWVudHMgZ2V0IF9jb21tb25FbGVtZW50cyA9PiBfZWxlbWVudE1hcC5jb21tb25FbGVtZW50czsKCiAgSnNDbG9zZWRXb3JsZCBjb252ZXJ0Q2xvc2VkV29ybGQoCiAgICAgIEtDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgTWFwPE1lbWJlckVudGl0eSwgQ2xvc3VyZVNjb3BlTW9kZWw+IGNsb3N1cmVNb2RlbHMsCiAgICAgIE91dHB1dFVuaXREYXRhIGtPdXRwdXRVbml0RGF0YSkgewogICAgSnNUb0Zyb250ZW5kTWFwIG1hcCA9IG5ldyBKc1RvRnJvbnRlbmRNYXBJbXBsKF9lbGVtZW50TWFwKTsKCiAgICBCYWNrZW5kVXNhZ2UgYmFja2VuZFVzYWdlID0KICAgICAgICBfY29udmVydEJhY2tlbmRVc2FnZShtYXAsIGNsb3NlZFdvcmxkLmJhY2tlbmRVc2FnZSk7CiAgICBOYXRpdmVEYXRhIG5hdGl2ZURhdGEgPSBfY29udmVydE5hdGl2ZURhdGEobWFwLCBjbG9zZWRXb3JsZC5uYXRpdmVEYXRhKTsKICAgIF9lbGVtZW50TWFwLm5hdGl2ZURhdGEgPSBuYXRpdmVEYXRhOwogICAgSW50ZXJjZXB0b3JEYXRhIGludGVyY2VwdG9yRGF0YSA9CiAgICAgICAgX2NvbnZlcnRJbnRlcmNlcHRvckRhdGEobWFwLCBuYXRpdmVEYXRhLCBjbG9zZWRXb3JsZC5pbnRlcmNlcHRvckRhdGEpOwoKICAgIFNldDxDbGFzc0VudGl0eT4gaW1wbGVtZW50ZWRDbGFzc2VzID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKCiAgICAvLy8gQ29udmVydHMgW25vZGVdIGZyb20gdGhlIGZyb250ZW5kIHdvcmxkIHRvIHRoZSBjb3JyZXNwb25kaW5nCiAgICAvLy8gW0NsYXNzSGllcmFyY2h5Tm9kZV0gZm9yIHRoZSBiYWNrZW5kIHdvcmxkLgogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIGNvbnZlcnRDbGFzc0hpZXJhcmNoeU5vZGUoQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUpIHsKICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gbWFwLnRvQmFja2VuZENsYXNzKG5vZGUuY2xzKTsKICAgICAgaWYgKGNsb3NlZFdvcmxkLmlzSW1wbGVtZW50ZWQobm9kZS5jbHMpKSB7CiAgICAgICAgaW1wbGVtZW50ZWRDbGFzc2VzLmFkZChjbHMpOwogICAgICB9CiAgICAgIENsYXNzSGllcmFyY2h5Tm9kZSBuZXdOb2RlID0gX2NsYXNzSGllcmFyY2h5Tm9kZXMucHV0SWZBYnNlbnQoY2xzLCAoKSB7CiAgICAgICAgQ2xhc3NIaWVyYXJjaHlOb2RlIHBhcmVudE5vZGU7CiAgICAgICAgaWYgKG5vZGUucGFyZW50Tm9kZSAhPSBudWxsKSB7CiAgICAgICAgICBwYXJlbnROb2RlID0gY29udmVydENsYXNzSGllcmFyY2h5Tm9kZShub2RlLnBhcmVudE5vZGUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IENsYXNzSGllcmFyY2h5Tm9kZShwYXJlbnROb2RlLCBjbHMsIG5vZGUuaGllcmFyY2h5RGVwdGgpOwogICAgICB9KTsKICAgICAgbmV3Tm9kZS5pc0Fic3RyYWN0bHlJbnN0YW50aWF0ZWQgPSBub2RlLmlzQWJzdHJhY3RseUluc3RhbnRpYXRlZDsKICAgICAgbmV3Tm9kZS5pc0RpcmVjdGx5SW5zdGFudGlhdGVkID0gbm9kZS5pc0RpcmVjdGx5SW5zdGFudGlhdGVkOwogICAgICByZXR1cm4gbmV3Tm9kZTsKICAgIH0KCiAgICAvLy8gQ29udmVydHMgW2NsYXNzU2V0XSBmcm9tIHRoZSBmcm9udGVuZCB3b3JsZCB0byB0aGUgY29ycmVzcG9uZGluZwogICAgLy8vIFtDbGFzc1NldF0gZm9yIHRoZSBiYWNrZW5kIHdvcmxkLgogICAgQ2xhc3NTZXQgY29udmVydENsYXNzU2V0KENsYXNzU2V0IGNsYXNzU2V0KSB7CiAgICAgIENsYXNzRW50aXR5IGNscyA9IG1hcC50b0JhY2tlbmRDbGFzcyhjbGFzc1NldC5jbHMpOwogICAgICByZXR1cm4gX2NsYXNzU2V0cy5wdXRJZkFic2VudChjbHMsICgpIHsKICAgICAgICBDbGFzc0hpZXJhcmNoeU5vZGUgbmV3Tm9kZSA9IGNvbnZlcnRDbGFzc0hpZXJhcmNoeU5vZGUoY2xhc3NTZXQubm9kZSk7CiAgICAgICAgQ2xhc3NTZXQgbmV3Q2xhc3NTZXQgPSBuZXcgQ2xhc3NTZXQobmV3Tm9kZSk7CiAgICAgICAgZm9yIChDbGFzc0hpZXJhcmNoeU5vZGUgc3VidHlwZSBpbiBjbGFzc1NldC5zdWJ0eXBlTm9kZXMpIHsKICAgICAgICAgIENsYXNzSGllcmFyY2h5Tm9kZSBuZXdTdWJ0eXBlID0gY29udmVydENsYXNzSGllcmFyY2h5Tm9kZShzdWJ0eXBlKTsKICAgICAgICAgIG5ld0NsYXNzU2V0LmFkZFN1YnR5cGUobmV3U3VidHlwZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXdDbGFzc1NldDsKICAgICAgfSk7CiAgICB9CgogICAgY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkKICAgICAgICAuZ2V0Q2xhc3NIaWVyYXJjaHlOb2RlKGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzKQogICAgICAgIC5mb3JFYWNoU3ViY2xhc3MoKENsYXNzRW50aXR5IGNscykgewogICAgICBjb252ZXJ0Q2xhc3NTZXQoY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuZ2V0Q2xhc3NTZXQoY2xzKSk7CiAgICAgIHJldHVybiBJdGVyYXRpb25TdGVwLkNPTlRJTlVFOwogICAgfSwgQ2xhc3NIaWVyYXJjaHlOb2RlLkFMTCk7CgogICAgU2V0PE1lbWJlckVudGl0eT4gbGl2ZUluc3RhbmNlTWVtYmVycyA9CiAgICAgICAgbWFwLnRvQmFja2VuZE1lbWJlclNldChjbG9zZWRXb3JsZC5saXZlSW5zdGFuY2VNZW1iZXJzKTsKCiAgICBNYXA8Q2xhc3NFbnRpdHksIFNldDxDbGFzc0VudGl0eT4+IG1peGluVXNlcyA9CiAgICAgICAgbWFwLnRvQmFja2VuZENsYXNzTWFwKGNsb3NlZFdvcmxkLm1peGluVXNlcywgbWFwLnRvQmFja2VuZENsYXNzU2V0KTsKCiAgICBNYXA8Q2xhc3NFbnRpdHksIFNldDxDbGFzc0VudGl0eT4+IHR5cGVzSW1wbGVtZW50ZWRCeVN1YmNsYXNzZXMgPQogICAgICAgIG1hcC50b0JhY2tlbmRDbGFzc01hcCgKICAgICAgICAgICAgY2xvc2VkV29ybGQudHlwZXNJbXBsZW1lbnRlZEJ5U3ViY2xhc3NlcywgbWFwLnRvQmFja2VuZENsYXNzU2V0KTsKCiAgICBTZXQ8TWVtYmVyRW50aXR5PiBhc3NpZ25lZEluc3RhbmNlTWVtYmVycyA9CiAgICAgICAgbWFwLnRvQmFja2VuZE1lbWJlclNldChjbG9zZWRXb3JsZC5hc3NpZ25lZEluc3RhbmNlTWVtYmVycyk7CgogICAgU2V0PENsYXNzRW50aXR5PiBsaXZlTmF0aXZlQ2xhc3NlcyA9CiAgICAgICAgbWFwLnRvQmFja2VuZENsYXNzU2V0KGNsb3NlZFdvcmxkLmxpdmVOYXRpdmVDbGFzc2VzKTsKCiAgICBTZXQ8TWVtYmVyRW50aXR5PiBwcm9jZXNzZWRNZW1iZXJzID0KICAgICAgICBtYXAudG9CYWNrZW5kTWVtYmVyU2V0KGNsb3NlZFdvcmxkLmxpdmVNZW1iZXJVc2FnZS5rZXlzKTsKCiAgICBSdW50aW1lVHlwZXNOZWVkIHJ0aU5lZWQ7CgogICAgTGlzdDxGdW5jdGlvbkVudGl0eT4gY2FsbE1ldGhvZHMgPSA8RnVuY3Rpb25FbnRpdHk+W107CiAgICBDbG9zdXJlRGF0YSBjbG9zdXJlRGF0YTsKICAgIGlmIChfb3B0aW9ucy5kaXNhYmxlUnRpT3B0aW1pemF0aW9uKSB7CiAgICAgIHJ0aU5lZWQgPSBuZXcgVHJpdmlhbFJ1bnRpbWVUeXBlc05lZWQoX2VsZW1lbnRNYXAuZWxlbWVudEVudmlyb25tZW50KTsKICAgICAgY2xvc3VyZURhdGEgPSBfY2xvc3VyZURhdGFCdWlsZGVyLmNyZWF0ZUNsb3N1cmVFbnRpdGllcygKICAgICAgICAgIHRoaXMsCiAgICAgICAgICBtYXAudG9CYWNrZW5kTWVtYmVyTWFwKGNsb3N1cmVNb2RlbHMsIGlkZW50aXR5KSwKICAgICAgICAgIGNvbnN0IFRyaXZpYWxDbG9zdXJlUnRpTmVlZCgpLAogICAgICAgICAgY2FsbE1ldGhvZHMpOwogICAgfSBlbHNlIHsKICAgICAgUnVudGltZVR5cGVzTmVlZEltcGwga2VybmVsUnRpTmVlZCA9IGNsb3NlZFdvcmxkLnJ0aU5lZWQ7CiAgICAgIFNldDxpci5Mb2NhbEZ1bmN0aW9uPiBsb2NhbEZ1bmN0aW9uc05vZGVzTmVlZGluZ1NpZ25hdHVyZSA9CiAgICAgICAgICBuZXcgU2V0PGlyLkxvY2FsRnVuY3Rpb24+KCk7CiAgICAgIGZvciAoS0xvY2FsRnVuY3Rpb24gbG9jYWxGdW5jdGlvbgogICAgICAgICAgaW4ga2VybmVsUnRpTmVlZC5sb2NhbEZ1bmN0aW9uc05lZWRpbmdTaWduYXR1cmUpIHsKICAgICAgICBpci5Mb2NhbEZ1bmN0aW9uIG5vZGUgPSBsb2NhbEZ1bmN0aW9uLm5vZGU7CiAgICAgICAgbG9jYWxGdW5jdGlvbnNOb2Rlc05lZWRpbmdTaWduYXR1cmUuYWRkKG5vZGUpOwogICAgICB9CiAgICAgIFNldDxpci5Mb2NhbEZ1bmN0aW9uPiBsb2NhbEZ1bmN0aW9uc05vZGVzTmVlZGluZ1R5cGVBcmd1bWVudHMgPQogICAgICAgICAgbmV3IFNldDxpci5Mb2NhbEZ1bmN0aW9uPigpOwogICAgICBmb3IgKEtMb2NhbEZ1bmN0aW9uIGxvY2FsRnVuY3Rpb24KICAgICAgICAgIGluIGtlcm5lbFJ0aU5lZWQubG9jYWxGdW5jdGlvbnNOZWVkaW5nVHlwZUFyZ3VtZW50cykgewogICAgICAgIGlyLkxvY2FsRnVuY3Rpb24gbm9kZSA9IGxvY2FsRnVuY3Rpb24ubm9kZTsKICAgICAgICBsb2NhbEZ1bmN0aW9uc05vZGVzTmVlZGluZ1R5cGVBcmd1bWVudHMuYWRkKG5vZGUpOwogICAgICB9CgogICAgICBSdW50aW1lVHlwZXNOZWVkSW1wbCBqUnRpTmVlZCA9CiAgICAgICAgICBfY29udmVydFJ1bnRpbWVUeXBlc05lZWQobWFwLCBiYWNrZW5kVXNhZ2UsIGtlcm5lbFJ0aU5lZWQpOwogICAgICBjbG9zdXJlRGF0YSA9IF9jbG9zdXJlRGF0YUJ1aWxkZXIuY3JlYXRlQ2xvc3VyZUVudGl0aWVzKAogICAgICAgICAgdGhpcywKICAgICAgICAgIG1hcC50b0JhY2tlbmRNZW1iZXJNYXAoY2xvc3VyZU1vZGVscywgaWRlbnRpdHkpLAogICAgICAgICAgbmV3IEpzQ2xvc3VyZVJ0aU5lZWQoCiAgICAgICAgICAgICAgalJ0aU5lZWQsCiAgICAgICAgICAgICAgbG9jYWxGdW5jdGlvbnNOb2Rlc05lZWRpbmdUeXBlQXJndW1lbnRzLAogICAgICAgICAgICAgIGxvY2FsRnVuY3Rpb25zTm9kZXNOZWVkaW5nU2lnbmF0dXJlKSwKICAgICAgICAgIGNhbGxNZXRob2RzKTsKCiAgICAgIExpc3Q8RnVuY3Rpb25FbnRpdHk+IGNhbGxNZXRob2RzTmVlZGluZ1NpZ25hdHVyZSA9IDxGdW5jdGlvbkVudGl0eT5bXTsKICAgICAgZm9yIChpci5Mb2NhbEZ1bmN0aW9uIG5vZGUgaW4gbG9jYWxGdW5jdGlvbnNOb2Rlc05lZWRpbmdTaWduYXR1cmUpIHsKICAgICAgICBjYWxsTWV0aG9kc05lZWRpbmdTaWduYXR1cmUKICAgICAgICAgICAgLmFkZChjbG9zdXJlRGF0YS5nZXRDbG9zdXJlSW5mbyhub2RlKS5jYWxsTWV0aG9kKTsKICAgICAgfQogICAgICBMaXN0PEZ1bmN0aW9uRW50aXR5PiBjYWxsTWV0aG9kc05lZWRpbmdUeXBlQXJndW1lbnRzID0gPEZ1bmN0aW9uRW50aXR5PltdOwogICAgICBmb3IgKGlyLkxvY2FsRnVuY3Rpb24gbm9kZSBpbiBsb2NhbEZ1bmN0aW9uc05vZGVzTmVlZGluZ1R5cGVBcmd1bWVudHMpIHsKICAgICAgICBjYWxsTWV0aG9kc05lZWRpbmdUeXBlQXJndW1lbnRzCiAgICAgICAgICAgIC5hZGQoY2xvc3VyZURhdGEuZ2V0Q2xvc3VyZUluZm8obm9kZSkuY2FsbE1ldGhvZCk7CiAgICAgIH0KICAgICAgalJ0aU5lZWQubWV0aG9kc05lZWRpbmdTaWduYXR1cmUuYWRkQWxsKGNhbGxNZXRob2RzTmVlZGluZ1NpZ25hdHVyZSk7CiAgICAgIGpSdGlOZWVkLm1ldGhvZHNOZWVkaW5nVHlwZUFyZ3VtZW50cwogICAgICAgICAgLmFkZEFsbChjYWxsTWV0aG9kc05lZWRpbmdUeXBlQXJndW1lbnRzKTsKCiAgICAgIHJ0aU5lZWQgPSBqUnRpTmVlZDsKICAgIH0KCiAgICBOb1N1Y2hNZXRob2REYXRhSW1wbCBvbGROb1N1Y2hNZXRob2REYXRhID0gY2xvc2VkV29ybGQubm9TdWNoTWV0aG9kRGF0YTsKICAgIE5vU3VjaE1ldGhvZERhdGEgbm9TdWNoTWV0aG9kRGF0YSA9IG5ldyBOb1N1Y2hNZXRob2REYXRhSW1wbCgKICAgICAgICBtYXAudG9CYWNrZW5kRnVuY3Rpb25TZXQob2xkTm9TdWNoTWV0aG9kRGF0YS50aHJvd2luZ0ltcGxzKSwKICAgICAgICBtYXAudG9CYWNrZW5kRnVuY3Rpb25TZXQob2xkTm9TdWNoTWV0aG9kRGF0YS5vdGhlckltcGxzKSwKICAgICAgICBtYXAudG9CYWNrZW5kRnVuY3Rpb25TZXQob2xkTm9TdWNoTWV0aG9kRGF0YS5mb3J3YXJkaW5nU3ludGF4SW1wbHMpKTsKCiAgICBKRmllbGRBbmFseXNpcyBhbGxvY2F0b3JBbmFseXNpcyA9CiAgICAgICAgSkZpZWxkQW5hbHlzaXMuZnJvbShjbG9zZWRXb3JsZCwgbWFwLCBfb3B0aW9ucyk7CgogICAgQW5ub3RhdGlvbnNEYXRhSW1wbCBvbGRBbm5vdGF0aW9uc0RhdGEgPSBjbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGE7CiAgICBBbm5vdGF0aW9uc0RhdGEgYW5ub3RhdGlvbnNEYXRhID0gbmV3IEFubm90YXRpb25zRGF0YUltcGwoX29wdGlvbnMsCiAgICAgICAgbWFwLnRvQmFja2VuZE1lbWJlck1hcChvbGRBbm5vdGF0aW9uc0RhdGEucHJhZ21hQW5ub3RhdGlvbnMsIGlkZW50aXR5KSk7CgogICAgT3V0cHV0VW5pdERhdGEgb3V0cHV0VW5pdERhdGEgPQogICAgICAgIF9jb252ZXJ0T3V0cHV0VW5pdERhdGEobWFwLCBrT3V0cHV0VW5pdERhdGEsIGNsb3N1cmVEYXRhKTsKCiAgICBNYXA8TWVtYmVyRW50aXR5LCBNZW1iZXJBY2Nlc3M+IG1lbWJlckFjY2VzcyA9IG1hcC50b0JhY2tlbmRNZW1iZXJNYXAoCiAgICAgICAgY2xvc2VkV29ybGQubGl2ZU1lbWJlclVzYWdlLAogICAgICAgIChNZW1iZXJVc2FnZSB1c2FnZSkgPT4KICAgICAgICAgICAgbmV3IE1lbWJlckFjY2Vzcyh1c2FnZS5yZWFkcywgdXNhZ2Uud3JpdGVzLCB1c2FnZS5pbnZva2VzKSk7CgogICAgcmV0dXJuIG5ldyBKc0Nsb3NlZFdvcmxkKAogICAgICAgIF9lbGVtZW50TWFwLAogICAgICAgIG5hdGl2ZURhdGEsCiAgICAgICAgaW50ZXJjZXB0b3JEYXRhLAogICAgICAgIGJhY2tlbmRVc2FnZSwKICAgICAgICBydGlOZWVkLAogICAgICAgIGFsbG9jYXRvckFuYWx5c2lzLAogICAgICAgIG5vU3VjaE1ldGhvZERhdGEsCiAgICAgICAgaW1wbGVtZW50ZWRDbGFzc2VzLAogICAgICAgIGxpdmVOYXRpdmVDbGFzc2VzLAogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEluY2x1ZGUgdGhlIGNhbGwgbWV0aG9kIHdoZW4gd2UgY2FuIGFsc28KICAgICAgICAvLyByZXByZXNlbnQgdGhlIHN5bnRoZXNpemVkIGNhbGwgbWV0aG9kcyBmb3Igc3RhdGljIGFuZCBpbnN0YW5jZSBtZXRob2QKICAgICAgICAvLyBjbG9zdXJpemF0aW9ucy4KICAgICAgICBsaXZlSW5zdGFuY2VNZW1iZXJzIC8qLi5hZGRBbGwoY2FsbE1ldGhvZHMpKi8sCiAgICAgICAgYXNzaWduZWRJbnN0YW5jZU1lbWJlcnMsCiAgICAgICAgcHJvY2Vzc2VkTWVtYmVycywKICAgICAgICBtaXhpblVzZXMsCiAgICAgICAgdHlwZXNJbXBsZW1lbnRlZEJ5U3ViY2xhc3NlcywKICAgICAgICBuZXcgQ2xhc3NIaWVyYXJjaHlJbXBsKAogICAgICAgICAgICBfZWxlbWVudE1hcC5jb21tb25FbGVtZW50cywgX2NsYXNzSGllcmFyY2h5Tm9kZXMsIF9jbGFzc1NldHMpLAogICAgICAgIF9hYnN0cmFjdFZhbHVlU3RyYXRlZ3ksCiAgICAgICAgYW5ub3RhdGlvbnNEYXRhLAogICAgICAgIF9nbG9iYWxMb2NhbHNNYXAsCiAgICAgICAgY2xvc3VyZURhdGEsCiAgICAgICAgb3V0cHV0VW5pdERhdGEsCiAgICAgICAgbWVtYmVyQWNjZXNzKTsKICB9CgogIEJhY2tlbmRVc2FnZSBfY29udmVydEJhY2tlbmRVc2FnZSgKICAgICAgSnNUb0Zyb250ZW5kTWFwIG1hcCwgQmFja2VuZFVzYWdlSW1wbCBiYWNrZW5kVXNhZ2UpIHsKICAgIFNldDxGdW5jdGlvbkVudGl0eT4gZ2xvYmFsRnVuY3Rpb25EZXBlbmRlbmNpZXMgPQogICAgICAgIG1hcC50b0JhY2tlbmRGdW5jdGlvblNldChiYWNrZW5kVXNhZ2UuZ2xvYmFsRnVuY3Rpb25EZXBlbmRlbmNpZXMpOwogICAgU2V0PENsYXNzRW50aXR5PiBnbG9iYWxDbGFzc0RlcGVuZGVuY2llcyA9CiAgICAgICAgbWFwLnRvQmFja2VuZENsYXNzU2V0KGJhY2tlbmRVc2FnZS5nbG9iYWxDbGFzc0RlcGVuZGVuY2llcyk7CiAgICBTZXQ8RnVuY3Rpb25FbnRpdHk+IGhlbHBlckZ1bmN0aW9uc1VzZWQgPQogICAgICAgIG1hcC50b0JhY2tlbmRGdW5jdGlvblNldChiYWNrZW5kVXNhZ2UuaGVscGVyRnVuY3Rpb25zVXNlZCk7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGhlbHBlckNsYXNzZXNVc2VkID0KICAgICAgICBtYXAudG9CYWNrZW5kQ2xhc3NTZXQoYmFja2VuZFVzYWdlLmhlbHBlckNsYXNzZXNVc2VkKTsKICAgIFNldDxSdW50aW1lVHlwZVVzZT4gcnVudGltZVR5cGVVc2VzID0KICAgICAgICBiYWNrZW5kVXNhZ2UucnVudGltZVR5cGVVc2VzLm1hcCgoUnVudGltZVR5cGVVc2UgcnVudGltZVR5cGVVc2UpIHsKICAgICAgcmV0dXJuIG5ldyBSdW50aW1lVHlwZVVzZSgKICAgICAgICAgIHJ1bnRpbWVUeXBlVXNlLmtpbmQsCiAgICAgICAgICBtYXAudG9CYWNrZW5kVHlwZShydW50aW1lVHlwZVVzZS5yZWNlaXZlclR5cGUpLAogICAgICAgICAgbWFwLnRvQmFja2VuZFR5cGUocnVudGltZVR5cGVVc2UuYXJndW1lbnRUeXBlKSk7CiAgICB9KS50b1NldCgpOwoKICAgIHJldHVybiBuZXcgQmFja2VuZFVzYWdlSW1wbCgKICAgICAgICBnbG9iYWxGdW5jdGlvbkRlcGVuZGVuY2llczogZ2xvYmFsRnVuY3Rpb25EZXBlbmRlbmNpZXMsCiAgICAgICAgZ2xvYmFsQ2xhc3NEZXBlbmRlbmNpZXM6IGdsb2JhbENsYXNzRGVwZW5kZW5jaWVzLAogICAgICAgIGhlbHBlckZ1bmN0aW9uc1VzZWQ6IGhlbHBlckZ1bmN0aW9uc1VzZWQsCiAgICAgICAgaGVscGVyQ2xhc3Nlc1VzZWQ6IGhlbHBlckNsYXNzZXNVc2VkLAogICAgICAgIG5lZWRUb0luaXRpYWxpemVJc29sYXRlQWZmaW5pdHlUYWc6CiAgICAgICAgICAgIGJhY2tlbmRVc2FnZS5uZWVkVG9Jbml0aWFsaXplSXNvbGF0ZUFmZmluaXR5VGFnLAogICAgICAgIG5lZWRUb0luaXRpYWxpemVEaXNwYXRjaFByb3BlcnR5OgogICAgICAgICAgICBiYWNrZW5kVXNhZ2UubmVlZFRvSW5pdGlhbGl6ZURpc3BhdGNoUHJvcGVydHksCiAgICAgICAgcmVxdWlyZXNQcmVhbWJsZTogYmFja2VuZFVzYWdlLnJlcXVpcmVzUHJlYW1ibGUsCiAgICAgICAgcnVudGltZVR5cGVVc2VzOiBydW50aW1lVHlwZVVzZXMsCiAgICAgICAgaXNGdW5jdGlvbkFwcGx5VXNlZDogYmFja2VuZFVzYWdlLmlzRnVuY3Rpb25BcHBseVVzZWQsCiAgICAgICAgaXNNaXJyb3JzVXNlZDogYmFja2VuZFVzYWdlLmlzTWlycm9yc1VzZWQsCiAgICAgICAgaXNOb1N1Y2hNZXRob2RVc2VkOiBiYWNrZW5kVXNhZ2UuaXNOb1N1Y2hNZXRob2RVc2VkLAogICAgICAgIGlzSHRtbExvYWRlZDogYmFja2VuZFVzYWdlLmlzSHRtbExvYWRlZCk7CiAgfQoKICBOYXRpdmVCYXNpY0RhdGEgX2NvbnZlcnROYXRpdmVCYXNpY0RhdGEoCiAgICAgIEpzVG9Gcm9udGVuZE1hcCBtYXAsIE5hdGl2ZUJhc2ljRGF0YUltcGwgbmF0aXZlQmFzaWNEYXRhKSB7CiAgICBNYXA8Q2xhc3NFbnRpdHksIE5hdGl2ZUNsYXNzVGFnPiBuYXRpdmVDbGFzc1RhZ0luZm8gPQogICAgICAgIDxDbGFzc0VudGl0eSwgTmF0aXZlQ2xhc3NUYWc+e307CiAgICBuYXRpdmVCYXNpY0RhdGEubmF0aXZlQ2xhc3NUYWdJbmZvCiAgICAgICAgLmZvckVhY2goKENsYXNzRW50aXR5IGNscywgTmF0aXZlQ2xhc3NUYWcgdGFnKSB7CiAgICAgIG5hdGl2ZUNsYXNzVGFnSW5mb1ttYXAudG9CYWNrZW5kQ2xhc3MoY2xzKV0gPSB0YWc7CiAgICB9KTsKICAgIE1hcDxMaWJyYXJ5RW50aXR5LCBTdHJpbmc+IGpzSW50ZXJvcExpYnJhcmllcyA9CiAgICAgICAgbWFwLnRvQmFja2VuZExpYnJhcnlNYXAobmF0aXZlQmFzaWNEYXRhLmpzSW50ZXJvcExpYnJhcmllcywgaWRlbnRpdHkpOwogICAgTWFwPENsYXNzRW50aXR5LCBTdHJpbmc+IGpzSW50ZXJvcENsYXNzZXMgPQogICAgICAgIG1hcC50b0JhY2tlbmRDbGFzc01hcChuYXRpdmVCYXNpY0RhdGEuanNJbnRlcm9wQ2xhc3NlcywgaWRlbnRpdHkpOwogICAgU2V0PENsYXNzRW50aXR5PiBhbm9ueW1vdXNKc0ludGVyb3BDbGFzc2VzID0KICAgICAgICBtYXAudG9CYWNrZW5kQ2xhc3NTZXQobmF0aXZlQmFzaWNEYXRhLmFub255bW91c0pzSW50ZXJvcENsYXNzZXMpOwogICAgTWFwPE1lbWJlckVudGl0eSwgU3RyaW5nPiBqc0ludGVyb3BNZW1iZXJzID0KICAgICAgICBtYXAudG9CYWNrZW5kTWVtYmVyTWFwKG5hdGl2ZUJhc2ljRGF0YS5qc0ludGVyb3BNZW1iZXJzLCBpZGVudGl0eSk7CiAgICByZXR1cm4gbmV3IE5hdGl2ZUJhc2ljRGF0YUltcGwoCiAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgICBuYXRpdmVCYXNpY0RhdGEuaXNBbGxvd0ludGVyb3BVc2VkLAogICAgICAgIG5hdGl2ZUNsYXNzVGFnSW5mbywKICAgICAgICBqc0ludGVyb3BMaWJyYXJpZXMsCiAgICAgICAganNJbnRlcm9wQ2xhc3NlcywKICAgICAgICBhbm9ueW1vdXNKc0ludGVyb3BDbGFzc2VzLAogICAgICAgIGpzSW50ZXJvcE1lbWJlcnMpOwogIH0KCiAgTmF0aXZlRGF0YSBfY29udmVydE5hdGl2ZURhdGEoCiAgICAgIEpzVG9Gcm9udGVuZE1hcCBtYXAsIE5hdGl2ZURhdGFJbXBsIG5hdGl2ZURhdGEpIHsKICAgIGNvbnZlcnROYXRpdmVCZWhhdmlvclR5cGUodHlwZSkgewogICAgICBpZiAodHlwZSBpcyBEYXJ0VHlwZSkgewogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEF2b2lkIGZyZWUgdmFyaWFibGVzIGluIHR5cGVzLiBJZiB0aGUgdHlwZQogICAgICAgIC8vIHB1bGxlZCBmcm9tIGEgZ2VuZXJpYyBmdW5jdGlvbiB0eXBlIGl0IG1pZ2h0IGNvbnRhaW4gYSBmdW5jdGlvbgogICAgICAgIC8vIHR5cGUgdmFyaWFibGUgdGhhdCBzaG91bGQgcHJvYmFibHkgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IGl0cyBib3VuZC4KICAgICAgICByZXR1cm4gbWFwLnRvQmFja2VuZFR5cGUodHlwZSwgYWxsb3dGcmVlVmFyaWFibGVzOiB0cnVlKTsKICAgICAgfQogICAgICBhc3NlcnQodHlwZSBpcyBTcGVjaWFsVHlwZSk7CiAgICAgIHJldHVybiB0eXBlOwogICAgfQoKICAgIE5hdGl2ZUJlaGF2aW9yIGNvbnZlcnROYXRpdmVCZWhhdmlvcihOYXRpdmVCZWhhdmlvciBiZWhhdmlvcikgewogICAgICBOYXRpdmVCZWhhdmlvciBuZXdCZWhhdmlvciA9IG5ldyBOYXRpdmVCZWhhdmlvcigpOwoKICAgICAgZm9yIChkeW5hbWljIHR5cGUgaW4gYmVoYXZpb3IudHlwZXNSZXR1cm5lZCkgewogICAgICAgIG5ld0JlaGF2aW9yLnR5cGVzUmV0dXJuZWQuYWRkKGNvbnZlcnROYXRpdmVCZWhhdmlvclR5cGUodHlwZSkpOwogICAgICB9CiAgICAgIGZvciAoZHluYW1pYyB0eXBlIGluIGJlaGF2aW9yLnR5cGVzSW5zdGFudGlhdGVkKSB7CiAgICAgICAgbmV3QmVoYXZpb3IudHlwZXNJbnN0YW50aWF0ZWQuYWRkKGNvbnZlcnROYXRpdmVCZWhhdmlvclR5cGUodHlwZSkpOwogICAgICB9CgogICAgICBuZXdCZWhhdmlvci5jb2RlVGVtcGxhdGVUZXh0ID0gYmVoYXZpb3IuY29kZVRlbXBsYXRlVGV4dDsKICAgICAgbmV3QmVoYXZpb3IuY29kZVRlbXBsYXRlID0gYmVoYXZpb3IuY29kZVRlbXBsYXRlOwogICAgICBuZXdCZWhhdmlvci50aHJvd0JlaGF2aW9yID0gYmVoYXZpb3IudGhyb3dCZWhhdmlvcjsKICAgICAgbmV3QmVoYXZpb3IuaXNBbGxvY2F0aW9uID0gYmVoYXZpb3IuaXNBbGxvY2F0aW9uOwogICAgICBuZXdCZWhhdmlvci51c2VHdm4gPSBiZWhhdmlvci51c2VHdm47CiAgICAgIHJldHVybiBuZXdCZWhhdmlvcjsKICAgIH0KCiAgICBOYXRpdmVCYXNpY0RhdGEgbmF0aXZlQmFzaWNEYXRhID0gX2NvbnZlcnROYXRpdmVCYXNpY0RhdGEobWFwLCBuYXRpdmVEYXRhKTsKCiAgICBNYXA8TWVtYmVyRW50aXR5LCBTdHJpbmc+IG5hdGl2ZU1lbWJlck5hbWUgPQogICAgICAgIG1hcC50b0JhY2tlbmRNZW1iZXJNYXAobmF0aXZlRGF0YS5uYXRpdmVNZW1iZXJOYW1lLCBpZGVudGl0eSk7CiAgICBNYXA8RnVuY3Rpb25FbnRpdHksIE5hdGl2ZUJlaGF2aW9yPiBuYXRpdmVNZXRob2RCZWhhdmlvciA9CiAgICAgICAgPEZ1bmN0aW9uRW50aXR5LCBOYXRpdmVCZWhhdmlvcj57fTsKICAgIG5hdGl2ZURhdGEubmF0aXZlTWV0aG9kQmVoYXZpb3IKICAgICAgICAuZm9yRWFjaCgoRnVuY3Rpb25FbnRpdHkgbWV0aG9kLCBOYXRpdmVCZWhhdmlvciBiZWhhdmlvcikgewogICAgICBGdW5jdGlvbkVudGl0eSBiYWNrZW5kTWV0aG9kID0gbWFwLnRvQmFja2VuZE1lbWJlcihtZXRob2QpOwogICAgICBpZiAoYmFja2VuZE1ldGhvZCAhPSBudWxsKSB7CiAgICAgICAgLy8gSWYgW21ldGhvZF0gaXNuJ3QgdXNlZCBpdCBkb2Vzbid0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGJhY2tlbmQKICAgICAgICAvLyBtZXRob2QuCiAgICAgICAgbmF0aXZlTWV0aG9kQmVoYXZpb3JbYmFja2VuZE1ldGhvZF0gPSBjb252ZXJ0TmF0aXZlQmVoYXZpb3IoYmVoYXZpb3IpOwogICAgICB9CiAgICB9KTsKICAgIE1hcDxNZW1iZXJFbnRpdHksIE5hdGl2ZUJlaGF2aW9yPiBuYXRpdmVGaWVsZExvYWRCZWhhdmlvciA9CiAgICAgICAgbWFwLnRvQmFja2VuZE1lbWJlck1hcCgKICAgICAgICAgICAgbmF0aXZlRGF0YS5uYXRpdmVGaWVsZExvYWRCZWhhdmlvciwgY29udmVydE5hdGl2ZUJlaGF2aW9yKTsKICAgIE1hcDxNZW1iZXJFbnRpdHksIE5hdGl2ZUJlaGF2aW9yPiBuYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3IgPQogICAgICAgIG1hcC50b0JhY2tlbmRNZW1iZXJNYXAoCiAgICAgICAgICAgIG5hdGl2ZURhdGEubmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yLCBjb252ZXJ0TmF0aXZlQmVoYXZpb3IpOwogICAgcmV0dXJuIG5ldyBOYXRpdmVEYXRhSW1wbCgKICAgICAgICBuYXRpdmVCYXNpY0RhdGEsCiAgICAgICAgbmF0aXZlTWVtYmVyTmFtZSwKICAgICAgICBuYXRpdmVNZXRob2RCZWhhdmlvciwKICAgICAgICBuYXRpdmVGaWVsZExvYWRCZWhhdmlvciwKICAgICAgICBuYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3IpOwogIH0KCiAgSW50ZXJjZXB0b3JEYXRhIF9jb252ZXJ0SW50ZXJjZXB0b3JEYXRhKEpzVG9Gcm9udGVuZE1hcCBtYXAsCiAgICAgIE5hdGl2ZURhdGEgbmF0aXZlRGF0YSwgSW50ZXJjZXB0b3JEYXRhSW1wbCBpbnRlcmNlcHRvckRhdGEpIHsKICAgIE1hcDxTdHJpbmcsIFNldDxNZW1iZXJFbnRpdHk+PiBpbnRlcmNlcHRlZE1lbWJlcnMgPQogICAgICAgIDxTdHJpbmcsIFNldDxNZW1iZXJFbnRpdHk+Pnt9OwogICAgaW50ZXJjZXB0b3JEYXRhLmludGVyY2VwdGVkTWVtYmVycwogICAgICAgIC5mb3JFYWNoKChTdHJpbmcgbmFtZSwgU2V0PE1lbWJlckVudGl0eT4gbWVtYmVycykgewogICAgICBpbnRlcmNlcHRlZE1lbWJlcnNbbmFtZV0gPSBtYXAudG9CYWNrZW5kTWVtYmVyU2V0KG1lbWJlcnMpOwogICAgfSk7CiAgICByZXR1cm4gbmV3IEludGVyY2VwdG9yRGF0YUltcGwoCiAgICAgICAgbmF0aXZlRGF0YSwKICAgICAgICBfY29tbW9uRWxlbWVudHMsCiAgICAgICAgaW50ZXJjZXB0ZWRNZW1iZXJzLAogICAgICAgIG1hcC50b0JhY2tlbmRDbGFzc1NldChpbnRlcmNlcHRvckRhdGEuaW50ZXJjZXB0ZWRDbGFzc2VzKSwKICAgICAgICBtYXAudG9CYWNrZW5kQ2xhc3NTZXQoCiAgICAgICAgICAgIGludGVyY2VwdG9yRGF0YS5jbGFzc2VzTWl4ZWRJbnRvSW50ZXJjZXB0ZWRDbGFzc2VzKSk7CiAgfQoKICBSdW50aW1lVHlwZXNOZWVkIF9jb252ZXJ0UnVudGltZVR5cGVzTmVlZChKc1RvRnJvbnRlbmRNYXAgbWFwLAogICAgICBCYWNrZW5kVXNhZ2UgYmFja2VuZFVzYWdlLCBSdW50aW1lVHlwZXNOZWVkSW1wbCBydGlOZWVkKSB7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXNOZWVkaW5nVHlwZUFyZ3VtZW50cyA9CiAgICAgICAgbWFwLnRvQmFja2VuZENsYXNzU2V0KHJ0aU5lZWQuY2xhc3Nlc05lZWRpbmdUeXBlQXJndW1lbnRzKTsKICAgIFNldDxGdW5jdGlvbkVudGl0eT4gbWV0aG9kc05lZWRpbmdUeXBlQXJndW1lbnRzID0KICAgICAgICBtYXAudG9CYWNrZW5kRnVuY3Rpb25TZXQocnRpTmVlZC5tZXRob2RzTmVlZGluZ1R5cGVBcmd1bWVudHMpOwogICAgU2V0PEZ1bmN0aW9uRW50aXR5PiBtZXRob2RzTmVlZGluZ1NpZ25hdHVyZSA9CiAgICAgICAgbWFwLnRvQmFja2VuZEZ1bmN0aW9uU2V0KHJ0aU5lZWQubWV0aG9kc05lZWRpbmdTaWduYXR1cmUpOwogICAgU2V0PFNlbGVjdG9yPiBzZWxlY3RvcnNOZWVkaW5nVHlwZUFyZ3VtZW50cyA9CiAgICAgICAgcnRpTmVlZC5zZWxlY3RvcnNOZWVkaW5nVHlwZUFyZ3VtZW50cy5tYXAoKFNlbGVjdG9yIHNlbGVjdG9yKSB7CiAgICAgIGlmIChzZWxlY3Rvci5tZW1iZXJOYW1lLmlzUHJpdmF0ZSkgewogICAgICAgIHJldHVybiBuZXcgU2VsZWN0b3IoCiAgICAgICAgICAgIHNlbGVjdG9yLmtpbmQsCiAgICAgICAgICAgIG5ldyBQcml2YXRlTmFtZShzZWxlY3Rvci5tZW1iZXJOYW1lLnRleHQsCiAgICAgICAgICAgICAgICBtYXAudG9CYWNrZW5kTGlicmFyeShzZWxlY3Rvci5tZW1iZXJOYW1lLmxpYnJhcnkpLAogICAgICAgICAgICAgICAgaXNTZXR0ZXI6IHNlbGVjdG9yLm1lbWJlck5hbWUuaXNTZXR0ZXIpLAogICAgICAgICAgICBzZWxlY3Rvci5jYWxsU3RydWN0dXJlKTsKICAgICAgfQogICAgICByZXR1cm4gc2VsZWN0b3I7CiAgICB9KS50b1NldCgpOwogICAgcmV0dXJuIG5ldyBSdW50aW1lVHlwZXNOZWVkSW1wbCgKICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LAogICAgICAgIGNsYXNzZXNOZWVkaW5nVHlwZUFyZ3VtZW50cywKICAgICAgICBtZXRob2RzTmVlZGluZ1NpZ25hdHVyZSwKICAgICAgICBtZXRob2RzTmVlZGluZ1R5cGVBcmd1bWVudHMsCiAgICAgICAgbnVsbCwKICAgICAgICBudWxsLAogICAgICAgIHNlbGVjdG9yc05lZWRpbmdUeXBlQXJndW1lbnRzLAogICAgICAgIHJ0aU5lZWQuaW5zdGFudGlhdGlvbnNOZWVkaW5nVHlwZUFyZ3VtZW50cyk7CiAgfQoKICAvLy8gQ29uc3RydWN0IGEgY2xvc3VyZSBjbGFzcyBhbmQgc2V0IHVwIHRoZSBuZWNlc3NhcnkgY2xhc3MgaW5mZXJlbmNlCiAgLy8vIGhpZXJhcmNoeS4KICBLZXJuZWxDbG9zdXJlQ2xhc3NJbmZvIGJ1aWxkQ2xvc3VyZUNsYXNzKAogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyLAogICAgICBpci5GdW5jdGlvbk5vZGUgb3JpZ2luYWxDbG9zdXJlRnVuY3Rpb25Ob2RlLAogICAgICBKTGlicmFyeSBlbmNsb3NpbmdMaWJyYXJ5LAogICAgICBNYXA8TG9jYWwsIEpSZWNvcmRGaWVsZD4gYm94ZWRWYXJpYWJsZXMsCiAgICAgIEtlcm5lbFNjb3BlSW5mbyBpbmZvLAogICAgICBLZXJuZWxUb0xvY2Fsc01hcCBsb2NhbHNNYXAsCiAgICAgIHtib29sIGNyZWF0ZVNpZ25hdHVyZU1ldGhvZH0pIHsKICAgIENsYXNzRW50aXR5IHN1cGVyY2xhc3MgPSBfY29tbW9uRWxlbWVudHMuY2xvc3VyZUNsYXNzOwoKICAgIEtlcm5lbENsb3N1cmVDbGFzc0luZm8gY2xvc3VyZUNsYXNzSW5mbyA9IF9lbGVtZW50TWFwLmNvbnN0cnVjdENsb3N1cmVDbGFzcygKICAgICAgICBtZW1iZXIsCiAgICAgICAgb3JpZ2luYWxDbG9zdXJlRnVuY3Rpb25Ob2RlLAogICAgICAgIGVuY2xvc2luZ0xpYnJhcnksCiAgICAgICAgYm94ZWRWYXJpYWJsZXMsCiAgICAgICAgaW5mbywKICAgICAgICBsb2NhbHNNYXAsCiAgICAgICAgbmV3IEludGVyZmFjZVR5cGUoc3VwZXJjbGFzcywgY29uc3QgW10pLAogICAgICAgIGNyZWF0ZVNpZ25hdHVyZU1ldGhvZDogY3JlYXRlU2lnbmF0dXJlTWV0aG9kKTsKCiAgICAvLyBUZWxsIHRoZSBoaWVyYXJjaHkgdGhhdCB0aGlzIGlzIHRoZSBzdXBlciBjbGFzcy4gdGhlbiB3ZSBjYW4gdXNlCiAgICAvLyAuZ2V0U3VwZXJ0eXBlcyhjbGFzcykKICAgIENsYXNzSGllcmFyY2h5Tm9kZSBwYXJlbnROb2RlID0gX2NsYXNzSGllcmFyY2h5Tm9kZXNbc3VwZXJjbGFzc107CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZSA9IG5ldyBDbGFzc0hpZXJhcmNoeU5vZGUocGFyZW50Tm9kZSwKICAgICAgICBjbG9zdXJlQ2xhc3NJbmZvLmNsb3N1cmVDbGFzc0VudGl0eSwgcGFyZW50Tm9kZS5oaWVyYXJjaHlEZXB0aCArIDEpOwogICAgX2NsYXNzSGllcmFyY2h5Tm9kZXNbY2xvc3VyZUNsYXNzSW5mby5jbG9zdXJlQ2xhc3NFbnRpdHldID0gbm9kZTsKICAgIF9jbGFzc1NldHNbY2xvc3VyZUNsYXNzSW5mby5jbG9zdXJlQ2xhc3NFbnRpdHldID0gbmV3IENsYXNzU2V0KG5vZGUpOwogICAgbm9kZS5pc0RpcmVjdGx5SW5zdGFudGlhdGVkID0gdHJ1ZTsKCiAgICByZXR1cm4gY2xvc3VyZUNsYXNzSW5mbzsKICB9CgogIE91dHB1dFVuaXREYXRhIF9jb252ZXJ0T3V0cHV0VW5pdERhdGEoSnNUb0Zyb250ZW5kTWFwSW1wbCBtYXAsCiAgICAgIE91dHB1dFVuaXREYXRhIGRhdGEsIENsb3N1cmVEYXRhIGNsb3N1cmVEYXRhTG9va3VwKSB7CiAgICAvLyBDb252ZXJ0IGZyb250LWVuZCBtYXBzIGNvbnRhaW5pbmcgSy1jbGFzcyBhbmQgSy1sb2NhbCBmdW5jdGlvbiBrZXlzIHRvIGEKICAgIC8vIGJhY2tlbmQgbWFwIHVzaW5nIEotY2xhc3NlcyBhcyBrZXlzLgogICAgTWFwPENsYXNzRW50aXR5LCBPdXRwdXRVbml0PiBjb252ZXJ0Q2xhc3NNYXAoCiAgICAgICAgTWFwPENsYXNzRW50aXR5LCBPdXRwdXRVbml0PiBjbGFzc01hcCwKICAgICAgICBNYXA8TG9jYWwsIE91dHB1dFVuaXQ+IGxvY2FsRnVuY3Rpb25NYXApIHsKICAgICAgdmFyIHJlc3VsdCA9IDxDbGFzc0VudGl0eSwgT3V0cHV0VW5pdD57fTsKICAgICAgY2xhc3NNYXAuZm9yRWFjaCgoQ2xhc3NFbnRpdHkgZW50aXR5LCBPdXRwdXRVbml0IHVuaXQpIHsKICAgICAgICBDbGFzc0VudGl0eSBiYWNrZW5kRW50aXR5ID0gbWFwLnRvQmFja2VuZENsYXNzKGVudGl0eSk7CiAgICAgICAgaWYgKGJhY2tlbmRFbnRpdHkgIT0gbnVsbCkgewogICAgICAgICAgLy8gSWYgW2VudGl0eV0gaXNuJ3QgdXNlZCBpdCBkb2Vzbid0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGJhY2tlbmQKICAgICAgICAgIC8vIGVudGl0eS4KICAgICAgICAgIHJlc3VsdFtiYWNrZW5kRW50aXR5XSA9IHVuaXQ7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgbG9jYWxGdW5jdGlvbk1hcC5mb3JFYWNoKChMb2NhbCBlbnRpdHksIE91dHB1dFVuaXQgdW5pdCkgewogICAgICAgIC8vIEVuc3VyZSBjbG9zdXJlIGNsYXNzZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQgdW5pdCBjb3JyZXNwb25kaW5nCiAgICAgICAgLy8gdG8gdGhlIGxvY2FsIGZ1bmN0aW9uLgogICAgICAgIGlmIChlbnRpdHkgaXMgS0xvY2FsRnVuY3Rpb24pIHsKICAgICAgICAgIHZhciBjbG9zdXJlSW5mbyA9IGNsb3N1cmVEYXRhTG9va3VwLmdldENsb3N1cmVJbmZvKGVudGl0eS5ub2RlKTsKICAgICAgICAgIHJlc3VsdFtjbG9zdXJlSW5mby5jbG9zdXJlQ2xhc3NFbnRpdHldID0gdW5pdDsKICAgICAgICB9CiAgICAgIH0pOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoKICAgIC8vIENvbnZlcnQgZnJvbnQtZW5kIG1hcHMgY29udGFpbmluZyBLLW1lbWJlciBhbmQgSy1sb2NhbCBmdW5jdGlvbiBrZXlzIHRvCiAgICAvLyBhIGJhY2tlbmQgbWFwIHVzaW5nIEotbWVtYmVycyBhcyBrZXlzLgogICAgTWFwPE1lbWJlckVudGl0eSwgT3V0cHV0VW5pdD4gY29udmVydE1lbWJlck1hcCgKICAgICAgICBNYXA8TWVtYmVyRW50aXR5LCBPdXRwdXRVbml0PiBtZW1iZXJNYXAsCiAgICAgICAgTWFwPExvY2FsLCBPdXRwdXRVbml0PiBsb2NhbEZ1bmN0aW9uTWFwKSB7CiAgICAgIHZhciByZXN1bHQgPSA8TWVtYmVyRW50aXR5LCBPdXRwdXRVbml0Pnt9OwogICAgICBtZW1iZXJNYXAuZm9yRWFjaCgoTWVtYmVyRW50aXR5IGVudGl0eSwgT3V0cHV0VW5pdCB1bml0KSB7CiAgICAgICAgTWVtYmVyRW50aXR5IGJhY2tlbmRFbnRpdHkgPSBtYXAudG9CYWNrZW5kTWVtYmVyKGVudGl0eSk7CiAgICAgICAgaWYgKGJhY2tlbmRFbnRpdHkgIT0gbnVsbCkgewogICAgICAgICAgLy8gSWYgW2VudGl0eV0gaXNuJ3QgdXNlZCBpdCBkb2Vzbid0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGJhY2tlbmQKICAgICAgICAgIC8vIGVudGl0eS4KICAgICAgICAgIHJlc3VsdFtiYWNrZW5kRW50aXR5XSA9IHVuaXQ7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgbG9jYWxGdW5jdGlvbk1hcC5mb3JFYWNoKChMb2NhbCBlbnRpdHksIE91dHB1dFVuaXQgdW5pdCkgewogICAgICAgIC8vIEVuc3VyZSBjbG9zdXJlIGNhbGwtbWV0aG9kcyBhcmUgaW5jbHVkZWQgaW4gdGhlIG91dHB1dCB1bml0CiAgICAgICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgbG9jYWwgZnVuY3Rpb24uCiAgICAgICAgaWYgKGVudGl0eSBpcyBLTG9jYWxGdW5jdGlvbikgewogICAgICAgICAgdmFyIGNsb3N1cmVJbmZvID0gY2xvc3VyZURhdGFMb29rdXAuZ2V0Q2xvc3VyZUluZm8oZW50aXR5Lm5vZGUpOwogICAgICAgICAgcmVzdWx0W2Nsb3N1cmVJbmZvLmNhbGxNZXRob2RdID0gdW5pdDsKICAgICAgICAgIGlmIChjbG9zdXJlSW5mby5zaWduYXR1cmVNZXRob2QgIT0gbnVsbCkgewogICAgICAgICAgICByZXN1bHRbY2xvc3VyZUluZm8uc2lnbmF0dXJlTWV0aG9kXSA9IHVuaXQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICByZXR1cm4gbmV3IE91dHB1dFVuaXREYXRhLmZyb20oCiAgICAgICAgZGF0YSwKICAgICAgICBtYXAudG9CYWNrZW5kTGlicmFyeSwKICAgICAgICBjb252ZXJ0Q2xhc3NNYXAsCiAgICAgICAgY29udmVydE1lbWJlck1hcCwKICAgICAgICAobSkgPT4gY29udmVydE1hcDxDb25zdGFudFZhbHVlLCBPdXRwdXRVbml0LCBPdXRwdXRVbml0PigKICAgICAgICAgICAgbSwgbWFwLnRvQmFja2VuZENvbnN0YW50LCAodikgPT4gdikpOwogIH0KfQoKY2xhc3MgVHJpdmlhbENsb3N1cmVSdGlOZWVkIGltcGxlbWVudHMgQ2xvc3VyZVJ0aU5lZWQgewogIGNvbnN0IFRyaXZpYWxDbG9zdXJlUnRpTmVlZCgpOwoKICBAb3ZlcnJpZGUKICBib29sIGxvY2FsRnVuY3Rpb25OZWVkc1NpZ25hdHVyZShpci5Ob2RlIG5vZGUpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgY2xhc3NOZWVkc1R5cGVBcmd1bWVudHMoQ2xhc3NFbnRpdHkgY2xzKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIG1ldGhvZE5lZWRzVHlwZUFyZ3VtZW50cyhGdW5jdGlvbkVudGl0eSBtZXRob2QpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgbG9jYWxGdW5jdGlvbk5lZWRzVHlwZUFyZ3VtZW50cyhpci5Ob2RlIG5vZGUpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgc2VsZWN0b3JOZWVkc1R5cGVBcmd1bWVudHMoU2VsZWN0b3Igc2VsZWN0b3IpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgbWV0aG9kTmVlZHNTaWduYXR1cmUoTWVtYmVyRW50aXR5IG1ldGhvZCkgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpbnN0YW50aWF0aW9uTmVlZHNUeXBlQXJndW1lbnRzKAogICAgICAgICAgRGFydFR5cGUgZnVuY3Rpb25UeXBlLCBpbnQgdHlwZUFyZ3VtZW50Q291bnQpID0+CiAgICAgIHRydWU7Cn0KCmNsYXNzIEpzQ2xvc3VyZVJ0aU5lZWQgaW1wbGVtZW50cyBDbG9zdXJlUnRpTmVlZCB7CiAgZmluYWwgUnVudGltZVR5cGVzTmVlZCBydGlOZWVkOwogIGZpbmFsIFNldDxpci5Mb2NhbEZ1bmN0aW9uPiBsb2NhbEZ1bmN0aW9uc05vZGVzTmVlZGluZ1R5cGVBcmd1bWVudHM7CiAgZmluYWwgU2V0PGlyLkxvY2FsRnVuY3Rpb24+IGxvY2FsRnVuY3Rpb25zTm9kZXNOZWVkaW5nU2lnbmF0dXJlOwoKICBKc0Nsb3N1cmVSdGlOZWVkKHRoaXMucnRpTmVlZCwgdGhpcy5sb2NhbEZ1bmN0aW9uc05vZGVzTmVlZGluZ1R5cGVBcmd1bWVudHMsCiAgICAgIHRoaXMubG9jYWxGdW5jdGlvbnNOb2Rlc05lZWRpbmdTaWduYXR1cmUpOwoKICBAb3ZlcnJpZGUKICBib29sIGxvY2FsRnVuY3Rpb25OZWVkc1NpZ25hdHVyZShpci5Mb2NhbEZ1bmN0aW9uIG5vZGUpIHsKICAgIHJldHVybiBsb2NhbEZ1bmN0aW9uc05vZGVzTmVlZGluZ1NpZ25hdHVyZS5jb250YWlucyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY2xhc3NOZWVkc1R5cGVBcmd1bWVudHMoQ2xhc3NFbnRpdHkgY2xzKSA9PgogICAgICBydGlOZWVkLmNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKGNscyk7CgogIEBvdmVycmlkZQogIGJvb2wgbWV0aG9kTmVlZHNUeXBlQXJndW1lbnRzKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCkgPT4KICAgICAgcnRpTmVlZC5tZXRob2ROZWVkc1R5cGVBcmd1bWVudHMobWV0aG9kKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBsb2NhbEZ1bmN0aW9uTmVlZHNUeXBlQXJndW1lbnRzKGlyLkxvY2FsRnVuY3Rpb24gbm9kZSkgewogICAgcmV0dXJuIGxvY2FsRnVuY3Rpb25zTm9kZXNOZWVkaW5nVHlwZUFyZ3VtZW50cy5jb250YWlucyhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgc2VsZWN0b3JOZWVkc1R5cGVBcmd1bWVudHMoU2VsZWN0b3Igc2VsZWN0b3IpID0+CiAgICAgIHJ0aU5lZWQuc2VsZWN0b3JOZWVkc1R5cGVBcmd1bWVudHMoc2VsZWN0b3IpOwoKICBAb3ZlcnJpZGUKICBib29sIG1ldGhvZE5lZWRzU2lnbmF0dXJlKE1lbWJlckVudGl0eSBtZXRob2QpID0+CiAgICAgIHJ0aU5lZWQubWV0aG9kTmVlZHNTaWduYXR1cmUobWV0aG9kKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpbnN0YW50aWF0aW9uTmVlZHNUeXBlQXJndW1lbnRzKAogICAgICAgICAgRGFydFR5cGUgZnVuY3Rpb25UeXBlLCBpbnQgdHlwZUFyZ3VtZW50Q291bnQpID0+CiAgICAgIHJ0aU5lZWQuaW5zdGFudGlhdGlvbk5lZWRzVHlwZUFyZ3VtZW50cyhmdW5jdGlvblR5cGUsIHR5cGVBcmd1bWVudENvdW50KTsKfQoKLy8vIE1hcCBmcm9tICdmcm9udGVuZCcgdG8gJ2JhY2tlbmQnIGVsZW1lbnRzLgovLy8KLy8vIEZyb250ZW5kIGVsZW1lbnRzIGFyZSB3aGF0IHdlIHJlYWQgaW4sIHRoZXNlIHR5cGljYWxseSByZXByZXNlbnRzIGNvbmNlcHRzCi8vLyBpbiBEYXJ0LiBCYWNrZW5kIGVsZW1lbnRzIGFyZSB3aGF0IHdlIGdlbmVyYXRlLCB0aGVzZSBtYXkgaW5jbHVkZSBlbGVtZW50cwovLy8gdGhhdCBkbyBub3QgY29ycmVzcG9uZCB0byBhIERhcnQgY29uY2VwdCwgc3VjaCBhcyBjbG9zdXJlIGNsYXNzZXMuCi8vLwovLy8gUXVlcnlpbmcgZm9yIHRoZSBmcm9udGVuZCBlbGVtZW50IGZvciBhIGJhY2tlbmQtb25seSBlbGVtZW50IHRocm93cyBhbgovLy8gZXhjZXB0aW9uLgphYnN0cmFjdCBjbGFzcyBKc1RvRnJvbnRlbmRNYXAgewogIExpYnJhcnlFbnRpdHkgdG9CYWNrZW5kTGlicmFyeShMaWJyYXJ5RW50aXR5IGxpYnJhcnkpOwoKICBDbGFzc0VudGl0eSB0b0JhY2tlbmRDbGFzcyhDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyB0aGUgYmFja2VuZCBtZW1iZXIgY29ycmVzcG9uZGluZyB0byBbbWVtYmVyXS4gSWYgYSBtZW1iZXIgaXNuJ3QKICAvLy8gbGl2ZSwgaXQgZG9lc24ndCBoYXZlIGEgY29ycmVzcG9uZGluZyBiYWNrZW5kIG1lbWJlciBhbmQgYG51bGxgIGlzCiAgLy8vIHJldHVybmVkIGluc3RlYWQuCiAgTWVtYmVyRW50aXR5IHRvQmFja2VuZE1lbWJlcihNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgRGFydFR5cGUgdG9CYWNrZW5kVHlwZShEYXJ0VHlwZSB0eXBlLCB7Ym9vbCBhbGxvd0ZyZWVWYXJpYWJsZXM6IGZhbHNlfSk7CgogIENvbnN0YW50VmFsdWUgdG9CYWNrZW5kQ29uc3RhbnQoQ29uc3RhbnRWYWx1ZSB2YWx1ZSwge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICBTZXQ8TGlicmFyeUVudGl0eT4gdG9CYWNrZW5kTGlicmFyeVNldChJdGVyYWJsZTxMaWJyYXJ5RW50aXR5PiBzZXQpIHsKICAgIHJldHVybiBzZXQubWFwKHRvQmFja2VuZExpYnJhcnkpLnRvU2V0KCk7CiAgfQoKICBTZXQ8Q2xhc3NFbnRpdHk+IHRvQmFja2VuZENsYXNzU2V0KEl0ZXJhYmxlPENsYXNzRW50aXR5PiBzZXQpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEZpbHRlciB1bnVzZWQgY2xhc3Nlcy4KICAgIHJldHVybiBzZXQubWFwKHRvQmFja2VuZENsYXNzKS50b1NldCgpOwogIH0KCiAgU2V0PE1lbWJlckVudGl0eT4gdG9CYWNrZW5kTWVtYmVyU2V0KEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gc2V0KSB7CiAgICByZXR1cm4gc2V0Lm1hcCh0b0JhY2tlbmRNZW1iZXIpLndoZXJlKChNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgIC8vIE1lbWJlcnMgdGhhdCBhcmUgbm90IGxpdmUgZG9uJ3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgYmFja2VuZCBtZW1iZXIuCiAgICAgIHJldHVybiBtZW1iZXIgIT0gbnVsbDsKICAgIH0pLnRvU2V0KCk7CiAgfQoKICBTZXQ8RmllbGRFbnRpdHk+IHRvQmFja2VuZEZpZWxkU2V0KEl0ZXJhYmxlPEZpZWxkRW50aXR5PiBzZXQpIHsKICAgIFNldDxGaWVsZEVudGl0eT4gbmV3U2V0ID0gbmV3IFNldDxGaWVsZEVudGl0eT4oKTsKICAgIGZvciAoRmllbGRFbnRpdHkgZWxlbWVudCBpbiBzZXQpIHsKICAgICAgRmllbGRFbnRpdHkgYmFja2VuZEZpZWxkID0gdG9CYWNrZW5kTWVtYmVyKGVsZW1lbnQpOwogICAgICBpZiAoYmFja2VuZEZpZWxkICE9IG51bGwpIHsKICAgICAgICAvLyBNZW1iZXJzIHRoYXQgYXJlIG5vdCBsaXZlIGRvbid0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGJhY2tlbmQgbWVtYmVyLgogICAgICAgIG5ld1NldC5hZGQoYmFja2VuZEZpZWxkKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ld1NldDsKICB9CgogIFNldDxGdW5jdGlvbkVudGl0eT4gdG9CYWNrZW5kRnVuY3Rpb25TZXQoSXRlcmFibGU8RnVuY3Rpb25FbnRpdHk+IHNldCkgewogICAgU2V0PEZ1bmN0aW9uRW50aXR5PiBuZXdTZXQgPSBuZXcgU2V0PEZ1bmN0aW9uRW50aXR5PigpOwogICAgZm9yIChGdW5jdGlvbkVudGl0eSBlbGVtZW50IGluIHNldCkgewogICAgICBGdW5jdGlvbkVudGl0eSBiYWNrZW5kRnVuY3Rpb24gPSB0b0JhY2tlbmRNZW1iZXIoZWxlbWVudCk7CiAgICAgIGlmIChiYWNrZW5kRnVuY3Rpb24gIT0gbnVsbCkgewogICAgICAgIC8vIE1lbWJlcnMgdGhhdCBhcmUgbm90IGxpdmUgZG9uJ3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgYmFja2VuZCBtZW1iZXIuCiAgICAgICAgbmV3U2V0LmFkZChiYWNrZW5kRnVuY3Rpb24pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3U2V0OwogIH0KCiAgTWFwPExpYnJhcnlFbnRpdHksIFY+IHRvQmFja2VuZExpYnJhcnlNYXA8Vj4oCiAgICAgIE1hcDxMaWJyYXJ5RW50aXR5LCBWPiBtYXAsIFYgY29udmVydChWIHZhbHVlKSkgewogICAgcmV0dXJuIGNvbnZlcnRNYXAobWFwLCB0b0JhY2tlbmRMaWJyYXJ5LCBjb252ZXJ0KTsKICB9CgogIE1hcDxDbGFzc0VudGl0eSwgVj4gdG9CYWNrZW5kQ2xhc3NNYXA8Vj4oCiAgICAgIE1hcDxDbGFzc0VudGl0eSwgVj4gbWFwLCBWIGNvbnZlcnQoViB2YWx1ZSkpIHsKICAgIHJldHVybiBjb252ZXJ0TWFwKG1hcCwgdG9CYWNrZW5kQ2xhc3MsIGNvbnZlcnQpOwogIH0KCiAgTWFwPE1lbWJlckVudGl0eSwgVjI+IHRvQmFja2VuZE1lbWJlck1hcDxWMSwgVjI+KAogICAgICBNYXA8TWVtYmVyRW50aXR5LCBWMT4gbWFwLCBWMiBjb252ZXJ0KFYxIHZhbHVlKSkgewogICAgcmV0dXJuIGNvbnZlcnRNYXAobWFwLCB0b0JhY2tlbmRNZW1iZXIsIGNvbnZlcnQpOwogIH0KfQoKRSBpZGVudGl0eTxFPihFIGVsZW1lbnQpID0+IGVsZW1lbnQ7CgpNYXA8SywgVjI+IGNvbnZlcnRNYXA8SywgVjEsIFYyPigKICAgIE1hcDxLLCBWMT4gbWFwLCBLIGNvbnZlcnRLZXkoSyBrZXkpLCBWMiBjb252ZXJ0VmFsdWUoVjEgdmFsdWUpKSB7CiAgTWFwPEssIFYyPiBuZXdNYXAgPSA8SywgVjI+e307CiAgbWFwLmZvckVhY2goKEsga2V5LCBWMSB2YWx1ZSkgewogICAgSyBuZXdLZXkgPSBjb252ZXJ0S2V5KGtleSk7CiAgICBWMiBuZXdWYWx1ZSA9IGNvbnZlcnRWYWx1ZSh2YWx1ZSk7CiAgICBpZiAobmV3S2V5ICE9IG51bGwgJiYgbmV3VmFsdWUgIT0gbnVsbCkgewogICAgICAvLyBFbnRpdGllcyB0aGF0IGFyZSBub3QgdXNlZCBkb24ndCBoYXZlIGEgY29ycmVzcG9uZGluZyBiYWNrZW5kIGVudGl0eS4KICAgICAgbmV3TWFwW25ld0tleV0gPSBuZXdWYWx1ZTsKICAgIH0KICB9KTsKICByZXR1cm4gbmV3TWFwOwp9CgpjbGFzcyBKc1RvRnJvbnRlbmRNYXBJbXBsIGV4dGVuZHMgSnNUb0Zyb250ZW5kTWFwIHsKICBmaW5hbCBKc0tlcm5lbFRvRWxlbWVudE1hcCBfYmFja2VuZDsKCiAgSnNUb0Zyb250ZW5kTWFwSW1wbCh0aGlzLl9iYWNrZW5kKTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdG9CYWNrZW5kVHlwZShEYXJ0VHlwZSB0eXBlLCB7Ym9vbCBhbGxvd0ZyZWVWYXJpYWJsZXM6IGZhbHNlfSkgPT4KICAgICAgdHlwZSA9PSBudWxsCiAgICAgICAgICA/IG51bGwKICAgICAgICAgIDogbmV3IF9UeXBlQ29udmVydGVyKGFsbG93RnJlZVZhcmlhYmxlczogYWxsb3dGcmVlVmFyaWFibGVzKQogICAgICAgICAgICAgIC52aXNpdCh0eXBlLCB0b0JhY2tlbmRFbnRpdHkpOwoKICBFbnRpdHkgdG9CYWNrZW5kRW50aXR5KEVudGl0eSBlbnRpdHkpIHsKICAgIGlmIChlbnRpdHkgaXMgQ2xhc3NFbnRpdHkpIHJldHVybiB0b0JhY2tlbmRDbGFzcyhlbnRpdHkpOwogICAgaWYgKGVudGl0eSBpcyBNZW1iZXJFbnRpdHkpIHJldHVybiB0b0JhY2tlbmRNZW1iZXIoZW50aXR5KTsKICAgIGlmIChlbnRpdHkgaXMgVHlwZWRlZkVudGl0eSkgcmV0dXJuIHRvQmFja2VuZFR5cGVkZWYoZW50aXR5KTsKICAgIGlmIChlbnRpdHkgaXMgVHlwZVZhcmlhYmxlRW50aXR5KSB7CiAgICAgIHJldHVybiB0b0JhY2tlbmRUeXBlVmFyaWFibGUoZW50aXR5KTsKICAgIH0KICAgIGFzc2VydChlbnRpdHkgaXMgTGlicmFyeUVudGl0eSwgJ3VuZXhwZWN0ZWQgZW50aXR5ICR7ZW50aXR5LnJ1bnRpbWVUeXBlfScpOwogICAgcmV0dXJuIHRvQmFja2VuZExpYnJhcnkoZW50aXR5KTsKICB9CgogIEBvdmVycmlkZQogIExpYnJhcnlFbnRpdHkgdG9CYWNrZW5kTGlicmFyeShjb3ZhcmlhbnQgSW5kZXhlZExpYnJhcnkgbGlicmFyeSkgewogICAgcmV0dXJuIF9iYWNrZW5kLmxpYnJhcmllcy5nZXRFbnRpdHkobGlicmFyeS5saWJyYXJ5SW5kZXgpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgdG9CYWNrZW5kQ2xhc3MoY292YXJpYW50IEluZGV4ZWRDbGFzcyBjbHMpIHsKICAgIHJldHVybiBfYmFja2VuZC5jbGFzc2VzLmdldEVudGl0eShjbHMuY2xhc3NJbmRleCk7CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXJFbnRpdHkgdG9CYWNrZW5kTWVtYmVyKGNvdmFyaWFudCBJbmRleGVkTWVtYmVyIG1lbWJlcikgewogICAgcmV0dXJuIF9iYWNrZW5kLm1lbWJlcnMuZ2V0RW50aXR5KG1lbWJlci5tZW1iZXJJbmRleCk7CiAgfQoKICBUeXBlZGVmRW50aXR5IHRvQmFja2VuZFR5cGVkZWYoY292YXJpYW50IEluZGV4ZWRUeXBlZGVmIHR5cGVkZWYpIHsKICAgIHJldHVybiBfYmFja2VuZC50eXBlZGVmcy5nZXRFbnRpdHkodHlwZWRlZi50eXBlZGVmSW5kZXgpOwogIH0KCiAgVHlwZVZhcmlhYmxlRW50aXR5IHRvQmFja2VuZFR5cGVWYXJpYWJsZShUeXBlVmFyaWFibGVFbnRpdHkgdHlwZVZhcmlhYmxlKSB7CiAgICBpZiAodHlwZVZhcmlhYmxlIGlzIEtMb2NhbFR5cGVWYXJpYWJsZSkgewogICAgICBmYWlsZWRBdCgKICAgICAgICAgIHR5cGVWYXJpYWJsZSwgIkxvY2FsIGZ1bmN0aW9uIHR5cGUgdmFyaWFibGVzIGFyZSBub3Qgc3VwcG9ydGVkLiIpOwogICAgfQogICAgSW5kZXhlZFR5cGVWYXJpYWJsZSBpbmRleGVkVHlwZVZhcmlhYmxlID0gdHlwZVZhcmlhYmxlOwogICAgcmV0dXJuIF9iYWNrZW5kLnR5cGVWYXJpYWJsZXMKICAgICAgICAuZ2V0RW50aXR5KGluZGV4ZWRUeXBlVmFyaWFibGUudHlwZVZhcmlhYmxlSW5kZXgpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB0b0JhY2tlbmRDb25zdGFudChDb25zdGFudFZhbHVlIGNvbnN0YW50LAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKGNvbnN0YW50ID09IG51bGwpIHsKICAgICAgaWYgKCFhbGxvd051bGwpIHsKICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignTnVsbCBub3QgYWxsb3dlZCBhcyBjb25zdGFudCB2YWx1ZS4nKTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHJldHVybiBjb25zdGFudC5hY2NlcHQobmV3IF9Db25zdGFudENvbnZlcnRlcih0b0JhY2tlbmRFbnRpdHkpLCBudWxsKTsKICB9Cn0KCnR5cGVkZWYgRW50aXR5IF9FbnRpdHlDb252ZXJ0ZXIoRW50aXR5IGNscyk7CgpjbGFzcyBfVHlwZUNvbnZlcnRlciBpbXBsZW1lbnRzIERhcnRUeXBlVmlzaXRvcjxEYXJ0VHlwZSwgX0VudGl0eUNvbnZlcnRlcj4gewogIGZpbmFsIGJvb2wgYWxsb3dGcmVlVmFyaWFibGVzOwoKICBNYXA8RnVuY3Rpb25UeXBlVmFyaWFibGUsIEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBfZnVuY3Rpb25UeXBlVmFyaWFibGVzID0KICAgICAgPEZ1bmN0aW9uVHlwZVZhcmlhYmxlLCBGdW5jdGlvblR5cGVWYXJpYWJsZT57fTsKCiAgX1R5cGVDb252ZXJ0ZXIoe3RoaXMuYWxsb3dGcmVlVmFyaWFibGVzOiBmYWxzZX0pOwoKICBMaXN0PERhcnRUeXBlPiBjb252ZXJ0VHlwZXMoCiAgICAgICAgICBMaXN0PERhcnRUeXBlPiB0eXBlcywgX0VudGl0eUNvbnZlcnRlciBjb252ZXJ0ZXIpID0+CiAgICAgIHZpc2l0TGlzdCh0eXBlcywgY29udmVydGVyKTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXQoRGFydFR5cGUgdHlwZSwgX0VudGl0eUNvbnZlcnRlciBjb252ZXJ0ZXIpIHsKICAgIHJldHVybiB0eXBlLmFjY2VwdCh0aGlzLCBjb252ZXJ0ZXIpOwogIH0KCiAgTGlzdDxEYXJ0VHlwZT4gdmlzaXRMaXN0KExpc3Q8RGFydFR5cGU+IHR5cGVzLCBfRW50aXR5Q29udmVydGVyIGNvbnZlcnRlcikgewogICAgTGlzdDxEYXJ0VHlwZT4gbGlzdCA9IDxEYXJ0VHlwZT5bXTsKICAgIGZvciAoRGFydFR5cGUgdHlwZSBpbiB0eXBlcykgewogICAgICBsaXN0LmFkZCh2aXNpdCh0eXBlLCBjb252ZXJ0ZXIpKTsKICAgIH0KICAgIHJldHVybiBsaXN0OwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXREeW5hbWljVHlwZShEeW5hbWljVHlwZSB0eXBlLCBfRW50aXR5Q29udmVydGVyIGNvbnZlcnRlcikgewogICAgcmV0dXJuIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdEFueVR5cGUoQW55VHlwZSB0eXBlLCBfRW50aXR5Q29udmVydGVyIGNvbnZlcnRlcikgPT4KICAgICAgY29uc3QgQW55VHlwZSgpOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdEludGVyZmFjZVR5cGUoSW50ZXJmYWNlVHlwZSB0eXBlLCBfRW50aXR5Q29udmVydGVyIGNvbnZlcnRlcikgewogICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlKAogICAgICAgIGNvbnZlcnRlcih0eXBlLmVsZW1lbnQpLCB2aXNpdExpc3QodHlwZS50eXBlQXJndW1lbnRzLCBjb252ZXJ0ZXIpKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0VHlwZWRlZlR5cGUoVHlwZWRlZlR5cGUgdHlwZSwgX0VudGl0eUNvbnZlcnRlciBjb252ZXJ0ZXIpIHsKICAgIHJldHVybiBuZXcgVHlwZWRlZlR5cGUoCiAgICAgICAgY29udmVydGVyKHR5cGUuZWxlbWVudCksCiAgICAgICAgdmlzaXRMaXN0KHR5cGUudHlwZUFyZ3VtZW50cywgY29udmVydGVyKSwKICAgICAgICB2aXNpdCh0eXBlLnVuYWxpYXNlZCwgY29udmVydGVyKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdFR5cGVWYXJpYWJsZVR5cGUoCiAgICAgIFR5cGVWYXJpYWJsZVR5cGUgdHlwZSwgX0VudGl0eUNvbnZlcnRlciBjb252ZXJ0ZXIpIHsKICAgIHJldHVybiBuZXcgVHlwZVZhcmlhYmxlVHlwZShjb252ZXJ0ZXIodHlwZS5lbGVtZW50KSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdEZ1bmN0aW9uVHlwZShGdW5jdGlvblR5cGUgdHlwZSwgX0VudGl0eUNvbnZlcnRlciBjb252ZXJ0ZXIpIHsKICAgIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IHR5cGVWYXJpYWJsZXMgPSA8RnVuY3Rpb25UeXBlVmFyaWFibGU+W107CiAgICBmb3IgKEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHR5cGVWYXJpYWJsZSBpbiB0eXBlLnR5cGVWYXJpYWJsZXMpIHsKICAgICAgdHlwZVZhcmlhYmxlcy5hZGQoX2Z1bmN0aW9uVHlwZVZhcmlhYmxlc1t0eXBlVmFyaWFibGVdID0KICAgICAgICAgIG5ldyBGdW5jdGlvblR5cGVWYXJpYWJsZSh0eXBlVmFyaWFibGUuaW5kZXgpKTsKICAgIH0KICAgIGZvciAoRnVuY3Rpb25UeXBlVmFyaWFibGUgdHlwZVZhcmlhYmxlIGluIHR5cGUudHlwZVZhcmlhYmxlcykgewogICAgICBfZnVuY3Rpb25UeXBlVmFyaWFibGVzW3R5cGVWYXJpYWJsZV0uYm91bmQgPSB0eXBlVmFyaWFibGUuYm91bmQgIT0gbnVsbAogICAgICAgICAgPyB2aXNpdCh0eXBlVmFyaWFibGUuYm91bmQsIGNvbnZlcnRlcikKICAgICAgICAgIDogbnVsbDsKICAgIH0KICAgIERhcnRUeXBlIHJldHVyblR5cGUgPSB2aXNpdCh0eXBlLnJldHVyblR5cGUsIGNvbnZlcnRlcik7CiAgICBMaXN0PERhcnRUeXBlPiBwYXJhbWV0ZXJUeXBlcyA9IHZpc2l0TGlzdCh0eXBlLnBhcmFtZXRlclR5cGVzLCBjb252ZXJ0ZXIpOwogICAgTGlzdDxEYXJ0VHlwZT4gb3B0aW9uYWxQYXJhbWV0ZXJUeXBlcyA9CiAgICAgICAgdmlzaXRMaXN0KHR5cGUub3B0aW9uYWxQYXJhbWV0ZXJUeXBlcywgY29udmVydGVyKTsKICAgIExpc3Q8RGFydFR5cGU+IG5hbWVkUGFyYW1ldGVyVHlwZXMgPQogICAgICAgIHZpc2l0TGlzdCh0eXBlLm5hbWVkUGFyYW1ldGVyVHlwZXMsIGNvbnZlcnRlcik7CiAgICBmb3IgKEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHR5cGVWYXJpYWJsZSBpbiB0eXBlLnR5cGVWYXJpYWJsZXMpIHsKICAgICAgX2Z1bmN0aW9uVHlwZVZhcmlhYmxlcy5yZW1vdmUodHlwZVZhcmlhYmxlKTsKICAgIH0KICAgIHJldHVybiBuZXcgRnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIHBhcmFtZXRlclR5cGVzLCBvcHRpb25hbFBhcmFtZXRlclR5cGVzLAogICAgICAgIHR5cGUubmFtZWRQYXJhbWV0ZXJzLCBuYW1lZFBhcmFtZXRlclR5cGVzLCB0eXBlVmFyaWFibGVzKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0RnVuY3Rpb25UeXBlVmFyaWFibGUoCiAgICAgIEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHR5cGUsIF9FbnRpdHlDb252ZXJ0ZXIgY29udmVydGVyKSB7CiAgICBEYXJ0VHlwZSByZXN1bHQgPSBfZnVuY3Rpb25UeXBlVmFyaWFibGVzW3R5cGVdOwogICAgaWYgKHJlc3VsdCA9PSBudWxsICYmIGFsbG93RnJlZVZhcmlhYmxlcykgewogICAgICByZXR1cm4gdHlwZTsKICAgIH0KICAgIGFzc2VydChyZXN1bHQgIT0gbnVsbCwKICAgICAgICAiRnVuY3Rpb24gdHlwZSB2YXJpYWJsZSAkdHlwZSBub3QgZm91bmQgaW4gJF9mdW5jdGlvblR5cGVWYXJpYWJsZXMiKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdFZvaWRUeXBlKFZvaWRUeXBlIHR5cGUsIF9FbnRpdHlDb252ZXJ0ZXIgY29udmVydGVyKSB7CiAgICByZXR1cm4gY29uc3QgVm9pZFR5cGUoKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0RnV0dXJlT3JUeXBlKEZ1dHVyZU9yVHlwZSB0eXBlLCBfRW50aXR5Q29udmVydGVyIGNvbnZlcnRlcikgewogICAgcmV0dXJuIG5ldyBGdXR1cmVPclR5cGUodmlzaXQodHlwZS50eXBlQXJndW1lbnQsIGNvbnZlcnRlcikpOwogIH0KfQoKY2xhc3MgX0NvbnN0YW50Q29udmVydGVyIGltcGxlbWVudHMgQ29uc3RhbnRWYWx1ZVZpc2l0b3I8Q29uc3RhbnRWYWx1ZSwgTnVsbD4gewogIGZpbmFsIEVudGl0eSBGdW5jdGlvbihFbnRpdHkpIHRvQmFja2VuZEVudGl0eTsKICBmaW5hbCBfVHlwZUNvbnZlcnRlciB0eXBlQ29udmVydGVyOwoKICBfQ29uc3RhbnRDb252ZXJ0ZXIodGhpcy50b0JhY2tlbmRFbnRpdHkpCiAgICAgIDogdHlwZUNvbnZlcnRlciA9IG5ldyBfVHlwZUNvbnZlcnRlcigpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0TnVsbChOdWxsQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgXykgPT4gY29uc3RhbnQ7CiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdEludChJbnRDb25zdGFudFZhbHVlIGNvbnN0YW50LCBfKSA9PiBjb25zdGFudDsKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0RG91YmxlKERvdWJsZUNvbnN0YW50VmFsdWUgY29uc3RhbnQsIF8pID0+IGNvbnN0YW50OwogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRCb29sKEJvb2xDb25zdGFudFZhbHVlIGNvbnN0YW50LCBfKSA9PiBjb25zdGFudDsKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0U3RyaW5nKFN0cmluZ0NvbnN0YW50VmFsdWUgY29uc3RhbnQsIF8pID0+IGNvbnN0YW50OwogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXREdW1teUludGVyY2VwdG9yKAogICAgICAgICAgRHVtbXlJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgY29uc3RhbnQsIF8pID0+CiAgICAgIGNvbnN0YW50OwogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRVbnJlYWNoYWJsZShVbnJlYWNoYWJsZUNvbnN0YW50VmFsdWUgY29uc3RhbnQsIF8pID0+CiAgICAgIGNvbnN0YW50OwogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRKc05hbWUoSnNOYW1lQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgXykgPT4gY29uc3RhbnQ7CiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdE5vbkNvbnN0YW50KE5vbkNvbnN0YW50VmFsdWUgY29uc3RhbnQsIF8pID0+IGNvbnN0YW50OwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0RnVuY3Rpb24oRnVuY3Rpb25Db25zdGFudFZhbHVlIGNvbnN0YW50LCBfKSB7CiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZSh0b0JhY2tlbmRFbnRpdHkoY29uc3RhbnQuZWxlbWVudCksCiAgICAgICAgdHlwZUNvbnZlcnRlci52aXNpdChjb25zdGFudC50eXBlLCB0b0JhY2tlbmRFbnRpdHkpKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRMaXN0KExpc3RDb25zdGFudFZhbHVlIGNvbnN0YW50LCBfKSB7CiAgICBEYXJ0VHlwZSB0eXBlID0gdHlwZUNvbnZlcnRlci52aXNpdChjb25zdGFudC50eXBlLCB0b0JhY2tlbmRFbnRpdHkpOwogICAgTGlzdDxDb25zdGFudFZhbHVlPiBlbnRyaWVzID0gX2hhbmRsZVZhbHVlcyhjb25zdGFudC5lbnRyaWVzKTsKICAgIGlmIChpZGVudGljYWwoZW50cmllcywgY29uc3RhbnQuZW50cmllcykgJiYgdHlwZSA9PSBjb25zdGFudC50eXBlKSB7CiAgICAgIHJldHVybiBjb25zdGFudDsKICAgIH0KICAgIHJldHVybiBuZXcgTGlzdENvbnN0YW50VmFsdWUodHlwZSwgZW50cmllcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0U2V0KAogICAgICBjb3ZhcmlhbnQgY29uc3RhbnRfc3lzdGVtLkphdmFTY3JpcHRTZXRDb25zdGFudCBjb25zdGFudCwgXykgewogICAgRGFydFR5cGUgdHlwZSA9IHR5cGVDb252ZXJ0ZXIudmlzaXQoY29uc3RhbnQudHlwZSwgdG9CYWNrZW5kRW50aXR5KTsKICAgIE1hcENvbnN0YW50VmFsdWUgZW50cmllcyA9IGNvbnN0YW50LmVudHJpZXMuYWNjZXB0KHRoaXMsIG51bGwpOwogICAgaWYgKGlkZW50aWNhbChlbnRyaWVzLCBjb25zdGFudC5lbnRyaWVzKSAmJiB0eXBlID09IGNvbnN0YW50LnR5cGUpIHsKICAgICAgcmV0dXJuIGNvbnN0YW50OwogICAgfQogICAgcmV0dXJuIG5ldyBjb25zdGFudF9zeXN0ZW0uSmF2YVNjcmlwdFNldENvbnN0YW50KHR5cGUsIGVudHJpZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdE1hcCgKICAgICAgY292YXJpYW50IGNvbnN0YW50X3N5c3RlbS5KYXZhU2NyaXB0TWFwQ29uc3RhbnQgY29uc3RhbnQsIF8pIHsKICAgIERhcnRUeXBlIHR5cGUgPSB0eXBlQ29udmVydGVyLnZpc2l0KGNvbnN0YW50LnR5cGUsIHRvQmFja2VuZEVudGl0eSk7CiAgICBMaXN0Q29uc3RhbnRWYWx1ZSBrZXlzID0gY29uc3RhbnQua2V5TGlzdC5hY2NlcHQodGhpcywgbnVsbCk7CiAgICBMaXN0PENvbnN0YW50VmFsdWU+IHZhbHVlcyA9IF9oYW5kbGVWYWx1ZXMoY29uc3RhbnQudmFsdWVzKTsKICAgIENvbnN0YW50VmFsdWUgcHJvdG9WYWx1ZSA9IGNvbnN0YW50LnByb3RvVmFsdWU/LmFjY2VwdCh0aGlzLCBudWxsKTsKICAgIGlmIChpZGVudGljYWwoa2V5cywgY29uc3RhbnQua2V5cykgJiYKICAgICAgICBpZGVudGljYWwodmFsdWVzLCBjb25zdGFudC52YWx1ZXMpICYmCiAgICAgICAgdHlwZSA9PSBjb25zdGFudC50eXBlICYmCiAgICAgICAgcHJvdG9WYWx1ZSA9PSBjb25zdGFudC5wcm90b1ZhbHVlKSB7CiAgICAgIHJldHVybiBjb25zdGFudDsKICAgIH0KICAgIHJldHVybiBuZXcgY29uc3RhbnRfc3lzdGVtLkphdmFTY3JpcHRNYXBDb25zdGFudCgKICAgICAgICB0eXBlLCBrZXlzLCB2YWx1ZXMsIHByb3RvVmFsdWUsIGNvbnN0YW50Lm9ubHlTdHJpbmdLZXlzKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRDb25zdHJ1Y3RlZChDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUgY29uc3RhbnQsIF8pIHsKICAgIERhcnRUeXBlIHR5cGUgPSB0eXBlQ29udmVydGVyLnZpc2l0KGNvbnN0YW50LnR5cGUsIHRvQmFja2VuZEVudGl0eSk7CiAgICBNYXA8RmllbGRFbnRpdHksIENvbnN0YW50VmFsdWU+IGZpZWxkcyA9IHt9OwogICAgY29uc3RhbnQuZmllbGRzLmZvckVhY2goKGYsIHYpIHsKICAgICAgRmllbGRFbnRpdHkgYmFja2VuZEZpZWxkID0gdG9CYWNrZW5kRW50aXR5KGYpOwogICAgICBhc3NlcnQoYmFja2VuZEZpZWxkICE9IG51bGwsICJObyBiYWNrZW5kIGZpZWxkIGZvciAkZi4iKTsKICAgICAgZmllbGRzW2JhY2tlbmRGaWVsZF0gPSB2LmFjY2VwdCh0aGlzLCBudWxsKTsKICAgIH0pOwogICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUodHlwZSwgZmllbGRzKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRUeXBlKFR5cGVDb25zdGFudFZhbHVlIGNvbnN0YW50LCBfKSB7CiAgICBEYXJ0VHlwZSB0eXBlID0gdHlwZUNvbnZlcnRlci52aXNpdChjb25zdGFudC50eXBlLCB0b0JhY2tlbmRFbnRpdHkpOwogICAgRGFydFR5cGUgcmVwcmVzZW50ZWRUeXBlID0KICAgICAgICB0eXBlQ29udmVydGVyLnZpc2l0KGNvbnN0YW50LnJlcHJlc2VudGVkVHlwZSwgdG9CYWNrZW5kRW50aXR5KTsKICAgIGlmICh0eXBlID09IGNvbnN0YW50LnR5cGUgJiYgcmVwcmVzZW50ZWRUeXBlID09IGNvbnN0YW50LnJlcHJlc2VudGVkVHlwZSkgewogICAgICByZXR1cm4gY29uc3RhbnQ7CiAgICB9CiAgICByZXR1cm4gbmV3IFR5cGVDb25zdGFudFZhbHVlKHJlcHJlc2VudGVkVHlwZSwgdHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0SW50ZXJjZXB0b3IoSW50ZXJjZXB0b3JDb25zdGFudFZhbHVlIGNvbnN0YW50LCBfKSB7CiAgICAvLyBJbnRlcmNlcHRvciBjb25zdGFudHMgYXJlIG9ubHkgY3JlYXRlZCBpbiB0aGUgU1NBIGdyYXBoIGJ1aWxkZXIuCiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiVW5leHBlY3RlZCB2aXNpdEludGVyY2VwdG9yICR7Y29uc3RhbnQudG9TdHJ1Y3R1cmVkVGV4dCgpfSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdERlZmVycmVkR2xvYmFsKERlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgXykgewogICAgLy8gRGVmZXJyZWQgZ2xvYmFsIGNvbnN0YW50cyBhcmUgb25seSBjcmVhdGVkIGluIHRoZSBTU0EgZ3JhcGggYnVpbGRlci4KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJVbmV4cGVjdGVkIERlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZSAke2NvbnN0YW50LnRvU3RydWN0dXJlZFRleHQoKX0iKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRJbnN0YW50aWF0aW9uKEluc3RhbnRpYXRpb25Db25zdGFudFZhbHVlIGNvbnN0YW50LCBfKSB7CiAgICBDb25zdGFudFZhbHVlIGZ1bmN0aW9uID0gY29uc3RhbnQuZnVuY3Rpb24uYWNjZXB0KHRoaXMsIG51bGwpOwogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9CiAgICAgICAgdHlwZUNvbnZlcnRlci5jb252ZXJ0VHlwZXMoY29uc3RhbnQudHlwZUFyZ3VtZW50cywgdG9CYWNrZW5kRW50aXR5KTsKICAgIHJldHVybiBuZXcgSW5zdGFudGlhdGlvbkNvbnN0YW50VmFsdWUodHlwZUFyZ3VtZW50cywgZnVuY3Rpb24pOwogIH0KCiAgTGlzdDxDb25zdGFudFZhbHVlPiBfaGFuZGxlVmFsdWVzKExpc3Q8Q29uc3RhbnRWYWx1ZT4gdmFsdWVzKSB7CiAgICBMaXN0PENvbnN0YW50VmFsdWU+IHJlc3VsdDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciB2YWx1ZSA9IHZhbHVlc1tpXTsKICAgICAgdmFyIG5ld1ZhbHVlID0gdmFsdWUuYWNjZXB0KHRoaXMsIG51bGwpOwogICAgICBpZiAobmV3VmFsdWUgIT0gdmFsdWUgJiYgcmVzdWx0ID09IG51bGwpIHsKICAgICAgICByZXN1bHQgPSB2YWx1ZXMuc3VibGlzdCgwLCBpKS50b0xpc3QoKTsKICAgICAgfQogICAgICByZXN1bHQ/LmFkZChuZXdWYWx1ZSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0ID8/IHZhbHVlczsKICB9Cn0Kg8gATk48ASgBGhkiPyMgJCMhITEdKSssLik1NiMiGislIygkGBcYGyAYFgEdKkQkSyowIjYBQE0BUEQBJCA6KEABID1NKSZPAUIBRTRMNjElCE4nJ0MKTQpIRBYGAUkqMjouTzZETi4KHAoGAR9HLUQlIAEsQQEzTQFGH04BMEUBKT4BKUIBHgE7HStNPxA7KRgNQEInKD00NwhGJyhBNDsIASZGPxA7IBg3NBgBTUskPwhRTyg/CEwrNAEaBgFNQkVCTgEnOQFKSFEBJEMBSyUfSQEeFRQZFhEbGhwbSVEbNyEaEyYgSyAZGhUYFwQBJTw1Sy9FLkQpPypLIR86OxABIUA6Mi4sPSo7OSo/Mz0yBAErQjopJzk5CDRPMEsxSjFMJB0sHBwaIxsEASE4Jh5LS09CCCMTBgFEOQE1SAg5TAgBQDg6OCwaBgFQATFHPywkREIjShNPCAhAIEhBIEkfGRoeISMEAT9EOCcnPEIIJBQZHEMfQgQBQUEzRDZHMkMySCsdGzZDOSUIFxAlHSUhJQ4OJzUEAUkRLBszIS8cIyY7AVEQJRoYDhMxNwFIHUZBTUZKKAEdBAFBPFAsMi8zMD9AJUwVKAoKQVAiKEs5CgoVBgFPLjQxMzFBQiVMFSgKCkFHMChLMTU4DAoKFQYBJA4eGRpCMgQCATghAQw6AQw5AQxAAQw+AQw+AQw6AQwoOwwCATMiR0MBTzEBDDw/BAEMMywBDDowAQxAQwQBDDg0AQw0LAEMKDtQAgEvBE9PRwRLDyE5AS8BTkkYNQFLAVEBSC4EAUIzLAQBRUJOHRAEAUI2JzsiUCIIBhMEAUs8KkElUCUIBhMEATA3NwQBLDU1BAE0OTYEAgElASJGISIgJy5PIQYGEQIBNCcBJgEMTRMRRy0BKj5AQigsBlAlBAEMRT8EAQw7NwQBDEE7BAFFPgQBTi4QTQY8IjsEAQw6IRwYSwgTBksEAgEtAU4hAUs2ATQBHz8jAQw+KQQBTygjKAYRBAEMTCAEAQxFFwEMUB5MBAEMTBwhMisEAQwiOzoEAQxOSUQ/OQZETjESBj1PLDspOEQzBlBDBAEMJj80MBMGG04TBAEMRh0EAQxOQgQCAVAxJgErLgEMRgxEDEoMRgxKDCc4EAxKEAxKDEwBDENIPgQBDDtJQ0kXBjEEAQwaRUlESRcGRQQBDBpFSUJBSCouIS0XBjZCBAEMSUkxJTVAMwg3BAEMO0kfSFAXBjkEAQxJSCBHBAEMT0wgUgQBDE1DI01EBAFCIC4dLzEwCB0GHQQCATNwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19tb2RlbC9qc193b3JsZF9idWlsZGVyLmRhcnQ1c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvY29tbW9uL2JhY2tlbmRfYXBpLmRhcnSD3i8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuYmFja2VuZF9hcGk7CgppbXBvcnQgJy4uL2NvbW1vbi9yZXNvbHV0aW9uLmRhcnQnIHNob3cgUmVzb2x1dGlvbkltcGFjdDsKaW1wb3J0ICcuLi91bml2ZXJzZS93b3JsZF9pbXBhY3QuZGFydCcgc2hvdyBXb3JsZEltcGFjdDsKCi8vLyBUYXJnZXQtc3BlY2lmaWMgdHJhbnNmb3JtYXRpb24gZm9yIHJlc29sdXRpb24gd29ybGQgaW1wYWN0cy4KLy8vCi8vLyBUaGlzIHByb2Nlc3NlcyB0YXJnZXQtYWdub3N0aWMgW1Jlc29sdXRpb25JbXBhY3RdcyBhbmQgY3JlYXRlcyBbV29ybGRJbXBhY3RdCi8vLyBpbiB3aGljaCBiYWNrZW5kL3RhcmdldCBzcGVjaWZpYyBpbXBhY3QgZGF0YSBpcyBhZGRlZCwgZm9yIGV4YW1wbGU6IGlmCi8vLyBjZXJ0YWluIGZlYXR1cmUgaXMgdXNlZCB0aGF0IHJlcXVpcmVzIHNvbWUgaGVscGVyIGNvZGUgZnJvbSB0aGUgYmFja2VuZAovLy8gbGlicmFyaWVzLCB0aGlzIHdpbGwgYmUgaW5jbHVkZWQgYnkgdGhlIGltcGFjdCB0cmFuc2Zvcm1lci4KY2xhc3MgSW1wYWN0VHJhbnNmb3JtZXIgewogIC8vLyBUcmFuc2Zvcm0gdGhlIFtSZXNvbHV0aW9uSW1wYWN0XSBpbnRvIGEgW1dvcmxkSW1wYWN0XSBhZGRpbmcgdGhlCiAgLy8vIGJhY2tlbmQgZGVwZW5kZW5jaWVzIGZvciBmZWF0dXJlcyB1c2VkIGluIFt3b3JsZEltcGFjdF0uCiAgV29ybGRJbXBhY3QgdHJhbnNmb3JtUmVzb2x1dGlvbkltcGFjdChSZXNvbHV0aW9uSW1wYWN0IHdvcmxkSW1wYWN0KSB7CiAgICByZXR1cm4gd29ybGRJbXBhY3Q7CiAgfQp9ChgATk48AR0BOjkBQQRRS0xAGkc/SBgEAgEscGFja2FnZTpjb21waWxlci9zcmMvY29tbW9uL2JhY2tlbmRfYXBpLmRhcnQ0c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvY29tbW9uL3Jlc29sdXRpb24uZGFydITbLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5jb21tb24ucmVzb2x1dGlvbjsKCmltcG9ydCAnLi4vY29uc3RhbnRzL2V4cHJlc3Npb25zLmRhcnQnIHNob3cgQ29uc3RhbnRFeHByZXNzaW9uOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3dvcmxkX2ltcGFjdC5kYXJ0JyBzaG93IFdvcmxkSW1wYWN0OwppbXBvcnQgJy4uL3VuaXZlcnNlL2ZlYXR1cmUuZGFydCc7CgpjbGFzcyBSZXNvbHV0aW9uSW1wYWN0IGV4dGVuZHMgV29ybGRJbXBhY3QgewogIGNvbnN0IFJlc29sdXRpb25JbXBhY3QoKTsKCiAgSXRlcmFibGU8RmVhdHVyZT4gZ2V0IGZlYXR1cmVzID0+IGNvbnN0IDxGZWF0dXJlPltdOwogIEl0ZXJhYmxlPE1hcExpdGVyYWxVc2U+IGdldCBtYXBMaXRlcmFscyA9PiBjb25zdCA8TWFwTGl0ZXJhbFVzZT5bXTsKICBJdGVyYWJsZTxTZXRMaXRlcmFsVXNlPiBnZXQgc2V0TGl0ZXJhbHMgPT4gY29uc3QgPFNldExpdGVyYWxVc2U+W107CiAgSXRlcmFibGU8TGlzdExpdGVyYWxVc2U+IGdldCBsaXN0TGl0ZXJhbHMgPT4gY29uc3QgPExpc3RMaXRlcmFsVXNlPltdOwogIEl0ZXJhYmxlPFN0cmluZz4gZ2V0IGNvbnN0U3ltYm9sTmFtZXMgPT4gY29uc3QgPFN0cmluZz5bXTsKICBJdGVyYWJsZTxDb25zdGFudEV4cHJlc3Npb24+IGdldCBjb25zdGFudExpdGVyYWxzID0+CiAgICAgIGNvbnN0IDxDb25zdGFudEV4cHJlc3Npb24+W107CiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBzZWVuQ2xhc3NlcyA9PiBjb25zdCA8Q2xhc3NFbnRpdHk+W107CiAgSXRlcmFibGU8UnVudGltZVR5cGVVc2U+IGdldCBydW50aW1lVHlwZVVzZXMgPT4gY29uc3QgPFJ1bnRpbWVUeXBlVXNlPltdOwoKICBJdGVyYWJsZTxkeW5hbWljPiBnZXQgbmF0aXZlRGF0YSA9PiBjb25zdCA8ZHluYW1pYz5bXTsKCiAgSXRlcmFibGU8R2VuZXJpY0luc3RhbnRpYXRpb24+IGdldCBnZW5lcmljSW5zdGFudGlhdGlvbnMgPT4KICAgICAgY29uc3QgPEdlbmVyaWNJbnN0YW50aWF0aW9uPltdOwp9Ch8ATk48ASMBQCQ5IwEtHAE3RkZJPTckQkwBOQE+JgIBK3BhY2thZ2U6Y29tcGlsZXIvc3JjL2NvbW1vbi9yZXNvbHV0aW9uLmRhcnQxc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaXIvYW5ub3RhdGlvbnMuZGFydLLcLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JzsKaW1wb3J0ICdtb2R1bGFyLmRhcnQnOwoKY2xhc3MgSXJBbm5vdGF0aW9uRGF0YSB7CiAgTWFwPGlyLkNsYXNzLCBTdHJpbmc+IF9uYXRpdmVDbGFzc05hbWVzID0ge307CiAgU2V0PGlyLk1lbWJlcj4gX25hdGl2ZU1lbWJlcnMgPSB7fTsKICBNYXA8aXIuTWVtYmVyLCBTdHJpbmc+IF9uYXRpdmVNZW1iZXJOYW1lcyA9IHt9OwogIE1hcDxpci5NZW1iZXIsIExpc3Q8U3RyaW5nPj4gX2NyZWF0ZXNBbm5vdGF0aW9ucyA9IHt9OwogIE1hcDxpci5NZW1iZXIsIExpc3Q8U3RyaW5nPj4gX3JldHVybnNBbm5vdGF0aW9ucyA9IHt9OwoKICBNYXA8aXIuTGlicmFyeSwgU3RyaW5nPiBfanNJbnRlcm9wTGlicmFyeU5hbWVzID0ge307CiAgTWFwPGlyLkNsYXNzLCBTdHJpbmc+IF9qc0ludGVyb3BDbGFzc05hbWVzID0ge307CiAgU2V0PGlyLkNsYXNzPiBfYW5vbnltb3VzSnNJbnRlcm9wQ2xhc3NlcyA9IHt9OwogIE1hcDxpci5NZW1iZXIsIFN0cmluZz4gX2pzSW50ZXJvcE1lbWJlck5hbWVzID0ge307CgogIE1hcDxpci5NZW1iZXIsIExpc3Q8UHJhZ21hQW5ub3RhdGlvbkRhdGE+PiBfbWVtYmVyUHJhZ21hQW5ub3RhdGlvbnMgPSB7fTsKCiAgLy8gUmV0dXJucyB0aGUgdGV4dCBmcm9tIHRoZSBgQE5hdGl2ZSg8dGV4dD4pYCBhbm5vdGF0aW9uIG9mIFtub2RlXSwgaWYgYW55LgogIFN0cmluZyBnZXROYXRpdmVDbGFzc05hbWUoaXIuQ2xhc3Mgbm9kZSkgPT4gX25hdGl2ZUNsYXNzTmFtZXNbbm9kZV07CgogIC8vIFJldHVybnMgYHRydWVgIGlmIFtub2RlXSBoYXMgYSBuYXRpdmUgYm9keSwgYXMgaW4gYG1ldGhvZCgpIG5hdGl2ZTtgLgogIGJvb2wgaGFzTmF0aXZlQm9keShpci5NZW1iZXIgbm9kZSkgPT4gX25hdGl2ZU1lbWJlcnMuY29udGFpbnMobm9kZSk7CgogIC8vIFJldHVybnMgdGhlIHRleHQgZnJvbSB0aGUgYEBKU05hbWUoPHRleHQ+KWAgYW5ub3RhdGlvbiBvZiBbbm9kZV0sIGlmIGFueS4KICBTdHJpbmcgZ2V0TmF0aXZlTWVtYmVyTmFtZShpci5NZW1iZXIgbm9kZSkgPT4gX25hdGl2ZU1lbWJlck5hbWVzW25vZGVdOwoKICAvLyBSZXR1cm5zIGEgbGlzdCBvZiB0aGUgdGV4dCBmcm9tIHRoZSBgQENyZWF0ZXMoPHRleHQ+KWAgYW5ub3RhdGlvbiBvZgogIC8vIFtub2RlXS4KICBMaXN0PFN0cmluZz4gZ2V0Q3JlYXRlc0Fubm90YXRpb25zKGlyLk1lbWJlciBub2RlKSA9PgogICAgICBfY3JlYXRlc0Fubm90YXRpb25zW25vZGVdID8/IGNvbnN0IFtdOwoKICAvLyBSZXR1cm5zIGEgbGlzdCBvZiB0aGUgdGV4dCBmcm9tIHRoZSBgQFJldHVybnMoPHRleHQ+KWAgYW5ub3RhdGlvbiBvZgogIC8vIFtub2RlXS4KICBMaXN0PFN0cmluZz4gZ2V0UmV0dXJuc0Fubm90YXRpb25zKGlyLk1lbWJlciBub2RlKSA9PgogICAgICBfcmV0dXJuc0Fubm90YXRpb25zW25vZGVdID8/IGNvbnN0IFtdOwoKICAvLyBSZXR1cm5zIHRoZSB0ZXh0IGZyb20gdGhlIGBASlMoPHRleHQ+KWAgYW5ub3RhdGlvbiBvZiBbbm9kZV0sIGlmIGFueS4KICBTdHJpbmcgZ2V0SnNJbnRlcm9wTGlicmFyeU5hbWUoaXIuTGlicmFyeSBub2RlKSA9PgogICAgICBfanNJbnRlcm9wTGlicmFyeU5hbWVzW25vZGVdOwoKICAvLyBSZXR1cm5zIHRoZSB0ZXh0IGZyb20gdGhlIGBASlMoPHRleHQ+KWAgYW5ub3RhdGlvbiBvZiBbbm9kZV0sIGlmIGFueS4KICBTdHJpbmcgZ2V0SnNJbnRlcm9wQ2xhc3NOYW1lKGlyLkNsYXNzIG5vZGUpID0+IF9qc0ludGVyb3BDbGFzc05hbWVzW25vZGVdOwoKICAvLyBSZXR1cm5zIGB0cnVlYCBpZiBbbm9kZV0gaXMgYW5ub3RhdGVkIHdpdGggYEBhbm9ueW1vdXNgLgogIGJvb2wgaXNBbm9ueW1vdXNKc0ludGVyb3BDbGFzcyhpci5DbGFzcyBub2RlKSA9PgogICAgICBfYW5vbnltb3VzSnNJbnRlcm9wQ2xhc3Nlcy5jb250YWlucyhub2RlKTsKCiAgLy8gUmV0dXJucyB0aGUgdGV4dCBmcm9tIHRoZSBgQEpTKDx0ZXh0PilgIGFubm90YXRpb24gb2YgW25vZGVdLCBpZiBhbnkuCiAgU3RyaW5nIGdldEpzSW50ZXJvcE1lbWJlck5hbWUoaXIuTWVtYmVyIG5vZGUpID0+IF9qc0ludGVyb3BNZW1iZXJOYW1lc1tub2RlXTsKCiAgLy8gUmV0dXJucyBhIGxpc3Qgb2YgdGhlIGBAcHJhZ21hKCdkYXJ0MmpzOjxzdWZmaXg+JylgIGFubm90YXRpb25zIG9uIFtub2RlXS4KICBMaXN0PFByYWdtYUFubm90YXRpb25EYXRhPiBnZXRNZW1iZXJQcmFnbWFBbm5vdGF0aW9uRGF0YShpci5NZW1iZXIgbm9kZSkgPT4KICAgICAgX21lbWJlclByYWdtYUFubm90YXRpb25zW25vZGVdID8/IGNvbnN0IFtdOwoKICB2b2lkIGZvckVhY2hOYXRpdmVDbGFzcyh2b2lkIEZ1bmN0aW9uKGlyLkNsYXNzLCBTdHJpbmcpIGYpIHsKICAgIF9uYXRpdmVDbGFzc05hbWVzLmZvckVhY2goZik7CiAgfQoKICB2b2lkIGZvckVhY2hKc0ludGVyb3BMaWJyYXJ5KHZvaWQgRnVuY3Rpb24oaXIuTGlicmFyeSwgU3RyaW5nKSBmKSB7CiAgICBfanNJbnRlcm9wTGlicmFyeU5hbWVzLmZvckVhY2goZik7CiAgfQoKICB2b2lkIGZvckVhY2hKc0ludGVyb3BDbGFzcygKICAgICAgdm9pZCBGdW5jdGlvbihpci5DbGFzcywgU3RyaW5nLCB7Ym9vbCBpc0Fub255bW91c30pIGYpIHsKICAgIF9qc0ludGVyb3BDbGFzc05hbWVzLmZvckVhY2goKGlyLkNsYXNzIG5vZGUsIFN0cmluZyBuYW1lKSB7CiAgICAgIGYobm9kZSwgbmFtZSwgaXNBbm9ueW1vdXM6IGlzQW5vbnltb3VzSnNJbnRlcm9wQ2xhc3Mobm9kZSkpOwogICAgfSk7CiAgfQoKICB2b2lkIGZvckVhY2hKc0ludGVyb3BNZW1iZXIodm9pZCBGdW5jdGlvbihpci5NZW1iZXIsIFN0cmluZykgZikgewogICAgX2pzSW50ZXJvcExpYnJhcnlOYW1lcy5mb3JFYWNoKChpci5MaWJyYXJ5IGxpYnJhcnksIF8pIHsKICAgICAgZm9yIChpci5NZW1iZXIgbWVtYmVyIGluIGxpYnJhcnkubWVtYmVycykgewogICAgICAgIGlmIChtZW1iZXIuaXNFeHRlcm5hbCkgewogICAgICAgICAgZihtZW1iZXIsIF9qc0ludGVyb3BNZW1iZXJOYW1lc1ttZW1iZXJdID8/IG1lbWJlci5uYW1lLm5hbWUpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICBfanNJbnRlcm9wQ2xhc3NOYW1lcy5mb3JFYWNoKChpci5DbGFzcyBjbHMsIF8pIHsKICAgICAgZm9yIChpci5NZW1iZXIgbWVtYmVyIGluIGNscy5tZW1iZXJzKSB7CiAgICAgICAgaWYgKG1lbWJlciBpcyBpci5GaWVsZCkgY29udGludWU7CiAgICAgICAgU3RyaW5nIG5hbWUgPSBfanNJbnRlcm9wTWVtYmVyTmFtZXNbbWVtYmVyXTsKICAgICAgICBpZiAobWVtYmVyLmlzRXh0ZXJuYWwpIHsKICAgICAgICAgIG5hbWUgPz89IG1lbWJlci5uYW1lLm5hbWU7CiAgICAgICAgfQogICAgICAgIGYobWVtYmVyLCBuYW1lKTsKICAgICAgfQogICAgfSk7CiAgfQoKICB2b2lkIGZvckVhY2hOYXRpdmVNZXRob2REYXRhKAogICAgICB2b2lkIEZ1bmN0aW9uKGlyLk1lbWJlciwgU3RyaW5nIG5hbWUsIEl0ZXJhYmxlPFN0cmluZz4gY3JlYXRlc0Fubm90YXRpb25zLAogICAgICAgICAgICAgIEl0ZXJhYmxlPFN0cmluZz4gcmV0dXJuc0Fubm90YXRpb25zKQogICAgICAgICAgZikgewogICAgZm9yIChpci5NZW1iZXIgbm9kZSBpbiBfbmF0aXZlTWVtYmVycykgewogICAgICBpZiAobm9kZSBpcyEgaXIuRmllbGQpIHsKICAgICAgICBTdHJpbmcgbmFtZSA9IF9uYXRpdmVNZW1iZXJOYW1lc1tub2RlXSA/PyBub2RlLm5hbWUubmFtZTsKICAgICAgICBmKG5vZGUsIG5hbWUsIGdldENyZWF0ZXNBbm5vdGF0aW9ucyhub2RlKSwgZ2V0UmV0dXJuc0Fubm90YXRpb25zKG5vZGUpKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBmb3JFYWNoTmF0aXZlRmllbGREYXRhKAogICAgICB2b2lkIEZ1bmN0aW9uKGlyLk1lbWJlciwgU3RyaW5nIG5hbWUsIEl0ZXJhYmxlPFN0cmluZz4gY3JlYXRlc0Fubm90YXRpb25zLAogICAgICAgICAgICAgIEl0ZXJhYmxlPFN0cmluZz4gcmV0dXJuc0Fubm90YXRpb25zKQogICAgICAgICAgZikgewogICAgZm9yIChpci5DbGFzcyBjbHMgaW4gX25hdGl2ZUNsYXNzTmFtZXMua2V5cykgewogICAgICBmb3IgKGlyLkZpZWxkIGZpZWxkIGluIGNscy5maWVsZHMpIHsKICAgICAgICBpZiAoZmllbGQuaXNJbnN0YW5jZU1lbWJlcikgewogICAgICAgICAgU3RyaW5nIG5hbWUgPSBfbmF0aXZlTWVtYmVyTmFtZXNbZmllbGRdID8/IGZpZWxkLm5hbWUubmFtZTsKICAgICAgICAgIGYoZmllbGQsIG5hbWUsIGdldENyZWF0ZXNBbm5vdGF0aW9ucyhmaWVsZCksCiAgICAgICAgICAgICAgZ2V0UmV0dXJuc0Fubm90YXRpb25zKGZpZWxkKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9CgpJckFubm90YXRpb25EYXRhIHByb2Nlc3NBbm5vdGF0aW9ucyhNb2R1bGFyQ29yZSBtb2R1bGFyQ29yZSkgewogIGlyLkNvbXBvbmVudCBjb21wb25lbnQgPSBtb2R1bGFyQ29yZS5jb21wb25lbnQ7CiAgSXJBbm5vdGF0aW9uRGF0YSBkYXRhID0gbmV3IElyQW5ub3RhdGlvbkRhdGEoKTsKCiAgdm9pZCBwcm9jZXNzTWVtYmVyKGlyLk1lbWJlciBtZW1iZXIpIHsKICAgIExpc3Q8UHJhZ21hQW5ub3RhdGlvbkRhdGE+IHByYWdtYUFubm90YXRpb25zOwogICAgTGlzdDxTdHJpbmc+IGNyZWF0ZXNBbm5vdGF0aW9uczsKICAgIExpc3Q8U3RyaW5nPiByZXR1cm5zQW5ub3RhdGlvbnM7CiAgICBmb3IgKGlyLkV4cHJlc3Npb24gYW5ub3RhdGlvbiBpbiBtZW1iZXIuYW5ub3RhdGlvbnMpIHsKICAgICAgaWYgKGFubm90YXRpb24gaXMgaXIuQ29uc3RhbnRFeHByZXNzaW9uKSB7CiAgICAgICAgaXIuQ29uc3RhbnQgY29uc3RhbnQgPQogICAgICAgICAgICBtb2R1bGFyQ29yZS5jb25zdGFudEV2YWx1YXRvci5ldmFsdWF0ZShhbm5vdGF0aW9uKTsKCiAgICAgICAgU3RyaW5nIGpzTmFtZSA9IF9nZXRKc0ludGVyb3BOYW1lKGNvbnN0YW50KTsKICAgICAgICBpZiAoanNOYW1lICE9IG51bGwpIHsKICAgICAgICAgIGRhdGEuX2pzSW50ZXJvcE1lbWJlck5hbWVzW21lbWJlcl0gPSBqc05hbWU7CiAgICAgICAgfQoKICAgICAgICBib29sIGlzTmF0aXZlTWVtYmVyID0gX2lzTmF0aXZlTWVtYmVyKGNvbnN0YW50KTsKICAgICAgICBpZiAoaXNOYXRpdmVNZW1iZXIpIHsKICAgICAgICAgIGRhdGEuX25hdGl2ZU1lbWJlcnMuYWRkKG1lbWJlcik7CiAgICAgICAgfQoKICAgICAgICBTdHJpbmcgbmF0aXZlTmFtZSA9IF9nZXROYXRpdmVNZW1iZXJOYW1lKGNvbnN0YW50KTsKICAgICAgICBpZiAobmF0aXZlTmFtZSAhPSBudWxsKSB7CiAgICAgICAgICBkYXRhLl9uYXRpdmVNZW1iZXJOYW1lc1ttZW1iZXJdID0gbmF0aXZlTmFtZTsKICAgICAgICB9CgogICAgICAgIFN0cmluZyBjcmVhdGVzID0gX2dldENyZWF0ZXNBbm5vdGF0aW9uKGNvbnN0YW50KTsKICAgICAgICBpZiAoY3JlYXRlcyAhPSBudWxsKSB7CiAgICAgICAgICBpZiAoY3JlYXRlc0Fubm90YXRpb25zID09IG51bGwpIHsKICAgICAgICAgICAgZGF0YS5fY3JlYXRlc0Fubm90YXRpb25zW21lbWJlcl0gPSBjcmVhdGVzQW5ub3RhdGlvbnMgPSBbXTsKICAgICAgICAgIH0KICAgICAgICAgIGNyZWF0ZXNBbm5vdGF0aW9ucy5hZGQoY3JlYXRlcyk7CiAgICAgICAgfQoKICAgICAgICBTdHJpbmcgcmV0dXJucyA9IF9nZXRSZXR1cm5zQW5ub3RhdGlvbihjb25zdGFudCk7CiAgICAgICAgaWYgKHJldHVybnMgIT0gbnVsbCkgewogICAgICAgICAgaWYgKHJldHVybnNBbm5vdGF0aW9ucyA9PSBudWxsKSB7CiAgICAgICAgICAgIGRhdGEuX3JldHVybnNBbm5vdGF0aW9uc1ttZW1iZXJdID0gcmV0dXJuc0Fubm90YXRpb25zID0gW107CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm5zQW5ub3RhdGlvbnMuYWRkKHJldHVybnMpOwogICAgICAgIH0KCiAgICAgICAgUHJhZ21hQW5ub3RhdGlvbkRhdGEgcHJhZ21hQW5ub3RhdGlvbiA9IF9nZXRQcmFnbWFBbm5vdGF0aW9uKGNvbnN0YW50KTsKICAgICAgICBpZiAocHJhZ21hQW5ub3RhdGlvbiAhPSBudWxsKSB7CiAgICAgICAgICBpZiAocHJhZ21hQW5ub3RhdGlvbnMgPT0gbnVsbCkgewogICAgICAgICAgICBkYXRhLl9tZW1iZXJQcmFnbWFBbm5vdGF0aW9uc1ttZW1iZXJdID0gcHJhZ21hQW5ub3RhdGlvbnMgPSBbXTsKICAgICAgICAgIH0KICAgICAgICAgIHByYWdtYUFubm90YXRpb25zLmFkZChwcmFnbWFBbm5vdGF0aW9uKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIGZvciAoaXIuTGlicmFyeSBsaWJyYXJ5IGluIGNvbXBvbmVudC5saWJyYXJpZXMpIHsKICAgIGZvciAoaXIuRXhwcmVzc2lvbiBhbm5vdGF0aW9uIGluIGxpYnJhcnkuYW5ub3RhdGlvbnMpIHsKICAgICAgaWYgKGFubm90YXRpb24gaXMgaXIuQ29uc3RhbnRFeHByZXNzaW9uKSB7CiAgICAgICAgaXIuQ29uc3RhbnQgY29uc3RhbnQgPQogICAgICAgICAgICBtb2R1bGFyQ29yZS5jb25zdGFudEV2YWx1YXRvci5ldmFsdWF0ZShhbm5vdGF0aW9uKTsKCiAgICAgICAgU3RyaW5nIGpzTmFtZSA9IF9nZXRKc0ludGVyb3BOYW1lKGNvbnN0YW50KTsKICAgICAgICBpZiAoanNOYW1lICE9IG51bGwpIHsKICAgICAgICAgIGRhdGEuX2pzSW50ZXJvcExpYnJhcnlOYW1lc1tsaWJyYXJ5XSA9IGpzTmFtZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGZvciAoaXIuQ2xhc3MgY2xzIGluIGxpYnJhcnkuY2xhc3NlcykgewogICAgICBmb3IgKGlyLkV4cHJlc3Npb24gYW5ub3RhdGlvbiBpbiBjbHMuYW5ub3RhdGlvbnMpIHsKICAgICAgICBpZiAoYW5ub3RhdGlvbiBpcyBpci5Db25zdGFudEV4cHJlc3Npb24pIHsKICAgICAgICAgIGlyLkNvbnN0YW50IGNvbnN0YW50ID0KICAgICAgICAgICAgICBtb2R1bGFyQ29yZS5jb25zdGFudEV2YWx1YXRvci5ldmFsdWF0ZShhbm5vdGF0aW9uKTsKCiAgICAgICAgICBTdHJpbmcgbmF0aXZlQ2xhc3NOYW1lID0gX2dldE5hdGl2ZUNsYXNzTmFtZShjb25zdGFudCk7CiAgICAgICAgICBpZiAobmF0aXZlQ2xhc3NOYW1lICE9IG51bGwpIHsKICAgICAgICAgICAgZGF0YS5fbmF0aXZlQ2xhc3NOYW1lc1tjbHNdID0gbmF0aXZlQ2xhc3NOYW1lOwogICAgICAgICAgfQoKICAgICAgICAgIFN0cmluZyBqc05hbWUgPSBfZ2V0SnNJbnRlcm9wTmFtZShjb25zdGFudCk7CiAgICAgICAgICBpZiAoanNOYW1lICE9IG51bGwpIHsKICAgICAgICAgICAgZGF0YS5fanNJbnRlcm9wQ2xhc3NOYW1lc1tjbHNdID0ganNOYW1lOwogICAgICAgICAgfQoKICAgICAgICAgIGJvb2wgaXNBbm9ueW1vdXNKc0ludGVyb3BDbGFzcyA9IF9pc0Fub255bW91c0pzSW50ZXJvcChjb25zdGFudCk7CiAgICAgICAgICBpZiAoaXNBbm9ueW1vdXNKc0ludGVyb3BDbGFzcykgewogICAgICAgICAgICBkYXRhLl9hbm9ueW1vdXNKc0ludGVyb3BDbGFzc2VzLmFkZChjbHMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBmb3IgKGlyLk1lbWJlciBtZW1iZXIgaW4gY2xzLm1lbWJlcnMpIHsKICAgICAgICBwcm9jZXNzTWVtYmVyKG1lbWJlcik7CiAgICAgIH0KICAgIH0KICAgIGZvciAoaXIuTWVtYmVyIG1lbWJlciBpbiBsaWJyYXJ5Lm1lbWJlcnMpIHsKICAgICAgcHJvY2Vzc01lbWJlcihtZW1iZXIpOwogICAgfQogIH0KICByZXR1cm4gZGF0YTsKfQoKU3RyaW5nIF9nZXROYXRpdmVDbGFzc05hbWUoaXIuQ29uc3RhbnQgY29uc3RhbnQpIHsKICBpZiAoY29uc3RhbnQgaXMgaXIuSW5zdGFuY2VDb25zdGFudCkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQWRkIGFuIElyQ29tbW9uRWxlbWVudHMgZm9yIHRoZXNlIHF1ZXJpZXM7IGkuZS4KICAgIC8vIGBjb21tb25FbGVtZW50cy5pc05hdGl2ZUFubm90YXRpb25DbGFzcyhjb25zdGFudC5jbGFzc05vZGUpYC4KICAgIGlmIChjb25zdGFudC5jbGFzc05vZGUubmFtZSA9PSAnTmF0aXZlJyAmJgogICAgICAgIGNvbnN0YW50LmNsYXNzTm9kZS5lbmNsb3NpbmdMaWJyYXJ5LmltcG9ydFVyaSA9PSBVcmlzLmRhcnRfX2pzX2hlbHBlcikgewogICAgICBpZiAoY29uc3RhbnQuZmllbGRWYWx1ZXMubGVuZ3RoID09IDEpIHsKICAgICAgICBpci5Db25zdGFudCBmaWVsZFZhbHVlID0gY29uc3RhbnQuZmllbGRWYWx1ZXMudmFsdWVzLnNpbmdsZTsKICAgICAgICBTdHJpbmcgbmFtZTsKICAgICAgICBpZiAoZmllbGRWYWx1ZSBpcyBpci5TdHJpbmdDb25zdGFudCkgewogICAgICAgICAgbmFtZSA9IGZpZWxkVmFsdWUudmFsdWU7CiAgICAgICAgfQogICAgICAgIGlmIChuYW1lICE9IG51bGwpIHsKICAgICAgICAgIHJldHVybiBuYW1lOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICByZXR1cm4gbnVsbDsKfQoKYm9vbCBfaXNOYXRpdmVNZW1iZXIoaXIuQ29uc3RhbnQgY29uc3RhbnQpIHsKICByZXR1cm4gY29uc3RhbnQgaXMgaXIuSW5zdGFuY2VDb25zdGFudCAmJgogICAgICBjb25zdGFudC5jbGFzc05vZGUubmFtZSA9PSAnRXh0ZXJuYWxOYW1lJyAmJgogICAgICBjb25zdGFudC5jbGFzc05vZGUuZW5jbG9zaW5nTGlicmFyeS5pbXBvcnRVcmkgPT0gVXJpcy5kYXJ0X19pbnRlcm5hbDsKfQoKU3RyaW5nIF9nZXROYXRpdmVNZW1iZXJOYW1lKGlyLkNvbnN0YW50IGNvbnN0YW50KSB7CiAgaWYgKGNvbnN0YW50IGlzIGlyLkluc3RhbmNlQ29uc3RhbnQgJiYKICAgICAgY29uc3RhbnQuY2xhc3NOb2RlLm5hbWUgPT0gJ0pTTmFtZScgJiYKICAgICAgY29uc3RhbnQuY2xhc3NOb2RlLmVuY2xvc2luZ0xpYnJhcnkuaW1wb3J0VXJpID09IFVyaXMuZGFydF9fanNfaGVscGVyKSB7CiAgICBhc3NlcnQoY29uc3RhbnQuZmllbGRWYWx1ZXMubGVuZ3RoID09IDEpOwogICAgaXIuQ29uc3RhbnQgZmllbGRWYWx1ZSA9IGNvbnN0YW50LmZpZWxkVmFsdWVzLnZhbHVlcy5zaW5nbGU7CiAgICBpZiAoZmllbGRWYWx1ZSBpcyBpci5TdHJpbmdDb25zdGFudCkgewogICAgICByZXR1cm4gZmllbGRWYWx1ZS52YWx1ZTsKICAgIH0KICB9CiAgcmV0dXJuIG51bGw7Cn0KClN0cmluZyBfZ2V0Q3JlYXRlc0Fubm90YXRpb24oaXIuQ29uc3RhbnQgY29uc3RhbnQpIHsKICBpZiAoY29uc3RhbnQgaXMgaXIuSW5zdGFuY2VDb25zdGFudCAmJgogICAgICBjb25zdGFudC5jbGFzc05vZGUubmFtZSA9PSAnQ3JlYXRlcycgJiYKICAgICAgY29uc3RhbnQuY2xhc3NOb2RlLmVuY2xvc2luZ0xpYnJhcnkuaW1wb3J0VXJpID09IFVyaXMuZGFydF9fanNfaGVscGVyKSB7CiAgICBhc3NlcnQoY29uc3RhbnQuZmllbGRWYWx1ZXMubGVuZ3RoID09IDEpOwogICAgaXIuQ29uc3RhbnQgZmllbGRWYWx1ZSA9IGNvbnN0YW50LmZpZWxkVmFsdWVzLnZhbHVlcy5zaW5nbGU7CiAgICBpZiAoZmllbGRWYWx1ZSBpcyBpci5TdHJpbmdDb25zdGFudCkgewogICAgICByZXR1cm4gZmllbGRWYWx1ZS52YWx1ZTsKICAgIH0KICB9CiAgcmV0dXJuIG51bGw7Cn0KClN0cmluZyBfZ2V0UmV0dXJuc0Fubm90YXRpb24oaXIuQ29uc3RhbnQgY29uc3RhbnQpIHsKICBpZiAoY29uc3RhbnQgaXMgaXIuSW5zdGFuY2VDb25zdGFudCAmJgogICAgICBjb25zdGFudC5jbGFzc05vZGUubmFtZSA9PSAnUmV0dXJucycgJiYKICAgICAgY29uc3RhbnQuY2xhc3NOb2RlLmVuY2xvc2luZ0xpYnJhcnkuaW1wb3J0VXJpID09IFVyaXMuZGFydF9fanNfaGVscGVyKSB7CiAgICBhc3NlcnQoY29uc3RhbnQuZmllbGRWYWx1ZXMubGVuZ3RoID09IDEpOwogICAgaXIuQ29uc3RhbnQgZmllbGRWYWx1ZSA9IGNvbnN0YW50LmZpZWxkVmFsdWVzLnZhbHVlcy5zaW5nbGU7CiAgICBpZiAoZmllbGRWYWx1ZSBpcyBpci5TdHJpbmdDb25zdGFudCkgewogICAgICByZXR1cm4gZmllbGRWYWx1ZS52YWx1ZTsKICAgIH0KICB9CiAgcmV0dXJuIG51bGw7Cn0KClN0cmluZyBfZ2V0SnNJbnRlcm9wTmFtZShpci5Db25zdGFudCBjb25zdGFudCkgewogIGlmIChjb25zdGFudCBpcyBpci5JbnN0YW5jZUNvbnN0YW50ICYmCiAgICAgIGNvbnN0YW50LmNsYXNzTm9kZS5uYW1lID09ICdKUycgJiYKICAgICAgY29uc3RhbnQuY2xhc3NOb2RlLmVuY2xvc2luZ0xpYnJhcnkuaW1wb3J0VXJpID09IFVyaXMucGFja2FnZV9qcykgewogICAgYXNzZXJ0KGNvbnN0YW50LmZpZWxkVmFsdWVzLmxlbmd0aCA9PSAxKTsKICAgIGlyLkNvbnN0YW50IGZpZWxkVmFsdWUgPSBjb25zdGFudC5maWVsZFZhbHVlcy52YWx1ZXMuc2luZ2xlOwogICAgaWYgKGZpZWxkVmFsdWUgaXMgaXIuTnVsbENvbnN0YW50KSB7CiAgICAgIHJldHVybiAnJzsKICAgIH0gZWxzZSBpZiAoZmllbGRWYWx1ZSBpcyBpci5TdHJpbmdDb25zdGFudCkgewogICAgICByZXR1cm4gZmllbGRWYWx1ZS52YWx1ZTsKICAgIH0KICB9CiAgcmV0dXJuIG51bGw7Cn0KCmJvb2wgX2lzQW5vbnltb3VzSnNJbnRlcm9wKGlyLkNvbnN0YW50IGNvbnN0YW50KSB7CiAgcmV0dXJuIGNvbnN0YW50IGlzIGlyLkluc3RhbmNlQ29uc3RhbnQgJiYKICAgICAgY29uc3RhbnQuY2xhc3NOb2RlLm5hbWUgPT0gJ19Bbm9ueW1vdXMnICYmCiAgICAgIGNvbnN0YW50LmNsYXNzTm9kZS5lbmNsb3NpbmdMaWJyYXJ5LmltcG9ydFVyaSA9PSBVcmlzLnBhY2thZ2VfanM7Cn0KCmNsYXNzIFByYWdtYUFubm90YXRpb25EYXRhIHsKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdXBwb3J0IG5vbiAnZGFydDJqczonIHByYWdtYSBuYW1lcyBpZiBuZWNlc3NhcnkuCiAgZmluYWwgU3RyaW5nIHN1ZmZpeDsKCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3VwcG9ydCBvcHRpb25zIG9iamVjdHMgd2hlbiBuZWNlc3NhcnkuCiAgZmluYWwgYm9vbCBoYXNPcHRpb25zOwoKICBjb25zdCBQcmFnbWFBbm5vdGF0aW9uRGF0YSh0aGlzLnN1ZmZpeCwge3RoaXMuaGFzT3B0aW9uczogZmFsc2V9KTsKCiAgU3RyaW5nIGdldCBuYW1lID0+ICdkYXJ0MmpzOiRzdWZmaXgnOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnUHJhZ21hQW5ub3RhdGlvbkRhdGEoJG5hbWUpJzsKfQoKUHJhZ21hQW5ub3RhdGlvbkRhdGEgX2dldFByYWdtYUFubm90YXRpb24oaXIuQ29uc3RhbnQgY29uc3RhbnQpIHsKICBpZiAoY29uc3RhbnQgaXMhIGlyLkluc3RhbmNlQ29uc3RhbnQpIHJldHVybiBudWxsOwogIGlyLkluc3RhbmNlQ29uc3RhbnQgdmFsdWUgPSBjb25zdGFudDsKICBpci5DbGFzcyBjbHMgPSB2YWx1ZS5jbGFzc05vZGU7CiAgVXJpIHVyaSA9IGNscy5lbmNsb3NpbmdMaWJyYXJ5LmltcG9ydFVyaTsKICBpZiAodXJpID09IFVyaXMucGFja2FnZV9tZXRhX2RhcnQyanMpIHsKICAgIGlmIChjbHMubmFtZSA9PSAnX05vSW5saW5lJykgewogICAgICByZXR1cm4gY29uc3QgUHJhZ21hQW5ub3RhdGlvbkRhdGEoJ25vSW5saW5lJyk7CiAgICB9IGVsc2UgaWYgKGNscy5uYW1lID09ICdfVHJ5SW5saW5lJykgewogICAgICByZXR1cm4gY29uc3QgUHJhZ21hQW5ub3RhdGlvbkRhdGEoJ3RyeUlubGluZScpOwogICAgfQogIH0gZWxzZSBpZiAodXJpID09IFVyaXMuZGFydF9jb3JlICYmIGNscy5uYW1lID09ICdwcmFnbWEnKSB7CiAgICBpci5Db25zdGFudCBuYW1lVmFsdWU7CiAgICBpci5Db25zdGFudCBvcHRpb25zVmFsdWU7CiAgICB2YWx1ZS5maWVsZFZhbHVlcy5mb3JFYWNoKChpci5SZWZlcmVuY2UgcmVmZXJlbmNlLCBpci5Db25zdGFudCBmaWVsZFZhbHVlKSB7CiAgICAgIGlyLkZpZWxkIGZpZWxkID0gcmVmZXJlbmNlLmFzRmllbGQ7CiAgICAgIGlmIChmaWVsZC5uYW1lLm5hbWUgPT0gJ25hbWUnKSB7CiAgICAgICAgbmFtZVZhbHVlID0gZmllbGRWYWx1ZTsKICAgICAgfSBlbHNlIGlmIChmaWVsZC5uYW1lLm5hbWUgPT0gJ29wdGlvbnMnKSB7CiAgICAgICAgb3B0aW9uc1ZhbHVlID0gZmllbGRWYWx1ZTsKICAgICAgfQogICAgfSk7CiAgICBpZiAobmFtZVZhbHVlIGlzISBpci5TdHJpbmdDb25zdGFudCkgcmV0dXJuIG51bGw7CiAgICBpci5TdHJpbmdDb25zdGFudCBzdHJpbmdWYWx1ZSA9IG5hbWVWYWx1ZTsKICAgIFN0cmluZyBuYW1lID0gc3RyaW5nVmFsdWUudmFsdWU7CiAgICBTdHJpbmcgcHJlZml4ID0gJ2RhcnQyanM6JzsKICAgIGlmICghbmFtZS5zdGFydHNXaXRoKHByZWZpeCkpIHJldHVybiBudWxsOwogICAgU3RyaW5nIHN1ZmZpeCA9IG5hbWUuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpOwogICAgcmV0dXJuIG5ldyBQcmFnbWFBbm5vdGF0aW9uRGF0YShzdWZmaXgsCiAgICAgICAgaGFzT3B0aW9uczogb3B0aW9uc1ZhbHVlIGlzISBpci5OdWxsQ29uc3RhbnQpOwogIH0KICByZXR1cm4gbnVsbDsKfQoKTGlzdDxQcmFnbWFBbm5vdGF0aW9uRGF0YT4gY29tcHV0ZVByYWdtYUFubm90YXRpb25EYXRhRnJvbUlyKGlyLk1lbWJlciBtZW1iZXIpIHsKICBMaXN0PFByYWdtYUFubm90YXRpb25EYXRhPiBhbm5vdGF0aW9ucyA9IFtdOwogIGZvciAoaXIuRXhwcmVzc2lvbiBtZXRhZGF0YSBpbiBtZW1iZXIuYW5ub3RhdGlvbnMpIHsKICAgIGlmIChtZXRhZGF0YSBpcyEgaXIuQ29uc3RhbnRFeHByZXNzaW9uKSBjb250aW51ZTsKICAgIGlyLkNvbnN0YW50RXhwcmVzc2lvbiBjb25zdGFudEV4cHJlc3Npb24gPSBtZXRhZGF0YTsKICAgIGlyLkNvbnN0YW50IGNvbnN0YW50ID0gY29uc3RhbnRFeHByZXNzaW9uLmNvbnN0YW50OwogICAgYXNzZXJ0KGNvbnN0YW50IGlzISBpci5VbmV2YWx1YXRlZENvbnN0YW50LAogICAgICAgICJVbmV4cGVjdGVkIHVuZXZhbHVhdGVkIGNvbnN0YW50IG9uICRtZW1iZXI6ICRtZXRhZGF0YSIpOwogICAgUHJhZ21hQW5ub3RhdGlvbkRhdGEgZGF0YSA9IF9nZXRQcmFnbWFBbm5vdGF0aW9uKGNvbnN0YW50KTsKICAgIGlmIChkYXRhICE9IG51bGwpIHsKICAgICAgYW5ub3RhdGlvbnMuYWRkKGRhdGEpOwogICAgfQogIH0KICByZXR1cm4gYW5ub3RhdGlvbnM7Cn0KgXcATk48ASgfFwEZMCYyOTkBNzMxNQFMAU9HAUtHAU9KAUoNOC0BSg04LQFLNSQBS00BPjMxAUtQAVBOMgE/IgQBRicEAR4/QEMIBAFEPTIhSAoICDUuKjUhJQoZCAgEASBRMw8tH0JRCAYEAR9RMw8zKyZGNy0KCAYEAgE/MjIBKTIlJTsxH0ABNR43CgE5HisKATwiOAoBOh8sSAwrCgE6HyxIDCsKAVAoK0wMMwoIBgQBNDwxH0ABNR45CggGLDozIUIBQik7DAE3IDUMAUwrNgwKCC4fCAYwHQYEDwIBMylMRS9RLkUVLyMKHBcKCAYEDwIBLSwzTAIBNCktTy5BKx8GBA8CATUpLk8uQSsfBgQPAgE1KS5PLkErHwYEDwIBMSkpSi5BKREyHwYEDwIBMywxSAIBHUwXAUIZAUUBKAEMNgIBQjUoIiwqIzUrNgY+Gx5RKicgMSMICDYvJSAvMyw3BA8CAVEvNzY5ODBCQBgdBgQWAgEocGFja2FnZTpjb21waWxlci9zcmMvaXIvYW5ub3RhdGlvbnMuZGFydC1zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pci9jbG9zdXJlLmRhcnS4uS8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKCi8vLyBDb2xsZWN0aW9uIG9mIHNjb3BlIGRhdGEgY29sbGVjdGVkIGZvciBhIHNpbmdsZSBtZW1iZXIuCmNsYXNzIENsb3N1cmVTY29wZU1vZGVsIHsKICAvLy8gQ29sbGVjdGlvbiBbU2NvcGVJbmZvXSBkYXRhIGZvciB0aGUgbWVtYmVyLgogIEtlcm5lbFNjb3BlSW5mbyBzY29wZUluZm87CgogIC8vLyBDb2xsZWN0ZWQgW0NhcHR1cmVkU2NvcGVdIGRhdGEgZm9yIG5vZGVzLgogIE1hcDxpci5Ob2RlLCBLZXJuZWxDYXB0dXJlZFNjb3BlPiBjYXB0dXJlZFNjb3Blc01hcCA9CiAgICAgIDxpci5Ob2RlLCBLZXJuZWxDYXB0dXJlZFNjb3BlPnt9OwoKICAvLy8gQ29sbGVjdGVkIFtTY29wZUluZm9dIGRhdGEgZm9yIG5vZGVzLgogIE1hcDxpci5Mb2NhbEZ1bmN0aW9uLCBLZXJuZWxTY29wZUluZm8+IGNsb3N1cmVzVG9HZW5lcmF0ZSA9CiAgICAgIDxpci5Mb2NhbEZ1bmN0aW9uLCBLZXJuZWxTY29wZUluZm8+e307CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnJHNjb3BlSW5mb1xuJGNhcHR1cmVkU2NvcGVzTWFwXG4kY2xvc3VyZXNUb0dlbmVyYXRlJzsKICB9Cn0KCmNsYXNzIEtlcm5lbFNjb3BlSW5mbyB7CiAgZmluYWwgU2V0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+IGxvY2Fsc1VzZWRJblRyeU9yU3luYzsKICBmaW5hbCBib29sIGhhc1RoaXNMb2NhbDsKICBmaW5hbCBTZXQ8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4gYm94ZWRWYXJpYWJsZXM7CiAgLy8gSWYgYm94ZWRWYXJpYWJsZXMgaXMgZW1wdHksIHRoaXMgd2lsbCBiZSBudWxsLCBiZWNhdXNlIG5vIHZhcmlhYmxlcyB3aWxsCiAgLy8gbmVlZCB0byBiZSBib3hlZC4KICBmaW5hbCBOb2RlQm94IGNhcHR1cmVkVmFyaWFibGVzQWNjZXNzb3I7CgogIC8vLyBUaGUgc2V0IG9mIHZhcmlhYmxlcyB0aGF0IHdlcmUgZGVmaW5lZCBpbiBhbm90aGVyIHNjb3BlLCBidXQgYXJlIHVzZWQgaW4KICAvLy8gdGhpcyBzY29wZS4gVGhlIGl0ZW1zIGluIHRoaXMgc2V0IGFyZSBlaXRoZXIgb2YgdHlwZSBWYXJpYWJsZURlY2xhcmF0aW9uCiAgLy8vIG9yIFR5cGVQYXJhbWV0ZXJUeXBlV2l0aENvbnRleHQuCiAgU2V0PGlyLk5vZGUgLyogVmFyaWFibGVEZWNsYXJhdGlvbiB8IFR5cGVQYXJhbWV0ZXJUeXBlV2l0aENvbnRleHQgKi8gPgogICAgICBmcmVlVmFyaWFibGVzID0gbmV3IFNldDxpci5Ob2RlPigpOwoKICAvLy8gQSBzZXQgb2YgdHlwZSBwYXJhbWV0ZXJzIHRoYXQgYXJlIGRlZmluZWQgaW4gYW5vdGhlciBzY29wZSBhbmQgYXJlIG9ubHkKICAvLy8gdXNlZCBpZiBydW50aW1lIHR5cGUgaW5mb3JtYXRpb24gaXMgY2hlY2tlZC4gSWYgcnVudGltZSB0eXBlIGluZm9ybWF0aW9uCiAgLy8vIG5lZWRzIHRvIGJlIHJldGFpbmVkLCBhbGwgb2YgdGhlc2UgdHlwZSB2YXJpYWJsZXMgd2lsbCBiZSBhZGRlZCBvdCB0aGUKICAvLy8gZnJlZVZhcmlhYmxlcyBzZXQuIFdoZXRoZXIgdGhlc2UgdmFyaWFibGVzIGFyZSBhY3R1YWxseSB1c2VkIGFzCiAgLy8vIGZyZWVWYXJpYWJsZXMgd2lsbCBiZSBzZXQgYnkgdGhlIHRpbWUgdGhpcyBzdHJ1Y3R1cmUgaXMgY29udmVydGVkIHRvIGEKICAvLy8gSnNTY29wZUluZm8sIHNvIEpzU2NvcGVJbmZvIGRvZXMgbm90IG5lZWQgdG8gdXNlIHRoZW0uCiAgTWFwPFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCwgU2V0PFZhcmlhYmxlVXNlPj4gZnJlZVZhcmlhYmxlc0ZvclJ0aSA9CiAgICAgIDxUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQsIFNldDxWYXJpYWJsZVVzZT4+e307CgogIC8vLyBJZiB0cnVlLCBgdGhpc2AgaXMgdXNlZCBhcyBhIGZyZWUgdmFyaWFibGUsIGluIHRoaXMgc2NvcGUuIEl0IGlzIHN0b3JlZAogIC8vLyBzZXBhcmF0ZWx5IGZyb20gW2ZyZWVWYXJpYWJsZXNdIGJlY2F1c2UgdGhlcmUgaXMgbm8gc2luZ2xlCiAgLy8vIGBWYXJpYWJsZURlY2xhcmF0aW9uYCBub2RlIHRoYXQgcmVwcmVzZW50cyBgdGhpc2AuCiAgYm9vbCB0aGlzVXNlZEFzRnJlZVZhcmlhYmxlID0gZmFsc2U7CgogIC8vLyBJZiB0cnVlLCBgdGhpc2AgaXMgdXNlZCBhcyBhIGZyZWUgdmFyaWFibGUsIGluIHRoaXMgc2NvcGUgaWYgd2UgYXJlIGFsc28KICAvLy8gcGVyZm9ybWluZyBydW50aW1lIHR5cGUgY2hlY2tzLiBJdCBpcyBzdG9yZWQKICAvLy8gc2VwYXJhdGVseSBmcm9tIFt0aGlzVXNlZEFzRnJlZVZhcmlhYmxlXSBiZWNhdXNlIHdlIGRvbid0IGtub3cgYXQgdGhpcwogIC8vLyBzdGFnZSBpZiB3ZSB3aWxsIGJlIG5lZWRpbmcgdHlwZSBjaGVja3MgZm9yIHRoaXMgc2NvcGUuCiAgU2V0PFZhcmlhYmxlVXNlPiB0aGlzVXNlZEFzRnJlZVZhcmlhYmxlSWZOZWVkc1J0aSA9IG5ldyBTZXQ8VmFyaWFibGVVc2U+KCk7CgogIEtlcm5lbFNjb3BlSW5mbyh0aGlzLmhhc1RoaXNMb2NhbCkKICAgICAgOiBsb2NhbHNVc2VkSW5UcnlPclN5bmMgPSBuZXcgU2V0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+KCksCiAgICAgICAgYm94ZWRWYXJpYWJsZXMgPSBuZXcgU2V0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+KCksCiAgICAgICAgY2FwdHVyZWRWYXJpYWJsZXNBY2Nlc3NvciA9IG51bGw7CgogIEtlcm5lbFNjb3BlSW5mby5mcm9tKHRoaXMuaGFzVGhpc0xvY2FsLCBLZXJuZWxTY29wZUluZm8gaW5mbykKICAgICAgOiBsb2NhbHNVc2VkSW5UcnlPclN5bmMgPSBpbmZvLmxvY2Fsc1VzZWRJblRyeU9yU3luYywKICAgICAgICBib3hlZFZhcmlhYmxlcyA9IGluZm8uYm94ZWRWYXJpYWJsZXMsCiAgICAgICAgY2FwdHVyZWRWYXJpYWJsZXNBY2Nlc3NvciA9IG51bGw7CgogIEtlcm5lbFNjb3BlSW5mby53aXRoQm94ZWRWYXJpYWJsZXMoCiAgICAgIHRoaXMuYm94ZWRWYXJpYWJsZXMsCiAgICAgIHRoaXMuY2FwdHVyZWRWYXJpYWJsZXNBY2Nlc3NvciwKICAgICAgdGhpcy5sb2NhbHNVc2VkSW5UcnlPclN5bmMsCiAgICAgIHRoaXMuZnJlZVZhcmlhYmxlcywKICAgICAgdGhpcy5mcmVlVmFyaWFibGVzRm9yUnRpLAogICAgICB0aGlzLnRoaXNVc2VkQXNGcmVlVmFyaWFibGUsCiAgICAgIHRoaXMudGhpc1VzZWRBc0ZyZWVWYXJpYWJsZUlmTmVlZHNSdGksCiAgICAgIHRoaXMuaGFzVGhpc0xvY2FsKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoJ0tlcm5lbFNjb3BlSW5mbyh0aGlzPSRoYXNUaGlzTG9jYWwsJyk7CiAgICBzYi53cml0ZSgnZnJlZVZyaWFibGVzPSRmcmVlVmFyaWFibGVzLCcpOwogICAgc2Iud3JpdGUoJ2xvY2Fsc1VzZWRJblRyeU9yU3luYz17JHtsb2NhbHNVc2VkSW5UcnlPclN5bmMuam9pbignLCAnKX19Jyk7CiAgICBTdHJpbmcgY29tbWEgPSAnJzsKICAgIHNiLndyaXRlKCdmcmVlVmFyaWFibGVzRm9yUnRpPXsnKTsKICAgIGZyZWVWYXJpYWJsZXNGb3JSdGkuZm9yRWFjaCgoa2V5LCB2YWx1ZSkgewogICAgICBzYi53cml0ZSgnJGNvbW1hJGtleTokdmFsdWUnKTsKICAgICAgY29tbWEgPSAnLCc7CiAgICB9KTsKICAgIHNiLndyaXRlKCd9KScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgpjbGFzcyBLZXJuZWxDYXB0dXJlZFNjb3BlIGV4dGVuZHMgS2VybmVsU2NvcGVJbmZvIHsKICBLZXJuZWxDYXB0dXJlZFNjb3BlKAogICAgICBTZXQ8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4gYm94ZWRWYXJpYWJsZXMsCiAgICAgIE5vZGVCb3ggY2FwdHVyZWRWYXJpYWJsZXNBY2Nlc3NvciwKICAgICAgU2V0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+IGxvY2Fsc1VzZWRJblRyeU9yU3luYywKICAgICAgU2V0PGlyLk5vZGUgLyogVmFyaWFibGVEZWNsYXJhdGlvbiB8IFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCAqLyA+CiAgICAgICAgICBmcmVlVmFyaWFibGVzLAogICAgICBNYXA8VHlwZVZhcmlhYmxlVHlwZVdpdGhDb250ZXh0LCBTZXQ8VmFyaWFibGVVc2U+PiBmcmVlVmFyaWFibGVzRm9yUnRpLAogICAgICBib29sIHRoaXNVc2VkQXNGcmVlVmFyaWFibGUsCiAgICAgIFNldDxWYXJpYWJsZVVzZT4gdGhpc1VzZWRBc0ZyZWVWYXJpYWJsZUlmTmVlZHNSdGksCiAgICAgIGJvb2wgaGFzVGhpc0xvY2FsKQogICAgICA6IHN1cGVyLndpdGhCb3hlZFZhcmlhYmxlcygKICAgICAgICAgICAgYm94ZWRWYXJpYWJsZXMsCiAgICAgICAgICAgIGNhcHR1cmVkVmFyaWFibGVzQWNjZXNzb3IsCiAgICAgICAgICAgIGxvY2Fsc1VzZWRJblRyeU9yU3luYywKICAgICAgICAgICAgZnJlZVZhcmlhYmxlcywKICAgICAgICAgICAgZnJlZVZhcmlhYmxlc0ZvclJ0aSwKICAgICAgICAgICAgdGhpc1VzZWRBc0ZyZWVWYXJpYWJsZSwKICAgICAgICAgICAgdGhpc1VzZWRBc0ZyZWVWYXJpYWJsZUlmTmVlZHNSdGksCiAgICAgICAgICAgIGhhc1RoaXNMb2NhbCk7CgogIC8vIExvb3BzIHRocm91Z2ggdGhlIGZyZWUgdmFyaWFibGVzIG9mIGFuIGV4aXN0aW5nIEtlcm5lbENhcHR1cmVkU2NvcGUgYW5kCiAgLy8gY3JlYXRlcyBhIG5ldyBLZXJuZWxDYXB0dXJlZFNjb3BlIHRoYXQgb25seSBjYXB0dXJlcyB0eXBlIHZhcmlhYmxlcy4KICBLZXJuZWxDYXB0dXJlZFNjb3BlLmZvclNpZ25hdHVyZShLZXJuZWxDYXB0dXJlZFNjb3BlIHNjb3BlKQogICAgICA6IHRoaXMoCiAgICAgICAgICAgIF9lbXB0eSwKICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgX2VtcHR5LAogICAgICAgICAgICBzY29wZS5mcmVlVmFyaWFibGVzLndoZXJlKAogICAgICAgICAgICAgICAgKGlyLk5vZGUgdmFyaWFibGUpID0+IHZhcmlhYmxlIGlzIFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCksCiAgICAgICAgICAgIHNjb3BlLmZyZWVWYXJpYWJsZXNGb3JSdGksCiAgICAgICAgICAgIHNjb3BlLnRoaXNVc2VkQXNGcmVlVmFyaWFibGUsCiAgICAgICAgICAgIHNjb3BlLnRoaXNVc2VkQXNGcmVlVmFyaWFibGVJZk5lZWRzUnRpLAogICAgICAgICAgICBzY29wZS5oYXNUaGlzTG9jYWwpOwoKICAvLyBTaWxseSBoYWNrIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBjb25zdCBzZXRzLgogIHN0YXRpYyBmaW5hbCBTZXQ8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4gX2VtcHR5ID0gbmV3IFNldCgpOwoKICBib29sIGdldCByZXF1aXJlc0NvbnRleHRCb3ggPT4gYm94ZWRWYXJpYWJsZXMuaXNOb3RFbXB0eTsKfQoKY2xhc3MgS2VybmVsQ2FwdHVyZWRMb29wU2NvcGUgZXh0ZW5kcyBLZXJuZWxDYXB0dXJlZFNjb3BlIHsKICBmaW5hbCBMaXN0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+IGJveGVkTG9vcFZhcmlhYmxlczsKCiAgS2VybmVsQ2FwdHVyZWRMb29wU2NvcGUoCiAgICAgIFNldDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBib3hlZFZhcmlhYmxlcywKICAgICAgTm9kZUJveCBjYXB0dXJlZFZhcmlhYmxlc0FjY2Vzc29yLAogICAgICB0aGlzLmJveGVkTG9vcFZhcmlhYmxlcywKICAgICAgU2V0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+IGxvY2Fsc1VzZWRJblRyeU9yU3luYywKICAgICAgU2V0PGlyLk5vZGUgLyogVmFyaWFibGVEZWNsYXJhdGlvbiB8IFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCAqLyA+CiAgICAgICAgICBmcmVlVmFyaWFibGVzLAogICAgICBNYXA8VHlwZVZhcmlhYmxlVHlwZVdpdGhDb250ZXh0LCBTZXQ8VmFyaWFibGVVc2U+PiBmcmVlVmFyaWFibGVzRm9yUnRpLAogICAgICBib29sIHRoaXNVc2VkQXNGcmVlVmFyaWFibGUsCiAgICAgIFNldDxWYXJpYWJsZVVzZT4gdGhpc1VzZWRBc0ZyZWVWYXJpYWJsZUlmTmVlZHNSdGksCiAgICAgIGJvb2wgaGFzVGhpc0xvY2FsKQogICAgICA6IHN1cGVyKAogICAgICAgICAgICBib3hlZFZhcmlhYmxlcywKICAgICAgICAgICAgY2FwdHVyZWRWYXJpYWJsZXNBY2Nlc3NvciwKICAgICAgICAgICAgbG9jYWxzVXNlZEluVHJ5T3JTeW5jLAogICAgICAgICAgICBmcmVlVmFyaWFibGVzLAogICAgICAgICAgICBmcmVlVmFyaWFibGVzRm9yUnRpLAogICAgICAgICAgICB0aGlzVXNlZEFzRnJlZVZhcmlhYmxlLAogICAgICAgICAgICB0aGlzVXNlZEFzRnJlZVZhcmlhYmxlSWZOZWVkc1J0aSwKICAgICAgICAgICAgaGFzVGhpc0xvY2FsKTsKCiAgYm9vbCBnZXQgaGFzQm94ZWRMb29wVmFyaWFibGVzID0+IGJveGVkTG9vcFZhcmlhYmxlcy5pc05vdEVtcHR5Owp9CgovLy8gQSBsb2NhbCB2YXJpYWJsZSB0byBkaXNhbWJpZ3VhdGUgYmV0d2VlbiBhIHZhcmlhYmxlIHRoYXQgaGFzIGJlZW4gY2FwdHVyZWQKLy8vIGZyb20gb25lIHNjb3BlIHRvIGFub3RoZXIuIFRoaXMgaXMgdGhlIGlyLk5vZGUgdmVyc2lvbiB0aGF0IGNvcnJlc3BvbmRzIHRvCi8vLyBbQm94TG9jYWxdLgpjbGFzcyBOb2RlQm94IHsKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBmaW5hbCBpci5UcmVlTm9kZSBleGVjdXRhYmxlQ29udGV4dDsKICBOb2RlQm94KHRoaXMubmFtZSwgdGhpcy5leGVjdXRhYmxlQ29udGV4dCk7Cn0KCmVudW0gVmFyaWFibGVVc2VLaW5kIHsKICAvLy8gQW4gZXhwbGljaXQgdmFyaWFibGUgdXNlLgogIC8vLwogIC8vLyBGb3IgdHlwZSB2YXJpYWJsZSB0aGlzIGlzIGFuIGV4cGxpY2l0IGFzLWNhc3QsIGFuIGlzLXRlc3Qgb3IgYSB0eXBlCiAgLy8vIGxpdGVyYWwuCiAgZXhwbGljaXQsCgogIC8vLyBBIHR5cGUgdmFyaWFibGUgdXNlZCBpbiB0aGUgdHlwZSBvZiBhIGxvY2FsIHZhcmlhYmxlLgogIGxvY2FsVHlwZSwKCiAgLy8vIEEgdHlwZSB2YXJpYWJsZSB1c2VkIGluIGFuIGltcGxpY2l0IGNhc3QuCiAgaW1wbGljaXRDYXN0LAoKICAvLy8gQSB0eXBlIHZhcmlhYmxlIHBhc3NlZCBhcyB0aGUgdHlwZSBhcmd1bWVudCBvZiBhIGxpc3QgbGl0ZXJhbC4KICBsaXN0TGl0ZXJhbCwKCiAgLy8vIEEgdHlwZSB2YXJpYWJsZSBwYXNzZWQgYXMgdGhlIHR5cGUgYXJndW1lbnQgb2YgYSBzZXQgbGl0ZXJhbC4KICBzZXRMaXRlcmFsLAoKICAvLy8gQSB0eXBlIHZhcmlhYmxlIHBhc3NlZCBhcyB0aGUgdHlwZSBhcmd1bWVudCBvZiBhIG1hcCBsaXRlcmFsLgogIG1hcExpdGVyYWwsCgogIC8vLyBBIHR5cGUgdmFyaWFibGUgcGFzc2VkIGFzIGEgdHlwZSBhcmd1bWVudCB0byBhIGNvbnN0cnVjdG9yLgogIGNvbnN0cnVjdG9yVHlwZUFyZ3VtZW50LAoKICAvLy8gQSB0eXBlIHZhcmlhYmxlIHBhc3NlZCBhcyBhIHR5cGUgYXJndW1lbnQgdG8gYSBzdGF0aWMgbWV0aG9kLgogIHN0YXRpY1R5cGVBcmd1bWVudCwKCiAgLy8vIEEgdHlwZSB2YXJpYWJsZSBwYXNzZWQgYXMgYSB0eXBlIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG1ldGhvZC4KICBpbnN0YW5jZVR5cGVBcmd1bWVudCwKCiAgLy8vIEEgdHlwZSB2YXJpYWJsZSBwYXNzZWQgYXMgYSB0eXBlIGFyZ3VtZW50IHRvIGEgbG9jYWwgZnVuY3Rpb24uCiAgbG9jYWxUeXBlQXJndW1lbnQsCgogIC8vLyBBIHR5cGUgdmFyaWFibGUgaW4gYSBwYXJhbWV0ZXIgdHlwZSBvZiBhIG1lbWJlci4KICBtZW1iZXJQYXJhbWV0ZXIsCgogIC8vLyBBIHR5cGUgdmFyaWFibGUgaW4gYSBwYXJhbWV0ZXIgdHlwZSBvZiBhIGxvY2FsIGZ1bmN0aW9uLgogIGxvY2FsUGFyYW1ldGVyLAoKICAvLy8gQSB0eXBlIHZhcmlhYmxlIHVzZWQgaW4gYSByZXR1cm4gdHlwZSBvZiBhIG1lbWJlci4KICBtZW1iZXJSZXR1cm5UeXBlLAoKICAvLy8gQSB0eXBlIHZhcmlhYmxlIHVzZWQgaW4gYSByZXR1cm4gdHlwZSBvZiBhIGxvY2FsIGZ1bmN0aW9uLgogIGxvY2FsUmV0dXJuVHlwZSwKCiAgLy8vIEEgdHlwZSB2YXJpYWJsZSBpbiBhIGZpZWxkIHR5cGUuCiAgZmllbGRUeXBlLAoKICAvLy8gQSB0eXBlIGFyZ3VtZW50IG9mIGFuIGdlbmVyaWMgaW5zdGFudGlhdGlvbi4KICBpbnN0YW50aWF0aW9uVHlwZUFyZ3VtZW50LAp9CgpjbGFzcyBWYXJpYWJsZVVzZSB7CiAgZmluYWwgVmFyaWFibGVVc2VLaW5kIGtpbmQ7CiAgZmluYWwgaXIuTWVtYmVyIG1lbWJlcjsKICBmaW5hbCBpci5Mb2NhbEZ1bmN0aW9uIGxvY2FsRnVuY3Rpb247CiAgZmluYWwgaXIuTWV0aG9kSW52b2NhdGlvbiBpbnZvY2F0aW9uOwogIGZpbmFsIGlyLkluc3RhbnRpYXRpb24gaW5zdGFudGlhdGlvbjsKCiAgY29uc3QgVmFyaWFibGVVc2UuX3NpbXBsZSh0aGlzLmtpbmQpCiAgICAgIDogdGhpcy5tZW1iZXIgPSBudWxsLAogICAgICAgIHRoaXMubG9jYWxGdW5jdGlvbiA9IG51bGwsCiAgICAgICAgdGhpcy5pbnZvY2F0aW9uID0gbnVsbCwKICAgICAgICB0aGlzLmluc3RhbnRpYXRpb24gPSBudWxsOwoKICBWYXJpYWJsZVVzZS5tZW1iZXJQYXJhbWV0ZXIodGhpcy5tZW1iZXIpCiAgICAgIDogdGhpcy5raW5kID0gVmFyaWFibGVVc2VLaW5kLm1lbWJlclBhcmFtZXRlciwKICAgICAgICB0aGlzLmxvY2FsRnVuY3Rpb24gPSBudWxsLAogICAgICAgIHRoaXMuaW52b2NhdGlvbiA9IG51bGwsCiAgICAgICAgdGhpcy5pbnN0YW50aWF0aW9uID0gbnVsbDsKCiAgVmFyaWFibGVVc2UubG9jYWxQYXJhbWV0ZXIodGhpcy5sb2NhbEZ1bmN0aW9uKQogICAgICA6IHRoaXMua2luZCA9IFZhcmlhYmxlVXNlS2luZC5sb2NhbFBhcmFtZXRlciwKICAgICAgICB0aGlzLm1lbWJlciA9IG51bGwsCiAgICAgICAgdGhpcy5pbnZvY2F0aW9uID0gbnVsbCwKICAgICAgICB0aGlzLmluc3RhbnRpYXRpb24gPSBudWxsOwoKICBWYXJpYWJsZVVzZS5tZW1iZXJSZXR1cm5UeXBlKHRoaXMubWVtYmVyKQogICAgICA6IHRoaXMua2luZCA9IFZhcmlhYmxlVXNlS2luZC5tZW1iZXJSZXR1cm5UeXBlLAogICAgICAgIHRoaXMubG9jYWxGdW5jdGlvbiA9IG51bGwsCiAgICAgICAgdGhpcy5pbnZvY2F0aW9uID0gbnVsbCwKICAgICAgICB0aGlzLmluc3RhbnRpYXRpb24gPSBudWxsOwoKICBWYXJpYWJsZVVzZS5sb2NhbFJldHVyblR5cGUodGhpcy5sb2NhbEZ1bmN0aW9uKQogICAgICA6IHRoaXMua2luZCA9IFZhcmlhYmxlVXNlS2luZC5sb2NhbFJldHVyblR5cGUsCiAgICAgICAgdGhpcy5tZW1iZXIgPSBudWxsLAogICAgICAgIHRoaXMuaW52b2NhdGlvbiA9IG51bGwsCiAgICAgICAgdGhpcy5pbnN0YW50aWF0aW9uID0gbnVsbDsKCiAgVmFyaWFibGVVc2UuY29uc3RydWN0b3JUeXBlQXJndW1lbnQodGhpcy5tZW1iZXIpCiAgICAgIDogdGhpcy5raW5kID0gVmFyaWFibGVVc2VLaW5kLmNvbnN0cnVjdG9yVHlwZUFyZ3VtZW50LAogICAgICAgIHRoaXMubG9jYWxGdW5jdGlvbiA9IG51bGwsCiAgICAgICAgdGhpcy5pbnZvY2F0aW9uID0gbnVsbCwKICAgICAgICB0aGlzLmluc3RhbnRpYXRpb24gPSBudWxsOwoKICBWYXJpYWJsZVVzZS5zdGF0aWNUeXBlQXJndW1lbnQodGhpcy5tZW1iZXIpCiAgICAgIDogdGhpcy5raW5kID0gVmFyaWFibGVVc2VLaW5kLnN0YXRpY1R5cGVBcmd1bWVudCwKICAgICAgICB0aGlzLmxvY2FsRnVuY3Rpb24gPSBudWxsLAogICAgICAgIHRoaXMuaW52b2NhdGlvbiA9IG51bGwsCiAgICAgICAgdGhpcy5pbnN0YW50aWF0aW9uID0gbnVsbDsKCiAgVmFyaWFibGVVc2UuaW5zdGFuY2VUeXBlQXJndW1lbnQodGhpcy5pbnZvY2F0aW9uKQogICAgICA6IHRoaXMua2luZCA9IFZhcmlhYmxlVXNlS2luZC5pbnN0YW5jZVR5cGVBcmd1bWVudCwKICAgICAgICB0aGlzLm1lbWJlciA9IG51bGwsCiAgICAgICAgdGhpcy5sb2NhbEZ1bmN0aW9uID0gbnVsbCwKICAgICAgICB0aGlzLmluc3RhbnRpYXRpb24gPSBudWxsOwoKICBWYXJpYWJsZVVzZS5sb2NhbFR5cGVBcmd1bWVudCh0aGlzLmxvY2FsRnVuY3Rpb24sIHRoaXMuaW52b2NhdGlvbikKICAgICAgOiB0aGlzLmtpbmQgPSBWYXJpYWJsZVVzZUtpbmQubG9jYWxUeXBlQXJndW1lbnQsCiAgICAgICAgdGhpcy5tZW1iZXIgPSBudWxsLAogICAgICAgIHRoaXMuaW5zdGFudGlhdGlvbiA9IG51bGw7CgogIFZhcmlhYmxlVXNlLmluc3RhbnRpYXRpb25UeXBlQXJndW1lbnQodGhpcy5pbnN0YW50aWF0aW9uKQogICAgICA6IHRoaXMua2luZCA9IFZhcmlhYmxlVXNlS2luZC5pbnN0YW50aWF0aW9uVHlwZUFyZ3VtZW50LAogICAgICAgIHRoaXMubWVtYmVyID0gbnVsbCwKICAgICAgICB0aGlzLmxvY2FsRnVuY3Rpb24gPSBudWxsLAogICAgICAgIHRoaXMuaW52b2NhdGlvbiA9IG51bGw7CgogIHN0YXRpYyBjb25zdCBWYXJpYWJsZVVzZSBleHBsaWNpdCA9CiAgICAgIGNvbnN0IFZhcmlhYmxlVXNlLl9zaW1wbGUoVmFyaWFibGVVc2VLaW5kLmV4cGxpY2l0KTsKCiAgc3RhdGljIGNvbnN0IFZhcmlhYmxlVXNlIGxvY2FsVHlwZSA9CiAgICAgIGNvbnN0IFZhcmlhYmxlVXNlLl9zaW1wbGUoVmFyaWFibGVVc2VLaW5kLmxvY2FsVHlwZSk7CgogIHN0YXRpYyBjb25zdCBWYXJpYWJsZVVzZSBpbXBsaWNpdENhc3QgPQogICAgICBjb25zdCBWYXJpYWJsZVVzZS5fc2ltcGxlKFZhcmlhYmxlVXNlS2luZC5pbXBsaWNpdENhc3QpOwoKICBzdGF0aWMgY29uc3QgVmFyaWFibGVVc2UgbGlzdExpdGVyYWwgPQogICAgICBjb25zdCBWYXJpYWJsZVVzZS5fc2ltcGxlKFZhcmlhYmxlVXNlS2luZC5saXN0TGl0ZXJhbCk7CgogIHN0YXRpYyBjb25zdCBWYXJpYWJsZVVzZSBzZXRMaXRlcmFsID0KICAgICAgY29uc3QgVmFyaWFibGVVc2UuX3NpbXBsZShWYXJpYWJsZVVzZUtpbmQuc2V0TGl0ZXJhbCk7CgogIHN0YXRpYyBjb25zdCBWYXJpYWJsZVVzZSBtYXBMaXRlcmFsID0KICAgICAgY29uc3QgVmFyaWFibGVVc2UuX3NpbXBsZShWYXJpYWJsZVVzZUtpbmQubWFwTGl0ZXJhbCk7CgogIHN0YXRpYyBjb25zdCBWYXJpYWJsZVVzZSBmaWVsZFR5cGUgPQogICAgICBjb25zdCBWYXJpYWJsZVVzZS5fc2ltcGxlKFZhcmlhYmxlVXNlS2luZC5maWVsZFR5cGUpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+CiAgICAgIGtpbmQuaGFzaENvZGUgKiAxMSArCiAgICAgIG1lbWJlci5oYXNoQ29kZSAqIDEzICsKICAgICAgbG9jYWxGdW5jdGlvbi5oYXNoQ29kZSAqIDE3ICsKICAgICAgaW52b2NhdGlvbi5oYXNoQ29kZSAqIDE5ICsKICAgICAgaW5zdGFudGlhdGlvbi5oYXNoQ29kZSAqIDIzOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIFZhcmlhYmxlVXNlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4ga2luZCA9PSBvdGhlci5raW5kICYmCiAgICAgICAgbWVtYmVyID09IG90aGVyLm1lbWJlciAmJgogICAgICAgIGxvY2FsRnVuY3Rpb24gPT0gb3RoZXIubG9jYWxGdW5jdGlvbiAmJgogICAgICAgIGludm9jYXRpb24gPT0gb3RoZXIuaW52b2NhdGlvbiAmJgogICAgICAgIGluc3RhbnRpYXRpb24gPT0gb3RoZXIuaW5zdGFudGlhdGlvbjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdWYXJpYWJsZVVzZShraW5kPSRraW5kLG1lbWJlcj0kbWVtYmVyLCcKICAgICAgJ2xvY2FsRnVuY3Rpb249JGxvY2FsRnVuY3Rpb24saW52b2NhdGlvbj0kaW52b2NhdGlvbiwnCiAgICAgICdpbnN0YW50aWF0aW9uPSRpbnN0YW50aWF0aW9uKSc7Cn0KCmVudW0gVHlwZVZhcmlhYmxlS2luZCB7IGNscywgbWV0aG9kLCBsb2NhbCwgZnVuY3Rpb24gfQoKLy8vIEEgZmFrZSBpci5Ob2RlIHRoYXQgaG9sZHMgdGhlIFR5cGVQYXJhbWV0ZXJUeXBlIGFzIHdlbGwgYXMgdGhlIGNvbnRleHQgaW4KLy8vIHdoaWNoIGl0IG9jY3Vycy4KY2xhc3MgVHlwZVZhcmlhYmxlVHlwZVdpdGhDb250ZXh0IGltcGxlbWVudHMgaXIuTm9kZSB7CiAgZmluYWwgaXIuTm9kZSBjb250ZXh0OwogIGZpbmFsIGlyLlR5cGVQYXJhbWV0ZXJUeXBlIHR5cGU7CiAgZmluYWwgVHlwZVZhcmlhYmxlS2luZCBraW5kOwogIGZpbmFsIGlyLlRyZWVOb2RlIHR5cGVEZWNsYXJhdGlvbjsKCiAgLy8vIFtjb250ZXh0XSBjYW4gYmUgZWl0aGVyIGFuIGlyLk1lbWJlciBvciBhIGlyLkZ1bmN0aW9uRGVjbGFyYXRpb24gb3IKICAvLy8gaXIuRnVuY3Rpb25FeHByZXNzaW9uLgogIGZhY3RvcnkgVHlwZVZhcmlhYmxlVHlwZVdpdGhDb250ZXh0KAogICAgICBpci5UeXBlUGFyYW1ldGVyVHlwZSB0eXBlLCBpci5UcmVlTm9kZSBjb250ZXh0KSB7CiAgICBUeXBlVmFyaWFibGVLaW5kIGtpbmQ7CiAgICBpci5UcmVlTm9kZSB0eXBlRGVjbGFyYXRpb24gPSB0eXBlLnBhcmFtZXRlci5wYXJlbnQ7CiAgICBpZiAodHlwZURlY2xhcmF0aW9uID09IG51bGwpIHsKICAgICAgLy8gV2UgaGF2ZSBhIGZ1bmN0aW9uIHR5cGUgdmFyaWFibGUsIGxpa2UgYFRgIGluIGB2b2lkIEZ1bmN0aW9uPFQ+KGludClgLgogICAgICBraW5kID0gVHlwZVZhcmlhYmxlS2luZC5mdW5jdGlvbjsKICAgIH0gZWxzZSBpZiAodHlwZURlY2xhcmF0aW9uIGlzIGlyLkNsYXNzKSB7CiAgICAgIC8vIFdlIGhhdmUgYSBjbGFzcyB0eXBlIHZhcmlhYmxlLCBsaWtlIGBUYCBpbiBgY2xhc3MgQ2xhc3M8VD4geyAuLi4gfWAuCiAgICAgIGtpbmQgPSBUeXBlVmFyaWFibGVLaW5kLmNsczsKICAgIH0gZWxzZSBpZiAodHlwZURlY2xhcmF0aW9uLnBhcmVudCBpcyBpci5NZW1iZXIpIHsKICAgICAgaXIuTWVtYmVyIG1lbWJlciA9IHR5cGVEZWNsYXJhdGlvbi5wYXJlbnQ7CiAgICAgIGlmIChtZW1iZXIgaXMgaXIuQ29uc3RydWN0b3IgfHwKICAgICAgICAgIChtZW1iZXIgaXMgaXIuUHJvY2VkdXJlICYmIG1lbWJlci5pc0ZhY3RvcnkpKSB7CiAgICAgICAgLy8gV2UgaGF2ZSBhIHN5bnRoZXNpemVkIGdlbmVyaWMgbWV0aG9kIHR5cGUgdmFyaWFibGUgZm9yIGEgY2xhc3MgdHlwZQogICAgICAgIC8vIHZhcmlhYmxlLgogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEhhbmRsZSBjb25zdHJ1Y3Rvci9mYWN0b3J5IHR5cGUgdmFyaWFibGVzIGFzCiAgICAgICAgLy8gbWV0aG9kIHR5cGUgdmFyaWFibGVzLgogICAgICAgIGtpbmQgPSBUeXBlVmFyaWFibGVLaW5kLmNsczsKICAgICAgICB0eXBlRGVjbGFyYXRpb24gPSBtZW1iZXIuZW5jbG9zaW5nQ2xhc3M7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gV2UgaGF2ZSBhIGdlbmVyaWMgbWV0aG9kIHR5cGUgdmFyaWFibGUsIGxpa2UgYFRgIGluCiAgICAgICAgLy8gYG08VD4oKSB7IC4uLiB9YC4KICAgICAgICBraW5kID0gVHlwZVZhcmlhYmxlS2luZC5tZXRob2Q7CiAgICAgICAgdHlwZURlY2xhcmF0aW9uID0gdHlwZURlY2xhcmF0aW9uLnBhcmVudDsKICAgICAgICBjb250ZXh0ID0gdHlwZURlY2xhcmF0aW9uOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyBXZSBoYXZlIGEgZ2VuZXJpYyBsb2NhbCBmdW5jdGlvbiB0eXBlIHZhcmlhYmxlLCBsaWtlIGBUYCBpbgogICAgICAvLyBgbSgpIHsgbG9jYWw8VD4oKSB7IC4uLiB9IC4uLiB9YC4KICAgICAgYXNzZXJ0KHR5cGVEZWNsYXJhdGlvbi5wYXJlbnQgaXMgaXIuTG9jYWxGdW5jdGlvbiwKICAgICAgICAgICJVbmV4cGVjdGVkIHR5cGUgZGVjbGFyYXRpb246ICR0eXBlRGVjbGFyYXRpb24iKTsKICAgICAga2luZCA9IFR5cGVWYXJpYWJsZUtpbmQubG9jYWw7CiAgICAgIHR5cGVEZWNsYXJhdGlvbiA9IHR5cGVEZWNsYXJhdGlvbi5wYXJlbnQ7CiAgICAgIGNvbnRleHQgPSB0eXBlRGVjbGFyYXRpb247CiAgICB9CiAgICByZXR1cm4gbmV3IFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dC5pbnRlcm5hbCgKICAgICAgICB0eXBlLCBjb250ZXh0LCBraW5kLCB0eXBlRGVjbGFyYXRpb24pOwogIH0KCiAgVHlwZVZhcmlhYmxlVHlwZVdpdGhDb250ZXh0LmludGVybmFsKAogICAgICB0aGlzLnR5cGUsIHRoaXMuY29udGV4dCwgdGhpcy5raW5kLCB0aGlzLnR5cGVEZWNsYXJhdGlvbik7CgogIEBvdmVycmlkZQogIGFjY2VwdChpci5WaXNpdG9yIHYpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQuYWNjZXB0Jyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENoaWxkcmVuKGlyLlZpc2l0b3IgdikgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ1R5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dC52aXNpdENoaWxkcmVuJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHR5cGUuaGFzaENvZGU7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyEgVHlwZVZhcmlhYmxlVHlwZVdpdGhDb250ZXh0KSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHlwZSA9PSBvdGhlci50eXBlICYmIGNvbnRleHQgPT0gb3RoZXIuY29udGV4dDsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+CiAgICAgICdUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQodHlwZT0kdHlwZSxjb250ZXh0PSRjb250ZXh0LCcKICAgICAgJ2tpbmQ9JGtpbmQsdHlwZURlY2xhcmF0aW9uPSR0eXBlRGVjbGFyYXRpb24pJzsKfQqBowBOTjwBKAE8GjIdATA4KAEsPi0BDBZCBAIBGDsbNE4XKwFPTydJKgFOT01GTT1LOQFOQTknAU8zTT5OASVDPCoBQDwuKgEmGyYiGiAjLRoBDBYqNS5NFycvJRMIFBoEAgE0FzIpOUwZTiM5GSIcJyMbISQuGwFNSj4OFBIUJ1AnKjQhATI/ATwCATw5ARsyKR85TBlOIzkZDxwnIxshJC4bAUMCAU9PEBAVJy4CARcgBkoPDAE8DQEwEAFFDwFEDgFEDgFCGwFEFgFHGAFFFQE3EwE/EgE5FAFBEwEnDQEzHQIBFB4aKCgoASccIyAjASs1IyAjATE0HCAjASw2IyAjATI1HCAjATM9IyAjAS44IyAjATQ6HCMjAUU3HCMBPD8cIyABJjsBJzwBKj8BKT4BKD0BKD0BJzwBDBYbHSQhIwEMHC0tISIwKi4EAQxAPScCATcBThU3GSMfJQFKHSc4GzkjUCguTiM2MSY6TxVNIiUxDz8dKDIjCA1FKzk8JTAhBjUvBAEoQQEMGUYEAQwgTQQBDCUBDBw9OwQBDBdBNgIBJHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL2Nsb3N1cmUuZGFydCxzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pci9pbXBhY3QuZGFydMAAYC0vLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Vuc3RhYmxlL2RhcnQyanMuZGFydCcKICAgIHNob3cgb3BlcmF0b3JGcm9tU3RyaW5nOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfZW52aXJvbm1lbnQuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICdjb25zdGFudHMuZGFydCc7CmltcG9ydCAnaW1wYWN0X2RhdGEuZGFydCc7CmltcG9ydCAncnVudGltZV90eXBlX2FuYWx5c2lzLmRhcnQnOwppbXBvcnQgJ3Njb3BlLmRhcnQnOwppbXBvcnQgJ3N0YXRpY190eXBlLmRhcnQnOwppbXBvcnQgJ3N0YXRpY190eXBlX2NhY2hlLmRhcnQnOwppbXBvcnQgJ3V0aWwuZGFydCc7CgovLy8gSW50ZXJmYWNlIGZvciBjb2xsZWN0aW5nIHdvcmxkIGltcGFjdCBkYXRhLgovLy8KLy8vIFRoaXMgaXMgdXNlZCBib3RoIGZvciBkaXJlY3Qgd29ybGQgaW1wYWN0IGNvbXB1dGF0aW9uIHRocm91Z2ggdGhlCi8vLyBbS2VybmVsSW1wYWN0QnVpbGRlcl0gYW5kIGZvciBzZXJpYWxpemF0aW9uIHRocm91Z2ggdGhlIFtJbXBhY3RCdWlsZGVyXQovLy8gYW5kIFtJbXBhY3RMb2FkZXJdLgphYnN0cmFjdCBjbGFzcyBJbXBhY3RSZWdpc3RyeSB7CiAgdm9pZCByZWdpc3RlckludExpdGVyYWwoaW50IHZhbHVlKTsKCiAgdm9pZCByZWdpc3RlckRvdWJsZUxpdGVyYWwoZG91YmxlIHZhbHVlKTsKCiAgdm9pZCByZWdpc3RlckJvb2xMaXRlcmFsKGJvb2wgdmFsdWUpOwoKICB2b2lkIHJlZ2lzdGVyU3RyaW5nTGl0ZXJhbChTdHJpbmcgdmFsdWUpOwoKICB2b2lkIHJlZ2lzdGVyU3ltYm9sTGl0ZXJhbChTdHJpbmcgdmFsdWUpOwoKICB2b2lkIHJlZ2lzdGVyTnVsbExpdGVyYWwoKTsKCiAgdm9pZCByZWdpc3Rlckxpc3RMaXRlcmFsKGlyLkRhcnRUeXBlIGVsZW1lbnRUeXBlLAogICAgICB7Ym9vbCBpc0NvbnN0LCBib29sIGlzRW1wdHl9KTsKCiAgdm9pZCByZWdpc3RlclNldExpdGVyYWwoaXIuRGFydFR5cGUgZWxlbWVudFR5cGUsCiAgICAgIHtib29sIGlzQ29uc3QsIGJvb2wgaXNFbXB0eX0pOwoKICB2b2lkIHJlZ2lzdGVyTWFwTGl0ZXJhbChpci5EYXJ0VHlwZSBrZXlUeXBlLCBpci5EYXJ0VHlwZSB2YWx1ZVR5cGUsCiAgICAgIHtib29sIGlzQ29uc3QsIGJvb2wgaXNFbXB0eX0pOwoKICB2b2lkIHJlZ2lzdGVyU3RhdGljVGVhck9mZigKICAgICAgaXIuUHJvY2VkdXJlIHByb2NlZHVyZSwgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0KTsKCiAgdm9pZCByZWdpc3RlclN0YXRpY0dldChpci5NZW1iZXIgbWVtYmVyLCBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQpOwoKICB2b2lkIHJlZ2lzdGVyU3RhdGljU2V0KGlyLk1lbWJlciBtZW1iZXIsIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCk7CgogIHZvaWQgcmVnaXN0ZXJBc3NlcnQoe2Jvb2wgd2l0aE1lc3NhZ2V9KTsKCiAgdm9pZCByZWdpc3RlckdlbmVyaWNJbnN0YW50aWF0aW9uKAogICAgICBpci5GdW5jdGlvblR5cGUgZXhwcmVzc2lvblR5cGUsIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpOwoKICB2b2lkIHJlZ2lzdGVyU3luY1N0YXIoaXIuRGFydFR5cGUgZWxlbWVudFR5cGUpOwoKICB2b2lkIHJlZ2lzdGVyQXN5bmMoaXIuRGFydFR5cGUgZWxlbWVudFR5cGUpOwoKICB2b2lkIHJlZ2lzdGVyQXN5bmNTdGFyKGlyLkRhcnRUeXBlIGVsZW1lbnRUeXBlKTsKCiAgdm9pZCByZWdpc3RlclN0cmluZ0NvbmNhdGVuYXRpb24oKTsKCiAgdm9pZCByZWdpc3RlckxvY2FsRnVuY3Rpb24oaXIuVHJlZU5vZGUgbm9kZSk7CgogIHZvaWQgcmVnaXN0ZXJMb2NhbFdpdGhvdXRJbml0aWFsaXplcigpOwoKICB2b2lkIHJlZ2lzdGVySXNDaGVjayhpci5EYXJ0VHlwZSB0eXBlKTsKCiAgdm9pZCByZWdpc3RlckltcGxpY2l0Q2FzdChpci5EYXJ0VHlwZSB0eXBlKTsKCiAgdm9pZCByZWdpc3RlckFzQ2FzdChpci5EYXJ0VHlwZSB0eXBlKTsKCiAgdm9pZCByZWdpc3RlclRocm93KCk7CgogIHZvaWQgcmVnaXN0ZXJTeW5jRm9ySW4oaXIuRGFydFR5cGUgaXRlcmFibGVUeXBlLCBpci5EYXJ0VHlwZSBpdGVyYXRvclR5cGUsCiAgICAgIENsYXNzUmVsYXRpb24gaXRlcmF0b3JDbGFzc1JlbGF0aW9uKTsKCiAgdm9pZCByZWdpc3RlckFzeW5jRm9ySW4oaXIuRGFydFR5cGUgaXRlcmFibGVUeXBlLCBpci5EYXJ0VHlwZSBpdGVyYXRvclR5cGUsCiAgICAgIENsYXNzUmVsYXRpb24gaXRlcmF0b3JDbGFzc1JlbGF0aW9uKTsKCiAgdm9pZCByZWdpc3RlckNhdGNoKCk7CgogIHZvaWQgcmVnaXN0ZXJTdGFja1RyYWNlKCk7CgogIHZvaWQgcmVnaXN0ZXJDYXRjaFR5cGUoaXIuRGFydFR5cGUgdHlwZSk7CgogIHZvaWQgcmVnaXN0ZXJUeXBlTGl0ZXJhbChpci5EYXJ0VHlwZSB0eXBlLCBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQpOwoKICB2b2lkIHJlZ2lzdGVyRmllbGRJbml0aWFsaXphdGlvbihpci5GaWVsZCBub2RlKTsKCiAgdm9pZCByZWdpc3RlckZpZWxkQ29uc3RhbnRJbml0aWFsaXphdGlvbigKICAgICAgaXIuRmllbGQgbm9kZSwgQ29uc3RhbnRSZWZlcmVuY2UgY29uc3RhbnQpOwoKICB2b2lkIHJlZ2lzdGVyTG9hZExpYnJhcnkoKTsKCiAgdm9pZCByZWdpc3RlclJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIoCiAgICAgIGlyLkNvbnN0cnVjdG9yIGNvbnN0cnVjdG9yLAogICAgICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLAogICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKTsKCiAgdm9pZCByZWdpc3RlclBhcmFtZXRlckNoZWNrKGlyLkRhcnRUeXBlIHR5cGUpOwoKICB2b2lkIHJlZ2lzdGVyTGF6eUZpZWxkKCk7CgogIHZvaWQgcmVnaXN0ZXJOZXcoCiAgICAgIGlyLk1lbWJlciBjb25zdHJ1Y3RvciwKICAgICAgaXIuSW50ZXJmYWNlVHlwZSB0eXBlLAogICAgICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLAogICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQsCiAgICAgIHtib29sIGlzQ29uc3R9KTsKCiAgdm9pZCByZWdpc3RlckNvbnN0SW5zdGFudGlhdGlvbihpci5DbGFzcyBjbHMsIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCk7CgogIHZvaWQgcmVnaXN0ZXJTdGF0aWNJbnZvY2F0aW9uKAogICAgICBpci5Qcm9jZWR1cmUgdGFyZ2V0LAogICAgICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLAogICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQpOwoKICB2b2lkIHJlZ2lzdGVyTG9jYWxGdW5jdGlvbkludm9jYXRpb24oCiAgICAgIGlyLkZ1bmN0aW9uRGVjbGFyYXRpb24gbG9jYWxGdW5jdGlvbiwKICAgICAgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywKICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyk7CgogIHZvaWQgcmVnaXN0ZXJEeW5hbWljSW52b2NhdGlvbigKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLAogICAgICBDbGFzc1JlbGF0aW9uIHJlbGF0aW9uLAogICAgICBpci5OYW1lIG5hbWUsCiAgICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsCiAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpOwoKICB2b2lkIHJlZ2lzdGVySW5zdGFuY2VJbnZvY2F0aW9uKAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsCiAgICAgIENsYXNzUmVsYXRpb24gcmVsYXRpb24sCiAgICAgIGlyLk1lbWJlciB0YXJnZXQsCiAgICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsCiAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpOwoKICB2b2lkIHJlZ2lzdGVyRnVuY3Rpb25JbnZvY2F0aW9uKAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsCiAgICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsCiAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpOwoKICB2b2lkIHJlZ2lzdGVyRHluYW1pY0dldCgKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBDbGFzc1JlbGF0aW9uIHJlbGF0aW9uLCBpci5OYW1lIG5hbWUpOwoKICB2b2lkIHJlZ2lzdGVySW5zdGFuY2VHZXQoCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwgQ2xhc3NSZWxhdGlvbiByZWxhdGlvbiwgaXIuTWVtYmVyIHRhcmdldCk7CgogIHZvaWQgcmVnaXN0ZXJEeW5hbWljU2V0KAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsIENsYXNzUmVsYXRpb24gcmVsYXRpb24sIGlyLk5hbWUgbmFtZSk7CgogIHZvaWQgcmVnaXN0ZXJJbnN0YW5jZVNldCgKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBDbGFzc1JlbGF0aW9uIHJlbGF0aW9uLCBpci5NZW1iZXIgdGFyZ2V0KTsKCiAgdm9pZCByZWdpc3RlclN1cGVySW52b2NhdGlvbihpci5OYW1lIG5hbWUsIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpOwoKICB2b2lkIHJlZ2lzdGVyU3VwZXJHZXQoaXIuTmFtZSBuYW1lKTsKCiAgdm9pZCByZWdpc3RlclN1cGVyU2V0KGlyLk5hbWUgbmFtZSk7CgogIHZvaWQgcmVnaXN0ZXJTdXBlckluaXRpYWxpemVyKAogICAgICBpci5Db25zdHJ1Y3RvciBzb3VyY2UsCiAgICAgIGlyLkNvbnN0cnVjdG9yIHRhcmdldCwKICAgICAgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywKICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyk7CgogIHZvaWQgcmVnaXN0ZXJSdW50aW1lVHlwZVVzZShpci5Qcm9wZXJ0eUdldCBub2RlLCBSdW50aW1lVHlwZVVzZUtpbmQga2luZCwKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBpci5EYXJ0VHlwZSBhcmd1bWVudFR5cGUpOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhlc2Ugd2hlbiBDRkUgcHJvdmlkZXMgY29uc3RhbnRzLgogIHZvaWQgcmVnaXN0ZXJDb25zdHJ1Y3Rvck5vZGUoaXIuQ29uc3RydWN0b3Igbm9kZSk7CiAgdm9pZCByZWdpc3RlckZpZWxkTm9kZShpci5GaWVsZCBub2RlKTsKICB2b2lkIHJlZ2lzdGVyUHJvY2VkdXJlTm9kZShpci5Qcm9jZWR1cmUgbm9kZSk7CiAgdm9pZCByZWdpc3RlclN0YXRpY0ludm9jYXRpb25Ob2RlKGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSk7CiAgdm9pZCByZWdpc3RlclN3aXRjaFN0YXRlbWVudE5vZGUoaXIuU3dpdGNoU3RhdGVtZW50IG5vZGUpOwogIHZvaWQgcmVnaXN0ZXJDb25zdENvbnN0cnVjdG9ySW52b2NhdGlvbk5vZGUoaXIuQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUpOwp9CgphYnN0cmFjdCBjbGFzcyBJbXBhY3RCdWlsZGVyQmFzZSBleHRlbmRzIFN0YXRpY1R5cGVWaXNpdG9yCiAgICBpbXBsZW1lbnRzIEltcGFjdFJlZ2lzdHJ5IHsKICBAb3ZlcnJpZGUKICBmaW5hbCBWYXJpYWJsZVNjb3BlTW9kZWwgdmFyaWFibGVTY29wZU1vZGVsOwoKICBJbXBhY3RCdWlsZGVyQmFzZShpci5UeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50LAogICAgICBpci5DbGFzc0hpZXJhcmNoeSBjbGFzc0hpZXJhcmNoeSwgdGhpcy52YXJpYWJsZVNjb3BlTW9kZWwpCiAgICAgIDogc3VwZXIodHlwZUVudmlyb25tZW50LCBjbGFzc0hpZXJhcmNoeSk7CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW50TGl0ZXJhbChpci5JbnRMaXRlcmFsIG5vZGUpIHsKICAgIHJlZ2lzdGVySW50TGl0ZXJhbChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRG91YmxlTGl0ZXJhbChpci5Eb3VibGVMaXRlcmFsIG5vZGUpIHsKICAgIHJlZ2lzdGVyRG91YmxlTGl0ZXJhbChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQm9vbExpdGVyYWwoaXIuQm9vbExpdGVyYWwgbm9kZSkgewogICAgcmVnaXN0ZXJCb29sTGl0ZXJhbChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3RyaW5nTGl0ZXJhbChpci5TdHJpbmdMaXRlcmFsIG5vZGUpIHsKICAgIHJlZ2lzdGVyU3RyaW5nTGl0ZXJhbChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3ltYm9sTGl0ZXJhbChpci5TeW1ib2xMaXRlcmFsIG5vZGUpIHsKICAgIHJlZ2lzdGVyU3ltYm9sTGl0ZXJhbChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTnVsbExpdGVyYWwoaXIuTnVsbExpdGVyYWwgbm9kZSkgewogICAgcmVnaXN0ZXJOdWxsTGl0ZXJhbCgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVMaXN0TGl0ZXJhbChpci5MaXN0TGl0ZXJhbCBub2RlKSB7CiAgICByZWdpc3Rlckxpc3RMaXRlcmFsKG5vZGUudHlwZUFyZ3VtZW50LAogICAgICAgIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCwgaXNFbXB0eTogbm9kZS5leHByZXNzaW9ucy5pc0VtcHR5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU2V0TGl0ZXJhbChpci5TZXRMaXRlcmFsIG5vZGUpIHsKICAgIHJlZ2lzdGVyU2V0TGl0ZXJhbChub2RlLnR5cGVBcmd1bWVudCwKICAgICAgICBpc0NvbnN0OiBub2RlLmlzQ29uc3QsIGlzRW1wdHk6IG5vZGUuZXhwcmVzc2lvbnMuaXNFbXB0eSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU1hcExpdGVyYWwoaXIuTWFwTGl0ZXJhbCBub2RlKSB7CiAgICByZWdpc3Rlck1hcExpdGVyYWwobm9kZS5rZXlUeXBlLCBub2RlLnZhbHVlVHlwZSwKICAgICAgICBpc0NvbnN0OiBub2RlLmlzQ29uc3QsIGlzRW1wdHk6IG5vZGUuZW50cmllcy5pc0VtcHR5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3RhdGljR2V0KGlyLlN0YXRpY0dldCBub2RlLCBpci5EYXJ0VHlwZSByZXN1bHRUeXBlKSB7CiAgICBpci5NZW1iZXIgdGFyZ2V0ID0gbm9kZS50YXJnZXQ7CiAgICBpZiAodGFyZ2V0IGlzIGlyLlByb2NlZHVyZSAmJiB0YXJnZXQua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLk1ldGhvZCkgewogICAgICByZWdpc3RlclN0YXRpY1RlYXJPZmYodGFyZ2V0LCBnZXREZWZlcnJlZEltcG9ydChub2RlKSk7CiAgICB9IGVsc2UgewogICAgICByZWdpc3RlclN0YXRpY0dldCh0YXJnZXQsIGdldERlZmVycmVkSW1wb3J0KG5vZGUpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3RhdGljU2V0KGlyLlN0YXRpY1NldCBub2RlLCBpci5EYXJ0VHlwZSB2YWx1ZVR5cGUpIHsKICAgIHJlZ2lzdGVyU3RhdGljU2V0KG5vZGUudGFyZ2V0LCBnZXREZWZlcnJlZEltcG9ydChub2RlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUFzc2VydFN0YXRlbWVudChpci5Bc3NlcnRTdGF0ZW1lbnQgbm9kZSkgewogICAgcmVnaXN0ZXJBc3NlcnQod2l0aE1lc3NhZ2U6IG5vZGUubWVzc2FnZSAhPSBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW5zdGFudGlhdGlvbihpci5JbnN0YW50aWF0aW9uIG5vZGUsCiAgICAgIGlyLkZ1bmN0aW9uVHlwZSBleHByZXNzaW9uVHlwZSwgaXIuRGFydFR5cGUgcmVzdWx0VHlwZSkgewogICAgcmVnaXN0ZXJHZW5lcmljSW5zdGFudGlhdGlvbihleHByZXNzaW9uVHlwZSwgbm9kZS50eXBlQXJndW1lbnRzKTsKICB9CgogIHZvaWQgaGFuZGxlQXN5bmNNYXJrZXIoaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uKSB7CiAgICBpci5Bc3luY01hcmtlciBhc3luY01hcmtlciA9IGZ1bmN0aW9uLmFzeW5jTWFya2VyOwogICAgaXIuRGFydFR5cGUgcmV0dXJuVHlwZSA9IGZ1bmN0aW9uLnJldHVyblR5cGU7CgogICAgc3dpdGNoIChhc3luY01hcmtlcikgewogICAgICBjYXNlIGlyLkFzeW5jTWFya2VyLlN5bmM6CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgaXIuQXN5bmNNYXJrZXIuU3luY1N0YXI6CiAgICAgICAgaXIuRGFydFR5cGUgZWxlbWVudFR5cGUgPSBjb25zdCBpci5EeW5hbWljVHlwZSgpOwogICAgICAgIGlmIChyZXR1cm5UeXBlIGlzIGlyLkludGVyZmFjZVR5cGUpIHsKICAgICAgICAgIGlmIChyZXR1cm5UeXBlLmNsYXNzTm9kZSA9PSB0eXBlRW52aXJvbm1lbnQuY29yZVR5cGVzLml0ZXJhYmxlQ2xhc3MpIHsKICAgICAgICAgICAgZWxlbWVudFR5cGUgPSByZXR1cm5UeXBlLnR5cGVBcmd1bWVudHMuZmlyc3Q7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJlZ2lzdGVyU3luY1N0YXIoZWxlbWVudFR5cGUpOwogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBpci5Bc3luY01hcmtlci5Bc3luYzoKICAgICAgICBpci5EYXJ0VHlwZSBlbGVtZW50VHlwZSA9IGNvbnN0IGlyLkR5bmFtaWNUeXBlKCk7CiAgICAgICAgaWYgKHJldHVyblR5cGUgaXMgaXIuSW50ZXJmYWNlVHlwZSkgewogICAgICAgICAgaWYgKHJldHVyblR5cGUuY2xhc3NOb2RlID09IHR5cGVFbnZpcm9ubWVudC5jb3JlVHlwZXMuZnV0dXJlT3JDbGFzcykgewogICAgICAgICAgICBlbGVtZW50VHlwZSA9IHJldHVyblR5cGUudHlwZUFyZ3VtZW50cy5maXJzdDsKICAgICAgICAgIH0gZWxzZSBpZiAocmV0dXJuVHlwZS5jbGFzc05vZGUgPT0KICAgICAgICAgICAgICB0eXBlRW52aXJvbm1lbnQuY29yZVR5cGVzLmZ1dHVyZUNsYXNzKSB7CiAgICAgICAgICAgIGVsZW1lbnRUeXBlID0gcmV0dXJuVHlwZS50eXBlQXJndW1lbnRzLmZpcnN0OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZWdpc3RlckFzeW5jKGVsZW1lbnRUeXBlKTsKICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgaXIuQXN5bmNNYXJrZXIuQXN5bmNTdGFyOgogICAgICAgIGlyLkRhcnRUeXBlIGVsZW1lbnRUeXBlID0gY29uc3QgaXIuRHluYW1pY1R5cGUoKTsKICAgICAgICBpZiAocmV0dXJuVHlwZSBpcyBpci5JbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgICBpZiAocmV0dXJuVHlwZS5jbGFzc05vZGUgPT0gdHlwZUVudmlyb25tZW50LmNvcmVUeXBlcy5zdHJlYW1DbGFzcykgewogICAgICAgICAgICBlbGVtZW50VHlwZSA9IHJldHVyblR5cGUudHlwZUFyZ3VtZW50cy5maXJzdDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmVnaXN0ZXJBc3luY1N0YXIoZWxlbWVudFR5cGUpOwogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBpci5Bc3luY01hcmtlci5TeW5jWWllbGRpbmc6CiAgICAgICAgZmFpbGVkQXQoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICAgIlVuZXhwZWN0ZWQgYXN5bmMgbWFya2VyOiAke2FzeW5jTWFya2VyfSIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVTdHJpbmdDb25jYXRlbmF0aW9uKGlyLlN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSkgewogICAgcmVnaXN0ZXJTdHJpbmdDb25jYXRlbmF0aW9uKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBOdWxsIGhhbmRsZUZ1bmN0aW9uRGVjbGFyYXRpb24oaXIuRnVuY3Rpb25EZWNsYXJhdGlvbiBub2RlKSB7CiAgICByZWdpc3RlckxvY2FsRnVuY3Rpb24obm9kZSk7CiAgICBoYW5kbGVBc3luY01hcmtlcihub2RlLmZ1bmN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRnVuY3Rpb25FeHByZXNzaW9uKGlyLkZ1bmN0aW9uRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZWdpc3RlckxvY2FsRnVuY3Rpb24obm9kZSk7CiAgICBoYW5kbGVBc3luY01hcmtlcihub2RlLmZ1bmN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVmFyaWFibGVEZWNsYXJhdGlvbihpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIGlmIChub2RlLmluaXRpYWxpemVyID09IG51bGwpIHsKICAgICAgcmVnaXN0ZXJMb2NhbFdpdGhvdXRJbml0aWFsaXplcigpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJc0V4cHJlc3Npb24oaXIuSXNFeHByZXNzaW9uIG5vZGUpIHsKICAgIHJlZ2lzdGVySXNDaGVjayhub2RlLnR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVBc0V4cHJlc3Npb24oaXIuQXNFeHByZXNzaW9uIG5vZGUsIGlyLkRhcnRUeXBlIG9wZXJhbmRUeXBlKSB7CiAgICBpZiAodHlwZUVudmlyb25tZW50LmlzU3VidHlwZU9mKG9wZXJhbmRUeXBlLCBub2RlLnR5cGUpKSB7CiAgICAgIC8vIFNraXAgdW5uZWVkZWQgY2FzdHMuCiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChub2RlLmlzVHlwZUVycm9yKSB7CiAgICAgIHJlZ2lzdGVySW1wbGljaXRDYXN0KG5vZGUudHlwZSk7CiAgICB9IGVsc2UgewogICAgICByZWdpc3RlckFzQ2FzdChub2RlLnR5cGUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVUaHJvdyhpci5UaHJvdyBub2RlKSB7CiAgICByZWdpc3RlclRocm93KCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUZvckluU3RhdGVtZW50KGlyLkZvckluU3RhdGVtZW50IG5vZGUsIGlyLkRhcnRUeXBlIGl0ZXJhYmxlVHlwZSwKICAgICAgaXIuRGFydFR5cGUgaXRlcmF0b3JUeXBlKSB7CiAgICBpZiAobm9kZS5pc0FzeW5jKSB7CiAgICAgIHJlZ2lzdGVyQXN5bmNGb3JJbihpdGVyYWJsZVR5cGUsIGl0ZXJhdG9yVHlwZSwKICAgICAgICAgIGNvbXB1dGVDbGFzc1JlbGF0aW9uRnJvbVR5cGUoaXRlcmF0b3JUeXBlKSk7CiAgICB9IGVsc2UgewogICAgICByZWdpc3RlclN5bmNGb3JJbihpdGVyYWJsZVR5cGUsIGl0ZXJhdG9yVHlwZSwKICAgICAgICAgIGNvbXB1dGVDbGFzc1JlbGF0aW9uRnJvbVR5cGUoaXRlcmF0b3JUeXBlKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNhdGNoKGlyLkNhdGNoIG5vZGUpIHsKICAgIHJlZ2lzdGVyQ2F0Y2goKTsKICAgIGlmIChub2RlLnN0YWNrVHJhY2UgIT0gbnVsbCkgewogICAgICByZWdpc3RlclN0YWNrVHJhY2UoKTsKICAgIH0KICAgIGlmIChub2RlLmd1YXJkIGlzISBpci5EeW5hbWljVHlwZSkgewogICAgICByZWdpc3RlckNhdGNoVHlwZShub2RlLmd1YXJkKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVHlwZUxpdGVyYWwoaXIuVHlwZUxpdGVyYWwgbm9kZSkgewogICAgcmVnaXN0ZXJUeXBlTGl0ZXJhbChub2RlLnR5cGUsIGdldERlZmVycmVkSW1wb3J0KG5vZGUpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRmllbGRJbml0aWFsaXplcihpci5GaWVsZEluaXRpYWxpemVyIG5vZGUpIHsKICAgIHJlZ2lzdGVyRmllbGRJbml0aWFsaXphdGlvbihub2RlLmZpZWxkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTG9hZExpYnJhcnkoaXIuTG9hZExpYnJhcnkgbm9kZSkgewogICAgcmVnaXN0ZXJMb2FkTGlicmFyeSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVSZWRpcmVjdGluZ0luaXRpYWxpemVyKAogICAgICBpci5SZWRpcmVjdGluZ0luaXRpYWxpemVyIG5vZGUsIEFyZ3VtZW50VHlwZXMgYXJndW1lbnRUeXBlcykgewogICAgcmVnaXN0ZXJSZWRpcmVjdGluZ0luaXRpYWxpemVyKAogICAgICAgIG5vZGUudGFyZ2V0LAogICAgICAgIG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoLAogICAgICAgIF9nZXROYW1lZEFyZ3VtZW50cyhub2RlLmFyZ3VtZW50cyksCiAgICAgICAgbm9kZS5hcmd1bWVudHMudHlwZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVQYXJhbWV0ZXIoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBwYXJhbWV0ZXIpIHsKICAgIHJlZ2lzdGVyUGFyYW1ldGVyQ2hlY2socGFyYW1ldGVyLnR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVTaWduYXR1cmUoaXIuRnVuY3Rpb25Ob2RlIG5vZGUpIHsKICAgIGZvciAoaXIuVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIgaW4gbm9kZS50eXBlUGFyYW1ldGVycykgewogICAgICByZWdpc3RlclBhcmFtZXRlckNoZWNrKHBhcmFtZXRlci5ib3VuZCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNvbnN0cnVjdG9yKGlyLkNvbnN0cnVjdG9yIG5vZGUpIHsKICAgIHJlZ2lzdGVyQ29uc3RydWN0b3JOb2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVGaWVsZChpci5GaWVsZCBmaWVsZCkgewogICAgcmVnaXN0ZXJQYXJhbWV0ZXJDaGVjayhmaWVsZC50eXBlKTsKICAgIGlmIChmaWVsZC5pbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgIGlmICghZmllbGQuaXNJbnN0YW5jZU1lbWJlciAmJgogICAgICAgICAgIWZpZWxkLmlzQ29uc3QgJiYKICAgICAgICAgIGZpZWxkLmluaXRpYWxpemVyIGlzISBpci5OdWxsTGl0ZXJhbCkgewogICAgICAgIHJlZ2lzdGVyTGF6eUZpZWxkKCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJlZ2lzdGVyTnVsbExpdGVyYWwoKTsKICAgIH0KICAgIHJlZ2lzdGVyRmllbGROb2RlKGZpZWxkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlUHJvY2VkdXJlKGlyLlByb2NlZHVyZSBwcm9jZWR1cmUpIHsKICAgIGhhbmRsZUFzeW5jTWFya2VyKHByb2NlZHVyZS5mdW5jdGlvbik7CiAgICByZWdpc3RlclByb2NlZHVyZU5vZGUocHJvY2VkdXJlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ29uc3RydWN0b3JJbnZvY2F0aW9uKGlyLkNvbnN0cnVjdG9ySW52b2NhdGlvbiBub2RlLAogICAgICBBcmd1bWVudFR5cGVzIGFyZ3VtZW50VHlwZXMsIGlyLkRhcnRUeXBlIHJlc3VsdFR5cGUpIHsKICAgIHJlZ2lzdGVyTmV3KAogICAgICAgIG5vZGUudGFyZ2V0LAogICAgICAgIG5vZGUuY29uc3RydWN0ZWRUeXBlLAogICAgICAgIG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoLAogICAgICAgIF9nZXROYW1lZEFyZ3VtZW50cyhub2RlLmFyZ3VtZW50cyksCiAgICAgICAgbm9kZS5hcmd1bWVudHMudHlwZXMsCiAgICAgICAgZ2V0RGVmZXJyZWRJbXBvcnQobm9kZSksCiAgICAgICAgaXNDb25zdDogbm9kZS5pc0NvbnN0KTsKICAgIGlmIChub2RlLmlzQ29uc3QpIHsKICAgICAgcmVnaXN0ZXJDb25zdENvbnN0cnVjdG9ySW52b2NhdGlvbk5vZGUobm9kZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVN0YXRpY0ludm9jYXRpb24oaXIuU3RhdGljSW52b2NhdGlvbiBub2RlLAogICAgICBBcmd1bWVudFR5cGVzIGFyZ3VtZW50VHlwZXMsIGlyLkRhcnRUeXBlIHJldHVyblR5cGUpIHsKICAgIGludCBwb3NpdGlvbkFyZ3VtZW50cyA9IG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoOwogICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzID0gX2dldE5hbWVkQXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKTsKICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPSBub2RlLmFyZ3VtZW50cy50eXBlczsKICAgIGlmIChub2RlLnRhcmdldC5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuRmFjdG9yeSkgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBXZSBzaG91bGQgbm90IG1hcmsgdGhlIHR5cGUgYXMgaW5zdGFudGlhdGVkIGJ1dAogICAgICAvLyByYXRoZXIgZm9sbG93IHRoZSB0eXBlIGFyZ3VtZW50cyBkaXJlY3RseS4KICAgICAgLy8KICAgICAgLy8gQ29uc2lkZXIgdGhpczoKICAgICAgLy8KICAgICAgLy8gICAgYWJzdHJhY3QgY2xhc3MgQTxUPiB7CiAgICAgIC8vICAgICAgZmFjdG9yeSBBLnJlZ3VsYXIoKSA9PiBuZXcgQjxUPigpOwogICAgICAvLyAgICAgIGZhY3RvcnkgQS5yZWRpcmVjdCgpID0gQjxUPjsKICAgICAgLy8gICAgfQogICAgICAvLwogICAgICAvLyAgICBjbGFzcyBCPFQ+IGltcGxlbWVudHMgQTxUPiB7fQogICAgICAvLwogICAgICAvLyAgICBtYWluKCkgewogICAgICAvLyAgICAgIHByaW50KG5ldyBBPGludD4ucmVndWxhcigpIGlzIEI8aW50Pik7CiAgICAgIC8vICAgICAgcHJpbnQobmV3IEE8U3RyaW5nPi5yZWRpcmVjdCgpIGlzIEI8U3RyaW5nPik7CiAgICAgIC8vICAgIH0KICAgICAgLy8KICAgICAgLy8gVG8gdHJhY2sgdGhhdCBCIGlzIGFjdHVhbGx5IGluc3RhbnRpYXRlZCBhcyBCPGludD4gYW5kIEI8U3RyaW5nPiB3ZQogICAgICAvLyBuZWVkIHRvIGZvbGxvdyB0aGUgdHlwZSBhcmd1bWVudHMgcGFzc2VkIHRvIEEucmVndWxhciBhbmQgQS5yZWRpcmVjdAogICAgICAvLyB0byBCLiBDdXJyZW50bHksIHdlIG9ubHkgZG8gdGhpcyBzb3VuZGx5IGlmIHdlIHJlZ2lzdGVyIEE8aW50PiBhbmQKICAgICAgLy8gQTxTdHJpbmc+IGFzIGluc3RhbnRpYXRlZC4gV2Ugc2hvdWxkIGluc3RlYWQgcmVnaXN0ZXIgdGhhdCBBLlQgaXMKICAgICAgLy8gaW5zdGFudGlhdGVkIGFzIGludCBhbmQgU3RyaW5nLgogICAgICByZWdpc3Rlck5ldygKICAgICAgICAgIG5vZGUudGFyZ2V0LAogICAgICAgICAgbmV3IGlyLkludGVyZmFjZVR5cGUobm9kZS50YXJnZXQuZW5jbG9zaW5nQ2xhc3MsIHR5cGVBcmd1bWVudHMpLAogICAgICAgICAgcG9zaXRpb25Bcmd1bWVudHMsCiAgICAgICAgICBuYW1lZEFyZ3VtZW50cywKICAgICAgICAgIG5vZGUuYXJndW1lbnRzLnR5cGVzLAogICAgICAgICAgZ2V0RGVmZXJyZWRJbXBvcnQobm9kZSksCiAgICAgICAgICBpc0NvbnN0OiBub2RlLmlzQ29uc3QpOwogICAgfSBlbHNlIHsKICAgICAgcmVnaXN0ZXJTdGF0aWNJbnZvY2F0aW9uKG5vZGUudGFyZ2V0LCBwb3NpdGlvbkFyZ3VtZW50cywgbmFtZWRBcmd1bWVudHMsCiAgICAgICAgICB0eXBlQXJndW1lbnRzLCBnZXREZWZlcnJlZEltcG9ydChub2RlKSk7CiAgICB9CiAgICByZWdpc3RlclN0YXRpY0ludm9jYXRpb25Ob2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVNZXRob2RJbnZvY2F0aW9uKAogICAgICBpci5NZXRob2RJbnZvY2F0aW9uIG5vZGUsCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwKICAgICAgQXJndW1lbnRUeXBlcyBhcmd1bWVudFR5cGVzLAogICAgICBpci5EYXJ0VHlwZSByZXR1cm5UeXBlKSB7CiAgICBpbnQgcG9zaXRpb25Bcmd1bWVudHMgPSBub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aDsKICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cyA9IF9nZXROYW1lZEFyZ3VtZW50cyhub2RlLmFyZ3VtZW50cyk7CiAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0gbm9kZS5hcmd1bWVudHMudHlwZXM7CiAgICBpci5FeHByZXNzaW9uIHJlY2VpdmVyID0gbm9kZS5yZWNlaXZlcjsKICAgIGlmIChyZWNlaXZlciBpcyBpci5WYXJpYWJsZUdldCAmJgogICAgICAgIHJlY2VpdmVyLnZhcmlhYmxlLmlzRmluYWwgJiYKICAgICAgICByZWNlaXZlci52YXJpYWJsZS5wYXJlbnQgaXMgaXIuRnVuY3Rpb25EZWNsYXJhdGlvbikgewogICAgICByZWdpc3RlckxvY2FsRnVuY3Rpb25JbnZvY2F0aW9uKHJlY2VpdmVyLnZhcmlhYmxlLnBhcmVudCwKICAgICAgICAgIHBvc2l0aW9uQXJndW1lbnRzLCBuYW1lZEFyZ3VtZW50cywgdHlwZUFyZ3VtZW50cyk7CiAgICB9IGVsc2UgewogICAgICBDbGFzc1JlbGF0aW9uIHJlbGF0aW9uID0gY29tcHV0ZUNsYXNzUmVsYXRpb25Gcm9tVHlwZShyZWNlaXZlclR5cGUpOwoKICAgICAgaXIuTWVtYmVyIGludGVyZmFjZVRhcmdldCA9IG5vZGUuaW50ZXJmYWNlVGFyZ2V0OwogICAgICBpZiAoaW50ZXJmYWNlVGFyZ2V0ID09IG51bGwpIHsKICAgICAgICByZWdpc3RlckR5bmFtaWNJbnZvY2F0aW9uKHJlY2VpdmVyVHlwZSwgcmVsYXRpb24sIG5vZGUubmFtZSwKICAgICAgICAgICAgcG9zaXRpb25Bcmd1bWVudHMsIG5hbWVkQXJndW1lbnRzLCB0eXBlQXJndW1lbnRzKTsKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBdm9pZCB0cmVhdGluZyBhIGtub3duIGZ1bmN0aW9uIGNhbGwgYXMgYQogICAgICAgIC8vIGR5bmFtaWMgY2FsbCB3aGVuIENGRSBwcm92aWRlcyBhIHdheSB0byBkaXN0aW5ndWlzaCB0aGUgdHdvLgogICAgICAgIGlmIChvcGVyYXRvckZyb21TdHJpbmcobm9kZS5uYW1lLm5hbWUpID09IG51bGwgJiYKICAgICAgICAgICAgcmVjZWl2ZXJUeXBlIGlzIGlyLkR5bmFtaWNUeXBlKSB7CiAgICAgICAgICAvLyBXZSBtaWdodCBpbXBsaWNpdGx5IGNhbGwgYSBnZXR0ZXIgdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24uCiAgICAgICAgICByZWdpc3RlckZ1bmN0aW9uSW52b2NhdGlvbihjb25zdCBpci5EeW5hbWljVHlwZSgpLCBwb3NpdGlvbkFyZ3VtZW50cywKICAgICAgICAgICAgICBuYW1lZEFyZ3VtZW50cywgdHlwZUFyZ3VtZW50cyk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmIChpbnRlcmZhY2VUYXJnZXQgaXMgaXIuRmllbGQgfHwKICAgICAgICAgICAgaW50ZXJmYWNlVGFyZ2V0IGlzIGlyLlByb2NlZHVyZSAmJgogICAgICAgICAgICAgICAgaW50ZXJmYWNlVGFyZ2V0LmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5HZXR0ZXIpIHsKICAgICAgICAgIHJlZ2lzdGVySW5zdGFuY2VJbnZvY2F0aW9uKHJlY2VpdmVyVHlwZSwgcmVsYXRpb24sIGludGVyZmFjZVRhcmdldCwKICAgICAgICAgICAgICBwb3NpdGlvbkFyZ3VtZW50cywgbmFtZWRBcmd1bWVudHMsIHR5cGVBcmd1bWVudHMpOwogICAgICAgICAgcmVnaXN0ZXJGdW5jdGlvbkludm9jYXRpb24oaW50ZXJmYWNlVGFyZ2V0LmdldHRlclR5cGUsCiAgICAgICAgICAgICAgcG9zaXRpb25Bcmd1bWVudHMsIG5hbWVkQXJndW1lbnRzLCB0eXBlQXJndW1lbnRzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVnaXN0ZXJJbnN0YW5jZUludm9jYXRpb24ocmVjZWl2ZXJUeXBlLCByZWxhdGlvbiwgaW50ZXJmYWNlVGFyZ2V0LAogICAgICAgICAgICAgIHBvc2l0aW9uQXJndW1lbnRzLCBuYW1lZEFyZ3VtZW50cywgdHlwZUFyZ3VtZW50cyk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZURpcmVjdE1ldGhvZEludm9jYXRpb24oCiAgICAgIGlyLkRpcmVjdE1ldGhvZEludm9jYXRpb24gbm9kZSwKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLAogICAgICBBcmd1bWVudFR5cGVzIGFyZ3VtZW50VHlwZXMsCiAgICAgIGlyLkRhcnRUeXBlIHJldHVyblR5cGUpIHsKICAgIHJlZ2lzdGVySW5zdGFuY2VJbnZvY2F0aW9uKAogICAgICAgIHJlY2VpdmVyVHlwZSwKICAgICAgICBDbGFzc1JlbGF0aW9uLmV4YWN0LAogICAgICAgIG5vZGUudGFyZ2V0LAogICAgICAgIG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoLAogICAgICAgIF9nZXROYW1lZEFyZ3VtZW50cyhub2RlLmFyZ3VtZW50cyksCiAgICAgICAgbm9kZS5hcmd1bWVudHMudHlwZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVQcm9wZXJ0eUdldCgKICAgICAgaXIuUHJvcGVydHlHZXQgbm9kZSwgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBpci5EYXJ0VHlwZSByZXN1bHRUeXBlKSB7CiAgICBDbGFzc1JlbGF0aW9uIHJlbGF0aW9uID0gY29tcHV0ZUNsYXNzUmVsYXRpb25Gcm9tVHlwZShyZWNlaXZlclR5cGUpOwogICAgaWYgKG5vZGUuaW50ZXJmYWNlVGFyZ2V0ICE9IG51bGwpIHsKICAgICAgcmVnaXN0ZXJJbnN0YW5jZUdldChyZWNlaXZlclR5cGUsIHJlbGF0aW9uLCBub2RlLmludGVyZmFjZVRhcmdldCk7CiAgICB9IGVsc2UgewogICAgICByZWdpc3RlckR5bmFtaWNHZXQocmVjZWl2ZXJUeXBlLCByZWxhdGlvbiwgbm9kZS5uYW1lKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRGlyZWN0UHJvcGVydHlHZXQoaXIuRGlyZWN0UHJvcGVydHlHZXQgbm9kZSwKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBpci5EYXJ0VHlwZSByZXN1bHRUeXBlKSB7CiAgICByZWdpc3Rlckluc3RhbmNlR2V0KHJlY2VpdmVyVHlwZSwgQ2xhc3NSZWxhdGlvbi5leGFjdCwgbm9kZS50YXJnZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVQcm9wZXJ0eVNldCgKICAgICAgaXIuUHJvcGVydHlTZXQgbm9kZSwgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBpci5EYXJ0VHlwZSB2YWx1ZVR5cGUpIHsKICAgIENsYXNzUmVsYXRpb24gcmVsYXRpb24gPSBjb21wdXRlQ2xhc3NSZWxhdGlvbkZyb21UeXBlKHJlY2VpdmVyVHlwZSk7CiAgICBpZiAobm9kZS5pbnRlcmZhY2VUYXJnZXQgIT0gbnVsbCkgewogICAgICByZWdpc3Rlckluc3RhbmNlU2V0KHJlY2VpdmVyVHlwZSwgcmVsYXRpb24sIG5vZGUuaW50ZXJmYWNlVGFyZ2V0KTsKICAgIH0gZWxzZSB7CiAgICAgIHJlZ2lzdGVyRHluYW1pY1NldChyZWNlaXZlclR5cGUsIHJlbGF0aW9uLCBub2RlLm5hbWUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVEaXJlY3RQcm9wZXJ0eVNldChpci5EaXJlY3RQcm9wZXJ0eVNldCBub2RlLAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsIGlyLkRhcnRUeXBlIHZhbHVlVHlwZSkgewogICAgcmVnaXN0ZXJJbnN0YW5jZVNldChyZWNlaXZlclR5cGUsIENsYXNzUmVsYXRpb24uZXhhY3QsIG5vZGUudGFyZ2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3VwZXJNZXRob2RJbnZvY2F0aW9uKGlyLlN1cGVyTWV0aG9kSW52b2NhdGlvbiBub2RlLAogICAgICBBcmd1bWVudFR5cGVzIGFyZ3VtZW50VHlwZXMsIGlyLkRhcnRUeXBlIHJldHVyblR5cGUpIHsKICAgIHJlZ2lzdGVyU3VwZXJJbnZvY2F0aW9uKG5vZGUubmFtZSwgbm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGgsCiAgICAgICAgX2dldE5hbWVkQXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKSwgbm9kZS5hcmd1bWVudHMudHlwZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVTdXBlclByb3BlcnR5R2V0KAogICAgICBpci5TdXBlclByb3BlcnR5R2V0IG5vZGUsIGlyLkRhcnRUeXBlIHJlc3VsdFR5cGUpIHsKICAgIHJlZ2lzdGVyU3VwZXJHZXQobm9kZS5uYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3VwZXJQcm9wZXJ0eVNldChpci5TdXBlclByb3BlcnR5U2V0IG5vZGUsIGlyLkRhcnRUeXBlIHZhbHVlVHlwZSkgewogICAgcmVnaXN0ZXJTdXBlclNldChub2RlLm5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVTdXBlckluaXRpYWxpemVyKAogICAgICBpci5TdXBlckluaXRpYWxpemVyIG5vZGUsIEFyZ3VtZW50VHlwZXMgYXJndW1lbnRUeXBlcykgewogICAgcmVnaXN0ZXJTdXBlckluaXRpYWxpemVyKAogICAgICAgIG5vZGUucGFyZW50LAogICAgICAgIG5vZGUudGFyZ2V0LAogICAgICAgIG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoLAogICAgICAgIF9nZXROYW1lZEFyZ3VtZW50cyhub2RlLmFyZ3VtZW50cyksCiAgICAgICAgbm9kZS5hcmd1bWVudHMudHlwZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgTnVsbCB2aXNpdFN3aXRjaFN0YXRlbWVudChpci5Td2l0Y2hTdGF0ZW1lbnQgbm9kZSkgewogICAgcmVnaXN0ZXJTd2l0Y2hTdGF0ZW1lbnROb2RlKG5vZGUpOwogICAgcmV0dXJuIHN1cGVyLnZpc2l0U3dpdGNoU3RhdGVtZW50KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVSdW50aW1lVHlwZVVzZShpci5Qcm9wZXJ0eUdldCBub2RlLCBSdW50aW1lVHlwZVVzZUtpbmQga2luZCwKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBpci5EYXJ0VHlwZSBhcmd1bWVudFR5cGUpIHsKICAgIHJlZ2lzdGVyUnVudGltZVR5cGVVc2Uobm9kZSwga2luZCwgcmVjZWl2ZXJUeXBlLCBhcmd1bWVudFR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVDb25zdGFudEV4cHJlc3Npb24oaXIuQ29uc3RhbnRFeHByZXNzaW9uIG5vZGUpIHsKICAgIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCA9IGdldERlZmVycmVkSW1wb3J0KG5vZGUpOwogICAgbmV3IENvbnN0YW50SW1wYWN0VmlzaXRvcih0aGlzLCBpbXBvcnQsIG5vZGUpLnZpc2l0Q29uc3RhbnQobm9kZS5jb25zdGFudCk7CiAgfQp9CgovLy8gVmlzaXRvciB0aGF0IGJ1aWxkcyBhbiBbSW1wYWN0RGF0YV0gb2JqZWN0IGZvciB0aGUgd29ybGQgaW1wYWN0LgpjbGFzcyBJbXBhY3RCdWlsZGVyIGV4dGVuZHMgSW1wYWN0QnVpbGRlckJhc2Ugd2l0aCBJbXBhY3RSZWdpc3RyeU1peGluIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIHVzZUFzc2VydHM7CgogIEBvdmVycmlkZQogIGZpbmFsIGluZmVyRWZmZWN0aXZlbHlGaW5hbFZhcmlhYmxlVHlwZXM7CgogIEltcGFjdEJ1aWxkZXIoaXIuVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCwKICAgICAgaXIuQ2xhc3NIaWVyYXJjaHkgY2xhc3NIaWVyYXJjaHksIFZhcmlhYmxlU2NvcGVNb2RlbCB2YXJpYWJsZVNjb3BlTW9kZWwsCiAgICAgIHt0aGlzLnVzZUFzc2VydHM6IGZhbHNlLCB0aGlzLmluZmVyRWZmZWN0aXZlbHlGaW5hbFZhcmlhYmxlVHlwZXM6IHRydWV9KQogICAgICA6IHN1cGVyKHR5cGVFbnZpcm9ubWVudCwgY2xhc3NIaWVyYXJjaHksIHZhcmlhYmxlU2NvcGVNb2RlbCk7CgogIEltcGFjdEJ1aWxkZXJEYXRhIGNvbXB1dGVJbXBhY3QoaXIuTWVtYmVyIG5vZGUpIHsKICAgIGlmIChyZXRhaW5EYXRhRm9yVGVzdGluZykgewogICAgICB0eXBlTWFwc0ZvclRlc3RpbmcgPSB7fTsKICAgIH0KICAgIG5vZGUuYWNjZXB0KHRoaXMpOwogICAgcmV0dXJuIG5ldyBJbXBhY3RCdWlsZGVyRGF0YSgKICAgICAgICBpbXBhY3REYXRhLCB0eXBlTWFwc0ZvclRlc3RpbmcsIGdldFN0YXRpY1R5cGVDYWNoZSgpKTsKICB9Cn0KCi8vLyBSZXR1cm4gdGhlIG5hbWVkIGFyZ3VtZW50cyBuYW1lcyBhcyBhIGxpc3Qgb2Ygc3RyaW5ncy4KTGlzdDxTdHJpbmc+IF9nZXROYW1lZEFyZ3VtZW50cyhpci5Bcmd1bWVudHMgYXJndW1lbnRzKSA9PgogICAgYXJndW1lbnRzLm5hbWVkLm1hcCgobikgPT4gbi5uYW1lKS50b0xpc3QoKTsKCmNsYXNzIEltcGFjdEJ1aWxkZXJEYXRhIHsKICBmaW5hbCBJbXBhY3REYXRhIGltcGFjdERhdGE7CiAgZmluYWwgTWFwPGlyLkV4cHJlc3Npb24sIFR5cGVNYXA+IHR5cGVNYXBzRm9yVGVzdGluZzsKICBmaW5hbCBTdGF0aWNUeXBlQ2FjaGUgY2FjaGVkU3RhdGljVHlwZXM7CgogIEltcGFjdEJ1aWxkZXJEYXRhKAogICAgICB0aGlzLmltcGFjdERhdGEsIHRoaXMudHlwZU1hcHNGb3JUZXN0aW5nLCB0aGlzLmNhY2hlZFN0YXRpY1R5cGVzKTsKfQoKY2xhc3MgQ29uc3RhbnRJbXBhY3RWaXNpdG9yIGV4dGVuZHMgaXIuVmlzaXRPbmNlQ29uc3RhbnRWaXNpdG9yIHsKICBmaW5hbCBJbXBhY3RSZWdpc3RyeSByZWdpc3RyeTsKICBmaW5hbCBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQ7CiAgZmluYWwgaXIuQ29uc3RhbnRFeHByZXNzaW9uIGV4cHJlc3Npb247CgogIENvbnN0YW50SW1wYWN0VmlzaXRvcih0aGlzLnJlZ2lzdHJ5LCB0aGlzLmltcG9ydCwgdGhpcy5leHByZXNzaW9uKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWZhdWx0Q29uc3RhbnQoaXIuQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIlVuZXhwZWN0ZWQgY29uc3RhbnQgJHtub2RlfSAoJHtub2RlLnJ1bnRpbWVUeXBlfSkuIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VW5ldmFsdWF0ZWRDb25zdGFudChpci5VbmV2YWx1YXRlZENvbnN0YW50IG5vZGUpIHsKICAgIC8vIERvIG5vdGhpbmcuIFRoaXMgb2NjdXJzIHdoZW4gdGhlIGNvbnN0YW50IGNvdWxkbid0IGJlIGV2YWx1YXRlZCBiZWNhdXNlCiAgICAvLyBvZiBhIGNvbXBpbGUtdGltZSBlcnJvci4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlTGl0ZXJhbENvbnN0YW50KGlyLlR5cGVMaXRlcmFsQ29uc3RhbnQgbm9kZSkgewogICAgcmVnaXN0cnkucmVnaXN0ZXJUeXBlTGl0ZXJhbChub2RlLnR5cGUsIGltcG9ydCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VGVhck9mZkNvbnN0YW50KGlyLlRlYXJPZmZDb25zdGFudCBub2RlKSB7CiAgICByZWdpc3RyeS5yZWdpc3RlclN0YXRpY1RlYXJPZmYobm9kZS5wcm9jZWR1cmUsIGltcG9ydCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudChpci5QYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50IG5vZGUpIHsKICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyR2VuZXJpY0luc3RhbnRpYXRpb24oCiAgICAgICAgbm9kZS50ZWFyT2ZmQ29uc3RhbnQucHJvY2VkdXJlLmZ1bmN0aW9uLmZ1bmN0aW9uVHlwZSwgbm9kZS50eXBlcyk7CiAgICB2aXNpdENvbnN0YW50KG5vZGUudGVhck9mZkNvbnN0YW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnN0YW5jZUNvbnN0YW50KGlyLkluc3RhbmNlQ29uc3RhbnQgbm9kZSkgewogICAgcmVnaXN0cnkucmVnaXN0ZXJDb25zdEluc3RhbnRpYXRpb24oCiAgICAgICAgbm9kZS5jbGFzc05vZGUsIG5vZGUudHlwZUFyZ3VtZW50cywgaW1wb3J0KTsKICAgIG5vZGUuZmllbGRWYWx1ZXMuZm9yRWFjaCgoaXIuUmVmZXJlbmNlIHJlZmVyZW5jZSwgaXIuQ29uc3RhbnQgdmFsdWUpIHsKICAgICAgaXIuRmllbGQgZmllbGQgPSByZWZlcmVuY2UuYXNGaWVsZDsKICAgICAgcmVnaXN0cnkucmVnaXN0ZXJGaWVsZENvbnN0YW50SW5pdGlhbGl6YXRpb24oCiAgICAgICAgICBmaWVsZCwgbmV3IENvbnN0YW50UmVmZXJlbmNlKGV4cHJlc3Npb24sIHZhbHVlKSk7CiAgICAgIHZpc2l0Q29uc3RhbnQodmFsdWUpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U2V0Q29uc3RhbnQoaXIuU2V0Q29uc3RhbnQgbm9kZSkgewogICAgcmVnaXN0cnkucmVnaXN0ZXJTZXRMaXRlcmFsKG5vZGUudHlwZUFyZ3VtZW50LAogICAgICAgIGlzQ29uc3Q6IHRydWUsIGlzRW1wdHk6IG5vZGUuZW50cmllcy5pc0VtcHR5KTsKICAgIGZvciAoaXIuQ29uc3RhbnQgZWxlbWVudCBpbiBub2RlLmVudHJpZXMpIHsKICAgICAgdmlzaXRDb25zdGFudChlbGVtZW50KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXN0Q29uc3RhbnQoaXIuTGlzdENvbnN0YW50IG5vZGUpIHsKICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyTGlzdExpdGVyYWwobm9kZS50eXBlQXJndW1lbnQsCiAgICAgICAgaXNDb25zdDogdHJ1ZSwgaXNFbXB0eTogbm9kZS5lbnRyaWVzLmlzRW1wdHkpOwogICAgZm9yIChpci5Db25zdGFudCBlbGVtZW50IGluIG5vZGUuZW50cmllcykgewogICAgICB2aXNpdENvbnN0YW50KGVsZW1lbnQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE1hcENvbnN0YW50KGlyLk1hcENvbnN0YW50IG5vZGUpIHsKICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyTWFwTGl0ZXJhbChub2RlLmtleVR5cGUsIG5vZGUudmFsdWVUeXBlLAogICAgICAgIGlzQ29uc3Q6IHRydWUsIGlzRW1wdHk6IG5vZGUuZW50cmllcy5pc0VtcHR5KTsKICAgIGZvciAoaXIuQ29uc3RhbnRNYXBFbnRyeSBlbnRyeSBpbiBub2RlLmVudHJpZXMpIHsKICAgICAgdmlzaXRDb25zdGFudChlbnRyeS5rZXkpOwogICAgICB2aXNpdENvbnN0YW50KGVudHJ5LnZhbHVlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTeW1ib2xDb25zdGFudChpci5TeW1ib2xDb25zdGFudCBub2RlKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBIYW5kbGUgdGhlIGxpYnJhcnkgcmVmZXJlbmNlLgogICAgcmVnaXN0cnkucmVnaXN0ZXJTeW1ib2xMaXRlcmFsKG5vZGUubmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RyaW5nQ29uc3RhbnQoaXIuU3RyaW5nQ29uc3RhbnQgbm9kZSkgewogICAgcmVnaXN0cnkucmVnaXN0ZXJTdHJpbmdMaXRlcmFsKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERvdWJsZUNvbnN0YW50KGlyLkRvdWJsZUNvbnN0YW50IG5vZGUpIHsKICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyRG91YmxlTGl0ZXJhbChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRDb25zdGFudChpci5JbnRDb25zdGFudCBub2RlKSB7CiAgICByZWdpc3RyeS5yZWdpc3RlckludExpdGVyYWwobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Qm9vbENvbnN0YW50KGlyLkJvb2xDb25zdGFudCBub2RlKSB7CiAgICByZWdpc3RyeS5yZWdpc3RlckJvb2xMaXRlcmFsKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE51bGxDb25zdGFudChpci5OdWxsQ29uc3RhbnQgbm9kZSkgewogICAgcmVnaXN0cnkucmVnaXN0ZXJOdWxsTGl0ZXJhbCgpOwogIH0KfQqDJQBOTjwBOR0BKDQ1ARkZGyUVGyEUATAERkwYICYBLAEoASwBLAEeATQlATMlAUYlAR48AUkBSQErASVIATIBLwEzASYBMAEqASoBLwEpARgBTSwBTiwBGAEdASwBSwEzASwyAR4BJyIfIygBMQEcARQdHR8jJyMXAVEkASEbHyMnJAEoLB8jKAEiIB4UHyMoASMgHhgfIygBIyAfIygBG0cBHEsBG0cBHEsBRkUBJwEnASEdHR8jKAFMOwFENSkxPz1OAgE7IAwvAThBMAEMLiQEAQw0JwQBDDAlBAEMNCcEAQw0JwQBDDAbBAEMMCtDBAEMLipDBAEMLjU/BAEMRCRMPg06BgQBDEM9BAEMODcEAQwyQEYEATU3MgEbIA8kOi5ROgwKJw8BITouUTotNzoMCiQPASU6Lk86DAooDwEoLDgGBAEMQCMEAQxAISYEAQw+ISYEAQxAJCkGBAEMMiAEAQxLPx4OBhwnDSEGBAEMJBUEAQxOIhg1Nw00NwYEAQwkFSMcBiklBgQBDDA9BAEMOi0EAQwwGwQBDCVFJBUqLB8EAQw7LAQBDC8+LwYEAQwwIwQBDCUoJSUcMh0IDR0GHgQBDDErJgQBDEI9ERUeKiweISAYNAYEAQw4PT5GPDhONAkYCSIxKw4JKgkVNTwOCU1OTEspExdLHRogIyINTzMGKAQBDB8gICMgPkY8LCYlPkA9DUsBOCVFP0pIOi5IUC4KDysvQ05BQUERTkEKCAYEAQwlJiAjICAWHRUqLB8EAQwaT0koSQ09BgQBDDo6SQQBDBpOSShJDT0GBAEMOjlJBAEMQj1JQwQBDB86IQQBDFEhBAEMHz8eFRUqLB8EAQw3Jy0EAQxKPEQEAQw+O1AEAgFFSQwZAQwsATRPT0QBNCAfBhciPwQCATs7MQEaHzgrARVJAgFCISUqAUYBDCsgPwQBDD9PIAQBDD81BAEMNzwEAQxRK0spBAEMOSk1Syo0PBwIBAEMLzM3MB4GBAEMMTQ3MB4GBAEMLz43NiAiBgQBDDU6LwQBDDUwBAEMNTAEAQwvLQQBDDEuBAEMMSQEAgEjcGFja2FnZTpjb21waWxlci9zcmMvaXIvaW1wYWN0LmRhcnQxc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaXIvaW1wYWN0X2RhdGEuZGFydMAAzLkvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfZW52aXJvbm1lbnQuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi91dGlsL2VudW1zZXQuZGFydCc7CmltcG9ydCAnY29uc3RhbnRzLmRhcnQnOwppbXBvcnQgJ2ltcGFjdC5kYXJ0JzsKaW1wb3J0ICdydW50aW1lX3R5cGVfYW5hbHlzaXMuZGFydCc7CmltcG9ydCAnc3RhdGljX3R5cGUuZGFydCc7CgovLy8gW0ltcGFjdFJlZ2lzdHJ5XSB0aGF0IHN0b3JlcyByZWdpc3RlcmVkIGltcGFjdCBpbiBhbiBbSW1wYWN0RGF0YV0gb2JqZWN0LgphYnN0cmFjdCBjbGFzcyBJbXBhY3RSZWdpc3RyeU1peGluIGltcGxlbWVudHMgSW1wYWN0UmVnaXN0cnkgewogIGZpbmFsIEltcGFjdERhdGFJbXBsIF9kYXRhID0gbmV3IEltcGFjdERhdGFJbXBsKCk7CgogIEltcGFjdERhdGEgZ2V0IGltcGFjdERhdGEgPT4gX2RhdGE7CgogIHZvaWQgX3JlZ2lzdGVyRmVhdHVyZShfRmVhdHVyZSBmZWF0dXJlKSB7CiAgICBfZGF0YS5fZmVhdHVyZXMgPz89IG5ldyBFbnVtU2V0PF9GZWF0dXJlPigpOwogICAgX2RhdGEuX2ZlYXR1cmVzLmFkZChmZWF0dXJlKTsKICB9CgogIHZvaWQgX3JlZ2lzdGVyVHlwZVVzZShpci5EYXJ0VHlwZSB0eXBlLCBfVHlwZVVzZUtpbmQga2luZCkgewogICAgX2RhdGEuX3R5cGVVc2VzID8/PSBbXTsKICAgIF9kYXRhLl90eXBlVXNlcy5hZGQobmV3IF9UeXBlVXNlKHR5cGUsIGtpbmQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdXBlckluaXRpYWxpemVyKAogICAgICBpci5Db25zdHJ1Y3RvciBzb3VyY2UsCiAgICAgIGlyLkNvbnN0cnVjdG9yIHRhcmdldCwKICAgICAgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywKICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgX2RhdGEuX3N1cGVySW5pdGlhbGl6ZXJzID8/PSBbXTsKICAgIF9kYXRhLl9zdXBlckluaXRpYWxpemVycy5hZGQobmV3IF9TdXBlckluaXRpYWxpemVyKAogICAgICAgIHNvdXJjZSwKICAgICAgICB0YXJnZXQsCiAgICAgICAgbmV3IF9DYWxsU3RydWN0dXJlKAogICAgICAgICAgICBwb3NpdGlvbmFsQXJndW1lbnRzLCBuYW1lZEFyZ3VtZW50cywgdHlwZUFyZ3VtZW50cykpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdXBlclNldChpci5OYW1lIG5hbWUpIHsKICAgIF9kYXRhLl9zdXBlclNldHMgPz89IFtdOwogICAgX2RhdGEuX3N1cGVyU2V0cy5hZGQobmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3VwZXJHZXQoaXIuTmFtZSBuYW1lKSB7CiAgICBfZGF0YS5fc3VwZXJHZXRzID8/PSBbXTsKICAgIF9kYXRhLl9zdXBlckdldHMuYWRkKG5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN1cGVySW52b2NhdGlvbihpci5OYW1lIG5hbWUsIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIF9kYXRhLl9zdXBlckludm9jYXRpb25zID8/PSBbXTsKICAgIF9kYXRhLl9zdXBlckludm9jYXRpb25zLmFkZChuZXcgX1N1cGVySW52b2NhdGlvbigKICAgICAgICBuYW1lLAogICAgICAgIG5ldyBfQ2FsbFN0cnVjdHVyZSgKICAgICAgICAgICAgcG9zaXRpb25hbEFyZ3VtZW50cywgbmFtZWRBcmd1bWVudHMsIHR5cGVBcmd1bWVudHMpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVySW5zdGFuY2VTZXQoCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwgQ2xhc3NSZWxhdGlvbiByZWxhdGlvbiwgaXIuTWVtYmVyIHRhcmdldCkgewogICAgX2RhdGEuX2luc3RhbmNlU2V0cyA/Pz0gW107CiAgICBfZGF0YS5faW5zdGFuY2VTZXRzCiAgICAgICAgLmFkZChuZXcgX0luc3RhbmNlQWNjZXNzKHJlY2VpdmVyVHlwZSwgcmVsYXRpb24sIHRhcmdldCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckR5bmFtaWNTZXQoCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwgQ2xhc3NSZWxhdGlvbiByZWxhdGlvbiwgaXIuTmFtZSBuYW1lKSB7CiAgICBfZGF0YS5fZHluYW1pY1NldHMgPz89IFtdOwogICAgX2RhdGEuX2R5bmFtaWNTZXRzLmFkZChuZXcgX0R5bmFtaWNBY2Nlc3MocmVjZWl2ZXJUeXBlLCByZWxhdGlvbiwgbmFtZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlckluc3RhbmNlR2V0KAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsIENsYXNzUmVsYXRpb24gcmVsYXRpb24sIGlyLk1lbWJlciB0YXJnZXQpIHsKICAgIF9kYXRhLl9pbnN0YW5jZUdldHMgPz89IFtdOwogICAgX2RhdGEuX2luc3RhbmNlR2V0cwogICAgICAgIC5hZGQobmV3IF9JbnN0YW5jZUFjY2VzcyhyZWNlaXZlclR5cGUsIHJlbGF0aW9uLCB0YXJnZXQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJEeW5hbWljR2V0KAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsIENsYXNzUmVsYXRpb24gcmVsYXRpb24sIGlyLk5hbWUgbmFtZSkgewogICAgX2RhdGEuX2R5bmFtaWNHZXRzID8/PSBbXTsKICAgIF9kYXRhLl9keW5hbWljR2V0cy5hZGQobmV3IF9EeW5hbWljQWNjZXNzKHJlY2VpdmVyVHlwZSwgcmVsYXRpb24sIG5hbWUpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJGdW5jdGlvbkludm9jYXRpb24oCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwKICAgICAgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywKICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgX2RhdGEuX2Z1bmN0aW9uSW52b2NhdGlvbnMgPz89IFtdOwogICAgX2RhdGEuX2Z1bmN0aW9uSW52b2NhdGlvbnMuYWRkKG5ldyBfRnVuY3Rpb25JbnZvY2F0aW9uKAogICAgICAgIHJlY2VpdmVyVHlwZSwKICAgICAgICBuZXcgX0NhbGxTdHJ1Y3R1cmUoCiAgICAgICAgICAgIHBvc2l0aW9uYWxBcmd1bWVudHMsIG5hbWVkQXJndW1lbnRzLCB0eXBlQXJndW1lbnRzKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlckluc3RhbmNlSW52b2NhdGlvbigKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLAogICAgICBDbGFzc1JlbGF0aW9uIHJlbGF0aW9uLAogICAgICBpci5NZW1iZXIgdGFyZ2V0LAogICAgICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLAogICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICBfZGF0YS5faW5zdGFuY2VJbnZvY2F0aW9ucyA/Pz0gW107CiAgICBfZGF0YS5faW5zdGFuY2VJbnZvY2F0aW9ucy5hZGQobmV3IF9JbnN0YW5jZUludm9jYXRpb24oCiAgICAgICAgcmVjZWl2ZXJUeXBlLAogICAgICAgIHJlbGF0aW9uLAogICAgICAgIHRhcmdldCwKICAgICAgICBuZXcgX0NhbGxTdHJ1Y3R1cmUoCiAgICAgICAgICAgIHBvc2l0aW9uYWxBcmd1bWVudHMsIG5hbWVkQXJndW1lbnRzLCB0eXBlQXJndW1lbnRzKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckR5bmFtaWNJbnZvY2F0aW9uKAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsCiAgICAgIENsYXNzUmVsYXRpb24gcmVsYXRpb24sCiAgICAgIGlyLk5hbWUgbmFtZSwKICAgICAgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywKICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgX2RhdGEuX2R5bmFtaWNJbnZvY2F0aW9ucyA/Pz0gW107CiAgICBfZGF0YS5fZHluYW1pY0ludm9jYXRpb25zLmFkZChuZXcgX0R5bmFtaWNJbnZvY2F0aW9uKAogICAgICAgIHJlY2VpdmVyVHlwZSwKICAgICAgICByZWxhdGlvbiwKICAgICAgICBuYW1lLAogICAgICAgIG5ldyBfQ2FsbFN0cnVjdHVyZSgKICAgICAgICAgICAgcG9zaXRpb25hbEFyZ3VtZW50cywgbmFtZWRBcmd1bWVudHMsIHR5cGVBcmd1bWVudHMpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTG9jYWxGdW5jdGlvbkludm9jYXRpb24oCiAgICAgIGlyLkZ1bmN0aW9uRGVjbGFyYXRpb24gbG9jYWxGdW5jdGlvbiwKICAgICAgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywKICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgX2RhdGEuX2xvY2FsRnVuY3Rpb25JbnZvY2F0aW9ucyA/Pz0gW107CiAgICBfZGF0YS5fbG9jYWxGdW5jdGlvbkludm9jYXRpb25zLmFkZChuZXcgX0xvY2FsRnVuY3Rpb25JbnZvY2F0aW9uKAogICAgICAgIGxvY2FsRnVuY3Rpb24sCiAgICAgICAgbmV3IF9DYWxsU3RydWN0dXJlKAogICAgICAgICAgICBwb3NpdGlvbmFsQXJndW1lbnRzLCBuYW1lZEFyZ3VtZW50cywgdHlwZUFyZ3VtZW50cykpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdGF0aWNJbnZvY2F0aW9uKAogICAgICBpci5Qcm9jZWR1cmUgdGFyZ2V0LAogICAgICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLAogICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQpIHsKICAgIF9kYXRhLl9zdGF0aWNJbnZvY2F0aW9ucyA/Pz0gW107CiAgICBfZGF0YS5fc3RhdGljSW52b2NhdGlvbnMuYWRkKG5ldyBfU3RhdGljSW52b2NhdGlvbigKICAgICAgICB0YXJnZXQsCiAgICAgICAgbmV3IF9DYWxsU3RydWN0dXJlKHBvc2l0aW9uYWxBcmd1bWVudHMsIG5hbWVkQXJndW1lbnRzLCB0eXBlQXJndW1lbnRzKSwKICAgICAgICBpbXBvcnQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJOZXcoCiAgICAgIGlyLk1lbWJlciBjb25zdHJ1Y3RvciwKICAgICAgaXIuSW50ZXJmYWNlVHlwZSB0eXBlLAogICAgICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLAogICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQsCiAgICAgIHtib29sIGlzQ29uc3R9KSB7CiAgICBfZGF0YS5fY29uc3RydWN0b3JJbnZvY2F0aW9ucyA/Pz0gW107CiAgICBfZGF0YS5fY29uc3RydWN0b3JJbnZvY2F0aW9ucy5hZGQobmV3IF9Db25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgICAgY29uc3RydWN0b3IsCiAgICAgICAgdHlwZSwKICAgICAgICBuZXcgX0NhbGxTdHJ1Y3R1cmUocG9zaXRpb25hbEFyZ3VtZW50cywgbmFtZWRBcmd1bWVudHMsIHR5cGVBcmd1bWVudHMpLAogICAgICAgIGltcG9ydCwKICAgICAgICBpc0NvbnN0OiBpc0NvbnN0KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQ29uc3RJbnN0YW50aWF0aW9uKGlyLkNsYXNzIGNscywgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cywKICAgICAgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0KSB7CiAgICBfZGF0YS5fY29uc3RJbnN0YW50aWF0aW9ucyA/Pz0gW107CiAgICBfZGF0YS5fY29uc3RJbnN0YW50aWF0aW9ucwogICAgICAgIC5hZGQobmV3IF9Db25zdEluc3RhbnRpYXRpb24oY2xzLCB0eXBlQXJndW1lbnRzLCBpbXBvcnQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJMYXp5RmllbGQoKSB7CiAgICBfcmVnaXN0ZXJGZWF0dXJlKF9GZWF0dXJlLmxhenlGaWVsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyUGFyYW1ldGVyQ2hlY2soaXIuRGFydFR5cGUgdHlwZSkgewogICAgX3JlZ2lzdGVyVHlwZVVzZSh0eXBlLCBfVHlwZVVzZUtpbmQucGFyYW1ldGVyQ2hlY2spOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIoCiAgICAgIGlyLkNvbnN0cnVjdG9yIGNvbnN0cnVjdG9yLAogICAgICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLAogICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICBfZGF0YS5fcmVkaXJlY3RpbmdJbml0aWFsaXplcnMgPz89IFtdOwogICAgX2RhdGEuX3JlZGlyZWN0aW5nSW5pdGlhbGl6ZXJzLmFkZChuZXcgX1JlZGlyZWN0aW5nSW5pdGlhbGl6ZXIoCiAgICAgICAgY29uc3RydWN0b3IsCiAgICAgICAgbmV3IF9DYWxsU3RydWN0dXJlKAogICAgICAgICAgICBwb3NpdGlvbmFsQXJndW1lbnRzLCBuYW1lZEFyZ3VtZW50cywgdHlwZUFyZ3VtZW50cykpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJMb2FkTGlicmFyeSgpIHsKICAgIF9yZWdpc3RlckZlYXR1cmUoX0ZlYXR1cmUubG9hZExpYnJhcnkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckZpZWxkSW5pdGlhbGl6YXRpb24oaXIuRmllbGQgbm9kZSkgewogICAgX2RhdGEuX2ZpZWxkSW5pdGlhbGl6ZXJzID8/PSBbXTsKICAgIF9kYXRhLl9maWVsZEluaXRpYWxpemVycy5hZGQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyRmllbGRDb25zdGFudEluaXRpYWxpemF0aW9uKAogICAgICBpci5GaWVsZCBub2RlLCBDb25zdGFudFJlZmVyZW5jZSBjb25zdGFudCkgewogICAgX2RhdGEuX2ZpZWxkQ29uc3RhbnRJbml0aWFsaXplcnMgPz89IHt9OwogICAgX2RhdGEuX2ZpZWxkQ29uc3RhbnRJbml0aWFsaXplcnMucHV0SWZBYnNlbnQobm9kZSwgKCkgPT4gW10pLmFkZChjb25zdGFudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyVHlwZUxpdGVyYWwoaXIuRGFydFR5cGUgdHlwZSwgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0KSB7CiAgICBfZGF0YS5fdHlwZUxpdGVyYWxzID8/PSBbXTsKICAgIF9kYXRhLl90eXBlTGl0ZXJhbHMuYWRkKG5ldyBfVHlwZUxpdGVyYWwodHlwZSwgaW1wb3J0KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQ2F0Y2hUeXBlKGlyLkRhcnRUeXBlIHR5cGUpIHsKICAgIF9yZWdpc3RlclR5cGVVc2UodHlwZSwgX1R5cGVVc2VLaW5kLmNhdGNoVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3RhY2tUcmFjZSgpIHsKICAgIF9yZWdpc3RlckZlYXR1cmUoX0ZlYXR1cmUuc3RhY2tUcmFjZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQ2F0Y2goKSB7CiAgICBfcmVnaXN0ZXJGZWF0dXJlKF9GZWF0dXJlLmNhdGNoQ2xhdXNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJBc3luY0ZvckluKGlyLkRhcnRUeXBlIGl0ZXJhYmxlVHlwZSwgaXIuRGFydFR5cGUgaXRlcmF0b3JUeXBlLAogICAgICBDbGFzc1JlbGF0aW9uIGl0ZXJhdG9yQ2xhc3NSZWxhdGlvbikgewogICAgX2RhdGEuX2ZvckluRGF0YSA/Pz0gW107CiAgICBfZGF0YS5fZm9ySW5EYXRhLmFkZChuZXcgX0ZvckluRGF0YSgKICAgICAgICBpdGVyYWJsZVR5cGUsIGl0ZXJhdG9yVHlwZSwgaXRlcmF0b3JDbGFzc1JlbGF0aW9uLAogICAgICAgIGlzQXN5bmM6IHRydWUpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTeW5jRm9ySW4oaXIuRGFydFR5cGUgaXRlcmFibGVUeXBlLCBpci5EYXJ0VHlwZSBpdGVyYXRvclR5cGUsCiAgICAgIENsYXNzUmVsYXRpb24gaXRlcmF0b3JDbGFzc1JlbGF0aW9uKSB7CiAgICBfZGF0YS5fZm9ySW5EYXRhID8/PSBbXTsKICAgIF9kYXRhLl9mb3JJbkRhdGEuYWRkKG5ldyBfRm9ySW5EYXRhKAogICAgICAgIGl0ZXJhYmxlVHlwZSwgaXRlcmF0b3JUeXBlLCBpdGVyYXRvckNsYXNzUmVsYXRpb24sCiAgICAgICAgaXNBc3luYzogZmFsc2UpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJUaHJvdygpIHsKICAgIF9yZWdpc3RlckZlYXR1cmUoX0ZlYXR1cmUudGhyb3dFeHByZXNzaW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJBc0Nhc3QoaXIuRGFydFR5cGUgdHlwZSkgewogICAgX3JlZ2lzdGVyVHlwZVVzZSh0eXBlLCBfVHlwZVVzZUtpbmQuYXNDYXN0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJJbXBsaWNpdENhc3QoaXIuRGFydFR5cGUgdHlwZSkgewogICAgX3JlZ2lzdGVyVHlwZVVzZSh0eXBlLCBfVHlwZVVzZUtpbmQuaW1wbGljaXRDYXN0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJJc0NoZWNrKGlyLkRhcnRUeXBlIHR5cGUpIHsKICAgIF9yZWdpc3RlclR5cGVVc2UodHlwZSwgX1R5cGVVc2VLaW5kLmlzQ2hlY2spOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckxvY2FsV2l0aG91dEluaXRpYWxpemVyKCkgewogICAgX3JlZ2lzdGVyRmVhdHVyZShfRmVhdHVyZS5sb2NhbFdpdGhvdXRJbml0aWFsaXplcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTG9jYWxGdW5jdGlvbihpci5UcmVlTm9kZSBub2RlKSB7CiAgICBfZGF0YS5fbG9jYWxGdW5jdGlvbnMgPz89IFtdOwogICAgX2RhdGEuX2xvY2FsRnVuY3Rpb25zLmFkZChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdHJpbmdDb25jYXRlbmF0aW9uKCkgewogICAgX3JlZ2lzdGVyRmVhdHVyZShfRmVhdHVyZS5zdHJpbmdDb25jYXRlbmF0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJBc3luY1N0YXIoaXIuRGFydFR5cGUgZWxlbWVudFR5cGUpIHsKICAgIF9yZWdpc3RlclR5cGVVc2UoZWxlbWVudFR5cGUsIF9UeXBlVXNlS2luZC5hc3luY1N0YXJNYXJrZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckFzeW5jKGlyLkRhcnRUeXBlIGVsZW1lbnRUeXBlKSB7CiAgICBfcmVnaXN0ZXJUeXBlVXNlKGVsZW1lbnRUeXBlLCBfVHlwZVVzZUtpbmQuYXN5bmNNYXJrZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN5bmNTdGFyKGlyLkRhcnRUeXBlIGVsZW1lbnRUeXBlKSB7CiAgICBfcmVnaXN0ZXJUeXBlVXNlKGVsZW1lbnRUeXBlLCBfVHlwZVVzZUtpbmQuc3luY1N0YXJNYXJrZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckdlbmVyaWNJbnN0YW50aWF0aW9uKAogICAgICBpci5GdW5jdGlvblR5cGUgZXhwcmVzc2lvblR5cGUsIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIF9kYXRhLl9nZW5lcmljSW5zdGFudGlhdGlvbnMgPz89IFtdOwogICAgX2RhdGEuX2dlbmVyaWNJbnN0YW50aWF0aW9ucwogICAgICAgIC5hZGQobmV3IF9HZW5lcmljSW5zdGFudGlhdGlvbihleHByZXNzaW9uVHlwZSwgdHlwZUFyZ3VtZW50cykpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckFzc2VydCh7Ym9vbCB3aXRoTWVzc2FnZX0pIHsKICAgIF9yZWdpc3RlckZlYXR1cmUod2l0aE1lc3NhZ2UKICAgICAgICA/IF9GZWF0dXJlLmFzc2VydFdpdGhNZXNzYWdlCiAgICAgICAgOiBfRmVhdHVyZS5hc3NlcnRXaXRob3V0TWVzc2FnZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3RhdGljU2V0KGlyLk1lbWJlciBtZW1iZXIsIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCkgewogICAgX2RhdGEuX3N0YXRpY1NldHMgPz89IFtdOwogICAgX2RhdGEuX3N0YXRpY1NldHMuYWRkKG5ldyBfU3RhdGljQWNjZXNzKG1lbWJlciwgaW1wb3J0KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3RhdGljR2V0KGlyLk1lbWJlciBtZW1iZXIsIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCkgewogICAgX2RhdGEuX3N0YXRpY0dldHMgPz89IFtdOwogICAgX2RhdGEuX3N0YXRpY0dldHMuYWRkKG5ldyBfU3RhdGljQWNjZXNzKG1lbWJlciwgaW1wb3J0KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3RhdGljVGVhck9mZigKICAgICAgaXIuUHJvY2VkdXJlIHByb2NlZHVyZSwgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0KSB7CiAgICBfZGF0YS5fc3RhdGljVGVhck9mZnMgPz89IFtdOwogICAgX2RhdGEuX3N0YXRpY1RlYXJPZmZzLmFkZChuZXcgX1N0YXRpY0FjY2Vzcyhwcm9jZWR1cmUsIGltcG9ydCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck1hcExpdGVyYWwoaXIuRGFydFR5cGUga2V5VHlwZSwgaXIuRGFydFR5cGUgdmFsdWVUeXBlLAogICAgICB7Ym9vbCBpc0NvbnN0LCBib29sIGlzRW1wdHl9KSB7CiAgICBfZGF0YS5fbWFwTGl0ZXJhbHMgPz89IFtdOwogICAgX2RhdGEuX21hcExpdGVyYWxzLmFkZChuZXcgX01hcExpdGVyYWwoa2V5VHlwZSwgdmFsdWVUeXBlLAogICAgICAgIGlzQ29uc3Q6IGlzQ29uc3QsIGlzRW1wdHk6IGlzRW1wdHkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJMaXN0TGl0ZXJhbChpci5EYXJ0VHlwZSBlbGVtZW50VHlwZSwKICAgICAge2Jvb2wgaXNDb25zdCwgYm9vbCBpc0VtcHR5fSkgewogICAgX2RhdGEuX2xpc3RMaXRlcmFscyA/Pz0gW107CiAgICBfZGF0YS5fbGlzdExpdGVyYWxzLmFkZCgKICAgICAgICBuZXcgX0NvbnRhaW5lckxpdGVyYWwoZWxlbWVudFR5cGUsIGlzQ29uc3Q6IGlzQ29uc3QsIGlzRW1wdHk6IGlzRW1wdHkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTZXRMaXRlcmFsKGlyLkRhcnRUeXBlIGVsZW1lbnRUeXBlLAogICAgICB7Ym9vbCBpc0NvbnN0LCBib29sIGlzRW1wdHl9KSB7CiAgICBfZGF0YS5fc2V0TGl0ZXJhbHMgPz89IFtdOwogICAgX2RhdGEuX3NldExpdGVyYWxzLmFkZCgKICAgICAgICBuZXcgX0NvbnRhaW5lckxpdGVyYWwoZWxlbWVudFR5cGUsIGlzQ29uc3Q6IGlzQ29uc3QsIGlzRW1wdHk6IGlzRW1wdHkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJOdWxsTGl0ZXJhbCgpIHsKICAgIF9yZWdpc3RlckZlYXR1cmUoX0ZlYXR1cmUubnVsbExpdGVyYWwpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN5bWJvbExpdGVyYWwoU3RyaW5nIHZhbHVlKSB7CiAgICBfZGF0YS5fc3ltYm9sTGl0ZXJhbHMgPz89IFtdOwogICAgX2RhdGEuX3N5bWJvbExpdGVyYWxzLmFkZCh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3RyaW5nTGl0ZXJhbChTdHJpbmcgdmFsdWUpIHsKICAgIF9kYXRhLl9zdHJpbmdMaXRlcmFscyA/Pz0gW107CiAgICBfZGF0YS5fc3RyaW5nTGl0ZXJhbHMuYWRkKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJCb29sTGl0ZXJhbChib29sIHZhbHVlKSB7CiAgICBfZGF0YS5fYm9vbExpdGVyYWxzID8/PSBbXTsKICAgIF9kYXRhLl9ib29sTGl0ZXJhbHMuYWRkKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJEb3VibGVMaXRlcmFsKGRvdWJsZSB2YWx1ZSkgewogICAgX2RhdGEuX2RvdWJsZUxpdGVyYWxzID8/PSBbXTsKICAgIF9kYXRhLl9kb3VibGVMaXRlcmFscy5hZGQodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckludExpdGVyYWwoaW50IHZhbHVlKSB7CiAgICBfZGF0YS5faW50TGl0ZXJhbHMgPz89IFtdOwogICAgX2RhdGEuX2ludExpdGVyYWxzLmFkZCh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyUnVudGltZVR5cGVVc2UoaXIuUHJvcGVydHlHZXQgbm9kZSwgUnVudGltZVR5cGVVc2VLaW5kIGtpbmQsCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwgaXIuRGFydFR5cGUgYXJndW1lbnRUeXBlKSB7CiAgICBfZGF0YS5fcnVudGltZVR5cGVVc2VzID8/PSBbXTsKICAgIF9kYXRhLl9ydW50aW1lVHlwZVVzZXMKICAgICAgICAuYWRkKG5ldyBfUnVudGltZVR5cGVVc2Uobm9kZSwga2luZCwgcmVjZWl2ZXJUeXBlLCBhcmd1bWVudFR5cGUpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJDb25zdHJ1Y3Rvck5vZGUoaXIuQ29uc3RydWN0b3Igbm9kZSkgewogICAgX2RhdGEuX2NvbnN0cnVjdG9yTm9kZXMgPz89IFtdOwogICAgX2RhdGEuX2NvbnN0cnVjdG9yTm9kZXMuYWRkKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckZpZWxkTm9kZShpci5GaWVsZCBub2RlKSB7CiAgICBfZGF0YS5fZmllbGROb2RlcyA/Pz0gW107CiAgICBfZGF0YS5fZmllbGROb2Rlcy5hZGQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyUHJvY2VkdXJlTm9kZShpci5Qcm9jZWR1cmUgbm9kZSkgewogICAgX2RhdGEuX3Byb2NlZHVyZU5vZGVzID8/PSBbXTsKICAgIF9kYXRhLl9wcm9jZWR1cmVOb2Rlcy5hZGQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3RhdGljSW52b2NhdGlvbk5vZGUoaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKSB7CiAgICBfZGF0YS5fc3RhdGljSW52b2NhdGlvbk5vZGVzID8/PSBbXTsKICAgIF9kYXRhLl9zdGF0aWNJbnZvY2F0aW9uTm9kZXMuYWRkKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN3aXRjaFN0YXRlbWVudE5vZGUoaXIuU3dpdGNoU3RhdGVtZW50IG5vZGUpIHsKICAgIF9kYXRhLl9zd2l0Y2hTdGF0ZW1lbnROb2RlcyA/Pz0gW107CiAgICBfZGF0YS5fc3dpdGNoU3RhdGVtZW50Tm9kZXMuYWRkKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckNvbnN0Q29uc3RydWN0b3JJbnZvY2F0aW9uTm9kZShpci5Db25zdHJ1Y3Rvckludm9jYXRpb24gbm9kZSkgewogICAgX2RhdGEuX2NvbnN0Q29uc3RydWN0b3JJbnZvY2F0aW9uTm9kZXMgPz89IFtdOwogICAgX2RhdGEuX2NvbnN0Q29uc3RydWN0b3JJbnZvY2F0aW9uTm9kZXMuYWRkKG5vZGUpOwogIH0KfQoKLy8vIERhdGEgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIHdvcmxkIGltcGFjdCBkYXRhIGRlcml2ZWQgcHVyZWx5IGZyb20ga2VybmVsLgphYnN0cmFjdCBjbGFzcyBJbXBhY3REYXRhIHsKICBmYWN0b3J5IEltcGFjdERhdGEuZnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpID0KICAgICAgSW1wYWN0RGF0YUltcGwuZnJvbURhdGFTb3VyY2U7CgogIHZvaWQgdG9EYXRhU2luayhEYXRhU2luayBzaW5rKTsKCiAgLy8vIFJlZ2lzdGVycyB0aGUgaW1wYWN0IGRhdGEgd2l0aCBbcmVnaXN0cnldLgogIHZvaWQgYXBwbHkoSW1wYWN0UmVnaXN0cnkgcmVnaXN0cnkpOwp9CgpjbGFzcyBJbXBhY3REYXRhSW1wbCBpbXBsZW1lbnRzIEltcGFjdERhdGEgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ0ltcGFjdERhdGEnOwoKICBMaXN0PF9TdXBlckluaXRpYWxpemVyPiBfc3VwZXJJbml0aWFsaXplcnM7CiAgTGlzdDxpci5OYW1lPiBfc3VwZXJTZXRzOwogIExpc3Q8aXIuTmFtZT4gX3N1cGVyR2V0czsKICBMaXN0PF9TdXBlckludm9jYXRpb24+IF9zdXBlckludm9jYXRpb25zOwogIExpc3Q8X0luc3RhbmNlQWNjZXNzPiBfaW5zdGFuY2VTZXRzOwogIExpc3Q8X0R5bmFtaWNBY2Nlc3M+IF9keW5hbWljU2V0czsKICBMaXN0PF9JbnN0YW5jZUFjY2Vzcz4gX2luc3RhbmNlR2V0czsKICBMaXN0PF9EeW5hbWljQWNjZXNzPiBfZHluYW1pY0dldHM7CiAgTGlzdDxfRnVuY3Rpb25JbnZvY2F0aW9uPiBfZnVuY3Rpb25JbnZvY2F0aW9uczsKICBMaXN0PF9JbnN0YW5jZUludm9jYXRpb24+IF9pbnN0YW5jZUludm9jYXRpb25zOwogIExpc3Q8X0R5bmFtaWNJbnZvY2F0aW9uPiBfZHluYW1pY0ludm9jYXRpb25zOwogIExpc3Q8X0xvY2FsRnVuY3Rpb25JbnZvY2F0aW9uPiBfbG9jYWxGdW5jdGlvbkludm9jYXRpb25zOwogIExpc3Q8X1N0YXRpY0ludm9jYXRpb24+IF9zdGF0aWNJbnZvY2F0aW9uczsKICBMaXN0PF9Db25zdHJ1Y3Rvckludm9jYXRpb24+IF9jb25zdHJ1Y3Rvckludm9jYXRpb25zOwogIExpc3Q8X0NvbnN0SW5zdGFudGlhdGlvbj4gX2NvbnN0SW5zdGFudGlhdGlvbnM7CiAgRW51bVNldDxfRmVhdHVyZT4gX2ZlYXR1cmVzOwogIExpc3Q8X1R5cGVVc2U+IF90eXBlVXNlczsKICBMaXN0PF9SZWRpcmVjdGluZ0luaXRpYWxpemVyPiBfcmVkaXJlY3RpbmdJbml0aWFsaXplcnM7CiAgTGlzdDxpci5GaWVsZD4gX2ZpZWxkSW5pdGlhbGl6ZXJzOwogIE1hcDxpci5GaWVsZCwgTGlzdDxDb25zdGFudFJlZmVyZW5jZT4+IF9maWVsZENvbnN0YW50SW5pdGlhbGl6ZXJzOwogIExpc3Q8X1R5cGVMaXRlcmFsPiBfdHlwZUxpdGVyYWxzOwogIExpc3Q8aXIuVHJlZU5vZGU+IF9sb2NhbEZ1bmN0aW9uczsKICBMaXN0PF9HZW5lcmljSW5zdGFudGlhdGlvbj4gX2dlbmVyaWNJbnN0YW50aWF0aW9uczsKICBMaXN0PF9TdGF0aWNBY2Nlc3M+IF9zdGF0aWNTZXRzOwogIExpc3Q8X1N0YXRpY0FjY2Vzcz4gX3N0YXRpY0dldHM7CiAgTGlzdDxfU3RhdGljQWNjZXNzPiBfc3RhdGljVGVhck9mZnM7CiAgTGlzdDxfTWFwTGl0ZXJhbD4gX21hcExpdGVyYWxzOwogIExpc3Q8X0NvbnRhaW5lckxpdGVyYWw+IF9saXN0TGl0ZXJhbHM7CiAgTGlzdDxfQ29udGFpbmVyTGl0ZXJhbD4gX3NldExpdGVyYWxzOwogIExpc3Q8U3RyaW5nPiBfc3ltYm9sTGl0ZXJhbHM7CiAgTGlzdDxTdHJpbmc+IF9zdHJpbmdMaXRlcmFsczsKICBMaXN0PGJvb2w+IF9ib29sTGl0ZXJhbHM7CiAgTGlzdDxkb3VibGU+IF9kb3VibGVMaXRlcmFsczsKICBMaXN0PGludD4gX2ludExpdGVyYWxzOwogIExpc3Q8X1J1bnRpbWVUeXBlVXNlPiBfcnVudGltZVR5cGVVc2VzOwogIExpc3Q8X0ZvckluRGF0YT4gX2ZvckluRGF0YTsKCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoZXNlIHdoZW4gQ0ZFIHByb3ZpZGVzIGNvbnN0YW50cy4KICBMaXN0PGlyLkNvbnN0cnVjdG9yPiBfY29uc3RydWN0b3JOb2RlczsKICBMaXN0PGlyLkZpZWxkPiBfZmllbGROb2RlczsKICBMaXN0PGlyLlByb2NlZHVyZT4gX3Byb2NlZHVyZU5vZGVzOwogIExpc3Q8aXIuU3dpdGNoU3RhdGVtZW50PiBfc3dpdGNoU3RhdGVtZW50Tm9kZXM7CiAgTGlzdDxpci5TdGF0aWNJbnZvY2F0aW9uPiBfc3RhdGljSW52b2NhdGlvbk5vZGVzOwogIExpc3Q8aXIuQ29uc3RydWN0b3JJbnZvY2F0aW9uPiBfY29uc3RDb25zdHJ1Y3Rvckludm9jYXRpb25Ob2RlczsKCiAgSW1wYWN0RGF0YUltcGwoKTsKCiAgSW1wYWN0RGF0YUltcGwuZnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgX3N1cGVySW5pdGlhbGl6ZXJzID0gc291cmNlLnJlYWRMaXN0KAogICAgICAgICgpID0+IG5ldyBfU3VwZXJJbml0aWFsaXplci5mcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9zdXBlclNldHMgPSBzb3VyY2UucmVhZExpc3QoKCkgPT4gc291cmNlLnJlYWROYW1lKCksIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9zdXBlckdldHMgPSBzb3VyY2UucmVhZExpc3QoKCkgPT4gc291cmNlLnJlYWROYW1lKCksIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9zdXBlckludm9jYXRpb25zID0gc291cmNlLnJlYWRMaXN0KAogICAgICAgICgpID0+IG5ldyBfU3VwZXJJbnZvY2F0aW9uLmZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgX2luc3RhbmNlU2V0cyA9IHNvdXJjZS5yZWFkTGlzdCgKICAgICAgICAoKSA9PiBuZXcgX0luc3RhbmNlQWNjZXNzLmZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgX2R5bmFtaWNTZXRzID0gc291cmNlLnJlYWRMaXN0KAogICAgICAgICgpID0+IG5ldyBfRHluYW1pY0FjY2Vzcy5mcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9pbnN0YW5jZUdldHMgPSBzb3VyY2UucmVhZExpc3QoCiAgICAgICAgKCkgPT4gbmV3IF9JbnN0YW5jZUFjY2Vzcy5mcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9keW5hbWljR2V0cyA9IHNvdXJjZS5yZWFkTGlzdCgKICAgICAgICAoKSA9PiBuZXcgX0R5bmFtaWNBY2Nlc3MuZnJvbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfZnVuY3Rpb25JbnZvY2F0aW9ucyA9IHNvdXJjZS5yZWFkTGlzdCgKICAgICAgICAoKSA9PiBuZXcgX0Z1bmN0aW9uSW52b2NhdGlvbi5mcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9pbnN0YW5jZUludm9jYXRpb25zID0gc291cmNlLnJlYWRMaXN0KAogICAgICAgICgpID0+IG5ldyBfSW5zdGFuY2VJbnZvY2F0aW9uLmZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgX2R5bmFtaWNJbnZvY2F0aW9ucyA9IHNvdXJjZS5yZWFkTGlzdCgKICAgICAgICAoKSA9PiBuZXcgX0R5bmFtaWNJbnZvY2F0aW9uLmZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgX2xvY2FsRnVuY3Rpb25JbnZvY2F0aW9ucyA9IHNvdXJjZS5yZWFkTGlzdCgKICAgICAgICAoKSA9PiBuZXcgX0xvY2FsRnVuY3Rpb25JbnZvY2F0aW9uLmZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgX3N0YXRpY0ludm9jYXRpb25zID0gc291cmNlLnJlYWRMaXN0KAogICAgICAgICgpID0+IG5ldyBfU3RhdGljSW52b2NhdGlvbi5mcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9jb25zdHJ1Y3Rvckludm9jYXRpb25zID0gc291cmNlLnJlYWRMaXN0KAogICAgICAgICgpID0+IG5ldyBfQ29uc3RydWN0b3JJbnZvY2F0aW9uLmZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgX2ZlYXR1cmVzID0gbmV3IEVudW1TZXQ8X0ZlYXR1cmU+LmZyb21WYWx1ZShzb3VyY2UucmVhZEludCgpKTsKICAgIF90eXBlVXNlcyA9IHNvdXJjZS5yZWFkTGlzdCgoKSA9PiBuZXcgX1R5cGVVc2UuZnJvbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfcmVkaXJlY3RpbmdJbml0aWFsaXplcnMgPSBzb3VyY2UucmVhZExpc3QoCiAgICAgICAgKCkgPT4gbmV3IF9SZWRpcmVjdGluZ0luaXRpYWxpemVyLmZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgX2ZpZWxkSW5pdGlhbGl6ZXJzID0gc291cmNlLnJlYWRNZW1iZXJOb2RlcyhlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfZmllbGRDb25zdGFudEluaXRpYWxpemVycyA9CiAgICAgICAgc291cmNlLnJlYWRNZW1iZXJOb2RlTWFwKHNvdXJjZS5yZWFkVHJlZU5vZGVzLCBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfdHlwZUxpdGVyYWxzID0gc291cmNlLnJlYWRMaXN0KAogICAgICAgICgpID0+IG5ldyBfVHlwZUxpdGVyYWwuZnJvbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfbG9jYWxGdW5jdGlvbnMgPSBzb3VyY2UucmVhZFRyZWVOb2RlcyhlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfZ2VuZXJpY0luc3RhbnRpYXRpb25zID0gc291cmNlLnJlYWRMaXN0KAogICAgICAgICgpID0+IG5ldyBfR2VuZXJpY0luc3RhbnRpYXRpb24uZnJvbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfc3RhdGljU2V0cyA9IHNvdXJjZS5yZWFkTGlzdCgKICAgICAgICAoKSA9PiBuZXcgX1N0YXRpY0FjY2Vzcy5mcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9zdGF0aWNHZXRzID0gc291cmNlLnJlYWRMaXN0KAogICAgICAgICgpID0+IG5ldyBfU3RhdGljQWNjZXNzLmZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgX3N0YXRpY1RlYXJPZmZzID0gc291cmNlLnJlYWRMaXN0KAogICAgICAgICgpID0+IG5ldyBfU3RhdGljQWNjZXNzLmZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgX21hcExpdGVyYWxzID0gc291cmNlLnJlYWRMaXN0KCgpID0+IG5ldyBfTWFwTGl0ZXJhbC5mcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9saXN0TGl0ZXJhbHMgPSBzb3VyY2UucmVhZExpc3QoCiAgICAgICAgKCkgPT4gbmV3IF9Db250YWluZXJMaXRlcmFsLmZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgX3NldExpdGVyYWxzID0gc291cmNlLnJlYWRMaXN0KAogICAgICAgICgpID0+IG5ldyBfQ29udGFpbmVyTGl0ZXJhbC5mcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9zeW1ib2xMaXRlcmFscyA9IHNvdXJjZS5yZWFkU3RyaW5ncyhlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfc3RyaW5nTGl0ZXJhbHMgPSBzb3VyY2UucmVhZFN0cmluZ3MoZW1wdHlBc051bGw6IHRydWUpOwogICAgX2Jvb2xMaXRlcmFscyA9IHNvdXJjZS5yZWFkTGlzdCgoKSA9PiBzb3VyY2UucmVhZEJvb2woKSwgZW1wdHlBc051bGw6IHRydWUpOwogICAgX2RvdWJsZUxpdGVyYWxzID0KICAgICAgICBzb3VyY2UucmVhZExpc3QoKCkgPT4gc291cmNlLnJlYWREb3VibGVWYWx1ZSgpLCBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfaW50TGl0ZXJhbHMgPQogICAgICAgIHNvdXJjZS5yZWFkTGlzdCgoKSA9PiBzb3VyY2UucmVhZEludGVnZXJWYWx1ZSgpLCBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfcnVudGltZVR5cGVVc2VzID0gc291cmNlLnJlYWRMaXN0KAogICAgICAgICgpID0+IG5ldyBfUnVudGltZVR5cGVVc2UuZnJvbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CgogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoZXNlIHdoZW4gQ0ZFIHByb3ZpZGVzIGNvbnN0YW50cy4KICAgIF9jb25zdHJ1Y3Rvck5vZGVzID0KICAgICAgICBzb3VyY2UucmVhZE1lbWJlck5vZGVzPGlyLkNvbnN0cnVjdG9yPihlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfZmllbGROb2RlcyA9IHNvdXJjZS5yZWFkTWVtYmVyTm9kZXM8aXIuRmllbGQ+KGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9wcm9jZWR1cmVOb2RlcyA9IHNvdXJjZS5yZWFkTWVtYmVyTm9kZXM8aXIuUHJvY2VkdXJlPihlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfc3dpdGNoU3RhdGVtZW50Tm9kZXMgPQogICAgICAgIHNvdXJjZS5yZWFkVHJlZU5vZGVzPGlyLlN3aXRjaFN0YXRlbWVudD4oZW1wdHlBc051bGw6IHRydWUpOwogICAgX3N0YXRpY0ludm9jYXRpb25Ob2RlcyA9CiAgICAgICAgc291cmNlLnJlYWRUcmVlTm9kZXM8aXIuU3RhdGljSW52b2NhdGlvbj4oZW1wdHlBc051bGw6IHRydWUpOwogICAgX2NvbnN0Q29uc3RydWN0b3JJbnZvY2F0aW9uTm9kZXMgPQogICAgICAgIHNvdXJjZS5yZWFkVHJlZU5vZGVzPGlyLkNvbnN0cnVjdG9ySW52b2NhdGlvbj4oZW1wdHlBc051bGw6IHRydWUpOwogICAgc291cmNlLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB0b0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKCiAgICBzaW5rLndyaXRlTGlzdCgKICAgICAgICBfc3VwZXJJbml0aWFsaXplcnMsIChfU3VwZXJJbml0aWFsaXplciBvKSA9PiBvLnRvRGF0YVNpbmsoc2luayksCiAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KF9zdXBlclNldHMsIHNpbmsud3JpdGVOYW1lLCBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoX3N1cGVyR2V0cywgc2luay53cml0ZU5hbWUsIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdCgKICAgICAgICBfc3VwZXJJbnZvY2F0aW9ucywgKF9TdXBlckludm9jYXRpb24gbykgPT4gby50b0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdChfaW5zdGFuY2VTZXRzLCAoX0luc3RhbmNlQWNjZXNzIG8pID0+IG8udG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoX2R5bmFtaWNTZXRzLCAoX0R5bmFtaWNBY2Nlc3MgbykgPT4gby50b0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdChfaW5zdGFuY2VHZXRzLCAoX0luc3RhbmNlQWNjZXNzIG8pID0+IG8udG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoX2R5bmFtaWNHZXRzLCAoX0R5bmFtaWNBY2Nlc3MgbykgPT4gby50b0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdCgKICAgICAgICBfZnVuY3Rpb25JbnZvY2F0aW9ucywgKF9GdW5jdGlvbkludm9jYXRpb24gbykgPT4gby50b0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdCgKICAgICAgICBfaW5zdGFuY2VJbnZvY2F0aW9ucywgKF9JbnN0YW5jZUludm9jYXRpb24gbykgPT4gby50b0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdCgKICAgICAgICBfZHluYW1pY0ludm9jYXRpb25zLCAoX0R5bmFtaWNJbnZvY2F0aW9uIG8pID0+IG8udG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoX2xvY2FsRnVuY3Rpb25JbnZvY2F0aW9ucywKICAgICAgICAoX0xvY2FsRnVuY3Rpb25JbnZvY2F0aW9uIG8pID0+IG8udG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoCiAgICAgICAgX3N0YXRpY0ludm9jYXRpb25zLCAoX1N0YXRpY0ludm9jYXRpb24gbykgPT4gby50b0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdChfY29uc3RydWN0b3JJbnZvY2F0aW9ucywKICAgICAgICAoX0NvbnN0cnVjdG9ySW52b2NhdGlvbiBvKSA9PiBvLnRvRGF0YVNpbmsoc2luayksCiAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVJbnQoX2ZlYXR1cmVzPy52YWx1ZSA/PyAwKTsKICAgIHNpbmsud3JpdGVMaXN0KF90eXBlVXNlcywgKF9UeXBlVXNlIG8pID0+IG8udG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoX3JlZGlyZWN0aW5nSW5pdGlhbGl6ZXJzLAogICAgICAgIChfUmVkaXJlY3RpbmdJbml0aWFsaXplciBvKSA9PiBvLnRvRGF0YVNpbmsoc2luayksCiAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVNZW1iZXJOb2RlcyhfZmllbGRJbml0aWFsaXplcnMsIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTWVtYmVyTm9kZU1hcChfZmllbGRDb25zdGFudEluaXRpYWxpemVycywgc2luay53cml0ZVRyZWVOb2RlcywKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoX3R5cGVMaXRlcmFscywgKF9UeXBlTGl0ZXJhbCBvKSA9PiBvLnRvRGF0YVNpbmsoc2luayksCiAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVUcmVlTm9kZXMoX2xvY2FsRnVuY3Rpb25zLCBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoCiAgICAgICAgX2dlbmVyaWNJbnN0YW50aWF0aW9ucywgKF9HZW5lcmljSW5zdGFudGlhdGlvbiBvKSA9PiBvLnRvRGF0YVNpbmsoc2luayksCiAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KF9zdGF0aWNTZXRzLCAoX1N0YXRpY0FjY2VzcyBvKSA9PiBvLnRvRGF0YVNpbmsoc2luayksCiAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KF9zdGF0aWNHZXRzLCAoX1N0YXRpY0FjY2VzcyBvKSA9PiBvLnRvRGF0YVNpbmsoc2luayksCiAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KF9zdGF0aWNUZWFyT2ZmcywgKF9TdGF0aWNBY2Nlc3MgbykgPT4gby50b0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdChfbWFwTGl0ZXJhbHMsIChfTWFwTGl0ZXJhbCBvKSA9PiBvLnRvRGF0YVNpbmsoc2luayksCiAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KF9saXN0TGl0ZXJhbHMsIChfQ29udGFpbmVyTGl0ZXJhbCBvKSA9PiBvLnRvRGF0YVNpbmsoc2luayksCiAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KF9zZXRMaXRlcmFscywgKF9Db250YWluZXJMaXRlcmFsIG8pID0+IG8udG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZVN0cmluZ3MoX3N5bWJvbExpdGVyYWxzLCBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZVN0cmluZ3MoX3N0cmluZ0xpdGVyYWxzLCBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoX2Jvb2xMaXRlcmFscywgc2luay53cml0ZUJvb2wsIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdChfZG91YmxlTGl0ZXJhbHMsIHNpbmsud3JpdGVEb3VibGVWYWx1ZSwgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KF9pbnRMaXRlcmFscywgc2luay53cml0ZUludGVnZXJWYWx1ZSwgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KF9ydW50aW1lVHlwZVVzZXMsIChfUnVudGltZVR5cGVVc2UgbykgPT4gby50b0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CgogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoZXNlIHdoZW4gQ0ZFIHByb3ZpZGVzIGNvbnN0YW50cy4KICAgIHNpbmsud3JpdGVNZW1iZXJOb2RlcyhfY29uc3RydWN0b3JOb2RlcywgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVNZW1iZXJOb2RlcyhfZmllbGROb2RlcywgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVNZW1iZXJOb2RlcyhfcHJvY2VkdXJlTm9kZXMsIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlVHJlZU5vZGVzKF9zd2l0Y2hTdGF0ZW1lbnROb2RlcywgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVUcmVlTm9kZXMoX3N0YXRpY0ludm9jYXRpb25Ob2RlcywgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVUcmVlTm9kZXMoX2NvbnN0Q29uc3RydWN0b3JJbnZvY2F0aW9uTm9kZXMsIGFsbG93TnVsbDogdHJ1ZSk7CgogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYXBwbHkoSW1wYWN0UmVnaXN0cnkgcmVnaXN0cnkpIHsKICAgIGlmIChfc3VwZXJJbml0aWFsaXplcnMgIT0gbnVsbCkgewogICAgICBmb3IgKF9TdXBlckluaXRpYWxpemVyIGRhdGEgaW4gX3N1cGVySW5pdGlhbGl6ZXJzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJTdXBlckluaXRpYWxpemVyKAogICAgICAgICAgICBkYXRhLnNvdXJjZSwKICAgICAgICAgICAgZGF0YS50YXJnZXQsCiAgICAgICAgICAgIGRhdGEuY2FsbFN0cnVjdHVyZS5wb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICAgICAgICBkYXRhLmNhbGxTdHJ1Y3R1cmUubmFtZWRBcmd1bWVudHMsCiAgICAgICAgICAgIGRhdGEuY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRzKTsKICAgICAgfQogICAgfQogICAgaWYgKF9zdXBlclNldHMgIT0gbnVsbCkgewogICAgICBmb3IgKGlyLk5hbWUgZGF0YSBpbiBfc3VwZXJTZXRzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJTdXBlclNldChkYXRhKTsKICAgICAgfQogICAgfQogICAgaWYgKF9zdXBlckdldHMgIT0gbnVsbCkgewogICAgICBmb3IgKGlyLk5hbWUgZGF0YSBpbiBfc3VwZXJHZXRzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJTdXBlckdldChkYXRhKTsKICAgICAgfQogICAgfQogICAgaWYgKF9zdXBlckludm9jYXRpb25zICE9IG51bGwpIHsKICAgICAgZm9yIChfU3VwZXJJbnZvY2F0aW9uIGRhdGEgaW4gX3N1cGVySW52b2NhdGlvbnMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlclN1cGVySW52b2NhdGlvbigKICAgICAgICAgICAgZGF0YS5uYW1lLAogICAgICAgICAgICBkYXRhLmNhbGxTdHJ1Y3R1cmUucG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgICAgICAgZGF0YS5jYWxsU3RydWN0dXJlLm5hbWVkQXJndW1lbnRzLAogICAgICAgICAgICBkYXRhLmNhbGxTdHJ1Y3R1cmUudHlwZUFyZ3VtZW50cyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfaW5zdGFuY2VTZXRzICE9IG51bGwpIHsKICAgICAgZm9yIChfSW5zdGFuY2VBY2Nlc3MgZGF0YSBpbiBfaW5zdGFuY2VTZXRzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJJbnN0YW5jZVNldCgKICAgICAgICAgICAgZGF0YS5yZWNlaXZlclR5cGUsIGRhdGEuY2xhc3NSZWxhdGlvbiwgZGF0YS50YXJnZXQpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2R5bmFtaWNTZXRzICE9IG51bGwpIHsKICAgICAgZm9yIChfRHluYW1pY0FjY2VzcyBkYXRhIGluIF9keW5hbWljU2V0cykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyRHluYW1pY1NldCgKICAgICAgICAgICAgZGF0YS5yZWNlaXZlclR5cGUsIGRhdGEuY2xhc3NSZWxhdGlvbiwgZGF0YS5uYW1lKTsKICAgICAgfQogICAgfQogICAgaWYgKF9pbnN0YW5jZUdldHMgIT0gbnVsbCkgewogICAgICBmb3IgKF9JbnN0YW5jZUFjY2VzcyBkYXRhIGluIF9pbnN0YW5jZUdldHMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3Rlckluc3RhbmNlR2V0KAogICAgICAgICAgICBkYXRhLnJlY2VpdmVyVHlwZSwgZGF0YS5jbGFzc1JlbGF0aW9uLCBkYXRhLnRhcmdldCk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfZHluYW1pY0dldHMgIT0gbnVsbCkgewogICAgICBmb3IgKF9EeW5hbWljQWNjZXNzIGRhdGEgaW4gX2R5bmFtaWNHZXRzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJEeW5hbWljR2V0KAogICAgICAgICAgICBkYXRhLnJlY2VpdmVyVHlwZSwgZGF0YS5jbGFzc1JlbGF0aW9uLCBkYXRhLm5hbWUpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2Z1bmN0aW9uSW52b2NhdGlvbnMgIT0gbnVsbCkgewogICAgICBmb3IgKF9GdW5jdGlvbkludm9jYXRpb24gZGF0YSBpbiBfZnVuY3Rpb25JbnZvY2F0aW9ucykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyRnVuY3Rpb25JbnZvY2F0aW9uKAogICAgICAgICAgICBkYXRhLnJlY2VpdmVyVHlwZSwKICAgICAgICAgICAgZGF0YS5jYWxsU3RydWN0dXJlLnBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgICAgICAgIGRhdGEuY2FsbFN0cnVjdHVyZS5uYW1lZEFyZ3VtZW50cywKICAgICAgICAgICAgZGF0YS5jYWxsU3RydWN0dXJlLnR5cGVBcmd1bWVudHMpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2luc3RhbmNlSW52b2NhdGlvbnMgIT0gbnVsbCkgewogICAgICBmb3IgKF9JbnN0YW5jZUludm9jYXRpb24gZGF0YSBpbiBfaW5zdGFuY2VJbnZvY2F0aW9ucykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVySW5zdGFuY2VJbnZvY2F0aW9uKAogICAgICAgICAgICBkYXRhLnJlY2VpdmVyVHlwZSwKICAgICAgICAgICAgZGF0YS5jbGFzc1JlbGF0aW9uLAogICAgICAgICAgICBkYXRhLnRhcmdldCwKICAgICAgICAgICAgZGF0YS5jYWxsU3RydWN0dXJlLnBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgICAgICAgIGRhdGEuY2FsbFN0cnVjdHVyZS5uYW1lZEFyZ3VtZW50cywKICAgICAgICAgICAgZGF0YS5jYWxsU3RydWN0dXJlLnR5cGVBcmd1bWVudHMpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2R5bmFtaWNJbnZvY2F0aW9ucyAhPSBudWxsKSB7CiAgICAgIGZvciAoX0R5bmFtaWNJbnZvY2F0aW9uIGRhdGEgaW4gX2R5bmFtaWNJbnZvY2F0aW9ucykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyRHluYW1pY0ludm9jYXRpb24oCiAgICAgICAgICAgIGRhdGEucmVjZWl2ZXJUeXBlLAogICAgICAgICAgICBkYXRhLmNsYXNzUmVsYXRpb24sCiAgICAgICAgICAgIGRhdGEubmFtZSwKICAgICAgICAgICAgZGF0YS5jYWxsU3RydWN0dXJlLnBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgICAgICAgIGRhdGEuY2FsbFN0cnVjdHVyZS5uYW1lZEFyZ3VtZW50cywKICAgICAgICAgICAgZGF0YS5jYWxsU3RydWN0dXJlLnR5cGVBcmd1bWVudHMpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2xvY2FsRnVuY3Rpb25JbnZvY2F0aW9ucyAhPSBudWxsKSB7CiAgICAgIGZvciAoX0xvY2FsRnVuY3Rpb25JbnZvY2F0aW9uIGRhdGEgaW4gX2xvY2FsRnVuY3Rpb25JbnZvY2F0aW9ucykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyTG9jYWxGdW5jdGlvbkludm9jYXRpb24oCiAgICAgICAgICAgIGRhdGEubG9jYWxGdW5jdGlvbiwKICAgICAgICAgICAgZGF0YS5jYWxsU3RydWN0dXJlLnBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgICAgICAgIGRhdGEuY2FsbFN0cnVjdHVyZS5uYW1lZEFyZ3VtZW50cywKICAgICAgICAgICAgZGF0YS5jYWxsU3RydWN0dXJlLnR5cGVBcmd1bWVudHMpOwogICAgICB9CiAgICB9CiAgICBpZiAoX3N0YXRpY0ludm9jYXRpb25zICE9IG51bGwpIHsKICAgICAgZm9yIChfU3RhdGljSW52b2NhdGlvbiBkYXRhIGluIF9zdGF0aWNJbnZvY2F0aW9ucykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljSW52b2NhdGlvbigKICAgICAgICAgICAgZGF0YS50YXJnZXQsCiAgICAgICAgICAgIGRhdGEuY2FsbFN0cnVjdHVyZS5wb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICAgICAgICBkYXRhLmNhbGxTdHJ1Y3R1cmUubmFtZWRBcmd1bWVudHMsCiAgICAgICAgICAgIGRhdGEuY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRzLAogICAgICAgICAgICBkYXRhLmltcG9ydCk7CiAgICAgICAgOwogICAgICB9CiAgICB9CiAgICBpZiAoX2NvbnN0cnVjdG9ySW52b2NhdGlvbnMgIT0gbnVsbCkgewogICAgICBmb3IgKF9Db25zdHJ1Y3Rvckludm9jYXRpb24gZGF0YSBpbiBfY29uc3RydWN0b3JJbnZvY2F0aW9ucykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyTmV3KAogICAgICAgICAgICBkYXRhLmNvbnN0cnVjdG9yLAogICAgICAgICAgICBkYXRhLnR5cGUsCiAgICAgICAgICAgIGRhdGEuY2FsbFN0cnVjdHVyZS5wb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICAgICAgICBkYXRhLmNhbGxTdHJ1Y3R1cmUubmFtZWRBcmd1bWVudHMsCiAgICAgICAgICAgIGRhdGEuY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRzLAogICAgICAgICAgICBkYXRhLmltcG9ydCwKICAgICAgICAgICAgaXNDb25zdDogZGF0YS5pc0NvbnN0KTsKICAgICAgfQogICAgfQogICAgaWYgKF9jb25zdEluc3RhbnRpYXRpb25zICE9IG51bGwpIHsKICAgICAgZm9yIChfQ29uc3RJbnN0YW50aWF0aW9uIGRhdGEgaW4gX2NvbnN0SW5zdGFudGlhdGlvbnMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlckNvbnN0SW5zdGFudGlhdGlvbigKICAgICAgICAgICAgZGF0YS5jbHMsIGRhdGEudHlwZUFyZ3VtZW50cywgZGF0YS5pbXBvcnQpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2ZlYXR1cmVzICE9IG51bGwpIHsKICAgICAgZm9yIChfRmVhdHVyZSBkYXRhIGluIF9mZWF0dXJlcy5pdGVyYWJsZShfRmVhdHVyZS52YWx1ZXMpKSB7CiAgICAgICAgc3dpdGNoIChkYXRhKSB7CiAgICAgICAgICBjYXNlIF9GZWF0dXJlLmxhenlGaWVsZDoKICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJMYXp5RmllbGQoKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIF9GZWF0dXJlLmxvYWRMaWJyYXJ5OgogICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckxvYWRMaWJyYXJ5KCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBfRmVhdHVyZS5zdGFja1RyYWNlOgogICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlclN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIF9GZWF0dXJlLmNhdGNoQ2xhdXNlOgogICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckNhdGNoKCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBfRmVhdHVyZS50aHJvd0V4cHJlc3Npb246CiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyVGhyb3coKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIF9GZWF0dXJlLmxvY2FsV2l0aG91dEluaXRpYWxpemVyOgogICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckxvY2FsV2l0aG91dEluaXRpYWxpemVyKCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBfRmVhdHVyZS5zdHJpbmdDb25jYXRlbmF0aW9uOgogICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlclN0cmluZ0NvbmNhdGVuYXRpb24oKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIF9GZWF0dXJlLmFzc2VydFdpdGhNZXNzYWdlOgogICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckFzc2VydCh3aXRoTWVzc2FnZTogdHJ1ZSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBfRmVhdHVyZS5hc3NlcnRXaXRob3V0TWVzc2FnZToKICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBc3NlcnQod2l0aE1lc3NhZ2U6IGZhbHNlKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIF9GZWF0dXJlLm51bGxMaXRlcmFsOgogICAgICAgICAgICByZWdpc3RyeS5yZWdpc3Rlck51bGxMaXRlcmFsKCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKF90eXBlVXNlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoX1R5cGVVc2UgZGF0YSBpbiBfdHlwZVVzZXMpIHsKICAgICAgICBzd2l0Y2ggKGRhdGEua2luZCkgewogICAgICAgICAgY2FzZSBfVHlwZVVzZUtpbmQucGFyYW1ldGVyQ2hlY2s6CiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyUGFyYW1ldGVyQ2hlY2soZGF0YS50eXBlKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIF9UeXBlVXNlS2luZC5jYXRjaFR5cGU6CiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQ2F0Y2hUeXBlKGRhdGEudHlwZSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBfVHlwZVVzZUtpbmQuYXNDYXN0OgogICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckFzQ2FzdChkYXRhLnR5cGUpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgX1R5cGVVc2VLaW5kLmltcGxpY2l0Q2FzdDoKICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJJbXBsaWNpdENhc3QoZGF0YS50eXBlKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIF9UeXBlVXNlS2luZC5pc0NoZWNrOgogICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlcklzQ2hlY2soZGF0YS50eXBlKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIF9UeXBlVXNlS2luZC5hc3luY1N0YXJNYXJrZXI6CiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQXN5bmNTdGFyKGRhdGEudHlwZSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBfVHlwZVVzZUtpbmQuYXN5bmNNYXJrZXI6CiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQXN5bmMoZGF0YS50eXBlKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIF9UeXBlVXNlS2luZC5zeW5jU3Rhck1hcmtlcjoKICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJTeW5jU3RhcihkYXRhLnR5cGUpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChfcmVkaXJlY3RpbmdJbml0aWFsaXplcnMgIT0gbnVsbCkgewogICAgICBmb3IgKF9SZWRpcmVjdGluZ0luaXRpYWxpemVyIGRhdGEgaW4gX3JlZGlyZWN0aW5nSW5pdGlhbGl6ZXJzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJSZWRpcmVjdGluZ0luaXRpYWxpemVyKAogICAgICAgICAgICBkYXRhLmNvbnN0cnVjdG9yLAogICAgICAgICAgICBkYXRhLmNhbGxTdHJ1Y3R1cmUucG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgICAgICAgZGF0YS5jYWxsU3RydWN0dXJlLm5hbWVkQXJndW1lbnRzLAogICAgICAgICAgICBkYXRhLmNhbGxTdHJ1Y3R1cmUudHlwZUFyZ3VtZW50cyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfZmllbGRJbml0aWFsaXplcnMgIT0gbnVsbCkgewogICAgICBmb3IgKGlyLkZpZWxkIGRhdGEgaW4gX2ZpZWxkSW5pdGlhbGl6ZXJzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJGaWVsZEluaXRpYWxpemF0aW9uKGRhdGEpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2ZpZWxkQ29uc3RhbnRJbml0aWFsaXplcnMgIT0gbnVsbCkgewogICAgICBfZmllbGRDb25zdGFudEluaXRpYWxpemVycwogICAgICAgICAgLmZvckVhY2goKGlyLkZpZWxkIGZpZWxkLCBMaXN0PENvbnN0YW50UmVmZXJlbmNlPiBjb25zdGFudHMpIHsKICAgICAgICBmb3IgKENvbnN0YW50UmVmZXJlbmNlIGNvbnN0YW50IGluIGNvbnN0YW50cykgewogICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJGaWVsZENvbnN0YW50SW5pdGlhbGl6YXRpb24oZmllbGQsIGNvbnN0YW50KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgaWYgKF90eXBlTGl0ZXJhbHMgIT0gbnVsbCkgewogICAgICBmb3IgKF9UeXBlTGl0ZXJhbCBkYXRhIGluIF90eXBlTGl0ZXJhbHMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlclR5cGVMaXRlcmFsKGRhdGEudHlwZSwgZGF0YS5pbXBvcnQpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2xvY2FsRnVuY3Rpb25zICE9IG51bGwpIHsKICAgICAgZm9yIChpci5UcmVlTm9kZSBkYXRhIGluIF9sb2NhbEZ1bmN0aW9ucykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyTG9jYWxGdW5jdGlvbihkYXRhKTsKICAgICAgfQogICAgfQogICAgaWYgKF9nZW5lcmljSW5zdGFudGlhdGlvbnMgIT0gbnVsbCkgewogICAgICBmb3IgKF9HZW5lcmljSW5zdGFudGlhdGlvbiBkYXRhIGluIF9nZW5lcmljSW5zdGFudGlhdGlvbnMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlckdlbmVyaWNJbnN0YW50aWF0aW9uKAogICAgICAgICAgICBkYXRhLmV4cHJlc3Npb25UeXBlLCBkYXRhLnR5cGVBcmd1bWVudHMpOwogICAgICB9CiAgICB9CiAgICBpZiAoX3N0YXRpY1NldHMgIT0gbnVsbCkgewogICAgICBmb3IgKF9TdGF0aWNBY2Nlc3MgZGF0YSBpbiBfc3RhdGljU2V0cykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljU2V0KGRhdGEudGFyZ2V0LCBkYXRhLmltcG9ydCk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfc3RhdGljR2V0cyAhPSBudWxsKSB7CiAgICAgIGZvciAoX1N0YXRpY0FjY2VzcyBkYXRhIGluIF9zdGF0aWNHZXRzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNHZXQoZGF0YS50YXJnZXQsIGRhdGEuaW1wb3J0KTsKICAgICAgfQogICAgfQogICAgaWYgKF9zdGF0aWNUZWFyT2ZmcyAhPSBudWxsKSB7CiAgICAgIGZvciAoX1N0YXRpY0FjY2VzcyBkYXRhIGluIF9zdGF0aWNUZWFyT2ZmcykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVGVhck9mZihkYXRhLnRhcmdldCwgZGF0YS5pbXBvcnQpOwogICAgICB9CiAgICB9CiAgICBpZiAoX21hcExpdGVyYWxzICE9IG51bGwpIHsKICAgICAgZm9yIChfTWFwTGl0ZXJhbCBkYXRhIGluIF9tYXBMaXRlcmFscykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyTWFwTGl0ZXJhbChkYXRhLmtleVR5cGUsIGRhdGEudmFsdWVUeXBlLAogICAgICAgICAgICBpc0NvbnN0OiBkYXRhLmlzQ29uc3QsIGlzRW1wdHk6IGRhdGEuaXNFbXB0eSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfbGlzdExpdGVyYWxzICE9IG51bGwpIHsKICAgICAgZm9yIChfQ29udGFpbmVyTGl0ZXJhbCBkYXRhIGluIF9saXN0TGl0ZXJhbHMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3Rlckxpc3RMaXRlcmFsKGRhdGEuZWxlbWVudFR5cGUsCiAgICAgICAgICAgIGlzQ29uc3Q6IGRhdGEuaXNDb25zdCwgaXNFbXB0eTogZGF0YS5pc0VtcHR5KTsKICAgICAgfQogICAgfQogICAgaWYgKF9zZXRMaXRlcmFscyAhPSBudWxsKSB7CiAgICAgIGZvciAoX0NvbnRhaW5lckxpdGVyYWwgZGF0YSBpbiBfc2V0TGl0ZXJhbHMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlclNldExpdGVyYWwoZGF0YS5lbGVtZW50VHlwZSwKICAgICAgICAgICAgaXNDb25zdDogZGF0YS5pc0NvbnN0LCBpc0VtcHR5OiBkYXRhLmlzRW1wdHkpOwogICAgICB9CiAgICB9CiAgICBpZiAoX3N5bWJvbExpdGVyYWxzICE9IG51bGwpIHsKICAgICAgZm9yIChTdHJpbmcgZGF0YSBpbiBfc3ltYm9sTGl0ZXJhbHMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlclN5bWJvbExpdGVyYWwoZGF0YSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfc3RyaW5nTGl0ZXJhbHMgIT0gbnVsbCkgewogICAgICBmb3IgKFN0cmluZyBkYXRhIGluIF9zdHJpbmdMaXRlcmFscykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyU3RyaW5nTGl0ZXJhbChkYXRhKTsKICAgICAgfQogICAgfQogICAgaWYgKF9ib29sTGl0ZXJhbHMgIT0gbnVsbCkgewogICAgICBmb3IgKGJvb2wgZGF0YSBpbiBfYm9vbExpdGVyYWxzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJCb29sTGl0ZXJhbChkYXRhKTsKICAgICAgfQogICAgfQogICAgaWYgKF9kb3VibGVMaXRlcmFscyAhPSBudWxsKSB7CiAgICAgIGZvciAoZG91YmxlIGRhdGEgaW4gX2RvdWJsZUxpdGVyYWxzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJEb3VibGVMaXRlcmFsKGRhdGEpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2ludExpdGVyYWxzICE9IG51bGwpIHsKICAgICAgZm9yIChpbnQgZGF0YSBpbiBfaW50TGl0ZXJhbHMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlckludExpdGVyYWwoZGF0YSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfcnVudGltZVR5cGVVc2VzICE9IG51bGwpIHsKICAgICAgZm9yIChfUnVudGltZVR5cGVVc2UgZGF0YSBpbiBfcnVudGltZVR5cGVVc2VzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJSdW50aW1lVHlwZVVzZSgKICAgICAgICAgICAgZGF0YS5ub2RlLCBkYXRhLmtpbmQsIGRhdGEucmVjZWl2ZXJUeXBlLCBkYXRhLmFyZ3VtZW50VHlwZSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfZm9ySW5EYXRhICE9IG51bGwpIHsKICAgICAgZm9yIChfRm9ySW5EYXRhIGRhdGEgaW4gX2ZvckluRGF0YSkgewogICAgICAgIGlmIChkYXRhLmlzQXN5bmMpIHsKICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQXN5bmNGb3JJbigKICAgICAgICAgICAgICBkYXRhLml0ZXJhYmxlVHlwZSwgZGF0YS5pdGVyYXRvclR5cGUsIGRhdGEuaXRlcmF0b3JDbGFzc1JlbGF0aW9uKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJTeW5jRm9ySW4oCiAgICAgICAgICAgICAgZGF0YS5pdGVyYWJsZVR5cGUsIGRhdGEuaXRlcmF0b3JUeXBlLCBkYXRhLml0ZXJhdG9yQ2xhc3NSZWxhdGlvbik7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoZXNlIHdoZW4gQ0ZFIHByb3ZpZGVzIGNvbnN0YW50cy4KICAgIGlmIChfY29uc3RydWN0b3JOb2RlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoaXIuQ29uc3RydWN0b3IgZGF0YSBpbiBfY29uc3RydWN0b3JOb2RlcykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQ29uc3RydWN0b3JOb2RlKGRhdGEpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2ZpZWxkTm9kZXMgIT0gbnVsbCkgewogICAgICBmb3IgKGlyLkZpZWxkIGRhdGEgaW4gX2ZpZWxkTm9kZXMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlckZpZWxkTm9kZShkYXRhKTsKICAgICAgfQogICAgfQogICAgaWYgKF9wcm9jZWR1cmVOb2RlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoaXIuUHJvY2VkdXJlIGRhdGEgaW4gX3Byb2NlZHVyZU5vZGVzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJQcm9jZWR1cmVOb2RlKGRhdGEpOwogICAgICB9CiAgICB9CiAgICBpZiAoX3N3aXRjaFN0YXRlbWVudE5vZGVzICE9IG51bGwpIHsKICAgICAgZm9yIChpci5Td2l0Y2hTdGF0ZW1lbnQgZGF0YSBpbiBfc3dpdGNoU3RhdGVtZW50Tm9kZXMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlclN3aXRjaFN0YXRlbWVudE5vZGUoZGF0YSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfc3RhdGljSW52b2NhdGlvbk5vZGVzICE9IG51bGwpIHsKICAgICAgZm9yIChpci5TdGF0aWNJbnZvY2F0aW9uIGRhdGEgaW4gX3N0YXRpY0ludm9jYXRpb25Ob2RlcykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljSW52b2NhdGlvbk5vZGUoZGF0YSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfY29uc3RDb25zdHJ1Y3Rvckludm9jYXRpb25Ob2RlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoaXIuQ29uc3RydWN0b3JJbnZvY2F0aW9uIGRhdGEgaW4gX2NvbnN0Q29uc3RydWN0b3JJbnZvY2F0aW9uTm9kZXMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlckNvbnN0Q29uc3RydWN0b3JJbnZvY2F0aW9uTm9kZShkYXRhKTsKICAgICAgfQogICAgfQogIH0KfQoKY2xhc3MgX0NhbGxTdHJ1Y3R1cmUgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ19DYWxsU3RydWN0dXJlJzsKCiAgZmluYWwgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50czsKICBmaW5hbCBpbnQgcG9zaXRpb25hbEFyZ3VtZW50czsKICBmaW5hbCBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHM7CgogIF9DYWxsU3RydWN0dXJlLmludGVybmFsKAogICAgICB0aGlzLnR5cGVBcmd1bWVudHMsIHRoaXMucG9zaXRpb25hbEFyZ3VtZW50cywgdGhpcy5uYW1lZEFyZ3VtZW50cyk7CgogIGZhY3RvcnkgX0NhbGxTdHJ1Y3R1cmUoaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywKICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgcmV0dXJuIG5ldyBfQ2FsbFN0cnVjdHVyZS5pbnRlcm5hbCgKICAgICAgICB0eXBlQXJndW1lbnRzLCBwb3NpdGlvbmFsQXJndW1lbnRzLCBuYW1lZEFyZ3VtZW50cyk7CiAgfQoKICBmYWN0b3J5IF9DYWxsU3RydWN0dXJlLmZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPSBzb3VyY2UucmVhZERhcnRUeXBlTm9kZXMoKTsKICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRzID0gc291cmNlLnJlYWRJbnQoKTsKICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cyA9IHNvdXJjZS5yZWFkU3RyaW5ncygpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBfQ2FsbFN0cnVjdHVyZS5pbnRlcm5hbCgKICAgICAgICB0eXBlQXJndW1lbnRzLCBwb3NpdGlvbmFsQXJndW1lbnRzLCBuYW1lZEFyZ3VtZW50cyk7CiAgfQoKICB2b2lkIHRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZURhcnRUeXBlTm9kZXModHlwZUFyZ3VtZW50cyk7CiAgICBzaW5rLndyaXRlSW50KHBvc2l0aW9uYWxBcmd1bWVudHMpOwogICAgc2luay53cml0ZVN0cmluZ3MobmFtZWRBcmd1bWVudHMpOwogICAgc2luay5lbmQodGFnKTsKICB9Cn0KCmNsYXNzIF9TdXBlckluaXRpYWxpemVyIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdfU3VwZXJJbml0aWFsaXplcic7CgogIGZpbmFsIGlyLkNvbnN0cnVjdG9yIHNvdXJjZTsKICBmaW5hbCBpci5Db25zdHJ1Y3RvciB0YXJnZXQ7CiAgZmluYWwgX0NhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZTsKCiAgX1N1cGVySW5pdGlhbGl6ZXIodGhpcy5zb3VyY2UsIHRoaXMudGFyZ2V0LCB0aGlzLmNhbGxTdHJ1Y3R1cmUpOwoKICBmYWN0b3J5IF9TdXBlckluaXRpYWxpemVyLmZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLkNvbnN0cnVjdG9yIHNvdXJjZUNvbnN0cnVjdG9yID0gc291cmNlLnJlYWRNZW1iZXJOb2RlKCk7CiAgICBpci5Db25zdHJ1Y3RvciB0YXJnZXRDb25zdHJ1Y3RvciA9IHNvdXJjZS5yZWFkTWVtYmVyTm9kZSgpOwogICAgX0NhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSA9IG5ldyBfQ2FsbFN0cnVjdHVyZS5mcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBfU3VwZXJJbml0aWFsaXplcigKICAgICAgICBzb3VyY2VDb25zdHJ1Y3RvciwgdGFyZ2V0Q29uc3RydWN0b3IsIGNhbGxTdHJ1Y3R1cmUpOwogIH0KCiAgdm9pZCB0b0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVNZW1iZXJOb2RlKHNvdXJjZSk7CiAgICBzaW5rLndyaXRlTWVtYmVyTm9kZSh0YXJnZXQpOwogICAgY2FsbFN0cnVjdHVyZS50b0RhdGFTaW5rKHNpbmspOwogICAgc2luay5lbmQodGFnKTsKICB9Cn0KCmNsYXNzIF9TdXBlckludm9jYXRpb24gewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ19TdXBlckludm9jYXRpb24nOwoKICBmaW5hbCBpci5OYW1lIG5hbWU7CiAgZmluYWwgX0NhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZTsKCiAgX1N1cGVySW52b2NhdGlvbih0aGlzLm5hbWUsIHRoaXMuY2FsbFN0cnVjdHVyZSk7CgogIGZhY3RvcnkgX1N1cGVySW52b2NhdGlvbi5mcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5OYW1lIG5hbWUgPSBzb3VyY2UucmVhZE5hbWUoKTsKICAgIF9DYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUgPSBuZXcgX0NhbGxTdHJ1Y3R1cmUuZnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgX1N1cGVySW52b2NhdGlvbihuYW1lLCBjYWxsU3RydWN0dXJlKTsKICB9CgogIHZvaWQgdG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTmFtZShuYW1lKTsKICAgIGNhbGxTdHJ1Y3R1cmUudG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQp9CgpjbGFzcyBfSW5zdGFuY2VBY2Nlc3MgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ19JbnN0YW5jZUFjY2Vzcyc7CgogIGZpbmFsIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZTsKICBmaW5hbCBDbGFzc1JlbGF0aW9uIGNsYXNzUmVsYXRpb247CiAgZmluYWwgaXIuTWVtYmVyIHRhcmdldDsKCiAgX0luc3RhbmNlQWNjZXNzKHRoaXMucmVjZWl2ZXJUeXBlLCB0aGlzLmNsYXNzUmVsYXRpb24sIHRoaXMudGFyZ2V0KTsKCiAgZmFjdG9yeSBfSW5zdGFuY2VBY2Nlc3MuZnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlID0gc291cmNlLnJlYWREYXJ0VHlwZU5vZGUoKTsKICAgIENsYXNzUmVsYXRpb24gY2xhc3NSZWxhdGlvbiA9IHNvdXJjZS5yZWFkRW51bShDbGFzc1JlbGF0aW9uLnZhbHVlcyk7CiAgICBpci5NZW1iZXIgdGFyZ2V0ID0gc291cmNlLnJlYWRNZW1iZXJOb2RlKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IF9JbnN0YW5jZUFjY2VzcyhyZWNlaXZlclR5cGUsIGNsYXNzUmVsYXRpb24sIHRhcmdldCk7CiAgfQoKICB2b2lkIHRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZURhcnRUeXBlTm9kZShyZWNlaXZlclR5cGUpOwogICAgc2luay53cml0ZUVudW0oY2xhc3NSZWxhdGlvbik7CiAgICBzaW5rLndyaXRlTWVtYmVyTm9kZSh0YXJnZXQpOwogICAgc2luay5lbmQodGFnKTsKICB9Cn0KCmNsYXNzIF9EeW5hbWljQWNjZXNzIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdfRHluYW1pY0FjY2Vzcyc7CgogIGZpbmFsIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZTsKICBmaW5hbCBDbGFzc1JlbGF0aW9uIGNsYXNzUmVsYXRpb247CiAgZmluYWwgaXIuTmFtZSBuYW1lOwoKICBfRHluYW1pY0FjY2Vzcyh0aGlzLnJlY2VpdmVyVHlwZSwgdGhpcy5jbGFzc1JlbGF0aW9uLCB0aGlzLm5hbWUpOwoKICBmYWN0b3J5IF9EeW5hbWljQWNjZXNzLmZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSA9IHNvdXJjZS5yZWFkRGFydFR5cGVOb2RlKCk7CiAgICBDbGFzc1JlbGF0aW9uIGNsYXNzUmVsYXRpb24gPSBzb3VyY2UucmVhZEVudW0oQ2xhc3NSZWxhdGlvbi52YWx1ZXMpOwogICAgaXIuTmFtZSBuYW1lID0gc291cmNlLnJlYWROYW1lKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IF9EeW5hbWljQWNjZXNzKHJlY2VpdmVyVHlwZSwgY2xhc3NSZWxhdGlvbiwgbmFtZSk7CiAgfQoKICB2b2lkIHRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZURhcnRUeXBlTm9kZShyZWNlaXZlclR5cGUpOwogICAgc2luay53cml0ZUVudW0oY2xhc3NSZWxhdGlvbik7CiAgICBzaW5rLndyaXRlTmFtZShuYW1lKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQp9CgpjbGFzcyBfRnVuY3Rpb25JbnZvY2F0aW9uIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdfRnVuY3Rpb25JbnZvY2F0aW9uJzsKCiAgZmluYWwgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlOwogIGZpbmFsIF9DYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmU7CgogIF9GdW5jdGlvbkludm9jYXRpb24odGhpcy5yZWNlaXZlclR5cGUsIHRoaXMuY2FsbFN0cnVjdHVyZSk7CgogIGZhY3RvcnkgX0Z1bmN0aW9uSW52b2NhdGlvbi5mcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlTm9kZSgpOwogICAgX0NhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSA9IG5ldyBfQ2FsbFN0cnVjdHVyZS5mcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBfRnVuY3Rpb25JbnZvY2F0aW9uKHJlY2VpdmVyVHlwZSwgY2FsbFN0cnVjdHVyZSk7CiAgfQoKICB2b2lkIHRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZURhcnRUeXBlTm9kZShyZWNlaXZlclR5cGUpOwogICAgY2FsbFN0cnVjdHVyZS50b0RhdGFTaW5rKHNpbmspOwogICAgc2luay5lbmQodGFnKTsKICB9Cn0KCmNsYXNzIF9JbnN0YW5jZUludm9jYXRpb24gewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ19JbnN0YW5jZUludm9jYXRpb24nOwoKICBmaW5hbCBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGU7CiAgZmluYWwgQ2xhc3NSZWxhdGlvbiBjbGFzc1JlbGF0aW9uOwogIGZpbmFsIGlyLk1lbWJlciB0YXJnZXQ7CiAgZmluYWwgX0NhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZTsKCiAgX0luc3RhbmNlSW52b2NhdGlvbigKICAgICAgdGhpcy5yZWNlaXZlclR5cGUsIHRoaXMuY2xhc3NSZWxhdGlvbiwgdGhpcy50YXJnZXQsIHRoaXMuY2FsbFN0cnVjdHVyZSk7CgogIGZhY3RvcnkgX0luc3RhbmNlSW52b2NhdGlvbi5mcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlTm9kZSgpOwogICAgQ2xhc3NSZWxhdGlvbiBjbGFzc1JlbGF0aW9uID0gc291cmNlLnJlYWRFbnVtKENsYXNzUmVsYXRpb24udmFsdWVzKTsKICAgIGlyLk1lbWJlciB0YXJnZXQgPSBzb3VyY2UucmVhZE1lbWJlck5vZGUoKTsKICAgIF9DYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUgPSBuZXcgX0NhbGxTdHJ1Y3R1cmUuZnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgX0luc3RhbmNlSW52b2NhdGlvbigKICAgICAgICByZWNlaXZlclR5cGUsIGNsYXNzUmVsYXRpb24sIHRhcmdldCwgY2FsbFN0cnVjdHVyZSk7CiAgfQoKICB2b2lkIHRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZURhcnRUeXBlTm9kZShyZWNlaXZlclR5cGUpOwogICAgc2luay53cml0ZUVudW0oY2xhc3NSZWxhdGlvbik7CiAgICBzaW5rLndyaXRlTWVtYmVyTm9kZSh0YXJnZXQpOwogICAgY2FsbFN0cnVjdHVyZS50b0RhdGFTaW5rKHNpbmspOwogICAgc2luay5lbmQodGFnKTsKICB9Cn0KCmNsYXNzIF9EeW5hbWljSW52b2NhdGlvbiB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnX0R5bmFtaWNJbnZvY2F0aW9uJzsKCiAgZmluYWwgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlOwogIGZpbmFsIENsYXNzUmVsYXRpb24gY2xhc3NSZWxhdGlvbjsKICBmaW5hbCBpci5OYW1lIG5hbWU7CiAgZmluYWwgX0NhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZTsKCiAgX0R5bmFtaWNJbnZvY2F0aW9uKAogICAgICB0aGlzLnJlY2VpdmVyVHlwZSwgdGhpcy5jbGFzc1JlbGF0aW9uLCB0aGlzLm5hbWUsIHRoaXMuY2FsbFN0cnVjdHVyZSk7CgogIGZhY3RvcnkgX0R5bmFtaWNJbnZvY2F0aW9uLmZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSA9IHNvdXJjZS5yZWFkRGFydFR5cGVOb2RlKCk7CiAgICBDbGFzc1JlbGF0aW9uIGNsYXNzUmVsYXRpb24gPSBzb3VyY2UucmVhZEVudW0oQ2xhc3NSZWxhdGlvbi52YWx1ZXMpOwogICAgaXIuTmFtZSBuYW1lID0gc291cmNlLnJlYWROYW1lKCk7CiAgICBfQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlID0gbmV3IF9DYWxsU3RydWN0dXJlLmZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IF9EeW5hbWljSW52b2NhdGlvbigKICAgICAgICByZWNlaXZlclR5cGUsIGNsYXNzUmVsYXRpb24sIG5hbWUsIGNhbGxTdHJ1Y3R1cmUpOwogIH0KCiAgdm9pZCB0b0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZU5vZGUocmVjZWl2ZXJUeXBlKTsKICAgIHNpbmsud3JpdGVFbnVtKGNsYXNzUmVsYXRpb24pOwogICAgc2luay53cml0ZU5hbWUobmFtZSk7CiAgICBjYWxsU3RydWN0dXJlLnRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KfQoKY2xhc3MgX0xvY2FsRnVuY3Rpb25JbnZvY2F0aW9uIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdfTG9jYWxGdW5jdGlvbkludm9jYXRpb24nOwoKICBmaW5hbCBpci5GdW5jdGlvbkRlY2xhcmF0aW9uIGxvY2FsRnVuY3Rpb247CiAgZmluYWwgX0NhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZTsKCiAgX0xvY2FsRnVuY3Rpb25JbnZvY2F0aW9uKHRoaXMubG9jYWxGdW5jdGlvbiwgdGhpcy5jYWxsU3RydWN0dXJlKTsKCiAgZmFjdG9yeSBfTG9jYWxGdW5jdGlvbkludm9jYXRpb24uZnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuRnVuY3Rpb25EZWNsYXJhdGlvbiBsb2NhbEZ1bmN0aW9uID0gc291cmNlLnJlYWRUcmVlTm9kZSgpOwogICAgX0NhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSA9IG5ldyBfQ2FsbFN0cnVjdHVyZS5mcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBfTG9jYWxGdW5jdGlvbkludm9jYXRpb24obG9jYWxGdW5jdGlvbiwgY2FsbFN0cnVjdHVyZSk7CiAgfQoKICB2b2lkIHRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZVRyZWVOb2RlKGxvY2FsRnVuY3Rpb24pOwogICAgY2FsbFN0cnVjdHVyZS50b0RhdGFTaW5rKHNpbmspOwogICAgc2luay5lbmQodGFnKTsKICB9Cn0KCmNsYXNzIF9TdGF0aWNJbnZvY2F0aW9uIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdfU3RhdGljSW52b2NhdGlvbic7CgogIGZpbmFsIGlyLlByb2NlZHVyZSB0YXJnZXQ7CiAgZmluYWwgX0NhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZTsKICBmaW5hbCBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQ7CgogIF9TdGF0aWNJbnZvY2F0aW9uKHRoaXMudGFyZ2V0LCB0aGlzLmNhbGxTdHJ1Y3R1cmUsIHRoaXMuaW1wb3J0KTsKCiAgZmFjdG9yeSBfU3RhdGljSW52b2NhdGlvbi5mcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5Qcm9jZWR1cmUgdGFyZ2V0ID0gc291cmNlLnJlYWRNZW1iZXJOb2RlKCk7CiAgICBfQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlID0gbmV3IF9DYWxsU3RydWN0dXJlLmZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQgPSBzb3VyY2UucmVhZExpYnJhcnlEZXBlbmRlbmN5Tm9kZU9yTnVsbCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBfU3RhdGljSW52b2NhdGlvbih0YXJnZXQsIGNhbGxTdHJ1Y3R1cmUsIGltcG9ydCk7CiAgfQoKICB2b2lkIHRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZU1lbWJlck5vZGUodGFyZ2V0KTsKICAgIGNhbGxTdHJ1Y3R1cmUudG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsud3JpdGVMaWJyYXJ5RGVwZW5kZW5jeU5vZGVPck51bGwoaW1wb3J0KTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQp9CgpjbGFzcyBfQ29uc3RydWN0b3JJbnZvY2F0aW9uIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdfQ29uc3RydWN0b3JJbnZvY2F0aW9uJzsKCiAgZmluYWwgaXIuTWVtYmVyIGNvbnN0cnVjdG9yOwogIGZpbmFsIGlyLkludGVyZmFjZVR5cGUgdHlwZTsKICBmaW5hbCBfQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlOwogIGZpbmFsIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydDsKICBmaW5hbCBib29sIGlzQ29uc3Q7CgogIF9Db25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgIHRoaXMuY29uc3RydWN0b3IsIHRoaXMudHlwZSwgdGhpcy5jYWxsU3RydWN0dXJlLCB0aGlzLmltcG9ydCwKICAgICAge3RoaXMuaXNDb25zdH0pOwoKICBmYWN0b3J5IF9Db25zdHJ1Y3Rvckludm9jYXRpb24uZnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuTWVtYmVyIGNvbnN0cnVjdG9yID0gc291cmNlLnJlYWRNZW1iZXJOb2RlKCk7CiAgICBpci5JbnRlcmZhY2VUeXBlIHR5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlTm9kZSgpOwogICAgX0NhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSA9IG5ldyBfQ2FsbFN0cnVjdHVyZS5mcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0ID0gc291cmNlLnJlYWRMaWJyYXJ5RGVwZW5kZW5jeU5vZGVPck51bGwoKTsKICAgIGJvb2wgaXNDb25zdCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBfQ29uc3RydWN0b3JJbnZvY2F0aW9uKGNvbnN0cnVjdG9yLCB0eXBlLCBjYWxsU3RydWN0dXJlLCBpbXBvcnQsCiAgICAgICAgaXNDb25zdDogaXNDb25zdCk7CiAgfQoKICB2b2lkIHRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZU1lbWJlck5vZGUoY29uc3RydWN0b3IpOwogICAgc2luay53cml0ZURhcnRUeXBlTm9kZSh0eXBlKTsKICAgIGNhbGxTdHJ1Y3R1cmUudG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsud3JpdGVMaWJyYXJ5RGVwZW5kZW5jeU5vZGVPck51bGwoaW1wb3J0KTsKICAgIHNpbmsud3JpdGVCb29sKGlzQ29uc3QpOwogICAgc2luay5lbmQodGFnKTsKICB9Cn0KCmNsYXNzIF9Db25zdEluc3RhbnRpYXRpb24gewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ19Db25zdEluc3RhbnRpYXRpb24nOwoKICBmaW5hbCBpci5DbGFzcyBjbHM7CiAgZmluYWwgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50czsKICBmaW5hbCBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQ7CgogIF9Db25zdEluc3RhbnRpYXRpb24odGhpcy5jbHMsIHRoaXMudHlwZUFyZ3VtZW50cywgdGhpcy5pbXBvcnQpOwoKICBmYWN0b3J5IF9Db25zdEluc3RhbnRpYXRpb24uZnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuQ2xhc3MgY2xzID0gc291cmNlLnJlYWRDbGFzc05vZGUoKTsKICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPSBzb3VyY2UucmVhZERhcnRUeXBlTm9kZXMoKTsKICAgIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCA9IHNvdXJjZS5yZWFkTGlicmFyeURlcGVuZGVuY3lOb2RlT3JOdWxsKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IF9Db25zdEluc3RhbnRpYXRpb24oY2xzLCB0eXBlQXJndW1lbnRzLCBpbXBvcnQpOwogIH0KCiAgdm9pZCB0b0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVDbGFzc05vZGUoY2xzKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZU5vZGVzKHR5cGVBcmd1bWVudHMpOwogICAgc2luay53cml0ZUxpYnJhcnlEZXBlbmRlbmN5Tm9kZU9yTnVsbChpbXBvcnQpOwogICAgc2luay5lbmQodGFnKTsKICB9Cn0KCmVudW0gX0ZlYXR1cmUgewogIGxhenlGaWVsZCwKICBsb2FkTGlicmFyeSwKICBzdGFja1RyYWNlLAogIGNhdGNoQ2xhdXNlLAogIHRocm93RXhwcmVzc2lvbiwKICBsb2NhbFdpdGhvdXRJbml0aWFsaXplciwKICBzdHJpbmdDb25jYXRlbmF0aW9uLAogIGFzc2VydFdpdGhNZXNzYWdlLAogIGFzc2VydFdpdGhvdXRNZXNzYWdlLAogIG51bGxMaXRlcmFsLAp9CgpjbGFzcyBfVHlwZVVzZSB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnX1R5cGVVc2UnOwoKICBmaW5hbCBpci5EYXJ0VHlwZSB0eXBlOwogIGZpbmFsIF9UeXBlVXNlS2luZCBraW5kOwoKICBfVHlwZVVzZSh0aGlzLnR5cGUsIHRoaXMua2luZCk7CgogIGZhY3RvcnkgX1R5cGVVc2UuZnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuRGFydFR5cGUgdHlwZSA9IHNvdXJjZS5yZWFkRGFydFR5cGVOb2RlKCk7CiAgICBfVHlwZVVzZUtpbmQga2luZCA9IHNvdXJjZS5yZWFkRW51bShfVHlwZVVzZUtpbmQudmFsdWVzKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgX1R5cGVVc2UodHlwZSwga2luZCk7CiAgfQoKICB2b2lkIHRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZURhcnRUeXBlTm9kZSh0eXBlKTsKICAgIHNpbmsud3JpdGVFbnVtKGtpbmQpOwogICAgc2luay5lbmQodGFnKTsKICB9Cn0KCmVudW0gX1R5cGVVc2VLaW5kIHsKICBwYXJhbWV0ZXJDaGVjaywKICBjYXRjaFR5cGUsCiAgYXNDYXN0LAogIGltcGxpY2l0Q2FzdCwKICBpc0NoZWNrLAogIGFzeW5jU3Rhck1hcmtlciwKICBhc3luY01hcmtlciwKICBzeW5jU3Rhck1hcmtlciwKfQoKY2xhc3MgX1JlZGlyZWN0aW5nSW5pdGlhbGl6ZXIgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ19SZWRpcmVjdGluZ0luaXRpYWxpemVyJzsKCiAgZmluYWwgaXIuQ29uc3RydWN0b3IgY29uc3RydWN0b3I7CiAgZmluYWwgX0NhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZTsKCiAgX1JlZGlyZWN0aW5nSW5pdGlhbGl6ZXIodGhpcy5jb25zdHJ1Y3RvciwgdGhpcy5jYWxsU3RydWN0dXJlKTsKCiAgZmFjdG9yeSBfUmVkaXJlY3RpbmdJbml0aWFsaXplci5mcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5Db25zdHJ1Y3RvciBjb25zdHJ1Y3RvciA9IHNvdXJjZS5yZWFkTWVtYmVyTm9kZSgpOwogICAgX0NhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSA9IG5ldyBfQ2FsbFN0cnVjdHVyZS5mcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBfUmVkaXJlY3RpbmdJbml0aWFsaXplcihjb25zdHJ1Y3RvciwgY2FsbFN0cnVjdHVyZSk7CiAgfQoKICB2b2lkIHRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZU1lbWJlck5vZGUoY29uc3RydWN0b3IpOwogICAgY2FsbFN0cnVjdHVyZS50b0RhdGFTaW5rKHNpbmspOwogICAgc2luay5lbmQodGFnKTsKICB9Cn0KCmNsYXNzIF9UeXBlTGl0ZXJhbCB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnX1R5cGVMaXRlcmFsJzsKCiAgZmluYWwgaXIuRGFydFR5cGUgdHlwZTsKICBmaW5hbCBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQ7CgogIF9UeXBlTGl0ZXJhbCh0aGlzLnR5cGUsIHRoaXMuaW1wb3J0KTsKCiAgZmFjdG9yeSBfVHlwZUxpdGVyYWwuZnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuRGFydFR5cGUgdHlwZSA9IHNvdXJjZS5yZWFkRGFydFR5cGVOb2RlKCk7CiAgICBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQgPSBzb3VyY2UucmVhZExpYnJhcnlEZXBlbmRlbmN5Tm9kZU9yTnVsbCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBfVHlwZUxpdGVyYWwodHlwZSwgaW1wb3J0KTsKICB9CgogIHZvaWQgdG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlRGFydFR5cGVOb2RlKHR5cGUpOwogICAgc2luay53cml0ZUxpYnJhcnlEZXBlbmRlbmN5Tm9kZU9yTnVsbChpbXBvcnQpOwogICAgc2luay5lbmQodGFnKTsKICB9Cn0KCmNsYXNzIF9HZW5lcmljSW5zdGFudGlhdGlvbiB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnX0dlbmVyaWNJbnN0YW50aWF0aW9uJzsKCiAgZmluYWwgaXIuRnVuY3Rpb25UeXBlIGV4cHJlc3Npb25UeXBlOwogIGZpbmFsIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CgogIF9HZW5lcmljSW5zdGFudGlhdGlvbih0aGlzLmV4cHJlc3Npb25UeXBlLCB0aGlzLnR5cGVBcmd1bWVudHMpOwoKICBmYWN0b3J5IF9HZW5lcmljSW5zdGFudGlhdGlvbi5mcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5GdW5jdGlvblR5cGUgZXhwcmVzc2lvblR5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlTm9kZSgpOwogICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9IHNvdXJjZS5yZWFkRGFydFR5cGVOb2RlcygpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBfR2VuZXJpY0luc3RhbnRpYXRpb24oZXhwcmVzc2lvblR5cGUsIHR5cGVBcmd1bWVudHMpOwogIH0KCiAgdm9pZCB0b0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZU5vZGUoZXhwcmVzc2lvblR5cGUpOwogICAgc2luay53cml0ZURhcnRUeXBlTm9kZXModHlwZUFyZ3VtZW50cyk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KfQoKY2xhc3MgX1N0YXRpY0FjY2VzcyB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnX1N0YXRpY0FjY2Vzcyc7CgogIGZpbmFsIGlyLk1lbWJlciB0YXJnZXQ7CiAgZmluYWwgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0OwoKICBfU3RhdGljQWNjZXNzKHRoaXMudGFyZ2V0LCB0aGlzLmltcG9ydCk7CgogIGZhY3RvcnkgX1N0YXRpY0FjY2Vzcy5mcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5NZW1iZXIgdGFyZ2V0ID0gc291cmNlLnJlYWRNZW1iZXJOb2RlKCk7CiAgICBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQgPSBzb3VyY2UucmVhZExpYnJhcnlEZXBlbmRlbmN5Tm9kZU9yTnVsbCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBfU3RhdGljQWNjZXNzKHRhcmdldCwgaW1wb3J0KTsKICB9CgogIHZvaWQgdG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTWVtYmVyTm9kZSh0YXJnZXQpOwogICAgc2luay53cml0ZUxpYnJhcnlEZXBlbmRlbmN5Tm9kZU9yTnVsbChpbXBvcnQpOwogICAgc2luay5lbmQodGFnKTsKICB9Cn0KCmNsYXNzIF9NYXBMaXRlcmFsIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdfTWFwTGl0ZXJhbCc7CgogIGZpbmFsIGlyLkRhcnRUeXBlIGtleVR5cGU7CiAgZmluYWwgaXIuRGFydFR5cGUgdmFsdWVUeXBlOwogIGZpbmFsIGJvb2wgaXNDb25zdDsKICBmaW5hbCBib29sIGlzRW1wdHk7CgogIF9NYXBMaXRlcmFsKHRoaXMua2V5VHlwZSwgdGhpcy52YWx1ZVR5cGUsIHt0aGlzLmlzQ29uc3QsIHRoaXMuaXNFbXB0eX0pOwoKICBmYWN0b3J5IF9NYXBMaXRlcmFsLmZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLkRhcnRUeXBlIGtleVR5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlTm9kZSgpOwogICAgaXIuRGFydFR5cGUgdmFsdWVUeXBlID0gc291cmNlLnJlYWREYXJ0VHlwZU5vZGUoKTsKICAgIGJvb2wgaXNDb25zdCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgYm9vbCBpc0VtcHR5ID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gX01hcExpdGVyYWwoa2V5VHlwZSwgdmFsdWVUeXBlLCBpc0NvbnN0OiBpc0NvbnN0LCBpc0VtcHR5OiBpc0VtcHR5KTsKICB9CgogIHZvaWQgdG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlRGFydFR5cGVOb2RlKGtleVR5cGUpOwogICAgc2luay53cml0ZURhcnRUeXBlTm9kZSh2YWx1ZVR5cGUpOwogICAgc2luay53cml0ZUJvb2woaXNDb25zdCk7CiAgICBzaW5rLndyaXRlQm9vbChpc0VtcHR5KTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQp9CgpjbGFzcyBfQ29udGFpbmVyTGl0ZXJhbCB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnX0NvbnRhaW5lckxpdGVyYWwnOwoKICBmaW5hbCBpci5EYXJ0VHlwZSBlbGVtZW50VHlwZTsKICBmaW5hbCBib29sIGlzQ29uc3Q7CiAgZmluYWwgYm9vbCBpc0VtcHR5OwoKICBfQ29udGFpbmVyTGl0ZXJhbCh0aGlzLmVsZW1lbnRUeXBlLCB7dGhpcy5pc0NvbnN0LCB0aGlzLmlzRW1wdHl9KTsKCiAgZmFjdG9yeSBfQ29udGFpbmVyTGl0ZXJhbC5mcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5EYXJ0VHlwZSBlbGVtZW50VHlwZSA9IHNvdXJjZS5yZWFkRGFydFR5cGVOb2RlKCk7CiAgICBib29sIGlzQ29uc3QgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGJvb2wgaXNFbXB0eSA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgcmV0dXJuIG5ldyBfQ29udGFpbmVyTGl0ZXJhbChlbGVtZW50VHlwZSwKICAgICAgICBpc0NvbnN0OiBpc0NvbnN0LCBpc0VtcHR5OiBpc0VtcHR5KTsKICB9CgogIHZvaWQgdG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlRGFydFR5cGVOb2RlKGVsZW1lbnRUeXBlKTsKICAgIHNpbmsud3JpdGVCb29sKGlzQ29uc3QpOwogICAgc2luay53cml0ZUJvb2woaXNFbXB0eSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KfQoKY2xhc3MgX1J1bnRpbWVUeXBlVXNlIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdfUnVudGltZVR5cGVVc2UnOwoKICBmaW5hbCBpci5Qcm9wZXJ0eUdldCBub2RlOwogIGZpbmFsIFJ1bnRpbWVUeXBlVXNlS2luZCBraW5kOwogIGZpbmFsIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZTsKICBmaW5hbCBpci5EYXJ0VHlwZSBhcmd1bWVudFR5cGU7CgogIF9SdW50aW1lVHlwZVVzZSh0aGlzLm5vZGUsIHRoaXMua2luZCwgdGhpcy5yZWNlaXZlclR5cGUsIHRoaXMuYXJndW1lbnRUeXBlKTsKCiAgZmFjdG9yeSBfUnVudGltZVR5cGVVc2UuZnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuVHJlZU5vZGUgbm9kZSA9IHNvdXJjZS5yZWFkVHJlZU5vZGUoKTsKICAgIFJ1bnRpbWVUeXBlVXNlS2luZCBraW5kID0gc291cmNlLnJlYWRFbnVtKFJ1bnRpbWVUeXBlVXNlS2luZC52YWx1ZXMpOwogICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlID0gc291cmNlLnJlYWREYXJ0VHlwZU5vZGUoKTsKICAgIGlyLkRhcnRUeXBlIGFyZ3VtZW50VHlwZSA9IHNvdXJjZS5yZWFkRGFydFR5cGVOb2RlKGFsbG93TnVsbDogdHJ1ZSk7CiAgICByZXR1cm4gbmV3IF9SdW50aW1lVHlwZVVzZShub2RlLCBraW5kLCByZWNlaXZlclR5cGUsIGFyZ3VtZW50VHlwZSk7CiAgfQoKICB2b2lkIHRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZVRyZWVOb2RlKG5vZGUpOwogICAgc2luay53cml0ZUVudW0oa2luZCk7CiAgICBzaW5rLndyaXRlRGFydFR5cGVOb2RlKHJlY2VpdmVyVHlwZSk7CiAgICBzaW5rLndyaXRlRGFydFR5cGVOb2RlKGFyZ3VtZW50VHlwZSwgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQp9CgpjbGFzcyBfRm9ySW5EYXRhIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdfRm9ySW5EYXRhJzsKCiAgZmluYWwgaXIuRGFydFR5cGUgaXRlcmFibGVUeXBlOwogIGZpbmFsIGlyLkRhcnRUeXBlIGl0ZXJhdG9yVHlwZTsKICBmaW5hbCBDbGFzc1JlbGF0aW9uIGl0ZXJhdG9yQ2xhc3NSZWxhdGlvbjsKICBmaW5hbCBib29sIGlzQXN5bmM7CgogIF9Gb3JJbkRhdGEodGhpcy5pdGVyYWJsZVR5cGUsIHRoaXMuaXRlcmF0b3JUeXBlLCB0aGlzLml0ZXJhdG9yQ2xhc3NSZWxhdGlvbiwKICAgICAge3RoaXMuaXNBc3luY30pOwoKICBmYWN0b3J5IF9Gb3JJbkRhdGEuZnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuRGFydFR5cGUgaXRlcmFibGVUeXBlID0gc291cmNlLnJlYWREYXJ0VHlwZU5vZGUoKTsKICAgIGlyLkRhcnRUeXBlIGl0ZXJhdG9yVHlwZSA9IHNvdXJjZS5yZWFkRGFydFR5cGVOb2RlKGFsbG93TnVsbDogdHJ1ZSk7CiAgICBDbGFzc1JlbGF0aW9uIGl0ZXJhdG9yQ2xhc3NSZWxhdGlvbiA9IHNvdXJjZS5yZWFkRW51bShDbGFzc1JlbGF0aW9uLnZhbHVlcyk7CiAgICBib29sIGlzQXN5bmMgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIHJldHVybiBuZXcgX0ZvckluRGF0YShpdGVyYWJsZVR5cGUsIGl0ZXJhdG9yVHlwZSwgaXRlcmF0b3JDbGFzc1JlbGF0aW9uLAogICAgICAgIGlzQXN5bmM6IGlzQXN5bmMpOwogIH0KCiAgdm9pZCB0b0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAg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AgETKgEiIi0WAU8XATkXOklRJk0bBAEjFSoqKx0TBAIBKHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL2ltcGFjdF9kYXRhLmRhcnQtc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaXIvbW9kdWxhci5kYXJ0hOAvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NvcmVfdHlwZXMuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfZW52aXJvbm1lbnQuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2pzX2JhY2tlbmQvYW5ub3RhdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vdXRpbC9lbnVtc2V0LmRhcnQnOwppbXBvcnQgJ2Fubm90YXRpb25zLmRhcnQnOwppbXBvcnQgJ2NvbnN0YW50cy5kYXJ0JzsKaW1wb3J0ICdpbXBhY3QuZGFydCc7CmltcG9ydCAnc2NvcGUuZGFydCc7CgpjbGFzcyBNb2R1bGFyQ29yZSB7CiAgZmluYWwgaXIuQ29tcG9uZW50IGNvbXBvbmVudDsKICBmaW5hbCBEYXJ0MmpzQ29uc3RhbnRFdmFsdWF0b3IgY29uc3RhbnRFdmFsdWF0b3I7CgogIE1vZHVsYXJDb3JlKHRoaXMuY29tcG9uZW50LCB0aGlzLmNvbnN0YW50RXZhbHVhdG9yKTsKfQoKY2xhc3MgTW9kdWxhck1lbWJlckRhdGEgewogIGZpbmFsIFNjb3BlTW9kZWwgc2NvcGVNb2RlbDsKICBmaW5hbCBJbXBhY3RCdWlsZGVyRGF0YSBpbXBhY3RCdWlsZGVyRGF0YTsKCiAgTW9kdWxhck1lbWJlckRhdGEodGhpcy5zY29wZU1vZGVsLCB0aGlzLmltcGFjdEJ1aWxkZXJEYXRhKTsKfQoKYWJzdHJhY3QgY2xhc3MgTW9kdWxhclN0cmF0ZWd5IHsKICBMaXN0PFByYWdtYUFubm90YXRpb25EYXRhPiBnZXRQcmFnbWFBbm5vdGF0aW9uRGF0YShpci5NZW1iZXIgbm9kZSk7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEF2b2lkIHRoZSBuZWVkIGZvciBwYXNzaW5nIFtwcmFnbWFBbm5vdGF0aW9uc10uCiAgTW9kdWxhck1lbWJlckRhdGEgZ2V0TW9kdWxhck1lbWJlckRhdGEoCiAgICAgIGlyLk1lbWJlciBub2RlLCBFbnVtU2V0PFByYWdtYUFubm90YXRpb24+IHByYWdtYUFubm90YXRpb25zKTsKfQooAE5OPAEoNC8xNQEpHxsZFhUBFCA0ATcCARofLQE+AgEhRgFKKkQCASRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9tb2R1bGFyLmRhcnQrc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaXIvc2NvcGUuZGFydI8YLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJ2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnc2NvcGVfdmlzaXRvci5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9jb25zdGFudF9ldmFsdWF0b3IuZGFydCcgYXMgaXI7CgpjbGFzcyBTY29wZU1vZGVsIHsKICBmaW5hbCBDbG9zdXJlU2NvcGVNb2RlbCBjbG9zdXJlU2NvcGVNb2RlbDsKICBmaW5hbCBWYXJpYWJsZVNjb3BlTW9kZWwgdmFyaWFibGVTY29wZU1vZGVsOwogIGZpbmFsIEluaXRpYWxpemVyQ29tcGxleGl0eSBpbml0aWFsaXplckNvbXBsZXhpdHk7CgogIGNvbnN0IFNjb3BlTW9kZWwoCiAgICAgIHt0aGlzLmNsb3N1cmVTY29wZU1vZGVsLAogICAgICB0aGlzLnZhcmlhYmxlU2NvcGVNb2RlbCwKICAgICAgdGhpcy5pbml0aWFsaXplckNvbXBsZXhpdHl9KQogICAgICA6IGFzc2VydChpbml0aWFsaXplckNvbXBsZXhpdHkgIT0gbnVsbCk7CgogIC8vLyBJbnNwZWN0IG1lbWJlcnMgYW5kIG1hcmsgaWYgdGhvc2UgbWVtYmVycyBjYXB0dXJlIGFueSBzdGF0ZSB0aGF0IG5lZWRzIHRvCiAgLy8vIGJlIG1hcmtlZCBhcyBmcmVlIHZhcmlhYmxlcy4KICBmYWN0b3J5IFNjb3BlTW9kZWwuZnJvbSgKICAgICAgaXIuTWVtYmVyIG5vZGUsIGlyLkNvbnN0YW50RXZhbHVhdG9yIGNvbnN0YW50RXZhbHVhdG9yKSB7CiAgICBTY29wZU1vZGVsQnVpbGRlciBidWlsZGVyID0gbmV3IFNjb3BlTW9kZWxCdWlsZGVyKGNvbnN0YW50RXZhbHVhdG9yKTsKICAgIHJldHVybiBidWlsZGVyLmNvbXB1dGVNb2RlbChub2RlKTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIFZhcmlhYmxlU2NvcGVNb2RlbCB7CiAgVmFyaWFibGVTY29wZSBnZXRTY29wZUZvcihpci5UcmVlTm9kZSBub2RlKTsKICBJdGVyYWJsZTxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBnZXQgYXNzaWduZWRWYXJpYWJsZXM7CiAgYm9vbCBpc0VmZmVjdGl2ZWx5RmluYWwoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKTsKfQoKY2xhc3MgVmFyaWFibGVTY29wZU1vZGVsSW1wbCBpbXBsZW1lbnRzIFZhcmlhYmxlU2NvcGVNb2RlbCB7CiAgTWFwPGlyLlRyZWVOb2RlLCBWYXJpYWJsZVNjb3BlPiBfc2NvcGVNYXAgPSB7fTsKICBTZXQ8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4gX2Fzc2lnbmVkVmFyaWFibGVzOwoKICBWYXJpYWJsZVNjb3BlIGNyZWF0ZVNjb3BlRm9yKGlyLlRyZWVOb2RlIG5vZGUpIHsKICAgIHJldHVybiBfc2NvcGVNYXBbbm9kZV0gPz89IG5ldyBWYXJpYWJsZVNjb3BlSW1wbCgpOwogIH0KCiAgdm9pZCByZWdpc3RlckFzc2lnbmVkVmFyaWFibGUoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICBfYXNzaWduZWRWYXJpYWJsZXMgPz89IG5ldyBTZXQ8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4oKTsKICAgIF9hc3NpZ25lZFZhcmlhYmxlcy5hZGQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBWYXJpYWJsZVNjb3BlIGdldFNjb3BlRm9yKGlyLlRyZWVOb2RlIG5vZGUpIHsKICAgIHJldHVybiBfc2NvcGVNYXBbbm9kZV07CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBnZXQgYXNzaWduZWRWYXJpYWJsZXMgPT4KICAgICAgX2Fzc2lnbmVkVmFyaWFibGVzID8/IDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPltdOwoKICBAb3ZlcnJpZGUKICBib29sIGlzRWZmZWN0aXZlbHlGaW5hbChpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIHJldHVybiBfYXNzaWduZWRWYXJpYWJsZXMgPT0gbnVsbCB8fCAhX2Fzc2lnbmVkVmFyaWFibGVzLmNvbnRhaW5zKG5vZGUpOwogIH0KfQoKLy8vIFZhcmlhYmxlIGluZm9ybWF0aW9uIGZvciBhIHNjb3BlLgphYnN0cmFjdCBjbGFzcyBWYXJpYWJsZVNjb3BlIHsKICAvLy8gUmV0dXJucyB0aGUgc2V0IG9mIFtpci5WYXJpYWJsZURlY2xhcmF0aW9uXXMgdGhhdCBoYXZlIGJlZW4gYXNzaWduZWQgdG8gaW4KICAvLy8gdGhpcyBzY29wZS4KICBJdGVyYWJsZTxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBnZXQgYXNzaWduZWRWYXJpYWJsZXM7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIHNjb3BlIGhhcyBhIFtpci5Db250aW51ZVN3aXRjaFN0YXRlbWVudF0uCiAgYm9vbCBnZXQgaGFzQ29udGludWVTd2l0Y2g7Cn0KCmNsYXNzIFZhcmlhYmxlU2NvcGVJbXBsIGltcGxlbWVudHMgVmFyaWFibGVTY29wZSB7CiAgTGlzdDxWYXJpYWJsZVNjb3BlPiBfc3ViU2NvcGVzOwogIFNldDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBfYXNzaWduZWRWYXJpYWJsZXM7CiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNDb250aW51ZVN3aXRjaCA9IGZhbHNlOwoKICB2b2lkIGFkZFN1YlNjb3BlKFZhcmlhYmxlU2NvcGUgc2NvcGUpIHsKICAgIF9zdWJTY29wZXMgPz89IDxWYXJpYWJsZVNjb3BlPltdOwogICAgX3N1YlNjb3Blcy5hZGQoc2NvcGUpOwogIH0KCiAgdm9pZCByZWdpc3RlckFzc2lnbmVkVmFyaWFibGUoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSkgewogICAgX2Fzc2lnbmVkVmFyaWFibGVzID8/PSBuZXcgU2V0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+KCk7CiAgICBfYXNzaWduZWRWYXJpYWJsZXMuYWRkKHZhcmlhYmxlKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+IGdldCBhc3NpZ25lZFZhcmlhYmxlcyBzeW5jKiB7CiAgICBpZiAoX2Fzc2lnbmVkVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgeWllbGQqIF9hc3NpZ25lZFZhcmlhYmxlczsKICAgIH0KICAgIGlmIChfc3ViU2NvcGVzICE9IG51bGwpIHsKICAgICAgZm9yIChWYXJpYWJsZVNjb3BlIHN1YlNjb3BlIGluIF9zdWJTY29wZXMpIHsKICAgICAgICB5aWVsZCogc3ViU2NvcGUuYXNzaWduZWRWYXJpYWJsZXM7CiAgICAgIH0KICAgIH0KICB9Cn0KCmFic3RyYWN0IGNsYXNzIFZhcmlhYmxlQ29sbGVjdG9yTWl4aW4gewogIFZhcmlhYmxlU2NvcGVJbXBsIGN1cnJlbnRWYXJpYWJsZVNjb3BlOwogIFZhcmlhYmxlU2NvcGVNb2RlbEltcGwgdmFyaWFibGVTY29wZU1vZGVsID0gbmV3IFZhcmlhYmxlU2NvcGVNb2RlbEltcGwoKTsKCiAgdm9pZCB2aXNpdEluVmFyaWFibGVTY29wZShpci5UcmVlTm9kZSByb290LCB2b2lkIGYoKSkgewogICAgVmFyaWFibGVTY29wZUltcGwgb2xkU2NvcGUgPSBjdXJyZW50VmFyaWFibGVTY29wZTsKICAgIGN1cnJlbnRWYXJpYWJsZVNjb3BlID0gdmFyaWFibGVTY29wZU1vZGVsLmNyZWF0ZVNjb3BlRm9yKHJvb3QpOwogICAgb2xkU2NvcGU/LmFkZFN1YlNjb3BlKGN1cnJlbnRWYXJpYWJsZVNjb3BlKTsKICAgIGYoKTsKICAgIGN1cnJlbnRWYXJpYWJsZVNjb3BlID0gb2xkU2NvcGU7CiAgfQoKICB2b2lkIHJlZ2lzdGVyQXNzaWduZWRWYXJpYWJsZShpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIGN1cnJlbnRWYXJpYWJsZVNjb3BlPy5yZWdpc3RlckFzc2lnbmVkVmFyaWFibGUobm9kZSk7CiAgICB2YXJpYWJsZVNjb3BlTW9kZWwucmVnaXN0ZXJBc3NpZ25lZFZhcmlhYmxlKG5vZGUpOwogIH0KCiAgdm9pZCByZWdpc3RlckNvbnRpbnVlU3dpdGNoKCkgewogICAgY3VycmVudFZhcmlhYmxlU2NvcGU/Lmhhc0NvbnRpbnVlU3dpdGNoID0gdHJ1ZTsKICB9Cn0KfQBOTjwBKBcdTAETLS81ARQfHyMvAVAjG0BKJwQCASQvOjgCAT0yMgEzOAQBPz4iBAEMMBwEAQw8OAEMOU0EAgEmH1ESOgFHHgIBMyIyDCIBKiYbBAFDPiYEAQxBJiEGHjMrCAYEAgEoKkwBOjdEMQklBAE/OjcEASI0BAIBInBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL3Njb3BlLmRhcnQ7c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfYmFja2VuZC9iYWNrZW5kX3VzYWdlLmRhcnS8Wy8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vZnJvbnRlbmRfc3RyYXRlZ3kuZGFydCc7CmltcG9ydCAnLi4vaXIvcnVudGltZV90eXBlX2FuYWx5c2lzLmRhcnQnOwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9mZWF0dXJlLmRhcnQnOwppbXBvcnQgJy4uL3V0aWwvdXRpbC5kYXJ0JyBzaG93IFNldGxldDsKaW1wb3J0ICdiYWNrZW5kX2ltcGFjdC5kYXJ0JzsKCmFic3RyYWN0IGNsYXNzIEJhY2tlbmRVc2FnZSB7CiAgLy8vIERlc2VyaWFsaXplcyBhIFtCYWNrZW5kVXNhZ2VdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgQmFja2VuZFVzYWdlLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgPQogICAgICBCYWNrZW5kVXNhZ2VJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZTsKCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbQmFja2VuZFVzYWdlXSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luayk7CgogIGJvb2wgbmVlZFRvSW5pdGlhbGl6ZUlzb2xhdGVBZmZpbml0eVRhZzsKICBib29sIG5lZWRUb0luaXRpYWxpemVEaXNwYXRjaFByb3BlcnR5OwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2VsZW1lbnRdIGlzIGEgZnVuY3Rpb24gY2FsbGVkIGJ5IHRoZSBiYWNrZW5kLgogIGJvb2wgaXNGdW5jdGlvblVzZWRCeUJhY2tlbmQoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbZWxlbWVudF0gaXMgYW4gaW5zdGFuY2UgZmllbGQgb2YgYSBjbGFzcyBpbnN0YW50aWF0ZWQKICAvLy8gYnkgdGhlIGJhY2tlbmQuCiAgYm9vbCBpc0ZpZWxkVXNlZEJ5QmFja2VuZChGaWVsZEVudGl0eSBlbGVtZW50KTsKCiAgSXRlcmFibGU8RnVuY3Rpb25FbnRpdHk+IGdldCBnbG9iYWxGdW5jdGlvbkRlcGVuZGVuY2llczsKCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBnbG9iYWxDbGFzc0RlcGVuZGVuY2llczsKCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBoZWxwZXJDbGFzc2VzVXNlZDsKCiAgSXRlcmFibGU8UnVudGltZVR5cGVVc2U+IGdldCBydW50aW1lVHlwZVVzZXM7CgogIC8vLyBgdHJ1ZWAgaWYgYSBjb3JlLWxpYnJhcnkgZnVuY3Rpb24gcmVxdWlyZXMgdGhlIHByZWFtYmxlIGZpbGUgdG8gZnVuY3Rpb24uCiAgYm9vbCBnZXQgcmVxdWlyZXNQcmVhbWJsZTsKCiAgLy8vIGB0cnVlYCBvZiBgT2JqZWN0LnJ1bnRpbWVUeXBlYCBpcyB1c2VkLgogIGJvb2wgZ2V0IGlzUnVudGltZVR5cGVVc2VkOwoKICAvLy8gYHRydWVgIGlmIGBGdW5jdGlvbi5hcHBseWAgaXMgdXNlZC4KICBib29sIGdldCBpc0Z1bmN0aW9uQXBwbHlVc2VkOwoKICAvLy8gYHRydWVgIGlmICdkYXJ0Om1pcnJvcnMnIGZlYXR1cmVzIGFyZSB1c2VkLgogIGJvb2wgZ2V0IGlzTWlycm9yc1VzZWQ7CgogIC8vLyBgdHJ1ZWAgaWYgYG5vU3VjaE1ldGhvZGAgaXMgdXNlZC4KICBib29sIGdldCBpc05vU3VjaE1ldGhvZFVzZWQ7CgogIC8vLyBgdHJ1ZWAgaWYgdGhlIGBkYXJ0Omh0bWxgIGlzIGxvYWRlZC4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBUaGlzIGlzIGFsd2F5cyBgdHJ1ZWAgd2l0aCB0aGUgQ0ZFLgogIGJvb2wgZ2V0IGlzSHRtbExvYWRlZDsKfQoKYWJzdHJhY3QgY2xhc3MgQmFja2VuZFVzYWdlQnVpbGRlciB7CiAgLy8vIFRoZSBiYWNrZW5kIG11c3QgKmFsd2F5cyogY2FsbCB0aGlzIG1ldGhvZCB3aGVuIGVucXVldWluZyBhbiBmdW5jdGlvbgogIC8vLyBlbGVtZW50LiBDYWxscyBkb25lIGJ5IHRoZSBiYWNrZW5kIGFyZSBub3Qgc2VlbiBieSBnbG9iYWwKICAvLy8gb3B0aW1pemF0aW9ucywgc28gdGhleSB3b3VsZCBtYWtlIHRoZXNlIG9wdGltaXphdGlvbnMgdW5zb3VuZC4KICAvLy8gVGhlcmVmb3JlIHdlIG5lZWQgdG8gY29sbGVjdCB0aGUgbGlzdCBvZiBtZXRob2RzIHRoZSBiYWNrZW5kIG1heQogIC8vLyBjYWxsLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlcGxhY2UgdGhpcyB3aXRoIGEgbW9yZSBwcmVjaXNlIG1vZGVsbGluZzsgdHlwZQogIC8vIGluZmVyZW5jZSBvZiBwYXJhbWV0ZXJzIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBkaXNhYmxlZC4KICB2b2lkIHJlZ2lzdGVyQmFja2VuZEZ1bmN0aW9uVXNlKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gVGhlIGJhY2tlbmQgbXVzdCAqYWx3YXlzKiBjYWxsIHRoaXMgbWV0aG9kIHdoZW4gaW5zdGFudGlhdGluZyBhIGNsYXNzLgogIC8vLyBJbnN0YW50aWF0aW9ucyBkb25lIGJ5IHRoZSBiYWNrZW5kIGFyZSBub3Qgc2VlbiBieSBnbG9iYWwgb3B0aW1pemF0aW9ucywKICAvLy8gc28gdGhleSB3b3VsZCBtYWtlIHRoZXNlIG9wdGltaXphdGlvbnMgdW5zb3VuZC4gVGhlcmVmb3JlIHdlIG5lZWQgdG8KICAvLy8gY29sbGVjdCB0aGUgbGlzdCBvZiBjbGFzc2VzIHRoZSBiYWNrZW5kIG1heSBpbnN0YW50aWF0ZS4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZXBsYWNlIHRoaXMgd2l0aCBhIG1vcmUgcHJlY2lzZSBtb2RlbGxpbmc7IHR5cGUKICAvLyBpbmZlcmVuY2Ugb2YgdGhlIGluc3RhbmNlIGZpZWxkcyBvZiB0aGVzZSBjbGFzc2VzIGlzIGRpc2FibGVkLgogIHZvaWQgcmVnaXN0ZXJCYWNrZW5kQ2xhc3NVc2UoQ2xhc3NFbnRpdHkgZWxlbWVudCk7CgogIHZvaWQgcmVnaXN0ZXJHbG9iYWxGdW5jdGlvbkRlcGVuZGVuY3koRnVuY3Rpb25FbnRpdHkgZWxlbWVudCk7CiAgdm9pZCByZWdpc3Rlckdsb2JhbENsYXNzRGVwZW5kZW5jeShDbGFzc0VudGl0eSBlbGVtZW50KTsKCiAgLy8vIENvbGxlY3QgYmFja2VuZCB1c2UgZnJvbSBbYmFja2VuZEltcGFjdF0uCiAgdm9pZCBwcm9jZXNzQmFja2VuZEltcGFjdChCYWNrZW5kSW1wYWN0IGJhY2tlbmRJbXBhY3QpOwoKICB2b2lkIHJlZ2lzdGVyVXNlZE1lbWJlcihNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgLy8vIFJlZ2lzdGVyIHVzZSBvZiBgcnVudGltZVR5cGVgLgogIHZvaWQgcmVnaXN0ZXJSdW50aW1lVHlwZVVzZShSdW50aW1lVHlwZVVzZSBydW50aW1lVHlwZVVzZSk7CgogIC8vLyBgdHJ1ZWAgaWYgYEZ1bmN0aW9uLmFwcGx5YCBpcyB1c2VkLgogIGJvb2wgaXNGdW5jdGlvbkFwcGx5VXNlZDsKCiAgLy8vIGB0cnVlYCBpZiBgbm9TdWNoTWV0aG9kYCBpcyB1c2VkLgogIGJvb2wgaXNOb1N1Y2hNZXRob2RVc2VkOwoKICAvLy8gUmVnaXN0ZXIgdGhhdCBgZGFydDpodG1sYCBpcyBsb2FkZWQuCiAgdm9pZCByZWdpc3Rlckh0bWxJc0xvYWRlZCgpOwoKICBCYWNrZW5kVXNhZ2UgY2xvc2UoKTsKfQoKY2xhc3MgQmFja2VuZFVzYWdlQnVpbGRlckltcGwgaW1wbGVtZW50cyBCYWNrZW5kVXNhZ2VCdWlsZGVyIHsKICBGcm9udGVuZFN0cmF0ZWd5IF9mcm9udGVuZFN0cmF0ZWd5OwogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGUgbmVlZCBmb3IgdGhlc2UuCiAgU2V0bGV0PEZ1bmN0aW9uRW50aXR5PiBfZ2xvYmFsRnVuY3Rpb25EZXBlbmRlbmNpZXM7CiAgU2V0bGV0PENsYXNzRW50aXR5PiBfZ2xvYmFsQ2xhc3NEZXBlbmRlbmNpZXM7CgogIC8vLyBMaXN0IG9mIG1ldGhvZHMgdGhhdCB0aGUgYmFja2VuZCBtYXkgdXNlLgogIGZpbmFsIFNldDxGdW5jdGlvbkVudGl0eT4gX2hlbHBlckZ1bmN0aW9uc1VzZWQgPSBuZXcgU2V0PEZ1bmN0aW9uRW50aXR5PigpOwoKICAvLy8gTGlzdCBvZiBjbGFzc2VzIHRoYXQgdGhlIGJhY2tlbmQgbWF5IHVzZS4KICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IF9oZWxwZXJDbGFzc2VzVXNlZCA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CgogIGZpbmFsIFNldDxSdW50aW1lVHlwZVVzZT4gX3J1bnRpbWVUeXBlVXNlcyA9IG5ldyBTZXQ8UnVudGltZVR5cGVVc2U+KCk7CgogIGJvb2wgX25lZWRUb0luaXRpYWxpemVJc29sYXRlQWZmaW5pdHlUYWcgPSBmYWxzZTsKICBib29sIF9uZWVkVG9Jbml0aWFsaXplRGlzcGF0Y2hQcm9wZXJ0eSA9IGZhbHNlOwoKICAvLy8gYHRydWVgIGlmIGEgY29yZS1saWJyYXJ5IGZ1bmN0aW9uIHJlcXVpcmVzIHRoZSBwcmVhbWJsZSBmaWxlIHRvIGZ1bmN0aW9uLgogIGJvb2wgcmVxdWlyZXNQcmVhbWJsZSA9IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGlzRnVuY3Rpb25BcHBseVVzZWQgPSBmYWxzZTsKCiAgLy8vIGB0cnVlYCBpZiAnZGFydDptaXJyb3JzJyBmZWF0dXJlcyBhcmUgdXNlZC4KICBib29sIGlzTWlycm9yc1VzZWQgPSBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc05vU3VjaE1ldGhvZFVzZWQgPSBmYWxzZTsKCiAgYm9vbCBpc0h0bWxMb2FkZWQgPSBmYWxzZTsKCiAgQmFja2VuZFVzYWdlQnVpbGRlckltcGwodGhpcy5fZnJvbnRlbmRTdHJhdGVneSk7CgogIEtDb21tb25FbGVtZW50cyBnZXQgX2NvbW1vbkVsZW1lbnRzID0+IF9mcm9udGVuZFN0cmF0ZWd5LmNvbW1vbkVsZW1lbnRzOwoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQmFja2VuZEZ1bmN0aW9uVXNlKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydChfaXNWYWxpZEJhY2tlbmRVc2UoZWxlbWVudCwgZWxlbWVudC5saWJyYXJ5KSwKICAgICAgICBmYWlsZWRBdChlbGVtZW50LCAiQmFja2VuZCB1c2Ugb2YgJGVsZW1lbnQgaXMgbm90IGFsbG93ZWQuIikpOwogICAgX2hlbHBlckZ1bmN0aW9uc1VzZWQuYWRkKGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckJhY2tlbmRDbGFzc1VzZShDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoX2lzVmFsaWRCYWNrZW5kVXNlKGVsZW1lbnQsIGVsZW1lbnQubGlicmFyeSksCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwgIkJhY2tlbmQgdXNlIG9mICRlbGVtZW50IGlzIG5vdCBhbGxvd2VkLiIpKTsKICAgIF9oZWxwZXJDbGFzc2VzVXNlZC5hZGQoZWxlbWVudCk7CiAgfQoKICBib29sIF9pc1ZhbGlkQmFja2VuZFVzZShFbnRpdHkgZWxlbWVudCwgTGlicmFyeUVudGl0eSBsaWJyYXJ5KSB7CiAgICBpZiAoX2lzVmFsaWRFbnRpdHkoZWxlbWVudCkpIHJldHVybiB0cnVlOwogICAgU291cmNlU3BhbiBzcGFuID0gX2Zyb250ZW5kU3RyYXRlZ3kuc3BhbkZyb21TcGFubmFibGUoZWxlbWVudCwgZWxlbWVudCk7CiAgICBpZiAobGlicmFyeS5jYW5vbmljYWxVcmkuc2NoZW1lID09ICdkYXJ0JyAmJgogICAgICAgIHNwYW4udXJpLnBhdGguY29udGFpbnMoJ19pbnRlcm5hbC9qc19ydW50aW1lL2xpYi8nKSkgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBXZSBzaG91bGQgYmUgbW9yZSBwcmVjaXNlIGFib3V0IHRoZXNlLgogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CgogIGJvb2wgX2lzVmFsaWRFbnRpdHkoRW50aXR5IGVsZW1lbnQpIHsKICAgIGlmIChlbGVtZW50IGlzIENvbnN0cnVjdG9yRW50aXR5ICYmCiAgICAgICAgKGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLnN0cmVhbUl0ZXJhdG9yQ29uc3RydWN0b3IgfHwKICAgICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmlzU3ltYm9sQ29uc3RydWN0b3IoZWxlbWVudCkgfHwKICAgICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmlzU3ltYm9sVmFsaWRhdGVkQ29uc3RydWN0b3IoZWxlbWVudCkpKSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFRoZXNlIGFyZSB2YWxpZCBidXQgd2UgY291bGQgYmUgbW9yZSBwcmVjaXNlLgogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSBpZiAoZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuc3ltYm9sSW1wbGVtZW50YXRpb25DbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLm9iamVjdE5vU3VjaE1ldGhvZCkgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBUaGVzZSBhcmUgdmFsaWQgYnV0IHdlIGNvdWxkIGJlIG1vcmUgcHJlY2lzZS4KICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLmxpc3RDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLm1hcExpdGVyYWxDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLnNldExpdGVyYWxDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLnVubW9kaWZpYWJsZVNldENsYXNzIHx8CiAgICAgICAgZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuZnVuY3Rpb25DbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLnN0cmluZ0NsYXNzKSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEF2b2lkIHRoZXNlLgogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgX3Byb2Nlc3NCYWNrZW5kU3RhdGljVXNlKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQsCiAgICAgIHtib29sIGlzR2xvYmFsOiBmYWxzZX0pIHsKICAgIHJlZ2lzdGVyQmFja2VuZEZ1bmN0aW9uVXNlKGVsZW1lbnQpOwogICAgaWYgKGlzR2xvYmFsKSB7CiAgICAgIHJlZ2lzdGVyR2xvYmFsRnVuY3Rpb25EZXBlbmRlbmN5KGVsZW1lbnQpOwogICAgfQogIH0KCiAgdm9pZCBfcHJvY2Vzc0JhY2tlbmRJbnN0YW50aWF0aW9uKENsYXNzRW50aXR5IGNscywge2Jvb2wgaXNHbG9iYWw6IGZhbHNlfSkgewogICAgcmVnaXN0ZXJCYWNrZW5kQ2xhc3NVc2UoY2xzKTsKICAgIGlmIChpc0dsb2JhbCkgewogICAgICByZWdpc3Rlckdsb2JhbENsYXNzRGVwZW5kZW5jeShjbHMpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBwcm9jZXNzQmFja2VuZEltcGFjdChCYWNrZW5kSW1wYWN0IGJhY2tlbmRJbXBhY3QpIHsKICAgIGZvciAoRnVuY3Rpb25FbnRpdHkgc3RhdGljVXNlIGluIGJhY2tlbmRJbXBhY3Quc3RhdGljVXNlcykgewogICAgICBhc3NlcnQoc3RhdGljVXNlICE9IG51bGwpOwogICAgICBfcHJvY2Vzc0JhY2tlbmRTdGF0aWNVc2Uoc3RhdGljVXNlKTsKICAgIH0KICAgIGZvciAoRnVuY3Rpb25FbnRpdHkgc3RhdGljVXNlIGluIGJhY2tlbmRJbXBhY3QuZ2xvYmFsVXNlcykgewogICAgICBhc3NlcnQoc3RhdGljVXNlICE9IG51bGwpOwogICAgICBfcHJvY2Vzc0JhY2tlbmRTdGF0aWNVc2Uoc3RhdGljVXNlLCBpc0dsb2JhbDogdHJ1ZSk7CiAgICB9CiAgICBmb3IgKEludGVyZmFjZVR5cGUgaW5zdGFudGlhdGVkVHlwZSBpbiBiYWNrZW5kSW1wYWN0Lmluc3RhbnRpYXRlZFR5cGVzKSB7CiAgICAgIHJlZ2lzdGVyQmFja2VuZENsYXNzVXNlKGluc3RhbnRpYXRlZFR5cGUuZWxlbWVudCk7CiAgICB9CiAgICBmb3IgKENsYXNzRW50aXR5IGNscyBpbiBiYWNrZW5kSW1wYWN0Lmluc3RhbnRpYXRlZENsYXNzZXMpIHsKICAgICAgX3Byb2Nlc3NCYWNrZW5kSW5zdGFudGlhdGlvbihjbHMpOwogICAgfQogICAgZm9yIChDbGFzc0VudGl0eSBjbHMgaW4gYmFja2VuZEltcGFjdC5nbG9iYWxDbGFzc2VzKSB7CiAgICAgIF9wcm9jZXNzQmFja2VuZEluc3RhbnRpYXRpb24oY2xzLCBpc0dsb2JhbDogdHJ1ZSk7CiAgICB9CiAgICBmb3IgKEJhY2tlbmRJbXBhY3Qgb3RoZXJJbXBhY3QgaW4gYmFja2VuZEltcGFjdC5vdGhlckltcGFjdHMpIHsKICAgICAgcHJvY2Vzc0JhY2tlbmRJbXBhY3Qob3RoZXJJbXBhY3QpOwogICAgfQogICAgZm9yIChCYWNrZW5kRmVhdHVyZSBmZWF0dXJlIGluIGJhY2tlbmRJbXBhY3QuZmVhdHVyZXMpIHsKICAgICAgc3dpdGNoIChmZWF0dXJlKSB7CiAgICAgICAgY2FzZSBCYWNrZW5kRmVhdHVyZS5uZWVkVG9Jbml0aWFsaXplRGlzcGF0Y2hQcm9wZXJ0eToKICAgICAgICAgIF9uZWVkVG9Jbml0aWFsaXplRGlzcGF0Y2hQcm9wZXJ0eSA9IHRydWU7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEJhY2tlbmRGZWF0dXJlLm5lZWRUb0luaXRpYWxpemVJc29sYXRlQWZmaW5pdHlUYWc6CiAgICAgICAgICBfbmVlZFRvSW5pdGlhbGl6ZUlzb2xhdGVBZmZpbml0eVRhZyA9IHRydWU7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclVzZWRNZW1iZXIoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgaWYgKG1lbWJlciA9PSBfY29tbW9uRWxlbWVudHMuZ2V0SXNvbGF0ZUFmZmluaXR5VGFnTWFya2VyKSB7CiAgICAgIF9uZWVkVG9Jbml0aWFsaXplSXNvbGF0ZUFmZmluaXR5VGFnID0gdHJ1ZTsKICAgIH0gZWxzZSBpZiAobWVtYmVyID09IF9jb21tb25FbGVtZW50cy5yZXF1aXJlc1ByZWFtYmxlTWFya2VyKSB7CiAgICAgIHJlcXVpcmVzUHJlYW1ibGUgPSB0cnVlOwogICAgfSBlbHNlIGlmIChfY29tbW9uRWxlbWVudHMuaXNGdW5jdGlvbkFwcGx5TWV0aG9kKG1lbWJlcikpIHsKICAgICAgaXNGdW5jdGlvbkFwcGx5VXNlZCA9IHRydWU7CiAgICB9IGVsc2UgaWYgKG1lbWJlci5saWJyYXJ5ID09IF9jb21tb25FbGVtZW50cy5taXJyb3JzTGlicmFyeSkgewogICAgICBpc01pcnJvcnNVc2VkID0gdHJ1ZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJHbG9iYWxGdW5jdGlvbkRlcGVuZGVuY3koRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KGVsZW1lbnQgIT0gbnVsbCk7CiAgICBpZiAoX2dsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jaWVzID09IG51bGwpIHsKICAgICAgX2dsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jaWVzID0gbmV3IFNldGxldDxGdW5jdGlvbkVudGl0eT4oKTsKICAgIH0KICAgIF9nbG9iYWxGdW5jdGlvbkRlcGVuZGVuY2llcy5hZGQoZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyR2xvYmFsQ2xhc3NEZXBlbmRlbmN5KENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydChlbGVtZW50ICE9IG51bGwpOwogICAgaWYgKF9nbG9iYWxDbGFzc0RlcGVuZGVuY2llcyA9PSBudWxsKSB7CiAgICAgIF9nbG9iYWxDbGFzc0RlcGVuZGVuY2llcyA9IG5ldyBTZXRsZXQ8Q2xhc3NFbnRpdHk+KCk7CiAgICB9CiAgICBfZ2xvYmFsQ2xhc3NEZXBlbmRlbmNpZXMuYWRkKGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclJ1bnRpbWVUeXBlVXNlKFJ1bnRpbWVUeXBlVXNlIHJ1bnRpbWVUeXBlVXNlKSB7CiAgICBfcnVudGltZVR5cGVVc2VzLmFkZChydW50aW1lVHlwZVVzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVySHRtbElzTG9hZGVkKCkgewogICAgaXNIdG1sTG9hZGVkID0gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIEJhY2tlbmRVc2FnZSBjbG9zZSgpIHsKICAgIHJldHVybiBuZXcgQmFja2VuZFVzYWdlSW1wbCgKICAgICAgICBnbG9iYWxGdW5jdGlvbkRlcGVuZGVuY2llczogX2dsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jaWVzLAogICAgICAgIGdsb2JhbENsYXNzRGVwZW5kZW5jaWVzOiBfZ2xvYmFsQ2xhc3NEZXBlbmRlbmNpZXMsCiAgICAgICAgaGVscGVyRnVuY3Rpb25zVXNlZDogX2hlbHBlckZ1bmN0aW9uc1VzZWQsCiAgICAgICAgaGVscGVyQ2xhc3Nlc1VzZWQ6IF9oZWxwZXJDbGFzc2VzVXNlZCwKICAgICAgICBuZWVkVG9Jbml0aWFsaXplSXNvbGF0ZUFmZmluaXR5VGFnOiBfbmVlZFRvSW5pdGlhbGl6ZUlzb2xhdGVBZmZpbml0eVRhZywKICAgICAgICBuZWVkVG9Jbml0aWFsaXplRGlzcGF0Y2hQcm9wZXJ0eTogX25lZWRUb0luaXRpYWxpemVEaXNwYXRjaFByb3BlcnR5LAogICAgICAgIHJlcXVpcmVzUHJlYW1ibGU6IHJlcXVpcmVzUHJlYW1ibGUsCiAgICAgICAgcnVudGltZVR5cGVVc2VzOiBfcnVudGltZVR5cGVVc2VzLAogICAgICAgIGlzRnVuY3Rpb25BcHBseVVzZWQ6IGlzRnVuY3Rpb25BcHBseVVzZWQsCiAgICAgICAgaXNNaXJyb3JzVXNlZDogaXNNaXJyb3JzVXNlZCwKICAgICAgICBpc05vU3VjaE1ldGhvZFVzZWQ6IGlzTm9TdWNoTWV0aG9kVXNlZCwKICAgICAgICBpc0h0bWxMb2FkZWQ6IGlzSHRtbExvYWRlZCk7CiAgfQp9CgpjbGFzcyBCYWNrZW5kVXNhZ2VJbXBsIGltcGxlbWVudHMgQmFja2VuZFVzYWdlIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0JhY2tlbmRVc2FnZV0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdiYWNrZW5kLXVzYWdlJzsKCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoZSBuZWVkIGZvciB0aGVzZS4KICBmaW5hbCBTZXQ8RnVuY3Rpb25FbnRpdHk+IF9nbG9iYWxGdW5jdGlvbkRlcGVuZGVuY2llczsKICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IF9nbG9iYWxDbGFzc0RlcGVuZGVuY2llczsKCiAgLy8vIFNldCBvZiBmdW5jdGlvbnMgY2FsbGVkIGJ5IHRoZSBiYWNrZW5kLgogIGZpbmFsIFNldDxGdW5jdGlvbkVudGl0eT4gX2hlbHBlckZ1bmN0aW9uc1VzZWQ7CgogIC8vLyBTZXQgb2YgY2xhc3NlcyBpbnN0YW50aWF0ZWQgYnkgdGhlIGJhY2tlbmQuCiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBfaGVscGVyQ2xhc3Nlc1VzZWQ7CgogIGZpbmFsIFNldDxSdW50aW1lVHlwZVVzZT4gX3J1bnRpbWVUeXBlVXNlczsKCiAgQG92ZXJyaWRlCiAgYm9vbCBuZWVkVG9Jbml0aWFsaXplSXNvbGF0ZUFmZmluaXR5VGFnOwogIEBvdmVycmlkZQogIGJvb2wgbmVlZFRvSW5pdGlhbGl6ZURpc3BhdGNoUHJvcGVydHk7CgogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgcmVxdWlyZXNQcmVhbWJsZTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0Z1bmN0aW9uQXBwbHlVc2VkOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzTWlycm9yc1VzZWQ7CgogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgaXNOb1N1Y2hNZXRob2RVc2VkOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzSHRtbExvYWRlZDsKCiAgQmFja2VuZFVzYWdlSW1wbCgKICAgICAge1NldDxGdW5jdGlvbkVudGl0eT4gZ2xvYmFsRnVuY3Rpb25EZXBlbmRlbmNpZXMsCiAgICAgIFNldDxDbGFzc0VudGl0eT4gZ2xvYmFsQ2xhc3NEZXBlbmRlbmNpZXMsCiAgICAgIFNldDxGdW5jdGlvbkVudGl0eT4gaGVscGVyRnVuY3Rpb25zVXNlZCwKICAgICAgU2V0PENsYXNzRW50aXR5PiBoZWxwZXJDbGFzc2VzVXNlZCwKICAgICAgdGhpcy5uZWVkVG9Jbml0aWFsaXplSXNvbGF0ZUFmZmluaXR5VGFnLAogICAgICB0aGlzLm5lZWRUb0luaXRpYWxpemVEaXNwYXRjaFByb3BlcnR5LAogICAgICB0aGlzLnJlcXVpcmVzUHJlYW1ibGUsCiAgICAgIFNldDxSdW50aW1lVHlwZVVzZT4gcnVudGltZVR5cGVVc2VzLAogICAgICB0aGlzLmlzRnVuY3Rpb25BcHBseVVzZWQsCiAgICAgIHRoaXMuaXNNaXJyb3JzVXNlZCwKICAgICAgdGhpcy5pc05vU3VjaE1ldGhvZFVzZWQsCiAgICAgIHRoaXMuaXNIdG1sTG9hZGVkfSkKICAgICAgOiB0aGlzLl9nbG9iYWxGdW5jdGlvbkRlcGVuZGVuY2llcyA9IGdsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jaWVzLAogICAgICAgIHRoaXMuX2dsb2JhbENsYXNzRGVwZW5kZW5jaWVzID0gZ2xvYmFsQ2xhc3NEZXBlbmRlbmNpZXMsCiAgICAgICAgdGhpcy5faGVscGVyRnVuY3Rpb25zVXNlZCA9IGhlbHBlckZ1bmN0aW9uc1VzZWQsCiAgICAgICAgdGhpcy5faGVscGVyQ2xhc3Nlc1VzZWQgPSBoZWxwZXJDbGFzc2VzVXNlZCwKICAgICAgICB0aGlzLl9ydW50aW1lVHlwZVVzZXMgPSBydW50aW1lVHlwZVVzZXM7CgogIGZhY3RvcnkgQmFja2VuZFVzYWdlSW1wbC5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgU2V0PEZ1bmN0aW9uRW50aXR5PiBnbG9iYWxGdW5jdGlvbkRlcGVuZGVuY2llcyA9CiAgICAgICAgc291cmNlLnJlYWRNZW1iZXJzPEZ1bmN0aW9uRW50aXR5PigpLnRvU2V0KCk7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGdsb2JhbENsYXNzRGVwZW5kZW5jaWVzID0gc291cmNlLnJlYWRDbGFzc2VzKCkudG9TZXQoKTsKICAgIFNldDxGdW5jdGlvbkVudGl0eT4gaGVscGVyRnVuY3Rpb25zVXNlZCA9CiAgICAgICAgc291cmNlLnJlYWRNZW1iZXJzPEZ1bmN0aW9uRW50aXR5PigpLnRvU2V0KCk7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGhlbHBlckNsYXNzZXNVc2VkID0gc291cmNlLnJlYWRDbGFzc2VzKCkudG9TZXQoKTsKICAgIFNldDxSdW50aW1lVHlwZVVzZT4gcnVudGltZVR5cGVVc2VzID0gc291cmNlLnJlYWRMaXN0KCgpIHsKICAgICAgUnVudGltZVR5cGVVc2VLaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oUnVudGltZVR5cGVVc2VLaW5kLnZhbHVlcyk7CiAgICAgIERhcnRUeXBlIHJlY2VpdmVyVHlwZSA9IHNvdXJjZS5yZWFkRGFydFR5cGUoKTsKICAgICAgRGFydFR5cGUgYXJndW1lbnRUeXBlID0gc291cmNlLnJlYWREYXJ0VHlwZShhbGxvd051bGw6IHRydWUpOwogICAgICByZXR1cm4gbmV3IFJ1bnRpbWVUeXBlVXNlKGtpbmQsIHJlY2VpdmVyVHlwZSwgYXJndW1lbnRUeXBlKTsKICAgIH0pLnRvU2V0KCk7CiAgICBib29sIG5lZWRUb0luaXRpYWxpemVJc29sYXRlQWZmaW5pdHlUYWcgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGJvb2wgbmVlZFRvSW5pdGlhbGl6ZURpc3BhdGNoUHJvcGVydHkgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGJvb2wgcmVxdWlyZXNQcmVhbWJsZSA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgYm9vbCBpc0Z1bmN0aW9uQXBwbHlVc2VkID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBib29sIGlzTWlycm9yc1VzZWQgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGJvb2wgaXNOb1N1Y2hNZXRob2RVc2VkID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBib29sIGlzSHRtbExvYWRlZCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBCYWNrZW5kVXNhZ2VJbXBsKAogICAgICAgIGdsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jaWVzOiBnbG9iYWxGdW5jdGlvbkRlcGVuZGVuY2llcywKICAgICAgICBnbG9iYWxDbGFzc0RlcGVuZGVuY2llczogZ2xvYmFsQ2xhc3NEZXBlbmRlbmNpZXMsCiAgICAgICAgaGVscGVyRnVuY3Rpb25zVXNlZDogaGVscGVyRnVuY3Rpb25zVXNlZCwKICAgICAgICBoZWxwZXJDbGFzc2VzVXNlZDogaGVscGVyQ2xhc3Nlc1VzZWQsCiAgICAgICAgcnVudGltZVR5cGVVc2VzOiBydW50aW1lVHlwZVVzZXMsCiAgICAgICAgbmVlZFRvSW5pdGlhbGl6ZUlzb2xhdGVBZmZpbml0eVRhZzogbmVlZFRvSW5pdGlhbGl6ZUlzb2xhdGVBZmZpbml0eVRhZywKICAgICAgICBuZWVkVG9Jbml0aWFsaXplRGlzcGF0Y2hQcm9wZXJ0eTogbmVlZFRvSW5pdGlhbGl6ZURpc3BhdGNoUHJvcGVydHksCiAgICAgICAgcmVxdWlyZXNQcmVhbWJsZTogcmVxdWlyZXNQcmVhbWJsZSwKICAgICAgICBpc0Z1bmN0aW9uQXBwbHlVc2VkOiBpc0Z1bmN0aW9uQXBwbHlVc2VkLAogICAgICAgIGlzTWlycm9yc1VzZWQ6IGlzTWlycm9yc1VzZWQsCiAgICAgICAgaXNOb1N1Y2hNZXRob2RVc2VkOiBpc05vU3VjaE1ldGhvZFVzZWQsCiAgICAgICAgaXNIdG1sTG9hZGVkOiBpc0h0bWxMb2FkZWQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZU1lbWJlcnMoX2dsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jaWVzKTsKICAgIHNpbmsud3JpdGVDbGFzc2VzKF9nbG9iYWxDbGFzc0RlcGVuZGVuY2llcyk7CiAgICBzaW5rLndyaXRlTWVtYmVycyhfaGVscGVyRnVuY3Rpb25zVXNlZCk7CiAgICBzaW5rLndyaXRlQ2xhc3NlcyhfaGVscGVyQ2xhc3Nlc1VzZWQpOwogICAgc2luay53cml0ZUxpc3QocnVudGltZVR5cGVVc2VzLCAoUnVudGltZVR5cGVVc2UgcnVudGltZVR5cGVVc2UpIHsKICAgICAgc2luay53cml0ZUVudW0ocnVudGltZVR5cGVVc2Uua2luZCk7CiAgICAgIHNpbmsud3JpdGVEYXJ0VHlwZShydW50aW1lVHlwZVVzZS5yZWNlaXZlclR5cGUpOwogICAgICBzaW5rLndyaXRlRGFydFR5cGUocnVudGltZVR5cGVVc2UuYXJndW1lbnRUeXBlLCBhbGxvd051bGw6IHRydWUpOwogICAgfSk7CiAgICBzaW5rLndyaXRlQm9vbChuZWVkVG9Jbml0aWFsaXplSXNvbGF0ZUFmZmluaXR5VGFnKTsKICAgIHNpbmsud3JpdGVCb29sKG5lZWRUb0luaXRpYWxpemVEaXNwYXRjaFByb3BlcnR5KTsKICAgIHNpbmsud3JpdGVCb29sKHJlcXVpcmVzUHJlYW1ibGUpOwogICAgc2luay53cml0ZUJvb2woaXNGdW5jdGlvbkFwcGx5VXNlZCk7CiAgICBzaW5rLndyaXRlQm9vbChpc01pcnJvcnNVc2VkKTsKICAgIHNpbmsud3JpdGVCb29sKGlzTm9TdWNoTWV0aG9kVXNlZCk7CiAgICBzaW5rLndyaXRlQm9vbChpc0h0bWxMb2FkZWQpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNGdW5jdGlvblVzZWRCeUJhY2tlbmQoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIF9oZWxwZXJGdW5jdGlvbnNVc2VkLmNvbnRhaW5zKGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0ZpZWxkVXNlZEJ5QmFja2VuZChGaWVsZEVudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gX2hlbHBlckNsYXNzZXNVc2VkLmNvbnRhaW5zKGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8RnVuY3Rpb25FbnRpdHk+IGdldCBnbG9iYWxGdW5jdGlvbkRlcGVuZGVuY2llcyA9PgogICAgICBfZ2xvYmFsRnVuY3Rpb25EZXBlbmRlbmNpZXMgPz8gY29uc3QgPEZ1bmN0aW9uRW50aXR5PltdOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gZ2V0IGdsb2JhbENsYXNzRGVwZW5kZW5jaWVzID0+CiAgICAgIF9nbG9iYWxDbGFzc0RlcGVuZGVuY2llcyA/PyBjb25zdCA8Q2xhc3NFbnRpdHk+W107CgogIEl0ZXJhYmxlPEZ1bmN0aW9uRW50aXR5PiBnZXQgaGVscGVyRnVuY3Rpb25zVXNlZCA9PiBfaGVscGVyRnVuY3Rpb25zVXNlZDsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBoZWxwZXJDbGFzc2VzVXNlZCA9PiBfaGVscGVyQ2xhc3Nlc1VzZWQ7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUnVudGltZVR5cGVVc2VkID0+IF9ydW50aW1lVHlwZVVzZXMuaXNOb3RFbXB0eTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8UnVudGltZVR5cGVVc2U+IGdldCBydW50aW1lVHlwZVVzZXMgPT4gX3J1bnRpbWVUeXBlVXNlczsKfQqBuABOTjwBGSIkISQrLiMoHgEeOj8rATAnASspAUc4AU8WMgE7ATUBLwEwAVAdAS4eASogATIaASgfASs+GQIBJUxARUcMSz07AU1PSz9LRDUBQTsBMDoBMAElPgEqHAEoGwErHwEYAgE/JjU2MAEwTgEwRgFKATQyAVAhAQwkATIeAQwjAR0BMwFLAQw8OUcnBAEMNjlHJQQBQy5NMT9FEw0UBgQBKChBPEZME0c5TBM3NjY7NDIrEwYSBAE4ICkUMQYEAU8iFCoGBAEMO0EhKwZBITsGTjkGQSkGOzkGRCkGPRk+NBFANhEIBgQBDDFBMkMfQCJDHAYEAQxCHS9CBi4EAQw8HSw8BisEAQw/KgQBDCAZBAEMGSFBOzMvUU0sKzImMCUEAgExRh0tATU5MwEuMgEyLQEuAQwrDCkBDB8BDCIBDBwBDCEBDBsBFDcwLyovLR0rIBofGkdBOTUxAUMXNTZNLjZHP0w1REMQQT8vMiwxKxUhQDoyLipQTCwyJjAlBAEMKBU0MS0rRis3SAg4NiYpIygiEwQBDDkzBAEMM0AEAQw9PwEMNzkBTAEMRQEMPQEMRAIBMnBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvYmFja2VuZF91c2FnZS5kYXJ0QXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2JhY2tlbmQvcmVzb2x1dGlvbl9saXN0ZW5lci5kYXJ0wABMwi8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGpzX2JhY2tlbmQuYmFja2VuZC5yZXNvbHV0aW9uX2xpc3RlbmVyOwoKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCcgc2hvdyBJZGVudGlmaWVyczsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBLQ29tbW9uRWxlbWVudHMsIEtFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9kZWZlcnJlZF9sb2FkLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2VucXVldWUuZGFydCcgc2hvdyBFbnF1ZXVlciwgRW5xdWV1ZXJMaXN0ZW5lcjsKaW1wb3J0ICcuLi9uYXRpdmUvZW5xdWV1ZS5kYXJ0JzsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnIHNob3cgQ29tcGlsZXJPcHRpb25zOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NhbGxfc3RydWN0dXJlLmRhcnQnIHNob3cgQ2FsbFN0cnVjdHVyZTsKaW1wb3J0ICcuLi91bml2ZXJzZS91c2UuZGFydCcgc2hvdyBTdGF0aWNVc2UsIFR5cGVVc2U7CmltcG9ydCAnLi4vdW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnQnCiAgICBzaG93IFdvcmxkSW1wYWN0LCBXb3JsZEltcGFjdEJ1aWxkZXIsIFdvcmxkSW1wYWN0QnVpbGRlckltcGw7CmltcG9ydCAnZmllbGRfYW5hbHlzaXMuZGFydCc7CmltcG9ydCAnYmFja2VuZF9pbXBhY3QuZGFydCc7CmltcG9ydCAnYmFja2VuZF91c2FnZS5kYXJ0JzsKaW1wb3J0ICdjaGVja2VkX21vZGVfaGVscGVycy5kYXJ0JzsKaW1wb3J0ICdjdXN0b21fZWxlbWVudHNfYW5hbHlzaXMuZGFydCc7CmltcG9ydCAnaW50ZXJjZXB0b3JfZGF0YS5kYXJ0JzsKaW1wb3J0ICduYXRpdmVfZGF0YS5kYXJ0JyBzaG93IE5hdGl2ZUJhc2ljRGF0YTsKaW1wb3J0ICdub19zdWNoX21ldGhvZF9yZWdpc3RyeS5kYXJ0JzsKCmNsYXNzIFJlc29sdXRpb25FbnF1ZXVlckxpc3RlbmVyIGV4dGVuZHMgRW5xdWV1ZXJMaXN0ZW5lciB7CiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQXZvaWQgdGhlIG5lZWQgZm9yIHRoaXMuCiAgZmluYWwgRGVmZXJyZWRMb2FkVGFzayBfZGVmZXJyZWRMb2FkVGFzazsKCiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwogIGZpbmFsIEtFbGVtZW50RW52aXJvbm1lbnQgX2VsZW1lbnRFbnZpcm9ubWVudDsKICBmaW5hbCBLQ29tbW9uRWxlbWVudHMgX2NvbW1vbkVsZW1lbnRzOwogIGZpbmFsIEJhY2tlbmRJbXBhY3RzIF9pbXBhY3RzOwoKICBmaW5hbCBOYXRpdmVCYXNpY0RhdGEgX25hdGl2ZURhdGE7CiAgZmluYWwgSW50ZXJjZXB0b3JEYXRhQnVpbGRlciBfaW50ZXJjZXB0b3JEYXRhOwogIGZpbmFsIEJhY2tlbmRVc2FnZUJ1aWxkZXIgX2JhY2tlbmRVc2FnZTsKCiAgZmluYWwgTm9TdWNoTWV0aG9kUmVnaXN0cnkgX25vU3VjaE1ldGhvZFJlZ2lzdHJ5OwogIGZpbmFsIEN1c3RvbUVsZW1lbnRzUmVzb2x1dGlvbkFuYWx5c2lzIF9jdXN0b21FbGVtZW50c0FuYWx5c2lzOwoKICBmaW5hbCBOYXRpdmVSZXNvbHV0aW9uRW5xdWV1ZXIgX25hdGl2ZUVucXVldWVyOwogIGZpbmFsIEtGaWVsZEFuYWx5c2lzIF9maWVsZEFuYWx5c2lzOwoKICAvLy8gVHJ1ZSB3aGVuIHdlIGVucXVldWUgdGhlIGxvYWRMaWJyYXJ5IGNvZGUuCiAgYm9vbCBfaXNMb2FkTGlicmFyeUZ1bmN0aW9uUmVzb2x2ZWQgPSBmYWxzZTsKCiAgUmVzb2x1dGlvbkVucXVldWVyTGlzdGVuZXIoCiAgICAgIHRoaXMuX29wdGlvbnMsCiAgICAgIHRoaXMuX2VsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgdGhpcy5fY29tbW9uRWxlbWVudHMsCiAgICAgIHRoaXMuX2ltcGFjdHMsCiAgICAgIHRoaXMuX25hdGl2ZURhdGEsCiAgICAgIHRoaXMuX2ludGVyY2VwdG9yRGF0YSwKICAgICAgdGhpcy5fYmFja2VuZFVzYWdlLAogICAgICB0aGlzLl9ub1N1Y2hNZXRob2RSZWdpc3RyeSwKICAgICAgdGhpcy5fY3VzdG9tRWxlbWVudHNBbmFseXNpcywKICAgICAgdGhpcy5fbmF0aXZlRW5xdWV1ZXIsCiAgICAgIHRoaXMuX2ZpZWxkQW5hbHlzaXMsCiAgICAgIHRoaXMuX2RlZmVycmVkTG9hZFRhc2spOwoKICB2b2lkIF9yZWdpc3RlckJhY2tlbmRJbXBhY3QoCiAgICAgIFdvcmxkSW1wYWN0QnVpbGRlciBidWlsZGVyLCBCYWNrZW5kSW1wYWN0IGltcGFjdCkgewogICAgaW1wYWN0LnJlZ2lzdGVySW1wYWN0KGJ1aWxkZXIsIF9lbGVtZW50RW52aXJvbm1lbnQpOwogICAgX2JhY2tlbmRVc2FnZS5wcm9jZXNzQmFja2VuZEltcGFjdChpbXBhY3QpOwogIH0KCiAgdm9pZCBfYWRkSW50ZXJjZXB0b3JzKENsYXNzRW50aXR5IGNscywgV29ybGRJbXBhY3RCdWlsZGVyIGltcGFjdEJ1aWxkZXIpIHsKICAgIF9pbnRlcmNlcHRvckRhdGEuYWRkSW50ZXJjZXB0b3JzKGNscyk7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyVHlwZVVzZSgKICAgICAgICBuZXcgVHlwZVVzZS5pbnN0YW50aWF0aW9uKF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0UmF3VHlwZShjbHMpKSk7CiAgICBfYmFja2VuZFVzYWdlLnJlZ2lzdGVyQmFja2VuZENsYXNzVXNlKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBXb3JsZEltcGFjdCByZWdpc3RlckNsb3N1cml6ZWRNZW1iZXIoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgV29ybGRJbXBhY3RCdWlsZGVySW1wbCBpbXBhY3RCdWlsZGVyID0gbmV3IFdvcmxkSW1wYWN0QnVpbGRlckltcGwoKTsKICAgIF9iYWNrZW5kVXNhZ2UucHJvY2Vzc0JhY2tlbmRJbXBhY3QoX2ltcGFjdHMubWVtYmVyQ2xvc3VyZSk7CiAgICBpbXBhY3RCdWlsZGVyCiAgICAgICAgLmFkZEltcGFjdChfaW1wYWN0cy5tZW1iZXJDbG9zdXJlLmNyZWF0ZUltcGFjdChfZWxlbWVudEVudmlyb25tZW50KSk7CiAgICBGdW5jdGlvblR5cGUgdHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlKGVsZW1lbnQpOwogICAgaWYgKHR5cGUuY29udGFpbnNUeXBlVmFyaWFibGVzKSB7CiAgICAgIGltcGFjdEJ1aWxkZXIuYWRkSW1wYWN0KF9yZWdpc3RlckNvbXB1dGVTaWduYXR1cmUoKSk7CiAgICB9CiAgICByZXR1cm4gaW1wYWN0QnVpbGRlcjsKICB9CgogIEBvdmVycmlkZQogIFdvcmxkSW1wYWN0IHJlZ2lzdGVyR2V0T2ZTdGF0aWNGdW5jdGlvbigpIHsKICAgIF9iYWNrZW5kVXNhZ2UucHJvY2Vzc0JhY2tlbmRJbXBhY3QoX2ltcGFjdHMuc3RhdGljQ2xvc3VyZSk7CiAgICByZXR1cm4gX2ltcGFjdHMuc3RhdGljQ2xvc3VyZS5jcmVhdGVJbXBhY3QoX2VsZW1lbnRFbnZpcm9ubWVudCk7CiAgfQoKICBXb3JsZEltcGFjdCBfcmVnaXN0ZXJDb21wdXRlU2lnbmF0dXJlKCkgewogICAgX2JhY2tlbmRVc2FnZS5wcm9jZXNzQmFja2VuZEltcGFjdChfaW1wYWN0cy5jb21wdXRlU2lnbmF0dXJlKTsKICAgIHJldHVybiBfaW1wYWN0cy5jb21wdXRlU2lnbmF0dXJlLmNyZWF0ZUltcGFjdChfZWxlbWVudEVudmlyb25tZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJJbnN0YW50aWF0ZWRUeXBlKEludGVyZmFjZVR5cGUgdHlwZSwKICAgICAge2Jvb2wgaXNHbG9iYWw6IGZhbHNlLCBib29sIG5hdGl2ZVVzYWdlOiBmYWxzZX0pIHsKICAgIGlmIChpc0dsb2JhbCkgewogICAgICBfYmFja2VuZFVzYWdlLnJlZ2lzdGVyR2xvYmFsQ2xhc3NEZXBlbmRlbmN5KHR5cGUuZWxlbWVudCk7CiAgICB9CiAgICBpZiAobmF0aXZlVXNhZ2UpIHsKICAgICAgX25hdGl2ZUVucXVldWVyLm9uSW5zdGFudGlhdGVkVHlwZSh0eXBlKTsKICAgIH0KICB9CgogIC8vLyBDb21wdXRlcyB0aGUgW1dvcmxkSW1wYWN0XSBvZiBjYWxsaW5nIFttYWluTWV0aG9kXSBhcyB0aGUgZW50cnkgcG9pbnQuCiAgV29ybGRJbXBhY3QgX2NvbXB1dGVNYWluSW1wYWN0KEZ1bmN0aW9uRW50aXR5IG1haW5NZXRob2QpIHsKICAgIFdvcmxkSW1wYWN0QnVpbGRlckltcGwgbWFpbkltcGFjdCA9IG5ldyBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsKCk7CiAgICBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUgPSBtYWluTWV0aG9kLnBhcmFtZXRlclN0cnVjdHVyZS5jYWxsU3RydWN0dXJlOwogICAgaWYgKGNhbGxTdHJ1Y3R1cmUuYXJndW1lbnRDb3VudCA+IDApIHsKICAgICAgX2ltcGFjdHMubWFpbldpdGhBcmd1bWVudHMKICAgICAgICAgIC5yZWdpc3RlckltcGFjdChtYWluSW1wYWN0LCBfZWxlbWVudEVudmlyb25tZW50KTsKICAgICAgX2JhY2tlbmRVc2FnZS5wcm9jZXNzQmFja2VuZEltcGFjdChfaW1wYWN0cy5tYWluV2l0aEFyZ3VtZW50cyk7CiAgICAgIG1haW5JbXBhY3QucmVnaXN0ZXJTdGF0aWNVc2UoCiAgICAgICAgICBuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZShtYWluTWV0aG9kLCBjYWxsU3RydWN0dXJlKSk7CiAgICB9CiAgICBpZiAobWFpbk1ldGhvZC5pc0dldHRlcikgewogICAgICBtYWluSW1wYWN0LnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3RhdGljR2V0KG1haW5NZXRob2QpKTsKICAgIH0gZWxzZSB7CiAgICAgIG1haW5JbXBhY3QucmVnaXN0ZXJTdGF0aWNVc2UoCiAgICAgICAgICBuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZShtYWluTWV0aG9kLCBDYWxsU3RydWN0dXJlLk5PX0FSR1MpKTsKICAgIH0KICAgIHJldHVybiBtYWluSW1wYWN0OwogIH0KCiAgLy8vIFJldHVybnMgdGhlIFtXb3JsZEltcGFjdF0gb2YgZW5hYmxpbmcgZGVmZXJyZWQgbG9hZGluZy4KICBXb3JsZEltcGFjdCBfY29tcHV0ZURlZmVycmVkTG9hZGluZ0ltcGFjdCgpIHsKICAgIF9iYWNrZW5kVXNhZ2UucHJvY2Vzc0JhY2tlbmRJbXBhY3QoX2ltcGFjdHMuZGVmZXJyZWRMb2FkaW5nKTsKICAgIHJldHVybiBfaW1wYWN0cy5kZWZlcnJlZExvYWRpbmcuY3JlYXRlSW1wYWN0KF9lbGVtZW50RW52aXJvbm1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBvblF1ZXVlT3BlbigKICAgICAgRW5xdWV1ZXIgZW5xdWV1ZXIsIEZ1bmN0aW9uRW50aXR5IG1haW5NZXRob2QsIEl0ZXJhYmxlPFVyaT4gbGlicmFyaWVzKSB7CiAgICBpZiAoX2RlZmVycmVkTG9hZFRhc2suaXNQcm9ncmFtU3BsaXQpIHsKICAgICAgZW5xdWV1ZXIuYXBwbHlJbXBhY3QoX2NvbXB1dGVEZWZlcnJlZExvYWRpbmdJbXBhY3QoKSwKICAgICAgICAgIGltcGFjdFNvdXJjZTogJ2RlZmVycmVkIGxvYWQnKTsKICAgIH0KICAgIGVucXVldWVyLmFwcGx5SW1wYWN0KF9uYXRpdmVFbnF1ZXVlci5wcm9jZXNzTmF0aXZlQ2xhc3NlcyhsaWJyYXJpZXMpLAogICAgICAgIGltcGFjdFNvdXJjZTogJ25hdGl2ZSBjbGFzc2VzJyk7CiAgICBpZiAobWFpbk1ldGhvZCAhPSBudWxsKSB7CiAgICAgIGVucXVldWVyLmFwcGx5SW1wYWN0KF9jb21wdXRlTWFpbkltcGFjdChtYWluTWV0aG9kKSwKICAgICAgICAgIGltcGFjdFNvdXJjZTogJ21haW4gaW1wYWN0Jyk7CiAgICB9CiAgICAvLyBFbGVtZW50cyByZXF1aXJlZCBieSBlbnF1ZXVlSGVscGVycyBhcmUgZ2xvYmFsIGRlcGVuZGVuY2llcwogICAgLy8gdGhhdCBhcmUgbm90IHB1bGxlZCBpbiBieSBhIHBhcnRpY3VsYXIgZWxlbWVudC4KICAgIGVucXVldWVyLmFwcGx5SW1wYWN0KGNvbXB1dGVIZWxwZXJzSW1wYWN0KCksIGltcGFjdFNvdXJjZTogJ2hlbHBlcnMnKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb25RdWV1ZUVtcHR5KEVucXVldWVyIGVucXVldWVyLCBJdGVyYWJsZTxDbGFzc0VudGl0eT4gcmVjZW50Q2xhc3NlcykgewogICAgLy8gQWRkIGVsZW1lbnRzIHVzZWQgc3ludGhldGljYWxseSwgdGhhdCBpcywgdGhyb3VnaCBmZWF0dXJlcyByYXRoZXIgdGhhbgogICAgLy8gc3ludGF4LCBmb3IgaW5zdGFuY2UgY3VzdG9tIGVsZW1lbnRzLgogICAgLy8KICAgIC8vIFJldHVybiBlYXJseSBpZiBhbnkgZWxlbWVudHMgYXJlIGFkZGVkIHRvIGF2b2lkIGNvdW50aW5nIHRoZSBlbGVtZW50cyBhcwogICAgLy8gZHVlIHRvIG1pcnJvcnMuCiAgICBlbnF1ZXVlci5hcHBseUltcGFjdChfY3VzdG9tRWxlbWVudHNBbmFseXNpcy5mbHVzaCgpLAogICAgICAgIGltcGFjdFNvdXJjZTogX2N1c3RvbUVsZW1lbnRzQW5hbHlzaXMpOwoKICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xzIGluIHJlY2VudENsYXNzZXMpIHsKICAgICAgTWVtYmVyRW50aXR5IGVsZW1lbnQgPSBfZWxlbWVudEVudmlyb25tZW50Lmxvb2t1cExvY2FsQ2xhc3NNZW1iZXIoCiAgICAgICAgICBjbHMsIElkZW50aWZpZXJzLm5vU3VjaE1ldGhvZF8pOwogICAgICBpZiAoZWxlbWVudCAhPSBudWxsICYmCiAgICAgICAgICBlbGVtZW50LmlzSW5zdGFuY2VNZW1iZXIgJiYKICAgICAgICAgIGVsZW1lbnQuaXNGdW5jdGlvbiAmJgogICAgICAgICAgIWVsZW1lbnQuaXNBYnN0cmFjdCkgewogICAgICAgIF9ub1N1Y2hNZXRob2RSZWdpc3RyeS5yZWdpc3Rlck5vU3VjaE1ldGhvZChlbGVtZW50KTsKICAgICAgfQogICAgfQogICAgX25vU3VjaE1ldGhvZFJlZ2lzdHJ5Lm9uUXVldWVFbXB0eSgpOwogICAgaWYgKCFfYmFja2VuZFVzYWdlLmlzTm9TdWNoTWV0aG9kVXNlZCAmJgogICAgICAgIChfbm9TdWNoTWV0aG9kUmVnaXN0cnkuaGFzVGhyb3dpbmdOb1N1Y2hNZXRob2QgfHwKICAgICAgICAgICAgX25vU3VjaE1ldGhvZFJlZ2lzdHJ5Lmhhc0NvbXBsZXhOb1N1Y2hNZXRob2QpKSB7CiAgICAgIF9iYWNrZW5kVXNhZ2UucHJvY2Vzc0JhY2tlbmRJbXBhY3QoX2ltcGFjdHMubm9TdWNoTWV0aG9kU3VwcG9ydCk7CiAgICAgIGVucXVldWVyLmFwcGx5SW1wYWN0KAogICAgICAgICAgX2ltcGFjdHMubm9TdWNoTWV0aG9kU3VwcG9ydC5jcmVhdGVJbXBhY3QoX2VsZW1lbnRFbnZpcm9ubWVudCkpOwogICAgICBfYmFja2VuZFVzYWdlLmlzTm9TdWNoTWV0aG9kVXNlZCA9IHRydWU7CiAgICB9CgogICAgaWYgKF9uYXRpdmVEYXRhLmlzQWxsb3dJbnRlcm9wVXNlZCkgewogICAgICBfYmFja2VuZFVzYWdlLnByb2Nlc3NCYWNrZW5kSW1wYWN0KF9pbXBhY3RzLmFsbG93SW50ZXJvcCk7CiAgICAgIGVucXVldWVyCiAgICAgICAgICAuYXBwbHlJbXBhY3QoX2ltcGFjdHMuYWxsb3dJbnRlcm9wLmNyZWF0ZUltcGFjdChfZWxlbWVudEVudmlyb25tZW50KSk7CiAgICB9CgogICAgaWYgKCFlbnF1ZXVlci5xdWV1ZUlzRW1wdHkpIHJldHVybiBmYWxzZTsKCiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgb25RdWV1ZUNsb3NlZCgpIHt9CgogIC8vLyBBZGRzIHRoZSBpbXBhY3Qgb2YgW2NvbnN0YW50XSB0byBbaW1wYWN0QnVpbGRlcl0uCiAgdm9pZCBfY29tcHV0ZUltcGFjdEZvckNvbXBpbGVUaW1lQ29uc3RhbnQoCiAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQsIFdvcmxkSW1wYWN0QnVpbGRlciBpbXBhY3RCdWlsZGVyKSB7CiAgICBfY29tcHV0ZUltcGFjdEZvckNvbXBpbGVUaW1lQ29uc3RhbnRJbnRlcm5hbChjb25zdGFudCwgaW1wYWN0QnVpbGRlcik7CgogICAgZm9yIChDb25zdGFudFZhbHVlIGRlcGVuZGVuY3kgaW4gY29uc3RhbnQuZ2V0RGVwZW5kZW5jaWVzKCkpIHsKICAgICAgX2NvbXB1dGVJbXBhY3RGb3JDb21waWxlVGltZUNvbnN0YW50KGRlcGVuZGVuY3ksIGltcGFjdEJ1aWxkZXIpOwogICAgfQogIH0KCiAgdm9pZCBfY29tcHV0ZUltcGFjdEZvckNvbXBpbGVUaW1lQ29uc3RhbnRJbnRlcm5hbCgKICAgICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgV29ybGRJbXBhY3RCdWlsZGVyIGltcGFjdEJ1aWxkZXIpIHsKICAgIERhcnRUeXBlIHR5cGUgPSBjb25zdGFudC5nZXRUeXBlKF9jb21tb25FbGVtZW50cyk7CiAgICBfY29tcHV0ZUltcGFjdEZvckluc3RhbnRpYXRlZENvbnN0YW50VHlwZSh0eXBlLCBpbXBhY3RCdWlsZGVyKTsKCiAgICBpZiAoY29uc3RhbnQuaXNGdW5jdGlvbikgewogICAgICBGdW5jdGlvbkNvbnN0YW50VmFsdWUgZnVuY3Rpb24gPSBjb25zdGFudDsKICAgICAgaW1wYWN0QnVpbGRlcgogICAgICAgICAgLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3RhdGljVGVhck9mZihmdW5jdGlvbi5lbGVtZW50KSk7CiAgICB9IGVsc2UgaWYgKGNvbnN0YW50LmlzSW50ZXJjZXB0b3IpIHsKICAgICAgLy8gQW4gaW50ZXJjZXB0b3IgY29uc3RhbnQgcmVmZXJlbmNlcyB0aGUgY2xhc3MncyBwcm90b3R5cGUgY2hhaW4uCiAgICAgIEludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZSBpbnRlcmNlcHRvciA9IGNvbnN0YW50OwogICAgICBJbnRlcmZhY2VUeXBlIHR5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGludGVyY2VwdG9yLmNscyk7CiAgICAgIF9jb21wdXRlSW1wYWN0Rm9ySW5zdGFudGlhdGVkQ29uc3RhbnRUeXBlKHR5cGUsIGltcGFjdEJ1aWxkZXIpOwogICAgfSBlbHNlIGlmIChjb25zdGFudC5pc1R5cGUpIHsKICAgICAgRnVuY3Rpb25FbnRpdHkgaGVscGVyID0gX2NvbW1vbkVsZW1lbnRzLmNyZWF0ZVJ1bnRpbWVUeXBlOwogICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKAogICAgICAgICAgaGVscGVyLCBoZWxwZXIucGFyYW1ldGVyU3RydWN0dXJlLmNhbGxTdHJ1Y3R1cmUpKTsKICAgICAgX2JhY2tlbmRVc2FnZS5yZWdpc3RlckJhY2tlbmRGdW5jdGlvblVzZShoZWxwZXIpOwogICAgICBpbXBhY3RCdWlsZGVyCiAgICAgICAgICAucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLmluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLnR5cGVUeXBlKSk7CiAgICB9CiAgfQoKICB2b2lkIF9jb21wdXRlSW1wYWN0Rm9ySW5zdGFudGlhdGVkQ29uc3RhbnRUeXBlKAogICAgICBEYXJ0VHlwZSB0eXBlLCBXb3JsZEltcGFjdEJ1aWxkZXIgaW1wYWN0QnVpbGRlcikgewogICAgaWYgKHR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyVHlwZVVzZShuZXcgVHlwZVVzZS5pbnN0YW50aWF0aW9uKHR5cGUpKTsKICAgICAgaWYgKHR5cGUuZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMudHlwZUxpdGVyYWxDbGFzcykgewogICAgICAgIC8vIElmIHdlIHVzZSBhIHR5cGUgbGl0ZXJhbCBpbiBhIGNvbnN0YW50LCB0aGUgY29tcGlsZSB0aW1lCiAgICAgICAgLy8gY29uc3RhbnQgZW1pdHRlciB3aWxsIGdlbmVyYXRlIGEgY2FsbCB0byB0aGUgY3JlYXRlUnVudGltZVR5cGUKICAgICAgICAvLyBoZWxwZXIgc28gd2UgcmVnaXN0ZXIgYSB1c2Ugb2YgdGhhdC4KICAgICAgICBGdW5jdGlvbkVudGl0eSBoZWxwZXIgPSBfY29tbW9uRWxlbWVudHMuY3JlYXRlUnVudGltZVR5cGU7CiAgICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZSgKICAgICAgICAgICAgaGVscGVyLCBoZWxwZXIucGFyYW1ldGVyU3RydWN0dXJlLmNhbGxTdHJ1Y3R1cmUpKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgV29ybGRJbXBhY3QgcmVnaXN0ZXJVc2VkQ29uc3RhbnQoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgewogICAgV29ybGRJbXBhY3RCdWlsZGVySW1wbCBpbXBhY3RCdWlsZGVyID0gbmV3IFdvcmxkSW1wYWN0QnVpbGRlckltcGwoKTsKICAgIF9jb21wdXRlSW1wYWN0Rm9yQ29tcGlsZVRpbWVDb25zdGFudChjb25zdGFudCwgaW1wYWN0QnVpbGRlcik7CiAgICByZXR1cm4gaW1wYWN0QnVpbGRlcjsKICB9CgogIEBvdmVycmlkZQogIFdvcmxkSW1wYWN0IHJlZ2lzdGVyVXNlZEVsZW1lbnQoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgV29ybGRJbXBhY3RCdWlsZGVySW1wbCB3b3JsZEltcGFjdCA9IG5ldyBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsKCk7CiAgICBfY3VzdG9tRWxlbWVudHNBbmFseXNpcy5yZWdpc3RlclN0YXRpY1VzZShtZW1iZXIpOwoKICAgIGlmIChtZW1iZXIuaXNGdW5jdGlvbikgewogICAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiA9IG1lbWJlcjsKICAgICAgaWYgKGZ1bmN0aW9uLmlzRXh0ZXJuYWwpIHsKICAgICAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlID0KICAgICAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvblR5cGUoZnVuY3Rpb24pOwoKICAgICAgICB2YXIgYWxsUGFyYW1ldGVyVHlwZXMgPSA8RGFydFR5cGU+W10KICAgICAgICAgIC4uYWRkQWxsKGZ1bmN0aW9uVHlwZS5wYXJhbWV0ZXJUeXBlcykKICAgICAgICAgIC4uYWRkQWxsKGZ1bmN0aW9uVHlwZS5vcHRpb25hbFBhcmFtZXRlclR5cGVzKQogICAgICAgICAgLi5hZGRBbGwoZnVuY3Rpb25UeXBlLm5hbWVkUGFyYW1ldGVyVHlwZXMpOwogICAgICAgIGZvciAodmFyIHR5cGUgaW4gYWxsUGFyYW1ldGVyVHlwZXMpIHsKICAgICAgICAgIGlmICh0eXBlLmlzRnVuY3Rpb25UeXBlIHx8IHR5cGUuaXNUeXBlZGVmKSB7CiAgICAgICAgICAgIHZhciBjbG9zdXJlQ29udmVydGVyID0gX2NvbW1vbkVsZW1lbnRzLmNsb3N1cmVDb252ZXJ0ZXI7CiAgICAgICAgICAgIHdvcmxkSW1wYWN0LnJlZ2lzdGVyU3RhdGljVXNlKAogICAgICAgICAgICAgICAgbmV3IFN0YXRpY1VzZS5pbXBsaWNpdEludm9rZShjbG9zdXJlQ29udmVydGVyKSk7CiAgICAgICAgICAgIF9iYWNrZW5kVXNhZ2UucmVnaXN0ZXJCYWNrZW5kRnVuY3Rpb25Vc2UoY2xvc3VyZUNvbnZlcnRlcik7CiAgICAgICAgICAgIF9iYWNrZW5kVXNhZ2UucmVnaXN0ZXJHbG9iYWxGdW5jdGlvbkRlcGVuZGVuY3koY2xvc3VyZUNvbnZlcnRlcik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoZnVuY3Rpb24uaXNJbnN0YW5jZU1lbWJlcikgewogICAgICAgIENsYXNzRW50aXR5IGNscyA9IGZ1bmN0aW9uLmVuY2xvc2luZ0NsYXNzOwoKICAgICAgICBpZiAoZnVuY3Rpb24ubmFtZSA9PSBJZGVudGlmaWVycy5jYWxsICYmCiAgICAgICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuaXNHZW5lcmljQ2xhc3MoY2xzKSkgewogICAgICAgICAgd29ybGRJbXBhY3QuYWRkSW1wYWN0KF9yZWdpc3RlckNvbXB1dGVTaWduYXR1cmUoKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBfYmFja2VuZFVzYWdlLnJlZ2lzdGVyVXNlZE1lbWJlcihtZW1iZXIpOwoKICAgIGlmIChfY29tbW9uRWxlbWVudHMuaXNDcmVhdGVJbnZvY2F0aW9uTWlycm9ySGVscGVyKG1lbWJlcikpIHsKICAgICAgX3JlZ2lzdGVyQmFja2VuZEltcGFjdCh3b3JsZEltcGFjdCwgX2ltcGFjdHMubm9TdWNoTWV0aG9kU3VwcG9ydCk7CiAgICB9CgogICAgaWYgKF9lbGVtZW50RW52aXJvbm1lbnQuaXNEZWZlcnJlZExvYWRMaWJyYXJ5R2V0dGVyKG1lbWJlcikpIHsKICAgICAgLy8gVE9ETyhzaWd1cmRtKTogQ3JlYXRlIGEgZnVuY3Rpb24gcmVnaXN0ZXJMb2FkTGlicmFyeUFjY2Vzcy4KICAgICAgaWYgKCFfaXNMb2FkTGlicmFyeUZ1bmN0aW9uUmVzb2x2ZWQpIHsKICAgICAgICBfaXNMb2FkTGlicmFyeUZ1bmN0aW9uUmVzb2x2ZWQgPSB0cnVlOwogICAgICAgIF9yZWdpc3RlckJhY2tlbmRJbXBhY3Qod29ybGRJbXBhY3QsIF9pbXBhY3RzLmxvYWRMaWJyYXJ5KTsKICAgICAgfQogICAgfQoKICAgIGlmIChtZW1iZXIuaXNHZXR0ZXIgJiYgbWVtYmVyLm5hbWUgPT0gSWRlbnRpZmllcnMucnVudGltZVR5cGVfKSB7CiAgICAgIC8vIEVuYWJsZSBydW50aW1lIHR5cGUgc3VwcG9ydCBpZiB3ZSBkaXNjb3ZlciBhIGdldHRlciBjYWxsZWQKICAgICAgLy8gcnVudGltZVR5cGUuIFdlIGhhdmUgdG8gZW5hYmxlIHJ1bnRpbWUgdHlwZSBiZWZvcmUgaGl0dGluZyB0aGUKICAgICAgLy8gY29kZWdlbiwgc28gdGhhdCBjb25zdHJ1Y3RvcnMga25vdyB3aGV0aGVyIHRoZXkgbmVlZCB0byBnZW5lcmF0ZSBjb2RlCiAgICAgIC8vIGZvciBydW50aW1lIHR5cGUuCiAgICAgIC8vIFRPRE8oYWhlKTogUmVjb3JkIHByZWNpc2UgZGVwZW5kZW5jeSBoZXJlLgogICAgICB3b3JsZEltcGFjdC5hZGRJbXBhY3QoX3JlZ2lzdGVyUnVudGltZVR5cGUoKSk7CiAgICB9CgogICAgcmV0dXJuIHdvcmxkSW1wYWN0OwogIH0KCiAgLy8vIENhbGxlZCB0byByZWdpc3RlciB0aGF0IHRoZSBgcnVudGltZVR5cGVgIHByb3BlcnR5IGhhcyBiZWVuIGFjY2Vzc2VkLiBBbnkKICAvLy8gYmFja2VuZCBzcGVjaWZpYyBbV29ybGRJbXBhY3RdIG9mIHRoaXMgaXMgcmV0dXJuZWQuCiAgV29ybGRJbXBhY3QgX3JlZ2lzdGVyUnVudGltZVR5cGUoKSB7CiAgICBfYmFja2VuZFVzYWdlLnByb2Nlc3NCYWNrZW5kSW1wYWN0KF9pbXBhY3RzLnJ1bnRpbWVUeXBlU3VwcG9ydCk7CiAgICByZXR1cm4gX2ltcGFjdHMucnVudGltZVR5cGVTdXBwb3J0LmNyZWF0ZUltcGFjdChfZWxlbWVudEVudmlyb25tZW50KTsKICB9CgogIFdvcmxkSW1wYWN0IF9wcm9jZXNzQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsIGltcGFjdEJ1aWxkZXIgPSBuZXcgV29ybGRJbXBhY3RCdWlsZGVySW1wbCgpOwogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogRXh0cmFjdCBhbiBgaW1wbGVtZW50YXRpb25DbGFzc2VzT2YoLi4uKWAgZnVuY3Rpb24KICAgIC8vIGZvciB0aGVzZSBpbnRvIFtDb21tb25FbGVtZW50c10gb3IgW0JhY2tlbmRJbXBhY3RzXS4KICAgIC8vIFJlZ2lzdGVyIGFueSBoZWxwZXIgdGhhdCB3aWxsIGJlIG5lZWRlZCBieSB0aGUgYmFja2VuZC4KICAgIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmludENsYXNzIHx8CiAgICAgICAgY2xzID09IF9jb21tb25FbGVtZW50cy5kb3VibGVDbGFzcyB8fAogICAgICAgIGNscyA9PSBfY29tbW9uRWxlbWVudHMubnVtQ2xhc3MpIHsKICAgICAgX3JlZ2lzdGVyQmFja2VuZEltcGFjdChpbXBhY3RCdWlsZGVyLCBfaW1wYWN0cy5udW1DbGFzc2VzKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5saXN0Q2xhc3MgfHwKICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLnN0cmluZ0NsYXNzKSB7CiAgICAgIF9yZWdpc3RlckJhY2tlbmRJbXBhY3QoaW1wYWN0QnVpbGRlciwgX2ltcGFjdHMubGlzdE9yU3RyaW5nQ2xhc3Nlcyk7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuZnVuY3Rpb25DbGFzcykgewogICAgICBfcmVnaXN0ZXJCYWNrZW5kSW1wYWN0KGltcGFjdEJ1aWxkZXIsIF9pbXBhY3RzLmZ1bmN0aW9uQ2xhc3MpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLm1hcENsYXNzKSB7CiAgICAgIF9yZWdpc3RlckJhY2tlbmRJbXBhY3QoaW1wYWN0QnVpbGRlciwgX2ltcGFjdHMubWFwQ2xhc3MpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLnNldENsYXNzKSB7CiAgICAgIF9yZWdpc3RlckJhY2tlbmRJbXBhY3QoaW1wYWN0QnVpbGRlciwgX2ltcGFjdHMuc2V0Q2xhc3MpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmJvdW5kQ2xvc3VyZUNsYXNzKSB7CiAgICAgIF9yZWdpc3RlckJhY2tlbmRJbXBhY3QoaW1wYWN0QnVpbGRlciwgX2ltcGFjdHMuYm91bmRDbG9zdXJlQ2xhc3MpOwogICAgfSBlbHNlIGlmIChfbmF0aXZlRGF0YS5pc05hdGl2ZU9yRXh0ZW5kc05hdGl2ZShjbHMpKSB7CiAgICAgIF9yZWdpc3RlckJhY2tlbmRJbXBhY3QoaW1wYWN0QnVpbGRlciwgX2ltcGFjdHMubmF0aXZlT3JFeHRlbmRzQ2xhc3MpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLm1hcExpdGVyYWxDbGFzcykgewogICAgICBfcmVnaXN0ZXJCYWNrZW5kSW1wYWN0KGltcGFjdEJ1aWxkZXIsIF9pbXBhY3RzLm1hcExpdGVyYWxDbGFzcyk7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuc2V0TGl0ZXJhbENsYXNzKSB7CiAgICAgIF9yZWdpc3RlckJhY2tlbmRJbXBhY3QoaW1wYWN0QnVpbGRlciwgX2ltcGFjdHMuc2V0TGl0ZXJhbENsYXNzKTsKICAgIH0KICAgIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmNsb3N1cmVDbGFzcykgewogICAgICBfcmVnaXN0ZXJCYWNrZW5kSW1wYWN0KGltcGFjdEJ1aWxkZXIsIF9pbXBhY3RzLmNsb3N1cmVDbGFzcyk7CiAgICB9CiAgICBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5zdHJpbmdDbGFzcyB8fAogICAgICAgIGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNTdHJpbmdDbGFzcykgewogICAgICBfYWRkSW50ZXJjZXB0b3JzKF9jb21tb25FbGVtZW50cy5qc1N0cmluZ0NsYXNzLCBpbXBhY3RCdWlsZGVyKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5saXN0Q2xhc3MgfHwKICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcyB8fAogICAgICAgIGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNGaXhlZEFycmF5Q2xhc3MgfHwKICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzRXh0ZW5kYWJsZUFycmF5Q2xhc3MgfHwKICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzVW5tb2RpZmlhYmxlQXJyYXlDbGFzcykgewogICAgICBfYWRkSW50ZXJjZXB0b3JzKF9jb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3MsIGltcGFjdEJ1aWxkZXIpOwogICAgICBfYWRkSW50ZXJjZXB0b3JzKF9jb21tb25FbGVtZW50cy5qc011dGFibGVBcnJheUNsYXNzLCBpbXBhY3RCdWlsZGVyKTsKICAgICAgX2FkZEludGVyY2VwdG9ycyhfY29tbW9uRWxlbWVudHMuanNGaXhlZEFycmF5Q2xhc3MsIGltcGFjdEJ1aWxkZXIpOwogICAgICBfYWRkSW50ZXJjZXB0b3JzKF9jb21tb25FbGVtZW50cy5qc0V4dGVuZGFibGVBcnJheUNsYXNzLCBpbXBhY3RCdWlsZGVyKTsKICAgICAgX2FkZEludGVyY2VwdG9ycyhfY29tbW9uRWxlbWVudHMuanNVbm1vZGlmaWFibGVBcnJheUNsYXNzLCBpbXBhY3RCdWlsZGVyKTsKICAgICAgX3JlZ2lzdGVyQmFja2VuZEltcGFjdChpbXBhY3RCdWlsZGVyLCBfaW1wYWN0cy5saXN0Q2xhc3Nlcyk7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuaW50Q2xhc3MgfHwKICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzSW50Q2xhc3MpIHsKICAgICAgX2FkZEludGVyY2VwdG9ycyhfY29tbW9uRWxlbWVudHMuanNJbnRDbGFzcywgaW1wYWN0QnVpbGRlcik7CiAgICAgIF9hZGRJbnRlcmNlcHRvcnMoX2NvbW1vbkVsZW1lbnRzLmpzUG9zaXRpdmVJbnRDbGFzcywgaW1wYWN0QnVpbGRlcik7CiAgICAgIF9hZGRJbnRlcmNlcHRvcnMoX2NvbW1vbkVsZW1lbnRzLmpzVUludDMyQ2xhc3MsIGltcGFjdEJ1aWxkZXIpOwogICAgICBfYWRkSW50ZXJjZXB0b3JzKF9jb21tb25FbGVtZW50cy5qc1VJbnQzMUNsYXNzLCBpbXBhY3RCdWlsZGVyKTsKICAgICAgX2FkZEludGVyY2VwdG9ycyhfY29tbW9uRWxlbWVudHMuanNOdW1iZXJDbGFzcywgaW1wYWN0QnVpbGRlcik7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuZG91YmxlQ2xhc3MgfHwKICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzRG91YmxlQ2xhc3MpIHsKICAgICAgX2FkZEludGVyY2VwdG9ycyhfY29tbW9uRWxlbWVudHMuanNEb3VibGVDbGFzcywgaW1wYWN0QnVpbGRlcik7CiAgICAgIF9hZGRJbnRlcmNlcHRvcnMoX2NvbW1vbkVsZW1lbnRzLmpzTnVtYmVyQ2xhc3MsIGltcGFjdEJ1aWxkZXIpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmJvb2xDbGFzcyB8fAogICAgICAgIGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNCb29sQ2xhc3MpIHsKICAgICAgX2FkZEludGVyY2VwdG9ycyhfY29tbW9uRWxlbWVudHMuanNCb29sQ2xhc3MsIGltcGFjdEJ1aWxkZXIpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLm51bGxDbGFzcyB8fAogICAgICAgIGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNOdWxsQ2xhc3MpIHsKICAgICAgX2FkZEludGVyY2VwdG9ycyhfY29tbW9uRWxlbWVudHMuanNOdWxsQ2xhc3MsIGltcGFjdEJ1aWxkZXIpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLm51bUNsYXNzIHx8CiAgICAgICAgY2xzID09IF9jb21tb25FbGVtZW50cy5qc051bWJlckNsYXNzKSB7CiAgICAgIF9hZGRJbnRlcmNlcHRvcnMoX2NvbW1vbkVsZW1lbnRzLmpzSW50Q2xhc3MsIGltcGFjdEJ1aWxkZXIpOwogICAgICBfYWRkSW50ZXJjZXB0b3JzKF9jb21tb25FbGVtZW50cy5qc1Bvc2l0aXZlSW50Q2xhc3MsIGltcGFjdEJ1aWxkZXIpOwogICAgICBfYWRkSW50ZXJjZXB0b3JzKF9jb21tb25FbGVtZW50cy5qc1VJbnQzMkNsYXNzLCBpbXBhY3RCdWlsZGVyKTsKICAgICAgX2FkZEludGVyY2VwdG9ycyhfY29tbW9uRWxlbWVudHMuanNVSW50MzFDbGFzcywgaW1wYWN0QnVpbGRlcik7CiAgICAgIF9hZGRJbnRlcmNlcHRvcnMoX2NvbW1vbkVsZW1lbnRzLmpzRG91YmxlQ2xhc3MsIGltcGFjdEJ1aWxkZXIpOwogICAgICBfYWRkSW50ZXJjZXB0b3JzKF9jb21tb25FbGVtZW50cy5qc051bWJlckNsYXNzLCBpbXBhY3RCdWlsZGVyKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRPYmplY3RDbGFzcykgewogICAgICBfYWRkSW50ZXJjZXB0b3JzKF9jb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRPYmplY3RDbGFzcywgaW1wYWN0QnVpbGRlcik7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNQbGFpbkphdmFTY3JpcHRPYmplY3RDbGFzcykgewogICAgICBfYWRkSW50ZXJjZXB0b3JzKAogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzUGxhaW5KYXZhU2NyaXB0T2JqZWN0Q2xhc3MsIGltcGFjdEJ1aWxkZXIpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzVW5rbm93bkphdmFTY3JpcHRPYmplY3RDbGFzcykgewogICAgICBfYWRkSW50ZXJjZXB0b3JzKAogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzVW5rbm93bkphdmFTY3JpcHRPYmplY3RDbGFzcywgaW1wYWN0QnVpbGRlcik7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNKYXZhU2NyaXB0RnVuY3Rpb25DbGFzcykgewogICAgICBfYWRkSW50ZXJjZXB0b3JzKAogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzSmF2YVNjcmlwdEZ1bmN0aW9uQ2xhc3MsIGltcGFjdEJ1aWxkZXIpOwogICAgfSBlbHNlIGlmIChfbmF0aXZlRGF0YS5pc05hdGl2ZU9yRXh0ZW5kc05hdGl2ZShjbHMpKSB7CiAgICAgIF9pbnRlcmNlcHRvckRhdGEuYWRkSW50ZXJjZXB0b3JzRm9yTmF0aXZlQ2xhc3NNZW1iZXJzKGNscyk7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNJbmRleGluZ0JlaGF2aW9ySW50ZXJmYWNlKSB7CiAgICAgIF9yZWdpc3RlckJhY2tlbmRJbXBhY3QoaW1wYWN0QnVpbGRlciwgX2ltcGFjdHMuanNJbmRleGluZ0JlaGF2aW9yKTsKICAgIH0KCiAgICBfY3VzdG9tRWxlbWVudHNBbmFseXNpcy5yZWdpc3Rlckluc3RhbnRpYXRlZENsYXNzKGNscyk7CiAgICByZXR1cm4gaW1wYWN0QnVpbGRlcjsKICB9CgogIEBvdmVycmlkZQogIFdvcmxkSW1wYWN0IHJlZ2lzdGVySW1wbGVtZW50ZWRDbGFzcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBfcHJvY2Vzc0NsYXNzKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBXb3JsZEltcGFjdCByZWdpc3Rlckluc3RhbnRpYXRlZENsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgX2ZpZWxkQW5hbHlzaXMucmVnaXN0ZXJJbnN0YW50aWF0ZWRDbGFzcyhjbHMpOwogICAgcmV0dXJuIF9wcm9jZXNzQ2xhc3MoY2xzKTsKICB9CgogIC8vLyBDb21wdXRlIHRoZSBbV29ybGRJbXBhY3RdIGZvciBiYWNrZW5kIGhlbHBlciBtZXRob2RzLgogIFdvcmxkSW1wYWN0IGNvbXB1dGVIZWxwZXJzSW1wYWN0KCkgewogICAgYXNzZXJ0KF9jb21tb25FbGVtZW50cy5pbnRlcmNlcHRvcnNMaWJyYXJ5ICE9IG51bGwpOwogICAgV29ybGRJbXBhY3RCdWlsZGVySW1wbCBpbXBhY3RCdWlsZGVyID0gbmV3IFdvcmxkSW1wYWN0QnVpbGRlckltcGwoKTsKICAgIC8vIFRPRE8obmdlb2ZmcmF5KTogTm90IGVucXVldWluZyB0aG9zZSB0d28gY2xhc3NlcyBjdXJyZW50bHkgbWFrZQogICAgLy8gdGhlIGNvbXBpbGVyIHBvdGVudGlhbGx5IGNyYXNoLiBIb3dldmVyLCBhbnkgcmVhc29uYWJsZSBwcm9ncmFtCiAgICAvLyB3aWxsIGluc3RhbnRpYXRlIHRob3NlIHR3byBjbGFzc2VzLgogICAgX2FkZEludGVyY2VwdG9ycyhfY29tbW9uRWxlbWVudHMuanNCb29sQ2xhc3MsIGltcGFjdEJ1aWxkZXIpOwogICAgX2FkZEludGVyY2VwdG9ycyhfY29tbW9uRWxlbWVudHMuanNOdWxsQ2xhc3MsIGltcGFjdEJ1aWxkZXIpOwogICAgaWYgKF9vcHRpb25zLmRpc2FibGVSdGlPcHRpbWl6YXRpb24pIHsKICAgICAgLy8gV2hlbiBSVEkgb3B0aW1pemF0aW9uIGlzIGRpc2FibGVkIHdlIGFsd2F5cyBuZWVkIGFsbCBSVEkgaGVscGVycywgc28KICAgICAgLy8gcmVnaXN0ZXIgdGhlc2UgaGVyZS4KICAgICAgX3JlZ2lzdGVyQmFja2VuZEltcGFjdChpbXBhY3RCdWlsZGVyLCBfaW1wYWN0cy5jb21wdXRlU2lnbmF0dXJlKTsKICAgICAgX3JlZ2lzdGVyQmFja2VuZEltcGFjdChpbXBhY3RCdWlsZGVyLCBfaW1wYWN0cy5nZXRSdW50aW1lVHlwZUFyZ3VtZW50KTsKICAgIH0KCiAgICBpZiAoX29wdGlvbnMuZXhwZXJpbWVudENhbGxJbnN0cnVtZW50YXRpb24pIHsKICAgICAgX3JlZ2lzdGVyQmFja2VuZEltcGFjdChpbXBhY3RCdWlsZGVyLCBfaW1wYWN0cy50cmFjZUhlbHBlcik7CiAgICB9CgogICAgaWYgKF9vcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpIHsKICAgICAgX3JlZ2lzdGVyQmFja2VuZEltcGFjdChpbXBhY3RCdWlsZGVyLCBfaW1wYWN0cy5ydGlBZGRSdWxlcyk7CiAgICB9CgogICAgX3JlZ2lzdGVyQmFja2VuZEltcGFjdChpbXBhY3RCdWlsZGVyLCBfaW1wYWN0cy5hc3NlcnRVbnJlYWNoYWJsZSk7CiAgICBfcmVnaXN0ZXJDaGVja2VkTW9kZUhlbHBlcnMoaW1wYWN0QnVpbGRlcik7CiAgICByZXR1cm4gaW1wYWN0QnVpbGRlcjsKICB9CgogIHZvaWQgX3JlZ2lzdGVyQ2hlY2tlZE1vZGVIZWxwZXJzKFdvcmxkSW1wYWN0QnVpbGRlciBpbXBhY3RCdWlsZGVyKSB7CiAgICAvLyBXZSByZWdpc3RlciBhbGwgdGhlIF9jb21tb25FbGVtZW50cyBpbiB0aGUgcmVzb2x1dGlvbiBxdWV1ZS4KICAgIC8vIFRPRE8oMTMxNTUpOiBGaW5kIGEgd2F5IHRvIHJlZ2lzdGVyIGZld2VyIF9jb21tb25FbGVtZW50cy4KICAgIExpc3Q8RnVuY3Rpb25FbnRpdHk+IHN0YXRpY1VzZXMgPSA8RnVuY3Rpb25FbnRpdHk+W107CiAgICBmb3IgKENoZWNrZWRNb2RlSGVscGVyIGhlbHBlciBpbiBDaGVja2VkTW9kZUhlbHBlcnMuaGVscGVycykgewogICAgICBzdGF0aWNVc2VzLmFkZChoZWxwZXIuZ2V0U3RhdGljVXNlKF9jb21tb25FbGVtZW50cykuZWxlbWVudCk7CiAgICB9CiAgICBfcmVnaXN0ZXJCYWNrZW5kSW1wYWN0KAogICAgICAgIGltcGFjdEJ1aWxkZXIsIG5ldyBCYWNrZW5kSW1wYWN0KGdsb2JhbFVzZXM6IHN0YXRpY1VzZXMpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgbG9nU3VtbWFyeSh2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSkpIHsKICAgIF9uYXRpdmVFbnF1ZXVlci5sb2dTdW1tYXJ5KGxvZyk7CiAgfQp9CoHYAE5OPAEwATBMIyAkITohLz03J0IeHh0kKCAwJwE8MywBIjEpIQElMSsBNEIBMicBMS8BHhUgHBUYHRoiJBwbHwEfOjkwBAFNKyNJMAQBDEFJQBJORiY8BhoEAQwuQEUEASxDSAQBDDQ5FEEGFzAGBAFNPkZPKyE8RiRCBh9JDSRKBhcEAT4wQkcEAQwUTyw8KgZKKR47KAZDN0sEAQxOTi0HUBc6MAEtSSsdJiAhPQgGKi06PUgcSy8GASpBD1EGAS4BEQQBDBoBOC1CSwFDRwYEATVCN0QBHzEUTSlJN01GIkFCPTgUUQYEATI5IUY+REowQ0Q/CAYEAQw9SUMaBAEMOUc3AR0oISQ7AS0wODYuN0UrQUhOEwwKCCczATE3PgoIBi4BQkkGAUNFLS9DCAYBRkRITxs0NQYBGAQBUDonRUoEAS9JTzw/Ky4rQjMuSzdFMkAyQDtJO0w5RzlHBi9EBi4wRjMvNDk7RUxKT1FDMi1DS0ZGRjUwRkYzLkQzLkQyMENLRkZGRkFQRhhISBhKQxhFO0JFSgYBPBoEAQw6HwQBDDszHwQBPCc5SUdHK0JCK04eSE4GATJDBgElQwYBRzAaBAFHREI6Q0QGHEMEAQwuJQQCAThwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL3Jlc29sdXRpb25fbGlzdGVuZXIuZGFydEZzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfcmVzb2x1dGlvbi5kYXJ0wAC28S8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGpzX2JhY2tlbmQucnVudGltZV90eXBlc19yZXNvbHV0aW9uOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnIHNob3cgSWRlbnRpZmllcnM7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgQ29tbW9uRWxlbWVudHMsIEVsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pci9ydW50aW1lX3R5cGVfYW5hbHlzaXMuZGFydCc7CmltcG9ydCAnLi4va2VybmVsL2tlbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jbGFzc19oaWVyYXJjaHkuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2xhc3Nfc2V0LmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2ZlYXR1cmUuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCc7CmltcG9ydCAnLi4vd29ybGQuZGFydCc7CmltcG9ydCAnYmFja2VuZF91c2FnZS5kYXJ0JzsKCmFic3RyYWN0IGNsYXNzIFJ0aU5vZGUgewogIEVudGl0eSBnZXQgZW50aXR5OwogIFNldDxSdGlOb2RlPiBfZGVwZW5kZW5jaWVzOwogIGludCBfdGVzdFN0YXRlID0gMDsKICBpbnQgX2xpdGVyYWxTdGF0ZSA9IDA7CgogIEl0ZXJhYmxlPFJ0aU5vZGU+IGdldCBkZXBlbmRlbmNpZXMgPT4gX2RlcGVuZGVuY2llcyA/PyBjb25zdCA8UnRpTm9kZT5bXTsKCiAgYm9vbCBnZXQgaGFzRGlyZWN0VGVzdCA9PiBfdGVzdFN0YXRlICYgMSAhPSAwOwogIGJvb2wgZ2V0IGhhc0luZGlyZWN0VGVzdCA9PiBfdGVzdFN0YXRlICYgMiAhPSAwOwoKICBib29sIGdldCBoYXNUZXN0ID0+IF90ZXN0U3RhdGUgIT0gMDsKCiAgYm9vbCBnZXQgaGFzRGlyZWN0TGl0ZXJhbCA9PiBfbGl0ZXJhbFN0YXRlICYgMSAhPSAwOwogIGJvb2wgZ2V0IGhhc0luZGlyZWN0TGl0ZXJhbCA9PiBfbGl0ZXJhbFN0YXRlICYgMiAhPSAwOwoKICBib29sIGdldCBoYXNMaXRlcmFsID0+IF9saXRlcmFsU3RhdGUgIT0gMDsKCiAgYm9vbCBnZXQgaGFzVXNlID0+IGhhc1Rlc3QgfHwgaGFzTGl0ZXJhbDsKCiAgLy8vIFJlZ2lzdGVyIHRoYXQgaWYgW2VudGl0eV0gbmVlZHMgdHlwZSBhcmd1bWVudHMgdGhlbiBzbyBkb2VzIGBub2RlLmVudGl0eWAuCiAgYm9vbCBhZGREZXBlbmRlbmN5KFJ0aU5vZGUgbm9kZSkgewogICAgaWYgKGVudGl0eSA9PSBub2RlLmVudGl0eSkgewogICAgICAvLyBTa2lwIHRyaXZpYWwgZGVwZW5kZW5jaWVzOyBpZiBbZW50aXR5XSBuZWVkcyB0eXBlIGFyZ3VtZW50cyBzbyBkb2VzCiAgICAgIC8vIFtlbnRpdHldIQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBfZGVwZW5kZW5jaWVzID8/PSBuZXcgU2V0PFJ0aU5vZGU+KCk7CiAgICByZXR1cm4gX2RlcGVuZGVuY2llcy5hZGQobm9kZSk7CiAgfQoKICB2b2lkIG1hcmtUZXN0KHtib29sIGRpcmVjdH0pIHsKICAgIHNldFRlc3RTdGF0ZShkaXJlY3QgPyAxIDogMik7CiAgfQoKICB2b2lkIG1hcmtEaXJlY3RUZXN0KCkgewogICAgc2V0VGVzdFN0YXRlKDEpOwogIH0KCiAgdm9pZCBtYXJrSW5kaXJlY3RUZXN0KCkgewogICAgc2V0VGVzdFN0YXRlKDIpOwogIH0KCiAgdm9pZCBzZXRUZXN0U3RhdGUoaW50IHZhbHVlKSB7CiAgICBpZiAoX3Rlc3RTdGF0ZSAhPSB2YWx1ZSkgewogICAgICBpZiAoX3Rlc3RTdGF0ZSA9PSAwKSB7CiAgICAgICAgX3Rlc3RTdGF0ZSB8PSB2YWx1ZTsKICAgICAgICBpZiAoX2RlcGVuZGVuY2llcyAhPSBudWxsKSB7CiAgICAgICAgICBmb3IgKFJ0aU5vZGUgbm9kZSBpbiBfZGVwZW5kZW5jaWVzKSB7CiAgICAgICAgICAgIG5vZGUubWFya0luZGlyZWN0VGVzdCgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBfdGVzdFN0YXRlID0gdmFsdWU7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgbWFya0RpcmVjdExpdGVyYWwoKSB7CiAgICBzZXRMaXRlcmFsU3RhdGUoMSk7CiAgfQoKICB2b2lkIG1hcmtJbmRpcmVjdExpdGVyYWwoKSB7CiAgICBzZXRMaXRlcmFsU3RhdGUoMik7CiAgfQoKICB2b2lkIHNldExpdGVyYWxTdGF0ZShpbnQgdmFsdWUpIHsKICAgIGlmIChfbGl0ZXJhbFN0YXRlICE9IHZhbHVlKSB7CiAgICAgIGlmIChfbGl0ZXJhbFN0YXRlID09IDApIHsKICAgICAgICBfbGl0ZXJhbFN0YXRlIHw9IHZhbHVlOwogICAgICAgIGlmIChfZGVwZW5kZW5jaWVzICE9IG51bGwpIHsKICAgICAgICAgIGZvciAoUnRpTm9kZSBub2RlIGluIF9kZXBlbmRlbmNpZXMpIHsKICAgICAgICAgICAgbm9kZS5tYXJrSW5kaXJlY3RMaXRlcmFsKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIF9saXRlcmFsU3RhdGUgPSB2YWx1ZTsKICAgICAgfQogICAgfQogIH0KCiAgU3RyaW5nIGdldCBraW5kOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZShraW5kKTsKICAgIHNiLndyaXRlKCc6Jyk7CiAgICBzYi53cml0ZShlbnRpdHkpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgpjbGFzcyBDbGFzc05vZGUgZXh0ZW5kcyBSdGlOb2RlIHsKICBmaW5hbCBDbGFzc0VudGl0eSBjbHM7CgogIENsYXNzTm9kZSh0aGlzLmNscyk7CgogIEBvdmVycmlkZQogIEVudGl0eSBnZXQgZW50aXR5ID0+IGNsczsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBraW5kID0+ICdjbGFzcyc7Cn0KCmNsYXNzIE1ldGhvZE5vZGUgZXh0ZW5kcyBSdGlOb2RlIHsKICBmaW5hbCBFbnRpdHkgZnVuY3Rpb247CiAgZmluYWwgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZTsKICBmaW5hbCBib29sIGlzQ2FsbFRhcmdldDsKICBmaW5hbCBOYW1lIGluc3RhbmNlTmFtZTsKICBmaW5hbCBib29sIGlzTm9TdWNoTWV0aG9kOwoKICBNZXRob2ROb2RlKHRoaXMuZnVuY3Rpb24sIHRoaXMucGFyYW1ldGVyU3RydWN0dXJlLAogICAgICB7dGhpcy5pc0NhbGxUYXJnZXQsIHRoaXMuaW5zdGFuY2VOYW1lLCB0aGlzLmlzTm9TdWNoTWV0aG9kOiBmYWxzZX0pOwoKICBAb3ZlcnJpZGUKICBFbnRpdHkgZ2V0IGVudGl0eSA9PiBmdW5jdGlvbjsKCiAgYm9vbCBzZWxlY3RvckFwcGxpZXMoU2VsZWN0b3Igc2VsZWN0b3IpIHsKICAgIGlmIChpc05vU3VjaE1ldGhvZCkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gKGlzQ2FsbFRhcmdldCAmJiBzZWxlY3Rvci5pc0Nsb3N1cmVDYWxsIHx8CiAgICAgICAgICAgIGluc3RhbmNlTmFtZSA9PSBzZWxlY3Rvci5tZW1iZXJOYW1lKSAmJgogICAgICAgIHNlbGVjdG9yLmNhbGxTdHJ1Y3R1cmUuc2lnbmF0dXJlQXBwbGllcyhwYXJhbWV0ZXJTdHJ1Y3R1cmUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBraW5kID0+ICdtZXRob2QnOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnTWV0aG9kTm9kZSgnKTsKICAgIHNiLndyaXRlKCdmdW5jdGlvbj0kZnVuY3Rpb24nKTsKICAgIHNiLndyaXRlKCcscGFyYW1ldGVyU3RydWN0dXJlPSRwYXJhbWV0ZXJTdHJ1Y3R1cmUnKTsKICAgIHNiLndyaXRlKCcsaXNDYWxsVGFyZ2V0PSRpc0NhbGxUYXJnZXQnKTsKICAgIHNiLndyaXRlKCcsaW5zdGFuY2VOYW1lPSRpbnN0YW5jZU5hbWUnKTsKICAgIHNiLndyaXRlKCcpJyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCmNsYXNzIFR5cGVWYXJpYWJsZVRlc3RzIHsKICBMaXN0PFJ0aU5vZGU+IF9ub2RlcyA9IDxSdGlOb2RlPltdOwogIE1hcDxDbGFzc0VudGl0eSwgQ2xhc3NOb2RlPiBfY2xhc3NlcyA9IDxDbGFzc0VudGl0eSwgQ2xhc3NOb2RlPnt9OwogIE1hcDxFbnRpdHksIE1ldGhvZE5vZGU+IF9tZXRob2RzID0gPEVudGl0eSwgTWV0aG9kTm9kZT57fTsKICBNYXA8U2VsZWN0b3IsIFNldDxFbnRpdHk+PiBfYXBwbGllZFNlbGVjdG9yTWFwOwogIE1hcDxHZW5lcmljSW5zdGFudGlhdGlvbiwgU2V0PEVudGl0eT4+IF9pbnN0YW50aWF0aW9uTWFwOwoKICAvLy8gQWxsIGV4cGxpY2l0IGlzLXRlc3RzLgogIGZpbmFsIFNldDxEYXJ0VHlwZT4gZXhwbGljaXRJc0NoZWNrczsKCiAgLy8vIEFsbCBpbXBsaWNpdCBpcy10ZXN0cy4KICBmaW5hbCBTZXQ8RGFydFR5cGU+IGltcGxpY2l0SXNDaGVja3MgPSBuZXcgU2V0PERhcnRUeXBlPigpOwoKICBUeXBlVmFyaWFibGVUZXN0cygKICAgICAgRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIERhcnRUeXBlcyB0eXBlcywKICAgICAgQnVpbHRXb3JsZCB3b3JsZCwKICAgICAgU2V0PEdlbmVyaWNJbnN0YW50aWF0aW9uPiBnZW5lcmljSW5zdGFudGlhdGlvbnMsCiAgICAgIHtib29sIGZvclJ0aU5lZWRzOiB0cnVlfSkKICAgICAgOiBleHBsaWNpdElzQ2hlY2tzID0gbmV3IFNldDxEYXJ0VHlwZT4uZnJvbSh3b3JsZC5pc0NoZWNrcykgewogICAgX3NldHVwRGVwZW5kZW5jaWVzKAogICAgICAgIGVsZW1lbnRFbnZpcm9ubWVudCwgY29tbW9uRWxlbWVudHMsIHdvcmxkLCBnZW5lcmljSW5zdGFudGlhdGlvbnMsCiAgICAgICAgZm9yUnRpTmVlZHM6IGZvclJ0aU5lZWRzKTsKICAgIF9wcm9wYWdhdGVUZXN0cyhjb21tb25FbGVtZW50cywgZWxlbWVudEVudmlyb25tZW50LCB3b3JsZCk7CiAgICBpZiAoZm9yUnRpTmVlZHMpIHsKICAgICAgX3Byb3BhZ2F0ZUxpdGVyYWxzKGVsZW1lbnRFbnZpcm9ubWVudCwgd29ybGQpOwogICAgfQogICAgX2NvbGxlY3RSZXN1bHRzKGNvbW1vbkVsZW1lbnRzLCBlbGVtZW50RW52aXJvbm1lbnQsIHR5cGVzLCB3b3JsZCwKICAgICAgICBmb3JSdGlOZWVkczogZm9yUnRpTmVlZHMpOwogIH0KCiAgLy8vIENsYXNzZXMgd2hvc2UgdHlwZSB2YXJpYWJsZXMgYXJlIGV4cGxpY2l0bHkgb3IgaW1wbGljaXRseSB1c2VkIGluCiAgLy8vIGlzLXRlc3RzLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UgYEFgIGFuZCBgQmAgaW46CiAgLy8vCiAgLy8vICAgICBjbGFzcyBBPFQ+IHsKICAvLy8gICAgICAgbShvKSA9PiBvIGlzIFQ7CiAgLy8vICAgICB9CiAgLy8vICAgICBjbGFzcyBCPFM+IHsKICAvLy8gICAgICAgbShvKSA9PiBuZXcgQTxTPigpLm0obyk7CiAgLy8vICAgICB9CiAgLy8vICAgICBtYWluKCkgPT4gbmV3IEI8aW50PigpLm0oMCk7CiAgLy8vCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBjbGFzc1Rlc3RzRm9yVGVzdGluZyA9PgogICAgICBfY2xhc3Nlcy52YWx1ZXMud2hlcmUoKG4pID0+IG4uaGFzVGVzdCkubWFwKChuKSA9PiBuLmNscykudG9TZXQoKTsKCiAgLy8vIENsYXNzZXMgdGhhdCBleHBsaWNpdGx5IHVzZSB0aGVpciB0eXBlIHZhcmlhYmxlcyBpbiBpcy10ZXN0cy4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGBBYCBpbjoKICAvLy8KICAvLy8gICAgIGNsYXNzIEE8VD4gewogIC8vLyAgICAgICBtKG8pID0+IG8gaXMgVDsKICAvLy8gICAgIH0KICAvLy8gICAgIG1haW4oKSA9PiBuZXcgQTxpbnQ+KCkubSgwKTsKICAvLy8KICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gZ2V0IGRpcmVjdENsYXNzVGVzdHNGb3JUZXN0aW5nID0+CiAgICAgIF9jbGFzc2VzLnZhbHVlcy53aGVyZSgobikgPT4gbi5oYXNEaXJlY3RUZXN0KS5tYXAoKG4pID0+IG4uY2xzKS50b1NldCgpOwoKICAvLy8gTWV0aG9kcyB0aGF0IGV4cGxpY2l0bHkgb3IgaW1wbGljaXRseSB1c2UgdGhlaXIgdHlwZSB2YXJpYWJsZXMgaW4KICAvLy8gaXMtdGVzdHMuCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBgbTFgIGFuZCBgbTJgaW46CiAgLy8vCiAgLy8vICAgICBtMTxUPihvKSA9PiBvIGlzIFQ7CiAgLy8vICAgICBtMjxTPihvKSA9PiBtMTxTPihvKTsKICAvLy8gICAgIG1haW4oKSA9PiBtMjxpbnQ+KDApOwogIC8vLwogIEl0ZXJhYmxlPEVudGl0eT4gZ2V0IG1ldGhvZFRlc3RzRm9yVGVzdGluZyA9PgogICAgICBfbWV0aG9kcy52YWx1ZXMud2hlcmUoKG4pID0+IG4uaGFzVGVzdCkubWFwKChuKSA9PiBuLmZ1bmN0aW9uKS50b1NldCgpOwoKICAvLy8gTWV0aG9kcyB0aGF0IGV4cGxpY2l0bHkgdXNlIHRoZWlyIHR5cGUgdmFyaWFibGVzIGluIGlzLXRlc3RzLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UgYG1gIGluOgogIC8vLwogIC8vLyAgICAgbTxUPihvKSA9PiBvIGlzIFQ7CiAgLy8vICAgICBtYWluKCkgPT4gbTxpbnQ+KDApOwogIC8vLwogIEl0ZXJhYmxlPEVudGl0eT4gZ2V0IGRpcmVjdE1ldGhvZFRlc3RzRm9yVGVzdGluZyA9PiBfbWV0aG9kcy52YWx1ZXMKICAgICAgLndoZXJlKChuKSA9PiBuLmhhc0RpcmVjdFRlc3QpCiAgICAgIC5tYXAoKG4pID0+IG4uZnVuY3Rpb24pCiAgICAgIC50b1NldCgpOwoKICAvLy8gVGhlIGVudGl0aWVzIHRoYXQgbmVlZCB0eXBlIGFyZ3VtZW50cyBhdCBydW50aW1lIGlmIHRoZSAna2V5IGVudGl0eScgbmVlZHMKICAvLy8gdHlwZSBhcmd1bWVudHMuCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZToKICAvLy8KICAvLy8gICAgIGNsYXNzIEE8VD4gewogIC8vLyAgICAgICBtKCkgPT4gbmV3IEI8VD4oKTsKICAvLy8gICAgIH0KICAvLy8gICAgIGNsYXNzIEI8VD4ge30KICAvLy8gICAgIG1haW4oKSA9PiBuZXcgQTxTdHJpbmc+KCkubSgpIGlzIEI8aW50PjsKICAvLy8KICAvLy8gSGVyZSBgQWAgbmVlZHMgdHlwZSBhcmd1bWVudHMgYXQgcnVudGltZSBiZWNhdXNlIHRoZSBrZXkgZW50aXR5IGBCYCBuZWVkcwogIC8vLyBpdCBpbiBvcmRlciB0byBnZW5lcmF0ZSB0aGUgY2hlY2sgYWdhaW5zdCBgQjxpbnQ+YC4KICAvLy8KICAvLy8gVGhpcyBjYW4gYWxzbyBpbnZvbHZlIGdlbmVyaWMgbWV0aG9kczoKICAvLy8KICAvLy8gICAgY2xhc3MgQTxUPiB7fQogIC8vLyAgICBtZXRob2Q8VD4oKSA9PiBuZXcgQTxUPigpOwogIC8vLyAgICBtYWluKCkgPT4gbWV0aG9kPGludD4oKSBpcyBBPGludD4oKTsKICAvLy8KICAvLy8gSGVyZSBgbWV0aG9kYCBuZWVkIHR5cGUgYXJndW1lbnRzIGF0IHJ1bnRpbWUgYmVjYXVzZSB0aGUga2V5IGVudGl0eSBgQWAKICAvLy8gbmVlZHMgaXQgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdGhlIGNoZWNrIGFnYWluc3QgYEE8aW50PmAuCiAgLy8vCiAgSXRlcmFibGU8RW50aXR5PiBnZXRUeXBlQXJndW1lbnREZXBlbmRlbmNpZXMoRW50aXR5IGVudGl0eSkgewogICAgSXRlcmFibGU8UnRpTm9kZT4gZGVwZW5kZW5jaWVzOwogICAgaWYgKGVudGl0eSBpcyBDbGFzc0VudGl0eSkgewogICAgICBkZXBlbmRlbmNpZXMgPSBfY2xhc3Nlc1tlbnRpdHldPy5kZXBlbmRlbmNpZXM7CiAgICB9IGVsc2UgewogICAgICBkZXBlbmRlbmNpZXMgPSBfbWV0aG9kc1tlbnRpdHldPy5kZXBlbmRlbmNpZXM7CiAgICB9CiAgICBpZiAoZGVwZW5kZW5jaWVzID09IG51bGwpIHJldHVybiBjb25zdCA8RW50aXR5PltdOwogICAgcmV0dXJuIGRlcGVuZGVuY2llcy5tYXAoKG4pID0+IG4uZW50aXR5KS50b1NldCgpOwogIH0KCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBzZWxlY3RvciB0aGF0IGFwcGxpZXMgdG8gZ2VuZXJpYyBbdGFyZ2V0c10uCiAgdm9pZCBmb3JFYWNoQXBwbGllZFNlbGVjdG9yKHZvaWQgZihTZWxlY3RvciBzZWxlY3RvciwgU2V0PEVudGl0eT4gdGFyZ2V0cykpIHsKICAgIF9hcHBsaWVkU2VsZWN0b3JNYXAuZm9yRWFjaChmKTsKICB9CgogIC8vLyBDYWxscyBbZl0gZm9yIGVhY2ggZ2VuZXJpYyBpbnN0YW50aWF0aW9uIHRoYXQgYXBwbGllcyB0byBnZW5lcmljCiAgLy8vIGNsb3N1cml6ZWQgW3RhcmdldHNdLgogIHZvaWQgZm9yRWFjaEdlbmVyaWNJbnN0YW50aWF0aW9uKAogICAgICB2b2lkIGYoR2VuZXJpY0luc3RhbnRpYXRpb24gaW5zdGFudGlhdGlvbiwgU2V0PEVudGl0eT4gdGFyZ2V0cykpIHsKICAgIF9pbnN0YW50aWF0aW9uTWFwPy5mb3JFYWNoKGYpOwogIH0KCiAgQ2xhc3NOb2RlIF9nZXRDbGFzc05vZGUoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gX2NsYXNzZXMucHV0SWZBYnNlbnQoY2xzLCAoKSB7CiAgICAgIENsYXNzTm9kZSBub2RlID0gbmV3IENsYXNzTm9kZShjbHMpOwogICAgICBfbm9kZXMuYWRkKG5vZGUpOwogICAgICByZXR1cm4gbm9kZTsKICAgIH0pOwogIH0KCiAgTWV0aG9kTm9kZSBfZ2V0TWV0aG9kTm9kZShFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50LAogICAgICBCdWlsdFdvcmxkIHdvcmxkLCBFbnRpdHkgZnVuY3Rpb24pIHsKICAgIHJldHVybiBfbWV0aG9kcy5wdXRJZkFic2VudChmdW5jdGlvbiwgKCkgewogICAgICBNZXRob2ROb2RlIG5vZGU7CiAgICAgIGlmIChmdW5jdGlvbiBpcyBGdW5jdGlvbkVudGl0eSkgewogICAgICAgIE5hbWUgaW5zdGFuY2VOYW1lOwogICAgICAgIGJvb2wgaXNDYWxsVGFyZ2V0OwogICAgICAgIGJvb2wgaXNOb1N1Y2hNZXRob2Q7CiAgICAgICAgaWYgKGZ1bmN0aW9uLmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgICAgIGlzQ2FsbFRhcmdldCA9IHdvcmxkLmNsb3N1cml6ZWRNZW1iZXJzLmNvbnRhaW5zKGZ1bmN0aW9uKTsKICAgICAgICAgIGluc3RhbmNlTmFtZSA9IGZ1bmN0aW9uLm1lbWJlck5hbWU7CiAgICAgICAgICBpc05vU3VjaE1ldGhvZCA9IGluc3RhbmNlTmFtZS50ZXh0ID09IElkZW50aWZpZXJzLm5vU3VjaE1ldGhvZF87CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlzQ2FsbFRhcmdldCA9IHdvcmxkLmNsb3N1cml6ZWRTdGF0aWNzLmNvbnRhaW5zKGZ1bmN0aW9uKTsKICAgICAgICAgIGlzTm9TdWNoTWV0aG9kID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIG5vZGUgPSBuZXcgTWV0aG9kTm9kZShmdW5jdGlvbiwgZnVuY3Rpb24ucGFyYW1ldGVyU3RydWN0dXJlLAogICAgICAgICAgICBpc0NhbGxUYXJnZXQ6IGlzQ2FsbFRhcmdldCwKICAgICAgICAgICAgaW5zdGFuY2VOYW1lOiBpbnN0YW5jZU5hbWUsCiAgICAgICAgICAgIGlzTm9TdWNoTWV0aG9kOiBpc05vU3VjaE1ldGhvZCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSA9IG5ldyBQYXJhbWV0ZXJTdHJ1Y3R1cmUuZnJvbVR5cGUoCiAgICAgICAgICAgIGVsZW1lbnRFbnZpcm9ubWVudC5nZXRMb2NhbEZ1bmN0aW9uVHlwZShmdW5jdGlvbikpOwogICAgICAgIG5vZGUgPSBuZXcgTWV0aG9kTm9kZShmdW5jdGlvbiwgcGFyYW1ldGVyU3RydWN0dXJlLCBpc0NhbGxUYXJnZXQ6IHRydWUpOwogICAgICB9CiAgICAgIF9ub2Rlcy5hZGQobm9kZSk7CiAgICAgIHJldHVybiBub2RlOwogICAgfSk7CiAgfQoKICB2b2lkIF9zZXR1cERlcGVuZGVuY2llcygKICAgICAgRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIEJ1aWx0V29ybGQgd29ybGQsCiAgICAgIFNldDxHZW5lcmljSW5zdGFudGlhdGlvbj4gZ2VuZXJpY0luc3RhbnRpYXRpb25zLAogICAgICB7Ym9vbCBmb3JSdGlOZWVkczogdHJ1ZX0pIHsKICAgIC8vLyBSZWdpc3RlciB0aGF0IGlmIGBub2RlLmVudGl0eWAgbmVlZHMgdHlwZSBhcmd1bWVudHMgdGhlbiBzbyBkbyBlbnRpdGllcwogICAgLy8vIHdob3NlIHR5cGUgdmFyaWFibGVzIG9jY3VyIGluIFt0eXBlXS4KICAgIC8vLwogICAgLy8vIEZvciBpbnN0YW5jZSBpZiBgQWAgbmVlZHMgdHlwZSBhcmd1bWVudHMgdGhlbiBzbyBkb2VzIGBCYCBpbjoKICAgIC8vLwogICAgLy8vICAgY2xhc3MgQTxUPiB7fQogICAgLy8vICAgY2xhc3MgQjxUPiB7IG0oKSA9PiBuZXcgQTxUPigpOyB9CiAgICAvLy8KICAgIHZvaWQgcmVnaXN0ZXJEZXBlbmRlbmNpZXMoUnRpTm9kZSBub2RlLCBEYXJ0VHlwZSB0eXBlKSB7CiAgICAgIHR5cGUuZm9yRWFjaFR5cGVWYXJpYWJsZSgoVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGUpIHsKICAgICAgICBFbnRpdHkgdHlwZURlY2xhcmF0aW9uID0gdHlwZVZhcmlhYmxlLmVsZW1lbnQudHlwZURlY2xhcmF0aW9uOwogICAgICAgIGlmICh0eXBlRGVjbGFyYXRpb24gaXMgQ2xhc3NFbnRpdHkpIHsKICAgICAgICAgIG5vZGUuYWRkRGVwZW5kZW5jeShfZ2V0Q2xhc3NOb2RlKHR5cGVEZWNsYXJhdGlvbikpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBub2RlLmFkZERlcGVuZGVuY3koCiAgICAgICAgICAgICAgX2dldE1ldGhvZE5vZGUoZWxlbWVudEVudmlyb25tZW50LCB3b3JsZCwgdHlwZURlY2xhcmF0aW9uKSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KCiAgICAvLyBBZGQgdGhlIHJ0aSBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgaW1wbGljaXQgaW4gdGhlIHdheSB0aGUgYmFja2VuZAogICAgLy8gZ2VuZXJhdGVzIGNvZGU6IHdoZW4gd2UgY3JlYXRlIGEgbmV3IFtMaXN0XSwgd2UgYWN0dWFsbHkgY3JlYXRlIGEKICAgIC8vIFtKU0FycmF5XSBpbiB0aGUgYmFja2VuZCBhbmQgd2UgbmVlZCB0byBhZGQgdHlwZSBhcmd1bWVudHMgdG8gdGhlIGNhbGxzCiAgICAvLyBvZiB0aGUgbGlzdCBjb25zdHJ1Y3RvciB3aGVuZXZlciB3ZSBkZXRlcm1pbmUgdGhhdCBbSlNBcnJheV0gbmVlZHMgdHlwZQogICAgLy8gYXJndW1lbnRzLgogICAgLy8KICAgIC8vIFRoaXMgaXMgbmVlZCBmb3IgaW5zdGFuY2UgZm9yOgogICAgLy8KICAgIC8vICAgIHZhciBsaXN0ID0gPGludD5bXTsKICAgIC8vICAgIHZhciBzZXQgPSBsaXN0LnRvU2V0KCk7CiAgICAvLyAgICBzZXQgaXMgU2V0PFN0cmluZz47CiAgICAvLwogICAgLy8gSXQgYWxzbyBvY2N1cnMgZm9yIFtNYXBdIHZzIFtKc0xpbmtlZEhhc2hNYXBdIGluOgogICAgLy8KICAgIC8vICAgIHZhciBtYXAgPSA8aW50LCBkb3VibGU+e307CiAgICAvLyAgICB2YXIgc2V0ID0gbWFwLmtleXMudG9TZXQoKTsKICAgIC8vICAgIHNldCBpcyBTZXQ8U3RyaW5nPjsKICAgIC8vCiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNYWtlIHRoaXMgZGVwZW5kZW5jeSB2aXNpYmxlIGZyb20gY29kZSwgcG9zc2libHkKICAgIC8vIHVzaW5nIGdlbmVyaWMgbWV0aG9kcy4KICAgIGlmIChjb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3MgIT0gbnVsbCkgewogICAgICBfZ2V0Q2xhc3NOb2RlKGNvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcykKICAgICAgICAgIC5hZGREZXBlbmRlbmN5KF9nZXRDbGFzc05vZGUoY29tbW9uRWxlbWVudHMubGlzdENsYXNzKSk7CiAgICB9CiAgICBpZiAoY29tbW9uRWxlbWVudHMuc2V0TGl0ZXJhbENsYXNzICE9IG51bGwpIHsKICAgICAgX2dldENsYXNzTm9kZShjb21tb25FbGVtZW50cy5zZXRMaXRlcmFsQ2xhc3MpCiAgICAgICAgICAuYWRkRGVwZW5kZW5jeShfZ2V0Q2xhc3NOb2RlKGNvbW1vbkVsZW1lbnRzLnNldENsYXNzKSk7CiAgICB9CiAgICBpZiAoY29tbW9uRWxlbWVudHMubWFwTGl0ZXJhbENsYXNzICE9IG51bGwpIHsKICAgICAgX2dldENsYXNzTm9kZShjb21tb25FbGVtZW50cy5tYXBMaXRlcmFsQ2xhc3MpCiAgICAgICAgICAuYWRkRGVwZW5kZW5jeShfZ2V0Q2xhc3NOb2RlKGNvbW1vbkVsZW1lbnRzLm1hcENsYXNzKSk7CiAgICB9CgogICAgdm9pZCBwcm9jZXNzQ2hlY2tlZFR5cGUoRGFydFR5cGUgdHlwZSkgewogICAgICBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgLy8gUmVnaXN0ZXIgdGhhdCBpZiBbY2xzXSBuZWVkcyB0eXBlIGFyZ3VtZW50cyB0aGVuIHNvIGRvIHRoZSBlbnRpdGllcwogICAgICAgIC8vIHRoYXQgZGVjbGFyZSB0eXBlIHZhcmlhYmxlcyBvY2N1cnJpbmcgaW4gW3R5cGVdLgogICAgICAgIENsYXNzRW50aXR5IGNscyA9IHR5cGUuZWxlbWVudDsKICAgICAgICByZWdpc3RlckRlcGVuZGVuY2llcyhfZ2V0Q2xhc3NOb2RlKGNscyksIHR5cGUpOwogICAgICB9CiAgICAgIGlmICh0eXBlIGlzIEZ1dHVyZU9yVHlwZSkgewogICAgICAgIC8vIFt0eXBlXSBpcyBgRnV0dXJlT3I8WD5gLgoKICAgICAgICAvLyBGb3IgdGhlIGltcGxpZWQgYGlzIEZ1dHVyZTxYPmAgdGVzdCwgcmVnaXN0ZXIgdGhhdCBpZiBgRnV0dXJlYCBuZWVkcwogICAgICAgIC8vIHR5cGUgYXJndW1lbnRzIHRoZW4gc28gZG8gdGhlIGVudGl0aWVzIHRoYXQgZGVjbGFyZSB0eXBlIHZhcmlhYmxlcwogICAgICAgIC8vIG9jY3VycmluZyBpbiBgdHlwZS50eXBlQXJndW1lbnRgLgogICAgICAgIHJlZ2lzdGVyRGVwZW5kZW5jaWVzKAogICAgICAgICAgICBfZ2V0Q2xhc3NOb2RlKGNvbW1vbkVsZW1lbnRzLmZ1dHVyZUNsYXNzKSwgdHlwZS50eXBlQXJndW1lbnQpOwogICAgICAgIC8vIFByb2Nlc3MgYHR5cGUudHlwZUFyZ3VtZW50YCBmb3IgdGhlIGltcGxpZWQgYGlzIFhgIHRlc3QuCiAgICAgICAgcHJvY2Vzc0NoZWNrZWRUeXBlKHR5cGUudHlwZUFyZ3VtZW50KTsKICAgICAgfQogICAgfQoKICAgIHdvcmxkLmlzQ2hlY2tzLmZvckVhY2gocHJvY2Vzc0NoZWNrZWRUeXBlKTsKCiAgICB3b3JsZC5pbnN0YW50aWF0ZWRUeXBlcy5mb3JFYWNoKChJbnRlcmZhY2VUeXBlIHR5cGUpIHsKICAgICAgLy8gUmVnaXN0ZXIgdGhhdCBpZiBbY2xzXSBuZWVkcyB0eXBlIGFyZ3VtZW50cyB0aGVuIHNvIGRvIHRoZSBlbnRpdGllcwogICAgICAvLyB0aGF0IGRlY2xhcmUgdHlwZSB2YXJpYWJsZXMgb2NjdXJyaW5nIGluIFt0eXBlXS4KICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gdHlwZS5lbGVtZW50OwogICAgICByZWdpc3RlckRlcGVuZGVuY2llcyhfZ2V0Q2xhc3NOb2RlKGNscyksIHR5cGUpOwogICAgfSk7CgogICAgd29ybGQuZm9yRWFjaFN0YXRpY1R5cGVBcmd1bWVudCgKICAgICAgICAoRW50aXR5IGVudGl0eSwgSXRlcmFibGU8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgICAgZm9yIChEYXJ0VHlwZSB0eXBlIGluIHR5cGVBcmd1bWVudHMpIHsKICAgICAgICAvLyBSZWdpc3RlciB0aGF0IGlmIFtlbnRpdHldIG5lZWRzIHR5cGUgYXJndW1lbnRzIHRoZW4gc28gZG8gdGhlCiAgICAgICAgLy8gZW50aXRpZXMgdGhhdCBkZWNsYXJlIHR5cGUgdmFyaWFibGVzIG9jY3VycmluZyBpbiBbdHlwZV0uCiAgICAgICAgcmVnaXN0ZXJEZXBlbmRlbmNpZXMoCiAgICAgICAgICAgIF9nZXRNZXRob2ROb2RlKGVsZW1lbnRFbnZpcm9ubWVudCwgd29ybGQsIGVudGl0eSksIHR5cGUpOwogICAgICB9CiAgICB9KTsKCiAgICB3b3JsZC5mb3JFYWNoRHluYW1pY1R5cGVBcmd1bWVudCgKICAgICAgICAoU2VsZWN0b3Igc2VsZWN0b3IsIEl0ZXJhYmxlPERhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICAgIHZvaWQgcHJvY2Vzc0VudGl0eShFbnRpdHkgZW50aXR5KSB7CiAgICAgICAgTWV0aG9kTm9kZSBub2RlID0gX2dldE1ldGhvZE5vZGUoZWxlbWVudEVudmlyb25tZW50LCB3b3JsZCwgZW50aXR5KTsKICAgICAgICBpZiAobm9kZS5zZWxlY3RvckFwcGxpZXMoc2VsZWN0b3IpKSB7CiAgICAgICAgICBmb3IgKERhcnRUeXBlIHR5cGUgaW4gdHlwZUFyZ3VtZW50cykgewogICAgICAgICAgICAvLyBSZWdpc3RlciB0aGF0IGlmIGBub2RlLmVudGl0eWAgbmVlZHMgdHlwZSBhcmd1bWVudHMgdGhlbiBzbyBkbwogICAgICAgICAgICAvLyB0aGUgZW50aXRpZXMgdGhhdCBkZWNsYXJlIHR5cGUgdmFyaWFibGVzIG9jY3VycmluZyBpbiBbdHlwZV0uCiAgICAgICAgICAgIHJlZ2lzdGVyRGVwZW5kZW5jaWVzKG5vZGUsIHR5cGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgd29ybGQuZm9yRWFjaEdlbmVyaWNJbnN0YW5jZU1ldGhvZChwcm9jZXNzRW50aXR5KTsKICAgICAgd29ybGQuZ2VuZXJpY0xvY2FsRnVuY3Rpb25zLmZvckVhY2gocHJvY2Vzc0VudGl0eSk7CiAgICAgIHdvcmxkLmNsb3N1cml6ZWRTdGF0aWNzLmZvckVhY2gocHJvY2Vzc0VudGl0eSk7CiAgICAgIHdvcmxkLnVzZXJOb1N1Y2hNZXRob2RzLmZvckVhY2gocHJvY2Vzc0VudGl0eSk7CiAgICB9KTsKCiAgICBmb3IgKEdlbmVyaWNJbnN0YW50aWF0aW9uIGluc3RhbnRpYXRpb24gaW4gZ2VuZXJpY0luc3RhbnRpYXRpb25zKSB7CiAgICAgIHZvaWQgcHJvY2Vzc0VudGl0eShFbnRpdHkgZW50aXR5KSB7CiAgICAgICAgTWV0aG9kTm9kZSBub2RlID0gX2dldE1ldGhvZE5vZGUoZWxlbWVudEVudmlyb25tZW50LCB3b3JsZCwgZW50aXR5KTsKICAgICAgICBpZiAobm9kZS5wYXJhbWV0ZXJTdHJ1Y3R1cmUudHlwZVBhcmFtZXRlcnMgPT0KICAgICAgICAgICAgaW5zdGFudGlhdGlvbi50eXBlQXJndW1lbnRzLmxlbmd0aCkgewogICAgICAgICAgaWYgKGZvclJ0aU5lZWRzKSB7CiAgICAgICAgICAgIF9pbnN0YW50aWF0aW9uTWFwID8/PSA8R2VuZXJpY0luc3RhbnRpYXRpb24sIFNldDxFbnRpdHk+Pnt9OwogICAgICAgICAgICBfaW5zdGFudGlhdGlvbk1hcAogICAgICAgICAgICAgICAgLnB1dElmQWJzZW50KGluc3RhbnRpYXRpb24sICgpID0+IG5ldyBTZXQ8RW50aXR5PigpKQogICAgICAgICAgICAgICAgLmFkZChlbnRpdHkpOwogICAgICAgICAgfQogICAgICAgICAgZm9yIChEYXJ0VHlwZSB0eXBlIGluIGluc3RhbnRpYXRpb24udHlwZUFyZ3VtZW50cykgewogICAgICAgICAgICAvLyBSZWdpc3RlciB0aGF0IGlmIGBub2RlLmVudGl0eWAgbmVlZHMgdHlwZSBhcmd1bWVudHMgdGhlbiBzbyBkbwogICAgICAgICAgICAvLyB0aGUgZW50aXRpZXMgdGhhdCBkZWNsYXJlIHR5cGUgdmFyaWFibGVzIG9jY3VycmluZyBpbiBbdHlwZV0uCiAgICAgICAgICAgIHJlZ2lzdGVyRGVwZW5kZW5jaWVzKG5vZGUsIHR5cGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgd29ybGQuY2xvc3VyaXplZE1lbWJlcnMuZm9yRWFjaChwcm9jZXNzRW50aXR5KTsKICAgICAgd29ybGQuY2xvc3VyaXplZFN0YXRpY3MuZm9yRWFjaChwcm9jZXNzRW50aXR5KTsKICAgICAgd29ybGQuZ2VuZXJpY0xvY2FsRnVuY3Rpb25zLmZvckVhY2gocHJvY2Vzc0VudGl0eSk7CiAgICB9CiAgfQoKICB2b2lkIF9wcm9wYWdhdGVUZXN0cyhDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCwgQnVpbHRXb3JsZCB3b3JsZEJ1aWxkZXIpIHsKICAgIHZvaWQgcHJvY2Vzc1R5cGVWYXJpYWJsZVR5cGUoVHlwZVZhcmlhYmxlVHlwZSB0eXBlLCB7Ym9vbCBkaXJlY3Q6IHRydWV9KSB7CiAgICAgIFR5cGVWYXJpYWJsZUVudGl0eSB2YXJpYWJsZSA9IHR5cGUuZWxlbWVudDsKICAgICAgaWYgKHZhcmlhYmxlLnR5cGVEZWNsYXJhdGlvbiBpcyBDbGFzc0VudGl0eSkgewogICAgICAgIF9nZXRDbGFzc05vZGUodmFyaWFibGUudHlwZURlY2xhcmF0aW9uKS5tYXJrVGVzdChkaXJlY3Q6IGRpcmVjdCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2dldE1ldGhvZE5vZGUoCiAgICAgICAgICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQsIHdvcmxkQnVpbGRlciwgdmFyaWFibGUudHlwZURlY2xhcmF0aW9uKQogICAgICAgICAgICAubWFya1Rlc3QoZGlyZWN0OiBkaXJlY3QpOwogICAgICB9CiAgICB9CgogICAgdm9pZCBwcm9jZXNzVHlwZShEYXJ0VHlwZSB0eXBlLCB7Ym9vbCBkaXJlY3Q6IHRydWV9KSB7CiAgICAgIGlmICh0eXBlIGlzIEZ1dHVyZU9yVHlwZSkgewogICAgICAgIF9nZXRDbGFzc05vZGUoY29tbW9uRWxlbWVudHMuZnV0dXJlQ2xhc3MpLm1hcmtJbmRpcmVjdFRlc3QoKTsKICAgICAgICBwcm9jZXNzVHlwZSh0eXBlLnR5cGVBcmd1bWVudCwgZGlyZWN0OiBmYWxzZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdHlwZS5mb3JFYWNoVHlwZVZhcmlhYmxlKChUeXBlVmFyaWFibGVUeXBlIHR5cGUpIHsKICAgICAgICAgIHByb2Nlc3NUeXBlVmFyaWFibGVUeXBlKHR5cGUsIGRpcmVjdDogZGlyZWN0KTsKICAgICAgICB9KTsKICAgICAgfQogICAgfQoKICAgIHdvcmxkQnVpbGRlci5pc0NoZWNrcy5mb3JFYWNoKHByb2Nlc3NUeXBlKTsKICB9CgogIHZvaWQgX3Byb3BhZ2F0ZUxpdGVyYWxzKAogICAgICBFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50LCBCdWlsdFdvcmxkIHdvcmxkKSB7CiAgICB3b3JsZC50eXBlVmFyaWFibGVUeXBlTGl0ZXJhbHMuZm9yRWFjaCgoVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGVUeXBlKSB7CiAgICAgIFR5cGVWYXJpYWJsZUVudGl0eSB2YXJpYWJsZSA9IHR5cGVWYXJpYWJsZVR5cGUuZWxlbWVudDsKICAgICAgaWYgKHZhcmlhYmxlLnR5cGVEZWNsYXJhdGlvbiBpcyBDbGFzc0VudGl0eSkgewogICAgICAgIF9nZXRDbGFzc05vZGUodmFyaWFibGUudHlwZURlY2xhcmF0aW9uKS5tYXJrRGlyZWN0TGl0ZXJhbCgpOwogICAgICB9IGVsc2UgewogICAgICAgIF9nZXRNZXRob2ROb2RlKGVsZW1lbnRFbnZpcm9ubWVudCwgd29ybGQsIHZhcmlhYmxlLnR5cGVEZWNsYXJhdGlvbikKICAgICAgICAgICAgLm1hcmtEaXJlY3RMaXRlcmFsKCk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgU3RyaW5nIGR1bXAoe2Jvb2wgdmVyYm9zZTogZmFsc2V9KSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CgogICAgdm9pZCBhZGROb2RlKFJ0aU5vZGUgbm9kZSkgewogICAgICBpZiAobm9kZS5oYXNVc2UgfHwgbm9kZS5kZXBlbmRlbmNpZXMuaXNOb3RFbXB0eSB8fCB2ZXJib3NlKSB7CiAgICAgICAgc2Iud3JpdGUoJyAkbm9kZScpOwogICAgICAgIFN0cmluZyBjb21tYSA9ICcnOwogICAgICAgIGlmIChub2RlLl90ZXN0U3RhdGUgJiAxICE9IDApIHsKICAgICAgICAgIHNiLndyaXRlKCcgZGlyZWN0IHRlc3QnKTsKICAgICAgICAgIGNvbW1hID0gJywnOwogICAgICAgIH0KICAgICAgICBpZiAobm9kZS5fdGVzdFN0YXRlICYgMiAhPSAwKSB7CiAgICAgICAgICBzYi53cml0ZSgnJGNvbW1hIGluZGlyZWN0IHRlc3QnKTsKICAgICAgICAgIGNvbW1hID0gJywnOwogICAgICAgIH0KICAgICAgICBpZiAobm9kZS5fbGl0ZXJhbFN0YXRlICYgMSAhPSAwKSB7CiAgICAgICAgICBzYi53cml0ZSgnJGNvbW1hIGRpcmVjdCBsaXRlcmFsJyk7CiAgICAgICAgICBjb21tYSA9ICcsJzsKICAgICAgICB9CiAgICAgICAgaWYgKG5vZGUuX2xpdGVyYWxTdGF0ZSAmIDIgIT0gMCkgewogICAgICAgICAgc2Iud3JpdGUoJyRjb21tYSBpbmRpcmVjdCBsaXRlcmFsJyk7CiAgICAgICAgICBjb21tYSA9ICcsJzsKICAgICAgICB9CiAgICAgICAgaWYgKG5vZGUuZGVwZW5kZW5jaWVzLmlzTm90RW1wdHkgfHwgdmVyYm9zZSkgewogICAgICAgICAgc2Iud3JpdGVsbignOicpOwogICAgICAgICAgbm9kZS5kZXBlbmRlbmNpZXMuZm9yRWFjaCgobikgPT4gc2Iud3JpdGVsbignICAkbicpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc2Iud3JpdGVsbigpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHZvaWQgYWRkVHlwZShEYXJ0VHlwZSB0eXBlKSB7CiAgICAgIHNiLndyaXRlbG4oJyAkdHlwZScpOwogICAgfQoKICAgIHNiLndyaXRlbG4oJ2NsYXNzZXM6Jyk7CiAgICBfY2xhc3Nlcy52YWx1ZXMuZm9yRWFjaChhZGROb2RlKTsKICAgIHNiLndyaXRlbG4oJ21ldGhvZHM6Jyk7CiAgICBfbWV0aG9kcy52YWx1ZXMuZm9yRWFjaChhZGROb2RlKTsKICAgIHNiLndyaXRlbG4oJ2V4cGxpY2l0IGlzLXRlc3RzOicpOwogICAgZXhwbGljaXRJc0NoZWNrcy5mb3JFYWNoKGFkZFR5cGUpOwogICAgc2Iud3JpdGVsbignaW1wbGljaXQgaXMtdGVzdHM6Jyk7CiAgICBpbXBsaWNpdElzQ2hlY2tzLmZvckVhY2goYWRkVHlwZSk7CgogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICB2b2lkIF9jb2xsZWN0UmVzdWx0cyhDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCwgRGFydFR5cGVzIHR5cGVzLCBCdWlsdFdvcmxkIHdvcmxkLAogICAgICB7Ym9vbCBmb3JSdGlOZWVkczogdHJ1ZX0pIHsKICAgIC8vLyBSZWdpc3RlciB0aGUgaW1wbGljaXQgaXMtdGVzdCBvZiBbdHlwZV0uCiAgICAvLy8KICAgIC8vLyBJZiBbdHlwZV0gaXMgb2YgdGhlIGZvcm0gYEZ1dHVyZU9yPFg+YCwgYWxzbyByZWdpc3RlciB0aGUgaW1wbGljaXQKICAgIC8vLyBpcy10ZXN0cyBvZiBgRnV0dXJlPFg+YCBhbmQgYFhgLgogICAgdm9pZCBhZGRJbXBsaWNpdENoZWNrKERhcnRUeXBlIHR5cGUpIHsKICAgICAgaWYgKGltcGxpY2l0SXNDaGVja3MuYWRkKHR5cGUpKSB7CiAgICAgICAgaWYgKHR5cGUgaXMgRnV0dXJlT3JUeXBlKSB7CiAgICAgICAgICBhZGRJbXBsaWNpdENoZWNrKGNvbW1vbkVsZW1lbnRzLmZ1dHVyZVR5cGUodHlwZS50eXBlQXJndW1lbnQpKTsKICAgICAgICAgIGFkZEltcGxpY2l0Q2hlY2sodHlwZS50eXBlQXJndW1lbnQpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHZvaWQgYWRkSW1wbGljaXRDaGVja3MoSXRlcmFibGU8RGFydFR5cGU+IHR5cGVzKSB7CiAgICAgIHR5cGVzLmZvckVhY2goYWRkSW1wbGljaXRDaGVjayk7CiAgICB9CgogICAgd29ybGQuaXNDaGVja3MuZm9yRWFjaCgoRGFydFR5cGUgdHlwZSkgewogICAgICBpZiAodHlwZSBpcyBGdXR1cmVPclR5cGUpIHsKICAgICAgICBhZGRJbXBsaWNpdENoZWNrKGNvbW1vbkVsZW1lbnRzLmZ1dHVyZVR5cGUodHlwZS50eXBlQXJndW1lbnQpKTsKICAgICAgICBhZGRJbXBsaWNpdENoZWNrKHR5cGUudHlwZUFyZ3VtZW50KTsKICAgICAgfQogICAgfSk7CgogICAgLy8gQ29tcHV0ZSB0eXBlIGFyZ3VtZW50cyBvZiBjbGFzc2VzIHRoYXQgdXNlIG9uZSBvZiB0aGVpciB0eXBlIHZhcmlhYmxlcyBpbgogICAgLy8gaXMtY2hlY2tzIGFuZCBhZGQgdGhlIGlzLWNoZWNrcyB0aGF0IHRoZXkgaW1wbHkuCiAgICBfY2xhc3Nlcy5mb3JFYWNoKChDbGFzc0VudGl0eSBjbHMsIENsYXNzTm9kZSBub2RlKSB7CiAgICAgIGlmICghbm9kZS5oYXNUZXN0KSByZXR1cm47CiAgICAgIC8vIEZpbmQgYWxsIGluc3RhbnRpYXRlZCB0eXBlcyB0aGF0IGFyZSBhIHN1YnR5cGUgb2YgYSBjbGFzcyB0aGF0IHVzZXMKICAgICAgLy8gb25lIG9mIGl0cyB0eXBlIGFyZ3VtZW50cyBpbiBhbiBpcy1jaGVjayBhbmQgYWRkIHRoZSBhcmd1bWVudHMgdG8gdGhlCiAgICAgIC8vIHNldCBvZiBpcy1jaGVja3MuCiAgICAgIGZvciAoSW50ZXJmYWNlVHlwZSB0eXBlIGluIHdvcmxkLmluc3RhbnRpYXRlZFR5cGVzKSB7CiAgICAgICAgLy8gV2UgbmVlZCB0aGUgdHlwZSBhcyBpbnN0YW5jZSBvZiBpdHMgc3VwZXJjbGFzcyBhbnl3YXksIHNvIHdlIGp1c3QKICAgICAgICAvLyB0cnkgdG8gY29tcHV0ZSB0aGUgc3Vic3RpdHV0aW9uOyBpZiB0aGUgcmVzdWx0IGlzIFs6bnVsbDpdLCB0aGUKICAgICAgICAvLyBjbGFzc2VzIGFyZSBub3QgcmVsYXRlZC4KICAgICAgICBJbnRlcmZhY2VUeXBlIGluc3RhbmNlID0gdHlwZXMuYXNJbnN0YW5jZU9mKHR5cGUsIGNscyk7CiAgICAgICAgaWYgKGluc3RhbmNlICE9IG51bGwpIHsKICAgICAgICAgIGZvciAoRGFydFR5cGUgYXJndW1lbnQgaW4gaW5zdGFuY2UudHlwZUFyZ3VtZW50cykgewogICAgICAgICAgICBhZGRJbXBsaWNpdENoZWNrKGFyZ3VtZW50LnVuYWxpYXNlZCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKCiAgICB3b3JsZC5mb3JFYWNoU3RhdGljVHlwZUFyZ3VtZW50KAogICAgICAgIChFbnRpdHkgZnVuY3Rpb24sIEl0ZXJhYmxlPERhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICAgIGlmICghX2dldE1ldGhvZE5vZGUoZWxlbWVudEVudmlyb25tZW50LCB3b3JsZCwgZnVuY3Rpb24pLmhhc1Rlc3QpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgYWRkSW1wbGljaXRDaGVja3ModHlwZUFyZ3VtZW50cyk7CiAgICB9KTsKCiAgICBpZiAoZm9yUnRpTmVlZHMpIHsKICAgICAgX2FwcGxpZWRTZWxlY3Rvck1hcCA9IDxTZWxlY3RvciwgU2V0PEVudGl0eT4+e307CiAgICB9CgogICAgd29ybGQuZm9yRWFjaER5bmFtaWNUeXBlQXJndW1lbnQoCiAgICAgICAgKFNlbGVjdG9yIHNlbGVjdG9yLCBJdGVyYWJsZTxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgICBmb3IgKE1ldGhvZE5vZGUgbm9kZSBpbiBfbWV0aG9kcy52YWx1ZXMpIHsKICAgICAgICBpZiAobm9kZS5zZWxlY3RvckFwcGxpZXMoc2VsZWN0b3IpKSB7CiAgICAgICAgICBpZiAoZm9yUnRpTmVlZHMpIHsKICAgICAgICAgICAgX2FwcGxpZWRTZWxlY3Rvck1hcAogICAgICAgICAgICAgICAgLnB1dElmQWJzZW50KHNlbGVjdG9yLCAoKSA9PiBuZXcgU2V0PEVudGl0eT4oKSkKICAgICAgICAgICAgICAgIC5hZGQobm9kZS5lbnRpdHkpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG5vZGUuaGFzVGVzdCkgewogICAgICAgICAgICBhZGRJbXBsaWNpdENoZWNrcyh0eXBlQXJndW1lbnRzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogIH0KfQoKLy8vIEludGVyZmFjZSBmb3IgdGhlIGNsYXNzZXMgYW5kIG1ldGhvZHMgdGhhdCBuZWVkIHJ1bnRpbWUgdHlwZXMuCmFic3RyYWN0IGNsYXNzIFJ1bnRpbWVUeXBlc05lZWQgewogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbUnVudGltZVR5cGVzTmVlZF0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBSdW50aW1lVHlwZXNOZWVkLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIEVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQpIHsKICAgIGJvb2wgaXNUcml2aWFsID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBpZiAoaXNUcml2aWFsKSB7CiAgICAgIHJldHVybiBUcml2aWFsUnVudGltZVR5cGVzTmVlZChlbGVtZW50RW52aXJvbm1lbnQpOwogICAgfQogICAgcmV0dXJuIG5ldyBSdW50aW1lVHlwZXNOZWVkSW1wbC5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgICAgc291cmNlLCBlbGVtZW50RW52aXJvbm1lbnQpOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbUnVudGltZVR5cGVzTmVlZF0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2Nsc10gbmVlZHMgdHlwZSBhcmd1bWVudHMgYXQgcnVudGltZSB0eXBlLgogIC8vLwogIC8vLyBUaGlzIGlzIGZvciBpbnN0YW5jZSB0aGUgY2FzZSBmb3IgZ2VuZXJpYyBjbGFzc2VzIHVzZWQgaW4gYSB0eXBlIHRlc3Q6CiAgLy8vCiAgLy8vICAgY2xhc3MgQzxUPiB7fQogIC8vLyAgIG1haW4oKSB7CiAgLy8vICAgICBuZXcgQzxpbnQ+KCkgaXMgQzxpbnQ+OwogIC8vLyAgICAgbmV3IEM8U3RyaW5nPigpIGlzIEM8U3RyaW5nPjsKICAvLy8gICB9CiAgLy8vCiAgYm9vbCBjbGFzc05lZWRzVHlwZUFyZ3VtZW50cyhDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW21ldGhvZF0gbmVlZHMgdHlwZSBhcmd1bWVudHMgYXQgcnVudGltZSB0eXBlLgogIC8vLwogIC8vLyBUaGlzIGlzIGZvciBpbnN0YW5jZSB0aGUgY2FzZSBmb3IgZ2VuZXJpYyBtZXRob2RzIHRoYXQgdXNlIHR5cGUgdGVzdHM6CiAgLy8vCiAgLy8vICAgbWV0aG9kPFQ+KFQgdCkgPT4gdCBpcyBUOwogIC8vLyAgIG1haW4oKSB7CiAgLy8vICAgICBtZXRob2Q8aW50PigwKTsKICAvLy8gICAgIG1ldGhvZDxTdHJpbmc+KCcnKTsKICAvLy8gICB9CiAgLy8vCiAgYm9vbCBtZXRob2ROZWVkc1R5cGVBcmd1bWVudHMoRnVuY3Rpb25FbnRpdHkgbWV0aG9kKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGEgc2lnbmF0dXJlIGlzIG5lZWRlZCBmb3IgW21ldGhvZF0uCiAgLy8vCiAgLy8vIEEgc2lnbmF0dXJlIGlzIGEgcnVudGltZSBtZXRob2QgdHlwZSBkZXNjcmlwdG9yIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcwogIC8vLyBhIHJ1bnRpbWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHR5cGUgb2YgdGhlIG1ldGhvZC4KICAvLy8KICAvLy8gVGhpcyBpcyBmb3IgaW5zdGFuY2UgbmVlZGVkIGZvciBpbnN0YW5jZSBtZXRob2RzIG9mIGdlbmVyaWMgY2xhc3NlcyB0aGF0CiAgLy8vIGFyZSB0b3JuIG9mZiBhbmQgd2hvc2UgdHlwZSB0aGVyZWZvcmUgcG90ZW50aWFsbHkgaXMgdXNlZCBpbiBhIHR5cGUgdGVzdDoKICAvLy8KICAvLy8gICAgIGNsYXNzIEM8VD4gewogIC8vLyAgICAgICBtZXRob2QoVCB0KSB7fQogIC8vLyAgICAgfQogIC8vLyAgICAgbWFpbigpIHsKICAvLy8gICAgICAgbmV3IEM8aW50PigpLm1ldGhvZCBpcyB2b2lkIEZ1bmN0aW9uKGludCk7CiAgLy8vICAgICAgIG5ldyBDPFN0cmluZz4oKS5tZXRob2QgaXMgdm9pZCBGdW5jdGlvbihTdHJpbmcpOwogIC8vLyAgICAgfQogIC8vLwogIC8vLyBTaW5jZSB0eXBlIG9mIHRoZSBtZXRob2QgZGVwZW5kcyBvbiB0aGUgdHlwZSBhcmd1bWVudCBvZiBpdHMgZW5jbG9zaW5nCiAgLy8vIGNsYXNzLCB0aGUgdHlwZSBvZiB0aGUgbWV0aG9kIGlzIGEgSmF2YVNjcmlwdCBmdW5jdGlvbiBsaWtlOgogIC8vLwogIC8vLyAgICBzaWduYXR1cmU6IGZ1bmN0aW9uIChUKSB7CiAgLy8vICAgICAgcmV0dXJuIHsnZnVuYyc6IHRydWUsIHBhcmFtczogW1RdfTsKICAvLy8gICAgfQogIC8vLwogIGJvb2wgbWV0aG9kTmVlZHNTaWduYXR1cmUoRnVuY3Rpb25FbnRpdHkgbWV0aG9kKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGEgZHluYW1pYyBjYWxsIG9mIFtzZWxlY3Rvcl0gbmVlZHMgdG8gcGFzcyB0eXBlCiAgLy8vIGFyZ3VtZW50cy4KICBib29sIHNlbGVjdG9yTmVlZHNUeXBlQXJndW1lbnRzKFNlbGVjdG9yIHNlbGVjdG9yKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGEgZ2VuZXJpYyBpbnN0YW50aWF0aW9uIG9uIGFuIGV4cHJlc3Npb24gb2YgdHlwZQogIC8vLyBbZnVuY3Rpb25UeXBlXSB3aXRoIHRoZSBnaXZlbiBbdHlwZUFyZ3VtZW50Q291bnRdIG5lZWRzIHRvIHBhc3MgdHlwZQogIC8vLyBhcmd1bWVudHMuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIFtmdW5jdGlvblR5cGVdLgogIGJvb2wgaW5zdGFudGlhdGlvbk5lZWRzVHlwZUFyZ3VtZW50cygKICAgICAgRGFydFR5cGUgZnVuY3Rpb25UeXBlLCBpbnQgdHlwZUFyZ3VtZW50Q291bnQpOwp9CgpjbGFzcyBUcml2aWFsUnVudGltZVR5cGVzTmVlZCBpbXBsZW1lbnRzIFJ1bnRpbWVUeXBlc05lZWQgewogIGZpbmFsIEVsZW1lbnRFbnZpcm9ubWVudCBfZWxlbWVudEVudmlyb25tZW50OwoKICBjb25zdCBUcml2aWFsUnVudGltZVR5cGVzTmVlZCh0aGlzLl9lbGVtZW50RW52aXJvbm1lbnQpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlQm9vbCh0cnVlKTsgLy8gSXMgdHJpdmlhbC4KICB9CgogIEBvdmVycmlkZQogIGJvb2wgY2xhc3NOZWVkc1R5cGVBcmd1bWVudHMoQ2xhc3NFbnRpdHkgY2xzKSA9PgogICAgICBfZWxlbWVudEVudmlyb25tZW50LmlzR2VuZXJpY0NsYXNzKGNscyk7CgogIEBvdmVycmlkZQogIGJvb2wgbWV0aG9kTmVlZHNTaWduYXR1cmUoRnVuY3Rpb25FbnRpdHkgbWV0aG9kKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIG1ldGhvZE5lZWRzVHlwZUFyZ3VtZW50cyhGdW5jdGlvbkVudGl0eSBtZXRob2QpID0+CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEFsaWduIGhhbmRsaW5nIG9mIHR5cGUgYXJndW1lbnRzIHBhc3NlZCB0byBmYWN0b3J5CiAgICAgIC8vIGNvbnN0cnVjdG9ycyB3aXRoIHR5cGUgYXJndW1lbnRzIHBhc3NlZCB0aGUgcmVndWxhciBnZW5lcmljIG1ldGhvZHMuCiAgICAgICEobWV0aG9kIGlzIENvbnN0cnVjdG9yRW50aXR5ICYmIG1ldGhvZC5pc0ZhY3RvcnlDb25zdHJ1Y3Rvcik7CgogIEBvdmVycmlkZQogIGJvb2wgc2VsZWN0b3JOZWVkc1R5cGVBcmd1bWVudHMoU2VsZWN0b3Igc2VsZWN0b3IpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgaW5zdGFudGlhdGlvbk5lZWRzVHlwZUFyZ3VtZW50cygKICAgICAgRGFydFR5cGUgZnVuY3Rpb25UeXBlLCBpbnQgdHlwZUFyZ3VtZW50Q291bnQpIHsKICAgIHJldHVybiB0cnVlOwogIH0KfQoKY2xhc3MgUnVudGltZVR5cGVzTmVlZEltcGwgaW1wbGVtZW50cyBSdW50aW1lVHlwZXNOZWVkIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW1J1bnRpbWVUeXBlc05lZWRdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAncnVudGltZS10eXBlcy1uZWVkJzsKCiAgZmluYWwgRWxlbWVudEVudmlyb25tZW50IF9lbGVtZW50RW52aXJvbm1lbnQ7CiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBjbGFzc2VzTmVlZGluZ1R5cGVBcmd1bWVudHM7CiAgZmluYWwgU2V0PEZ1bmN0aW9uRW50aXR5PiBtZXRob2RzTmVlZGluZ1NpZ25hdHVyZTsKICBmaW5hbCBTZXQ8RnVuY3Rpb25FbnRpdHk+IG1ldGhvZHNOZWVkaW5nVHlwZUFyZ3VtZW50czsKICBmaW5hbCBTZXQ8TG9jYWw+IGxvY2FsRnVuY3Rpb25zTmVlZGluZ1NpZ25hdHVyZTsKICBmaW5hbCBTZXQ8TG9jYWw+IGxvY2FsRnVuY3Rpb25zTmVlZGluZ1R5cGVBcmd1bWVudHM7CiAgZmluYWwgU2V0PFNlbGVjdG9yPiBzZWxlY3RvcnNOZWVkaW5nVHlwZUFyZ3VtZW50czsKICBmaW5hbCBTZXQ8aW50PiBpbnN0YW50aWF0aW9uc05lZWRpbmdUeXBlQXJndW1lbnRzOwoKICBSdW50aW1lVHlwZXNOZWVkSW1wbCgKICAgICAgdGhpcy5fZWxlbWVudEVudmlyb25tZW50LAogICAgICB0aGlzLmNsYXNzZXNOZWVkaW5nVHlwZUFyZ3VtZW50cywKICAgICAgdGhpcy5tZXRob2RzTmVlZGluZ1NpZ25hdHVyZSwKICAgICAgdGhpcy5tZXRob2RzTmVlZGluZ1R5cGVBcmd1bWVudHMsCiAgICAgIHRoaXMubG9jYWxGdW5jdGlvbnNOZWVkaW5nU2lnbmF0dXJlLAogICAgICB0aGlzLmxvY2FsRnVuY3Rpb25zTmVlZGluZ1R5cGVBcmd1bWVudHMsCiAgICAgIHRoaXMuc2VsZWN0b3JzTmVlZGluZ1R5cGVBcmd1bWVudHMsCiAgICAgIHRoaXMuaW5zdGFudGlhdGlvbnNOZWVkaW5nVHlwZUFyZ3VtZW50cyk7CgogIGZhY3RvcnkgUnVudGltZVR5cGVzTmVlZEltcGwucmVhZEZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXNOZWVkaW5nVHlwZUFyZ3VtZW50cyA9CiAgICAgICAgc291cmNlLnJlYWRDbGFzc2VzPENsYXNzRW50aXR5PigpLnRvU2V0KCk7CiAgICBTZXQ8RnVuY3Rpb25FbnRpdHk+IG1ldGhvZHNOZWVkaW5nU2lnbmF0dXJlID0KICAgICAgICBzb3VyY2UucmVhZE1lbWJlcnM8RnVuY3Rpb25FbnRpdHk+KCkudG9TZXQoKTsKICAgIFNldDxGdW5jdGlvbkVudGl0eT4gbWV0aG9kc05lZWRpbmdUeXBlQXJndW1lbnRzID0KICAgICAgICBzb3VyY2UucmVhZE1lbWJlcnM8RnVuY3Rpb25FbnRpdHk+KCkudG9TZXQoKTsKICAgIFNldDxTZWxlY3Rvcj4gc2VsZWN0b3JzTmVlZGluZ1R5cGVBcmd1bWVudHMgPQogICAgICAgIHNvdXJjZS5yZWFkTGlzdCgoKSA9PiBuZXcgU2VsZWN0b3IucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSkpLnRvU2V0KCk7CiAgICBTZXQ8aW50PiBpbnN0YW50aWF0aW9uc05lZWRpbmdUeXBlQXJndW1lbnRzID0KICAgICAgICBzb3VyY2UucmVhZExpc3Qoc291cmNlLnJlYWRJbnQpLnRvU2V0KCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IFJ1bnRpbWVUeXBlc05lZWRJbXBsKAogICAgICAgIGVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgICBjbGFzc2VzTmVlZGluZ1R5cGVBcmd1bWVudHMsCiAgICAgICAgbWV0aG9kc05lZWRpbmdTaWduYXR1cmUsCiAgICAgICAgbWV0aG9kc05lZWRpbmdUeXBlQXJndW1lbnRzLAogICAgICAgIG51bGwsCiAgICAgICAgbnVsbCwKICAgICAgICBzZWxlY3RvcnNOZWVkaW5nVHlwZUFyZ3VtZW50cywKICAgICAgICBpbnN0YW50aWF0aW9uc05lZWRpbmdUeXBlQXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVCb29sKGZhbHNlKTsgLy8gSXMgX25vdF8gdHJpdmlhbC4KICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVDbGFzc2VzKGNsYXNzZXNOZWVkaW5nVHlwZUFyZ3VtZW50cyk7CiAgICBzaW5rLndyaXRlTWVtYmVycyhtZXRob2RzTmVlZGluZ1NpZ25hdHVyZSk7CiAgICBzaW5rLndyaXRlTWVtYmVycyhtZXRob2RzTmVlZGluZ1R5cGVBcmd1bWVudHMpOwogICAgYXNzZXJ0KGxvY2FsRnVuY3Rpb25zTmVlZGluZ1NpZ25hdHVyZSA9PSBudWxsKTsKICAgIGFzc2VydChsb2NhbEZ1bmN0aW9uc05lZWRpbmdUeXBlQXJndW1lbnRzID09IG51bGwpOwogICAgc2luay53cml0ZUxpc3Qoc2VsZWN0b3JzTmVlZGluZ1R5cGVBcmd1bWVudHMsCiAgICAgICAgKFNlbGVjdG9yIHNlbGVjdG9yKSA9PiBzZWxlY3Rvci53cml0ZVRvRGF0YVNpbmsoc2luaykpOwogICAgc2luay53cml0ZUxpc3QoaW5zdGFudGlhdGlvbnNOZWVkaW5nVHlwZUFyZ3VtZW50cywgc2luay53cml0ZUludCk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgYm9vbCBjaGVja0NsYXNzKGNvdmFyaWFudCBDbGFzc0VudGl0eSBjbHMpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgY2xhc3NOZWVkc1R5cGVBcmd1bWVudHMoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBhc3NlcnQoY2hlY2tDbGFzcyhjbHMpKTsKICAgIGlmICghX2VsZW1lbnRFbnZpcm9ubWVudC5pc0dlbmVyaWNDbGFzcyhjbHMpKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gY2xhc3Nlc05lZWRpbmdUeXBlQXJndW1lbnRzLmNvbnRhaW5zKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG1ldGhvZE5lZWRzU2lnbmF0dXJlKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKSB7CiAgICByZXR1cm4gbWV0aG9kc05lZWRpbmdTaWduYXR1cmUuY29udGFpbnMoZnVuY3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBtZXRob2ROZWVkc1R5cGVBcmd1bWVudHMoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pIHsKICAgIHJldHVybiBtZXRob2RzTmVlZGluZ1R5cGVBcmd1bWVudHMuY29udGFpbnMoZnVuY3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBzZWxlY3Rvck5lZWRzVHlwZUFyZ3VtZW50cyhTZWxlY3RvciBzZWxlY3RvcikgewogICAgaWYgKHNlbGVjdG9yLmNhbGxTdHJ1Y3R1cmUudHlwZUFyZ3VtZW50Q291bnQgPT0gMCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHNlbGVjdG9yc05lZWRpbmdUeXBlQXJndW1lbnRzLmNvbnRhaW5zKHNlbGVjdG9yKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaW5zdGFudGlhdGlvbk5lZWRzVHlwZUFyZ3VtZW50cygKICAgICAgRGFydFR5cGUgZnVuY3Rpb25UeXBlLCBpbnQgdHlwZUFyZ3VtZW50Q291bnQpIHsKICAgIHJldHVybiBpbnN0YW50aWF0aW9uc05lZWRpbmdUeXBlQXJndW1lbnRzLmNvbnRhaW5zKHR5cGVBcmd1bWVudENvdW50KTsKICB9Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIGNvbXB1dGluZyBjbGFzc2VzIGFuZCBtZXRob2RzIHRoYXQgbmVlZCBydW50aW1lIHR5cGVzLgphYnN0cmFjdCBjbGFzcyBSdW50aW1lVHlwZXNOZWVkQnVpbGRlciB7CiAgLy8vIFJlZ2lzdGVycyB0aGF0IFtjbHNdIHVzZXMgb25lIG9mIGl0cyB0eXBlIHZhcmlhYmxlcyBhcyBhIGxpdGVyYWwuCiAgdm9pZCByZWdpc3RlckNsYXNzVXNpbmdUeXBlVmFyaWFibGVMaXRlcmFsKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZWdpc3RlcnMgdGhhdCBbbWV0aG9kXSB1c2VzIG9uZSBvZiBpdHMgdHlwZSB2YXJpYWJsZXMgYXMgYSBsaXRlcmFsLgogIHZvaWQgcmVnaXN0ZXJNZXRob2RVc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWwoRnVuY3Rpb25FbnRpdHkgbWV0aG9kKTsKCiAgLy8vIFJlZ2lzdGVycyB0aGF0IFtsb2NhbEZ1bmN0aW9uXSB1c2VzIG9uZSBvZiBpdHMgdHlwZSB2YXJpYWJsZXMgYXMgYQogIC8vLyBsaXRlcmFsLgogIHZvaWQgcmVnaXN0ZXJMb2NhbEZ1bmN0aW9uVXNpbmdUeXBlVmFyaWFibGVMaXRlcmFsKExvY2FsIGxvY2FsRnVuY3Rpb24pOwoKICAvLy8gUmVnaXN0ZXJzIHRoYXQgYSBnZW5lcmljIFtpbnN0YW50aWF0aW9uXSBpcyB1c2VkLgogIHZvaWQgcmVnaXN0ZXJHZW5lcmljSW5zdGFudGlhdGlvbihHZW5lcmljSW5zdGFudGlhdGlvbiBpbnN0YW50aWF0aW9uKTsKCiAgLy8vIENvbXB1dGVzIHRoZSBbUnVudGltZVR5cGVzTmVlZF0gZm9yIHRoZSBkYXRhIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIGJ1aWxkZXIuCiAgUnVudGltZVR5cGVzTmVlZCBjb21wdXRlUnVudGltZVR5cGVzTmVlZCgKICAgICAgS0Nsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLCBDb21waWxlck9wdGlvbnMgb3B0aW9ucyk7Cn0KCmNsYXNzIFRyaXZpYWxSdW50aW1lVHlwZXNOZWVkQnVpbGRlciBpbXBsZW1lbnRzIFJ1bnRpbWVUeXBlc05lZWRCdWlsZGVyIHsKICBjb25zdCBUcml2aWFsUnVudGltZVR5cGVzTmVlZEJ1aWxkZXIoKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckNsYXNzVXNpbmdUeXBlVmFyaWFibGVMaXRlcmFsKENsYXNzRW50aXR5IGNscykge30KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck1ldGhvZFVzaW5nVHlwZVZhcmlhYmxlTGl0ZXJhbChGdW5jdGlvbkVudGl0eSBtZXRob2QpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJMb2NhbEZ1bmN0aW9uVXNpbmdUeXBlVmFyaWFibGVMaXRlcmFsKExvY2FsIGxvY2FsRnVuY3Rpb24pIHt9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJHZW5lcmljSW5zdGFudGlhdGlvbihHZW5lcmljSW5zdGFudGlhdGlvbiBpbnN0YW50aWF0aW9uKSB7fQoKICBAb3ZlcnJpZGUKICBSdW50aW1lVHlwZXNOZWVkIGNvbXB1dGVSdW50aW1lVHlwZXNOZWVkKAogICAgICBLQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zKSB7CiAgICByZXR1cm4gVHJpdmlhbFJ1bnRpbWVUeXBlc05lZWQoY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50KTsKICB9Cn0KCmNsYXNzIFJ1bnRpbWVUeXBlc05lZWRCdWlsZGVySW1wbCBpbXBsZW1lbnRzIFJ1bnRpbWVUeXBlc05lZWRCdWlsZGVyIHsKICBmaW5hbCBFbGVtZW50RW52aXJvbm1lbnQgX2VsZW1lbnRFbnZpcm9ubWVudDsKCiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBjbGFzc2VzVXNpbmdUeXBlVmFyaWFibGVMaXRlcmFscyA9CiAgICAgIG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CgogIGZpbmFsIFNldDxGdW5jdGlvbkVudGl0eT4gbWV0aG9kc1VzaW5nVHlwZVZhcmlhYmxlTGl0ZXJhbHMgPQogICAgICBuZXcgU2V0PEZ1bmN0aW9uRW50aXR5PigpOwoKICBmaW5hbCBTZXQ8TG9jYWw+IGxvY2FsRnVuY3Rpb25zVXNpbmdUeXBlVmFyaWFibGVMaXRlcmFscyA9IG5ldyBTZXQ8TG9jYWw+KCk7CgogIE1hcDxTZWxlY3RvciwgU2V0PEVudGl0eT4+IHNlbGVjdG9yc05lZWRpbmdUeXBlQXJndW1lbnRzRm9yVGVzdGluZzsKCiAgTWFwPEdlbmVyaWNJbnN0YW50aWF0aW9uLCBTZXQ8RW50aXR5Pj4KICAgICAgaW5zdGFudGlhdGlvbnNOZWVkaW5nVHlwZUFyZ3VtZW50c0ZvclRlc3Rpbmc7CgogIGZpbmFsIFNldDxHZW5lcmljSW5zdGFudGlhdGlvbj4gX2dlbmVyaWNJbnN0YW50aWF0aW9ucyA9CiAgICAgIG5ldyBTZXQ8R2VuZXJpY0luc3RhbnRpYXRpb24+KCk7CgogIFR5cGVWYXJpYWJsZVRlc3RzIHR5cGVWYXJpYWJsZVRlc3RzRm9yVGVzdGluZzsKCiAgUnVudGltZVR5cGVzTmVlZEJ1aWxkZXJJbXBsKHRoaXMuX2VsZW1lbnRFbnZpcm9ubWVudCk7CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJDbGFzc1VzaW5nVHlwZVZhcmlhYmxlTGl0ZXJhbChDbGFzc0VudGl0eSBjbHMpIHsKICAgIGNsYXNzZXNVc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWxzLmFkZChjbHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck1ldGhvZFVzaW5nVHlwZVZhcmlhYmxlTGl0ZXJhbChGdW5jdGlvbkVudGl0eSBtZXRob2QpIHsKICAgIG1ldGhvZHNVc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWxzLmFkZChtZXRob2QpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckxvY2FsRnVuY3Rpb25Vc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWwoTG9jYWwgbG9jYWxGdW5jdGlvbikgewogICAgbG9jYWxGdW5jdGlvbnNVc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWxzLmFkZChsb2NhbEZ1bmN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJHZW5lcmljSW5zdGFudGlhdGlvbihHZW5lcmljSW5zdGFudGlhdGlvbiBpbnN0YW50aWF0aW9uKSB7CiAgICBfZ2VuZXJpY0luc3RhbnRpYXRpb25zLmFkZChpbnN0YW50aWF0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIFJ1bnRpbWVUeXBlc05lZWQgY29tcHV0ZVJ1bnRpbWVUeXBlc05lZWQoCiAgICAgIEtDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMpIHsKICAgIFR5cGVWYXJpYWJsZVRlc3RzIHR5cGVWYXJpYWJsZVRlc3RzID0gbmV3IFR5cGVWYXJpYWJsZVRlc3RzKAogICAgICAgIGNsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgICBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cywKICAgICAgICBjbG9zZWRXb3JsZC5kYXJ0VHlwZXMsCiAgICAgICAgY2xvc2VkV29ybGQsCiAgICAgICAgX2dlbmVyaWNJbnN0YW50aWF0aW9ucyk7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXNOZWVkaW5nVHlwZUFyZ3VtZW50cyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CiAgICBTZXQ8RnVuY3Rpb25FbnRpdHk+IG1ldGhvZHNOZWVkaW5nU2lnbmF0dXJlID0gbmV3IFNldDxGdW5jdGlvbkVudGl0eT4oKTsKICAgIFNldDxGdW5jdGlvbkVudGl0eT4gbWV0aG9kc05lZWRpbmdUeXBlQXJndW1lbnRzID0gbmV3IFNldDxGdW5jdGlvbkVudGl0eT4oKTsKICAgIFNldDxMb2NhbD4gbG9jYWxGdW5jdGlvbnNOZWVkaW5nU2lnbmF0dXJlID0gbmV3IFNldDxMb2NhbD4oKTsKICAgIFNldDxMb2NhbD4gbG9jYWxGdW5jdGlvbnNOZWVkaW5nVHlwZUFyZ3VtZW50cyA9IG5ldyBTZXQ8TG9jYWw+KCk7CiAgICBTZXQ8RW50aXR5PiBwcm9jZXNzZWRFbnRpdGllcyA9IG5ldyBTZXQ8RW50aXR5PigpOwoKICAgIC8vIEZpbmQgdGhlIGNsYXNzZXMgdGhhdCBuZWVkIHR5cGUgYXJndW1lbnRzIGF0IHJ1bnRpbWUuIFN1Y2gKICAgIC8vIGNsYXNzZXMgYXJlOgogICAgLy8gKDEpIHVzZWQgaW4gYW4gaXMgY2hlY2sgd2l0aCB0eXBlIHZhcmlhYmxlcywKICAgIC8vICgyKSBkZXBlbmRlbmNpZXMgb2YgY2xhc3NlcyBpbiAoMSksCiAgICAvLyAoMykgc3ViY2xhc3NlcyBvZiAoMikgYW5kICgzKS4KICAgIHZvaWQgcG90ZW50aWFsbHlOZWVkVHlwZUFyZ3VtZW50cyhFbnRpdHkgZW50aXR5KSB7CiAgICAgIC8vIEZ1bmN0aW9ucyB3aXRoIHR5cGUgYXJndW1lbnRzIGNhbiBoYXZlIGRlcGVuZGVuY2llcyBvZiBlYWNoIG90aGVyIChpZgogICAgICAvLyB0aGUgZnVuY3Rpb25zIGNhbGwgZWFjaCBvdGhlcikgc28gd2Uga2VlcCBhIHNldCB0byBwcmV2ZW50IGluZmluaXRlbHkKICAgICAgLy8gcmVjdXJzaW5nIG92ZXIgdGhlIHNhbWUgZW50aXRpZXMuCiAgICAgIGlmIChwcm9jZXNzZWRFbnRpdGllcy5jb250YWlucyhlbnRpdHkpKSByZXR1cm47CgogICAgICBwcm9jZXNzZWRFbnRpdGllcy5hZGQoZW50aXR5KTsKICAgICAgaWYgKGVudGl0eSBpcyBDbGFzc0VudGl0eSkgewogICAgICAgIENsYXNzRW50aXR5IGNscyA9IGVudGl0eTsKICAgICAgICBpZiAoIV9lbGVtZW50RW52aXJvbm1lbnQuaXNHZW5lcmljQ2xhc3MoY2xzKSkgcmV0dXJuOwogICAgICAgIGlmIChjbGFzc2VzTmVlZGluZ1R5cGVBcmd1bWVudHMuY29udGFpbnMoY2xzKSkgcmV0dXJuOwogICAgICAgIGNsYXNzZXNOZWVkaW5nVHlwZUFyZ3VtZW50cy5hZGQoY2xzKTsKCiAgICAgICAgLy8gVE9ETyhuZ2VvZmZyYXkpOiBUaGlzIHNob3VsZCB1c2Ugc3ViY2xhc3Nlcywgbm90IHN1YnR5cGVzLgogICAgICAgIGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmZvckVhY2hTdHJpY3RTdWJ0eXBlT2YoY2xzLAogICAgICAgICAgICAoQ2xhc3NFbnRpdHkgc3ViKSB7CiAgICAgICAgICBwb3RlbnRpYWxseU5lZWRUeXBlQXJndW1lbnRzKHN1Yik7CiAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RlcC5DT05USU5VRTsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIGlmIChlbnRpdHkgaXMgRnVuY3Rpb25FbnRpdHkpIHsKICAgICAgICBtZXRob2RzTmVlZGluZ1R5cGVBcmd1bWVudHMuYWRkKGVudGl0eSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbG9jYWxGdW5jdGlvbnNOZWVkaW5nVHlwZUFyZ3VtZW50cy5hZGQoZW50aXR5KTsKICAgICAgfQoKICAgICAgSXRlcmFibGU8RW50aXR5PiBkZXBlbmRlbmNpZXMgPQogICAgICAgICAgdHlwZVZhcmlhYmxlVGVzdHMuZ2V0VHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzKGVudGl0eSk7CiAgICAgIGRlcGVuZGVuY2llcy5mb3JFYWNoKChFbnRpdHkgb3RoZXIpIHsKICAgICAgICBwb3RlbnRpYWxseU5lZWRUeXBlQXJndW1lbnRzKG90aGVyKTsKICAgICAgfSk7CiAgICB9CgogICAgU2V0PExvY2FsPiBsb2NhbEZ1bmN0aW9ucyA9IGNsb3NlZFdvcmxkLmxvY2FsRnVuY3Rpb25zLnRvU2V0KCk7CiAgICBTZXQ8RnVuY3Rpb25FbnRpdHk+IGNsb3N1cml6ZWRNZW1iZXJzID0KICAgICAgICBjbG9zZWRXb3JsZC5jbG9zdXJpemVkTWVtYmVyc1dpdGhGcmVlVHlwZVZhcmlhYmxlcy50b1NldCgpOwoKICAgIC8vIENoZWNrIGxvY2FsIGZ1bmN0aW9ucyBhbmQgY2xvc3VyaXplZCBtZW1iZXJzLgogICAgdm9pZCBjaGVja0Nsb3N1cmVzKHtEYXJ0VHlwZSBwb3RlbnRpYWxTdWJ0eXBlT2Z9KSB7CiAgICAgIGJvb2wgY2hlY2tGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSkgewogICAgICAgIENsYXNzRW50aXR5IGNvbnRleHRDbGFzcyA9IERhcnRUeXBlcy5nZXRDbGFzc0NvbnRleHQoZnVuY3Rpb25UeXBlKTsKICAgICAgICBpZiAoY29udGV4dENsYXNzICE9IG51bGwgJiYKICAgICAgICAgICAgKHBvdGVudGlhbFN1YnR5cGVPZiA9PSBudWxsIHx8CiAgICAgICAgICAgICAgICBjbG9zZWRXb3JsZC5kYXJ0VHlwZXMKICAgICAgICAgICAgICAgICAgICAuaXNQb3RlbnRpYWxTdWJ0eXBlKGZ1bmN0aW9uVHlwZSwgcG90ZW50aWFsU3VidHlwZU9mKSkpIHsKICAgICAgICAgIHBvdGVudGlhbGx5TmVlZFR5cGVBcmd1bWVudHMoY29udGV4dENsYXNzKTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAgIFNldDxMb2NhbD4gbG9jYWxGdW5jdGlvbnNUb1JlbW92ZTsKICAgICAgU2V0PEZ1bmN0aW9uRW50aXR5PiBjbG9zdXJpemVkTWVtYmVyc1RvUmVtb3ZlOwogICAgICBmb3IgKExvY2FsIGZ1bmN0aW9uIGluIGxvY2FsRnVuY3Rpb25zKSB7CiAgICAgICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9CiAgICAgICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0TG9jYWxGdW5jdGlvblR5cGUoZnVuY3Rpb24pOwogICAgICAgIGlmIChwb3RlbnRpYWxTdWJ0eXBlT2YgPT0gbnVsbCB8fAogICAgICAgICAgICBjbG9zZWRXb3JsZC5kYXJ0VHlwZXMKICAgICAgICAgICAgICAgIC5pc1BvdGVudGlhbFN1YnR5cGUoZnVuY3Rpb25UeXBlLCBwb3RlbnRpYWxTdWJ0eXBlT2YsCiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIHJlZ2lzdGVyIGdlbmVyaWMgaW5zdGFudGlhdGlvbnMKICAgICAgICAgICAgICAgICAgICAvLyBpbnN0ZWFkLgogICAgICAgICAgICAgICAgICAgIGFzc3VtZUluc3RhbnRpYXRpb25zOiBfZ2VuZXJpY0luc3RhbnRpYXRpb25zLmlzTm90RW1wdHkpKSB7CiAgICAgICAgICBmdW5jdGlvblR5cGUuZm9yRWFjaFR5cGVWYXJpYWJsZSgoVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGUpIHsKICAgICAgICAgICAgRW50aXR5IHR5cGVEZWNsYXJhdGlvbiA9IHR5cGVWYXJpYWJsZS5lbGVtZW50LnR5cGVEZWNsYXJhdGlvbjsKICAgICAgICAgICAgaWYgKCFwcm9jZXNzZWRFbnRpdGllcy5jb250YWlucyh0eXBlRGVjbGFyYXRpb24pKSB7CiAgICAgICAgICAgICAgcG90ZW50aWFsbHlOZWVkVHlwZUFyZ3VtZW50cyh0eXBlRGVjbGFyYXRpb24pOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIGxvY2FsRnVuY3Rpb25zTmVlZGluZ1NpZ25hdHVyZS5hZGQoZnVuY3Rpb24pOwogICAgICAgICAgbG9jYWxGdW5jdGlvbnNUb1JlbW92ZSA/Pz0gbmV3IFNldDxMb2NhbD4oKTsKICAgICAgICAgIGxvY2FsRnVuY3Rpb25zVG9SZW1vdmUuYWRkKGZ1bmN0aW9uKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZm9yIChGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiBpbiBjbG9zdXJpemVkTWVtYmVycykgewogICAgICAgIGlmIChjaGVja0Z1bmN0aW9uVHlwZShfZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZShmdW5jdGlvbikpKSB7CiAgICAgICAgICBtZXRob2RzTmVlZGluZ1NpZ25hdHVyZS5hZGQoZnVuY3Rpb24pOwogICAgICAgICAgY2xvc3VyaXplZE1lbWJlcnNUb1JlbW92ZSA/Pz0gbmV3IFNldDxGdW5jdGlvbkVudGl0eT4oKTsKICAgICAgICAgIGNsb3N1cml6ZWRNZW1iZXJzVG9SZW1vdmUuYWRkKGZ1bmN0aW9uKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGxvY2FsRnVuY3Rpb25zVG9SZW1vdmUgIT0gbnVsbCkgewogICAgICAgIGxvY2FsRnVuY3Rpb25zLnJlbW92ZUFsbChsb2NhbEZ1bmN0aW9uc1RvUmVtb3ZlKTsKICAgICAgfQogICAgICBpZiAoY2xvc3VyaXplZE1lbWJlcnNUb1JlbW92ZSAhPSBudWxsKSB7CiAgICAgICAgY2xvc3VyaXplZE1lbWJlcnMucmVtb3ZlQWxsKGNsb3N1cml6ZWRNZW1iZXJzVG9SZW1vdmUpOwogICAgICB9CiAgICB9CgogICAgLy8gQ29tcHV0ZSB0aGUgc2V0IG9mIGFsbCBjbGFzc2VzIGFuZCBtZXRob2RzIHRoYXQgbmVlZCBydW50aW1lIHR5cGUKICAgIC8vIGluZm9ybWF0aW9uLgoKICAgIHZvaWQgcHJvY2Vzc0NoZWNrcyhTZXQ8RGFydFR5cGU+IGNoZWNrcykgewogICAgICBjaGVja3MuZm9yRWFjaCgoRGFydFR5cGUgdHlwZSkgewogICAgICAgIGlmICh0eXBlLmlzSW50ZXJmYWNlVHlwZSkgewogICAgICAgICAgSW50ZXJmYWNlVHlwZSBpdGYgPSB0eXBlOwogICAgICAgICAgaWYgKCFpdGYudHJlYXRBc1JhdykgewogICAgICAgICAgICBwb3RlbnRpYWxseU5lZWRUeXBlQXJndW1lbnRzKGl0Zi5lbGVtZW50KTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgdHlwZS5mb3JFYWNoVHlwZVZhcmlhYmxlKChUeXBlVmFyaWFibGVUeXBlIHR5cGVWYXJpYWJsZSkgewogICAgICAgICAgICAvLyBUaGlzIGhhbmRsZXMgY2hlY2tzIGFnYWluc3QgdHlwZSB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9uIHR5cGVzCiAgICAgICAgICAgIC8vIGNvbnRhaW5pbmcgdHlwZSB2YXJpYWJsZXMuCiAgICAgICAgICAgIEVudGl0eSB0eXBlRGVjbGFyYXRpb24gPSB0eXBlVmFyaWFibGUuZWxlbWVudC50eXBlRGVjbGFyYXRpb247CiAgICAgICAgICAgIHBvdGVudGlhbGx5TmVlZFR5cGVBcmd1bWVudHModHlwZURlY2xhcmF0aW9uKTsKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKHR5cGUuaXNGdW5jdGlvblR5cGUpIHsKICAgICAgICAgICAgY2hlY2tDbG9zdXJlcyhwb3RlbnRpYWxTdWJ0eXBlT2Y6IHR5cGUpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHR5cGUgaXMgRnV0dXJlT3JUeXBlKSB7CiAgICAgICAgICAgIHBvdGVudGlhbGx5TmVlZFR5cGVBcmd1bWVudHMoCiAgICAgICAgICAgICAgICBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5mdXR1cmVDbGFzcyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KCiAgICBwcm9jZXNzQ2hlY2tzKHR5cGVWYXJpYWJsZVRlc3RzLmV4cGxpY2l0SXNDaGVja3MpOwogICAgcHJvY2Vzc0NoZWNrcyh0eXBlVmFyaWFibGVUZXN0cy5pbXBsaWNpdElzQ2hlY2tzKTsKCiAgICAvLyBBZGQgdGhlIGNsYXNzZXMsIG1ldGhvZHMgYW5kIGxvY2FsIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdHlwZSBhcmd1bWVudHMKICAgIC8vIGJlY2F1c2UgdGhleSB1c2UgYSB0eXBlIHZhcmlhYmxlIGFzIGEgbGl0ZXJhbC4KICAgIGNsYXNzZXNVc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWxzLmZvckVhY2gocG90ZW50aWFsbHlOZWVkVHlwZUFyZ3VtZW50cyk7CiAgICBtZXRob2RzVXNpbmdUeXBlVmFyaWFibGVMaXRlcmFscy5mb3JFYWNoKHBvdGVudGlhbGx5TmVlZFR5cGVBcmd1bWVudHMpOwogICAgbG9jYWxGdW5jdGlvbnNVc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWxzCiAgICAgICAgLmZvckVhY2gocG90ZW50aWFsbHlOZWVkVHlwZUFyZ3VtZW50cyk7CgogICAgaWYgKGNsb3NlZFdvcmxkLmlzTWVtYmVyVXNlZCgKICAgICAgICBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5pbnZvY2F0aW9uVHlwZUFyZ3VtZW50R2V0dGVyKSkgewogICAgICAvLyBJZiBgSW52b2NhdGlvbi50eXBlQXJndW1lbnRzYCBpcyBsaXZlLCBtYXJrIGFsbCB1c2VyLWRlZmluZWQKICAgICAgLy8gaW1wbGVtZW50YXRpb25zIG9mIGBub1N1Y2hNZXRob2RgIGFzIG5lZWRpbmcgdHlwZSBhcmd1bWVudHMuCiAgICAgIGZvciAoTWVtYmVyRW50aXR5IG1lbWJlciBpbiBjbG9zZWRXb3JsZC51c2VyTm9TdWNoTWV0aG9kcykgewogICAgICAgIHBvdGVudGlhbGx5TmVlZFR5cGVBcmd1bWVudHMobWVtYmVyKTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgY2hlY2tGdW5jdGlvbihFbnRpdHkgZnVuY3Rpb24sIEZ1bmN0aW9uVHlwZSB0eXBlKSB7CiAgICAgIGZvciAoRnVuY3Rpb25UeXBlVmFyaWFibGUgdHlwZVZhcmlhYmxlIGluIHR5cGUudHlwZVZhcmlhYmxlcykgewogICAgICAgIERhcnRUeXBlIGJvdW5kID0gdHlwZVZhcmlhYmxlLmJvdW5kOwogICAgICAgIGlmICghYm91bmQuaXNEeW5hbWljICYmCiAgICAgICAgICAgICFib3VuZC5pc1ZvaWQgJiYKICAgICAgICAgICAgYm91bmQgIT0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMub2JqZWN0VHlwZSkgewogICAgICAgICAgcG90ZW50aWFsbHlOZWVkVHlwZUFyZ3VtZW50cyhmdW5jdGlvbik7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBjbG9zZWRXb3JsZC5mb3JFYWNoR2VuZXJpY01ldGhvZCgoRnVuY3Rpb25FbnRpdHkgbWV0aG9kKSB7CiAgICAgIGlmIChjbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGEKICAgICAgICAgIC5nZXRQYXJhbWV0ZXJDaGVja1BvbGljeShtZXRob2QpCiAgICAgICAgICAuaXNFbWl0dGVkKSB7CiAgICAgICAgY2hlY2tGdW5jdGlvbihtZXRob2QsIF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlKG1ldGhvZCkpOwogICAgICB9CiAgICB9KTsKICAgIGZvciAoS0xvY2FsRnVuY3Rpb24gZnVuY3Rpb24gaW4gY2xvc2VkV29ybGQuZ2VuZXJpY0xvY2FsRnVuY3Rpb25zKSB7CiAgICAgIGlmIChjbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGEKICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1cHBvcnQgQHByYWdtYSBvbiBsb2NhbCBmdW5jdGlvbnMgYW5kIHVzZQogICAgICAgICAgLy8gdGhpcyBoZXJlIGluc3RlYWQgb2YgdGhlIGVuY2xvc2luZyBtZW1iZXIuCiAgICAgICAgICAuZ2V0UGFyYW1ldGVyQ2hlY2tQb2xpY3koZnVuY3Rpb24ubWVtYmVyQ29udGV4dCkKICAgICAgICAgIC5pc0VtaXR0ZWQpIHsKICAgICAgICBjaGVja0Z1bmN0aW9uKAogICAgICAgICAgICBmdW5jdGlvbiwgX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRMb2NhbEZ1bmN0aW9uVHlwZShmdW5jdGlvbikpOwogICAgICB9CiAgICB9CgogICAgQmFja2VuZFVzYWdlIGJhY2tlbmRVc2FnZSA9IGNsb3NlZFdvcmxkLmJhY2tlbmRVc2FnZTsKICAgIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzID0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHM7CgogICAgLy8vIFNldCB0byBgdHJ1ZWAgaWYgc3ViY2xhc3NlcyBvZiBgT2JqZWN0YCBuZWVkIHJ1bnRpbWVUeXBlLiBUaGlzIGlzCiAgICAvLy8gb25seSB1c2VkIHRvIHN0b3AgdGhlIGNvbXB1dGF0aW9uIGVhcmx5LgogICAgYm9vbCBuZWVkZWRPbkFsbCA9IGZhbHNlOwoKICAgIC8vLyBTZXQgdG8gYHRydWVgIGlmIHN1YmNsYXNzZXMgb2YgYEZ1bmN0aW9uYCBuZWVkIHJ1bnRpbWVUeXBlLgogICAgYm9vbCBuZWVkZWRPbkZ1bmN0aW9ucyA9IGZhbHNlOwoKICAgIFNldDxDbGFzc0VudGl0eT4gY2xhc3Nlc0RpcmVjdGx5TmVlZGluZ1J1bnRpbWVUeXBlID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKCiAgICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gaW1wbGllZENsYXNzZXMoRGFydFR5cGUgdHlwZSkgewogICAgICBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgcmV0dXJuIFt0eXBlLmVsZW1lbnRdOwogICAgICB9IGVsc2UgaWYgKHR5cGUgaXMgRHluYW1pY1R5cGUpIHsKICAgICAgICByZXR1cm4gW2NvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzXTsKICAgICAgfSBlbHNlIGlmICh0eXBlIGlzIEZ1bmN0aW9uVHlwZSkgewogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEluY2x1ZGUgb25seSBwb3RlbnRpYWwgZnVuY3Rpb24gdHlwZSBzdWJ0eXBlcy4KICAgICAgICByZXR1cm4gW2NvbW1vbkVsZW1lbnRzLmZ1bmN0aW9uQ2xhc3NdOwogICAgICB9IGVsc2UgaWYgKHR5cGUgaXMgVm9pZFR5cGUpIHsKICAgICAgICAvLyBObyBjbGFzc2VzIGltcGxpZWQuCiAgICAgIH0gZWxzZSBpZiAodHlwZSBpcyBGdW5jdGlvblR5cGVWYXJpYWJsZSkgewogICAgICAgIHJldHVybiBpbXBsaWVkQ2xhc3Nlcyh0eXBlLmJvdW5kKTsKICAgICAgfSBlbHNlIGlmICh0eXBlIGlzIEZ1dHVyZU9yVHlwZSkgewogICAgICAgIHJldHVybiBbY29tbW9uRWxlbWVudHMuZnV0dXJlQ2xhc3NdCiAgICAgICAgICAuLmFkZEFsbChpbXBsaWVkQ2xhc3Nlcyh0eXBlLnR5cGVBcmd1bWVudCkpOwogICAgICB9IGVsc2UgaWYgKHR5cGUgaXMgVHlwZVZhcmlhYmxlVHlwZSkgewogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENhbiB3ZSBkbyBiZXR0ZXI/CiAgICAgICAgcmV0dXJuIGltcGxpZWRDbGFzc2VzKAogICAgICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmdldFR5cGVWYXJpYWJsZUJvdW5kKHR5cGUuZWxlbWVudCkpOwogICAgICB9CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdVbmV4cGVjdGVkIHR5cGUgJHR5cGUnKTsKICAgIH0KCiAgICB2b2lkIGFkZENsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgICBpZiAoY2xzICE9IG51bGwpIHsKICAgICAgICBjbGFzc2VzRGlyZWN0bHlOZWVkaW5nUnVudGltZVR5cGUuYWRkKGNscyk7CiAgICAgIH0KICAgICAgaWYgKGNscyA9PSBjb21tb25FbGVtZW50cy5vYmplY3RDbGFzcykgewogICAgICAgIG5lZWRlZE9uQWxsID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoY2xzID09IGNvbW1vbkVsZW1lbnRzLmZ1bmN0aW9uQ2xhc3MpIHsKICAgICAgICBuZWVkZWRPbkZ1bmN0aW9ucyA9IHRydWU7CiAgICAgIH0KICAgIH0KCiAgICBmb3IgKFJ1bnRpbWVUeXBlVXNlIHJ1bnRpbWVUeXBlVXNlIGluIGJhY2tlbmRVc2FnZS5ydW50aW1lVHlwZVVzZXMpIHsKICAgICAgc3dpdGNoIChydW50aW1lVHlwZVVzZS5raW5kKSB7CiAgICAgICAgY2FzZSBSdW50aW1lVHlwZVVzZUtpbmQuc3RyaW5nOgogICAgICAgICAgaWYgKCFvcHRpb25zLmxheFJ1bnRpbWVUeXBlVG9TdHJpbmcpIHsKICAgICAgICAgICAgaW1wbGllZENsYXNzZXMocnVudGltZVR5cGVVc2UucmVjZWl2ZXJUeXBlKS5mb3JFYWNoKGFkZENsYXNzKTsKICAgICAgICAgIH0KCiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFJ1bnRpbWVUeXBlVXNlS2luZC5lcXVhbHM6CiAgICAgICAgICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gcmVjZWl2ZXJDbGFzc2VzID0KICAgICAgICAgICAgICBpbXBsaWVkQ2xhc3NlcyhydW50aW1lVHlwZVVzZS5yZWNlaXZlclR5cGUpOwogICAgICAgICAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGFyZ3VtZW50Q2xhc3NlcyA9CiAgICAgICAgICAgICAgaW1wbGllZENsYXNzZXMocnVudGltZVR5cGVVc2UuYXJndW1lbnRUeXBlKTsKCiAgICAgICAgICBmb3IgKENsYXNzRW50aXR5IHJlY2VpdmVyQ2xhc3MgaW4gcmVjZWl2ZXJDbGFzc2VzKSB7CiAgICAgICAgICAgIGZvciAoQ2xhc3NFbnRpdHkgYXJndW1lbnRDbGFzcyBpbiBhcmd1bWVudENsYXNzZXMpIHsKICAgICAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTcGVjaWFsIGNhc2UgdXNlIG9mIGB0aGlzLnJ1bnRpbWVUeXBlYC4KICAgICAgICAgICAgICBTdWJjbGFzc1Jlc3VsdCByZXN1bHQgPSBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeQogICAgICAgICAgICAgICAgICAuY29tbW9uU3ViY2xhc3NlcyhyZWNlaXZlckNsYXNzLCBDbGFzc1F1ZXJ5LlNVQlRZUEUsCiAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudENsYXNzLCBDbGFzc1F1ZXJ5LlNVQlRZUEUpOwogICAgICAgICAgICAgIHN3aXRjaCAocmVzdWx0LmtpbmQpIHsKICAgICAgICAgICAgICAgIGNhc2UgU3ViY2xhc3NSZXN1bHRLaW5kLkVNUFRZOgogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgU3ViY2xhc3NSZXN1bHRLaW5kLkVYQUNUMToKICAgICAgICAgICAgICAgIGNhc2UgU3ViY2xhc3NSZXN1bHRLaW5kLlNVQkNMQVNTMToKICAgICAgICAgICAgICAgIGNhc2UgU3ViY2xhc3NSZXN1bHRLaW5kLlNVQlRZUEUxOgogICAgICAgICAgICAgICAgICBhZGRDbGFzcyhyZWNlaXZlckNsYXNzKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIFN1YmNsYXNzUmVzdWx0S2luZC5FWEFDVDI6CiAgICAgICAgICAgICAgICBjYXNlIFN1YmNsYXNzUmVzdWx0S2luZC5TVUJDTEFTUzI6CiAgICAgICAgICAgICAgICBjYXNlIFN1YmNsYXNzUmVzdWx0S2luZC5TVUJUWVBFMjoKICAgICAgICAgICAgICAgICAgYWRkQ2xhc3MoYXJndW1lbnRDbGFzcyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBTdWJjbGFzc1Jlc3VsdEtpbmQuU0VUOgogICAgICAgICAgICAgICAgICBmb3IgKENsYXNzRW50aXR5IGNscyBpbiByZXN1bHQuY2xhc3NlcykgewogICAgICAgICAgICAgICAgICAgIGFkZENsYXNzKGNscyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKG5lZWRlZE9uQWxsKSBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgUnVudGltZVR5cGVVc2VLaW5kLnVua25vd246CiAgICAgICAgICBpbXBsaWVkQ2xhc3NlcyhydW50aW1lVHlwZVVzZS5yZWNlaXZlclR5cGUpLmZvckVhY2goYWRkQ2xhc3MpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgaWYgKG5lZWRlZE9uQWxsKSBicmVhazsKICAgIH0KICAgIFNldDxDbGFzc0VudGl0eT4gYWxsQ2xhc3Nlc05lZWRpbmdSdW50aW1lVHlwZTsKICAgIGlmIChuZWVkZWRPbkFsbCkgewogICAgICBuZWVkZWRPbkZ1bmN0aW9ucyA9IHRydWU7CiAgICAgIGFsbENsYXNzZXNOZWVkaW5nUnVudGltZVR5cGUgPSBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeQogICAgICAgICAgLnN1YmNsYXNzZXNPZihjb21tb25FbGVtZW50cy5vYmplY3RDbGFzcykKICAgICAgICAgIC50b1NldCgpOwogICAgfSBlbHNlIHsKICAgICAgYWxsQ2xhc3Nlc05lZWRpbmdSdW50aW1lVHlwZSA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1cHBvcnQgdGhpcyBvcGVyYXRpb24gZGlyZWN0bHkgaW4KICAgICAgLy8gW0Nsb3NlZFdvcmxkXSB1c2luZyB0aGUgW0NsYXNzU2V0XXMuCiAgICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xzIGluIGNsYXNzZXNEaXJlY3RseU5lZWRpbmdSdW50aW1lVHlwZSkgewogICAgICAgIGlmICghYWxsQ2xhc3Nlc05lZWRpbmdSdW50aW1lVHlwZS5jb250YWlucyhjbHMpKSB7CiAgICAgICAgICBhbGxDbGFzc2VzTmVlZGluZ1J1bnRpbWVUeXBlCiAgICAgICAgICAgICAgLmFkZEFsbChjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5zdWJ0eXBlc09mKGNscykpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgYWxsQ2xhc3Nlc05lZWRpbmdSdW50aW1lVHlwZS5mb3JFYWNoKHBvdGVudGlhbGx5TmVlZFR5cGVBcmd1bWVudHMpOwogICAgaWYgKG5lZWRlZE9uRnVuY3Rpb25zKSB7CiAgICAgIGZvciAoTG9jYWwgZnVuY3Rpb24gaW4gY2xvc2VkV29ybGQuZ2VuZXJpY0xvY2FsRnVuY3Rpb25zKSB7CiAgICAgICAgcG90ZW50aWFsbHlOZWVkVHlwZUFyZ3VtZW50cyhmdW5jdGlvbik7CiAgICAgIH0KICAgICAgZm9yIChMb2NhbCBmdW5jdGlvbiBpbiBsb2NhbEZ1bmN0aW9ucykgewogICAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPQogICAgICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmdldExvY2FsRnVuY3Rpb25UeXBlKGZ1bmN0aW9uKTsKICAgICAgICBmdW5jdGlvblR5cGUuZm9yRWFjaFR5cGVWYXJpYWJsZSgoVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGUpIHsKICAgICAgICAgIEVudGl0eSB0eXBlRGVjbGFyYXRpb24gPSB0eXBlVmFyaWFibGUuZWxlbWVudC50eXBlRGVjbGFyYXRpb247CiAgICAgICAgICBpZiAoIXByb2Nlc3NlZEVudGl0aWVzLmNvbnRhaW5zKHR5cGVEZWNsYXJhdGlvbikpIHsKICAgICAgICAgICAgcG90ZW50aWFsbHlOZWVkVHlwZUFyZ3VtZW50cyh0eXBlRGVjbGFyYXRpb24pOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGxvY2FsRnVuY3Rpb25zTmVlZGluZ1NpZ25hdHVyZS5hZGRBbGwobG9jYWxGdW5jdGlvbnMpOwogICAgICB9CiAgICAgIGZvciAoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24KICAgICAgICAgIGluIGNsb3NlZFdvcmxkLmNsb3N1cml6ZWRNZW1iZXJzV2l0aEZyZWVUeXBlVmFyaWFibGVzKSB7CiAgICAgICAgbWV0aG9kc05lZWRpbmdTaWduYXR1cmUuYWRkKGZ1bmN0aW9uKTsKICAgICAgICBwb3RlbnRpYWxseU5lZWRUeXBlQXJndW1lbnRzKGZ1bmN0aW9uLmVuY2xvc2luZ0NsYXNzKTsKICAgICAgfQogICAgfQoKICAgIFNldDxTZWxlY3Rvcj4gc2VsZWN0b3JzTmVlZGluZ1R5cGVBcmd1bWVudHMgPSBuZXcgU2V0PFNlbGVjdG9yPigpOwogICAgdHlwZVZhcmlhYmxlVGVzdHMKICAgICAgICAuZm9yRWFjaEFwcGxpZWRTZWxlY3RvcigoU2VsZWN0b3Igc2VsZWN0b3IsIFNldDxFbnRpdHk+IHRhcmdldHMpIHsKICAgICAgZm9yIChFbnRpdHkgdGFyZ2V0IGluIHRhcmdldHMpIHsKICAgICAgICBpZiAobWV0aG9kc05lZWRpbmdUeXBlQXJndW1lbnRzLmNvbnRhaW5zKHRhcmdldCkgfHwKICAgICAgICAgICAgbG9jYWxGdW5jdGlvbnNOZWVkaW5nVHlwZUFyZ3VtZW50cy5jb250YWlucyh0YXJnZXQpKSB7CiAgICAgICAgICBzZWxlY3RvcnNOZWVkaW5nVHlwZUFyZ3VtZW50cy5hZGQoc2VsZWN0b3IpOwogICAgICAgICAgaWYgKHJldGFpbkRhdGFGb3JUZXN0aW5nKSB7CiAgICAgICAgICAgIHNlbGVjdG9yc05lZWRpbmdUeXBlQXJndW1lbnRzRm9yVGVzdGluZyA/Pz0KICAgICAgICAgICAgICAgIDxTZWxlY3RvciwgU2V0PEVudGl0eT4+e307CiAgICAgICAgICAgIHNlbGVjdG9yc05lZWRpbmdUeXBlQXJndW1lbnRzRm9yVGVzdGluZwogICAgICAgICAgICAgICAgLnB1dElmQWJzZW50KHNlbGVjdG9yLCAoKSA9PiBuZXcgU2V0PEVudGl0eT4oKSkKICAgICAgICAgICAgICAgIC5hZGQodGFyZ2V0KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgU2V0PGludD4gaW5zdGFudGlhdGlvbnNOZWVkaW5nVHlwZUFyZ3VtZW50cyA9IG5ldyBTZXQ8aW50PigpOwogICAgdHlwZVZhcmlhYmxlVGVzdHMuZm9yRWFjaEdlbmVyaWNJbnN0YW50aWF0aW9uKAogICAgICAgIChHZW5lcmljSW5zdGFudGlhdGlvbiBpbnN0YW50aWF0aW9uLCBTZXQ8RW50aXR5PiB0YXJnZXRzKSB7CiAgICAgIGZvciAoRW50aXR5IHRhcmdldCBpbiB0YXJnZXRzKSB7CiAgICAgICAgaWYgKG1ldGhvZHNOZWVkaW5nVHlwZUFyZ3VtZW50cy5jb250YWlucyh0YXJnZXQpIHx8CiAgICAgICAgICAgIGxvY2FsRnVuY3Rpb25zTmVlZGluZ1R5cGVBcmd1bWVudHMuY29udGFpbnModGFyZ2V0KSkgewogICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIHRoZSBzdGF0aWMgdHlwZSBvZiB0aGUgaW5zdGFudGlhdGVkCiAgICAgICAgICAvLyBleHByZXNzaW9uLgogICAgICAgICAgaW5zdGFudGlhdGlvbnNOZWVkaW5nVHlwZUFyZ3VtZW50cwogICAgICAgICAgICAgIC5hZGQoaW5zdGFudGlhdGlvbi50eXBlQXJndW1lbnRzLmxlbmd0aCk7CiAgICAgICAgICBpZiAocmV0YWluRGF0YUZvclRlc3RpbmcpIHsKICAgICAgICAgICAgaW5zdGFudGlhdGlvbnNOZWVkaW5nVHlwZUFyZ3VtZW50c0ZvclRlc3RpbmcgPz89CiAgICAgICAgICAgICAgICA8R2VuZXJpY0luc3RhbnRpYXRpb24sIFNldDxFbnRpdHk+Pnt9OwogICAgICAgICAgICBpbnN0YW50aWF0aW9uc05lZWRpbmdUeXBlQXJndW1lbnRzRm9yVGVzdGluZwogICAgICAgICAgICAgICAgLnB1dElmQWJzZW50KGluc3RhbnRpYXRpb24sICgpID0+IG5ldyBTZXQ8RW50aXR5PigpKQogICAgICAgICAgICAgICAgLmFkZCh0YXJnZXQpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSk7CgogICAgaWYgKHJldGFpbkRhdGFGb3JUZXN0aW5nKSB7CiAgICAgIHR5cGVWYXJpYWJsZVRlc3RzRm9yVGVzdGluZyA9IHR5cGVWYXJpYWJsZVRlc3RzOwogICAgfQoKICAgIC8qcHJpbnQodHlwZVZhcmlhYmxlVGVzdHMuZHVtcCgpKTsKICAgIHByaW50KCctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nKTsKICAgIHByaW50KCdjbGFzc2VzTmVlZGluZ1R5cGVBcmd1bWVudHM6Jyk7CiAgICBjbGFzc2VzTmVlZGluZ1R5cGVBcmd1bWVudHMuZm9yRWFjaCgoZSkgPT4gcHJpbnQoJyAgJGUnKSk7CiAgICBwcmludCgnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJyk7CiAgICBwcmludCgnbWV0aG9kc05lZWRpbmdTaWduYXR1cmU6Jyk7CiAgICBtZXRob2RzTmVlZGluZ1NpZ25hdHVyZS5mb3JFYWNoKChlKSA9PiBwcmludCgnICAkZScpKTsKICAgIHByaW50KCctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nKTsKICAgIHByaW50KCdtZXRob2RzTmVlZGluZ1R5cGVBcmd1bWVudHM6Jyk7CiAgICBtZXRob2RzTmVlZGluZ1R5cGVBcmd1bWVudHMuZm9yRWFjaCgoZSkgPT4gcHJpbnQoJyAgJGUnKSk7CiAgICBwcmludCgnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJyk7CiAgICBwcmludCgnbG9jYWxGdW5jdGlvbnNOZWVkaW5nU2lnbmF0dXJlOicpOwogICAgbG9jYWxGdW5jdGlvbnNOZWVkaW5nU2lnbmF0dXJlLmZvckVhY2goKGUpID0+IHByaW50KCcgICRlJykpOwogICAgcHJpbnQoJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScpOwogICAgcHJpbnQoJ2xvY2FsRnVuY3Rpb25zTmVlZGluZ1R5cGVBcmd1bWVudHM6Jyk7CiAgICBsb2NhbEZ1bmN0aW9uc05lZWRpbmdUeXBlQXJndW1lbnRzLmZvckVhY2goKGUpID0+IHByaW50KCcgICRlJykpOwogICAgcHJpbnQoJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScpOwogICAgcHJpbnQoJ3NlbGVjdG9yc05lZWRpbmdUeXBlQXJndW1lbnRzOicpOwogICAgc2VsZWN0b3JzTmVlZGluZ1R5cGVBcmd1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US1BMTIBJR0lISUoLCctBAIBPXBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19yZXNvbHV0aW9uLmRhcnQyc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvbmF0aXZlL3Jlc29sdmVyLmRhcnSZOy8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IEtFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9pci9hbm5vdGF0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hdGl2ZV9kYXRhLmRhcnQnOwoKLy8vIEludGVyZmFjZSBmb3IgY29tcHV0aW5nIG5hdGl2ZSBtZW1iZXJzLgphYnN0cmFjdCBjbGFzcyBOYXRpdmVNZW1iZXJSZXNvbHZlciB7CiAgLy8vIENvbXB1dGVzIHdoZXRoZXIgW25vZGVdIGlzIG5hdGl2ZSBvciBKc0ludGVyb3AuCiAgdm9pZCByZXNvbHZlTmF0aXZlTWVtYmVyKGlyLk1lbWJlciBub2RlLCBJckFubm90YXRpb25EYXRhIGFubm90YXRpb25EYXRhKTsKfQoKLy8vIERldGVybWluZXMgYWxsIG5hdGl2ZSBjbGFzc2VzIGluIGEgc2V0IG9mIGxpYnJhcmllcy4KYWJzdHJhY3QgY2xhc3MgTmF0aXZlQ2xhc3NGaW5kZXIgewogIC8vLyBSZXR1cm5zIHRoZSBzZXQgb2YgYWxsIG5hdGl2ZSBjbGFzc2VzIGRlY2xhcmVkIGluIFtsaWJyYXJpZXNdLgogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBjb21wdXRlTmF0aXZlQ2xhc3NlcyhJdGVyYWJsZTxVcmk+IGxpYnJhcmllcyk7Cn0KCmNsYXNzIEJhc2VOYXRpdmVDbGFzc0ZpbmRlciBpbXBsZW1lbnRzIE5hdGl2ZUNsYXNzRmluZGVyIHsKICBmaW5hbCBLRWxlbWVudEVudmlyb25tZW50IF9lbGVtZW50RW52aXJvbm1lbnQ7CiAgZmluYWwgTmF0aXZlQmFzaWNEYXRhIF9uYXRpdmVCYXNpY0RhdGE7CgogIE1hcDxTdHJpbmcsIENsYXNzRW50aXR5PiBfdGFnT3duZXIgPSBuZXcgTWFwPFN0cmluZywgQ2xhc3NFbnRpdHk+KCk7CgogIEJhc2VOYXRpdmVDbGFzc0ZpbmRlcih0aGlzLl9lbGVtZW50RW52aXJvbm1lbnQsIHRoaXMuX25hdGl2ZUJhc2ljRGF0YSk7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBjb21wdXRlTmF0aXZlQ2xhc3NlcyhJdGVyYWJsZTxVcmk+IGxpYnJhcmllcykgewogICAgU2V0PENsYXNzRW50aXR5PiBuYXRpdmVDbGFzc2VzID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKICAgIGxpYnJhcmllcy5mb3JFYWNoKCh1cmkpID0+IF9wcm9jZXNzTmF0aXZlQ2xhc3Nlc0luTGlicmFyeSgKICAgICAgICBfZWxlbWVudEVudmlyb25tZW50Lmxvb2t1cExpYnJhcnkodXJpKSwgbmF0aXZlQ2xhc3NlcykpOwogICAgX3Byb2Nlc3NTdWJjbGFzc2VzT2ZOYXRpdmVDbGFzc2VzKGxpYnJhcmllcywgbmF0aXZlQ2xhc3Nlcyk7CiAgICByZXR1cm4gbmF0aXZlQ2xhc3NlczsKICB9CgogIC8vLyBBZGRzIGFsbCBkaXJlY3RseSBuYXRpdmUgY2xhc3NlcyBkZWNsYXJlZCBpbiBbbGlicmFyeV0gdG8gW25hdGl2ZUNsYXNzZXNdLgogIHZvaWQgX3Byb2Nlc3NOYXRpdmVDbGFzc2VzSW5MaWJyYXJ5KAogICAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnksIFNldDxDbGFzc0VudGl0eT4gbmF0aXZlQ2xhc3NlcykgewogICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoQ2xhc3MobGlicmFyeSwgKENsYXNzRW50aXR5IGNscykgewogICAgICBpZiAoX25hdGl2ZUJhc2ljRGF0YS5pc05hdGl2ZUNsYXNzKGNscykpIHsKICAgICAgICBfcHJvY2Vzc05hdGl2ZUNsYXNzKGNscywgbmF0aXZlQ2xhc3Nlcyk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgLy8vIEFkZHMgW2Nsc10gdG8gW25hdGl2ZUNsYXNzZXNdIGFuZCBwZXJmb3JtcyBmdXJ0aGVyIHByb2Nlc3Npbmcgb2YgW2Nsc10sCiAgLy8vIGlmIG5lY2Vzc2FyeS4KICB2b2lkIF9wcm9jZXNzTmF0aXZlQ2xhc3MoCiAgICAgIGNvdmFyaWFudCBDbGFzc0VudGl0eSBjbHMsIFNldDxDbGFzc0VudGl0eT4gbmF0aXZlQ2xhc3NlcykgewogICAgbmF0aXZlQ2xhc3Nlcy5hZGQoY2xzKTsKICAgIC8vIEpzIEludGVyb3AgaW50ZXJmYWNlcyBkbyBub3QgaGF2ZSB0YWdzLgogICAgaWYgKF9uYXRpdmVCYXNpY0RhdGEuaXNKc0ludGVyb3BDbGFzcyhjbHMpKSByZXR1cm47CiAgICAvLyBTaW5jZSB3ZSBtYXAgZnJvbSBkaXNwYXRjaCB0YWdzIHRvIGNsYXNzZXMsIGEgZGlzcGF0Y2ggdGFnIG11c3QgYmUgdXNlZAogICAgLy8gb24gb25seSBvbmUgbmF0aXZlIGNsYXNzLgogICAgZm9yIChTdHJpbmcgdGFnIGluIF9uYXRpdmVCYXNpY0RhdGEuZ2V0TmF0aXZlVGFnc09mQ2xhc3MoY2xzKSkgewogICAgICBDbGFzc0VudGl0eSBvd25lciA9IF90YWdPd25lclt0YWddOwogICAgICBpZiAob3duZXIgIT0gbnVsbCkgewogICAgICAgIGlmIChvd25lciAhPSBjbHMpIHsKICAgICAgICAgIGZhaWxlZEF0KGNscywgIlRhZyAnJHRhZycgYWxyZWFkeSBpbiB1c2UgYnkgJyR7b3duZXIubmFtZX0nIik7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIF90YWdPd25lclt0YWddID0gY2xzOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgc3VwZXIgY2xhc3Mgb2YgW2Nsc10gb3IgYG51bGxgIG9mIFtjbHNdIGhhcwogIC8vLyBubyBleHBsaWNpdCBzdXBlcmNsYXNzLgogIFN0cmluZyBfZmluZEV4dGVuZHNOYW1lT2ZDbGFzcyhjb3ZhcmlhbnQgQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gX2VsZW1lbnRFbnZpcm9ubWVudAogICAgICAgIC5nZXRTdXBlckNsYXNzKGNscywgc2tpcFVubmFtZWRNaXhpbkFwcGxpY2F0aW9uczogdHJ1ZSkKICAgICAgICA/Lm5hbWU7CiAgfQoKICAvLy8gQWRkcyBhbGwgc3ViY2xhc3NlcyBvZiBbbmF0aXZlQ2xhc3Nlc10gZm91bmQgaW4gW2xpYnJhcmllc10gdG8KICAvLy8gW25hdGl2ZUNsYXNzZXNdLgogIHZvaWQgX3Byb2Nlc3NTdWJjbGFzc2VzT2ZOYXRpdmVDbGFzc2VzKAogICAgICBJdGVyYWJsZTxVcmk+IGxpYnJhcmllcywgU2V0PENsYXNzRW50aXR5PiBuYXRpdmVDbGFzc2VzKSB7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IG5hdGl2ZUNsYXNzZXNBbmRTdWJjbGFzc2VzID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKICAgIC8vIENvbGxlY3QgcG90ZW50aWFsIHN1YmNsYXNzZXMsIGUuZy4KICAgIC8vCiAgICAvLyAgICAgY2xhc3MgQiBleHRlbmRzIGZvby5BIHt9CiAgICAvLwogICAgLy8gU3RyaW5nICJBIiBoYXMgYSBwb3RlbnRpYWwgc3ViY2xhc3MgQi4KCiAgICBNYXA8U3RyaW5nLCBTZXQ8Q2xhc3NFbnRpdHk+PiBwb3RlbnRpYWxFeHRlbmRzID0KICAgICAgICA8U3RyaW5nLCBTZXQ8Q2xhc3NFbnRpdHk+Pnt9OwoKICAgIGxpYnJhcmllcy5mb3JFYWNoKChVcmkgdXJpKSB7CiAgICAgIExpYnJhcnlFbnRpdHkgbGlicmFyeSA9IF9lbGVtZW50RW52aXJvbm1lbnQubG9va3VwTGlicmFyeSh1cmkpOwogICAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hDbGFzcyhsaWJyYXJ5LCAoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICAgICAgU3RyaW5nIGV4dGVuZHNOYW1lID0gX2ZpbmRFeHRlbmRzTmFtZU9mQ2xhc3MoY2xzKTsKICAgICAgICBpZiAoZXh0ZW5kc05hbWUgIT0gbnVsbCkgewogICAgICAgICAgU2V0PENsYXNzRW50aXR5PiBwb3RlbnRpYWxTdWJjbGFzc2VzID0gcG90ZW50aWFsRXh0ZW5kcy5wdXRJZkFic2VudCgKICAgICAgICAgICAgICBleHRlbmRzTmFtZSwgKCkgPT4gbmV3IFNldDxDbGFzc0VudGl0eT4oKSk7CiAgICAgICAgICBwb3RlbnRpYWxTdWJjbGFzc2VzLmFkZChjbHMpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKCiAgICAvLyBSZXNvbHZlIGFsbCB0aGUgbmF0aXZlIGNsYXNzZXMgYW5kIGFueSBjbGFzc2VzIHRoYXQgbWlnaHQgZXh0ZW5kIHRoZW0gaW4KICAgIC8vIFtwb3RlbnRpYWxFeHRlbmRzXSwgYW5kIHRoZW4gY2hlY2sgdGhhdCB0aGUgcHJvcGVybHkgcmVzb2x2ZWQgY2xhc3MgaXMgaW4KICAgIC8vIGZhY3QgYSBzdWJjbGFzcyBvZiBhIG5hdGl2ZSBjbGFzcy4KCiAgICBDbGFzc0VudGl0eSBuYXRpdmVTdXBlcmNsYXNzT2YoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICAgIGlmIChfbmF0aXZlQmFzaWNEYXRhLmlzTmF0aXZlQ2xhc3MoY2xzKSkgcmV0dXJuIGNsczsKICAgICAgQ2xhc3NFbnRpdHkgc3VwZXJjbGFzcyA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0U3VwZXJDbGFzcyhjbHMpOwogICAgICBpZiAoc3VwZXJjbGFzcyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuIG5hdGl2ZVN1cGVyY2xhc3NPZihzdXBlcmNsYXNzKTsKICAgIH0KCiAgICB2b2lkIHdhbGtQb3RlbnRpYWxTdWJjbGFzc2VzKENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgICAgaWYgKG5hdGl2ZUNsYXNzZXNBbmRTdWJjbGFzc2VzLmNvbnRhaW5zKGVsZW1lbnQpKSByZXR1cm47CiAgICAgIENsYXNzRW50aXR5IG5hdGl2ZVN1cGVyY2xhc3MgPSBuYXRpdmVTdXBlcmNsYXNzT2YoZWxlbWVudCk7CiAgICAgIGlmIChuYXRpdmVTdXBlcmNsYXNzICE9IG51bGwpIHsKICAgICAgICBuYXRpdmVDbGFzc2VzQW5kU3ViY2xhc3Nlcy5hZGQoZWxlbWVudCk7CiAgICAgICAgU2V0PENsYXNzRW50aXR5PiBwb3RlbnRpYWxTdWJjbGFzc2VzID0gcG90ZW50aWFsRXh0ZW5kc1tlbGVtZW50Lm5hbWVdOwogICAgICAgIGlmIChwb3RlbnRpYWxTdWJjbGFzc2VzICE9IG51bGwpIHsKICAgICAgICAgIHBvdGVudGlhbFN1YmNsYXNzZXMuZm9yRWFjaCh3YWxrUG90ZW50aWFsU3ViY2xhc3Nlcyk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgbmF0aXZlQ2xhc3Nlcy5mb3JFYWNoKHdhbGtQb3RlbnRpYWxTdWJjbGFzc2VzKTsKICAgIG5hdGl2ZUNsYXNzZXMuYWRkQWxsKG5hdGl2ZUNsYXNzZXNBbmRTdWJjbGFzc2VzKTsKICB9Cn0KCi8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbdmFsdWVdIGlzIG5hbWVkIGFubm90YXRpb24gYmFzZWQgb24gW2Fubm90YXRpb25DbGFzc10uCmJvb2wgaXNBbm5vdGF0aW9uKAogICAgU3Bhbm5hYmxlIHNwYW5uYWJsZSwgQ29uc3RhbnRWYWx1ZSB2YWx1ZSwgQ2xhc3NFbnRpdHkgYW5ub3RhdGlvbkNsYXNzKSB7CiAgaWYgKCF2YWx1ZS5pc0NvbnN0cnVjdGVkT2JqZWN0KSByZXR1cm4gbnVsbDsKICBDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUgY29uc3RydWN0ZWRPYmplY3QgPSB2YWx1ZTsKICByZXR1cm4gY29uc3RydWN0ZWRPYmplY3QudHlwZS5lbGVtZW50ID09IGFubm90YXRpb25DbGFzczsKfQoKLy8vIEV4dHJhY3RzIHRoZSBuYW1lIGlmIFt2YWx1ZV0gaXMgYSBuYW1lZCBhbm5vdGF0aW9uIGJhc2VkIG9uCi8vLyBbYW5ub3RhdGlvbkNsYXNzXSwgb3RoZXJ3aXNlIHJldHVybnMgYG51bGxgLgpTdHJpbmcgcmVhZEFubm90YXRpb25OYW1lKAogICAgU3Bhbm5hYmxlIHNwYW5uYWJsZSwgQ29uc3RhbnRWYWx1ZSB2YWx1ZSwgQ2xhc3NFbnRpdHkgYW5ub3RhdGlvbkNsYXNzLAogICAge1N0cmluZyBkZWZhdWx0VmFsdWV9KSB7CiAgaWYgKCF2YWx1ZS5pc0NvbnN0cnVjdGVkT2JqZWN0KSByZXR1cm4gbnVsbDsKICBDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUgY29uc3RydWN0ZWRPYmplY3QgPSB2YWx1ZTsKICBpZiAoY29uc3RydWN0ZWRPYmplY3QudHlwZS5lbGVtZW50ICE9IGFubm90YXRpb25DbGFzcykgcmV0dXJuIG51bGw7CgogIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IGZpZWxkcyA9IGNvbnN0cnVjdGVkT2JqZWN0LmZpZWxkcy52YWx1ZXM7CiAgLy8gVE9ETyhzcmEpOiBCZXR0ZXIgdmFsaWRhdGlvbiBvZiB0aGUgY29uc3RhbnQuCiAgaWYgKGZpZWxkcy5sZW5ndGggIT0gMSkgewogICAgZmFpbGVkQXQoCiAgICAgICAgc3Bhbm5hYmxlLCAnQW5ub3RhdGlvbnMgbmVlZHMgb25lIHN0cmluZzogJHt2YWx1ZS50b1N0cnVjdHVyZWRUZXh0KCl9Jyk7CiAgICByZXR1cm4gbnVsbDsKICB9IGVsc2UgaWYgKGZpZWxkcy5zaW5nbGUgaXMgU3RyaW5nQ29uc3RhbnRWYWx1ZSkgewogICAgU3RyaW5nQ29uc3RhbnRWYWx1ZSBzcGVjU3RyaW5nQ29uc3RhbnQgPSBmaWVsZHMuc2luZ2xlOwogICAgcmV0dXJuIHNwZWNTdHJpbmdDb25zdGFudC5zdHJpbmdWYWx1ZTsKICB9IGVsc2UgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsICYmIGZpZWxkcy5zaW5nbGUgaXMgTnVsbENvbnN0YW50VmFsdWUpIHsKICAgIHJldHVybiBkZWZhdWx0VmFsdWU7CiAgfSBlbHNlIHsKICAgIGZhaWxlZEF0KAogICAgICAgIHNwYW5uYWJsZSwgJ0Fubm90YXRpb25zIG5lZWRzIG9uZSBzdHJpbmc6ICR7dmFsdWUudG9TdHJ1Y3R1cmVkVGV4dCgpfScpOwogICAgcmV0dXJuIG51bGw7CiAgfQp9CoCrAE5OPAEoARk7IyQhKQEsJjZNAgE5I0VHAgE7MSoBRwFKAQxIPT9BQRoEAVEnP0IxMQgIBAFOFBxDHC84TyFFKhscSQoPHggGBAFKHj4fQBAEAUUXKkFKKgckBy4BNSYBIkZEOyNPOigKCggBUFEqATY7RystBgE4QEImMU8rQAoIBgE0NgQCAU4TTS82PAIBQDEbSx0vNkYBRDMcDlERNTwrSxkLDlERBAIBKXBhY2thZ2U6Y29tcGlsZXIvc3JjL25hdGl2ZS9yZXNvbHZlci5kYXJ0N3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2tlcm5lbC9kZWZlcnJlZF9sb2FkLmRhcnSaHC8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGtlcm5lbC5kZWZlcnJlZF9sb2FkX2RhdGE7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKCmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL2NvbXBpbGVyLmRhcnQnIHNob3cgQ29tcGlsZXI7CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9kZWZlcnJlZF9sb2FkLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2lyL3V0aWwuZGFydCc7CmltcG9ydCAnZWxlbWVudF9tYXAuZGFydCc7CgpjbGFzcyBLZXJuZWxEZWZlcnJlZExvYWRUYXNrIGV4dGVuZHMgRGVmZXJyZWRMb2FkVGFzayB7CiAgS2VybmVsVG9FbGVtZW50TWFwIF9lbGVtZW50TWFwOwogIE1hcDxpci5MaWJyYXJ5LCBTZXQ8aXIuTmFtZWROb2RlPj4gX2FkZGl0aW9uYWxFeHBvcnRzU2V0cyA9CiAgICAgIDxpci5MaWJyYXJ5LCBTZXQ8aXIuTmFtZWROb2RlPj57fTsKCiAgS2VybmVsRGVmZXJyZWRMb2FkVGFzayhDb21waWxlciBjb21waWxlciwgdGhpcy5fZWxlbWVudE1hcCkgOiBzdXBlcihjb21waWxlcik7CgogIEl0ZXJhYmxlPEltcG9ydEVudGl0eT4gX2ZpbmRJbXBvcnRzVG8oaXIuTmFtZWROb2RlIG5vZGUsIFN0cmluZyBub2RlTmFtZSwKICAgICAgaXIuTGlicmFyeSBlbmNsb3NpbmdMaWJyYXJ5LCBMaWJyYXJ5RW50aXR5IGxpYnJhcnkpIHsKICAgIHJldHVybiBtZWFzdXJlU3VidGFzaygnZmluZC1pbXBvcnRzJywgKCkgewogICAgICBMaXN0PEltcG9ydEVudGl0eT4gaW1wb3J0cyA9IFtdOwogICAgICBpci5MaWJyYXJ5IHNvdXJjZSA9IF9lbGVtZW50TWFwLmdldExpYnJhcnlOb2RlKGxpYnJhcnkpOwogICAgICBpZiAoIXNvdXJjZS5kZXBlbmRlbmNpZXMuYW55KChkKSA9PiBkLmlzRGVmZXJyZWQpKSByZXR1cm4gY29uc3QgW107CiAgICAgIGZvciAoaXIuTGlicmFyeURlcGVuZGVuY3kgZGVwZW5kZW5jeSBpbiBzb3VyY2UuZGVwZW5kZW5jaWVzKSB7CiAgICAgICAgaWYgKGRlcGVuZGVuY3kuaXNFeHBvcnQpIGNvbnRpbnVlOwogICAgICAgIGlmICghX2lzVmlzaWJsZShkZXBlbmRlbmN5LmNvbWJpbmF0b3JzLCBub2RlTmFtZSkpIGNvbnRpbnVlOwogICAgICAgIGlmIChlbmNsb3NpbmdMaWJyYXJ5ID09IGRlcGVuZGVuY3kudGFyZ2V0TGlicmFyeSB8fAogICAgICAgICAgICBhZGRpdGlvbmFsRXhwb3J0cyhkZXBlbmRlbmN5LnRhcmdldExpYnJhcnkpLmNvbnRhaW5zKG5vZGUpKSB7CiAgICAgICAgICBpbXBvcnRzLmFkZChfZWxlbWVudE1hcC5nZXRJbXBvcnQoZGVwZW5kZW5jeSkpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gaW1wb3J0czsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8SW1wb3J0RW50aXR5PiBjbGFzc0ltcG9ydHNUbygKICAgICAgQ2xhc3NFbnRpdHkgZWxlbWVudCwgTGlicmFyeUVudGl0eSBsaWJyYXJ5KSB7CiAgICBpci5DbGFzcyBub2RlID0gX2VsZW1lbnRNYXAuZ2V0Q2xhc3NOb2RlKGVsZW1lbnQpOwogICAgcmV0dXJuIF9maW5kSW1wb3J0c1RvKG5vZGUsIG5vZGUubmFtZSwgbm9kZS5lbmNsb3NpbmdMaWJyYXJ5LCBsaWJyYXJ5KTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPEltcG9ydEVudGl0eT4gdHlwZWRlZkltcG9ydHNUbygKICAgICAgVHlwZWRlZkVudGl0eSBlbGVtZW50LCBMaWJyYXJ5RW50aXR5IGxpYnJhcnkpIHsKICAgIGlyLlR5cGVkZWYgbm9kZSA9IF9lbGVtZW50TWFwLmdldFR5cGVkZWZOb2RlKGVsZW1lbnQpOwogICAgcmV0dXJuIF9maW5kSW1wb3J0c1RvKG5vZGUsIG5vZGUubmFtZSwgbm9kZS5lbmNsb3NpbmdMaWJyYXJ5LCBsaWJyYXJ5KTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPEltcG9ydEVudGl0eT4gbWVtYmVySW1wb3J0c1RvKAogICAgICBFbnRpdHkgZWxlbWVudCwgTGlicmFyeUVudGl0eSBsaWJyYXJ5KSB7CiAgICBpci5NZW1iZXIgbm9kZSA9IF9lbGVtZW50TWFwLmdldE1lbWJlck5vZGUoZWxlbWVudCk7CiAgICByZXR1cm4gX2ZpbmRJbXBvcnRzVG8oCiAgICAgICAgbm9kZSBpcyBpci5Db25zdHJ1Y3RvciA/IG5vZGUuZW5jbG9zaW5nQ2xhc3MgOiBub2RlLAogICAgICAgIG5vZGUgaXMgaXIuQ29uc3RydWN0b3IgPyBub2RlLmVuY2xvc2luZ0NsYXNzLm5hbWUgOiBub2RlLm5hbWUubmFtZSwKICAgICAgICBub2RlLmVuY2xvc2luZ0xpYnJhcnksCiAgICAgICAgbGlicmFyeSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNoZWNrRm9yRGVmZXJyZWRFcnJvckNhc2VzKExpYnJhcnlFbnRpdHkgbGlicmFyeSkgewogICAgLy8gTm90aGluZyB0byBkby4gVGhlIEZFIGNoZWNrcyBmb3IgZXJyb3IgY2FzZXMgdXBmcm9udC4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgY29sbGVjdENvbnN0YW50c0Zyb21NZXRhZGF0YSgKICAgICAgRW50aXR5IGVsZW1lbnQsIFNldDxDb25zdGFudFZhbHVlPiBjb25zdGFudHMpIHsKICAgIC8vIE5vdGhpbmcgdG8gZG8uIEtlcm5lbC1waXBlbGluZSBkb2Vzbid0IHN1cHBvcnQgbWlycm9ycywgc28gd2UgZG9uJ3QgbmVlZAogICAgLy8gdG8gdHJhY2sgYW55IGNvbnN0YW50cyBmcm9tIG1ldGEtZGF0YS4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgY29sbGVjdENvbnN0YW50c0luQm9keShNZW1iZXJFbnRpdHkgZWxlbWVudCwgRGVwZW5kZW5jaWVzIGRlcGVuZGVuY2llcykgewogICAgaXIuTWVtYmVyIG5vZGUgPSBfZWxlbWVudE1hcC5nZXRNZW1iZXJOb2RlKGVsZW1lbnQpOwoKICAgIC8vIEZldGNoIHRoZSBpbnRlcm5hbCBub2RlIGluIG9yZGVyIHRvIHNraXAgYW5ub3RhdGlvbnMgb24gdGhlIG1lbWJlci4KICAgIC8vIFRPRE8oc2lnbXVuZCk6IHJlcGxhY2UgdGhpcyBwYXR0ZXJuIHdoZW4gdGhlIGtlcm5lbC1hc3QgcHJvdmlkZXMgYSBiZXR0ZXIKICAgIC8vIHdheSB0byBza2lwIGFubm90YXRpb25zIChpc3N1ZSAzMTU2NSkuCiAgICB2YXIgdmlzaXRvciA9IG5ldyBDb25zdGFudENvbGxlY3RvcihfZWxlbWVudE1hcCwgZGVwZW5kZW5jaWVzKTsKICAgIGlmIChub2RlIGlzIGlyLkZpZWxkKSB7CiAgICAgIG5vZGUuaW5pdGlhbGl6ZXI/LmFjY2VwdCh2aXNpdG9yKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChub2RlIGlzIGlyLkNvbnN0cnVjdG9yKSB7CiAgICAgIG5vZGUuaW5pdGlhbGl6ZXJzLmZvckVhY2goKGkpID0+IGkuYWNjZXB0KHZpc2l0b3IpKTsKICAgIH0KICAgIG5vZGUuZnVuY3Rpb24/LmFjY2VwdCh2aXNpdG9yKTsKICB9CgogIFNldDxpci5OYW1lZE5vZGU+IGFkZGl0aW9uYWxFeHBvcnRzKGlyLkxpYnJhcnkgbGlicmFyeSkgewogICAgcmV0dXJuIF9hZGRpdGlvbmFsRXhwb3J0c1NldHNbbGlicmFyeV0gPz89IG5ldyBTZXQ8aXIuTmFtZWROb2RlPi5mcm9tKAogICAgICAgIGxpYnJhcnkuYWRkaXRpb25hbEV4cG9ydHMubWFwKChpci5SZWZlcmVuY2UgcmVmKSA9PiByZWYubm9kZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjbGVhbnVwKCkgewogICAgX2FkZGl0aW9uYWxFeHBvcnRzU2V0cyA9IG51bGw7CiAgfQp9CgovLy8gUmV0dXJucyB3aGV0aGVyIFtuYW1lXSB3b3VsZCBiZSB2aXNpYmxlIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gbGlzdCBvZgovLy8gc2hvdy9oaWRlIFtjb21iaW5hdG9yc10uCmJvb2wgX2lzVmlzaWJsZShMaXN0PGlyLkNvbWJpbmF0b3I+IGNvbWJpbmF0b3JzLCBTdHJpbmcgbmFtZSkgewogIGZvciAodmFyIGMgaW4gY29tYmluYXRvcnMpIHsKICAgIGlmIChjLmlzU2hvdyAmJiAhYy5uYW1lcy5jb250YWlucyhuYW1lKSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGMuaXNIaWRlICYmIGMubmFtZXMuY29udGFpbnMobmFtZSkpIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIHRydWU7Cn0KCmNsYXNzIENvbnN0YW50Q29sbGVjdG9yIGV4dGVuZHMgaXIuUmVjdXJzaXZlVmlzaXRvciB7CiAgZmluYWwgS2VybmVsVG9FbGVtZW50TWFwIGVsZW1lbnRNYXA7CiAgZmluYWwgRGVwZW5kZW5jaWVzIGRlcGVuZGVuY2llczsKCiAgQ29uc3RhbnRDb2xsZWN0b3IodGhpcy5lbGVtZW50TWFwLCB0aGlzLmRlcGVuZGVuY2llcyk7CgogIENvbW1vbkVsZW1lbnRzIGdldCBjb21tb25FbGVtZW50cyA9PiBlbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzOwoKICB2b2lkIGFkZChpci5FeHByZXNzaW9uIG5vZGUsIHtib29sIHJlcXVpcmVkOiB0cnVlfSkgewogICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9CiAgICAgICAgZWxlbWVudE1hcC5nZXRDb25zdGFudFZhbHVlKG5vZGUsIHJlcXVpcmVDb25zdGFudDogcmVxdWlyZWQpOwogICAgaWYgKGNvbnN0YW50ICE9IG51bGwpIHsKICAgICAgZGVwZW5kZW5jaWVzLmFkZENvbnN0YW50KAogICAgICAgICAgY29uc3RhbnQsIGVsZW1lbnRNYXAuZ2V0SW1wb3J0KGdldERlZmVycmVkSW1wb3J0KG5vZGUpKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50TGl0ZXJhbChpci5JbnRMaXRlcmFsIGxpdGVyYWwpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREb3VibGVMaXRlcmFsKGlyLkRvdWJsZUxpdGVyYWwgbGl0ZXJhbCkge30KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJvb2xMaXRlcmFsKGlyLkJvb2xMaXRlcmFsIGxpdGVyYWwpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdHJpbmdMaXRlcmFsKGlyLlN0cmluZ0xpdGVyYWwgbGl0ZXJhbCkge30KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN5bWJvbExpdGVyYWwoaXIuU3ltYm9sTGl0ZXJhbCBsaXRlcmFsKSA9PiBhZGQobGl0ZXJhbCk7CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXROdWxsTGl0ZXJhbChpci5OdWxsTGl0ZXJhbCBsaXRlcmFsKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGlzdExpdGVyYWwoaXIuTGlzdExpdGVyYWwgbGl0ZXJhbCkgewogICAgaWYgKGxpdGVyYWwuaXNDb25zdCkgewogICAgICBhZGQobGl0ZXJhbCk7CiAgICB9IGVsc2UgewogICAgICBzdXBlci52aXNpdExpc3RMaXRlcmFsKGxpdGVyYWwpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFNldExpdGVyYWwoaXIuU2V0TGl0ZXJhbCBsaXRlcmFsKSB7CiAgICBpZiAobGl0ZXJhbC5pc0NvbnN0KSB7CiAgICAgIGFkZChsaXRlcmFsKTsKICAgIH0gZWxzZSB7CiAgICAgIHN1cGVyLnZpc2l0U2V0TGl0ZXJhbChsaXRlcmFsKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRNYXBMaXRlcmFsKGlyLk1hcExpdGVyYWwgbGl0ZXJhbCkgewogICAgaWYgKGxpdGVyYWwuaXNDb25zdCkgewogICAgICBhZGQobGl0ZXJhbCk7CiAgICB9IGVsc2UgewogICAgICBzdXBlci52aXNpdE1hcExpdGVyYWwobGl0ZXJhbCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKGlyLkNvbnN0cnVjdG9ySW52b2NhdGlvbiBub2RlKSB7CiAgICBpZiAobm9kZS5pc0NvbnN0KSB7CiAgICAgIGFkZChub2RlKTsKICAgIH0gZWxzZSB7CiAgICAgIHN1cGVyLnZpc2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKG5vZGUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVQYXJhbWV0ZXIoaXIuVHlwZVBhcmFtZXRlciBub2RlKSB7CiAgICAvLyBXZSBhdm9pZCB2aXNpdGluZyBtZXRhZGF0YSBvbiB0aGUgdHlwZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb24uIFRoZSBib3VuZAogICAgLy8gY2Fubm90IGhvbGQgY29uc3RhbnRzIHNvIHdlIHNraXAgdGhhdCBhcyB3ZWxsLgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24oaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICAvLyBXZSBhdm9pZCB2aXNpdGluZyBtZXRhZGF0YSBvbiB0aGUgcGFyYW1ldGVyIGRlY2xhcmF0aW9uIGJ5IG9ubHkgdmlzaXRpbmcKICAgIC8vIHRoZSBpbml0aWFsaXplci4gVGhlIHR5cGUgY2Fubm90IGhvbGQgY29uc3RhbnRzIHNvIGNhbiBrYW4gc2tpcCB0aGF0CiAgICAvLyBhcyB3ZWxsLgogICAgbm9kZS5pbml0aWFsaXplcj8uYWNjZXB0KHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVMaXRlcmFsKGlyLlR5cGVMaXRlcmFsIG5vZGUpIHsKICAgIGlmIChub2RlLnR5cGUgaXMhIGlyLlR5cGVQYXJhbWV0ZXJUeXBlKSBhZGQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW5zdGFudGlhdGlvbihpci5JbnN0YW50aWF0aW9uIG5vZGUpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFRoZSBDRkUgc2hvdWxkIG1hcmsgY29uc3RhbnQgaW5zdGFudGlhdGlvbnMgYXMKICAgIC8vIGNvbnN0YW50LgogICAgYWRkKG5vZGUsIHJlcXVpcmVkOiBmYWxzZSk7CiAgICBzdXBlci52aXNpdEluc3RhbnRpYXRpb24obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29uc3RhbnRFeHByZXNzaW9uKGlyLkNvbnN0YW50RXhwcmVzc2lvbiBub2RlKSB7CiAgICBhZGQobm9kZSk7CiAgfQp9CoDfAE5OPAEjASgBIikjICQaGwE4Ij4pAVEBTDwvJz9KRStFPEo6CggWCAQBDCk0N0wEAQwrNjtMBAEMKi85Gz1MHxIEAQw7PQQBDCU2UC4EAQxROQFLUS5EHCkOBgEiOwYkBAE8S0gEAQwTIwQCAUsdQB87OgQPAgE2JyMBOQFCATgdRhwgRAYEAQwxAQw3AQwzAQw3AQxFAQwzAQwyGxQNJwYEAQwwGxQNJgYEAQwwGxQNJgYEAQxDGBENLgYEAQwzTzYEAQw/UEwQJAQBDC83BAEMM0sRICQEAQw9DwQCAS5wYWNrYWdlOmNvbXBpbGVyL3NyYy9rZXJuZWwvZGVmZXJyZWRfbG9hZC5kYXJ0NXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2tlcm5lbC9lbGVtZW50X21hcC5kYXJ0nC4vLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfZW52aXJvbm1lbnQuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgS0NvbW1vbkVsZW1lbnRzLCBLRWxlbWVudEVudmlyb25tZW50OwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIGFzIGpzOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmFtZXIuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYXRpdmVfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9uYXRpdmUvYmVoYXZpb3IuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCc7CgovLy8gSW50ZXJmYWNlIHRoYXQgdHJhbnNsYXRlcyBiZXR3ZWVuIEtlcm5lbCBJUiBub2RlcyBhbmQgZW50aXRpZXMgdXNlZCBmb3IKLy8vIGNvbXB1dGluZyB0aGUgW1dvcmxkSW1wYWN0XSBmb3IgbWVtYmVycy4KYWJzdHJhY3QgY2xhc3MgS2VybmVsVG9FbGVtZW50TWFwIHsKICBLRWxlbWVudEVudmlyb25tZW50IGdldCBlbGVtZW50RW52aXJvbm1lbnQ7CiAgTmF0aXZlQmFzaWNEYXRhIGdldCBuYXRpdmVCYXNpY0RhdGE7CgogIC8vLyBBY2Nlc3MgdG8gdGhlIGNvbW1vbmx5IHVzZWQgZWxlbWVudHMgYW5kIHR5cGVzLgogIEtDb21tb25FbGVtZW50cyBnZXQgY29tbW9uRWxlbWVudHM7CgogIC8vLyBBY2Nlc3MgdG8gdGhlIFtEYXJ0VHlwZXNdIG9iamVjdC4KICBEYXJ0VHlwZXMgZ2V0IHR5cGVzOwoKICAvLy8gUmV0dXJucyB0aGUgdHlwZSBlbnZpcm9ubWVudCBmb3IgdGhlIHVuZGVybHlpbmcga2VybmVsIG1vZGVsLgogIGlyLlR5cGVFbnZpcm9ubWVudCBnZXQgdHlwZUVudmlyb25tZW50OwoKICAvLy8gUmV0dXJucyB0aGUgY2xhc3MgaGllcmFyY2h5IGZvciB0aGUgdW5kZXJseWluZyBrZXJuZWwgbW9kZWwuCiAgaXIuQ2xhc3NIaWVyYXJjaHkgZ2V0IGNsYXNzSGllcmFyY2h5OwoKICAvLy8gUmV0dXJucyB0aGUgW0RhcnRUeXBlXSBjb3JyZXNwb25kaW5nIHRvIFt0eXBlXS4KICBEYXJ0VHlwZSBnZXREYXJ0VHlwZShpci5EYXJ0VHlwZSB0eXBlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtJbnRlcmZhY2VUeXBlXSBjb3JyZXNwb25kaW5nIHRvIFt0eXBlXS4KICBJbnRlcmZhY2VUeXBlIGdldEludGVyZmFjZVR5cGUoaXIuSW50ZXJmYWNlVHlwZSB0eXBlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtUeXBlVmFyaWFibGVUeXBlXSBjb3JyZXNwb25kaW5nIHRvIFt0eXBlXS4KICBUeXBlVmFyaWFibGVUeXBlIGdldFR5cGVWYXJpYWJsZVR5cGUoaXIuVHlwZVBhcmFtZXRlclR5cGUgdHlwZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbRnVuY3Rpb25UeXBlXSBvZiB0aGUgW25vZGVdLgogIEZ1bmN0aW9uVHlwZSBnZXRGdW5jdGlvblR5cGUoaXIuRnVuY3Rpb25Ob2RlIG5vZGUpOwoKICAvLy8gUmV0dXJuIHRoZSBbSW50ZXJmYWNlVHlwZV0gY29ycmVzcG9uZGluZyB0byB0aGUgW2Nsc10gd2l0aCB0aGUgZ2l2ZW4KICAvLy8gW3R5cGVBcmd1bWVudHNdLgogIEludGVyZmFjZVR5cGUgY3JlYXRlSW50ZXJmYWNlVHlwZSgKICAgICAgaXIuQ2xhc3MgY2xzLCBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKTsKCiAgLy8vIFJldHVybnMgdGhlIFtDYWxsU3RydWN0dXJlXSBjb3JyZXNwb25kaW5nIHRvIHRoZSBbYXJndW1lbnRzXS4KICBDYWxsU3RydWN0dXJlIGdldENhbGxTdHJ1Y3R1cmUoaXIuQXJndW1lbnRzIGFyZ3VtZW50cyk7CgogIC8vLyBSZXR1cm5zIHRoZSBbU2VsZWN0b3JdIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGludm9jYXRpb24gb2YgW25hbWVdIHdpdGgKICAvLy8gW2FyZ3VtZW50c10uCiAgU2VsZWN0b3IgZ2V0SW52b2NhdGlvblNlbGVjdG9yKGlyLk5hbWUgbmFtZSwgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywgaW50IHR5cGVBcmd1bWVudHMpOwoKICAvLy8gUmV0dXJucyB0aGUgW01lbWJlckVudGl0eV0gY29ycmVzcG9uZGluZyB0byB0aGUgbWVtYmVyIFtub2RlXS4KICBNZW1iZXJFbnRpdHkgZ2V0TWVtYmVyKGlyLk1lbWJlciBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtGdW5jdGlvbkVudGl0eV0gY29ycmVzcG9uZGluZyB0byB0aGUgcHJvY2VkdXJlIFtub2RlXS4KICBGdW5jdGlvbkVudGl0eSBnZXRNZXRob2QoaXIuUHJvY2VkdXJlIG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgW0NvbnN0cnVjdG9yRW50aXR5XSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnZW5lcmF0aXZlIG9yIGZhY3RvcnkKICAvLy8gY29uc3RydWN0b3IgW25vZGVdLgogIENvbnN0cnVjdG9yRW50aXR5IGdldENvbnN0cnVjdG9yKGlyLk1lbWJlciBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtGaWVsZEVudGl0eV0gY29ycmVzcG9uZGluZyB0byB0aGUgZmllbGQgW25vZGVdLgogIEZpZWxkRW50aXR5IGdldEZpZWxkKGlyLkZpZWxkIG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgW0NsYXNzRW50aXR5XSBjb3JyZXNwb25kaW5nIHRvIHRoZSBjbGFzcyBbbm9kZV0uCiAgQ2xhc3NFbnRpdHkgZ2V0Q2xhc3MoaXIuQ2xhc3Mgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbVHlwZWRlZlR5cGVdIGNvcnJlc3BvbmRpbmcgdG8gcmF3IHR5cGUgb2YgdGhlIHR5cGVkZWYgW25vZGVdLgogIFR5cGVkZWZUeXBlIGdldFR5cGVkZWZUeXBlKGlyLlR5cGVkZWYgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBzdXBlciBbTWVtYmVyRW50aXR5XSBmb3IgYSBzdXBlciBpbnZvY2F0aW9uLCBnZXQgb3Igc2V0IG9mCiAgLy8vIFtuYW1lXSBmcm9tIHRoZSBtZW1iZXIgW2NvbnRleHRdLgogIE1lbWJlckVudGl0eSBnZXRTdXBlck1lbWJlcihNZW1iZXJFbnRpdHkgY29udGV4dCwgaXIuTmFtZSBuYW1lLAogICAgICB7Ym9vbCBzZXR0ZXI6IGZhbHNlfSk7CgogIC8vLyBSZXR1cm5zIHRoZSBgbm9TdWNoTWV0aG9kYCBbRnVuY3Rpb25FbnRpdHldIGNhbGwgZnJvbSBhCiAgLy8vIGBzdXBlci5ub1N1Y2hNZXRob2RgIGludm9jYXRpb24gd2l0aGluIFtjbHNdLgogIEZ1bmN0aW9uRW50aXR5IGdldFN1cGVyTm9TdWNoTWV0aG9kKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIHRoZSBbTmFtZV0gY29ycmVzcG9uZGluZyB0byBbbmFtZV0uCiAgTmFtZSBnZXROYW1lKGlyLk5hbWUgbmFtZSk7CgogIC8vLyBDb21wdXRlcyB0aGUgW05hdGl2ZUJlaGF2aW9yXSBmb3IgYSBjYWxsIHRvIHRoZSBbSlNdIGZ1bmN0aW9uLgogIE5hdGl2ZUJlaGF2aW9yIGdldE5hdGl2ZUJlaGF2aW9yRm9ySnNDYWxsKGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSk7CgogIC8vLyBDb21wdXRlcyB0aGUgW05hdGl2ZUJlaGF2aW9yXSBmb3IgYSBjYWxsIHRvIHRoZSBbSlNfQlVJTFRJTl0KICAvLy8gZnVuY3Rpb24uCiAgTmF0aXZlQmVoYXZpb3IgZ2V0TmF0aXZlQmVoYXZpb3JGb3JKc0J1aWx0aW5DYWxsKGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSk7CgogIC8vLyBDb21wdXRlcyB0aGUgW05hdGl2ZUJlaGF2aW9yXSBmb3IgYSBjYWxsIHRvIHRoZQogIC8vLyBbSlNfRU1CRURERURfR0xPQkFMXSBmdW5jdGlvbi4KICBOYXRpdmVCZWhhdmlvciBnZXROYXRpdmVCZWhhdmlvckZvckpzRW1iZWRkZWRHbG9iYWxDYWxsKAogICAgICBpci5TdGF0aWNJbnZvY2F0aW9uIG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgW2pzLk5hbWVdIGZvciB0aGUgYEpzR2V0TmFtZWAgW2NvbnN0YW50XSB2YWx1ZS4KICBqcy5OYW1lIGdldE5hbWVGb3JKc0dldE5hbWUoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgTmFtZXIgbmFtZXIpOwoKICAvLy8gQ29tcHV0ZXMgdGhlIFtDb25zdGFudFZhbHVlXSBmb3IgdGhlIGNvbnN0YW50IFtleHByZXNzaW9uXS4KICBDb25zdGFudFZhbHVlIGdldENvbnN0YW50VmFsdWUoaXIuRXhwcmVzc2lvbiBleHByZXNzaW9uLAogICAgICB7Ym9vbCByZXF1aXJlQ29uc3RhbnQ6IHRydWUsIGJvb2wgaW1wbGljaXROdWxsOiBmYWxzZX0pOwoKICAvLy8gUmV0dXJuIHRoZSBbSW1wb3J0RW50aXR5XSBjb3JyZXNwb25kaW5nIHRvIFtub2RlXS4KICBJbXBvcnRFbnRpdHkgZ2V0SW1wb3J0KGlyLkxpYnJhcnlEZXBlbmRlbmN5IG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgZGVmaW5pbmcgbm9kZSBmb3IgW2Nsc10uCiAgaXIuQ2xhc3MgZ2V0Q2xhc3NOb2RlKGNvdmFyaWFudCBDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gQWRkcyBsaWJyYXJpZXMgaW4gW2NvbXBvbmVudF0gdG8gdGhlIHNldCBvZiBsaWJyYXJpZXMuCiAgLy8vCiAgLy8vIFRoZSBtYWluIG1ldGhvZCBvZiB0aGUgZmlyc3QgY29tcG9uZW50IGlzIHVzZWQgYXMgdGhlIG1haW4gbWV0aG9kIGZvciB0aGUKICAvLy8gY29tcGlsYXRpb24uCiAgdm9pZCBhZGRDb21wb25lbnQoaXIuQ29tcG9uZW50IGNvbXBvbmVudCk7CgogIC8vLyBSZXR1cm5zIHRoZSBbQ29uc3RydWN0b3JFbnRpdHldIGNvcnJlc3BvbmRpbmcgdG8gYSBzdXBlciBpbml0aWFsaXplciBpbgogIC8vLyBbY29uc3RydWN0b3JdLgogIC8vLwogIC8vLyBUaGUgSVIgcmVzb2x2ZXMgc3VwZXIgaW5pdGlhbGl6ZXJzIHRvIGEgW3RhcmdldF0gdXAgaW4gdGhlIHR5cGUgaGllcmFyY2h5LgogIC8vLyBNb3N0IG9mIHRoZSB0aW1lLCB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSB0aGUgZW50aXR5CiAgLy8vIGNvcnJlc3BvbmRpbmcgdG8gdGhhdCB0YXJnZXQuIEluIHRoZSBwcmVzZW5jZSBvZiB1bm5hbWVkIG1peGlucywgdGhpcwogIC8vLyBmdW5jdGlvbiByZXR1cm5zIGFuIGVudGl0eSBmb3IgYW4gaW50ZXJtZWRpYXRlIHN5bnRoZXRpYyBjb25zdHJ1Y3RvciB0aGF0CiAgLy8vIGtlcm5lbCBkb2Vzbid0IGV4cGxpY2l0bHkgcmVwcmVzZW50LgogIC8vLwogIC8vLyBGb3IgZXhhbXBsZToKICAvLy8gICAgIGNsYXNzIE0ge30KICAvLy8gICAgIGNsYXNzIEMgZXh0ZW5kcyBPYmplY3Qgd2l0aCBNIHt9CiAgLy8vCiAgLy8vIEtlcm5lbCB3aWxsIHNheSB0aGF0IEMoKSdzIHN1cGVyIGluaXRpYWxpemVyIHJlc29sdmVzIHRvIE9iamVjdCgpLCBidXQKICAvLy8gdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhbiBlbnRpdHkgcmVwcmVzZW50aW5nIHRoZSB1bm5hbWVkIG1peGluCiAgLy8vIGFwcGxpY2F0aW9uICJPYmplY3QrTSIncyBjb25zdHJ1Y3Rvci4KICBDb25zdHJ1Y3RvckVudGl0eSBnZXRTdXBlckNvbnN0cnVjdG9yKAogICAgICBpci5Db25zdHJ1Y3RvciBjb25zdHJ1Y3RvciwgaXIuTWVtYmVyIHRhcmdldCk7CgogIC8vLyBDb21wdXRlcyB0aGUgbmF0aXZlIGJlaGF2aW9yIGZvciByZWFkaW5nIHRoZSBuYXRpdmUgW2ZpZWxkXS4KICBOYXRpdmVCZWhhdmlvciBnZXROYXRpdmVCZWhhdmlvckZvckZpZWxkTG9hZChpci5GaWVsZCBmaWVsZCwKICAgICAgSXRlcmFibGU8U3RyaW5nPiBjcmVhdGVzQW5ub3RhdGlvbnMsIEl0ZXJhYmxlPFN0cmluZz4gcmV0dXJuc0Fubm90YXRpb25zLAogICAgICB7Ym9vbCBpc0pzSW50ZXJvcH0pOwoKICAvLy8gQ29tcHV0ZXMgdGhlIG5hdGl2ZSBiZWhhdmlvciBmb3Igd3JpdGluZyB0byB0aGUgbmF0aXZlIFtmaWVsZF0uCiAgTmF0aXZlQmVoYXZpb3IgZ2V0TmF0aXZlQmVoYXZpb3JGb3JGaWVsZFN0b3JlKGlyLkZpZWxkIGZpZWxkKTsKCiAgLy8vIENvbXB1dGVzIHRoZSBuYXRpdmUgYmVoYXZpb3IgZm9yIGNhbGxpbmcgdGhlIGZ1bmN0aW9uIG9yIGNvbnN0cnVjdG9yCiAgLy8vIFttZW1iZXJdLgogIE5hdGl2ZUJlaGF2aW9yIGdldE5hdGl2ZUJlaGF2aW9yRm9yTWV0aG9kKGlyLk1lbWJlciBtZW1iZXIsCiAgICAgIEl0ZXJhYmxlPFN0cmluZz4gY3JlYXRlc0Fubm90YXRpb25zLCBJdGVyYWJsZTxTdHJpbmc+IHJldHVybnNBbm5vdGF0aW9ucywKICAgICAge2Jvb2wgaXNKc0ludGVyb3B9KTsKCiAgLy8vIENvbXB1dGUgdGhlIGtpbmQgb2YgZm9yZWlnbiBoZWxwZXIgZnVuY3Rpb24gY2FsbGVkIGJ5IFtub2RlXSwgaWYgYW55LgogIEZvcmVpZ25LaW5kIGdldEZvcmVpZ25LaW5kKGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSk7CgogIC8vLyBDb21wdXRlcyB0aGUgW0ludGVyZmFjZVR5cGVdIHJlZmVyZW5jZWQgYnkgYSBjYWxsIHRvIHRoZQogIC8vLyBbSlNfSU5URVJDRVBUT1JfQ09OU1RBTlRdIGZ1bmN0aW9uLCBpZiBhbnkuCiAgSW50ZXJmYWNlVHlwZSBnZXRJbnRlcmZhY2VUeXBlRm9ySnNJbnRlcmNlcHRvckNhbGwoaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtMb2NhbF0gY29ycmVzcG9uZGluZyB0byB0aGUgbG9jYWwgZnVuY3Rpb24gW25vZGVdLgogIExvY2FsIGdldExvY2FsRnVuY3Rpb24oaXIuTG9jYWxGdW5jdGlvbiBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtpci5MaWJyYXJ5XSBjb3JyZXNwb25kaW5nIHRvIFtsaWJyYXJ5XS4KICBpci5MaWJyYXJ5IGdldExpYnJhcnlOb2RlKExpYnJhcnlFbnRpdHkgbGlicmFyeSk7CgogIC8vLyBSZXR1cm5zIHRoZSBub2RlIHRoYXQgZGVmaW5lcyBbdHlwZWRlZl0uCiAgaXIuVHlwZWRlZiBnZXRUeXBlZGVmTm9kZShjb3ZhcmlhbnQgVHlwZWRlZkVudGl0eSB0eXBlZGVmKTsKCiAgLy8vIFJldHVybnMgdGhlIGRlZmluaW5nIG5vZGUgZm9yIFttZW1iZXJdLgogIGlyLk1lbWJlciBnZXRNZW1iZXJOb2RlKGNvdmFyaWFudCBNZW1iZXJFbnRpdHkgbWVtYmVyKTsKfQoKLy8vIEtpbmRzIG9mIGZvcmVpZ24gZnVuY3Rpb25zLgplbnVtIEZvcmVpZ25LaW5kIHsKICBKUywKICBKU19CVUlMVElOLAogIEpTX0VNQkVEREVEX0dMT0JBTCwKICBKU19JTlRFUkNFUFRPUl9DT05TVEFOVCwKICBOT05FLAp9CoC8AE5OPAEoNDUBI0wkISEeIykiKiQBTC0kLicBNiYBKBcBRCoBQygBNioBOzkBPkMBMDYBSxclNgFEOgFME0g3AUUqAUovAVEaNAFDJwFDJwFRLwFNKEIdAT40OAEyHgFFRwFDEE4BNiU7IQFCRAFCOz8BOTUBKzQBPQZQEy0BThUGUUdMUCsGExUrBk1JLCk1AUM/UBsBRkEBSxA+UBsBTDgBPzJQAUYxATs0AS8+AS46AgEgEwYOFhsIAgEscGFja2FnZTpjb21waWxlci9zcmMva2VybmVsL2VsZW1lbnRfbWFwLmRhcnQ6c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMva2VybmVsL2VsZW1lbnRfbWFwX2ltcGwuZGFydMABM6EvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmtlcm5lbC5lbGVtZW50X21hcDsKCmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9kYXJ0MmpzLmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6anNfcnVudGltZS9zaGFyZWQvZW1iZWRkZWRfbmFtZXMuZGFydCc7CmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi9yZXNvbHV0aW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9jb21waWxlX3RpbWVfY29uc3RhbnRzLmRhcnQnOwppbXBvcnQgJy4uL2NvbnN0YW50cy9jb25zdHJ1Y3RvcnMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL2V2YWx1YXRpb24uZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL2V4cHJlc3Npb25zLmRhcnQnOwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvaW5kZXhlZC5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbnZpcm9ubWVudC5kYXJ0JzsKaW1wb3J0ICcuLi9mcm9udGVuZF9zdHJhdGVneS5kYXJ0JzsKaW1wb3J0ICcuLi9pci9hbm5vdGF0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi9pci9jb25zdGFudHMuZGFydCc7CmltcG9ydCAnLi4vaXIvZGVidWcuZGFydCc7CmltcG9ydCAnLi4vaXIvZWxlbWVudF9tYXAuZGFydCc7CmltcG9ydCAnLi4vaXIvaW1wYWN0LmRhcnQnOwppbXBvcnQgJy4uL2lyL2ltcGFjdF9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2lyL3N0YXRpY190eXBlLmRhcnQnOwppbXBvcnQgJy4uL2lyL3N0YXRpY190eXBlX2NhY2hlLmRhcnQnOwppbXBvcnQgJy4uL2lyL3Njb3BlLmRhcnQnOwppbXBvcnQgJy4uL2lyL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2lyL3Zpc2l0b3JzLmRhcnQnOwppbXBvcnQgJy4uL2lyL3V0aWwuZGFydCc7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganM7CmltcG9ydCAnLi4vanNfYmFja2VuZC9hbm5vdGF0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hbWVyLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmF0aXZlX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ub19zdWNoX21ldGhvZF9yZWdpc3RyeS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19tb2RlbC9sb2NhbHMuZGFydCc7CmltcG9ydCAnLi4va2VybmVsL2RhcnQyanNfdGFyZ2V0LmRhcnQnOwppbXBvcnQgJy4uL25hdGl2ZS9iZWhhdmlvci5kYXJ0JzsKaW1wb3J0ICcuLi9uYXRpdmUvcmVzb2x2ZXIuZGFydCc7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi9vcmRlcmVkX3R5cGVzZXQuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2xhc3NfaGllcmFyY2h5LmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnOwoKaW1wb3J0ICdlbGVtZW50X21hcC5kYXJ0JzsKaW1wb3J0ICdlbnYuZGFydCc7CmltcG9ydCAna2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJ2tlcm5lbF9pbXBhY3QuZGFydCc7CgpwYXJ0ICduYXRpdmVfYmFzaWNfZGF0YS5kYXJ0JzsKcGFydCAnbm9fc3VjaF9tZXRob2RfcmVzb2x2ZXIuZGFydCc7CgovLy8gSW1wbGVtZW50YXRpb24gb2YgW0tlcm5lbFRvRWxlbWVudE1hcF0gdGhhdCBvbmx5IHN1cHBvcnRzIHdvcmxkCi8vLyBpbXBhY3QgY29tcHV0YXRpb24uCmNsYXNzIEtlcm5lbFRvRWxlbWVudE1hcEltcGwgaW1wbGVtZW50cyBLZXJuZWxUb0VsZW1lbnRNYXAsIElyVG9FbGVtZW50TWFwIHsKICBmaW5hbCBDb21waWxlck9wdGlvbnMgb3B0aW9uczsKICBAb3ZlcnJpZGUKICBmaW5hbCBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXI7CiAgZmluYWwgRW52aXJvbm1lbnQgX2Vudmlyb25tZW50OwogIENvbW1vbkVsZW1lbnRzSW1wbCBfY29tbW9uRWxlbWVudHM7CiAgS2VybmVsRWxlbWVudEVudmlyb25tZW50IF9lbGVtZW50RW52aXJvbm1lbnQ7CiAgRGFydFR5cGVDb252ZXJ0ZXIgX3R5cGVDb252ZXJ0ZXI7CiAgS2VybmVsQ29uc3RhbnRFbnZpcm9ubWVudCBfY29uc3RhbnRFbnZpcm9ubWVudDsKICBLZXJuZWxEYXJ0VHlwZXMgX3R5cGVzOwogIGlyLlR5cGVFbnZpcm9ubWVudCBfdHlwZUVudmlyb25tZW50OwogIGlyLkNsYXNzSGllcmFyY2h5IF9jbGFzc0hpZXJhcmNoeTsKICBEYXJ0MmpzQ29uc3RhbnRFdmFsdWF0b3IgX2NvbnN0YW50RXZhbHVhdG9yOwogIENvbnN0YW50VmFsdWVmaWVyIF9jb25zdGFudFZhbHVlZmllcjsKCiAgLy8vIExpYnJhcnkgZW52aXJvbm1lbnQuIFVzZWQgZm9yIGZhc3QgbG9va3VwLgogIEtQcm9ncmFtRW52IGVudiA9IG5ldyBLUHJvZ3JhbUVudigpOwoKICBmaW5hbCBFbnRpdHlEYXRhRW52TWFwPEluZGV4ZWRMaWJyYXJ5LCBLTGlicmFyeURhdGEsIEtMaWJyYXJ5RW52PiBsaWJyYXJpZXMgPQogICAgICBuZXcgRW50aXR5RGF0YUVudk1hcDxJbmRleGVkTGlicmFyeSwgS0xpYnJhcnlEYXRhLCBLTGlicmFyeUVudj4oKTsKICBmaW5hbCBFbnRpdHlEYXRhRW52TWFwPEluZGV4ZWRDbGFzcywgS0NsYXNzRGF0YSwgS0NsYXNzRW52PiBjbGFzc2VzID0KICAgICAgbmV3IEVudGl0eURhdGFFbnZNYXA8SW5kZXhlZENsYXNzLCBLQ2xhc3NEYXRhLCBLQ2xhc3NFbnY+KCk7CiAgZmluYWwgRW50aXR5RGF0YU1hcDxJbmRleGVkTWVtYmVyLCBLTWVtYmVyRGF0YT4gbWVtYmVycyA9CiAgICAgIG5ldyBFbnRpdHlEYXRhTWFwPEluZGV4ZWRNZW1iZXIsIEtNZW1iZXJEYXRhPigpOwogIGZpbmFsIEVudGl0eURhdGFNYXA8SW5kZXhlZFR5cGVWYXJpYWJsZSwgS1R5cGVWYXJpYWJsZURhdGE+IHR5cGVWYXJpYWJsZXMgPQogICAgICBuZXcgRW50aXR5RGF0YU1hcDxJbmRleGVkVHlwZVZhcmlhYmxlLCBLVHlwZVZhcmlhYmxlRGF0YT4oKTsKICBmaW5hbCBFbnRpdHlEYXRhTWFwPEluZGV4ZWRUeXBlZGVmLCBLVHlwZWRlZkRhdGE+IHR5cGVkZWZzID0KICAgICAgbmV3IEVudGl0eURhdGFNYXA8SW5kZXhlZFR5cGVkZWYsIEtUeXBlZGVmRGF0YT4oKTsKCiAgLy8vIFNldCB0byBgdHJ1ZWAgYmVmb3JlIGNyZWF0aW5nIHRoZSBKLVdvcmxkIGZyb20gdGhlIEstV29ybGQgdG8gYXNzZXJ0IHRoYXQKICAvLy8gbm8gZW50aXRpZXMgYXJlIGNyZWF0ZWQgbGF0ZS4KICBib29sIGVudklzQ2xvc2VkID0gZmFsc2U7CgogIGZpbmFsIE1hcDxpci5MaWJyYXJ5LCBJbmRleGVkTGlicmFyeT4gbGlicmFyeU1hcCA9IHt9OwogIGZpbmFsIE1hcDxpci5DbGFzcywgSW5kZXhlZENsYXNzPiBjbGFzc01hcCA9IHt9OwogIGZpbmFsIE1hcDxpci5UeXBlZGVmLCBJbmRleGVkVHlwZWRlZj4gdHlwZWRlZk1hcCA9IHt9OwoKICAvLy8gTWFwIGZyb20gW2lyLlR5cGVQYXJhbWV0ZXJdIG5vZGVzIHRvIHRoZSBjb3JyZXNwb25kaW5nCiAgLy8vIFtUeXBlVmFyaWFibGVFbnRpdHldLgogIC8vLwogIC8vLyBOb3JtYWxseSB0aGUgdHlwZSB2YXJpYWJsZXMgYXJlIFtJbmRleGVkVHlwZVZhcmlhYmxlXXMsIGJ1dCBmb3IgdHlwZQogIC8vLyBwYXJhbWV0ZXJzIG9uIGxvY2FsIGZ1bmN0aW9uIChpbiB0aGUgZnJvbnRlbmQpIHRoZXNlIGFyZSBfbm90XyBzaW5jZQogIC8vLyB0aGVpciB0eXBlIGRlY2xhcmF0aW9uIGlzIG5laXRoZXIgYSBjbGFzcyBub3IgYSBtZW1iZXIuIEluIHRoZSBiYWNrZW5kLAogIC8vLyB0aGVzZSB0eXBlIHBhcmFtZXRlcnMgYmVsb25nIHRvIHRoZSBjYWxsLW1ldGhvZCBhbmQgYXJlIHRoZXJlZm9yZSBpbmRleGVkLgogIGZpbmFsIE1hcDxpci5UeXBlUGFyYW1ldGVyLCBUeXBlVmFyaWFibGVFbnRpdHk+IHR5cGVWYXJpYWJsZU1hcCA9IHt9OwogIGZpbmFsIE1hcDxpci5NZW1iZXIsIEluZGV4ZWRDb25zdHJ1Y3Rvcj4gY29uc3RydWN0b3JNYXAgPSB7fTsKICBmaW5hbCBNYXA8aXIuUHJvY2VkdXJlLCBJbmRleGVkRnVuY3Rpb24+IG1ldGhvZE1hcCA9IHt9OwogIGZpbmFsIE1hcDxpci5GaWVsZCwgSW5kZXhlZEZpZWxkPiBmaWVsZE1hcCA9IHt9OwogIGZpbmFsIE1hcDxpci5UcmVlTm9kZSwgTG9jYWw+IGxvY2FsRnVuY3Rpb25NYXAgPSB7fTsKCiAgQmVoYXZpb3JCdWlsZGVyIF9uYXRpdmVCZWhhdmlvckJ1aWxkZXI7CiAgRnJvbnRlbmRTdHJhdGVneSBfZnJvbnRlbmRTdHJhdGVneTsKCiAgTWFwPEtNZW1iZXIsIE1hcDxpci5FeHByZXNzaW9uLCBUeXBlTWFwPj4gdHlwZU1hcHNGb3JUZXN0aW5nOwoKICBLZXJuZWxUb0VsZW1lbnRNYXBJbXBsKAogICAgICB0aGlzLnJlcG9ydGVyLCB0aGlzLl9lbnZpcm9ubWVudCwgdGhpcy5fZnJvbnRlbmRTdHJhdGVneSwgdGhpcy5vcHRpb25zKSB7CiAgICBfZWxlbWVudEVudmlyb25tZW50ID0gbmV3IEtlcm5lbEVsZW1lbnRFbnZpcm9ubWVudCh0aGlzKTsKICAgIF9jb21tb25FbGVtZW50cyA9IG5ldyBDb21tb25FbGVtZW50c0ltcGwoX2VsZW1lbnRFbnZpcm9ubWVudCwgb3B0aW9ucyk7CiAgICBfY29uc3RhbnRFbnZpcm9ubWVudCA9IG5ldyBLZXJuZWxDb25zdGFudEVudmlyb25tZW50KHRoaXMsIF9lbnZpcm9ubWVudCk7CiAgICBfdHlwZUNvbnZlcnRlciA9IG5ldyBEYXJ0VHlwZUNvbnZlcnRlcih0aGlzKTsKICAgIF90eXBlcyA9IG5ldyBLZXJuZWxEYXJ0VHlwZXModGhpcyk7CiAgICBfY29uc3RhbnRWYWx1ZWZpZXIgPSBuZXcgQ29uc3RhbnRWYWx1ZWZpZXIodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZXMgZ2V0IHR5cGVzID0+IF90eXBlczsKCiAgQG92ZXJyaWRlCiAgS2VybmVsRWxlbWVudEVudmlyb25tZW50IGdldCBlbGVtZW50RW52aXJvbm1lbnQgPT4gX2VsZW1lbnRFbnZpcm9ubWVudDsKCiAgQG92ZXJyaWRlCiAgQ29tbW9uRWxlbWVudHNJbXBsIGdldCBjb21tb25FbGVtZW50cyA9PiBfY29tbW9uRWxlbWVudHM7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBfbWFpbkZ1bmN0aW9uIHsKICAgIHJldHVybiBlbnYubWFpbk1ldGhvZCAhPSBudWxsID8gZ2V0TWV0aG9kSW50ZXJuYWwoZW52Lm1haW5NZXRob2QpIDogbnVsbDsKICB9CgogIExpYnJhcnlFbnRpdHkgZ2V0IF9tYWluTGlicmFyeSB7CiAgICByZXR1cm4gZW52Lm1haW5NZXRob2QgIT0gbnVsbAogICAgICAgID8gZ2V0TGlicmFyeUludGVybmFsKGVudi5tYWluTWV0aG9kLmVuY2xvc2luZ0xpYnJhcnkpCiAgICAgICAgOiBudWxsOwogIH0KCiAgU291cmNlU3BhbiBnZXRTb3VyY2VTcGFuKFNwYW5uYWJsZSBzcGFubmFibGUsIEVudGl0eSBjdXJyZW50RWxlbWVudCkgewogICAgU291cmNlU3BhbiBmcm9tU3Bhbm5hYmxlKFNwYW5uYWJsZSBzcGFubmFibGUpIHsKICAgICAgaWYgKHNwYW5uYWJsZSBpcyBJbmRleGVkTGlicmFyeSAmJgogICAgICAgICAgc3Bhbm5hYmxlLmxpYnJhcnlJbmRleCA8IGxpYnJhcmllcy5sZW5ndGgpIHsKICAgICAgICBLTGlicmFyeUVudiBlbnYgPSBsaWJyYXJpZXMuZ2V0RW52KHNwYW5uYWJsZSk7CiAgICAgICAgcmV0dXJuIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKGVudi5saWJyYXJ5KTsKICAgICAgfSBlbHNlIGlmIChzcGFubmFibGUgaXMgSW5kZXhlZENsYXNzICYmCiAgICAgICAgICBzcGFubmFibGUuY2xhc3NJbmRleCA8IGNsYXNzZXMubGVuZ3RoKSB7CiAgICAgICAgS0NsYXNzRGF0YSBkYXRhID0gY2xhc3Nlcy5nZXREYXRhKHNwYW5uYWJsZSk7CiAgICAgICAgYXNzZXJ0KGRhdGEgIT0gbnVsbCwgIk5vIGRhdGEgZm9yICRzcGFubmFibGUgaW4gJHRoaXMiKTsKICAgICAgICByZXR1cm4gY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUoZGF0YS5ub2RlKTsKICAgICAgfSBlbHNlIGlmIChzcGFubmFibGUgaXMgSW5kZXhlZE1lbWJlciAmJgogICAgICAgICAgc3Bhbm5hYmxlLm1lbWJlckluZGV4IDwgbWVtYmVycy5sZW5ndGgpIHsKICAgICAgICBLTWVtYmVyRGF0YSBkYXRhID0gbWVtYmVycy5nZXREYXRhKHNwYW5uYWJsZSk7CiAgICAgICAgYXNzZXJ0KGRhdGEgIT0gbnVsbCwgIk5vIGRhdGEgZm9yICRzcGFubmFibGUgaW4gJHRoaXMiKTsKICAgICAgICByZXR1cm4gY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUoZGF0YS5ub2RlKTsKICAgICAgfSBlbHNlIGlmIChzcGFubmFibGUgaXMgS0xvY2FsRnVuY3Rpb24pIHsKICAgICAgICByZXR1cm4gZ2V0U291cmNlU3BhbihzcGFubmFibGUubWVtYmVyQ29udGV4dCwgY3VycmVudEVsZW1lbnQpOwogICAgICB9IGVsc2UgaWYgKHNwYW5uYWJsZSBpcyBKTG9jYWwpIHsKICAgICAgICByZXR1cm4gZ2V0U291cmNlU3BhbihzcGFubmFibGUubWVtYmVyQ29udGV4dCwgY3VycmVudEVsZW1lbnQpOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIFNvdXJjZVNwYW4gc291cmNlU3BhbiA9IGZyb21TcGFubmFibGUoc3Bhbm5hYmxlKTsKICAgIHNvdXJjZVNwYW4gPz89IGZyb21TcGFubmFibGUoY3VycmVudEVsZW1lbnQpOwogICAgcmV0dXJuIHNvdXJjZVNwYW47CiAgfQoKICBMaWJyYXJ5RW50aXR5IGxvb2t1cExpYnJhcnkoVXJpIHVyaSkgewogICAgS0xpYnJhcnlFbnYgbGlicmFyeUVudiA9IGVudi5sb29rdXBMaWJyYXJ5KHVyaSk7CiAgICBpZiAobGlicmFyeUVudiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBnZXRMaWJyYXJ5SW50ZXJuYWwobGlicmFyeUVudi5saWJyYXJ5LCBsaWJyYXJ5RW52KTsKICB9CgogIFN0cmluZyBfZ2V0TGlicmFyeU5hbWUoSW5kZXhlZExpYnJhcnkgbGlicmFyeSkgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGxpYnJhcnkpKTsKICAgIEtMaWJyYXJ5RW52IGxpYnJhcnlFbnYgPSBsaWJyYXJpZXMuZ2V0RW52KGxpYnJhcnkpOwogICAgcmV0dXJuIGxpYnJhcnlFbnYubGlicmFyeS5uYW1lID8/ICcnOwogIH0KCiAgTWVtYmVyRW50aXR5IGxvb2t1cExpYnJhcnlNZW1iZXIoSW5kZXhlZExpYnJhcnkgbGlicmFyeSwgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIHNldHRlcjogZmFsc2V9KSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkobGlicmFyeSkpOwogICAgS0xpYnJhcnlFbnYgbGlicmFyeUVudiA9IGxpYnJhcmllcy5nZXRFbnYobGlicmFyeSk7CiAgICBpci5NZW1iZXIgbWVtYmVyID0gbGlicmFyeUVudi5sb29rdXBNZW1iZXIobmFtZSwgc2V0dGVyOiBzZXR0ZXIpOwogICAgcmV0dXJuIG1lbWJlciAhPSBudWxsID8gZ2V0TWVtYmVyKG1lbWJlcikgOiBudWxsOwogIH0KCiAgdm9pZCBfZm9yRWFjaExpYnJhcnlNZW1iZXIoCiAgICAgIEluZGV4ZWRMaWJyYXJ5IGxpYnJhcnksIHZvaWQgZihNZW1iZXJFbnRpdHkgbWVtYmVyKSkgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGxpYnJhcnkpKTsKICAgIEtMaWJyYXJ5RW52IGxpYnJhcnlFbnYgPSBsaWJyYXJpZXMuZ2V0RW52KGxpYnJhcnkpOwogICAgbGlicmFyeUVudi5mb3JFYWNoTWVtYmVyKChpci5NZW1iZXIgbm9kZSkgewogICAgICBmKGdldE1lbWJlcihub2RlKSk7CiAgICB9KTsKICB9CgogIENsYXNzRW50aXR5IGxvb2t1cENsYXNzKEluZGV4ZWRMaWJyYXJ5IGxpYnJhcnksIFN0cmluZyBuYW1lKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkobGlicmFyeSkpOwogICAgS0xpYnJhcnlFbnYgbGlicmFyeUVudiA9IGxpYnJhcmllcy5nZXRFbnYobGlicmFyeSk7CiAgICBLQ2xhc3NFbnYgY2xhc3NFbnYgPSBsaWJyYXJ5RW52Lmxvb2t1cENsYXNzKG5hbWUpOwogICAgaWYgKGNsYXNzRW52ICE9IG51bGwpIHsKICAgICAgcmV0dXJuIGdldENsYXNzSW50ZXJuYWwoY2xhc3NFbnYuY2xzLCBjbGFzc0Vudik7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgX2ZvckVhY2hDbGFzcyhJbmRleGVkTGlicmFyeSBsaWJyYXJ5LCB2b2lkIGYoQ2xhc3NFbnRpdHkgY2xzKSkgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGxpYnJhcnkpKTsKICAgIEtMaWJyYXJ5RW52IGxpYnJhcnlFbnYgPSBsaWJyYXJpZXMuZ2V0RW52KGxpYnJhcnkpOwogICAgbGlicmFyeUVudi5mb3JFYWNoQ2xhc3MoKEtDbGFzc0VudiBjbGFzc0VudikgewogICAgICBpZiAoIWNsYXNzRW52LmlzVW5uYW1lZE1peGluQXBwbGljYXRpb24pIHsKICAgICAgICBmKGdldENsYXNzSW50ZXJuYWwoY2xhc3NFbnYuY2xzLCBjbGFzc0VudikpOwogICAgICB9CiAgICB9KTsKICB9CgogIHZvaWQgZW5zdXJlQ2xhc3NNZW1iZXJzKGlyLkNsYXNzIG5vZGUpIHsKICAgIGNsYXNzZXMuZ2V0RW52KGdldENsYXNzSW50ZXJuYWwobm9kZSkpLmVuc3VyZU1lbWJlcnModGhpcyk7CiAgfQoKICBNZW1iZXJFbnRpdHkgbG9va3VwQ2xhc3NNZW1iZXIoSW5kZXhlZENsYXNzIGNscywgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIHNldHRlcjogZmFsc2V9KSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBLQ2xhc3NFbnYgY2xhc3NFbnYgPSBjbGFzc2VzLmdldEVudihjbHMpOwogICAgcmV0dXJuIGNsYXNzRW52Lmxvb2t1cE1lbWJlcih0aGlzLCBuYW1lLCBzZXR0ZXI6IHNldHRlcik7CiAgfQoKICBDb25zdHJ1Y3RvckVudGl0eSBsb29rdXBDb25zdHJ1Y3RvcihJbmRleGVkQ2xhc3MgY2xzLCBTdHJpbmcgbmFtZSkgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgS0NsYXNzRW52IGNsYXNzRW52ID0gY2xhc3Nlcy5nZXRFbnYoY2xzKTsKICAgIHJldHVybiBjbGFzc0Vudi5sb29rdXBDb25zdHJ1Y3Rvcih0aGlzLCBuYW1lKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgY3JlYXRlSW50ZXJmYWNlVHlwZSgKICAgICAgaXIuQ2xhc3MgY2xzLCBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUoZ2V0Q2xhc3MoY2xzKSwgZ2V0RGFydFR5cGVzKHR5cGVBcmd1bWVudHMpKTsKICB9CgogIExpYnJhcnlFbnRpdHkgZ2V0TGlicmFyeShpci5MaWJyYXJ5IG5vZGUpID0+IGdldExpYnJhcnlJbnRlcm5hbChub2RlKTsKCiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0Q2xhc3MoaXIuQ2xhc3Mgbm9kZSkgPT4gZ2V0Q2xhc3NJbnRlcm5hbChub2RlKTsKCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRTdXBlclR5cGUoSW5kZXhlZENsYXNzIGNscykgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgS0NsYXNzRGF0YSBkYXRhID0gY2xhc3Nlcy5nZXREYXRhKGNscyk7CiAgICBfZW5zdXJlU3VwZXJ0eXBlcyhjbHMsIGRhdGEpOwogICAgcmV0dXJuIGRhdGEuc3VwZXJ0eXBlOwogIH0KCiAgdm9pZCBfZW5zdXJlVGhpc0FuZFJhd1R5cGUoQ2xhc3NFbnRpdHkgY2xzLCBLQ2xhc3NEYXRhIGRhdGEpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIGlmIChkYXRhIGlzIEtDbGFzc0RhdGFJbXBsICYmIGRhdGEudGhpc1R5cGUgPT0gbnVsbCkgewogICAgICBpci5DbGFzcyBub2RlID0gZGF0YS5ub2RlOwogICAgICBpZiAobm9kZS50eXBlUGFyYW1ldGVycy5pc0VtcHR5KSB7CiAgICAgICAgZGF0YS50aGlzVHlwZSA9CiAgICAgICAgICAgIGRhdGEucmF3VHlwZSA9IG5ldyBJbnRlcmZhY2VUeXBlKGNscywgY29uc3QgPERhcnRUeXBlPltdKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBkYXRhLnRoaXNUeXBlID0gbmV3IEludGVyZmFjZVR5cGUoCiAgICAgICAgICAgIGNscywKICAgICAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+LmdlbmVyYXRlKG5vZGUudHlwZVBhcmFtZXRlcnMubGVuZ3RoLAogICAgICAgICAgICAgICAgKGludCBpbmRleCkgewogICAgICAgICAgICAgIHJldHVybiBuZXcgVHlwZVZhcmlhYmxlVHlwZSgKICAgICAgICAgICAgICAgICAgZ2V0VHlwZVZhcmlhYmxlSW50ZXJuYWwobm9kZS50eXBlUGFyYW1ldGVyc1tpbmRleF0pKTsKICAgICAgICAgICAgfSkpOwogICAgICAgIGRhdGEucmF3VHlwZSA9IG5ldyBJbnRlcmZhY2VUeXBlKAogICAgICAgICAgICBjbHMsCiAgICAgICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQoCiAgICAgICAgICAgICAgICBub2RlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCwgY29uc3QgRHluYW1pY1R5cGUoKSkpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlVmFyaWFibGVFbnRpdHkgZ2V0VHlwZVZhcmlhYmxlKGlyLlR5cGVQYXJhbWV0ZXIgbm9kZSkgPT4KICAgICAgZ2V0VHlwZVZhcmlhYmxlSW50ZXJuYWwobm9kZSk7CgogIHZvaWQgX2Vuc3VyZVN1cGVydHlwZXMoQ2xhc3NFbnRpdHkgY2xzLCBLQ2xhc3NEYXRhIGRhdGEpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIGlmIChkYXRhIGlzIEtDbGFzc0RhdGFJbXBsICYmIGRhdGEub3JkZXJlZFR5cGVTZXQgPT0gbnVsbCkgewogICAgICBfZW5zdXJlVGhpc0FuZFJhd1R5cGUoY2xzLCBkYXRhKTsKCiAgICAgIGlyLkNsYXNzIG5vZGUgPSBkYXRhLm5vZGU7CgogICAgICBpZiAobm9kZS5zdXBlcnR5cGUgPT0gbnVsbCkgewogICAgICAgIGRhdGEub3JkZXJlZFR5cGVTZXQgPSBuZXcgT3JkZXJlZFR5cGVTZXQuc2luZ2xldG9uKGRhdGEudGhpc1R5cGUpOwogICAgICAgIGRhdGEuaXNNaXhpbkFwcGxpY2F0aW9uID0gZmFsc2U7CiAgICAgICAgZGF0YS5pbnRlcmZhY2VzID0gY29uc3QgPEludGVyZmFjZVR5cGU+W107CiAgICAgIH0gZWxzZSB7CiAgICAgICAgSW50ZXJmYWNlVHlwZSBwcm9jZXNzU3VwZXJ0eXBlKGlyLlN1cGVydHlwZSBub2RlKSB7CiAgICAgICAgICBJbnRlcmZhY2VUeXBlIHN1cGVydHlwZSA9IF90eXBlQ29udmVydGVyLnZpc2l0U3VwZXJ0eXBlKG5vZGUpOwogICAgICAgICAgSW5kZXhlZENsYXNzIHN1cGVyY2xhc3MgPSBzdXBlcnR5cGUuZWxlbWVudDsKICAgICAgICAgIEtDbGFzc0RhdGEgc3VwZXJkYXRhID0gY2xhc3Nlcy5nZXREYXRhKHN1cGVyY2xhc3MpOwogICAgICAgICAgX2Vuc3VyZVN1cGVydHlwZXMoc3VwZXJjbGFzcywgc3VwZXJkYXRhKTsKICAgICAgICAgIHJldHVybiBzdXBlcnR5cGU7CiAgICAgICAgfQoKICAgICAgICBJbnRlcmZhY2VUeXBlIHN1cGVydHlwZTsKICAgICAgICBpci5MaW5rQnVpbGRlcjxJbnRlcmZhY2VUeXBlPiBsaW5rQnVpbGRlciA9CiAgICAgICAgICAgIG5ldyBpci5MaW5rQnVpbGRlcjxJbnRlcmZhY2VUeXBlPigpOwogICAgICAgIGlmIChub2RlLmlzTWl4aW5EZWNsYXJhdGlvbikgewogICAgICAgICAgLy8gQSBtaXhpbiBkZWNsYXJhdGlvbgogICAgICAgICAgLy8KICAgICAgICAgIC8vICAgbWl4aW4gTSBvbiBBLCBCLCBDIHt9CiAgICAgICAgICAvLwogICAgICAgICAgLy8gaXMgZW5jb2RlZCBieSBDRkUgYXMKICAgICAgICAgIC8vCiAgICAgICAgICAvLyAgIGFic3RyYWN0IGNsYXNzIE0gZXh0ZW5kcyBBIGltcGxlbWVudHMgQiwgQyB7fQogICAgICAgICAgLy8gICBhYnN0cmFjdCBjbGFzcyBNIGV4dGVuZHMgQSZCJkMge30KICAgICAgICAgIC8vCiAgICAgICAgICAvLyBidXQgd2UgZW5jb2RlIGl0IGFzCiAgICAgICAgICAvLwogICAgICAgICAgLy8gICBhYnN0cmFjdCBjbGFzcyBNIGV4dGVuZHMgT2JqZWN0IGltcGxlbWVudHMgQSwgQiwgQyB7fQogICAgICAgICAgLy8KICAgICAgICAgIC8vIHNvIHdlIG5lZWQgZ2V0IHRoZSBzdXBlcmNsYXNzZXMgZnJvbSB0aGUgb24tY2xhdXNlLCBBLCBCLCBhbmQgQywKICAgICAgICAgIC8vIHRocm91Z2ggW3N1cGVyY2xhc3NDb25zdHJhaW50c10uCiAgICAgICAgICBmb3IgKGlyLlN1cGVydHlwZSBjb25zdHJhaW50IGluIG5vZGUuc3VwZXJjbGFzc0NvbnN0cmFpbnRzKCkpIHsKICAgICAgICAgICAgbGlua0J1aWxkZXIuYWRkTGFzdChwcm9jZXNzU3VwZXJ0eXBlKGNvbnN0cmFpbnQpKTsKICAgICAgICAgIH0KICAgICAgICAgIC8vIFNldCBzdXBlcmNsYXNzIHRvIGBPYmplY3RgLgogICAgICAgICAgc3VwZXJ0eXBlID0gX2NvbW1vbkVsZW1lbnRzLm9iamVjdFR5cGU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN1cGVydHlwZSA9IHByb2Nlc3NTdXBlcnR5cGUobm9kZS5zdXBlcnR5cGUpOwogICAgICAgIH0KICAgICAgICBpZiAoc3VwZXJ0eXBlID09IF9jb21tb25FbGVtZW50cy5vYmplY3RUeXBlKSB7CiAgICAgICAgICBDbGFzc0VudGl0eSBkZWZhdWx0U3VwZXJjbGFzcyA9CiAgICAgICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmdldERlZmF1bHRTdXBlcmNsYXNzKGNscywgbmF0aXZlQmFzaWNEYXRhKTsKICAgICAgICAgIGRhdGEuc3VwZXJ0eXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRSYXdUeXBlKGRlZmF1bHRTdXBlcmNsYXNzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGF0YS5zdXBlcnR5cGUgPSBzdXBlcnR5cGU7CiAgICAgICAgfQogICAgICAgIGlmIChub2RlLm1peGVkSW5UeXBlICE9IG51bGwpIHsKICAgICAgICAgIGRhdGEuaXNNaXhpbkFwcGxpY2F0aW9uID0gdHJ1ZTsKICAgICAgICAgIGxpbmtCdWlsZGVyCiAgICAgICAgICAgICAgLmFkZExhc3QoZGF0YS5taXhlZEluVHlwZSA9IHByb2Nlc3NTdXBlcnR5cGUobm9kZS5taXhlZEluVHlwZSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkYXRhLmlzTWl4aW5BcHBsaWNhdGlvbiA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBub2RlLmltcGxlbWVudGVkVHlwZXMuZm9yRWFjaCgoaXIuU3VwZXJ0eXBlIHN1cGVydHlwZSkgewogICAgICAgICAgbGlua0J1aWxkZXIuYWRkTGFzdChwcm9jZXNzU3VwZXJ0eXBlKHN1cGVydHlwZSkpOwogICAgICAgIH0pOwogICAgICAgIGlyLkxpbms8SW50ZXJmYWNlVHlwZT4gaW50ZXJmYWNlcyA9CiAgICAgICAgICAgIGxpbmtCdWlsZGVyLnRvTGluayhjb25zdCBpci5MaW5rPEludGVyZmFjZVR5cGU+KCkpOwogICAgICAgIE9yZGVyZWRUeXBlU2V0QnVpbGRlciBzZXRCdWlsZGVyID0KICAgICAgICAgICAgbmV3IEtlcm5lbE9yZGVyZWRUeXBlU2V0QnVpbGRlcih0aGlzLCBjbHMpOwogICAgICAgIGRhdGEub3JkZXJlZFR5cGVTZXQgPSBzZXRCdWlsZGVyLmNyZWF0ZU9yZGVyZWRUeXBlU2V0KAogICAgICAgICAgICBkYXRhLnN1cGVydHlwZSwgaW50ZXJmYWNlcy5yZXZlcnNlKGNvbnN0IGlyLkxpbms8SW50ZXJmYWNlVHlwZT4oKSkpOwogICAgICAgIGRhdGEuaW50ZXJmYWNlcyA9IG5ldyBMaXN0PEludGVyZmFjZVR5cGU+LmZyb20oaW50ZXJmYWNlcy50b0xpc3QoKSk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIFR5cGVkZWZUeXBlIGdldFR5cGVkZWZUeXBlKGlyLlR5cGVkZWYgbm9kZSkgewogICAgSW5kZXhlZFR5cGVkZWYgdHlwZWRlZiA9IGdldFR5cGVkZWZJbnRlcm5hbChub2RlKTsKICAgIHJldHVybiB0eXBlZGVmcy5nZXREYXRhKHR5cGVkZWYpLnJhd1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXJFbnRpdHkgZ2V0TWVtYmVyKGlyLk1lbWJlciBub2RlKSB7CiAgICBpZiAobm9kZSBpcyBpci5GaWVsZCkgewogICAgICByZXR1cm4gZ2V0RmllbGRJbnRlcm5hbChub2RlKTsKICAgIH0gZWxzZSBpZiAobm9kZSBpcyBpci5Db25zdHJ1Y3RvcikgewogICAgICByZXR1cm4gZ2V0Q29uc3RydWN0b3JJbnRlcm5hbChub2RlKTsKICAgIH0gZWxzZSBpZiAobm9kZSBpcyBpci5Qcm9jZWR1cmUpIHsKICAgICAgaWYgKG5vZGUua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLkZhY3RvcnkpIHsKICAgICAgICByZXR1cm4gZ2V0Q29uc3RydWN0b3JJbnRlcm5hbChub2RlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gZ2V0TWV0aG9kSW50ZXJuYWwobm9kZSk7CiAgICAgIH0KICAgIH0KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJVbmV4cGVjdGVkIG1lbWJlcjogJG5vZGUiKTsKICB9CgogIEBvdmVycmlkZQogIE1lbWJlckVudGl0eSBnZXRTdXBlck1lbWJlcihNZW1iZXJFbnRpdHkgY29udGV4dCwgaXIuTmFtZSBuYW1lLAogICAgICB7Ym9vbCBzZXR0ZXI6IGZhbHNlfSkgewogICAgLy8gV2UgY2FuIG5vIGxvbmdlciB0cnVzdCB0aGUgaW50ZXJmYWNlIHRhcmdldCBvZiB0aGUgc3VwZXIgYWNjZXNzIHNpbmNlIGl0CiAgICAvLyBtaWdodCBiZSBhIG1lbWJlciB0aGF0IHdlIGhhdmUgY2xvbmVkLgogICAgQ2xhc3NFbnRpdHkgY2xzID0gY29udGV4dC5lbmNsb3NpbmdDbGFzczsKICAgIGFzc2VydCgKICAgICAgICBjbHMgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdChjb250ZXh0LAogICAgICAgICAgICAiTm8gZW5jbG9zaW5nIGNsYXNzIGZvciBzdXBlciBtZW1iZXIgYWNjZXNzIGluICRjb250ZXh0LiIpKTsKICAgIEluZGV4ZWRDbGFzcyBzdXBlcmNsYXNzID0gZ2V0U3VwZXJUeXBlKGNscyk/LmVsZW1lbnQ7CiAgICB3aGlsZSAoc3VwZXJjbGFzcyAhPSBudWxsKSB7CiAgICAgIEtDbGFzc0VudiBlbnYgPSBjbGFzc2VzLmdldEVudihzdXBlcmNsYXNzKTsKICAgICAgTWVtYmVyRW50aXR5IHN1cGVyTWVtYmVyID0KICAgICAgICAgIGVudi5sb29rdXBNZW1iZXIodGhpcywgbmFtZS5uYW1lLCBzZXR0ZXI6IHNldHRlcik7CiAgICAgIGlmIChzdXBlck1lbWJlciAhPSBudWxsKSB7CiAgICAgICAgaWYgKCFzdXBlck1lbWJlci5pc0luc3RhbmNlTWVtYmVyKSByZXR1cm4gbnVsbDsKICAgICAgICBpZiAoIXN1cGVyTWVtYmVyLmlzQWJzdHJhY3QpIHsKICAgICAgICAgIHJldHVybiBzdXBlck1lbWJlcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgc3VwZXJjbGFzcyA9IGdldFN1cGVyVHlwZShzdXBlcmNsYXNzKT8uZWxlbWVudDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0Q29uc3RydWN0b3IoaXIuTWVtYmVyIG5vZGUpID0+CiAgICAgIGdldENvbnN0cnVjdG9ySW50ZXJuYWwobm9kZSk7CgogIEBvdmVycmlkZQogIENvbnN0cnVjdG9yRW50aXR5IGdldFN1cGVyQ29uc3RydWN0b3IoCiAgICAgIGlyLkNvbnN0cnVjdG9yIHNvdXJjZU5vZGUsIGlyLk1lbWJlciB0YXJnZXROb2RlKSB7CiAgICBDb25zdHJ1Y3RvckVudGl0eSBzb3VyY2UgPSBnZXRDb25zdHJ1Y3Rvcihzb3VyY2VOb2RlKTsKICAgIENsYXNzRW50aXR5IHNvdXJjZUNsYXNzID0gc291cmNlLmVuY2xvc2luZ0NsYXNzOwogICAgQ29uc3RydWN0b3JFbnRpdHkgdGFyZ2V0ID0gZ2V0Q29uc3RydWN0b3IodGFyZ2V0Tm9kZSk7CiAgICBDbGFzc0VudGl0eSB0YXJnZXRDbGFzcyA9IHRhcmdldC5lbmNsb3NpbmdDbGFzczsKICAgIEluZGV4ZWRDbGFzcyBzdXBlckNsYXNzID0gZ2V0U3VwZXJUeXBlKHNvdXJjZUNsYXNzKT8uZWxlbWVudDsKICAgIGlmIChzdXBlckNsYXNzID09IHRhcmdldENsYXNzKSB7CiAgICAgIHJldHVybiB0YXJnZXQ7CiAgICB9CgogICAgLy8vIFRoaXMgcGF0aCBpcyBuZWVkZWQgZm9yIHN5bnRoZXRpY2FsbHkgaW5qZWN0ZWQgc3VwZXJjbGFzc2VzIGxpa2UKICAgIC8vLyBgSW50ZXJjZXB0b3JgIGFuZCBgSmF2YVNjcmlwdE9iamVjdGAuCiAgICBLQ2xhc3NFbnYgZW52ID0gY2xhc3Nlcy5nZXRFbnYoc3VwZXJDbGFzcyk7CiAgICBDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvciA9IGVudi5sb29rdXBDb25zdHJ1Y3Rvcih0aGlzLCB0YXJnZXQubmFtZSk7CiAgICBpZiAoY29uc3RydWN0b3IgIT0gbnVsbCkgewogICAgICByZXR1cm4gY29uc3RydWN0b3I7CiAgICB9CiAgICB0aHJvdyBmYWlsZWRBdChzb3VyY2UsICJTdXBlciBjb25zdHJ1Y3RvciBmb3IgJHNvdXJjZSBub3QgZm91bmQuIik7CiAgfQoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXRNZXRob2QoaXIuUHJvY2VkdXJlIG5vZGUpID0+IGdldE1ldGhvZEludGVybmFsKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBGaWVsZEVudGl0eSBnZXRGaWVsZChpci5GaWVsZCBub2RlKSA9PiBnZXRGaWVsZEludGVybmFsKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXREYXJ0VHlwZShpci5EYXJ0VHlwZSB0eXBlKSA9PiBfdHlwZUNvbnZlcnRlci5jb252ZXJ0KHR5cGUpOwoKICBAb3ZlcnJpZGUKICBUeXBlVmFyaWFibGVUeXBlIGdldFR5cGVWYXJpYWJsZVR5cGUoaXIuVHlwZVBhcmFtZXRlclR5cGUgdHlwZSkgPT4KICAgICAgZ2V0RGFydFR5cGUodHlwZSk7CgogIExpc3Q8RGFydFR5cGU+IGdldERhcnRUeXBlcyhMaXN0PGlyLkRhcnRUeXBlPiB0eXBlcykgewogICAgTGlzdDxEYXJ0VHlwZT4gbGlzdCA9IDxEYXJ0VHlwZT5bXTsKICAgIHR5cGVzLmZvckVhY2goKGlyLkRhcnRUeXBlIHR5cGUpIHsKICAgICAgbGlzdC5hZGQoZ2V0RGFydFR5cGUodHlwZSkpOwogICAgfSk7CiAgICByZXR1cm4gbGlzdDsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0SW50ZXJmYWNlVHlwZShpci5JbnRlcmZhY2VUeXBlIHR5cGUpID0+CiAgICAgIF90eXBlQ29udmVydGVyLmNvbnZlcnQodHlwZSk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uVHlwZSBnZXRGdW5jdGlvblR5cGUoaXIuRnVuY3Rpb25Ob2RlIG5vZGUpIHsKICAgIERhcnRUeXBlIHJldHVyblR5cGU7CiAgICBpZiAobm9kZS5wYXJlbnQgaXMgaXIuQ29uc3RydWN0b3IpIHsKICAgICAgLy8gVGhlIHJldHVybiB0eXBlIG9uIGdlbmVyYXRpdmUgY29uc3RydWN0b3JzIGlzIGB2b2lkYCwgYnV0IHdlIG5lZWQKICAgICAgLy8gYGR5bmFtaWNgIHR5cGUgdG8gbWF0Y2ggdGhlIGVsZW1lbnQgbW9kZWwuCiAgICAgIHJldHVyblR5cGUgPSBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuVHlwZSA9IGdldERhcnRUeXBlKG5vZGUucmV0dXJuVHlwZSk7CiAgICB9CiAgICBMaXN0PERhcnRUeXBlPiBwYXJhbWV0ZXJUeXBlcyA9IDxEYXJ0VHlwZT5bXTsKICAgIExpc3Q8RGFydFR5cGU+IG9wdGlvbmFsUGFyYW1ldGVyVHlwZXMgPSA8RGFydFR5cGU+W107CgogICAgRGFydFR5cGUgZ2V0UGFyYW1ldGVyVHlwZShpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKSB7CiAgICAgIGlmICh2YXJpYWJsZS5pc0NvdmFyaWFudCB8fCB2YXJpYWJsZS5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsKSB7CiAgICAgICAgLy8gQSBjb3ZhcmlhbnQgcGFyYW1ldGVyIGhhcyB0eXBlIGBPYmplY3RgIGluIHRoZSBtZXRob2Qgc2lnbmF0dXJlLgogICAgICAgIHJldHVybiBjb21tb25FbGVtZW50cy5vYmplY3RUeXBlOwogICAgICB9CiAgICAgIHJldHVybiBnZXREYXJ0VHlwZSh2YXJpYWJsZS50eXBlKTsKICAgIH0KCiAgICBmb3IgKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgaW4gbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycykgewogICAgICBpZiAocGFyYW1ldGVyVHlwZXMubGVuZ3RoID09IG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCkgewogICAgICAgIG9wdGlvbmFsUGFyYW1ldGVyVHlwZXMuYWRkKGdldFBhcmFtZXRlclR5cGUodmFyaWFibGUpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwYXJhbWV0ZXJUeXBlcy5hZGQoZ2V0UGFyYW1ldGVyVHlwZSh2YXJpYWJsZSkpOwogICAgICB9CiAgICB9CiAgICBMaXN0PFN0cmluZz4gbmFtZWRQYXJhbWV0ZXJzID0gPFN0cmluZz5bXTsKICAgIExpc3Q8RGFydFR5cGU+IG5hbWVkUGFyYW1ldGVyVHlwZXMgPSA8RGFydFR5cGU+W107CiAgICBMaXN0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+IHNvcnRlZE5hbWVkUGFyYW1ldGVycyA9CiAgICAgICAgbm9kZS5uYW1lZFBhcmFtZXRlcnMudG9MaXN0KCkuLnNvcnQoKGEsIGIpID0+IGEubmFtZS5jb21wYXJlVG8oYi5uYW1lKSk7CiAgICBmb3IgKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgaW4gc29ydGVkTmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgIG5hbWVkUGFyYW1ldGVycy5hZGQodmFyaWFibGUubmFtZSk7CiAgICAgIG5hbWVkUGFyYW1ldGVyVHlwZXMuYWRkKGdldFBhcmFtZXRlclR5cGUodmFyaWFibGUpKTsKICAgIH0KICAgIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IHR5cGVWYXJpYWJsZXM7CiAgICBpZiAobm9kZS50eXBlUGFyYW1ldGVycy5pc05vdEVtcHR5KSB7CiAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVQYXJhbWV0ZXJzID0gPERhcnRUeXBlPltdOwogICAgICBmb3IgKGlyLlR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlciBpbiBub2RlLnR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgICAgdHlwZVBhcmFtZXRlcnMKICAgICAgICAgICAgLmFkZChnZXREYXJ0VHlwZShuZXcgaXIuVHlwZVBhcmFtZXRlclR5cGUodHlwZVBhcmFtZXRlcikpKTsKICAgICAgfQogICAgICB0eXBlVmFyaWFibGVzID0gbmV3IExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+LmdlbmVyYXRlKAogICAgICAgICAgbm9kZS50eXBlUGFyYW1ldGVycy5sZW5ndGgsCiAgICAgICAgICAoaW50IGluZGV4KSA9PiBuZXcgRnVuY3Rpb25UeXBlVmFyaWFibGUoaW5kZXgpKTsKCiAgICAgIERhcnRUeXBlIHN1YnN0KERhcnRUeXBlIHR5cGUpIHsKICAgICAgICByZXR1cm4gdHlwZS5zdWJzdCh0eXBlVmFyaWFibGVzLCB0eXBlUGFyYW1ldGVycyk7CiAgICAgIH0KCiAgICAgIHJldHVyblR5cGUgPSBzdWJzdChyZXR1cm5UeXBlKTsKICAgICAgcGFyYW1ldGVyVHlwZXMgPSBwYXJhbWV0ZXJUeXBlcy5tYXAoc3Vic3QpLnRvTGlzdCgpOwogICAgICBvcHRpb25hbFBhcmFtZXRlclR5cGVzID0gb3B0aW9uYWxQYXJhbWV0ZXJUeXBlcy5tYXAoc3Vic3QpLnRvTGlzdCgpOwogICAgICBuYW1lZFBhcmFtZXRlclR5cGVzID0gbmFtZWRQYXJhbWV0ZXJUeXBlcy5tYXAoc3Vic3QpLnRvTGlzdCgpOwogICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgdHlwZVZhcmlhYmxlcy5sZW5ndGg7IGluZGV4KyspIHsKICAgICAgICB0eXBlVmFyaWFibGVzW2luZGV4XS5ib3VuZCA9CiAgICAgICAgICAgIHN1YnN0KGdldERhcnRUeXBlKG5vZGUudHlwZVBhcmFtZXRlcnNbaW5kZXhdLmJvdW5kKSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHR5cGVWYXJpYWJsZXMgPSBjb25zdCA8RnVuY3Rpb25UeXBlVmFyaWFibGU+W107CiAgICB9CgogICAgcmV0dXJuIG5ldyBGdW5jdGlvblR5cGUocmV0dXJuVHlwZSwgcGFyYW1ldGVyVHlwZXMsIG9wdGlvbmFsUGFyYW1ldGVyVHlwZXMsCiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzLCBuYW1lZFBhcmFtZXRlclR5cGVzLCB0eXBlVmFyaWFibGVzKTsKICB9CgogIENvbnN0YW50VmFsdWUgY29tcHV0ZUNvbnN0YW50VmFsdWUoCiAgICAgIFNwYW5uYWJsZSBzcGFubmFibGUsIENvbnN0YW50RXhwcmVzc2lvbiBjb25zdGFudCwKICAgICAge2Jvb2wgcmVxdWlyZUNvbnN0YW50OiB0cnVlLCBib29sIGNoZWNrQ2FzdHM6IHRydWV9KSB7CiAgICByZXR1cm4gX2NvbnN0YW50RW52aXJvbm1lbnQuX2dldENvbnN0YW50VmFsdWUoc3Bhbm5hYmxlLCBjb25zdGFudCwKICAgICAgICBjb25zdGFudFJlcXVpcmVkOiByZXF1aXJlQ29uc3RhbnQsIGNoZWNrQ2FzdHM6IGNoZWNrQ2FzdHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgc3Vic3RCeUNvbnRleHQoRGFydFR5cGUgdHlwZSwgSW50ZXJmYWNlVHlwZSBjb250ZXh0KSB7CiAgICByZXR1cm4gdHlwZS5zdWJzdCgKICAgICAgICBjb250ZXh0LnR5cGVBcmd1bWVudHMsIGdldFRoaXNUeXBlKGNvbnRleHQuZWxlbWVudCkudHlwZUFyZ3VtZW50cyk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgYGNhbGxgIG1ldGhvZCBvbiAndHlwZScuCiAgLy8vCiAgLy8vIElmIFt0eXBlXSBkb2Vzbid0IGhhdmUgYSBgY2FsbGAgbWVtYmVyIGBudWxsYCBpcyByZXR1cm5lZC4gSWYgW3R5cGVdIGhhcwogIC8vLyBhbiBpbnZhbGlkIGBjYWxsYCBtZW1iZXIgKG5vbi1tZXRob2Qgb3IgYSBzeW50aGVzaXplZCBtZXRob2Qgd2l0aCBib3RoCiAgLy8vIG9wdGlvbmFsIGFuZCBuYW1lZCBwYXJhbWV0ZXJzKSBhIFtEeW5hbWljVHlwZV0gaXMgcmV0dXJuZWQuCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0Q2FsbFR5cGUoSW50ZXJmYWNlVHlwZSB0eXBlKSB7CiAgICBJbmRleGVkQ2xhc3MgY2xzID0gdHlwZS5lbGVtZW50OwogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgS0NsYXNzRGF0YSBkYXRhID0gY2xhc3Nlcy5nZXREYXRhKGNscyk7CiAgICBpZiAoZGF0YS5jYWxsVHlwZSAhPSBudWxsKSB7CiAgICAgIHJldHVybiBzdWJzdEJ5Q29udGV4dChkYXRhLmNhbGxUeXBlLCB0eXBlKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRUaGlzVHlwZShJbmRleGVkQ2xhc3MgY2xzKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBLQ2xhc3NEYXRhIGRhdGEgPSBjbGFzc2VzLmdldERhdGEoY2xzKTsKICAgIF9lbnN1cmVUaGlzQW5kUmF3VHlwZShjbHMsIGRhdGEpOwogICAgcmV0dXJuIGRhdGEudGhpc1R5cGU7CiAgfQoKICBJbnRlcmZhY2VUeXBlIF9nZXRSYXdUeXBlKEluZGV4ZWRDbGFzcyBjbHMpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEtDbGFzc0RhdGEgZGF0YSA9IGNsYXNzZXMuZ2V0RGF0YShjbHMpOwogICAgX2Vuc3VyZVRoaXNBbmRSYXdUeXBlKGNscywgZGF0YSk7CiAgICByZXR1cm4gZGF0YS5yYXdUeXBlOwogIH0KCiAgRGFydFR5cGUgX2dldEZpZWxkVHlwZShJbmRleGVkRmllbGQgZmllbGQpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShmaWVsZCkpOwogICAgS0ZpZWxkRGF0YSBkYXRhID0gbWVtYmVycy5nZXREYXRhKGZpZWxkKTsKICAgIHJldHVybiBkYXRhLmdldEZpZWxkVHlwZSh0aGlzKTsKICB9CgogIEZ1bmN0aW9uVHlwZSBfZ2V0RnVuY3Rpb25UeXBlKEluZGV4ZWRGdW5jdGlvbiBmdW5jdGlvbikgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGZ1bmN0aW9uKSk7CiAgICBLRnVuY3Rpb25EYXRhIGRhdGEgPSBtZW1iZXJzLmdldERhdGEoZnVuY3Rpb24pOwogICAgcmV0dXJuIGRhdGEuZ2V0RnVuY3Rpb25UeXBlKHRoaXMpOwogIH0KCiAgTGlzdDxUeXBlVmFyaWFibGVUeXBlPiBfZ2V0RnVuY3Rpb25UeXBlVmFyaWFibGVzKEluZGV4ZWRGdW5jdGlvbiBmdW5jdGlvbikgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGZ1bmN0aW9uKSk7CiAgICBLRnVuY3Rpb25EYXRhIGRhdGEgPSBtZW1iZXJzLmdldERhdGEoZnVuY3Rpb24pOwogICAgcmV0dXJuIGRhdGEuZ2V0RnVuY3Rpb25UeXBlVmFyaWFibGVzKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0VHlwZVZhcmlhYmxlQm91bmQoSW5kZXhlZFR5cGVWYXJpYWJsZSB0eXBlVmFyaWFibGUpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseSh0eXBlVmFyaWFibGUpKTsKICAgIEtUeXBlVmFyaWFibGVEYXRhIGRhdGEgPSB0eXBlVmFyaWFibGVzLmdldERhdGEodHlwZVZhcmlhYmxlKTsKICAgIHJldHVybiBkYXRhLmdldEJvdW5kKHRoaXMpOwogIH0KCiAgQ2xhc3NFbnRpdHkgZ2V0QXBwbGllZE1peGluKEluZGV4ZWRDbGFzcyBjbHMpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEtDbGFzc0RhdGEgZGF0YSA9IGNsYXNzZXMuZ2V0RGF0YShjbHMpOwogICAgX2Vuc3VyZVN1cGVydHlwZXMoY2xzLCBkYXRhKTsKICAgIHJldHVybiBkYXRhLm1peGVkSW5UeXBlPy5lbGVtZW50OwogIH0KCiAgYm9vbCBfaXNNaXhpbkFwcGxpY2F0aW9uKEluZGV4ZWRDbGFzcyBjbHMpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEtDbGFzc0RhdGEgZGF0YSA9IGNsYXNzZXMuZ2V0RGF0YShjbHMpOwogICAgX2Vuc3VyZVN1cGVydHlwZXMoY2xzLCBkYXRhKTsKICAgIHJldHVybiBkYXRhLmlzTWl4aW5BcHBsaWNhdGlvbjsKICB9CgogIGJvb2wgX2lzVW5uYW1lZE1peGluQXBwbGljYXRpb24oSW5kZXhlZENsYXNzIGNscykgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgS0NsYXNzRW52IGVudiA9IGNsYXNzZXMuZ2V0RW52KGNscyk7CiAgICByZXR1cm4gZW52LmlzVW5uYW1lZE1peGluQXBwbGljYXRpb247CiAgfQoKICB2b2lkIF9mb3JFYWNoU3VwZXJ0eXBlKEluZGV4ZWRDbGFzcyBjbHMsIHZvaWQgZihJbnRlcmZhY2VUeXBlIHN1cGVydHlwZSkpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEtDbGFzc0RhdGEgZGF0YSA9IGNsYXNzZXMuZ2V0RGF0YShjbHMpOwogICAgX2Vuc3VyZVN1cGVydHlwZXMoY2xzLCBkYXRhKTsKICAgIGRhdGEub3JkZXJlZFR5cGVTZXQuc3VwZXJ0eXBlcy5mb3JFYWNoKGYpOwogIH0KCiAgdm9pZCBfZm9yRWFjaE1peGluKEluZGV4ZWRDbGFzcyBjbHMsIHZvaWQgZihDbGFzc0VudGl0eSBtaXhpbikpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIHdoaWxlIChjbHMgIT0gbnVsbCkgewogICAgICBLQ2xhc3NEYXRhIGRhdGEgPSBjbGFzc2VzLmdldERhdGEoY2xzKTsKICAgICAgX2Vuc3VyZVN1cGVydHlwZXMoY2xzLCBkYXRhKTsKICAgICAgaWYgKGRhdGEubWl4ZWRJblR5cGUgIT0gbnVsbCkgewogICAgICAgIGYoZGF0YS5taXhlZEluVHlwZS5lbGVtZW50KTsKICAgICAgfQogICAgICBjbHMgPSBkYXRhLnN1cGVydHlwZT8uZWxlbWVudDsKICAgIH0KICB9CgogIHZvaWQgX2ZvckVhY2hDb25zdHJ1Y3RvcihJbmRleGVkQ2xhc3MgY2xzLCB2b2lkIGYoQ29uc3RydWN0b3JFbnRpdHkgbWVtYmVyKSkgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgS0NsYXNzRW52IGVudiA9IGNsYXNzZXMuZ2V0RW52KGNscyk7CiAgICBlbnYuZm9yRWFjaENvbnN0cnVjdG9yKHRoaXMsIGYpOwogIH0KCiAgdm9pZCBfZm9yRWFjaExvY2FsQ2xhc3NNZW1iZXIoSW5kZXhlZENsYXNzIGNscywgdm9pZCBmKE1lbWJlckVudGl0eSBtZW1iZXIpKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBLQ2xhc3NFbnYgZW52ID0gY2xhc3Nlcy5nZXRFbnYoY2xzKTsKICAgIGVudi5mb3JFYWNoTWVtYmVyKHRoaXMsIChNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgIGYobWVtYmVyKTsKICAgIH0pOwogIH0KCiAgdm9pZCBmb3JFYWNoSW5qZWN0ZWRDbGFzc01lbWJlcigKICAgICAgSW5kZXhlZENsYXNzIGNscywgdm9pZCBmKE1lbWJlckVudGl0eSBtZW1iZXIpKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAnS2VybmVsVG9FbGVtZW50TWFwQmFzZS5fZm9yRWFjaEluamVjdGVkQ2xhc3NNZW1iZXInKTsKICB9CgogIHZvaWQgX2ZvckVhY2hDbGFzc01lbWJlcigKICAgICAgSW5kZXhlZENsYXNzIGNscywgdm9pZCBmKENsYXNzRW50aXR5IGNscywgTWVtYmVyRW50aXR5IG1lbWJlcikpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEtDbGFzc0VudiBlbnYgPSBjbGFzc2VzLmdldEVudihjbHMpOwogICAgZW52LmZvckVhY2hNZW1iZXIodGhpcywgKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgICAgZihjbHMsIG1lbWJlcik7CiAgICB9KTsKICAgIEtDbGFzc0RhdGEgZGF0YSA9IGNsYXNzZXMuZ2V0RGF0YShjbHMpOwogICAgX2Vuc3VyZVN1cGVydHlwZXMoY2xzLCBkYXRhKTsKICAgIGlmIChkYXRhLnN1cGVydHlwZSAhPSBudWxsKSB7CiAgICAgIF9mb3JFYWNoQ2xhc3NNZW1iZXIoZGF0YS5zdXBlcnR5cGUuZWxlbWVudCwgZik7CiAgICB9CiAgfQoKICBDb25zdGFudENvbnN0cnVjdG9yIF9nZXRDb25zdHJ1Y3RvckNvbnN0YW50KEluZGV4ZWRDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvcikgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNvbnN0cnVjdG9yKSk7CiAgICBLQ29uc3RydWN0b3JEYXRhIGRhdGEgPSBtZW1iZXJzLmdldERhdGEoY29uc3RydWN0b3IpOwogICAgcmV0dXJuIGRhdGEuZ2V0Q29uc3RydWN0b3JDb25zdGFudCh0aGlzLCBjb25zdHJ1Y3Rvcik7CiAgfQoKICBDb25zdGFudEV4cHJlc3Npb24gX2dldEZpZWxkQ29uc3RhbnRFeHByZXNzaW9uKEluZGV4ZWRGaWVsZCBmaWVsZCkgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGZpZWxkKSk7CiAgICBLRmllbGREYXRhIGRhdGEgPSBtZW1iZXJzLmdldERhdGEoZmllbGQpOwogICAgcmV0dXJuIGRhdGEuZ2V0RmllbGRDb25zdGFudEV4cHJlc3Npb24odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGFzSW5zdGFuY2VPZihJbnRlcmZhY2VUeXBlIHR5cGUsIENsYXNzRW50aXR5IGNscykgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgT3JkZXJlZFR5cGVTZXQgb3JkZXJlZFR5cGVTZXQgPSBnZXRPcmRlcmVkVHlwZVNldCh0eXBlLmVsZW1lbnQpOwogICAgSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUgPQogICAgICAgIG9yZGVyZWRUeXBlU2V0LmFzSW5zdGFuY2VPZihjbHMsIGdldEhpZXJhcmNoeURlcHRoKGNscykpOwogICAgaWYgKHN1cGVydHlwZSAhPSBudWxsKSB7CiAgICAgIHN1cGVydHlwZSA9IHN1YnN0QnlDb250ZXh0KHN1cGVydHlwZSwgdHlwZSk7CiAgICB9CiAgICByZXR1cm4gc3VwZXJ0eXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgT3JkZXJlZFR5cGVTZXQgZ2V0T3JkZXJlZFR5cGVTZXQoSW5kZXhlZENsYXNzIGNscykgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgS0NsYXNzRGF0YSBkYXRhID0gY2xhc3Nlcy5nZXREYXRhKGNscyk7CiAgICBfZW5zdXJlU3VwZXJ0eXBlcyhjbHMsIGRhdGEpOwogICAgcmV0dXJuIGRhdGEub3JkZXJlZFR5cGVTZXQ7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0SGllcmFyY2h5RGVwdGgoSW5kZXhlZENsYXNzIGNscykgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgS0NsYXNzRGF0YSBkYXRhID0gY2xhc3Nlcy5nZXREYXRhKGNscyk7CiAgICBfZW5zdXJlU3VwZXJ0eXBlcyhjbHMsIGRhdGEpOwogICAgcmV0dXJuIGRhdGEub3JkZXJlZFR5cGVTZXQubWF4RGVwdGg7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxJbnRlcmZhY2VUeXBlPiBnZXRJbnRlcmZhY2VzKEluZGV4ZWRDbGFzcyBjbHMpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEtDbGFzc0RhdGEgZGF0YSA9IGNsYXNzZXMuZ2V0RGF0YShjbHMpOwogICAgX2Vuc3VyZVN1cGVydHlwZXMoY2xzLCBkYXRhKTsKICAgIHJldHVybiBkYXRhLmludGVyZmFjZXM7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5NZW1iZXIgZ2V0TWVtYmVyTm9kZShjb3ZhcmlhbnQgSW5kZXhlZE1lbWJlciBtZW1iZXIpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShtZW1iZXIpKTsKICAgIHJldHVybiBtZW1iZXJzLmdldERhdGEobWVtYmVyKS5ub2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuQ2xhc3MgZ2V0Q2xhc3NOb2RlKGNvdmFyaWFudCBJbmRleGVkQ2xhc3MgY2xzKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICByZXR1cm4gY2xhc3Nlcy5nZXREYXRhKGNscykubm9kZTsKICB9CgogIGlyLlR5cGVkZWYgX2dldFR5cGVkZWZOb2RlKGNvdmFyaWFudCBJbmRleGVkVHlwZWRlZiB0eXBlZGVmKSB7CiAgICByZXR1cm4gdHlwZWRlZnMuZ2V0RGF0YSh0eXBlZGVmKS5ub2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgSW1wb3J0RW50aXR5IGdldEltcG9ydChpci5MaWJyYXJ5RGVwZW5kZW5jeSBub2RlKSB7CiAgICBpZiAobm9kZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGlyLkxpYnJhcnkgbGlicmFyeSA9IG5vZGUucGFyZW50OwogICAgS0xpYnJhcnlEYXRhIGRhdGEgPSBsaWJyYXJpZXMuZ2V0RGF0YShnZXRMaWJyYXJ5SW50ZXJuYWwobGlicmFyeSkpOwogICAgcmV0dXJuIGRhdGEuaW1wb3J0c1tub2RlXTsKICB9CgogIEBvdmVycmlkZQogIGlyLlR5cGVFbnZpcm9ubWVudCBnZXQgdHlwZUVudmlyb25tZW50IHsKICAgIHJldHVybiBfdHlwZUVudmlyb25tZW50ID8/PSBuZXcgaXIuVHlwZUVudmlyb25tZW50KAogICAgICAgIG5ldyBpci5Db3JlVHlwZXMoZW52Lm1haW5Db21wb25lbnQpLCBjbGFzc0hpZXJhcmNoeSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5DbGFzc0hpZXJhcmNoeSBnZXQgY2xhc3NIaWVyYXJjaHkgewogICAgcmV0dXJuIF9jbGFzc0hpZXJhcmNoeSA/Pz0gbmV3IGlyLkNsYXNzSGllcmFyY2h5KGVudi5tYWluQ29tcG9uZW50KTsKICB9CgogIERhcnQyanNDb25zdGFudEV2YWx1YXRvciBnZXQgY29uc3RhbnRFdmFsdWF0b3IgewogICAgcmV0dXJuIF9jb25zdGFudEV2YWx1YXRvciA/Pz0gbmV3IERhcnQyanNDb25zdGFudEV2YWx1YXRvcih0eXBlRW52aXJvbm1lbnQsCiAgICAgICAgKGlyLkxvY2F0ZWRNZXNzYWdlIG1lc3NhZ2UsIExpc3Q8aXIuTG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQpIHsKICAgICAgcmVwb3J0TG9jYXRlZE1lc3NhZ2UocmVwb3J0ZXIsIG1lc3NhZ2UsIGNvbnRleHQpOwogICAgfSwgZW52aXJvbm1lbnQ6IF9lbnZpcm9ubWVudC50b01hcCgpKTsKICB9CgogIEBvdmVycmlkZQogIE5hbWUgZ2V0TmFtZShpci5OYW1lIG5hbWUpIHsKICAgIHJldHVybiBuZXcgTmFtZSgKICAgICAgICBuYW1lLm5hbWUsIG5hbWUuaXNQcml2YXRlID8gZ2V0TGlicmFyeShuYW1lLmxpYnJhcnkpIDogbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDYWxsU3RydWN0dXJlIGdldENhbGxTdHJ1Y3R1cmUoaXIuQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgaW50IGFyZ3VtZW50Q291bnQgPSBhcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggKyBhcmd1bWVudHMubmFtZWQubGVuZ3RoOwogICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzID0gYXJndW1lbnRzLm5hbWVkLm1hcCgoZSkgPT4gZS5uYW1lKS50b0xpc3QoKTsKICAgIHJldHVybiBuZXcgQ2FsbFN0cnVjdHVyZSgKICAgICAgICBhcmd1bWVudENvdW50LCBuYW1lZEFyZ3VtZW50cywgYXJndW1lbnRzLnR5cGVzLmxlbmd0aCk7CiAgfQoKICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgZ2V0UGFyYW1ldGVyU3RydWN0dXJlKGlyLkZ1bmN0aW9uTm9kZSBub2RlLAogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhpcyB3aGVuIHR5cGUgYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8KICAgICAgLy8gY29uc3RydWN0b3JzIGxpa2UgY2FsbGluZyBhIGdlbmVyaWMgbWV0aG9kLgogICAgICB7Ym9vbCBpbmNsdWRlVHlwZVBhcmFtZXRlcnM6IHRydWV9KSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDYWNoZSB0aGUgY29tcHV0ZWQgZnVuY3Rpb24gdHlwZS4KICAgIGludCByZXF1aXJlZFBhcmFtZXRlcnMgPSBub2RlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQ7CiAgICBpbnQgcG9zaXRpb25hbFBhcmFtZXRlcnMgPSBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aDsKICAgIGludCB0eXBlUGFyYW1ldGVycyA9IG5vZGUudHlwZVBhcmFtZXRlcnMubGVuZ3RoOwogICAgTGlzdDxTdHJpbmc+IG5hbWVkUGFyYW1ldGVycyA9CiAgICAgICAgbm9kZS5uYW1lZFBhcmFtZXRlcnMubWFwKChwKSA9PiBwLm5hbWUpLnRvTGlzdCgpLi5zb3J0KCk7CiAgICByZXR1cm4gbmV3IFBhcmFtZXRlclN0cnVjdHVyZShyZXF1aXJlZFBhcmFtZXRlcnMsIHBvc2l0aW9uYWxQYXJhbWV0ZXJzLAogICAgICAgIG5hbWVkUGFyYW1ldGVycywgaW5jbHVkZVR5cGVQYXJhbWV0ZXJzID8gdHlwZVBhcmFtZXRlcnMgOiAwKTsKICB9CgogIEBvdmVycmlkZQogIFNlbGVjdG9yIGdldEludm9jYXRpb25TZWxlY3Rvcihpci5OYW1lIGlyTmFtZSwgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywgaW50IHR5cGVBcmd1bWVudHMpIHsKICAgIE5hbWUgbmFtZSA9IGdldE5hbWUoaXJOYW1lKTsKICAgIFNlbGVjdG9yS2luZCBraW5kOwogICAgaWYgKFNlbGVjdG9yLmlzT3BlcmF0b3JOYW1lKG5hbWUudGV4dCkpIHsKICAgICAgaWYgKG5hbWUgPT0gTmFtZXMuSU5ERVhfTkFNRSB8fCBuYW1lID09IE5hbWVzLklOREVYX1NFVF9OQU1FKSB7CiAgICAgICAga2luZCA9IFNlbGVjdG9yS2luZC5JTkRFWDsKICAgICAgfSBlbHNlIHsKICAgICAgICBraW5kID0gU2VsZWN0b3JLaW5kLk9QRVJBVE9SOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBraW5kID0gU2VsZWN0b3JLaW5kLkNBTEw7CiAgICB9CgogICAgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlID0gbmV3IENhbGxTdHJ1Y3R1cmUoCiAgICAgICAgcG9zaXRpb25hbEFyZ3VtZW50cyArIG5hbWVkQXJndW1lbnRzLmxlbmd0aCwKICAgICAgICBuYW1lZEFyZ3VtZW50cywKICAgICAgICB0eXBlQXJndW1lbnRzKTsKICAgIHJldHVybiBuZXcgU2VsZWN0b3Ioa2luZCwgbmFtZSwgY2FsbFN0cnVjdHVyZSk7CiAgfQoKICBTZWxlY3RvciBnZXRHZXR0ZXJTZWxlY3Rvcihpci5OYW1lIGlyTmFtZSkgewogICAgTmFtZSBuYW1lID0gbmV3IE5hbWUoCiAgICAgICAgaXJOYW1lLm5hbWUsIGlyTmFtZS5pc1ByaXZhdGUgPyBnZXRMaWJyYXJ5KGlyTmFtZS5saWJyYXJ5KSA6IG51bGwpOwogICAgcmV0dXJuIG5ldyBTZWxlY3Rvci5nZXR0ZXIobmFtZSk7CiAgfQoKICBTZWxlY3RvciBnZXRTZXR0ZXJTZWxlY3Rvcihpci5OYW1lIGlyTmFtZSkgewogICAgTmFtZSBuYW1lID0gbmV3IE5hbWUoCiAgICAgICAgaXJOYW1lLm5hbWUsIGlyTmFtZS5pc1ByaXZhdGUgPyBnZXRMaWJyYXJ5KGlyTmFtZS5saWJyYXJ5KSA6IG51bGwpOwogICAgcmV0dXJuIG5ldyBTZWxlY3Rvci5zZXR0ZXIobmFtZSk7CiAgfQoKICAvLy8gTG9va3MgdXAgW3R5cGVOYW1lXSBmb3IgdXNlIGluIHRoZSBzcGVjLXN0cmluZyBvZiBhIGBKU2AgY2FsbC4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVc2UgdGhpcyBpbiBbTmF0aXZlQmVoYXZpb3JdIGluc3RlYWQgb2YgY2FsbGluZwogIC8vIHRoZSBgRm9yZWlnblJlc29sdmVyYC4KICBUeXBlTG9va3VwIHR5cGVMb29rdXAoe2Jvb2wgcmVzb2x2ZUFzUmF3OiB0cnVlfSkgewogICAgcmV0dXJuIHJlc29sdmVBc1JhdwogICAgICAgID8gKF9jYWNoZWRUeXBlTG9va3VwUmF3ID8/PSBfdHlwZUxvb2t1cChyZXNvbHZlQXNSYXc6IHRydWUpKQogICAgICAgIDogKF9jYWNoZWRUeXBlTG9va3VwRnVsbCA/Pz0gX3R5cGVMb29rdXAocmVzb2x2ZUFzUmF3OiBmYWxzZSkpOwogIH0KCiAgVHlwZUxvb2t1cCBfY2FjaGVkVHlwZUxvb2t1cFJhdzsKICBUeXBlTG9va3VwIF9jYWNoZWRUeXBlTG9va3VwRnVsbDsKCiAgVHlwZUxvb2t1cCBfdHlwZUxvb2t1cCh7Ym9vbCByZXNvbHZlQXNSYXc6IHRydWV9KSB7CiAgICBib29sIGNhY2hlZE1heUxvb2t1cEluTWFpbjsKICAgIGJvb2wgbWF5TG9va3VwSW5NYWluKCkgewogICAgICB2YXIgbWFpblVyaSA9IGVsZW1lbnRFbnZpcm9ubWVudC5tYWluTGlicmFyeS5jYW5vbmljYWxVcmk7CiAgICAgIC8vIFRlc3RzIHBlcm1pdCBsb29rdXAgb3V0c2lkZSBvZiBkYXJ0OiBsaWJyYXJpZXMuCiAgICAgIHJldHVybiBtYWluVXJpLnBhdGguY29udGFpbnMoJ3Rlc3RzL2NvbXBpbGVyL2RhcnQyanNfbmF0aXZlJykgfHwKICAgICAgICAgIG1haW5VcmkucGF0aC5jb250YWlucygndGVzdHMvY29tcGlsZXIvZGFydDJqc19leHRyYScpOwogICAgfQoKICAgIERhcnRUeXBlIGxvb2t1cChTdHJpbmcgdHlwZU5hbWUsIHtib29sIHJlcXVpcmVkfSkgewogICAgICBEYXJ0VHlwZSBmaW5kSW5MaWJyYXJ5KExpYnJhcnlFbnRpdHkgbGlicmFyeSkgewogICAgICAgIGlmIChsaWJyYXJ5ICE9IG51bGwpIHsKICAgICAgICAgIENsYXNzRW50aXR5IGNscyA9IGVsZW1lbnRFbnZpcm9ubWVudC5sb29rdXBDbGFzcyhsaWJyYXJ5LCB0eXBlTmFtZSk7CiAgICAgICAgICBpZiAoY2xzICE9IG51bGwpIHsKICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQWxpZ24gc2VtYW50aWNzLgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFzUmF3CiAgICAgICAgICAgICAgICA/IGVsZW1lbnRFbnZpcm9ubWVudC5nZXRSYXdUeXBlKGNscykKICAgICAgICAgICAgICAgIDogZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGNscyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CgogICAgICBEYXJ0VHlwZSBmaW5kSW4oVXJpIHVyaSkgewogICAgICAgIHJldHVybiBmaW5kSW5MaWJyYXJ5KGVsZW1lbnRFbnZpcm9ubWVudC5sb29rdXBMaWJyYXJ5KHVyaSkpOwogICAgICB9CgogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBOYXJyb3cgdGhlIHNldCBvZiBsb29rdXBzIGJhc2VkIG9uIHRoZSBkZXBlbmRpbmcKICAgICAgLy8gbGlicmFyeS4KICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2FjaGUgbW9yZSByZXN1bHRzIHRvIGF2b2lkIHJlZHVuZGFudCBsb29rdXBzPwogICAgICBEYXJ0VHlwZSB0eXBlOwogICAgICBpZiAoY2FjaGVkTWF5TG9va3VwSW5NYWluID8/PSBtYXlMb29rdXBJbk1haW4oKSkgewogICAgICAgIHR5cGUgPz89IGZpbmRJbkxpYnJhcnkoZWxlbWVudEVudmlyb25tZW50Lm1haW5MaWJyYXJ5KTsKICAgICAgfQogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X2NvcmUpOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X19qc19oZWxwZXIpOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X19pbnRlcmNlcHRvcnMpOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X19uYXRpdmVfdHlwZWRfZGF0YSk7CiAgICAgIHR5cGUgPz89IGZpbmRJbihVcmlzLmRhcnRfY29sbGVjdGlvbik7CiAgICAgIHR5cGUgPz89IGZpbmRJbihVcmlzLmRhcnRfbWF0aCk7CiAgICAgIHR5cGUgPz89IGZpbmRJbihVcmlzLmRhcnRfaHRtbCk7CiAgICAgIHR5cGUgPz89IGZpbmRJbihVcmlzLmRhcnRfaHRtbF9jb21tb24pOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X3N2Zyk7CiAgICAgIHR5cGUgPz89IGZpbmRJbihVcmlzLmRhcnRfd2ViX2F1ZGlvKTsKICAgICAgdHlwZSA/Pz0gZmluZEluKFVyaXMuZGFydF93ZWJfZ2wpOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X3dlYl9zcWwpOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X2luZGV4ZWRfZGIpOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X3R5cGVkX2RhdGEpOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X19ydGkpOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X21pcnJvcnMpOwogICAgICBpZiAodHlwZSA9PSBudWxsICYmIHJlcXVpcmVkKSB7CiAgICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAgIE1lc3NhZ2VLaW5kLkdFTkVSSUMsIHsndGV4dCc6ICJUeXBlICckdHlwZU5hbWUnIG5vdCBmb3VuZC4ifSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHR5cGU7CiAgICB9CgogICAgcmV0dXJuIGxvb2t1cDsKICB9CgogIFN0cmluZyBfZ2V0U3RyaW5nQXJndW1lbnQoaXIuU3RhdGljSW52b2NhdGlvbiBub2RlLCBpbnQgaW5kZXgpIHsKICAgIHJldHVybiBub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsW2luZGV4XS5hY2NlcHQobmV3IFN0cmluZ2lmaWVyKCkpOwogIH0KCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2FjaGUgdGhpcyBmb3IgbGF0ZXIgdXNlLgogIEBvdmVycmlkZQogIE5hdGl2ZUJlaGF2aW9yIGdldE5hdGl2ZUJlaGF2aW9yRm9ySnNDYWxsKGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSkgewogICAgaWYgKG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoIDwgMiB8fAogICAgICAgIG5vZGUuYXJndW1lbnRzLm5hbWVkLmlzTm90RW1wdHkpIHsKICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwgTWVzc2FnZUtpbmQuV1JPTkdfQVJHVU1FTlRfRk9SX0pTKTsKICAgICAgcmV0dXJuIG5ldyBOYXRpdmVCZWhhdmlvcigpOwogICAgfQogICAgU3RyaW5nIHNwZWNTdHJpbmcgPSBfZ2V0U3RyaW5nQXJndW1lbnQobm9kZSwgMCk7CiAgICBpZiAoc3BlY1N0cmluZyA9PSBudWxsKSB7CiAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsIE1lc3NhZ2VLaW5kLldST05HX0FSR1VNRU5UX0ZPUl9KU19GSVJTVCk7CiAgICAgIHJldHVybiBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKICAgIH0KCiAgICBTdHJpbmcgY29kZVN0cmluZyA9IF9nZXRTdHJpbmdBcmd1bWVudChub2RlLCAxKTsKICAgIGlmIChjb2RlU3RyaW5nID09IG51bGwpIHsKICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwgTWVzc2FnZUtpbmQuV1JPTkdfQVJHVU1FTlRfRk9SX0pTX1NFQ09ORCk7CiAgICAgIHJldHVybiBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKICAgIH0KCiAgICByZXR1cm4gTmF0aXZlQmVoYXZpb3Iub2ZKc0NhbGwoCiAgICAgICAgc3BlY1N0cmluZywKICAgICAgICBjb2RlU3RyaW5nLAogICAgICAgIHR5cGVMb29rdXAocmVzb2x2ZUFzUmF3OiB0cnVlKSwKICAgICAgICBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgIHJlcG9ydGVyLAogICAgICAgIGNvbW1vbkVsZW1lbnRzKTsKICB9CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENhY2hlIHRoaXMgZm9yIGxhdGVyIHVzZS4KICBAb3ZlcnJpZGUKICBOYXRpdmVCZWhhdmlvciBnZXROYXRpdmVCZWhhdmlvckZvckpzQnVpbHRpbkNhbGwoaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKSB7CiAgICBpZiAobm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggPCAxKSB7CiAgICAgIHJlcG9ydGVyLmludGVybmFsRXJyb3IoCiAgICAgICAgICBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLCAiSlMgYnVpbHRpbiBleHByZXNzaW9uIGhhcyBubyB0eXBlLiIpOwogICAgICByZXR1cm4gbmV3IE5hdGl2ZUJlaGF2aW9yKCk7CiAgICB9CiAgICBpZiAobm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggPCAyKSB7CiAgICAgIHJlcG9ydGVyLmludGVybmFsRXJyb3IoCiAgICAgICAgICBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLCAiSlMgYnVpbHRpbiBpcyBtaXNzaW5nIG5hbWUuIik7CiAgICAgIHJldHVybiBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKICAgIH0KICAgIFN0cmluZyBzcGVjU3RyaW5nID0gX2dldFN0cmluZ0FyZ3VtZW50KG5vZGUsIDApOwogICAgaWYgKHNwZWNTdHJpbmcgPT0gbnVsbCkgewogICAgICByZXBvcnRlci5pbnRlcm5hbEVycm9yKAogICAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwgIlVuZXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQuIik7CiAgICAgIHJldHVybiBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKICAgIH0KICAgIHJldHVybiBOYXRpdmVCZWhhdmlvci5vZkpzQnVpbHRpbkNhbGwoCiAgICAgICAgc3BlY1N0cmluZywKICAgICAgICB0eXBlTG9va3VwKHJlc29sdmVBc1JhdzogdHJ1ZSksCiAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICByZXBvcnRlciwKICAgICAgICBjb21tb25FbGVtZW50cyk7CiAgfQoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDYWNoZSB0aGlzIGZvciBsYXRlciB1c2UuCiAgQG92ZXJyaWRlCiAgTmF0aXZlQmVoYXZpb3IgZ2V0TmF0aXZlQmVoYXZpb3JGb3JKc0VtYmVkZGVkR2xvYmFsQ2FsbCgKICAgICAgaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKSB7CiAgICBpZiAobm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggPCAxKSB7CiAgICAgIHJlcG9ydGVyLmludGVybmFsRXJyb3IoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICJKUyBlbWJlZGRlZCBnbG9iYWwgZXhwcmVzc2lvbiBoYXMgbm8gdHlwZS4iKTsKICAgICAgcmV0dXJuIG5ldyBOYXRpdmVCZWhhdmlvcigpOwogICAgfQogICAgaWYgKG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoIDwgMikgewogICAgICByZXBvcnRlci5pbnRlcm5hbEVycm9yKAogICAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwgIkpTIGVtYmVkZGVkIGdsb2JhbCBpcyBtaXNzaW5nIG5hbWUuIik7CiAgICAgIHJldHVybiBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKICAgIH0KICAgIGlmIChub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCA+IDIgfHwKICAgICAgICBub2RlLmFyZ3VtZW50cy5uYW1lZC5pc05vdEVtcHR5KSB7CiAgICAgIHJlcG9ydGVyLmludGVybmFsRXJyb3IoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICJKUyBlbWJlZGRlZCBnbG9iYWwgaGFzIG1vcmUgdGhhbiAyIGFyZ3VtZW50cy4iKTsKICAgICAgcmV0dXJuIG5ldyBOYXRpdmVCZWhhdmlvcigpOwogICAgfQogICAgU3RyaW5nIHNwZWNTdHJpbmcgPSBfZ2V0U3RyaW5nQXJndW1lbnQobm9kZSwgMCk7CiAgICBpZiAoc3BlY1N0cmluZyA9PSBudWxsKSB7CiAgICAgIHJlcG9ydGVyLmludGVybmFsRXJyb3IoCiAgICAgICAgICBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLCAiVW5leHBlY3RlZCBmaXJzdCBhcmd1bWVudC4iKTsKICAgICAgcmV0dXJuIG5ldyBOYXRpdmVCZWhhdmlvcigpOwogICAgfQogICAgcmV0dXJuIE5hdGl2ZUJlaGF2aW9yLm9mSnNFbWJlZGRlZEdsb2JhbENhbGwoCiAgICAgICAgc3BlY1N0cmluZywKICAgICAgICB0eXBlTG9va3VwKHJlc29sdmVBc1JhdzogdHJ1ZSksCiAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICByZXBvcnRlciwKICAgICAgICBjb21tb25FbGVtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5OYW1lIGdldE5hbWVGb3JKc0dldE5hbWUoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgTmFtZXIgbmFtZXIpIHsKICAgIGludCBpbmRleCA9IGV4dHJhY3RFbnVtSW5kZXhGcm9tQ29uc3RhbnRWYWx1ZSgKICAgICAgICBjb25zdGFudCwgY29tbW9uRWxlbWVudHMuanNHZXROYW1lRW51bSk7CiAgICBpZiAoaW5kZXggPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gbmFtZXIuZ2V0TmFtZUZvckpzR2V0TmFtZSgKICAgICAgICBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLCBKc0dldE5hbWUudmFsdWVzW2luZGV4XSk7CiAgfQoKICBpbnQgZXh0cmFjdEVudW1JbmRleEZyb21Db25zdGFudFZhbHVlKAogICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50LCBDbGFzc0VudGl0eSBjbGFzc0VsZW1lbnQpIHsKICAgIGlmIChjb25zdGFudCBpcyBDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUpIHsKICAgICAgaWYgKGNvbnN0YW50LnR5cGUuZWxlbWVudCA9PSBjbGFzc0VsZW1lbnQpIHsKICAgICAgICBhc3NlcnQoY29uc3RhbnQuZmllbGRzLmxlbmd0aCA9PSAxIHx8IGNvbnN0YW50LmZpZWxkcy5sZW5ndGggPT0gMik7CiAgICAgICAgQ29uc3RhbnRWYWx1ZSBpbmRleENvbnN0YW50ID0gY29uc3RhbnQuZmllbGRzLnZhbHVlcy5maXJzdDsKICAgICAgICBpZiAoaW5kZXhDb25zdGFudCBpcyBJbnRDb25zdGFudFZhbHVlKSB7CiAgICAgICAgICByZXR1cm4gaW5kZXhDb25zdGFudC5pbnRWYWx1ZS50b0ludCgpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGdldENvbnN0YW50VmFsdWUoaXIuRXhwcmVzc2lvbiBub2RlLAogICAgICB7Ym9vbCByZXF1aXJlQ29uc3RhbnQ6IHRydWUsCiAgICAgIGJvb2wgaW1wbGljaXROdWxsOiBmYWxzZSwKICAgICAgYm9vbCBjaGVja0Nhc3RzOiB0cnVlfSkgewogICAgaWYgKG5vZGUgaXMgaXIuQ29uc3RhbnRFeHByZXNzaW9uKSB7CiAgICAgIGlyLkNvbnN0YW50IGNvbnN0YW50ID0KICAgICAgICAgIGNvbnN0YW50RXZhbHVhdG9yLmV2YWx1YXRlKG5vZGUsIHJlcXVpcmVDb25zdGFudDogcmVxdWlyZUNvbnN0YW50KTsKICAgICAgaWYgKGNvbnN0YW50ID09IG51bGwpIHsKICAgICAgICBpZiAocmVxdWlyZUNvbnN0YW50KSB7CiAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAgICAgICAnTm8gY29uc3RhbnQgZm9yICR7RGVidWdQcmludGVyLnByZXR0eVByaW50KG5vZGUpfScpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gX2NvbnN0YW50VmFsdWVmaWVyLnZpc2l0Q29uc3RhbnQoY29uc3RhbnQpOwogICAgICB9CiAgICB9CgogICAgQ29uc3RhbnRFeHByZXNzaW9uIGNvbnN0YW50OwogICAgaWYgKG5vZGUgPT0gbnVsbCkgewogICAgICBpZiAoIWltcGxpY2l0TnVsbCkgewogICAgICAgIHRocm93IGZhaWxlZEF0KAogICAgICAgICAgICBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLCAnTm8gZXhwcmVzc2lvbiBmb3IgY29uc3RhbnQuJyk7CiAgICAgIH0KICAgICAgY29uc3RhbnQgPSBuZXcgTnVsbENvbnN0YW50RXhwcmVzc2lvbigpOwogICAgfSBlbHNlIHsKICAgICAgY29uc3RhbnQgPQogICAgICAgICAgbmV3IENvbnN0YW50aWZpZXIodGhpcywgcmVxdWlyZUNvbnN0YW50OiByZXF1aXJlQ29uc3RhbnQpLnZpc2l0KG5vZGUpOwogICAgfQogICAgaWYgKGNvbnN0YW50ID09IG51bGwpIHsKICAgICAgaWYgKHJlcXVpcmVDb25zdGFudCkgewogICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgICAnTm8gY29uc3RhbnQgZm9yICR7RGVidWdQcmludGVyLnByZXR0eVByaW50KG5vZGUpfScpOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IGNvbXB1dGVDb25zdGFudFZhbHVlKAogICAgICAgIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKG5vZGUpLCBjb25zdGFudCwKICAgICAgICByZXF1aXJlQ29uc3RhbnQ6IHJlcXVpcmVDb25zdGFudCwgY2hlY2tDYXN0czogY2hlY2tDYXN0cyk7CiAgICBpZiAoIXZhbHVlLmlzQ29uc3RhbnQgJiYgIXJlcXVpcmVDb25zdGFudCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CgogIC8vLyBDb252ZXJ0cyBbYW5ub3RhdGlvbnNdIGludG8gYSBsaXN0IG9mIFtDb25zdGFudFZhbHVlXXMuCiAgTGlzdDxDb25zdGFudFZhbHVlPiBnZXRNZXRhZGF0YShMaXN0PGlyLkV4cHJlc3Npb24+IGFubm90YXRpb25zKSB7CiAgICBpZiAoYW5ub3RhdGlvbnMuaXNFbXB0eSkgcmV0dXJuIGNvbnN0IDxDb25zdGFudFZhbHVlPltdOwogICAgTGlzdDxDb25zdGFudFZhbHVlPiBtZXRhZGF0YSA9IDxDb25zdGFudFZhbHVlPltdOwogICAgYW5ub3RhdGlvbnMuZm9yRWFjaCgoaXIuRXhwcmVzc2lvbiBub2RlKSB7CiAgICAgIC8vIFdlIHNraXAgdGhlIGltcGxpY2l0IGNhc3QgY2hlY2tzIGZvciBtZXRhZGF0YSB0byBhdm9pZCBjaXJjdWxhcgogICAgICAvLyBkZXBlbmRlbmNpZXMgaW4gdGhlIGpzLWludGVyb3AgY2xhc3MgcmVnaXN0cmF0aW9uLgogICAgICBtZXRhZGF0YS5hZGQoZ2V0Q29uc3RhbnRWYWx1ZShub2RlLCBjaGVja0Nhc3RzOiBmYWxzZSkpOwogICAgfSk7CiAgICByZXR1cm4gbWV0YWRhdGE7CiAgfQoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXRTdXBlck5vU3VjaE1ldGhvZChDbGFzc0VudGl0eSBjbHMpIHsKICAgIHdoaWxlIChjbHMgIT0gbnVsbCkgewogICAgICBjbHMgPSBlbGVtZW50RW52aXJvbm1lbnQuZ2V0U3VwZXJDbGFzcyhjbHMpOwogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gZWxlbWVudEVudmlyb25tZW50Lmxvb2t1cExvY2FsQ2xhc3NNZW1iZXIoCiAgICAgICAgICBjbHMsIElkZW50aWZpZXJzLm5vU3VjaE1ldGhvZF8pOwogICAgICBpZiAobWVtYmVyICE9IG51bGwgJiYgIW1lbWJlci5pc0Fic3RyYWN0KSB7CiAgICAgICAgaWYgKG1lbWJlci5pc0Z1bmN0aW9uKSB7CiAgICAgICAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiA9IG1lbWJlcjsKICAgICAgICAgIGlmIChmdW5jdGlvbi5wYXJhbWV0ZXJTdHJ1Y3R1cmUucG9zaXRpb25hbFBhcmFtZXRlcnMgPj0gMSkgewogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb247CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIElmIFttZW1iZXJdIGlzIG5vdCBhIHZhbGlkIGBub1N1Y2hNZXRob2RgIHRoZSB0YXJnZXQgaXMKICAgICAgICAvLyBgT2JqZWN0LnN1cGVyTm9TdWNoTWV0aG9kYC4KICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24gPSBlbGVtZW50RW52aXJvbm1lbnQubG9va3VwTG9jYWxDbGFzc01lbWJlcigKICAgICAgICBjb21tb25FbGVtZW50cy5vYmplY3RDbGFzcywgSWRlbnRpZmllcnMubm9TdWNoTWV0aG9kXyk7CiAgICBhc3NlcnQoZnVuY3Rpb24gIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdChjbHMsICJObyBzdXBlciBub1N1Y2hNZXRob2QgZm91bmQgZm9yIGNsYXNzICRjbHMuIikpOwogICAgcmV0dXJuIGZ1bmN0aW9uOwogIH0KCiAgSXRlcmFibGU8TGlicmFyeUVudGl0eT4gZ2V0IGxpYnJhcnlMaXN0SW50ZXJuYWwgewogICAgaWYgKGVudi5sZW5ndGggIT0gbGlicmFyeU1hcC5sZW5ndGgpIHsKICAgICAgLy8gQ3JlYXRlIGEgW0tMaWJyYXJ5XSBmb3IgZWFjaCBsaWJyYXJ5LgogICAgICBlbnYuZm9yRWFjaExpYnJhcnkoKEtMaWJyYXJ5RW52IGVudikgewogICAgICAgIGdldExpYnJhcnlJbnRlcm5hbChlbnYubGlicmFyeSwgZW52KTsKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gbGlicmFyeU1hcC52YWx1ZXM7CiAgfQoKICBMaWJyYXJ5RW50aXR5IGdldExpYnJhcnlJbnRlcm5hbChpci5MaWJyYXJ5IG5vZGUsIFtLTGlicmFyeUVudiBsaWJyYXJ5RW52XSkgewogICAgcmV0dXJuIGxpYnJhcnlNYXBbbm9kZV0gPz89IF9nZXRMaWJyYXJ5Q3JlYXRlKG5vZGUsIGxpYnJhcnlFbnYpOwogIH0KCiAgTGlicmFyeUVudGl0eSBfZ2V0TGlicmFyeUNyZWF0ZShpci5MaWJyYXJ5IG5vZGUsIEtMaWJyYXJ5RW52IGxpYnJhcnlFbnYpIHsKICAgIGFzc2VydCgKICAgICAgICAhZW52SXNDbG9zZWQsCiAgICAgICAgIkVudmlyb25tZW50IG9mICR0aGlzIGlzIGNsb3NlZC4gVHJ5aW5nIHRvIGNyZWF0ZSAiCiAgICAgICAgImxpYnJhcnkgZm9yICRub2RlLiIpOwogICAgVXJpIGNhbm9uaWNhbFVyaSA9IG5vZGUuaW1wb3J0VXJpOwogICAgU3RyaW5nIG5hbWUgPSBub2RlLm5hbWU7CiAgICBpZiAobmFtZSA9PSBudWxsKSB7CiAgICAgIC8vIFVzZSB0aGUgZmlsZSBuYW1lIGFzIHNjcmlwdCBuYW1lLgogICAgICBTdHJpbmcgcGF0aCA9IGNhbm9uaWNhbFVyaS5wYXRoOwogICAgICBuYW1lID0gcGF0aC5zdWJzdHJpbmcocGF0aC5sYXN0SW5kZXhPZignLycpICsgMSk7CiAgICB9CiAgICBJbmRleGVkTGlicmFyeSBsaWJyYXJ5ID0gY3JlYXRlTGlicmFyeShuYW1lLCBjYW5vbmljYWxVcmkpOwogICAgcmV0dXJuIGxpYnJhcmllcy5yZWdpc3RlcihsaWJyYXJ5LCBuZXcgS0xpYnJhcnlEYXRhKG5vZGUpLAogICAgICAgIGxpYnJhcnlFbnYgPz8gZW52Lmxvb2t1cExpYnJhcnkoY2Fub25pY2FsVXJpKSk7CiAgfQoKICBDbGFzc0VudGl0eSBnZXRDbGFzc0ludGVybmFsKGlyLkNsYXNzIG5vZGUsIFtLQ2xhc3NFbnYgY2xhc3NFbnZdKSB7CiAgICByZXR1cm4gY2xhc3NNYXBbbm9kZV0gPz89IF9nZXRDbGFzc0NyZWF0ZShub2RlLCBjbGFzc0Vudik7CiAgfQoKICBDbGFzc0VudGl0eSBfZ2V0Q2xhc3NDcmVhdGUoaXIuQ2xhc3Mgbm9kZSwgS0NsYXNzRW52IGNsYXNzRW52KSB7CiAgICBhc3NlcnQoCiAgICAgICAgIWVudklzQ2xvc2VkLAogICAgICAgICJFbnZpcm9ubWVudCBvZiAkdGhpcyBpcyBjbG9zZWQuIFRyeWluZyB0byBjcmVhdGUgIgogICAgICAgICJjbGFzcyBmb3IgJG5vZGUuIik7CiAgICBLTGlicmFyeSBsaWJyYXJ5ID0gZ2V0TGlicmFyeUludGVybmFsKG5vZGUuZW5jbG9zaW5nTGlicmFyeSk7CiAgICBpZiAoY2xhc3NFbnYgPT0gbnVsbCkgewogICAgICBjbGFzc0VudiA9IGxpYnJhcmllcy5nZXRFbnYobGlicmFyeSkubG9va3VwQ2xhc3Mobm9kZS5uYW1lKTsKICAgIH0KICAgIEluZGV4ZWRDbGFzcyBjbHMgPQogICAgICAgIGNyZWF0ZUNsYXNzKGxpYnJhcnksIG5vZGUubmFtZSwgaXNBYnN0cmFjdDogbm9kZS5pc0Fic3RyYWN0KTsKICAgIHJldHVybiBjbGFzc2VzLnJlZ2lzdGVyKGNscywgbmV3IEtDbGFzc0RhdGFJbXBsKG5vZGUpLCBjbGFzc0Vudik7CiAgfQoKICBUeXBlZGVmRW50aXR5IGdldFR5cGVkZWZJbnRlcm5hbChpci5UeXBlZGVmIG5vZGUpIHsKICAgIHJldHVybiB0eXBlZGVmTWFwW25vZGVdID8/PSBfZ2V0VHlwZWRlZkNyZWF0ZShub2RlKTsKICB9CgogIFR5cGVkZWZFbnRpdHkgX2dldFR5cGVkZWZDcmVhdGUoaXIuVHlwZWRlZiBub2RlKSB7CiAgICBhc3NlcnQoCiAgICAgICAgIWVudklzQ2xvc2VkLAogICAgICAgICJFbnZpcm9ubWVudCBvZiAkdGhpcyBpcyBjbG9zZWQuIFRyeWluZyB0byBjcmVhdGUgIgogICAgICAgICJ0eXBlZGVmIGZvciAkbm9kZS4iKTsKICAgIEluZGV4ZWRMaWJyYXJ5IGxpYnJhcnkgPSBnZXRMaWJyYXJ5SW50ZXJuYWwobm9kZS5lbmNsb3NpbmdMaWJyYXJ5KTsKICAgIEluZGV4ZWRUeXBlZGVmIHR5cGVkZWYgPSBjcmVhdGVUeXBlZGVmKGxpYnJhcnksIG5vZGUubmFtZSk7CiAgICBUeXBlZGVmVHlwZSB0eXBlZGVmVHlwZSA9IG5ldyBUeXBlZGVmVHlwZSgKICAgICAgICB0eXBlZGVmLAogICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQoCiAgICAgICAgICAgIG5vZGUudHlwZVBhcmFtZXRlcnMubGVuZ3RoLCBjb25zdCBEeW5hbWljVHlwZSgpKSwKICAgICAgICBnZXREYXJ0VHlwZShub2RlLnR5cGUpKTsKICAgIHJldHVybiB0eXBlZGVmcy5yZWdpc3RlcigKICAgICAgICB0eXBlZGVmLCBuZXcgS1R5cGVkZWZEYXRhKG5vZGUsIHR5cGVkZWYsIHR5cGVkZWZUeXBlKSk7CiAgfQoKICBUeXBlVmFyaWFibGVFbnRpdHkgZ2V0VHlwZVZhcmlhYmxlSW50ZXJuYWwoaXIuVHlwZVBhcmFtZXRlciBub2RlKSB7CiAgICByZXR1cm4gdHlwZVZhcmlhYmxlTWFwW25vZGVdID8/PSBfZ2V0VHlwZVZhcmlhYmxlQ3JlYXRlKG5vZGUpOwogIH0KCiAgVHlwZVZhcmlhYmxlRW50aXR5IF9nZXRUeXBlVmFyaWFibGVDcmVhdGUoaXIuVHlwZVBhcmFtZXRlciBub2RlKSB7CiAgICBhc3NlcnQoCiAgICAgICAgIWVudklzQ2xvc2VkLAogICAgICAgICJFbnZpcm9ubWVudCBvZiAkdGhpcyBpcyBjbG9zZWQuIFRyeWluZyB0byBjcmVhdGUgIgogICAgICAgICJ0eXBlIHZhcmlhYmxlIGZvciAkbm9kZS4iKTsKICAgIGlmIChub2RlLnBhcmVudCBpcyBpci5DbGFzcykgewogICAgICBpci5DbGFzcyBjbHMgPSBub2RlLnBhcmVudDsKICAgICAgaW50IGluZGV4ID0gY2xzLnR5cGVQYXJhbWV0ZXJzLmluZGV4T2Yobm9kZSk7CiAgICAgIHJldHVybiB0eXBlVmFyaWFibGVzLnJlZ2lzdGVyKAogICAgICAgICAgY3JlYXRlVHlwZVZhcmlhYmxlKGdldENsYXNzSW50ZXJuYWwoY2xzKSwgbm9kZS5uYW1lLCBpbmRleCksCiAgICAgICAgICBuZXcgS1R5cGVWYXJpYWJsZURhdGEobm9kZSkpOwogICAgfQogICAgaWYgKG5vZGUucGFyZW50IGlzIGlyLkZ1bmN0aW9uTm9kZSkgewogICAgICBpci5GdW5jdGlvbk5vZGUgZnVuYyA9IG5vZGUucGFyZW50OwogICAgICBpbnQgaW5kZXggPSBmdW5jLnR5cGVQYXJhbWV0ZXJzLmluZGV4T2Yobm9kZSk7CiAgICAgIGlmIChmdW5jLnBhcmVudCBpcyBpci5Db25zdHJ1Y3RvcikgewogICAgICAgIGlyLkNvbnN0cnVjdG9yIGNvbnN0cnVjdG9yID0gZnVuYy5wYXJlbnQ7CiAgICAgICAgaXIuQ2xhc3MgY2xzID0gY29uc3RydWN0b3IuZW5jbG9zaW5nQ2xhc3M7CiAgICAgICAgcmV0dXJuIGdldFR5cGVWYXJpYWJsZUludGVybmFsKGNscy50eXBlUGFyYW1ldGVyc1tpbmRleF0pOwogICAgICB9IGVsc2UgaWYgKGZ1bmMucGFyZW50IGlzIGlyLlByb2NlZHVyZSkgewogICAgICAgIGlyLlByb2NlZHVyZSBwcm9jZWR1cmUgPSBmdW5jLnBhcmVudDsKICAgICAgICBpZiAocHJvY2VkdXJlLmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5GYWN0b3J5KSB7CiAgICAgICAgICBpci5DbGFzcyBjbHMgPSBwcm9jZWR1cmUuZW5jbG9zaW5nQ2xhc3M7CiAgICAgICAgICByZXR1cm4gZ2V0VHlwZVZhcmlhYmxlSW50ZXJuYWwoY2xzLnR5cGVQYXJhbWV0ZXJzW2luZGV4XSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiB0eXBlVmFyaWFibGVzLnJlZ2lzdGVyKAogICAgICAgICAgICAgIGNyZWF0ZVR5cGVWYXJpYWJsZSgKICAgICAgICAgICAgICAgICAgZ2V0TWV0aG9kSW50ZXJuYWwocHJvY2VkdXJlKSwgbm9kZS5uYW1lLCBpbmRleCksCiAgICAgICAgICAgICAgbmV3IEtUeXBlVmFyaWFibGVEYXRhKG5vZGUpKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZnVuYy5wYXJlbnQgaXMgaXIuTG9jYWxGdW5jdGlvbikgewogICAgICAgIC8vIEVuc3VyZSB0aGF0IGxvY2FsIGZ1bmN0aW9uIHR5cGUgdmFyaWFibGVzIGhhdmUgYmVlbiBjcmVhdGVkLgogICAgICAgIGdldExvY2FsRnVuY3Rpb24oZnVuYy5wYXJlbnQpOwogICAgICAgIHJldHVybiB0eXBlVmFyaWFibGVNYXBbbm9kZV07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ1Vuc3VwcG9ydGVkIGZ1bmN0aW9uIHR5cGUgcGFyYW1ldGVyIHBhcmVudCAnCiAgICAgICAgICAgICdub2RlICR7ZnVuYy5wYXJlbnR9LicpOwogICAgICB9CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignVW5zdXBwb3J0ZWQgdHlwZSBwYXJhbWV0ZXIgdHlwZSBub2RlICRub2RlLicpOwogIH0KCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0Q29uc3RydWN0b3JJbnRlcm5hbChpci5NZW1iZXIgbm9kZSkgewogICAgcmV0dXJuIGNvbnN0cnVjdG9yTWFwW25vZGVdID8/PSBfZ2V0Q29uc3RydWN0b3JDcmVhdGUobm9kZSk7CiAgfQoKICBDb25zdHJ1Y3RvckVudGl0eSBfZ2V0Q29uc3RydWN0b3JDcmVhdGUoaXIuTWVtYmVyIG5vZGUpIHsKICAgIGFzc2VydCgKICAgICAgICAhZW52SXNDbG9zZWQsCiAgICAgICAgIkVudmlyb25tZW50IG9mICR0aGlzIGlzIGNsb3NlZC4gVHJ5aW5nIHRvIGNyZWF0ZSAiCiAgICAgICAgImNvbnN0cnVjdG9yIGZvciAkbm9kZS4iKTsKICAgIGlyLkZ1bmN0aW9uTm9kZSBmdW5jdGlvbk5vZGU7CiAgICBDbGFzc0VudGl0eSBlbmNsb3NpbmdDbGFzcyA9IGdldENsYXNzSW50ZXJuYWwobm9kZS5lbmNsb3NpbmdDbGFzcyk7CiAgICBOYW1lIG5hbWUgPSBnZXROYW1lKG5vZGUubmFtZSk7CiAgICBib29sIGlzRXh0ZXJuYWwgPSBub2RlLmlzRXh0ZXJuYWw7CgogICAgSW5kZXhlZENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yOwogICAgaWYgKG5vZGUgaXMgaXIuQ29uc3RydWN0b3IpIHsKICAgICAgZnVuY3Rpb25Ob2RlID0gbm9kZS5mdW5jdGlvbjsKICAgICAgY29uc3RydWN0b3IgPSBjcmVhdGVHZW5lcmF0aXZlQ29uc3RydWN0b3IoZW5jbG9zaW5nQ2xhc3MsIG5hbWUsCiAgICAgICAgICBnZXRQYXJhbWV0ZXJTdHJ1Y3R1cmUoZnVuY3Rpb25Ob2RlLCBpbmNsdWRlVHlwZVBhcmFtZXRlcnM6IGZhbHNlKSwKICAgICAgICAgIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwsIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCk7CiAgICB9IGVsc2UgaWYgKG5vZGUgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICAgIGZ1bmN0aW9uTm9kZSA9IG5vZGUuZnVuY3Rpb247CiAgICAgIGJvb2wgaXNGcm9tRW52aXJvbm1lbnQgPSBpc0V4dGVybmFsICYmCiAgICAgICAgICBuYW1lLnRleHQgPT0gJ2Zyb21FbnZpcm9ubWVudCcgJiYKICAgICAgICAgIGNvbnN0IFsnaW50JywgJ2Jvb2wnLCAnU3RyaW5nJ10uY29udGFpbnMoZW5jbG9zaW5nQ2xhc3MubmFtZSk7CiAgICAgIGNvbnN0cnVjdG9yID0gY3JlYXRlRmFjdG9yeUNvbnN0cnVjdG9yKGVuY2xvc2luZ0NsYXNzLCBuYW1lLAogICAgICAgICAgZ2V0UGFyYW1ldGVyU3RydWN0dXJlKGZ1bmN0aW9uTm9kZSwgaW5jbHVkZVR5cGVQYXJhbWV0ZXJzOiBmYWxzZSksCiAgICAgICAgICBpc0V4dGVybmFsOiBpc0V4dGVybmFsLAogICAgICAgICAgaXNDb25zdDogbm9kZS5pc0NvbnN0LAogICAgICAgICAgaXNGcm9tRW52aXJvbm1lbnRDb25zdHJ1Y3RvcjogaXNGcm9tRW52aXJvbm1lbnQpOwogICAgfSBlbHNlIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ29udmVydCBgbm9kZS5sb2NhdGlvbmAgdG8gYSBbU291cmNlU3Bhbl0uCiAgICAgIHRocm93IGZhaWxlZEF0KAogICAgICAgICAgTk9fTE9DQVRJT05fU1BBTk5BQkxFLCAiVW5leHBlY3RlZCBjb25zdHJ1Y3RvciBub2RlOiAke25vZGV9LiIpOwogICAgfQogICAgcmV0dXJuIG1lbWJlcnMucmVnaXN0ZXI8SW5kZXhlZENvbnN0cnVjdG9yLCBLQ29uc3RydWN0b3JEYXRhPigKICAgICAgICBjb25zdHJ1Y3RvciwgbmV3IEtDb25zdHJ1Y3RvckRhdGFJbXBsKG5vZGUsIGZ1bmN0aW9uTm9kZSkpOwogIH0KCiAgRnVuY3Rpb25FbnRpdHkgZ2V0TWV0aG9kSW50ZXJuYWwoaXIuUHJvY2VkdXJlIG5vZGUpIHsKICAgIC8vIFtfZ2V0TWV0aG9kQ3JlYXRlXSBpbnNlcnRzIHRoZSBjcmVhdGVkIGZ1bmN0aW9uIGluIFttZXRob2RNYXBdIHNvIHdlCiAgICAvLyBkb24ndCBuZWVkIHRvIHVzZSA/Pz0gaGVyZS4KICAgIHJldHVybiBtZXRob2RNYXBbbm9kZV0gPz8gX2dldE1ldGhvZENyZWF0ZShub2RlKTsKICB9CgogIEZ1bmN0aW9uRW50aXR5IF9nZXRNZXRob2RDcmVhdGUoaXIuUHJvY2VkdXJlIG5vZGUpIHsKICAgIGFzc2VydCgKICAgICAgICAhZW52SXNDbG9zZWQsCiAgICAgICAgIkVudmlyb25tZW50IG9mICR0aGlzIGlzIGNsb3NlZC4gVHJ5aW5nIHRvIGNyZWF0ZSAiCiAgICAgICAgImZ1bmN0aW9uIGZvciAkbm9kZS4iKTsKICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uOwogICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5OwogICAgQ2xhc3NFbnRpdHkgZW5jbG9zaW5nQ2xhc3M7CiAgICBpZiAobm9kZS5lbmNsb3NpbmdDbGFzcyAhPSBudWxsKSB7CiAgICAgIGVuY2xvc2luZ0NsYXNzID0gZ2V0Q2xhc3NJbnRlcm5hbChub2RlLmVuY2xvc2luZ0NsYXNzKTsKICAgICAgbGlicmFyeSA9IGVuY2xvc2luZ0NsYXNzLmxpYnJhcnk7CiAgICB9IGVsc2UgewogICAgICBsaWJyYXJ5ID0gZ2V0TGlicmFyeUludGVybmFsKG5vZGUuZW5jbG9zaW5nTGlicmFyeSk7CiAgICB9CiAgICBOYW1lIG5hbWUgPSBnZXROYW1lKG5vZGUubmFtZSk7CiAgICBib29sIGlzU3RhdGljID0gbm9kZS5pc1N0YXRpYzsKICAgIGJvb2wgaXNFeHRlcm5hbCA9IG5vZGUuaXNFeHRlcm5hbDsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSBgJiYgIW5vZGUuaXNFeHRlcm5hbGAgd2hlbiAjMzEyMzMgaXMgZml4ZWQuCiAgICBib29sIGlzQWJzdHJhY3QgPSBub2RlLmlzQWJzdHJhY3QgJiYgIW5vZGUuaXNFeHRlcm5hbDsKICAgIEFzeW5jTWFya2VyIGFzeW5jTWFya2VyID0gZ2V0QXN5bmNNYXJrZXIobm9kZS5mdW5jdGlvbik7CiAgICBzd2l0Y2ggKG5vZGUua2luZCkgewogICAgICBjYXNlIGlyLlByb2NlZHVyZUtpbmQuRmFjdG9yeToKICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGNyZWF0ZSBtZXRob2QgZnJvbSBmYWN0b3J5LiIpOwogICAgICBjYXNlIGlyLlByb2NlZHVyZUtpbmQuR2V0dGVyOgogICAgICAgIGZ1bmN0aW9uID0gY3JlYXRlR2V0dGVyKGxpYnJhcnksIGVuY2xvc2luZ0NsYXNzLCBuYW1lLCBhc3luY01hcmtlciwKICAgICAgICAgICAgaXNTdGF0aWM6IGlzU3RhdGljLCBpc0V4dGVybmFsOiBpc0V4dGVybmFsLCBpc0Fic3RyYWN0OiBpc0Fic3RyYWN0KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBpci5Qcm9jZWR1cmVLaW5kLk1ldGhvZDoKICAgICAgY2FzZSBpci5Qcm9jZWR1cmVLaW5kLk9wZXJhdG9yOgogICAgICAgIGZ1bmN0aW9uID0gY3JlYXRlTWV0aG9kKGxpYnJhcnksIGVuY2xvc2luZ0NsYXNzLCBuYW1lLAogICAgICAgICAgICBnZXRQYXJhbWV0ZXJTdHJ1Y3R1cmUobm9kZS5mdW5jdGlvbiksIGFzeW5jTWFya2VyLAogICAgICAgICAgICBpc1N0YXRpYzogaXNTdGF0aWMsIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwsIGlzQWJzdHJhY3Q6IGlzQWJzdHJhY3QpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIGlyLlByb2NlZHVyZUtpbmQuU2V0dGVyOgogICAgICAgIGFzc2VydChhc3luY01hcmtlciA9PSBBc3luY01hcmtlci5TWU5DKTsKICAgICAgICBmdW5jdGlvbiA9IGNyZWF0ZVNldHRlcihsaWJyYXJ5LCBlbmNsb3NpbmdDbGFzcywgbmFtZS5zZXR0ZXIsCiAgICAgICAgICAgIGlzU3RhdGljOiBpc1N0YXRpYywgaXNFeHRlcm5hbDogaXNFeHRlcm5hbCwgaXNBYnN0cmFjdDogaXNBYnN0cmFjdCk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBtZW1iZXJzLnJlZ2lzdGVyPEluZGV4ZWRGdW5jdGlvbiwgS0Z1bmN0aW9uRGF0YT4oCiAgICAgICAgZnVuY3Rpb24sIG5ldyBLRnVuY3Rpb25EYXRhSW1wbChub2RlLCBub2RlLmZ1bmN0aW9uKSk7CiAgICAvLyBXZSBuZWVkIHRvIHJlZ2lzdGVyIHRoZSBmdW5jdGlvbiBiZWZvcmUgY3JlYXRpbmcgdGhlIHR5cGUgdmFyaWFibGVzLgogICAgbWV0aG9kTWFwW25vZGVdID0gZnVuY3Rpb247CiAgICBmb3IgKGlyLlR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlciBpbiBub2RlLmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgIGdldFR5cGVWYXJpYWJsZSh0eXBlUGFyYW1ldGVyKTsKICAgIH0KICAgIHJldHVybiBmdW5jdGlvbjsKICB9CgogIEZpZWxkRW50aXR5IGdldEZpZWxkSW50ZXJuYWwoaXIuRmllbGQgbm9kZSkgewogICAgcmV0dXJuIGZpZWxkTWFwW25vZGVdID8/PSBfZ2V0RmllbGRDcmVhdGUobm9kZSk7CiAgfQoKICBGaWVsZEVudGl0eSBfZ2V0RmllbGRDcmVhdGUoaXIuRmllbGQgbm9kZSkgewogICAgYXNzZXJ0KAogICAgICAgICFlbnZJc0Nsb3NlZCwKICAgICAgICAiRW52aXJvbm1lbnQgb2YgJHRoaXMgaXMgY2xvc2VkLiBUcnlpbmcgdG8gY3JlYXRlICIKICAgICAgICAiZmllbGQgZm9yICRub2RlLiIpOwogICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5OwogICAgQ2xhc3NFbnRpdHkgZW5jbG9zaW5nQ2xhc3M7CiAgICBpZiAobm9kZS5lbmNsb3NpbmdDbGFzcyAhPSBudWxsKSB7CiAgICAgIGVuY2xvc2luZ0NsYXNzID0gZ2V0Q2xhc3NJbnRlcm5hbChub2RlLmVuY2xvc2luZ0NsYXNzKTsKICAgICAgbGlicmFyeSA9IGVuY2xvc2luZ0NsYXNzLmxpYnJhcnk7CiAgICB9IGVsc2UgewogICAgICBsaWJyYXJ5ID0gZ2V0TGlicmFyeUludGVybmFsKG5vZGUuZW5jbG9zaW5nTGlicmFyeSk7CiAgICB9CiAgICBOYW1lIG5hbWUgPSBnZXROYW1lKG5vZGUubmFtZSk7CiAgICBib29sIGlzU3RhdGljID0gbm9kZS5pc1N0YXRpYzsKICAgIEluZGV4ZWRGaWVsZCBmaWVsZCA9IGNyZWF0ZUZpZWxkKGxpYnJhcnksIGVuY2xvc2luZ0NsYXNzLCBuYW1lLAogICAgICAgIGlzU3RhdGljOiBpc1N0YXRpYywKICAgICAgICBpc0Fzc2lnbmFibGU6IG5vZGUuaXNNdXRhYmxlLAogICAgICAgIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCk7CiAgICByZXR1cm4gbWVtYmVycy5yZWdpc3RlcjxJbmRleGVkRmllbGQsIEtGaWVsZERhdGE+KAogICAgICAgIGZpZWxkLCBuZXcgS0ZpZWxkRGF0YUltcGwobm9kZSkpOwogIH0KCiAgYm9vbCBjaGVja0ZhbWlseShFbnRpdHkgZW50aXR5KSB7CiAgICBhc3NlcnQoCiAgICAgICAgJyRlbnRpdHknLnN0YXJ0c1dpdGgoa0VsZW1lbnRQcmVmaXgpLAogICAgICAgIGZhaWxlZEF0KGVudGl0eSwKICAgICAgICAgICAgIlVuZXhwZWN0ZWQgZW50aXR5ICRlbnRpdHksIGV4cGVjdGVkIGZhbWlseSAka0VsZW1lbnRQcmVmaXguIikpOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLy8gTmF0aXZlQmFzaWNEYXRhIGlzIG5lZWQgZm9yIGNvbXB1dGF0aW9uIG9mIHRoZSBkZWZhdWx0IHN1cGVyIGNsYXNzLgogIEBvdmVycmlkZQogIE5hdGl2ZUJhc2ljRGF0YSBnZXQgbmF0aXZlQmFzaWNEYXRhID0+IF9mcm9udGVuZFN0cmF0ZWd5Lm5hdGl2ZUJhc2ljRGF0YTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRDb21wb25lbnQoaXIuQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgZW52LmFkZENvbXBvbmVudChjb21wb25lbnQpOwogIH0KCiAgQmVoYXZpb3JCdWlsZGVyIGdldCBuYXRpdmVCZWhhdmlvckJ1aWxkZXIgPT4KICAgICAgX25hdGl2ZUJlaGF2aW9yQnVpbGRlciA/Pz0gbmV3IEtlcm5lbEJlaGF2aW9yQnVpbGRlcihlbGVtZW50RW52aXJvbm1lbnQsCiAgICAgICAgICBjb21tb25FbGVtZW50cywgbmF0aXZlQmFzaWNEYXRhLCByZXBvcnRlciwgb3B0aW9ucyk7CgogIFJlc29sdXRpb25JbXBhY3QgY29tcHV0ZVdvcmxkSW1wYWN0KEtNZW1iZXIgbWVtYmVyLAogICAgICBWYXJpYWJsZVNjb3BlTW9kZWwgdmFyaWFibGVTY29wZU1vZGVsLCBTZXQ8UHJhZ21hQW5ub3RhdGlvbj4gYW5ub3RhdGlvbnMsCiAgICAgIHtJbXBhY3RCdWlsZGVyRGF0YSBpbXBhY3RCdWlsZGVyRGF0YX0pIHsKICAgIEtNZW1iZXJEYXRhIG1lbWJlckRhdGEgPSBtZW1iZXJzLmdldERhdGEobWVtYmVyKTsKICAgIGlyLk1lbWJlciBub2RlID0gbWVtYmVyRGF0YS5ub2RlOwoKICAgIGlmIChpbXBhY3RCdWlsZGVyRGF0YSAhPSBudWxsKSB7CiAgICAgIGlmIChpbXBhY3RCdWlsZGVyRGF0YS50eXBlTWFwc0ZvclRlc3RpbmcgIT0gbnVsbCkgewogICAgICAgIHR5cGVNYXBzRm9yVGVzdGluZyA/Pz0ge307CiAgICAgICAgdHlwZU1hcHNGb3JUZXN0aW5nW21lbWJlcl0gPSBpbXBhY3RCdWlsZGVyRGF0YS50eXBlTWFwc0ZvclRlc3Rpbmc7CiAgICAgIH0KICAgICAgSW1wYWN0RGF0YSBpbXBhY3REYXRhID0gaW1wYWN0QnVpbGRlckRhdGEuaW1wYWN0RGF0YTsKICAgICAgbWVtYmVyRGF0YS5zdGF0aWNUeXBlcyA9IGltcGFjdEJ1aWxkZXJEYXRhLmNhY2hlZFN0YXRpY1R5cGVzOwogICAgICBLZXJuZWxJbXBhY3RDb252ZXJ0ZXIgY29udmVydGVyID0gbmV3IEtlcm5lbEltcGFjdENvbnZlcnRlcigKICAgICAgICAgIHRoaXMsIG1lbWJlciwgcmVwb3J0ZXIsIG9wdGlvbnMsIF9jb25zdGFudFZhbHVlZmllcik7CiAgICAgIHJldHVybiBjb252ZXJ0ZXIuY29udmVydChpbXBhY3REYXRhKTsKICAgIH0gZWxzZSB7CiAgICAgIEtlcm5lbEltcGFjdEJ1aWxkZXIgYnVpbGRlciA9IG5ldyBLZXJuZWxJbXBhY3RCdWlsZGVyKAogICAgICAgICAgdGhpcywKICAgICAgICAgIG1lbWJlciwKICAgICAgICAgIHJlcG9ydGVyLAogICAgICAgICAgb3B0aW9ucywKICAgICAgICAgIHZhcmlhYmxlU2NvcGVNb2RlbCwKICAgICAgICAgIGFubm90YXRpb25zLAogICAgICAgICAgX2NvbnN0YW50VmFsdWVmaWVyKTsKICAgICAgaWYgKHJldGFpbkRhdGFGb3JUZXN0aW5nKSB7CiAgICAgICAgdHlwZU1hcHNGb3JUZXN0aW5nID8/PSB7fTsKICAgICAgICB0eXBlTWFwc0ZvclRlc3RpbmdbbWVtYmVyXSA9IGJ1aWxkZXIudHlwZU1hcHNGb3JUZXN0aW5nID0ge307CiAgICAgIH0KICAgICAgbm9kZS5hY2NlcHQoYnVpbGRlcik7CiAgICAgIG1lbWJlckRhdGEuc3RhdGljVHlwZXMgPSBidWlsZGVyLmdldFN0YXRpY1R5cGVDYWNoZSgpOwogICAgICByZXR1cm4gYnVpbGRlci5pbXBhY3RCdWlsZGVyOwogICAgfQogIH0KCiAgU3RhdGljVHlwZUNhY2hlIGdldENhY2hlZFN0YXRpY1R5cGVzKEtNZW1iZXIgbWVtYmVyKSB7CiAgICBTdGF0aWNUeXBlQ2FjaGUgc3RhdGljVHlwZXMgPSBtZW1iZXJzLmdldERhdGEobWVtYmVyKS5zdGF0aWNUeXBlczsKICAgIGFzc2VydChzdGF0aWNUeXBlcyAhPSBudWxsLCAiTm8gc3RhdGljIHR5cGVzIGNhY2hlZCBmb3IgJG1lbWJlci4iKTsKICAgIHJldHVybiBzdGF0aWNUeXBlczsKICB9CgogIE1hcDxpci5FeHByZXNzaW9uLCBUeXBlTWFwPiBnZXRUeXBlTWFwc0ZvclRlc3RpbmcoS01lbWJlciBtZW1iZXIpIHsKICAgIHJldHVybiB0eXBlTWFwc0ZvclRlc3RpbmdbbWVtYmVyXTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBrZXJuZWwgW2lyLlByb2NlZHVyZV0gbm9kZSBmb3IgdGhlIFttZXRob2RdLgogIGlyLlByb2NlZHVyZSBfbG9va3VwUHJvY2VkdXJlKEtGdW5jdGlvbiBtZXRob2QpIHsKICAgIHJldHVybiBtZW1iZXJzLmdldERhdGEobWV0aG9kKS5ub2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuTGlicmFyeSBnZXRMaWJyYXJ5Tm9kZShMaWJyYXJ5RW50aXR5IGxpYnJhcnkpIHsKICAgIHJldHVybiBsaWJyYXJpZXMuZ2V0RGF0YShsaWJyYXJ5KS5saWJyYXJ5OwogIH0KCiAgQG92ZXJyaWRlCiAgTG9jYWwgZ2V0TG9jYWxGdW5jdGlvbihpci5Mb2NhbEZ1bmN0aW9uIG5vZGUpIHsKICAgIEtMb2NhbEZ1bmN0aW9uIGxvY2FsRnVuY3Rpb24gPSBsb2NhbEZ1bmN0aW9uTWFwW25vZGVdOwogICAgaWYgKGxvY2FsRnVuY3Rpb24gPT0gbnVsbCkgewogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyQ29udGV4dDsKICAgICAgRW50aXR5IGV4ZWN1dGFibGVDb250ZXh0OwogICAgICBpci5UcmVlTm9kZSBwYXJlbnQgPSBub2RlLnBhcmVudDsKICAgICAgd2hpbGUgKHBhcmVudCAhPSBudWxsKSB7CiAgICAgICAgaWYgKHBhcmVudCBpcyBpci5NZW1iZXIpIHsKICAgICAgICAgIGV4ZWN1dGFibGVDb250ZXh0ID0gbWVtYmVyQ29udGV4dCA9IGdldE1lbWJlcihwYXJlbnQpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChwYXJlbnQgaXMgaXIuTG9jYWxGdW5jdGlvbikgewogICAgICAgICAgS0xvY2FsRnVuY3Rpb24gbG9jYWxGdW5jdGlvbiA9IGdldExvY2FsRnVuY3Rpb24ocGFyZW50KTsKICAgICAgICAgIGV4ZWN1dGFibGVDb250ZXh0ID0gbG9jYWxGdW5jdGlvbjsKICAgICAgICAgIG1lbWJlckNvbnRleHQgPSBsb2NhbEZ1bmN0aW9uLm1lbWJlckNvbnRleHQ7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDsKICAgICAgfQogICAgICBTdHJpbmcgbmFtZTsKICAgICAgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uOwogICAgICBpZiAobm9kZSBpcyBpci5GdW5jdGlvbkRlY2xhcmF0aW9uKSB7CiAgICAgICAgbmFtZSA9IG5vZGUudmFyaWFibGUubmFtZTsKICAgICAgICBmdW5jdGlvbiA9IG5vZGUuZnVuY3Rpb247CiAgICAgIH0gZWxzZSBpZiAobm9kZSBpcyBpci5GdW5jdGlvbkV4cHJlc3Npb24pIHsKICAgICAgICBmdW5jdGlvbiA9IG5vZGUuZnVuY3Rpb247CiAgICAgIH0KICAgICAgbG9jYWxGdW5jdGlvbiA9IGxvY2FsRnVuY3Rpb25NYXBbbm9kZV0gPQogICAgICAgICAgbmV3IEtMb2NhbEZ1bmN0aW9uKG5hbWUsIG1lbWJlckNvbnRleHQsIGV4ZWN1dGFibGVDb250ZXh0LCBub2RlKTsKICAgICAgaW50IGluZGV4ID0gMDsKICAgICAgTGlzdDxLTG9jYWxUeXBlVmFyaWFibGU+IHR5cGVWYXJpYWJsZXMgPSA8S0xvY2FsVHlwZVZhcmlhYmxlPltdOwogICAgICBmb3IgKGlyLlR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlciBpbiBmdW5jdGlvbi50eXBlUGFyYW1ldGVycykgewogICAgICAgIHR5cGVWYXJpYWJsZXMuYWRkKHR5cGVWYXJpYWJsZU1hcFt0eXBlUGFyYW1ldGVyXSA9CiAgICAgICAgICAgIG5ldyBLTG9jYWxUeXBlVmFyaWFibGUobG9jYWxGdW5jdGlvbiwgdHlwZVBhcmFtZXRlci5uYW1lLCBpbmRleCkpOwogICAgICAgIGluZGV4Kys7CiAgICAgIH0KICAgICAgaW5kZXggPSAwOwogICAgICBmb3IgKGlyLlR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlciBpbiBmdW5jdGlvbi50eXBlUGFyYW1ldGVycykgewogICAgICAgIHR5cGVWYXJpYWJsZXNbaW5kZXhdLmJvdW5kID0gZ2V0RGFydFR5cGUodHlwZVBhcmFtZXRlci5ib3VuZCk7CiAgICAgICAgdHlwZVZhcmlhYmxlc1tpbmRleF0uZGVmYXVsdFR5cGUgPQogICAgICAgICAgICBnZXREYXJ0VHlwZSh0eXBlUGFyYW1ldGVyLmRlZmF1bHRUeXBlKTsKICAgICAgICBpbmRleCsrOwogICAgICB9CiAgICAgIGxvY2FsRnVuY3Rpb24uZnVuY3Rpb25UeXBlID0gZ2V0RnVuY3Rpb25UeXBlKGZ1bmN0aW9uKTsKICAgIH0KICAgIHJldHVybiBsb2NhbEZ1bmN0aW9uOwogIH0KCiAgYm9vbCBfaW1wbGVtZW50c0Z1bmN0aW9uKEluZGV4ZWRDbGFzcyBjbHMpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEtDbGFzc0RhdGEgZGF0YSA9IGNsYXNzZXMuZ2V0RGF0YShjbHMpOwogICAgT3JkZXJlZFR5cGVTZXQgb3JkZXJlZFR5cGVTZXQgPSBkYXRhLm9yZGVyZWRUeXBlU2V0OwogICAgSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUgPSBvcmRlcmVkVHlwZVNldC5hc0luc3RhbmNlT2YoCiAgICAgICAgY29tbW9uRWxlbWVudHMuZnVuY3Rpb25DbGFzcywKICAgICAgICBnZXRIaWVyYXJjaHlEZXB0aChjb21tb25FbGVtZW50cy5mdW5jdGlvbkNsYXNzKSk7CiAgICBpZiAoc3VwZXJ0eXBlICE9IG51bGwpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZGF0YS5jYWxsVHlwZSBpcyBGdW5jdGlvblR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5UeXBlZGVmIGdldFR5cGVkZWZOb2RlKFR5cGVkZWZFbnRpdHkgdHlwZWRlZikgewogICAgcmV0dXJuIF9nZXRUeXBlZGVmTm9kZSh0eXBlZGVmKTsKICB9CgogIEBvdmVycmlkZQogIEZvcmVpZ25LaW5kIGdldEZvcmVpZ25LaW5kKGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSkgewogICAgaWYgKGNvbW1vbkVsZW1lbnRzLmlzRm9yZWlnbkhlbHBlcihnZXRNZW1iZXIobm9kZS50YXJnZXQpKSkgewogICAgICBzd2l0Y2ggKG5vZGUudGFyZ2V0Lm5hbWUubmFtZSkgewogICAgICAgIGNhc2UgSWRlbnRpZmllcnMuSlM6CiAgICAgICAgICByZXR1cm4gRm9yZWlnbktpbmQuSlM7CiAgICAgICAgY2FzZSBJZGVudGlmaWVycy5KU19CVUlMVElOOgogICAgICAgICAgcmV0dXJuIEZvcmVpZ25LaW5kLkpTX0JVSUxUSU47CiAgICAgICAgY2FzZSBJZGVudGlmaWVycy5KU19FTUJFRERFRF9HTE9CQUw6CiAgICAgICAgICByZXR1cm4gRm9yZWlnbktpbmQuSlNfRU1CRURERURfR0xPQkFMOwogICAgICAgIGNhc2UgSWRlbnRpZmllcnMuSlNfSU5URVJDRVBUT1JfQ09OU1RBTlQ6CiAgICAgICAgICByZXR1cm4gRm9yZWlnbktpbmQuSlNfSU5URVJDRVBUT1JfQ09OU1RBTlQ7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBGb3JlaWduS2luZC5OT05FOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRJbnRlcmZhY2VUeXBlRm9ySnNJbnRlcmNlcHRvckNhbGwoaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKSB7CiAgICBpZiAobm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggIT0gMSB8fAogICAgICAgIG5vZGUuYXJndW1lbnRzLm5hbWVkLmlzTm90RW1wdHkpIHsKICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICBNZXNzYWdlS2luZC5XUk9OR19BUkdVTUVOVF9GT1JfSlNfSU5URVJDRVBUT1JfQ09OU1RBTlQpOwogICAgfQogICAgaXIuTm9kZSBhcmd1bWVudCA9IG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwuZmlyc3Q7CiAgICBpZiAoYXJndW1lbnQgaXMgaXIuVHlwZUxpdGVyYWwgJiYgYXJndW1lbnQudHlwZSBpcyBpci5JbnRlcmZhY2VUeXBlKSB7CiAgICAgIHJldHVybiBnZXRJbnRlcmZhY2VUeXBlKGFyZ3VtZW50LnR5cGUpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDYWNoZSB0aGlzIGZvciBsYXRlciB1c2UuCiAgQG92ZXJyaWRlCiAgTmF0aXZlQmVoYXZpb3IgZ2V0TmF0aXZlQmVoYXZpb3JGb3JGaWVsZExvYWQoaXIuRmllbGQgZmllbGQsCiAgICAgIEl0ZXJhYmxlPFN0cmluZz4gY3JlYXRlc0Fubm90YXRpb25zLCBJdGVyYWJsZTxTdHJpbmc+IHJldHVybnNBbm5vdGF0aW9ucywKICAgICAge2Jvb2wgaXNKc0ludGVyb3B9KSB7CiAgICBEYXJ0VHlwZSB0eXBlID0gZ2V0RGFydFR5cGUoZmllbGQudHlwZSk7CiAgICByZXR1cm4gbmF0aXZlQmVoYXZpb3JCdWlsZGVyLmJ1aWxkRmllbGRMb2FkQmVoYXZpb3IodHlwZSwKICAgICAgICBjcmVhdGVzQW5ub3RhdGlvbnMsIHJldHVybnNBbm5vdGF0aW9ucywgdHlwZUxvb2t1cChyZXNvbHZlQXNSYXc6IGZhbHNlKSwKICAgICAgICBpc0pzSW50ZXJvcDogaXNKc0ludGVyb3ApOwogIH0KCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2FjaGUgdGhpcyBmb3IgbGF0ZXIgdXNlLgogIEBvdmVycmlkZQogIE5hdGl2ZUJlaGF2aW9yIGdldE5hdGl2ZUJlaGF2aW9yRm9yRmllbGRTdG9yZShpci5GaWVsZCBmaWVsZCkgewogICAgRGFydFR5cGUgdHlwZSA9IGdldERhcnRUeXBlKGZpZWxkLnR5cGUpOwogICAgcmV0dXJuIG5hdGl2ZUJlaGF2aW9yQnVpbGRlci5idWlsZEZpZWxkU3RvcmVCZWhhdmlvcih0eXBlKTsKICB9CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENhY2hlIHRoaXMgZm9yIGxhdGVyIHVzZS4KICBAb3ZlcnJpZGUKICBOYXRpdmVCZWhhdmlvciBnZXROYXRpdmVCZWhhdmlvckZvck1ldGhvZChpci5NZW1iZXIgbWVtYmVyLAogICAgICBJdGVyYWJsZTxTdHJpbmc+IGNyZWF0ZXNBbm5vdGF0aW9ucywgSXRlcmFibGU8U3RyaW5nPiByZXR1cm5zQW5ub3RhdGlvbnMsCiAgICAgIHtib29sIGlzSnNJbnRlcm9wfSkgewogICAgRGFydFR5cGUgdHlwZTsKICAgIGlmIChtZW1iZXIgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICAgIHR5cGUgPSBnZXRGdW5jdGlvblR5cGUobWVtYmVyLmZ1bmN0aW9uKTsKICAgIH0gZWxzZSBpZiAobWVtYmVyIGlzIGlyLkNvbnN0cnVjdG9yKSB7CiAgICAgIHR5cGUgPSBnZXRGdW5jdGlvblR5cGUobWVtYmVyLmZ1bmN0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIGZhaWxlZEF0KENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsICJVbmV4cGVjdGVkIG1ldGhvZCBub2RlICRtZW1iZXIuIik7CiAgICB9CiAgICByZXR1cm4gbmF0aXZlQmVoYXZpb3JCdWlsZGVyLmJ1aWxkTWV0aG9kQmVoYXZpb3IodHlwZSwgY3JlYXRlc0Fubm90YXRpb25zLAogICAgICAgIHJldHVybnNBbm5vdGF0aW9ucywgdHlwZUxvb2t1cChyZXNvbHZlQXNSYXc6IGZhbHNlKSwKICAgICAgICBpc0pzSW50ZXJvcDogaXNKc0ludGVyb3ApOwogIH0KCiAgSW5kZXhlZExpYnJhcnkgY3JlYXRlTGlicmFyeShTdHJpbmcgbmFtZSwgVXJpIGNhbm9uaWNhbFVyaSkgewogICAgcmV0dXJuIG5ldyBLTGlicmFyeShuYW1lLCBjYW5vbmljYWxVcmkpOwogIH0KCiAgSW5kZXhlZENsYXNzIGNyZWF0ZUNsYXNzKExpYnJhcnlFbnRpdHkgbGlicmFyeSwgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIGlzQWJzdHJhY3R9KSB7CiAgICByZXR1cm4gbmV3IEtDbGFzcyhsaWJyYXJ5LCBuYW1lLCBpc0Fic3RyYWN0OiBpc0Fic3RyYWN0KTsKICB9CgogIEluZGV4ZWRUeXBlZGVmIGNyZWF0ZVR5cGVkZWYoTGlicmFyeUVudGl0eSBsaWJyYXJ5LCBTdHJpbmcgbmFtZSkgewogICAgcmV0dXJuIG5ldyBLVHlwZWRlZihsaWJyYXJ5LCBuYW1lKTsKICB9CgogIFR5cGVWYXJpYWJsZUVudGl0eSBjcmVhdGVUeXBlVmFyaWFibGUoCiAgICAgIEVudGl0eSB0eXBlRGVjbGFyYXRpb24sIFN0cmluZyBuYW1lLCBpbnQgaW5kZXgpIHsKICAgIHJldHVybiBuZXcgS1R5cGVWYXJpYWJsZSh0eXBlRGVjbGFyYXRpb24sIG5hbWUsIGluZGV4KTsKICB9CgogIEluZGV4ZWRDb25zdHJ1Y3RvciBjcmVhdGVHZW5lcmF0aXZlQ29uc3RydWN0b3IoQ2xhc3NFbnRpdHkgZW5jbG9zaW5nQ2xhc3MsCiAgICAgIE5hbWUgbmFtZSwgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAge2Jvb2wgaXNFeHRlcm5hbCwgYm9vbCBpc0NvbnN0fSkgewogICAgcmV0dXJuIG5ldyBLR2VuZXJhdGl2ZUNvbnN0cnVjdG9yKGVuY2xvc2luZ0NsYXNzLCBuYW1lLCBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgICAgaXNFeHRlcm5hbDogaXNFeHRlcm5hbCwgaXNDb25zdDogaXNDb25zdCk7CiAgfQoKICBJbmRleGVkQ29uc3RydWN0b3IgY3JlYXRlRmFjdG9yeUNvbnN0cnVjdG9yKENsYXNzRW50aXR5IGVuY2xvc2luZ0NsYXNzLAogICAgICBOYW1lIG5hbWUsIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgIHtib29sIGlzRXh0ZXJuYWwsIGJvb2wgaXNDb25zdCwgYm9vbCBpc0Zyb21FbnZpcm9ubWVudENvbnN0cnVjdG9yfSkgewogICAgcmV0dXJuIG5ldyBLRmFjdG9yeUNvbnN0cnVjdG9yKGVuY2xvc2luZ0NsYXNzLCBuYW1lLCBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgICAgaXNFeHRlcm5hbDogaXNFeHRlcm5hbCwKICAgICAgICBpc0NvbnN0OiBpc0NvbnN0LAogICAgICAgIGlzRnJvbUVudmlyb25tZW50Q29uc3RydWN0b3I6IGlzRnJvbUVudmlyb25tZW50Q29uc3RydWN0b3IpOwogIH0KCiAgSW5kZXhlZEZ1bmN0aW9uIGNyZWF0ZUdldHRlcihMaWJyYXJ5RW50aXR5IGxpYnJhcnksCiAgICAgIENsYXNzRW50aXR5IGVuY2xvc2luZ0NsYXNzLCBOYW1lIG5hbWUsIEFzeW5jTWFya2VyIGFzeW5jTWFya2VyLAogICAgICB7Ym9vbCBpc1N0YXRpYywgYm9vbCBpc0V4dGVybmFsLCBib29sIGlzQWJzdHJhY3R9KSB7CiAgICByZXR1cm4gbmV3IEtHZXR0ZXIobGlicmFyeSwgZW5jbG9zaW5nQ2xhc3MsIG5hbWUsIGFzeW5jTWFya2VyLAogICAgICAgIGlzU3RhdGljOiBpc1N0YXRpYywgaXNFeHRlcm5hbDogaXNFeHRlcm5hbCwgaXNBYnN0cmFjdDogaXNBYnN0cmFjdCk7CiAgfQoKICBJbmRleGVkRnVuY3Rpb24gY3JlYXRlTWV0aG9kKAogICAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnksCiAgICAgIENsYXNzRW50aXR5IGVuY2xvc2luZ0NsYXNzLAogICAgICBOYW1lIG5hbWUsCiAgICAgIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgIEFzeW5jTWFya2VyIGFzeW5jTWFya2VyLAogICAgICB7Ym9vbCBpc1N0YXRpYywKICAgICAgYm9vbCBpc0V4dGVybmFsLAogICAgICBib29sIGlzQWJzdHJhY3R9KSB7CiAgICByZXR1cm4gbmV3IEtNZXRob2QoCiAgICAgICAgbGlicmFyeSwgZW5jbG9zaW5nQ2xhc3MsIG5hbWUsIHBhcmFtZXRlclN0cnVjdHVyZSwgYXN5bmNNYXJrZXIsCiAgICAgICAgaXNTdGF0aWM6IGlzU3RhdGljLCBpc0V4dGVybmFsOiBpc0V4dGVybmFsLCBpc0Fic3RyYWN0OiBpc0Fic3RyYWN0KTsKICB9CgogIEluZGV4ZWRGdW5jdGlvbiBjcmVhdGVTZXR0ZXIoCiAgICAgIExpYnJhcnlFbnRpdHkgbGlicmFyeSwgQ2xhc3NFbnRpdHkgZW5jbG9zaW5nQ2xhc3MsIE5hbWUgbmFtZSwKICAgICAge2Jvb2wgaXNTdGF0aWMsIGJvb2wgaXNFeHRlcm5hbCwgYm9vbCBpc0Fic3RyYWN0fSkgewogICAgcmV0dXJuIG5ldyBLU2V0dGVyKGxpYnJhcnksIGVuY2xvc2luZ0NsYXNzLCBuYW1lLAogICAgICAgIGlzU3RhdGljOiBpc1N0YXRpYywgaXNFeHRlcm5hbDogaXNFeHRlcm5hbCwgaXNBYnN0cmFjdDogaXNBYnN0cmFjdCk7CiAgfQoKICBJbmRleGVkRmllbGQgY3JlYXRlRmllbGQoCiAgICAgIExpYnJhcnlFbnRpdHkgbGlicmFyeSwgQ2xhc3NFbnRpdHkgZW5jbG9zaW5nQ2xhc3MsIE5hbWUgbmFtZSwKICAgICAge2Jvb2wgaXNTdGF0aWMsIGJvb2wgaXNBc3NpZ25hYmxlLCBib29sIGlzQ29uc3R9KSB7CiAgICByZXR1cm4gbmV3IEtGaWVsZChsaWJyYXJ5LCBlbmNsb3NpbmdDbGFzcywgbmFtZSwKICAgICAgICBpc1N0YXRpYzogaXNTdGF0aWMsIGlzQXNzaWduYWJsZTogaXNBc3NpZ25hYmxlLCBpc0NvbnN0OiBpc0NvbnN0KTsKICB9Cn0KCmNsYXNzIEtlcm5lbEVsZW1lbnRFbnZpcm9ubWVudCBleHRlbmRzIEVsZW1lbnRFbnZpcm9ubWVudAogICAgaW1wbGVtZW50cyBLRWxlbWVudEVudmlyb25tZW50IHsKICBmaW5hbCBLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIGVsZW1lbnRNYXA7CgogIEtlcm5lbEVsZW1lbnRFbnZpcm9ubWVudCh0aGlzLmVsZW1lbnRNYXApOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXQgZHluYW1pY1R5cGUgPT4gY29uc3QgRHluYW1pY1R5cGUoKTsKCiAgQG92ZXJyaWRlCiAgTGlicmFyeUVudGl0eSBnZXQgbWFpbkxpYnJhcnkgPT4gZWxlbWVudE1hcC5fbWFpbkxpYnJhcnk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBtYWluRnVuY3Rpb24gPT4gZWxlbWVudE1hcC5fbWFpbkZ1bmN0aW9uOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxMaWJyYXJ5RW50aXR5PiBnZXQgbGlicmFyaWVzID0+IGVsZW1lbnRNYXAubGlicmFyeUxpc3RJbnRlcm5hbDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldExpYnJhcnlOYW1lKExpYnJhcnlFbnRpdHkgbGlicmFyeSkgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuX2dldExpYnJhcnlOYW1lKGxpYnJhcnkpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRUaGlzVHlwZShDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLmdldFRoaXNUeXBlKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldFJhd1R5cGUoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5fZ2V0UmF3VHlwZShjbHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0dlbmVyaWNDbGFzcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBnZXRUaGlzVHlwZShjbHMpLnR5cGVBcmd1bWVudHMuaXNOb3RFbXB0eTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNNaXhpbkFwcGxpY2F0aW9uKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuX2lzTWl4aW5BcHBsaWNhdGlvbihjbHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1VubmFtZWRNaXhpbkFwcGxpY2F0aW9uKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuX2lzVW5uYW1lZE1peGluQXBwbGljYXRpb24oY2xzKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldFR5cGVWYXJpYWJsZUJvdW5kKFR5cGVWYXJpYWJsZUVudGl0eSB0eXBlVmFyaWFibGUpIHsKICAgIGlmICh0eXBlVmFyaWFibGUgaXMgS0xvY2FsVHlwZVZhcmlhYmxlKSByZXR1cm4gdHlwZVZhcmlhYmxlLmJvdW5kOwogICAgcmV0dXJuIGVsZW1lbnRNYXAuZ2V0VHlwZVZhcmlhYmxlQm91bmQodHlwZVZhcmlhYmxlKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgY3JlYXRlSW50ZXJmYWNlVHlwZSgKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUoY2xzLCB0eXBlQXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uVHlwZSBnZXRGdW5jdGlvblR5cGUoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pIHsKICAgIHJldHVybiBlbGVtZW50TWFwLl9nZXRGdW5jdGlvblR5cGUoZnVuY3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxUeXBlVmFyaWFibGVUeXBlPiBnZXRGdW5jdGlvblR5cGVWYXJpYWJsZXMoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pIHsKICAgIHJldHVybiBlbGVtZW50TWFwLl9nZXRGdW5jdGlvblR5cGVWYXJpYWJsZXMoZnVuY3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0RmllbGRUeXBlKEZpZWxkRW50aXR5IGZpZWxkKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5fZ2V0RmllbGRUeXBlKGZpZWxkKTsKICB9CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uVHlwZSBnZXRMb2NhbEZ1bmN0aW9uVHlwZShjb3ZhcmlhbnQgS0xvY2FsRnVuY3Rpb24gZnVuY3Rpb24pIHsKICAgIHJldHVybiBmdW5jdGlvbi5mdW5jdGlvblR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gZ2V0RmllbGRDb25zdGFudEZvclRlc3RpbmcoRmllbGRFbnRpdHkgZmllbGQpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLl9nZXRGaWVsZENvbnN0YW50RXhwcmVzc2lvbihmaWVsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRVbmFsaWFzZWRUeXBlKERhcnRUeXBlIHR5cGUpID0+IHR5cGU7CgogIEBvdmVycmlkZQogIENvbnN0cnVjdG9yRW50aXR5IGxvb2t1cENvbnN0cnVjdG9yKENsYXNzRW50aXR5IGNscywgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIHJlcXVpcmVkOiBmYWxzZX0pIHsKICAgIENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yID0gZWxlbWVudE1hcC5sb29rdXBDb25zdHJ1Y3RvcihjbHMsIG5hbWUpOwogICAgaWYgKGNvbnN0cnVjdG9yID09IG51bGwgJiYgcmVxdWlyZWQpIHsKICAgICAgdGhyb3cgZmFpbGVkQXQoCiAgICAgICAgICBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICAgIlRoZSBjb25zdHJ1Y3RvciAnJG5hbWUnIHdhcyBub3QgZm91bmQgaW4gY2xhc3MgJyR7Y2xzLm5hbWV9JyAiCiAgICAgICAgICAiaW4gbGlicmFyeSAke2Nscy5saWJyYXJ5LmNhbm9uaWNhbFVyaX0uIik7CiAgICB9CiAgICByZXR1cm4gY29uc3RydWN0b3I7CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXJFbnRpdHkgbG9va3VwTG9jYWxDbGFzc01lbWJlcihDbGFzc0VudGl0eSBjbHMsIFN0cmluZyBuYW1lLAogICAgICB7Ym9vbCBzZXR0ZXI6IGZhbHNlLCBib29sIHJlcXVpcmVkOiBmYWxzZX0pIHsKICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPQogICAgICAgIGVsZW1lbnRNYXAubG9va3VwQ2xhc3NNZW1iZXIoY2xzLCBuYW1lLCBzZXR0ZXI6IHNldHRlcik7CiAgICBpZiAobWVtYmVyID09IG51bGwgJiYgcmVxdWlyZWQpIHsKICAgICAgdGhyb3cgZmFpbGVkQXQoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICJUaGUgbWVtYmVyICckbmFtZScgd2FzIG5vdCBmb3VuZCBpbiAke2Nscy5uYW1lfS4iKTsKICAgIH0KICAgIHJldHVybiBtZW1iZXI7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXRTdXBlckNsYXNzKENsYXNzRW50aXR5IGNscywKICAgICAge2Jvb2wgc2tpcFVubmFtZWRNaXhpbkFwcGxpY2F0aW9uczogZmFsc2V9KSB7CiAgICBhc3NlcnQoZWxlbWVudE1hcC5jaGVja0ZhbWlseShjbHMpKTsKICAgIENsYXNzRW50aXR5IHN1cGVyY2xhc3MgPSBlbGVtZW50TWFwLmdldFN1cGVyVHlwZShjbHMpPy5lbGVtZW50OwogICAgaWYgKHNraXBVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbnMpIHsKICAgICAgd2hpbGUgKHN1cGVyY2xhc3MgIT0gbnVsbCAmJgogICAgICAgICAgZWxlbWVudE1hcC5faXNVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbihzdXBlcmNsYXNzKSkgewogICAgICAgIHN1cGVyY2xhc3MgPSBlbGVtZW50TWFwLmdldFN1cGVyVHlwZShzdXBlcmNsYXNzKT8uZWxlbWVudDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHN1cGVyY2xhc3M7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hTdXBlcnR5cGUoQ2xhc3NFbnRpdHkgY2xzLCB2b2lkIGYoSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUpKSB7CiAgICBlbGVtZW50TWFwLl9mb3JFYWNoU3VwZXJ0eXBlKGNscywgZik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hNaXhpbihDbGFzc0VudGl0eSBjbHMsIHZvaWQgZihDbGFzc0VudGl0eSBtaXhpbikpIHsKICAgIGVsZW1lbnRNYXAuX2ZvckVhY2hNaXhpbihjbHMsIGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoTG9jYWxDbGFzc01lbWJlcihDbGFzc0VudGl0eSBjbHMsIHZvaWQgZihNZW1iZXJFbnRpdHkgbWVtYmVyKSkgewogICAgZWxlbWVudE1hcC5fZm9yRWFjaExvY2FsQ2xhc3NNZW1iZXIoY2xzLCBmKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaENsYXNzTWVtYmVyKAogICAgICBDbGFzc0VudGl0eSBjbHMsIHZvaWQgZihDbGFzc0VudGl0eSBkZWNsYXJlciwgTWVtYmVyRW50aXR5IG1lbWJlcikpIHsKICAgIGVsZW1lbnRNYXAuX2ZvckVhY2hDbGFzc01lbWJlcihjbHMsIGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoQ29uc3RydWN0b3IoCiAgICAgIENsYXNzRW50aXR5IGNscywgdm9pZCBmKENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yKSkgewogICAgZWxlbWVudE1hcC5fZm9yRWFjaENvbnN0cnVjdG9yKGNscywgZik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hMaWJyYXJ5TWVtYmVyKAogICAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnksIHZvaWQgZihNZW1iZXJFbnRpdHkgbWVtYmVyKSkgewogICAgZWxlbWVudE1hcC5fZm9yRWFjaExpYnJhcnlNZW1iZXIobGlicmFyeSwgZik7CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXJFbnRpdHkgbG9va3VwTGlicmFyeU1lbWJlcihMaWJyYXJ5RW50aXR5IGxpYnJhcnksIFN0cmluZyBuYW1lLAogICAgICB7Ym9vbCBzZXR0ZXI6IGZhbHNlLCBib29sIHJlcXVpcmVkOiBmYWxzZX0pIHsKICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPQogICAgICAgIGVsZW1lbnRNYXAubG9va3VwTGlicmFyeU1lbWJlcihsaWJyYXJ5LCBuYW1lLCBzZXR0ZXI6IHNldHRlcik7CiAgICBpZiAobWVtYmVyID09IG51bGwgJiYgcmVxdWlyZWQpIHsKICAgICAgZmFpbGVkQXQoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICJUaGUgbWVtYmVyICcke25hbWV9JyB3YXMgbm90IGZvdW5kIGluIGxpYnJhcnkgJyR7bGlicmFyeS5uYW1lfScuIik7CiAgICB9CiAgICByZXR1cm4gbWVtYmVyOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgbG9va3VwQ2xhc3MoTGlicmFyeUVudGl0eSBsaWJyYXJ5LCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgcmVxdWlyZWQ6IGZhbHNlfSkgewogICAgQ2xhc3NFbnRpdHkgY2xzID0gZWxlbWVudE1hcC5sb29rdXBDbGFzcyhsaWJyYXJ5LCBuYW1lKTsKICAgIGlmIChjbHMgPT0gbnVsbCAmJiByZXF1aXJlZCkgewogICAgICBmYWlsZWRBdChDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICAgIlRoZSBjbGFzcyAnJG5hbWUnICB3YXMgbm90IGZvdW5kIGluIGxpYnJhcnkgJyR7bGlicmFyeS5uYW1lfScuIik7CiAgICB9CiAgICByZXR1cm4gY2xzOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoQ2xhc3MoTGlicmFyeUVudGl0eSBsaWJyYXJ5LCB2b2lkIGYoQ2xhc3NFbnRpdHkgY2xzKSkgewogICAgZWxlbWVudE1hcC5fZm9yRWFjaENsYXNzKGxpYnJhcnksIGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlicmFyeUVudGl0eSBsb29rdXBMaWJyYXJ5KFVyaSB1cmksIHtib29sIHJlcXVpcmVkOiBmYWxzZX0pIHsKICAgIExpYnJhcnlFbnRpdHkgbGlicmFyeSA9IGVsZW1lbnRNYXAubG9va3VwTGlicmFyeSh1cmkpOwogICAgaWYgKGxpYnJhcnkgPT0gbnVsbCAmJiByZXF1aXJlZCkgewogICAgICBmYWlsZWRBdChDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLCAiVGhlIGxpYnJhcnkgJyR1cmknIHdhcyBub3QgZm91bmQuIik7CiAgICB9CiAgICByZXR1cm4gbGlicmFyeTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNEZWZlcnJlZExvYWRMaWJyYXJ5R2V0dGVyKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIC8vIFRoZSBmcm9udC1lbmQgZ2VuZXJhdGVzIHRoZSBnZXR0ZXIgb2YgbG9hZExpYnJhcnkgZXhwbGljaXRseSBhcyBjb2RlCiAgICAvLyBzbyB0aGVyZSBpcyBubyBpbXBsaWNpdCByZXByZXNlbnRhdGlvbiBiYXNlZCBvbiBhICJsb2FkTGlicmFyeSIgbWVtYmVyLgogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gZ2V0TGlicmFyeU1ldGFkYXRhKGNvdmFyaWFudCBJbmRleGVkTGlicmFyeSBsaWJyYXJ5KSB7CiAgICBhc3NlcnQoZWxlbWVudE1hcC5jaGVja0ZhbWlseShsaWJyYXJ5KSk7CiAgICBLTGlicmFyeURhdGEgbGlicmFyeURhdGEgPSBlbGVtZW50TWFwLmxpYnJhcmllcy5nZXREYXRhKGxpYnJhcnkpOwogICAgcmV0dXJuIGxpYnJhcnlEYXRhLmdldE1ldGFkYXRhKGVsZW1lbnRNYXApOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8SW1wb3J0RW50aXR5PiBnZXRJbXBvcnRzKGNvdmFyaWFudCBJbmRleGVkTGlicmFyeSBsaWJyYXJ5KSB7CiAgICBhc3NlcnQoZWxlbWVudE1hcC5jaGVja0ZhbWlseShsaWJyYXJ5KSk7CiAgICBLTGlicmFyeURhdGEgbGlicmFyeURhdGEgPSBlbGVtZW50TWFwLmxpYnJhcmllcy5nZXREYXRhKGxpYnJhcnkpOwogICAgcmV0dXJuIGxpYnJhcnlEYXRhLmdldEltcG9ydHMoZWxlbWVudE1hcCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBnZXRDbGFzc01ldGFkYXRhKGNvdmFyaWFudCBJbmRleGVkQ2xhc3MgY2xzKSB7CiAgICBhc3NlcnQoZWxlbWVudE1hcC5jaGVja0ZhbWlseShjbHMpKTsKICAgIEtDbGFzc0RhdGEgY2xhc3NEYXRhID0gZWxlbWVudE1hcC5jbGFzc2VzLmdldERhdGEoY2xzKTsKICAgIHJldHVybiBjbGFzc0RhdGEuZ2V0TWV0YWRhdGEoZWxlbWVudE1hcCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBnZXRNZW1iZXJNZXRhZGF0YShjb3ZhcmlhbnQgSW5kZXhlZE1lbWJlciBtZW1iZXIsCiAgICAgIHtib29sIGluY2x1ZGVQYXJhbWV0ZXJNZXRhZGF0YTogZmFsc2V9KSB7CiAgICAvLyBUT0RPKHJlZGVtcHRpb24pOiBTdXBwb3J0IGluY2x1ZGVQYXJhbWV0ZXJNZXRhZGF0YS4KICAgIGFzc2VydChlbGVtZW50TWFwLmNoZWNrRmFtaWx5KG1lbWJlcikpOwogICAgS01lbWJlckRhdGEgbWVtYmVyRGF0YSA9IGVsZW1lbnRNYXAubWVtYmVycy5nZXREYXRhKG1lbWJlcik7CiAgICByZXR1cm4gbWVtYmVyRGF0YS5nZXRNZXRhZGF0YShlbGVtZW50TWFwKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNFbnVtQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBhc3NlcnQoZWxlbWVudE1hcC5jaGVja0ZhbWlseShjbHMpKTsKICAgIEtDbGFzc0RhdGEgY2xhc3NEYXRhID0gZWxlbWVudE1hcC5jbGFzc2VzLmdldERhdGEoY2xzKTsKICAgIHJldHVybiBjbGFzc0RhdGEuaXNFbnVtQ2xhc3M7CiAgfQp9CgovLy8gW0JlaGF2aW9yQnVpbGRlcl0gZm9yIGtlcm5lbCBiYXNlZCBlbGVtZW50cy4KY2xhc3MgS2VybmVsQmVoYXZpb3JCdWlsZGVyIGV4dGVuZHMgQmVoYXZpb3JCdWlsZGVyIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50OwogIEBvdmVycmlkZQogIGZpbmFsIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzOwogIEBvdmVycmlkZQogIGZpbmFsIERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlcjsKICBAb3ZlcnJpZGUKICBmaW5hbCBOYXRpdmVCYXNpY0RhdGEgbmF0aXZlQmFzaWNEYXRhOwogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBfb3B0aW9uczsKCiAgS2VybmVsQmVoYXZpb3JCdWlsZGVyKHRoaXMuZWxlbWVudEVudmlyb25tZW50LCB0aGlzLmNvbW1vbkVsZW1lbnRzLAogICAgICB0aGlzLm5hdGl2ZUJhc2ljRGF0YSwgdGhpcy5yZXBvcnRlciwgdGhpcy5fb3B0aW9ucyk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IHRydXN0SlNJbnRlcm9wVHlwZUFubm90YXRpb25zID0+CiAgICAgIF9vcHRpb25zLnRydXN0SlNJbnRlcm9wVHlwZUFubm90YXRpb25zOwp9CgovLy8gQ29uc3RhbnQgZW52aXJvbm1lbnQgbWFwcGluZyBbQ29uc3RhbnRFeHByZXNzaW9uXXMgdG8gW0NvbnN0YW50VmFsdWVdcyB1c2luZwovLy8gW19FdmFsdWF0aW9uRW52aXJvbm1lbnRdIGZvciB0aGUgZXZhbHVhdGlvbi4KY2xhc3MgS2VybmVsQ29uc3RhbnRFbnZpcm9ubWVudCBpbXBsZW1lbnRzIENvbnN0YW50RW52aXJvbm1lbnQgewogIGZpbmFsIEtlcm5lbFRvRWxlbWVudE1hcEltcGwgX2VsZW1lbnRNYXA7CiAgZmluYWwgRW52aXJvbm1lbnQgX2Vudmlyb25tZW50OwoKICBNYXA8Q29uc3RhbnRFeHByZXNzaW9uLCBDb25zdGFudFZhbHVlPiBfdmFsdWVNYXAgPQogICAgICA8Q29uc3RhbnRFeHByZXNzaW9uLCBDb25zdGFudFZhbHVlPnt9OwoKICBLZXJuZWxDb25zdGFudEVudmlyb25tZW50KHRoaXMuX2VsZW1lbnRNYXAsIHRoaXMuX2Vudmlyb25tZW50KTsKCiAgQ29uc3RhbnRWYWx1ZSBfZ2V0Q29uc3RhbnRWYWx1ZSgKICAgICAgU3Bhbm5hYmxlIHNwYW5uYWJsZSwgQ29uc3RhbnRFeHByZXNzaW9uIGV4cHJlc3Npb24sCiAgICAgIHtib29sIGNvbnN0YW50UmVxdWlyZWQsIGJvb2wgY2hlY2tDYXN0czogdHJ1ZX0pIHsKICAgIHJldHVybiBfdmFsdWVNYXAucHV0SWZBYnNlbnQoZXhwcmVzc2lvbiwgKCkgewogICAgICByZXR1cm4gZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgS2VybmVsRXZhbHVhdGlvbkVudmlyb25tZW50KAogICAgICAgICAgX2VsZW1lbnRNYXAsIF9lbnZpcm9ubWVudCwgc3Bhbm5hYmxlLAogICAgICAgICAgY29uc3RhbnRSZXF1aXJlZDogY29uc3RhbnRSZXF1aXJlZCwgY2hlY2tDYXN0czogY2hlY2tDYXN0cykpOwogICAgfSk7CiAgfQp9CgovLy8gRXZhbHVhdGlvbiBlbnZpcm9ubWVudCB1c2VkIGZvciBjb21wdXRpbmcgW0NvbnN0YW50VmFsdWVdcyBmb3IKLy8vIGtlcm5lbCBiYXNlZCBbQ29uc3RhbnRFeHByZXNzaW9uXXMuCmNsYXNzIEtlcm5lbEV2YWx1YXRpb25FbnZpcm9ubWVudCBleHRlbmRzIEV2YWx1YXRpb25FbnZpcm9ubWVudEJhc2UgewogIGZpbmFsIEtlcm5lbFRvRWxlbWVudE1hcEltcGwgX2VsZW1lbnRNYXA7CiAgZmluYWwgRW52aXJvbm1lbnQgX2Vudmlyb25tZW50OwogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgY2hlY2tDYXN0czsKCiAgS2VybmVsRXZhbHVhdGlvbkVudmlyb25tZW50KAogICAgICB0aGlzLl9lbGVtZW50TWFwLCB0aGlzLl9lbnZpcm9ubWVudCwgU3Bhbm5hYmxlIHNwYW5uYWJsZSwKICAgICAge2Jvb2wgY29uc3RhbnRSZXF1aXJlZCwgdGhpcy5jaGVja0Nhc3RzOiB0cnVlfSkKICAgICAgOiBzdXBlcihzcGFubmFibGUsIGNvbnN0YW50UmVxdWlyZWQ6IGNvbnN0YW50UmVxdWlyZWQpOwoKICBAb3ZlcnJpZGUKICBDb21tb25FbGVtZW50cyBnZXQgY29tbW9uRWxlbWVudHMgPT4gX2VsZW1lbnRNYXAuY29tbW9uRWxlbWVudHM7CgogIEBvdmVycmlkZQogIERhcnRUeXBlcyBnZXQgdHlwZXMgPT4gX2VsZW1lbnRNYXAudHlwZXM7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHN1YnN0QnlDb250ZXh0KERhcnRUeXBlIGJhc2UsIEludGVyZmFjZVR5cGUgdGFyZ2V0KSB7CiAgICByZXR1cm4gX2VsZW1lbnRNYXAuc3Vic3RCeUNvbnRleHQoYmFzZSwgdGFyZ2V0KTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50Q29uc3RydWN0b3IgZ2V0Q29uc3RydWN0b3JDb25zdGFudChDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvcikgewogICAgcmV0dXJuIF9lbGVtZW50TWFwLl9nZXRDb25zdHJ1Y3RvckNvbnN0YW50KGNvbnN0cnVjdG9yKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiBnZXRGaWVsZENvbnN0YW50KEZpZWxkRW50aXR5IGZpZWxkKSB7CiAgICByZXR1cm4gX2VsZW1lbnRNYXAuX2dldEZpZWxkQ29uc3RhbnRFeHByZXNzaW9uKGZpZWxkKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiBnZXRMb2NhbENvbnN0YW50KExvY2FsIGxvY2FsKSB7CiAgICB0aHJvdyBuZXcgVW5pbXBsZW1lbnRlZEVycm9yKCJfRXZhbHVhdGlvbkVudmlyb25tZW50LmdldExvY2FsQ29uc3RhbnQiKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyByZWFkRnJvbUVudmlyb25tZW50KFN0cmluZyBuYW1lKSB7CiAgICByZXR1cm4gX2Vudmlyb25tZW50LnZhbHVlT2YobmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEaWFnbm9zdGljUmVwb3J0ZXIgZ2V0IHJlcG9ydGVyID0+IF9lbGVtZW50TWFwLnJlcG9ydGVyOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBlbmFibGVBc3NlcnRpb25zID0+IF9lbGVtZW50TWFwLm9wdGlvbnMuZW5hYmxlVXNlckFzc2VydGlvbnM7Cn0KCmNsYXNzIEtlcm5lbE5hdGl2ZU1lbWJlclJlc29sdmVyIGltcGxlbWVudHMgTmF0aXZlTWVtYmVyUmVzb2x2ZXIgewogIHN0YXRpYyBmaW5hbCBSZWdFeHAgX2lkZW50aWZpZXIgPSBuZXcgUmVnRXhwKHInXlthLXpBLVpfJF1bYS16QS1aMC05XyRdKiQnKTsKCiAgZmluYWwgS2VybmVsVG9FbGVtZW50TWFwSW1wbCBfZWxlbWVudE1hcDsKICBmaW5hbCBOYXRpdmVCYXNpY0RhdGEgX25hdGl2ZUJhc2ljRGF0YTsKICBmaW5hbCBOYXRpdmVEYXRhQnVpbGRlciBfbmF0aXZlRGF0YUJ1aWxkZXI7CgogIEtlcm5lbE5hdGl2ZU1lbWJlclJlc29sdmVyKAogICAgICB0aGlzLl9lbGVtZW50TWFwLCB0aGlzLl9uYXRpdmVCYXNpY0RhdGEsIHRoaXMuX25hdGl2ZURhdGFCdWlsZGVyKTsKCiAgS0VsZW1lbnRFbnZpcm9ubWVudCBnZXQgX2VsZW1lbnRFbnZpcm9ubWVudCA9PiBfZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQ7CgogIENvbW1vbkVsZW1lbnRzIGdldCBfY29tbW9uRWxlbWVudHMgPT4gX2VsZW1lbnRNYXAuY29tbW9uRWxlbWVudHM7CgogIEBvdmVycmlkZQogIHZvaWQgcmVzb2x2ZU5hdGl2ZU1lbWJlcihpci5NZW1iZXIgbm9kZSwgSXJBbm5vdGF0aW9uRGF0YSBhbm5vdGF0aW9uRGF0YSkgewogICAgYm9vbCBpc0pzSW50ZXJvcCA9IF9pc0pzSW50ZXJvcE1lbWJlcihub2RlKTsKICAgIGlmIChub2RlIGlzIGlyLlByb2NlZHVyZSB8fCBub2RlIGlzIGlyLkNvbnN0cnVjdG9yKSB7CiAgICAgIEZ1bmN0aW9uRW50aXR5IG1ldGhvZCA9IF9lbGVtZW50TWFwLmdldE1lbWJlcihub2RlKTsKICAgICAgYm9vbCBpc05hdGl2ZSA9IF9wcm9jZXNzTWV0aG9kQW5ub3RhdGlvbnMobm9kZSwgYW5ub3RhdGlvbkRhdGEpOwogICAgICBpZiAoaXNOYXRpdmUgfHwgaXNKc0ludGVyb3ApIHsKICAgICAgICBOYXRpdmVCZWhhdmlvciBiZWhhdmlvciA9IF9jb21wdXRlTmF0aXZlTWV0aG9kQmVoYXZpb3IoCiAgICAgICAgICAgIG1ldGhvZCwgYW5ub3RhdGlvbkRhdGEsCiAgICAgICAgICAgIGlzSnNJbnRlcm9wOiBpc0pzSW50ZXJvcCk7CiAgICAgICAgX25hdGl2ZURhdGFCdWlsZGVyLnNldE5hdGl2ZU1ldGhvZEJlaGF2aW9yKG1ldGhvZCwgYmVoYXZpb3IpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKG5vZGUgaXMgaXIuRmllbGQpIHsKICAgICAgRmllbGRFbnRpdHkgZmllbGQgPSBfZWxlbWVudE1hcC5nZXRNZW1iZXIobm9kZSk7CiAgICAgIGJvb2wgaXNOYXRpdmUgPSBfcHJvY2Vzc0ZpZWxkQW5ub3RhdGlvbnMobm9kZSwgYW5ub3RhdGlvbkRhdGEpOwogICAgICBpZiAoaXNOYXRpdmUgfHwgaXNKc0ludGVyb3ApIHsKICAgICAgICBOYXRpdmVCZWhhdmlvciBmaWVsZExvYWRCZWhhdmlvciA9IF9jb21wdXRlTmF0aXZlRmllbGRMb2FkQmVoYXZpb3IoCiAgICAgICAgICAgIGZpZWxkLCBhbm5vdGF0aW9uRGF0YSwKICAgICAgICAgICAgaXNKc0ludGVyb3A6IGlzSnNJbnRlcm9wKTsKICAgICAgICBOYXRpdmVCZWhhdmlvciBmaWVsZFN0b3JlQmVoYXZpb3IgPQogICAgICAgICAgICBfY29tcHV0ZU5hdGl2ZUZpZWxkU3RvcmVCZWhhdmlvcihmaWVsZCk7CiAgICAgICAgX25hdGl2ZURhdGFCdWlsZGVyLnNldE5hdGl2ZUZpZWxkTG9hZEJlaGF2aW9yKGZpZWxkLCBmaWVsZExvYWRCZWhhdmlvcik7CiAgICAgICAgX25hdGl2ZURhdGFCdWlsZGVyLnNldE5hdGl2ZUZpZWxkU3RvcmVCZWhhdmlvcigKICAgICAgICAgICAgZmllbGQsIGZpZWxkU3RvcmVCZWhhdmlvcik7CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBQcm9jZXNzIHRoZSBwb3RlbnRpYWxseSBuYXRpdmUgW2ZpZWxkXS4gQWRkcyBpbmZvcm1hdGlvbiBmcm9tIG1ldGFkYXRhCiAgLy8vIGF0dHJpYnV0ZXMuIFJldHVybnMgYHRydWVgIG9mIFttZXRob2RdIGlzIG5hdGl2ZS4KICBib29sIF9wcm9jZXNzRmllbGRBbm5vdGF0aW9ucygKICAgICAgaXIuRmllbGQgbm9kZSwgSXJBbm5vdGF0aW9uRGF0YSBhbm5vdGF0aW9uRGF0YSkgewogICAgaWYgKG5vZGUuaXNJbnN0YW5jZU1lbWJlciAmJgogICAgICAgIF9uYXRpdmVCYXNpY0RhdGEKICAgICAgICAgICAgLmlzTmF0aXZlQ2xhc3MoX2VsZW1lbnRNYXAuZ2V0Q2xhc3Mobm9kZS5lbmNsb3NpbmdDbGFzcykpKSB7CiAgICAgIC8vIEV4Y2x1ZGUgbm9uLWluc3RhbmNlIChzdGF0aWMpIGZpZWxkcyAtIHRoZXkgYXJlIG5vdCByZWFsbHkgbmF0aXZlIGFuZAogICAgICAvLyBhcmUgY29tcGlsZWQgYXMgaXNvbGF0ZSBnbG9iYWxzLiAgQWNjZXNzIG9mIGEgcHJvcGVydHkgb2YgYSBjb25zdHJ1Y3RvcgogICAgICAvLyBmdW5jdGlvbiBvciBhIG5vbi1tZXRob2QgcHJvcGVydHkgaW4gdGhlIHByb3RvdHlwZSBjaGFpbiwgbXVzdCBiZSBjb2RlZAogICAgICAvLyB1c2luZyBhIEpTLWNhbGwuCiAgICAgIF9zZXROYXRpdmVOYW1lKG5vZGUsIGFubm90YXRpb25EYXRhKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgewogICAgICBTdHJpbmcgbmFtZSA9IF9maW5kSnNOYW1lRnJvbUFubm90YXRpb24obm9kZSwgYW5ub3RhdGlvbkRhdGEpOwogICAgICBpZiAobmFtZSAhPSBudWxsKSB7CiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKG5vZGUpLAogICAgICAgICAgICAnQEpTTmFtZSguLi4pIGFubm90YXRpb24gaXMgbm90IHN1cHBvcnRlZCBmb3Igc3RhdGljIGZpZWxkczogJwogICAgICAgICAgICAnJG5vZGUuJyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vLyBQcm9jZXNzIHRoZSBwb3RlbnRpYWxseSBuYXRpdmUgW21ldGhvZF0uIEFkZHMgaW5mb3JtYXRpb24gZnJvbSBtZXRhZGF0YQogIC8vLyBhdHRyaWJ1dGVzLiBSZXR1cm5zIGB0cnVlYCBvZiBbbWV0aG9kXSBpcyBuYXRpdmUuCiAgYm9vbCBfcHJvY2Vzc01ldGhvZEFubm90YXRpb25zKAogICAgICBpci5NZW1iZXIgbm9kZSwgSXJBbm5vdGF0aW9uRGF0YSBhbm5vdGF0aW9uRGF0YSkgewogICAgaWYgKF9pc05hdGl2ZU1ldGhvZChub2RlLCBhbm5vdGF0aW9uRGF0YSkpIHsKICAgICAgaWYgKG5vZGUuZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCAmJiAhbm9kZS5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgICAgaWYgKCFfbmF0aXZlQmFzaWNEYXRhCiAgICAgICAgICAgIC5pc05hdGl2ZUNsYXNzKF9lbGVtZW50TWFwLmdldENsYXNzKG5vZGUuZW5jbG9zaW5nQ2xhc3MpKSkgewogICAgICAgICAgX2VsZW1lbnRNYXAucmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgICAgIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKG5vZGUpLAogICAgICAgICAgICAgIE1lc3NhZ2VLaW5kLk5BVElWRV9OT05fSU5TVEFOQ0VfSU5fTk9OX05BVElWRV9DTEFTUyk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIF9zZXROYXRpdmVOYW1lRm9yU3RhdGljTWV0aG9kKG5vZGUsIGFubm90YXRpb25EYXRhKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfc2V0TmF0aXZlTmFtZShub2RlLCBhbm5vdGF0aW9uRGF0YSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLy8gU2V0cyB0aGUgbmF0aXZlIG5hbWUgb2YgW2VsZW1lbnRdLCBlaXRoZXIgZnJvbSBhbiBhbm5vdGF0aW9uLCBvcgogIC8vLyBkZWZhdWx0aW5nIHRvIHRoZSBEYXJ0IG5hbWUuCiAgdm9pZCBfc2V0TmF0aXZlTmFtZShpci5NZW1iZXIgbm9kZSwgSXJBbm5vdGF0aW9uRGF0YSBhbm5vdGF0aW9uRGF0YSkgewogICAgU3RyaW5nIG5hbWUgPSBfZmluZEpzTmFtZUZyb21Bbm5vdGF0aW9uKG5vZGUsIGFubm90YXRpb25EYXRhKTsKICAgIG5hbWUgPz89IG5vZGUubmFtZS5uYW1lOwogICAgX25hdGl2ZURhdGFCdWlsZGVyLnNldE5hdGl2ZU1lbWJlck5hbWUoX2VsZW1lbnRNYXAuZ2V0TWVtYmVyKG5vZGUpLCBuYW1lKTsKICB9CgogIC8vLyBTZXRzIHRoZSBuYXRpdmUgbmFtZSBvZiB0aGUgc3RhdGljIG5hdGl2ZSBtZXRob2QgW2VsZW1lbnRdLCB1c2luZyB0aGUKICAvLy8gZm9sbG93aW5nIHJ1bGVzOgogIC8vLyAxLiBJZiBbZWxlbWVudF0gaGFzIGEgQEpTTmFtZSBhbm5vdGF0aW9uIHRoYXQgaXMgYW4gaWRlbnRpZmllciwgcXVhbGlmeQogIC8vLyAgICB0aGF0IGlkZW50aWZpZXIgdG8gdGhlIEBOYXRpdmUgbmFtZSBvZiB0aGUgZW5jbG9zaW5nIGNsYXNzCiAgLy8vIDIuIElmIFtlbGVtZW50XSBoYXMgYSBASlNOYW1lIGFubm90YXRpb24gdGhhdCBpcyBub3QgYW4gaWRlbnRpZmllciwKICAvLy8gICAgdXNlIHRoZSBkZWNsYXJlZCBASlNOYW1lIGFzIHRoZSBleHByZXNzaW9uCiAgLy8vIDMuIElmIFtlbGVtZW50XSBkb2VzIG5vdCBoYXZlIGEgQEpTTmFtZSBhbm5vdGF0aW9uLCBxdWFsaWZ5IHRoZSBuYW1lIG9mCiAgLy8vICAgIHRoZSBtZXRob2Qgd2l0aCB0aGUgQE5hdGl2ZSBuYW1lIG9mIHRoZSBlbmNsb3NpbmcgY2xhc3MuCiAgdm9pZCBfc2V0TmF0aXZlTmFtZUZvclN0YXRpY01ldGhvZCgKICAgICAgaXIuTWVtYmVyIG5vZGUsIElyQW5ub3RhdGlvbkRhdGEgYW5ub3RhdGlvbkRhdGEpIHsKICAgIFN0cmluZyBuYW1lID0gX2ZpbmRKc05hbWVGcm9tQW5ub3RhdGlvbihub2RlLCBhbm5vdGF0aW9uRGF0YSk7CiAgICBuYW1lID8/PSBub2RlLm5hbWUubmFtZTsKICAgIGlmIChfaXNJZGVudGlmaWVyKG5hbWUpKSB7CiAgICAgIENsYXNzRW50aXR5IGNscyA9IF9lbGVtZW50TWFwLmdldENsYXNzKG5vZGUuZW5jbG9zaW5nQ2xhc3MpOwogICAgICBMaXN0PFN0cmluZz4gbmF0aXZlTmFtZXMgPSBfbmF0aXZlQmFzaWNEYXRhLmdldE5hdGl2ZVRhZ3NPZkNsYXNzKGNscyk7CiAgICAgIGlmIChuYXRpdmVOYW1lcy5sZW5ndGggIT0gMSkgewogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShub2RlKSwKICAgICAgICAgICAgJ1VuYWJsZSB0byBkZXRlcm1pbmUgYSBuYXRpdmUgbmFtZSBmb3IgdGhlIGVuY2xvc2luZyBjbGFzcywgJwogICAgICAgICAgICAnb3B0aW9uczogJG5hdGl2ZU5hbWVzJyk7CiAgICAgIH0KICAgICAgX25hdGl2ZURhdGFCdWlsZGVyLnNldE5hdGl2ZU1lbWJlck5hbWUoCiAgICAgICAgICBfZWxlbWVudE1hcC5nZXRNZW1iZXIobm9kZSksICcke25hdGl2ZU5hbWVzWzBdfS4kbmFtZScpOwogICAgfSBlbHNlIHsKICAgICAgX25hdGl2ZURhdGFCdWlsZGVyLnNldE5hdGl2ZU1lbWJlck5hbWUoX2VsZW1lbnRNYXAuZ2V0TWVtYmVyKG5vZGUpLCBuYW1lKTsKICAgIH0KICB9CgogIGJvb2wgX2lzSWRlbnRpZmllcihTdHJpbmcgcykgPT4gX2lkZW50aWZpZXIuaGFzTWF0Y2gocyk7CgogIC8vLyBSZXR1cm5zIHRoZSBKU05hbWUgYW5ub3RhdGlvbiBzdHJpbmcgb3IgYG51bGxgIGlmIG5vIEpTTmFtZSBhbm5vdGF0aW9uIGlzCiAgLy8vIHByZXNlbnQuCiAgU3RyaW5nIF9maW5kSnNOYW1lRnJvbUFubm90YXRpb24oCiAgICAgIGlyLk1lbWJlciBub2RlLCBJckFubm90YXRpb25EYXRhIGFubm90YXRpb25EYXRhKSB7CiAgICBTdHJpbmcganNOYW1lOwogICAgaWYgKGFubm90YXRpb25EYXRhICE9IG51bGwpIHsKICAgICAganNOYW1lID0gYW5ub3RhdGlvbkRhdGEuZ2V0TmF0aXZlTWVtYmVyTmFtZShub2RlKTsKICAgIH0gZWxzZSB7CiAgICAgIFNvdXJjZVNwYW4gc291cmNlU3BhbiA9IGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKG5vZGUpOwogICAgICBmb3IgKENvbnN0YW50VmFsdWUgdmFsdWUgaW4gX2VsZW1lbnRFbnZpcm9ubWVudAogICAgICAgICAgLmdldE1lbWJlck1ldGFkYXRhKF9lbGVtZW50TWFwLmdldE1lbWJlcihub2RlKSkpIHsKICAgICAgICBTdHJpbmcgbmFtZSA9IHJlYWRBbm5vdGF0aW9uTmFtZSgKICAgICAgICAgICAgc291cmNlU3BhbiwgdmFsdWUsIF9jb21tb25FbGVtZW50cy5hbm5vdGF0aW9uSlNOYW1lQ2xhc3MpOwogICAgICAgIGlmIChqc05hbWUgPT0gbnVsbCkgewogICAgICAgICAganNOYW1lID0gbmFtZTsKICAgICAgICB9IGVsc2UgaWYgKG5hbWUgIT0gbnVsbCkgewogICAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgICAgc291cmNlU3BhbiwgJ1RvbyBtYW55IEpTTmFtZSBhbm5vdGF0aW9uczogJHt2YWx1ZS50b0RhcnRUZXh0KCl9Jyk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4ganNOYW1lOwogIH0KCiAgTmF0aXZlQmVoYXZpb3IgX2NvbXB1dGVOYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3IoY292YXJpYW50IEtGaWVsZCBmaWVsZCkgewogICAgaXIuRmllbGQgbm9kZSA9IF9lbGVtZW50TWFwLmdldE1lbWJlck5vZGUoZmllbGQpOwogICAgcmV0dXJuIF9lbGVtZW50TWFwLmdldE5hdGl2ZUJlaGF2aW9yRm9yRmllbGRTdG9yZShub2RlKTsKICB9CgogIE5hdGl2ZUJlaGF2aW9yIF9jb21wdXRlTmF0aXZlRmllbGRMb2FkQmVoYXZpb3IoCiAgICAgIEtGaWVsZCBmaWVsZCwgSXJBbm5vdGF0aW9uRGF0YSBhbm5vdGF0aW9uRGF0YSwKICAgICAge2Jvb2wgaXNKc0ludGVyb3B9KSB7CiAgICBpci5GaWVsZCBub2RlID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyTm9kZShmaWVsZCk7CiAgICBJdGVyYWJsZTxTdHJpbmc+IGNyZWF0ZXNBbm5vdGF0aW9uczsKICAgIEl0ZXJhYmxlPFN0cmluZz4gcmV0dXJuc0Fubm90YXRpb25zOwogICAgaWYgKGFubm90YXRpb25EYXRhICE9IG51bGwpIHsKICAgICAgY3JlYXRlc0Fubm90YXRpb25zID0gYW5ub3RhdGlvbkRhdGEuZ2V0Q3JlYXRlc0Fubm90YXRpb25zKG5vZGUpOwogICAgICByZXR1cm5zQW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9uRGF0YS5nZXRSZXR1cm5zQW5ub3RhdGlvbnMobm9kZSk7CiAgICB9IGVsc2UgewogICAgICBMaXN0PENvbnN0YW50VmFsdWU+IG1ldGFkYXRhID0KICAgICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0TWVtYmVyTWV0YWRhdGEoZmllbGQpOwogICAgICBjcmVhdGVzQW5ub3RhdGlvbnMgPSBnZXRDcmVhdGVzQW5ub3RhdGlvbnMoCiAgICAgICAgICBfZWxlbWVudE1hcC5yZXBvcnRlciwgX2VsZW1lbnRNYXAuY29tbW9uRWxlbWVudHMsIG1ldGFkYXRhKTsKICAgICAgcmV0dXJuc0Fubm90YXRpb25zID0gZ2V0UmV0dXJuc0Fubm90YXRpb25zKAogICAgICAgICAgX2VsZW1lbnRNYXAucmVwb3J0ZXIsIF9lbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzLCBtZXRhZGF0YSk7CiAgICB9CiAgICByZXR1cm4gX2VsZW1lbnRNYXAuZ2V0TmF0aXZlQmVoYXZpb3JGb3JGaWVsZExvYWQoCiAgICAgICAgbm9kZSwgY3JlYXRlc0Fubm90YXRpb25zLCByZXR1cm5zQW5ub3RhdGlvbnMsCiAgICAgICAgaXNKc0ludGVyb3A6IGlzSnNJbnRlcm9wKTsKICB9CgogIE5hdGl2ZUJlaGF2aW9yIF9jb21wdXRlTmF0aXZlTWV0aG9kQmVoYXZpb3IoCiAgICAgIEtGdW5jdGlvbiBmdW5jdGlvbiwgSXJBbm5vdGF0aW9uRGF0YSBhbm5vdGF0aW9uRGF0YSwKICAgICAge2Jvb2wgaXNKc0ludGVyb3B9KSB7CiAgICBpci5NZW1iZXIgbm9kZSA9IF9lbGVtZW50TWFwLmdldE1lbWJlck5vZGUoZnVuY3Rpb24pOwogICAgSXRlcmFibGU8U3RyaW5nPiBjcmVhdGVzQW5ub3RhdGlvbnM7CiAgICBJdGVyYWJsZTxTdHJpbmc+IHJldHVybnNBbm5vdGF0aW9uczsKICAgIGlmIChhbm5vdGF0aW9uRGF0YSAhPSBudWxsKSB7CiAgICAgIGNyZWF0ZXNBbm5vdGF0aW9ucyA9IGFubm90YXRpb25EYXRhLmdldENyZWF0ZXNBbm5vdGF0aW9ucyhub2RlKTsKICAgICAgcmV0dXJuc0Fubm90YXRpb25zID0gYW5ub3RhdGlvbkRhdGEuZ2V0UmV0dXJuc0Fubm90YXRpb25zKG5vZGUpOwogICAgfSBlbHNlIHsKICAgICAgTGlzdDxDb25zdGFudFZhbHVlPiBtZXRhZGF0YSA9CiAgICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmdldE1lbWJlck1ldGFkYXRhKGZ1bmN0aW9uKTsKICAgICAgY3JlYXRlc0Fubm90YXRpb25zID0gZ2V0Q3JlYXRlc0Fubm90YXRpb25zKAogICAgICAgICAgX2VsZW1lbnRNYXAucmVwb3J0ZXIsIF9lbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzLCBtZXRhZGF0YSk7CiAgICAgIHJldHVybnNBbm5vdGF0aW9ucyA9IGdldFJldHVybnNBbm5vdGF0aW9ucygKICAgICAgICAgIF9lbGVtZW50TWFwLnJlcG9ydGVyLCBfZWxlbWVudE1hcC5jb21tb25FbGVtZW50cywgbWV0YWRhdGEpOwogICAgfQogICAgcmV0dXJuIF9lbGVtZW50TWFwLmdldE5hdGl2ZUJlaGF2aW9yRm9yTWV0aG9kKAogICAgICAgIG5vZGUsIGNyZWF0ZXNBbm5vdGF0aW9ucywgcmV0dXJuc0Fubm90YXRpb25zLAogICAgICAgIGlzSnNJbnRlcm9wOiBpc0pzSW50ZXJvcCk7CiAgfQoKICBib29sIF9pc05hdGl2ZU1ldGhvZChpci5NZW1iZXIgbm9kZSwgSXJBbm5vdGF0aW9uRGF0YSBhbm5vdGF0aW9uRGF0YSkgewogICAgaWYgKCFtYXliZUVuYWJsZU5hdGl2ZShub2RlLmVuY2xvc2luZ0xpYnJhcnkuaW1wb3J0VXJpKSkgcmV0dXJuIGZhbHNlOwogICAgYm9vbCBoYXNOYXRpdmVCb2R5OwogICAgaWYgKGFubm90YXRpb25EYXRhICE9IG51bGwpIHsKICAgICAgaGFzTmF0aXZlQm9keSA9IGFubm90YXRpb25EYXRhLmhhc05hdGl2ZUJvZHkobm9kZSk7CiAgICB9IGVsc2UgewogICAgICBoYXNOYXRpdmVCb2R5ID0gbm9kZS5hbm5vdGF0aW9ucy5hbnkoKGlyLkV4cHJlc3Npb24gZXhwcmVzc2lvbikgewogICAgICAgIHJldHVybiBleHByZXNzaW9uIGlzIGlyLkNvbnN0cnVjdG9ySW52b2NhdGlvbiAmJgogICAgICAgICAgICBfZWxlbWVudE1hcC5nZXRJbnRlcmZhY2VUeXBlKGV4cHJlc3Npb24uY29uc3RydWN0ZWRUeXBlKSA9PQogICAgICAgICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmV4dGVybmFsTmFtZVR5cGU7CiAgICAgIH0pOwogICAgfQogICAgaWYgKCFoYXNOYXRpdmVCb2R5ICYmCiAgICAgICAgbm9kZS5pc0V4dGVybmFsICYmCiAgICAgICAgIV9uYXRpdmVCYXNpY0RhdGEuaXNKc0ludGVyb3BNZW1iZXIoX2VsZW1lbnRNYXAuZ2V0TWVtYmVyKG5vZGUpKSkgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTaG91bGQgd2UgY2hhbmdlIGRhcnQ6aHRtbCBhbmQgZnJpZW5kcyB0byB1c2UKICAgICAgLy8gIGBleHRlcm5hbGAgaW5zdGVhZCBvZiB0aGUgbmF0aXZlIGJvZHkgc3ludGF4PwogICAgICBfZWxlbWVudE1hcC5yZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShub2RlKSwgTWVzc2FnZUtpbmQuTk9OX05BVElWRV9FWFRFUk5BTCk7CiAgICB9CiAgICByZXR1cm4gaGFzTmF0aXZlQm9keTsKICB9CgogIGJvb2wgX2lzSnNJbnRlcm9wTWVtYmVyKGlyLk1lbWJlciBub2RlKSB7CiAgICByZXR1cm4gX25hdGl2ZUJhc2ljRGF0YS5pc0pzSW50ZXJvcE1lbWJlcihfZWxlbWVudE1hcC5nZXRNZW1iZXIobm9kZSkpOwogIH0KfQoKY2xhc3MgS2VybmVsQ2xhc3NRdWVyaWVzIGV4dGVuZHMgQ2xhc3NRdWVyaWVzIHsKICBmaW5hbCBLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIGVsZW1lbnRNYXA7CgogIEtlcm5lbENsYXNzUXVlcmllcyh0aGlzLmVsZW1lbnRNYXApOwoKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXREZWNsYXJhdGlvbihDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBjbHM7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxJbnRlcmZhY2VUeXBlPiBnZXRTdXBlcnR5cGVzKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuZ2V0T3JkZXJlZFR5cGVTZXQoY2xzKS5zdXBlcnR5cGVzOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0U3VwZXJDbGFzcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLmdldFN1cGVyVHlwZShjbHMpPy5lbGVtZW50OwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpbXBsZW1lbnRzRnVuY3Rpb24oQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5faW1wbGVtZW50c0Z1bmN0aW9uKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0SGllcmFyY2h5RGVwdGgoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5nZXRIaWVyYXJjaHlEZXB0aChjbHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0QXBwbGllZE1peGluKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuZ2V0QXBwbGllZE1peGluKGNscyk7CiAgfQp9CgpEaWFnbm9zdGljTWVzc2FnZSBfY3JlYXRlRGlhZ25vc3RpY01lc3NhZ2UoCiAgICBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIsIGlyLkxvY2F0ZWRNZXNzYWdlIG1lc3NhZ2UpIHsKICBTb3VyY2VTcGFuIHNvdXJjZVNwYW4gPSBuZXcgU291cmNlU3BhbigKICAgICAgbWVzc2FnZS51cmksIG1lc3NhZ2UuY2hhck9mZnNldCwgbWVzc2FnZS5jaGFyT2Zmc2V0ICsgbWVzc2FnZS5sZW5ndGgpOwogIHJldHVybiByZXBvcnRlci5jcmVhdGVNZXNzYWdlKAogICAgICBzb3VyY2VTcGFuLCBNZXNzYWdlS2luZC5HRU5FUklDLCB7J3RleHQnOiBtZXNzYWdlLm1lc3NhZ2V9KTsKfQoKdm9pZCByZXBvcnRMb2NhdGVkTWVzc2FnZShEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIsCiAgICBpci5Mb2NhdGVkTWVzc2FnZSBtZXNzYWdlLCBMaXN0PGlyLkxvY2F0ZWRNZXNzYWdlPiBjb250ZXh0KSB7CiAgRGlhZ25vc3RpY01lc3NhZ2UgZGlhZ25vc3RpY01lc3NhZ2UgPQogICAgICBfY3Jl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c2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNYWtlIHRoaXMgYSBzZXBhcmF0ZSBsaWJyYXJ5LgpwYXJ0IG9mIGRhcnQyanMua2VybmVsLmVsZW1lbnRfbWFwOwoKY2xhc3MgS2VybmVsQW5ub3RhdGlvblByb2Nlc3NvciBpbXBsZW1lbnRzIEFubm90YXRpb25Qcm9jZXNzb3IgewogIGZpbmFsIEtlcm5lbFRvRWxlbWVudE1hcEltcGwgZWxlbWVudE1hcDsKICBmaW5hbCBOYXRpdmVCYXNpY0RhdGFCdWlsZGVyIF9uYXRpdmVCYXNpY0RhdGFCdWlsZGVyOwogIGZpbmFsIElyQW5ub3RhdGlvbkRhdGEgYW5ub3RhdGlvbkRhdGE7CgogIEtlcm5lbEFubm90YXRpb25Qcm9jZXNzb3IoCiAgICAgIHRoaXMuZWxlbWVudE1hcCwgdGhpcy5fbmF0aXZlQmFzaWNEYXRhQnVpbGRlciwgdGhpcy5hbm5vdGF0aW9uRGF0YSk7CgogIEBvdmVycmlkZQogIHZvaWQgZXh0cmFjdE5hdGl2ZUFubm90YXRpb25zKExpYnJhcnlFbnRpdHkgbGlicmFyeSkgewogICAgS0VsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQgPSBlbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudDsKICAgIEtDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cyA9IGVsZW1lbnRNYXAuY29tbW9uRWxlbWVudHM7CgogICAgZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hDbGFzcyhsaWJyYXJ5LCAoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICAgIGlyLkNsYXNzIG5vZGUgPSBlbGVtZW50TWFwLmdldENsYXNzTm9kZShjbHMpOwogICAgICBTdHJpbmcgYW5ub3RhdGlvbk5hbWU7CiAgICAgIGlmIChhbm5vdGF0aW9uRGF0YSAhPSBudWxsKSB7CiAgICAgICAgYW5ub3RhdGlvbk5hbWUgPSBhbm5vdGF0aW9uRGF0YS5nZXROYXRpdmVDbGFzc05hbWUobm9kZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgYnJhbmNoIHdoZW4gd2UgdXNlIGNvbnN0YW50cyBmcm9tCiAgICAgICAgLy8gQ0ZFLgogICAgICAgIGZvciAoQ29uc3RhbnRWYWx1ZSB2YWx1ZSBpbiBlbGVtZW50RW52aXJvbm1lbnQuZ2V0Q2xhc3NNZXRhZGF0YShjbHMpKSB7CiAgICAgICAgICBTdHJpbmcgbmFtZSA9IHJlYWRBbm5vdGF0aW9uTmFtZSgKICAgICAgICAgICAgICBjbHMsIHZhbHVlLCBjb21tb25FbGVtZW50cy5uYXRpdmVBbm5vdGF0aW9uQ2xhc3MpOwogICAgICAgICAgaWYgKGFubm90YXRpb25OYW1lID09IG51bGwpIHsKICAgICAgICAgICAgYW5ub3RhdGlvbk5hbWUgPSBuYW1lOwogICAgICAgICAgfSBlbHNlIGlmIChuYW1lICE9IG51bGwpIHsKICAgICAgICAgICAgZmFpbGVkQXQoY2xzLCAnVG9vIG1hbnkgbmFtZSBhbm5vdGF0aW9ucy4nKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGFubm90YXRpb25OYW1lICE9IG51bGwpIHsKICAgICAgICBfbmF0aXZlQmFzaWNEYXRhQnVpbGRlci5zZXROYXRpdmVDbGFzc1RhZ0luZm8oY2xzLCBhbm5vdGF0aW9uTmFtZSk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgU3RyaW5nIGdldEpzSW50ZXJvcE5hbWUoCiAgICAgIFNwYW5uYWJsZSBzcGFubmFibGUsIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IG1ldGFkYXRhKSB7CiAgICBLQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMgPSBlbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzOwogICAgU3RyaW5nIGFubm90YXRpb25OYW1lOwogICAgZm9yIChDb25zdGFudFZhbHVlIHZhbHVlIGluIG1ldGFkYXRhKSB7CiAgICAgIFN0cmluZyBuYW1lID0gcmVhZEFubm90YXRpb25OYW1lKAogICAgICAgICAgc3Bhbm5hYmxlLCB2YWx1ZSwgY29tbW9uRWxlbWVudHMuanNBbm5vdGF0aW9uQ2xhc3MsCiAgICAgICAgICBkZWZhdWx0VmFsdWU6ICcnKTsKICAgICAgaWYgKGFubm90YXRpb25OYW1lID09IG51bGwpIHsKICAgICAgICBhbm5vdGF0aW9uTmFtZSA9IG5hbWU7CiAgICAgIH0gZWxzZSBpZiAobmFtZSAhPSBudWxsKSB7CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVGhpcyBzaG91bGQgYmUgYW4gZXJyb3IsIG5vdCBhIGNyYXNoLgogICAgICAgIGZhaWxlZEF0KHNwYW5uYWJsZSwgJ1RvbyBtYW55IG5hbWUgYW5ub3RhdGlvbnMuJyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBhbm5vdGF0aW9uTmFtZTsKICB9CgogIHZvaWQgY2hlY2tGdW5jdGlvblBhcmFtZXRlcnMoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pIHsKICAgIGlmIChmdW5jdGlvbi5wYXJhbWV0ZXJTdHJ1Y3R1cmUubmFtZWRQYXJhbWV0ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgZWxlbWVudE1hcC5yZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICBmdW5jdGlvbiwKICAgICAgICAgIE1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfTUVUSE9EX1dJVEhfTkFNRURfQVJHVU1FTlRTLAogICAgICAgICAgeydtZXRob2QnOiBmdW5jdGlvbi5uYW1lfSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGV4dHJhY3RKc0ludGVyb3BBbm5vdGF0aW9ucyhMaWJyYXJ5RW50aXR5IGxpYnJhcnkpIHsKICAgIERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlciA9IGVsZW1lbnRNYXAucmVwb3J0ZXI7CiAgICBLRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCA9IGVsZW1lbnRNYXAuZWxlbWVudEVudmlyb25tZW50OwogICAgS0NvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzID0gZWxlbWVudE1hcC5jb21tb25FbGVtZW50czsKCiAgICBpci5MaWJyYXJ5IGxpYnJhcnlOb2RlID0gZWxlbWVudE1hcC5nZXRMaWJyYXJ5Tm9kZShsaWJyYXJ5KTsKICAgIFN0cmluZyBsaWJyYXJ5TmFtZTsKICAgIGlmIChhbm5vdGF0aW9uRGF0YSAhPSBudWxsKSB7CiAgICAgIGxpYnJhcnlOYW1lID0gYW5ub3RhdGlvbkRhdGEuZ2V0SnNJbnRlcm9wTGlicmFyeU5hbWUobGlicmFyeU5vZGUpOwogICAgfSBlbHNlIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgd2hlbiB3ZSB1c2UgY29uc3RhbnRzIGZyb20gQ0ZFLgogICAgICBsaWJyYXJ5TmFtZSA9IGdldEpzSW50ZXJvcE5hbWUoCiAgICAgICAgICBsaWJyYXJ5LCBlbGVtZW50RW52aXJvbm1lbnQuZ2V0TGlicmFyeU1ldGFkYXRhKGxpYnJhcnkpKTsKICAgIH0KICAgIGZpbmFsIGJvb2wgaXNFeHBsaWNpdGx5bHlKc0xpYnJhcnkgPSBsaWJyYXJ5TmFtZSAhPSBudWxsOwogICAgYm9vbCBpc0pzTGlicmFyeSA9IGlzRXhwbGljaXRseWx5SnNMaWJyYXJ5OwoKICAgIGVsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoTGlicmFyeU1lbWJlcihsaWJyYXJ5LCAoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICBpci5NZW1iZXIgbWVtYmVyTm9kZSA9IGVsZW1lbnRNYXAuZ2V0TWVtYmVyTm9kZShtZW1iZXIpOwogICAgICBTdHJpbmcgbWVtYmVyTmFtZTsKICAgICAgaWYgKGFubm90YXRpb25EYXRhICE9IG51bGwpIHsKICAgICAgICBtZW1iZXJOYW1lID0gYW5ub3RhdGlvbkRhdGEuZ2V0SnNJbnRlcm9wTWVtYmVyTmFtZShtZW1iZXJOb2RlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhpcyB3aGVuIHdlIHVzZSBjb25zdGFudHMgZnJvbSBDRkUuCiAgICAgICAgbWVtYmVyTmFtZSA9IGdldEpzSW50ZXJvcE5hbWUoCiAgICAgICAgICAgIGxpYnJhcnksIGVsZW1lbnRFbnZpcm9ubWVudC5nZXRNZW1iZXJNZXRhZGF0YShtZW1iZXIpKTsKICAgICAgfQogICAgICBpZiAobWVtYmVyLmlzRmllbGQpIHsKICAgICAgICBpZiAobWVtYmVyTmFtZSAhPSBudWxsKSB7CiAgICAgICAgICAvLyBUT0RPKDM0MTc0KTogRGlzYWxsb3cganMtaW50ZXJvcCBmaWVsZHMuCiAgICAgICAgICAvKnJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgICAgICBtZW1iZXIsIE1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfRklFTERfTk9UX1NVUFBPUlRFRCk7Ki8KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24gPSBtZW1iZXI7CiAgICAgICAgaWYgKGZ1bmN0aW9uLmlzRXh0ZXJuYWwgJiYgaXNFeHBsaWNpdGx5bHlKc0xpYnJhcnkpIHsKICAgICAgICAgIC8vIEV4dGVybmFsIG1lbWJlcnMgb2YgZXhwbGljaXQganMtaW50ZXJvcCBsaWJyYXJ5IGFyZSBpbXBsaWNpdGx5CiAgICAgICAgICAvLyBqcy1pbnRlcm9wIG1lbWJlcnMuCiAgICAgICAgICBtZW1iZXJOYW1lID8/PSBmdW5jdGlvbi5uYW1lOwogICAgICAgIH0KICAgICAgICBpZiAobWVtYmVyTmFtZSAhPSBudWxsKSB7CiAgICAgICAgICBpZiAoIWZ1bmN0aW9uLmlzRXh0ZXJuYWwpIHsKICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogRGlzYWxsb3cgbm9uLWV4dGVybmFsIGpzLWludGVyb3AgbWVtYmVycy4KICAgICAgICAgICAgLypyZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICAgICAgICBmdW5jdGlvbiwgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9OT05fRVhURVJOQUxfTUVNQkVSKTsqLwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX25hdGl2ZUJhc2ljRGF0YUJ1aWxkZXIubWFya0FzSnNJbnRlcm9wTWVtYmVyKGZ1bmN0aW9uLCBtZW1iZXJOYW1lKTsKICAgICAgICAgICAgY2hlY2tGdW5jdGlvblBhcmFtZXRlcnMoZnVuY3Rpb24pOwogICAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJdCBpcyB1bmNsZWFyIHdoZXRoZXIgbGlicmFyeSBjYW4gYmUKICAgICAgICAgICAgLy8gaW1wbGljaXRseSBqcy1pbnRlcm9wLiBGb3Igbm93IHdlIGFsbG93IGl0LgogICAgICAgICAgICBpc0pzTGlicmFyeSA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChmdW5jdGlvbi5pc0V4dGVybmFsICYmCiAgICAgICAgICAgICFjb21tb25FbGVtZW50cy5pc0V4dGVybmFsQWxsb3dlZChmdW5jdGlvbikpIHsKICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgICAgICBmdW5jdGlvbiwgTWVzc2FnZUtpbmQuTk9OX05BVElWRV9FWFRFUk5BTCk7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKCiAgICBlbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaENsYXNzKGxpYnJhcnksIChDbGFzc0VudGl0eSBjbHMpIHsKICAgICAgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gbWV0YWRhdGE7CiAgICAgIGlyLkNsYXNzIGNsYXNzTm9kZSA9IGVsZW1lbnRNYXAuZ2V0Q2xhc3NOb2RlKGNscyk7CiAgICAgIFN0cmluZyBjbGFzc05hbWU7CiAgICAgIGlmIChhbm5vdGF0aW9uRGF0YSAhPSBudWxsKSB7CiAgICAgICAgY2xhc3NOYW1lID0gYW5ub3RhdGlvbkRhdGEuZ2V0SnNJbnRlcm9wQ2xhc3NOYW1lKGNsYXNzTm9kZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWV0YWRhdGEgPSBlbGVtZW50RW52aXJvbm1lbnQuZ2V0Q2xhc3NNZXRhZGF0YShjbHMpOwogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGlzIHdoZW4gd2UgdXNlIGNvbnN0YW50cyBmcm9tIENGRS4KICAgICAgICBjbGFzc05hbWUgPSBnZXRKc0ludGVyb3BOYW1lKGNscywgbWV0YWRhdGEpOwogICAgICB9CiAgICAgIGlmIChjbGFzc05hbWUgIT0gbnVsbCkgewogICAgICAgIGJvb2wgaXNBbm9ueW1vdXM7CiAgICAgICAgaWYgKGFubm90YXRpb25EYXRhICE9IG51bGwpIHsKICAgICAgICAgIGlzQW5vbnltb3VzID0gYW5ub3RhdGlvbkRhdGEuaXNBbm9ueW1vdXNKc0ludGVyb3BDbGFzcyhjbGFzc05vZGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpc0Fub255bW91cyA9IGZhbHNlOwogICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgYnJhbmNoIHdoZW4gd2UgdXNlIGNvbnN0YW50cyBmcm9tCiAgICAgICAgICAvLyBDRkUuCiAgICAgICAgICBmb3IgKENvbnN0YW50VmFsdWUgdmFsdWUgaW4gbWV0YWRhdGEpIHsKICAgICAgICAgICAgaWYgKGlzQW5ub3RhdGlvbihjbHMsIHZhbHVlLCBjb21tb25FbGVtZW50cy5qc0Fub255bW91c0NsYXNzKSkgewogICAgICAgICAgICAgIGlzQW5vbnltb3VzID0gdHJ1ZTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZXBvcnQgYW4gZXJyb3IgaWYgdGhlIGNsYXNzIGlzIGFub255bW91cyBidXQKICAgICAgICAvLyBoYXMgYSBub24tZW1wdHkgbmFtZS4KICAgICAgICBfbmF0aXZlQmFzaWNEYXRhQnVpbGRlci5tYXJrQXNKc0ludGVyb3BDbGFzcyhjbHMsCiAgICAgICAgICAgIG5hbWU6IGNsYXNzTmFtZSwgaXNBbm9ueW1vdXM6IGlzQW5vbnltb3VzKTsKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJdCBpcyB1bmNsZWFyIHdoZXRoZXIgbGlicmFyeSBjYW4gYmUgaW1wbGljaXRseQogICAgICAgIC8vIGpzLWludGVyb3AuIEZvciBub3cgd2UgYWxsb3cgaXQuCiAgICAgICAgaXNKc0xpYnJhcnkgPSB0cnVlOwoKICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaExvY2FsQ2xhc3NNZW1iZXIoY2xzLCAoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICAgICAgaWYgKG1lbWJlci5pc0ZpZWxkKSB7CiAgICAgICAgICAgIC8vIFRPRE8oMzQxNzQpOiBEaXNhbGxvdyBqcy1pbnRlcm9wIGZpZWxkcy4KICAgICAgICAgICAgLypyZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICAgICAgICBtZW1iZXIsIE1lc3NhZ2VLaW5kLklNUExJQ0lUX0pTX0lOVEVST1BfRklFTERfTk9UX1NVUFBPUlRFRCk7Ki8KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uID0gbWVtYmVyOwogICAgICAgICAgICBpci5NZW1iZXIgbWVtYmVyTm9kZSA9IGVsZW1lbnRNYXAuZ2V0TWVtYmVyTm9kZShtZW1iZXIpOwogICAgICAgICAgICBTdHJpbmcgbWVtYmVyTmFtZTsKICAgICAgICAgICAgaWYgKGFubm90YXRpb25EYXRhICE9IG51bGwpIHsKICAgICAgICAgICAgICBtZW1iZXJOYW1lID0gYW5ub3RhdGlvbkRhdGEuZ2V0SnNJbnRlcm9wTWVtYmVyTmFtZShtZW1iZXJOb2RlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhpcyB3aGVuIHdlIHVzZSBjb25zdGFudHMgZnJvbSBDRkUuCiAgICAgICAgICAgICAgbWVtYmVyTmFtZSA9IGdldEpzSW50ZXJvcE5hbWUoCiAgICAgICAgICAgICAgICAgIGxpYnJhcnksIGVsZW1lbnRFbnZpcm9ubWVudC5nZXRNZW1iZXJNZXRhZGF0YShmdW5jdGlvbikpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChmdW5jdGlvbi5pc0V4dGVybmFsKSB7CiAgICAgICAgICAgICAgbWVtYmVyTmFtZSA/Pz0gZnVuY3Rpb24ubmFtZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAobWVtYmVyTmFtZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVGhlIGRvY3VtZW50YXRpb24gc3RhdGVzIHRoYXQgZXhwbGljaXQKICAgICAgICAgICAgICAvLyBtZW1iZXIgbmFtZSBhbm5vdGF0aW9ucyBhcmUgbm90IGFsbG93ZWQgb24gaW5zdGFuY2UgbWVtYmVycy4KICAgICAgICAgICAgICBfbmF0aXZlQmFzaWNEYXRhQnVpbGRlci5tYXJrQXNKc0ludGVyb3BNZW1iZXIoCiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLCBtZW1iZXJOYW1lKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCFmdW5jdGlvbi5pc0V4dGVybmFsICYmCiAgICAgICAgICAgICAgICAhZnVuY3Rpb24uaXNBYnN0cmFjdCAmJgogICAgICAgICAgICAgICAgIWZ1bmN0aW9uLmlzU3RhdGljKSB7CiAgICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgICAgICAgICBmdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9DTEFTU19OT05fRVhURVJOQUxfTUVNQkVSLAogICAgICAgICAgICAgICAgICB7J2Nscyc6IGNscy5uYW1lLCAnbWVtYmVyJzogbWVtYmVyLm5hbWV9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY2hlY2tGdW5jdGlvblBhcmFtZXRlcnMoZnVuY3Rpb24pOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGVsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoQ29uc3RydWN0b3IoY2xzLAogICAgICAgICAgICAoQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IpIHsKICAgICAgICAgIFN0cmluZyBtZW1iZXJOYW1lID0gZ2V0SnNJbnRlcm9wTmFtZSgKICAgICAgICAgICAgICBsaWJyYXJ5LCBlbGVtZW50RW52aXJvbm1lbnQuZ2V0TWVtYmVyTWV0YWRhdGEoY29uc3RydWN0b3IpKTsKICAgICAgICAgIGlmIChjb25zdHJ1Y3Rvci5pc0V4dGVybmFsKSB7CiAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEl0IHNob3VsZCBwcm9iYWJseSBiZSBhbiBlcnJvciB0byBoYXZlIGEKICAgICAgICAgICAgLy8gbm8tbmFtZSBjb25zdHJ1Y3RvciB3aXRob3V0IGEgQEpTKCkgYW5ub3RhdGlvbi4KICAgICAgICAgICAgbWVtYmVyTmFtZSA/Pz0gY29uc3RydWN0b3IubmFtZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChtZW1iZXJOYW1lICE9IG51bGwpIHsKICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVGhlIGRvY3VtZW50YXRpb24gc3RhdGVzIHRoYXQgZXhwbGljaXQKICAgICAgICAgICAgLy8gbWVtYmVyIG5hbWUgYW5ub3RhdGlvbnMgYXJlIG5vdCBhbGxvd2VkIG9uIGluc3RhbmNlIG1lbWJlcnMuCiAgICAgICAgICAgIF9uYXRpdmVCYXNpY0RhdGFCdWlsZGVyLm1hcmtBc0pzSW50ZXJvcE1lbWJlcigKICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yLCBtZW1iZXJOYW1lKTsKICAgICAgICAgIH0KCiAgICAgICAgICAvLyBUT0RPKDMzODM0KTogSXQgaXMgYSBicmVha2luZyBjaGFuZ2UgKGF0IGxlYXN0IGFnYWluc3QgaW4gc29tZSBvZgogICAgICAgICAgLy8gb3VyIG93biB0ZXN0cykgYnV0IEpTLWludGVyb3AgY29uc3RydWN0b3JzIHNob3VsZCBiZSByZXF1aXJlZCB0byBiZQogICAgICAgICAgLy8gZXh0ZXJuYWwgc2luY2Ugd2Ugb3RoZXJ3aXNlIGFsbG93IGNyZWF0aW5nIGEgRGFydCBvYmplY3QgdGhhdCB0cmllcwogICAgICAgICAgLy8gdG8gcGFzcyBhcyBhIEpTLWludGVyb3AgY2xhc3MuCiAgICAgICAgICAvKmlmICghY29uc3RydWN0b3IuaXNFeHRlcm5hbCkgewogICAgICAgICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoY29uc3RydWN0b3IsCiAgICAgICAgICAgICAgICBNZXNzYWdlS2luZC5KU19JTlRFUk9QX0NMQVNTX05PTl9FWFRFUk5BTF9DT05TVFJVQ1RPUiwgewogICAgICAgICAgICAgICdjbHMnOiBjbHMubmFtZSwKICAgICAgICAgICAgICAnY29uc3RydWN0b3InOgogICAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rvci5uYW1lLmlzRW1wdHkgPyAnJHtjbHMubmFtZX0uJyA6IGNvbnN0cnVjdG9yLm5hbWUKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9Ki8KCiAgICAgICAgICBpZiAoY29uc3RydWN0b3IuaXNGYWN0b3J5Q29uc3RydWN0b3IgJiYgaXNBbm9ueW1vdXMpIHsKICAgICAgICAgICAgaWYgKGNvbnN0cnVjdG9yLnBhcmFtZXRlclN0cnVjdHVyZS5wb3NpdGlvbmFsUGFyYW1ldGVycyA+IDApIHsKICAgICAgICAgICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yLAogICAgICAgICAgICAgICAgICBNZXNzYWdlS2luZAogICAgICAgICAgICAgICAgICAgICAgLkpTX09CSkVDVF9MSVRFUkFMX0NPTlNUUlVDVE9SX1dJVEhfUE9TSVRJT05BTF9BUkdVTUVOVFMsCiAgICAgICAgICAgICAgICAgIHsnY2xzJzogY2xzLm5hbWV9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY2hlY2tGdW5jdGlvblBhcmFtZXRlcnMoY29uc3RydWN0b3IpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIGVsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoTG9jYWxDbGFzc01lbWJlcihjbHMsIChNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgICAgICBTdHJpbmcgbWVtYmVyTmFtZSA9IGdldEpzSW50ZXJvcE5hbWUoCiAgICAgICAgICAgICAgbGlicmFyeSwgZWxlbWVudEVudmlyb25tZW50LmdldE1lbWJlck1ldGFkYXRhKG1lbWJlcikpOwogICAgICAgICAgaWYgKG1lbWJlck5hbWUgIT0gbnVsbCkgewogICAgICAgICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICAgICAgICBtZW1iZXIsIE1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfTUVNQkVSX0lOX05PTl9KU19JTlRFUk9QX0NMQVNTKTsKICAgICAgICAgIH0gZWxzZSBpZiAobWVtYmVyIGlzIEZ1bmN0aW9uRW50aXR5KSB7CiAgICAgICAgICAgIGlmIChtZW1iZXIuaXNFeHRlcm5hbCAmJgogICAgICAgICAgICAgICAgIWNvbW1vbkVsZW1lbnRzLmlzRXh0ZXJuYWxBbGxvd2VkKG1lbWJlcikpIHsKICAgICAgICAgICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICAgICAgICAgIG1lbWJlciwgTWVzc2FnZUtpbmQuTk9OX05BVElWRV9FWFRFUk5BTCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaENvbnN0cnVjdG9yKGNscywKICAgICAgICAgICAgKENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yKSB7CiAgICAgICAgICBTdHJpbmcgbWVtYmVyTmFtZSA9IGdldEpzSW50ZXJvcE5hbWUoCiAgICAgICAgICAgICAgbGlicmFyeSwgZWxlbWVudEVudmlyb25tZW50LmdldE1lbWJlck1ldGFkYXRhKGNvbnN0cnVjdG9yKSk7CiAgICAgICAgICBpZiAobWVtYmVyTmFtZSAhPSBudWxsKSB7CiAgICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZShjb25zdHJ1Y3RvciwKICAgICAgICAgICAgICAgIE1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfTUVNQkVSX0lOX05PTl9KU19JTlRFUk9QX0NMQVNTKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChjb25zdHJ1Y3Rvci5pc0V4dGVybmFsICYmCiAgICAgICAgICAgICAgICAhY29tbW9uRWxlbWVudHMuaXNFeHRlcm5hbEFsbG93ZWQoY29uc3RydWN0b3IpKSB7CiAgICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciwgTWVzc2FnZUtpbmQuTk9OX05BVElWRV9FWFRFUk5BTCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfSk7CgogICAgaWYgKGlzSnNMaWJyYXJ5KSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEl0IGlzIHVuY2xlYXIgd2hldGhlciBsaWJyYXJ5IGNhbiBiZSBpbXBsaWNpdGx5CiAgICAgIC8vIGpzLWludGVyb3AuIEZvciBub3cgd2UgYWxsb3cgaXQgYW5kIGFzc3VtZSB0aGUgZW1wdHkgbmFtZS4KICAgICAgbGlicmFyeU5hbWUgPz89ICcnOwogICAgICBfbmF0aXZlQmFzaWNEYXRhQnVpbGRlci5tYXJrQXNKc0ludGVyb3BMaWJyYXJ5KGxpYnJhcnksCiAgICAgICAgICBuYW1lOiBsaWJyYXJ5TmFtZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByb2Nlc3NKc0ludGVyb3BBbm5vdGF0aW9ucygKICAgICAgTmF0aXZlQmFzaWNEYXRhIG5hdGl2ZUJhc2ljRGF0YSwgTmF0aXZlRGF0YUJ1aWxkZXIgbmF0aXZlRGF0YUJ1aWxkZXIpIHsKICAgIERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlciA9IGVsZW1lbnRNYXAucmVwb3J0ZXI7CiAgICBLRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCA9IGVsZW1lbnRNYXAuZWxlbWVudEVudmlyb25tZW50OwogICAgS0NvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzID0gZWxlbWVudE1hcC5jb21tb25FbGVtZW50czsKCiAgICBmb3IgKExpYnJhcnlFbnRpdHkgbGlicmFyeSBpbiBlbGVtZW50RW52aXJvbm1lbnQubGlicmFyaWVzKSB7CiAgICAgIC8vIEVycm9yIGNoZWNraW5nIGZvciBjbGFzcyBpbmhlcml0YW5jZSBtdXN0IGhhcHBlbiBhZnRlciB0aGUgZmlyc3QgcGFzcwogICAgICAvLyB0aHJvdWdoIGFsbCB0aGUgY2xhc3NlcyBiZWNhdXNlIGl0IGlzIHBvc3NpYmxlIHRvIGRlY2xhcmUgYSBzdWJjbGFzcwogICAgICAvLyBiZWZvcmUgYSBzdXBlcmNsYXNzIHRoYXQgaGFzIG5vdCB5ZXQgaGFkICJtYXJrSnNJbnRlcm9wQ2xhc3MiIGNhbGxlZCBvbgogICAgICAvLyBpdC4KICAgICAgZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hDbGFzcyhsaWJyYXJ5LCAoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICAgICAgaXIuQ2xhc3MgY2xhc3NOb2RlID0gZWxlbWVudE1hcC5nZXRDbGFzc05vZGUoY2xzKTsKICAgICAgICBTdHJpbmcgY2xhc3NOYW1lOwogICAgICAgIGlmIChhbm5vdGF0aW9uRGF0YSAhPSBudWxsKSB7CiAgICAgICAgICBjbGFzc05hbWUgPSBhbm5vdGF0aW9uRGF0YS5nZXRKc0ludGVyb3BDbGFzc05hbWUoY2xhc3NOb2RlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgd2hlbiB3ZSB1c2UgY29uc3RhbnRzIGZyb20gQ0ZFLgogICAgICAgICAgY2xhc3NOYW1lID8/PQogICAgICAgICAgICAgIGdldEpzSW50ZXJvcE5hbWUoY2xzLCBlbGVtZW50RW52aXJvbm1lbnQuZ2V0Q2xhc3NNZXRhZGF0YShjbHMpKTsKICAgICAgICB9CiAgICAgICAgaWYgKGNsYXNzTmFtZSAhPSBudWxsKSB7CiAgICAgICAgICBib29sIGltcGxlbWVudHNKc0phdmFTY3JpcHRPYmplY3RDbGFzcyA9IGZhbHNlOwogICAgICAgICAgZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hTdXBlcnR5cGUoY2xzLCAoSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUpIHsKICAgICAgICAgICAgaWYgKHN1cGVydHlwZS5lbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLmpzSmF2YVNjcmlwdE9iamVjdENsYXNzKSB7CiAgICAgICAgICAgICAgaW1wbGVtZW50c0pzSmF2YVNjcmlwdE9iamVjdENsYXNzID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoIWltcGxlbWVudHNKc0phdmFTY3JpcHRPYmplY3RDbGFzcykgewogICAgICAgICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICAgICAgICBjbHMsIE1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfQ0xBU1NfQ0FOTk9UX0VYVEVORF9EQVJUX0NMQVNTLCB7CiAgICAgICAgICAgICAgJ2Nscyc6IGNscy5uYW1lLAogICAgICAgICAgICAgICdzdXBlcmNsYXNzJzogZWxlbWVudEVudmlyb25tZW50LmdldFN1cGVyQ2xhc3MoY2xzKS5uYW1lCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfQp9CoFKAE5OPAE2JAFBKzgpAR1LAQw5TEABQTQdJEIPThBQLEEoIyU5DAoIJEwICAQBGz9AGywoPh0kHyFGOwgGGwQBOkIuFD4mBgQBDDw3TEABQRgiSQ1KJkQGPjABTT8ZJEgPTCdECBwiNilFCg8qPkwhKAoiJk4rSRNRL0k7IAwqOyc6CggIAUEoORgkRQ89TDUIHxomTREfUBIyTSIVDgwKTiE6OFAsHAFQIDgrUBMuRR8qThVSLUwOJywOJk1OPSkOASgoJiscRD0OAS8MDDMuMEsoTT8tDCRLTDsqDAFPUVEsKzVJHx1PEA4BQUsrHx5QJg4TMgwMD1AwRiQpUDElPSs8DgwMMy4wSyQ1SBMqQitBDgwMCAgBF05EGj4eBgQBDCRON0xAAUJPTlENQzsaJkcRThhPCiE6T084Dg40KU4fRxAMCgoGBAIBMnBhY2thZ2U6Y29tcGlsZXIvc3JjL2tlcm5lbC9uYXRpdmVfYmFzaWNfZGF0YS5kYXJ0QXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2tlcm5lbC9ub19zdWNoX21ldGhvZF9yZXNvbHZlci5kYXJ0iVMvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0MmpzLmtlcm5lbC5lbGVtZW50X21hcDsKCmNsYXNzIEtlcm5lbE5vU3VjaE1ldGhvZFJlc29sdmVyIGltcGxlbWVudHMgTm9TdWNoTWV0aG9kUmVzb2x2ZXIgewogIGZpbmFsIEtlcm5lbFRvRWxlbWVudE1hcEltcGwgZWxlbWVudE1hcDsKCiAgS2VybmVsTm9TdWNoTWV0aG9kUmVzb2x2ZXIodGhpcy5lbGVtZW50TWFwKTsKCiAgRWxlbWVudEVudmlyb25tZW50IGdldCBfZWxlbWVudEVudmlyb25tZW50ID0+IGVsZW1lbnRNYXAuZWxlbWVudEVudmlyb25tZW50OwoKICBDb21tb25FbGVtZW50cyBnZXQgX2NvbW1vbkVsZW1lbnRzID0+IGVsZW1lbnRNYXAuY29tbW9uRWxlbWVudHM7CgogIEBvdmVycmlkZQogIGJvb2wgaGFzRm9yd2FyZGluZ1N5bnRheChLRnVuY3Rpb24gbWV0aG9kKSB7CiAgICBpci5Qcm9jZWR1cmUgbm9kZSA9IGVsZW1lbnRNYXAuX2xvb2t1cFByb2NlZHVyZShtZXRob2QpOwogICAgaWYgKG5vZGUuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMuaXNFbXB0eSkgcmV0dXJuIGZhbHNlOwogICAgaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBmaXJzdFBhcmFtZXRlciA9CiAgICAgICAgbm9kZS5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5maXJzdDsKICAgIGlyLlN0YXRlbWVudCBib2R5ID0gbm9kZS5mdW5jdGlvbi5ib2R5OwogICAgaXIuRXhwcmVzc2lvbiBleHByOwogICAgaWYgKGJvZHkgaXMgaXIuQmxvY2sgJiYgYm9keS5zdGF0ZW1lbnRzLmlzTm90RW1wdHkpIHsKICAgICAgaXIuQmxvY2sgYmxvY2sgPSBib2R5OwogICAgICBib2R5ID0gYmxvY2suc3RhdGVtZW50cy5maXJzdDsKICAgIH0KICAgIGlmIChib2R5IGlzIGlyLlJldHVyblN0YXRlbWVudCkgewogICAgICBleHByID0gYm9keS5leHByZXNzaW9uOwogICAgfQogICAgaWYgKGV4cHIgaXMgaXIuQXNFeHByZXNzaW9uICYmCiAgICAgICAgZWxlbWVudE1hcC5nZXREYXJ0VHlwZShleHByLnR5cGUpID09IF9jb21tb25FbGVtZW50cy5keW5hbWljVHlwZSkgewogICAgICBpci5Bc0V4cHJlc3Npb24gYXNFeHByZXNzaW9uID0gZXhwcjsKICAgICAgZXhwciA9IGFzRXhwcmVzc2lvbi5vcGVyYW5kOwogICAgfQogICAgaWYgKGV4cHIgaXMgaXIuU3VwZXJNZXRob2RJbnZvY2F0aW9uICYmCiAgICAgICAgZXhwci5uYW1lLm5hbWUgPT0gSWRlbnRpZmllcnMubm9TdWNoTWV0aG9kXykgewogICAgICBpci5Bcmd1bWVudHMgYXJndW1lbnRzID0gZXhwci5hcmd1bWVudHM7CiAgICAgIGlmIChhcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggPT0gMSAmJgogICAgICAgICAgYXJndW1lbnRzLm5hbWVkLmlzRW1wdHkgJiYKICAgICAgICAgIGFyZ3VtZW50cy5wb3NpdGlvbmFsLmZpcnN0IGlzIGlyLlZhcmlhYmxlR2V0KSB7CiAgICAgICAgaXIuVmFyaWFibGVHZXQgZ2V0ID0gYXJndW1lbnRzLnBvc2l0aW9uYWwuZmlyc3Q7CiAgICAgICAgcmV0dXJuIGdldC52YXJpYWJsZSA9PSBmaXJzdFBhcmFtZXRlcjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNUaHJvd2luZ1N5bnRheChLRnVuY3Rpb24gbWV0aG9kKSB7CiAgICBpci5Qcm9jZWR1cmUgbm9kZSA9IGVsZW1lbnRNYXAuX2xvb2t1cFByb2NlZHVyZShtZXRob2QpOwogICAgaXIuU3RhdGVtZW50IGJvZHkgPSBub2RlLmZ1bmN0aW9uLmJvZHk7CiAgICBpZiAoYm9keSBpcyBpci5CbG9jayAmJiBib2R5LnN0YXRlbWVudHMuaXNOb3RFbXB0eSkgewogICAgICBpci5CbG9jayBibG9jayA9IGJvZHk7CiAgICAgIGJvZHkgPSBibG9jay5zdGF0ZW1lbnRzLmZpcnN0OwogICAgfQogICAgaXIuRXhwcmVzc2lvbiBleHByOwogICAgaWYgKGJvZHkgaXMgaXIuUmV0dXJuU3RhdGVtZW50KSB7CiAgICAgIGV4cHIgPSBib2R5LmV4cHJlc3Npb247CiAgICB9IGVsc2UgaWYgKGJvZHkgaXMgaXIuRXhwcmVzc2lvblN0YXRlbWVudCkgewogICAgICBleHByID0gYm9keS5leHByZXNzaW9uOwogICAgfQogICAgcmV0dXJuIGV4cHIgaXMgaXIuVGhyb3c7CiAgfQoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXRTdXBlck5vU3VjaE1ldGhvZChGdW5jdGlvbkVudGl0eSBtZXRob2QpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLmdldFN1cGVyTm9TdWNoTWV0aG9kKG1ldGhvZC5lbmNsb3NpbmdDbGFzcyk7CiAgfQp9CkgATk48ASQBQysBLwFPAUMBDC89QiwyLBg6HSUGJh4GI0wrIwYsNy8uJTo5LwgGEgQBDC09LDodJQYYJh4xHgYdBAEMP0MEAgE4cGFja2FnZTpjb21waWxlci9zcmMva2VybmVsL25vX3N1Y2hfbWV0aG9kX3Jlc29sdmVyLmRhcnQ7c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMva2VybmVsL2Zyb250X2VuZF9hZGFwdGVyLmRhcnSPGi8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gSGVscGVyIGNsYXNzZXMgYW5kIG1ldGhvZHMgdG8gYWRhcHQgYmV0d2VlbiBgcGFja2FnZTpjb21waWxlcmAgYW5kCi8vLyBgcGFja2FnZTpmcm9udF9lbmRgIEFQSXMuCmxpYnJhcnkgY29tcGlsZXIua2VybmVsLmZyb250X2VuZF9hZGFwdGVyOwoKaW1wb3J0ICdkYXJ0OmFzeW5jJzsKCmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9kYXJ0MmpzLmRhcnQnIGFzIGZlOwoKaW1wb3J0ICcuLi8uLi9jb21waWxlcl9uZXcuZGFydCcgYXMgYXBpOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vaW8vc291cmNlX2ZpbGUuZGFydCc7CgovLy8gQSBmcm9udC1lbmRzJ3MgW0ZpbGVTeXN0ZW1dIHRoYXQgdXNlcyBkYXJ0MmpzJ3MgW2FwaS5Db21waWxlcklucHV0XS4KY2xhc3MgQ29tcGlsZXJGaWxlU3lzdGVtIGltcGxlbWVudHMgZmUuRmlsZVN5c3RlbSB7CiAgZmluYWwgYXBpLkNvbXBpbGVySW5wdXQgaW5wdXRQcm92aWRlcjsKCiAgQ29tcGlsZXJGaWxlU3lzdGVtKHRoaXMuaW5wdXRQcm92aWRlcik7CgogIEBvdmVycmlkZQogIGZlLkZpbGVTeXN0ZW1FbnRpdHkgZW50aXR5Rm9yVXJpKFVyaSB1cmkpIHsKICAgIGlmICh1cmkuc2NoZW1lID09ICdkYXRhJykgewogICAgICByZXR1cm4gbmV3IGZlLkRhdGFGaWxlU3lzdGVtRW50aXR5KFVyaS5iYXNlLnJlc29sdmVVcmkodXJpKSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IF9Db21waWxlckZpbGVTeXN0ZW1FbnRpdHkodXJpLCB0aGlzKTsKICAgIH0KICB9Cn0KCmNsYXNzIF9Db21waWxlckZpbGVTeXN0ZW1FbnRpdHkgaW1wbGVtZW50cyBmZS5GaWxlU3lzdGVtRW50aXR5IHsKICBAb3ZlcnJpZGUKICBmaW5hbCBVcmkgdXJpOwogIGZpbmFsIENvbXBpbGVyRmlsZVN5c3RlbSBmczsKCiAgX0NvbXBpbGVyRmlsZVN5c3RlbUVudGl0eSh0aGlzLnVyaSwgdGhpcy5mcyk7CgogIEBvdmVycmlkZQogIEZ1dHVyZTxTdHJpbmc+IHJlYWRBc1N0cmluZygpIGFzeW5jIHsKICAgIGFwaS5JbnB1dCBpbnB1dDsKICAgIHRyeSB7CiAgICAgIGlucHV0ID0gYXdhaXQgZnMuaW5wdXRQcm92aWRlcgogICAgICAgICAgLnJlYWRGcm9tVXJpKHVyaSwgaW5wdXRLaW5kOiBhcGkuSW5wdXRLaW5kLlVURjgpOwogICAgfSBjYXRjaCAoZSkgewogICAgICB0aHJvdyBuZXcgZmUuRmlsZVN5c3RlbUV4Y2VwdGlvbih1cmksICckZScpOwogICAgfQogICAgaWYgKGlucHV0ID09IG51bGwpIHRocm93IG5ldyBmZS5GaWxlU3lzdGVtRXhjZXB0aW9uKHVyaSwgIkZpbGUgbm90IGZvdW5kIik7CiAgICAvLyBUT0RPKHNpZ211bmQpOiB0ZWNobmljYWxseSBzb21lb25lIGNvdWxkIHByb3ZpZGUgZGFydDJqcyB3aXRoIGFuIGlucHV0CiAgICAvLyB0aGF0IGlzIG5vdCBhIFNvdXJjZUZpbGUuIE5vdGUgdGhhdCB0aGlzIGFzc3VtcHRpb24gaXMgYWxzbyBkb25lIGluIHRoZQogICAgLy8gKG5vbi1rZXJuZWwpIFNjcmlwdExvYWRlci4KICAgIFNvdXJjZUZpbGUgZmlsZSA9IGlucHV0IGFzIFNvdXJjZUZpbGU7CiAgICByZXR1cm4gZmlsZS5zbG93VGV4dCgpOwogIH0KCiAgQG92ZXJyaWRlCiAgRnV0dXJlPExpc3Q8aW50Pj4gcmVhZEFzQnl0ZXMoKSBhc3luYyB7CiAgICBhcGkuSW5wdXQgaW5wdXQ7CiAgICB0cnkgewogICAgICBpbnB1dCA9IGF3YWl0IGZzLmlucHV0UHJvdmlkZXIKICAgICAgICAgIC5yZWFkRnJvbVVyaSh1cmksIGlucHV0S2luZDogYXBpLklucHV0S2luZC5iaW5hcnkpOwogICAgfSBjYXRjaCAoZSkgewogICAgICB0aHJvdyBuZXcgZmUuRmlsZVN5c3RlbUV4Y2VwdGlvbih1cmksICckZScpOwogICAgfQogICAgaWYgKGlucHV0ID09IG51bGwpIHRocm93IG5ldyBmZS5GaWxlU3lzdGVtRXhjZXB0aW9uKHVyaSwgIkZpbGUgbm90IGZvdW5kIik7CiAgICByZXR1cm4gaW5wdXQuZGF0YTsKICB9CgogIEBvdmVycmlkZQogIEZ1dHVyZTxib29sPiBleGlzdHMoKSBhc3luYyB7CiAgICB0cnkgewogICAgICBhcGkuSW5wdXQgaW5wdXQgPSBhd2FpdCBmcy5pbnB1dFByb3ZpZGVyCiAgICAgICAgICAucmVhZEZyb21VcmkodXJpLCBpbnB1dEtpbmQ6IGFwaS5JbnB1dEtpbmQuYmluYXJ5KTsKICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGw7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCi8vLyBSZXBvcnQgYSBbbWVzc2FnZV0gcmVjZWl2ZWQgZnJvbSB0aGUgZnJvbnQtZW5kLCB1c2luZyBkYXJ0MmpzJ3MKLy8vIFtEaWFnbm9zdGljUmVwb3J0ZXJdLgp2b2lkIHJlcG9ydEZyb250RW5kTWVzc2FnZSgKICAgIERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlciwgZmUuRGlhZ25vc3RpY01lc3NhZ2UgbWVzc2FnZSkgewogIFNwYW5uYWJsZSBfZ2V0U3Bhbm5hYmxlKGZlLkRpYWdub3N0aWNNZXNzYWdlIG1lc3NhZ2UpIHsKICAgIFVyaSB1cmkgPSBmZS5nZXRNZXNzYWdlVXJpKG1lc3NhZ2UpOwogICAgaW50IG9mZnNldCA9IGZlLmdldE1lc3NhZ2VDaGFyT2Zmc2V0KG1lc3NhZ2UpOwogICAgaW50IGxlbmd0aCA9IGZlLmdldE1lc3NhZ2VMZW5ndGgobWVzc2FnZSk7CiAgICBpZiAodXJpICE9IG51bGwgJiYgb2Zmc2V0ICE9IC0xKSB7CiAgICAgIHJldHVybiBuZXcgU291cmNlU3Bhbih1cmksIG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBOT19MT0NBVElPTl9TUEFOTkFCTEU7CiAgICB9CiAgfQoKICBEaWFnbm9zdGljTWVzc2FnZSBfY29udmVydE1lc3NhZ2UoZmUuRGlhZ25vc3RpY01lc3NhZ2UgbWVzc2FnZSkgewogICAgU3Bhbm5hYmxlIHNwYW4gPSBfZ2V0U3Bhbm5hYmxlKG1lc3NhZ2UpOwogICAgU3RyaW5nIHRleHQgPSBmZS5nZXRNZXNzYWdlSGVhZGVyVGV4dChtZXNzYWdlKTsKICAgIHJldHVybiByZXBvcnRlci5jcmVhdGVNZXNzYWdlKHNwYW4sIE1lc3NhZ2VLaW5kLkdFTkVSSUMsIHsndGV4dCc6IHRleHR9KTsKICB9CgogIExpc3Q8ZmUuRGlhZ25vc3RpY01lc3NhZ2U+IHJlbGF0ZWRJbmZvcm1hdGlvbiA9CiAgICAgIGZlLmdldE1lc3NhZ2VSZWxhdGVkSW5mb3JtYXRpb24obWVzc2FnZSk7CiAgRGlhZ25vc3RpY01lc3NhZ2UgbWFpbk1lc3NhZ2UgPSBfY29udmVydE1lc3NhZ2UobWVzc2FnZSk7CiAgTGlzdDxEaWFnbm9zdGljTWVzc2FnZT4gaW5mb3MgPSByZWxhdGVkSW5mb3JtYXRpb24gIT0gbnVsbAogICAgICA/IHJlbGF0ZWRJbmZvcm1hdGlvbi5tYXAoX2NvbnZlcnRNZXNzYWdlKS50b0xpc3QoKQogICAgICA6IGNvbnN0IFtdOwogIHN3aXRjaCAobWVzc2FnZS5zZXZlcml0eSkgewogICAgY2FzZSBmZS5TZXZlcml0eS5pbnRlcm5hbFByb2JsZW06CiAgICAgIHRocm93IG1haW5NZXNzYWdlLm1lc3NhZ2UuY29tcHV0ZU1lc3NhZ2UoKTsKICAgIGNhc2UgZmUuU2V2ZXJpdHkuZXJyb3I6CiAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yKG1haW5NZXNzYWdlLCBpbmZvcyk7CiAgICAgIGJyZWFrOwogICAgY2FzZSBmZS5TZXZlcml0eS53YXJuaW5nOgogICAgICByZXBvcnRlci5yZXBvcnRXYXJuaW5nKG1haW5NZXNzYWdlLCBpbmZvcyk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdGhyb3cgbmV3IFVuaW1wbGVtZW50ZWRFcnJvcigndW5oYW5kbGVkIHNldmVyaXR5ICR7bWVzc2FnZS5zZXZlcml0eX0nKTsKICB9Cn0KfABOTjwBRx4rARUBQAEpARkhAUk0KQEqAQwuIEQNNwYEAgFBDBEfATABDCgVCiU8EjMGUE5PIiscBAEMKhUKJT4SMwZQFwQBDCAKLz4cEhQGBAIBRBocQTopMy8nOw0kBgQBRC00TgQBMjA8PTkSHiYyHDANHjINDU4EAgEycGFja2FnZTpjb21waWxlci9zcmMva2VybmVsL2Zyb250X2VuZF9hZGFwdGVyLmRhcnQqc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvY2xvc3VyZS5kYXJ0uPkvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAnY29tbW9uLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJ2pzX21vZGVsL2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnanNfbW9kZWwvZWxlbWVudF9tYXAuZGFydCc7CmltcG9ydCAnc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwoKLy8vIENsYXNzIHRoYXQgcHJvdmlkZXMgaW5mb3JtYXRpb24gZm9yIGhvdyBjbG9zdXJlcyBhcmUgcmV3cml0dGVuL3JlcHJlc2VudGVkCi8vLyB0byBwcmVzZXJ2ZSBEYXJ0IHNlbWFudGljcyB3aGVuIGNvbXBpbGVkIHRvIEphdmFTY3JpcHQuIEdpdmVuIGEgcGFydGljdWxhcgovLy8gbm9kZSB0byBsb29rIHVwLCBpdCByZXR1cm5zIGEgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uCi8vLyBvZiBob3cgY2xvc3VyZSBjb252ZXJzaW9uIGlzIGltcGxlbWVudGVkLiBUIGlzIGFuIGlyLk5vZGUgb3IgTm9kZS4KYWJzdHJhY3QgY2xhc3MgQ2xvc3VyZURhdGEgewogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbQ2xvc3VyZURhdGFdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgQ2xvc3VyZURhdGEucmVhZEZyb21EYXRhU291cmNlKAogICAgICAgICAgSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgRGF0YVNvdXJjZSBzb3VyY2UpID0KICAgICAgQ2xvc3VyZURhdGFJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZTsKCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbQ2xvc3VyZURhdGFdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKTsKCiAgLy8vIExvb2sgdXAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZhcmlhYmxlcyB0aGF0IGhhdmUgYmVlbiBtdXRhdGVkIGFuZCBhcmUKICAvLy8gdXNlZCBpbnNpZGUgdGhlIHNjb3BlIG9mIFtub2RlXS4KICBTY29wZUluZm8gZ2V0U2NvcGVJbmZvKE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICBDbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvIGdldENsb3N1cmVJbmZvKGlyLkxvY2FsRnVuY3Rpb24gbG9jYWxGdW5jdGlvbik7CgogIC8vLyBMb29rIHVwIGluZm9ybWF0aW9uIGFib3V0IGEgbG9vcCwgaW4gY2FzZSBhbnkgdmFyaWFibGVzIGl0IGRlY2xhcmVzIG5lZWQKICAvLy8gdG8gYmUgYm94ZWQvc25hcHNob3R0ZWQuCiAgQ2FwdHVyZWRMb29wU2NvcGUgZ2V0Q2FwdHVyZWRMb29wU2NvcGUoaXIuTm9kZSBsb29wTm9kZSk7CgogIC8vLyBBY2Nlc3NvciB0byB0aGUgaW5mb3JtYXRpb24gYWJvdXQgc2NvcGVzIHRoYXQgY2xvc3VyZXMgY2FwdHVyZS4gVXNlZCBieQogIC8vLyB0aGUgU1NBIGJ1aWxkZXIuCiAgQ2FwdHVyZWRTY29wZSBnZXRDYXB0dXJlZFNjb3BlKE1lbWJlckVudGl0eSBlbnRpdHkpOwp9CgovLy8gRW51bSB1c2VkIGZvciBpZGVudGlmeWluZyBbU2NvcGVJbmZvXSBzdWJjbGFzc2VzIGluIHNlcmlhbGl6YXRpb24uCmVudW0gU2NvcGVJbmZvS2luZCB7CiAgc2NvcGVJbmZvLAogIGNhcHR1cmVkU2NvcGUsCiAgY2FwdHVyZWRMb29wU2NvcGUsCiAgY2xvc3VyZVJlcHJlc2VudGF0aW9uSW5mbywKfQoKLy8vIENsYXNzIHRoYXQgcmVwcmVzZW50cyBvbmUgbGV2ZWwgb2Ygc2NvcGluZyBpbmZvcm1hdGlvbiwgd2hldGhlciB0aGlzIHNjb3BlCi8vLyBpcyBhIGNsb3N1cmUgb3Igbm90LiBUaGlzIGlzIHNwZWNpZmljYWxseSB1c2VkIHRvIHN0b3JlIGluZm9ybWF0aW9uCi8vLyBhYm91dCB0aGUgdXNhZ2Ugb2YgdmFyaWFibGVzIGluIHRyeSBvciBzeW5jIGJsb2NrcywgYmVjYXVzZSB0aGV5IG5lZWQgdG8gYmUKLy8vIGJveGVkLgovLy8KLy8vIFZhcmlhYmxlcyB0aGF0IGFyZSB1c2VkIGluIGEgdHJ5IG11c3QgYmUgdHJlYXRlZCBhcyBib3hlZCBiZWNhdXNlIHRoZQovLy8gY29udHJvbCBmbG93IGNhbiBiZSBub24tbGluZWFyLiBBbHNvIHBhcmFtZXRlcnMgdG8gYSBgc3luYypgIGdlbmVyYXRvciBtdXN0Ci8vLyBiZSBib3hlZCwgYmVjYXVzZSBvZiB0aGUgd2F5IHdlIHJld3JpdGUgc3luYyogZnVuY3Rpb25zLiBTZWUgYWxzbyBjb21tZW50cwovLy8gaW4gW0Nsb3N1cmVDbGFzc01hcC51c2VMb2NhbF0uCmNsYXNzIFNjb3BlSW5mbyB7CiAgY29uc3QgU2NvcGVJbmZvKCk7CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbU2NvcGVJbmZvXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IFNjb3BlSW5mby5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIFNjb3BlSW5mb0tpbmQga2luZCA9IHNvdXJjZS5yZWFkRW51bShTY29wZUluZm9LaW5kLnZhbHVlcyk7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBTY29wZUluZm9LaW5kLnNjb3BlSW5mbzoKICAgICAgICByZXR1cm4gbmV3IEpzU2NvcGVJbmZvLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBjYXNlIFNjb3BlSW5mb0tpbmQuY2FwdHVyZWRTY29wZToKICAgICAgICByZXR1cm4gbmV3IEpzQ2FwdHVyZWRTY29wZS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBTY29wZUluZm9LaW5kLmNhcHR1cmVkTG9vcFNjb3BlOgogICAgICAgIHJldHVybiBuZXcgSnNDYXB0dXJlZExvb3BTY29wZS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBTY29wZUluZm9LaW5kLmNsb3N1cmVSZXByZXNlbnRhdGlvbkluZm86CiAgICAgICAgcmV0dXJuIG5ldyBLZXJuZWxDbG9zdXJlQ2xhc3NJbmZvLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ1VuZXhwZWN0ZWQgU2NvcGVJbmZvS2luZCAka2luZCcpOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbU2NvcGVJbmZvXSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJyR7cnVudGltZVR5cGV9LndyaXRlVG9EYXRhU2luaycpOwogIH0KCiAgLy8vIENvbnZlbmllbmNlIHJlZmVyZW5jZSBwb2ludGVyIHRvIHRoZSBlbGVtZW50IHJlcHJlc2VudGluZyBgdGhpc2AuCiAgLy8vIElmIHRoaXMgc2NvcGUgaXMgbm90IGluIGFuIGluc3RhbmNlIG1lbWJlciwgaXQgd2lsbCBiZSBudWxsLgogIExvY2FsIGdldCB0aGlzTG9jYWwgPT4gbnVsbDsKCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIFt2YXJpYWJsZV0gaXMgdXNlZCBpbnNpZGUgYSBgdHJ5YCBibG9jayBvciBhIGBzeW5jKmAKICAvLy8gZ2VuZXJhdG9yICh0aGlzIGlzIGltcG9ydGFudCB0byBrbm93IGJlY2F1c2UgYm94aW5nL3JlZGlyZWN0aW9uIG5lZWRzIHRvCiAgLy8vIGhhcHBlbiBmb3IgdGhvc2UgbG9jYWwgdmFyaWFibGVzKS4KICAvLy8KICAvLy8gVmFyaWFibGVzIHRoYXQgYXJlIHVzZWQgaW4gYSB0cnkgbXVzdCBiZSB0cmVhdGVkIGFzIGJveGVkIGJlY2F1c2UgdGhlCiAgLy8vIGNvbnRyb2wgZmxvdyBjYW4gYmUgbm9uLWxpbmVhci4KICAvLy8KICAvLy8gQWxzbyBwYXJhbWV0ZXJzIHRvIGEgYHN5bmMqYCBnZW5lcmF0b3IgbXVzdCBiZSBib3hlZCwgYmVjYXVzZSBvZiB0aGUgd2F5CiAgLy8vIHdlIHJld3JpdGUgc3luYyogZnVuY3Rpb25zLiBTZWUgYWxzbyBjb21tZW50cyBpbgogIC8vLyBbQ2xvc3VyZUNsYXNzTWFwLnVzZUxvY2FsXS4KICBib29sIGxvY2FsSXNVc2VkSW5UcnlPclN5bmMoTG9jYWwgdmFyaWFibGUpID0+IGZhbHNlOwoKICAvLy8gTG9vcCB0aHJvdWdoIGVhY2ggdmFyaWFibGUgdGhhdCBoYXMgYmVlbiBkZWZpbmVkIGluIHRoaXMgc2NvcGUsIG1vZGlmaWVkCiAgLy8vIGFueXdoZXJlICh0aGlzIHNjb3BlIG9yIGFub3RoZXIgc2NvcGUpIGFuZCB1c2VkIGluIGFub3RoZXIgc2NvcGUuIEJlY2F1c2UKICAvLy8gaXQgaXMgdXNlZCBpbiBhbm90aGVyIHNjb3BlLCB0aGVzZSB2YXJpYWJsZXMgbmVlZCB0byBiZSAiYm94ZWQiLCBjcmVhdGluZwogIC8vLyBhIHRoaW4gd3JhcHBlciBhcm91bmQgYWNjZXNzZXMgdG8gdGhlc2UgdmFyaWFibGVzIHNvIHRoYXQgYWNjZXNzZXMgZ2V0CiAgLy8vIHRoZSBjb3JyZWN0IHVwZGF0ZWQgdmFsdWUuIFRoZSB2YXJpYWJsZXMgaW4gbG9jYWxzVXNlZEluVHJ5T3JTeW5jIG1heQogIC8vLyBiZSBpbmNsdWRlZCBpbiB0aGlzIHNldC4KICAvLy8KICAvLy8gSW4gdGhlIGNhc2Ugb2YgbG9vcHMsIHRoaXMgaXMgdGhlIHNldCBvZiBpdGVyYXRpb24gdmFyaWFibGVzIChvciBhbnkKICAvLy8gdmFyaWFibGVzIGRlY2xhcmVkIGluIHRoZSBmb3IgbG9vcCBleHByZXNzaW9uIChgZm9yICguLi5oZXJlLi4uKWApIHRoYXQKICAvLy8gbmVlZCB0byBiZSBib3hlZCB0byBzbmFwc2hvdCB0aGVpciB2YWx1ZS4KICB2b2lkIGZvckVhY2hCb3hlZFZhcmlhYmxlKGYoTG9jYWwgbG9jYWwsIEZpZWxkRW50aXR5IGZpZWxkKSkge30KCiAgLy8vIFRydWUgaWYgW3ZhcmlhYmxlXSBoYXMgYmVlbiBtdXRhdGVkIGFuZCBpcyBhbHNvIHVzZWQgaW4gYW5vdGhlciBzY29wZS4KICBib29sIGlzQm94ZWRWYXJpYWJsZShMb2NhbCB2YXJpYWJsZSkgPT4gZmFsc2U7Cn0KCi8vLyBDbGFzcyByZXByZXNlbnRpbmcgdGhlIHVzYWdlIG9mIGEgc2NvcGUgdGhhdCBoYXMgYmVlbiBjYXB0dXJlZCBpbiB0aGUKLy8vIGNvbnRleHQgb2YgYSBjbG9zdXJlLgpjbGFzcyBDYXB0dXJlZFNjb3BlIGV4dGVuZHMgU2NvcGVJbmZvIHsKICBjb25zdCBDYXB0dXJlZFNjb3BlKCk7CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbQ2FwdHVyZWRTY29wZV0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBDYXB0dXJlZFNjb3BlLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgU2NvcGVJbmZvS2luZCBraW5kID0gc291cmNlLnJlYWRFbnVtKFNjb3BlSW5mb0tpbmQudmFsdWVzKTsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIFNjb3BlSW5mb0tpbmQuc2NvcGVJbmZvOgogICAgICBjYXNlIFNjb3BlSW5mb0tpbmQuY2xvc3VyZVJlcHJlc2VudGF0aW9uSW5mbzoKICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignVW5leHBlY3RlZCBDYXB0dXJlZFNjb3BlIGtpbmQgJGtpbmQnKTsKICAgICAgY2FzZSBTY29wZUluZm9LaW5kLmNhcHR1cmVkU2NvcGU6CiAgICAgICAgcmV0dXJuIG5ldyBKc0NhcHR1cmVkU2NvcGUucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgU2NvcGVJbmZvS2luZC5jYXB0dXJlZExvb3BTY29wZToKICAgICAgICByZXR1cm4gbmV3IEpzQ2FwdHVyZWRMb29wU2NvcGUucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignVW5leHBlY3RlZCBTY29wZUluZm9LaW5kICRraW5kJyk7CiAgfQoKICAvLy8gSWYgdHJ1ZSwgdGhpcyBjbG9zdXJlIGFjY2Vzc2VzIGEgdmFyaWFibGUgdGhhdCB3YXMgZGVmaW5lZCBpbiBhbiBvdXRzaWRlCiAgLy8vIHNjb3BlIGFuZCB0aGlzIHZhcmlhYmxlIGdldHMgbW9kaWZpZWQgYXQgc29tZSBwb2ludCAoc29tZXRpbWVzIHdlIHNheSB0aGF0CiAgLy8vIHZhcmlhYmxlIGhhcyBiZWVuICJjYXB0dXJlZCIpLiBJbiB0aGlzIHNpdHVhdGlvbiwgYWNjZXNzIHRvIHRoaXMgdmFyaWFibGUKICAvLy8gaXMgY29udHJvbGxlZCB2aWEgYSB3cmFwcGVyIChib3gpIHNvIHRoYXQgdXBkYXRlcyB0byB0aGlzIHZhcmlhYmxlCiAgLy8vIGFyZSBkb25lIGluIGEgd2F5IHRoYXQgaXMgaW4gbGluZSB3aXRoIERhcnQncyBjbG9zdXJlIHJ1bGVzLgogIGJvb2wgZ2V0IHJlcXVpcmVzQ29udGV4dEJveCA9PiBmYWxzZTsKCiAgLy8vIEFjY2Vzc29yIHRvIHRoZSBsb2NhbCBlbnZpcm9ubWVudCBpbiB3aGljaCBhIHBhcnRpY3VsYXIgY2xvc3VyZSBub2RlIGlzCiAgLy8vIGV4ZWN1dGVkLiBUaGlzIHdpbGwgZW5jYXBzdWxhdGUgdGhlIHZhbHVlIG9mIGFueSB2YXJpYWJsZXMgdGhhdCBoYXZlIGJlZW4KICAvLy8gc2NvcGVkIGludG8gdGhpcyBjb250ZXh0IGZyb20gb3V0c2lkZS4gVGhpcyBpcyBhbiBhY2Nlc3NvciB0byB0aGUKICAvLy8gY29udGV4dEJveCB0aGF0IFtyZXF1aXJlc0NvbnRleHRCb3hdIGlzIHRlc3RpbmcgaXMgcmVxdWlyZWQuCiAgTG9jYWwgZ2V0IGNvbnRleHQgPT4gbnVsbDsKfQoKLy8vIENsYXNzIHRoYXQgZGVzY3JpYmVzIHRoZSBhY3R1YWwgbWVjaGFuaWNzIG9mIGhvdyB2YWx1ZXMgb2YgdmFyaWFibGVzCi8vLyBpbnN0YW50aWF0ZWQgaW4gYSBsb29wIGFyZSBjYXB0dXJlZCBpbnNpZGUgY2xvc3VyZXMgaW4gdGhlIGxvb3AgYm9keS4KLy8vIFVubGlrZSBKUywgdGhlIHZhbHVlIG9mIGEgZGVjbGFyZWQgbG9vcCBpdGVyYXRpb24gdmFyaWFibGUgaW4gYW55IGNsb3N1cmUKLy8vIGlzIGNhcHR1cmVkL3NuYXBzaG90dGVkIGluc2lkZSBhdCBlYWNoIGl0ZXJhdGlvbiBwb2ludCwgYXMgaWYgd2UgY3JlYXRlZCBhCi8vLyBuZXcgbG9jYWwgdmFyaWFibGUgZm9yIHRoYXQgdmFsdWUgaW5zaWRlIHRoZSBsb29wLiBGb3IgZXhhbXBsZSwgZm9yIHRoZQovLy8gZm9sbG93aW5nIGxvb3A6Ci8vLwovLy8gICAgIHZhciBsc3QgPSBbXTsKLy8vICAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykgbHN0LmFkZCgoKT0+aSk7Ci8vLyAgICAgdmFyIHJlc3VsdCA9IGxpc3QubWFwKChmKSA9PiBmKCkpLnRvTGlzdCgpOwovLy8KLy8vIGByZXN1bHRgIHdpbGwgYmUgWzAsIDEsIDIsIDMsIDRdLCB3aGVyZWFzIHdlcmUgdGhpcyBKUyBjb2RlCi8vLyB0aGUgcmVzdWx0IHdvdWxkIGJlIFs1LCA1LCA1LCA1LCA1XS4gQmVjYXVzZSBvZiB0aGlzIGRpZmZlcmVuY2Ugd2UgbmVlZCB0bwovLy8gY3JlYXRlIGEgY2xvc3VyZSBmb3IgdGhlc2Ugc29ydHMgb2YgbG9vcHMgdG8gY2FwdHVyZSB0aGUgdmFyaWFibGUncyB2YWx1ZSBhdAovLy8gZWFjaCBpdGVyYXRpb24sIGJ5IGJveGluZyB0aGUgaXRlcmF0aW9uIHZhcmlhYmxlW3NdLgpjbGFzcyBDYXB0dXJlZExvb3BTY29wZSBleHRlbmRzIENhcHR1cmVkU2NvcGUgewogIGNvbnN0IENhcHR1cmVkTG9vcFNjb3BlKCk7CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbQ2FwdHVyZWRMb29wU2NvcGVdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgQ2FwdHVyZWRMb29wU2NvcGUucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBTY29wZUluZm9LaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oU2NvcGVJbmZvS2luZC52YWx1ZXMpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgU2NvcGVJbmZvS2luZC5zY29wZUluZm86CiAgICAgIGNhc2UgU2NvcGVJbmZvS2luZC5jbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvOgogICAgICBjYXNlIFNjb3BlSW5mb0tpbmQuY2FwdHVyZWRTY29wZToKICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignVW5leHBlY3RlZCBDYXB0dXJlZExvb3BTY29wZSBraW5kICRraW5kJyk7CiAgICAgIGNhc2UgU2NvcGVJbmZvS2luZC5jYXB0dXJlZExvb3BTY29wZToKICAgICAgICByZXR1cm4gbmV3IEpzQ2FwdHVyZWRMb29wU2NvcGUucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignVW5leHBlY3RlZCBTY29wZUluZm9LaW5kICRraW5kJyk7CiAgfQoKICAvLy8gVHJ1ZSBpZiB0aGlzIGxvb3Agc2NvcGUgZGVjbGFyZXMgaW4gdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGxvb3AKICAvLy8gYGZvciAoPGhlcmU+Oy4uLjsuLi4pYCBhbnkgdmFyaWFibGVzIHRoYXQgbmVlZCB0byBiZSBib3hlZC4KICBib29sIGdldCBoYXNCb3hlZExvb3BWYXJpYWJsZXMgPT4gZmFsc2U7CgogIC8vLyBUaGUgc2V0IG9mIGl0ZXJhdGlvbiB2YXJpYWJsZXMgKG9yIHZhcmlhYmxlcyBkZWNsYXJlZCBpbiB0aGUgZm9yIGxvb3AKICAvLy8gZXhwcmVzc2lvbiAoYGZvciAoPGhlcmU+OyAuLi4gOyAuLi4pYCkgdGhhdCBuZWVkIHRvIGJlIGJveGVkIHRvIHNuYXBzaG90CiAgLy8vIHRoZWlyIHZhbHVlLiBUaGVzZSB2YXJpYWJsZXMgYXJlIGFsc28gaW5jbHVkZWQgaW4gdGhlIHNldCBvZgogIC8vLyBgZm9yRWFjaEJveGVkVmFyaWFibGVgIG1ldGhvZC4gVGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhlc2UgdHdvIHNldHMgaXMKICAvLy8gaW4gdGhpcyBleGFtcGxlOgogIC8vLwogIC8vLyAgICAgcnVuKGYpID0+IGYoKTsKICAvLy8gICAgIHZhciBhOwogIC8vLyAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKICAvLy8gICAgICAgdmFyIGIgPSAzOwogIC8vLyAgICAgICBhID0gKCkgPT4gYiA9IGk7CiAgLy8vICAgICB9CiAgLy8vCiAgLy8vIGBpYCB3b3VsZCBiZSBhIHBhcnQgb2YgdGhlIGJveGVkTG9vcFZhcmlhYmxlcyBBTkQgYm94ZWRWYXJpYWJsZXMsIGJ1dCBiCiAgLy8vIHdvdWxkIG9ubHkgYmUgYSBwYXJ0IG9mIGJveGVkVmFyaWFibGVzLgogIExpc3Q8TG9jYWw+IGdldCBib3hlZExvb3BWYXJpYWJsZXMgPT4gY29uc3QgPExvY2FsPltdOwp9CgovLy8gQ2xhc3MgdGhhdCBkZXNjcmliZXMgdGhlIGFjdHVhbCBtZWNoYW5pY3Mgb2YgaG93IHRoZSBjb252ZXJ0ZWQsIHJld3JpdHRlbgovLy8gY2xvc3VyZSBpcyBpbXBsZW1lbnRlZC4gRm9yIGV4YW1wbGUsIGZvciB0aGUgZm9sbG93aW5nIGNsb3N1cmUgKG5hbWVkIGZvbwovLy8gZm9yIGNvbnZlbmllbmNlKToKLy8vCi8vLyAgIHZhciBmb28gPSAoeCkgPT4geSArIHg7Ci8vLwovLy8gV2Ugd291bGQgcHJvZHVjZSB0aGUgZm9sbG93aW5nIGNsYXNzIHRvIGNvbnRyb2wgYWNjZXNzIHRvIHRoZXNlIHZhcmlhYmxlcyBpbgovLy8gdGhlIGZvbGxvd2luZyB3YXkgKG1vZHVsbyBuYW1pbmcgb2YgdmFyaWFibGVzLCBhc3N1bWluZyB0aGF0IHkgaXMgbW9kaWZpZWQKLy8vIGVsc2V3aGVyZSBpbiBpdHMgc2NvcGUpOgovLy8KLy8vICAgIGNsYXNzIEZvb0Nsb3N1cmUgewovLy8gICAgICAgaW50IHk7Ci8vLyAgICAgICBGb29DbG9zdXJlKHRoaXMueSk7Ci8vLyAgICAgICBjYWxsKHgpID0+IHRoaXMueSArIHg7Ci8vLyAgICB9Ci8vLwovLy8gIGFuZCB0aGVuIHRvIGV4ZWN1dGUgdGhpcyBjbG9zdXJlLCBmb3IgZXhhbXBsZToKLy8vCi8vLyAgICAgdmFyIGZvbyA9IG5ldyBGb29DbG9zdXJlKDEpOwovLy8gICAgIGZvby5jYWxsKDIpOwovLy8KLy8vIGlmIGB5YCBpcyBtb2RpZmllZCBlbHNld2hlcmUgd2l0aGluIGl0cyBzY29wZSwgYWNjZXNzZXMgdG8geSBhbnl3aGVyZSBpbiB0aGUKLy8vIGNvZGUgd2lsbCBiZSBjb250cm9sbGVkIHZpYSBhIGJveCBvYmplY3QuCi8vLwovLy8gQmVjYXVzZSBpbiB0aGVzZSBleGFtcGxlcyBgeWAgd2FzIGRlY2xhcmVkIGluIHNvbWUgb3RoZXIsIG91dGVyIHNjb3BlLCBidXQKLy8vIHVzZWQgaW4gdGhlIGlubmVyIHNjb3BlIG9mIHRoaXMgY2xvc3VyZSwgd2Ugc2F5IGB5YCBpcyBhICJjYXB0dXJlZCIKLy8vIHZhcmlhYmxlLgovLy8gVE9ETyhlZm9ydHVuYSk6IE1ha2UgaW50ZXJmYWNlIHNpbXBsZXIgaW4gc3Vic2VxdWVudCByZWZhY3RvcmluZ3MuCmNsYXNzIENsb3N1cmVSZXByZXNlbnRhdGlvbkluZm8gZXh0ZW5kcyBTY29wZUluZm8gewogIGNvbnN0IENsb3N1cmVSZXByZXNlbnRhdGlvbkluZm8oKTsKCiAgLy8vIERlc2VyaWFsaXplcyBhIFtDbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IENsb3N1cmVSZXByZXNlbnRhdGlvbkluZm8ucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBTY29wZUluZm9LaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oU2NvcGVJbmZvS2luZC52YWx1ZXMpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgU2NvcGVJbmZvS2luZC5zY29wZUluZm86CiAgICAgIGNhc2UgU2NvcGVJbmZvS2luZC5jYXB0dXJlZFNjb3BlOgogICAgICBjYXNlIFNjb3BlSW5mb0tpbmQuY2FwdHVyZWRMb29wU2NvcGU6CiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAgICdVbmV4cGVjdGVkIENsb3N1cmVSZXByZXNlbnRhdGlvbkluZm8ga2luZCAka2luZCcpOwogICAgICBjYXNlIFNjb3BlSW5mb0tpbmQuY2xvc3VyZVJlcHJlc2VudGF0aW9uSW5mbzoKICAgICAgICByZXR1cm4gbmV3IEtlcm5lbENsb3N1cmVDbGFzc0luZm8ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignVW5leHBlY3RlZCBTY29wZUluZm9LaW5kICRraW5kJyk7CiAgfQoKICAvLy8gVGhlIG9yaWdpbmFsIGxvY2FsIGZ1bmN0aW9uIGJlZm9yZSBhbnkgdHJhbnNsYXRpb24uCiAgLy8vCiAgLy8vIFdpbGwgYmUgbnVsbCBmb3IgbWV0aG9kcy4KICBMb2NhbCBnZXQgY2xvc3VyZUVudGl0eSA9PiBudWxsOwoKICAvLy8gVGhlIGVudGl0eSBmb3IgdGhlIGNsYXNzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSByZXdyaXR0ZW4gY2xvc3VyZSBpbiB0aGUKICAvLy8gZW1pdHRlZCBKYXZhU2NyaXB0LgogIC8vLwogIC8vLyBDbG9zdXJlcyBhcmUgcmV3cml0dGVuIGluIHRoZSBmb3JtIG9mIGNsYXNzZXMgdGhhdCBoYXZlIGZpZWxkcyB0byBjb250cm9sCiAgLy8vIHRoZSByZWRpcmVjdGlvbiBhbmQgZWRpdGluZyBvZiBjYXB0dXJlZCB2YXJpYWJsZXMuCiAgQ2xhc3NFbnRpdHkgZ2V0IGNsb3N1cmVDbGFzc0VudGl0eSA9PiBudWxsOwoKICAvLy8gVGhlIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyB0aGUgW2xvY2FsXSBmdW5jdGlvbiBhcyBhIGBjYWxsYCBtZXRob2Qgb24KICAvLy8gdGhlIGNsb3N1cmUgY2xhc3MuCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGNhbGxNZXRob2QgPT4gbnVsbDsKCiAgLy8vIFRoZSBzaWduYXR1cmUgbWV0aG9kIGZvciBbY2FsbE1ldGhvZF0gaWYgbmVlZGVkLgogIEZ1bmN0aW9uRW50aXR5IGdldCBzaWduYXR1cmVNZXRob2QgPT4gbnVsbDsKCiAgLy8vIExpc3Qgb2YgbG9jYWxzIHRoYXQgdGhpcyBjbG9zdXJlIGNsYXNzIGhhcyBjcmVhdGVkIGNvcnJlc3BvbmRpbmcgZmllbGQKICAvLy8gZW50aXRpZXMgZm9yLgogIEBkZXByZWNhdGVkCiAgTGlzdDxMb2NhbD4gZ2V0IGNyZWF0ZWRGaWVsZEVudGl0aWVzID0+IGNvbnN0IDxMb2NhbD5bXTsKCiAgLy8vIEFzIHNob3duIGluIHRoZSBleGFtcGxlIGluIHRoZSBjb21tZW50cyBhdCB0aGUgdG9wIG9mIHRoaXMgY2xhc3MsIHdlCiAgLy8vIGNyZWF0ZSBmaWVsZHMgaW4gdGhlIGNsb3N1cmUgY2xhc3MgZm9yIGVhY2ggY2FwdHVyZWQgdmFyaWFibGUuIFRoaXMgaXMgYW4KICAvLy8gYWNjZXNzb3IgdGhlIFtsb2NhbF0gZm9yIHdoaWNoIFtmaWVsZF0gd2FzIGNyZWF0ZWQuCiAgLy8vIFJldHVybnMgdGhlIFtsb2NhbF0gZm9yIHdoaWNoIFtmaWVsZF0gd2FzIGNyZWF0ZWQuCiAgTG9jYWwgZ2V0TG9jYWxGb3JGaWVsZChGaWVsZEVudGl0eSBmaWVsZCkgewogICAgZmFpbGVkQXQoZmllbGQsICJObyBsb2NhbCBmb3IgJGZpZWxkLiIpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvLy8gQ29udmVuaWVuY2UgcG9pbnRlciB0byB0aGUgZmllbGQgZW50aXR5IHJlcHJlc2VudGF0aW9uIGluIHRoZSBjbG9zdXJlCiAgLy8vIGNsYXNzIG9mIHRoZSBlbGVtZW50IHJlcHJlc2VudGluZyBgdGhpc2AuCiAgRmllbGRFbnRpdHkgZ2V0IHRoaXNGaWVsZEVudGl0eSA9PiBudWxsOwoKICAvLy8gTG9vcCB0aHJvdWdoIGVhY2ggdmFyaWFibGUgdGhhdCBoYXMgYmVlbiBib3hlZCBpbiB0aGlzIGNsb3N1cmUgY2xhc3MuIE9ubHkKICAvLy8gY2FwdHVyZWQgdmFyaWFibGVzIHRoYXQgYXJlIG11dGF0ZWQgbmVlZCB0byBiZSAiYm94ZWQiICh3aGljaCBiYXNpY2FsbHkKICAvLy8gcHV0cyBhIHRoaW4gbGF5ZXIgYmV0d2VlbiB1cGRhdGVzIGFuZCByZWFkcyB0byB0aGlzIHZhcmlhYmxlIHRvIGVuc3VyZQogIC8vLyB0aGF0IGV2ZXJ5IHBsYWNlIHRoYXQgYWNjZXNzZXMgaXQgZ2V0cyB0aGUgY29ycmVjdCB1cGRhdGVkIHZhbHVlKS4gVGhpcwogIC8vLyBpbmNsdWRlcyBsb29waW5nIG92ZXIgdmFyaWFibGVzIHRoYXQgd2VyZSBib3hlZCBmcm9tIG90aGVyIHNjb3Blcywgbm90CiAgLy8vIHN0cmljdGx5IHZhcmlhYmxlcyBkZWZpbmVkIGluIHRoaXMgY2xvc3VyZSwgdW5saWtlIHRoZSBiZWhhdmlvciBpbgogIC8vLyB0aGUgc3VwZXJjbGFzcyBTY29wZUluZm8uCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoQm94ZWRWYXJpYWJsZShmKExvY2FsIGxvY2FsLCBGaWVsZEVudGl0eSBmaWVsZCkpIHt9CgogIC8vLyBMb29wIHRocm91Z2ggZWFjaCBmcmVlIHZhcmlhYmxlIGluIHRoaXMgY2xvc3VyZS4gRnJlZSB2YXJpYWJsZXMgYXJlIHRoZQogIC8vLyB2YXJpYWJsZXMgdGhhdCBoYXZlIGJlZW4gY2FwdHVyZWQgKmp1c3QqIGluIHRoaXMgY2xvc3VyZSwgbm90IGluIG5lc3RlZAogIC8vLyBzY29wZXMuCiAgdm9pZCBmb3JFYWNoRnJlZVZhcmlhYmxlKGYoTG9jYWwgdmFyaWFibGUsIEZpZWxkRW50aXR5IGZpZWxkKSkge30KCiAgLy8gVE9ETyhlZm9ydHVuYSk6IFJlbW92ZSB0aGlzIG1ldGhvZC4gVGhlIG9sZCBzeXN0ZW0gd2FzIHVzaW5nCiAgLy8gQ2xvc3VyZUNsYXNzTWFwcyBmb3Igc2l0dWF0aW9ucyBvdGhlciB0aGFuIGNsb3N1cmUgY2xhc3MgbWFwcywgYW5kIHRoYXQncwogIC8vIGp1c3QgY29uZnVzaW5nLgogIGJvb2wgZ2V0IGlzQ2xvc3VyZSA9PiBmYWxzZTsKfQoKLy8vIEEgbG9jYWwgdmFyaWFibGUgdGhhdCBjb250YWlucyB0aGUgYm94IG9iamVjdCBob2xkaW5nIHRoZSBbQm94RmllbGRFbGVtZW50XQovLy8gZmllbGRzLgpjbGFzcyBCb3hMb2NhbCBleHRlbmRzIExvY2FsIHsKICBmaW5hbCBDbGFzc0VudGl0eSBjb250YWluZXI7CgogIEJveExvY2FsKHRoaXMuY29udGFpbmVyKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBuYW1lID0+IGNvbnRhaW5lci5uYW1lOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIgaXMgQm94TG9jYWwgJiYgb3RoZXIuY29udGFpbmVyID09IGNvbnRhaW5lcjsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gY29udGFpbmVyLmhhc2hDb2RlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnQm94TG9jYWwoJG5hbWUpJzsKfQoKLy8vIEEgbG9jYWwgdmFyaWFibGUgdXNlZCBlbmNvZGUgdGhlIGRpcmVjdCAodW5jYXB0dXJlZCkgcmVmZXJlbmNlcyB0byBbdGhpc10uCmNsYXNzIFRoaXNMb2NhbCBleHRlbmRzIExvY2FsIHsKICBmaW5hbCBDbGFzc0VudGl0eSBlbmNsb3NpbmdDbGFzczsKCiAgVGhpc0xvY2FsKHRoaXMuZW5jbG9zaW5nQ2xhc3MpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gJ3RoaXMnOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIgaXMgVGhpc0xvY2FsICYmIG90aGVyLmVuY2xvc2luZ0NsYXNzID09IGVuY2xvc2luZ0NsYXNzOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBlbmNsb3NpbmdDbGFzcy5oYXNoQ29kZTsKfQoKLy8vIEEgdHlwZSB2YXJpYWJsZSBhcyBhIGxvY2FsIHZhcmlhYmxlLgpjbGFzcyBUeXBlVmFyaWFibGVMb2NhbCBpbXBsZW1lbnRzIExvY2FsIHsKICBmaW5hbCBUeXBlVmFyaWFibGVUeXBlIHR5cGVWYXJpYWJsZTsKCiAgVHlwZVZhcmlhYmxlTG9jYWwodGhpcy50eXBlVmFyaWFibGUpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gdHlwZVZhcmlhYmxlLmVsZW1lbnQubmFtZTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiB0eXBlVmFyaWFibGUuaGFzaENvZGU7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyEgVHlwZVZhcmlhYmxlTG9jYWwpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0eXBlVmFyaWFibGUgPT0gb3RoZXIudHlwZVZhcmlhYmxlOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoJ3R5cGVfdmFyaWFibGVfbG9jYWwoJyk7CiAgICBzYi53cml0ZSh0eXBlVmFyaWFibGUpOwogICAgc2Iud3JpdGUoJyknKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKLy8vCi8vLyBNb3ZlIHRoZSBiZWxvdyBjbGFzc2VzIHRvIGEgSlMgbW9kZWwgZXZlbnR1YWxseS4KLy8vCmFic3RyYWN0IGNsYXNzIEpTRW50aXR5IGltcGxlbWVudHMgTWVtYmVyRW50aXR5IHsKICBTdHJpbmcgZ2V0IGRlY2xhcmVkTmFtZTsKfQoKYWJzdHJhY3QgY2xhc3MgUHJpdmF0ZWx5TmFtZWRKU0VudGl0eSBpbXBsZW1lbnRzIEpTRW50aXR5IHsKICBFbnRpdHkgZ2V0IHJvb3RPZlNjb3BlOwp9CoGBAE5OPAEoFiEeICQrAU9PUEcdOSo6KgEvJwFNJy8BTAFPHzwBThc3AgFHFQ0RFR0CAU9IUAsESlBPIxIVATc8QBQkOyg/LEM0RgZCBAEtKEIEAUhDHwFQTykGTCYGTzciOAFPUFBNTB8GS04wQgFNMQIBShooGQE7QEAUJDRLKD8sQwZCBAFPUVBJQygBTlBIQx0CAUlKTk9MFAQWNDQEQE9ROTAdAT9EQBQkNChPLEMGQgQBRUIrAUxPQ08XBhkRKBcdDAZOLjkCAU5OFgQeBFFPHQQaER4hCQQ0BCUVBFEuBE9IDkc0JQFHTEAUJCgsJEA0RgZCBAE6BiAjAU4aBlA5LgFOGSkBNy4BTRQOOwFLUDo5Li0RBAFMMCsBUU5NTk1JIAxCAU5ODkQBQk8VHwIBUAwfHwEcAQwlAQwcPgQBDCoBDCoCAU8gJAEiAQwdAQwcSQQBDC8CASkrJwEoAQwwAQwtAQwcMy8EAQwWKiYcExoEAgEENQQyGwIBPBoCASFwYWNrYWdlOmNvbXBpbGVyL3NyYy9jbG9zdXJlLmRhcnQxc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvZWxlbWVudHMvanVtcHMuZGFydIRJLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZWxlbWVudHMuanVtcHM7CgppbXBvcnQgJ2VudGl0aWVzLmRhcnQnOwoKLy8vIFRoZSBsYWJlbCBlbnRpdHkgZGVmaW5lZCBieSBhIGxhYmVsZWQgc3RhdGVtZW50LgphYnN0cmFjdCBjbGFzcyBMYWJlbERlZmluaXRpb24gZXh0ZW5kcyBFbnRpdHkgewogIFN0cmluZyBnZXQgbGFiZWxOYW1lOwogIEp1bXBUYXJnZXQgZ2V0IHRhcmdldDsKCiAgYm9vbCBnZXQgaXNUYXJnZXQgPT4gaXNCcmVha1RhcmdldCB8fCBpc0NvbnRpbnVlVGFyZ2V0OwoKICBib29sIGdldCBpc0JyZWFrVGFyZ2V0OwogIGJvb2wgZ2V0IGlzQ29udGludWVUYXJnZXQ7Cn0KCi8vLyBBIGp1bXAgdGFyZ2V0IGlzIHRoZSByZWZlcmVuY2UgcG9pbnQgb2YgYSBzdGF0ZW1lbnQgb3Igc3dpdGNoLWNhc2UsCi8vLyBlaXRoZXIgYnkgbGFiZWwgb3IgYXMgdGhlIGRlZmF1bHQgdGFyZ2V0IG9mIGEgYnJlYWsgb3IgY29udGludWUuCmFic3RyYWN0IGNsYXNzIEp1bXBUYXJnZXQgZXh0ZW5kcyBMb2NhbCB7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBuYW1lID0+ICd0YXJnZXQnOwoKICBib29sIGdldCBpc1RhcmdldCA9PiBpc0JyZWFrVGFyZ2V0IHx8IGlzQ29udGludWVUYXJnZXQ7CgogIGludCBnZXQgbmVzdGluZ0xldmVsOwogIExpc3Q8TGFiZWxEZWZpbml0aW9uPiBnZXQgbGFiZWxzOwoKICBib29sIGdldCBpc0JyZWFrVGFyZ2V0OwogIGJvb2wgZ2V0IGlzQ29udGludWVUYXJnZXQ7CiAgYm9vbCBnZXQgaXNTd2l0Y2g7CiAgYm9vbCBnZXQgaXNTd2l0Y2hDYXNlOwoKICBMYWJlbERlZmluaXRpb24gYWRkTGFiZWwoU3RyaW5nIGxhYmVsTmFtZSwKICAgICAge2Jvb2wgaXNCcmVha1RhcmdldDogZmFsc2UsIGJvb2wgaXNDb250aW51ZVRhcmdldDogZmFsc2V9KTsKfQooAE5OPAEYARgBNTAYGQE6ARodAgFIRSoMHwE6ARgkARodFRkBLUICAShwYWNrYWdlOmNvbXBpbGVyL3NyYy9lbGVtZW50cy9qdW1wcy5kYXJ0N3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX21vZGVsL3R5cGVfcmVjaXBlLmRhcnSVsy8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuanNfbW9kZWwudHlwZV9yZWNpcGU7CgppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwoKLy8vIEEgVHlwZUVudmlyb25tZW50U3RydWN0dXJlIGRlc2NyaWJlcyB0aGUgc2hhcGUgb3IgbGF5b3V0IG9mIGEgcmVpZmllZCB0eXBlCi8vLyBlbnZpcm9ubWVudC4KLy8vCi8vLyBBIHR5cGUgZW52aXJvbm1lbnQgbWFwcyB0eXBlIHBhcmFtZXRlciB2YXJpYWJsZXMgdG8gdHlwZSB2YWx1ZXMuIFRoZSB0eXBlCi8vLyB2YXJpYWJsZXMgYXJlIG1vc3RseSBlbGlkZWQgaW4gdGhlIHJ1bnRpbWUgcmVwcmVzZW50YXRpb24sIHJlcGxhY2VkIGJ5Ci8vLyBpbmRleGVzIGludG8gdGhlIHJlaWZpZWQgZW52aXJvbm1lbnQuCmFic3RyYWN0IGNsYXNzIFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSB7CiAgLy8vIFN0cnVjdHVyYWwgZXF1YWxpdHkgb24gW1R5cGVFbnZpcm9ubWVudFN0cnVjdHVyZV0uCiAgc3RhdGljIGJvb2wgc2FtZShUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUgYSwgVHlwZUVudmlyb25tZW50U3RydWN0dXJlIGIpIHsKICAgIGlmIChhIGlzIFNpbmdsZXRvblR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSkgewogICAgICBpZiAoYiBpcyBTaW5nbGV0b25UeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUpIHsKICAgICAgICByZXR1cm4gYS52YXJpYWJsZSA9PSBiLnZhcmlhYmxlOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiBfc2FtZUZ1bGxTdHJ1Y3R1cmUoYSwgYik7CiAgfQoKICBzdGF0aWMgYm9vbCBfc2FtZUZ1bGxTdHJ1Y3R1cmUoCiAgICAgIEZ1bGxUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUgYSwgRnVsbFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSBiKSB7CiAgICBpZiAoYS5jbGFzc1R5cGUgIT0gYi5jbGFzc1R5cGUpIHJldHVybiBmYWxzZTsKICAgIExpc3Q8VHlwZVZhcmlhYmxlVHlwZT4gYUJpbmRpbmdzID0gYS5iaW5kaW5nczsKICAgIExpc3Q8VHlwZVZhcmlhYmxlVHlwZT4gYkJpbmRpbmdzID0gYi5iaW5kaW5nczsKICAgIGlmIChhQmluZGluZ3MubGVuZ3RoICE9IGJCaW5kaW5ncy5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYUJpbmRpbmdzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChhQmluZGluZ3NbaV0gIT0gYkJpbmRpbmdzW2ldKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCi8vLyBBIHNpbmdsZXRvbiB0eXBlIGVudmlyb25tZW50IG1hcHMgYSBiaW5kcyBhIHNpbmdsZSB2YWx1ZS4KY2xhc3MgU2luZ2xldG9uVHlwZUVudmlyb25tZW50U3RydWN0dXJlIGV4dGVuZHMgVHlwZUVudmlyb25tZW50U3RydWN0dXJlIHsKICBmaW5hbCBUeXBlVmFyaWFibGVUeXBlIHZhcmlhYmxlOwoKICBTaW5nbGV0b25UeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUodGhpcy52YXJpYWJsZSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdTaW5nbGV0b25UeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUoJHZhcmlhYmxlKSc7Cn0KCi8vLyBBIHR5cGUgZW52aXJvbm1lbnQgY29udGFpbmluZyBhbiBpbnRlcmZhY2UgdHlwZSBhbmQvb3IgYSB0dXBsZSBvZiBmdW5jdGlvbgovLy8gdHlwZSBwYXJhbWV0ZXJzLgpjbGFzcyBGdWxsVHlwZUVudmlyb25tZW50U3RydWN0dXJlIGV4dGVuZHMgVHlwZUVudmlyb25tZW50U3RydWN0dXJlIHsKICBmaW5hbCBJbnRlcmZhY2VUeXBlIGNsYXNzVHlwZTsKICBmaW5hbCBMaXN0PFR5cGVWYXJpYWJsZVR5cGU+IGJpbmRpbmdzOwoKICBGdWxsVHlwZUVudmlyb25tZW50U3RydWN0dXJlKHt0aGlzLmNsYXNzVHlwZSwgdGhpcy5iaW5kaW5ncyA9IGNvbnN0IFtdfSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdGdWxsVHlwZUVudmlyb25tZW50U3RydWN0dXJlKCRjbGFzc1R5cGUsICRiaW5kaW5ncyknOwp9CgovLy8gQSBUeXBlUmVjaXBlIGlzIGV2YWx1YXRlZCBhZ2FpbnN0IGEgdHlwZSBlbnZpcm9ubWVudCB0byBwcm9kdWNlIGVpdGhlciBhCi8vLyB0eXBlLCBvciBhbm90aGVyIHR5cGUgZW52aXJvbm1lbnQuCmFic3RyYWN0IGNsYXNzIFR5cGVSZWNpcGUgewogIC8vLyBSZXR1cm5zIGB0cnVlYCBpcyBbcmVjaXBlQl0gZXZhbHVhdGVkIGluIGFuIGVudmlyb25tZW50IGRlc2NyaWJlZCBieQogIC8vLyBbc3RydWN0dXJlQl0gZ2l2ZXMgdGhlIHNhbWUgdHlwZSBhcyBbcmVjaXBlQV0gZXZhbHVhdGVkIGluIGVudmlyb25tZW50CiAgLy8vIGRlc2NyaWJlZCBieSBbc3RydWN0dXJlQV0uCiAgc3RhdGljIGJvb2wgeWllbGRzU2FtZVR5cGUoCiAgICAgIFR5cGVSZWNpcGUgcmVjaXBlQSwKICAgICAgVHlwZUVudmlyb25tZW50U3RydWN0dXJlIHN0cnVjdHVyZUEsCiAgICAgIFR5cGVSZWNpcGUgcmVjaXBlQiwKICAgICAgVHlwZUVudmlyb25tZW50U3RydWN0dXJlIHN0cnVjdHVyZUIpIHsKICAgIGlmIChyZWNpcGVBID09IHJlY2lwZUIgJiYKICAgICAgICBUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUuc2FtZShzdHJ1Y3R1cmVBLCBzdHJ1Y3R1cmVCKSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvLyBUT0RPKHNyYSk6IFR5cGUgcmVjaXBlcyB0aGF0IGFyZSBkaWZmZXJlbnQgYnV0IGVxdWFsIG1vZHVsbyBuYW1pbmcgYWxzbwogICAgLy8geWllbGQgdGhlIHNhbWUgdHlwZSwgZS5nLiBgTGlzdDxYPiBAWGAgYW5kIGBMaXN0PFk+IEBZYC4KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbcmVjaXBlXSBldmFsdWF0ZXMgaW4gYW4gZW52aXJvbm1lbnQgd2l0aCBbc3RydWN0dXJlXSB0bwogIC8vLyB0aGUgZW52aXJvbm1lbnQuCiAgc3RhdGljIGJvb2wgaXNJZGVudGl0eSgKICAgICAgVHlwZVJlY2lwZSByZWNpcGUsIFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSBzdHJ1Y3R1cmUpIHsKICAgIGlmIChzdHJ1Y3R1cmUgaXMgU2luZ2xldG9uVHlwZUVudmlyb25tZW50U3RydWN0dXJlICYmCiAgICAgICAgcmVjaXBlIGlzIFR5cGVFeHByZXNzaW9uUmVjaXBlKSB7CiAgICAgIGlmIChzdHJ1Y3R1cmUudmFyaWFibGUgPT0gcmVjaXBlLnR5cGUpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKLy8vIEEgcmVjaXBlIHRoYXQgeWllbGRzIGEgcmVpZmllZCB0eXBlLgpjbGFzcyBUeXBlRXhwcmVzc2lvblJlY2lwZSBleHRlbmRzIFR5cGVSZWNpcGUgewogIGZpbmFsIERhcnRUeXBlIHR5cGU7CgogIFR5cGVFeHByZXNzaW9uUmVjaXBlKHRoaXMudHlwZSk7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIHJldHVybiBvdGhlciBpcyBUeXBlRXhwcmVzc2lvblJlY2lwZSAmJiB0eXBlID09IG90aGVyLnR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnVHlwZUV4cHJlc3Npb25SZWNpcGUoJHR5cGUpJzsKfQoKLy8vIEEgcmVjaXBlIHRoYXQgeWllbGRzIGEgcmVpZmllZCB0eXBlIGVudmlyb25tZW50LgphYnN0cmFjdCBjbGFzcyBUeXBlRW52aXJvbm1lbnRSZWNpcGUgZXh0ZW5kcyBUeXBlUmVjaXBlIHt9CgovLy8gQSByZWNpcGUgdGhhdCB5aWVsZHMgYSByZWlmaWVkIHR5cGUgZW52aXJvbm1lbnQgdGhhdCBiaW5kcyBhIHNpbmdsZSBnZW5lcmljCi8vLyBmdW5jdGlvbiB0eXBlIHBhcmFtZXRlci4KY2xhc3MgU2luZ2xldG9uVHlwZUVudmlyb25tZW50UmVjaXBlIGV4dGVuZHMgVHlwZUVudmlyb25tZW50UmVjaXBlIHsKICBmaW5hbCBEYXJ0VHlwZSB0eXBlOwoKICBTaW5nbGV0b25UeXBlRW52aXJvbm1lbnRSZWNpcGUodGhpcy50eXBlKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgcmV0dXJuIG90aGVyIGlzIFNpbmdsZXRvblR5cGVFbnZpcm9ubWVudFJlY2lwZSAmJiB0eXBlID09IG90aGVyLnR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnU2luZ2xldG9uVHlwZUVudmlyb25tZW50UmVjaXBlKCR0eXBlKSc7Cn0KCi8vLyBBIHJlY2lwZSB0aGF0IHlpZWxkcyBhIHJlaWZpZWQgdHlwZSBlbnZpcm9ubWVudCB0aGF0IGJpbmRzIGEgY2xhc3MgaW5zdGFuY2UKLy8vIHR5cGUgYW5kL29yIGEgdHVwbGUgb2YgdHlwZXMsIHVzdWFsbHkgZ2VuZXJpYyBmdW5jdGlvbiB0eXBlIGFyZ3VtZW50cy4KLy8vCi8vLyBXaXRoIG5vIGNsYXNzIGlzIGFsc28gdXNlZCBhcyBhIHR1cGxlIG9mIHR5cGVzLgpjbGFzcyBGdWxsVHlwZUVudmlyb25tZW50UmVjaXBlIGV4dGVuZHMgVHlwZUVudmlyb25tZW50UmVjaXBlIHsKICAvLy8gVHlwZSBleHByZXNzaW9uIGZvciB0aGUgaW50ZXJmYWNlIHR5cGUgb2YgYSBjbGFzcyBzY29wZS4gIGBudWxsYCBmb3IKICAvLy8gZW52aXJvbm1lbnRzIG91dHNpZGUgYSBjbGFzcyBzY29wZSBvciBhIGNsYXNzIHNjb3BlIHdoZXJlIG5vIHN1cGVydHlwZSBpcwogIC8vLyBnZW5lcmljLCBvciB3aGVyZSBvcHRpbWl6YXRpb24gaGFzIGRldGVybWluZWQgdGhhdCBubyB1c2Ugb2YgdGhlCiAgLy8vIGVudmlyb25tZW50IHJlcXVpcmVzIGFueSBvZiB0aGUgY2xhc3MgdHlwZSB2YXJpYWJsZXMuCiAgZmluYWwgSW50ZXJmYWNlVHlwZSBjbGFzc1R5cGU7CgogIC8vIFR5cGUgZXhwcmVzc2lvbnMgZm9yIHRoZSB0dXBsZSBvZiBmdW5jdGlvbiB0eXBlIGFyZ3VtZW50cy4KICBmaW5hbCBMaXN0PERhcnRUeXBlPiB0eXBlczsKCiAgRnVsbFR5cGVFbnZpcm9ubWVudFJlY2lwZSh7dGhpcy5jbGFzc1R5cGUsIHRoaXMudHlwZXMgPSBjb25zdCBbXX0pOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIgaXMgRnVsbFR5cGVFbnZpcm9ubWVudFJlY2lwZSAmJiBfZXF1YWwodGhpcywgb3RoZXIpOwogIH0KCiAgc3RhdGljIGJvb2wgX2VxdWFsKEZ1bGxUeXBlRW52aXJvbm1lbnRSZWNpcGUgYSwgRnVsbFR5cGVFbnZpcm9ubWVudFJlY2lwZSBiKSB7CiAgICBpZiAoYS5jbGFzc1R5cGUgIT0gYi5jbGFzc1R5cGUpIHJldHVybiBmYWxzZTsKICAgIExpc3Q8RGFydFR5cGU+IGFUeXBlcyA9IGEudHlwZXM7CiAgICBMaXN0PERhcnRUeXBlPiBiVHlwZXMgPSBiLnR5cGVzOwogICAgaWYgKGFUeXBlcy5sZW5ndGggIT0gYlR5cGVzLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhVHlwZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGFUeXBlc1tpXSAhPSBiVHlwZXNbaV0pIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0Z1bGxUeXBlRW52aXJvbm1lbnRSZWNpcGUoJGNsYXNzVHlwZSwgJHR5cGVzKSc7Cn0KgKUATk48ASYBIQFPEQROSyoqOU0yNCkIFAYlBAEiSDIzMzwxNgYRBAIBPksjATQBDEcCAU8VRiEpAUwBDE4CAU0nHEtNIR4aKxotHkETBgFPQBIEAVEXGj86KjoGEgQCASkwFwEjAQwcQAQBDDYCATU7AVAdRRcBLQEMHEoEAQxAAgFQSwQ0QEtQRzwhAUAeAUYBDBxGBAFRMiUlNi4wBhEEAQxIAgEucGFja2FnZTpjb21waWxlci9zcmMvanNfbW9kZWwvdHlwZV9yZWNpcGUuZGFydEJzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zc2EvaW52b2tlX2R5bmFtaWNfc3BlY2lhbGl6ZXJzLmRhcnTAAMrfLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgSkNvbW1vbkVsZW1lbnRzOwppbXBvcnQgJy4uL2NvbnN0YW50cy9jb25zdGFudF9zeXN0ZW0uZGFydCcgYXMgY29uc3RhbnRfc3lzdGVtOwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NhbGxfc3RydWN0dXJlLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwppbXBvcnQgJ2xvZ2dpbmcuZGFydCc7CmltcG9ydCAnbm9kZXMuZGFydCc7CmltcG9ydCAndHlwZXMuZGFydCc7CgovLy8gW0ludm9rZUR5bmFtaWNTcGVjaWFsaXplcl0gYW5kIGl0cyBzdWJjbGFzc2VzIGFyZSBoZWxwZXJzIHRvCi8vLyBvcHRpbWl6ZSBpbnRlcmNlcHRlZCBkeW5hbWljIGNhbGxzLiBJdCBrbm93cyB3aGF0IGlucHV0IHR5cGVzCi8vLyB3b3VsZCBiZSBiZW5lZmljaWFsIGZvciBwZXJmb3JtYW5jZSwgYW5kIGhvdyB0byBjaGFuZ2UgYSBpbnZva2UKLy8vIGR5bmFtaWMgdG8gYSBidWlsdGluIGluc3RydWN0aW9uIChlLmcuIEhJbmRleCwgSEJpdE5vdCkuCmNsYXNzIEludm9rZUR5bmFtaWNTcGVjaWFsaXplciB7CiAgY29uc3QgSW52b2tlRHluYW1pY1NwZWNpYWxpemVyKCk7CgogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gQWJzdHJhY3RWYWx1ZUZhY3RvcnkuaW5mZXJyZWRSZXN1bHRUeXBlRm9yU2VsZWN0b3IoCiAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsIGluc3RydWN0aW9uLnJlY2VpdmVyVHlwZSwgcmVzdWx0cyk7CiAgfQoKICBISW5zdHJ1Y3Rpb24gdHJ5Q29udmVydFRvQnVpbHRpbigKICAgICAgSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEhHcmFwaCBncmFwaCwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywKICAgICAgSkNvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgY2xlYXJBbGxTaWRlRWZmZWN0cyhISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGluc3RydWN0aW9uLnNpZGVFZmZlY3RzLmNsZWFyQWxsU2lkZUVmZmVjdHMoKTsKICAgIGluc3RydWN0aW9uLnNpZGVFZmZlY3RzLmNsZWFyQWxsRGVwZW5kZW5jaWVzKCk7CiAgICBpbnN0cnVjdGlvbi5zZXRVc2VHdm4oKTsKICB9CgogIFNlbGVjdG9yIHJlbmFtZVRvT3B0aW1pemVkU2VsZWN0b3IoCiAgICAgIFN0cmluZyBuYW1lLCBTZWxlY3RvciBzZWxlY3RvciwgSkNvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSB7CiAgICBpZiAoc2VsZWN0b3IubmFtZSA9PSBuYW1lKSByZXR1cm4gc2VsZWN0b3I7CiAgICByZXR1cm4gbmV3IFNlbGVjdG9yLmNhbGwobmV3IE5hbWUobmFtZSwgY29tbW9uRWxlbWVudHMuaW50ZXJjZXB0b3JzTGlicmFyeSksCiAgICAgICAgbmV3IENhbGxTdHJ1Y3R1cmUoc2VsZWN0b3IuYXJndW1lbnRDb3VudCkpOwogIH0KCiAgY29uc3RhbnRfc3lzdGVtLk9wZXJhdGlvbiBvcGVyYXRpb24oKSA9PiBudWxsOwoKICBzdGF0aWMgSW52b2tlRHluYW1pY1NwZWNpYWxpemVyIGxvb2t1cFNwZWNpYWxpemVyKFNlbGVjdG9yIHNlbGVjdG9yKSB7CiAgICBpZiAoc2VsZWN0b3IuaXNJbmRleCkgcmV0dXJuIGNvbnN0IEluZGV4U3BlY2lhbGl6ZXIoKTsKICAgIGlmIChzZWxlY3Rvci5pc0luZGV4U2V0KSByZXR1cm4gY29uc3QgSW5kZXhBc3NpZ25TcGVjaWFsaXplcigpOwogICAgU3RyaW5nIG5hbWUgPSBzZWxlY3Rvci5uYW1lOwogICAgaWYgKHNlbGVjdG9yLmlzT3BlcmF0b3IpIHsKICAgICAgaWYgKG5hbWUgPT0gJ3VuYXJ5LScpIHJldHVybiBjb25zdCBVbmFyeU5lZ2F0ZVNwZWNpYWxpemVyKCk7CiAgICAgIGlmIChuYW1lID09ICd+JykgcmV0dXJuIGNvbnN0IEJpdE5vdFNwZWNpYWxpemVyKCk7CiAgICAgIGlmIChuYW1lID09ICcrJykgcmV0dXJuIGNvbnN0IEFkZFNwZWNpYWxpemVyKCk7CiAgICAgIGlmIChuYW1lID09ICctJykgcmV0dXJuIGNvbnN0IFN1YnRyYWN0U3BlY2lhbGl6ZXIoKTsKICAgICAgaWYgKG5hbWUgPT0gJyonKSByZXR1cm4gY29uc3QgTXVsdGlwbHlTcGVjaWFsaXplcigpOwogICAgICBpZiAobmFtZSA9PSAnLycpIHJldHVybiBjb25zdCBEaXZpZGVTcGVjaWFsaXplcigpOwogICAgICBpZiAobmFtZSA9PSAnfi8nKSByZXR1cm4gY29uc3QgVHJ1bmNhdGluZ0RpdmlkZVNwZWNpYWxpemVyKCk7CiAgICAgIGlmIChuYW1lID09ICclJykgcmV0dXJuIGNvbnN0IE1vZHVsb1NwZWNpYWxpemVyKCk7CiAgICAgIGlmIChuYW1lID09ICc+PicpIHJldHVybiBjb25zdCBTaGlmdFJpZ2h0U3BlY2lhbGl6ZXIoKTsKICAgICAgaWYgKG5hbWUgPT0gJzw8JykgcmV0dXJuIGNvbnN0IFNoaWZ0TGVmdFNwZWNpYWxpemVyKCk7CiAgICAgIGlmIChuYW1lID09ICcmJykgcmV0dXJuIGNvbnN0IEJpdEFuZFNwZWNpYWxpemVyKCk7CiAgICAgIGlmIChuYW1lID09ICd8JykgcmV0dXJuIGNvbnN0IEJpdE9yU3BlY2lhbGl6ZXIoKTsKICAgICAgaWYgKG5hbWUgPT0gJ14nKSByZXR1cm4gY29uc3QgQml0WG9yU3BlY2lhbGl6ZXIoKTsKICAgICAgaWYgKG5hbWUgPT0gJz09JykgcmV0dXJuIGNvbnN0IEVxdWFsc1NwZWNpYWxpemVyKCk7CiAgICAgIGlmIChuYW1lID09ICc8JykgcmV0dXJuIGNvbnN0IExlc3NTcGVjaWFsaXplcigpOwogICAgICBpZiAobmFtZSA9PSAnPD0nKSByZXR1cm4gY29uc3QgTGVzc0VxdWFsU3BlY2lhbGl6ZXIoKTsKICAgICAgaWYgKG5hbWUgPT0gJz4nKSByZXR1cm4gY29uc3QgR3JlYXRlclNwZWNpYWxpemVyKCk7CiAgICAgIGlmIChuYW1lID09ICc+PScpIHJldHVybiBjb25zdCBHcmVhdGVyRXF1YWxTcGVjaWFsaXplcigpOwogICAgICByZXR1cm4gY29uc3QgSW52b2tlRHluYW1pY1NwZWNpYWxpemVyKCk7CiAgICB9CiAgICBpZiAoc2VsZWN0b3IuaXNDYWxsKSB7CiAgICAgIGlmIChzZWxlY3Rvci5uYW1lZEFyZ3VtZW50cy5sZW5ndGggPT0gMCkgewogICAgICAgIGludCBhcmd1bWVudENvdW50ID0gc2VsZWN0b3IuYXJndW1lbnRDb3VudDsKICAgICAgICBpZiAoYXJndW1lbnRDb3VudCA9PSAwKSB7CiAgICAgICAgICBpZiAobmFtZSA9PSAnYWJzJykgcmV0dXJuIGNvbnN0IEFic1NwZWNpYWxpemVyKCk7CiAgICAgICAgICBpZiAobmFtZSA9PSAncm91bmQnKSByZXR1cm4gY29uc3QgUm91bmRTcGVjaWFsaXplcigpOwogICAgICAgICAgaWYgKG5hbWUgPT0gJ3RyaW0nKSByZXR1cm4gY29uc3QgVHJpbVNwZWNpYWxpemVyKCk7CiAgICAgICAgfSBlbHNlIGlmIChhcmd1bWVudENvdW50ID09IDEpIHsKICAgICAgICAgIGlmIChuYW1lID09ICdjb2RlVW5pdEF0JykgcmV0dXJuIGNvbnN0IENvZGVVbml0QXRTcGVjaWFsaXplcigpOwogICAgICAgICAgaWYgKG5hbWUgPT0gJ2NvbXBhcmVUbycpIHJldHVybiBjb25zdCBDb21wYXJlVG9TcGVjaWFsaXplcigpOwogICAgICAgICAgaWYgKG5hbWUgPT0gJ3JlbWFpbmRlcicpIHJldHVybiBjb25zdCBSZW1haW5kZXJTcGVjaWFsaXplcigpOwogICAgICAgICAgaWYgKG5hbWUgPT0gJ3N1YnN0cmluZycpIHJldHVybiBjb25zdCBTdWJzdHJpbmdTcGVjaWFsaXplcigpOwogICAgICAgICAgaWYgKG5hbWUgPT0gJ2NvbnRhaW5zJykgcmV0dXJuIGNvbnN0IFBhdHRlcm5NYXRjaFNwZWNpYWxpemVyKCk7CiAgICAgICAgICBpZiAobmFtZSA9PSAnaW5kZXhPZicpIHJldHVybiBjb25zdCBQYXR0ZXJuTWF0Y2hTcGVjaWFsaXplcigpOwogICAgICAgICAgaWYgKG5hbWUgPT0gJ3N0YXJ0c1dpdGgnKSByZXR1cm4gY29uc3QgUGF0dGVybk1hdGNoU3BlY2lhbGl6ZXIoKTsKICAgICAgICAgIGlmIChuYW1lID09ICdlbmRzV2l0aCcpIHJldHVybiBjb25zdCBQYXR0ZXJuTWF0Y2hTcGVjaWFsaXplcigpOwogICAgICAgIH0gZWxzZSBpZiAoYXJndW1lbnRDb3VudCA9PSAyKSB7CiAgICAgICAgICBpZiAobmFtZSA9PSAnc3Vic3RyaW5nJykgcmV0dXJuIGNvbnN0IFN1YnN0cmluZ1NwZWNpYWxpemVyKCk7CiAgICAgICAgICBpZiAobmFtZSA9PSAnY29udGFpbnMnKSByZXR1cm4gY29uc3QgUGF0dGVybk1hdGNoU3BlY2lhbGl6ZXIoKTsKICAgICAgICAgIGlmIChuYW1lID09ICdpbmRleE9mJykgcmV0dXJuIGNvbnN0IFBhdHRlcm5NYXRjaFNwZWNpYWxpemVyKCk7CiAgICAgICAgICBpZiAobmFtZSA9PSAnc3RhcnRzV2l0aCcpIHJldHVybiBjb25zdCBQYXR0ZXJuTWF0Y2hTcGVjaWFsaXplcigpOwogICAgICAgICAgaWYgKG5hbWUgPT0gJ2VuZHNXaXRoJykgcmV0dXJuIGNvbnN0IFBhdHRlcm5NYXRjaFNwZWNpYWxpemVyKCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gY29uc3QgSW52b2tlRHluYW1pY1NwZWNpYWxpemVyKCk7CiAgfQp9CgpjbGFzcyBJbmRleEFzc2lnblNwZWNpYWxpemVyIGV4dGVuZHMgSW52b2tlRHluYW1pY1NwZWNpYWxpemVyIHsKICBjb25zdCBJbmRleEFzc2lnblNwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB0cnlDb252ZXJ0VG9CdWlsdGluKAogICAgICBISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgSEdyYXBoIGdyYXBoLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLAogICAgICBKQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2cpIHsKICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciA9IGluc3RydWN0aW9uLmlucHV0c1sxXTsKICAgIEhJbnN0cnVjdGlvbiBpbmRleCA9IGluc3RydWN0aW9uLmlucHV0c1syXTsKICAgIGlmIChyZWNlaXZlcgogICAgICAgIC5pc011dGFibGVJbmRleGFibGUoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAuaXNQb3RlbnRpYWxseUZhbHNlKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWVyZ2UgdGhpcyBhbmQgdGhlIGZvbGxvd2luZyBpZiBzdGF0ZW1lbnQuCiAgICBpZiAoaW5kZXguaXNJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzUG90ZW50aWFsbHlGYWxzZSAmJgogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1cHBvcnQgYW5ub3RhdGlvbnMgb24gdGhlIHBvc3NpYmxlIHRhcmdldHMKICAgICAgICAvLyBhbmQgdXNlZCB0aGVpciBwYXJhbWV0ZXIgY2hlY2sgcG9saWN5IGhlcmUuCiAgICAgICAgY2xvc2VkV29ybGQuYW5ub3RhdGlvbnNEYXRhLmdldFBhcmFtZXRlckNoZWNrUG9saWN5KG51bGwpLmlzRW1pdHRlZCkgewogICAgICAvLyBXZSB3YW50IHRoZSByaWdodCBjaGVja2VkIG1vZGUgZXJyb3IuCiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIEhJbnN0cnVjdGlvbiB2YWx1ZSA9IGluc3RydWN0aW9uLmlucHV0c1szXTsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1cHBvcnQgYW5ub3RhdGlvbnMgb24gdGhlIHBvc3NpYmxlIHRhcmdldHMKICAgIC8vIGFuZCB1c2VkIHRoZWlyIHBhcmFtZXRlciBjaGVjayBwb2xpY3kgaGVyZS4KICAgIGlmIChjbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGEuZ2V0UGFyYW1ldGVyQ2hlY2tQb2xpY3kobnVsbCkuaXNFbWl0dGVkKSB7CiAgICAgIGlmICghX3ZhbHVlUGFyYW1ldGVyQ2hlY2tBbHdheXNTdWNjZWVkcygKICAgICAgICAgIGluc3RydWN0aW9uLCByZWNlaXZlciwgdmFsdWUsIGNvbW1vbkVsZW1lbnRzLCBjbG9zZWRXb3JsZCkpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfQogICAgSEluZGV4QXNzaWduIGNvbnZlcnRlZCA9IG5ldyBISW5kZXhBc3NpZ24oY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgICByZWNlaXZlciwgaW5kZXgsIHZhbHVlLCBpbnN0cnVjdGlvbi5zZWxlY3Rvcik7CiAgICBsb2c/LnJlZ2lzdGVySW5kZXhBc3NpZ24oaW5zdHJ1Y3Rpb24sIGNvbnZlcnRlZCk7CiAgICByZXR1cm4gY29udmVydGVkOwogIH0KCiAgLy8vIFJldHVybnMgW3RydWVdIGlmIFt2YWx1ZV0gbWVldHMgdGhlIHJlcXVpcmVtZW50cyBmb3IgYmVpbmcgc3RvcmVkIGludG8KICAvLy8gaW5kZXhhYmxlIFtyZWNlaXZlcl0uCiAgYm9vbCBfdmFsdWVQYXJhbWV0ZXJDaGVja0Fsd2F5c1N1Y2NlZWRzKAogICAgICBISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgSEluc3RydWN0aW9uIHJlY2VpdmVyLAogICAgICBISW5zdHJ1Y3Rpb24gdmFsdWUsCiAgICAgIEpDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICAvLyBIYW5kbGUgdHlwZWQgYXJyYXlzIGJ5IHJlY29nbml6aW5nIHRoZSBleGFjdCBpbXBsZW1lbnRhdGlvbiBvZiBgW109YCBhbmQKICAgIC8vIGNoZWNraW5nIGlmIFt2YWx1ZV0gaGFzIHRoZSBhcHByb3ByaWF0ZSB0eXBlLgogICAgaWYgKGluc3RydWN0aW9uLmVsZW1lbnQgIT0gbnVsbCkgewogICAgICBDbGFzc0VudGl0eSBjbHMgPSBpbnN0cnVjdGlvbi5lbGVtZW50LmVuY2xvc2luZ0NsYXNzOwogICAgICBpZiAoY2xzID09IGNvbW1vbkVsZW1lbnRzLnR5cGVkQXJyYXlPZkludENsYXNzKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlCiAgICAgICAgICAgIC5pc0ludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWU7CiAgICAgIH0gZWxzZSBpZiAoY2xzID09IGNvbW1vbkVsZW1lbnRzLnR5cGVkQXJyYXlPZkRvdWJsZUNsYXNzKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlLmlzTnVtYmVyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWU7CiAgICAgIH0KICAgIH0KCiAgICAvLyBUaGUgdHlwZSBjaGVjayB3aWxsIHBhc3MgaWYgaXQgcGFzc2VkIGJlZm9yZS4gV2Uga25vdyBpdCBwYXNzZWQgYmVmb3JlIGlmCiAgICAvLyB0aGUgdmFsdWUgd2FzIGxvYWRlZCBmcm9tIHRoZSBzYW1lIGluZGV4YWJsZS4KICAgIGlmICh2YWx1ZSBpcyBISW5kZXgpIHsKICAgICAgaWYgKHZhbHVlLnJlY2VpdmVyLm5vbkNoZWNrKCkgPT0gcmVjZWl2ZXIubm9uQ2hlY2soKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKY2xhc3MgSW5kZXhTcGVjaWFsaXplciBleHRlbmRzIEludm9rZUR5bmFtaWNTcGVjaWFsaXplciB7CiAgY29uc3QgSW5kZXhTcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdHJ5Q29udmVydFRvQnVpbHRpbigKICAgICAgSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEhHcmFwaCBncmFwaCwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywKICAgICAgSkNvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nKSB7CiAgICB2YXIgYWJzdHJhY3RWYWx1ZURvbWFpbiA9IGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW47CiAgICBpZiAoaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdCiAgICAgICAgLmlzSW5kZXhhYmxlUHJpbWl0aXZlKGFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgLmlzUG90ZW50aWFsbHlGYWxzZSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmIChpbnN0cnVjdGlvbi5pbnB1dHNbMl0KICAgICAgICAgICAgLmlzSW50ZWdlcihhYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAuaXNQb3RlbnRpYWxseUZhbHNlICYmCiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3VwcG9ydCBhbm5vdGF0aW9ucyBvbiB0aGUgcG9zc2libGUgdGFyZ2V0cwogICAgICAgIC8vIGFuZCB1c2VkIHRoZWlyIHBhcmFtZXRlciBjaGVjayBwb2xpY3kgaGVyZS4KICAgICAgICBjbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGEuZ2V0UGFyYW1ldGVyQ2hlY2tQb2xpY3kobnVsbCkuaXNFbWl0dGVkKSB7CiAgICAgIC8vIFdlIHdhbnQgdGhlIHJpZ2h0IGNoZWNrZWQgbW9kZSBlcnJvci4KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZSA9CiAgICAgICAgaW5zdHJ1Y3Rpb24uZ2V0RGFydFJlY2VpdmVyKGNsb3NlZFdvcmxkKS5pbnN0cnVjdGlvblR5cGU7CiAgICBBYnN0cmFjdFZhbHVlIGVsZW1lbnRUeXBlID0KICAgICAgICBBYnN0cmFjdFZhbHVlRmFjdG9yeS5pbmZlcnJlZFJlc3VsdFR5cGVGb3JTZWxlY3RvcigKICAgICAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsIHJlY2VpdmVyVHlwZSwgcmVzdWx0cyk7CiAgICBpZiAoYWJzdHJhY3RWYWx1ZURvbWFpbi5pc1R5cGVkQXJyYXkocmVjZWl2ZXJUeXBlKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIGVsZW1lbnRUeXBlID0gYWJzdHJhY3RWYWx1ZURvbWFpbi5leGNsdWRlTnVsbChlbGVtZW50VHlwZSk7CiAgICB9CiAgICBISW5kZXggY29udmVydGVkID0gbmV3IEhJbmRleChpbnN0cnVjdGlvbi5pbnB1dHNbMV0sIGluc3RydWN0aW9uLmlucHV0c1syXSwKICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciwgZWxlbWVudFR5cGUpOwogICAgbG9nPy5yZWdpc3RlckluZGV4KGluc3RydWN0aW9uLCBjb252ZXJ0ZWQpOwogICAgcmV0dXJuIGNvbnZlcnRlZDsKICB9Cn0KCmNsYXNzIEJpdE5vdFNwZWNpYWxpemVyIGV4dGVuZHMgSW52b2tlRHluYW1pY1NwZWNpYWxpemVyIHsKICBjb25zdCBCaXROb3RTcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uVW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5iaXROb3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgLy8gQWxsIGJpdHdpc2Ugb3BlcmF0aW9ucyBvbiBwcmltaXRpdmUgdHlwZXMgZWl0aGVyIHByb2R1Y2UgYW4KICAgIC8vIGludGVnZXIgb3IgdGhyb3cgYW4gZXJyb3IuCiAgICBpZiAoaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdCiAgICAgICAgLmlzUHJpbWl0aXZlT3JOdWxsKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4udWludDMyVHlwZTsKICAgIH0KICAgIHJldHVybiBzdXBlci5jb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdHJ5Q29udmVydFRvQnVpbHRpbigKICAgICAgSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEhHcmFwaCBncmFwaCwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywKICAgICAgSkNvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nKSB7CiAgICBISW5zdHJ1Y3Rpb24gaW5wdXQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMV07CiAgICBpZiAoaW5wdXQuaXNOdW1iZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBIQml0Tm90IGNvbnZlcnRlZCA9IG5ldyBIQml0Tm90KGlucHV0LCBpbnN0cnVjdGlvbi5zZWxlY3RvciwKICAgICAgICAgIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKSk7CiAgICAgIGxvZz8ucmVnaXN0ZXJCaXROb3QoaW5zdHJ1Y3Rpb24sIGNvbnZlcnRlZCk7CiAgICAgIHJldHVybiBjb252ZXJ0ZWQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCmNsYXNzIFVuYXJ5TmVnYXRlU3BlY2lhbGl6ZXIgZXh0ZW5kcyBJbnZva2VEeW5hbWljU3BlY2lhbGl6ZXIgewogIGNvbnN0IFVuYXJ5TmVnYXRlU3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLlVuYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0ubmVnYXRlOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIEhJbnN0cnVjdGlvbiBvcGVyYW5kID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdOwogICAgaWYgKG9wZXJhbmQKICAgICAgICAuaXNOdW1iZXJPck51bGwoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAvLyBXZSBoYXZlIGludGVnZXIgc3ViY2xhc3NlcyB0aGF0IHJlcHJlc2VudCByYW5nZXMsIHNvIHdpZGVuIGFueSBpbnQKICAgICAgLy8gc3ViY2xhc3MgdG8gZnVsbCBpbnRlZ2VyLgogICAgICBpZiAob3BlcmFuZAogICAgICAgICAgLmlzSW50ZWdlck9yTnVsbChjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5pbnRUeXBlOwogICAgICB9CiAgICAgIGlmIChvcGVyYW5kCiAgICAgICAgICAuaXNEb3VibGVPck51bGwoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uZG91YmxlVHlwZTsKICAgICAgfQogICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5udW1UeXBlOwogICAgfQogICAgcmV0dXJuIHN1cGVyLmNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB0cnlDb252ZXJ0VG9CdWlsdGluKAogICAgICBISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgSEdyYXBoIGdyYXBoLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLAogICAgICBKQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2cpIHsKICAgIEhJbnN0cnVjdGlvbiBpbnB1dCA9IGluc3RydWN0aW9uLmlucHV0c1sxXTsKICAgIGlmIChpbnB1dC5pc051bWJlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIEhOZWdhdGUgY29udmVydGVkID0gbmV3IEhOZWdhdGUoaW5wdXQsIGluc3RydWN0aW9uLnNlbGVjdG9yLAogICAgICAgICAgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpKTsKICAgICAgbG9nPy5yZWdpc3RlclVuYXJ5TmVnYXRlKGluc3RydWN0aW9uLCBjb252ZXJ0ZWQpOwogICAgICByZXR1cm4gY29udmVydGVkOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQp9CgpjbGFzcyBBYnNTcGVjaWFsaXplciBleHRlbmRzIEludm9rZUR5bmFtaWNTcGVjaWFsaXplciB7CiAgY29uc3QgQWJzU3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLlVuYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uYWJzOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIEhJbnN0cnVjdGlvbiBpbnB1dCA9IGluc3RydWN0aW9uLmlucHV0c1sxXTsKICAgIGlmIChpbnB1dAogICAgICAgIC5pc051bWJlck9yTnVsbChjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmV4Y2x1ZGVOdWxsKGlucHV0Lmluc3RydWN0aW9uVHlwZSk7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHRyeUNvbnZlcnRUb0J1aWx0aW4oCiAgICAgIEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBIR3JhcGggZ3JhcGgsCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsCiAgICAgIEpDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZykgewogICAgSEluc3RydWN0aW9uIGlucHV0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdOwogICAgaWYgKGlucHV0LmlzTnVtYmVyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgSEFicyBjb252ZXJ0ZWQgPSBuZXcgSEFicyhpbnB1dCwgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsCiAgICAgICAgICBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCkpOwogICAgICBsb2c/LnJlZ2lzdGVyQWJzKGluc3RydWN0aW9uLCBjb252ZXJ0ZWQpOwogICAgICByZXR1cm4gY29udmVydGVkOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIHJlZ2lzdGVyT3B0aW1pemF0aW9uKAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZywgSEluc3RydWN0aW9uIG9yaWdpbmFsLCBISW5zdHJ1Y3Rpb24gY29udmVydGVkKSB7fQp9CgphYnN0cmFjdCBjbGFzcyBCaW5hcnlBcml0aG1ldGljU3BlY2lhbGl6ZXIgZXh0ZW5kcyBJbnZva2VEeW5hbWljU3BlY2lhbGl6ZXIgewogIGNvbnN0IEJpbmFyeUFyaXRobWV0aWNTcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgSEluc3RydWN0aW9uIGxlZnQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMV07CiAgICBISW5zdHJ1Y3Rpb24gcmlnaHQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMl07CiAgICBpZiAobGVmdAogICAgICAgICAgICAuaXNJbnRlZ2VyT3JOdWxsKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgcmlnaHQKICAgICAgICAgICAgLmlzSW50ZWdlck9yTnVsbChjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5pbnRUeXBlOwogICAgfQogICAgaWYgKGxlZnQuaXNOdW1iZXJPck51bGwoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBpZiAobGVmdAogICAgICAgICAgICAgIC5pc0RvdWJsZU9yTnVsbChjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlIHx8CiAgICAgICAgICByaWdodAogICAgICAgICAgICAgIC5pc0RvdWJsZU9yTnVsbChjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uZG91YmxlVHlwZTsKICAgICAgfQogICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5udW1UeXBlOwogICAgfQogICAgcmV0dXJuIHN1cGVyLmNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKTsKICB9CgogIGJvb2wgaXNCdWlsdGluKEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBpbnN0cnVjdGlvbi5pbnB1dHNbMV0KICAgICAgICAgICAgLmlzTnVtYmVyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdCiAgICAgICAgICAgIC5pc051bWJlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB0cnlDb252ZXJ0VG9CdWlsdGluKAogICAgICBISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgSEdyYXBoIGdyYXBoLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLAogICAgICBKQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2cpIHsKICAgIGlmIChpc0J1aWx0aW4oaW5zdHJ1Y3Rpb24sIGNsb3NlZFdvcmxkKSkgewogICAgICBISW5zdHJ1Y3Rpb24gYnVpbHRpbiA9CiAgICAgICAgICBuZXdCdWlsdGluVmFyaWFudChpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpOwogICAgICBpZiAobG9nICE9IG51bGwpIHsKICAgICAgICByZWdpc3Rlck9wdGltaXphdGlvbihsb2csIGluc3RydWN0aW9uLCBidWlsdGluKTsKICAgICAgfQogICAgICBpZiAoYnVpbHRpbiAhPSBudWxsKSB7CiAgICAgICAgcmV0dXJuIGJ1aWx0aW47CiAgICAgIH0KICAgICAgLy8gRXZlbiBpZiB0aGVyZSBpcyBubyBidWlsdGluIGVxdWl2YWxlbnQgaW5zdHJ1Y3Rpb24sIHdlIGtub3cKICAgICAgLy8gdGhlIGluc3RydWN0aW9uIGRvZXMgbm90IGhhdmUgYW55IHNpZGUgZWZmZWN0LCBhbmQgdGhhdCBpdAogICAgICAvLyBjYW4gYmUgR1ZOJ2VkLgogICAgICBjbGVhckFsbFNpZGVFZmZlY3RzKGluc3RydWN0aW9uKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgYm9vbCBpbnB1dHNBcmVOdW0oSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdOwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdOwogICAgcmV0dXJuIGxlZnQKICAgICAgICAgICAgLmlzTnVtYmVyT3JOdWxsKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgcmlnaHQuaXNOdW1iZXJPck51bGwoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZTsKICB9CgogIGJvb2wgaW5wdXRzQXJlUG9zaXRpdmVJbnRlZ2VycygKICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdOwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdOwogICAgcmV0dXJuIGxlZnQKICAgICAgICAgICAgLmlzUG9zaXRpdmVJbnRlZ2VyT3JOdWxsKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgcmlnaHQKICAgICAgICAgICAgLmlzUG9zaXRpdmVJbnRlZ2VyT3JOdWxsKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlOwogIH0KCiAgYm9vbCBpbnB1dHNBcmVVSW50MzEoSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdOwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdOwogICAgcmV0dXJuIGxlZnQuaXNVSW50MzEoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgIHJpZ2h0LmlzVUludDMxKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWU7CiAgfQoKICBISW5zdHJ1Y3Rpb24gbmV3QnVpbHRpblZhcmlhbnQoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCk7CgogIHZvaWQgcmVnaXN0ZXJPcHRpbWl6YXRpb24oCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nLCBISW5zdHJ1Y3Rpb24gb3JpZ2luYWwsIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQpOwp9CgpjbGFzcyBBZGRTcGVjaWFsaXplciBleHRlbmRzIEJpbmFyeUFyaXRobWV0aWNTcGVjaWFsaXplciB7CiAgY29uc3QgQWRkU3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmIChpbnB1dHNBcmVVSW50MzEoaW5zdHJ1Y3Rpb24sIGNsb3NlZFdvcmxkKSkgewogICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi51aW50MzJUeXBlOwogICAgfQogICAgaWYgKGlucHV0c0FyZVBvc2l0aXZlSW50ZWdlcnMoaW5zdHJ1Y3Rpb24sIGNsb3NlZFdvcmxkKSkgewogICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5wb3NpdGl2ZUludFR5cGU7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmFkZDsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBuZXdCdWlsdGluVmFyaWFudChISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gbmV3IEhBZGQoCiAgICAgICAgaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdLAogICAgICAgIGluc3RydWN0aW9uLmlucHV0c1syXSwKICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciwKICAgICAgICBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck9wdGltaXphdGlvbigKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2csIEhJbnN0cnVjdGlvbiBvcmlnaW5hbCwgSEluc3RydWN0aW9uIGNvbnZlcnRlZCkgewogICAgbG9nLnJlZ2lzdGVyQWRkKG9yaWdpbmFsLCBjb252ZXJ0ZWQpOwogIH0KfQoKY2xhc3MgRGl2aWRlU3BlY2lhbGl6ZXIgZXh0ZW5kcyBCaW5hcnlBcml0aG1ldGljU3BlY2lhbGl6ZXIgewogIGNvbnN0IERpdmlkZVNwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5kaXZpZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoSEluc3RydWN0aW9uIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdOwogICAgaWYgKGxlZnQuaXNOdW1iZXJPck51bGwoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5kb3VibGVUeXBlOwogICAgfQogICAgcmV0dXJuIHN1cGVyLmNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBuZXdCdWlsdGluVmFyaWFudChISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gbmV3IEhEaXZpZGUoaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdLCBpbnN0cnVjdGlvbi5pbnB1dHNbMl0sCiAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uZG91YmxlVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyT3B0aW1pemF0aW9uKAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZywgSEluc3RydWN0aW9uIG9yaWdpbmFsLCBISW5zdHJ1Y3Rpb24gY29udmVydGVkKSB7CiAgICBsb2cucmVnaXN0ZXJEaXZpZGUob3JpZ2luYWwsIGNvbnZlcnRlZCk7CiAgfQp9CgpjbGFzcyBNb2R1bG9TcGVjaWFsaXplciBleHRlbmRzIEJpbmFyeUFyaXRobWV0aWNTcGVjaWFsaXplciB7CiAgY29uc3QgTW9kdWxvU3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmIChpbnB1dHNBcmVQb3NpdGl2ZUludGVnZXJzKGluc3RydWN0aW9uLCBjbG9zZWRXb3JsZCkpIHsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4ucG9zaXRpdmVJbnRUeXBlOwogICAgfQogICAgcmV0dXJuIHN1cGVyLmNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5tb2R1bG87CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gbmV3QnVpbHRpblZhcmlhbnQoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgLy8gTW9kdWxvIGNhbm5vdCBiZSBtYXBwZWQgdG8gdGhlIG5hdGl2ZSBvcGVyYXRvciAoZGlmZmVyZW50IHNlbWFudGljcykuCgogICAgLy8gV2UgY2FuIHVzZSBIUmVtYWluZGVyIGlmIGJvdGggaW5wdXRzIGFyZSBub24tbmVnYXRpdmUgYW5kIHRoZSByZWNlaXZlcgogICAgLy8gY2Fubm90IGJlIC0wLjAuICBOb3RlIHRoYXQgLTAuMCBpcyBjb25zaWRlcmVkIHRvIGJlIGFuIGludCwgc28gdW50aWwgd2UKICAgIC8vIHRyYWNrIC0wLjAgcHJlY2lzZWx5LCB3ZSBoYXZlIHRvIHN5bnRhdGljYWxseSBmaWx0ZXIgaW5wdXRzIHRoYXQgY2Fubm90CiAgICAvLyBnZW5lcmF0ZSAtMC4wLgogICAgYm9vbCBjYW5CZVBvc2l0aXZlWmVybyhISW5zdHJ1Y3Rpb24gaW5wdXQpIHsKICAgICAgaWYgKGlucHV0IGlzIEhDb25zdGFudCkgewogICAgICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPSBpbnB1dC5jb25zdGFudDsKICAgICAgICBpZiAodmFsdWUgaXMgRG91YmxlQ29uc3RhbnRWYWx1ZSAmJiB2YWx1ZS5pc1plcm8pIHJldHVybiB0cnVlOwogICAgICAgIGlmICh2YWx1ZSBpcyBJbnRDb25zdGFudFZhbHVlICYmIHZhbHVlLmlzWmVybykgcmV0dXJuIHRydWU7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIGJvb2wgaW5QaGkgPSBmYWxzZTsKICAgIGJvb2wgY2FuQmVOZWdhdGl2ZVplcm8oSEluc3RydWN0aW9uIGlucHV0KSB7CiAgICAgIGlmIChpbnB1dCBpcyBIQ29uc3RhbnQpIHsKICAgICAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gaW5wdXQuY29uc3RhbnQ7CiAgICAgICAgaWYgKHZhbHVlIGlzIERvdWJsZUNvbnN0YW50VmFsdWUgJiYgdmFsdWUuaXNNaW51c1plcm8pIHJldHVybiB0cnVlOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBpZiAoaW5wdXQgaXMgSEFkZCkgewogICAgICAgIC8vICcrJyBjYW4gb25seSBnZW5lcmF0ZSAtMC4wIHdoZW4gYm90aCBpbnB1dHMgYXJlIC0wLjAuCiAgICAgICAgcmV0dXJuIGNhbkJlTmVnYXRpdmVaZXJvKGlucHV0LmxlZnQpICYmIGNhbkJlTmVnYXRpdmVaZXJvKGlucHV0LnJpZ2h0KTsKICAgICAgfQogICAgICBpZiAoaW5wdXQgaXMgSFN1YnRyYWN0KSB7CiAgICAgICAgcmV0dXJuIGNhbkJlTmVnYXRpdmVaZXJvKGlucHV0LmxlZnQpICYmIGNhbkJlUG9zaXRpdmVaZXJvKGlucHV0LnJpZ2h0KTsKICAgICAgfQogICAgICBpZiAoaW5wdXQgaXMgSFBoaSkgewogICAgICAgIGlmIChpblBoaSkgcmV0dXJuIHRydWU7CiAgICAgICAgaW5QaGkgPSB0cnVlOwogICAgICAgIGJvb2wgcmVzdWx0ID0gaW5wdXQuaW5wdXRzLmFueShjYW5CZU5lZ2F0aXZlWmVybyk7CiAgICAgICAgaW5QaGkgPSBmYWxzZTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIGlmIChpbnB1dHNBcmVQb3NpdGl2ZUludGVnZXJzKGluc3RydWN0aW9uLCBjbG9zZWRXb3JsZCkgJiYKICAgICAgICAhY2FuQmVOZWdhdGl2ZVplcm8oaW5zdHJ1Y3Rpb24uZ2V0RGFydFJlY2VpdmVyKGNsb3NlZFdvcmxkKSkpIHsKICAgICAgcmV0dXJuIG5ldyBIUmVtYWluZGVyKAogICAgICAgICAgaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdLAogICAgICAgICAgaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdLAogICAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsCiAgICAgICAgICBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCkpOwogICAgfQogICAgLy8gVE9ETyhzcmEpOgogICAgLy8gICBhICUgTiAtLT4gIGEgJiAoTi0xKSwgTj0yXmssIHdoZXJlIGE+PTAsIGRvZXMgbm90IGhhdmUgLTAuMCBwcm9ibGVtLgoKICAgIC8vIFRPRE8oc3JhKTogV2UgY291bGQgYXZvaWQgcHJvYmxlbXMgd2l0aCAtMC4wIGlmIHdlIGdlbmVyYXRlIHggJSB5IGFzICh4ICsKICAgIC8vIDApICUgeSwgYnV0IHdlIHdvdWxkIGhhdmUgdG8gZml4IEhBZGQgb3B0aW1pemF0aW9ucy4KCiAgICAvLyBUT0RPKHNyYSk6IFdlIGNvdWxkIHJlcGxhY2UgJG1vZCB3aXRoIEhSZW1haW5kZXIgd2hlbiB3ZSBkb24ndCBjYXJlIGFib3V0CiAgICAvLyBhIC0wLjAgcmVzdWx0IChlLmcuIGEgJSAxMCA9PSAwLCBhW2kgJSAzXSkuIFRoaXMgaXMgdHJpY2t5LCBzaW5jZSB3ZQogICAgLy8gZG9uJ3Qgd2FudCB0byBydWluIEdWTiBvcHBvcnR1bml0aWVzLgogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyT3B0aW1pemF0aW9uKAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZywgSEluc3RydWN0aW9uIG9yaWdpbmFsLCBISW5zdHJ1Y3Rpb24gY29udmVydGVkKSB7CiAgICBsb2cucmVnaXN0ZXJNb2R1bG8ob3JpZ2luYWwsIGNvbnZlcnRlZCk7CiAgfQp9CgpjbGFzcyBSZW1haW5kZXJTcGVjaWFsaXplciBleHRlbmRzIEJpbmFyeUFyaXRobWV0aWNTcGVjaWFsaXplciB7CiAgY29uc3QgUmVtYWluZGVyU3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmIChpbnB1dHNBcmVQb3NpdGl2ZUludGVnZXJzKGluc3RydWN0aW9uLCBjbG9zZWRXb3JsZCkpIHsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4ucG9zaXRpdmVJbnRUeXBlOwogICAgfQogICAgcmV0dXJuIHN1cGVyLmNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5yZW1haW5kZXI7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gbmV3QnVpbHRpblZhcmlhbnQoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIG5ldyBIUmVtYWluZGVyKAogICAgICAgIGluc3RydWN0aW9uLmlucHV0c1sxXSwKICAgICAgICBpbnN0cnVjdGlvbi5pbnB1dHNbMl0sCiAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsCiAgICAgICAgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJPcHRpbWl6YXRpb24oCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nLCBISW5zdHJ1Y3Rpb24gb3JpZ2luYWwsIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQpIHsKICAgIGxvZy5yZWdpc3RlclJlbWFpbmRlcihvcmlnaW5hbCwgY29udmVydGVkKTsKICB9Cn0KCmNsYXNzIE11bHRpcGx5U3BlY2lhbGl6ZXIgZXh0ZW5kcyBCaW5hcnlBcml0aG1ldGljU3BlY2lhbGl6ZXIgewogIGNvbnN0IE11bHRpcGx5U3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLm11bHRpcGx5OwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmIChpbnB1dHNBcmVQb3NpdGl2ZUludGVnZXJzKGluc3RydWN0aW9uLCBjbG9zZWRXb3JsZCkpIHsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4ucG9zaXRpdmVJbnRUeXBlOwogICAgfQogICAgcmV0dXJuIHN1cGVyLmNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBuZXdCdWlsdGluVmFyaWFudChISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gbmV3IEhNdWx0aXBseSgKICAgICAgICBpbnN0cnVjdGlvbi5pbnB1dHNbMV0sCiAgICAgICAgaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdLAogICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yLAogICAgICAgIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyT3B0aW1pemF0aW9uKAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZywgSEluc3RydWN0aW9uIG9yaWdpbmFsLCBISW5zdHJ1Y3Rpb24gY29udmVydGVkKSB7CiAgICBsb2cucmVnaXN0ZXJNdWx0aXBseShvcmlnaW5hbCwgY29udmVydGVkKTsKICB9Cn0KCmNsYXNzIFN1YnRyYWN0U3BlY2lhbGl6ZXIgZXh0ZW5kcyBCaW5hcnlBcml0aG1ldGljU3BlY2lhbGl6ZXIgewogIGNvbnN0IFN1YnRyYWN0U3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLnN1YnRyYWN0OwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIG5ld0J1aWx0aW5WYXJpYW50KEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBuZXcgSFN1YnRyYWN0KAogICAgICAgIGluc3RydWN0aW9uLmlucHV0c1sxXSwKICAgICAgICBpbnN0cnVjdGlvbi5pbnB1dHNbMl0sCiAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsCiAgICAgICAgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJPcHRpbWl6YXRpb24oCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nLCBISW5zdHJ1Y3Rpb24gb3JpZ2luYWwsIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQpIHsKICAgIGxvZy5yZWdpc3RlclN1YnRyYWN0KG9yaWdpbmFsLCBjb252ZXJ0ZWQpOwogIH0KfQoKY2xhc3MgVHJ1bmNhdGluZ0RpdmlkZVNwZWNpYWxpemVyIGV4dGVuZHMgQmluYXJ5QXJpdGhtZXRpY1NwZWNpYWxpemVyIHsKICBjb25zdCBUcnVuY2F0aW5nRGl2aWRlU3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLnRydW5jYXRpbmdEaXZpZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgaWYgKGhhc1VpbnQzMVJlc3VsdChpbnN0cnVjdGlvbiwgY2xvc2VkV29ybGQpKSB7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLnVpbnQzMVR5cGU7CiAgICB9CiAgICBpZiAoaW5wdXRzQXJlUG9zaXRpdmVJbnRlZ2VycyhpbnN0cnVjdGlvbiwgY2xvc2VkV29ybGQpKSB7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLnBvc2l0aXZlSW50VHlwZTsKICAgIH0KICAgIGlmIChpbnB1dHNBcmVOdW0oaW5zdHJ1Y3Rpb24sIGNsb3NlZFdvcmxkKSkgewogICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5pbnRUeXBlOwogICAgfQogICAgcmV0dXJuIHN1cGVyLmNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKTsKICB9CgogIGJvb2wgaXNOb3RaZXJvKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgaWYgKCFpbnN0cnVjdGlvbi5pc0NvbnN0YW50SW50ZWdlcigpKSByZXR1cm4gZmFsc2U7CiAgICBIQ29uc3RhbnQgcmlnaHRDb25zdGFudCA9IGluc3RydWN0aW9uOwogICAgSW50Q29uc3RhbnRWYWx1ZSBpbnRDb25zdGFudCA9IHJpZ2h0Q29uc3RhbnQuY29uc3RhbnQ7CiAgICBCaWdJbnQgY291bnQgPSBpbnRDb25zdGFudC5pbnRWYWx1ZTsKICAgIHJldHVybiBjb3VudCAhPSBCaWdJbnQuemVybzsKICB9CgogIGJvb2wgaXNUd29PckdyZWF0ZXIoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBpZiAoIWluc3RydWN0aW9uLmlzQ29uc3RhbnRJbnRlZ2VyKCkpIHJldHVybiBmYWxzZTsKICAgIEhDb25zdGFudCByaWdodENvbnN0YW50ID0gaW5zdHJ1Y3Rpb247CiAgICBJbnRDb25zdGFudFZhbHVlIGludENvbnN0YW50ID0gcmlnaHRDb25zdGFudC5jb25zdGFudDsKICAgIEJpZ0ludCBjb3VudCA9IGludENvbnN0YW50LmludFZhbHVlOwogICAgcmV0dXJuIGNvdW50ID49IEJpZ0ludC50d287CiAgfQoKICBib29sIGhhc1VpbnQzMVJlc3VsdChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24sIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgSEluc3RydWN0aW9uIGxlZnQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMV07CiAgICBISW5zdHJ1Y3Rpb24gcmlnaHQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMl07CiAgICBpZiAocmlnaHQKICAgICAgICAuaXNQb3NpdGl2ZUludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBpZiAobGVmdC5pc1VJbnQzMShjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgICBpc05vdFplcm8ocmlnaHQpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgaWYgKGxlZnQuaXNVSW50MzIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgICAgaXNUd29PckdyZWF0ZXIocmlnaHQpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB0cnlDb252ZXJ0VG9CdWlsdGluKAogICAgICBISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgSEdyYXBoIGdyYXBoLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLAogICAgICBKQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2cpIHsKICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IGluc3RydWN0aW9uLmlucHV0c1syXTsKICAgIGlmIChpc0J1aWx0aW4oaW5zdHJ1Y3Rpb24sIGNsb3NlZFdvcmxkKSkgewogICAgICBpZiAocmlnaHQKICAgICAgICAgICAgICAuaXNQb3NpdGl2ZUludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgICAgaXNOb3RaZXJvKHJpZ2h0KSkgewogICAgICAgIGlmIChoYXNVaW50MzFSZXN1bHQoaW5zdHJ1Y3Rpb24sIGNsb3NlZFdvcmxkKSkgewogICAgICAgICAgSEluc3RydWN0aW9uIGNvbnZlcnRlZCA9CiAgICAgICAgICAgICAgbmV3QnVpbHRpblZhcmlhbnQoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKTsKICAgICAgICAgIGlmIChsb2cgIT0gbnVsbCkgewogICAgICAgICAgICByZWdpc3Rlck9wdGltaXphdGlvbihsb2csIGluc3RydWN0aW9uLCBjb252ZXJ0ZWQpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGNvbnZlcnRlZDsKICAgICAgICB9CiAgICAgICAgLy8gV2UgY2FuIGNhbGwgX3RkaXZGYXN0IGJlY2F1c2UgdGhlIHJocyBpcyBhIDMyYml0IGludGVnZXIKICAgICAgICAvLyBhbmQgbm90IDAsIG5vciAtMS4KICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciA9IHJlbmFtZVRvT3B0aW1pemVkU2VsZWN0b3IoCiAgICAgICAgICAgICdfdGRpdkZhc3QnLCBpbnN0cnVjdGlvbi5zZWxlY3RvciwgY29tbW9uRWxlbWVudHMpOwogICAgICAgIGlmIChsb2cgIT0gbnVsbCkgewogICAgICAgICAgcmVnaXN0ZXJPcHRpbWl6YXRpb24obG9nLCBpbnN0cnVjdGlvbiwgbnVsbCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNsZWFyQWxsU2lkZUVmZmVjdHMoaW5zdHJ1Y3Rpb24pOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gbmV3QnVpbHRpblZhcmlhbnQoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIG5ldyBIVHJ1bmNhdGluZ0RpdmlkZSgKICAgICAgICBpbnN0cnVjdGlvbi5pbnB1dHNbMV0sCiAgICAgICAgaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdLAogICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yLAogICAgICAgIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyT3B0aW1pemF0aW9uKAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZywgSEluc3RydWN0aW9uIG9yaWdpbmFsLCBISW5zdHJ1Y3Rpb24gY29udmVydGVkKSB7CiAgICBsb2cucmVnaXN0ZXJUcnVuY2F0aW5nRGl2aWRlKG9yaWdpbmFsLCBjb252ZXJ0ZWQpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgQmluYXJ5Qml0T3BTcGVjaWFsaXplciBleHRlbmRzIEJpbmFyeUFyaXRobWV0aWNTcGVjaWFsaXplciB7CiAgY29uc3QgQmluYXJ5Qml0T3BTcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgLy8gQWxsIGJpdHdpc2Ugb3BlcmF0aW9ucyBvbiBudW1iZXIgdHlwZXMgZWl0aGVyIHByb2R1Y2UgYW4gdW5zaWduZWQgMzItYml0CiAgICAvLyBpbnRlZ2VyIG9yIHRocm93IGFuIGVycm9yLgogICAgSEluc3RydWN0aW9uIGxlZnQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMV07CiAgICBpZiAobGVmdC5pc051bWJlck9yTnVsbChjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLnVpbnQzMlR5cGU7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpOwogIH0KCiAgYm9vbCBhcmd1bWVudExlc3NUaGFuMzIoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICByZXR1cm4gYXJndW1lbnRJblJhbmdlKGluc3RydWN0aW9uLCAwLCAzMSk7CiAgfQoKICBib29sIGFyZ3VtZW50SW5SYW5nZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24sIGludCBsb3csIGludCBoaWdoKSB7CiAgICBpZiAoaW5zdHJ1Y3Rpb24uaXNDb25zdGFudEludGVnZXIoKSkgewogICAgICBIQ29uc3RhbnQgcmlnaHRDb25zdGFudCA9IGluc3RydWN0aW9uOwogICAgICBJbnRDb25zdGFudFZhbHVlIGludENvbnN0YW50ID0gcmlnaHRDb25zdGFudC5jb25zdGFudDsKICAgICAgaW50IHZhbHVlID0gaW50Q29uc3RhbnQuaW50VmFsdWUudG9JbnQoKTsKICAgICAgYXNzZXJ0KGludENvbnN0YW50LmludFZhbHVlID09CiAgICAgICAgICBuZXcgQmlnSW50LmZyb20oaW50Q29uc3RhbnQuaW50VmFsdWUudG9JbnQoKSkpOwogICAgICByZXR1cm4gdmFsdWUgPj0gbG93ICYmIHZhbHVlIDw9IGhpZ2g7CiAgICB9CiAgICAvLyBUT0RPKHNyYSk6IEludGVncmF0ZSB3aXRoIHRoZSBiaXQtd2lkdGggYW5hbHlzaXMgaW4gY29kZWdlbi5kYXJ0LgogICAgaWYgKGluc3RydWN0aW9uIGlzIEhCaXRBbmQpIHsKICAgICAgcmV0dXJuIGxvdyA9PSAwICYmCiAgICAgICAgICAoYXJndW1lbnRJblJhbmdlKGluc3RydWN0aW9uLmlucHV0c1swXSwgbG93LCBoaWdoKSB8fAogICAgICAgICAgICAgIGFyZ3VtZW50SW5SYW5nZShpbnN0cnVjdGlvbi5pbnB1dHNbMV0sIGxvdywgaGlnaCkpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgYm9vbCBpc1Bvc2l0aXZlKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICAvLyBUT0RPOiBXZSBzaG91bGQgdXNlIHRoZSB2YWx1ZSByYW5nZSBhbmFseXNpcy4gQ3VycmVudGx5LCByYW5nZXMKICAgIC8vIGFyZSBkaXNjYXJkZWQganVzdCBhZnRlciB0aGUgYW5hbHlzaXMuCiAgICByZXR1cm4gaW5zdHJ1Y3Rpb24KICAgICAgICAuaXNQb3NpdGl2ZUludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZTsKICB9Cn0KCmNsYXNzIFNoaWZ0TGVmdFNwZWNpYWxpemVyIGV4dGVuZHMgQmluYXJ5Qml0T3BTcGVjaWFsaXplciB7CiAgY29uc3QgU2hpZnRMZWZ0U3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLnNoaWZ0TGVmdDsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB0cnlDb252ZXJ0VG9CdWlsdGluKAogICAgICBISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgSEdyYXBoIGdyYXBoLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLAogICAgICBKQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2cpIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdOwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdOwogICAgaWYgKGxlZnQuaXNOdW1iZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBpZiAoYXJndW1lbnRMZXNzVGhhbjMyKHJpZ2h0KSkgewogICAgICAgIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQgPQogICAgICAgICAgICBuZXdCdWlsdGluVmFyaWFudChpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpOwogICAgICAgIGlmIChsb2cgIT0gbnVsbCkgewogICAgICAgICAgcmVnaXN0ZXJPcHRpbWl6YXRpb24obG9nLCBpbnN0cnVjdGlvbiwgY29udmVydGVkKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvbnZlcnRlZDsKICAgICAgfQogICAgICAvLyBFdmVuIGlmIHRoZXJlIGlzIG5vIGJ1aWx0aW4gZXF1aXZhbGVudCBpbnN0cnVjdGlvbiwgd2Uga25vdwogICAgICAvLyB0aGUgaW5zdHJ1Y3Rpb24gZG9lcyBub3QgaGF2ZSBhbnkgc2lkZSBlZmZlY3QsIGFuZCB0aGF0IGl0CiAgICAgIC8vIGNhbiBiZSBHVk4nZWQuCiAgICAgIGNsZWFyQWxsU2lkZUVmZmVjdHMoaW5zdHJ1Y3Rpb24pOwogICAgICBpZiAoaXNQb3NpdGl2ZShyaWdodCwgY2xvc2VkV29ybGQpKSB7CiAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IgPSByZW5hbWVUb09wdGltaXplZFNlbGVjdG9yKAogICAgICAgICAgICAnX3NobFBvc2l0aXZlJywgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsIGNvbW1vbkVsZW1lbnRzKTsKICAgICAgfQogICAgICBpZiAobG9nICE9IG51bGwpIHsKICAgICAgICByZWdpc3Rlck9wdGltaXphdGlvbihsb2csIGluc3RydWN0aW9uLCBudWxsKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gbmV3QnVpbHRpblZhcmlhbnQoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIG5ldyBIU2hpZnRMZWZ0KAogICAgICAgIGluc3RydWN0aW9uLmlucHV0c1sxXSwKICAgICAgICBpbnN0cnVjdGlvbi5pbnB1dHNbMl0sCiAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsCiAgICAgICAgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJPcHRpbWl6YXRpb24oCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nLCBISW5zdHJ1Y3Rpb24gb3JpZ2luYWwsIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQpIHsKICAgIGxvZy5yZWdpc3RlclNoaWZ0TGVmdChvcmlnaW5hbCwgY29udmVydGVkKTsKICB9Cn0KCmNsYXNzIFNoaWZ0UmlnaHRTcGVjaWFsaXplciBleHRlbmRzIEJpbmFyeUJpdE9wU3BlY2lhbGl6ZXIgewogIGNvbnN0IFNoaWZ0UmlnaHRTcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgSEluc3RydWN0aW9uIGxlZnQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMV07CiAgICBpZiAobGVmdC5pc1VJbnQzMihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBsZWZ0Lmluc3RydWN0aW9uVHlwZTsKICAgIH0KICAgIHJldHVybiBzdXBlci5jb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdHJ5Q29udmVydFRvQnVpbHRpbigKICAgICAgSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEhHcmFwaCBncmFwaCwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywKICAgICAgSkNvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nKSB7CiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IGluc3RydWN0aW9uLmlucHV0c1sxXTsKICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IGluc3RydWN0aW9uLmlucHV0c1syXTsKICAgIGlmIChsZWZ0LmlzTnVtYmVyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgaWYgKGFyZ3VtZW50TGVzc1RoYW4zMihyaWdodCkgJiYgaXNQb3NpdGl2ZShsZWZ0LCBjbG9zZWRXb3JsZCkpIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gY29udmVydGVkID0KICAgICAgICAgICAgbmV3QnVpbHRpblZhcmlhbnQoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKTsKICAgICAgICBpZiAobG9nICE9IG51bGwpIHsKICAgICAgICAgIHJlZ2lzdGVyT3B0aW1pemF0aW9uKGxvZywgaW5zdHJ1Y3Rpb24sIGNvbnZlcnRlZCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBjb252ZXJ0ZWQ7CiAgICAgIH0KICAgICAgLy8gRXZlbiBpZiB0aGVyZSBpcyBubyBidWlsdGluIGVxdWl2YWxlbnQgaW5zdHJ1Y3Rpb24sIHdlIGtub3cKICAgICAgLy8gdGhlIGluc3RydWN0aW9uIGRvZXMgbm90IGhhdmUgYW55IHNpZGUgZWZmZWN0LCBhbmQgdGhhdCBpdAogICAgICAvLyBjYW4gYmUgR1ZOJ2VkLgogICAgICBjbGVhckFsbFNpZGVFZmZlY3RzKGluc3RydWN0aW9uKTsKICAgICAgaWYgKGlzUG9zaXRpdmUocmlnaHQsIGNsb3NlZFdvcmxkKSAmJiBpc1Bvc2l0aXZlKGxlZnQsIGNsb3NlZFdvcmxkKSkgewogICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yID0gcmVuYW1lVG9PcHRpbWl6ZWRTZWxlY3RvcigKICAgICAgICAgICAgJ19zaHJCb3RoUG9zaXRpdmUnLCBpbnN0cnVjdGlvbi5zZWxlY3RvciwgY29tbW9uRWxlbWVudHMpOwogICAgICAgIGlmIChsb2cgIT0gbnVsbCkgewogICAgICAgICAgcmVnaXN0ZXJPcHRpbWl6YXRpb24obG9nLCBpbnN0cnVjdGlvbiwgbnVsbCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGlzUG9zaXRpdmUobGVmdCwgY2xvc2VkV29ybGQpICYmCiAgICAgICAgICByaWdodC5pc051bWJlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IgPSByZW5hbWVUb09wdGltaXplZFNlbGVjdG9yKAogICAgICAgICAgICAnX3NoclJlY2VpdmVyUG9zaXRpdmUnLCBpbnN0cnVjdGlvbi5zZWxlY3RvciwgY29tbW9uRWxlbWVudHMpOwogICAgICAgIGlmIChsb2cgIT0gbnVsbCkgewogICAgICAgICAgcmVnaXN0ZXJPcHRpbWl6YXRpb24obG9nLCBpbnN0cnVjdGlvbiwgbnVsbCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGlzUG9zaXRpdmUocmlnaHQsIGNsb3NlZFdvcmxkKSkgewogICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yID0gcmVuYW1lVG9PcHRpbWl6ZWRTZWxlY3RvcigKICAgICAgICAgICAgJ19zaHJPdGhlclBvc2l0aXZlJywgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsIGNvbW1vbkVsZW1lbnRzKTsKICAgICAgICBpZiAobG9nICE9IG51bGwpIHsKICAgICAgICAgIHJlZ2lzdGVyT3B0aW1pemF0aW9uKGxvZywgaW5zdHJ1Y3Rpb24sIG51bGwpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gbmV3QnVpbHRpblZhcmlhbnQoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIG5ldyBIU2hpZnRSaWdodCgKICAgICAgICBpbnN0cnVjdGlvbi5pbnB1dHNbMV0sCiAgICAgICAgaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdLAogICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yLAogICAgICAgIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uc2hpZnRSaWdodDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJPcHRpbWl6YXRpb24oCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nLCBISW5zdHJ1Y3Rpb24gb3JpZ2luYWwsIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQpIHsKICAgIGxvZy5yZWdpc3RlclNoaWZ0UmlnaHQob3JpZ2luYWwsIGNvbnZlcnRlZCk7CiAgfQp9CgpjbGFzcyBCaXRPclNwZWNpYWxpemVyIGV4dGVuZHMgQmluYXJ5Qml0T3BTcGVjaWFsaXplciB7CiAgY29uc3QgQml0T3JTcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uYml0T3I7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgSEluc3RydWN0aW9uIGxlZnQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMV07CiAgICBISW5zdHJ1Y3Rpb24gcmlnaHQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMl07CiAgICBpZiAobGVmdC5pc1VJbnQzMShjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgcmlnaHQuaXNVSW50MzEoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi51aW50MzFUeXBlOwogICAgfQogICAgcmV0dXJuIHN1cGVyLmNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBuZXdCdWlsdGluVmFyaWFudChISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gbmV3IEhCaXRPcigKICAgICAgICBpbnN0cnVjdGlvbi5pbnB1dHNbMV0sCiAgICAgICAgaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdLAogICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yLAogICAgICAgIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyT3B0aW1pemF0aW9uKAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZywgSEluc3RydWN0aW9uIG9yaWdpbmFsLCBISW5zdHJ1Y3Rpb24gY29udmVydGVkKSB7CiAgICBsb2cucmVnaXN0ZXJCaXRPcihvcmlnaW5hbCwgY29udmVydGVkKTsKICB9Cn0KCmNsYXNzIEJpdEFuZFNwZWNpYWxpemVyIGV4dGVuZHMgQmluYXJ5Qml0T3BTcGVjaWFsaXplciB7CiAgY29uc3QgQml0QW5kU3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmJpdEFuZDsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IGluc3RydWN0aW9uLmlucHV0c1sxXTsKICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IGluc3RydWN0aW9uLmlucHV0c1syXTsKICAgIGlmIChsZWZ0CiAgICAgICAgICAgIC5pc1ByaW1pdGl2ZU9yTnVsbChjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgIChsZWZ0LmlzVUludDMxKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUgfHwKICAgICAgICAgICAgcmlnaHQuaXNVSW50MzEoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkpIHsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4udWludDMxVHlwZTsKICAgIH0KICAgIHJldHVybiBzdXBlci5jb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gbmV3QnVpbHRpblZhcmlhbnQoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIG5ldyBIQml0QW5kKAogICAgICAgIGluc3RydWN0aW9uLmlucHV0c1sxXSwKICAgICAgICBpbnN0cnVjdGlvbi5pbnB1dHNbMl0sCiAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsCiAgICAgICAgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJPcHRpbWl6YXRpb24oCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nLCBISW5zdHJ1Y3Rpb24gb3JpZ2luYWwsIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQpIHsKICAgIGxvZy5yZWdpc3RlckJpdEFuZChvcmlnaW5hbCwgY29udmVydGVkKTsKICB9Cn0KCmNsYXNzIEJpdFhvclNwZWNpYWxpemVyIGV4dGVuZHMgQmluYXJ5Qml0T3BTcGVjaWFsaXplciB7CiAgY29uc3QgQml0WG9yU3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmJpdFhvcjsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IGluc3RydWN0aW9uLmlucHV0c1sxXTsKICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IGluc3RydWN0aW9uLmlucHV0c1syXTsKICAgIGlmIChsZWZ0LmlzVUludDMxKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICByaWdodC5pc1VJbnQzMShjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLnVpbnQzMVR5cGU7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIG5ld0J1aWx0aW5WYXJpYW50KEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBuZXcgSEJpdFhvcigKICAgICAgICBpbnN0cnVjdGlvbi5pbnB1dHNbMV0sCiAgICAgICAgaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdLAogICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yLAogICAgICAgIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyT3B0aW1pemF0aW9uKAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZywgSEluc3RydWN0aW9uIG9yaWdpbmFsLCBISW5zdHJ1Y3Rpb24gY29udmVydGVkKSB7CiAgICBsb2cucmVnaXN0ZXJCaXRYb3Iob3JpZ2luYWwsIGNvbnZlcnRlZCk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBSZWxhdGlvbmFsU3BlY2lhbGl6ZXIgZXh0ZW5kcyBJbnZva2VEeW5hbWljU3BlY2lhbGl6ZXIgewogIGNvbnN0IFJlbGF0aW9uYWxTcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgaWYgKGluc3RydWN0aW9uLmlucHV0c1sxXQogICAgICAgIC5pc1ByaW1pdGl2ZU9yTnVsbChjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlOwogICAgfQogICAgcmV0dXJuIHN1cGVyLmNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB0cnlDb252ZXJ0VG9CdWlsdGluKAogICAgICBISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgSEdyYXBoIGdyYXBoLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLAogICAgICBKQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2cpIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdOwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdOwogICAgaWYgKGxlZnQuaXNOdW1iZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgIHJpZ2h0LmlzTnVtYmVyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgSEluc3RydWN0aW9uIGNvbnZlcnRlZCA9IG5ld0J1aWx0aW5WYXJpYW50KGluc3RydWN0aW9uLCBjbG9zZWRXb3JsZCk7CiAgICAgIGlmIChsb2cgIT0gbnVsbCkgewogICAgICAgIHJlZ2lzdGVyT3B0aW1pemF0aW9uKGxvZywgaW5zdHJ1Y3Rpb24sIGNvbnZlcnRlZCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvbnZlcnRlZDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgSEluc3RydWN0aW9uIG5ld0J1aWx0aW5WYXJpYW50KAogICAgICBISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKTsKCiAgdm9pZCByZWdpc3Rlck9wdGltaXphdGlvbigKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2csIEhJbnN0cnVjdGlvbiBvcmlnaW5hbCwgSEluc3RydWN0aW9uIGNvbnZlcnRlZCk7Cn0KCmNsYXNzIEVxdWFsc1NwZWNpYWxpemVyIGV4dGVuZHMgUmVsYXRpb25hbFNwZWNpYWxpemVyIHsKICBjb25zdCBFcXVhbHNTcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdHJ5Q29udmVydFRvQnVpbHRpbigKICAgICAgSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEhHcmFwaCBncmFwaCwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywKICAgICAgSkNvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nKSB7CiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IGluc3RydWN0aW9uLmlucHV0c1sxXTsKICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IGluc3RydWN0aW9uLmlucHV0c1syXTsKICAgIEFic3RyYWN0VmFsdWUgaW5zdHJ1Y3Rpb25UeXBlID0gbGVmdC5pbnN0cnVjdGlvblR5cGU7CiAgICBpZiAocmlnaHQuaXNDb25zdGFudE51bGwoKSB8fAogICAgICAgIGxlZnQKICAgICAgICAgICAgLmlzUHJpbWl0aXZlT3JOdWxsKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQgPSBuZXdCdWlsdGluVmFyaWFudChpbnN0cnVjdGlvbiwgY2xvc2VkV29ybGQpOwogICAgICBpZiAobG9nICE9IG51bGwpIHsKICAgICAgICByZWdpc3Rlck9wdGltaXphdGlvbihsb2csIGluc3RydWN0aW9uLCBjb252ZXJ0ZWQpOwogICAgICB9CiAgICAgIHJldHVybiBjb252ZXJ0ZWQ7CiAgICB9CiAgICBpZiAoY2xvc2VkV29ybGQuaW5jbHVkZXNDbG9zdXJlQ2FsbCgKICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciwgaW5zdHJ1Y3Rpb25UeXBlKSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gbWF0Y2hlcyA9CiAgICAgICAgY2xvc2VkV29ybGQubG9jYXRlTWVtYmVycyhpbnN0cnVjdGlvbi5zZWxlY3RvciwgaW5zdHJ1Y3Rpb25UeXBlKTsKICAgIC8vIFRoaXMgdGVzdCByZWxpZXMgb24gYE9iamVjdC49PWAgYW5kIGBJbnRlcmNlcHRvci49PWAgYWx3YXlzIGJlaW5nCiAgICAvLyBpbXBsZW1lbnRlZCBiZWNhdXNlIGlmIHRoZSBzZWxlY3RvciBtYXRjaGVzIGJ5IHN1YnR5cGUsIGl0IHN0aWxsIHdpbGwgYmUKICAgIC8vIGEgcmVndWxhciBvYmplY3Qgb3IgYW4gaW50ZXJjZXB0b3IuCiAgICBpZiAobWF0Y2hlcwogICAgICAgIC5ldmVyeShjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5pc0RlZmF1bHRFcXVhbGl0eUltcGxlbWVudGF0aW9uKSkgewogICAgICBISW5zdHJ1Y3Rpb24gY29udmVydGVkID0gbmV3QnVpbHRpblZhcmlhbnQoaW5zdHJ1Y3Rpb24sIGNsb3NlZFdvcmxkKTsKICAgICAgaWYgKGxvZyAhPSBudWxsKSB7CiAgICAgICAgcmVnaXN0ZXJPcHRpbWl6YXRpb24obG9nLCBpbnN0cnVjdGlvbiwgY29udmVydGVkKTsKICAgICAgfQogICAgICByZXR1cm4gY29udmVydGVkOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uZXF1YWw7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gbmV3QnVpbHRpblZhcmlhbnQoCiAgICAgIEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBuZXcgSElkZW50aXR5KGluc3RydWN0aW9uLmlucHV0c1sxXSwgaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdLAogICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yLCBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJPcHRpbWl6YXRpb24oCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nLCBISW5zdHJ1Y3Rpb24gb3JpZ2luYWwsIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQpIHsKICAgIGxvZy5yZWdpc3RlckVxdWFscyhvcmlnaW5hbCwgY29udmVydGVkKTsKICB9Cn0KCmNsYXNzIExlc3NTcGVjaWFsaXplciBleHRlbmRzIFJlbGF0aW9uYWxTcGVjaWFsaXplciB7CiAgY29uc3QgTGVzc1NwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5sZXNzOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIG5ld0J1aWx0aW5WYXJpYW50KAogICAgICBISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gbmV3IEhMZXNzKGluc3RydWN0aW9uLmlucHV0c1sxXSwgaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdLAogICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yLCBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJPcHRpbWl6YXRpb24oCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nLCBISW5zdHJ1Y3Rpb24gb3JpZ2luYWwsIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQpIHsKICAgIGxvZy5yZWdpc3Rlckxlc3Mob3JpZ2luYWwsIGNvbnZlcnRlZCk7CiAgfQp9CgpjbGFzcyBHcmVhdGVyU3BlY2lhbGl6ZXIgZXh0ZW5kcyBSZWxhdGlvbmFsU3BlY2lhbGl6ZXIgewogIGNvbnN0IEdyZWF0ZXJTcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uZ3JlYXRlcjsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBuZXdCdWlsdGluVmFyaWFudCgKICAgICAgSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIG5ldyBIR3JlYXRlcihpbnN0cnVjdGlvbi5pbnB1dHNbMV0sIGluc3RydWN0aW9uLmlucHV0c1syXSwKICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciwgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyT3B0aW1pemF0aW9uKAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZywgSEluc3RydWN0aW9uIG9yaWdpbmFsLCBISW5zdHJ1Y3Rpb24gY29udmVydGVkKSB7CiAgICBsb2cucmVnaXN0ZXJHcmVhdGVyKG9yaWdpbmFsLCBjb252ZXJ0ZWQpOwogIH0KfQoKY2xhc3MgR3JlYXRlckVxdWFsU3BlY2lhbGl6ZXIgZXh0ZW5kcyBSZWxhdGlvbmFsU3BlY2lhbGl6ZXIgewogIGNvbnN0IEdyZWF0ZXJFcXVhbFNwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5ncmVhdGVyRXF1YWw7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gbmV3QnVpbHRpblZhcmlhbnQoCiAgICAgIEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBuZXcgSEdyZWF0ZXJFcXVhbChpbnN0cnVjdGlvbi5pbnB1dHNbMV0sIGluc3RydWN0aW9uLmlucHV0c1syXSwKICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciwgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyT3B0aW1pemF0aW9uKAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZywgSEluc3RydWN0aW9uIG9yaWdpbmFsLCBISW5zdHJ1Y3Rpb24gY29udmVydGVkKSB7CiAgICBsb2cucmVnaXN0ZXJHcmVhdGVyRXF1YWwob3JpZ2luYWwsIGNvbnZlcnRlZCk7CiAgfQp9CgpjbGFzcyBMZXNzRXF1YWxTcGVjaWFsaXplciBleHRlbmRzIFJlbGF0aW9uYWxTcGVjaWFsaXplciB7CiAgY29uc3QgTGVzc0VxdWFsU3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmxlc3NFcXVhbDsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBuZXdCdWlsdGluVmFyaWFudCgKICAgICAgSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIG5ldyBITGVzc0VxdWFsKGluc3RydWN0aW9uLmlucHV0c1sxXSwgaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdLAogICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yLCBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJPcHRpbWl6YXRpb24oCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nLCBISW5zdHJ1Y3Rpb24gb3JpZ2luYWwsIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQpIHsKICAgIGxvZy5yZWdpc3Rlckxlc3NFcXVhbChvcmlnaW5hbCwgY29udmVydGVkKTsKICB9Cn0KCmNsYXNzIENvZGVVbml0QXRTcGVjaWFsaXplciBleHRlbmRzIEludm9rZUR5bmFtaWNTcGVjaWFsaXplciB7CiAgY29uc3QgQ29kZVVuaXRBdFNwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5jb2RlVW5pdEF0OwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHRyeUNvbnZlcnRUb0J1aWx0aW4oCiAgICAgIEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBIR3JhcGggZ3JhcGgsCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsCiAgICAgIEpDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZykgewogICAgLy8gVE9ETyhzcmEpOiBJbXBsZW1lbnQgYSBidWlsdGluIEhDb2RlVW5pdEF0IGluc3RydWN0aW9uIGFuZCB0aGUgc2FtZSBpbmRleAogICAgLy8gYm91bmRzIGNoZWNraW5nIG9wdGltaXphdGlvbnMgYXMgZm9yIEhJbmRleC4KICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciA9IGluc3RydWN0aW9uLmdldERhcnRSZWNlaXZlcihjbG9zZWRXb3JsZCk7CiAgICBpZiAocmVjZWl2ZXIKICAgICAgICAuaXNTdHJpbmdPck51bGwoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAvLyBFdmVuIGlmIHRoZXJlIGlzIG5vIGJ1aWx0aW4gZXF1aXZhbGVudCBpbnN0cnVjdGlvbiwgd2Uga25vdwogICAgICAvLyBTdHJpbmcuY29kZVVuaXRBdCBkb2VzIG5vdCBoYXZlIGFueSBzaWRlIGVmZmVjdCAob3RoZXIgdGhhbiB0aHJvd2luZyksCiAgICAgIC8vIGFuZCB0aGF0IGl0IGNhbiBiZSBHVk4nZWQuCiAgICAgIGNsZWFyQWxsU2lkZUVmZmVjdHMoaW5zdHJ1Y3Rpb24pOwogICAgICBpZiAoaW5zdHJ1Y3Rpb24uaW5wdXRzLmxhc3QKICAgICAgICAgIC5pc1Bvc2l0aXZlSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciA9IHJlbmFtZVRvT3B0aW1pemVkU2VsZWN0b3IoCiAgICAgICAgICAgICdfY29kZVVuaXRBdCcsIGluc3RydWN0aW9uLnNlbGVjdG9yLCBjb21tb25FbGVtZW50cyk7CiAgICAgIH0KICAgICAgbG9nPy5yZWdpc3RlckNvZGVVbml0QXQoaW5zdHJ1Y3Rpb24pOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQp9CgpjbGFzcyBDb21wYXJlVG9TcGVjaWFsaXplciBleHRlbmRzIEludm9rZUR5bmFtaWNTcGVjaWFsaXplciB7CiAgY29uc3QgQ29tcGFyZVRvU3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHRyeUNvbnZlcnRUb0J1aWx0aW4oCiAgICAgIEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBIR3JhcGggZ3JhcGgsCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsCiAgICAgIEpDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZykgewogICAgSEluc3RydWN0aW9uIHJlY2VpdmVyID0gaW5zdHJ1Y3Rpb24uZ2V0RGFydFJlY2VpdmVyKGNsb3NlZFdvcmxkKTsKICAgIC8vIGBjb21wYXJlVG9gIGhhcyBubyBzaWRlLWVmZmVjdCAob3RoZXIgdGhhbiB0aHJvd2luZykgYW5kIGNhbiBiZSBHVk4nZWQKICAgIC8vIGZvciBzb21lIGtub3duIHR5cGVzLgogICAgaWYgKHJlY2VpdmVyCiAgICAgICAgICAgIC5pc1N0cmluZ09yTnVsbChjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSB8fAogICAgICAgIHJlY2VpdmVyCiAgICAgICAgICAgIC5pc051bWJlck9yTnVsbChjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAvLyBSZXBsYWNlIGBhLmNvbXBhcmVUbyhhKWAgd2l0aCBgMGAsIGJ1dCBvbmx5IGlmIHJlY2VpdmVyIGFuZCBhcmd1bWVudAogICAgICAvLyBhcmUgc3VjaCB0aGF0IG5vIGV4Y2VwdGlvbnMgY2FuIGJlIHRocm93bi4KICAgICAgSEluc3RydWN0aW9uIGFyZ3VtZW50ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzLmxhc3Q7CiAgICAgIGlmICgocmVjZWl2ZXIKICAgICAgICAgICAgICAgICAgLmlzTnVtYmVyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgICAgICAgYXJndW1lbnQKICAgICAgICAgICAgICAgICAgLmlzTnVtYmVyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB8fAogICAgICAgICAgKHJlY2VpdmVyCiAgICAgICAgICAgICAgICAgIC5pc1N0cmluZyhjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgICAgICAgIGFyZ3VtZW50CiAgICAgICAgICAgICAgICAgIC5pc1N0cmluZyhjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkpIHsKICAgICAgICBpZiAoaWRlbnRpY2FsKHJlY2VpdmVyLm5vbkNoZWNrKCksIGFyZ3VtZW50Lm5vbkNoZWNrKCkpKSB7CiAgICAgICAgICBISW5zdHJ1Y3Rpb24gY29udmVydGVkID0gZ3JhcGguYWRkQ29uc3RhbnRJbnQoMCwgY2xvc2VkV29ybGQpOwogICAgICAgICAgbG9nPy5yZWdpc3RlckNvbXBhcmVUbyhpbnN0cnVjdGlvbiwgY29udmVydGVkKTsKICAgICAgICAgIHJldHVybiBjb252ZXJ0ZWQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNsZWFyQWxsU2lkZUVmZmVjdHMoaW5zdHJ1Y3Rpb24pOwogICAgICBsb2c/LnJlZ2lzdGVyQ29tcGFyZVRvKGluc3RydWN0aW9uKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgSWRlbXBvdGVudFN0cmluZ09wZXJhdGlvblNwZWNpYWxpemVyCiAgICBleHRlbmRzIEludm9rZUR5bmFtaWNTcGVjaWFsaXplciB7CiAgY29uc3QgSWRlbXBvdGVudFN0cmluZ09wZXJhdGlvblNwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB0cnlDb252ZXJ0VG9CdWlsdGluKAogICAgICBISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgSEdyYXBoIGdyYXBoLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLAogICAgICBKQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2cpIHsKICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciA9IGluc3RydWN0aW9uLmdldERhcnRSZWNlaXZlcihjbG9zZWRXb3JsZCk7CiAgICBpZiAocmVjZWl2ZXIKICAgICAgICAuaXNTdHJpbmdPck51bGwoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAvLyBTdHJpbmcueHh4IGRvZXMgbm90IGhhdmUgYW55IHNpZGUgZWZmZWN0IChvdGhlciB0aGFuIHRocm93aW5nKSwgYW5kIGl0CiAgICAgIC8vIGNhbiBiZSBHVk4nZWQuCiAgICAgIGNsZWFyQWxsU2lkZUVmZmVjdHMoaW5zdHJ1Y3Rpb24pOwogICAgICBpZiAobG9nICE9IG51bGwpIHsKICAgICAgICByZWdpc3Rlck9wdGltaXphdGlvbihsb2csIGluc3RydWN0aW9uKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIHJlZ2lzdGVyT3B0aW1pemF0aW9uKE9wdGltaXphdGlvblRlc3RMb2cgbG9nLCBISW5zdHJ1Y3Rpb24gb3JpZ2luYWwpOwp9CgpjbGFzcyBTdWJzdHJpbmdTcGVjaWFsaXplciBleHRlbmRzIElkZW1wb3RlbnRTdHJpbmdPcGVyYXRpb25TcGVjaWFsaXplciB7CiAgY29uc3QgU3Vic3RyaW5nU3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck9wdGltaXphdGlvbihPcHRpbWl6YXRpb25UZXN0TG9nIGxvZywgSEluc3RydWN0aW9uIG9yaWdpbmFsKSB7CiAgICBsb2cucmVnaXN0ZXJTdWJzdHJpbmcob3JpZ2luYWwpOwogIH0KfQoKY2xhc3MgVHJpbVNwZWNpYWxpemVyIGV4dGVuZHMgSWRlbXBvdGVudFN0cmluZ09wZXJhdGlvblNwZWNpYWxpemVyIHsKICBjb25zdCBUcmltU3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck9wdGltaXphdGlvbihPcHRpbWl6YXRpb25UZXN0TG9nIGxvZywgSEluc3RydWN0aW9uIG9yaWdpbmFsKSB7CiAgICBsb2cucmVnaXN0ZXJUcmltKG9yaWdpbmFsKTsKICB9Cn0KCmNsYXNzIFBhdHRlcm5NYXRjaFNwZWNpYWxpemVyIGV4dGVuZHMgSW52b2tlRHluYW1pY1NwZWNpYWxpemVyIHsKICBjb25zdCBQYXR0ZXJuTWF0Y2hTcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdHJ5Q29udmVydFRvQnVpbHRpbigKICAgICAgSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEhHcmFwaCBncmFwaCwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywKICAgICAgSkNvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nKSB7CiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSBpbnN0cnVjdGlvbi5nZXREYXJ0UmVjZWl2ZXIoY2xvc2VkV29ybGQpOwogICAgSEluc3RydWN0aW9uIHBhdHRlcm4gPSBpbnN0cnVjdGlvbi5pbnB1dHNbMl07CiAgICBpZiAocmVjZWl2ZXIKICAgICAgICAgICAgLmlzU3RyaW5nT3JOdWxsKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgcGF0dGVybgogICAgICAgICAgICAuaXNTdHJpbmdPck51bGwoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgLy8gU3RyaW5nLmNvbnRhaW5zKFN0cmluZyBzKSBkb2VzIG5vdCBoYXZlIGFueSBzaWRlIGVmZmVjdCAob3RoZXIgdGhhbgogICAgICAvLyB0aHJvd2luZyksIGFuZCBpdCBjYW4gYmUgR1ZOJ2VkLgogICAgICBjbGVhckFsbFNpZGVFZmZlY3RzKGluc3RydWN0aW9uKTsKICAgICAgbG9nPy5yZWdpc3RlclBhdHRlcm5NYXRjaChpbnN0cnVjdGlvbik7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCmNsYXNzIFJvdW5kU3BlY2lhbGl6ZXIgZXh0ZW5kcyBJbnZva2VEeW5hbWljU3BlY2lhbGl6ZXIgewogIGNvbnN0IFJvdW5kU3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLlVuYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0ucm91bmQ7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdHJ5Q29udmVydFRvQnVpbHRpbigKICAgICAgSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEhHcmFwaCBncmFwaCwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywKICAgICAgSkNvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nKSB7CiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSBpbnN0cnVjdGlvbi5nZXREYXJ0UmVjZWl2ZXIoY2xvc2VkV29ybGQpOwogICAgaWYgKHJlY2VpdmVyCiAgICAgICAgLmlzTnVtYmVyT3JOdWxsKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgLy8gRXZlbiBpZiB0aGVyZSBpcyBubyBidWlsdGluIGVxdWl2YWxlbnQgaW5zdHJ1Y3Rpb24sIHdlIGtub3cgdGhlCiAgICAgIC8vIGluc3RydWN0aW9uIGRvZXMgbm90IGhhdmUgYW55IHNpZGUgZWZmZWN0LCBhbmQgdGhhdCBpdCBjYW4gYmUgR1ZOJ2VkLgogICAgICBjbGVhckFs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QWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdub2Rlcy5kYXJ0JzsKCmNsYXNzIEhWYWxpZGF0b3IgZXh0ZW5kcyBISW5zdHJ1Y3Rpb25WaXNpdG9yIHsKICBib29sIGlzVmFsaWQgPSB0cnVlOwogIEhHcmFwaCBncmFwaDsKCiAgdm9pZCB2aXNpdEdyYXBoKEhHcmFwaCB2aXNpdGVlKSB7CiAgICBncmFwaCA9IHZpc2l0ZWU7CiAgICB2aXNpdERvbWluYXRvclRyZWUodmlzaXRlZSk7CiAgfQoKICB2b2lkIG1hcmtJbnZhbGlkKFN0cmluZyByZWFzb24pIHsKICAgIHByaW50KHJlYXNvbik7CiAgICBpc1ZhbGlkID0gZmFsc2U7CiAgfQoKICAvLyBOb3RlIHRoYXQgZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiB0aGUgU3NhIGdyYXBoIHRoZSBiYXNpYyBibG9ja3MgYXJlCiAgLy8gbm90IHJlcXVpcmVkIHRvIGJlIHZhbGlkIHlldC4KICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QmFzaWNCbG9jayhIQmFzaWNCbG9jayBibG9jaykgewogICAgY3VycmVudEJsb2NrID0gYmxvY2s7CiAgICBpZiAoIWlzVmFsaWQpIHJldHVybjsgLy8gRG9uJ3QgbmVlZCB0byBjb250aW51ZSBpZiB3ZSBhcmUgYWxyZWFkeSBpbnZhbGlkLgoKICAgIC8vIFRlc3QgdGhhdCB0aGUgbGFzdCBpbnN0cnVjdGlvbiBpcyBhIGJyYW5jaGluZyBpbnN0cnVjdGlvbiBhbmQgdGhhdCB0aGUKICAgIC8vIGJhc2ljIGJsb2NrIGNvbnRhaW5zIHRoZSBicmFuY2gtdGFyZ2V0LgogICAgaWYgKGJsb2NrLmZpcnN0ID09IG51bGwgfHwgYmxvY2subGFzdCA9PSBudWxsKSB7CiAgICAgIG1hcmtJbnZhbGlkKCJlbXB0eSBibG9jayIpOwogICAgfQogICAgaWYgKGJsb2NrLmxhc3QgaXMhIEhDb250cm9sRmxvdykgewogICAgICBtYXJrSW52YWxpZCgiYmxvY2sgZW5kcyB3aXRoIG5vbi10YWlsIG5vZGUuIik7CiAgICB9CiAgICBpZiAoYmxvY2subGFzdCBpcyBISWYgJiYgYmxvY2suc3VjY2Vzc29ycy5sZW5ndGggIT0gMikgewogICAgICBtYXJrSW52YWxpZCgiSWYgbm9kZSB3aXRob3V0IHR3byBzdWNjZXNzb3JzIik7CiAgICB9CiAgICBpZiAoYmxvY2subGFzdCBpcyBIQ29uZGl0aW9uYWxCcmFuY2ggJiYgYmxvY2suc3VjY2Vzc29ycy5sZW5ndGggIT0gMikgewogICAgICBtYXJrSW52YWxpZCgiQ29uZGl0aW9uYWwgbm9kZSB3aXRob3V0IHR3byBzdWNjZXNzb3JzIik7CiAgICB9CiAgICBpZiAoYmxvY2subGFzdCBpcyBITG9vcEJyYW5jaCkgewogICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgYmxvY2sgd2UgaW5zZXJ0ZWQgdG8gYXZvaWQgY3JpdGljYWwgZWRnZXMgc2F0aXNmaWVzCiAgICAgIC8vIG91ciBhc3N1bXB0aW9ucy4gVGhhdCBpcywgaXQgbXVzdCBub3QgY29udGFpbiBhbnkgaW5zdHJ1Y3Rpb25zCiAgICAgIC8vIChhbHRob3VnaCBpdCBtYXkgY29udGFpbiBwaGktdXBkYXRlcykuCiAgICAgIEhCYXNpY0Jsb2NrIGF2b2lkQ3JpdGljYWxFZGdlQmxvY2sgPSBibG9jay5zdWNjZXNzb3JzLmxhc3Q7CiAgICAgIGlmIChhdm9pZENyaXRpY2FsRWRnZUJsb2NrLmZpcnN0IGlzISBIR290bykgewogICAgICAgIG1hcmtJbnZhbGlkKCJDcml0aWNhbCBlZGdlIGJsb2NrIGNvbnRhaW5zIGluc3RydWN0aW9ucyIpOwogICAgICB9CiAgICB9CiAgICBpZiAoYmxvY2subGFzdCBpcyBIR290byAmJiBibG9jay5zdWNjZXNzb3JzLmxlbmd0aCAhPSAxKSB7CiAgICAgIG1hcmtJbnZhbGlkKCJHb3RvIG5vZGUgd2l0aCBub3QgZXhhY3RseSBvbmUgc3VjY2Vzc29yIik7CiAgICB9CiAgICBpZiAoYmxvY2subGFzdCBpcyBISnVtcCAmJiBibG9jay5zdWNjZXNzb3JzLmxlbmd0aCAhPSAxKSB7CiAgICAgIG1hcmtJbnZhbGlkKCJCcmVhayBvciBjb250aW51ZSBub2RlIHdpdGhvdXQgb25lIHN1Y2Nlc3NvciIpOwogICAgfQogICAgaWYgKChibG9jay5sYXN0IGlzIEhSZXR1cm4gfHwgYmxvY2subGFzdCBpcyBIVGhyb3cpICYmCiAgICAgICAgKGJsb2NrLnN1Y2Nlc3NvcnMubGVuZ3RoICE9IDEgfHwgIWJsb2NrLnN1Y2Nlc3NvcnNbMF0uaXNFeGl0QmxvY2soKSkpIHsKICAgICAgbWFya0ludmFsaWQoIlJldHVybiBvciB0aHJvdyBub2RlIHdpdGggPiAxIHN1Y2Nlc3NvciAiCiAgICAgICAgICAib3Igbm90IGdvaW5nIHRvIGV4aXQtYmxvY2siKTsKICAgIH0KICAgIGlmIChibG9jay5sYXN0IGlzIEhFeGl0ICYmICFibG9jay5zdWNjZXNzb3JzLmlzRW1wdHkpIHsKICAgICAgbWFya0ludmFsaWQoIkV4aXQgYmxvY2sgd2l0aCBzdWNjZXNzb3IiKTsKICAgIH0KCiAgICBpZiAoYmxvY2suc3VjY2Vzc29ycy5pc0VtcHR5ICYmICFibG9jay5pc0V4aXRCbG9jaygpKSB7CiAgICAgIG1hcmtJbnZhbGlkKCJOb24tZXhpdCBibG9jayB3aXRob3V0IHN1Y2Nlc3NvciIpOwogICAgfQoKICAgIC8vIENoZWNrIHRoYXQgc3VjY2Vzc29ycyBpZHMgYXJlIGFsd2F5cyBoaWdoZXIgdGhhbiB0aGUgY3VycmVudCBvbmUuCiAgICAvLyBUT0RPKGZsb2l0c2NoKTogdGhpcyBpcywgb2YgY291cnNlLCBub3QgdHJ1ZSBmb3IgYmFjay1icmFuY2hlcy4KICAgIGlmIChibG9jay5pZCA9PSBudWxsKSBtYXJrSW52YWxpZCgiYmxvY2sgd2l0aG91dCBpZCIpOwogICAgZm9yIChIQmFzaWNCbG9jayBzdWNjZXNzb3IgaW4gYmxvY2suc3VjY2Vzc29ycykgewogICAgICBpZiAoIWlzVmFsaWQpIGJyZWFrOwogICAgICBpZiAoc3VjY2Vzc29yLmlkID09IG51bGwpIG1hcmtJbnZhbGlkKCJzdWNjZXNzb3Igd2l0aG91dCBpZCIpOwogICAgICBpZiAoc3VjY2Vzc29yLmlkIDw9IGJsb2NrLmlkICYmICFzdWNjZXNzb3IuaXNMb29wSGVhZGVyKCkpIHsKICAgICAgICBtYXJrSW52YWxpZCgic3VjY2Vzc29yIHdpdGggbG93ZXIgaWQsIGJ1dCBub3QgYSBsb29wLWhlYWRlciIpOwogICAgICB9CiAgICB9CiAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBhIGNyaXRpY2FsIGVkZ2UuCiAgICBpZiAoaXNWYWxpZCAmJgogICAgICAgIGJsb2NrLnN1Y2Nlc3NvcnMubGVuZ3RoID4gMSAmJgogICAgICAgIGJsb2NrLmxhc3QgaXMhIEhUcnkgJiYKICAgICAgICBibG9jay5sYXN0IGlzISBIRXhpdFRyeSAmJgogICAgICAgIGJsb2NrLmxhc3QgaXMhIEhTd2l0Y2gpIHsKICAgICAgZm9yIChIQmFzaWNCbG9jayBzdWNjZXNzb3IgaW4gYmxvY2suc3VjY2Vzc29ycykgewogICAgICAgIGlmICghaXNWYWxpZCkgYnJlYWs7CiAgICAgICAgaWYgKHN1Y2Nlc3Nvci5wcmVkZWNlc3NvcnMubGVuZ3RoID49IDIpIHsKICAgICAgICAgIG1hcmtJbnZhbGlkKCJTU0EgZ3JhcGggY29udGFpbnMgY3JpdGljYWwgZWRnZS4iKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBDaGVjayB0aGF0IHRoZSBlbnRyaWVzIGluIHRoZSBkb21pbmF0ZWQtbGlzdCBhcmUgc29ydGVkLgogICAgaW50IGxhc3RJZCA9IDA7CiAgICBmb3IgKEhCYXNpY0Jsb2NrIGRvbWluYXRlZCBpbiBibG9jay5kb21pbmF0ZWRCbG9ja3MpIHsKICAgICAgaWYgKCFpc1ZhbGlkKSBicmVhazsKICAgICAgaWYgKCFpZGVudGljYWwoZG9taW5hdGVkLmRvbWluYXRvciwgYmxvY2spKSB7CiAgICAgICAgbWFya0ludmFsaWQoImRvbWluYXRlZCBibG9jayBub3QgcG9pbnRpbmcgYmFjayIpOwogICAgICB9CiAgICAgIGlmIChkb21pbmF0ZWQuaWQgPT0gbnVsbCB8fCBkb21pbmF0ZWQuaWQgPD0gbGFzdElkKSB7CiAgICAgICAgbWFya0ludmFsaWQoImRvbWluYXRlZC5pZCA9PSBudWxsIG9yIGRvbWluYXRlZCBoYXMgPD0gaWQiKTsKICAgICAgfQogICAgICBsYXN0SWQgPSBkb21pbmF0ZWQuaWQ7CiAgICB9CgogICAgaWYgKCFpc1ZhbGlkKSByZXR1cm47CiAgICBibG9jay5mb3JFYWNoUGhpKHZpc2l0SW5zdHJ1Y3Rpb24pOwoKICAgIC8vIENoZWNrIHRoYXQgdGhlIGJsb2NrcyBvZiB0aGUgcGFyYW1ldGVycyBvZiBhIHBoaSBhcmUgZG9taW5hdGluZyB0aGUKICAgIC8vIGNvcnJlc3BvbmRpbmcgcHJlZGVjZXNzb3IgYmxvY2suIE5vdGUgdGhhdCBhIGJsb2NrIGRvbWluYXRlcwogICAgLy8gaXRzZWxmLgogICAgYmxvY2suZm9yRWFjaFBoaSgoSFBoaSBwaGkpIHsKICAgICAgYXNzZXJ0KHBoaS5pbnB1dHMubGVuZ3RoIDw9IGJsb2NrLnByZWRlY2Vzc29ycy5sZW5ndGgpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBoaS5pbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gaW5wdXQgPSBwaGkuaW5wdXRzW2ldOwogICAgICAgIGlmICghaW5wdXQuYmxvY2suZG9taW5hdGVzKGJsb2NrLnByZWRlY2Vzc29yc1tpXSkpIHsKICAgICAgICAgIG1hcmtJbnZhbGlkKCJEZWZpbml0aW9uIGRvZXMgbm90IGRvbWluYXRlIHVzZSIpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CgogICAgLy8gQ2hlY2sgdGhhdCB0aGUgYmxvY2tzIG9mIHRoZSBpbnB1dHMgb2YgYW4gaW5zdHJ1Y3Rpb24gZG9taW5hdGUgdGhlCiAgICAvLyBpbnN0cnVjdGlvbidzIGJsb2NrLgogICAgYmxvY2suZm9yRWFjaEluc3RydWN0aW9uKChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgICAgZm9yIChISW5zdHJ1Y3Rpb24gaW5wdXQgaW4gaW5zdHJ1Y3Rpb24uaW5wdXRzKSB7CiAgICAgICAgaWYgKCFpbnB1dC5ibG9jay5kb21pbmF0ZXMoYmxvY2spKSB7CiAgICAgICAgICBtYXJrSW52YWxpZCgiRGVmaW5pdGlvbiBkb2VzIG5vdCBkb21pbmF0ZSB1c2UiKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwoKICAgIHN1cGVyLnZpc2l0QmFzaWNCbG9jayhibG9jayk7CiAgfQoKICAvLyBMaW1pdCBmb3IgdGhlIHNpemUgb2YgYGlucHV0c2AgYW5kIGB1c2VkQnlgIGxpc3RzLiBXZSBhc3N1bWUgbGlzdHMgbG9uZ2VyCiAgLy8gdGhhbiB0aGlzIGFyZSBPSyBpbiBvcmRlciB0byBhdm9pZCB0aGUgTyhOXjIpIHZhbGlkYXRpb24gZ2V0dGluZyBvdXQgb2YKICAvLyBoYW5kLgogIC8vCiAgLy8gUG9zdGVyIGNoaWxkOiBjb3JlbGliXzIvcmVnZXhwL3BjcmVfdGVzdC5kYXJ0LCB3aGljaCBoYXMgYSA3S0xPQyBtYWluKCkuCiAgc3RhdGljIGNvbnN0IGludCBrTWF4VmFsaWRhdGVkSW5zdHJ1Y3Rpb25MaXN0TGVuZ3RoID0gMTAwMDsKCiAgLy8vIFZlcmlmaWVzIFtpbnN0cnVjdGlvbl0gaXMgY29udGFpbmVkIGluIFtpbnN0cnVjdGlvbnNdIFtjb3VudF0gdGltZXMuCiAgc3RhdGljIGJvb2wgY2hlY2tJbnN0cnVjdGlvbkNvdW50KAogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5zdHJ1Y3Rpb25zLCBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24sIGludCBjb3VudCkgewogICAgaWYgKGluc3RydWN0aW9ucy5sZW5ndGggPiBrTWF4VmFsaWRhdGVkSW5zdHJ1Y3Rpb25MaXN0TGVuZ3RoKSByZXR1cm4gdHJ1ZTsKICAgIGludCByZXN1bHQgPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0cnVjdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGlkZW50aWNhbChpbnN0cnVjdGlvbnNbaV0sIGluc3RydWN0aW9uKSkgcmVzdWx0Kys7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0ID09IGNvdW50OwogIH0KCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJlZGljYXRlIHJldHVybnMgdHJ1ZSBmb3IgZXZlcnkgaW5zdHJ1Y3Rpb24gaW4gdGhlCiAgLy8vIGxpc3QuIFRoZSBhcmd1bWVudCB0byBbZl0gaXMgYW4gaW5zdHJ1Y3Rpb24gd2l0aCB0aGUgY291bnQgb2YgaG93IG9mdGVuCiAgLy8vIGl0IGFwcGVhcmVkIGluIHRoZSBsaXN0IFtpbnN0cnVjdGlvbnNdLgogIHN0YXRpYyBib29sIGV2ZXJ5SW5zdHJ1Y3Rpb24oCiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnN0cnVjdGlvbnMsIGJvb2wgRnVuY3Rpb24oSEluc3RydWN0aW9uLCBpbnQpIGYpIHsKICAgIGlmIChpbnN0cnVjdGlvbnMubGVuZ3RoID4ga01heFZhbGlkYXRlZEluc3RydWN0aW9uTGlzdExlbmd0aCkgcmV0dXJuIHRydWU7CiAgICB2YXIgY29weSA9IG5ldyBMaXN0PEhJbnN0cnVjdGlvbj4uZnJvbShpbnN0cnVjdGlvbnMpOwogICAgLy8gVE9ETyhmbG9pdHNjaCk6IHRoZXJlIGlzIGN1cnJlbnRseSBubyB3YXkgdG8gc29ydCBISW5zdHJ1Y3Rpb25zIGJlZm9yZQogICAgLy8gd2UgaGF2ZSBhc3NpZ25lZCBhbiBJRC4gVGhlIGxvb3AgaXMgdGhlcmVmb3JlIE8obl4yKSBmb3Igbm93LgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3B5Lmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBjdXJyZW50ID0gY29weVtpXTsKICAgICAgaWYgKGN1cnJlbnQgPT0gbnVsbCkgY29udGludWU7CiAgICAgIGludCBjb3VudCA9IDE7CiAgICAgIGZvciAoaW50IGogPSBpICsgMTsgaiA8IGNvcHkubGVuZ3RoOyBqKyspIHsKICAgICAgICBpZiAoaWRlbnRpY2FsKGNvcHlbal0sIGN1cnJlbnQpKSB7CiAgICAgICAgICBjb3B5W2pdID0gbnVsbDsKICAgICAgICAgIGNvdW50Kys7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghZihjdXJyZW50LCBjb3VudCkpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEluc3RydWN0aW9uKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgLy8gVmVyaWZpZXMgdGhhdCB3ZSBhcmUgaW4gdGhlIHVzZSBsaXN0IG9mIG91ciBpbnB1dHMuCiAgICBib29sIGhhc0NvcnJlY3RJbnB1dHMoKSB7CiAgICAgIGJvb2wgaW5CYXNpY0Jsb2NrID0gaW5zdHJ1Y3Rpb24uaXNJbkJhc2ljQmxvY2soKTsKICAgICAgcmV0dXJuIGV2ZXJ5SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24uaW5wdXRzLCAoaW5wdXQsIGNvdW50KSB7CiAgICAgICAgaWYgKGluQmFzaWNCbG9jaykgewogICAgICAgICAgcmV0dXJuIGlucHV0LmlzSW5CYXNpY0Jsb2NrKCkgJiYKICAgICAgICAgICAgICBjaGVja0luc3RydWN0aW9uQ291bnQoaW5wdXQudXNlZEJ5LCBpbnN0cnVjdGlvbiwgY291bnQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gY2hlY2tJbnN0cnVjdGlvbkNvdW50KGlucHV0LnVzZWRCeSwgaW5zdHJ1Y3Rpb24sIDApOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CgogICAgLy8gVmVyaWZpZXMgdGhhdCBhbGwgb3VyIHVzZXMgaGF2ZSB1cyBpbiB0aGVpciBpbnB1dHMuCiAgICBib29sIGhhc0NvcnJlY3RVc2VzKCkgewogICAgICBpZiAoIWluc3RydWN0aW9uLmlzSW5CYXNpY0Jsb2NrKCkpIHJldHVybiB0cnVlOwogICAgICByZXR1cm4gZXZlcnlJbnN0cnVjdGlvbihpbnN0cnVjdGlvbi51c2VkQnksICh1c2UsIGNvdW50KSB7CiAgICAgICAgcmV0dXJuIHVzZS5pc0luQmFzaWNCbG9jaygpICYmCiAgICAgICAgICAgIGNoZWNrSW5zdHJ1Y3Rpb25Db3VudCh1c2UuaW5wdXRzLCBpbnN0cnVjdGlvbiwgY291bnQpOwogICAgICB9KTsKICAgIH0KCiAgICBpZiAoIWlkZW50aWNhbChpbnN0cnVjdGlvbi5ibG9jaywgY3VycmVudEJsb2NrKSkgewogICAgICBtYXJrSW52YWxpZCgiSW5zdHJ1Y3Rpb24gaW4gd3JvbmcgYmxvY2siKTsKICAgIH0KICAgIGlmICghaGFzQ29ycmVjdElucHV0cygpKSB7CiAgICAgIG1hcmtJbnZhbGlkKCJJbmNvcnJlY3QgaW5wdXRzIik7CiAgICB9CiAgICBpZiAoIWhhc0NvcnJlY3RVc2VzKCkpIHsKICAgICAgbWFya0ludmFsaWQoIkluY29ycmVjdCB1c2VzIik7CiAgICB9CiAgfQp9CoDWAE5OPAEVAS8XEAEkFSEEASQTFQQBSSMMLBpPAU4vNSIGJzUGPTUGTD4GJU1IMEI0QggGPz8GP0MGO1A9KQY8MAYBPDcGAUlHOzYbRUNHCAYwEycfIyI4HTI8CggGAUAUOxs0Ogg8RAgdBgEaKAFLRA8iPjQsPTsKCAgBShw6Ny07CggIASIEAU9NCwVOPgFLJU5PFDQ9BhwEAU5OLiBNTzpORSwdJRUyKxoTCggsBhEEAQw0Ox44QxwrRxFGCgoGATscNkEnQwoGATcxBh8nBh0lBgQCASZwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvdmFsaWRhdGUuZGFydDhzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9lbGVtZW50cy9lbnRpdHlfdXRpbHMuZGFydJQGLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZW50aXR5X3V0aWxzOwoKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Vuc3RhYmxlL2RhcnQyanMuZGFydCcKICAgIHNob3cgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3IsIGlzTWludXNPcGVyYXRvcjsKCmltcG9ydCAnZW50aXRpZXMuZGFydCc7CgovLyBTb21ld2hhdCBzdGFibGUgb3JkZXJpbmcgZm9yIGxpYnJhcmllcyB1c2luZyBbVXJpXXMKaW50IGNvbXBhcmVMaWJyYXJpZXNVcmlzKFVyaSBhLCBVcmkgYikgewogIGlmIChhID09IGIpIHJldHVybiAwOwoKICBpbnQgYnlDYW5vbmljYWxVcmlQYXRoKCkgewogICAgcmV0dXJuIGEucGF0aC5jb21wYXJlVG8oYi5wYXRoKTsKICB9CgogIC8vIE9yZGVyOiBwbGF0Zm9ybSA8IHBhY2thZ2UgPCBvdGhlci4KICBpZiAoYS5zY2hlbWUgPT0gJ2RhcnQnKSB7CiAgICBpZiAoYi5zY2hlbWUgPT0gJ2RhcnQnKSByZXR1cm4gYnlDYW5vbmljYWxVcmlQYXRoKCk7CiAgICByZXR1cm4gLTE7CiAgfQogIGlmIChiLnNjaGVtZSA9PSAnZGFydCcpIHJldHVybiAxOwoKICBpZiAoYS5zY2hlbWUgPT0gJ3BhY2thZ2UnKSB7CiAgICBpZiAoYi5zY2hlbWUgPT0gJ3BhY2thZ2UnKSByZXR1cm4gYnlDYW5vbmljYWxVcmlQYXRoKCk7CiAgICByZXR1cm4gLTE7CiAgfQogIGlmIChiLnNjaGVtZSA9PSAncGFja2FnZScpIHJldHVybiAxOwoKICByZXR1cm4gX2NvbXBhcmVDYW5vbmljYWxVcmkoYSwgYik7Cn0KCmludCBfY29tcGFyZUNhbm9uaWNhbFVyaShVcmkgYSwgVXJpIGIpIHsKICBpbnQgciA9IGEuc2NoZW1lLmNvbXBhcmVUbyhiLnNjaGVtZSk7CiAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CgogIC8vIFdlIHdvdWxkIGxpa2UgdGhlIG9yZGVyIG9mICdmaWxlOicgVXJpcyB0byBiZSBzdGFibGUgYWNyb3NzIGRpZmZlcmVudAogIC8vIHVzZXJzIG9yIGRpZmZlcmVudCBidWlsZHMgZnJvbSB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMuICBXZSBzb3J0IGJ5CiAgLy8gcGF0aFNlZ21lbnRzIGVsZW1lbnRzIGZyb20gdGhlIGxhc3QgdG8gdGhlIGZpcnN0IHNpbmNlIHRoYXQgdGVuZHMgdG8gZmluZAogIC8vIGEgc3RhYmxlIGRpc3RpbmN0aW9uIHJlZ2FyZGxlc3Mgb2YgZGlyZWN0b3J5IHJvb3QuCiAgTGlzdDxTdHJpbmc+IGFTZWdtZW50cyA9IGEucGF0aFNlZ21lbnRzOwogIExpc3Q8U3RyaW5nPiBiU2VnbWVudHMgPSBiLnBhdGhTZWdtZW50czsKICBpbnQgYUkgPSBhU2VnbWVudHMubGVuZ3RoOwogIGludCBiSSA9IGJTZWdtZW50cy5sZW5ndGg7CiAgd2hpbGUgKGFJID4gMCAmJiBiSSA+IDApIHsKICAgIFN0cmluZyBhU2VnbWVudCA9IGFTZWdtZW50c1stLWFJXTsKICAgIFN0cmluZyBiU2VnbWVudCA9IGJTZWdtZW50c1stLWJJXTsKICAgIHIgPSBhU2VnbWVudC5jb21wYXJlVG8oYlNlZ21lbnQpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CiAgfQogIHJldHVybiBhSS5jb21wYXJlVG8oYkkpOyAvLyBTaG9ydGVzdCBmaXJzdC4KfQoKLy8vIENvbXBhcmUgVVJJcyBvZiBjb21waWxhdGlvbiB1bml0cy4KaW50IGNvbXBhcmVTb3VyY2VVcmlzKFVyaSB1cmkxLCBVcmkgdXJpMikgewogIGlmICh1cmkxID09IHVyaTIpIHJldHVybiAwOwogIC8vIENvbXBpbGF0aW9uIHVuaXRzIGFyZSBjb21wYXJlZCBvbmx5IHdpdGhpbiB0aGUgc2FtZSBsaWJyYXJ5IHNvIHdlIGV4cGVjdAogIC8vIHRoZSBVcmlzIHRvIHVzdWFsbHkgYmUgY2x1c3RlcmVkIHRvZ2V0aGVyIHdpdGggYSBjb21tb24gc2NoZW1lIGFuZCBwYXRoCiAgLy8gcHJlZml4LgogIHJldHVybiAnJHt1cmkxfScuY29tcGFyZVRvKCcke3VyaTJ9Jyk7Cn0KCi8vLyBDb21wYXJlIGVudGl0aWVzIHdpdGhpbiB0aGUgc2FtZSBjb21waWxhdGlvbiB1bml0LgppbnQgY29tcGFyZUVudGl0aWVzKEVudGl0eSBlbGVtZW50MSwgaW50IGxpbmUxLCBpbnQgY29sdW1uMSwgRW50aXR5IGVsZW1lbnQyLAogICAgaW50IGxpbmUyLCBpbnQgY29sdW1uMikgewogIGxpbmUxID8/PSAtMTsKICBsaW5lMiA/Pz0gLTE7CiAgaW50IHIgPSBsaW5lMS5jb21wYXJlVG8obGluZTIpOwogIGlmIChyICE9IDApIHJldHVybiByOwoKICBjb2x1bW4xID8/PSAtMTsKICBjb2x1bW4yID8/PSAtMTsKICByID0gY29sdW1uMS5jb21wYXJlVG8oY29sdW1uMik7CiAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CgogIHIgPSBlbGVtZW50MS5uYW1lLmNvbXBhcmVUbyhlbGVtZW50Mi5uYW1lKTsKICBpZiAociAhPSAwKSByZXR1cm4gcjsKCiAgLy8gU2FtZSBmaWxlLCBwb3NpdGlvbiBhbmQgbmFtZS4gIElmIHRoaXMgaGFwcGVucywgd2Ugc2hvdWxkIGZpbmQgb3V0IHdoeQogIC8vIGFuZCBtYWtlIHRoZSBvcmRlciB0b3RhbCBhbmQgaW5kZXBlbmRlbnQgb2YgaGFzaENvZGUuCiAgcmV0dXJuIGVsZW1lbnQxLmhhc2hDb2RlLmNvbXBhcmVUbyhlbGVtZW50Mi5oYXNoQ29kZSk7Cn0KClN0cmluZyByZWNvbnN0cnVjdENvbnN0cnVjdG9yTmFtZShGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgU3RyaW5nIGNsYXNzTmFtZSA9IGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MubmFtZTsKICBpZiAoZWxlbWVudC5uYW1lID09ICcnKSB7CiAgICByZXR1cm4gY2xhc3NOYW1lOwogIH0gZWxzZSB7CiAgICByZXR1cm4gJyRjbGFzc05hbWVcJCR7ZWxlbWVudC5uYW1lfSc7CiAgfQp9CgpTdHJpbmcgcmVjb25zdHJ1Y3RDb25zdHJ1Y3Rvck5hbWVTb3VyY2VTdHJpbmcoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogIGlmIChlbGVtZW50Lm5hbWUgPT0gJycpIHsKICAgIHJldHVybiBlbGVtZW50LmVuY2xvc2luZ0NsYXNzLm5hbWU7CiAgfSBlbHNlIHsKICAgIHJldHVybiByZWNvbnN0cnVjdENvbnN0cnVjdG9yTmFtZShlbGVtZW50KTsKICB9Cn0KCi8vLyBNYXAgYW4gb3BlcmF0b3ItbmFtZSB0byBhIHZhbGlkIEphdmFTY3JpcHQgaWRlbnRpZmllci4KLy8vCi8vLyBGb3Igbm9uLW9wZXJhdG9yIG5hbWVzLCB0aGlzIG1ldGhvZCBqdXN0IHJldHVybnMgaXRzIGlucHV0LgovLy8KLy8vIFRoZSByZXN1bHRzIHJldHVybmVkIGZyb20gdGhpcyBtZXRob2QgYXJlIGd1YXJhbnRlZWQgdG8gYmUgdmFsaWQKLy8vIEphdmFTY3JpcHQgaWRlbnRpZmllcnMsIGV4Y2VwdCBpdCBtYXkgaW5jbHVkZSByZXNlcnZlZCB3b3JkcyBmb3IKLy8vIG5vbi1vcGVyYXRvciBuYW1lcy4KU3RyaW5nIG9wZXJhdG9yTmFtZVRvSWRlbnRpZmllcihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lID09IG51bGwpIHsKICAgIHJldHVybiBuYW1lOwogIH0gZWxzZSBpZiAobmFtZSA9PSAnPT0nKSB7CiAgICByZXR1cm4gcidvcGVyYXRvciRlcSc7CiAgfSBlbHNlIGlmIChuYW1lID09ICd+JykgewogICAgcmV0dXJuIHInb3BlcmF0b3Ikbm90JzsKICB9IGVsc2UgaWYgKG5hbWUgPT0gJ1tdJykgewogICAgcmV0dXJuIHInb3BlcmF0b3IkaW5kZXgnOwogIH0gZWxzZSBpZiAobmFtZSA9PSAnW109JykgewogICAgcmV0dXJuIHInb3BlcmF0b3IkaW5kZXhTZXQnOwogIH0gZWxzZSBpZiAobmFtZSA9PSAnKicpIHsKICAgIHJldHVybiByJ29wZXJhdG9yJG11bCc7CiAgfSBlbHNlIGlmIChuYW1lID09ICcvJykgewogICAgcmV0dXJuIHInb3BlcmF0b3IkZGl2JzsKICB9IGVsc2UgaWYgKG5hbWUgPT0gJyUnKSB7CiAgICByZXR1cm4gcidvcGVyYXRvciRtb2QnOwogIH0gZWxzZSBpZiAobmFtZSA9PSAnfi8nKSB7CiAgICByZXR1cm4gcidvcGVyYXRvciR0ZGl2JzsKICB9IGVsc2UgaWYgKG5hbWUgPT0gJysnKSB7CiAgICByZXR1cm4gcidvcGVyYXRvciRhZGQnOwogIH0gZWxzZSBpZiAobmFtZSA9PSAnPDwnKSB7CiAgICByZXR1cm4gcidvcGVyYXRvciRzaGwnOwogIH0gZWxzZSBpZiAobmFtZSA9PSAnPj4nKSB7CiAgICByZXR1cm4gcidvcGVyYXRvciRzaHInOwogIH0gZWxzZSBpZiAobmFtZSA9PSAnPj4+JykgewogICAgcmV0dXJuIHInb3BlcmF0b3Ikc2hydSc7CiAgfSBlbHNlIGlmIChuYW1lID09ICc+PScpIHsKICAgIHJldHVybiByJ29wZXJhdG9yJGdlJzsKICB9IGVsc2UgaWYgKG5hbWUgPT0gJz4nKSB7CiAgICByZXR1cm4gcidvcGVyYXRvciRndCc7CiAgfSBlbHNlIGlmIChuYW1lID09ICc8PScpIHsKICAgIHJldHVybiByJ29wZXJhdG9yJGxlJzsKICB9IGVsc2UgaWYgKG5hbWUgPT0gJzwnKSB7CiAgICByZXR1cm4gcidvcGVyYXRvciRsdCc7CiAgfSBlbHNlIGlmIChuYW1lID09ICcmJykgewogICAgcmV0dXJuIHInb3BlcmF0b3IkYW5kJzsKICB9IGVsc2UgaWYgKG5hbWUgPT0gJ14nKSB7CiAgICByZXR1cm4gcidvcGVyYXRvciR4b3InOwogIH0gZWxzZSBpZiAobmFtZSA9PSAnfCcpIHsKICAgIHJldHVybiByJ29wZXJhdG9yJG9yJzsKICB9IGVsc2UgaWYgKG5hbWUgPT0gJy0nKSB7CiAgICByZXR1cm4gcidvcGVyYXRvciRzdWInOwogIH0gZWxzZSBpZiAobmFtZSA9PSAndW5hcnktJykgewogICAgcmV0dXJuIHInb3BlcmF0b3IkbmVnYXRlJzsKICB9IGVsc2UgewogICAgcmV0dXJuIG5hbWU7CiAgfQp9CgpTdHJpbmcgY29uc3RydWN0T3BlcmF0b3JOYW1lT3JOdWxsKFN0cmluZyBvcCwgYm9vbCBpc1VuYXJ5KSB7CiAgaWYgKGlzTWludXNPcGVyYXRvcihvcCkpIHsKICAgIHJldHVybiBpc1VuYXJ5ID8gJ3VuYXJ5LScgOiBvcDsKICB9IGVsc2UgaWYgKGlzVXNlckRlZmluYWJsZU9wZXJhdG9yKG9wKSB8fCBvcCA9PSAnPz8nKSB7CiAgICByZXR1cm4gb3A7CiAgfSBlbHNlIHsKICAgIHJldHVybiBudWxsOwogIH0KfQoKU3RyaW5nIGNvbnN0cnVjdE9wZXJhdG9yTmFtZShTdHJpbmcgb3AsIGJvb2wgaXNVbmFyeSkgewogIFN0cmluZyBvcGVyYXRvck5hbWUgPSBjb25zdHJ1Y3RPcGVyYXRvck5hbWVPck51bGwob3AsIGlzVW5hcnkpOwogIGlmIChvcGVyYXRvck5hbWUgPT0gbnVsbCkKICAgIHRocm93ICdVbmhhbmRsZWQgb3BlcmF0b3I6ICRvcCc7CiAgZWxzZQogICAgcmV0dXJuIG9wZXJhdG9yTmFtZTsKfQqAswBOTjwBFgE5MwEYATcpGAEdJQQBKBw5DwQkAR88DwQnASUCASkoGAFLR084KysdHR0nJyYaBC4CAScsHk5NDSkCATdOHhAQIhgBEhIiGAEuGAFMOzkCATwyHBYLKgQCAUgcKAswBAIBOwRABEVFGC8WER0bHBwdHh4hHBwcHBwcHR0cHB0cHRweHR0bHBsdGxwbHBwcHBwbHBwhHwsRBAIBPh0kOg8LEQQCAThCHCUHGQIBL3BhY2thZ2U6Y29tcGlsZXIvc3JjL2VsZW1lbnRzL2VudGl0eV91dGlscy5kYXJ0NXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2VsZW1lbnRzL29wZXJhdG9ycy5kYXJ0oV8vLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLm9wZXJhdG9yczsKCmltcG9ydCAnbmFtZXMuZGFydCcgc2hvdyBQdWJsaWNOYW1lOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NhbGxfc3RydWN0dXJlLmRhcnQnIHNob3cgQ2FsbFN0cnVjdHVyZTsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JyBzaG93IFNlbGVjdG9yLCBTZWxlY3RvcktpbmQ7CgplbnVtIFVuYXJ5T3BlcmF0b3JLaW5kIHsKICBOT1QsCiAgTkVHQVRFLAogIENPTVBMRU1FTlQsCn0KCmNsYXNzIFVuYXJ5T3BlcmF0b3IgewogIGZpbmFsIFVuYXJ5T3BlcmF0b3JLaW5kIGtpbmQ7CiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgZmluYWwgU3RyaW5nIHNlbGVjdG9yTmFtZTsKCiAgY29uc3QgVW5hcnlPcGVyYXRvcih0aGlzLmtpbmQsIHRoaXMubmFtZSwgdGhpcy5zZWxlY3Rvck5hbWUpOwoKICBib29sIGdldCBpc1VzZXJEZWZpbmFibGUgPT4gc2VsZWN0b3JOYW1lICE9IG51bGw7CgogIFNlbGVjdG9yIGdldCBzZWxlY3RvciA9PiBuZXcgU2VsZWN0b3IoU2VsZWN0b3JLaW5kLk9QRVJBVE9SLAogICAgICBuZXcgUHVibGljTmFtZShzZWxlY3Rvck5hbWUpLCBDYWxsU3RydWN0dXJlLk5PX0FSR1MpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBuYW1lOwoKICAvLy8gVGhlIHVuYXJ5ICEgb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IFVuYXJ5T3BlcmF0b3IgTk9UID0KICAgICAgY29uc3QgVW5hcnlPcGVyYXRvcihVbmFyeU9wZXJhdG9yS2luZC5OT1QsICchJywgbnVsbCk7CgogIC8vLyBUaGUgdW5hcnkgLSBvcGVyYXRvci4KICBzdGF0aWMgY29uc3QgVW5hcnlPcGVyYXRvciBORUdBVEUgPQogICAgICBjb25zdCBVbmFyeU9wZXJhdG9yKFVuYXJ5T3BlcmF0b3JLaW5kLk5FR0FURSwgJy0nLCAndW5hcnktJyk7CgogIC8vLyBUaGUgdW5hcnkgfiBvcGVyYXRvci4KICBzdGF0aWMgY29uc3QgVW5hcnlPcGVyYXRvciBDT01QTEVNRU5UID0KICAgICAgY29uc3QgVW5hcnlPcGVyYXRvcihVbmFyeU9wZXJhdG9yS2luZC5DT01QTEVNRU5ULCAnficsICd+Jyk7CgogIHN0YXRpYyBVbmFyeU9wZXJhdG9yIHBhcnNlKFN0cmluZyB2YWx1ZSkgewogICAgc3dpdGNoICh2YWx1ZSkgewogICAgICBjYXNlICchJzoKICAgICAgICByZXR1cm4gTk9UOwogICAgICBjYXNlICctJzoKICAgICAgICByZXR1cm4gTkVHQVRFOwogICAgICBjYXNlICd+JzoKICAgICAgICByZXR1cm4gQ09NUExFTUVOVDsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIC8vIGlnbm9yZTogTUlTU0lOR19SRVRVUk4KICBzdGF0aWMgVW5hcnlPcGVyYXRvciBmcm9tS2luZChVbmFyeU9wZXJhdG9yS2luZCBraW5kKSB7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBVbmFyeU9wZXJhdG9yS2luZC5OT1Q6CiAgICAgICAgcmV0dXJuIE5PVDsKICAgICAgY2FzZSBVbmFyeU9wZXJhdG9yS2luZC5ORUdBVEU6CiAgICAgICAgcmV0dXJuIE5FR0FURTsKICAgICAgY2FzZSBVbmFyeU9wZXJhdG9yS2luZC5DT01QTEVNRU5UOgogICAgICAgIHJldHVybiBDT01QTEVNRU5UOwogICAgfQogIH0KfQoKZW51bSBCaW5hcnlPcGVyYXRvcktpbmQgewogIEVRLAogIE5PVF9FUSwKICBJTkRFWCwKICBBREQsCiAgU1VCLAogIE1VTCwKICBESVYsCiAgSURJViwKICBNT0QsCiAgU0hMLAogIFNIUiwKICBTSFJVLAogIEdURVEsCiAgR1QsCiAgTFRFUSwKICBMVCwKICBBTkQsCiAgT1IsCiAgWE9SLAogIExPR0lDQUxfQU5ELAogIExPR0lDQUxfT1IsCiAgSUZfTlVMTCwKfQoKY2xhc3MgQmluYXJ5T3BlcmF0b3IgewogIGZpbmFsIEJpbmFyeU9wZXJhdG9yS2luZCBraW5kOwogIGZpbmFsIFN0cmluZyBuYW1lOwoKICBjb25zdCBCaW5hcnlPcGVyYXRvci5fKHRoaXMua2luZCwgdGhpcy5uYW1lKTsKCiAgLy8vIGB0cnVlYCBpZiB0aGlzIG9wZXJhdG9yIGNhbiBiZSBpbXBsZW1lbnRlZCB0aHJvdWdoIGFuIGBvcGVyYXRvciBbbmFtZV1gCiAgLy8vIG1ldGhvZC4KICBib29sIGdldCBpc1VzZXJEZWZpbmFibGUgPT4gdHJ1ZTsKCiAgU3RyaW5nIGdldCBzZWxlY3Rvck5hbWUgPT4gbmFtZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gbmFtZTsKCiAgLy8vIFRoZSA9PSBvcGVyYXRvci4KICBzdGF0aWMgY29uc3QgQmluYXJ5T3BlcmF0b3IgRVEgPQogICAgICBjb25zdCBCaW5hcnlPcGVyYXRvci5fKEJpbmFyeU9wZXJhdG9yS2luZC5FUSwgJz09Jyk7CgogIC8vLyBUaGUgIT0gb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IEJpbmFyeU9wZXJhdG9yIE5PVF9FUSA9IGNvbnN0IF9Ob3RFcXVhbHNPcGVyYXRvcigpOwoKICAvLy8gVGhlIFtdIG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBCaW5hcnlPcGVyYXRvciBJTkRFWCA9CiAgICAgIGNvbnN0IEJpbmFyeU9wZXJhdG9yLl8oQmluYXJ5T3BlcmF0b3JLaW5kLklOREVYLCAnW10nKTsKCiAgLy8vIFRoZSBiaW5hcnkgKyBvcGVyYXRvci4KICBzdGF0aWMgY29uc3QgQmluYXJ5T3BlcmF0b3IgQUREID0KICAgICAgY29uc3QgQmluYXJ5T3BlcmF0b3IuXyhCaW5hcnlPcGVyYXRvcktpbmQuQURELCAnKycpOwoKICAvLy8gVGhlIGJpbmFyeSAtIG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBCaW5hcnlPcGVyYXRvciBTVUIgPQogICAgICBjb25zdCBCaW5hcnlPcGVyYXRvci5fKEJpbmFyeU9wZXJhdG9yS2luZC5TVUIsICctJyk7CgogIC8vLyBUaGUgYmluYXJ5ICogb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IEJpbmFyeU9wZXJhdG9yIE1VTCA9CiAgICAgIGNvbnN0IEJpbmFyeU9wZXJhdG9yLl8oQmluYXJ5T3BlcmF0b3JLaW5kLk1VTCwgJyonKTsKCiAgLy8vIFRoZSBiaW5hcnkgLyBvcGVyYXRvci4KICBzdGF0aWMgY29uc3QgQmluYXJ5T3BlcmF0b3IgRElWID0KICAgICAgY29uc3QgQmluYXJ5T3BlcmF0b3IuXyhCaW5hcnlPcGVyYXRvcktpbmQuRElWLCAnLycpOwoKICAvLy8gVGhlIGJpbmFyeSB+LyBvcGVyYXRvci4KICBzdGF0aWMgY29uc3QgQmluYXJ5T3BlcmF0b3IgSURJViA9CiAgICAgIGNvbnN0IEJpbmFyeU9wZXJhdG9yLl8oQmluYXJ5T3BlcmF0b3JLaW5kLklESVYsICd+LycpOwoKICAvLy8gVGhlIGJpbmFyeSAlIG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBCaW5hcnlPcGVyYXRvciBNT0QgPQogICAgICBjb25zdCBCaW5hcnlPcGVyYXRvci5fKEJpbmFyeU9wZXJhdG9yS2luZC5NT0QsICclJyk7CgogIC8vLyBUaGUgYmluYXJ5IDw8IG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBCaW5hcnlPcGVyYXRvciBTSEwgPQogICAgICBjb25zdCBCaW5hcnlPcGVyYXRvci5fKEJpbmFyeU9wZXJhdG9yS2luZC5TSEwsICc8PCcpOwoKICAvLy8gVGhlIGJpbmFyeSA+PiBvcGVyYXRvci4KICBzdGF0aWMgY29uc3QgQmluYXJ5T3BlcmF0b3IgU0hSID0KICAgICAgY29uc3QgQmluYXJ5T3BlcmF0b3IuXyhCaW5hcnlPcGVyYXRvcktpbmQuU0hSLCAnPj4nKTsKCiAgLy8vIFRoZSBiaW5hcnkgPj4+IG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBCaW5hcnlPcGVyYXRvciBTSFJVID0KICAgICAgY29uc3QgQmluYXJ5T3BlcmF0b3IuXyhCaW5hcnlPcGVyYXRvcktpbmQuU0hSVSwgJz4+Jyk7CgogIC8vLyBUaGUgYmluYXJ5ID49IG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBCaW5hcnlPcGVyYXRvciBHVEVRID0KICAgICAgY29uc3QgQmluYXJ5T3BlcmF0b3IuXyhCaW5hcnlPcGVyYXRvcktpbmQuR1RFUSwgJz49Jyk7CgogIC8vLyBUaGUgYmluYXJ5ID4gb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IEJpbmFyeU9wZXJhdG9yIEdUID0KICAgICAgY29uc3QgQmluYXJ5T3BlcmF0b3IuXyhCaW5hcnlPcGVyYXRvcktpbmQuR1QsICc+Jyk7CgogIC8vLyBUaGUgYmluYXJ5IDw9IG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBCaW5hcnlPcGVyYXRvciBMVEVRID0KICAgICAgY29uc3QgQmluYXJ5T3BlcmF0b3IuXyhCaW5hcnlPcGVyYXRvcktpbmQuTFRFUSwgJzw9Jyk7CgogIC8vLyBUaGUgYmluYXJ5IDwgb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IEJpbmFyeU9wZXJhdG9yIExUID0KICAgICAgY29uc3QgQmluYXJ5T3BlcmF0b3IuXyhCaW5hcnlPcGVyYXRvcktpbmQuTFQsICc8Jyk7CgogIC8vLyBUaGUgYmluYXJ5ICYgb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IEJpbmFyeU9wZXJhdG9yIEFORCA9CiAgICAgIGNvbnN0IEJpbmFyeU9wZXJhdG9yLl8oQmluYXJ5T3BlcmF0b3JLaW5kLkFORCwgJyYnKTsKCiAgLy8vIFRoZSBiaW5hcnkgfCBvcGVyYXRvci4KICBzdGF0aWMgY29uc3QgQmluYXJ5T3BlcmF0b3IgT1IgPQogICAgICBjb25zdCBCaW5hcnlPcGVyYXRvci5fKEJpbmFyeU9wZXJhdG9yS2luZC5PUiwgJ3wnKTsKCiAgLy8vIFRoZSBiaW5hcnkgXiBvcGVyYXRvci4KICBzdGF0aWMgY29uc3QgQmluYXJ5T3BlcmF0b3IgWE9SID0KICAgICAgY29uc3QgQmluYXJ5T3BlcmF0b3IuXyhCaW5hcnlPcGVyYXRvcktpbmQuWE9SLCAnXicpOwoKICAvLy8gVGhlIGxvZ2ljYWwgJiYgb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IEJpbmFyeU9wZXJhdG9yIExPR0lDQUxfQU5EID0KICAgICAgY29uc3QgX0xvZ2ljYWxPcGVyYXRvcihCaW5hcnlPcGVyYXRvcktpbmQuTE9HSUNBTF9BTkQsICcmJicpOwoKICAvLy8gVGhlIGJpbmFyeSB8IG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBCaW5hcnlPcGVyYXRvciBMT0dJQ0FMX09SID0KICAgICAgY29uc3QgX0xvZ2ljYWxPcGVyYXRvcihCaW5hcnlPcGVyYXRvcktpbmQuTE9HSUNBTF9PUiwgJ3x8Jyk7CgogIC8vLyBUaGUgaWYtbnVsbCA/PyBvcGVyYXRvci4KICBzdGF0aWMgY29uc3QgQmluYXJ5T3BlcmF0b3IgSUZfTlVMTCA9CiAgICAgIGNvbnN0IF9JZk51bGxPcGVyYXRvcihCaW5hcnlPcGVyYXRvcktpbmQuSUZfTlVMTCwgJz8/Jyk7CgogIHN0YXRpYyBCaW5hcnlPcGVyYXRvciBwYXJzZShTdHJpbmcgdmFsdWUpIHsKICAgIHN3aXRjaCAodmFsdWUpIHsKICAgICAgY2FzZSAnJiYnOgogICAgICAgIHJldHVybiBMT0dJQ0FMX0FORDsKICAgICAgY2FzZSAnfHwnOgogICAgICAgIHJldHVybiBMT0dJQ0FMX09SOwogICAgICBjYXNlICc/Pyc6CiAgICAgICAgcmV0dXJuIElGX05VTEw7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIHBhcnNlVXNlckRlZmluYWJsZSh2YWx1ZSk7CiAgICB9CiAgfQoKICBzdGF0aWMgQmluYXJ5T3BlcmF0b3IgcGFyc2VVc2VyRGVmaW5hYmxlKFN0cmluZyB2YWx1ZSkgewogICAgc3dpdGNoICh2YWx1ZSkgewogICAgICBjYXNlICc9PSc6CiAgICAgICAgcmV0dXJuIEVROwogICAgICBjYXNlICchPSc6CiAgICAgICAgcmV0dXJuIE5PVF9FUTsKICAgICAgY2FzZSAnW10nOgogICAgICAgIHJldHVybiBJTkRFWDsKICAgICAgY2FzZSAnKic6CiAgICAgICAgcmV0dXJuIE1VTDsKICAgICAgY2FzZSAnLyc6CiAgICAgICAgcmV0dXJuIERJVjsKICAgICAgY2FzZSAnJSc6CiAgICAgICAgcmV0dXJuIE1PRDsKICAgICAgY2FzZSAnfi8nOgogICAgICAgIHJldHVybiBJRElWOwogICAgICBjYXNlICcrJzoKICAgICAgICByZXR1cm4gQUREOwogICAgICBjYXNlICctJzoKICAgICAgICByZXR1cm4gU1VCOwogICAgICBjYXNlICc8PCc6CiAgICAgICAgcmV0dXJuIFNITDsKICAgICAgY2FzZSAnPj4nOgogICAgICAgIHJldHVybiBTSFI7CiAgICAgIGNhc2UgJz4+Pic6CiAgICAgICAgcmV0dXJuIFNIUlU7CiAgICAgIGNhc2UgJz49JzoKICAgICAgICByZXR1cm4gR1RFUTsKICAgICAgY2FzZSAnPic6CiAgICAgICAgcmV0dXJuIEdUOwogICAgICBjYXNlICc8PSc6CiAgICAgICAgcmV0dXJuIExURVE7CiAgICAgIGNhc2UgJzwnOgogICAgICAgIHJldHVybiBMVDsKICAgICAgY2FzZSAnJic6CiAgICAgICAgcmV0dXJuIEFORDsKICAgICAgY2FzZSAnXic6CiAgICAgICAgcmV0dXJuIFhPUjsKICAgICAgY2FzZSAnfCc6CiAgICAgICAgcmV0dXJuIE9SOwogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgLy8gaWdub3JlOiBNSVNTSU5HX1JFVFVSTgogIHN0YXRpYyBCaW5hcnlPcGVyYXRvciBmcm9tS2luZChCaW5hcnlPcGVyYXRvcktpbmQga2luZCkgewogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkVROgogICAgICAgIHJldHVybiBFUTsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTk9UX0VROgogICAgICAgIHJldHVybiBOT1RfRVE7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLklOREVYOgogICAgICAgIHJldHVybiBJTkRFWDsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTVVMOgogICAgICAgIHJldHVybiBNVUw7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkRJVjoKICAgICAgICByZXR1cm4gRElWOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5NT0Q6CiAgICAgICAgcmV0dXJuIE1PRDsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuSURJVjoKICAgICAgICByZXR1cm4gSURJVjsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuQUREOgogICAgICAgIHJldHVybiBBREQ7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLlNVQjoKICAgICAgICByZXR1cm4gU1VCOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5TSEw6CiAgICAgICAgcmV0dXJuIFNITDsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuU0hSOgogICAgICAgIHJldHVybiBTSFI7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLlNIUlU6CiAgICAgICAgcmV0dXJuIFNIUlU7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkdURVE6CiAgICAgICAgcmV0dXJuIEdURVE7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkdUOgogICAgICAgIHJldHVybiBHVDsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTFRFUToKICAgICAgICByZXR1cm4gTFRFUTsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTFQ6CiAgICAgICAgcmV0dXJuIExUOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5BTkQ6CiAgICAgICAgcmV0dXJuIEFORDsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuWE9SOgogICAgICAgIHJldHVybiBYT1I7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLk9SOgogICAgICAgIHJldHVybiBPUjsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTE9HSUNBTF9BTkQ6CiAgICAgICAgcmV0dXJuIExPR0lDQUxfQU5EOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5MT0dJQ0FMX09SOgogICAgICAgIHJldHVybiBMT0dJQ0FMX09SOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5JRl9OVUxMOgogICAgICAgIHJldHVybiBJRl9OVUxMOwogICAgfQogIH0KfQoKLy8vIFRoZSBvcGVyYXRvciAhPSwgd2hpY2ggaXMgbm90IHVzZXIgZGVmaW5hYmxlIG9wZXJhdG9yIGJ1dCBpbnN0ZWFkIGlzIGEKLy8vIG5lZ2F0aW9uIG9mIGEgY2FsbCB0byB1c2VyIGRlZmluYWJsZSBvcGVyYXRvciwgbmFtZWx5ID09LgpjbGFzcyBfTm90RXF1YWxzT3BlcmF0b3IgZXh0ZW5kcyBCaW5hcnlPcGVyYXRvciB7CiAgY29uc3QgX05vdEVxdWFsc09wZXJhdG9yKCkgOiBzdXBlci5fKEJpbmFyeU9wZXJhdG9yS2luZC5OT1RfRVEsICchPScpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1VzZXJEZWZpbmFibGUgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgc2VsZWN0b3JOYW1lID0+ICc9PSc7Cn0KCi8vLyBUaGUgb3BlcmF0b3JzICYmIGFuZCB8fCB3aGljaCBhcmUgbm90IHVzZXIgZGVmaW5hYmxlIG9wZXJhdG9ycyBidXQgY29udHJvbAovLy8gc3RydWN0dXJlcy4KY2xhc3MgX0xvZ2ljYWxPcGVyYXRvciBleHRlbmRzIEJpbmFyeU9wZXJhdG9yIHsKICBjb25zdCBfTG9naWNhbE9wZXJhdG9yKEJpbmFyeU9wZXJhdG9yS2luZCBraW5kLCBTdHJpbmcgbmFtZSkKICAgICAgOiBzdXBlci5fKGtpbmQsIG5hbWUpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1VzZXJEZWZpbmFibGUgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgc2VsZWN0b3JOYW1lID0+IG51bGw7Cn0KCi8vLyBUaGUgb3BlcmF0b3JzID8/IGlzIG5vdCB1c2VyIGRlZmluYWJsZS4KY2xhc3MgX0lmTnVsbE9wZXJhdG9yIGV4dGVuZHMgQmluYXJ5T3BlcmF0b3IgewogIGNvbnN0IF9JZk51bGxPcGVyYXRvcihCaW5hcnlPcGVyYXRvcktpbmQga2luZCwgU3RyaW5nIG5hbWUpCiAgICAgIDogc3VwZXIuXyhraW5kLCBuYW1lKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNVc2VyRGVmaW5hYmxlID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IHNlbGVjdG9yTmFtZSA9PiAnPz8nOwp9CoFXAE5OPAEbASU9QAEZBwoOAgEWIBUdAUABNAE/PAEMHQEcIz0BHCZEARwqQwEtFRAUEBcQGw8VBgQBHDoUIhQlFykbBgQCARoGCgkHBwcHCAcHBwgIBggGBwYHDw4LAgEXIRUBMAFODiQBIwEMHQEXIzsBF0MBFyY+AR0kOwEdJDsBHSQ7AR0kOwEeJT0BHSQ7AR4kPAEeJDwBHyU9AR4lPQEdIzoBHiU9AR0jOgEdJDsBHSM6AR0kOwEfLEQBHStDAR8oPwEuFREcERsRGA8qBgQBOxURExEXERYQFBAUEBQRFRAUEBQRFBEUEhURFRATERUQExAUEBQQEw8VBgQBHDwUIhMmFyUWIxQjFCMUJBUjFCMUIxQjFCQVJBUiEyQVIhMjFCMUIhMrHCobJxgGBAIBSz4ySQEMJQEMIwIBTxAwPx0BDCUBDCMCASwvPh0BDCUBDCMCASxwYWNrYWdlOmNvbXBpbGVyL3NyYy9lbGVtZW50cy9vcGVyYXRvcnMuZGFydEVzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9rZXJuZWwvaW52b2NhdGlvbl9taXJyb3JfY29uc3RhbnRzLmRhcnSBVy8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpjb25zdCBpbnQgaW52b2NhdGlvbk1pcnJvck1ldGhvZEtpbmQgPSAwOwpjb25zdCBpbnQgaW52b2NhdGlvbk1pcnJvckdldHRlcktpbmQgPSAxOwpjb25zdCBpbnQgaW52b2NhdGlvbk1pcnJvclNldHRlcktpbmQgPSAyOwoJAE5OPAEqKioBPHBhY2thZ2U6Y29tcGlsZXIvc3JjL2tlcm5lbC9pbnZvY2F0aW9uX21pcnJvcl9jb25zdGFudHMuZGFydDZzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9rZXJuZWwva2VybmVsX3dvcmxkLmRhcnSZtS8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9hbm5vdGF0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2ZpZWxkX2FuYWx5c2lzLmRhcnQnIHNob3cgS0ZpZWxkQW5hbHlzaXM7CmltcG9ydCAnLi4vanNfYmFja2VuZC9iYWNrZW5kX3VzYWdlLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvaW50ZXJjZXB0b3JfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hdGl2ZV9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbm9fc3VjaF9tZXRob2RfcmVnaXN0cnkuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzX3Jlc29sdXRpb24uZGFydCc7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jbGFzc19oaWVyYXJjaHkuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvbWVtYmVyX3VzYWdlLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnOwoKaW1wb3J0ICdlbGVtZW50X21hcF9pbXBsLmRhcnQnOwoKY2xhc3MgS0Nsb3NlZFdvcmxkSW1wbCBpbXBsZW1lbnRzIEtDbG9zZWRXb3JsZCB7CiAgZmluYWwgS2VybmVsVG9FbGVtZW50TWFwSW1wbCBlbGVtZW50TWFwOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBLRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudDsKCiAgQG92ZXJyaWRlCiAgZmluYWwgRGFydFR5cGVzIGRhcnRUeXBlczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgS0NvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBOYXRpdmVEYXRhIG5hdGl2ZURhdGE7CgogIEBvdmVycmlkZQogIGZpbmFsIEludGVyY2VwdG9yRGF0YSBpbnRlcmNlcHRvckRhdGE7CgogIEBvdmVycmlkZQogIGZpbmFsIEJhY2tlbmRVc2FnZSBiYWNrZW5kVXNhZ2U7CgogIEBvdmVycmlkZQogIGZpbmFsIE5vU3VjaE1ldGhvZERhdGEgbm9TdWNoTWV0aG9kRGF0YTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgTWFwPENsYXNzRW50aXR5LCBTZXQ8Q2xhc3NFbnRpdHk+PiBtaXhpblVzZXM7CgogIEBvdmVycmlkZQogIGZpbmFsIE1hcDxDbGFzc0VudGl0eSwgU2V0PENsYXNzRW50aXR5Pj4gdHlwZXNJbXBsZW1lbnRlZEJ5U3ViY2xhc3NlczsKCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2FuIHRoaXMgYmUgZGVyaXZlZCBmcm9tIFtDbGFzc1NldF1zPwogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gX2ltcGxlbWVudGVkQ2xhc3NlczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBsaXZlSW5zdGFuY2VNZW1iZXJzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGFzc2lnbmVkSW5zdGFuY2VNZW1iZXJzOwogIEBvdmVycmlkZQogIGZpbmFsIEtGaWVsZEFuYWx5c2lzIGZpZWxkQW5hbHlzaXM7CgogIEBvdmVycmlkZQogIGZpbmFsIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBsaXZlTmF0aXZlQ2xhc3NlczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgTWFwPE1lbWJlckVudGl0eSwgTWVtYmVyVXNhZ2U+IGxpdmVNZW1iZXJVc2FnZTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgQ2xhc3NIaWVyYXJjaHkgY2xhc3NIaWVyYXJjaHk7CgogIEBvdmVycmlkZQogIGZpbmFsIEFubm90YXRpb25zRGF0YSBhbm5vdGF0aW9uc0RhdGE7CgogIFJ1bnRpbWVUeXBlc05lZWQgX3J0aU5lZWQ7CgogIEBvdmVycmlkZQogIGZpbmFsIFNldDxEYXJ0VHlwZT4gaXNDaGVja3M7CgogIEBvdmVycmlkZQogIGZpbmFsIFNldDxUeXBlVmFyaWFibGVUeXBlPiBuYW1lZFR5cGVWYXJpYWJsZXNOZXdSdGk7CgogIGZpbmFsIE1hcDxFbnRpdHksIFNldDxEYXJ0VHlwZT4+IHN0YXRpY1R5cGVBcmd1bWVudERlcGVuZGVuY2llczsKCiAgZmluYWwgTWFwPFNlbGVjdG9yLCBTZXQ8RGFydFR5cGU+PiBkeW5hbWljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBTZXQ8VHlwZVZhcmlhYmxlVHlwZT4gdHlwZVZhcmlhYmxlVHlwZUxpdGVyYWxzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBTZXQ8TG9jYWw+IGdlbmVyaWNMb2NhbEZ1bmN0aW9uczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgU2V0PEZ1bmN0aW9uRW50aXR5PiBjbG9zdXJpemVkTWVtYmVyc1dpdGhGcmVlVHlwZVZhcmlhYmxlczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgSXRlcmFibGU8TG9jYWw+IGxvY2FsRnVuY3Rpb25zOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBJdGVyYWJsZTxJbnRlcmZhY2VUeXBlPiBpbnN0YW50aWF0ZWRUeXBlczsKCiAgQG92ZXJyaWRlCiAgUnVudGltZVR5cGVzTmVlZCBnZXQgcnRpTmVlZCA9PiBfcnRpTmVlZDsKCiAgS0Nsb3NlZFdvcmxkSW1wbCh0aGlzLmVsZW1lbnRNYXAsCiAgICAgIHtDb21waWxlck9wdGlvbnMgb3B0aW9ucywKICAgICAgdGhpcy5lbGVtZW50RW52aXJvbm1lbnQsCiAgICAgIHRoaXMuZGFydFR5cGVzLAogICAgICB0aGlzLmNvbW1vbkVsZW1lbnRzLAogICAgICB0aGlzLm5hdGl2ZURhdGEsCiAgICAgIHRoaXMuaW50ZXJjZXB0b3JEYXRhLAogICAgICB0aGlzLmJhY2tlbmRVc2FnZSwKICAgICAgdGhpcy5ub1N1Y2hNZXRob2REYXRhLAogICAgICBSdW50aW1lVHlwZXNOZWVkQnVpbGRlciBydGlOZWVkQnVpbGRlciwKICAgICAgdGhpcy5maWVsZEFuYWx5c2lzLAogICAgICBTZXQ8Q2xhc3NFbnRpdHk+IGltcGxlbWVudGVkQ2xhc3NlcywKICAgICAgdGhpcy5saXZlTmF0aXZlQ2xhc3NlcywKICAgICAgdGhpcy5saXZlSW5zdGFuY2VNZW1iZXJzLAogICAgICB0aGlzLmFzc2lnbmVkSW5zdGFuY2VNZW1iZXJzLAogICAgICB0aGlzLmxpdmVNZW1iZXJVc2FnZSwKICAgICAgdGhpcy5taXhpblVzZXMsCiAgICAgIHRoaXMudHlwZXNJbXBsZW1lbnRlZEJ5U3ViY2xhc3NlcywKICAgICAgdGhpcy5jbGFzc0hpZXJhcmNoeSwKICAgICAgdGhpcy5hbm5vdGF0aW9uc0RhdGEsCiAgICAgIHRoaXMuaXNDaGVja3MsCiAgICAgIHRoaXMubmFtZWRUeXBlVmFyaWFibGVzTmV3UnRpLAogICAgICB0aGlzLnN0YXRpY1R5cGVBcmd1bWVudERlcGVuZGVuY2llcywKICAgICAgdGhpcy5keW5hbWljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzLAogICAgICB0aGlzLnR5cGVWYXJpYWJsZVR5cGVMaXRlcmFscywKICAgICAgdGhpcy5nZW5lcmljTG9jYWxGdW5jdGlvbnMsCiAgICAgIHRoaXMuY2xvc3VyaXplZE1lbWJlcnNXaXRoRnJlZVR5cGVWYXJpYWJsZXMsCiAgICAgIHRoaXMubG9jYWxGdW5jdGlvbnMsCiAgICAgIHRoaXMuaW5zdGFudGlhdGVkVHlwZXN9KQogICAgICA6IF9pbXBsZW1lbnRlZENsYXNzZXMgPSBpbXBsZW1lbnRlZENsYXNzZXMgewogICAgX3J0aU5lZWQgPSBydGlOZWVkQnVpbGRlci5jb21wdXRlUnVudGltZVR5cGVzTmVlZCh0aGlzLCBvcHRpb25zKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbXBsZW1lbnRlZChDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBfaW1wbGVtZW50ZWRDbGFzc2VzLmNvbnRhaW5zKGNscyk7CiAgfQoKICAvLy8gTmVlZGVkIGZvciB0ZXN0aW5nLgogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZ2V0IHByb2Nlc3NlZE1lbWJlcnMgPT4gbGl2ZU1lbWJlclVzYWdlLmtleXM7CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaFN0YXRpY1R5cGVBcmd1bWVudCgKICAgICAgdm9pZCBmKEVudGl0eSBmdW5jdGlvbiwgU2V0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSkgewogICAgc3RhdGljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzLmZvckVhY2goZik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hEeW5hbWljVHlwZUFyZ3VtZW50KAogICAgICB2b2lkIGYoU2VsZWN0b3Igc2VsZWN0b3IsIFNldDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykpIHsKICAgIGR5bmFtaWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXMuZm9yRWFjaChmKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNNZW1iZXJVc2VkKE1lbWJlckVudGl0eSBtZW1iZXIpID0+IGxpdmVNZW1iZXJVc2FnZS5jb250YWluc0tleShtZW1iZXIpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hHZW5lcmljTWV0aG9kKEZ1bmN0aW9uIGYpIHsKICAgIGxpdmVNZW1iZXJVc2FnZS5mb3JFYWNoKChNZW1iZXJFbnRpdHkgbWVtYmVyLCBNZW1iZXJVc2FnZSB1c2FnZSkgewogICAgICBpZiAobWVtYmVyIGlzIEZ1bmN0aW9uRW50aXR5ICYmCiAgICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlVmFyaWFibGVzKG1lbWJlcikuaXNOb3RFbXB0eSkgewogICAgICAgIGYobWVtYmVyKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hHZW5lcmljSW5zdGFuY2VNZXRob2QoRnVuY3Rpb24gZikgewogICAgbGl2ZU1lbWJlclVzYWdlLmZvckVhY2goKE1lbWJlckVudGl0eSBtZW1iZXIsIE1lbWJlclVzYWdlIHVzYWdlKSB7CiAgICAgIGlmIChtZW1iZXIgaXMgRnVuY3Rpb25FbnRpdHkgJiYKICAgICAgICAgIG1lbWJlci5pc0luc3RhbmNlTWVtYmVyICYmCiAgICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlVmFyaWFibGVzKG1lbWJlcikuaXNOb3RFbXB0eSkgewogICAgICAgIGYobWVtYmVyKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBMaXN0PEZ1bmN0aW9uRW50aXR5PiBfdXNlck5vU3VjaE1ldGhvZHNDYWNoZTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8RnVuY3Rpb25FbnRpdHk+IGdldCB1c2VyTm9TdWNoTWV0aG9kcyB7CiAgICBpZiAoX3VzZXJOb1N1Y2hNZXRob2RzQ2FjaGUgPT0gbnVsbCkgewogICAgICBfdXNlck5vU3VjaE1ldGhvZHNDYWNoZSA9IDxGdW5jdGlvbkVudGl0eT5bXTsKCiAgICAgIGxpdmVNZW1iZXJVc2FnZS5mb3JFYWNoKChNZW1iZXJFbnRpdHkgbWVtYmVyLCBNZW1iZXJVc2FnZSBtZW1iZXJVc2FnZSkgewogICAgICAgIGlmIChtZW1iZXIgaXMgRnVuY3Rpb25FbnRpdHkgJiYgbWVtYmVyVXNhZ2UuaGFzVXNlKSB7CiAgICAgICAgICBpZiAobWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIgJiYKICAgICAgICAgICAgICBtZW1iZXIubmFtZSA9PSBJZGVudGlmaWVycy5ub1N1Y2hNZXRob2RfICYmCiAgICAgICAgICAgICAgIWNvbW1vbkVsZW1lbnRzLmlzRGVmYXVsdE5vU3VjaE1ldGhvZEltcGxlbWVudGF0aW9uKG1lbWJlcikpIHsKICAgICAgICAgICAgX3VzZXJOb1N1Y2hNZXRob2RzQ2FjaGUuYWRkKG1lbWJlcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KCiAgICByZXR1cm4gX3VzZXJOb1N1Y2hNZXRob2RzQ2FjaGU7CiAgfQoKICBTZXQ8RnVuY3Rpb25FbnRpdHk+IF9jbG9zdXJpemVkTWVtYmVyc0NhY2hlOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxGdW5jdGlvbkVudGl0eT4gZ2V0IGNsb3N1cml6ZWRNZW1iZXJzIHsKICAgIGlmIChfY2xvc3VyaXplZE1lbWJlcnNDYWNoZSA9PSBudWxsKSB7CiAgICAgIF9jbG9zdXJpemVkTWVtYmVyc0NhY2hlID0ge307CiAgICAgIGxpdmVNZW1iZXJVc2FnZS5mb3JFYWNoKChNZW1iZXJFbnRpdHkgbWVtYmVyLCBNZW1iZXJVc2FnZSB1c2FnZSkgewogICAgICAgIGlmIChtZW1iZXIuaXNGdW5jdGlvbiAmJiBtZW1iZXIuaXNJbnN0YW5jZU1lbWJlciAmJiB1c2FnZS5oYXNSZWFkKSB7CiAgICAgICAgICBfY2xvc3VyaXplZE1lbWJlcnNDYWNoZS5hZGQobWVtYmVyKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIF9jbG9zdXJpemVkTWVtYmVyc0NhY2hlOwogIH0KCiAgU2V0PEZ1bmN0aW9uRW50aXR5PiBfY2xvc3VyaXplZFN0YXRpY3NDYWNoZTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8RnVuY3Rpb25FbnRpdHk+IGdldCBjbG9zdXJpemVkU3RhdGljcyB7CiAgICBpZiAoX2Nsb3N1cml6ZWRTdGF0aWNzQ2FjaGUgPT0gbnVsbCkgewogICAgICBfY2xvc3VyaXplZFN0YXRpY3NDYWNoZSA9IHt9OwogICAgICBsaXZlTWVtYmVyVXNhZ2UuZm9yRWFjaCgoTWVtYmVyRW50aXR5IG1lbWJlciwgTWVtYmVyVXNhZ2UgdXNhZ2UpIHsKICAgICAgICBpZiAobWVtYmVyLmlzRnVuY3Rpb24gJiYKICAgICAgICAgICAgKG1lbWJlci5pc1N0YXRpYyB8fCBtZW1iZXIuaXNUb3BMZXZlbCkgJiYKICAgICAgICAgICAgdXNhZ2UuaGFzUmVhZCkgewogICAgICAgICAgX2Nsb3N1cml6ZWRTdGF0aWNzQ2FjaGUuYWRkKG1lbWJlcik7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIHJldHVybiBfY2xvc3VyaXplZFN0YXRpY3NDYWNoZTsKICB9Cn0KgO4ATk48AR8iJCEpQCsuKTU2GisoJBgBIAExKwEMMAEMHQEMKAEMHwEMKQEMIwEMKwEMNgEMSQFALgEMNAEMOAwmAQwxAQw4AQwnAQwpAR0BDCABDDgBQwFGAQw4AQwqAQxEAQwoAQwzAQwsASQgHxYbFxwZHS4aKx4gJBwWKRscFSUrLCUiMxsfM0YEAQwoLgQBGkcBDCI+LwQBDCNAMAQBDFEBDCpHJkwTCAgEAQwyRyYlTBMICAQBMAEMMys0AU8+KTpNMQwKCgYBJAQBLwEMMyskSU0vCgoGJAQBLwEMMyskSSE2HS8KCgYkBAIBLXBhY2thZ2U6Y29tcGlsZXIvc3JjL2tlcm5lbC9rZXJuZWxfd29ybGQuZGFydDRzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19lbWl0dGVyL3NvcnRlci5kYXJ0hEsvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmpzX2VtaXR0ZXIuc29ydGVyOwoKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKCi8vLyBTb3J0aW5nIHN0cmF0ZWd5IGZvciBsaWJyYXJpZXMsIGNsYXNzZXMgYW5kIG1lbWJlcnMuCmFic3RyYWN0IGNsYXNzIFNvcnRlciB7CiAgLy8vIFJldHVybnMgYSBzb3J0ZWQgbGlzdCBvZiBbbGlicmFyaWVzXS4KICBJdGVyYWJsZTxMaWJyYXJ5RW50aXR5PiBzb3J0TGlicmFyaWVzKEl0ZXJhYmxlPExpYnJhcnlFbnRpdHk+IGxpYnJhcmllcyk7CgogIC8vLyBSZXR1cm5zIGEgc29ydGVkIGxpc3Qgb2YgW2NsYXNzZXNdLgogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBzb3J0Q2xhc3NlcyhJdGVyYWJsZTxDbGFzc0VudGl0eT4gY2xhc3Nlcyk7CgogIC8vLyBSZXR1cm5zIGEgc29ydGVkIGxpc3Qgb2YgW3R5cGVkZWZzXS4KICBJdGVyYWJsZTxUeXBlZGVmRW50aXR5PiBzb3J0VHlwZWRlZnMoSXRlcmFibGU8VHlwZWRlZkVudGl0eT4gdHlwZWRlZnMpOwoKICAvLy8gUmV0dXJucyBhIHNvcnRlZCBsaXN0IG9mIFttZW1iZXJzXS4KICBJdGVyYWJsZTxUPiBzb3J0TWVtYmVyczxUIGV4dGVuZHMgTWVtYmVyRW50aXR5PihJdGVyYWJsZTxUPiBtZW1iZXJzKTsKCiAgaW50IGNvbXBhcmVMaWJyYXJpZXNCeUxvY2F0aW9uKExpYnJhcnlFbnRpdHkgYSwgTGlicmFyeUVudGl0eSBiKTsKICBpbnQgY29tcGFyZUNsYXNzZXNCeUxvY2F0aW9uKENsYXNzRW50aXR5IGEsIENsYXNzRW50aXR5IGIpOwogIGludCBjb21wYXJlVHlwZWRlZnNCeUxvY2F0aW9uKFR5cGVkZWZFbnRpdHkgYSwgVHlwZWRlZkVudGl0eSBiKTsKICBpbnQgY29tcGFyZU1lbWJlcnNCeUxvY2F0aW9uKE1lbWJlckVudGl0eSBhLCBNZW1iZXJFbnRpdHkgYik7Cn0KHQBOTjwBIwEkATkYLEwBKkQBK0oBKkgBRD5DQAIBK3BhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvc29ydGVyLmRhcnQ5c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvY29uc3RhbnRzL2NvbnN0cnVjdG9ycy5kYXJ0qwMvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmNvbnN0YW50cy5jb25zdHJ1Y3RvcnM7CgppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnIHNob3cgRmllbGRFbnRpdHk7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydCcgc2hvdyBDYWxsU3RydWN0dXJlOwppbXBvcnQgJy4uL3V0aWwvdXRpbC5kYXJ0JzsKaW1wb3J0ICdldmFsdWF0aW9uLmRhcnQnOwppbXBvcnQgJ2V4cHJlc3Npb25zLmRhcnQnOwoKZW51bSBDb25zdGFudENvbnN0cnVjdG9yS2luZCB7CiAgR0VORVJBVElWRSwKICBSRURJUkVDVElOR19HRU5FUkFUSVZFLAogIFJFRElSRUNUSU5HX0ZBQ1RPUlksCiAgRVJST05FT1VTLAp9CgpjbGFzcyBJbnN0YW5jZURhdGEgewogIGZpbmFsIE1hcDxGaWVsZEVudGl0eSwgQ29uc3RhbnRFeHByZXNzaW9uPiBmaWVsZE1hcDsKICBmaW5hbCBMaXN0PEFzc2VydENvbnN0YW50RXhwcmVzc2lvbj4gYXNzZXJ0aW9uczsKCiAgSW5zdGFuY2VEYXRhKHRoaXMuZmllbGRNYXAsIHRoaXMuYXNzZXJ0aW9ucyk7Cn0KCi8vLyBEZWZpbml0aW9uIG9mIGEgY29uc3RhbnQgY29uc3RydWN0b3IuCmFic3RyYWN0IGNsYXNzIENvbnN0YW50Q29uc3RydWN0b3IgewogIENvbnN0YW50Q29uc3RydWN0b3JLaW5kIGdldCBraW5kOwoKICAvLy8gQ29tcHV0ZXMgdGhlIHR5cGUgb2YgdGhlIGluc3RhbmNlIGNyZWF0ZWQgaW4gYSBjb25zdCBjb25zdHJ1Y3RvcgogIC8vLyBpbnZvY2F0aW9uIHdpdGggdHlwZSBbbmV3VHlwZV0uCiAgSW50ZXJmYWNlVHlwZSBjb21wdXRlSW5zdGFuY2VUeXBlKAogICAgICBFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsIEludGVyZmFjZVR5cGUgbmV3VHlwZSk7CgogIC8vLyBDb21wdXRlcyB0aGUgY29uc3RhbnQgZXhwcmVzc2lvbnMgb2YgdGhlIGZpZWxkcyBhbmQgaW5pdGlhbGl6ZXIgYXNzZXJ0aW9ucwogIC8vLyBvZiB0aGUgY3JlYXRlZCBpbnN0YW5jZSBpbiBhIGNvbnN0IGNvbnN0cnVjdG9yIGludm9jYXRpb24gd2l0aAogIC8vLyBbYXJndW1lbnRzXS4KICBJbnN0YW5jZURhdGEgY29tcHV0ZUluc3RhbmNlRGF0YShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsCiAgICAgIExpc3Q8Q29uc3RhbnRFeHByZXNzaW9uPiBhcmd1bWVudHMsIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSk7CgogIGFjY2VwdChDb25zdGFudENvbnN0cnVjdG9yVmlzaXRvciB2aXNpdG9yLCBhcmcpOwp9CgphYnN0cmFjdCBjbGFzcyBDb25zdGFudENvbnN0cnVjdG9yVmlzaXRvcjxSLCBBPiB7CiAgY29uc3QgQ29uc3RhbnRDb25zdHJ1Y3RvclZpc2l0b3IoKTsKCiAgUiB2aXNpdCgKICAgICAgY292YXJpYW50IENvbnN0YW50Q29uc3RydWN0b3IgY29uc3RhbnRDb25zdHJ1Y3RvciwgY292YXJpYW50IEEgY29udGV4dCkgewogICAgcmV0dXJuIGNvbnN0YW50Q29uc3RydWN0b3IuYWNjZXB0KHRoaXMsIGNvbnRleHQpOwogIH0KCiAgUiB2aXNpdEdlbmVyYXRpdmUoCiAgICAgIGNvdmFyaWFudCBHZW5lcmF0aXZlQ29uc3RhbnRDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciwgY292YXJpYW50IEEgYXJnKTsKICBSIHZpc2l0UmVkaXJlY3RpbmdHZW5lcmF0aXZlKAogICAgICBjb3ZhcmlhbnQgUmVkaXJlY3RpbmdHZW5lcmF0aXZlQ29uc3RhbnRDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciwKICAgICAgY292YXJpYW50IEEgYXJnKTsKICBSIHZpc2l0UmVkaXJlY3RpbmdGYWN0b3J5KAogICAgICBjb3ZhcmlhbnQgUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RhbnRDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciwKICAgICAgY292YXJpYW50IEEgYXJnKTsKICBSIHZpc2l0RXJyb25lb3VzKAogICAgICBjb3ZhcmlhbnQgRXJyb25lb3VzQ29uc3RhbnRDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciwgY292YXJpYW50IEEgYXJnKTsKfQoKLy8vIEEgZ2VuZXJhdGl2ZSBjb25zdGFudCBjb25zdHJ1Y3Rvci4KY2xhc3MgR2VuZXJhdGl2ZUNvbnN0YW50Q29uc3RydWN0b3IgaW1wbGVtZW50cyBDb25zdGFudENvbnN0cnVjdG9yIHsKICBmaW5hbCBJbnRlcmZhY2VUeXBlIHR5cGU7CiAgZmluYWwgTWFwPGR5bmFtaWMgLyppbnR8U3RyaW5nKi8sIENvbnN0YW50RXhwcmVzc2lvbj4gZGVmYXVsdFZhbHVlczsKICBmaW5hbCBNYXA8RmllbGRFbnRpdHksIENvbnN0YW50RXhwcmVzc2lvbj4gZmllbGRNYXA7CiAgZmluYWwgTGlzdDxBc3NlcnRDb25zdGFudEV4cHJlc3Npb24+IGFzc2VydGlvbnM7CiAgZmluYWwgQ29uc3RydWN0ZWRDb25zdGFudEV4cHJlc3Npb24gc3VwZXJDb25zdHJ1Y3Rvckludm9jYXRpb247CgogIEdlbmVyYXRpdmVDb25zdGFudENvbnN0cnVjdG9yKHRoaXMudHlwZSwgdGhpcy5kZWZhdWx0VmFsdWVzLCB0aGlzLmZpZWxkTWFwLAogICAgICB0aGlzLmFzc2VydGlvbnMsIHRoaXMuc3VwZXJDb25zdHJ1Y3Rvckludm9jYXRpb24pOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudENvbnN0cnVjdG9yS2luZCBnZXQga2luZCA9PiBDb25zdGFudENvbnN0cnVjdG9yS2luZC5HRU5FUkFUSVZFOwoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGNvbXB1dGVJbnN0YW5jZVR5cGUoCiAgICAgIEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCwgSW50ZXJmYWNlVHlwZSBuZXdUeXBlKSB7CiAgICByZXR1cm4gZW52aXJvbm1lbnQuc3Vic3RCeUNvbnRleHQodHlwZSwgbmV3VHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnN0YW5jZURhdGEgY29tcHV0ZUluc3RhbmNlRGF0YShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsCiAgICAgIExpc3Q8Q29uc3RhbnRFeHByZXNzaW9uPiBhcmd1bWVudHMsIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSkgewogICAgTm9ybWFsaXplZEFyZ3VtZW50cyBhcmdzID0KICAgICAgICBuZXcgTm9ybWFsaXplZEFyZ3VtZW50cyhkZWZhdWx0VmFsdWVzLCBjYWxsU3RydWN0dXJlLCBhcmd1bWVudHMpOwogICAgSW5zdGFuY2VEYXRhIGFwcGxpZWRJbnN0YW5jZURhdGEgPQogICAgICAgIGFwcGx5SW5zdGFuY2VEYXRhKGVudmlyb25tZW50LCBhcmdzLCBzdXBlckNvbnN0cnVjdG9ySW52b2NhdGlvbik7CiAgICBmaWVsZE1hcC5mb3JFYWNoKChGaWVsZEVudGl0eSBmaWVsZCwgQ29uc3RhbnRFeHByZXNzaW9uIGNvbnN0YW50KSB7CiAgICAgIGFwcGxpZWRJbnN0YW5jZURhdGEuZmllbGRNYXBbZmllbGRdID0gY29uc3RhbnQuYXBwbHkoYXJncyk7CiAgICB9KTsKICAgIGZvciAoQXNzZXJ0Q29uc3RhbnRFeHByZXNzaW9uIGFzc2VydGlvbiBpbiBhc3NlcnRpb25zKSB7CiAgICAgIGFwcGxpZWRJbnN0YW5jZURhdGEuYXNzZXJ0aW9ucy5hZGQoYXNzZXJ0aW9uLmFwcGx5KGFyZ3MpKTsKICAgIH0KICAgIHJldHVybiBhcHBsaWVkSW5zdGFuY2VEYXRhOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50Q29uc3RydWN0b3JWaXNpdG9yIHZpc2l0b3IsIGFyZykgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRHZW5lcmF0aXZlKHRoaXMsIGFyZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIGludCBoYXNoID0gSGFzaGluZy5vYmplY3RIYXNoKHR5cGUpOwogICAgaGFzaCA9IEhhc2hpbmcubWFwSGFzaChkZWZhdWx0VmFsdWVzLCBoYXNoKTsKICAgIGhhc2ggPSBIYXNoaW5nLm1hcEhhc2goZmllbGRNYXAsIGhhc2gpOwogICAgcmV0dXJuIEhhc2hpbmcub2JqZWN0SGFzaChzdXBlckNvbnN0cnVjdG9ySW52b2NhdGlvbiwgaGFzaCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIEdlbmVyYXRpdmVDb25zdGFudENvbnN0cnVjdG9yKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHlwZSA9PSBvdGhlci50eXBlICYmCiAgICAgICAgc3VwZXJDb25zdHJ1Y3Rvckludm9jYXRpb24gPT0gb3RoZXIuc3VwZXJDb25zdHJ1Y3Rvckludm9jYXRpb24gJiYKICAgICAgICBtYXBFcXVhbHMoZGVmYXVsdFZhbHVlcywgb3RoZXIuZGVmYXVsdFZhbHVlcykgJiYKICAgICAgICBtYXBFcXVhbHMoZmllbGRNYXAsIG90aGVyLmZpZWxkTWFwKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCJ7J3R5cGUnOiAkdHlwZSIpOwogICAgZGVmYXVsdFZhbHVlcy5mb3JFYWNoKChrZXksIENvbnN0YW50RXhwcmVzc2lvbiBleHByZXNzaW9uKSB7CiAgICAgIHNiLndyaXRlKCIsXG4gJ2RlZmF1bHQ6JHtrZXl9JzogJHtleHByZXNzaW9uLnRvRGFydFRleHQoKX0iKTsKICAgIH0pOwogICAgZmllbGRNYXAuZm9yRWFjaCgoRmllbGRFbnRpdHkgZmllbGQsIENvbnN0YW50RXhwcmVzc2lvbiBleHByZXNzaW9uKSB7CiAgICAgIHNiLndyaXRlKCIsXG4gJ2ZpZWxkOiR7ZmllbGR9JzogJHtleHByZXNzaW9uLnRvRGFydFRleHQoKX0iKTsKICAgIH0pOwogICAgaWYgKHN1cGVyQ29uc3RydWN0b3JJbnZvY2F0aW9uICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoIixcbiAnY29uc3RydWN0b3I6ICR7c3VwZXJDb25zdHJ1Y3Rvckludm9jYXRpb24udG9EYXJ0VGV4dCgpfSIpOwogICAgfQogICAgc2Iud3JpdGUoIn0iKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgc3RhdGljIGJvb2wgbWFwRXF1YWxzKE1hcCBtYXAxLCBNYXAgbWFwMikgewogICAgaWYgKG1hcDEubGVuZ3RoICE9IG1hcDEubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICBmb3IgKHZhciBrZXkgaW4gbWFwMS5rZXlzKSB7CiAgICAgIGlmIChtYXAxW2tleV0gIT0gbWFwMltrZXldKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8vLyBDcmVhdGVzIHRoZSBmaWVsZC10by1jb25zdGFudCBtYXAgZnJvbSBhcHBseWluZyBbYXJnc10gdG8KICAvLy8gW2NvbnN0cnVjdG9ySW52b2NhdGlvbl0uIElmIFtjb25zdHJ1Y3Rvckludm9jYXRpb25dIGlzIGBudWxsYCwgYW4gZW1wdHkKICAvLy8gbWFwIGlzIGNyZWF0ZWQuIFJldHVybnMgYG51bGxgIGlmIGFuIGVycm9uZW91cyBjb25zdGFudCBjb25zdHJ1Y3RvciB3YXMKICAvLy8gZW5jb3VudGVyZWQgaW4gdGhlIHN1cGVyLWNoYWluLgogIHN0YXRpYyBJbnN0YW5jZURhdGEgYXBwbHlJbnN0YW5jZURhdGEoCiAgICAgIEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCwKICAgICAgTm9ybWFsaXplZEFyZ3VtZW50cyBhcmdzLAogICAgICBDb25zdHJ1Y3RlZENvbnN0YW50RXhwcmVzc2lvbiBjb25zdHJ1Y3Rvckludm9jYXRpb24pIHsKICAgIE1hcDxGaWVsZEVudGl0eSwgQ29uc3RhbnRFeHByZXNzaW9uPiBhcHBsaWVkRmllbGRNYXAgPQogICAgICAgIDxGaWVsZEVudGl0eSwgQ29uc3RhbnRFeHByZXNzaW9uPnt9OwogICAgTGlzdDxBc3NlcnRDb25zdGFudEV4cHJlc3Npb24+IGFwcGxpZWRBc3NlcnRpb25zID0KICAgICAgICA8QXNzZXJ0Q29uc3RhbnRFeHByZXNzaW9uPltdOwogICAgaWYgKGNvbnN0cnVjdG9ySW52b2NhdGlvbiAhPSBudWxsKSB7CiAgICAgIEluc3RhbmNlRGF0YSBpbnN0YW5jZURhdGEgPQogICAgICAgICAgY29uc3RydWN0b3JJbnZvY2F0aW9uLmNvbXB1dGVJbnN0YW5jZURhdGEoZW52aXJvbm1lbnQpOwogICAgICBpZiAoaW5zdGFuY2VEYXRhID09IG51bGwpIHsKICAgICAgICAvLyBBbiBlcnJvbmVvdXMgY29uc3RhbnQgY29uc3RydWN0b3Igd2FzIGVuY291bnRlcmVkIGluIHRoZSBzdXBlci1jaGFpbi4KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBpbnN0YW5jZURhdGEuZmllbGRNYXAKICAgICAgICAgIC5mb3JFYWNoKChGaWVsZEVudGl0eSBmaWVsZCwgQ29uc3RhbnRFeHByZXNzaW9uIGNvbnN0YW50KSB7CiAgICAgICAgYXBwbGllZEZpZWxkTWFwW2ZpZWxkXSA9IGNvbnN0YW50LmFwcGx5KGFyZ3MpOwogICAgICB9KTsKICAgICAgZm9yIChBc3NlcnRDb25zdGFudEV4cHJlc3Npb24gYXNzZXJ0aW9uIGluIGluc3RhbmNlRGF0YS5hc3NlcnRpb25zKSB7CiAgICAgICAgYXBwbGllZEFzc2VydGlvbnMuYWRkKGFzc2VydGlvbi5hcHBseShhcmdzKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgSW5zdGFuY2VEYXRhKGFwcGxpZWRGaWVsZE1hcCwgYXBwbGllZEFzc2VydGlvbnMpOwogIH0KfQoKLy8vIEEgcmVkaXJlY3RpbmcgZ2VuZXJhdGl2ZSBjb25zdGFudCBjb25zdHJ1Y3Rvci4KY2xhc3MgUmVkaXJlY3RpbmdHZW5lcmF0aXZlQ29uc3RhbnRDb25zdHJ1Y3RvciBpbXBsZW1lbnRzIENvbnN0YW50Q29uc3RydWN0b3IgewogIGZpbmFsIE1hcDxkeW5hbWljIC8qaW50fFN0cmluZyovLCBDb25zdGFudEV4cHJlc3Npb24+IGRlZmF1bHRWYWx1ZXM7CiAgZmluYWwgQ29uc3RydWN0ZWRDb25zdGFudEV4cHJlc3Npb24gdGhpc0NvbnN0cnVjdG9ySW52b2NhdGlvbjsKCiAgUmVkaXJlY3RpbmdHZW5lcmF0aXZlQ29uc3RhbnRDb25zdHJ1Y3RvcigKICAgICAgdGhpcy5kZWZhdWx0VmFsdWVzLCB0aGlzLnRoaXNDb25zdHJ1Y3Rvckludm9jYXRpb24pOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudENvbnN0cnVjdG9yS2luZCBnZXQga2luZCB7CiAgICByZXR1cm4gQ29uc3RhbnRDb25zdHJ1Y3RvcktpbmQuUkVESVJFQ1RJTkdfR0VORVJBVElWRTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgY29tcHV0ZUluc3RhbmNlVHlwZSgKICAgICAgRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50LCBJbnRlcmZhY2VUeXBlIG5ld1R5cGUpIHsKICAgIHJldHVybiBlbnZpcm9ubWVudC5zdWJzdEJ5Q29udGV4dCgKICAgICAgICB0aGlzQ29uc3RydWN0b3JJbnZvY2F0aW9uLmNvbXB1dGVJbnN0YW5jZVR5cGUoZW52aXJvbm1lbnQpLCBuZXdUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIEluc3RhbmNlRGF0YSBjb21wdXRlSW5zdGFuY2VEYXRhKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCwKICAgICAgTGlzdDxDb25zdGFudEV4cHJlc3Npb24+IGFyZ3VtZW50cywgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlKSB7CiAgICBOb3JtYWxpemVkQXJndW1lbnRzIGFyZ3MgPQogICAgICAgIG5ldyBOb3JtYWxpemVkQXJndW1lbnRzKGRlZmF1bHRWYWx1ZXMsIGNhbGxTdHJ1Y3R1cmUsIGFyZ3VtZW50cyk7CiAgICBJbnN0YW5jZURhdGEgYXBwbGllZEluc3RhbmNlRGF0YSA9CiAgICAgICAgR2VuZXJhdGl2ZUNvbnN0YW50Q29uc3RydWN0b3IuYXBwbHlJbnN0YW5jZURhdGEoCiAgICAgICAgICAgIGVudmlyb25tZW50LCBhcmdzLCB0aGlzQ29uc3RydWN0b3JJbnZvY2F0aW9uKTsKICAgIHJldHVybiBhcHBsaWVkSW5zdGFuY2VEYXRhOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50Q29uc3RydWN0b3JWaXNpdG9yIHZpc2l0b3IsIGFyZykgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRSZWRpcmVjdGluZ0dlbmVyYXRpdmUodGhpcywgYXJnKTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgewogICAgaW50IGhhc2ggPSBIYXNoaW5nLm9iamVjdEhhc2godGhpc0NvbnN0cnVjdG9ySW52b2NhdGlvbik7CiAgICByZXR1cm4gSGFzaGluZy5tYXBIYXNoKGRlZmF1bHRWYWx1ZXMsIGhhc2gpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBSZWRpcmVjdGluZ0dlbmVyYXRpdmVDb25zdGFudENvbnN0cnVjdG9yKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdGhpc0NvbnN0cnVjdG9ySW52b2NhdGlvbiA9PSBvdGhlci50aGlzQ29uc3RydWN0b3JJbnZvY2F0aW9uICYmCiAgICAgICAgR2VuZXJhdGl2ZUNvbnN0YW50Q29uc3RydWN0b3IubWFwRXF1YWxzKAogICAgICAgICAgICBkZWZhdWx0VmFsdWVzLCBvdGhlci5kZWZhdWx0VmFsdWVzKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCJ7J3R5cGUnOiAke3RoaXNDb25zdHJ1Y3Rvckludm9jYXRpb24udHlwZX0iKTsKICAgIGRlZmF1bHRWYWx1ZXMuZm9yRWFjaCgoa2V5LCBDb25zdGFudEV4cHJlc3Npb24gZXhwcmVzc2lvbikgewogICAgICBzYi53cml0ZSgiLFxuICdkZWZhdWx0OiR7a2V5fSc6ICR7ZXhwcmVzc2lvbi50b0RhcnRUZXh0KCl9Iik7CiAgICB9KTsKICAgIHNiLndyaXRlKCIsXG4gJ2NvbnN0cnVjdG9yJzogJHt0aGlzQ29uc3RydWN0b3JJbnZvY2F0aW9uLnRvRGFydFRleHQoKX0iKTsKICAgIHNiLndyaXRlKCJ9Iik7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCi8vLyBBIHJlZGlyZWN0aW5nIGZhY3RvcnkgY29uc3RhbnQgY29uc3RydWN0b3IuCmNsYXNzIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0YW50Q29uc3RydWN0b3IgaW1wbGVtZW50cyBDb25zdGFudENvbnN0cnVjdG9yIHsKICBmaW5hbCBDb25zdHJ1Y3RlZENvbnN0YW50RXhwcmVzc2lvbiB0YXJnZXRDb25zdHJ1Y3Rvckludm9jYXRpb247CgogIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0YW50Q29uc3RydWN0b3IodGhpcy50YXJnZXRDb25zdHJ1Y3Rvckludm9jYXRpb24pOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudENvbnN0cnVjdG9yS2luZCBnZXQga2luZCB7CiAgICByZXR1cm4gQ29uc3RhbnRDb25zdHJ1Y3RvcktpbmQuUkVESVJFQ1RJTkdfRkFDVE9SWTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgY29tcHV0ZUluc3RhbmNlVHlwZSgKICAgICAgRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50LCBJbnRlcmZhY2VUeXBlIG5ld1R5cGUpIHsKICAgIHJldHVybiBlbnZpcm9ubWVudC5zdWJzdEJ5Q29udGV4dCgKICAgICAgICB0YXJnZXRDb25zdHJ1Y3Rvckludm9jYXRpb24uY29tcHV0ZUluc3RhbmNlVHlwZShlbnZpcm9ubWVudCksIG5ld1R5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5zdGFuY2VEYXRhIGNvbXB1dGVJbnN0YW5jZURhdGEoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50LAogICAgICBMaXN0PENvbnN0YW50RXhwcmVzc2lvbj4gYXJndW1lbnRzLCBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUpIHsKICAgIENvbnN0YW50Q29uc3RydWN0b3IgY29uc3RhbnRDb25zdHJ1Y3RvciA9CiAgICAgICAgZW52aXJvbm1lbnQuZ2V0Q29uc3RydWN0b3JDb25zdGFudCh0YXJnZXRDb25zdHJ1Y3Rvckludm9jYXRpb24udGFyZ2V0KTsKICAgIHJldHVybiBjb25zdGFudENvbnN0cnVjdG9yLmNvbXB1dGVJbnN0YW5jZURhdGEoCiAgICAgICAgZW52aXJvbm1lbnQsIGFyZ3VtZW50cywgY2FsbFN0cnVjdHVyZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRDb25zdHJ1Y3RvclZpc2l0b3IgdmlzaXRvciwgYXJnKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFJlZGlyZWN0aW5nRmFjdG9yeSh0aGlzLCBhcmcpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gSGFzaGluZy5vYmplY3RIYXNoKHRhcmdldENvbnN0cnVjdG9ySW52b2NhdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0YW50Q29uc3RydWN0b3IpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0YXJnZXRDb25zdHJ1Y3Rvckludm9jYXRpb24gPT0gb3RoZXIudGFyZ2V0Q29uc3RydWN0b3JJbnZvY2F0aW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoInsiKTsKICAgIHNiLndyaXRlKCInY29uc3RydWN0b3InOiAke3RhcmdldENvbnN0cnVjdG9ySW52b2NhdGlvbi50b0RhcnRUZXh0KCl9Iik7CiAgICBzYi53cml0ZSgifSIpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgovLy8gQSBjb25zdGFudCBjb25zdHJ1Y3RvciB3aXRoIGVycm9ycy4KY2xhc3MgRXJyb25lb3VzQ29uc3RhbnRDb25zdHJ1Y3RvciBpbXBsZW1lbnRzIENvbnN0YW50Q29uc3RydWN0b3IgewogIEBvdmVycmlkZQogIENvbnN0YW50Q29uc3RydWN0b3JLaW5kIGdldCBraW5kID0+IENvbnN0YW50Q29uc3RydWN0b3JLaW5kLkVSUk9ORU9VUzsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50Q29uc3RydWN0b3JWaXNpdG9yIHZpc2l0b3IsIGFyZykgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRFcnJvbmVvdXModGhpcywgYXJnKTsKICB9CgogIEBvdmVycmlkZQogIEluc3RhbmNlRGF0YSBjb21wdXRlSW5zdGFuY2VEYXRhKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCwKICAgICAgTGlzdDxDb25zdGFudEV4cHJlc3Npb24+IGFyZ3VtZW50cywgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgY29tcHV0ZUluc3RhbmNlVHlwZSgKICAgICAgRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50LCBJbnRlcmZhY2VUeXBlIG5ld1R5cGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICdFcnJvbmVvdXNDb25zdGFudENvbnN0cnVjdG9yLmNvbXB1dGVJbnN0YW5jZVR5cGUnKTsKICB9Cn0KgUUATk48ASgBNSE9HBobAR8OGhcNAgEVNzMBMAIBKiUkAUcmJUEBUUUTRkgBMwIBMiYBC1A2BAEVTSBGGB1DGBRMAgEnRRxHNzNCAU45AQxKAQwlQjYEAQxGSR9KJ0pIQgg9QQYgBAEMNC8EAQwVKTEsQQQBDBwtPyFKOS0EAQwWKiBBRAhKRAguUAYTGgQBLjIhJBYIBhEEAUBOTiYpKSA9Oy03JikiQiJRFQgcRjcKTDYIBkEEAgEzUEdBASw7AQwlOwQBDCVCJ04EAQxGSR9KJzk7IAQBDDQ6BAEMFT4xBAEMHC1KSzExBAEMFio8QUQIThMaBAIBME1DAUsBDCU4BAEMJUInUAQBDEZJLlA0MAQBDDQ3BAEMFTwEAQwcLUdNBAEMFioTTBMaBAIBKEQMSQEMNC4EAQxGSREEAQwlQiA9BAIBMHBhY2thZ2U6Y29tcGlsZXIvc3JjL2NvbnN0YW50cy9jb25zdHJ1Y3RvcnMuZGFydDdzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9jb25zdGFudHMvZXZhbHVhdGlvbi5kYXJ0pMUvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmNvbnN0YW50cy5ldmFsdWF0aW9uOwoKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Vuc3RhYmxlL2RhcnQyanMuZGFydCcgc2hvdyBMaW5rOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgQ29tbW9uRWxlbWVudHM7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydCcgc2hvdyBDYWxsU3RydWN0dXJlOwppbXBvcnQgJ2NvbnN0cnVjdG9ycy5kYXJ0JzsKaW1wb3J0ICdleHByZXNzaW9ucy5kYXJ0JzsKaW1wb3J0ICd2YWx1ZXMuZGFydCc7CgovLy8gRW52aXJvbm1lbnQgdXNlZCBmb3IgZXZhbHVhdGluZyBjb25zdGFudCBleHByZXNzaW9ucy4KYWJzdHJhY3QgY2xhc3MgRXZhbHVhdGlvbkVudmlyb25tZW50IHsKICBDb21tb25FbGVtZW50cyBnZXQgY29tbW9uRWxlbWVudHM7CgogIERhcnRUeXBlcyBnZXQgdHlwZXM7CgogIC8vLyBUeXBlIGluIHRoZSBlbmNsb3NpbmcgY29uc3RydWN0ZWQKICBJbnRlcmZhY2VUeXBlIGdldCBlbmNsb3NpbmdDb25zdHJ1Y3RlZFR5cGU7CgogIC8vLyBSZWFkIGVudmlyb25tZW50cyBzdHJpbmcgcGFzc2VkIGluIHVzaW5nIHRoZSAnLURuYW1lPXZhbHVlJyBvcHRpb24uCiAgU3RyaW5nIHJlYWRGcm9tRW52aXJvbm1lbnQoU3RyaW5nIG5hbWUpOwoKICAvLy8gUmV0dXJucyB0aGUgW0NvbnN0YW50RXhwcmVzc2lvbl0gZm9yIHRoZSB2YWx1ZSBvZiB0aGUgY29uc3RhbnQgW2xvY2FsXS4KICBDb25zdGFudEV4cHJlc3Npb24gZ2V0TG9jYWxDb25zdGFudChjb3ZhcmlhbnQgTG9jYWwgbG9jYWwpOwoKICAvLy8gUmV0dXJucyB0aGUgW0NvbnN0YW50RXhwcmVzc2lvbl0gZm9yIHRoZSB2YWx1ZSBvZiB0aGUgY29uc3RhbnQgW2ZpZWxkXS4KICBDb25zdGFudEV4cHJlc3Npb24gZ2V0RmllbGRDb25zdGFudChjb3ZhcmlhbnQgRmllbGRFbnRpdHkgZmllbGQpOwoKICAvLy8gUmV0dXJucyB0aGUgW0NvbnN0YW50Q29uc3RydWN0b3JdIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNvbnN0YW50CiAgLy8vIFtjb25zdHJ1Y3Rvcl0uCiAgQ29uc3RhbnRDb25zdHJ1Y3RvciBnZXRDb25zdHJ1Y3RvckNvbnN0YW50KAogICAgICBjb3ZhcmlhbnQgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IpOwoKICAvLy8gUGVyZm9ybXMgdGhlIHN1YnN0aXR1dGlvbiBvZiB0aGUgdHlwZSBhcmd1bWVudHMgb2YgW3RhcmdldF0gZm9yIHRoZWlyCiAgLy8vIGNvcnJlc3BvbmRpbmcgdHlwZSB2YXJpYWJsZXMgaW4gW3R5cGVdLgogIERhcnRUeXBlIHN1YnN0QnlDb250ZXh0KAogICAgICBjb3ZhcmlhbnQgRGFydFR5cGUgYmFzZSwgY292YXJpYW50IEludGVyZmFjZVR5cGUgdGFyZ2V0KTsKCiAgLy8vIFJldHVybnMgW3R5cGVdIGluIHRoZSBjb250ZXh0IG9mIHRoZSBbZW5jbG9zaW5nQ29uc3RydWN0ZWRUeXBlXS4KICBEYXJ0VHlwZSBnZXRUeXBlSW5Db250ZXh0KERhcnRUeXBlIHR5cGUpOwoKICB2b2lkIHJlcG9ydFdhcm5pbmcoCiAgICAgIENvbnN0YW50RXhwcmVzc2lvbiBleHByZXNzaW9uLCBNZXNzYWdlS2luZCBraW5kLCBNYXAgYXJndW1lbnRzKTsKCiAgdm9pZCByZXBvcnRFcnJvcigKICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIGV4cHJlc3Npb24sIE1lc3NhZ2VLaW5kIGtpbmQsIE1hcCBhcmd1bWVudHMpOwoKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlQ29uc3RydWN0b3IoQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IsCiAgICAgIEludGVyZmFjZVR5cGUgdHlwZSwgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZSgpKTsKCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZU1hcEJvZHkoQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZSgpKTsKCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZUZpZWxkKEZpZWxkRW50aXR5IGZpZWxkLCBDb25zdGFudFZhbHVlIGV2YWx1YXRlKCkpOwoKICAvLy8gYHRydWVgIGlmIGFzc2VydGlvbnMgYXJlIGVuYWJsZWQuCiAgYm9vbCBnZXQgZW5hYmxlQXNzZXJ0aW9uczsKCiAgLy8vIElmIGB0cnVlYCwgaW1wbGljaXQgY2FzdHMgc2hvdWxkIGJlIGNoZWNrZWQuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYmV0d2VlbiBqcy1pbnRlcm9wIGNsYXNzZXMKICAvLy8gYW5kIHRoZWlyIG1ldGFkYXRhLiBGb3Igbm9uLW1ldGFkYXRhIGNvbnN0YW50cyB3ZSBhbHdheXMgY2hlY2sgdGhlIGNhc3RzLgogIGJvb2wgZ2V0IGNoZWNrQ2FzdHM7Cn0KCmFic3RyYWN0IGNsYXNzIEV2YWx1YXRpb25FbnZpcm9ubWVudEJhc2UgaW1wbGVtZW50cyBFdmFsdWF0aW9uRW52aXJvbm1lbnQgewogIExpbms8U3Bhbm5hYmxlPiBfc3Bhbm5hYmxlU3RhY2sgPSBjb25zdCBMaW5rPFNwYW5uYWJsZT4oKTsKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGVuY2xvc2luZ0NvbnN0cnVjdGVkVHlwZTsKICBmaW5hbCBTZXQ8RmllbGRFbnRpdHk+IF9jdXJyZW50bHlFdmFsdWF0ZWRGaWVsZHMgPSBuZXcgU2V0PEZpZWxkRW50aXR5PigpOwogIGZpbmFsIGJvb2wgY29uc3RhbnRSZXF1aXJlZDsKCiAgRXZhbHVhdGlvbkVudmlyb25tZW50QmFzZShTcGFubmFibGUgc3Bhbm5hYmxlLCB7dGhpcy5jb25zdGFudFJlcXVpcmVkfSkgewogICAgX3NwYW5uYWJsZVN0YWNrID0gX3NwYW5uYWJsZVN0YWNrLnByZXBlbmQoc3Bhbm5hYmxlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGNoZWNrQ2FzdHMgPT4gdHJ1ZTsKCiAgRGlhZ25vc3RpY1JlcG9ydGVyIGdldCByZXBvcnRlcjsKCiAgLy8vIFJldHVybnMgdGhlIFtTcGFubmFibGVdIHVzZWQgZm9yIHJlcG9ydGluZyBlcnJvcnMgYW5kIHdhcm5pbmdzLgogIC8vLwogIC8vLyBSZXR1cm5zIHRoZSBzZWNvbmQtdG8tbGFzdCBpbiB0aGUgc3Bhbm5hYmxlIHN0YWNrLCBpZiBhdmFpbGFibGUsIHRvIHBvaW50CiAgLy8vIHRvIHRoZSB1c2UsIHJhdGhlciB0aGFuIHRoZSBkZWNsYXJhdGlvbiwgb2YgYSBjb25zdHJ1Y3RvciBvciBmaWVsZC4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlCiAgLy8vCiAgLy8vICAgIGNvbnN0IGZvbyA9IGNvbnN0IGJvb2wuZnJvbUVudmlyb25tZW50KCJmb28iLCBkZWZhdWx0OiAwKTsKICAvLy8KICAvLy8gd2lsbCBwb2ludCB0byBgZm9vYCBpbnN0ZWFkIG9mIHRoZSBkZWNsYXJhdGlvbiBvZiBgYm9vbC5mcm9tRW52aXJvbm1lbnRgLgogIFNwYW5uYWJsZSBnZXQgX3NwYW5uYWJsZSA9PiBfc3Bhbm5hYmxlU3RhY2sudGFpbC5pc0VtcHR5CiAgICAgID8gX3NwYW5uYWJsZVN0YWNrLmhlYWQKICAgICAgOiBfc3Bhbm5hYmxlU3RhY2sudGFpbC5oZWFkOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlRmllbGQoRmllbGRFbnRpdHkgZmllbGQsIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoKSkgewogICAgaWYgKF9jdXJyZW50bHlFdmFsdWF0ZWRGaWVsZHMuYWRkKGZpZWxkKSkgewogICAgICBfc3Bhbm5hYmxlU3RhY2sgPSBfc3Bhbm5hYmxlU3RhY2sucHJlcGVuZChmaWVsZCk7CiAgICAgIENvbnN0YW50VmFsdWUgcmVzdWx0ID0gZXZhbHVhdGUoKTsKICAgICAgX2N1cnJlbnRseUV2YWx1YXRlZEZpZWxkcy5yZW1vdmUoZmllbGQpOwogICAgICBfc3Bhbm5hYmxlU3RhY2sgPSBfc3Bhbm5hYmxlU3RhY2sudGFpbDsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGlmIChjb25zdGFudFJlcXVpcmVkKSB7CiAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgIGZpZWxkLCBNZXNzYWdlS2luZC5DWUNMSUNfQ09NUElMRV9USU1FX0NPTlNUQU5UUyk7CiAgICB9CiAgICByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGVDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvciwKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlLCBDb25zdGFudFZhbHVlIGV2YWx1YXRlKCkpIHsKICAgIF9zcGFubmFibGVTdGFjayA9IF9zcGFubmFibGVTdGFjay5wcmVwZW5kKGNvbnN0cnVjdG9yKTsKICAgIHZhciBvbGQgPSBlbmNsb3NpbmdDb25zdHJ1Y3RlZFR5cGU7CiAgICBlbmNsb3NpbmdDb25zdHJ1Y3RlZFR5cGUgPSB0eXBlOwogICAgQ29uc3RhbnRWYWx1ZSByZXN1bHQgPSBldmFsdWF0ZSgpOwogICAgLy8gQWxsIGNvbnN0IHNldCBsaXRlcmFscyBoYXZlIGFzIGFuIGltbWVkaWF0ZSBjaGlsZCBhIGNvbnN0IG1hcC4gVGhlIG1hcAogICAgLy8gZXZhbHVhdGUgbWV0aG9kIGNhbGxzIGV2YWx1YXRlTWFwQm9keSBhbmQgcmVzZXQgdGhpcyBmbGFnIGltbWVkaWF0ZWx5LgogICAgLy8gQmVjYXVzZSB0aGVyZSBhcmUgbm8gb3RoZXIgY2hpbGRyZW4sIHRoZSBmbGFnIGlzIGtlcHQgZmFsc2UuCiAgICBlbmNsb3NpbmdDb25zdHJ1Y3RlZFR5cGUgPSBvbGQ7CiAgICBfc3Bhbm5hYmxlU3RhY2sgPSBfc3Bhbm5hYmxlU3RhY2sudGFpbDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlTWFwQm9keShDb25zdGFudFZhbHVlIGV2YWx1YXRlKCkpIHsKICAgIHJldHVybiBldmFsdWF0ZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZXBvcnRFcnJvcigKICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIGV4cHJlc3Npb24sIE1lc3NhZ2VLaW5kIGtpbmQsIE1hcCBhcmd1bWVudHMpIHsKICAgIGlmIChjb25zdGFudFJlcXVpcmVkKSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFNob3VsZCBbQ29uc3RhbnRFeHByZXNzaW9uXSBoYXZlIGEgbG9jYXRpb24/CiAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZShfc3Bhbm5hYmxlLCBraW5kLCBhcmd1bWVudHMpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZXBvcnRXYXJuaW5nKAogICAgICBDb25zdGFudEV4cHJlc3Npb24gZXhwcmVzc2lvbiwgTWVzc2FnZUtpbmQga2luZCwgTWFwIGFyZ3VtZW50cykgewogICAgaWYgKGNvbnN0YW50UmVxdWlyZWQpIHsKICAgICAgcmVwb3J0ZXIucmVwb3J0V2FybmluZ01lc3NhZ2UoX3NwYW5uYWJsZSwga2luZCwgYXJndW1lbnRzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldFR5cGVJbkNvbnRleHQoRGFydFR5cGUgdHlwZSkgewogICAgLy8gUnVubmluZyBleGFtcGxlIGZvciBjb21tZW50czoKICAgIC8vCiAgICAvLyAgICAgY2xhc3MgQTxUPiB7CiAgICAvLyAgICAgICBmaW5hbCBUIHQ7CiAgICAvLyAgICAgICBjb25zdCBBKGR5bmFtaWMgdCkgOiB0aGlzLnQgPSB0OyAvLyBpbXBsaWNpdGx5IGB0IGFzIEEuVGAKICAgIC8vICAgICB9CiAgICAvLyAgICAgY2xhc3MgQjxTPiBleHRlbmRzIEE8Uz4gewogICAgLy8gICAgICAgY29uc3QgQihkeW5hbWljIHMpIDogc3VwZXIocyk7CiAgICAvLyAgICAgfQogICAgLy8gICAgIG1haW4oKSA9PiBjb25zdCBCPG51bT4oMCk7CiAgICAvLwogICAgLy8gV2UgdmlzaXQgYHQgYXMgQS5UYCB3aGlsZSBldmFsdWF0aW5nIGBjb25zdCBCPG51bT4oMClgLgoKICAgIC8vIFRoZSBgYXNgIHR5cGUgaXMgYEEuVGAuCiAgICBEYXJ0VHlwZSB0eXBlSW5Db250ZXh0ID0gdHlwZTsKCiAgICAvLyBUaGUgZW5jbG9zaW5nIHR5cGUgaXMgYEI8bnVtPmAuCiAgICBEYXJ0VHlwZSBlbmNsb3NpbmdUeXBlID0gZW5jbG9zaW5nQ29uc3RydWN0ZWRUeXBlOwogICAgaWYgKGVuY2xvc2luZ1R5cGUgIT0gbnVsbCkgewogICAgICBDbGFzc0VudGl0eSBjb250ZXh0Q2xhc3M7CiAgICAgIHR5cGUuZm9yRWFjaFR5cGVWYXJpYWJsZSgoVHlwZVZhcmlhYmxlVHlwZSB0eXBlKSB7CiAgICAgICAgaWYgKHR5cGUuZWxlbWVudC50eXBlRGVjbGFyYXRpb24gaXMgQ2xhc3NFbnRpdHkpIHsKICAgICAgICAgIC8vIFdlIGZpbmQgYEFgIGZyb20gYEEuVGAuIFNpbmNlIHdlIGRvbid0IGhhdmUgbmVzdGVkIGNsYXNzZXMsIGNsYXNzCiAgICAgICAgICAvLyBiYXNlZCB0eXBlIHZhcmlhYmxlcyBjYW4gb25seSBjb21lIGZyb20gdGhlIHNhbWUgY2xhc3MuCiAgICAgICAgICBjb250ZXh0Q2xhc3MgPSB0eXBlLmVsZW1lbnQudHlwZURlY2xhcmF0aW9uOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGlmIChjb250ZXh0Q2xhc3MgIT0gbnVsbCkgewogICAgICAgIC8vIFRoZSBlbmNsb3NpbmcgdHlwZSBgQjxudW0+YCBhcyBhbiBpbnN0YW5jZSBvZiBgQWAgaXMgYEE8bnVtPmAuCiAgICAgICAgZW5jbG9zaW5nVHlwZSA9IHR5cGVzLmFzSW5zdGFuY2VPZihlbmNsb3NpbmdUeXBlLCBjb250ZXh0Q2xhc3MpOwogICAgICB9CiAgICAgIC8vIGBBLlRgIGluIHRoZSBjb250ZXh0IG9mIHRoZSBlbmNsb3NpbmcgdHlwZSBgQTxudW0+YCBpcyBgbnVtYC4KICAgICAgdHlwZUluQ29udGV4dCA9IGVuY2xvc2luZ1R5cGUgIT0gbnVsbAogICAgICAgICAgPyBzdWJzdEJ5Q29udGV4dCh0eXBlSW5Db250ZXh0LCBlbmNsb3NpbmdUeXBlKQogICAgICAgICAgOiB0eXBlSW5Db250ZXh0OwogICAgfQogICAgcmV0dXJuIHR5cGVJbkNvbnRleHQ7CiAgfQp9CgovLy8gVGhlIG5vcm1hbGl6ZWQgYXJndW1lbnRzIHBhc3NlZCB0byBhIGNvbnN0IGNvbnN0cnVjdG9yIGNvbXB1dGVkIGZyb20gdGhlCi8vLyBhY3R1YWwgW2FyZ3VtZW50c10gYW5kIHRoZSBbZGVmYXVsdFZhbHVlc10gb2YgdGhlIGNhbGxlZCBjb25zdHJ1cmN0b3IuCmNsYXNzIE5vcm1hbGl6ZWRBcmd1bWVudHMgewogIGZpbmFsIE1hcDxkeW5hbWljIC8qaW50fFN0cmluZyovLCBDb25zdGFudEV4cHJlc3Npb24+IGRlZmF1bHRWYWx1ZXM7CiAgZmluYWwgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlOwogIGZpbmFsIExpc3Q8Q29uc3RhbnRFeHByZXNzaW9uPiBhcmd1bWVudHM7CgogIE5vcm1hbGl6ZWRBcmd1bWVudHModGhpcy5kZWZhdWx0VmFsdWVzLCB0aGlzLmNhbGxTdHJ1Y3R1cmUsIHRoaXMuYXJndW1lbnRzKTsKCiAgLy8vIFJldHVybnMgdGhlIG5vcm1hbGl6ZWQgbmFtZWQgYXJndW1lbnQgW25hbWVdLgogIENvbnN0YW50RXhwcmVzc2lvbiBnZXROYW1lZEFyZ3VtZW50KFN0cmluZyBuYW1lKSB7CiAgICBpbnQgaW5kZXggPSBjYWxsU3RydWN0dXJlLm5hbWVkQXJndW1lbnRzLmluZGV4T2YobmFtZSk7CiAgICBpZiAoaW5kZXggPT0gLTEpIHsKICAgICAgLy8gVGhlIG5hbWVkIGFyZ3VtZW50IGlzIG5vdCBwcm92aWRlZC4KICAgICAgYXNzZXJ0KAogICAgICAgICAgZGVmYXVsdFZhbHVlc1tuYW1lXSAhPSBudWxsLAogICAgICAgICAgZmFpbGVkQXQoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICAgICAiTm8gZGVmYXVsdCB2YWx1ZSBmb3IgbmFtZWQgYXJndW1lbnQgJyRuYW1lJyBpbiAkdGhpcy4iKSk7CiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWVzW25hbWVdOwogICAgfQogICAgQ29uc3RhbnRFeHByZXNzaW9uIHZhbHVlID0KICAgICAgICBhcmd1bWVudHNbaW5kZXggKyBjYWxsU3RydWN0dXJlLnBvc2l0aW9uYWxBcmd1bWVudENvdW50XTsKICAgIGFzc2VydCgKICAgICAgICB2YWx1ZSAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAgICJObyB2YWx1ZSBmb3IgbmFtZWQgYXJndW1lbnQgJyRuYW1lJyBpbiAkdGhpcy4iKSk7CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbm9ybWFsaXplZCBbaW5kZXhddGggcG9zaXRpb25hbCBhcmd1bWVudC4KICBDb25zdGFudEV4cHJlc3Npb24gZ2V0UG9zaXRpb25hbEFyZ3VtZW50KGludCBpbmRleCkgewogICAgaWYgKGluZGV4ID49IGNhbGxTdHJ1Y3R1cmUucG9zaXRpb25hbEFyZ3VtZW50Q291bnQpIHsKICAgICAgLy8gVGhlIHBvc2l0aW9uYWwgYXJndW1lbnQgaXMgbm90IHByb3ZpZGVkLgogICAgICBhc3NlcnQoCiAgICAgICAgICBkZWZhdWx0VmFsdWVzW2luZGV4XSAhPSBudWxsLAogICAgICAgICAgZmFpbGVkQXQoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICAgICAiTm8gZGVmYXVsdCB2YWx1ZSBmb3IgcG9zaXRpb25hbCBhcmd1bWVudCAkaW5kZXggaW4gJHRoaXMuIikpOwogICAgICByZXR1cm4gZGVmYXVsdFZhbHVlc1tpbmRleF07CiAgICB9CiAgICBDb25zdGFudEV4cHJlc3Npb24gdmFsdWUgPSBhcmd1bWVudHNbaW5kZXhdOwogICAgYXNzZXJ0KAogICAgICAgIHZhbHVlICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICAgIk5vIHZhbHVlIGZvciBwb3NpdGlvbmFsIGFyZ3VtZW50ICRpbmRleCBpbiAkdGhpcy4iKSk7CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnTm9ybWFsaXplZEFyZ3VtZW50c1snKTsKICAgIHNiLndyaXRlKCdkZWZhdWx0VmFsdWVzPXsnKTsKICAgIGJvb2wgbmVlZHNDb21tYSA9IGZhbHNlOwogICAgZGVmYXVsdFZhbHVlcy5mb3JFYWNoKCh2YXIga2V5LCBDb25zdGFudEV4cHJlc3Npb24gdmFsdWUpIHsKICAgICAgaWYgKG5lZWRzQ29tbWEpIHsKICAgICAgICBzYi53cml0ZSgnLCcpOwogICAgICB9CiAgICAgIGlmIChrZXkgaXMgU3RyaW5nKSB7CiAgICAgICAgc2Iud3JpdGUoJyInKTsKICAgICAgICBzYi53cml0ZShrZXkpOwogICAgICAgIHNiLndyaXRlKCciJyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2Iud3JpdGUoa2V5KTsKICAgICAgfQogICAgICBzYi53cml0ZSgnOicpOwogICAgICBzYi53cml0ZSh2YWx1ZS50b1N0cnVjdHVyZWRUZXh0KCkpOwogICAgICBuZWVkc0NvbW1hID0gdHJ1ZTsKICAgIH0pOwogICAgc2Iud3JpdGUoJ30sY2FsbFN0cnVjdHVyZT0nKTsKICAgIHNiLndyaXRlKGNhbGxTdHJ1Y3R1cmUpOwogICAgc2Iud3JpdGUoJyxhcmd1bWVudHM9WycpOwogICAgYXJndW1lbnRzLmZvckVhY2goKENvbnN0YW50RXhwcmVzc2lvbiB2YWx1ZSkgewogICAgICBpZiAobmVlZHNDb21tYSkgewogICAgICAgIHNiLndyaXRlKCcsJyk7CiAgICAgIH0KICAgICAgc2Iud3JpdGUodmFsdWUudG9TdHJ1Y3R1cmVkVGV4dCgpKTsKICAgICAgbmVlZHNDb21tYSA9IHRydWU7CiAgICB9KTsKICAgIHNiLndyaXRlKCddXScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CoEYAE5OPAEmAUQBGTYkIT0cGxYBOiclARcBKC4BSisBTj4BTkQBRhUuMAFMLhtAAUcsARZHARRHAUM1ATsBTAEoHQEzBk1QFwIBTD0MKk0fAUw6BAEMHwEjAUYGUEoGEwZEBlA7HSMBDE0wOCkvLhUGHCM9BiMEAQxDNjwoJSdOTkQkLBMEAQw8FwQBDBRIHEtABgQBDBZIHEIGBAEMLSUHGBhHDSUsDSYHPwEfIwEnNyEgOTtPRTcKCiJKSQhHLDkbBhoEAgFNSxxHJSwBTwE0NTwXLQ4nLkkiBh9CDBcsPxIEATw4OjIOKC5NIwYxDBcsQxIEAQwWKiYhHUAYFwgbFxcXDxcIFSoZCCIdHjMYFwgqGQgUGgQCAS5wYWNrYWdlOmNvbXBpbGVyL3NyYy9jb25zdGFudHMvZXZhbHVhdGlvbi5kYXJ0QHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwvZm9yd2FyZGluZ19ub2RlLmRhcnS/7i8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgInBhY2thZ2U6a2VybmVsL2FzdC5kYXJ0IgogICAgc2hvdwogICAgICAgIEFyZ3VtZW50cywKICAgICAgICBDbGFzcywKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBFeHByZXNzaW9uLAogICAgICAgIEZpZWxkLAogICAgICAgIEZ1bmN0aW9uTm9kZSwKICAgICAgICBNZW1iZXIsCiAgICAgICAgTmFtZSwKICAgICAgICBOYW1lZEV4cHJlc3Npb24sCiAgICAgICAgUHJvY2VkdXJlLAogICAgICAgIFByb2NlZHVyZUtpbmQsCiAgICAgICAgUmV0dXJuU3RhdGVtZW50LAogICAgICAgIFN1cGVyTWV0aG9kSW52b2NhdGlvbiwKICAgICAgICBTdXBlclByb3BlcnR5R2V0LAogICAgICAgIFN1cGVyUHJvcGVydHlTZXQsCiAgICAgICAgVHlwZVBhcmFtZXRlciwKICAgICAgICBUeXBlUGFyYW1ldGVyVHlwZSwKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uLAogICAgICAgIFZhcmlhYmxlR2V0LAogICAgICAgIFZvaWRUeXBlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90cmFuc2Zvcm1hdGlvbnMvZmxhZ3MuZGFydCcgc2hvdyBUcmFuc2Zvcm1lckZsYWc7CgppbXBvcnQgInBhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0IiBzaG93IFN1YnN0aXR1dGlvbjsKCmltcG9ydCAiLi4vcHJvYmxlbXMuZGFydCIgc2hvdyB1bmhhbmRsZWQ7CgppbXBvcnQgIi4uL3R5cGVfaW5mZXJlbmNlL3R5cGVfaW5mZXJlbmNlX2VuZ2luZS5kYXJ0IgogICAgc2hvdyBJbmNsdWRlc1R5cGVQYXJhbWV0ZXJzTm9uQ292YXJpYW50bHksIFZhcmlhbmNlOwoKaW1wb3J0ICIuLi90eXBlX2luZmVyZW5jZS90eXBlX2luZmVycmVyLmRhcnQiIHNob3cgZ2V0TmFtZWRGb3JtYWw7CgppbXBvcnQgImtlcm5lbF9idWlsZGVyLmRhcnQiCiAgICBzaG93IENsYXNzSGllcmFyY2h5QnVpbGRlciwgQnVpbGRlciwgRGVsYXllZE1lbWJlciwgQ2xhc3NCdWlsZGVyOwoKY2xhc3MgRm9yd2FyZGluZ05vZGUgewogIGZpbmFsIENsYXNzSGllcmFyY2h5QnVpbGRlciBoaWVyYXJjaHk7CgogIGZpbmFsIENsYXNzQnVpbGRlciBwYXJlbnQ7CgogIGZpbmFsIEJ1aWxkZXIgY29tYmluZWRNZW1iZXJTaWduYXR1cmVSZXN1bHQ7CgogIGZpbmFsIFByb2NlZHVyZUtpbmQga2luZDsKCiAgLy8vIEEgbGlzdCBjb250YWluaW5nIHRoZSBkaXJlY3RseSBpbXBsZW1lbnRlZCBhbmQgZGlyZWN0bHkgaW5oZXJpdGVkCiAgLy8vIHByb2NlZHVyZXMgb2YgdGhlIGNsYXNzIGluIHF1ZXN0aW9uLgogIGZpbmFsIExpc3Q8QnVpbGRlcj4gX2NhbmRpZGF0ZXM7CgogIEZvcndhcmRpbmdOb2RlKHRoaXMuaGllcmFyY2h5LCB0aGlzLnBhcmVudCwKICAgICAgdGhpcy5jb21iaW5lZE1lbWJlclNpZ25hdHVyZVJlc3VsdCwgdGhpcy5fY2FuZGlkYXRlcywgdGhpcy5raW5kKTsKCiAgTmFtZSBnZXQgbmFtZSA9PiBjb21iaW5lZE1lbWJlclNpZ25hdHVyZVJlc3VsdC50YXJnZXQubmFtZTsKCiAgQ2xhc3MgZ2V0IGVuY2xvc2luZ0NsYXNzID0+IHBhcmVudC5jbHM7CgogIC8vLyBGaW5pc2hlcyBoYW5kbGluZyBvZiB0aGlzIG5vZGUgYnkgcHJvcGFnYXRpbmcgY292YXJpYW5jZSBhbmQgY3JlYXRpbmcKICAvLy8gZm9yd2FyZGluZyBzdHVicyBpZiBuZWNlc3NhcnkuCiAgTWVtYmVyIGZpbmFsaXplKCkgPT4gX2NvbXB1dGVDb3ZhcmlhbmNlRml4ZXMoKTsKCiAgLy8vIFRhZyB0aGUgcGFyYW1ldGVycyBvZiBbaW50ZXJmYWNlTWVtYmVyXSB0aGF0IG5lZWQgdHlwZSBjaGVja3MKICAvLy8KICAvLy8gUGFyYW1ldGVycyBjYW4gbmVlZCB0eXBlIGNoZWNrcyBmb3IgY2FsbHMgY29taW5nIGZyb20gc3RhdGljYWxseSB0eXBlZAogIC8vLyBjYWxsIHNpdGVzLCBkdWUgdG8gY292YXJpYW50IGdlbmVyaWNzIGFuZCBvdmVycmlkZXMgd2l0aCBleHBsaWNpdAogIC8vLyBgY292YXJpYW50YCBwYXJhbWV0ZXJzLgogIC8vLwogIC8vLyBUYWcgcGFyYW1ldGVycyBvZiBbaW50ZXJmYWNlTWVtYmVyXSB0aGF0IG5lZWQgc3VjaCBjaGVja3Mgd2hlbiB0aGUgbWVtYmVyCiAgLy8vIG9jY3VycyBpbiBbZW5jbG9zaW5nQ2xhc3NdJ3MgaW50ZXJmYWNlLiAgSWYgcGFyYW1ldGVycyBuZWVkIGNoZWNrcyBidXQKICAvLy8gdGhleSB3b3VsZCBub3QgYmUgY2hlY2tlZCBpbiBhbiBpbmhlcml0ZWQgaW1wbGVtZW50YXRpb24sIGEgZm9yd2FyZGluZwogIC8vLyBzdHViIGlzIGludHJvZHVjZWQgYXMgYSBwbGFjZSB0byBwdXQgdGhlIGNoZWNrcy4KICBNZW1iZXIgX2NvbXB1dGVDb3ZhcmlhbmNlRml4ZXMoKSB7CiAgICBNZW1iZXIgaW50ZXJmYWNlTWVtYmVyID0gY29tYmluZWRNZW1iZXJTaWduYXR1cmVSZXN1bHQudGFyZ2V0OwogICAgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbiA9CiAgICAgICAgX3N1YnN0aXR1dGlvbkZvcihpbnRlcmZhY2VNZW1iZXIsIGVuY2xvc2luZ0NsYXNzKTsKICAgIC8vIFdlIGFsd2F5cyBjcmVhdGUgYSBmb3J3YXJkaW5nIHN0dWIgd2hlbiB3ZSd2ZSBpbmhlcml0ZWQgYSBtZW1iZXIgZnJvbSBhbgogICAgLy8gaW50ZXJmYWNlIG90aGVyIHRoYW4gdGhlIGZpcnN0IG92ZXJyaWRlIGNhbmRpZGF0ZS4gIFRoaXMgaXMgdG8gd29yawogICAgLy8gYXJvdW5kIGEgYnVnIGluIHRoZSBLZXJuZWwgdHlwZSBjaGVja2VyIHdoZXJlIGl0IGNob29zZXMgdGhlIGZpcnN0CiAgICAvLyBvdmVycmlkZSBjYW5kaWRhdGUuCiAgICAvLwogICAgLy8gVE9ETyhrbWlsbGlraW4pOiBGaXggdGhlIEtlcm5lbCB0eXBlIGNoZWNrZXIgYW5kIHN0b3AgY3JlYXRpbmcgdGhlc2UKICAgIC8vIGV4dHJhIHN0dWJzLgogICAgTWVtYmVyIHN0dWIgPSBpbnRlcmZhY2VNZW1iZXIuZW5jbG9zaW5nQ2xhc3MgPT0gZW5jbG9zaW5nQ2xhc3MgfHwKICAgICAgICAgICAgaW50ZXJmYWNlTWVtYmVyID09IGdldENhbmRpZGF0ZUF0KDApCiAgICAgICAgPyBpbnRlcmZhY2VNZW1iZXIKICAgICAgICA6IF9jcmVhdGVGb3J3YXJkaW5nU3R1YihzdWJzdGl0dXRpb24sIGludGVyZmFjZU1lbWJlcik7CgogICAgRnVuY3Rpb25Ob2RlIGludGVyZmFjZUZ1bmN0aW9uID0gaW50ZXJmYWNlTWVtYmVyLmZ1bmN0aW9uOwogICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBpbnRlcmZhY2VQb3NpdGlvbmFsUGFyYW1ldGVycyA9CiAgICAgICAgZ2V0UG9zaXRpb25hbFBhcmFtZXRlcnMoaW50ZXJmYWNlTWVtYmVyKTsKICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gaW50ZXJmYWNlTmFtZWRQYXJhbWV0ZXJzID0KICAgICAgICBpbnRlcmZhY2VGdW5jdGlvbj8ubmFtZWRQYXJhbWV0ZXJzID8/IFtdOwogICAgTGlzdDxUeXBlUGFyYW1ldGVyPiBpbnRlcmZhY2VUeXBlUGFyYW1ldGVycyA9CiAgICAgICAgaW50ZXJmYWNlRnVuY3Rpb24/LnR5cGVQYXJhbWV0ZXJzID8/IFtdOwoKICAgIHZvaWQgY3JlYXRlU3R1YklmTmVlZGVkKCkgewogICAgICBpZiAoc3R1YiAhPSBpbnRlcmZhY2VNZW1iZXIpIHJldHVybjsKICAgICAgaWYgKGludGVyZmFjZU1lbWJlci5lbmNsb3NpbmdDbGFzcyA9PSBlbmNsb3NpbmdDbGFzcykgcmV0dXJuOwogICAgICBzdHViID0gX2NyZWF0ZUZvcndhcmRpbmdTdHViKHN1YnN0aXR1dGlvbiwgaW50ZXJmYWNlTWVtYmVyKTsKICAgIH0KCiAgICBib29sIGlzSW1wbENyZWF0ZWQgPSBmYWxzZTsKICAgIHZvaWQgY3JlYXRlSW1wbElmTmVlZGVkKCkgewogICAgICBpZiAoaXNJbXBsQ3JlYXRlZCkgcmV0dXJuOwogICAgICBjcmVhdGVTdHViSWZOZWVkZWQoKTsKICAgICAgX2NyZWF0ZUZvcndhcmRpbmdJbXBsSWZOZWVkZWQoc3R1Yi5mdW5jdGlvbik7CiAgICAgIGlzSW1wbENyZWF0ZWQgPSB0cnVlOwogICAgfQoKICAgIEluY2x1ZGVzVHlwZVBhcmFtZXRlcnNOb25Db3ZhcmlhbnRseSBuZWVkc0NoZWNrVmlzaXRvciA9CiAgICAgICAgZW5jbG9zaW5nQ2xhc3MudHlwZVBhcmFtZXRlcnMuaXNFbXB0eQogICAgICAgICAgICA/IG51bGwKICAgICAgICAgICAgLy8gVE9ETyhhaGUpOiBJdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIGNhY2hlIHRoaXMgb2JqZWN0LgogICAgICAgICAgICA6IG5ldyBJbmNsdWRlc1R5cGVQYXJhbWV0ZXJzTm9uQ292YXJpYW50bHkoCiAgICAgICAgICAgICAgICBlbmNsb3NpbmdDbGFzcy50eXBlUGFyYW1ldGVycywKICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBjaGVja2luZyB0aGUgcGFyYW1ldGVyIHR5cGVzIGFuZCB0aGVzZSBhcmUgaW4gYQogICAgICAgICAgICAgICAgLy8gY29udHJhdmFyaWFudCBwb3NpdGlvbi4KICAgICAgICAgICAgICAgIGluaXRpYWxWYXJpYW5jZTogVmFyaWFuY2UuY29udHJhdmFyaWFudCk7CiAgICBib29sIG5lZWRzQ2hlY2soRGFydFR5cGUgdHlwZSkgPT4gbmVlZHNDaGVja1Zpc2l0b3IgPT0gbnVsbAogICAgICAgID8gZmFsc2UKICAgICAgICA6IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZSh0eXBlKS5hY2NlcHQobmVlZHNDaGVja1Zpc2l0b3IpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRlcmZhY2VQb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHBhcmFtZXRlciA9IGludGVyZmFjZVBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldOwogICAgICBib29sIGlzR2VuZXJpY0NvdmFyaWFudEltcGwgPQogICAgICAgICAgcGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwgfHwgbmVlZHNDaGVjayhwYXJhbWV0ZXIudHlwZSk7CiAgICAgIGJvb2wgaXNDb3ZhcmlhbnQgPSBwYXJhbWV0ZXIuaXNDb3ZhcmlhbnQ7CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gc3VwZXJQYXJhbWV0ZXIgPSBwYXJhbWV0ZXI7CiAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgX2NhbmRpZGF0ZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICBNZW1iZXIgb3RoZXJNZW1iZXIgPSBnZXRDYW5kaWRhdGVBdChqKTsKICAgICAgICBpZiAob3RoZXJNZW1iZXIgaXMgRm9yd2FyZGluZ05vZGUpIGNvbnRpbnVlOwogICAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gb3RoZXJQb3NpdGlvbmFsUGFyYW1ldGVycyA9CiAgICAgICAgICAgIGdldFBvc2l0aW9uYWxQYXJhbWV0ZXJzKG90aGVyTWVtYmVyKTsKICAgICAgICBpZiAob3RoZXJQb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGggPD0gaSkgY29udGludWU7CiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBvdGhlclBhcmFtZXRlciA9IG90aGVyUG9zaXRpb25hbFBhcmFtZXRlcnNbaV07CiAgICAgICAgaWYgKGogPT0gMCkgc3VwZXJQYXJhbWV0ZXIgPSBvdGhlclBhcmFtZXRlcjsKICAgICAgICBpZiAoaWRlbnRpY2FsKG90aGVyTWVtYmVyLCBpbnRlcmZhY2VNZW1iZXIpKSBjb250aW51ZTsKICAgICAgICBpZiAob3RoZXJQYXJhbWV0ZXIuaXNHZW5lcmljQ292YXJpYW50SW1wbCkgewogICAgICAgICAgaXNHZW5lcmljQ292YXJpYW50SW1wbCA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChvdGhlclBhcmFtZXRlci5pc0NvdmFyaWFudCkgewogICAgICAgICAgaXNDb3ZhcmlhbnQgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoaXNHZW5lcmljQ292YXJpYW50SW1wbCkgewogICAgICAgIGlmICghc3VwZXJQYXJhbWV0ZXIuaXNHZW5lcmljQ292YXJpYW50SW1wbCkgewogICAgICAgICAgY3JlYXRlSW1wbElmTmVlZGVkKCk7CiAgICAgICAgfQogICAgICAgIGlmICghcGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwpIHsKICAgICAgICAgIGNyZWF0ZVN0dWJJZk5lZWRlZCgpOwogICAgICAgICAgc3R1Yi5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXS5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGlzQ292YXJpYW50KSB7CiAgICAgICAgaWYgKCFzdXBlclBhcmFtZXRlci5pc0NvdmFyaWFudCkgewogICAgICAgICAgY3JlYXRlSW1wbElmTmVlZGVkKCk7CiAgICAgICAgfQogICAgICAgIGlmICghcGFyYW1ldGVyLmlzQ292YXJpYW50KSB7CiAgICAgICAgICBjcmVhdGVTdHViSWZOZWVkZWQoKTsKICAgICAgICAgIHN0dWIuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnNbaV0uaXNDb3ZhcmlhbnQgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRlcmZhY2VOYW1lZFBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBwYXJhbWV0ZXIgPSBpbnRlcmZhY2VOYW1lZFBhcmFtZXRlcnNbaV07CiAgICAgIGJvb2wgaXNHZW5lcmljQ292YXJpYW50SW1wbCA9CiAgICAgICAgICBwYXJhbWV0ZXIuaXNHZW5lcmljQ292YXJpYW50SW1wbCB8fCBuZWVkc0NoZWNrKHBhcmFtZXRlci50eXBlKTsKICAgICAgYm9vbCBpc0NvdmFyaWFudCA9IHBhcmFtZXRlci5pc0NvdmFyaWFudDsKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBzdXBlclBhcmFtZXRlciA9IHBhcmFtZXRlcjsKICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBfY2FuZGlkYXRlcy5sZW5ndGg7IGorKykgewogICAgICAgIE1lbWJlciBvdGhlck1lbWJlciA9IGdldENhbmRpZGF0ZUF0KGopOwogICAgICAgIGlmIChvdGhlck1lbWJlciBpcyBGb3J3YXJkaW5nTm9kZSkgY29udGludWU7CiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBvdGhlclBhcmFtZXRlciA9CiAgICAgICAgICAgIGdldE5hbWVkRm9ybWFsKG90aGVyTWVtYmVyLmZ1bmN0aW9uLCBwYXJhbWV0ZXIubmFtZSk7CiAgICAgICAgaWYgKG90aGVyUGFyYW1ldGVyID09IG51bGwpIGNvbnRpbnVlOwogICAgICAgIGlmIChqID09IDApIHN1cGVyUGFyYW1ldGVyID0gb3RoZXJQYXJhbWV0ZXI7CiAgICAgICAgaWYgKGlkZW50aWNhbChvdGhlck1lbWJlciwgaW50ZXJmYWNlTWVtYmVyKSkgY29udGludWU7CiAgICAgICAgaWYgKG90aGVyUGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwpIHsKICAgICAgICAgIGlzR2VuZXJpY0NvdmFyaWFudEltcGwgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAob3RoZXJQYXJhbWV0ZXIuaXNDb3ZhcmlhbnQpIHsKICAgICAgICAgIGlzQ292YXJpYW50ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGlzR2VuZXJpY0NvdmFyaWFudEltcGwpIHsKICAgICAgICBpZiAoIXN1cGVyUGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwpIHsKICAgICAgICAgIGNyZWF0ZUltcGxJZk5lZWRlZCgpOwogICAgICAgIH0KICAgICAgICBpZiAoIXBhcmFtZXRlci5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsKSB7CiAgICAgICAgICBjcmVhdGVTdHViSWZOZWVkZWQoKTsKICAgICAgICAgIHN0dWIuZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzW2ldLmlzR2VuZXJpY0NvdmFyaWFudEltcGwgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoaXNDb3ZhcmlhbnQpIHsKICAgICAgICBpZiAoIXN1cGVyUGFyYW1ldGVyLmlzQ292YXJpYW50KSB7CiAgICAgICAgICBjcmVhdGVJbXBsSWZOZWVkZWQoKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFwYXJhbWV0ZXIuaXNDb3ZhcmlhbnQpIHsKICAgICAgICAgIGNyZWF0ZVN0dWJJZk5lZWRlZCgpOwogICAgICAgICAgc3R1Yi5mdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnNbaV0uaXNDb3ZhcmlhbnQgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRlcmZhY2VUeXBlUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICBUeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIgPSBpbnRlcmZhY2VUeXBlUGFyYW1ldGVyc1tpXTsKICAgICAgYm9vbCBpc0dlbmVyaWNDb3ZhcmlhbnRJbXBsID0gdHlwZVBhcmFtZXRlci5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsIHx8CiAgICAgICAgICBuZWVkc0NoZWNrKHR5cGVQYXJhbWV0ZXIuYm91bmQpOwogICAgICBUeXBlUGFyYW1ldGVyIHN1cGVyVHlwZVBhcmFtZXRlciA9IHR5cGVQYXJhbWV0ZXI7CiAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgX2NhbmRpZGF0ZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICBNZW1iZXIgb3RoZXJNZW1iZXIgPSBnZXRDYW5kaWRhdGVBdChqKTsKICAgICAgICBpZiAob3RoZXJNZW1iZXIgaXMgRm9yd2FyZGluZ05vZGUpIGNvbnRpbnVlOwogICAgICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gb3RoZXJUeXBlUGFyYW1ldGVycyA9CiAgICAgICAgICAgIG90aGVyTWVtYmVyLmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzOwogICAgICAgIGlmIChvdGhlclR5cGVQYXJhbWV0ZXJzLmxlbmd0aCA8PSBpKSBjb250aW51ZTsKICAgICAgICBUeXBlUGFyYW1ldGVyIG90aGVyVHlwZVBhcmFtZXRlciA9IG90aGVyVHlwZVBhcmFtZXRlcnNbaV07CiAgICAgICAgaWYgKGogPT0gMCkgc3VwZXJUeXBlUGFyYW1ldGVyID0gb3RoZXJUeXBlUGFyYW1ldGVyOwogICAgICAgIGlmIChpZGVudGljYWwob3RoZXJNZW1iZXIsIGludGVyZmFjZU1lbWJlcikpIGNvbnRpbnVlOwogICAgICAgIGlmIChvdGhlclR5cGVQYXJhbWV0ZXIuaXNHZW5lcmljQ292YXJpYW50SW1wbCkgewogICAgICAgICAgaXNHZW5lcmljQ292YXJpYW50SW1wbCA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChpc0dlbmVyaWNDb3ZhcmlhbnRJbXBsKSB7CiAgICAgICAgaWYgKCFzdXBlclR5cGVQYXJhbWV0ZXIuaXNHZW5lcmljQ292YXJpYW50SW1wbCkgewogICAgICAgICAgY3JlYXRlSW1wbElmTmVlZGVkKCk7CiAgICAgICAgfQogICAgICAgIGlmICghdHlwZVBhcmFtZXRlci5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsKSB7CiAgICAgICAgICBjcmVhdGVTdHViSWZOZWVkZWQoKTsKICAgICAgICAgIHN0dWIuZnVuY3Rpb24udHlwZVBhcmFtZXRlcnNbaV0uaXNHZW5lcmljQ292YXJpYW50SW1wbCA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3R1YjsKICB9CgogIHZvaWQgX2NyZWF0ZUZvcndhcmRpbmdJbXBsSWZOZWVkZWQoRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uKSB7CiAgICBpZiAoZnVuY3Rpb24uYm9keSAhPSBudWxsKSB7CiAgICAgIC8vIFRoZXJlIGlzIGFscmVhZHkgYW4gaW1wbGVtZW50YXRpb247IG5vdGhpbmcgZnVydGhlciBuZWVkcyB0byBiZSBkb25lLgogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBGaW5kIHRoZSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgc3VwZXJjbGFzczsgdGhpcyBpcyB3aGF0IHdlIG5lZWQKICAgIC8vIHRvIGZvcndhcmQgdG8uICBJZiB3ZSBjYW4ndCBmaW5kIG9uZSwgdGhlbiB0aGUgbWV0aG9kIGlzIGZ1bGx5IGFic3RyYWN0CiAgICAvLyBhbmQgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4KICAgIENsYXNzIHN1cGVyY2xhc3MgPSBlbmNsb3NpbmdDbGFzcy5zdXBlcmNsYXNzOwogICAgaWYgKHN1cGVyY2xhc3MgPT0gbnVsbCkgcmV0dXJuOwogICAgUHJvY2VkdXJlIHByb2NlZHVyZSA9IGZ1bmN0aW9uLnBhcmVudDsKICAgIE1lbWJlciBzdXBlclRhcmdldCA9IGhpZXJhcmNoeS5nZXREaXNwYXRjaFRhcmdldEtlcm5lbCgKICAgICAgICBzdXBlcmNsYXNzLCBwcm9jZWR1cmUubmFtZSwga2luZCA9PSBQcm9jZWR1cmVLaW5kLlNldHRlcik7CiAgICBpZiAoc3VwZXJUYXJnZXQgPT0gbnVsbCkgcmV0dXJuOwogICAgaWYgKHN1cGVyVGFyZ2V0IGlzIFByb2NlZHVyZSAmJiBzdXBlclRhcmdldC5pc0ZvcndhcmRpbmdTdHViKSB7CiAgICAgIHN1cGVyVGFyZ2V0ID0gX2dldEZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXQoc3VwZXJUYXJnZXQpOwogICAgfQogICAgcHJvY2VkdXJlLmlzQWJzdHJhY3QgPSBmYWxzZTsKICAgIGlmICghcHJvY2VkdXJlLmlzRm9yd2FyZGluZ1N0dWIpIHsKICAgICAgLy8gVGhpcyBwcm9jZWR1cmUgZXhpc3RzIGFic3RyYWN0bHkgaW4gdGhlIHNvdXJjZSBjb2RlOyB3ZSBuZWVkIHRvIG1ha2UgaXQKICAgICAgLy8gY29uY3JldGUgYW5kIGdpdmUgaXQgYSBib2R5IHRoYXQgaXMgYSBmb3J3YXJkaW5nIHN0dWIuICBUaGlzIHNpdHVhdGlvbgogICAgICAvLyBpcyBjYWxsZWQgYSAiZm9yd2FyZGluZyBzZW1pLXN0dWIiLgogICAgICBwcm9jZWR1cmUuaXNGb3J3YXJkaW5nU3R1YiA9IHRydWU7CiAgICAgIHByb2NlZHVyZS5pc0ZvcndhcmRpbmdTZW1pU3R1YiA9IHRydWU7CiAgICB9CiAgICBMaXN0PEV4cHJlc3Npb24+IHBvc2l0aW9uYWxBcmd1bWVudHMgPSBmdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycwogICAgICAgIC5tYXA8RXhwcmVzc2lvbj4oKHBhcmFtZXRlcikgPT4gbmV3IFZhcmlhYmxlR2V0KHBhcmFtZXRlcikpCiAgICAgICAgLnRvTGlzdCgpOwogICAgTGlzdDxOYW1lZEV4cHJlc3Npb24+IG5hbWVkQXJndW1lbnRzID0gZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzCiAgICAgICAgLm1hcCgocGFyYW1ldGVyKSA9PgogICAgICAgICAgICBuZXcgTmFtZWRFeHByZXNzaW9uKHBhcmFtZXRlci5uYW1lLCBuZXcgVmFyaWFibGVHZXQocGFyYW1ldGVyKSkpCiAgICAgICAgLnRvTGlzdCgpOwogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9IGZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzCiAgICAgICAgLm1hcDxEYXJ0VHlwZT4oKHR5cGVQYXJhbWV0ZXIpID0+IG5ldyBUeXBlUGFyYW1ldGVyVHlwZSh0eXBlUGFyYW1ldGVyKSkKICAgICAgICAudG9MaXN0KCk7CiAgICBBcmd1bWVudHMgYXJndW1lbnRzID0gbmV3IEFyZ3VtZW50cyhwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICAgIHR5cGVzOiB0eXBlQXJndW1lbnRzLCBuYW1lZDogbmFtZWRBcmd1bWVudHMpOwogICAgRXhwcmVzc2lvbiBzdXBlckNhbGw7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBQcm9jZWR1cmVLaW5kLk1ldGhvZDoKICAgICAgY2FzZSBQcm9jZWR1cmVLaW5kLk9wZXJhdG9yOgogICAgICAgIHN1cGVyQ2FsbCA9IG5ldyBTdXBlck1ldGhvZEludm9jYXRpb24obmFtZSwgYXJndW1lbnRzLCBzdXBlclRhcmdldCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgUHJvY2VkdXJlS2luZC5HZXR0ZXI6CiAgICAgICAgc3VwZXJDYWxsID0gbmV3IFN1cGVyUHJvcGVydHlHZXQobmFtZSwgc3VwZXJUYXJnZXQpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFByb2NlZHVyZUtpbmQuU2V0dGVyOgogICAgICAgIHN1cGVyQ2FsbCA9CiAgICAgICAgICAgIG5ldyBTdXBlclByb3BlcnR5U2V0KG5hbWUsIHBvc2l0aW9uYWxBcmd1bWVudHNbMF0sIHN1cGVyVGFyZ2V0KTsKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICB1bmhhbmRsZWQoJyRraW5kJywgJ19jcmVhdGVGb3J3YXJkaW5nSW1wbElmTmVlZGVkJywgLTEsIG51bGwpOwogICAgICAgIGJyZWFrOwogICAgfQogICAgZnVuY3Rpb24uYm9keSA9IG5ldyBSZXR1cm5TdGF0ZW1lbnQoc3VwZXJDYWxsKS4ucGFyZW50ID0gZnVuY3Rpb247CiAgICBwcm9jZWR1cmUudHJhbnNmb3JtZXJGbGFncyB8PSBUcmFuc2Zvcm1lckZsYWcuc3VwZXJDYWxsczsKICAgIHByb2NlZHVyZS5mb3J3YXJkaW5nU3R1YlN1cGVyVGFyZ2V0ID0gc3VwZXJUYXJnZXQ7CiAgfQoKICAvLy8gQ3JlYXRlcyBhIGZvcndhcmRpbmcgc3R1YiBiYXNlZCBvbiB0aGUgZ2l2ZW4gW3RhcmdldF0uCiAgUHJvY2VkdXJlIF9jcmVhdGVGb3J3YXJkaW5nU3R1YihTdWJzdGl0dXRpb24gc3Vic3RpdHV0aW9uLCBNZW1iZXIgdGFyZ2V0KSB7CiAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGNvcHlQYXJhbWV0ZXIoVmFyaWFibGVEZWNsYXJhdGlvbiBwYXJhbWV0ZXIpIHsKICAgICAgcmV0dXJuIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKHBhcmFtZXRlci5uYW1lLAogICAgICAgICAgdHlwZTogc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKHBhcmFtZXRlci50eXBlKSwKICAgICAgICAgIGlzQ292YXJpYW50OiBwYXJhbWV0ZXIuaXNDb3ZhcmlhbnQpCiAgICAgICAgLi5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsID0gcGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGw7CiAgICB9CgogICAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0YXJnZXRUeXBlUGFyYW1ldGVycyA9CiAgICAgICAgdGFyZ2V0LmZ1bmN0aW9uPy50eXBlUGFyYW1ldGVycyA/PyBbXTsKICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnM7CiAgICBpZiAodGFyZ2V0VHlwZVBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgewogICAgICB0eXBlUGFyYW1ldGVycyA9CiAgICAgICAgICBuZXcgTGlzdDxUeXBlUGFyYW1ldGVyPi5maWxsZWQodGFyZ2V0VHlwZVBhcmFtZXRlcnMubGVuZ3RoLCBudWxsKTsKICAgICAgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBhZGRpdGlvbmFsU3Vic3RpdHV0aW9uID0KICAgICAgICAgIDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0YXJnZXRUeXBlUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICAgIFR5cGVQYXJhbWV0ZXIgdGFyZ2V0VHlwZVBhcmFtZXRlciA9IHRhcmdldFR5cGVQYXJhbWV0ZXJzW2ldOwogICAgICAgIFR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlciA9IG5ldyBUeXBlUGFyYW1ldGVyKAogICAgICAgICAgICB0YXJnZXRUeXBlUGFyYW1ldGVyLm5hbWUsIG51bGwpCiAgICAgICAgICAuLmlzR2VuZXJpY0NvdmFyaWFudEltcGwgPSB0YXJnZXRUeXBlUGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGw7CiAgICAgICAgdHlwZVBhcmFtZXRlcnNbaV0gPSB0eXBlUGFyYW1ldGVyOwogICAgICAgIGFkZGl0aW9uYWxTdWJzdGl0dXRpb25bdGFyZ2V0VHlwZVBhcmFtZXRlcl0gPQogICAgICAgICAgICBuZXcgVHlwZVBhcmFtZXRlclR5cGUodHlwZVBhcmFtZXRlcik7CiAgICAgIH0KICAgICAgc3Vic3RpdHV0aW9uID0gU3Vic3RpdHV0aW9uLmNvbWJpbmUoCiAgICAgICAgICBzdWJzdGl0dXRpb24sIFN1YnN0aXR1dGlvbi5mcm9tTWFwKGFkZGl0aW9uYWxTdWJzdGl0dXRpb24pKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICAgIHR5cGVQYXJhbWV0ZXJzW2ldLmJvdW5kID0KICAgICAgICAgICAgc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKHRhcmdldFR5cGVQYXJhbWV0ZXJzW2ldLmJvdW5kKTsKICAgICAgfQogICAgfQogICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBwb3NpdGlvbmFsUGFyYW1ldGVycyA9CiAgICAgICAgZ2V0UG9zaXRpb25hbFBhcmFtZXRlcnModGFyZ2V0KS5tYXAoY29weVBhcmFtZXRlcikudG9MaXN0KCk7CiAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IG5hbWVkUGFyYW1ldGVycyA9CiAgICAgICAgdGFyZ2V0LmZ1bmN0aW9uPy5uYW1lZFBhcmFtZXRlcnM/Lm1hcChjb3B5UGFyYW1ldGVyKT8udG9MaXN0KCkgPz8gW107CiAgICBGdW5jdGlvbk5vZGUgZnVuY3Rpb24gPSBuZXcgRnVuY3Rpb25Ob2RlKG51bGwsCiAgICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnM6IHBvc2l0aW9uYWxQYXJhbWV0ZXJzLAogICAgICAgIG5hbWVkUGFyYW1ldGVyczogbmFtZWRQYXJhbWV0ZXJzLAogICAgICAgIHR5cGVQYXJhbWV0ZXJzOiB0eXBlUGFyYW1ldGVycywKICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50OiBnZXRSZXF1aXJlZFBhcmFtZXRlckNvdW50KHRhcmdldCksCiAgICAgICAgcmV0dXJuVHlwZTogc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGdldFJldHVyblR5cGUodGFyZ2V0KSkpOwogICAgTWVtYmVyIGZpbmFsVGFyZ2V0OwogICAgaWYgKHRhcmdldCBpcyBQcm9jZWR1cmUgJiYgdGFyZ2V0LmlzRm9yd2FyZGluZ1N0dWIpIHsKICAgICAgZmluYWxUYXJnZXQgPSB0YXJnZXQuZm9yd2FyZGluZ1N0dWJJbnRlcmZhY2VUYXJnZXQ7CiAgICB9IGVsc2UgewogICAgICBmaW5hbFRhcmdldCA9IHRhcmdldDsKICAgIH0KICAgIHJldHVybiBuZXcgUHJvY2VkdXJlKG5hbWUsIGtpbmQsIGZ1bmN0aW9uLAogICAgICAgIGlzQWJzdHJhY3Q6IHRydWUsCiAgICAgICAgaXNGb3J3YXJkaW5nU3R1YjogdHJ1ZSwKICAgICAgICBmaWxlVXJpOiBlbmNsb3NpbmdDbGFzcy5maWxlVXJpLAogICAgICAgIGZvcndhcmRpbmdTdHViSW50ZXJmYWNlVGFyZ2V0OiBmaW5hbFRhcmdldCkKICAgICAgLi5zdGFydEZpbGVPZmZzZXQgPSBlbmNsb3NpbmdDbGFzcy5maWxlT2Zmc2V0CiAgICAgIC4uZmlsZU9mZnNldCA9IGVuY2xvc2luZ0NsYXNzLmZpbGVPZmZzZXQKICAgICAgLi5wYXJlbnQgPSBlbmNsb3NpbmdDbGFzczsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBbaV10aCBlbGVtZW50IG9mIFtfY2FuZGlkYXRlc10sIGZpbmFsaXppbmcgaXQgaWYgbmVjZXNzYXJ5LgogIE1lbWJlciBnZXRDYW5kaWRhdGVBdChpbnQgaSkgewogICAgQnVpbGRlciBjYW5kaWRhdGUgPSBfY2FuZGlkYXRlc1tpXTsKICAgIGFzc2VydChjYW5kaWRhdGUgaXMhIERlbGF5ZWRNZW1iZXIpOwogICAgcmV0dXJuIGNhbmRpZGF0ZS50YXJnZXQ7CiAgfQoKICBzdGF0aWMgTWVtYmVyIF9nZXRGb3J3YXJkaW5nU3R1YlN1cGVyVGFyZ2V0KFByb2NlZHVyZSBmb3J3YXJkaW5nU3R1YikgewogICAgLy8gVE9ETyhwYXVsYmVycnkpOiB3aGVuIGRhcnRidWcuY29tLzMxNTYyIGlzIGZpeGVkLCB0aGlzIHNob3VsZCBiZWNvbWUKICAgIC8vIGVhc2llci4KICAgIFJldHVyblN0YXRlbWVudCBib2R5ID0gZm9yd2FyZGluZ1N0dWIuZnVuY3Rpb24uYm9keTsKICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IGJvZHkuZXhwcmVzc2lvbjsKICAgIGlmIChleHByZXNzaW9uIGlzIFN1cGVyTWV0aG9kSW52b2NhdGlvbikgewogICAgICByZXR1cm4gZXhwcmVzc2lvbi5pbnRlcmZhY2VUYXJnZXQ7CiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24gaXMgU3VwZXJQcm9wZXJ0eVNldCkgewogICAgICByZXR1cm4gZXhwcmVzc2lvbi5pbnRlcmZhY2VUYXJnZXQ7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gdW5oYW5kbGVkKCcke2V4cHJlc3Npb24ucnVudGltZVR5cGV9JywKICAgICAgICAgICdfZ2V0Rm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldCcsIC0xLCBudWxsKTsKICAgIH0KICB9CgogIFN1YnN0aXR1dGlvbiBfc3Vic3RpdHV0aW9uRm9yKE1lbWJlciBjYW5kaWRhdGUsIENsYXNzIGNsYXNzXykgewogICAgcmV0dXJuIFN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZShoaWVyYXJjaHkuZ2V0S2VybmVsVHlwZUFzSW5zdGFuY2VPZigKICAgICAgICBjbGFzc18udGhpc1R5cGUsIGNhbmRpZGF0ZS5lbmNsb3NpbmdDbGFzcykpOwogIH0KCiAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBnZXRQb3NpdGlvbmFsUGFyYW1ldGVycyhNZW1iZXIgbWVtYmVyKSB7CiAgICBpZiAobWVtYmVyIGlzIEZpZWxkKSB7CiAgICAgIGlmIChraW5kID09IFByb2NlZHVyZUtpbmQuU2V0dGVyKSB7CiAgICAgICAgcmV0dXJuIDxWYXJpYWJsZURlY2xhcmF0aW9uPlsKICAgICAgICAgIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKCJfIiwKICAgICAgICAgICAgICB0eXBlOiBtZW1iZXIudHlwZSwgaXNDb3ZhcmlhbnQ6IG1lbWJlci5pc0NvdmFyaWFudCkKICAgICAgICAgICAgLi5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsID0gbWVtYmVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwKICAgICAgICBdOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiA8VmFyaWFibGVEZWNsYXJhdGlvbj5bXTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG1lbWJlci5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVyczsKICAgIH0KICB9CgogIGludCBnZXRSZXF1aXJlZFBhcmFtZXRlckNvdW50KE1lbWJlciBtZW1iZXIpIHsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIFByb2NlZHVyZUtpbmQuR2V0dGVyOgogICAgICAgIHJldHVybiAwOwogICAgICBjYXNlIFByb2NlZHVyZUtpbmQuU2V0dGVyOgogICAgICAgIHJldHVybiAxOwogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBtZW1iZXIuZnVuY3Rpb24ucmVxdWlyZWRQYXJhbWV0ZXJDb3VudDsKICAgIH0KICB9CgogIERhcnRUeXBlIGdldFJldHVyblR5cGUoTWVtYmVyIG1lbWJlcikgewogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgUHJvY2VkdXJlS2luZC5HZXR0ZXI6CiAgICAgICAgcmV0dXJuIG1lbWJlciBpcyBGaWVsZCA/IG1lbWJlci50eXBlIDogbWVtYmVyLmZ1bmN0aW9uLnJldHVyblR5cGU7CiAgICAgIGNhc2UgUHJvY2VkdXJlS2luZC5TZXR0ZXI6CiAgICAgICAgcmV0dXJuIGNvbnN0IFZvaWRUeXBlKCk7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIG1lbWJlci5mdW5jdGlvbi5yZXR1cm5UeXBlOwogICAgfQogIH0KfQqBpgBOTjwBIQkTDxIUDxYQDhkTFxkfGhoXGx0VEgFJAT0BKgE2OQFDAR1GARcpAR0BLwEcAUgrIwEuSAE+ASoBTCUyAUQGTUgeBlBNTTclQyA7UEtKGwdMFEYxGkABPz4yOTIyMQEgK0RDBgEgICEcNBwGAT0uE0Q4L0orOkAQR0VIJEowNjUwNT4yPUs1PzUpCioeCggkNiAKMSBPCggZKyAKJiBECggGQEMkSjA2NTA1LUIuNT81KQoqHgoIJDYgCjEgSgoIGSsgCiYgPwoIBj9ATCs4NTA1MjE3Qz0/OSkKCCQ6IAo1IEkKCAYRBAE+IU8OBlBPKTIkKzxDJURABiInUVAtKS0GSUQTRBxNEztQEz02GhQhI00PIT0PIRRNDw9HDwZHPjcEAT1ORzU9LkUGAS8vKCsXTTwnPkU5LFErNjIIK0c4IkgIBjVFME4zNCooQ0kYOjoNHAYvGiApNDQvIQQBTiEoKR0EAUpMDzktLykxKQ00NgYEAUJPNQQBRRsqJidCRQsPKAgNMwYEATEUIRIhEg83BgQBKhQhSyEhDysGBAIBN3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvZm9yd2FyZGluZ19ub2RlLmRhcnQ2c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC90eXBlcy5kYXJ0wABpsi8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnR5cGVzOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBCb3R0b21UeXBlLAogICAgICAgIENsYXNzLAogICAgICAgIERhcnRUeXBlLAogICAgICAgIER5bmFtaWNUeXBlLAogICAgICAgIEZ1bmN0aW9uVHlwZSwKICAgICAgICBJbnRlcmZhY2VUeXBlLAogICAgICAgIEludmFsaWRUeXBlLAogICAgICAgIE5hbWVkVHlwZSwKICAgICAgICBOdWxsYWJpbGl0eSwKICAgICAgICBUeXBlUGFyYW1ldGVyLAogICAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlLAogICAgICAgIFR5cGVkZWZUeXBlLAogICAgICAgIFZvaWRUeXBlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2FsZ2VicmEuZGFydCcgc2hvdyBTdWJzdGl0dXRpb247CgppbXBvcnQgJ2tlcm5lbF9idWlsZGVyLmRhcnQnIHNob3cgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyOwoKY2xhc3MgVHlwZXMgewogIGZpbmFsIENsYXNzSGllcmFyY2h5QnVpbGRlciBoaWVyYXJjaHk7CgogIFR5cGVzKHRoaXMuaGllcmFyY2h5KTsKCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiBbc10gaXMgYSBzdWJ0eXBlIG9mIFt0XS4KICBib29sIGlzU3VidHlwZU9mS2VybmVsKERhcnRUeXBlIHMsIERhcnRUeXBlIHQpIHsKICAgIGlmIChzIGlzIEludmFsaWRUeXBlKSB7CiAgICAgIC8vIEludmFsaWRUeXBlIGlzIGEgYm90dG9tIHR5cGUuCiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKHQgaXMgSW52YWxpZFR5cGUpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIGlzU3VidHlwZU9mS2VybmVsTnVsbGFiaWxpdHkocywgcy5udWxsYWJpbGl0eSwgdCwgdC5udWxsYWJpbGl0eSk7CiAgfQoKICBib29sIGlzU3VidHlwZU9mS2VybmVsTnVsbGFiaWxpdHkoCiAgICAgIERhcnRUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwgRGFydFR5cGUgdCwgdE51bGxhYmlsaXR5KSB7CiAgICBpZiAocyBpcyBCb3R0b21UeXBlKSB7CiAgICAgIHJldHVybiB0cnVlOyAvLyBSdWxlIDMuCiAgICB9CiAgICBpZiAodCBpcyBEeW5hbWljVHlwZSkgewogICAgICByZXR1cm4gdHJ1ZTsgLy8gUnVsZSAyLgogICAgfQogICAgaWYgKHQgaXMgVm9pZFR5cGUpIHsKICAgICAgcmV0dXJuIHRydWU7IC8vIFJ1bGUgMi4KICAgIH0KICAgIGlmICh0IGlzIEJvdHRvbVR5cGUpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKHQgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICBDbGFzcyBjbHMgPSB0LmNsYXNzTm9kZTsKICAgICAgaWYgKGNscyA9PSBoaWVyYXJjaHkub2JqZWN0Q2xhc3MpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gUnVsZSAyLgogICAgICB9CiAgICAgIGlmIChjbHMgPT0gaGllcmFyY2h5LmZ1dHVyZU9yQ2xhc3MpIHsKICAgICAgICBjb25zdCBJc0Z1dHVyZU9yU3VidHlwZU9mIHJlbGF0aW9uID0gY29uc3QgSXNGdXR1cmVPclN1YnR5cGVPZigpOwogICAgICAgIGlmIChzIGlzIER5bmFtaWNUeXBlKSB7CiAgICAgICAgICByZXR1cm4gcmVsYXRpb24uaXNEeW5hbWljUmVsYXRlZCgKICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgICAgfSBlbHNlIGlmIChzIGlzIFZvaWRUeXBlKSB7CiAgICAgICAgICByZXR1cm4gcmVsYXRpb24uaXNWb2lkUmVsYXRlZChzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgICAgfSBlbHNlIGlmIChzIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgICAgIHJldHVybiBzLmNsYXNzTm9kZSA9PSBoaWVyYXJjaHkuZnV0dXJlT3JDbGFzcwogICAgICAgICAgICAgID8gcmVsYXRpb24uaXNGdXR1cmVPclJlbGF0ZWQoCiAgICAgICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKQogICAgICAgICAgICAgIDogcmVsYXRpb24uaXNJbnRlcmZhY2VSZWxhdGVkKAogICAgICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgICAgfSBlbHNlIGlmIChzIGlzIEZ1bmN0aW9uVHlwZSkgewogICAgICAgICAgcmV0dXJuIHJlbGF0aW9uLmlzRnVuY3Rpb25SZWxhdGVkKAogICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgICB9IGVsc2UgaWYgKHMgaXMgVHlwZVBhcmFtZXRlclR5cGUpIHsKICAgICAgICAgIHJldHVybiBzLnByb21vdGVkQm91bmQgPT0gbnVsbAogICAgICAgICAgICAgID8gcmVsYXRpb24uaXNUeXBlUGFyYW1ldGVyUmVsYXRlZCgKICAgICAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpCiAgICAgICAgICAgICAgOiByZWxhdGlvbi5pc0ludGVyc2VjdGlvblJlbGF0ZWQoCiAgICAgICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgICB9IGVsc2UgaWYgKHMgaXMgVHlwZWRlZlR5cGUpIHsKICAgICAgICAgIHJldHVybiByZWxhdGlvbi5pc1R5cGVkZWZSZWxhdGVkKAogICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc3QgSXNJbnRlcmZhY2VTdWJ0eXBlT2YgcmVsYXRpb24gPSBjb25zdCBJc0ludGVyZmFjZVN1YnR5cGVPZigpOwogICAgICAgIGlmIChzIGlzIER5bmFtaWNUeXBlKSB7CiAgICAgICAgICByZXR1cm4gcmVsYXRpb24uaXNEeW5hbWljUmVsYXRlZCgKICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgICAgfSBlbHNlIGlmIChzIGlzIFZvaWRUeXBlKSB7CiAgICAgICAgICByZXR1cm4gcmVsYXRpb24uaXNWb2lkUmVsYXRlZChzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgICAgfSBlbHNlIGlmIChzIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgICAgIHJldHVybiBzLmNsYXNzTm9kZSA9PSBoaWVyYXJjaHkuZnV0dXJlT3JDbGFzcwogICAgICAgICAgICAgID8gcmVsYXRpb24uaXNGdXR1cmVPclJlbGF0ZWQoCiAgICAgICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKQogICAgICAgICAgICAgIDogcmVsYXRpb24uaXNJbnRlcmZhY2VSZWxhdGVkKAogICAgICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgICAgfSBlbHNlIGlmIChzIGlzIEZ1bmN0aW9uVHlwZSkgewogICAgICAgICAgcmV0dXJuIHJlbGF0aW9uLmlzRnVuY3Rpb25SZWxhdGVkKAogICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgICB9IGVsc2UgaWYgKHMgaXMgVHlwZVBhcmFtZXRlclR5cGUpIHsKICAgICAgICAgIHJldHVybiBzLnByb21vdGVkQm91bmQgPT0gbnVsbAogICAgICAgICAgICAgID8gcmVsYXRpb24uaXNUeXBlUGFyYW1ldGVyUmVsYXRlZCgKICAgICAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpCiAgICAgICAgICAgICAgOiByZWxhdGlvbi5pc0ludGVyc2VjdGlvblJlbGF0ZWQoCiAgICAgICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgICB9IGVsc2UgaWYgKHMgaXMgVHlwZWRlZlR5cGUpIHsKICAgICAgICAgIHJldHVybiByZWxhdGlvbi5pc1R5cGVkZWZSZWxhdGVkKAogICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodCBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgY29uc3QgSXNGdW5jdGlvblN1YnR5cGVPZiByZWxhdGlvbiA9IGNvbnN0IElzRnVuY3Rpb25TdWJ0eXBlT2YoKTsKICAgICAgaWYgKHMgaXMgRHluYW1pY1R5cGUpIHsKICAgICAgICByZXR1cm4gcmVsYXRpb24uaXNEeW5hbWljUmVsYXRlZCgKICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICB9IGVsc2UgaWYgKHMgaXMgVm9pZFR5cGUpIHsKICAgICAgICByZXR1cm4gcmVsYXRpb24uaXNWb2lkUmVsYXRlZChzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgIH0gZWxzZSBpZiAocyBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgcmV0dXJuIHMuY2xhc3NOb2RlID09IGhpZXJhcmNoeS5mdXR1cmVPckNsYXNzCiAgICAgICAgICAgID8gcmVsYXRpb24uaXNGdXR1cmVPclJlbGF0ZWQocywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpCiAgICAgICAgICAgIDogcmVsYXRpb24uaXNJbnRlcmZhY2VSZWxhdGVkKAogICAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICB9IGVsc2UgaWYgKHMgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICAgICAgcmV0dXJuIHJlbGF0aW9uLmlzRnVuY3Rpb25SZWxhdGVkKAogICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgIH0gZWxzZSBpZiAocyBpcyBUeXBlUGFyYW1ldGVyVHlwZSkgewogICAgICAgIHJldHVybiBzLnByb21vdGVkQm91bmQgPT0gbnVsbAogICAgICAgICAgICA/IHJlbGF0aW9uLmlzVHlwZVBhcmFtZXRlclJlbGF0ZWQoCiAgICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcykKICAgICAgICAgICAgOiByZWxhdGlvbi5pc0ludGVyc2VjdGlvblJlbGF0ZWQoCiAgICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgIH0gZWxzZSBpZiAocyBpcyBUeXBlZGVmVHlwZSkgewogICAgICAgIHJldHVybiByZWxhdGlvbi5pc1R5cGVkZWZSZWxhdGVkKAogICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodCBpcyBUeXBlUGFyYW1ldGVyVHlwZSkgewogICAgICBpZiAodC5wcm9tb3RlZEJvdW5kID09IG51bGwpIHsKICAgICAgICBjb25zdCBJc1R5cGVQYXJhbWV0ZXJTdWJ0eXBlT2YgcmVsYXRpb24gPQogICAgICAgICAgICBjb25zdCBJc1R5cGVQYXJhbWV0ZXJTdWJ0eXBlT2YoKTsKICAgICAgICBpZiAocyBpcyBEeW5hbWljVHlwZSkgewogICAgICAgICAgcmV0dXJuIHJlbGF0aW9uLmlzRHluYW1pY1JlbGF0ZWQoCiAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0gZWxzZSBpZiAocyBpcyBWb2lkVHlwZSkgewogICAgICAgICAgcmV0dXJuIHJlbGF0aW9uLmlzVm9pZFJlbGF0ZWQocywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0gZWxzZSBpZiAocyBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgICByZXR1cm4gcy5jbGFzc05vZGUgPT0gaGllcmFyY2h5LmZ1dHVyZU9yQ2xhc3MKICAgICAgICAgICAgICA/IHJlbGF0aW9uLmlzRnV0dXJlT3JSZWxhdGVkKAogICAgICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcykKICAgICAgICAgICAgICA6IHJlbGF0aW9uLmlzSW50ZXJmYWNlUmVsYXRlZCgKICAgICAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0gZWxzZSBpZiAocyBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgICAgIHJldHVybiByZWxhdGlvbi5pc0Z1bmN0aW9uUmVsYXRlZCgKICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgICAgfSBlbHNlIGlmIChzIGlzIFR5cGVQYXJhbWV0ZXJUeXBlKSB7CiAgICAgICAgICByZXR1cm4gcy5wcm9tb3RlZEJvdW5kID09IG51bGwKICAgICAgICAgICAgICA/IHJlbGF0aW9uLmlzVHlwZVBhcmFtZXRlclJlbGF0ZWQoCiAgICAgICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKQogICAgICAgICAgICAgIDogcmVsYXRpb24uaXNJbnRlcnNlY3Rpb25SZWxhdGVkKAogICAgICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgICAgfSBlbHNlIGlmIChzIGlzIFR5cGVkZWZUeXBlKSB7CiAgICAgICAgICByZXR1cm4gcmVsYXRpb24uaXNUeXBlZGVmUmVsYXRlZCgKICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IElzSW50ZXJzZWN0aW9uU3VidHlwZU9mIHJlbGF0aW9uID0KICAgICAgICAgICAgY29uc3QgSXNJbnRlcnNlY3Rpb25TdWJ0eXBlT2YoKTsKICAgICAgICBpZiAocyBpcyBEeW5hbWljVHlwZSkgewogICAgICAgICAgcmV0dXJuIHJlbGF0aW9uLmlzRHluYW1pY1JlbGF0ZWQoCiAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0gZWxzZSBpZiAocyBpcyBWb2lkVHlwZSkgewogICAgICAgICAgcmV0dXJuIHJlbGF0aW9uLmlzVm9pZFJlbGF0ZWQocywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0gZWxzZSBpZiAocyBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgICByZXR1cm4gcy5jbGFzc05vZGUgPT0gaGllcmFyY2h5LmZ1dHVyZU9yQ2xhc3MKICAgICAgICAgICAgICA/IHJlbGF0aW9uLmlzRnV0dXJlT3JSZWxhdGVkKAogICAgICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcykKICAgICAgICAgICAgICA6IHJlbGF0aW9uLmlzSW50ZXJmYWNlUmVsYXRlZCgKICAgICAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0gZWxzZSBpZiAocyBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgICAgIHJldHVybiByZWxhdGlvbi5pc0Z1bmN0aW9uUmVsYXRlZCgKICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgICAgfSBlbHNlIGlmIChzIGlzIFR5cGVQYXJhbWV0ZXJUeXBlKSB7CiAgICAgICAgICByZXR1cm4gcy5wcm9tb3RlZEJvdW5kID09IG51bGwKICAgICAgICAgICAgICA/IHJlbGF0aW9uLmlzVHlwZVBhcmFtZXRlclJlbGF0ZWQoCiAgICAgICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKQogICAgICAgICAgICAgIDogcmVsYXRpb24uaXNJbnRlcnNlY3Rpb25SZWxhdGVkKAogICAgICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgICAgfSBlbHNlIGlmIChzIGlzIFR5cGVkZWZUeXBlKSB7CiAgICAgICAgICByZXR1cm4gcmVsYXRpb24uaXNUeXBlZGVmUmVsYXRlZCgKICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYgKHQgaXMgVHlwZWRlZlR5cGUpIHsKICAgICAgY29uc3QgSXNUeXBlZGVmU3VidHlwZU9mIHJlbGF0aW9uID0gY29uc3QgSXNUeXBlZGVmU3VidHlwZU9mKCk7CiAgICAgIGlmIChzIGlzIER5bmFtaWNUeXBlKSB7CiAgICAgICAgcmV0dXJuIHJlbGF0aW9uLmlzRHluYW1pY1JlbGF0ZWQoCiAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgfSBlbHNlIGlmIChzIGlzIFZvaWRUeXBlKSB7CiAgICAgICAgcmV0dXJuIHJlbGF0aW9uLmlzVm9pZFJlbGF0ZWQocywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICB9IGVsc2UgaWYgKHMgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICAgIHJldHVybiBzLmNsYXNzTm9kZSA9PSBoaWVyYXJjaHkuZnV0dXJlT3JDbGFzcwogICAgICAgICAgICA/IHJlbGF0aW9uLmlzRnV0dXJlT3JSZWxhdGVkKHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKQogICAgICAgICAgICA6IHJlbGF0aW9uLmlzSW50ZXJmYWNlUmVsYXRlZCgKICAgICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgfSBlbHNlIGlmIChzIGlzIEZ1bmN0aW9uVHlwZSkgewogICAgICAgIHJldHVybiByZWxhdGlvbi5pc0Z1bmN0aW9uUmVsYXRlZCgKICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICB9IGVsc2UgaWYgKHMgaXMgVHlwZVBhcmFtZXRlclR5cGUpIHsKICAgICAgICByZXR1cm4gcy5wcm9tb3RlZEJvdW5kID09IG51bGwKICAgICAgICAgICAgPyByZWxhdGlvbi5pc1R5cGVQYXJhbWV0ZXJSZWxhdGVkKAogICAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpCiAgICAgICAgICAgIDogcmVsYXRpb24uaXNJbnRlcnNlY3Rpb25SZWxhdGVkKAogICAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICB9IGVsc2UgaWYgKHMgaXMgVHlwZWRlZlR5cGUpIHsKICAgICAgICByZXR1cm4gcmVsYXRpb24uaXNUeXBlZGVmUmVsYXRlZCgKICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB0aHJvdyAiVW5oYW5kbGVkIHR5cGU6ICR7dC5ydW50aW1lVHlwZX0iOwogICAgfQogICAgdGhyb3cgIlVuaGFuZGxlZCB0eXBlIGNvbWJpbmF0aW9uOiAke3QucnVudGltZVR5cGV9ICR7cy5ydW50aW1lVHlwZX0iOwogIH0KCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiBhbGwgdHlwZXMgaW4gW3NdIGFuZCBbdF0gcGFpcndpc2UgYXJlIHN1YnR5cGVzLgogIGJvb2wgYXJlU3VidHlwZXNPZktlcm5lbChMaXN0PERhcnRUeXBlPiBzLCBMaXN0PERhcnRUeXBlPiB0KSB7CiAgICBpZiAocy5sZW5ndGggIT0gdC5sZW5ndGgpIHsKICAgICAgdGhyb3cgIk51bWJlcnMgb2YgdHlwZSBhcmd1bWVudHMgZG9uJ3QgbWF0Y2ggJHMgJHQuIjsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoIWlzU3VidHlwZU9mS2VybmVsKHNbaV0sIHRbaV0pKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGJvb2wgaXNTYW1lVHlwZUtlcm5lbChEYXJ0VHlwZSBzLCBEYXJ0VHlwZSB0KSB7CiAgICByZXR1cm4gaXNTdWJ0eXBlT2ZLZXJuZWwocywgdCkgJiYgaXNTdWJ0eXBlT2ZLZXJuZWwodCwgcyk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBUeXBlUmVsYXRpb248VCBleHRlbmRzIERhcnRUeXBlPiB7CiAgY29uc3QgVHlwZVJlbGF0aW9uKCk7CgogIGJvb2wgaXNEeW5hbWljUmVsYXRlZChEeW5hbWljVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksIFQgdCwKICAgICAgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcyk7CgogIGJvb2wgaXNWb2lkUmVsYXRlZChWb2lkVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksIFQgdCwKICAgICAgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcyk7CgogIGJvb2wgaXNJbnRlcmZhY2VSZWxhdGVkKEludGVyZmFjZVR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LCBUIHQsCiAgICAgIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpOwoKICBib29sIGlzSW50ZXJzZWN0aW9uUmVsYXRlZCgKICAgICAgVHlwZVBhcmFtZXRlclR5cGUgaW50ZXJzZWN0aW9uLAogICAgICBOdWxsYWJpbGl0eSBpbnRlcnNlY3Rpb25OdWxsYWJpbGl0eSwKICAgICAgVCB0LAogICAgICBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksCiAgICAgIFR5cGVzIHR5cGVzKTsKCiAgYm9vbCBpc0Z1bmN0aW9uUmVsYXRlZChGdW5jdGlvblR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LCBUIHQsCiAgICAgIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpOwoKICBib29sIGlzRnV0dXJlT3JSZWxhdGVkKAogICAgICBJbnRlcmZhY2VUeXBlIGZ1dHVyZU9yLAogICAgICBOdWxsYWJpbGl0eSBmdXR1cmVPck51bGxhYmlsaXR5LAogICAgICBUIHQsCiAgICAgIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwKICAgICAgVHlwZXMgdHlwZXMpOwoKICBib29sIGlzVHlwZVBhcmFtZXRlclJlbGF0ZWQoVHlwZVBhcmFtZXRlclR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBUIHQsIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpOwoKICBib29sIGlzVHlwZWRlZlJlbGF0ZWQoVHlwZWRlZlR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LCBUIHQsCiAgICAgIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpOwp9CgpjbGFzcyBJc0ludGVyZmFjZVN1YnR5cGVPZiBleHRlbmRzIFR5cGVSZWxhdGlvbjxJbnRlcmZhY2VUeXBlPiB7CiAgY29uc3QgSXNJbnRlcmZhY2VTdWJ0eXBlT2YoKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0ludGVyZmFjZVJlbGF0ZWQoSW50ZXJmYWNlVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksCiAgICAgIEludGVyZmFjZVR5cGUgdCwgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgaWYgKHMuY2xhc3NOb2RlID09IHR5cGVzLmhpZXJhcmNoeS5udWxsQ2xhc3MpIHsKICAgICAgLy8gVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24sIHRvIGF2b2lkIGluc3RhbnRpYXRpbmcgdW5uZWNlc3NhcnkgdHlwZQogICAgICAvLyBhcmd1bWVudHMgaW4gZ2V0S2VybmVsVHlwZUFzSW5zdGFuY2VPZi4KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBJbnRlcmZhY2VUeXBlIGFzU3VwZXJ0eXBlID0KICAgICAgICB0eXBlcy5oaWVyYXJjaHkuZ2V0S2VybmVsVHlwZUFzSW5zdGFuY2VPZihzLCB0LmNsYXNzTm9kZSk7CiAgICBpZiAoYXNTdXBlcnR5cGUgPT0gbnVsbCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gdHlwZXMuYXJlU3VidHlwZXNPZktlcm5lbCgKICAgICAgICAgIGFzU3VwZXJ0eXBlLnR5cGVBcmd1bWVudHMsIHQudHlwZUFyZ3VtZW50cyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzVHlwZVBhcmFtZXRlclJlbGF0ZWQoVHlwZVBhcmFtZXRlclR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBJbnRlcmZhY2VUeXBlIHQsIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiB0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChzLnBhcmFtZXRlci5ib3VuZCwgdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRnV0dXJlT3JSZWxhdGVkKAogICAgICBJbnRlcmZhY2VUeXBlIGZ1dHVyZU9yLAogICAgICBOdWxsYWJpbGl0eSBmdXR1cmVPck51bGxhYmlsaXR5LAogICAgICBJbnRlcmZhY2VUeXBlIHQsCiAgICAgIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwKICAgICAgVHlwZXMgdHlwZXMpIHsKICAgIExpc3Q8RGFydFR5cGU+IGFyZ3VtZW50cyA9IGZ1dHVyZU9yLnR5cGVBcmd1bWVudHM7CiAgICBpZiAoIXR5cGVzLmlzU3VidHlwZU9mS2VybmVsKGFyZ3VtZW50cy5zaW5nbGUsIHQpKSB7CiAgICAgIHJldHVybiBmYWxzZTsgLy8gUnVsZSA3LjEKICAgIH0KICAgIGlmICghdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwoCiAgICAgICAgbmV3IEludGVyZmFjZVR5cGUodHlwZXMuaGllcmFyY2h5LmZ1dHVyZUNsYXNzLCBhcmd1bWVudHMpLCB0KSkgewogICAgICByZXR1cm4gZmFsc2U7IC8vIFJ1bGUgNy4yCiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbnRlcnNlY3Rpb25SZWxhdGVkKAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSBpbnRlcnNlY3Rpb24sCiAgICAgIE51bGxhYmlsaXR5IGludGVyc2VjdGlvbk51bGxhYmlsaXR5LAogICAgICBJbnRlcmZhY2VUeXBlIHQsCiAgICAgIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwKICAgICAgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiB0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChpbnRlcnNlY3Rpb24ucHJvbW90ZWRCb3VuZCwgdCk7IC8vIFJ1bGUgMTIuCiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRHluYW1pY1JlbGF0ZWQoRHluYW1pY1R5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBJbnRlcmZhY2VUeXBlIHQsIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNGdW5jdGlvblJlbGF0ZWQoRnVuY3Rpb25UeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwKICAgICAgSW50ZXJmYWNlVHlwZSB0LCBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gdC5jbGFzc05vZGUgPT0gdHlwZXMuaGllcmFyY2h5LmZ1bmN0aW9uQ2xhc3M7IC8vIFJ1bGUgMTQuCiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzVHlwZWRlZlJlbGF0ZWQoVHlwZWRlZlR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBJbnRlcmZhY2VUeXBlIHQsIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIC8vIFJ1bGUgNS4KICAgIHJldHVybiB0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChzLnVuYWxpYXMsIHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1ZvaWRSZWxhdGVkKFZvaWRUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwgSW50ZXJmYWNlVHlwZSB0LAogICAgICBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CgpjbGFzcyBJc0Z1bmN0aW9uU3VidHlwZU9mIGV4dGVuZHMgVHlwZVJlbGF0aW9uPEZ1bmN0aW9uVHlwZT4gewogIGNvbnN0IElzRnVuY3Rpb25TdWJ0eXBlT2YoKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Z1bmN0aW9uUmVsYXRlZChGdW5jdGlvblR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBGdW5jdGlvblR5cGUgdCwgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgTGlzdDxUeXBlUGFyYW1ldGVyPiBzVHlwZVZhcmlhYmxlcyA9IHMudHlwZVBhcmFtZXRlcnM7CiAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHRUeXBlVmFyaWFibGVzID0gdC50eXBlUGFyYW1ldGVyczsKICAgIGlmIChzVHlwZVZhcmlhYmxlcy5sZW5ndGggIT0gdFR5cGVWYXJpYWJsZXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoc1R5cGVWYXJpYWJsZXMuaXNOb3RFbXB0eSkgewogICAgICAvLyBJZiB0aGUgZnVuY3Rpb24gdHlwZXMgaGF2ZSB0eXBlIHZhcmlhYmxlcywgd2UgYWxwaGEtcmVuYW1lIHRoZSB0eXBlCiAgICAgIC8vIHZhcmlhYmxlcyBvZiBbc10gdG8gdXNlIHRob3NlIG9mIFt0XS4KICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZVZhcmlhYmxlU3Vic3RpdHV0aW9uID0gPERhcnRUeXBlPltdOwogICAgICBib29sIHNlY29uZEJvdW5kc0NoZWNrTmVlZGVkID0gZmFsc2U7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc1R5cGVWYXJpYWJsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBUeXBlUGFyYW1ldGVyIHNUeXBlVmFyaWFibGUgPSBzVHlwZVZhcmlhYmxlc1tpXTsKICAgICAgICBUeXBlUGFyYW1ldGVyIHRUeXBlVmFyaWFibGUgPSB0VHlwZVZhcmlhYmxlc1tpXTsKICAgICAgICBpZiAoIXR5cGVzLmlzU2FtZVR5cGVLZXJuZWwoc1R5cGVWYXJpYWJsZS5ib3VuZCwgdFR5cGVWYXJpYWJsZS5ib3VuZCkpIHsKICAgICAgICAgIC8vIElmIHRoZSBib3VuZHMgYXJlbid0IHRoZSBzYW1lLCB3ZSBuZWVkIHRvIHRyeSBhZ2FpbiBhZnRlcgogICAgICAgICAgLy8gY29tcHV0aW5nIHRoZSBzdWJzdGl0dXRpb24gb2YgdHlwZSB2YXJpYWJsZXMuCiAgICAgICAgICBzZWNvbmRCb3VuZHNDaGVja05lZWRlZCA9IHRydWU7CiAgICAgICAgfQogICAgICAgIHR5cGVWYXJpYWJsZVN1YnN0aXR1dGlvbi5hZGQobmV3IFR5cGVQYXJhbWV0ZXJUeXBlKHRUeXBlVmFyaWFibGUpKTsKICAgICAgfQogICAgICBTdWJzdGl0dXRpb24gc3Vic3RpdHV0aW9uID0KICAgICAgICAgIFN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoc1R5cGVWYXJpYWJsZXMsIHR5cGVWYXJpYWJsZVN1YnN0aXR1dGlvbik7CiAgICAgIGlmIChzZWNvbmRCb3VuZHNDaGVja05lZWRlZCkgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc1R5cGVWYXJpYWJsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIFR5cGVQYXJhbWV0ZXIgc1R5cGVWYXJpYWJsZSA9IHNUeXBlVmFyaWFibGVzW2ldOwogICAgICAgICAgVHlwZVBhcmFtZXRlciB0VHlwZVZhcmlhYmxlID0gdFR5cGVWYXJpYWJsZXNbaV07CiAgICAgICAgICBpZiAoIXR5cGVzLmlzU2FtZVR5cGVLZXJuZWwoCiAgICAgICAgICAgICAgc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKHNUeXBlVmFyaWFibGUuYm91bmQpLAogICAgICAgICAgICAgIHRUeXBlVmFyaWFibGUuYm91bmQpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcyA9IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShzLndpdGhvdXRUeXBlUGFyYW1ldGVycyk7CiAgICB9CiAgICBpZiAoIXR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHMucmV0dXJuVHlwZSwgdC5yZXR1cm5UeXBlKSkgcmV0dXJuIGZhbHNlOwogICAgTGlzdDxEYXJ0VHlwZT4gc1Bvc2l0aW9uYWwgPSBzLnBvc2l0aW9uYWxQYXJhbWV0ZXJzOwogICAgTGlzdDxEYXJ0VHlwZT4gdFBvc2l0aW9uYWwgPSB0LnBvc2l0aW9uYWxQYXJhbWV0ZXJzOwogICAgaWYgKHMucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA+IHQucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCkgewogICAgICAvLyBSdWxlIDE1LCBuMSA8PSBuMi4KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKHNQb3NpdGlvbmFsLmxlbmd0aCA8IHRQb3NpdGlvbmFsLmxlbmd0aCkgewogICAgICAvLyBSdWxlIDE1LCBuMSArIGsxID49IG4yICsgazIuCiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdFBvc2l0aW9uYWwubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKCF0eXBlcy5pc1N1YnR5cGVPZktlcm5lbCh0UG9zaXRpb25hbFtpXSwgc1Bvc2l0aW9uYWxbaV0pKSB7CiAgICAgICAgLy8gUnVsZSAxNSwgVGogPDogU2ouCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICBMaXN0PE5hbWVkVHlwZT4gc05hbWVkID0gcy5uYW1lZFBhcmFtZXRlcnM7CiAgICBMaXN0PE5hbWVkVHlwZT4gdE5hbWVkID0gdC5uYW1lZFBhcmFtZXRlcnM7CiAgICBpZiAoc05hbWVkLmlzTm90RW1wdHkgfHwgdE5hbWVkLmlzTm90RW1wdHkpIHsKICAgICAgLy8gUnVsZSAxNiwgdGhlIG51bWJlciBvZiBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgbXVzdCBiZSB0aGUgc2FtZS4KICAgICAgaWYgKHNQb3NpdGlvbmFsLmxlbmd0aCAhPSB0UG9zaXRpb25hbC5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgICAgaWYgKHMucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCAhPSB0LnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpIHJldHVybiBmYWxzZTsKCiAgICAgIC8vIFJ1bGUgMTYsIHRoZSBwYXJhbWV0ZXIgbmFtZXMgb2YgW3RdIG11c3QgYmUgYSBzdWJzZXQgb2YgdGhvc2Ugb2YKICAgICAgLy8gW3NdLiBBbHNvLCBmb3IgdGhlIGludGVyc2VjdGlvbiwgdGhlIHR5cGUgb2YgdGhlIHBhcmFtZXRlciBvZiBbdF0gbXVzdAogICAgICAvLyBiZSBhIHN1YnR5cGUgb2YgdGhlIHR5cGUgb2YgdGhlIHBhcmFtZXRlciBvZiBbc10uCiAgICAgIGludCBzQ291bnQgPSAwOwogICAgICBmb3IgKGludCB0Q291bnQgPSAwOyB0Q291bnQgPCB0TmFtZWQubGVuZ3RoOyB0Q291bnQrKykgewogICAgICAgIFN0cmluZyBuYW1lID0gdE5hbWVkW3RDb3VudF0ubmFtZTsKICAgICAgICBmb3IgKDsgc0NvdW50IDwgc05hbWVkLmxlbmd0aDsgc0NvdW50KyspIHsKICAgICAgICAgIGlmIChzTmFtZWRbc0NvdW50XS5uYW1lID09IG5hbWUpIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAoc0NvdW50ID09IHNOYW1lZC5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAoIXR5cGVzLmlzU3VidHlwZU9mS2VybmVsKAogICAgICAgICAgICB0TmFtZWRbdENvdW50XS50eXBlLCBzTmFtZWRbc0NvdW50XS50eXBlKSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSW50ZXJmYWNlUmVsYXRlZChJbnRlcmZhY2VUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwKICAgICAgRnVuY3Rpb25UeXBlIHQsIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiBzLmNsYXNzTm9kZSA9PSB0eXBlcy5oaWVyYXJjaHkubnVsbENsYXNzOyAvLyBSdWxlIDQuCiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRHluYW1pY1JlbGF0ZWQoRHluYW1pY1R5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LCBGdW5jdGlvblR5cGUgdCwKICAgICAgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Z1dHVyZU9yUmVsYXRlZCgKICAgICAgSW50ZXJmYWNlVHlwZSBmdXR1cmVPciwKICAgICAgTnVsbGFiaWxpdHkgZnV0dXJlT3JOdWxsYWJpbGl0eSwKICAgICAgRnVuY3Rpb25UeXBlIHQsCiAgICAgIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwKICAgICAgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbnRlcnNlY3Rpb25SZWxhdGVkKAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSBpbnRlcnNlY3Rpb24sCiAgICAgIE51bGxhYmlsaXR5IGludGVyc2VjdGlvbk51bGxhYmlsaXR5LAogICAgICBGdW5jdGlvblR5cGUgdCwKICAgICAgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LAogICAgICBUeXBlcyB0eXBlcykgewogICAgLy8gUnVsZSAxMi4KICAgIHJldHVybiB0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChpbnRlcnNlY3Rpb24ucHJvbW90ZWRCb3VuZCwgdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzVHlwZVBhcmFtZXRlclJlbGF0ZWQoVHlwZVBhcmFtZXRlclR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBGdW5jdGlvblR5cGUgdCwgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgLy8gUnVsZSAxMy4KICAgIHJldHVybiB0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChzLnBhcmFtZXRlci5ib3VuZCwgdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzVHlwZWRlZlJlbGF0ZWQoVHlwZWRlZlR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LCBGdW5jdGlvblR5cGUgdCwKICAgICAgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgLy8gUnVsZSA1LgogICAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHMudW5hbGlhcywgdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzVm9pZFJlbGF0ZWQoVm9pZFR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LCBGdW5jdGlvblR5cGUgdCwKICAgICAgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKY2xhc3MgSXNUeXBlUGFyYW1ldGVyU3VidHlwZU9mIGV4dGVuZHMgVHlwZVJlbGF0aW9uPFR5cGVQYXJhbWV0ZXJUeXBlPiB7CiAgY29uc3QgSXNUeXBlUGFyYW1ldGVyU3VidHlwZU9mKCk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNUeXBlUGFyYW1ldGVyUmVsYXRlZChUeXBlUGFyYW1ldGVyVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksCiAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlIHQsIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiBzLnBhcmFtZXRlciA9PSB0LnBhcmFtZXRlciB8fAogICAgICAgIC8vIFJ1bGUgMTMuCiAgICAgICAgdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwocy5ib3VuZCwgdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSW50ZXJzZWN0aW9uUmVsYXRlZCgKICAgICAgVHlwZVBhcmFtZXRlclR5cGUgaW50ZXJzZWN0aW9uLAogICAgICBOdWxsYWJpbGl0eSBpbnRlcnNlY3Rpb25OdWxsYWJpbGl0eSwKICAgICAgVHlwZVBhcmFtZXRlclR5cGUgdCwKICAgICAgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LAogICAgICBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIGludGVyc2VjdGlvbi5wYXJhbWV0ZXIgPT0gdC5wYXJhbWV0ZXI7IC8vIFJ1bGUgOC4KICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbnRlcmZhY2VSZWxhdGVkKEludGVyZmFjZVR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSB0LCBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gcy5jbGFzc05vZGUgPT0gdHlwZXMuaGllcmFyY2h5Lm51bGxDbGFzczsgLy8gUnVsZSA0LgogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0R5bmFtaWNSZWxhdGVkKER5bmFtaWNUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwKICAgICAgVHlwZVBhcmFtZXRlclR5cGUgdCwgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Z1bmN0aW9uUmVsYXRlZChGdW5jdGlvblR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSB0LCBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRnV0dXJlT3JSZWxhdGVkKAogICAgICBJbnRlcmZhY2VUeXBlIGZ1dHVyZU9yLAogICAgICBOdWxsYWJpbGl0eSBmdXR1cmVPck51bGxhYmlsaXR5LAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSB0LAogICAgICBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksCiAgICAgIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzVHlwZWRlZlJlbGF0ZWQoVHlwZWRlZlR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSB0LCBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwocy51bmFsaWFzLCB0KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNWb2lkUmVsYXRlZChWb2lkVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksIFR5cGVQYXJhbWV0ZXJUeXBlIHQsCiAgICAgIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiBmYWxzZTsKICB9Cn0KCmNsYXNzIElzVHlwZWRlZlN1YnR5cGVPZiBleHRlbmRzIFR5cGVSZWxhdGlvbjxUeXBlZGVmVHlwZT4gewogIGNvbnN0IElzVHlwZWRlZlN1YnR5cGVPZigpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzSW50ZXJmYWNlUmVsYXRlZChJbnRlcmZhY2VUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwKICAgICAgVHlwZWRlZlR5cGUgdCwgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHMsIHQudW5hbGlhcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRHluYW1pY1JlbGF0ZWQoRHluYW1pY1R5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LCBUeXBlZGVmVHlwZSB0LAogICAgICBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwocywgdC51bmFsaWFzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNGdW5jdGlvblJlbGF0ZWQoRnVuY3Rpb25UeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwKICAgICAgVHlwZWRlZlR5cGUgdCwgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHMsIHQudW5hbGlhcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRnV0dXJlT3JSZWxhdGVkKAogICAgICBJbnRlcmZhY2VUeXBlIGZ1dHVyZU9yLAogICAgICBOdWxsYWJpbGl0eSBmdXR1cmVPck51bGxhYmlsaXR5LAogICAgICBUeXBlZGVmVHlwZSB0LAogICAgICBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksCiAgICAgIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwoZnV0dXJlT3IsIHQudW5hbGlhcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSW50ZXJzZWN0aW9uUmVsYXRlZCgKICAgICAgVHlwZVBhcmFtZXRlclR5cGUgaW50ZXJzZWN0aW9uLAogICAgICBOdWxsYWJpbGl0eSBpbnRlcnNlY3Rpb25OdWxsYWJpbGl0eSwKICAgICAgVHlwZWRlZlR5cGUgdCwKICAgICAgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LAogICAgICBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKGludGVyc2VjdGlvbiwgdC51bmFsaWFzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNUeXBlUGFyYW1ldGVyUmVsYXRlZChUeXBlUGFyYW1ldGVyVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksCiAgICAgIFR5cGVkZWZUeXBlIHQsIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiB0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChzLCB0LnVuYWxpYXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1R5cGVkZWZSZWxhdGVkKFR5cGVkZWZUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwgVHlwZWRlZlR5cGUgdCwKICAgICAgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHMudW5hbGlhcywgdC51bmFsaWFzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNWb2lkUmVsYXRlZChWb2lkVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksIFR5cGVkZWZUeXBlIHQsCiAgICAgIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiB0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChzLCB0LnVuYWxpYXMpOwogIH0KfQoKY2xhc3MgSXNGdXR1cmVPclN1YnR5cGVPZiBleHRlbmRzIFR5cGVSZWxhdGlvbjxJbnRlcmZhY2VUeXBlPiB7CiAgY29uc3QgSXNGdXR1cmVPclN1YnR5cGVPZigpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzSW50ZXJmYWNlUmVsYXRlZChJbnRlcmZhY2VUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwKICAgICAgSW50ZXJmYWNlVHlwZSBmdXR1cmVPciwgTnVsbGFiaWxpdHkgZnV0dXJlT3JOdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIExpc3Q8RGFydFR5cGU+IGFyZ3VtZW50cyA9IGZ1dHVyZU9yLnR5cGVBcmd1bWVudHM7CiAgICBpZiAodHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwocywgYXJndW1lbnRzLnNpbmdsZSkpIHsKICAgICAgcmV0dXJuIHRydWU7IC8vIFJ1bGUgMTEuCiAgICB9CiAgICAvLyBSdWxlIDEwLgogICAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKAogICAgICAgIHMsIG5ldyBJbnRlcmZhY2VUeXBlKHR5cGVzLmhpZXJhcmNoeS5mdXR1cmVDbGFzcywgYXJndW1lbnRzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRnV0dXJlT3JSZWxhdGVkKAogICAgICBJbnRlcmZhY2VUeXBlIHNGdXR1cmVPciwKICAgICAgTnVsbGFiaWxpdHkgc0Z1dHVyZU9yTnVsbGFiaWxpdHksCiAgICAgIEludGVyZmFjZVR5cGUgdEZ1dHVyZU9yLAogICAgICBOdWxsYWJpbGl0eSB0RnV0dXJlT3JOdWxsYWJpbGl0eSwKICAgICAgVHlwZXMgdHlwZXMpIHsKICAgIC8vIFRoaXMgZm9sbG93cyBmcm9tIGNvbWJpbmluZyBydWxlcyA3LCAxMCwgYW5kIDExLgogICAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKAogICAgICAgIHNGdXR1cmVPci50eXBlQXJndW1lbnRzLnNpbmdsZSwgdEZ1dHVyZU9yLnR5cGVBcmd1bWVudHMuc2luZ2xlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNEeW5hbWljUmVsYXRlZChEeW5hbWljVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksCiAgICAgIEludGVyZmFjZVR5cGUgZnV0dXJlT3IsIE51bGxhYmlsaXR5IGZ1dHVyZU9yTnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICAvLyBSdWxlIDExLgogICAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHMsIGZ1dHVyZU9yLnR5cGVBcmd1bWVudHMuc2luZ2xlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNWb2lkUmVsYXRlZChWb2lkVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksCiAgICAgIEludGVyZmFjZVR5cGUgZnV0dXJlT3IsIE51bGxhYmlsaXR5IGZ1dHVyZU9yTnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICAvLyBSdWxlIDExLgogICAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHMsIGZ1dHVyZU9yLnR5cGVBcmd1bWVudHMuc2luZ2xlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNUeXBlUGFyYW1ldGVyUmVsYXRlZChUeXBlUGFyYW1ldGVyVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksCiAgICAgIEludGVyZmFjZVR5cGUgZnV0dXJlT3IsIE51bGxhYmlsaXR5IGZ1dHVyZU9yTnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICBMaXN0PERhcnRUeXBlPiBhcmd1bWVudHMgPSBmdXR1cmVPci50eXBlQXJndW1lbnRzOwogICAgaWYgKHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHMsIGFyZ3VtZW50cy5zaW5nbGUpKSB7CiAgICAgIC8vIFJ1bGUgMTEuCiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIGlmICh0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChzLnBhcmFtZXRlci5ib3VuZCwgZnV0dXJlT3IpKSB7CiAgICAgIC8vIFJ1bGUgMTMuCiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8vIFJ1bGUgMTAuCiAgICByZXR1cm4gdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwoCiAgICAgICAgcywgbmV3IEludGVyZmFjZVR5cGUodHlwZXMuaGllcmFyY2h5LmZ1dHVyZUNsYXNzLCBhcmd1bWVudHMpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNGdW5jdGlvblJlbGF0ZWQoRnVuY3Rpb25UeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwKICAgICAgSW50ZXJmYWNlVHlwZSBmdXR1cmVPciwgTnVsbGFiaWxpdHkgZnV0dXJlT3JOdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIC8vIFJ1bGUgMTEuCiAgICByZXR1cm4gdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwocywgZnV0dXJlT3IudHlwZUFyZ3VtZW50cy5zaW5nbGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0ludGVyc2VjdGlvblJlbGF0ZWQoCiAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlIGludGVyc2VjdGlvbiwKICAgICAgTnVsbGFiaWxpdHkgaW50ZXJzZWN0aW9uTnVsbGFiaWxpdHksCiAgICAgIEludGVyZmFjZVR5cGUgZnV0dXJlT3IsCiAgICAgIE51bGxhYmlsaXR5IGZ1dHVyZU9yTnVsbGFiaWxpdHksCiAgICAgIFR5cGVzIHR5cGVzKSB7CiAgICBpZiAoaXNUeXBlUGFyYW1ldGVyUmVsYXRlZChpbnRlcnNlY3Rpb24sIGludGVyc2VjdGlvbk51bGxhYmlsaXR5LCBmdXR1cmVPciwKICAgICAgICBmdXR1cmVPck51bGxhYmlsaXR5LCB0eXBlcykpIHsKICAgICAgLy8gUnVsZSA4LgogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIC8vIFJ1bGUgMTIuCiAgICByZXR1cm4gdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwoaW50ZXJzZWN0aW9uLnByb21vdGVkQm91bmQsIGZ1dHVyZU9yKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNUeXBlZGVmUmVsYXRlZChUeXBlZGVmVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksCiAgICAgIEludGVyZmFjZVR5cGUgZnV0dXJlT3IsIE51bGxhYmlsaXR5IGZ1dHVyZU9yTnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwocy51bmFsaWFzLCBmdXR1cmVPcik7CiAgfQp9CgpjbGFzcyBJc0ludGVyc2VjdGlvblN1YnR5cGVPZiBleHRlbmRzIFR5cGVSZWxhdGlvbjxUeXBlUGFyYW1ldGVyVHlwZT4gewogIGNvbnN0IElzSW50ZXJzZWN0aW9uU3VidHlwZU9mKCk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbnRlcnNlY3Rpb25SZWxhdGVkKAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSBzSW50ZXJzZWN0aW9uLAogICAgICBOdWxsYWJpbGl0eSBzSW50ZXJzZWN0aW9uTnVsbGFiaWxpdHksCiAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlIHRJbnRlcnNlY3Rpb24sCiAgICAgIE51bGxhYmlsaXR5IHRJbnRlcnNlY3Rpb25OdWxsYWJpbGl0eSwKICAgICAgVHlwZXMgdHlwZXMpIHsKICAgIC8vIFJ1bGUgOS4KICAgIHJldHVybiBjb25zdCBJc1R5cGVQYXJhbWV0ZXJTdWJ0eXBlT2YoKS5pc0ludGVyc2VjdGlvblJlbGF0ZWQoCiAgICAgICAgICAgIHNJbnRlcnNlY3Rpb24sCiAgICAgICAgICAgIHNJbnRlcnNlY3Rpb25OdWxsYWJpbGl0eSwKICAgICAgICAgICAgdEludGVyc2VjdGlvbiwKICAgICAgICAgICAgdEludGVyc2VjdGlvbk51bGxhYmlsaXR5LAogICAgICAgICAgICB0eXBlcykgJiYKICAgICAgICB0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChzSW50ZXJzZWN0aW9uLCB0SW50ZXJzZWN0aW9uLnByb21vdGVkQm91bmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1R5cGVQYXJhbWV0ZXJSZWxhdGVkKAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSBzLAogICAgICBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksCiAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlIGludGVyc2VjdGlvbiwKICAgICAgTnVsbGFiaWxpdHkgaW50ZXJzZWN0aW9uTnVsbGFiaWxpdHksCiAgICAgIFR5cGVzIHR5cGVzKSB7CiAgICAvLyBSdWxlIDkuCiAgICByZXR1cm4gY29uc3QgSXNUeXBlUGFyYW1ldGVyU3VidHlwZU9mKCkuaXNUeXBlUGFyYW1ldGVyUmVsYXRlZCgKICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCBpbnRlcnNlY3Rpb24sIGludGVyc2VjdGlvbk51bGxhYmlsaXR5LCB0eXBlcykgJiYKICAgICAgICB0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChzLCBpbnRlcnNlY3Rpb24ucHJvbW90ZWRCb3VuZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSW50ZXJmYWNlUmVsYXRlZCgKICAgICAgSW50ZXJmYWNlVHlwZSBzLAogICAgICBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksCiAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlIGludGVyc2VjdGlvbiwKICAgICAgTnVsbGFiaWxpdHkgaW50ZXJzZWN0aW9uTnVsbGFiaWxpdHksCiAgICAgIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gcy5jbGFzc05vZGUgPT0gdHlwZXMuaGllcmFyY2h5Lm51bGxDbGFzczsgLy8gUnVsZSA0LgogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0R5bmFtaWNSZWxhdGVkKAogICAgICBEeW5hbWljVHlwZSBzLAogICAgICBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksCiAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlIGludGVyc2VjdGlvbiwKICAgICAgTnVsbGFiaWxpdHkgaW50ZXJzZWN0aW9uTnVsbGFiaWxpdHksCiAgICAgIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRnVuY3Rpb25SZWxhdGVkKAogICAgICBGdW5jdGlvblR5cGUgcywKICAgICAgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSBpbnRlcnNlY3Rpb24sCiAgICAgIE51bGxhYmlsaXR5IGludGVyc2VjdGlvbk51bGxhYmlsaXR5LAogICAgICBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Z1dHVyZU9yUmVsYXRlZCgKICAgICAgSW50ZXJmYWNlVHlwZSBmdXR1cmVPciwKICAgICAgTnVsbGFiaWxpdHkgZnV0dXJlT3JOdWxsYWJpbGl0eSwKICAgICAgVHlwZVBhcmFtZXRlclR5cGUgaW50ZXJzZWN0aW9uLAogICAgICBOdWxsYWJpbGl0eSBpbnRlcnNlY3Rpb25OdWxsYWJpbGl0eSwKICAgICAgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNUeXBlZGVmUmVsYXRlZCgKICAgICAgVHlwZWRlZlR5cGUgcywKICAgICAgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSBpbnRlcnNlY3Rpb24sCiAgICAgIE51bGxhYmlsaXR5IGludGVyc2VjdGlvbk51bGxhYmlsaXR5LAogICAgICBUeXBlcyB0eXBlcykgewogICAgLy8gUnVsZSA1LgogICAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHMudW5hbGlhcywgaW50ZXJzZWN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNWb2lkUmVsYXRlZCgKICAgICAgVm9pZFR5cGUgcywKICAgICAgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSBpbnRlcnNlY3Rpb24sCiAgICAgIE51bGxhYmlsaXR5IGludGVyc2VjdGlvbk51bGxhYmlsaXR5LAogICAgICBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIGZhbHNlOwogIH0KfQqDJABOTjwBFQEhCRQPEhUWFxUTFRcbFRIBPQE5AQ4pARkBLzMcJxMGHBQGTQQBJUgbHgYcHgYZHgYbFAYeHyogCCxKICw3JFEpOCw6LTsoLTctKTE6MDsnLDcKD0wgLDckUSk4LDotOygtNy0pMTowOycsNwoIJEgeKjUiTyc2USs5Jis1KycvOC45JSo1CCklMi4gLDckUSk4LDotOygtNy0pMTowOycsNwoPMS0gLDckUSk4LDotOygtNy0pMTowOycsNwoII0YeKjUiTyc2USs5Jis1KycvOC45JSo1CA0wBksEAUZBIDwGKTgGEQQBMj8EAgEyGAFGLgFALgFKLgEeJisLIBQBSC4BGh4nCyAUAU0zAUYuAgFBIAEMRUA0SjETBiBDHxQNKDcGBAEMTUA6BAEMGh4nFyAVNzkgBiJJIAYRBAEMHiYrFyAVTwQBDEFAEgQBDENARQQBDEFADzIEAQxMLxIEAgE/HwEMQz87O0YlTS8+LDg5OVFHOyoKTAgiTCU6OzsnQCYaDAoIQAZMOTk/HBQGMyYUBjNGHhYIBjAwMkhCTgFKUDsWPyszMgozJjkYCggGEQQBDEU/QAQBDFEvEgQBDBoeJxYgFRIEAQweJisWIBUQQwQBDE0/EDoEAQxRLw8yBAEMSy8SBAIBSSQBDE1EKRQtBAEMHiYrGyAVPQQBDEVEQAQBDEFEEgQBDENEEgQBDBoeJxsgFRIEAQxBRDIEAQxQLxIEAgE9HgEMRT4yBAEMUC8yBAEMQz4yBAEMGh4nFSAVOQQBDB4mKxUgFT0EAQxNPjIEAQxQLzoEAQxKLzIEAgFAHwEMRU43OB8GECRHBAEMGh8oHygVOCRJBAEMQU4QRgQBDDtOEEYEAQxNTjc4EhMGAUASEwYBECRHBAEMQ04QRgQBDB4mKx4nFVAnERMGEEoEAQxBTjkEAgFIIwEMHicsJywVD0MbJhsmFk0EAQwfGyAmKxUPRE5ABAEMGxcgJisVQAQBDBkVICYrFRIEAQwaFiAmKxUSBAEMGh4nJisVEgQBDBkVICYrFQ89BAEMFhIgJisVEgQCAS1wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL3R5cGVzLmRhcnRKc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3BhcnNlci9lcnJvcl9kZWxlZ2F0aW9uX2xpc3RlbmVyLmRhcnSC2i8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCcgc2hvdyBUb2tlbjsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcgc2hvdyBNZXNzYWdlOwoKaW1wb3J0ICdsaXN0ZW5lci5kYXJ0JyBzaG93IExpc3RlbmVyOwoKLy8vIEEgbGlzdGVuZXIgd2hpY2ggZm9yd2FyZHMgZXJyb3IgcmVwb3J0cyB0byBhbm90aGVyIGxpc3RlbmVyIGJ1dCBpZ25vcmVzCi8vLyBhbGwgb3RoZXIgZXZlbnRzLgpjbGFzcyBFcnJvckRlbGVnYXRpb25MaXN0ZW5lciBleHRlbmRzIExpc3RlbmVyIHsKICBMaXN0ZW5lciBkZWxlZ2F0ZTsKCiAgRXJyb3JEZWxlZ2F0aW9uTGlzdGVuZXIodGhpcy5kZWxlZ2F0ZSk7CgogIHZvaWQgaGFuZGxlUmVjb3ZlcmFibGVFcnJvcigKICAgICAgTWVzc2FnZSBtZXNzYWdlLCBUb2tlbiBzdGFydFRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgcmV0dXJuIGRlbGVnYXRlLmhhbmRsZVJlY292ZXJhYmxlRXJyb3IobWVzc2FnZSwgc3RhcnRUb2tlbiwgZW5kVG9rZW4pOwogIH0KfQoYAE5OPAEuASsBJgFMFjEVASoBHztLBAIBQXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvZXJyb3JfZGVsZWdhdGlvbl9saXN0ZW5lci5kYXJ0P3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9pZ25vcmVkX3BhcnNlcl9lcnJvcnMuZGFydIKKLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuaWdub3JlZF9wYXJzZXJfZXJyb3JzOwoKaW1wb3J0ICdmYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IENvZGUsIGNvZGVOb25QYXJ0T2ZEaXJlY3RpdmVJblBhcnQ7CgppbXBvcnQgJ3BhcnNlci5kYXJ0JyBzaG93IG9wdGlvbmFsOwoKaW1wb3J0ICdzY2FubmVyLmRhcnQnIHNob3cgVG9rZW47Cgpib29sIGlzSWdub3JlZFBhcnNlckVycm9yKENvZGU8T2JqZWN0PiBjb2RlLCBUb2tlbiB0b2tlbikgewogIGlmIChjb2RlID09IGNvZGVOb25QYXJ0T2ZEaXJlY3RpdmVJblBhcnQpIHsKICAgIC8vIElnbm9yZWQuIFRoaXMgZXJyb3IgaXMgaGFuZGxlZCBpbiB0aGUgb3V0bGluZSBwaGFzZSAocGFydCByZXNvbHV0aW9uKS4KICAgIHJldHVybiBvcHRpb25hbCgicGFydCIsIHRva2VuKTsKICB9IGVsc2UgewogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoWAE5OPAElAUMBJAEiATwuTiQLEgQCATZwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvaWdub3JlZF9wYXJzZXJfZXJyb3JzLmRhcnRCc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3BhcnNlci9kaXJlY3RpdmVfY29udGV4dC5kYXJ0jMQvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JzsKaW1wb3J0ICdwYXJzZXIuZGFydCc7CmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JzsKCmNsYXNzIERpcmVjdGl2ZUNvbnRleHQgewogIERpcmVjdGl2ZVN0YXRlIHN0YXRlID0gRGlyZWN0aXZlU3RhdGUuVW5rbm93bjsKCiAgdm9pZCBjaGVja1NjcmlwdFRhZyhQYXJzZXIgcGFyc2VyLCBUb2tlbiB0b2tlbikgewogICAgaWYgKHN0YXRlID09IERpcmVjdGl2ZVN0YXRlLlVua25vd24pIHsKICAgICAgc3RhdGUgPSBEaXJlY3RpdmVTdGF0ZS5TY3JpcHQ7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIFRoZSBzY2FubmVyIG9ubHkgcHJvZHVjZXMgdGhlIFNDUklQVF9UQUcKICAgIC8vIHdoZW4gaXQgaXMgdGhlIGZpcnN0IHRva2VuIGluIHRoZSBmaWxlLgogICAgdGhyb3cgIkludGVybmFsIGVycm9yOiBVbmV4cGVjdGVkIHNjcmlwdCB0YWcuIjsKICB9CgogIHZvaWQgY2hlY2tEZWNsYXJhdGlvbigpIHsKICAgIGlmIChzdGF0ZSAhPSBEaXJlY3RpdmVTdGF0ZS5QYXJ0T2YpIHsKICAgICAgc3RhdGUgPSBEaXJlY3RpdmVTdGF0ZS5EZWNsYXJhdGlvbnM7CiAgICB9CiAgfQoKICB2b2lkIGNoZWNrRXhwb3J0KFBhcnNlciBwYXJzZXIsIFRva2VuIHRva2VuKSB7CiAgICBpZiAoc3RhdGUuaW5kZXggPD0gRGlyZWN0aXZlU3RhdGUuSW1wb3J0QW5kRXhwb3J0LmluZGV4KSB7CiAgICAgIHN0YXRlID0gRGlyZWN0aXZlU3RhdGUuSW1wb3J0QW5kRXhwb3J0OwogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBSZWNvdmVyeQogICAgaWYgKHN0YXRlID09IERpcmVjdGl2ZVN0YXRlLlBhcnQpIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IodG9rZW4sIG1lc3NhZ2VFeHBvcnRBZnRlclBhcnQpOwogICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBEaXJlY3RpdmVTdGF0ZS5QYXJ0T2YpIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IodG9rZW4sIG1lc3NhZ2VOb25QYXJ0T2ZEaXJlY3RpdmVJblBhcnQpOwogICAgfSBlbHNlIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IodG9rZW4sIG1lc3NhZ2VEaXJlY3RpdmVBZnRlckRlY2xhcmF0aW9uKTsKICAgIH0KICB9CgogIHZvaWQgY2hlY2tJbXBvcnQoUGFyc2VyIHBhcnNlciwgVG9rZW4gdG9rZW4pIHsKICAgIGlmIChzdGF0ZS5pbmRleCA8PSBEaXJlY3RpdmVTdGF0ZS5JbXBvcnRBbmRFeHBvcnQuaW5kZXgpIHsKICAgICAgc3RhdGUgPSBEaXJlY3RpdmVTdGF0ZS5JbXBvcnRBbmRFeHBvcnQ7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIFJlY292ZXJ5CiAgICBpZiAoc3RhdGUgPT0gRGlyZWN0aXZlU3RhdGUuUGFydCkgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0b2tlbiwgbWVzc2FnZUltcG9ydEFmdGVyUGFydCk7CiAgICB9IGVsc2UgaWYgKHN0YXRlID09IERpcmVjdGl2ZVN0YXRlLlBhcnRPZikgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0b2tlbiwgbWVzc2FnZU5vblBhcnRPZkRpcmVjdGl2ZUluUGFydCk7CiAgICB9IGVsc2UgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0b2tlbiwgbWVzc2FnZURpcmVjdGl2ZUFmdGVyRGVjbGFyYXRpb24pOwogICAgfQogIH0KCiAgdm9pZCBjaGVja0xpYnJhcnkoUGFyc2VyIHBhcnNlciwgVG9rZW4gdG9rZW4pIHsKICAgIGlmIChzdGF0ZS5pbmRleCA8IERpcmVjdGl2ZVN0YXRlLkxpYnJhcnkuaW5kZXgpIHsKICAgICAgc3RhdGUgPSBEaXJlY3RpdmVTdGF0ZS5MaWJyYXJ5OwogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBSZWNvdmVyeQogICAgaWYgKHN0YXRlID09IERpcmVjdGl2ZVN0YXRlLkxpYnJhcnkpIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IodG9rZW4sIG1lc3NhZ2VNdWx0aXBsZUxpYnJhcnlEaXJlY3RpdmVzKTsKICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gRGlyZWN0aXZlU3RhdGUuUGFydE9mKSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKHRva2VuLCBtZXNzYWdlTm9uUGFydE9mRGlyZWN0aXZlSW5QYXJ0KTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKHRva2VuLCBtZXNzYWdlTGlicmFyeURpcmVjdGl2ZU5vdEZpcnN0KTsKICAgIH0KICB9CgogIHZvaWQgY2hlY2tQYXJ0KFBhcnNlciBwYXJzZXIsIFRva2VuIHRva2VuKSB7CiAgICBpZiAoc3RhdGUuaW5kZXggPD0gRGlyZWN0aXZlU3RhdGUuUGFydC5pbmRleCkgewogICAgICBzdGF0ZSA9IERpcmVjdGl2ZVN0YXRlLlBhcnQ7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIFJlY292ZXJ5CiAgICBpZiAoc3RhdGUgPT0gRGlyZWN0aXZlU3RhdGUuUGFydE9mKSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKHRva2VuLCBtZXNzYWdlTm9uUGFydE9mRGlyZWN0aXZlSW5QYXJ0KTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKHRva2VuLCBtZXNzYWdlRGlyZWN0aXZlQWZ0ZXJEZWNsYXJhdGlvbik7CiAgICB9CiAgfQoKICB2b2lkIGNoZWNrUGFydE9mKFBhcnNlciBwYXJzZXIsIFRva2VuIHRva2VuKSB7CiAgICBpZiAoc3RhdGUgPT0gRGlyZWN0aXZlU3RhdGUuVW5rbm93bikgewogICAgICBzdGF0ZSA9IERpcmVjdGl2ZVN0YXRlLlBhcnRPZjsKICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gUmVjb3ZlcnkKICAgIGlmIChzdGF0ZSA9PSBEaXJlY3RpdmVTdGF0ZS5QYXJ0T2YpIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IodG9rZW4sIG1lc3NhZ2VQYXJ0T2ZUd2ljZSk7CiAgICB9IGVsc2UgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0b2tlbiwgbWVzc2FnZU5vblBhcnRPZkRpcmVjdGl2ZUluUGFydCk7CiAgICB9CiAgfQp9CgplbnVtIERpcmVjdGl2ZVN0YXRlIHsKICBVbmtub3duLAogIFNjcmlwdCwKICBMaWJyYXJ5LAogIEltcG9ydEFuZEV4cG9ydCwKICBQYXJ0LAogIFBhcnRPZiwKICBEZWNsYXJhdGlvbnMsCn0KbgBOTjwBHhYjARkxATQrJQ4GMC80BAEcKisGBAExPy4OBhAoRDFNDU4GBAExPy4OBhAoRDFNDU4GBAEyNiYOBhArTjFNDU0GBAEvNCMOBhAqTQ1OBgQBMSslDgYQKkANTQYEAgEWCwoLEwgKEAIBOXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvZGlyZWN0aXZlX2NvbnRleHQuZGFydERzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvcGFyc2VyL2ZvcndhcmRpbmdfbGlzdGVuZXIuZGFydMAAmn4vLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9tZXNzYWdlcy5kYXJ0JzsKaW1wb3J0ICcuLi9wYXJzZXIuZGFydCc7CmltcG9ydCAnLi4vc2Nhbm5lci5kYXJ0JzsKCmNsYXNzIEZvcndhcmRpbmdMaXN0ZW5lciBpbXBsZW1lbnRzIExpc3RlbmVyIHsKICBMaXN0ZW5lciBsaXN0ZW5lcjsKICBib29sIGZvcndhcmRFcnJvcnMgPSB0cnVlOwoKICBGb3J3YXJkaW5nTGlzdGVuZXIoW3RoaXMubGlzdGVuZXJdKTsKCiAgQG92ZXJyaWRlCiAgc2V0IHN1cHByZXNzUGFyc2VFcnJvcnMoYm9vbCB2YWx1ZSkgewogICAgbGlzdGVuZXI/LnN1cHByZXNzUGFyc2VFcnJvcnMgPSB2YWx1ZTsKICB9CgogIEBvdmVycmlkZQogIFVyaSBnZXQgdXJpID0+IGxpc3RlbmVyPy51cmk7CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Bcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkFyZ3VtZW50cyh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQXNzZXJ0KFRva2VuIGFzc2VydEtleXdvcmQsIEFzc2VydCBraW5kKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Bc3NlcnQoYXNzZXJ0S2V5d29yZCwga2luZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQXdhaXRFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Bd2FpdEV4cHJlc3Npb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkJpbmFyeUV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkJpbmFyeUV4cHJlc3Npb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkJsb2NrKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5CbG9jayh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQmxvY2tGdW5jdGlvbkJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkJsb2NrRnVuY3Rpb25Cb2R5KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5DYXNjYWRlKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5DYXNjYWRlKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5DYXNlRXhwcmVzc2lvbihUb2tlbiBjYXNlS2V5d29yZCkgewogICAgbGlzdGVuZXI/LmJlZ2luQ2FzZUV4cHJlc3Npb24oY2FzZUtleXdvcmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkNhdGNoQ2xhdXNlKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5DYXRjaENsYXVzZSh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ2xhc3NEZWNsYXJhdGlvbihUb2tlbiBiZWdpbiwgVG9rZW4gYWJzdHJhY3RUb2tlbiwgVG9rZW4gbmFtZSkgewogICAgbGlzdGVuZXI/LmJlZ2luQ2xhc3NEZWNsYXJhdGlvbihiZWdpbiwgYWJzdHJhY3RUb2tlbiwgbmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ2xhc3NPck1peGluQm9keShEZWNsYXJhdGlvbktpbmQga2luZCwgVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkNsYXNzT3JNaXhpbkJvZHkoa2luZCwgdG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkNsYXNzT3JOYW1lZE1peGluQXBwbGljYXRpb25QcmVsdWRlKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5DbGFzc09yTmFtZWRNaXhpbkFwcGxpY2F0aW9uUHJlbHVkZSh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ29tYmluYXRvcnMoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkNvbWJpbmF0b3JzKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Db21waWxhdGlvblVuaXQoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkNvbXBpbGF0aW9uVW5pdCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ29uZGl0aW9uYWxFeHByZXNzaW9uKFRva2VuIHF1ZXN0aW9uKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Db25kaXRpb25hbEV4cHJlc3Npb24ocXVlc3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkNvbmRpdGlvbmFsVXJpKFRva2VuIGlmS2V5d29yZCkgewogICAgbGlzdGVuZXI/LmJlZ2luQ29uZGl0aW9uYWxVcmkoaWZLZXl3b3JkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Db25kaXRpb25hbFVyaXMoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkNvbmRpdGlvbmFsVXJpcyh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ29uc3RFeHByZXNzaW9uKFRva2VuIGNvbnN0S2V5d29yZCkgewogICAgbGlzdGVuZXI/LmJlZ2luQ29uc3RFeHByZXNzaW9uKGNvbnN0S2V5d29yZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ29uc3RMaXRlcmFsKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Db25zdExpdGVyYWwodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkNvbnN0cnVjdG9yUmVmZXJlbmNlKFRva2VuIHN0YXJ0KSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Db25zdHJ1Y3RvclJlZmVyZW5jZShzdGFydCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRG9XaGlsZVN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luRG9XaGlsZVN0YXRlbWVudCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRG9XaGlsZVN0YXRlbWVudEJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkRvV2hpbGVTdGF0ZW1lbnRCb2R5KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5FbHNlU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5FbHNlU3RhdGVtZW50KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5FbnVtKFRva2VuIGVudW1LZXl3b3JkKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5FbnVtKGVudW1LZXl3b3JkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5FeHBvcnQoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkV4cG9ydCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRXh0ZW5zaW9uRGVjbGFyYXRpb25QcmVsdWRlKFRva2VuIGV4dGVuc2lvbktleXdvcmQpIHsKICAgIGxpc3RlbmVyPy5iZWdpbkV4dGVuc2lvbkRlY2xhcmF0aW9uUHJlbHVkZShleHRlbnNpb25LZXl3b3JkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5FeHRlbnNpb25EZWNsYXJhdGlvbihUb2tlbiBleHRlbnNpb25LZXl3b3JkLCBUb2tlbiBuYW1lKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5FeHRlbnNpb25EZWNsYXJhdGlvbihleHRlbnNpb25LZXl3b3JkLCBuYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5GYWN0b3J5TWV0aG9kKAogICAgICBUb2tlbiBsYXN0Q29uc3VtZWQsIFRva2VuIGV4dGVybmFsVG9rZW4sIFRva2VuIGNvbnN0VG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkZhY3RvcnlNZXRob2QobGFzdENvbnN1bWVkLCBleHRlcm5hbFRva2VuLCBjb25zdFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5GaWVsZEluaXRpYWxpemVyKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5GaWVsZEluaXRpYWxpemVyKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Gb3JDb250cm9sRmxvdyhUb2tlbiBhd2FpdFRva2VuLCBUb2tlbiBmb3JUb2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luRm9yQ29udHJvbEZsb3coYXdhaXRUb2tlbiwgZm9yVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZvckluQm9keShUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luRm9ySW5Cb2R5KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Gb3JJbkV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkZvckluRXhwcmVzc2lvbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRm9ybWFsUGFyYW1ldGVyKFRva2VuIHRva2VuLCBNZW1iZXJLaW5kIGtpbmQsIFRva2VuIHJlcXVpcmVkVG9rZW4sCiAgICAgIFRva2VuIGNvdmFyaWFudFRva2VuLCBUb2tlbiB2YXJGaW5hbE9yQ29uc3QpIHsKICAgIGxpc3RlbmVyPy5iZWdpbkZvcm1hbFBhcmFtZXRlcigKICAgICAgICB0b2tlbiwga2luZCwgcmVxdWlyZWRUb2tlbiwgY292YXJpYW50VG9rZW4sIHZhckZpbmFsT3JDb25zdCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRm9ybWFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlRXhwcmVzc2lvbigpIHsKICAgIGxpc3RlbmVyPy5iZWdpbkZvcm1hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZUV4cHJlc3Npb24oKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Gb3JtYWxQYXJhbWV0ZXJzKFRva2VuIHRva2VuLCBNZW1iZXJLaW5kIGtpbmQpIHsKICAgIGxpc3RlbmVyPy5iZWdpbkZvcm1hbFBhcmFtZXRlcnModG9rZW4sIGtpbmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZvclN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luRm9yU3RhdGVtZW50KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Gb3JTdGF0ZW1lbnRCb2R5KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Gb3JTdGF0ZW1lbnRCb2R5KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5GdW5jdGlvbkV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkZ1bmN0aW9uRXhwcmVzc2lvbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRnVuY3Rpb25OYW1lKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5GdW5jdGlvbk5hbWUodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZ1bmN0aW9uVHlwZShUb2tlbiBiZWdpblRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5GdW5jdGlvblR5cGUoYmVnaW5Ub2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRnVuY3Rpb25UeXBlQWxpYXMoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkZ1bmN0aW9uVHlwZUFsaWFzKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5GdW5jdGlvblR5cGVkRm9ybWFsUGFyYW1ldGVyKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5GdW5jdGlvblR5cGVkRm9ybWFsUGFyYW1ldGVyKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5IaWRlKFRva2VuIGhpZGVLZXl3b3JkKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5IaWRlKGhpZGVLZXl3b3JkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5JZkNvbnRyb2xGbG93KFRva2VuIGlmVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbklmQ29udHJvbEZsb3coaWZUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luSWZTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbklmU3RhdGVtZW50KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5JbXBsaWNpdENyZWF0aW9uRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luSW1wbGljaXRDcmVhdGlvbkV4cHJlc3Npb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkltcG9ydChUb2tlbiBpbXBvcnRLZXl3b3JkKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5JbXBvcnQoaW1wb3J0S2V5d29yZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luSW5pdGlhbGl6ZWRJZGVudGlmaWVyKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Jbml0aWFsaXplZElkZW50aWZpZXIodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkluaXRpYWxpemVyKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Jbml0aWFsaXplcih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luSW5pdGlhbGl6ZXJzKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Jbml0aWFsaXplcnModG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkxhYmVsZWRTdGF0ZW1lbnQoVG9rZW4gdG9rZW4sIGludCBsYWJlbENvdW50KSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5MYWJlbGVkU3RhdGVtZW50KHRva2VuLCBsYWJlbENvdW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5MaWJyYXJ5TmFtZShUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luTGlicmFyeU5hbWUodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkxpdGVyYWxTdHJpbmcoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkxpdGVyYWxTdHJpbmcodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkxpdGVyYWxTeW1ib2woVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkxpdGVyYWxTeW1ib2wodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkxvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luTG9jYWxGdW5jdGlvbkRlY2xhcmF0aW9uKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5NZW1iZXIoKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5NZW1iZXIoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5NZXRhZGF0YShUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luTWV0YWRhdGEodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbk1ldGFkYXRhU3RhcihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luTWV0YWRhdGFTdGFyKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5NZXRob2QoVG9rZW4gZXh0ZXJuYWxUb2tlbiwgVG9rZW4gc3RhdGljVG9rZW4sIFRva2VuIGNvdmFyaWFudFRva2VuLAogICAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3QsIFRva2VuIGdldE9yU2V0LCBUb2tlbiBuYW1lKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5NZXRob2QoZXh0ZXJuYWxUb2tlbiwgc3RhdGljVG9rZW4sIGNvdmFyaWFudFRva2VuLAogICAgICAgIHZhckZpbmFsT3JDb25zdCwgZ2V0T3JTZXQsIG5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbk1peGluRGVjbGFyYXRpb24oVG9rZW4gbWl4aW5LZXl3b3JkLCBUb2tlbiBuYW1lKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5NaXhpbkRlY2xhcmF0aW9uKG1peGluS2V5d29yZCwgbmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luTmFtZWRGdW5jdGlvbkV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbk5hbWVkRnVuY3Rpb25FeHByZXNzaW9uKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5OYW1lZE1peGluQXBwbGljYXRpb24oCiAgICAgIFRva2VuIGJlZ2luLCBUb2tlbiBhYnN0cmFjdFRva2VuLCBUb2tlbiBuYW1lKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5OYW1lZE1peGluQXBwbGljYXRpb24oYmVnaW4sIGFic3RyYWN0VG9rZW4sIG5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbk5ld0V4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbk5ld0V4cHJlc3Npb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbk9wdGlvbmFsRm9ybWFsUGFyYW1ldGVycyhUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luT3B0aW9uYWxGb3JtYWxQYXJhbWV0ZXJzKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5QYXJ0KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5QYXJ0KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5QYXJ0T2YoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpblBhcnRPZih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luUmVkaXJlY3RpbmdGYWN0b3J5Qm9keShUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luUmVkaXJlY3RpbmdGYWN0b3J5Qm9keSh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luUmV0aHJvd1N0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luUmV0aHJvd1N0YXRlbWVudCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luUmV0dXJuU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5SZXR1cm5TdGF0ZW1lbnQodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblNob3coVG9rZW4gc2hvd0tleXdvcmQpIHsKICAgIGxpc3RlbmVyPy5iZWdpblNob3coc2hvd0tleXdvcmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblN3aXRjaEJsb2NrKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Td2l0Y2hCbG9jayh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luU3dpdGNoQ2FzZShpbnQgbGFiZWxDb3VudCwgaW50IGV4cHJlc3Npb25Db3VudCwgVG9rZW4gZmlyc3RUb2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luU3dpdGNoQ2FzZShsYWJlbENvdW50LCBleHByZXNzaW9uQ291bnQsIGZpcnN0VG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblN3aXRjaFN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luU3dpdGNoU3RhdGVtZW50KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5UaGVuQ29udHJvbEZsb3coVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpblRoZW5Db250cm9sRmxvdyh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luVGhlblN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luVGhlblN0YXRlbWVudCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luVG9wTGV2ZWxNZW1iZXIoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpblRvcExldmVsTWVtYmVyKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Ub3BMZXZlbE1ldGhvZChUb2tlbiBsYXN0Q29uc3VtZWQsIFRva2VuIGV4dGVybmFsVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpblRvcExldmVsTWV0aG9kKGxhc3RDb25zdW1lZCwgZXh0ZXJuYWxUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luVHJ5U3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5UcnlTdGF0ZW1lbnQodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblR5cGVBcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpblR5cGVBcmd1bWVudHModG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblR5cGVMaXN0KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5UeXBlTGlzdCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luVHlwZVZhcmlhYmxlKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5UeXBlVmFyaWFibGUodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblR5cGVWYXJpYWJsZXMoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpblR5cGVWYXJpYWJsZXModG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblZhcmlhYmxlSW5pdGlhbGl6ZXIoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpblZhcmlhYmxlSW5pdGlhbGl6ZXIodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblZhcmlhYmxlc0RlY2xhcmF0aW9uKAogICAgICBUb2tlbiB0b2tlbiwgVG9rZW4gbGF0ZVRva2VuLCBUb2tlbiB2YXJGaW5hbE9yQ29uc3QpIHsKICAgIGxpc3RlbmVyPy5iZWdpblZhcmlhYmxlc0RlY2xhcmF0aW9uKHRva2VuLCBsYXRlVG9rZW4sIHZhckZpbmFsT3JDb25zdCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luV2hpbGVTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbldoaWxlU3RhdGVtZW50KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5XaGlsZVN0YXRlbWVudEJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbldoaWxlU3RhdGVtZW50Qm9keSh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luWWllbGRTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbllpZWxkU3RhdGVtZW50KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZGlzY2FyZFR5cGVSZXBsYWNlZFdpdGhDb21tZW50VHlwZUFzc2lnbigpIHsKICAgIGxpc3RlbmVyPy5kaXNjYXJkVHlwZVJlcGxhY2VkV2l0aENvbW1lbnRUeXBlQXNzaWduKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEFyZ3VtZW50cyhpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kQXJndW1lbnRzKGNvdW50LCBiZWdpblRva2VuLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEFzc2VydChUb2tlbiBhc3NlcnRLZXl3b3JkLCBBc3NlcnQga2luZCwgVG9rZW4gbGVmdFBhcmVudGhlc2lzLAogICAgICBUb2tlbiBjb21tYVRva2VuLCBUb2tlbiBzZW1pY29sb25Ub2tlbikgewogICAgbGlzdGVuZXI/LmVuZEFzc2VydCgKICAgICAgICBhc3NlcnRLZXl3b3JkLCBraW5kLCBsZWZ0UGFyZW50aGVzaXMsIGNvbW1hVG9rZW4sIHNlbWljb2xvblRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQXdhaXRFeHByZXNzaW9uKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kQXdhaXRFeHByZXNzaW9uKGJlZ2luVG9rZW4sIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQmluYXJ5RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmVuZEJpbmFyeUV4cHJlc3Npb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRCbG9jayhpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kQmxvY2soY291bnQsIGJlZ2luVG9rZW4sIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQmxvY2tGdW5jdGlvbkJvZHkoaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZEJsb2NrRnVuY3Rpb25Cb2R5KGNvdW50LCBiZWdpblRva2VuLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENhc2NhZGUoKSB7CiAgICBsaXN0ZW5lcj8uZW5kQ2FzY2FkZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDYXNlRXhwcmVzc2lvbihUb2tlbiBjb2xvbikgewogICAgbGlzdGVuZXI/LmVuZENhc2VFeHByZXNzaW9uKGNvbG9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ2F0Y2hDbGF1c2UoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRDYXRjaENsYXVzZSh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENsYXNzQ29uc3RydWN0b3IoVG9rZW4gZ2V0T3JTZXQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGJlZ2luUGFyYW0sCiAgICAgIFRva2VuIGJlZ2luSW5pdGlhbGl6ZXJzLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZENsYXNzQ29uc3RydWN0b3IoCiAgICAgICAgZ2V0T3JTZXQsIGJlZ2luVG9rZW4sIGJlZ2luUGFyYW0sIGJlZ2luSW5pdGlhbGl6ZXJzLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENsYXNzRGVjbGFyYXRpb24oVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRDbGFzc0RlY2xhcmF0aW9uKGJlZ2luVG9rZW4sIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ2xhc3NGYWN0b3J5TWV0aG9kKAogICAgICBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBmYWN0b3J5S2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRDbGFzc0ZhY3RvcnlNZXRob2QoYmVnaW5Ub2tlbiwgZmFjdG9yeUtleXdvcmQsIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ2xhc3NGaWVsZHMoVG9rZW4gc3RhdGljVG9rZW4sIFRva2VuIGNvdmFyaWFudFRva2VuLCBUb2tlbiBsYXRlVG9rZW4sCiAgICAgIFRva2VuIHZhckZpbmFsT3JDb25zdCwgaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZENsYXNzRmllbGRzKHN0YXRpY1Rva2VuLCBjb3ZhcmlhbnRUb2tlbiwgbGF0ZVRva2VuLAogICAgICAgIHZhckZpbmFsT3JDb25zdCwgY291bnQsIGJlZ2luVG9rZW4sIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ2xhc3NNZXRob2QoVG9rZW4gZ2V0T3JTZXQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGJlZ2luUGFyYW0sCiAgICAgIFRva2VuIGJlZ2luSW5pdGlhbGl6ZXJzLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZENsYXNzTWV0aG9kKAogICAgICAgIGdldE9yU2V0LCBiZWdpblRva2VuLCBiZWdpblBhcmFtLCBiZWdpbkluaXRpYWxpemVycywgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDbGFzc09yTWl4aW5Cb2R5KAogICAgICBEZWNsYXJhdGlvbktpbmQga2luZCwgaW50IG1lbWJlckNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZENsYXNzT3JNaXhpbkJvZHkoa2luZCwgbWVtYmVyQ291bnQsIGJlZ2luVG9rZW4sIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ29tYmluYXRvcnMoaW50IGNvdW50KSB7CiAgICBsaXN0ZW5lcj8uZW5kQ29tYmluYXRvcnMoY291bnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDb21waWxhdGlvblVuaXQoaW50IGNvdW50LCBUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmVuZENvbXBpbGF0aW9uVW5pdChjb3VudCwgdG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDb25kaXRpb25hbEV4cHJlc3Npb24oVG9rZW4gcXVlc3Rpb24sIFRva2VuIGNvbG9uKSB7CiAgICBsaXN0ZW5lcj8uZW5kQ29uZGl0aW9uYWxFeHByZXNzaW9uKHF1ZXN0aW9uLCBjb2xvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENvbmRpdGlvbmFsVXJpKFRva2VuIGlmS2V5d29yZCwgVG9rZW4gbGVmdFBhcmVuLCBUb2tlbiBlcXVhbFNpZ24pIHsKICAgIGxpc3RlbmVyPy5lbmRDb25kaXRpb25hbFVyaShpZktleXdvcmQsIGxlZnRQYXJlbiwgZXF1YWxTaWduKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ29uZGl0aW9uYWxVcmlzKGludCBjb3VudCkgewogICAgbGlzdGVuZXI/LmVuZENvbmRpdGlvbmFsVXJpcyhjb3VudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENvbnN0RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmVuZENvbnN0RXhwcmVzc2lvbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENvbnN0TGl0ZXJhbChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmVuZENvbnN0TGl0ZXJhbCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENvbnN0cnVjdG9yUmVmZXJlbmNlKAogICAgICBUb2tlbiBzdGFydCwgVG9rZW4gcGVyaW9kQmVmb3JlTmFtZSwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRDb25zdHJ1Y3RvclJlZmVyZW5jZShzdGFydCwgcGVyaW9kQmVmb3JlTmFtZSwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmREb1doaWxlU3RhdGVtZW50KAogICAgICBUb2tlbiBkb0tleXdvcmQsIFRva2VuIHdoaWxlS2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmREb1doaWxlU3RhdGVtZW50KGRvS2V5d29yZCwgd2hpbGVLZXl3b3JkLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZERvV2hpbGVTdGF0ZW1lbnRCb2R5KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kRG9XaGlsZVN0YXRlbWVudEJvZHkodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRFbHNlU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kRWxzZVN0YXRlbWVudCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEVudW0oVG9rZW4gZW51bUtleXdvcmQsIFRva2VuIGxlZnRCcmFjZSwgaW50IGNvdW50KSB7CiAgICBsaXN0ZW5lcj8uZW5kRW51bShlbnVtS2V5d29yZCwgbGVmdEJyYWNlLCBjb3VudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEV4cG9ydChUb2tlbiBleHBvcnRLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGxpc3RlbmVyPy5lbmRFeHBvcnQoZXhwb3J0S2V5d29yZCwgc2VtaWNvbG9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRXh0ZW5zaW9uQ29uc3RydWN0b3IoVG9rZW4gZ2V0T3JTZXQsIFRva2VuIGJlZ2luVG9rZW4sCiAgICAgIFRva2VuIGJlZ2luUGFyYW0sIFRva2VuIGJlZ2luSW5pdGlhbGl6ZXJzLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZEV4dGVuc2lvbkNvbnN0cnVjdG9yKAogICAgICAgIGdldE9yU2V0LCBiZWdpblRva2VuLCBiZWdpblBhcmFtLCBiZWdpbkluaXRpYWxpemVycywgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRFeHRlbnNpb25EZWNsYXJhdGlvbigKICAgICAgVG9rZW4gZXh0ZW5zaW9uS2V5d29yZCwgVG9rZW4gb25LZXl3b3JkLCBUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmVuZEV4dGVuc2lvbkRlY2xhcmF0aW9uKGV4dGVuc2lvbktleXdvcmQsIG9uS2V5d29yZCwgdG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRFeHRlbnNpb25GYWN0b3J5TWV0aG9kKAogICAgICBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBmYWN0b3J5S2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRFeHRlbnNpb25GYWN0b3J5TWV0aG9kKGJlZ2luVG9rZW4sIGZhY3RvcnlLZXl3b3JkLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEV4dGVuc2lvbkZpZWxkcygKICAgICAgVG9rZW4gc3RhdGljVG9rZW4sCiAgICAgIFRva2VuIGNvdmFyaWFudFRva2VuLAogICAgICBUb2tlbiBsYXRlVG9rZW4sCiAgICAgIFRva2VuIHZhckZpbmFsT3JDb25zdCwKICAgICAgaW50IGNvdW50LAogICAgICBUb2tlbiBiZWdpblRva2VuLAogICAgICBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZEV4dGVuc2lvbkZpZWxkcyhzdGF0aWNUb2tlbiwgY292YXJpYW50VG9rZW4sIGxhdGVUb2tlbiwKICAgICAgICB2YXJGaW5hbE9yQ29uc3QsIGNvdW50LCBiZWdpblRva2VuLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEV4dGVuc2lvbk1ldGhvZChUb2tlbiBnZXRPclNldCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gYmVnaW5QYXJhbSwKICAgICAgVG9rZW4gYmVnaW5Jbml0aWFsaXplcnMsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kRXh0ZW5zaW9uTWV0aG9kKAogICAgICAgIGdldE9yU2V0LCBiZWdpblRva2VuLCBiZWdpblBhcmFtLCBiZWdpbkluaXRpYWxpemVycywgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGaWVsZEluaXRpYWxpemVyKFRva2VuIGFzc2lnbm1lbnQsIFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kRmllbGRJbml0aWFsaXplcihhc3NpZ25tZW50LCB0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZvckNvbnRyb2xGbG93KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kRm9yQ29udHJvbEZsb3codG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGb3JJbihUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZEZvckluKGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRm9ySW5Cb2R5KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kRm9ySW5Cb2R5KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRm9ySW5Db250cm9sRmxvdyhUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmVuZEZvckluQ29udHJvbEZsb3codG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGb3JJbkV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRGb3JJbkV4cHJlc3Npb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGb3JtYWxQYXJhbWV0ZXIoCiAgICAgIFRva2VuIHRoaXNLZXl3b3JkLAogICAgICBUb2tlbiBwZXJpb2RBZnRlclRoaXMsCiAgICAgIFRva2VuIG5hbWVUb2tlbiwKICAgICAgVG9rZW4gaW5pdGlhbGl6ZXJTdGFydCwKICAgICAgVG9rZW4gaW5pdGlhbGl6ZXJFbmQsCiAgICAgIEZvcm1hbFBhcmFtZXRlcktpbmQga2luZCwKICAgICAgTWVtYmVyS2luZCBtZW1iZXJLaW5kKSB7CiAgICBsaXN0ZW5lcj8uZW5kRm9ybWFsUGFyYW1ldGVyKHRoaXNLZXl3b3JkLCBwZXJpb2RBZnRlclRoaXMsIG5hbWVUb2tlbiwKICAgICAgICBpbml0aWFsaXplclN0YXJ0LCBpbml0aWFsaXplckVuZCwga2luZCwgbWVtYmVyS2luZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZvcm1hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZUV4cHJlc3Npb24oKSB7CiAgICBsaXN0ZW5lcj8uZW5kRm9ybWFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlRXhwcmVzc2lvbigpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGb3JtYWxQYXJhbWV0ZXJzKAogICAgICBpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuLCBNZW1iZXJLaW5kIGtpbmQpIHsKICAgIGxpc3RlbmVyPy5lbmRGb3JtYWxQYXJhbWV0ZXJzKGNvdW50LCBiZWdpblRva2VuLCBlbmRUb2tlbiwga2luZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZvclN0YXRlbWVudChUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZEZvclN0YXRlbWVudChlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZvclN0YXRlbWVudEJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRGb3JTdGF0ZW1lbnRCb2R5KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRnVuY3Rpb25FeHByZXNzaW9uKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kRnVuY3Rpb25FeHByZXNzaW9uKGJlZ2luVG9rZW4sIHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRnVuY3Rpb25OYW1lKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kRnVuY3Rpb25OYW1lKGJlZ2luVG9rZW4sIHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRnVuY3Rpb25UeXBlKFRva2VuIGZ1bmN0aW9uVG9rZW4sIFRva2VuIHF1ZXN0aW9uTWFyaykgewogICAgbGlzdGVuZXI/LmVuZEZ1bmN0aW9uVHlwZShmdW5jdGlvblRva2VuLCBxdWVzdGlvbk1hcmspOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGdW5jdGlvblR5cGVBbGlhcygKICAgICAgVG9rZW4gdHlwZWRlZktleXdvcmQsIFRva2VuIGVxdWFscywgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRGdW5jdGlvblR5cGVBbGlhcyh0eXBlZGVmS2V5d29yZCwgZXF1YWxzLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZ1bmN0aW9uVHlwZWRGb3JtYWxQYXJhbWV0ZXIoVG9rZW4gbmFtZVRva2VuLCBUb2tlbiBxdWVzdGlvbikgewogICAgbGlzdGVuZXI/LmVuZEZ1bmN0aW9uVHlwZWRGb3JtYWxQYXJhbWV0ZXIobmFtZVRva2VuLCBxdWVzdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEhpZGUoVG9rZW4gaGlkZUtleXdvcmQpIHsKICAgIGxpc3RlbmVyPy5lbmRIaWRlKGhpZGVLZXl3b3JkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSWZDb250cm9sRmxvdyhUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmVuZElmQ29udHJvbEZsb3codG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRJZkVsc2VDb250cm9sRmxvdyhUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmVuZElmRWxzZUNvbnRyb2xGbG93KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSWZTdGF0ZW1lbnQoVG9rZW4gaWZUb2tlbiwgVG9rZW4gZWxzZVRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kSWZTdGF0ZW1lbnQoaWZUb2tlbiwgZWxzZVRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSW1wbGljaXRDcmVhdGlvbkV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRJbXBsaWNpdENyZWF0aW9uRXhwcmVzc2lvbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEltcG9ydChUb2tlbiBpbXBvcnRLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGxpc3RlbmVyPy5lbmRJbXBvcnQoaW1wb3J0S2V5d29yZCwgc2VtaWNvbG9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSW5pdGlhbGl6ZWRJZGVudGlmaWVyKFRva2VuIG5hbWVUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZEluaXRpYWxpemVkSWRlbnRpZmllcihuYW1lVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRJbml0aWFsaXplcihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmVuZEluaXRpYWxpemVyKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSW5pdGlhbGl6ZXJzKGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRJbml0aWFsaXplcnMoY291bnQsIGJlZ2luVG9rZW4sIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSW52YWxpZEF3YWl0RXhwcmVzc2lvbigKICAgICAgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4sIE1lc3NhZ2VDb2RlIGVycm9yQ29kZSkgewogICAgbGlzdGVuZXI/LmVuZEludmFsaWRBd2FpdEV4cHJlc3Npb24oYmVnaW5Ub2tlbiwgZW5kVG9rZW4sIGVycm9yQ29kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZExhYmVsZWRTdGF0ZW1lbnQoaW50IGxhYmVsQ291bnQpIHsKICAgIGxpc3RlbmVyPy5lbmRMYWJlbGVkU3RhdGVtZW50KGxhYmVsQ291bnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRMaWJyYXJ5TmFtZShUb2tlbiBsaWJyYXJ5S2V5d29yZCwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBsaXN0ZW5lcj8uZW5kTGlicmFyeU5hbWUobGlicmFyeUtleXdvcmQsIHNlbWljb2xvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZExpdGVyYWxTdHJpbmcoaW50IGludGVycG9sYXRpb25Db3VudCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRMaXRlcmFsU3RyaW5nKGludGVycG9sYXRpb25Db3VudCwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRMaXRlcmFsU3ltYm9sKFRva2VuIGhhc2hUb2tlbiwgaW50IGlkZW50aWZpZXJDb3VudCkgewogICAgbGlzdGVuZXI/LmVuZExpdGVyYWxTeW1ib2woaGFzaFRva2VuLCBpZGVudGlmaWVyQ291bnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRMb2NhbEZ1bmN0aW9uRGVjbGFyYXRpb24oVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRMb2NhbEZ1bmN0aW9uRGVjbGFyYXRpb24oZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRNZW1iZXIoKSB7CiAgICBsaXN0ZW5lcj8uZW5kTWVtYmVyKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZE1ldGFkYXRhKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIHBlcmlvZEJlZm9yZU5hbWUsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kTWV0YWRhdGEoYmVnaW5Ub2tlbiwgcGVyaW9kQmVmb3JlTmFtZSwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRNZXRhZGF0YVN0YXIoaW50IGNvdW50KSB7CiAgICBsaXN0ZW5lcj8uZW5kTWV0YWRhdGFTdGFyKGNvdW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWl4aW5Db25zdHJ1Y3RvcihUb2tlbiBnZXRPclNldCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gYmVnaW5QYXJhbSwKICAgICAgVG9rZW4gYmVnaW5Jbml0aWFsaXplcnMsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kTWl4aW5Db25zdHJ1Y3RvcigKICAgICAgICBnZXRPclNldCwgYmVnaW5Ub2tlbiwgYmVnaW5QYXJhbSwgYmVnaW5Jbml0aWFsaXplcnMsIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWl4aW5EZWNsYXJhdGlvbihUb2tlbiBtaXhpbktleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kTWl4aW5EZWNsYXJhdGlvbihtaXhpbktleXdvcmQsIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWl4aW5GYWN0b3J5TWV0aG9kKAogICAgICBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBmYWN0b3J5S2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRNaXhpbkZhY3RvcnlNZXRob2QoYmVnaW5Ub2tlbiwgZmFjdG9yeUtleXdvcmQsIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWl4aW5GaWVsZHMoVG9rZW4gc3RhdGljVG9rZW4sIFRva2VuIGNvdmFyaWFudFRva2VuLCBUb2tlbiBsYXRlVG9rZW4sCiAgICAgIFRva2VuIHZhckZpbmFsT3JDb25zdCwgaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZE1peGluRmllbGRzKHN0YXRpY1Rva2VuLCBjb3ZhcmlhbnRUb2tlbiwgbGF0ZVRva2VuLAogICAgICAgIHZhckZpbmFsT3JDb25zdCwgY291bnQsIGJlZ2luVG9rZW4sIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWl4aW5NZXRob2QoVG9rZW4gZ2V0T3JTZXQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGJlZ2luUGFyYW0sCiAgICAgIFRva2VuIGJlZ2luSW5pdGlhbGl6ZXJzLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZE1peGluTWV0aG9kKAogICAgICAgIGdldE9yU2V0LCBiZWdpblRva2VuLCBiZWdpblBhcmFtLCBiZWdpbkluaXRpYWxpemVycywgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmROYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbihUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZE5hbWVkRnVuY3Rpb25FeHByZXNzaW9uKGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTmFtZWRNaXhpbkFwcGxpY2F0aW9uKFRva2VuIGJlZ2luLCBUb2tlbiBjbGFzc0tleXdvcmQsIFRva2VuIGVxdWFscywKICAgICAgVG9rZW4gaW1wbGVtZW50c0tleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kTmFtZWRNaXhpbkFwcGxpY2F0aW9uKAogICAgICAgIGJlZ2luLCBjbGFzc0tleXdvcmQsIGVxdWFscywgaW1wbGVtZW50c0tleXdvcmQsIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTmV3RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmVuZE5ld0V4cHJlc3Npb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRPcHRpb25hbEZvcm1hbFBhcmFtZXRlcnMoCiAgICAgIGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRPcHRpb25hbEZvcm1hbFBhcmFtZXRlcnMoY291bnQsIGJlZ2luVG9rZW4sIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kUGFydChUb2tlbiBwYXJ0S2V5d29yZCwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBsaXN0ZW5lcj8uZW5kUGFydChwYXJ0S2V5d29yZCwgc2VtaWNvbG9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kUGFydE9mKAogICAgICBUb2tlbiBwYXJ0S2V5d29yZCwgVG9rZW4gb2ZLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24sIGJvb2wgaGFzTmFtZSkgewogICAgbGlzdGVuZXI/LmVuZFBhcnRPZihwYXJ0S2V5d29yZCwgb2ZLZXl3b3JkLCBzZW1pY29sb24sIGhhc05hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kUmVkaXJlY3RpbmdGYWN0b3J5Qm9keShiZWdpblRva2VuLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFJldGhyb3dTdGF0ZW1lbnQoVG9rZW4gcmV0aHJvd1Rva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZFJldGhyb3dTdGF0ZW1lbnQocmV0aHJvd1Rva2VuLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFJldHVyblN0YXRlbWVudCgKICAgICAgYm9vbCBoYXNFeHByZXNzaW9uLCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZFJldHVyblN0YXRlbWVudChoYXNFeHByZXNzaW9uLCBiZWdpblRva2VuLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFNob3coVG9rZW4gc2hvd0tleXdvcmQpIHsKICAgIGxpc3RlbmVyPy5lbmRTaG93KHNob3dLZXl3b3JkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kU3dpdGNoQmxvY2soaW50IGNhc2VDb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRTd2l0Y2hCbG9jayhjYXNlQ291bnQsIGJlZ2luVG9rZW4sIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kU3dpdGNoQ2FzZSgKICAgICAgaW50IGxhYmVsQ291bnQsCiAgICAgIGludCBleHByZXNzaW9uQ291bnQsCiAgICAgIFRva2VuIGRlZmF1bHRLZXl3b3JkLAogICAgICBUb2tlbiBjb2xvbkFmdGVyRGVmYXVsdCwKICAgICAgaW50IHN0YXRlbWVudENvdW50LAogICAgICBUb2tlbiBmaXJzdFRva2VuLAogICAgICBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZFN3aXRjaENhc2UobGFiZWxDb3VudCwgZXhwcmVzc2lvbkNvdW50LCBkZWZhdWx0S2V5d29yZCwKICAgICAgICBjb2xvbkFmdGVyRGVmYXVsdCwgc3RhdGVtZW50Q291bnQsIGZpcnN0VG9rZW4sIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kU3dpdGNoU3RhdGVtZW50KFRva2VuIHN3aXRjaEtleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kU3dpdGNoU3RhdGVtZW50KHN3aXRjaEtleXdvcmQsIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVGhlblN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmVuZFRoZW5TdGF0ZW1lbnQodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUb3BMZXZlbERlY2xhcmF0aW9uKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kVG9wTGV2ZWxEZWNsYXJhdGlvbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFRvcExldmVsRmllbGRzKAogICAgICBUb2tlbiBzdGF0aWNUb2tlbiwKICAgICAgVG9rZW4gY292YXJpYW50VG9rZW4sCiAgICAgIFRva2VuIGxhdGVUb2tlbiwKICAgICAgVG9rZW4gdmFyRmluYWxPckNvbnN0LAogICAgICBpbnQgY291bnQsCiAgICAgIFRva2VuIGJlZ2luVG9rZW4sCiAgICAgIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kVG9wTGV2ZWxGaWVsZHMoc3RhdGljVG9rZW4sIGNvdmFyaWFudFRva2VuLCBsYXRlVG9rZW4sCiAgICAgICAgdmFyRmluYWxPckNvbnN0LCBjb3VudCwgYmVnaW5Ub2tlbiwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUb3BMZXZlbE1ldGhvZChUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBnZXRPclNldCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRUb3BMZXZlbE1ldGhvZChiZWdpblRva2VuLCBnZXRPclNldCwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUcnlTdGF0ZW1lbnQoaW50IGNhdGNoQ291bnQsIFRva2VuIHRyeUtleXdvcmQsIFRva2VuIGZpbmFsbHlLZXl3b3JkKSB7CiAgICBsaXN0ZW5lcj8uZW5kVHJ5U3RhdGVtZW50KGNhdGNoQ291bnQsIHRyeUtleXdvcmQsIGZpbmFsbHlLZXl3b3JkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVHlwZUFyZ3VtZW50cyhpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kVHlwZUFyZ3VtZW50cyhjb3VudCwgYmVnaW5Ub2tlbiwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUeXBlTGlzdChpbnQgY291bnQpIHsKICAgIGxpc3RlbmVyPy5lbmRUeXBlTGlzdChjb3VudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFR5cGVWYXJpYWJsZShUb2tlbiB0b2tlbiwgaW50IGluZGV4LCBUb2tlbiBleHRlbmRzT3JTdXBlcikgewogICAgbGlzdGVuZXI/LmVuZFR5cGVWYXJpYWJsZSh0b2tlbiwgaW5kZXgsIGV4dGVuZHNPclN1cGVyKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVHlwZVZhcmlhYmxlcyhUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZFR5cGVWYXJpYWJsZXMoYmVnaW5Ub2tlbiwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRWYXJpYWJsZUluaXRpYWxpemVyKFRva2VuIGFzc2lnbm1lbnRPcGVyYXRvcikgewogICAgbGlzdGVuZXI/LmVuZFZhcmlhYmxlSW5pdGlhbGl6ZXIoYXNzaWdubWVudE9wZXJhdG9yKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVmFyaWFibGVzRGVjbGFyYXRpb24oaW50IGNvdW50LCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZFZhcmlhYmxlc0RlY2xhcmF0aW9uKGNvdW50LCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFdoaWxlU3RhdGVtZW50KFRva2VuIHdoaWxlS2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRXaGlsZVN0YXRlbWVudCh3aGlsZUtleXdvcmQsIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kV2hpbGVTdGF0ZW1lbnRCb2R5KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kV2hpbGVTdGF0ZW1lbnRCb2R5KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kWWllbGRTdGF0ZW1lbnQoVG9rZW4geWllbGRUb2tlbiwgVG9rZW4gc3RhclRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZFlpZWxkU3RhdGVtZW50KHlpZWxkVG9rZW4sIHN0YXJUb2tlbiwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVBc09wZXJhdG9yKFRva2VuIG9wZXJhdG9yKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlQXNPcGVyYXRvcihvcGVyYXRvcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUFzc2lnbm1lbnRFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlQXNzaWdubWVudEV4cHJlc3Npb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVBc3luY01vZGlmaWVyKFRva2VuIGFzeW5jVG9rZW4sIFRva2VuIHN0YXJUb2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUFzeW5jTW9kaWZpZXIoYXN5bmNUb2tlbiwgc3RhclRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQnJlYWtTdGF0ZW1lbnQoCiAgICAgIGJvb2wgaGFzVGFyZ2V0LCBUb2tlbiBicmVha0tleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlQnJlYWtTdGF0ZW1lbnQoaGFzVGFyZ2V0LCBicmVha0tleXdvcmQsIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2FzZU1hdGNoKFRva2VuIGNhc2VLZXl3b3JkLCBUb2tlbiBjb2xvbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUNhc2VNYXRjaChjYXNlS2V5d29yZCwgY29sb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVDYXRjaEJsb2NrKFRva2VuIG9uS2V5d29yZCwgVG9rZW4gY2F0Y2hLZXl3b3JkLCBUb2tlbiBjb21tYSkgewogICAgbGlzdGVuZXI/LmhhbmRsZUNhdGNoQmxvY2sob25LZXl3b3JkLCBjYXRjaEtleXdvcmQsIGNvbW1hKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2xhc3NFeHRlbmRzKFRva2VuIGV4dGVuZHNLZXl3b3JkKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlQ2xhc3NFeHRlbmRzKGV4dGVuZHNLZXl3b3JkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2xhc3NIZWFkZXIoVG9rZW4gYmVnaW4sIFRva2VuIGNsYXNzS2V5d29yZCwgVG9rZW4gbmF0aXZlVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVDbGFzc0hlYWRlcihiZWdpbiwgY2xhc3NLZXl3b3JkLCBuYXRpdmVUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNsYXNzTm9XaXRoQ2xhdXNlKCkgewogICAgbGlzdGVuZXI/LmhhbmRsZUNsYXNzTm9XaXRoQ2xhdXNlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNsYXNzT3JNaXhpbkltcGxlbWVudHMoCiAgICAgIFRva2VuIGltcGxlbWVudHNLZXl3b3JkLCBpbnQgaW50ZXJmYWNlc0NvdW50KSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlQ2xhc3NPck1peGluSW1wbGVtZW50cyhpbXBsZW1lbnRzS2V5d29yZCwgaW50ZXJmYWNlc0NvdW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2xhc3NXaXRoQ2xhdXNlKFRva2VuIHdpdGhLZXl3b3JkKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlQ2xhc3NXaXRoQ2xhdXNlKHdpdGhLZXl3b3JkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ29tbWVudFJlZmVyZW5jZSgKICAgICAgVG9rZW4gbmV3S2V5d29yZCwgVG9rZW4gcHJlZml4LCBUb2tlbiBwZXJpb2QsIFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlQ29tbWVudFJlZmVyZW5jZShuZXdLZXl3b3JkLCBwcmVmaXgsIHBlcmlvZCwgdG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVDb21tZW50UmVmZXJlbmNlVGV4dChTdHJpbmcgcmVmZXJlbmNlU291cmNlLCBpbnQgcmVmZXJlbmNlT2Zmc2V0KSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlQ29tbWVudFJlZmVyZW5jZVRleHQocmVmZXJlbmNlU291cmNlLCByZWZlcmVuY2VPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVDb25kaXRpb25hbEV4cHJlc3Npb25Db2xvbigpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVDb25kaXRpb25hbEV4cHJlc3Npb25Db2xvbigpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVDb250aW51ZVN0YXRlbWVudCgKICAgICAgYm9vbCBoYXNUYXJnZXQsIFRva2VuIGNvbnRpbnVlS2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVDb250aW51ZVN0YXRlbWVudChoYXNUYXJnZXQsIGNvbnRpbnVlS2V5d29yZCwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVEaXJlY3RpdmVzT25seSgpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVEaXJlY3RpdmVzT25seSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVEb3R0ZWROYW1lKGludCBjb3VudCwgVG9rZW4gZmlyc3RJZGVudGlmaWVyKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlRG90dGVkTmFtZShjb3VudCwgZmlyc3RJZGVudGlmaWVyKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRWxzZUNvbnRyb2xGbG93KFRva2VuIGVsc2VUb2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUVsc2VDb250cm9sRmxvdyhlbHNlVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVFbXB0eUZ1bmN0aW9uQm9keShUb2tlbiBzZW1pY29sb24pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVFbXB0eUZ1bmN0aW9uQm9keShzZW1pY29sb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVFbXB0eVN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUVtcHR5U3RhdGVtZW50KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRXJyb3JUb2tlbihFcnJvclRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlRXJyb3JUb2tlbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUV4cHJlc3Npb25GdW5jdGlvbkJvZHkoVG9rZW4gYXJyb3dUb2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVFeHByZXNzaW9uRnVuY3Rpb25Cb2R5KGFycm93VG9rZW4sIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRXhwcmVzc2lvblN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUV4cHJlc3Npb25TdGF0ZW1lbnQodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVFeHRyYW5lb3VzRXhwcmVzc2lvbihUb2tlbiB0b2tlbiwgTWVzc2FnZSBtZXNzYWdlKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlRXh0cmFuZW91c0V4cHJlc3Npb24odG9rZW4sIG1lc3NhZ2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVGaW5hbGx5QmxvY2soVG9rZW4gZmluYWxseUtleXdvcmQpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVGaW5hbGx5QmxvY2soZmluYWxseUtleXdvcmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVGb3JJbml0aWFsaXplckVtcHR5U3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlRm9ySW5pdGlhbGl6ZXJFbXB0eVN0YXRlbWVudCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUZvckluaXRpYWxpemVyRXhwcmVzc2lvblN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUZvckluaXRpYWxpemVyRXhwcmVzc2lvblN0YXRlbWVudCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUZvckluaXRpYWxpemVyTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlRm9ySW5pdGlhbGl6ZXJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVGb3JJbkxvb3BQYXJ0cyhUb2tlbiBhd2FpdFRva2VuLCBUb2tlbiBmb3JUb2tlbiwKICAgICAgVG9rZW4gbGVmdFBhcmVudGhlc2lzLCBUb2tlbiBpbktleXdvcmQpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVGb3JJbkxvb3BQYXJ0cygKICAgICAgICBhd2FpdFRva2VuLCBmb3JUb2tlbiwgbGVmdFBhcmVudGhlc2lzLCBpbktleXdvcmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVGb3JMb29wUGFydHMoVG9rZW4gZm9yS2V5d29yZCwgVG9rZW4gbGVmdFBhcmVuLAogICAgICBUb2tlbiBsZWZ0U2VwYXJhdG9yLCBpbnQgdXBkYXRlRXhwcmVzc2lvbkNvdW50KSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlRm9yTG9vcFBhcnRzKAogICAgICAgIGZvcktleXdvcmQsIGxlZnRQYXJlbiwgbGVmdFNlcGFyYXRvciwgdXBkYXRlRXhwcmVzc2lvbkNvdW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRm9ybWFsUGFyYW1ldGVyV2l0aG91dFZhbHVlKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlRm9ybWFsUGFyYW1ldGVyV2l0aG91dFZhbHVlKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRnVuY3Rpb25Cb2R5U2tpcHBlZChUb2tlbiB0b2tlbiwgYm9vbCBpc0V4cHJlc3Npb25Cb2R5KSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlRnVuY3Rpb25Cb2R5U2tpcHBlZCh0b2tlbiwgaXNFeHByZXNzaW9uQm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIElkZW50aWZpZXJDb250ZXh0IGNvbnRleHQpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVJZGVudGlmaWVyKHRva2VuLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSWRlbnRpZmllckxpc3QoaW50IGNvdW50KSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlSWRlbnRpZmllckxpc3QoY291bnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJbXBvcnRQcmVmaXgoVG9rZW4gZGVmZXJyZWRLZXl3b3JkLCBUb2tlbiBhc0tleXdvcmQpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVJbXBvcnRQcmVmaXgoZGVmZXJyZWRLZXl3b3JkLCBhc0tleXdvcmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJbmRleGVkRXhwcmVzc2lvbigKICAgICAgVG9rZW4gb3BlblNxdWFyZUJyYWNrZXQsIFRva2VuIGNsb3NlU3F1YXJlQnJhY2tldCkgewogICAgbGlzdGVuZXI/LmhhbmRsZUluZGV4ZWRFeHByZXNzaW9uKG9wZW5TcXVhcmVCcmFja2V0LCBjbG9zZVNxdWFyZUJyYWNrZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJbnRlcnBvbGF0aW9uRXhwcmVzc2lvbihUb2tlbiBsZWZ0QnJhY2tldCwgVG9rZW4gcmlnaHRCcmFja2V0KSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlSW50ZXJwb2xhdGlvbkV4cHJlc3Npb24obGVmdEJyYWNrZXQsIHJpZ2h0QnJhY2tldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUludmFsaWRFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlSW52YWxpZEV4cHJlc3Npb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJbnZhbGlkRnVuY3Rpb25Cb2R5KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlSW52YWxpZEZ1bmN0aW9uQm9keSh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUludmFsaWRNZW1iZXIoVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVJbnZhbGlkTWVtYmVyKGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW52YWxpZE9wZXJhdG9yTmFtZShUb2tlbiBvcGVyYXRvcktleXdvcmQsIFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlSW52YWxpZE9wZXJhdG9yTmFtZShvcGVyYXRvcktleXdvcmQsIHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW52YWxpZFN0YXRlbWVudChUb2tlbiB0b2tlbiwgTWVzc2FnZSBtZXNzYWdlKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlSW52YWxpZFN0YXRlbWVudCh0b2tlbiwgbWVzc2FnZSk7CiAgfQoKICB2b2lkIGhhbmRsZUludmFsaWRUb3BMZXZlbEJsb2NrKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlSW52YWxpZFRvcExldmVsQmxvY2sodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJbnZhbGlkVG9wTGV2ZWxEZWNsYXJhdGlvbihUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUludmFsaWRUb3BMZXZlbERlY2xhcmF0aW9uKGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW52YWxpZFR5cGVBcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVJbnZhbGlkVHlwZUFyZ3VtZW50cyh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUludmFsaWRUeXBlUmVmZXJlbmNlKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlSW52YWxpZFR5cGVSZWZlcmVuY2UodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJc09wZXJhdG9yKFRva2VuIGlzT3BlcmF0b3IsIFRva2VuIG5vdCkgewogICAgbGlzdGVuZXI/LmhhbmRsZUlzT3BlcmF0b3IoaXNPcGVyYXRvciwgbm90KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTGFiZWwoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVMYWJlbCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUxpdGVyYWxCb29sKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTGl0ZXJhbEJvb2wodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVMaXRlcmFsRG91YmxlKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTGl0ZXJhbERvdWJsZSh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUxpdGVyYWxJbnQoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVMaXRlcmFsSW50KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTGl0ZXJhbExpc3QoCiAgICAgIGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gY29uc3RLZXl3b3JkLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUxpdGVyYWxMaXN0KGNvdW50LCBiZWdpblRva2VuLCBjb25zdEtleXdvcmQsIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTGl0ZXJhbE1hcEVudHJ5KFRva2VuIGNvbG9uLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUxpdGVyYWxNYXBFbnRyeShjb2xvbiwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVMaXRlcmFsTnVsbChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUxpdGVyYWxOdWxsKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTGl0ZXJhbFNldE9yTWFwKAogICAgaW50IGNvdW50LAogICAgVG9rZW4gbGVmdEJyYWNlLAogICAgVG9rZW4gY29uc3RLZXl3b3JkLAogICAgVG9rZW4gcmlnaHRCcmFjZSwKICAgIC8vIFRPRE8oZGFucnViZWwpOiBoYXNTZXRFbnRyeSBwYXJhbWV0ZXIgZXhpc3RzIGZvciByZXBsaWNhdGluZyBleGlzdGluZwogICAgLy8gYmVoYXZpb3IgYW5kIHdpbGwgYmUgcmVtb3ZlZCBvbmNlIHVuaWZpZWQgY29sbGVjdGlvbiBoYXMgYmVlbiBlbmFibGVkCiAgICBib29sIGhhc1NldEVudHJ5LAogICkgewogICAgbGlzdGVuZXI/LmhhbmRsZUxpdGVyYWxTZXRPck1hcCgKICAgICAgICBjb3VudCwgbGVmdEJyYWNlLCBjb25zdEtleXdvcmQsIHJpZ2h0QnJhY2UsIGhhc1NldEVudHJ5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTWl4aW5IZWFkZXIoVG9rZW4gbWl4aW5LZXl3b3JkKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTWl4aW5IZWFkZXIobWl4aW5LZXl3b3JkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTWl4aW5PbihUb2tlbiBvbktleXdvcmQsIGludCB0eXBlQ291bnQpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVNaXhpbk9uKG9uS2V5d29yZCwgdHlwZUNvdW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTmFtZWRBcmd1bWVudChUb2tlbiBjb2xvbikgewogICAgbGlzdGVuZXI/LmhhbmRsZU5hbWVkQXJndW1lbnQoY29sb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOYW1lZE1peGluQXBwbGljYXRpb25XaXRoQ2xhdXNlKFRva2VuIHdpdGhLZXl3b3JkKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTmFtZWRNaXhpbkFwcGxpY2F0aW9uV2l0aENsYXVzZSh3aXRoS2V5d29yZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5hdGl2ZUNsYXVzZShUb2tlbiBuYXRpdmVUb2tlbiwgYm9vbCBoYXNOYW1lKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTmF0aXZlQ2xhdXNlKG5hdGl2ZVRva2VuLCBoYXNOYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTmF0aXZlRnVuY3Rpb25Cb2R5KFRva2VuIG5hdGl2ZVRva2VuLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVOYXRpdmVGdW5jdGlvbkJvZHkobmF0aXZlVG9rZW4sIHNlbWljb2xvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keUlnbm9yZWQoVG9rZW4gbmF0aXZlVG9rZW4sIFRva2VuIHNlbWljb2xvbikgewogICAgbGlzdGVuZXI/LmhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keUlnbm9yZWQobmF0aXZlVG9rZW4sIHNlbWljb2xvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keVNraXBwZWQoVG9rZW4gbmF0aXZlVG9rZW4sIFRva2VuIHNlbWljb2xvbikgewogICAgbGlzdGVuZXI/LmhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keVNraXBwZWQobmF0aXZlVG9rZW4sIHNlbWljb2xvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vQXJndW1lbnRzKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTm9Bcmd1bWVudHModG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb0NvbW1lbnRSZWZlcmVuY2UoKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTm9Db21tZW50UmVmZXJlbmNlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vQ29uc3RydWN0b3JSZWZlcmVuY2VDb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVOb0NvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9GaWVsZEluaXRpYWxpemVyKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTm9GaWVsZEluaXRpYWxpemVyKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9Gb3JtYWxQYXJhbWV0ZXJzKFRva2VuIHRva2VuLCBNZW1iZXJLaW5kIGtpbmQpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVOb0Zvcm1hbFBhcmFtZXRlcnModG9rZW4sIGtpbmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb0Z1bmN0aW9uQm9keShUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZU5vRnVuY3Rpb25Cb2R5KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9Jbml0aWFsaXplcnMoKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTm9Jbml0aWFsaXplcnMoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9OYW1lKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTm9OYW1lKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9uTnVsbEFzc2VydEV4cHJlc3Npb24oVG9rZW4gYmFuZykgewogICAgbGlzdGVuZXI/LmhhbmRsZU5vbk51bGxBc3NlcnRFeHByZXNzaW9uKGJhbmcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb1R5cGUoVG9rZW4gbGFzdENvbnN1bWVkKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTm9UeXBlKGxhc3RDb25zdW1lZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vVHlwZUFyZ3VtZW50cyhUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZU5vVHlwZUFyZ3VtZW50cyh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vVHlwZVZhcmlhYmxlcyhUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZU5vVHlwZVZhcmlhYmxlcyh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vVmFyaWFibGVJbml0aWFsaXplcihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZU5vVmFyaWFibGVJbml0aWFsaXplcih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU9wZXJhdG9yKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlT3BlcmF0b3IodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVPcGVyYXRvck5hbWUoVG9rZW4gb3BlcmF0b3JLZXl3b3JkLCBUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZU9wZXJhdG9yTmFtZShvcGVyYXRvcktleXdvcmQsIHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlUGFyZW50aGVzaXplZENvbmRpdGlvbihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZVBhcmVudGhlc2l6ZWRDb25kaXRpb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVQYXJlbnRoZXNpemVkRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlUXVhbGlmaWVkKFRva2VuIHBlcmlvZCkgewogICAgbGlzdGVuZXI/LmhhbmRsZVF1YWxpZmllZChwZXJpb2QpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVSZWNvdmVyYWJsZUVycm9yKAogICAgICBNZXNzYWdlIG1lc3NhZ2UsIFRva2VuIHN0YXJ0VG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBpZiAoZm9yd2FyZEVycm9ycykgewogICAgICBsaXN0ZW5lcj8uaGFuZGxlUmVjb3ZlcmFibGVFcnJvcihtZXNzYWdlLCBzdGFydFRva2VuLCBlbmRUb2tlbik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVJlY292ZXJDbGFzc0hlYWRlcigpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVSZWNvdmVyQ2xhc3NIZWFkZXIoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlUmVjb3ZlckltcG9ydChUb2tlbiBzZW1pY29sb24pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVSZWNvdmVySW1wb3J0KHNlbWljb2xvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVJlY292ZXJNaXhpbkhlYWRlcigpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVSZWNvdmVyTWl4aW5IZWFkZXIoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU2NyaXB0KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlU2NyaXB0KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU2VuZChUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZVNlbmQoYmVnaW5Ub2tlbiwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVTcHJlYWRFeHByZXNzaW9uKFRva2VuIHNwcmVhZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlU3ByZWFkRXhwcmVzc2lvbihzcHJlYWRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVN0cmluZ0p1eHRhcG9zaXRpb24oaW50IGxpdGVyYWxDb3VudCkgewogICAgbGlzdGVuZXI/LmhhbmRsZVN0cmluZ0p1eHRhcG9zaXRpb24obGl0ZXJhbENvdW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3RyaW5nUGFydChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZVN0cmluZ1BhcnQodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVTdXBlckV4cHJlc3Npb24oVG9rZW4gdG9rZW4sIElkZW50aWZpZXJDb250ZXh0IGNvbnRleHQpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVTdXBlckV4cHJlc3Npb24odG9rZW4sIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVTeW1ib2xWb2lkKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlU3ltYm9sVm9pZCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVRoaXNFeHByZXNzaW9uKFRva2VuIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dCBjb250ZXh0KSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlVGhpc0V4cHJlc3Npb24odG9rZW4sIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVUaHJvd0V4cHJlc3Npb24oVG9rZW4gdGhyb3dUb2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVUaHJvd0V4cHJlc3Npb24odGhyb3dUb2tlbiwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVUeXBlKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIHF1ZXN0aW9uTWFyaykgewogICAgbGlzdGVuZXI/LmhhbmRsZVR5cGUoYmVnaW5Ub2tlbiwgcXVlc3Rpb25NYXJrKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVHlwZVZhcmlhYmxlc0RlZmluZWQoVG9rZW4gdG9rZW4sIGludCBjb3VudCkgewogICAgbGlzdGVuZXI/LmhhbmRsZVR5cGVWYXJpYWJsZXNEZWZpbmVkKHRva2VuLCBjb3VudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVVuYXJ5UG9zdGZpeEFzc2lnbm1lbnRFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlVW5hcnlQb3N0Zml4QXNzaWdubWVudEV4cHJlc3Npb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVVbmFyeVByZWZpeEFzc2lnbm1lbnRFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlVW5hcnlQcmVmaXhBc3NpZ25tZW50RXhwcmVzc2lvbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVVuYXJ5UHJlZml4RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZVVuYXJ5UHJlZml4RXhwcmVzc2lvbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVVuZXNjYXBlRXJyb3IoCiAgICAgIE1lc3NhZ2UgbWVzc2FnZSwgVG9rZW4gbG9jYXRpb24sIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVVbmVzY2FwZUVycm9yKG1lc3NhZ2UsIGxvY2F0aW9uLCBvZmZzZXQsIGxlbmd0aCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVZhbHVlZEZvcm1hbFBhcmFtZXRlcihUb2tlbiBlcXVhbHMsIFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlVmFsdWVkRm9ybWFsUGFyYW1ldGVyKGVxdWFscywgdG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBo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LyB3aXRob3V0IGFueSBjb250cm9sIGZsb3cgb3Igc3ByZWFkIGNvbGxlY3Rpb24gb3BlcmF0b3IuCmNvbnN0IExpdGVyYWxFbnRyeUluZm8gc2ltcGxlRW50cnkgPSBjb25zdCBMaXRlcmFsRW50cnlJbmZvKHRydWUsIDApOwoKLy8vIFtMaXRlcmFsRW50cnlJbmZvXSByZXByZXNlbnRzIHN0ZXBzIGZvciBwcm9jZXNzaW5nIGFuIGVudHJ5Ci8vLyBpbiBhIGxpdGVyYWwgbGlzdCwgbWFwLCBvciBzZXQuIFRoZXNlIHN0ZXBzIHdpbGwgaGFuZGxlIHBhcnNpbmcKLy8vIGJvdGggY29udHJvbCBmbG93IGFuZCBzcHJlYWRhYmxlIG9wZXJhdG9ycywgYW5kIGluZGljYXRlCi8vLyB3aGVuIHRoZSBjbGllbnQgc2hvdWxkIHBhcnNlIHRoZSBsaXRlcmFsIGVudHJ5LgovLy8KLy8vIENsaWVudHMgc2hvdWxkIHBhcnNlIGEgc2luZ2xlIGVudHJ5IGluIGEgbGlzdCwgc2V0LCBvciBtYXAgbGlrZSB0aGlzOgovLy8gYGBgCi8vLyAgICBMaXRlcmFsRW50cnlJbmZvIGluZm8gPSBjb21wdXRlTGl0ZXJhbEVudHJ5KHRva2VuKTsKLy8vICAgIHdoaWxlIChpbmZvICE9IG51bGwpIHsKLy8vICAgICAgaWYgKGluZm8uaGFzRW50cnkpIHsKLy8vICAgICAgICAuLi4gcGFyc2UgZXhwcmVzc2lvbiAoYDpgIGV4cHJlc3Npb24pPyAuLi4KLy8vICAgICAgICB0b2tlbiA9IGxhc3RDb25zdW1lZFRva2VuOwovLy8gICAgICB9IGVsc2UgewovLy8gICAgICAgIHRva2VuID0gaW5mby5wYXJzZSh0b2tlbiwgcGFyc2VyKTsKLy8vICAgICAgfQovLy8gICAgICBpbmZvID0gaW5mby5jb21wdXRlTmV4dCh0b2tlbik7Ci8vLyAgICB9Ci8vLyBgYGAKY2xhc3MgTGl0ZXJhbEVudHJ5SW5mbyB7CiAgLy8vIGB0cnVlYCBpZiBhbiBlbnRyeSBzaG91bGQgYmUgcGFyc2VkIGJ5IHRoZSBjYWxsZXIKICAvLy8gb3IgYGZhbHNlYCBpZiB0aGlzIG9iamVjdCdzIFtwYXJzZV0gbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQuCiAgZmluYWwgYm9vbCBoYXNFbnRyeTsKCiAgLy8vIFVzZWQgZm9yIHJlY292ZXJ5LCB0aGlzIGluZGljYXRlcwogIC8vLyArMSBmb3IgYW4gYGlmYCBjb25kaXRpb24gYW5kIC0xIGZvciBgZWxzZWAuCiAgZmluYWwgaW50IGlmQ29uZGl0aW9uRGVsdGE7CgogIGNvbnN0IExpdGVyYWxFbnRyeUluZm8odGhpcy5oYXNFbnRyeSwgdGhpcy5pZkNvbmRpdGlvbkRlbHRhKTsKCiAgLy8vIFBhcnNlIHRoZSBjb250cm9sIGZsb3cgYW5kIHNwcmVhZCBjb2xsZWN0aW9uIGFzcGVjdHMgb2YgdGhpcyBlbnRyeS4KICBUb2tlbiBwYXJzZShUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgdGhyb3cgaGFzRW50cnkKICAgICAgICA/ICdJbnRlcm5hbCBFcnJvcjogc2hvdWxkIG5vdCBjYWxsIHBhcnNlJwogICAgICAgIDogJ0ludGVybmFsIEVycm9yOiAkcnVudGltZVR5cGUgc2hvdWxkIGltcGxlbWVudCBwYXJzZSc7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbmV4dCBzdGVwIHdoZW4gcGFyc2luZyBhbiBlbnRyeSBvciBgbnVsbGAgaWYgbm9uZS4KICBMaXRlcmFsRW50cnlJbmZvIGNvbXB1dGVOZXh0KFRva2VuIHRva2VuKSA9PiBudWxsOwp9CgovLy8gQ29tcHV0ZSB0aGUgW0xpdGVyYWxFbnRyeUluZm9dIGZvciB0aGUgbGl0ZXJhbCBsaXN0LCBtYXAsIG9yIHNldCBlbnRyeS4KTGl0ZXJhbEVudHJ5SW5mbyBjb21wdXRlTGl0ZXJhbEVudHJ5KFRva2VuIHRva2VuKSB7CiAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgaWYgKG9wdGlvbmFsKCdpZicsIG5leHQpKSB7CiAgICByZXR1cm4gaWZDb25kaXRpb247CiAgfSBlbHNlIGlmIChvcHRpb25hbCgnZm9yJywgbmV4dCkgfHwKICAgICAgKG9wdGlvbmFsKCdhd2FpdCcsIG5leHQpICYmIG9wdGlvbmFsKCdmb3InLCBuZXh0Lm5leHQpKSkgewogICAgcmV0dXJuIG5ldyBGb3JDb25kaXRpb24oKTsKICB9IGVsc2UgaWYgKG9wdGlvbmFsKCcuLi4nLCBuZXh0KSB8fCBvcHRpb25hbCgnLi4uPycsIG5leHQpKSB7CiAgICByZXR1cm4gc3ByZWFkT3BlcmF0b3I7CiAgfQogIHJldHVybiBzaW1wbGVFbnRyeTsKfQoKLy8vIFJldHVybiBgdHJ1ZWAgaWYgdGhlIGdpdmVuIFt0b2tlbl0gc2hvdWxkIGJlIHRyZWF0ZWQgbGlrZSB0aGUgc3RhcnQgb2YKLy8vIGEgbGl0ZXJhbCBlbnRyeSBpbiBhIGxpc3QsIHNldCwgb3IgbWFwIGZvciB0aGUgcHVycG9zZXMgb2YgcmVjb3ZlcnkuCmJvb2wgbG9va3NMaWtlTGl0ZXJhbEVudHJ5KFRva2VuIHRva2VuKSA9PgogICAgbG9va3NMaWtlRXhwcmVzc2lvblN0YXJ0KHRva2VuKSB8fAogICAgb3B0aW9uYWwoJy4uLicsIHRva2VuKSB8fAogICAgb3B0aW9uYWwoJy4uLj8nLCB0b2tlbikgfHwKICAgIG9wdGlvbmFsKCdpZicsIHRva2VuKSB8fAogICAgb3B0aW9uYWwoJ2ZvcicsIHRva2VuKSB8fAogICAgKG9wdGlvbmFsKCdhd2FpdCcsIHRva2VuKSAmJiBvcHRpb25hbCgnZm9yJywgdG9rZW4ubmV4dCkpOwpPAE1OPAEaIicWFAFAPEYBQEQ9NARKCDseHjYmEi4LKQkIGThDFwEoMh4BQAFKLBMyQQQBRTUCAUw0Gx4YJkEfQBsEFgIBS0krJx4fHR4/ATpwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL2xpdGVyYWxfZW50cnlfaW5mby5kYXJ0O3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9wYXJzZXIvbG9vcF9zdGF0ZS5kYXJ0gYUvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5wYXJzZXIubG9vcF9zdGF0ZTsKCmVudW0gTG9vcFN0YXRlIHsKICBPdXRzaWRlTG9vcCwKICBJbnNpZGVTd2l0Y2gsIC8vIGBicmVha2Agc3RhdGVtZW50IGFsbG93ZWQKICBJbnNpZGVMb29wLCAvLyBgYnJlYWtgIGFuZCBgY29udGludWVgIHN0YXRlbWVudHMgYWxsb3dlZAp9Cg0ATk48ASEBEQ8tOwIBMnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvbG9vcF9zdGF0ZS5kYXJ0QXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9wYXJzZXIvbW9kaWZpZXJfY29udGV4dC5kYXJ0u7wvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgS2V5d29yZCwgVG9rZW47CmltcG9ydCAnLi4vbWVzc2FnZXMuZGFydCcgYXMgZmFzdGE7CmltcG9ydCAnZm9ybWFsX3BhcmFtZXRlcl9raW5kLmRhcnQnOwppbXBvcnQgJ21lbWJlcl9raW5kLmRhcnQnIHNob3cgTWVtYmVyS2luZDsKaW1wb3J0ICdwYXJzZXIuZGFydCcgc2hvdyBQYXJzZXI7CmltcG9ydCAndXRpbC5kYXJ0JyBzaG93IG9wdGlvbmFsOwoKYm9vbCBpc01vZGlmaWVyKFRva2VuIHRva2VuKSB7CiAgaWYgKCF0b2tlbi5pc01vZGlmaWVyKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfSBlbHNlIGlmICh0b2tlbi50eXBlLmlzQnVpbHRJbikgewogICAgLy8gQSBidWlsdC1pbiBrZXl3b3JkIGNhbiBvbmx5IGJlIGEgbW9kaWZpZXIgYXMgbG9uZyBhcyBpdCBpcwogICAgLy8gZm9sbG93ZWQgYnkgYW5vdGhlciBrZXl3b3JkIG9yIGFuIGlkZW50aWZpZXIuIE90aGVyd2lzZSwgaXQgaXMgdGhlCiAgICAvLyBpZGVudGlmaWVyLgogICAgLy8KICAgIC8vIEZvciBleGFtcGxlLCBgZXh0ZXJuYWxgIGlzIGEgbW9kaWZpZXIgaW4gdGhpcyBkZWNsYXJhdGlvbjoKICAgIC8vICAgZXh0ZXJuYWwgRm9vIGZvbygpOwogICAgLy8gYnV0IGlzIHRoZSBpZGVudGlmaWVyIGluIHRoaXMgZGVjbGFyYXRpb24KICAgIC8vICAgZXh0ZXJuYWwoKSA9PiB0cnVlOwogICAgLy8gYW5kIGluCiAgICAvLyAgIGZvciAoZmluYWwgZXh0ZXJuYWwgaW4gbGlzdCkgeyB9CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIEtleXdvcmQga2V5d29yZCA9IG5leHQua2V5d29yZDsKICAgIGlmIChrZXl3b3JkID09IG51bGwgJiYgIW5leHQuaXNJZGVudGlmaWVyIHx8IGtleXdvcmQgPT0gS2V5d29yZC5JTikgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQogIHJldHVybiB0cnVlOwp9CgovLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHBhcnNlIG1vZGlmaWVycyBpbiBtb3N0IGxvY2F0aW9ucyB3aGVyZSBtb2RpZmllcnMKLy8vIGNhbiBvY2N1ciwgYnV0IGRvZXMgbm90IGNhbGwgaGFuZGxlTW9kaWZpZXIgb3IgaGFuZGxlTW9kaWZpZXJzLgpjbGFzcyBNb2RpZmllclJlY292ZXJ5Q29udGV4dCB7CiAgZmluYWwgUGFyc2VyIHBhcnNlcjsKICBUb2tlbiBhYnN0cmFjdFRva2VuOwogIFRva2VuIGNvbnN0VG9rZW47CiAgVG9rZW4gY292YXJpYW50VG9rZW47CiAgVG9rZW4gZXh0ZXJuYWxUb2tlbjsKICBUb2tlbiBmaW5hbFRva2VuOwogIFRva2VuIGxhdGVUb2tlbjsKICBUb2tlbiByZXF1aXJlZFRva2VuOwogIFRva2VuIHN0YXRpY1Rva2VuOwogIFRva2VuIHZhclRva2VuOwoKICAvLyBTZXQgYHRydWVgIHdoZW4gcGFyc2luZyBtb2RpZmllcnMgYWZ0ZXIgdGhlIGBmYWN0b3J5YCB0b2tlbi4KICBib29sIGFmdGVyRmFjdG9yeSA9IGZhbHNlOwoKICAvLyBUT0RPKGRhbnJ1YmVsKTogUmVwbGFjZSBbTW9kaWZpZXJSZWNvdmVyeUNvbnRleHRdIGFuZCBbTW9kaWZpZXJDb250ZXh0XQogIC8vIHdpdGggdGhpcyBjbGFzcy4KCiAgTW9kaWZpZXJSZWNvdmVyeUNvbnRleHQodGhpcy5wYXJzZXIpOwoKICBzZXQgc3RhdGljT3JDb3ZhcmlhbnQoVG9rZW4gc3RhdGljT3JDb3ZhcmlhbnQpIHsKICAgIGlmIChzdGF0aWNPckNvdmFyaWFudCA9PSBudWxsKSB7CiAgICAgIGNvdmFyaWFudFRva2VuID0gbnVsbDsKICAgICAgc3RhdGljVG9rZW4gPSBudWxsOwogICAgfSBlbHNlIGlmIChvcHRpb25hbCgnY292YXJpYW50Jywgc3RhdGljT3JDb3ZhcmlhbnQpKSB7CiAgICAgIGNvdmFyaWFudFRva2VuID0gc3RhdGljT3JDb3ZhcmlhbnQ7CiAgICAgIHN0YXRpY1Rva2VuID0gbnVsbDsKICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ3N0YXRpYycsIHN0YXRpY09yQ292YXJpYW50KSkgewogICAgICBjb3ZhcmlhbnRUb2tlbiA9IG51bGw7CiAgICAgIHN0YXRpY1Rva2VuID0gc3RhdGljT3JDb3ZhcmlhbnQ7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyAiSW50ZXJuYWwgZXJyb3I6ICIKICAgICAgICAgICJVbmV4cGVjdGVkIHN0YXRpY09yQ292YXJpYW50ICckc3RhdGljT3JDb3ZhcmlhbnQnLiI7CiAgICB9CiAgfQoKICBUb2tlbiBnZXQgdmFyRmluYWxPckNvbnN0ID0+IHZhclRva2VuID8/IGZpbmFsVG9rZW4gPz8gY29uc3RUb2tlbjsKCiAgc2V0IHZhckZpbmFsT3JDb25zdChUb2tlbiB2YXJGaW5hbE9yQ29uc3QpIHsKICAgIGlmICh2YXJGaW5hbE9yQ29uc3QgPT0gbnVsbCkgewogICAgICB2YXJUb2tlbiA9IG51bGw7CiAgICAgIGZpbmFsVG9rZW4gPSBudWxsOwogICAgICBjb25zdFRva2VuID0gbnVsbDsKICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ3ZhcicsIHZhckZpbmFsT3JDb25zdCkpIHsKICAgICAgdmFyVG9rZW4gPSB2YXJGaW5hbE9yQ29uc3Q7CiAgICAgIGZpbmFsVG9rZW4gPSBudWxsOwogICAgICBjb25zdFRva2VuID0gbnVsbDsKICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ2ZpbmFsJywgdmFyRmluYWxPckNvbnN0KSkgewogICAgICB2YXJUb2tlbiA9IG51bGw7CiAgICAgIGZpbmFsVG9rZW4gPSB2YXJGaW5hbE9yQ29uc3Q7CiAgICAgIGNvbnN0VG9rZW4gPSBudWxsOwogICAgfSBlbHNlIGlmIChvcHRpb25hbCgnY29uc3QnLCB2YXJGaW5hbE9yQ29uc3QpKSB7CiAgICAgIHZhclRva2VuID0gbnVsbDsKICAgICAgZmluYWxUb2tlbiA9IG51bGw7CiAgICAgIGNvbnN0VG9rZW4gPSB2YXJGaW5hbE9yQ29uc3Q7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyAiSW50ZXJuYWwgZXJyb3I6IFVuZXhwZWN0ZWQgdmFyRmluYWxPckNvbnN0ICckdmFyRmluYWxPckNvbnN0Jy4iOwogICAgfQogIH0KCiAgLy8vIFBhcnNlIG1vZGlmaWVycyBmb3IgY2xhc3MgbWV0aG9kcyBhbmQgZmllbGRzLgogIFRva2VuIHBhcnNlQ2xhc3NNZW1iZXJNb2RpZmllcnMoVG9rZW4gdG9rZW4pIHsKICAgIHRva2VuID0gcGFyc2VNb2RpZmllcnModG9rZW4pOwogICAgaWYgKGFic3RyYWN0VG9rZW4gIT0gbnVsbCkgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgIGFic3RyYWN0VG9rZW4sIGZhc3RhLm1lc3NhZ2VBYnN0cmFjdENsYXNzTWVtYmVyKTsKICAgIH0KICAgIHJlcG9ydEV4dHJhbmVvdXNNb2RpZmllcihyZXF1aXJlZFRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBQYXJzZSBtb2RpZmllcnMgZm9yIGZvcm1hbCBwYXJhbWV0ZXJzLgogIFRva2VuIHBhcnNlRm9ybWFsUGFyYW1ldGVyTW9kaWZpZXJzKAogICAgICBUb2tlbiB0b2tlbiwgRm9ybWFsUGFyYW1ldGVyS2luZCBwYXJhbWV0ZXJLaW5kLCBNZW1iZXJLaW5kIG1lbWJlcktpbmQpIHsKICAgIHRva2VuID0gcGFyc2VNb2RpZmllcnModG9rZW4pOwoKICAgIGlmIChwYXJhbWV0ZXJLaW5kICE9IEZvcm1hbFBhcmFtZXRlcktpbmQub3B0aW9uYWxOYW1lZCkgewogICAgICByZXBvcnRFeHRyYW5lb3VzTW9kaWZpZXIocmVxdWlyZWRUb2tlbik7CiAgICB9CiAgICBpZiAobWVtYmVyS2luZCA9PSBNZW1iZXJLaW5kLlN0YXRpY01ldGhvZCB8fAogICAgICAgIG1lbWJlcktpbmQgPT0gTWVtYmVyS2luZC5Ub3BMZXZlbE1ldGhvZCkgewogICAgICByZXBvcnRFeHRyYW5lb3VzTW9kaWZpZXIodGhpcy5jb3ZhcmlhbnRUb2tlbik7CiAgICAgIHRoaXMuY292YXJpYW50VG9rZW4gPSBudWxsOwogICAgfQogICAgaWYgKGNvbnN0VG9rZW4gIT0gbnVsbCkgewogICAgICByZXBvcnRFeHRyYW5lb3VzTW9kaWZpZXIoY29uc3RUb2tlbik7CiAgICB9IGVsc2UgaWYgKG1lbWJlcktpbmQgPT0gTWVtYmVyS2luZC5HZW5lcmFsaXplZEZ1bmN0aW9uVHlwZSkgewogICAgICBpZiAodmFyRmluYWxPckNvbnN0ICE9IG51bGwpIHsKICAgICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgdmFyRmluYWxPckNvbnN0LCBmYXN0YS5tZXNzYWdlRnVuY3Rpb25UeXBlZFBhcmFtZXRlclZhcik7CiAgICAgIH0KICAgIH0KICAgIHJlcG9ydEV4dHJhbmVvdXNNb2RpZmllcihhYnN0cmFjdFRva2VuKTsKICAgIHJlcG9ydEV4dHJhbmVvdXNNb2RpZmllcihleHRlcm5hbFRva2VuKTsKICAgIHJlcG9ydEV4dHJhbmVvdXNNb2RpZmllcihsYXRlVG9rZW4pOwogICAgcmVwb3J0RXh0cmFuZW91c01vZGlmaWVyKHN0YXRpY1Rva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBQYXJzZSBtb2RpZmllcnMgYWZ0ZXIgdGhlIGBmYWN0b3J5YCB0b2tlbi4KICBUb2tlbiBwYXJzZU1vZGlmaWVyc0FmdGVyRmFjdG9yeShUb2tlbiB0b2tlbikgewogICAgYWZ0ZXJGYWN0b3J5ID0gdHJ1ZTsKICAgIHRva2VuID0gcGFyc2VNb2RpZmllcnModG9rZW4pOwogICAgaWYgKGFic3RyYWN0VG9rZW4gIT0gbnVsbCkgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgIGFic3RyYWN0VG9rZW4sIGZhc3RhLm1lc3NhZ2VBYnN0cmFjdENsYXNzTWVtYmVyKTsKICAgIH0KICAgIHJlcG9ydEV4dHJhbmVvdXNNb2RpZmllcihsYXRlVG9rZW4pOwogICAgcmVwb3J0RXh0cmFuZW91c01vZGlmaWVyKHJlcXVpcmVkVG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIFBhcnNlIG1vZGlmaWVycyBmb3IgdG9wIGxldmVsIGZ1bmN0aW9ucyBhbmQgZmllbGRzLgogIFRva2VuIHBhcnNlVG9wTGV2ZWxNb2RpZmllcnMoVG9rZW4gdG9rZW4pIHsKICAgIHRva2VuID0gcGFyc2VNb2RpZmllcnModG9rZW4pOwogICAgcmVwb3J0RXh0cmFuZW91c01vZGlmaWVyKGFic3RyYWN0VG9rZW4pOwogICAgcmVwb3J0RXh0cmFuZW91c01vZGlmaWVyKGNvdmFyaWFudFRva2VuKTsKICAgIHJlcG9ydEV4dHJhbmVvdXNNb2RpZmllcihyZXF1aXJlZFRva2VuKTsKICAgIHJlcG9ydEV4dHJhbmVvdXNNb2RpZmllcihzdGF0aWNUb2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gUGFyc2UgbW9kaWZpZXJzIGZvciB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuCiAgVG9rZW4gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTW9kaWZpZXJzKFRva2VuIHRva2VuKSB7CiAgICB0b2tlbiA9IHBhcnNlTW9kaWZpZXJzKHRva2VuKTsKICAgIHJlcG9ydEV4dHJhbmVvdXNNb2RpZmllcihhYnN0cmFjdFRva2VuKTsKICAgIHJlcG9ydEV4dHJhbmVvdXNNb2RpZmllcihjb3ZhcmlhbnRUb2tlbik7CiAgICByZXBvcnRFeHRyYW5lb3VzTW9kaWZpZXIoZXh0ZXJuYWxUb2tlbik7CiAgICByZXBvcnRFeHRyYW5lb3VzTW9kaWZpZXIocmVxdWlyZWRUb2tlbik7CiAgICByZXBvcnRFeHRyYW5lb3VzTW9kaWZpZXIoc3RhdGljVG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIFBhcnNlIG1vZGlmaWVycyBkdXJpbmcgcmVjb3Zlcnkgd2hlbiBtb2RpZmllcnMgYXJlIG91dCBvZiBvcmRlcgogIC8vLyBvciBpbnZhbGlkLiBUeXBpY2FsbHkgY2xpZW50cyBjYWxsIG1ldGhvZHMgbGlrZQogIC8vLyBbcGFyc2VDbGFzc01lbWJlck1vZGlmaWVyc10gd2hpY2ggaW4gdHVybiBjYWxscyB0aGlzIG1ldGhvZCwKICAvLy8gcmF0aGVyIHRoYW4gY2FsbGluZyB0aGlzIG1ldGhvZCBkaXJlY3RseS4KICAvLy8KICAvLy8gVGhlIHZhcmlvdXMgbW9kaWZpZXIgdG9rZW4gcGFyYW1ldGVycyByZXByZXNlbnQgdG9rZW5zIG9mIG1vZGlmaWVycwogIC8vLyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHBhcnNlZCBwcmlvciB0byByZWNvdmVyeS4gVGhlIFtzdGF0aWNPckNvdmFyaWFudF0KICAvLy8gcGFyYW1ldGVyIGlzIGZvciBjb252ZW5pZW5jZSBpZiBjYWxsZXIgaGFzIGEgdG9rZW4gdGhhdCBtYXkgYmUgZWl0aGVyCiAgLy8vIGBzdGF0aWNgIG9yIGBjb3ZhcmlhbnRgLiBUaGUgZmlyc3Qgbm9uLW51bGwgcGFyYW1ldGVyIG9mCiAgLy8vIFtzdGF0aWNPckNvdmFyaWFudF0sIFtzdGF0aWNUb2tlbl0sIG9yIFtjb3ZhcmlhbnRUb2tlbl0gd2lsbCBiZSB1c2VkLAogIC8vLyBpbiB0aGF0IG9yZGVyLCBhbmQgdGhlIG90aGVycyBpZ25vcmVkLgogIFRva2VuIHBhcnNlTW9kaWZpZXJzKFRva2VuIHRva2VuKSB7CiAgICAvLyBQcm9jZXNzIGludmFsaWQgYW5kIG91dC1vZi1vcmRlciBtb2RpZmllcnMKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgZmluYWwgU3RyaW5nIHZhbHVlID0gbmV4dC5zdHJpbmdWYWx1ZTsKICAgICAgaWYgKGlzTW9kaWZpZXIobmV4dCkpIHsKICAgICAgICBpZiAoaWRlbnRpY2FsKCdhYnN0cmFjdCcsIHZhbHVlKSkgewogICAgICAgICAgdG9rZW4gPSBwYXJzZUFic3RyYWN0KHRva2VuKTsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgnY29uc3QnLCB2YWx1ZSkpIHsKICAgICAgICAgIHRva2VuID0gcGFyc2VDb25zdCh0b2tlbik7CiAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwoJ2NvdmFyaWFudCcsIHZhbHVlKSkgewogICAgICAgICAgdG9rZW4gPSBwYXJzZUNvdmFyaWFudCh0b2tlbik7CiAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwoJ2V4dGVybmFsJywgdmFsdWUpKSB7CiAgICAgICAgICB0b2tlbiA9IHBhcnNlRXh0ZXJuYWwodG9rZW4pOwogICAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCdmaW5hbCcsIHZhbHVlKSkgewogICAgICAgICAgdG9rZW4gPSBwYXJzZUZpbmFsKHRva2VuKTsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgnbGF0ZScsIHZhbHVlKSkgewogICAgICAgICAgdG9rZW4gPSBwYXJzZUxhdGUodG9rZW4pOwogICAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCdyZXF1aXJlZCcsIHZhbHVlKSkgewogICAgICAgICAgdG9rZW4gPSBwYXJzZVJlcXVpcmVkKHRva2VuKTsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgnc3RhdGljJywgdmFsdWUpKSB7CiAgICAgICAgICB0b2tlbiA9IHBhcnNlU3RhdGljKHRva2VuKTsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgndmFyJywgdmFsdWUpKSB7CiAgICAgICAgICB0b2tlbiA9IHBhcnNlVmFyKHRva2VuKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgJ0ludGVybmFsIEVycm9yOiBVbmhhbmRsZWQgbW9kaWZpZXI6ICR2YWx1ZSc7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGFmdGVyRmFjdG9yeSAmJiBpZGVudGljYWwoJ2ZhY3RvcnknLCB2YWx1ZSkpIHsKICAgICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgICAgbmV4dCwgZmFzdGEudGVtcGxhdGVEdXBsaWNhdGVkTW9kaWZpZXIpOwogICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgfSBlbHNlIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlQWJzdHJhY3QoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdhYnN0cmFjdCcsIG5leHQpKTsKICAgIGlmIChhYnN0cmFjdFRva2VuID09IG51bGwpIHsKICAgICAgYWJzdHJhY3RUb2tlbiA9IG5leHQ7CiAgICAgIHJldHVybiBuZXh0OwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUR1cGxpY2F0ZWRNb2RpZmllcik7CiAgICByZXR1cm4gbmV4dDsKICB9CgogIFRva2VuIHBhcnNlQ29uc3QoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdjb25zdCcsIG5leHQpKTsKICAgIGlmICh2YXJGaW5hbE9yQ29uc3QgPT0gbnVsbCAmJiBjb3ZhcmlhbnRUb2tlbiA9PSBudWxsKSB7CiAgICAgIGNvbnN0VG9rZW4gPSBuZXh0OwoKICAgICAgaWYgKGFmdGVyRmFjdG9yeSkgewogICAgICAgIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihuZXh0LCAnZmFjdG9yeScpOwogICAgICB9IGVsc2UgaWYgKGxhdGVUb2tlbiAhPSBudWxsKSB7CiAgICAgICAgcmVwb3J0Q29uZmxpY3RpbmdNb2RpZmllcnMobmV4dCwgbGF0ZVRva2VuKTsKICAgICAgfQogICAgICByZXR1cm4gbmV4dDsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgaWYgKGNvbnN0VG9rZW4gIT0gbnVsbCkgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIG5leHQsIGZhc3RhLnRlbXBsYXRlRHVwbGljYXRlZE1vZGlmaWVyKTsKICAgIH0gZWxzZSBpZiAoY292YXJpYW50VG9rZW4gIT0gbnVsbCkgewogICAgICByZXBvcnRDb25mbGljdGluZ01vZGlmaWVycyhuZXh0LCBjb3ZhcmlhbnRUb2tlbik7CiAgICB9IGVsc2UgaWYgKGZpbmFsVG9rZW4gIT0gbnVsbCkgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlQ29uc3RBbmRGaW5hbCk7CiAgICB9IGVsc2UgaWYgKHZhclRva2VuICE9IG51bGwpIHsKICAgICAgcmVwb3J0Q29uZmxpY3RpbmdNb2RpZmllcnMobmV4dCwgdmFyVG9rZW4pOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgJ0ludGVybmFsIEVycm9yOiBVbmV4cGVjdGVkIHZhckZpbmFsT3JDb25zdDogJHZhckZpbmFsT3JDb25zdCc7CiAgICB9CiAgICByZXR1cm4gbmV4dDsKICB9CgogIFRva2VuIHBhcnNlQ292YXJpYW50KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnY292YXJpYW50JywgbmV4dCkpOwogICAgaWYgKGNvbnN0VG9rZW4gPT0gbnVsbCAmJgogICAgICAgIGNvdmFyaWFudFRva2VuID09IG51bGwgJiYKICAgICAgICBzdGF0aWNUb2tlbiA9PSBudWxsICYmCiAgICAgICAgIWFmdGVyRmFjdG9yeSkgewogICAgICBjb3ZhcmlhbnRUb2tlbiA9IG5leHQ7CgogICAgICBpZiAodmFyVG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihuZXh0LCB2YXJUb2tlbi5sZXhlbWUpOwogICAgICB9IGVsc2UgaWYgKGZpbmFsVG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihuZXh0LCBmaW5hbFRva2VuLmxleGVtZSk7CiAgICAgIH0gZWxzZSBpZiAobGF0ZVRva2VuICE9IG51bGwpIHsKICAgICAgICByZXBvcnRNb2RpZmllck91dE9mT3JkZXIobmV4dCwgbGF0ZVRva2VuLmxleGVtZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIGlmIChjb3ZhcmlhbnRUb2tlbiAhPSBudWxsKSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgbmV4dCwgZmFzdGEudGVtcGxhdGVEdXBsaWNhdGVkTW9kaWZpZXIpOwogICAgfSBlbHNlIGlmIChhZnRlckZhY3RvcnkpIHsKICAgICAgcmVwb3J0RXh0cmFuZW91c01vZGlmaWVyKG5leHQpOwogICAgfSBlbHNlIGlmIChjb25zdFRva2VuICE9IG51bGwpIHsKICAgICAgcmVwb3J0Q29uZmxpY3RpbmdNb2RpZmllcnMobmV4dCwgY29uc3RUb2tlbik7CiAgICB9IGVsc2UgaWYgKHN0YXRpY1Rva2VuICE9IG51bGwpIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IobmV4dCwgZmFzdGEubWVzc2FnZUNvdmFyaWFudEFuZFN0YXRpYyk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyAnSW50ZXJuYWwgRXJyb3I6IFVuaGFuZGxlZCByZWNvdmVyeTogJG5leHQnOwogICAgfQogICAgcmV0dXJuIG5leHQ7CiAgfQoKICBUb2tlbiBwYXJzZUV4dGVybmFsKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnZXh0ZXJuYWwnLCBuZXh0KSk7CiAgICBpZiAoZXh0ZXJuYWxUb2tlbiA9PSBudWxsKSB7CiAgICAgIGV4dGVybmFsVG9rZW4gPSBuZXh0OwoKICAgICAgaWYgKGFmdGVyRmFjdG9yeSkgewogICAgICAgIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihuZXh0LCAnZmFjdG9yeScpOwogICAgICB9IGVsc2UgaWYgKGNvbnN0VG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihuZXh0LCBjb25zdFRva2VuLmxleGVtZSk7CiAgICAgIH0gZWxzZSBpZiAoc3RhdGljVG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihuZXh0LCBzdGF0aWNUb2tlbi5sZXhlbWUpOwogICAgICB9IGVsc2UgaWYgKGxhdGVUb2tlbiAhPSBudWxsKSB7CiAgICAgICAgcmVwb3J0TW9kaWZpZXJPdXRPZk9yZGVyKG5leHQsIGxhdGVUb2tlbi5sZXhlbWUpOwogICAgICB9CiAgICAgIHJldHVybiBuZXh0OwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUR1cGxpY2F0ZWRNb2RpZmllcik7CiAgICByZXR1cm4gbmV4dDsKICB9CgogIFRva2VuIHBhcnNlRmluYWwoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdmaW5hbCcsIG5leHQpKTsKICAgIGlmICh2YXJGaW5hbE9yQ29uc3QgPT0gbnVsbCAmJiAhYWZ0ZXJGYWN0b3J5KSB7CiAgICAgIGZpbmFsVG9rZW4gPSBuZXh0OwogICAgICByZXR1cm4gbmV4dDsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgaWYgKGZpbmFsVG9rZW4gIT0gbnVsbCkgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIG5leHQsIGZhc3RhLnRlbXBsYXRlRHVwbGljYXRlZE1vZGlmaWVyKTsKICAgIH0gZWxzZSBpZiAoYWZ0ZXJGYWN0b3J5KSB7CiAgICAgIHJlcG9ydEV4dHJhbmVvdXNNb2RpZmllcihuZXh0KTsKICAgIH0gZWxzZSBpZiAoY29uc3RUb2tlbiAhPSBudWxsKSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VDb25zdEFuZEZpbmFsKTsKICAgIH0gZWxzZSBpZiAodmFyVG9rZW4gIT0gbnVsbCkgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlRmluYWxBbmRWYXIpOwogICAgfSBlbHNlIGlmIChsYXRlVG9rZW4gIT0gbnVsbCkgewogICAgICByZXBvcnRNb2RpZmllck91dE9mT3JkZXIobmV4dCwgbGF0ZVRva2VuLmxleGVtZSk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyAnSW50ZXJuYWwgRXJyb3I6IFVuZXhwZWN0ZWQgdmFyRmluYWxPckNvbnN0OiAkdmFyRmluYWxPckNvbnN0JzsKICAgIH0KICAgIHJldHVybiBuZXh0OwogIH0KCiAgVG9rZW4gcGFyc2VMYXRlKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnbGF0ZScsIG5leHQpKTsKICAgIGlmIChsYXRlVG9rZW4gPT0gbnVsbCkgewogICAgICBsYXRlVG9rZW4gPSBuZXh0OwoKICAgICAgaWYgKGNvbnN0VG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydENvbmZsaWN0aW5nTW9kaWZpZXJzKG5leHQsIGNvbnN0VG9rZW4pOwogICAgICB9IGVsc2UgaWYgKHZhclRva2VuICE9IG51bGwpIHsKICAgICAgICByZXBvcnRDb25mbGljdGluZ01vZGlmaWVycyhuZXh0LCB2YXJUb2tlbik7CiAgICAgIH0gZWxzZSBpZiAoZmluYWxUb2tlbiAhPSBudWxsKSB7CiAgICAgICAgcmVwb3J0TW9kaWZpZXJPdXRPZk9yZGVyKG5leHQsIGZpbmFsVG9rZW4ubGV4ZW1lKTsKICAgICAgfQogICAgICByZXR1cm4gbmV4dDsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgbmV4dCwgZmFzdGEudGVtcGxhdGVEdXBsaWNhdGVkTW9kaWZpZXIpOwogICAgcmV0dXJuIG5leHQ7CiAgfQoKICBUb2tlbiBwYXJzZVJlcXVpcmVkKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgncmVxdWlyZWQnLCBuZXh0KSk7CiAgICBpZiAocmVxdWlyZWRUb2tlbiA9PSBudWxsKSB7CiAgICAgIHJlcXVpcmVkVG9rZW4gPSBuZXh0OwoKICAgICAgaWYgKGNvbnN0VG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihyZXF1aXJlZFRva2VuLCBjb25zdFRva2VuLmxleGVtZSk7CiAgICAgIH0gZWxzZSBpZiAoY292YXJpYW50VG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihyZXF1aXJlZFRva2VuLCBjb3ZhcmlhbnRUb2tlbi5sZXhlbWUpOwogICAgICB9IGVsc2UgaWYgKGZpbmFsVG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihyZXF1aXJlZFRva2VuLCBmaW5hbFRva2VuLmxleGVtZSk7CiAgICAgIH0gZWxzZSBpZiAodmFyVG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihyZXF1aXJlZFRva2VuLCB2YXJUb2tlbi5sZXhlbWUpOwogICAgICB9CiAgICAgIHJldHVybiBuZXh0OwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUR1cGxpY2F0ZWRNb2RpZmllcik7CiAgICByZXR1cm4gbmV4dDsKICB9CgogIFRva2VuIHBhcnNlU3RhdGljKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnc3RhdGljJywgbmV4dCkpOwogICAgaWYgKGNvdmFyaWFudFRva2VuID09IG51bGwgJiYgc3RhdGljVG9rZW4gPT0gbnVsbCAmJiAhYWZ0ZXJGYWN0b3J5KSB7CiAgICAgIHN0YXRpY1Rva2VuID0gbmV4dDsKCiAgICAgIGlmIChjb25zdFRva2VuICE9IG51bGwpIHsKICAgICAgICByZXBvcnRNb2RpZmllck91dE9mT3JkZXIobmV4dCwgY29uc3RUb2tlbi5sZXhlbWUpOwogICAgICB9IGVsc2UgaWYgKGZpbmFsVG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihuZXh0LCBmaW5hbFRva2VuLmxleGVtZSk7CiAgICAgIH0gZWxzZSBpZiAodmFyVG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihuZXh0LCB2YXJUb2tlbi5sZXhlbWUpOwogICAgICB9IGVsc2UgaWYgKGxhdGVUb2tlbiAhPSBudWxsKSB7CiAgICAgICAgcmVwb3J0TW9kaWZpZXJPdXRPZk9yZGVyKG5leHQsIGxhdGVUb2tlbi5sZXhlbWUpOwogICAgICB9CiAgICAgIHJldHVybiBuZXh0OwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBpZiAoY292YXJpYW50VG9rZW4gIT0gbnVsbCkgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlQ292YXJpYW50QW5kU3RhdGljKTsKICAgIH0gZWxzZSBpZiAoc3RhdGljVG9rZW4gIT0gbnVsbCkgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIG5leHQsIGZhc3RhLnRlbXBsYXRlRHVwbGljYXRlZE1vZGlmaWVyKTsKICAgIH0gZWxzZSBpZiAoYWZ0ZXJGYWN0b3J5KSB7CiAgICAgIHJlcG9ydEV4dHJhbmVvdXNNb2RpZmllcihuZXh0KTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93ICdJbnRlcm5hbCBFcnJvcjogVW5oYW5kbGVkIHJlY292ZXJ5OiAkbmV4dCc7CiAgICB9CiAgICByZXR1cm4gbmV4dDsKICB9CgogIFRva2VuIHBhcnNlVmFyKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgndmFyJywgbmV4dCkpOwogICAgaWYgKHZhckZpbmFsT3JDb25zdCA9PSBudWxsICYmICFhZnRlckZhY3RvcnkpIHsKICAgICAgdmFyVG9rZW4gPSBuZXh0OwoKICAgICAgaWYgKGxhdGVUb2tlbiAhPSBudWxsKSB7CiAgICAgICAgcmVwb3J0Q29uZmxpY3RpbmdNb2RpZmllcnMobmV4dCwgbGF0ZVRva2VuKTsKICAgICAgfQogICAgICByZXR1cm4gbmV4dDsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgaWYgKHZhclRva2VuICE9IG51bGwpIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUR1cGxpY2F0ZWRNb2RpZmllcik7CiAgICB9IGVsc2UgaWYgKGFmdGVyRmFjdG9yeSkgewogICAgICByZXBvcnRFeHRyYW5lb3VzTW9kaWZpZXIobmV4dCk7CiAgICB9IGVsc2UgaWYgKGNvbnN0VG9rZW4gIT0gbnVsbCkgewogICAgICByZXBvcnRDb25mbGljdGluZ01vZGlmaWVycyhuZXh0LCBjb25zdFRva2VuKTsKICAgIH0gZWxzZSBpZiAoZmluYWxUb2tlbiAhPSBudWxsKSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VGaW5hbEFuZFZhcik7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyAnSW50ZXJuYWwgRXJyb3I6IFVuZXhwZWN0ZWQgdmFyRmluYWxPckNvbnN0OiAkdmFyRmluYWxPckNvbnN0JzsKICAgIH0KICAgIHJldHVybiBuZXh0OwogIH0KCiAgdm9pZCByZXBvcnRDb25mbGljdGluZ01vZGlmaWVycyhUb2tlbiBtb2RpZmllciwgVG9rZW4gZWFybGllck1vZGlmaWVyKSB7CiAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICBtb2RpZmllciwKICAgICAgICBmYXN0YS50ZW1wbGF0ZUNvbmZsaWN0aW5nTW9kaWZpZXJzCiAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKG1vZGlmaWVyLmxleGVtZSwgZWFybGllck1vZGlmaWVyLmxleGVtZSkpOwogIH0KCiAgdm9pZCByZXBvcnRFeHRyYW5lb3VzTW9kaWZpZXIoVG9rZW4gbW9kaWZpZXIpIHsKICAgIGlmIChtb2RpZmllciAhPSBudWxsKSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgbW9kaWZpZXIsIGZhc3RhLnRlbXBsYXRlRXh0cmFuZW91c01vZGlmaWVyKTsKICAgIH0KICB9CgogIHZvaWQgcmVwb3J0TW9kaWZpZXJPdXRPZk9yZGVyKFRva2VuIG1vZGlmaWVyLCBTdHJpbmcgYmVmb3JlTW9kaWZpZXIpIHsKICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgIG1vZGlmaWVyLAogICAgICAgIGZhc3RhLnRlbXBsYXRlTW9kaWZpZXJPdXRPZk9yZGVyCiAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKG1vZGlmaWVyLmxleGVtZSwgYmVmb3JlTW9kaWZpZXIpKTsKICB9Cn0Kgd0ATk48ATckJSsiIgEfGxIlQkoTB0IdMR0OKh0kShQGBA8CAUxEIBcXFBgXFBMXFRIBQh0BTRYBKAEzJR0aOyoaOB0nDR9ABgQBRQEvIxcZGTMiGRk1FyQZNRcZJA1OBgQBNDEjISU8Bi0SBAEtJ08jAT4vBjEzNSIGHixDJSdGCAYtLSkrEgQBMTIZIyElPAYpLRIEATouIy0uLSsSBAExOSMtLi0tKxIEAUY2QzAGSk9MP0wtJjIdEy0eLCgwJTQpMygwJS8kMygxJi4jET4KQDA1Fg8PCBkGEgQBJR0oIRwTBgEQLDERBAEiHSU9GQEaMyY1CBMGARAeLjMpOCVHIzINTAYRBAEmHSkeIh8ZHQEeOSc7JjoIEwYBECIuMx8mJTQmTA05BhEEASUdKCEcARozJzsoPCY6CBMGARAsMREEASIdJTQZEwYBEB4uMx8mJUcjRSQ4DUwGEQQBIR0kHRgBIDYlNCc7CBMGARAsMREEASUdKCEcASBEK0gnRCVCCBMGARAsMREEASMdJkoaASA7JzslOSY6CBMGARAiTCYuMx8mDTkGEQQBIB0jNBcBHzUIEwYBEBwuMx8mJTQlRQ1MBhEEAUsjEitGBAEyHC43BgQBSSMSKT4EAgE4cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9tb2RpZmllcl9jb250ZXh0LmRhcnRDc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3BhcnNlci9yZWNvdmVyeV9saXN0ZW5lcnMuZGFydInoLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JyBzaG93IFRva2VuOwoKaW1wb3J0ICdmb3J3YXJkaW5nX2xpc3RlbmVyLmRhcnQnIHNob3cgRm9yd2FyZGluZ0xpc3RlbmVyOwoKY2xhc3MgQ2xhc3NIZWFkZXJSZWNvdmVyeUxpc3RlbmVyIGV4dGVuZHMgRm9yd2FyZGluZ0xpc3RlbmVyIHsKICBUb2tlbiBleHRlbmRzS2V5d29yZDsKICBUb2tlbiBpbXBsZW1lbnRzS2V5d29yZDsKICBUb2tlbiB3aXRoS2V5d29yZDsKCiAgdm9pZCBjbGVhcigpIHsKICAgIGV4dGVuZHNLZXl3b3JkID0gbnVsbDsKICAgIGltcGxlbWVudHNLZXl3b3JkID0gbnVsbDsKICAgIHdpdGhLZXl3b3JkID0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2xhc3NFeHRlbmRzKFRva2VuIGV4dGVuZHNLZXl3b3JkKSB7CiAgICB0aGlzLmV4dGVuZHNLZXl3b3JkID0gZXh0ZW5kc0tleXdvcmQ7CiAgICBzdXBlci5oYW5kbGVDbGFzc0V4dGVuZHMoZXh0ZW5kc0tleXdvcmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVDbGFzc09yTWl4aW5JbXBsZW1lbnRzKAogICAgICBUb2tlbiBpbXBsZW1lbnRzS2V5d29yZCwgaW50IGludGVyZmFjZXNDb3VudCkgewogICAgdGhpcy5pbXBsZW1lbnRzS2V5d29yZCA9IGltcGxlbWVudHNLZXl3b3JkOwogICAgc3VwZXIuaGFuZGxlQ2xhc3NPck1peGluSW1wbGVtZW50cyhpbXBsZW1lbnRzS2V5d29yZCwgaW50ZXJmYWNlc0NvdW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2xhc3NXaXRoQ2xhdXNlKFRva2VuIHdpdGhLZXl3b3JkKSB7CiAgICB0aGlzLndpdGhLZXl3b3JkID0gd2l0aEtleXdvcmQ7CiAgICBzdXBlci5oYW5kbGVDbGFzc1dpdGhDbGF1c2Uod2l0aEtleXdvcmQpOwogIH0KfQoKY2xhc3MgSW1wb3J0UmVjb3ZlcnlMaXN0ZW5lciBleHRlbmRzIEZvcndhcmRpbmdMaXN0ZW5lciB7CiAgVG9rZW4gYXNLZXl3b3JkOwogIFRva2VuIGRlZmVycmVkS2V5d29yZDsKICBUb2tlbiBpZktleXdvcmQ7CiAgYm9vbCBoYXNDb21iaW5hdG9yID0gZmFsc2U7CgogIHZvaWQgY2xlYXIoKSB7CiAgICBhc0tleXdvcmQgPSBudWxsOwogICAgZGVmZXJyZWRLZXl3b3JkID0gbnVsbDsKICAgIGlmS2V5d29yZCA9IG51bGw7CiAgICBoYXNDb21iaW5hdG9yID0gZmFsc2U7CiAgfQoKICB2b2lkIGVuZENvbmRpdGlvbmFsVXJpKFRva2VuIGlmS2V5d29yZCwgVG9rZW4gbGVmdFBhcmVuLCBUb2tlbiBlcXVhbFNpZ24pIHsKICAgIHRoaXMuaWZLZXl3b3JkID0gaWZLZXl3b3JkOwogICAgc3VwZXIuZW5kQ29uZGl0aW9uYWxVcmkoaWZLZXl3b3JkLCBsZWZ0UGFyZW4sIGVxdWFsU2lnbik7CiAgfQoKICB2b2lkIGVuZEhpZGUoVG9rZW4gaGlkZUtleXdvcmQpIHsKICAgIHRoaXMuaGFzQ29tYmluYXRvciA9IHRydWU7CiAgICBzdXBlci5lbmRIaWRlKGhpZGVLZXl3b3JkKTsKICB9CgogIHZvaWQgZW5kU2hvdyhUb2tlbiBzaG93S2V5d29yZCkgewogICAgdGhpcy5oYXNDb21iaW5hdG9yID0gdHJ1ZTsKICAgIHN1cGVyLmVuZFNob3coc2hvd0tleXdvcmQpOwogIH0KCiAgdm9pZCBoYW5kbGVJbXBvcnRQcmVmaXgoVG9rZW4gZGVmZXJyZWRLZXl3b3JkLCBUb2tlbiBhc0tleXdvcmQpIHsKICAgIHRoaXMuZGVmZXJyZWRLZXl3b3JkID0gZGVmZXJyZWRLZXl3b3JkOwogICAgdGhpcy5hc0tleXdvcmQgPSBhc0tleXdvcmQ7CiAgICBzdXBlci5oYW5kbGVJbXBvcnRQcmVmaXgoZGVmZXJyZWRLZXl3b3JkLCBhc0tleXdvcmQpOwogIH0KfQoKY2xhc3MgTWl4aW5IZWFkZXJSZWNvdmVyeUxpc3RlbmVyIGV4dGVuZHMgRm9yd2FyZGluZ0xpc3RlbmVyIHsKICBUb2tlbiBvbktleXdvcmQ7CiAgVG9rZW4gaW1wbGVtZW50c0tleXdvcmQ7CgogIHZvaWQgY2xlYXIoKSB7CiAgICBvbktleXdvcmQgPSBudWxsOwogICAgaW1wbGVtZW50c0tleXdvcmQgPSBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVDbGFzc09yTWl4aW5JbXBsZW1lbnRzKAogICAgICBUb2tlbiBpbXBsZW1lbnRzS2V5d29yZCwgaW50IGludGVyZmFjZXNDb3VudCkgewogICAgdGhpcy5pbXBsZW1lbnRzS2V5d29yZCA9IGltcGxlbWVudHNLZXl3b3JkOwogICAgc3VwZXIuaGFuZGxlQ2xhc3NPck1peGluSW1wbGVtZW50cyhpbXBsZW1lbnRzS2V5d29yZCwgaW50ZXJmYWNlc0NvdW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTWl4aW5PbihUb2tlbiBvbktleXdvcmQsIGludCB0eXBlQ291bnQpIHsKICAgIHRoaXMub25LZXl3b3JkID0gb25LZXl3b3JkOwogICAgc3VwZXIuaGFuZGxlTWl4aW5PbihvbktleXdvcmQsIHR5cGVDb3VudCk7CiAgfQp9CmIATk48AS4BOwE/GBsVAREbHhgEAQwyKi4EAQwlNjBMBAEMMiQuBAIBOhMZEx4BERYcFhsEAU4gPgQBJB8gBAEkHyAEAUQsIDoEAgE/ExsBERYeBAEMJTYwTAQBDDcgLwQCATpwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL3JlY292ZXJ5X2xpc3RlbmVycy5kYXJ0RnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9wYXJzZXIvdG9rZW5fc3RyZWFtX3Jld3JpdGVyLmRhcnScxS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL3NjYW5uZXIvZXJyb3JfdG9rZW4uZGFydCcgc2hvdyBVbm1hdGNoZWRUb2tlbjsKCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JwogICAgc2hvdwogICAgICAgIEJlZ2luVG9rZW4sCiAgICAgICAgS2V5d29yZCwKICAgICAgICBTaW1wbGVUb2tlbiwKICAgICAgICBTeW50aGV0aWNCZWdpblRva2VuLAogICAgICAgIFN5bnRoZXRpY0tleXdvcmRUb2tlbiwKICAgICAgICBTeW50aGV0aWNTdHJpbmdUb2tlbiwKICAgICAgICBTeW50aGV0aWNUb2tlbiwKICAgICAgICBUb2tlbiwKICAgICAgICBUb2tlblR5cGU7CgovLy8gUHJvdmlkZXMgdGhlIGNhcGFiaWxpdHkgb2YgaW5zZXJ0aW5nIHRva2VucyBpbnRvIGEgdG9rZW4gc3RyZWFtLiBUaGlzCi8vLyBpbXBsZW1lbnRhdGlvbiBkb2VzIHRoaXMgYnkgcmV3cml0aW5nIHRoZSBwcmV2aW91cyB0b2tlbiB0byBwb2ludCB0byB0aGUKLy8vIGluc2VydGVkIHRva2VuLgpjbGFzcyBUb2tlblN0cmVhbVJld3JpdGVyIHdpdGggX1Rva2VuU3RyZWFtTWl4aW4gewogIC8vIFRPRE8oYnJpYW53aWxrZXJzb24pOgogIC8vCiAgLy8gV2hlbiB3ZSBnZXQgdG8gdGhlIHBvaW50IG9mIHJlbW92aW5nIGB0b2tlbi5wcmV2aW91c2AsIHRoZSBwbGFuIGlzIHRvCiAgLy8gY29udmVydCB0aGlzIGludG8gYW4gaW50ZXJmYWNlIGFuZCBwcm92aWRlIHR3byBpbXBsZW1lbnRhdGlvbnMuCiAgLy8KICAvLyBPbmUsIHVzZWQgYnkgRmFzdGEsIHdpbGwgY29ubmVjdCB0aGUgaW5zZXJ0ZWQgdG9rZW5zIHRvIHRoZSBmb2xsb3dpbmcgdG9rZW4KICAvLyB3aXRob3V0IG1vZGlmeWluZyB0aGUgcHJldmlvdXMgdG9rZW4uCiAgLy8KICAvLyBUaGUgb3RoZXIsIHVzZWQgYnkgJ2FuYWx5emVyJywgd2lsbCBiZSBjcmVhdGVkIHdpdGggdGhlIGZpcnN0IHRva2VuIGluIHRoZQogIC8vIHN0cmVhbSAoYWN0dWFsbHkgd2l0aCB0aGUgQk9GIG1hcmtlciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJlYW0pLiBJdAogIC8vIHdpbGwgYmUgY3JlYXRlZCBvbmx5IHdoZW4gaW52b2tpbmcgJ2FuYWx5emVyJyBzcGVjaWZpYyBwYXJzZSBtZXRob2RzIChpbgogIC8vIGBQYXJzZXJgKSwgc3VjaCBhcwogIC8vCiAgLy8gVG9rZW4gcGFyc2VVbml0V2l0aFJld3JpdGUoVG9rZW4gYm9mKSB7CiAgLy8gICByZXdyaXRlciA9IEFuYWx5emVyVG9rZW5TdHJlYW1SZXdyaXRlcihib2YpOwogIC8vICAgcmV0dXJuIHBhcnNlVW5pdChib2YubmV4dCk7CiAgLy8gfQogIC8vCgogIC8vLyBJbnNlcnQgYSBzeW50aGV0aWMgb3BlbiBhbmQgY2xvc2UgcGFyZW50aGVzaXMgYW5kIHJldHVybiB0aGUgbmV3IHN5bnRoZXRpYwogIC8vLyBvcGVuIHBhcmVudGhlc2lzLiBJZiBbaW5zZXJ0SWRlbnRpZmllcl0gaXMgdHJ1ZSwgdGhlbiBhIHN5bnRoZXRpYwogIC8vLyBpZGVudGlmaWVyIGlzIGluY2x1ZGVkIGJldHdlZW4gdGhlIG9wZW4gYW5kIGNsb3NlIHBhcmVudGhlc2lzLgogIFRva2VuIGluc2VydFBhcmVucyhUb2tlbiB0b2tlbiwgYm9vbCBpbmNsdWRlSWRlbnRpZmllcikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpbnQgb2Zmc2V0ID0gbmV4dC5jaGFyT2Zmc2V0OwogICAgQmVnaW5Ub2tlbiBsZWZ0UGFyZW4gPQogICAgICAgIG5leHQgPSBuZXcgU3ludGhldGljQmVnaW5Ub2tlbihUb2tlblR5cGUuT1BFTl9QQVJFTiwgb2Zmc2V0KTsKICAgIGlmIChpbmNsdWRlSWRlbnRpZmllcikgewogICAgICBuZXh0ID0gbmV4dC5zZXROZXh0KAogICAgICAgICAgbmV3IFN5bnRoZXRpY1N0cmluZ1Rva2VuKFRva2VuVHlwZS5JREVOVElGSUVSLCAnJywgb2Zmc2V0LCAwKSk7CiAgICB9CiAgICBuZXh0ID0gbmV4dC5zZXROZXh0KG5ldyBTeW50aGV0aWNUb2tlbihUb2tlblR5cGUuQ0xPU0VfUEFSRU4sIG9mZnNldCkpOwogICAgbGVmdFBhcmVuLmVuZEdyb3VwID0gbmV4dDsKICAgIG5leHQuc2V0TmV4dCh0b2tlbi5uZXh0KTsKCiAgICAvLyBBIG5vLW9wIHJld3JpdGVyIGNvdWxkIHNraXAgdGhpcyBzdGVwLgogICAgdG9rZW4uc2V0TmV4dChsZWZ0UGFyZW4pOwoKICAgIHJldHVybiBsZWZ0UGFyZW47CiAgfQoKICAvLy8gSW5zZXJ0IFtuZXdUb2tlbl0gYWZ0ZXIgW3Rva2VuXSBhbmQgcmV0dXJuIFtuZXdUb2tlbl0uCiAgVG9rZW4gaW5zZXJ0VG9rZW4oVG9rZW4gdG9rZW4sIFRva2VuIG5ld1Rva2VuKSB7CiAgICBuZXdUb2tlbi5zZXROZXh0KHRva2VuLm5leHQpOwoKICAgIC8vIEEgbm8tb3AgcmV3cml0ZXIgY291bGQgc2tpcCB0aGlzIHN0ZXAuCiAgICB0b2tlbi5zZXROZXh0KG5ld1Rva2VuKTsKCiAgICByZXR1cm4gbmV3VG9rZW47CiAgfQoKICAvLy8gTW92ZSBbZW5kR3JvdXBdIChhIHN5bnRoZXRpYyBgKWAsIGBdYCwgb3IgYH1gIHRva2VuKSBhbmQgYXNzb2NpYXRlZAogIC8vLyBlcnJvciB0b2tlbiBhZnRlciBbdG9rZW5dIGluIHRoZSB0b2tlbiBzdHJlYW0gYW5kIHJldHVybiBbZW5kR3JvdXBdLgogIFRva2VuIG1vdmVTeW50aGV0aWMoVG9rZW4gdG9rZW4sIFRva2VuIGVuZEdyb3VwKSB7CiAgICBhc3NlcnQoZW5kR3JvdXAuYmVmb3JlU3ludGhldGljICE9IG51bGwpOwogICAgVG9rZW4gZXJyb3JUb2tlbjsKICAgIGlmIChlbmRHcm91cC5uZXh0IGlzIFVubWF0Y2hlZFRva2VuKSB7CiAgICAgIGVycm9yVG9rZW4gPSBlbmRHcm91cC5uZXh0OwogICAgfQoKICAgIC8vIFJlbW92ZSBlbmRHcm91cCBmcm9tIGl0cyBjdXJyZW50IGxvY2F0aW9uCiAgICBlbmRHcm91cC5iZWZvcmVTeW50aGV0aWMuc2V0TmV4dCgoZXJyb3JUb2tlbiA/PyBlbmRHcm91cCkubmV4dCk7CgogICAgLy8gSW5zZXJ0IGVuZEdyb3VwIGludG8gaXRzIG5ldyBsb2NhdGlvbgogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICB0b2tlbi5zZXROZXh0KGVuZEdyb3VwKTsKICAgIChlcnJvclRva2VuID8/IGVuZEdyb3VwKS5zZXROZXh0KG5leHQpOwogICAgZW5kR3JvdXAub2Zmc2V0ID0gbmV4dC5vZmZzZXQ7CiAgICBpZiAoZXJyb3JUb2tlbiAhPSBudWxsKSB7CiAgICAgIGVycm9yVG9rZW4ub2Zmc2V0ID0gbmV4dC5vZmZzZXQ7CiAgICB9CgogICAgcmV0dXJuIGVuZEdyb3VwOwogIH0KCiAgLy8vIFJlcGxhY2UgdGhlIHNpbmdsZSB0b2tlbiBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIFtwcmV2aW91c1Rva2VuXSB3aXRoCiAgLy8vIHRoZSBjaGFpbiBvZiB0b2tlbnMgc3RhcnRpbmcgYXQgdGhlIFtyZXBsYWNlbWVudFRva2VuXS4gUmV0dXJuIHRoZQogIC8vLyBbcmVwbGFjZW1lbnRUb2tlbl0uCiAgVG9rZW4gcmVwbGFjZVRva2VuRm9sbG93aW5nKFRva2VuIHByZXZpb3VzVG9rZW4sIFRva2VuIHJlcGxhY2VtZW50VG9rZW4pIHsKICAgIFRva2VuIHJlcGxhY2VkVG9rZW4gPSBwcmV2aW91c1Rva2VuLm5leHQ7CiAgICBwcmV2aW91c1Rva2VuLnNldE5leHQocmVwbGFjZW1lbnRUb2tlbik7CgogICAgKHJlcGxhY2VtZW50VG9rZW4gYXMgU2ltcGxlVG9rZW4pLnByZWNlZGluZ0NvbW1lbnRzID0KICAgICAgICByZXBsYWNlZFRva2VuLnByZWNlZGluZ0NvbW1lbnRzOwoKICAgIF9sYXN0VG9rZW5JbkNoYWluKHJlcGxhY2VtZW50VG9rZW4pLnNldE5leHQocmVwbGFjZWRUb2tlbi5uZXh0KTsKCiAgICByZXR1cm4gcmVwbGFjZW1lbnRUb2tlbjsKICB9CgogIC8vLyBHaXZlbiB0aGUgW2ZpcnN0VG9rZW5dIGluIGEgY2hhaW4gb2YgdG9rZW5zIHRvIGJlIGluc2VydGVkLCByZXR1cm4gdGhlCiAgLy8vIGxhc3QgdG9rZW4gaW4gdGhlIGNoYWluLgogIC8vLwogIC8vLyBBcyBhIHNpZGUtZWZmZWN0LCB0aGlzIG1ldGhvZCBhbHNvIGVuc3VyZXMgdGhhdCB0aGUgdG9rZW5zIGluIHRoZSBjaGFpbgogIC8vLyBoYXZlIHRoZWlyIGBwcmV2aW91c2AgcG9pbnRlcnMgc2V0IGNvcnJlY3RseS4KICBUb2tlbiBfbGFzdFRva2VuSW5DaGFpbihUb2tlbiBmaXJzdFRva2VuKSB7CiAgICBUb2tlbiBwcmV2aW91czsKICAgIFRva2VuIGN1cnJlbnQgPSBmaXJzdFRva2VuOwogICAgd2hpbGUgKGN1cnJlbnQubmV4dCAhPSBudWxsICYmIGN1cnJlbnQubmV4dC50eXBlICE9IFRva2VuVHlwZS5FT0YpIHsKICAgICAgaWYgKHByZXZpb3VzICE9IG51bGwpIHsKICAgICAgICBjdXJyZW50LnByZXZpb3VzID0gcHJldmlvdXM7CiAgICAgIH0KICAgICAgcHJldmlvdXMgPSBjdXJyZW50OwogICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0OwogICAgfQogICAgaWYgKHByZXZpb3VzICE9IG51bGwpIHsKICAgICAgY3VycmVudC5wcmV2aW91cyA9IHByZXZpb3VzOwogICAgfQogICAgcmV0dXJuIGN1cnJlbnQ7CiAgfQp9CgovLy8gUHJvdmlkZXMgdGhlIGNhcGFiaWxpdHkgb2YgYWRkaW5nIHRva2VucyB0aGF0IGxlYWQgaW50byBhIHRva2VuIHN0cmVhbQovLy8gd2l0aG91dCBtb2RpZnlpbmcgdGhlIG9yaWdpbmFsIHRva2VuIHN0cmVhbSBhbmQgbm90IHNldHRpbmcgdGhlIGFueSB0b2tlbidzCi8vLyBgcHJldmlvdXNgIGZpZWxkLgpjbGFzcyBUb2tlblN0cmVhbUdob3N0V3JpdGVyCiAgICB3aXRoIF9Ub2tlblN0cmVhbU1peGluCiAgICBpbXBsZW1lbnRzIFRva2VuU3RyZWFtUmV3cml0ZXIgewogIEBvdmVycmlkZQogIFRva2VuIGluc2VydFBhcmVucyhUb2tlbiB0b2tlbiwgYm9vbCBpbmNsdWRlSWRlbnRpZmllcikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpbnQgb2Zmc2V0ID0gbmV4dC5jaGFyT2Zmc2V0OwogICAgQmVnaW5Ub2tlbiBsZWZ0UGFyZW4gPQogICAgICAgIG5leHQgPSBuZXcgU3ludGhldGljQmVnaW5Ub2tlbihUb2tlblR5cGUuT1BFTl9QQVJFTiwgb2Zmc2V0KTsKICAgIGlmIChpbmNsdWRlSWRlbnRpZmllcikgewogICAgICBUb2tlbiBpZGVudGlmaWVyID0KICAgICAgICAgIG5ldyBTeW50aGV0aWNTdHJpbmdUb2tlbihUb2tlblR5cGUuSURFTlRJRklFUiwgJycsIG9mZnNldCwgMCk7CiAgICAgIG5leHQubmV4dCA9IGlkZW50aWZpZXI7CiAgICAgIG5leHQgPSBpZGVudGlmaWVyOwogICAgfQogICAgVG9rZW4gcmlnaHRQYXJlbiA9IG5ldyBTeW50aGV0aWNUb2tlbihUb2tlblR5cGUuQ0xPU0VfUEFSRU4sIG9mZnNldCk7CiAgICBuZXh0Lm5leHQgPSByaWdodFBhcmVuOwogICAgcmlnaHRQYXJlbi5uZXh0ID0gdG9rZW4ubmV4dDsKCiAgICByZXR1cm4gbGVmdFBhcmVuOwogIH0KCiAgQG92ZXJyaWRlCiAgVG9rZW4gaW5zZXJ0VG9rZW4oVG9rZW4gdG9rZW4sIFRva2VuIG5ld1Rva2VuKSB7CiAgICBuZXdUb2tlbi5uZXh0ID0gdG9rZW4ubmV4dDsKICAgIHJldHVybiBuZXdUb2tlbjsKICB9CgogIEBvdmVycmlkZQogIFRva2VuIG1vdmVTeW50aGV0aWMoVG9rZW4gdG9rZW4sIFRva2VuIGVuZEdyb3VwKSB7CiAgICBUb2tlbiBuZXdFbmRHcm91cCA9CiAgICAgICAgbmV3IFN5bnRoZXRpY1Rva2VuKGVuZEdyb3VwLnR5cGUsIHRva2VuLm5leHQuY2hhck9mZnNldCk7CiAgICBuZXdFbmRHcm91cC5uZXh0ID0gdG9rZW4ubmV4dDsKICAgIHJldHVybiBuZXdFbmRHcm91cDsKICB9CgogIEBvdmVycmlkZQogIFRva2VuIHJlcGxhY2VUb2tlbkZvbGxvd2luZyhUb2tlbiBwcmV2aW91c1Rva2VuLCBUb2tlbiByZXBsYWNlbWVudFRva2VuKSB7CiAgICBUb2tlbiByZXBsYWNlZFRva2VuID0gcHJldmlvdXNUb2tlbi5uZXh0OwoKICAgIChyZXBsYWNlbWVudFRva2VuIGFzIFNpbXBsZVRva2VuKS5wcmVjZWRpbmdDb21tZW50cyA9CiAgICAgICAgcmVwbGFjZWRUb2tlbi5wcmVjZWRpbmdDb21tZW50czsKCiAgICBfbGFzdFRva2VuSW5DaGFpbihyZXBsYWNlbWVudFRva2VuKS5uZXh0ID0gcmVwbGFjZWRUb2tlbi5uZXh0OwogICAgcmV0dXJuIHJlcGxhY2VtZW50VG9rZW47CiAgfQoKICAvLy8gR2l2ZW4gdGhlIFtmaXJzdFRva2VuXSBpbiBhIGNoYWluIG9mIHRva2VucyB0byBiZSBpbnNlcnRlZCwgcmV0dXJuIHRoZQogIC8vLyBsYXN0IHRva2VuIGluIHRoZSBjaGFpbi4KICBUb2tlbiBfbGFzdFRva2VuSW5DaGFpbihUb2tlbiBmaXJzdFRva2VuKSB7CiAgICBUb2tlbiBjdXJyZW50ID0gZmlyc3RUb2tlbjsKICAgIHdoaWxlIChjdXJyZW50Lm5leHQgIT0gbnVsbCAmJiBjdXJyZW50Lm5leHQudHlwZSAhPSBUb2tlblR5cGUuRU9GKSB7CiAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7CiAgICB9CiAgICByZXR1cm4gY3VycmVudDsKICB9Cn0KCm1peGluIF9Ub2tlblN0cmVhbU1peGluIHsKICAvLy8gSW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgYWZ0ZXIgW3Rva2VuXSBhbmQgcmV0dXJuIHRoZSBuZXcgaWRlbnRpZmllci4KICBUb2tlbiBpbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKFRva2VuIHRva2VuLCBbU3RyaW5nIHZhbHVlXSkgewogICAgcmV0dXJuIGluc2VydFRva2VuKAogICAgICAgIHRva2VuLAogICAgICAgIG5ldyBTeW50aGV0aWNTdHJpbmdUb2tlbigKICAgICAgICAgICAgVG9rZW5UeXBlLklERU5USUZJRVIsIHZhbHVlID8/ICcnLCB0b2tlbi5uZXh0LmNoYXJPZmZzZXQsIDApKTsKICB9CgogIC8vLyBJbnNlcnQgYSBuZXcgc3ludGhldGljIFtrZXl3b3JkXSBhZnRlciBbdG9rZW5dIGFuZCByZXR1cm4gdGhlIG5ldyB0b2tlbi4KICBUb2tlbiBpbnNlcnRTeW50aGV0aWNLZXl3b3JkKFRva2VuIHRva2VuLCBLZXl3b3JkIGtleXdvcmQpID0+IGluc2VydFRva2VuKAogICAgICB0b2tlbiwgbmV3IFN5bnRoZXRpY0tleXdvcmRUb2tlbihrZXl3b3JkLCB0b2tlbi5uZXh0LmNoYXJPZmZzZXQpKTsKCiAgLy8vIEluc2VydCBhIG5ldyBzaW1wbGUgc3ludGhldGljIHRva2VuIG9mIFtuZXdUb2tlblR5cGVdIGFmdGVyIFt0b2tlbl0KICAvLy8gYW5kIHJldHVybiB0aGUgbmV3IHRva2VuLgogIFRva2VuIGluc2VydFN5bnRoZXRpY1Rva2VuKFRva2VuIHRva2VuLCBUb2tlblR5cGUgbmV3VG9rZW5UeXBlKSB7CiAgICBhc3NlcnQobmV3VG9rZW5UeXBlIGlzISBLZXl3b3JkLCAndXNlIGluc2VydFN5bnRoZXRpY0tleXdvcmQgaW5zdGVhZCcpOwogICAgcmV0dXJuIGluc2VydFRva2VuKAogICAgICAgIHRva2VuLCBuZXcgU3ludGhldGljVG9rZW4obmV3VG9rZW5UeXBlLCB0b2tlbi5uZXh0LmNoYXJPZmZzZXQpKTsKICB9CgogIC8vLyBJbnNlcnQgW25ld1Rva2VuXSBhZnRlciBbdG9rZW5dIGFuZCByZXR1cm4gW25ld1Rva2VuXS4KICBUb2tlbiBpbnNlcnRUb2tlbihUb2tlbiB0b2tlbiwgVG9rZW4gbmV3VG9rZW4pOwp9CoDdAE5OPAE6ASIJFBEVHR8eGA8TAUpNFDMbBUtFBVErBVBOThgFLTQjBwUBUUhFPB0iG0YdG0oGTB8eAS4eARYEAT0zIgEuHQEVBAFKSzUuFisiBgExRQEtHR0sIx4nBgEVBAFOSRpNLi0BOikBRQEdBAFNHwZONC4UIEkeJQgaHgYcIwYUBAIBS1AWHRslDDwdIhtGHRlJHhkGShwiARYEAQwzIBUEAQw1GEIjGAQBDE0uATopAUMdBAFNHy4gSR4GFAQCARpRQRgPIksEAU9NSQFKIERMGEkEAT0yAgE9cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci90b2tlbl9zdHJlYW1fcmV3cml0ZXIuZGFydDpzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvcGFyc2VyL3R5cGVfaW5mby5kYXJ0tNUvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5wYXJzZXIudHlwZV9pbmZvOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW4sIFRva2VuVHlwZTsKCmltcG9ydCAnLi4vc2Nhbm5lci90b2tlbl9jb25zdGFudHMuZGFydCcgc2hvdyBJREVOVElGSUVSX1RPS0VOLCBLRVlXT1JEX1RPS0VOOwoKaW1wb3J0ICdwYXJzZXIuZGFydCcgc2hvdyBQYXJzZXI7CgppbXBvcnQgJ3R5cGVfaW5mb19pbXBsLmRhcnQnOwoKaW1wb3J0ICd1dGlsLmRhcnQnIHNob3cgaXNPbmVPZiwgb3B0aW9uYWw7CgovLy8gW1R5cGVJbmZvXSBwcm92aWRlcyBpbmZvcm1hdGlvbiBjb2xsZWN0ZWQgYnkgW2NvbXB1dGVUeXBlXQovLy8gYWJvdXQgYSBwYXJ0aWN1bGFyIHR5cGUgcmVmZXJlbmNlLgphYnN0cmFjdCBjbGFzcyBUeXBlSW5mbyB7CiAgLy8vIFJldHVybiB0eXBlIGluZm8gcmVwcmVzZW50aW5nIHRoZSByZWNlaXZlciB3aXRob3V0IHRoZSB0cmFpbGluZyBgP2AKICAvLy8gb3IgdGhlIHJlY2VpdmVyIGlmIHRoZSByZWNlaXZlciBkb2VzIG5vdCByZXByZXNlbnQgYSBudWxsYWJsZSB0eXBlLgogIFR5cGVJbmZvIGdldCBhc05vbk51bGxhYmxlOwoKICAvLy8gUmV0dXJuIGB0cnVlYCBpZiB0aGUgdG9rZW5zIGNvbXByaXNpbmcgdGhlIHR5cGUgcmVwcmVzZW50ZWQgYnkgdGhlCiAgLy8vIHJlY2VpdmVyIGNvdWxkIGJlIGludGVycHJldGVkIGFzIGEgdmFsaWQgc3RhbmRhbG9uZSBleHByZXNzaW9uLgogIC8vLyBGb3IgZXhhbXBsZSwgYEFgIG9yIGBBLmJgIGNvdWxkIGJlIGludGVycHJldGVkIGFzIHR5cGUgcmVmZXJlbmNlcwogIC8vLyBvciBleHByZXNzaW9ucywgd2hpbGUgYEE8VD5gIG9ubHkgbG9va3MgbGlrZSBhIHR5cGUgcmVmZXJlbmNlLgogIGJvb2wgZ2V0IGNvdWxkQmVFeHByZXNzaW9uOwoKICAvLy8gUmV0dXJuIHRydWUgaWYgdGhlIHJlY2VpdmVyIGhhcyBhIHRyYWlsaW5nIGA/YC4KICBib29sIGdldCBpc051bGxhYmxlOwoKICAvLy8gQ2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gdGhlIHRva2VuIGFmdGVyIFt0b2tlbl0gbXVzdCBiZSBhIHR5cGUgKG5vdCB2b2lkKS4KICAvLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGNhbGwgdGhlIGFwcHJvcHJpYXRlIGV2ZW50IG1ldGhvZHMgb24gdGhlIFtQYXJzZXJdJ3MKICAvLy8gbGlzdGVuZXIgdG8gaGFuZGxlIHRoZSB0eXBlLCBpbnNlcnRpbmcgYSBzeW50aGV0aWMgdHlwZSByZWZlcmVuY2UgaWYKICAvLy8gbmVjZXNzYXJ5LiBUaGlzIG1heSBtb2RpZnkgdGhlIHRva2VuIHN0cmVhbSB3aGVuIHBhcnNpbmcgYD4+YCBvciBgPj4+YAogIC8vLyBvciBgPj4+PWAgaW4gdmFsaWQgY29kZSBvciBkdXJpbmcgcmVjb3ZlcnkuCiAgVG9rZW4gZW5zdXJlVHlwZU5vdFZvaWQoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpOwoKICAvLy8gQ2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gdGhlIHRva2VuIGFmdGVyIFt0b2tlbl0gbXVzdCBiZSBhIHR5cGUgb3Igdm9pZC4KICAvLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGNhbGwgdGhlIGFwcHJvcHJpYXRlIGV2ZW50IG1ldGhvZHMgb24gdGhlIFtQYXJzZXJdJ3MKICAvLy8gbGlzdGVuZXIgdG8gaGFuZGxlIHRoZSB0eXBlLCBpbnNlcnRpbmcgYSBzeW50aGV0aWMgdHlwZSByZWZlcmVuY2UgaWYKICAvLy8gbmVjZXNzYXJ5LiBUaGlzIG1heSBtb2RpZnkgdGhlIHRva2VuIHN0cmVhbSB3aGVuIHBhcnNpbmcgYD4+YCBvciBgPj4+YAogIC8vLyBvciBgPj4+PWAgaW4gdmFsaWQgY29kZSBvciBkdXJpbmcgcmVjb3ZlcnkuCiAgVG9rZW4gZW5zdXJlVHlwZU9yVm9pZChUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcik7CgogIC8vLyBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gcGFyc2UgYW4gb3B0aW9uYWwgdHlwZSAobm90IHZvaWQpIGFmdGVyIFt0b2tlbl0uCiAgLy8vIFRoaXMgZnVuY3Rpb24gd2lsbCBjYWxsIHRoZSBhcHByb3ByaWF0ZSBldmVudCBtZXRob2RzIG9uIHRoZSBbUGFyc2VyXSdzCiAgLy8vIGxpc3RlbmVyIHRvIGhhbmRsZSB0aGUgdHlwZS4gVGhpcyBtYXkgbW9kaWZ5IHRoZSB0b2tlbiBzdHJlYW0KICAvLy8gd2hlbiBwYXJzaW5nIGA+PmAgb3IgYD4+PmAgb3IgYD4+Pj1gICBpbiB2YWxpZCBjb2RlIG9yIGR1cmluZyByZWNvdmVyeS4KICBUb2tlbiBwYXJzZVR5cGVOb3RWb2lkKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKTsKCiAgLy8vIENhbGwgdGhpcyBmdW5jdGlvbiB0byBwYXJzZSBhbiBvcHRpb25hbCB0eXBlIG9yIHZvaWQgYWZ0ZXIgW3Rva2VuXS4KICAvLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGNhbGwgdGhlIGFwcHJvcHJpYXRlIGV2ZW50IG1ldGhvZHMgb24gdGhlIFtQYXJzZXJdJ3MKICAvLy8gbGlzdGVuZXIgdG8gaGFuZGxlIHRoZSB0eXBlLiBUaGlzIG1heSBtb2RpZnkgdGhlIHRva2VuIHN0cmVhbQogIC8vLyB3aGVuIHBhcnNpbmcgYD4+YCBvciBgPj4+YCBvciBgPj4+PWAgaW4gdmFsaWQgY29kZSBvciBkdXJpbmcgcmVjb3ZlcnkuCiAgVG9rZW4gcGFyc2VUeXBlKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKTsKCiAgLy8vIENhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIHRoZSBbdG9rZW5dIGJlZm9yZSB0aGUgdHlwZSB0byBvYnRhaW4KICAvLy8gdGhlIGxhc3QgdG9rZW4gaW4gdGhlIHR5cGUuIElmIHRoZXJlIGlzIG5vIHR5cGUsIHRoZW4gdGhpcyBtZXRob2QKICAvLy8gd2lsbCByZXR1cm4gW3Rva2VuXS4gVGhpcyBkb2VzIG5vdCBtb2RpZnkgdGhlIHRva2VuIHN0cmVhbS4KICBUb2tlbiBza2lwVHlwZShUb2tlbiB0b2tlbik7Cn0KCi8vLyBbVHlwZVBhcmFtT3JBcmdJbmZvXSBwcm92aWRlcyBpbmZvcm1hdGlvbiBjb2xsZWN0ZWQgYnkKLy8vIFtjb21wdXRlVHlwZVBhcmFtT3JBcmddIGFib3V0IGEgcGFydGljdWxhciBncm91cCBvZiB0eXBlIGFyZ3VtZW50cwovLy8gb3IgdHlwZSBwYXJhbWV0ZXJzLgphYnN0cmFjdCBjbGFzcyBUeXBlUGFyYW1PckFyZ0luZm8gewogIGNvbnN0IFR5cGVQYXJhbU9yQXJnSW5mbygpOwoKICAvLy8gUmV0dXJuIGB0cnVlYCBpZiB0aGUgcmVjZWl2ZXIgcmVwcmVzZW50cyBhIHNpbmdsZSB0eXBlIGFyZ3VtZW50CiAgYm9vbCBnZXQgaXNTaW1wbGVUeXBlQXJndW1lbnQgPT4gZmFsc2U7CgogIC8vLyBSZXR1cm4gdGhlIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50cwogIGludCBnZXQgdHlwZUFyZ3VtZW50Q291bnQ7CgogIC8vLyBSZXR1cm4gdGhlIHNpbXBsZSB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNpbXBsZSB0eXBlIGFyZ3VtZW50CiAgLy8vIG9yIHRocm93IGFuIGV4Y2VwdGlvbiBpZiB0aGlzIGlzIG5vdCBhIHNpbXBsZSB0eXBlIGFyZ3VtZW50LgogIFR5cGVJbmZvIGdldCB0eXBlSW5mbyB7CiAgICB0aHJvdyAiSW50ZXJuYWwgZXJyb3I6ICRydW50aW1lVHlwZSBpcyBub3QgYSBTaW1wbGVUeXBlQXJndW1lbnQuIjsKICB9CgogIC8vLyBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gcGFyc2Ugb3B0aW9uYWwgdHlwZSBhcmd1bWVudHMgYWZ0ZXIgW3Rva2VuXS4KICAvLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGNhbGwgdGhlIGFwcHJvcHJpYXRlIGV2ZW50IG1ldGhvZHMgb24gdGhlIFtQYXJzZXJdJ3MKICAvLy8gbGlzdGVuZXIgdG8gaGFuZGxlIHRoZSBhcmd1bWVudHMuIFRoaXMgbWF5IG1vZGlmeSB0aGUgdG9rZW4gc3RyZWFtCiAgLy8vIHdoZW4gcGFyc2luZyBgPj5gIG9yIGA+Pj5gIG9yIGA+Pj49YCBpbiB2YWxpZCBjb2RlIG9yIGR1cmluZyByZWNvdmVyeS4KICBUb2tlbiBwYXJzZUFyZ3VtZW50cyhUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcik7CgogIC8vLyBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gcGFyc2Ugb3B0aW9uYWwgdHlwZSBwYXJhbWV0ZXJzCiAgLy8vIChhbHNvIGtub3duIGFzIHR5cGUgdmFyaWFibGVzKSBhZnRlciBbdG9rZW5dLgogIC8vLyBUaGlzIGZ1bmN0aW9uIHdpbGwgY2FsbCB0aGUgYXBwcm9wcmlhdGUgZXZlbnQgbWV0aG9kcyBvbiB0aGUgW1BhcnNlcl0ncwogIC8vLyBsaXN0ZW5lciB0byBoYW5kbGUgdGhlIHBhcmFtZXRlcnMuIFRoaXMgbWF5IG1vZGlmeSB0aGUgdG9rZW4gc3RyZWFtCiAgLy8vIHdoZW4gcGFyc2luZyBgPj5gIG9yIGA+Pj5gIG9yIGA+Pj49YCBpbiB2YWxpZCBjb2RlIG9yIGR1cmluZyByZWNvdmVyeS4KICBUb2tlbiBwYXJzZVZhcmlhYmxlcyhUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcik7CgogIC8vLyBDYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCB0aGUgW3Rva2VuXSBiZWZvcmUgdGhlIHR5cGUgdmFyIHRvIG9idGFpbgogIC8vLyB0aGUgbGFzdCB0b2tlbiBpbiB0aGUgdHlwZSB2YXIuIElmIHRoZXJlIGlzIG5vIHR5cGUgdmFyLCB0aGVuIHRoaXMgbWV0aG9kCiAgLy8vIHdpbGwgcmV0dXJuIFt0b2tlbl0uIFRoaXMgZG9lcyBub3QgbW9kaWZ5IHRoZSB0b2tlbiBzdHJlYW0uCiAgVG9rZW4gc2tpcChUb2tlbiB0b2tlbik7Cn0KCi8vLyBbTm9UeXBlXSBpcyBhIHNwZWNpYWxpemVkIFtUeXBlSW5mb10gcmV0dXJuZWQgYnkgW2NvbXB1dGVUeXBlXSB3aGVuCi8vLyB0aGVyZSBpcyBubyB0eXBlIGluZm9ybWF0aW9uIGluIHRoZSBzb3VyY2UuCmNvbnN0IFR5cGVJbmZvIG5vVHlwZSA9IGNvbnN0IE5vVHlwZSgpOwoKLy8vIFtOb1R5cGVQYXJhbU9yQXJnXSBpcyBhIHNwZWNpYWxpemVkIFtUeXBlUGFyYW1PckFyZ0luZm9dIHJldHVybmVkIGJ5Ci8vLyBbY29tcHV0ZVR5cGVQYXJhbU9yQXJnXSB3aGVuIG5vIHR5cGUgcGFyYW1ldGVycyBvciBhcmd1bWVudHMgYXJlIGZvdW5kLgpjb25zdCBUeXBlUGFyYW1PckFyZ0luZm8gbm9UeXBlUGFyYW1PckFyZyA9IGNvbnN0IE5vVHlwZVBhcmFtT3JBcmcoKTsKCi8vLyBbVm9pZFR5cGVdIGlzIGEgc3BlY2lhbGl6ZWQgW1R5cGVJbmZvXSByZXR1cm5lZCBieSBbY29tcHV0ZVR5cGVdIHdoZW4KLy8vIGB2b2lkYCBhcHBlYXJzIGluIHRoZSBzb3VyY2UuCmNvbnN0IFR5cGVJbmZvIHZvaWRUeXBlID0gY29uc3QgVm9pZFR5cGUoKTsKCmJvb2wgaXNHZW5lcmFsaXplZEZ1bmN0aW9uVHlwZShUb2tlbiB0b2tlbikgewogIHJldHVybiBvcHRpb25hbCgnRnVuY3Rpb24nLCB0b2tlbikgJiYKICAgICAgKG9wdGlvbmFsKCc8JywgdG9rZW4ubmV4dCkgfHwgb3B0aW9uYWwoJygnLCB0b2tlbi5uZXh0KSk7Cn0KCmJvb2wgaXNWYWxpZFR5cGVSZWZlcmVuY2UoVG9rZW4gdG9rZW4pIHsKICBpbnQga2luZCA9IHRva2VuLmtpbmQ7CiAgaWYgKElERU5USUZJRVJfVE9LRU4gPT0ga2luZCkgcmV0dXJuIHRydWU7CiAgaWYgKEtFWVdPUkRfVE9LRU4gPT0ga2luZCkgewogICAgVG9rZW5UeXBlIHR5cGUgPSB0b2tlbi50eXBlOwogICAgU3RyaW5nIHZhbHVlID0gdHlwZS5sZXhlbWU7CiAgICByZXR1cm4gdHlwZS5pc1BzZXVkbyB8fAogICAgICAgICh0eXBlLmlzQnVpbHRJbiAmJiBvcHRpb25hbCgnLicsIHRva2VuLm5leHQpKSB8fAogICAgICAgIChpZGVudGljYWwodmFsdWUsICdkeW5hbWljJykpIHx8CiAgICAgICAgKGlkZW50aWNhbCh2YWx1ZSwgJ3ZvaWQnKSk7CiAgfQogIHJldHVybiBmYWxzZTsKfQoKLy8vIENhbGxlZCBieSB0aGUgcGFyc2VyIHRvIG9idGFpbiBpbmZvcm1hdGlvbiBhYm91dCBhIHBvc3NpYmxlIHR5cGUgcmVmZXJlbmNlCi8vLyB0aGF0IGZvbGxvd3MgW3Rva2VuXS4gVGhpcyBkb2VzIG5vdCBtb2RpZnkgdGhlIHRva2VuIHN0cmVhbS4KLy8vCi8vLyBJZiBbaW5EZWNsYXJhdGlvbl0gaXMgYHRydWVgLCB0aGVuIHRoaXMgd2lsbCBtb3JlIGFnZ3Jlc3NpdmVseSByZWNvdmVyCi8vLyBnaXZlbiB1bmJhbGFuY2VkIGA8YCBgPmAgYW5kIGludmFsaWQgcGFyYW1ldGVycyBvciBhcmd1bWVudHMuClR5cGVJbmZvIGNvbXB1dGVUeXBlKGZpbmFsIFRva2VuIHRva2VuLCBib29sIHJlcXVpcmVkLAogICAgW2Jvb2wgaW5EZWNsYXJhdGlvbiA9IGZhbHNlXSkgewogIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogIGlmICghaXNWYWxpZFR5cGVSZWZlcmVuY2UobmV4dCkpIHsKICAgIGlmIChuZXh0LnR5cGUuaXNCdWlsdEluKSB7CiAgICAgIFR5cGVQYXJhbU9yQXJnSW5mbyB0eXBlUGFyYW1PckFyZyA9CiAgICAgICAgICBjb21wdXRlVHlwZVBhcmFtT3JBcmcobmV4dCwgaW5EZWNsYXJhdGlvbik7CiAgICAgIGlmICh0eXBlUGFyYW1PckFyZyAhPSBub1R5cGVQYXJhbU9yQXJnKSB7CiAgICAgICAgLy8gUmVjb3Zlcnk6IGJ1aWx0LWluIGA8YCAuLi4gYD5gCiAgICAgICAgaWYgKHJlcXVpcmVkIHx8IGxvb2tzTGlrZU5hbWUodHlwZVBhcmFtT3JBcmcuc2tpcChuZXh0KS5uZXh0KSkgewogICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4VHlwZUluZm8odG9rZW4sIHR5cGVQYXJhbU9yQXJnKQogICAgICAgICAgICAgIC5jb21wdXRlQnVpbHRpbk9yVmFyQXNUeXBlKHJlcXVpcmVkKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAocmVxdWlyZWQgfHwgaXNHZW5lcmFsaXplZEZ1bmN0aW9uVHlwZShuZXh0Lm5leHQpKSB7CiAgICAgICAgU3RyaW5nIHZhbHVlID0gbmV4dC5zdHJpbmdWYWx1ZTsKICAgICAgICBpZiAoKCFpZGVudGljYWwoJ2dldCcsIHZhbHVlKSAmJgogICAgICAgICAgICAhaWRlbnRpY2FsKCdzZXQnLCB2YWx1ZSkgJiYKICAgICAgICAgICAgIWlkZW50aWNhbCgnZmFjdG9yeScsIHZhbHVlKSAmJgogICAgICAgICAgICAhaWRlbnRpY2FsKCdvcGVyYXRvcicsIHZhbHVlKSAmJgogICAgICAgICAgICAhKGlkZW50aWNhbCgndHlwZWRlZicsIHZhbHVlKSAmJiBuZXh0Lm5leHQuaXNJZGVudGlmaWVyKSkpIHsKICAgICAgICAgIHJldHVybiBuZXcgQ29tcGxleFR5cGVJbmZvKHRva2VuLCB0eXBlUGFyYW1PckFyZykKICAgICAgICAgICAgICAuY29tcHV0ZUJ1aWx0aW5PclZhckFzVHlwZShyZXF1aXJlZCk7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYgKHJlcXVpcmVkKSB7CiAgICAgIC8vIFJlY292ZXJ5CiAgICAgIGlmIChvcHRpb25hbCgnLicsIG5leHQpKSB7CiAgICAgICAgLy8gTG9va3MgbGlrZSBwcmVmaXhlZCB0eXBlIG1pc3NpbmcgdGhlIHByZWZpeAogICAgICAgIHJldHVybiBuZXcgQ29tcGxleFR5cGVJbmZvKAogICAgICAgICAgICAgICAgdG9rZW4sIGNvbXB1dGVUeXBlUGFyYW1PckFyZyhuZXh0LCBpbkRlY2xhcmF0aW9uKSkKICAgICAgICAgICAgLmNvbXB1dGVQcmVmaXhlZFR5cGUocmVxdWlyZWQpOwogICAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCd2YXInLCBuZXh0KSAmJgogICAgICAgICAgaXNPbmVPZihuZXh0Lm5leHQsIGNvbnN0IFsnPCcsICcsJywgJz4nXSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBsZXhUeXBlSW5mbygKICAgICAgICAgICAgICAgIHRva2VuLCBjb21wdXRlVHlwZVBhcmFtT3JBcmcobmV4dCwgaW5EZWNsYXJhdGlvbikpCiAgICAgICAgICAgIC5jb21wdXRlQnVpbHRpbk9yVmFyQXNUeXBlKHJlcXVpcmVkKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5vVHlwZTsKICB9CgogIGlmIChvcHRpb25hbCgndm9pZCcsIG5leHQpKSB7CiAgICBuZXh0ID0gbmV4dC5uZXh0OwogICAgaWYgKGlzR2VuZXJhbGl6ZWRGdW5jdGlvblR5cGUobmV4dCkpIHsKICAgICAgLy8gYHZvaWRgIGBGdW5jdGlvbmAgLi4uCiAgICAgIHJldHVybiBuZXcgQ29tcGxleFR5cGVJbmZvKHRva2VuLCBub1R5cGVQYXJhbU9yQXJnKQogICAgICAgICAgLmNvbXB1dGVWb2lkR0ZUKHJlcXVpcmVkKTsKICAgIH0KICAgIC8vIGB2b2lkYAogICAgcmV0dXJuIHZvaWRUeXBlOwogIH0KCiAgaWYgKGlzR2VuZXJhbGl6ZWRGdW5jdGlvblR5cGUobmV4dCkpIHsKICAgIC8vIGBGdW5jdGlvbmAgLi4uCiAgICByZXR1cm4gbmV3IENvbXBsZXhUeXBlSW5mbyh0b2tlbiwgbm9UeXBlUGFyYW1PckFyZykKICAgICAgICAuY29tcHV0ZU5vVHlwZUdGVCh0b2tlbiwgcmVxdWlyZWQpOwogIH0KCiAgLy8gV2UndmUgc2VlbiBhbiBpZGVudGlmaWVyLgoKICBUeXBlUGFyYW1PckFyZ0luZm8gdHlwZVBhcmFtT3JBcmcgPQogICAgICBjb21wdXRlVHlwZVBhcmFtT3JBcmcobmV4dCwgaW5EZWNsYXJhdGlvbik7CiAgaWYgKHR5cGVQYXJhbU9yQXJnICE9IG5vVHlwZVBhcmFtT3JBcmcpIHsKICAgIGlmICh0eXBlUGFyYW1PckFyZy5pc1NpbXBsZVR5cGVBcmd1bWVudCkgewogICAgICAvLyBXZSd2ZSBzZWVuIGlkZW50aWZpZXIgYDxgIGlkZW50aWZpZXIgYD5gCiAgICAgIG5leHQgPSB0eXBlUGFyYW1PckFyZy5za2lwKG5leHQpLm5leHQ7CiAgICAgIGlmIChvcHRpb25hbCgnPycsIG5leHQpKSB7CiAgICAgICAgbmV4dCA9IG5leHQubmV4dDsKICAgICAgICBpZiAoIWlzR2VuZXJhbGl6ZWRGdW5jdGlvblR5cGUobmV4dCkpIHsKICAgICAgICAgIGlmICgocmVxdWlyZWQgfHwgbG9va3NMaWtlTmFtZShuZXh0KSkgJiYKICAgICAgICAgICAgICB0eXBlUGFyYW1PckFyZyA9PSBzaW1wbGVUeXBlQXJndW1lbnQxKSB7CiAgICAgICAgICAgIC8vIGlkZW50aWZpZXIgYDxgIGlkZW50aWZpZXIgYD5gIGA/YCBpZGVudGlmaWVyCiAgICAgICAgICAgIHJldHVybiBzaW1wbGVOdWxsYWJsZVR5cGVXaXRoMUFyZ3VtZW50OwogICAgICAgICAgfQogICAgICAgICAgLy8gaWRlbnRpZmllciBgPGAgaWRlbnRpZmllciBgPmAgYD9gIG5vbi1pZGVudGlmaWVyCiAgICAgICAgICByZXR1cm4gbm9UeXBlOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICghaXNHZW5lcmFsaXplZEZ1bmN0aW9uVHlwZShuZXh0KSkgewogICAgICAgIGlmIChyZXF1aXJlZCB8fCBsb29rc0xpa2VOYW1lKG5leHQpKSB7CiAgICAgICAgICAvLyBpZGVudGlmaWVyIGA8YCBpZGVudGlmaWVyIGA+YCBpZGVudGlmaWVyCiAgICAgICAgICByZXR1cm4gdHlwZVBhcmFtT3JBcmcudHlwZUluZm87CiAgICAgICAgfQogICAgICAgIC8vIGlkZW50aWZpZXIgYDxgIGlkZW50aWZpZXIgYD5gIG5vbi1pZGVudGlmaWVyCiAgICAgICAgcmV0dXJuIG5vVHlwZTsKICAgICAgfQogICAgfQogICAgLy8gVE9ETyhkYW5ydWJlbCk6IENvbnNpZGVyIGFkZGluZyBhIGNvbnN0IGZvcgogICAgLy8gaWRlbnRpZmllciBgPGAgaWRlbnRpZmllciBgLGAgaWRlbnRpZmllciBgPmAKICAgIC8vIGlmIHRoYXQgcHJvdmVzIHRvIGJlIGEgY29tbW9uIGNhc2UuCgogICAgLy8gaWRlbnRpZmllciBgPGAgLi4uIGA+YAogICAgcmV0dXJuIG5ldyBDb21wbGV4VHlwZUluZm8odG9rZW4sIHR5cGVQYXJhbU9yQXJnKQogICAgICAgIC5jb21wdXRlU2ltcGxlV2l0aFR5cGVBcmd1bWVudHMocmVxdWlyZWQpOwogIH0KCiAgYXNzZXJ0KHR5cGVQYXJhbU9yQXJnID09IG5vVHlwZVBhcmFtT3JBcmcpOwogIG5leHQgPSBuZXh0Lm5leHQ7CiAgaWYgKG9wdGlvbmFsKCcuJywgbmV4dCkpIHsKICAgIG5leHQgPSBuZXh0Lm5leHQ7CiAgICBpZiAoaXNWYWxpZFR5cGVSZWZlcmVuY2UobmV4dCkpIHsKICAgICAgLy8gV2UndmUgc2VlbiBpZGVudGlmaWVyIGAuYCBpZGVudGlmaWVyCiAgICAgIHR5cGVQYXJhbU9yQXJnID0gY29tcHV0ZVR5cGVQYXJhbU9yQXJnKG5leHQsIGluRGVjbGFyYXRpb24pOwogICAgICBuZXh0ID0gbmV4dC5uZXh0OwogICAgICBpZiAodHlwZVBhcmFtT3JBcmcgPT0gbm9UeXBlUGFyYW1PckFyZykgewogICAgICAgIGlmIChvcHRpb25hbCgnPycsIG5leHQpKSB7CiAgICAgICAgICBuZXh0ID0gbmV4dC5uZXh0OwogICAgICAgICAgaWYgKCFpc0dlbmVyYWxpemVkRnVuY3Rpb25UeXBlKG5leHQpKSB7CiAgICAgICAgICAgIGlmIChyZXF1aXJlZCB8fCBsb29rc0xpa2VOYW1lKG5leHQpKSB7CiAgICAgICAgICAgICAgLy8gaWRlbnRpZmllciBgLmAgaWRlbnRpZmllciBgP2AgaWRlbnRpZmllcgogICAgICAgICAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBjb25zaWRlciBhZGRpbmcgUHJlZml4ZWROdWxsYWJsZVR5cGUKICAgICAgICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gYnVpbGQgY29tcGxleCB0eXBlCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgLy8gaWRlbnRpZmllciBgLmAgaWRlbnRpZmllciBgP2Agbm9uLWlkZW50aWZpZXIKICAgICAgICAgICAgICByZXR1cm4gbm9UeXBlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmICghaXNHZW5lcmFsaXplZEZ1bmN0aW9uVHlwZShuZXh0KSkgewogICAgICAgICAgICBpZiAocmVxdWlyZWQgfHwgbG9va3NMaWtlTmFtZShuZXh0KSkgewogICAgICAgICAgICAgIC8vIGlkZW50aWZpZXIgYC5gIGlkZW50aWZpZXIgaWRlbnRpZmllcgogICAgICAgICAgICAgIHJldHVybiBwcmVmaXhlZFR5cGU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgLy8gaWRlbnRpZmllciBgLmAgaWRlbnRpZmllciBub24taWRlbnRpZmllcgogICAgICAgICAgICAgIHJldHVybiBub1R5cGU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gaWRlbnRpZmllciBgLmAgaWRlbnRpZmllcgogICAgICByZXR1cm4gbmV3IENvbXBsZXhUeXBlSW5mbyh0b2tlbiwgdHlwZVBhcmFtT3JBcmcpCiAgICAgICAgICAuY29tcHV0ZVByZWZpeGVkVHlwZShyZXF1aXJlZCk7CiAgICB9CiAgICAvLyBpZGVudGlmaWVyIGAuYCBub24taWRlbnRpZmllcgogICAgaWYgKHJlcXVpcmVkKSB7CiAgICAgIHR5cGVQYXJhbU9yQXJnID0gY29tcHV0ZVR5cGVQYXJhbU9yQXJnKHRva2VuLm5leHQubmV4dCwgaW5EZWNsYXJhdGlvbik7CiAgICAgIHJldHVybiBuZXcgQ29tcGxleFR5cGVJbmZvKHRva2VuLCB0eXBlUGFyYW1PckFyZykKICAgICAgICAgIC5jb21wdXRlUHJlZml4ZWRUeXBlKHJlcXVpcmVkKTsKICAgIH0KICAgIHJldHVybiBub1R5cGU7CiAgfQoKICBhc3NlcnQodHlwZVBhcmFtT3JBcmcgPT0gbm9UeXBlUGFyYW1PckFyZyk7CiAgaWYgKGlzR2VuZXJhbGl6ZWRGdW5jdGlvblR5cGUobmV4dCkpIHsKICAgIC8vIGlkZW50aWZpZXIgYEZ1bmN0aW9uYAogICAgcmV0dXJuIG5ldyBDb21wbGV4VHlwZUluZm8odG9rZW4sIG5vVHlwZVBhcmFtT3JBcmcpCiAgICAgICAgLmNvbXB1dGVJZGVudGlmaWVyR0ZUKHJlcXVpcmVkKTsKICB9CgogIGlmIChvcHRpb25hbCgnPycsIG5leHQpKSB7CiAgICBuZXh0ID0gbmV4dC5uZXh0OwogICAgaWYgKGlzR2VuZXJhbGl6ZWRGdW5jdGlvblR5cGUobmV4dCkpIHsKICAgICAgLy8gaWRlbnRpZmllciBgP2AgRnVuY3Rpb24gYChgCiAgICAgIHJldHVybiBuZXcgQ29tcGxleFR5cGVJbmZvKHRva2VuLCBub1R5cGVQYXJhbU9yQXJnKQogICAgICAgICAgLmNvbXB1dGVJZGVudGlmaWVyUXVlc3Rpb25HRlQocmVxdWlyZWQpOwogICAgfSBlbHNlIGlmIChyZXF1aXJlZCB8fCBsb29rc0xpa2VOYW1lKG5leHQpKSB7CiAgICAgIC8vIGlkZW50aWZpZXIgYD9gCiAgICAgIHJldHVybiBzaW1wbGVOdWxsYWJsZVR5cGU7CiAgICB9CiAgfSBlbHNlIGlmIChyZXF1aXJlZCB8fCBsb29rc0xpa2VOYW1lKG5leHQpKSB7CiAgICAvLyBpZGVudGlmaWVyIGlkZW50aWZpZXIKICAgIHJldHVybiBzaW1wbGVUeXBlOwogIH0KICByZXR1cm4gbm9UeXBlOwp9CgovLy8gQ2FsbGVkIGJ5IHRoZSBwYXJzZXIgdG8gb2J0YWluIGluZm9ybWF0aW9uIGFib3V0IGEgcG9zc2libGUgZ3JvdXAgb2YgdHlwZQovLy8gcGFyYW1ldGVycyBvciB0eXBlIGFyZ3VtZW50cyB0aGF0IGZvbGxvdyBbdG9rZW5dLgovLy8gVGhpcyBkb2VzIG5vdCBtb2RpZnkgdGhlIHRva2VuIHN0cmVhbS4KLy8vCi8vLyBJZiBbaW5EZWNsYXJhdGlvbl0gaXMgYHRydWVgLCB0aGVuIHRoaXMgd2lsbCBtb3JlIGFnZ3Jlc3NpdmVseSByZWNvdmVyCi8vLyBnaXZlbiB1bmJhbGFuY2VkIGA8YCBgPmAgYW5kIGludmFsaWQgcGFyYW1ldGVycyBvciBhcmd1bWVudHMuClR5cGVQYXJhbU9yQXJnSW5mbyBjb21wdXRlVHlwZVBhcmFtT3JBcmcoVG9rZW4gdG9rZW4sCiAgICBbYm9vbCBpbkRlY2xhcmF0aW9uID0gZmFsc2VdKSB7CiAgVG9rZW4gYmVnaW5Hcm91cCA9IHRva2VuLm5leHQ7CiAgaWYgKCFvcHRpb25hbCgnPCcsIGJlZ2luR3JvdXApKSB7CiAgICByZXR1cm4gbm9UeXBlUGFyYW1PckFyZzsKICB9CgogIC8vIGlkZW50aWZpZXIgYDxgIGB2b2lkYCBgPmAgYW5kIGA8YCBgZHluYW1pY2AgYD5gCiAgLy8gYXJlIGhhbmRsZWQgYnkgQ29tcGxleFR5cGVJbmZvLgogIFRva2VuIG5leHQgPSBiZWdpbkdyb3VwLm5leHQ7CiAgaWYgKChuZXh0LmtpbmQgPT0gSURFTlRJRklFUl9UT0tFTiB8fCBuZXh0LnR5cGUuaXNQc2V1ZG8pKSB7CiAgICBpZiAob3B0aW9uYWwoJz4nLCBuZXh0Lm5leHQpKSB7CiAgICAgIHJldHVybiBzaW1wbGVUeXBlQXJndW1lbnQxOwogICAgfSBlbHNlIGlmIChvcHRpb25hbCgnPj4nLCBuZXh0Lm5leHQpKSB7CiAgICAgIHJldHVybiBzaW1wbGVUeXBlQXJndW1lbnQxR3RHdDsKICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJz49JywgbmV4dC5uZXh0KSkgewogICAgICByZXR1cm4gc2ltcGxlVHlwZUFyZ3VtZW50MUd0RXE7CiAgICB9CiAgfSBlbHNlIGlmIChvcHRpb25hbCgnKCcsIG5leHQpKSB7CiAgICByZXR1cm4gbm9UeXBlUGFyYW1PckFyZzsKICB9CgogIC8vIFRPRE8oZGFucnViZWwpOiBDb25zaWRlciBhZGRpbmcgYWRkaXRpb25hbCBjb25zdCBmb3IgY29tbW9uIHNpdHVhdGlvbnMuCiAgcmV0dXJuIG5ldyBDb21wbGV4VHlwZVBhcmFtT3JBcmdJbmZvKHRva2VuLCBpbkRlY2xhcmF0aW9uKS5jb21wdXRlKCk7Cn0KCi8vLyBDYWxsZWQgYnkgdGhlIHBhcnNlciB0byBvYnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgYSBwb3NzaWJsZSBncm91cCBvZiB0eXBlCi8vLyB0eXBlIGFyZ3VtZW50cyB0aGF0IGZvbGxvdyBbdG9rZW5dIGFuZCB0aGF0IGFyZSBmb2xsb3dlZCBieSAnKCcuCi8vLyBSZXR1cm5zIHRoZSB0eXBlIGFyZ3VtZW50cyBpZiBbdG9rZW5dIG1hdGNoZXMgJzwnIHR5cGUgKCcsJyB0eXBlKSogJz4nICcoJywKLy8vIGFuZCBvdGhlcndpc2UgcmV0dXJucyBbbm9UeXBlUGFyYW1PckFyZ10uIFRoZSBmaW5hbCAnKCcgaXMgbm90IHBhcnQgb2YgdGhlCi8vLyBncmFtbWFyIGNvbnN0cnVjdCBgdHlwZUFyZ3VtZW50c2AsIGJ1dCBpdCBpcyByZXF1aXJlZCBoZXJlIHN1Y2ggdGhhdCB0eXBlCi8vLyBhcmd1bWVudHMgaW4gZ2VuZXJpYyBtZXRob2QgaW52b2NhdGlvbnMgY2FuIGJlIHJlY29nbml6ZWQsIGFuZCBhcyBmZXcgYXMKLy8vIHBvc3NpYmxlIG90aGVyIGNvbnN0cnVjdHMgd2lsbCBwYXNzIChlLmcuLCAnYSA8IEMsIEQgPiAzJykuClR5cGVQYXJhbU9yQXJnSW5mbyBjb21wdXRlTWV0aG9kVHlwZUFyZ3VtZW50cyhUb2tlbiB0b2tlbikgewogIFR5cGVQYXJhbU9yQXJnSW5mbyB0eXBlQXJnID0gY29tcHV0ZVR5cGVQYXJhbU9yQXJnKHRva2VuKTsKICByZXR1cm4gb3B0aW9uYWwoJygnLCB0eXBlQXJnLnNraXAodG9rZW4pLm5leHQpID8gdHlwZUFyZyA6IG5vVHlwZVBhcmFtT3JBcmc7Cn0KgVsATk48ASABOQFPASIBHgErAT8nGkpKHgFJRkhFHgE2FwFRTktNMjcBTk5LTTI2AU1ORE42AUpORE0vAURIQh8CATtHGCQeAUYqASodAUdDGkcEAUlOSU00ATs0TkpNNAFIUEIbAgFIMCgBSUxGAUoiLAEuKEACASkZLR8hIBw5KSQEEAIBT0EES0I3JBslHyo2MCpJPDQKRSkpKCwtSTw0CggbEiE3JEMsKjckQzIIBhMEASAWKx86JQYOFQQBKRY4LAQBHwEmMiwvMi0hGjAzNzw0DD4ZCjUvNioKOBcIBjM0KwEeNjMEAS4UHRYmLkMYMCMcMjM6RjQVPh0ODBEyMzYjFTodDgwKCCM4KgYlFE44KgYTBAEuKR04KQQBHRYrJTozMhghBjAdFwQRAgFONisES0I2JCEkHQQBNSUgPyQiLCYsJgYkHQQBTUgCAU5FUE9OTUA9PU8CATFwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL3R5cGVfaW5mby5kYXJ0SHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9wYXJzZXIvaWRlbnRpZmllcl9jb250ZXh0X2ltcGwuZGFydMAAkMIvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnIGFzIGZhc3RhOwoKaW1wb3J0ICcuLi9zY2FubmVyL3Rva2VuX2NvbnN0YW50cy5kYXJ0JyBzaG93IElERU5USUZJRVJfVE9LRU4sIFNUUklOR19UT0tFTjsKCmltcG9ydCAnaWRlbnRpZmllcl9jb250ZXh0LmRhcnQnOwoKaW1wb3J0ICdwYXJzZXIuZGFydCcgc2hvdyBQYXJzZXI7CgppbXBvcnQgJ3R5cGVfaW5mby5kYXJ0JyBzaG93IGlzVmFsaWRUeXBlUmVmZXJlbmNlOwoKaW1wb3J0ICd1dGlsLmRhcnQnIHNob3cgaXNPbmVPZk9yRW9mLCBvcHRpb25hbDsKCi8vLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0LmNhdGNoUGFyYW1ldGVyXS4KY2xhc3MgQ2F0Y2hQYXJhbWV0ZXJJZGVudGlmaWVyQ29udGV4dCBleHRlbmRzIElkZW50aWZpZXJDb250ZXh0IHsKICBjb25zdCBDYXRjaFBhcmFtZXRlcklkZW50aWZpZXJDb250ZXh0KCkgOiBzdXBlcignY2F0Y2hQYXJhbWV0ZXInKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgaWYgKGlkZW50aWZpZXIuaXNJZGVudGlmaWVyKSB7CiAgICAgIGNoZWNrQXN5bmNBd2FpdFlpZWxkQXNJZGVudGlmaWVyKGlkZW50aWZpZXIsIHBhcnNlcik7CiAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcihpZGVudGlmaWVyLCBmYXN0YS5tZXNzYWdlQ2F0Y2hTeW50YXgpOwogICAgaWYgKGxvb2tzTGlrZVN0YXRlbWVudFN0YXJ0KGlkZW50aWZpZXIpIHx8CiAgICAgICAgaXNPbmVPZk9yRW9mKGlkZW50aWZpZXIsIGNvbnN0IFsnLCcsICcpJ10pKSB7CiAgICAgIHJldHVybiBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbik7CiAgICB9IGVsc2UgaWYgKCFpZGVudGlmaWVyLmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICAvLyBXaGVuIGluIGRvdWJ0LCBjb25zdW1lIHRoZSB0b2tlbiB0byBlbnN1cmUgd2UgbWFrZSBwcm9ncmVzcwogICAgICAvLyBidXQgaW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgdG8gc2F0aXNmeSBsaXN0ZW5lcnMuCiAgICAgIHJldHVybiBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcihpZGVudGlmaWVyKTsKICAgIH0KICAgIHJldHVybiBpZGVudGlmaWVyOwogIH0KfQoKLy8vIFNlZSBbSWRlbnRpZmllckNvbnRleHQuY2xhc3NPck1peGluT3JFeHRlbnNpb25EZWNsYXJhdGlvbl0uCmNsYXNzIENsYXNzT3JNaXhpbk9yRXh0ZW5zaW9uSWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgQ2xhc3NPck1peGluT3JFeHRlbnNpb25JZGVudGlmaWVyQ29udGV4dCgpCiAgICAgIDogc3VwZXIoJ2NsYXNzT3JNaXhpbkRlY2xhcmF0aW9uJywKICAgICAgICAgICAgaW5EZWNsYXJhdGlvbjogdHJ1ZSwgaXNCdWlsdEluSWRlbnRpZmllckFsbG93ZWQ6IGZhbHNlKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgaWYgKGlkZW50aWZpZXIudHlwZS5pc1BzZXVkbykgewogICAgICByZXR1cm4gaWRlbnRpZmllcjsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgaWYgKGxvb2tzTGlrZVN0YXJ0T2ZOZXh0VG9wTGV2ZWxEZWNsYXJhdGlvbihpZGVudGlmaWVyKSB8fAogICAgICAgIGlzT25lT2ZPckVvZihpZGVudGlmaWVyLAogICAgICAgICAgICBjb25zdCBbJzwnLCAneycsICdleHRlbmRzJywgJ3dpdGgnLCAnaW1wbGVtZW50cycsICdvbiddKSkgewogICAgICBpZGVudGlmaWVyID0gcGFyc2VyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4sIHRoaXMsCiAgICAgICAgICBtZXNzYWdlOiBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllci53aXRoQXJndW1lbnRzKGlkZW50aWZpZXIpKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpZmllci50eXBlLmlzQnVpbHRJbikgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlQnVpbHRJbklkZW50aWZpZXJJbkRlY2xhcmF0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIpOwogICAgICBpZiAoIWlkZW50aWZpZXIuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgICAgLy8gV2hlbiBpbiBkb3VidCwgY29uc3VtZSB0aGUgdG9rZW4gdG8gZW5zdXJlIHdlIG1ha2UgcHJvZ3Jlc3MKICAgICAgICAvLyBidXQgaW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgdG8gc2F0aXNmeSBsaXN0ZW5lcnMuCiAgICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5yZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKGlkZW50aWZpZXIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gaWRlbnRpZmllcjsKICB9Cn0KCi8vLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0LmNvbWJpbmF0b3JdLgpjbGFzcyBDb21iaW5hdG9ySWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgQ29tYmluYXRvcklkZW50aWZpZXJDb250ZXh0KCkgOiBzdXBlcignY29tYmluYXRvcicpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBpZGVudGlmaWVyID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGlmaWVyLmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTik7CiAgICBjb25zdCBMaXN0PFN0cmluZz4gZm9sbG93aW5nVmFsdWVzID0gY29uc3QgWwogICAgICAnOycsCiAgICAgICcsJywKICAgICAgJ2lmJywKICAgICAgJ2FzJywKICAgICAgJ3Nob3cnLAogICAgICAnaGlkZScKICAgIF07CgogICAgaWYgKGlkZW50aWZpZXIuaXNJZGVudGlmaWVyKSB7CiAgICAgIGlmICghbG9va3NMaWtlU3RhcnRPZk5leHRUb3BMZXZlbERlY2xhcmF0aW9uKGlkZW50aWZpZXIpIHx8CiAgICAgICAgICBpc09uZU9mT3JFb2YoaWRlbnRpZmllci5uZXh0LCBmb2xsb3dpbmdWYWx1ZXMpKSB7CiAgICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICAgIH0KICAgICAgLy8gQWx0aG91Z2ggdGhpcyBpcyBhIHZhbGlkIGlkZW50aWZpZXIgbmFtZSwgdGhlIGltcG9ydCBkZWNsYXJhdGlvbgogICAgICAvLyBpcyBpbnZhbGlkIGFuZCB0aGlzIGxvb2tzIGxpa2UgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGRlY2xhcmF0aW9uLgogICAgICAvLyBJbiB0aGlzIHNpdHVhdGlvbiwgZmFsbCB0aHJvdWdoIHRvIGluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyLgogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBpZiAoaXNPbmVPZk9yRW9mKGlkZW50aWZpZXIsIGZvbGxvd2luZ1ZhbHVlcykgfHwKICAgICAgICBsb29rc0xpa2VTdGFydE9mTmV4dFRvcExldmVsRGVjbGFyYXRpb24oaWRlbnRpZmllcikpIHsKICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuLCB0aGlzLAogICAgICAgICAgbWVzc2FnZTogZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIud2l0aEFyZ3VtZW50cyhpZGVudGlmaWVyKSk7CiAgICB9IGVsc2UgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyKTsKICAgICAgaWYgKCFpZGVudGlmaWVyLmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICAgIC8vIFdoZW4gaW4gZG91YnQsIGNvbnN1bWUgdGhlIHRva2VuIHRvIGVuc3VyZSB3ZSBtYWtlIHByb2dyZXNzCiAgICAgICAgLy8gYnV0IGluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIHRvIHNhdGlzZnkgbGlzdGVuZXJzLgogICAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcihpZGVudGlmaWVyKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgfQp9CgovLy8gU2VlIFtJZGVudGlmaWVyQ29udGV4dC5jb25zdHJ1Y3RvclJlZmVyZW5jZV0KLy8vIGFuZCBbSWRlbnRpZmllckNvbnRleHQuY29uc3RydWN0b3JSZWZlcmVuY2VDb250aW51YXRpb25dCi8vLyBhbmQgW0lkZW50aWZpZXJDb250ZXh0LmNvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzXS4KY2xhc3MgQ29uc3RydWN0b3JSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dCBleHRlbmRzIElkZW50aWZpZXJDb250ZXh0IHsKICBjb25zdCBDb25zdHJ1Y3RvclJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0KCkKICAgICAgOiBzdXBlcignY29uc3RydWN0b3JSZWZlcmVuY2UnLCBpc1Njb3BlUmVmZXJlbmNlOiB0cnVlKTsKCiAgY29uc3QgQ29uc3RydWN0b3JSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dC5jb250aW51YXRpb24oKQogICAgICA6IHN1cGVyKCdjb25zdHJ1Y3RvclJlZmVyZW5jZUNvbnRpbnVhdGlvbicsIGlzQ29udGludWF0aW9uOiB0cnVlKTsKCiAgY29uc3QgQ29uc3RydWN0b3JSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dC5jb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHMoKQogICAgICA6IHN1cGVyKCdjb25zdHJ1Y3RvclJlZmVyZW5jZUNvbnRpbnVhdGlvbkFmdGVyVHlwZUFyZ3VtZW50cycsCiAgICAgICAgICAgIGlzQ29udGludWF0aW9uOiB0cnVlKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgaWYgKGlkZW50aWZpZXIuaXNJZGVudGlmaWVyKSB7CiAgICAgIGNoZWNrQXN5bmNBd2FpdFlpZWxkQXNJZGVudGlmaWVyKGlkZW50aWZpZXIsIHBhcnNlcik7CiAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBpZiAoIWlkZW50aWZpZXIuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbiwgdGhpcywKICAgICAgICAgIG1lc3NhZ2U6IGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyLndpdGhBcmd1bWVudHMoaWRlbnRpZmllcikpOwogICAgfSBlbHNlIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllcik7CiAgICB9CiAgICByZXR1cm4gaWRlbnRpZmllcjsKICB9Cn0KCi8vLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0LmRvdHRlZE5hbWVdLgpjbGFzcyBEb3R0ZWROYW1lSWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgRG90dGVkTmFtZUlkZW50aWZpZXJDb250ZXh0KCkgOiBzdXBlcignZG90dGVkTmFtZScpOwoKICBjb25zdCBEb3R0ZWROYW1lSWRlbnRpZmllckNvbnRleHQuY29udGludWF0aW9uKCkKICAgICAgOiBzdXBlcignZG90dGVkTmFtZUNvbnRpbnVhdGlvbicsIGlzQ29udGludWF0aW9uOiB0cnVlKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgY29uc3QgTGlzdDxTdHJpbmc+IGZvbGxvd2luZ1ZhbHVlcyA9IGNvbnN0IFsnLicsICc9PScsICcpJ107CgogICAgaWYgKGlkZW50aWZpZXIuaXNJZGVudGlmaWVyKSB7CiAgICAgIC8vIERvdHRlZE5hbWVJZGVudGlmaWVyQ29udGV4dCBhcmUgb25seSB1c2VkIGluIGNvbmRpdGlvbmFsIGltcG9ydAogICAgICAvLyBleHByZXNzaW9ucy4gQWx0aG91Z2ggc29tZSB0b3AgbGV2ZWwga2V5d29yZHMgc3VjaCBhcyBgaW1wb3J0YCBjYW4gYmUKICAgICAgLy8gdXNlZCBhcyBpZGVudGlmaWVycywgdGhleSBhcmUgbW9yZSBsaWtlbHkgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0CiAgICAgIC8vIGRpcmVjdGl2ZSBvciBkZWNsYXJhdGlvbi4KICAgICAgaWYgKCFpZGVudGlmaWVyLmlzVG9wTGV2ZWxLZXl3b3JkIHx8CiAgICAgICAgICBpc09uZU9mT3JFb2YoaWRlbnRpZmllci5uZXh0LCBmb2xsb3dpbmdWYWx1ZXMpKSB7CiAgICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICAgIH0KICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgaWYgKGxvb2tzTGlrZVN0YXJ0T2ZOZXh0VG9wTGV2ZWxEZWNsYXJhdGlvbihpZGVudGlmaWVyKSB8fAogICAgICAgIGlzT25lT2ZPckVvZihpZGVudGlmaWVyLCBmb2xsb3dpbmdWYWx1ZXMpKSB7CiAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbiwgdGhpcywKICAgICAgICAgIG1lc3NhZ2U6IGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyLndpdGhBcmd1bWVudHMoaWRlbnRpZmllcikpOwogICAgfSBlbHNlIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllcik7CiAgICAgIGlmICghaWRlbnRpZmllci5pc0tleXdvcmRPcklkZW50aWZpZXIpIHsKICAgICAgICAvLyBXaGVuIGluIGRvdWJ0LCBjb25zdW1lIHRoZSB0b2tlbiB0byBlbnN1cmUgd2UgbWFrZSBwcm9ncmVzcwogICAgICAgIC8vIGJ1dCBpbnNlcnQgYSBzeW50aGV0aWMgaWRlbnRpZmllciB0byBzYXRpc2Z5IGxpc3RlbmVycy4KICAgICAgICBpZGVudGlmaWVyID0gcGFyc2VyLnJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIoaWRlbnRpZmllcik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBpZGVudGlmaWVyOwogIH0KfQoKLy8vIFNlZSBbSWRlbnRpZmllckNvbnRleHQuZW51bURlY2xhcmF0aW9uXS4KY2xhc3MgRW51bURlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgRW51bURlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQoKQogICAgICA6IHN1cGVyKCdlbnVtRGVjbGFyYXRpb24nLAogICAgICAgICAgICBpbkRlY2xhcmF0aW9uOiB0cnVlLCBpc0J1aWx0SW5JZGVudGlmaWVyQWxsb3dlZDogZmFsc2UpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBpZGVudGlmaWVyID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGlmaWVyLmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTik7CiAgICBpZiAoaWRlbnRpZmllci50eXBlLmlzUHNldWRvKSB7CiAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBpZiAobG9va3NMaWtlU3RhcnRPZk5leHRUb3BMZXZlbERlY2xhcmF0aW9uKGlkZW50aWZpZXIpIHx8CiAgICAgICAgaXNPbmVPZk9yRW9mKGlkZW50aWZpZXIsIGNvbnN0IFsneyddKSkgewogICAgICBpZGVudGlmaWVyID0gcGFyc2VyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4sIHRoaXMsCiAgICAgICAgICBtZXNzYWdlOiBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllci53aXRoQXJndW1lbnRzKGlkZW50aWZpZXIpKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpZmllci50eXBlLmlzQnVpbHRJbikgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlQnVpbHRJbklkZW50aWZpZXJJbkRlY2xhcmF0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIpOwogICAgICBpZiAoIWlkZW50aWZpZXIuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgICAgLy8gV2hlbiBpbiBkb3VidCwgY29uc3VtZSB0aGUgdG9rZW4gdG8gZW5zdXJlIHdlIG1ha2UgcHJvZ3Jlc3MKICAgICAgICAvLyBidXQgaW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgdG8gc2F0aXNmeSBsaXN0ZW5lcnMuCiAgICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5yZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKGlkZW50aWZpZXIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gaWRlbnRpZmllcjsKICB9Cn0KCi8vLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0LmVudW1WYWx1ZURlY2xhcmF0aW9uXS4KY2xhc3MgRW51bVZhbHVlRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCBleHRlbmRzIElkZW50aWZpZXJDb250ZXh0IHsKICBjb25zdCBFbnVtVmFsdWVEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KCkKICAgICAgOiBzdXBlcignZW51bVZhbHVlRGVjbGFyYXRpb24nLCBpbkRlY2xhcmF0aW9uOiB0cnVlKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgaWYgKGlkZW50aWZpZXIuaXNJZGVudGlmaWVyKSB7CiAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllcik7CiAgICBpZiAobG9va3NMaWtlU3RhcnRPZk5leHRUb3BMZXZlbERlY2xhcmF0aW9uKGlkZW50aWZpZXIpIHx8CiAgICAgICAgaXNPbmVPZk9yRW9mKGlkZW50aWZpZXIsIGNvbnN0IFsnLCcsICd9J10pKSB7CiAgICAgIHJldHVybiBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbik7CiAgICB9IGVsc2UgaWYgKCFpZGVudGlmaWVyLmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICAvLyBXaGVuIGluIGRvdWJ0LCBjb25zdW1lIHRoZSB0b2tlbiB0byBlbnN1cmUgd2UgbWFrZSBwcm9ncmVzcwogICAgICAvLyBidXQgaW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgdG8gc2F0aXNmeSBsaXN0ZW5lcnMuCiAgICAgIHJldHVybiBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcihpZGVudGlmaWVyKTsKICAgIH0KICAgIHJldHVybiBpZGVudGlmaWVyOwogIH0KfQoKLy8vIFNlZSBbSWRlbnRpZmllckNvbnRleHQuZXhwcmVzc2lvbl0uCmNsYXNzIEV4cHJlc3Npb25JZGVudGlmaWVyQ29udGV4dCBleHRlbmRzIElkZW50aWZpZXJDb250ZXh0IHsKICBjb25zdCBFeHByZXNzaW9uSWRlbnRpZmllckNvbnRleHQoKQogICAgICA6IHN1cGVyKCdleHByZXNzaW9uJywgaXNTY29wZVJlZmVyZW5jZTogdHJ1ZSk7CgogIGNvbnN0IEV4cHJlc3Npb25JZGVudGlmaWVyQ29udGV4dC5jb250aW51YXRpb24oKQogICAgICA6IHN1cGVyKCdleHByZXNzaW9uQ29udGludWF0aW9uJywgaXNDb250aW51YXRpb246IHRydWUpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBpZGVudGlmaWVyID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGlmaWVyLmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTik7CiAgICBpZiAoaWRlbnRpZmllci5pc0lkZW50aWZpZXIpIHsKICAgICAgaWYgKG9wdGlvbmFsKCdhd2FpdCcsIGlkZW50aWZpZXIpICYmIGlkZW50aWZpZXIubmV4dC5pc0lkZW50aWZpZXIpIHsKICAgICAgICAvLyBBbHRob3VnaCB0aGUgYGF3YWl0YCBjYW4gYmUgdXNlZCBpbiBhbiBleHByZXNzaW9uLAogICAgICAgIC8vIGl0IGlzIGZvbGxvd2VkIGJ5IGFub3RoZXIgaWRlbnRpZmllciB3aGljaCBkb2VzIG5vdCBmb3JtCiAgICAgICAgLy8gYSB2YWxpZCBleHByZXNzaW9uLiBSZXBvcnQgYW4gZXJyb3Igb24gdGhlIGBhd2FpdGAgdG9rZW4KICAgICAgICAvLyByYXRoZXIgdGhhbiB0aGUgdG9rZW4gZm9sbG93aW5nIGl0LgogICAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbik7CgogICAgICAgIC8vIFRPRE8oZGFucnViZWwpIENvbnNpZGVyIGEgbmV3IGxpc3RlbmVyIGV2ZW50IHNvIHRoYXQgYW5hbHl6ZXIKICAgICAgICAvLyBjYW4gcmVwcmVzZW50IHRoaXMgYXMgYW4gYXdhaXQgZXhwcmVzc2lvbiBpbiBhIGNvbnRleHQgdGhhdCBkb2VzCiAgICAgICAgLy8gbm90IGFsbG93IGF3YWl0LgogICAgICAgIHJldHVybiBpZGVudGlmaWVyLm5leHQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY2hlY2tBc3luY0F3YWl0WWllbGRBc0lkZW50aWZpZXIoaWRlbnRpZmllciwgcGFyc2VyKTsKICAgICAgfQogICAgICByZXR1cm4gaWRlbnRpZmllcjsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIpOwogICAgaWYgKG9wdGlvbmFsKHInJCcsIHRva2VuKSAmJgogICAgICAgIGlkZW50aWZpZXIuaXNLZXl3b3JkICYmCiAgICAgICAgaWRlbnRpZmllci5uZXh0LmtpbmQgPT0gU1RSSU5HX1RPS0VOKSB7CiAgICAgIC8vIEtleXdvcmQgdXNlZCBhcyBpZGVudGlmaWVyIGluIHN0cmluZyBpbnRlcnBvbGF0aW9uCiAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgfSBlbHNlIGlmICghbG9va3NMaWtlU3RhdGVtZW50U3RhcnQoaWRlbnRpZmllcikpIHsKICAgICAgaWYgKGlkZW50aWZpZXIuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgICAgaWYgKGlzQ29udGludWF0aW9uIHx8ICFpc09uZU9mT3JFb2YoaWRlbnRpZmllciwgY29uc3QgWydhcycsICdpcyddKSkgewogICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKCFpZGVudGlmaWVyLmlzT3BlcmF0b3IgJiYKICAgICAgICAgICFpc09uZU9mT3JFb2YoaWRlbnRpZmllciwKICAgICAgICAgICAgICBjb25zdCBbJy4nLCAnLCcsICcoJywgJyknLCAnWycsICddJywgJ3snLCAnfScsICc/JywgJzonLCAnOyddKSkgewogICAgICAgIC8vIFdoZW4gaW4gZG91YnQsIGNvbnN1bWUgdGhlIHRva2VuIHRvIGVuc3VyZSB3ZSBtYWtlIHByb2dyZXNzCiAgICAgICAgdG9rZW4gPSBpZGVudGlmaWVyOwogICAgICAgIGlkZW50aWZpZXIgPSB0b2tlbi5uZXh0OwogICAgICB9CiAgICB9CiAgICAvLyBJbnNlcnQgYSBzeW50aGV0aWMgaWRlbnRpZmllciB0byBzYXRpc2Z5IGxpc3RlbmVycy4KICAgIHJldHVybiBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbik7CiAgfQp9CgovLy8gU2VlIFtJZGVudGlmaWVyQ29udGV4dC5maWVsZERlY2xhcmF0aW9uXS4KY2xhc3MgRmllbGREZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0IGV4dGVuZHMgSWRlbnRpZmllckNvbnRleHQgewogIGNvbnN0IEZpZWxkRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCgpCiAgICAgIDogc3VwZXIoJ2ZpZWxkRGVjbGFyYXRpb24nLCBpbkRlY2xhcmF0aW9uOiB0cnVlKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgaWYgKGlkZW50aWZpZXIuaXNJZGVudGlmaWVyKSB7CiAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBpZiAoaXNPbmVPZk9yRW9mKGlkZW50aWZpZXIsIGNvbnN0IFsnOycsICc9JywgJywnLCAnfSddKSB8fAogICAgICAgIGxvb2tzTGlrZVN0YXJ0T2ZOZXh0Q2xhc3NNZW1iZXIoaWRlbnRpZmllcikpIHsKICAgICAgcmV0dXJuIHBhcnNlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuLCB0aGlzKTsKICAgIH0gZWxzZSBpZiAoIWlkZW50aWZpZXIuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgIC8vIFdoZW4gaW4gZG91YnQsIGNvbnN1bWUgdGhlIHRva2VuIHRvIGVuc3VyZSB3ZSBtYWtlIHByb2dyZXNzCiAgICAgIC8vIGJ1dCBpbnNlcnQgYSBzeW50aGV0aWMgaWRlbnRpZmllciB0byBzYXRpc2Z5IGxpc3RlbmVycy4KICAgICAgcmV0dXJuIHBhcnNlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKGlkZW50aWZpZXIsIHRoaXMsCiAgICAgICAgICBtZXNzYWdlOiBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllci53aXRoQXJndW1lbnRzKGlkZW50aWZpZXIpLAogICAgICAgICAgbWVzc2FnZU9uVG9rZW46IGlkZW50aWZpZXIpOwogICAgfSBlbHNlIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllcik7CiAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgfQogIH0KfQoKLy8vIFNlZSBbSWRlbnRpZmllckNvbnRleHQuZmllbGRJbml0aWFsaXplcl0uCmNsYXNzIEZpZWxkSW5pdGlhbGl6ZXJJZGVudGlmaWVyQ29udGV4dCBleHRlbmRzIElkZW50aWZpZXJDb250ZXh0IHsKICBjb25zdCBGaWVsZEluaXRpYWxpemVySWRlbnRpZmllckNvbnRleHQoKQogICAgICA6IHN1cGVyKCdmaWVsZEluaXRpYWxpemVyJywgaXNDb250aW51YXRpb246IHRydWUpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBhc3NlcnQob3B0aW9uYWwoJy4nLCB0b2tlbikpOwogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgaWYgKGlkZW50aWZpZXIuaXNJZGVudGlmaWVyKSB7CiAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllcik7CiAgICAvLyBJbnNlcnQgYSBzeW50aGV0aWMgaWRlbnRpZmllciB0byBzYXRpc2Z5IGxpc3RlbmVycy4KICAgIHJldHVybiBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbik7CiAgfQp9CgovLy8gU2VlIFtJZGVudGlmaWVyQ29udGV4dC5mb3JtYWxQYXJhbWV0ZXJEZWNsYXJhdGlvbl0uCmNsYXNzIEZvcm1hbFBhcmFtZXRlckRlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgRm9ybWFsUGFyYW1ldGVyRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCgpCiAgICAgIDogc3VwZXIoJ2Zvcm1hbFBhcmFtZXRlckRlY2xhcmF0aW9uJywgaW5EZWNsYXJhdGlvbjogdHJ1ZSk7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIGlkZW50aWZpZXIgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGlkZW50aWZpZXIua2luZCAhPSBJREVOVElGSUVSX1RPS0VOKTsKICAgIGlmIChpZGVudGlmaWVyLmlzSWRlbnRpZmllcikgewogICAgICBjaGVja0FzeW5jQXdhaXRZaWVsZEFzSWRlbnRpZmllcihpZGVudGlmaWVyLCBwYXJzZXIpOwogICAgICByZXR1cm4gaWRlbnRpZmllcjsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgY29uc3QgTGlzdDxTdHJpbmc+IGZvbGxvd2luZ1ZhbHVlcyA9IGNvbnN0IFsKICAgICAgJzonLAogICAgICAnPScsCiAgICAgICcsJywKICAgICAgJygnLAogICAgICAnKScsCiAgICAgICdbJywKICAgICAgJ10nLAogICAgICAneycsCiAgICAgICd9JwogICAgXTsKICAgIGlmIChsb29rc0xpa2VTdGFydE9mTmV4dENsYXNzTWVtYmVyKGlkZW50aWZpZXIpIHx8CiAgICAgICAgbG9va3NMaWtlU3RhdGVtZW50U3RhcnQoaWRlbnRpZmllcikgfHwKICAgICAgICBpc09uZU9mT3JFb2YoaWRlbnRpZmllciwgZm9sbG93aW5nVmFsdWVzKSkgewogICAgICBpZGVudGlmaWVyID0gcGFyc2VyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4sIHRoaXMsCiAgICAgICAgICBtZXNzYWdlOiBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllci53aXRoQXJndW1lbnRzKGlkZW50aWZpZXIpKTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIpOwogICAgICBpZiAoIWlkZW50aWZpZXIuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgICAgLy8gV2hlbiBpbiBkb3VidCwgY29uc3VtZSB0aGUgdG9rZW4gdG8gZW5zdXJlIHdlIG1ha2UgcHJvZ3Jlc3MKICAgICAgICAvLyBidXQgaW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgdG8gc2F0aXNmeSBsaXN0ZW5lcnMuCiAgICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5yZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKGlkZW50aWZpZXIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gaWRlbnRpZmllcjsKICB9Cn0KCi8vLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0LmltcG9ydFByZWZpeERlY2xhcmF0aW9uXS4KY2xhc3MgSW1wb3J0UHJlZml4SWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgSW1wb3J0UHJlZml4SWRlbnRpZmllckNvbnRleHQoKQogICAgICA6IHN1cGVyKCdpbXBvcnRQcmVmaXhEZWNsYXJhdGlvbicsCiAgICAgICAgICAgIGluRGVjbGFyYXRpb246IHRydWUsIGlzQnVpbHRJbklkZW50aWZpZXJBbGxvd2VkOiBmYWxzZSk7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIGlkZW50aWZpZXIgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGlkZW50aWZpZXIua2luZCAhPSBJREVOVElGSUVSX1RPS0VOKTsKICAgIGlmIChpZGVudGlmaWVyLnR5cGUuaXNQc2V1ZG8pIHsKICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIGNvbnN0IExpc3Q8U3RyaW5nPiBmb2xsb3dpbmdWYWx1ZXMgPSBjb25zdCBbCiAgICAgICc7JywKICAgICAgJ2lmJywKICAgICAgJ3Nob3cnLAogICAgICAnaGlkZScsCiAgICAgICdkZWZlcnJlZCcsCiAgICAgICdhcycKICAgIF07CiAgICBpZiAoaWRlbnRpZmllci50eXBlLmlzQnVpbHRJbiAmJgogICAgICAgIGlzT25lT2ZPckVvZihpZGVudGlmaWVyLm5leHQsIGZvbGxvd2luZ1ZhbHVlcykpIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUJ1aWx0SW5JZGVudGlmaWVySW5EZWNsYXJhdGlvbik7CiAgICB9IGVsc2UgaWYgKGxvb2tzTGlrZVN0YXJ0T2ZOZXh0VG9wTGV2ZWxEZWNsYXJhdGlvbihpZGVudGlmaWVyKSB8fAogICAgICAgIGlzT25lT2ZPckVvZihpZGVudGlmaWVyLCBmb2xsb3dpbmdWYWx1ZXMpKSB7CiAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbiwgdGhpcywKICAgICAgICAgIG1lc3NhZ2U6IGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyLndpdGhBcmd1bWVudHMoaWRlbnRpZmllcikpOwogICAgfSBlbHNlIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllcik7CiAgICAgIGlmICghaWRlbnRpZmllci5pc0tleXdvcmRPcklkZW50aWZpZXIpIHsKICAgICAgICAvLyBXaGVuIGluIGRvdWJ0LCBjb25zdW1lIHRoZSB0b2tlbiB0byBlbnN1cmUgd2UgbWFrZSBwcm9ncmVzcwogICAgICAgIC8vIGJ1dCBpbnNlcnQgYSBzeW50aGV0aWMgaWRlbnRpZmllciB0byBzYXRpc2Z5IGxpc3RlbmVycy4KICAgICAgICBpZGVudGlmaWVyID0gcGFyc2VyLnJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIoaWRlbnRpZmllcik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBpZGVudGlmaWVyOwogIH0KfQoKY2xhc3MgTGl0ZXJhbFN5bWJvbElkZW50aWZpZXJDb250ZXh0IGV4dGVuZHMgSWRlbnRpZmllckNvbnRleHQgewogIGNvbnN0IExpdGVyYWxTeW1ib2xJZGVudGlmaWVyQ29udGV4dCgpCiAgICAgIDogc3VwZXIoJ2xpdGVyYWxTeW1ib2wnLCBpblN5bWJvbDogdHJ1ZSk7CgogIGNvbnN0IExpdGVyYWxTeW1ib2xJZGVudGlmaWVyQ29udGV4dC5jb250aW51YXRpb24oKQogICAgICA6IHN1cGVyKCdsaXRlcmFsU3ltYm9sQ29udGludWF0aW9uJywKICAgICAgICAgICAgaW5TeW1ib2w6IHRydWUsIGlzQ29udGludWF0aW9uOiB0cnVlKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgaWYgKGlkZW50aWZpZXIuaXNJZGVudGlmaWVyKSB7CiAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICByZXR1cm4gcGFyc2VyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4sIHRoaXMsCiAgICAgICAgbWVzc2FnZTogZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIud2l0aEFyZ3VtZW50cyhpZGVudGlmaWVyKSk7CiAgfQp9CgovLy8gU2VlIFtJZGVudGlmaWVyQ29udGV4dC5sb2NhbEZ1bmN0aW9uRGVjbGFyYXRpb25dCi8vLyBhbmQgW0lkZW50aWZpZXJDb250ZXh0LmxvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbkNvbnRpbnVhdGlvbl0uCmNsYXNzIExvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0IGV4dGVuZHMgSWRlbnRpZmllckNvbnRleHQgewogIGNvbnN0IExvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KCkKICAgICAgOiBzdXBlcignbG9jYWxGdW5jdGlvbkRlY2xhcmF0aW9uJywgaW5EZWNsYXJhdGlvbjogdHJ1ZSk7CgogIGNvbnN0IExvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0LmNvbnRpbnVhdGlvbigpCiAgICAgIDogc3VwZXIoJ2xvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbkNvbnRpbnVhdGlvbicsCiAgICAgICAgICAgIGluRGVjbGFyYXRpb246IHRydWUsIGlzQ29udGludWF0aW9uOiB0cnVlKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgaWYgKGlkZW50aWZpZXIuaXNJZGVudGlmaWVyKSB7CiAgICAgIGNoZWNrQXN5bmNBd2FpdFlpZWxkQXNJZGVudGlmaWVyKGlkZW50aWZpZXIsIHBhcnNlcik7CiAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBpZiAoaXNPbmVPZk9yRW9mKGlkZW50aWZpZXIsIGNvbnN0IFsnLicsICcoJywgJ3snLCAnPT4nXSkgfHwKICAgICAgICBsb29rc0xpa2VTdGF0ZW1lbnRTdGFydChpZGVudGlmaWVyKSkgewogICAgICBpZGVudGlmaWVyID0gcGFyc2VyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4sIHRoaXMsCiAgICAgICAgICBtZXNzYWdlOiBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllci53aXRoQXJndW1lbnRzKGlkZW50aWZpZXIpKTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIpOwogICAgICBpZiAoIWlkZW50aWZpZXIuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgICAgLy8gV2hlbiBpbiBkb3VidCwgY29uc3VtZSB0aGUgdG9rZW4gdG8gZW5zdXJlIHdlIG1ha2UgcHJvZ3Jlc3MKICAgICAgICAvLyBidXQgaW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgdG8gc2F0aXNmeSBsaXN0ZW5lcnMuCiAgICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5yZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKGlkZW50aWZpZXIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gaWRlbnRpZmllcjsKICB9Cn0KCi8vLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0LmxhYmVsRGVjbGFyYXRpb25dLgpjbGFzcyBMYWJlbERlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgTGFiZWxEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KCkKICAgICAgOiBzdXBlcignbGFiZWxEZWNsYXJhdGlvbicsIGluRGVjbGFyYXRpb246IHRydWUpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBpZGVudGlmaWVyID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGlmaWVyLmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTik7CiAgICBpZiAoaWRlbnRpZmllci5pc0lkZW50aWZpZXIpIHsKICAgICAgY2hlY2tBc3luY0F3YWl0WWllbGRBc0lkZW50aWZpZXIoaWRlbnRpZmllciwgcGFyc2VyKTsKICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIGlmIChpc09uZU9mT3JFb2YoaWRlbnRpZmllciwgY29uc3QgWyc6J10pIHx8CiAgICAgICAgbG9va3NMaWtlU3RhdGVtZW50U3RhcnQoaWRlbnRpZmllcikpIHsKICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuLCB0aGlzLAogICAgICAgICAgbWVzc2FnZTogZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIud2l0aEFyZ3VtZW50cyhpZGVudGlmaWVyKSk7CiAgICB9IGVsc2UgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyKTsKICAgICAgaWYgKCFpZGVudGlmaWVyLmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICAgIC8vIFdoZW4gaW4gZG91YnQsIGNvbnN1bWUgdGhlIHRva2VuIHRvIGVuc3VyZSB3ZSBtYWtlIHByb2dyZXNzCiAgICAgICAgLy8gYnV0IGluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIHRvIHNhdGlzZnkgbGlzdGVuZXJzLgogICAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcihpZGVudGlmaWVyKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgfQp9CgovLy8gU2VlIFtJZGVudGlmaWVyQ29udGV4dC5sYWJlbFJlZmVyZW5jZV0uCmNsYXNzIExhYmVsUmVmZXJlbmNlSWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgTGFiZWxSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dCgpIDogc3VwZXIoJ2xhYmVsUmVmZXJlbmNlJyk7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIGlkZW50aWZpZXIgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGlkZW50aWZpZXIua2luZCAhPSBJREVOVElGSUVSX1RPS0VOKTsKICAgIGlmIChpZGVudGlmaWVyLmlzSWRlbnRpZmllcikgewogICAgICBjaGVja0FzeW5jQXdhaXRZaWVsZEFzSWRlbnRpZmllcihpZGVudGlmaWVyLCBwYXJzZXIpOwogICAgICByZXR1cm4gaWRlbnRpZmllcjsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgaWYgKGlzT25lT2ZPckVvZihpZGVudGlmaWVyLCBjb25zdCBbJzsnXSkpIHsKICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuLCB0aGlzLAogICAgICAgICAgbWVzc2FnZTogZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIud2l0aEFyZ3VtZW50cyhpZGVudGlmaWVyKSk7CiAgICB9IGVsc2UgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyKTsKICAgICAgaWYgKCFpZGVudGlmaWVyLmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICAgIC8vIFdoZW4gaW4gZG91YnQsIGNvbnN1bWUgdGhlIHRva2VuIHRvIGVuc3VyZSB3ZSBtYWtlIHByb2dyZXNzCiAgICAgICAgLy8gYnV0IGluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIHRvIHNhdGlzZnkgbGlzdGVuZXJzLgogICAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcihpZGVudGlmaWVyKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgfQp9CgovLy8gU2VlIFtJZGVudGlmaWVyQ29udGV4dC5saWJyYXJ5TmFtZV0sCi8vLyBhbmQgW0lkZW50aWZpZXJDb250ZXh0LmxpYnJhcnlOYW1lQ29udGludWF0aW9uXQovLy8gYW5kIFtJZGVudGlmaWVyQ29udGV4dC5wYXJ0TmFtZV0sCi8vLyBhbmQgW0lkZW50aWZpZXJDb250ZXh0LnBhcnROYW1lQ29udGludWF0aW9uXS4KY2xhc3MgTGlicmFyeUlkZW50aWZpZXJDb250ZXh0IGV4dGVuZHMgSWRlbnRpZmllckNvbnRleHQgewogIGNvbnN0IExpYnJhcnlJZGVudGlmaWVyQ29udGV4dCgpCiAgICAgIDogc3VwZXIoJ2xpYnJhcnlOYW1lJywgaW5MaWJyYXJ5T3JQYXJ0T2ZEZWNsYXJhdGlvbjogdHJ1ZSk7CgogIGNvbnN0IExpYnJhcnlJZGVudGlmaWVyQ29udGV4dC5jb250aW51YXRpb24oKQogICAgICA6IHN1cGVyKCdsaWJyYXJ5TmFtZUNvbnRpbnVhdGlvbicsCiAgICAgICAgICAgIGluTGlicmFyeU9yUGFydE9mRGVjbGFyYXRpb246IHRydWUsIGlzQ29udGludWF0aW9uOiB0cnVlKTsKCiAgY29uc3QgTGlicmFyeUlkZW50aWZpZXJDb250ZXh0LnBhcnROYW1lKCkKICAgICAgOiBzdXBlcigncGFydE5hbWUnLCBpbkxpYnJhcnlPclBhcnRPZkRlY2xhcmF0aW9uOiB0cnVlKTsKCiAgY29uc3QgTGlicmFyeUlkZW50aWZpZXJDb250ZXh0LnBhcnROYW1lQ29udGludWF0aW9uKCkKICAgICAgOiBzdXBlcigncGFydE5hbWVDb250aW51YXRpb24nLAogICAgICAgICAgICBpbkxpYnJhcnlPclBhcnRPZkRlY2xhcmF0aW9uOiB0cnVlLCBpc0NvbnRpbnVhdGlvbjogdHJ1ZSk7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIGlkZW50aWZpZXIgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGlkZW50aWZpZXIua2luZCAhPSBJREVOVElGSUVSX1RPS0VOKTsKICAgIGNvbnN0IExpc3Q8U3RyaW5nPiBmb2xsb3dpbmdWYWx1ZXMgPSBjb25zdCBbJy4nLCAnOyddOwoKICAgIGlmIChpZGVudGlmaWVyLmlzSWRlbnRpZmllcikgewogICAgICBUb2tlbiBuZXh0ID0gaWRlbnRpZmllci5uZXh0OwogICAgICBpZiAoIWxvb2tzTGlrZVN0YXJ0T2ZOZXh0VG9wTGV2ZWxEZWNsYXJhdGlvbihpZGVudGlmaWVyKSB8fAogICAgICAgICAgaXNPbmVPZk9yRW9mKG5leHQsIGZvbGxvd2luZ1ZhbHVlcykpIHsKICAgICAgICByZXR1cm4gaWRlbnRpZmllcjsKICAgICAgfQogICAgICAvLyBBbHRob3VnaCB0aGlzIGlzIGEgdmFsaWQgbGlicmFyeSBuYW1lLCB0aGUgbGlicmFyeSBkZWNsYXJhdGlvbgogICAgICAvLyBpcyBpbnZhbGlkIGFuZCB0aGlzIGxvb2tzIGxpa2UgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGRlY2xhcmF0aW9uLgogICAgICAvLyBJbiB0aGlzIHNpdHVhdGlvbiwgZmFsbCB0aHJvdWdoIHRvIGluc2VydCBhIHN5bnRoZXRpYyBsaWJyYXJ5IG5hbWUuCiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIGlmIChpc09uZU9mT3JFb2YoaWRlbnRpZmllciwgZm9sbG93aW5nVmFsdWVzKSB8fAogICAgICAgIGxvb2tzTGlrZVN0YXJ0T2ZOZXh0VG9wTGV2ZWxEZWNsYXJhdGlvbihpZGVudGlmaWVyKSkgewogICAgICBpZGVudGlmaWVyID0gcGFyc2VyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4sIHRoaXMsCiAgICAgICAgICBtZXNzYWdlOiBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllci53aXRoQXJndW1lbnRzKGlkZW50aWZpZXIpKTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIpOwogICAgICBpZiAoIWlkZW50aWZpZXIuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgICAgLy8gV2hlbiBpbiBkb3VidCwgY29uc3VtZSB0aGUgdG9rZW4gdG8gZW5zdXJlIHdlIG1ha2UgcHJvZ3Jlc3MKICAgICAgICAvLyBidXQgaW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgdG8gc2F0aXNmeSBsaXN0ZW5lcnMuCiAgICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5yZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKGlkZW50aWZpZXIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gaWRlbnRpZmllcjsKICB9Cn0KCi8vLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0LmxvY2FsVmFyaWFibGVEZWNsYXJhdGlvbl0uCmNsYXNzIExvY2FsVmFyaWFibGVEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0IGV4dGVuZHMgSWRlbnRpZmllckNvbnRleHQgewogIGNvbnN0IExvY2FsVmFyaWFibGVEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KCkKICAgICAgOiBzdXBlcignbG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uJywgaW5EZWNsYXJhdGlvbjogdHJ1ZSk7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIGlkZW50aWZpZXIgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGlkZW50aWZpZXIua2luZCAhPSBJREVOVElGSUVSX1RPS0VOKTsKICAgIGlmIChpZGVudGlmaWVyLmlzSWRlbnRpZmllcikgewogICAgICBjaGVja0FzeW5jQXdhaXRZaWVsZEFzSWRlbnRpZmllcihpZGVudGlmaWVyLCBwYXJzZXIpOwogICAgICByZXR1cm4gaWRlbnRpZmllcjsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgaWYgKGlzT25lT2ZPckVvZihpZGVudGlmaWVyLCBjb25zdCBbJzsnLCAnPScsICcsJywgJ3snLCAnfSddKSB8fAogICAgICAgIGxvb2tzTGlrZVN0YXRlbWVudFN0YXJ0KGlkZW50aWZpZXIpIHx8CiAgICAgICAgaWRlbnRpZmllci5raW5kID09IFNUUklOR19UT0tFTikgewogICAgICBpZGVudGlmaWVyID0gcGFyc2VyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4sIHRoaXMsCiAgICAgICAgICBtZXNzYWdlOiBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllci53aXRoQXJndW1lbnRzKGlkZW50aWZpZXIpKTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIpOwogICAgICBpZiAoIWlkZW50aWZpZXIuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgICAgLy8gV2hlbiBpbiBkb3VidCwgY29uc3VtZSB0aGUgdG9rZW4gdG8gZW5zdXJlIHdlIG1ha2UgcHJvZ3Jlc3MKICAgICAgICAvLyBidXQgaW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgdG8gc2F0aXNmeSBsaXN0ZW5lcnMuCiAgICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5yZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKGlkZW50aWZpZXIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gaWRlbnRpZmllcjsKICB9Cn0KCi8vLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0Lm1ldGFkYXRhUmVmZXJlbmNlXQovLy8gYW5kIFtJZGVudGlmaWVyQ29udGV4dC5tZXRhZGF0YUNvbnRpbnVhdGlvbl0KLy8vIGFuZCBbSWRlbnRpZmllckNvbnRleHQubWV0YWRhdGFDb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHNdLgpjbGFzcyBNZXRhZGF0YVJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0IGV4dGVuZHMgSWRlbnRpZmllckNvbnRleHQgewogIGNvbnN0IE1ldGFkYXRhUmVmZXJlbmNlSWRlbnRpZmllckNvbnRleHQoKQogICAgICA6IHN1cGVyKCdtZXRhZGF0YVJlZmVyZW5jZScsIGlzU2NvcGVSZWZlcmVuY2U6IHRydWUpOwoKICBjb25zdCBNZXRhZGF0YVJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0LmNvbnRpbnVhdGlvbigpCiAgICAgIDogc3VwZXIoJ21ldGFkYXRhQ29udGludWF0aW9uJywgaXNDb250aW51YXRpb246IHRydWUpOwoKICBjb25zdCBNZXRhZGF0YVJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0LmNvbnRpbnVhdGlvbkFmdGVyVHlwZUFyZ3VtZW50cygpCiAgICAgIDogc3VwZXIoJ21ldGFkYXRhQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzJywgaXNDb250aW51YXRpb246IHRydWUpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBpZGVudGlmaWVyID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGlmaWVyLmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTik7CiAgICBpZiAoaWRlbnRpZmllci5pc0lkZW50aWZpZXIpIHsKICAgICAgY2hlY2tBc3luY0F3YWl0WWllbGRBc0lkZW50aWZpZXIoaWRlbnRpZmllciwgcGFyc2VyKTsKICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIGlmIChpc09uZU9mT3JFb2YoaWRlbnRpZmllciwgY29uc3QgWyd7JywgJ30nLCAnKCcsICcpJywgJ10nXSkgfHwKICAgICAgICBsb29rc0xpa2VTdGFydE9mTmV4dFRvcExldmVsRGVjbGFyYXRpb24oaWRlbnRpZmllcikgfHwKICAgICAgICBsb29rc0xpa2VTdGFydE9mTmV4dENsYXNzTWVtYmVyKGlkZW50aWZpZXIpIHx8CiAgICAgICAgbG9va3NMaWtlU3RhdGVtZW50U3RhcnQoaWRlbnRpZmllcikpIHsKICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuLCB0aGlzLAogICAgICAgICAgbWVzc2FnZTogZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIud2l0aEFyZ3VtZW50cyhpZGVudGlmaWVyKSk7CiAgICB9IGVsc2UgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyKTsKICAgICAgaWYgKCFpZGVudGlmaWVyLmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICAgIC8vIFdoZW4gaW4gZG91YnQsIGNvbnN1bWUgdGhlIHRva2VuIHRvIGVuc3VyZSB3ZSBtYWtlIHByb2dyZXNzCiAgICAgICAgLy8gYnV0IGluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIHRvIHNhdGlzZnkgbGlzdGVuZXJzLgogICAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcihpZGVudGlmaWVyKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgfQp9CgovLy8gU2VlIFtJZGVudGlmaWVyQ29udGV4dC5tZXRob2REZWNsYXJhdGlvbl0sCi8vLyBhbmQgW0lkZW50aWZpZXJDb250ZXh0Lm1ldGhvZERlY2xhcmF0aW9uQ29udGludWF0aW9uXSwKLy8vIGFuZCBbSWRlbnRpZmllckNvbnRleHQub3BlcmF0b3JOYW1lXS4KY2xhc3MgTWV0aG9kRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCBleHRlbmRzIElkZW50aWZpZXJDb250ZXh0IHsKICBjb25zdCBNZXRob2REZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KCkKICAgICAgOiBzdXBlcignbWV0aG9kRGVjbGFyYXRpb24nLCBpbkRlY2xhcmF0aW9uOiB0cnVlKTsKCiAgY29uc3QgTWV0aG9kRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dC5jb250aW51YXRpb24oKQogICAgICA6IHN1cGVyKCdtZXRob2REZWNsYXJhdGlvbkNvbnRpbnVhdGlvbicsCiAgICAgICAgICAgIGluRGVjbGFyYXRpb246IHRydWUsIGlzQ29udGludWF0aW9uOiB0cnVlKTsKCiAgY29uc3QgTWV0aG9kRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dC5vcGVyYXRvck5hbWUoKQogICAgICA6IHN1cGVyKCdvcGVyYXRvck5hbWUnLCBpbkRlY2xhcmF0aW9uOiB0cnVlKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgaWYgKGlkZW50aWZpZXIuaXNJZGVudGlmaWVyKSB7CiAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBpZiAoaWRlbnRpZmllci5pc1VzZXJEZWZpbmFibGVPcGVyYXRvciAmJiAhaXNDb250aW51YXRpb24pIHsKICAgICAgcmV0dXJuIHBhcnNlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKGlkZW50aWZpZXIsIHRoaXMsCiAgICAgICAgICBtZXNzYWdlOiBmYXN0YS5tZXNzYWdlTWlzc2luZ09wZXJhdG9yS2V5d29yZCwKICAgICAgICAgIG1lc3NhZ2VPblRva2VuOiBpZGVudGlmaWVyKTsKICAgIH0gZWxzZSBpZiAoaXNPbmVPZk9yRW9mKGlkZW50aWZpZXIsIGNvbnN0IFsnLicsICcoJywgJ3snLCAnPT4nLCAnfSddKSB8fAogICAgICAgIGxvb2tzTGlrZVN0YXJ0T2ZOZXh0Q2xhc3NNZW1iZXIoaWRlbnRpZmllcikpIHsKICAgICAgcmV0dXJuIHBhcnNlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuLCB0aGlzKTsKICAgIH0gZWxzZSBpZiAoIWlkZW50aWZpZXIuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgIC8vIFdoZW4gaW4gZG91YnQsIGNvbnN1bWUgdGhlIHRva2VuIHRvIGVuc3VyZSB3ZSBtYWtlIHByb2dyZXNzCiAgICAgIC8vIGJ1dCBpbnNlcnQgYSBzeW50aGV0aWMgaWRlbnRpZmllciB0byBzYXRpc2Z5IGxpc3RlbmVycy4KICAgICAgcmV0dXJuIHBhcnNlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKGlkZW50aWZpZXIsIHRoaXMsCiAgICAgICAgICBtZXNzYWdlOiBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllci53aXRoQXJndW1lbnRzKGlkZW50aWZpZXIpLAogICAgICAgICAgbWVzc2FnZU9uVG9rZW46IGlkZW50aWZpZXIpOwogICAgfSBlbHNlIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllcik7CiAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgfQogIH0KfQoKLy8vIFNlZSBbSWRlbnRpZmllckNvbnRleHQubmFtZWRBcmd1bWVudFJlZmVyZW5jZV0uCmNsYXNzIE5hbWVkQXJndW1lbnRSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dCBleHRlbmRzIElkZW50aWZpZXJDb250ZXh0IHsKICBjb25zdCBOYW1lZEFyZ3VtZW50UmVmZXJlbmNlSWRlbnRpZmllckNvbnRleHQoKQogICAgICA6IHN1cGVyKCduYW1lZEFyZ3VtZW50UmVmZXJlbmNlJywgYWxsb3dlZEluQ29uc3RhbnRFeHByZXNzaW9uOiB0cnVlKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgaWYgKGlkZW50aWZpZXIuaXNJZGVudGlmaWVyKSB7CiAgICAgIGNoZWNrQXN5bmNBd2FpdFlpZWxkQXNJZGVudGlmaWVyKGlkZW50aWZpZXIsIHBhcnNlcik7CiAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBpZiAoaXNPbmVPZk9yRW9mKGlkZW50aWZpZXIsIGNvbnN0IFsnOiddKSkgewogICAgICBpZGVudGlmaWVyID0gcGFyc2VyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4sIHRoaXMsCiAgICAgICAgICBtZXNzYWdlOiBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllci53aXRoQXJndW1lbnRzKGlkZW50aWZpZXIpKTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIpOwogICAgICBpZiAoIWlkZW50aWZpZXIuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgICAgLy8gV2hlbiBpbiBkb3VidCwgY29uc3VtZSB0aGUgdG9rZW4gdG8gZW5zdXJlIHdlIG1ha2UgcHJvZ3Jlc3MKICAgICAgICAvLyBidXQgaW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgdG8gc2F0aXNmeSBsaXN0ZW5lcnMuCiAgICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5yZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKGlkZW50aWZpZXIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gaWRlbnRpZmllcjsKICB9Cn0KCi8vLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0LnRvcExldmVsRnVuY3Rpb25EZWNsYXJhdGlvbl0KLy8vIGFuZCBbSWRlbnRpZmllckNvbnRleHQudG9wTGV2ZWxWYXJpYWJsZURlY2xhcmF0aW9uXS4KY2xhc3MgVG9wTGV2ZWxEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0IGV4dGVuZHMgSWRlbnRpZmllckNvbnRleHQgewogIGZpbmFsIExpc3Q8U3RyaW5nPiBmb2xsb3dpbmdWYWx1ZXM7CgogIGNvbnN0IFRvcExldmVsRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dChTdHJpbmcgbmFtZSwgdGhpcy5mb2xsb3dpbmdWYWx1ZXMpCiAgICAgIDogc3VwZXIobmFtZSwgaW5EZWNsYXJhdGlvbjogdHJ1ZSk7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIGlkZW50aWZpZXIgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGlkZW50aWZpZXIua2luZCAhPSBJREVOVElGSUVSX1RPS0VOKTsKCiAgICBpZiAoaWRlbnRpZmllci5pc0lkZW50aWZpZXIpIHsKICAgICAgVG9rZW4gbmV4dCA9IGlkZW50aWZpZXIubmV4dDsKICAgICAgaWYgKCFsb29rc0xpa2VTdGFydE9mTmV4dFRvcExldmVsRGVjbGFyYXRpb24oaWRlbnRpZmllcikgfHwKICAgICAgICAgIGlzT25lT2ZPckVvZihuZXh0LCBmb2xsb3dpbmdWYWx1ZXMpKSB7CiAgICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICAgIH0KICAgICAgLy8gQWx0aG91Z2ggdGhpcyBpcyBhIHZhbGlkIHRvcCBsZXZlbCBuYW1lLCB0aGUgZGVjbGFyYXRpb24KICAgICAgLy8gaXMgaW52YWxpZCBhbmQgdGhpcyBsb29rcyBsaWtlIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBkZWNsYXJhdGlvbi4KICAgICAgLy8gSW4gdGhpcyBzaXR1YXRpb24sIGZhbGwgdGhyb3VnaCB0byBpbnNlcnQgYSBzeW50aGV0aWMgbmFtZS4KICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgaWYgKGxvb2tzTGlrZVN0YXJ0T2ZOZXh0VG9wTGV2ZWxEZWNsYXJhdGlvbihpZGVudGlmaWVyKSB8fAogICAgICAgIGlzT25lT2ZPckVvZihpZGVudGlmaWVyLCBmb2xsb3dpbmdWYWx1ZXMpKSB7CiAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbiwgdGhpcywKICAgICAgICAgIG1lc3NhZ2U6IGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyLndpdGhBcmd1bWVudHMoaWRlbnRpZmllcikpOwogICAgfSBlbHNlIGlmIChpZGVudGlmaWVyLnR5cGUuaXNCdWlsdEluKSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVCdWlsdEluSWRlbnRpZmllckluRGVjbGFyYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllcik7CiAgICAgIGlmICghaWRlbnRpZmllci5pc0tleXdvcmRPcklkZW50aWZpZXIpIHsKICAgICAgICAvLyBXaGVuIGluIGRvdWJ0LCBjb25zdW1lIHRoZSB0b2tlbiB0byBlbnN1cmUgd2UgbWFrZSBwcm9ncmVzcwogICAgICAgIC8vIGJ1dCBpbnNlcnQgYSBzeW50aGV0aWMgaWRlbnRpZmllciB0byBzYXRpc2Z5IGxpc3RlbmVycy4KICAgICAgICBpZGVudGlmaWVyID0gcGFyc2VyLnJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIoaWRlbnRpZmllcik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBpZGVudGlmaWVyOwogIH0KfQoKLy8vIFNlZSBbSWRlbnRpZmllckNvbnRleHQudHlwZWRlZkRlY2xhcmF0aW9uXS4KY2xhc3MgVHlwZWRlZkRlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgVHlwZWRlZkRlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQoKQogICAgICA6IHN1cGVyKCd0eXBlZGVmRGVjbGFyYXRpb24nLAogICAgICAgICAgICBpbkRlY2xhcmF0aW9uOiB0cnVlLCBpc0J1aWx0SW5JZGVudGlmaWVyQWxsb3dlZDogZmFsc2UpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBpZGVudGlmaWVyID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGlmaWVyLmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTik7CiAgICBpZiAoaWRlbnRpZmllci50eXBlLmlzUHNldWRvKSB7CiAgICAgIGlmIChvcHRpb25hbCgnRnVuY3Rpb24nLCBpZGVudGlmaWVyKSkgewogICAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllcik7CiAgICAgIH0KICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIGNvbnN0IExpc3Q8U3RyaW5nPiBmb2xsb3dpbmdWYWx1ZXMgPSBjb25zdCBbJygnLCAnPCcsICc9JywgJzsnXTsKICAgIGlmIChpZGVudGlmaWVyLnR5cGUuaXNCdWlsdEluICYmCiAgICAgICAgaXNPbmVPZk9yRW9mKGlkZW50aWZpZXIubmV4dCwgZm9sbG93aW5nVmFsdWVzKSkgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlQnVpbHRJbklkZW50aWZpZXJJbkRlY2xhcmF0aW9uKTsKICAgIH0gZWxzZSBpZiAobG9va3NMaWtlU3RhcnRPZk5leHRUb3BMZXZlbERlY2xhcmF0aW9uKGlkZW50aWZpZXIpIHx8CiAgICAgICAgaXNPbmVPZk9yRW9mKGlkZW50aWZpZXIsIGZvbGxvd2luZ1ZhbHVlcykpIHsKICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuLCB0aGlzLAogICAgICAgICAgbWVzc2FnZTogZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIud2l0aEFyZ3VtZW50cyhpZGVudGlmaWVyKSk7CiAgICB9IGVsc2UgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyKTsKICAgICAgaWYgKCFpZGVudGlmaWVyLmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICAgIC8vIFdoZW4gaW4gZG91YnQsIGNvbnN1bWUgdGhlIHRva2VuIHRvIGVuc3VyZSB3ZSBtYWtlIHByb2dyZXNzCiAgICAgICAgLy8gYnV0IGluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIHRvIHNhdGlzZnkgbGlzdGVuZXJzLgogICAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcihpZGVudGlmaWVyKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgfQp9CgovLy8gU2VlIFtJZGVudGlmaWVyQ29udGV4dC50eXBlUmVmZXJlbmNlXS4KY2xhc3MgVHlwZVJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0IGV4dGVuZHMgSWRlbnRpZmllckNvbnRleHQgewogIGNvbnN0IFR5cGVSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dCgpCiAgICAgIDogc3VwZXIoJ3R5cGVSZWZlcmVuY2UnLAogICAgICAgICAgICBpc1Njb3BlUmVmZXJlbmNlOiB0cnVlLAogICAgICAgICAgICBpc0J1aWx0SW5JZGVudGlmaWVyQWxsb3dlZDogZmFsc2UsCiAgICAgICAgICAgIHJlY292ZXJ5VGVtcGxhdGU6IGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRUeXBlKTsKCiAgY29uc3QgVHlwZVJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0LmNvbnRpbnVhdGlvbigpCiAgICAgIDogc3VwZXIoJ3R5cGVSZWZlcmVuY2VDb250aW51YXRpb24nLAogICAgICAgICAgICBpc0NvbnRpbnVhdGlvbjogdHJ1ZSwgaXNCdWlsdEluSWRlbnRpZmllckFsbG93ZWQ6IGZhbHNlKTsKCiAgY29uc3QgVHlwZVJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0LnByZWZpeGVkKCkKICAgICAgOiBzdXBlcigncHJlZml4ZWRUeXBlUmVmZXJlbmNlJywKICAgICAgICAgICAgaXNTY29wZVJlZmVyZW5jZTogdHJ1ZSwKICAgICAgICAgICAgaXNCdWlsdEluSWRlbnRpZmllckFsbG93ZWQ6IHRydWUsCiAgICAgICAgICAgIHJlY292ZXJ5VGVtcGxhdGU6IGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRUeXBlKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQobmV4dC5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgaWYgKGlzVmFsaWRUeXBlUmVmZXJlbmNlKG5leHQpKSB7CiAgICAgIHJldHVybiBuZXh0OwogICAgfSBlbHNlIGlmIChuZXh0LmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICBpZiAob3B0aW9uYWwoInZvaWQiLCBuZXh0KSkgewogICAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VJbnZhbGlkVm9pZCk7CiAgICAgIH0gZWxzZSBpZiAobmV4dC50eXBlLmlzQnVpbHRJbikgewogICAgICAgIGlmICghaXNCdWlsdEluSWRlbnRpZmllckFsbG93ZWQpIHsKICAgICAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgICAgIG5leHQsIGZhc3RhLnRlbXBsYXRlQnVpbHRJbklkZW50aWZpZXJBc1R5cGUpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChvcHRpb25hbCgndmFyJywgbmV4dCkpIHsKICAgICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlVmFyQXNUeXBlTmFtZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICAgIG5leHQsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRUeXBlKTsKICAgICAgfQogICAgICByZXR1cm4gbmV4dDsKICAgIH0KICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKG5leHQsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRUeXBlKTsKICAgIGlmICghaXNPbmVPZk9yRW9mKAogICAgICAgIG5leHQsIGNvbnN0IFsnPCcsICc+JywgJyknLCAnWycsICddJywgJ1tdJywgJ3snLCAnfScsICcsJywgJzsnXSkpIHsKICAgICAgLy8gV2hlbiBpbiBkb3VidCwgY29uc3VtZSB0aGUgdG9rZW4gdG8gZW5zdXJlIHdlIG1ha2UgcHJvZ3Jlc3MKICAgICAgdG9rZW4gPSBuZXh0OwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIH0KICAgIC8vIEluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIHRvIHNhdGlzZnkgbGlzdGVuZXJzLgogICAgcmV0dXJuIHBhcnNlci5yZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuKTsKICB9Cn0KCi8vIFNlZSBbSWRlbnRpZmllckNvbnRleHQudHlwZVZhcmlhYmxlRGVjbGFyYXRpb25dLgpjbGFzcyBUeXBlVmFyaWFibGVEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0IGV4dGVuZHMgSWRlbnRpZmllckNvbnRleHQgewogIGNvbnN0IFR5cGVWYXJpYWJsZURlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQoKQogICAgICA6IHN1cGVyKCd0eXBlVmFyaWFibGVEZWNsYXJhdGlvbicsCiAgICAgICAgICAgIGluRGVjbGFyYXRpb246IHRydWUsIGlzQnVpbHRJbklkZW50aWZpZXJBbGxvd2VkOiBmYWxzZSk7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIGlkZW50aWZpZXIgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGlkZW50aWZpZXIua2luZCAhPSBJREVOVElGSUVSX1RPS0VOKTsKICAgIGlmIChpZGVudGlmaWVyLnR5cGUuaXNQc2V1ZG8pIHsKICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIGNvbnN0IExpc3Q8U3RyaW5nPiBmb2xsb3dpbmdWYWx1ZXMgPSBjb25zdCBbCiAgICAgICc8JywKICAgICAgJz4nLAogICAgICAnOycsCiAgICAgICd9JywKICAgICAgJ2V4dGVuZHMnLAogICAgICAnc3VwZXInCiAgICBdOwogICAgaWYgKGxvb2tzTGlrZVN0YXJ0T2ZOZXh0VG9wTGV2ZWxEZWNsYXJhdGlvbihpZGVudGlmaWVyKSB8fAogICAgICAgIGxvb2tzTGlrZVN0YXJ0T2ZOZXh0Q2xhc3NNZW1iZXIoaWRlbnRpZmllcikgfHwKICAgICAgICBsb29rc0xpa2VTdGF0ZW1lbnRTdGFydChpZGVudGlmaWVyKSB8fAogICAgICAgIGlzT25lT2ZPckVvZihpZGVudGlmaWVyLCBmb2xsb3dpbmdWYWx1ZXMpKSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIpOwogICAgICBpZGVudGlmaWVyID0gcGFyc2VyLnJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4pOwogICAgfSBlbHNlIGlmIChpZGVudGlmaWVyLnR5cGUuaXNCdWlsdEluKSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVCdWlsdEluSWRlbnRpZmllckluRGVjbGFyYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllcik7CiAgICAgIGlmICghaWRlbnRpZmllci5pc0tleXdvcmRPcklkZW50aWZpZXIpIHsKICAgICAgICAvLyBXaGVuIGluIGRvdWJ0LCBjb25zdW1lIHRoZSB0b2tlbiB0byBlbnN1cmUgd2UgbWFrZSBwcm9ncmVzcwogICAgICAgIC8vIGJ1dCBpbnNlcnQgYSBzeW50aGV0aWMgaWRlbnRpZmllciB0byBzYXRpc2Z5IGxpc3RlbmVycy4KICAgICAgICBpZGVudGlmaWVyID0gcGFyc2VyLnJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIoaWRlbnRpZmllcik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBpZGVudGlmaWVyOwogIH0KfQoKdm9pZCBjaGVja0FzeW5jQXdhaXRZaWVsZEFzSWRlbnRpZmllcihUb2tlbiBpZGVudGlmaWVyLCBQYXJzZXIgcGFyc2VyKSB7CiAgaWYgKCFwYXJzZXIuaW5QbGFpblN5bmMgJiYgaWRlbnRpZmllci50eXBlLmlzUHNldWRvKSB7CiAgICBpZiAob3B0aW9uYWwoJ2F3YWl0JywgaWRlbnRpZmllcikpIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IoaWRlbnRpZmllciwgZmFz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YW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5qc19lbWl0dGVyLnByb2dyYW1fYnVpbGRlcjsKCmltcG9ydCAnZGFydDppbyc7CmltcG9ydCAnZGFydDpjb252ZXJ0JyBzaG93IGpzb25EZWNvZGU7CgppbXBvcnQgJy4uLy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9jb21tb24vbmFtZXMuZGFydCcgc2hvdyBOYW1lcywgU2VsZWN0b3JzOwppbXBvcnQgJy4uLy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCcKICAgIHNob3cgQ29uc3RhbnRWYWx1ZSwgSW50ZXJjZXB0b3JDb25zdGFudFZhbHVlOwppbXBvcnQgJy4uLy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IEpDb21tb25FbGVtZW50cywgSkVsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICcuLi8uLi9kZWZlcnJlZF9sb2FkLmRhcnQnCiAgICBzaG93IGRlZmVycmVkUGFydEZpbGVOYW1lLCBPdXRwdXRVbml0LCBPdXRwdXRVbml0RGF0YTsKaW1wb3J0ICcuLi8uLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9pby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydCc7CmltcG9ydCAnLi4vLi4vanMvanMuZGFydCcgYXMganM7CmltcG9ydCAnLi4vLi4vanNfYmFja2VuZC9maWVsZF9hbmFseXNpcy5kYXJ0JwogICAgc2hvdyBGaWVsZEFuYWx5c2lzRGF0YSwgSkZpZWxkQW5hbHlzaXM7CmltcG9ydCAnLi4vLi4vanNfYmFja2VuZC9iYWNrZW5kX3VzYWdlLmRhcnQnOwppbXBvcnQgJy4uLy4uL2pzX2JhY2tlbmQvY3VzdG9tX2VsZW1lbnRzX2FuYWx5c2lzLmRhcnQnOwppbXBvcnQgJy4uLy4uL2pzX2JhY2tlbmQvaW5mZXJyZWRfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9qc19iYWNrZW5kL2ludGVyY2VwdG9yX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vLi4vanNfYmFja2VuZC9uYW1lci5kYXJ0JyBzaG93IE5hbWVyLCBTdHJpbmdCYWNrZWROYW1lOwppbXBvcnQgJy4uLy4uL2pzX2JhY2tlbmQvbmF0aXZlX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzLmRhcnQnCiAgICBzaG93IFJ1bnRpbWVUeXBlc0NoZWNrcywgUnVudGltZVR5cGVzRW5jb2RlcjsKaW1wb3J0ICcuLi8uLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfbmV3LmRhcnQnCiAgICBzaG93IFJlY2lwZUVuY29kZXIsIFJlY2lwZUVuY29kaW5nOwppbXBvcnQgJy4uLy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19yZXNvbHV0aW9uLmRhcnQnIHNob3cgUnVudGltZVR5cGVzTmVlZDsKaW1wb3J0ICcuLi8uLi9qc19tb2RlbC9lbGVtZW50cy5kYXJ0JyBzaG93IEpHZW5lcmF0b3JCb2R5LCBKU2lnbmF0dXJlTWV0aG9kOwppbXBvcnQgJy4uLy4uL2pzX21vZGVsL3R5cGVfcmVjaXBlLmRhcnQnCiAgICBzaG93IEZ1bGxUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUsIFR5cGVFeHByZXNzaW9uUmVjaXBlOwppbXBvcnQgJy4uLy4uL25hdGl2ZS9lbnF1ZXVlLmRhcnQnIHNob3cgTmF0aXZlQ29kZWdlbkVucXVldWVyOwppbXBvcnQgJy4uLy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vLi4vdW5pdmVyc2UvY2xhc3NfaGllcmFyY2h5LmRhcnQnOwppbXBvcnQgJy4uLy4uL3VuaXZlcnNlL2NvZGVnZW5fd29ybGRfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi8uLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JyBzaG93IFNlbGVjdG9yOwppbXBvcnQgJy4uLy4uL3VuaXZlcnNlL3dvcmxkX2J1aWxkZXIuZGFydCcgc2hvdyBTZWxlY3RvckNvbnN0cmFpbnRzOwppbXBvcnQgJy4uLy4uL3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwppbXBvcnQgJy4uL2pzX2VtaXR0ZXIuZGFydCcKICAgIHNob3cKICAgICAgICBDbGFzc1N0dWJHZW5lcmF0b3IsCiAgICAgICAgQ29kZUVtaXR0ZXJUYXNrLAogICAgICAgIEVtaXR0ZXIsCiAgICAgICAgSW5zdGFudGlhdGlvblN0dWJHZW5lcmF0b3IsCiAgICAgICAgSW50ZXJjZXB0b3JTdHViR2VuZXJhdG9yLAogICAgICAgIE1haW5DYWxsU3R1YkdlbmVyYXRvciwKICAgICAgICBQYXJhbWV0ZXJTdHViR2VuZXJhdG9yLAogICAgICAgIFJ1bnRpbWVUeXBlR2VuZXJhdG9yLAogICAgICAgIFR5cGVUZXN0UHJvcGVydGllczsKaW1wb3J0ICcuLi9tb2RlbC5kYXJ0JzsKaW1wb3J0ICcuLi9zb3J0ZXIuZGFydCc7CgpwYXJ0ICdjb2xsZWN0b3IuZGFydCc7CnBhcnQgJ2ZpZWxkX3Zpc2l0b3IuZGFydCc7CnBhcnQgJ3JlZ2lzdHJ5LmRhcnQnOwoKLy8vIEJ1aWxkcyBhIHNlbGYtY29udGFpbmVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwcm9ncmFtIHRoYXQgY2FuIHRoZW4gYmUKLy8vIGVtaXR0ZWQgbW9yZSBlYXNpbHkgYnkgdGhlIGluZGl2aWR1YWwgZW1pdHRlcnMuCmNsYXNzIFByb2dyYW1CdWlsZGVyIHsKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CiAgZmluYWwgRGlhZ25vc3RpY1JlcG9ydGVyIF9yZXBvcnRlcjsKICBmaW5hbCBKRWxlbWVudEVudmlyb25tZW50IF9lbGVtZW50RW52aXJvbm1lbnQ7CiAgZmluYWwgSkNvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKICBmaW5hbCBPdXRwdXRVbml0RGF0YSBfb3V0cHV0VW5pdERhdGE7CiAgZmluYWwgQ29kZWdlbldvcmxkIF9jb2RlZ2VuV29ybGQ7CiAgZmluYWwgTmF0aXZlQ29kZWdlbkVucXVldWVyIF9uYXRpdmVDb2RlZ2VuRW5xdWV1ZXI7CiAgZmluYWwgQmFja2VuZFVzYWdlIF9iYWNrZW5kVXNhZ2U7CiAgZmluYWwgTmF0aXZlRGF0YSBfbmF0aXZlRGF0YTsKICBmaW5hbCBSdW50aW1lVHlwZXNOZWVkIF9ydGlOZWVkOwogIGZpbmFsIEludGVyY2VwdG9yRGF0YSBfaW50ZXJjZXB0b3JEYXRhOwogIGZpbmFsIFJ1bnRpbWVUeXBlc0NoZWNrcyBfcnRpQ2hlY2tzOwogIGZpbmFsIFJ1bnRpbWVUeXBlc0VuY29kZXIgX3J0aUVuY29kZXI7CiAgZmluYWwgUmVjaXBlRW5jb2RlciBfcnRpUmVjaXBlRW5jb2RlcjsKICBmaW5hbCBPbmVTaG90SW50ZXJjZXB0b3JEYXRhIF9vbmVTaG90SW50ZXJjZXB0b3JEYXRhOwogIGZpbmFsIEN1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzIF9jdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpczsKICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBqcy5FeHByZXNzaW9uPiBfZ2VuZXJhdGVkQ29kZTsKICBmaW5hbCBOYW1lciBfbmFtZXI7CiAgZmluYWwgQ29kZUVtaXR0ZXJUYXNrIF90YXNrOwogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CiAgZmluYWwgSkZpZWxkQW5hbHlzaXMgX2ZpZWxkQW5hbHlzaXM7CiAgZmluYWwgSW5mZXJyZWREYXRhIF9pbmZlcnJlZERhdGE7CiAgZmluYWwgU291cmNlSW5mb3JtYXRpb25TdHJhdGVneSBfc291cmNlSW5mb3JtYXRpb25TdHJhdGVneTsKCiAgLy8vIFRoZSBbU29ydGVyXSB1c2VkIGZvciBvcmRlcmluZyBlbGVtZW50cyBpbiB0aGUgZ2VuZXJhdGVkIEphdmFTY3JpcHQuCiAgZmluYWwgU29ydGVyIF9zb3J0ZXI7CgogIC8vLyBDb250YWlucyB0aGUgY29sbGVjdGVkIGluZm9ybWF0aW9uIHRoZSBwcm9ncmFtIGJ1aWxkZXIgdXNlZCB0byBidWlsZAogIC8vLyB0aGUgbW9kZWwuCiAgLy8gVGhlIGNvbGxlY3RvciB3aWxsIGJlIGZpbGxlZCBvbiB0aGUgZmlyc3QgY2FsbCB0byBgYnVpbGRQcm9ncmFtYC4KICAvLyBJdCBpcyBwdWJsaWNseSBleHBvc2VkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gTmV3IGNvZGUKICAvLyAoYW5kIGluIHBhcnRpY3VsYXIgbmV3IGVtaXR0ZXJzKSBzaG91bGQgbm90IGFjY2VzcyBpdCBvdXRzaWRlIHRoaXMgY2xhc3MuCiAgZmluYWwgQ29sbGVjdG9yIGNvbGxlY3RvcjsKCiAgZmluYWwgUmVnaXN0cnkgX3JlZ2lzdHJ5OwoKICBmaW5hbCBGdW5jdGlvbkVudGl0eSBfbWFpbkZ1bmN0aW9uOwogIGZpbmFsIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBfcnRpTmVlZGVkQ2xhc3NlczsKCiAgLy8vIFRydWUgaWYgdGhlIHByb2dyYW0gc2hvdWxkIHN0b3JlIGZ1bmN0aW9uIHR5cGVzIGluIHRoZSBtZXRhZGF0YS4KICBib29sIF9zdG9yZUZ1bmN0aW9uVHlwZXNJbk1ldGFkYXRhID0gZmFsc2U7CgogIGZpbmFsIFNldDxUeXBlVmFyaWFibGVUeXBlPiBfbGF0ZU5hbWVkVHlwZVZhcmlhYmxlc05ld1J0aSA9IHt9OwoKICBDbGFzc0hpZXJhcmNoeSBnZXQgX2NsYXNzSGllcmFyY2h5ID0+IF9jbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeTsKCiAgUHJvZ3JhbUJ1aWxkZXIoCiAgICAgIHRoaXMuX29wdGlvbnMsCiAgICAgIHRoaXMuX3JlcG9ydGVyLAogICAgICB0aGlzLl9lbGVtZW50RW52aXJvbm1lbnQsCiAgICAgIHRoaXMuX2NvbW1vbkVsZW1lbnRzLAogICAgICB0aGlzLl9vdXRwdXRVbml0RGF0YSwKICAgICAgdGhpcy5fY29kZWdlbldvcmxkLAogICAgICB0aGlzLl9uYXRpdmVDb2RlZ2VuRW5xdWV1ZXIsCiAgICAgIHRoaXMuX2JhY2tlbmRVc2FnZSwKICAgICAgdGhpcy5fbmF0aXZlRGF0YSwKICAgICAgdGhpcy5fcnRpTmVlZCwKICAgICAgdGhpcy5faW50ZXJjZXB0b3JEYXRhLAogICAgICB0aGlzLl9ydGlDaGVja3MsCiAgICAgIHRoaXMuX3J0aUVuY29kZXIsCiAgICAgIHRoaXMuX3J0aVJlY2lwZUVuY29kZXIsCiAgICAgIHRoaXMuX29uZVNob3RJbnRlcmNlcHRvckRhdGEsCiAgICAgIHRoaXMuX2N1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzLAogICAgICB0aGlzLl9nZW5lcmF0ZWRDb2RlLAogICAgICB0aGlzLl9uYW1lciwKICAgICAgdGhpcy5fdGFzaywKICAgICAgdGhpcy5fY2xvc2VkV29ybGQsCiAgICAgIHRoaXMuX2ZpZWxkQW5hbHlzaXMsCiAgICAgIHRoaXMuX2luZmVycmVkRGF0YSwKICAgICAgdGhpcy5fc291cmNlSW5mb3JtYXRpb25TdHJhdGVneSwKICAgICAgdGhpcy5fc29ydGVyLAogICAgICB0aGlzLl9ydGlOZWVkZWRDbGFzc2VzLAogICAgICB0aGlzLl9tYWluRnVuY3Rpb24pCiAgICAgIDogdGhpcy5jb2xsZWN0b3IgPSBuZXcgQ29sbGVjdG9yKAogICAgICAgICAgICBfb3B0aW9ucywKICAgICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLAogICAgICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LAogICAgICAgICAgICBfb3V0cHV0VW5pdERhdGEsCiAgICAgICAgICAgIF9jb2RlZ2VuV29ybGQsCiAgICAgICAgICAgIF9uYW1lciwKICAgICAgICAgICAgX3Rhc2suZW1pdHRlciwKICAgICAgICAgICAgX25hdGl2ZURhdGEsCiAgICAgICAgICAgIF9pbnRlcmNlcHRvckRhdGEsCiAgICAgICAgICAgIF9vbmVTaG90SW50ZXJjZXB0b3JEYXRhLAogICAgICAgICAgICBfY2xvc2VkV29ybGQsCiAgICAgICAgICAgIF9ydGlOZWVkZWRDbGFzc2VzLAogICAgICAgICAgICBfZ2VuZXJhdGVkQ29kZSwKICAgICAgICAgICAgX3NvcnRlciksCiAgICAgICAgdGhpcy5fcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnkoX291dHB1dFVuaXREYXRhLm1haW5PdXRwdXRVbml0LCBfc29ydGVyKTsKCiAgLy8vIE1hcHBpbmcgZnJvbSBbQ2xhc3NFbnRpdHldIHRvIGNvbnN0cnVjdGVkIFtDbGFzc10uIFdlIG5lZWQgdGhpcyB0bwogIC8vLyB1cGRhdGUgdGhlIHN1cGVyY2xhc3MgaW4gdGhlIFtDbGFzc10uCiAgZmluYWwgTWFwPENsYXNzRW50aXR5LCBDbGFzcz4gX2NsYXNzZXMgPSA8Q2xhc3NFbnRpdHksIENsYXNzPnt9OwoKICAvLy8gTWFwcGluZyBmcm9tIFtPdXRwdXRVbml0XSB0byBjb25zdHJ1Y3RlZCBbRnJhZ21lbnRdLiBXZSBuZWVkIHRoaXMgdG8KICAvLy8gZ2VuZXJhdGUgdGhlIGRlZmVycmVkTG9hZGluZ01hcCAodG8ga25vdyB3aGljaCBodW5rcyB0byBsb2FkKS4KICBmaW5hbCBNYXA8T3V0cHV0VW5pdCwgRnJhZ21lbnQ+IF9vdXRwdXRzID0gPE91dHB1dFVuaXQsIEZyYWdtZW50Pnt9OwoKICAvLy8gTWFwcGluZyBmcm9tIFtDb25zdGFudFZhbHVlXSB0byBjb25zdHJ1Y3RlZCBbQ29uc3RhbnRdLiBXZSBuZWVkIHRoaXMgdG8KICAvLy8gdXBkYXRlIGZpZWxkLWluaXRpYWxpemVycyB0byBwb2ludCB0byB0aGUgQ29uc3RhbnRNb2RlbC4KICBmaW5hbCBNYXA8Q29uc3RhbnRWYWx1ZSwgQ29uc3RhbnQ+IF9jb25zdGFudHMgPSA8Q29uc3RhbnRWYWx1ZSwgQ29uc3RhbnQ+e307CgogIFNldDxDbGFzcz4gX3VubmVlZGVkTmF0aXZlQ2xhc3NlczsKCiAgLy8vIENsYXNzZXMgdGhhdCBoYXZlIGJlZW4gYWxsb2NhdGVkIGR1cmluZyBhIHByb2ZpbGUgcnVuLgogIC8vLwogIC8vLyBUaGVzZSBjbGFzc2VzIHNob3VsZCBub3QgYmUgc29mdC1kZWZlcnJlZC4KICAvLy8KICAvLy8gQWxzbyBjb250YWlucyBjbGFzc2VzIHRoYXQgYXJlIG5vdCB0cmFja2VkIGJ5IHRoZSBwcm9maWxlIHJ1biAobGlrZQogIC8vLyBpbnRlcmNlcHRvcnMsIC4uLikuCiAgU2V0PENsYXNzRW50aXR5PiBfbm90U29mdERlZmVycmVkOwoKICBQcm9ncmFtIGJ1aWxkUHJvZ3JhbSh7Ym9vbCBzdG9yZUZ1bmN0aW9uVHlwZXNJbk1ldGFkYXRhOiBmYWxzZX0pIHsKICAgIGNvbGxlY3Rvci5jb2xsZWN0KCk7CiAgICBfaW5pdGlhbGl6ZVNvZnREZWZlcnJlZE1hcCgpOwoKICAgIHRoaXMuX3N0b3JlRnVuY3Rpb25UeXBlc0luTWV0YWRhdGEgPSBzdG9yZUZ1bmN0aW9uVHlwZXNJbk1ldGFkYXRhOwogICAgLy8gTm90ZTogSW4gcmFyZSBjYXNlcyAobW9zdGx5IHRlc3RzKSBvdXRwdXQgdW5pdHMgY2FuIGJlIGVtcHR5LiBUaGlzCiAgICAvLyBoYXBwZW5zIHdoZW4gdGhlIGRlZmVycmVkIGNvZGUgaXMgZGVhZC1jb2RlIGVsaW1pbmF0ZWQgYnV0IHdlIHN0aWxsIG5lZWQKICAgIC8vIHRvIGNoZWNrIHRoYXQgdGhlIGxpYnJhcnkgaGFzIGJlZW4gbG9hZGVkLgogICAgX2Nsb3NlZFdvcmxkLm91dHB1dFVuaXREYXRhLm91dHB1dFVuaXRzCiAgICAgICAgLmZvckVhY2goX3JlZ2lzdHJ5LnJlZ2lzdGVyT3V0cHV0VW5pdCk7CiAgICBjb2xsZWN0b3Iub3V0cHV0Q2xhc3NMaXN0cy5mb3JFYWNoKF9yZWdpc3RyeS5yZWdpc3RlckNsYXNzZXMpOwogICAgY29sbGVjdG9yLm91dHB1dFN0YXRpY0xpc3RzLmZvckVhY2goX3JlZ2lzdHJ5LnJlZ2lzdGVyTWVtYmVycyk7CiAgICBjb2xsZWN0b3Iub3V0cHV0Q29uc3RhbnRMaXN0cy5mb3JFYWNoKF9yZWdpc3RlckNvbnN0YW50cyk7CiAgICBjb2xsZWN0b3Iub3V0cHV0U3RhdGljTm9uRmluYWxGaWVsZExpc3RzLmZvckVhY2goX3JlZ2lzdHJ5LnJlZ2lzdGVyTWVtYmVycyk7CgogICAgLy8gV2UgYWx3YXlzIGFkZCB0aGUgY3VycmVudCBpc29sYXRlIGhvbGRlci4KICAgIF9yZWdpc3RlclN0YXRpY1N0YXRlSG9sZGVyKCk7CgogICAgLy8gV2UgbmVlZCB0byBydW4gdGhlIG5hdGl2ZS1wcmVwYXJhdGlvbiBiZWZvcmUgd2UgYnVpbGQgdGhlIG91dHB1dC4gVGhlCiAgICAvLyBwcmVwYXJhdGlvbiBjb2RlLCBpbiB0dXJuIG5lZWRzIHRoZSBjbGFzc2VzIHRvIGJlIHNldCB1cC4KICAgIC8vIFdlIHRodXMgYnVpbGQgdGhlIGNsYXNzZXMgYmVmb3JlIGJ1aWxkaW5nIHRoZWlyIGNvbnRhaW5lcnMuCiAgICBjb2xsZWN0b3Iub3V0cHV0Q2xhc3NMaXN0cwogICAgICAgIC5mb3JFYWNoKChPdXRwdXRVbml0IF8sIExpc3Q8Q2xhc3NFbnRpdHk+IGNsYXNzZXMpIHsKICAgICAgY2xhc3Nlcy5mb3JFYWNoKF9idWlsZENsYXNzKTsKICAgIH0pOwoKICAgIC8vIFJlc29sdmUgdGhlIHN1cGVyY2xhc3MgcmVmZXJlbmNlcyBhZnRlciB3ZSd2ZSBwcm9jZXNzZWQgYWxsIHRoZSBjbGFzc2VzLgogICAgX2NsYXNzZXMuZm9yRWFjaCgoQ2xhc3NFbnRpdHkgY2xzLCBDbGFzcyBjKSB7CiAgICAgIENsYXNzRW50aXR5IHN1cGVyY2xhc3MgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFN1cGVyQ2xhc3MoY2xzKTsKICAgICAgaWYgKHN1cGVyY2xhc3MgIT0gbnVsbCkgewogICAgICAgIGMuc2V0U3VwZXJjbGFzcyhfY2xhc3Nlc1tzdXBlcmNsYXNzXSk7CiAgICAgICAgYXNzZXJ0KAogICAgICAgICAgICBjLnN1cGVyY2xhc3MgIT0gbnVsbCwKICAgICAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgICAgICBjbHMsCiAgICAgICAgICAgICAgICAiTm8gQ2xhc3MgZm9yIGhhcyBiZWVuIGNyZWF0ZWQgZm9yIHN1cGVyY2xhc3MgIgogICAgICAgICAgICAgICAgIiR7c3VwZXJjbGFzc30gb2YgJGMuIikpOwogICAgICB9CiAgICAgIGlmIChjLmlzU2ltcGxlTWl4aW5BcHBsaWNhdGlvbiB8fCBjLmlzU3VwZXJNaXhpbkFwcGxpY2F0aW9uKSB7CiAgICAgICAgQ2xhc3NFbnRpdHkgZWZmZWN0aXZlTWl4aW5DbGFzcyA9CiAgICAgICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0RWZmZWN0aXZlTWl4aW5DbGFzcyhjbHMpOwogICAgICAgIGMuc2V0TWl4aW5DbGFzcyhfY2xhc3Nlc1tlZmZlY3RpdmVNaXhpbkNsYXNzXSk7CiAgICAgICAgYXNzZXJ0KAogICAgICAgICAgICBjLm1peGluQ2xhc3MgIT0gbnVsbCwKICAgICAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgICAgICBjbHMsCiAgICAgICAgICAgICAgICAiTm8gY2xhc3MgZm9yIGVmZmVjdGl2ZSBtaXhpbiAke2VmZmVjdGl2ZU1peGluQ2xhc3N9IG9uICIKICAgICAgICAgICAgICAgICIkY2xzLiIpKTsKICAgICAgfQogICAgfSk7CgogICAgTGlzdDxDbGFzcz4gbmF0aXZlQ2xhc3NlcyA9IGNvbGxlY3Rvci5uYXRpdmVDbGFzc2VzQW5kU3ViY2xhc3NlcwogICAgICAgIC5tYXAoKENsYXNzRW50aXR5IGNsYXNzRWxlbWVudCkgPT4gX2NsYXNzZXNbY2xhc3NFbGVtZW50XSkKICAgICAgICAudG9MaXN0KCk7CgogICAgU2V0PENsYXNzRW50aXR5PiBpbnRlcmNlcHRvckNsYXNzZXNOZWVkZWRCeUNvbnN0YW50cyA9CiAgICAgICAgY29sbGVjdG9yLmNvbXB1dGVJbnRlcmNlcHRvcnNSZWZlcmVuY2VkRnJvbUNvbnN0YW50cygpOwoKICAgIF91bm5lZWRlZE5hdGl2ZUNsYXNzZXMgPSBfdGFzay5uYXRpdmVFbWl0dGVyLnByZXBhcmVOYXRpdmVDbGFzc2VzKAogICAgICAgIG5hdGl2ZUNsYXNzZXMsIGludGVyY2VwdG9yQ2xhc3Nlc05lZWRlZEJ5Q29uc3RhbnRzLCBfcnRpTmVlZGVkQ2xhc3Nlcyk7CgogICAgX2FkZEpzSW50ZXJvcFN0dWJzKF9yZWdpc3RyeS5tYWluTGlicmFyaWVzTWFwKTsKCiAgICBNYWluRnJhZ21lbnQgbWFpbkZyYWdtZW50ID0gX2J1aWxkTWFpbkZyYWdtZW50KF9yZWdpc3RyeS5tYWluTGlicmFyaWVzTWFwKTsKICAgIEl0ZXJhYmxlPEZyYWdtZW50PiBkZWZlcnJlZEZyYWdtZW50cyA9CiAgICAgICAgX3JlZ2lzdHJ5LmRlZmVycmVkTGlicmFyaWVzTWFwLm1hcChfYnVpbGREZWZlcnJlZEZyYWdtZW50KTsKCiAgICBMaXN0PEZyYWdtZW50PiBmcmFnbWVudHMgPSBuZXcgTGlzdDxGcmFnbWVudD4oX3JlZ2lzdHJ5LmxpYnJhcmllc01hcENvdW50KTsKICAgIGZyYWdtZW50c1swXSA9IG1haW5GcmFnbWVudDsKICAgIGZyYWdtZW50cy5zZXRBbGwoMSwgZGVmZXJyZWRGcmFnbWVudHMpOwoKICAgIF9tYXJrRWFnZXJDbGFzc2VzKCk7CgogICAgaWYgKF9vcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpIHsKICAgICAgYXNzb2NpYXRlTmFtZWRUeXBlVmFyaWFibGVzTmV3UnRpKCk7CiAgICB9CgogICAgTGlzdDxIb2xkZXI+IGhvbGRlcnMgPSBfcmVnaXN0cnkuaG9sZGVycy50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKCiAgICBib29sIG5lZWRzTmF0aXZlU3VwcG9ydCA9CiAgICAgICAgX25hdGl2ZUNvZGVnZW5FbnF1ZXVlci5oYXNJbnN0YW50aWF0ZWROYXRpdmVDbGFzc2VzIHx8CiAgICAgICAgICAgIF9uYXRpdmVEYXRhLmlzQWxsb3dJbnRlcm9wVXNlZDsKCiAgICBhc3NlcnQoIW5lZWRzTmF0aXZlU3VwcG9ydCB8fCBuYXRpdmVDbGFzc2VzLmlzTm90RW1wdHkpOwoKICAgIExpc3Q8anMuVG9rZW5GaW5hbGl6ZXI+IGZpbmFsaXplcnMgPSBbX3Rhc2subWV0YWRhdGFDb2xsZWN0b3JdOwogICAgaWYgKF9uYW1lciBpcyBqcy5Ub2tlbkZpbmFsaXplcikgewogICAgICB2YXIgbmFtaW5nRmluYWxpemVyID0gX25hbWVyOwogICAgICBmaW5hbGl6ZXJzLmFkZChuYW1pbmdGaW5hbGl6ZXIgYXMganMuVG9rZW5GaW5hbGl6ZXIpOwogICAgfQoKICAgIHJldHVybiBuZXcgUHJvZ3JhbShmcmFnbWVudHMsIGhvbGRlcnMsIF9idWlsZExvYWRNYXAoKSwKICAgICAgICBfYnVpbGRUeXBlVG9JbnRlcmNlcHRvck1hcCgpLCBfdGFzay5tZXRhZGF0YUNvbGxlY3RvciwgZmluYWxpemVycywKICAgICAgICBuZWVkc05hdGl2ZVN1cHBvcnQ6IG5lZWRzTmF0aXZlU3VwcG9ydCwKICAgICAgICBvdXRwdXRDb250YWluc0NvbnN0YW50TGlzdDogY29sbGVjdG9yLm91dHB1dENvbnRhaW5zQ29uc3RhbnRMaXN0LAogICAgICAgIGhhc1NvZnREZWZlcnJlZENsYXNzZXM6IF9ub3RTb2Z0RGVmZXJyZWQgIT0gbnVsbCk7CiAgfQoKICB2b2lkIF9tYXJrRWFnZXJDbGFzc2VzKCkgewogICAgX21hcmtFYWdlckludGVyY2VwdG9yQ2xhc3NlcygpOwogIH0KCiAgdm9pZCBfaW5pdGlhbGl6ZVNvZnREZWZlcnJlZE1hcCgpIHsKICAgIHZhciBhbGxvY2F0ZWRDbGFzc2VzUGF0aCA9IF9vcHRpb25zLmV4cGVyaW1lbnRhbEFsbG9jYXRpb25zUGF0aDsKICAgIGlmIChhbGxvY2F0ZWRDbGFzc2VzUGF0aCAhPSBudWxsKSB7CiAgICAgIC8vIFRPRE8oMjk1NzQpOiB0aGUgZm9sbG93aW5nIGJsYWNrbGlzdCBpcyBhZC1ob2MgYW5kIHBvdGVudGlhbGx5CiAgICAgIC8vIGluY29tcGxldGUuIFdlIG5lZWQgdG8gbWFyayBhbGwgY2xhc3NlcyBhcyBibGFjayBsaXN0ZWQsIHRoYXQgYXJlCiAgICAgIC8vIHVzZWQgd2l0aG91dCBjb2RlIGdvaW5nIHRocm91Z2ggdGhlIGNsYXNzJyBjb25zdHJ1Y3Rvci4KICAgICAgdmFyIGJsYWNrTGlzdCA9IFsKICAgICAgICAnZGFydDpfaW50ZXJjZXB0b3JzJywKICAgICAgICAnZGFydDpodG1sJywKICAgICAgICAnZGFydDp0eXBlZF9kYXRhX2ltcGxlbWVudGF0aW9uJywKICAgICAgICAnZGFydDpfbmF0aXZlX3R5cGVkX2RhdGEnCiAgICAgIF0udG9TZXQoKTsKCiAgICAgIC8vIFRPRE8oMjk1NzQpOiB0aGUgY29tcGlsZXIgc2hvdWxkIG5vdCBqdXN0IHVzZSBkYXJ0OmlvIHRvIGdldCB0aGUKICAgICAgLy8gY29udGVudHMgb2YgYSBmaWxlLgogICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShhbGxvY2F0ZWRDbGFzc2VzUGF0aCk7CgogICAgICAvLyBUT0RPKDI5NTc0KTogYXJlIHRoZSBmb2xsb3dpbmcgY2hlY2tzIG5lY2Vzc2FyeT8KICAgICAgLy8gVG8gbWFrZSBjb21waWxhdGlvbiBpbiBidWlsZC1zeXN0ZW1zIGVhc2llciwgd2UgaWdub3JlIG5vbi1leGlzdGluZwogICAgICAvLyBvciBlbXB0eSBwcm9maWxlcy4KICAgICAgaWYgKCFmaWxlLmV4aXN0c1N5bmMoKSkgewogICAgICAgIF9yZXBvcnRlci5sb2coIlByb2ZpbGUgZmlsZSBkb2VzIG5vdCBleGlzdDogJGFsbG9jYXRlZENsYXNzZXNQYXRoIik7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChmaWxlLmxlbmd0aFN5bmMoKSA9PSAwKSB7CiAgICAgICAgX3JlcG9ydGVyLmxvZygiUHJvZmlsZSBpbmZvcm1hdGlvbiAoYWxsb2NhdGVkIGNsYXNzZXMpIGlzIGVtcHR5LiIpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgU3RyaW5nIGRhdGEgPSBuZXcgRmlsZShhbGxvY2F0ZWRDbGFzc2VzUGF0aCkucmVhZEFzU3RyaW5nU3luYygpOwogICAgICBTZXQ8U3RyaW5nPiBhbGxvY2F0ZWRDbGFzc2VzS2V5cyA9IGpzb25EZWNvZGUoZGF0YSkua2V5cy50b1NldCgpOwogICAgICBTZXQ8Q2xhc3NFbnRpdHk+IGFsbG9jYXRlZENsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICAgICAgLy8gQ29sbGVjdHMgYWxsIHN1cGVyIGFuZCBtaXhpbiBjbGFzc2VzIG9mIGEgY2xhc3MuCiAgICAgIHZvaWQgY29sbGVjdChDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICAgICAgYWxsb2NhdGVkQ2xhc3Nlcy5hZGQoZWxlbWVudCk7CiAgICAgICAgaWYgKF9lbGVtZW50RW52aXJvbm1lbnQuaXNNaXhpbkFwcGxpY2F0aW9uKGVsZW1lbnQpKSB7CiAgICAgICAgICBjb2xsZWN0KF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0RWZmZWN0aXZlTWl4aW5DbGFzcyhlbGVtZW50KSk7CiAgICAgICAgfQogICAgICAgIENsYXNzRW50aXR5IHN1cGVyY2xhc3MgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFN1cGVyQ2xhc3MoZWxlbWVudCk7CiAgICAgICAgaWYgKHN1cGVyY2xhc3MgIT0gbnVsbCkgewogICAgICAgICAgY29sbGVjdChzdXBlcmNsYXNzKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIEZvciBldmVyeSBrbm93biBjbGFzcywgc2VlIGlmIGl0IHdhcyBhbGxvY2F0ZWQgaW4gdGhlIHByb2ZpbGUuIElmIHllcywKICAgICAgLy8gY29sbGVjdCBpdHMgZGVwZW5kZW5jaWVzIChzdXBlcnMgYW5kIG1peGlucykgYW5kIG1hcmsgdGhlbSBhcwogICAgICAvLyBub3Qtc29mdC1kZWZlcnJhYmxlLgogICAgICBjb2xsZWN0b3Iub3V0cHV0Q2xhc3NMaXN0cy5mb3JFYWNoKChfLCBMaXN0PENsYXNzRW50aXR5PiBlbGVtZW50cykgewogICAgICAgIGZvciAoQ2xhc3NFbnRpdHkgZWxlbWVudCBpbiBlbGVtZW50cykgewogICAgICAgICAgLy8gVE9ETygyOTU3NCk6IHNoYXJlIHRoZSBlbmNvZGluZyBvZiB0aGUgZWxlbWVudCB3aXRoIHRoZSBjb2RlCiAgICAgICAgICAvLyB0aGF0IGVtaXRzIHRoZSBwcm9maWxlLXJ1bi4KICAgICAgICAgIHZhciBrZXkgPSAiJHtlbGVtZW50LmxpYnJhcnkuY2Fub25pY2FsVXJpfToke2VsZW1lbnQubmFtZX0iOwogICAgICAgICAgaWYgKGFsbG9jYXRlZENsYXNzZXNLZXlzLmNvbnRhaW5zKGtleSkgfHwKICAgICAgICAgICAgICBfbmF0aXZlRGF0YS5pc0pzSW50ZXJvcENsYXNzKGVsZW1lbnQpIHx8CiAgICAgICAgICAgICAgYmxhY2tMaXN0LmNvbnRhaW5zKGVsZW1lbnQubGlicmFyeS5jYW5vbmljYWxVcmkudG9TdHJpbmcoKSkpIHsKICAgICAgICAgICAgY29sbGVjdChlbGVtZW50KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwogICAgICBfbm90U29mdERlZmVycmVkID0gYWxsb2NhdGVkQ2xhc3NlczsKICAgIH0KICB9CgogIC8vLyBCdWlsZHMgYSBtYXAgZnJvbSBsb2FkSWQgdG8gb3V0cHV0cy10by1sb2FkLgogIE1hcDxTdHJpbmcsIExpc3Q8RnJhZ21lbnQ+PiBfYnVpbGRMb2FkTWFwKCkgewogICAgTWFwPFN0cmluZywgTGlzdDxGcmFnbWVudD4+IGxvYWRNYXAgPSA8U3RyaW5nLCBMaXN0PEZyYWdtZW50Pj57fTsKICAgIF9jbG9zZWRXb3JsZC5vdXRwdXRVbml0RGF0YS5odW5rc1RvTG9hZAogICAgICAgIC5mb3JFYWNoKChTdHJpbmcgbG9hZElkLCBMaXN0PE91dHB1dFVuaXQ+IG91dHB1dFVuaXRzKSB7CiAgICAgIGxvYWRNYXBbbG9hZElkXSA9IG91dHB1dFVuaXRzCiAgICAgICAgICAubWFwKChPdXRwdXRVbml0IHVuaXQpID0+IF9vdXRwdXRzW3VuaXRdKQogICAgICAgICAgLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgfSk7CiAgICByZXR1cm4gbG9hZE1hcDsKICB9CgogIGpzLkV4cHJlc3Npb24gX2J1aWxkVHlwZVRvSW50ZXJjZXB0b3JNYXAoKSB7CiAgICBJbnRlcmNlcHRvclN0dWJHZW5lcmF0b3Igc3R1YkdlbmVyYXRvciA9IG5ldyBJbnRlcmNlcHRvclN0dWJHZW5lcmF0b3IoCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLAogICAgICAgIF90YXNrLmVtaXR0ZXIsCiAgICAgICAgX25hdGl2ZUNvZGVnZW5FbnF1ZXVlciwKICAgICAgICBfbmFtZXIsCiAgICAgICAgX2N1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzLAogICAgICAgIF9jb2RlZ2VuV29ybGQsCiAgICAgICAgX2Nsb3NlZFdvcmxkKTsKICAgIHJldHVybiBzdHViR2VuZXJhdG9yLmdlbmVyYXRlVHlwZVRvSW50ZXJjZXB0b3JNYXAoKTsKICB9CgogIE1haW5GcmFnbWVudCBfYnVpbGRNYWluRnJhZ21lbnQoTGlicmFyaWVzTWFwIGxpYnJhcmllc01hcCkgewogICAgLy8gQ29uc3RydWN0IHRoZSBtYWluIG91dHB1dCBmcm9tIHRoZSBsaWJyYXJpZXMgYW5kIHRoZSByZWdpc3RlcmVkIGhvbGRlcnMuCiAgICBNYWluRnJhZ21lbnQgcmVzdWx0ID0gbmV3IE1haW5GcmFnbWVudCgKICAgICAgICBsaWJyYXJpZXNNYXAub3V0cHV0VW5pdCwKICAgICAgICAiIiwgLy8gVGhlIGVtcHR5IHN0cmluZyBpcyB0aGUgbmFtZSBmb3IgdGhlIG1haW4gb3V0cHV0IGZpbGUuCiAgICAgICAgX2J1aWxkSW52b2tlTWFpbigpLAogICAgICAgIF9idWlsZExpYnJhcmllcyhsaWJyYXJpZXNNYXApLAogICAgICAgIF9idWlsZFN0YXRpY05vbkZpbmFsRmllbGRzKGxpYnJhcmllc01hcCksCiAgICAgICAgX2J1aWxkU3RhdGljTGF6aWx5SW5pdGlhbGl6ZWRGaWVsZHMobGlicmFyaWVzTWFwKSwKICAgICAgICBfYnVpbGRDb25zdGFudHMobGlicmFyaWVzTWFwKSk7CiAgICBfb3V0cHV0c1tsaWJyYXJpZXNNYXAub3V0cHV0VW5pdF0gPSByZXN1bHQ7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAganMuU3RhdGVtZW50IF9idWlsZEludm9rZU1haW4oKSB7CiAgICByZXR1cm4gTWFpbkNhbGxTdHViR2VuZXJhdG9yLmdlbmVyYXRlSW52b2tlTWFpbigKICAgICAgICBfdGFzay5lbWl0dGVyLCBfbWFpbkZ1bmN0aW9uKTsKICB9CgogIERlZmVycmVkRnJhZ21lbnQgX2J1aWxkRGVmZXJyZWRGcmFnbWVudChMaWJyYXJpZXNNYXAgbGlicmFyaWVzTWFwKSB7CiAgICBEZWZlcnJlZEZyYWdtZW50IHJlc3VsdCA9IG5ldyBEZWZlcnJlZEZyYWdtZW50KAogICAgICAgIGxpYnJhcmllc01hcC5vdXRwdXRVbml0LAogICAgICAgIGRlZmVycmVkUGFydEZpbGVOYW1lKF9vcHRpb25zLCBsaWJyYXJpZXNNYXAubmFtZSwgYWRkRXh0ZW5zaW9uOiBmYWxzZSksCiAgICAgICAgbGlicmFyaWVzTWFwLm5hbWUsCiAgICAgICAgX2J1aWxkTGlicmFyaWVzKGxpYnJhcmllc01hcCksCiAgICAgICAgX2J1aWxkU3RhdGljTm9uRmluYWxGaWVsZHMobGlicmFyaWVzTWFwKSwKICAgICAgICBfYnVpbGRTdGF0aWNMYXppbHlJbml0aWFsaXplZEZpZWxkcyhsaWJyYXJpZXNNYXApLAogICAgICAgIF9idWlsZENvbnN0YW50cyhsaWJyYXJpZXNNYXApKTsKICAgIF9vdXRwdXRzW2xpYnJhcmllc01hcC5vdXRwdXRVbml0XSA9IHJlc3VsdDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBMaXN0PENvbnN0YW50PiBfYnVpbGRDb25zdGFudHMoTGlicmFyaWVzTWFwIGxpYnJhcmllc01hcCkgewogICAgTGlzdDxDb25zdGFudFZhbHVlPiBjb25zdGFudFZhbHVlcyA9CiAgICAgICAgY29sbGVjdG9yLm91dHB1dENvbnN0YW50TGlzdHNbbGlicmFyaWVzTWFwLm91dHB1dFVuaXRdOwogICAgaWYgKGNvbnN0YW50VmFsdWVzID09IG51bGwpIHJldHVybiBjb25zdCA8Q29uc3RhbnQ+W107CiAgICByZXR1cm4gY29uc3RhbnRWYWx1ZXMKICAgICAgICAubWFwKChDb25zdGFudFZhbHVlIHZhbHVlKSA9PiBfY29uc3RhbnRzW3ZhbHVlXSkKICAgICAgICAudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgfQoKICBMaXN0PFN0YXRpY0ZpZWxkPiBfYnVpbGRTdGF0aWNOb25GaW5hbEZpZWxkcyhMaWJyYXJpZXNNYXAgbGlicmFyaWVzTWFwKSB7CiAgICBMaXN0PEZpZWxkRW50aXR5PiBzdGF0aWNOb25GaW5hbEZpZWxkcyA9CiAgICAgICAgY29sbGVjdG9yLm91dHB1dFN0YXRpY05vbkZpbmFsRmllbGRMaXN0c1tsaWJyYXJpZXNNYXAub3V0cHV0VW5pdF07CiAgICBpZiAoc3RhdGljTm9uRmluYWxGaWVsZHMgPT0gbnVsbCkgcmV0dXJuIGNvbnN0IDxTdGF0aWNGaWVsZD5bXTsKCiAgICByZXR1cm4gc3RhdGljTm9uRmluYWxGaWVsZHMubWFwKF9idWlsZFN0YXRpY0ZpZWxkKS50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKICB9CgogIFN0YXRpY0ZpZWxkIF9idWlsZFN0YXRpY0ZpZWxkKEZpZWxkRW50aXR5IGVsZW1lbnQpIHsKICAgIEZpZWxkQW5hbHlzaXNEYXRhIGZpZWxkRGF0YSA9IF9maWVsZEFuYWx5c2lzLmdldEZpZWxkRGF0YShlbGVtZW50KTsKICAgIENvbnN0YW50VmFsdWUgaW5pdGlhbFZhbHVlID0gZmllbGREYXRhLmluaXRpYWxWYWx1ZTsKICAgIGpzLkV4cHJlc3Npb24gY29kZTsKICAgIGlmIChpbml0aWFsVmFsdWUgIT0gbnVsbCkgewogICAgICAvLyBUT0RPKHphcmFoKTogVGhlIGhvbGRlciBzaG91bGQgbm90IGJlIHJlZ2lzdGVyZWQgZHVyaW5nIGJ1aWxkaW5nIG9mCiAgICAgIC8vIGEgc3RhdGljIGZpZWxkLgogICAgICBfcmVnaXN0cnkucmVnaXN0ZXJIb2xkZXIoX25hbWVyLmdsb2JhbE9iamVjdEZvckNvbnN0YW50KGluaXRpYWxWYWx1ZSksCiAgICAgICAgICBpc0NvbnN0YW50c0hvbGRlcjogdHJ1ZSk7CiAgICAgIGNvZGUgPSBfdGFzay5lbWl0dGVyLmNvbnN0YW50UmVmZXJlbmNlKGluaXRpYWxWYWx1ZSk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoZmllbGREYXRhLmlzRWFnZXIpOwogICAgICBjb2RlID0gX2dlbmVyYXRlZENvZGVbZWxlbWVudF07CiAgICB9CiAgICBqcy5OYW1lIG5hbWUgPSBfbmFtZXIuZ2xvYmFsUHJvcGVydHlOYW1lRm9yTWVtYmVyKGVsZW1lbnQpOwoKICAgIC8vIFRPRE8oZmxvaXRzY2gpOiB3ZSBzaG91bGRuJ3QgdXBkYXRlIHRoZSByZWdpc3RyeSBpbiB0aGUgbWlkZGxlIG9mCiAgICAvLyBidWlsZGluZyBhIHN0YXRpYyBmaWVsZC4gKE5vdGUgdGhhdCB0aGUgc3RhdGljLXN0YXRlIGhvbGRlciB3YXMKICAgIC8vIGFscmVhZHkgcmVnaXN0ZXJlZCBlYXJsaWVyLCBhbmQgdGhhdCB3ZSBqdXN0IGNhbGwgdGhlIHJlZ2lzdGVyIHRvIGdldAogICAgLy8gdGhlIGhvbGRlci1pbnN0YW5jZS4KICAgIHJldHVybiBuZXcgU3RhdGljRmllbGQoCiAgICAgICAgZWxlbWVudCwgbmFtZSwgbnVsbCwgX3JlZ2lzdGVyU3RhdGljU3RhdGVIb2xkZXIoKSwgY29kZSwKICAgICAgICBpc0ZpbmFsOiBmYWxzZSwKICAgICAgICBpc0xhenk6IGZhbHNlLAogICAgICAgIGlzSW5pdGlhbGl6ZWRCeUNvbnN0YW50OiBpbml0aWFsVmFsdWUgIT0gbnVsbCk7CiAgfQoKICBMaXN0PFN0YXRpY0ZpZWxkPiBfYnVpbGRTdGF0aWNMYXppbHlJbml0aWFsaXplZEZpZWxkcygKICAgICAgTGlicmFyaWVzTWFwIGxpYnJhcmllc01hcCkgewogICAgTGlzdDxGaWVsZEVudGl0eT4gbGF6eUZpZWxkcyA9IFtdOwogICAgX2NvZGVnZW5Xb3JsZC5mb3JFYWNoU3RhdGljRmllbGQoKEZpZWxkRW50aXR5IGZpZWxkKSB7CiAgICAgIGlmIChfY2xvc2VkV29ybGQuZmllbGRBbmFseXNpcy5nZXRGaWVsZERhdGEoZmllbGQpLmlzTGF6eSAmJgogICAgICAgICAgX291dHB1dFVuaXREYXRhLm91dHB1dFVuaXRGb3JNZW1iZXIoZmllbGQpID09CiAgICAgICAgICAgICAgbGlicmFyaWVzTWFwLm91dHB1dFVuaXQpIHsKICAgICAgICBsYXp5RmllbGRzLmFkZChmaWVsZCk7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIF9zb3J0ZXIKICAgICAgICAuc29ydE1lbWJlcnMobGF6eUZpZWxkcykKICAgICAgICAubWFwKF9idWlsZExhenlGaWVsZCkKICAgICAgICAud2hlcmUoKGZpZWxkKSA9PiBmaWVsZCAhPSBudWxsKSAvLyBIYXBwZW5zIHdoZW4gdGhlIGZpZWxkIHdhcyB1bnVzZWQuCiAgICAgICAgLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogIH0KCiAgU3RhdGljRmllbGQgX2J1aWxkTGF6eUZpZWxkKEZpZWxkRW50aXR5IGVsZW1lbnQpIHsKICAgIGpzLkV4cHJlc3Npb24gY29kZSA9IF9nZW5lcmF0ZWRDb2RlW2VsZW1lbnRdOwogICAgLy8gVGhlIGNvZGUgaXMgbnVsbCBpZiB3ZSBlbmRlZCB1cCBub3QgbmVlZGluZyB0aGUgbGF6aWx5CiAgICAvLyBpbml0aWFsaXplZCBmaWVsZCBhZnRlciBhbGwgYmVjYXVzZSBvZiBjb25zdGFudCBmb2xkaW5nCiAgICAvLyBiZWZvcmUgY29kZSBnZW5lcmF0aW9uLgogICAgaWYgKGNvZGUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CgogICAganMuTmFtZSBuYW1lID0gX25hbWVyLmdsb2JhbFByb3BlcnR5TmFtZUZvck1lbWJlcihlbGVtZW50KTsKICAgIGpzLk5hbWUgZ2V0dGVyTmFtZSA9IF9uYW1lci5sYXp5SW5pdGlhbGl6ZXJOYW1lKGVsZW1lbnQpOwogICAgLy8gVE9ETyhmbG9pdHNjaCk6IHdlIHNob3VsZG4ndCB1cGRhdGUgdGhlIHJlZ2lzdHJ5IGluIHRoZSBtaWRkbGUgb2YKICAgIC8vIGJ1aWxkaW5nIGEgc3RhdGljIGZpZWxkLiAoTm90ZSB0aGF0IHRoZSBzdGF0aWMtc3RhdGUgaG9sZGVyIHdhcwogICAgLy8gYWxyZWFkeSByZWdpc3RlcmVkIGVhcmxpZXIsIGFuZCB0aGF0IHdlIGp1c3QgY2FsbCB0aGUgcmVnaXN0ZXIgdG8gZ2V0CiAgICAvLyB0aGUgaG9sZGVyLWluc3RhbmNlLgogICAgcmV0dXJuIG5ldyBTdGF0aWNGaWVsZCgKICAgICAgICBlbGVtZW50LCBuYW1lLCBnZXR0ZXJOYW1lLCBfcmVnaXN0ZXJTdGF0aWNTdGF0ZUhvbGRlcigpLCBjb2RlLAogICAgICAgIGlzRmluYWw6ICFlbGVtZW50LmlzQXNzaWduYWJsZSwgaXNMYXp5OiB0cnVlKTsKICB9CgogIExpc3Q8TGlicmFyeT4gX2J1aWxkTGlicmFyaWVzKExpYnJhcmllc01hcCBsaWJyYXJpZXNNYXApIHsKICAgIExpc3Q8TGlicmFyeT4gbGlicmFyaWVzID0gbmV3IExpc3Q8TGlicmFyeT4obGlicmFyaWVzTWFwLmxlbmd0aCk7CiAgICBpbnQgY291bnQgPSAwOwogICAgbGlicmFyaWVzTWFwLmZvckVhY2goKExpYnJhcnlFbnRpdHkgbGlicmFyeSwgTGlzdDxDbGFzc0VudGl0eT4gY2xhc3NlcywKICAgICAgICBMaXN0PE1lbWJlckVudGl0eT4gbWVtYmVycykgewogICAgICBsaWJyYXJpZXNbY291bnQrK10gPSBfYnVpbGRMaWJyYXJ5KGxpYnJhcnksIGNsYXNzZXMsIG1lbWJlcnMpOwogICAgfSk7CiAgICByZXR1cm4gbGlicmFyaWVzOwogIH0KCiAgdm9pZCBfYWRkSnNJbnRlcm9wU3R1YnMoTGlicmFyaWVzTWFwIGxpYnJhcmllc01hcCkgewogICAgaWYgKF9jbGFzc2VzLmNvbnRhaW5zS2V5KF9jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcykpIHsKICAgICAganMuTmFtZSB0b1N0cmluZ0ludm9jYXRpb24gPSBfbmFtZXIuaW52b2NhdGlvbk5hbWUoU2VsZWN0b3JzLnRvU3RyaW5nXyk7CiAgICAgIC8vIFRPRE8oamFjb2JyKTogcmVnaXN0ZXIgdG9TdHJpbmcgYXMgdXNlZCBzbyB0aGF0IGl0IGlzIGFsd2F5cyBhY2Nlc3NpYmxlCiAgICAgIC8vIGZyb20gSmF2YVNjcmlwdC4KICAgICAgX2NsYXNzZXNbX2NvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzXS5jYWxsU3R1YnMuYWRkKF9idWlsZFN0dWJNZXRob2QoCiAgICAgICAgICBuZXcgU3RyaW5nQmFja2VkTmFtZSgidG9TdHJpbmciKSwKICAgICAgICAgIGpzLmpzKCdmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuIyh0aGlzKSB9JywgdG9TdHJpbmdJbnZvY2F0aW9uKSkpOwogICAgfQoKICAgIC8vIFdlIGFkZCBhbGwgbWVtYmVycyBmcm9tIGNsYXNzZXMgbWFya2VkIHdpdGggaXNKc0ludGVyb3AgdG8gdGhlIGJhc2UKICAgIC8vIEludGVyY2VwdG9yIGNsYXNzIHdpdGggaW1wbGVtZW50YXRpb25zIHRoYXQgZGlyZWN0bHkgY2FsbCB0aGUKICAgIC8vIGNvcnJlc3BvbmRpbmcgSmF2YVNjcmlwdCBtZW1iZXIuIFdlIGRvIG5vdCBhdHRlbXB0IHRvIGJpbmQgdGhpcyB3aGVuCiAgICAvLyB0ZWFyaW5nIG9mZiBKYXZhU2NyaXB0IG1ldGhvZHMgYXMgd2UgY2Fubm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gY2FsbGluZwogICAgLy8gYSByZWd1bGFyIGdldHRlciB0aGF0IHJldHVybnMgYSBKYXZhU2NyaXB0IGZ1bmN0aW9uIGFuZCB0ZWFyaW5nIG9mZgogICAgLy8gYSBtZXRob2QgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlcmUgZXhpc3QgbXVsdGlwbGUgSmF2YVNjcmlwdCBjbGFzc2VzCiAgICAvLyB0aGF0IGNvbmZsaWN0IG9uIHdoZXRoZXIgdGhlIG1lbWJlciBpcyBhIGdldHRlciBvciBhIG1ldGhvZC4KICAgIENsYXNzIGludGVyY2VwdG9yQ2xhc3MgPSBfY2xhc3Nlc1tfY29tbW9uRWxlbWVudHMuanNKYXZhU2NyaXB0T2JqZWN0Q2xhc3NdOwogICAgU2V0PFN0cmluZz4gc3R1Yk5hbWVzID0ge307CiAgICBsaWJyYXJpZXNNYXAKICAgICAgICAuZm9yRWFjaCgoTGlicmFyeUVudGl0eSBsaWJyYXJ5LCBMaXN0PENsYXNzRW50aXR5PiBjbGFzc0VsZW1lbnRzLCBfKSB7CiAgICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xzIGluIGNsYXNzRWxlbWVudHMpIHsKICAgICAgICBpZiAoX25hdGl2ZURhdGEuaXNKc0ludGVyb3BDbGFzcyhjbHMpKSB7CiAgICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hMb2NhbENsYXNzTWVtYmVyKGNscywKICAgICAgICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICAgICAgICBTdHJpbmcganNOYW1lID0KICAgICAgICAgICAgICAgIF9uYXRpdmVEYXRhLmNvbXB1dGVVbmVzY2FwZWRKU0ludGVyb3BOYW1lKG1lbWJlci5uYW1lKTsKICAgICAgICAgICAgaWYgKCFtZW1iZXIuaXNJbnN0YW5jZU1lbWJlcikgcmV0dXJuOwogICAgICAgICAgICBpZiAobWVtYmVyLmlzR2V0dGVyIHx8IG1lbWJlci5pc0ZpZWxkIHx8IG1lbWJlci5pc0Z1bmN0aW9uKSB7CiAgICAgICAgICAgICAgSXRlcmFibGU8U2VsZWN0b3I+IHNlbGVjdG9ycyA9CiAgICAgICAgICAgICAgICAgIF9jb2RlZ2VuV29ybGQuZ2V0dGVySW52b2NhdGlvbnNCeU5hbWUobWVtYmVyLm5hbWUpOwogICAgICAgICAgICAgIGlmIChzZWxlY3RvcnMgIT0gbnVsbCAmJiAhc2VsZWN0b3JzLmlzRW1wdHkpIHsKICAgICAgICAgICAgICAgIGZvciAoU2VsZWN0b3Igc2VsZWN0b3IgaW4gc2VsZWN0b3JzKSB7CiAgICAgICAgICAgICAgICAgIGpzLk5hbWUgc3R1Yk5hbWUgPSBfbmFtZXIuaW52b2NhdGlvbk5hbWUoc2VsZWN0b3IpOwogICAgICAgICAgICAgICAgICBpZiAoc3R1Yk5hbWVzLmFkZChzdHViTmFtZS5rZXkpKSB7CiAgICAgICAgICAgICAgICAgICAgaW50ZXJjZXB0b3JDbGFzcy5jYWxsU3R1YnMuYWRkKF9idWlsZFN0dWJNZXRob2Qoc3R1Yk5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGpzLmpzKCdmdW5jdGlvbihvYmopIHsgcmV0dXJuIG9iai4jIH0nLCBbanNOYW1lXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IG1lbWJlcikpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAobWVtYmVyLmlzU2V0dGVyIHx8IChtZW1iZXIuaXNGaWVsZCAmJiAhbWVtYmVyLmlzQ29uc3QpKSB7CiAgICAgICAgICAgICAgSXRlcmFibGU8U2VsZWN0b3I+IHNlbGVjdG9ycyA9CiAgICAgICAgICAgICAgICAgIF9jb2RlZ2VuV29ybGQuc2V0dGVySW52b2NhdGlvbnNCeU5hbWUobWVtYmVyLm5hbWUpOwogICAgICAgICAgICAgIGlmIChzZWxlY3RvcnMgIT0gbnVsbCAmJiAhc2VsZWN0b3JzLmlzRW1wdHkpIHsKICAgICAgICAgICAgICAgIHZhciBzdHViTmFtZSA9IF9uYW1lci5zZXR0ZXJGb3JNZW1iZXIobWVtYmVyKTsKICAgICAgICAgICAgICAgIGlmIChzdHViTmFtZXMuYWRkKHN0dWJOYW1lLmtleSkpIHsKICAgICAgICAgICAgICAgICAgaW50ZXJjZXB0b3JDbGFzcy5jYWxsU3R1YnMuYWRkKF9idWlsZFN0dWJNZXRob2Qoc3R1Yk5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBqcy5qcygnZnVuY3Rpb24ob2JqLCB2KSB7IHJldHVybiBvYmouIyA9IHYgfScsIFtqc05hbWVdKSwKICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IG1lbWJlcikpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gR2VuZXJhdGluZyBzdHVicyBmb3IgZGlyZWN0IGNhbGxzIGFuZCBzdHVicyBmb3IgY2FsbC10aHJvdWdoCiAgICAgICAgICAgIC8vIG9mIGdldHRlcnMgdGhhdCBoYXBwZW4gdG8gYmUgZnVuY3Rpb25zLgogICAgICAgICAgICBib29sIGlzRnVuY3Rpb25MaWtlID0gZmFsc2U7CiAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSBudWxsOwoKICAgICAgICAgICAgaWYgKG1lbWJlci5pc0Z1bmN0aW9uKSB7CiAgICAgICAgICAgICAgRnVuY3Rpb25FbnRpdHkgZm4gPSBtZW1iZXI7CiAgICAgICAgICAgICAgZnVuY3Rpb25UeXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvblR5cGUoZm4pOwogICAgICAgICAgICB9IGVsc2UgaWYgKG1lbWJlci5pc0dldHRlcikgewogICAgICAgICAgICAgIGlzRnVuY3Rpb25MaWtlID0gdHJ1ZTsKICAgICAgICAgICAgfSAvLyBUT0RPKGphY29icik6IGhhbmRsZSBmaWVsZCBlbGVtZW50cy4KCiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uTGlrZSB8fCBmdW5jdGlvblR5cGUgIT0gbnVsbCkgewogICAgICAgICAgICAgIGludCBtaW5BcmdzOwogICAgICAgICAgICAgIGludCBtYXhBcmdzOwogICAgICAgICAgICAgIGlmIChmdW5jdGlvblR5cGUgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgbWluQXJncyA9IGZ1bmN0aW9uVHlwZS5wYXJhbWV0ZXJUeXBlcy5sZW5ndGg7CiAgICAgICAgICAgICAgICBtYXhBcmdzID0gbWluQXJncyArIGZ1bmN0aW9uVHlwZS5vcHRpb25hbFBhcmFtZXRlclR5cGVzLmxlbmd0aDsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbWluQXJncyA9IDA7CiAgICAgICAgICAgICAgICBtYXhBcmdzID0gMzI3Njc7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHZhciBzZWxlY3RvcnMgPSBfY29kZWdlbldvcmxkLmludm9jYXRpb25zQnlOYW1lKG1lbWJlci5uYW1lKTsKICAgICAgICAgICAgICAvLyBOYW1lZCBhcmd1bWVudHMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkLiBJbiB0aGUgZnV0dXJlIHdlCiAgICAgICAgICAgICAgLy8gbWF5IHdhbnQgdG8gbWFwIG5hbWVkIGFyZ3VtZW50cyB0byBhbiBvYmplY3QgbGl0ZXJhbCBjb250YWluaW5nCiAgICAgICAgICAgICAgLy8gYWxsIG5hbWVkIGFyZ3VtZW50cy4KICAgICAgICAgICAgICBpZiAoc2VsZWN0b3JzICE9IG51bGwgJiYgIXNlbGVjdG9ycy5pc0VtcHR5KSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBzZWxlY3RvciBpbiBzZWxlY3RvcnMua2V5cykgewogICAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBhcml0eSBtYXRjaGVzIHRoaXMgbWVtYmVyLgogICAgICAgICAgICAgICAgICB2YXIgYXJndW1lbnRDb3VudCA9IHNlbGVjdG9yLmFyZ3VtZW50Q291bnQ7CiAgICAgICAgICAgICAgICAgIC8vIEpTIGludGVyb3AgZG9lcyBub3Qgc3VwcG9ydCBuYW1lZCBhcmd1bWVudHMuCiAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rvci5uYW1lZEFyZ3VtZW50Q291bnQgPiAwKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCBtaW5BcmdzKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnQgPiBtYXhBcmdzKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgdmFyIHN0dWJOYW1lID0gX25hbWVyLmludm9jYXRpb25OYW1lKHNlbGVjdG9yKTsKICAgICAgICAgICAgICAgICAgaWYgKCFzdHViTmFtZXMuYWRkKHN0dWJOYW1lLmtleSkpIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9CiAgICAgICAgICAgICAgICAgICAgICBuZXcgTGlzdDxTdHJpbmc+LmdlbmVyYXRlKGFyZ3VtZW50Q291bnQsIChpKSA9PiAncCRpJyk7CgogICAgICAgICAgICAgICAgICAvLyBXZSBpbnRlbnRpb25hbGx5IGdlbmVyYXRlIHRoZSBzYW1lIHN0dWIgbWV0aG9kIGZvciBkaXJlY3QKICAgICAgICAgICAgICAgICAgLy8gY2FsbHMgYW5kIGNhbGwtdGhyb3VnaHMgb2YgZ2V0dGVycyBzbyB0aGF0IGNhbGxpbmcgYQogICAgICAgICAgICAgICAgICAvLyBnZXR0ZXIgdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gYmVoYXZlcyB0aGUgc2FtZSBhcyBjYWxsaW5nCiAgICAgICAgICAgICAgICAgIC8vIGEgbWV0aG9kLiBUaGlzIGlzIGhlbHBmdWwgYXMgbWFueSB0eXBlZCBKYXZhU2NyaXB0IEFQSXMKICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmeSBtZW1iZXIgZnVuY3Rpb25zIHdpdGggZ2V0dGVycyB0aGF0IHJldHVybgogICAgICAgICAgICAgICAgICAvLyBmdW5jdGlvbnMuIFRoZSBiZWhhdmlvciBvZiB0aGlzIHNvbHV0aW9uIG1hdGNoZXMgSmF2YVNjcmlwdAogICAgICAgICAgICAgICAgICAvLyBiZWhhdmlvciBpbXBsaWNpdGx5IGJpbmRpbmcgdGhpcyBvbmx5IHdoZW4gSmF2YVNjcmlwdAogICAgICAgICAgICAgICAgICAvLyB3b3VsZC4KICAgICAgICAgICAgICAgICAgaW50ZXJjZXB0b3JDbGFzcy5jYWxsU3R1YnMuYWRkKF9idWlsZFN0dWJNZXRob2QoCiAgICAgICAgICAgICAgICAgICAgICBzdHViTmFtZSwKICAgICAgICAgICAgICAgICAgICAgIGpzLmpzKCdmdW5jdGlvbihyZWNlaXZlciwgIykgeyByZXR1cm4gcmVjZWl2ZXIuIygjKSB9JywKICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFyYW1ldGVycywganNOYW1lLCBwYXJhbWV0ZXJzXSksCiAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBtZW1iZXIpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfQoKICAvLyBOb3RlIHRoYXQgYSBsaWJyYXJ5LWVsZW1lbnQgbWF5IGhhdmUgbXVsdGlwbGUgW0xpYnJhcnldcywgaWYgaXQgaXMgc3BsaXQKICAvLyBpbnRvIG11bHRpcGxlIG91dHB1dCB1bml0cy4KICBMaWJyYXJ5IF9idWlsZExpYnJhcnkoTGlicmFyeUVudGl0eSBsaWJyYXJ5LCBMaXN0PENsYXNzRW50aXR5PiBjbGFzc0VsZW1lbnRzLAogICAgICBMaXN0PE1lbWJlckVudGl0eT4gbWVtYmVyRWxlbWVudHMpIHsKICAgIFN0cmluZyB1cmkgPSBsaWJyYXJ5LmNhbm9uaWNhbFVyaS50b1N0cmluZygpOwoKICAgIExpc3Q8U3RhdGljTWV0aG9kPiBzdGF0aWNzID0gbWVtYmVyRWxlbWVudHMKICAgICAgICAud2hlcmUoKGUpID0+ICFlLmlzRmllbGQpCiAgICAgICAgLmNhc3Q8RnVuY3Rpb25FbnRpdHk+KCkKICAgICAgICAubWFwPFN0YXRpY01ldGhvZD4oX2J1aWxkU3RhdGljTWV0aG9kKQogICAgICAgIC50b0xpc3QoKTsKCiAgICBpZiAobGlicmFyeSA9PSBfY29tbW9uRWxlbWVudHMuaW50ZXJjZXB0b3JzTGlicmFyeSkgewogICAgICBzdGF0aWNzLmFkZEFsbChfZ2VuZXJhdGVHZXRJbnRlcmNlcHRvck1ldGhvZHMoKSk7CiAgICAgIHN0YXRpY3MuYWRkQWxsKF9nZW5lcmF0ZU9uZVNob3RJbnRlcmNlcHRvcnMoKSk7CiAgICB9CgogICAgTGlzdDxDbGFzcz4gY2xhc3NlcyA9IGNsYXNzRWxlbWVudHMKICAgICAgICAubWFwKChDbGFzc0VudGl0eSBjbGFzc0VsZW1lbnQpID0+IF9jbGFzc2VzW2NsYXNzRWxlbWVudF0pCiAgICAgICAgLndoZXJlKChDbGFzcyBjbHMpID0+CiAgICAgICAgICAgICFjbHMuaXNOYXRpdmUgfHwgIV91bm5lZWRlZE5hdGl2ZUNsYXNzZXMuY29udGFpbnMoY2xzKSkKICAgICAgICAudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CgogICAgYm9vbCB2aXNpdFN0YXRpY3MgPSB0cnVlOwogICAgTGlzdDxGaWVsZD4gc3RhdGljRmllbGRzRm9yUmVmbGVjdGlvbiA9CiAgICAgICAgX2J1aWxkRmllbGRzKGxpYnJhcnk6IGxpYnJhcnksIHZpc2l0U3RhdGljczogdmlzaXRTdGF0aWNzKTsKCiAgICByZXR1cm4gbmV3IExpYnJhcnkoCiAgICAgICAgbGlicmFyeSwgdXJpLCBzdGF0aWNzLCBjbGFzc2VzLCBzdGF0aWNGaWVsZHNGb3JSZWZsZWN0aW9uKTsKICB9CgogIGJvb2wgX2lzU29mdERlZmVycmVkKENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBfbm90U29mdERlZmVycmVkICE9IG51bGwgJiYgIV9ub3RTb2Z0RGVmZXJyZWQuY29udGFpbnMoZWxlbWVudCk7CiAgfQoKICBDbGFzcyBfYnVpbGRDbGFzcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIGJvb2wgb25seUZvclJ0aSA9IGNvbGxlY3Rvci5jbGFzc2VzT25seU5lZWRlZEZvclJ0aS5jb250YWlucyhjbHMpOwogICAgYm9vbCBoYXNSdGlGaWVsZCA9IF9ydGlOZWVkLmNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKGNscyk7CiAgICBpZiAoX25hdGl2ZURhdGEuaXNKc0ludGVyb3BDbGFzcyhjbHMpKSB7CiAgICAgIC8vIFRPRE8oamFjb2JyKTogY2hlY2sgd2hldGhlciB0aGUgY2xhc3MgaGFzIGFueSBhY3RpdmUgc3RhdGljIGZpZWxkcwogICAgICAvLyBpZiBpdCBkb2VzIG5vdCB3ZSBjYW4gc3VwcHJlc3MgaXQgY29tcGxldGVseS4KICAgICAgb25seUZvclJ0aSA9IHRydWU7CiAgICB9CiAgICBib29sIGlzQ2xvc3VyZUJhc2VDbGFzcyA9IGNscyA9PSBfY29tbW9uRWxlbWVudHMuY2xvc3VyZUNsYXNzOwoKICAgIExpc3Q8TWV0aG9kPiBtZXRob2RzID0gW107CiAgICBMaXN0PFN0dWJNZXRob2Q+IGNhbGxTdHVicyA9IDxTdHViTWV0aG9kPltdOwoKICAgIENsYXNzU3R1YkdlbmVyYXRvciBjbGFzc1N0dWJHZW5lcmF0b3IgPSBuZXcgQ2xhc3NTdHViR2VuZXJhdG9yKAogICAgICAgIF90YXNrLmVtaXR0ZXIsIF9jb21tb25FbGVtZW50cywgX25hbWVyLCBfY29kZWdlbldvcmxkLCBfY2xvc2VkV29ybGQsCiAgICAgICAgZW5hYmxlTWluaWZpY2F0aW9uOiBfb3B0aW9ucy5lbmFibGVNaW5pZmljYXRpb24pOwogICAgUnVudGltZVR5cGVHZW5lcmF0b3IgcnVudGltZVR5cGVHZW5lcmF0b3IgPSBuZXcgUnVudGltZVR5cGVHZW5lcmF0b3IoCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLAogICAgICAgIF9vdXRwdXRVbml0RGF0YSwKICAgICAgICBfdGFzaywKICAgICAgICBfbmFtZXIsCiAgICAgICAgX3J0aUNoZWNrcywKICAgICAgICBfcnRpRW5jb2Rlcik7CgogICAgdm9pZCB2aXNpdEluc3RhbmNlTWVtYmVyKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgICAgaWYgKCFtZW1iZXIuaXNBYnN0cmFjdCAmJiAhbWVtYmVyLmlzRmllbGQpIHsKICAgICAgICBpZiAobWVtYmVyIGlzISBKU2lnbmF0dXJlTWV0aG9kKSB7CiAgICAgICAgICBNZXRob2QgbWV0aG9kID0gX2J1aWxkTWV0aG9kKG1lbWJlcik7CiAgICAgICAgICBpZiAobWV0aG9kICE9IG51bGwpIG1ldGhvZHMuYWRkKG1ldGhvZCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChtZW1iZXIuaXNHZXR0ZXIgfHwgbWVtYmVyLmlzRmllbGQpIHsKICAgICAgICBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+IHNlbGVjdG9ycyA9CiAgICAgICAgICAgIF9jb2RlZ2VuV29ybGQuaW52b2NhdGlvbnNCeU5hbWUobWVtYmVyLm5hbWUpOwogICAgICAgIGlmIChzZWxlY3RvcnMgIT0gbnVsbCAmJiAhc2VsZWN0b3JzLmlzRW1wdHkpIHsKICAgICAgICAgIE1hcDxqcy5OYW1lLCBqcy5FeHByZXNzaW9uPiBjYWxsU3R1YnNGb3JNZW1iZXIgPQogICAgICAgICAgICAgIGNsYXNzU3R1YkdlbmVyYXRvci5nZW5lcmF0ZUNhbGxTdHVic0ZvckdldHRlcihtZW1iZXIsIHNlbGVjdG9ycyk7CiAgICAgICAgICBjYWxsU3R1YnNGb3JNZW1iZXIuZm9yRWFjaCgoanMuTmFtZSBuYW1lLCBqcy5FeHByZXNzaW9uIGNvZGUpIHsKICAgICAgICAgICAgY2FsbFN0dWJzLmFkZChfYnVpbGRTdHViTWV0aG9kKG5hbWUsIGNvZGUsIGVsZW1lbnQ6IG1lbWJlcikpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgdm9pZCB2aXNpdE1lbWJlcihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgIGlmIChtZW1iZXIuaXNJbnN0YW5jZU1lbWJlcikgewogICAgICAgIHZpc2l0SW5zdGFuY2VNZW1iZXIobWVtYmVyKTsKICAgICAgfQogICAgfQoKICAgIExpc3Q8U3R1Yk1ldGhvZD4gbm9TdWNoTWV0aG9kU3R1YnMgPSA8U3R1Yk1ldGhvZD5bXTsKCiAgICBpZiAoX2JhY2tlbmRVc2FnZS5pc05vU3VjaE1ldGhvZFVzZWQgJiYKICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzKSB7CiAgICAgIE1hcDxqcy5OYW1lLCBTZWxlY3Rvcj4gc2VsZWN0b3JzID0KICAgICAgICAgIGNsYXNzU3R1YkdlbmVyYXRvci5jb21wdXRlU2VsZWN0b3JzRm9yTnNtSGFuZGxlcnMoKTsKICAgICAgc2VsZWN0b3JzLmZvckVhY2goKGpzLk5hbWUgbmFtZSwgU2VsZWN0b3Igc2VsZWN0b3IpIHsKICAgICAgICAvLyBJZiB0aGUgcHJvZ3JhbSBjb250YWlucyBgY29uc3QgU3ltYm9sYCBuYW1lcyB3ZSBoYXZlIHRvIHJldGFpbiB0aGVtLgogICAgICAgIFN0cmluZyBzZWxlY3Rvck5hbWUgPSBzZWxlY3Rvci5uYW1lOwogICAgICAgIGlmIChzZWxlY3Rvci5pc1NldHRlcikgc2VsZWN0b3JOYW1lID0gIiRzZWxlY3Rvck5hbWU9IjsKICAgICAgICBub1N1Y2hNZXRob2RTdHVicy5hZGQoCiAgICAgICAgICAgIGNsYXNzU3R1YkdlbmVyYXRvci5nZW5lcmF0ZVN0dWJGb3JOb1N1Y2hNZXRob2QobmFtZSwgc2VsZWN0b3IpKTsKICAgICAgfSk7CiAgICB9CgogICAgaWYgKGlzQ2xvc3VyZUJhc2VDbGFzcykgewogICAgICAvLyBXZSBhZGQgYSBzcGVjaWFsIGdldHRlciB0byBhbGxvdyBmb3IgdGVhcmluZyBvZmYgYSBjbG9zdXJlIGZyb20gaXRzZWxmLgogICAgICBqcy5OYW1lIG5hbWUgPSBfbmFtZXIuZ2V0dGVyRm9yTWVtYmVyKE5hbWVzLmNhbGwpOwogICAgICBqcy5GdW4gZnVuY3Rpb24gPSBqcy5qcygnZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9Jyk7CiAgICAgIGNhbGxTdHVicy5hZGQoX2J1aWxkU3R1Yk1ldGhvZChuYW1lLCBmdW5jdGlvbikpOwogICAgfQoKICAgIGlmIChfY29tbW9uRWxlbWVudHMuaXNJbnN0YW50aWF0aW9uQ2xhc3MoY2xzKSAmJiAhb25seUZvclJ0aSkgewogICAgICBjYWxsU3R1YnMuYWRkQWxsKF9nZW5lcmF0ZUluc3RhbnRpYXRpb25TdHVicyhjbHMpKTsKICAgIH0KCiAgICAvLyBNaXhpbkFwcGxpY2F0aW9ucyBydW4gdGhyb3VnaCB0aGUgbWVtYmVycyBvZiB0aGVpciBtaXhpbi4gSGVyZSwgd2UgYXJlCiAgICAvLyBvbmx5IGludGVyZXN0ZWQgaW4gZGlyZWN0IG1lbWJlcnMuCiAgICBib29sIGlzU3VwZXJNaXhpbkFwcGxpY2F0aW9uID0gZmFsc2U7CiAgICBpZiAoIW9ubHlGb3JSdGkpIHsKICAgICAgaWYgKF9lbGVtZW50RW52aXJvbm1lbnQuaXNTdXBlck1peGluQXBwbGljYXRpb24oY2xzKSkgewogICAgICAgIExpc3Q8TWVtYmVyRW50aXR5PiBtZW1iZXJzID0gPE1lbWJlckVudGl0eT5bXTsKICAgICAgICB2b2lkIGFkZChNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgICAgICBpZiAobWVtYmVyLmVuY2xvc2luZ0NsYXNzID09IGNscykgewogICAgICAgICAgICBtZW1iZXJzLmFkZChtZW1iZXIpOwogICAgICAgICAgICBpc1N1cGVyTWl4aW5BcHBsaWNhdGlvbiA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hMb2NhbENsYXNzTWVtYmVyKGNscywgYWRkKTsKICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hJbmplY3RlZENsYXNzTWVtYmVyKGNscywgYWRkKTsKCiAgICAgICAgaWYgKG1lbWJlcnMuaXNOb3RFbXB0eSkgewogICAgICAgICAgX3NvcnRlci5zb3J0TWVtYmVycyhtZW1iZXJzKS5mb3JFYWNoKHZpc2l0TWVtYmVyKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoIV9lbGVtZW50RW52aXJvbm1lbnQuaXNNaXhpbkFwcGxpY2F0aW9uKGNscykpIHsKICAgICAgICBMaXN0PE1lbWJlckVudGl0eT4gbWVtYmVycyA9IDxNZW1iZXJFbnRpdHk+W107CiAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoTG9jYWxDbGFzc01lbWJlcihjbHMsIG1lbWJlcnMuYWRkKTsKICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hJbmplY3RlZENsYXNzTWVtYmVyKGNscywgbWVtYmVycy5hZGQpOwogICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaENvbnN0cnVjdG9yQm9keShjbHMsIG1lbWJlcnMuYWRkKTsKICAgICAgICBfc29ydGVyLnNvcnRNZW1iZXJzKG1lbWJlcnMpLmZvckVhY2godmlzaXRNZW1iZXIpOwogICAgICB9CiAgICB9CiAgICBib29sIGlzSW50ZXJjZXB0ZWRDbGFzcyA9IF9pbnRlcmNlcHRvckRhdGEuaXNJbnRlcmNlcHRlZENsYXNzKGNscyk7CiAgICBMaXN0PEZpZWxkPiBpbnN0YW5jZUZpZWxkcyA9IG9ubHlGb3JSdGkKICAgICAgICA/IGNvbnN0IDxGaWVsZD5bXQogICAgICAgIDogX2J1aWxkRmllbGRzKAogICAgICAgICAgICBjbHM6IGNscywKICAgICAgICAgICAgdmlzaXRTdGF0aWNzOiBmYWxzZSwKICAgICAgICAgICAgaXNIb2xkZXJJbnRlcmNlcHRlZENsYXNzOiBpc0ludGVyY2VwdGVkQ2xhc3MpOwogICAgTGlzdDxGaWVsZD4gc3RhdGljRmllbGRzRm9yUmVmbGVjdGlvbiA9IG9ubHlGb3JSdGkKICAgICAgICA/IGNvbnN0IDxGaWVsZD5bXQogICAgICAgIDogX2J1aWxkRmllbGRzKAogICAgICAgICAgICBjbHM6IGNscywKICAgICAgICAgICAgdmlzaXRTdGF0aWNzOiB0cnVlLAogICAgICAgICAgICBpc0hvbGRlckludGVyY2VwdGVkQ2xhc3M6IGlzSW50ZXJjZXB0ZWRDbGFzcyk7CgogICAgVHlwZVRlc3RQcm9wZXJ0aWVzIHR5cGVUZXN0cyA9IHJ1bnRpbWVUeXBlR2VuZXJhdG9yLmdlbmVyYXRlSXNUZXN0cygKICAgICAgICBjbHMsIF9nZW5lcmF0ZWRDb2RlLAogICAgICAgIHN0b3JlRnVuY3Rpb25UeXBlSW5NZXRhZGF0YTogX3N0b3JlRnVuY3Rpb25UeXBlc0luTWV0YWRhdGEpOwoKICAgIExpc3Q8U3R1Yk1ldGhvZD4gY2hlY2tlZFNldHRlcnMgPSA8U3R1Yk1ldGhvZD5bXTsKICAgIExpc3Q8U3R1Yk1ldGhvZD4gaXNDaGVja3MgPSA8U3R1Yk1ldGhvZD5bXTsKICAgIGlmIChfbmF0aXZlRGF0YS5pc0pzSW50ZXJvcENsYXNzKGNscykpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSW5zdGVhZCBvZiBnZW5lcmF0aW5nIGFsbCBzdHVicyBmb3IgZWFjaAogICAgICAvLyBqcy1pbnRlcm9wIGNsYXNzIHdlIHNob3VsZCBnZW5lcmF0ZSBhIHN0dWIgZm9yIGVhY2ggaW1wbGVtZW50ZWQgY2xhc3MuCiAgICAgIC8vIEN1cnJlbnRseSB3ZSBnZW5lcmF0ZSBkdXBsaWNhdGVzIGlmIGEgY2xhc3MgaXMgaW1wbGVtZW50ZWQgYnkgbXVsdGlwbGUKICAgICAgLy8ganMtaW50ZXJvcCBjbGFzc2VzLgogICAgICB0eXBlVGVzdHMuZm9yRWFjaFByb3BlcnR5KF9zb3J0ZXIsIChqcy5OYW1lIG5hbWUsIGpzLk5vZGUgY29kZSkgewogICAgICAgIF9jbGFzc2VzW19jb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRPYmplY3RDbGFzc10KICAgICAgICAgICAgLmlzQ2hlY2tzCiAgICAgICAgICAgIC5hZGQoX2J1aWxkU3R1Yk1ldGhvZChuYW1lLCBjb2RlKSk7CiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChGaWVsZCBmaWVsZCBpbiBpbnN0YW5jZUZpZWxkcykgewogICAgICAgIGlmIChmaWVsZC5uZWVkc0NoZWNrZWRTZXR0ZXIpIHsKICAgICAgICAgIGFzc2VydCghZmllbGQubmVlZHNVbmNoZWNrZWRTZXR0ZXIpOwogICAgICAgICAgRmllbGRFbnRpdHkgZWxlbWVudCA9IGZpZWxkLmVsZW1lbnQ7CiAgICAgICAgICBqcy5FeHByZXNzaW9uIGNvZGUgPSBfZ2VuZXJhdGVkQ29kZVtlbGVtZW50XTsKICAgICAgICAgIGFzc2VydChjb2RlICE9IG51bGwsICJObyBzZXR0ZXIgY29kZSBmb3IgZmllbGQ6ICRmaWVsZCIpOwogICAgICAgICAgaWYgKGNvZGUgPT0gbnVsbCkgewogICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBvY2N1ciBiZWNhdXNlIGNvZGVnZW4gbWVtYmVyIHVzYWdlIGlzIG5vdwogICAgICAgICAgICAvLyBsaW1pdGVkIGJ5IGNsb3NlZCB3b3JsZCBtZW1iZXIgdXNhZ2UuIEluIHRoZSBjYXNlIHdlJ3ZlIG1pc3NlZCBhCiAgICAgICAgICAgIC8vIHNwb3Qgd2UgY2F1dGlvdXNseSBnZW5lcmF0ZSBhbiBlbXB0eSBmdW5jdGlvbi4KICAgICAgICAgICAgY29kZSA9IGpzLmpzKCJmdW5jdGlvbigpIHt9Iik7CiAgICAgICAgICB9CiAgICAgICAgICBqcy5OYW1lIG5hbWUgPSBfbmFtZXIuZGVyaXZlU2V0dGVyTmFtZShmaWVsZC5hY2Nlc3Nvck5hbWUpOwogICAgICAgICAgY2hlY2tlZFNldHRlcnMuYWRkKF9idWlsZFN0dWJNZXRob2QobmFtZSwgY29kZSwgZWxlbWVudDogZWxlbWVudCkpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgdHlwZVRlc3RzLmZvckVhY2hQcm9wZXJ0eShfc29ydGVyLCAoanMuTmFtZSBuYW1lLCBqcy5Ob2RlIGNvZGUpIHsKICAgICAgICBpc0NoZWNrcy5hZGQoX2J1aWxkU3R1Yk1ldGhvZChuYW1lLCBjb2RlKSk7CiAgICAgIH0pOwogICAgfQoKICAgIGpzLk5hbWUgbmFtZSA9IF9uYW1lci5jbGFzc05hbWUoY2xzKTsKICAgIFN0cmluZyBob2xkZXJOYW1lID0gX25hbWVyLmdsb2JhbE9iamVjdEZvckNsYXNzKGNscyk7CiAgICAvLyBUT0RPKGZsb2l0c2NoKTogd2Ugc2hvdWxkbid0IHVwZGF0ZSB0aGUgcmVnaXN0cnkgaW4gdGhlIG1pZGRsZSBvZgogICAgLy8gYnVpbGRpbmcgYSBjbGFzcy4KICAgIEhvbGRlciBob2xkZXIgPSBfcmVnaXN0cnkucmVnaXN0ZXJIb2xkZXIoaG9sZGVyTmFtZSk7CiAgICBib29sIGlzSW5zdGFudGlhdGVkID0gIV9uYXRpdmVEYXRhLmlzSnNJbnRlcm9wQ2xhc3MoY2xzKSAmJgogICAgICAgIF9jb2RlZ2VuV29ybGQuZGlyZWN0bHlJbnN0YW50aWF0ZWRDbGFzc2VzLmNvbnRhaW5zKGNscyk7CgogICAgQ2xhc3MgcmVzdWx0OwogICAgaWYgKF9lbGVtZW50RW52aXJvbm1lbnQuaXNNaXhpbkFwcGxpY2F0aW9uKGNscykgJiYKICAgICAgICAhb25seUZvclJ0aSAmJgogICAgICAgICFpc1N1cGVyTWl4aW5BcHBsaWNhdGlvbikgewogICAgICBhc3NlcnQoIV9uYXRpdmVEYXRhLmlzTmF0aXZlQ2xhc3MoY2xzKSk7CiAgICAgIGFzc2VydChtZXRob2RzLmlzRW1wdHkpOwogICAgICBhc3NlcnQoIWlzQ2xvc3VyZUJhc2VDbGFzcyk7CgogICAgICByZXN1bHQgPSBuZXcgTWl4aW5BcHBsaWNhdGlvbigKICAgICAgICAgIGNscywKICAgICAgICAgIG5hbWUsCiAgICAgICAgICBob2xkZXIsCiAgICAgICAgICBpbnN0YW5jZUZpZWxkcywKICAgICAgICAgIHN0YXRpY0ZpZWxkc0ZvclJlZmxlY3Rpb24sCiAgICAgICAgICBjYWxsU3R1YnMsCiAgICAgICAgICBjaGVja2VkU2V0dGVycywKICAgICAgICAgIGlzQ2hlY2tzLAogICAgICAgICAgX3J0aUNoZWNrcy5yZXF1aXJlZENoZWNrc1tjbHNdLAogICAgICAgICAgdHlwZVRlc3RzLmZ1bmN0aW9uVHlwZUluZGV4LAogICAgICAgICAgaXNEaXJlY3RseUluc3RhbnRpYXRlZDogaXNJbnN0YW50aWF0ZWQsCiAgICAgICAgICBoYXNSdGlGaWVsZDogaGFzUnRpRmllbGQsCiAgICAgICAgICBvbmx5Rm9yUnRpOiBvbmx5Rm9yUnRpKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlc3VsdCA9IG5ldyBDbGFzcygKICAgICAgICAgIGNscywKICAgICAgICAgIG5hbWUsCiAgICAgICAgICBob2xkZXIsCiAgICAgICAgICBtZXRob2RzLAogICAgICAgICAgaW5zdGFuY2VGaWVsZHMsCiAgICAgICAgICBzdGF0aWNGaWVsZHNGb3JSZWZsZWN0aW9uLAogICAgICAgICAgY2FsbFN0dWJzLAogICAgICAgICAgbm9TdWNoTWV0aG9kU3R1YnMsCiAgICAgICAgICBjaGVja2VkU2V0dGVycywKICAgICAgICAgIGlzQ2hlY2tzLAogICAgICAgICAgX3J0aUNoZWNrcy5yZXF1aXJlZENoZWNrc1tjbHNdLAogICAgICAgICAgdHlwZVRlc3RzLmZ1bmN0aW9uVHlwZUluZGV4LAogICAgICAgICAgaXNEaXJlY3RseUluc3RhbnRpYXRlZDogaXNJbnN0YW50aWF0ZWQsCiAgICAgICAgICBoYXNSdGlGaWVsZDogaGFzUnRpRmllbGQsCiAgICAgICAgICBvbmx5Rm9yUnRpOiBvbmx5Rm9yUnRpLAogICAgICAgICAgaXNOYXRpdmU6IF9uYXRpdmVEYXRhLmlzTmF0aXZlQ2xhc3MoY2xzKSwKICAgICAgICAgIGlzQ2xvc3VyZUJhc2VDbGFzczogaXNDbG9zdXJlQmFzZUNsYXNzLAogICAgICAgICAgaXNTb2Z0RGVmZXJyZWQ6IF9pc1NvZnREZWZlcnJlZChjbHMpLAogICAgICAgICAgaXNTdXBlck1peGluQXBwbGljYXRpb246IGlzU3VwZXJNaXhpbkFwcGxpY2F0aW9uKTsKICAgIH0KICAgIF9jbGFzc2VzW2Nsc10gPSByZXN1bHQ7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgdm9pZCBhc3NvY2lhdGVOYW1lZFR5cGVWYXJpYWJsZXNOZXdSdGkoKSB7CiAgICBmb3IgKFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlIGluIF9jb2RlZ2VuV29ybGQubmFtZWRUeXBlVmFyaWFibGVzTmV3UnRpCiAgICAgICAgLnVuaW9uKF9sYXRlTmFtZWRUeXBlVmFyaWFibGVzTmV3UnRpKSkgewogICAgICBmb3IgKENsYXNzRW50aXR5IGVudGl0eQogICAgICAgICAgaW4gX2NsYXNzSGllcmFyY2h5LnN1YnR5cGVzT2YodHlwZVZhcmlhYmxlLmVsZW1lbnQudHlwZURlY2xhcmF0aW9uKSkgewogICAgICAgIENsYXNzIGNscyA9IF9jbGFzc2VzW2VudGl0eV07CiAgICAgICAgaWYgKGNscyA9PSBudWxsKSBjb250aW51ZTsKICAgICAgICBjbHMubmFtZWRUeXBlVmFyaWFibGVzTmV3UnRpLmFkZCh0eXBlVmFyaWFibGUpOwogICAgICB9CiAgICB9CiAgfQoKICBib29sIF9tZXRob2ROZWVkc1N0dWJzKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCkgewogICAgaWYgKG1ldGhvZCBpcyBKR2VuZXJhdG9yQm9keSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKG1ldGhvZCBpcyBDb25zdHJ1Y3RvckJvZHlFbnRpdHkpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBtZXRob2QucGFyYW1ldGVyU3RydWN0dXJlLm9wdGlvbmFsUGFyYW1ldGVycyAhPSAwIHx8CiAgICAgICAgbWV0aG9kLnBhcmFtZXRlclN0cnVjdHVyZS50eXBlUGFyYW1ldGVycyAhPSAwOwogIH0KCiAgYm9vbCBfbWV0aG9kQ2FuQmVBcHBsaWVkKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCkgewogICAgcmV0dXJuIF9iYWNrZW5kVXNhZ2UuaXNGdW5jdGlvbkFwcGx5VXNlZCAmJgogICAgICAgIF9pbmZlcnJlZERhdGEuZ2V0TWlnaHRCZVBhc3NlZFRvQXBwbHkobWV0aG9kKTsKICB9CgogIC8qIE1hcCB8IExpc3QgKi8gX2NvbXB1dGVQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCkgewogICAgdmFyIC8qIE1hcCB8IExpc3QgKi8gb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzOwogICAgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSA9IG1ldGhvZC5wYXJhbWV0ZXJTdHJ1Y3R1cmU7CiAgICBpZiAocGFyYW1ldGVyU3RydWN0dXJlLm5hbWVkUGFyYW1ldGVycy5pc05vdEVtcHR5KSB7CiAgICAgIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcyA9IG5ldyBNYXA8U3RyaW5nLCBDb25zdGFudFZhbHVlPigpOwogICAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hQYXJhbWV0ZXIobWV0aG9kLAogICAgICAgICAgKERhcnRUeXBlIHR5cGUsIFN0cmluZyBuYW1lLCBDb25zdGFudFZhbHVlIGRlZmF1bHRWYWx1ZSkgewogICAgICAgIGlmIChwYXJhbWV0ZXJTdHJ1Y3R1cmUubmFtZWRQYXJhbWV0ZXJzLmNvbnRhaW5zKG5hbWUpKSB7CiAgICAgICAgICBhc3NlcnQoZGVmYXVsdFZhbHVlICE9IG51bGwpOwogICAgICAgICAgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzW25hbWVdID0gZGVmYXVsdFZhbHVlOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMgPSA8Q29uc3RhbnRWYWx1ZT5bXTsKICAgICAgaW50IGluZGV4ID0gMDsKICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoUGFyYW1ldGVyKG1ldGhvZCwKICAgICAgICAgIChEYXJ0VHlwZSB0eXBlLCBTdHJpbmcgbmFtZSwgQ29uc3RhbnRWYWx1ZSBkZWZhdWx0VmFsdWUpIHsKICAgICAgICBpZiAoaW5kZXggPj0gcGFyYW1ldGVyU3RydWN0dXJlLnJlcXVpcmVkUGFyYW1ldGVycykgewogICAgICAgICAgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzLmFkZChkZWZhdWx0VmFsdWUpOwogICAgICAgIH0KICAgICAgICBpbmRleCsrOwogICAgICB9KTsKICAgIH0KICAgIHJldHVybiBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXM7CiAgfQoKICBEYXJ0TWV0aG9kIF9idWlsZE1ldGhvZChGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICBqcy5OYW1lIG5hbWUgPSBfbmFtZXIubWV0aG9kUHJvcGVydHlOYW1lKGVsZW1lbnQpOwogICAganMuRXhwcmVzc2lvbiBjb2RlID0gX2dlbmVyYXRlZENvZGVbZWxlbWVudF07CgogICAgLy8gVE9ETyhrYXNwZXJsKTogRmlndXJlIG91dCB1bmRlciB3aGljaCBjb25kaXRpb25zIGNvZGUgaXMgbnVsbC4KICAgIGlmIChjb2RlID09IG51bGwpIHJldHVybiBudWxsOwoKICAgIGJvb2wgY2FuVGVhck9mZiA9IGZhbHNlOwogICAganMuTmFtZSB0ZWFyT2ZmTmFtZTsKICAgIGJvb2wgaXNDbG9zdXJlQ2FsbE1ldGhvZCA9IGZhbHNlOwogICAgYm9vbCBpc05vdEFwcGx5VGFyZ2V0ID0KICAgICAgICAhZWxlbWVudC5pc0Z1bmN0aW9uIHx8IGVsZW1lbnQuaXNHZXR0ZXIgfHwgZWxlbWVudC5pc1NldHRlcjsKCiAgICBib29sIGNhbkJlQXBwbGllZCA9IF9tZXRob2RDYW5CZUFwcGxpZWQoZWxlbWVudCk7CgogICAganMuTmFtZSBhbGlhc05hbWUgPSBfY29kZWdlbldvcmxkLmlzQWxpYXNlZFN1cGVyTWVtYmVyKGVsZW1lbnQpCiAgICAgICAgPyBfbmFtZXIuYWxpYXNlZFN1cGVyTWVtYmVyUHJvcGVydHlOYW1lKGVsZW1lbnQpCiAgICAgICAgOiBudWxsOwoKICAgIGlmIChpc05vdEFwcGx5VGFyZ2V0KSB7CiAgICAgIGNhblRlYXJPZmYgPSBmYWxzZTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChlbGVtZW50LmVuY2xvc2luZ0NsYXNzLmlzQ2xvc3VyZSkgewogICAgICAgIGNhblRlYXJPZmYgPSBmYWxzZTsKICAgICAgICBpc0Nsb3N1cmVDYWxsTWV0aG9kID0gdHJ1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBDYXJlZnVsIHdpdGggb3BlcmF0b3JzLgogICAgICAgIGNhblRlYXJPZmYgPSBfY29kZWdlbldvcmxkLmhhc0ludm9rZWRHZXR0ZXIoZWxlbWVudCkgfHwKICAgICAgICAgICAgX2NvZGVnZW5Xb3JsZC5tZXRob2RzTmVlZHNTdXBlckdldHRlcihlbGVtZW50KTsKICAgICAgICB0ZWFyT2ZmTmFtZSA9IF9uYW1lci5nZXR0ZXJGb3JFbGVtZW50KGVsZW1lbnQpOwogICAgICB9CiAgICB9CgogICAgaWYgKGNhblRlYXJPZmYpIHsKICAgICAgYXNzZXJ0KGVsZW1lbnQgaXMhIENvbnN0cnVjdG9yRW50aXR5LCBmYWlsZWRBdChlbGVtZW50KSk7CiAgICAgIGFzc2VydChlbGVtZW50IGlzISBDb25zdHJ1Y3RvckJvZHlFbnRpdHksIGZhaWxlZEF0KGVsZW1lbnQpKTsKICAgIH0KCiAgICBib29sIGlzSW50ZXJjZXB0ZWQgPQogICAgICAgIF9jbG9zZWRXb3JsZC5pbnRlcmNlcHRvckRhdGEuaXNJbnRlcmNlcHRlZE1ldGhvZChlbGVtZW50KTsKCiAgICBqcy5OYW1lIGNhbGxOYW1lID0gbnVsbDsKICAgIGlmIChjYW5UZWFyT2ZmKSB7CiAgICAgIFNlbGVjdG9yIGNhbGxTZWxlY3RvciA9CiAgICAgICAgICBuZXcgU2VsZWN0b3IuZnJvbUVsZW1lbnQoZWxlbWVudCkudG9DYWxsU2VsZWN0b3IoKTsKICAgICAgY2FsbE5hbWUgPSBfbmFtZXIuaW52b2NhdGlvbk5hbWUoY2FsbFNlbGVjdG9yKTsKICAgIH0KCiAgICBEYXJ0VHlwZSBtZW1iZXJUeXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvblR5cGUoZWxlbWVudCk7CiAgICBqcy5FeHByZXNzaW9uIGZ1bmN0aW9uVHlwZTsKICAgIGlmIChjYW5UZWFyT2ZmKSB7CiAgICAgIE91dHB1dFVuaXQgb3V0cHV0VW5pdCA9IF9vdXRwdXRVbml0RGF0YS5vdXRwdXRVbml0Rm9yTWVtYmVyKGVsZW1lbnQpOwogICAgICBmdW5jdGlvblR5cGUgPQogICAgICAgICAgX2dlbmVyYXRlRnVuY3Rpb25UeXBlKGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MsIG1lbWJlclR5cGUsIG91dHB1dFVuaXQpOwogICAgfQoKICAgIEZ1bmN0aW9uRW50aXR5IG1ldGhvZCA9IGVsZW1lbnQ7CiAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlID0gbWV0aG9kLnBhcmFtZXRlclN0cnVjdHVyZTsKICAgIGludCByZXF1aXJlZFBhcmFtZXRlckNvdW50ID0gcGFyYW1ldGVyU3RydWN0dXJlLnJlcXVpcmVkUGFyYW1ldGVyczsKICAgIHZhciAvKiBMaXN0IHwgTWFwICovIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlczsKICAgIGludCBhcHBseUluZGV4ID0gMDsKICAgIGlmIChjYW5CZUFwcGxpZWQpIHsKICAgICAgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzID0gX2NvbXB1dGVQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzKG1ldGhvZCk7CiAgICAgIGlmIChwYXJhbWV0ZXJTdHJ1Y3R1cmUudHlwZVBhcmFtZXRlcnMgPiAwKSB7CiAgICAgICAgYXBwbHlJbmRleCA9IDE7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbmV3IEluc3RhbmNlTWV0aG9kKGVsZW1lbnQsIG5hbWUsIGNvZGUsCiAgICAgICAgX2dlbmVyYXRlUGFyYW1ldGVyU3R1YnMoZWxlbWVudCwgY2FuVGVhck9mZiwgY2FuQmVBcHBsaWVkKSwgY2FsbE5hbWUsCiAgICAgICAgbmVlZHNUZWFyT2ZmOiBjYW5UZWFyT2ZmLAogICAgICAgIHRlYXJPZmZOYW1lOiB0ZWFyT2ZmTmFtZSwKICAgICAgICBpc0Nsb3N1cmVDYWxsTWV0aG9kOiBpc0Nsb3N1cmVDYWxsTWV0aG9kLAogICAgICAgIGlzSW50ZXJjZXB0ZWQ6IGlzSW50ZXJjZXB0ZWQsCiAgICAgICAgYWxpYXNOYW1lOiBhbGlhc05hbWUsCiAgICAgICAgY2FuQmVBcHBsaWVkOiBjYW5CZUFwcGxpZWQsCiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXM6IG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgICBmdW5jdGlvblR5cGU6IGZ1bmN0aW9uVHlwZSwKICAgICAgICBhcHBseUluZGV4OiBhcHBseUluZGV4KTsKICB9CgogIGpzLkV4cHJlc3Npb24gX2dlbmVyYXRlRnVuY3Rpb25UeXBlKENsYXNzRW50aXR5IC8qPyovIGVuY2xvc2luZ0NsYXNzLAogICAgICBGdW5jdGlvblR5cGUgdHlwZSwgT3V0cHV0VW5pdCBvdXRwdXRVbml0KSB7CiAgICBpZiAodHlwZS5jb250YWluc1R5cGVWYXJpYWJsZXMpIHsKICAgICAgaWYgKF9vcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpIHsKICAgICAgICBSZWNpcGVFbmNvZGluZyBlbmNvZGluZyA9IF9ydGlSZWNpcGVFbmNvZGVyLmVuY29kZVJlY2lwZSgKICAgICAgICAgICAgX3Rhc2suZW1pdHRlciwKICAgICAgICAgICAgRnVsbFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSgKICAgICAgICAgICAgICAgIGNsYXNzVHlwZTogX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShlbmNsb3NpbmdDbGFzcykpLAogICAgICAgICAgICBUeXBlRXhwcmVzc2lvblJlY2lwZSh0eXBlKSk7CiAgICAgICAgX2xhdGVOYW1lZFR5cGVWYXJpYWJsZXNOZXdSdGkuYWRkQWxsKGVuY29kaW5nLnR5cGVWYXJpYWJsZXMpOwogICAgICAgIHJldHVybiBlbmNvZGluZy5yZWNpcGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAganMuRXhwcmVzc2lvbiB0aGlzQWNjZXNzID0ganMuanMocid0aGlzLiRyZWNlaXZlcicpOwogICAgICAgIHJldHVybiBfcnRpRW5jb2Rlci5nZXRTaWduYXR1cmVFbmNvZGluZygKICAgICAgICAgICAgX25hbWVyLCBfdGFzay5lbWl0dGVyLCB0eXBlLCB0aGlzQWNjZXNzKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIF90YXNrLm1ldGFkYXRhQ29sbGVjdG9yLnJlaWZ5VHlwZSh0eXBlLCBvdXRwdXRVbml0KTsKICAgIH0KICB9CgogIExpc3Q8UGFyYW1ldGVyU3R1Yk1ldGhvZD4gX2dlbmVyYXRlUGFyYW1ldGVyU3R1YnMoCiAgICAgIEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQsIGJvb2wgY2FuVGVhck9mZiwgYm9vbCBjYW5CZUFwcGxpZWQpIHsKICAgIGlmICghX21ldGhvZE5lZWRzU3R1YnMoZWxlbWVudCkpIHJldHVybiBjb25zdCA8UGFyYW1ldGVyU3R1Yk1ldGhvZD5bXTsKCiAgICBQYXJhbWV0ZXJTdHViR2VuZXJhdG9yIGdlbmVyYXRvciA9IG5ldyBQYXJhbWV0ZXJTdHViR2VuZXJhdG9yKAogICAgICAgIF90YXNrLmVtaXR0ZXIsCiAgICAgICAgX3Rhc2submF0aXZlRW1pdHRlciwKICAgICAgICBfbmFtZXIsCiAgICAgICAgX3J0aUVuY29kZXIsCiAgICAgICAgX29wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSA/IF9ydGlSZWNpcGVFbmNvZGVyIDogbnVsbCwKICAgICAgICBfbmF0aXZlRGF0YSwKICAgICAgICBfaW50ZXJjZXB0b3JEYXRhLAogICAgICAgIF9jb2RlZ2VuV29ybGQsCiAgICAgICAgX2Nsb3NlZFdvcmxkLAogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5KTsKICAgIHJldHVybiBnZW5lcmF0b3IuZ2VuZXJhdGVQYXJhbWV0ZXJTdHVicyhlbGVtZW50LAogICAgICAgIGNhblRlYXJPZmY6IGNhblRlYXJPZmYsIGNhbkJlQXBwbGllZDogY2FuQmVBcHBsaWVkKTsKICB9CgogIExpc3Q8U3R1Yk1ldGhvZD4gX2dlbmVyYXRlSW5zdGFudGlhdGlvblN0dWJzKENsYXNzRW50aXR5IGluc3RhbnRpYXRpb25DbGFzcykgewogICAgSW5zdGFudGlhdGlvblN0dWJHZW5lcmF0b3IgZ2VuZXJhdG9yID0gbmV3IEluc3RhbnRpYXRpb25TdHViR2VuZXJhdG9yKAogICAgICAgIF90YXNrLCBfbmFtZXIsIF9jbG9zZWRXb3JsZCwgX2NvZGVnZW5Xb3JsZCwgX3NvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kpOwogICAgcmV0dXJuIGdlbmVyYXRvci5nZW5lcmF0ZVN0dWJzKGluc3RhbnRpYXRpb25DbGFzcywgbnVsbCk7CiAgfQoKICAvLy8gQnVpbGRzIGEgc3R1YiBtZXRob2QuCiAgLy8vCiAgLy8vIFN0dWIgbWV0aG9kcyBtYXkgaGF2ZSBhbiBlbGVtZW50IHRoYXQgY2FuIGJlIHVzZWQgZm9yIGNvZGUtc2l6ZQogIC8vLyBhdHRyaWJ1dGlvbi4KICBNZXRob2QgX2J1aWxkU3R1Yk1ldGhvZChqcy5OYW1lIG5hbWUsIGpzLkV4cHJlc3Npb24gY29kZSwKICAgICAge01lbWJlckVudGl0eSBlbGVtZW50fSkgewogICAgcmV0dXJuIG5ldyBTdHViTWV0aG9kKG5hbWUsIGNvZGUsIGVsZW1lbnQ6IGVsZW1lbnQpOwogIH0KCiAgLy8gVGhlIGdldEludGVyY2VwdG9yIG1ldGhvZHMgZGlyZWN0bHkgYWNjZXNzIHRoZSBwcm90b3R5cGUgb2YgY2xhc3Nlcy4KICAvLyBXZSBtdXN0IGV2YWx1YXRlIHRoZXNlIGNsYXNzZXMgZWFnZXJseSBzbyB0aGF0IHRoZSBwcm90b3R5cGUgaXMKICAvLyBhY2Nlc3NpYmxlLgogIHZvaWQgX21hcmtFYWdlckludGVyY2VwdG9yQ2xhc3NlcygpIHsKICAgIEl0ZXJhYmxlPFNwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3I+IGludGVyY2VwdG9ycyA9CiAgICAgICAgX29uZVNob3RJbnRlcmNlcHRvckRhdGEuc3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcnM7CiAgICBmb3IgKFNwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3IgaW50ZXJjZXB0b3IgaW4gaW50ZXJjZXB0b3JzKSB7CiAgICAgIGZvciAoQ2xhc3NFbnRpdHkgZWxlbWVudCBpbiBpbnRlcmNlcHRvci5jbGFzc2VzKSB7CiAgICAgICAgQ2xhc3MgY2xzID0gX2NsYXNzZXNbZWxlbWVudF07CiAgICAgICAgaWYgKGNscyAhPSBudWxsKSBjbHMuaXNFYWdlciA9IHRydWU7CiAgICAgIH0KICAgIH0KICB9CgogIEl0ZXJhYmxlPFN0YXRpY1N0dWJNZXRob2Q+IF9nZW5lcmF0ZUdldEludGVyY2VwdG9yTWV0aG9kcygpIHsKICAgIEludGVyY2VwdG9yU3R1YkdlbmVyYXRvciBzdHViR2VuZXJhdG9yID0gbmV3IEludGVyY2VwdG9yU3R1YkdlbmVyYXRvcigKICAgICAgICBfY29tbW9uRWxlbWVudHMsCiAgICAgICAgX3Rhc2suZW1pdHRlciwKICAgICAgICBfbmF0aXZlQ29kZWdlbkVucXVldWVyLAogICAgICAgIF9uYW1lciwKICAgICAgICBfY3VzdG9tRWxlbWVudHNDb2RlZ2VuQW5hbHlzaXMsCiAgICAgICAgX2NvZGVnZW5Xb3JsZCwKICAgICAgICBfY2xvc2VkV29ybGQpOwoKICAgIFN0cmluZyBob2xkZXJOYW1lID0KICAgICAgICBfbmFtZXIuZ2xvYmFsT2JqZWN0Rm9yTGlicmFyeShfY29tbW9uRWxlbWVudHMuaW50ZXJjZXB0b3JzTGlicmFyeSk7CiAgICAvLyBUT0RPKGZsb2l0c2NoKTogd2Ugc2hvdWxkbid0IHVwZGF0ZSB0aGUgcmVnaXN0cnkgaW4gdGhlIG1pZGRsZSBvZgogICAgLy8gZ2VuZXJhdGluZyB0aGUgaW50ZXJjZXB0b3IgbWV0aG9kcy4KICAgIEhvbGRlciBob2xkZXIgPSBfcmVnaXN0cnkucmVnaXN0ZXJIb2xkZXIoaG9sZGVyTmFtZSk7CiAgICBMaXN0PGpzLk5hbWU+IG5hbWVzID0gW107CiAgICBNYXA8anMuTmFtZSwgU3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcj4gaW50ZXJjZXB0b3JNYXAgPSB7fTsKICAgIGZvciAoU3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvciBpbnRlcmNlcHRvcgogICAgICAgIGluIF9vbmVTaG90SW50ZXJjZXB0b3JEYXRhLnNwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3JzKSB7CiAgICAgIGpzLk5hbWUgbmFtZSA9IF9uYW1lci5uYW1lRm9yR2V0SW50ZXJjZXB0b3IoaW50ZXJjZXB0b3IuY2xhc3Nlcyk7CiAgICAgIG5hbWVzLmFkZChuYW1lKTsKICAgICAgYXNzZXJ0KAogICAgICAgICAgIWludGVyY2VwdG9yTWFwLmNvbnRhaW5zS2V5KG5hbWUpLAogICAgICAgICAgIkR1cGxpY2F0ZSBzcGVjaWFsaXplZCBnZXQgaW50ZXJjZXB0b3IgZm9yICRuYW1lOiBFeGlzdGluZzogIgogICAgICAgICAgIiR7aW50ZXJjZXB0b3JNYXBbbmFtZV19LCBuZXcgJHtpbnRlcmNlcHRvcn0uIik7CiAgICAgIGludGVyY2VwdG9yTWFwW25hbWVdID0gaW50ZXJjZXB0b3I7CiAgICB9CiAgICBuYW1lcy5zb3J0KCk7CiAgICByZXR1cm4gbmFtZXMubWFwKChqcy5OYW1lIG5hbWUpIHsKICAgICAgU3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvciBpbnRlcmNlcHRvciA9IGludGVyY2VwdG9yTWFwW25hbWVdOwogICAgICBqcy5FeHByZXNzaW9uIGNvZGUgPQogICAgICAgICAgc3R1YkdlbmVyYXRvci5nZW5lcmF0ZUdldEludGVyY2VwdG9yTWV0aG9kKGludGVyY2VwdG9yKTsKICAgICAgcmV0dXJuIG5ldyBTdGF0aWNTdHViTWV0aG9kKG5hbWUsIGhvbGRlciwgY29kZSk7CiAgICB9KTsKICB9CgogIExpc3Q8RmllbGQ+IF9idWlsZEZpZWxkcygKICAgICAge2Jvb2wgdmlzaXRTdGF0aWNzOiBmYWxzZSwKICAgICAgYm9vbCBpc0hvbGRlckludGVyY2VwdGVkQ2xhc3M6IGZhbHNlLAogICAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnksCiAgICAgIENsYXNzRW50aXR5IGNsc30pIHsKICAgIExpc3Q8RmllbGQ+IGZpZWxkcyA9IDxGaWVsZD5bXTsKCiAgICB2b2lkIHZpc2l0RmllbGQoRmllbGRFbnRpdHkgZmllbGQsIGpzLk5hbWUgbmFtZSwganMuTmFtZSBhY2Nlc3Nvck5hbWUsCiAgICAgICAgYm9vbCBuZWVkc0dldHRlciwgYm9vbCBuZWVkc1NldHRlciwgYm9vbCBuZWVkc0NoZWNrZWRTZXR0ZXIpIHsKICAgICAgaW50IGdldHRlckZsYWdzID0gMDsKICAgICAgaWYgKG5lZWRzR2V0dGVyKSB7CiAgICAgICAgaWYgKHZpc2l0U3RhdGljcyB8fAogICAgICAgICAgICAhX2ludGVyY2VwdG9yRGF0YS5maWVsZEhhc0ludGVyY2VwdGVkR2V0dGVyKGZpZWxkKSkgewogICAgICAgICAgZ2V0dGVyRmxhZ3MgPSAxOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBnZXR0ZXJGbGFncyArPSAyOwogICAgICAgICAgLy8gVE9ETyhzcmEpOiAnaXNJbnRlcmNlcHRlZENsYXNzJyBtaWdodCBub3QgYmUgdGhlIGNvcnJlY3QgdGVzdAogICAgICAgICAgLy8gZm9yIG1ldGhvZHMgZm9yY2VkIHRvIHVzZSB0aGUgaW50ZXJjZXB0b3IgY29udmVudGlvbiBiZWNhdXNlCiAgICAgICAgICAvLyB0aGUgbWV0aG9kJ3MgY2xhc3Mgd2FzIGVsc2V3aGVyZSBtaXhlZC1pbiB0byBhbiBpbnRlcmNlcHRvci4KICAgICAgICAgIGlmICghaXNIb2xkZXJJbnRlcmNlcHRlZENsYXNzKSB7CiAgICAgICAgICAgIGdldHRlckZsYWdzICs9IDE7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICBpbnQgc2V0dGVyRmxhZ3MgPSAwOwogICAgICBpZiAobmVlZHNTZXR0ZXIpIHsKICAgICAgICBpZiAodmlzaXRTdGF0aWNzIHx8CiAgICAgICAgICAgICFfaW50ZXJjZXB0b3JEYXRhLmZpZWxkSGFzSW50ZXJjZXB0ZWRTZXR0ZXIoZmllbGQpKSB7CiAgICAgICAgICBzZXR0ZXJGbGFncyA9IDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNldHRlckZsYWdzICs9IDI7CiAgICAgICAgICBpZiAoIWlzSG9sZGVySW50ZXJjZXB0ZWRDbGFzcykgewogICAgICAgICAgICBzZXR0ZXJGbGFncyArPSAxOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgRmllbGRBbmFseXNpc0RhdGEgZmllbGREYXRhID0gX2ZpZWxkQW5hbHlzaXMuZ2V0RmllbGREYXRhKGZpZWxkKTsKICAgICAgQ29uc3RhbnRWYWx1ZSBpbml0aWFsaXplckluQWxsb2NhdG9yOwogICAgICBpZiAoZmllbGREYXRhLmlzSW5pdGlhbGl6ZWRJbkFsbG9jYXRvcikgewogICAgICAgIGluaXRpYWxpemVySW5BbGxvY2F0b3IgPSBmaWVsZERhdGEuaW5pdGlhbFZhbHVlOwogICAgICB9CiAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnRWYWx1ZTsKICAgICAgaWYgKGZpZWxkRGF0YS5pc0VmZmVjdGl2ZWx5Q29uc3RhbnQpIHsKICAgICAgICBjb25zdGFudFZhbHVlID0gZmllbGREYXRhLmNvbnN0YW50VmFsdWU7CiAgICAgIH0KCiAgICAgIGZpZWxkcy5hZGQobmV3IEZpZWxkKAogICAgICAgICAgZmllbGQsCiAgICAgICAgICBuYW1lLAogICAgICAgICAgYWNjZXNzb3JOYW1lLAogICAgICAgICAgZ2V0dGVyRmxhZ3MsCiAgICAgICAgICBzZXR0ZXJGbGFncywKICAgICAgICAgIG5lZWRzQ2hlY2tlZFNldHRlciwKICAgICAgICAgIGluaXRpYWxpemVySW5BbGxvY2F0b3IsCiAgICAgICAgICBjb25zdGFudFZhbHVlLAogICAgICAgICAgZmllbGREYXRhLmlzRWxpZGVkKSk7CiAgICB9CgogICAgRmllbGRWaXNpdG9yIHZpc2l0b3IgPSBuZXcgRmllbGRWaXNpdG9yKF9vcHRpb25zLCBfZWxlbWVudEVudmlyb25tZW50LAogICAgICAgIF9jb21tb25FbGVtZW50cywgX2NvZGVnZW5Xb3JsZCwgX25hdGl2ZURhdGEsIF9uYW1lciwgX2Nsb3NlZFdvcmxkKTsKICAgIHZpc2l0b3IudmlzaXRGaWVsZHModmlzaXRGaWVsZCwKICAgICAgICB2aXNpdFN0YXRpY3M6IHZpc2l0U3RhdGljcywgbGlicmFyeTogbGlicmFyeSwgY2xzOiBjbHMpOwoKICAgIHJldHVybiBmaWVsZHM7CiAgfQoKICBJdGVyYWJsZTxTdGF0aWNTdHViTWV0aG9kPiBfZ2VuZXJhdGVPbmVTaG90SW50ZXJjZXB0b3JzKCkgewogICAgSW50ZXJjZXB0b3JTdHViR2VuZXJhdG9yIHN0dWJHZW5lcmF0b3IgPSBuZXcgSW50ZXJjZXB0b3JTdHViR2VuZXJhdG9yKAogICAgICAgIF9jb21tb25FbGVtZW50cywKICAgICAgICBfdGFzay5lbWl0dGVyLAogICAgICAgIF9uYXRpdmVDb2RlZ2VuRW5xdWV1ZXIsCiAgICAgICAgX25hbWVyLAogICAgICAgIF9jdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpcywKICAgICAgICBfY29kZWdlbldvcmxkLAogICAgICAgIF9jbG9zZWRXb3JsZCk7CgogICAgU3RyaW5nIGhvbGRlck5hbWUgPQogICAgICAgIF9uYW1lci5nbG9iYWxPYmplY3RGb3JMaWJyYXJ5KF9jb21tb25FbGVtZW50cy5pbnRlcmNlcHRvcnNMaWJyYXJ5KTsKICAgIC8vIFRPRE8oZmxvaXRzY2gpOiB3ZSBzaG91bGRuJ3QgdXBkYXRlIHRoZSByZWdpc3RyeSBpbiB0aGUgbWlkZGxlIG9mCiAgICAvLyBnZW5lcmF0aW5nIHRoZSBpbnRlcmNlcHRvciBtZXRob2RzLgogICAgSG9sZGVyIGhvbGRlciA9IF9yZWdpc3RyeS5yZWdpc3RlckhvbGRlcihob2xkZXJOYW1lKTsKICAgIExpc3Q8anMuTmFtZT4gbmFtZXMgPSBbXTsKICAgIE1hcDxqcy5OYW1lLCBPbmVTaG90SW50ZXJjZXB0b3I+IGludGVyY2VwdG9yTWFwID0ge307CiAgICBmb3IgKE9uZVNob3RJbnRlcmNlcHRvciBpbnRlcmNlcHRvcgogICAgICAgIGluIF9vbmVTaG90SW50ZXJjZXB0b3JEYXRhLm9uZVNob3RJbnRlcmNlcHRvcnMpIHsKICAgICAganMuTmFtZSBuYW1lID0gX25hbWVyLm5hbWVGb3JPbmVTaG90SW50ZXJjZXB0b3IoCiAgICAgICAgICBpbnRlcmNlcHRvci5zZWxlY3RvciwgaW50ZXJjZXB0b3IuY2xhc3Nlcyk7CiAgICAgIG5hbWVzLmFkZChuYW1lKTsKICAgICAgYXNzZXJ0KAogICAgICAgICAgIWludGVyY2VwdG9yTWFwLmNvbnRhaW5zS2V5KG5hbWUpLAogICAgICAgICAgIkR1cGxpY2F0ZSBzcGVjaWFsaXplZCBnZXQgaW50ZXJjZXB0b3IgZm9yICRuYW1lOiBFeGlzdGluZzogIgogICAgICAgICAgIiR7aW50ZXJjZXB0b3JNYXBbbmFtZV19LCBuZXcgJHtpbnRlcmNlcHRvcn0uIik7CiAgICAgIGludGVyY2VwdG9yTWFwW25hbWVdID0gaW50ZXJjZXB0b3I7CiAgICB9CiAgICBuYW1lcy5zb3J0KCk7CiAgICByZXR1cm4gbmFtZXMubWFwKChqcy5OYW1lIG5hbWUpIHsKICAgICAgT25lU2hvdEludGVyY2VwdG9yIGludGVyY2VwdG9yID0gaW50ZXJjZXB0b3JNYXBbbmFtZV07CiAgICAgIGpzLkV4cHJlc3Npb24gY29kZSA9CiAgICAgICAgICBzdHViR2VuZXJhdG9yLmdlbmVyYXRlT25lU2hvdEludGVyY2VwdG9yKGludGVyY2VwdG9yKTsKICAgICAgcmV0dXJuIG5ldyBTdGF0aWNTdHViTWV0aG9kKG5hbWUsIGhvbGRlciwgY29kZSk7CiAgICB9KTsKICB9CgogIFN0YXRpY0RhcnRNZXRob2QgX2J1aWxkU3RhdGljTWV0aG9kKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIGpzLk5hbWUgbmFtZSA9IF9uYW1lci5tZXRob2RQcm9wZXJ0eU5hbWUoZWxlbWVudCk7CiAgICBTdHJpbmcgaG9sZGVyID0gX25hbWVyLmdsb2JhbE9iamVjdEZvck1lbWJlcihlbGVtZW50KTsKICAgIGpzLkV4cHJlc3Npb24gY29kZSA9IF9nZW5lcmF0ZWRDb2RlW2VsZW1lbnRdOwoKICAgIGJvb2wgaXNBcHBseVRhcmdldCA9CiAgICAgICAgIWVsZW1lbnQuaXNDb25zdHJ1Y3RvciAmJiAhZWxlbWVudC5pc0dldHRlciAmJiAhZWxlbWVudC5pc1NldHRlcjsKICAgIGJvb2wgY2FuQmVBcHBsaWVkID0gX21ldGhvZENhbkJlQXBwbGllZChlbGVtZW50KTsKCiAgICBib29sIG5lZWRzVGVhck9mZiA9CiAgICAgICAgaXNBcHBseVRhcmdldCAmJiBfY29kZWdlbldvcmxkLmNsb3N1cml6ZWRTdGF0aWNzLmNvbnRhaW5zKGVsZW1lbnQpOwoKICAgIGpzLk5hbWUgdGVhck9mZk5hbWUgPQogICAgICAgIG5lZWRzVGVhck9mZiA/IF9uYW1lci5zdGF0aWNDbG9zdXJlTmFtZShlbGVtZW50KSA6IG51bGw7CgogICAganMuTmFtZSBjYWxsTmFtZSA9IG51bGw7CiAgICBpZiAobmVlZHNUZWFyT2ZmKSB7CiAgICAgIFNlbGVjdG9yIGNhbGxTZWxlY3RvciA9CiAgICAgICAgICBuZXcgU2VsZWN0b3IuZnJvbUVsZW1lbnQoZWxlbWVudCkudG9DYWxsU2VsZWN0b3IoKTsKICAgICAgY2FsbE5hbWUgPSBfbmFtZXIuaW52b2NhdGlvbk5hbWUoY2FsbFNlbGVjdG9yKTsKICAgIH0KICAgIGpzLkV4cHJlc3Npb24gZnVuY3Rpb25UeXBlOwogICAgRGFydFR5cGUgdHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlKGVsZW1lbnQpOwogICAgaWYgKG5lZWRzVGVhck9mZikgewogICAgICBPdXRwdXRVbml0IG91dHB1dFVuaXQgPSBfb3V0cHV0VW5pdERhdGEub3V0cHV0VW5pdEZvck1lbWJlcihlbGVtZW50KTsKICAgICAgZnVuY3Rpb25UeXBlID0gX2dlbmVyYXRlRnVuY3Rpb25UeXBlKG51bGwsIHR5cGUsIG91dHB1dFVuaXQpOwogICAgfQoKICAgIEZ1bmN0aW9uRW50aXR5IG1ldGhvZCA9IGVsZW1lbnQ7CiAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlID0gbWV0aG9kLnBhcmFtZXRlclN0cnVjdHVyZTsKICAgIGludCByZXF1aXJlZFBhcmFtZXRlckNvdW50ID0gcGFyYW1ldGVyU3RydWN0dXJlLnJlcXVpcmVkUGFyYW1ldGVyczsKICAgIHZhciAvKiBMaXN0IHwgTWFwICovIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlczsKICAgIGludCBhcHBseUluZGV4ID0gMDsKICAgIGlmIChjYW5CZUFwcGxpZWQpIHsKICAgICAgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzID0gX2NvbXB1dGVQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzKG1ldGhvZCk7CiAgICAgIGlmIChwYXJhbWV0ZXJTdHJ1Y3R1cmUudHlwZVBhcmFtZXRlcnMgPiAwKSB7CiAgICAgICAgYXBwbHlJbmRleCA9IDE7CiAgICAgIH0KICAgIH0KCiAgICAvLyBUT0RPKGZsb2l0c2NoKTogd2Ugc2hvdWxkbid0IHVwZGF0ZSB0aGUgcmVnaXN0cnkgaW4gdGhlIG1pZGRsZSBvZgogICAgLy8gYnVpbGRpbmcgYSBzdGF0aWMgbWV0aG9kLgogICAgcmV0dXJuIG5ldyBTdGF0aWNEYXJ0TWV0aG9kKAogICAgICAgIGVsZW1lbnQsCiAgICAgICAgbmFtZSwKICAgICAgICBfcmVnaXN0cnkucmVnaXN0ZXJIb2xkZXIoaG9sZGVyKSwKICAgICAgICBjb2RlLAogICAgICAgIF9nZW5lcmF0ZVBhcmFtZXRlclN0dWJzKGVsZW1lbnQsIG5lZWRzVGVhck9mZiwgY2FuQmVBcHBsaWVkKSwKICAgICAgICBjYWxsTmFtZSwKICAgICAgICBuZWVkc1RlYXJPZmY6IG5lZWRzVGVhck9mZiwKICAgICAgICB0ZWFyT2ZmTmFtZTogdGVhck9mZk5hbWUsCiAgICAgICAgY2FuQmVBcHBsaWVkOiBjYW5CZUFwcGxpZWQsCiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXM6IG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgICBmdW5jdGlvblR5cGU6IGZ1bmN0aW9uVHlwZSwKICAgICAgICBhcHBseUluZGV4OiBhcHBseUluZGV4KTsKICB9CgogIHZvaWQgX3JlZ2lzdGVyQ29uc3RhbnRzKAogICAgICBPdXRwdXRVbml0IG91dHB1dFVuaXQsIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IGNvbnN0YW50VmFsdWVzKSB7CiAgICAvLyBgY29uc3RhbnRWYWx1ZXNgIGlzIG51bGwgaWYgYW4gb3V0cHV0VW5pdCBkb2Vzbid0IGNvbnRhaW4gYW55IGNvbnN0YW50cy4KICAgIGlmIChjb25zdGFudFZhbHVlcyA9PSBudWxsKSByZXR1cm47CiAgICBmb3IgKENvbnN0YW50VmFsdWUgY29uc3RhbnRWYWx1ZSBpbiBjb25zdGFudFZhbHVlcykgewogICAgICBfcmVnaXN0cnkucmVnaXN0ZXJDb25zdGFudChvdXRwdXRVbml0LCBjb25zdGFudFZhbHVlKTsKICAgICAgYXNzZXJ0KCFfY29uc3RhbnRzLmNvbnRhaW5zS2V5KGNvbnN0YW50VmFsdWUpKTsKICAgICAganMuTmFtZSBuYW1lID0gX25hbWVyLmNvbnN0YW50TmFtZShjb25zdGFudFZhbHVlKTsKICAgICAgU3RyaW5nIGNvbnN0YW50T2JqZWN0ID0gX25hbWVyLmdsb2JhbE9iamVjdEZvckNvbnN0YW50KGNvbnN0YW50VmFsdWUpOwogICAgICBIb2xkZXIgaG9sZGVyID0KICAgICAgICAgIF9yZWdpc3RyeS5yZWdpc3RlckhvbGRlcihjb25zdGFudE9iamVjdCwgaXNDb25zdGFudHNI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bGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQyanMuanNfZW1pdHRlci5wcm9ncmFtX2J1aWxkZXI7CgovLy8gW21lbWJlcl0gaXMgYSBmaWVsZCAoaW5zdGFuY2UsIHN0YXRpYywgb3IgdG9wIGxldmVsKS4KLy8vCi8vLyBbbmFtZV0gaXMgdGhlIGZpZWxkIG5hbWUgdGhhdCB0aGUgW05hbWVyXSBoYXMgcGlja2VkIGZvciB0aGlzIGZpZWxkJ3MKLy8vIHN0b3JhZ2UsIHRoYXQgaXMsIHRoZSBKYXZhU2NyaXB0IHByb3BlcnR5IG5hbWUuCi8vLwovLy8gW2FjY2Vzc29yTmFtZV0gaXMgdGhlIG5hbWUgb2YgdGhlIGFjY2Vzc29yLiBGb3IgaW5zdGFuY2UgZmllbGRzIHRoaXMgaXMKLy8vIG1vc3RseSB0aGUgc2FtZSBhcyBbbmFtZV0gZXhjZXB0IHdoZW4gW21lbWJlcl0gaXMgc2hhZG93aW5nIGEgZmllbGQgaW4gaXRzCi8vLyBzdXBlcmNsYXNzLiAgRm9yIG90aGVyIGZpZWxkcywgdGhleSBhcmUgcmFyZWx5IHRoZSBzYW1lLgovLy8KLy8vIFtuZWVkc0dldHRlcl0gYW5kIFtuZWVkc1NldHRlcl0gcmVwcmVzZW50IGlmIGEgZ2V0dGVyIG9yIGEgc2V0dGVyCi8vLyByZXNwZWN0aXZlbHkgaXMgbmVlZGVkLiAgVGhlcmUgYXJlIG1hbnkgZmFjdG9ycyBpbiB0aGlzLCBmb3IgZXhhbXBsZSwgaWYgdGhlCi8vLyBhY2Nlc3NvciBjYW4gYmUgaW5saW5lZC4KLy8vCi8vLyBbbmVlZHNDaGVja2VkU2V0dGVyXSBpbmRpY2F0ZXMgdGhhdCBhIGNoZWNrZWQgZ2V0dGVyIGlzIG5lZWRlZCwgYW5kIGluIHRoaXMKLy8vIGNhc2UsIFtuZWVkc1NldHRlcl0gaXMgYWx3YXlzIGZhbHNlLiBbbmVlZHNDaGVja2VkU2V0dGVyXSBpcyBvbmx5IHRydWUgd2hlbgovLy8gdHlwZSBhc3NlcnRpb25zIGFyZSBlbmFibGVkIChjaGVja2VkIG1vZGUpLgp0eXBlZGVmIHZvaWQgQWNjZXB0RmllbGQoRmllbGRFbnRpdHkgbWVtYmVyLCBqcy5OYW1lIG5hbWUsIGpzLk5hbWUgYWNjZXNzb3JOYW1lLAogICAgYm9vbCBuZWVkc0dldHRlciwgYm9vbCBuZWVkc1NldHRlciwgYm9vbCBuZWVkc0NoZWNrZWRTZXR0ZXIpOwoKY2xhc3MgRmllbGRWaXNpdG9yIHsKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CiAgZmluYWwgSkVsZW1lbnRFbnZpcm9ubWVudCBfZWxlbWVudEVudmlyb25tZW50OwogIGZpbmFsIEpDb21tb25FbGVtZW50cyBfY29tbW9uRWxlbWVudHM7CiAgZmluYWwgQ29kZWdlbldvcmxkIF9jb2RlZ2VuV29ybGQ7CiAgZmluYWwgTmF0aXZlRGF0YSBfbmF0aXZlRGF0YTsKICBmaW5hbCBOYW1lciBfbmFtZXI7CiAgZmluYWwgSkNsb3NlZFdvcmxkIF9jbG9zZWRXb3JsZDsKCiAgRmllbGRWaXNpdG9yKHRoaXMuX29wdGlvbnMsIHRoaXMuX2VsZW1lbnRFbnZpcm9ubWVudCwgdGhpcy5fY29tbW9uRWxlbWVudHMsCiAgICAgIHRoaXMuX2NvZGVnZW5Xb3JsZCwgdGhpcy5fbmF0aXZlRGF0YSwgdGhpcy5fbmFtZXIsIHRoaXMuX2Nsb3NlZFdvcmxkKTsKCiAgLy8vIEludm9rZXMgW2ZdIGZvciBlYWNoIG9mIHRoZSBmaWVsZHMgb2YgW2VsZW1lbnRdLgogIC8vLwogIC8vLyBbZWxlbWVudF0gbXVzdCBiZSBhIFtDbGFzc0VudGl0eV0gb3IgYSBbTGlicmFyeUVudGl0eV0uCiAgLy8vCiAgLy8vIElmIFtlbGVtZW50XSBpcyBhIFtDbGFzc0VudGl0eV0sIHRoZSBzdGF0aWMgZmllbGRzIG9mIHRoZSBjbGFzcyBhcmUKICAvLy8gdmlzaXRlZCBpZiBbdmlzaXRTdGF0aWNzXSBpcyB0cnVlIGFuZCB0aGUgaW5zdGFuY2UgZmllbGRzIGFyZSB2aXNpdGVkIGlmCiAgLy8vIFt2aXNpdFN0YXRpY3NdIGlzIGZhbHNlLgogIC8vLwogIC8vLyBJZiBbZWxlbWVudF0gaXMgYSBbTGlicmFyeUVudGl0eV0sIFt2aXNpdFN0YXRpY3NdIG11c3QgYmUgdHJ1ZS4KICAvLy8KICAvLy8gV2hlbiB2aXNpdGluZyB0aGUgaW5zdGFuY2UgZmllbGRzIG9mIGEgY2xhc3MsIHRoZSBmaWVsZHMgb2YgaXRzIHN1cGVyY2xhc3MKICAvLy8gYXJlIGFsc28gdmlzaXRlZCBpZiB0aGUgY2xhc3MgaXMgaW5zdGFudGlhdGVkLgogIC8vLwogIC8vLyBJbnZhcmlhbnQ6IFtlbGVtZW50XSBtdXN0IGJlIGEgZGVjbGFyYXRpb24gZWxlbWVudC4KICB2b2lkIHZpc2l0RmllbGRzKEFjY2VwdEZpZWxkIGYsCiAgICAgIHtib29sIHZpc2l0U3RhdGljczogZmFsc2UsIExpYnJhcnlFbnRpdHkgbGlicmFyeSwgQ2xhc3NFbnRpdHkgY2xzfSkgewogICAgYm9vbCBpc05hdGl2ZUNsYXNzID0gZmFsc2U7CiAgICBib29sIGlzTGlicmFyeSA9IGZhbHNlOwogICAgYm9vbCBpc0luc3RhbnRpYXRlZCA9IGZhbHNlOwogICAgaWYgKGNscyAhPSBudWxsKSB7CiAgICAgIGlzTmF0aXZlQ2xhc3MgPSBfbmF0aXZlRGF0YS5pc05hdGl2ZUNsYXNzKGNscyk7CgogICAgICAvLyBJZiB0aGUgY2xhc3MgaXMgbmV2ZXIgaW5zdGFudGlhdGVkIHdlIHN0aWxsIG5lZWQgdG8gc2V0IGl0IHVwIGZvcgogICAgICAvLyBpbmhlcml0YW5jZSBwdXJwb3NlcywgYnV0IHdlIGNhbiBzaW1wbGlmeSBpdHMgSmF2YVNjcmlwdCBjb25zdHJ1Y3Rvci4KICAgICAgaXNJbnN0YW50aWF0ZWQgPSBfY29kZWdlbldvcmxkLmRpcmVjdGx5SW5zdGFudGlhdGVkQ2xhc3Nlcy5jb250YWlucyhjbHMpOwogICAgfSBlbHNlIGlmIChsaWJyYXJ5ICE9IG51bGwpIHsKICAgICAgaXNMaWJyYXJ5ID0gdHJ1ZTsKICAgICAgYXNzZXJ0KHZpc2l0U3RhdGljcywgZmFpbGVkQXQobGlicmFyeSkpOwogICAgfSBlbHNlIHsKICAgICAgZmFpbGVkQXQoCiAgICAgICAgICBOT19MT0NBVElPTl9TUEFOTkFCTEUsICdFeHBlY3RlZCBhIENsYXNzRW50aXR5IG9yIGEgTGlicmFyeUVudGl0eS4nKTsKICAgIH0KCiAgICB2b2lkIHZpc2l0RmllbGQoRmllbGRFbnRpdHkgZmllbGQsIHtDbGFzc0VudGl0eSBob2xkZXJ9KSB7CiAgICAgIGJvb2wgaXNNaXhpbk5hdGl2ZUZpZWxkID0KICAgICAgICAgIGlzTmF0aXZlQ2xhc3MgJiYgX2VsZW1lbnRFbnZpcm9ubWVudC5pc01peGluQXBwbGljYXRpb24oaG9sZGVyKTsKCiAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZHluYW1pY2FsbHkgY3JlYXRlIGdldHRlcnMgYW5kIHNldHRlcnMuCiAgICAgIC8vIFdlIGNhbiBvbmx5IGdlbmVyYXRlIGdldHRlcnMgYW5kIHNldHRlcnMgZm9yIFtlbGVtZW50XSBzaW5jZQogICAgICAvLyB0aGUgZmllbGRzIG9mIHN1cGVyIGNsYXNzZXMgY291bGQgYmUgb3ZlcndyaXR0ZW4gd2l0aCBnZXR0ZXJzIG9yCiAgICAgIC8vIHNldHRlcnMuCiAgICAgIGJvb2wgbmVlZHNHZXR0ZXIgPSBmYWxzZTsKICAgICAgYm9vbCBuZWVkc1NldHRlciA9IGZhbHNlOwogICAgICBpZiAoaXNMaWJyYXJ5IHx8IGlzTWl4aW5OYXRpdmVGaWVsZCB8fCBob2xkZXIgPT0gY2xzKSB7CiAgICAgICAgbmVlZHNHZXR0ZXIgPSBmaWVsZE5lZWRzR2V0dGVyKGZpZWxkKTsKICAgICAgICBuZWVkc1NldHRlciA9IGZpZWxkTmVlZHNTZXR0ZXIoZmllbGQpOwogICAgICB9CgogICAgICBpZiAoKGlzSW5zdGFudGlhdGVkICYmICFfbmF0aXZlRGF0YS5pc05hdGl2ZUNsYXNzKGNscykpIHx8CiAgICAgICAgICBuZWVkc0dldHRlciB8fAogICAgICAgICAgbmVlZHNTZXR0ZXIpIHsKICAgICAgICBqcy5OYW1lIGFjY2Vzc29yTmFtZSA9IF9uYW1lci5maWVsZEFjY2Vzc29yTmFtZShmaWVsZCk7CiAgICAgICAganMuTmFtZSBmaWVsZE5hbWUgPSBfbmFtZXIuZmllbGRQcm9wZXJ0eU5hbWUoZmllbGQpOwogICAgICAgIGJvb2wgbmVlZHNDaGVja2VkU2V0dGVyID0gZmFsc2U7CiAgICAgICAgaWYgKF9jbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGEKICAgICAgICAgICAgICAgIC5nZXRQYXJhbWV0ZXJDaGVja1BvbGljeShmaWVsZCkKICAgICAgICAgICAgICAgIC5pc0VtaXR0ZWQgJiYKICAgICAgICAgICAgbmVlZHNTZXR0ZXIgJiYKICAgICAgICAgICAgIWNhbkF2b2lkR2VuZXJhdGVkQ2hlY2tlZFNldHRlcihmaWVsZCkpIHsKICAgICAgICAgIG5lZWRzQ2hlY2tlZFNldHRlciA9IHRydWU7CiAgICAgICAgICBuZWVkc1NldHRlciA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICAvLyBHZXR0ZXJzIGFuZCBzZXR0ZXJzIHdpdGggc3VmZml4ZXMgd2lsbCBiZSBnZW5lcmF0ZWQgZHluYW1pY2FsbHkuCiAgICAgICAgZihmaWVsZCwgZmllbGROYW1lLCBhY2Nlc3Nvck5hbWUsIG5lZWRzR2V0dGVyLCBuZWVkc1NldHRlciwKICAgICAgICAgICAgbmVlZHNDaGVja2VkU2V0dGVyKTsKICAgICAgfQogICAgfQoKICAgIGlmIChpc0xpYnJhcnkpIHsKICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoTGlicmFyeU1lbWJlcihsaWJyYXJ5LCAoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICAgIGlmIChtZW1iZXIuaXNGaWVsZCkgdmlzaXRGaWVsZChtZW1iZXIpOwogICAgICB9KTsKICAgIH0gZWxzZSBpZiAodmlzaXRTdGF0aWNzKSB7CiAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaExvY2FsQ2xhc3NNZW1iZXIoY2xzLCAoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICAgIGlmIChtZW1iZXIuaXNGaWVsZCAmJiBtZW1iZXIuaXNTdGF0aWMpIHsKICAgICAgICAgIHZpc2l0RmllbGQobWVtYmVyLCBob2xkZXI6IGNscyk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRPRE8oa2FzcGVybCk6IFdlIHNob3VsZCBtYWtlIHN1cmUgdG8gb25seSBlbWl0IG9uZSB2ZXJzaW9uIG9mCiAgICAgIC8vIG92ZXJyaWRkZW4gZmllbGRzLiBSaWdodCBub3csIHdlIHJlbHkgb24gdGhlIG9yZGVyaW5nIHNvIHRoZQogICAgICAvLyBmaWVsZHMgcHVsbGVkIGluIGZyb20gbWl4aW5zIGFyZSByZXBsYWNlZCB3aXRoIHRoZSBmaWVsZHMgZnJvbQogICAgICAvLyB0aGUgY2xhc3MgZGVmaW5pdGlvbi4KCiAgICAgIC8vIElmIGEgY2xhc3MgaXMgbm90IGluc3RhbnRpYXRlZCB0aGVuIHdlIGFkZCB0aGUgZmllbGQganVzdCBzbyB3ZSBjYW4KICAgICAgLy8gZ2VuZXJhdGUgdGhlIGZpZWxkIGdldHRlci9zZXR0ZXIgZHluYW1pY2FsbHkuIFNpbmNlIHRoaXMgaXMgb25seQogICAgICAvLyBhbGxvd2VkIG9uIGZpZWxkcyB0aGF0IGFyZSBpbiBbZWxlbWVudF0gd2UgZG9uJ3QgbmVlZCB0byB2aXNpdAogICAgICAvLyBzdXBlcmNsYXNzZXMgZm9yIG5vbi1pbnN0YW50aWF0ZWQgY2xhc3Nlcy4KICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoQ2xhc3NNZW1iZXIoY2xzLAogICAgICAgICAgKENsYXNzRW50aXR5IGhvbGRlciwgTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICAgIGlmIChjbHMgIT0gaG9sZGVyICYmICFpc0luc3RhbnRpYXRlZCkgcmV0dXJuOwogICAgICAgIGlmIChtZW1iZXIuaXNGaWVsZCAmJiAhbWVtYmVyLmlzU3RhdGljKSB7CiAgICAgICAgICB2aXNpdEZpZWxkKG1lbWJlciwgaG9sZGVyOiBob2xkZXIpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfQoKICBib29sIGZpZWxkTmVlZHNHZXR0ZXIoRmllbGRFbnRpdHkgZmllbGQpIHsKICAgIGFzc2VydChmaWVsZC5pc0ZpZWxkKTsKICAgIGlmIChmaWVsZEFjY2Vzc05ldmVyVGhyb3dzKGZpZWxkKSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIGZpZWxkLmlzSW5zdGFuY2VNZW1iZXIgJiYgX2NvZGVnZW5Xb3JsZC5oYXNJbnZva2VkR2V0dGVyKGZpZWxkKTsKICB9CgogIGJvb2wgZmllbGROZWVkc1NldHRlcihGaWVsZEVudGl0eSBmaWVsZCkgewogICAgYXNzZXJ0KGZpZWxkLmlzRmllbGQpOwogICAgaWYgKGZpZWxkQWNjZXNzTmV2ZXJUaHJvd3MoZmllbGQpKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoIWZpZWxkLmlzQXNzaWduYWJsZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIGZpZWxkLmlzSW5zdGFuY2VNZW1iZXIgJiYgX2NvZGVnZW5Xb3JsZC5oYXNJbnZva2VkU2V0dGVyKGZpZWxkKTsKICB9CgogIHN0YXRpYyBib29sIGZpZWxkQWNjZXNzTmV2ZXJUaHJvd3MoRmllbGRFbnRpdHkgZmllbGQpIHsKICAgIHJldHVybgogICAgICAgIC8vIFdlIG5ldmVyIGFjY2VzcyBhIGZpZWxkIGluIGEgY2xvc3VyZSAoYSBjYXB0dXJlZCB2YXJpYWJsZSkgd2l0aG91dAogICAgICAgIC8vIGtub3dpbmcgdGhhdCBpdCBpcyB0aGVyZS4gIFRoZXJlZm9yZSB3ZSBkb24ndCBuZWVkIHRvIHVzZSBhIGdldHRlcgogICAgICAgIC8vICh0aGF0IHdpbGwgdGhyb3cgaWYgdGhlIGdldHRlciBtZXRob2QgaXMgbWlzc2luZyksIGJ1dCBjYW4gYWx3YXlzCiAgICAgICAgLy8gYWNjZXNzIHRoZSBmaWVsZCBkaXJlY3RseS4KICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZXR1cm4gYHRydWVgIEpDbG9zdXJlRmllbGQuCiAgICAgICAgZmFsc2U7CiAgfQoKICBib29sIGNhbkF2b2lkR2VuZXJhdGVkQ2hlY2tlZFNldHRlcihGaWVsZEVudGl0eSBtZW1iZXIpIHsKICAgIC8vIFdlIG5ldmVyIGdlbmVyYXRlIGFjY2Vzc29ycyBmb3IgdG9wLWxldmVsL3N0YXRpYyBmaWVsZHMuCiAgICBpZiAoIW1lbWJlci5pc0luc3RhbmNlTWVtYmVyKSByZXR1cm4gdHJ1ZTsKICAgIERhcnRUeXBlIHR5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldEZpZWxkVHlwZShtZW1iZXIpOwogICAgcmV0dXJuIHR5cGUudHJlYXRBc0R5bmFtaWMgfHwgdHlwZSA9PSBfY29tbW9uRWxlbWVudHMub2JqZWN0VHlwZTsKICB9Cn0KgKcATk48ASwBOgRKNARMTz0ERlEdBFBQMFFCARUiMSkkIBYjAU5NATcGPgZKTx8GRgZRNQY6IkwgHCEXNgFLT1AiGC8NEFAGAT8gSwE/RkoSICA+Ly8IAUEZGUA9KSkwHhs2JR8KTEQhCAYBFVAwCh9PMSsKCg1IRkgfAU1KSDQyNjYyLgoKBgQBLRs1TAQBLRs1K0wEAToLTk5NJj0PBAE8QC8+RgQCAUJwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL3Byb2dyYW1fYnVpbGRlci9maWVsZF92aXNpdG9yLmRhcnRHc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfZW1pdHRlci9wcm9ncmFtX2J1aWxkZXIvY29sbGVjdG9yLmRhcnSvHC8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQyanMuanNfZW1pdHRlci5wcm9ncmFtX2J1aWxkZXI7CgovLy8gR2VuZXJhdGVzIHRoZSBjb2RlIGZvciBhbGwgdXNlZCBjbGFzc2VzIGluIHRoZSBwcm9ncmFtLiBTdGF0aWMgZmllbGRzIChldmVuCi8vLyBpbiBjbGFzc2VzKSBhcmUgaWdub3JlZCwgc2luY2UgdGhleSBjYW4gYmUgdHJlYXRlZCBhcyBub24tY2xhc3MgZWxlbWVudHMuCi8vLwovLy8gVGhlIGNvZGUgZm9yIHRoZSBjb250YWluaW5nICh1c2VkKSBtZXRob2RzIG11c3QgZXhpc3QgaW4gdGhlIGB1bml2ZXJzZWAuCmNsYXNzIENvbGxlY3RvciB7CiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwogIGZpbmFsIEpDb21tb25FbGVtZW50cyBfY29tbW9uRWxlbWVudHM7CiAgZmluYWwgSkVsZW1lbnRFbnZpcm9ubWVudCBfZWxlbWVudEVudmlyb25tZW50OwogIGZpbmFsIE91dHB1dFVuaXREYXRhIF9vdXRwdXRVbml0RGF0YTsKICBmaW5hbCBDb2RlZ2VuV29ybGQgX2NvZGVnZW5Xb3JsZDsKICAvLyBUT0RPKGZsb2l0c2NoKTogdGhlIGNvZGUtZW1pdHRlciB0YXNrIHNob3VsZCBub3QgbmVlZCBhIG5hbWVyLgogIGZpbmFsIE5hbWVyIF9uYW1lcjsKICBmaW5hbCBFbWl0dGVyIF9lbWl0dGVyOwogIGZpbmFsIE5hdGl2ZURhdGEgX25hdGl2ZURhdGE7CiAgZmluYWwgSW50ZXJjZXB0b3JEYXRhIF9pbnRlcmNlcHRvckRhdGE7CiAgZmluYWwgT25lU2hvdEludGVyY2VwdG9yRGF0YSBfb25lU2hvdEludGVyY2VwdG9yRGF0YTsKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gX3J0aU5lZWRlZENsYXNzZXM7CiAgZmluYWwgTWFwPE1lbWJlckVudGl0eSwganMuRXhwcmVzc2lvbj4gX2dlbmVyYXRlZENvZGU7CiAgZmluYWwgU29ydGVyIF9zb3J0ZXI7CgogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gbmVlZGVkQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CiAgLy8gVGhpcyBmaWVsZCBpcyBzZXQgaW4gW2NvbXB1dGVOZWVkZWREZWNsYXJhdGlvbnNdLgogIFNldDxDbGFzc0VudGl0eT4gY2xhc3Nlc09ubHlOZWVkZWRGb3JSdGk7CiAgZmluYWwgTWFwPE91dHB1dFVuaXQsIExpc3Q8Q2xhc3NFbnRpdHk+PiBvdXRwdXRDbGFzc0xpc3RzID0KICAgICAgbmV3IE1hcDxPdXRwdXRVbml0LCBMaXN0PENsYXNzRW50aXR5Pj4oKTsKICBmaW5hbCBNYXA8T3V0cHV0VW5pdCwgTGlzdDxDb25zdGFudFZhbHVlPj4gb3V0cHV0Q29uc3RhbnRMaXN0cyA9CiAgICAgIG5ldyBNYXA8T3V0cHV0VW5pdCwgTGlzdDxDb25zdGFudFZhbHVlPj4oKTsKICBmaW5hbCBNYXA8T3V0cHV0VW5pdCwgTGlzdDxNZW1iZXJFbnRpdHk+PiBvdXRwdXRTdGF0aWNMaXN0cyA9CiAgICAgIG5ldyBNYXA8T3V0cHV0VW5pdCwgTGlzdDxNZW1iZXJFbnRpdHk+PigpOwogIGZpbmFsIE1hcDxPdXRwdXRVbml0LCBMaXN0PEZpZWxkRW50aXR5Pj4gb3V0cHV0U3RhdGljTm9uRmluYWxGaWVsZExpc3RzID0KICAgICAgbmV3IE1hcDxPdXRwdXRVbml0LCBMaXN0PEZpZWxkRW50aXR5Pj4oKTsKICBmaW5hbCBNYXA8T3V0cHV0VW5pdCwgU2V0PExpYnJhcnlFbnRpdHk+PiBvdXRwdXRMaWJyYXJ5TGlzdHMgPQogICAgICBuZXcgTWFwPE91dHB1dFVuaXQsIFNldDxMaWJyYXJ5RW50aXR5Pj4oKTsKCiAgLy8vIFRydWUsIGlmIHRoZSBvdXRwdXQgY29udGFpbnMgYSBjb25zdGFudCBsaXN0LgogIC8vLwogIC8vLyBUaGlzIGZsYWcgaXMgdXBkYXRlZCBpbiBbY29tcHV0ZU5lZWRlZENvbnN0YW50c10uCiAgYm9vbCBvdXRwdXRDb250YWluc0NvbnN0YW50TGlzdCA9IGZhbHNlOwoKICBmaW5hbCBMaXN0PENsYXNzRW50aXR5PiBuYXRpdmVDbGFzc2VzQW5kU3ViY2xhc3NlcyA9IDxDbGFzc0VudGl0eT5bXTsKCiAgQ29sbGVjdG9yKAogICAgICB0aGlzLl9vcHRpb25zLAogICAgICB0aGlzLl9jb21tb25FbGVtZW50cywKICAgICAgdGhpcy5fZWxlbWVudEVudmlyb25tZW50LAogICAgICB0aGlzLl9vdXRwdXRVbml0RGF0YSwKICAgICAgdGhpcy5fY29kZWdlbldvcmxkLAogICAgICB0aGlzLl9uYW1lciwKICAgICAgdGhpcy5fZW1pdHRlciwKICAgICAgdGhpcy5fbmF0aXZlRGF0YSwKICAgICAgdGhpcy5faW50ZXJjZXB0b3JEYXRhLAogICAgICB0aGlzLl9vbmVTaG90SW50ZXJjZXB0b3JEYXRhLAogICAgICB0aGlzLl9jbG9zZWRXb3JsZCwKICAgICAgdGhpcy5fcnRpTmVlZGVkQ2xhc3NlcywKICAgICAgdGhpcy5fZ2VuZXJhdGVkQ29kZSwKICAgICAgdGhpcy5fc29ydGVyKTsKCiAgU2V0PENsYXNzRW50aXR5PiBjb21wdXRlSW50ZXJjZXB0b3JzUmVmZXJlbmNlZEZyb21Db25zdGFudHMoKSB7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwogICAgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gY29uc3RhbnRzID0gX2NvZGVnZW5Xb3JsZC5nZXRDb25zdGFudHNGb3JFbWlzc2lvbigpOwogICAgZm9yIChDb25zdGFudFZhbHVlIGNvbnN0YW50IGluIGNvbnN0YW50cykgewogICAgICBpZiAoY29uc3RhbnQgaXMgSW50ZXJjZXB0b3JDb25zdGFudFZhbHVlKSB7CiAgICAgICAgSW50ZXJjZXB0b3JDb25zdGFudFZhbHVlIGludGVyY2VwdG9yQ29uc3RhbnQgPSBjb25zdGFudDsKICAgICAgICBjbGFzc2VzLmFkZChpbnRlcmNlcHRvckNvbnN0YW50LmNscyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBjbGFzc2VzOwogIH0KCiAgLy8vIFJldHVybiBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIGl0cyBhcmd1bWVudCBpcyBhIGNsYXNzCiAgLy8vIHRoYXQgbmVlZHMgdG8gYmUgZW1pdHRlZC4KICBGdW5jdGlvbiBjb21wdXRlQ2xhc3NGaWx0ZXIoSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGJhY2tlbmRUeXBlSGVscGVycykgewogICAgU2V0PENsYXNzRW50aXR5PiB1bm5lZWRlZENsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwogICAgLy8gVGhlIFtCb29sXSBjbGFzcyBpcyBub3QgbWFya2VkIGFzIGFic3RyYWN0LCBidXQgaGFzIGEgZmFjdG9yeQogICAgLy8gY29uc3RydWN0b3IgdGhhdCBhbHdheXMgdGhyb3dzLiBXZSBuZXZlciBuZWVkIHRvIGVtaXQgaXQuCiAgICB1bm5lZWRlZENsYXNzZXMuYWRkKF9jb21tb25FbGVtZW50cy5ib29sQ2xhc3MpOwoKICAgIC8vIEdvIG92ZXIgc3BlY2lhbGl6ZWQgaW50ZXJjZXB0b3JzIGFuZCB0aGVuIGNvbnN0YW50cyB0byBrbm93IHdoaWNoCiAgICAvLyBpbnRlcmNlcHRvcnMgYXJlIG5lZWRlZC4KICAgIFNldDxDbGFzc0VudGl0eT4gbmVlZGVkID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKICAgIGZvciAoU3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvciBpbnRlcmNlcHRvcgogICAgICAgIGluIF9vbmVTaG90SW50ZXJjZXB0b3JEYXRhLnNwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3JzKSB7CiAgICAgIG5lZWRlZC5hZGRBbGwoaW50ZXJjZXB0b3IuY2xhc3Nlcyk7CiAgICB9CgogICAgLy8gQWRkIGludGVyY2VwdG9ycyByZWZlcmVuY2VkIGJ5IGNvbnN0YW50cy4KICAgIG5lZWRlZC5hZGRBbGwoY29tcHV0ZUludGVyY2VwdG9yc1JlZmVyZW5jZWRGcm9tQ29uc3RhbnRzKCkpOwoKICAgIC8vIEFkZCB1bm5lZWRlZCBpbnRlcmNlcHRvcnMgdG8gdGhlIFt1bm5lZWRlZENsYXNzZXNdIHNldC4KICAgIGZvciAoQ2xhc3NFbnRpdHkgaW50ZXJjZXB0b3IgaW4gX2ludGVyY2VwdG9yRGF0YS5pbnRlcmNlcHRlZENsYXNzZXMpIHsKICAgICAgaWYgKCFuZWVkZWQuY29udGFpbnMoaW50ZXJjZXB0b3IpICYmCiAgICAgICAgICBpbnRlcmNlcHRvciAhPSBfY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MpIHsKICAgICAgICB1bm5lZWRlZENsYXNzZXMuYWRkKGludGVyY2VwdG9yKTsKICAgICAgfQogICAgfQoKICAgIC8vIFRoZXNlIGNsYXNzZXMgYXJlIGp1c3QgaGVscGVycyBmb3IgdGhlIGJhY2tlbmQncyB0eXBlIHN5c3RlbS4KICAgIHVubmVlZGVkQ2xhc3Nlcy5hZGRBbGwoYmFja2VuZFR5cGVIZWxwZXJzKTsKCiAgICByZXR1cm4gKENsYXNzRW50aXR5IGNscykgPT4gIXVubmVlZGVkQ2xhc3Nlcy5jb250YWlucyhjbHMpOwogIH0KCiAgLy8gUmV0dXJuIHRoZSBjbGFzc2VzIHRoYXQgYXJlIGp1c3QgaGVscGVycyBmb3IgdGhlIGJhY2tlbmQncyB0eXBlIHN5c3RlbS4KICBzdGF0aWMgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldEJhY2tlbmRUeXBlSGVscGVycygKICAgICAgSkNvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSB7CiAgICByZXR1cm4gPENsYXNzRW50aXR5PlsKICAgICAgY29tbW9uRWxlbWVudHMuanNNdXRhYmxlQXJyYXlDbGFzcywKICAgICAgY29tbW9uRWxlbWVudHMuanNGaXhlZEFycmF5Q2xhc3MsCiAgICAgIGNvbW1vbkVsZW1lbnRzLmpzRXh0ZW5kYWJsZUFycmF5Q2xhc3MsCiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1hcmsgdGhpcyBhcyBhIGJhY2tlbmQgdHlwZSBoZWxwZXI6CiAgICAgIC8vY29tbW9uRWxlbWVudHMuanNVbm1vZGlmaWFibGVBcnJheUNsYXNzLAogICAgICBjb21tb25FbGVtZW50cy5qc1VJbnQzMkNsYXNzLAogICAgICBjb21tb25FbGVtZW50cy5qc1VJbnQzMUNsYXNzLAogICAgICBjb21tb25FbGVtZW50cy5qc1Bvc2l0aXZlSW50Q2xhc3MKICAgIF07CiAgfQoKICAvLy8gQ29tcHV0ZSBhbGwgdGhlIGNvbnN0YW50cyB0aGF0IG11c3QgYmUgZW1pdHRlZC4KICB2b2lkIGNvbXB1dGVOZWVkZWRDb25zdGFudHMoKSB7CiAgICBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBjb25zdGFudHMgPQogICAgICAgIF9jb2RlZ2VuV29ybGQuZ2V0Q29uc3RhbnRzRm9yRW1pc3Npb24oX2VtaXR0ZXIuY29tcGFyZUNvbnN0YW50cyk7CiAgICBmb3IgKENvbnN0YW50VmFsdWUgY29uc3RhbnQgaW4gY29uc3RhbnRzKSB7CiAgICAgIGlmIChfZW1pdHRlci5pc0NvbnN0YW50SW5saW5lZE9yQWxyZWFkeUVtaXR0ZWQoY29uc3RhbnQpKSBjb250aW51ZTsKCiAgICAgIGlmIChjb25zdGFudC5pc0xpc3QpIG91dHB1dENvbnRhaW5zQ29uc3RhbnRMaXN0ID0gdHJ1ZTsKCiAgICAgIE91dHB1dFVuaXQgY29uc3RhbnRVbml0ID0gX291dHB1dFVuaXREYXRhLm91dHB1dFVuaXRGb3JDb25zdGFudChjb25zdGFudCk7CiAgICAgIGlmIChjb25zdGFudFVuaXQgPT0gbnVsbCkgewogICAgICAgIC8vIFRoZSBiYWNrLWVuZCBpbnRyb2R1Y2VzIHNvbWUgY29uc3RhbnRzLCBsaWtlICJJbnRlcmNlcHRvckNvbnN0YW50IiBvcgogICAgICAgIC8vIHNvbWUgbGlzdCBjb25zdGFudHMuIFRoZXkgYXJlIGVtaXR0ZWQgaW4gdGhlIG1haW4gb3V0cHV0LXVuaXQuCiAgICAgICAgLy8gVE9ETyhzaWd1cmRtKTogV2Ugc2hvdWxkIHRyYWNrIHRob3NlIGNvbnN0YW50cy4KICAgICAgICBjb25zdGFudFVuaXQgPSBfb3V0cHV0VW5pdERhdGEubWFpbk91dHB1dFVuaXQ7CiAgICAgIH0KICAgICAgb3V0cHV0Q29uc3RhbnRMaXN0cwogICAgICAgICAgLnB1dElmQWJzZW50KGNvbnN0YW50VW5pdCwgKCkgPT4gbmV3IExpc3Q8Q29uc3RhbnRWYWx1ZT4oKSkKICAgICAgICAgIC5hZGQoY29uc3RhbnQpOwogICAgfQogIH0KCiAgLy8vIENvbXB1dGUgYWxsIHRoZSBjbGFzc2VzIGFuZCB0eXBlZGVmcyB0aGF0IG11c3QgYmUgZW1pdHRlZC4KICB2b2lkIGNvbXB1dGVOZWVkZWREZWNsYXJhdGlvbnMoKSB7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGJhY2tlbmRUeXBlSGVscGVycyA9CiAgICAgICAgZ2V0QmFja2VuZFR5cGVIZWxwZXJzKF9jb21tb25FbGVtZW50cykudG9TZXQoKTsKCiAgICAvLyBDb21wdXRlIG5lZWRlZCBjbGFzc2VzLgogICAgU2V0PENsYXNzRW50aXR5PiBpbnN0YW50aWF0ZWRDbGFzc2VzID0KICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBUaGlzIHNob3VsZCBiZSBhY2Nlc3NlZCBmcm9tIGEgY29kZWdlbiBjbG9zZWQKICAgICAgICAvLyB3b3JsZC4KICAgICAgICBfY29kZWdlbldvcmxkLmRpcmVjdGx5SW5zdGFudGlhdGVkQ2xhc3NlcwogICAgICAgICAgICAud2hlcmUoY29tcHV0ZUNsYXNzRmlsdGVyKGJhY2tlbmRUeXBlSGVscGVycykpCiAgICAgICAgICAgIC50b1NldCgpOwoKICAgIHZvaWQgYWRkQ2xhc3NXaXRoU3VwZXJjbGFzc2VzKENsYXNzRW50aXR5IGNscykgewogICAgICBuZWVkZWRDbGFzc2VzLmFkZChjbHMpOwogICAgICBmb3IgKENsYXNzRW50aXR5IHN1cGVyY2xhc3MgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFN1cGVyQ2xhc3MoY2xzKTsKICAgICAgICAgIHN1cGVyY2xhc3MgIT0gbnVsbDsKICAgICAgICAgIHN1cGVyY2xhc3MgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFN1cGVyQ2xhc3Moc3VwZXJjbGFzcykpIHsKICAgICAgICBuZWVkZWRDbGFzc2VzLmFkZChzdXBlcmNsYXNzKTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgYWRkQ2xhc3Nlc1dpdGhTdXBlcmNsYXNzZXMoSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGNsYXNzZXMpIHsKICAgICAgZm9yIChDbGFzc0VudGl0eSBjbHMgaW4gY2xhc3NlcykgewogICAgICAgIGFkZENsYXNzV2l0aFN1cGVyY2xhc3NlcyhjbHMpOwogICAgICB9CiAgICB9CgogICAgLy8gMS4gV2UgbmVlZCB0byBnZW5lcmF0ZSBhbGwgY2xhc3NlcyB0aGF0IGFyZSBpbnN0YW50aWF0ZWQuCiAgICBhZGRDbGFzc2VzV2l0aFN1cGVyY2xhc3NlcyhpbnN0YW50aWF0ZWRDbGFzc2VzKTsKCiAgICAvLyAyLiBBZGQgYWxsIGNsYXNzZXMgdXNlZCBhcyBtaXhpbnMuCiAgICBTZXQ8Q2xhc3NFbnRpdHk+IG1peGluQ2xhc3NlcyA9IG5lZWRlZENsYXNzZXMKICAgICAgICAud2hlcmUoX2VsZW1lbnRFbnZpcm9ubWVudC5pc01peGluQXBwbGljYXRpb24pCiAgICAgICAgLm1hcChfZWxlbWVudEVudmlyb25tZW50LmdldEVmZmVjdGl2ZU1peGluQ2xhc3MpCiAgICAgICAgLnRvU2V0KCk7CiAgICBuZWVkZWRDbGFzc2VzLmFkZEFsbChtaXhpbkNsYXNzZXMpOwoKICAgIC8vIDMuIEZpbmQgYWxsIGNsYXNzZXMgbmVlZGVkIGZvciBydGkuCiAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGlzIGlzIHRoZSBwZW51bHRpbWF0ZSBzdGVwLCBhdCB0aGlzIHBvaW50LAogICAgLy8gbmVlZGVkQ2xhc3NlcyBtdXN0IG9ubHkgY29udGFpbiBjbGFzc2VzIHRoYXQgaGF2ZSBiZWVuIHJlc29sdmVkIGFuZAogICAgLy8gY29kZWdlbidkLiBUaGUgcnRpTmVlZGVkQ2xhc3NlcyBtYXkgY29udGFpbiBhZGRpdGlvbmFsIGNsYXNzZXMsIGJ1dAogICAgLy8gdGhlc2UgYXJlIHRob3VnaHQgdG8gbm90IGhhdmUgYmVlbiBpbnN0YW50aWF0ZWQsIHNvIHdlIG5lZWQgdG8gYmUgYWJsZQogICAgLy8gdG8gaWRlbnRpZnkgdGhlbSBsYXRlciBhbmQgbWFrZSBzdXJlIHdlIG9ubHkgZW1pdCAiZW1wdHkgc2hlbGxzIiB3aXRob3V0CiAgICAvLyBmaWVsZHMsIGV0Yy4KICAgIGNsYXNzZXNPbmx5TmVlZGVkRm9yUnRpID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xzIGluIF9ydGlOZWVkZWRDbGFzc2VzKSB7CiAgICAgIGlmIChiYWNrZW5kVHlwZUhlbHBlcnMuY29udGFpbnMoY2xzKSkgY29udGludWU7CiAgICAgIHdoaWxlIChjbHMgIT0gbnVsbCAmJiAhbmVlZGVkQ2xhc3Nlcy5jb250YWlucyhjbHMpKSB7CiAgICAgICAgaWYgKCFjbGFzc2VzT25seU5lZWRlZEZvclJ0aS5hZGQoY2xzKSkgYnJlYWs7CiAgICAgICAgY2xzID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRTdXBlckNsYXNzKGNscyk7CiAgICAgIH0KICAgIH0KCiAgICBuZWVkZWRDbGFzc2VzLmFkZEFsbChjbGFzc2VzT25seU5lZWRlZEZvclJ0aSk7CgogICAgLy8gVE9ETygxODE3NSwgZmxvaXRzY2gpOiByZW1vdmUgb25jZSBpc3N1ZSAxODE3NSBpcyBmaXhlZC4KICAgIGlmIChuZWVkZWRDbGFzc2VzLmNvbnRhaW5zKF9jb21tb25FbGVtZW50cy5qc0ludENsYXNzKSkgewogICAgICBuZWVkZWRDbGFzc2VzLmFkZChfY29tbW9uRWxlbWVudHMuaW50Q2xhc3MpOwogICAgfQogICAgaWYgKG5lZWRlZENsYXNzZXMuY29udGFpbnMoX2NvbW1vbkVsZW1lbnRzLmpzRG91YmxlQ2xhc3MpKSB7CiAgICAgIG5lZWRlZENsYXNzZXMuYWRkKF9jb21tb25FbGVtZW50cy5kb3VibGVDbGFzcyk7CiAgICB9CiAgICBpZiAobmVlZGVkQ2xhc3Nlcy5jb250YWlucyhfY29tbW9uRWxlbWVudHMuanNOdW1iZXJDbGFzcykpIHsKICAgICAgbmVlZGVkQ2xhc3Nlcy5hZGQoX2NvbW1vbkVsZW1lbnRzLm51bUNsYXNzKTsKICAgIH0KICAgIGlmIChuZWVkZWRDbGFzc2VzLmNvbnRhaW5zKF9jb21tb25FbGVtZW50cy5qc1N0cmluZ0NsYXNzKSkgewogICAgICBuZWVkZWRDbGFzc2VzLmFkZChfY29tbW9uRWxlbWVudHMuc3RyaW5nQ2xhc3MpOwogICAgfQogICAgaWYgKG5lZWRlZENsYXNzZXMuY29udGFpbnMoX2NvbW1vbkVsZW1lbnRzLmpzQm9vbENsYXNzKSkgewogICAgICBuZWVkZWRDbGFzc2VzLmFkZChfY29tbW9uRWxlbWVudHMuYm9vbENsYXNzKTsKICAgIH0KICAgIGlmIChuZWVkZWRDbGFzc2VzLmNvbnRhaW5zKF9jb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3MpKSB7CiAgICAgIG5lZWRlZENsYXNzZXMuYWRkKF9jb21tb25FbGVtZW50cy5saXN0Q2xhc3MpOwogICAgfQoKICAgIC8vIDQuIEZpbmFsbHksIHNvcnQgdGhlIGNsYXNzZXMuCiAgICBMaXN0PENsYXNzRW50aXR5PiBzb3J0ZWRDbGFzc2VzID0gX3NvcnRlci5zb3J0Q2xhc3NlcyhuZWVkZWRDbGFzc2VzKTsKCiAgICBmb3IgKENsYXNzRW50aXR5IGNscyBpbiBzb3J0ZWRDbGFzc2VzKSB7CiAgICAgIGlmIChfbmF0aXZlRGF0YS5pc05hdGl2ZU9yRXh0ZW5kc05hdGl2ZShjbHMpICYmCiAgICAgICAgICAhY2xhc3Nlc09ubHlOZWVkZWRGb3JSdGkuY29udGFpbnMoY2xzKSkgewogICAgICAgIC8vIEZvciBub3csIG5hdGl2ZSBjbGFzc2VzIGFuZCByZWxhdGVkIGNsYXNzZXMgY2Fubm90IGJlIGRlZmVycmVkLgogICAgICAgIG5hdGl2ZUNsYXNzZXNBbmRTdWJjbGFzc2VzLmFkZChjbHMpOwogICAgICAgIGFzc2VydCghX291dHB1dFVuaXREYXRhLmlzRGVmZXJyZWRDbGFzcyhjbHMpLCBmYWlsZWRBdChjbHMpKTsKICAgICAgICBvdXRwdXRDbGFzc0xpc3RzCiAgICAgICAgICAgIC5wdXRJZkFic2VudCgKICAgICAgICAgICAgICAgIF9vdXRwdXRVbml0RGF0YS5tYWluT3V0cHV0VW5pdCwgKCkgPT4gbmV3IExpc3Q8Q2xhc3NFbnRpdHk+KCkpCiAgICAgICAgICAgIC5hZGQoY2xzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBvdXRwdXRDbGFzc0xpc3RzCiAgICAgICAgICAgIC5wdXRJZkFic2VudChfb3V0cHV0VW5pdERhdGEub3V0cHV0VW5pdEZvckNsYXNzKGNscyksCiAgICAgICAgICAgICAgICAoKSA9PiBuZXcgTGlzdDxDbGFzc0VudGl0eT4oKSkKICAgICAgICAgICAgLmFkZChjbHMpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIGNvbXB1dGVOZWVkZWRTdGF0aWNzKCkgewogICAgYm9vbCBpc1N0YXRpY0Z1bmN0aW9uKE1lbWJlckVudGl0eSBlbGVtZW50KSA9PgogICAgICAgICFlbGVtZW50LmlzSW5zdGFuY2VNZW1iZXIgJiYgIWVsZW1lbnQuaXNGaWVsZDsKCiAgICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGVsZW1lbnRzID0KICAgICAgICBfZ2VuZXJhdGVkQ29kZS5rZXlzLndoZXJlKGlzU3RhdGljRnVuY3Rpb24pOwoKICAgIGZvciAoTWVtYmVyRW50aXR5IG1lbWJlciBpbiBfc29ydGVyLnNvcnRNZW1iZXJzKGVsZW1lbnRzKSkgewogICAgICBMaXN0PE1lbWJlckVudGl0eT4gbGlzdCA9IG91dHB1dFN0YXRpY0xpc3RzLnB1dElmQWJzZW50KAogICAgICAgICAgX291dHB1dFVuaXREYXRhLm91dHB1dFVuaXRGb3JNZW1iZXIobWVtYmVyKSwKICAgICAgICAgICgpID0+IG5ldyBMaXN0PE1lbWJlckVudGl0eT4oKSk7CiAgICAgIGxpc3QuYWRkKG1lbWJlcik7CiAgICB9CiAgfQoKICB2b2lkIGNvbXB1dGVOZWVkZWRTdGF0aWNOb25GaW5hbEZpZWxkcygpIHsKICAgIGFkZFRvT3V0cHV0VW5pdChGaWVsZEVudGl0eSBlbGVtZW50KSB7CiAgICAgIExpc3Q8RmllbGRFbnRpdHk+IGxpc3QgPSBvdXRwdXRTdGF0aWNOb25GaW5hbEZpZWxkTGlzdHMucHV0SWZBYnNlbnQoCiAgICAgICAgICBfb3V0cHV0VW5pdERhdGEub3V0cHV0VW5pdEZvck1lbWJlcihlbGVtZW50KSwKICAgICAgICAgICgpID0+IG5ldyBMaXN0PEZpZWxkRW50aXR5PigpKTsKICAgICAgbGlzdC5hZGQoZWxlbWVudCk7CiAgICB9CgogICAgTGlzdDxGaWVsZEVudGl0eT4gZWFnZXJGaWVsZHMgPSBbXTsKICAgIF9jb2RlZ2VuV29ybGQuZm9yRWFjaFN0YXRpY0ZpZWxkKChGaWVsZEVudGl0eSBmaWVsZCkgewogICAgICBpZiAoX2Nsb3NlZFdvcmxkLmZpZWxkQW5hbHlzaXMuZ2V0RmllbGREYXRhKGZpZWxkKS5pc0VhZ2VyKSB7CiAgICAgICAgZWFnZXJGaWVsZHMuYWRkKGZpZWxkKTsKICAgICAgfQogICAgfSk7CgogICAgZWFnZXJGaWVsZHMuc29ydCgoRmllbGRFbnRpdHkgYSwgRmllbGRFbnRpdHkgYikgewogICAgICBGaWVsZEFuYWx5c2lzRGF0YSBhRmllbGREYXRhID0gX2Nsb3NlZFdvcmxkLmZpZWxkQW5hbHlzaXMuZ2V0RmllbGREYXRhKGEpOwogICAgICBGaWVsZEFuYWx5c2lzRGF0YSBiRmllbGREYXRhID0gX2Nsb3NlZFdvcmxkLmZpZWxkQW5hbHlzaXMuZ2V0RmllbGREYXRhKGIpOwogICAgICBpbnQgYUluZGV4ID0gYUZpZWxkRGF0YS5lYWdlckNyZWF0aW9uSW5kZXg7CiAgICAgIGludCBiSW5kZXggPSBiRmllbGREYXRhLmVhZ2VyQ3JlYXRpb25JbmRleDsKICAgICAgaWYgKGFJbmRleCAhPSBudWxsICYmIGJJbmRleCAhPSBudWxsKSB7CiAgICAgICAgcmV0dXJuIGFJbmRleC5jb21wYXJlVG8oYkluZGV4KTsKICAgICAgfSBlbHNlIGlmIChhSW5kZXggIT0gbnVsbCkgewogICAgICAgIC8vIFNvcnQgW2JdIGJlZm9yZSBbYV0uCiAgICAgICAgcmV0dXJuIDE7CiAgICAgIH0gZWxzZSBpZiAoYkluZGV4ICE9IG51bGwpIHsKICAgICAgICAvLyBTb3J0IFthXSBiZWZvcmUgW2JdLgogICAgICAgIHJldHVybiAtMTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gX3NvcnRlci5jb21wYXJlTWVtYmVyc0J5TG9jYXRpb24oYSwgYik7CiAgICAgIH0KICAgIH0pOwogICAgZWFnZXJGaWVsZHMuZm9yRWFjaChhZGRUb091dHB1dFVuaXQpOwogIH0KCiAgdm9pZCBjb21wdXRlTmVlZGVkTGlicmFyaWVzKCkgewogICAgX2dlbmVyYXRlZENvZGUua2V5cy5mb3JFYWNoKChNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgICBPdXRwdXRVbml0IHVuaXQgPSBfb3V0cHV0VW5pdERhdGEub3V0cHV0VW5pdEZvck1lbWJlcihlbGVtZW50KTsKICAgICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5ID0gZWxlbWVudC5saWJyYXJ5OwogICAgICBvdXRwdXRMaWJyYXJ5TGlzdHMKICAgICAgICAgIC5wdXRJZkFic2VudCh1bml0LCAoKSA9PiBuZXcgU2V0PExpYnJhcnlFbnRpdHk+KCkpCiAgICAgICAgICAuYWRkKGxpYnJhcnkpOwogICAgfSk7CiAgICBuZWVkZWRDbGFzc2VzLmZvckVhY2goKENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgICAgT3V0cHV0VW5pdCB1bml0ID0gX291dHB1dFVuaXREYXRhLm91dHB1dFVuaXRGb3JDbGFzcyhlbGVtZW50KTsKICAgICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5ID0gZWxlbWVudC5saWJyYXJ5OwogICAgICBvdXRwdXRMaWJyYXJ5TGlzdHMKICAgICAgICAgIC5wdXRJZkFic2VudCh1bml0LCAoKSA9PiBuZXcgU2V0PExpYnJhcnlFbnRpdHk+KCkpCiAgICAgICAgICAuYWRkKGxpYnJhcnkpOwogICAgfSk7CiAgfQoKICB2b2lkIGNvbGxlY3QoKSB7CiAgICBjb21wdXRlTmVlZGVkRGVjbGFyYXRpb25zKCk7CiAgICBjb21wdXRlTmVlZGVkQ29uc3RhbnRzKCk7CiAgICBjb21wdXRlTmVlZGVkU3RhdGljcygpOwogICAgY29tcHV0ZU5lZWRlZFN0YXRpY05vbkZpbmFsRmllbGRzKCk7CiAgICBjb21wdXRlTmVlZGVkTGlicmFyaWVzKCk7CiAgfQp9CoFBAE5OPAEsAVBOBE0SIikxKCREFhogKjgjLDkYAUE3LD4wQzJAMUwwQTEBNAY4KwFIAQ0VHCAcGhMVGB0kGR4bFQFCN1EwMkEuCAYUBAFFIEo/RUE0AUkgNi9BKgYBMUEBP0srOCoIBgFFMAFABAFNNigaKigtQjEkJCgHBAE2IihKMEoBPgFRIlFKOzcIGkYaBgQBQSUqOAEfK04SMjsWATUeTB5IJwgGAUUpJwgGAUE1ASoyNzkSKAErSUtLTlAUNjE2PDY2CAYBMwFAPjMGQTYGQTMGQTYGPzQGQDQGASVKAS02NEstRhkaTxcPGUIvFwgGBAEgMzcBJjUBQT83KxgGBAEtK0s4KhkGASg7RCAICAE2UVEyMi4pIyASIyATDzcICCoEASI5Ri8ZPRkIMkUvGT0ZCAQBEyEeHCkeBAIBPnBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvcHJvZ3JhbV9idWlsZGVyL2NvbGxlY3Rvci5kYXJ0RnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2VtaXR0ZXIvcHJvZ3JhbV9idWlsZGVyL3JlZ2lzdHJ5LmRhcnSTli8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQyanMuanNfZW1pdHRlci5wcm9ncmFtX2J1aWxkZXI7CgpjbGFzcyBMaWJyYXJ5Q29udGVudHMgewogIGZpbmFsIExpc3Q8Q2xhc3NFbnRpdHk+IGNsYXNzZXMgPSA8Q2xhc3NFbnRpdHk+W107CiAgZmluYWwgTGlzdDxNZW1iZXJFbnRpdHk+IG1lbWJlcnMgPSA8TWVtYmVyRW50aXR5PltdOwp9CgovLy8gTWFwcyBbTGlicmFyeUVudGl0eV1zIHRvIHRoZWlyIFtDbGFzc0VudGl0eV1zIGFuZCBbTWVtYmVyRW50aXR5XXMuCi8vLwovLy8gRnVuZGFtZW50YWxseSwgdGhpcyBjbGFzcyBuaWNlbHkgZW5jYXBzdWxhdGVzIGEKLy8vIGBNYXA8TGlicmFyeUVudGl0eSwgUGFpcjxMaXN0PENsYXNzRW50aXR5PiwgTGlzdDxNZW1iZXJFbnRpdHk+Pj5gLgovLy8KLy8vIFRoZXJlIGV4aXN0cyBleGFjdGx5IG9uZSBpbnN0YW5jZSBwZXIgW091dHB1dFVuaXRdLgpjbGFzcyBMaWJyYXJpZXNNYXAgewogIGZpbmFsIE1hcDxMaWJyYXJ5RW50aXR5LCBMaWJyYXJ5Q29udGVudHM+IF9tYXBwaW5nID0KICAgICAgPExpYnJhcnlFbnRpdHksIExpYnJhcnlDb250ZW50cz57fTsKCiAgLy8gSXQgaXMgdmVyeSBjb21tb24gdG8gYWNjZXNzIHRoZSBzYW1lIGxpYnJhcnkgbXVsdGlwbGUgdGltZXMgaW4gYSByb3csIHNvCiAgLy8gd2UgY2FjaGUgdGhlIGxhc3QgYWNjZXNzLgogIExpYnJhcnlFbnRpdHkgX2xhc3RMaWJyYXJ5OwogIExpYnJhcnlDb250ZW50cyBfbGFzdE1hcHBpbmc7CgogIC8vLyBBIHVuaXF1ZSBuYW1lIHJlcHJlc2VudGluZyB0aGlzIGluc3RhbmNlLgogIGZpbmFsIFN0cmluZyBuYW1lOwogIGZpbmFsIE91dHB1dFVuaXQgb3V0cHV0VW5pdDsKCiAgTGlicmFyaWVzTWFwLm1haW4odGhpcy5vdXRwdXRVbml0KSA6IG5hbWUgPSAiIjsKCiAgTGlicmFyaWVzTWFwLmRlZmVycmVkKHRoaXMub3V0cHV0VW5pdCwgdGhpcy5uYW1lKSB7CiAgICBhc3NlcnQobmFtZSAhPSAiIik7CiAgfQoKICBMaWJyYXJ5Q29udGVudHMgX2dldE1hcHBpbmcoTGlicmFyeUVudGl0eSBsaWJyYXJ5KSB7CiAgICBpZiAoX2xhc3RMaWJyYXJ5ICE9IGxpYnJhcnkpIHsKICAgICAgX2xhc3RMaWJyYXJ5ID0gbGlicmFyeTsKICAgICAgX2xhc3RNYXBwaW5nID0gX21hcHBpbmcucHV0SWZBYnNlbnQobGlicmFyeSwgKCkgPT4gbmV3IExpYnJhcnlDb250ZW50cygpKTsKICAgIH0KICAgIHJldHVybiBfbGFzdE1hcHBpbmc7CiAgfQoKICB2b2lkIGFkZENsYXNzKExpYnJhcnlFbnRpdHkgbGlicmFyeSwgQ2xhc3NFbnRpdHkgZWxlbWVudCkgewogICAgX2dldE1hcHBpbmcobGlicmFyeSkuY2xhc3Nlcy5hZGQoZWxlbWVudCk7CiAgfQoKICB2b2lkIGFkZE1lbWJlcihMaWJyYXJ5RW50aXR5IGxpYnJhcnksIE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBfZ2V0TWFwcGluZyhsaWJyYXJ5KS5tZW1iZXJzLmFkZChlbGVtZW50KTsKICB9CgogIGludCBnZXQgbGVuZ3RoID0+IF9tYXBwaW5nLmxlbmd0aDsKCiAgdm9pZCBmb3JFYWNoKAogICAgICB2b2lkIGYoTGlicmFyeUVudGl0eSBsaWJyYXJ5LCBMaXN0PENsYXNzRW50aXR5PiBjbGFzc2VzLAogICAgICAgICAgTGlzdDxNZW1iZXJFbnRpdHk+IG1lbWJlcnMpKSB7CiAgICBfbWFwcGluZy5mb3JFYWNoKChMaWJyYXJ5RW50aXR5IGxpYnJhcnksIExpYnJhcnlDb250ZW50cyBtYXBwaW5nKSB7CiAgICAgIGYobGlicmFyeSwgbWFwcGluZy5jbGFzc2VzLCBtYXBwaW5nLm1lbWJlcnMpOwogICAgfSk7CiAgfQp9CgovLy8gS2VlcHMgdHJhY2sgb2YgYWxsIGVsZW1lbnRzIGFuZCBob2xkZXJzLgovLy8KLy8vIFRoaXMgY2xhc3MgYXNzaWducyBlYWNoIHJlZ2lzdGVyZWQgZWxlbWVudCB0byBpdHMgW0xpYnJhcmllc01hcF0gKHdoaWNoIGFyZQovLy8gaW4gYmlqZWN0aW9uIHdpdGggW091dHB1dFVuaXRdcykuCi8vLwovLy8gUmVnaXN0ZXJlZCBob2xkZXJzIGFyZSBhc3NpZ25lZCBhIG5hbWUuCmNsYXNzIFJlZ2lzdHJ5IHsKICBmaW5hbCBPdXRwdXRVbml0IF9tYWluT3V0cHV0VW5pdDsKICBmaW5hbCBTb3J0ZXIgX3NvcnRlcjsKICBmaW5hbCBNYXA8U3RyaW5nLCBIb2xkZXI+IF9ob2xkZXJzTWFwID0gPFN0cmluZywgSG9sZGVyPnt9OwogIGZpbmFsIE1hcDxPdXRwdXRVbml0LCBMaWJyYXJpZXNNYXA+IF9kZWZlcnJlZExpYnJhcmllc01hcCA9CiAgICAgIDxPdXRwdXRVbml0LCBMaWJyYXJpZXNNYXA+e307CgogIC8vLyBDYWNoZSBmb3IgdGhlIGxhc3Qgc2VlbiBvdXRwdXQgdW5pdC4KICBPdXRwdXRVbml0IF9sYXN0T3V0cHV0VW5pdDsKICBMaWJyYXJpZXNNYXAgX2xhc3RMaWJyYXJpZXNNYXA7CgogIEl0ZXJhYmxlPEhvbGRlcj4gZ2V0IGhvbGRlcnMgPT4gX2hvbGRlcnNNYXAudmFsdWVzOwogIEl0ZXJhYmxlPExpYnJhcmllc01hcD4gZ2V0IGRlZmVycmVkTGlicmFyaWVzTWFwID0+CiAgICAgIF9kZWZlcnJlZExpYnJhcmllc01hcC52YWx1ZXM7CgogIC8vIEFkZCBvbmUgZm9yIHRoZSBtYWluIGxpYnJhcmllcyBtYXAuCiAgaW50IGdldCBsaWJyYXJpZXNNYXBDb3VudCA9PiBfZGVmZXJyZWRMaWJyYXJpZXNNYXAubGVuZ3RoICsgMTsKCiAgTGlicmFyaWVzTWFwIG1haW5MaWJyYXJpZXNNYXA7CgogIFJlZ2lzdHJ5KHRoaXMuX21haW5PdXRwdXRVbml0LCB0aGlzLl9zb3J0ZXIpOwoKICBMaWJyYXJpZXNNYXAgX21hcFVuaXRUb0xpYnJhcmllc01hcChPdXRwdXRVbml0IHRhcmdldFVuaXQpIHsKICAgIGlmICh0YXJnZXRVbml0ID09IF9sYXN0T3V0cHV0VW5pdCkgcmV0dXJuIF9sYXN0TGlicmFyaWVzTWFwOwoKICAgIExpYnJhcmllc01hcCByZXN1bHQgPSAodGFyZ2V0VW5pdCA9PSBfbWFpbk91dHB1dFVuaXQpCiAgICAgICAgPyBtYWluTGlicmFyaWVzTWFwCiAgICAgICAgOiBfZGVmZXJyZWRMaWJyYXJpZXNNYXBbdGFyZ2V0VW5pdF07CgogICAgYXNzZXJ0KHJlc3VsdCAhPSBudWxsKTsKICAgIF9sYXN0T3V0cHV0VW5pdCA9IHRhcmdldFVuaXQ7CiAgICBfbGFzdExpYnJhcmllc01hcCA9IHJlc3VsdDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIHJlZ2lzdGVyT3V0cHV0VW5pdChPdXRwdXRVbml0IG91dHB1dFVuaXQpIHsKICAgIGlmIChvdXRwdXRVbml0ID09IF9tYWluT3V0cHV0VW5pdCkgewogICAgICBhc3NlcnQobWFpbkxpYnJhcmllc01hcCA9PSBudWxsKTsKICAgICAgbWFpbkxpYnJhcmllc01hcCA9IG5ldyBMaWJyYXJpZXNNYXAubWFpbihfbWFpbk91dHB1dFVuaXQpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KCFfZGVmZXJyZWRMaWJyYXJpZXNNYXAuY29udGFpbnNLZXkob3V0cHV0VW5pdCkpOwogICAgICBTdHJpbmcgbmFtZSA9IG91dHB1dFVuaXQubmFtZTsKICAgICAgX2RlZmVycmVkTGlicmFyaWVzTWFwW291dHB1dFVuaXRdID0KICAgICAgICAgIG5ldyBMaWJyYXJpZXNNYXAuZGVmZXJyZWQob3V0cHV0VW5pdCwgbmFtZSk7CiAgICB9CiAgfQoKICAvLy8gQWRkcyBhbGwgZWxlbWVudHMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBsaWJyYXJpZXMgaW4gdGhlIGNvcnJlY3QKICAvLy8gbGlicmFyaWVzIG1hcC4KICB2b2lkIHJlZ2lzdGVyQ2xhc3NlcyhPdXRwdXRVbml0IG91dHB1dFVuaXQsIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBlbGVtZW50cykgewogICAgTGlicmFyaWVzTWFwIHRhcmdldExpYnJhcmllc01hcCA9IF9tYXBVbml0VG9MaWJyYXJpZXNNYXAob3V0cHV0VW5pdCk7CiAgICBmb3IgKENsYXNzRW50aXR5IGVsZW1lbnQgaW4gX3NvcnRlci5zb3J0Q2xhc3NlcyhlbGVtZW50cykpIHsKICAgICAgdGFyZ2V0TGlicmFyaWVzTWFwLmFkZENsYXNzKGVsZW1lbnQubGlicmFyeSwgZWxlbWVudCk7CiAgICB9CiAgfQoKICAvLy8gQWRkcyBhbGwgZWxlbWVudHMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBsaWJyYXJpZXMgaW4gdGhlIGNvcnJlY3QKICAvLy8gbGlicmFyaWVzIG1hcC4KICB2b2lkIHJlZ2lzdGVyTWVtYmVycyhPdXRwdXRVbml0IG91dHB1dFVuaXQsIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZWxlbWVudHMpIHsKICAgIExpYnJhcmllc01hcCB0YXJnZXRMaWJyYXJpZXNNYXAgPSBfbWFwVW5pdFRvTGlicmFyaWVzTWFwKG91dHB1dFVuaXQpOwogICAgZm9yIChNZW1iZXJFbnRpdHkgZWxlbWVudCBpbiBfc29ydGVyLnNvcnRNZW1iZXJzKGVsZW1lbnRzKSkgewogICAgICB0YXJnZXRMaWJyYXJpZXNNYXAuYWRkTWVtYmVyKGVsZW1lbnQubGlicmFyeSwgZWxlbWVudCk7CiAgICB9CiAgfQoKICB2b2lkIHJlZ2lzdGVyQ29uc3RhbnQoT3V0cHV0VW5pdCBvdXRwdXRVbml0LCBDb25zdGFudFZhbHVlIGNvbnN0YW50VmFsdWUpIHsKICAgIC8vIElnbm9yZSBmb3Igbm93LgogIH0KCiAgSG9sZGVyIHJlZ2lzdGVySG9sZGVyKFN0cmluZyBuYW1lLAogICAgICB7Ym9vbCBpc1N0YXRpY1N0YXRlSG9sZGVyOiBmYWxzZSwgYm9vbCBpc0NvbnN0YW50c0hvbGRlcjogZmFsc2V9KSB7CiAgICBhc3NlcnQoX2hvbGRlcnNNYXBbbmFtZV0gPT0gbnVsbCB8fAogICAgICAgIChfaG9sZGVyc01hcFtuYW1lXS5pc1N0YXRpY1N0YXRlSG9sZGVyID09IGlzU3RhdGljU3RhdGVIb2xkZXIgJiYKICAgICAgICAgICAgX2hvbGRlcnNNYXBbbmFtZV0uaXNDb25zdGFudHNIb2xkZXIgPT0gaXNDb25zdGFudHNIb2xkZXIpKTsKCiAgICByZXR1cm4gX2hvbGRlcnNNYXAucHV0SWZBYnNlbnQobmFtZSwgKCkgewogICAgICByZXR1cm4gbmV3IEhvbGRlcihuYW1lLCBfaG9sZGVyc01hcC5sZW5ndGgsCiAgICAgICAgICBpc1N0YXRpY1N0YXRlSG9sZGVyOiBpc1N0YXRpY1N0YXRlSG9sZGVyLAogICAgICAgICAgaXNDb25zdGFudHNIb2xkZXI6IGlzQ29uc3RhbnRzSG9sZGVyKTsKICAgIH0pOwogIH0KfQqAmQBOTjwBLAEYNTcCAUcENEcEOBU3KgFOHx4gATAVHwEyATYYBAE3Ix5RBhkEAT4vBAFALwQBJQEQPylINAgEAgEtBFAmBCwRJBg+PiQBKx4iATY1JAEpQQEhATABP0EBOhstARwiIBMEATMpKEENPiUqNwYEAUUVUEpBPQYEAUUVUUpCPgYEAU4XBAElSihJSAEuMjQxCAQCAT1wYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL3Byb2dyYW1fYnVpbGRlci9yZWdpc3RyeS5kYXJ0RXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2VtaXR0ZXIvc3RhcnR1cF9lbWl0dGVyL2VtaXR0ZXIuZGFydJ1zLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5qc19lbWl0dGVyLnN0YXJ0dXBfZW1pdHRlcjsKCmltcG9ydCAnLi4vLi4vLi4vY29tcGlsZXJfbmV3LmRhcnQnOwppbXBvcnQgJy4uLy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9jb21tb24vY29kZWdlbi5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9jb21tb24vdGFza3MuZGFydCc7CmltcG9ydCAnLi4vLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9kZWZlcnJlZF9sb2FkLmRhcnQnIHNob3cgT3V0cHV0VW5pdDsKaW1wb3J0ICcuLi8uLi9kdW1wX2luZm8uZGFydCc7CmltcG9ydCAnLi4vLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vLi4vaW8vc291cmNlX2luZm9ybWF0aW9uLmRhcnQnOwppbXBvcnQgJy4uLy4uL2pzL2pzLmRhcnQnIGFzIGpzOwppbXBvcnQgJy4uLy4uL2pzX2JhY2tlbmQvY29uc3RhbnRfZW1pdHRlci5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9qc19iYWNrZW5kL25hbWVyLmRhcnQnOwppbXBvcnQgJy4uLy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfbmV3LmRhcnQnIHNob3cgUmVjaXBlRW5jb2RlcjsKaW1wb3J0ICcuLi8uLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uLy4uL3VuaXZlcnNlL2NvZGVnZW5fd29ybGRfYnVpbGRlci5kYXJ0JyBzaG93IENvZGVnZW5Xb3JsZDsKaW1wb3J0ICcuLi8uLi93b3JsZC5kYXJ0JyBzaG93IEpDbG9zZWRXb3JsZDsKaW1wb3J0ICcuLi9qc19lbWl0dGVyLmRhcnQnIHNob3cgRW1pdHRlciwgTW9kdWxhckVtaXR0ZXI7CmltcG9ydCAnLi4vbW9kZWwuZGFydCc7CmltcG9ydCAnLi4vcHJvZ3JhbV9idWlsZGVyL3Byb2dyYW1fYnVpbGRlci5kYXJ0JyBzaG93IFByb2dyYW1CdWlsZGVyOwppbXBvcnQgJ21vZGVsX2VtaXR0ZXIuZGFydCc7CgphYnN0cmFjdCBjbGFzcyBNb2R1bGFyRW1pdHRlckJhc2UgaW1wbGVtZW50cyBNb2R1bGFyRW1pdHRlciB7CiAgZmluYWwgTW9kdWxhck5hbWVyIF9uYW1lcjsKCiAgTW9kdWxhckVtaXR0ZXJCYXNlKHRoaXMuX25hbWVyKTsKCiAganMuUHJvcGVydHlBY2Nlc3MgZ2xvYmFsUHJvcGVydHlBY2Nlc3NGb3JDbGFzcyhDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICBqcy5OYW1lIG5hbWUgPSBfbmFtZXIuZ2xvYmFsUHJvcGVydHlOYW1lRm9yQ2xhc3MoZWxlbWVudCk7CiAgICBqcy5Qcm9wZXJ0eUFjY2VzcyBwYSA9CiAgICAgICAgbmV3IGpzLlByb3BlcnR5QWNjZXNzKF9uYW1lci5yZWFkR2xvYmFsT2JqZWN0Rm9yQ2xhc3MoZWxlbWVudCksIG5hbWUpOwogICAgcmV0dXJuIHBhOwogIH0KCiAganMuUHJvcGVydHlBY2Nlc3MgZ2xvYmFsUHJvcGVydHlBY2Nlc3NGb3JUeXBlKEVudGl0eSBlbGVtZW50KSB7CiAgICBqcy5OYW1lIG5hbWUgPSBfbmFtZXIuZ2xvYmFsUHJvcGVydHlOYW1lRm9yVHlwZShlbGVtZW50KTsKICAgIGpzLlByb3BlcnR5QWNjZXNzIHBhID0KICAgICAgICBuZXcganMuUHJvcGVydHlBY2Nlc3MoX25hbWVyLnJlYWRHbG9iYWxPYmplY3RGb3JUeXBlKGVsZW1lbnQpLCBuYW1lKTsKICAgIHJldHVybiBwYTsKICB9CgogIGpzLlByb3BlcnR5QWNjZXNzIGdsb2JhbFByb3BlcnR5QWNjZXNzRm9yTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBqcy5OYW1lIG5hbWUgPSBfbmFtZXIuZ2xvYmFsUHJvcGVydHlOYW1lRm9yTWVtYmVyKGVsZW1lbnQpOwogICAganMuUHJvcGVydHlBY2Nlc3MgcGEgPQogICAgICAgIG5ldyBqcy5Qcm9wZXJ0eUFjY2VzcyhfbmFtZXIucmVhZEdsb2JhbE9iamVjdEZvck1lbWJlcihlbGVtZW50KSwgbmFtZSk7CiAgICByZXR1cm4gcGE7CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5Qcm9wZXJ0eUFjY2VzcyBjb25zdHJ1Y3RvckFjY2VzcyhDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gZ2xvYmFsUHJvcGVydHlBY2Nlc3NGb3JDbGFzcyhlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGpzLkV4cHJlc3Npb24gaXNvbGF0ZUxhenlJbml0aWFsaXplckFjY2VzcyhGaWVsZEVudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gbmV3IGpzLlByb3BlcnR5QWNjZXNzKF9uYW1lci5yZWFkR2xvYmFsT2JqZWN0Rm9yTWVtYmVyKGVsZW1lbnQpLAogICAgICAgIF9uYW1lci5sYXp5SW5pdGlhbGl6ZXJOYW1lKGVsZW1lbnQpKTsKICB9CgogIEBvdmVycmlkZQogIGpzLlByb3BlcnR5QWNjZXNzIHN0YXRpY0Z1bmN0aW9uQWNjZXNzKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBnbG9iYWxQcm9wZXJ0eUFjY2Vzc0Zvck1lbWJlcihlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGpzLlByb3BlcnR5QWNjZXNzIHN0YXRpY0ZpZWxkQWNjZXNzKEZpZWxkRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBnbG9iYWxQcm9wZXJ0eUFjY2Vzc0Zvck1lbWJlcihlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGpzLlByb3BlcnR5QWNjZXNzIHByb3RvdHlwZUFjY2VzcyhDbGFzc0VudGl0eSBlbGVtZW50LAogICAgICB7Ym9vbCBoYXNCZWVuSW5zdGFudGlhdGVkfSkgewogICAganMuRXhwcmVzc2lvbiBjb25zdHJ1Y3RvciA9CiAgICAgICAgaGFzQmVlbkluc3RhbnRpYXRlZCA/IGNvbnN0cnVjdG9yQWNjZXNzKGVsZW1lbnQpIDogdHlwZUFjY2VzcyhlbGVtZW50KTsKICAgIHJldHVybiBqcy5qcygnIy5wcm90b3R5cGUnLCBjb25zdHJ1Y3Rvcik7CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5FeHByZXNzaW9uIHR5cGVBY2Nlc3MoRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBnbG9iYWxQcm9wZXJ0eUFjY2Vzc0ZvclR5cGUoZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5OYW1lIHR5cGVBY2Nlc3NOZXdSdGkoRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBfbmFtZXIuZ2xvYmFsUHJvcGVydHlOYW1lRm9yVHlwZShlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGpzLk5hbWUgdHlwZVZhcmlhYmxlQWNjZXNzTmV3UnRpKFR5cGVWYXJpYWJsZUVudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gX25hbWVyLmdsb2JhbE5hbWVGb3JJbnRlcmZhY2VUeXBlVmFyaWFibGUoZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5FeHByZXNzaW9uIHN0YXRpY0Nsb3N1cmVBY2Nlc3MoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIG5ldyBqcy5DYWxsKAogICAgICAgIG5ldyBqcy5Qcm9wZXJ0eUFjY2VzcyhfbmFtZXIucmVhZEdsb2JhbE9iamVjdEZvck1lbWJlcihlbGVtZW50KSwKICAgICAgICAgICAgX25hbWVyLnN0YXRpY0Nsb3N1cmVOYW1lKGVsZW1lbnQpKSwKICAgICAgICBjb25zdCBbXSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2VuZXJhdGVFbWJlZGRlZEdsb2JhbEFjY2Vzc1N0cmluZyhTdHJpbmcgZ2xvYmFsKSB7CiAgICAvLyBUT0RPKGZsb2l0c2NoKTogZG9uJ3QgdXNlICdpbml0JyBhcyBnbG9iYWwgZW1iZWRkZXIgc3RvcmFnZS4KICAgIHJldHVybiAnaW5pdC4kZ2xvYmFsJzsKICB9Cn0KCmNsYXNzIE1vZHVsYXJFbWl0dGVySW1wbCBleHRlbmRzIE1vZHVsYXJFbWl0dGVyQmFzZSB7CiAgZmluYWwgQ29kZWdlblJlZ2lzdHJ5IF9yZWdpc3RyeTsKICBmaW5hbCBNb2R1bGFyQ29uc3RhbnRFbWl0dGVyIF9jb25zdGFudEVtaXR0ZXI7CgogIE1vZHVsYXJFbWl0dGVySW1wbCgKICAgICAgTW9kdWxhck5hbWVyIG5hbWVyLCB0aGlzLl9yZWdpc3RyeSwgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMpCiAgICAgIDogX2NvbnN0YW50RW1pdHRlciA9IG5ldyBNb2R1bGFyQ29uc3RhbnRFbWl0dGVyKG9wdGlvbnMpLAogICAgICAgIHN1cGVyKG5hbWVyKTsKCiAgQG92ZXJyaWRlCiAganMuRXhwcmVzc2lvbiBjb25zdGFudFJlZmVyZW5jZShDb25zdGFudFZhbHVlIGNvbnN0YW50KSB7CiAgICBpZiAoY29uc3RhbnQuaXNGdW5jdGlvbikgewogICAgICBGdW5jdGlvbkNvbnN0YW50VmFsdWUgZnVuY3Rpb24gPSBjb25zdGFudDsKICAgICAgcmV0dXJuIHN0YXRpY0Nsb3N1cmVBY2Nlc3MoZnVuY3Rpb24uZWxlbWVudCk7CiAgICB9CiAgICBqcy5FeHByZXNzaW9uIGV4cHJlc3Npb24gPSBfY29uc3RhbnRFbWl0dGVyLmdlbmVyYXRlKGNvbnN0YW50KTsKICAgIGlmIChleHByZXNzaW9uICE9IG51bGwpIHsKICAgICAgcmV0dXJuIGV4cHJlc3Npb247CiAgICB9CiAgICBleHByZXNzaW9uID0KICAgICAgICBuZXcgTW9kdWxhckV4cHJlc3Npb24oTW9kdWxhckV4cHJlc3Npb25LaW5kLmNvbnN0YW50LCBjb25zdGFudCk7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJNb2R1bGFyRXhwcmVzc2lvbihleHByZXNzaW9uKTsKICAgIHJldHVybiBleHByZXNzaW9uOwogIH0KCiAgQG92ZXJyaWRlCiAganMuRXhwcmVzc2lvbiBnZW5lcmF0ZUVtYmVkZGVkR2xvYmFsQWNjZXNzKFN0cmluZyBnbG9iYWwpIHsKICAgIGpzLkV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IG5ldyBNb2R1bGFyRXhwcmVzc2lvbigKICAgICAgICBNb2R1bGFyRXhwcmVzc2lvbktpbmQuZW1iZWRkZWRHbG9iYWxBY2Nlc3MsIGdsb2JhbCk7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJNb2R1bGFyRXhwcmVzc2lvbihleHByZXNzaW9uKTsKICAgIHJldHVybiBleHByZXNzaW9uOwogIH0KfQoKY2xhc3MgRW1pdHRlckltcGwgZXh0ZW5kcyBNb2R1bGFyRW1pdHRlckJhc2UgaW1wbGVtZW50cyBFbWl0dGVyIHsKICBmaW5hbCBEaWFnbm9zdGljUmVwb3J0ZXIgX3JlcG9ydGVyOwogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CiAgZmluYWwgUnVudGltZVR5cGVzRW5jb2RlciBfcnRpRW5jb2RlcjsKICBmaW5hbCBSZWNpcGVFbmNvZGVyIF9ydGlSZWNpcGVFbmNvZGVyOwogIGZpbmFsIENvbXBpbGVyVGFzayBfdGFzazsKICBNb2RlbEVtaXR0ZXIgX2VtaXR0ZXI7CgogIEBvdmVycmlkZQogIFByb2dyYW0gcHJvZ3JhbUZvclRlc3Rpbmc7CgogIEVtaXR0ZXJJbXBsKAogICAgICBDb21waWxlck9wdGlvbnMgb3B0aW9ucywKICAgICAgdGhpcy5fcmVwb3J0ZXIsCiAgICAgIENvbXBpbGVyT3V0cHV0IG91dHB1dFByb3ZpZGVyLAogICAgICBEdW1wSW5mb1Rhc2sgZHVtcEluZm9UYXNrLAogICAgICBOYW1lciBuYW1lciwKICAgICAgdGhpcy5fY2xvc2VkV29ybGQsCiAgICAgIHRoaXMuX3J0aUVuY29kZXIsCiAgICAgIHRoaXMuX3J0aVJlY2lwZUVuY29kZXIsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kgc291cmNlSW5mb3JtYXRpb25TdHJhdGVneSwKICAgICAgdGhpcy5fdGFzaywKICAgICAgYm9vbCBzaG91bGRHZW5lcmF0ZVNvdXJjZU1hcCkKICAgICAgOiBzdXBlcihuYW1lcikgewogICAgX2VtaXR0ZXIgPSBuZXcgTW9kZWxFbWl0dGVyKAogICAgICAgIG9wdGlvbnMsCiAgICAgICAgX3JlcG9ydGVyLAogICAgICAgIG91dHB1dFByb3ZpZGVyLAogICAgICAgIGR1bXBJbmZvVGFzaywKICAgICAgICBuYW1lciwKICAgICAgICBfY2xvc2VkV29ybGQsCiAgICAgICAgX3Rhc2ssCiAgICAgICAgdGhpcywKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5LAogICAgICAgIF9ydGlFbmNvZGVyLAogICAgICAgIF9ydGlSZWNpcGVFbmNvZGVyLAogICAgICAgIHNob3VsZEdlbmVyYXRlU291cmNlTWFwKTsKICB9CgogIEBvdmVycmlkZQogIE5hbWVyIGdldCBfbmFtZXIgPT4gc3VwZXIuX25hbWVyOwoKICBAb3ZlcnJpZGUKICBpbnQgZW1pdFByb2dyYW0oUHJvZ3JhbUJ1aWxkZXIgcHJvZ3JhbUJ1aWxkZXIsIENvZGVnZW5Xb3JsZCBjb2RlZ2VuV29ybGQpIHsKICAgIFByb2dyYW0gcHJvZ3JhbSA9IF90YXNrLm1lYXN1cmVTdWJ0YXNrKCdidWlsZCBwcm9ncmFtJywgKCkgewogICAgICByZXR1cm4gcHJvZ3JhbUJ1aWxkZXIuYnVpbGRQcm9ncmFtKCk7CiAgICB9KTsKICAgIGlmIChyZXRhaW5EYXRhRm9yVGVzdGluZykgewogICAgICBwcm9ncmFtRm9yVGVzdGluZyA9IHByb2dyYW07CiAgICB9CiAgICByZXR1cm4gX3Rhc2subWVhc3VyZVN1YnRhc2soJ2VtaXQgcHJvZ3JhbScsICgpIHsKICAgICAgcmV0dXJuIF9lbWl0dGVyLmVtaXRQcm9ncmFtKHByb2dyYW0sIGNvZGVnZW5Xb3JsZCk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIGpzLkV4cHJlc3Npb24gaW50ZXJjZXB0b3JDbGFzc0FjY2VzcyhDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gZ2xvYmFsUHJvcGVydHlBY2Nlc3NGb3JDbGFzcyhlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNDb25zdGFudElubGluZWRPckFscmVhZHlFbWl0dGVkKENvbnN0YW50VmFsdWUgY29uc3RhbnQpIHsKICAgIHJldHVybiBfZW1pdHRlci5pc0NvbnN0YW50SW5saW5lZE9yQWxyZWFkeUVtaXR0ZWQoY29uc3RhbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGNvbXBhcmVDb25zdGFudHMoQ29uc3RhbnRWYWx1ZSBhLCBDb25zdGFudFZhbHVlIGIpIHsKICAgIHJldHVybiBfZW1pdHRlci5jb21wYXJlQ29uc3RhbnRzKGEsIGIpOwogIH0KCiAgQG92ZXJyaWRlCiAganMuRXhwcmVzc2lvbiBjb25zdGFudFJlZmVyZW5jZShDb25zdGFudFZhbHVlIHZhbHVlKSB7CiAgICByZXR1cm4gX2VtaXR0ZXIuZ2VuZXJhdGVDb25zdGFudFJlZmVyZW5jZSh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5FeHByZXNzaW9uIGdlbmVyYXRlRW1iZWRkZWRHbG9iYWxBY2Nlc3MoU3RyaW5nIGdsb2JhbCkgewogICAgcmV0dXJuIGpzLmpzKGdlbmVyYXRlRW1iZWRkZWRHbG9iYWxBY2Nlc3NTdHJpbmcoZ2xvYmFsKSk7CiAgfQoKICBAb3ZlcnJpZGUKICAvLyBUT0RPKGhlcmh1dCk6IFVzZSBhIHNpbmdsZSBzaGFyZWQgZnVuY3Rpb24uCiAganMuRXhwcmVzc2lvbiBnZW5lcmF0ZUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKCkgewogICAgcmV0dXJuIGpzLmpzKCdmdW5jdGlvbigpIHt9Jyk7CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5FeHByZXNzaW9uIGludGVyY2VwdG9yUHJvdG90eXBlQWNjZXNzKENsYXNzRW50aXR5IGUpIHsKICAgIHJldHVybiBqcy5qcygnIy5wcm90b3R5cGUnLCBpbnRlcmNlcHRvckNsYXNzQWNjZXNzKGUpKTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZW5lcmF0ZWRTaXplKE91dHB1dFVuaXQgdW5pdCkgewogICAgaWYgKF9lbWl0dGVyLm9taXR0ZWRGcmFnbWVudHMuYW55KChmKSA9PiBmLm91dHB1dFVuaXQgPT0gdW5pdCkpIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBGcmFnbWVudCBrZXkgPSBfZW1pdHRlci5vdXRwdXRCdWZmZXJzLmtleXMKICAgICAgICAuZmlyc3RXaGVyZSgoRnJhZ21lbnQgZnJhZ21lbnQpID0+IGZyYWdtZW50Lm91dHB1dFVuaXQgPT0gdW5pdCk7CiAgICByZXR1cm4gX2VtaXR0ZXIub3V0cHV0QnVmZmVyc1trZXldLmxlbmd0aDsKICB9Cn0KgPoATk48ASwBJRwkIiYzHycrITEmLkUdRi06GEYdAT4dASMBSD8bTw8EAUI+G04PBAFKQBtQDwQBDD0yBAEMREwuBAEMQzMEAQw9MwQBDDkkIFAuBAEMLTEEAQwtNgQBDEE/BAEMPhhJMBMEAQw9RBsEAgE2IzEBFkNAFgEMPB8xNAZEHhkGEUk1FwQBDD42PTUXBAIBQiYjKSkcGQEMHQEPHxYlIRMZGB47EiQXIRETGBYPFg8OIxUbIgQBDCQBDE5BLAggIwY1OggEAQw+MgQBDENBBAEMOywEAQw5NgQBDD4+BAEMMTQjBAEMPDwEAQwnRhAGL0kvBAIBPHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvc3RhcnR1cF9lbWl0dGVyL2VtaXR0ZXIuZGFydEBzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19lbWl0dGVyL21ldGFkYXRhX2NvbGxlY3Rvci5kYXJ0ok4vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmpzX2VtaXR0ZXIubWV0YWRhdGFfY29sbGVjdG9yOwoKaW1wb3J0ICdwYWNrYWdlOmpzX2FzdC9zcmMvcHJlY2VkZW5jZS5kYXJ0JyBhcyBqc19wcmVjZWRlbmNlOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgSkVsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2RlZmVycmVkX2xvYWQuZGFydCcgc2hvdyBPdXRwdXRVbml0OwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnIHNob3cgRnVuY3Rpb25FbnRpdHk7CgppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIGFzIGpzQXN0OwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIHNob3cganM7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzLmRhcnQnIHNob3cgUnVudGltZVR5cGVzRW5jb2RlcjsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfbmV3LmRhcnQnIHNob3cgUmVjaXBlRW5jb2RlcjsKaW1wb3J0ICcuLi9qc19tb2RlbC90eXBlX3JlY2lwZS5kYXJ0JyBzaG93IFR5cGVFeHByZXNzaW9uUmVjaXBlOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CgppbXBvcnQgJ2NvZGVfZW1pdHRlcl90YXNrLmRhcnQnIHNob3cgRW1pdHRlcjsKCi8vLyBSZXByZXNlbnRzIGFuIGVudHJ5J3MgcG9zaXRpb24gaW4gb25lIG9mIHRoZSBnbG9iYWwgbWV0YWRhdGEgYXJyYXlzLgovLy8KLy8vIFtfcmNdIGlzIHVzZWQgdG8gY291bnQgdGhlIG51bWJlciBvZiByZWZlcmVuY2VzIG9mIHRoZSB0b2tlbiBpbiB0aGUKLy8vIGFzdCBmb3IgYSBwcm9ncmFtLgovLy8gW3ZhbHVlXSBpcyB0aGUgYWN0dWFsIHBvc2l0aW9uLCBvbmNlIHRoZXkgaGF2ZSBiZWVuIGZpbmFsaXplZC4KYWJzdHJhY3QgY2xhc3MgX01ldGFkYXRhRW50cnkgZXh0ZW5kcyBqc0FzdC5EZWZlcnJlZE51bWJlcgogICAgaW1wbGVtZW50cyBDb21wYXJhYmxlLCBqc0FzdC5SZWZlcmVuY2VDb3VudGVkQXN0Tm9kZSB7CiAganNBc3QuRXhwcmVzc2lvbiBnZXQgZW50cnk7CiAgQG92ZXJyaWRlCiAgaW50IGdldCB2YWx1ZTsKICBpbnQgZ2V0IF9yYzsKCiAgLy8gTWFyayB0aGlzIGVudHJ5IGFzIHNlZW4uIE9uIHRoZSBmaXJzdCB0aW1lIHRoaXMgaXMgc2VlbiwgdGhlIHZpc2l0b3IKICAvLyB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIFtlbnRyeV0gdG8gYWxzbyBtYXJrIHBvdGVudGlhbCBbX01ldGFkYXRhRW50cnldCiAgLy8gaW5zdGFuY2VzIGluIHRoZSBbZW50cnldIGFzIHNlZW4uCiAgQG92ZXJyaWRlCiAgdm9pZCBtYXJrU2Vlbihqc0FzdC5Ub2tlbkNvdW50ZXIgdmlzaXRvcik7Cn0KCmNsYXNzIF9Cb3VuZE1ldGFkYXRhRW50cnkgZXh0ZW5kcyBfTWV0YWRhdGFFbnRyeSB7CiAgaW50IF92YWx1ZSA9IC0xOwogIEBvdmVycmlkZQogIGludCBfcmMgPSAwOwogIEBvdmVycmlkZQogIGZpbmFsIGpzQXN0LkV4cHJlc3Npb24gZW50cnk7CgogIF9Cb3VuZE1ldGFkYXRhRW50cnkodGhpcy5lbnRyeSk7CgogIGJvb2wgZ2V0IGlzRmluYWxpemVkID0+IF92YWx1ZSAhPSAtMTsKCiAgZmluYWxpemUoaW50IHZhbHVlKSB7CiAgICBhc3NlcnQoIWlzRmluYWxpemVkKTsKICAgIF92YWx1ZSA9IHZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCB2YWx1ZSB7CiAgICBhc3NlcnQoaXNGaW5hbGl6ZWQpOwogICAgcmV0dXJuIF92YWx1ZTsKICB9CgogIGJvb2wgZ2V0IGlzVXNlZCA9PiBfcmMgPiAwOwoKICBAb3ZlcnJpZGUKICB2b2lkIG1hcmtTZWVuKGpzQXN0LkJhc2VWaXNpdG9yIHZpc2l0b3IpIHsKICAgIF9yYysrOwogICAgaWYgKF9yYyA9PSAxKSBlbnRyeS5hY2NlcHQodmlzaXRvcik7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgY29tcGFyZVRvKGNvdmFyaWFudCBfTWV0YWRhdGFFbnRyeSBvdGhlcikgPT4gb3RoZXIuX3JjIC0gdGhpcy5fcmM7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdfQm91bmRNZXRhZGF0YUVudHJ5KCRoYXNoQ29kZSxyYz0kX3JjLF92YWx1ZT0kX3ZhbHVlKSc7Cn0KCmNsYXNzIF9NZXRhZGF0YUxpc3QgZXh0ZW5kcyBqc0FzdC5EZWZlcnJlZEV4cHJlc3Npb24gewogIGpzQXN0LkV4cHJlc3Npb24gX3ZhbHVlOwoKICB2b2lkIHNldEV4cHJlc3Npb24oanNBc3QuRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgYXNzZXJ0KF92YWx1ZSA9PSBudWxsKTsKICAgIGFzc2VydCh2YWx1ZS5wcmVjZWRlbmNlTGV2ZWwgPT0gdGhpcy5wcmVjZWRlbmNlTGV2ZWwpOwogICAgX3ZhbHVlID0gdmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIGdldCB2YWx1ZSB7CiAgICBhc3NlcnQoX3ZhbHVlICE9IG51bGwpOwogICAgcmV0dXJuIF92YWx1ZTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgcHJlY2VkZW5jZUxldmVsID0+IGpzX3ByZWNlZGVuY2UuUFJJTUFSWTsKfQoKY2xhc3MgTWV0YWRhdGFDb2xsZWN0b3IgaW1wbGVtZW50cyBqc0FzdC5Ub2tlbkZpbmFsaXplciB7CiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwogIGZpbmFsIERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlcjsKICBmaW5hbCBFbWl0dGVyIF9lbWl0dGVyOwogIGZpbmFsIFJ1bnRpbWVUeXBlc0VuY29kZXIgX3J0aUVuY29kZXI7CiAgZmluYWwgUmVjaXBlRW5jb2RlciBfcnRpUmVjaXBlRW5jb2RlcjsKICBmaW5hbCBKRWxlbWVudEVudmlyb25tZW50IF9lbGVtZW50RW52aXJvbm1lbnQ7CgogIC8vLyBBIG1hcCB3aXRoIGEgdG9rZW4gcGVyIG91dHB1dCB1bml0IGZvciBhIGxpc3Qgb2YgZXhwcmVzc2lvbnMgdGhhdAogIC8vLyByZXByZXNlbnQgbWV0YWRhdGEsIHBhcmFtZXRlciBuYW1lcyBhbmQgdHlwZSB2YXJpYWJsZSB0eXBlcy4KICBNYXA8T3V0cHV0VW5pdCwgX01ldGFkYXRhTGlzdD4gX21ldGFkYXRhVG9rZW5zID0KICAgICAgbmV3IE1hcDxPdXRwdXRVbml0LCBfTWV0YWRhdGFMaXN0PigpOwoKICBqc0FzdC5FeHByZXNzaW9uIGdldE1ldGFkYXRhRm9yT3V0cHV0VW5pdChPdXRwdXRVbml0IG91dHB1dFVuaXQpIHsKICAgIHJldHVybiBfbWV0YWRhdGFUb2tlbnMucHV0SWZBYnNlbnQob3V0cHV0VW5pdCwgKCkgPT4gbmV3IF9NZXRhZGF0YUxpc3QoKSk7CiAgfQoKICAvLy8gQSBtYXAgdXNlZCB0byBjYW5vbmljYWxpemUgdGhlIGVudHJpZXMgb2YgbWV0YWRhdGEuCiAgTWFwPE91dHB1dFVuaXQsIE1hcDxTdHJpbmcsIF9Cb3VuZE1ldGFkYXRhRW50cnk+PiBfbWV0YWRhdGFNYXAgPQogICAgICA8T3V0cHV0VW5pdCwgTWFwPFN0cmluZywgX0JvdW5kTWV0YWRhdGFFbnRyeT4+e307CgogIC8vLyBBIG1hcCB3aXRoIGEgdG9rZW4gZm9yIGEgbGlzdHMgb2YgSlMgZXhwcmVzc2lvbnMsIG9uZSB0b2tlbiBmb3IgZWFjaAogIC8vLyBvdXRwdXQgdW5pdC4gT25jZSBmaW5hbGl6ZWQsIHRoZSBlbnRyaWVzIHJlcHJlc2VudCB0eXBlcyBpbmNsdWRpbmcKICAvLy8gZnVuY3Rpb24gdHlwZXMgYW5kIHR5cGVkZWZzLgogIE1hcDxPdXRwdXRVbml0LCBfTWV0YWRhdGFMaXN0PiBfdHlwZXNUb2tlbnMgPQogICAgICBuZXcgTWFwPE91dHB1dFVuaXQsIF9NZXRhZGF0YUxpc3Q+KCk7CgogIGpzQXN0LkV4cHJlc3Npb24gZ2V0VHlwZXNGb3JPdXRwdXRVbml0KE91dHB1dFVuaXQgb3V0cHV0VW5pdCkgewogICAgcmV0dXJuIF90eXBlc1Rva2Vucy5wdXRJZkFic2VudChvdXRwdXRVbml0LCAoKSA9PiBuZXcgX01ldGFkYXRhTGlzdCgpKTsKICB9CgogIC8vLyBBIG1hcCB1c2VkIHRvIGNhbm9uaWNhbGl6ZSB0aGUgZW50cmllcyBvZiB0eXBlcy4KICBNYXA8T3V0cHV0VW5pdCwgTWFwPERhcnRUeXBlLCBfQm91bmRNZXRhZGF0YUVudHJ5Pj4gX3R5cGVzTWFwID0KICAgICAgPE91dHB1dFVuaXQsIE1hcDxEYXJ0VHlwZSwgX0JvdW5kTWV0YWRhdGFFbnRyeT4+e307CgogIE1ldGFkYXRhQ29sbGVjdG9yKHRoaXMuX29wdGlvbnMsIHRoaXMucmVwb3J0ZXIsIHRoaXMuX2VtaXR0ZXIsCiAgICAgIHRoaXMuX3J0aUVuY29kZXIsIHRoaXMuX3J0aVJlY2lwZUVuY29kZXIsIHRoaXMuX2VsZW1lbnRFbnZpcm9ubWVudCk7CgogIExpc3Q8anNBc3QuRGVmZXJyZWROdW1iZXI+IHJlaWZ5RGVmYXVsdEFyZ3VtZW50cygKICAgICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24sIE91dHB1dFVuaXQgb3V0cHV0VW5pdCkgewogICAgLy8gVE9ETyhzcmEpOiBUaGVzZSBhcmUgc3RvcmVkIG9uIHRoZSBJbnN0YW5jZU1ldGhvZCBvciBTdGF0aWNEYXJ0TWV0aG9kLgogICAgTGlzdDxqc0FzdC5EZWZlcnJlZE51bWJlcj4gZGVmYXVsdFZhbHVlcyA9IDxqc0FzdC5EZWZlcnJlZE51bWJlcj5bXTsKICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaFBhcmFtZXRlcihmdW5jdGlvbiwKICAgICAgICAoXywgU3RyaW5nIG5hbWUsIENvbnN0YW50VmFsdWUgY29uc3RhbnQpIHsKICAgICAgaWYgKGNvbnN0YW50ID09IG51bGwpIHJldHVybjsKICAgICAganNBc3QuRXhwcmVzc2lvbiBleHByZXNzaW9uID0gX2VtaXR0ZXIuY29uc3RhbnRSZWZlcmVuY2UoY29uc3RhbnQpOwogICAgICBkZWZhdWx0VmFsdWVzLmFkZChfYWRkR2xvYmFsTWV0YWRhdGEoZXhwcmVzc2lvbiwgb3V0cHV0VW5pdCkpOwogICAgfSk7CiAgICByZXR1cm4gZGVmYXVsdFZhbHVlczsKICB9CgogIGpzQXN0LkV4cHJlc3Npb24gcmVpZnlUeXBlKERhcnRUeXBlIHR5cGUsIE91dHB1dFVuaXQgb3V0cHV0VW5pdCkgewogICAgcmV0dXJuIGFkZFR5cGVJbk91dHB1dFVuaXQodHlwZSwgb3V0cHV0VW5pdCk7CiAgfQoKICBqc0FzdC5FeHByZXNzaW9uIHJlaWZ5TmFtZShTdHJpbmcgbmFtZSwgT3V0cHV0VW5pdCBvdXRwdXRVbml0KSB7CiAgICByZXR1cm4gX2FkZEdsb2JhbE1ldGFkYXRhKGpzLnN0cmluZyhuYW1lKSwgb3V0cHV0VW5pdCk7CiAgfQoKICBqc0FzdC5FeHByZXNzaW9uIHJlaWZ5RXhwcmVzc2lvbigKICAgICAganNBc3QuRXhwcmVzc2lvbiBleHByZXNzaW9uLCBPdXRwdXRVbml0IG91dHB1dFVuaXQpIHsKICAgIHJldHVybiBfYWRkR2xvYmFsTWV0YWRhdGEoZXhwcmVzc2lvbiwgb3V0cHV0VW5pdCk7CiAgfQoKICBfTWV0YWRhdGFFbnRyeSBfYWRkR2xvYmFsTWV0YWRhdGEoanNBc3QuTm9kZSBub2RlLCBPdXRwdXRVbml0IG91dHB1dFVuaXQpIHsKICAgIFN0cmluZyBuYW1lVG9LZXkoanNBc3QuTmFtZSBuYW1lKSA9PiAiJHtuYW1lLmtleX0iOwogICAgU3RyaW5nIHByaW50ZWQgPSBqc0FzdC5wcmV0dHlQcmludChub2RlLAogICAgICAgIGVuYWJsZU1pbmlmaWNhdGlvbjogX29wdGlvbnMuZW5hYmxlTWluaWZpY2F0aW9uLAogICAgICAgIHJlbmFtZXJGb3JOYW1lczogbmFtZVRvS2V5KTsKICAgIF9tZXRhZGF0YU1hcFtvdXRwdXRVbml0XSA/Pz0gbmV3IE1hcDxTdHJpbmcsIF9Cb3VuZE1ldGFkYXRhRW50cnk+KCk7CiAgICByZXR1cm4gX21ldGFkYXRhTWFwW291dHB1dFVuaXRdLnB1dElmQWJzZW50KHByaW50ZWQsICgpIHsKICAgICAgcmV0dXJuIG5ldyBfQm91bmRNZXRhZGF0YUVudHJ5KG5vZGUpOwogICAgfSk7CiAgfQoKICBqc0FzdC5FeHByZXNzaW9uIF9jb21wdXRlVHlwZVJlcHJlc2VudGF0aW9uKERhcnRUeXBlIHR5cGUpIHsKICAgIGpzQXN0LkV4cHJlc3Npb24gcmVwcmVzZW50YXRpb24gPQogICAgICAgIF9ydGlFbmNvZGVyLmdldFR5cGVSZXByZXNlbnRhdGlvbihfZW1pdHRlciwgdHlwZSwgKHZhcmlhYmxlKSB7CiAgICAgIGZhaWxlZEF0KAogICAgICAgICAgTk9fTE9DQVRJT05fU1BBTk5BQkxFLAogICAgICAgICAgIlR5cGUgcmVwcmVzZW50YXRpb24gZm9yIHR5cGUgdmFyaWFibGUgJHZhcmlhYmxlIGluICIKICAgICAgICAgICIkdHlwZSBpcyBub3Qgc3VwcG9ydGVkLiIpOwogICAgICByZXR1cm4ganNBc3QuTGl0ZXJhbE51bGwoKTsKICAgIH0sIChUeXBlZGVmVHlwZSB0eXBlZGVmKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwoKICAgIGlmIChyZXByZXNlbnRhdGlvbiBpcyBqc0FzdC5MaXRlcmFsU3RyaW5nKSB7CiAgICAgIC8vIFdlIGRvbid0IHdhbnQgdGhlIHJlcHJlc2VudGF0aW9uIHRvIGJlIGEgc3RyaW5nLCBzaW5jZSB3ZSB1c2UKICAgICAgLy8gc3RyaW5ncyBhcyBpbmRpY2F0b3IgZm9yIG5vbi1pbml0aWFsaXplZCB0eXBlcyBpbiB0aGUgbGF6eSBlbWl0dGVyLgogICAgICByZXBvcnRlci5pbnRlcm5hbEVycm9yKAogICAgICAgICAgTk9fTE9DQVRJT05fU1BBTk5BQkxFLCAncmVpZmllZCB0eXBlcyBzaG91bGQgbm90IGJlIHN0cmluZ3MuJyk7CiAgICB9CgogICAgcmV0dXJuIHJlcHJlc2VudGF0aW9uOwogIH0KCiAganNBc3QuRXhwcmVzc2lvbiBfY29tcHV0ZVR5cGVSZXByZXNlbnRhdGlvbk5ld1J0aShEYXJ0VHlwZSB0eXBlKSB7CiAgICByZXR1cm4gX3J0aVJlY2lwZUVuY29kZXIuZW5jb2RlR3JvdW5kUmVjaXBlKAogICAgICAgIF9lbWl0dGVyLCBUeXBlRXhwcmVzc2lvblJlY2lwZSh0eXBlKSk7CiAgfQoKICBqc0FzdC5FeHByZXNzaW9uIGFkZFR5cGVJbk91dHB1dFVuaXQoRGFydFR5cGUgdHlwZSwgT3V0cHV0VW5pdCBvdXRwdXRVbml0KSB7CiAgICBfdHlwZXNNYXBbb3V0cHV0VW5pdF0gPz89IG5ldyBNYXA8RGFydFR5cGUsIF9Cb3VuZE1ldGFkYXRhRW50cnk+KCk7CiAgICByZXR1cm4gX3R5cGVzTWFwW291dHB1dFVuaXRdLnB1dElmQWJzZW50KHR5cGUsICgpIHsKICAgICAgaWYgKF9vcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpIHsKICAgICAgICByZXR1cm4gbmV3IF9Cb3VuZE1ldGFkYXRhRW50cnkoX2NvbXB1dGVUeXBlUmVwcmVzZW50YXRpb25OZXdSdGkodHlwZSkpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBuZXcgX0JvdW5kTWV0YWRhdGFFbnRyeShfY29tcHV0ZVR5cGVSZXByZXNlbnRhdGlvbih0eXBlKSk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmaW5hbGl6ZVRva2VucygpIHsKICAgIHZvaWQgY291bnRUb2tlbnNJblR5cGVzKEl0ZXJhYmxlPF9Cb3VuZE1ldGFkYXRhRW50cnk+IGVudHJpZXMpIHsKICAgICAganNBc3QuVG9rZW5Db3VudGVyIGNvdW50ZXIgPSBuZXcganNBc3QuVG9rZW5Db3VudGVyKCk7CiAgICAgIGVudHJpZXMKICAgICAgICAgIC53aGVyZSgoX0JvdW5kTWV0YWRhdGFFbnRyeSBlKSA9PiBlLl9yYyA+IDApCiAgICAgICAgICAubWFwKChfQm91bmRNZXRhZGF0YUVudHJ5IGUpID0+IGUuZW50cnkpCiAgICAgICAgICAuZm9yRWFjaChjb3VudGVyLmNvdW50VG9rZW5zKTsKICAgIH0KCiAgICBqc0FzdC5BcnJheUluaXRpYWxpemVyIGZpbmFsaXplTWFwKE1hcDxkeW5hbWljLCBfQm91bmRNZXRhZGF0YUVudHJ5PiBtYXApIHsKICAgICAgYm9vbCBpc1VzZWQoX0JvdW5kTWV0YWRhdGFFbnRyeSBlbnRyeSkgPT4gZW50cnkuaXNVc2VkOwogICAgICBMaXN0PF9Cb3VuZE1ldGFkYXRhRW50cnk+IGVudHJpZXMgPSBtYXAudmFsdWVzLndoZXJlKGlzVXNlZCkudG9MaXN0KCk7CiAgICAgIGVudHJpZXMuc29ydCgpOwoKICAgICAgLy8gVE9ETyhoZXJodXQpOiBCdWNrZXQgZW50cmllcyBieSBpbmRleCBsZW5ndGggYW5kIHVzZSBhIHN0YWJsZQogICAgICAvLyAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbiB3aXRoaW4gYnVja2V0cy4KICAgICAgaW50IGNvdW50ID0gMDsKICAgICAgZm9yIChfQm91bmRNZXRhZGF0YUVudHJ5IGVudHJ5IGluIGVudHJpZXMpIHsKICAgICAgICBlbnRyeS5maW5hbGl6ZShjb3VudCsrKTsKICAgICAgfQoKICAgICAgTGlzdDxqc0FzdC5Ob2RlPiB2YWx1ZXMgPQogICAgICAgICAgZW50cmllcy5tYXAoKF9Cb3VuZE1ldGFkYXRhRW50cnkgZSkgPT4gZS5lbnRyeSkudG9MaXN0KCk7CgogICAgICByZXR1cm4gbmV3IGpzQXN0LkFycmF5SW5pdGlhbGl6ZXIodmFsdWVzKTsKICAgIH0KCiAgICBfbWV0YWRhdGFUb2tlbnMuZm9yRWFjaCgoT3V0cHV0VW5pdCBvdXRwdXRVbml0LCBfTWV0YWRhdGFMaXN0IHRva2VuKSB7CiAgICAgIE1hcCBtZXRhZGF0YU1hcCA9IF9tZXRhZGF0YU1hcFtvdXRwdXRVbml0XTsKICAgICAgaWYgKG1ldGFkYXRhTWFwICE9IG51bGwpIHsKICAgICAgICB0b2tlbi5zZXRFeHByZXNzaW9uKGZpbmFsaXplTWFwKG1ldGFkYXRhTWFwKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdG9rZW4uc2V0RXhwcmVzc2lvbihuZXcganNBc3QuQXJyYXlJbml0aWFsaXplcihbXSkpOwogICAgICB9CiAgICB9KTsKCiAgICBfdHlwZXNUb2tlbnMuZm9yRWFjaCgoT3V0cHV0VW5pdCBvdXRwdXRVbml0LCBfTWV0YWRhdGFMaXN0IHRva2VuKSB7CiAgICAgIE1hcCB0eXBlc01hcCA9IF90eXBlc01hcFtvdXRwdXRVbml0XTsKICAgICAgaWYgKHR5cGVzTWFwICE9IG51bGwpIHsKICAgICAgICBjb3VudFRva2Vuc0luVHlwZXModHlwZXNNYXAudmFsdWVzKTsKICAgICAgICB0b2tlbi5zZXRFeHByZXNzaW9uKGZpbmFsaXplTWFwKHR5cGVzTWFwKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdG9rZW4uc2V0RXhwcmVzc2lvbihuZXcganNBc3QuQXJyYXlJbml0aWFsaXplcihbXSkpOwogICAgICB9CiAgICB9KTsKICB9Cn0KgQcATk48AS8BPgEZOyMwOAEkISEgREJBGgEuAUkESBdDOzseDBEPAUpMJwwtAgEzEwwPDCABIwEoARgaFAQBDBIZEwQBHgEMLQspBAEMSQEMUAIBNxsBLxw7FAQBDB8cEwQBDDQCAToiJRopKTEBSEMzLAFFTwQBOkM4AUtJIzAsAUJMBAE3QjoBQUsBNDhOSTMzJEpFCBoEAUUyBAFDPAQBJDw3BAFOOC05JUk+LAgEAT8mRxAhQCYiHxQIATFHTR5KBgEbBAFFMS8EAU9IOCdQD0oICAQBDBpFPQ43MykGAVA+TRYBRzQVMyEIASBEATEGAUsyITcPPQgIAUgsHi00Dz0ICAQCATdwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL21ldGFkYXRhX2NvbGxlY3Rvci5kYXJ0M3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2VtaXR0ZXIvbW9kZWwuZGFydMAAUQMvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLm5ld19qc19lbWl0dGVyLm1vZGVsOwoKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnIHNob3cgQ29uc3RhbnRWYWx1ZTsKaW1wb3J0ICcuLi9kZWZlcnJlZF9sb2FkLmRhcnQnIHNob3cgT3V0cHV0VW5pdDsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqcyBzaG93IEV4cHJlc3Npb24sIE5hbWUsIFN0YXRlbWVudCwgVG9rZW5GaW5hbGl6ZXI7CmltcG9ydCAnLi4vanMvanNfZGVidWcuZGFydCcgYXMganMgc2hvdyBub2RlVG9TdHJpbmc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzX2NvZGVnZW4uZGFydCc7CmltcG9ydCAnanNfZW1pdHRlci5kYXJ0JyBzaG93IE1ldGFkYXRhQ29sbGVjdG9yOwoKY2xhc3MgUHJvZ3JhbSB7CiAgZmluYWwgTGlzdDxGcmFnbWVudD4gZnJhZ21lbnRzOwogIGZpbmFsIExpc3Q8SG9sZGVyPiBob2xkZXJzOwogIGZpbmFsIGJvb2wgb3V0cHV0Q29udGFpbnNDb25zdGFudExpc3Q7CiAgZmluYWwgYm9vbCBuZWVkc05hdGl2ZVN1cHBvcnQ7CiAgZmluYWwgYm9vbCBoYXNTb2Z0RGVmZXJyZWRDbGFzc2VzOwoKICAvLy8gQSBtYXAgZnJvbSBsb2FkIGlkIHRvIHRoZSBsaXN0IG9mIGZyYWdtZW50cyB0aGF0IG5lZWQgdG8gYmUgbG9hZGVkLgogIGZpbmFsIE1hcDxTdHJpbmcsIExpc3Q8RnJhZ21lbnQ+PiBsb2FkTWFwOwoKICAvLyBJZiB0aGlzIGZpZWxkIGlzIG5vdCBgbnVsbGAgdGhlbiBpdHMgdmFsdWUgbXVzdCBiZSBlbWl0dGVkIGluIHRoZSBlbWJlZGRlZAogIC8vIGdsb2JhbCBgVFlQRV9UT19JTlRFUkNFUFRPUl9NQVBgLiBUaGUgbWFwIHJlZmVyZW5jZXMgY29uc3RhbnRzIGFuZCBjbGFzc2VzLgogIGZpbmFsIGpzLkV4cHJlc3Npb24gdHlwZVRvSW50ZXJjZXB0b3JNYXA7CgogIC8vIFRPRE8oZmxvaXRzY2gpOiB3ZSBzaG91bGQgc3RvcmUgdGhlIG1ldGFkYXRhIGRpcmVjdGx5IGluc3RlYWQgb2Ygc3RvcmluZwogIC8vIHRoZSBjb2xsZWN0b3IuIEhvd2V2ZXIsIHRoZSBvbGQgZW1pdHRlciBzdGlsbCB1cGRhdGVzIHRoZSBkYXRhLgogIGZpbmFsIE1ldGFkYXRhQ29sbGVjdG9yIF9tZXRhZGF0YUNvbGxlY3RvcjsKICBmaW5hbCBJdGVyYWJsZTxqcy5Ub2tlbkZpbmFsaXplcj4gZmluYWxpemVyczsKCiAgUHJvZ3JhbSh0aGlzLmZyYWdtZW50cywgdGhpcy5ob2xkZXJzLCB0aGlzLmxvYWRNYXAsIHRoaXMudHlwZVRvSW50ZXJjZXB0b3JNYXAsCiAgICAgIHRoaXMuX21ldGFkYXRhQ29sbGVjdG9yLCB0aGlzLmZpbmFsaXplcnMsCiAgICAgIHt0aGlzLm5lZWRzTmF0aXZlU3VwcG9ydCwKICAgICAgdGhpcy5vdXRwdXRDb250YWluc0NvbnN0YW50TGlzdCwKICAgICAgdGhpcy5oYXNTb2Z0RGVmZXJyZWRDbGFzc2VzfSkgewogICAgYXNzZXJ0KG5lZWRzTmF0aXZlU3VwcG9ydCAhPSBudWxsKTsKICAgIGFzc2VydChvdXRwdXRDb250YWluc0NvbnN0YW50TGlzdCAhPSBudWxsKTsKICB9CgogIC8vLyBBY2Nlc3NvciBmb3IgdGhlIGxpc3Qgb2YgbWV0YWRhdGEgZW50cmllcyBmb3IgYSBnaXZlbiBbT3V0cHV0VW5pdF0uCiAgLy8vCiAgLy8vIFRoZXJlIGlzIG9uZSBsaXN0IGZvciBlYWNoIG91dHB1dCB1bml0LiBUaGUgbGlzdCBiZWxvbmdpbmcgdG8gdGhlIG1haW4KICAvLy8gdW5pdCBtdXN0IGJlIGVtaXR0ZWQgaW4gdGhlIGBNRVRBREFUQWAgZW1iZWRkZWQgZ2xvYmFsLgogIC8vLyBUaGUgbGlzdCByZWZlcmVuY2VzIGNvbnN0YW50cyBhbmQgbXVzdCBoZW5jZSBiZSBlbWl0dGVkIGFmdGVyIGNvbnN0YW50cwogIC8vLyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQuCiAgLy8vCiAgLy8vIE5vdGU6IHRoZSBtZXRhZGF0YSBpcyBkZXJpdmVkIGZyb20gdGhlIHRhc2sncyBgbWV0YWRhdGFDb2xsZWN0b3JgLiBUaGUKICAvLy8gbGlzdCBtdXN0IG5vdCBiZSBlbWl0dGVkIGJlZm9yZSBhbGwgb3BlcmF0aW9ucyBvbiBpdCBhcmUgZG9uZS4gRm9yCiAgLy8vIGV4YW1wbGUsIHRoZSBvbGQgZW1pdHRlciBnZW5lcmF0ZXMgbWV0YWRhdGEgd2hlbiBlbWl0dGluZyByZWZsZWN0aW9uCiAgLy8vIGRhdGEuCiAganMuRXhwcmVzc2lvbiBtZXRhZGF0YUZvck91dHB1dFVuaXQoT3V0cHV0VW5pdCB1bml0KSB7CiAgICByZXR1cm4gX21ldGFkYXRhQ29sbGVjdG9yLmdldE1ldGFkYXRhRm9yT3V0cHV0VW5pdCh1bml0KTsKICB9CgogIC8vLyBBY2Nlc3NvciBmb3IgdGhlIGxpc3Qgb2YgdHlwZSBlbnRyaWVzIGZvciBhIGdpdmVuIFtPdXRwdXRVbml0XS4KICAvLy8KICAvLy8gVGhlcmUgaXMgb25lIGxpc3QgZm9yIGVhY2ggb3V0cHV0IHVuaXQuIFRoZSBsaXN0IGJlbG9uZ2luZyB0byB0aGUgbWFpbgogIC8vLyB1bml0IG11c3QgYmUgZW1pdHRlZCBpbiB0aGUgYFRZUEVTYCBlbWJlZGRlZCBnbG9iYWwuIFRoZSBsaXN0IHJlZmVyZW5jZXMKICAvLy8gY29uc3RhbnRzIGFuZCBtdXN0IGhlbmNlIGJlIGVtaXR0ZWQgYWZ0ZXIgY29uc3RhbnRzIGhhdmUgYmVlbiBpbml0aWFsaXplZC4KICAvLy8KICAvLy8gTm90ZTogdGhlIG1ldGFkYXRhIGlzIGRlcml2ZWQgZnJvbSB0aGUgdGFzaydzIGBtZXRhZGF0YUNvbGxlY3RvcmAuIFRoZQogIC8vLyBsaXN0IGlzIG9ubHkgYSBwbGFjZWhvbGRlciBhbmQgd2lsbCBiZSBmaWxsZWQgaW4gb25jZSBtZXRhZGF0YSBjb2xsZWN0aW9uCiAgLy8vIGlzIGZpbmFsaXplZC4KICBqcy5FeHByZXNzaW9uIG1ldGFkYXRhVHlwZXNGb3JPdXRwdXRVbml0KE91dHB1dFVuaXQgdW5pdCkgewogICAgcmV0dXJuIF9tZXRhZGF0YUNvbGxlY3Rvci5nZXRUeXBlc0Zvck91dHB1dFVuaXQodW5pdCk7CiAgfQoKICBib29sIGdldCBpc1NwbGl0ID0+IGZyYWdtZW50cy5sZW5ndGggPiAxOwogIEl0ZXJhYmxlPEZyYWdtZW50PiBnZXQgZGVmZXJyZWRGcmFnbWVudHMgPT4gZnJhZ21lbnRzLnNraXAoMSk7CiAgRnJhZ21lbnQgZ2V0IG1haW5GcmFnbWVudCA9PiBmcmFnbWVudHMuZmlyc3Q7Cn0KCi8vLyBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBKYXZhU2NyaXB0IG9iamVjdCB0aGF0IGNvbnRhaW5zIHN0YXRpYyBzdGF0ZSwgbGlrZQovLy8gY2xhc3NlcyBvciBmdW5jdGlvbnMuCmNsYXNzIEhvbGRlciB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgZmluYWwgaW50IGluZGV4OwogIGZpbmFsIGJvb2wgaXNTdGF0aWNTdGF0ZUhvbGRlcjsKICBmaW5hbCBib29sIGlzQ29uc3RhbnRzSG9sZGVyOwoKICBIb2xkZXIodGhpcy5uYW1lLCB0aGlzLmluZGV4LAogICAgICB7dGhpcy5pc1N0YXRpY1N0YXRlSG9sZGVyOiBmYWxzZSwgdGhpcy5pc0NvbnN0YW50c0hvbGRlcjogZmFsc2V9KTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdIb2xkZXIobmFtZT0ke25hbWV9KSc7CiAgfQp9CgovLy8gVGhpcyBjbGFzcyByZXByZXNlbnRzIG9uZSBvdXRwdXQgZmlsZS4KLy8vCi8vLyBJZiBubyBsaWJyYXJ5IGlzIGRlZmVycmVkLCB0aGVyZSBpcyBvbmx5IG9uZSBbRnJhZ21lbnRdIG9mIHR5cGUKLy8vIFtNYWluRnJhZ21lbnRdLgphYnN0cmFjdCBjbGFzcyBGcmFnbWVudCB7CiAgLy8vIFRoZSBvdXRwdXRVbml0IHNob3VsZCBvbmx5IGJlIHVzZWQgZHVyaW5nIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbW9kZWwuCiAgLy8vIFVzZXMgaW5kaWNhdGUgbWlzc2luZyBpbmZvcm1hdGlvbiBpbiB0aGUgbW9kZWwuCiAgZmluYWwgT3V0cHV0VW5pdCBvdXRwdXRVbml0OwoKICBmaW5hbCBMaXN0PExpYnJhcnk+IGxpYnJhcmllczsKICBmaW5hbCBMaXN0PENvbnN0YW50PiBjb25zdGFudHM7CiAgLy8gVE9ETyhmbG9pdHNjaCk6IHNob3VsZCB3ZSBtb3ZlIHN0YXRpYyBmaWVsZHMgaW50byBsaWJyYXJpZXMgb3IgY2xhc3Nlcz8KICBmaW5hbCBMaXN0PFN0YXRpY0ZpZWxkPiBzdGF0aWNOb25GaW5hbEZpZWxkczsKICAvLyBUT0RPKGZsb2l0c2NoKTogbGF6eSBmaWVsZHMgc2hvdWxkIGJlIGluIHRoZWlyIGxpYnJhcnkgb3IgZXZlbiBjbGFzcy4KICBmaW5hbCBMaXN0PFN0YXRpY0ZpZWxkPiBzdGF0aWNMYXppbHlJbml0aWFsaXplZEZpZWxkczsKCiAgLy8vIE91dHB1dCBmaWxlIG5hbWUgd2l0aG91dCBleHRlbnNpb24uCiAgZmluYWwgU3RyaW5nIG91dHB1dEZpbGVOYW1lOwoKICBGcmFnbWVudCgKICAgICAgdGhpcy5vdXRwdXRVbml0LAogICAgICB0aGlzLm91dHB1dEZpbGVOYW1lLAogICAgICB0aGlzLmxpYnJhcmllcywKICAgICAgdGhpcy5zdGF0aWNOb25GaW5hbEZpZWxkcywKICAgICAgdGhpcy5zdGF0aWNMYXppbHlJbml0aWFsaXplZEZpZWxkcywKICAgICAgdGhpcy5jb25zdGFudHMpOwoKICBib29sIGdldCBpc01haW5GcmFnbWVudDsKfQoKLy8vIFRoZSBtYWluIG91dHB1dCBmaWxlLgovLy8KLy8vIFRoaXMgY29kZSBlbWl0dGVkIGZyb20gdGhpcyBbRnJhZ21lbnRdIG11c3QgYmUgbG9hZGVkIGZpcnN0LiBJdCBjYW4gdGhlbiBsb2FkCi8vLyBvdGhlciBbRGVmZXJyZWRGcmFnbWVudF1zLgpjbGFzcyBNYWluRnJhZ21lbnQgZXh0ZW5kcyBGcmFnbWVudCB7CiAgZmluYWwganMuU3RhdGVtZW50IGludm9rZU1haW47CgogIE1haW5GcmFnbWVudCgKICAgICAgT3V0cHV0VW5pdCBvdXRwdXRVbml0LAogICAgICBTdHJpbmcgb3V0cHV0RmlsZU5hbWUsCiAgICAgIHRoaXMuaW52b2tlTWFpbiwKICAgICAgTGlzdDxMaWJyYXJ5PiBsaWJyYXJpZXMsCiAgICAgIExpc3Q8U3RhdGljRmllbGQ+IHN0YXRpY05vbkZpbmFsRmllbGRzLAogICAgICBMaXN0PFN0YXRpY0ZpZWxkPiBzdGF0aWNMYXppbHlJbml0aWFsaXplZEZpZWxkcywKICAgICAgTGlzdDxDb25zdGFudD4gY29uc3RhbnRzKQogICAgICA6IHN1cGVyKG91dHB1dFVuaXQsIG91dHB1dEZpbGVOYW1lLCBsaWJyYXJpZXMsIHN0YXRpY05vbkZpbmFsRmllbGRzLAogICAgICAgICAgICBzdGF0aWNMYXppbHlJbml0aWFsaXplZEZpZWxkcywgY29uc3RhbnRzKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNNYWluRnJhZ21lbnQgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdNYWluRnJhZ21lbnQoKSc7CiAgfQp9CgovLy8gQW4gb3V0cHV0IChmaWxlKSBmb3IgZGVmZXJyZWQgY29kZS4KY2xhc3MgRGVmZXJyZWRGcmFnbWVudCBleHRlbmRzIEZyYWdtZW50IHsKICBmaW5hbCBTdHJpbmcgbmFtZTsKCiAgRGVmZXJyZWRGcmFnbWVudCgKICAgICAgT3V0cHV0VW5pdCBvdXRwdXRVbml0LAogICAgICBTdHJpbmcgb3V0cHV0RmlsZU5hbWUsCiAgICAgIHRoaXMubmFtZSwKICAgICAgTGlzdDxMaWJyYXJ5PiBsaWJyYXJpZXMsCiAgICAgIExpc3Q8U3RhdGljRmllbGQ+IHN0YXRpY05vbkZpbmFsRmllbGRzLAogICAgICBMaXN0PFN0YXRpY0ZpZWxkPiBzdGF0aWNMYXppbHlJbml0aWFsaXplZEZpZWxkcywKICAgICAgTGlzdDxDb25zdGFudD4gY29uc3RhbnRzKQogICAgICA6IHN1cGVyKG91dHB1dFVuaXQsIG91dHB1dEZpbGVOYW1lLCBsaWJyYXJpZXMsIHN0YXRpY05vbkZpbmFsRmllbGRzLAogICAgICAgICAgICBzdGF0aWNMYXppbHlJbml0aWFsaXplZEZpZWxkcywgY29uc3RhbnRzKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNNYWluRnJhZ21lbnQgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnRGVmZXJyZWRGcmFnbWVudChuYW1lPSR7bmFtZX0pJzsKICB9Cn0KCmNsYXNzIENvbnN0YW50IHsKICBmaW5hbCBqcy5OYW1lIG5hbWU7CiAgZmluYWwgSG9sZGVyIGhvbGRlcjsKICBmaW5hbCBDb25zdGFudFZhbHVlIHZhbHVlOwoKICBDb25zdGFudCh0aGlzLm5hbWUsIHRoaXMuaG9sZGVyLCB0aGlzLnZhbHVlKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdDb25zdGFudChuYW1lPSR7bmFtZS5rZXl9LHZhbHVlPSR7dmFsdWUudG9TdHJ1Y3R1cmVkVGV4dCgpfSknOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgRmllbGRDb250YWluZXIgewogIExpc3Q8RmllbGQ+IGdldCBzdGF0aWNGaWVsZHNGb3JSZWZsZWN0aW9uOwp9CgpjbGFzcyBMaWJyYXJ5IGltcGxlbWVudHMgRmllbGRDb250YWluZXIgewogIC8vLyBUaGUgZWxlbWVudCBzaG91bGQgb25seSBiZSB1c2VkIGR1cmluZyB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1vZGVsLgogIC8vLyBVc2VzIGluZGljYXRlIG1pc3NpbmcgaW5mb3JtYXRpb24gaW4gdGhlIG1vZGVsLgogIGZpbmFsIExpYnJhcnlFbnRpdHkgZWxlbWVudDsKCiAgZmluYWwgU3RyaW5nIHVyaTsKICBmaW5hbCBMaXN0PFN0YXRpY01ldGhvZD4gc3RhdGljczsKICBmaW5hbCBMaXN0PENsYXNzPiBjbGFzc2VzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBMaXN0PEZpZWxkPiBzdGF0aWNGaWVsZHNGb3JSZWZsZWN0aW9uOwoKICBMaWJyYXJ5KHRoaXMuZWxlbWVudCwgdGhpcy51cmksIHRoaXMuc3RhdGljcywgdGhpcy5jbGFzc2VzLAogICAgICB0aGlzLnN0YXRpY0ZpZWxkc0ZvclJlZmxlY3Rpb24pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ0xpYnJhcnkodXJpPSR7dXJpfSxlbGVtZW50PSR7ZWxlbWVudH0pJzsKICB9Cn0KCmNsYXNzIFN0YXRpY0ZpZWxkIHsKICAvLy8gVGhlIGVsZW1lbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBkdXJpbmcgdGhlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtb2RlbC4KICAvLy8gVXNlcyBpbmRpY2F0ZSBtaXNzaW5nIGluZm9ybWF0aW9uIGluIHRoZSBtb2RlbC4KICBmaW5hbCBGaWVsZEVudGl0eSBlbGVtZW50OwoKICBmaW5hbCBqcy5OYW1lIG5hbWU7CiAgZmluYWwganMuTmFtZSBnZXR0ZXJOYW1lOwogIC8vIFRPRE8oZmxvaXRzY2gpOiB0aGUgaG9sZGVyIGZvciBzdGF0aWMgZmllbGRzIGlzIHRoZSBpc29sYXRlIG9iamVjdC4gV2UKICAvLyBjb3VsZCByZW1vdmUgdGhpcyBmaWVsZCBhbmQgdXNlIHRoZSBpc29sYXRlIG9iamVjdCBkaXJlY3RseS4KICBmaW5hbCBIb2xkZXIgaG9sZGVyOwogIGZpbmFsIGpzLkV4cHJlc3Npb24gY29kZTsKICBmaW5hbCBib29sIGlzRmluYWw7CiAgZmluYWwgYm9vbCBpc0xhenk7CiAgZmluYWwgYm9vbCBpc0luaXRpYWxpemVkQnlDb25zdGFudDsKCiAgU3RhdGljRmllbGQodGhpcy5lbGVtZW50LCB0aGlzLm5hbWUsIHRoaXMuZ2V0dGVyTmFtZSwgdGhpcy5ob2xkZXIsIHRoaXMuY29kZSwKICAgICAge3RoaXMuaXNGaW5hbCwgdGhpcy5pc0xhenksIHRoaXMuaXNJbml0aWFsaXplZEJ5Q29uc3RhbnQ6IGZhbHNlfSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnU3RhdGljRmllbGQobmFtZT0ke25hbWUua2V5fSxlbGVtZW50PSR7ZWxlbWVudH0pJzsKICB9Cn0KCi8vIFRPRE8oZmlzaHl0aGVmaXNoLCBzcmEpOiBTcGxpdCB0eXBlIGluZm9ybWF0aW9uIGludG8gc2VwYXJhdGUgbW9kZWwgb2JqZWN0LgpjbGFzcyBDbGFzcyBpbXBsZW1lbnRzIEZpZWxkQ29udGFpbmVyIHsKICAvLy8gVGhlIGVsZW1lbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBkdXJpbmcgdGhlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtb2RlbC4KICAvLy8gVXNlcyBpbmRpY2F0ZSBtaXNzaW5nIGluZm9ybWF0aW9uIGluIHRoZSBtb2RlbC4KICBmaW5hbCBDbGFzc0VudGl0eSBlbGVtZW50OwoKICBmaW5hbCBqcy5OYW1lIG5hbWU7CiAgZmluYWwgSG9sZGVyIGhvbGRlcjsKICBDbGFzcyBfc3VwZXJjbGFzczsKICBDbGFzcyBfbWl4aW5DbGFzczsKICBmaW5hbCBMaXN0PE1ldGhvZD4gbWV0aG9kczsKICBmaW5hbCBMaXN0PEZpZWxkPiBmaWVsZHM7CiAgZmluYWwgTGlzdDxTdHViTWV0aG9kPiBpc0NoZWNrczsKICBmaW5hbCBDbGFzc0NoZWNrcyBjbGFzc0NoZWNrc05ld1J0aTsKICBmaW5hbCBTZXQ8VHlwZVZhcmlhYmxlVHlwZT4gbmFtZWRUeXBlVmFyaWFibGVzTmV3UnRpID0ge307CiAgZmluYWwgTGlzdDxTdHViTWV0aG9kPiBjaGVja2VkU2V0dGVyczsKCiAgLy8vIFN0dWIgbWV0aG9kcyBmb3IgdGhpcyBjbGFzcyB0aGF0IGFyZSBjYWxsIHN0dWJzIGZvciBnZXR0ZXJzLgogIGZpbmFsIExpc3Q8U3R1Yk1ldGhvZD4gY2FsbFN0dWJzOwoKICAvLy8gbm9TdWNoTWV0aG9kIHN0dWJzIGluIHRoZSBzcGVjaWFsIGNhc2UgdGhhdCB0aGUgY2xhc3MgaXMgT2JqZWN0LgogIGZpbmFsIExpc3Q8U3R1Yk1ldGhvZD4gbm9TdWNoTWV0aG9kU3R1YnM7CiAgQG92ZXJyaWRlCiAgZmluYWwgTGlzdDxGaWVsZD4gc3RhdGljRmllbGRzRm9yUmVmbGVjdGlvbjsKICBmaW5hbCBib29sIGhhc1J0aUZpZWxkOyAvLyBQZXItaW5zdGFuY2UgcnVudGltZSB0eXBlIGluZm9ybWF0aW9uIHBzZXVkby1maWVsZC4KICBmaW5hbCBib29sIG9ubHlGb3JSdGk7CiAgZmluYWwgYm9vbCBpc0RpcmVjdGx5SW5zdGFudGlhdGVkOwogIGZpbmFsIGJvb2wgaXNOYXRpdmU7CiAgZmluYWwgYm9vbCBpc0Nsb3N1cmVCYXNlQ2xhc3M7IC8vIENvbW1vbiBiYXNlIGNsYXNzIGZvciBjbG9zdXJlcy4KCiAgLy8vIFdoZXRoZXIgdGhpcyBjbGFzcyBzaG91bGQgYmUgc29mdCBkZWZlcnJlZC4KICAvLy8KICAvLy8gQSBzb2Z0LWRlZmVycmVkIGNsYXNzIGlzIG9ubHkgZnVsbHkgaW5pdGlhbGl6ZWQgYXQgZmlyc3QgaW5zdGFudGlhdGlvbi4KICBmaW5hbCBib29sIGlzU29mdERlZmVycmVkOwoKICBmaW5hbCBib29sIGlzU3VwZXJNaXhpbkFwcGxpY2F0aW9uOwoKICAvLyBJZiB0aGUgY2xhc3MgaW1wbGVtZW50cyBhIGZ1bmN0aW9uIHR5cGUsIGFuZCB0aGUgdHlwZSBpcyBlbmNvZGVkIGluIHRoZQogIC8vIG1ldGF0YWRhIHRhYmxlLCB0aGVuIHRoaXMgZmllbGQgY29udGFpbnMgdGhlIGluZGV4IGludG8gdGhhdCBmaWVsZC4KICBmaW5hbCBqcy5FeHByZXNzaW9uIGZ1bmN0aW9uVHlwZUluZGV4OwoKICAvLy8gV2hldGhlciB0aGUgY2xhc3MgbXVzdCBiZSBldmFsdWF0ZWQgZWFnZXJseS4KICBib29sIGlzRWFnZXIgPSBmYWxzZTsKCiAgLy8vIExlYWYgdGFncy4gU2VlIFtOYXRpdmVFbWl0dGVyLnByZXBhcmVOYXRpdmVDbGFzc2VzXS4KICBMaXN0PFN0cmluZz4gbmF0aXZlTGVhZlRhZ3M7CgogIC8vLyBOb24tbGVhZiB0YWdzLiBTZWUgW05hdGl2ZUVtaXR0ZXIucHJlcGFyZU5hdGl2ZUNsYXNzZXNdLgogIExpc3Q8U3RyaW5nPiBuYXRpdmVOb25MZWFmVGFnczsKCiAgLy8vIE5hdGl2ZSBleHRlbnNpb25zLiBTZWUgW05hdGl2ZUVtaXR0ZXIucHJlcGFyZU5hdGl2ZUNsYXNzZXNdLgogIExpc3Q8Q2xhc3M+IG5hdGl2ZUV4dGVuc2lvbnM7CgogIENsYXNzKAogICAgICB0aGlzLmVsZW1lbnQsCiAgICAgIHRoaXMubmFtZSwKICAgICAgdGhpcy5ob2xkZXIsCiAgICAgIHRoaXMubWV0aG9kcywKICAgICAgdGhpcy5maWVsZHMsCiAgICAgIHRoaXMuc3RhdGljRmllbGRzRm9yUmVmbGVjdGlvbiwKICAgICAgdGhpcy5jYWxsU3R1YnMsCiAgICAgIHRoaXMubm9TdWNoTWV0aG9kU3R1YnMsCiAgICAgIHRoaXMuY2hlY2tlZFNldHRlcnMsCiAgICAgIHRoaXMuaXNDaGVja3MsCiAgICAgIHRoaXMuY2xhc3NDaGVja3NOZXdSdGksCiAgICAgIHRoaXMuZnVuY3Rpb25UeXBlSW5kZXgsCiAgICAgIHt0aGlzLmhhc1J0aUZpZWxkLAogICAgICB0aGlzLm9ubHlGb3JSdGksCiAgICAgIHRoaXMuaXNEaXJlY3RseUluc3RhbnRpYXRlZCwKICAgICAgdGhpcy5pc05hdGl2ZSwKICAgICAgdGhpcy5pc0Nsb3N1cmVCYXNlQ2xhc3MsCiAgICAgIHRoaXMuaXNTb2Z0RGVmZXJyZWQgPSBmYWxzZSwKICAgICAgdGhpcy5pc1N1cGVyTWl4aW5BcHBsaWNhdGlvbn0pIHsKICAgIGFzc2VydChvbmx5Rm9yUnRpICE9IG51bGwpOwogICAgYXNzZXJ0KGlzRGlyZWN0bHlJbnN0YW50aWF0ZWQgIT0gbnVsbCk7CiAgICBhc3NlcnQoaXNOYXRpdmUgIT0gbnVsbCk7CiAgICBhc3NlcnQoaXNDbG9zdXJlQmFzZUNsYXNzICE9IG51bGwpOwogIH0KCiAgYm9vbCBnZXQgaXNTaW1wbGVNaXhpbkFwcGxpY2F0aW9uID0+IGZhbHNlOwoKICBDbGFzcyBnZXQgc3VwZXJjbGFzcyA9PiBfc3VwZXJjbGFzczsKCiAgdm9pZCBzZXRTdXBlcmNsYXNzKENsYXNzIHN1cGVyY2xhc3MpIHsKICAgIF9zdXBlcmNsYXNzID0gc3VwZXJjbGFzczsKICB9CgogIENsYXNzIGdldCBtaXhpbkNsYXNzID0+IF9taXhpbkNsYXNzOwoKICB2b2lkIHNldE1peGluQ2xhc3MoQ2xhc3MgbWl4aW5DbGFzcykgewogICAgX21peGluQ2xhc3MgPSBtaXhpbkNsYXNzOwogIH0KCiAganMuTmFtZSBnZXQgc3VwZXJjbGFzc05hbWUgPT4gc3VwZXJjbGFzcyA9PSBudWxsID8gbnVsbCA6IHN1cGVyY2xhc3MubmFtZTsKCiAgaW50IGdldCBzdXBlcmNsYXNzSG9sZGVySW5kZXggPT4KICAgICAgKHN1cGVyY2xhc3MgPT0gbnVsbCkgPyAwIDogc3VwZXJjbGFzcy5ob2xkZXIuaW5kZXg7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdDbGFzcyhuYW1lPSR7bmFtZS5rZXl9LGVsZW1lbnQ9JGVsZW1lbnQpJzsKfQoKY2xhc3MgTWl4aW5BcHBsaWNhdGlvbiBleHRlbmRzIENsYXNzIHsKICBNaXhpbkFwcGxpY2F0aW9uKAogICAgICBDbGFzc0VudGl0eSBlbGVtZW50LAogICAgICBqcy5OYW1lIG5hbWUsCiAgICAgIEhvbGRlciBob2xkZXIsCiAgICAgIExpc3Q8RmllbGQ+IGluc3RhbmNlRmllbGRzLAogICAgICBMaXN0PEZpZWxkPiBzdGF0aWNGaWVsZHNGb3JSZWZsZWN0aW9uLAogICAgICBMaXN0PFN0dWJNZXRob2Q+IGNhbGxTdHVicywKICAgICAgTGlzdDxTdHViTWV0aG9kPiBjaGVja2VkU2V0dGVycywKICAgICAgTGlzdDxTdHViTWV0aG9kPiBpc0NoZWNrcywKICAgICAgQ2xhc3NDaGVja3MgY2xhc3NDaGVja3NOZXdSdGksCiAgICAgIGpzLkV4cHJlc3Npb24gZnVuY3Rpb25UeXBlSW5kZXgsCiAgICAgIHtib29sIGhhc1J0aUZpZWxkLAogICAgICBib29sIG9ubHlGb3JSdGksCiAgICAgIGJvb2wgaXNEaXJlY3RseUluc3RhbnRpYXRlZH0pCiAgICAgIDogc3VwZXIoCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgIG5hbWUsCiAgICAgICAgICAgIGhvbGRlciwKICAgICAgICAgICAgY29uc3QgPE1ldGhvZD5bXSwKICAgICAgICAgICAgaW5zdGFuY2VGaWVsZHMsCiAgICAgICAgICAgIHN0YXRpY0ZpZWxkc0ZvclJlZmxlY3Rpb24sCiAgICAgICAgICAgIGNhbGxTdHVicywKICAgICAgICAgICAgY29uc3QgPFN0dWJNZXRob2Q+W10sCiAgICAgICAgICAgIGNoZWNrZWRTZXR0ZXJzLAogICAgICAgICAgICBpc0NoZWNrcywKICAgICAgICAgICAgY2xhc3NDaGVja3NOZXdSdGksCiAgICAgICAgICAgIGZ1bmN0aW9uVHlwZUluZGV4LAogICAgICAgICAgICBoYXNSdGlGaWVsZDogaGFzUnRpRmllbGQsCiAgICAgICAgICAgIG9ubHlGb3JSdGk6IG9ubHlGb3JSdGksCiAgICAgICAgICAgIGlzRGlyZWN0bHlJbnN0YW50aWF0ZWQ6IGlzRGlyZWN0bHlJbnN0YW50aWF0ZWQsCiAgICAgICAgICAgIGlzTmF0aXZlOiBmYWxzZSwKICAgICAgICAgICAgaXNDbG9zdXJlQmFzZUNsYXNzOiBmYWxzZSwKICAgICAgICAgICAgaXNTdXBlck1peGluQXBwbGljYXRpb246IGZhbHNlKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTaW1wbGVNaXhpbkFwcGxpY2F0aW9uID0+IHRydWU7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdNaXhpbihuYW1lPSR7bmFtZS5rZXl9LGVsZW1lbnQ9JGVsZW1lbnQpJzsKfQoKLy8vIEEgZmllbGQuCi8vLwovLy8gSW4gZ2VuZXJhbCByZXByZXNlbnRzIGFuIGluc3RhbmNlIGZpZWxkLCBidXQgZm9yIHJlZmxlY3Rpb24gbWF5IGFsc28KLy8vIHJlcHJlc2VudCBzdGF0aWMgZmllbGRzLgpjbGFzcyBGaWVsZCB7CiAgLy8vIFRoZSBlbGVtZW50IHNob3VsZCBvbmx5IGJlIHVzZWQgZHVyaW5nIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbW9kZWwuCiAgLy8vIFVzZXMgaW5kaWNhdGUgbWlzc2luZyBpbmZvcm1hdGlvbiBpbiB0aGUgbW9kZWwuCiAgZmluYWwgRmllbGRFbnRpdHkgZWxlbWVudDsKCiAgZmluYWwganMuTmFtZSBuYW1lOwogIGZpbmFsIGpzLk5hbWUgYWNjZXNzb3JOYW1lOwoKICAvLy8gMDA6IERvZXMgbm90IG5lZWQgYW55IGdldHRlci4KICAvLy8gMDE6ICBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuZmllbGQ7IH0KICAvLy8gMTA6ICBmdW5jdGlvbihyZWNlaXZlcikgeyByZXR1cm4gcmVjZWl2ZXIuZmllbGQ7IH0KICAvLy8gMTE6ICBmdW5jdGlvbihyZWNlaXZlcikgeyByZXR1cm4gdGhpcy5maWVsZDsgfQogIGZpbmFsIGludCBnZXR0ZXJGbGFnczsKCiAgLy8vIDAwOiBEb2VzIG5vdCBuZWVkIGFueSBzZXR0ZXIuCiAgLy8vIDAxOiAgZnVuY3Rpb24odmFsdWUpIHsgdGhpcy5maWVsZCA9IHZhbHVlOyB9CiAgLy8vIDEwOiAgZnVuY3Rpb24ocmVjZWl2ZXIsIHZhbHVlKSB7IHJlY2VpdmVyLmZpZWxkID0gdmFsdWU7IH0KICAvLy8gMTE6ICBmdW5jdGlvbihyZWNlaXZlciwgdmFsdWUpIHsgdGhpcy5maWVsZCA9IHZhbHVlOyB9CiAgZmluYWwgaW50IHNldHRlckZsYWdzOwoKICBmaW5hbCBib29sIG5lZWRzQ2hlY2tlZFNldHRlcjsKCiAgZmluYWwgQ29uc3RhbnRWYWx1ZSBpbml0aWFsaXplckluQWxsb2NhdG9yOwoKICBmaW5hbCBDb25zdGFudFZhbHVlIGNvbnN0YW50VmFsdWU7CgogIGZpbmFsIGJvb2wgaXNFbGlkZWQ7CgogIC8vIFRPRE8oZmxvaXRzY2gpOiBzdXBwb3J0IHJlbmFtZWQgZmllbGRzLgogIEZpZWxkKAogICAgICB0aGlzLmVsZW1lbnQsCiAgICAgIHRoaXMubmFtZSwKICAgICAgdGhpcy5hY2Nlc3Nvck5hbWUsCiAgICAgIHRoaXMuZ2V0dGVyRmxhZ3MsCiAgICAgIHRoaXMuc2V0dGVyRmxhZ3MsCiAgICAgIHRoaXMubmVlZHNDaGVja2VkU2V0dGVyLAogICAgICB0aGlzLmluaXRpYWxpemVySW5BbGxvY2F0b3IsCiAgICAgIHRoaXMuY29uc3RhbnRWYWx1ZSwKICAgICAgdGhpcy5pc0VsaWRlZCk7CgogIGJvb2wgZ2V0IG5lZWRzR2V0dGVyID0+IGdldHRlckZsYWdzICE9IDA7CiAgYm9vbCBnZXQgbmVlZHNVbmNoZWNrZWRTZXR0ZXIgPT4gc2V0dGVyRmxhZ3MgIT0gMDsKCiAgYm9vbCBnZXQgbmVlZHNJbnRlcmNlcHRlZEdldHRlciA9PiBnZXR0ZXJGbGFncyA+IDE7CiAgYm9vbCBnZXQgbmVlZHNJbnRlcmNlcHRlZFNldHRlciA9PiBzZXR0ZXJGbGFncyA+IDE7CgogIGJvb2wgZ2V0IG5lZWRzSW50ZXJjZXB0ZWRHZXR0ZXJPblJlY2VpdmVyID0+IGdldHRlckZsYWdzID09IDI7CiAgYm9vbCBnZXQgbmVlZHNJbnRlcmNlcHRlZFNldHRlck9uUmVjZWl2ZXIgPT4gc2V0dGVyRmxhZ3MgPT0gMjsKCiAgYm9vbCBnZXQgbmVlZHNJbnRlcmNlcHRlZEdldHRlck9uVGhpcyA9PiBnZXR0ZXJGbGFncyA9PSAzOwogIGJvb2wgZ2V0IG5lZWRzSW50ZXJjZXB0ZWRTZXR0ZXJPblRoaXMgPT4gc2V0dGVyRmxhZ3MgPT0gMzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdGaWVsZChuYW1lPSR7bmFtZS5rZXl9LGVsZW1lbnQ9JHtlbGVtZW50fSknOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgTWV0aG9kIHsKICAvLy8gVGhlIGVsZW1lbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBkdXJpbmcgdGhlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtb2RlbC4KICAvLy8gVXNlcyBpbmRpY2F0ZSBtaXNzaW5nIGluZm9ybWF0aW9uIGluIHRoZSBtb2RlbC4KICBmaW5hbCBNZW1iZXJFbnRpdHkgZWxlbWVudDsKCiAgLy8vIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QuIElmIHRoZSBtZXRob2QgaXMgYSBbUGFyYW1ldGVyU3R1Yk1ldGhvZF0gZm9yIGEKICAvLy8gc3RhdGljIGZ1bmN0aW9uLCB0aGVuIHRoZSBuYW1lIGNhbiBiZSBgbnVsbGAuIEluIHRoYXQgY2FzZSwgb25seSB0aGUKICAvLy8gW1BhcmFtZXRlclN0dWJNZXRob2QuY2FsbE5hbWVdIHNob3VsZCBiZSB1c2VkLgogIGZpbmFsIGpzLk5hbWUgbmFtZTsKICBmaW5hbCBqcy5FeHByZXNzaW9uIGNvZGU7CgogIE1ldGhvZCh0aGlzLmVsZW1lbnQsIHRoaXMubmFtZSwgdGhpcy5jb2RlKTsKfQoKLy8vIEEgbWV0aG9kIHRoYXQgY29ycmVzcG9uZHMgdG8gYSBtZXRob2QgaW4gdGhlIG9yaWdpbmFsIERhcnQgcHJvZ3JhbS4KYWJzdHJhY3QgY2xhc3MgRGFydE1ldGhvZCBleHRlbmRzIE1ldGhvZCB7CiAgZmluYWwgYm9vbCBuZWVkc1RlYXJPZmY7CiAgZmluYWwganMuTmFtZSB0ZWFyT2ZmTmFtZTsKICBmaW5hbCBMaXN0PFBhcmFtZXRlclN0dWJNZXRob2Q+IHBhcmFtZXRlclN0dWJzOwogIGZpbmFsIGJvb2wgY2FuQmVBcHBsaWVkOwogIGZpbmFsIGludCBhcHBseUluZGV4OwoKICAvLyBJcyBub24tbnVsbCBpZiBbbmVlZHNUZWFyT2ZmXS4KICAvLwogIC8vIElmIHRoZSB0eXBlIGlzIGVuY29kZWQgaW4gdGhlIG1ldGFkYXRhIHRhYmxlIHRoaXMgZmllbGQgY29udGFpbnMgYW4gaW5kZXgKICAvLyBpbnRvIHRoZSB0YWJsZS4gT3RoZXJ3aXNlIHRoZSB0eXBlIGNvbnRhaW5zIHR5cGUgdmFyaWFibGVzIGluIHdoaWNoIGNhc2UKICAvLyB0aGlzIGZpZWxkIGhvbGRzIGEgZnVuY3Rpb24gY29tcHV0aW5nIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUuCiAgZmluYWwganMuRXhwcmVzc2lvbiBmdW5jdGlvblR5cGU7CgogIC8vIFNpZ25hdHVyZSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBtZXRob2QuIFtvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXNdIGlzCiAgLy8gb25seSByZXF1aXJlZCBhbmQgc3RvcmVkIGhlcmUgaWYgdGhlIG1ldGhvZCBbY2FuQmVBcHBsaWVkXS4gVGhlIGNvdW50IGlzCiAgLy8gYWx3YXlzIHN0b3JlZCB0byBoZWxwIHNlbGVjdCBzcGVjaWFsaXplZCB0ZWFyLW9mZiBwYXRocy4KICBmaW5hbCBpbnQgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDsKICBmaW5hbCAvKiBNYXAgfCBMaXN0ICovIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlczsKCiAgLy8gSWYgdGhpcyBtZXRob2QgY2FuIGJlIHRvcm4gb2ZmLCBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgY29ycmVzcG9uZGluZwogIC8vIGNhbGwgbWV0aG9kLiBGb3IgZXhhbXBsZSwgZm9yIHRoZSBtZW1iZXIgYGZvbyQxJG5hbWVgIGl0IHdvdWxkIGJlCiAgLy8gYGNhbGwkMSRuYW1lYCAoaW4gdW5taW5pZmllZCBtb2RlKS4KICBmaW5hbCBqcy5OYW1lIGNhbGxOYW1lOwoKICBEYXJ0TWV0aG9kKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQsIGpzLk5hbWUgbmFtZSwganMuRXhwcmVzc2lvbiBjb2RlLAogICAgICB0aGlzLnBhcmFtZXRlclN0dWJzLCB0aGlzLmNhbGxOYW1lLAogICAgICB7dGhpcy5uZWVkc1RlYXJPZmYsCiAgICAgIHRoaXMudGVhck9mZk5hbWUsCiAgICAgIHRoaXMuY2FuQmVBcHBsaWVkLAogICAgICB0aGlzLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICAgIHRoaXMub3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzLAogICAgICB0aGlzLmZ1bmN0aW9uVHlwZSwKICAgICAgdGhpcy5hcHBseUluZGV4fSkKICAgICAgOiBzdXBlcihlbGVtZW50LCBuYW1lLCBjb2RlKSB7CiAgICBhc3NlcnQobmVlZHNUZWFyT2ZmICE9IG51bGwpOwogICAgYXNzZXJ0KCFuZWVkc1RlYXJPZmYgfHwgdGVhck9mZk5hbWUgIT0gbnVsbCk7CiAgICBhc3NlcnQoY2FuQmVBcHBsaWVkICE9IG51bGwpOwogICAgYXNzZXJ0KCFjYW5CZUFwcGxpZWQgfHwKICAgICAgICAocmVxdWlyZWRQYXJhbWV0ZXJDb3VudCAhPSBudWxsICYmCiAgICAgICAgICAgIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcyAhPSBudWxsKSk7CiAgfQoKICBib29sIGdldCBpc1N0YXRpYzsKfQoKY2xhc3MgSW5zdGFuY2VNZXRob2QgZXh0ZW5kcyBEYXJ0TWV0aG9kIHsKICAvLy8gQW4gYWx0ZXJuYXRpdmUgbmFtZSBmb3IgdGhpcyBtZXRob2QuIFRoaXMgaXMgdXNlZCB0byBtb2RlbCBjYWxscyB0bwogIC8vLyBhIG1ldGhvZCB2aWEgYHN1cGVyYC4gSWYgW2FsaWFzTmFtZV0gaXMgbm9uLW51bGwsIHRoZSBlbWl0dGVyIGhhcyB0bwogIC8vLyBlbnN1cmUgdGhhdCB0aGlzIG1ldGhvZCBpcyByZWdpc3RlcmVkIG9uIHRoZSBwcm90b3R5cGUgdW5kZXIgYm90aCBbbmFtZV0KICAvLy8gYW5kIFthbGlhc05hbWVdLgogIGZpbmFsIGpzLk5hbWUgYWxpYXNOYW1lOwoKICAvLy8gVHJ1ZSBpZiB0aGlzIGlzIHRoZSBpbXBsaWNpdCBgY2FsbGAgaW5zdGFuY2UgbWV0aG9kIG9mIGFuIGFub255bW91cwogIC8vLyBjbG9zdXJlLiBUaGlzIHByZWRpY2F0ZSBpcyBmYWxzZSBmb3IgZXhwbGljaXQgYGNhbGxgIG1ldGhvZHMgYW5kIGZvcgogIC8vLyBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdG9ybiBvZmYuCiAgZmluYWwgYm9vbCBpc0Nsb3N1cmVDYWxsTWV0aG9kOwoKICAvLy8gVHJ1ZSBpZiB0aGUgaW50ZXJjZXB0b3IgY2FsbGluZyBjb252ZW50aW9uIGlzIHVzZWQgZm9yIHRoaXMgbWV0aG9kLgogIGZpbmFsIGJvb2wgaXNJbnRlcmNlcHRlZDsKCiAgLy8vIE5hbWUgY2FsbGVkIHZpYSB0aGUgZ2VuZXJhbCAnY2F0Y2ggYWxsJyBwYXRoIG9mIEZ1bmN0aW9uLmFwcGx5LgogIC8vL2ZpbmFsIGpzLk5hbWUgYXBwbHlOYW1lOwoKICBJbnN0YW5jZU1ldGhvZChGdW5jdGlvbkVudGl0eSBlbGVtZW50LCBqcy5OYW1lIG5hbWUsIGpzLkV4cHJlc3Npb24gY29kZSwKICAgICAgTGlzdDxQYXJhbWV0ZXJTdHViTWV0aG9kPiBwYXJhbWV0ZXJTdHVicywganMuTmFtZSBjYWxsTmFtZSwKICAgICAge2Jvb2wgbmVlZHNUZWFyT2ZmLAogICAgICBqcy5OYW1lIHRlYXJPZmZOYW1lLAogICAgICB0aGlzLmFsaWFzTmFtZSwKICAgICAgYm9vbCBjYW5CZUFwcGxpZWQsCiAgICAgIGludCByZXF1aXJlZFBhcmFtZXRlckNvdW50LAogICAgICAvKiBMaXN0IHwgTWFwICovIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgdGhpcy5pc0Nsb3N1cmVDYWxsTWV0aG9kLAogICAgICB0aGlzLmlzSW50ZXJjZXB0ZWQsCiAgICAgIGpzLkV4cHJlc3Npb24gZnVuY3Rpb25UeXBlLAogICAgICBpbnQgYXBwbHlJbmRleH0pCiAgICAgIDogc3VwZXIoZWxlbWVudCwgbmFtZSwgY29kZSwgcGFyYW1ldGVyU3R1YnMsIGNhbGxOYW1lLAogICAgICAgICAgICBuZWVkc1RlYXJPZmY6IG5lZWRzVGVhck9mZiwKICAgICAgICAgICAgdGVhck9mZk5hbWU6IHRlYXJPZmZOYW1lLAogICAgICAgICAgICBjYW5CZUFwcGxpZWQ6IGNhbkJlQXBwbGllZCwKICAgICAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICAgICAgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzOiBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICAgICAgICAgIGZ1bmN0aW9uVHlwZTogZnVuY3Rpb25UeXBlLAogICAgICAgICAgICBhcHBseUluZGV4OiBhcHBseUluZGV4KSB7CiAgICBhc3NlcnQoaXNDbG9zdXJlQ2FsbE1ldGhvZCAhPSBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU3RhdGljID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ0luc3RhbmNlTWV0aG9kKG5hbWU9JHtuYW1lLmtleX0sZWxlbWVudD0ke2VsZW1lbnR9JwogICAgICAgICcsY29kZT0ke2pzLm5vZGVUb1N0cmluZyhjb2RlKX0pJzsKICB9Cn0KCi8vLyBBIG1ldGhvZCB0aGF0IGlzIGdlbmVyYXRlZCBieSB0aGUgYmFja2VuZCBhbmQgaGFzIG5vdCBkaXJlY3QgY29ycmVzcG9uZGVuY2UKLy8vIHRvIGEgbWV0aG9kIGluIHRoZSBvcmlnaW5hbCBEYXJ0IHByb2dyYW0uIEV4YW1wbGVzIGFyZSBnZXR0ZXIgYW5kIHNldHRlcgovLy8gc3R1YnMgYW5kIHN0dWJzIHRvIGRpc3BhdGNoIGNhbGxzIHRvIG1ldGhvZHMgd2l0aCBvcHRpb25hbCBwYXJhbWV0ZXJzLgpjbGFzcyBTdHViTWV0aG9kIGV4dGVuZHMgTWV0aG9kIHsKICBTdHViTWV0aG9kKGpzLk5hbWUgbmFtZSwganMuRXhwcmVzc2lvbiBjb2RlLCB7TWVtYmVyRW50aXR5IGVsZW1lbnR9KQogICAgICA6IHN1cGVyKGVsZW1lbnQsIG5hbWUsIGNvZGUpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ1N0dWJNZXRob2QobmFtZT0ke25hbWUua2V5fSxlbGVtZW50PSR7ZWxlbWVudH0nCiAgICAgICAgJyxjb2RlPSR7anMubm9kZVRvU3RyaW5nKGNvZGUpfSknOwogIH0KfQoKLy8vIEEgc3R1YiB0aGF0IGFkYXB0cyBhbmQgcmVkaXJlY3RzIHRvIHRoZSBtYWluIG1ldGhvZCAodGhlIG9uZSBjb250YWluaW5nKQovLy8gdGhlIGFjdHVhbCBjb2RlLgovLy8KLy8vIEZvciBleGFtcGxlLCBnaXZlbiBhIG1ldGhvZCBgZm9vJDIoeCwgW3k6IDQ5OV0pYCBhIHBvc3NpYmxlIHBhcmFtZXRlcgovLy8gc3R1Yi1tZXRob2QgY291bGQgYmUgYGZvbyQxKHgpID0+IGZvbyQyKHgsIDQ5OSlgLgovLy8KLy8vIFBhcmFtZXRlclN0dWJNZXRob2RzIGFyZSBhbHdheXMgYXR0YWNoZWQgdG8gKHN0YXRpYyBvciBpbnN0YW5jZSkgbWV0aG9kcy4KY2xhc3MgUGFyYW1ldGVyU3R1Yk1ldGhvZCBleHRlbmRzIFN0dWJNZXRob2QgewogIC8vLyBUaGUgYGNhbGxgIG5hbWUgb2YgdGhpcyBzdHViLgogIC8vLwogIC8vLyBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBpcyB0b3JuIG9mZiwgaXQgaXMgaW52b2tlZCBhcyBhIGBjYWxsYCBtZW1iZXIgYW5kCiAgLy8vIG5vdCBpdCdzIG9yaWdpbmFsIG5hbWUgYW55bW9yZS4gVGhlIFtjYWxsTmFtZV0gcHJvdmlkZXMgdGhlIHN0dWIncwogIC8vLyBuYW1lIHdoZW4gaXQgaXMgdXNlZCB0aGlzIHdheS4KICAvLy8KICAvLy8gSWYgYSBzdHViJ3MgbWVtYmVyIGNhbiBub3QgYmUgdG9ybiBvZmYsIHRoZSBbY2FsbE5hbWVdIGlzIGBudWxsYC4KICBqcy5OYW1lIGNhbGxOYW1lOwoKICBQYXJhbWV0ZXJTdHViTWV0aG9kKGpzLk5hbWUgbmFtZSwgdGhpcy5jYWxsTmFtZSwganMuRXhwcmVzc2lvbiBjb2RlLAogICAgICB7TWVtYmVyRW50aXR5IGVsZW1lbnR9KQogICAgICA6IHN1cGVyKG5hbWUsIGNvZGUsIGVsZW1lbnQ6IGVsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ1BhcmFtZXRlclN0dWJNZXRob2QobmFtZT0ke25hbWUua2V5fSwgY2FsbE5hbWU9JHtjYWxsTmFtZT8ua2V5fScKICAgICAgICAnLCBlbGVtZW50PSR7ZWxlbWVudH0nCiAgICAgICAgJywgY29kZT0ke2pzLm5vZGVUb1N0cmluZyhjb2RlKX0pJzsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIFN0YXRpY01ldGhvZCBpbXBsZW1lbnRzIE1ldGhvZCB7CiAgSG9sZGVyIGdldCBob2xkZXI7Cn0KCmNsYXNzIFN0YXRpY0RhcnRNZXRob2QgZXh0ZW5kcyBEYXJ0TWV0aG9kIGltcGxlbWVudHMgU3RhdGljTWV0aG9kIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBIb2xkZXIgaG9sZGVyOwoKICBTdGF0aWNEYXJ0TWV0aG9kKAogICAgICBGdW5jdGlvbkVudGl0eSBlbGVtZW50LAogICAgICBqcy5OYW1lIG5hbWUsCiAgICAgIHRoaXMuaG9sZGVyLAogICAgICBqcy5FeHByZXNzaW9uIGNvZGUsCiAgICAgIExpc3Q8UGFyYW1ldGVyU3R1Yk1ldGhvZD4gcGFyYW1ldGVyU3R1YnMsCiAgICAgIGpzLk5hbWUgY2FsbE5hbWUsCiAgICAgIHtib29sIG5lZWRzVGVhck9mZiwKICAgICAganMuTmFtZSB0ZWFyT2ZmTmFtZSwKICAgICAgYm9vbCBjYW5CZUFwcGxpZWQsCiAgICAgIGludCByZXF1aXJlZFBhcmFtZXRlckNvdW50LAogICAgICAvKiBMaXN0IHwgTWFwICovIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAganMuRXhwcmVzc2lvbiBmdW5jdGlvblR5cGUsCiAgICAgIGludCBhcHBseUluZGV4fSkKICAgICAgOiBzdXBlcihlbGVtZW50LCBuYW1lLCBjb2RlLCBwYXJhbWV0ZXJTdHVicywgY2FsbE5hbWUsCiAgICAgICAgICAgIG5lZWRzVGVhck9mZjogbmVlZHNUZWFyT2ZmLAogICAgICAgICAgICB0ZWFyT2ZmTmFtZTogdGVhck9mZk5hbWUsCiAgICAgICAgICAgIGNhbkJlQXBwbGllZDogY2FuQmVBcHBsaWVkLAogICAgICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50OiByZXF1aXJlZFBhcmFtZXRlckNvdW50LAogICAgICAgICAgICBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXM6IG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgICAgICAgZnVuY3Rpb25UeXBlOiBmdW5jdGlvblR5cGUsCiAgICAgICAgICAgIGFwcGx5SW5kZXg6IGFwcGx5SW5kZXgpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1N0YXRpYyA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ1N0YXRpY0RhcnRNZXRob2QobmFtZT0ke25hbWUua2V5fSxlbGVtZW50PSR7ZWxlbWVudH0nCiAgICAgICAgJyxjb2RlPSR7anMubm9kZVRvU3RyaW5nKGNvZGUpfSknOwogIH0KfQoKY2xhc3MgU3RhdGljU3R1Yk1ldGhvZCBleHRlbmRzIFN0dWJNZXRob2QgaW1wbGVtZW50cyBTdGF0aWNNZXRob2QgewogIEBvdmVycmlkZQogIEhvbGRlciBob2xkZXI7CiAgU3RhdGljU3R1Yk1ldGhvZChqcy5OYW1lIG5hbWUsIHRoaXMuaG9sZGVyLCBqcy5FeHByZXNzaW9uIGNvZGUpCiAgICAgIDogc3VwZXIobmFtZSwgY29kZSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnU3RhdGljU3R1Yk1ldGhvZChuYW1lPSR7bmFtZS5rZXl9LGVsZW1lbnQ9JHtlbGVtZW50fX0nCiAgICAgICAgJyxjb2RlPSR7anMubm9kZVRvU3RyaW5nKGNvZGUpfSknOwogIH0KfQqCjABOTjwBJgE2MCQhTzYzMQEQIh4pISUBSi0BUFEsAU5FLjABUTAgJyYoMAQBSgZNPk4dBk1JSww5PgQBRgZNT1EGTVAUPjsEASxBMAIBTxoPFRMiIAEgSQEMFiMEAgErBEQUGlE2HwEhIk0wSzkBKh8BDBcbFiEqFwEbAgEaBFIfJiEBEB0dFx8uNyBLNwEMIwEMFh0EAgEoKhUBFB0dER8uNyBLNwEMJAEMFi0EAgERFhcdATABDBZLBAIBIC0CASpONh8BFCQdAQwvAT4nAQwWNQQCARRONh0BFhxMQhccFhUmAVBJAQwWPwQCAU8oTjYdARYXFRUeHCMnPSkBQyQBRywML1EZJRdEATIGTh0BJgFNSSkBMxgBOx8BPyIBQyABCRQRExQTJhYeGxUeHhkXIxUfIycgLB4oBAEuAScBKR4EAScBKR4EAU0BIzoBDEMCAScUGxQVIi0iJyElJxkXJA8VEhQeHCcXIhwWHx8mJDwdJy0BDC0BDEMCAQ0ESR0OTjYdARYeASQtOTUZASQzQT0ZASEBLgElARcBLQkUERkYGB8jGhYBLDUBNjYBQUEBPT0BDBY5BAIBGE42HgFNSzUWHAEuAgFIKxsdMhsYASQFT05DJAFQTj4kOQFMRykaAUcqGhgZIysZGCUiMiIcKzYEARUCASpKS08XGwFKSyYiAUocAUYeAUtCGhsWGSI3IBoiFz0oJig8TCgmKQQBDB4BDBZAKwQCAVBNSyJHJAEMFjwrBAIBTRUESjYETi8kBlBJJQZIFAFHHi0BDBZNHywEAgEwFQIBRAwXARQeFBMaMBgaGxkiNyIXPSgmKDxMKCUBDB0BDBZCKwQCAUQMEUIbAQwWQysEAgEqcGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9tb2RlbC5kYXJ0PHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2VtaXR0ZXIvbmF0aXZlX2VtaXR0ZXIuZGFydLXzLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5qc19lbWl0dGVyLm5hdGl2ZV9lbWl0dGVyOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgSkNvbW1vbkVsZW1lbnRzLCBKRWxlbWVudEVudmlyb25tZW50OwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnIHNob3cgRGFydFR5cGUsIEZ1bmN0aW9uVHlwZTsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqc0FzdDsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBzaG93IGpzOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvaW50ZXJjZXB0b3JfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hdGl2ZV9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL25hdGl2ZS9lbnF1ZXVlLmRhcnQnIHNob3cgTmF0aXZlQ29kZWdlbkVucXVldWVyOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwoKaW1wb3J0ICdjb2RlX2VtaXR0ZXJfdGFzay5kYXJ0JyBzaG93IENvZGVFbWl0dGVyVGFzazsKaW1wb3J0ICdtb2RlbC5kYXJ0JzsKCmNsYXNzIE5hdGl2ZUVtaXR0ZXIgewogIGZpbmFsIENvZGVFbWl0dGVyVGFzayBfZW1pdHRlclRhc2s7CiAgZmluYWwgSkNsb3NlZFdvcmxkIF9jbG9zZWRXb3JsZDsKICBmaW5hbCBOYXRpdmVDb2RlZ2VuRW5xdWV1ZXIgX25hdGl2ZUNvZGVnZW5FbnF1ZXVlcjsKCiAgLy8gV2hldGhlciB0aGUgYXBwbGljYXRpb24gY29udGFpbnMgbmF0aXZlIGNsYXNzZXMuCiAgYm9vbCBoYXNOYXRpdmVDbGFzc2VzID0gZmFsc2U7CgogIC8vIENhY2hlcyB0aGUgbmF0aXZlIHN1YnR5cGVzIG9mIGEgbmF0aXZlIGNsYXNzLgogIE1hcDxDbGFzc0VudGl0eSwgTGlzdDxDbGFzc0VudGl0eT4+IHN1YnR5cGVzID0KICAgICAgPENsYXNzRW50aXR5LCBMaXN0PENsYXNzRW50aXR5Pj57fTsKCiAgLy8gQ2FjaGVzIHRoZSBkaXJlY3QgbmF0aXZlIHN1YnR5cGVzIG9mIGEgbmF0aXZlIGNsYXNzLgogIE1hcDxDbGFzc0VudGl0eSwgTGlzdDxDbGFzc0VudGl0eT4+IGRpcmVjdFN1YnR5cGVzID0KICAgICAgPENsYXNzRW50aXR5LCBMaXN0PENsYXNzRW50aXR5Pj57fTsKCiAgLy8gQ2FjaGVzIHRoZSBtZXRob2RzIHRoYXQgaGF2ZSBhIG5hdGl2ZSBib2R5LgogIFNldDxGdW5jdGlvbkVudGl0eT4gbmF0aXZlTWV0aG9kcyA9IG5ldyBTZXQ8RnVuY3Rpb25FbnRpdHk+KCk7CgogIE5hdGl2ZUVtaXR0ZXIoCiAgICAgIHRoaXMuX2VtaXR0ZXJUYXNrLCB0aGlzLl9jbG9zZWRXb3JsZCwgdGhpcy5fbmF0aXZlQ29kZWdlbkVucXVldWVyKTsKCiAgSkNvbW1vbkVsZW1lbnRzIGdldCBfY29tbW9uRWxlbWVudHMgPT4gX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzOwogIEpFbGVtZW50RW52aXJvbm1lbnQgZ2V0IF9lbGVtZW50RW52aXJvbm1lbnQgPT4KICAgICAgX2Nsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudDsKICBOYXRpdmVEYXRhIGdldCBfbmF0aXZlRGF0YSA9PiBfY2xvc2VkV29ybGQubmF0aXZlRGF0YTsKICBJbnRlcmNlcHRvckRhdGEgZ2V0IF9pbnRlcmNlcHRvckRhdGEgPT4gX2Nsb3NlZFdvcmxkLmludGVyY2VwdG9yRGF0YTsKCiAgLy8vIFByZXBhcmVzIG5hdGl2ZSBjbGFzc2VzIGZvciBlbWlzc2lvbi4gUmV0dXJucyB0aGUgdW5uZWVkZWQgY2xhc3Nlcy4KICAvLy8KICAvLy8gUmVtb3ZlcyB0cml2aWFsIGNsYXNzZXMgKHRoYXQgY2FuIGJlIHJlcHJlc2VudGVkIGJ5IGEgc3VwZXIgdHlwZSkgYW5kCiAgLy8vIGdlbmVyYXRlcyBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSB0byBiZSBhZGRlZCB0byBjbGFzc2VzIChuYXRpdmUgb3Igbm90KS4KICAvLy8KICAvLy8gVXBkYXRlcyB0aGUgYG5hdGl2ZUxlYWZUYWdzYCwgYG5hdGl2ZU5vbkxlYWZUYWdzYCBhbmQgYG5hdGl2ZUV4dGVuc2lvbnNgCiAgLy8vIGZpZWxkcyBvZiB0aGUgZ2l2ZW4gY2xhc3Nlcy4gVGhpcyBkYXRhIG11c3QgYmUgZW1pdHRlZCB3aXRoIHRoZQogIC8vLyBjb3JyZXNwb25kaW5nIGNsYXNzZXMuCiAgLy8vCiAgLy8vIFRoZSBpbnRlcmNlcHRvcnMgYXJlIGZpbHRlcmVkIHRvIGF2b2lkIGVtaXR0aW5nIHRyaXZpYWwgaW50ZXJjZXB0b3JzLiAgRm9yCiAgLy8vIGV4YW1wbGUsIGlmIHRoZSBwcm9ncmFtIGNvbnRhaW5zIG5vIGNvZGUgdGhhdCBjYW4gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUKICAvLy8gbnVtZXJvdXMgc3ViY2xhc3NlcyBvZiBgRWxlbWVudGAgdGhlbiB3ZSBjYW4gcHJldGVuZCB0aGF0IGBFbGVtZW50YCBpcyBhCiAgLy8vIGxlYWYgY2xhc3MsIGFuZCBhbGwgaW5zdGFuY2VzIG9mIHN1YmNsYXNzZXMgb2YgYEVsZW1lbnRgIGFyZSBpbnN0YW5jZXMgb2YKICAvLy8gYEVsZW1lbnRgLgogIC8vLwogIC8vLyBUaGVyZSBpcyBhbHNvIGEgcGVyZm9ybWFuY2UgYmVuZWZpdCAoaW4gYWRkaXRpb24gdG8gdGhlIG9idmlvdXMgY29kZSBzaXplCiAgLy8vIGJlbmVmaXQpLCBkdWUgdG8gaG93IFtnZXROYXRpdmVJbnRlcmNlcHRvcl0gd29ya3MuICBGaW5kaW5nIHRoZQogIC8vLyBpbnRlcmNlcHRvciBvZiBhIGxlYWYgY2xhc3MgaW4gdGhlIGhpZXJhcmNoeSBpcyBtb3JlIGVmZmljaWVudCB0aGF0IGEKICAvLy8gbm9uLWxlYWYsIHNvIGl0IGltcHJvdmVzIHBlcmZvcm1hbmNlIHdoZW4gbW9yZSBjbGFzc2VzIGNhbiBiZSB0cmVhdGVkIGFzCiAgLy8vIGxlYXZlcy4KICAvLy8KICAvLy8gW2NsYXNzZXNdIGNvbnRhaW5zIG5hdGl2ZSBjbGFzc2VzLCBtaXhpbiBhcHBsaWNhdGlvbnMsIGFuZCB1c2VyIHN1YmNsYXNzZXMKICAvLy8gb2YgbmF0aXZlIGNsYXNzZXMuCiAgLy8vCiAgLy8vIFtpbnRlcmNlcHRvckNsYXNzZXNOZWVkZWRCeUNvbnN0YW50c10gY29udGFpbnMgdGhlIGludGVyY2VwdG9ycyB0aGF0IGFyZQogIC8vLyByZWZlcmVuY2VkIGJ5IGNvbnN0YW50cy4KICAvLy8KICAvLy8gW2NsYXNzZXNNb2RpZmllZEJ5RW1pdFJUSVN1cHBvcnRdIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGNsYXNzZXMgdGhhdCBtdXN0CiAgLy8vIGV4aXN0LCBiZWNhdXNlIHJ1bnRpbWUtdHlwZSBzdXBwb3J0IGFkZHMgaW5mb3JtYXRpb24gdG8gdGhlIGNsYXNzLgogIFNldDxDbGFzcz4gcHJlcGFyZU5hdGl2ZUNsYXNzZXMoCiAgICAgIExpc3Q8Q2xhc3M+IGNsYXNzZXMsCiAgICAgIFNldDxDbGFzc0VudGl0eT4gaW50ZXJjZXB0b3JDbGFzc2VzTmVlZGVkQnlDb25zdGFudHMsCiAgICAgIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBjbGFzc2VzTmVlZGVkRm9yUnRpKSB7CiAgICBhc3NlcnQoY2xhc3Nlcy5ldmVyeSgoQ2xhc3MgY2xzKSA9PiBjbHMgIT0gbnVsbCkpOwoKICAgIGhhc05hdGl2ZUNsYXNzZXMgPSBjbGFzc2VzLmlzTm90RW1wdHk7CgogICAgLy8gQ29tcHV0ZSBhIHByZS1vcmRlciB0cmF2ZXJzYWwgb2YgdGhlIHN1YmNsYXNzIGZvcmVzdC4gIFdlIGFjdHVhbGx5IHdhbnQgYQogICAgLy8gcG9zdC1vcmRlciB0cmF2ZXJzYWwgYnV0IGl0IGlzIGVhc2llciB0byBjb21wdXRlIHRoZSBwcmUtb3JkZXIgYW5kIHVzZSBpdAogICAgLy8gaW4gcmV2ZXJzZS4KICAgIExpc3Q8Q2xhc3M+IHByZU9yZGVyID0gPENsYXNzPltdOwogICAgU2V0PENsYXNzPiBzZWVuID0gbmV3IFNldDxDbGFzcz4oKTsKCiAgICBDbGFzcyBvYmplY3RDbGFzcyA9IG51bGw7CiAgICBDbGFzcyBqc0ludGVyY2VwdG9yQ2xhc3MgPSBudWxsOwoKICAgIHZvaWQgd2FsayhDbGFzcyBjbHMpIHsKICAgICAgaWYgKGNscy5lbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcykgewogICAgICAgIG9iamVjdENsYXNzID0gY2xzOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoY2xzLmVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLmpzSW50ZXJjZXB0b3JDbGFzcykgewogICAgICAgIGpzSW50ZXJjZXB0b3JDbGFzcyA9IGNsczsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKHNlZW4uY29udGFpbnMoY2xzKSkgcmV0dXJuOwogICAgICBzZWVuLmFkZChjbHMpOwogICAgICB3YWxrKGNscy5zdXBlcmNsYXNzKTsKICAgICAgcHJlT3JkZXIuYWRkKGNscyk7CiAgICB9CgogICAgY2xhc3Nlcy5mb3JFYWNoKHdhbGspOwoKICAgIC8vIEZpbmQgd2hpY2ggY2xhc3NlcyBhcmUgbmVlZGVkIGFuZCB3aGljaCBhcmUgbm9uLWxlYWYgY2xhc3Nlcy4gIEFueSBjbGFzcwogICAgLy8gdGhhdCBpcyBub3QgbmVlZGVkIGNhbiBiZSB0cmVhdGVkIGFzIGEgbGVhZiBjbGFzcyBlcXVpdmFsZW50IHRvIHNvbWUKICAgIC8vIG5lZWRlZCBjbGFzcy4KCiAgICBTZXQ8Q2xhc3M+IG5lZWRlZENsYXNzZXMgPSBuZXcgU2V0PENsYXNzPigpOwogICAgU2V0PENsYXNzPiBub25MZWFmQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3M+KCk7CgogICAgTWFwPENsYXNzLCBMaXN0PENsYXNzPj4gZXh0ZW5zaW9uUG9pbnRzID0gY29tcHV0ZUV4dGVuc2lvblBvaW50cyhwcmVPcmRlcik7CgogICAgbmVlZGVkQ2xhc3Nlcy5hZGQob2JqZWN0Q2xhc3MpOwoKICAgIGZvciAoQ2xhc3MgY2xzIGluIHByZU9yZGVyLnJldmVyc2VkKSB7CiAgICAgIENsYXNzRW50aXR5IGNsYXNzRWxlbWVudCA9IGNscy5lbGVtZW50OwogICAgICAvLyBQb3N0LW9yZGVyIHRyYXZlcnNhbCBlbnN1cmVzIHdlIHZpc2l0IHRoZSBzdWJjbGFzc2VzIGJlZm9yZSB0aGVpcgogICAgICAvLyBzdXBlcmNsYXNzLiAgVGhpcyBtYWtlcyBpdCBlYXN5IHRvIHRlbGwgaWYgYSBjbGFzcyBpcyBuZWVkZWQgYmVjYXVzZSBhCiAgICAgIC8vIHN1YmNsYXNzIGlzIG5lZWRlZC4KICAgICAgYm9vbCBuZWVkZWQgPSBmYWxzZTsKICAgICAgaWYgKCFjbHMuaXNOYXRpdmUpIHsKICAgICAgICAvLyBNaXhpbiBhcHBsaWNhdGlvbnMgKG5hdGl2ZSttaXhpbikgYXJlIG5vbi1uYXRpdmUsIHNvIFtjbGFzc0VsZW1lbnRdCiAgICAgICAgLy8gaGFzIGFscmVhZHkgYmVlbiBlbWl0dGVkIGFzIGEgcmVndWxhciBjbGFzcy4gIE1hcmsgW2NsYXNzRWxlbWVudF0gYXMKICAgICAgICAvLyAnbmVlZGVkJyB0byBlbnN1cmUgdGhlIG5hdGl2ZSBzdXBlcmNsYXNzIGlzIG5lZWRlZC4KICAgICAgICBuZWVkZWQgPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKCFpc1RyaXZpYWxDbGFzcyhjbHMpKSB7CiAgICAgICAgbmVlZGVkID0gdHJ1ZTsKICAgICAgfSBlbHNlIGlmIChpbnRlcmNlcHRvckNsYXNzZXNOZWVkZWRCeUNvbnN0YW50cy5jb250YWlucyhjbGFzc0VsZW1lbnQpKSB7CiAgICAgICAgbmVlZGVkID0gdHJ1ZTsKICAgICAgfSBlbHNlIGlmIChjbGFzc2VzTmVlZGVkRm9yUnRpLmNvbnRhaW5zKGNsYXNzRWxlbWVudCkpIHsKICAgICAgICBuZWVkZWQgPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKGV4dGVuc2lvblBvaW50cy5jb250YWluc0tleShjbHMpKSB7CiAgICAgICAgbmVlZGVkID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoX25hdGl2ZURhdGEuaXNKc0ludGVyb3BDbGFzcyhjbGFzc0VsZW1lbnQpKSB7CiAgICAgICAgbmVlZGVkID0gdHJ1ZTsgLy8gVE9ETyhqYWNvYnIpOiB3ZSBkb24ndCBuZWVkIGFsbCBpbnRlcm9wIGNsYXNzZXMuCiAgICAgIH0gZWxzZSBpZiAoY2xzLmlzTmF0aXZlICYmCiAgICAgICAgICBfbmF0aXZlRGF0YS5oYXNOYXRpdmVUYWdzRm9yY2VkTm9uTGVhZihjbGFzc0VsZW1lbnQpKSB7CiAgICAgICAgbmVlZGVkID0gdHJ1ZTsKICAgICAgICBub25MZWFmQ2xhc3Nlcy5hZGQoY2xzKTsKICAgICAgfQoKICAgICAgaWYgKG5lZWRlZCB8fCBuZWVkZWRDbGFzc2VzLmNvbnRhaW5zKGNscykpIHsKICAgICAgICBuZWVkZWRDbGFzc2VzLmFkZChjbHMpOwogICAgICAgIG5lZWRlZENsYXNzZXMuYWRkKGNscy5zdXBlcmNsYXNzKTsKICAgICAgICBub25MZWFmQ2xhc3Nlcy5hZGQoY2xzLnN1cGVyY2xhc3MpOwogICAgICB9CiAgICB9CgogICAgLy8gQ29sbGVjdCBhbGwgdGhlIHRhZ3MgdGhhdCBtYXAgdG8gZWFjaCBuYXRpdmUgY2xhc3MuCgogICAgTWFwPENsYXNzLCBTZXQ8U3RyaW5nPj4gbGVhZlRhZ3MgPSBuZXcgTWFwPENsYXNzLCBTZXQ8U3RyaW5nPj4oKTsKICAgIE1hcDxDbGFzcywgU2V0PFN0cmluZz4+IG5vbmxlYWZUYWdzID0gbmV3IE1hcDxDbGFzcywgU2V0PFN0cmluZz4+KCk7CgogICAgZm9yIChDbGFzcyBjbHMgaW4gY2xhc3NlcykgewogICAgICBpZiAoIWNscy5pc05hdGl2ZSkgY29udGludWU7CiAgICAgIENsYXNzRW50aXR5IGVsZW1lbnQgPSBjbHMuZWxlbWVudDsKICAgICAgaWYgKF9uYXRpdmVEYXRhLmlzSnNJbnRlcm9wQ2xhc3MoZWxlbWVudCkpIGNvbnRpbnVlOwogICAgICBMaXN0PFN0cmluZz4gbmF0aXZlVGFncyA9IF9uYXRpdmVEYXRhLmdldE5hdGl2ZVRhZ3NPZkNsYXNzKGNscy5lbGVtZW50KTsKCiAgICAgIGlmIChub25MZWFmQ2xhc3Nlcy5jb250YWlucyhjbHMpIHx8IGV4dGVuc2lvblBvaW50cy5jb250YWluc0tleShjbHMpKSB7CiAgICAgICAgbm9ubGVhZlRhZ3MKICAgICAgICAgICAgLnB1dElmQWJzZW50KGNscywgKCkgPT4gbmV3IFNldDxTdHJpbmc+KCkpCiAgICAgICAgICAgIC5hZGRBbGwobmF0aXZlVGFncyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgQ2xhc3Mgc3VmZmljaW5nSW50ZXJjZXB0b3IgPSBjbHM7CiAgICAgICAgd2hpbGUgKCFuZWVkZWRDbGFzc2VzLmNvbnRhaW5zKHN1ZmZpY2luZ0ludGVyY2VwdG9yKSkgewogICAgICAgICAgc3VmZmljaW5nSW50ZXJjZXB0b3IgPSBzdWZmaWNpbmdJbnRlcmNlcHRvci5zdXBlcmNsYXNzOwogICAgICAgIH0KICAgICAgICBpZiAoc3VmZmljaW5nSW50ZXJjZXB0b3IgPT0gb2JqZWN0Q2xhc3MpIHsKICAgICAgICAgIHN1ZmZpY2luZ0ludGVyY2VwdG9yID0ganNJbnRlcmNlcHRvckNsYXNzOwogICAgICAgIH0KICAgICAgICBsZWFmVGFncwogICAgICAgICAgICAucHV0SWZBYnNlbnQoc3VmZmljaW5nSW50ZXJjZXB0b3IsICgpID0+IG5ldyBTZXQ8U3RyaW5nPigpKQogICAgICAgICAgICAuYWRkQWxsKG5hdGl2ZVRhZ3MpOwogICAgICB9CiAgICB9CgogICAgdm9pZCBmaWxsTmF0aXZlSW5mbyhDbGFzcyBjbHMpIHsKICAgICAgYXNzZXJ0KGNscy5uYXRpdmVMZWFmVGFncyA9PSBudWxsICYmCiAgICAgICAgICBjbHMubmF0aXZlTm9uTGVhZlRhZ3MgPT0gbnVsbCAmJgogICAgICAgICAgY2xzLm5hdGl2ZUV4dGVuc2lvbnMgPT0gbnVsbCk7CiAgICAgIGlmIChsZWFmVGFnc1tjbHNdICE9IG51bGwpIHsKICAgICAgICBjbHMubmF0aXZlTGVhZlRhZ3MgPSBsZWFmVGFnc1tjbHNdLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgICB9CiAgICAgIGlmIChub25sZWFmVGFnc1tjbHNdICE9IG51bGwpIHsKICAgICAgICBjbHMubmF0aXZlTm9uTGVhZlRhZ3MgPSBub25sZWFmVGFnc1tjbHNdLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgICB9CiAgICAgIGNscy5uYXRpdmVFeHRlbnNpb25zID0gZXh0ZW5zaW9uUG9pbnRzW2Nsc107CiAgICB9CgogICAgLy8gQWRkIHByb3BlcnRpZXMgY29udGFpbmluZyB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGNvbnN0cnVjdCBtYXBzIHVzZWQKICAgIC8vIGJ5IGdldE5hdGl2ZUludGVyY2VwdG9yIGFuZCBjdXN0b20gZWxlbWVudHMuCiAgICBpZiAoX25hdGl2ZUNvZGVnZW5FbnF1ZXVlci5oYXNJbnN0YW50aWF0ZWROYXRpdmVDbGFzc2VzKSB7CiAgICAgIGZpbGxOYXRpdmVJbmZvKGpzSW50ZXJjZXB0b3JDbGFzcyk7CiAgICAgIGZvciAoQ2xhc3MgY2xzIGluIGNsYXNzZXMpIHsKICAgICAgICBpZiAoIWNscy5pc05hdGl2ZSB8fCBuZWVkZWRDbGFzc2VzLmNvbnRhaW5zKGNscykpIHsKICAgICAgICAgIGZpbGxOYXRpdmVJbmZvKGNscyk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgLy8gVE9ETyhzcmEpOiBJc3N1ZSAjMTM3MzEtIHRoaXMgaXMgY29tbWVudGVkIG91dCBhcyBwYXJ0IG9mIGN1c3RvbQogICAgLy8gZWxlbWVudCBjb25zdHJ1Y3RvciB3b3JrLgogICAgLy8gKGZsb2l0c2NoOiB3YXMgcnVuIG9uIGV2ZXJ5IG5hdGl2ZSBjbGFzcy4pCiAgICAvL2Fzc2VydCghY2xhc3NFbGVtZW50Lmhhc0JhY2tlbmRNZW1iZXJzKTsKCiAgICByZXR1cm4gY2xhc3NlcwogICAgICAgIC53aGVyZSgoQ2xhc3MgY2xzKSA9PiBjbHMuaXNOYXRpdmUgJiYgIW5lZWRlZENsYXNzZXMuY29udGFpbnMoY2xzKSkKICAgICAgICAudG9TZXQoKTsKICB9CgogIC8vLyBDb21wdXRlcyB0aGUgbmF0aXZlIGNsYXNzZXMgdGhhdCBhcmUgZXh0ZW5kZWQgKHN1YmNsYXNzZWQpIGJ5IG5vbi1uYXRpdmUKICAvLy8gY2xhc3NlcyBhbmQgdGhlIHNldCBub24tbWF0aXZlIGNsYXNzZXMgdGhhdCBleHRlbmQgdGhlbS4gIChBIExpc3QgaXMgdXNlZAogIC8vLyBpbnN0ZWFkIG9mIGEgU2V0IGZvciBvdXQgc3RhYmlsaXR5KS4KICBNYXA8Q2xhc3MsIExpc3Q8Q2xhc3M+PiBjb21wdXRlRXh0ZW5zaW9uUG9pbnRzKExpc3Q8Q2xhc3M+IGNsYXNzZXMpIHsKICAgIENsYXNzIG5hdGl2ZVN1cGVyY2xhc3NPZihDbGFzcyBjbHMpIHsKICAgICAgaWYgKGNscyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgaWYgKGNscy5pc05hdGl2ZSkgcmV0dXJuIGNsczsKICAgICAgcmV0dXJuIG5hdGl2ZVN1cGVyY2xhc3NPZihjbHMuc3VwZXJjbGFzcyk7CiAgICB9CgogICAgQ2xhc3MgbmF0aXZlQW5jZXN0b3JPZihDbGFzcyBjbHMpIHsKICAgICAgcmV0dXJuIG5hdGl2ZVN1cGVyY2xhc3NPZihjbHMuc3VwZXJjbGFzcyk7CiAgICB9CgogICAgTWFwPENsYXNzLCBMaXN0PENsYXNzPj4gbWFwID0gbmV3IE1hcDxDbGFzcywgTGlzdDxDbGFzcz4+KCk7CgogICAgZm9yIChDbGFzcyBjbHMgaW4gY2xhc3NlcykgewogICAgICBpZiAoY2xzLmlzTmF0aXZlKSBjb250aW51ZTsKICAgICAgQ2xhc3MgbmF0aXZlQW5jZXN0b3IgPSBuYXRpdmVBbmNlc3Rvck9mKGNscyk7CiAgICAgIGlmIChuYXRpdmVBbmNlc3RvciAhPSBudWxsKSB7CiAgICAgICAgbWFwLnB1dElmQWJzZW50KG5hdGl2ZUFuY2VzdG9yLCAoKSA9PiA8Q2xhc3M+W10pLmFkZChjbHMpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbWFwOwogIH0KCiAgYm9vbCBpc1RyaXZpYWxDbGFzcyhDbGFzcyBjbHMpIHsKICAgIGJvb2wgbmVlZHNBY2Nlc3NvcihGaWVsZCBmaWVsZCkgewogICAgICByZXR1cm4gZmllbGQubmVlZHNHZXR0ZXIgfHwKICAgICAgICAgIGZpZWxkLm5lZWRzVW5jaGVja2VkU2V0dGVyIHx8CiAgICAgICAgICBmaWVsZC5uZWVkc0NoZWNrZWRTZXR0ZXI7CiAgICB9CgogICAgcmV0dXJuIGNscy5tZXRob2RzLmlzRW1wdHkgJiYKICAgICAgICBjbHMuaXNDaGVja3MuaXNFbXB0eSAmJgogICAgICAgIGNscy5jYWxsU3R1YnMuaXNFbXB0eSAmJgogICAgICAgICFjbHMuc3VwZXJjbGFzcy5pc1NpbXBsZU1peGluQXBwbGljYXRpb24gJiYKICAgICAgICAhY2xzLmZpZWxkcy5hbnkobmVlZHNBY2Nlc3Nvcik7CiAgfQoKICB2b2lkIHBvdGVudGlhbGx5Q29udmVydERhcnRDbG9zdXJlc1RvSnMoTGlzdDxqc0FzdC5TdGF0ZW1lbnQ+IHN0YXRlbWVudHMsCiAgICAgIEZ1bmN0aW9uRW50aXR5IG1lbWJlciwgTGlzdDxqc0FzdC5QYXJhbWV0ZXI+IHN0dWJQYXJhbWV0ZXJzKSB7CiAgICBqc0FzdC5FeHByZXNzaW9uIGNsb3N1cmVDb252ZXJ0ZXI7CiAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hQYXJhbWV0ZXIobWVtYmVyLAogICAgICAgIChEYXJ0VHlwZSB0eXBlLCBTdHJpbmcgbmFtZSwgXykgewogICAgICAvLyBJZiBbbmFtZV0gaXMgbm90IGluIFtzdHViUGFyYW1ldGVyc10sIHRoZW4gdGhlIHBhcmFtZXRlciBpcyBhbiBvcHRpb25hbAogICAgICAvLyBwYXJhbWV0ZXIgdGhhdCB3YXMgbm90IHByb3ZpZGVkIGZvciB0aGlzIHN0dWIuCiAgICAgIGZvciAoanNBc3QuUGFyYW1ldGVyIHN0dWJQYXJhbWV0ZXIgaW4gc3R1YlBhcmFtZXRlcnMpIHsKICAgICAgICBpZiAoc3R1YlBhcmFtZXRlci5uYW1lID09IG5hbWUpIHsKICAgICAgICAgIHR5cGUgPSB0eXBlLnVuYWxpYXNlZDsKICAgICAgICAgIGlmICh0eXBlLmlzRnVuY3Rpb25UeXBlKSB7CiAgICAgICAgICAgIGNsb3N1cmVDb252ZXJ0ZXIgPz89IF9lbWl0dGVyVGFzay5lbWl0dGVyCiAgICAgICAgICAgICAgICAuc3RhdGljRnVuY3Rpb25BY2Nlc3MoX2NvbW1vbkVsZW1lbnRzLmNsb3N1cmVDb252ZXJ0ZXIpOwoKICAgICAgICAgICAgLy8gVGhlIHBhcmFtZXRlciB0eXBlIGlzIGEgZnVuY3Rpb24gdHlwZSBlaXRoZXIgZGlyZWN0bHkgb3IgdGhyb3VnaAogICAgICAgICAgICAvLyB0eXBlZGVmKHMpLgogICAgICAgICAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlID0gdHlwZTsKICAgICAgICAgICAgaW50IGFyaXR5ID0gZnVuY3Rpb25UeXBlLnBhcmFtZXRlclR5cGVzLmxlbmd0aDsKICAgICAgICAgICAgc3RhdGVtZW50cy5hZGQoanMKICAgICAgICAgICAgICAgIC5zdGF0ZW1lbnQoJyMgPSAjKCMsICRhcml0eSknLCBbbmFtZSwgY2xvc3VyZUNvbnZlcnRlciwgbmFtZV0pKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICB9CgogIExpc3Q8anNBc3QuU3RhdGVtZW50PiBnZW5lcmF0ZVBhcmFtZXRlclN0dWJTdGF0ZW1lbnRzKAogICAgICBGdW5jdGlvbkVudGl0eSBtZW1iZXIsCiAgICAgIGJvb2wgaXNJbnRlcmNlcHRlZE1ldGhvZCwKICAgICAganNBc3QuTmFtZSBpbnZvY2F0aW9uTmFtZSwKICAgICAgTGlzdDxqc0FzdC5QYXJhbWV0ZXI+IHN0dWJQYXJhbWV0ZXJzLAogICAgICBMaXN0PGpzQXN0LkV4cHJlc3Npb24+IGFyZ3VtZW50c0J1ZmZlciwKICAgICAgaW50IGluZGV4T2ZMYXN0T3B0aW9uYWxBcmd1bWVudEluUGFyYW1ldGVycykgewogICAgLy8gVGhlIHRhcmdldCBKUyBmdW5jdGlvbiBtYXkgY2hlY2sgYXJndW1lbnRzLmxlbmd0aCBzbyB3ZSBuZWVkIHRvCiAgICAvLyBtYWtlIHN1cmUgbm90IHRvIHBhc3MgYW55IHVuc3BlY2lmaWVkIG9wdGlvbmFsIGFyZ3VtZW50cyB0byBpdC4KICAgIC8vIEZvciBleGFtcGxlLCBmb3IgdGhlIGZvbGxvd2luZyBEYXJ0IG1ldGhvZDoKICAgIC8vICAgZm9vKHt4LCB5LCB6fSk7CiAgICAvLyBUaGUgY2FsbDoKICAgIC8vICAgZm9vKHk6IDEpCiAgICAvLyBtdXN0IGJlIHR1cm5lZCBpbnRvIGEgSlMgY2FsbCB0bzoKICAgIC8vICAgZm9vKG51bGwsIHkpLgoKICAgIExpc3Q8anNBc3QuU3RhdGVtZW50PiBzdGF0ZW1lbnRzID0gPGpzQXN0LlN0YXRlbWVudD5bXTsKICAgIHBvdGVudGlhbGx5Q29udmVydERhcnRDbG9zdXJlc1RvSnMoc3RhdGVtZW50cywgbWVtYmVyLCBzdHViUGFyYW1ldGVycyk7CgogICAgU3RyaW5nIHRhcmdldDsKICAgIGpzQXN0LkV4cHJlc3Npb24gcmVjZWl2ZXI7CiAgICBMaXN0PGpzQXN0LkV4cHJlc3Npb24+IGFyZ3VtZW50czsKCiAgICBhc3NlcnQobmF0aXZlTWV0aG9kcy5jb250YWlucyhtZW1iZXIpLCBmYWlsZWRBdChtZW1iZXIpKTsKICAgIC8vIFdoZW4gY2FsbGluZyBhIEpTIG1ldGhvZCwgd2UgY2FsbCBpdCB3aXRoIHRoZSBuYXRpdmUgbmFtZSwgYW5kIG9ubHkgdGhlCiAgICAvLyBhcmd1bWVudHMgdXAgdW50aWwgdGhlIGxhc3Qgb25lIHByb3ZpZGVkLgogICAgdGFyZ2V0ID0gX25hdGl2ZURhdGEuZ2V0Rml4ZWRCYWNrZW5kTmFtZShtZW1iZXIpOwoKICAgIGlmIChpc0ludGVyY2VwdGVkTWV0aG9kKSB7CiAgICAgIHJlY2VpdmVyID0gYXJndW1lbnRzQnVmZmVyWzBdOwogICAgICBhcmd1bWVudHMgPSBhcmd1bWVudHNCdWZmZXIuc3VibGlzdCgKICAgICAgICAgIDEsIGluZGV4T2ZMYXN0T3B0aW9uYWxBcmd1bWVudEluUGFyYW1ldGVycyArIDEpOwogICAgfSBlbHNlIHsKICAgICAgLy8gTmF0aXZlIG1ldGhvZHMgdGhhdCBhcmUgbm90IGludGVyY2VwdGVkIG11c3QgYmUgc3RhdGljLgogICAgICBhc3NlcnQobWVtYmVyLmlzU3RhdGljLCBmYWlsZWRBdChtZW1iZXIpKTsKICAgICAgYXJndW1lbnRzID0gYXJndW1lbnRzQnVmZmVyLnN1Ymxpc3QoCiAgICAgICAgICAwLCBpbmRleE9mTGFzdE9wdGlvbmFsQXJndW1lbnRJblBhcmFtZXRlcnMgKyAxKTsKICAgICAgaWYgKF9uYXRpdmVEYXRhLmlzSnNJbnRlcm9wTWVtYmVyKG1lbWJlcikpIHsKICAgICAgICAvLyBmaXhlZEJhY2tlbmRQYXRoIGlzIGFsbG93ZWQgdG8gaGF2ZSB0aGUgZm9ybSBmb28uYmFyLmJheiBmb3IKICAgICAgICAvLyBpbnRlcm9wLiBUaGlzIHRlbXBsYXRlIGlzIHVuY2FjaGVkIHRvIGF2b2lkIHBvc3NpYmx5IHJ1bm5pbmcgb3V0IG9mCiAgICAgICAgLy8gbWVtb3J5IHdoZW4gRGFydDJKcyBpcyBydW4gaW4gc2VydmVyIG1vZGUuIEluIHJlYWxpdHkgdGhlIHJpc2sgb2YKICAgICAgICAvLyBjYWNoaW5nIHRoZXNlIHRlbXBsYXRlcyBjYXVzaW5nIGFuIGlzc3VlICBpcyB2ZXJ5IGxvdyBhcyBlYWNoIGNsYXNzCiAgICAgICAgLy8gYW5kIGxpYnJhcnkgdGhhdCB1c2VzIHR5cGVkIEphdmFTY3JpcHQgaW50ZXJvcCB3aWxsIGNyZWF0ZSBvbmx5IDEKICAgICAgICAvLyB1bmlxdWUgdGVtcGxhdGUuCiAgICAgICAgcmVjZWl2ZXIgPSBqcwogICAgICAgICAgICAudW5jYWNoZWRFeHByZXNzaW9uVGVtcGxhdGUoCiAgICAgICAgICAgICAgICBfbmF0aXZlRGF0YS5nZXRGaXhlZEJhY2tlbmRNZXRob2RQYXRoKG1lbWJlcikpCiAgICAgICAgICAgIC5pbnN0YW50aWF0ZShbXSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVjZWl2ZXIgPSBqcygndGhpcycpOwogICAgICB9CiAgICB9CiAgICBzdGF0ZW1lbnRzCiAgICAgICAgLmFkZChqcy5zdGF0ZW1lbnQoJ3JldHVybiAjLiMoIyknLCBbcmVjZWl2ZXIsIHRhcmdldCwgYXJndW1lbnRzXSkpOwoKICAgIHJldHVybiBzdGF0ZW1lbnRzOwogIH0KCiAgYm9vbCBpc1N1cGVydHlwZU9mTmF0aXZlQ2xhc3MoQ2xhc3NFbnRpdHkgZWxlbWVudCkgewogICAgaWYgKF9pbnRlcmNlcHRvckRhdGEuaXNNaXhlZEludG9JbnRlcmNlcHRlZENsYXNzKGVsZW1lbnQpKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHJldHVybiBzdWJ0eXBlc1tlbGVtZW50XSAhPSBudWxsOwogIH0KCiAgYm9vbCByZXF1aXJlc05hdGl2ZUlzQ2hlY2soQ2xhc3NFbnRpdHkgZWxlbWVudCkgewogICAgLy8gVE9ETyhzcmEpOiBSZW1vdmUgdGhpcyBmdW5jdGlvbi4gIEl0IGRldGVybWluZXMgaWYgYSBuYXRpdmUgdHlwZSBtYXkKICAgIC8vIHNhdGlzZnkgYSBjaGVjayBhZ2FpbnN0IFtlbGVtZW50XSwgaW4gd2hpY2ggY2FzZSBhbiBpbnRlcmNlcHRvciBtdXN0IGJlCiAgICAvLyB1c2VkLiAgV2Ugc2hvdWxkIGFsc28gdXNlIGFuIGludGVyY2VwdG9yIGlmIHRoZSBjaGVjayBjYW4ndCBiZSBzYXRpc2ZpZWQKICAgIC8vIGJ5IGEgbmF0aXZlIGNsYXNzIGluIGNhc2Ugd2UgZ2V0IGEgbmF0aXZlIGluc3RhbmNlIHRoYXQgdHJpZXMgdG8gc3Bvb2YKICAgIC8vIHRoZSB0eXBlIGluZm8uICBpLmUgdGhlIGNyaXRlcmlhIGZvciB3aGV0aGVyIG9yIG5vdCB0byB1c2UgYW4gaW50ZXJjZXB0b3IKICAgIC8vIGlzIHdoZXRoZXIgdGhlIHJlY2VpdmVyIGNhbiBiZSBuYXRpdmUsIG5vdCB0aGUgdHlwZSBvZiB0aGUgdGVzdC4KICAgIENsYXNzRW50aXR5IGNscyA9IGVsZW1lbnQ7CiAgICBpZiAoX25hdGl2ZURhdGEuaXNOYXRpdmVPckV4dGVuZHNOYXRpdmUoY2xzKSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gaXNTdXBlcnR5cGVPZk5hdGl2ZUNsYXNzKGVsZW1lbnQpOwogIH0KfQqBbwBOTjwBKwEZTD0kISAuKTwqATYVARYmIzYBNiEBMzEqATo3KgExQQERSgFGMSc5SAFKBkxNBk9GHQZRUE9QEQZQRkxPDgZRGQZPHwZPSSMbPDM3ASsBUVETJigBHiUBGzgbEAg/IhAIJhUcGQYBGwFQTBUBMTIBUAEkASsuS1AdGxtPUD8XKRdPFz8XNRcIOEshQhchCAEzICssCAYBOwFGSQEhIyk7TwFOFDchDypAQgozNQoRSCEIBgElKyspI0QIJkoIMwYBTzQ/KiM8HwoIBgFIITIvARNMEgQBT1ArSCokJDEGASgxBgFBASEiNCRDCAYQBAEjJiIoJAYBIiAhNCgEAUxFJzEqUTg+KiElNkkBUBsuPB5REwwKCAgEATkdICEsLjVHRzMZERMpFwE8TAETHyYBPk8xNgEfJSs7DUExKzszSE9NT00cFik/Hg8fCAYPTAEXBAE3QRMGASYEATRMT1BOUUgfPy4EAgEzcGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9uYXRpdmVfZW1pdHRlci5kYXJ0QHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2VtaXR0ZXIvdHlwZV90ZXN0X3JlZ2lzdHJ5LmRhcnSJdi8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuanNfZW1pdHRlci50eXBlX3Rlc3RfcmVnaXN0cnk7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzLmRhcnQnCiAgICBzaG93IFJ1bnRpbWVUeXBlc0NoZWNrcywgUnVudGltZVR5cGVzQ2hlY2tzQnVpbGRlcjsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfY29kZWdlbi5kYXJ0JwogICAgc2hvdyBSdW50aW1lVHlwZXNTdWJzdGl0dXRpb25zOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY29kZWdlbl93b3JsZF9idWlsZGVyLmRhcnQnOwoKY2xhc3MgVHlwZVRlc3RSZWdpc3RyeSB7CiAgZmluYWwgRWxlbWVudEVudmlyb25tZW50IF9lbGVtZW50RW52aXJvbm1lbnQ7CgogIC8vLyBBZnRlciBbY29tcHV0ZU5lZWRlZENsYXNzZXNdIHRoaXMgc2V0IG9ubHkgY29udGFpbnMgY2xhc3NlcyB0aGF0IGFyZSBvbmx5CiAgLy8vIHVzZWQgZm9yIFJUSS4KICBTZXQ8Q2xhc3NFbnRpdHk+IF9ydGlOZWVkZWRDbGFzc2VzOwoKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CgogIFJ1bnRpbWVUeXBlc0NoZWNrcyBfcnRpQ2hlY2tzOwoKICBUeXBlVGVzdFJlZ2lzdHJ5KHRoaXMuX29wdGlvbnMsIHRoaXMuX2VsZW1lbnRFbnZpcm9ubWVudCk7CgogIFJ1bnRpbWVUeXBlc0NoZWNrcyBnZXQgcnRpQ2hlY2tzIHsKICAgIGFzc2VydCgKICAgICAgICBfcnRpQ2hlY2tzICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoTk9fTE9DQVRJT05fU1BBTk5BQkxFLAogICAgICAgICAgICAiUnVudGltZVR5cGVzQ2hlY2tzIGhhcyBub3QgYmVlbiBjb21wdXRlZCB5ZXQuIikpOwogICAgcmV0dXJuIF9ydGlDaGVja3M7CiAgfQoKICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gZ2V0IHJ0aU5lZWRlZENsYXNzZXMgewogICAgYXNzZXJ0KAogICAgICAgIF9ydGlOZWVkZWRDbGFzc2VzICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoTk9fTE9DQVRJT05fU1BBTk5BQkxFLAogICAgICAgICAgICAicnRpTmVlZGVkQ2xhc3NlcyBoYXMgbm90IGJlZW4gY29tcHV0ZWQgeWV0LiIpKTsKICAgIHJldHVybiBfcnRpTmVlZGVkQ2xhc3NlczsKICB9CgogIHZvaWQgY29tcHV0ZVJ0aU5lZWRlZENsYXNzZXMoUnVudGltZVR5cGVzU3Vic3RpdHV0aW9ucyBydGlTdWJzdGl0dXRpb25zLAogICAgICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGxpdmVNZW1iZXJzKSB7CiAgICBfcnRpTmVlZGVkQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CgogICAgdm9pZCBhZGRDbGFzc1dpdGhTdXBlcmNsYXNzZXMoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICAgIF9ydGlOZWVkZWRDbGFzc2VzLmFkZChjbHMpOwogICAgICBmb3IgKENsYXNzRW50aXR5IHN1cGVyY2xhc3MgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFN1cGVyQ2xhc3MoY2xzKTsKICAgICAgICAgIHN1cGVyY2xhc3MgIT0gbnVsbDsKICAgICAgICAgIHN1cGVyY2xhc3MgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFN1cGVyQ2xhc3Moc3VwZXJjbGFzcykpIHsKICAgICAgICBfcnRpTmVlZGVkQ2xhc3Nlcy5hZGQoc3VwZXJjbGFzcyk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGFkZENsYXNzZXNXaXRoU3VwZXJjbGFzc2VzKEl0ZXJhYmxlPENsYXNzRW50aXR5PiBjbGFzc2VzKSB7CiAgICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xzIGluIGNsYXNzZXMpIHsKICAgICAgICBhZGRDbGFzc1dpdGhTdXBlcmNsYXNzZXMoY2xzKTsKICAgICAgfQogICAgfQoKICAgIC8vIEFkZCBjbGFzc2VzIHRoYXQgYXJlIHJlZmVyZW5jZWQgYnkgdHlwZSBhcmd1bWVudHMgb3Igc3Vic3RpdHV0aW9ucyBpbgogICAgLy8gYXJndW1lbnQgY2hlY2tzLgogICAgYWRkQ2xhc3Nlc1dpdGhTdXBlcmNsYXNzZXMocnRpQ2hlY2tzLnJlcXVpcmVkQ2xhc3Nlcyk7CiAgfQoKICB2b2lkIGNvbXB1dGVSZXF1aXJlZFR5cGVDaGVja3MoCiAgICAgIFJ1bnRpbWVUeXBlc0NoZWNrc0J1aWxkZXIgcnRpQ2hlY2tzQnVpbGRlciwgQ29kZWdlbldvcmxkIGNvZGVnZW5Xb3JsZCkgewogICAgX3J0aUNoZWNrcyA9IHJ0aUNoZWNrc0J1aWxkZXIuY29tcHV0ZVJlcXVpcmVkQ2hlY2tzKGNvZGVnZW5Xb3JsZCwgX29wdGlvbnMpOwogIH0KfQpMAE5OPAEvARkiJCo4MiQaMQEZMAFQFCYBIgEhAT0BJQwcKD8XBAEvDCMoPR4EAUssMAE1IkweSCsIBgFFKScIBgFNGDsEASJPUQQCATdwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL3R5cGVfdGVzdF9yZWdpc3RyeS5kYXJ0M3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2VsZW1lbnRzL2luZGV4ZWQuZGFydKFALy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBJbmRleGVkIGVudGl0eSBpbnRlcmZhY2VzIGZvciBtb2RlbGluZyBlbGVtZW50cyBkZXJpdmVkIGZyb20gS2VybmVsIElSLgoKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKCmFic3RyYWN0IGNsYXNzIF9JbmRleGVkIHsKICBpbnQgX2luZGV4Owp9CgphYnN0cmFjdCBjbGFzcyBJbmRleGVkTGlicmFyeSBleHRlbmRzIF9JbmRleGVkIGltcGxlbWVudHMgTGlicmFyeUVudGl0eSB7CiAgLy8vIExpYnJhcnkgaW5kZXggdXNlZCBmb3IgZmFzdCBsb29rdXAgaW4gW0tlcm5lbFRvRWxlbWVudE1hcEJhc2VdLgogIGludCBnZXQgbGlicmFyeUluZGV4ID0+IF9pbmRleDsKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IDcgKiBfaW5kZXggKyAyOwp9CgphYnN0cmFjdCBjbGFzcyBJbmRleGVkQ2xhc3MgZXh0ZW5kcyBfSW5kZXhlZCBpbXBsZW1lbnRzIENsYXNzRW50aXR5IHsKICAvLy8gQ2xhc3MgaW5kZXggdXNlZCBmb3IgZmFzdCBsb29rdXAgaW4gW0tlcm5lbFRvRWxlbWVudE1hcEJhc2VdLgogIGludCBnZXQgY2xhc3NJbmRleCA9PiBfaW5kZXg7CiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiA3ICogX2luZGV4ICsgMTsKfQoKYWJzdHJhY3QgY2xhc3MgSW5kZXhlZE1lbWJlciBleHRlbmRzIF9JbmRleGVkIGltcGxlbWVudHMgTWVtYmVyRW50aXR5IHsKICAvLy8gTWVtYmVyIGluZGV4IHVzZWQgZm9yIGZhc3QgbG9va3VwIGluIFtLZXJuZWxUb0VsZW1lbnRNYXBCYXNlXS4KICBpbnQgZ2V0IG1lbWJlckluZGV4ID0+IF9pbmRleDsKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IDcgKiBfaW5kZXg7Cn0KCmFic3RyYWN0IGNsYXNzIEluZGV4ZWRGdW5jdGlvbiBleHRlbmRzIF9JbmRleGVkCiAgICBpbXBsZW1lbnRzIEluZGV4ZWRNZW1iZXIsIEZ1bmN0aW9uRW50aXR5IHt9CgphYnN0cmFjdCBjbGFzcyBJbmRleGVkQ29uc3RydWN0b3IKICAgIGltcGxlbWVudHMgSW5kZXhlZEZ1bmN0aW9uLCBDb25zdHJ1Y3RvckVudGl0eSB7fQoKYWJzdHJhY3QgY2xhc3MgSW5kZXhlZEZpZWxkIGltcGxlbWVudHMgSW5kZXhlZE1lbWJlciwgRmllbGRFbnRpdHkge30KCmFic3RyYWN0IGNsYXNzIEluZGV4ZWRUeXBlVmFyaWFibGUgZXh0ZW5kcyBfSW5kZXhlZAogICAgaW1wbGVtZW50cyBUeXBlVmFyaWFibGVFbnRpdHkgewogIC8vLyBUeXBlIHZhcmlhYmxlIGluZGV4IHVzZWQgZm9yIGZhc3QgbG9va3VwIGluIFtLZXJuZWxUb0VsZW1lbnRNYXBCYXNlXS4KICBpbnQgZ2V0IHR5cGVWYXJpYWJsZUluZGV4ID0+IF9pbmRleDsKfQoKYWJzdHJhY3QgY2xhc3MgSW5kZXhlZFR5cGVkZWYgZXh0ZW5kcyBfSW5kZXhlZCBpbXBsZW1lbnRzIFR5cGVkZWZFbnRpdHkgewogIC8vLyBUeXBlZGVmIGluZGV4IHVzZWQgZm9yIGZhc3QgbG9va3VwIGluIFtLZXJuZWxUb0VsZW1lbnRNYXBCYXNlXS4KICBpbnQgZ2V0IHR5cGVkZWZJbmRleCA9PiBfaW5kZXg7Cn0KCmFic3RyYWN0IGNsYXNzIEluZGV4ZWRMb2NhbCBleHRlbmRzIF9JbmRleGVkIGltcGxlbWVudHMgTG9jYWwgewogIGludCBnZXQgbG9jYWxJbmRleCA9PiBfaW5kZXg7Cn0KCi8vLyBCYXNlIGltcGxlbWVudGF0aW9uIGZvciBhbiBpbmRleCBiYXNlZCBtYXAgb2YgZW50aXRpZXMgb2YgdHlwZSBbRV0uCmFic3RyYWN0IGNsYXNzIEVudGl0eU1hcEJhc2U8RSBleHRlbmRzIF9JbmRleGVkPiB7CiAgYm9vbCBfY2xvc2VkID0gZmFsc2U7CgogIGludCBfc2l6ZSA9IDA7CiAgTGlzdDxFPiBfbGlzdCA9IDxFPltdOwoKICAvLy8gUmV0dXJucyB0aGUgW2luZGV4XXRoIGVudGl0eSBpbiB0aGUgbWFwLgogIEUgZ2V0RW50aXR5KGludCBpbmRleCkgPT4gX2xpc3RbaW5kZXhdOwoKICAvLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIG5vbi1udWxsIGVudGl0aWVzIGluIHRoZSBtYXAuCiAgaW50IGdldCBzaXplID0+IF9zaXplOwoKICAvLy8gUmV0dXJucyB0aGUgbnVtYmVyIChudWxsIGFuZCBub24tbnVsbCkgZW50aXRpZXMgaW4gdGhlIG1hcC4KICBpbnQgZ2V0IGxlbmd0aCA9PiBfbGlzdC5sZW5ndGg7CgogIC8vLyBDbG9zZXMgdGhlIGVudGl0eSBtYXAsIHByb2hpYml0aW5nIGZ1cnRoZXIgcmVnaXN0cmF0aW9uLgogIC8vLwogIC8vLyBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgbm8gbmV3IGVudGl0aWVzIGFyZSBhZGRlZCB3aGlsZSBzZXJpYWxpemluZwogIC8vLyBtb2R1bGFyIGNvZGUgZ2VuZXJhdGlvbiBkYXRhLgogIHZvaWQgY2xvc2UoKSB7CiAgICBfY2xvc2VkID0gdHJ1ZTsKICB9Cn0KCi8vLyBJbmRleCBiYXNlZCBtYXAgb2YgZW50aXRpZXMgb2YgdHlwZSBbRV0uCmNsYXNzIEVudGl0eU1hcDxFIGV4dGVuZHMgX0luZGV4ZWQ+IGV4dGVuZHMgRW50aXR5TWFwQmFzZTxFPiB7CiAgLy8vIFJlZ2lzdGVycyBhIG5ldyBbZW50aXR5XS4KICAvLy8KICAvLy8gVGhlIGluZGV4IG9mIFtlbnRpdHldIGlzIHNldCB0byBtYXRjaCBpdHMgaW5kZXggaW4gdGhlIGVudGl0eSBsaXN0IGluIHRoaXMKICAvLy8gbWFwLgogIEUwIHJlZ2lzdGVyPEUwIGV4dGVuZHMgRT4oRTAgZW50aXR5KSB7CiAgICBhc3NlcnQoCiAgICAgICAgIV9jbG9zZWQsICJUcnlpbmcgdG8gcmVnaXN0ZXIgJGVudGl0eSBAICR7X2xpc3QubGVuZ3RofSB3aGVuIGNsb3NlZC4iKTsKICAgIGFzc2VydChlbnRpdHkgIT0gbnVsbCk7CiAgICBhc3NlcnQoZW50aXR5Ll9pbmRleCA9PSBudWxsKTsKICAgIGVudGl0eS5faW5kZXggPSBfbGlzdC5sZW5ndGg7CiAgICBfbGlzdC5hZGQoZW50aXR5KTsKICAgIF9zaXplKys7CiAgICByZXR1cm4gZW50aXR5OwogIH0KCiAgLy8vIFJlZ2lzdGVycyBhIG5ldyBbZW50aXR5XSBieSB0aGUgZ2l2ZW4gW2luZGV4XS4KICBFMCByZWdpc3RlckJ5SW5kZXg8RTAgZXh0ZW5kcyBFPihpbnQgaW5kZXgsIEUwIGVudGl0eSkgewogICAgYXNzZXJ0KGluZGV4ID49IF9saXN0Lmxlbmd0aCk7CiAgICBfbGlzdC5sZW5ndGggPSBpbmRleDsKICAgIHJldHVybiByZWdpc3RlcihlbnRpdHkpOwogIH0KCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBub24tbnVsbCBlbnRpdHkuCiAgdm9pZCBmb3JFYWNoPEUwIGV4dGVuZHMgRT4odm9pZCBmKEUwIGVudGl0eSkpIHsKICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBfbGlzdC5sZW5ndGg7IGluZGV4KyspIHsKICAgICAgRSBlbnRpdHkgPSBfbGlzdFtpbmRleF07CiAgICAgIGlmIChlbnRpdHkgIT0gbnVsbCkgewogICAgICAgIGYoZW50aXR5KTsKICAgICAgfQogICAgfQogIH0KfQoKLy8vIEJhc2UgaW1wbGVtZW50YXRpb24gb2YgYW4gaW5kZXggYmFzZWQgbWFwIG9mIGVudGl0aWVzIG9mIHR5cGUgW0VdIHdpdGggYQovLy8gY29ycmVzcG9uZGluZyBkYXRhIG9iamVjdCBvZiB0eXBlIFtEXS4KYWJzdHJhY3QgY2xhc3MgRW50aXR5RGF0YU1hcEJhc2U8RSBleHRlbmRzIF9JbmRleGVkLCBEPgogICAgZXh0ZW5kcyBFbnRpdHlNYXBCYXNlPEU+IHsKICBMaXN0PEQ+IF9kYXRhID0gPEQ+W107CgogIC8vLyBSZXR1cm5zIHRoZSBkYXRhIG9iamVjdCBzdG9yZWQgZm9yIHRoZSBbaW5kZXhddGggZW50aXR5LgogIEQgZ2V0RGF0YShFIGVudGl0eSkgewogICAgaW50IGluZGV4ID0gZW50aXR5Ll9pbmRleDsKICAgIGlmIChpbmRleCA8IF9saXN0Lmxlbmd0aCAmJiBpbmRleCA+PSBfZGF0YS5sZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoCiAgICAgICAgICAnRGF0YSBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBjcmVhdGVkIGZvciAke19saXN0W2luZGV4XX0uJyk7CiAgICB9CiAgICByZXR1cm4gX2RhdGFbaW5kZXhdOwogIH0KfQoKLy8vIEluZGV4IGJhc2VkIG1hcCBvZiBlbnRpdGllcyBvZiB0eXBlIFtFXSB3aXRoIGEgY29ycmVzcG9uZGluZyBkYXRhIG9iamVjdAovLy8gb2YgdHlwZSBbRF0uCmNsYXNzIEVudGl0eURhdGFNYXA8RSBleHRlbmRzIF9JbmRleGVkLCBEPiBleHRlbmRzIEVudGl0eURhdGFNYXBCYXNlPEUsIEQ+IHsKICAvLy8gTWFyayBlbnRpdHkgW2luZGV4XSBhcyBtaXNzaW5nCiAgdm9pZCBza2lwSW5kZXgoaW50IGluZGV4KSB7CiAgICBhc3NlcnQoaW5kZXggPT0gX2xpc3QubGVuZ3RoKTsKICAgIF9saXN0LmFkZChudWxsKTsKICAgIF9kYXRhLmFkZChudWxsKTsKICB9CgogIC8vLyBSZWdpc3RlcnMgYSBuZXcgW2VudGl0eV0gd2l0aCBhbiBhc3NvY2lhdGVkIFtkYXRhXSBvYmplY3QuCiAgLy8vCiAgLy8vIFRoZSBpbmRleCBvZiBbZW50aXR5XSBpcyBzZXQgdG8gbWF0Y2ggaXRzIGluZGV4IGluIHRoZSBlbnRpdHkgYW5kIGRhdGEKICAvLy8gbGlzdHMgaW4gdGhpcyBtYXAuCiAgRTAgcmVnaXN0ZXI8RTAgZXh0ZW5kcyBFLCBEMCBleHRlbmRzIEQ+KEUwIGVudGl0eSwgRDAgZGF0YSkgewogICAgYXNzZXJ0KAogICAgICAgICFfY2xvc2VkLCAiVHJ5aW5nIHRvIHJlZ2lzdGVyICRlbnRpdHkgQCAke19saXN0Lmxlbmd0aH0gd2hlbiBjbG9zZWQuIik7CiAgICBhc3NlcnQoZW50aXR5ICE9IG51bGwpOwogICAgYXNzZXJ0KGVudGl0eS5faW5kZXggPT0gbnVsbCk7CiAgICBhc3NlcnQoCiAgICAgICAgX2xpc3QubGVuZ3RoID09IF9kYXRhLmxlbmd0aCwKICAgICAgICAnRGF0YSBsaXN0IGxlbmd0aCAke19kYXRhLmxlbmd0aH0gaW5jb25zaXN0ZW50ICcKICAgICAgICAnd2l0aCBlbnRpdHkgbGlzdCBsZW5ndGggJHtfbGlzdC5sZW5ndGh9LicpOwogICAgZW50aXR5Ll9pbmRleCA9IF9saXN0Lmxlbmd0aDsKICAgIF9saXN0LmFkZChlbnRpdHkpOwogICAgX3NpemUrKzsKICAgIGFzc2VydChkYXRhICE9IG51bGwpOwogICAgX2RhdGEuYWRkKGRhdGEpOwogICAgcmV0dXJuIGVudGl0eTsKICB9CgogIC8vLyBSZWdpc3RlcnMgYSBuZXcgW2VudGl0eV0gd2l0aCBhbiBhc3NvY2lhdGVkIFtkYXRhXSBvYmplY3QgYnkgdGhlIGdpdmVuCiAgLy8vIFtpbmRleF0uCiAgRTAgcmVnaXN0ZXJCeUluZGV4PEUwIGV4dGVuZHMgRSwgRDAgZXh0ZW5kcyBEPigKICAgICAgaW50IGluZGV4LCBFMCBlbnRpdHksIEQwIGRhdGEpIHsKICAgIGFzc2VydChpbmRleCA+PSBfbGlzdC5sZW5ndGgpOwogICAgX2xpc3QubGVuZ3RoID0gX2RhdGEubGVuZ3RoID0gaW5kZXg7CiAgICByZXR1cm4gcmVnaXN0ZXIoZW50aXR5LCBkYXRhKTsKICB9CgogIC8vLyBDYWxscyBbZl0gZm9yIGVhY2ggbm9uLW51bGwgZW50aXR5IHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgZGF0YSBvYmplY3QuCiAgdm9pZCBmb3JFYWNoPEUwIGV4dGVuZHMgRSwgRDAgZXh0ZW5kcyBEPih2b2lkIGYoRTAgZW50aXR5LCBEMCBkYXRhKSkgewogICAgaWYgKF9saXN0Lmxlbmd0aCAhPSBfZGF0YS5sZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoJ0RhdGEgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgY3JlYXRlZC4nKTsKICAgIH0KICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBfbGlzdC5sZW5ndGg7IGluZGV4KyspIHsKICAgICAgRSBlbnRpdHkgPSBfbGlzdFtpbmRleF07CiAgICAgIGlmIChlbnRpdHkgIT0gbnVsbCkgewogICAgICAgIGYoZW50aXR5LCBfZGF0YVtpbmRleF0pOwogICAgICB9CiAgICB9CiAgfQp9CgovLy8gQmFzZSBpbXBsZW1lbnRhdGlvbiBmb3IgYW4gaW5kZXggYmFzZWQgb2YgZW50aXRpZXMgb2YgdHlwZSBbRV0gd2l0aCBhCi8vLyBjb3JyZXNwb25kaW5nIGRhdGEgb2JqZWN0IG9mIHR5cGUgW0RdIGFuZCBhbiBlbnZpcm9ubWVudCBvZiB0eXBlIFtWXS4KYWJzdHJhY3QgY2xhc3MgRW50aXR5RGF0YUVudk1hcEJhc2U8RSBleHRlbmRzIF9JbmRleGVkLCBELCBWPgogICAgZXh0ZW5kcyBFbnRpdHlEYXRhTWFwQmFzZTxFLCBEPiB7CiAgTGlzdDxWPiBfZW52ID0gPFY+W107CgogIC8vLyBSZXR1cm5zIHRoZSBlbnZpcm9ubWVudCBvYmplY3Qgc3RvcmVkIGZvciB0aGUgW2luZGV4XXRoIGVudGl0eS4KICBWIGdldEVudihFIGVudGl0eSkgewogICAgaW50IGluZGV4ID0gZW50aXR5Ll9pbmRleDsKICAgIGlmIChpbmRleCA8IF9saXN0Lmxlbmd0aCAmJiBpbmRleCA+PSBfZW52Lmxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigKICAgICAgICAgICdFbnYgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgY3JlYXRlZCBmb3IgJHtfbGlzdFtpbmRleF19LicpOwogICAgfQogICAgcmV0dXJuIF9lbnZbaW5kZXhdOwogIH0KfQoKLy8vIEluZGV4IGJhc2VkIG9mIGVudGl0aWVzIG9mIHR5cGUgW0VdIHdpdGggYSBjb3JyZXNwb25kaW5nIGRhdGEgb2JqZWN0IG9mCi8vLyB0eXBlIFtEXSBhbmQgYW4gZW52aXJvbm1lbnQgb2YgdHlwZSBbVl0uCmNsYXNzIEVudGl0eURhdGFFbnZNYXA8RSBleHRlbmRzIF9JbmRleGVkLCBELCBWPgogICAgZXh0ZW5kcyBFbnRpdHlEYXRhRW52TWFwQmFzZTxFLCBELCBWPiB7CiAgLy8vIFJlZ2lzdGVycyBhIG5ldyBbZW50aXR5XSB3aXRoIGFuIGFzc29jaWF0ZWQgW2RhdGFdIG9iamVjdCBhbmQgZW52aXJvbm1lbnQKICAvLy8gW2Vudl0uCiAgLy8vCiAgLy8vIFRoZSBpbmRleCBvZiBbZW50aXR5XSBpcyBzZXQgdG8gbWF0Y2ggaXRzIGluZGV4IGluIHRoZSBlbnRpdHksIGRhdGEgYW5kCiAgLy8vIGVudmlyb25tZW50IGxpc3RzIGluIHRoaXMgbWFwLgogIEUwIHJlZ2lzdGVyPEUwIGV4dGVuZHMgRSwgRDAgZXh0ZW5kcyBELCBWMCBleHRlbmRzIFY+KAogICAgICBFMCBlbnRpdHksIEQwIGRhdGEsIFYwIGVudikgewogICAgYXNzZXJ0KAogICAgICAgICFfY2xvc2VkLCAiVHJ5aW5nIHRvIHJlZ2lzdGVyICRlbnRpdHkgQCAke19saXN0Lmxlbmd0aH0gd2hlbiBjbG9zZWQuIik7CiAgICBhc3NlcnQoZW50aXR5ICE9IG51bGwpOwogICAgYXNzZXJ0KGVudGl0eS5faW5kZXggPT0gbnVsbCk7CiAgICBhc3NlcnQoCiAgICAgICAgX2xpc3QubGVuZ3RoID09IF9kYXRhLmxlbmd0aCwKICAgICAgICAnRGF0YSBsaXN0IGxlbmd0aCAke19kYXRhLmxlbmd0aH0gaW5jb25zaXN0ZW50ICcKICAgICAgICAnd2l0aCBlbnRpdHkgbGlzdCBsZW5ndGggJHtfbGlzdC5sZW5ndGh9LicpOwogICAgYXNzZXJ0KAogICAgICAgIF9saXN0Lmxlbmd0aCA9PSBfZW52Lmxlbmd0aCwKICAgICAgICAnRW52IGxpc3QgbGVuZ3RoICR7X2Vudi5sZW5ndGh9IGluY29uc2lzdGVudCAnCiAgICAgICAgJ3dpdGggZW50aXR5IGxpc3QgbGVuZ3RoICR7X2xpc3QubGVuZ3RofS4nKTsKICAgIGVudGl0eS5faW5kZXggPSBfbGlzdC5sZW5ndGg7CiAgICBfbGlzdC5hZGQoZW50aXR5KTsKICAgIF9zaXplKys7CiAgICBhc3NlcnQoZGF0YSAhPSBudWxsKTsKICAgIF9kYXRhLmFkZChkYXRhKTsKICAgIGFzc2VydChlbnYgIT0gbnVsbCk7CiAgICBfZW52LmFkZChlbnYpOwogICAgcmV0dXJuIGVudGl0eTsKICB9CgogIC8vLyBSZWdpc3RlcnMgYSBuZXcgW2VudGl0eV0gd2l0aCBhbiBhc3NvY2lhdGVkIFtkYXRhXSBvYmplY3QgYW5kIGVudmlyb25tZW50CiAgLy8vIFtlbnZdIGJ5IHRoZSBnaXZlbiBbaW5kZXhdLgogIEUwIHJlZ2lzdGVyQnlJbmRleDxFMCBleHRlbmRzIEUsIEQwIGV4dGVuZHMgRCwgVjAgZXh0ZW5kcyBWPigKICAgICAgaW50IGluZGV4LCBFMCBlbnRpdHksIEQwIGRhdGEsIFYwIGVudikgewogICAgYXNzZXJ0KGluZGV4ID49IF9saXN0Lmxlbmd0aCk7CiAgICBfbGlzdC5sZW5ndGggPSBfZGF0YS5sZW5ndGggPSBfZW52Lmxlbmd0aCA9IGluZGV4OwogICAgcmV0dXJuIHJlZ2lzdGVyKGVudGl0eSwgZGF0YSwgZW52KTsKICB9CgogIC8vLyBDYWxscyBbZl0gZm9yIGVhY2ggbm9uLW51bGwgZW50aXR5IHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgZGF0YSBvYmplY3QgYW5kCiAgLy8vIGVudmlyb25tZW50LgogIHZvaWQgZm9yRWFjaDxFMCBleHRlbmRzIEUsIEQwIGV4dGVuZHMgRCwgVjAgZXh0ZW5kcyBWPigKICAgICAgdm9pZCBmKEUwIGVudGl0eSwgRDAgZGF0YSwgVjAgZW52KSkgewogICAgaWYgKF9saXN0Lmxlbmd0aCAhPSBfZGF0YS5sZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoJ0RhdGEgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgY3JlYXRlZC4nKTsKICAgIH0KICAgIGlmIChfbGlzdC5sZW5ndGggIT0gX2Vudi5sZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoJ0VudiBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBjcmVhdGVkLicpOwogICAgfQogICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IF9saXN0Lmxlbmd0aDsgaW5kZXgrKykgewogICAgICBFIGVudGl0eSA9IF9saXN0W2luZGV4XTsKICAgICAgaWYgKGVudGl0eSAhPSBudWxsKSB7CiAgICAgICAgZihlbnRpdHksIF9kYXRhW2luZGV4XSwgX2VudltpbmRleF0pOwogICAgICB9CiAgICB9CiAgfQp9CoEKAE5OPAFMASQBGg4CAUpGIgwmAgFGRCAMJgIBSEUhDCICATAwASI1AUUBNCRMJwIBSkYiAgFAIAIBSDMYAREZAS8qAToZAUIiAT8GTiQRFAQCAS0/IAZRCykMUBwjIhcNEwQBNTsjGh0EASoyOR8cEwgGBAIBTSs4HxkBPxgfORxLBhkEAgFNEU0lHiMVFQQBQQZNGUAMUBwjDCY5NSIXDRoVEwQBTQ8yJyMpIwQBTUkoSAY5HxwhCAYEAgFKSj4mGAFGFx84HEoGGAQCAUwtMSxQDQZOJTkkDFAcIwwmOTUMJTc1IhcNGhUZExMEAVAiQC8jNygEAVATOiwoSAYnRwY5HxwuCAYEAgEqcGFja2FnZTpjb21waWxlci9zcmMvZWxlbWVudHMvaW5kZXhlZC5kYXJ0L3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2lyL2NvbnN0YW50cy5kYXJ0ljQvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9lbnZpcm9ubWVudC5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9jb25zdGFudF9ldmFsdWF0b3IuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9kYXJ0MmpzLmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9rZXJuZWwvZGFydDJqc190YXJnZXQuZGFydCc7Cgp0eXBlZGVmIFJlcG9ydEVycm9yRnVuY3Rpb24gPSB2b2lkIEZ1bmN0aW9uKAogICAgaXIuTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZSwgTGlzdDxpci5Mb2NhdGVkTWVzc2FnZT4gY29udGV4dCk7CgpjbGFzcyBEYXJ0MmpzQ29uc3RhbnRFdmFsdWF0b3IgZXh0ZW5kcyBpci5Db25zdGFudEV2YWx1YXRvciB7CiAgZmluYWwgYm9vbCBfc3VwcG9ydFJlZXZhbHVhdGlvbkZvclRlc3Rpbmc7CgogIGJvb2wgcmVxdWlyZXNDb25zdGFudDsKCiAgRGFydDJqc0NvbnN0YW50RXZhbHVhdG9yKAogICAgICBpci5UeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50LCBSZXBvcnRFcnJvckZ1bmN0aW9uIHJlcG9ydEVycm9yLAogICAgICB7TWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudDogY29uc3Qge30sCiAgICAgIGJvb2wgc3VwcG9ydFJlZXZhbHVhdGlvbkZvclRlc3Rpbmc6IGZhbHNlfSkKICAgICAgOiBfc3VwcG9ydFJlZXZhbHVhdGlvbkZvclRlc3RpbmcgPSBzdXBwb3J0UmVldmFsdWF0aW9uRm9yVGVzdGluZywKICAgICAgICBzdXBlcigKICAgICAgICAgICAgY29uc3QgRGFydDJqc0NvbnN0YW50c0JhY2tlbmQoc3VwcG9ydHNVbmV2YWx1YXRlZENvbnN0YW50czogZmFsc2UpLAogICAgICAgICAgICBlbnZpcm9ubWVudCwKICAgICAgICAgICAgdHlwZUVudmlyb25tZW50LAogICAgICAgICAgICBuZXcgRXJyb3JSZXBvcnRlcihyZXBvcnRFcnJvcikpOwoKICBAb3ZlcnJpZGUKICBFcnJvclJlcG9ydGVyIGdldCBlcnJvclJlcG9ydGVyID0+IHN1cGVyLmVycm9yUmVwb3J0ZXI7CgogIEBvdmVycmlkZQogIGlyLkNvbnN0YW50IGV2YWx1YXRlKGlyLkV4cHJlc3Npb24gbm9kZSwge2Jvb2wgcmVxdWlyZUNvbnN0YW50OiB0cnVlfSkgewogICAgZXJyb3JSZXBvcnRlci5yZXF1aXJlc0NvbnN0YW50ID0gcmVxdWlyZUNvbnN0YW50OwogICAgaWYgKG5vZGUgaXMgaXIuQ29uc3RhbnRFeHByZXNzaW9uKSB7CiAgICAgIGlyLkNvbnN0YW50IGNvbnN0YW50ID0gbm9kZS5jb25zdGFudDsKICAgICAgaWYgKGNvbnN0YW50IGlzIGlyLlVuZXZhbHVhdGVkQ29uc3RhbnQpIHsKICAgICAgICBpci5Db25zdGFudCByZXN1bHQgPSBzdXBlci5ldmFsdWF0ZShjb25zdGFudC5leHByZXNzaW9uKTsKICAgICAgICBhc3NlcnQoCiAgICAgICAgICAgIHJlc3VsdCBpcyBpci5VbmV2YWx1YXRlZENvbnN0YW50IHx8CiAgICAgICAgICAgICAgICAhcmVzdWx0LmFjY2VwdChjb25zdCBVbmV2YWx1YXRlZENvbnN0YW50RmluZGVyKCkpLAogICAgICAgICAgICAiSW52YWxpZCBjb25zdGFudCByZXN1bHQgJHJlc3VsdCBmcm9tICR7Y29uc3RhbnQuZXhwcmVzc2lvbn0uIik7CiAgICAgICAgaWYgKCFfc3VwcG9ydFJlZXZhbHVhdGlvbkZvclRlc3RpbmcpIHsKICAgICAgICAgIG5vZGUuY29uc3RhbnQgPSByZXN1bHQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvbnN0YW50OwogICAgfQogICAgaWYgKHJlcXVpcmVDb25zdGFudCkgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBIYW5kbGUgcmVwb3J0aW5nIG9mIGNvbXBpbGUtdGltZSBjb25zdGFudAogICAgICAvLyBldmFsdWF0aW9uIGVycm9ycy4KICAgICAgcmV0dXJuIHN1cGVyLmV2YWx1YXRlKG5vZGUpOwogICAgfSBlbHNlIHsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gc3VwZXIuZXZhbHVhdGUobm9kZSk7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfQogIH0KfQoKY2xhc3MgRXJyb3JSZXBvcnRlciBpbXBsZW1lbnRzIGlyLkVycm9yUmVwb3J0ZXIgewogIGZpbmFsIFJlcG9ydEVycm9yRnVuY3Rpb24gX3JlcG9ydEVycm9yOwogIGJvb2wgcmVxdWlyZXNDb25zdGFudDsKCiAgRXJyb3JSZXBvcnRlcih0aGlzLl9yZXBvcnRFcnJvcik7CgogIEBvdmVycmlkZQogIHZvaWQgcmVwb3J0SW52YWxpZEV4cHJlc3Npb24oaXIuSW52YWxpZEV4cHJlc3Npb24gbm9kZSkgewogICAgLy8gSWdub3JlLgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZXBvcnQoaXIuTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZSwgTGlzdDxpci5Mb2NhdGVkTWVzc2FnZT4gY29udGV4dCkgewogICAgaWYgKHJlcXVpcmVzQ29uc3RhbnQpIHsKICAgICAgX3JlcG9ydEVycm9yKG1lc3NhZ2UsIGNvbnRleHQpOwogICAgfQogIH0KfQoKLy8vIFtpci5Db25zdGFudF0gdmlzaXRvciB0aGF0IHJldHVybnMgYHRydWVgIGlmIHRoZSB2aXNpdG9yIGNvbnN0YW50IGNvbnRhaW5zCi8vLyBhbiBbaXIuVW5ldmFsdWF0ZWRDb25zdGFudF0uCmNsYXNzIFVuZXZhbHVhdGVkQ29uc3RhbnRGaW5kZXIgZXh0ZW5kcyBpci5Db25zdGFudFZpc2l0b3I8Ym9vbD4gewogIGNvbnN0IFVuZXZhbHVhdGVkQ29uc3RhbnRGaW5kZXIoKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBkZWZhdWx0Q29uc3RhbnQoaXIuQ29uc3RhbnQgbm9kZSkgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRVbmV2YWx1YXRlZENvbnN0YW50KGlyLlVuZXZhbHVhdGVkQ29uc3RhbnQgbm9kZSkgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQoaXIuUGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCBub2RlKSB7CiAgICByZXR1cm4gbm9kZS50ZWFyT2ZmQ29uc3RhbnQuYWNjZXB0KHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEluc3RhbmNlQ29uc3RhbnQoaXIuSW5zdGFuY2VDb25zdGFudCBub2RlKSB7CiAgICBmb3IgKGlyLkNvbnN0YW50IHZhbHVlIGluIG5vZGUuZmllbGRWYWx1ZXMudmFsdWVzKSB7CiAgICAgIGlmICh2YWx1ZS5hY2NlcHQodGhpcykpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFNldENvbnN0YW50KGlyLlNldENvbnN0YW50IG5vZGUpIHsKICAgIGZvciAoaXIuQ29uc3RhbnQgdmFsdWUgaW4gbm9kZS5lbnRyaWVzKSB7CiAgICAgIGlmICh2YWx1ZS5hY2NlcHQodGhpcykpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdExpc3RDb25zdGFudChpci5MaXN0Q29uc3RhbnQgbm9kZSkgewogICAgZm9yIChpci5Db25zdGFudCB2YWx1ZSBpbiBub2RlLmVudHJpZXMpIHsKICAgICAgaWYgKHZhbHVlLmFjY2VwdCh0aGlzKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0TWFwQ29uc3RhbnQoaXIuTWFwQ29uc3RhbnQgbm9kZSkgewogICAgZm9yIChpci5Db25zdGFudE1hcEVudHJ5IGVudHJ5IGluIG5vZGUuZW50cmllcykgewogICAgICBpZiAoZW50cnkua2V5LmFjY2VwdCh0aGlzKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGlmIChlbnRyeS52YWx1ZS5hY2NlcHQodGhpcykpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKLy8vIENsYXNzIHRvIHJlcHJlc2VudCBhIHJlZmVyZW5jZSB0byBhIGNvbnN0YW50IGluIGFsbG9jYXRpb24gbm9kZXMuCi8vLwovLy8gVGhpcyBjbGFzcyBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gc3VwcG9ydCBzZXJpYWxpemF0aW9uIG9mIHJlZmVyZW5jZXMgdG8KLy8vIGNvbnN0YW50IG5vZGVzLiBTaW5jZSB0aGUgY29uc3RhbnQgbm9kZXMgYXJlIG5vdCBbaXIuVHJlZU5vZGVdcyB3ZSBjYW4gb25seQovLy8gc2VyaWFsaXplIHRoZSBjb25zdGFudHMgYXMgdmFsdWVzIHdoaWNoIHdvdWxkIGJ5cGFzcyBieSB0aGUgY2Fub25pY2FsaXphdGlvbgovLy8gcGVyZm9ybWVkIGJ5IHRoZSBDRkUuIFRoaXMgY2xhc3MgZXh0ZW5kcyBvbmx5IGFzIGEgdHJpY2sgdG8gZWFzaWx5IHBhc3MKLy8vIGl0IHRocm91Z2ggc2VyaWFsaXphdGlvbi4KLy8vCi8vLyBCeSBhZGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlIGNvbnN0YW50IGV4cHJlc3Npb24gaW4gd2hpY2ggdGhlIGNvbnN0YW50Ci8vLyBvY2N1cnJlZCwgd2UgY2FuIHNlcmlhbGl6ZSByZWZlcmVuY2VzIHRvIGNvbnN0YW50cyBpbiB0d28gc3RlcHM6IGEgcmVmZXJlbmNlCi8vLyB0byB0aGUgY29uc3RhbnQgZXhwcmVzc2lvbiBmb2xsb3dlZCBieSBhbiBpbmRleCBvZiB0aGUgcmVmZXJyZWQgY29uc3RhbnQKLy8vIGluIHRoZSB0cmF2ZXJzYWwgb3JkZXIgb2YgdGhlIGNvbnN0YW50IGhlbGQgYnkgdGhlIGNvbnN0YW50IGV4cHJlc3Npb24uCi8vLwovLy8gVGhpcyBpcyB1c2VkIGZvciBsaXN0LCBtYXAsIGFuZCBzZXQgbGl0ZXJhbHMuCmNsYXNzIENvbnN0YW50UmVmZXJlbmNlIGV4dGVuZHMgaXIuVHJlZU5vZGUgewogIGZpbmFsIGlyLkNvbnN0YW50RXhwcmVzc2lvbiBleHByZXNzaW9uOwogIGZpbmFsIGlyLkNvbnN0YW50IGNvbnN0YW50OwoKICBDb25zdGFudFJlZmVyZW5jZSh0aGlzLmV4cHJlc3Npb24sIHRoaXMuY29uc3RhbnQpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q2hpbGRyZW4oaXIuVmlzaXRvciB2KSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ29uc3RhbnRSZWZlcmVuY2UudmlzaXRDaGlsZHJlbiIpOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KGlyLlRyZWVWaXNpdG9yIHYpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDb25zdGFudFJlZmVyZW5jZS5hY2NlcHQiKTsKICB9CgogIEBvdmVycmlkZQogIHRyYW5zZm9ybUNoaWxkcmVuKGlyLlRyYW5zZm9ybWVyIHYpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDb25zdGFudFJlZmVyZW5jZS50cmFuc2Zvcm1DaGlsZHJlbiIpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiAxMyAqIGNvbnN0YW50Lmhhc2hDb2RlOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIG90aGVyIGlzIENvbnN0YW50UmVmZXJlbmNlICYmIGNvbnN0YW50ID09IG90aGVyLmNvbnN0YW50OwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0NvbnN0YW50UmVmZXJlbmNlKGNvbnN0YW50PSRjb25zdGFudCknOwp9CoDBAE5OPAEoNUxAASgBLUEBPi0BGQEcSzIySA9QGR0tAQw6AQxLNiksMEIQMENNLyIKFwgXBhtIHCMNDCUUFQgGBAIBMioZASQBDDwPBAEMTBwmBgQCAU8hQyUBDDMBDEYBDFEuBAEMOTkgFQgGEgQBDC8uIBUIBhIEAQwxLiAVCAYSBAEMLzYkFQgmFQgGEgQCAUYETFBRTB4ES1FNTAQyLioeATUBDCVDBAEMHTwEAQwoRwQBDC4BDCMtRQQBDEACASZwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9jb25zdGFudHMuZGFydDZzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pci9zdGF0aWNfdHlwZV9iYXNlLmRhcnSaRy8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbGFzc19oaWVyYXJjaHkuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2FsZ2VicmEuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9lbnZpcm9ubWVudC5kYXJ0JyBhcyBpcjsKCi8vLyBTcGVjaWFsIGJvdHRvbSB0eXBlIHVzZWQgdG8gc2lnbmFsIHRoYXQgYW4gZXhwcmVzc2lvbiBvciBzdGF0ZW1lbnQgZG9lcwovLy8gbm90IGNvbXBsZXRlIG5vcm1hbGx5LiBUaGlzIGlzIHRoZSBjYXNlIGZvciBpbnN0YW5jZSBvZiB0aHJvdyBleHByZXNzaW9ucwovLy8gYW5kIHJldHVybiBzdGF0ZW1lbnRzLgpjbGFzcyBEb2VzTm90Q29tcGxldGVUeXBlIGV4dGVuZHMgaXIuQm90dG9tVHlwZSB7CiAgY29uc3QgRG9lc05vdENvbXBsZXRlVHlwZSgpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnRG9lc05vdENvbXBsZXRlVHlwZSgpJzsKfQoKLy8vIFNwZWNpYWwgaW50ZXJmYWNlIHR5cGUgdXNlZCB0byBzaWduYWwgdGhhdCB0aGUgc3RhdGljIHR5cGUgb2YgYW4gZXhwcmVzc2lvbgovLy8gaGFzIHByZWNpc2lvbiBvZiBhIHRoaXMtZXhwcmVzc2lvbi4KY2xhc3MgVGhpc0ludGVyZmFjZVR5cGUgZXh0ZW5kcyBpci5JbnRlcmZhY2VUeXBlIHsKICBUaGlzSW50ZXJmYWNlVHlwZShpci5DbGFzcyBjbGFzc05vZGUsIFtMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzXSkKICAgICAgOiBzdXBlcihjbGFzc05vZGUsIHR5cGVBcmd1bWVudHMpOwoKICBmYWN0b3J5IFRoaXNJbnRlcmZhY2VUeXBlLmZyb20oaXIuSW50ZXJmYWNlVHlwZSB0eXBlKSA9PiB0eXBlICE9IG51bGwKICAgICAgPyBuZXcgVGhpc0ludGVyZmFjZVR5cGUodHlwZS5jbGFzc05vZGUsIHR5cGUudHlwZUFyZ3VtZW50cykKICAgICAgOiBudWxsOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAndGhpczoke3N1cGVyLnRvU3RyaW5nKCl9JzsKfQoKLy8vIFNwZWNpYWwgaW50ZXJmYWNlIHR5cGUgdXNlZCB0byBzaWduYWwgdGhhdCB0aGUgc3RhdGljIHR5cGUgb2YgYW4gZXhwcmVzc2lvbgovLy8gaXMgZXhhY3QsIGkuZS4gdGhlIHJ1bnRpbWUgdHlwZSBpcyBub3QgYSBzdWJ0eXBlIG9yIHN1YmNsYXNzIG9mIHRoZSB0eXBlLgpjbGFzcyBFeGFjdEludGVyZmFjZVR5cGUgZXh0ZW5kcyBpci5JbnRlcmZhY2VUeXBlIHsKICBFeGFjdEludGVyZmFjZVR5cGUoaXIuQ2xhc3MgY2xhc3NOb2RlLCBbTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50c10pCiAgICAgIDogc3VwZXIoY2xhc3NOb2RlLCB0eXBlQXJndW1lbnRzKTsKCiAgZmFjdG9yeSBFeGFjdEludGVyZmFjZVR5cGUuZnJvbShpci5JbnRlcmZhY2VUeXBlIHR5cGUpID0+IHR5cGUgIT0gbnVsbAogICAgICA/IG5ldyBFeGFjdEludGVyZmFjZVR5cGUodHlwZS5jbGFzc05vZGUsIHR5cGUudHlwZUFyZ3VtZW50cykKICAgICAgOiBudWxsOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnZXhhY3Q6JHtzdXBlci50b1N0cmluZygpfSc7Cn0KCi8vLyBCYXNlIGNsYXNzIGZvciBjb21wdXRpbmcgc3RhdGljIHR5cGVzLgovLy8KLy8vIFRoaXMgY2xhc3MgdXNlcyB0aGUgdmlzaXRvciBwYXR0ZXJuIHRvIGNvbXB1dGUgdGhlIHN0YXRpYyB0eXBlIHRoYXQgYXJlCi8vLyBkaXJlY3RseSBkZWZpbmVkIGJ5IHRoZSBleHByZXNzaW9uIGtpbmQuCi8vLwovLy8gU3ViY2xhc3NlcyB3aWxsIGNvbXB1dGUgdGhlIHN0YXRpYyB0eXBlIG9yIHVzZSBhIGNhY2hlIHRvIGxvb2sgdXAgdGhlIHN0YXRpYwovLy8gdHlwZSBvZiBleHByZXNzaW9uIHdob3NlIHN0YXRpYyB0eXBlIGlzIG5vdCBkaXJlY3RseSBkZWZpbmVkIGJ5IHRoZQovLy8gZXhwcmVzc2lvbiBraW5kLiBGb3IgaW5zdGFuY2UgbWV0aG9kIGludm9jYXRpb25zIHdob3NlIHN0YXRpYyB0eXBlIGRlcGVuZAovLy8gb24gdGhlIHN0YXRpYyB0eXBlcyBvZiB0aGUgcmVjZWl2ZXIgYW5kIHR5cGUgYXJndW1lbnRzIGFuZCB0aGUgc2lnbmF0dXJlCi8vLyBvZiB0aGUgdGFyZ2V0ZWQgcHJvY2VkdXJlLgphYnN0cmFjdCBjbGFzcyBTdGF0aWNUeXBlQmFzZSBleHRlbmRzIGlyLlZpc2l0b3I8aXIuRGFydFR5cGU+IHsKICBmaW5hbCBpci5UeXBlRW52aXJvbm1lbnQgX3R5cGVFbnZpcm9ubWVudDsKCiAgU3RhdGljVHlwZUJhc2UodGhpcy5fdHlwZUVudmlyb25tZW50KTsKCiAgZmFpbChTdHJpbmcgbWVzc2FnZSkgPT4gbWVzc2FnZTsKCiAgaXIuVHlwZUVudmlyb25tZW50IGdldCB0eXBlRW52aXJvbm1lbnQgPT4gX3R5cGVFbnZpcm9ubWVudDsKCiAgVGhpc0ludGVyZmFjZVR5cGUgZ2V0IHRoaXNUeXBlOwoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSBkZWZhdWx0Tm9kZShpci5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBudWxsOwogIH0KCiAgaXIuRGFydFR5cGUgdmlzaXROb2RlKGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIG5vZGU/LmFjY2VwdCh0aGlzKTsKICB9CgogIE51bGwgdmlzaXROb2RlcyhMaXN0PGlyLk5vZGU+IG5vZGVzKSB7CiAgICBmb3IgKGlyLk5vZGUgbm9kZSBpbiBub2RlcykgewogICAgICB2aXNpdE5vZGUobm9kZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSBkZWZhdWx0RXhwcmVzc2lvbihpci5FeHByZXNzaW9uIG5vZGUpIHsKICAgIHRocm93IGZhaWwoJ1VuaGFuZGxlZCBub2RlICRub2RlICgke25vZGUucnVudGltZVR5cGV9KScpOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRBc0V4cHJlc3Npb24oaXIuQXNFeHByZXNzaW9uIG5vZGUpIHsKICAgIHJldHVybiBub2RlLnR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdEF3YWl0RXhwcmVzc2lvbihpci5Bd2FpdEV4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIHR5cGVFbnZpcm9ubWVudC51bmZ1dHVyZVR5cGUodmlzaXROb2RlKG5vZGUub3BlcmFuZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRCb29sTGl0ZXJhbChpci5Cb29sTGl0ZXJhbCBub2RlKSA9PiB0eXBlRW52aXJvbm1lbnQuYm9vbFR5cGU7CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0Q2hlY2tMaWJyYXJ5SXNMb2FkZWQoaXIuQ2hlY2tMaWJyYXJ5SXNMb2FkZWQgbm9kZSkgPT4KICAgICAgdHlwZUVudmlyb25tZW50Lm9iamVjdFR5cGU7CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0U3RyaW5nTGl0ZXJhbChpci5TdHJpbmdMaXRlcmFsIG5vZGUpID0+CiAgICAgIHR5cGVFbnZpcm9ubWVudC5zdHJpbmdUeXBlOwoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdFN0cmluZ0NvbmNhdGVuYXRpb24oaXIuU3RyaW5nQ29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICByZXR1cm4gdHlwZUVudmlyb25tZW50LnN0cmluZ1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdE51bGxMaXRlcmFsKGlyLk51bGxMaXRlcmFsIG5vZGUpID0+IHR5cGVFbnZpcm9ubWVudC5udWxsVHlwZTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRJbnRMaXRlcmFsKGlyLkludExpdGVyYWwgbm9kZSkgPT4gdHlwZUVudmlyb25tZW50LmludFR5cGU7CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0RG91YmxlTGl0ZXJhbChpci5Eb3VibGVMaXRlcmFsIG5vZGUpID0+CiAgICAgIHR5cGVFbnZpcm9ubWVudC5kb3VibGVUeXBlOwoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdFN5bWJvbExpdGVyYWwoaXIuU3ltYm9sTGl0ZXJhbCBub2RlKSA9PgogICAgICB0eXBlRW52aXJvbm1lbnQuc3ltYm9sVHlwZTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRMaXN0TGl0ZXJhbChpci5MaXN0TGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gdHlwZUVudmlyb25tZW50LmxpdGVyYWxMaXN0VHlwZShub2RlLnR5cGVBcmd1bWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdFNldExpdGVyYWwoaXIuU2V0TGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gdHlwZUVudmlyb25tZW50LmxpdGVyYWxTZXRUeXBlKG5vZGUudHlwZUFyZ3VtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0TWFwTGl0ZXJhbChpci5NYXBMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiB0eXBlRW52aXJvbm1lbnQubGl0ZXJhbE1hcFR5cGUobm9kZS5rZXlUeXBlLCBub2RlLnZhbHVlVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdFZhcmlhYmxlU2V0KGlyLlZhcmlhYmxlU2V0IG5vZGUpIHsKICAgIHJldHVybiB2aXNpdE5vZGUobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdFByb3BlcnR5U2V0KGlyLlByb3BlcnR5U2V0IG5vZGUpIHsKICAgIHJldHVybiB2aXNpdE5vZGUobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdERpcmVjdFByb3BlcnR5U2V0KGlyLkRpcmVjdFByb3BlcnR5U2V0IG5vZGUpIHsKICAgIHJldHVybiB2aXNpdE5vZGUobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUaGlzSW50ZXJmYWNlVHlwZSB2aXNpdFRoaXNFeHByZXNzaW9uKGlyLlRoaXNFeHByZXNzaW9uIG5vZGUpID0+IHRoaXNUeXBlOwoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdFN0YXRpY0dldChpci5TdGF0aWNHZXQgbm9kZSkgPT4gbm9kZS50YXJnZXQuZ2V0dGVyVHlwZTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRTdGF0aWNTZXQoaXIuU3RhdGljU2V0IG5vZGUpIHsKICAgIHJldHVybiB2aXNpdE5vZGUobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdFN1cGVyUHJvcGVydHlTZXQoaXIuU3VwZXJQcm9wZXJ0eVNldCBub2RlKSB7CiAgICByZXR1cm4gdmlzaXROb2RlKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRUaHJvdyhpci5UaHJvdyBub2RlKSA9PiBjb25zdCBEb2VzTm90Q29tcGxldGVUeXBlKCk7CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0UmV0aHJvdyhpci5SZXRocm93IG5vZGUpID0+IGNvbnN0IERvZXNOb3RDb21wbGV0ZVR5cGUoKTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRMb2dpY2FsRXhwcmVzc2lvbihpci5Mb2dpY2FsRXhwcmVzc2lvbiBub2RlKSA9PgogICAgICB0eXBlRW52aXJvbm1lbnQuYm9vbFR5cGU7CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0Tm90KGlyLk5vdCBub2RlKSB7CiAgICByZXR1cm4gdHlwZUVudmlyb25tZW50LmJvb2xUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRDb25kaXRpb25hbEV4cHJlc3Npb24oaXIuQ29uZGl0aW9uYWxFeHByZXNzaW9uIG5vZGUpIHsKICAgIHJldHVybiBub2RlLnN0YXRpY1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdElzRXhwcmVzc2lvbihpci5Jc0V4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIHR5cGVFbnZpcm9ubWVudC5ib29sVHlwZTsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0VHlwZUxpdGVyYWwoaXIuVHlwZUxpdGVyYWwgbm9kZSkgPT4gdHlwZUVudmlyb25tZW50LnR5cGVUeXBlOwoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbihpci5GdW5jdGlvbkV4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIG5vZGUuZnVuY3Rpb24uZnVuY3Rpb25UeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRMZXQoaXIuTGV0IG5vZGUpIHsKICAgIHJldHVybiB2aXNpdE5vZGUobm9kZS5ib2R5KTsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0QmxvY2tFeHByZXNzaW9uKGlyLkJsb2NrRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gdmlzaXROb2RlKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRJbnZhbGlkRXhwcmVzc2lvbihpci5JbnZhbGlkRXhwcmVzc2lvbiBub2RlKSA9PgogICAgICBjb25zdCBEb2VzTm90Q29tcGxldGVUeXBlKCk7CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0TG9hZExpYnJhcnkoaXIuTG9hZExpYnJhcnkgbm9kZSkgewogICAgcmV0dXJuIHR5cGVFbnZpcm9ubWVudC5mdXR1cmVUeXBlKGNvbnN0IGlyLkR5bmFtaWNUeXBlKCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRDb25zdGFudEV4cHJlc3Npb24oaXIuQ29uc3RhbnRFeHByZXNzaW9uIG5vZGUpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEluY2x1ZGUgaW50ZXJmYWNlIGV4YWN0bmVzcyB3aGVyZSBhcHBsaWNhYmxlLgogICAgcmV0dXJuIG5vZGUuZ2V0U3RhdGljVHlwZSh0eXBlRW52aXJvbm1lbnQpOwogIH0KfQqA6wBOTjwBKDQvMTUBTE4bMh8BDDACAVAoM0spAUhCDgEMMwIBUE40TCkBSUMOAQw0AgErBEwtBFFITk0fQC0BKQEjAT4BIgEMKhEEASgfBAEpIhcGBAEMNj4EAQw4FgQBDD5CBAEMUQEMSSIBDDsiAQxGJwQBDFEBDE4BDDsiAQw7IgEMNj8EAQw0PgQBDDRJBAEMNiIEAQw2IgQBDEIiBAEMTQEMSwEMMiIEAQxAIgQBDEgBDEwBDEMgAQwmJQQBDEocBAEMOCUEAQxRAQxEJwQBDCYhBAEMPiIEAQxDIwEMNj8EAQxESjAEAgEtcGFja2FnZTpjb21waWxlci9zcmMvaXIvc3RhdGljX3R5cGVfYmFzZS5kYXJ0M3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzL3Jld3JpdGVfYXN5bmMuZGFydMABd6cvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSByZXdyaXRlX2FzeW5jOwoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nOwppbXBvcnQgJ2RhcnQ6bWF0aCcgc2hvdyBtYXg7CgppbXBvcnQgJ3BhY2thZ2U6anNfcnVudGltZS9zaGFyZWQvYXN5bmNfYXdhaXRfZXJyb3JfY29kZXMuZGFydCcgYXMgZXJyb3JfY29kZXM7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9pby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydCcgc2hvdyBTb3VyY2VJbmZvcm1hdGlvbjsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCcgc2hvdyBQYWlyOwppbXBvcnQgJ2pzLmRhcnQnIGFzIGpzOwoKLy8vIFJld3JpdGVzIGEgW2pzLkZ1bl0gd2l0aCBhc3luYy9zeW5jKi9hc3luYyogZnVuY3Rpb25zIGFuZCBhd2FpdCBhbmQgeWllbGQKLy8vICh3aXRoIGRhcnQtbGlrZSBzZW1hbnRpY3MpIHRvIGFuIGVxdWl2YWxlbnQgZnVuY3Rpb24gd2l0aG91dCB0aGVzZS4KLy8vIGF3YWl0LWZvciBpcyBub3QgaGFuZGxlZCBhbmQgbXVzdCBiZSByZXdyaXR0ZW4gYmVmb3JlLiAoQ3VycmVudGx5IGhhbmRsZWQKLy8vIGluIHNzYS9idWlsZGVyLmRhcnQpLgovLy8KLy8vIFdoZW4gZ2VuZXJhdGluZyB0aGUgaW5wdXQgdG8gdGhpcywgc3BlY2lhbCBjYXJlIG11c3QgYmUgdGFrZW4gdGhhdAovLy8gcGFyYW1ldGVycyB0byBzeW5jKiBmdW5jdGlvbnMgdGhhdCBhcmUgbXV0YXRlZCBpbiB0aGUgYm9keSBtdXN0IGJlIGJveGVkLgovLy8gKEN1cnJlbnRseSBoYW5kbGVkIGluIGNsb3N1cmUuZGFydCkuCi8vLwovLy8gTG9vayBhdCBbcmV3cml0ZUZ1bmN0aW9uXSwgW3Zpc2l0RGFydFlpZWxkXSBhbmQgW3Zpc2l0QXdhaXRdIGZvciBtb3JlCi8vLyBleHBsYW5hdGlvbi4KYWJzdHJhY3QgY2xhc3MgQXN5bmNSZXdyaXRlckJhc2UgZXh0ZW5kcyBqcy5Ob2RlVmlzaXRvciB7CiAgLy8gTG9jYWwgdmFyaWFibGVzIGFyZSBob2lzdGVkIHRvIHRoZSB0b3Agb2YgdGhlIGZ1bmN0aW9uLCBzbyB0aGV5IGFyZQogIC8vIGNvbGxlY3RlZCBoZXJlLgogIExpc3Q8anMuVmFyaWFibGVEZWNsYXJhdGlvbj4gbG9jYWxWYXJpYWJsZXMgPSA8anMuVmFyaWFibGVEZWNsYXJhdGlvbj5bXTsKCiAgTWFwPGpzLk5vZGUsIGludD4gY29udGludWVMYWJlbHMgPSBuZXcgTWFwPGpzLk5vZGUsIGludD4oKTsKICBNYXA8anMuTm9kZSwgaW50PiBicmVha0xhYmVscyA9IG5ldyBNYXA8anMuTm9kZSwgaW50PigpOwoKICAvLy8gVGhlIGxhYmVsIG9mIGEgZmluYWxseSBwYXJ0LgogIE1hcDxqcy5CbG9jaywgaW50PiBmaW5hbGx5TGFiZWxzID0gbmV3IE1hcDxqcy5CbG9jaywgaW50PigpOwoKICAvLy8gVGhlIGxhYmVsIG9mIHRoZSBjYXRjaCBoYW5kbGVyIG9mIGEgW2pzLlRyeV0gb3IgYSBbanMuRnVuXSBvciBbanMuQ2F0Y2hdLgogIC8vLwogIC8vLyBUaGVzZSBtYXJrIHRoZSBwb2ludHMgYW4gZXJyb3IgY2FuIGJlIGNvbnN1bWVkLgogIC8vLwogIC8vLyAtIFRoZSBoYW5kbGVyIG9mIGEgW2pzLkZ1bl0gaXMgdGhlIG91dGVybW9zdCBhbmQgd2lsbCByZXRocm93IHRoZSBlcnJvci4KICAvLy8gLSBUaGUgaGFuZGxlciBvZiBhIFtqcy5UcnldIHdpbGwgcnVuIHRoZSBjYXRjaCBoYW5kbGVyLgogIC8vLyAtIFRoZSBoYW5kbGVyIG9mIGEgW2pzLkNhdGNoXSBpcyBhIHN5bnRoZXRpYyBoYW5kbGVyIHRoYXQgZW5zdXJlcyB0aGUKICAvLy8gICByaWdodCBmaW5hbGx5IGJsb2NrcyBhcmUgcnVuIGlmIGFuIGVycm9yIGlzIHRocm93biBpbnNpZGUgYQogIC8vLyAgIGNhdGNoLWhhbmRsZXIuCiAgTWFwPGpzLk5vZGUsIGludD4gaGFuZGxlckxhYmVscyA9IG5ldyBNYXA8anMuTm9kZSwgaW50PigpOwoKICBpbnQgZXhpdExhYmVsOwogIGludCByZXRocm93TGFiZWw7CgogIC8vLyBBIHN0YWNrIG9mIGFsbCAoc3Vycm91bmRpbmcpIGp1bXAgdGFyZ2V0cy4KICAvLy8KICAvLy8gSnVtcCB0YXJnZXRzIGFyZToKICAvLy8KICAvLy8gKiBUaGUgZnVuY3Rpb24sIHNpZ25hbGxpbmcgYSByZXR1cm4gb3IgdW5jYXVnaHQgdGhyb3cuCiAgLy8vICogTG9vcHMuCiAgLy8vICogTGFiZWxlZFN0YXRlbWVudHMgKGFsc28gdXNlZCBmb3IgJ2NvbnRpbnVlJyB3aGVuIGF0dGFjaGVkIHRvIGxvb3BzKS4KICAvLy8gKiBUcnkgc3RhdGVtZW50cywgZm9yIGNhdGNoIGFuZCBmaW5hbGx5IGhhbmRsZXJzLgogIC8vLyAqIENhdGNoIGhhbmRsZXJzLCB3aGVuIGluc2lkZSBhIGNhdGNoLXBhcnQgb2YgYSB0cnksIHRoZSBjYXRjaC1oYW5kbGVyIGlzCiAgLy8vICAgdXNlZCB0byBhc3NvY2lhdGUgd2l0aCBhIHN5bnRoZXRpYyBoYW5kbGVyIHRoYXQgd2lsbCBlbnN1cmUgdGhlIHJpZ2h0CiAgLy8vICAgZmluYWxseSBibG9ja3MgYXJlIHZpc2l0ZWQuCiAgLy8vCiAgLy8vIFdoZW4ganVtcGluZyB0byBhIHRhcmdldCBpdCBpcyBuZWNlc3NhcnkgdG8gdmlzaXQgYWxsIGZpbmFsbGllcyB0aGF0CiAgLy8vIGFyZSBvbiB0aGUgd2F5IHRvIHRhcmdldCAoaS5lLiBtb3JlIG5lc3RlZCB0aGFuIHRoZSBqdW1wIHRhcmdldCkuCiAgTGlzdDxqcy5Ob2RlPiBqdW1wVGFyZ2V0cyA9IDxqcy5Ob2RlPltdOwoKICBMaXN0PGludD4gY29udGludWVTdGFjayA9IDxpbnQ+W107CiAgTGlzdDxpbnQ+IGJyZWFrU3RhY2sgPSA8aW50PltdOwogIExpc3Q8aW50PiByZXR1cm5TdGFjayA9IDxpbnQ+W107CgogIExpc3Q8UGFpcjxTdHJpbmcsIFN0cmluZz4+IHZhcmlhYmxlUmVuYW1pbmdzID0gPFBhaXI8U3RyaW5nLCBTdHJpbmc+PltdOwoKICBQcmVUcmFuc2xhdGlvbkFuYWx5c2lzIGFuYWx5c2lzOwoKICBmaW5hbCBGdW5jdGlvbiBzYWZlVmFyaWFibGVOYW1lOwoKICAvLyBBbGwgdGhlIDx4Pk5hbWUgdmFyaWFibGVzIGFyZSBuYW1lcyBvZiBKYXZhc2NyaXB0IHZhcmlhYmxlcyB1c2VkIGluIHRoZQogIC8vIHRyYW5zZm9ybWVkIGNvZGUuCgogIC8vLyBDb250YWlucyB0aGUgcmVzdWx0IG9mIGFuIGF3YWl0ZWQgZXhwcmVzc2lvbiwgb3IgYSBjb25kaXRpb25hbCBvcgogIC8vLyBsYXp5IGJvb2xlYW4gb3BlcmF0b3IuCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlIGEgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBpcyByb3VnaGx5IHRyYW5zbGF0ZWQgbGlrZToKICAvLy8gW1tjb25kID8gYSA6IGJdXQogIC8vLwogIC8vLyBCZWNvbWVzOgogIC8vLwogIC8vLyB3aGlsZSB0cnVlIHsgLy8gb3V0ZXIgd2hpbGUgbG9vcAogIC8vLyAgIHN3aXRjaCAoZ290bykgeyAvLyBTaW11bGF0ZXMgZ290bwogIC8vLyAgICAgLi4uCiAgLy8vICAgICAgIGdvdG8gPSBbW2NvbmRdXSA/IHRoZW5MYWJlbCA6IGVsc2VMYWJlbAogIC8vLyAgICAgICBicmVhazsKICAvLy8gICAgIGNhc2UgdGhlbkxhYmVsOgogIC8vLyAgICAgICByZXN1bHQgPSBbW2FdXTsKICAvLy8gICAgICAgZ290byA9IGpvaW5MYWJlbDsKICAvLy8gICAgIGNhc2UgZWxzZUxhYmVsOgogIC8vLyAgICAgICByZXN1bHQgPSBbW2JdXTsKICAvLy8gICAgIGNhc2Ugam9pbkxhYmVsOgogIC8vLyAgICAgICAvLyBOb3cgdGhlIHJlc3VsdCBvZiBjb21wdXRpbmcgdGhlIGNvbmRpdGlvbiBpcyBpbiByZXN1bHQuCiAgLy8vICAgICAuLi4uCiAgLy8vICAgfQogIC8vLyB9CiAgLy8vCiAgLy8vIEl0IGlzIGEgcGFyYW1ldGVyIHRvIHRoZSBbYm9keV0gZnVuY3Rpb24sIHNvIHRoYXQgW2F3YWl0U3RhdGVtZW50XSBjYW4KICAvLy8gY2FsbCBbYm9keV0gd2l0aCB0aGUgcmVzdWx0IG9mIGFuIGF3YWl0ZWQgRnV0dXJlLgogIGpzLlZhcmlhYmxlVXNlIGdldCByZXN1bHQgPT4gbmV3IGpzLlZhcmlhYmxlVXNlKHJlc3VsdE5hbWUpOwogIFN0cmluZyByZXN1bHROYW1lOwoKICAvLy8gQSBwYXJhbWV0ZXIgdG8gdGhlIFtib2R5TmFtZV0gZnVuY3Rpb24uIEluZGljYXRpbmcgaWYgd2UgYXJlIGluIHN1Y2Nlc3MKICAvLy8gb3IgZXJyb3IgY2FzZS4KICBTdHJpbmcgZXJyb3JDb2RlTmFtZTsKCiAgLy8vIFRoZSBpbm5lciBmdW5jdGlvbiB0aGF0IGlzIHNjaGVkdWxlZCB0byBkbyBlYWNoIGF3YWl0L3lpZWxkLAogIC8vLyBhbmQgY2FsbGVkIHRvIGRvIGEgbmV3IGl0ZXJhdGlvbiBmb3Igc3luYyouCiAganMuTmFtZSBib2R5TmFtZTsKCiAgLy8vIFVzZWQgdG8gc2ltdWxhdGUgYSBnb3RvLgogIC8vLwogIC8vLyBUbyAiZ290byIgYSBsYWJlbCwgdGhlIGxhYmVsIGlzIGFzc2lnbmVkIHRvIHRoaXMgdmFyaWFibGUsIGFuZCBicmVhayBvdXQKICAvLy8gb2YgdGhlIHN3aXRjaCB0byB0YWtlIGFub3RoZXIgaXRlcmF0aW9uIGluIHRoZSB3aGlsZSBsb29wLiBTZWUgW2FkZEdvdG9dCiAganMuVmFyaWFibGVVc2UgZ2V0IGdvdG8gPT4gbmV3IGpzLlZhcmlhYmxlVXNlKGdvdG9OYW1lKTsKICBTdHJpbmcgZ290b05hbWU7CgogIC8vLyBWYXJpYWJsZSBjb250YWluaW5nIHRoZSBsYWJlbCBvZiB0aGUgY3VycmVudCBlcnJvciBoYW5kbGVyLgogIGpzLlZhcmlhYmxlVXNlIGdldCBoYW5kbGVyID0+IG5ldyBqcy5WYXJpYWJsZVVzZShoYW5kbGVyTmFtZSk7CiAgU3RyaW5nIGhhbmRsZXJOYW1lOwoKICAvLy8gU2V0IHRvIGB0cnVlYCBpZiBhbnkgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQgbGFiZWxzIGlzIGEgaGFuZGxlci4gQXQgdGhlCiAgLy8vIGVuZCBvZiByZXdyaXRpbmcgdGhpcyBpcyB1c2VkIHRvIHNlZSBpZiBhIHNob3J0ZXIgZm9ybSBvZiBlcnJvciBoYW5kbGluZwogIC8vLyBjYW4gYmUgdXNlZC4gVGhlIHNob3J0ZXIgZm9ybSBjb3VsZCBiZSBhIGNoYW5nZSBpbiB0aGUgbWV0aG9kIGJvaWxlcnBsYXRlLAogIC8vLyBpbiB0aGUgc3RhdGUgbWFjaGluZSB3cmFwcGVyLCBvciBub3QgaW1wbGVtZW50ZWQuIFthZGRFcnJvckV4aXRdIGNhbiB0ZXN0CiAgLy8vIHRoaXMgdG8gZWxpZGUgdGhlIGVycm9yIGV4aXQgaGFuZGxlciB3aGVuIHRoZXJlIGFyZSBubyBvdGhlciBoYW5kbGVycywgb3IKICAvLy8gc2V0IGl0IHRvIGB0cnVlYCBpZiB0aGVyZSBpcyBubyBzaG9ydGVyIGZvcm0uCiAgYm9vbCBoYXNIYW5kbGVyTGFiZWxzID0gZmFsc2U7CgogIC8vLyBBIHN0YWNrIG9mIGxhYmVscyBvZiBmaW5hbGx5IGJsb2NrcyB0byB2aXNpdCwgYW5kIHRoZSBsYWJlbCB0byBnbyB0byBhZnRlcgogIC8vLyB0aGUgbGFzdC4KICBqcy5WYXJpYWJsZVVzZSBnZXQgbmV4dCA9PiBuZXcganMuVmFyaWFibGVVc2UobmV4dE5hbWUpOwogIFN0cmluZyBuZXh0TmFtZTsKCiAgLy8vIFRoZSBjdXJyZW50IHJldHVybmVkIHZhbHVlIChhIGZpbmFsbHkgYmxvY2sgbWF5IG92ZXJ3cml0ZSBpdCkuCiAganMuVmFyaWFibGVVc2UgZ2V0IHJldHVyblZhbHVlID0+IG5ldyBqcy5WYXJpYWJsZVVzZShyZXR1cm5WYWx1ZU5hbWUpOwogIFN0cmluZyByZXR1cm5WYWx1ZU5hbWU7CgogIC8vLyBTdG9yZXMgdGhlIGN1cnJlbnQgZXJyb3Igd2hlbiB3ZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgaGFuZGxpbmcgYW4gZXJyb3IuCiAganMuVmFyaWFibGVVc2UgZ2V0IGN1cnJlbnRFcnJvciA9PiBuZXcganMuVmFyaWFibGVVc2UoY3VycmVudEVycm9yTmFtZSk7CiAgU3RyaW5nIGN1cnJlbnRFcnJvck5hbWU7CgogIC8vLyBUaGUgbGFiZWwgb2YgdGhlIG91dGVyIGxvb3AuCiAgLy8vCiAgLy8vIFVzZWQgaWYgdGhlcmUgYXJlIHVudHJhbnNmb3JtZWQgbG9vcHMgY29udGFpbmluZyBicmVhayBvciBjb250aW51ZXMgdG8KICAvLy8gdGFyZ2V0cyBvdXRzaWRlIHRoZSBsb29wLgogIFN0cmluZyBvdXRlckxhYmVsTmFtZTsKCiAgLy8vIElmIGphdmFzY3JpcHQgYHRoaXNgIGlzIHVzZWQsIGl0IGlzIGFjY2Vzc2VkIHZpYSB0aGlzIHZhcmlhYmxlLCBpbiB0aGUKICAvLy8gW2JvZHlOYW1lXSBmdW5jdGlvbi4KICBqcy5WYXJpYWJsZVVzZSBnZXQgc2VsZiA9PiBuZXcganMuVmFyaWFibGVVc2Uoc2VsZk5hbWUpOwogIFN0cmluZyBzZWxmTmFtZTsKCiAgLy8vIFRoZSByZXdyaXR0ZW4gY29kZSBjYW4gdGFrZSB0eXBlIGFyZ3VtZW50cy4gVGhlc2UgYXJlIGFkZGVkIGlmIG5lZWRlZC4KICBMaXN0PFN0cmluZz4gdHlwZUFyZ3VtZW50TmFtZXMgPSA8U3RyaW5nPltdOwoKICBmaW5hbCBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXI7CiAgLy8gRm9yIGVycm9yIHJlcG9ydGluZyBvbmx5LgogIFNwYW5uYWJsZSBnZXQgc3Bhbm5hYmxlIHsKICAgIHJldHVybiAoX3NwYW5uYWJsZSA9PSBudWxsKSA/IE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSA6IF9zcGFubmFibGU7CiAgfQoKICBTcGFubmFibGUgX3NwYW5uYWJsZTsKCiAgaW50IF9jdXJyZW50TGFiZWwgPSAwOwoKICAvLyBUaGUgaGlnaGVzdCB0ZW1wb3JhcnkgdmFyaWFibGUgaW5kZXggY3VycmVudGx5IGluIHVzZS4KICBpbnQgY3VycmVudFRlbXBWYXJJbmRleCA9IDA7CiAgLy8gVGhlIGhpZ2hlc3QgdGVtcG9yYXJ5IHZhcmlhYmxlIGluZGV4IGV2ZXIgaW4gdXNlIGluIHRoaXMgZnVuY3Rpb24uCiAgaW50IHRlbXBWYXJIaWdoV2F0ZXJNYXJrID0gMDsKICBNYXA8aW50LCBqcy5FeHByZXNzaW9uPiB0ZW1wVmFyTmFtZXMgPSBuZXcgTWFwPGludCwganMuRXhwcmVzc2lvbj4oKTsKCiAgYm9vbCBnZXQgaXNBc3luYyA9PiBmYWxzZTsKICBib29sIGdldCBpc1N5bmNTdGFyID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzQXN5bmNTdGFyID0+IGZhbHNlOwoKICBBc3luY1Jld3JpdGVyQmFzZSgKICAgICAgdGhpcy5yZXBvcnRlciwgdGhpcy5fc3Bhbm5hYmxlLCB0aGlzLnNhZmVWYXJpYWJsZU5hbWUsIHRoaXMuYm9keU5hbWUpOwoKICAvLy8gSW5pdGlhbGl6ZSBuYW1lcyB1c2VkIGJ5IHRoZSBzdWJDbGFzcy4KICB2b2lkIGluaXRpYWxpemVOYW1lcygpOwoKICAvLy8gTWFpbiBlbnRyeSBwb2ludC4KICAvLy8gUmV3cml0ZXMgYSBzeW5jKi9hc3luYy9hc3luYyogZnVuY3Rpb24gdG8gYW4gZXF1aXZhbGVudCBub3JtYWwgZnVuY3Rpb24uCiAgLy8vCiAgLy8vIFtzcGFubmFibGVdIGNhbiBiZSBwYXNzZWQgdG8gaGF2ZSBhIGxvY2F0aW9uIGZvciBlcnJvciBtZXNzYWdlcy4KICBqcy5GdW4gcmV3cml0ZShqcy5GdW4gbm9kZSwgU291cmNlSW5mb3JtYXRpb24gYm9keVNvdXJjZUluZm9ybWF0aW9uLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBleGl0U291cmNlSW5mb3JtYXRpb24sCiAgICAgIFtTcGFubmFibGUgc3Bhbm5hYmxlXSkgewogICAgX3NwYW5uYWJsZSA9IHNwYW5uYWJsZTsKCiAgICBhbmFseXNpcyA9IG5ldyBQcmVUcmFuc2xhdGlvbkFuYWx5c2lzKHVuc3VwcG9ydGVkKTsKICAgIGFuYWx5c2lzLmFuYWx5emUobm9kZSk7CgogICAgLy8gVG8gYXZvaWQgbmFtZSBjb2xsaXNpb25zIHdpdGggZXhpc3RpbmcgbmFtZXMsIHRoZSBmcmVzaCBuYW1lcyBhcmUKICAgIC8vIGdlbmVyYXRlZCBhZnRlciB0aGUgYW5hbHlzaXMuCiAgICByZXN1bHROYW1lID0gZnJlc2hOYW1lKCJyZXN1bHQiKTsKICAgIGVycm9yQ29kZU5hbWUgPSBmcmVzaE5hbWUoImVycm9yQ29kZSIpOwogICAgZ290b05hbWUgPSBmcmVzaE5hbWUoImdvdG8iKTsKICAgIGhhbmRsZXJOYW1lID0gZnJlc2hOYW1lKCJoYW5kbGVyIik7CiAgICBuZXh0TmFtZSA9IGZyZXNoTmFtZSgibmV4dCIpOwogICAgcmV0dXJuVmFsdWVOYW1lID0gZnJlc2hOYW1lKCJyZXR1cm5WYWx1ZSIpOwogICAgY3VycmVudEVycm9yTmFtZSA9IGZyZXNoTmFtZSgiY3VycmVudEVycm9yIik7CiAgICBvdXRlckxhYmVsTmFtZSA9IGZyZXNoTmFtZSgib3V0ZXIiKTsKICAgIHNlbGZOYW1lID0gZnJlc2hOYW1lKCJzZWxmIik7CiAgICAvLyBJbml0aWFsaXplIG5hbWVzIHNwZWNpZmljIHRvIHRoZSBzdWJjbGFzcy4KICAgIGluaXRpYWxpemVOYW1lcygpOwoKICAgIHJldHVybiByZXdyaXRlRnVuY3Rpb24obm9kZSwgYm9keVNvdXJjZUluZm9ybWF0aW9uLCBleGl0U291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAganMuRXhwcmVzc2lvbiBnZXQgY3VycmVudEVycm9ySGFuZGxlciB7CiAgICByZXR1cm4ganMubnVtYmVyKGhhbmRsZXJMYWJlbHNbCiAgICAgICAganVtcFRhcmdldHMubGFzdFdoZXJlKChub2RlKSA9PiBoYW5kbGVyTGFiZWxzW25vZGVdICE9IG51bGwpXSk7CiAgfQoKICBpbnQgYWxsb2NhdGVUZW1wVmFyKCkgewogICAgYXNzZXJ0KHRlbXBWYXJIaWdoV2F0ZXJNYXJrID49IGN1cnJlbnRUZW1wVmFySW5kZXgpOwogICAgY3VycmVudFRlbXBWYXJJbmRleCsrOwogICAgdGVtcFZhckhpZ2hXYXRlck1hcmsgPSBtYXgoY3VycmVudFRlbXBWYXJJbmRleCwgdGVtcFZhckhpZ2hXYXRlck1hcmspOwogICAgcmV0dXJuIGN1cnJlbnRUZW1wVmFySW5kZXg7CiAgfQoKICBqcy5WYXJpYWJsZVVzZSB1c2VUZW1wVmFyKGludCBpKSB7CiAgICByZXR1cm4gdGVtcFZhck5hbWVzLnB1dElmQWJzZW50KAogICAgICAgIGksICgpID0+IG5ldyBqcy5WYXJpYWJsZVVzZShmcmVzaE5hbWUoInRlbXAkaSIpKSk7CiAgfQoKICAvLy8gR2VuZXJhdGVzIGEgdmFyaWFibGUgbmFtZSB3aXRoIFtzYWZlVmFyaWFibGVOYW1lXSBiYXNlZCBvbiBbb3JpZ2luYWxOYW1lXQogIC8vLyB3aXRoIGEgc3VmZml4IHRvIGd1YXJhbnRlZSBpdCBkb2VzIG5vdCBjb2xsaWRlIHdpdGggYWxyZWFkeSB1c2VkIG5hbWVzLgogIFN0cmluZyBmcmVzaE5hbWUoU3RyaW5nIG9yaWdpbmFsTmFtZSkgewogICAgU3RyaW5nIHNhZmVOYW1lID0gc2FmZVZhcmlhYmxlTmFtZShvcmlnaW5hbE5hbWUpOwogICAgU3RyaW5nIHJlc3VsdCA9IHNhZmVOYW1lOwogICAgaW50IGNvdW50ZXIgPSAxOwogICAgd2hpbGUgKGFuYWx5c2lzLnVzZWROYW1lcy5jb250YWlucyhyZXN1bHQpKSB7CiAgICAgIHJlc3VsdCA9ICIkc2FmZU5hbWUkY291bnRlciI7CiAgICAgICsrY291bnRlcjsKICAgIH0KICAgIGFuYWx5c2lzLnVzZWROYW1lcy5hZGQocmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBMaXN0PGpzLkV4cHJlc3Npb24+IHByb2Nlc3NUeXBlQXJndW1lbnRzKExpc3Q8anMuRXhwcmVzc2lvbj4gdHlwZXMpIHsKICAgIGlmICh0eXBlcyA9PSBudWxsKSB7CiAgICAgIFN0cmluZyBuYW1lID0gZnJlc2hOYW1lKCd0eXBlJyk7CiAgICAgIHR5cGVBcmd1bWVudE5hbWVzLmFkZChuYW1lKTsKICAgICAgcmV0dXJuIDxqcy5FeHByZXNzaW9uPltuZXcganMuVmFyaWFibGVVc2UobmFtZSldOwogICAgfQogICAgcmV0dXJuIHR5cGVzOwogIH0KCiAgLy8vIEFsbCB0aGUgcGllY2VzIGFyZSBjb2xsZWN0ZWQgaW4gdGhpcyBtYXAsIHRvIGNyZWF0ZSBhIHN3aXRjaCB3aXRoIGEgY2FzZQogIC8vLyBmb3IgZWFjaCBsYWJlbC4KICAvLy8KICAvLy8gVGhlIG9yZGVyIGlzIGltcG9ydGFudCwgdGhlcmVmb3JlIHRoZSB0eXBlIGlzIGV4cGxpY2l0bHkgTGlua2VkSGFzaE1hcC4KICBMaW5rZWRIYXNoTWFwPGludCwgTGlzdDxqcy5TdGF0ZW1lbnQ+PiBsYWJlbGxlZFBhcnRzID0KICAgICAgbmV3IExpbmtlZEhhc2hNYXA8aW50LCBMaXN0PGpzLlN0YXRlbWVudD4+KCk7CgogIC8vLyBEZXNjcmlwdGlvbiBvZiBlYWNoIGxhYmVsIGZvciByZWFkYWJpbGl0eSBvZiB0aGUgbm9uLW1pbmlmaWVkIG91dHB1dC4KICBNYXA8aW50LCBTdHJpbmc+IGxhYmVsQ29tbWVudHMgPSBuZXcgTWFwPGludCwgU3RyaW5nPigpOwoKICAvLy8gVHJ1ZSBpZiB0aGUgZnVuY3Rpb24gaGFzIGFueSB0cnkgYmxvY2tzIGNvbnRhaW5pbmcgYXdhaXQuCiAgYm9vbCBoYXNUcnlCbG9ja3MgPSBmYWxzZTsKCiAgLy8vIFRydWUgaWYgdGhlIHRyYXZlcnNpb24gY3VycmVudGx5IGlzIGluc2lkZSBhIGxvb3Agb3Igc3dpdGNoIGZvciB3aGljaAogIC8vLyBbc2hvdWxkVHJhbnNmb3JtXSBpcyBmYWxzZS4KICBib29sIGluc2lkZVVudHJhbnNsYXRlZEJyZWFrYWJsZSA9IGZhbHNlOwoKICAvLy8gVHJ1ZSBpZiBhIGxhYmVsIGlzIHVzZWQgdG8gYnJlYWsgdG8gYW4gb3V0ZXIgc3dpdGNoLXN0YXRlbWVudC4KICBib29sIGhhc0p1bXBUaG91Z2hPdXRlckxhYmVsID0gZmFsc2U7CgogIC8vLyBUcnVlIGlmIHRoZXJlIGlzIGEgY2F0Y2gtaGFuZGxlciBwcm90ZWN0ZWQgYnkgYSBmaW5hbGx5IHdpdGggbm8gZW5jbG9zaW5nCiAgLy8vIGNhdGNoLWhhbmRsZXJzLgogIGJvb2wgbmVlZHNSZXRocm93ID0gZmFsc2U7CgogIC8vLyBCdWZmZXIgZm9yIGNvbGxlY3RpbmcgdHJhbnNsYXRlZCBzdGF0ZW1lbnRzIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBzd2l0Y2gKICAvLy8gY2FzZS4KICBMaXN0PGpzLlN0YXRlbWVudD4gY3VycmVudFN0YXRlbWVudEJ1ZmZlcjsKCiAgLy8gTGFiZWxzIHdpbGwgYmVjb21lIGNhc2VzIGluIHRoZSBiaWcgc3dpdGNoIGV4cHJlc3Npb24sIGFuZCBgZ290byBsYWJlbGAKICAvLyBpcyBleHByZXNzZWQgYnkgYXNzaWduaW5nIHRvIHRoZSBzd2l0Y2gga2V5IFtnb3RvTmFtZV0gYW5kIGJyZWFraW5nIG91dCBvZgogIC8vIHRoZSBzd2l0Y2guCgogIGludCBuZXdMYWJlbChbU3RyaW5nIGNvbW1lbnRdKSB7CiAgICBpbnQgcmVzdWx0ID0gX2N1cnJlbnRMYWJlbDsKICAgIF9jdXJyZW50TGFiZWwrKzsKICAgIGlmIChjb21tZW50ICE9IG51bGwpIHsKICAgICAgbGFiZWxDb21tZW50c1tyZXN1bHRdID0gY29tbWVudDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gQmVnaW5zIG91dHB1dHRpbmcgc3RhdGVtZW50cyB0byBhIG5ldyBidWZmZXIgd2l0aCBsYWJlbCBbbGFiZWxdLgogIC8vLwogIC8vLyBFYWNoIGJ1ZmZlciBlbmRzIHVwIGFzIGl0cyBvd24gY2FzZSBwYXJ0IGluIHRoZSBiaWcgc3RhdGUtc3dpdGNoLgogIHZvaWQgYmVnaW5MYWJlbChpbnQgbGFiZWwpIHsKICAgIGFzc2VydCghbGFiZWxsZWRQYXJ0cy5jb250YWluc0tleShsYWJlbCkpOwogICAgY3VycmVudFN0YXRlbWVudEJ1ZmZlciA9IDxqcy5TdGF0ZW1lbnQ+W107CiAgICBsYWJlbGxlZFBhcnRzW2xhYmVsXSA9IGN1cnJlbnRTdGF0ZW1lbnRCdWZmZXI7CiAgICBhZGRTdGF0ZW1lbnQobmV3IGpzLkNvbW1lbnQobGFiZWxDb21tZW50c1tsYWJlbF0pKTsKICB9CgogIC8vLyBSZXR1cm5zIGEgc3RhdGVtZW50IGFzc2lnbmluZyB0byB0aGUgdmFyaWFibGUgbmFtZWQgW2dvdG9OYW1lXS4KICAvLy8gVGhpcyBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYSBicmVhayBmb3IgdGhlIGdvdG8gdG8gYmUgZXhlY3V0ZWQuIFVzZQogIC8vLyBbZ290b1dpdGhCcmVha10gb3IgW2FkZEdvdG9dIGZvciB0aGlzLgogIGpzLlN0YXRlbWVudCBzZXRHb3RvVmFyaWFibGUoaW50IGxhYmVsLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgcmV0dXJuIG5ldyBqcy5FeHByZXNzaW9uU3RhdGVtZW50KGpzLmpzKCcjID0gIycsCiAgICAgICAgW2dvdG8sIGpzLm51bWJlcihsYWJlbCldKS53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIC8vLyBSZXR1cm5zIGEgYmxvY2sgdGhhdCBoYXMgYSBnb3RvIHRvIFtsYWJlbF0gaW5jbHVkaW5nIHRoZSBicmVhay4KICAvLy8KICAvLy8gQWxzbyBpbnNlcnRzIGEgY29tbWVudCBkZXNjcmliaW5nIHRoZSBsYWJlbCBpZiBhdmFpbGFibGUuCiAganMuQmxvY2sgZ290b0FuZEJyZWFrKGludCBsYWJlbCwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIExpc3Q8anMuU3RhdGVtZW50PiBzdGF0ZW1lbnRzID0gPGpzLlN0YXRlbWVudD5bXTsKICAgIGlmIChsYWJlbENvbW1lbnRzLmNvbnRhaW5zS2V5KGxhYmVsKSkgewogICAgICBzdGF0ZW1lbnRzLmFkZChuZXcganMuQ29tbWVudCgiZ290byAke2xhYmVsQ29tbWVudHNbbGFiZWxdfSIpKTsKICAgIH0KICAgIHN0YXRlbWVudHMuYWRkKHNldEdvdG9WYXJpYWJsZShsYWJlbCwgc291cmNlSW5mb3JtYXRpb24pKTsKICAgIGlmIChpbnNpZGVVbnRyYW5zbGF0ZWRCcmVha2FibGUpIHsKICAgICAgaGFzSnVtcFRob3VnaE91dGVyTGFiZWwgPSB0cnVlOwogICAgICBzdGF0ZW1lbnRzLmFkZChuZXcganMuQnJlYWsob3V0ZXJMYWJlbE5hbWUpCiAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9IGVsc2UgewogICAgICBzdGF0ZW1lbnRzCiAgICAgICAgICAuYWRkKG5ldyBqcy5CcmVhayhudWxsKS53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICAgIHJldHVybiBuZXcganMuQmxvY2soc3RhdGVtZW50cyk7CiAgfQoKICAvLy8gQWRkcyBhIGdvdG8gdG8gW2xhYmVsXSBpbmNsdWRpbmcgdGhlIGJyZWFrLgogIC8vLwogIC8vLyBBbHNvIGluc2VydHMgYSBjb21tZW50IGRlc2NyaWJpbmcgdGhlIGxhYmVsIGlmIGF2YWlsYWJsZS4KICB2b2lkIGFkZEdvdG8oaW50IGxhYmVsLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgaWYgKGxhYmVsQ29tbWVudHMuY29udGFpbnNLZXkobGFiZWwpKSB7CiAgICAgIGFkZFN0YXRlbWVudChuZXcganMuQ29tbWVudCgiZ290byAke2xhYmVsQ29tbWVudHNbbGFiZWxdfSIpKTsKICAgIH0KICAgIGFkZFN0YXRlbWVudChzZXRHb3RvVmFyaWFibGUobGFiZWwsIHNvdXJjZUluZm9ybWF0aW9uKSk7CgogICAgYWRkQnJlYWsoc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgdm9pZCBhZGRTdGF0ZW1lbnQoanMuU3RhdGVtZW50IG5vZGUpIHsKICAgIGN1cnJlbnRTdGF0ZW1lbnRCdWZmZXIuYWRkKG5vZGUpOwogIH0KCiAgdm9pZCBhZGRFeHByZXNzaW9uU3RhdGVtZW50KGpzLkV4cHJlc3Npb24gbm9kZSkgewogICAgYWRkU3RhdGVtZW50KG5ldyBqcy5FeHByZXNzaW9uU3RhdGVtZW50KG5vZGUpKTsKICB9CgogIC8vLyBUcnVlIGlmIHRoZXJlIGlzIGFuIGF3YWl0IG9yIHlpZWxkIGluIFtub2RlXSBvciBzb21lIHN1YmV4cHJlc3Npb24uCiAgYm9vbCBzaG91bGRUcmFuc2Zvcm0oanMuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gYW5hbHlzaXMuaGFzQXdhaXRPcllpZWxkLmNvbnRhaW5zKG5vZGUpOwogIH0KCiAgdm9pZCB1bnN1cHBvcnRlZChqcy5Ob2RlIG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJOb2RlICRub2RlIGNhbm5vdCBiZSB0cmFuc2Zvcm1lZCBieSB0aGUgYXdhaXQtc3luYyB0cmFuc2Zvcm1lciIpOwogIH0KCiAgdm9pZCB1bnJlYWNoYWJsZShqcy5Ob2RlIG5vZGUpIHsKICAgIHJlcG9ydGVyLmludGVybmFsRXJyb3Ioc3Bhbm5hYmxlLCAiSW50ZXJuYWwgZXJyb3IsIHRyeWluZyB0byB2aXNpdCAkbm9kZSIpOwogIH0KCiAgdmlzaXRTdGF0ZW1lbnQoanMuU3RhdGVtZW50IG5vZGUpIHsKICAgIG5vZGUuYWNjZXB0KHRoaXMpOwogIH0KCiAgLy8vIFZpc2l0cyBbbm9kZV0gdG8gZW5zdXJlIGl0cyBzaWRlZWZmZWN0cyBhcmUgcGVyZm9ybWVkLCBidXQgdGhyb3dpbmcgYXdheQogIC8vLyB0aGUgcmVzdWx0LgogIC8vLwogIC8vLyBJZiB0aGUgcmV0dXJuIHZhbHVlIG9mIHZpc2l0aW5nIFtub2RlXSBpcyBhbiBleHByZXNzaW9uIGd1YXJhbnRlZWQgdG8gaGF2ZQogIC8vLyBubyBzaWRlIGVmZmVjdCwgaXQgaXMgZHJvcHBlZC4KICB2b2lkIHZpc2l0RXhwcmVzc2lvbklnbm9yZVJlc3VsdChqcy5FeHByZXNzaW9uIG5vZGUpIHsKICAgIC8vIFRPRE8oMjg3NjMpOiBSZW1vdmUgYDxkeW5hbWljPmAgd2hlbiBpc3N1ZSAyODc2MyBpcyBmaXhlZC4KICAgIGpzLkV4cHJlc3Npb24gcmVzdWx0ID0gbm9kZS5hY2NlcHQ8ZHluYW1pYz4odGhpcyk7CiAgICBpZiAoIShyZXN1bHQgaXMganMuTGl0ZXJhbCB8fCByZXN1bHQgaXMganMuVmFyaWFibGVVc2UpKSB7CiAgICAgIGFkZEV4cHJlc3Npb25TdGF0ZW1lbnQocmVzdWx0KTsKICAgIH0KICB9CgogIGpzLkV4cHJlc3Npb24gdmlzaXRFeHByZXNzaW9uKGpzLkV4cHJlc3Npb24gbm9kZSkgewogICAgLy8gVE9ETygyODc2Myk6IFJlbW92ZSBgPGR5bmFtaWM+YCB3aGVuIGlzc3VlIDI4NzYzIGlzIGZpeGVkLgogICAgcmV0dXJuIG5vZGUuYWNjZXB0PGR5bmFtaWM+KHRoaXMpOwogIH0KCiAgLy8vIENhbGxzIFtmbl0gd2l0aCB0aGUgdmFsdWUgb2YgZXZhbHVhdGluZyBbbm9kZTFdIGFuZCBbbm9kZTJdLgogIC8vLwogIC8vLyBCb3RoIG5vZGVzIGFyZSBldmFsdWF0ZWQgaW4gb3JkZXIuCiAgLy8vCiAgLy8vIElmIG5vZGUyIG11c3QgYmUgdHJhbnNmb3JtZWQgKHNlZSBbc2hvdWxkVHJhbnNmb3JtXSksIHRoZW4gdGhlIGV2YWx1YXRpb24KICAvLy8gb2Ygbm9kZTEgaXMgYWRkZWQgdG8gdGhlIGN1cnJlbnQgc3RhdGVtZW50LWxpc3QgYW5kIHRoZSByZXN1bHQgaXMgc3RvcmVkCiAgLy8vIGluIGEgdGVtcG9yYXJ5IHZhcmlhYmxlLiBUaGUgZXZhbHVhdGlvbiBvZiBub2RlMiBpcyB0aGVuIGZyZWUgdG8gZW1pdAogIC8vLyBzdGF0ZW1lbnRzIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSByZXN1bHQgb2Ygbm9kZTEuCiAgLy8vCiAgLy8vIFRoaXMgaXMgbmVjZXNzYXJ5LCBiZWNhdXNlIGF3YWl0IG9yIHlpZWxkIGV4cHJlc3Npb25zIGhhdmUgdG8gZW1pdAogIC8vLyBzdGF0ZW1lbnRzLCBhbmQgdGhlc2Ugc3RhdGVtZW50cyBjb3VsZCBhZmZlY3QgdGhlIHZhbHVlIG9mIG5vZGUxLgogIC8vLwogIC8vLyBGb3IgZXhhbXBsZToKICAvLy8KICAvLy8gLSBfc3RvcmVJZk5lY2Vzc2FyeShzb21lTGl0ZXJhbCkgcmV0dXJucyBzb21lTGl0ZXJhbC4KICAvLy8gLSBfc3RvcmVJZk5lY2Vzc2FyeShzb21lVmFyaWFibGUpCiAgLy8vICAgaW5zZXJ0czogdmFyIHRlbXBYID0gc29tZVZhcmlhYmxlCiAgLy8vICAgcmV0dXJuczogdGVtcFgKICAvLy8gICB3aGVyZSB0ZW1wWCBpcyBhIGZyZXNoIHRlbXBvcmFyeSB2YXJpYWJsZS4KICBqcy5FeHByZXNzaW9uIF9zdG9yZUlmTmVjZXNzYXJ5KGpzLkV4cHJlc3Npb24gcmVzdWx0KSB7CiAgICAvLyBOb3RlIHRoYXQgUmVnRXhlcywganMuQXJyYXlJbml0aWFsaXplciBhbmQganMuT2JqZWN0SW5pdGlhbGl6ZXIgYXJlIG5vdAogICAgLy8gW2pzLkxpdGVyYWxdcy4KICAgIGlmIChyZXN1bHQgaXMganMuTGl0ZXJhbCkgcmV0dXJuIHJlc3VsdDsKICAgIGlmIChyZXN1bHQgaXMganMuVmFyaWFibGVVc2UpIHsKICAgICAgaWYgKHJlc3VsdC5uYW1lID09IHNlbGZOYW1lKSByZXR1cm4gcmVzdWx0OwogICAgfQoKICAgIGpzLkV4cHJlc3Npb24gdGVtcFZhciA9IHVzZVRlbXBWYXIoYWxsb2NhdGVUZW1wVmFyKCkpOwogICAgYWRkU3RhdGVtZW50KGpzLmpzLnN0YXRlbWVudCgnIyA9ICM7JywgW3RlbXBWYXIsIHJlc3VsdF0pKTsKICAgIHJldHVybiB0ZW1wVmFyOwogIH0KCiAgLy8gVE9ETyhzaWd1cmRtKTogVGhpcyBpcyBvYnNvbGV0ZSAtIGFsbCBjYWxscyB1c2Ugc3RvcmU6IGZhbHNlLiBSZXBsYWNlIHdpdGgKICAvLyB2aXNpdEV4cHJlc3Npb24obm9kZSk7CiAgd2l0aEV4cHJlc3Npb24oanMuRXhwcmVzc2lvbiBub2RlLCBmbihqcy5FeHByZXNzaW9uIHJlc3VsdCksIHtib29sIHN0b3JlfSkgewogICAgaW50IG9sZFRlbXBWYXJJbmRleCA9IGN1cnJlbnRUZW1wVmFySW5kZXg7CiAgICBqcy5FeHByZXNzaW9uIHZpc2l0ZWQgPSB2aXNpdEV4cHJlc3Npb24obm9kZSk7CiAgICBpZiAoc3RvcmUpIHsKICAgICAgdmlzaXRlZCA9IF9zdG9yZUlmTmVjZXNzYXJ5KHZpc2l0ZWQpOwogICAgfQogICAgdmFyIHJlc3VsdCA9IGZuKHZpc2l0ZWQpOwogICAgY3VycmVudFRlbXBWYXJJbmRleCA9IG9sZFRlbXBWYXJJbmRleDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gQ2FsbHMgW2ZuXSB3aXRoIHRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyBbbm9kZV0uIFRha2luZyBzcGVjaWFsIGNhcmUgb2YKICAvLy8gcHJvcGVydHkgYWNjZXNzZXMuCiAgLy8vCiAgLy8vIElmIFtzdG9yZV0gaXMgdHJ1ZSB0aGUgcmVzdWx0IG9mIGV2YWx1YXRpbmcgW25vZGVdIGlzIHN0b3JlZCBpbiBhCiAgLy8vIHRlbXBvcmFyeS4KICAvLy8KICAvLy8gV2UgY2Fubm90IHJld3JpdGUgYDxyZWNlaXZlcj4ubSgpYCB0bzoKICAvLy8gICAgIHRlbXAgPSA8cmVjZWl2ZXI+Lm07CiAgLy8vICAgICB0ZW1wKCk7CiAgLy8vIEJlY2F1c2UgdGhpcyBsZWF2ZXMgYHRoaXNgIHVuYm91bmQgaW4gdGhlIGNhbGwuIEJ1dCBiZWNhdXNlIG9mIGRhcnQKICAvLy8gZXZhbHVhdGlvbiBvcmRlciB3ZSBjYW4gd3JpdGU6CiAgLy8vICAgICB0ZW1wID0gPHJlY2VpdmVyPjsKICAvLy8gICAgIHRlbXAubSgpOwogIHdpdGhDYWxsVGFyZ2V0RXhwcmVzc2lvbihqcy5FeHByZXNzaW9uIG5vZGUsIGZuKGpzLkV4cHJlc3Npb24gcmVzdWx0KSwKICAgICAge2Jvb2wgc3RvcmV9KSB7CiAgICBpbnQgb2xkVGVtcFZhckluZGV4ID0gY3VycmVudFRlbXBWYXJJbmRleDsKICAgIGpzLkV4cHJlc3Npb24gdmlzaXRlZCA9IHZpc2l0RXhwcmVzc2lvbihub2RlKTsKICAgIGpzLkV4cHJlc3Npb24gc2VsZWN0b3I7CiAgICBqcy5FeHByZXNzaW9uIHN0b3JlZElmTmVlZGVkOwogICAgaWYgKHN0b3JlKSB7CiAgICAgIGlmICh2aXNpdGVkIGlzIGpzLlByb3BlcnR5QWNjZXNzKSB7CiAgICAgICAganMuUHJvcGVydHlBY2Nlc3MgcHJvcGVydHlBY2Nlc3MgPSB2aXNpdGVkOwogICAgICAgIHNlbGVjdG9yID0gcHJvcGVydHlBY2Nlc3Muc2VsZWN0b3I7CiAgICAgICAgdmlzaXRlZCA9IHByb3BlcnR5QWNjZXNzLnJlY2VpdmVyOwogICAgICB9CiAgICAgIHN0b3JlZElmTmVlZGVkID0gX3N0b3JlSWZOZWNlc3NhcnkodmlzaXRlZCk7CiAgICB9IGVsc2UgewogICAgICBzdG9yZWRJZk5lZWRlZCA9IHZpc2l0ZWQ7CiAgICB9CiAgICBqcy5FeHByZXNzaW9uIHJlc3VsdDsKICAgIGlmIChzZWxlY3RvciA9PSBudWxsKSB7CiAgICAgIHJlc3VsdCA9IGZuKHN0b3JlZElmTmVlZGVkKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlc3VsdCA9IGZuKG5ldyBqcy5Qcm9wZXJ0eUFjY2VzcyhzdG9yZWRJZk5lZWRlZCwgc2VsZWN0b3IpKTsKICAgIH0KICAgIGN1cnJlbnRUZW1wVmFySW5kZXggPSBvbGRUZW1wVmFySW5kZXg7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIENhbGxzIFtmbl0gd2l0aCB0aGUgdmFsdWUgb2YgZXZhbHVhdGluZyBbbm9kZTFdIGFuZCBbbm9kZTJdLgogIC8vLwogIC8vLyBJZiBgc2hvdWxkVHJhbnNmb3JtKG5vZGUyKWAgdGhlIGZpcnN0IGV4cHJlc3Npb24gaXMgc3RvcmVkIGluIGEgdGVtcG9yYXJ5CiAgLy8vIHZhcmlhYmxlLgogIC8vLwogIC8vLyBUaGlzIGlzIGJlY2F1c2Ugbm9kZTEgbXVzdCBiZSBldmFsdWF0ZWQgYmVmb3JlIHZpc2l0aW5nIG5vZGUyLAogIC8vLyBiZWNhdXNlIHRoZSBldmFsdWF0aW9uIG9mIGFuIGF3YWl0IG9yIHlpZWxkIGNhbm5vdCBiZSBleHByZXNzZWQgYXMKICAvLy8gYW4gZXhwcmVzc2lvbiwgdmlzaXRpbmcgbm9kZTIgaXQgd2lsbCBvdXRwdXQgc3RhdGVtZW50cyB0aGF0CiAgLy8vIG1pZ2h0IGhhdmUgYW4gaW5mbHVlbmNlIG9uIHRoZSB2YWx1ZSBvZiBub2RlMS4KICB3aXRoRXhwcmVzc2lvbjIoanMuRXhwcmVzc2lvbiBub2RlMSwganMuRXhwcmVzc2lvbiBub2RlMiwKICAgICAgZm4oanMuRXhwcmVzc2lvbiByZXN1bHQxLCBqcy5FeHByZXNzaW9uIHJlc3VsdDIpKSB7CiAgICBpbnQgb2xkVGVtcFZhckluZGV4ID0gY3VycmVudFRlbXBWYXJJbmRleDsKICAgIGpzLkV4cHJlc3Npb24gcjEgPSB2aXNpdEV4cHJlc3Npb24obm9kZTEpOwogICAgaWYgKHNob3VsZFRyYW5zZm9ybShub2RlMikpIHsKICAgICAgcjEgPSBfc3RvcmVJZk5lY2Vzc2FyeShyMSk7CiAgICB9CiAgICBqcy5FeHByZXNzaW9uIHIyID0gdmlzaXRFeHByZXNzaW9uKG5vZGUyKTsKICAgIHZhciByZXN1bHQgPSBmbihyMSwgcjIpOwogICAgY3VycmVudFRlbXBWYXJJbmRleCA9IG9sZFRlbXBWYXJJbmRleDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gQ2FsbHMgW2ZuXSB3aXRoIHRoZSB2YWx1ZSBvZiBldmFsdWF0aW5nIGFsbCBbbm9kZXNdLgogIC8vLwogIC8vLyBBbGwgcmVzdWx0cyBiZWZvcmUgdGhlIGxhc3Qgbm9kZSB3aGVyZSBgc2hvdWxkVHJhbnNmb3JtKG5vZGUpYCBhcmUgc3RvcmVkCiAgLy8vIGluIHRlbXBvcmFyeSB2YXJpYWJsZXMuCiAgLy8vCiAgLy8vIFNlZSBtb3JlIGV4cGxhbmF0aW9uIG9uIFt3aXRoRXhwcmVzc2lvbjJdLgogIC8vLwogIC8vLyBJZiBhbnkgb2YgdGhlIG5vZGVzIGFyZSBudWxsLCB0aGV5IGFyZSBpZ25vcmVkLCBhbmQgYSBudWxsIGlzIHBhc3NlZCB0bwogIC8vLyBbZm5dIGluIHRoYXQgcGxhY2UuCiAgd2l0aEV4cHJlc3Npb25zKExpc3Q8anMuRXhwcmVzc2lvbj4gbm9kZXMsIGZuKExpc3Q8anMuRXhwcmVzc2lvbj4gcmVzdWx0cykpIHsKICAgIGludCBvbGRUZW1wVmFySW5kZXggPSBjdXJyZW50VGVtcFZhckluZGV4OwogICAgLy8gRmluZCBsYXN0IG9jY3VycmVuY2Ugb2YgYSAndHJhbnNmb3JtJyBleHByZXNzaW9uIGluIFtub2Rlc10uCiAgICAvLyBBbGwgZXhwcmVzc2lvbnMgYmVmb3JlIHRoYXQgbXVzdCBiZSBzdG9yZWQgaW4gdGVtcC12YXJzLgogICAgaW50IGxhc3RUcmFuc2Zvcm1JbmRleCA9IDA7CiAgICBmb3IgKGludCBpID0gbm9kZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgaWYgKG5vZGVzW2ldID09IG51bGwpIGNvbnRpbnVlOwogICAgICBpZiAoc2hvdWxkVHJhbnNmb3JtKG5vZGVzW2ldKSkgewogICAgICAgIGxhc3RUcmFuc2Zvcm1JbmRleCA9IGk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIExpc3Q8anMuTm9kZT4gdmlzaXRlZCA9IG5vZGVzLnRha2UobGFzdFRyYW5zZm9ybUluZGV4KS5tYXAoKGpzLk5vZGUgbm9kZSkgewogICAgICByZXR1cm4gKG5vZGUgPT0gbnVsbCkgPyBudWxsIDogX3N0b3JlSWZOZWNlc3NhcnkodmlzaXRFeHByZXNzaW9uKG5vZGUpKTsKICAgIH0pLnRvTGlzdCgpOwogICAgdmlzaXRlZC5hZGRBbGwoCiAgICAgICAgbm9kZXMuc2tpcChsYXN0VHJhbnNmb3JtSW5kZXgpLm1hcDxqcy5FeHByZXNzaW9uPigoanMuTm9kZSBub2RlKSB7CiAgICAgIHJldHVybiAobm9kZSA9PSBudWxsKSA/IG51bGwgOiB2aXNpdEV4cHJlc3Npb24obm9kZSk7CiAgICB9KSk7CiAgICB2YXIgcmVzdWx0ID0gZm4odmlzaXRlZCk7CiAgICBjdXJyZW50VGVtcFZhckluZGV4ID0gb2xkVGVtcFZhckluZGV4OwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBFbWl0cyB0aGUgcmV0dXJuIGJsb2NrIHRoYXQgYWxsIHJldHVybnMganVtcCB0byAoYWZ0ZXIgZ29pbmcKICAvLy8gdGhyb3VnaCBhbGwgdGhlIGVuY2xvc2luZyBmaW5hbGx5IGJsb2NrcykuIFRoZSBqdW1wIHRvIGhlcmUgaXMgbWFkZSBpbgogIC8vLyBbdmlzaXRSZXR1cm5dLgogIHZvaWQgYWRkU3VjY2Vzc0V4aXQoU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pOwoKICAvLy8gRW1pdHMgdGhlIGJsb2NrIHRoYXQgY29udHJvbCBmbG93cyB0byBpZiBhbiBlcnJvciBoYXMgYmVlbiB0aHJvd24KICAvLy8gYnV0IG5vdCBjYXVnaHQuIChhZnRlciBnb2luZyB0aHJvdWdoIGFsbCB0aGUgZW5jbG9zaW5nIGZpbmFsbHkgYmxvY2tzKS4KICB2b2lkIGFkZEVycm9yRXhpdChTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbik7CgogIHZvaWQgYWRkRnVuY3Rpb25FeGl0cyhTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgYWRkU3VjY2Vzc0V4aXQoc291cmNlSW5mb3JtYXRpb24pOwogICAgYWRkRXJyb3JFeGl0KHNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSByZXdyaXR0ZW4gZnVuY3Rpb24uCiAganMuRnVuIGZpbmlzaEZ1bmN0aW9uKAogICAgICBMaXN0PGpzLlBhcmFtZXRlcj4gcGFyYW1ldGVycywKICAgICAgTGlzdDxqcy5QYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzLAogICAgICBqcy5TdGF0ZW1lbnQgcmV3cml0dGVuQm9keSwKICAgICAganMuVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QgdmFyaWFibGVEZWNsYXJhdGlvbnMsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIGZ1bmN0aW9uU291cmNlSW5mb3JtYXRpb24sCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIGJvZHlTb3VyY2VJbmZvcm1hdGlvbik7CgogIEl0ZXJhYmxlPGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24+IHZhcmlhYmxlSW5pdGlhbGl6YXRpb25zKAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbik7CgogIC8vLyBSZXdyaXRlcyBhbiBhc3luYy9zeW5jKi9hc3luYyogZnVuY3Rpb24gdG8gYSBub3JtYWwgSmF2YXNjcmlwdCBmdW5jdGlvbi4KICAvLy8KICAvLy8gVGhlIGNvbnRyb2wgZmxvdyBpcyBmbGF0dGVuZWQgYnkgc2ltdWxhdGluZyAnZ290bycgdXNpbmcgYSBzd2l0Y2ggaW4gYQogIC8vLyBsb29wIGFuZCBhIHN0YXRlIHZhcmlhYmxlIFtnb3RvXSBpbnNpZGUgYSBuZXN0ZWQgZnVuY3Rpb24gW2JvZHldCiAgLy8vIHRoYXQgY2FuIGJlIGNhbGxlZCBiYWNrIGJ5IFthc3luY1N0YXJIZWxwZXJdL1thc3luY1N0YXJIZWxwZXJdL3RoZQogIC8vLyBbSXRlcmF0b3JdLgogIC8vLwogIC8vLyBMb2NhbCB2YXJpYWJsZXMgYXJlIGhvaXN0ZWQgb3V0c2lkZSB0aGUgaGVscGVyLgogIC8vLwogIC8vLyBBd2FpdHMgaW4gYXN5bmMvYXN5bmMqIGFyZSB0cmFuc2xhdGVkIHRvIGNvZGUgdGhhdCByZW1lbWJlcnMgdGhlIGN1cnJlbnQKICAvLy8gbG9jYXRpb24gKHNvIHRoZSBmdW5jdGlvbiBjYW4gcmVzdW1lIGZyb20gd2hlcmUgaXQgd2FzKSBmb2xsb3dlZCBieSBhCiAgLy8vIFthd2FpdFN0YXRlbWVudF0uIFRoZSBoZWxwZXIgc2V0cyB1cCB0aGUgd2FpdGluZyBmb3IgdGhlIGF3YWl0ZWQKICAvLy8gdmFsdWUgYW5kIHJldHVybnMgYSBmdXR1cmUgd2hpY2ggaXMgaW1tZWRpYXRlbHkgcmV0dXJuZWQgYnkgdGhlCiAgLy8vIFthd2FpdFN0YXRlbWVudF0uCiAgLy8vCiAgLy8vIFlpZWxkcyBpbiBzeW5jKi9hc3luYyogYXJlIHRyYW5zbGF0ZWQgdG8gYSBjYWxscyB0byBoZWxwZXIgZnVuY3Rpb25zLgogIC8vLyAoc2VlIFt2aXNpdFlpZWxkXSkKICAvLy8KICAvLy8gU2ltcGxpZmllZCBleGFtcGxlcyAobm90IHRoZSBleGFjdCB0cmFuc2xhdGlvbiwgYnV0IGludGVuZGVkIHRvIHNob3cgdGhlCiAgLy8vIGlkZWFzKToKICAvLy8KICAvLy8gZnVuY3Rpb24gKHgsIHksIHopIGFzeW5jIHsKICAvLy8gICB2YXIgcCA9IGF3YWl0IGZvbygpOwogIC8vLyAgIHJldHVybiBiYXIocCk7CiAgLy8vIH0KICAvLy8KICAvLy8gQmVjb21lcyAod2l0aG91dCBlcnJvciBoYW5kbGluZyk6CiAgLy8vCiAgLy8vIGZ1bmN0aW9uKHgsIHksIHopIHsKICAvLy8gICB2YXIgZ290byA9IDAsIHJldHVyblZhbHVlLCBjb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyKCksIHA7CiAgLy8vICAgZnVuY3Rpb24gYm9keShyZXN1bHQpIHsKICAvLy8gICAgIHdoaWxlICh0cnVlKSB7CiAgLy8vICAgICAgIHN3aXRjaCAoZ290bykgewogIC8vLyAgICAgICAgIGNhc2UgMDoKICAvLy8gICAgICAgICAgIGdvdG8gPSAxIC8vIFJlbWVtYmVyIHdoZXJlIHRvIGNvbnRpbnVlIHdoZW4gdGhlIGZ1dHVyZSBzdWNjZWVkcy4KICAvLy8gICAgICAgICAgIHJldHVybiB0aGVuSGVscGVyKGZvbygpLCBoZWxwZXIsIGNvbXBsZXRlcik7CiAgLy8vICAgICAgICAgY2FzZSAxOgogIC8vLyAgICAgICAgICAgcCA9IHJlc3VsdDsKICAvLy8gICAgICAgICAgIHJldHVyblZhbHVlID0gYmFyKHApOwogIC8vLyAgICAgICAgICAgZ290byA9IDI7CiAgLy8vICAgICAgICAgICBicmVhazsKICAvLy8gICAgICAgICBjYXNlIDI6CiAgLy8vICAgICAgICAgICByZXR1cm4gdGhlbkhlbHBlcihyZXR1cm5WYWx1ZSwgbnVsbCwgY29tcGxldGVyKQogIC8vLyAgICAgICB9CiAgLy8vICAgICB9CiAgLy8vICAgICByZXR1cm4gdGhlbkhlbHBlcihudWxsLCBoZWxwZXIsIGNvbXBsZXRlcik7CiAgLy8vICAgfQogIC8vLyB9CiAgLy8vCiAgLy8vIFRyeS9jYXRjaCBpcyBpbXBsZW1lbnRlZCBieSBtYWludGFpbmluZyBbaGFuZGxlcl0gdG8gY29udGFpbiB0aGUgbGFiZWwKICAvLy8gb2YgdGhlIGN1cnJlbnQgaGFuZGxlci4gSWYgW2JvZHldIHRocm93cywgdGhlIGNhbGxlciBzaG91bGQgY2F0Y2ggdGhlCiAgLy8vIGVycm9yIGFuZCByZWNhbGwgW2JvZHldIHdpdGggZmlyc3QgYXJndW1lbnQgW2Vycm9yX2NvZGVzLkVSUk9SXSBhbmQKICAvLy8gc2Vjb25kIGFyZ3VtZW50IHRoZSBlcnJvci4KICAvLy8KICAvLy8gQSBgZmluYWxseWAgY2xhdXNlIGlzIGNvbXBpbGVkIHNpbWlsYXIgdG8gbm9ybWFsIGNvZGUsIHdpdGggdGhlIGFkZGl0aW9uYWwKICAvLy8gY29tcGxleGl0eSB0aGF0IGBmaW5hbGx5YCBjbGF1c2VzIG5lZWQgdG8ga25vdyB3aGVyZSB0byBqdW1wIHRvIGFmdGVyIHRoZQogIC8vLyBjbGF1c2UgaXMgZG9uZS4gSW4gdGhlIHRyYW5zbGF0aW9uLCBlYWNoIGZsb3ctcGF0aCB0aGF0IGVudGVycyBhIGBmaW5hbGx5YAogIC8vLyBzZXRzIHVwIHRoZSB2YXJpYWJsZSBbbmV4dF0gd2l0aCBhIHN0YWNrIG9mIGZpbmFsbHktYmxvY2tzIGFuZCBhIGZpbmFsCiAgLy8vIGp1bXAtdGFyZ2V0IChleGl0LCBjYXRjaCwgLi4uKS4KICAvLy8KICAvLy8gZnVuY3Rpb24oeCwgeSwgeikgYXN5bmMgewogIC8vLyAgIHRyeSB7CiAgLy8vICAgICB0cnkgewogIC8vLyAgICAgICB0aHJvdyAiZXJyb3IiOwogIC8vLyAgICAgfSBmaW5hbGx5IHsKICAvLy8gICAgICAgZmluYWxpemUxKCk7CiAgLy8vICAgICB9CiAgLy8vICAgfSBjYXRjaCAoZSkgewogIC8vLyAgICAgaGFuZGxlKGUpOwogIC8vLyAgIH0gZmluYWxseSB7CiAgLy8vICAgICBmaW5hbGl6ZTIoKTsKICAvLy8gICB9CiAgLy8vIH0KICAvLy8KICAvLy8gVHJhbnNsYXRlcyBpbnRvIChiZXNpZGVzIHRoZSBmYWN0IHRoYXQgc3RydWN0dXJlcyBub3QgY29udGFpbmluZwogIC8vLyBhd2FpdC95aWVsZC95aWVsZCogYXJlIGxlZnQgaW50YWN0KToKICAvLy8KICAvLy8gZnVuY3Rpb24oeCwgeSwgeikgewogIC8vLyAgIHZhciBnb3RvID0gMDsKICAvLy8gICB2YXIgcmV0dXJuVmFsdWU7CiAgLy8vICAgdmFyIGNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXIoKTsKICAvLy8gICB2YXIgaGFuZGxlciA9IDg7IC8vIE91dHNpZGUgdHJ5LWJsb2NrcyBnbyB0byB0aGUgcmV0aHJvdyBsYWJlbC4KICAvLy8gICB2YXIgcDsKICAvLy8gICB2YXIgY3VycmVudEVycm9yOwogIC8vLyAgIC8vIFRoZSByZXN1bHQgY2FuIGJlIGVpdGhlciB0aGUgcmVzdWx0IG9mIGFuIGF3YWl0ZWQgZnV0dXJlLCBvciBhbgogIC8vLyAgIC8vIGVycm9yIGlmIHRoZSBmdXR1cmUgY29tcGxldGVkIHdpdGggYW4gZXJyb3IuCiAgLy8vICAgZnVuY3Rpb24gYm9keShlcnJvckNvZGUsIHJlc3VsdCkgewogIC8vLyAgICAgaWYgKGVycm9yQ29kZSA9PSAxKSB7CiAgLy8vICAgICAgIGN1cnJlbnRFcnJvciA9IHJlc3VsdDsKICAvLy8gICAgICAgZ290byA9IGhhbmRsZXI7CiAgLy8vICAgICB9CiAgLy8vICAgICB3aGlsZSAodHJ1ZSkgewogIC8vLyAgICAgICBzd2l0Y2ggKGdvdG8pIHsKICAvLy8gICAgICAgICBjYXNlIDA6CiAgLy8vICAgICAgICAgICBoYW5kbGVyID0gNDsgLy8gVGhlIG91dGVyIGNhdGNoLWhhbmRsZXIKICAvLy8gICAgICAgICAgIGhhbmRsZXIgPSAxOyAvLyBUaGUgaW5uZXIgKGltcGxpY2l0KSBjYXRjaC1oYW5kbGVyCiAgLy8vICAgICAgICAgICB0aHJvdyAiZXJyb3IiOwogIC8vLyAgICAgICAgICAgbmV4dCA9IFszXTsKICAvLy8gICAgICAgICAgIC8vIEFmdGVyIHRoZSBmaW5hbGx5ICgyKSBjb250aW51ZSBub3JtYWxseSBhZnRlciB0aGUgdHJ5LgogIC8vLyAgICAgICAgICAgZ290byA9IDI7CiAgLy8vICAgICAgICAgICBicmVhazsKICAvLy8gICAgICAgICBjYXNlIDE6IC8vIChpbXBsaWNpdCkgY2F0Y2ggaGFuZGxlciBmb3IgaW5uZXIgdHJ5LgogIC8vLyAgICAgICAgICAgbmV4dCA9IFszXTsgLy8gZGVzdGluYXRpb24gYWZ0ZXIgdGhlIGZpbmFsbHkuCiAgLy8vICAgICAgICAgICAvLyBmYWxsLXRob3VnaCB0byB0aGUgZmluYWxseSBoYW5kbGVyLgogIC8vLyAgICAgICAgIGNhc2UgMjogLy8gZmluYWxseSBmb3IgaW5uZXIgdHJ5CiAgLy8vICAgICAgICAgICBoYW5kbGVyID0gNDsgLy8gY2F0Y2gtaGFuZGxlciBmb3Igb3V0ZXIgdHJ5LgogIC8vLyAgICAgICAgICAgZmluYWxpemUxKCk7CiAgLy8vICAgICAgICAgICBnb3RvID0gbmV4dC5wb3AoKTsKICAvLy8gICAgICAgICAgIGJyZWFrOwogIC8vLyAgICAgICAgIGNhc2UgMzogLy8gZXhpdGluZyBpbm5lciB0cnkuCiAgLy8vICAgICAgICAgICBuZXh0ID0gWzZdOwogIC8vLyAgICAgICAgICAgZ290byA9IDU7IC8vIGZpbmFsbHkgaGFuZGxlciBmb3Igb3V0ZXIgdHJ5LgogIC8vLyAgICAgICAgICAgYnJlYWs7CiAgLy8vICAgICAgICAgY2FzZSA0OiAvLyBjYXRjaCBoYW5kbGVyIGZvciBvdXRlciB0cnkuCiAgLy8vICAgICAgICAgICBoYW5kbGVyID0gNTsgLy8gSWYgdGhlIGhhbmRsZXIgdGhyb3dzLCBkbyB0aGUgZmluYWxseSAuLgogIC8vLyAgICAgICAgICAgbmV4dCA9IFs4XSAvLyAuLi4gYW5kIHJldGhyb3cuCiAgLy8vICAgICAgICAgICBlID0gc3RvcmVkRXJyb3I7CiAgLy8vICAgICAgICAgICBoYW5kbGUoZSk7CiAgLy8vICAgICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gZmluYWxseS4KICAvLy8gICAgICAgICBjYXNlIDU6IC8vIGZpbmFsbHkgaGFuZGxlciBmb3Igb3V0ZXIgdHJ5LgogIC8vLyAgICAgICAgICAgaGFuZGxlciA9IG51bGw7CiAgLy8vICAgICAgICAgICBmaW5hbGl6ZTIoKTsKICAvLy8gICAgICAgICAgIGdvdG8gPSBuZXh0LnBvcCgpOwogIC8vLyAgICAgICAgICAgYnJlYWs7CiAgLy8vICAgICAgICAgY2FzZSA2OiAvLyBFeGl0aW5nIG91dGVyIHRyeS4KICAvLy8gICAgICAgICBjYXNlIDc6IC8vIHJldHVybgogIC8vLyAgICAgICAgICAgcmV0dXJuIHRoZW5IZWxwZXIocmV0dXJuVmFsdWUsIDAsIGNvbXBsZXRlcik7CiAgLy8vICAgICAgICAgY2FzZSA4OiAvLyBSZXRocm93CiAgLy8vICAgICAgICAgICByZXR1cm4gdGhlbkhlbHBlcihjdXJyZW50RXJyb3IsIDEsIGNvbXBsZXRlcik7CiAgLy8vICAgICAgIH0KICAvLy8gICAgIH0KICAvLy8gICAgIHJldHVybiB0aGVuSGVscGVyKG51bGwsIGhlbHBlciwgY29tcGxldGVyKTsKICAvLy8gICB9CiAgLy8vIH0KICAvLy8KICAvLy8gW2JvZHlTb3VyY2VJbmZvcm1hdGlvbl0gaXMgdXNlZCBvbiBjb2RlIGdlbmVyYXRlZCB0byBleGVjdXRlIHRoZSBmdW5jdGlvbgogIC8vLyBib2R5IGFuZCBbZXhpdFNvdXJjZUluZm9ybWF0aW9uXSBpcyB1c2VkIG9uIGNvZGUgZ2VuZXJhdGVkIHRvIGV4aXQgdGhlCiAgLy8vIGZ1bmN0aW9uLgogIGpzLkV4cHJlc3Npb24gcmV3cml0ZUZ1bmN0aW9uKAogICAgICBqcy5GdW4gbm9kZSwKICAgICAgU291cmNlSW5mb3JtYXRpb24gYm9keVNvdXJjZUluZm9ybWF0aW9uLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBleGl0U291cmNlSW5mb3JtYXRpb24pIHsKICAgIGJlZ2luTGFiZWwobmV3TGFiZWwoIkZ1bmN0aW9uIHN0YXJ0IikpOwogICAgLy8gQXN5bmNTdGFyIG5lZWRzIGEgcmV0dXJuIGxhYmVsIGZvciBpdHMgaGFuZGxpbmcgb2YgY2FuY2VsbGF0aW9uLiBTZWUKICAgIC8vIFt2aXNpdERhcnRZaWVsZF0uCiAgICBleGl0TGFiZWwgPSAoYW5hbHlzaXMuaGFzRXhwbGljaXRSZXR1cm5zIHx8IGlzQXN5bmNTdGFyKQogICAgICAgID8gbmV3TGFiZWwoInJldHVybiIpCiAgICAgICAgOiBudWxsOwogICAgcmV0aHJvd0xhYmVsID0gbmV3TGFiZWwoInJldGhyb3ciKTsKICAgIGhhbmRsZXJMYWJlbHNbbm9kZV0gPSByZXRocm93TGFiZWw7CiAgICBqcy5TdGF0ZW1lbnQgYm9keSA9IG5vZGUuYm9keTsKICAgIGp1bXBUYXJnZXRzLmFkZChub2RlKTsKICAgIHZpc2l0U3RhdGVtZW50KGJvZHkpOwogICAganVtcFRhcmdldHMucmVtb3ZlTGFzdCgpOwogICAgYWRkRnVuY3Rpb25FeGl0cyhleGl0U291cmNlSW5mb3JtYXRpb24pOwoKICAgIExpc3Q8anMuU3dpdGNoQ2xhdXNlPiBjbGF1c2VzID0gbGFiZWxsZWRQYXJ0cy5rZXlzLm1hcCgobGFiZWwpIHsKICAgICAgcmV0dXJuIG5ldyBqcy5DYXNlKGpzLm51bWJlcihsYWJlbCksIG5ldyBqcy5CbG9jayhsYWJlbGxlZFBhcnRzW2xhYmVsXSkpOwogICAgfSkudG9MaXN0KCk7CiAgICBqcy5TdGF0ZW1lbnQgcmV3cml0dGVuQm9keSA9IG5ldyBqcy5Td2l0Y2goZ290bywgY2xhdXNlcykKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKGJvZHlTb3VyY2VJbmZvcm1hdGlvbik7CiAgICBpZiAoaGFzSnVtcFRob3VnaE91dGVyTGFiZWwpIHsKICAgICAgcmV3cml0dGVuQm9keSA9IG5ldyBqcy5MYWJlbGVkU3RhdGVtZW50KG91dGVyTGFiZWxOYW1lLCByZXdyaXR0ZW5Cb2R5KTsKICAgIH0KICAgIHJld3JpdHRlbkJvZHkgPSBqcy5qcwogICAgICAgIC5zdGF0ZW1lbnQoJ3doaWxlICh0cnVlKSB7I30nLCByZXdyaXR0ZW5Cb2R5KQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oYm9keVNvdXJjZUluZm9ybWF0aW9uKTsKICAgIExpc3Q8anMuVmFyaWFibGVJbml0aWFsaXphdGlvbj4gdmFyaWFibGVzID0gPGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24+W107CgogICAgdmFyaWFibGVzLmFkZCgKICAgICAgICBfbWFrZVZhcmlhYmxlSW5pdGlhbGl6ZXIoZ290bywganMubnVtYmVyKDApLCBib2R5U291cmNlSW5mb3JtYXRpb24pKTsKICAgIHZhcmlhYmxlcy5hZGRBbGwodmFyaWFibGVJbml0aWFsaXphdGlvbnMoYm9keVNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICBpZiAoaGFzSGFuZGxlckxhYmVscykgewogICAgICB2YXJpYWJsZXMuYWRkKF9tYWtlVmFyaWFibGVJbml0aWFsaXplcigKICAgICAgICAgIGhhbmRsZXIsIGpzLm51bWJlcihyZXRocm93TGFiZWwpLCBib2R5U291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgdmFyaWFibGVzLmFkZCgKICAgICAgICAgIF9tYWtlVmFyaWFibGVJbml0aWFsaXplcihjdXJyZW50RXJyb3IsIG51bGwsIGJvZHlTb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQogICAgaWYgKGFuYWx5c2lzLmhhc0ZpbmFsbHkgfHwgKGlzQXN5bmNTdGFyICYmIGFuYWx5c2lzLmhhc1lpZWxkKSkgewogICAgICB2YXJpYWJsZXMuYWRkKF9tYWtlVmFyaWFibGVJbml0aWFsaXplcihuZXh0LAogICAgICAgICAgbmV3IGpzLkFycmF5SW5pdGlhbGl6ZXIoPGpzLkV4cHJlc3Npb24+W10pLCBib2R5U291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICAgIGlmIChhbmFseXNpcy5oYXNUaGlzICYmICFpc1N5bmNTdGFyKSB7CiAgICAgIC8vIFN5bmMqIGZ1bmN0aW9ucyBtdXN0IHJlbWVtYmVyIGB0aGlzYCBvbiB0aGUgbGV2ZWwgb2YgdGhlIG91dGVyCiAgICAgIC8vIGZ1bmN0aW9uLgogICAgICB2YXJpYWJsZXMuYWRkKAogICAgICAgICAgX21ha2VWYXJpYWJsZUluaXRpYWxpemVyKHNlbGYsIGpzLmpzKCd0aGlzJyksIGJvZHlTb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQogICAgdmFyaWFibGVzLmFkZEFsbChsb2NhbFZhcmlhYmxlcy5tYXAoKGpzLlZhcmlhYmxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb24pIHsKICAgICAgcmV0dXJuIG5ldyBqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uKGRlY2xhcmF0aW9uLCBudWxsKTsKICAgIH0pKTsKICAgIHZhcmlhYmxlcy5hZGRBbGwobmV3IEl0ZXJhYmxlLmdlbmVyYXRlKAogICAgICAgIHRlbXBWYXJIaWdoV2F0ZXJNYXJrLAogICAgICAgIChpbnQgaSkgPT4gX21ha2VWYXJpYWJsZUluaXRpYWxpemVyKAogICAgICAgICAgICB1c2VUZW1wVmFyKGkgKyAxKS5uYW1lLCBudWxsLCBib2R5U291cmNlSW5mb3JtYXRpb24pKSk7CiAgICBqcy5WYXJpYWJsZURlY2xhcmF0aW9uTGlzdCB2YXJpYWJsZURlY2xhcmF0aW9ucyA9CiAgICAgICAgbmV3IGpzLlZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KHZhcmlhYmxlcyk7CgogICAgLy8gTmFtZXMgYXJlIGFscmVhZHkgc2FmZSB3aGVuIGFkZGVkLgogICAgTGlzdDxqcy5QYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzID0KICAgICAgICB0eXBlQXJndW1lbnROYW1lcy5tYXAoKG5hbWUpID0+IG5ldyBqcy5QYXJhbWV0ZXIobmFtZSkpLnRvTGlzdCgpOwogICAgcmV0dXJuIGZpbmlzaEZ1bmN0aW9uKG5vZGUucGFyYW1zLCB0eXBlUGFyYW1ldGVycywgcmV3cml0dGVuQm9keSwKICAgICAgICB2YXJpYWJsZURlY2xhcmF0aW9ucywgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbiwgYm9keVNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIGpzLkV4cHJlc3Npb24gdmlzaXRGdW4oanMuRnVuIG5vZGUpIHsKICAgIGlmIChub2RlLmFzeW5jTW9kaWZpZXIuaXNBc3luYyB8fCBub2RlLmFzeW5jTW9kaWZpZXIuaXNZaWVsZGluZykgewogICAgICAvLyBUaGUgdHJhbnNsYXRpb24gZG9lcyBub3QgaGFuZGxlIG5lc3RlZCBmdW5jdGlvbnMgdGhhdCBhcmUgZ2VuZXJhdG9ycwogICAgICAvLyBvciBhc3luY2hyb25vdXMuICBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIG9ubHkgYmUgb25lcyB0aGF0IGFyZQogICAgICAvLyBpbnRyb2R1Y2VkIGJ5IEpTIGZvcmVpZ24gY29kZSBmcm9tIG91ciBvd24gbGlicmFyaWVzLgogICAgICByZXBvcnRlci5pbnRlcm5hbEVycm9yKAogICAgICAgICAgc3Bhbm5hYmxlLCAnTmVzdGVkIGZ1bmN0aW9uIGlzIGEgZ2VuZXJhdG9yIG9yIGFzeW5jaHJvbm91cy4nKTsKICAgIH0KICAgIHJldHVybiBub2RlOwogIH0KCiAgQG92ZXJyaWRlCiAganMuRXhwcmVzc2lvbiB2aXNpdEFjY2Vzcyhqcy5Qcm9wZXJ0eUFjY2VzcyBub2RlKSB7CiAgICByZXR1cm4gd2l0aEV4cHJlc3Npb24yKG5vZGUucmVjZWl2ZXIsIG5vZGUuc2VsZWN0b3IsCiAgICAgICAgKHJlY2VpdmVyLCBzZWxlY3RvcikgPT4ganMuanMoJyNbI10nLCBbcmVjZWl2ZXIsIHNlbGVjdG9yXSkpOwogIH0KCiAgQG92ZXJyaWRlCiAganMuRXhwcmVzc2lvbiB2aXNpdEFycmF5SG9sZShqcy5BcnJheUhvbGUgbm9kZSkgewogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5FeHByZXNzaW9uIHZpc2l0QXJyYXlJbml0aWFsaXplcihqcy5BcnJheUluaXRpYWxpemVyIG5vZGUpIHsKICAgIHJldHVybiB3aXRoRXhwcmVzc2lvbnMobm9kZS5lbGVtZW50cywgKGVsZW1lbnRzKSB7CiAgICAgIHJldHVybiBuZXcganMuQXJyYXlJbml0aWFsaXplcihlbGVtZW50cyk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIGpzLkV4cHJlc3Npb24gdmlzaXRBc3NpZ25tZW50KGpzLkFzc2lnbm1lbnQgbm9kZSkgewogICAgaWYgKCFzaG91bGRUcmFuc2Zvcm0obm9kZSkpIHsKICAgICAgcmV0dXJuIG5ldyBqcy5Bc3NpZ25tZW50LmNvbXBvdW5kKHZpc2l0RXhwcmVzc2lvbihub2RlLmxlZnRIYW5kU2lkZSksCiAgICAgICAgICBub2RlLm9wLCB2aXNpdEV4cHJlc3Npb24obm9kZS52YWx1ZSkpOwogICAgfQogICAganMuRXhwcmVzc2lvbiBsZWZ0SGFuZFNpZGUgPSBub2RlLmxlZnRIYW5kU2lkZTsKICAgIGlmIChsZWZ0SGFuZFNpZGUgaXMganMuVmFyaWFibGVVc2UpIHsKICAgICAgcmV0dXJuIHdpdGhFeHByZXNzaW9uKG5vZGUudmFsdWUsIChqcy5FeHByZXNzaW9uIHZhbHVlKSB7CiAgICAgICAgLy8gQSBub24tY29tcG91bmQgW2pzLkFzc2lnbm1lbnRdIGhhcyBgb3A9PW51bGxgLiBTbyBpdCB3b3JrcyBvdXQgdG8KICAgICAgICAvLyB1c2UgW2pzLkFzc2lnbm1lbnQuY29tcG91bmRdIGZvciBhbGwgY2FzZXMuCiAgICAgICAgLy8gVmlzaXQgdGhlIFtqcy5WYXJpYWJsZVVzZV0gdG8gZW5zdXJlIHJlbmFtaW5nIGlzIGRvbmUgY29ycmVjdGx5LgogICAgICAgIHJldHVybiBuZXcganMuQXNzaWdubWVudC5jb21wb3VuZCgKICAgICAgICAgICAgdmlzaXRFeHByZXNzaW9uKGxlZnRIYW5kU2lkZSksIG5vZGUub3AsIHZhbHVlKTsKICAgICAgfSwgc3RvcmU6IGZhbHNlKTsKICAgIH0gZWxzZSBpZiAobGVmdEhhbmRTaWRlIGlzIGpzLlByb3BlcnR5QWNjZXNzKSB7CiAgICAgIHJldHVybiB3aXRoRXhwcmVzc2lvbnMoCiAgICAgICAgICBbbGVmdEhhbmRTaWRlLnJlY2VpdmVyLCBsZWZ0SGFuZFNpZGUuc2VsZWN0b3IsIG5vZGUudmFsdWVdLAogICAgICAgICAgKGV2YWx1YXRlZCkgewogICAgICAgIHJldHVybiBuZXcganMuQXNzaWdubWVudC5jb21wb3VuZCgKICAgICAgICAgICAgbmV3IGpzLlByb3BlcnR5QWNjZXNzKGV2YWx1YXRlZFswXSwgZXZhbHVhdGVkWzFdKSwKICAgICAgICAgICAgbm9kZS5vcCwKICAgICAgICAgICAgZXZhbHVhdGVkWzJdKTsKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyAiVW5leHBlY3RlZCBhc3NpZ25tZW50IGxlZnQgaGFuZCBzaWRlICRsZWZ0SGFuZFNpZGUiOwogICAgfQogIH0KCiAganMuU3RhdGVtZW50IGF3YWl0U3RhdGVtZW50KAogICAgICBqcy5FeHByZXNzaW9uIHZhbHVlLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbik7CgogIC8vLyBBbiBhd2FpdCBpcyB0cmFuc2xhdGVkIHRvIGFuIFthd2FpdFN0YXRlbWVudF0uCiAgLy8vCiAgLy8vIFNlZSB0aGUgY29tbWVudHMgb2YgW3Jld3JpdGVGdW5jdGlvbl0gZm9yIGFuIGV4YW1wbGUuCiAgQG92ZXJyaWRlCiAganMuRXhwcmVzc2lvbiB2aXNpdEF3YWl0KGpzLkF3YWl0IG5vZGUpIHsKICAgIGFzc2VydChpc0FzeW5jIHx8IGlzQXN5bmNTdGFyKTsKICAgIGludCBhZnRlckF3YWl0ID0gbmV3TGFiZWwoInJldHVybmluZyBmcm9tIGF3YWl0LiIpOwogICAgd2l0aEV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uLCAoanMuRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgICBhZGRTdGF0ZW1lbnQoc2V0R290b1ZhcmlhYmxlKGFmdGVyQXdhaXQsIG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgYWRkU3RhdGVtZW50KGF3YWl0U3RhdGVtZW50KHZhbHVlLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9LCBzdG9yZTogZmFsc2UpOwogICAgYmVnaW5MYWJlbChhZnRlckF3YWl0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gQ2hlY2tzIGlmIFtub2RlXSBpcyB0aGUgdmFyaWFibGUgbmFtZWQgW3Jlc3VsdE5hbWVdLgogIC8vLwogIC8vLyBbcmVzdWx0XSBpcyB1c2VkIHRvIGhvbGQgdGhlIHJlc3VsdCBvZiBhIHRyYW5zZm9ybWVkIGNvbXB1dGF0aW9uCiAgLy8vIGZvciBleGFtcGxlIHRoZSByZXN1bHQgb2YgYXdhaXRpbmcsIG9yIHRoZSByZXN1bHQgb2YgYSBjb25kaXRpb25hbCBvcgogIC8vLyBzaG9ydC1jaXJjdWl0aW5nIGV4cHJlc3Npb24uCiAgLy8vIElmIHRoZSBzdWJleHByZXNzaW9uIG9mIHNvbWUgdHJhbnNmb3JtZWQgbm9kZSBhbHJlYWR5IGlzIHRyYW5zZm9ybWVkIGFuZAogIC8vLyB2aXNpdGluZyBpdCByZXR1cm5zIFtyZXN1bHRdLCBpdCBpcyBub3QgcmVkdW5kYW50bHkgYXNzaWduZWQgdG8gaXRzZWxmCiAgLy8vIGFnYWluLgogIGJvb2wgaXNSZXN1bHQoanMuRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gbm9kZSBpcyBqcy5WYXJpYWJsZVVzZSAmJiBub2RlLm5hbWUgPT0gcmVzdWx0TmFtZTsKICB9CgogIEBvdmVycmlkZQogIGpzLkV4cHJlc3Npb24gdmlzaXRCaW5hcnkoanMuQmluYXJ5IG5vZGUpIHsKICAgIGlmIChzaG91bGRUcmFuc2Zvcm0obm9kZS5yaWdodCkgJiYgKG5vZGUub3AgPT0gInx8IiB8fCBub2RlLm9wID09ICImJiIpKSB7CiAgICAgIGludCB0aGVuTGFiZWwgPSBuZXdMYWJlbCgidGhlbiIpOwogICAgICBpbnQgam9pbkxhYmVsID0gbmV3TGFiZWwoImpvaW4iKTsKICAgICAgd2l0aEV4cHJlc3Npb24obm9kZS5sZWZ0LCAoanMuRXhwcmVzc2lvbiBsZWZ0KSB7CiAgICAgICAganMuU3RhdGVtZW50IGFzc2lnbkxlZnQgPSBpc1Jlc3VsdChsZWZ0KQogICAgICAgICAgICA/IG5ldyBqcy5CbG9jay5lbXB0eSgpCiAgICAgICAgICAgIDoganMuanMuc3RhdGVtZW50KCcjID0gIzsnLCBbcmVzdWx0LCBsZWZ0XSk7CiAgICAgICAgaWYgKG5vZGUub3AgPT0gIiYmIikgewogICAgICAgICAgYWRkU3RhdGVtZW50KGpzLmpzLnN0YXRlbWVudCgnaWYgKCMpIHsjfSBlbHNlICMnLCBbCiAgICAgICAgICAgIGxlZnQsCiAgICAgICAgICAgIGdvdG9BbmRCcmVhayh0aGVuTGFiZWwsIG5vZGUuc291cmNlSW5mb3JtYXRpb24pLAogICAgICAgICAgICBhc3NpZ25MZWZ0CiAgICAgICAgICBdKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFzc2VydChub2RlLm9wID09ICJ8fCIpOwogICAgICAgICAgYWRkU3RhdGVtZW50KGpzLmpzLnN0YXRlbWVudCgnaWYgKCMpIHsjfSBlbHNlICMnLCBbCiAgICAgICAgICAgIGxlZnQsCiAgICAgICAgICAgIGFzc2lnbkxlZnQsCiAgICAgICAgICAgIGdvdG9BbmRCcmVhayh0aGVuTGFiZWwsIG5vZGUuc291cmNlSW5mb3JtYXRpb24pCiAgICAgICAgICBdKSk7CiAgICAgICAgfQogICAgICB9LCBzdG9yZTogdHJ1ZSk7CiAgICAgIGFkZEdvdG8oam9pbkxhYmVsLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgYmVnaW5MYWJlbCh0aGVuTGFiZWwpOwogICAgICB3aXRoRXhwcmVzc2lvbihub2RlLnJpZ2h0LCAoanMuRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgICAgIGlmICghaXNSZXN1bHQodmFsdWUpKSB7CiAgICAgICAgICBhZGRTdGF0ZW1lbnQoanMuanMuc3RhdGVtZW50KCcjID0gIzsnLCBbcmVzdWx0LCB2YWx1ZV0pKTsKICAgICAgICB9CiAgICAgIH0sIHN0b3JlOiBmYWxzZSk7CiAgICAgIGJlZ2luTGFiZWwoam9pbkxhYmVsKTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICByZXR1cm4gd2l0aEV4cHJlc3Npb24yKG5vZGUubGVmdCwgbm9kZS5yaWdodCwKICAgICAgICAobGVmdCwgcmlnaHQpID0+IG5ldyBqcy5CaW5hcnkobm9kZS5vcCwgbGVmdCwgcmlnaHQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCbG9jayhqcy5CbG9jayBub2RlKSB7CiAgICBmb3IgKGpzLlN0YXRlbWVudCBzdGF0ZW1lbnQgaW4gbm9kZS5zdGF0ZW1lbnRzKSB7CiAgICAgIHZpc2l0U3RhdGVtZW50KHN0YXRlbWVudCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QnJlYWsoanMuQnJlYWsgbm9kZSkgewogICAganMuTm9kZSB0YXJnZXQgPSBhbmFseXNpcy50YXJnZXRzW25vZGVdOwogICAgaWYgKCFzaG91bGRUcmFuc2Zvcm0odGFyZ2V0KSkgewogICAgICBhZGRTdGF0ZW1lbnQobm9kZSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRyYW5zbGF0ZUp1bXAodGFyZ2V0LCBicmVha0xhYmVsc1t0YXJnZXRdLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIGpzLkV4cHJlc3Npb24gdmlzaXRDYWxsKGpzLkNhbGwgbm9kZSkgewogICAgYm9vbCBzdG9yZVRhcmdldCA9IG5vZGUuYXJndW1lbnRzLmFueShzaG91bGRUcmFuc2Zvcm0pOwogICAgcmV0dXJuIHdpdGhDYWxsVGFyZ2V0RXhwcmVzc2lvbihub2RlLnRhcmdldCwgKHRhcmdldCkgewogICAgICByZXR1cm4gd2l0aEV4cHJlc3Npb25zKG5vZGUuYXJndW1lbnRzLCAoTGlzdDxqcy5FeHByZXNzaW9uPiBhcmd1bWVudHMpIHsKICAgICAgICByZXR1cm4gbmV3IGpzLkNhbGwodGFyZ2V0LCBhcmd1bWVudHMpCiAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIH0pOwogICAgfSwgc3RvcmU6IHN0b3JlVGFyZ2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDYXNlKGpzLkNhc2Ugbm9kZSkgewogICAgcmV0dXJuIHVucmVhY2hhYmxlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENhdGNoKGpzLkNhdGNoIG5vZGUpIHsKICAgIHJldHVybiB1bnJlYWNoYWJsZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb21tZW50KGpzLkNvbW1lbnQgbm9kZSkgewogICAgYWRkU3RhdGVtZW50KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAganMuRXhwcmVzc2lvbiB2aXNpdENvbmRpdGlvbmFsKGpzLkNvbmRpdGlvbmFsIG5vZGUpIHsKICAgIGlmICghc2hvdWxkVHJhbnNmb3JtKG5vZGUudGhlbikgJiYgIXNob3VsZFRyYW5zZm9ybShub2RlLm90aGVyd2lzZSkpIHsKICAgICAgcmV0dXJuIGpzLmpzKCcjID8gIyA6ICMnLCBbCiAgICAgICAgdmlzaXRFeHByZXNzaW9uKG5vZGUuY29uZGl0aW9uKSwKICAgICAgICB2aXNpdEV4cHJlc3Npb24obm9kZS50aGVuKSwKICAgICAgICB2aXNpdEV4cHJlc3Npb24obm9kZS5vdGhlcndpc2UpCiAgICAgIF0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0KICAgIGludCB0aGVuTGFiZWwgPSBuZXdMYWJlbCgidGhlbiIpOwogICAgaW50IGpvaW5MYWJlbCA9IG5ld0xhYmVsKCJqb2luIik7CiAgICBpbnQgZWxzZUxhYmVsID0gbmV3TGFiZWwoImVsc2UiKTsKICAgIHdpdGhFeHByZXNzaW9uKG5vZGUuY29uZGl0aW9uLCAoanMuRXhwcmVzc2lvbiBjb25kaXRpb24pIHsKICAgICAgYWRkU3RhdGVtZW50KGpzLmpzLnN0YXRlbWVudCgnIyA9ICMgPyAjIDogIzsnLAogICAgICAgICAgW2dvdG8sIGNvbmRpdGlvbiwganMubnVtYmVyKHRoZW5MYWJlbCksIGpzLm51bWJlcihlbHNlTGFiZWwpXSkpOwogICAgfSwgc3RvcmU6IGZhbHNlKTsKICAgIGFkZEJyZWFrKG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogICAgYmVnaW5MYWJlbCh0aGVuTGFiZWwpOwogICAgd2l0aEV4cHJlc3Npb24obm9kZS50aGVuLCAoanMuRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgICBpZiAoIWlzUmVzdWx0KHZhbHVlKSkgewogICAgICAgIGFkZFN0YXRlbWVudChqcy5qcy5zdGF0ZW1lbnQoJyMgPSAjOycsIFtyZXN1bHQsIHZhbHVlXSkpOwogICAgICB9CiAgICB9LCBzdG9yZTogZmFsc2UpOwogICAgYWRkR290byhqb2luTGFiZWwsIG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogICAgYmVnaW5MYWJlbChlbHNlTGFiZWwpOwogICAgd2l0aEV4cHJlc3Npb24obm9kZS5vdGhlcndpc2UsIChqcy5FeHByZXNzaW9uIHZhbHVlKSB7CiAgICAgIGlmICghaXNSZXN1bHQodmFsdWUpKSB7CiAgICAgICAgYWRkU3RhdGVtZW50KGpzLmpzLnN0YXRlbWVudCgnIyA9ICM7JywgW3Jlc3VsdCwgdmFsdWVdKSk7CiAgICAgIH0KICAgIH0sIHN0b3JlOiBmYWxzZSk7CiAgICBiZWdpbkxhYmVsKGpvaW5MYWJlbCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnRpbnVlKGpzLkNvbnRpbnVlIG5vZGUpIHsKICAgIGpzLk5vZGUgdGFyZ2V0ID0gYW5hbHlzaXMudGFyZ2V0c1tub2RlXTsKICAgIGlmICghc2hvdWxkVHJhbnNmb3JtKHRhcmdldCkpIHsKICAgICAgYWRkU3RhdGVtZW50KG5vZGUpOwogICAgICByZXR1cm47CiAgICB9CiAgICB0cmFuc2xhdGVKdW1wKHRhcmdldCwgY29udGludWVMYWJlbHNbdGFyZ2V0XSwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICAvLy8gRW1pdHMgYSBicmVhayBzdGF0ZW1lbnQgdGhhdCBleGl0cyB0aGUgYmlnIHN3aXRjaCBzdGF0ZW1lbnQuCiAgdm9pZCBhZGRCcmVhayhTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgaWYgKGluc2lkZVVudHJhbnNsYXRlZEJyZWFrYWJsZSkgewogICAgICBoYXNKdW1wVGhvdWdoT3V0ZXJMYWJlbCA9IHRydWU7CiAgICAgIGFkZFN0YXRlbWVudChuZXcganMuQnJlYWsob3V0ZXJMYWJlbE5hbWUpCiAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9IGVsc2UgewogICAgICBhZGRTdGF0ZW1lbnQobmV3IGpzLkJyZWFrKG51bGwpLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQogIH0KCiAgLy8vIENvbW1vbiBjb2RlIGZvciBoYW5kbGluZyBicmVhaywgY29udGludWUsIHJldHVybi4KICAvLy8KICAvLy8gSXQgaXMgbmVjZXNzYXJ5IHRvIHJ1biBhbGwgbmVzdGluZyBmaW5hbGx5LWhhbmRsZXJzIGJldHdlZW4gdGhlIGp1bXAgYW5kCiAgLy8vIHRoZSB0YXJnZXQuIEZvciB0aGF0IFtuZXh0XSBpcyB1c2VkIGFzIGEgc3RhY2sgb2YgcGxhY2VzIHRvIGdvLgogIC8vLwogIC8vLyBTZWUgYWxzbyBbcmV3cml0ZUZ1bmN0aW9uXS4KICB2b2lkIHRyYW5zbGF0ZUp1bXAoCiAgICAgIGpzLk5vZGUgdGFyZ2V0LCBpbnQgdGFyZ2V0TGFiZWwsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICAvLyBDb21wdXRlIGEgc3RhY2sgb2YgYWxsIHRoZSAnZmluYWxseScgbm9kZXMgdGhhdCBtdXN0IGJlIHZpc2l0ZWQgYmVmb3JlCiAgICAvLyB0aGUganVtcC4KICAgIC8vIFRoZSBib3R0b20gb2YgdGhlIHN0YWNrIGlzIHRoZSBsYWJlbCB3aGVyZSB0aGUganVtcCBnb2VzIHRvLgogICAgTGlzdDxpbnQ+IGp1bXBTdGFjayA9IDxpbnQ+W107CiAgICBmb3IgKGpzLk5vZGUgbm9kZSBpbiBqdW1wVGFyZ2V0cy5yZXZlcnNlZCkgewogICAgICBpZiAoZmluYWxseUxhYmVsc1tub2RlXSAhPSBudWxsKSB7CiAgICAgICAganVtcFN0YWNrLmFkZChmaW5hbGx5TGFiZWxzW25vZGVdKTsKICAgICAgfSBlbHNlIGlmIChub2RlID09IHRhcmdldCkgewogICAgICAgIGp1bXBTdGFjay5hZGQodGFyZ2V0TGFiZWwpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIC8vIElnbm9yZSBvdGhlciBub2Rlcy4KICAgIH0KICAgIGp1bXBTdGFjayA9IGp1bXBTdGFjay5yZXZlcnNlZC50b0xpc3QoKTsKICAgIC8vIEFzIHRoZSBwcm9ncmFtIGp1bXBzIGRpcmVjdGx5IHRvIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBpdCBpcyB0YWtlbiBvZmYKICAgIC8vIG5vdy4KICAgIGludCBmaXJzdFRhcmdldCA9IGp1bXBTdGFjay5yZW1vdmVMYXN0KCk7CiAgICBpZiAoanVtcFN0YWNrLmlzTm90RW1wdHkpIHsKICAgICAganMuRXhwcmVzc2lvbiBqc0p1bXBTdGFjayA9IG5ldyBqcy5BcnJheUluaXRpYWxpemVyKAogICAgICAgICAganVtcFN0YWNrLm1hcCgoaW50IGxhYmVsKSA9PiBqcy5udW1iZXIobGFiZWwpKS50b0xpc3QoKSk7CiAgICAgIGFkZFN0YXRlbWVudChuZXcganMuRXhwcmVzc2lvblN0YXRlbWVudChqcy5qcygiIyA9ICMiLAogICAgICAgICAgW25leHQsIGpzSnVtcFN0YWNrXSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSkpOwogICAgfQogICAgYWRkR290byhmaXJzdFRhcmdldCwgc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERlZmF1bHQoanMuRGVmYXVsdCBub2RlKSA9PiB1bnJlYWNoYWJsZShub2RlKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERvKGpzLkRvIG5vZGUpIHsKICAgIGlmICghc2hvdWxkVHJhbnNmb3JtKG5vZGUpKSB7CiAgICAgIGJvb2wgb2xkSW5zaWRlVW50cmFuc2xhdGVkQnJlYWthYmxlID0gaW5zaWRlVW50cmFuc2xhdGVkQnJlYWthYmxlOwogICAgICBpbnNpZGVVbnRyYW5zbGF0ZWRCcmVha2FibGUgPSB0cnVlOwogICAgICBhZGRTdGF0ZW1lbnQoanMuanMuc3RhdGVtZW50KCdkbyB7I30gd2hpbGUgKCMpJywKICAgICAgICAgIFt0cmFuc2xhdGVUb1N0YXRlbWVudChub2RlLmJvZHkpLCB2aXNpdEV4cHJlc3Npb24obm9kZS5jb25kaXRpb24pXSkpOwogICAgICBpbnNpZGVVbnRyYW5zbGF0ZWRCcmVha2FibGUgPSBvbGRJbnNpZGVVbnRyYW5zbGF0ZWRCcmVha2FibGU7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGludCBzdGFydExhYmVsID0gbmV3TGFiZWwoImRvIGJvZHkiKTsKCiAgICBpbnQgY29udGludWVMYWJlbCA9IG5ld0xhYmVsKCJkbyBjb25kaXRpb24iKTsKICAgIGNvbnRpbnVlTGFiZWxzW25vZGVdID0gY29udGludWVMYWJlbDsKCiAgICBpbnQgYWZ0ZXJMYWJlbCA9IG5ld0xhYmVsKCJhZnRlciBkbyIpOwogICAgYnJlYWtMYWJlbHNbbm9kZV0gPSBhZnRlckxhYmVsOwoKICAgIGJlZ2luTGFiZWwoc3RhcnRMYWJlbCk7CgogICAganVtcFRhcmdldHMuYWRkKG5vZGUpOwogICAgdmlzaXRTdGF0ZW1lbnQobm9kZS5ib2R5KTsKICAgIGp1bXBUYXJnZXRzLnJlbW92ZUxhc3QoKTsKCiAgICBiZWdpbkxhYmVsKGNvbnRpbnVlTGFiZWwpOwogICAgd2l0aEV4cHJlc3Npb24obm9kZS5jb25kaXRpb24sIChqcy5FeHByZXNzaW9uIGNvbmRpdGlvbikgewogICAgICBhZGRTdGF0ZW1lbnQoanMuanMuc3RhdGVtZW50KCdpZiAoIykgIycsCiAgICAgICAgICBbY29uZGl0aW9uLCBnb3RvQW5kQnJlYWsoc3RhcnRMYWJlbCwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbildKSk7CiAgICB9LCBzdG9yZTogZmFsc2UpOwogICAgYmVnaW5MYWJlbChhZnRlckxhYmVsKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRFbXB0eVN0YXRlbWVudChqcy5FbXB0eVN0YXRlbWVudCBub2RlKSB7CiAgICBhZGRTdGF0ZW1lbnQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChqcy5FeHByZXNzaW9uU3RhdGVtZW50IG5vZGUpIHsKICAgIHZpc2l0RXhwcmVzc2lvbklnbm9yZVJlc3VsdChub2RlLmV4cHJlc3Npb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZvcihqcy5Gb3Igbm9kZSkgewogICAgaWYgKCFzaG91bGRUcmFuc2Zvcm0obm9kZSkpIHsKICAgICAgYm9vbCBvbGRJbnNpZGVVbnRyYW5zbGF0ZWQgPSBpbnNpZGVVbnRyYW5zbGF0ZWRCcmVha2FibGU7CiAgICAgIGluc2lkZVVudHJhbnNsYXRlZEJyZWFrYWJsZSA9IHRydWU7CiAgICAgIC8vIE5vdGUgdGhhdCBub2RlLmluaXQsIG5vZGUuY29uZGl0aW9uLCBub2RlLnVwZGF0ZSBhbGwgY2FuIGJlIG51bGwsIGJ1dAogICAgICAvLyB3aXRoRXhwcmVzc2lvbnMgaGFuZGxlcyB0aGF0LgogICAgICB3aXRoRXhwcmVzc2lvbnMoW25vZGUuaW5pdCwgbm9kZS5jb25kaXRpb24sIG5vZGUudXBkYXRlXSwKICAgICAgICAgIChMaXN0PGpzLkV4cHJlc3Npb24+IHRyYW5zZm9ybWVkKSB7CiAgICAgICAgYWRkU3RhdGVtZW50KG5ldyBqcy5Gb3IodHJhbnNmb3JtZWRbMF0sIHRyYW5zZm9ybWVkWzFdLCB0cmFuc2Zvcm1lZFsyXSwKICAgICAgICAgICAgdHJhbnNsYXRlVG9TdGF0ZW1lbnQobm9kZS5ib2R5KSkpOwogICAgICB9KTsKICAgICAgaW5zaWRlVW50cmFuc2xhdGVkQnJlYWthYmxlID0gb2xkSW5zaWRlVW50cmFuc2xhdGVkOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKG5vZGUuaW5pdCAhPSBudWxsKSB7CiAgICAgIHZpc2l0RXhwcmVzc2lvbklnbm9yZVJlc3VsdChub2RlLmluaXQpOwogICAgfQogICAgaW50IHN0YXJ0TGFiZWwgPSBuZXdMYWJlbCgiZm9yIGNvbmRpdGlvbiIpOwogICAgLy8gSWYgdGhlcmUgaXMgbm8gdXBkYXRlLCBjb250aW51aW5nIHRoZSBsb29wIGlzIHRoZSBzYW1lIGFzIGdvaW5nIHRvIHRoZQogICAgLy8gc3RhcnQuCiAgICBpbnQgY29udGludWVMYWJlbCA9CiAgICAgICAgKG5vZGUudXBkYXRlID09IG51bGwpID8gc3RhcnRMYWJlbCA6IG5ld0xhYmVsKCJmb3IgdXBkYXRlIik7CiAgICBjb250aW51ZUxhYmVsc1tub2RlXSA9IGNvbnRpbnVlTGFiZWw7CiAgICBpbnQgYWZ0ZXJMYWJlbCA9IG5ld0xhYmVsKCJhZnRlciBmb3IiKTsKICAgIGJyZWFrTGFiZWxzW25vZGVdID0gYWZ0ZXJMYWJlbDsKICAgIGJlZ2luTGFiZWwoc3RhcnRMYWJlbCk7CiAgICBqcy5FeHByZXNzaW9uIGNvbmRpdGlvbiA9IG5vZGUuY29uZGl0aW9uOwogICAgaWYgKGNvbmRpdGlvbiA9PSBudWxsIHx8CiAgICAgICAgKGNvbmRpdGlvbiBpcyBqcy5MaXRlcmFsQm9vbCAmJiBjb25kaXRpb24udmFsdWUgPT0gdHJ1ZSkpIHsKICAgICAgYWRkU3RhdGVtZW50KG5ldyBqcy5Db21tZW50KCJ0cml2aWFsIGNvbmRpdGlvbiIpKTsKICAgIH0gZWxzZSB7CiAgICAgIHdpdGhFeHByZXNzaW9uKGNvbmRpdGlvbiwgKGpzLkV4cHJlc3Npb24gY29uZGl0aW9uKSB7CiAgICAgICAgYWRkU3RhdGVtZW50KG5ldyBqcy5JZi5ub0Vsc2UobmV3IGpzLlByZWZpeCgiISIsIGNvbmRpdGlvbiksCiAgICAgICAgICAgIGdvdG9BbmRCcmVhayhhZnRlckxhYmVsLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKSkpOwogICAgICB9LCBzdG9yZTogZmFsc2UpOwogICAgfQogICAganVtcFRhcmdldHMuYWRkKG5vZGUpOwogICAgdmlzaXRTdGF0ZW1lbnQobm9kZS5ib2R5KTsKICAgIGp1bXBUYXJnZXRzLnJlbW92ZUxhc3QoKTsKICAgIGlmIChub2RlLnVwZGF0ZSAhPSBudWxsKSB7CiAgICAgIGJlZ2luTGFiZWwoY29udGludWVMYWJlbCk7CiAgICAgIHZpc2l0RXhwcmVzc2lvbklnbm9yZVJlc3VsdChub2RlLnVwZGF0ZSk7CiAgICB9CiAgICBhZGRHb3RvKHN0YXJ0TGFiZWwsIG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogICAgYmVnaW5MYWJlbChhZnRlckxhYmVsKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGb3JJbihqcy5Gb3JJbiBub2RlKSB7CiAgICAvLyBUaGUgZGFydCBvdXRwdXQgY3VycmVudGx5IG5ldmVyIHVzZXMgZm9yLWluIGxvb3BzLgogICAgdGhyb3cgIkphdmFzY3JpcHQgZm9yLWluIG5vdCBpbXBsZW1lbnRlZCB5ZXQgaW4gdGhlIGF3YWl0IHRyYW5zZm9ybWF0aW9uIjsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGdW5jdGlvbkRlY2xhcmF0aW9uKGpzLkZ1bmN0aW9uRGVjbGFyYXRpb24gbm9kZSkgewogICAgdW5zdXBwb3J0ZWQobm9kZSk7CiAgfQoKICBMaXN0PGpzLlN0YXRlbWVudD4gdHJhbnNsYXRlVG9TdGF0ZW1lbnRTZXF1ZW5jZShqcy5TdGF0ZW1lbnQgbm9kZSkgewogICAgYXNzZXJ0KCFzaG91bGRUcmFuc2Zvcm0obm9kZSkpOwogICAgTGlzdDxqcy5TdGF0ZW1lbnQ+IG9sZEJ1ZmZlciA9IGN1cnJlbnRTdGF0ZW1lbnRCdWZmZXI7CiAgICBjdXJyZW50U3RhdGVtZW50QnVmZmVyID0gPGpzLlN0YXRlbWVudD5bXTsKICAgIExpc3Q8anMuU3RhdGVtZW50PiByZXN1bHRCdWZmZXIgPSBjdXJyZW50U3RhdGVtZW50QnVmZmVyOwogICAgdmlzaXRTdGF0ZW1lbnQobm9kZSk7CiAgICBjdXJyZW50U3RhdGVtZW50QnVmZmVyID0gb2xkQnVmZmVyOwogICAgcmV0dXJuIHJlc3VsdEJ1ZmZlcjsKICB9CgogIGpzLlN0YXRlbWVudCB0cmFuc2xhdGVUb1N0YXRlbWVudChqcy5TdGF0ZW1lbnQgbm9kZSkgewogICAgTGlzdDxqcy5TdGF0ZW1lbnQ+IHN0YXRlbWVudHMgPSB0cmFuc2xhdGVUb1N0YXRlbWVudFNlcXVlbmNlKG5vZGUpOwogICAgaWYgKHN0YXRlbWVudHMubGVuZ3RoID09IDEpIHJldHVybiBzdGF0ZW1lbnRzLnNpbmdsZTsKICAgIHJldHVybiBuZXcganMuQmxvY2soc3RhdGVtZW50cyk7CiAgfQoKICBqcy5CbG9jayB0cmFuc2xhdGVUb0Jsb2NrKGpzLlN0YXRlbWVudCBub2RlKSB7CiAgICByZXR1cm4gbmV3IGpzLkJsb2NrKHRyYW5zbGF0ZVRvU3RhdGVtZW50U2VxdWVuY2Uobm9kZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdElmKGpzLklmIG5vZGUpIHsKICAgIGlmICghc2hvdWxkVHJhbnNmb3JtKG5vZGUudGhlbikgJiYgIXNob3VsZFRyYW5zZm9ybShub2RlLm90aGVyd2lzZSkpIHsKICAgICAgd2l0aEV4cHJlc3Npb24obm9kZS5jb25kaXRpb24sIChqcy5FeHByZXNzaW9uIGNvbmRpdGlvbikgewogICAgICAgIGpzLlN0YXRlbWVudCB0cmFuc2xhdGVkVGhlbiA9IHRyYW5zbGF0ZVRvU3RhdGVtZW50KG5vZGUudGhlbik7CiAgICAgICAganMuU3RhdGVtZW50IHRyYW5zbGF0ZWRFbHNlID0gdHJhbnNsYXRlVG9TdGF0ZW1lbnQobm9kZS5vdGhlcndpc2UpOwogICAgICAgIGFkZFN0YXRlbWVudChuZXcganMuSWYoY29uZGl0aW9uLCB0cmFuc2xhdGVkVGhlbiwgdHJhbnNsYXRlZEVsc2UpKTsKICAgICAgfSwgc3RvcmU6IGZhbHNlKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaW50IHRoZW5MYWJlbCA9IG5ld0xhYmVsKCJ0aGVuIik7CiAgICBpbnQgam9pbkxhYmVsID0gbmV3TGFiZWwoImpvaW4iKTsKICAgIGludCBlbHNlTGFiZWwgPQogICAgICAgIChub2RlLm90aGVyd2lzZSBpcyBqcy5FbXB0eVN0YXRlbWVudCkgPyBqb2luTGFiZWwgOiBuZXdMYWJlbCgiZWxzZSIpOwoKICAgIHdpdGhFeHByZXNzaW9uKG5vZGUuY29uZGl0aW9uLCAoanMuRXhwcmVzc2lvbiBjb25kaXRpb24pIHsKICAgICAgYWRkRXhwcmVzc2lvblN0YXRlbWVudChuZXcganMuQXNzaWdubWVudCgKICAgICAgICAgIGdvdG8sCiAgICAgICAgICBuZXcganMuQ29uZGl0aW9uYWwoCiAgICAgICAgICAgICAgY29uZGl0aW9uLCBqcy5udW1iZXIodGhlbkxhYmVsKSwganMubnVtYmVyKGVsc2VMYWJlbCkpKSk7CiAgICB9LCBzdG9yZTogZmFsc2UpOwogICAgYWRkQnJlYWsobm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICBiZWdpbkxhYmVsKHRoZW5MYWJlbCk7CiAgICB2aXNpdFN0YXRlbWVudChub2RlLnRoZW4pOwogICAgaWYgKG5vZGUub3RoZXJ3aXNlIGlzISBqcy5FbXB0eVN0YXRlbWVudCkgewogICAgICBhZGRHb3RvKGpvaW5MYWJlbCwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIGJlZ2luTGFiZWwoZWxzZUxhYmVsKTsKICAgICAgdmlzaXRTdGF0ZW1lbnQobm9kZS5vdGhlcndpc2UpOwogICAgfQogICAgYmVnaW5MYWJlbChqb2luTGFiZWwpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRJbnRlcnBvbGF0ZWRFeHByZXNzaW9uKGpzLkludGVycG9sYXRlZEV4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRJbnRlcnBvbGF0ZWREZWNsYXJhdGlvbihqcy5JbnRlcnBvbGF0ZWREZWNsYXJhdGlvbiBub2RlKSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEludGVycG9sYXRlZExpdGVyYWwoanMuSW50ZXJwb2xhdGVkTGl0ZXJhbCBub2RlKSA9PiB1bnN1cHBvcnRlZChub2RlKTsKCiAgQG92ZXJyaWRlCiAgdmlzaXRJbnRlcnBvbGF0ZWRQYXJhbWV0ZXIoanMuSW50ZXJwb2xhdGVkUGFyYW1ldGVyIG5vZGUpIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0SW50ZXJwb2xhdGVkU2VsZWN0b3IoanMuSW50ZXJwb2xhdGVkU2VsZWN0b3Igbm9kZSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQoanMuSW50ZXJwb2xhdGVkU3RhdGVtZW50IG5vZGUpIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMYWJlbGVkU3RhdGVtZW50KGpzLkxhYmVsZWRTdGF0ZW1lbnQgbm9kZSkgewogICAgaWYgKCFzaG91bGRUcmFuc2Zvcm0obm9kZSkpIHsKICAgICAgYWRkU3RhdGVtZW50KAogICAgICAgICAgbmV3IGpzLkxhYmVsZWRTdGF0ZW1lbnQobm9kZS5sYWJlbCwgdHJhbnNsYXRlVG9TdGF0ZW1lbnQobm9kZS5ib2R5KSkpOwogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBgY29udGludWUgbGFiZWxgIGlzIHJlYWxseSBjb250aW51aW5nIHRoZSBuZXN0ZWQgbG9vcC4KICAgIC8vIFRoaXMgaXMgc2V0IHVwIGluIFtQcmVUcmFuc2xhdGlvbkFuYWx5c2lzLnZpc2l0Q29udGludWVdLgogICAgLy8gSGVyZSB3ZSBvbmx5IG5lZWQgYSBicmVha0xhYmVsOgogICAgaW50IGJyZWFrTGFiZWwgPSBuZXdMYWJlbCgiYnJlYWsgJHtub2RlLmxhYmVsfSIpOwogICAgYnJlYWtMYWJlbHNbbm9kZV0gPSBicmVha0xhYmVsOwoKICAgIGp1bXBUYXJnZXRzLmFkZChub2RlKTsKICAgIHZpc2l0U3RhdGVtZW50KG5vZGUuYm9keSk7CiAgICBqdW1wVGFyZ2V0cy5yZW1vdmVMYXN0KCk7CiAgICBiZWdpbkxhYmVsKGJyZWFrTGFiZWwpOwogIH0KCiAgQG92ZXJyaWRlCiAganMuRXhwcmVzc2lvbiB2aXNpdExpdGVyYWxCb29sKGpzLkxpdGVyYWxCb29sIG5vZGUpID0+IG5vZGU7CgogIEBvdmVycmlkZQogIHZpc2l0TGl0ZXJhbEV4cHJlc3Npb24oanMuTGl0ZXJhbEV4cHJlc3Npb24gbm9kZSkgPT4gdW5zdXBwb3J0ZWQobm9kZSk7CgogIEBvdmVycmlkZQogIGpzLkV4cHJlc3Npb24gdmlzaXRMaXRlcmFsTnVsbChqcy5MaXRlcmFsTnVsbCBub2RlKSA9PiBub2RlOwoKICBAb3ZlcnJpZGUKICBqcy5FeHByZXNzaW9uIHZpc2l0TGl0ZXJhbE51bWJlcihqcy5MaXRlcmFsTnVtYmVyIG5vZGUpID0+IG5vZGU7CgogIEBvdmVycmlkZQogIHZpc2l0TGl0ZXJhbFN0YXRlbWVudChqcy5MaXRlcmFsU3RhdGVtZW50IG5vZGUpID0+IHVuc3VwcG9ydGVkKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBqcy5FeHByZXNzaW9uIHZpc2l0TGl0ZXJhbFN0cmluZyhqcy5MaXRlcmFsU3RyaW5nIG5vZGUpID0+IG5vZGU7CgogIEBvdmVycmlkZQogIGpzLkV4cHJlc3Npb24gdmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKGpzLlN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSkgPT4gbm9kZTsKCiAgQG92ZXJyaWRlCiAganMuTmFtZSB2aXNpdE5hbWUoanMuTmFtZSBub2RlKSA9PiBub2RlOwoKICBAb3ZlcnJpZGUKICBqcy5QYXJlbnRoZXNlcyB2aXNpdFBhcmVudGhlc2VzKGpzLlBhcmVudGhlc2VzIG5vZGUpIHsKICAgIHVuc3VwcG9ydGVkKG5vZGUpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdE5hbWVkRnVuY3Rpb24oanMuTmFtZWRGdW5jdGlvbiBub2RlKSB7CiAgICB1bnN1cHBvcnRlZChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIGpzLkV4cHJlc3Npb24gdmlzaXREZWZlcnJlZEV4cHJlc3Npb24oanMuRGVmZXJyZWRFeHByZXNzaW9uIG5vZGUpID0+IG5vZGU7CgogIEBvdmVycmlkZQogIGpzLkV4cHJlc3Npb24gdmlzaXREZWZlcnJlZE51bWJlcihqcy5EZWZlcnJlZE51bWJlciBub2RlKSA9PiBub2RlOwoKICBAb3ZlcnJpZGUKICBqcy5FeHByZXNzaW9uIHZpc2l0RGVmZXJyZWRTdHJpbmcoanMuRGVmZXJyZWRTdHJpbmcgbm9kZSkgPT4gbm9kZTsKCiAgQG92ZXJyaWRlCiAganMuRXhwcmVzc2lvbiB2aXNpdE5ldyhqcy5OZXcgbm9kZSkgewogICAgYm9vbCBzdG9yZVRhcmdldCA9IG5vZGUuYXJndW1lbnRzLmFueShzaG91bGRUcmFuc2Zvcm0pOwogICAgcmV0dXJuIHdpdGhDYWxsVGFyZ2V0RXhwcmVzc2lvbihub2RlLnRhcmdldCwgKHRhcmdldCkgewogICAgICByZXR1cm4gd2l0aEV4cHJlc3Npb25zKG5vZGUuYXJndW1lbnRzLCAoTGlzdDxqcy5FeHByZXNzaW9uPiBhcmd1bWVudHMpIHsKICAgICAgICByZXR1cm4gbmV3IGpzLk5ldyh0YXJnZXQsIGFyZ3VtZW50cyk7CiAgICAgIH0pOwogICAgfSwgc3RvcmU6IHN0b3JlVGFyZ2V0KTsKICB9CgogIEBvdmVycmlkZQogIGpzLkV4cHJlc3Npb24gdmlzaXRPYmplY3RJbml0aWFsaXplcihqcy5PYmplY3RJbml0aWFsaXplciBub2RlKSB7CiAgICByZXR1cm4gd2l0aEV4cHJlc3Npb25zKAogICAgICAgIG5vZGUucHJvcGVydGllcy5tYXAoKGpzLlByb3BlcnR5IHByb3BlcnR5KSA9PiBwcm9wZXJ0eS52YWx1ZSkudG9MaXN0KCksCiAgICAgICAgKExpc3Q8anMuTm9kZT4gdmFsdWVzKSB7CiAgICAgIExpc3Q8anMuUHJvcGVydHk+IHByb3BlcnRpZXMgPSBuZXcgTGlzdC5nZW5lcmF0ZSh2YWx1ZXMubGVuZ3RoLCAoaW50IGkpIHsKICAgICAgICByZXR1cm4gbmV3IGpzLlByb3BlcnR5KG5vZGUucHJvcGVydGllc1tpXS5uYW1lLCB2YWx1ZXNbaV0pOwogICAgICB9KTsKICAgICAgcmV0dXJuIG5ldyBqcy5PYmplY3RJbml0aWFsaXplcihwcm9wZXJ0aWVzKTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRQYXJhbWV0ZXIoanMuUGFyYW1ldGVyIG5vZGUpID0+IHVucmVhY2hhYmxlKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBqcy5FeHByZXNzaW9uIHZpc2l0UG9zdGZpeChqcy5Qb3N0Zml4IG5vZGUpIHsKICAgIGlmIChub2RlLm9wID09ICIrKyIgfHwgbm9kZS5vcCA9PSAiLS0iKSB7CiAgICAgIGpzLkV4cHJlc3Npb24gYXJndW1lbnQgPSBub2RlLmFyZ3VtZW50OwogICAgICBpZiAoYXJndW1lbnQgaXMganMuVmFyaWFibGVVc2UpIHsKICAgICAgICByZXR1cm4gbmV3IGpzLlBvc3RmaXgobm9kZS5vcCwgdmlzaXRFeHByZXNzaW9uKGFyZ3VtZW50KSk7CiAgICAgIH0gZWxzZSBpZiAoYXJndW1lbnQgaXMganMuUHJvcGVydHlBY2Nlc3MpIHsKICAgICAgICByZXR1cm4gd2l0aEV4cHJlc3Npb24yKGFyZ3VtZW50LnJlY2VpdmVyLCBhcmd1bWVudC5zZWxlY3RvciwKICAgICAgICAgICAgKHJlY2VpdmVyLCBzZWxlY3RvcikgewogICAgICAgICAgcmV0dXJuIG5ldyBqcy5Qb3N0Zml4KAogICAgICAgICAgICAgIG5vZGUub3AsIG5ldyBqcy5Qcm9wZXJ0eUFjY2VzcyhyZWNlaXZlciwgc2VsZWN0b3IpKTsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyAiVW5leHBlY3RlZCBwb3N0Zml4ICR7bm9kZS5vcH0gIgogICAgICAgICAgICAib3BlcmF0b3IgYXJndW1lbnQgJHtub2RlLmFyZ3VtZW50fSI7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB3aXRoRXhwcmVzc2lvbihub2RlLmFyZ3VtZW50LAogICAgICAgIChqcy5FeHByZXNzaW9uIGFyZ3VtZW50KSA9PiBuZXcganMuUG9zdGZpeChub2RlLm9wLCBhcmd1bWVudCksCiAgICAgICAgc3RvcmU6IGZhbHNlKTsKICB9CgogIEBvdmVycmlkZQogIGpzLkV4cHJlc3Npb24gdmlzaXRQcmVmaXgoanMuUHJlZml4IG5vZGUpIHsKICAgIGlmIChub2RlLm9wID09ICIrKyIgfHwgbm9kZS5vcCA9PSAiLS0iKSB7CiAgICAgIGpzLkV4cHJlc3Npb24gYXJndW1lbnQgPSBub2RlLmFyZ3VtZW50OwogICAgICBpZiAoYXJndW1lbnQgaXMganMuVmFyaWFibGVVc2UpIHsKICAgICAgICByZXR1cm4gbmV3IGpzLlByZWZpeChub2RlLm9wLCB2aXNpdEV4cHJlc3Npb24oYXJndW1lbnQpKTsKICAgICAgfSBlbHNlIGlmIChhcmd1bWVudCBpcyBqcy5Qcm9wZXJ0eUFjY2VzcykgewogICAgICAgIHJldHVybiB3aXRoRXhwcmVzc2lvbjIoYXJndW1lbnQucmVjZWl2ZXIsIGFyZ3VtZW50LnNlbGVjdG9yLAogICAgICAgICAgICAocmVjZWl2ZXIsIHNlbGVjdG9yKSB7CiAgICAgICAgICByZXR1cm4gbmV3IGpzLlByZWZpeCgKICAgICAgICAgICAgICBub2RlLm9wLCBuZXcganMuUHJvcGVydHlBY2Nlc3MocmVjZWl2ZXIsIHNlbGVjdG9yKSk7CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgIlVuZXhwZWN0ZWQgcHJlZml4ICR7bm9kZS5vcH0gb3BlcmF0b3IgIgogICAgICAgICAgICAiYXJndW1lbnQgJHtub2RlLmFyZ3VtZW50fSI7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB3aXRoRXhwcmVzc2lvbihub2RlLmFyZ3VtZW50LAogICAgICAgIChqcy5FeHByZXNzaW9uIGFyZ3VtZW50KSA9PiBuZXcganMuUHJlZml4KG5vZGUub3AsIGFyZ3VtZW50KSwKICAgICAgICBzdG9yZTogZmFsc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRQcm9ncmFtKGpzLlByb2dyYW0gbm9kZSkgPT4gdW5zdXBwb3J0ZWQobm9kZSk7CgogIEBvdmVycmlkZQogIGpzLlByb3BlcnR5IHZpc2l0UHJvcGVydHkoanMuUHJvcGVydHkgbm9kZSkgewogICAgcmV0dXJuIHdpdGhFeHByZXNzaW9uKAogICAgICAgIG5vZGUudmFsdWUsIChqcy5FeHByZXNzaW9uIHZhbHVlKSA9PiBuZXcganMuUHJvcGVydHkobm9kZS5uYW1lLCB2YWx1ZSksCiAgICAgICAgc3RvcmU6IGZhbHNlKTsKICB9CgogIEBvdmVycmlkZQogIGpzLkV4cHJlc3Npb24gdmlzaXRSZWdFeHBMaXRlcmFsKGpzLlJlZ0V4cExpdGVyYWwgbm9kZSkgPT4gbm9kZTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFJldHVybihqcy5SZXR1cm4gbm9kZSkgewogICAganMuTm9kZSB0YXJnZXQgPSBhbmFseXNpcy50YXJnZXRzW25vZGVdOwogICAgaWYgKG5vZGUudmFsdWUgIT0gbnVsbCkgewogICAgICBpZiAoaXNTeW5jU3RhciB8fCBpc0FzeW5jU3RhcikgewogICAgICAgIC8vIEV2ZW4gdGhvdWdoIGByZXR1cm4gZXhwcjtgIGlzIG5vdCBhbGxvd2VkIGluIHRoZSBkYXJ0IHN5bmMqIGFuZAogICAgICAgIC8vIGFzeW5jKiAgY29kZSwgdGhlIGJhY2tlbmQgc29tZXRpbWVzIGdlbmVyYXRlcyBjb2RlIGxpa2UgdGhpcywgYnV0CiAgICAgICAgLy8gb25seSB3aGVuIGl0IGlzIGtub3duIHRoYXQgdGhlICdleHByJyB0aHJvd3MsIGFuZCB0aGUgcmV0dXJuIGlzIGp1c3QKICAgICAgICAvLyB0byB0ZWxsIHRoZSBKYXZhU2NyaXB0IFZNIHRoYXQgdGhlIGNvZGUgd29uJ3QgY29udGludWUgaGVyZS4KICAgICAgICAvLyBJdCBpcyB0aGVyZWZvcmUgaW50ZXJwcmV0ZWQgYXMgYGV4cHI7IHJldHVybjtgCiAgICAgICAgdmlzaXRFeHByZXNzaW9uSWdub3JlUmVzdWx0KG5vZGUudmFsdWUpOwogICAgICB9IGVsc2UgewogICAgICAgIHdpdGhFeHByZXNzaW9uKG5vZGUudmFsdWUsIChqcy5FeHByZXNzaW9uIHZhbHVlKSB7CiAgICAgICAgICBhZGRTdGF0ZW1lbnQoanMuanMKICAgICAgICAgICAgICAuc3RhdGVtZW50KCIjID0gIzsiLCBbcmV0dXJuVmFsdWUsIHZhbHVlXSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKAogICAgICAgICAgICAgICAgICBub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgICAgfSwgc3RvcmU6IGZhbHNlKTsKICAgICAgfQogICAgfQogICAgdHJhbnNsYXRlSnVtcCh0YXJnZXQsIGV4aXRMYWJlbCwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3dpdGNoKGpzLlN3aXRjaCBub2RlKSB7CiAgICBpZiAoIW5vZGUuY2FzZXMuYW55KHNob3VsZFRyYW5zZm9ybSkpIHsKICAgICAgLy8gSWYgb25seSB0aGUga2V5IGhhcyBhbiBhd2FpdCwgdHJhbnNsYXRpb24gY2FuIGJlIHNpbXBsaWZpZWQuCiAgICAgIGJvb2wgb2xkSW5zaWRlVW50cmFuc2xhdGVkID0gaW5zaWRlVW50cmFuc2xhdGVkQnJlYWthYmxlOwogICAgICBpbnNpZGVVbnRyYW5zbGF0ZWRCcmVha2FibGUgPSB0cnVlOwogICAgICB3aXRoRXhwcmVzc2lvbihub2RlLmtleSwgKGpzLkV4cHJlc3Npb24ga2V5KSB7CiAgICAgICAgTGlzdDxqcy5Td2l0Y2hDbGF1c2U+IGNhc2VzID0gbm9kZS5jYXNlcy5tYXAoKGpzLlN3aXRjaENsYXVzZSBjbGF1c2UpIHsKICAgICAgICAgIGlmIChjbGF1c2UgaXMganMuQ2FzZSkgewogICAgICAgICAgICByZXR1cm4gbmV3IGpzLkNhc2UoCiAgICAgICAgICAgICAgICBjbGF1c2UuZXhwcmVzc2lvbiwgdHJhbnNsYXRlVG9CbG9jayhjbGF1c2UuYm9keSkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBqcy5EZWZhdWx0KAogICAgICAgICAgICAgICAgdHJhbnNsYXRlVG9CbG9jaygoY2xhdXNlIGFzIGpzLkRlZmF1bHQpLmJvZHkpKTsKICAgICAgICAgIH0KICAgICAgICB9KS50b0xpc3QoKTsKICAgICAgICBhZGRTdGF0ZW1lbnQobmV3IGpzLlN3aXRjaChrZXksIGNhc2VzKSk7CiAgICAgIH0sIHN0b3JlOiBmYWxzZSk7CiAgICAgIGluc2lkZVVudHJhbnNsYXRlZEJyZWFrYWJsZSA9IG9sZEluc2lkZVVudHJhbnNsYXRlZDsKICAgICAgcmV0dXJuOwogICAgfQogICAgaW50IGJlZm9yZSA9IG5ld0xhYmVsKCJzd2l0Y2giKTsKICAgIGludCBhZnRlciA9IG5ld0xhYmVsKCJhZnRlciBzd2l0Y2giKTsKICAgIGJyZWFrTGFiZWxzW25vZGVdID0gYWZ0ZXI7CgogICAgYmVnaW5MYWJlbChiZWZvcmUpOwogICAgTGlzdDxpbnQ+IGxhYmVscyA9IG5ldyBMaXN0PGludD4obm9kZS5jYXNlcy5sZW5ndGgpOwoKICAgIGJvb2wgYW55Q2FzZUV4cHJlc3Npb25UcmFuc2Zvcm1lZCA9IG5vZGUuY2FzZXMuYW55KAogICAgICAgIChqcy5Td2l0Y2hDbGF1c2UgeCkgPT4geCBpcyBqcy5DYXNlICYmIHNob3VsZFRyYW5zZm9ybSh4LmV4cHJlc3Npb24pKTsKICAgIGlmIChhbnlDYXNlRXhwcmVzc2lvblRyYW5zZm9ybWVkKSB7CiAgICAgIGludCBkZWZhdWx0SW5kZXggPSBudWxsOyAvLyBOdWxsIG1lYW5zIG5vIGRlZmF1bHQgd2FzIGZvdW5kLgogICAgICAvLyBJZiB0aGVyZSBpcyBhbiBhd2FpdCBpbiBvbmUgb2YgdGhlIGtleXMsIGEgY2hhaW4gb2YgaWZzIGhhcyB0byBiZSB1c2VkLgoKICAgICAgd2l0aEV4cHJlc3Npb24obm9kZS5rZXksIChqcy5FeHByZXNzaW9uIGtleSkgewogICAgICAgIGludCBpID0gMDsKICAgICAgICBmb3IgKGpzLlN3aXRjaENsYXVzZSBjbGF1c2UgaW4gbm9kZS5jYXNlcykgewogICAgICAgICAgaWYgKGNsYXVzZSBpcyBqcy5EZWZhdWx0KSB7CiAgICAgICAgICAgIC8vIFRoZSBnb3RvIGZvciB0aGUgZGVmYXVsdCBjYXNlIGlzIGFkZGVkIGFmdGVyIGFsbCBub24tZGVmYXVsdAogICAgICAgICAgICAvLyBjbGF1c2VzIGhhdmUgYmVlbiBoYW5kbGVkLgogICAgICAgICAgICBkZWZhdWx0SW5kZXggPSBpOwogICAgICAgICAgICBsYWJlbHNbaV0gPSBuZXdMYWJlbCgiZGVmYXVsdCIpOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0gZWxzZSBpZiAoY2xhdXNlIGlzIGpzLkNhc2UpIHsKICAgICAgICAgICAgbGFiZWxzW2ldID0gbmV3TGFiZWwoImNhc2UiKTsKICAgICAgICAgICAgd2l0aEV4cHJlc3Npb24oY2xhdXNlLmV4cHJlc3Npb24sIChleHByZXNzaW9uKSB7CiAgICAgICAgICAgICAgYWRkU3RhdGVtZW50KG5ldyBqcy5JZi5ub0Vsc2UoCiAgICAgICAgICAgICAgICAgIG5ldyBqcy5CaW5hcnkoIj09PSIsIGtleSwgZXhwcmVzc2lvbiksCiAgICAgICAgICAgICAgICAgIGdvdG9BbmRCcmVhayhsYWJlbHNbaV0sIGNsYXVzZS5zb3VyY2VJbmZvcm1hdGlvbikpKTsKICAgICAgICAgICAgfSwgc3RvcmU6IGZhbHNlKTsKICAgICAgICAgIH0KICAgICAgICAgIGkrKzsKICAgICAgICB9CiAgICAgIH0sIHN0b3JlOiB0cnVlKTsKCiAgICAgIGlmIChkZWZhdWx0SW5kZXggPT0gbnVsbCkgewogICAgICAgIGFkZEdvdG8oYWZ0ZXIsIG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogICAgICB9IGVsc2UgewogICAgICAgIGFkZEdvdG8obGFiZWxzW2RlZmF1bHRJbmRleF0sIG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBib29sIGhhc0RlZmF1bHQgPSBmYWxzZTsKICAgICAgaW50IGkgPSAwOwogICAgICBMaXN0PGpzLlN3aXRjaENsYXVzZT4gY2xhdXNlcyA9IDxqcy5Td2l0Y2hDbGF1c2U+W107CiAgICAgIGZvciAoanMuU3dpdGNoQ2xhdXNlIGNsYXVzZSBpbiBub2RlLmNhc2VzKSB7CiAgICAgICAgaWYgKGNsYXVzZSBpcyBqcy5DYXNlKSB7CiAgICAgICAgICBsYWJlbHNbaV0gPSBuZXdMYWJlbCgiY2FzZSIpOwogICAgICAgICAgY2xhdXNlcy5hZGQobmV3IGpzLkNhc2UodmlzaXRFeHByZXNzaW9uKGNsYXVzZS5leHByZXNzaW9uKSwKICAgICAgICAgICAgICBnb3RvQW5kQnJlYWsobGFiZWxzW2ldLCBjbGF1c2Uuc291cmNlSW5mb3JtYXRpb24pKSk7CiAgICAgICAgfSBlbHNlIGlmIChjbGF1c2UgaXMganMuRGVmYXVsdCkgewogICAgICAgICAgbGFiZWxzW2ldID0gbmV3TGFiZWwoImRlZmF1bHQiKTsKICAgICAgICAgIGNsYXVzZXMuYWRkKG5ldyBqcy5EZWZhdWx0KAogICAgICAgICAgICAgIGdvdG9BbmRCcmVhayhsYWJlbHNbaV0sIGNsYXVzZS5zb3VyY2VJbmZvcm1hdGlvbikpKTsKICAgICAgICAgIGhhc0RlZmF1bHQgPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXBvcnRlci5pbnRlcm5hbEVycm9yKHNwYW5uYWJsZSwgIlVua25vd24gY2xhdXNlIHR5cGUgJGNsYXVzZSIpOwogICAgICAgIH0KICAgICAgICBpKys7CiAgICAgIH0KICAgICAgaWYgKCFoYXNEZWZhdWx0KSB7CiAgICAgICAgY2xhdXNlcwogICAgICAgICAgICAuYWRkKG5ldyBqcy5EZWZhdWx0KGdvdG9BbmRCcmVhayhhZnRlciwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpKTsKICAgICAgfQogICAgICB3aXRoRXhwcmVzc2lvbihub2RlLmtleSwgKGpzLkV4cHJlc3Npb24ga2V5KSB7CiAgICAgICAgYWRkU3RhdGVtZW50KG5ldyBqcy5Td2l0Y2goa2V5LCBjbGF1c2VzKSk7CiAgICAgIH0sIHN0b3JlOiBmYWxzZSk7CgogICAgICBhZGRCcmVhayhub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0KCiAgICBqdW1wVGFyZ2V0cy5hZGQobm9kZSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxhYmVscy5sZW5ndGg7IGkrKykgewogICAgICBiZWdpbkxhYmVsKGxhYmVsc1tpXSk7CiAgICAgIHZpc2l0U3RhdGVtZW50KG5vZGUuY2FzZXNbaV0uYm9keSk7CiAgICB9CiAgICBiZWdpbkxhYmVsKGFmdGVyKTsKICAgIGp1bXBUYXJnZXRzLnJlbW92ZUxhc3QoKTsKICB9CgogIEBvdmVycmlkZQogIGpzLkV4cHJlc3Npb24gdmlzaXRUaGlzKGpzLlRoaXMgbm9kZSkgewogICAgcmV0dXJuIHNlbGY7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VGhyb3coanMuVGhyb3cgbm9kZSkgewogICAgd2l0aEV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uLCAoanMuRXhwcmVzc2lvbiBleHByZXNzaW9uKSB7CiAgICAgIGFkZFN0YXRlbWVudChuZXcganMuVGhyb3coZXhwcmVzc2lvbikKICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfSwgc3RvcmU6IGZhbHNlKTsKICB9CgogIHNldEVycm9ySGFuZGxlcihbaW50IGVycm9ySGFuZGxlcl0pIHsKICAgIGhhc0hhbmRsZXJMYWJlbHMgPSB0cnVlOyAvLyBUT0RPKHNyYSk6IEFkZCBzaG9ydCBmb3JtIGVycm9yIGhhbmRsZXIuCiAgICBqcy5FeHByZXNzaW9uIGxhYmVsID0KICAgICAgICAoZXJyb3JIYW5kbGVyID09IG51bGwpID8gY3VycmVudEVycm9ySGFuZGxlciA6IGpzLm51bWJlcihlcnJvckhhbmRsZXIpOwogICAgYWRkU3RhdGVtZW50KGpzLmpzLnN0YXRlbWVudCgnIyA9ICM7JywgW2hhbmRsZXIsIGxhYmVsXSkpOwogIH0KCiAgTGlzdDxpbnQ+IF9maW5hbGxpZXNVcFRvQW5kRW5jbG9zaW5nSGFuZGxlcigpIHsKICAgIExpc3Q8aW50PiByZXN1bHQgPSA8aW50PltdOwogICAgZm9yIChpbnQgaSA9IGp1bXBUYXJnZXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIGpzLk5vZGUgbm9kZSA9IGp1bXBUYXJnZXRzW2ldOwogICAgICBpbnQgaGFuZGxlckxhYmVsID0gaGFuZGxlckxhYmVsc1tub2RlXTsKICAgICAgaWYgKGhhbmRsZXJMYWJlbCAhPSBudWxsKSB7CiAgICAgICAgcmVzdWx0LmFkZChoYW5kbGVyTGFiZWwpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGludCBmaW5hbGx5TGFiZWwgPSBmaW5hbGx5TGFiZWxzW25vZGVdOwogICAgICBpZiAoZmluYWxseUxhYmVsICE9IG51bGwpIHsKICAgICAgICByZXN1bHQuYWRkKGZpbmFsbHlMYWJlbCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQucmV2ZXJzZWQudG9MaXN0KCk7CiAgfQoKICAvLy8gU2VlIHRoZSBjb21tZW50cyBvZiBbcmV3cml0ZUZ1bmN0aW9uXSBmb3IgbW9yZSBleHBsYW5hdGlvbi4KICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHJ5KGpzLlRyeSBub2RlKSB7CiAgICBpZiAoIXNob3VsZFRyYW5zZm9ybShub2RlKSkgewogICAgICBqcy5CbG9jayBib2R5ID0gdHJhbnNsYXRlVG9CbG9jayhub2RlLmJvZHkpOwogICAgICBqcy5DYXRjaCBjYXRjaFBhcnQgPSAobm9kZS5jYXRjaFBhcnQgPT0gbnVsbCkKICAgICAgICAgID8gbnVsbAogICAgICAgICAgOiBuZXcganMuQ2F0Y2gobm9kZS5jYXRjaFBhcnQuZGVjbGFyYXRpb24sCiAgICAgICAgICAgICAgdHJhbnNsYXRlVG9CbG9jayhub2RlLmNhdGNoUGFydC5ib2R5KSk7CiAgICAgIGpzLkJsb2NrIGZpbmFsbHlQYXJ0ID0gKG5vZGUuZmluYWxseVBhcnQgPT0gbnVsbCkKICAgICAgICAgID8gbnVsbAogICAgICAgICAgOiB0cmFuc2xhdGVUb0Jsb2NrKG5vZGUuZmluYWxseVBhcnQpOwogICAgICBhZGRTdGF0ZW1lbnQobmV3IGpzLlRyeShib2R5LCBjYXRjaFBhcnQsIGZpbmFsbHlQYXJ0KSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBoYXNUcnlCbG9ja3MgPSB0cnVlOwogICAgaW50IHVuY2F1Z2h0TGFiZWwgPSBuZXdMYWJlbCgidW5jYXVnaHQiKTsKICAgIGludCBoYW5kbGVyTGFiZWwgPQogICAgICAgIChub2RlLmNhdGNoUGFydCA9PSBudWxsKSA/IHVuY2F1Z2h0TGFiZWwgOiBuZXdMYWJlbCgiY2F0Y2giKTsKCiAgICBpbnQgZmluYWxseUxhYmVsID0gbmV3TGFiZWwoImZpbmFsbHkiKTsKICAgIGludCBhZnRlckZpbmFsbHlMYWJlbCA9IG5ld0xhYmVsKCJhZnRlciBmaW5hbGx5Iik7CiAgICBpZiAobm9kZS5maW5hbGx5UGFydCAhPSBudWxsKSB7CiAgICAgIGZpbmFsbHlMYWJlbHNbbm9kZS5maW5hbGx5UGFydF0gPSBmaW5hbGx5TGFiZWw7CiAgICAgIGp1bXBUYXJnZXRzLmFkZChub2RlLmZpbmFsbHlQYXJ0KTsKICAgIH0KCiAgICBoYW5kbGVyTGFiZWxzW25vZGVdID0gaGFuZGxlckxhYmVsOwogICAganVtcFRhcmdldHMuYWRkKG5vZGUpOwoKICAgIC8vIFNldCB0aGUgZXJyb3IgaGFuZGxlciBoZXJlLiBJdCBtdXN0IGJlIGNsZWFyZWQgb24gZXZlcnkgcGF0aCBvdXQ7CiAgICAvLyBub3JtYWwgYW5kIGVycm9yIGV4aXQuCiAgICBzZXRFcnJvckhhbmRsZXIoKTsKCiAgICB2aXNpdFN0YXRlbWVudChub2RlLmJvZHkpOwoKICAgIGpzLk5vZGUgbGFzdCA9IGp1bXBUYXJnZXRzLnJlbW92ZUxhc3QoKTsKICAgIGFzc2VydChsYXN0ID09IG5vZGUpOwoKICAgIGlmIChub2RlLmZpbmFsbHlQYXJ0ID09IG51bGwpIHsKICAgICAgc2V0RXJyb3JIYW5kbGVyKCk7CiAgICAgIGFkZEdvdG8oYWZ0ZXJGaW5hbGx5TGFiZWwsIG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgLy8gVGhlIGhhbmRsZXIgaXMgcmVzZXQgYXMgdGhlIGZpcnN0IHRoaW5nIGluIHRoZSBmaW5hbGx5IGJsb2NrLgogICAgICBhZGRTdGF0ZW1lbnQoCiAgICAgICAgICBqcy5qcy5zdGF0ZW1lbnQoIiMucHVzaCgjKTsiLCBbbmV4dCwganMubnVtYmVyKGFmdGVyRmluYWxseUxhYmVsKV0pKTsKICAgICAgYWRkR290byhmaW5hbGx5TGFiZWwsIG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogICAgfQoKICAgIGlmIChub2RlLmNhdGNoUGFydCAhPSBudWxsKSB7CiAgICAgIGJlZ2luTGFiZWwoaGFuZGxlckxhYmVsKTsKICAgICAgLy8gW3VuY2F1Z2h0TGFiZWxdIGlzIHRoZSBoYW5kbGVyIGZvciB0aGUgY29kZSBpbiB0aGUgY2F0Y2gtcGFydC4KICAgICAgLy8gSXQgZW5zdXJlcyB0aGF0IFtuZXh0TmFtZV0gaXMgc2V0IHVwIHRvIHJ1biB0aGUgcmlnaHQgZmluYWxseSBibG9ja3MuCiAgICAgIGhhbmRsZXJMYWJlbHNbbm9kZS5jYXRjaFBhcnRdID0gdW5jYXVnaHRMYWJlbDsKICAgICAganVtcFRhcmdldHMuYWRkKG5vZGUuY2F0Y2hQYXJ0KTsKICAgICAgc2V0RXJyb3JIYW5kbGVyKCk7CiAgICAgIC8vIFRoZSBjYXRjaCBkZWNsYXJhdGlvbiBuYW1lIGNhbiBzaGFkb3cgb3V0ZXIgdmFyaWFibGVzLCBzbyBhIGZyZXNoIG5hbWUKICAgICAgLy8gaXMgbmVlZGVkIHRvIGF2b2lkIGNvbGxpc2lvbnMuICBTZWUgRWNtYSAyNjIsIDNyZCBlZGl0aW9uLAogICAgICAvLyBzZWN0aW9uIDEyLjE0LgogICAgICBTdHJpbmcgZXJyb3JSZW5hbWUgPSBmcmVzaE5hbWUobm9kZS5jYXRjaFBhcnQuZGVjbGFyYXRpb24ubmFtZSk7CiAgICAgIGxvY2FsVmFyaWFibGVzLmFkZChuZXcganMuVmFyaWFibGVEZWNsYXJhdGlvbihlcnJvclJlbmFtZSkpOwogICAgICB2YXJpYWJsZVJlbmFtaW5ncwogICAgICAgICAgLmFkZChuZXcgUGFpcihub2RlLmNhdGNoUGFydC5kZWNsYXJhdGlvbi5uYW1lLCBlcnJvclJlbmFtZSkpOwogICAgICBhZGRTdGF0ZW1lbnQoanMuanMuc3RhdGVtZW50KCIjID0gIzsiLCBbZXJyb3JSZW5hbWUsIGN1cnJlbnRFcnJvcl0pKTsKICAgICAgdmlzaXRTdGF0ZW1lbnQobm9kZS5jYXRjaFBhcnQuYm9keSk7CiAgICAgIHZhcmlhYmxlUmVuYW1pbmdzLnJlbW92ZUxhc3QoKTsKICAgICAgaWYgKG5vZGUuZmluYWxseVBhcnQgIT0gbnVsbCkgewogICAgICAgIC8vIFRoZSBlcnJvciBoYXMgYmVlbiBjYXVnaHQsIHNvIGFmdGVyIHRoZSBmaW5hbGx5LCBjb250aW51ZSBhZnRlciB0aGUKICAgICAgICAvLyB0cnkuCiAgICAgICAgYWRkU3RhdGVtZW50KGpzLmpzCiAgICAgICAgICAgIC5zdGF0ZW1lbnQoIiMucHVzaCgjKTsiLCBbbmV4dCwganMubnVtYmVyKGFmdGVyRmluYWxseUxhYmVsKV0pKTsKICAgICAgICBhZGRHb3RvKGZpbmFsbHlMYWJlbCwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYWRkR290byhhZnRlckZpbmFsbHlMYWJlbCwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIH0KICAgICAganMuTm9kZSBsYXN0ID0ganVtcFRhcmdldHMucmVtb3ZlTGFzdCgpOwogICAgICBhc3NlcnQobGFzdCA9PSBub2RlLmNhdGNoUGFydCk7CiAgICB9CgogICAgLy8gVGhlICJ1bmNhdWdodCItaGFuZGxlciB0ZWxscyB0aGUgZmluYWxseS1ibG9jayB0byBjb250aW51ZSB3aXRoCiAgICAvLyB0aGUgZW5jbG9zaW5nIGZpbmFsbHktYmxvY2tzIHVudGlsIHRoZSBjdXJyZW50IGNhdGNoLWhhbmRsZXIuCiAgICBiZWdpbkxhYmVsKHVuY2F1Z2h0TGFiZWwpOwoKICAgIExpc3Q8aW50PiBlbmNsb3NpbmdGaW5hbGxpZXMgPSBfZmluYWxsaWVzVXBUb0FuZEVuY2xvc2luZ0hhbmRsZXIoKTsKCiAgICBpbnQgbmV4dExhYmVsID0gZW5jbG9zaW5nRmluYWxsaWVzLnJlbW92ZUxhc3QoKTsKICAgIGlmIChlbmNsb3NpbmdGaW5hbGxpZXMuaXNOb3RFbXB0eSkgewogICAgICAvLyBbZW5jbG9zaW5nRmluYWxsaWVzXSBjYW4gYmUgZW1wdHkgaWYgdGhlcmUgaXMgbm8gc3Vycm91bmRpbmcgZmluYWxseQogICAgICAvLyBibG9ja3MuIFRoZW4gW25leHRMYWJlbF0gd2lsbCBiZSBbcmV0aHJvd0xhYmVsXS4KICAgICAgYWRkU3RhdGVtZW50KGpzLmpzLnN0YXRlbWVudCgiIyA9ICM7IiwgWwogICAgICAgIG5leHQsCiAgICAgICAgbmV3IGpzLkFycmF5SW5pdGlhbGl6ZXIoZW5jbG9zaW5nRmluYWxsaWVzLm1hcChqcy5udW1iZXIpLnRvTGlzdCgpKQogICAgICBdKSk7CiAgICB9CiAgICBpZiAobm9kZS5maW5hbGx5UGFydCA9PSBudWxsKSB7CiAgICAgIC8vIFRoZSBmaW5hbGx5LWJsb2NrIGJlbG9uZ2luZyB0byBbbm9kZV0gd2lsbCBiZSB2aXNpdGVkIGJlY2F1c2Ugb2YKICAgICAgLy8gZmFsbHRocm91Z2guIElmIGl0IGRvZXMgbm90IGV4aXN0LCBhZGQgYW4gZXhwbGljaXQgZ290by4KICAgICAgYWRkR290byhuZXh0TGFiZWwsIG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogICAgfQogICAgaWYgKG5vZGUuZmluYWxseVBhcnQgIT0gbnVsbCkgewogICAgICBqcy5Ob2RlIGxhc3QgPSBqdW1wVGFyZ2V0cy5yZW1vdmVMYXN0KCk7CiAgICAgIGFzc2VydChsYXN0ID09IG5vZGUuZmluYWxseVBhcnQpOwoKICAgICAgYmVnaW5MYWJlbChmaW5hbGx5TGFiZWwpOwogICAgICBzZXRFcnJvckhhbmRsZXIoKTsKICAgICAgdmlzaXRTdGF0ZW1lbnQobm9kZS5maW5hbGx5UGFydCk7CiAgICAgIGFkZFN0YXRlbWVudChuZXcganMuQ29tbWVudCgiLy8gZ290byB0aGUgbmV4dCBmaW5hbGx5IGhhbmRsZXIiKSk7CiAgICAgIGFkZFN0YXRlbWVudChqcy5qcy5zdGF0ZW1lbnQoIiMgPSAjLnBvcCgpOyIsIFtnb3RvLCBuZXh0XSkpOwogICAgICBhZGRCcmVhayhub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0KICAgIGJlZ2luTGFiZWwoYWZ0ZXJGaW5hbGx5TGFiZWwpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKGpzLlZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgdW5yZWFjaGFibGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5FeHByZXNzaW9uIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoanMuVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qgbm9kZSkgewogICAgZm9yIChqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uIGluaXRpYWxpemF0aW9uIGluIG5vZGUuZGVjbGFyYXRpb25zKSB7CiAgICAgIGpzLlZhcmlhYmxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb24gPSBpbml0aWFsaXphdGlvbi5kZWNsYXJhdGlvbjsKICAgICAgbG9jYWxWYXJpYWJsZXMuYWRkKGRlY2xhcmF0aW9uKTsKICAgICAgaWYgKGluaXRpYWxpemF0aW9uLnZhbHVlICE9IG51bGwpIHsKICAgICAgICB3aXRoRXhwcmVzc2lvbihpbml0aWFsaXphdGlvbi52YWx1ZSwgKGpzLkV4cHJlc3Npb24gdmFsdWUpIHsKICAgICAgICAgIGFkZEV4cHJlc3Npb25TdGF0ZW1lbnQoCiAgICAgICAgICAgICAgbmV3IGpzLkFzc2lnbm1lbnQobmV3IGpzLlZhcmlhYmxlVXNlKGRlY2xhcmF0aW9uLm5hbWUpLCB2YWx1ZSkpOwogICAgICAgIH0sIHN0b3JlOiBmYWxzZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBqcy5udW1iZXIoMCk7IC8vIER1bW15IGV4cHJlc3Npb24uCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VmFyaWFibGVJbml0aWFsaXphdGlvbihqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uIG5vZGUpIHsKICAgIHVucmVhY2hhYmxlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAganMuRXhwcmVzc2lvbiB2aXNpdFZhcmlhYmxlVXNlKGpzLlZhcmlhYmxlVXNlIG5vZGUpIHsKICAgIFBhaXI8U3RyaW5nLCBTdHJpbmc+IHJlbmFtaW5nID0gdmFyaWFibGVSZW5hbWluZ3MubGFzdFdoZXJlKAogICAgICAgIChQYWlyIHJlbmFtaW5nKSA9PiByZW5hbWluZy5hID09IG5vZGUubmFtZSwKICAgICAgICBvckVsc2U6ICgpID0+IG51bGwpOwogICAgaWYgKHJlbmFtaW5nID09IG51bGwpIHJldHVybiBub2RlOwogICAgcmV0dXJuIG5ldyBqcy5WYXJpYWJsZVVzZShyZW5hbWluZy5iKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRXaGlsZShqcy5XaGlsZSBub2RlKSB7CiAgICBpZiAoIXNob3VsZFRyYW5zZm9ybShub2RlKSkgewogICAgICBib29sIG9sZEluc2lkZVVudHJhbnNsYXRlZCA9IGluc2lkZVVudHJhbnNsYXRlZEJyZWFrYWJsZTsKICAgICAgaW5zaWRlVW50cmFuc2xhdGVkQnJlYWthYmxlID0gdHJ1ZTsKICAgICAgd2l0aEV4cHJlc3Npb24obm9kZS5jb25kaXRpb24sIChqcy5FeHByZXNzaW9uIGNvbmRpdGlvbikgewogICAgICAgIGFkZFN0YXRlbWVudChuZXcganMuV2hpbGUoY29uZGl0aW9uLCB0cmFuc2xhdGVUb1N0YXRlbWVudChub2RlLmJvZHkpKSk7CiAgICAgIH0sIHN0b3JlOiBmYWxzZSk7CiAgICAgIGluc2lkZVVudHJhbnNsYXRlZEJyZWFrYWJsZSA9IG9sZEluc2lkZVVudHJhbnNsYXRlZDsKICAgICAgcmV0dXJuOwogICAgfQogICAgaW50IGNvbnRpbnVlTGFiZWwgPSBuZXdMYWJlbCgid2hpbGUgY29uZGl0aW9uIik7CiAgICBjb250aW51ZUxhYmVsc1tub2RlXSA9IGNvbnRpbnVlTGFiZWw7CiAgICBiZWdpbkxhYmVsKGNvbnRpbnVlTGFiZWwpOwoKICAgIGludCBhZnRlckxhYmVsID0gbmV3TGFiZWwoImFmdGVyIHdoaWxlIik7CiAgICBicmVha0xhYmVsc1tub2RlXSA9IGFmdGVyTGFiZWw7CiAgICBqcy5FeHByZXNzaW9uIGNvbmRpdGlvbiA9IG5vZGUuY29uZGl0aW9uOwogICAgLy8gSWYgdGhlIGNvbmRpdGlvbiBpcyBgdHJ1ZWAsIGEgdGVzdCBpcyBub3QgbmVlZGVkLgogICAgaWYgKCEoY29uZGl0aW9uIGlzIGpzLkxpdGVyYWxCb29sICYmIGNvbmRpdGlvbi52YWx1ZSA9PSB0cnVlKSkgewogICAgICB3aXRoRXhwcmVzc2lvbihub2RlLmNvbmRpdGlvbiwgKGpzLkV4cHJlc3Npb24gY29uZGl0aW9uKSB7CiAgICAgICAgYWRkU3RhdGVtZW50KG5ldyBqcy5JZi5ub0Vsc2UobmV3IGpzLlByZWZpeCgiISIsIGNvbmRpdGlvbiksCiAgICAgICAgICAgIGdvdG9BbmRCcmVhayhhZnRlckxhYmVsLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKSkpOwogICAgICB9LCBzdG9yZTogZmFsc2UpOwogICAgfQogICAganVtcFRhcmdldHMuYWRkKG5vZGUpOwogICAgdmlzaXRTdGF0ZW1lbnQobm9kZS5ib2R5KTsKICAgIGp1bXBUYXJnZXRzLnJlbW92ZUxhc3QoKTsKICAgIGFkZEdvdG8oY29udGludWVMYWJlbCwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICBiZWdpbkxhYmVsKGFmdGVyTGFiZWwpOwogIH0KCiAgYWRkWWllbGQoanMuRGFydFlpZWxkIG5vZGUsIGpzLkV4cHJlc3Npb24gZXhwcmVzc2lvbiwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RGFydFlpZWxkKGpzLkRhcnRZaWVsZCBub2RlKSB7CiAgICBhc3NlcnQoaXNTeW5jU3RhciB8fCBpc0FzeW5jU3Rhcik7CiAgICBpbnQgbGFiZWwgPSBuZXdMYWJlbCgiYWZ0ZXIgeWllbGQiKTsKICAgIC8vIERvbid0IGRvIGEgYnJlYWsgaGVyZSBmb3IgdGhlIGdvdG8sIGJ1dCBpbnN0ZWFkIGEgcmV0dXJuIGluIGVpdGhlcgogICAgLy8gYWRkU3luWWllbGQgb3IgYWRkQXN5bmNZaWVsZC4KICAgIHdpdGhFeHByZXNzaW9uKG5vZGUuZXhwcmVzc2lvbiwgKGpzLkV4cHJlc3Npb24gZXhwcmVzc2lvbikgewogICAgICBhZGRTdGF0ZW1lbnQoc2V0R290b1ZhcmlhYmxlKGxhYmVsLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIGFkZFlpZWxkKG5vZGUsIGV4cHJlc3Npb24sIG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogICAgfSwgc3RvcmU6IGZhbHNlKTsKICAgIGJlZ2luTGFiZWwobGFiZWwpOwogIH0KfQoKanMuVmFyaWFibGVJbml0aWFsaXphdGlvbiBfbWFrZVZhcmlhYmxlSW5pdGlhbGl6ZXIoZHluYW1pYyB2YXJpYWJsZSwKICAgIGpzLkV4cHJlc3Npb24gaW5pdFZhbHVlLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogIGpzLlZhcmlhYmxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb247CiAgaWYgKHZhcmlhYmxlIGlzIGpzLlZhcmlhYmxlVXNlKSB7CiAgICBkZWNsYXJhdGlvbiA9IG5ldyBqcy5WYXJpYWJsZURlY2xhcmF0aW9uKHZhcmlhYmxlLm5hbWUpOwogIH0gZWxzZSBpZiAodmFyaWFibGUgaXMgU3RyaW5nKSB7CiAgICBkZWNsYXJhdGlvbiA9IG5ldyBqcy5WYXJpYWJsZURlY2xhcmF0aW9uKHZhcmlhYmxlKTsKICB9IGVsc2UgewogICAgYXNzZXJ0KHZhcmlhYmxlIGlzIGpzLlZhcmlhYmxlRGVjbGFyYXRpb24pOwogICAgZGVjbGFyYXRpb24gPSB2YXJpYWJsZTsKICB9CiAgcmV0dXJuIG5ldyBqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uKGRlY2xhcmF0aW9uLCBpbml0VmFsdWUpCiAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pOwp9CgpjbGFzcyBBc3luY1Jld3JpdGVyIGV4dGVuZHMgQXN5bmNSZXdyaXRlckJhc2UgewogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQXN5bmMgPT4gdHJ1ZTsKCiAgLy8vIFRoZSBDb21wbGV0ZXIgdGhhdCB3aWxsIGZpbmlzaCBhbiBhc3luYyBmdW5jdGlvbi4KICAvLy8KICAvLy8gTm90IHVzZWQgZm9yIHN5bmMqIG9yIGFzeW5jKiBmdW5jdGlvbnMuCiAgU3RyaW5nIGNvbXBsZXRlck5hbWU7CiAganMuVmFyaWFibGVVc2UgZ2V0IGNvbXBsZXRlciA9PiBuZXcganMuVmFyaWFibGVVc2UoY29tcGxldGVyTmFtZSk7CgogIC8vLyBUaGUgZnVuY3Rpb24gY2FsbGVkIGJ5IGFuIGFzeW5jIGZ1bmN0aW9uIHRvIGluaXRpYXRlIGFzeW5jaHJvbm91cwogIC8vLyBleGVjdXRpb24gb2YgdGhlIGJvZHkuICBUaGlzIGlzIGNhbGxlZCB3aXRoOgogIC8vLwogIC8vLyAtIFRoZSBib2R5IGZ1bmN0aW9uIFtib2R5TmFtZV0uCiAgLy8vIC0gdGhlIGNvbXBsZXRlciBvYmplY3QgW2NvbXBsZXRlcl0uCiAgLy8vCiAgLy8vIEl0IHJldHVybnMgdGhlIGNvbXBsZXRlcidzIGZ1dHVyZS4gUGFzc2luZyB0aGUgY29tcGxldGVyIGFuZCByZXR1cm5pbmcgaXRzCiAgLy8vIGZ1dHVyZSBpcyBhIGNvbnZlbmllbmNlIHRvIGFsbG93IGJvdGggdGhlIGluaXRpYXRpb24gYW5kIGZldGNoaW5nIHRoZQogIC8vLyBmdXR1cmUgdG8gYmUgY29tcGFjdGx5IGVuY29kZWQgaW4gYSByZXR1cm4gc3RhdGVtZW50J3MgZXhwcmVzc2lvbi4KICBmaW5hbCBqcy5FeHByZXNzaW9uIGFzeW5jU3RhcnQ7CgogIC8vLyBGdW5jdGlvbiBjYWxsZWQgYnkgdGhlIGFzeW5jIGZ1bmN0aW9uIHRvIHNpbXVsYXRlIGFuIGBhd2FpdGAKICAvLy8gZXhwcmVzc2lvbi4gSXQgaXMgY2FsbGVkIHdpdGg6CiAgLy8vCiAgLy8vIC0gVGhlIHZhbHVlIHRvIGF3YWl0CiAgLy8vIC0gVGhlIGJvZHkgZnVuY3Rpb24gW2JvZHlOYW1lXQogIGZpbmFsIGpzLkV4cHJlc3Npb24gYXN5bmNBd2FpdDsKCiAgLy8vIEZ1bmN0aW9uIGNhbGxlZCBieSB0aGUgYXN5bmMgZnVuY3Rpb24gdG8gc2ltdWxhdGUgYSByZXR1cm4uCiAgLy8vIEl0IGlzIGNhbGxlZCB3aXRoOgogIC8vLwogIC8vLyAtIFRoZSB2YWx1ZSB0byByZXR1cm4KICAvLy8gLSBUaGUgY29tcGxldGVyIG9iamVjdCBbY29tcGxldGVyXQogIGZpbmFsIGpzLkV4cHJlc3Npb24gYXN5bmNSZXR1cm47CgogIC8vLyBGdW5jdGlvbiBjYWxsZWQgYnkgdGhlIGFzeW5jIGZ1bmN0aW9uIHRvIHNpbXVsYXRlIGEgcmV0aHJvdy4KICAvLy8gSXQgaXMgY2FsbGVkIHdpdGg6CiAgLy8vCiAgLy8vIC0gVGhlIHZhbHVlIGNvbnRhaW5pbmcgdGhlIGV4Y2VwdGlvbiBhbmQgc3RhY2sKICAvLy8gLSBUaGUgY29tcGxldGVyIG9iamVjdCBbY29tcGxldGVyXQogIGZpbmFsIGpzLkV4cHJlc3Npb24gYXN5bmNSZXRocm93OwoKICAvLy8gQ29uc3RydWN0b3IgdXNlZCB0byBpbml0aWFsaXplIHRoZSBbY29tcGxldGVyXSB2YXJpYWJsZS4KICAvLy8KICAvLy8gU3BlY2lmaWMgdG8gYXN5bmMgbWV0aG9kcy4KICBmaW5hbCBqcy5FeHByZXNzaW9uIGNvbXBsZXRlckZhY3Rvcnk7CiAgTGlzdDxqcy5FeHByZXNzaW9uPiBjb21wbGV0ZXJGYWN0b3J5VHlwZUFyZ3VtZW50czsKCiAgZmluYWwganMuRXhwcmVzc2lvbiB3cmFwQm9keTsKCiAgQXN5bmNSZXdyaXRlcihEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIsIFNwYW5uYWJsZSBzcGFubmFibGUsCiAgICAgIHt0aGlzLmFzeW5jU3RhcnQsCiAgICAgIHRoaXMuYXN5bmNBd2FpdCwKICAgICAgdGhpcy5hc3luY1JldHVybiwKICAgICAgdGhpcy5hc3luY1JldGhyb3csCiAgICAgIHRoaXMuY29tcGxldGVyRmFjdG9yeSwKICAgICAgdGhpcy5jb21wbGV0ZXJGYWN0b3J5VHlwZUFyZ3VtZW50cywKICAgICAgdGhpcy53cmFwQm9keSwKICAgICAgU3RyaW5nIHNhZmVWYXJpYWJsZU5hbWUoU3RyaW5nIHByb3Bvc2VkTmFtZSksCiAgICAgIGpzLk5hbWUgYm9keU5hbWV9KQogICAgICA6IHN1cGVyKHJlcG9ydGVyLCBzcGFubmFibGUsIHNhZmVWYXJpYWJsZU5hbWUsIGJvZHlOYW1lKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRZaWVsZChqcy5EYXJ0WWllbGQgbm9kZSwganMuRXhwcmVzc2lvbiBleHByZXNzaW9uLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgcmVwb3J0ZXIuaW50ZXJuYWxFcnJvcihzcGFubmFibGUsICJZaWVsZCBpbiBub24tZ2VuZXJhdGluZyBhc3luYyBmdW5jdGlvbiIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRFcnJvckV4aXQoU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIGlmICghaGFzSGFuZGxlckxhYmVscykgcmV0dXJuOyAvLyByZXRocm93IGhhbmRsZWQgaW4gbWV0aG9kIGJvaWxlcnBsYXRlLgogICAgYmVnaW5MYWJlbChyZXRocm93TGFiZWwpOwogICAganMuRXhwcmVzc2lvbiB0aGVuSGVscGVyQ2FsbCA9IGpzLmpzKAogICAgICAgICIjdGhlbkhlbHBlcigjY3VycmVudEVycm9yLCAjY29tcGxldGVyKSIsIHsKICAgICAgInRoZW5IZWxwZXIiOiBhc3luY1JldGhyb3csCiAgICAgICJjdXJyZW50RXJyb3IiOiBjdXJyZW50RXJyb3IsCiAgICAgICJjb21wbGV0ZXIiOiBjb21wbGV0ZXIKICAgIH0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBhZGRTdGF0ZW1lbnQoCiAgICAgICAgbmV3IGpzLlJldHVybih0aGVuSGVscGVyQ2FsbCkud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICAvLy8gUmV0dXJuaW5nIGZyb20gYW4gYXN5bmMgbWV0aG9kIGNhbGxzIFthc3luY1N0YXJIZWxwZXJdIHdpdGggdGhlIHJlc3VsdC4KICAvLy8gKHRoZSByZXN1bHQgbWlnaHQgaGF2ZSBiZWVuIHN0b3JlZCBpbiBbcmV0dXJuVmFsdWVdIGJ5IHNvbWUgZmluYWxseQogIC8vLyBibG9jaykuCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRTdWNjZXNzRXhpdChTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgaWYgKGFuYWx5c2lzLmhhc0V4cGxpY2l0UmV0dXJucykgewogICAgICBiZWdpbkxhYmVsKGV4aXRMYWJlbCk7CiAgICB9IGVsc2UgewogICAgICBhZGRTdGF0ZW1lbnQobmV3IGpzLkNvbW1lbnQoImltcGxpY2l0IHJldHVybiIpKTsKICAgIH0KCiAgICBqcy5FeHByZXNzaW9uIHJ1bnRpbWVIZWxwZXJDYWxsID0KICAgICAgICBqcy5qcygiI3J1bnRpbWVIZWxwZXIoI3JldHVyblZhbHVlLCAjY29tcGxldGVyKSIsIHsKICAgICAgInJ1bnRpbWVIZWxwZXIiOiBhc3luY1JldHVybiwKICAgICAgInJldHVyblZhbHVlIjoKICAgICAgICAgIGFuYWx5c2lzLmhhc0V4cGxpY2l0UmV0dXJucyA/IHJldHVyblZhbHVlIDogbmV3IGpzLkxpdGVyYWxOdWxsKCksCiAgICAgICJjb21wbGV0ZXIiOiBjb21wbGV0ZXIKICAgIH0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBhZGRTdGF0ZW1lbnQobmV3IGpzLlJldHVybihydW50aW1lSGVscGVyQ2FsbCkKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uPiB2YXJpYWJsZUluaXRpYWxpemF0aW9ucygKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIExpc3Q8anMuVmFyaWFibGVJbml0aWFsaXphdGlvbj4gdmFyaWFibGVzID0gPGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24+W107CiAgICB2YXJpYWJsZXMuYWRkKF9tYWtlVmFyaWFibGVJbml0aWFsaXplcigKICAgICAgICBjb21wbGV0ZXIsCiAgICAgICAganMuanMoJyMoIyknLCBbCiAgICAgICAgICBjb21wbGV0ZXJGYWN0b3J5LAogICAgICAgICAgY29tcGxldGVyRmFjdG9yeVR5cGVBcmd1bWVudHMKICAgICAgICBdKS53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICBpZiAoYW5hbHlzaXMuaGFzRXhwbGljaXRSZXR1cm5zKSB7CiAgICAgIHZhcmlhYmxlcwogICAgICAgICAgLmFkZChfbWFrZVZhcmlhYmxlSW5pdGlhbGl6ZXIocmV0dXJuVmFsdWUsIG51bGwsIHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9CiAgICByZXR1cm4gdmFyaWFibGVzOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBpbml0aWFsaXplTmFtZXMoKSB7CiAgICBjb21wbGV0ZXJOYW1lID0gZnJlc2hOYW1lKCJjb21wbGV0ZXIiKTsKICAgIGNvbXBsZXRlckZhY3RvcnlUeXBlQXJndW1lbnRzID0KICAgICAgICBwcm9jZXNzVHlwZUFyZ3VtZW50cyhjb21wbGV0ZXJGYWN0b3J5VHlwZUFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5TdGF0ZW1lbnQgYXdhaXRTdGF0ZW1lbnQoCiAgICAgIGpzLkV4cHJlc3Npb24gdmFsdWUsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBqcy5FeHByZXNzaW9uIGFzeW5jSGVscGVyQ2FsbCA9IGpzLmpzKCIjYXN5bmNIZWxwZXIoI3ZhbHVlLCAjYm9keU5hbWUpIiwgewogICAgICAiYXN5bmNIZWxwZXIiOiBhc3luY0F3YWl0LAogICAgICAidmFsdWUiOiB2YWx1ZSwKICAgICAgImJvZHlOYW1lIjogYm9keU5hbWUsCiAgICB9KS53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pOwogICAgcmV0dXJuIG5ldyBqcy5SZXR1cm4oYXN5bmNIZWxwZXJDYWxsKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAganMuRnVuIGZpbmlzaEZ1bmN0aW9uKAogICAgICBMaXN0PGpzLlBhcmFtZXRlcj4gcGFyYW1ldGVycywKICAgICAgTGlzdDxqcy5QYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzLAogICAgICBqcy5TdGF0ZW1lbnQgcmV3cml0dGVuQm9keSwKICAgICAganMuVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QgdmFyaWFibGVEZWNsYXJhdGlvbnMsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIGZ1bmN0aW9uU291cmNlSW5mb3JtYXRpb24sCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIGJvZHlTb3VyY2VJbmZvcm1hdGlvbikgewogICAganMuRXhwcmVzc2lvbiBhc3luY1JldGhyb3dDYWxsID0KICAgICAgICBqcy5qcygiI2FzeW5jUmV0aHJvdygjcmVzdWx0LCAjY29tcGxldGVyKSIsIHsKICAgICAgInJlc3VsdCI6IHJlc3VsdE5hbWUsCiAgICAgICJhc3luY1JldGhyb3ciOiBhc3luY1JldGhyb3csCiAgICAgICJjb21wbGV0ZXIiOiBjb21wbGV0ZXIsCiAgICB9KS53aXRoU291cmNlSW5mb3JtYXRpb24oYm9keVNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGpzLlJldHVybiByZXR1cm5Bc3luY1JldGhyb3cgPSBuZXcganMuUmV0dXJuKGFzeW5jUmV0aHJvd0NhbGwpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihib2R5U291cmNlSW5mb3JtYXRpb24pOwogICAganMuU3RhdGVtZW50IGVycm9yQ2hlY2sgPSBqcy5qcy5zdGF0ZW1lbnQoIiIiCiAgICAgIGlmICgjZXJyb3JDb2RlID09PSAjRVJST1IpIHsKICAgICAgICBpZiAoI2hhc0hhbmRsZXJMYWJlbHMpIHsKICAgICAgICAgICAgI2N1cnJlbnRFcnJvciA9ICNyZXN1bHQ7CiAgICAgICAgICAgICNnb3RvID0gI2hhbmRsZXI7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICNyZXR1cm5Bc3luY1JldGhyb3c7CiAgICAgIH0iIiIsIHsKICAgICAgImVycm9yQ29kZSI6IGVycm9yQ29kZU5hbWUsCiAgICAgICJFUlJPUiI6IGpzLm51bWJlcihlcnJvcl9jb2Rlcy5FUlJPUiksCiAgICAgICJoYXNIYW5kbGVyTGFiZWxzIjogaGFzSGFuZGxlckxhYmVscywKICAgICAgImN1cnJlbnRFcnJvciI6IGN1cnJlbnRFcnJvciwKICAgICAgInJlc3VsdCI6IHJlc3VsdE5hbWUsCiAgICAgICJnb3RvIjogZ290bywKICAgICAgImhhbmRsZXIiOiBoYW5kbGVyLAogICAgICAicmV0dXJuQXN5bmNSZXRocm93IjogcmV0dXJuQXN5bmNSZXRocm93LAogICAgfSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKGJvZHlTb3VyY2VJbmZvcm1hdGlvbik7CiAgICBqcy5GdW4gaW5uZXJGdW5jdGlvbiA9IGpzLmpzKCIiIgogICAgICBmdW5jdGlvbiAoI2Vycm9yQ29kZSwgI3Jlc3VsdCkgewogICAgICAgICNlcnJvckNoZWNrOwogICAgICAgICNyZXdyaXR0ZW5Cb2R5OwogICAgICB9IiIiLCB7CiAgICAgICJlcnJvckNvZGUiOiBlcnJvckNvZGVOYW1lLAogICAgICAicmVzdWx0IjogcmVzdWx0TmFtZSwKICAgICAgImVycm9yQ2hlY2siOiBlcnJvckNoZWNrLAogICAgICAicmV3cml0dGVuQm9keSI6IHJld3JpdHRlbkJvZHksCiAgICB9KS53aXRoU291cmNlSW5mb3JtYXRpb24oZnVuY3Rpb25Tb3VyY2VJbmZvcm1hdGlvbik7CiAgICBqcy5FeHByZXNzaW9uIGFzeW5jU3RhcnRDYWxsID0ganMuanMoIiNhc3luY1N0YXJ0KCNib2R5TmFtZSwgI2NvbXBsZXRlcikiLCB7CiAgICAgICJhc3luY1N0YXJ0IjogYXN5bmNTdGFydCwKICAgICAgImJvZHlOYW1lIjogYm9keU5hbWUsCiAgICAgICJjb21wbGV0ZXIiOiBjb21wbGV0ZXIsCiAgICB9KS53aXRoU291cmNlSW5mb3JtYXRpb24oYm9keVNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGpzLlJldHVybiByZXR1cm5Bc3luY1N0YXJ0ID0gbmV3IGpzLlJldHVybihhc3luY1N0YXJ0Q2FsbCkKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKGJvZHlTb3VyY2VJbmZvcm1hdGlvbik7CiAgICBqcy5FeHByZXNzaW9uIHdyYXBCb2R5Q2FsbCA9IGpzLmpzKCIjd3JhcEJvZHkoI2lubmVyRnVuY3Rpb24pIiwgewogICAgICAid3JhcEJvZHkiOiB3cmFwQm9keSwKICAgICAgImlubmVyRnVuY3Rpb24iOiBpbm5lckZ1bmN0aW9uLAogICAgfSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKGJvZHlTb3VyY2VJbmZvcm1hdGlvbik7CiAgICByZXR1cm4ganMuanMoIiIiCiAgICAgICAgZnVuY3Rpb24gKCNwYXJhbWV0ZXJzLCAjdHlwZVBhcmFtZXRlcnMpIHsKICAgICAgICAgICN2YXJpYWJsZURlY2xhcmF0aW9uczsKICAgICAgICAgIHZhciAjYm9keU5hbWUgPSAjd3JhcEJvZHlDYWxsOwogICAgICAgICAgI3JldHVybkFzeW5jU3RhcnQ7CiAgICAgICAgfSIiIiwgewogICAgICAicGFyYW1ldGVycyI6IHBhcmFtZXRlcnMsCiAgICAgICJ0eXBlUGFyYW1ldGVycyI6IHR5cGVQYXJhbWV0ZXJzLAogICAgICAidmFyaWFibGVEZWNsYXJhdGlvbnMiOiB2YXJpYWJsZURlY2xhcmF0aW9ucywKICAgICAgImJvZHlOYW1lIjogYm9keU5hbWUsCiAgICAgICJ3cmFwQm9keUNhbGwiOiB3cmFwQm9keUNhbGwsCiAgICAgICJyZXR1cm5Bc3luY1N0YXJ0IjogcmV0dXJuQXN5bmNTdGFydCwKICAgIH0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihmdW5jdGlvblNvdXJjZUluZm9ybWF0aW9uKTsKICB9Cn0KCmNsYXNzIFN5bmNTdGFyUmV3cml0ZXIgZXh0ZW5kcyBBc3luY1Jld3JpdGVyQmFzZSB7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTeW5jU3RhciA9PiB0cnVlOwoKICAvLy8gQ29uc3RydWN0b3IgY3JlYXRpbmcgdGhlIEl0ZXJhYmxlIGZvciBhIHN5bmMqIG1ldGhvZC4gQ2FsbGVkIHdpdGgKICAvLy8gW2JvZHlOYW1lXS4KICBmaW5hbCBqcy5FeHByZXNzaW9uIGl0ZXJhYmxlRmFjdG9yeTsKICBMaXN0PGpzLkV4cHJlc3Npb24+IGl0ZXJhYmxlRmFjdG9yeVR5cGVBcmd1bWVudHM7CgogIC8vLyBBIEpTIEV4cHJlc3Npb24gdGhhdCBjcmVhdGVzIGEgbWFya2VyIHNob3dpbmcgdGhhdCBpdGVyYXRpb24gaXMgb3Zlci4KICAvLy8KICAvLy8gQ2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzLgogIGZpbmFsIGpzLkV4cHJlc3Npb24gZW5kT2ZJdGVyYXRpb247CgogIC8vLyBBIEpTIEV4cHJlc3Npb24gdGhhdCBjcmVhdGVzIGEgbWFya2VyIGluZGljYXRpb24gYSAneWllbGQqJyBzdGF0ZW1lbnQuCiAgLy8vCiAgLy8vIENhbGxlZCB3aXRoIHRoZSBzdHJlYW0gdG8geWllbGQgZnJvbS4KICBmaW5hbCBqcy5FeHByZXNzaW9uIHlpZWxkU3RhckV4cHJlc3Npb247CgogIC8vLyBVc2VkIGJ5IHN5bmMqIGZ1bmN0aW9ucyB0byB0aHJvdyBleGVwdGlvbnMuCiAgZmluYWwganMuRXhwcmVzc2lvbiB1bmNhdWdodEVycm9yRXhwcmVzc2lvbjsKCiAgU3luY1N0YXJSZXdyaXRlcihEaWFnbm9zdGljUmVwb3J0ZXIgZGlhZ25vc3RpY0xpc3RlbmVyLCBzcGFubmFibGUsCiAgICAgIHt0aGlzLmVuZE9mSXRlcmF0aW9uLAogICAgICB0aGlzLml0ZXJhYmxlRmFjdG9yeSwKICAgICAgdGhpcy5pdGVyYWJsZUZhY3RvcnlUeXBlQXJndW1lbnRzLAogICAgICB0aGlzLnlpZWxkU3RhckV4cHJlc3Npb24sCiAgICAgIHRoaXMudW5jYXVnaHRFcnJvckV4cHJlc3Npb24sCiAgICAgIFN0cmluZyBzYWZlVmFyaWFibGVOYW1lKFN0cmluZyBwcm9wb3NlZE5hbWUpLAogICAgICBqcy5OYW1lIGJvZHlOYW1lfSkKICAgICAgOiBzdXBlcihkaWFnbm9zdGljTGlzdGVuZXIsIHNwYW5uYWJsZSwgc2FmZVZhcmlhYmxlTmFtZSwgYm9keU5hbWUpOwoKICAvLy8gVHJhbnNsYXRlcyBhIHlpZWxkL3lpZWxkKiBpbiBhbiBzeW5jKi4KICAvLy8KICAvLy8gYHlpZWxkYCBpbiBhIHN5bmMqIGZ1bmN0aW9uIGp1c3QgcmV0dXJucyBbdmFsdWVdLgogIC8vLyBgeWllbGQqYCB3cmFwcyBbdmFsdWVdIGluIGEgW3lpZWxkU3RhckV4cHJlc3Npb25dIGFuZCByZXR1cm5zIGl0LgogIEBvdmVycmlkZQogIHZvaWQgYWRkWWllbGQoanMuRGFydFlpZWxkIG5vZGUsIGpzLkV4cHJlc3Npb24gZXhwcmVzc2lvbiwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIGlmIChub2RlLmhhc1N0YXIpIHsKICAgICAgYWRkU3RhdGVtZW50KG5ldyBqcy5SZXR1cm4obmV3IGpzLkNhbGwoeWllbGRTdGFyRXhwcmVzc2lvbiwgW2V4cHJlc3Npb25dKQogICAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKQogICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfSBlbHNlIHsKICAgICAgYWRkU3RhdGVtZW50KAogICAgICAgICAgbmV3IGpzLlJldHVybihleHByZXNzaW9uKS53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGpzLkZ1biBmaW5pc2hGdW5jdGlvbigKICAgICAgTGlzdDxqcy5QYXJhbWV0ZXI+IHBhcmFtZXRlcnMsCiAgICAgIExpc3Q8anMuUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycywKICAgICAganMuU3RhdGVtZW50IHJld3JpdHRlbkJvZHksCiAgICAgIGpzLlZhcmlhYmxlRGVjbGFyYXRpb25MaXN0IHZhcmlhYmxlRGVjbGFyYXRpb25zLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBmdW5jdGlvblNvdXJjZUluZm9ybWF0aW9uLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBib2R5U291cmNlSW5mb3JtYXRpb24pIHsKICAgIC8vIEVhY2ggaXRlcmF0b3IgaW52b2NhdGlvbiBvbiB0aGUgaXRlcmFibGUgc2hvdWxkIHdvcmsgb24gaXRzIG93biBjb3B5IG9mCiAgICAvLyB0aGUgcGFyYW1ldGVycy4KICAgIC8vIFRPRE8oc2lndXJkbSk6IFdlIG9ubHkgbmVlZCB0byBkbyB0aGlzIGNvcHlpbmcgZm9yIHBhcmFtZXRlcnMgdGhhdCBhcmUKICAgIC8vIG11dGF0ZWQuCiAgICBMaXN0PGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24+IGRlY2xhcmF0aW9ucyA9CiAgICAgICAgPGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24+W107CiAgICBMaXN0PGpzLlBhcmFtZXRlcj4gcmVuYW1lZFBhcmFtZXRlcnMgPSA8anMuUGFyYW1ldGVyPltdOwogICAgZm9yIChqcy5QYXJhbWV0ZXIgcGFyYW1ldGVyIGluIHBhcmFtZXRlcnMpIHsKICAgICAgU3RyaW5nIG5hbWUgPSBwYXJhbWV0ZXIubmFtZTsKICAgICAgU3RyaW5nIHJlbmFtZWROYW1lID0gZnJlc2hOYW1lKG5hbWUpOwogICAgICByZW5hbWVkUGFyYW1ldGVycy5hZGQobmV3IGpzLlBhcmFtZXRlcihyZW5hbWVkTmFtZSkpOwogICAgICBkZWNsYXJhdGlvbnMuYWRkKG5ldyBqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uKAogICAgICAgICAgbmV3IGpzLlZhcmlhYmxlRGVjbGFyYXRpb24obmFtZSksIG5ldyBqcy5WYXJpYWJsZVVzZShyZW5hbWVkTmFtZSkpKTsKICAgIH0KICAgIGpzLlZhcmlhYmxlRGVjbGFyYXRpb25MaXN0IGNvcHlQYXJhbWV0ZXJzID0KICAgICAgICBuZXcganMuVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoZGVjbGFyYXRpb25zKTsKCiAgICBqcy5FeHByZXNzaW9uIHNldEN1cnJlbnRFcnJvciA9IGpzLmpzKCIjY3VycmVudEVycm9yID0gI3Jlc3VsdCIsIHsKICAgICAgInJlc3VsdCI6IHJlc3VsdE5hbWUsCiAgICAgICJjdXJyZW50RXJyb3IiOiBjdXJyZW50RXJyb3JOYW1lLAogICAgfSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKGJvZHlTb3VyY2VJbmZvcm1hdGlvbik7CiAgICBqcy5FeHByZXNzaW9uIHNldEdvdG8gPSBqcy5qcygiI2dvdG8gPSAjaGFuZGxlciIsIHsKICAgICAgImdvdG8iOiBnb3RvLAogICAgICAiaGFuZGxlciI6IGhhbmRsZXIsCiAgICB9KS53aXRoU291cmNlSW5mb3JtYXRpb24oYm9keVNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGpzLlN0YXRlbWVudCBjaGVja0Vycm9yQ29kZSA9IGpzLmpzLnN0YXRlbWVudCgiIiIKICAgICAgICAgIGlmICgjZXJyb3JDb2RlID09PSAjRVJST1IpIHsKICAgICAgICAgICAgICAjc2V0Q3VycmVudEVycm9yOwogICAgICAgICAgICAgICNzZXRHb3RvOwogICAgICAgICAgfSIiIiwgewogICAgICAiZXJyb3JDb2RlIjogZXJyb3JDb2RlTmFtZSwKICAgICAgIkVSUk9SIjoganMubnVtYmVyKGVycm9yX2NvZGVzLkVSUk9SKSwKICAgICAgInNldEN1cnJlbnRFcnJvciI6IHNldEN1cnJlbnRFcnJvciwKICAgICAgInNldEdvdG8iOiBzZXRHb3RvLAogICAgfSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKGJvZHlTb3VyY2VJbmZvcm1hdGlvbik7CiAgICBqcy5OYW1lZEZ1bmN0aW9uIGlubmVySW5uZXJGdW5jdGlvbiA9IGpzLmpzKCIiIgogICAgICAgICAgZnVuY3Rpb24gI2JvZHkoI2Vycm9yQ29kZSwgI3Jlc3VsdCkgewogICAgICAgICAgICAjY2hlY2tFcnJvckNvZGU7CiAgICAgICAgICAgICNoZWxwZXJCb2R5OwogICAgICAgICAgfSIiIiwgewogICAgICAiaGVscGVyQm9keSI6IHJld3JpdHRlbkJvZHksCiAgICAgICJlcnJvckNvZGUiOiBlcnJvckNvZGVOYW1lLAogICAgICAiYm9keSI6IGJvZHlOYW1lLAogICAgICAicmVzdWx0IjogcmVzdWx0TmFtZSwKICAgICAgImNoZWNrRXJyb3JDb2RlIjogY2hlY2tFcnJvckNvZGUsCiAgICB9KS53aXRoU291cmNlSW5mb3JtYXRpb24oZnVuY3Rpb25Tb3VyY2VJbmZvcm1hdGlvbik7CiAgICBqcy5SZXR1cm4gcmV0dXJuSW5uZXJJbm5lckZ1bmN0aW9uID0gbmV3IGpzLlJldHVybihpbm5lcklubmVyRnVuY3Rpb24pCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihib2R5U291cmNlSW5mb3JtYXRpb24pOwogICAganMuRnVuIGlubmVyRnVuY3Rpb24gPSBqcy5qcygiIiIKICAgICAgICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaWYgKCNoYXNQYXJhbWV0ZXJzKSB7CiAgICAgICAgICAgICAgI2NvcHlQYXJhbWV0ZXJzOwogICAgICAgICAgICB9CiAgICAgICAgICAgICN2YXJEZWNsOwogICAgICAgICAgICAjcmV0dXJuSW5uZXJJbm5lckZ1bmN0aW9uOwogICAgICAgICAgfSIiIiwgewogICAgICAiaGFzUGFyYW1ldGVycyI6IHBhcmFtZXRlcnMuaXNOb3RFbXB0eSwKICAgICAgImNvcHlQYXJhbWV0ZXJzIjogY29weVBhcmFtZXRlcnMsCiAgICAgICJ2YXJEZWNsIjogdmFyaWFibGVEZWNsYXJhdGlvbnMsCiAgICAgICJyZXR1cm5Jbm5lcklubmVyRnVuY3Rpb24iOiByZXR1cm5Jbm5lcklubmVyRnVuY3Rpb24sCiAgICB9KS53aXRoU291cmNlSW5mb3JtYXRpb24oZnVuY3Rpb25Tb3VyY2VJbmZvcm1hdGlvbik7CiAgICBqcy5FeHByZXNzaW9uIGNhbGxJdGVyYWJsZUZhY3RvcnkgPQogICAgICAgIGpzLmpzKCIjaXRlcmFibGVGYWN0b3J5KCNpbm5lckZ1bmN0aW9uLCAjdHlwZSkiLCB7CiAgICAgICJpdGVyYWJsZUZhY3RvcnkiOiBpdGVyYWJsZUZhY3RvcnksCiAgICAgICJ0eXBlIjogaXRlcmFibGVGYWN0b3J5VHlwZUFyZ3VtZW50cywKICAgICAgImlubmVyRnVuY3Rpb24iOiBpbm5lckZ1bmN0aW9uLAogICAgfSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKGJvZHlTb3VyY2VJbmZvcm1hdGlvbik7CiAgICBqcy5TdGF0ZW1lbnQgcmV0dXJuQ2FsbEl0ZXJhYmxlRmFjdG9yeSA9IG5ldyBqcy5SZXR1cm4oY2FsbEl0ZXJhYmxlRmFjdG9yeSkKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKGJvZHlTb3VyY2VJbmZvcm1hdGlvbik7CiAgICByZXR1cm4ganMuanMoIiIiCiAgICAgICAgICBmdW5jdGlvbiAoI3JlbmFtZWRQYXJhbWV0ZXJzLCAjdHlwZVBhcmFtZXRlcnMpIHsKICAgICAgICAgICAgaWYgKCNuZWVkc1RoaXMpCiAgICAgICAgICAgICAgdmFyICNzZWxmID0gdGhpczsKICAgICAgICAgICAgI3JldHVybkNhbGxJdGVyYWJsZUZhY3Rvcnk7CiAgICAgICAgICB9CiAgICAgICAgICAiIiIsIHsKICAgICAgInJlbmFtZWRQYXJhbWV0ZXJzIjogcmVuYW1lZFBhcmFtZXRlcnMsCiAgICAgICJ0eXBlUGFyYW1ldGVycyI6IHR5cGVQYXJhbWV0ZXJzLAogICAgICAibmVlZHNUaGlzIjogYW5hbHlzaXMuaGFzVGhpcywKICAgICAgInNlbGYiOiBzZWxmTmFtZSwKICAgICAgInJldHVybkNhbGxJdGVyYWJsZUZhY3RvcnkiOiByZXR1cm5DYWxsSXRlcmFibGVGYWN0b3J5LAogICAgfSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKGZ1bmN0aW9uU291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRFcnJvckV4aXQoU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIGhhc0hhbmRsZXJMYWJlbHMgPSB0cnVlOyAvLyBUT0RPKHNyYSk6IEFkZCBzaG9ydCBmb3JtIGVycm9yIGhhbmRsZXIuCiAgICBiZWdpbkxhYmVsKHJldGhyb3dMYWJlbCk7CiAgICBqcy5FeHByZXNzaW9uIHVuY2F1Z2h0RXJyb3JFeHByZXNzaW9uQ2FsbCA9IGpzLmpzKCcjKCMpJywgWwogICAgICB1bmNhdWdodEVycm9yRXhwcmVzc2lvbiwKICAgICAgY3VycmVudEVycm9yCiAgICBdKS53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pOwogICAgYWRkU3RhdGVtZW50KG5ldyBqcy5SZXR1cm4odW5jYXVnaHRFcnJvckV4cHJlc3Npb25DYWxsKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIC8vLyBSZXR1cm5pbmcgZnJvbSBhIHN5bmMqIGZ1bmN0aW9uIHJldHVybnMgYW4gW2VuZE9mSXRlcmF0aW9uXSBtYXJrZXIuCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRTdWNjZXNzRXhpdChTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgaWYgKGFuYWx5c2lzLmhhc0V4cGxpY2l0UmV0dXJucykgewogICAgICBiZWdpbkxhYmVsKGV4aXRMYWJlbCk7CiAgICB9IGVsc2UgewogICAgICBhZGRTdGF0ZW1lbnQobmV3IGpzLkNvbW1lbnQoImltcGxpY2l0IHJldHVybiIpKTsKICAgIH0KICAgIGpzLkV4cHJlc3Npb24gZW5kT2ZJdGVyYXRpb25DYWxsID0KICAgICAgICBqcy5qcygnIygpJywgW2VuZE9mSXRlcmF0aW9uXSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGFkZFN0YXRlbWVudChuZXcganMuUmV0dXJuKGVuZE9mSXRlcmF0aW9uQ2FsbCkKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uPiB2YXJpYWJsZUluaXRpYWxpemF0aW9ucygKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIExpc3Q8anMuVmFyaWFibGVJbml0aWFsaXphdGlvbj4gdmFyaWFibGVzID0gPGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24+W107CiAgICByZXR1cm4gdmFyaWFibGVzOwogIH0KCiAgQG92ZXJyaWRlCiAganMuU3RhdGVtZW50IGF3YWl0U3RhdGVtZW50KAogICAgICBqcy5FeHByZXNzaW9uIHZhbHVlLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgdGhyb3cgcmVwb3J0ZXIuaW50ZXJuYWxFcnJvcigKICAgICAgICBzcGFubmFibGUsICJTeW5jKiBmdW5jdGlvbnMgY2Fubm90IGNvbnRhaW4gYXdhaXQgc3RhdGVtZW50cy4iKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaW5pdGlhbGl6ZU5hbWVzKCkgewogICAgaXRlcmFibGVGYWN0b3J5VHlwZUFyZ3VtZW50cyA9CiAgICAgICAgcHJvY2Vzc1R5cGVBcmd1bWVudHMoaXRlcmFibGVGYWN0b3J5VHlwZUFyZ3VtZW50cyk7CiAgfQp9CgpjbGFzcyBBc3luY1N0YXJSZXdyaXRlciBleHRlbmRzIEFzeW5jUmV3cml0ZXJCYXNlIHsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0FzeW5jU3RhciA9PiB0cnVlOwoKICAvLy8gVGhlIHN0YWNrIG9mIGxhYmVscyBvZiBmaW5hbGx5IGJsb2NrcyB0byBhc3NpZ24gdG8gW25leHRdIGlmIHRoZQogIC8vLyBhc3luYyogW1N0cmVhbVN1YnNjcmlwdGlvbl0gd2FzIGNhbmNlbGVkIGR1cmluZyBhIHlpZWxkLgogIGpzLlZhcmlhYmxlVXNlIGdldCBuZXh0V2hlbkNhbmNlbGVkIHsKICAgIHJldHVybiBuZXcganMuVmFyaWFibGVVc2UobmV4dFdoZW5DYW5jZWxlZE5hbWUpOwogIH0KCiAgU3RyaW5nIG5leHRXaGVuQ2FuY2VsZWROYW1lOwoKICAvLy8gVGhlIFN0cmVhbUNvbnRyb2xsZXIgdGhhdCBjb250cm9scyBhbiBhc3luYyogZnVuY3Rpb24uCiAgU3RyaW5nIGNvbnRyb2xsZXJOYW1lOwogIGpzLlZhcmlhYmxlVXNlIGdldCBjb250cm9sbGVyID0+IG5ldyBqcy5WYXJpYWJsZVVzZShjb250cm9sbGVyTmFtZSk7CgogIC8vLyBUaGUgZnVuY3Rpb24gY2FsbGVkIGJ5IGFuIGFzeW5jKiBmdW5jdGlvbiB0byBzaW11bGF0ZSBhbiBhd2FpdCwgeWllbGQgb3IKICAvLy8geWllbGQqLgogIC8vLwogIC8vLyBGb3IgYW4gYXdhaXQveWllbGQveWllbGQqIGl0IGlzIGNhbGxlZCB3aXRoOgogIC8vLwogIC8vLyAtIFRoZSB2YWx1ZSB0byBhd2FpdC95aWVsZEV4cHJlc3Npb24odmFsdWUgdG8geWllbGQpLwogIC8vLyB5aWVsZFN0YXJFeHByZXNzaW9uKHN0cmVhbSB0byB5aWVsZCkKICAvLy8gLSBUaGUgYm9keSBmdW5jdGlvbiBbYm9keU5hbWVdCiAgLy8vIC0gVGhlIGNvbnRyb2xsZXIgb2JqZWN0IFtjb250cm9sbGVyTmFtZV0KICAvLy8KICAvLy8gRm9yIGEgcmV0dXJuIGl0IGlzIGNhbGxlZCB3aXRoOgogIC8vLwogIC8vLyAtIG51bGwKICAvLy8gLSBudWxsCiAgLy8vIC0gVGhlIFtjb250cm9sbGVyTmFtZV0KICAvLy8gLSBudWxsLgogIGZpbmFsIGpzLkV4cHJlc3Npb24gYXN5bmNTdGFySGVscGVyOwoKICAvLy8gQ29uc3RydWN0b3IgdXNlZCB0byBpbml0aWFsaXplIHRoZSBbY29udHJvbGxlck5hbWVdIHZhcmlhYmxlLgogIC8vLwogIC8vLyBTcGVjaWZpYyB0byBhc3luYyogbWV0aG9kcy4KICBmaW5hbCBqcy5FeHByZXNzaW9uIG5ld0NvbnRyb2xsZXI7CiAgTGlzdDxqcy5FeHByZXNzaW9uPiBuZXdDb250cm9sbGVyVHlwZUFyZ3VtZW50czsKCiAgLy8vIFVzZWQgdG8gZ2V0IHRoZSBgU3RyZWFtYCBvdXQgb2YgdGhlIFtjb250cm9sbGVyTmFtZV0gdmFyaWFibGUuCiAgZmluYWwganMuRXhwcmVzc2lvbiBzdHJlYW1PZkNvbnRyb2xsZXI7CgogIC8vLyBBIEpTIEV4cHJlc3Npb24gdGhhdCBjcmVhdGVzIGEgbWFya2VyIGluZGljYXRpbmcgYSAneWllbGQnIHN0YXRlbWVudC4KICAvLy8KICAvLy8gQ2FsbGVkIHdpdGggdGhlIHZhbHVlIHRvIHlpZWxkLgogIGZpbmFsIGpzLkV4cHJlc3Npb24geWllbGRFeHByZXNzaW9uOwoKICAvLy8gQSBKUyBFeHByZXNzaW9uIHRoYXQgY3JlYXRlcyBhIG1hcmtlciBpbmRpY2F0aW9uIGEgJ3lpZWxkKicgc3RhdGVtZW50LgogIC8vLwogIC8vLyBDYWxsZWQgd2l0aCB0aGUgc3RyZWFtIHRvIHlpZWxkIGZyb20uCiAgZmluYWwganMuRXhwcmVzc2lvbiB5aWVsZFN0YXJFeHByZXNzaW9uOwoKICBmaW5hbCBqcy5FeHByZXNzaW9uIHdyYXBCb2R5OwoKICBBc3luY1N0YXJSZXdyaXRlcihEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIsIFNwYW5uYWJsZSBzcGFubmFibGUsCiAgICAgIHt0aGlzLmFzeW5jU3RhckhlbHBlciwKICAgICAgdGhpcy5zdHJlYW1PZkNvbnRyb2xsZXIsCiAgICAgIHRoaXMubmV3Q29udHJvbGxlciwKICAgICAgdGhpcy5uZXdDb250cm9sbGVyVHlwZUFyZ3VtZW50cywKICAgICAgdGhpcy55aWVsZEV4cHJlc3Npb24sCiAgICAgIHRoaXMueWllbGRTdGFyRXhwcmVzc2lvbiwKICAgICAgdGhpcy53cmFwQm9keSwKICAgICAgU3RyaW5nIHNhZmVWYXJpYWJsZU5hbWUoU3RyaW5nIHByb3Bvc2VkTmFtZSksCiAgICAgIGpzLk5hbWUgYm9keU5hbWV9KQogICAgICA6IHN1cGVyKHJlcG9ydGVyLCBzcGFubmFibGUsIHNhZmVWYXJpYWJsZU5hbWUsIGJvZHlOYW1lKTsKCiAgLy8vIFRyYW5zbGF0ZXMgYSB5aWVsZC95aWVsZCogaW4gYW4gYXN5bmMqIGZ1bmN0aW9uLgogIC8vLwogIC8vLyB5aWVsZC95aWVsZCogaW4gYW4gYXN5bmMqIGZ1bmN0aW9uIGlzIHRyYW5zbGF0ZWQgbXVjaCBsaWtlIHRoZSBgYXdhaXRgIGlzCiAgLy8vIHRyYW5zbGF0ZWQgaW4gW3Zpc2l0QXdhaXRdLCBvbmx5IHRoZSBvYmplY3QgaXMgd3JhcHBlZCBpbiBhCiAgLy8vIFt5aWVsZEV4cHJlc3Npb25dL1t5aWVsZFN0YXJFeHByZXNzaW9uXSB0byBsZXQgW2FzeW5jU3RhckhlbHBlcl0KICAvLy8gZGlzdGluZ3Vpc2ggdGhlbS4KICAvLy8gQWxzbyBbbmV4dFdoZW5DYW5jZWxlZF0gaXMgc2V0IHVwIHRvIGNvbnRhaW4gdGhlIGZpbmFsbHkgYmxvY2tzIHRoYXQKICAvLy8gbXVzdCBiZSBydW4gaW4gY2FzZSB0aGUgc3RyZWFtIHdhcyBjYW5jZWxlZC4KICBAb3ZlcnJpZGUKICB2b2lkIGFkZFlpZWxkKGpzLkRhcnRZaWVsZCBub2RlLCBqcy5FeHByZXNzaW9uIGV4cHJlc3Npb24sCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICAvLyBGaW5kIGFsbCB0aGUgZmluYWxseSBibG9ja3MgdGhhdCBzaG91bGQgYmUgcGVyZm9ybWVkIGlmIHRoZSBzdHJlYW0gaXMKICAgIC8vIGNhbmNlbGVkIGR1cmluZyB0aGUgeWllbGQuCiAgICAvLyBBdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjayBpcyB0aGUgcmV0dXJuIGxhYmVsLgogICAgTGlzdDxpbnQ+IGVuY2xvc2luZ0ZpbmFsbHlMYWJlbHMgPSA8aW50PltleGl0TGFiZWxdOwogICAgZW5jbG9zaW5nRmluYWxseUxhYmVscy5hZGRBbGwoanVtcFRhcmdldHMKICAgICAgICAud2hlcmUoKGpzLk5vZGUgbm9kZSkgPT4gZmluYWxseUxhYmVsc1tub2RlXSAhPSBudWxsKQogICAgICAgIC5tYXAoKGpzLk5vZGUgbm9kZSkgPT4gZmluYWxseUxhYmVsc1tub2RlXSkpOwogICAgYWRkU3RhdGVtZW50KGpzLmpzLnN0YXRlbWVudCgiIyA9ICM7IiwgWwogICAgICBuZXh0V2hlbkNhbmNlbGVkLAogICAgICBuZXcganMuQXJyYXlJbml0aWFsaXplcihlbmNsb3NpbmdGaW5hbGx5TGFiZWxzLm1hcChqcy5udW1iZXIpLnRvTGlzdCgpKQogICAgXSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICBqcy5FeHByZXNzaW9uIHlpZWxkRXhwcmVzc2lvbkNhbGwgPSBqcy5qcygiI3lpZWxkRXhwcmVzc2lvbigjZXhwcmVzc2lvbikiLCB7CiAgICAgICJ5aWVsZEV4cHJlc3Npb24iOiBub2RlLmhhc1N0YXIgPyB5aWVsZFN0YXJFeHByZXNzaW9uIDogeWllbGRFeHByZXNzaW9uLAogICAgICAiZXhwcmVzc2lvbiI6IGV4cHJlc3Npb24sCiAgICB9KS53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pOwogICAganMuRXhwcmVzc2lvbiBhc3luY1N0YXJIZWxwZXJDYWxsID0ganMKICAgICAgICAuanMoIiNhc3luY1N0YXJIZWxwZXIoI3lpZWxkRXhwcmVzc2lvbkNhbGwsICNib2R5TmFtZSwgI2NvbnRyb2xsZXIpIiwgewogICAgICAiYXN5bmNTdGFySGVscGVyIjogYXN5bmNTdGFySGVscGVyLAogICAgICAieWllbGRFeHByZXNzaW9uQ2FsbCI6IHlpZWxkRXhwcmVzc2lvbkNhbGwsCiAgICAgICJib2R5TmFtZSI6IGJvZHlOYW1lLAogICAgICAiY29udHJvbGxlciI6IGNvbnRyb2xsZXJOYW1lLAogICAgfSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGFkZFN0YXRlbWVudChuZXcganMuUmV0dXJuKGFzeW5jU3RhckhlbHBlckNhbGwpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAganMuRnVuIGZpbmlzaEZ1bmN0aW9uKAogICAgICBMaXN0PGpzLlBhcmFtZXRlcj4gcGFyYW1ldGVycywKICAgICAgTGlzdDxqcy5QYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzLAogICAgICBqcy5TdGF0ZW1lbnQgcmV3cml0dGVuQm9keSwKICAgICAganMuVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QgdmFyaWFibGVEZWNsYXJhdGlvbnMsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIGZ1bmN0aW9uU291cmNlSW5mb3JtYXRpb24sCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIGJvZHlTb3VyY2VJbmZvcm1hdGlvbikgewogICAganMuRXhwcmVzc2lvbiB1cGRhdGVOZXh0ID0ganMuanMoIiNuZXh0ID0gI25leHRXaGVuQ2FuY2VsZWQiLCB7CiAgICAgICJuZXh0IjogbmV4dCwKICAgICAgIm5leHRXaGVuQ2FuY2VsZWQiOiBuZXh0V2hlbkNhbmNlbGVkLAogICAgfSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKGJvZHlTb3VyY2VJbmZvcm1hdGlvbik7CiAgICBqcy5FeHByZXNzaW9uIGNhbGxQb3AgPSBqcy5qcygiI25leHQucG9wKCkiLCB7CiAgICAgICJuZXh0IjogbmV4dCwKICAgIH0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihib2R5U291cmNlSW5mb3JtYXRpb24pOwogICAganMuRXhwcmVzc2lvbiBnb3RvQ2FuY2VsbGVkID0ganMuanMoIiNnb3RvID0gI2NhbGxQb3AiLCB7CiAgICAgICJnb3RvIjogZ290bywKICAgICAgImNhbGxQb3AiOiBjYWxsUG9wLAogICAgfSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKGJvZHlTb3VyY2VJbmZvcm1hdGlvbik7CiAgICBqcy5FeHByZXNzaW9uIHVwZGF0ZUVycm9yID0ganMuanMoIiNjdXJyZW50RXJyb3IgPSAjcmVzdWx0IiwgewogICAgICAiY3VycmVudEVycm9yIjogY3VycmVudEVycm9yLAogICAgICAicmVzdWx0IjogcmVzdWx0TmFtZSwKICAgIH0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihib2R5U291cmNlSW5mb3JtYXRpb24pOwogICAganMuRXhwcmVzc2lvbiBnb3RvRXJyb3IgPSBqcy5qcygiI2dvdG8gPSAjaGFuZGxlciIsIHsKICAgICAgImdvdG8iOiBnb3RvLAogICAgICAiaGFuZGxlciI6IGhhbmRsZXIsCiAgICB9KS53aXRoU291cmNlSW5mb3JtYXRpb24oYm9keVNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGpzLlN0YXRlbWVudCBicmVha1N0YXRlbWVudCA9CiAgICAgICAgbmV3IGpzLkJyZWFrKG51bGwpLndpdGhTb3VyY2VJbmZvcm1hdGlvbihib2R5U291cmNlSW5mb3JtYXRpb24pOwogICAganMuU3RhdGVtZW50IHN3aXRjaENhc2UgPSBqcy5qcy5zdGF0ZW1lbnQoIiIiCiAgICAgICAgc3dpdGNoICgjZXJyb3JDb2RlKSB7CiAgICAgICAgICBjYXNlICNTVFJFQU1fV0FTX0NBTkNFTEVEOgogICAgICAgICAgICAjdXBkYXRlTmV4dDsKICAgICAgICAgICAgI2dvdG9DYW5jZWxsZWQ7CiAgICAgICAgICAgICNicmVhazsKICAgICAgICAgIGNhc2UgI0VSUk9SOgogICAgICAgICAgICAjdXBkYXRlRXJyb3I7CiAgICAgICAgICAgICNnb3RvRXJyb3I7CiAgICAgICAgfSIiIiwgewogICAgICAiZXJyb3JDb2RlIjogZXJyb3JDb2RlTmFtZSwKICAgICAgIlNUUkVBTV9XQVNfQ0FOQ0VMRUQiOiBqcy5udW1iZXIoZXJyb3JfY29kZXMuU1RSRUFNX1dBU19DQU5DRUxFRCksCiAgICAgICJ1cGRhdGVOZXh0IjogdXBkYXRlTmV4dCwKICAgICAgImdvdG9DYW5jZWxsZWQiOiBnb3RvQ2FuY2VsbGVkLAogICAgICAiYnJlYWsiOiBicmVha1N0YXRlbWVudCwKICAgICAgIkVSUk9SIjoganMubnVtYmVyKGVycm9yX2NvZGVzLkVSUk9SKSwKICAgICAgInVwZGF0ZUVycm9yIjogdXBkYXRlRXJyb3IsCiAgICAgICJnb3RvRXJyb3IiOiBnb3RvRXJyb3IsCiAgICB9KS53aXRoU291cmNlSW5mb3JtYXRpb24oYm9keVNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGpzLlN0YXRlbWVudCBpZkVycm9yID0ganMuanMuc3RhdGVtZW50KCIiIgogICAgICAgIGlmICgjZXJyb3JDb2RlID09PSAjRVJST1IpIHsKICAgICAgICAgICN1cGRhdGVFcnJvcjsKICAgICAgICAgICNnb3RvRXJyb3I7CiAgICAgICAgfSIiIiwgewogICAgICAiZXJyb3JDb2RlIjogZXJyb3JDb2RlTmFtZSwKICAgICAgIkVSUk9SIjoganMubnVtYmVyKGVycm9yX2NvZGVzLkVSUk9SKSwKICAgICAgInVwZGF0ZUVycm9yIjogdXBkYXRlRXJyb3IsCiAgICAgICJnb3RvRXJyb3IiOiBnb3RvRXJyb3IsCiAgICB9KS53aXRoU291cmNlSW5mb3JtYXRpb24oYm9keVNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGpzLlN0YXRlbWVudCBpZkhhc1lpZWxkID0ganMuanMuc3RhdGVtZW50KCIiIgogICAgICAgIGlmICgjaGFzWWllbGQpIHsKICAgICAgICAgICNzd2l0Y2hDYXNlCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICNpZkVycm9yOwogICAgICAgIH0KICAgICIiIiwgewogICAgICAiaGFzWWllbGQiOiBhbmFseXNpcy5oYXNZaWVsZCwKICAgICAgInN3aXRjaENhc2UiOiBzd2l0Y2hDYXNlLAogICAgICAiaWZFcnJvciI6IGlmRXJyb3IsCiAgICB9KS53aXRoU291cmNlSW5mb3JtYXRpb24oYm9keVNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGpzLkZ1biBpbm5lckZ1bmN0aW9uID0ganMuanMoIiIiCiAgICAgICAgZnVuY3Rpb24gKCNlcnJvckNvZGUsICNyZXN1bHQpIHsKICAgICAgICAgICNpZkhhc1lpZWxkOwogICAgICAgICAgI3Jld3JpdHRlbkJvZHk7CiAgICAgICAgfSIiIiwgewogICAgICAiZXJyb3JDb2RlIjogZXJyb3JDb2RlTmFtZSwKICAgICAgInJlc3VsdCI6IHJlc3VsdE5hbWUsCiAgICAgICJpZkhhc1lpZWxkIjogaWZIYXNZaWVsZCwKICAgICAgInJld3JpdHRlbkJvZHkiOiByZXdyaXR0ZW5Cb2R5LAogICAgfSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKGZ1bmN0aW9uU291cmNlSW5mb3JtYXRpb24pOwogICAganMuRXhwcmVzc2lvbiB3cmFwQm9keUNhbGwgPSBqcy5qcygiI3dyYXBCb2R5KCNpbm5lckZ1bmN0aW9uKSIsIHsKICAgICAgIndyYXBCb2R5Ijogd3JhcEJvZHksCiAgICAgICJpbm5lckZ1bmN0aW9uIjogaW5uZXJGdW5jdGlvbiwKICAgIH0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihib2R5U291cmNlSW5mb3JtYXRpb24pOwogICAganMuU3RhdGVtZW50IGRlY2xhcmVCb2R5TmFtZSA9CiAgICAgICAganMuanMuc3RhdGVtZW50KCJ2YXIgI2JvZHlOYW1lID0gI3dyYXBCb2R5Q2FsbDsiLCB7CiAgICAgICJib2R5TmFtZSI6IGJvZHlOYW1lLAogICAgICAid3JhcEJvZHlDYWxsIjogd3JhcEJvZHlDYWxsLAogICAgfSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKGJvZHlTb3VyY2VJbmZvcm1hdGlvbik7CiAgICBqcy5FeHByZXNzaW9uIHN0cmVhbU9mQ29udHJvbGxlckNhbGwgPQogICAgICAgIGpzLmpzKCIjc3RyZWFtT2ZDb250cm9sbGVyKCNjb250cm9sbGVyKSIsIHsKICAgICAgInN0cmVhbU9mQ29udHJvbGxlciI6IHN0cmVhbU9mQ29udHJvbGxlciwKICAgICAgImNvbnRyb2xsZXIiOiBjb250cm9sbGVyTmFtZSwKICAgIH0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihib2R5U291cmNlSW5mb3JtYXRpb24pOwogICAganMuUmV0dXJuIHJldHVyblN0cmVhbU9mQ29udHJvbGxlckNhbGwgPQogICAgICAgIG5ldyBqcy5SZXR1cm4oc3RyZWFtT2ZDb250cm9sbGVyQ2FsbCkKICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihib2R5U291cmNlSW5mb3JtYXRpb24pOwogICAgcmV0dXJuIGpzLmpzKCIiIgogICAgICAgIGZ1bmN0aW9uICgjcGFyYW1ldGVycywgI3R5cGVQYXJhbWV0ZXJzKSB7CiAgICAgICAgICAjZGVjbGFyZUJvZHlOYW1lOwogICAgICAgICAgI3ZhcmlhYmxlRGVjbGFyYXRpb25zOwogICAgICAgICAgI3JldHVyblN0cmVhbU9mQ29udHJvbGxlckNhbGw7CiAgICAgICAgfSIiIiwgewogICAgICAicGFyYW1ldGVycyI6IHBhcmFtZXRlcnMsCiAgICAgICJ0eXBlUGFyYW1ldGVycyI6IHR5cGVQYXJhbWV0ZXJzLAogICAgICAiZGVjbGFyZUJvZHlOYW1lIjogZGVjbGFyZUJvZHlOYW1lLAogICAgICAidmFyaWFibGVEZWNsYXJhdGlvbnMiOiB2YXJpYWJsZURlY2xhcmF0aW9ucywKICAgICAgInJldHVyblN0cmVhbU9mQ29udHJvbGxlckNhbGwiOiByZXR1cm5TdHJlYW1PZkNvbnRyb2xsZXJDYWxsLAogICAgfSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKGZ1bmN0aW9uU291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRFcnJvckV4aXQoU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIGhhc0hhbmRsZXJMYWJlbHMgPSB0cnVlOwogICAgYmVnaW5MYWJlbChyZXRocm93TGFiZWwpOwogICAganMuRXhwcmVzc2lvbiBhc3luY0hlbHBlckNhbGwgPQogICAgICAgIGpzLmpzKCIjYXN5bmNIZWxwZXIoI2N1cnJlbnRFcnJvciwgI2Vycm9yQ29kZSwgI2NvbnRyb2xsZXIpIiwgewogICAgICAiYXN5bmNIZWxwZXIiOiBhc3luY1N0YXJIZWxwZXIsCiAgICAgICJlcnJvckNvZGUiOiBqcy5udW1iZXIoZXJyb3JfY29kZXMuRVJST1IpLAogICAgICAiY3VycmVudEVycm9yIjogY3VycmVudEVycm9yLAogICAgICAiY29udHJvbGxlciI6IGNvbnRyb2xsZXJOYW1lCiAgICB9KS53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pOwogICAgYWRkU3RhdGVtZW50KG5ldyBqcy5SZXR1cm4oYXN5bmNIZWxwZXJDYWxsKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIC8vLyBSZXR1cm5pbmcgZnJvbSBhbiBhc3luYyogZnVuY3Rpb24gY2FsbHMgdGhlIFtzdHJlYW1IZWxwZXJdIHdpdGggYW4KICAvLy8gW2VuZE9mSXRlcmF0aW9uXSBtYXJrZXIuCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRTdWNjZXNzRXhpdChTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgYmVnaW5MYWJlbChleGl0TGFiZWwpOwoKICAgIGpzLkV4cHJlc3Npb24gc3RyZWFtSGVscGVyQ2FsbCA9CiAgICAgICAganMuanMoIiNzdHJlYW1IZWxwZXIobnVsbCwgI3N1Y2Nlc3NDb2RlLCAjY29udHJvbGxlcikiLCB7CiAgICAgICJzdHJlYW1IZWxwZXIiOiBhc3luY1N0YXJIZWxwZXIsCiAgICAgICJzdWNjZXNzQ29kZSI6IGpzLm51bWJlcihlcnJvcl9jb2Rlcy5TVUNDRVNTKSwKICAgICAgImNvbnRyb2xsZXIiOiBjb250cm9sbGVyTmFtZQogICAgfSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGFkZFN0YXRlbWVudChuZXcganMuUmV0dXJuKHN0cmVhbUhlbHBlckNhbGwpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8anMuVmFyaWFibGVJbml0aWFsaXphdGlvbj4gdmFyaWFibGVJbml0aWFsaXphdGlvbnMoCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBMaXN0PGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24+IHZhcmlhYmxlcyA9IDxqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uPltdOwogICAgdmFyaWFibGVzLmFkZChfbWFrZVZhcmlhYmxlSW5pdGlhbGl6ZXIoCiAgICAgICAgY29udHJvbGxlciwKICAgICAgICBqcy5qcygnIygjLCAjKScsIFsKICAgICAgICAgIG5ld0NvbnRyb2xsZXIsCiAgICAgICAgICBib2R5TmFtZSwKICAgICAgICAgIG5ld0NvbnRyb2xsZXJUeXBlQXJndW1lbnRzCiAgICAgICAgXSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSwKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgaWYgKGFuYWx5c2lzLmhhc1lpZWxkKSB7CiAgICAgIHZhcmlhYmxlcy5hZGQoCiAgICAgICAgICBfbWFrZVZhcmlhYmxlSW5pdGlhbGl6ZXIobmV4dFdoZW5DYW5jZWxlZCwgbnVsbCwgc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICAgIHJldHVybiB2YXJpYWJsZXM7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGluaXRpYWxpemVOYW1lcygpIHsKICAgIGNvbnRyb2xsZXJOYW1lID0gZnJlc2hOYW1lKCJjb250cm9sbGVyIik7CiAgICBuZXh0V2hlbkNhbmNlbGVkTmFtZSA9IGZyZXNoTmFtZSgibmV4dFdoZW5DYW5jZWxlZCIpOwogICAgbmV3Q29udHJvbGxlclR5cGVBcmd1bWVudHMgPQogICAgICAgIHByb2Nlc3NUeXBlQXJndW1lbnRzKG5ld0NvbnRyb2xsZXJUeXBlQXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIGpzLlN0YXRlbWVudCBhd2FpdFN0YXRlbWVudCgKICAgICAganMuRXhwcmVzc2lvbiB2YWx1ZSwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIGpzLkV4cHJlc3Npb24gYXN5bmNIZWxwZXJDYWxsID0KICAgICAgICBqcy5qcygiI2FzeW5jSGVscGVyKCN2YWx1ZSwgI2JvZHlOYW1lLCAjY29udHJvbGxlcikiLCB7CiAgICAgICJhc3luY0hlbHBlciI6IGFzeW5jU3RhckhlbHBlciwKICAgICAgInZhbHVlIjogdmFsdWUsCiAgICAgICJib2R5TmFtZSI6IGJvZHlOYW1lLAogICAgICAiY29udHJvbGxlciI6IGNvbnRyb2xsZXJOYW1lCiAgICB9KS53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pOwogICAgcmV0dXJuIG5ldyBqcy5SZXR1cm4oYXN5bmNIZWxwZXJDYWxsKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pOwogIH0KfQoKLy8vIEZpbmRzIG91dAovLy8KLy8vIC0gd2hpY2ggZXhwcmVzc2lvbnMgaGF2ZSB5aWVsZCBvciBhd2FpdCBuZXN0ZWQgaW4gdGhlbS4KLy8vIC0gdGFyZ2V0cyBvZiBqdW1wcwovLy8gLSBhIHNldCBvZiB1c2VkIG5hbWVzLgovLy8gLSBpZiBhbnkgW1RoaXNdLWV4cHJlc3Npb25zIGFyZSB1c2VkLgpjbGFzcyBQcmVUcmFuc2xhdGlvbkFuYWx5c2lzIGV4dGVuZHMganMuTm9kZVZpc2l0b3I8Ym9vbD4gewogIFNldDxqcy5Ob2RlPiBoYXNBd2FpdE9yWWllbGQgPSBuZXcgU2V0PGpzLk5vZGU+KCk7CgogIE1hcDxqcy5Ob2RlLCBqcy5Ob2RlPiB0YXJnZXRzID0gbmV3IE1hcDxqcy5Ob2RlLCBqcy5Ob2RlPigpOwogIExpc3Q8anMuTm9kZT4gbG9vcHNBbmRTd2l0Y2hlcyA9IDxqcy5Ob2RlPltdOwogIExpc3Q8anMuTGFiZWxlZFN0YXRlbWVudD4gbGFiZWxsZWRTdGF0ZW1lbnRzID0gPGpzLkxhYmVsZWRTdGF0ZW1lbnQ+W107CiAgU2V0PFN0cmluZz4gdXNlZE5hbWVzID0gbmV3IFNldDxTdHJpbmc+KCk7CgogIGJvb2wgaGFzRXhwbGljaXRSZXR1cm5zID0gZmFsc2U7CgogIGJvb2wgaGFzVGhpcyA9IGZhbHNlOwoKICBib29sIGhhc1lpZWxkID0gZmFsc2U7CgogIGJvb2wgaGFzRmluYWxseSA9IGZhbHNlOwoKICAvLyBUaGUgZnVuY3Rpb24gY3VycmVudGx5IGJlaW5nIGFuYWx5emVkLgogIGpzLkZ1biBjdXJyZW50RnVuY3Rpb247CgogIC8vIEZvciBlcnJvciBtZXNzYWdlcy4KICBmaW5hbCBGdW5jdGlvbiB1bnN1cHBvcnRlZDsKCiAgUHJlVHJhbnNsYXRpb25BbmFseXNpcyh2b2lkIHRoaXMudW5zdXBwb3J0ZWQoanMuTm9kZSBub2RlKSk7CgogIGJvb2wgdmlzaXQoanMuTm9kZSBub2RlKSB7CiAgICBib29sIGNvbnRhaW5zQXdhaXQgPSBub2RlLmFjY2VwdCh0aGlzKTsKICAgIGlmIChjb250YWluc0F3YWl0KSB7CiAgICAgIGhhc0F3YWl0T3JZaWVsZC5hZGQobm9kZSk7CiAgICB9CiAgICByZXR1cm4gY29udGFpbnNBd2FpdDsKICB9CgogIGFuYWx5emUoanMuRnVuIG5vZGUpIHsKICAgIGN1cnJlbnRGdW5jdGlvbiA9IG5vZGU7CiAgICBub2RlLnBhcmFtcy5mb3JFYWNoKHZpc2l0KTsKICAgIHZpc2l0KG5vZGUuYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0QWNjZXNzKGpzLlByb3BlcnR5QWNjZXNzIG5vZGUpIHsKICAgIGJvb2wgcmVjZWl2ZXIgPSB2aXNpdChub2RlLnJlY2VpdmVyKTsKICAgIGJvb2wgc2VsZWN0b3IgPSB2aXNpdChub2RlLnNlbGVjdG9yKTsKICAgIHJldHVybiByZWNlaXZlciB8fCBzZWxlY3RvcjsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRBcnJheUhvbGUoanMuQXJyYXlIb2xlIG5vZGUpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRBcnJheUluaXRpYWxpemVyKGpzLkFycmF5SW5pdGlhbGl6ZXIgbm9kZSkgewogICAgYm9vbCBjb250YWluc0F3YWl0ID0gZmFsc2U7CiAgICBmb3IgKGpzLkV4cHJlc3Npb24gZWxlbWVudCBpbiBub2RlLmVsZW1lbnRzKSB7CiAgICAgIGlmICh2aXNpdChlbGVtZW50KSkgY29udGFpbnNBd2FpdCA9IHRydWU7CiAgICB9CiAgICByZXR1cm4gY29udGFpbnNBd2FpdDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRBc3NpZ25tZW50KGpzLkFzc2lnbm1lbnQgbm9kZSkgewogICAgYm9vbCBsZWZ0SGFuZFNpZGUgPSB2aXNpdChub2RlLmxlZnRIYW5kU2lkZSk7CiAgICBib29sIHZhbHVlID0gKG5vZGUudmFsdWUgPT0gbnVsbCkgPyBmYWxzZSA6IHZpc2l0KG5vZGUudmFsdWUpOwogICAgcmV0dXJuIGxlZnRIYW5kU2lkZSB8fCB2YWx1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRBd2FpdChqcy5Bd2FpdCBub2RlKSB7CiAgICB2aXNpdChub2RlLmV4cHJlc3Npb24pOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0QmluYXJ5KGpzLkJpbmFyeSBub2RlKSB7CiAgICBib29sIGxlZnQgPSB2aXNpdChub2RlLmxlZnQpOwogICAgYm9vbCByaWdodCA9IHZpc2l0KG5vZGUucmlnaHQpOwogICAgcmV0dXJuIGxlZnQgfHwgcmlnaHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0QmxvY2soanMuQmxvY2sgbm9kZSkgewogICAgYm9vbCBjb250YWluc0F3YWl0ID0gZmFsc2U7CiAgICBmb3IgKGpzLlN0YXRlbWVudCBzdGF0ZW1lbnQgaW4gbm9kZS5zdGF0ZW1lbnRzKSB7CiAgICAgIGlmICh2aXNpdChzdGF0ZW1lbnQpKSBjb250YWluc0F3YWl0ID0gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBjb250YWluc0F3YWl0OwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEJyZWFrKGpzLkJyZWFrIG5vZGUpIHsKICAgIGlmIChub2RlLnRhcmdldExhYmVsICE9IG51bGwpIHsKICAgICAgdGFyZ2V0c1tub2RlXSA9CiAgICAgICAgICBsYWJlbGxlZFN0YXRlbWVudHMubGFzdFdoZXJlKChqcy5MYWJlbGVkU3RhdGVtZW50IHN0YXRlbWVudCkgewogICAgICAgIHJldHVybiBzdGF0ZW1lbnQubGFiZWwgPT0gbm9kZS50YXJnZXRMYWJlbDsKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICB0YXJnZXRzW25vZGVdID0gbG9vcHNBbmRTd2l0Y2hlcy5sYXN0OwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdENhbGwoanMuQ2FsbCBub2RlKSB7CiAgICBib29sIGNvbnRhaW5zQXdhaXQgPSB2aXNpdChub2RlLnRhcmdldCk7CiAgICBmb3IgKGpzLkV4cHJlc3Npb24gYXJndW1lbnQgaW4gbm9kZS5hcmd1bWVudHMpIHsKICAgICAgaWYgKHZpc2l0KGFyZ3VtZW50KSkgY29udGFpbnNBd2FpdCA9IHRydWU7CiAgICB9CiAgICByZXR1cm4gY29udGFpbnNBd2FpdDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRDYXNlKGpzLkNhc2Ugbm9kZSkgewogICAgYm9vbCBleHByZXNzaW9uID0gdmlzaXQobm9kZS5leHByZXNzaW9uKTsKICAgIGJvb2wgYm9keSA9IHZpc2l0KG5vZGUuYm9keSk7CiAgICByZXR1cm4gZXhwcmVzc2lvbiB8fCBib2R5OwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdENhdGNoKGpzLkNhdGNoIG5vZGUpIHsKICAgIGJvb2wgZGVjbGFyYXRpb24gPSB2aXNpdChub2RlLmRlY2xhcmF0aW9uKTsKICAgIGJvb2wgYm9keSA9IHZpc2l0KG5vZGUuYm9keSk7CiAgICByZXR1cm4gZGVjbGFyYXRpb24gfHwgYm9keTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRDb21tZW50KGpzLkNvbW1lbnQgbm9kZSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdENvbmRpdGlvbmFsKGpzLkNvbmRpdGlvbmFsIG5vZGUpIHsKICAgIGJvb2wgY29uZGl0aW9uID0gdmlzaXQobm9kZS5jb25kaXRpb24pOwogICAgYm9vbCB0aGVuID0gdmlzaXQobm9kZS50aGVuKTsKICAgIGJvb2wgb3RoZXJ3aXNlID0gdmlzaXQobm9kZS5vdGhlcndpc2UpOwogICAgcmV0dXJuIGNvbmRpdGlvbiB8fCB0aGVuIHx8IG90aGVyd2lzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRDb250aW51ZShqcy5Db250aW51ZSBub2RlKSB7CiAgICBpZiAobm9kZS50YXJnZXRMYWJlbCAhPSBudWxsKSB7CiAgICAgIGpzLkxhYmVsZWRTdGF0ZW1lbnQgdGFyZ2V0TGFiZWwgPSBsYWJlbGxlZFN0YXRlbWVudHMubGFzdFdoZXJlKAogICAgICAgICAgKGpzLkxhYmVsZWRTdGF0ZW1lbnQgc3RtKSA9PiBzdG0ubGFiZWwgPT0gbm9kZS50YXJnZXRMYWJlbCk7CiAgICAgIGpzLkxvb3AgdGFyZ2V0U3RhdGVtZW50ID0gdGFyZ2V0TGFiZWwuYm9keTsKICAgICAgdGFyZ2V0c1tub2RlXSA9IHRhcmdldFN0YXRlbWVudDsKICAgIH0gZWxzZSB7CiAgICAgIHRhcmdldHNbbm9kZV0gPQogICAgICAgICAgbG9vcHNBbmRTd2l0Y2hlcy5sYXN0V2hlcmUoKGpzLk5vZGUgbm9kZSkgPT4gbm9kZSBpcyEganMuU3dpdGNoKTsKICAgIH0KICAgIGFzc2VydCgoKSB7CiAgICAgIGpzLk5vZGUgdGFyZ2V0ID0gdGFyZ2V0c1tub2RlXTsKICAgICAgcmV0dXJuIHRhcmdldCBpcyBqcy5Mb29wIHx8CiAgICAgICAgICAodGFyZ2V0IGlzIGpzLkxhYmVsZWRTdGF0ZW1lbnQgJiYgdGFyZ2V0LmJvZHkgaXMganMuTG9vcCk7CiAgICB9KCkpOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdERlZmF1bHQoanMuRGVmYXVsdCBub2RlKSB7CiAgICByZXR1cm4gdmlzaXQobm9kZS5ib2R5KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXREbyhqcy5EbyBub2RlKSB7CiAgICBsb29wc0FuZFN3aXRjaGVzLmFkZChub2RlKTsKICAgIGJvb2wgYm9keSA9IHZpc2l0KG5vZGUuYm9keSk7CiAgICBib29sIGNvbmRpdGlvbiA9IHZpc2l0KG5vZGUuY29uZGl0aW9uKTsKICAgIGxvb3BzQW5kU3dpdGNoZXMucmVtb3ZlTGFzdCgpOwogICAgcmV0dXJuIGJvZHkgfHwgY29uZGl0aW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEVtcHR5U3RhdGVtZW50KGpzLkVtcHR5U3RhdGVtZW50IG5vZGUpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRFeHByZXNzaW9uU3RhdGVtZW50KGpzLkV4cHJlc3Npb25TdGF0ZW1lbnQgbm9kZSkgewogICAgcmV0dXJuIHZpc2l0KG5vZGUuZXhwcmVzc2lvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0Rm9yKGpzLkZvciBub2RlKSB7CiAgICBib29sIGluaXQgPSAobm9kZS5pbml0ID09IG51bGwpID8gZmFsc2UgOiB2aXNpdChub2RlLmluaXQpOwogICAgYm9vbCBjb25kaXRpb24gPSAobm9kZS5jb25kaXRpb24gPT0gbnVsbCkgPyBmYWxzZSA6IHZpc2l0KG5vZGUuY29uZGl0aW9uKTsKICAgIGJvb2wgdXBkYXRlID0gKG5vZGUudXBkYXRlID09IG51bGwpID8gZmFsc2UgOiB2aXNpdChub2RlLnVwZGF0ZSk7CiAgICBsb29wc0FuZFN3aXRjaGVzLmFkZChub2RlKTsKICAgIGJvb2wgYm9keSA9IHZpc2l0KG5vZGUuYm9keSk7CiAgICBsb29wc0FuZFN3aXRjaGVzLnJlbW92ZUxhc3QoKTsKICAgIHJldHVybiBpbml0IHx8IGNvbmRpdGlvbiB8fCB1cGRhdGUgfHwgYm9keTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRGb3JJbihqcy5Gb3JJbiBub2RlKSB7CiAgICBib29sIG9iamVjdCA9IHZpc2l0KG5vZGUub2JqZWN0KTsKICAgIGxvb3BzQW5kU3dpdGNoZXMuYWRkKG5vZGUpOwogICAgYm9vbCBib2R5ID0gdmlzaXQobm9kZS5ib2R5KTsKICAgIGxvb3BzQW5kU3dpdGNoZXMucmVtb3ZlTGFzdCgpOwogICAgcmV0dXJuIG9iamVjdCB8fCBib2R5OwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEZ1bihqcy5GdW4gbm9kZSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24oanMuRnVuY3Rpb25EZWNsYXJhdGlvbiBub2RlKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SWYoanMuSWYgbm9kZSkgewogICAgYm9vbCBjb25kaXRpb24gPSB2aXNpdChub2RlLmNvbmRpdGlvbik7CiAgICBib29sIHRoZW4gPSB2aXNpdChub2RlLnRoZW4pOwogICAgYm9vbCBvdGhlcndpc2UgPSB2aXNpdChub2RlLm90aGVyd2lzZSk7CiAgICByZXR1cm4gY29uZGl0aW9uIHx8IHRoZW4gfHwgb3RoZXJ3aXNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEludGVycG9sYXRlZEV4cHJlc3Npb24oanMuSW50ZXJwb2xhdGVkRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SW50ZXJwb2xhdGVkRGVjbGFyYXRpb24oanMuSW50ZXJwb2xhdGVkRGVjbGFyYXRpb24gbm9kZSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEludGVycG9sYXRlZExpdGVyYWwoanMuSW50ZXJwb2xhdGVkTGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SW50ZXJwb2xhdGVkUGFyYW1ldGVyKGpzLkludGVycG9sYXRlZFBhcmFtZXRlciBub2RlKSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SW50ZXJwb2xhdGVkU2VsZWN0b3IoanMuSW50ZXJwb2xhdGVkU2VsZWN0b3Igbm9kZSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEludGVycG9sYXRlZFN0YXRlbWVudChqcy5JbnRlcnBvbGF0ZWRTdGF0ZW1lbnQgbm9kZSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdExhYmVsZWRTdGF0ZW1lbnQoanMuTGFiZWxlZFN0YXRlbWVudCBub2RlKSB7CiAgICB1c2VkTmFtZXMuYWRkKG5vZGUubGFiZWwpOwogICAgbGFiZWxsZWRTdGF0ZW1lbnRzLmFkZChub2RlKTsKICAgIGJvb2wgY29udGFpbnNBd2FpdCA9IHZpc2l0KG5vZGUuYm9keSk7CiAgICBsYWJlbGxlZFN0YXRlbWVudHMucmVtb3ZlTGFzdCgpOwogICAgcmV0dXJuIGNvbnRhaW5zQXdhaXQ7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RGVmZXJyZWRFeHByZXNzaW9uKGpzLkRlZmVycmVkRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RGVmZXJyZWROdW1iZXIoanMuRGVmZXJyZWROdW1iZXIgbm9kZSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdERlZmVycmVkU3RyaW5nKGpzLkRlZmVycmVkU3RyaW5nIG5vZGUpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRMaXRlcmFsQm9vbChqcy5MaXRlcmFsQm9vbCBub2RlKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0TGl0ZXJhbEV4cHJlc3Npb24oanMuTGl0ZXJhbEV4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdExpdGVyYWxOdWxsKGpzLkxpdGVyYWxOdWxsIG5vZGUpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRMaXRlcmFsTnVtYmVyKGpzLkxpdGVyYWxOdW1iZXIgbm9kZSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdExpdGVyYWxTdGF0ZW1lbnQoanMuTGl0ZXJhbFN0YXRlbWVudCBub2RlKSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0TGl0ZXJhbFN0cmluZyhqcy5MaXRlcmFsU3RyaW5nIG5vZGUpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKGpzLlN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdE5hbWUoanMuTmFtZSBub2RlKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0UGFyZW50aGVzZXMoanMuUGFyZW50aGVzZXMgbm9kZSkgewogICAgcmV0dXJuIHZpc2l0KG5vZGUuZW5jbG9zZWQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdE5hbWVkRnVuY3Rpb24oanMuTmFtZWRGdW5jdGlvbiBub2RlKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0TmV3KGpzLk5ldyBub2RlKSB7CiAgICByZXR1cm4gdmlzaXRDYWxsKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdE9iamVjdEluaXRpYWxpemVyKGpzLk9iamVjdEluaXRpYWxpemVyIG5vZGUpIHsKICAgIGJvb2wgY29udGFpbnNBd2FpdCA9IGZhbHNlOwogICAgZm9yIChqcy5Qcm9wZXJ0eSBwcm9wZXJ0eSBpbiBub2RlLnByb3BlcnRpZXMpIHsKICAgICAgaWYgKHZpc2l0KHByb3BlcnR5KSkgY29udGFpbnNBd2FpdCA9IHRydWU7CiAgICB9CiAgICByZXR1cm4gY29udGFpbnNBd2FpdDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRQYXJhbWV0ZXIoanMuUGFyYW1ldGVyIG5vZGUpIHsKICAgIHVzZWROYW1lcy5hZGQobm9kZS5uYW1lKTsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRQb3N0Zml4KGpzLlBvc3RmaXggbm9kZSkgewogICAgcmV0dXJuIHZpc2l0KG5vZGUuYXJndW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFByZWZpeChqcy5QcmVmaXggbm9kZSkgewogICAgcmV0dXJuIHZpc2l0KG5vZGUuYXJndW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFByb2dyYW0oanMuUHJvZ3JhbSBub2RlKSB7CiAgICB0aHJvdyAiVW5leHBlY3RlZCI7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0UHJvcGVydHkoanMuUHJvcGVydHkgbm9kZSkgewogICAgcmV0dXJuIHZpc2l0KG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFJlZ0V4cExpdGVyYWwoanMuUmVnRXhwTGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0UmV0dXJuKGpzLlJldHVybiBub2RlKSB7CiAgICBoYXNFeHBsaWNpdFJldHVybnMgPSB0cnVlOwogICAgdGFyZ2V0c1tub2RlXSA9IGN1cnJlbnRGdW5jdGlvbjsKICAgIGlmIChub2RlLnZhbHVlID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB2aXNpdChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRTd2l0Y2goanMuU3dpdGNoIG5vZGUpIHsKICAgIGxvb3BzQW5kU3dpdGNoZXMuYWRkKG5vZGUpOwogICAgLy8gSWYgdGhlIGtleSBoYXMgYW4gYGF3YWl0YCBleHByZXNzaW9uLCBkbyBub3QgdHJhbnNmb3JtIHRoZQogICAgLy8gYm9keSBvZiB0aGUgc3dpdGNoLgogICAgdmlzaXQobm9kZS5rZXkpOwogICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKICAgIGZvciAoanMuU3dpdGNoQ2xhdXNlIGNsYXVzZSBpbiBub2RlLmNhc2VzKSB7CiAgICAgIGlmICh2aXNpdChjbGF1c2UpKSByZXN1bHQgPSB0cnVlOwogICAgfQogICAgbG9vcHNBbmRTd2l0Y2hlcy5yZW1vdmVMYXN0KCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFRoaXMoanMuVGhpcyBub2RlKSB7CiAgICBoYXNUaGlzID0gdHJ1ZTsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUaHJvdyhqcy5UaHJvdyBub2RlKSB7CiAgICByZXR1cm4gdmlzaXQobm9kZS5leHByZXNzaW9uKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUcnkoanMuVHJ5IG5vZGUpIHsKICAgIGJvb2wgYm9keSA9IHZpc2l0KG5vZGUuYm9keSk7CiAgICBib29sIGNhdGNoUGFydCA9IChub2RlLmNhdGNoUGFydCA9PSBudWxsKSA/IGZhbHNlIDogdmlzaXQobm9kZS5jYXRjaFBhcnQpOwogICAgYm9vbCBmaW5hbGx5UGFydCA9CiAgICAgICAgKG5vZGUuZmluYWxseVBhcnQgPT0gbnVsbCkgPyBmYWxzZSA6IHZpc2l0KG5vZGUuZmluYWxseVBhcnQpOwogICAgaWYgKGZpbmFsbHlQYXJ0ICE9IG51bGwpIGhhc0ZpbmFsbHkgPSB0cnVlOwogICAgcmV0dXJuIGJvZHkgfHwgY2F0Y2hQYXJ0IHx8IGZpbmFsbHlQYXJ0OwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24oanMuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICB1c2VkTmFtZXMuYWRkKG5vZGUubmFtZSk7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoanMuVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qgbm9kZSkgewogICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKICAgIGZvciAoanMuVmFyaWFibGVJbml0aWFsaXphdGlvbiBpbml0IGluIG5vZGUuZGVjbGFyYXRpb25zKSB7CiAgICAgIGlmICh2aXNpdChpbml0KSkgcmVzdWx0ID0gdHJ1ZTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0VmFyaWFibGVJbml0aWFsaXphdGlvbihqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uIG5vZGUpIHsKICAgIHJldHVybiB2aXNpdEFzc2lnbm1lbnQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0VmFyaWFibGVVc2UoanMuVmFyaWFibGVVc2Ugbm9kZSkgewogICAgdXNlZE5hbWVzLmFkZChub2RlLm5hbWUpOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2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cm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9kYXJ0MmpzLmRhcnQnIHNob3cgTGluazsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vY29kZWdlbi5kYXJ0JyBzaG93IENvZGVnZW5SZWdpc3RyeTsKaW1wb3J0ICcuLi9jb21tb24vdGFza3MuZGFydCcgc2hvdyBNZWFzdXJlciwgQ29tcGlsZXJUYXNrOwppbXBvcnQgJy4uL2NvbnN0YW50cy9jb25zdGFudF9zeXN0ZW0uZGFydCcgYXMgY29uc3RhbnRfc3lzdGVtOwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgSkNvbW1vbkVsZW1lbnRzOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2p1bXBzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9pby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydCc7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganM7CmltcG9ydCAnLi4vanNfYmFja2VuZC9pbnRlcmNlcHRvcl9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvYmFja2VuZC5kYXJ0JyBzaG93IENvZGVnZW5JbnB1dHM7CmltcG9ydCAnLi4vanNfYmFja2VuZC9jaGVja2VkX21vZGVfaGVscGVycy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hdGl2ZV9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmFtZXIuZGFydCcgc2hvdyBNb2R1bGFyTmFtZXI7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19jb2RlZ2VuLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19uZXcuZGFydCcKICAgIHNob3cgUmVjaXBlRW5jb2RlciwgUmVjaXBlRW5jb2Rpbmc7CmltcG9ydCAnLi4vanNfZW1pdHRlci9jb2RlX2VtaXR0ZXJfdGFzay5kYXJ0JyBzaG93IE1vZHVsYXJFbWl0dGVyOwppbXBvcnQgJy4uL2pzX21vZGVsL2VsZW1lbnRzLmRhcnQnIHNob3cgSkdlbmVyYXRvckJvZHk7CmltcG9ydCAnLi4vanNfbW9kZWwvdHlwZV9yZWNpcGUuZGFydCcgc2hvdyBUeXBlRXhwcmVzc2lvblJlY2lwZTsKaW1wb3J0ICcuLi9uYXRpdmUvYmVoYXZpb3IuZGFydCc7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi90cmFjZXIuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydCcgc2hvdyBDYWxsU3RydWN0dXJlOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CmltcG9ydCAnLi4vdW5pdmVyc2UvdXNlLmRhcnQnIHNob3cgQ29uc3RhbnRVc2UsIER5bmFtaWNVc2UsIFN0YXRpY1VzZSwgVHlwZVVzZTsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JyBzaG93IEpDbG9zZWRXb3JsZDsKaW1wb3J0ICdjb2RlZ2VuX2hlbHBlcnMuZGFydCc7CmltcG9ydCAnbm9kZXMuZGFydCc7CmltcG9ydCAndmFyaWFibGVfYWxsb2NhdG9yLmRhcnQnOwoKYWJzdHJhY3QgY2xhc3MgQ29kZWdlblBoYXNlIHsKICBTdHJpbmcgZ2V0IG5hbWUgPT4gJyRydW50aW1lVHlwZSc7CiAgdm9pZCB2aXNpdEdyYXBoKEhHcmFwaCBncmFwaCk7Cn0KCmNsYXNzIFNzYUNvZGVHZW5lcmF0b3JUYXNrIGV4dGVuZHMgQ29tcGlsZXJUYXNrIHsKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CiAgZmluYWwgU291cmNlSW5mb3JtYXRpb25TdHJhdGVneSBzb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5OwoKICBTc2FDb2RlR2VuZXJhdG9yVGFzaygKICAgICAgTWVhc3VyZXIgbWVhc3VyZXIsIHRoaXMuX29wdGlvbnMsIHRoaXMuc291cmNlSW5mb3JtYXRpb25TdHJhdGVneSkKICAgICAgOiBzdXBlcihtZWFzdXJlcik7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgbmFtZSA9PiAnU1NBIGNvZGUgZ2VuZXJhdG9yJzsKCiAganMuRnVuIGJ1aWxkSmF2YVNjcmlwdEZ1bmN0aW9uKGJvb2wgbmVlZHNBc3luY1Jld3JpdGUsIEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQsCiAgICAgIExpc3Q8anMuUGFyYW1ldGVyPiBwYXJhbWV0ZXJzLCBqcy5CbG9jayBib2R5KSB7CiAgICBqcy5GdW4gZmluaXNoKGpzLkFzeW5jTW9kaWZpZXIgYXN5bmNNb2RpZmllcikgewogICAgICByZXR1cm4gbmV3IGpzLkZ1bihwYXJhbWV0ZXJzLCBib2R5LCBhc3luY01vZGlmaWVyOiBhc3luY01vZGlmaWVyKQogICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5CiAgICAgICAgICAgICAgLmNyZWF0ZUJ1aWxkZXJGb3JDb250ZXh0KGVsZW1lbnQpCiAgICAgICAgICAgICAgLmJ1aWxkRGVjbGFyYXRpb24oZWxlbWVudCkpOwogICAgfQoKICAgIGlmIChuZWVkc0FzeW5jUmV3cml0ZSkgewogICAgICByZXR1cm4gZmluaXNoKGVsZW1lbnQuYXN5bmNNYXJrZXIuaXNBc3luYwogICAgICAgICAgPyAoZWxlbWVudC5hc3luY01hcmtlci5pc1lpZWxkaW5nCiAgICAgICAgICAgICAgPyBqcy5Bc3luY01vZGlmaWVyLmFzeW5jU3RhcgogICAgICAgICAgICAgIDoganMuQXN5bmNNb2RpZmllci5hc3luYykKICAgICAgICAgIDogKGVsZW1lbnQuYXN5bmNNYXJrZXIuaXNZaWVsZGluZwogICAgICAgICAgICAgID8ganMuQXN5bmNNb2RpZmllci5zeW5jU3RhcgogICAgICAgICAgICAgIDoganMuQXN5bmNNb2RpZmllci5zeW5jKSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZmluaXNoKGpzLkFzeW5jTW9kaWZpZXIuc3luYyk7CiAgICB9CiAgfQoKICBqcy5FeHByZXNzaW9uIGdlbmVyYXRlQ29kZSgKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciwKICAgICAgSEdyYXBoIGdyYXBoLAogICAgICBDb2RlZ2VuSW5wdXRzIGNvZGVnZW4sCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgQ29kZWdlblJlZ2lzdHJ5IHJlZ2lzdHJ5LAogICAgICBNb2R1bGFyTmFtZXIgbmFtZXIsCiAgICAgIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIpIHsKICAgIGlmIChtZW1iZXIuaXNGaWVsZCkgewogICAgICByZXR1cm4gZ2VuZXJhdGVMYXp5SW5pdGlhbGl6ZXIoCiAgICAgICAgICBtZW1iZXIsIGdyYXBoLCBjb2RlZ2VuLCBjbG9zZWRXb3JsZCwgcmVnaXN0cnksIG5hbWVyLCBlbWl0dGVyKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBnZW5lcmF0ZU1ldGhvZCgKICAgICAgICAgIG1lbWJlciwgZ3JhcGgsIGNvZGVnZW4sIGNsb3NlZFdvcmxkLCByZWdpc3RyeSwgbmFtZXIsIGVtaXR0ZXIpOwogICAgfQogIH0KCiAganMuRXhwcmVzc2lvbiBnZW5lcmF0ZUxhenlJbml0aWFsaXplcigKICAgICAgRmllbGRFbnRpdHkgZmllbGQsCiAgICAgIEhHcmFwaCBncmFwaCwKICAgICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIENvZGVnZW5SZWdpc3RyeSByZWdpc3RyeSwKICAgICAgTW9kdWxhck5hbWVyIG5hbWVyLAogICAgICBNb2R1bGFyRW1pdHRlciBlbWl0dGVyKSB7CiAgICByZXR1cm4gbWVhc3VyZSgoKSB7CiAgICAgIGNvZGVnZW4udHJhY2VyLnRyYWNlR3JhcGgoImNvZGVnZW4iLCBncmFwaCk7CiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb25TdHJhdGVneQogICAgICAgICAgLmNyZWF0ZUJ1aWxkZXJGb3JDb250ZXh0KGZpZWxkKQogICAgICAgICAgLmJ1aWxkRGVjbGFyYXRpb24oZmllbGQpOwogICAgICBTc2FDb2RlR2VuZXJhdG9yIGNvZGVHZW5lcmF0b3IgPSBuZXcgU3NhQ29kZUdlbmVyYXRvcigKICAgICAgICAgIHRoaXMsCiAgICAgICAgICBfb3B0aW9ucywKICAgICAgICAgIGVtaXR0ZXIsCiAgICAgICAgICBjb2RlZ2VuLmNoZWNrZWRNb2RlSGVscGVycywKICAgICAgICAgIGNvZGVnZW4ucnRpU3Vic3RpdHV0aW9ucywKICAgICAgICAgIGNvZGVnZW4ucnRpRW5jb2RlciwKICAgICAgICAgIGNvZGVnZW4ucnRpUmVjaXBlRW5jb2RlciwKICAgICAgICAgIG5hbWVyLAogICAgICAgICAgY29kZWdlbi50cmFjZXIsCiAgICAgICAgICBjbG9zZWRXb3JsZCwKICAgICAgICAgIHJlZ2lzdHJ5KTsKICAgICAgY29kZUdlbmVyYXRvci52aXNpdEdyYXBoKGdyYXBoKTsKICAgICAgcmV0dXJuIG5ldyBqcy5GdW4oY29kZUdlbmVyYXRvci5wYXJhbWV0ZXJzLCBjb2RlR2VuZXJhdG9yLmJvZHkpCiAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0pOwogIH0KCiAganMuRXhwcmVzc2lvbiBnZW5lcmF0ZU1ldGhvZCgKICAgICAgRnVuY3Rpb25FbnRpdHkgbWV0aG9kLAogICAgICBIR3JhcGggZ3JhcGgsCiAgICAgIENvZGVnZW5JbnB1dHMgY29kZWdlbiwKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBDb2RlZ2VuUmVnaXN0cnkgcmVnaXN0cnksCiAgICAgIE1vZHVsYXJOYW1lciBuYW1lciwKICAgICAgTW9kdWxhckVtaXR0ZXIgZW1pdHRlcikgewogICAgcmV0dXJuIG1lYXN1cmUoKCkgewogICAgICBpZiAobWV0aG9kLmFzeW5jTWFya2VyICE9IEFzeW5jTWFya2VyLlNZTkMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlckFzeW5jTWFya2VyKG1ldGhvZC5hc3luY01hcmtlcik7CiAgICAgIH0KICAgICAgU3NhQ29kZUdlbmVyYXRvciBjb2RlR2VuZXJhdG9yID0gbmV3IFNzYUNvZGVHZW5lcmF0b3IoCiAgICAgICAgICB0aGlzLAogICAgICAgICAgX29wdGlvbnMsCiAgICAgICAgICBlbWl0dGVyLAogICAgICAgICAgY29kZWdlbi5jaGVja2VkTW9kZUhlbHBlcnMsCiAgICAgICAgICBjb2RlZ2VuLnJ0aVN1YnN0aXR1dGlvbnMsCiAgICAgICAgICBjb2RlZ2VuLnJ0aUVuY29kZXIsCiAgICAgICAgICBjb2RlZ2VuLnJ0aVJlY2lwZUVuY29kZXIsCiAgICAgICAgICBuYW1lciwKICAgICAgICAgIGNvZGVnZW4udHJhY2VyLAogICAgICAgICAgY2xvc2VkV29ybGQsCiAgICAgICAgICByZWdpc3RyeSk7CiAgICAgIGNvZGVHZW5lcmF0b3IudmlzaXRHcmFwaChncmFwaCk7CiAgICAgIGNvZGVnZW4udHJhY2VyLnRyYWNlR3JhcGgoImNvZGVnZW4iLCBncmFwaCk7CiAgICAgIHJldHVybiBidWlsZEphdmFTY3JpcHRGdW5jdGlvbihncmFwaC5uZWVkc0FzeW5jUmV3cml0ZSwgbWV0aG9kLAogICAgICAgICAgY29kZUdlbmVyYXRvci5wYXJhbWV0ZXJzLCBjb2RlR2VuZXJhdG9yLmJvZHkpOwogICAgfSk7CiAgfQp9CgpjbGFzcyBTc2FDb2RlR2VuZXJhdG9yIGltcGxlbWVudHMgSFZpc2l0b3IsIEhCbG9ja0luZm9ybWF0aW9uVmlzaXRvciB7CiAgLy8vIFJldHVybmVkIGJ5IFtleHByZXNzaW9uVHlwZV0gdG8gdGVsbCBob3cgY29kZSBjYW4gYmUgZ2VuZXJhdGVkIGZvcgogIC8vLyBhIHN1YmdyYXBoLgogIC8vLyAtIFtUWVBFX1NUQVRFTUVOVF0gbWVhbnMgdGhhdCB0aGUgZ3JhcGggbXVzdCBiZSBnZW5lcmF0ZWQgYXMgYSBzdGF0ZW1lbnQsCiAgLy8vIHdoaWNoIGlzIGFsd2F5cyBwb3NzaWJsZS4KICAvLy8gLSBbVFlQRV9FWFBSRVNTSU9OXSBtZWFucyB0aGF0IHRoZSBncmFwaCBjYW4gYmUgZ2VuZXJhdGVkIGFzIGFuIGV4cHJlc3Npb24sCiAgLy8vIG9yIHBvc3NpYmx5IHNldmVyYWwgY29tbWEtc2VwYXJhdGVkIGV4cHJlc3Npb25zLgogIC8vLyAtIFtUWVBFX0RFQ0xBUkFUSU9OXSBtZWFucyB0aGF0IHRoZSBncmFwaCBjYW4gYmUgZ2VuZXJhdGVkIGFzIGFuCiAgLy8vIGV4cHJlc3Npb24sIGFuZCB0aGF0IGl0IG9ubHkgZ2VuZXJhdGVzIGV4cHJlc3Npb25zIG9mIHRoZSBmb3JtCiAgLy8vICAgdmFyaWFibGUgPSBleHByZXNzaW9uCiAgLy8vIHdoaWNoIGFyZSBhbHNvIHZhbGlkIGFzIHBhcnRzIG9mIGEgInZhciIgZGVjbGFyYXRpb24uCiAgc3RhdGljIGNvbnN0IGludCBUWVBFX1NUQVRFTUVOVCA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBUWVBFX0VYUFJFU1NJT04gPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgVFlQRV9ERUNMQVJBVElPTiA9IDI7CgogIC8vLyBXaGV0aGVyIHdlIGFyZSBjdXJyZW50bHkgZ2VuZXJhdGluZyBleHByZXNzaW9ucyBpbnN0ZWFkIG9mIHN0YXRlbWVudHMuCiAgLy8vIFRoaXMgaW5jbHVkZXMgZGVjbGFyYXRpb25zLCB3aGljaCBhcmUgZ2VuZXJhdGVkIGFzIGV4cHJlc3Npb25zLgogIGJvb2wgaXNHZW5lcmF0aW5nRXhwcmVzc2lvbiA9IGZhbHNlOwoKICBmaW5hbCBDb21waWxlclRhc2sgX2NvZGVnZW5UYXNrOwogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBfb3B0aW9uczsKICBmaW5hbCBNb2R1bGFyRW1pdHRlciBfZW1pdHRlcjsKICBmaW5hbCBDaGVja2VkTW9kZUhlbHBlcnMgX2NoZWNrZWRNb2RlSGVscGVyczsKICBmaW5hbCBSdW50aW1lVHlwZXNTdWJzdGl0dXRpb25zIF9ydGlTdWJzdGl0dXRpb25zOwogIGZpbmFsIFJ1bnRpbWVUeXBlc0VuY29kZXIgX3J0aUVuY29kZXI7CiAgZmluYWwgUmVjaXBlRW5jb2RlciBfcnRpUmVjaXBlRW5jb2RlcjsKICBmaW5hbCBNb2R1bGFyTmFtZXIgX25hbWVyOwogIGZpbmFsIFRyYWNlciBfdHJhY2VyOwogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CiAgZmluYWwgQ29kZWdlblJlZ2lzdHJ5IF9yZWdpc3RyeTsKCiAgZmluYWwgU2V0PEhJbnN0cnVjdGlvbj4gZ2VuZXJhdGVBdFVzZVNpdGU7CiAgZmluYWwgU2V0PEhJbnN0cnVjdGlvbj4gY29udHJvbEZsb3dPcGVyYXRvcnM7CiAgZmluYWwgU2V0PEp1bXBUYXJnZXQ+IGJyZWFrQWN0aW9uOwogIGZpbmFsIFNldDxMYWJlbERlZmluaXRpb24+IGNvbnRpbnVlQWN0aW9uOwogIGZpbmFsIFNldDxKdW1wVGFyZ2V0PiBpbXBsaWNpdENvbnRpbnVlQWN0aW9uOwogIGZpbmFsIExpc3Q8anMuUGFyYW1ldGVyPiBwYXJhbWV0ZXJzOwoKICBqcy5CbG9jayBjdXJyZW50Q29udGFpbmVyOwogIGpzLkJsb2NrIGdldCBib2R5ID0+IGN1cnJlbnRDb250YWluZXI7CiAgTGlzdDxqcy5FeHByZXNzaW9uPiBleHByZXNzaW9uU3RhY2s7CiAgTGlzdDxqcy5CbG9jaz4gb2xkQ29udGFpbmVyU3RhY2s7CgogIC8vLyBDb250YWlucyB0aGUgbmFtZXMgb2YgdGhlIGluc3RydWN0aW9ucywgYXMgd2VsbCBhcyB0aGUgcGFyYWxsZWwKICAvLy8gY29waWVzIHRvIHBlcmZvcm0gb24gYmxvY2sgdHJhbnNpdGlvbmluZy4KICBWYXJpYWJsZU5hbWVzIHZhcmlhYmxlTmFtZXM7CgogIC8vLyBgdHJ1ZWAgd2hlbiB3ZSBuZWVkIHRvIGdlbmVyYXRlIGEgYHZhcmAgZGVjbGFyYXRpb24gYXQgZnVuY3Rpb24gZW50cnksCiAgLy8vIGBmYWxzZWAgaWYgd2UgY2FuIGdlbmVyYXRlIGEgYHZhcmAgZGVjbGFyYXRpb24gYXQgZmlyc3QgYXNzaWdubWVudCBpbiB0aGUKICAvLy8gbWlkZGxlIG9mIHRoZSBmdW5jdGlvbi4KICBib29sIHNob3VsZEdyb3VwVmFyRGVjbGFyYXRpb25zID0gZmFsc2U7CgogIC8vLyBXaGlsZSBnZW5lcmF0aW5nIGV4cHJlc3Npb25zLCB3ZSBjYW4ndCBpbnNlcnQgdmFyaWFibGUgZGVjbGFyYXRpb25zLgogIC8vLyBJbnN0ZWFkIHdlIGRlY2xhcmUgdGhlbSBhdCB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uLiAgV2hlbiBtaW5pZnlpbmcKICAvLy8gd2UgZG8gdGhpcyBtb3N0IG9mIHRoZSB0aW1lLCBiZWNhdXNlIGl0IHJlZHVjZXMgdGhlIHNpemUgdW5sZXNzIHRoZXJlCiAgLy8vIGlzIG9ubHkgb25lIHZhcmlhYmxlLgogIGZpbmFsIFNldDxTdHJpbmc+IGNvbGxlY3RlZFZhcmlhYmxlRGVjbGFyYXRpb25zOwoKICAvLy8gU2V0IG9mIHZhcmlhYmxlcyBhbmQgcGFyYW1ldGVycyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGRlY2xhcmVkLgogIGZpbmFsIFNldDxTdHJpbmc+IGRlY2xhcmVkTG9jYWxzOwoKICBIR3JhcGggY3VycmVudEdyYXBoOwoKICAvLyBSZWNvcmRzIGEgYmxvY2staW5mb3JtYXRpb24gdGhhdCBpcyBiZWluZyBoYW5kbGVkIHNwZWNpYWxseS4KICAvLyBVc2VkIHRvIGJyZWFrIGJhZCByZWN1cnNpb24uCiAgSEJsb2NrSW5mb3JtYXRpb24gY3VycmVudEJsb2NrSW5mb3JtYXRpb247CiAgLy8gVGhlIHN1YmdyYXBoIGlzIHVzZWQgdG8gZGVsaW1pdCB0cmF2ZXJzYWwgZm9yIHNvbWUgY29uc3RydWN0aW9ucywgZS5nLiwKICAvLyBpZiBicmFuY2hlcy4KICBTdWJHcmFwaCBzdWJHcmFwaDsKCiAgLy8gUGVuZGluZyBibG9ja3MgdGhhbiBuZWVkIHRvIGJlIHZpc2l0ZWQgYXMgcGFydCBvZiBjdXJyZW50IHN1YmdyYXBoLgogIFF1ZXVlPEhCYXNpY0Jsb2NrPiBibG9ja1F1ZXVlOwoKICBTc2FDb2RlR2VuZXJhdG9yKAogICAgICB0aGlzLl9jb2RlZ2VuVGFzaywKICAgICAgdGhpcy5fb3B0aW9ucywKICAgICAgdGhpcy5fZW1pdHRlciwKICAgICAgdGhpcy5fY2hlY2tlZE1vZGVIZWxwZXJzLAogICAgICB0aGlzLl9ydGlTdWJzdGl0dXRpb25zLAogICAgICB0aGlzLl9ydGlFbmNvZGVyLAogICAgICB0aGlzLl9ydGlSZWNpcGVFbmNvZGVyLAogICAgICB0aGlzLl9uYW1lciwKICAgICAgdGhpcy5fdHJhY2VyLAogICAgICB0aGlzLl9jbG9zZWRXb3JsZCwKICAgICAgdGhpcy5fcmVnaXN0cnksCiAgICAgIHtTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbn0pCiAgICAgIDogZGVjbGFyZWRMb2NhbHMgPSBuZXcgU2V0PFN0cmluZz4oKSwKICAgICAgICBjb2xsZWN0ZWRWYXJpYWJsZURlY2xhcmF0aW9ucyA9IG5ldyBTZXQ8U3RyaW5nPigpLAogICAgICAgIGN1cnJlbnRDb250YWluZXIgPSBuZXcganMuQmxvY2suZW1wdHkoKSwKICAgICAgICBwYXJhbWV0ZXJzID0gPGpzLlBhcmFtZXRlcj5bXSwKICAgICAgICBleHByZXNzaW9uU3RhY2sgPSA8anMuRXhwcmVzc2lvbj5bXSwKICAgICAgICBvbGRDb250YWluZXJTdGFjayA9IDxqcy5CbG9jaz5bXSwKICAgICAgICBnZW5lcmF0ZUF0VXNlU2l0ZSA9IG5ldyBTZXQ8SEluc3RydWN0aW9uPigpLAogICAgICAgIGNvbnRyb2xGbG93T3BlcmF0b3JzID0gbmV3IFNldDxISW5zdHJ1Y3Rpb24+KCksCiAgICAgICAgYnJlYWtBY3Rpb24gPSBuZXcgU2V0PEp1bXBUYXJnZXQ+KCksCiAgICAgICAgY29udGludWVBY3Rpb24gPSBuZXcgU2V0PExhYmVsRGVmaW5pdGlvbj4oKSwKICAgICAgICBpbXBsaWNpdENvbnRpbnVlQWN0aW9uID0gbmV3IFNldDxKdW1wVGFyZ2V0PigpOwoKICBKQ29tbW9uRWxlbWVudHMgZ2V0IF9jb21tb25FbGVtZW50cyA9PiBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHM7CgogIE5hdGl2ZURhdGEgZ2V0IF9uYXRpdmVEYXRhID0+IF9jbG9zZWRXb3JsZC5uYXRpdmVEYXRhOwoKICBJbnRlcmNlcHRvckRhdGEgZ2V0IF9pbnRlcmNlcHRvckRhdGEgPT4gX2Nsb3NlZFdvcmxkLmludGVyY2VwdG9yRGF0YTsKCiAgQWJzdHJhY3RWYWx1ZURvbWFpbiBnZXQgX2Fic3RyYWN0VmFsdWVEb21haW4gPT4KICAgICAgX2Nsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW47CgogIGJvb2wgaXNHZW5lcmF0ZUF0VXNlU2l0ZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIHJldHVybiBnZW5lcmF0ZUF0VXNlU2l0ZS5jb250YWlucyhpbnN0cnVjdGlvbik7CiAgfQoKICBib29sIGhhc05vbkJpdE9wVXNlcihISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24sIFNldDxIUGhpPiBwaGlTZXQpIHsKICAgIGZvciAoSEluc3RydWN0aW9uIHVzZXIgaW4gaW5zdHJ1Y3Rpb24udXNlZEJ5KSB7CiAgICAgIGlmICh1c2VyIGlzIEhQaGkpIHsKICAgICAgICBpZiAoIXBoaVNldC5jb250YWlucyh1c2VyKSkgewogICAgICAgICAgcGhpU2V0LmFkZCh1c2VyKTsKICAgICAgICAgIGlmIChoYXNOb25CaXRPcFVzZXIodXNlciwgcGhpU2V0KSkgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHVzZXIgaXMhIEhCaXROb3QgJiYgdXNlciBpcyEgSEJpbmFyeUJpdE9wKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBiaXRzIG9jY3VwaWVkIGJ5IHRoZSB2YWx1ZSBjb21wdXRlZCBieSBbaW5zdHJ1Y3Rpb25dLgogIC8vIFJldHVybnMgYDMyYCBpZiB0aGUgdmFsdWUgaXMgbmVnYXRpdmUgb3IgZG9lcyBub3QgZml0IGluIGEgc21hbGxlciBudW1iZXIKICAvLyBvZiBiaXRzLgogIGludCBiaXRXaWR0aChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGNvbnN0IGludCBNQVggPSAzMjsKICAgIGludCBjb25zdGFudChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgICAgaWYgKGluc3RydWN0aW9uIGlzIEhDb25zdGFudCAmJiBpbnN0cnVjdGlvbi5pc0NvbnN0YW50SW50ZWdlcigpKSB7CiAgICAgICAgSW50Q29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IGluc3RydWN0aW9uLmNvbnN0YW50OwogICAgICAgIHJldHVybiBjb25zdGFudC5pbnRWYWx1ZS50b0ludCgpOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGlmIChpbnN0cnVjdGlvbi5pc0NvbnN0YW50SW50ZWdlcigpKSB7CiAgICAgIGludCB2YWx1ZSA9IGNvbnN0YW50KGluc3RydWN0aW9uKTsKICAgICAgaWYgKHZhbHVlIDwgMCkgcmV0dXJuIE1BWDsKICAgICAgaWYgKHZhbHVlID4gKCgxIDw8IDMxKSAtIDEpKSByZXR1cm4gTUFYOwogICAgICByZXR1cm4gdmFsdWUuYml0TGVuZ3RoOwogICAgfQogICAgaWYgKGluc3RydWN0aW9uIGlzIEhCaXRBbmQpIHsKICAgICAgcmV0dXJuIG1hdGgubWluKGJpdFdpZHRoKGluc3RydWN0aW9uLmxlZnQpLCBiaXRXaWR0aChpbnN0cnVjdGlvbi5yaWdodCkpOwogICAgfQogICAgaWYgKGluc3RydWN0aW9uIGlzIEhCaXRPciB8fCBpbnN0cnVjdGlvbiBpcyBIQml0WG9yKSB7CiAgICAgIEhCaW5hcnlCaXRPcCBiaXRPcCA9IGluc3RydWN0aW9uOwogICAgICBpbnQgbGVmdFdpZHRoID0gYml0V2lkdGgoYml0T3AubGVmdCk7CiAgICAgIGlmIChsZWZ0V2lkdGggPT0gTUFYKSByZXR1cm4gTUFYOwogICAgICByZXR1cm4gbWF0aC5tYXgobGVmdFdpZHRoLCBiaXRXaWR0aChiaXRPcC5yaWdodCkpOwogICAgfQogICAgaWYgKGluc3RydWN0aW9uIGlzIEhTaGlmdExlZnQpIHsKICAgICAgaW50IHNoaWZ0Q291bnQgPSBjb25zdGFudChpbnN0cnVjdGlvbi5yaWdodCk7CiAgICAgIGlmIChzaGlmdENvdW50ID09IG51bGwgfHwgc2hpZnRDb3VudCA8IDAgfHwgc2hpZnRDb3VudCA+IDMxKSByZXR1cm4gTUFYOwogICAgICBpbnQgbGVmdFdpZHRoID0gYml0V2lkdGgoaW5zdHJ1Y3Rpb24ubGVmdCk7CiAgICAgIGludCB3aWR0aCA9IGxlZnRXaWR0aCArIHNoaWZ0Q291bnQ7CiAgICAgIHJldHVybiBtYXRoLm1pbih3aWR0aCwgTUFYKTsKICAgIH0KICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIU2hpZnRSaWdodCkgewogICAgICBpbnQgc2hpZnRDb3VudCA9IGNvbnN0YW50KGluc3RydWN0aW9uLnJpZ2h0KTsKICAgICAgaWYgKHNoaWZ0Q291bnQgPT0gbnVsbCB8fCBzaGlmdENvdW50IDwgMCB8fCBzaGlmdENvdW50ID4gMzEpIHJldHVybiBNQVg7CiAgICAgIGludCBsZWZ0V2lkdGggPSBiaXRXaWR0aChpbnN0cnVjdGlvbi5sZWZ0KTsKICAgICAgaWYgKGxlZnRXaWR0aCA+PSBNQVgpIHJldHVybiBNQVg7CiAgICAgIHJldHVybiBtYXRoLm1heChsZWZ0V2lkdGggLSBzaGlmdENvdW50LCAwKTsKICAgIH0KICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIQWRkKSB7CiAgICAgIHJldHVybiBtYXRoLm1pbigKICAgICAgICAgIDEgKyBtYXRoLm1heChiaXRXaWR0aChpbnN0cnVjdGlvbi5sZWZ0KSwgYml0V2lkdGgoaW5zdHJ1Y3Rpb24ucmlnaHQpKSwKICAgICAgICAgIE1BWCk7CiAgICB9CiAgICByZXR1cm4gTUFYOwogIH0KCiAgYm9vbCByZXF1aXJlc1VpbnRDb252ZXJzaW9uKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgaWYgKGluc3RydWN0aW9uLmlzVUludDMxKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChiaXRXaWR0aChpbnN0cnVjdGlvbikgPD0gMzEpIHJldHVybiBmYWxzZTsKICAgIC8vIElmIHRoZSByZXN1bHQgb2YgYSBiaXQtb3BlcmF0aW9uIGlzIG9ubHkgdXNlZCBieSBvdGhlciBiaXQKICAgIC8vIG9wZXJhdGlvbnMsIHdlIGRvIG5vdCBoYXZlIHRvIGNvbnZlcnQgdG8gYW4gdW5zaWduZWQgaW50ZWdlci4KICAgIHJldHVybiBoYXNOb25CaXRPcFVzZXIoaW5zdHJ1Y3Rpb24sIG5ldyBTZXQ8SFBoaT4oKSk7CiAgfQoKICAvLy8gSWYgdGhlIFtpbnN0cnVjdGlvbl0gaXMgbm90IGBudWxsYCBpdCB3aWxsIGJlIHVzZWQgdG8gYXR0YWNoIHRoZSBwb3NpdGlvbgogIC8vLyB0byB0aGUgW3N0YXRlbWVudF0uCiAgdm9pZCBwdXNoU3RhdGVtZW50KGpzLlN0YXRlbWVudCBzdGF0ZW1lbnQpIHsKICAgIGFzc2VydChleHByZXNzaW9uU3RhY2suaXNFbXB0eSk7CiAgICBjdXJyZW50Q29udGFpbmVyLnN0YXRlbWVudHMuYWRkKHN0YXRlbWVudCk7CiAgfQoKICB2b2lkIGluc2VydFN0YXRlbWVudEF0U3RhcnQoanMuU3RhdGVtZW50IHN0YXRlbWVudCkgewogICAgY3VycmVudENvbnRhaW5lci5zdGF0ZW1lbnRzLmluc2VydCgwLCBzdGF0ZW1lbnQpOwogIH0KCiAgLy8vIElmIHRoZSBbaW5zdHJ1Y3Rpb25dIGlzIG5vdCBgbnVsbGAgaXQgd2lsbCBiZSB1c2VkIHRvIGF0dGFjaCB0aGUgcG9zaXRpb24KICAvLy8gdG8gdGhlIFtleHByZXNzaW9uXS4KICBwdXNoRXhwcmVzc2lvbkFzU3RhdGVtZW50KAogICAgICBqcy5FeHByZXNzaW9uIGV4cHJlc3Npb24sIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBwdXNoU3RhdGVtZW50KG5ldyBqcy5FeHByZXNzaW9uU3RhdGVtZW50KGV4cHJlc3Npb24pCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgLy8vIElmIHRoZSBbaW5zdHJ1Y3Rpb25dIGlzIG5vdCBgbnVsbGAgaXQgd2lsbCBiZSB1c2VkIHRvIGF0dGFjaCB0aGUgcG9zaXRpb24KICAvLy8gdG8gdGhlIFtleHByZXNzaW9uXS4KICBwdXNoKGpzLkV4cHJlc3Npb24gZXhwcmVzc2lvbikgewogICAgZXhwcmVzc2lvblN0YWNrLmFkZChleHByZXNzaW9uKTsKICB9CgogIGpzLkV4cHJlc3Npb24gcG9wKCkgewogICAgcmV0dXJuIGV4cHJlc3Npb25TdGFjay5yZW1vdmVMYXN0KCk7CiAgfQoKICB2b2lkIHByZUdlbmVyYXRlTWV0aG9kKEhHcmFwaCBncmFwaCkgewogICAgdm9pZCBydW5QaGFzZShDb2RlZ2VuUGhhc2UgcGhhc2UsIHtib29sIHRyYWNlR3JhcGggPSB0cnVlfSkgewogICAgICBfY29kZWdlblRhc2subWVhc3VyZVN1YnRhc2socGhhc2UubmFtZSwgKCkgPT4gcGhhc2UudmlzaXRHcmFwaChncmFwaCkpOwogICAgICBpZiAodHJhY2VHcmFwaCkgewogICAgICAgIF90cmFjZXIudHJhY2VHcmFwaChwaGFzZS5uYW1lLCBncmFwaCk7CiAgICAgIH0KICAgICAgYXNzZXJ0KGdyYXBoLmlzVmFsaWQoKSwgJ0dyYXBoIG5vdCB2YWxpZCBhZnRlciAke3BoYXNlLm5hbWV9Jyk7CiAgICB9CgogICAgcnVuUGhhc2UoCiAgICAgICAgbmV3IFNzYUluc3RydWN0aW9uU2VsZWN0aW9uKF9vcHRpb25zLCBfY2xvc2VkV29ybGQsIF9pbnRlcmNlcHRvckRhdGEpKTsKICAgIHJ1blBoYXNlKG5ldyBTc2FUeXBlS25vd25SZW1vdmVyKCkpOwogICAgcnVuUGhhc2UobmV3IFNzYVRydXN0ZWRDaGVja1JlbW92ZXIoX29wdGlvbnMpKTsKICAgIHJ1blBoYXNlKG5ldyBTc2FBc3NpZ25tZW50Q2hhaW5pbmcoX29wdGlvbnMsIF9jbG9zZWRXb3JsZCkpOwogICAgcnVuUGhhc2UobmV3IFNzYUluc3RydWN0aW9uTWVyZ2VyKF9hYnN0cmFjdFZhbHVlRG9tYWluLCBnZW5lcmF0ZUF0VXNlU2l0ZSkpOwogICAgcnVuUGhhc2UobmV3IFNzYUNvbmRpdGlvbk1lcmdlcihnZW5lcmF0ZUF0VXNlU2l0ZSwgY29udHJvbEZsb3dPcGVyYXRvcnMpKTsKICAgIHJ1blBoYXNlKG5ldyBTc2FTaGFyZVJlZ2lvbkNvbnN0YW50cyhfb3B0aW9ucykpOwoKICAgIFNzYUxpdmVJbnRlcnZhbEJ1aWxkZXIgaW50ZXJ2YWxCdWlsZGVyID0KICAgICAgICBuZXcgU3NhTGl2ZUludGVydmFsQnVpbGRlcihnZW5lcmF0ZUF0VXNlU2l0ZSwgY29udHJvbEZsb3dPcGVyYXRvcnMpOwogICAgcnVuUGhhc2UoaW50ZXJ2YWxCdWlsZGVyLCB0cmFjZUdyYXBoOiBmYWxzZSk7CiAgICBTc2FWYXJpYWJsZUFsbG9jYXRvciBhbGxvY2F0b3IgPSBuZXcgU3NhVmFyaWFibGVBbGxvY2F0b3IoCiAgICAgICAgX25hbWVyLAogICAgICAgIGludGVydmFsQnVpbGRlci5saXZlSW5zdHJ1Y3Rpb25zLAogICAgICAgIGludGVydmFsQnVpbGRlci5saXZlSW50ZXJ2YWxzLAogICAgICAgIGdlbmVyYXRlQXRVc2VTaXRlKTsKICAgIHJ1blBoYXNlKGFsbG9jYXRvciwgdHJhY2VHcmFwaDogZmFsc2UpOwogICAgdmFyaWFibGVOYW1lcyA9IGFsbG9jYXRvci5uYW1lczsKICAgIHNob3VsZEdyb3VwVmFyRGVjbGFyYXRpb25zID0gYWxsb2NhdG9yLm5hbWVzLm51bWJlck9mVmFyaWFibGVzID4gMTsKICB9CgogIHZvaWQgaGFuZGxlRGVsYXllZFZhcmlhYmxlRGVjbGFyYXRpb25zKFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICAvLyBDcmVhdGUgJ3ZhcicgbGlzdCBhdCB0aGUgc3RhcnQgb2YgZnVuY3Rpb24uICBNb3ZlIGFzc2lnbm1lbnQgc3RhdGVtZW50cwogICAgLy8gZnJvbSB0aGUgdG9wIG9mIHRoZSBib2R5IGludG8gdGhlIHZhcmlhYmxlIGluaXRpYWxpemVycy4KICAgIGlmIChjb2xsZWN0ZWRWYXJpYWJsZURlY2xhcmF0aW9ucy5pc0VtcHR5KSByZXR1cm47CgogICAgTGlzdDxqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uPiBkZWNsYXJhdGlvbnMgPSBbXTsKICAgIExpc3Q8anMuU3RhdGVtZW50PiBzdGF0ZW1lbnRzID0gY3VycmVudENvbnRhaW5lci5zdGF0ZW1lbnRzOwogICAgaW50IG5leHRTdGF0ZW1lbnQgPSAwOwoKICAgIHdoaWxlIChuZXh0U3RhdGVtZW50IDwgc3RhdGVtZW50cy5sZW5ndGgpIHsKICAgICAgaWYgKGNvbGxlY3RlZFZhcmlhYmxlRGVjbGFyYXRpb25zLmlzRW1wdHkpIGJyZWFrOwogICAgICBqcy5TdGF0ZW1lbnQgc3RhdGVtZW50ID0gc3RhdGVtZW50c1tuZXh0U3RhdGVtZW50XTsKICAgICAgaWYgKHN0YXRlbWVudCBpcyBqcy5FeHByZXNzaW9uU3RhdGVtZW50KSB7CiAgICAgICAganMuRXhwcmVzc2lvbiBleHByZXNzaW9uID0gc3RhdGVtZW50LmV4cHJlc3Npb247CiAgICAgICAgaWYgKGV4cHJlc3Npb24gaXMganMuQXNzaWdubWVudCAmJiAhZXhwcmVzc2lvbi5pc0NvbXBvdW5kKSB7CiAgICAgICAgICBqcy5FeHByZXNzaW9uIGxlZnQgPSBleHByZXNzaW9uLmxlZnRIYW5kU2lkZTsKICAgICAgICAgIGlmIChsZWZ0IGlzIGpzLlZhcmlhYmxlUmVmZXJlbmNlKSB7CiAgICAgICAgICAgIFN0cmluZyBuYW1lID0gbGVmdC5uYW1lOwogICAgICAgICAgICBqcy5FeHByZXNzaW9uIHZhbHVlID0gZXhwcmVzc2lvbi52YWx1ZTsKICAgICAgICAgICAgaWYgKF9zYWZlSW5Jbml0aWFsaXplcih2YWx1ZSkgJiYKICAgICAgICAgICAgICAgIGNvbGxlY3RlZFZhcmlhYmxlRGVjbGFyYXRpb25zLnJlbW92ZShuYW1lKSkgewogICAgICAgICAgICAgIHZhciBpbml0aWFsaXphdGlvbiA9IG5ldyBqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uKAogICAgICAgICAgICAgICAgICAgICAgbmV3IGpzLlZhcmlhYmxlRGVjbGFyYXRpb24obmFtZSksIHZhbHVlKQogICAgICAgICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKGV4cHJlc3Npb24uc291cmNlSW5mb3JtYXRpb24pOwogICAgICAgICAgICAgIGRlY2xhcmF0aW9ucy5hZGQoaW5pdGlhbGl6YXRpb24pOwogICAgICAgICAgICAgICsrbmV4dFN0YXRlbWVudDsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBicmVhazsKICAgIH0KCiAgICBMaXN0PGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24+IHVuaW5pdGlhbGl6ZWQgPSBbXTsKICAgIGZvciAoU3RyaW5nIG5hbWUgaW4gY29sbGVjdGVkVmFyaWFibGVEZWNsYXJhdGlvbnMpIHsKICAgICAgdW5pbml0aWFsaXplZC5hZGQobmV3IGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24oCiAgICAgICAgICBuZXcganMuVmFyaWFibGVEZWNsYXJhdGlvbihuYW1lKSwgbnVsbCkpOwogICAgfQogICAgdmFyIGRlY2xhcmF0aW9uTGlzdCA9CiAgICAgICAgbmV3IGpzLlZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KHVuaW5pdGlhbGl6ZWQgKyBkZWNsYXJhdGlvbnMpCiAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pOwogICAgc3RhdGVtZW50cy5yZXBsYWNlUmFuZ2UoCiAgICAgICAgMCwgbmV4dFN0YXRlbWVudCwgW25ldyBqcy5FeHByZXNzaW9uU3RhdGVtZW50KGRlY2xhcmF0aW9uTGlzdCldKTsKICB9CgogIC8vIEFuIGV4cHJlc3Npb24gaXMgc2FmZSB0byBiZSBwdWxsZWQgaW50byBhICd2YXInIGluaXRpYWxpemVyIGlmIGl0IGRvZXMgbm90CiAgLy8gY29udGFpbiBhc3NpZ25tZW50cyB0byBsb2NhbHMuIFdlIGRvbid0IGdlbmVyYXRlIGFzc2lnbm1lbnRzIHRvIGxvY2FscwogIC8vIGluc2lkZSBleHByZXNzaW9ucy4KICBib29sIF9zYWZlSW5Jbml0aWFsaXplcihqcy5FeHByZXNzaW9uIG5vZGUpID0+IHRydWU7CgogIHZpc2l0R3JhcGgoSEdyYXBoIGdyYXBoKSB7CiAgICBwcmVHZW5lcmF0ZU1ldGhvZChncmFwaCk7CiAgICBjdXJyZW50R3JhcGggPSBncmFwaDsKICAgIHZpc2l0U3ViR3JhcGgobmV3IFN1YkdyYXBoKGdyYXBoLmVudHJ5LCBncmFwaC5leGl0KSk7CiAgICBoYW5kbGVEZWxheWVkVmFyaWFibGVEZWNsYXJhdGlvbnMoZ3JhcGguc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgdm9pZCB2aXNpdFN1YkdyYXBoKFN1YkdyYXBoIG5ld1N1YkdyYXBoKSB7CiAgICBTdWJHcmFwaCBvbGRTdWJHcmFwaCA9IHN1YkdyYXBoOwogICAgUXVldWU8SEJhc2ljQmxvY2s+IG9sZEJsb2NrUXVldWUgPSBibG9ja1F1ZXVlOwogICAgc3ViR3JhcGggPSBuZXdTdWJHcmFwaDsKICAgIGJsb2NrUXVldWUgPSBuZXcgUXVldWU8SEJhc2ljQmxvY2s+KCk7CiAgICBlbnRlclN1YkdyYXBoKHN1YkdyYXBoLnN0YXJ0KTsKICAgIGJsb2NrUXVldWUgPSBvbGRCbG9ja1F1ZXVlOwogICAgc3ViR3JhcGggPSBvbGRTdWJHcmFwaDsKICB9CgogIC8vLyBDaGVjayB3aGV0aGVyIGEgc3ViLWdyYXBoIGNhbiBiZSBnZW5lcmF0ZWQgYXMgYW4gZXhwcmVzc2lvbiwgb3IgZXZlbgogIC8vLyBhcyBhIGRlY2xhcmF0aW9uLCBvciBpZiBpdCBoYXMgdG8gZmFsbCBiYWNrIHRvIGJlaW5nIGdlbmVyYXRlZCBhcwogIC8vLyBhIHN0YXRlbWVudC4KICAvLy8gRXhwcmVzc2lvbnMgYXJlIGFueXRoaW5nIHRoYXQgZG9lc24ndCBnZW5lcmF0ZSBjb250cm9sIGZsb3cgY29uc3RydWN0cy4KICAvLy8gRGVjbGFyYXRpb25zIG11c3Qgb25seSBnZW5lcmF0ZSBhc3NpZ25tZW50cyBvbiB0aGUgZm9ybSAiaWQgPSBleHByZXNzaW9uIiwKICAvLy8gYW5kIG5vdCwgZS5nLiwgZXhwcmVzc2lvbnMgd2hlcmUgdGhlIHZhbHVlIGlzbid0IGFzc2lnbmVkLCBvciB3aGVyZSBpdCdzCiAgLy8vIGFzc2lnbmVkIHRvIHNvbWV0aGluZyB0aGF0J3Mgbm90IGEgc2ltcGxlIHZhcmlhYmxlLgogIGludCBleHByZXNzaW9uVHlwZShIRXhwcmVzc2lvbkluZm9ybWF0aW9uIGluZm8pIHsKICAgIC8vIFRoZSBvbmx5IEhFeHByZXNzaW9uSW5mb3JtYXRpb24gdXNlZCBhcyBwYXJ0IG9mIGEgSEJsb2NrSW5mb3JtYXRpb24gaXMKICAgIC8vIGN1cnJlbnQgSFN1YkV4cHJlc3Npb25CbG9ja0luZm9ybWF0aW9uLCBzbyBpdCdzIHRoZSBvbmx5IG9uZSByZWFjaGluZwogICAgLy8gaGVyZS4gSWYgd2Ugc3RhcnQgdXNpbmcgdGhlIG90aGVyIEhFeHByZXNzaW9uSW5mb3JtYXRpb24gdHlwZXMgdG9vLAogICAgLy8gdGhpcyBjb2RlIHNob3VsZCBiZSBnZW5lcmFsaXplZC4KICAgIGFzc2VydChpbmZvIGlzIEhTdWJFeHByZXNzaW9uQmxvY2tJbmZvcm1hdGlvbik7CiAgICBIU3ViRXhwcmVzc2lvbkJsb2NrSW5mb3JtYXRpb24gZXhwcmVzc2lvbkluZm8gPSBpbmZvOwogICAgU3ViR3JhcGggbGltaXRzID0gZXhwcmVzc2lvbkluZm8uc3ViRXhwcmVzc2lvbjsKCiAgICAvLyBTdGFydCBhc3N1bWluZyB0aGF0IHdlIGNhbiBnZW5lcmF0ZSBkZWNsYXJhdGlvbnMuIElmIHdlIGZpbmQgYQogICAgLy8gY291bnRlci1leGFtcGxlLCB3ZSBkZWdyYWRlIG91ciBhc3N1bXB0aW9uIHRvIGVpdGhlciBleHByZXNzaW9uIG9yCiAgICAvLyBzdGF0ZW1lbnQsIGFuZCBpbiB0aGUgbGF0dGVyIGNhc2UsIHdlIGNhbiByZXR1cm4gaW1tZWRpYXRlbHkgc2luY2UKICAgIC8vIGl0IGNhbid0IGdldCBhbnkgd29yc2UuIEUuZy4sIGEgZnVuY3Rpb24gY2FsbCB3aGVyZSB0aGUgcmV0dXJuIHZhbHVlCiAgICAvLyBpc24ndCB1c2VkIGNhbid0IGJlIGluIGEgZGVjbGFyYXRpb24uCiAgICBpbnQgcmVzdWx0ID0gVFlQRV9ERUNMQVJBVElPTjsKICAgIEhCYXNpY0Jsb2NrIGJhc2ljQmxvY2sgPSBsaW1pdHMuc3RhcnQ7CiAgICBkbyB7CiAgICAgIEhJbnN0cnVjdGlvbiBjdXJyZW50ID0gYmFzaWNCbG9jay5maXJzdDsKICAgICAgd2hpbGUgKGN1cnJlbnQgIT0gYmFzaWNCbG9jay5sYXN0KSB7CiAgICAgICAgLy8gRS5nLCBib3VuZHMgY2hlY2suCiAgICAgICAgaWYgKGN1cnJlbnQuaXNDb250cm9sRmxvdygpKSB7CiAgICAgICAgICByZXR1cm4gVFlQRV9TVEFURU1FTlQ7CiAgICAgICAgfQogICAgICAgIC8vIEhGaWVsZFNldCBnZW5lcmF0ZXMgY29kZSBvbiB0aGUgZm9ybSAieC55ID0gLi4uIiwgd2hpY2ggaXNuJ3QgdmFsaWQKICAgICAgICAvLyBpbiBhIGRlY2xhcmF0aW9uLgogICAgICAgIGlmIChjdXJyZW50LnVzZWRCeS5pc0VtcHR5IHx8IGN1cnJlbnQgaXMgSEZpZWxkU2V0KSB7CiAgICAgICAgICByZXN1bHQgPSBUWVBFX0VYUFJFU1NJT047CiAgICAgICAgfQogICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7CiAgICAgIH0KICAgICAgaWYgKGN1cnJlbnQgaXMgSEdvdG8pIHsKICAgICAgICBiYXNpY0Jsb2NrID0gYmFzaWNCbG9jay5zdWNjZXNzb3JzWzBdOwogICAgICB9IGVsc2UgaWYgKGN1cnJlbnQgaXMgSENvbmRpdGlvbmFsQnJhbmNoKSB7CiAgICAgICAgaWYgKGdlbmVyYXRlQXRVc2VTaXRlLmNvbnRhaW5zKGN1cnJlbnQpKSB7CiAgICAgICAgICAvLyBTaG9ydC1jaXJjdWl0IGNvbnRyb2wgZmxvdyBvcGVyYXRvciB0cmlja2VyeS4KICAgICAgICAgIC8vIENoZWNrIHRoZSBzZWNvbmQgaGFsZiwgd2hpY2ggd2lsbCBjb250aW51ZSBpbnRvIHRoZSBqb2luLgogICAgICAgICAgLy8gKFRoZSBmaXJzdCBoYWxmIGlzIFtpbnB1dHNbMF1dLCB0aGUgc2Vjb25kIGhhbGYgaXMgW3N1Y2Nlc3NvcnNbMF1dLAogICAgICAgICAgLy8gYW5kIFtzdWNjZXNzb3JzWzFdXSBpcyB0aGUgam9pbi1ibG9jaykuCiAgICAgICAgICBiYXNpY0Jsb2NrID0gYmFzaWNCbG9jay5zdWNjZXNzb3JzWzBdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBXZSBhbGxvdyBhbiBleHByZXNzaW9uIHRvIGVuZCBvbiBhbiBISWYgKGEgY29uZGl0aW9uIGV4cHJlc3Npb24pLgogICAgICAgICAgcmV0dXJuIGlkZW50aWNhbChiYXNpY0Jsb2NrLCBsaW1pdHMuZW5kKSA/IHJlc3VsdCA6IFRZUEVfU1RBVEVNRU5UOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBFeHByZXNzaW9uLWluY29tcGF0aWJsZSBjb250cm9sIGZsb3cuCiAgICAgICAgcmV0dXJuIFRZUEVfU1RBVEVNRU5UOwogICAgICB9CiAgICB9IHdoaWxlIChsaW1pdHMuY29udGFpbnMoYmFzaWNCbG9jaykpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGJvb2wgaXNKU0V4cHJlc3Npb24oSEV4cHJlc3Npb25JbmZvcm1hdGlvbiBpbmZvKSB7CiAgICByZXR1cm4gIWlkZW50aWNhbChleHByZXNzaW9uVHlwZShpbmZvKSwgVFlQRV9TVEFURU1FTlQpOwogIH0KCiAgYm9vbCBpc0pTQ29uZGl0aW9uKEhFeHByZXNzaW9uSW5mb3JtYXRpb24gaW5mbykgewogICAgSFN1YkV4cHJlc3Npb25CbG9ja0luZm9ybWF0aW9uIGdyYXBoID0gaW5mbzsKICAgIFN1YkV4cHJlc3Npb24gbGltaXRzID0gZ3JhcGguc3ViRXhwcmVzc2lvbjsKICAgIHJldHVybiAhaWRlbnRpY2FsKGV4cHJlc3Npb25UeXBlKGluZm8pLCBUWVBFX1NUQVRFTUVOVCkgJiYKICAgICAgICAobGltaXRzLmVuZC5sYXN0IGlzIEhDb25kaXRpb25hbEJyYW5jaCk7CiAgfQoKICAvLy8gR2VuZXJhdGUgc3RhdGVtZW50cyBmcm9tIGJsb2NrIGluZm9ybWF0aW9uLgogIC8vLyBJZiB0aGUgYmxvY2sgaW5mb3JtYXRpb24gY29udGFpbnMgZXhwcmVzc2lvbnMsIGdlbmVyYXRlIG9ubHkKICAvLy8gYXNzaWdubWVudHMsIGFuZCBpZiBpdCBlbmRzIGluIGEgY29uZGl0aW9uYWwgYnJhbmNoLCBkb24ndCBnZW5lcmF0ZQogIC8vLyB0aGUgY29uZGl0aW9uLgogIHZvaWQgZ2VuZXJhdGVTdGF0ZW1lbnRzKEhCbG9ja0luZm9ybWF0aW9uIGJsb2NrKSB7CiAgICBpZiAoYmxvY2sgaXMgSFN0YXRlbWVudEluZm9ybWF0aW9uKSB7CiAgICAgIGJsb2NrLmFjY2VwdCh0aGlzKTsKICAgIH0gZWxzZSB7CiAgICAgIEhTdWJFeHByZXNzaW9uQmxvY2tJbmZvcm1hdGlvbiBleHByZXNzaW9uID0gYmxvY2s7CiAgICAgIHZpc2l0U3ViR3JhcGgoZXhwcmVzc2lvbi5zdWJFeHByZXNzaW9uKTsKICAgIH0KICB9CgogIGpzLkJsb2NrIGdlbmVyYXRlU3RhdGVtZW50c0luTmV3QmxvY2soSEJsb2NrSW5mb3JtYXRpb24gYmxvY2spIHsKICAgIGpzLkJsb2NrIHJlc3VsdCA9IG5ldyBqcy5CbG9jay5lbXB0eSgpOwogICAganMuQmxvY2sgb2xkQ29udGFpbmVyID0gY3VycmVudENvbnRhaW5lcjsKICAgIGN1cnJlbnRDb250YWluZXIgPSByZXN1bHQ7CiAgICBnZW5lcmF0ZVN0YXRlbWVudHMoYmxvY2spOwogICAgY3VycmVudENvbnRhaW5lciA9IG9sZENvbnRhaW5lcjsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gSWYgdGhlIFtibG9ja10gb25seSBjb250YWlucyBvbmUgc3RhdGVtZW50IHJldHVybnMgdGhhdCBzdGF0ZW1lbnQuIElmIHRoZQogIC8vLyB0aGF0IHN0YXRlbWVudCBpdHNlbGYgaXMgYSBibG9jaywgcmVjdXJzaXZlbHkgY2FsbHMgdGhpcyBtZXRob2QuCiAgLy8vCiAgLy8vIElmIHRoZSBibG9jayBpcyBlbXB0eSwgcmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiBbanMuTk9QXS4KICBqcy5TdGF0ZW1lbnQgdW53cmFwU3RhdGVtZW50KGpzLkJsb2NrIGJsb2NrKSB7CiAgICBpbnQgbGVuID0gYmxvY2suc3RhdGVtZW50cy5sZW5ndGg7CiAgICBpZiAobGVuID09IDApIHJldHVybiBuZXcganMuRW1wdHlTdGF0ZW1lbnQoKTsKICAgIGlmIChsZW4gPT0gMSkgewogICAgICBqcy5TdGF0ZW1lbnQgcmVzdWx0ID0gYmxvY2suc3RhdGVtZW50c1swXTsKICAgICAgaWYgKHJlc3VsdCBpcyBqcy5CbG9jaykgcmV0dXJuIHVud3JhcFN0YXRlbWVudChyZXN1bHQpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgcmV0dXJuIGJsb2NrOwogIH0KCiAgLy8vIEdlbmVyYXRlIGV4cHJlc3Npb25zIGZyb20gYmxvY2sgaW5mb3JtYXRpb24uCiAganMuRXhwcmVzc2lvbiBnZW5lcmF0ZUV4cHJlc3Npb24oSEV4cHJlc3Npb25JbmZvcm1hdGlvbiBleHByZXNzaW9uKSB7CiAgICAvLyBDdXJyZW50bHkgd2Ugb25seSBoYW5kbGUgc3ViLWV4cHJlc3Npb24gZ3JhcGhzLgogICAgYXNzZXJ0KGV4cHJlc3Npb24gaXMgSFN1YkV4cHJlc3Npb25CbG9ja0luZm9ybWF0aW9uKTsKCiAgICBib29sIG9sZElzR2VuZXJhdGluZ0V4cHJlc3Npb24gPSBpc0dlbmVyYXRpbmdFeHByZXNzaW9uOwogICAgaXNHZW5lcmF0aW5nRXhwcmVzc2lvbiA9IHRydWU7CiAgICBMaXN0PGpzLkV4cHJlc3Npb24+IG9sZEV4cHJlc3Npb25TdGFjayA9IGV4cHJlc3Npb25TdGFjazsKICAgIExpc3Q8anMuRXhwcmVzc2lvbj4gc2VxdWVuY2VFbGVtZW50cyA9IDxqcy5FeHByZXNzaW9uPltdOwogICAgZXhwcmVzc2lvblN0YWNrID0gc2VxdWVuY2VFbGVtZW50czsKICAgIEhTdWJFeHByZXNzaW9uQmxvY2tJbmZvcm1hdGlvbiBleHByZXNzaW9uU3ViR3JhcGggPSBleHByZXNzaW9uOwogICAgdmlzaXRTdWJHcmFwaChleHByZXNzaW9uU3ViR3JhcGguc3ViRXhwcmVzc2lvbik7CiAgICBleHByZXNzaW9uU3RhY2sgPSBvbGRFeHByZXNzaW9uU3RhY2s7CiAgICBpc0dlbmVyYXRpbmdFeHByZXNzaW9uID0gb2xkSXNHZW5lcmF0aW5nRXhwcmVzc2lvbjsKICAgIGlmIChzZXF1ZW5jZUVsZW1lbnRzLmlzRW1wdHkpIHsKICAgICAgLy8gSGFwcGVucyB3aGVuIHRoZSBpbml0aWFsaXplciwgY29uZGl0aW9uIG9yIHVwZGF0ZSBvZiBhIGxvb3AgaXMgZW1wdHkuCiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIGlmIChzZXF1ZW5jZUVsZW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHJldHVybiBzZXF1ZW5jZUVsZW1lbnRzWzBdOwogICAgfSBlbHNlIHsKICAgICAganMuRXhwcmVzc2lvbiByZXN1bHQgPSBzZXF1ZW5jZUVsZW1lbnRzLnJlbW92ZUxhc3QoKTsKICAgICAgd2hpbGUgKHNlcXVlbmNlRWxlbWVudHMuaXNOb3RFbXB0eSkgewogICAgICAgIHJlc3VsdCA9IG5ldyBqcy5CaW5hcnkoJywnLCBzZXF1ZW5jZUVsZW1lbnRzLnJlbW92ZUxhc3QoKSwgcmVzdWx0KTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogIH0KCiAgLy8vIE9ubHkgdmlzaXRzIHRoZSBhcmd1bWVudHMgc3RhcnRpbmcgYXQgaW5wdXRzW0hJbnZva2UuQVJHVU1FTlRTX09GRlNFVF0uCiAgTGlzdDxqcy5FeHByZXNzaW9uPiB2aXNpdEFyZ3VtZW50cyhMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzLAogICAgICB7aW50IHN0YXJ0OiBISW52b2tlLkFSR1VNRU5UU19PRkZTRVR9KSB7CiAgICBhc3NlcnQoaW5wdXRzLmxlbmd0aCA+PSBzdGFydCk7CiAgICBMaXN0PGpzLkV4cHJlc3Npb24+IHJlc3VsdCA9IG5ldyBMaXN0PGpzLkV4cHJlc3Npb24+KGlucHV0cy5sZW5ndGggLSBzdGFydCk7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgdXNlKGlucHV0c1tpXSk7CiAgICAgIHJlc3VsdFtpIC0gc3RhcnRdID0gcG9wKCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgYm9vbCBpc1ZhcmlhYmxlRGVjbGFyZWQoU3RyaW5nIHZhcmlhYmxlTmFtZSkgewogICAgcmV0dXJuIGRlY2xhcmVkTG9jYWxzLmNvbnRhaW5zKHZhcmlhYmxlTmFtZSkgfHwKICAgICAgICBjb2xsZWN0ZWRWYXJpYWJsZURlY2xhcmF0aW9ucy5jb250YWlucyh2YXJpYWJsZU5hbWUpOwogIH0KCiAganMuRXhwcmVzc2lvbiBnZW5lcmF0ZUV4cHJlc3Npb25Bc3NpZ25tZW50KFN0cmluZyB2YXJpYWJsZU5hbWUsCiAgICAgIGpzLkV4cHJlc3Npb24gdmFsdWUsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJbnRyb2R1Y2UgYSBEZWZlcnJlZFZhcmlhYmxlVXNlIHRvIGhhbmRsZSB0aGlzCiAgICAvLyBpbiB0aGUgU1NBIGNvZGVnZW4gb3IgbGV0IHRoZSBKUyBwcmludGVyIGhhbmRsZSBpdCBmdWxseSBhbmQgcmVtb3ZlIGl0CiAgICAvLyBoZXJlLgogICAgaWYgKHZhbHVlIGlzIGpzLkJpbmFyeSkgewogICAgICBqcy5CaW5hcnkgYmluYXJ5ID0gdmFsdWU7CiAgICAgIFN0cmluZyBvcCA9IGJpbmFyeS5vcDsKICAgICAgaWYgKG9wID09ICcrJyB8fAogICAgICAgICAgb3AgPT0gJy0nIHx8CiAgICAgICAgICBvcCA9PSAnLycgfHwKICAgICAgICAgIG9wID09ICcqJyB8fAogICAgICAgICAgb3AgPT0gJyUnIHx8CiAgICAgICAgICBvcCA9PSAnXicgfHwKICAgICAgICAgIG9wID09ICcmJyB8fAogICAgICAgICAgb3AgPT0gJ3wnKSB7CiAgICAgICAganMuRXhwcmVzc2lvbiBsZWZ0ID0gYmluYXJ5LmxlZnQ7CiAgICAgICAgaWYgKGxlZnQgaXMganMuVmFyaWFibGVVc2UgJiYgbGVmdC5uYW1lID09IHZhcmlhYmxlTmFtZSkgewogICAgICAgICAgLy8gV2Uga25vdyBub3csIHRoYXQgd2UgY2FuIHNob3J0ZW4geCA9IHggKyB5IGludG8geCArPSB5LgogICAgICAgICAgLy8gQWxzbyBjaGVjayBmb3IgdGhlIHNob3J0Y3V0IHdoZXJlIHkgZXF1YWxzIDE6IHgrKyBhbmQgeC0tLgogICAgICAgICAganMuRXhwcmVzc2lvbiByaWdodCA9IGJpbmFyeS5yaWdodDsKICAgICAgICAgIGlmICgob3AgPT0gJysnIHx8IG9wID09ICctJykgJiYKICAgICAgICAgICAgICByaWdodCBpcyBqcy5MaXRlcmFsTnVtYmVyICYmCiAgICAgICAgICAgICAgcmlnaHQudmFsdWUgPT0gIjEiKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcganMuUHJlZml4KG9wID09ICcrJyA/ICcrKycgOiAnLS0nLCBsZWZ0KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBuZXcganMuQXNzaWdubWVudC5jb21wb3VuZChiaW5hcnkubGVmdCwgb3AsIGJpbmFyeS5yaWdodCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IGpzLkFzc2lnbm1lbnQobmV3IGpzLlZhcmlhYmxlVXNlKHZhcmlhYmxlTmFtZSksIHZhbHVlKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24odmFsdWUuc291cmNlSW5mb3JtYXRpb24gPz8gc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgdm9pZCBhc3NpZ25WYXJpYWJsZShTdHJpbmcgdmFyaWFibGVOYW1lLCBqcy5FeHByZXNzaW9uIHZhbHVlLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgaWYgKGlzR2VuZXJhdGluZ0V4cHJlc3Npb24pIHsKICAgICAgLy8gSWYgd2UgYXJlIGluIGFuIGV4cHJlc3Npb24gdGhlbiB3ZSBjYW4ndCBkZWNsYXJlIHRoZSB2YXJpYWJsZSBoZXJlLgogICAgICAvLyBXZSBoYXZlIG5vIGNob2ljZSwgYnV0IHRvIHVzZSBpdCBhbmQgdGhlbiBkZWNsYXJlIGl0IHNlcGFyYXRlbHkuCiAgICAgIGlmICghaXNWYXJpYWJsZURlY2xhcmVkKHZhcmlhYmxlTmFtZSkpIHsKICAgICAgICBjb2xsZWN0ZWRWYXJpYWJsZURlY2xhcmF0aW9ucy5hZGQodmFyaWFibGVOYW1lKTsKICAgICAgfQogICAgICBwdXNoKAogICAgICAgICAgZ2VuZXJhdGVFeHByZXNzaW9uQXNzaWdubWVudCh2YXJpYWJsZU5hbWUsIHZhbHVlLCBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICAvLyBPdGhlcndpc2UgaWYgd2UgYXJlIHRyeWluZyB0byBkZWNsYXJlIGlubGluZSBhbmQgd2UgYXJlIGluIGEgc3RhdGVtZW50CiAgICAgIC8vIHRoZW4gd2UgZGVjbGFyZSAodW5sZXNzIGl0IHdhcyBhbHJlYWR5IGRlY2xhcmVkKS4KICAgIH0gZWxzZSBpZiAoIXNob3VsZEdyb3VwVmFyRGVjbGFyYXRpb25zICYmCiAgICAgICAgIWRlY2xhcmVkTG9jYWxzLmNvbnRhaW5zKHZhcmlhYmxlTmFtZSkpIHsKICAgICAgLy8gSXQgbWF5IGJlIG5lY2Vzc2FyeSB0byByZW1vdmUgaXQgZnJvbSB0aGUgb25lcyB0byBiZSBkZWNsYXJlZCBsYXRlci4KICAgICAgY29sbGVjdGVkVmFyaWFibGVEZWNsYXJhdGlvbnMucmVtb3ZlKHZhcmlhYmxlTmFtZSk7CiAgICAgIGRlY2xhcmVkTG9jYWxzLmFkZCh2YXJpYWJsZU5hbWUpOwogICAgICBqcy5WYXJpYWJsZURlY2xhcmF0aW9uIGRlY2wgPSBuZXcganMuVmFyaWFibGVEZWNsYXJhdGlvbih2YXJpYWJsZU5hbWUpOwogICAgICBqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uIGluaXRpYWxpemF0aW9uID0KICAgICAgICAgIG5ldyBqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uKGRlY2wsIHZhbHVlKTsKCiAgICAgIHB1c2hFeHByZXNzaW9uQXNTdGF0ZW1lbnQoCiAgICAgICAgICBuZXcganMuVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoCiAgICAgICAgICAgICAgPGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24+W2luaXRpYWxpemF0aW9uXSksCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9IGVsc2UgewogICAgICAvLyBPdGhlcndpc2Ugd2UgYXJlIGp1c3QgZ29pbmcgdG8gdXNlIGl0LiAgSWYgd2UgaGF2ZSBub3QgYWxyZWFkeSBkZWNsYXJlZAogICAgICAvLyBpdCB0aGVuIHdlIG1ha2Ugc3VyZSB3ZSB3aWxsIGRlY2xhcmUgaXQgbGF0ZXIuCiAgICAgIGlmICghZGVjbGFyZWRMb2NhbHMuY29udGFpbnModmFyaWFibGVOYW1lKSkgewogICAgICAgIGNvbGxlY3RlZFZhcmlhYmxlRGVjbGFyYXRpb25zLmFkZCh2YXJpYWJsZU5hbWUpOwogICAgICB9CiAgICAgIHB1c2hFeHByZXNzaW9uQXNTdGF0ZW1lbnQoCiAgICAgICAgICBnZW5lcmF0ZUV4cHJlc3Npb25Bc3NpZ25tZW50KHZhcmlhYmxlTmFtZSwgdmFsdWUsIHNvdXJjZUluZm9ybWF0aW9uKSwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0KICB9CgogIHZvaWQgZGVmaW5lKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgLy8gRm9yIHNpbXBsZSB0eXBlIGNoZWNrcyBsaWtlIGkgPSBpbnRUeXBlQ2hlY2soaSksIHdlIGRvbid0IGhhdmUgdG8KICAgIC8vIGVtaXQgYW4gYXNzaWdubWVudCwgYmVjYXVzZSB0aGUgaW50VHlwZUNoZWNrIGp1c3QgcmV0dXJucyBpdHMKICAgIC8vIGFyZ3VtZW50LgogICAgYm9vbCBuZWVkc0Fzc2lnbm1lbnQgPSB0cnVlOwogICAgaWYgKGluc3RydWN0aW9uIGlzIEhDaGVjaykgewogICAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSFR5cGVDb252ZXJzaW9uIHx8CiAgICAgICAgICBpbnN0cnVjdGlvbiBpcyBIUHJpbWl0aXZlQ2hlY2sgfHwKICAgICAgICAgIGluc3RydWN0aW9uIGlzIEhBc0NoZWNrIHx8CiAgICAgICAgICBpbnN0cnVjdGlvbiBpcyBIQXNDaGVja1NpbXBsZSB8fAogICAgICAgICAgaW5zdHJ1Y3Rpb24gaXMgSEJvb2xDb252ZXJzaW9uKSB7CiAgICAgICAgU3RyaW5nIGlucHV0TmFtZSA9IHZhcmlhYmxlTmFtZXMuZ2V0TmFtZShpbnN0cnVjdGlvbi5jaGVja2VkSW5wdXQpOwogICAgICAgIGlmICh2YXJpYWJsZU5hbWVzLmdldE5hbWUoaW5zdHJ1Y3Rpb24pID09IGlucHV0TmFtZSkgewogICAgICAgICAgbmVlZHNBc3NpZ25tZW50ID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSExvY2FsVmFsdWUpIHsKICAgICAgbmVlZHNBc3NpZ25tZW50ID0gZmFsc2U7CiAgICB9CgogICAgaWYgKG5lZWRzQXNzaWdubWVudCAmJgogICAgICAgICFpbnN0cnVjdGlvbi5pc0NvbnRyb2xGbG93KCkgJiYKICAgICAgICB2YXJpYWJsZU5hbWVzLmhhc05hbWUoaW5zdHJ1Y3Rpb24pKSB7CiAgICAgIHZpc2l0RXhwcmVzc2lvbihpbnN0cnVjdGlvbik7CiAgICAgIGFzc2lnblZhcmlhYmxlKHZhcmlhYmxlTmFtZXMuZ2V0TmFtZShpbnN0cnVjdGlvbiksIHBvcCgpLAogICAgICAgICAgaW5zdHJ1Y3Rpb24uc291cmNlSW5mb3JtYXRpb24pOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGlzR2VuZXJhdGluZ0V4cHJlc3Npb24pIHsKICAgICAgdmlzaXRFeHByZXNzaW9uKGluc3RydWN0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIHZpc2l0U3RhdGVtZW50KGluc3RydWN0aW9uKTsKICAgIH0KICB9CgogIHZvaWQgdXNlKEhJbnN0cnVjdGlvbiBhcmd1bWVudCkgewogICAgaWYgKGlzR2VuZXJhdGVBdFVzZVNpdGUoYXJndW1lbnQpKSB7CiAgICAgIHZpc2l0RXhwcmVzc2lvbihhcmd1bWVudCk7CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50IGlzIEhDaGVjayAmJiAhdmFyaWFibGVOYW1lcy5oYXNOYW1lKGFyZ3VtZW50KSkgewogICAgICBIQ2hlY2sgY2hlY2sgPSBhcmd1bWVudDsKICAgICAgLy8gVGhpcyBjYW4gb25seSBoYXBwZW4gaWYgdGhlIGNoZWNrZWQgbm9kZSBkb2VzIG5vdCBoYXZlIGEgbmFtZS4KICAgICAgYXNzZXJ0KCF2YXJpYWJsZU5hbWVzLmhhc05hbWUoY2hlY2suY2hlY2tlZElucHV0KSk7CiAgICAgIHVzZShjaGVjay5jaGVja2VkSW5wdXQpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KHZhcmlhYmxlTmFtZXMuaGFzTmFtZShhcmd1bWVudCkpOwogICAgICBwdXNoKG5ldyBqcy5WYXJpYWJsZVVzZSh2YXJpYWJsZU5hbWVzLmdldE5hbWUoYXJndW1lbnQpKSk7CiAgICB9CiAgfQoKICB2aXNpdChISW5zdHJ1Y3Rpb24gbm9kZSkgewogICAgbm9kZS5hY2NlcHQodGhpcyk7CiAgfQoKICB2aXNpdEV4cHJlc3Npb24oSEluc3RydWN0aW9uIG5vZGUpIHsKICAgIGJvb2wgb2xkSXNHZW5lcmF0aW5nRXhwcmVzc2lvbiA9IGlzR2VuZXJhdGluZ0V4cHJlc3Npb247CiAgICBpc0dlbmVyYXRpbmdFeHByZXNzaW9uID0gdHJ1ZTsKICAgIHZpc2l0KG5vZGUpOwogICAgaXNHZW5lcmF0aW5nRXhwcmVzc2lvbiA9IG9sZElzR2VuZXJhdGluZ0V4cHJlc3Npb247CiAgfQoKICB2aXNpdFN0YXRlbWVudChISW5zdHJ1Y3Rpb24gbm9kZSkgewogICAgYXNzZXJ0KCFpc0dlbmVyYXRpbmdFeHByZXNzaW9uKTsKICAgIHZpc2l0KG5vZGUpOwogICAgaWYgKCFleHByZXNzaW9uU3RhY2suaXNFbXB0eSkgewogICAgICBhc3NlcnQoZXhwcmVzc2lvblN0YWNrLmxlbmd0aCA9PSAxKTsKICAgICAganMuRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcG9wKCk7CiAgICAgIHB1c2hFeHByZXNzaW9uQXNTdGF0ZW1lbnQoZXhwcmVzc2lvbiwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CiAgfQoKICB2b2lkIGNvbnRpbnVlQXNCcmVhayhMYWJlbERlZmluaXRpb24gdGFyZ2V0KSB7CiAgICBwdXNoU3RhdGVtZW50KG5ldyBqcy5CcmVhayhfbmFtZXIuY29udGludWVMYWJlbE5hbWUodGFyZ2V0KSkpOwogIH0KCiAgdm9pZCBpbXBsaWNpdENvbnRpbnVlQXNCcmVhayhKdW1wVGFyZ2V0IHRhcmdldCkgewogICAgcHVzaFN0YXRlbWVudChuZXcganMuQnJlYWsoX25hbWVyLmltcGxpY2l0Q29udGludWVMYWJlbE5hbWUodGFyZ2V0KSkpOwogIH0KCiAgdm9pZCBpbXBsaWNpdEJyZWFrV2l0aExhYmVsKEp1bXBUYXJnZXQgdGFyZ2V0KSB7CiAgICBwdXNoU3RhdGVtZW50KG5ldyBqcy5CcmVhayhfbmFtZXIuaW1wbGljaXRCcmVha0xhYmVsTmFtZSh0YXJnZXQpKSk7CiAgfQoKICBqcy5TdGF0ZW1lbnQgd3JhcEludG9MYWJlbHMoCiAgICAgIGpzLlN0YXRlbWVudCByZXN1bHQsIExpc3Q8TGFiZWxEZWZpbml0aW9uPiBsYWJlbHMpIHsKICAgIGZvciAoTGFiZWxEZWZpbml0aW9uIGxhYmVsIGluIGxhYmVscykgewogICAgICBpZiAobGFiZWwuaXNUYXJnZXQpIHsKICAgICAgICBTdHJpbmcgYnJlYWtMYWJlbFN0cmluZyA9IF9uYW1lci5icmVha0xhYmVsTmFtZShsYWJlbCk7CiAgICAgICAgcmVzdWx0ID0gbmV3IGpzLkxhYmVsZWRTdGF0ZW1lbnQoYnJlYWtMYWJlbFN0cmluZywgcmVzdWx0KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIFRoZSByZWd1bGFyIFt2aXNpdElmXSBtZXRob2QgaW1wbGVtZW50cyB0aGUgbmVlZGVkIGxvZ2ljLgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRJZkluZm8oSElmQmxvY2tJbmZvcm1hdGlvbiBpbmZvKSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFN3aXRjaEluZm8oSFN3aXRjaEJsb2NrSW5mb3JtYXRpb24gaW5mbykgewogICAgYm9vbCBpc0V4cHJlc3Npb24gPSBpc0pTRXhwcmVzc2lvbihpbmZvLmV4cHJlc3Npb24pOwogICAgaWYgKCFpc0V4cHJlc3Npb24pIHsKICAgICAgZ2VuZXJhdGVTdGF0ZW1lbnRzKGluZm8uZXhwcmVzc2lvbik7CiAgICB9CgogICAgaWYgKGlzRXhwcmVzc2lvbikgewogICAgICBwdXNoKGdlbmVyYXRlRXhwcmVzc2lvbihpbmZvLmV4cHJlc3Npb24pKTsKICAgIH0gZWxzZSB7CiAgICAgIHVzZShpbmZvLmV4cHJlc3Npb24uY29uZGl0aW9uRXhwcmVzc2lvbik7CiAgICB9CiAgICBqcy5FeHByZXNzaW9uIGtleSA9IHBvcCgpOwogICAgYm9vbCBoYW5kbGVkRGVmYXVsdCA9IGZhbHNlOwogICAgTGlzdDxqcy5Td2l0Y2hDbGF1c2U+IGNhc2VzID0gPGpzLlN3aXRjaENsYXVzZT5bXTsKICAgIEhTd2l0Y2ggc3dpdGNoSW5zdHJ1Y3Rpb24gPSBpbmZvLmV4cHJlc3Npb24uZW5kLmxhc3Q7CiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzID0gc3dpdGNoSW5zdHJ1Y3Rpb24uaW5wdXRzOwogICAgTGlzdDxIQmFzaWNCbG9jaz4gc3VjY2Vzc29ycyA9IHN3aXRjaEluc3RydWN0aW9uLmJsb2NrLnN1Y2Nlc3NvcnM7CgogICAganMuQmxvY2sgb2xkQ29udGFpbmVyID0gY3VycmVudENvbnRhaW5lcjsKICAgIGZvciAoaW50IGlucHV0SW5kZXggPSAxLCBzdGF0ZW1lbnRJbmRleCA9IDA7CiAgICAgICAgaW5wdXRJbmRleCA8IGlucHV0cy5sZW5ndGg7CiAgICAgICAgc3RhdGVtZW50SW5kZXgrKykgewogICAgICBIQmFzaWNCbG9jayBzdWNjZXNzb3IgPSBzdWNjZXNzb3JzW2lucHV0SW5kZXggLSAxXTsKICAgICAgLy8gSWYgbGl2ZW5lc3MgYW5hbHlzaXMgaGFzIGZpZ3VyZWQgb3V0IHRoYXQgdGhpcyBjYXNlIGlzIGRlYWQsCiAgICAgIC8vIG9taXQgdGhlIGNvZGUgZm9yIGl0LgogICAgICBpZiAoc3VjY2Vzc29yLmlzTGl2ZSkgewogICAgICAgIGRvIHsKICAgICAgICAgIHZpc2l0KGlucHV0c1tpbnB1dEluZGV4XSk7CiAgICAgICAgICBjdXJyZW50Q29udGFpbmVyID0gbmV3IGpzLkJsb2NrLmVtcHR5KCk7CiAgICAgICAgICBjYXNlcy5hZGQobmV3IGpzLkNhc2UocG9wKCksIGN1cnJlbnRDb250YWluZXIpKTsKICAgICAgICAgIGlucHV0SW5kZXgrKzsKICAgICAgICB9IHdoaWxlICgoc3VjY2Vzc29yc1tpbnB1dEluZGV4IC0gMV0gPT0gc3VjY2Vzc29yKSAmJgogICAgICAgICAgICAoaW5wdXRJbmRleCA8IGlucHV0cy5sZW5ndGgpKTsKCiAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgbGFzdCBzdGF0ZW1lbnQsIHRoZW4gdGhlc2UgY2FzZXMgYWxzbyBiZWxvbmcgdG8gdGhlCiAgICAgICAgLy8gZGVmYXVsdCBibG9jay4KICAgICAgICBpZiAoc3RhdGVtZW50SW5kZXggPT0gaW5mby5zdGF0ZW1lbnRzLmxlbmd0aCAtIDEpIHsKICAgICAgICAgIGN1cnJlbnRDb250YWluZXIgPSBuZXcganMuQmxvY2suZW1wdHkoKTsKICAgICAgICAgIGNhc2VzLmFkZChuZXcganMuRGVmYXVsdChjdXJyZW50Q29udGFpbmVyKSk7CiAgICAgICAgICBoYW5kbGVkRGVmYXVsdCA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICBnZW5lcmF0ZVN0YXRlbWVudHMoaW5mby5zdGF0ZW1lbnRzW3N0YXRlbWVudEluZGV4XSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gU2tpcCBhbGwgdGhlIGNhc2Ugc3RhdGVtZW50cyB0aGF0IGJlbG9uZyB0byB0aGlzCiAgICAgICAgLy8gYmxvY2suCiAgICAgICAgd2hpbGUgKChzdWNjZXNzb3JzW2lucHV0SW5kZXggLSAxXSA9PSBzdWNjZXNzb3IpICYmCiAgICAgICAgICAgIChpbnB1dEluZGV4IDwgaW5wdXRzLmxlbmd0aCkpIHsKICAgICAgICAgICsraW5wdXRJbmRleDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBJZiB0aGUgZGVmYXVsdCBjYXNlIGlzIGRlYWQsIHdlIG9taXQgaXQuIExpa2V3aXNlLCBpZiBpdCBpcyBhbgogICAgLy8gZW1wdHkgYmxvY2ssIHdlIG9taXQgaXQsIHRvby4KICAgIGlmIChpbmZvLnN0YXRlbWVudHMubGFzdC5zdGFydC5pc0xpdmUgJiYgIWhhbmRsZWREZWZhdWx0KSB7CiAgICAgIGN1cnJlbnRDb250YWluZXIgPSBuZXcganMuQmxvY2suZW1wdHkoKTsKICAgICAgZ2VuZXJhdGVTdGF0ZW1lbnRzKGluZm8uc3RhdGVtZW50cy5sYXN0KTsKICAgICAgaWYgKGN1cnJlbnRDb250YWluZXIuc3RhdGVtZW50cy5pc05vdEVtcHR5KSB7CiAgICAgICAgY2FzZXMuYWRkKG5ldyBqcy5EZWZhdWx0KGN1cnJlbnRDb250YWluZXIpKTsKICAgICAgfQogICAgfQoKICAgIGN1cnJlbnRDb250YWluZXIgPSBvbGRDb250YWluZXI7CgogICAganMuU3RhdGVtZW50IHJlc3VsdCA9CiAgICAgICAgbmV3IGpzLlN3aXRjaChrZXksIGNhc2VzKS53aXRoU291cmNlSW5mb3JtYXRpb24oaW5mby5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICBwdXNoU3RhdGVtZW50KHdyYXBJbnRvTGFiZWxzKHJlc3VsdCwgaW5mby5sYWJlbHMpKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFNlcXVlbmNlSW5mbyhIU3RhdGVtZW50U2VxdWVuY2VJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0U3ViR3JhcGhJbmZvKEhTdWJHcmFwaEJsb2NrSW5mb3JtYXRpb24gaW5mbykgewogICAgdmlzaXRTdWJHcmFwaChpbmZvLnN1YkdyYXBoKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFN1YkV4cHJlc3Npb25JbmZvKEhTdWJFeHByZXNzaW9uQmxvY2tJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0QW5kT3JJbmZvKEhBbmRPckJsb2NrSW5mb3JtYXRpb24gaW5mbykgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFRyeUluZm8oSFRyeUJsb2NrSW5mb3JtYXRpb24gaW5mbykgewogICAganMuQmxvY2sgYm9keSA9IGdlbmVyYXRlU3RhdGVtZW50c0luTmV3QmxvY2soaW5mby5ib2R5KTsKICAgIGpzLkNhdGNoIGNhdGNoUGFydCA9IG51bGw7CiAgICBqcy5CbG9jayBmaW5hbGx5UGFydCA9IG51bGw7CiAgICBpZiAoaW5mby5jYXRjaEJsb2NrICE9IG51bGwpIHsKICAgICAgdm9pZCByZWdpc3RlcihDbGFzc0VudGl0eSBjbGFzc0VsZW1lbnQpIHsKICAgICAgICBpZiAoY2xhc3NFbGVtZW50ICE9IG51bGwpIHsKICAgICAgICAgIF9yZWdpc3RyeQogICAgICAgICAgICAgIC8vIGlnbm9yZTpkZXByZWNhdGVkX21lbWJlcl91c2VfZnJvbV9zYW1lX3BhY2thZ2UKICAgICAgICAgICAgICAucmVnaXN0ZXJJbnN0YW50aWF0ZWRDbGFzcyhjbGFzc0VsZW1lbnQpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgcmVnaXN0ZXIoX2NvbW1vbkVsZW1lbnRzLmpzUGxhaW5KYXZhU2NyaXB0T2JqZWN0Q2xhc3MpOwogICAgICByZWdpc3RlcihfY29tbW9uRWxlbWVudHMuanNVbmtub3duSmF2YVNjcmlwdE9iamVjdENsYXNzKTsKCiAgICAgIEhMb2NhbFZhbHVlIGV4Y2VwdGlvbiA9IGluZm8uY2F0Y2hWYXJpYWJsZTsKICAgICAgU3RyaW5nIG5hbWUgPSB2YXJpYWJsZU5hbWVzLmdldE5hbWUoZXhjZXB0aW9uKTsKICAgICAganMuVmFyaWFibGVEZWNsYXJhdGlvbiBkZWNsID0gbmV3IGpzLlZhcmlhYmxlRGVjbGFyYXRpb24obmFtZSk7CiAgICAgIGpzLkJsb2NrIGNhdGNoQmxvY2sgPSBnZW5lcmF0ZVN0YXRlbWVudHNJbk5ld0Jsb2NrKGluZm8uY2F0Y2hCbG9jayk7CiAgICAgIGNhdGNoUGFydCA9IG5ldyBqcy5DYXRjaChkZWNsLCBjYXRjaEJsb2NrKTsKICAgIH0KICAgIGlmIChpbmZvLmZpbmFsbHlCbG9jayAhPSBudWxsKSB7CiAgICAgIGZpbmFsbHlQYXJ0ID0gZ2VuZXJhdGVTdGF0ZW1lbnRzSW5OZXdCbG9jayhpbmZvLmZpbmFsbHlCbG9jayk7CiAgICB9CiAgICBwdXNoU3RhdGVtZW50KG5ldyBqcy5UcnkoYm9keSwgY2F0Y2hQYXJ0LCBmaW5hbGx5UGFydCkpOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICB2b2lkIHZpc2l0Qm9keUlnbm9yZUxhYmVscyhITG9vcEJsb2NrSW5mb3JtYXRpb24gaW5mbykgewogICAgaWYgKGluZm8uYm9keS5zdGFydC5pc0xhYmVsZWRCbG9jaygpKSB7CiAgICAgIEhCbG9ja0luZm9ybWF0aW9uIG9sZEluZm8gPSBjdXJyZW50QmxvY2tJbmZvcm1hdGlvbjsKICAgICAgY3VycmVudEJsb2NrSW5mb3JtYXRpb24gPSBpbmZvLmJvZHkuc3RhcnQuYmxvY2tGbG93LmJvZHk7CiAgICAgIGdlbmVyYXRlU3RhdGVtZW50cyhpbmZvLmJvZHkpOwogICAgICBjdXJyZW50QmxvY2tJbmZvcm1hdGlvbiA9IG9sZEluZm87CiAgICB9IGVsc2UgewogICAgICBnZW5lcmF0ZVN0YXRlbWVudHMoaW5mby5ib2R5KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRMb29wSW5mbyhITG9vcEJsb2NrSW5mb3JtYXRpb24gaW5mbykgewogICAgSEV4cHJlc3Npb25JbmZvcm1hdGlvbiBjb25kaXRpb24gPSBpbmZvLmNvbmRpdGlvbjsKICAgIGJvb2wgaXNDb25kaXRpb25FeHByZXNzaW9uID0gaXNKU0NvbmRpdGlvbihjb25kaXRpb24pOwoKICAgIGpzLkxvb3AgbG9vcDsKCiAgICBzd2l0Y2ggKGluZm8ua2luZCkgewogICAgICAvLyBUcmVhdCBhbGwgdGhyZWUgInRlc3QtZmlyc3QiIGxvb3BzIHRoZSBzYW1lIHdheS4KICAgICAgY2FzZSBITG9vcEJsb2NrSW5mb3JtYXRpb24uRk9SX0xPT1A6CiAgICAgIGNhc2UgSExvb3BCbG9ja0luZm9ybWF0aW9uLldISUxFX0xPT1A6CiAgICAgIGNhc2UgSExvb3BCbG9ja0luZm9ybWF0aW9uLkZPUl9JTl9MT09QOgogICAgICBjYXNlIEhMb29wQmxvY2tJbmZvcm1hdGlvbi5TV0lUQ0hfQ09OVElOVUVfTE9PUDoKICAgICAgICBIQmxvY2tJbmZvcm1hdGlvbiBpbml0aWFsaXphdGlvbiA9IGluZm8uaW5pdGlhbGl6ZXI7CiAgICAgICAgaW50IGluaXRpYWxpemF0aW9uVHlwZSA9IFRZUEVfU1RBVEVNRU5UOwogICAgICAgIGlmIChpbml0aWFsaXphdGlvbiAhPSBudWxsKSB7CiAgICAgICAgICBpbml0aWFsaXphdGlvblR5cGUgPSBleHByZXNzaW9uVHlwZShpbml0aWFsaXphdGlvbik7CiAgICAgICAgICBpZiAoaW5pdGlhbGl6YXRpb25UeXBlID09IFRZUEVfU1RBVEVNRU5UKSB7CiAgICAgICAgICAgIGdlbmVyYXRlU3RhdGVtZW50cyhpbml0aWFsaXphdGlvbik7CiAgICAgICAgICAgIGluaXRpYWxpemF0aW9uID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFdlIGluc2VydGVkIGEgYmFzaWMgYmxvY2sgdG8gYXZvaWQgY3JpdGljYWwgZWRnZXMuIFRoaXMgYmxvY2sgaXMKICAgICAgICAvLyBwYXJ0IG9mIHRoZSBMb29wQmxvY2tJbmZvcm1hdGlvbiBhbmQgbXVzdCB0aGVyZWZvcmUgYmUgaGFuZGxlZCBoZXJlLgogICAgICAgIGpzLkJsb2NrIG9sZENvbnRhaW5lciA9IGN1cnJlbnRDb250YWluZXI7CiAgICAgICAganMuQmxvY2sgYXZvaWRDb250YWluZXIgPSBuZXcganMuQmxvY2suZW1wdHkoKTsKICAgICAgICBjdXJyZW50Q29udGFpbmVyID0gYXZvaWRDb250YWluZXI7CiAgICAgICAgYXNzaWduUGhpc09mU3VjY2Vzc29ycyhjb25kaXRpb24uZW5kLnN1Y2Nlc3NvcnMubGFzdCk7CiAgICAgICAgYm9vbCBoYXNQaGlVcGRhdGVzID0gIWF2b2lkQ29udGFpbmVyLnN0YXRlbWVudHMuaXNFbXB0eTsKICAgICAgICBjdXJyZW50Q29udGFpbmVyID0gb2xkQ29udGFpbmVyOwoKICAgICAgICBpZiAoaXNDb25kaXRpb25FeHByZXNzaW9uICYmCiAgICAgICAgICAgICFoYXNQaGlVcGRhdGVzICYmCiAgICAgICAgICAgIGluZm8udXBkYXRlcyAhPSBudWxsICYmCiAgICAgICAgICAgIGlzSlNFeHByZXNzaW9uKGluZm8udXBkYXRlcykpIHsKICAgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gdXBkYXRlcyBncmFwaCwgYW5kIGl0J3MgZXhwcmVzc2libGUgYXMgYW4KICAgICAgICAgIC8vIGV4cHJlc3Npb24sIGdlbmVyYXRlIGEgZm9yLWxvb3AuCiAgICAgICAgICBqcy5FeHByZXNzaW9uIGpzSW5pdGlhbGl6YXRpb24gPSBudWxsOwogICAgICAgICAgaWYgKGluaXRpYWxpemF0aW9uICE9IG51bGwpIHsKICAgICAgICAgICAgaW50IGRlbGF5ZWRWYXJpYWJsZXNDb3VudCA9IGNvbGxlY3RlZFZhcmlhYmxlRGVjbGFyYXRpb25zLmxlbmd0aDsKICAgICAgICAgICAganNJbml0aWFsaXphdGlvbiA9IGdlbmVyYXRlRXhwcmVzc2lvbihpbml0aWFsaXphdGlvbik7CiAgICAgICAgICAgIGlmICghc2hvdWxkR3JvdXBWYXJEZWNsYXJhdGlvbnMgJiYKICAgICAgICAgICAgICAgIGRlbGF5ZWRWYXJpYWJsZXNDb3VudCA8IGNvbGxlY3RlZFZhcmlhYmxlRGVjbGFyYXRpb25zLmxlbmd0aCkgewogICAgICAgICAgICAgIC8vIFdlIGp1c3QgYWRkZWQgYSBuZXcgZGVsYXllZCB2YXJpYWJsZS1kZWNsYXJhdGlvbi4gU2VlIGlmIHdlIGNhbgogICAgICAgICAgICAgIC8vIHB1dCBpbiBhICd2YXInIGluIGZyb250IG9mIHRoZSBpbml0aWFsaXphdGlvbiB0byBtYWtlIGl0IGdvCiAgICAgICAgICAgICAgLy8gYXdheS4gV2Ugd2FsayB0aGUgJ3RyZWUnIG9mIGNvbW1hLW9wZXJhdG9ycyB0byBmaW5kIHRoZQogICAgICAgICAgICAgIC8vIGV4cHJlc3Npb25zIGFuZCBzZWUgaWYgdGhleSBhcmUgYWxsIGFzc2lnbm1lbnRzIHRoYXQgY2FuIGJlCiAgICAgICAgICAgICAgLy8gY29udmVydGVkIGludG8gZGVjbGFyYXRpb25zLgoKICAgICAgICAgICAgICBMaXN0PGpzLkFzc2lnbm1lbnQ+IGFzc2lnbm1lbnRzOwoKICAgICAgICAgICAgICBib29sIGFsbFNpbXBsZUFzc2lnbm1lbnRzKGpzLkV4cHJlc3Npb24gZXhwcmVzc2lvbikgewogICAgICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24gaXMganMuQXNzaWdubWVudCkgewogICAgICAgICAgICAgICAgICBqcy5Bc3NpZ25tZW50IGFzc2lnbm1lbnQgPSBleHByZXNzaW9uOwogICAgICAgICAgICAgICAgICBpZiAoYXNzaWdubWVudC5sZWZ0SGFuZFNpZGUgaXMganMuVmFyaWFibGVVc2UgJiYKICAgICAgICAgICAgICAgICAgICAgICFhc3NpZ25tZW50LmlzQ29tcG91bmQpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoYXNzaWdubWVudHMgPT0gbnVsbCkgYXNzaWdubWVudHMgPSA8anMuQXNzaWdubWVudD5bXTsKICAgICAgICAgICAgICAgICAgICBhc3NpZ25tZW50cy5hZGQoZXhwcmVzc2lvbik7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5pc0NvbW1hT3BlcmF0b3IpIHsKICAgICAgICAgICAgICAgICAganMuQmluYXJ5IGJpbmFyeSA9IGV4cHJlc3Npb247CiAgICAgICAgICAgICAgICAgIHJldHVybiBhbGxTaW1wbGVBc3NpZ25tZW50cyhiaW5hcnkubGVmdCkgJiYKICAgICAgICAgICAgICAgICAgICAgIGFsbFNpbXBsZUFzc2lnbm1lbnRzKGJpbmFyeS5yaWdodCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBpZiAoYWxsU2ltcGxlQXNzaWdubWVudHMoanNJbml0aWFsaXphdGlvbikpIHsKICAgICAgICAgICAgICAgIExpc3Q8anMuVmFyaWFibGVJbml0aWFsaXphdGlvbj4gaW5pdHMgPQogICAgICAgICAgICAgICAgICAgIDxqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uPltdOwogICAgICAgICAgICAgICAgZm9yIChqcy5Bc3NpZ25tZW50IGFzc2lnbm1lbnQgaW4gYXNzaWdubWVudHMpIHsKICAgICAgICAgICAgICAgICAgU3RyaW5nIGlkID0gKGFzc2lnbm1lbnQubGVmdEhhbmRTaWRlIGFzIGpzLlZhcmlhYmxlVXNlKS5uYW1lOwogICAgICAgICAgICAgICAgICBqcy5Ob2RlIGRlY2xhcmF0aW9uID0gbmV3IGpzLlZhcmlhYmxlRGVjbGFyYXRpb24oaWQpOwogICAgICAgICAgICAgICAgICBpbml0cy5hZGQobmV3IGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24oCiAgICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbiwgYXNzaWdubWVudC52YWx1ZSkpOwogICAgICAgICAgICAgICAgICBjb2xsZWN0ZWRWYXJpYWJsZURlY2xhcmF0aW9ucy5yZW1vdmUoaWQpOwogICAgICAgICAgICAgICAgICBkZWNsYXJlZExvY2Fscy5hZGQoaWQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAganNJbml0aWFsaXphdGlvbiA9IG5ldyBqcy5WYXJpYWJsZURlY2xhcmF0aW9uTGlzdChpbml0cyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBqcy5FeHByZXNzaW9uIGpzQ29uZGl0aW9uID0gZ2VuZXJhdGVFeHByZXNzaW9uKGNvbmRpdGlvbik7CiAgICAgICAgICBqcy5FeHByZXNzaW9uIGpzVXBkYXRlcyA9IGdlbmVyYXRlRXhwcmVzc2lvbihpbmZvLnVwZGF0ZXMpOwogICAgICAgICAgLy8gVGhlIGJvZHkgbWlnaHQgYmUgbGFiZWxlZC4gSWdub3JlIHRoaXMgd2hlbiByZWN1cnNpbmcgb24gdGhlCiAgICAgICAgICAvLyBzdWJncmFwaC4KICAgICAgICAgIC8vIFRPRE8obHJuKTogUmVtb3ZlIHRoaXMgZXh0cmEgbGFiZWxpbmcgd2hlbiBoYW5kbGluZyBhbGwgbG9vcHMKICAgICAgICAgIC8vIHVzaW5nIHN1YmdyYXBocy4KICAgICAgICAgIG9sZENvbnRhaW5lciA9IGN1cnJlbnRDb250YWluZXI7CiAgICAgICAgICBqcy5TdGF0ZW1lbnQgYm9keSA9IG5ldyBqcy5CbG9jay5lbXB0eSgpOwogICAgICAgICAgY3VycmVudENvbnRhaW5lciA9IGJvZHk7CiAgICAgICAgICB2aXNpdEJvZHlJZ25vcmVMYWJlbHMoaW5mbyk7CiAgICAgICAgICBjdXJyZW50Q29udGFpbmVyID0gb2xkQ29udGFpbmVyOwogICAgICAgICAgYm9keSA9IHVud3JhcFN0YXRlbWVudChib2R5KTsKICAgICAgICAgIGxvb3AgPSBuZXcganMuRm9yKGpzSW5pdGlhbGl6YXRpb24sIGpzQ29uZGl0aW9uLCBqc1VwZGF0ZXMsIGJvZHkpCiAgICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihpbmZvLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gV2UgaGF2ZSBlaXRoZXIgbm8gdXBkYXRlIGdyYXBoLCBvciBpdCdzIHRvbyBjb21wbGV4IHRvCiAgICAgICAgICAvLyBwdXQgaW4gYW4gZXhwcmVzc2lvbi4KICAgICAgICAgIGlmIChpbml0aWFsaXphdGlvbiAhPSBudWxsKSB7CiAgICAgICAgICAgIGdlbmVyYXRlU3RhdGVtZW50cyhpbml0aWFsaXphdGlvbik7CiAgICAgICAgICB9CiAgICAgICAgICBqcy5FeHByZXNzaW9uIGpzQ29uZGl0aW9uOwogICAgICAgICAganMuQmxvY2sgb2xkQ29udGFpbmVyID0gY3VycmVudENvbnRhaW5lcjsKICAgICAgICAgIGpzLlN0YXRlbWVudCBib2R5ID0gbmV3IGpzLkJsb2NrLmVtcHR5KCk7CiAgICAgICAgICBpZiAoaXNDb25kaXRpb25FeHByZXNzaW9uICYmICFoYXNQaGlVcGRhdGVzKSB7CiAgICAgICAgICAgIGpzQ29uZGl0aW9uID0gZ2VuZXJhdGVFeHByZXNzaW9uKGNvbmRpdGlvbik7CiAgICAgICAgICAgIGN1cnJlbnRDb250YWluZXIgPSBib2R5OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAganNDb25kaXRpb24gPSBuZXdMaXRlcmFsQm9vbCh0cnVlLCBpbmZvLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICAgICAgY3VycmVudENvbnRhaW5lciA9IGJvZHk7CiAgICAgICAgICAgIGdlbmVyYXRlU3RhdGVtZW50cyhjb25kaXRpb24pOwogICAgICAgICAgICB1c2UoY29uZGl0aW9uLmNvbmRpdGlvbkV4cHJlc3Npb24pOwogICAgICAgICAgICBqcy5FeHByZXNzaW9uIGlmVGVzdCA9IG5ldyBqcy5QcmVmaXgoIiEiLCBwb3AoKSk7CiAgICAgICAgICAgIGpzLlN0YXRlbWVudCBqc0JyZWFrID0gbmV3IGpzLkJyZWFrKG51bGwpOwogICAgICAgICAgICBqcy5TdGF0ZW1lbnQgZXhpdExvb3A7CiAgICAgICAgICAgIGlmIChhdm9pZENvbnRhaW5lci5zdGF0ZW1lbnRzLmlzRW1wdHkpIHsKICAgICAgICAgICAgICBleGl0TG9vcCA9IGpzQnJlYWs7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgYXZvaWRDb250YWluZXIuc3RhdGVtZW50cy5hZGQoanNCcmVhayk7CiAgICAgICAgICAgICAgZXhpdExvb3AgPSBhdm9pZENvbnRhaW5lcjsKICAgICAgICAgICAgfQogICAgICAgICAgICBwdXNoU3RhdGVtZW50KG5ldyBqcy5JZi5ub0Vsc2UoaWZUZXN0LCBleGl0TG9vcCkpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGluZm8udXBkYXRlcyAhPSBudWxsKSB7CiAgICAgICAgICAgIHdyYXBMb29wQm9keUZvckNvbnRpbnVlKGluZm8pOwogICAgICAgICAgICBnZW5lcmF0ZVN0YXRlbWVudHMoaW5mby51cGRhdGVzKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZpc2l0Qm9keUlnbm9yZUxhYmVscyhpbmZvKTsKICAgICAgICAgIH0KICAgICAgICAgIGN1cnJlbnRDb250YWluZXIgPSBvbGRDb250YWluZXI7CiAgICAgICAgICBib2R5ID0gdW53cmFwU3RhdGVtZW50KGJvZHkpOwogICAgICAgICAgbG9vcCA9IG5ldyBqcy5XaGlsZShqc0NvbmRpdGlvbiwgYm9keSkKICAgICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKGluZm8uc291cmNlSW5mb3JtYXRpb24pOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBITG9vcEJsb2NrSW5mb3JtYXRpb24uRE9fV0hJTEVfTE9PUDoKICAgICAgICBpZiAoaW5mby5pbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgICBnZW5lcmF0ZVN0YXRlbWVudHMoaW5mby5pbml0aWFsaXplcik7CiAgICAgICAgfQogICAgICAgIC8vIFdlIGluc2VydGVkIGEgYmFzaWMgYmxvY2sgdG8gYXZvaWQgY3JpdGljYWwgZWRnZXMuIFRoaXMgYmxvY2sgaXMKICAgICAgICAvLyBwYXJ0IG9mIHRoZSBMb29wQmxvY2tJbmZvcm1hdGlvbiBhbmQgbXVzdCB0aGVyZWZvcmUgYmUgaGFuZGxlZCBoZXJlLgogICAgICAgIGpzLkJsb2NrIG9sZENvbnRhaW5lciA9IGN1cnJlbnRDb250YWluZXI7CiAgICAgICAganMuQmxvY2sgZXhpdEF2b2lkQ29udGFpbmVyID0gbmV3IGpzLkJsb2NrLmVtcHR5KCk7CiAgICAgICAgY3VycmVudENvbnRhaW5lciA9IGV4aXRBdm9pZENvbnRhaW5lcjsKICAgICAgICBhc3NpZ25QaGlzT2ZTdWNjZXNzb3JzKGNvbmRpdGlvbi5lbmQuc3VjY2Vzc29ycy5sYXN0KTsKICAgICAgICBib29sIGhhc0V4aXRQaGlVcGRhdGVzID0gIWV4aXRBdm9pZENvbnRhaW5lci5zdGF0ZW1lbnRzLmlzRW1wdHk7CiAgICAgICAgY3VycmVudENvbnRhaW5lciA9IG9sZENvbnRhaW5lcjsKCiAgICAgICAgb2xkQ29udGFpbmVyID0gY3VycmVudENvbnRhaW5lcjsKICAgICAgICBqcy5CbG9jayBib2R5ID0gbmV3IGpzLkJsb2NrLmVtcHR5KCk7CiAgICAgICAgLy8gSWYgdGhlcmUgYXJlIHBoaSBjb3BpZXMgaW4gdGhlIGJsb2NrIHRoYXQganVtcHMgdG8gdGhlCiAgICAgICAgLy8gbG9vcCBlbnRyeSwgd2UgbXVzdCBlbWl0IHRoZSBjb25kaXRpb24gbGlrZSB0aGlzOgogICAgICAgIC8vIGRvIHsKICAgICAgICAvLyAgIGJvZHk7CiAgICAgICAgLy8gICBpZiAoY29uZGl0aW9uKSB7CiAgICAgICAgLy8gICAgIHBoaSB1cGRhdGVzOwogICAgICAgIC8vICAgICBjb250aW51ZTsKICAgICAgICAvLyAgIH0gZWxzZSB7CiAgICAgICAgLy8gICAgIGJyZWFrOwogICAgICAgIC8vICAgfQogICAgICAgIC8vIH0gd2hpbGUgKHRydWUpOwogICAgICAgIEhCYXNpY0Jsb2NrIGF2b2lkRWRnZSA9IGluZm8uZW5kLnN1Y2Nlc3NvcnNbMF07CiAgICAgICAganMuQmxvY2sgdXBkYXRlQm9keSA9IG5ldyBqcy5CbG9jay5lbXB0eSgpOwogICAgICAgIGN1cnJlbnRDb250YWluZXIgPSB1cGRhdGVCb2R5OwogICAgICAgIGFzc2lnblBoaXNPZlN1Y2Nlc3NvcnMoYXZvaWRFZGdlKTsKICAgICAgICBib29sIGhhc1BoaVVwZGF0ZXMgPSAhdXBkYXRlQm9keS5zdGF0ZW1lbnRzLmlzRW1wdHk7CiAgICAgICAgY3VycmVudENvbnRhaW5lciA9IGJvZHk7CiAgICAgICAgdmlzaXRCb2R5SWdub3JlTGFiZWxzKGluZm8pOwogICAgICAgIGlmIChpbmZvLnVwZGF0ZXMgIT0gbnVsbCkgewogICAgICAgICAgZ2VuZXJhdGVTdGF0ZW1lbnRzKGluZm8udXBkYXRlcyk7CiAgICAgICAgfQogICAgICAgIGlmIChpc0NvbmRpdGlvbkV4cHJlc3Npb24pIHsKICAgICAgICAgIHB1c2goZ2VuZXJhdGVFeHByZXNzaW9uKGNvbmRpdGlvbikpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBnZW5lcmF0ZVN0YXRlbWVudHMoY29uZGl0aW9uKTsKICAgICAgICAgIHVzZShjb25kaXRpb24uY29uZGl0aW9uRXhwcmVzc2lvbik7CiAgICAgICAgfQogICAgICAgIGpzLkV4cHJlc3Npb24ganNDb25kaXRpb24gPSBwb3AoKTsKICAgICAgICBpZiAoanNDb25kaXRpb24gPT0gbnVsbCkgewogICAgICAgICAgLy8gSWYgdGhlIGNvbmRpdGlvbiBpcyBkZWFkIGNvZGUsIHdlIHR1cm4gdGhlIGRvLXdoaWxlIGludG8KICAgICAgICAgIC8vIGEgc2ltcGxlciB3aGlsZSBiZWNhdXNlIHdlIHdpbGwgbmV2ZXIgcmVhY2ggdGhlIGNvbmRpdGlvbgogICAgICAgICAgLy8gYXQgdGhlIGVuZCBvZiB0aGUgbG9vcCBhbnl3YXkuCiAgICAgICAgICBsb29wID0gbmV3IGpzLldoaWxlKG5ld0xpdGVyYWxCb29sKHRydWUsIGluZm8uc291cmNlSW5mb3JtYXRpb24pLAogICAgICAgICAgICAgICAgICB1bndyYXBTdGF0ZW1lbnQoYm9keSkpCiAgICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihpbmZvLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGhhc1BoaVVwZGF0ZXMgfHwgaGFzRXhpdFBoaVVwZGF0ZXMpIHsKICAgICAgICAgICAgdXBkYXRlQm9keS5zdGF0ZW1lbnRzLmFkZChuZXcganMuQ29udGludWUobnVsbCkpOwogICAgICAgICAgICBqcy5TdGF0ZW1lbnQganNCcmVhayA9IG5ldyBqcy5CcmVhayhudWxsKTsKICAgICAgICAgICAganMuU3RhdGVtZW50IGV4aXRMb29wOwogICAgICAgICAgICBpZiAoZXhpdEF2b2lkQ29udGFpbmVyLnN0YXRlbWVudHMuaXNFbXB0eSkgewogICAgICAgICAgICAgIGV4aXRMb29wID0ganNCcmVhazsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBleGl0QXZvaWRDb250YWluZXIuc3RhdGVtZW50cy5hZGQoanNCcmVhayk7CiAgICAgICAgICAgICAgZXhpdExvb3AgPSBleGl0QXZvaWRDb250YWluZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYm9keS5zdGF0ZW1lbnRzLmFkZChuZXcganMuSWYoanNDb25kaXRpb24sIHVwZGF0ZUJvZHksIGV4aXRMb29wKSk7CiAgICAgICAgICAgIGpzQ29uZGl0aW9uID0gbmV3TGl0ZXJhbEJvb2wodHJ1ZSwgaW5mby5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgICAgICB9CiAgICAgICAgICBsb29wID0gbmV3IGpzLkRvKHVud3JhcFN0YXRlbWVudChib2R5KSwganNDb25kaXRpb24pCiAgICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihpbmZvLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICB9CiAgICAgICAgY3VycmVudENvbnRhaW5lciA9IG9sZENvbnRhaW5lcjsKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBmYWlsZWRBdChjb25kaXRpb24uY29uZGl0aW9uRXhwcmVzc2lvbiwKICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgbG9vcCBraW5kOiAke2luZm8ua2luZH0uJyk7CiAgICB9CiAgICBqcy5TdGF0ZW1lbnQgcmVzdWx0ID0gbG9vcDsKICAgIGlmIChpbmZvLmtpbmQgPT0gSExvb3BCbG9ja0luZm9ybWF0aW9uLlNXSVRDSF9DT05USU5VRV9MT09QKSB7CiAgICAgIFN0cmluZyBjb250aW51ZUxhYmVsU3RyaW5nID0KICAgICAgICAgIF9uYW1lci5pbXBsaWNpdENvbnRpbnVlTGFiZWxOYW1lKGluZm8udGFyZ2V0KTsKICAgICAgcmVzdWx0ID0gbmV3IGpzLkxhYmVsZWRTdGF0ZW1lbnQoY29udGludWVMYWJlbFN0cmluZywgcmVzdWx0KTsKICAgIH0KICAgIHB1c2hTdGF0ZW1lbnQod3JhcEludG9MYWJlbHMocmVzdWx0LCBpbmZvLmxhYmVscykpOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0TGFiZWxlZEJsb2NrSW5mbyhITGFiZWxlZEJsb2NrSW5mb3JtYXRpb24gbGFiZWxlZEJsb2NrSW5mbykgewogICAgTGluazxFbnRpdHk+IGNvbnRpbnVlT3ZlcnJpZGVzID0gY29uc3QgTGluazxFbnRpdHk+KCk7CgogICAganMuQmxvY2sgb2xkQ29udGFpbmVyID0gY3VycmVudENvbnRhaW5lcjsKICAgIGpzLkJsb2NrIGJvZHkgPSBuZXcganMuQmxvY2suZW1wdHkoKTsKICAgIGpzLlN0YXRlbWVudCByZXN1bHQgPSBib2R5OwoKICAgIGN1cnJlbnRDb250YWluZXIgPSBib2R5OwoKICAgIC8vIElmIFtsYWJlbGVkQmxvY2tJbmZvLmlzQ29udGludWVdLCB0aGUgYmxvY2sgaXMgYW4gYXJ0aWZpY2lhbAogICAgLy8gYmxvY2sgYXJvdW5kIHRoZSBib2R5IG9mIGEgbG9vcCB3aXRoIGFuIHVwZGF0ZSBibG9jaywgc28gdGhhdAogICAgLy8gY29udGludWVzIG9mIHRoZSBsb29wIGNhbiBiZSB3cml0dGVuIGFzIGJyZWFrcyBvZiB0aGUgYm9keQogICAgLy8gYmxvY2suCiAgICBpZiAobGFiZWxlZEJsb2NrSW5mby5pc0NvbnRpbnVlKSB7CiAgICAgIGZvciAoTGFiZWxEZWZpbml0aW9uIGxhYmVsIGluIGxhYmVsZWRCbG9ja0luZm8ubGFiZWxzKSB7CiAgICAgICAgaWYgKGxhYmVsLmlzQ29udGludWVUYXJnZXQpIHsKICAgICAgICAgIFN0cmluZyBsYWJlbE5hbWUgPSBfbmFtZXIuY29udGludWVMYWJlbE5hbWUobGFiZWwpOwogICAgICAgICAgcmVzdWx0ID0gbmV3IGpzLkxhYmVsZWRTdGF0ZW1lbnQobGFiZWxOYW1lLCByZXN1bHQpOwogICAgICAgICAgY29udGludWVBY3Rpb24uYWRkKGxhYmVsKTsKICAgICAgICAgIGNvbnRpbnVlT3ZlcnJpZGVzID0gY29udGludWVPdmVycmlkZXMucHJlcGVuZChsYWJlbCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIEZvciBoYW5kbGluZyB1bmxhYmVsZWQgY29udGludWVzIGZyb20gdGhlIGJvZHkgb2YgYSBsb29wLgogICAgICAvLyBUT0RPKGxybik6IENvbnNpZGVyIHJlY29yZGluZyB3aGV0aGVyIHRoZSB0YXJnZXQgaXMgaW4gZmFjdAogICAgICAvLyBhIHRhcmdldCBvZiBhbiB1bmxhYmVsZWQgY29udGludWUsIGFuZCBub3QgZ2VuZXJhdGUgdGhpcyBpZiBpdCBpc24ndC4KICAgICAgSnVtcFRhcmdldCB0YXJnZXQgPSBsYWJlbGVkQmxvY2tJbmZvLnRhcmdldDsKICAgICAgU3RyaW5nIGxhYmVsTmFtZSA9IF9uYW1lci5pbXBsaWNpdENvbnRpbnVlTGFiZWxOYW1lKHRhcmdldCk7CiAgICAgIHJlc3VsdCA9IG5ldyBqcy5MYWJlbGVkU3RhdGVtZW50KGxhYmVsTmFtZSwgcmVzdWx0KTsKICAgICAgaW1wbGljaXRDb250aW51ZUFjdGlvbi5hZGQodGFyZ2V0KTsKICAgICAgY29udGludWVPdmVycmlkZXMgPSBjb250aW51ZU92ZXJyaWRlcy5wcmVwZW5kKHRhcmdldCk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKExhYmVsRGVmaW5pdGlvbiBsYWJlbCBpbiBsYWJlbGVkQmxvY2tJbmZvLmxhYmVscykgewogICAgICAgIGlmIChsYWJlbC5pc0JyZWFrVGFyZ2V0KSB7CiAgICAgICAgICBTdHJpbmcgbGFiZWxOYW1lID0gX25hbWVyLmJyZWFrTGFiZWxOYW1lKGxhYmVsKTsKICAgICAgICAgIHJlc3VsdCA9IG5ldyBqcy5MYWJlbGVkU3RhdGVtZW50KGxhYmVsTmFtZSwgcmVzdWx0KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIEp1bXBUYXJnZXQgdGFyZ2V0ID0gbGFiZWxlZEJsb2NrSW5mby50YXJnZXQ7CiAgICBpZiAodGFyZ2V0LmlzU3dpdGNoKSB7CiAgICAgIC8vIFRoaXMgaXMgYW4gZXh0cmEgYmxvY2sgYXJvdW5kIGEgc3dpdGNoIHRoYXQgaXMgZ2VuZXJhdGVkCiAgICAgIC8vIGFzIGEgbmVzdGVkIGlmL2Vsc2UgY2hhaW4uIFdlIGFkZCBhbiBleHRyYSBicmVhayB0YXJnZXQKICAgICAgLy8gc28gdGhhdCBjYXNlIGNvZGUgY2FuIGJyZWFrLgogICAgICBTdHJpbmcgbGFiZWxOYW1lID0gX25hbWVyLmltcGxpY2l0QnJlYWtMYWJlbE5hbWUodGFyZ2V0KTsKICAgICAgcmVzdWx0ID0gbmV3IGpzLkxhYmVsZWRTdGF0ZW1lbnQobGFiZWxOYW1lLCByZXN1bHQpOwogICAgICBicmVha0FjdGlvbi5hZGQodGFyZ2V0KTsKICAgIH0KCiAgICBjdXJyZW50Q29udGFpbmVyID0gYm9keTsKICAgIGdlbmVyYXRlU3RhdGVtZW50cyhsYWJlbGVkQmxvY2tJbmZvLmJvZHkpOwoKICAgIGlmIChsYWJlbGVkQmxvY2tJbmZvLmlzQ29udGludWUpIHsKICAgICAgd2hpbGUgKCFjb250aW51ZU92ZXJyaWRlcy5pc0VtcHR5KSB7CiAgICAgICAgY29udGludWVBY3Rpb24ucmVtb3ZlKGNvbnRpbnVlT3ZlcnJpZGVzLmhlYWQpOwogICAgICAgIGltcGxpY2l0Q29udGludWVBY3Rpb24ucmVtb3ZlKGNvbnRpbnVlT3ZlcnJpZGVzLmhlYWQpOwogICAgICAgIGNvbnRpbnVlT3ZlcnJpZGVzID0gY29udGludWVPdmVycmlkZXMudGFpbDsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgYnJlYWtBY3Rpb24ucmVtb3ZlKGxhYmVsZWRCbG9ja0luZm8udGFyZ2V0KTsKICAgIH0KCiAgICBjdXJyZW50Q29udGFpbmVyID0gb2xkQ29udGFpbmVyOwogICAgcHVzaFN0YXRlbWVudChyZXN1bHQpOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLyBXcmFwcyBhIGxvb3AgYm9keSBpbiBhIGJsb2NrIHRvIG1ha2UgY29udGludWVzIGhhdmUgYSB0YXJnZXQgdG8gYnJlYWsKICAvLyB0byAoaWYgbmVjZXNzYXJ5KS4KICB2b2lkIHdyYXBMb29wQm9keUZvckNvbnRpbnVlKEhMb29wQmxvY2tJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBKdW1wVGFyZ2V0IHRhcmdldCA9IGluZm8udGFyZ2V0OwogICAgaWYgKHRhcmdldCAhPSBudWxsICYmIHRhcmdldC5pc0NvbnRpbnVlVGFyZ2V0KSB7CiAgICAgIGpzLkJsb2NrIG9sZENvbnRhaW5lciA9IGN1cnJlbnRDb250YWluZXI7CiAgICAgIGpzLkJsb2NrIGJvZHkgPSBuZXcganMuQmxvY2suZW1wdHkoKTsKICAgICAgY3VycmVudENvbnRhaW5lciA9IGJvZHk7CiAgICAgIGpzLlN0YXRlbWVudCByZXN1bHQgPSBib2R5OwogICAgICBmb3IgKExhYmVsRGVmaW5pdGlvbiBsYWJlbCBpbiBpbmZvLmxhYmVscykgewogICAgICAgIGlmIChsYWJlbC5pc0NvbnRpbnVlVGFyZ2V0KSB7CiAgICAgICAgICBTdHJpbmcgbGFiZWxOYW1lID0gX25hbWVyLmNvbnRpbnVlTGFiZWxOYW1lKGxhYmVsKTsKICAgICAgICAgIHJlc3VsdCA9IG5ldyBqcy5MYWJlbGVkU3RhdGVtZW50KGxhYmVsTmFtZSwgcmVzdWx0KTsKICAgICAgICAgIGNvbnRpbnVlQWN0aW9uLmFkZChsYWJlbCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIFN0cmluZyBsYWJlbE5hbWUgPSBfbmFtZXIuaW1wbGljaXRDb250aW51ZUxhYmVsTmFtZSh0YXJnZXQpOwogICAgICByZXN1bHQgPSBuZXcganMuTGFiZWxlZFN0YXRlbWVudChsYWJlbE5hbWUsIHJlc3VsdCk7CiAgICAgIGltcGxpY2l0Q29udGludWVBY3Rpb24uYWRkKGluZm8udGFyZ2V0KTsKICAgICAgdmlzaXRCb2R5SWdub3JlTGFiZWxzKGluZm8pOwogICAgICBpbXBsaWNpdENvbnRpbnVlQWN0aW9uLnJlbW92ZShpbmZvLnRhcmdldCk7CiAgICAgIGZvciAoTGFiZWxEZWZpbml0aW9uIGxhYmVsIGluIGluZm8ubGFiZWxzKSB7CiAgICAgICAgaWYgKGxhYmVsLmlzQ29udGludWVUYXJnZXQpIHsKICAgICAgICAgIGNvbnRpbnVlQWN0aW9uLnJlbW92ZShsYWJlbCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGN1cnJlbnRDb250YWluZXIgPSBvbGRDb250YWluZXI7CiAgICAgIHB1c2hTdGF0ZW1lbnQocmVzdWx0KTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIExvb3AgYm9keSBjb250YWlucyBubyBjb250aW51ZXMsIHNvIHdlIGRvbid0IG5lZWQgYSBicmVhayB0YXJnZXQuCiAgICAgIGdlbmVyYXRlU3RhdGVtZW50cyhpbmZvLmJvZHkpOwogICAgfQogIH0KCiAgYm9vbCBoYW5kbGVCbG9ja0Zsb3coSEJsb2NrRmxvdyBibG9jaykgewogICAgSEJsb2NrSW5mb3JtYXRpb24gaW5mbyA9IGJsb2NrLmJvZHk7CiAgICAvLyBJZiB3ZSByZWFjaCBoZXJlIGFnYWluIHdoaWxlIGhhbmRsaW5nIHRoZSBhdHRhY2hlZCBpbmZvcm1hdGlvbiwKICAgIC8vIGUuZy4sIGJlY2F1c2Ugd2UgY2FsbCB2aXNpdFN1YkdyYXBoIG9uIGEgc3ViZ3JhcGggc3RhcnRpbmcgb24KICAgIC8vIHRoZSBzYW1lIGJsb2NrLCBkb24ndCBoYW5kbGUgaXQgYWdhaW4uCiAgICAvLyBXaGVuIHRoZSBzdHJ1Y3R1cmUgZ3JhcGggaXMgY29tcGxldGUsIHdlIHdpbGwgYmUgYWJsZSB0byBoYXZlCiAgICAvLyBkaWZmZXJlbnQgc3RydWN0dXJlcyBzdGFydGluZyBvbiB0aGUgc2FtZSBiYXNpYyBibG9jayAoZS5nLiwgYW4KICAgIC8vICJpZiIgYW5kIGl0cyBjb25kaXRpb24pLgogICAgaWYgKGlkZW50aWNhbChpbmZvLCBjdXJyZW50QmxvY2tJbmZvcm1hdGlvbikpIHJldHVybiBmYWxzZTsKCiAgICBIQmxvY2tJbmZvcm1hdGlvbiBvbGRCbG9ja0luZm9ybWF0aW9uID0gY3VycmVudEJsb2NrSW5mb3JtYXRpb247CiAgICBjdXJyZW50QmxvY2tJbmZvcm1hdGlvbiA9IGluZm87CiAgICBib29sIHN1Y2Nlc3MgPSBpbmZvLmFjY2VwdCh0aGlzKTsKICAgIGN1cnJlbnRCbG9ja0luZm9ybWF0aW9uID0gb2xkQmxvY2tJbmZvcm1hdGlvbjsKCiAgICBpZiAoc3VjY2VzcykgewogICAgICBIQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBibG9jay5jb250aW51YXRpb247CiAgICAgIGlmIChjb250aW51YXRpb24gIT0gbnVsbCkgewogICAgICAgIGNvbnRpbnVlU3ViR3JhcGgoY29udGludWF0aW9uKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHN1Y2Nlc3M7CiAgfQoKICB2b2lkIGVudGVyU3ViR3JhcGgoSEJhc2ljQmxvY2sgbm9kZSkgewogICAgYXNzZXJ0KGJsb2NrUXVldWUuaXNFbXB0eSk7CiAgICBhc3NlcnQobm9kZSAhPSBudWxsKTsKICAgIGNvbnRpbnVlU3ViR3JhcGgobm9kZSk7CiAgICB3aGlsZSAoYmxvY2tRdWV1ZS5pc05vdEVtcHR5KSB7CiAgICAgIG5vZGUgPSBibG9ja1F1ZXVlLnJlbW92ZUZpcnN0KCk7CiAgICAgIGFzc2VydChub2RlLmlzTGl2ZSk7CiAgICAgIGFzc2VydChzdWJHcmFwaC5jb250YWlucyhub2RlKSk7CgogICAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGJsb2NrLXN0cnVjdHVyZSBiYXNlZCBpbmZvcm1hdGlvbiBhdHRhY2hlZCwKICAgICAgLy8gdHJ5IHVzaW5nIHRoYXQgdG8gdHJhdmVyc2UgZnJvbSBoZXJlLgogICAgICBpZiAobm9kZS5ibG9ja0Zsb3cgIT0gbnVsbCAmJiBoYW5kbGVCbG9ja0Zsb3cobm9kZS5ibG9ja0Zsb3cpKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KCiAgICAgIGl0ZXJhdGVCYXNpY0Jsb2NrKG5vZGUpOwogICAgfQogIH0KCiAgdm9pZCBjb250aW51ZVN1YkdyYXBoKEhCYXNpY0Jsb2NrIG5vZGUpIHsKICAgIGlmICghbm9kZS5pc0xpdmUpIHJldHVybjsKICAgIC8vIERvbid0IGZvbGxvdyBlZGdlcyBvdXQgb2YgdGhlIGN1cnJlbnQgc3ViLWdyYXBoLgogICAgaWYgKCFzdWJHcmFwaC5jb250YWlucyhub2RlKSkgcmV0dXJuOwogICAgYmxvY2tRdWV1ZS5hZGQobm9kZSk7CiAgfQoKICB2b2lkIGVtaXRBc3NpZ25tZW50KAogICAgICBTdHJpbmcgZGVzdGluYXRpb24sIFN0cmluZyBzb3VyY2UsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBhc3NpZ25WYXJpYWJsZShkZXN0aW5hdGlvbiwgbmV3IGpzLlZhcmlhYmxlVXNlKHNvdXJjZSksIHNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIC8vLyBTZXF1ZW50aWFsaXplIGEgbGlzdCBvZiBjb25jZXB0dWFsbHkgcGFyYWxsZWwgY29waWVzLiBQYXJhbGxlbAogIC8vLyBjb3BpZXMgbWF5IGNvbnRhaW4gY3ljbGVzLCB0aGF0IHRoaXMgbWV0aG9kIGJyZWFrcy4KICB2b2lkIHNlcXVlbnRpYWxpemVDb3BpZXMoCiAgICAgIEl0ZXJhYmxlPENvcHk8SEluc3RydWN0aW9uPj4gaW5zdHJ1Y3Rpb25Db3BpZXMsCiAgICAgIFN0cmluZyB0ZW1wTmFtZSwKICAgICAgdm9pZCBkb0Fzc2lnbm1lbnQoCiAgICAgICAgICBTdHJpbmcgdGFyZ2V0LCBTdHJpbmcgc291cmNlLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikpIHsKICAgIE1hcDxTdHJpbmcsIFNvdXJjZUluZm9ybWF0aW9uPiBzb3VyY2VJbmZvcm1hdGlvbk1hcCA9CiAgICAgICAgPFN0cmluZywgU291cmNlSW5mb3JtYXRpb24+e307CgogICAgLy8gTWFwIHRoZSBpbnN0cnVjdGlvbnMgdG8gc3RyaW5ncy4KICAgIEl0ZXJhYmxlPENvcHk8U3RyaW5nPj4gY29waWVzID0KICAgICAgICBpbnN0cnVjdGlvbkNvcGllcy5tYXAoKENvcHk8SEluc3RydWN0aW9uPiBjb3B5KSB7CiAgICAgIFN0cmluZyBzb3VyY2VOYW1lID0gdmFyaWFibGVOYW1lcy5nZXROYW1lKGNvcHkuc291cmNlKTsKICAgICAgc291cmNlSW5mb3JtYXRpb25NYXBbc291cmNlTmFtZV0gPSBjb3B5LnNvdXJjZS5zb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgU3RyaW5nIGRlc3RpbmF0aW9uTmFtZSA9IHZhcmlhYmxlTmFtZXMuZ2V0TmFtZShjb3B5LmRlc3RpbmF0aW9uKTsKICAgICAgc291cmNlSW5mb3JtYXRpb25NYXBbc291cmNlTmFtZV0gPSBjb3B5LmRlc3RpbmF0aW9uLnNvdXJjZUluZm9ybWF0aW9uOwogICAgICByZXR1cm4gbmV3IENvcHk8U3RyaW5nPihzb3VyY2VOYW1lLCBkZXN0aW5hdGlvbk5hbWUpOwogICAgfSk7CgogICAgLy8gTWFwIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgbG9jYXRpb24gKGllIHRoZSB2YXJpYWJsZSB0aGF0CiAgICAvLyBob2xkcyB0aGUgaW5pdGlhbCB2YWx1ZSkgb2YgYSB2YXJpYWJsZS4KICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gY3VycmVudExvY2F0aW9uID0gbmV3IE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKCiAgICAvLyBNYXAgdG8ga2VlcCB0cmFjayBvZiB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBhIHZhcmlhYmxlLgogICAgTWFwPFN0cmluZywgU3RyaW5nPiBpbml0aWFsVmFsdWUgPSBuZXcgTWFwPFN0cmluZywgU3RyaW5nPigpOwoKICAgIC8vIExpc3Qgb2YgdmFyaWFibGVzIHRvIGFzc2lnbiBhIHZhbHVlLgogICAgTGlzdDxTdHJpbmc+IHdvcmtsaXN0ID0gPFN0cmluZz5bXTsKCiAgICAvLyBMaXN0IG9mIHZhcmlhYmxlcyB0aGF0IHdlIGNhbiBhc3NpZ24gYSB2YWx1ZSB0byAoaWUgYXJlIG5vdAogICAgLy8gYmVpbmcgdXNlZCBhbnltb3JlKS4KICAgIExpc3Q8U3RyaW5nPiByZWFkeSA9IDxTdHJpbmc+W107CgogICAgLy8gUHJ1bmUgW2NvcGllc10gYnkgcmVtb3Zpbmcgc2VsZi1jb3BpZXMuCiAgICBMaXN0PENvcHk8U3RyaW5nPj4gcHJ1bmVkQ29waWVzID0gPENvcHk8U3RyaW5nPj5bXTsKICAgIGZvciAoQ29weTxTdHJpbmc+IGNvcHkgaW4gY29waWVzKSB7CiAgICAgIGlmIChjb3B5LnNvdXJjZSAhPSBjb3B5LmRlc3RpbmF0aW9uKSB7CiAgICAgICAgcHJ1bmVkQ29waWVzLmFkZChjb3B5KTsKICAgICAgfQogICAgfQogICAgY29waWVzID0gcHJ1bmVkQ29waWVzOwoKICAgIC8vIEZvciBlYWNoIGNvcHksIHNldCB0aGUgY3VycmVudCBsb2NhdGlvbiBvZiB0aGUgc291cmNlIHRvCiAgICAvLyBpdHNlbGYsIGFuZCB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgZGVzdGluYXRpb24gdG8gdGhlIHNvdXJjZS4KICAgIC8vIEFkZCB0aGUgZGVzdGluYXRpb24gdG8gdGhlIGxpc3Qgb2YgY29waWVzIHRvIG1ha2UuCiAgICBmb3IgKENvcHk8U3RyaW5nPiBjb3B5IGluIGNvcGllcykgewogICAgICBjdXJyZW50TG9jYXRpb25bY29weS5zb3VyY2VdID0gY29weS5zb3VyY2U7CiAgICAgIGluaXRpYWxWYWx1ZVtjb3B5LmRlc3RpbmF0aW9uXSA9IGNvcHkuc291cmNlOwogICAgICB3b3JrbGlzdC5hZGQoY29weS5kZXN0aW5hdGlvbik7CiAgICB9CgogICAgLy8gRm9yIGVhY2ggY29weSwgaWYgdGhlIGRlc3RpbmF0aW9uIGRvZXMgbm90IGhhdmUgYSBjdXJyZW50CiAgICAvLyBsb2NhdGlvbiwgdGhlbiB3ZSBjYW4gc2FmZWx5IGFzc2lnbiB0byBpdC4KICAgIGZvciAoQ29weTxTdHJpbmc+IGNvcHkgaW4gY29waWVzKSB7CiAgICAgIGlmIChjdXJyZW50TG9jYXRpb25bY29weS5kZXN0aW5hdGlvbl0gPT0gbnVsbCkgewogICAgICAgIHJlYWR5LmFkZChjb3B5LmRlc3RpbmF0aW9uKTsKICAgICAgfQogICAgfQoKICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSkgewogICAgICB3aGlsZSAoIXJlYWR5LmlzRW1wdHkpIHsKICAgICAgICBTdHJpbmcgZGVzdGluYXRpb24gPSByZWFkeS5yZW1vdmVMYXN0KCk7CiAgICAgICAgU3RyaW5nIHNvdXJjZSA9IGluaXRpYWxWYWx1ZVtkZXN0aW5hdGlvbl07CiAgICAgICAgLy8gU2luY2UgW3NvdXJjZV0gbWlnaHQgaGF2ZSBiZWVuIHVwZGF0ZWQsIHVzZSB0aGUgY3VycmVudAogICAgICAgIC8vIGxvY2F0aW9uIG9mIFtzb3VyY2VdCiAgICAgICAgU3RyaW5nIGNvcHkgPSBjdXJyZW50TG9jYXRpb25bc291cmNlXTsKICAgICAgICBkb0Fzc2lnbm1lbnQoZGVzdGluYXRpb24sIGNvcHksCiAgICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uTWFwW2NvcHldID8/IHNvdXJjZUluZm9ybWF0aW9uTWFwW2Rlc3RpbmF0aW9uXSk7CiAgICAgICAgLy8gTm93IFtkZXN0aW5hdGlvbl0gaXMgdGhlIGN1cnJlbnQgbG9jYXRpb24gb2YgW3NvdXJjZV0uCiAgICAgICAgY3VycmVudExvY2F0aW9uW3NvdXJjZV0gPSBkZXN0aW5hdGlvbjsKICAgICAgICAvLyBJZiBbc291cmNlXSBoYXNuJ3QgYmVlbiB1cGRhdGVkIGFuZCBuZWVkcyB0byBoYXZlIGEgdmFsdWUsCiAgICAgICAgLy8gYWRkIGl0IHRvIHRoZSBsaXN0IG9mIHZhcmlhYmxlcyB0aGF0IGNhbiBiZSB1cGRhdGVkLiBDb3BpZXMKICAgICAgICAvLyBvZiBbc291cmNlXSB3aWxsIG5vdyB1c2UgW2Rlc3RpbmF0aW9uXS4KICAgICAgICBpZiAoc291cmNlID09IGNvcHkgJiYgaW5pdGlhbFZhbHVlW3NvdXJjZV0gIT0gbnVsbCkgewogICAgICAgICAgcmVhZHkuYWRkKHNvdXJjZSk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgY3ljbGUuCiAgICAgIFN0cmluZyBjdXJyZW50ID0gd29ya2xpc3QucmVtb3ZlTGFzdCgpOwogICAgICAvLyBJZiBbY3VycmVudF0gaXMgdXNlZCBhcyBhIHNvdXJjZSwgYW5kIHRoZSBhc3NpZ25tZW50IGhhcyBiZWVuCiAgICAgIC8vIGRvbmUsIHdlIGFyZSBkb25lIHdpdGggdGhpcyB2YXJpYWJsZS4gT3RoZXJ3aXNlIHRoZXJlIGlzIGEKICAgICAgLy8gY3ljbGUgdGhhdCB3ZSBicmVhayBieSB1c2luZyBhIHRlbXBvcmFyeSBuYW1lLgogICAgICBpZiAoY3VycmVudExvY2F0aW9uW2N1cnJlbnRdICE9IG51bGwgJiYKICAgICAgICAgIGN1cnJlbnQgIT0gY3VycmVudExvY2F0aW9uW2luaXRpYWxWYWx1ZVtjdXJyZW50XV0pIHsKICAgICAgICBkb0Fzc2lnbm1lbnQodGVtcE5hbWUsIGN1cnJlbnQsIHNvdXJjZUluZm9ybWF0aW9uTWFwW2N1cnJlbnRdKTsKICAgICAgICBjdXJyZW50TG9jYXRpb25bY3VycmVudF0gPSB0ZW1wTmFtZTsKICAgICAgICAvLyBbY3VycmVudF0gY2FuIG5vdyBiZSBzYWZlbHkgdXBkYXRlZC4gQ29waWVzIG9mIFtjdXJyZW50XQogICAgICAgIC8vIHdpbGwgbm93IHVzZSBbdGVtcE5hbWVdLgogICAgICAgIHJlYWR5LmFkZChjdXJyZW50KTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBhc3NpZ25QaGlzT2ZTdWNjZXNzb3JzKEhCYXNpY0Jsb2NrIG5vZGUpIHsKICAgIENvcHlIYW5kbGVyIGhhbmRsZXIgPSB2YXJpYWJsZU5hbWVzLmdldENvcHlIYW5kbGVyKG5vZGUpOwogICAgaWYgKGhhbmRsZXIgPT0gbnVsbCkgcmV0dXJuOwoKICAgIHNlcXVlbnRpYWxpemVDb3BpZXMoCiAgICAgICAgaGFuZGxlci5jb3BpZXMsIHZhcmlhYmxlTmFtZXMuZ2V0U3dhcFRlbXAoKSwgZW1pdEFzc2lnbm1lbnQpOwoKICAgIGZvciAoQ29weTxISW5zdHJ1Y3Rpb24+IGNvcHkgaW4gaGFuZGxlci5hc3NpZ25tZW50cykgewogICAgICBTdHJpbmcgbmFtZSA9IHZhcmlhYmxlTmFtZXMuZ2V0TmFtZShjb3B5LmRlc3RpbmF0aW9uKTsKICAgICAgdXNlKGNvcHkuc291cmNlKTsKICAgICAgYXNzaWduVmFyaWFibGUobmFtZSwgcG9wKCksCiAgICAgICAgICBjb3B5LnNvdXJjZS5zb3VyY2VJbmZvcm1hdGlvbiA/PyBjb3B5LmRlc3RpbmF0aW9uLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0KICB9CgogIHZvaWQgaXRlcmF0ZUJhc2ljQmxvY2soSEJhc2ljQmxvY2sgbm9kZSkgewogICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gbm9kZS5maXJzdDsKICAgIHdoaWxlICghaWRlbnRpY2FsKGluc3RydWN0aW9uLCBub2RlLmxhc3QpKSB7CiAgICAgIGlmICghaXNHZW5lcmF0ZUF0VXNlU2l0ZShpbnN0cnVjdGlvbikpIHsKICAgICAgICBkZWZpbmUoaW5zdHJ1Y3Rpb24pOwogICAgICB9CiAgICAgIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb24ubmV4dDsKICAgIH0KICAgIGFzc2lnblBoaXNPZlN1Y2Nlc3NvcnMobm9kZSk7CiAgICB2aXNpdChpbnN0cnVjdGlvbik7CiAgfQoKICB2b2lkIGhhbmRsZUludm9rZUJpbmFyeSgKICAgICAgSEludm9rZUJpbmFyeSBub2RlLCBTdHJpbmcgb3AsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICB1c2Uobm9kZS5sZWZ0KTsKICAgIGpzLkV4cHJlc3Npb24ganNMZWZ0ID0gcG9wKCk7CiAgICB1c2Uobm9kZS5yaWdodCk7CiAgICBwdXNoKG5ldyBqcy5CaW5hcnkob3AsIGpzTGVmdCwgcG9wKCkpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRMYXRlVmFsdWUoSExhdGVWYWx1ZSBub2RlKSB7CiAgICB1c2Uobm9kZS50YXJnZXQpOwogIH0KCiAgdmlzaXRJbnZva2VCaW5hcnkoSEludm9rZUJpbmFyeSBub2RlLCBTdHJpbmcgb3ApIHsKICAgIGhhbmRsZUludm9rZUJpbmFyeShub2RlLCBvcCwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICB2aXNpdFJlbGF0aW9uYWwoSFJlbGF0aW9uYWwgbm9kZSwgU3RyaW5nIG9wKSB7CiAgICBoYW5kbGVJbnZva2VCaW5hcnkobm9kZSwgb3AsIG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgLy8gV2Ugd2FudCB0aGUgb3V0Y29tZSBvZiBiaXQtb3BlcmF0aW9ucyB0byBiZSBwb3NpdGl2ZS4gV2UgdXNlIHRoZSB1bnNpZ25lZAogIC8vIHNoaWZ0IG9wZXJhdG9yIHRvIGFjaGlldmUgdGhpcy4KICB2aXNpdEJpdEludm9rZUJpbmFyeShIQmluYXJ5Qml0T3Agbm9kZSwgU3RyaW5nIG9wKSB7CiAgICB2aXNpdEludm9rZUJpbmFyeShub2RlLCBvcCk7CiAgICBpZiAob3AgIT0gJz4+PicgJiYgcmVxdWlyZXNVaW50Q29udmVyc2lvbihub2RlKSkgewogICAgICBwdXNoKG5ldyBqcy5CaW5hcnkoIj4+PiIsIHBvcCgpLCBuZXcganMuTGl0ZXJhbE51bWJlcigiMCIpKQogICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9CiAgfQoKICB2aXNpdEludm9rZVVuYXJ5KEhJbnZva2VVbmFyeSBub2RlLCBTdHJpbmcgb3ApIHsKICAgIHVzZShub2RlLm9wZXJhbmQpOwogICAgcHVzaCgKICAgICAgICBuZXcganMuUHJlZml4KG9wLCBwb3AoKSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIC8vIFdlIHdhbnQgdGhlIG91dGNvbWUgb2YgYml0LW9wZXJhdGlvbnMgdG8gYmUgcG9zaXRpdmUuIFdlIHVzZSB0aGUgdW5zaWduZWQKICAvLyBzaGlmdCBvcGVyYXRvciB0byBhY2hpZXZlIHRoaXMuCiAgdmlzaXRCaXRJbnZva2VVbmFyeShISW52b2tlVW5hcnkgbm9kZSwgU3RyaW5nIG9wKSB7CiAgICB2aXNpdEludm9rZVVuYXJ5KG5vZGUsIG9wKTsKICAgIGlmIChyZXF1aXJlc1VpbnRDb252ZXJzaW9uKG5vZGUpKSB7CiAgICAgIHB1c2gobmV3IGpzLkJpbmFyeSgiPj4+IiwgcG9wKCksIG5ldyBqcy5MaXRlcmFsTnVtYmVyKCIwIikpCiAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICB9CgogIHZvaWQgZW1pdElkZW50aXR5Q29tcGFyaXNvbigKICAgICAgSElkZW50aXR5IGluc3RydWN0aW9uLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAge2Jvb2wgaW52ZXJzZTogZmFsc2V9KSB7CiAgICBTdHJpbmcgb3AgPSBpbnN0cnVjdGlvbi5zaW5nbGVDb21wYXJpc29uT3A7CiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IGluc3RydWN0aW9uLmxlZnQ7CiAgICBISW5zdHJ1Y3Rpb24gcmlnaHQgPSBpbnN0cnVjdGlvbi5yaWdodDsKICAgIGlmIChvcCAhPSBudWxsKSB7CiAgICAgIHVzZShsZWZ0KTsKICAgICAganMuRXhwcmVzc2lvbiBqc0xlZnQgPSBwb3AoKTsKICAgICAgdXNlKHJpZ2h0KTsKICAgICAgcHVzaChuZXcganMuQmluYXJ5KG1hcFJlbGF0aW9uYWxPcGVyYXRvcihvcCwgaW52ZXJzZSksIGpzTGVmdCwgcG9wKCkpCiAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoTnVsbENvbnN0YW50VmFsdWUuSnNOdWxsID09ICdudWxsJyk7CiAgICAgIHVzZShsZWZ0KTsKICAgICAganMuQmluYXJ5IGxlZnRFcXVhbHNOdWxsID0KICAgICAgICAgIG5ldyBqcy5CaW5hcnkoIj09IiwgcG9wKCksIG5ldyBqcy5MaXRlcmFsTnVsbCgpKTsKICAgICAgdXNlKHJpZ2h0KTsKICAgICAganMuQmluYXJ5IHJpZ2h0RXF1YWxzTnVsbCA9IG5ldyBqcy5CaW5hcnkoCiAgICAgICAgICBtYXBSZWxhdGlvbmFsT3BlcmF0b3IoIj09IiwgaW52ZXJzZSksIHBvcCgpLCBuZXcganMuTGl0ZXJhbE51bGwoKSk7CiAgICAgIHVzZShyaWdodCk7CiAgICAgIHVzZShsZWZ0KTsKICAgICAganMuQmluYXJ5IHRyaXBsZUVxID0KICAgICAgICAgIG5ldyBqcy5CaW5hcnkobWFwUmVsYXRpb25hbE9wZXJhdG9yKCI9PT0iLCBpbnZlcnNlKSwgcG9wKCksIHBvcCgpKTsKCiAgICAgIHB1c2gobmV3IGpzLkNvbmRpdGlvbmFsKGxlZnRFcXVhbHNOdWxsLCByaWdodEVxdWFsc051bGwsIHRyaXBsZUVxKQogICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRJZGVudGl0eShISWRlbnRpdHkgbm9kZSkgewogICAgZW1pdElkZW50aXR5Q29tcGFyaXNvbihub2RlLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uLCBpbnZlcnNlOiBmYWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEFkZChIQWRkIG5vZGUpID0+IHZpc2l0SW52b2tlQmluYXJ5KG5vZGUsICcrJyk7CiAgQG92ZXJyaWRlCiAgdmlzaXREaXZpZGUoSERpdmlkZSBub2RlKSA9PiB2aXNpdEludm9rZUJpbmFyeShub2RlLCAnLycpOwogIEBvdmVycmlkZQogIHZpc2l0TXVsdGlwbHkoSE11bHRpcGx5IG5vZGUpID0+IHZpc2l0SW52b2tlQmluYXJ5KG5vZGUsICcqJyk7CiAgQG92ZXJyaWRlCiAgdmlzaXRTdWJ0cmFjdChIU3VidHJhY3Qgbm9kZSkgPT4gdmlzaXRJbnZva2VCaW5hcnkobm9kZSwgJy0nKTsKICBAb3ZlcnJpZGUKICB2aXNpdEJpdEFuZChIQml0QW5kIG5vZGUpID0+IHZpc2l0Qml0SW52b2tlQmluYXJ5KG5vZGUsICcmJyk7CiAgQG92ZXJyaWRlCiAgdmlzaXRCaXROb3QoSEJpdE5vdCBub2RlKSA9PiB2aXNpdEJpdEludm9rZVVuYXJ5KG5vZGUsICd+Jyk7CiAgQG92ZXJyaWRlCiAgdmlzaXRCaXRPcihIQml0T3Igbm9kZSkgPT4gdmlzaXRCaXRJbnZva2VCaW5hcnkobm9kZSwgJ3wnKTsKICBAb3ZlcnJpZGUKICB2aXNpdEJpdFhvcihIQml0WG9yIG5vZGUpID0+IHZpc2l0Qml0SW52b2tlQmluYXJ5KG5vZGUsICdeJyk7CiAgQG92ZXJyaWRlCiAgdmlzaXRTaGlmdExlZnQoSFNoaWZ0TGVmdCBub2RlKSA9PiB2aXNpdEJpdEludm9rZUJpbmFyeShub2RlLCAnPDwnKTsKICBAb3ZlcnJpZGUKICB2aXNpdFNoaWZ0UmlnaHQoSFNoaWZ0UmlnaHQgbm9kZSkgPT4gdmlzaXRCaXRJbnZva2VCaW5hcnkobm9kZSwgJz4+PicpOwoKICBAb3ZlcnJpZGUKICB2aXNpdFRydW5jYXRpbmdEaXZpZGUoSFRydW5jYXRpbmdEaXZpZGUgbm9kZSkgewogICAgYXNzZXJ0KG5vZGUuaXNVSW50MzEoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpOwogICAgLy8gVE9ETyhrYXJsa2xvc2UpOiBFbmFibGUgdGhpcyBhc3NlcnRpb24gYWdhaW4gd2hlbiB0eXBlIHByb3BhZ2F0aW9uIGlzCiAgICAvLyBmaXhlZC4gSXNzdWUgMjM1NTUuCi8vICAgIGFzc2VydChub2RlLmxlZnQuaXNVSW50MzIoY29tcGlsZXIpKTsKICAgIGFzc2VydChub2RlLnJpZ2h0LmlzUG9zaXRpdmVJbnRlZ2VyKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKTsKICAgIHVzZShub2RlLmxlZnQpOwogICAganMuRXhwcmVzc2lvbiBqc0xlZnQgPSBwb3AoKTsKICAgIHVzZShub2RlLnJpZ2h0KTsKICAgIHB1c2gobmV3IGpzLkJpbmFyeSgnLycsIGpzTGVmdCwgcG9wKCkpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICBwdXNoKG5ldyBqcy5CaW5hcnkoJ3wnLCBwb3AoKSwgbmV3IGpzLkxpdGVyYWxOdW1iZXIoIjAiKSkKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0UmVtYWluZGVyKEhSZW1haW5kZXIgbm9kZSkgewogICAgcmV0dXJuIHZpc2l0SW52b2tlQmluYXJ5KG5vZGUsICclJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdE5lZ2F0ZShITmVnYXRlIG5vZGUpID0+IHZpc2l0SW52b2tlVW5hcnkobm9kZSwgJy0nKTsKCiAgQG92ZXJyaWRlCiAgdmlzaXRBYnMoSEFicyBub2RlKSB7CiAgICB1c2Uobm9kZS5vcGVyYW5kKTsKICAgIHB1c2goanMKICAgICAgICAuanMoJ01hdGguYWJzKCMpJywgcG9wKCkpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdExlc3MoSExlc3Mgbm9kZSkgPT4gdmlzaXRSZWxhdGlvbmFsKG5vZGUsICc8Jyk7CiAgQG92ZXJyaWRlCiAgdmlzaXRMZXNzRXF1YWwoSExlc3NFcXVhbCBub2RlKSA9PiB2aXNpdFJlbGF0aW9uYWwobm9kZSwgJzw9Jyk7CiAgQG92ZXJyaWRlCiAgdmlzaXRHcmVhdGVyKEhHcmVhdGVyIG5vZGUpID0+IHZpc2l0UmVsYXRpb25hbChub2RlLCAnPicpOwogIEBvdmVycmlkZQogIHZpc2l0R3JlYXRlckVxdWFsKEhHcmVhdGVyRXF1YWwgbm9kZSkgPT4gdmlzaXRSZWxhdGlvbmFsKG5vZGUsICc+PScpOwoKICBAb3ZlcnJpZGUKICB2aXNpdEV4aXQoSEV4aXQgbm9kZSkgewogICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcuCiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEdvdG8oSEdvdG8gbm9kZSkgewogICAgSEJhc2ljQmxvY2sgYmxvY2sgPSBub2RlLmJsb2NrOwogICAgYXNzZXJ0KGJsb2NrLnN1Y2Nlc3NvcnMubGVuZ3RoID09IDEpOwogICAgTGlzdDxIQmFzaWNCbG9jaz4gZG9taW5hdGVkID0gYmxvY2suZG9taW5hdGVkQmxvY2tzOwogICAgLy8gV2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBlbnRyeS1ub2RlIHdoaWNoIGRvbWluYXRlcyBpdHMgc3VjY2Vzc29yCiAgICAvLyBhbmQgdGhlIGV4aXQgbm9kZSwgbm8gYmxvY2sgZmluaXNoaW5nIHdpdGggYSAnZ290bycgY2FuIGhhdmUgbW9yZSB0aGFuCiAgICAvLyBvbmUgZG9taW5hdGVkIGJsb2NrIChzaW5jZSBpdCBoYXMgb25seSBvbmUgc3VjY2Vzc29yKS4KICAgIC8vIElmIHRoZSBzdWNjZXNzb3IgaXMgZG9taW5hdGVkIGJ5IGFub3RoZXIgYmxvY2ssIHRoZW4gdGhlIG90aGVyIGJsb2NrCiAgICAvLyBpcyByZXNwb25zaWJsZSBmb3IgdmlzaXRpbmcgdGhlIHN1Y2Nlc3Nvci4KICAgIGlmIChkb21pbmF0ZWQuaXNFbXB0eSkgcmV0dXJuOwogICAgaWYgKGRvbWluYXRlZC5sZW5ndGggPiAyKSB7CiAgICAgIGZhaWxlZEF0KG5vZGUsICdkb21pbmF0ZWQubGVuZ3RoID0gJHtkb21pbmF0ZWQubGVuZ3RofScpOwogICAgfQogICAgaWYgKGRvbWluYXRlZC5sZW5ndGggPT0gMiAmJiBibG9jayAhPSBjdXJyZW50R3JhcGguZW50cnkpIHsKICAgICAgZmFpbGVkQXQobm9kZSwgJ25vZGUuYmxvY2sgIT0gY3VycmVudEdyYXBoLmVudHJ5Jyk7CiAgICB9CiAgICBhc3NlcnQoZG9taW5hdGVkWzBdID09IGJsb2NrLnN1Y2Nlc3NvcnNbMF0pOwogICAgY29udGludWVTdWJHcmFwaChkb21pbmF0ZWQuZmlyc3QpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRMb29wQnJhbmNoKEhMb29wQnJhbmNoIG5vZGUpIHsKICAgIGFzc2VydChub2RlLmJsb2NrID09IHN1YkdyYXBoLmVuZCk7CiAgICAvLyBXZSBhcmUgZ2VuZXJhdGluZyBjb2RlIGZvciBhIGxvb3AgY29uZGl0aW9uLgogICAgLy8gSWYgd2UgYXJlIGdlbmVyYXRpbmcgdGhlIHN1YmdyYXBoIGFzIGFuIGV4cHJlc3Npb24sIHRoZQogICAgLy8gY29uZGl0aW9uIHdpbGwgYmUgZ2VuZXJhdGVkIGFzIHRoZSBleHByZXNzaW9uLgogICAgLy8gT3RoZXJ3aXNlLCB3ZSBkb24ndCBnZW5lcmF0ZSB0aGUgZXhwcmVzc2lvbiwgYW5kIGxlYXZlIHRoYXQKICAgIC8vIHRvIHRoZSBjb2RlIHRoYXQgY2FsbGVkIFt2aXNpdFN1YkdyYXBoXS4KICAgIGlmIChpc0dlbmVyYXRpbmdFeHByZXNzaW9uKSB7CiAgICAgIHVzZShub2RlLmlucHV0c1swXSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEJyZWFrKEhCcmVhayBub2RlKSB7CiAgICBhc3NlcnQobm9kZS5ibG9jay5zdWNjZXNzb3JzLmxlbmd0aCA9PSAxKTsKICAgIGlmIChub2RlLmxhYmVsICE9IG51bGwpIHsKICAgICAgTGFiZWxEZWZpbml0aW9uIGxhYmVsID0gbm9kZS5sYWJlbDsKICAgICAgaWYgKGJyZWFrQWN0aW9uLmNvbnRhaW5zKGxhYmVsLnRhcmdldCkpIHsKICAgICAgICBpbXBsaWNpdEJyZWFrV2l0aExhYmVsKGxhYmVsLnRhcmdldCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcHVzaFN0YXRlbWVudChuZXcganMuQnJlYWsoX25hbWVyLmJyZWFrTGFiZWxOYW1lKGxhYmVsKSkKICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIEp1bXBUYXJnZXQgdGFyZ2V0ID0gbm9kZS50YXJnZXQ7CiAgICAgIGlmIChicmVha0FjdGlvbi5jb250YWlucyh0YXJnZXQpKSB7CiAgICAgICAgaW1wbGljaXRCcmVha1dpdGhMYWJlbCh0YXJnZXQpOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChub2RlLmJyZWFrU3dpdGNoQ29udGludWVMb29wKSB7CiAgICAgICAgICBwdXNoU3RhdGVtZW50KG5ldyBqcy5CcmVhayhfbmFtZXIuaW1wbGljaXRDb250aW51ZUxhYmVsTmFtZSh0YXJnZXQpKQogICAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwdXNoU3RhdGVtZW50KAogICAgICAgICAgICAgIG5ldyBqcy5CcmVhayhudWxsKS53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDb250aW51ZShIQ29udGludWUgbm9kZSkgewogICAgYXNzZXJ0KG5vZGUuYmxvY2suc3VjY2Vzc29ycy5sZW5ndGggPT0gMSk7CiAgICBpZiAobm9kZS5sYWJlbCAhPSBudWxsKSB7CiAgICAgIExhYmVsRGVmaW5pdGlvbiBsYWJlbCA9IG5vZGUubGFiZWw7CiAgICAgIGlmIChjb250aW51ZUFjdGlvbi5jb250YWlucyhsYWJlbCkpIHsKICAgICAgICBjb250aW51ZUFzQnJlYWsobGFiZWwpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiBzaG91bGQgdGhpcyByZWFsbHkgYmUgdGhlIGJyZWFrTGFiZWxOYW1lPwogICAgICAgIHB1c2hTdGF0ZW1lbnQobmV3IGpzLkNvbnRpbnVlKF9uYW1lci5icmVha0xhYmVsTmFtZShsYWJlbCkpCiAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBKdW1wVGFyZ2V0IHRhcmdldCA9IG5vZGUudGFyZ2V0OwogICAgICBpZiAoaW1wbGljaXRDb250aW51ZUFjdGlvbi5jb250YWlucyh0YXJnZXQpKSB7CiAgICAgICAgaW1wbGljaXRDb250aW51ZUFzQnJlYWsodGFyZ2V0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAodGFyZ2V0LmlzU3dpdGNoKSB7CiAgICAgICAgICBwdXNoU3RhdGVtZW50KAogICAgICAgICAgICAgIG5ldyBqcy5Db250aW51ZShfbmFtZXIuaW1wbGljaXRDb250aW51ZUxhYmVsTmFtZSh0YXJnZXQpKQogICAgICAgICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcHVzaFN0YXRlbWVudChuZXcganMuQ29udGludWUobnVsbCkKICAgICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0RXhpdFRyeShIRXhpdFRyeSBub2RlKSB7CiAgICAvLyBBbiBbSEV4aXRUcnldIGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBjb250cm9sIGZsb3cgZ3JhcGggb2YgYQogICAgLy8gdHJ5L2NhdGNoIGJsb2NrLCBpZSB0aGUgdHJ5IGJvZHkgaXMgYWx3YXlzIGEgcHJlZGVjZXNzb3IKICAgIC8vIG9mIHRoZSBjYXRjaCBhbmQgZmluYWxseS4gSGVyZSwgd2UgY29udGludWUgdmlzaXRpbmcgdGhlIHRyeQogICAgLy8gYm9keSBieSB2aXNpdGluZyB0aGUgYmxvY2sgdGhhdCBjb250YWlucyB0aGUgdXNlci1sZXZlbCBjb250cm9sCiAgICAvLyBmbG93IGluc3RydWN0aW9uLgogICAgY29udGludWVTdWJHcmFwaChub2RlLmJvZHlUcnlTdWNjZXNzb3IpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUcnkoSFRyeSBub2RlKSB7CiAgICAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUuIFRyeS9jYXRjaC9maW5hbGx5IGlzIGFsd2F5cyBoYW5kbGVkIHVzaW5nIGJsb2NrCiAgICAvLyBpbmZvcm1hdGlvbiBpbiBbdmlzaXRUcnlJbmZvXS4KICAgIGZhaWxlZEF0KG5vZGUsICd2aXNpdFRyeSBzaG91bGQgbm90IGJlIGNhbGxlZC4nKTsKICB9CgogIGJvb2wgdHJ5Q29udHJvbEZsb3dPcGVyYXRpb24oSElmIG5vZGUpIHsKICAgIGlmICghY29udHJvbEZsb3dPcGVyYXRvcnMuY29udGFpbnMobm9kZSkpIHJldHVybiBmYWxzZTsKICAgIEhQaGkgcGhpID0gbm9kZS5qb2luQmxvY2sucGhpcy5maXJzdDsKICAgIGJvb2wgYXRVc2VTaXRlID0gaXNHZW5lcmF0ZUF0VXNlU2l0ZShwaGkpOwogICAgLy8gRG9uJ3QgZ2VuZXJhdGUgYSBjb25kaXRpb25hbCBvcGVyYXRvciBpbiB0aGlzIHNpdHVhdGlvbjoKICAgIC8vIGkgPSBjb25kaXRpb24gPyBiYXIoKSA6IGk7CiAgICAvLyBCdXQgZ2VuZXJhdGUgdGhpcyBpbnN0ZWFkOgogICAgLy8gaWYgKGNvbmRpdGlvbikgaSA9IGJhcigpOwogICAgLy8gVXN1YWxseSwgdGhlIHZhcmlhYmxlIG5hbWUgaXMgbG9uZ2VyIHRoYW4gJ2lmJyBhbmQgaXQgdGFrZXMgdXAKICAgIC8vIG1vcmUgc3BhY2UgdG8gZHVwbGljYXRlIHRoZSBuYW1lLgogICAgaWYgKCFhdFVzZVNpdGUgJiYKICAgICAgICB2YXJpYWJsZU5hbWVzLmdldE5hbWUocGhpKSA9PSB2YXJpYWJsZU5hbWVzLmdldE5hbWUocGhpLmlucHV0c1sxXSkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKCFhdFVzZVNpdGUpIGRlZmluZShwaGkpOwogICAgY29udGludWVTdWJHcmFwaChub2RlLmpvaW5CbG9jayk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIHZvaWQgZ2VuZXJhdGVJZihISWYgbm9kZSwgSElmQmxvY2tJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBIU3RhdGVtZW50SW5mb3JtYXRpb24gdGhlbkdyYXBoID0gaW5mby50aGVuR3JhcGg7CiAgICBIU3RhdGVtZW50SW5mb3JtYXRpb24gZWxzZUdyYXBoID0gaW5mby5lbHNlR3JhcGg7CiAgICBISW5zdHJ1Y3Rpb24gY29uZGl0aW9uID0gbm9kZS5pbnB1dHMuc2luZ2xlOwoKICAgIGpzLkV4cHJlc3Npb24gdGVzdDsKICAgIGpzLlN0YXRlbWVudCB0aGVuUGFydDsKICAgIGpzLlN0YXRlbWVudCBlbHNlUGFydDsKCiAgICBIQmFzaWNCbG9jayB0aGVuQmxvY2sgPSBub2RlLmJsb2NrLnN1Y2Nlc3NvcnNbMF07CiAgICAvLyBJZiB3ZSBiZWxpZXZlIHdlIHdpbGwgZ2VuZXJhdGUgUzEgYXMgZW1wdHksIGluc3RlYWQgb2YKICAgIC8vCiAgICAvLyAgICAgaWYgKGUpIFMxOyBlbHNlIFMyOwogICAgLy8KICAgIC8vIHRyeSB0byBnZW5lcmF0ZQogICAgLy8KICAgIC8vICAgICBpZiAoIWUpIFMyOyBlbHNlIFMxOwogICAgLy8KICAgIC8vIEl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBgIWVgIHJhdGhlciB0aGFuIHRyeSBhbmQgbmVnYXRlIGl0IGxhdGVyLgogICAgLy8gUmVjb2duaXplIGEgc2luZ2xlIHRoZW4tYmxvY2sgd2l0aCBubyBjb2RlIGFuZCBubyBjb250cm9sbGVkIHBoaXMuCiAgICBpZiAoaXNHZW5lcmF0ZUF0VXNlU2l0ZShjb25kaXRpb24pICYmCiAgICAgICAgdGhlbkJsb2NrLnN1Y2Nlc3NvcnMubGVuZ3RoID09IDEgJiYKICAgICAgICB0aGVuQmxvY2suc3VjY2Vzc29ycy5zaW5nbGUgPT0gbm9kZS5qb2luQmxvY2sgJiYKICAgICAgICBub2RlLmpvaW5CbG9jay5waGlzLmlzRW1wdHkgJiYKICAgICAgICB0aGVuQmxvY2suZmlyc3QgaXMgSEdvdG8pIHsKICAgICAgZ2VuZXJhdGVOb3QoY29uZGl0aW9uLCBjb25kaXRpb24uc291cmNlSW5mb3JtYXRpb24pOwogICAgICB0ZXN0ID0gcG9wKCk7CiAgICAgIC8vIFN3YXAgYnJhbmNoZXMgYnV0IHZpc2l0IGluIHNhbWUgb3JkZXIgYXMgcmVnaXN0ZXIgYWxsb2NhdG9yLgogICAgICBlbHNlUGFydCA9IHVud3JhcFN0YXRlbWVudChnZW5lcmF0ZVN0YXRlbWVudHNJbk5ld0Jsb2NrKHRoZW5HcmFwaCkpOwogICAgICB0aGVuUGFydCA9IHVud3JhcFN0YXRlbWVudChnZW5lcmF0ZVN0YXRlbWVudHNJbk5ld0Jsb2NrKGVsc2VHcmFwaCkpOwogICAgICBhc3NlcnQoZWxzZVBhcnQgaXMganMuRW1wdHlTdGF0ZW1lbnQpOwogICAgfSBlbHNlIHsKICAgICAgdXNlKGNvbmRpdGlvbik7CiAgICAgIHRlc3QgPSBwb3AoKTsKICAgICAgdGhlblBhcnQgPSB1bndyYXBTdGF0ZW1lbnQoZ2VuZXJhdGVTdGF0ZW1lbnRzSW5OZXdCbG9jayh0aGVuR3JhcGgpKTsKICAgICAgZWxzZVBhcnQgPSB1bndyYXBTdGF0ZW1lbnQoZ2VuZXJhdGVTdGF0ZW1lbnRzSW5OZXdCbG9jayhlbHNlR3JhcGgpKTsKICAgIH0KCiAgICBqcy5TdGF0ZW1lbnQgY29kZSA9IF9hc3NlbWJsZUlmVGhlbkVsc2UodGVzdCwgdGhlblBhcnQsIGVsc2VQYXJ0KTsKICAgIHB1c2hTdGF0ZW1lbnQoY29kZS53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAganMuU3RhdGVtZW50IF9hc3NlbWJsZUlmVGhlbkVsc2UoCiAgICAgIGpzLkV4cHJlc3Npb24gdGVzdCwganMuU3RhdGVtZW50IHRoZW5QYXJ0LCBqcy5TdGF0ZW1lbnQgZWxzZVBhcnQpIHsKICAgIC8vIFBlZXBob2xlIHJld3JpdGVzOgogICAgLy8KICAgIC8vICAgICBpZiAoZSk7IGVsc2UgUzsgICAtLT4gICBpZiAoIWUpIFM7CiAgICAvLwogICAgLy8gICAgIGlmIChlKTsgICAtLT4gICBlOwogICAgLy8KICAgIC8vIFRPRE8oc3JhKTogV2UgbWlnaHQgYmUgYWJsZSB0byBkbyBiZXR0ZXIgd2l0aCByZXNoYXBpbmcgdGhlIENGRy4KICAgIGlmICh0aGVuUGFydCBpcyBqcy5FbXB0eVN0YXRlbWVudCkgewogICAgICBpZiAoZWxzZVBhcnQgaXMganMuRW1wdHlTdGF0ZW1lbnQpIHsKICAgICAgICByZXR1cm4ganMuRXhwcmVzc2lvblN0YXRlbWVudCh0ZXN0KTsKICAgICAgfQogICAgICB0ZXN0ID0ganMuUHJlZml4KCchJywgdGVzdCk7CiAgICAgIHZhciB0ZW1wID0gdGhlblBhcnQ7CiAgICAgIHRoZW5QYXJ0ID0gZWxzZVBhcnQ7CiAgICAgIGVsc2VQYXJ0ID0gdGVtcDsKICAgIH0KCiAgICBpZiAoX29wdGlvbnMuZXhwZXJpbWVudFRvQm9vbGVhbikgewogICAgICBpZiAoZWxzZVBhcnQgaXMganMuRW1wdHlTdGF0ZW1lbnQgJiYKICAgICAgICAgIHRoZW5QYXJ0IGlzIGpzLkV4cHJlc3Npb25TdGF0ZW1lbnQgJiYKICAgICAgICAgIHRoZW5QYXJ0LmV4cHJlc3Npb24gaXMganMuQ2FsbCkgewogICAgICAgIHJldHVybiBqcy5FeHByZXNzaW9uU3RhdGVtZW50KAogICAgICAgICAgICBqcy5CaW5hcnkoJyYmJywgdGVzdCwgdGhlblBhcnQuZXhwcmVzc2lvbikpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGpzLklmKHRlc3QsIHRoZW5QYXJ0LCBlbHNlUGFydCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdElmKEhJZiBub2RlKSB7CiAgICBpZiAodHJ5Q29udHJvbEZsb3dPcGVyYXRpb24obm9kZSkpIHJldHVybjsKCiAgICBISW5zdHJ1Y3Rpb24gY29uZGl0aW9uID0gbm9kZS5pbnB1dHNbMF07CiAgICBISWZCbG9ja0luZm9ybWF0aW9uIGluZm8gPSBub2RlLmJsb2NrSW5mb3JtYXRpb24uYm9keTsKCiAgICBpZiAoY29uZGl0aW9uLmlzQ29uc3RhbnQoKSkgewogICAgICBIQ29uc3RhbnQgY29uc3RhbnQgPSBjb25kaXRpb247CiAgICAgIGlmIChjb25zdGFudC5jb25zdGFudC5pc1RydWUpIHsKICAgICAgICBnZW5lcmF0ZVN0YXRlbWVudHMoaW5mby50aGVuR3JhcGgpOwogICAgICB9IGVsc2UgewogICAgICAgIGdlbmVyYXRlU3RhdGVtZW50cyhpbmZvLmVsc2VHcmFwaCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGdlbmVyYXRlSWYobm9kZSwgaW5mbyk7CiAgICB9CgogICAgSEJhc2ljQmxvY2sgam9pbkJsb2NrID0gbm9kZS5qb2luQmxvY2s7CiAgICBpZiAoam9pbkJsb2NrICE9IG51bGwgJiYgIWlkZW50aWNhbChqb2luQmxvY2suZG9taW5hdG9yLCBub2RlLmJsb2NrKSkgewogICAgICAvLyBUaGUgam9pbiBibG9jayBpcyBkb21pbmF0ZWQgYnkgYSBibG9jayBpbiBvbmUgb2YgdGhlIGJyYW5jaGVzLgogICAgICAvLyBUaGUgc3ViZ3JhcGggdHJhdmVyc2FsIG5ldmVyIHJlYWNoZWQgaXQsIHNvIHdlIHZpc2l0IGl0IGhlcmUKICAgICAgLy8gaW5zdGVhZC4KICAgICAgY29udGludWVTdWJHcmFwaChqb2luQmxvY2spOwogICAgfQoKICAgIC8vIFZpc2l0IGFsbCB0aGUgZG9taW5hdGVkIGJsb2NrcyB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGUgdGhlbiBvciBlbHNlCiAgICAvLyBicmFuY2hlcywgYW5kIGlzIG5vdCB0aGUgam9pbiBibG9jay4KICAgIC8vIERlcGVuZGluZyBvbiBob3cgdGhlIHRoZW4vZWxzZSBicmFuY2hlcyB0ZXJtaW5hdGUKICAgIC8vIChlLmcuLCByZXR1cm4vdGhyb3cvYnJlYWspIHRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mIHRoZXNlLgogICAgTGlzdDxIQmFzaWNCbG9jaz4gZG9taW5hdGVkID0gbm9kZS5ibG9jay5kb21pbmF0ZWRCbG9ja3M7CiAgICBmb3IgKGludCBpID0gMjsgaSA8IGRvbWluYXRlZC5sZW5ndGg7IGkrKykgewogICAgICBjb250aW51ZVN1YkdyYXBoKGRvbWluYXRlZFtpXSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50ZXJjZXB0b3IoSEludGVyY2VwdG9yIG5vZGUpIHsKICAgIGlmIChub2RlLmlzQ29uZGl0aW9uYWxDb25zdGFudEludGVyY2VwdG9yKSB7CiAgICAgIGFzc2VydChub2RlLmlucHV0cy5sZW5ndGggPT0gMik7CiAgICAgIHVzZShub2RlLnJlY2VpdmVyKTsKICAgICAganMuRXhwcmVzc2lvbiByZWNlaXZlckV4cHJlc3Npb24gPSBwb3AoKTsKICAgICAgdXNlKG5vZGUuY29uZGl0aW9uYWxDb25zdGFudEludGVyY2VwdG9yKTsKICAgICAganMuRXhwcmVzc2lvbiBjb25zdGFudCA9IHBvcCgpOwogICAgICBwdXNoKGpzLmpzKCcjICYmICMnLCBbcmVjZWl2ZXJFeHByZXNzaW9uLCBjb25zdGFudF0pKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChub2RlLmlucHV0cy5sZW5ndGggPT0gMSk7CiAgICAgIF9yZWdpc3RyeS5yZWdpc3RlclNwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3Iobm9kZS5pbnRlcmNlcHRlZENsYXNzZXMpOwogICAgICBqcy5OYW1lIG5hbWUgPSBfbmFtZXIubmFtZUZvckdldEludGVyY2VwdG9yKG5vZGUuaW50ZXJjZXB0ZWRDbGFzc2VzKTsKICAgICAganMuRXhwcmVzc2lvbiBpc29sYXRlID0gX25hbWVyCiAgICAgICAgICAucmVhZEdsb2JhbE9iamVjdEZvckxpYnJhcnkoX2NvbW1vbkVsZW1lbnRzLmludGVyY2VwdG9yc0xpYnJhcnkpOwogICAgICB1c2Uobm9kZS5yZWNlaXZlcik7CiAgICAgIExpc3Q8anMuRXhwcmVzc2lvbj4gYXJndW1lbnRzID0gPGpzLkV4cHJlc3Npb24+W3BvcCgpXTsKICAgICAgcHVzaChqcwogICAgICAgICAgLnByb3BlcnR5Q2FsbChpc29sYXRlLCBuYW1lLCBhcmd1bWVudHMpCiAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyVXNlSW50ZXJjZXB0b3IoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0SW52b2tlRHluYW1pY01ldGhvZChISW52b2tlRHluYW1pY01ldGhvZCBub2RlKSB7CiAgICB1c2Uobm9kZS5yZWNlaXZlcik7CiAgICBqcy5FeHByZXNzaW9uIG9iamVjdCA9IHBvcCgpOwogICAgU3RyaW5nIG1ldGhvZE5hbWU7CiAgICBMaXN0PGpzLkV4cHJlc3Npb24+IGFyZ3VtZW50cyA9IHZpc2l0QXJndW1lbnRzKG5vZGUuaW5wdXRzKTsKICAgIE1lbWJlckVudGl0eSB0YXJnZXQgPSBub2RlLmVsZW1lbnQ7CgogICAgLy8gVE9ETyhoZXJodXQpOiBUaGUgbmFtZXIgc2hvdWxkIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgYmFja2VuZG5hbWUgaGVyZS4KICAgIGlmICh0YXJnZXQgIT0gbnVsbCAmJiAhbm9kZS5pc0ludGVyY2VwdGVkQ2FsbCkgewogICAgICBpZiAodGFyZ2V0ID09IF9jb21tb25FbGVtZW50cy5qc0FycmF5QWRkKSB7CiAgICAgICAgbWV0aG9kTmFtZSA9ICdwdXNoJzsKICAgICAgfSBlbHNlIGlmICh0YXJnZXQgPT0gX2NvbW1vbkVsZW1lbnRzLmpzQXJyYXlSZW1vdmVMYXN0KSB7CiAgICAgICAgbWV0aG9kTmFtZSA9ICdwb3AnOwogICAgICB9IGVsc2UgaWYgKF9jb21tb25FbGVtZW50cy5pc0pzU3RyaW5nU3BsaXQodGFyZ2V0KSkgewogICAgICAgIG1ldGhvZE5hbWUgPSAnc3BsaXQnOwogICAgICAgIC8vIFNwbGl0IHJldHVybnMgYSBMaXN0LCBzbyB3ZSBtYWtlIHN1cmUgdGhlIGJhY2tlbmQga25vd3MgdGhlCiAgICAgICAgLy8gbGlzdCBjbGFzcyBpcyBpbnN0YW50aWF0ZWQuCiAgICAgICAgX3JlZ2lzdHJ5CiAgICAgICAgICAgIC8vIGlnbm9yZTpkZXByZWNhdGVkX21lbWJlcl91c2VfZnJvbV9zYW1lX3BhY2thZ2UKICAgICAgICAgICAgLnJlZ2lzdGVySW5zdGFudGlhdGVkQ2xhc3MoX2NvbW1vbkVsZW1lbnRzLmxpc3RDbGFzcyk7CiAgICAgIH0gZWxzZSBpZiAoX25hdGl2ZURhdGEuaXNOYXRpdmVNZW1iZXIodGFyZ2V0KSAmJgogICAgICAgICAgdGFyZ2V0LmlzRnVuY3Rpb24gJiYKICAgICAgICAgICFub2RlLmlzSW50ZXJjZXB0ZWRDYWxsKSB7CiAgICAgICAgLy8gQSBkaXJlY3QgKGkuZS4gbm9uLWludGVyY2VwdG9yKSBuYXRpdmUgY2FsbCBpcyB0aGUgcmVzdWx0IG9mCiAgICAgICAgLy8gb3B0aW1pemF0aW9uLiAgVGhlIG9wdGltaXphdGlvbiBlbnN1cmVzIGFueSB0eXBlIGNoZWNrcyBvcgogICAgICAgIC8vIGNvbnZlcnNpb25zIGhhdmUgYmVlbiBzYXRpc2ZpZWQuCiAgICAgICAgbWV0aG9kTmFtZSA9IF9uYXRpdmVEYXRhLmdldEZpeGVkQmFja2VuZE5hbWUodGFyZ2V0KTsKICAgICAgfQogICAgfQoKICAgIGpzLk5hbWUgbWV0aG9kTGl0ZXJhbDsKICAgIGlmIChtZXRob2ROYW1lID09IG51bGwpIHsKICAgICAgbWV0aG9kTGl0ZXJhbCA9IF9uYW1lci5pbnZvY2F0aW9uTmFtZShub2RlLnNlbGVjdG9yKTsKICAgICAgcmVnaXN0ZXJNZXRob2RJbnZva2Uobm9kZSk7CiAgICB9IGVsc2UgewogICAgICBtZXRob2RMaXRlcmFsID0gX25hbWVyLmFzTmFtZShtZXRob2ROYW1lKTsKICAgIH0KICAgIHB1c2goanMKICAgICAgICAucHJvcGVydHlDYWxsKG9iamVjdCwgbWV0aG9kTGl0ZXJhbCwgYXJndW1lbnRzKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludm9rZUNvbnN0cnVjdG9yQm9keShISW52b2tlQ29uc3RydWN0b3JCb2R5IG5vZGUpIHsKICAgIHVzZShub2RlLmlucHV0c1swXSk7CiAgICBqcy5FeHByZXNzaW9uIG9iamVjdCA9IHBvcCgpOwogICAganMuTmFtZSBtZXRob2ROYW1lID0gX25hbWVyLmluc3RhbmNlTWV0aG9kTmFtZShub2RlLmVsZW1lbnQpOwogICAgTGlzdDxqcy5FeHByZXNzaW9uPiBhcmd1bWVudHMgPSB2aXNpdEFyZ3VtZW50cyhub2RlLmlucHV0cyk7CiAgICBwdXNoKGpzCiAgICAgICAgLnByb3BlcnR5Q2FsbChvYmplY3QsIG1ldGhvZE5hbWUsIGFyZ3VtZW50cykKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLmNvbnN0cnVjdG9yQm9keUludm9rZSgKICAgICAgICBub2RlLmVsZW1lbnQsIG5ldyBDYWxsU3RydWN0dXJlLnVubmFtZWQoYXJndW1lbnRzLmxlbmd0aCkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnZva2VHZW5lcmF0b3JCb2R5KEhJbnZva2VHZW5lcmF0b3JCb2R5IG5vZGUpIHsKICAgIEpHZW5lcmF0b3JCb2R5IGVsZW1lbnQgPSBub2RlLmVsZW1lbnQ7CiAgICBpZiAoZWxlbWVudC5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgIHVzZShub2RlLmlucHV0c1swXSk7CiAgICAgIGpzLkV4cHJlc3Npb24gb2JqZWN0ID0gcG9wKCk7CiAgICAgIExpc3Q8anMuRXhwcmVzc2lvbj4gYXJndW1lbnRzID0gdmlzaXRBcmd1bWVudHMobm9kZS5pbnB1dHMpOwogICAgICBqcy5OYW1lIG1ldGhvZE5hbWUgPSBfbmFtZXIuaW5zdGFuY2VNZXRob2ROYW1lKGVsZW1lbnQpOwogICAgICBwdXNoKGpzCiAgICAgICAgICAucHJvcGVydHlDYWxsKG9iamVjdCwgbWV0aG9kTmFtZSwgYXJndW1lbnRzKQogICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKF9lbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGVsZW1lbnQpKTsKICAgICAgTGlzdDxqcy5FeHByZXNzaW9uPiBhcmd1bWVudHMgPSB2aXNpdEFyZ3VtZW50cyhub2RlLmlucHV0cywgc3RhcnQ6IDApOwogICAgICBwdXNoKG5ldyBqcy5DYWxsKHBvcCgpLCBhcmd1bWVudHMsCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogbm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQoKICAgIF9yZWdpc3RyeQogICAgICAgIC5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLmdlbmVyYXRvckJvZHlJbnZva2Uobm9kZS5lbGVtZW50KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0T25lU2hvdEludGVyY2VwdG9yKEhPbmVTaG90SW50ZXJjZXB0b3Igbm9kZSkgewogICAgTGlzdDxqcy5FeHByZXNzaW9uPiBhcmd1bWVudHMgPSB2aXNpdEFyZ3VtZW50cyhub2RlLmlucHV0cyk7CiAgICBqcy5FeHByZXNzaW9uIGlzb2xhdGUgPQogICAgICAgIF9uYW1lci5yZWFkR2xvYmFsT2JqZWN0Rm9yTGlicmFyeShfY29tbW9uRWxlbWVudHMuaW50ZXJjZXB0b3JzTGlicmFyeSk7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IG5vZGUuc2VsZWN0b3I7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXMgPQogICAgICAgIF9pbnRlcmNlcHRvckRhdGEuZ2V0SW50ZXJjZXB0ZWRDbGFzc2VzT24oc2VsZWN0b3IubmFtZSwgX2Nsb3NlZFdvcmxkKTsKICAgIF9yZWdpc3RyeS5yZWdpc3Rlck9uZVNob3RJbnRlcmNlcHRvcihzZWxlY3Rvcik7CiAgICBqcy5OYW1lIG1ldGhvZE5hbWUgPSBfbmFtZXIubmFtZUZvck9uZVNob3RJbnRlcmNlcHRvcihzZWxlY3RvciwgY2xhc3Nlcyk7CiAgICBwdXNoKGpzCiAgICAgICAgLnByb3BlcnR5Q2FsbChpc29sYXRlLCBtZXRob2ROYW1lLCBhcmd1bWVudHMpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICBpZiAoc2VsZWN0b3IuaXNHZXR0ZXIpIHsKICAgICAgcmVnaXN0ZXJHZXR0ZXIobm9kZSk7CiAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLmlzU2V0dGVyKSB7CiAgICAgIHJlZ2lzdGVyU2V0dGVyKG5vZGUpOwogICAgfSBlbHNlIHsKICAgICAgcmVnaXN0ZXJNZXRob2RJbnZva2Uobm9kZSk7CiAgICB9CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJVc2VJbnRlcmNlcHRvcigpOwogIH0KCiAgQWJzdHJhY3RWYWx1ZSBnZXRPcHRpbWl6ZWRTZWxlY3RvckZvcigKICAgICAgSEludm9rZUR5bmFtaWMgbm9kZSwgU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgbWFzaykgewogICAgaWYgKG5vZGUuZWxlbWVudCAhPSBudWxsKSB7CiAgICAgIC8vIENyZWF0ZSBhbiBhcnRpZmljaWFsIHR5cGUgbWFzayB0byBtYWtlIHN1cmUgb25seQogICAgICAvLyBbbm9kZS5lbGVtZW50XSB3aWxsIGJlIGVucXVldWVkLiBXZSdyZSBub3QgdXNpbmcgdGhlIHJlY2VpdmVyCiAgICAgIC8vIHR5cGUgYmVjYXVzZSBvdXIgb3B0aW1pemF0aW9ucyBtaWdodCBlbmQgdXAgaW4gYSBzdGF0ZSB3aGVyZSB0aGUKICAgICAgLy8gaW52b2tlIGR5bmFtaWMga25vd3MgbW9yZSB0aGFuIHRoZSByZWNlaXZlci4KICAgICAgQ2xhc3NFbnRpdHkgZW5jbG9zaW5nID0gbm9kZS5lbGVtZW50LmVuY2xvc2luZ0NsYXNzOwogICAgICBpZiAoX2Nsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzSW5zdGFudGlhdGVkKGVuY2xvc2luZykpIHsKICAgICAgICByZXR1cm4gX2Fic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlTm9uTnVsbEV4YWN0KGVuY2xvc2luZyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgbWl4ZWQgaW4gc28gYSBub24tbnVsbCBzdWJ0eXBlIG1hc2sgaXMgdGhlIG1vc3QKICAgICAgICAvLyBwcmVjaXNlIHdlIGhhdmUuCiAgICAgICAgYXNzZXJ0KAogICAgICAgICAgICBfY2xvc2VkV29ybGQuaXNVc2VkQXNNaXhpbihlbmNsb3NpbmcpLAogICAgICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgICAgICAiRWxlbWVudCAke25vZGUuZWxlbWVudH0gZnJvbSAkZW5jbG9zaW5nIGV4cGVjdGVkICIKICAgICAgICAgICAgICAgICJ0byBiZSBtaXhlZCBpbi4iKSk7CiAgICAgICAgcmV0dXJuIF9hYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZU5vbk51bGxTdWJ0eXBlKGVuY2xvc2luZyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBtYXNrID8/IF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlOwogIH0KCiAgdm9pZCByZWdpc3Rlck1ldGhvZEludm9rZShISW52b2tlRHluYW1pYyBub2RlKSB7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IG5vZGUuc2VsZWN0b3I7CgogICAgLy8gSWYgd2UgZG9uJ3Qga25vdyB3aGF0IHdlJ3JlIGNhbGxpbmcgb3IgaWYgd2UgYXJlIGNhbGxpbmcgYSBnZXR0ZXIsCiAgICAvLyB3ZSBuZWVkIHRvIHJlZ2lzdGVyIHRoYXQgZmFjdCB0aGF0IHdlIG1heSBiZSBjYWxsaW5nIGEgY2xvc3VyZQogICAgLy8gd2l0aCB0aGUgc2FtZSBhcmd1bWVudHMuCiAgICBNZW1iZXJFbnRpdHkgdGFyZ2V0ID0gbm9kZS5lbGVtZW50OwogICAgaWYgKCh0YXJnZXQgPT0gbnVsbCB8fCB0YXJnZXQuaXNHZXR0ZXIpICYmCiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgd2hlbiBrZXJuZWwgYWRkcyBhbiBgaXNGdW5jdGlvbkNhbGxgCiAgICAgICAgLy8gZmxhZyB0byBbaXIuTWV0aG9kSW52b2NhdGlvbl0uIEN1cnJlbnRseSB3ZSBjYW4ndCB0ZWxsIHRoZSBkaWZmZXJlbmNlCiAgICAgICAgLy8gYmV0d2VlbiBhIGR5bmFtaWMgY2FsbCBhbmQgYSBmdW5jdGlvbiBjYWxsLCBidXQgd2UgYXQgbGVhc3Qga25vdyB0aGF0CiAgICAgICAgLy8gdG9TdHJpbmcgaXMgbm90IGEgZ2V0dGVyIChhIHBvdGVudGlhbCBmdW5jdGlvbiBjYWxsIHNob3VsZCBvdGhlcndpc2UKICAgICAgICAvLyBoYXZlIGJlZW4gcmVnaXN0ZXIgZm9yIHN0cmluZyBjb25jYXRlbmF0aW9uKS4KICAgICAgICBzZWxlY3RvciAhPSBTZWxlY3RvcnMudG9TdHJpbmdfKSB7CiAgICAgIC8vIFRPRE8oa2FzcGVybCk6IElmIHdlIGhhdmUgYSB0eXBlZCBzZWxlY3RvciBmb3IgdGhlIGNhbGwsIHdlCiAgICAgIC8vIG1heSBrbm93IHNvbWV0aGluZyBhYm91dCB0aGUgdHlwZXMgb2YgY2xvc3VyZXMgdGhhdCBuZWVkCiAgICAgIC8vIHRoZSBzcGVjaWZpYyBjbG9zdXJlIGNhbGwgbWV0aG9kLgogICAgICBTZWxlY3RvciBjYWxsID0gbmV3IFNlbGVjdG9yLmNhbGxDbG9zdXJlRnJvbShzZWxlY3Rvcik7CiAgICAgIF9yZWdpc3RyeQogICAgICAgICAgLnJlZ2lzdGVyRHluYW1pY1VzZShuZXcgRHluYW1pY1VzZShjYWxsLCBudWxsLCBub2RlLnR5cGVBcmd1bWVudHMpKTsKICAgIH0KICAgIGlmICh0YXJnZXQgIT0gbnVsbCkgewogICAgICAvLyBUaGlzIGlzIGEgZHluYW1pYyBpbnZvY2F0aW9uIHdoaWNoIHdlIGhhdmUgZm91bmQgdG8gaGF2ZSBhIHNpbmdsZQogICAgICAvLyB0YXJnZXQgYnV0IGZvciBzb21lIHJlYXNvbiBoYXZlbid0IGlubGluZWQuIFdlIGFyZSBfc3RpbGxfIGFjY2Vzc2luZwogICAgICAvLyB0aGUgdGFyZ2V0IGR5bmFtaWNhbGx5IGJ1dCB3ZSBkb24ndCBuZWVkIHRvIGVucXVldWUgbW9yZSB0aGFuIHRhcmdldAogICAgICAvLyBmb3IgdGhpcyB0byB3b3JrLgogICAgICBhc3NlcnQoc2VsZWN0b3IuYXBwbGllcyh0YXJnZXQpLAogICAgICAgICAgZmFpbGVkQXQobm9kZSwgJyRzZWxlY3RvciBkb2VzIG5vdCBhcHBseSB0byAkdGFyZ2V0JykpOwogICAgICBhc3NlcnQoIXNlbGVjdG9yLmlzR2V0dGVyICYmICFzZWxlY3Rvci5pc1NldHRlciwKICAgICAgICAgICJVbmV4cGVjdGVkIGRpcmVjdCBpbnZvY2F0aW9uIHNlbGVjdG9yOiAkc2VsZWN0b3IuIik7CiAgICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLmRpcmVjdEludm9rZSgKICAgICAgICAgIHRhcmdldCwgc2VsZWN0b3IuY2FsbFN0cnVjdHVyZSwgbm9kZS50eXBlQXJndW1lbnRzKSk7CiAgICB9IGVsc2UgewogICAgICBBYnN0cmFjdFZhbHVlIG1hc2sgPQogICAgICAgICAgZ2V0T3B0aW1pemVkU2VsZWN0b3JGb3Iobm9kZSwgc2VsZWN0b3IsIG5vZGUucmVjZWl2ZXJUeXBlKTsKICAgICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyRHluYW1pY1VzZSgKICAgICAgICAgIG5ldyBEeW5hbWljVXNlKHNlbGVjdG9yLCBtYXNrLCBub2RlLnR5cGVBcmd1bWVudHMpKTsKICAgIH0KICB9CgogIHZvaWQgcmVnaXN0ZXJTZXR0ZXIoSEludm9rZUR5bmFtaWMgbm9kZSwge2Jvb2wgbmVlZHNDaGVjazogZmFsc2V9KSB7CiAgICBpZiAobm9kZS5lbGVtZW50IGlzIEZpZWxkRW50aXR5ICYmICFuZWVkc0NoZWNrKSB7CiAgICAgIC8vIFRoaXMgaXMgYSBkeW5hbWljIHVwZGF0ZSB3aGljaCB3ZSBoYXZlIGZvdW5kIHRvIGhhdmUgYSBzaW5nbGUKICAgICAgLy8gdGFyZ2V0IGJ1dCBmb3Igc29tZSByZWFzb24gaGF2ZW4ndCBpbmxpbmVkLiBXZSBhcmUgX3N0aWxsXyBhY2Nlc3NpbmcKICAgICAgLy8gdGhlIHRhcmdldCBkeW5hbWljYWxseSBidXQgd2UgZG9uJ3QgbmVlZCB0byBlbnF1ZXVlIG1vcmUgdGhhbiB0YXJnZXQKICAgICAgLy8gZm9yIHRoaXMgdG8gd29yay4KICAgICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2UuZGlyZWN0U2V0KG5vZGUuZWxlbWVudCkpOwogICAgfSBlbHNlIHsKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBub2RlLnNlbGVjdG9yOwogICAgICBBYnN0cmFjdFZhbHVlIG1hc2sgPQogICAgICAgICAgZ2V0T3B0aW1pemVkU2VsZWN0b3JGb3Iobm9kZSwgc2VsZWN0b3IsIG5vZGUucmVjZWl2ZXJUeXBlKTsKICAgICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyRHluYW1pY1VzZSgKICAgICAgICAgIG5ldyBEeW5hbWljVXNlKHNlbGVjdG9yLCBtYXNrLCBub2RlLnR5cGVBcmd1bWVudHMpKTsKICAgIH0KICB9CgogIHZvaWQgcmVnaXN0ZXJHZXR0ZXIoSEludm9rZUR5bmFtaWMgbm9kZSkgewogICAgaWYgKG5vZGUuZWxlbWVudCAhPSBudWxsICYmCiAgICAgICAgKG5vZGUuZWxlbWVudC5pc0dldHRlciB8fCBub2RlLmVsZW1lbnQuaXNGaWVsZCkpIHsKICAgICAgLy8gVGhpcyBpcyBhIGR5bmFtaWMgcmVhZCB3aGljaCB3ZSBoYXZlIGZvdW5kIHRvIGhhdmUgYSBzaW5nbGUgdGFyZ2V0IGJ1dAogICAgICAvLyBmb3Igc29tZSByZWFzb24gaGF2ZW4ndCBpbmxpbmVkLiBXZSBhcmUgX3N0aWxsXyBhY2Nlc3NpbmcgdGhlIHRhcmdldAogICAgICAvLyBkeW5hbWljYWxseSBidXQgd2UgZG9uJ3QgbmVlZCB0byBlbnF1ZXVlIG1vcmUgdGhhbiB0YXJnZXQgZm9yIHRoaXMgdG8KICAgICAgLy8gd29yay4gVGhlIHRlc3QgYWJvdmUgZXhjbHVkZXMgbm9uLWdldHRlciBmdW5jdGlvbnMgc2luY2UgdGhlIGVsZW1lbnQKICAgICAgLy8gcmVwcmVzZW50cyB0d28gdGFyZ2V0cyAtIGEgdGVhcm9mZiBnZXR0ZXIgYW5kIHRoZSB0b3JuLW9mZiBtZXRob2QuCiAgICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLmRpcmVjdEdldChub2RlLmVsZW1lbnQpKTsKICAgIH0gZWxzZSB7CiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gbm9kZS5zZWxlY3RvcjsKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrID0KICAgICAgICAgIGdldE9wdGltaXplZFNlbGVjdG9yRm9yKG5vZGUsIHNlbGVjdG9yLCBub2RlLnJlY2VpdmVyVHlwZSk7CiAgICAgIF9yZWdpc3RyeS5yZWdpc3RlckR5bmFtaWNVc2UoCiAgICAgICAgICBuZXcgRHluYW1pY1VzZShzZWxlY3RvciwgbWFzaywgbm9kZS50eXBlQXJndW1lbnRzKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEludm9rZUR5bmFtaWNTZXR0ZXIoSEludm9rZUR5bmFtaWNTZXR0ZXIgbm9kZSkgewogICAgdXNlKG5vZGUucmVjZWl2ZXIpOwogICAganMuTmFtZSBuYW1lID0gX25hbWVyLmludm9jYXRpb25OYW1lKG5vZGUuc2VsZWN0b3IpOwogICAgcHVzaChqcwogICAgICAgIC5wcm9wZXJ0eUNhbGwocG9wKCksIG5hbWUsIHZpc2l0QXJndW1lbnRzKG5vZGUuaW5wdXRzKSkKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIHJlZ2lzdGVyU2V0dGVyKG5vZGUsIG5lZWRzQ2hlY2s6IG5vZGUubmVlZHNDaGVjayk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEludm9rZUR5bmFtaWNHZXR0ZXIoSEludm9rZUR5bmFtaWNHZXR0ZXIgbm9kZSkgewogICAgdXNlKG5vZGUucmVjZWl2ZXIpOwogICAganMuTmFtZSBuYW1lID0gX25hbWVyLmludm9jYXRpb25OYW1lKG5vZGUuc2VsZWN0b3IpOwogICAgcHVzaChqcwogICAgICAgIC5wcm9wZXJ0eUNhbGwocG9wKCksIG5hbWUsIHZpc2l0QXJndW1lbnRzKG5vZGUuaW5wdXRzKSkKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIHJlZ2lzdGVyR2V0dGVyKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRJbnZva2VDbG9zdXJlKEhJbnZva2VDbG9zdXJlIG5vZGUpIHsKICAgIFNlbGVjdG9yIGNhbGwgPSBuZXcgU2VsZWN0b3IuY2FsbENsb3N1cmVGcm9tKG5vZGUuc2VsZWN0b3IpOwogICAgdXNlKG5vZGUucmVjZWl2ZXIpOwogICAgcHVzaChqcwogICAgICAgIC5wcm9wZXJ0eUNhbGwoCiAgICAgICAgICAgIHBvcCgpLCBfbmFtZXIuaW52b2NhdGlvbk5hbWUoY2FsbCksIHZpc2l0QXJndW1lbnRzKG5vZGUuaW5wdXRzKSkKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIC8vIFRPRE8oa2FzcGVybCk6IElmIHdlIGhhdmUgYSB0eXBlZCBzZWxlY3RvciBmb3IgdGhlIGNhbGwsIHdlCiAgICAvLyBtYXkga25vdyBzb21ldGhpbmcgYWJvdXQgdGhlIHR5cGVzIG9mIGNsb3N1cmVzIHRoYXQgbmVlZAogICAgLy8gdGhlIHNwZWNpZmljIGNsb3N1cmUgY2FsbCBtZXRob2QuCiAgICBfcmVnaXN0cnkKICAgICAgICAucmVnaXN0ZXJEeW5hbWljVXNlKG5ldyBEeW5hbWljVXNlKGNhbGwsIG51bGwsIG5vZGUudHlwZUFyZ3VtZW50cykpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRJbnZva2VTdGF0aWMoSEludm9rZVN0YXRpYyBub2RlKSB7CiAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCA9IG5vZGUuZWxlbWVudDsKICAgIG5vZGUuaW5zdGFudGlhdGVkVHlwZXM/LmZvckVhY2goX3JlZ2lzdHJ5LnJlZ2lzdGVySW5zdGFudGlhdGlvbik7CgogICAgTGlzdDxqcy5FeHByZXNzaW9uPiBhcmd1bWVudHMgPSB2aXNpdEFyZ3VtZW50cyhub2RlLmlucHV0cywgc3RhcnQ6IDApOwoKICAgIGlmIChlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5qc0FsbG93SW50ZXJvcCkgewogICAgICBfbmF0aXZlRGF0YS5yZWdpc3RlckFsbG93SW50ZXJvcCgpOwogICAgfQoKICAgIGlmIChlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5jaGVja0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcikgewogICAgICAvLyBNYW51YWxseSBpbmxpbmUgdGhlIFtjaGVja0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcl0gZnVuY3Rpb24uICBUaGlzCiAgICAgIC8vIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGZyb20gYSBmb3ItbG9vcCB1cGRhdGUuICBJZGVhbGx5IHdlIHdvdWxkIGp1c3QKICAgICAgLy8gZ2VuZXJhdGUgdGhlIGNvbmRpdGlvbmFsY29udHJvbCBmbG93IGluIHRoZSBidWlsZGVyIGJ1dCBpdCBhZGRzIGJhc2ljCiAgICAgIC8vIGJsb2NrcyBpbiB0aGUgbG9vcCB1cGRhdGUgdGhhdCBpbnRlcmZlcmUgd2l0aCBvdGhlciBvcHRpbWl6YXRpb25zIGFuZAogICAgICAvLyBjb25mdXNlcyBsb29wIHJlY29nbml0aW9uLgoKICAgICAgYXNzZXJ0KGFyZ3VtZW50cy5sZW5ndGggPT0gMik7CiAgICAgIEZ1bmN0aW9uRW50aXR5IHRocm93RnVuY3Rpb24gPQogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnRocm93Q29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yOwogICAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UoCiAgICAgICAgICBuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZSh0aHJvd0Z1bmN0aW9uLCBDYWxsU3RydWN0dXJlLk9ORV9BUkcpKTsKCiAgICAgIC8vIENhbGxpbmcgdXNpbmcgYCgwLCAjKSgjKWAgaW5zdGVhZCBvZiBgIygjKWAgc2VwYXJhdGVzIHRoZSBwcm9wZXJ0eSBsb2FkCiAgICAgIC8vIG9mIHRoZSBzdGF0aWMgZnVuY3Rpb24gYWNjZXNzIGZyb20gdGhlIGNhbGwuICBGb3Igc29tZSByZWFzb24gdGhpcwogICAgICAvLyBoZWxwcyBWOCBzZWUgdGhhdCB0aGUgY2FsbCBuZXZlciBoYXBwZW5zIHNvIFY4IG1ha2VzIHRoZSBjYWxsIGEKICAgICAgLy8gZGVvcHRpbWl6YXRpb24uIFRoaXMgcmVtb3ZlcyB0aGUgY2FsbCBmcm9tIHRoZSBvcHRpbWl6ZWQgbG9vcCwgbWFraW5nCiAgICAgIC8vIG1vcmUgb3B0aW1pemF0aW9ucyBhdmFpbGFibGUgdG8gdGhlIGxvb3AuICBUaGlzIGZvcm0gaXMgNTAlIGZhc3RlciBvbgogICAgICAvLyBzb21lIHNtYWxsIGxvb3AsIGFsbW9zdCBhcyBmYXN0IGFzIGxvb3BzIHdpdGggbm8gY29uY3VycmVudAogICAgICAvLyBtb2RpZmljYXRpb24gY2hlY2suCgogICAgICAvLyBDcmVhdGUgW3JpZ2h0XSBhcyBhIHNlcGFyYXRlIEpTIG5vZGUgdG8gZ2l2ZSB0aGUgY2FsbCBhIHNvdXJjZQogICAgICAvLyBsb2NhdGlvbi4KICAgICAganMuRXhwcmVzc2lvbiByaWdodCA9IGpzLmpzKCcoMCwgIykoIyknLCBbCiAgICAgICAgX2VtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3ModGhyb3dGdW5jdGlvbiksCiAgICAgICAgYXJndW1lbnRzWzFdCiAgICAgIF0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgcHVzaChqcy5qcygnIyB8fCAjJywgW2FyZ3VtZW50c1swXSwgcmlnaHRdKS53aXRoU291cmNlSW5mb3JtYXRpb24oCiAgICAgICAgICBub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9IGVsc2UgewogICAgICBTdGF0aWNVc2Ugc3RhdGljVXNlOwogICAgICBpZiAoZWxlbWVudC5pc0NvbnN0cnVjdG9yKSB7CiAgICAgICAgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlID0gbmV3IENhbGxTdHJ1Y3R1cmUudW5uYW1lZCgKICAgICAgICAgICAgYXJndW1lbnRzLmxlbmd0aCwgbm9kZS50eXBlQXJndW1lbnRzLmxlbmd0aCk7CiAgICAgICAgc3RhdGljVXNlID0gbmV3IFN0YXRpY1VzZS5jb25zdHJ1Y3Rvckludm9rZShlbGVtZW50LCBjYWxsU3RydWN0dXJlKTsKICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmlzR2V0dGVyKSB7CiAgICAgICAgc3RhdGljVXNlID0gbmV3IFN0YXRpY1VzZS5zdGF0aWNHZXQoZWxlbWVudCk7CiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5pc1NldHRlcikgewogICAgICAgIHN0YXRpY1VzZSA9IG5ldyBTdGF0aWNVc2Uuc3RhdGljU2V0KGVsZW1lbnQpOwogICAgICB9IGVsc2UgewogICAgICAgIGFzc2VydChlbGVtZW50LmlzRnVuY3Rpb24pOwogICAgICAgIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSA9IG5ldyBDYWxsU3RydWN0dXJlLnVubmFtZWQoCiAgICAgICAgICAgIGFyZ3VtZW50cy5sZW5ndGgsIG5vZGUudHlwZUFyZ3VtZW50cy5sZW5ndGgpOwogICAgICAgIHN0YXRpY1VzZSA9IG5ldyBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKAogICAgICAgICAgICBlbGVtZW50LCBjYWxsU3RydWN0dXJlLCBub2RlLnR5cGVBcmd1bWVudHMpOwogICAgICB9CiAgICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShzdGF0aWNVc2UpOwogICAgICBwdXNoKF9lbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGVsZW1lbnQpKTsKICAgICAgcHVzaChuZXcganMuQ2FsbChwb3AoKSwgYXJndW1lbnRzLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0SW52b2tlU3VwZXIoSEludm9rZVN1cGVyIG5vZGUpIHsKICAgIE1lbWJlckVudGl0eSBzdXBlckVsZW1lbnQgPSBub2RlLmVsZW1lbnQ7CiAgICBDbGFzc0VudGl0eSBzdXBlckNsYXNzID0gc3VwZXJFbGVtZW50LmVuY2xvc2luZ0NsYXNzOwogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBub2RlLnNlbGVjdG9yOwogICAgYm9vbCB1c2VBbGlhc2VkU3VwZXIgPSBjYW5Vc2VBbGlhc2VkU3VwZXJNZW1iZXIoc3VwZXJFbGVtZW50LCBzZWxlY3Rvcik7CiAgICBpZiAoc2VsZWN0b3IuaXNHZXR0ZXIpIHsKICAgICAgaWYgKHN1cGVyRWxlbWVudC5pc0ZpZWxkIHx8IHN1cGVyRWxlbWVudC5pc0dldHRlcikgewogICAgICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN1cGVyR2V0KHN1cGVyRWxlbWVudCkpOwogICAgICB9IGVsc2UgewogICAgICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN1cGVyVGVhck9mZihub2RlLmVsZW1lbnQpKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pc1NldHRlcikgewogICAgICBpZiAoc3VwZXJFbGVtZW50LmlzRmllbGQpIHsKICAgICAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdXBlckZpZWxkU2V0KHN1cGVyRWxlbWVudCkpOwogICAgICB9IGVsc2UgewogICAgICAgIGFzc2VydChzdXBlckVsZW1lbnQuaXNTZXR0ZXIpOwogICAgICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN1cGVyU2V0dGVyU2V0KHN1cGVyRWxlbWVudCkpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpZiAodXNlQWxpYXNlZFN1cGVyKSB7CiAgICAgICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3VwZXJJbnZva2UoCiAgICAgICAgICAgIHN1cGVyRWxlbWVudCwgbmV3IENhbGxTdHJ1Y3R1cmUudW5uYW1lZChub2RlLmlucHV0cy5sZW5ndGgpKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3VwZXJJbnZva2UoCiAgICAgICAgICAgIHN1cGVyRWxlbWVudCwgbmV3IENhbGxTdHJ1Y3R1cmUudW5uYW1lZChub2RlLmlucHV0cy5sZW5ndGggLSAxKSkpOwogICAgICB9CiAgICB9CgogICAgaWYgKHN1cGVyRWxlbWVudC5pc0ZpZWxkKSB7CiAgICAgIGpzLk5hbWUgZmllbGROYW1lID0gX25hbWVyLmluc3RhbmNlRmllbGRQcm9wZXJ0eU5hbWUoc3VwZXJFbGVtZW50KTsKICAgICAgdXNlKG5vZGUuaW5wdXRzWzBdKTsKICAgICAganMuUHJvcGVydHlBY2Nlc3MgYWNjZXNzID0gbmV3IGpzLlByb3BlcnR5QWNjZXNzKHBvcCgpLCBmaWVsZE5hbWUpCiAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogICAgICBpZiAobm9kZS5pc1NldHRlcikgewogICAgICAgIHVzZShub2RlLnZhbHVlKTsKICAgICAgICBwdXNoKG5ldyBqcy5Bc3NpZ25tZW50KGFjY2VzcywgcG9wKCkpCiAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICB9IGVsc2UgewogICAgICAgIHB1c2goYWNjZXNzKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaWYgKCF1c2VBbGlhc2VkU3VwZXIpIHsKICAgICAgICBqcy5OYW1lIG1ldGhvZE5hbWU7CiAgICAgICAgaWYgKHNlbGVjdG9yLmlzR2V0dGVyICYmICFzdXBlckVsZW1lbnQuaXNHZXR0ZXIpIHsKICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSB0ZWFyLW9mZiwgcmVnaXN0ZXIgdGhlIGZhY3QgdGhhdCBhIHRlYXItb2ZmIGNsb3N1cmUKICAgICAgICAgIC8vIHdpbGwgYmUgY3JlYXRlZCwgYW5kIHRoYXQgdGhpcyB0ZWFyLW9mZiBtdXN0IGJ5cGFzcyBvcmRpbmFyeQogICAgICAgICAgLy8gZGlzcGF0Y2ggdG8gZW5zdXJlIHRoZSBzdXBlciBtZXRob2QgaXMgaW52b2tlZC4KICAgICAgICAgIEZ1bmN0aW9uRW50aXR5IGhlbHBlciA9IF9jb21tb25FbGVtZW50cy5jbG9zdXJlRnJvbVRlYXJPZmY7CiAgICAgICAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoCiAgICAgICAgICAgICAgaGVscGVyLAogICAgICAgICAgICAgIG5ldyBDYWxsU3RydWN0dXJlLnVubmFtZWQoCiAgICAgICAgICAgICAgICAgIG5vZGUuaW5wdXRzLmxlbmd0aCwgbm9kZS50eXBlQXJndW1lbnRzLmxlbmd0aCksCiAgICAgICAgICAgICAgbm9kZS50eXBlQXJndW1lbnRzKSk7CiAgICAgICAgICBtZXRob2ROYW1lID0gX25hbWVyLmludm9jYXRpb25OYW1lKHNlbGVjdG9yKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbWV0aG9kTmFtZSA9IF9uYW1lci5pbnN0YW5jZU1ldGhvZE5hbWUoc3VwZXJFbGVtZW50KTsKICAgICAgICB9CgogICAgICAgIHB1c2goanMuanMoJyMuIy5jYWxsKCMpJywgWwogICAgICAgICAgX2VtaXR0ZXIucHJvdG90eXBlQWNjZXNzKHN1cGVyQ2xhc3MsIGhhc0JlZW5JbnN0YW50aWF0ZWQ6IHRydWUpLAogICAgICAgICAgbWV0aG9kTmFtZSwKICAgICAgICAgIHZpc2l0QXJndW1lbnRzKG5vZGUuaW5wdXRzLCBzdGFydDogMCkKICAgICAgICBdKS53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICB9IGVsc2UgewogICAgICAgIHVzZShub2RlLnJlY2VpdmVyKTsKICAgICAgICBwdXNoKGpzLmpzKCcjLiMoIyknLCBbCiAgICAgICAgICBwb3AoKSwKICAgICAgICAgIF9uYW1lci5hbGlhc2VkU3VwZXJNZW1iZXJQcm9wZXJ0eU5hbWUoc3VwZXJFbGVtZW50KSwKICAgICAgICAgIHZpc2l0QXJndW1lbnRzKG5vZGUuaW5wdXRzLCBzdGFydDogMSkKICAgICAgICBdKSAvLyBTa2lwIHJlY2VpdmVyIGFyZ3VtZW50LgogICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRGaWVsZEdldChIRmllbGRHZXQgbm9kZSkgewogICAgdXNlKG5vZGUucmVjZWl2ZXIpOwogICAgaWYgKG5vZGUuaXNOdWxsQ2hlY2spIHsKICAgICAgLy8gV2UgYWNjZXNzIGEgSmF2YVNjcmlwdCBtZW1iZXIgd2Uga25vdyBhbGwgb2JqZWN0cyBiZXNpZGVzCiAgICAgIC8vIG51bGwgYW5kIHVuZGVmaW5lZCBoYXZlOiBWOCBkb2VzIG5vdCBsaWtlIGFjY2Vzc2luZyBhIG1lbWJlcgogICAgICAvLyB0aGF0IGRvZXMgbm90IGV4aXN0LgogICAgICBwdXNoKG5ldyBqcy5Qcm9wZXJ0eUFjY2Vzcy5maWVsZChwb3AoKSwgJ3RvU3RyaW5nJykKICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfSBlbHNlIHsKICAgICAgRmllbGRFbnRpdHkgZmllbGQgPSBub2RlLmVsZW1lbnQ7CiAgICAgIGpzLk5hbWUgbmFtZSA9IF9uYW1lci5pbnN0YW5jZUZpZWxkUHJvcGVydHlOYW1lKGZpZWxkKTsKICAgICAgcHVzaChuZXcganMuUHJvcGVydHlBY2Nlc3MocG9wKCksIG5hbWUpCiAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2UuZmllbGRHZXQoZmllbGQpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0RmllbGRTZXQoSEZpZWxkU2V0IG5vZGUpIHsKICAgIEZpZWxkRW50aXR5IGVsZW1lbnQgPSBub2RlLmVsZW1lbnQ7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5maWVsZFNldChlbGVtZW50KSk7CiAgICBqcy5OYW1lIG5hbWUgPSBfbmFtZXIuaW5zdGFuY2VGaWVsZFByb3BlcnR5TmFtZShlbGVtZW50KTsKICAgIHVzZShub2RlLnJlY2VpdmVyKTsKICAgIGpzLkV4cHJlc3Npb24gcmVjZWl2ZXIgPSBwb3AoKTsKICAgIHVzZShub2RlLnZhbHVlKTsKICAgIHB1c2gobmV3IGpzLkFzc2lnbm1lbnQoCiAgICAgICAgICAgIG5ldyBqcy5Qcm9wZXJ0eUFjY2VzcyhyZWNlaXZlciwgbmFtZSkKICAgICAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbiksCiAgICAgICAgICAgIHBvcCgpKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRHZXRMZW5ndGgoSEdldExlbmd0aCBub2RlKSB7CiAgICB1c2Uobm9kZS5yZWNlaXZlcik7CiAgICBwdXNoKG5ldyBqcy5Qcm9wZXJ0eUFjY2Vzcy5maWVsZChwb3AoKSwgJ2xlbmd0aCcpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFJlYWRNb2RpZnlXcml0ZShIUmVhZE1vZGlmeVdyaXRlIG5vZGUpIHsKICAgIEZpZWxkRW50aXR5IGVsZW1lbnQgPSBub2RlLmVsZW1lbnQ7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5maWVsZEdldChlbGVtZW50KSk7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5maWVsZFNldChlbGVtZW50KSk7CiAgICBqcy5OYW1lIG5hbWUgPSBfbmFtZXIuaW5zdGFuY2VGaWVsZFByb3BlcnR5TmFtZShlbGVtZW50KTsKICAgIHVzZShub2RlLnJlY2VpdmVyKTsKICAgIGpzLkV4cHJlc3Npb24gZmllbGRSZWZlcmVuY2UgPSBuZXcganMuUHJvcGVydHlBY2Nlc3MocG9wKCksIG5hbWUpOwogICAgaWYgKG5vZGUuaXNQcmVPcCkgewogICAgICBwdXNoKG5ldyBqcy5QcmVmaXgobm9kZS5qc09wLCBmaWVsZFJlZmVyZW5jZSkKICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfSBlbHNlIGlmIChub2RlLmlzUG9zdE9wKSB7CiAgICAgIHB1c2gobmV3IGpzLlBvc3RmaXgobm9kZS5qc09wLCBmaWVsZFJlZmVyZW5jZSkKICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfSBlbHNlIHsKICAgICAgdXNlKG5vZGUudmFsdWUpOwogICAgICBwdXNoKG5ldyBqcy5Bc3NpZ25tZW50LmNvbXBvdW5kKGZpZWxkUmVmZXJlbmNlLCBub2RlLmpzT3AsIHBvcCgpKQogICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdExvY2FsR2V0KEhMb2NhbEdldCBub2RlKSB7CiAgICB1c2Uobm9kZS5yZWNlaXZlcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdExvY2FsU2V0KEhMb2NhbFNldCBub2RlKSB7CiAgICB1c2Uobm9kZS52YWx1ZSk7CiAgICBhc3NpZ25WYXJpYWJsZSgKICAgICAgICB2YXJpYWJsZU5hbWVzLmdldE5hbWUobm9kZS5yZWNlaXZlciksIHBvcCgpLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJGb3JlaWduVHlwZXMoSEZvcmVpZ24gbm9kZSkgewogICAgTmF0aXZlQmVoYXZpb3IgbmF0aXZlQmVoYXZpb3IgPSBub2RlLm5hdGl2ZUJlaGF2aW9yOwogICAgaWYgKG5hdGl2ZUJlaGF2aW9yID09IG51bGwpIHJldHVybjsKICAgIF9yZWdpc3RyeS5yZWdpc3Rlck5hdGl2ZUJlaGF2aW9yKG5hdGl2ZUJlaGF2aW9yKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0Rm9yZWlnbkNvZGUoSEZvcmVpZ25Db2RlIG5vZGUpIHsKICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMgPSBub2RlLmlucHV0czsKICAgIGlmIChub2RlLmlzSnNTdGF0ZW1lbnQoKSkgewogICAgICBMaXN0PGpzLkV4cHJlc3Npb24+IGludGVycG9sYXRlZEV4cHJlc3Npb25zID0gPGpzLkV4cHJlc3Npb24+W107CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdXNlKGlucHV0c1tpXSk7CiAgICAgICAgaW50ZXJwb2xhdGVkRXhwcmVzc2lvbnMuYWRkKHBvcCgpKTsKICAgICAgfQogICAgICBwdXNoU3RhdGVtZW50KG5vZGUuY29kZVRlbXBsYXRlCiAgICAgICAgICAuaW5zdGFudGlhdGUoaW50ZXJwb2xhdGVkRXhwcmVzc2lvbnMpCiAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0gZWxzZSB7CiAgICAgIExpc3Q8anMuRXhwcmVzc2lvbj4gaW50ZXJwb2xhdGVkRXhwcmVzc2lvbnMgPSA8anMuRXhwcmVzc2lvbj5bXTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgICB1c2UoaW5wdXRzW2ldKTsKICAgICAgICBpbnRlcnBvbGF0ZWRFeHByZXNzaW9ucy5hZGQocG9wKCkpOwogICAgICB9CiAgICAgIHB1c2gobm9kZS5jb2RlVGVtcGxhdGUKICAgICAgICAgIC5pbnN0YW50aWF0ZShpbnRlcnBvbGF0ZWRFeHByZXNzaW9ucykKICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQoKICAgIC8vIFRPRE8oc3JhKTogVGVsbCB3b3JsZC5uYXRpdmVFbnF1ZXVlciBhYm91dCB0aGUgdHlwZXMgY3JlYXRlZCBoZXJlLgogICAgcmVnaXN0ZXJGb3JlaWduVHlwZXMobm9kZSk7CgogICAgaWYgKG5vZGUuZm9yZWlnbkZ1bmN0aW9uICE9IG51bGwpIHsKICAgICAgX3JlZ2lzdHJ5Py5yZWdpc3RlclN0YXRpY1VzZSgKICAgICAgICAgIG5ldyBTdGF0aWNVc2UuaW1wbGljaXRJbnZva2Uobm9kZS5mb3JlaWduRnVuY3Rpb24pKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q3JlYXRlKEhDcmVhdGUgbm9kZSkgewogICAganMuRXhwcmVzc2lvbiBqc0NsYXNzUmVmZXJlbmNlID0gX2VtaXR0ZXIuY29uc3RydWN0b3JBY2Nlc3Mobm9kZS5lbGVtZW50KTsKICAgIExpc3Q8anMuRXhwcmVzc2lvbj4gYXJndW1lbnRzID0gdmlzaXRBcmd1bWVudHMobm9kZS5pbnB1dHMsIHN0YXJ0OiAwKTsKICAgIHB1c2gobmV3IGpzLk5ldyhqc0NsYXNzUmVmZXJlbmNlLCBhcmd1bWVudHMpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAvLyBXZSBhbHNvIHVzZSBIQ3JlYXRlIHRvIGluc3RhbnRpYXRlIGNsb3N1cmUgY2xhc3NlcyB0aGF0IGJlbG9uZyB0bwogICAgLy8gZnVuY3Rpb24gZXhwcmVzc2lvbnMuIFdlIGhhdmUgdG8gcmVnaXN0ZXIgdGhlaXIgdXNlIGhlcmUsIGFzIG90aGVyd2lzZQogICAgLy8gY29kZSBmb3IgdGhlbSBtaWdodCBub3QgYmUgZW1pdHRlZC4KICAgIGlmIChub2RlLmVsZW1lbnQuaXNDbG9zdXJlKSB7CiAgICAgIF9yZWdpc3RyeQogICAgICAgICAgLy8gaWdub3JlOmRlcHJlY2F0ZWRfbWVtYmVyX3VzZV9mcm9tX3NhbWVfcGFja2FnZQogICAgICAgICAgLnJlZ2lzdGVySW5zdGFudGlhdGVkQ2xhc3Mobm9kZS5lbGVtZW50KTsKICAgIH0KICAgIG5vZGUuaW5zdGFudGlhdGVkVHlwZXM/LmZvckVhY2goX3JlZ2lzdHJ5LnJlZ2lzdGVySW5zdGFudGlhdGlvbik7CiAgICBpZiAobm9kZS5jYWxsTWV0aG9kICE9IG51bGwpIHsKICAgICAgX3JlZ2lzdHJ5CiAgICAgICAgICA/LnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2UuaW1wbGljaXRJbnZva2Uobm9kZS5jYWxsTWV0aG9kKSk7CiAgICAgIF9yZWdpc3RyeT8ucmVnaXN0ZXJJbnN0YW50aWF0ZWRDbG9zdXJlKG5vZGUuY2FsbE1ldGhvZCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENyZWF0ZUJveChIQ3JlYXRlQm94IG5vZGUpIHsKICAgIHB1c2gobmV3IGpzLk9iamVjdEluaXRpYWxpemVyKDxqcy5Qcm9wZXJ0eT5bXSkpOwogIH0KCiAganMuRXhwcmVzc2lvbiBuZXdMaXRlcmFsQm9vbCgKICAgICAgYm9vbCB2YWx1ZSwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIGlmIChfb3B0aW9ucy5lbmFibGVNaW5pZmljYXRpb24pIHsKICAgICAgLy8gVXNlICEwIGZvciB0cnVlLCAhMSBmb3IgZmFsc2UuCiAgICAgIHJldHVybiBuZXcganMuUHJlZml4KCIhIiwgbmV3IGpzLkxpdGVyYWxOdW1iZXIodmFsdWUgPyAiMCIgOiAiMSIpKQogICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IGpzLkxpdGVyYWxCb29sKHZhbHVlKS53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pOwogICAgfQogIH0KCiAgdm9pZCBnZW5lcmF0ZUNvbnN0YW50KAogICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50LCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAganMuRXhwcmVzc2lvbiBleHByZXNzaW9uID0gX2VtaXR0ZXIuY29uc3RhbnRSZWZlcmVuY2UoY29uc3RhbnQpOwogICAgaWYgKCFjb25zdGFudC5pc0R1bW15KSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1cHBvcnQgc291cmNlIGluZm9ybWF0aW9uIG9uIHN5bnRoZXRpYyBjb25zdGFudHMuCiAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CiAgICBwdXNoKGV4cHJlc3Npb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDb25zdGFudChIQ29uc3RhbnQgbm9kZSkgewogICAgYXNzZXJ0KGlzR2VuZXJhdGVBdFVzZVNpdGUobm9kZSkpOwogICAgZ2VuZXJhdGVDb25zdGFudChub2RlLmNvbnN0YW50LCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKCiAgICBfcmVnaXN0cnkucmVnaXN0ZXJDb25zdGFudFVzZShuZXcgQ29uc3RhbnRVc2UubGl0ZXJhbChub2RlLmNvbnN0YW50KSk7CiAgICBpZiAobm9kZS5jb25zdGFudC5pc1R5cGUpIHsKICAgICAgVHlwZUNvbnN0YW50VmFsdWUgdHlwZUNvbnN0YW50ID0gbm9kZS5jb25zdGFudDsKICAgICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyVHlwZVVzZSgKICAgICAgICAgIG5ldyBUeXBlVXNlLmNvbnN0VHlwZUxpdGVyYWwodHlwZUNvbnN0YW50LnJlcHJlc2VudGVkVHlwZSkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXROb3QoSE5vdCBub2RlKSB7CiAgICBhc3NlcnQobm9kZS5pbnB1dHMubGVuZ3RoID09IDEpOwogICAgZ2VuZXJhdGVOb3Qobm9kZS5pbnB1dHNbMF0sIG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgc3RhdGljIFN0cmluZyBtYXBSZWxhdGlvbmFsT3BlcmF0b3IoU3RyaW5nIG9wLCBib29sIGludmVyc2UpIHsKICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gaW52ZXJzZU9wZXJhdG9yID0gY29uc3QgPFN0cmluZywgU3RyaW5nPnsKICAgICAgIj09IjogIiE9IiwKICAgICAgIiE9IjogIj09IiwKICAgICAgIj09PSI6ICIhPT0iLAogICAgICAiIT09IjogIj09PSIsCiAgICAgICI8IjogIj49IiwKICAgICAgIjw9IjogIj4iLAogICAgICAiPiI6ICI8PSIsCiAgICAgICI+PSI6ICI8IgogICAgfTsKICAgIHJldHVybiBpbnZlcnNlID8gaW52ZXJzZU9wZXJhdG9yW29wXSA6IG9wOwogIH0KCiAgdm9pZCBnZW5lcmF0ZU5vdChISW5zdHJ1Y3Rpb24gaW5wdXQsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBib29sIGNhbkdlbmVyYXRlT3B0aW1pemVkQ29tcGFyaXNvbihISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgICAgaWYgKGluc3RydWN0aW9uIGlzISBIUmVsYXRpb25hbCkgcmV0dXJuIGZhbHNlOwoKICAgICAgSFJlbGF0aW9uYWwgcmVsYXRpb25hbCA9IGluc3RydWN0aW9uOwoKICAgICAgSEluc3RydWN0aW9uIGxlZnQgPSByZWxhdGlvbmFsLmxlZnQ7CiAgICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IHJlbGF0aW9uYWwucmlnaHQ7CiAgICAgIGlmIChsZWZ0LmlzU3RyaW5nT3JOdWxsKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgICByaWdodC5pc1N0cmluZ09yTnVsbChfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CgogICAgICAvLyBUaGlzIG9wdGltaXphdGlvbiBkb2Vzbid0IHdvcmsgZm9yIE5hTiwgc28gd2Ugb25seSBkbyBpdCBpZiB0aGUKICAgICAgLy8gdHlwZSBpcyBrbm93biB0byBiZSBhbiBpbnRlZ2VyLgogICAgICByZXR1cm4gbGVmdC5pc0ludGVnZXIoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICAgIHJpZ2h0LmlzSW50ZWdlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZTsKICAgIH0KCiAgICBib29sIGhhbmRsZWRCeVNwZWNpYWxDYXNlID0gZmFsc2U7CiAgICBpZiAoaXNHZW5lcmF0ZUF0VXNlU2l0ZShpbnB1dCkpIHsKICAgICAgaGFuZGxlZEJ5U3BlY2lhbENhc2UgPSB0cnVlOwogICAgICBpZiAoaW5wdXQgaXMgSElzKSB7CiAgICAgICAgZW1pdElzKGlucHV0LCAnIT09Jywgc291cmNlSW5mb3JtYXRpb24pOwogICAgICB9IGVsc2UgaWYgKGlucHV0IGlzIEhJc1ZpYUludGVyY2VwdG9yKSB7CiAgICAgICAgZW1pdElzVmlhSW50ZXJjZXB0b3IoaW5wdXQsIHNvdXJjZUluZm9ybWF0aW9uLCBuZWdhdGl2ZTogdHJ1ZSk7CiAgICAgIH0gZWxzZSBpZiAoaW5wdXQgaXMgSE5vdCkgewogICAgICAgIHVzZShpbnB1dC5pbnB1dHNbMF0pOwogICAgICB9IGVsc2UgaWYgKGlucHV0IGlzIEhJZGVudGl0eSkgewogICAgICAgIGVtaXRJZGVudGl0eUNvbXBhcmlzb24oaW5wdXQsIHNvdXJjZUluZm9ybWF0aW9uLCBpbnZlcnNlOiB0cnVlKTsKICAgICAgfSBlbHNlIGlmIChjYW5HZW5lcmF0ZU9wdGltaXplZENvbXBhcmlzb24oaW5wdXQpKSB7CiAgICAgICAgSFJlbGF0aW9uYWwgcmVsYXRpb25hbCA9IGlucHV0OwogICAgICAgIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uID0gcmVsYXRpb25hbC5vcGVyYXRpb24oKTsKICAgICAgICBTdHJpbmcgb3AgPSBtYXBSZWxhdGlvbmFsT3BlcmF0b3Iob3BlcmF0aW9uLm5hbWUsIHRydWUpOwogICAgICAgIGhhbmRsZUludm9rZUJpbmFyeShpbnB1dCwgb3AsIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBoYW5kbGVkQnlTcGVjaWFsQ2FzZSA9IGZhbHNlOwogICAgICB9CiAgICB9CiAgICBpZiAoIWhhbmRsZWRCeVNwZWNpYWxDYXNlKSB7CiAgICAgIHVzZShpbnB1dCk7CiAgICAgIHB1c2gobmV3IGpzLlByZWZpeCgiISIsIHBvcCgpKS53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0UGFyYW1ldGVyVmFsdWUoSFBhcmFtZXRlclZhbHVlIG5vZGUpIHsKICAgIGFzc2VydCghaXNHZW5lcmF0ZUF0VXNlU2l0ZShub2RlKSk7CiAgICBTdHJpbmcgbmFtZSA9IHZhcmlhYmxlTmFtZXMuZ2V0TmFtZShub2RlKTsKICAgIHBhcmFtZXRlcnMuYWRkKG5ldyBqcy5QYXJhbWV0ZXIobmFtZSkpOwogICAgZGVjbGFyZWRMb2NhbHMuYWRkKG5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRMb2NhbFZhbHVlKEhMb2NhbFZhbHVlIG5vZGUpIHsKICAgIGFzc2VydCghaXNHZW5lcmF0ZUF0VXNlU2l0ZShub2RlKSk7CiAgICBTdHJpbmcgbmFtZSA9IHZhcmlhYmxlTmFtZXMuZ2V0TmFtZShub2RlKTsKICAgIGNvbGxlY3RlZFZhcmlhYmxlRGVjbGFyYXRpb25zLmFkZChuYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0UGhpKEhQaGkgbm9kZSkgewogICAgLy8gVGhpcyBtZXRob2QgaXMgb25seSBjYWxsZWQgZm9yIHBoaXMgdGhhdCBhcmUgZ2VuZXJhdGVkIGF0IHVzZQogICAgLy8gc2l0ZS4gQSBwaGkgY2FuIGJlIGdlbmVyYXRlZCBhdCB1c2Ugc2l0ZSBvbmx5IGlmIGl0IGlzIHRoZQogICAgLy8gcmVzdWx0IG9mIGEgY29udHJvbCBmbG93IG9wZXJhdGlvbi4KICAgIEhCYXNpY0Jsb2NrIGlmQmxvY2sgPSBub2RlLmJsb2NrLmRvbWluYXRvcjsKICAgIGFzc2VydChjb250cm9sRmxvd09wZXJhdG9ycy5jb250YWlucyhpZkJsb2NrLmxhc3QpKTsKICAgIEhJbnN0cnVjdGlvbiBpbnB1dCA9IGlmQmxvY2subGFzdC5pbnB1dHNbMF07CiAgICBpZiAoaW5wdXQuaXNDb25zdGFudEZhbHNlKCkpIHsKICAgICAgdXNlKG5vZGUuaW5wdXRzWzFdKTsKICAgIH0gZWxzZSBpZiAoaW5wdXQuaXNDb25zdGFudFRydWUoKSkgewogICAgICB1c2Uobm9kZS5pbnB1dHNbMF0pOwogICAgfSBlbHNlIGlmIChub2RlLmlucHV0c1sxXS5pc0NvbnN0YW50Qm9vbGVhbigpKSB7CiAgICAgIFN0cmluZyBvcGVyYXRpb24gPSBub2RlLmlucHV0c1sxXS5pc0NvbnN0YW50RmFsc2UoKSA/ICcmJicgOiAnfHwnOwogICAgICBpZiAob3BlcmF0aW9uID09ICd8fCcpIHsKICAgICAgICBnZW5lcmF0ZU5vdChpbnB1dCwgaW5wdXQuc291cmNlSW5mb3JtYXRpb24pOwogICAgICB9IGVsc2UgewogICAgICAgIHVzZShpbnB1dCk7CiAgICAgIH0KICAgICAganMuRXhwcmVzc2lvbiBsZWZ0ID0gcG9wKCk7CiAgICAgIHVzZShub2RlLmlucHV0c1swXSk7CiAgICAgIHB1c2gobmV3IGpzLkJpbmFyeShvcGVyYXRpb24sIGxlZnQsIHBvcCgpKSk7CiAgICB9IGVsc2UgewogICAgICB1c2UoaW5wdXQpOwogICAgICBqcy5FeHByZXNzaW9uIHRlc3QgPSBwb3AoKTsKICAgICAgdXNlKG5vZGUuaW5wdXRzWzBdKTsKICAgICAganMuRXhwcmVzc2lvbiB0aGVuID0gcG9wKCk7CiAgICAgIHVzZShub2RlLmlucHV0c1sxXSk7CiAgICAgIHB1c2gobmV3IGpzLkNvbmRpdGlvbmFsKHRlc3QsIHRoZW4sIHBvcCgpKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFJldHVybihIUmV0dXJuIG5vZGUpIHsKICAgIGFzc2VydChub2RlLmlucHV0cy5sZW5ndGggPT0gMSk7CiAgICBISW5zdHJ1Y3Rpb24gaW5wdXQgPSBub2RlLmlucHV0c1swXTsKICAgIGlmIChpbnB1dC5pc0NvbnN0YW50TnVsbCgpKSB7CiAgICAgIHB1c2hTdGF0ZW1lbnQoCiAgICAgICAgICBuZXcganMuUmV0dXJuKCkud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0gZWxzZSB7CiAgICAgIHVzZShub2RlLmlucHV0c1swXSk7CiAgICAgIHB1c2hTdGF0ZW1lbnQoCiAgICAgICAgICBuZXcganMuUmV0dXJuKHBvcCgpKS53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUaGlzKEhUaGlzIG5vZGUpIHsKICAgIHB1c2gobmV3IGpzLlRoaXMoKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFRocm93KEhUaHJvdyBub2RlKSB7CiAgICBpZiAobm9kZS5pc1JldGhyb3cpIHsKICAgICAgdXNlKG5vZGUuaW5wdXRzWzBdKTsKICAgICAgcHVzaFN0YXRlbWVudCgKICAgICAgICAgIG5ldyBqcy5UaHJvdyhwb3AoKSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0gZWxzZSB7CiAgICAgIGdlbmVyYXRlVGhyb3dXaXRoSGVscGVyKAogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLndyYXBFeGNlcHRpb25IZWxwZXIsIG5vZGUuaW5wdXRzWzBdLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRBd2FpdChIQXdhaXQgbm9kZSkgewogICAgdXNlKG5vZGUuaW5wdXRzWzBdKTsKICAgIHB1c2gobmV3IGpzLkF3YWl0KHBvcCgpKS53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRZaWVsZChIWWllbGQgbm9kZSkgewogICAgdXNlKG5vZGUuaW5wdXRzWzBdKTsKICAgIHB1c2hTdGF0ZW1lbnQobmV3IGpzLkRhcnRZaWVsZChwb3AoKSwgbm9kZS5oYXNTdGFyKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRSYW5nZUNvbnZlcnNpb24oSFJhbmdlQ29udmVyc2lvbiBub2RlKSB7CiAgICAvLyBSYW5nZSBjb252ZXJzaW9uIGluc3RydWN0aW9ucyBhcmUgcmVtb3ZlZCBieSB0aGUgdmFsdWUgcmFuZ2UKICAgIC8vIGFuYWx5emVyLgogICAgYXNzZXJ0KGZhbHNlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0Qm91bmRzQ2hlY2soSEJvdW5kc0NoZWNrIG5vZGUpIHsKICAgIC8vIFRPRE8obmdlb2ZmcmF5KTogU2VwYXJhdGUgdGhlIHR3byBjaGVja3Mgb2YgdGhlIGJvdW5kcyBjaGVjaywgc28sCiAgICAvLyBlLmcuLCB0aGUgemVybyBjaGVja3MgY2FuIGJlIHNoYXJlZCBpZiBwb3NzaWJsZS4KCiAgICAvLyBJZiB0aGUgY2hlY2tzIGFsd2F5cyBzdWNjZWVkcywgd2Ugd291bGQgaGF2ZSByZW1vdmVkIHRoZSBib3VuZHMgY2hlY2sKICAgIC8vIGNvbXBsZXRlbHkuCiAgICBhc3NlcnQobm9kZS5zdGF0aWNDaGVja3MgIT0gSEJvdW5kc0NoZWNrLkFMV0FZU19UUlVFKTsKICAgIGlmIChub2RlLnN0YXRpY0NoZWNrcyAhPSBIQm91bmRzQ2hlY2suQUxXQVlTX0ZBTFNFKSB7CiAgICAgIGpzLkV4cHJlc3Npb24gdW5kZXI7CiAgICAgIGpzLkV4cHJlc3Npb24gb3ZlcjsKICAgICAgaWYgKG5vZGUuc3RhdGljQ2hlY2tzICE9IEhCb3VuZHNDaGVjay5BTFdBWVNfQUJPVkVfWkVSTykgewogICAgICAgIHVzZShub2RlLmluZGV4KTsKICAgICAgICBpZiAobm9kZS5pbmRleC5pc0ludGVnZXIoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICAgIHVuZGVyID0ganMuanMoIiMgPCAwIiwgcG9wKCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBqcy5FeHByZXNzaW9uIGpzSW5kZXggPSBwb3AoKTsKICAgICAgICAgIHVuZGVyID0ganMuanMoIiMgPj4+IDAgIT09ICMiLCBbanNJbmRleCwganNJbmRleF0pOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChub2RlLmluZGV4CiAgICAgICAgICAuaXNJbnRlZ2VyKF9hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgLmlzUG90ZW50aWFsbHlGYWxzZSkgewogICAgICAgIGNoZWNrSW50KG5vZGUuaW5kZXgsICchPT0nKTsKICAgICAgICB1bmRlciA9IHBvcCgpOwogICAgICB9CiAgICAgIGlmIChub2RlLnN0YXRpY0NoZWNrcyAhPSBIQm91bmRzQ2hlY2suQUxXQVlTX0JFTE9XX0xFTkdUSCkgewogICAgICAgIHZhciBpbmRleCA9IG5vZGUuaW5kZXg7CiAgICAgICAgdXNlKGluZGV4KTsKICAgICAgICBqcy5FeHByZXNzaW9uIGpzSW5kZXggPSBwb3AoKTsKICAgICAgICB1c2Uobm9kZS5sZW5ndGgpOwogICAgICAgIG92ZXIgPSBuZXcganMuQmluYXJ5KCI+PSIsIGpzSW5kZXgsIHBvcCgpKTsKICAgICAgfQogICAgICBhc3NlcnQob3ZlciAhPSBudWxsIHx8IHVuZGVyICE9IG51bGwpOwogICAgICBqcy5FeHByZXNzaW9uIHVuZGVyT3ZlciA9IHVuZGVyID09IG51bGwKICAgICAgICAgID8gb3ZlcgogICAgICAgICAgOiBvdmVyID09IG51bGwgPyB1bmRlciA6IG5ldyBqcy5CaW5hcnkoInx8IiwgdW5kZXIsIG92ZXIpOwogICAgICBqcy5TdGF0ZW1lbnQgdGhlbkJvZHkgPSBuZXcganMuQmxvY2suZW1wdHkoKTsKICAgICAganMuQmxvY2sgb2xkQ29udGFpbmVyID0gY3VycmVudENvbnRhaW5lcjsKICAgICAgY3VycmVudENvbnRhaW5lciA9IHRoZW5Cb2R5OwogICAgICBnZW5lcmF0ZVRocm93V2l0aEhlbHBlcihfY29tbW9uRWxlbWVudHMudGhyb3dJbmRleE91dE9mUmFuZ2VFeGNlcHRpb24sCiAgICAgICAgICBbbm9kZS5hcnJheSwgbm9kZS5yZXBvcnRlZEluZGV4XSwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgY3VycmVudENvbnRhaW5lciA9IG9sZENvbnRhaW5lcjsKICAgICAgdGhlbkJvZHkgPSB1bndyYXBTdGF0ZW1lbnQodGhlbkJvZHkpOwogICAgICBwdXNoU3RhdGVtZW50KG5ldyBqcy5JZi5ub0Vsc2UodW5kZXJPdmVyLCB0aGVuQm9keSkKICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfSBlbHNlIHsKICAgICAgZ2VuZXJhdGVUaHJvd1dpdGhIZWxwZXIoX2NvbW1vbkVsZW1lbnRzLnRocm93SW5kZXhPdXRPZlJhbmdlRXhjZXB0aW9uLAogICAgICAgICAgW25vZGUuYXJyYXksIG5vZGUuaW5kZXhdKTsKICAgIH0KICB9CgogIHZvaWQgZ2VuZXJhdGVUaHJvd1dpdGhIZWxwZXIoRnVuY3Rpb25FbnRpdHkgaGVscGVyLCBhcmd1bWVudCwKICAgICAge1NvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9ufSkgewogICAganMuRXhwcmVzc2lvbiBqc0hlbHBlciA9IF9lbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGhlbHBlcik7CiAgICBMaXN0IGFyZ3VtZW50cyA9IDxqcy5FeHByZXNzaW9uPltdOwogICAgaWYgKGFyZ3VtZW50IGlzIExpc3QpIHsKICAgICAgYXJndW1lbnQuZm9yRWFjaCgoaW5zdHJ1Y3Rpb24pIHsKICAgICAgICB1c2UoaW5zdHJ1Y3Rpb24pOwogICAgICAgIGFyZ3VtZW50cy5hZGQocG9wKCkpOwogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIHVzZShhcmd1bWVudCk7CiAgICAgIGFyZ3VtZW50cy5hZGQocG9wKCkpOwogICAgfQogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKAogICAgICAgIGhlbHBlciwgbmV3IENhbGxTdHJ1Y3R1cmUudW5uYW1lZChhcmd1bWVudHMubGVuZ3RoKSkpOwogICAganMuQ2FsbCB2YWx1ZSA9IG5ldyBqcy5DYWxsKGpzSGVscGVyLCBhcmd1bWVudHMudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSksCiAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIC8vIEJVRyg0OTA2KTogVXNpbmcgdGhyb3cvcmV0dXJuIGhlcmUgYWRkcyB0byB0aGUgc2l6ZSBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUKICAgIC8vIGJ1dCBpdCBoYXMgdGhlIGFkdmFudGFnZSBvZiBleHBsaWNpdGx5IHRlbGxpbmcgdGhlIEpTIGVuZ2luZSB0aGF0CiAgICAvLyB0aGlzIGNvZGUgcGF0aCB3aWxsIHRlcm1pbmF0ZSBhYnJ1cHRseS4gTmVlZHMgbW9yZSB3b3JrLgogICAgaWYgKGhlbHBlciA9PSBfY29tbW9uRWxlbWVudHMud3JhcEV4Y2VwdGlvbkhlbHBlcikgewogICAgICBwdXNoU3RhdGVtZW50KAogICAgICAgICAgbmV3IGpzLlRocm93KHZhbHVlKS53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2hTdGF0ZW1lbnQoCiAgICAgICAgICBuZXcganMuUmV0dXJuKHZhbHVlKS53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0VGhyb3dFeHByZXNzaW9uKEhUaHJvd0V4cHJlc3Npb24gbm9kZSkgewogICAgSEluc3RydWN0aW9uIGFyZ3VtZW50ID0gbm9kZS5pbnB1dHNbMF07CiAgICB1c2UoYXJndW1lbnQpOwoKICAgIEZ1bmN0aW9uRW50aXR5IGhlbHBlciA9IF9jb21tb25FbGVtZW50cy50aHJvd0V4cHJlc3Npb25IZWxwZXI7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UoCiAgICAgICAgbmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoaGVscGVyLCBDYWxsU3RydWN0dXJlLk9ORV9BUkcpKTsKCiAgICBqcy5FeHByZXNzaW9uIGpzSGVscGVyID0gX2VtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MoaGVscGVyKTsKICAgIGpzLkNhbGwgdmFsdWUgPSBuZXcganMuQ2FsbChqc0hlbHBlciwgW3BvcCgpXSkKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogICAgcHVzaCh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3dpdGNoKEhTd2l0Y2ggbm9kZSkgewogICAgLy8gU3dpdGNoZXMgYXJlIGhhbmRsZWQgdXNpbmcgW3Zpc2l0U3dpdGNoSW5mb10uCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RhdGljKEhTdGF0aWMgbm9kZSkgewogICAgTWVtYmVyRW50aXR5IGVsZW1lbnQgPSBub2RlLmVsZW1lbnQ7CiAgICBhc3NlcnQoZWxlbWVudC5pc0Z1bmN0aW9uIHx8IGVsZW1lbnQuaXNGaWVsZCk7CiAgICBpZiAoZWxlbWVudC5pc0Z1bmN0aW9uKSB7CiAgICAgIHB1c2goX2VtaXR0ZXIKICAgICAgICAgIC5zdGF0aWNDbG9zdXJlQWNjZXNzKGVsZW1lbnQpCiAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3RhdGljVGVhck9mZihlbGVtZW50KSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKF9lbWl0dGVyCiAgICAgICAgICAuc3RhdGljRmllbGRBY2Nlc3MoZWxlbWVudCkKICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNHZXQoZWxlbWVudCkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExhenlTdGF0aWMoSExhenlTdGF0aWMgbm9kZSkgewogICAgRmllbGRFbnRpdHkgZWxlbWVudCA9IG5vZGUuZWxlbWVudDsKICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY0luaXQoZWxlbWVudCkpOwogICAganMuRXhwcmVzc2lvbiBsYXp5R2V0dGVyID0gX2VtaXR0ZXIuaXNvbGF0ZUxhenlJbml0aWFsaXplckFjY2VzcyhlbGVtZW50KTsKICAgIGpzLkNhbGwgY2FsbCA9IG5ldyBqcy5DYWxsKGxhenlHZXR0ZXIsIDxqcy5FeHByZXNzaW9uPltdLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgIHB1c2goY2FsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RhdGljU3RvcmUoSFN0YXRpY1N0b3JlIG5vZGUpIHsKICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY1NldChub2RlLmVsZW1lbnQpKTsKICAgIGpzLk5vZGUgdmFyaWFibGUgPSBfZW1pdHRlci5zdGF0aWNGaWVsZEFjY2Vzcyhub2RlLmVsZW1lbnQpOwogICAgdXNlKG5vZGUuaW5wdXRzWzBdKTsKICAgIHB1c2gobmV3IGpzLkFzc2lnbm1lbnQodmFyaWFibGUsIHBvcCgpKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0cmluZ0NvbmNhdChIU3RyaW5nQ29uY2F0IG5vZGUpIHsKICAgIHVzZShub2RlLmxlZnQpOwogICAganMuRXhwcmVzc2lvbiBqc0xlZnQgPSBwb3AoKTsKICAgIHVzZShub2RlLnJpZ2h0KTsKICAgIHB1c2gobmV3IGpzLkJpbmFyeSgnKycsIGpzTGVmdCwgcG9wKCkpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RyaW5naWZ5KEhTdHJpbmdpZnkgbm9kZSkgewogICAgSEluc3RydWN0aW9uIGlucHV0ID0gbm9kZS5pbnB1dHMuZmlyc3Q7CiAgICBpZiAoaW5wdXQuaXNTdHJpbmcoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgdXNlKGlucHV0KTsKICAgIH0gZWxzZSBpZiAoaW5wdXQuaXNJbnRlZ2VyKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlIHx8CiAgICAgICAgaW5wdXQuaXNCb29sZWFuKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIC8vIEphdmFTY3JpcHQncyArIG9wZXJhdG9yIHdpdGggYSBzdHJpbmcgZm9yIHRoZSBsZWZ0IG9wZXJhbmQgd2lsbCBjb252ZXJ0CiAgICAgIC8vIHRoZSByaWdodCBvcGVyYW5kIHRvIGEgc3RyaW5nLCBhbmQgdGhlIGNvbnZlcnNpb24gcmVzdWx0IGlzIGNvcnJlY3QuCiAgICAgIHVzZShpbnB1dCk7CiAgICAgIGlmIChub2RlLnVzZWRCeS5sZW5ndGggPT0gMSAmJgogICAgICAgICAgbm9kZS51c2VkQnlbMF0gaXMgSFN0cmluZ0NvbmNhdCAmJgogICAgICAgICAgbm9kZS51c2VkQnlbMF0uaW5wdXRzWzFdID09IG5vZGUpIHsKICAgICAgICAvLyBUaGUgY29udGV4dCBpcyBhbHJlYWR5IDxzdHJpbmc+ICsgdmFsdWUuCiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gRm9yY2UgYW4gZW1wdHkgc3RyaW5nIGZvciB0aGUgZmlyc3Qgb3BlcmFuZC4KICAgICAgICBwdXNoKG5ldyBqcy5CaW5hcnkoJysnLCBqcy5zdHJpbmcoIiIpLCBwb3AoKSkKICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIEZ1bmN0aW9uRW50aXR5IGNvbnZlcnRUb1N0cmluZyA9CiAgICAgICAgICBfY29tbW9uRWxlbWVudHMuc3RyaW5nSW50ZXJwb2xhdGlvbkhlbHBlcjsKICAgICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKAogICAgICAgICAgbmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoY29udmVydFRvU3RyaW5nLCBDYWxsU3RydWN0dXJlLk9ORV9BUkcpKTsKICAgICAganMuRXhwcmVzc2lvbiBqc0hlbHBlciA9IF9lbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGNvbnZlcnRUb1N0cmluZyk7CiAgICAgIHVzZShpbnB1dCk7CiAgICAgIHB1c2gobmV3IGpzLkNhbGwoanNIZWxwZXIsIDxqcy5FeHByZXNzaW9uPltwb3AoKV0sCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogbm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpdGVyYWxMaXN0KEhMaXRlcmFsTGlzdCBub2RlKSB7CiAgICBfcmVnaXN0cnkKICAgICAgICAvLyBpZ25vcmU6ZGVwcmVjYXRlZF9tZW1iZXJfdXNlX2Zyb21fc2FtZV9wYWNrYWdlCiAgICAgICAgLnJlZ2lzdGVySW5zdGFudGlhdGVkQ2xhc3MoX2NvbW1vbkVsZW1lbnRzLmxpc3RDbGFzcyk7CiAgICBnZW5lcmF0ZUFycmF5TGl0ZXJhbChub2RlKTsKICB9CgogIHZvaWQgZ2VuZXJhdGVBcnJheUxpdGVyYWwoSExpdGVyYWxMaXN0IG5vZGUpIHsKICAgIExpc3Q8anMuRXhwcmVzc2lvbj4gZWxlbWVudHMgPSBub2RlLmlucHV0cy5tYXAoKEhJbnN0cnVjdGlvbiBpbnB1dCkgewogICAgICB1c2UoaW5wdXQpOwogICAgICByZXR1cm4gcG9wKCk7CiAgICB9KS50b0xpc3QoKTsKICAgIHB1c2gobmV3IGpzLkFycmF5SW5pdGlhbGl6ZXIoZWxlbWVudHMpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW5kZXgoSEluZGV4IG5vZGUpIHsKICAgIHVzZShub2RlLnJlY2VpdmVyKTsKICAgIGpzLkV4cHJlc3Npb24gcmVjZWl2ZXIgPSBwb3AoKTsKICAgIHVzZShub2RlLmluZGV4KTsKICAgIHB1c2gobmV3IGpzLlByb3BlcnR5QWNjZXNzKHJlY2VpdmVyLCBwb3AoKSkKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbmRleEFzc2lnbihISW5kZXhBc3NpZ24gbm9kZSkgewogICAgdXNlKG5vZGUucmVjZWl2ZXIpOwogICAganMuRXhwcmVzc2lvbiByZWNlaXZlciA9IHBvcCgpOwogICAgdXNlKG5vZGUuaW5kZXgpOwogICAganMuRXhwcmVzc2lvbiBpbmRleCA9IHBvcCgpOwogICAgdXNlKG5vZGUudmFsdWUpOwogICAgcHVzaChuZXcganMuQXNzaWdubWVudChuZXcganMuUHJvcGVydHlBY2Nlc3MocmVjZWl2ZXIsIGluZGV4KSwgcG9wKCkpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICB2b2lkIGNoZWNrSW50KEhJbnN0cnVjdGlvbiBpbnB1dCwgU3RyaW5nIGNtcCkgewogICAgdXNlKGlucHV0KTsKICAgIGpzLkV4cHJlc3Npb24gbGVmdCA9IHBvcCgpOwogICAgdXNlKGlucHV0KTsKICAgIGpzLkV4cHJlc3Npb24gb3IwID0gbmV3IGpzLkJpbmFyeSgifCIsIHBvcCgpLCBuZXcganMuTGl0ZXJhbE51bWJlcigiMCIpKTsKICAgIHB1c2gobmV3IGpzLkJpbmFyeShjbXAsIGxlZnQsIG9yMCkpOwogIH0KCiAgdm9pZCBjaGVja0JpZ0ludCgKICAgICAgSEluc3RydWN0aW9uIGlucHV0LCBTdHJpbmcgY21wLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgdXNlKGlucHV0KTsKICAgIGpzLkV4cHJlc3Npb24gbGVmdCA9IHBvcCgpOwogICAgdXNlKGlucHV0KTsKICAgIGpzLkV4cHJlc3Npb24gcmlnaHQgPSBwb3AoKTsKICAgIC8vIFRPRE8oNDk4NCk6IERlYWwgd2l0aCBpbmZpbml0eSBhbmQgLTAuMC4KICAgIGpzLkV4cHJlc3Npb24gbWF0aEZsb29yQ2FsbCA9IGpzLmpzKCdNYXRoLmZsb29yKCMpJywKICAgICAgICA8anMuRXhwcmVzc2lvbj5bbGVmdF0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBwdXNoKGpzLmpzKCcjICRjbXAgIycsIDxqcy5FeHByZXNzaW9uPlsKICAgICAgbWF0aEZsb29yQ2FsbCwKICAgICAgcmlnaHQKICAgIF0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgdm9pZCBjaGVja1R5cGVPZihISW5zdHJ1Y3Rpb24gaW5wdXQsIFN0cmluZyBjbXAsIFN0cmluZyB0eXBlTmFtZSwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIHVzZShpbnB1dCk7CiAgICBqcy5FeHByZXNzaW9uIHR5cGVPZiA9IG5ldyBqcy5QcmVmaXgoInR5cGVvZiIsIHBvcCgpKTsKICAgIHB1c2gobmV3IGpzLkJpbmFyeShjbXAsIHR5cGVPZiwganMuc3RyaW5nKHR5cGVOYW1lKSkKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICB2b2lkIGNoZWNrTnVtKAogICAgICBISW5zdHJ1Y3Rpb24gaW5wdXQsIFN0cmluZyBjbXAsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICByZXR1cm4gY2hlY2tUeXBlT2YoaW5wdXQsIGNtcCwgJ251bWJlcicsIHNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIHZvaWQgY2hlY2tEb3VibGUoCiAgICAgIEhJbnN0cnVjdGlvbiBpbnB1dCwgU3RyaW5nIGNtcCwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIHJldHVybiBjaGVja051bShpbnB1dCwgY21wLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICB2b2lkIGNoZWNrU3RyaW5nKAogICAgICBISW5zdHJ1Y3Rpb24gaW5wdXQsIFN0cmluZyBjbXAsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICByZXR1cm4gY2hlY2tUeXBlT2YoaW5wdXQsIGNtcCwgJ3N0cmluZycsIHNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIHZvaWQgY2hlY2tCb29sKAogICAgICBISW5zdHJ1Y3Rpb24gaW5wdXQsIFN0cmluZyBjbXAsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICByZXR1cm4gY2hlY2tUeXBlT2YoaW5wdXQsIGNtcCwgJ2Jvb2xlYW4nLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICB2b2lkIGNoZWNrT2JqZWN0KAogICAgICBISW5zdHJ1Y3Rpb24gaW5wdXQsIFN0cmluZyBjbXAsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBhc3NlcnQoTnVsbENvbnN0YW50VmFsdWUuSnNOdWxsID09ICdudWxsJyk7CiAgICBpZiAoY21wID09ICI9PT0iKSB7CiAgICAgIGNoZWNrVHlwZU9mKGlucHV0LCAnPT09JywgJ29iamVjdCcsIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAganMuRXhwcmVzc2lvbiBsZWZ0ID0gcG9wKCk7CiAgICAgIHVzZShpbnB1dCk7CiAgICAgIGpzLkV4cHJlc3Npb24gbm90TnVsbCA9IG5ldyBqcy5CaW5hcnkoIiE9PSIsIHBvcCgpLCBuZXcganMuTGl0ZXJhbE51bGwoKSk7CiAgICAgIHB1c2gobmV3IGpzLkJpbmFyeSgiJiYiLCBsZWZ0LCBub3ROdWxsKQogICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KGNtcCA9PSAiIT09Iik7CiAgICAgIGNoZWNrVHlwZU9mKGlucHV0LCAnIT09JywgJ29iamVjdCcsIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAganMuRXhwcmVzc2lvbiBsZWZ0ID0gcG9wKCk7CiAgICAgIHVzZShpbnB1dCk7CiAgICAgIGpzLkV4cHJlc3Npb24gZXFOdWxsID0gbmV3IGpzLkJpbmFyeSgiPT09IiwgcG9wKCksIG5ldyBqcy5MaXRlcmFsTnVsbCgpKTsKICAgICAgcHVzaChuZXcganMuQmluYXJ5KCJ8fCIsIGxlZnQsIGVxTnVsbCkKICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICB9CgogIHZvaWQgY2hlY2tBcnJheShISW5zdHJ1Y3Rpb24gaW5wdXQsIFN0cmluZyBjbXApIHsKICAgIHVzZShpbnB1dCk7CiAgICBqcy5Qcm9wZXJ0eUFjY2VzcyBjb25zdHJ1Y3RvciA9CiAgICAgICAgbmV3IGpzLlByb3BlcnR5QWNjZXNzLmZpZWxkKHBvcCgpLCAnY29uc3RydWN0b3InKTsKICAgIHB1c2gobmV3IGpzLkJpbmFyeShjbXAsIGNvbnN0cnVjdG9yLCBuZXcganMuVmFyaWFibGVVc2UoJ0FycmF5JykpKTsKICB9CgogIHZvaWQgY2hlY2tGaWVsZEV4aXN0cyhISW5zdHJ1Y3Rpb24gaW5wdXQsIFN0cmluZyBmaWVsZE5hbWUpIHsKICAgIHVzZShpbnB1dCk7CiAgICBqcy5Qcm9wZXJ0eUFjY2VzcyBmaWVsZCA9IG5ldyBqcy5Qcm9wZXJ0eUFjY2Vzcy5maWVsZChwb3AoKSwgZmllbGROYW1lKTsKICAgIC8vIERvdWJsZSBuZWdhdGUgdG8gYm9vbGlmeSB0aGUgcmVzdWx0LgogICAgcHVzaChuZXcganMuUHJlZml4KCchJywgbmV3IGpzLlByZWZpeCgnIScsIGZpZWxkKSkpOwogIH0KCiAgdm9pZCBjaGVja0ZpZWxkRG9lc05vdEV4aXN0KEhJbnN0cnVjdGlvbiBpbnB1dCwgU3RyaW5nIGZpZWxkTmFtZSkgewogICAgdXNlKGlucHV0KTsKICAgIGpzLlByb3BlcnR5QWNjZXNzIGZpZWxkID0gbmV3IGpzLlByb3BlcnR5QWNjZXNzLmZpZWxkKHBvcCgpLCBmaWVsZE5hbWUpOwogICAgcHVzaChuZXcganMuUHJlZml4KCchJywgZmllbGQpKTsKICB9CgogIHZvaWQgY2hlY2tJbW11dGFibGVBcnJheShISW5zdHJ1Y3Rpb24gaW5wdXQpIHsKICAgIGNoZWNrRmllbGRFeGlzdHMoaW5wdXQsICdpbW11dGFibGVcJGxpc3QnKTsKICB9CgogIHZvaWQgY2hlY2tNdXRhYmxlQXJyYXkoSEluc3RydWN0aW9uIGlucHV0KSB7CiAgICBjaGVja0ZpZWxkRG9lc05vdEV4aXN0KGlucHV0LCAnaW1tdXRhYmxlXCRsaXN0Jyk7CiAgfQoKICB2b2lkIGNoZWNrRXh0ZW5kYWJsZUFycmF5KEhJbnN0cnVjdGlvbiBpbnB1dCkgewogICAgY2hlY2tGaWVsZERvZXNOb3RFeGlzdChpbnB1dCwgJ2ZpeGVkXCRsZW5ndGgnKTsKICB9CgogIHZvaWQgY2hlY2tGaXhlZEFycmF5KEhJbnN0cnVjdGlvbiBpbnB1dCkgewogICAgY2hlY2tGaWVsZEV4aXN0cyhpbnB1dCwgJ2ZpeGVkXCRsZW5ndGgnKTsKICB9CgogIHZvaWQgY2hlY2tOdWxsKEhJbnN0cnVjdGlvbiBpbnB1dCkgewogICAgdXNlKGlucHV0KTsKICAgIHB1c2gobmV3IGpzLkJpbmFyeSgnPT0nLCBwb3AoKSwgbmV3IGpzLkxpdGVyYWxOdWxsKCkpKTsKICB9CgogIHZvaWQgY2hlY2tOb25OdWxsKEhJbnN0cnVjdGlvbiBpbnB1dCkgewogICAgdXNlKGlucHV0KTsKICAgIHB1c2gobmV3IGpzLkJpbmFyeSgnIT0nLCBwb3AoKSwgbmV3IGpzLkxpdGVyYWxOdWxsKCkpKTsKICB9CgogIHZvaWQgY2hlY2tUeXBlKEhJbnN0cnVjdGlvbiBpbnB1dCwgSEluc3RydWN0aW9uIGludGVyY2VwdG9yLCBEYXJ0VHlwZSB0eXBlLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAge2Jvb2wgbmVnYXRpdmU6IGZhbHNlfSkgewogICAgaWYgKHR5cGUuaXNJbnRlcmZhY2VUeXBlKSB7CiAgICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlVHlwZSA9IHR5cGU7CiAgICAgIENsYXNzRW50aXR5IGVsZW1lbnQgPSBpbnRlcmZhY2VUeXBlLmVsZW1lbnQ7CiAgICAgIGlmIChlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3MpIHsKICAgICAgICBjaGVja0FycmF5KGlucHV0LCBuZWdhdGl2ZSA/ICchPT0nIDogJz09PScpOwogICAgICAgIHJldHVybjsKICAgICAgfSBlbHNlIGlmIChlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5qc011dGFibGVBcnJheUNsYXNzKSB7CiAgICAgICAgaWYgKG5lZ2F0aXZlKSB7CiAgICAgICAgICBjaGVja0ltbXV0YWJsZUFycmF5KGlucHV0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY2hlY2tNdXRhYmxlQXJyYXkoaW5wdXQpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuanNFeHRlbmRhYmxlQXJyYXlDbGFzcykgewogICAgICAgIGlmIChuZWdhdGl2ZSkgewogICAgICAgICAgY2hlY2tGaXhlZEFycmF5KGlucHV0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY2hlY2tFeHRlbmRhYmxlQXJyYXkoaW5wdXQpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuanNGaXhlZEFycmF5Q2xhc3MpIHsKICAgICAgICBpZiAobmVnYXRpdmUpIHsKICAgICAgICAgIGNoZWNrRXh0ZW5kYWJsZUFycmF5KGlucHV0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY2hlY2tGaXhlZEFycmF5KGlucHV0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLmpzVW5tb2RpZmlhYmxlQXJyYXlDbGFzcykgewogICAgICAgIGlmIChuZWdhdGl2ZSkgewogICAgICAgICAgY2hlY2tNdXRhYmxlQXJyYXkoaW5wdXQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjaGVja0ltbXV0YWJsZUFycmF5KGlucHV0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CiAgICBpZiAoaW50ZXJjZXB0b3IgIT0gbnVsbCkgewogICAgICBjaGVja1R5cGVWaWFQcm9wZXJ0eShpbnRlcmNlcHRvciwgdHlwZSwgc291cmNlSW5mb3JtYXRpb24sCiAgICAgICAgICBuZWdhdGl2ZTogbmVnYXRpdmUpOwogICAgfSBlbHNlIHsKICAgICAgY2hlY2tUeXBlVmlhUHJvcGVydHkoaW5wdXQsIHR5cGUsIHNvdXJjZUluZm9ybWF0aW9uLCBuZWdhdGl2ZTogbmVnYXRpdmUpOwogICAgfQogIH0KCiAgdm9pZCBjaGVja1R5cGVWaWFQcm9wZXJ0eSgKICAgICAgSEluc3RydWN0aW9uIGlucHV0LCBEYXJ0VHlwZSB0eXBlLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAge2Jvb2wgbmVnYXRpdmU6IGZhbHNlfSkgewogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyVHlwZVVzZShuZXcgVHlwZVVzZS5pc0NoZWNrKHR5cGUpKTsKCiAgICB1c2UoaW5wdXQpOwoKICAgIGpzLlByb3BlcnR5QWNjZXNzIGZpZWxkID0KICAgICAgICBuZXcganMuUHJvcGVydHlBY2Nlc3MocG9wKCksIF9uYW1lci5vcGVyYXRvcklzVHlwZSh0eXBlKSkKICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAvLyBXZSBhbHdheXMgbmVnYXRlIGF0IGxlYXN0IG9uY2Ugc28gdGhhdCB0aGUgcmVzdWx0IGlzIGJvb2xpZmllZC4KICAgIHB1c2gobmV3IGpzLlByZWZpeCgnIScsIGZpZWxkKS53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICAgIC8vIElmIHRoZSByZXN1bHQgaXMgbm90IG5lZ2F0ZWQsIHB1dCBhbm90aGVyICchJyBpbiBmcm9udC4KICAgIGlmICghbmVnYXRpdmUpIHsKICAgICAgcHVzaChuZXcganMuUHJlZml4KCchJywgcG9wKCkpLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQogIH0KCiAgdm9pZCBjaGVja1R5cGVWaWFJbnN0YW5jZW9mKEhJbnN0cnVjdGlvbiBpbnB1dCwgSW50ZXJmYWNlVHlwZSB0eXBlLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAge2Jvb2wgbmVnYXRpdmU6IGZhbHNlfSkgewogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyVHlwZVVzZShuZXcgVHlwZVVzZS5pbnN0YW5jZUNvbnN0cnVjdG9yKHR5cGUpKTsKCiAgICB1c2UoaW5wdXQpOwoKICAgIGpzLkV4cHJlc3Npb24ganNDbGFzc1JlZmVyZW5jZSA9IF9lbWl0dGVyLmNvbnN0cnVjdG9yQWNjZXNzKHR5cGUuZWxlbWVudCk7CiAgICBwdXNoKGpzLmpzKCcjIGluc3RhbmNlb2YgIycsCiAgICAgICAgW3BvcCgpLCBqc0NsYXNzUmVmZXJlbmNlXSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICBpZiAobmVnYXRpdmUpIHsKICAgICAgcHVzaChuZXcganMuUHJlZml4KCchJywgcG9wKCkpLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQogIH0KCiAgdm9pZCBoYW5kbGVOdW1iZXJPclN0cmluZ1N1cGVydHlwZUNoZWNrKAogICAgICBISW5zdHJ1Y3Rpb24gaW5wdXQsCiAgICAgIEhJbnN0cnVjdGlvbiBpbnRlcmNlcHRvciwKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAge2Jvb2wgbmVnYXRpdmU6IGZhbHNlfSkgewogICAgYXNzZXJ0KCFpZGVudGljYWwodHlwZS5lbGVtZW50LCBfY29tbW9uRWxlbWVudHMubGlzdENsYXNzKSAmJgogICAgICAgICFfY29tbW9uRWxlbWVudHMuaXNMaXN0U3VwZXJ0eXBlKHR5cGUuZWxlbWVudCkgJiYKICAgICAgICAhX2NvbW1vbkVsZW1lbnRzLmlzU3RyaW5nT25seVN1cGVydHlwZSh0eXBlLmVsZW1lbnQpKTsKICAgIFN0cmluZyByZWxhdGlvbiA9IG5lZ2F0aXZlID8gJyE9PScgOiAnPT09JzsKICAgIGNoZWNrTnVtKGlucHV0LCByZWxhdGlvbiwgc291cmNlSW5mb3JtYXRpb24pOwogICAganMuRXhwcmVzc2lvbiBudW1iZXJUZXN0ID0gcG9wKCk7CiAgICBjaGVja1N0cmluZyhpbnB1dCwgcmVsYXRpb24sIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGpzLkV4cHJlc3Npb24gc3RyaW5nVGVzdCA9IHBvcCgpOwogICAgY2hlY2tPYmplY3QoaW5wdXQsIHJlbGF0aW9uLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBqcy5FeHByZXNzaW9uIG9iamVjdFRlc3QgPSBwb3AoKTsKICAgIGNoZWNrVHlwZShpbnB1dCwgaW50ZXJjZXB0b3IsIHR5cGUsIHNvdXJjZUluZm9ybWF0aW9uLCBuZWdhdGl2ZTogbmVnYXRpdmUpOwogICAgU3RyaW5nIGNvbWJpbmVyID0gbmVnYXRpdmUgPyAnJiYnIDogJ3x8JzsKICAgIFN0cmluZyBjb21iaW5lcjIgPSBuZWdhdGl2ZSA/ICd8fCcgOiAnJiYnOwogICAgcHVzaChuZXcganMuQmluYXJ5KAogICAgICAgICAgICBjb21iaW5lciwKICAgICAgICAgICAgbmV3IGpzLkJpbmFyeShjb21iaW5lciwgbnVtYmVyVGVzdCwgc3RyaW5nVGVzdCkKICAgICAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pLAogICAgICAgICAgICBuZXcganMuQmluYXJ5KGNvbWJpbmVyMiwgb2JqZWN0VGVzdCwgcG9wKCkpCiAgICAgICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSkKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICB2b2lkIGhhbmRsZVN0cmluZ1N1cGVydHlwZUNoZWNrKEhJbnN0cnVjdGlvbiBpbnB1dCwgSEluc3RydWN0aW9uIGludGVyY2VwdG9yLAogICAgICBJbnRlcmZhY2VUeXBlIHR5cGUsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICB7Ym9vbCBuZWdhdGl2ZTogZmFsc2V9KSB7CiAgICBhc3NlcnQoIWlkZW50aWNhbCh0eXBlLmVsZW1lbnQsIF9jb21tb25FbGVtZW50cy5saXN0Q2xhc3MpICYmCiAgICAgICAgIV9jb21tb25FbGVtZW50cy5pc0xpc3RTdXBlcnR5cGUodHlwZS5lbGVtZW50KSAmJgogICAgICAgICFfY29tbW9uRWxlbWVudHMuaXNOdW1iZXJPclN0cmluZ1N1cGVydHlwZSh0eXBlLmVsZW1lbnQpKTsKICAgIFN0cmluZyByZWxhdGlvbiA9IG5lZ2F0aXZlID8gJyE9PScgOiAnPT09JzsKICAgIGNoZWNrU3RyaW5nKGlucHV0LCByZWxhdGlvbiwgc291cmNlSW5mb3JtYXRpb24pOwogICAganMuRXhwcmVzc2lvbiBzdHJpbmdUZXN0ID0gcG9wKCk7CiAgICBjaGVja09iamVjdChpbnB1dCwgcmVsYXRpb24sIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGpzLkV4cHJlc3Npb24gb2JqZWN0VGVzdCA9IHBvcCgpOwogICAgY2hlY2tUeXBlKGlucHV0LCBpbnRlcmNlcHRvciwgdHlwZSwgc291cmNlSW5mb3JtYXRpb24sIG5lZ2F0aXZlOiBuZWdhdGl2ZSk7CiAgICBTdHJpbmcgY29tYmluZXIgPSBuZWdhdGl2ZSA/ICd8fCcgOiAnJiYnOwogICAgcHVzaChuZXcganMuQmluYXJ5KG5lZ2F0aXZlID8gJyYmJyA6ICd8fCcsIHN0cmluZ1Rlc3QsCiAgICAgICAgbmV3IGpzLkJpbmFyeShjb21iaW5lciwgb2JqZWN0VGVzdCwgcG9wKCkpKSk7CiAgfQoKICB2b2lkIGhhbmRsZUxpc3RPclN1cGVydHlwZUNoZWNrKEhJbnN0cnVjdGlvbiBpbnB1dCwgSEluc3RydWN0aW9uIGludGVyY2VwdG9yLAogICAgICBJbnRlcmZhY2VUeXBlIHR5cGUsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICB7Ym9vbCBuZWdhdGl2ZTogZmFsc2V9KSB7CiAgICBhc3NlcnQoIWlkZW50aWNhbCh0eXBlLmVsZW1lbnQsIF9jb21tb25FbGVtZW50cy5zdHJpbmdDbGFzcykgJiYKICAgICAgICAhX2NvbW1vbkVsZW1lbnRzLmlzU3RyaW5nT25seVN1cGVydHlwZSh0eXBlLmVsZW1lbnQpICYmCiAgICAgICAgIV9jb21tb25FbGVtZW50cy5pc051bWJlck9yU3RyaW5nU3VwZXJ0eXBlKHR5cGUuZWxlbWVudCkpOwogICAgU3RyaW5nIHJlbGF0aW9uID0gbmVnYXRpdmUgPyAnIT09JyA6ICc9PT0nOwogICAgY2hlY2tPYmplY3QoaW5wdXQsIHJlbGF0aW9uLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBqcy5FeHByZXNzaW9uIG9iamVjdFRlc3QgPSBwb3AoKTsKICAgIGNoZWNrQXJyYXkoaW5wdXQsIHJlbGF0aW9uKTsKICAgIGpzLkV4cHJlc3Npb24gYXJyYXlUZXN0ID0gcG9wKCk7CiAgICBjaGVja1R5cGUoaW5wdXQsIGludGVyY2VwdG9yLCB0eXBlLCBzb3VyY2VJbmZvcm1hdGlvbiwgbmVnYXRpdmU6IG5lZ2F0aXZlKTsKICAgIFN0cmluZyBjb21iaW5lciA9IG5lZ2F0aXZlID8gJyYmJyA6ICd8fCc7CiAgICBwdXNoKG5ldyBqcy5CaW5hcnkobmVnYXRpdmUgPyAnfHwnIDogJyYmJywgb2JqZWN0VGVzdCwKICAgICAgICAgICAgbmV3IGpzLkJpbmFyeShjb21iaW5lciwgYXJyYXlUZXN0LCBwb3AoKSkpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdElzKEhJcyBub2RlKSB7CiAgICBlbWl0SXMobm9kZSwgIj09PSIsIG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdElzVmlhSW50ZXJjZXB0b3IoSElzVmlhSW50ZXJjZXB0b3Igbm9kZSkgewogICAgZW1pdElzVmlhSW50ZXJjZXB0b3Iobm9kZSwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbiwgbmVnYXRpdmU6IGZhbHNlKTsKICB9CgogIHZvaWQgZW1pdElzKEhJcyBub2RlLCBTdHJpbmcgcmVsYXRpb24sIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBEYXJ0VHlwZSB0eXBlID0gbm9kZS50eXBlRXhwcmVzc2lvbjsKICAgIF9yZWdpc3RyeS5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UuaXNDaGVjayh0eXBlKSk7CiAgICBISW5zdHJ1Y3Rpb24gaW5wdXQgPSBub2RlLmV4cHJlc3Npb247CgogICAgLy8gSWYgdGhpcyBpcyBjaGFuZ2VkIHRvIHNpbmdsZSA9PSB0aGVyZSBhcmUgc2V2ZXJhbCBwbGFjZXMgYmVsb3cgdGhhdCBtdXN0CiAgICAvLyBiZSBjaGFuZ2VkIHRvIG1hdGNoLgogICAgYXNzZXJ0KHJlbGF0aW9uID09ICc9PT0nIHx8IHJlbGF0aW9uID09ICchPT0nKTsKICAgIGJvb2wgbmVnYXRpdmUgPSByZWxhdGlvbiA9PSAnIT09JzsKCiAgICBpZiAobm9kZS5pc1ZhcmlhYmxlQ2hlY2sgfHwgbm9kZS5pc0NvbXBvdW5kQ2hlY2spIHsKICAgICAgdXNlKG5vZGUuY2hlY2tDYWxsKTsKICAgICAgaWYgKG5lZ2F0aXZlKSBwdXNoKG5ldyBqcy5QcmVmaXgoJyEnLCBwb3AoKSkpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KG5vZGUuaXNSYXdDaGVjayk7CiAgICAgIEhJbnN0cnVjdGlvbiBpbnRlcmNlcHRvciA9IG5vZGUuaW50ZXJjZXB0b3I7CiAgICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlVHlwZSA9IHR5cGU7CiAgICAgIENsYXNzRW50aXR5IGVsZW1lbnQgPSBpbnRlcmZhY2VUeXBlLmVsZW1lbnQ7CiAgICAgIGlmIChlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5udWxsQ2xhc3MpIHsKICAgICAgICBpZiAobmVnYXRpdmUpIHsKICAgICAgICAgIGNoZWNrTm9uTnVsbChpbnB1dCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNoZWNrTnVsbChpbnB1dCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPT0KICAgICAgICAgIF9jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcyAvKiB8fCB0eXBlLnRyZWF0QXNEeW5hbWljKi8pIHsKICAgICAgICAvLyBUaGUgY29uc3RhbnQgZm9sZGVyIGFsc28gZG9lcyB0aGlzIG9wdGltaXphdGlvbiwgYnV0IHdlIG1ha2UKICAgICAgICAvLyBpdCBzYWZlIGJ5IGFzc3VtaW5nIGl0IG1heSBoYXZlIG5vdCBydW4uCiAgICAgICAgcHVzaChuZXdMaXRlcmFsQm9vbCghbmVnYXRpdmUsIHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuc3RyaW5nQ2xhc3MpIHsKICAgICAgICBjaGVja1N0cmluZyhpbnB1dCwgcmVsYXRpb24sIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgfSBlbHNlIGlmIChlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5kb3VibGVDbGFzcykgewogICAgICAgIGNoZWNrRG91YmxlKGlucHV0LCByZWxhdGlvbiwgc291cmNlSW5mb3JtYXRpb24pOwogICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLm51bUNsYXNzKSB7CiAgICAgICAgY2hlY2tOdW0oaW5wdXQsIHJlbGF0aW9uLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuYm9vbENsYXNzKSB7CiAgICAgICAgY2hlY2tCb29sKGlucHV0LCByZWxhdGlvbiwgc291cmNlSW5mb3JtYXRpb24pOwogICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLmludENsYXNzKSB7CiAgICAgICAgLy8gVGhlIGlzIGNoZWNrIGluIHRoZSBjb2RlIHRlbGxzIHVzIHRoYXQgaXQgbWlnaHQgbm90IGJlIGFuCiAgICAgICAgLy8gaW50LiBTbyB3ZSBkbyBhIHR5cGVvZiBmaXJzdCB0byBhdm9pZCBwb3NzaWJsZQogICAgICAgIC8vIGRlb3B0aW1pemF0aW9ucyBvbiB0aGUgSlMgZW5naW5lIGR1ZSB0byB0aGUgTWF0aC5mbG9vciBjaGVjay4KICAgICAgICBjaGVja051bShpbnB1dCwgcmVsYXRpb24sIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICBqcy5FeHByZXNzaW9uIG51bVRlc3QgPSBwb3AoKTsKICAgICAgICBjaGVja0JpZ0ludChpbnB1dCwgcmVsYXRpb24sIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICBwdXNoKG5ldyBqcy5CaW5hcnkobmVnYXRpdmUgPyAnfHwnIDogJyYmJywgbnVtVGVzdCwgcG9wKCkpCiAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgfSBlbHNlIGlmIChub2RlLnVzZUluc3RhbmNlT2YpIHsKICAgICAgICBhc3NlcnQoaW50ZXJjZXB0b3IgPT0gbnVsbCk7CiAgICAgICAgY2hlY2tUeXBlVmlhSW5zdGFuY2VvZihpbnB1dCwgdHlwZSwgc291cmNlSW5mb3JtYXRpb24sCiAgICAgICAgICAgIG5lZ2F0aXZlOiBuZWdhdGl2ZSk7CiAgICAgIH0gZWxzZSBpZiAoX2NvbW1vbkVsZW1lbnRzLmlzTnVtYmVyT3JTdHJpbmdTdXBlcnR5cGUoZWxlbWVudCkpIHsKICAgICAgICBoYW5kbGVOdW1iZXJPclN0cmluZ1N1cGVydHlwZUNoZWNrKAogICAgICAgICAgICBpbnB1dCwgaW50ZXJjZXB0b3IsIHR5cGUsIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgICAgICBuZWdhdGl2ZTogbmVnYXRpdmUpOwogICAgICB9IGVsc2UgaWYgKF9jb21tb25FbGVtZW50cy5pc1N0cmluZ09ubHlTdXBlcnR5cGUoZWxlbWVudCkpIHsKICAgICAgICBoYW5kbGVTdHJpbmdTdXBlcnR5cGVDaGVjayhpbnB1dCwgaW50ZXJjZXB0b3IsIHR5cGUsIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgICAgICBuZWdhdGl2ZTogbmVnYXRpdmUpOwogICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLmxpc3RDbGFzcyB8fAogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmlzTGlzdFN1cGVydHlwZShlbGVtZW50KSkgewogICAgICAgIGhhbmRsZUxpc3RPclN1cGVydHlwZUNoZWNrKGlucHV0LCBpbnRlcmNlcHRvciwgdHlwZSwgc291cmNlSW5mb3JtYXRpb24sCiAgICAgICAgICAgIG5lZ2F0aXZlOiBuZWdhdGl2ZSk7CiAgICAgIH0gZWxzZSBpZiAodHlwZS5pc0Z1bmN0aW9uVHlwZSkgewogICAgICAgIGNoZWNrVHlwZShpbnB1dCwgaW50ZXJjZXB0b3IsIHR5cGUsIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgICAgICBuZWdhdGl2ZTogbmVnYXRpdmUpOwogICAgICB9IGVsc2UgaWYgKChpbnB1dC5pc1ByaW1pdGl2ZShfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNQb3RlbnRpYWxseVRydWUgJiYKICAgICAgICAgICAgICBpbnB1dC5pc1ByaW1pdGl2ZUFycmF5KF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlGYWxzZSkgfHwKICAgICAgICAgIGlucHV0LmlzTnVsbChfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNQb3RlbnRpYWxseVRydWUpIHsKICAgICAgICBjaGVja09iamVjdChpbnB1dCwgcmVsYXRpb24sIG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogICAgICAgIGpzLkV4cHJlc3Npb24gb2JqZWN0VGVzdCA9IHBvcCgpOwogICAgICAgIGNoZWNrVHlwZShpbnB1dCwgaW50ZXJjZXB0b3IsIHR5cGUsIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgICAgICBuZWdhdGl2ZTogbmVnYXRpdmUpOwogICAgICAgIHB1c2gobmV3IGpzLkJpbmFyeShuZWdhdGl2ZSA/ICd8fCcgOiAnJiYnLCBvYmplY3RUZXN0LCBwb3AoKSkKICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICB9IGVsc2UgewogICAgICAgIGNoZWNrVHlwZShpbnB1dCwgaW50ZXJjZXB0b3IsIHR5cGUsIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgICAgICBuZWdhdGl2ZTogbmVnYXRpdmUpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIGVtaXRJc1ZpYUludGVyY2VwdG9yKAogICAgICBISXNWaWFJbnRlcmNlcHRvciBub2RlLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAge2Jvb2wgbmVnYXRpdmU6IGZhbHNlfSkgewogICAgY2hlY2tUeXBlVmlhUHJvcGVydHkoCiAgICAgICAgbm9kZS5pbnRlcmNlcHRvciwgbm9kZS50eXBlRXhwcmVzc2lvbiwgc291cmNlSW5mb3JtYXRpb24sCiAgICAgICAgbmVnYXRpdmU6IG5lZ2F0aXZlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlQ29udmVyc2lvbihIVHlwZUNvbnZlcnNpb24gbm9kZSkgewogICAgYXNzZXJ0KG5vZGUuaXNUeXBlQ2hlY2sgfHwgbm9kZS5pc0Nhc3RDaGVjayk7CiAgICBEYXJ0VHlwZSB0eXBlID0gbm9kZS50eXBlRXhwcmVzc2lvbjsKICAgIGFzc2VydCghdHlwZS5pc1R5cGVkZWYpOwogICAgYXNzZXJ0KCF0eXBlLmlzRHluYW1pYyk7CiAgICBhc3NlcnQoIXR5cGUuaXNWb2lkKTsKICAgIGlmICh0eXBlLmlzRnVuY3Rpb25UeXBlKSB7CiAgICAgIC8vIFRPRE8oNTAyMik6IFdlIGN1cnJlbnRseSBnZW5lcmF0ZSAkaXNGdW5jdGlvbiBjaGVja3MgZm9yCiAgICAgIC8vIGZ1bmN0aW9uIHR5cGVzLgogICAgICBfcmVnaXN0cnkKICAgICAgICAgIC5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UuaXNDaGVjayhfY29tbW9uRWxlbWVudHMuZnVuY3Rpb25UeXBlKSk7CiAgICB9CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLmlzQ2hlY2sodHlwZSkpOwoKICAgIENoZWNrZWRNb2RlSGVscGVyIGhlbHBlciA9IF9jaGVja2VkTW9kZUhlbHBlcnMuZ2V0Q2hlY2tlZE1vZGVIZWxwZXIoCiAgICAgICAgdHlwZSwgX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLAogICAgICAgIHR5cGVDYXN0OiBub2RlLmlzQ2FzdENoZWNrKTsKCiAgICBTdGF0aWNVc2Ugc3RhdGljVXNlID0gaGVscGVyLmdldFN0YXRpY1VzZShfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMpOwogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKHN0YXRpY1VzZSk7CiAgICBMaXN0PGpzLkV4cHJlc3Npb24+IGFyZ3VtZW50cyA9IDxqcy5FeHByZXNzaW9uPltdOwogICAgdXNlKG5vZGUuY2hlY2tlZElucHV0KTsKICAgIGFyZ3VtZW50cy5hZGQocG9wKCkpOwogICAgaGVscGVyLmdlbmVyYXRlQWRkaXRpb25hbEFyZ3VtZW50cyh0aGlzLCBfbmFtZXIsIG5vZGUsIGFyZ3VtZW50cyk7CiAgICBwdXNoKAogICAgICAgIG5ldyBqcy5DYWxsKF9lbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKHN0YXRpY1VzZS5lbGVtZW50KSwgYXJndW1lbnRzKQogICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQcmltaXRpdmVDaGVjayhIUHJpbWl0aXZlQ2hlY2sgbm9kZSkgewogICAganMuRXhwcmVzc2lvbiB0ZXN0ID0gX2dlbmVyYXRlUmVjZWl2ZXJPckFyZ3VtZW50VHlwZVRlc3Qobm9kZSk7CiAgICBqcy5CbG9jayBvbGRDb250YWluZXIgPSBjdXJyZW50Q29udGFpbmVyOwogICAganMuU3RhdGVtZW50IGJvZHkgPSBuZXcganMuQmxvY2suZW1wdHkoKTsKICAgIGN1cnJlbnRDb250YWluZXIgPSBib2R5OwogICAgaWYgKG5vZGUuaXNBcmd1bWVudFR5cGVDaGVjaykgewogICAgICBnZW5lcmF0ZVRocm93V2l0aEhlbHBlcigKICAgICAgICAgIF9jb21tb25FbGVtZW50cy50aHJvd0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiwgbm9kZS5jaGVja2VkSW5wdXQsCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogbm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9IGVsc2UgaWYgKG5vZGUuaXNSZWNlaXZlclR5cGVDaGVjaykgewogICAgICB1c2Uobm9kZS5jaGVja2VkSW5wdXQpOwogICAgICBqcy5OYW1lIG1ldGhvZE5hbWUgPQogICAgICAgICAgX25hbWVyLmludm9jYXRpb25OYW1lKG5vZGUucmVjZWl2ZXJUeXBlQ2hlY2tTZWxlY3Rvcik7CiAgICAgIGpzLkV4cHJlc3Npb24gY2FsbCA9IGpzLnByb3BlcnR5Q2FsbCgKICAgICAgICAgIHBvcCgpLCBtZXRob2ROYW1lLCBbXSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogICAgICBwdXNoU3RhdGVtZW50KAogICAgICAgICAgbmV3IGpzLlJldHVybihjYWxsKS53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQogICAgY3VycmVudENvbnRhaW5lciA9IG9sZENvbnRhaW5lcjsKICAgIGJvZHkgPSB1bndyYXBTdGF0ZW1lbnQoYm9keSk7CiAgICBwdXNoU3RhdGVtZW50KG5ldyBqcy5JZi5ub0Vsc2UodGVzdCwgYm9keSkKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIGpzLkV4cHJlc3Npb24gX2dlbmVyYXRlUmVjZWl2ZXJPckFyZ3VtZW50VHlwZVRlc3QoSFByaW1pdGl2ZUNoZWNrIG5vZGUpIHsKICAgIERhcnRUeXBlIHR5cGUgPSBub2RlLnR5cGVFeHByZXNzaW9uOwogICAgSEluc3RydWN0aW9uIGlucHV0ID0gbm9kZS5jaGVja2VkSW5wdXQ7CiAgICBBYnN0cmFjdFZhbHVlIGNoZWNrZWRUeXBlID0gbm9kZS5jaGVja2VkVHlwZTsKICAgIC8vIFRoaXMgcGF0aCBpcyBubyBsb25nZXIgdXNlZCBmb3IgaW5kZXhhYmxlIHByaW1pdGl2ZSB0eXBlcy4KICAgIGFzc2VydChfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0pzSW5kZXhhYmxlKGNoZWNrZWRUeXBlKS5pc1BvdGVudGlhbGx5RmFsc2UpOwogICAgLy8gRmlndXJlIG91dCBpZiBpdCBpcyBiZW5lZmljaWFsIHRvIHVzZSBhIG51bGwgY2hlY2suICBWOCBnZW5lcmFsbHkgcHJlZmVycwogICAgLy8gJ3R5cGVvZicgY2hlY2tzLCBidXQgZm9yIGludGVnZXJzIHdlIGNhbm5vdCBjb21waWxlIHRoaXMgdGVzdCBpbnRvIGEKICAgIC8vIHNpbmdsZSB0eXBlb2YgY2hlY2sgc28gdGhlIG51bGwgY2hlY2sgaXMgY2hlYXBlci4KICAgIGlmICh0eXBlID09IF9jb21tb25FbGVtZW50cy5udW1UeXBlKSB7CiAgICAgIC8vIGlucHV0IGlzICFudW0KICAgICAgY2hlY2tOdW0oaW5wdXQsICchPT0nLCBpbnB1dC5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIHJldHVybiBwb3AoKTsKICAgIH0KICAgIGlmICh0eXBlID09IF9jb21tb25FbGVtZW50cy5ib29sVHlwZSkgewogICAgICAvLyBpbnB1dCBpcyAhYm9vbAogICAgICBjaGVja0Jvb2woaW5wdXQsICchPT0nLCBpbnB1dC5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIHJldHVybiBwb3AoKTsKICAgIH0KICAgIHRocm93IGZhaWxlZEF0KGlucHV0LCAnVW5leHBlY3RlZCBjaGVjazogJHR5cGUuJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Qm9vbENvbnZlcnNpb24oSEJvb2xDb252ZXJzaW9uIG5vZGUpIHsKICAgIF9yZWdpc3RyeS5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UuaXNDaGVjayhfY29tbW9uRWxlbWVudHMuYm9vbFR5cGUpKTsKICAgIENoZWNrZWRNb2RlSGVscGVyIGhlbHBlciA9IGNvbnN0IENoZWNrZWRNb2RlSGVscGVyKCdib29sQ29udmVyc2lvbkNoZWNrJyk7CiAgICBTdGF0aWNVc2Ugc3RhdGljVXNlID0gaGVscGVyLmdldFN0YXRpY1VzZShfY29tbW9uRWxlbWVudHMpOwogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKHN0YXRpY1VzZSk7CiAgICB1c2Uobm9kZS5jaGVja2VkSW5wdXQpOwogICAgTGlzdDxqcy5FeHByZXNzaW9uPiBhcmd1bWVudHMgPSBbcG9wKCldOwogICAgcHVzaCgKICAgICAgICBuZXcganMuQ2FsbChfZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcyhzdGF0aWNVc2UuZWxlbWVudCksIGFyZ3VtZW50cykKICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZUtub3duKEhUeXBlS25vd24gbm9kZSkgewogICAgLy8gW0hUeXBlS25vd25dIGluc3RydWN0aW9ucyBhcmUgcmVtb3ZlZCBiZWZvcmUgZ2VuZXJhdGluZyBjb2RlLgogICAgYXNzZXJ0KGZhbHNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlSW5mb1JlYWRSYXcoSFR5cGVJbmZvUmVhZFJhdyBub2RlKSB7CiAgICB1c2Uobm9kZS5pbnB1dHNbMF0pOwogICAganMuRXhwcmVzc2lvbiByZWNlaXZlciA9IHBvcCgpOwogICAgcHVzaChqcy5qcyhyJyMuIycsIFtyZWNlaXZlciwgX25hbWVyLnJ0aUZpZWxkSnNOYW1lXSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVJbmZvUmVhZFZhcmlhYmxlKEhUeXBlSW5mb1JlYWRWYXJpYWJsZSBub2RlKSB7CiAgICBUeXBlVmFyaWFibGVFbnRpdHkgZWxlbWVudCA9IG5vZGUudmFyaWFibGUuZWxlbWVudDsKICAgIGludCBpbmRleCA9IGVsZW1lbnQuaW5kZXg7CgogICAganMuRXhwcmVzc2lvbiBpbnRlcmNlcHRvcjsKICAgIGlmIChub2RlLmlzSW50ZXJjZXB0ZWQpIHsKICAgICAgdXNlKG5vZGUuaW50ZXJjZXB0b3IpOwogICAgICBpbnRlcmNlcHRvciA9IHBvcCgpOwogICAgfQogICAgSEluc3RydWN0aW9uIG9iamVjdCA9IG5vZGUub2JqZWN0OwogICAgdXNlKG9iamVjdCk7CiAgICBqcy5FeHByZXNzaW9uIHJlY2VpdmVyID0gcG9wKCk7CgogICAgaWYgKHR5cGVWYXJpYWJsZUFjY2Vzc05lZWRzU3Vic3RpdHV0aW9uKGVsZW1lbnQsIG9iamVjdC5pbnN0cnVjdGlvblR5cGUpKSB7CiAgICAgIGpzLkV4cHJlc3Npb24gdHlwZU5hbWUgPQogICAgICAgICAganMucXVvdGVOYW1lKF9uYW1lci5ydW50aW1lVHlwZU5hbWUoZWxlbWVudC50eXBlRGVjbGFyYXRpb24pKTsKICAgICAgaWYgKG5vZGUuaXNJbnRlcmNlcHRlZCkgewogICAgICAgIEZ1bmN0aW9uRW50aXR5IGhlbHBlckVsZW1lbnQgPQogICAgICAgICAgICBfY29tbW9uRWxlbWVudHMuZ2V0UnVudGltZVR5cGVBcmd1bWVudEludGVyY2VwdGVkOwogICAgICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZSgKICAgICAgICAgICAgbmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoaGVscGVyRWxlbWVudCwgQ2FsbFN0cnVjdHVyZS5GT1VSX0FSR1MpKTsKICAgICAgICBqcy5FeHByZXNzaW9uIGhlbHBlciA9IF9lbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGhlbHBlckVsZW1lbnQpOwogICAgICAgIHB1c2goanMuanMocicjKCMsICMsICMsICMpJywgWwogICAgICAgICAgaGVscGVyLAogICAgICAgICAgaW50ZXJjZXB0b3IsCiAgICAgICAgICByZWNlaXZlciwKICAgICAgICAgIHR5cGVOYW1lLAogICAgICAgICAganMuanMubnVtYmVyKGluZGV4KQogICAgICAgIF0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgRnVuY3Rpb25FbnRpdHkgaGVscGVyRWxlbWVudCA9IF9jb21tb25FbGVtZW50cy5nZXRSdW50aW1lVHlwZUFyZ3VtZW50OwogICAgICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZSgKICAgICAgICAgICAgaGVscGVyRWxlbWVudCwgQ2FsbFN0cnVjdHVyZS5USFJFRV9BUkdTKSk7CiAgICAgICAganMuRXhwcmVzc2lvbiBoZWxwZXIgPSBfZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcyhoZWxwZXJFbGVtZW50KTsKICAgICAgICBwdXNoKGpzLmpzKHInIygjLCAjLCAjKScsIFsKICAgICAgICAgIGhlbHBlciwKICAgICAgICAgIHJlY2VpdmVyLAogICAgICAgICAgdHlwZU5hbWUsCiAgICAgICAgICBqcy5qcy5udW1iZXIoaW5kZXgpCiAgICAgICAgXSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgRnVuY3Rpb25FbnRpdHkgaGVscGVyRWxlbWVudCA9IF9jb21tb25FbGVtZW50cy5nZXRUeXBlQXJndW1lbnRCeUluZGV4OwogICAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UoCiAgICAgICAgICBuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZShoZWxwZXJFbGVtZW50LCBDYWxsU3RydWN0dXJlLlRXT19BUkdTKSk7CiAgICAgIGpzLkV4cHJlc3Npb24gaGVscGVyID0gX2VtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MoaGVscGVyRWxlbWVudCk7CiAgICAgIHB1c2goanMuanMocicjKCMsICMpJywgWwogICAgICAgIGhlbHBlciwKICAgICAgICByZWNlaXZlciwKICAgICAgICBqcy5qcy5udW1iZXIoaW5kZXgpCiAgICAgIF0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZUluZm9FeHByZXNzaW9uKEhUeXBlSW5mb0V4cHJlc3Npb24gbm9kZSkgewogICAgRGFydFR5cGUgdHlwZSA9IG5vZGUuZGFydFR5cGU7CiAgICBpZiAobm9kZS5pc1R5cGVWYXJpYWJsZVJlcGxhY2VtZW50KSB7CiAgICAgIF9yZWdpc3RyeS5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UudHlwZUFyZ3VtZW50KHR5cGUpKTsKICAgIH0KCiAgICBMaXN0PGpzLkV4cHJlc3Npb24+IGFyZ3VtZW50cyA9IDxqcy5FeHByZXNzaW9uPltdOwogICAgZm9yIChISW5zdHJ1Y3Rpb24gaW5wdXQgaW4gbm9kZS5pbnB1dHMpIHsKICAgICAgdXNlKGlucHV0KTsKICAgICAgYXJndW1lbnRzLmFkZChwb3AoKSk7CiAgICB9CgogICAgc3dpdGNoIChub2RlLmtpbmQpIHsKICAgICAgY2FzZSBUeXBlSW5mb0V4cHJlc3Npb25LaW5kLkNPTVBMRVRFOgogICAgICAgIGludCBpbmRleCA9IDA7CiAgICAgICAganMuRXhwcmVzc2lvbiByZXN1bHQgPSBfcnRpRW5jb2Rlci5nZXRUeXBlUmVwcmVzZW50YXRpb24oCiAgICAgICAgICAgIF9lbWl0dGVyLCB0eXBlLCAoVHlwZVZhcmlhYmxlVHlwZSB2YXJpYWJsZSkgPT4gYXJndW1lbnRzW2luZGV4KytdKTsKICAgICAgICBhc3NlcnQoCiAgICAgICAgICAgIGluZGV4ID09IG5vZGUuaW5wdXRzLmxlbmd0aCwKICAgICAgICAgICAgIk5vdCBhbGwgaW5wdXQgaXMgcmVhZCBmb3IgdHlwZSAke3R5cGV9OiAiCiAgICAgICAgICAgICIkaW5kZXggb2YgJHtub2RlLmlucHV0c30uIik7CiAgICAgICAgcHVzaChyZXN1bHQpOwogICAgICAgIHJldHVybjsKCiAgICAgIGNhc2UgVHlwZUluZm9FeHByZXNzaW9uS2luZC5JTlNUQU5DRToKICAgICAgICAvLyBXZSBleHBlY3Qgb25seSBmbGF0IHR5cGVzIGZvciB0aGUgSU5TVEFOQ0UgcmVwcmVzZW50YXRpb24uCiAgICAgICAgYXNzZXJ0KAogICAgICAgICAgICAodHlwZSBhcyBJbnRlcmZhY2VUeXBlKS50eXBlQXJndW1lbnRzLmxlbmd0aCA9PSBhcmd1bWVudHMubGVuZ3RoKTsKICAgICAgICBfcmVnaXN0cnkKICAgICAgICAgICAgLy8gaWdub3JlOmRlcHJlY2F0ZWRfbWVtYmVyX3VzZV9mcm9tX3NhbWVfcGFja2FnZQogICAgICAgICAgICAucmVnaXN0ZXJJbnN0YW50aWF0ZWRDbGFzcyhfY29tbW9uRWxlbWVudHMubGlzdENsYXNzKTsKICAgICAgICBwdXNoKG5ldyBqcy5BcnJheUluaXRpYWxpemVyKGFyZ3VtZW50cykKICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9CiAgfQoKICBib29sIHR5cGVWYXJpYWJsZUFjY2Vzc05lZWRzU3Vic3RpdHV0aW9uKAogICAgICBUeXBlVmFyaWFibGVFbnRpdHkgZWxlbWVudCwgQWJzdHJhY3RWYWx1ZSByZWNlaXZlck1hc2spIHsKICAgIENsYXNzRW50aXR5IGNscyA9IGVsZW1lbnQudHlwZURlY2xhcmF0aW9uOwoKICAgIC8vIFNlZSBpZiB0aGUgcmVjZWl2ZXIgdHlwZSBuYXJyb3dzIHRoZSBzZXQgb2YgY2xhc3NlcyB0byBvbmVzIHRoYXQgY2FuIGJlCiAgICAvLyBpbmRleGVkLgogICAgLy8gVE9ETyhzcmEpOiBDdXJyZW50bHkgdGhlIG9ubHkgY29udmVuaWVudCBxdWVyeSBpcyBbc2luZ2xlQ2xhc3NdLiBXZQogICAgLy8gc2hvdWxkIGl0ZXJhdGUgb3ZlciBhbGwgdGhlIGNvbmNyZXRlIGNsYXNzZXMgaW4gW3JlY2VpdmVyTWFza10uCiAgICBDbGFzc0VudGl0eSByZWNlaXZlckNsYXNzID0KICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRFeGFjdENsYXNzKHJlY2VpdmVyTWFzayk7CiAgICBpZiAocmVjZWl2ZXJDbGFzcyAhPSBudWxsKSB7CiAgICAgIGlmIChfcnRpU3Vic3RpdHV0aW9ucy5pc1RyaXZpYWxTdWJzdGl0dXRpb24ocmVjZWl2ZXJDbGFzcywgY2xzKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQoKICAgIGlmIChfY2xvc2VkV29ybGQuaXNVc2VkQXNNaXhpbihjbHMpKSByZXR1cm4gdHJ1ZTsKCiAgICByZXR1cm4gX2Nsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmFueVN0cmljdFN1YmNsYXNzT2YoY2xzLAogICAgICAgIChDbGFzc0VudGl0eSBzdWJjbGFzcykgewogICAgICByZXR1cm4gIV9ydGlTdWJzdGl0dXRpb25zLmlzVHJpdmlhbFN1YnN0aXR1dGlvbihzdWJjbGFzcywgY2xzKTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFJlZihIUmVmIG5vZGUpIHsKICAgIHZpc2l0KG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRJc1Rlc3QoSElzVGVzdCBub2RlKSB7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLmlzQ2hlY2sobm9kZS5kYXJ0VHlwZSkpOwoKICAgIHVzZShub2RlLnR5cGVJbnB1dCk7CiAgICBqcy5FeHByZXNzaW9uIGZpcnN0ID0gcG9wKCk7CiAgICB1c2Uobm9kZS5jaGVja2VkSW5wdXQpOwogICAganMuRXhwcmVzc2lvbiBzZWNvbmQgPSBwb3AoKTsKCiAgICBGaWVsZEVudGl0eSBmaWVsZCA9IF9jb21tb25FbGVtZW50cy5ydGlJc0ZpZWxkOwogICAganMuTmFtZSBuYW1lID0gX25hbWVyLmluc3RhbmNlRmllbGRQcm9wZXJ0eU5hbWUoZmllbGQpOwoKICAgIHB1c2goanMuanMoJyMuIygjKScsIFtmaXJzdCwgbmFtZSwgc2Vjb25kXSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKAogICAgICAgIG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0QXNDaGVjayhIQXNDaGVjayBub2RlKSB7CiAgICB1c2Uobm9kZS50eXBlSW5wdXQpOwogICAganMuRXhwcmVzc2lvbiBmaXJzdCA9IHBvcCgpOwogICAgdXNlKG5vZGUuY2hlY2tlZElucHV0KTsKICAgIGpzLkV4cHJlc3Npb24gc2Vjb25kID0gcG9wKCk7CgogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyVHlwZVVzZShUeXBlVXNlLmlzQ2hlY2sobm9kZS5jaGVja2VkVHlwZUV4cHJlc3Npb24pKTsKCiAgICBGaWVsZEVudGl0eSBmaWVsZCA9IG5vZGUuaXNUeXBlRXJyb3IKICAgICAgICA/IF9jb21tb25FbGVtZW50cy5ydGlDaGVja0ZpZWxkCiAgICAgICAgOiBfY29tbW9uRWxlbWVudHMucnRpQXNGaWVsZDsKICAgIGpzLk5hbWUgbmFtZSA9IF9uYW1lci5pbnN0YW5jZUZpZWxkUHJvcGVydHlOYW1lKGZpZWxkKTsKCiAgICBwdXNoKGpzLmpzKCcjLiMoIyknLCBbZmlyc3QsIG5hbWUsIHNlY29uZF0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbigKICAgICAgICBub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEFzQ2hlY2tTaW1wbGUoSEFzQ2hlY2tTaW1wbGUgbm9kZSkgewogICAgdXNlKG5vZGUuY2hlY2tlZElucHV0KTsKICAgIE1lbWJlckVudGl0eSBtZXRob2QgPSBub2RlLm1ldGhvZDsKICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZSgKICAgICAgICBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKG1ldGhvZCwgQ2FsbFN0cnVjdHVyZS5PTkVfQVJHKSk7CiAgICBqcy5FeHByZXNzaW9uIG1ldGhvZEFjY2VzcyA9IF9lbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKG1ldGhvZCk7CiAgICBwdXNoKGpzLmpzKHInIygjKScsIFttZXRob2RBY2Nlc3MsIHBvcCgpXSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKAogICAgICAgIG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0U3VidHlwZUNoZWNrKEhTdWJ0eXBlQ2hlY2sgbm9kZSkgewogICAgdGhyb3cgVW5pbXBsZW1lbnRlZEVycm9yKCdTc2FDb2RlR2VuZXJhdG9yLnZpc2l0U3VidHlwZUNoZWNrICAkbm9kZScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRMb2FkVHlwZShITG9hZFR5cGUgbm9kZSkgewogICAgRnVuY3Rpb25FbnRpdHkgaGVscGVyRWxlbWVudCA9IF9jb21tb25FbGVtZW50cy5maW5kVHlwZTsKICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZSgKICAgICAgICBuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZShoZWxwZXJFbGVtZW50LCBDYWxsU3RydWN0dXJlLk9ORV9BUkcpKTsKICAgIGpzLkV4cHJlc3Npb24gcmVjaXBlID0gX3J0aVJlY2lwZUVuY29kZXIuZW5jb2RlR3JvdW5kUmVjaXBlKAogICAgICAgIF9lbWl0dGVyLCBUeXBlRXhwcmVzc2lvblJlY2lwZShub2RlLnR5cGVFeHByZXNzaW9uKSk7CiAgICBqcy5FeHByZXNzaW9uIGhlbHBlciA9IF9lbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGhlbHBlckVsZW1lbnQpOwogICAgcHVzaChqcy5qcyhyJyMoIyknLCBbaGVscGVyLCByZWNpcGVdKS53aXRoU291cmNlSW5mb3JtYXRpb24oCiAgICAgICAgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRJbnN0YW5jZUVudmlyb25tZW50KEhJbnN0YW5jZUVudmlyb25tZW50IG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiBpbnB1dCA9IG5vZGUuaW5wdXRzLnNpbmdsZTsKICAgIHVzZShpbnB1dCk7CiAgICBqcy5FeHByZXNzaW9uIHJlY2VpdmVyID0gcG9wKCk7CgogICAgdm9pZCB1c2VSdGlGaWVsZCgpIHsKICAgICAgcHVzaChqcy5qcyhyJyMuIycsIFtyZWNlaXZlciwgX25hbWVyLnJ0aUZpZWxkSnNOYW1lXSkpOwogICAgfQoKICAgIHZvaWQgdXNlSGVscGVyKEZ1bmN0aW9uRW50aXR5IGhlbHBlcikgewogICAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UoCiAgICAgICAgICBuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZShoZWxwZXIsIENhbGxTdHJ1Y3R1cmUuT05FX0FSRykpOwogICAgICBqcy5FeHByZXNzaW9uIGhlbHBlckFjY2VzcyA9IF9lbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGhlbHBlcik7CiAgICAgIHB1c2goanMuanMocicjKCMpJywgW2hlbHBlckFjY2VzcywgcmVjZWl2ZXJdKS53aXRoU291cmNlSW5mb3JtYXRpb24oCiAgICAgICAgICBub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9CgogICAgLy8gVHJ5IHRvIHVzZSB0aGUgJ3J0aScgZmllbGQsIG9yIGEgc3BlY2lhbGl6YXRpb24gb2YgJ2luc3RhbmNlVHlwZScuCiAgICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyTWFzayA9IGlucHV0Lmluc3RydWN0aW9uVHlwZTsKCiAgICBBYnN0cmFjdEJvb2wgaXNBcnJheSA9IF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzSW5zdGFuY2VPZigKICAgICAgICByZWNlaXZlck1hc2ssIF9jb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3MpOwoKICAgIGlmIChpc0FycmF5LmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgdXNlSGVscGVyKF9jb21tb25FbGVtZW50cy5hcnJheUluc3RhbmNlVHlwZSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoaXNBcnJheS5pc0RlZmluaXRlbHlGYWxzZSkgewogICAgICAvLyBTZWUgaWYgdGhlIHJlY2VpdmVyIHR5cGUgbmFycm93cyB0aGUgc2V0IG9mIGNsYXNzZXMgdG8gb25lcyB0aGF0IGFsbAogICAgICAvLyBoYXZlIGEgc3RvcmVkIHR5cGUgZmllbGQuCiAgICAgIC8vIFRPRE8oc3JhKTogQ3VycmVudGx5IHRoZSBvbmx5IGNvbnZlbmllbnQgcXVlcnkgaXMgW2dldEV4YWN0Q2xhc3NdLiBXZQogICAgICAvLyBzaG91bGQgaGF2ZSBhIChjYWNoZWQpIHF1ZXJ5IHRvIGl0ZXJhdGUgb3ZlciBhbGwgdGhlIGNvbmNyZXRlIGNsYXNzZXMKICAgICAgLy8gaW4gW3JlY2VpdmVyTWFza10uCiAgICAgIC8vIFRPRE8oc3JhKTogU3RvcmUgdGhlIGNvbnRleHQgY2xhc3Mgb24gdGhlIEhJbnN0YW5jZUVudmlyb25tZW50LiBUaGlzCiAgICAgIC8vIHdvdWxkIGFsbG93IHRoZSBzdWJ0eXBlIGNsYXNzZXMgdG8gYmUgaXRlcmF0ZWQuCiAgICAgIENsYXNzRW50aXR5IHJlY2VpdmVyQ2xhc3MgPQogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZ2V0RXhhY3RDbGFzcyhyZWNlaXZlck1hc2spOwogICAgICBpZiAocmVjZWl2ZXJDbGFzcyAhPSBudWxsKSB7CiAgICAgICAgaWYgKF9jbG9zZWRXb3JsZC5ydGlOZWVkLmNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKHJlY2VpdmVyQ2xhc3MpKSB7CiAgICAgICAgICB1c2VSdGlGaWVsZCgpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gSWYgdGhlIHR5cGUgaXMgbm90IGludGVyY2VwdGVkIGFuZCBpcyBub3QgYSBjbG9zdXJlLCB1c2UgdGhlICdzaW1wbGUnCiAgICAgIC8vIGhlbHBlci4KICAgICAgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzSW50ZXJjZXB0b3IocmVjZWl2ZXJNYXNrKS5pc0RlZmluaXRlbHlGYWxzZSkgewogICAgICAgIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgICAgICAuaXNJbnN0YW5jZU9mKHJlY2VpdmVyTWFzaywgX2NvbW1vbkVsZW1lbnRzLmNsb3N1cmVDbGFzcykKICAgICAgICAgICAgLmlzRGVmaW5pdGVseUZhbHNlKSB7CiAgICAgICAgICB1c2VIZWxwZXIoX2NvbW1vbkVsZW1lbnRzLnNpbXBsZUluc3RhbmNlVHlwZSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgdXNlSGVscGVyKF9jb21tb25FbGVtZW50cy5pbnN0YW5jZVR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUeXBlRXZhbChIVHlwZUV2YWwgbm9kZSkgewogICAgLy8gQ2FsbCBgZW52Ll9ldmFsKCJyZWNpcGUiKWAuCiAgICB1c2Uobm9kZS5pbnB1dHNbMF0pOwogICAganMuRXhwcmVzc2lvbiBlbnZpcm9ubWVudCA9IHBvcCgpOwogICAgUmVjaXBlRW5jb2RpbmcgZW5jb2RpbmcgPSBfcnRpUmVjaXBlRW5jb2Rlci5lbmNvZGVSZWNpcGUoCiAgICAgICAgX2VtaXR0ZXIsIG5vZGUuZW52U3RydWN0dXJlLCBub2RlLnR5cGVFeHByZXNzaW9uKTsKICAgIGpzLkV4cHJlc3Npb24gcmVjaXBlID0gZW5jb2RpbmcucmVjaXBlOwoKICAgIGZvciAoVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGUgaW4gZW5jb2RpbmcudHlwZVZhcmlhYmxlcykgewogICAgICAvLyBUT0RPKGZpc2h5dGhlZmlzaCk6IENvbnN0cmFpbnQgdGhlIHR5cGUgdmFyaWFibGUgdG8gb25seSBiZSBlbWl0dGVkIG9uCiAgICAgIC8vIChzdWJ0eXBlcyBvZikgdGhlIGVudmlyb25tZW50IHR5cGUuCiAgICAgIF9yZWdpc3RyeS5yZWdpc3RlclR5cGVVc2UoVHlwZVVzZS5uYW1lZFR5cGVWYXJpYWJsZU5ld1J0aSh0eXBlVmFyaWFibGUpKTsKICAgIH0KCiAgICBNZW1iZXJFbnRpdHkgbWV0aG9kID0gX2NvbW1vbkVsZW1lbnRzLnJ0aUV2YWxNZXRob2Q7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IFNlbGVjdG9yLmZyb21FbGVtZW50KG1ldGhvZCk7CiAgICBqcy5OYW1lIG1ldGhvZExpdGVyYWwgPSBfbmFtZXIuaW52b2NhdGlvbk5hbWUoc2VsZWN0b3IpOwogICAgcHVzaChqcy5qcygnIy4jKCMpJywgWwogICAgICBlbnZpcm9ubWVudCwKICAgICAgbWV0aG9kTGl0ZXJhbCwKICAgICAgcmVjaXBlCiAgICBdKS53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwoKICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZSgKICAgICAgICBuZXcgU3RhdGljVXNlLmRpcmVjdEludm9rZShtZXRob2QsIHNlbGVjdG9yLmNhbGxTdHJ1Y3R1cmUsIG51bGwpKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0VHlwZUJpbmQoSFR5cGVCaW5kIG5vZGUpIHsKICAgIC8vIENhbGwgYGVudjEuX2JpbmQoZW52MilgLgogICAgYXNzZXJ0KG5vZGUuaW5wdXRzLmxlbmd0aCA9PSAyKTsKICAgIHVzZShub2RlLmlucHV0c1swXSk7CiAgICBqcy5FeHByZXNzaW9uIGVudmlyb25tZW50ID0gcG9wKCk7CiAgICB1c2Uobm9kZS5pbnB1dHNbMV0pOwogICAganMuRXhwcmVzc2lvbiBleHRlbnNpb25zID0gcG9wKCk7CgogICAgTWVtYmVyRW50aXR5IG1ldGhvZCA9IF9jb21tb25FbGVtZW50cy5ydGlCaW5kTWV0aG9kOwogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBTZWxlY3Rvci5mcm9tRWxlbWVudChtZXRob2QpOwogICAganMuTmFtZSBtZXRob2RMaXRlcmFsID0gX25hbWVyLmludm9jYXRpb25OYW1lKHNlbGVjdG9yKTsKICAgIHB1c2goanMuanMoJyMuIygjKScsIFsKICAgICAgZW52aXJvbm1lbnQsCiAgICAgIG1ldGhvZExpdGVyYWwsCiAgICAgIGV4dGVuc2lvbnMKICAgIF0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CgogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKAogICAgICAgIG5ldyBTdGF0aWNVc2UuZGlyZWN0SW52b2tlKG1ldGhvZCwgc2VsZWN0b3IuY2FsbFN0cnVjdHVyZSwgbnVsbCkpOwogIH0KfQqNwgBOTjwB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YXJ0wAImcy8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vY29kZWdlbi5kYXJ0JyBzaG93IENvZGVnZW5SZWdpc3RyeTsKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCcgc2hvdyBTZWxlY3RvcnM7CmltcG9ydCAnLi4vY29tbW9uL3Rhc2tzLmRhcnQnIHNob3cgTWVhc3VyZXIsIENvbXBpbGVyVGFzazsKaW1wb3J0ICcuLi9jb25zdGFudHMvY29uc3RhbnRfc3lzdGVtLmRhcnQnIGFzIGNvbnN0YW50X3N5c3RlbTsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IEpDb21tb25FbGVtZW50czsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9maWVsZF9hbmFseXNpcy5kYXJ0JwogICAgc2hvdyBGaWVsZEFuYWx5c2lzRGF0YSwgSkZpZWxkQW5hbHlzaXM7CmltcG9ydCAnLi4vanNfYmFja2VuZC9iYWNrZW5kLmRhcnQnIHNob3cgQ29kZWdlbklucHV0czsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hdGl2ZV9kYXRhLmRhcnQnIHNob3cgTmF0aXZlRGF0YTsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfY29kZWdlbi5kYXJ0JzsKaW1wb3J0ICcuLi9qc19tb2RlbC90eXBlX3JlY2lwZS5kYXJ0JyBzaG93IFR5cGVSZWNpcGU7CmltcG9ydCAnLi4vanNfYmFja2VuZC9zcGVjaWFsaXplZF9jaGVja3MuZGFydCc7CmltcG9ydCAnLi4vbmF0aXZlL2JlaGF2aW9yLmRhcnQnOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvcjsKaW1wb3J0ICcuLi91bml2ZXJzZS9zaWRlX2VmZmVjdHMuZGFydCcgc2hvdyBTaWRlRWZmZWN0czsKaW1wb3J0ICcuLi91bml2ZXJzZS91c2UuZGFydCcgc2hvdyBTdGF0aWNVc2U7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwppbXBvcnQgJ2ludGVyY2VwdG9yX3NpbXBsaWZpZXIuZGFydCc7CmltcG9ydCAnbG9nZ2luZy5kYXJ0JzsKaW1wb3J0ICdub2Rlcy5kYXJ0JzsKaW1wb3J0ICd0eXBlcy5kYXJ0JzsKaW1wb3J0ICd0eXBlc19wcm9wYWdhdGlvbi5kYXJ0JzsKaW1wb3J0ICd2YWx1ZV9yYW5nZV9hbmFseXplci5kYXJ0JzsKaW1wb3J0ICd2YWx1ZV9zZXQuZGFydCc7CgphYnN0cmFjdCBjbGFzcyBPcHRpbWl6YXRpb25QaGFzZSB7CiAgU3RyaW5nIGdldCBuYW1lOwogIHZvaWQgdmlzaXRHcmFwaChIR3JhcGggZ3JhcGgpOwp9CgpjbGFzcyBTc2FPcHRpbWl6ZXJUYXNrIGV4dGVuZHMgQ29tcGlsZXJUYXNrIHsKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CgogIE1hcDxISW5zdHJ1Y3Rpb24sIFJhbmdlPiByYW5nZXMgPSA8SEluc3RydWN0aW9uLCBSYW5nZT57fTsKCiAgTWFwPE1lbWJlckVudGl0eSwgT3B0aW1pemF0aW9uVGVzdExvZz4gbG9nZ2Vyc0ZvclRlc3Rpbmc7CgogIFNzYU9wdGltaXplclRhc2soTWVhc3VyZXIgbWVhc3VyZXIsIHRoaXMuX29wdGlvbnMpIDogc3VwZXIobWVhc3VyZXIpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gJ1NTQSBvcHRpbWl6ZXInOwoKICB2b2lkIG9wdGltaXplKAogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyLAogICAgICBIR3JhcGggZ3JhcGgsCiAgICAgIENvZGVnZW5JbnB1dHMgY29kZWdlbiwKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLAogICAgICBDb2RlZ2VuUmVnaXN0cnkgcmVnaXN0cnkpIHsKICAgIHZvaWQgcnVuUGhhc2UoT3B0aW1pemF0aW9uUGhhc2UgcGhhc2UpIHsKICAgICAgbWVhc3VyZVN1YnRhc2socGhhc2UubmFtZSwgKCkgPT4gcGhhc2UudmlzaXRHcmFwaChncmFwaCkpOwogICAgICBjb2RlZ2VuLnRyYWNlci50cmFjZUdyYXBoKHBoYXNlLm5hbWUsIGdyYXBoKTsKICAgICAgYXNzZXJ0KGdyYXBoLmlzVmFsaWQoKSwgJ0dyYXBoIG5vdCB2YWxpZCBhZnRlciAke3BoYXNlLm5hbWV9Jyk7CiAgICB9CgogICAgYm9vbCB0cnVzdFByaW1pdGl2ZXMgPSBfb3B0aW9ucy50cnVzdFByaW1pdGl2ZXM7CiAgICBTZXQ8SEluc3RydWN0aW9uPiBib3VuZHNDaGVja2VkID0gbmV3IFNldDxISW5zdHJ1Y3Rpb24+KCk7CiAgICBTc2FDb2RlTW90aW9uIGNvZGVNb3Rpb247CiAgICBTc2FMb2FkRWxpbWluYXRpb24gbG9hZEVsaW1pbmF0aW9uOwoKICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nOwogICAgaWYgKHJldGFpbkRhdGFGb3JUZXN0aW5nKSB7CiAgICAgIGxvZ2dlcnNGb3JUZXN0aW5nID8/PSB7fTsKICAgICAgbG9nZ2Vyc0ZvclRlc3RpbmdbbWVtYmVyXSA9IGxvZyA9IG5ldyBPcHRpbWl6YXRpb25UZXN0TG9nKCk7CiAgICB9CgogICAgbWVhc3VyZSgoKSB7CiAgICAgIExpc3Q8T3B0aW1pemF0aW9uUGhhc2U+IHBoYXNlcyA9IDxPcHRpbWl6YXRpb25QaGFzZT5bCiAgICAgICAgLy8gUnVuIHRyaXZpYWwgaW5zdHJ1Y3Rpb24gc2ltcGxpZmljYXRpb24gZmlyc3QgdG8gb3B0aW1pemUKICAgICAgICAvLyBzb21lIHBhdHRlcm5zIHVzZWZ1bCBmb3IgdHlwZSBjb252ZXJzaW9uLgogICAgICAgIG5ldyBTc2FJbnN0cnVjdGlvblNpbXBsaWZpZXIoZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cywgX29wdGlvbnMsCiAgICAgICAgICAgIGNvZGVnZW4ucnRpU3Vic3RpdHV0aW9ucywgY2xvc2VkV29ybGQsIHJlZ2lzdHJ5LCBsb2cpLAogICAgICAgIG5ldyBTc2FUeXBlQ29udmVyc2lvbkluc2VydGVyKGNsb3NlZFdvcmxkKSwKICAgICAgICBuZXcgU3NhUmVkdW5kYW50UGhpRWxpbWluYXRvcigpLAogICAgICAgIG5ldyBTc2FEZWFkUGhpRWxpbWluYXRvcigpLAogICAgICAgIG5ldyBTc2FUeXBlUHJvcGFnYXRvcihnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLAogICAgICAgICAgICBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cywgY2xvc2VkV29ybGQsIGxvZyksCiAgICAgICAgLy8gQWZ0ZXIgdHlwZSBwcm9wYWdhdGlvbiwgbW9yZSBpbnN0cnVjdGlvbnMgY2FuIGJlCiAgICAgICAgLy8gc2ltcGxpZmllZC4KICAgICAgICBuZXcgU3NhSW5zdHJ1Y3Rpb25TaW1wbGlmaWVyKGdsb2JhbEluZmVyZW5jZVJlc3VsdHMsIF9vcHRpb25zLAogICAgICAgICAgICBjb2RlZ2VuLnJ0aVN1YnN0aXR1dGlvbnMsIGNsb3NlZFdvcmxkLCByZWdpc3RyeSwgbG9nKSwKICAgICAgICBuZXcgU3NhQ2hlY2tJbnNlcnRlcih0cnVzdFByaW1pdGl2ZXMsIGNsb3NlZFdvcmxkLCBib3VuZHNDaGVja2VkKSwKICAgICAgICBuZXcgU3NhSW5zdHJ1Y3Rpb25TaW1wbGlmaWVyKGdsb2JhbEluZmVyZW5jZVJlc3VsdHMsIF9vcHRpb25zLAogICAgICAgICAgICBjb2RlZ2VuLnJ0aVN1YnN0aXR1dGlvbnMsIGNsb3NlZFdvcmxkLCByZWdpc3RyeSwgbG9nKSwKICAgICAgICBuZXcgU3NhQ2hlY2tJbnNlcnRlcih0cnVzdFByaW1pdGl2ZXMsIGNsb3NlZFdvcmxkLCBib3VuZHNDaGVja2VkKSwKICAgICAgICBuZXcgU3NhVHlwZVByb3BhZ2F0b3IoZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cywKICAgICAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMsIGNsb3NlZFdvcmxkLCBsb2cpLAogICAgICAgIC8vIFJ1biBhIGRlYWQgY29kZSBlbGltaW5hdG9yIGJlZm9yZSBMSUNNIGJlY2F1c2UgZGVhZAogICAgICAgIC8vIGludGVyY2VwdG9ycyBhcmUgb2Z0ZW4gaW4gdGhlIHdheSBvZiBMSUNNJ2FibGUgaW5zdHJ1Y3Rpb25zLgogICAgICAgIG5ldyBTc2FEZWFkQ29kZUVsaW1pbmF0b3IoY2xvc2VkV29ybGQsIHRoaXMpLAogICAgICAgIG5ldyBTc2FHbG9iYWxWYWx1ZU51bWJlcmVyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLAogICAgICAgIC8vIEFmdGVyIEdWTiwgc29tZSBpbnN0cnVjdGlvbnMgbWlnaHQgbmVlZCB0aGVpciB0eXBlIHRvIGJlCiAgICAgICAgLy8gdXBkYXRlZCBiZWNhdXNlIHRoZXkgbm93IGhhdmUgZGlmZmVyZW50IGlucHV0cy4KICAgICAgICBuZXcgU3NhVHlwZVByb3BhZ2F0b3IoZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cywKICAgICAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMsIGNsb3NlZFdvcmxkLCBsb2cpLAogICAgICAgIGNvZGVNb3Rpb24gPSBuZXcgU3NhQ29kZU1vdGlvbihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKSwKICAgICAgICBsb2FkRWxpbWluYXRpb24gPSBuZXcgU3NhTG9hZEVsaW1pbmF0aW9uKGNsb3NlZFdvcmxkKSwKICAgICAgICBuZXcgU3NhUmVkdW5kYW50UGhpRWxpbWluYXRvcigpLAogICAgICAgIG5ldyBTc2FEZWFkUGhpRWxpbWluYXRvcigpLAogICAgICAgIC8vIEFmdGVyIEdWTiBhbmQgbG9hZCBlbGltaW5hdGlvbiB0aGUgc2FtZSB2YWx1ZSBtYXkgYmUgdXNlZCBpbiBjb2RlCiAgICAgICAgLy8gY29udHJvbGxlZCBieSBhIHRlc3Qgb24gdGhlIHZhbHVlLCBzbyByZWRvICdjb252ZXJzaW9uIGluc2VydGlvbicgdG8KICAgICAgICAvLyBsZWFybiBmcm9tIHRoZSByZWZpbmVkIHR5cGUuCiAgICAgICAgbmV3IFNzYVR5cGVDb252ZXJzaW9uSW5zZXJ0ZXIoY2xvc2VkV29ybGQpLAogICAgICAgIG5ldyBTc2FUeXBlUHJvcGFnYXRvcihnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLAogICAgICAgICAgICBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cywgY2xvc2VkV29ybGQsIGxvZyksCiAgICAgICAgbmV3IFNzYVZhbHVlUmFuZ2VBbmFseXplcihjbG9zZWRXb3JsZCwgdGhpcyksCiAgICAgICAgLy8gUHJldmlvdXMgb3B0aW1pemF0aW9ucyBtYXkgaGF2ZSBnZW5lcmF0ZWQgbmV3CiAgICAgICAgLy8gb3Bwb3J0dW5pdGllcyBmb3IgaW5zdHJ1Y3Rpb24gc2ltcGxpZmljYXRpb24uCiAgICAgICAgbmV3IFNzYUluc3RydWN0aW9uU2ltcGxpZmllcihnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLCBfb3B0aW9ucywKICAgICAgICAgICAgY29kZWdlbi5ydGlTdWJzdGl0dXRpb25zLCBjbG9zZWRXb3JsZCwgcmVnaXN0cnksIGxvZyksCiAgICAgICAgbmV3IFNzYUNoZWNrSW5zZXJ0ZXIodHJ1c3RQcmltaXRpdmVzLCBjbG9zZWRXb3JsZCwgYm91bmRzQ2hlY2tlZCksCiAgICAgIF07CiAgICAgIHBoYXNlcy5mb3JFYWNoKHJ1blBoYXNlKTsKCiAgICAgIC8vIFNpbXBsaWZ5aW5nIGludGVyY2VwdG9ycyBpcyBub3Qgc3RyaWN0bHkganVzdCBhbiBvcHRpbWl6YXRpb24sIGl0IGlzCiAgICAgIC8vIHJlcXVpcmVkIGZvciBpbXBsZW1lbnRhdGlvbiBjb3JyZWN0bmVzcyBiZWNhdXNlIHRoZSBjb2RlIGdlbmVyYXRvcgogICAgICAvLyBhc3N1bWVzIGl0IGlzIGFsd2F5cyBwZXJmb3JtZWQuCiAgICAgIHJ1blBoYXNlKG5ldyBTc2FTaW1wbGlmeUludGVyY2VwdG9ycyhjbG9zZWRXb3JsZCwgbWVtYmVyLmVuY2xvc2luZ0NsYXNzKSk7CgogICAgICBTc2FEZWFkQ29kZUVsaW1pbmF0b3IgZGNlID0gbmV3IFNzYURlYWRDb2RlRWxpbWluYXRvcihjbG9zZWRXb3JsZCwgdGhpcyk7CiAgICAgIHJ1blBoYXNlKGRjZSk7CiAgICAgIGlmIChjb2RlTW90aW9uLm1vdmVkQ29kZSB8fAogICAgICAgICAgZGNlLmVsaW1pbmF0ZWRTaWRlRWZmZWN0cyB8fAogICAgICAgICAgbG9hZEVsaW1pbmF0aW9uLm5ld0d2bkNhbmRpZGF0ZXMpIHsKICAgICAgICBwaGFzZXMgPSA8T3B0aW1pemF0aW9uUGhhc2U+WwogICAgICAgICAgbmV3IFNzYVR5cGVQcm9wYWdhdG9yKGdsb2JhbEluZmVyZW5jZVJlc3VsdHMsCiAgICAgICAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMsIGNsb3NlZFdvcmxkLCBsb2cpLAogICAgICAgICAgbmV3IFNzYUdsb2JhbFZhbHVlTnVtYmVyZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbiksCiAgICAgICAgICBuZXcgU3NhQ29kZU1vdGlvbihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKSwKICAgICAgICAgIG5ldyBTc2FWYWx1ZVJhbmdlQW5hbHl6ZXIoY2xvc2VkV29ybGQsIHRoaXMpLAogICAgICAgICAgbmV3IFNzYUluc3RydWN0aW9uU2ltcGxpZmllcihnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLCBfb3B0aW9ucywKICAgICAgICAgICAgICBjb2RlZ2VuLnJ0aVN1YnN0aXR1dGlvbnMsIGNsb3NlZFdvcmxkLCByZWdpc3RyeSwgbG9nKSwKICAgICAgICAgIG5ldyBTc2FDaGVja0luc2VydGVyKHRydXN0UHJpbWl0aXZlcywgY2xvc2VkV29ybGQsIGJvdW5kc0NoZWNrZWQpLAogICAgICAgICAgbmV3IFNzYVNpbXBsaWZ5SW50ZXJjZXB0b3JzKGNsb3NlZFdvcmxkLCBtZW1iZXIuZW5jbG9zaW5nQ2xhc3MpLAogICAgICAgICAgbmV3IFNzYURlYWRDb2RlRWxpbWluYXRvcihjbG9zZWRXb3JsZCwgdGhpcyksCiAgICAgICAgXTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwaGFzZXMgPSA8T3B0aW1pemF0aW9uUGhhc2U+WwogICAgICAgICAgbmV3IFNzYVR5cGVQcm9wYWdhdG9yKGdsb2JhbEluZmVyZW5jZVJlc3VsdHMsCiAgICAgICAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMsIGNsb3NlZFdvcmxkLCBsb2cpLAogICAgICAgICAgLy8gUnVuIHRoZSBzaW1wbGlmaWVyIHRvIHJlbW92ZSB1bm5lZWRlZCB0eXBlIGNoZWNrcyBpbnNlcnRlZCBieQogICAgICAgICAgLy8gdHlwZSBwcm9wYWdhdGlvbi4KICAgICAgICAgIG5ldyBTc2FJbnN0cnVjdGlvblNpbXBsaWZpZXIoZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cywgX29wdGlvbnMsCiAgICAgICAgICAgICAgY29kZWdlbi5ydGlTdWJzdGl0dXRpb25zLCBjbG9zZWRXb3JsZCwgcmVnaXN0cnksIGxvZyksCiAgICAgICAgXTsKICAgICAgfQogICAgICBwaGFzZXMuZm9yRWFjaChydW5QaGFzZSk7CiAgICB9KTsKICB9Cn0KCi8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbbWFza10gcmVwcmVzZW50cyBvbmx5IHR5cGVzIHRoYXQgaGF2ZSBhIGxlbmd0aCB0aGF0Ci8vLyBjYW5ub3QgY2hhbmdlLiAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMgY29uc2VydmF0aXZlIGZvciB0aGUgcHVycG9zZQovLy8gb2YgaWRlbnRpZnlpbmcgZ3ZuLWFibGUgbGVuZ3RocyBhbmQgbWlzLWlkZW50aWZpZXMgc29tZSB1bmlvbnMgb2YgZml4ZWQKLy8vIGxlbmd0aCBpbmRleGFibGVzIChzZWUgVE9ETykgYXMgbm90IGZpeGVkIGxlbmd0aC4KYm9vbCBpc0ZpeGVkTGVuZ3RoKEFic3RyYWN0VmFsdWUgbWFzaywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluID0gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKICBpZiAoYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0NvbnRhaW5lcihtYXNrKSAmJgogICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmdldENvbnRhaW5lckxlbmd0aChtYXNrKSAhPSBudWxsKSB7CiAgICAvLyBBIGNvbnRhaW5lciBvbiB3aGljaCB3ZSBoYXZlIGluZmVycmVkIHRoZSBsZW5ndGguCiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgLy8gVE9ETyhzcmEpOiBSZWNvZ25pemUgYW55IGNvbWJpbmF0aW9uIG9mIGZpeGVkIGxlbmd0aCBpbmRleGFibGVzLgogIGlmIChhYnN0cmFjdFZhbHVlRG9tYWluLmlzRml4ZWRBcnJheShtYXNrKS5pc0RlZmluaXRlbHlUcnVlIHx8CiAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uaXNTdHJpbmdPck51bGwobWFzaykuaXNEZWZpbml0ZWx5VHJ1ZSB8fAogICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmlzVHlwZWRBcnJheShtYXNrKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgcmV0dXJuIGZhbHNlOwp9CgovLy8gSWYgYm90aCBpbnB1dHMgdG8ga25vd24gb3BlcmF0aW9ucyBhcmUgYXZhaWxhYmxlIGV4ZWN1dGUgdGhlIG9wZXJhdGlvbiBhdAovLy8gY29tcGlsZS10aW1lLgpjbGFzcyBTc2FJbnN0cnVjdGlvblNpbXBsaWZpZXIgZXh0ZW5kcyBIQmFzZVZpc2l0b3IKICAgIGltcGxlbWVudHMgT3B0aW1pemF0aW9uUGhhc2UgewogIC8vIFdlIGRvbid0IHByb2R1Y2UgY29uc3RhbnQtZm9sZGVkIHN0cmluZ3MgbG9uZ2VyIHRoYW4gdGhpcyB1bmxlc3MgdGhleSBoYXZlCiAgLy8gYSBzaW5nbGUgdXNlLiAgVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IGV4cG9uZW50aWFsbHkgbGFyZ2UgY29uc3RhbnQgZm9sZGVkCiAgLy8gc3RyaW5ncy4KICBzdGF0aWMgY29uc3QgTUFYX1NIQVJFRF9DT05TVEFOVF9GT0xERURfU1RSSU5HX0xFTkdUSCA9IDUxMjsKCiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAiU3NhSW5zdHJ1Y3Rpb25TaW1wbGlmaWVyIjsKICBmaW5hbCBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBfZ2xvYmFsSW5mZXJlbmNlUmVzdWx0czsKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CiAgZmluYWwgUnVudGltZVR5cGVzU3Vic3RpdHV0aW9ucyBfcnRpU3Vic3RpdHV0aW9uczsKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwogIGZpbmFsIENvZGVnZW5SZWdpc3RyeSBfcmVnaXN0cnk7CiAgZmluYWwgT3B0aW1pemF0aW9uVGVzdExvZyBfbG9nOwogIEhHcmFwaCBfZ3JhcGg7CgogIFNzYUluc3RydWN0aW9uU2ltcGxpZmllcih0aGlzLl9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzLCB0aGlzLl9vcHRpb25zLAogICAgICB0aGlzLl9ydGlTdWJzdGl0dXRpb25zLCB0aGlzLl9jbG9zZWRXb3JsZCwgdGhpcy5fcmVnaXN0cnksIHRoaXMuX2xvZyk7CgogIEpDb21tb25FbGVtZW50cyBnZXQgY29tbW9uRWxlbWVudHMgPT4gX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzOwoKICBBYnN0cmFjdFZhbHVlRG9tYWluIGdldCBfYWJzdHJhY3RWYWx1ZURvbWFpbiA9PgogICAgICBfY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKCiAgTmF0aXZlRGF0YSBnZXQgX25hdGl2ZURhdGEgPT4gX2Nsb3NlZFdvcmxkLm5hdGl2ZURhdGE7CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRHcmFwaChIR3JhcGggdmlzaXRlZSkgewogICAgX2dyYXBoID0gdmlzaXRlZTsKICAgIHZpc2l0RG9taW5hdG9yVHJlZSh2aXNpdGVlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0QmFzaWNCbG9jayhIQmFzaWNCbG9jayBibG9jaykgewogICAgc2ltcGxpZnlQaGlzKGJsb2NrKTsKICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IGJsb2NrLmZpcnN0OwogICAgd2hpbGUgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgSEluc3RydWN0aW9uIG5leHQgPSBpbnN0cnVjdGlvbi5uZXh0OwogICAgICBISW5zdHJ1Y3Rpb24gcmVwbGFjZW1lbnQgPSBpbnN0cnVjdGlvbi5hY2NlcHQodGhpcyk7CiAgICAgIGlmIChyZXBsYWNlbWVudCAhPSBpbnN0cnVjdGlvbikgewogICAgICAgIGJsb2NrLnJld3JpdGUoaW5zdHJ1Y3Rpb24sIHJlcGxhY2VtZW50KTsKCiAgICAgICAgLy8gVGhlIGludGVyc2VjdGlvbiBvZiBkb3VibGUgYW5kIGludCByZXR1cm4gY29uZmxpY3RpbmcsIGFuZAogICAgICAgIC8vIGJlY2F1c2Ugb2Ygb3VyIG51bWJlciBpbXBsZW1lbnRhdGlvbiBmb3IgSmF2YVNjcmlwdCwgaXQKICAgICAgICAvLyBtaWdodCBiZSB0aGF0IGFuIG9wZXJhdGlvbiB0aG91Z2h0IHRvIHJldHVybiBkb3VibGUsIGNhbiBiZQogICAgICAgIC8vIHNpbXBsaWZpZWQgdG8gYW4gaW50LiBGb3IgZXhhbXBsZToKICAgICAgICAvLyBgMi41ICogMTBgLgogICAgICAgIGlmICghKHJlcGxhY2VtZW50CiAgICAgICAgICAgICAgICAuaXNOdW1iZXJPck51bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgICAgICBpbnN0cnVjdGlvbgogICAgICAgICAgICAgICAgLmlzTnVtYmVyT3JOdWxsKF9hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpKSB7CiAgICAgICAgICAvLyBJZiB3ZSBjYW4gcmVwbGFjZSBbaW5zdHJ1Y3Rpb25dIHdpdGggW3JlcGxhY2VtZW50XSwgdGhlbgogICAgICAgICAgLy8gW3JlcGxhY2VtZW50XSdzIHR5cGUgY2FuIGJlIG5hcnJvd2VkLgogICAgICAgICAgQWJzdHJhY3RWYWx1ZSBuZXdUeXBlID0gX2Fic3RyYWN0VmFsdWVEb21haW4uaW50ZXJzZWN0aW9uKAogICAgICAgICAgICAgIHJlcGxhY2VtZW50Lmluc3RydWN0aW9uVHlwZSwgaW5zdHJ1Y3Rpb24uaW5zdHJ1Y3Rpb25UeXBlKTsKICAgICAgICAgIHJlcGxhY2VtZW50Lmluc3RydWN0aW9uVHlwZSA9IG5ld1R5cGU7CiAgICAgICAgfQoKICAgICAgICAvLyBJZiB0aGUgcmVwbGFjZW1lbnQgaW5zdHJ1Y3Rpb24gZG9lcyBub3Qga25vdyBpdHMKICAgICAgICAvLyBzb3VyY2UgZWxlbWVudCwgdXNlIHRoZSBzb3VyY2UgZWxlbWVudCBvZiB0aGUKICAgICAgICAvLyBpbnN0cnVjdGlvbi4KICAgICAgICByZXBsYWNlbWVudC5zb3VyY2VFbGVtZW50ID8/PSBpbnN0cnVjdGlvbi5zb3VyY2VFbGVtZW50OwogICAgICAgIHJlcGxhY2VtZW50LnNvdXJjZUluZm9ybWF0aW9uID8/PSBpbnN0cnVjdGlvbi5zb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgICBpZiAoIXJlcGxhY2VtZW50LmlzSW5CYXNpY0Jsb2NrKCkpIHsKICAgICAgICAgIC8vIFRoZSBjb25zdGFudCBmb2xkaW5nIGNhbiByZXR1cm4gYW4gaW5zdHJ1Y3Rpb24gdGhhdCBpcyBhbHJlYWR5CiAgICAgICAgICAvLyBwYXJ0IG9mIHRoZSBncmFwaCAobGlrZSBhbiBpbnB1dCksIHNvIHdlIG9ubHkgYWRkIHRoZSByZXBsYWNlbWVudAogICAgICAgICAgLy8gaWYgbmVjZXNzYXJ5LgogICAgICAgICAgYmxvY2suYWRkQWZ0ZXIoaW5zdHJ1Y3Rpb24sIHJlcGxhY2VtZW50KTsKICAgICAgICAgIC8vIFZpc2l0IHRoZSByZXBsYWNlbWVudCBhcyB0aGUgbmV4dCBpbnN0cnVjdGlvbiBpbiBjYXNlIGl0CiAgICAgICAgICAvLyBjYW4gYWxzbyBiZSBjb25zdGFudCBmb2xkZWQgYXdheS4KICAgICAgICAgIG5leHQgPSByZXBsYWNlbWVudDsKICAgICAgICB9CiAgICAgICAgYmxvY2sucmVtb3ZlKGluc3RydWN0aW9uKTsKICAgICAgfQogICAgICBpbnN0cnVjdGlvbiA9IG5leHQ7CiAgICB9CiAgfQoKICAvLyBTaW1wbGlmeSBzb21lIENGRyBkaWFtb25kcyB0byBlcXVpdmFsZW50IGV4cHJlc3Npb25zLgogIHNpbXBsaWZ5UGhpcyhIQmFzaWNCbG9jayBibG9jaykgewogICAgLy8gSXMgW2Jsb2NrXSB0aGUgam9pbiBwb2ludCBmb3IgYSBzaW1wbGUgZGlhbW9uZCB0aGF0IGdlbmVyYXRlcyBhIHNpbmdsZQogICAgLy8gcGhpIG5vZGU/CiAgICBpZiAoYmxvY2sucGhpcy5pc0VtcHR5KSByZXR1cm47CiAgICBIUGhpIHBoaSA9IGJsb2NrLnBoaXMuZmlyc3Q7CiAgICBpZiAocGhpLm5leHQgIT0gbnVsbCkgcmV0dXJuOwogICAgaWYgKGJsb2NrLnByZWRlY2Vzc29ycy5sZW5ndGggIT0gMikgcmV0dXJuOwogICAgYXNzZXJ0KHBoaS5pbnB1dHMubGVuZ3RoID09IDIpOwogICAgSEJhc2ljQmxvY2sgYjEgPSBibG9jay5wcmVkZWNlc3NvcnNbMF07CiAgICBIQmFzaWNCbG9jayBiMiA9IGJsb2NrLnByZWRlY2Vzc29yc1sxXTsKICAgIEhCYXNpY0Jsb2NrIGRvbWluYXRvciA9IGJsb2NrLmRvbWluYXRvcjsKICAgIGlmICghKGIxLmRvbWluYXRvciA9PSBkb21pbmF0b3IgJiYgYjIuZG9taW5hdG9yID09IGRvbWluYXRvcikpIHJldHVybjsKCiAgICAvLyBFeHRyYWN0IHRoZSBjb250cm9sbGluZyBjb25kaXRpb24uCiAgICBISW5zdHJ1Y3Rpb24gY29udHJvbEZsb3cgPSBkb21pbmF0b3IubGFzdDsKICAgIGlmIChjb250cm9sRmxvdyBpcyEgSElmKSByZXR1cm47CiAgICBISW5zdHJ1Y3Rpb24gdGVzdCA9IGNvbnRyb2xGbG93LmlucHV0cy5zaW5nbGU7CiAgICBpZiAodGVzdC51c2VkQnkubGVuZ3RoID4gMSkgcmV0dXJuOwoKICAgIGJvb2wgbmVnYXRlZCA9IGZhbHNlOwogICAgd2hpbGUgKHRlc3QgaXMgSE5vdCkgewogICAgICB0ZXN0ID0gdGVzdC5pbnB1dHMuc2luZ2xlOwogICAgICBpZiAodGVzdC51c2VkQnkubGVuZ3RoID4gMSkgcmV0dXJuOwogICAgICBuZWdhdGVkID0gIW5lZ2F0ZWQ7CiAgICB9CgogICAgaWYgKHRlc3QgaXMhIEhJZGVudGl0eSkgcmV0dXJuOwogICAgSEluc3RydWN0aW9uIHRlc3RlZDsKICAgIGlmICh0ZXN0LmlucHV0c1swXS5pc051bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgdGVzdGVkID0gdGVzdC5pbnB1dHNbMV07CiAgICB9IGVsc2UgaWYgKHRlc3QuaW5wdXRzWzFdLmlzTnVsbChfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICB0ZXN0ZWQgPSB0ZXN0LmlucHV0c1swXTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBISW5zdHJ1Y3Rpb24gd2hlbk51bGxWYWx1ZSA9IHBoaS5pbnB1dHNbbmVnYXRlZCA/IDEgOiAwXTsKICAgIEhJbnN0cnVjdGlvbiB3aGVuTm90TnVsbFZhbHVlID0gcGhpLmlucHV0c1tuZWdhdGVkID8gMCA6IDFdOwogICAgSEJhc2ljQmxvY2sgd2hlbk51bGxCbG9jayA9IGJsb2NrLnByZWRlY2Vzc29yc1tuZWdhdGVkID8gMSA6IDBdOwogICAgSEJhc2ljQmxvY2sgd2hlbk5vdE51bGxCbG9jayA9IGJsb2NrLnByZWRlY2Vzc29yc1tuZWdhdGVkID8gMCA6IDFdOwoKICAgIC8vIElmICd4JyBpcyBudWxsYWJsZSBib29sZWFuLAogICAgLy8KICAgIC8vICAgICB4ID09IG51bGwgPyBmYWxzZSA6IHggIC0tLT4gIHggPT0gdHJ1ZQogICAgLy8KICAgIC8vIFRoaXMgb2ZlbiBjb21lcyBmcm9tIHRoZSBkYXJ0IGNvZGUgYHggPz8gZmFsc2VgLgogICAgaWYgKF9zYW1lT3JSZWZpbmVtZW50T2YodGVzdGVkLCB3aGVuTm90TnVsbFZhbHVlKSAmJgogICAgICAgIF9pc0Jvb2xDb25zdGFudCh3aGVuTnVsbFZhbHVlLCBmYWxzZSkgJiYKICAgICAgICB3aGVuTm90TnVsbFZhbHVlCiAgICAgICAgICAgIC5pc0Jvb2xlYW5Pck51bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgX21vc3RseUVtcHR5KHdoZW5OdWxsQmxvY2spICYmCiAgICAgICAgX21vc3RseUVtcHR5KHdoZW5Ob3ROdWxsQmxvY2spKSB7CiAgICAgIEhJbnN0cnVjdGlvbiB0cnVlQ29uc3RhbnQgPSBfZ3JhcGguYWRkQ29uc3RhbnRCb29sKHRydWUsIF9jbG9zZWRXb3JsZCk7CiAgICAgIEhJbnN0cnVjdGlvbiByZXBsYWNlbWVudCA9IG5ldyBISWRlbnRpdHkoCiAgICAgICAgICB0ZXN0ZWQsIHRydWVDb25zdGFudCwgbnVsbCwgX2Fic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUpCiAgICAgICAgLi5zb3VyY2VFbGVtZW50ID0gcGhpLnNvdXJjZUVsZW1lbnQKICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gcGhpLnNvdXJjZUluZm9ybWF0aW9uOwogICAgICBibG9jay5yZXdyaXRlKHBoaSwgcmVwbGFjZW1lbnQpOwogICAgICBibG9jay5hZGRBdEVudHJ5KHJlcGxhY2VtZW50KTsKICAgICAgYmxvY2sucmVtb3ZlUGhpKHBoaSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIElmICd4J2lzIG51bGxhYmxlIGJvb2xlYW4sCiAgICAvLwogICAgLy8gICAgIHggPT0gbnVsbCA/IHRydWUgOiB4ICAtLS0+ICAhKHggPT0gZmFsc2UpCiAgICAvLwogICAgLy8gVGhpcyBvZmVuIGNvbWVzIGZyb20gdGhlIGRhcnQgY29kZSBgeCA/PyB0cnVlYC4KICAgIGlmIChfc2FtZU9yUmVmaW5lbWVudE9mKHRlc3RlZCwgd2hlbk5vdE51bGxWYWx1ZSkgJiYKICAgICAgICBfaXNCb29sQ29uc3RhbnQod2hlbk51bGxWYWx1ZSwgdHJ1ZSkgJiYKICAgICAgICB3aGVuTm90TnVsbFZhbHVlCiAgICAgICAgICAgIC5pc0Jvb2xlYW5Pck51bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgX21vc3RseUVtcHR5KHdoZW5OdWxsQmxvY2spICYmCiAgICAgICAgX21vc3RseUVtcHR5KHdoZW5Ob3ROdWxsQmxvY2spKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBmYWxzZUNvbnN0YW50ID0gX2dyYXBoLmFkZENvbnN0YW50Qm9vbChmYWxzZSwgX2Nsb3NlZFdvcmxkKTsKICAgICAgSEluc3RydWN0aW9uIGNvbXBhcmUgPSBuZXcgSElkZW50aXR5KAogICAgICAgICAgdGVzdGVkLCBmYWxzZUNvbnN0YW50LCBudWxsLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSk7CiAgICAgIGJsb2NrLmFkZEF0RW50cnkoY29tcGFyZSk7CiAgICAgIEhJbnN0cnVjdGlvbiByZXBsYWNlbWVudCA9CiAgICAgICAgICBuZXcgSE5vdChjb21wYXJlLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSkKICAgICAgICAgICAgLi5zb3VyY2VFbGVtZW50ID0gcGhpLnNvdXJjZUVsZW1lbnQKICAgICAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHBoaS5zb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgYmxvY2sucmV3cml0ZShwaGksIHJlcGxhY2VtZW50KTsKICAgICAgYmxvY2suYWRkQWZ0ZXIoY29tcGFyZSwgcmVwbGFjZW1lbnQpOwogICAgICBibG9jay5yZW1vdmVQaGkocGhpKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIFRPRE8oc3JhKTogQ29uc2lkZXIgb3RoZXIgc2ltcGxlIGRpYW1vbmRzLCBlLmcuIHdpdGggdGhlIGFkZGl0aW9uIG9mIGEgc3BlY2lhbCBpbnN0cnVjdGlvbiwKICAgIC8vCiAgICAvLyAgICAgcyA9PSBudWxsID8gIiIgOiBzICAtLS0+ICBzIHx8ICIiLgogICAgcmV0dXJuOwogIH0KCiAgYm9vbCBfaXNCb29sQ29uc3RhbnQoSEluc3RydWN0aW9uIG5vZGUsIGJvb2wgdmFsdWUpIHsKICAgIGlmIChub2RlIGlzIEhDb25zdGFudCkgewogICAgICBDb25zdGFudFZhbHVlIGMgPSBub2RlLmNvbnN0YW50OwogICAgICBpZiAoYyBpcyBCb29sQ29uc3RhbnRWYWx1ZSkgewogICAgICAgIHJldHVybiBjLmJvb2xWYWx1ZSA9PSB2YWx1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgYm9vbCBfc2FtZU9yUmVmaW5lbWVudE9mKEhJbnN0cnVjdGlvbiBiYXNlLCBISW5zdHJ1Y3Rpb24gaW5zbikgewogICAgaWYgKGJhc2UgPT0gaW5zbikgcmV0dXJuIHRydWU7CiAgICBpZiAoaW5zbiBpcyBIVHlwZUtub3duKSByZXR1cm4gX3NhbWVPclJlZmluZW1lbnRPZihiYXNlLCBpbnNuLmNoZWNrZWRJbnB1dCk7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBib29sIF9tb3N0bHlFbXB0eShIQmFzaWNCbG9jayBibG9jaykgewogICAgZm9yIChISW5zdHJ1Y3Rpb24gaW5zbiA9IGJsb2NrLmZpcnN0OyBpbnNuICE9IG51bGw7IGluc24gPSBpbnNuLm5leHQpIHsKICAgICAgaWYgKGluc24gaXMgSFR5cGVLbm93bikgY29udGludWU7CiAgICAgIGlmIChpbnNuIGlzIEhHb3RvKSByZXR1cm4gdHJ1ZTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRJbnN0cnVjdGlvbihISW5zdHJ1Y3Rpb24gbm9kZSkgewogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBDb25zdGFudFZhbHVlIGdldENvbnN0YW50RnJvbVR5cGUoSEluc3RydWN0aW9uIG5vZGUpIHsKICAgIGlmIChub2RlLmlzVmFsdWUoX2Fic3RyYWN0VmFsdWVEb21haW4pICYmCiAgICAgICAgbm9kZS5pc051bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseUZhbHNlKSB7CiAgICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPQogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZ2V0UHJpbWl0aXZlVmFsdWUobm9kZS5pbnN0cnVjdGlvblR5cGUpOwogICAgICBpZiAodmFsdWUuaXNCb29sKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICB9CiAgICAgIC8vIFRPRE8oaGV0KTogY29uc2lkZXIgc3VwcG9ydGluZyBvdGhlciB2YWx1ZXMgKHNob3J0IHN0cmluZ3M/KQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIHByb3BhZ2F0ZUNvbnN0YW50VmFsdWVUb1VzZXMoSEluc3RydWN0aW9uIG5vZGUpIHsKICAgIGlmIChub2RlLnVzZWRCeS5pc0VtcHR5KSByZXR1cm47CiAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gZ2V0Q29uc3RhbnRGcm9tVHlwZShub2RlKTsKICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIEhDb25zdGFudCBjb25zdGFudCA9IF9ncmFwaC5hZGRDb25zdGFudCh2YWx1ZSwgX2Nsb3NlZFdvcmxkKTsKICAgICAgZm9yIChISW5zdHJ1Y3Rpb24gdXNlciBpbiBub2RlLnVzZWRCeS50b0xpc3QoKSkgewogICAgICAgIHVzZXIuY2hhbmdlVXNlKG5vZGUsIGNvbnN0YW50KTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0UGFyYW1ldGVyVmFsdWUoSFBhcmFtZXRlclZhbHVlIG5vZGUpIHsKICAgIC8vIFtIUGFyYW1ldGVyVmFsdWVdcyBhcmUgZWl0aGVyIHRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyIChpbiBmdWxseSBTU0EKICAgIC8vIGNvbnZlcnRlZCBjb2RlKSwgb3IgdGhlIG11dGFibGUgdmFyaWFibGUgY29udGFpbmluZyB0aGUgdmFsdWUgKGluCiAgICAvLyBpbmNvbXBsZXRlbHkgU1NBIGNvbnZlcnRlZCBjb2RlLCBlLmcuIG1ldGhvZHMgY29udGFpbmluZyBleGNlcHRpb25zKS4KICAgIC8vCiAgICAvLyBJZiB0aGUgcGFyYW1ldGVyIGlzIHVzZWQgYXMgYSBtdXRhYmxlIHZhcmlhYmxlIHdlIGNhbm5vdCByZXBsYWNlIHRoZQogICAgLy8gdmFyaWFibGUgd2l0aCBhIHZhbHVlLgogICAgLy8KICAgIC8vIElmIHRoZSBwYXJhbWV0ZXIgaXMgdXNlZCBhcyBhIG11dGFibGUgdmFyaWFibGUgYnV0IG5ldmVyIHdyaXR0ZW4sIGZpcnN0CiAgICAvLyBjb252ZXJ0IHRvIGEgdmFsdWUgcGFyYW1ldGVyLgoKICAgIGlmIChub2RlLnVzZWRBc1ZhcmlhYmxlKCkpIHsKICAgICAgaWYgKCFub2RlLnVzZWRCeS5ldmVyeSgodXNlcikgPT4gdXNlciBpcyBITG9jYWxHZXQpKSByZXR1cm4gbm9kZTsKICAgICAgLy8gVHJpdmlhbCBTU0EtY29udmVyc2lvbi4gUmVwbGFjZSBhbGwgSExvY2FsR2V0IGluc3RydWN0aW9ucyB3aXRoIHRoZQogICAgICAvLyBwYXJhbWV0ZXIuCiAgICAgIGZvciAoSExvY2FsR2V0IHVzZXIgaW4gbm9kZS51c2VkQnkudG9MaXN0KCkpIHsKICAgICAgICB1c2VyLmJsb2NrLnJld3JpdGUodXNlciwgbm9kZSk7CiAgICAgICAgdXNlci5ibG9jay5yZW1vdmUodXNlcik7CiAgICAgIH0KICAgIH0KCiAgICBwcm9wYWdhdGVDb25zdGFudFZhbHVlVG9Vc2VzKG5vZGUpOwogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXROb3QoSE5vdCBub2RlKSB7CiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzID0gbm9kZS5pbnB1dHM7CiAgICBhc3NlcnQoaW5wdXRzLmxlbmd0aCA9PSAxKTsKICAgIEhJbnN0cnVjdGlvbiBpbnB1dCA9IGlucHV0c1swXTsKICAgIGlmIChpbnB1dCBpcyBIQ29uc3RhbnQpIHsKICAgICAgSENvbnN0YW50IGNvbnN0YW50ID0gaW5wdXQ7CiAgICAgIGJvb2wgaXNUcnVlID0gY29uc3RhbnQuY29uc3RhbnQuaXNUcnVlOwogICAgICByZXR1cm4gX2dyYXBoLmFkZENvbnN0YW50Qm9vbCghaXNUcnVlLCBfY2xvc2VkV29ybGQpOwogICAgfSBlbHNlIGlmIChpbnB1dCBpcyBITm90KSB7CiAgICAgIHJldHVybiBpbnB1dC5pbnB1dHNbMF07CiAgICB9CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEludm9rZVVuYXJ5KEhJbnZva2VVbmFyeSBub2RlKSB7CiAgICBISW5zdHJ1Y3Rpb24gZm9sZGVkID0gZm9sZFVuYXJ5KG5vZGUub3BlcmF0aW9uKCksIG5vZGUub3BlcmFuZCk7CiAgICByZXR1cm4gZm9sZGVkICE9IG51bGwgPyBmb2xkZWQgOiBub2RlOwogIH0KCiAgSEluc3RydWN0aW9uIGZvbGRVbmFyeSgKICAgICAgY29uc3RhbnRfc3lzdGVtLlVuYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbiwgSEluc3RydWN0aW9uIG9wZXJhbmQpIHsKICAgIGlmIChvcGVyYW5kIGlzIEhDb25zdGFudCkgewogICAgICBIQ29uc3RhbnQgcmVjZWl2ZXIgPSBvcGVyYW5kOwogICAgICBDb25zdGFudFZhbHVlIGZvbGRlZCA9IG9wZXJhdGlvbi5mb2xkKHJlY2VpdmVyLmNvbnN0YW50KTsKICAgICAgaWYgKGZvbGRlZCAhPSBudWxsKSByZXR1cm4gX2dyYXBoLmFkZENvbnN0YW50KGZvbGRlZCwgX2Nsb3NlZFdvcmxkKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgSEluc3RydWN0aW9uIHRyeU9wdGltaXplTGVuZ3RoSW50ZXJjZXB0ZWRHZXR0ZXIoSEludm9rZUR5bmFtaWMgbm9kZSkgewogICAgSEluc3RydWN0aW9uIGFjdHVhbFJlY2VpdmVyID0gbm9kZS5pbnB1dHNbMV07CiAgICBpZiAoYWN0dWFsUmVjZWl2ZXIKICAgICAgICAuaXNJbmRleGFibGVQcmltaXRpdmUoX2Fic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgaWYgKGFjdHVhbFJlY2VpdmVyLmlzQ29uc3RhbnRTdHJpbmcoKSkgewogICAgICAgIEhDb25zdGFudCBjb25zdGFudElucHV0ID0gYWN0dWFsUmVjZWl2ZXI7CiAgICAgICAgU3RyaW5nQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IGNvbnN0YW50SW5wdXQuY29uc3RhbnQ7CiAgICAgICAgcmV0dXJuIF9ncmFwaC5hZGRDb25zdGFudEludChjb25zdGFudC5sZW5ndGgsIF9jbG9zZWRXb3JsZCk7CiAgICAgIH0gZWxzZSBpZiAoYWN0dWFsUmVjZWl2ZXIuaXNDb25zdGFudExpc3QoKSkgewogICAgICAgIEhDb25zdGFudCBjb25zdGFudElucHV0ID0gYWN0dWFsUmVjZWl2ZXI7CiAgICAgICAgTGlzdENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSBjb25zdGFudElucHV0LmNvbnN0YW50OwogICAgICAgIHJldHVybiBfZ3JhcGguYWRkQ29uc3RhbnRJbnQoY29uc3RhbnQubGVuZ3RoLCBfY2xvc2VkV29ybGQpOwogICAgICB9CiAgICAgIGJvb2wgaXNGaXhlZCA9CiAgICAgICAgICBpc0ZpeGVkTGVuZ3RoKGFjdHVhbFJlY2VpdmVyLmluc3RydWN0aW9uVHlwZSwgX2Nsb3NlZFdvcmxkKTsKICAgICAgQWJzdHJhY3RWYWx1ZSBhY3R1YWxUeXBlID0gbm9kZS5pbnN0cnVjdGlvblR5cGU7CiAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0VHlwZSA9IF9hYnN0cmFjdFZhbHVlRG9tYWluLnBvc2l0aXZlSW50VHlwZTsKICAgICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIGNvbXB1dGVkIGEgbW9yZSBzcGVjaWZpYyB0eXBlLCBrZWVwIHRoYXQgdHlwZS4KICAgICAgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAuaXNJbnN0YW5jZU9mT3JOdWxsKGFjdHVhbFR5cGUsIGNvbW1vbkVsZW1lbnRzLmpzVUludDMxQ2xhc3MpCiAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIHJlc3VsdFR5cGUgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbi51aW50MzFUeXBlOwogICAgICB9IGVsc2UgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAuaXNJbnN0YW5jZU9mT3JOdWxsKGFjdHVhbFR5cGUsIGNvbW1vbkVsZW1lbnRzLmpzVUludDMyQ2xhc3MpCiAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIHJlc3VsdFR5cGUgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbi51aW50MzJUeXBlOwogICAgICB9CiAgICAgIEhHZXRMZW5ndGggcmVzdWx0ID0KICAgICAgICAgIG5ldyBIR2V0TGVuZ3RoKGFjdHVhbFJlY2VpdmVyLCByZXN1bHRUeXBlLCBpc0Fzc2lnbmFibGU6ICFpc0ZpeGVkKTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0gZWxzZSBpZiAoYWN0dWFsUmVjZWl2ZXIuaXNDb25zdGFudE1hcCgpKSB7CiAgICAgIEhDb25zdGFudCBjb25zdGFudElucHV0ID0gYWN0dWFsUmVjZWl2ZXI7CiAgICAgIE1hcENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSBjb25zdGFudElucHV0LmNvbnN0YW50OwogICAgICByZXR1cm4gX2dyYXBoLmFkZENvbnN0YW50SW50KGNvbnN0YW50Lmxlbmd0aCwgX2Nsb3NlZFdvcmxkKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgSEluc3RydWN0aW9uIGhhbmRsZUludGVyY2VwdGVkQ2FsbChISW52b2tlRHluYW1pYyBub2RlKSB7CiAgICAvLyBUcnkgY29uc3RhbnQgZm9sZGluZyB0aGUgaW5zdHJ1Y3Rpb24uCiAgICBjb25zdGFudF9zeXN0ZW0uT3BlcmF0aW9uIG9wZXJhdGlvbiA9IG5vZGUuc3BlY2lhbGl6ZXIub3BlcmF0aW9uKCk7CiAgICBpZiAob3BlcmF0aW9uICE9IG51bGwpIHsKICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gbm9kZS5pbnB1dHMubGVuZ3RoID09IDIKICAgICAgICAgID8gZm9sZFVuYXJ5KG9wZXJhdGlvbiwgbm9kZS5pbnB1dHNbMV0pCiAgICAgICAgICA6IGZvbGRCaW5hcnkob3BlcmF0aW9uLCBub2RlLmlucHV0c1sxXSwgbm9kZS5pbnB1dHNbMl0pOwogICAgICBpZiAoaW5zdHJ1Y3Rpb24gIT0gbnVsbCkgcmV0dXJuIGluc3RydWN0aW9uOwogICAgfQoKICAgIC8vIFRyeSBjb252ZXJ0aW5nIHRoZSBpbnN0cnVjdGlvbiB0byBhIGJ1aWx0aW4gaW5zdHJ1Y3Rpb24uCiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBub2RlLnNwZWNpYWxpemVyLnRyeUNvbnZlcnRUb0J1aWx0aW4obm9kZSwKICAgICAgICBfZ3JhcGgsIF9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzLCBjb21tb25FbGVtZW50cywgX2Nsb3NlZFdvcmxkLCBfbG9nKTsKICAgIGlmIChpbnN0cnVjdGlvbiAhPSBudWxsKSB7CiAgICAgIHJldHVybiBpbnN0cnVjdGlvbjsKICAgIH0KCiAgICBTZWxlY3RvciBzZWxlY3RvciA9IG5vZGUuc2VsZWN0b3I7CiAgICBBYnN0cmFjdFZhbHVlIG1hc2sgPSBub2RlLnJlY2VpdmVyVHlwZTsKICAgIEhJbnN0cnVjdGlvbiBpbnB1dCA9IG5vZGUuaW5wdXRzWzFdOwoKICAgIGJvb2wgYXBwbGllcyhNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgICByZXR1cm4gc2VsZWN0b3IuYXBwbGllcyhlbGVtZW50KSAmJgogICAgICAgICAgKG1hc2sgPT0gbnVsbCB8fAogICAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAgICAgICAgIC5pc1RhcmdldGluZ01lbWJlcihtYXNrLCBlbGVtZW50LCBzZWxlY3Rvci5tZW1iZXJOYW1lKQogICAgICAgICAgICAgICAgICAuaXNQb3RlbnRpYWxseVRydWUpOwogICAgfQoKICAgIGlmIChzZWxlY3Rvci5pc0NhbGwgfHwgc2VsZWN0b3IuaXNPcGVyYXRvcikgewogICAgICBGdW5jdGlvbkVudGl0eSB0YXJnZXQ7CiAgICAgIGlmIChpbnB1dC5pc0V4dGVuZGFibGVBcnJheShfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIGlmIChhcHBsaWVzKGNvbW1vbkVsZW1lbnRzLmpzQXJyYXlSZW1vdmVMYXN0KSkgewogICAgICAgICAgdGFyZ2V0ID0gY29tbW9uRWxlbWVudHMuanNBcnJheVJlbW92ZUxhc3Q7CiAgICAgICAgfSBlbHNlIGlmIChhcHBsaWVzKGNvbW1vbkVsZW1lbnRzLmpzQXJyYXlBZGQpKSB7CiAgICAgICAgICAvLyBUaGUgY29kZWdlbiBzcGVjaWFsIGNhc2VzIGFycmF5IGNhbGxzLCBidXQgZG9lcyBub3QKICAgICAgICAgIC8vIGlubGluZSBhcmd1bWVudCB0eXBlIGNoZWNrcy4KICAgICAgICAgIGlmICghX2Nsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YQogICAgICAgICAgICAgICAgICAuZ2V0UGFyYW1ldGVyQ2hlY2tQb2xpY3koY29tbW9uRWxlbWVudHMuanNBcnJheUFkZCkKICAgICAgICAgICAgICAgICAgLmlzRW1pdHRlZCB8fAogICAgICAgICAgICAgIGlucHV0IGlzIEhMaXRlcmFsTGlzdCkgewogICAgICAgICAgICB0YXJnZXQgPSBjb21tb25FbGVtZW50cy5qc0FycmF5QWRkOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChpbnB1dC5pc1N0cmluZ09yTnVsbChfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIGlmIChjb21tb25FbGVtZW50cy5hcHBsaWVzVG9Kc1N0cmluZ1NwbGl0KAogICAgICAgICAgICBzZWxlY3RvciwgbWFzaywgX2Fic3RyYWN0VmFsdWVEb21haW4pKSB7CiAgICAgICAgICByZXR1cm4gaGFuZGxlU3RyaW5nU3BsaXQobm9kZSk7CiAgICAgICAgfSBlbHNlIGlmIChhcHBsaWVzKGNvbW1vbkVsZW1lbnRzLmpzU3RyaW5nT3BlcmF0b3JBZGQpKSB7CiAgICAgICAgICAvLyBgb3BlcmF0b3IrYCBpcyB0dXJuZWQgaW50byBhIEphdmFTY3JpcHQgJysnIHNvIHdlIG5lZWQgdG8KICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgcmVjZWl2ZXIgYW5kIHRoZSBhcmd1bWVudCBhcmUgbm90IG51bGwuCiAgICAgICAgICAvLyBUT0RPKHNyYSk6IERvIHRoaXMgdmlhIFtub2RlLnNwZWNpYWxpemVyXS4KICAgICAgICAgIEhJbnN0cnVjdGlvbiBhcmd1bWVudCA9IG5vZGUuaW5wdXRzWzJdOwogICAgICAgICAgaWYgKGFyZ3VtZW50LmlzU3RyaW5nKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgICAgICAgaW5wdXQuaXNOdWxsKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlGYWxzZSkgewogICAgICAgICAgICByZXR1cm4gbmV3IEhTdHJpbmdDb25jYXQoaW5wdXQsIGFyZ3VtZW50LCBub2RlLmluc3RydWN0aW9uVHlwZSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChhcHBsaWVzKGNvbW1vbkVsZW1lbnRzLmpzU3RyaW5nVG9TdHJpbmcpICYmCiAgICAgICAgICAgIGlucHV0LmlzTnVsbChfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5RmFsc2UpIHsKICAgICAgICAgIHJldHVybiBpbnB1dDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCAhPSBudWxsKSB7CiAgICAgICAgLy8gVE9ETyhuZ2VvZmZyYXkpOiBUaGVyZSBpcyBhIHN0cm9uZyBkZXBlbmRlbmN5IGJldHdlZW4gY29kZWdlbgogICAgICAgIC8vIGFuZCB0aGlzIG9wdGltaXphdGlvbiB0aGF0IHRoZSBkeW5hbWljIGludm9rZSBkb2VzIG5vdCBuZWVkIGFuCiAgICAgICAgLy8gaW50ZXJjZXB0b3IuIFdlIGN1cnJlbnRseSBuZWVkIHRvIGtlZXAgYQogICAgICAgIC8vIEhJbnZva2VEeW5hbWljTWV0aG9kIGFuZCBub3QgY3JlYXRlIGEgSEZvcmVpZ24gYmVjYXVzZQogICAgICAgIC8vIEhGb3JlaWduIGlzIHRvbyBvcGFxdWUgZm9yIHRoZSBTc2FDaGVja0luc2VydGVyICh0aGF0IGFkZHMgYQogICAgICAgIC8vIGJvdW5kcyBjaGVjayBvbiByZW1vdmVMYXN0KS4gT25jZSB3ZSBzdGFydCBpbmxpbmluZywgdGhlCiAgICAgICAgLy8gYm91bmRzIGNoZWNrIHdpbGwgYmVjb21lIGV4cGxpY2l0LCBzbyB3ZSB3b24ndCBuZWVkIHRoaXMKICAgICAgICAvLyBvcHRpbWl6YXRpb24uCiAgICAgICAgSEludm9rZUR5bmFtaWNNZXRob2QgcmVzdWx0ID0gbmV3IEhJbnZva2VEeW5hbWljTWV0aG9kKAogICAgICAgICAgICBub2RlLnNlbGVjdG9yLAogICAgICAgICAgICBub2RlLnJlY2VpdmVyVHlwZSwKICAgICAgICAgICAgbm9kZS5pbnB1dHMuc3VibGlzdCgxKSwgLy8gRHJvcCBpbnRlcmNlcHRvci4KICAgICAgICAgICAgbm9kZS5pbnN0cnVjdGlvblR5cGUsCiAgICAgICAgICAgIG5vZGUudHlwZUFyZ3VtZW50cywKICAgICAgICAgICAgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICAgICAgaXNJbnRlcmNlcHRlZDogZmFsc2UpOwogICAgICAgIHJlc3VsdC5lbGVtZW50ID0gdGFyZ2V0OwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuaXNHZXR0ZXIpIHsKICAgICAgaWYgKGNvbW1vbkVsZW1lbnRzLmFwcGxpZXNUb0pzSW5kZXhhYmxlTGVuZ3RoKHNlbGVjdG9yKSkgewogICAgICAgIEhJbnN0cnVjdGlvbiBvcHRpbWl6ZWQgPSB0cnlPcHRpbWl6ZUxlbmd0aEludGVyY2VwdGVkR2V0dGVyKG5vZGUpOwogICAgICAgIGlmIChvcHRpbWl6ZWQgIT0gbnVsbCkgcmV0dXJuIG9wdGltaXplZDsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBub2RlOwogIH0KCiAgSEluc3RydWN0aW9uIGhhbmRsZVN0cmluZ1NwbGl0KEhJbnZva2VEeW5hbWljIG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiBhcmd1bWVudCA9IG5vZGUuaW5wdXRzWzJdOwogICAgaWYgKCFhcmd1bWVudC5pc1N0cmluZyhfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gbm9kZTsKICAgIH0KCiAgICAvLyBSZXBsYWNlIGBzLnNwbGl0JDEocGF0dGVybilgIHdpdGgKICAgIC8vCiAgICAvLyAgICAgdDEgPSBzLnNwbGl0KHBhdHRlcm4pOwogICAgLy8gICAgIHQyID0gU3RyaW5nOwogICAgLy8gICAgIHQzID0gSlNBcnJheTx0Mj47CiAgICAvLyAgICAgdDQgPSBzZXRSdW50aW1lVHlwZUluZm8odDEsIHQzKTsKICAgIC8vCgogICAgQWJzdHJhY3RWYWx1ZSByZXN1bHRNYXNrID0gX2Fic3RyYWN0VmFsdWVEb21haW4uZ3Jvd2FibGVMaXN0VHlwZTsKCiAgICBISW52b2tlRHluYW1pY01ldGhvZCBzcGxpdEluc3RydWN0aW9uID0gbmV3IEhJbnZva2VEeW5hbWljTWV0aG9kKAogICAgICAgIG5vZGUuc2VsZWN0b3IsCiAgICAgICAgbm9kZS5yZWNlaXZlclR5cGUsCiAgICAgICAgbm9kZS5pbnB1dHMuc3VibGlzdCgxKSwgLy8gRHJvcCBpbnRlcmNlcHRvci4KICAgICAgICByZXN1bHRNYXNrLAogICAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICBub2RlLnNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgIGlzSW50ZXJjZXB0ZWQ6IGZhbHNlKQogICAgICAuLmVsZW1lbnQgPSBjb21tb25FbGVtZW50cy5qc1N0cmluZ1NwbGl0CiAgICAgIC4uc2V0QWxsb2NhdGlvbih0cnVlKTsKCiAgICBpZiAoIV9jbG9zZWRXb3JsZC5ydGlOZWVkCiAgICAgICAgLmNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKGNvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcykpIHsKICAgICAgcmV0dXJuIHNwbGl0SW5zdHJ1Y3Rpb247CiAgICB9CgogICAgbm9kZS5ibG9jay5hZGRCZWZvcmUobm9kZSwgc3BsaXRJbnN0cnVjdGlvbik7CgogICAgSEluc3RydWN0aW9uIHR5cGVJbmZvOwogICAgaWYgKF9vcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpIHsKICAgICAgdHlwZUluZm8gPSBITG9hZFR5cGUoCiAgICAgICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LmNyZWF0ZUludGVyZmFjZVR5cGUoCiAgICAgICAgICAgICAgY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzLCBbY29tbW9uRWxlbWVudHMuc3RyaW5nVHlwZV0pLAogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpOwogICAgICBub2RlLmJsb2NrLmFkZEJlZm9yZShub2RlLCB0eXBlSW5mbyk7CiAgICB9IGVsc2UgewogICAgICBISW5zdHJ1Y3Rpb24gc3RyaW5nVHlwZUluZm8gPSBuZXcgSFR5cGVJbmZvRXhwcmVzc2lvbigKICAgICAgICAgIFR5cGVJbmZvRXhwcmVzc2lvbktpbmQuQ09NUExFVEUsCiAgICAgICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50CiAgICAgICAgICAgICAgLmdldFRoaXNUeXBlKGNvbW1vbkVsZW1lbnRzLnN0cmluZ0NsYXNzKSwKICAgICAgICAgIDxISW5zdHJ1Y3Rpb24+W10sCiAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSk7CiAgICAgIG5vZGUuYmxvY2suYWRkQmVmb3JlKG5vZGUsIHN0cmluZ1R5cGVJbmZvKTsKCiAgICAgIHR5cGVJbmZvID0gbmV3IEhUeXBlSW5mb0V4cHJlc3Npb24oCiAgICAgICAgICBUeXBlSW5mb0V4cHJlc3Npb25LaW5kLklOU1RBTkNFLAogICAgICAgICAgX2Nsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudAogICAgICAgICAgICAgIC5nZXRUaGlzVHlwZShjb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3MpLAogICAgICAgICAgPEhJbnN0cnVjdGlvbj5bc3RyaW5nVHlwZUluZm9dLAogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpOwogICAgICBub2RlLmJsb2NrLmFkZEJlZm9yZShub2RlLCB0eXBlSW5mbyk7CiAgICB9CgogICAgSEludm9rZVN0YXRpYyB0YWdJbnN0cnVjdGlvbiA9IG5ldyBISW52b2tlU3RhdGljKAogICAgICAgIGNvbW1vbkVsZW1lbnRzLnNldFJ1bnRpbWVUeXBlSW5mbywKICAgICAgICA8SEluc3RydWN0aW9uPltzcGxpdEluc3RydWN0aW9uLCB0eXBlSW5mb10sCiAgICAgICAgcmVzdWx0TWFzaywKICAgICAgICBjb25zdCA8RGFydFR5cGU+W10pOwogICAgLy8gJ0xpbmVhciB0eXBpbmcnIHRyaWNrOiBbdGFnSW5zdHJ1Y3Rpb25dIGlzIHRoZSBvbmx5IHVzZSBvZiB0aGUKICAgIC8vIFtzcGxpdEluc3RydWN0aW9uXSwgc28gaXQgYmVjb21lcyB0aGUgc29sZSBhbGlhcy4KICAgIC8vIFRPRE8oc3JhKTogQnVpbGQgdGhpcyBrbm93bGVkZ2UgaW50byBhbGlhcyBhbmFseXNpcy4KICAgIHRhZ0luc3RydWN0aW9uLnNldEFsbG9jYXRpb24odHJ1ZSk7CgogICAgcmV0dXJuIHRhZ0luc3RydWN0aW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0SW52b2tlRHluYW1pY01ldGhvZChISW52b2tlRHluYW1pY01ldGhvZCBub2RlKSB7CiAgICBwcm9wYWdhdGVDb25zdGFudFZhbHVlVG9Vc2VzKG5vZGUpOwogICAgaWYgKG5vZGUuaXNJbnRlcmNlcHRlZENhbGwpIHsKICAgICAgSEluc3RydWN0aW9uIGZvbGRlZCA9IGhhbmRsZUludGVyY2VwdGVkQ2FsbChub2RlKTsKICAgICAgaWYgKGZvbGRlZCAhPSBub2RlKSByZXR1cm4gZm9sZGVkOwogICAgfQoKICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciA9IG5vZGUuZ2V0RGFydFJlY2VpdmVyKF9jbG9zZWRXb3JsZCk7CiAgICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZSA9IHJlY2VpdmVyLmluc3RydWN0aW9uVHlwZTsKICAgIE1lbWJlckVudGl0eSBlbGVtZW50ID0KICAgICAgICBfY2xvc2VkV29ybGQubG9jYXRlU2luZ2xlTWVtYmVyKG5vZGUuc2VsZWN0b3IsIHJlY2VpdmVyVHlwZSk7CiAgICAvLyBUT0RPKG5nZW9mZnJheSk6IEFsc28gZm9sZCBpZiBpdCdzIGEgZ2V0dGVyIG9yIHZhcmlhYmxlLgogICAgaWYgKGVsZW1lbnQgIT0gbnVsbCAmJgogICAgICAgIGVsZW1lbnQuaXNGdW5jdGlvbiAmJgogICAgICAgIC8vIElmIHdlIGZvdW5kIG91dCB0aGF0IHRoZSBvbmx5IHRhcmdldCBpcyBhbiBpbXBsaWNpdGx5IGNhbGxlZAogICAgICAgIC8vIFs6bm9TdWNoTWV0aG9kOl0gd2UganVzdCBpZ25vcmUgaXQuCiAgICAgICAgbm9kZS5zZWxlY3Rvci5hcHBsaWVzKGVsZW1lbnQpKSB7CiAgICAgIEZ1bmN0aW9uRW50aXR5IG1ldGhvZCA9IGVsZW1lbnQ7CgogICAgICBpZiAoX25hdGl2ZURhdGEuaXNOYXRpdmVNZW1iZXIobWV0aG9kKSkgewogICAgICAgIEhJbnN0cnVjdGlvbiBmb2xkZWQgPSB0cnlJbmxpbmVOYXRpdmVNZXRob2Qobm9kZSwgbWV0aG9kKTsKICAgICAgICBpZiAoZm9sZGVkICE9IG51bGwpIHJldHVybiBmb2xkZWQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gVE9ETyhuZ2VvZmZyYXkpOiBJZiB0aGUgbWV0aG9kIGhhcyBvcHRpb25hbCBwYXJhbWV0ZXJzLAogICAgICAgIC8vIHdlIHNob3VsZCBwYXNzIHRoZSBkZWZhdWx0IHZhbHVlcy4KICAgICAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVycyA9IG1ldGhvZC5wYXJhbWV0ZXJTdHJ1Y3R1cmU7CiAgICAgICAgaWYgKHBhcmFtZXRlcnMudG90YWxQYXJhbWV0ZXJzID09IG5vZGUuc2VsZWN0b3IuYXJndW1lbnRDb3VudCAmJgogICAgICAgICAgICBwYXJhbWV0ZXJzLnR5cGVQYXJhbWV0ZXJzID09CiAgICAgICAgICAgICAgICBub2RlLnNlbGVjdG9yLmNhbGxTdHJ1Y3R1cmUudHlwZUFyZ3VtZW50Q291bnQpIHsKICAgICAgICAgIG5vZGUuZWxlbWVudCA9IG1ldGhvZDsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG5vZGU7CiAgICB9CgogICAgLy8gUmVwbGFjZSBtZXRob2QgY2FsbHMgdGhyb3VnaCBmaWVsZHMgd2l0aCBhIGNsb3N1cmUgY2FsbCBvbiB0aGUgdmFsdWUgb2YKICAgIC8vIHRoZSBmaWVsZC4gVGhpcyB1c3VhbGx5IHJlbW92ZXMgdGhlIGRlbWFuZCBmb3IgdGhlIGNhbGwtdGhyb3VnaCBzdHViIGFuZAogICAgLy8gbWFrZXMgdGhlIGZpZWxkIGxvYWQgYXZhaWxhYmxlIHRvIGZ1cnRoZXIgb3B0aW1pemF0aW9uLCBlLmcuIExJQ00uCgogICAgaWYgKGVsZW1lbnQgIT0gbnVsbCAmJgogICAgICAgIGVsZW1lbnQuaXNGaWVsZCAmJgogICAgICAgIGVsZW1lbnQubmFtZSA9PSBub2RlLnNlbGVjdG9yLm5hbWUpIHsKICAgICAgRmllbGRFbnRpdHkgZmllbGQgPSBlbGVtZW50OwogICAgICBpZiAoIV9uYXRpdmVEYXRhLmlzTmF0aXZlTWVtYmVyKGZpZWxkKSAmJgogICAgICAgICAgIW5vZGUuaXNDYWxsT25JbnRlcmNlcHRvcihfY2xvc2VkV29ybGQpKSB7CiAgICAgICAgLy8gSW5zZXJ0aW9uIHBvaW50IGZvciB0aGUgY2xvc3VyZSBjYWxsLgogICAgICAgIEhJbnN0cnVjdGlvbiBpbnNlcnRpb25Qb2ludCA9IG5vZGU7CiAgICAgICAgSEluc3RydWN0aW9uIGxvYWQ7CiAgICAgICAgRmllbGRBbmFseXNpc0RhdGEgZmllbGREYXRhID0KICAgICAgICAgICAgX2Nsb3NlZFdvcmxkLmZpZWxkQW5hbHlzaXMuZ2V0RmllbGREYXRhKGZpZWxkKTsKICAgICAgICBpZiAoZmllbGREYXRhLmlzRWZmZWN0aXZlbHlDb25zdGFudCkgewogICAgICAgICAgLy8gVGhlIGZpZWxkIGlzIGVsaWRlZCBhbmQgcmVwbGFjZSBpdCB3aXRoIGl0cyBjb25zdGFudCB2YWx1ZS4KICAgICAgICAgIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc051bGwocmVjZWl2ZXJUeXBlKS5pc1BvdGVudGlhbGx5VHJ1ZSkgewogICAgICAgICAgICAvLyBUaGUgcmVjZWl2ZXIgaXMgcG90ZW50aWFsbHkgYG51bGxgIHNvIHdlIGluc2VydCBhIG51bGwgcmVjZWl2ZXIKICAgICAgICAgICAgLy8gZ3VhcmQgdG8gdHJpZ2dlciBhIG51bGwgcG9pbnRlciBleGNlcHRpb24uCiAgICAgICAgICAgIC8vCiAgICAgICAgICAgIC8vIFRoaXMgY291bGQgYmUgaW5zZXJ0ZWQgdW5jb25kaXRpb25hbGx5IGFuZCByZW1vdmVkIGJ5IGxhdGVyCiAgICAgICAgICAgIC8vIG9wdGltaXphdGlvbnMgaWYgdW5uZWNlc3NhcnksIGJ1dCBwZXJmb3JtYW5jZSB3ZSBkbyBpdAogICAgICAgICAgICAvLyBjb25kaXRpb25hbGx5IGhlcmUuCiAgICAgICAgICAgIC8vIFRPRE8oMzU5OTYpOiBSZXBsYWNlIHdpdGggbnVsbCByZWNlaXZlciBndWFyZCBpbnN0cnVjdGlvbi4KICAgICAgICAgICAgSEluc3RydWN0aW9uIGR1bW15R2V0ID0gbmV3IEhGaWVsZEdldChudWxsLCByZWNlaXZlciwKICAgICAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgICAgICAgICAgaXNBc3NpZ25hYmxlOiBmYWxzZSk7CiAgICAgICAgICAgIF9sb2c/LnJlZ2lzdGVyRmllbGRDYWxsKG5vZGUsIGR1bW15R2V0KTsKICAgICAgICAgICAgbm9kZS5ibG9jay5hZGRCZWZvcmUobm9kZSwgZHVtbXlHZXQpOwogICAgICAgICAgICBpbnNlcnRpb25Qb2ludCA9IGR1bW15R2V0OwogICAgICAgICAgfQogICAgICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IGZpZWxkRGF0YS5jb25zdGFudFZhbHVlOwogICAgICAgICAgbG9hZCA9IF9ncmFwaC5hZGRDb25zdGFudCh2YWx1ZSwgX2Nsb3NlZFdvcmxkLAogICAgICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICAgIF9sb2c/LnJlZ2lzdGVyQ29uc3RhbnRGaWVsZENhbGwobm9kZSwgZmllbGQsIGxvYWQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBBYnN0cmFjdFZhbHVlIHR5cGUgPSBBYnN0cmFjdFZhbHVlRmFjdG9yeS5pbmZlcnJlZFR5cGVGb3JNZW1iZXIoCiAgICAgICAgICAgICAgZmllbGQsIF9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzKTsKICAgICAgICAgIGxvYWQgPSBuZXcgSEZpZWxkR2V0KGZpZWxkLCByZWNlaXZlciwgdHlwZSwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgICAgICBfbG9nPy5yZWdpc3RlckZpZWxkQ2FsbChub2RlLCBsb2FkKTsKICAgICAgICAgIG5vZGUuYmxvY2suYWRkQmVmb3JlKG5vZGUsIGxvYWQpOwogICAgICAgICAgaW5zZXJ0aW9uUG9pbnQgPSBsb2FkOwogICAgICAgIH0KICAgICAgICBTZWxlY3RvciBjYWxsU2VsZWN0b3IgPSBuZXcgU2VsZWN0b3IuY2FsbENsb3N1cmVGcm9tKG5vZGUuc2VsZWN0b3IpOwogICAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMgPSA8SEluc3RydWN0aW9uPltsb2FkXQogICAgICAgICAgLi5hZGRBbGwobm9kZS5pbnB1dHMuc2tpcChub2RlLmlzSW50ZXJjZXB0ZWRDYWxsID8gMiA6IDEpKTsKICAgICAgICBEYXJ0VHlwZSBmaWVsZFR5cGUgPQogICAgICAgICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LmdldEZpZWxkVHlwZShmaWVsZCk7CiAgICAgICAgSEluc3RydWN0aW9uIGNsb3N1cmVDYWxsID0gbmV3IEhJbnZva2VDbG9zdXJlKAogICAgICAgICAgICBjYWxsU2VsZWN0b3IsCiAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAgICAgICAuY3JlYXRlRnJvbVN0YXRpY1R5cGUoZmllbGRUeXBlLCBudWxsYWJsZTogdHJ1ZSkKICAgICAgICAgICAgICAgIC5hYnN0cmFjdFZhbHVlLAogICAgICAgICAgICBpbnB1dHMsCiAgICAgICAgICAgIG5vZGUuaW5zdHJ1Y3Rpb25UeXBlLAogICAgICAgICAgICBub2RlLnR5cGVBcmd1bWVudHMpCiAgICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gbm9kZS5zb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgICBub2RlLmJsb2NrLmFkZEFmdGVyKGluc2VydGlvblBvaW50LCBjbG9zdXJlQ2FsbCk7CiAgICAgICAgcmV0dXJuIGNsb3N1cmVDYWxsOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBISW5zdHJ1Y3Rpb24gdHJ5SW5saW5lTmF0aXZlTWV0aG9kKAogICAgICBISW52b2tlRHluYW1pY01ldGhvZCBub2RlLCBGdW5jdGlvbkVudGl0eSBtZXRob2QpIHsKICAgIC8vIFdlIGNhbiByZXBsYWNlIHRoZSBjYWxsIHRvIHRoZSBuYXRpdmUgY2xhc3MgaW50ZXJjZXB0b3IgbWV0aG9kICh0YXJnZXQpCiAgICAvLyBpZiB0aGUgdGFyZ2V0IGRvZXMgbm8gY29udmVyc2lvbnMgb3IgdXNlZnVsIHR5cGUgY2hlY2tzLgogICAgaWYgKF9vcHRpb25zLmRpc2FibGVJbmxpbmluZykgcmV0dXJuIG51bGw7CiAgICBpZiAoX2Nsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YS5oYXNOb0lubGluZShtZXRob2QpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKCFub2RlLmlzSW50ZXJjZXB0ZWRDYWxsKSByZXR1cm4gbnVsbDsKCiAgICBGdW5jdGlvblR5cGUgdHlwZSA9IF9jbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlKG1ldGhvZCk7CiAgICBpZiAodHlwZS5uYW1lZFBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgcmV0dXJuIG51bGw7CgogICAgLy8gVGhlIGNhbGwgc2l0ZSBtaWdodCBvbWl0IG9wdGlvbmFsIGFyZ3VtZW50cy4gVGhlIGlubGluZWQgY29kZSBtdXN0CiAgICAvLyBwcmVzZXJ2ZSB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cywgc28gY2hlY2sgb25seSB0aGUgYWN0dWFsIGFyZ3VtZW50cy4KCiAgICBib29sIGNhbklubGluZSA9IHRydWU7CiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzID0gbm9kZS5pbnB1dHM7CiAgICBpbnQgaW5wdXRQb3NpdGlvbiA9IDI7IC8vIFNraXAgaW50ZXJjZXB0b3IgYW5kIHJlY2VpdmVyLgoKICAgIHZvaWQgY2hlY2tQYXJhbWV0ZXJUeXBlKERhcnRUeXBlIHBhcmFtZXRlclR5cGUpIHsKICAgICAgaWYgKCFjYW5JbmxpbmUpIHJldHVybjsKICAgICAgaWYgKGlucHV0UG9zaXRpb24gPj0gaW5wdXRzLmxlbmd0aCkgcmV0dXJuOwogICAgICBISW5zdHJ1Y3Rpb24gaW5wdXQgPSBpbnB1dHNbaW5wdXRQb3NpdGlvbisrXTsKICAgICAgaWYgKHBhcmFtZXRlclR5cGUudW5hbGlhc2VkLmlzRnVuY3Rpb25UeXBlKSB7CiAgICAgICAgLy8gTXVzdCBjYWxsIHRoZSB0YXJnZXQgc2luY2UgaXQgY29udGFpbnMgYSBmdW5jdGlvbiBjb252ZXJzaW9uLgogICAgICAgIGNhbklubGluZSA9IGZhbHNlOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgLy8gSWYgdGhlIHRhcmdldCBoYXMgbm8gY2hlY2tzIGRvbid0IGxldCBhIGJhZCB0eXBlIHN0b3AgdXMgaW5saW5pbmcuCiAgICAgIGlmICghX2Nsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YQogICAgICAgICAgLmdldFBhcmFtZXRlckNoZWNrUG9saWN5KG1ldGhvZCkKICAgICAgICAgIC5pc0VtaXR0ZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIEFic3RyYWN0VmFsdWUgcGFyYW1ldGVyQWJzdHJhY3RWYWx1ZSA9IF9hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAuZ2V0QWJzdHJhY3RWYWx1ZUZvck5hdGl2ZU1ldGhvZFBhcmFtZXRlclR5cGUocGFyYW1ldGVyVHlwZSk7CgogICAgICBpZiAocGFyYW1ldGVyQWJzdHJhY3RWYWx1ZSA9PSBudWxsIHx8CiAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgICAgICAgIC5pc0luKGlucHV0Lmluc3RydWN0aW9uVHlwZSwgcGFyYW1ldGVyQWJzdHJhY3RWYWx1ZSkKICAgICAgICAgICAgICAuaXNQb3RlbnRpYWxseUZhbHNlKSB7CiAgICAgICAgY2FuSW5saW5lID0gZmFsc2U7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CgogICAgdHlwZS5wYXJhbWV0ZXJUeXBlcy5mb3JFYWNoKGNoZWNrUGFyYW1ldGVyVHlwZSk7CiAgICB0eXBlLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMuZm9yRWFjaChjaGVja1BhcmFtZXRlclR5cGUpOwogICAgYXNzZXJ0KHR5cGUubmFtZWRQYXJhbWV0ZXJUeXBlcy5pc0VtcHR5KTsKCiAgICBpZiAoIWNhbklubGluZSkgcmV0dXJuIG51bGw7CgogICAgLy8gU3RyZW5ndGhlbiBpbnN0cnVjdGlvbiB0eXBlIGZyb20gYW5ub3RhdGlvbnMgdG8gaGVscCBvcHRpbWl6ZQogICAgLy8gZGVwZW5kZW50IGluc3RydWN0aW9ucy4KICAgIE5hdGl2ZUJlaGF2aW9yIG5hdGl2ZUJlaGF2aW9yID0gX25hdGl2ZURhdGEuZ2V0TmF0aXZlTWV0aG9kQmVoYXZpb3IobWV0aG9kKTsKICAgIEFic3RyYWN0VmFsdWUgcmV0dXJuVHlwZSA9CiAgICAgICAgQWJzdHJhY3RWYWx1ZUZhY3RvcnkuZnJvbU5hdGl2ZUJlaGF2aW9yKG5hdGl2ZUJlaGF2aW9yLCBfY2xvc2VkV29ybGQpOwogICAgSEludm9rZUR5bmFtaWNNZXRob2QgcmVzdWx0ID0gbmV3IEhJbnZva2VEeW5hbWljTWV0aG9kKAogICAgICAgIG5vZGUuc2VsZWN0b3IsCiAgICAgICAgbm9kZS5yZWNlaXZlclR5cGUsCiAgICAgICAgaW5wdXRzLnN1Ymxpc3QoMSksIC8vIERyb3AgaW50ZXJjZXB0b3IuCiAgICAgICAgcmV0dXJuVHlwZSwKICAgICAgICBub2RlLnR5cGVBcmd1bWVudHMsCiAgICAgICAgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICByZXN1bHQuZWxlbWVudCA9IG1ldGhvZDsKICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLm1ldGhvZElubGluaW5nKG1ldGhvZCwgbnVsbCkpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEJvdW5kc0NoZWNrKEhCb3VuZHNDaGVjayBub2RlKSB7CiAgICBISW5zdHJ1Y3Rpb24gaW5kZXggPSBub2RlLmluZGV4OwogICAgaWYgKGluZGV4LmlzSW50ZWdlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gbm9kZTsKICAgIH0KICAgIGlmIChpbmRleC5pc0NvbnN0YW50KCkpIHsKICAgICAgSENvbnN0YW50IGNvbnN0YW50SW5zdHJ1Y3Rpb24gPSBpbmRleDsKICAgICAgYXNzZXJ0KCFjb25zdGFudEluc3RydWN0aW9uLmNvbnN0YW50LmlzSW50KTsKICAgICAgaWYgKCFjb25zdGFudF9zeXN0ZW0uaXNJbnQoY29uc3RhbnRJbnN0cnVjdGlvbi5jb25zdGFudCkpIHsKICAgICAgICAvLyAtMC4wIGlzIGEgZG91YmxlIGJ1dCB3aWxsIHBhc3MgdGhlIHJ1bnRpbWUgaW50ZWdlciBjaGVjay4KICAgICAgICBub2RlLnN0YXRpY0NoZWNrcyA9IEhCb3VuZHNDaGVjay5BTFdBWVNfRkFMU0U7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBub2RlOwogIH0KCiAgSEluc3RydWN0aW9uIGZvbGRCaW5hcnkoY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24sCiAgICAgIEhJbnN0cnVjdGlvbiBsZWZ0LCBISW5zdHJ1Y3Rpb24gcmlnaHQpIHsKICAgIGlmIChsZWZ0IGlzIEhDb25zdGFudCAmJiByaWdodCBpcyBIQ29uc3RhbnQpIHsKICAgICAgSENvbnN0YW50IG9wMSA9IGxlZnQ7CiAgICAgIEhDb25zdGFudCBvcDIgPSByaWdodDsKICAgICAgQ29uc3RhbnRWYWx1ZSBmb2xkZWQgPSBvcGVyYXRpb24uZm9sZChvcDEuY29uc3RhbnQsIG9wMi5jb25zdGFudCk7CiAgICAgIGlmIChmb2xkZWQgIT0gbnVsbCkgcmV0dXJuIF9ncmFwaC5hZGRDb25zdGFudChmb2xkZWQsIF9jbG9zZWRXb3JsZCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEFkZChIQWRkIG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gbm9kZS5sZWZ0OwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gbm9kZS5yaWdodDsKICAgIC8vIFdlIGNhbiBvbmx5IHBlcmZvcm0gdGhpcyByZXdyaXRpbmcgb24gSW50ZWdlciwgYXMgaXQgaXMgbm90CiAgICAvLyB2YWxpZCBmb3IgLTAuMC4KICAgIGlmIChsZWZ0LmlzSW50ZWdlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgIHJpZ2h0LmlzSW50ZWdlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBpZiAobGVmdCBpcyBIQ29uc3RhbnQgJiYgbGVmdC5jb25zdGFudC5pc1plcm8pIHJldHVybiByaWdodDsKICAgICAgaWYgKHJpZ2h0IGlzIEhDb25zdGFudCAmJiByaWdodC5jb25zdGFudC5pc1plcm8pIHJldHVybiBsZWZ0OwogICAgfQogICAgcmV0dXJuIHN1cGVyLnZpc2l0QWRkKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0TXVsdGlwbHkoSE11bHRpcGx5IG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gbm9kZS5sZWZ0OwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gbm9kZS5yaWdodDsKICAgIGlmIChsZWZ0LmlzTnVtYmVyKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgcmlnaHQuaXNOdW1iZXIoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgaWYgKGxlZnQgaXMgSENvbnN0YW50ICYmIGxlZnQuY29uc3RhbnQuaXNPbmUpIHJldHVybiByaWdodDsKICAgICAgaWYgKHJpZ2h0IGlzIEhDb25zdGFudCAmJiByaWdodC5jb25zdGFudC5pc09uZSkgcmV0dXJuIGxlZnQ7CiAgICB9CiAgICByZXR1cm4gc3VwZXIudmlzaXRNdWx0aXBseShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEludm9rZUJpbmFyeShISW52b2tlQmluYXJ5IG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gbm9kZS5sZWZ0OwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gbm9kZS5yaWdodDsKICAgIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uID0gbm9kZS5vcGVyYXRpb24oKTsKICAgIEhDb25zdGFudCBmb2xkZWQgPSBmb2xkQmluYXJ5KG9wZXJhdGlvbiwgbGVmdCwgcmlnaHQpOwogICAgaWYgKGZvbGRlZCAhPSBudWxsKSByZXR1cm4gZm9sZGVkOwogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRSZWxhdGlvbmFsKEhSZWxhdGlvbmFsIG5vZGUpIHsKICAgIHJldHVybiBzdXBlci52aXNpdFJlbGF0aW9uYWwobm9kZSk7CiAgfQoKICBISW5zdHJ1Y3Rpb24gaGFuZGxlSWRlbnRpdHlDaGVjayhIUmVsYXRpb25hbCBub2RlKSB7CiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IG5vZGUubGVmdDsKICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IG5vZGUucmlnaHQ7CiAgICBBYnN0cmFjdFZhbHVlIGxlZnRUeXBlID0gbGVmdC5pbnN0cnVjdGlvblR5cGU7CiAgICBBYnN0cmFjdFZhbHVlIHJpZ2h0VHlwZSA9IHJpZ2h0Lmluc3RydWN0aW9uVHlwZTsKCiAgICBISW5zdHJ1Y3Rpb24gbWFrZVRydWUoKSA9PiBfZ3JhcGguYWRkQ29uc3RhbnRCb29sKHRydWUsIF9jbG9zZWRXb3JsZCk7CiAgICBISW5zdHJ1Y3Rpb24gbWFrZUZhbHNlKCkgPT4gX2dyYXBoLmFkZENvbnN0YW50Qm9vbChmYWxzZSwgX2Nsb3NlZFdvcmxkKTsKCiAgICAvLyBJbnRlcnNlY3Rpb24gb2YgaW50IGFuZCBkb3VibGUgcmV0dXJuIGNvbmZsaWN0aW5nLCBzbwogICAgLy8gd2UgZG9uJ3Qgb3B0aW1pemUgb24gbnVtYmVycyB0byBwcmVzZXJ2ZSB0aGUgcnVudGltZSBzZW1hbnRpY3MuCiAgICBpZiAoIShsZWZ0LmlzTnVtYmVyT3JOdWxsKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgcmlnaHQuaXNOdW1iZXJPck51bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpKSB7CiAgICAgIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgICAgLmFyZURpc2pvaW50KGxlZnRUeXBlLCByaWdodFR5cGUpCiAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIHJldHVybiBtYWtlRmFsc2UoKTsKICAgICAgfQogICAgfQoKICAgIGlmIChsZWZ0LmlzTnVsbChfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgIHJpZ2h0LmlzTnVsbChfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gbWFrZVRydWUoKTsKICAgIH0KCiAgICBISW5zdHJ1Y3Rpb24gY29tcGFyZUNvbnN0YW50KEhDb25zdGFudCBjb25zdGFudCwgSEluc3RydWN0aW9uIGlucHV0KSB7CiAgICAgIGlmIChjb25zdGFudC5jb25zdGFudC5pc1RydWUpIHsKICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG5ldyBITm90KGlucHV0LCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSk7CiAgICAgIH0KICAgIH0KCiAgICBpZiAobGVmdC5pc0NvbnN0YW50Qm9vbGVhbigpICYmCiAgICAgICAgcmlnaHQuaXNCb29sZWFuKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBjb21wYXJlQ29uc3RhbnQobGVmdCwgcmlnaHQpOwogICAgfQoKICAgIGlmIChyaWdodC5pc0NvbnN0YW50Qm9vbGVhbigpICYmCiAgICAgICAgbGVmdC5pc0Jvb2xlYW4oX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIGNvbXBhcmVDb25zdGFudChyaWdodCwgbGVmdCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChsZWZ0Lm5vbkNoZWNrKCksIHJpZ2h0Lm5vbkNoZWNrKCkpKSB7CiAgICAgIC8vIEF2b2lkIGNvbnN0YW50LWZvbGRpbmcgYGlkZW50aWNhbCh4LCB4KWAgd2hlbiBgeGAgbWlnaHQgYmUgZG91YmxlLiAgVGhlCiAgICAgIC8vIGRhcnQyanMgcnVudGltZSBoYXMgbm90IGFsd2F5cyBiZWVuIGNvbnNpc3RlbnQgd2l0aCB0aGUgRGFydAogICAgICAvLyBzcGVjaWZpY2F0aW9uIChzZWN0aW9uIDE2LjAuMSksIHdoaWNoIG1ha2VzIGRpc3RpbmN0aW9ucyBvbiBOYU5zIGFuZAogICAgICAvLyAtMC4wIHRoYXQgYXJlIGhhcmQgdG8gaW1wbGVtZW50IGVmZmljaWVudGx5LgogICAgICBpZiAobGVmdC5pc0ludGVnZXJPck51bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICByZXR1cm4gbWFrZVRydWUoKTsKICAgICAgfQogICAgICBpZiAobGVmdC5pc1ByaW1pdGl2ZU51bWJlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5RmFsc2UpIHsKICAgICAgICByZXR1cm4gbWFrZVRydWUoKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0SWRlbnRpdHkoSElkZW50aXR5IG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiBuZXdJbnN0cnVjdGlvbiA9IGhhbmRsZUlkZW50aXR5Q2hlY2sobm9kZSk7CiAgICByZXR1cm4gbmV3SW5zdHJ1Y3Rpb24gPT0gbnVsbCA/IHN1cGVyLnZpc2l0SWRlbnRpdHkobm9kZSkgOiBuZXdJbnN0cnVjdGlvbjsKICB9CgogIHZvaWQgc2ltcGxpZnlDb25kaXRpb24oCiAgICAgIEhCYXNpY0Jsb2NrIGJsb2NrLCBISW5zdHJ1Y3Rpb24gY29uZGl0aW9uLCBib29sIHZhbHVlKSB7CiAgICAvLyBgZXhjbHVkZVBoaU91dEVkZ2VzOiB0cnVlYCBwcmV2ZW50cyByZXBsYWNpbmcgYSBwYXJ0aWFsbHkgZG9taW5hdGVkIHBoaQogICAgLy8gbm9kZSBpbnB1dCB3aXRoIGEgY29uc3RhbnQuIFRoaXMgdGVuZHMgdG8gYWRkIHVubmVjZXNzYXJ5IGFzc2lnbm1lbnRzLCBieQogICAgLy8gdHJhbnNmb3JtaW5nIHRoZSBmb2xsb3dpbmcsIHdoaWNoIGhhcyBwaGkoZmFsc2UsIHgpLAogICAgLy8KICAgIC8vICAgIGlmICh4KSB7IGluaXQoKTsgeCA9IGZhbHNlOyB9CiAgICAvLwogICAgLy8gaW50byB0aGlzLCB3aGljaCBoYXMgcGhpKGZhbHNlLCBmYWxzZSkKICAgIC8vCiAgICAvLyAgICBpZiAoeCkgeyBpbml0KCk7IHggPSBmYWxzZTsgfSBlbHNlIHsgeCA9IGZhbHNlOyB9CiAgICAvLwogICAgLy8gd2hpY2ggaXMgZnVydGhlciBzaW1wbGlmaWVkIHRvOgogICAgLy8KICAgIC8vICAgIGlmICh4KSB7IGluaXQoKTsgfQogICAgLy8gICAgLi4uCiAgICAvLyAgICB4ID0gZmFsc2U7CiAgICAvLwogICAgLy8gVGhpcyBpcyBtb3N0bHkgaGFybWxlc3MgKGlmIGEgbGl0dGxlIGNvbmZ1c2luZykgYnV0IGRvZXMgY2F1c2UgYSBsb3Qgb2YKICAgIC8vIGB4ID0gZmFsc2U7YCBjb3BpZXMgdG8gYmUgaW5zZXJ0ZWQgd2hlbiBhIGxvb3AgYm9keSBoYXMgbWFueSBjb250aW51ZQogICAgLy8gc3RhdGVtZW50cyBvciBlbmRzIHdpdGggYSBzd2l0Y2guCiAgICBEb21pbmF0ZWRVc2VzIHVzZXMgPQogICAgICAgIERvbWluYXRlZFVzZXMub2YoY29uZGl0aW9uLCBibG9jay5maXJzdCwgZXhjbHVkZVBoaU91dEVkZ2VzOiB0cnVlKTsKICAgIGlmICh1c2VzLmlzRW1wdHkpIHJldHVybjsKICAgIHVzZXMucmVwbGFjZVdpdGgoX2dyYXBoLmFkZENvbnN0YW50Qm9vbCh2YWx1ZSwgX2Nsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRJZihISWYgbm9kZSkgewogICAgSEluc3RydWN0aW9uIGNvbmRpdGlvbiA9IG5vZGUuY29uZGl0aW9uOwogICAgaWYgKGNvbmRpdGlvbi5pc0NvbnN0YW50KCkpIHJldHVybiBub2RlOwogICAgYm9vbCBpc05lZ2F0ZWQgPSBjb25kaXRpb24gaXMgSE5vdDsKCiAgICBpZiAoaXNOZWdhdGVkKSB7CiAgICAgIGNvbmRpdGlvbiA9IGNvbmRpdGlvbi5pbnB1dHNbMF07CiAgICB9IGVsc2UgewogICAgICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgTElDTSB0byBtb3ZlIGEgbmVnYXRlZCB2ZXJzaW9uIG9mIHRoZQogICAgICAvLyBjb25kaXRpb24gb3V0IG9mIHRoZSBsb29wIHdoZXJlIGl0IHVzZWQuIFdlIHN0aWxsIHdhbnQgdG8KICAgICAgLy8gc2ltcGxpZnkgdGhlIG5lc3RlZCB1c2Ugb2YgdGhlIGNvbmRpdGlvbiBpbiB0aGF0IGNhc2UsIHNvCiAgICAgIC8vIHdlIGxvb2sgZm9yIGFsbCBkb21pbmF0aW5nIG5lZ2F0ZWQgY29uZGl0aW9ucyBhbmQgcmVwbGFjZQogICAgICAvLyBuZXN0ZWQgdXNlcyBvZiB0aGVtIHdpdGggdHJ1ZSBvciBmYWxzZS4KICAgICAgSXRlcmFibGU8SEluc3RydWN0aW9uPiBkb21pbmF0aW5nID0gY29uZGl0aW9uLnVzZWRCeQogICAgICAgICAgLndoZXJlKCh1c2VyKSA9PiB1c2VyIGlzIEhOb3QgJiYgdXNlci5kb21pbmF0ZXMobm9kZSkpOwogICAgICBkb21pbmF0aW5nLmZvckVhY2goKGhvaXN0ZWQpIHsKICAgICAgICBzaW1wbGlmeUNvbmRpdGlvbihub2RlLnRoZW5CbG9jaywgaG9pc3RlZCwgZmFsc2UpOwogICAgICAgIHNpbXBsaWZ5Q29uZGl0aW9uKG5vZGUuZWxzZUJsb2NrLCBob2lzdGVkLCB0cnVlKTsKICAgICAgfSk7CiAgICB9CiAgICBzaW1wbGlmeUNvbmRpdGlvbihub2RlLnRoZW5CbG9jaywgY29uZGl0aW9uLCAhaXNOZWdhdGVkKTsKICAgIHNpbXBsaWZ5Q29uZGl0aW9uKG5vZGUuZWxzZUJsb2NrLCBjb25kaXRpb24sIGlzTmVnYXRlZCk7CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdElzKEhJcyBub2RlKSB7CiAgICBEYXJ0VHlwZSB0eXBlID0gbm9kZS50eXBlRXhwcmVzc2lvbjsKCiAgICBpZiAoIW5vZGUuaXNSYXdDaGVjaykgewogICAgICByZXR1cm4gbm9kZTsKICAgIH0gZWxzZSBpZiAodHlwZS5pc1R5cGVkZWYpIHsKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9IGVsc2UgaWYgKHR5cGUuaXNGdW5jdGlvblR5cGUpIHsKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9IGVsc2UgaWYgKHR5cGUuaXNGdXR1cmVPcikgewogICAgICByZXR1cm4gbm9kZTsKICAgIH0KCiAgICBpZiAodHlwZSA9PSBjb21tb25FbGVtZW50cy5vYmplY3RUeXBlIHx8IHR5cGUudHJlYXRBc0R5bmFtaWMpIHsKICAgICAgcmV0dXJuIF9ncmFwaC5hZGRDb25zdGFudEJvb2wodHJ1ZSwgX2Nsb3NlZFdvcmxkKTsKICAgIH0KICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlVHlwZSA9IHR5cGU7CiAgICBDbGFzc0VudGl0eSBlbGVtZW50ID0gaW50ZXJmYWNlVHlwZS5lbGVtZW50OwogICAgSEluc3RydWN0aW9uIGV4cHJlc3Npb24gPSBub2RlLmV4cHJlc3Npb247CiAgICBpZiAoZXhwcmVzc2lvbi5pc0ludGVnZXIoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuaW50Q2xhc3MgfHwKICAgICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMubnVtQ2xhc3MgfHwKICAgICAgICAgIGNvbW1vbkVsZW1lbnRzLmlzTnVtYmVyT3JTdHJpbmdTdXBlcnR5cGUoZWxlbWVudCkpIHsKICAgICAgICByZXR1cm4gX2dyYXBoLmFkZENvbnN0YW50Qm9vbCh0cnVlLCBfY2xvc2VkV29ybGQpOwogICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuZG91YmxlQ2xhc3MpIHsKICAgICAgICAvLyBXZSBsZXQgdGhlIEpTIHNlbWFudGljcyBkZWNpZGUgZm9yIHRoYXQgY2hlY2suIEN1cnJlbnRseQogICAgICAgIC8vIHRoZSBjb2RlIHdlIGVtaXQgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUuCiAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIF9ncmFwaC5hZGRDb25zdGFudEJvb2woZmFsc2UsIF9jbG9zZWRXb3JsZCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5pc0RvdWJsZShfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBpZiAoZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5kb3VibGVDbGFzcyB8fAogICAgICAgICAgZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5udW1DbGFzcyB8fAogICAgICAgICAgY29tbW9uRWxlbWVudHMuaXNOdW1iZXJPclN0cmluZ1N1cGVydHlwZShlbGVtZW50KSkgewogICAgICAgIHJldHVybiBfZ3JhcGguYWRkQ29uc3RhbnRCb29sKHRydWUsIF9jbG9zZWRXb3JsZCk7CiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5pbnRDbGFzcykgewogICAgICAgIC8vIFdlIGxldCB0aGUgSlMgc2VtYW50aWNzIGRlY2lkZSBmb3IgdGhhdCBjaGVjay4gQ3VycmVudGx5CiAgICAgICAgLy8gdGhlIGNvZGUgd2UgZW1pdCB3aWxsIHJldHVybiB0cnVlIGZvciBhIGRvdWJsZSB0aGF0IGNhbiBiZQogICAgICAgIC8vIHJlcHJlc2VudGVkIGFzIGEgMzEtYml0IGludGVnZXIgYW5kIGZvciAtMC4wLgogICAgICAgIHJldHVybiBub2RlOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBfZ3JhcGguYWRkQ29uc3RhbnRCb29sKGZhbHNlLCBfY2xvc2VkV29ybGQpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24uaXNOdW1iZXIoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMubnVtQ2xhc3MpIHsKICAgICAgICByZXR1cm4gX2dyYXBoLmFkZENvbnN0YW50Qm9vbCh0cnVlLCBfY2xvc2VkV29ybGQpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFdlIGNhbm5vdCBqdXN0IHJldHVybiBmYWxzZSwgYmVjYXVzZSB0aGUgZXhwcmVzc2lvbiBtYXkgYmUgb2YKICAgICAgICAvLyB0eXBlIGludCBvciBkb3VibGUuCiAgICAgIH0KICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbgogICAgICAgICAgICAuaXNQcmltaXRpdmVOdW1iZXIoX2Fic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgIC5pc1BvdGVudGlhbGx5VHJ1ZSAmJgogICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuaW50Q2xhc3MpIHsKICAgICAgLy8gV2UgbGV0IHRoZSBKUyBzZW1hbnRpY3MgZGVjaWRlIGZvciB0aGF0IGNoZWNrLgogICAgICByZXR1cm4gbm9kZTsKICAgICAgLy8gV2UgbmVlZCB0aGUgWzpoYXNUeXBlQXJndW1lbnRzOl0gY2hlY2sgYmVjYXVzZSB3ZSBkb24ndCBoYXZlCiAgICAgIC8vIHRoZSBub3Rpb24gb2YgZ2VuZXJpY3MgaW4gdGhlIGJhY2tlbmQuIEZvciBleGFtcGxlLCBbOnRoaXM6XSBpbgogICAgICAvLyBhIGNsYXNzIFs6QTxUPjpdLCBpcyBjdXJyZW50bHkgYWx3YXlzIGNvbnNpZGVyZWQgdG8gaGF2ZSB0aGUKICAgICAgLy8gcmF3IHR5cGUuCiAgICB9IGVsc2UgaWYgKCFSdW50aW1lVHlwZXNTdWJzdGl0dXRpb25zLmhhc1R5cGVBcmd1bWVudHModHlwZSkpIHsKICAgICAgQWJzdHJhY3RWYWx1ZSBleHByZXNzaW9uTWFzayA9IGV4cHJlc3Npb24uaW5zdHJ1Y3Rpb25UeXBlOwogICAgICBBYnN0cmFjdEJvb2wgaXNJbnN0YW5jZU9mID0KICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzSW5zdGFuY2VPZihleHByZXNzaW9uTWFzaywgZWxlbWVudCk7CiAgICAgIGlmIChpc0luc3RhbmNlT2YuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIHJldHVybiBfZ3JhcGguYWRkQ29uc3RhbnRCb29sKHRydWUsIF9jbG9zZWRXb3JsZCk7CiAgICAgIH0gZWxzZSBpZiAoaXNJbnN0YW5jZU9mLmlzRGVmaW5pdGVseUZhbHNlKSB7CiAgICAgICAgcmV0dXJuIF9ncmFwaC5hZGRDb25zdGFudEJvb2woZmFsc2UsIF9jbG9zZWRXb3JsZCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBub2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0VHlwZUNvbnZlcnNpb24oSFR5cGVDb252ZXJzaW9uIG5vZGUpIHsKICAgIGlmIChub2RlLmlzUmVkdW5kYW50KF9jbG9zZWRXb3JsZCkpIHJldHVybiBub2RlLmNoZWNrZWRJbnB1dDsKCiAgICAvLyBTaW1wbGlmeSAnYXMgVCcgd2hlcmUgVCBpcyBhIHNpbXBsZSB0eXBlLgogICAgRGFydFR5cGUgY2hlY2tlZFR5cGUgPSBub2RlLnR5cGVFeHByZXNzaW9uOwogICAgaWYgKGNoZWNrZWRUeXBlIGlzIFR5cGVWYXJpYWJsZVR5cGUgJiYgbm9kZS5pbnB1dHMubGVuZ3RoID09IDIpIHsKICAgICAgSEluc3RydWN0aW9uIHJlcCA9IG5vZGUudHlwZVJlcHJlc2VudGF0aW9uOwogICAgICBpZiAocmVwIGlzIEhUeXBlSW5mb0V4cHJlc3Npb24gJiYKICAgICAgICAgIHJlcC5raW5kID09IFR5cGVJbmZvRXhwcmVzc2lvbktpbmQuQ09NUExFVEUgJiYKICAgICAgICAgIHJlcC5pbnB1dHMuaXNFbXB0eSkgewogICAgICAgIERhcnRUeXBlIHR5cGUgPSByZXAuZGFydFR5cGU7CiAgICAgICAgaWYgKHR5cGUuaXNJbnRlcmZhY2VUeXBlICYmIHR5cGUudHJlYXRBc1JhdykgewogICAgICAgICAgcmV0dXJuIG5vZGUuY2hlY2tlZElucHV0LmNvbnZlcnRUeXBlKF9jbG9zZWRXb3JsZCwgdHlwZSwgbm9kZS5raW5kKQogICAgICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gbm9kZS5zb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdFByaW1pdGl2ZUNoZWNrKEhQcmltaXRpdmVDaGVjayBub2RlKSB7CiAgICBpZiAobm9kZS5pc1JlZHVuZGFudChfY2xvc2VkV29ybGQpKSByZXR1cm4gbm9kZS5jaGVja2VkSW5wdXQ7CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEJvb2xDb252ZXJzaW9uKEhCb29sQ29udmVyc2lvbiBub2RlKSB7CiAgICBpZiAobm9kZS5pc1JlZHVuZGFudChfY2xvc2VkV29ybGQpKSByZXR1cm4gbm9kZS5jaGVja2VkSW5wdXQ7CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdFR5cGVLbm93bihIVHlwZUtub3duIG5vZGUpIHsKICAgIHJldHVybiBub2RlLmlzUmVkdW5kYW50KF9jbG9zZWRXb3JsZCkgPyBub2RlLmNoZWNrZWRJbnB1dCA6IG5vZGU7CiAgfQoKICBGaWVsZEVudGl0eSBmaW5kQ29uY3JldGVGaWVsZEZvckR5bmFtaWNBY2Nlc3MoCiAgICAgIEhJbnZva2VEeW5hbWljRmllbGQgbm9kZSwgSEluc3RydWN0aW9uIHJlY2VpdmVyKSB7CiAgICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZSA9IHJlY2VpdmVyLmluc3RydWN0aW9uVHlwZTsKICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBub2RlLmVsZW1lbnQgaXMgRmllbGRFbnRpdHkKICAgICAgICA/IG5vZGUuZWxlbWVudAogICAgICAgIDogX2Nsb3NlZFdvcmxkLmxvY2F0ZVNpbmdsZU1lbWJlcihub2RlLnNlbGVjdG9yLCByZWNlaXZlclR5cGUpOwogICAgcmV0dXJuIG1lbWJlciBpcyBGaWVsZEVudGl0eSA/IG1lbWJlciA6IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRGaWVsZEdldChIRmllbGRHZXQgbm9kZSkgewogICAgaWYgKG5vZGUuaXNOdWxsQ2hlY2spIHJldHVybiBub2RlOwogICAgdmFyIHJlY2VpdmVyID0gbm9kZS5yZWNlaXZlcjsKCiAgICAvLyBIRmllbGRHZXQgb2YgYSBjb25zdHJ1Y3RlZCBjb25zdGFudCBjYW4gYmUgcmVwbGFjZWQgd2l0aCB0aGUgY29uc3RhbnQncwogICAgLy8gZmllbGQuCiAgICBpZiAocmVjZWl2ZXIgaXMgSENvbnN0YW50KSB7CiAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSByZWNlaXZlci5jb25zdGFudDsKICAgICAgaWYgKGNvbnN0YW50LmlzQ29uc3RydWN0ZWRPYmplY3QpIHsKICAgICAgICBDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUgY29uc3RydWN0ZWRDb25zdGFudCA9IGNvbnN0YW50OwogICAgICAgIE1hcDxGaWVsZEVudGl0eSwgQ29uc3RhbnRWYWx1ZT4gZmllbGRzID0gY29uc3RydWN0ZWRDb25zdGFudC5maWVsZHM7CiAgICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IGZpZWxkc1tub2RlLmVsZW1lbnRdOwogICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgICAgICByZXR1cm4gX2dyYXBoLmFkZENvbnN0YW50KHZhbHVlLCBfY2xvc2VkV29ybGQpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHJldHVybiBub2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0R2V0TGVuZ3RoKEhHZXRMZW5ndGggbm9kZSkgewogICAgSEluc3RydWN0aW9uIHJlY2VpdmVyID0gbm9kZS5yZWNlaXZlcjsKICAgIGlmIChfZ3JhcGguYWxsb2NhdGVkRml4ZWRMaXN0cy5jb250YWlucyhyZWNlaXZlcikpIHsKICAgICAgLy8gVE9ETyhuZ2VvZmZyYXkpOiBjaGVja2luZyBpZiB0aGUgc2Vjb25kIGlucHV0IGlzIGFuIGludGVnZXIKICAgICAgLy8gc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgYnV0IGl0IGN1cnJlbnRseSBtYWtlcyBpdCBlYXNpZXIgZm9yCiAgICAgIC8vIG90aGVyIG9wdGltaXphdGlvbnMgdG8gcmVhc29uIGFib3V0IGEgZml4ZWQgbGVuZ3RoIGNvbnN0cnVjdG9yCiAgICAgIC8vIHRoYXQgd2Uga25vdyB0YWtlcyBhbiBpbnQuCiAgICAgIGlmIChyZWNlaXZlci5pbnB1dHNbMF0uaXNJbnRlZ2VyKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgcmV0dXJuIHJlY2VpdmVyLmlucHV0c1swXTsKICAgICAgfQogICAgfSBlbHNlIGlmIChyZWNlaXZlci5pc0NvbnN0YW50TGlzdCgpKSB7CiAgICAgIEhDb25zdGFudCBjb25zdGFudFJlY2VpdmVyID0gcmVjZWl2ZXI7CiAgICAgIExpc3RDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gY29uc3RhbnRSZWNlaXZlci5jb25zdGFudDsKICAgICAgcmV0dXJuIF9ncmFwaC5hZGRDb25zdGFudEludChjb25zdGFudC5sZW5ndGgsIF9jbG9zZWRXb3JsZCk7CiAgICB9IGVsc2UgaWYgKHJlY2VpdmVyLmlzQ29uc3RhbnRTdHJpbmcoKSkgewogICAgICBIQ29uc3RhbnQgY29uc3RhbnRSZWNlaXZlciA9IHJlY2VpdmVyOwogICAgICBTdHJpbmdDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gY29uc3RhbnRSZWNlaXZlci5jb25zdGFudDsKICAgICAgcmV0dXJuIF9ncmFwaC5hZGRDb25zdGFudEludChjb25zdGFudC5sZW5ndGgsIF9jbG9zZWRXb3JsZCk7CiAgICB9IGVsc2UgewogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUgPSByZWNlaXZlci5pbnN0cnVjdGlvblR5cGU7CiAgICAgIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0NvbnRhaW5lcih0eXBlKSAmJgogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZ2V0Q29udGFpbmVyTGVuZ3RoKHR5cGUpICE9IG51bGwpIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gY29uc3RhbnQgPSBfZ3JhcGguYWRkQ29uc3RhbnRJbnQoCiAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmdldENvbnRhaW5lckxlbmd0aCh0eXBlKSwgX2Nsb3NlZFdvcmxkKTsKICAgICAgICBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4uaXNOdWxsKHR5cGUpLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgICAgICAvLyBJZiB0aGUgY29udGFpbmVyIGNhbiBiZSBudWxsLCB3ZSB1cGRhdGUgYWxsIHVzZXMgb2YgdGhlIGxlbmd0aAogICAgICAgICAgLy8gYWNjZXNzIHRvIHVzZSB0aGUgY29uc3RhbnQgaW5zdGVhZCwgYnV0IGtlZXAgdGhlIGxlbmd0aCBhY2Nlc3MgaW4KICAgICAgICAgIC8vIHRoZSBncmFwaCwgdG8gZW5zdXJlIHdlIHN0aWxsIGhhdmUgYSBudWxsIGNoZWNrLgogICAgICAgICAgbm9kZS5ibG9jay5yZXdyaXRlKG5vZGUsIGNvbnN0YW50KTsKICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gY29uc3RhbnQ7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgaWYgKG5vZGUuaXNBc3NpZ25hYmxlICYmCiAgICAgICAgaXNGaXhlZExlbmd0aChyZWNlaXZlci5pbnN0cnVjdGlvblR5cGUsIF9jbG9zZWRXb3JsZCkpIHsKICAgICAgLy8gVGhlIGlucHV0IHR5cGUgaGFzIGNoYW5nZWQgdG8gZml4ZWQtbGVuZ3RoIHNvIGNoYW5nZSB0byBhbiB1bmFzc2lnbmFibGUKICAgICAgLy8gSEdldExlbmd0aCB0byBhbGxvdyBtb3JlIEdWTiBvcHRpbWl6YXRpb25zLgogICAgICByZXR1cm4gbmV3IEhHZXRMZW5ndGgocmVjZWl2ZXIsIG5vZGUuaW5zdHJ1Y3Rpb25UeXBlLAogICAgICAgICAgaXNBc3NpZ25hYmxlOiBmYWxzZSk7CiAgICB9CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEluZGV4KEhJbmRleCBub2RlKSB7CiAgICBpZiAobm9kZS5yZWNlaXZlci5pc0NvbnN0YW50TGlzdCgpICYmIG5vZGUuaW5kZXguaXNDb25zdGFudEludGVnZXIoKSkgewogICAgICBIQ29uc3RhbnQgaW5zdHJ1Y3Rpb24gPSBub2RlLnJlY2VpdmVyOwogICAgICBMaXN0Q29uc3RhbnRWYWx1ZSBsaXN0ID0gaW5zdHJ1Y3Rpb24uY29uc3RhbnQ7CiAgICAgIExpc3Q8Q29uc3RhbnRWYWx1ZT4gZW50cmllcyA9IGxpc3QuZW50cmllczsKICAgICAgSENvbnN0YW50IGluZGV4SW5zdHJ1Y3Rpb24gPSBub2RlLmluZGV4OwogICAgICBJbnRDb25zdGFudFZhbHVlIGluZGV4Q29uc3RhbnQgPSBpbmRleEluc3RydWN0aW9uLmNvbnN0YW50OwogICAgICBpbnQgaW5kZXggPSBpbmRleENvbnN0YW50LmludFZhbHVlLnRvSW50KCk7CiAgICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgZW50cmllcy5sZW5ndGgpIHsKICAgICAgICByZXR1cm4gX2dyYXBoLmFkZENvbnN0YW50KGVudHJpZXNbaW5kZXhdLCBfY2xvc2VkV29ybGQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEludm9rZUR5bmFtaWNHZXR0ZXIoSEludm9rZUR5bmFtaWNHZXR0ZXIgbm9kZSkgewogICAgcHJvcGFnYXRlQ29uc3RhbnRWYWx1ZVRvVXNlcyhub2RlKTsKICAgIGlmIChub2RlLmlzSW50ZXJjZXB0ZWRDYWxsKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBmb2xkZWQgPSBoYW5kbGVJbnRlcmNlcHRlZENhbGwobm9kZSk7CiAgICAgIGlmIChmb2xkZWQgIT0gbm9kZSkgcmV0dXJuIGZvbGRlZDsKICAgIH0KICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciA9IG5vZGUuZ2V0RGFydFJlY2VpdmVyKF9jbG9zZWRXb3JsZCk7CiAgICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZSA9IHJlY2VpdmVyLmluc3RydWN0aW9uVHlwZTsKICAgIEZpZWxkRW50aXR5IGZpZWxkID0gbm9kZS5lbGVtZW50IGlzIEZpZWxkRW50aXR5CiAgICAgICAgPyBub2RlLmVsZW1lbnQKICAgICAgICA6IGZpbmRDb25jcmV0ZUZpZWxkRm9yRHluYW1pY0FjY2Vzcyhub2RlLCByZWNlaXZlcik7CiAgICBpZiAoZmllbGQgIT0gbnVsbCkgewogICAgICBGaWVsZEFuYWx5c2lzRGF0YSBmaWVsZERhdGEgPQogICAgICAgICAgX2Nsb3NlZFdvcmxkLmZpZWxkQW5hbHlzaXMuZ2V0RmllbGREYXRhKGZpZWxkKTsKICAgICAgaWYgKGZpZWxkRGF0YS5pc0VmZmVjdGl2ZWx5Q29uc3RhbnQpIHsKICAgICAgICAvLyBUaGUgZmllbGQgaXMgZWxpZGVkIGFuZCByZXBsYWNlIGl0IHdpdGggaXRzIGNvbnN0YW50IHZhbHVlLgogICAgICAgIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc051bGwocmVjZWl2ZXJUeXBlKS5pc1BvdGVudGlhbGx5VHJ1ZSkgewogICAgICAgICAgLy8gVGhlIHJlY2VpdmVyIGlzIHBvdGVudGlhbGx5IGBudWxsYCBzbyB3ZSBpbnNlcnQgYSBudWxsIHJlY2VpdmVyCiAgICAgICAgICAvLyBndWFyZCB0byB0cmlnZ2VyIGEgbnVsbCBwb2ludGVyIGV4Y2VwdGlvbi4KICAgICAgICAgIC8vCiAgICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIGluc2VydGVkIHVuY29uZGl0aW9uYWxseSBhbmQgcmVtb3ZlZCBieSBsYXRlcgogICAgICAgICAgLy8gb3B0aW1pemF0aW9ucyBpZiB1bm5lY2Vzc2FyeSwgYnV0IHBlcmZvcm1hbmNlIHdlIGRvIGl0CiAgICAgICAgICAvLyBjb25kaXRpb25hbGx5IGhlcmUuCiAgICAgICAgICAvLyBUT0RPKDM1OTk2KTogUmVwbGFjZSB3aXRoIG51bGwgcmVjZWl2ZXIgZ3VhcmQgaW5zdHJ1Y3Rpb24uCiAgICAgICAgICBISW5zdHJ1Y3Rpb24gZHVtbXlHZXQgPSBuZXcgSEZpZWxkR2V0KG51bGwsIHJlY2VpdmVyLAogICAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgICAgICAgIGlzQXNzaWduYWJsZTogZmFsc2UpOwogICAgICAgICAgX2xvZz8ucmVnaXN0ZXJGaWVsZEdldChub2RlLCBkdW1teUdldCk7CiAgICAgICAgICBub2RlLmJsb2NrLmFkZEJlZm9yZShub2RlLCBkdW1teUdldCk7CiAgICAgICAgfQogICAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSBmaWVsZERhdGEuY29uc3RhbnRWYWx1ZTsKICAgICAgICBIQ29uc3RhbnQgcmVzdWx0ID0gX2dyYXBoLmFkZENvbnN0YW50KGNvbnN0YW50LCBfY2xvc2VkV29ybGQsCiAgICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICBfbG9nPy5yZWdpc3RlckNvbnN0YW50RmllbGRHZXQobm9kZSwgZmllbGQsIHJlc3VsdCk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfSBlbHNlIHsKICAgICAgICBIRmllbGRHZXQgcmVzdWx0ID0gX2RpcmVjdEZpZWxkR2V0KHJlY2VpdmVyLCBmaWVsZCwgbm9kZSk7CiAgICAgICAgX2xvZz8ucmVnaXN0ZXJGaWVsZEdldChub2RlLCByZXN1bHQpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgIH0KCiAgICBub2RlLmVsZW1lbnQgPz89CiAgICAgICAgX2Nsb3NlZFdvcmxkLmxvY2F0ZVNpbmdsZU1lbWJlcihub2RlLnNlbGVjdG9yLCByZWNlaXZlclR5cGUpOwogICAgaWYgKG5vZGUuZWxlbWVudCAhPSBudWxsICYmCiAgICAgICAgbm9kZS5lbGVtZW50Lm5hbWUgPT0gbm9kZS5zZWxlY3Rvci5uYW1lICYmCiAgICAgICAgbm9kZS5lbGVtZW50LmlzRnVuY3Rpb24pIHsKICAgICAgLy8gQSBwcm9wZXJ0eSBleHRyYWN0aW9uIGdldHRlciwgYWthIGEgdGVhci1vZmYuCiAgICAgIG5vZGUuc2lkZUVmZmVjdHMuY2xlYXJBbGxEZXBlbmRlbmNpZXMoKTsKICAgICAgbm9kZS5zaWRlRWZmZWN0cy5jbGVhckFsbFNpZGVFZmZlY3RzKCk7CiAgICAgIG5vZGUuc2V0VXNlR3ZuKCk7IC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgaWRlbnRpdHkgb2YgdGVhci1vZmZzLgogICAgfQogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBISW5zdHJ1Y3Rpb24gX2RpcmVjdEZpZWxkR2V0KAogICAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIsIEZpZWxkRW50aXR5IGZpZWxkLCBISW5zdHJ1Y3Rpb24gbm9kZSkgewogICAgYm9vbCBpc0Fzc2lnbmFibGUgPSAhX2Nsb3NlZFdvcmxkLmZpZWxkTmV2ZXJDaGFuZ2VzKGZpZWxkKTsKCiAgICBBYnN0cmFjdFZhbHVlIHR5cGU7CiAgICBpZiAoX25hdGl2ZURhdGEuaXNOYXRpdmVDbGFzcyhmaWVsZC5lbmNsb3NpbmdDbGFzcykpIHsKICAgICAgdHlwZSA9IEFic3RyYWN0VmFsdWVGYWN0b3J5LmZyb21OYXRpdmVCZWhhdmlvcigKICAgICAgICAgIF9uYXRpdmVEYXRhLmdldE5hdGl2ZUZpZWxkTG9hZEJlaGF2aW9yKGZpZWxkKSwgX2Nsb3NlZFdvcmxkKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSB0aGUgcG90ZW50aWFsbHkgbW9yZSBwcmVjaXNlIHR5cGUgb2YgdGhlCiAgICAgIC8vIG5vZGUgKyBmaW5kIGEgdGVzdCB0aGF0IHNob3dzIGl0cyB1c2VmdWxuZXNzLgogICAgICAvLyB0eXBlID0gX2Fic3RyYWN0VmFsdWVEb21haW4uaW50ZXJzZWN0aW9uKAogICAgICAvLyAgICAgbm9kZS5pbnN0cnVjdGlvblR5cGUsCiAgICAgIC8vICAgICBBYnN0cmFjdFZhbHVlRmFjdG9yeS5pbmZlcnJlZFR5cGVGb3JNZW1iZXIoCiAgICAgIC8vICAgICAgICAgZmllbGQsIF9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzKSk7CiAgICAgIHR5cGUgPSBBYnN0cmFjdFZhbHVlRmFjdG9yeS5pbmZlcnJlZFR5cGVGb3JNZW1iZXIoCiAgICAgICAgICBmaWVsZCwgX2dsb2JhbEluZmVyZW5jZVJlc3VsdHMpOwogICAgfQoKICAgIHJldHVybiBuZXcgSEZpZWxkR2V0KGZpZWxkLCByZWNlaXZlciwgdHlwZSwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICBpc0Fzc2lnbmFibGU6IGlzQXNzaWduYWJsZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRJbnZva2VEeW5hbWljU2V0dGVyKEhJbnZva2VEeW5hbWljU2V0dGVyIG5vZGUpIHsKICAgIGlmIChub2RlLmlzSW50ZXJjZXB0ZWRDYWxsKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBmb2xkZWQgPSBoYW5kbGVJbnRlcmNlcHRlZENhbGwobm9kZSk7CiAgICAgIGlmIChmb2xkZWQgIT0gbm9kZSkgcmV0dXJuIGZvbGRlZDsKICAgIH0KCiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSBub2RlLmdldERhcnRSZWNlaXZlcihfY2xvc2VkV29ybGQpOwogICAgRmllbGRFbnRpdHkgZmllbGQgPSBmaW5kQ29uY3JldGVGaWVsZEZvckR5bmFtaWNBY2Nlc3Mobm9kZSwgcmVjZWl2ZXIpOwogICAgaWYgKGZpZWxkID09IG51bGwgfHwgIWZpZWxkLmlzQXNzaWduYWJsZSkgcmV0dXJuIG5vZGU7CiAgICAvLyBVc2UgYG5vZGUuaW5wdXRzLmxhc3RgIGluIGNhc2UgdGhlIGNhbGwgZm9sbG93cyB0aGUgaW50ZXJjZXB0b3IgY2FsbGluZwogICAgLy8gY29udmVudGlvbiwgYnV0IGlzIG5vdCBhIGNhbGwgb24gYW4gaW50ZXJjZXB0b3IuCiAgICBISW5zdHJ1Y3Rpb24gdmFsdWUgPSBub2RlLmlucHV0cy5sYXN0OwoKICAgIEhJbnN0cnVjdGlvbiBhc3NpZ25GaWVsZCgpIHsKICAgICAgaWYgKF9jbG9zZWRXb3JsZC5maWVsZEFuYWx5c2lzLmdldEZpZWxkRGF0YShmaWVsZCkuaXNFbGlkZWQpIHsKICAgICAgICBfbG9nPy5yZWdpc3RlckZpZWxkU2V0KG5vZGUpOwogICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBIRmllbGRTZXQgcmVzdWx0ID0KICAgICAgICAgICAgbmV3IEhGaWVsZFNldChfYWJzdHJhY3RWYWx1ZURvbWFpbiwgZmllbGQsIHJlY2VpdmVyLCB2YWx1ZSkKICAgICAgICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gbm9kZS5zb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgICBfbG9nPy5yZWdpc3RlckZpZWxkU2V0KG5vZGUsIHJlc3VsdCk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgfQoKICAgIGlmICghX2Nsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YQogICAgICAgIC5nZXRQYXJhbWV0ZXJDaGVja1BvbGljeShmaWVsZCkKICAgICAgICAuaXNFbWl0dGVkKSB7CiAgICAgIHJldHVybiBhc3NpZ25GaWVsZCgpOwogICAgfQoKICAgIERhcnRUeXBlIGZpZWxkVHlwZSA9IF9jbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQuZ2V0RmllbGRUeXBlKGZpZWxkKTsKCiAgICBpZiAoX29wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSkgewogICAgICBBYnN0cmFjdFZhbHVlV2l0aFByZWNpc2lvbiBjaGVja2VkVHlwZSA9CiAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVGcm9tU3RhdGljVHlwZShmaWVsZFR5cGUsIG51bGxhYmxlOiB0cnVlKTsKICAgICAgaWYgKGNoZWNrZWRUeXBlLmlzUHJlY2lzZSAmJgogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAgICAgICAuaXNJbih2YWx1ZS5pbnN0cnVjdGlvblR5cGUsIGNoZWNrZWRUeXBlLmFic3RyYWN0VmFsdWUpCiAgICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICByZXR1cm4gYXNzaWduRmllbGQoKTsKICAgICAgfQogICAgICAvLyBUT0RPKHNyYSk6IEltcGxlbWVudCBpbmxpbmluZyBvZiBzZXR0ZXJzIHdpdGggY2hlY2tzIGZvciBuZXcgcnRpLiBUaGUKICAgICAgLy8gY2hlY2sgYW5kIGZpZWxkIGFzc2lnbm1lbnkgZm9yIHRoZSBzZXR0ZXIgc2hvdWxkIGlubGluZWQgaWYgdGhpcyBpcyB0aGUKICAgICAgLy8gb25seSBjYWxsIHRvIHRoZSBzZXR0ZXIsIG9yIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGFscmVhZHkgY29tcHV0ZXMgdGhlCiAgICAgIC8vIHR5cGUgb2YgdGhlIGZpZWxkLgogICAgICBub2RlLm5lZWRzQ2hlY2sgPSB0cnVlOwogICAgICByZXR1cm4gbm9kZTsKICAgIH0KCiAgICBpZiAoIWZpZWxkVHlwZS50cmVhdEFzUmF3IHx8CiAgICAgICAgZmllbGRUeXBlLmlzVHlwZVZhcmlhYmxlIHx8CiAgICAgICAgZmllbGRUeXBlLnVuYWxpYXNlZC5pc0Z1bmN0aW9uVHlwZSB8fAogICAgICAgIGZpZWxkVHlwZS51bmFsaWFzZWQuaXNGdXR1cmVPcikgewogICAgICAvLyBXZSBjYW5ub3QgZ2VuZXJhdGUgdGhlIGNvcnJlY3QgdHlwZSByZXByZXNlbnRhdGlvbiBoZXJlLCBzbyBkb24ndAogICAgICAvLyBpbmxpbmUgdGhpcyBhY2Nlc3MuCiAgICAgIC8vIFRPRE8oc3JhKTogSWYgdGhlIGlucHV0IGlzIHN1Y2ggdGhhdCB3ZSBkb24ndCBuZWVkIGEgdHlwZSBjaGVjaywgd2UKICAgICAgLy8gY2FuIHNraXAgdGhlIHRlc3QgYW4gZ2VuZXJhdGUgdGhlIEhGaWVsZFNldC4KICAgICAgbm9kZS5uZWVkc0NoZWNrID0gdHJ1ZTsKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9CiAgICBISW5zdHJ1Y3Rpb24gb3RoZXIgPQogICAgICAgIHZhbHVlLmNvbnZlcnRUeXBlKF9jbG9zZWRXb3JsZCwgZmllbGRUeXBlLCBIVHlwZUNvbnZlcnNpb24uVFlQRV9DSEVDSyk7CiAgICBpZiAob3RoZXIgIT0gdmFsdWUpIHsKICAgICAgbm9kZS5ibG9jay5hZGRCZWZvcmUobm9kZSwgb3RoZXIpOwogICAgICB2YWx1ZSA9IG90aGVyOwogICAgfQoKICAgIHJldHVybiBhc3NpZ25GaWVsZCgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0SW52b2tlQ2xvc3VyZShISW52b2tlQ2xvc3VyZSBub2RlKSB7CiAgICBISW5zdHJ1Y3Rpb24gY2xvc3VyZSA9IG5vZGUuZ2V0RGFydFJlY2VpdmVyKF9jbG9zZWRXb3JsZCk7CgogICAgLy8gUmVwbGFjZSBpbmRpcmVjdCBjYWxsIHRvIHN0YXRpYyBtZXRob2QgdGVhci1vZmYgY2xvc3VyZSB3aXRoIGRpcmVjdCBjYWxsCiAgICAvLyB0byBzdGF0aWMgbWV0aG9kLgogICAgaWYgKGNsb3N1cmUgaXMgSENvbnN0YW50KSB7CiAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSBjbG9zdXJlLmNvbnN0YW50OwogICAgICBpZiAoY29uc3RhbnQgaXMgRnVuY3Rpb25Db25zdGFudFZhbHVlKSB7CiAgICAgICAgRnVuY3Rpb25FbnRpdHkgdGFyZ2V0ID0gY29uc3RhbnQuZWxlbWVudDsKICAgICAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlID0gdGFyZ2V0LnBhcmFtZXRlclN0cnVjdHVyZTsKICAgICAgICBpZiAocGFyYW1ldGVyU3RydWN0dXJlLmNhbGxTdHJ1Y3R1cmUgPT0gbm9kZS5zZWxlY3Rvci5jYWxsU3RydWN0dXJlKSB7CiAgICAgICAgICAvLyBUT0RPKHNyYSk6IEhhbmRsZSBhZGRpbmcgb3B0aW9uYWwgYXJndW1lbnRzIGRlZmF1bHQgdmFsdWVzLgogICAgICAgICAgYXNzZXJ0KCFub2RlLmlzSW50ZXJjZXB0ZWRDYWxsKTsKICAgICAgICAgIHJldHVybiBuZXcgSEludm9rZVN0YXRpYyh0YXJnZXQsIG5vZGUuaW5wdXRzLnNraXAoMSkudG9MaXN0KCksCiAgICAgICAgICAgICAgbm9kZS5pbnN0cnVjdGlvblR5cGUsIG5vZGUudHlwZUFyZ3VtZW50cykKICAgICAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IG5vZGUuc291cmNlSW5mb3JtYXRpb247CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEludm9rZVN0YXRpYyhISW52b2tlU3RhdGljIG5vZGUpIHsKICAgIHByb3BhZ2F0ZUNvbnN0YW50VmFsdWVUb1VzZXMobm9kZSk7CiAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCA9IG5vZGUuZWxlbWVudDsKCiAgICBpZiAoZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5pZGVudGljYWxGdW5jdGlvbikgewogICAgICBpZiAobm9kZS5pbnB1dHMubGVuZ3RoID09IDIpIHsKICAgICAgICByZXR1cm4gbmV3IEhJZGVudGl0eSgKICAgICAgICAgICAgbm9kZS5pbnB1dHNbMF0sIG5vZGUuaW5wdXRzWzFdLCBudWxsLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSkKICAgICAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBub2RlLnNvdXJjZUluZm9ybWF0aW9uOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuc2V0UnVudGltZVR5cGVJbmZvKSB7CiAgICAgIGlmIChub2RlLmlucHV0cy5sZW5ndGggPT0gMikgewogICAgICAgIHJldHVybiBoYW5kbGVBcnJheVR5cGVJbmZvKG5vZGUpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuY2hlY2tDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IpIHsKICAgICAgaWYgKG5vZGUuaW5wdXRzLmxlbmd0aCA9PSAyKSB7CiAgICAgICAgSEluc3RydWN0aW9uIGZpcnN0QXJndW1lbnQgPSBub2RlLmlucHV0c1swXTsKICAgICAgICBpZiAoZmlyc3RBcmd1bWVudCBpcyBIQ29uc3RhbnQpIHsKICAgICAgICAgIEhDb25zdGFudCBjb25zdGFudCA9IGZpcnN0QXJndW1lbnQ7CiAgICAgICAgICBpZiAoY29uc3RhbnQuY29uc3RhbnQuaXNUcnVlKSByZXR1cm4gY29uc3RhbnQ7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYgKGNvbW1vbkVsZW1lbnRzLmlzQ2hlY2tJbnQoZWxlbWVudCkpIHsKICAgICAgaWYgKG5vZGUuaW5wdXRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgSEluc3RydWN0aW9uIGFyZ3VtZW50ID0gbm9kZS5pbnB1dHNbMF07CiAgICAgICAgaWYgKGFyZ3VtZW50LmlzSW50ZWdlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgICAgcmV0dXJuIGFyZ3VtZW50OwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmIChjb21tb25FbGVtZW50cy5pc0NoZWNrTnVtKGVsZW1lbnQpKSB7CiAgICAgIGlmIChub2RlLmlucHV0cy5sZW5ndGggPT0gMSkgewogICAgICAgIEhJbnN0cnVjdGlvbiBhcmd1bWVudCA9IG5vZGUuaW5wdXRzWzBdOwogICAgICAgIGlmIChhcmd1bWVudC5pc051bWJlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgICAgcmV0dXJuIGFyZ3VtZW50OwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmIChjb21tb25FbGVtZW50cy5pc0NoZWNrU3RyaW5nKGVsZW1lbnQpKSB7CiAgICAgIGlmIChub2RlLmlucHV0cy5sZW5ndGggPT0gMSkgewogICAgICAgIEhJbnN0cnVjdGlvbiBhcmd1bWVudCA9IG5vZGUuaW5wdXRzWzBdOwogICAgICAgIGlmIChhcmd1bWVudC5pc1N0cmluZyhfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgICAgcmV0dXJuIGFyZ3VtZW50OwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmIChlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLmFzc2VydEhlbHBlciB8fAogICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuYXNzZXJ0VGVzdCkgewogICAgICBpZiAobm9kZS5pbnB1dHMubGVuZ3RoID09IDEpIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gYXJndW1lbnQgPSBub2RlLmlucHV0c1swXTsKICAgICAgICBpZiAoYXJndW1lbnQgaXMgSENvbnN0YW50KSB7CiAgICAgICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gYXJndW1lbnQuY29uc3RhbnQ7CiAgICAgICAgICBpZiAoY29uc3RhbnQuaXNCb29sKSB7CiAgICAgICAgICAgIGJvb2wgdmFsdWUgPSBjb25zdGFudC5pc1RydWU7CiAgICAgICAgICAgIGlmIChlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLmFzc2VydFRlc3QpIHsKICAgICAgICAgICAgICAvLyBgYXNzZXJ0VGVzdChhcmd1bWVudClgIGVmZmVjdGl2ZWx5IG5lZ2F0ZXMgdGhlIGFyZ3VtZW50LgogICAgICAgICAgICAgIHJldHVybiBfZ3JhcGguYWRkQ29uc3RhbnRCb29sKCF2YWx1ZSwgX2Nsb3NlZFdvcmxkKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBgYXNzZXJ0SGVscGVyKHRydWUpYCBpcyBhIG5vLW9wLCBvdGhlciB2YWx1ZXMgdGhyb3cuCiAgICAgICAgICAgIGlmICh2YWx1ZSkgcmV0dXJuIGFyZ3VtZW50OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHJldHVybiBub2RlOwogIH0KCiAgSEluc3RydWN0aW9uIGhhbmRsZUFycmF5VHlwZUluZm8oSEludm9rZVN0YXRpYyBub2RlKSB7CiAgICAvLyBJZiB0eXBlIGluZm9ybWF0aW9uIGlzIG5vdCBuZWVkZWQsIHVzZSB0aGUgcmF3IEFycmF5LgogICAgSEluc3RydWN0aW9uIHNvdXJjZSA9IG5vZGUuaW5wdXRzWzBdOwogICAgaWYgKHNvdXJjZS51c2VkQnkubGVuZ3RoICE9IDEpIHJldHVybiBub2RlOwogICAgaWYgKHNvdXJjZS5pc0FycmF5KF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc1BvdGVudGlhbGx5RmFsc2UpIHsKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9CiAgICBmb3IgKEhJbnN0cnVjdGlvbiB1c2VyIGluIG5vZGUudXNlZEJ5KSB7CiAgICAgIGlmICh1c2VyIGlzIEhHZXRMZW5ndGgpIGNvbnRpbnVlOwogICAgICBpZiAodXNlciBpcyBISW5kZXgpIGNvbnRpbnVlOwogICAgICAvLyBCb3VuZHMgY2hlY2sgZXNjYXBlcyB0aGUgYXJyYXksIGJ1dCB3ZSBkb24ndCBjYXJlLgogICAgICBpZiAodXNlciBpcyBIQm91bmRzQ2hlY2spIGNvbnRpbnVlOwogICAgICAvLyBJbnRlcmNlcHRvciBvbmx5IGVzY2FwZXMgdGhlIEFycmF5IGlmIGFycmF5IHBhc3NlZCB0byBhbiBpbnRlcmNlcHRlZAogICAgICAvLyBtZXRob2QuCiAgICAgIGlmICh1c2VyIGlzIEhJbnRlcmNlcHRvcikgY29udGludWU7CiAgICAgIGlmICh1c2VyIGlzIEhJbnZva2VTdGF0aWMpIHsKICAgICAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCA9IHVzZXIuZWxlbWVudDsKICAgICAgICBpZiAoZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5jaGVja0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcikgewogICAgICAgICAgLy8gQ01FIGNoZWNrIGVzY2FwZXMgdGhlIGFycmF5LCBidXQgd2UgZG9uJ3QgY2FyZS4KICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodXNlciBpcyBISW52b2tlRHluYW1pY0dldHRlcikgewogICAgICAgIFN0cmluZyBuYW1lID0gdXNlci5zZWxlY3Rvci5uYW1lOwogICAgICAgIC8vIFRoZXNlIGdldHRlcnMgZG9uJ3QgdXNlIHRoZSBBcnJheSB0eXBlLgogICAgICAgIGlmIChuYW1lID09ICdsYXN0JykgY29udGludWU7CiAgICAgICAgaWYgKG5hbWUgPT0gJ2ZpcnN0JykgY29udGludWU7CiAgICAgIH0KICAgICAgLy8gVE9ETyhzcmEpOiBJbXBsZW1lbnQgYSBtb3JlIGdlbmVyYWwgYWxnb3JpdGhtIC0gbWFueSBtZXRob2RzIGRvbid0IHVzZQogICAgICAvLyB0aGUgZWxlbWVudCB0eXBlLgogICAgICByZXR1cm4gbm9kZTsKICAgIH0KICAgIHJldHVybiBzb3VyY2U7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRTdHJpbmdDb25jYXQoSFN0cmluZ0NvbmNhdCBub2RlKSB7CiAgICAvLyBTaW1wbGlmeSBzdHJpbmcgY29uY2F0OgogICAgLy8KICAgIC8vICAgICAiIiArIFIgICAgICAgICAgICAgICAgLT4gIFIKICAgIC8vICAgICBMICsgIiIgICAgICAgICAgICAgICAgLT4gIEwKICAgIC8vICAgICAiTCIgKyAiUiIgICAgICAgICAgICAgLT4gICJMUiIKICAgIC8vICAgICAocHJlZml4ICsgIkwiKSArICJSIiAgLT4gIHByZWZpeCArICJMUiIKICAgIC8vCiAgICBTdHJpbmdDb25zdGFudFZhbHVlIGdldFN0cmluZyhISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgICAgaWYgKCFpbnN0cnVjdGlvbi5pc0NvbnN0YW50U3RyaW5nKCkpIHJldHVybiBudWxsOwogICAgICBIQ29uc3RhbnQgY29uc3RhbnQgPSBpbnN0cnVjdGlvbjsKICAgICAgcmV0dXJuIGNvbnN0YW50LmNvbnN0YW50OwogICAgfQoKICAgIFN0cmluZ0NvbnN0YW50VmFsdWUgbGVmdFN0cmluZyA9IGdldFN0cmluZyhub2RlLmxlZnQpOwogICAgaWYgKGxlZnRTdHJpbmcgIT0gbnVsbCAmJiBsZWZ0U3RyaW5nLnN0cmluZ1ZhbHVlLmxlbmd0aCA9PSAwKSB7CiAgICAgIHJldHVybiBub2RlLnJpZ2h0OwogICAgfQoKICAgIFN0cmluZ0NvbnN0YW50VmFsdWUgcmlnaHRTdHJpbmcgPSBnZXRTdHJpbmcobm9kZS5yaWdodCk7CiAgICBpZiAocmlnaHRTdHJpbmcgPT0gbnVsbCkgcmV0dXJuIG5vZGU7CiAgICBpZiAocmlnaHRTdHJpbmcuc3RyaW5nVmFsdWUubGVuZ3RoID09IDApIHJldHVybiBub2RlLmxlZnQ7CgogICAgSEluc3RydWN0aW9uIHByZWZpeCA9IG51bGw7CiAgICBpZiAobGVmdFN0cmluZyA9PSBudWxsKSB7CiAgICAgIGlmIChub2RlLmxlZnQgaXMhIEhTdHJpbmdDb25jYXQpIHJldHVybiBub2RlOwogICAgICBIU3RyaW5nQ29uY2F0IGxlZnRDb25jYXQgPSBub2RlLmxlZnQ7CiAgICAgIC8vIERvbid0IHVuZG8gQ1NFLgogICAgICBpZiAobGVmdENvbmNhdC51c2VkQnkubGVuZ3RoICE9IDEpIHJldHVybiBub2RlOwogICAgICBwcmVmaXggPSBsZWZ0Q29uY2F0LmxlZnQ7CiAgICAgIGxlZnRTdHJpbmcgPSBnZXRTdHJpbmcobGVmdENvbmNhdC5yaWdodCk7CiAgICAgIGlmIChsZWZ0U3RyaW5nID09IG51bGwpIHJldHVybiBub2RlOwogICAgfQoKICAgIGlmIChsZWZ0U3RyaW5nLnN0cmluZ1ZhbHVlLmxlbmd0aCArIHJpZ2h0U3RyaW5nLnN0cmluZ1ZhbHVlLmxlbmd0aCA+CiAgICAgICAgTUFYX1NIQVJFRF9DT05TVEFOVF9GT0xERURfU1RSSU5HX0xFTkdUSCkgewogICAgICBpZiAobm9kZS51c2VkQnkubGVuZ3RoID4gMSkgcmV0dXJuIG5vZGU7CiAgICB9CgogICAgSEluc3RydWN0aW9uIGZvbGRlZCA9IF9ncmFwaC5hZGRDb25zdGFudCgKICAgICAgICBjb25zdGFudF9zeXN0ZW0KICAgICAgICAgICAgLmNyZWF0ZVN0cmluZyhsZWZ0U3RyaW5nLnN0cmluZ1ZhbHVlICsgcmlnaHRTdHJpbmcuc3RyaW5nVmFsdWUpLAogICAgICAgIF9jbG9zZWRXb3JsZCk7CiAgICBpZiAocHJlZml4ID09IG51bGwpIHJldHVybiBmb2xkZWQ7CiAgICByZXR1cm4gbmV3IEhTdHJpbmdDb25jYXQocHJlZml4LCBmb2xkZWQsIF9hYnN0cmFjdFZhbHVlRG9tYWluLnN0cmluZ1R5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0U3RyaW5naWZ5KEhTdHJpbmdpZnkgbm9kZSkgewogICAgSEluc3RydWN0aW9uIGlucHV0ID0gbm9kZS5pbnB1dHNbMF07CiAgICBpZiAoaW5wdXQuaXNTdHJpbmcoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIGlucHV0OwogICAgfQoKICAgIEhJbnN0cnVjdGlvbiBhc1N0cmluZyhTdHJpbmcgc3RyaW5nKSA9PgogICAgICAgIF9ncmFwaC5hZGRDb25zdGFudChjb25zdGFudF9zeXN0ZW0uY3JlYXRlU3RyaW5nKHN0cmluZyksIF9jbG9zZWRXb3JsZCk7CgogICAgSEluc3RydWN0aW9uIHRyeUNvbnN0YW50KCkgewogICAgICBpZiAoIWlucHV0LmlzQ29uc3RhbnQoKSkgcmV0dXJuIG51bGw7CiAgICAgIEhDb25zdGFudCBjb25zdGFudCA9IGlucHV0OwogICAgICBpZiAoIWNvbnN0YW50LmNvbnN0YW50LmlzUHJpbWl0aXZlKSByZXR1cm4gbnVsbDsKICAgICAgUHJpbWl0aXZlQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IGNvbnN0YW50LmNvbnN0YW50OwogICAgICBpZiAodmFsdWUgaXMgSW50Q29uc3RhbnRWYWx1ZSkgewogICAgICAgIC8vIE9ubHkgY29uc3RhbnQtZm9sZCBpbnQudG9TdHJpbmcoKSB3aGVuIERhcnQgYW5kIEpTIHJlc3VsdHMgdGhlIHNhbWUuCiAgICAgICAgLy8gVE9ETygxODEwMyk6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlbW92ZSB0aGlzIHdvcmstYXJvdW5kIHdoZW4gaXNzdWUKICAgICAgICAvLyAxODEwMyBpcyByZXNvbHZlZCBieSBwcm92aWRpbmcgdGhlIGNvcnJlY3Qgc3RyaW5nLgogICAgICAgIGlmICghdmFsdWUuaXNVSW50MzIoKSkgcmV0dXJuIG51bGw7CiAgICAgICAgcmV0dXJuIGFzU3RyaW5nKCcke3ZhbHVlLmludFZhbHVlfScpOwogICAgICB9CiAgICAgIGlmICh2YWx1ZSBpcyBCb29sQ29uc3RhbnRWYWx1ZSkgewogICAgICAgIHJldHVybiBhc1N0cmluZyh2YWx1ZS5ib29sVmFsdWUgPyAndHJ1ZScgOiAnZmFsc2UnKTsKICAgICAgfQogICAgICBpZiAodmFsdWUgaXMgTnVsbENvbnN0YW50VmFsdWUpIHsKICAgICAgICByZXR1cm4gYXNTdHJpbmcoJ251bGwnKTsKICAgICAgfQogICAgICBpZiAodmFsdWUgaXMgRG91YmxlQ29uc3RhbnRWYWx1ZSkgewogICAgICAgIC8vIFRPRE8oc3JhKTogSXQgc2VlbXMgdW5saWtlbHkgdGhhdCBhbGwgZGFydDJqcyBob3N0IGltcGxlbWVudGF0aW9ucwogICAgICAgIC8vIHByb2R1Y2UgZXhhY3RseSB0aGUgc2FtZSBjaGFyYWN0ZXJzIGFzIGFsbCBKYXZhU2NyaXB0IHRhcmdldHMuCiAgICAgICAgcmV0dXJuIGFzU3RyaW5nKCcke3ZhbHVlLmRvdWJsZVZhbHVlfScpOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIEhJbnN0cnVjdGlvbiB0cnlUb1N0cmluZygpIHsKICAgICAgLy8gSWYgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIGlzIGd1YXJhbnRlZWQgdG8gcmV0dXJuIGEgc3RyaW5nIHdlIGNhbiBjYWxsCiAgICAgIC8vIGl0IGRpcmVjdGx5LiBLZWVwIHRoZSBzdHJpbmdpZmllciBmb3IgcHJpbWl0aXZlcyAoc2luY2UgdGhleSBoYXZlIGZhc3QKICAgICAgLy8gcGF0aCBjb2RlIGluIHRoZSBzdHJpbmdpZmllcikgYW5kIGZvciBjbGFzc2VzIHJlcXVpcmluZyBpbnRlcmNlcHRvcnMKICAgICAgLy8gKHNpbmNlIFNzYUluc3RydWN0aW9uU2ltcGxpZmllciBydW5zIGFmdGVyIFNzYVNpbXBsaWZ5SW50ZXJjZXB0b3JzKS4KICAgICAgaWYgKGlucHV0LmlzUHJpbWl0aXZlKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc1BvdGVudGlhbGx5VHJ1ZSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGlmIChpbnB1dC5pc051bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBTZWxlY3RvcnMudG9TdHJpbmdfOwogICAgICBBYnN0cmFjdFZhbHVlIHRvU3RyaW5nVHlwZSA9CiAgICAgICAgICBBYnN0cmFjdFZhbHVlRmFjdG9yeS5pbmZlcnJlZFJlc3VsdFR5cGVGb3JTZWxlY3RvcigKICAgICAgICAgICAgICBzZWxlY3RvciwgaW5wdXQuaW5zdHJ1Y3Rpb25UeXBlLCBfZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cyk7CiAgICAgIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgICAgLmNvbnRhaW5zT25seVR5cGUoCiAgICAgICAgICAgICAgdG9TdHJpbmdUeXBlLCBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuanNTdHJpbmdDbGFzcykKICAgICAgICAgIC5pc1BvdGVudGlhbGx5RmFsc2UpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICAvLyBBbGwgaW50ZXJjZXB0ZWQgY2xhc3NlcyBleHRlbmQgYEludGVyY2VwdG9yYCwgc28gaWYgdGhlIHJlY2VpdmVyIGNhbid0CiAgICAgIC8vIGJlIGEgY2xhc3MgZXh0ZW5kaW5nIGBJbnRlcmNlcHRvcmAgdGhlbiBpdCBjYW4gYmUgY2FsbGVkIGRpcmVjdGx5LgogICAgICBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAgIC5pc0ludGVyY2VwdG9yKGlucHV0Lmluc3RydWN0aW9uVHlwZSkKICAgICAgICAgIC5pc0RlZmluaXRlbHlGYWxzZSkgewogICAgICAgIHZhciBpbnB1dHMgPSA8SEluc3RydWN0aW9uPltpbnB1dCwgaW5wdXRdOyAvLyBbaW50ZXJjZXB0b3IsIHJlY2VpdmVyXS4KICAgICAgICBISW5zdHJ1Y3Rpb24gcmVzdWx0ID0gbmV3IEhJbnZva2VEeW5hbWljTWV0aG9kKAogICAgICAgICAgICBzZWxlY3RvciwKICAgICAgICAgICAgaW5wdXQuaW5zdHJ1Y3Rpb25UeXBlLCAvLyByZWNlaXZlciB0eXBlLgogICAgICAgICAgICBpbnB1dHMsCiAgICAgICAgICAgIHRvU3RyaW5nVHlwZSwKICAgICAgICAgICAgY29uc3QgPERhcnRUeXBlPltdLAogICAgICAgICAgICBub2RlLnNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgICAgICBpc0ludGVyY2VwdGVkOiB0cnVlKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHJldHVybiB0cnlDb25zdGFudCgpID8/IHRyeVRvU3RyaW5nKCkgPz8gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdE9uZVNob3RJbnRlcmNlcHRvcihIT25lU2hvdEludGVyY2VwdG9yIG5vZGUpIHsKICAgIHJldHVybiBoYW5kbGVJbnRlcmNlcHRlZENhbGwobm9kZSk7CiAgfQoKICBib29sIG5lZWRzU3Vic3RpdHV0aW9uRm9yVHlwZVZhcmlhYmxlQWNjZXNzKENsYXNzRW50aXR5IGNscykgewogICAgaWYgKF9jbG9zZWRXb3JsZC5pc1VzZWRBc01peGluKGNscykpIHJldHVybiB0cnVlOwoKICAgIHJldHVybiBfY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuYW55U3RyaWN0U3ViY2xhc3NPZihjbHMsCiAgICAgICAgKENsYXNzRW50aXR5IHN1YmNsYXNzKSB7CiAgICAgIHJldHVybiAhX3J0aVN1YnN0aXR1dGlvbnMuaXNUcml2aWFsU3Vic3RpdHV0aW9uKHN1YmNsYXNzLCBjbHMpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRUeXBlSW5mb0V4cHJlc3Npb24oSFR5cGVJbmZvRXhwcmVzc2lvbiBub2RlKSB7CiAgICAvLyBJZGVudGlmeSB0aGUgY2FzZSB3aGVyZSB0aGUgdHlwZSBpbmZvIGV4cHJlc3Npb24gd291bGQgYmUgb2YgdGhlIGZvcm06CiAgICAvLwogICAgLy8gIFtnZXRUeXBlQXJndW1lbnRCeUluZGV4KHRoaXMsIDApLCAuLiwgZ2V0VHlwZUFyZ3VtZW50QnlJbmRleCh0aGlzLCBrKV0KICAgIC8vCiAgICAvLyBhbmQgayBpcyB0aGUgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzIG9mICd0aGlzJy4gIFdlIGNhbiBzaW1wbHkgY29weSB0aGUKICAgIC8vIGxpc3QgZnJvbSAndGhpcycuCiAgICBISW5zdHJ1Y3Rpb24gdHJ5Q29weUluZm8oKSB7CiAgICAgIGlmIChub2RlLmtpbmQgIT0gVHlwZUluZm9FeHByZXNzaW9uS2luZC5JTlNUQU5DRSkgcmV0dXJuIG51bGw7CgogICAgICBISW5zdHJ1Y3Rpb24gc291cmNlOwogICAgICBpbnQgZXhwZWN0ZWRJbmRleCA9IDA7CgogICAgICBmb3IgKEhJbnN0cnVjdGlvbiBhcmd1bWVudCBpbiBub2RlLmlucHV0cykgewogICAgICAgIGlmIChhcmd1bWVudCBpcyBIVHlwZUluZm9SZWFkVmFyaWFibGUpIHsKICAgICAgICAgIENsYXNzRW50aXR5IGNvbnRleHQgPSBEYXJ0VHlwZXMuZ2V0Q2xhc3NDb250ZXh0KGFyZ3VtZW50LnZhcmlhYmxlKTsKICAgICAgICAgIEhJbnN0cnVjdGlvbiBuZXh0U291cmNlID0gYXJndW1lbnQub2JqZWN0OwogICAgICAgICAgaWYgKG5leHRTb3VyY2UgaXMgSFJlZikgewogICAgICAgICAgICBIUmVmIHJlZiA9IG5leHRTb3VyY2U7CiAgICAgICAgICAgIG5leHRTb3VyY2UgPSByZWYudmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAobmV4dFNvdXJjZSBpcyBIVGhpcykgewogICAgICAgICAgICBpZiAoc291cmNlID09IG51bGwpIHsKICAgICAgICAgICAgICBzb3VyY2UgPSBuZXh0U291cmNlOwogICAgICAgICAgICAgIENsYXNzRW50aXR5IHRoaXNDbGFzcyA9IG5leHRTb3VyY2Uuc291cmNlRWxlbWVudC5lbmNsb3NpbmdDbGFzczsKICAgICAgICAgICAgICBJbnRlcmZhY2VUeXBlIHRoaXNUeXBlID0KICAgICAgICAgICAgICAgICAgX2Nsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZSh0aGlzQ2xhc3MpOwogICAgICAgICAgICAgIGlmIChub2RlLmlucHV0cy5sZW5ndGggIT0gdGhpc1R5cGUudHlwZUFyZ3VtZW50cy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAobmVlZHNTdWJzdGl0dXRpb25Gb3JUeXBlVmFyaWFibGVBY2Nlc3ModGhpc0NsYXNzKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChjb250ZXh0ICE9IG51bGwgJiYKICAgICAgICAgICAgICAgICAgIV9ydGlTdWJzdGl0dXRpb25zLmlzVHJpdmlhbFN1YnN0aXR1dGlvbigKICAgICAgICAgICAgICAgICAgICAgIHRoaXNDbGFzcywgY29udGV4dCkpIHsKICAgICAgICAgICAgICAgIC8vIElmIGlubGluaW5nLCB0aGUgW2NvbnRleHRdIGlzIG5vdCB0aGUgc2FtZSBhcyBbdGhpc0NsYXNzXS4KICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZW4gdGhlIHN1YnN0aXR1dGlvbiBtdXN0IGJlIHRyaXZpYWwuCiAgICAgICAgICAgICAgICAvLyBDb25zaWRlciB0aGlzOgogICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgIC8vICAgIGNsYXNzIEEgewogICAgICAgICAgICAgICAgLy8gICAgICBmaW5hbCBPYmplY3QgdmFsdWU7CiAgICAgICAgICAgICAgICAvLyAgICAgIEEodGhpcy52YWx1ZSk7CiAgICAgICAgICAgICAgICAvLyAgICB9CiAgICAgICAgICAgICAgICAvLyAgICBjbGFzcyBCPFQ+IGV4dGVuZHMgQSB7CiAgICAgICAgICAgICAgICAvLyAgICAgIEIoVCB2YWx1ZSkgOiBzdXBlcih2YWx1ZSk7CiAgICAgICAgICAgICAgICAvLyAgICAgIFQgZ2V0IHZhbHVlID0+IHN1cGVyLnZhbHVlIGFzIFQ7CiAgICAgICAgICAgICAgICAvLyAgICB9CiAgICAgICAgICAgICAgICAvLyAgICBjbGFzcyBDPFM+IGV4dGVuZHMgQjxMaXN0PFM+PiB7CiAgICAgICAgICAgICAgICAvLyAgICAgIEMoTGlzdDxTPiB2YWx1ZSkgOiBzdXBlcih2YWx1ZSk7CiAgICAgICAgICAgICAgICAvLyAgICAgIFMgZ2V0IGZpcnN0ID0+IHZhbHVlLmZpcnN0OwogICAgICAgICAgICAgICAgLy8gICAgfQogICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgIC8vIElmIGBCLnZhbHVlYCBpcyBpbmxpbmVkIGludG8gYEMuZmlyc3RgIHRoZSB0eXBlIGluZm8KICAgICAgICAgICAgICAgIC8vIGV4cHJlc3Npb24gaXMgdGhlIGxpc3QgYFtCLlRdYCBvbiBhIGB0aGlzYCBvZiB0eXBlIGBDPFM+YC4KICAgICAgICAgICAgICAgIC8vIFNpbmNlIHRoZSBzdWJzdGl0dXRpb24gZnJvbSBDIHRvIEIgaXMgbm90IHRyaXZpYWwKICAgICAgICAgICAgICAgIC8vIChTIC0+IExpc3Q8Uz4pIHRoaXMgdHlwZSBpbmZvIGV4cHJlc3Npb24gY2Fubm90IGJlIHJlcGxhY2VkCiAgICAgICAgICAgICAgICAvLyB3aXRoIHRoZSB0eXBlIGFyZ3VtZW50cyBgQzxTPmAgKGl0IHdvdWxkIHlpZWxkIFtTXSBpbnN0ZWFkIG9mCiAgICAgICAgICAgICAgICAvLyBbTGlzdDxTPl0pLgogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChuZXh0U291cmNlICE9IHNvdXJjZSkgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIGluZGV4IGlzIHRoZSBvbmUgd2UgZXhwZWN0LgogICAgICAgICAgICBpbnQgaW5kZXggPSBhcmd1bWVudC52YXJpYWJsZS5lbGVtZW50LmluZGV4OwogICAgICAgICAgICBpZiAoaW5kZXggIT0gZXhwZWN0ZWRJbmRleCsrKSByZXR1cm4gbnVsbDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFRPRE8oc3JhKTogSGFuZGxlIG5vbi10aGlzIGNhc2VzIChpLmUuIGlubGluZWQgY29kZSkuIFNvbWUKICAgICAgICAgICAgLy8gbm9uLXRoaXMgY2FzZXMgd2lsbCBoYXZlIGEgVHlwZU1hc2sgdGhhdCBkb2VzIG5vdCBuZWVkCiAgICAgICAgICAgIC8vIHN1YnN0aXR1dGlvbiwgZXZlbiB0aG91Z2ggdGhlIGdlbmVyYWwgY2FzZSBkb2VzLCBlLmcuIGlubGluaW5nIGEKICAgICAgICAgICAgLy8gbWV0aG9kIG9uIGFuIGV4YWN0IGNsYXNzLgogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiBudWxsOwogICAgICByZXR1cm4gbmV3IEhUeXBlSW5mb1JlYWRSYXcoc291cmNlLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSk7CiAgICB9CgogICAgLy8gVE9ETyhzcmEpOiBDb25zaWRlciBmdXNpbmcgdHlwZSBleHByZXNzaW9uIHRyZWVzIHdpdGggbm8gdHlwZSB2YXJpYWJsZXMsCiAgICAvLyBhcyB0aGVzZSBjb3VsZCBiZSByZXByZXNlbnRlZCBsaWtlIGNvbnN0YW50cy4KCiAgICByZXR1cm4gdHJ5Q29weUluZm8oKSA/PyBub2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0VHlwZUluZm9SZWFkVmFyaWFibGUoSFR5cGVJbmZvUmVhZFZhcmlhYmxlIG5vZGUpIHsKICAgIFR5cGVWYXJpYWJsZVR5cGUgdmFyaWFibGUgPSBub2RlLnZhcmlhYmxlOwogICAgQ2xhc3NFbnRpdHkgY29udGV4dENsYXNzID0gdmFyaWFibGUuZWxlbWVudC50eXBlRGVjbGFyYXRpb247CiAgICBISW5zdHJ1Y3Rpb24gb2JqZWN0ID0gbm9kZS5vYmplY3Q7CgogICAgSEluc3RydWN0aW9uIGZpbmlzaEdyb3VuZFR5cGUoSW50ZXJmYWNlVHlwZSBncm91bmRUeXBlKSB7CiAgICAgIEludGVyZmFjZVR5cGUgdHlwZUF0VmFyaWFibGUgPQogICAgICAgICAgX2Nsb3NlZFdvcmxkLmRhcnRUeXBlcy5hc0luc3RhbmNlT2YoZ3JvdW5kVHlwZSwgY29udGV4dENsYXNzKTsKICAgICAgaWYgKHR5cGVBdFZhcmlhYmxlICE9IG51bGwpIHsKICAgICAgICBpbnQgaW5kZXggPSB2YXJpYWJsZS5lbGVtZW50LmluZGV4OwogICAgICAgIERhcnRUeXBlIHR5cGVBcmd1bWVudCA9IHR5cGVBdFZhcmlhYmxlLnR5cGVBcmd1bWVudHNbaW5kZXhdOwogICAgICAgIEhJbnN0cnVjdGlvbiByZXBsYWNlbWVudCA9IG5ldyBIVHlwZUluZm9FeHByZXNzaW9uKAogICAgICAgICAgICBUeXBlSW5mb0V4cHJlc3Npb25LaW5kLkNPTVBMRVRFLAogICAgICAgICAgICB0eXBlQXJndW1lbnQsCiAgICAgICAgICAgIGNvbnN0IDxISW5zdHJ1Y3Rpb24+W10sCiAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlLAogICAgICAgICAgICBpc1R5cGVWYXJpYWJsZVJlcGxhY2VtZW50OiB0cnVlKTsKICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CiAgICAgIH0KICAgICAgcmV0dXJuIG5vZGU7CiAgICB9CgogICAgLy8vIFJlYWQgdGhlIHR5cGUgdmFyaWFibGUgZnJvbSBhbiBhbGxvY2F0aW9uIG9mIHR5cGUgW2NyZWF0ZWRDbGFzc10sIHdoZXJlCiAgICAvLy8gW3NlbGVjdFR5cGVBcmd1bWVudEZyb21PYmplY3RDcmVhdGlvbl0gZXh0cmFjdHMgdGhlIHR5cGUgYXJndW1lbnQgZnJvbQogICAgLy8vIHRoZSBhbGxvY2F0aW9uIGZvciBmYWN0b3J5IGNvbnN0cnVjdG9yIGNhbGwuCiAgICBISW5zdHJ1Y3Rpb24gZmluaXNoU3Vic3RpdHV0ZWQoQ2xhc3NFbnRpdHkgY3JlYXRlZENsYXNzLAogICAgICAgIEhJbnN0cnVjdGlvbiBzZWxlY3RUeXBlQXJndW1lbnRGcm9tT2JqZWN0Q3JlYXRpb24oaW50IGluZGV4KSkgewogICAgICBJbnRlcmZhY2VUeXBlIHRoaXNUeXBlID0gX2Nsb3NlZFdvcmxkLmRhcnRUeXBlcy5nZXRUaGlzVHlwZShjcmVhdGVkQ2xhc3MpOwoKICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uRm9yVHlwZVZhcmlhYmxlKFR5cGVWYXJpYWJsZVR5cGUgdHYpIHsKICAgICAgICByZXR1cm4gc2VsZWN0VHlwZUFyZ3VtZW50RnJvbU9iamVjdENyZWF0aW9uKAogICAgICAgICAgICB0aGlzVHlwZS50eXBlQXJndW1lbnRzLmluZGV4T2YodHYpKTsKICAgICAgfQoKICAgICAgRGFydFR5cGUgdHlwZSA9IF9jbG9zZWRXb3JsZC5kYXJ0VHlwZXMKICAgICAgICAgIC5hc0luc3RhbmNlT2YodGhpc1R5cGUsIGNvbnRleHRDbGFzcykKICAgICAgICAgIC50eXBlQXJndW1lbnRzW3ZhcmlhYmxlLmVsZW1lbnQuaW5kZXhdOwogICAgICBpZiAodHlwZSBpcyBUeXBlVmFyaWFibGVUeXBlKSB7CiAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uRm9yVHlwZVZhcmlhYmxlKHR5cGUpOwogICAgICB9CiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBhcmd1bWVudHMgPSA8SEluc3RydWN0aW9uPltdOwogICAgICB0eXBlLmZvckVhY2hUeXBlVmFyaWFibGUoKHYpIHsKICAgICAgICBhcmd1bWVudHMuYWRkKGluc3RydWN0aW9uRm9yVHlwZVZhcmlhYmxlKHYpKTsKICAgICAgfSk7CiAgICAgIEhJbnN0cnVjdGlvbiByZXBsYWNlbWVudCA9IG5ldyBIVHlwZUluZm9FeHByZXNzaW9uKAogICAgICAgICAgVHlwZUluZm9FeHByZXNzaW9uS2luZC5DT01QTEVURSwKICAgICAgICAgIHR5cGUsCiAgICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSwKICAgICAgICAgIGlzVHlwZVZhcmlhYmxlUmVwbGFjZW1lbnQ6IHRydWUpOwogICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CiAgICB9CgogICAgLy8gVHlwZSB2YXJpYWJsZSBldmFsdWF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYSBjb25zdGFudCBjYW4gYmUgcmVwbGFjZWQgd2l0aAogICAgLy8gYSBncm91bmQgdGVybSB0eXBlLgogICAgaWYgKG9iamVjdCBpcyBIQ29uc3RhbnQpIHsKICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IG9iamVjdC5jb25zdGFudDsKICAgICAgaWYgKHZhbHVlIGlzIENvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZSkgewogICAgICAgIHJldHVybiBmaW5pc2hHcm91bmRUeXBlKHZhbHVlLnR5cGUpOwogICAgICB9CiAgICAgIHJldHVybiBub2RlOwogICAgfQoKICAgIC8vIExvb2sgZm9yIGFuIGFsbG9jYXRpb24gd2l0aCB0eXBlIGluZm9ybWF0aW9uIGFuZCByZS13cml0ZSB0eXBlIHZhcmlhYmxlCiAgICAvLyBhcyBhIGZ1bmN0aW9uIG9mIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgdGhlIGFsbG9jYXRpb24uICBUaGlzIGVmZmVjdGl2ZWx5CiAgICAvLyBzdG9yZS1mb3J3YXJkcyBhIHR5cGUgdmFyaWFibGUgcmVhZCB0aHJvdWdoIGFuIGFsbG9jYXRpb24uCgogICAgLy8gTWF0Y2g6CiAgICAvLwogICAgLy8gICAgIEhDcmVhdGUoQ2xhc3NFbGVtZW50LAogICAgLy8gICAgICAgW2FyZ19pLAogICAgLy8gICAgICAgIC4uLiwKICAgIC8vICAgICAgICBIVHlwZUluZm9FeHByZXNzaW9uKHRfMCwgdF8xLCB0XzIsIC4uLildKTsKICAgIC8vCiAgICAvLyBUaGUgYHRfaWAgYXJlIHRoZSB2YWx1ZXMgb2YgdGhlIHR5cGUgcGFyYW1ldGVycyBvZiBDbGFzc0VsZW1lbnQuCgogICAgaWYgKG9iamVjdCBpcyBIQ3JlYXRlKSB7CiAgICAgIHZvaWQgcmVnaXN0ZXJJbnN0YW50aWF0aW9ucygpIHsKICAgICAgICAvLyBGb3J3YXJkaW5nIHRoZSB0eXBlIHZhcmlhYmxlIHJlZmVyZW5jZXMgbWlnaHQgY2F1c2UgdGhlIEhDcmVhdGUgdG8KICAgICAgICAvLyBiZWNvbWUgZGVhZC4gVGhpcyBicmVha3MgdGhlIGFsZ29yaXRobSBmb3IgZ2VuZXJhdGluZyB0aGUgcGVyLXR5cGUKICAgICAgICAvLyBydW50aW1lIHR5cGUgaW5mb3JtYXRpb24sIHNvIHdlIGluc3RhbnRpYXRlIHRoZW0gaGVyZSBpbiBjYXNlIHRoZQogICAgICAgIC8vIEhDcmVhdGUgYmVjb21lcyBkZWFkLgogICAgICAgIG9iamVjdC5pbnN0YW50aWF0ZWRUeXBlcz8uZm9yRWFjaChfcmVnaXN0cnkucmVnaXN0ZXJJbnN0YW50aWF0aW9uKTsKICAgICAgfQoKICAgICAgaWYgKG9iamVjdC5oYXNSdGlJbnB1dCkgewogICAgICAgIEhJbnN0cnVjdGlvbiB0eXBlSW5mbyA9IG9iamVjdC5ydGlJbnB1dDsKICAgICAgICBpZiAodHlwZUluZm8gaXMgSFR5cGVJbmZvRXhwcmVzc2lvbikgewogICAgICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9ucygpOwogICAgICAgICAgcmV0dXJuIGZpbmlzaFN1YnN0aXR1dGVkKAogICAgICAgICAgICAgIG9iamVjdC5lbGVtZW50LCAoaW50IGluZGV4KSA9PiB0eXBlSW5mby5pbnB1dHNbaW5kZXhdKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gTm9uLWdlbmVyaWMgdHlwZSAod2hpY2ggZXh0ZW5kcyBvciBtaXhlcyBpbiBhIGdlbmVyaWMgdHlwZSwgZm9yCiAgICAgICAgLy8gZXhhbXBsZSBDb2RlVW5pdHMgZXh0ZW5kcyBVbm1vZGlmaWFibGVMaXN0QmFzZTxpbnQ+KS4gIEFsc28gdXNlZCBmb3IKICAgICAgICAvLyByYXctdHlwZSB3aGVuIHRoZSB0eXBlIHBhcmFtZXRlcnMgYXJlIGVsaWRlZC4KICAgICAgICByZWdpc3Rlckluc3RhbnRpYXRpb25zKCk7CiAgICAgICAgcmV0dXJuIGZpbmlzaFN1YnN0aXR1dGVkKAogICAgICAgICAgICBvYmplY3QuZWxlbWVudCwKICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIHR5cGUgYXJndW1lbnRzLCBhbGwgdHlwZSBhcmd1bWVudHMgYXJlICdkeW5hbWljJy4KICAgICAgICAgICAgKGludCBpKSA9PiBfZ3JhcGguYWRkQ29uc3RhbnROdWxsKF9jbG9zZWRXb3JsZCkpOwogICAgICB9CiAgICB9CgogICAgLy8gVE9ETyhzcmEpOiBGYWN0b3J5IGNvbnN0cnVjdG9ycyBwYXNzIHR5cGUgYXJndW1lbnRzIGFmdGVyIHRoZSB2YWx1ZQogICAgLy8gYXJndW1lbnRzLiBUaGUgW3NlbGVjdFR5cGVBcmd1bWVudEZyb21PYmplY3RDcmVhdGlvbl0gYXJndW1lbnQgb2YKICAgIC8vIFtmaW5pc2hTdWJzdGl0dXRlZF0gaW5kZXhlcyBpbnRvIHRoZXNlIHR5cGUgYXJndW1lbnRzLgoKICAgIC8vIFRyeSB0byByZW1vdmUgdGhlIGludGVyY2VwdG9yLiBUaGUgaW50ZXJjZXB0b3IgaXMgdXNlZCBmb3IgYWNjZXNzaW5nIHRoZQogICAgLy8gc3Vic3RpdHV0aW9uIG1ldGhvZHMuCiAgICBpZiAobm9kZS5pc0ludGVyY2VwdGVkKSB7CiAgICAgIC8vIElmIHdlIGRvbid0IG5lZWQgdGhlIHN1YnN0aXR1dGlvbiBtZXRob2RzIHRoZW4gd2UgZG9uJ3QgbmVlZCB0aGUKICAgICAgLy8gaW50ZXJjZXB0b3IgdG8gYWNjZXNzIHRoZW0uCiAgICAgIGlmICghbmVlZHNTdWJzdGl0dXRpb25Gb3JUeXBlVmFyaWFibGVBY2Nlc3MoY29udGV4dENsYXNzKSkgewogICAgICAgIHJldHVybiBuZXcgSFR5cGVJbmZvUmVhZFZhcmlhYmxlLm5vSW50ZXJjZXB0b3IoCiAgICAgICAgICAgIHZhcmlhYmxlLCBvYmplY3QsIG5vZGUuaW5zdHJ1Y3Rpb25UeXBlKTsKICAgICAgfQogICAgICAvLyBBbGwgaW50ZXJjZXB0ZWQgY2xhc3NlcyBleHRlbmQgYEludGVyY2VwdG9yYCwgc28gaWYgdGhlIHJlY2VpdmVyIGNhbid0CiAgICAgIC8vIGJlIGEgY2xhc3MgZXh0ZW5kaW5nIGBJbnRlcmNlcHRvcmAgdGhlbiB0aGUgc3Vic3RpdHV0aW9uIG1ldGhvZHMgY2FuIGJlCiAgICAgIC8vIGNhbGxlZCBkaXJlY3RseS4gKFdlIGRvbid0IGNhcmUgYWJvdXQgTnVsbCBzaW5jZSBjb250ZXh0cyByZWFkaW5nIGNsYXNzCiAgICAgIC8vIHR5cGUgdmFyaWFibGVzIG9yaWdpbmF0ZSBmcm9tIGluc3RhbmNlIG1ldGhvZHMuKQogICAgICBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAgIC5pc0ludGVyY2VwdG9yKG9iamVjdC5pbnN0cnVjdGlvblR5cGUpCiAgICAgICAgICAuaXNEZWZpbml0ZWx5RmFsc2UpIHsKICAgICAgICByZXR1cm4gbmV3IEhUeXBlSW5mb1JlYWRWYXJpYWJsZS5ub0ludGVyY2VwdG9yKAogICAgICAgICAgICB2YXJpYWJsZSwgb2JqZWN0LCBub2RlLmluc3RydWN0aW9uVHlwZSk7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdFR5cGVFdmFsKEhUeXBlRXZhbCBub2RlKSB7CiAgICBpZiAoVHlwZVJlY2lwZS5pc0lkZW50aXR5KG5vZGUudHlwZUV4cHJlc3Npb24sIG5vZGUuZW52U3RydWN0dXJlKSkgewogICAgICByZXR1cm4gbm9kZS5pbnB1dHMuc2luZ2xlOwogICAgfQogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRBc0NoZWNrKEhBc0NoZWNrIG5vZGUpIHsKICAgIGlmIChub2RlLmlzUmVkdW5kYW50KF9jbG9zZWRXb3JsZCkpIHJldHVybiBub2RlLmNoZWNrZWRJbnB1dDsKCiAgICAvLyBTZWUgaWYgdGhpcyBjaGVjayBjYW4gYmUgbG93ZXJlZCB0byBhIHNpbXBsZSBvbmUuCiAgICBISW5zdHJ1Y3Rpb24gdHlwZUlucHV0ID0gbm9kZS50eXBlSW5wdXQ7CiAgICBpZiAodHlwZUlucHV0IGlzIEhMb2FkVHlwZSkgewogICAgICBEYXJ0VHlwZSBkYXJ0VHlwZSA9IHR5cGVJbnB1dC50eXBlRXhwcmVzc2lvbjsKICAgICAgTWVtYmVyRW50aXR5IHNwZWNpYWxpemVkQ2hlY2sgPSBTcGVjaWFsaXplZENoZWNrcy5maW5kQXNDaGVjaygKICAgICAgICAgIGRhcnRUeXBlLCBub2RlLmlzVHlwZUVycm9yLCBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMpOwogICAgICBpZiAoc3BlY2lhbGl6ZWRDaGVjayAhPSBudWxsKSB7CiAgICAgICAgQWJzdHJhY3RWYWx1ZVdpdGhQcmVjaXNpb24gY2hlY2tlZFR5cGUgPQogICAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVGcm9tU3RhdGljVHlwZShkYXJ0VHlwZSwgbnVsbGFibGU6IHRydWUpOwogICAgICAgIHJldHVybiBIQXNDaGVja1NpbXBsZShub2RlLmNoZWNrZWRJbnB1dCwgZGFydFR5cGUsIGNoZWNrZWRUeXBlLAogICAgICAgICAgICBub2RlLmlzVHlwZUVycm9yLCBzcGVjaWFsaXplZENoZWNrLCBub2RlLmluc3RydWN0aW9uVHlwZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBub2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0QXNDaGVja1NpbXBsZShIQXNDaGVja1NpbXBsZSBub2RlKSB7CiAgICBpZiAobm9kZS5pc1JlZHVuZGFudChfY2xvc2VkV29ybGQpKSByZXR1cm4gbm9kZS5jaGVja2VkSW5wdXQ7CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdElzVGVzdChISXNUZXN0IG5vZGUpIHsKICAgIEFic3RyYWN0VmFsdWVXaXRoUHJlY2lzaW9uIGNoZWNrZWRBYnN0cmFjdFZhbHVlID0gbm9kZS5jaGVja2VkQWJzdHJhY3RWYWx1ZTsKICAgIEhJbnN0cnVjdGlvbiBjaGVja2VkSW5wdXQgPSBub2RlLmNoZWNrZWRJbnB1dDsKICAgIEFic3RyYWN0VmFsdWUgaW5wdXRUeXBlID0gY2hlY2tlZElucHV0Lmluc3RydWN0aW9uVHlwZTsKCiAgICBBYnN0cmFjdEJvb2wgaXNJbiA9IF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzSW4oCiAgICAgICAgaW5wdXRUeXBlLCBjaGVja2VkQWJzdHJhY3RWYWx1ZS5hYnN0cmFjdFZhbHVlKTsKCiAgICBpZiAoaXNJbi5pc0RlZmluaXRlbHlGYWxzZSkgewogICAgICByZXR1cm4gX2dyYXBoLmFkZENvbnN0YW50Qm9vbChmYWxzZSwgX2Nsb3NlZFdvcmxkKTsKICAgIH0KICAgIGlmICghY2hlY2tlZEFic3RyYWN0VmFsdWUuaXNQcmVjaXNlKSByZXR1cm4gbm9kZTsKCiAgICBpZiAoaXNJbi5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBfZ3JhcGguYWRkQ29uc3RhbnRCb29sKHRydWUsIF9jbG9zZWRXb3JsZCk7CiAgICB9CgogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRJbnN0YW5jZUVudmlyb25tZW50KEhJbnN0YW5jZUVudmlyb25tZW50IG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiBpbnN0YW5jZSA9IG5vZGUuaW5wdXRzLnNpbmdsZTsKCiAgICAvLyBTdG9yZS1mb3J3YXJkIGluc3RhbmNlIHR5cGVzIG9mIGNyZWF0ZWQgaW5zdGFuY2VzIGFuZCBjb25zdGFudCBpbnN0YW5jZXMuCiAgICAvLwogICAgLy8gRm9yd2FyZGluZyB0aGUgdHlwZSBtaWdodCBjYXVzZSB0aGUgaW5zdGFuY2UgKEhDcmVhdGUsIGNvbnN0YW50IGV0YykgdG8KICAgIC8vIGJlY29tZSBkZWFkLiBUaGlzIG1pZ2h0IGNhdXNlIHVzIHRvIGxvc2UgdHJhY2sgb2YgdGhhdCBmYWN0IHRoYXQgdGhlcmUKICAgIC8vIGFyZSB0eXBlIGV4cHJlc3Npb25zIGZyb20gd2l0aGluIHRoZSBpbnN0YW5jZSdzIGNsYXNzIHNjb3BlLCBzbyBicmVha2luZwogICAgLy8gdGhlIGFsZ29yaXRobSBmb3IgZ2VuZXJhdGluZyB0aGUgcGVyLXR5cGUgcnVudGltZSB0eXBlIGluZm9ybWF0aW9uLiBUaGUKICAgIC8vIGZpeCBpcyB0byByZWdpc3RlciB0aGUgY2xhc3NlcyBhcyBjcmVhdGVkIGhlcmUgaW4gY2FzZSB0aGUgaW5zdGFuY2UKICAgIC8vIGJlY29tZXMgZGVhZC4KICAgIC8vCiAgICAvLyBUT0RPKHNyYSk6IEl0IHdvdWxkIGJlIGNsZWFuZXIgdG8gdHJhY2sgb24gSExvYWRUeXBlLCBIVHlwZUV2YWwsIGV0YwogICAgLy8gd2hpY2ggY2xhc3Mgc2NvcGUocykgdGhleSBvcmlnaW5hdGVkIGZyb20uIElmIHRoZSB0eXBlIGV4cHJlc3Npb25zIGJlY29tZQogICAgLy8gZGVhZCwgdGhlIHJlZmVyZW5jZXMgdG8gdGhlIHNjb3BlIHR5cGUgdmFyaWFibGVzIGJlY29tZSBkZWFkLgoKICAgIGlmIChpbnN0YW5jZSBpcyBIQ3JlYXRlKSB7CiAgICAgIGlmIChpbnN0YW5jZS5oYXNSdGlJbnB1dCkgewogICAgICAgIGluc3RhbmNlLmluc3RhbnRpYXRlZFR5cGVzPy5mb3JFYWNoKF9yZWdpc3RyeS5yZWdpc3Rlckluc3RhbnRpYXRpb24pOwogICAgICAgIHJldHVybiBpbnN0YW5jZS5pbnB1dHMubGFzdDsKICAgICAgfQogICAgICByZXR1cm4gbm9kZTsKICAgIH0KCiAgICBpZiAoaW5zdGFuY2UgaXMgSENvbnN0YW50KSB7CiAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnRWYWx1ZSA9IGluc3RhbmNlLmNvbnN0YW50OwogICAgICBpZiAoY29uc3RhbnRWYWx1ZSBpcyBDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUpIHsKICAgICAgICBfcmVnaXN0cnkucmVnaXN0ZXJJbnN0YW50aWF0aW9uKGNvbnN0YW50VmFsdWUudHlwZSk7CiAgICAgICAgcmV0dXJuIEhMb2FkVHlwZShjb25zdGFudFZhbHVlLnR5cGUsIGluc3RhbmNlLmluc3RydWN0aW9uVHlwZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5vZGU7CiAgICB9CgogICAgLy8gVE9ETyhzcmEpOiBTdG9yZS1mb3J3YXJkIGxpc3QgbGl0ZXJhbCB0eXBlcy4KCiAgICByZXR1cm4gbm9kZTsKICB9Cn0KCmNsYXNzIFNzYUNoZWNrSW5zZXJ0ZXIgZXh0ZW5kcyBIQmFzZVZpc2l0b3IgaW1wbGVtZW50cyBPcHRpbWl6YXRpb25QaGFzZSB7CiAgZmluYWwgU2V0PEhJbnN0cnVjdGlvbj4gYm91bmRzQ2hlY2tlZDsKICBmaW5hbCBib29sIHRydXN0UHJpbWl0aXZlczsKICBmaW5hbCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQ7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAiU3NhQ2hlY2tJbnNlcnRlciI7CiAgSEdyYXBoIGdyYXBoOwoKICBTc2FDaGVja0luc2VydGVyKHRoaXMudHJ1c3RQcmltaXRpdmVzLCB0aGlzLmNsb3NlZFdvcmxkLCB0aGlzLmJvdW5kc0NoZWNrZWQpOwoKICBBYnN0cmFjdFZhbHVlRG9tYWluIGdldCBfYWJzdHJhY3RWYWx1ZURvbWFpbiA9PgogICAgICBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0R3JhcGgoSEdyYXBoIGdyYXBoKSB7CiAgICB0aGlzLmdyYXBoID0gZ3JhcGg7CgogICAgLy8gSW4gLS10cnVzdC1wcmltaXRpdmVzIG1vZGUgd2UgZG9uJ3QgYWRkIGJvdW5kcyBjaGVja3MuICBUaGlzIGlzIGJldHRlcgogICAgLy8gdGhhbiB0cnlpbmcgdG8gcmVtb3ZlIHRoZW0gbGF0ZXIgYXMgdGhlIGxpbWl0IGV4cHJlc3Npb24gd291bGQgYmVjb21lCiAgICAvLyBkZWFkIGFuZCByZXF1aXJlIERDRS4KICAgIGlmICh0cnVzdFByaW1pdGl2ZXMpIHJldHVybjsKCiAgICB2aXNpdERvbWluYXRvclRyZWUoZ3JhcGgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJhc2ljQmxvY2soSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IGJsb2NrLmZpcnN0OwogICAgd2hpbGUgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgSEluc3RydWN0aW9uIG5leHQgPSBpbnN0cnVjdGlvbi5uZXh0OwogICAgICBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uLmFjY2VwdCh0aGlzKTsKICAgICAgaW5zdHJ1Y3Rpb24gPSBuZXh0OwogICAgfQogIH0KCiAgSEJvdW5kc0NoZWNrIGluc2VydEJvdW5kc0NoZWNrKAogICAgICBISW5zdHJ1Y3Rpb24gaW5kZXhOb2RlLCBISW5zdHJ1Y3Rpb24gYXJyYXksIEhJbnN0cnVjdGlvbiBpbmRleEFyZ3VtZW50KSB7CiAgICBIR2V0TGVuZ3RoIGxlbmd0aCA9IG5ldyBIR2V0TGVuZ3RoKAogICAgICAgIGFycmF5LCBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLnBvc2l0aXZlSW50VHlwZSwKICAgICAgICBpc0Fzc2lnbmFibGU6ICFpc0ZpeGVkTGVuZ3RoKGFycmF5Lmluc3RydWN0aW9uVHlwZSwgY2xvc2VkV29ybGQpKTsKICAgIGluZGV4Tm9kZS5ibG9jay5hZGRCZWZvcmUoaW5kZXhOb2RlLCBsZW5ndGgpOwoKICAgIEFic3RyYWN0VmFsdWUgdHlwZSA9CiAgICAgICAgaW5kZXhBcmd1bWVudC5pc1Bvc2l0aXZlSW50ZWdlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZQogICAgICAgICAgICA/IGluZGV4QXJndW1lbnQuaW5zdHJ1Y3Rpb25UeXBlCiAgICAgICAgICAgIDogY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5wb3NpdGl2ZUludFR5cGU7CiAgICBIQm91bmRzQ2hlY2sgY2hlY2sgPSBuZXcgSEJvdW5kc0NoZWNrKGluZGV4QXJndW1lbnQsIGxlbmd0aCwgYXJyYXksIHR5cGUpCiAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBpbmRleE5vZGUuc291cmNlSW5mb3JtYXRpb247CiAgICBpbmRleE5vZGUuYmxvY2suYWRkQmVmb3JlKGluZGV4Tm9kZSwgY2hlY2spOwogICAgLy8gSWYgdGhlIGluZGV4IGlucHV0IHRvIHRoZSBib3VuZHMgY2hlY2sgd2FzIG5vdCBrbm93biB0byBiZSBhbiBpbnRlZ2VyCiAgICAvLyB0aGVuIHdlIHJlcGxhY2UgaXRzIHVzZXMgd2l0aCB0aGUgYm91bmRzIGNoZWNrLCB3aGljaCBpcyBrbm93biB0byBiZSBhbgogICAgLy8gaW50ZWdlci4gIEhvd2V2ZXIsIGlmIHRoZSBpbnB1dCB3YXMgYWxyZWFkeSBhbiBpbnRlZ2VyIHdlIGRvbid0IGRvIHRoaXMKICAgIC8vIGJlY2F1c2UgcHV0dGluZyBpbiBhIGNoZWNrIGluc3RydWN0aW9uIG1pZ2h0IG9ic2N1cmUgdGhlIHJlYWwgbmF0dXJlIG9mCiAgICAvLyB0aGUgaW5kZXggZWcuIGlmIGl0IGlzIGEgY29uc3RhbnQuICBUaGUgcmFuZ2UgaW5mb3JtYXRpb24gZnJvbSB0aGUKICAgIC8vIEJvdW5kc0NoZWNrIGluc3RydWN0aW9uIGlzIGF0dGFjaGVkIHRvIHRoZSBpbnB1dCBkaXJlY3RseSBieQogICAgLy8gdmlzaXRCb3VuZHNDaGVjayBpbiB0aGUgU3NhVmFsdWVSYW5nZUFuYWx5emVyLgogICAgaWYgKGluZGV4QXJndW1lbnQuaXNJbnRlZ2VyKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc1BvdGVudGlhbGx5RmFsc2UpIHsKICAgICAgaW5kZXhBcmd1bWVudC5yZXBsYWNlQWxsVXNlcnNEb21pbmF0ZWRCeShpbmRleE5vZGUsIGNoZWNrKTsKICAgIH0KICAgIGJvdW5kc0NoZWNrZWQuYWRkKGluZGV4Tm9kZSk7CiAgICByZXR1cm4gY2hlY2s7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW5kZXgoSEluZGV4IG5vZGUpIHsKICAgIGlmIChib3VuZHNDaGVja2VkLmNvbnRhaW5zKG5vZGUpKSByZXR1cm47CiAgICBISW5zdHJ1Y3Rpb24gaW5kZXggPSBub2RlLmluZGV4OwogICAgaW5kZXggPSBpbnNlcnRCb3VuZHNDaGVjayhub2RlLCBub2RlLnJlY2VpdmVyLCBpbmRleCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW5kZXhBc3NpZ24oSEluZGV4QXNzaWduIG5vZGUpIHsKICAgIGlmIChib3VuZHNDaGVja2VkLmNvbnRhaW5zKG5vZGUpKSByZXR1cm47CiAgICBISW5zdHJ1Y3Rpb24gaW5kZXggPSBub2RlLmluZGV4OwogICAgaW5kZXggPSBpbnNlcnRCb3VuZHNDaGVjayhub2RlLCBub2RlLnJlY2VpdmVyLCBpbmRleCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW52b2tlRHluYW1pY01ldGhvZChISW52b2tlRHluYW1pY01ldGhvZCBub2RlKSB7CiAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCA9IG5vZGUuZWxlbWVudDsKICAgIGlmIChub2RlLmlzSW50ZXJjZXB0ZWRDYWxsKSByZXR1cm47CiAgICBpZiAoZWxlbWVudCAhPSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5qc0FycmF5UmVtb3ZlTGFzdCkgcmV0dXJuOwogICAgaWYgKGJvdW5kc0NoZWNrZWQuY29udGFpbnMobm9kZSkpIHJldHVybjsKICAgIC8vIGAwYCBpcyB0aGUgaW5kZXggd2Ugd2FudCB0byBjaGVjaywgYnV0IHdlIHdhbnQgdG8gcmVwb3J0IGAtMWAsIGFzIGlmIHdlCiAgICAvLyBleGVjdXRlZCBgYVthLmxlbmd0aC0xXWAKICAgIEhCb3VuZHNDaGVjayBjaGVjayA9IGluc2VydEJvdW5kc0NoZWNrKAogICAgICAgIG5vZGUsIG5vZGUucmVjZWl2ZXIsIGdyYXBoLmFkZENvbnN0YW50SW50KDAsIGNsb3NlZFdvcmxkKSk7CiAgICBISW5zdHJ1Y3Rpb24gbWludXNPbmUgPSBncmFwaC5hZGRDb25zdGFudEludCgtMSwgY2xvc2VkV29ybGQpOwogICAgY2hlY2suaW5wdXRzLmFkZChtaW51c09uZSk7CiAgICBtaW51c09uZS51c2VkQnkuYWRkKGNoZWNrKTsKICB9Cn0KCmNsYXNzIFNzYURlYWRDb2RlRWxpbWluYXRvciBleHRlbmRzIEhHcmFwaFZpc2l0b3IgaW1wbGVtZW50cyBPcHRpbWl6YXRpb25QaGFzZSB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAiU3NhRGVhZENvZGVFbGltaW5hdG9yIjsKCiAgZmluYWwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkOwogIGZpbmFsIFNzYU9wdGltaXplclRhc2sgb3B0aW1pemVyOwogIEhHcmFwaCBfZ3JhcGg7CiAgU3NhTGl2ZUJsb2NrQW5hbHl6ZXIgYW5hbHl6ZXI7CiAgTWFwPEhJbnN0cnVjdGlvbiwgYm9vbD4gdHJpdmlhbERlYWRTdG9yZVJlY2VpdmVycyA9CiAgICAgIG5ldyBNYXBsZXQ8SEluc3RydWN0aW9uLCBib29sPigpOwogIGJvb2wgZWxpbWluYXRlZFNpZGVFZmZlY3RzID0gZmFsc2U7CgogIFNzYURlYWRDb2RlRWxpbWluYXRvcih0aGlzLmNsb3NlZFdvcmxkLCB0aGlzLm9wdGltaXplcik7CgogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IF9hYnN0cmFjdFZhbHVlRG9tYWluID0+CiAgICAgIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW47CgogIEhJbnN0cnVjdGlvbiB6YXBJbnN0cnVjdGlvbkNhY2hlOwogIEhJbnN0cnVjdGlvbiBnZXQgemFwSW5zdHJ1Y3Rpb24gewogICAgaWYgKHphcEluc3RydWN0aW9uQ2FjaGUgPT0gbnVsbCkgewogICAgICAvLyBBIGNvbnN0YW50IHdpdGggbm8gdHlwZSBkb2VzIG5vdCBwb2xsdXRlIHR5cGVzIGF0IHBoaSBub2Rlcy4KICAgICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IGNvbnN0IFVucmVhY2hhYmxlQ29uc3RhbnRWYWx1ZSgpOwogICAgICB6YXBJbnN0cnVjdGlvbkNhY2hlID0gYW5hbHl6ZXIuZ3JhcGguYWRkQ29uc3RhbnQoY29uc3RhbnQsIGNsb3NlZFdvcmxkKTsKICAgIH0KICAgIHJldHVybiB6YXBJbnN0cnVjdGlvbkNhY2hlOwogIH0KCiAgLy8vIFJldHVybnMgdHJ1ZSBvZiBbZm9yZWlnbl0gd2lsbCB0aHJvdyBhbiBub1N1Y2hNZXRob2QgZXJyb3IgaWYKICAvLy8gcmVjZWl2ZXIgaXMgYG51bGxgIGJlZm9yZSBoYXZpbmcgYW55IG90aGVyIHNpZGUtZWZmZWN0cy4KICBib29sIHRlbXBsYXRlVGhyb3dzTlNNb25OdWxsKEhGb3JlaWduQ29kZSBmb3JlaWduLCBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIpIHsKICAgIGlmIChmb3JlaWduLmlucHV0cy5sZW5ndGggPCAxKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoZm9yZWlnbi5pbnB1dHMuZmlyc3QgIT0gcmVjZWl2ZXIpIHJldHVybiBmYWxzZTsKICAgIGlmIChmb3JlaWduLnRocm93QmVoYXZpb3IuaXNOdWxsTlNNR3VhcmQpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8vIFJldHVybnMgd2hldGhlciB0aGUgbmV4dCB0aHJvd2luZyBpbnN0cnVjdGlvbiB0aGF0IG1heSBoYXZlIHNpZGUKICAvLy8gZWZmZWN0cyBhZnRlciBbaW5zdHJ1Y3Rpb25dLCB0aHJvd3MgW05vU3VjaE1ldGhvZEVycm9yXSBvbiB0aGUKICAvLy8gc2FtZSByZWNlaXZlciBvZiBbaW5zdHJ1Y3Rpb25dLgogIGJvb2wgaGFzRm9sbG93aW5nVGhyb3dpbmdOU00oSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSBpbnN0cnVjdGlvbi5nZXREYXJ0UmVjZWl2ZXIoY2xvc2VkV29ybGQpOwogICAgSEluc3RydWN0aW9uIGN1cnJlbnQgPSBpbnN0cnVjdGlvbi5uZXh0OwogICAgZG8gewogICAgICBpZiAoKGN1cnJlbnQuZ2V0RGFydFJlY2VpdmVyKGNsb3NlZFdvcmxkKSA9PSByZWNlaXZlcikgJiYKICAgICAgICAgIGN1cnJlbnQuY2FuVGhyb3coX2Fic3RyYWN0VmFsdWVEb21haW4pKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgaWYgKGN1cnJlbnQgaXMgSEZvcmVpZ25Db2RlICYmCiAgICAgICAgICB0ZW1wbGF0ZVRocm93c05TTW9uTnVsbChjdXJyZW50LCByZWNlaXZlcikpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoY3VycmVudC5jYW5UaHJvdyhfYWJzdHJhY3RWYWx1ZURvbWFpbikgfHwKICAgICAgICAgIGN1cnJlbnQuc2lkZUVmZmVjdHMuaGFzU2lkZUVmZmVjdHMoKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBISW5zdHJ1Y3Rpb24gbmV4dCA9IGN1cnJlbnQubmV4dDsKICAgICAgaWYgKG5leHQgPT0gbnVsbCkgewogICAgICAgIC8vIFdlIGRvIG5vdCBtZXJnZSBibG9ja3MgaW4gb3VyIFNTQSBncmFwaCwgc28gaWYgdGhpcyBibG9jayBqdXN0IGp1bXBzCiAgICAgICAgLy8gdG8gYSBzaW5nbGUgc3VjY2Vzc29yLCB2aXNpdCB0aGUgc3VjY2Vzc29yLCBhdm9pZGluZyBiYWNrLWVkZ2VzLgogICAgICAgIEhCYXNpY0Jsb2NrIHN1Y2Nlc3NvcjsKICAgICAgICBpZiAoY3VycmVudCBpcyBIR290bykgewogICAgICAgICAgc3VjY2Vzc29yID0gY3VycmVudC5ibG9jay5zdWNjZXNzb3JzLnNpbmdsZTsKICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQgaXMgSElmKSB7CiAgICAgICAgICAvLyBXZSBhbHNvIGxlYXZlIEhJZiBub2RlcyBpbiBwbGFjZSB3aGVuIG9uZSBicmFuY2ggaXMgZGVhZC4KICAgICAgICAgIEhJbnN0cnVjdGlvbiBjb25kaXRpb24gPSBjdXJyZW50LmlucHV0cy5maXJzdDsKICAgICAgICAgIGlmIChjb25kaXRpb24gaXMgSENvbnN0YW50KSB7CiAgICAgICAgICAgIGJvb2wgaXNUcnVlID0gY29uZGl0aW9uLmNvbnN0YW50LmlzVHJ1ZTsKICAgICAgICAgICAgc3VjY2Vzc29yID0gaXNUcnVlID8gY3VycmVudC50aGVuQmxvY2sgOiBjdXJyZW50LmVsc2VCbG9jazsKICAgICAgICAgICAgYXNzZXJ0KCFhbmFseXplci5pc0RlYWRCbG9jayhzdWNjZXNzb3IpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHN1Y2Nlc3NvciAhPSBudWxsICYmIHN1Y2Nlc3Nvci5pZCA+IGN1cnJlbnQuYmxvY2suaWQpIHsKICAgICAgICAgIG5leHQgPSBzdWNjZXNzb3IuZmlyc3Q7CiAgICAgICAgfQogICAgICB9CiAgICAgIGN1cnJlbnQgPSBuZXh0OwogICAgfSB3aGlsZSAoY3VycmVudCAhPSBudWxsKTsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgaXNUcml2aWFsRGVhZFN0b3JlUmVjZWl2ZXIoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICAvLyBGb3IgYW4gYWxsb2NhdGlvbiwgaWYgYWxsIHRoZSBsb2FkcyBhcmUgZGVhZCAoYXdhaXRpbmcgcmVtb3ZhbCBhZnRlcgogICAgLy8gU3NhTG9hZEVsaW1pbmF0aW9uKSBhbmQgdGhlIG9ubHkgb3RoZXIgdXNlcyBhcmUgc3RvcmVzLCB0aGVuIHRoZQogICAgLy8gYWxsb2NhdGlvbiBkb2VzIG5vdCBlc2NhcGUgd2hpY2ggbWFrZXMgYWxsIHRoZSBzdG9yZXMgZGVhZCB0b28uCiAgICBib29sIGlzRGVhZFVzZShISW5zdHJ1Y3Rpb24gdXNlKSB7CiAgICAgIGlmICh1c2UgaXMgSEZpZWxkU2V0KSB7CiAgICAgICAgLy8gVGhlIHVzZSBtdXN0IGJlIHRoZSByZWNlaXZlci4gIEV2ZW4gaWYgdGhlIHVzZSBpcyBhbHNvIHRoZSBhcmd1bWVudCwKICAgICAgICAvLyBpLmUuICBhLnggPSBhLCB0aGUgc3RvcmUgaXMgc3RpbGwgZGVhZCBpZiBhbGwgb3RoZXIgdXNlcyBhcmUgZGVhZC4KICAgICAgICBpZiAodXNlLmdldERhcnRSZWNlaXZlcihjbG9zZWRXb3JsZCkgPT0gaW5zdHJ1Y3Rpb24pIHJldHVybiB0cnVlOwogICAgICB9IGVsc2UgaWYgKHVzZSBpcyBIRmllbGRHZXQpIHsKICAgICAgICBhc3NlcnQodXNlLmdldERhcnRSZWNlaXZlcihjbG9zZWRXb3JsZCkgPT0gaW5zdHJ1Y3Rpb24pOwogICAgICAgIGlmIChpc0RlYWRDb2RlKHVzZSkpIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICByZXR1cm4gaW5zdHJ1Y3Rpb24uaXNBbGxvY2F0aW9uKF9hYnN0cmFjdFZhbHVlRG9tYWluKSAmJgogICAgICAgIGluc3RydWN0aW9uLmlzUHVyZShfYWJzdHJhY3RWYWx1ZURvbWFpbikgJiYKICAgICAgICB0cml2aWFsRGVhZFN0b3JlUmVjZWl2ZXJzLnB1dElmQWJzZW50KAogICAgICAgICAgICBpbnN0cnVjdGlvbiwgKCkgPT4gaW5zdHJ1Y3Rpb24udXNlZEJ5LmV2ZXJ5KGlzRGVhZFVzZSkpOwogIH0KCiAgYm9vbCBpc1RyaXZpYWxEZWFkU3RvcmUoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICByZXR1cm4gaW5zdHJ1Y3Rpb24gaXMgSEZpZWxkU2V0ICYmCiAgICAgICAgaXNUcml2aWFsRGVhZFN0b3JlUmVjZWl2ZXIoaW5zdHJ1Y3Rpb24uZ2V0RGFydFJlY2VpdmVyKGNsb3NlZFdvcmxkKSk7CiAgfQoKICBib29sIGlzRGVhZENvZGUoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBpZiAoIWluc3RydWN0aW9uLnVzZWRCeS5pc0VtcHR5KSByZXR1cm4gZmFsc2U7CiAgICBpZiAoaXNUcml2aWFsRGVhZFN0b3JlKGluc3RydWN0aW9uKSkgcmV0dXJuIHRydWU7CiAgICBpZiAoaW5zdHJ1Y3Rpb24uc2lkZUVmZmVjdHMuaGFzU2lkZUVmZmVjdHMoKSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGluc3RydWN0aW9uLmNhblRocm93KF9hYnN0cmFjdFZhbHVlRG9tYWluKSkgewogICAgICBpZiAoaW5zdHJ1Y3Rpb24ub25seVRocm93c05TTSgpICYmIGhhc0ZvbGxvd2luZ1Rocm93aW5nTlNNKGluc3RydWN0aW9uKSkgewogICAgICAgIC8vIFtpbnN0cnVjdGlvbl0gaXMgYSBudWxsIHJlY2lldmVyIGd1YXJkIHRoYXQgaXMgZm9sbG93ZWQgYnkgYW4KICAgICAgICAvLyBpbnN0cnVjdGlvbiB0aGF0IGZhaWxzIHRoZSBzYW1lIHdheSAoYnkgYWNjZXNzaW5nIGEgcHJvcGVydHkgb2YKICAgICAgICAvLyBgbnVsbGAgb3IgYHVuZGVmaW5lZGApLgogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIUGFyYW1ldGVyVmFsdWUpIHJldHVybiBmYWxzZTsKICAgIGlmIChpbnN0cnVjdGlvbiBpcyBITG9jYWxTZXQpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEdyYXBoKEhHcmFwaCBncmFwaCkgewogICAgX2dyYXBoID0gZ3JhcGg7CiAgICBhbmFseXplciA9IG5ldyBTc2FMaXZlQmxvY2tBbmFseXplcihncmFwaCwgY2xvc2VkV29ybGQsIG9wdGltaXplcik7CiAgICBhbmFseXplci5hbmFseXplKCk7CiAgICB2aXNpdFBvc3REb21pbmF0b3JUcmVlKGdyYXBoKTsKICAgIGNsZWFuUGhpcygpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJhc2ljQmxvY2soSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIGJvb2wgaXNEZWFkQmxvY2sgPSBhbmFseXplci5pc0RlYWRCbG9jayhibG9jayk7CiAgICBibG9jay5pc0xpdmUgPSAhaXNEZWFkQmxvY2s7CiAgICBzaW1wbGlmeUNvbnRyb2xGbG93KGJsb2NrKTsKICAgIC8vIFN0YXJ0IGZyb20gdGhlIGxhc3Qgbm9uLWNvbnRyb2wgZmxvdyBpbnN0cnVjdGlvbiBpbiB0aGUgYmxvY2suCiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBibG9jay5sYXN0LnByZXZpb3VzOwogICAgd2hpbGUgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgdmFyIHByZXZpb3VzID0gaW5zdHJ1Y3Rpb24ucHJldmlvdXM7CiAgICAgIGlmIChpc0RlYWRCbG9jaykgewogICAgICAgIGVsaW1pbmF0ZWRTaWRlRWZmZWN0cyA9CiAgICAgICAgICAgIGVsaW1pbmF0ZWRTaWRlRWZmZWN0cyB8fCBpbnN0cnVjdGlvbi5zaWRlRWZmZWN0cy5oYXNTaWRlRWZmZWN0cygpOwogICAgICAgIHJlbW92ZVVzZXJzKGluc3RydWN0aW9uKTsKICAgICAgICBibG9jay5yZW1vdmUoaW5zdHJ1Y3Rpb24pOwogICAgICB9IGVsc2UgaWYgKGlzRGVhZENvZGUoaW5zdHJ1Y3Rpb24pKSB7CiAgICAgICAgYmxvY2sucmVtb3ZlKGluc3RydWN0aW9uKTsKICAgICAgfQogICAgICBpbnN0cnVjdGlvbiA9IHByZXZpb3VzOwogICAgfQogICAgYmxvY2suZm9yRWFjaFBoaShzaW1wbGlmeVBoaSk7CiAgICBldmFjdWF0ZVRha2VuQnJhbmNoKGJsb2NrKTsKICB9CgogIHZvaWQgc2ltcGxpZnlQaGkoSFBoaSBwaGkpIHsKICAgIC8vIElmIHRoZSBwaGkgaXMgb2YgdGhlIGZvcm0gYHBoaSh4LCBIVHlwZUtub3duKHgpKWAsIGl0IGRvZXMgbm90IHN0cmVuZ3RoZW4KICAgIC8vIGB4YC4gIFdlIGNhbiByZXBsYWNlIHRoZSBwaGkgd2l0aCBgeGAgdG8gcG90ZW50aWFsbHkgbWFrZSB0aGUgSFR5cGVLbm93bgogICAgLy8gcmVmaW5lbWVudCBub2RlIGRlYWQgYW5kIHBvdGVudGlhbGx5IG1ha2UgYSBISWYgY29udHJvbCBubyBIUGhpcy4KCiAgICAvLyBUT0RPKHNyYSk6IEltcGxlbWVudCB2ZXJzaW9uIG9mIHRoaXMgdGVzdCB0aGF0IHdvcmtzIGZvciBhIHN1YmdyYXBoIG9mCiAgICAvLyBIUGhpIG5vZGVzLgogICAgSEluc3RydWN0aW9uIGJhc2UgPSBudWxsOwogICAgYm9vbCBzZWVuVW5yZWZpbmVkQmFzZSA9IGZhbHNlOwogICAgZm9yIChISW5zdHJ1Y3Rpb24gaW5wdXQgaW4gcGhpLmlucHV0cykgewogICAgICBISW5zdHJ1Y3Rpb24gdmFsdWUgPSBpbnB1dDsKICAgICAgd2hpbGUgKHZhbHVlIGlzIEhUeXBlS25vd24pIHsKICAgICAgICBIVHlwZUtub3duIHJlZmluZW1lbnQgPSB2YWx1ZTsKICAgICAgICB2YWx1ZSA9IHJlZmluZW1lbnQuY2hlY2tlZElucHV0OwogICAgICB9CiAgICAgIGlmICh2YWx1ZSA9PSBpbnB1dCkgc2VlblVucmVmaW5lZEJhc2UgPSB0cnVlOwogICAgICBiYXNlID8/PSB2YWx1ZTsKICAgICAgaWYgKGJhc2UgIT0gdmFsdWUpIHJldHVybjsKICAgIH0KCiAgICBpZiAoc2VlblVucmVmaW5lZEJhc2UpIHsKICAgICAgSEJhc2ljQmxvY2sgYmxvY2sgPSBwaGkuYmxvY2s7CiAgICAgIGJsb2NrLnJld3JpdGUocGhpLCBiYXNlKTsKICAgICAgYmxvY2sucmVtb3ZlUGhpKHBoaSk7CiAgICB9CiAgfQoKICB2b2lkIHNpbXBsaWZ5Q29udHJvbEZsb3coSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIEhDb250cm9sRmxvdyBpbnN0cnVjdGlvbiA9IGJsb2NrLmxhc3Q7CiAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSElmKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBjb25kaXRpb24gPSBpbnN0cnVjdGlvbi5jb25kaXRpb247CiAgICAgIGlmIChjb25kaXRpb24uaXNDb25zdGFudCgpKSByZXR1cm47CgogICAgICAvLyBXZSB3YW50IHRvIHJlbW92ZSBhbiBpZi10aGVuLWVsc2UgZGlhbW9uZCB3aGVuIHRoZSB0aGVuLSBhbmQgZWxzZS0KICAgICAgLy8gYnJhbmNoZXMgYXJlIGVtcHR5IGFuZCB0aGUgY29uZGl0aW9uIGRvZXMgbm90IGNvbnRyb2wgYSBIUGhpLiBXZSBjYW5ub3QKICAgICAgLy8gY2hhbmdlIHRoZSBDRkcgc3RydWN0dXJlIHNvIHdlIHJlcGxhY2UgdGhlIEhJZiBjb25kaXRpb24gd2l0aCBhCiAgICAgIC8vIGNvbnN0YW50LiBUaGlzIG1heSBsZWF2ZSB0aGUgb3JpZ2luYWwgY29uZGl0aW9uIHVudXNlZC4gaS5lLiBhCiAgICAgIC8vIGNhbmRpZGF0ZSBmb3IgYmVpbmcgZGVhZCBjb2RlLgoKICAgICAgTGlzdDxIQmFzaWNCbG9jaz4gZG9taW5hdGVkID0gYmxvY2suZG9taW5hdGVkQmxvY2tzOwogICAgICAvLyBEaWFtb25kLWxpa2UgY29udHJvbCBmbG93IGRvbWluYXRlcyB0aGUgdGhlbi0sIGVsc2UtIGFuZCBqb2luLSBibG9ja3MuCiAgICAgIGlmIChkb21pbmF0ZWQubGVuZ3RoICE9IDMpIHJldHVybjsKICAgICAgSEJhc2ljQmxvY2sgam9pbiA9IGRvbWluYXRlZC5sYXN0OwogICAgICBpZiAoIWpvaW4ucGhpcy5pc0VtcHR5KSByZXR1cm47IC8vIGNvbmRpdGlvbiBjb250cm9scyBhIHBoaS4KICAgICAgLy8gSWdub3JlIGV4aXQgYmxvY2sgLSB1c3VhbGx5IHRoZSBqb2luIGluIGBpZiAoLi4uKSByZXR1cm4gLi4uYAogICAgICBpZiAoam9pbi5pc0V4aXRCbG9jaygpKSByZXR1cm47CgogICAgICBpbnQgdGhlblNpemUgPSBtZWFzdXJlRW1wdHlJbnRlcnZhbChpbnN0cnVjdGlvbi50aGVuQmxvY2ssIGpvaW4pOwogICAgICBpZiAodGhlblNpemUgPT0gbnVsbCkgcmV0dXJuOwogICAgICBpbnQgZWxzZVNpemUgPSBtZWFzdXJlRW1wdHlJbnRlcnZhbChpbnN0cnVjdGlvbi5lbHNlQmxvY2ssIGpvaW4pOwogICAgICBpZiAoZWxzZVNpemUgPT0gbnVsbCkgcmV0dXJuOwoKICAgICAgLy8gUGljayB0aGUgJ2xpdmUnIGJyYW5jaCB0byBiZSB0aGUgc21hbGxlc3Qgc3ViZ3JhcGguCiAgICAgIGJvb2wgdmFsdWUgPSB0aGVuU2l6ZSA8PSBlbHNlU2l6ZTsKICAgICAgSEluc3RydWN0aW9uIG5ld0NvbmRpdGlvbiA9IF9ncmFwaC5hZGRDb25zdGFudEJvb2wodmFsdWUsIGNsb3NlZFdvcmxkKTsKICAgICAgaW5zdHJ1Y3Rpb24uaW5wdXRzWzBdID0gbmV3Q29uZGl0aW9uOwogICAgICBjb25kaXRpb24udXNlZEJ5LnJlbW92ZShpbnN0cnVjdGlvbik7CiAgICAgIG5ld0NvbmRpdGlvbi51c2VkQnkuYWRkKGluc3RydWN0aW9uKTsKICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYmxvY2tzIGZyb20gW3N0YXJ0XSB1cCB0byBidXQgbm90IGluY2x1ZGluZyBbZW5kXS4KICAvLy8gUmV0dXJucyBgbnVsbGAgaWYgYW55IG9mIHRoZSBibG9ja3MgaXMgbm9uLWVtcHR5IChvdGhlciB0aGFuIGNvbnRyb2wKICAvLy8gZmxvdykuICBSZXR1cm5zIGBudWxsYCBpZiB0aGVyZSBpcyBhbiBleGl0IGZyb20gdGhlIHJlZ2lvbiBvdGhlciB0aGFuCiAgLy8vIFtlbmRdIG9yIHZpYSBjb250cm9sIGZsb3cgb3RoZXIgdGhhbiBIR290byBhbmQgSElmLgogIGludCBtZWFzdXJlRW1wdHlJbnRlcnZhbChIQmFzaWNCbG9jayBzdGFydCwgSEJhc2ljQmxvY2sgZW5kKSB7CiAgICBpZiAoc3RhcnQuZmlyc3QgIT0gc3RhcnQubGFzdCkgcmV0dXJuIG51bGw7IC8vIHN0YXJ0IGlzIG5vdCBlbXB0eS4KICAgIC8vIERvIGEgc2ltcGxlIHNpbmdsZS1ibG9jayByZWdpb24gdGVzdCBmaXJzdC4KICAgIGlmIChzdGFydC5sYXN0IGlzIEhHb3RvICYmCiAgICAgICAgc3RhcnQuc3VjY2Vzc29ycy5sZW5ndGggPT0gMSAmJgogICAgICAgIHN0YXJ0LnN1Y2Nlc3NvcnMuc2luZ2xlID09IGVuZCkgewogICAgICByZXR1cm4gMTsKICAgIH0KICAgIC8vIFRPRE8oc3JhKTogSW1wbGVtZW50IGZ1bGxlciB0ZXN0LgogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvLy8gSWYgW2Jsb2NrXSBpcyBhbiBhbHdheXMtdGFrZW4gYnJhbmNoLCBtb3ZlIHRoZSBjb2RlIGZyb20gdGhlIHRha2VuIGJyYW5jaAogIC8vLyBpbnRvIFtibG9ja10uIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgbWFraW5nIHRoZSBpbnN0cnVjdGlvbnMgYXZhaWxhYmxlIGZvcgogIC8vLyBmdXJ0aGVyIG9wdGltaXphdGlvbnMgYnkgbW92aW5nIHRoZW0gdG8gYSBwb3NpdGlvbiB0aGF0IGRvbWluYXRlcyB0aGUgam9pbgogIC8vLyBwb2ludCBvZiB0aGUgaWYtdGhlbi1lbHNlLgogIC8vIFRPRE8oMjk0NzUpOiBEZWxldGUgZGVhZCBibG9ja3MgaW5zdGVhZC4KICB2b2lkIGV2YWN1YXRlVGFrZW5CcmFuY2goSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIGlmICghYmxvY2suaXNMaXZlKSByZXR1cm47CiAgICBIQ29udHJvbEZsb3cgYnJhbmNoID0gYmxvY2subGFzdDsKICAgIGlmIChicmFuY2ggaXMgSElmKSB7CiAgICAgIGlmIChicmFuY2gudGhlbkJsb2NrLmlzTGl2ZSA9PSBicmFuY2guZWxzZUJsb2NrLmlzTGl2ZSkgcmV0dXJuOwogICAgICBhc3NlcnQoYnJhbmNoLmNvbmRpdGlvbi5pc0NvbnN0YW50KCkpOwogICAgICBIQmFzaWNCbG9jayB0YXJnZXQgPQogICAgICAgICAgYnJhbmNoLnRoZW5CbG9jay5pc0xpdmUgPyBicmFuY2gudGhlbkJsb2NrIDogYnJhbmNoLmVsc2VCbG9jazsKICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gdGFyZ2V0LmZpcnN0OwogICAgICB3aGlsZSAoIWluc3RydWN0aW9uLmlzQ29udHJvbEZsb3coKSkgewogICAgICAgIEhJbnN0cnVjdGlvbiBuZXh0ID0gaW5zdHJ1Y3Rpb24ubmV4dDsKICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSFR5cGVLbm93biAmJiBpbnN0cnVjdGlvbi5pc1Bpbm5lZCkgYnJlYWs7CiAgICAgICAgaW5zdHJ1Y3Rpb24uYmxvY2suZGV0YWNoKGluc3RydWN0aW9uKTsKICAgICAgICBibG9jay5tb3ZlQXRFeGl0KGluc3RydWN0aW9uKTsKICAgICAgICBpbnN0cnVjdGlvbiA9IG5leHQ7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgY2xlYW5QaGlzKCkgewogICAgTDoKICAgIGZvciAoSEJhc2ljQmxvY2sgYmxvY2sgaW4gX2dyYXBoLmJsb2NrcykgewogICAgICBMaXN0PEhCYXNpY0Jsb2NrPiBwcmVkZWNlc3NvcnMgPSBibG9jay5wcmVkZWNlc3NvcnM7CiAgICAgIC8vIFphcCBhbGwgaW5wdXRzIHRvIHBoaXMgdGhhdCBjb3JyZXNwb25kIHRvIGRlYWQgYmxvY2tzLgogICAgICBibG9jay5mb3JFYWNoUGhpKChIUGhpIHBoaSkgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGhpLmlucHV0cy5sZW5ndGg7ICsraSkgewogICAgICAgICAgaWYgKCFwcmVkZWNlc3NvcnNbaV0uaXNMaXZlICYmIHBoaS5pbnB1dHNbaV0gIT0gemFwSW5zdHJ1Y3Rpb24pIHsKICAgICAgICAgICAgcmVwbGFjZUlucHV0KGksIHBoaSwgemFwSW5zdHJ1Y3Rpb24pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGlmIChwcmVkZWNlc3NvcnMubGVuZ3RoIDwgMikgY29udGludWUgTDsKICAgICAgLy8gRmluZCB0aGUgaW5kZXggb2YgdGhlIHNpbmdsZSBsaXZlIHByZWRlY2Vzc29yIGlmIGl0IGV4aXN0cy4KICAgICAgaW50IGluZGV4T2ZMaXZlID0gLTE7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJlZGVjZXNzb3JzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKHByZWRlY2Vzc29yc1tpXS5pc0xpdmUpIHsKICAgICAgICAgIGlmIChpbmRleE9mTGl2ZSA+PSAwKSBjb250aW51ZSBMOwogICAgICAgICAgaW5kZXhPZkxpdmUgPSBpOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyBSdW4gdGhyb3VnaCB0aGUgcGhpcyBvZiB0aGUgYmxvY2sgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZWlyIGlucHV0CiAgICAgIC8vIHRoYXQgY29tZXMgZnJvbSB0aGUgb25seSBsaXZlIHByZWRlY2Vzc29yIGlmIHRoYXQgZG9taW5hdGVzIHRoZSBwaGkuCiAgICAgIC8vCiAgICAgIC8vIFRPRE8oc3JhKTogSWYgdGhlIGlucHV0IGlzIGRpcmVjdGx5IGluIHRoZSBvbmx5IGxpdmUgcHJlZGVjZXNzb3IsIGl0CiAgICAgIC8vIG1pZ2h0IGJlIHBvc3NpYmxlIHRvIG1vdmUgaXQgaW50byBbYmxvY2tdIChlLmcuIGFsbCBpdHMgaW5wdXRzIGFyZQogICAgICAvLyBkb21pbmF0aW5nLikKICAgICAgYmxvY2suZm9yRWFjaFBoaSgoSFBoaSBwaGkpIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gcmVwbGFjZW1lbnQgPQogICAgICAgICAgICAoaW5kZXhPZkxpdmUgPj0gMCkgPyBwaGkuaW5wdXRzW2luZGV4T2ZMaXZlXSA6IHphcEluc3RydWN0aW9uOwogICAgICAgIGlmIChyZXBsYWNlbWVudC5kb21pbmF0ZXMocGhpKSkgewogICAgICAgICAgYmxvY2sucmV3cml0ZShwaGksIHJlcGxhY2VtZW50KTsKICAgICAgICAgIGJsb2NrLnJlbW92ZVBoaShwaGkpOwogICAgICAgICAgaWYgKHJlcGxhY2VtZW50LnNvdXJjZUVsZW1lbnQgPT0gbnVsbCAmJgogICAgICAgICAgICAgIHBoaS5zb3VyY2VFbGVtZW50ICE9IG51bGwgJiYKICAgICAgICAgICAgICByZXBsYWNlbWVudCBpcyEgSFRoaXMpIHsKICAgICAgICAgICAgcmVwbGFjZW1lbnQuc291cmNlRWxlbWVudCA9IHBoaS5zb3VyY2VFbGVtZW50OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfQoKICB2b2lkIHJlcGxhY2VJbnB1dChpbnQgaSwgSEluc3RydWN0aW9uIGZyb20sIEhJbnN0cnVjdGlvbiBieSkgewogICAgZnJvbS5pbnB1dHNbaV0udXNlZEJ5LnJlbW92ZShmcm9tKTsKICAgIGZyb20uaW5wdXRzW2ldID0gYnk7CiAgICBieS51c2VkQnkuYWRkKGZyb20pOwogIH0KCiAgdm9pZCByZW1vdmVVc2VycyhISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGluc3RydWN0aW9uLnVzZWRCeS5mb3JFYWNoKCh1c2VyKSB7CiAgICAgIHJlbW92ZUlucHV0KHVzZXIsIGluc3RydWN0aW9uKTsKICAgIH0pOwogICAgaW5zdHJ1Y3Rpb24udXNlZEJ5LmNsZWFyKCk7CiAgfQoKICB2b2lkIHJlbW92ZUlucHV0KEhJbnN0cnVjdGlvbiB1c2VyLCBISW5zdHJ1Y3Rpb24gaW5wdXQpIHsKICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMgPSB1c2VyLmlucHV0czsKICAgIGZvciAoaW50IGkgPSAwLCBsZW5ndGggPSBpbnB1dHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGlucHV0ID09IGlucHV0c1tpXSkgewogICAgICAgIHVzZXIuaW5wdXRzW2ldID0gemFwSW5zdHJ1Y3Rpb247CiAgICAgICAgemFwSW5zdHJ1Y3Rpb24udXNlZEJ5LmFkZCh1c2VyKTsKICAgICAgfQogICAgfQogIH0KfQoKY2xhc3MgU3NhTGl2ZUJsb2NrQW5hbHl6ZXIgZXh0ZW5kcyBIQmFzZVZpc2l0b3IgewogIGZpbmFsIEhHcmFwaCBncmFwaDsKICBmaW5hbCBTZXQ8SEJhc2ljQmxvY2s+IGxpdmUgPSBuZXcgU2V0PEhCYXNpY0Jsb2NrPigpOwogIGZpbmFsIExpc3Q8SEJhc2ljQmxvY2s+IHdvcmtsaXN0ID0gPEhCYXNpY0Jsb2NrPltdOwogIGZpbmFsIFNzYU9wdGltaXplclRhc2sgb3B0aW1pemVyOwogIGZpbmFsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZDsKCiAgU3NhTGl2ZUJsb2NrQW5hbHl6ZXIodGhpcy5ncmFwaCwgdGhpcy5jbG9zZWRXb3JsZCwgdGhpcy5vcHRpbWl6ZXIpOwoKICBBYnN0cmFjdFZhbHVlRG9tYWluIGdldCBfYWJzdHJhY3RWYWx1ZURvbWFpbiA9PgogICAgICBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICBNYXA8SEluc3RydWN0aW9uLCBSYW5nZT4gZ2V0IHJhbmdlcyA9PiBvcHRpbWl6ZXIucmFuZ2VzOwoKICBib29sIGlzRGVhZEJsb2NrKEhCYXNpY0Jsb2NrIGJsb2NrKSA9PiAhbGl2ZS5jb250YWlucyhibG9jayk7CgogIHZvaWQgYW5hbHl6ZSgpIHsKICAgIG1hcmtCbG9ja0xpdmUoZ3JhcGguZW50cnkpOwogICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KSB7CiAgICAgIEhCYXNpY0Jsb2NrIGxpdmUgPSB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7CiAgICAgIGxpdmUubGFzdC5hY2NlcHQodGhpcyk7CiAgICB9CiAgfQoKICB2b2lkIG1hcmtCbG9ja0xpdmUoSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIGlmICghbGl2ZS5jb250YWlucyhibG9jaykpIHsKICAgICAgd29ya2xpc3QuYWRkKGJsb2NrKTsKICAgICAgbGl2ZS5hZGQoYmxvY2spOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnRyb2xGbG93KEhDb250cm9sRmxvdyBpbnN0cnVjdGlvbikgewogICAgaW5zdHJ1Y3Rpb24uYmxvY2suc3VjY2Vzc29ycy5mb3JFYWNoKG1hcmtCbG9ja0xpdmUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdElmKEhJZiBpbnN0cnVjdGlvbikgewogICAgSEluc3RydWN0aW9uIGNvbmRpdGlvbiA9IGluc3RydWN0aW9uLmNvbmRpdGlvbjsKICAgIGlmIChjb25kaXRpb24uaXNDb25zdGFudCgpKSB7CiAgICAgIGlmIChjb25kaXRpb24uaXNDb25zdGFudFRydWUoKSkgewogICAgICAgIG1hcmtCbG9ja0xpdmUoaW5zdHJ1Y3Rpb24udGhlbkJsb2NrKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBtYXJrQmxvY2tMaXZlKGluc3RydWN0aW9uLmVsc2VCbG9jayk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHZpc2l0Q29udHJvbEZsb3coaW5zdHJ1Y3Rpb24pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN3aXRjaChIU3dpdGNoIG5vZGUpIHsKICAgIGlmIChub2RlLmV4cHJlc3Npb24uaXNJbnRlZ2VyKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIFJhbmdlIHN3aXRjaFJhbmdlID0gcmFuZ2VzW25vZGUuZXhwcmVzc2lvbl07CiAgICAgIGlmIChzd2l0Y2hSYW5nZSAhPSBudWxsICYmCiAgICAgICAgICBzd2l0Y2hSYW5nZS5sb3dlciBpcyBJbnRWYWx1ZSAmJgogICAgICAgICAgc3dpdGNoUmFuZ2UudXBwZXIgaXMgSW50VmFsdWUpIHsKICAgICAgICBJbnRWYWx1ZSBsb3dlclZhbHVlID0gc3dpdGNoUmFuZ2UubG93ZXI7CiAgICAgICAgSW50VmFsdWUgdXBwZXJWYWx1ZSA9IHN3aXRjaFJhbmdlLnVwcGVyOwogICAgICAgIEJpZ0ludCBsb3dlciA9IGxvd2VyVmFsdWUudmFsdWU7CiAgICAgICAgQmlnSW50IHVwcGVyID0gdXBwZXJWYWx1ZS52YWx1ZTsKICAgICAgICBTZXQ8QmlnSW50PiBsaXZlTGFiZWxzID0gbmV3IFNldDxCaWdJbnQ+KCk7CiAgICAgICAgZm9yIChpbnQgcG9zID0gMTsgcG9zIDwgbm9kZS5pbnB1dHMubGVuZ3RoOyBwb3MrKykgewogICAgICAgICAgSENvbnN0YW50IGlucHV0ID0gbm9kZS5pbnB1dHNbcG9zXTsKICAgICAgICAgIGlmICghaW5wdXQuaXNDb25zdGFudEludGVnZXIoKSkgY29udGludWU7CiAgICAgICAgICBJbnRDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gaW5wdXQuY29uc3RhbnQ7CiAgICAgICAgICBCaWdJbnQgbGFiZWwgPSBjb25zdGFudC5pbnRWYWx1ZTsKICAgICAgICAgIGlmICghbGl2ZUxhYmVscy5jb250YWlucyhsYWJlbCkgJiYgbGFiZWwgPD0gdXBwZXIgJiYgbGFiZWwgPj0gbG93ZXIpIHsKICAgICAgICAgICAgbWFya0Jsb2NrTGl2ZShub2RlLmJsb2NrLnN1Y2Nlc3NvcnNbcG9zIC0gMV0pOwogICAgICAgICAgICBsaXZlTGFiZWxzLmFkZChsYWJlbCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChuZXcgQmlnSW50LmZyb20obGl2ZUxhYmVscy5sZW5ndGgpICE9IHVwcGVyIC0gbG93ZXIgKyBCaWdJbnQub25lKSB7CiAgICAgICAgICBtYXJrQmxvY2tMaXZlKG5vZGUuZGVmYXVsdFRhcmdldCk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgdmlzaXRDb250cm9sRmxvdyhub2RlKTsKICB9Cn0KCmNsYXNzIFNzYURlYWRQaGlFbGltaW5hdG9yIGltcGxlbWVudHMgT3B0aW1pemF0aW9uUGhhc2UgewogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lID0gIlNzYURlYWRQaGlFbGltaW5hdG9yIjsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEdyYXBoKEhHcmFwaCBncmFwaCkgewogICAgZmluYWwgTGlzdDxIUGhpPiB3b3JrbGlzdCA9IDxIUGhpPltdOwogICAgLy8gQSBzZXQgdG8ga2VlcCB0cmFjayBvZiB0aGUgbGl2ZSBwaGlzIHRoYXQgd2UgZm91bmQuCiAgICBmaW5hbCBTZXQ8SFBoaT4gbGl2ZVBoaXMgPSBuZXcgU2V0PEhQaGk+KCk7CgogICAgLy8gQWRkIHRvIHRoZSB3b3JrbGlzdCBhbGwgbGl2ZSBwaGlzOiBwaGlzIHJlZmVyZW5jZWQgYnkgbm9uLXBoaQogICAgLy8gaW5zdHJ1Y3Rpb25zLgogICAgZm9yIChmaW5hbCBibG9jayBpbiBncmFwaC5ibG9ja3MpIHsKICAgICAgYmxvY2suZm9yRWFjaFBoaSgoSFBoaSBwaGkpIHsKICAgICAgICBmb3IgKGZpbmFsIHVzZXIgaW4gcGhpLnVzZWRCeSkgewogICAgICAgICAgaWYgKHVzZXIgaXMhIEhQaGkpIHsKICAgICAgICAgICAgd29ya2xpc3QuYWRkKHBoaSk7CiAgICAgICAgICAgIGxpdmVQaGlzLmFkZChwaGkpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwogICAgfQoKICAgIC8vIFByb2Nlc3MgdGhlIHdvcmtsaXN0IGJ5IHByb3BhZ2F0aW5nIGxpdmVuZXNzIHRvIHBoaSBpbnB1dHMuCiAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkpIHsKICAgICAgSFBoaSBwaGkgPSB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7CiAgICAgIGZvciAoZmluYWwgaW5wdXQgaW4gcGhpLmlucHV0cykgewogICAgICAgIGlmIChpbnB1dCBpcyBIUGhpICYmICFsaXZlUGhpcy5jb250YWlucyhpbnB1dCkpIHsKICAgICAgICAgIHdvcmtsaXN0LmFkZChpbnB1dCk7CiAgICAgICAgICBsaXZlUGhpcy5hZGQoaW5wdXQpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIFJlbW92ZSBwaGlzIHRoYXQgYXJlIG5vdCBsaXZlLgogICAgLy8gVHJhdmVyc2UgaW4gcmV2ZXJzZSBvcmRlciB0byByZW1vdmUgcGhpcyB3aXRoIG5vIHVzZXMgYmVmb3JlIHRoZQogICAgLy8gcGhpcyB0aGF0IHRoZXkgbWlnaHQgdXNlLgogICAgLy8gTk9USUNFOiBEb2Vzbid0IGhhbmRsZSBjaXJjdWxhciByZWZlcmVuY2VzLCBidXQgd2UgZG9uJ3QgY3VycmVudGx5CiAgICAvLyBjcmVhdGUgYW55LgogICAgTGlzdDxIQmFzaWNCbG9jaz4gYmxvY2tzID0gZ3JhcGguYmxvY2tzOwogICAgZm9yIChpbnQgaSA9IGJsb2Nrcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICBIQmFzaWNCbG9jayBibG9jayA9IGJsb2Nrc1tpXTsKICAgICAgSFBoaSBjdXJyZW50ID0gYmxvY2sucGhpcy5maXJzdDsKICAgICAgSFBoaSBuZXh0ID0gbnVsbDsKICAgICAgd2hpbGUgKGN1cnJlbnQgIT0gbnVsbCkgewogICAgICAgIG5leHQgPSBjdXJyZW50Lm5leHQ7CiAgICAgICAgaWYgKCFsaXZlUGhpcy5jb250YWlucyhjdXJyZW50KQogICAgICAgICAgICAvLyBUT0RPKGFoZSk6IE5vdCBzdXJlIHRoZSBmb2xsb3dpbmcgaXMgY29ycmVjdC4KICAgICAgICAgICAgJiYKICAgICAgICAgICAgY3VycmVudC51c2VkQnkuaXNFbXB0eSkgewogICAgICAgICAgYmxvY2sucmVtb3ZlUGhpKGN1cnJlbnQpOwogICAgICAgIH0KICAgICAgICBjdXJyZW50ID0gbmV4dDsKICAgICAgfQogICAgfQogIH0KfQoKY2xhc3MgU3NhUmVkdW5kYW50UGhpRWxpbWluYXRvciBpbXBsZW1lbnRzIE9wdGltaXphdGlvblBoYXNlIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZSA9ICJTc2FSZWR1bmRhbnRQaGlFbGltaW5hdG9yIjsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEdyYXBoKEhHcmFwaCBncmFwaCkgewogICAgZmluYWwgTGlzdDxIUGhpPiB3b3JrbGlzdCA9IDxIUGhpPltdOwoKICAgIC8vIEFkZCBhbGwgcGhpcyBpbiB0aGUgd29ya2xpc3QuCiAgICBmb3IgKGZpbmFsIGJsb2NrIGluIGdyYXBoLmJsb2NrcykgewogICAgICBibG9jay5mb3JFYWNoUGhpKChIUGhpIHBoaSkgPT4gd29ya2xpc3QuYWRkKHBoaSkpOwogICAgfQoKICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSkgewogICAgICBIUGhpIHBoaSA9IHdvcmtsaXN0LnJlbW92ZUxhc3QoKTsKCiAgICAgIC8vIElmIHRoZSBwaGkgaGFzIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQsIGNvbnRpbnVlLgogICAgICBpZiAoIXBoaS5pc0luQmFzaWNCbG9jaygpKSBjb250aW51ZTsKCiAgICAgIC8vIEZpbmQgaWYgdGhlIGlucHV0cyBvZiB0aGUgcGhpIGFyZSB0aGUgc2FtZSBpbnN0cnVjdGlvbi4KICAgICAgLy8gVGhlIGJ1aWxkZXIgZW5zdXJlcyB0aGF0IHBoaS5pbnB1dHNbMF0gY2Fubm90IGJlIHRoZSBwaGkKICAgICAgLy8gaXRzZWxmLgogICAgICBhc3NlcnQoIWlkZW50aWNhbChwaGkuaW5wdXRzWzBdLCBwaGkpKTsKICAgICAgSEluc3RydWN0aW9uIGNhbmRpZGF0ZSA9IHBoaS5pbnB1dHNbMF07CiAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgcGhpLmlucHV0cy5sZW5ndGg7IGkrKykgewogICAgICAgIEhJbnN0cnVjdGlvbiBpbnB1dCA9IHBoaS5pbnB1dHNbaV07CiAgICAgICAgLy8gSWYgdGhlIGlucHV0IGlzIHRoZSBwaGksIHRoZSBwaGkgaXMgc3RpbGwgY2FuZGlkYXRlIGZvcgogICAgICAgIC8vIGVsaW1pbmF0aW9uLgogICAgICAgIGlmICghaWRlbnRpY2FsKGlucHV0LCBjYW5kaWRhdGUpICYmICFpZGVudGljYWwoaW5wdXQsIHBoaSkpIHsKICAgICAgICAgIGNhbmRpZGF0ZSA9IG51bGw7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIElmIHRoZSBpbnB1dHMgYXJlIG5vdCB0aGUgc2FtZSwgY29udGludWUuCiAgICAgIGlmIChjYW5kaWRhdGUgPT0gbnVsbCkgY29udGludWU7CgogICAgICAvLyBCZWNhdXNlIHdlJ3JlIHVwZGF0aW5nIHRoZSB1c2VycyBvZiB0aGlzIHBoaSwgd2UgbWF5IGhhdmUgbmV3CiAgICAgIC8vIHBoaXMgY2FuZGlkYXRlIGZvciBlbGltaW5hdGlvbi4gQWRkIHBoaXMgdGhhdCB1c2VkIHRoaXMgcGhpCiAgICAgIC8vIHRvIHRoZSB3b3JrbGlzdC4KICAgICAgZm9yIChmaW5hbCB1c2VyIGluIHBoaS51c2VkQnkpIHsKICAgICAgICBpZiAodXNlciBpcyBIUGhpKSB3b3JrbGlzdC5hZGQodXNlcik7CiAgICAgIH0KICAgICAgcGhpLmJsb2NrLnJld3JpdGUocGhpLCBjYW5kaWRhdGUpOwogICAgICBwaGkuYmxvY2sucmVtb3ZlUGhpKHBoaSk7CiAgICAgIGlmIChjYW5kaWRhdGUuc291cmNlRWxlbWVudCA9PSBudWxsICYmCiAgICAgICAgICBwaGkuc291cmNlRWxlbWVudCAhPSBudWxsICYmCiAgICAgICAgICBjYW5kaWRhdGUgaXMhIEhUaGlzKSB7CiAgICAgICAgY2FuZGlkYXRlLnNvdXJjZUVsZW1lbnQgPSBwaGkuc291cmNlRWxlbWVudDsKICAgICAgfQogICAgfQogIH0KfQoKY2xhc3MgR3ZuV29ya0l0ZW0gewogIGZpbmFsIEhCYXNpY0Jsb2NrIGJsb2NrOwogIGZpbmFsIFZhbHVlU2V0IHZhbHVlU2V0OwogIEd2bldvcmtJdGVtKHRoaXMuYmxvY2ssIHRoaXMudmFsdWVTZXQpOwp9CgpjbGFzcyBTc2FHbG9iYWxWYWx1ZU51bWJlcmVyIGltcGxlbWVudHMgT3B0aW1pemF0aW9uUGhhc2UgewogIGZpbmFsIEFic3RyYWN0VmFsdWVEb21haW4gX2Fic3RyYWN0VmFsdWVEb21haW47CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAiU3NhR2xvYmFsVmFsdWVOdW1iZXJlciI7CiAgZmluYWwgU2V0PGludD4gdmlzaXRlZDsKCiAgTGlzdDxpbnQ+IGJsb2NrQ2hhbmdlc0ZsYWdzOwogIExpc3Q8aW50PiBsb29wQ2hhbmdlc0ZsYWdzOwoKICBTc2FHbG9iYWxWYWx1ZU51bWJlcmVyKHRoaXMuX2Fic3RyYWN0VmFsdWVEb21haW4pIDogdmlzaXRlZCA9IG5ldyBTZXQ8aW50PigpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0R3JhcGgoSEdyYXBoIGdyYXBoKSB7CiAgICBjb21wdXRlQ2hhbmdlc0ZsYWdzKGdyYXBoKTsKICAgIG1vdmVMb29wSW52YXJpYW50Q29kZShncmFwaCk7CiAgICBMaXN0PEd2bldvcmtJdGVtPiB3b3JrUXVldWUgPSA8R3ZuV29ya0l0ZW0+WwogICAgICBuZXcgR3ZuV29ya0l0ZW0oZ3JhcGguZW50cnksIG5ldyBWYWx1ZVNldCgpKQogICAgXTsKICAgIGRvIHsKICAgICAgR3ZuV29ya0l0ZW0gaXRlbSA9IHdvcmtRdWV1ZS5yZW1vdmVMYXN0KCk7CiAgICAgIHZpc2l0QmFzaWNCbG9jayhpdGVtLmJsb2NrLCBpdGVtLnZhbHVlU2V0LCB3b3JrUXVldWUpOwogICAgfSB3aGlsZSAoIXdvcmtRdWV1ZS5pc0VtcHR5KTsKICB9CgogIHZvaWQgbW92ZUxvb3BJbnZhcmlhbnRDb2RlKEhHcmFwaCBncmFwaCkgewogICAgZm9yIChpbnQgaSA9IGdyYXBoLmJsb2Nrcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICBIQmFzaWNCbG9jayBibG9jayA9IGdyYXBoLmJsb2Nrc1tpXTsKICAgICAgaWYgKGJsb2NrLmlzTG9vcEhlYWRlcigpKSB7CiAgICAgICAgaW50IGNoYW5nZXNGbGFncyA9IGxvb3BDaGFuZ2VzRmxhZ3NbYmxvY2suaWRdOwogICAgICAgIEhMb29wSW5mb3JtYXRpb24gaW5mbyA9IGJsb2NrLmxvb3BJbmZvcm1hdGlvbjsKICAgICAgICAvLyBJdGVyYXRlIG92ZXIgYWxsIGJsb2NrcyBvZiB0aGlzIGxvb3AuIE5vdGUgdGhhdCBibG9ja3MgaW4KICAgICAgICAvLyBpbm5lciBsb29wcyBhcmUgbm90IHZpc2l0ZWQgaGVyZSwgYnV0IHdlIGtub3cgdGhleQogICAgICAgIC8vIHdlcmUgdmlzaXRlZCBiZWZvcmUgYmVjYXVzZSB3ZSBhcmUgaXRlcmF0aW5nIGluIHBvc3Qtb3JkZXIuCiAgICAgICAgLy8gU28gaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIEdWTidlZCBpbiBhbiBpbm5lciBsb29wIGFyZSBpbiB0aGVpcgogICAgICAgIC8vIGxvb3AgZW50cnksIGFuZCBbaW5mby5ibG9ja3NdIGNvbnRhaW5zIHRoaXMgbG9vcCBlbnRyeS4KICAgICAgICBtb3ZlTG9vcEludmFyaWFudENvZGVGcm9tQmxvY2soYmxvY2ssIGJsb2NrLCBjaGFuZ2VzRmxhZ3MpOwogICAgICAgIGZvciAoSEJhc2ljQmxvY2sgb3RoZXIgaW4gaW5mby5ibG9ja3MpIHsKICAgICAgICAgIG1vdmVMb29wSW52YXJpYW50Q29kZUZyb21CbG9jayhvdGhlciwgYmxvY2ssIGNoYW5nZXNGbGFncyk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIG1vdmVMb29wSW52YXJpYW50Q29kZUZyb21CbG9jaygKICAgICAgSEJhc2ljQmxvY2sgYmxvY2ssIEhCYXNpY0Jsb2NrIGxvb3BIZWFkZXIsIGludCBjaGFuZ2VzRmxhZ3MpIHsKICAgIGFzc2VydChibG9jay5wYXJlbnRMb29wSGVhZGVyID09IGxvb3BIZWFkZXIgfHwgYmxvY2sgPT0gbG9vcEhlYWRlcik7CiAgICBIQmFzaWNCbG9jayBwcmVoZWFkZXIgPSBsb29wSGVhZGVyLnByZWRlY2Vzc29yc1swXTsKICAgIGludCBkZXBlbmRzRmxhZ3MgPSBTaWRlRWZmZWN0cy5jb21wdXRlRGVwZW5kc09uRmxhZ3MoY2hhbmdlc0ZsYWdzKTsKICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IGJsb2NrLmZpcnN0OwogICAgYm9vbCBpc0xvb3BBbHdheXNUYWtlbigpIHsKICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gbG9vcEhlYWRlci5sYXN0OwogICAgICBhc3NlcnQoaW5zdHJ1Y3Rpb24gaXMgSEdvdG8gfHwgaW5zdHJ1Y3Rpb24gaXMgSExvb3BCcmFuY2gpOwogICAgICByZXR1cm4gaW5zdHJ1Y3Rpb24gaXMgSEdvdG8gfHwgaW5zdHJ1Y3Rpb24uaW5wdXRzWzBdLmlzQ29uc3RhbnRUcnVlKCk7CiAgICB9CgogICAgYm9vbCBmaXJzdEluc3RydWN0aW9uSW5Mb29wID0gYmxvY2sgPT0gbG9vcEhlYWRlcgogICAgICAgIC8vIENvbXBlbnNhdGUgZm9yIGxhY2sgb2YgY29kZSBtb3Rpb24uCiAgICAgICAgfHwKICAgICAgICAoYmxvY2tDaGFuZ2VzRmxhZ3NbbG9vcEhlYWRlci5pZF0gPT0gMCAmJgogICAgICAgICAgICBpc0xvb3BBbHdheXNUYWtlbigpICYmCiAgICAgICAgICAgIGxvb3BIZWFkZXIuc3VjY2Vzc29yc1swXSA9PSBibG9jayk7CiAgICB3aGlsZSAoaW5zdHJ1Y3Rpb24gIT0gbnVsbCkgewogICAgICBISW5zdHJ1Y3Rpb24gbmV4dCA9IGluc3RydWN0aW9uLm5leHQ7CiAgICAgIGlmIChpbnN0cnVjdGlvbi51c2VHdm4oKSAmJgogICAgICAgICAgaW5zdHJ1Y3Rpb24uaXNNb3ZhYmxlICYmCiAgICAgICAgICAoIWluc3RydWN0aW9uLmNhblRocm93KF9hYnN0cmFjdFZhbHVlRG9tYWluKSB8fAogICAgICAgICAgICAgIGZpcnN0SW5zdHJ1Y3Rpb25Jbkxvb3ApICYmCiAgICAgICAgICAhaW5zdHJ1Y3Rpb24uc2lkZUVmZmVjdHMuZGVwZW5kc09uKGRlcGVuZHNGbGFncykpIHsKICAgICAgICBib29sIGxvb3BJbnZhcmlhbnRJbnB1dHMgPSB0cnVlOwogICAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMgPSBpbnN0cnVjdGlvbi5pbnB1dHM7CiAgICAgICAgZm9yIChpbnQgaSA9IDAsIGxlbmd0aCA9IGlucHV0cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgaWYgKGlzSW5wdXREZWZpbmVkQWZ0ZXJEb21pbmF0b3IoaW5wdXRzW2ldLCBwcmVoZWFkZXIpKSB7CiAgICAgICAgICAgIGxvb3BJbnZhcmlhbnRJbnB1dHMgPSBmYWxzZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBJZiB0aGUgaW5wdXRzIGFyZSBsb29wIGludmFyaWFudCwgd2UgY2FuIG1vdmUgdGhlCiAgICAgICAgLy8gaW5zdHJ1Y3Rpb24gZnJvbSB0aGUgY3VycmVudCBibG9jayB0byB0aGUgcHJlLWhlYWRlciBibG9jay4KICAgICAgICBpZiAobG9vcEludmFyaWFudElucHV0cykgewogICAgICAgICAgYmxvY2suZGV0YWNoKGluc3RydWN0aW9uKTsKICAgICAgICAgIHByZWhlYWRlci5tb3ZlQXRFeGl0KGluc3RydWN0aW9uKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZmlyc3RJbnN0cnVjdGlvbkluTG9vcCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBpbnQgb2xkQ2hhbmdlc0ZsYWdzID0gY2hhbmdlc0ZsYWdzOwogICAgICBjaGFuZ2VzRmxhZ3MgfD0gaW5zdHJ1Y3Rpb24uc2lkZUVmZmVjdHMuZ2V0Q2hhbmdlc0ZsYWdzKCk7CiAgICAgIGlmIChvbGRDaGFuZ2VzRmxhZ3MgIT0gY2hhbmdlc0ZsYWdzKSB7CiAgICAgICAgZGVwZW5kc0ZsYWdzID0gU2lkZUVmZmVjdHMuY29tcHV0ZURlcGVuZHNPbkZsYWdzKGNoYW5nZXNGbGFncyk7CiAgICAgIH0KICAgICAgaW5zdHJ1Y3Rpb24gPSBuZXh0OwogICAgfQogIH0KCiAgYm9vbCBpc0lucHV0RGVmaW5lZEFmdGVyRG9taW5hdG9yKEhJbnN0cnVjdGlvbiBpbnB1dCwgSEJhc2ljQmxvY2sgZG9taW5hdG9yKSB7CiAgICByZXR1cm4gaW5wdXQuYmxvY2suaWQgPiBkb21pbmF0b3IuaWQ7CiAgfQoKICB2b2lkIHZpc2l0QmFzaWNCbG9jaygKICAgICAgSEJhc2ljQmxvY2sgYmxvY2ssIFZhbHVlU2V0IHZhbHVlcywgTGlzdDxHdm5Xb3JrSXRlbT4gd29ya1F1ZXVlKSB7CiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBibG9jay5maXJzdDsKICAgIGlmIChibG9jay5pc0xvb3BIZWFkZXIoKSkgewogICAgICBpbnQgZmxhZ3MgPSBsb29wQ2hhbmdlc0ZsYWdzW2Jsb2NrLmlkXTsKICAgICAgdmFsdWVzLmtpbGwoZmxhZ3MpOwogICAgfQogICAgd2hpbGUgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgSEluc3RydWN0aW9uIG5leHQgPSBpbnN0cnVjdGlvbi5uZXh0OwogICAgICBpbnQgZmxhZ3MgPSBpbnN0cnVjdGlvbi5zaWRlRWZmZWN0cy5nZXRDaGFuZ2VzRmxhZ3MoKTsKICAgICAgYXNzZXJ0KGZsYWdzID09IDAgfHwgIWluc3RydWN0aW9uLnVzZUd2bigpKTsKICAgICAgdmFsdWVzLmtpbGwoZmxhZ3MpOwogICAgICBpZiAoaW5zdHJ1Y3Rpb24udXNlR3ZuKCkpIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gb3RoZXIgPSB2YWx1ZXMubG9va3VwKGluc3RydWN0aW9uKTsKICAgICAgICBpZiAob3RoZXIgIT0gbnVsbCkgewogICAgICAgICAgYXNzZXJ0KG90aGVyLmd2bkVxdWFscyhpbnN0cnVjdGlvbikgJiYgaW5zdHJ1Y3Rpb24uZ3ZuRXF1YWxzKG90aGVyKSk7CiAgICAgICAgICBibG9jay5yZXdyaXRlV2l0aEJldHRlclVzZXIoaW5zdHJ1Y3Rpb24sIG90aGVyKTsKICAgICAgICAgIGJsb2NrLnJlbW92ZShpbnN0cnVjdGlvbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZhbHVlcy5hZGQoaW5zdHJ1Y3Rpb24pOwogICAgICAgIH0KICAgICAgfQogICAgICBpbnN0cnVjdGlvbiA9IG5leHQ7CiAgICB9CgogICAgTGlzdDxIQmFzaWNCbG9jaz4gZG9taW5hdGVkQmxvY2tzID0gYmxvY2suZG9taW5hdGVkQmxvY2tzOwogICAgZm9yIChpbnQgaSA9IDAsIGxlbmd0aCA9IGRvbWluYXRlZEJsb2Nrcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBIQmFzaWNCbG9jayBkb21pbmF0ZWQgPSBkb21pbmF0ZWRCbG9ja3NbaV07CiAgICAgIC8vIE5vIG5lZWQgdG8gY29weSB0aGUgdmFsdWUgc2V0IGZvciB0aGUgbGFzdCBjaGlsZC4KICAgICAgVmFsdWVTZXQgc3VjY2Vzc29yVmFsdWVzID0gKGkgPT0gbGVuZ3RoIC0gMSkgPyB2YWx1ZXMgOiB2YWx1ZXMuY29weSgpOwogICAgICAvLyBJZiB3ZSBoYXZlIG5vIHZhbHVlcyBpbiBvdXIgc2V0LCB3ZSBkbyBub3QgaGF2ZSB0byBraWxsCiAgICAgIC8vIGFueXRoaW5nLiBBbHNvLCBpZiB0aGUgcmFuZ2Ugb2YgYmxvY2sgaWRzIGZyb20gdGhlIGN1cnJlbnQKICAgICAgLy8gYmxvY2sgdG8gdGhlIGRvbWluYXRlZCBibG9jayBpcyBlbXB0eSwgdGhlcmUgaXMgbm8gYmxvY2tzIG9uCiAgICAgIC8vIGFueSBwYXRoIGZyb20gdGhlIGN1cnJlbnQgYmxvY2sgdG8gdGhlIGRvbWluYXRlZCBibG9jayBzbyB3ZQogICAgICAvLyBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIGVpdGhlci4KICAgICAgYXNzZXJ0KGJsb2NrLmlkIDwgZG9taW5hdGVkLmlkKTsKICAgICAgaWYgKCFzdWNjZXNzb3JWYWx1ZXMuaXNFbXB0eSAmJiBibG9jay5pZCArIDEgPCBkb21pbmF0ZWQuaWQpIHsKICAgICAgICB2aXNpdGVkLmNsZWFyKCk7CiAgICAgICAgTGlzdDxIQmFzaWNCbG9jaz4gd29ya1F1ZXVlID0gPEhCYXNpY0Jsb2NrPltkb21pbmF0ZWRdOwogICAgICAgIGludCBjaGFuZ2VzRmxhZ3MgPSAwOwogICAgICAgIGRvIHsKICAgICAgICAgIEhCYXNpY0Jsb2NrIGN1cnJlbnQgPSB3b3JrUXVldWUucmVtb3ZlTGFzdCgpOwogICAgICAgICAgY2hhbmdlc0ZsYWdzIHw9CiAgICAgICAgICAgICAgZ2V0Q2hhbmdlc0ZsYWdzRm9yRG9taW5hdGVkQmxvY2soYmxvY2ssIGN1cnJlbnQsIHdvcmtRdWV1ZSk7CiAgICAgICAgfSB3aGlsZSAoIXdvcmtRdWV1ZS5pc0VtcHR5KTsKICAgICAgICBzdWNjZXNzb3JWYWx1ZXMua2lsbChjaGFuZ2VzRmxhZ3MpOwogICAgICB9CiAgICAgIHdvcmtRdWV1ZS5hZGQobmV3IEd2bldvcmtJdGVtKGRvbWluYXRlZCwgc3VjY2Vzc29yVmFsdWVzKSk7CiAgICB9CiAgfQoKICB2b2lkIGNvbXB1dGVDaGFuZ2VzRmxhZ3MoSEdyYXBoIGdyYXBoKSB7CiAgICAvLyBDcmVhdGUgdGhlIGNoYW5nZXMgZmxhZ3MgbGlzdHMuIE1ha2Ugc3VyZSB0byBpbml0aWFsaXplIHRoZQogICAgLy8gbG9vcCBjaGFuZ2VzIGZsYWdzIGxpc3QgdG8gemVybyBzbyB3ZSBjYW4gdXNlIGJpdHdpc2Ugb3Igd2hlbgogICAgLy8gcHJvcGFnYXRpbmcgbG9vcCBjaGFuZ2VzIHVwd2FyZHMuCiAgICBmaW5hbCBpbnQgbGVuZ3RoID0gZ3JhcGguYmxvY2tzLmxlbmd0aDsKICAgIGJsb2NrQ2hhbmdlc0ZsYWdzID0gbmV3IExpc3Q8aW50PihsZW5ndGgpOwogICAgbG9vcENoYW5nZXNGbGFncyA9IG5ldyBMaXN0PGludD4obGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIGxvb3BDaGFuZ2VzRmxhZ3NbaV0gPSAwOwoKICAgIC8vIFJ1biB0aHJvdWdoIGFsbCB0aGUgYmFzaWMgYmxvY2tzIGluIHRoZSBncmFwaCBhbmQgZmlsbCBpbiB0aGUKICAgIC8vIGNoYW5nZXMgZmxhZ3MgbGlzdHMuCiAgICBmb3IgKGludCBpID0gbGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgZmluYWwgSEJhc2ljQmxvY2sgYmxvY2sgPSBncmFwaC5ibG9ja3NbaV07CiAgICAgIGZpbmFsIGludCBpZCA9IGJsb2NrLmlkOwoKICAgICAgLy8gQ29tcHV0ZSBibG9jayBjaGFuZ2VzIGZsYWdzIGZvciB0aGUgYmxvY2suCiAgICAgIGludCBjaGFuZ2VzRmxhZ3MgPSAwOwogICAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBibG9jay5maXJzdDsKICAgICAgd2hpbGUgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgICBjaGFuZ2VzRmxhZ3MgfD0gaW5zdHJ1Y3Rpb24uc2lkZUVmZmVjdHMuZ2V0Q2hhbmdlc0ZsYWdzKCk7CiAgICAgICAgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbi5uZXh0OwogICAgICB9CiAgICAgIGFzc2VydChibG9ja0NoYW5nZXNGbGFnc1tpZF0gPT0gbnVsbCk7CiAgICAgIGJsb2NrQ2hhbmdlc0ZsYWdzW2lkXSA9IGNoYW5nZXNGbGFnczsKCiAgICAgIC8vIExvb3AgaGVhZGVycyBhcmUgcGFydCBvZiB0aGVpciBsb29wLCBzbyB1cGRhdGUgdGhlIGxvb3AKICAgICAgLy8gY2hhbmdlcyBmbGFncyBhY2NvcmRpbmdseS4KICAgICAgaWYgKGJsb2NrLmlzTG9vcEhlYWRlcigpKSB7CiAgICAgICAgbG9vcENoYW5nZXNGbGFnc1tpZF0gfD0gY2hhbmdlc0ZsYWdzOwogICAgICB9CgogICAgICAvLyBQcm9wYWdhdGUgbG9vcCBjaGFuZ2VzIGZsYWdzIHVwd2FyZHMuCiAgICAgIEhCYXNpY0Jsb2NrIHBhcmVudExvb3BIZWFkZXIgPSBibG9jay5wYXJlbnRMb29wSGVhZGVyOwogICAgICBpZiAocGFyZW50TG9vcEhlYWRlciAhPSBudWxsKSB7CiAgICAgICAgbG9vcENoYW5nZXNGbGFnc1twYXJlbnRMb29wSGVhZGVyLmlkXSB8PQogICAgICAgICAgICAoYmxvY2suaXNMb29wSGVhZGVyKCkpID8gbG9vcENoYW5nZXNGbGFnc1tpZF0gOiBjaGFuZ2VzRmxhZ3M7CiAgICAgIH0KICAgIH0KICB9CgogIGludCBnZXRDaGFuZ2VzRmxhZ3NGb3JEb21pbmF0ZWRCbG9jayhIQmFzaWNCbG9jayBkb21pbmF0b3IsCiAgICAgIEhCYXNpY0Jsb2NrIGRvbWluYXRlZCwgTGlzdDxIQmFzaWNCbG9jaz4gd29ya1F1ZXVlKSB7CiAgICBpbnQgY2hhbmdlc0ZsYWdzID0gMDsKICAgIExpc3Q8SEJhc2ljQmxvY2s+IHByZWRlY2Vzc29ycyA9IGRvbWluYXRlZC5wcmVkZWNlc3NvcnM7CiAgICBmb3IgKGludCBpID0gMCwgbGVuZ3RoID0gcHJlZGVjZXNzb3JzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIEhCYXNpY0Jsb2NrIGJsb2NrID0gcHJlZGVjZXNzb3JzW2ldOwogICAgICBpbnQgaWQgPSBibG9jay5pZDsKICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgcHJlZGVjZXNzb3IgYmxvY2sgaXMgb24gdGhlIHBhdGggZnJvbSB0aGUKICAgICAgLy8gZG9taW5hdG9yIHRvIHRoZSBkb21pbmF0ZWQsIGl0IG11c3QgaGF2ZSBhbiBpZCB0aGF0IGlzIGluIHRoZQogICAgICAvLyByYW5nZSBmcm9tIHRoZSBkb21pbmF0b3IgdG8gdGhlIGRvbWluYXRlZC4KICAgICAgaWYgKGRvbWluYXRvci5pZCA8IGlkICYmIGlkIDwgZG9taW5hdGVkLmlkICYmICF2aXNpdGVkLmNvbnRhaW5zKGlkKSkgewogICAgICAgIHZpc2l0ZWQuYWRkKGlkKTsKICAgICAgICBjaGFuZ2VzRmxhZ3MgfD0gYmxvY2tDaGFuZ2VzRmxhZ3NbaWRdOwogICAgICAgIC8vIExvb3AgYm9kaWVzIG1pZ2h0IG5vdCBiZSBvbiB0aGUgcGF0aCBmcm9tIGRvbWluYXRvciB0byBkb21pbmF0ZWQsCiAgICAgICAgLy8gYnV0IHRoZXkgY2FuIGludmFsaWRhdGUgdmFsdWVzLgogICAgICAgIGNoYW5nZXNGbGFncyB8PSBsb29wQ2hhbmdlc0ZsYWdzW2lkXTsKICAgICAgICB3b3JrUXVldWUuYWRkKGJsb2NrKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNoYW5nZXNGbGFnczsKICB9Cn0KCi8vIFRoaXMgcGhhc2UgbWVyZ2VzIGVxdWl2YWxlbnQgaW5zdHJ1Y3Rpb25zIG9uIGRpZmZlcmVudCBwYXRocyBpbnRvCi8vIG9uZSBpbnN0cnVjdGlvbiBpbiBhIGRvbWluYXRvciBibG9jay4gSXQgcnVucyB0aHJvdWdoIHRoZSBncmFwaAovLyBwb3N0IGRvbWluYXRvciBvcmRlciBhbmQgY29tcHV0ZXMgYSBWYWx1ZVNldCBmb3IgZWFjaCBibG9jayBvZgovLyBpbnN0cnVjdGlvbnMgdGhhdCBjYW4gYmUgbW92ZWQgdG8gYSBkb21pbmF0b3IgYmxvY2suIFRoZXNlCi8vIGluc3RydWN0aW9ucyBhcmUgdGhlIG9uZXMgdGhhdDoKLy8gMSkgY2FuIGJlIHVzZWQgZm9yIEdWTiwgYW5kCi8vIDIpIGRvIG5vdCB1c2UgZGVmaW5pdGlvbnMgb2YgdGhlaXIgb3duIGJsb2NrLgovLwovLyBBIGJhc2ljIGJsb2NrIGxvb2tzIGF0IGl0cyBzdWNlc3NvcnMgYW5kIGZpbmRzIHRoZSBpbnRlcnNlY3Rpb24gb2YKLy8gdGhlc2UgY29tcHV0ZWQgVmFsdWVTZXQuIEl0IG1vdmVzIGFsbCBpbnN0cnVjdGlvbnMgb2YgdGhlCi8vIGludGVyc2VjdGlvbiBpbnRvIGl0cyBvd24gbGlzdCBvZiBpbnN0cnVjdGlvbnMuCmNsYXNzIFNzYUNvZGVNb3Rpb24gZXh0ZW5kcyBIQmFzZVZpc2l0b3IgaW1wbGVtZW50cyBPcHRpbWl6YXRpb25QaGFzZSB7CiAgZmluYWwgQWJzdHJhY3RWYWx1ZURvbWFpbiBfYWJzdHJhY3RWYWx1ZURvbWFpbjsKCiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAiU3NhQ29kZU1vdGlvbiI7CgogIGJvb2wgbW92ZWRDb2RlID0gZmFsc2U7CiAgTGlzdDxWYWx1ZVNldD4gdmFsdWVzOwoKICBTc2FDb2RlTW90aW9uKHRoaXMuX2Fic3RyYWN0VmFsdWVEb21haW4pOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0R3JhcGgoSEdyYXBoIGdyYXBoKSB7CiAgICB2YWx1ZXMgPSBuZXcgTGlzdDxWYWx1ZVNldD4oZ3JhcGguYmxvY2tzLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGdyYXBoLmJsb2Nrcy5sZW5ndGg7IGkrKykgewogICAgICB2YWx1ZXNbZ3JhcGguYmxvY2tzW2ldLmlkXSA9IG5ldyBWYWx1ZVNldCgpOwogICAgfQogICAgdmlzaXRQb3N0RG9taW5hdG9yVHJlZShncmFwaCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QmFzaWNCbG9jayhIQmFzaWNCbG9jayBibG9jaykgewogICAgTGlzdDxIQmFzaWNCbG9jaz4gc3VjY2Vzc29ycyA9IGJsb2NrLnN1Y2Nlc3NvcnM7CgogICAgLy8gUGhhc2UgMTogZ2V0IHRoZSBWYWx1ZVNldCBvZiBhbGwgc3VjY2Vzc29ycyAoaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUpLAogICAgLy8gY29tcHV0ZSB0aGUgaW50ZXJzZWN0aW9uIGFuZCBtb3ZlIHRoZSBpbnN0cnVjdGlvbnMgb2YgdGhlIGludGVyc2VjdGlvbgogICAgLy8gaW50byB0aGlzIGJsb2NrLgogICAgaWYgKHN1Y2Nlc3NvcnMubGVuZ3RoID4gMSkgewogICAgICBWYWx1ZVNldCBpbnN0cnVjdGlvbnMgPSB2YWx1ZXNbc3VjY2Vzc29yc1swXS5pZF07CiAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgc3VjY2Vzc29ycy5sZW5ndGg7IGkrKykgewogICAgICAgIFZhbHVlU2V0IG90aGVyID0gdmFsdWVzW3N1Y2Nlc3NvcnNbaV0uaWRdOwogICAgICAgIGluc3RydWN0aW9ucyA9IGluc3RydWN0aW9ucy5pbnRlcnNlY3Rpb24ob3RoZXIpOwogICAgICB9CgogICAgICBpZiAoIWluc3RydWN0aW9ucy5pc0VtcHR5KSB7CiAgICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGxpc3QgPSBpbnN0cnVjdGlvbnMudG9MaXN0KCk7CiAgICAgICAgLy8gU29ydCBieSBpbnN0cnVjdGlvbiAnaWQnIGZvciBtb3JlIHN0YWJsZSBvcmRlcmluZyB1bmRlciBjaGFuZ2VzIHRvCiAgICAgICAgLy8gdW5yZWxhdGVkIHNvdXJjZSBjb2RlLiAnaWQnIGlzIGEgZnVuY3Rpb24gb2YgdGhlIG9wZXJhdGlvbnMgb2YKICAgICAgICAvLyBjb21waWxpbmcgdGhlIGN1cnJlbnQgbWV0aG9kLCB3aGVyZWFzIHRoZSBWYWx1ZVNldCBvcmRlciBpcyBkZXBlbmRlbnQKICAgICAgICAvLyBoYXNoQ29kZXMgdGhhdCBhcmUgYSBmdW5jdGlvbiBvZiB0aGUgd2hvbGUgcHJvZ3JhbS4KICAgICAgICBsaXN0LnNvcnQoKGluc24xLCBpbnNuMikgPT4gaW5zbjEuaWQuY29tcGFyZVRvKGluc24yLmlkKSk7CiAgICAgICAgZm9yIChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gaW4gbGlzdCkgewogICAgICAgICAgLy8gTW92ZSB0aGUgaW5zdHJ1Y3Rpb24gdG8gdGhlIGN1cnJlbnQgYmxvY2suCiAgICAgICAgICBpbnN0cnVjdGlvbi5ibG9jay5kZXRhY2goaW5zdHJ1Y3Rpb24pOwogICAgICAgICAgYmxvY2subW92ZUF0RXhpdChpbnN0cnVjdGlvbik7CiAgICAgICAgICAvLyBHbyB0aHJvdWdoIGFsbCBzdWNjZXNzb3JzIGFuZCByZXdyaXRlIHRoZWlyIGluc3RydWN0aW9uCiAgICAgICAgICAvLyB0byB0aGUgc2hhcmVkIG9uZS4KICAgICAgICAgIGZvciAoZmluYWwgc3VjY2Vzc29yIGluIHN1Y2Nlc3NvcnMpIHsKICAgICAgICAgICAgSEluc3RydWN0aW9uIHRvUmV3cml0ZSA9IHZhbHVlc1tzdWNjZXNzb3IuaWRdLmxvb2t1cChpbnN0cnVjdGlvbik7CiAgICAgICAgICAgIGlmICh0b1Jld3JpdGUgIT0gaW5zdHJ1Y3Rpb24pIHsKICAgICAgICAgICAgICBzdWNjZXNzb3IucmV3cml0ZVdpdGhCZXR0ZXJVc2VyKHRvUmV3cml0ZSwgaW5zdHJ1Y3Rpb24pOwogICAgICAgICAgICAgIHN1Y2Nlc3Nvci5yZW1vdmUodG9SZXdyaXRlKTsKICAgICAgICAgICAgICBtb3ZlZENvZGUgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIFRPRE8oc3JhKTogVGhlcmUgYXJlIHNvbWUgbm9uLWd2bi1hYmxlIGluc3RydWN0aW9ucyB0aGF0IHdlIGNvdWxkIG1vdmUsCiAgICAgIC8vIGUuZy4gYWxsb2NhdGlvbnMuIFdlIHNob3VsZCBwcm9iYWJseSBub3QgbW92ZSBpbnN0cnVjdGlvbnMgdGhhdCBjYW4KICAgICAgLy8gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdyBzaW5jZSB0aGUgcmVwb3J0ZWQgbG9jYXRpb24gbWlnaHQgYmUgaW4KICAgICAgLy8gdGhlICd3cm9uZycgYnJhbmNoLgogICAgfQoKICAgIC8vIERvbid0IHRyeSB0byBtZXJnZSBpbnN0cnVjdGlvbnMgdG8gYSBkb21pbmF0b3IgaWYgd2UgaGF2ZQogICAgLy8gbXVsdGlwbGUgcHJlZGVjZXNzb3JzLgogICAgaWYgKGJsb2NrLnByZWRlY2Vzc29ycy5sZW5ndGggIT0gMSkgcmV0dXJuOwoKICAgIC8vIFBoYXNlIDI6IEdvIHRocm91Z2ggYWxsIGluc3RydWN0aW9ucyBvZiB0aGlzIGJsb2NrIGFuZCBmaW5kCiAgICAvLyB3aGljaCBpbnN0cnVjdGlvbnMgY2FuIGJlIG1vdmVkIHRvIGEgZG9taW5hdG9yIGJsb2NrLgogICAgVmFsdWVTZXQgc2V0XyA9IHZhbHVlc1tibG9jay5pZF07CiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBibG9jay5maXJzdDsKICAgIGludCBmbGFncyA9IDA7CiAgICB3aGlsZSAoaW5zdHJ1Y3Rpb24gIT0gbnVsbCkgewogICAgICBpbnQgZGVwZW5kc0ZsYWdzID0gU2lkZUVmZmVjdHMuY29tcHV0ZURlcGVuZHNPbkZsYWdzKGZsYWdzKTsKICAgICAgZmxhZ3MgfD0gaW5zdHJ1Y3Rpb24uc2lkZUVmZmVjdHMuZ2V0Q2hhbmdlc0ZsYWdzKCk7CgogICAgICBISW5zdHJ1Y3Rpb24gY3VycmVudCA9IGluc3RydWN0aW9uOwogICAgICBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uLm5leHQ7CiAgICAgIGlmICghY3VycmVudC51c2VHdm4oKSB8fCAhY3VycmVudC5pc01vdmFibGUpIGNvbnRpbnVlOwogICAgICAvLyBUT0RPKHNyYSk6IFdlIGNvdWxkIG1vdmUgdGhyb3dpbmcgaW5zdHJ1Y3Rpb25zIHByb3ZpZGVkIHdlIGtlZXAgdGhlCiAgICAgIC8vIGV4Y2VwdGlvbnMgaW4gdGhlIHNhbWUgb3JkZXIuICBUaGlzIHJlcXVpcmVzIHRoZXkgYXJlIGluIHRoZSBzYW1lIG9yZGVyCiAgICAgIC8vIGluIGFsbCBzdWNjZXNzb3JzLCB3aGljaCBpcyBub3QgdHJhY2tlZCBieSB0aGUgVmFsdWVTZXQuCiAgICAgIGlmIChjdXJyZW50LmNhblRocm93KF9hYnN0cmFjdFZhbHVlRG9tYWluKSkgY29udGludWU7CiAgICAgIGlmIChjdXJyZW50LnNpZGVFZmZlY3RzLmRlcGVuZHNPbihkZXBlbmRzRmxhZ3MpKSBjb250aW51ZTsKCiAgICAgIGJvb2wgY2FuQmVNb3ZlZCA9IHRydWU7CiAgICAgIGZvciAoZmluYWwgSEluc3RydWN0aW9uIGlucHV0IGluIGN1cnJlbnQuaW5wdXRzKSB7CiAgICAgICAgaWYgKGlucHV0LmJsb2NrID09IGJsb2NrKSB7CiAgICAgICAgICBjYW5CZU1vdmVkID0gZmFsc2U7CiAgICAgICAgICBicmVhazsKICAgICAgICAgIC8vIFRPRE8oc3JhKTogV2UgY291bGQgbW92ZSB0cmVlcyBvZiBpbnN0cnVjdGlvbnMgcHJvdmlkZWQgd2UgbW92ZSB0aGUKICAgICAgICAgIC8vIHJvb3RzIGJlZm9yZSB0aGUgbGVhdmVzLgogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIWNhbkJlTW92ZWQpIGNvbnRpbnVlOwoKICAgICAgSEluc3RydWN0aW9uIGV4aXN0aW5nID0gc2V0Xy5sb29rdXAoY3VycmVudCk7CiAgICAgIGlmIChleGlzdGluZyA9PSBudWxsKSB7CiAgICAgICAgc2V0Xy5hZGQoY3VycmVudCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYmxvY2sucmV3cml0ZVdpdGhCZXR0ZXJVc2VyKGN1cnJlbnQsIGV4aXN0aW5nKTsKICAgICAgICBibG9jay5yZW1vdmUoY3VycmVudCk7CiAgICAgICAgbW92ZWRDb2RlID0gdHJ1ZTsKICAgICAgfQogICAgfQogIH0KfQoKY2xhc3MgU3NhVHlwZUNvbnZlcnNpb25JbnNlcnRlciBleHRlbmRzIEhCYXNlVmlzaXRvcgogICAgaW1wbGVtZW50cyBPcHRpbWl6YXRpb25QaGFzZSB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAiU3NhVHlwZWNvbnZlcnNpb25JbnNlcnRlciI7CiAgZmluYWwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkOwoKICBTc2FUeXBlQ29udmVyc2lvbkluc2VydGVyKHRoaXMuY2xvc2VkV29ybGQpOwoKICBBYnN0cmFjdFZhbHVlRG9tYWluIGdldCBfYWJzdHJhY3RWYWx1ZURvbWFpbiA9PgogICAgICBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0R3JhcGgoSEdyYXBoIGdyYXBoKSB7CiAgICB2aXNpdERvbWluYXRvclRyZWUoZ3JhcGgpOwogIH0KCiAgLy8gVXBkYXRlIHVzZXJzIG9mIFtpbnB1dF0gdGhhdCBhcmUgZG9taW5hdGVkIGJ5IFs6ZG9taW5hdG9yLmZpcnN0Ol0KICAvLyB0byB1c2UgW1R5cGVLbm93bl0gb2YgW2lucHV0XSBpbnN0ZWFkLiBBcyB0aGUgdHlwZSBpbmZvcm1hdGlvbiBkZXBlbmRzCiAgLy8gb24gdGhlIGNvbnRyb2wgZmxvdywgd2UgbWFyayB0aGUgaW5zZXJ0ZWQgW0hUeXBlS25vd25dIG5vZGVzIGFzCiAgLy8gbm9uLW1vdmFibGUuCiAgdm9pZCBpbnNlcnRUeXBlUHJvcGFnYXRpb25Gb3JEb21pbmF0ZWRVc2VycygKICAgICAgSEJhc2ljQmxvY2sgZG9taW5hdG9yLCBISW5zdHJ1Y3Rpb24gaW5wdXQsIEFic3RyYWN0VmFsdWUgY29udmVydGVkVHlwZSkgewogICAgRG9taW5hdGVkVXNlcyBkb21pbmF0ZWRVc2VzID0gRG9taW5hdGVkVXNlcy5vZihpbnB1dCwgZG9taW5hdG9yLmZpcnN0KTsKICAgIGlmIChkb21pbmF0ZWRVc2VzLmlzRW1wdHkpIHJldHVybjsKCiAgICAvLyBDaGVjayB0byBhdm9pZCBhZGRpbmcgYSBkdXBsaWNhdGUgSFR5cGVLbm93biBub2RlLgogICAgaWYgKGRvbWluYXRlZFVzZXMuaXNTaW5nbGV0b24pIHsKICAgICAgSEluc3RydWN0aW9uIHVzZXIgPSBkb21pbmF0ZWRVc2VzLnNpbmdsZTsKICAgICAgaWYgKHVzZXIgaXMgSFR5cGVLbm93biAmJgogICAgICAgICAgdXNlci5pc1Bpbm5lZCAmJgogICAgICAgICAgdXNlci5rbm93blR5cGUgPT0gY29udmVydGVkVHlwZSAmJgogICAgICAgICAgdXNlci5jaGVja2VkSW5wdXQgPT0gaW5wdXQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KCiAgICBIVHlwZUtub3duIG5ld0lucHV0ID0gbmV3IEhUeXBlS25vd24ucGlubmVkKGNvbnZlcnRlZFR5cGUsIGlucHV0KTsKICAgIGRvbWluYXRvci5hZGRCZWZvcmUoZG9taW5hdG9yLmZpcnN0LCBuZXdJbnB1dCk7CiAgICBkb21pbmF0ZWRVc2VzLnJlcGxhY2VXaXRoKG5ld0lucHV0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJcyhISXMgaW5zdHJ1Y3Rpb24pIHsKICAgIERhcnRUeXBlIHR5cGUgPSBpbnN0cnVjdGlvbi50eXBlRXhwcmVzc2lvbjsKICAgIGlmICghaW5zdHJ1Y3Rpb24uaXNSYXdDaGVjaykgewogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYgKHR5cGUuaXNUeXBlZGVmKSB7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZiAodHlwZS5pc0Z1dHVyZU9yKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlVHlwZSA9IHR5cGU7CiAgICBDbGFzc0VudGl0eSBjbHMgPSBpbnRlcmZhY2VUeXBlLmVsZW1lbnQ7CgogICAgTGlzdDxIQmFzaWNCbG9jaz4gdHJ1ZVRhcmdldHMgPSA8SEJhc2ljQmxvY2s+W107CiAgICBMaXN0PEhCYXNpY0Jsb2NrPiBmYWxzZVRhcmdldHMgPSA8SEJhc2ljQmxvY2s+W107CgogICAgY29sbGVjdFRhcmdldHMoaW5zdHJ1Y3Rpb24sIHRydWVUYXJnZXRzLCBmYWxzZVRhcmdldHMpOwoKICAgIGlmICh0cnVlVGFyZ2V0cy5pc0VtcHR5ICYmIGZhbHNlVGFyZ2V0cy5pc0VtcHR5KSByZXR1cm47CgogICAgQWJzdHJhY3RWYWx1ZSBjb252ZXJ0ZWRUeXBlID0KICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVOb25OdWxsU3VidHlwZShjbHMpOwogICAgSEluc3RydWN0aW9uIGlucHV0ID0gaW5zdHJ1Y3Rpb24uZXhwcmVzc2lvbjsKCiAgICBmb3IgKEhCYXNpY0Jsb2NrIGJsb2NrIGluIHRydWVUYXJnZXRzKSB7CiAgICAgIGluc2VydFR5cGVQcm9wYWdhdGlvbkZvckRvbWluYXRlZFVzZXJzKGJsb2NrLCBpbnB1dCwgY29udmVydGVkVHlwZSk7CiAgICB9CiAgICAvLyBUT0RPKHNyYSk6IEFsc28gc3RyZW5ndGhlbiB1c2VzIGZvciB3aGVuIHRoZSBjb25kaXRpb24gaXMga25vd24KICAgIC8vIGZhbHNlLiBBdm9pZCBzdHJlbmd0aGVuaW5nIHRvIGBudWxsYC4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJc1Rlc3QoSElzVGVzdCBpbnN0cnVjdGlvbikgewogICAgTGlzdDxIQmFzaWNCbG9jaz4gdHJ1ZVRhcmdldHMgPSA8SEJhc2ljQmxvY2s+W107CiAgICBMaXN0PEhCYXNpY0Jsb2NrPiBmYWxzZVRhcmdldHMgPSA8SEJhc2ljQmxvY2s+W107CgogICAgY29sbGVjdFRhcmdldHMoaW5zdHJ1Y3Rpb24sIHRydWVUYXJnZXRzLCBmYWxzZVRhcmdldHMpOwoKICAgIGlmICh0cnVlVGFyZ2V0cy5pc0VtcHR5ICYmIGZhbHNlVGFyZ2V0cy5pc0VtcHR5KSByZXR1cm47CgogICAgQWJzdHJhY3RWYWx1ZSBjb252ZXJ0ZWRUeXBlID0KICAgICAgICBpbnN0cnVjdGlvbi5jaGVja2VkQWJzdHJhY3RWYWx1ZS5hYnN0cmFjdFZhbHVlOwogICAgSEluc3RydWN0aW9uIGlucHV0ID0gaW5zdHJ1Y3Rpb24uY2hlY2tlZElucHV0OwoKICAgIGZvciAoSEJhc2ljQmxvY2sgYmxvY2sgaW4gdHJ1ZVRhcmdldHMpIHsKICAgICAgaW5zZXJ0VHlwZVByb3BhZ2F0aW9uRm9yRG9taW5hdGVkVXNlcnMoYmxvY2ssIGlucHV0LCBjb252ZXJ0ZWRUeXBlKTsKICAgIH0KICAgIC8vIFRPRE8oc3JhKTogQWxzbyBzdHJlbmd0aGVuIHVzZXMgZm9yIHdoZW4gdGhlIGNvbmRpdGlvbiBpcyBwcmVjaXNlIGFuZAogICAgLy8ga25vd24gZmFsc2UgKGUuZy4gaW50PyB4OyAuLi4gaWYgKHggaXMhIGludCkgdXNlKHgpKS4gQXZvaWQgc3RyZW5ndGhlbmluZwogICAgLy8gdG8gYG51bGxgLgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdElkZW50aXR5KEhJZGVudGl0eSBpbnN0cnVjdGlvbikgewogICAgLy8gQXQgSElmKEhJZGVudGl0eSh4LCBudWxsKSkgc3RyZW5ndGhlbnMgeCB0byBub24tbnVsbCBvbiBlbHNlIGJyYW5jaC4KICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gaW5zdHJ1Y3Rpb24ubGVmdDsKICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IGluc3RydWN0aW9uLnJpZ2h0OwogICAgSEluc3RydWN0aW9uIGlucHV0OwoKICAgIGlmIChsZWZ0LmlzQ29uc3RhbnROdWxsKCkpIHsKICAgICAgaW5wdXQgPSByaWdodDsKICAgIH0gZWxzZSBpZiAocmlnaHQuaXNDb25zdGFudE51bGwoKSkgewogICAgICBpbnB1dCA9IGxlZnQ7CiAgICB9IGVsc2UgewogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzTnVsbChpbnB1dC5pbnN0cnVjdGlvblR5cGUpLmlzRGVmaW5pdGVseUZhbHNlKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBMaXN0PEhCYXNpY0Jsb2NrPiB0cnVlVGFyZ2V0cyA9IDxIQmFzaWNCbG9jaz5bXTsKICAgIExpc3Q8SEJhc2ljQmxvY2s+IGZhbHNlVGFyZ2V0cyA9IDxIQmFzaWNCbG9jaz5bXTsKCiAgICBjb2xsZWN0VGFyZ2V0cyhpbnN0cnVjdGlvbiwgdHJ1ZVRhcmdldHMsIGZhbHNlVGFyZ2V0cyk7CgogICAgaWYgKHRydWVUYXJnZXRzLmlzRW1wdHkgJiYgZmFsc2VUYXJnZXRzLmlzRW1wdHkpIHJldHVybjsKCiAgICBBYnN0cmFjdFZhbHVlIG5vbk51bGxUeXBlID0KICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5leGNsdWRlTnVsbChpbnB1dC5pbnN0cnVjdGlvblR5cGUpOwoKICAgIGZvciAoSEJhc2ljQmxvY2sgYmxvY2sgaW4gZmFsc2VUYXJnZXRzKSB7CiAgICAgIGluc2VydFR5cGVQcm9wYWdhdGlvbkZvckRvbWluYXRlZFVzZXJzKGJsb2NrLCBpbnB1dCwgbm9uTnVsbFR5cGUpOwogICAgfQogICAgLy8gV2UgZG9uJ3Qgc3RyZW5ndGhlbiB0aGUga25vd24tdHJ1ZSByZWZlcmVuY2VzLiBJdCBkb2Vzbid0IGhhcHBlbiBvZnRlbgogICAgLy8gYW5kIHdlIGRvbid0IHdhbnQgImlmICh4PT1udWxsKSByZXR1cm4geDsiIHRvIGNvbnZlcnQgYmV0d2VlbiBKYXZhU2NyaXB0CiAgICAvLyAnbnVsbCcgYW5kICd1bmRlZmluZWQnLgogIH0KCiAgY29sbGVjdFRhcmdldHMoSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBMaXN0PEhCYXNpY0Jsb2NrPiB0cnVlVGFyZ2V0cywKICAgICAgTGlzdDxIQmFzaWNCbG9jaz4gZmFsc2VUYXJnZXRzKSB7CiAgICBmb3IgKEhJbnN0cnVjdGlvbiB1c2VyIGluIGluc3RydWN0aW9uLnVzZWRCeSkgewogICAgICBpZiAodXNlciBpcyBISWYpIHsKICAgICAgICB0cnVlVGFyZ2V0cz8uYWRkKHVzZXIudGhlbkJsb2NrKTsKICAgICAgICBmYWxzZVRhcmdldHM/LmFkZCh1c2VyLmVsc2VCbG9jayk7CiAgICAgIH0gZWxzZSBpZiAodXNlciBpcyBITG9vcEJyYW5jaCkgewogICAgICAgIHRydWVUYXJnZXRzPy5hZGQodXNlci5ibG9jay5zdWNjZXNzb3JzLmZpcnN0KTsKICAgICAgICAvLyBEb24ndCBpbnNlcnQgcmVmaW5lbWVudHMgb24gZWxzZS1icmFuY2ggLSBtYXkgYmUgYSBjcml0aWNhbCBlZGdlCiAgICAgICAgLy8gYmxvY2sgd2hpY2ggd2UgY3VycmVudGx5IG5lZWQgdG8ga2VlcCBlbXB0eSAoZXhjZXB0IGZvciBwaGlzKS4KICAgICAgfSBlbHNlIGlmICh1c2VyIGlzIEhOb3QpIHsKICAgICAgICBjb2xsZWN0VGFyZ2V0cyh1c2VyLCBmYWxzZVRhcmdldHMsIHRydWVUYXJnZXRzKTsKICAgICAgfSBlbHNlIGlmICh1c2VyIGlzIEhQaGkpIHsKICAgICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzID0gdXNlci5pbnB1dHM7CiAgICAgICAgaWYgKGlucHV0cy5sZW5ndGggPT0gMikgewogICAgICAgICAgYXNzZXJ0KGlucHV0cy5jb250YWlucyhpbnN0cnVjdGlvbikpOwogICAgICAgICAgSEluc3RydWN0aW9uIG90aGVyID0gaW5wdXRzWyhpbnB1dHNbMF0gPT0gaW5zdHJ1Y3Rpb24pID8gMSA6IDBdOwogICAgICAgICAgaWYgKG90aGVyLmlzQ29uc3RhbnRUcnVlKCkpIHsKICAgICAgICAgICAgLy8gVGhlIGNvbmRpdGlvbiBmbG93cyB0byBhIEhQaGkodHJ1ZSwgdXNlciksIHdoaWNoIG1lYW5zIHRoYXQgYQogICAgICAgICAgICAvLyBkb3duc3RyZWFtIEhJZiBoYXMgdHJ1ZS1icmFuY2ggY29udHJvbCBmbG93IHRoYXQgZG9lcyBub3QgZGVwZW5kCiAgICAgICAgICAgIC8vIG9uIHRoZSBvcmlnaW5hbCBpbnN0cnVjdGlvbiwgc28gc3RvcCBjb2xsZWN0aW5nIFt0cnVlVGFyZ2V0c10uCiAgICAgICAgICAgIGNvbGxlY3RUYXJnZXRzKHVzZXIsIG51bGwsIGZhbHNlVGFyZ2V0cyk7CiAgICAgICAgICB9IGVsc2UgaWYgKG90aGVyLmlzQ29uc3RhbnRGYWxzZSgpKSB7CiAgICAgICAgICAgIC8vIERpdHRvIGZvciBmYWxzZS4KICAgICAgICAgICAgY29sbGVjdFRhcmdldHModXNlciwgdHJ1ZVRhcmdldHMsIG51bGwpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQoKLy8vIE9wdGltaXphdGlvbiBwaGFzZSB0aGF0IHRyaWVzIHRvIGVsaW1pbmF0ZSBtZW1vcnkgbG9hZHMgKGZvciBleGFtcGxlCi8vLyBbSEZpZWxkR2V0XSksIHdoZW4gaXQga25vd3MgdGhlIHZhbHVlIHN0b3JlZCBpbiB0aGF0IG1lbW9yeSBsb2NhdGlvbiwgYW5kCi8vLyBzdG9yZXMgdGhhdCBvdmVyd3JpdGUgd2l0aCB0aGUgc2FtZSB2YWx1ZS4KY2xhc3MgU3NhTG9hZEVsaW1pbmF0aW9uIGV4dGVuZHMgSEJhc2VWaXNpdG9yIGltcGxlbWVudHMgT3B0aW1pemF0aW9uUGhhc2UgewogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CiAgZmluYWwgSkZpZWxkQW5hbHlzaXMgX2ZpZWxkQW5hbHlzaXM7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAiU3NhTG9hZEVsaW1pbmF0aW9uIjsKICBNZW1vcnlTZXQgbWVtb3J5U2V0OwogIExpc3Q8TWVtb3J5U2V0PiBtZW1vcmllczsKICBib29sIG5ld0d2bkNhbmRpZGF0ZXMgPSBmYWxzZTsKICBIR3JhcGggX2dyYXBoOwoKICBTc2FMb2FkRWxpbWluYXRpb24odGhpcy5fY2xvc2VkV29ybGQpCiAgICAgIDogX2ZpZWxkQW5hbHlzaXMgPSBfY2xvc2VkV29ybGQuZmllbGRBbmFseXNpczsKCiAgQWJzdHJhY3RWYWx1ZURvbWFpbiBnZXQgX2Fic3RyYWN0VmFsdWVEb21haW4gPT4KICAgICAgX2Nsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW47CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRHcmFwaChIR3JhcGggZ3JhcGgpIHsKICAgIF9ncmFwaCA9IGdyYXBoOwogICAgbWVtb3JpZXMgPSBuZXcgTGlzdDxNZW1vcnlTZXQ+KGdyYXBoLmJsb2Nrcy5sZW5ndGgpOwogICAgTGlzdDxIQmFzaWNCbG9jaz4gYmxvY2tzID0gZ3JhcGguYmxvY2tzOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBibG9ja3MubGVuZ3RoOyBpKyspIHsKICAgICAgSEJhc2ljQmxvY2sgYmxvY2sgPSBibG9ja3NbaV07CiAgICAgIHZpc2l0QmFzaWNCbG9jayhibG9jayk7CiAgICAgIGlmIChibG9jay5zdWNjZXNzb3JzLmlzTm90RW1wdHkgJiYgYmxvY2suc3VjY2Vzc29yc1swXS5pc0xvb3BIZWFkZXIoKSkgewogICAgICAgIC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIGVuZGluZyBibG9jayBvZiBhIGxvb3AuIEl0ZXJhdGUgb3ZlciB0aGUKICAgICAgICAvLyBibG9ja3Mgb2YgdGhlIGxvb3AgYWdhaW4gdG8gdGFrZSB2YWx1ZXMgdGhhdCBmbG93IGZyb20gdGhhdAogICAgICAgIC8vIGVuZGluZyBibG9jayBpbnRvIGFjY291bnQuCiAgICAgICAgZm9yIChpbnQgaiA9IGJsb2NrLnN1Y2Nlc3NvcnNbMF0uaWQ7IGogPD0gYmxvY2suaWQ7IGorKykgewogICAgICAgICAgdmlzaXRCYXNpY0Jsb2NrKGJsb2Nrc1tqXSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QmFzaWNCbG9jayhIQmFzaWNCbG9jayBibG9jaykgewogICAgaWYgKGJsb2NrLnByZWRlY2Vzc29ycy5sZW5ndGggPT0gMCkgewogICAgICAvLyBFbnRyeSBibG9jay4KICAgICAgbWVtb3J5U2V0ID0gbmV3IE1lbW9yeVNldChfY2xvc2VkV29ybGQpOwogICAgfSBlbHNlIGlmIChibG9jay5wcmVkZWNlc3NvcnMubGVuZ3RoID09IDEgJiYKICAgICAgICBibG9jay5wcmVkZWNlc3NvcnNbMF0uc3VjY2Vzc29ycy5sZW5ndGggPT0gMSkgewogICAgICAvLyBObyBuZWVkIHRvIGNsb25lLCB0aGVyZSBpcyBubyBvdGhlciBzdWNjZXNzb3IgZm9yCiAgICAgIC8vIGBibG9jay5wcmVkZWNlc3NvcnNbMF1gLCBhbmQgdGhpcyBibG9jayBoYXMgb25seSBvbmUKICAgICAgLy8gcHJlZGVjZXNzb3IuIFNpbmNlIHdlIGFyZSBub3QgZ29pbmcgdG8gdmlzaXQKICAgICAgLy8gYGJsb2NrLnByZWRlY2Vzc29yc1swXWAgYWdhaW4sIHdlIGNhbiBqdXN0IHJlLXVzZSBpdHMKICAgICAgLy8gW21lbW9yeVNldF0uCiAgICAgIG1lbW9yeVNldCA9IG1lbW9yaWVzW2Jsb2NrLnByZWRlY2Vzc29yc1swXS5pZF07CiAgICB9IGVsc2UgaWYgKGJsb2NrLnByZWRlY2Vzc29ycy5sZW5ndGggPT0gMSkgewogICAgICAvLyBDbG9uZSB0aGUgbWVtb3J5U2V0IG9mIHRoZSBwcmVkZWNlc3NvciwgYmVjYXVzZSBpdCBpcyBhbHNvIHVzZWQKICAgICAgLy8gYnkgb3RoZXIgc3VjY2Vzc29ycyBvZiBpdC4KICAgICAgbWVtb3J5U2V0ID0gbWVtb3JpZXNbYmxvY2sucHJlZGVjZXNzb3JzWzBdLmlkXS5jbG9uZSgpOwogICAgfSBlbHNlIHsKICAgICAgLy8gQ29tcHV0ZSB0aGUgaW50ZXJzZWN0aW9uIG9mIGFsbCBwcmVkZWNlc3NvcnMuCiAgICAgIG1lbW9yeVNldCA9IG1lbW9yaWVzW2Jsb2NrLnByZWRlY2Vzc29yc1swXS5pZF07CiAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgYmxvY2sucHJlZGVjZXNzb3JzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgbWVtb3J5U2V0ID0gbWVtb3J5U2V0LmludGVyc2VjdGlvbkZvcigKICAgICAgICAgICAgbWVtb3JpZXNbYmxvY2sucHJlZGVjZXNzb3JzW2ldLmlkXSwgYmxvY2ssIGkpOwogICAgICB9CiAgICB9CgogICAgbWVtb3JpZXNbYmxvY2suaWRdID0gbWVtb3J5U2V0OwogICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gYmxvY2suZmlyc3Q7CiAgICB3aGlsZSAoaW5zdHJ1Y3Rpb24gIT0gbnVsbCkgewogICAgICBISW5zdHJ1Y3Rpb24gbmV4dCA9IGluc3RydWN0aW9uLm5leHQ7CiAgICAgIGluc3RydWN0aW9uLmFjY2VwdCh0aGlzKTsKICAgICAgaW5zdHJ1Y3Rpb24gPSBuZXh0OwogICAgfQogIH0KCiAgdm9pZCBjaGVja05ld0d2bkNhbmRpZGF0ZXMoSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBISW5zdHJ1Y3Rpb24gZXhpc3RpbmcpIHsKICAgIGlmIChuZXdHdm5DYW5kaWRhdGVzKSByZXR1cm47CiAgICBib29sIGhhc1VzZUd2bihISW5zdHJ1Y3Rpb24gaW5zbikgPT4gaW5zbi5ub25DaGVjaygpLnVzZUd2bigpOwogICAgaWYgKGluc3RydWN0aW9uLnVzZWRCeS5hbnkoaGFzVXNlR3ZuKSAmJiBleGlzdGluZy51c2VkQnkuYW55KGhhc1VzZUd2bikpIHsKICAgICAgbmV3R3ZuQ2FuZGlkYXRlcyA9IHRydWU7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RmllbGRHZXQoSEZpZWxkR2V0IGluc3RydWN0aW9uKSB7CiAgICBpZiAoaW5zdHJ1Y3Rpb24uaXNOdWxsQ2hlY2spIHJldHVybjsKICAgIEZpZWxkRW50aXR5IGVsZW1lbnQgPSBpbnN0cnVjdGlvbi5lbGVtZW50OwogICAgSEluc3RydWN0aW9uIHJlY2VpdmVyID0KICAgICAgICBpbnN0cnVjdGlvbi5nZXREYXJ0UmVjZWl2ZXIoX2Nsb3NlZFdvcmxkKS5ub25DaGVjaygpOwogICAgX3Zpc2l0RmllbGRHZXQoZWxlbWVudCwgcmVjZWl2ZXIsIGluc3RydWN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRHZXRMZW5ndGgoSEdldExlbmd0aCBpbnN0cnVjdGlvbikgewogICAgSEluc3RydWN0aW9uIHJlY2VpdmVyID0gaW5zdHJ1Y3Rpb24ucmVjZWl2ZXIubm9uQ2hlY2soKTsKICAgIEhJbnN0cnVjdGlvbiBleGlzdGluZyA9CiAgICAgICAgbWVtb3J5U2V0Lmxvb2t1cEZpZWxkVmFsdWUoTWVtb3J5RmVhdHVyZS5sZW5ndGgsIHJlY2VpdmVyKTsKICAgIGlmIChleGlzdGluZyAhPSBudWxsKSB7CiAgICAgIGNoZWNrTmV3R3ZuQ2FuZGlkYXRlcyhpbnN0cnVjdGlvbiwgZXhpc3RpbmcpOwogICAgICBpbnN0cnVjdGlvbi5ibG9jay5yZXdyaXRlV2l0aEJldHRlclVzZXIoaW5zdHJ1Y3Rpb24sIGV4aXN0aW5nKTsKICAgICAgaW5zdHJ1Y3Rpb24uYmxvY2sucmVtb3ZlKGluc3RydWN0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIG1lbW9yeVNldC5yZWdpc3RlckZpZWxkVmFsdWUoTWVtb3J5RmVhdHVyZS5sZW5ndGgsIHJlY2VpdmVyLCBpbnN0cnVjdGlvbik7CiAgICB9CiAgfQoKICB2b2lkIF92aXNpdEZpZWxkR2V0KAogICAgICBGaWVsZEVudGl0eSBlbGVtZW50LCBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIsIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgSEluc3RydWN0aW9uIGV4aXN0aW5nID0gbWVtb3J5U2V0Lmxvb2t1cEZpZWxkVmFsdWUoZWxlbWVudCwgcmVjZWl2ZXIpOwogICAgaWYgKGV4aXN0aW5nICE9IG51bGwpIHsKICAgICAgY2hlY2tOZXdHdm5DYW5kaWRhdGVzKGluc3RydWN0aW9uLCBleGlzdGluZyk7CiAgICAgIGluc3RydWN0aW9uLmJsb2NrLnJld3JpdGVXaXRoQmV0dGVyVXNlcihpbnN0cnVjdGlvbiwgZXhpc3RpbmcpOwogICAgICBpbnN0cnVjdGlvbi5ibG9jay5yZW1vdmUoaW5zdHJ1Y3Rpb24pOwogICAgfSBlbHNlIHsKICAgICAgbWVtb3J5U2V0LnJlZ2lzdGVyRmllbGRWYWx1ZShlbGVtZW50LCByZWNlaXZlciwgaW5zdHJ1Y3Rpb24pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZpZWxkU2V0KEhGaWVsZFNldCBpbnN0cnVjdGlvbikgewogICAgRmllbGRFbnRpdHkgZWxlbWVudCA9IGluc3RydWN0aW9uLmVsZW1lbnQ7CiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPQogICAgICAgIGluc3RydWN0aW9uLmdldERhcnRSZWNlaXZlcihfY2xvc2VkV29ybGQpLm5vbkNoZWNrKCk7CiAgICBpZiAobWVtb3J5U2V0LnJlZ2lzdGVyRmllbGRWYWx1ZVVwZGF0ZSgKICAgICAgICBlbGVtZW50LCByZWNlaXZlciwgaW5zdHJ1Y3Rpb24udmFsdWUpKSB7CiAgICAgIGluc3RydWN0aW9uLmJsb2NrLnJlbW92ZShpbnN0cnVjdGlvbik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q3JlYXRlKEhDcmVhdGUgaW5zdHJ1Y3Rpb24pIHsKICAgIG1lbW9yeVNldC5yZWdpc3RlckFsbG9jYXRpb24oaW5zdHJ1Y3Rpb24pOwogICAgaWYgKHNob3VsZFRyYWNrSW5pdGlhbFZhbHVlcyhpbnN0cnVjdGlvbikpIHsKICAgICAgaW50IGFyZ3VtZW50SW5kZXggPSAwOwogICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hJbnN0YW5jZUZpZWxkKGluc3RydWN0aW9uLmVsZW1lbnQsCiAgICAgICAgICAoXywgRmllbGRFbnRpdHkgbWVtYmVyKSB7CiAgICAgICAgRmllbGRBbmFseXNpc0RhdGEgZmllbGREYXRhID0gX2ZpZWxkQW5hbHlzaXMuZ2V0RmllbGREYXRhKG1lbWJlcik7CiAgICAgICAgaWYgKGZpZWxkRGF0YS5pc0VsaWRlZCkgcmV0dXJuOwogICAgICAgIGlmIChmaWVsZERhdGEuaXNJbml0aWFsaXplZEluQWxsb2NhdG9yKSB7CiAgICAgICAgICAvLyBUT0RPKHNyYSk6IENhbiB3ZSBhdm9pZCBjYWxsaW5nIEhHcmFwaC5hZGRDb25zdGFudD8KICAgICAgICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPSBmaWVsZERhdGEuaW5pdGlhbFZhbHVlOwogICAgICAgICAgSENvbnN0YW50IGNvbnN0YW50ID0gX2dyYXBoLmFkZENvbnN0YW50KHZhbHVlLCBfY2xvc2VkV29ybGQpOwogICAgICAgICAgbWVtb3J5U2V0LnJlZ2lzdGVyRmllbGRWYWx1ZShtZW1iZXIsIGluc3RydWN0aW9uLCBjb25zdGFudCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG1lbW9yeVNldC5yZWdpc3RlckZpZWxkVmFsdWUoCiAgICAgICAgICAgICAgbWVtYmVyLCBpbnN0cnVjdGlvbiwgaW5zdHJ1Y3Rpb24uaW5wdXRzW2FyZ3VtZW50SW5kZXgrK10pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICAvLyBJbiBjYXNlIHRoaXMgaW5zdHJ1Y3Rpb24gaGFzIGFzIGlucHV0IG5vbi1lc2NhcGluZyBvYmplY3RzLCB3ZQogICAgLy8gbmVlZCB0byBtYXJrIHRoZXNlIG9iamVjdHMgYXMgZXNjYXBpbmcuCiAgICBtZW1vcnlTZXQua2lsbEFmZmVjdGVkQnkoaW5zdHJ1Y3Rpb24pOwogIH0KCiAgYm9vbCBzaG91bGRUcmFja0luaXRpYWxWYWx1ZXMoSENyZWF0ZSBpbnN0cnVjdGlvbikgewogICAgLy8gRG9uJ3QgdHJhY2sgaW5pdGlhbCBmaWVsZCB2YWx1ZXMgb2YgYW4gYWxsb2NhdGlvbiB0aGF0IGFyZQogICAgLy8gdW5wcm9maXRhYmxlLiBXZSBzZWFyY2ggdGhlIGNoYWluIG9mIHNpbmdsZSB1c2VzIGluIGFsbG9jYXRpb25zIGZvciBhCiAgICAvLyBsaW1pdGVkIGRlcHRoLgoKICAgIGNvbnN0IE1BWF9IRUFQX0RFUFRIID0gNTsKCiAgICBib29sIGludGVyZXN0aW5nVXNlKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiwgaW50IGhlYXBEZXB0aCkgewogICAgICAvLyBIZXVyaXN0aWM6IGlmIHRoZSBhbGxvY2F0aW9uIGlzIHRvbyBkZWVwIGluIGhlYXAgaXQgaXMgdW5saWtlbHkgd2Ugd2lsbAogICAgICAvLyByZWNvdmVyIGEgZmllbGQgYnkgbG9hZC1lbGltaW5hdGlvbi4KICAgICAgLy8gVE9ETyhzcmEpOiBXZSBjYW4gbWVhc3VyZSB0aGlzIGRlcHRoIGJ5IGxvb2tpbmcgYXQgbG9hZCBjaGFpbnMuCiAgICAgIGlmIChoZWFwRGVwdGggPT0gTUFYX0hFQVBfREVQVEgpIHJldHVybiBmYWxzZTsKICAgICAgLy8gVGhlcmUgYXJlIG11bHRpcGxlIHVzZXMgc28gZG8gdGhlIGZ1bGwgc3RvcmUgYW5hbHlzaXMuCiAgICAgIGlmIChpbnN0cnVjdGlvbi51c2VkQnkubGVuZ3RoICE9IDEpIHJldHVybiB0cnVlOwogICAgICBISW5zdHJ1Y3Rpb24gdXNlID0gaW5zdHJ1Y3Rpb24udXNlZEJ5LnNpbmdsZTsKICAgICAgLy8gV2hlbiB0aGUgb25seSB1c2UgaXMgYW4gYWxsb2NhdGlvbiwgdGhlIGFsbG9jYXRpb24gYmVjb21lcyB0aGUgb25seQogICAgICAvLyBoZWFwIGFsaWFzIGZvciB0aGUgY3VycmVudCBpbnN0cnVjdGlvbi4KICAgICAgaWYgKHVzZSBpcyBIQ3JlYXRlKSByZXR1cm4gaW50ZXJlc3RpbmdVc2UodXNlLCBoZWFwRGVwdGggKyAxKTsKICAgICAgaWYgKHVzZSBpcyBITGl0ZXJhbExpc3QpIHJldHVybiBpbnRlcmVzdGluZ1VzZSh1c2UsIGhlYXBEZXB0aCArIDEpOwogICAgICBpZiAodXNlIGlzIEhJbnZva2VTdGF0aWMpIHsKICAgICAgICAvLyBBc3N1bWUgdGhlIGFyZ3VtZW50IGVzY2FwZXMuIEFsbCB3ZSBkbyB3aXRoIG91ciBpbml0aWFsIGFsbG9jYXRpb24gaXMKICAgICAgICAvLyBoYXZlIGl0IGVzY2FwZSBvciBzdG9yZSBpdCBpbnRvIGFuIG9iamVjdCB0aGF0IGVzY2FwZXMuCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIC8vIFRPRE8oc3JhKTogSGFuZGxlIGxpYnJhcnkgZnVuY3Rpb25zIHRoYXQgd2Uga25vdyBkbyBub3QgbW9kaWZ5IG9yCiAgICAgICAgLy8gbGVhayB0aGUgaW5wdXRzLiBGb3IgZXhhbXBsZSBgc2V0UnVudGltZVR5cGVJbmZvYCBpcyB1c2VkIHRvIG1hcmsKICAgICAgICAvLyBsaXN0IGxpdGVyYWxzIHdpdGggdHlwZSBpbmZvcm1hdGlvbi4KICAgICAgfQogICAgICBpZiAodXNlIGlzIEhQaGkpIHsKICAgICAgICAvLyBUaGUgaW5pdGlhbCBhbGxvY2F0aW9uIChpdCdzIG9ubHkgYWxpYXMpIGdldHMgbWVyZ2VkIG91dCBvZiB0aGUgbW9kZWwKICAgICAgICAvLyBvZiB0aGUgaGVhcCBiZWZvcmUgbG9hZC4KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcmV0dXJuIGludGVyZXN0aW5nVXNlKGluc3RydWN0aW9uLCAwKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnN0cnVjdGlvbihISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGlmIChpbnN0cnVjdGlvbi5pc0FsbG9jYXRpb24oX2Fic3RyYWN0VmFsdWVEb21haW4pKSB7CiAgICAgIG1lbW9yeVNldC5yZWdpc3RlckFsbG9jYXRpb24oaW5zdHJ1Y3Rpb24pOwogICAgfQogICAgbWVtb3J5U2V0LmtpbGxBZmZlY3RlZEJ5KGluc3RydWN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMYXp5U3RhdGljKEhMYXp5U3RhdGljIGluc3RydWN0aW9uKSB7CiAgICBGaWVsZEVudGl0eSBmaWVsZCA9IGluc3RydWN0aW9uLmVsZW1lbnQ7CiAgICBoYW5kbGVTdGF0aWNMb2FkKGZpZWxkLCBpbnN0cnVjdGlvbik7CiAgfQoKICB2b2lkIGhhbmRsZVN0YXRpY0xvYWQoTWVtYmVyRW50aXR5IGVsZW1lbnQsIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgSEluc3RydWN0aW9uIGV4aXN0aW5nID0gbWVtb3J5U2V0Lmxvb2t1cEZpZWxkVmFsdWUoZWxlbWVudCwgbnVsbCk7CiAgICBpZiAoZXhpc3RpbmcgIT0gbnVsbCkgewogICAgICBjaGVja05ld0d2bkNhbmRpZGF0ZXMoaW5zdHJ1Y3Rpb24sIGV4aXN0aW5nKTsKICAgICAgaW5zdHJ1Y3Rpb24uYmxvY2sucmV3cml0ZVdpdGhCZXR0ZXJVc2VyKGluc3RydWN0aW9uLCBleGlzdGluZyk7CiAgICAgIGluc3RydWN0aW9uLmJsb2NrLnJlbW92ZShpbnN0cnVjdGlvbik7CiAgICB9IGVsc2UgewogICAgICBtZW1vcnlTZXQucmVnaXN0ZXJGaWVsZFZhbHVlKGVsZW1lbnQsIG51bGwsIGluc3RydWN0aW9uKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdGF0aWMoSFN0YXRpYyBpbnN0cnVjdGlvbikgewogICAgaGFuZGxlU3RhdGljTG9hZChpbnN0cnVjdGlvbi5lbGVtZW50LCBpbnN0cnVjdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RhdGljU3RvcmUoSFN0YXRpY1N0b3JlIGluc3RydWN0aW9uKSB7CiAgICBpZiAobWVtb3J5U2V0LnJlZ2lzdGVyRmllbGRWYWx1ZVVwZGF0ZSgKICAgICAgICBpbnN0cnVjdGlvbi5lbGVtZW50LCBudWxsLCBpbnN0cnVjdGlvbi5pbnB1dHMubGFzdCkpIHsKICAgICAgaW5zdHJ1Y3Rpb24uYmxvY2sucmVtb3ZlKGluc3RydWN0aW9uKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXRlcmFsTGlzdChITGl0ZXJhbExpc3QgaW5zdHJ1Y3Rpb24pIHsKICAgIG1lbW9yeVNldC5yZWdpc3RlckFsbG9jYXRpb24oaW5zdHJ1Y3Rpb24pOwogICAgbWVtb3J5U2V0LmtpbGxBZmZlY3RlZEJ5KGluc3RydWN0aW9uKTsKICAgIC8vIFRPRE8oc3JhKTogU2V0IGluaXRpYWwga2V5ZWQgdmFsdWVzLgogICAgLy8gVE9ETyhzcmEpOiBTZXQgaW5pdGlhbCBsZW5ndGguCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW5kZXgoSEluZGV4IGluc3RydWN0aW9uKSB7CiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSBpbnN0cnVjdGlvbi5yZWNlaXZlci5ub25DaGVjaygpOwogICAgSEluc3RydWN0aW9uIGV4aXN0aW5nID0KICAgICAgICBtZW1vcnlTZXQubG9va3VwS2V5ZWRWYWx1ZShyZWNlaXZlciwgaW5zdHJ1Y3Rpb24uaW5kZXgpOwogICAgaWYgKGV4aXN0aW5nICE9IG51bGwpIHsKICAgICAgY2hlY2tOZXdHdm5DYW5kaWRhdGVzKGluc3RydWN0aW9uLCBleGlzdGluZyk7CiAgICAgIGluc3RydWN0aW9uLmJsb2NrLnJld3JpdGVXaXRoQmV0dGVyVXNlcihpbnN0cnVjdGlvbiwgZXhpc3RpbmcpOwogICAgICBpbnN0cnVjdGlvbi5ibG9jay5yZW1vdmUoaW5zdHJ1Y3Rpb24pOwogICAgfSBlbHNlIHsKICAgICAgbWVtb3J5U2V0LnJlZ2lzdGVyS2V5ZWRWYWx1ZShyZWNlaXZlciwgaW5zdHJ1Y3Rpb24uaW5kZXgsIGluc3RydWN0aW9uKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbmRleEFzc2lnbihISW5kZXhBc3NpZ24gaW5zdHJ1Y3Rpb24pIHsKICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciA9IGluc3RydWN0aW9uLnJlY2VpdmVyLm5vbkNoZWNrKCk7CiAgICBtZW1vcnlTZXQucmVnaXN0ZXJLZXllZFZhbHVlVXBkYXRlKAogICAgICAgIHJlY2VpdmVyLCBpbnN0cnVjdGlvbi5pbmRleCwgaW5zdHJ1Y3Rpb24udmFsdWUpOwogIH0KCiAgLy8gUHVyZSBvcGVyYXRpb25zIHRoYXQgZG8gbm90IGVzY2FwZSB0aGVpciBpbnB1dHMuCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJpbmFyeUFyaXRobWV0aWMoSEJpbmFyeUFyaXRobWV0aWMgaW5zdHJ1Y3Rpb24pIHt9CiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJvdW5kc0NoZWNrKEhCb3VuZHNDaGVjayBpbnN0cnVjdGlvbikge30KICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29uc3RhbnQoSENvbnN0YW50IGluc3RydWN0aW9uKSB7fQogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJZihISWYgaW5zdHJ1Y3Rpb24pIHt9CiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludGVyY2VwdG9yKEhJbnRlcmNlcHRvciBpbnN0cnVjdGlvbikge30KICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SXMoSElzIGluc3RydWN0aW9uKSB7fQogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJc1ZpYUludGVyY2VwdG9yKEhJc1ZpYUludGVyY2VwdG9yIGluc3RydWN0aW9uKSB7fQogIEBvdmVycmlkZQogIHZvaWQgdmlzaXROb3QoSE5vdCBpbnN0cnVjdGlvbikge30KICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UGFyYW1ldGVyVmFsdWUoSFBhcmFtZXRlclZhbHVlIGluc3RydWN0aW9uKSB7fQogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRSZWxhdGlvbmFsKEhSZWxhdGlvbmFsIGluc3RydWN0aW9uKSB7fQogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdHJpbmdDb25jYXQoSFN0cmluZ0NvbmNhdCBpbnN0cnVjdGlvbikge30KICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZUtub3duKEhUeXBlS25vd24gaW5zdHJ1Y3Rpb24pIHt9CiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVJbmZvUmVhZFJhdyhIVHlwZUluZm9SZWFkUmF3IGluc3RydWN0aW9uKSB7fQogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlSW5mb1JlYWRWYXJpYWJsZShIVHlwZUluZm9SZWFkVmFyaWFibGUgaW5zdHJ1Y3Rpb24pIHt9CiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVJbmZvRXhwcmVzc2lvbihIVHlwZUluZm9FeHByZXNzaW9uIGluc3RydWN0aW9uKSB7fQp9CgovLy8gQSBub24tZmllbGQgYmFzZWQgZmVhdHVyZSBvZiBhbiBvYmplY3QuCmVudW0gTWVtb3J5RmVhdHVyZSB7CiAgLy8gQWNjZXNzIHRvIHRoZSBgbGVuZ3RoYCBwcm9wZXJ0eSBvZiBhIGBKU0luZGV4YWJsZWAuCiAgbGVuZ3RoLAp9CgovLy8gSG9sZHMgdmFsdWVzIG9mIG1lbW9yeSBwbGFjZXMuCi8vLwovLy8gR2VuZXJhbGx5LCB2YWx1ZXMgdGhhdCBuYW1lIGEgcGxhY2UgKGEgcmVjZWl2ZXIpIGhhdmUgdHlwZSByZWZpbmVtZW50cyBhbmQKLy8vIG90aGVyIGNoZWNrcyByZW1vdmVkIHRvIGVuc3VyZSB0aGF0IGNoZWNrcyBhbmQgdHlwZSByZWZpbmVtZW50cyBkbyBub3QKLy8vIGNvbmZ1c2UgYWxpYXNpbmcuICBWYWx1ZXMgc3RvcmVkIGludG8gYSBtZW1vcnkgcGxhY2Uga2VlcCB0aGUgdHlwZQovLy8gcmVmaW5lbWVudHMgdG8gaGVscCBmdXJ0aGVyIG9wdGltaXphdGlvbnMuCmNsYXNzIE1lbW9yeVNldCB7CiAgZmluYWwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkOwoKICAvLy8gTWFwcyBhIGZpZWxkIHRvIGEgbWFwIG9mIHJlY2VpdmVycyB0byB0aGVpciBjdXJyZW50IGZpZWxkIHZhbHVlcy4KICAvLy8KICAvLy8gVGhlIGZpZWxkIGlzIGVpdGhlciBhIFtGaWVsZEVudGl0eV0sIGEgW0Z1bmN0aW9uRW50aXR5XSBpbiBjYXNlIG9mCiAgLy8vIGluc3RhbmNlIG1ldGhvZHMsIG9yIGEgW01lbW9yeUZlYXR1cmVdIGZvciBgbGVuZ3RoYCBhY2Nlc3Mgb24KICAvLy8gYEpTSW5kZXhhYmxlYC4KICAvLy8KICAvLyBUT0RPKDI1NTQ0KTogU3BsaXQgbGVuZ3RoIGVmZmVjdHMgZnJvbSBvdGhlciBlZmZlY3RzIGFuZCBtb2RlbCBsZW5ndGhzCiAgLy8gc2VwYXJhdGVseS4KICBmaW5hbCBNYXA8T2JqZWN0IC8qTWVtYmVyRW50aXR5fE1lbW9yeUZlYXR1cmUqLywKICAgICAgICAgIE1hcDxISW5zdHJ1Y3Rpb24sIEhJbnN0cnVjdGlvbj4+CiAgICAgIGZpZWxkVmFsdWVzID0gPE9iamVjdCwgTWFwPEhJbnN0cnVjdGlvbiwgSEluc3RydWN0aW9uPj57fTsKCiAgLy8vIE1hcHMgYSByZWNlaXZlciB0byBhIG1hcCBvZiBrZXlzIHRvIHZhbHVlLgogIGZpbmFsIE1hcDxISW5zdHJ1Y3Rpb24sIE1hcDxISW5zdHJ1Y3Rpb24sIEhJbnN0cnVjdGlvbj4+IGtleWVkVmFsdWVzID0KICAgICAgPEhJbnN0cnVjdGlvbiwgTWFwPEhJbnN0cnVjdGlvbiwgSEluc3RydWN0aW9uPj57fTsKCiAgLy8vIFNldCBvZiBvYmplY3RzIHRoYXQgd2Uga25vdyBkb24ndCBlc2NhcGUgdGhlIGN1cnJlbnQgZnVuY3Rpb24uCiAgZmluYWwgU2V0bGV0PEhJbnN0cnVjdGlvbj4gbm9uRXNjYXBpbmdSZWNlaXZlcnMgPSBuZXcgU2V0bGV0PEhJbnN0cnVjdGlvbj4oKTsKCiAgTWVtb3J5U2V0KHRoaXMuY2xvc2VkV29ybGQpOwoKICBBYnN0cmFjdFZhbHVlRG9tYWluIGdldCBfYWJzdHJhY3RWYWx1ZURvbWFpbiA9PgogICAgICBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICAvLy8gUmV0dXJucyB3aGV0aGVyIFtmaXJzdF0gYW5kIFtzZWNvbmRdIGFsd2F5cyBhbGlhcyB0byB0aGUgc2FtZSBvYmplY3QuCiAgYm9vbCBtdXN0QWxpYXMoSEluc3RydWN0aW9uIGZpcnN0LCBISW5zdHJ1Y3Rpb24gc2Vjb25kKSB7CiAgICByZXR1cm4gZmlyc3QgPT0gc2Vjb25kOwogIH0KCiAgLy8vIFJldHVybnMgd2hldGhlciBbZmlyc3RdIGFuZCBbc2Vjb25kXSBtYXkgYWxpYXMgdG8gdGhlIHNhbWUgb2JqZWN0LgogIGJvb2wgbWF5QWxpYXMoSEluc3RydWN0aW9uIGZpcnN0LCBISW5zdHJ1Y3Rpb24gc2Vjb25kKSB7CiAgICBpZiAobXVzdEFsaWFzKGZpcnN0LCBzZWNvbmQpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChpc0NvbmNyZXRlKGZpcnN0KSAmJiBpc0NvbmNyZXRlKHNlY29uZCkpIHJldHVybiBmYWxzZTsKICAgIGlmIChub25Fc2NhcGluZ1JlY2VpdmVycy5jb250YWlucyhmaXJzdCkpIHJldHVybiBmYWxzZTsKICAgIGlmIChub25Fc2NhcGluZ1JlY2VpdmVycy5jb250YWlucyhzZWNvbmQpKSByZXR1cm4gZmFsc2U7CiAgICAvLyBUeXBlZCBhcnJheXMgb2YgZGlmZmVyZW50IHR5cGVzIG1pZ2h0IGhhdmUgYSBzaGFyZWQgYnVmZmVyLgogICAgaWYgKGNvdWxkQmVUeXBlZEFycmF5KGZpcnN0KSAmJiBjb3VsZEJlVHlwZWRBcnJheShzZWNvbmQpKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBfYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgIC5hcmVEaXNqb2ludChmaXJzdC5pbnN0cnVjdGlvblR5cGUsIHNlY29uZC5pbnN0cnVjdGlvblR5cGUpCiAgICAgICAgLmlzUG90ZW50aWFsbHlGYWxzZTsKICB9CgogIGJvb2wgaXNGaW5hbChPYmplY3QgZWxlbWVudCkgewogICAgcmV0dXJuIGVsZW1lbnQgaXMgTWVtYmVyRW50aXR5ICYmIGNsb3NlZFdvcmxkLmZpZWxkTmV2ZXJDaGFuZ2VzKGVsZW1lbnQpOwogIH0KCiAgYm9vbCBpc0NvbmNyZXRlKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgcmV0dXJuIGluc3RydWN0aW9uIGlzIEhDcmVhdGUgfHwKICAgICAgICBpbnN0cnVjdGlvbiBpcyBIQ29uc3RhbnQgfHwKICAgICAgICBpbnN0cnVjdGlvbiBpcyBITGl0ZXJhbExpc3Q7CiAgfQoKICBib29sIGNvdWxkQmVUeXBlZEFycmF5KEhJbnN0cnVjdGlvbiByZWNlaXZlcikgewogICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAuY291bGRCZVR5cGVkQXJyYXkocmVjZWl2ZXIuaW5zdHJ1Y3Rpb25UeXBlKQogICAgICAgIC5pc1BvdGVudGlhbGx5VHJ1ZTsKICB9CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgW3JlY2VpdmVyXSBlc2NhcGVzIHRoZSBjdXJyZW50IGZ1bmN0aW9uLgogIGJvb2wgZXNjYXBlcyhISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIpIHsKICAgIGFzc2VydChyZWNlaXZlciA9PSBudWxsIHx8IHJlY2VpdmVyID09IHJlY2VpdmVyLm5vbkNoZWNrKCkpOwogICAgcmV0dXJuICFub25Fc2NhcGluZ1JlY2VpdmVycy5jb250YWlucyhyZWNlaXZlcik7CiAgfQoKICB2b2lkIHJlZ2lzdGVyQWxsb2NhdGlvbihISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGFzc2VydChpbnN0cnVjdGlvbiA9PSBpbnN0cnVjdGlvbi5ub25DaGVjaygpKTsKICAgIG5vbkVzY2FwaW5nUmVjZWl2ZXJzLmFkZChpbnN0cnVjdGlvbik7CiAgfQoKICAvLy8gU2V0cyB0aGUgW2ZpZWxkXSBvbiBbcmVjZWl2ZXJdIHRvIGNvbnRhaW4gW3ZhbHVlXS4gS2lsbHMgYWxsIHBvdGVudGlhbAogIC8vLyBwbGFjZXMgdGhhdCBtYXkgYmUgYWZmZWN0ZWQgYnkgdGhpcyB1cGRhdGUuIFJldHVybnMgYHRydWVgIGlmIHRoZSB1cGRhdGUKICAvLy8gaXMgcmVkdW5kYW50LgogIGJvb2wgcmVnaXN0ZXJGaWVsZFZhbHVlVXBkYXRlKAogICAgICBPYmplY3QgZmllbGQsIEhJbnN0cnVjdGlvbiByZWNlaXZlciwgSEluc3RydWN0aW9uIHZhbHVlKSB7CiAgICBhc3NlcnQoZmllbGQgaXMgTWVtYmVyRW50aXR5IHx8IGZpZWxkIGlzIE1lbW9yeUZlYXR1cmUsCiAgICAgICAgIlVuZXhwZWN0ZWQgbWVtYmVyL2ZlYXR1cmU6ICRmaWVsZCIpOwogICAgYXNzZXJ0KHJlY2VpdmVyID09IG51bGwgfHwgcmVjZWl2ZXIgPT0gcmVjZWl2ZXIubm9uQ2hlY2soKSk7CiAgICBpZiAoY2xvc2VkV29ybGQubmF0aXZlRGF0YS5pc05hdGl2ZU1lbWJlcihmaWVsZCkpIHsKICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUT0RPKDE0OTU1KTogUmVtb3ZlIHRoaXMgcmVzdHJpY3Rpb24/CiAgICB9CiAgICAvLyBbdmFsdWVdIGlzIGJlaW5nIHNldCBpbiBzb21lIHBsYWNlIGluIG1lbW9yeSwgd2UgcmVtb3ZlIGl0IGZyb20gdGhlCiAgICAvLyBub24tZXNjYXBpbmcgc2V0LgogICAgbm9uRXNjYXBpbmdSZWNlaXZlcnMucmVtb3ZlKHZhbHVlLm5vbkNoZWNrKCkpOwogICAgTWFwPEhJbnN0cnVjdGlvbiwgSEluc3RydWN0aW9uPiBtYXAgPQogICAgICAgIGZpZWxkVmFsdWVzLnB1dElmQWJzZW50KGZpZWxkLCAoKSA9PiA8SEluc3RydWN0aW9uLCBISW5zdHJ1Y3Rpb24+e30pOwogICAgYm9vbCBpc1JlZHVuZGFudCA9IG1hcFtyZWNlaXZlcl0gPT0gdmFsdWU7CiAgICBtYXAuZm9yRWFjaCgoa2V5LCB2YWx1ZSkgewogICAgICBpZiAobWF5QWxpYXMocmVjZWl2ZXIsIGtleSkpIG1hcFtrZXldID0gbnVsbDsKICAgIH0pOwogICAgbWFwW3JlY2VpdmVyXSA9IHZhbHVlOwogICAgcmV0dXJuIGlzUmVkdW5kYW50OwogIH0KCiAgLy8vIFJlZ2lzdGVycyB0aGF0IHRoZSBbZmllbGRdIG9uIFtyZWNlaXZlcl0gaXMgbm93IFt2YWx1ZV0uCiAgdm9pZCByZWdpc3RlckZpZWxkVmFsdWUoCiAgICAgIE9iamVjdCBmaWVsZCwgSEluc3RydWN0aW9uIHJlY2VpdmVyLCBISW5zdHJ1Y3Rpb24gdmFsdWUpIHsKICAgIGFzc2VydChmaWVsZCBpcyBNZW1iZXJFbnRpdHkgfHwgZmllbGQgaXMgTWVtb3J5RmVhdHVyZSwKICAgICAgICAiVW5leHBlY3RlZCBtZW1iZXIvZmVhdHVyZTogJGZpZWxkIik7CiAgICBhc3NlcnQocmVjZWl2ZXIgPT0gbnVsbCB8fCByZWNlaXZlciA9PSByZWNlaXZlci5ub25DaGVjaygpKTsKICAgIGlmIChmaWVsZCBpcyBNZW1iZXJFbnRpdHkgJiYgY2xvc2VkV29ybGQubmF0aXZlRGF0YS5pc05hdGl2ZU1lbWJlcihmaWVsZCkpIHsKICAgICAgcmV0dXJuOyAvLyBUT0RPKDE0OTU1KTogUmVtb3ZlIHRoaXMgcmVzdHJpY3Rpb24/CiAgICB9CiAgICBNYXA8SEluc3RydWN0aW9uLCBISW5zdHJ1Y3Rpb24+IG1hcCA9CiAgICAgICAgZmllbGRWYWx1ZXMucHV0SWZBYnNlbnQoZmllbGQsICgpID0+IDxISW5zdHJ1Y3Rpb24sIEhJbnN0cnVjdGlvbj57fSk7CiAgICBtYXBbcmVjZWl2ZXJdID0gdmFsdWU7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgdmFsdWUgc3RvcmVkIGZvciBbZmllbGRdIG9uIFtyZWNlaXZlcl0uIFJldHVybnMgYG51bGxgIGlmIHdlCiAgLy8vIGRvbid0IGtub3cuCiAgSEluc3RydWN0aW9uIGxvb2t1cEZpZWxkVmFsdWUoT2JqZWN0IGZpZWxkLCBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIpIHsKICAgIGFzc2VydChmaWVsZCBpcyBNZW1iZXJFbnRpdHkgfHwgZmllbGQgaXMgTWVtb3J5RmVhdHVyZSwKICAgICAgICAiVW5leHBlY3RlZCBtZW1iZXIvZmVhdHVyZTogJGZpZWxkIik7CiAgICBhc3NlcnQocmVjZWl2ZXIgPT0gbnVsbCB8fCByZWNlaXZlciA9PSByZWNlaXZlci5ub25DaGVjaygpKTsKICAgIE1hcDxISW5zdHJ1Y3Rpb24sIEhJbnN0cnVjdGlvbj4gbWFwID0gZmllbGRWYWx1ZXNbZmllbGRdOwogICAgcmV0dXJuIChtYXAgPT0gbnVsbCkgPyBudWxsIDogbWFwW3JlY2VpdmVyXTsKICB9CgogIC8vLyBLaWxsIGFsbCBwbGFjZXMgdGhhdCBtYXkgYmUgYWZmZWN0ZWQgYnkgdGhpcyBbaW5zdHJ1Y3Rpb25dLiBBbHNvIHVwZGF0ZQogIC8vLyB0aGUgc2V0IG9mIG5vbi1lc2NhcGluZyBvYmplY3RzIGluIGNhc2UgW2luc3RydWN0aW9uXSBoYXMgbm9uLWVzY2FwaW5nCiAgLy8vIG9iamVjdHMgaW4gaXRzIGlucHV0cy4KICB2b2lkIGtpbGxBZmZlY3RlZEJ5KEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgLy8gRXZlbiBpZiBbaW5zdHJ1Y3Rpb25dIGRvZXMgbm90IGhhdmUgc2lkZSBlZmZlY3RzLCBpdCBtYXkgdXNlIG5vbi1lc2NhcGluZwogICAgLy8gb2JqZWN0cyBhbmQgc3RvcmUgdGhlbSBpbiBhIG5ldyBvYmplY3QsIHdoaWNoIG1ha2UgdGhlc2Ugb2JqZWN0cwogICAgLy8gZXNjYXBpbmcuCiAgICBpbnN0cnVjdGlvbi5pbnB1dHMuZm9yRWFjaCgoaW5wdXQpIHsKICAgICAgbm9uRXNjYXBpbmdSZWNlaXZlcnMucmVtb3ZlKGlucHV0Lm5vbkNoZWNrKCkpOwogICAgfSk7CgogICAgaWYgKGluc3RydWN0aW9uLnNpZGVFZmZlY3RzLmNoYW5nZXNJbnN0YW5jZVByb3BlcnR5KCkgfHwKICAgICAgICBpbnN0cnVjdGlvbi5zaWRlRWZmZWN0cy5jaGFuZ2VzU3RhdGljUHJvcGVydHkoKSkgewogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gcmVjZWl2ZXJzVG9SZW1vdmUgPSA8SEluc3RydWN0aW9uPltdOwoKICAgICAgTGlzdDxPYmplY3Q+IGZpZWxkc1RvUmVtb3ZlOwogICAgICBmaWVsZFZhbHVlcy5mb3JFYWNoKChPYmplY3QgZWxlbWVudCwgbWFwKSB7CiAgICAgICAgaWYgKGlzRmluYWwoZWxlbWVudCkpIHJldHVybjsKICAgICAgICBtYXAuZm9yRWFjaCgocmVjZWl2ZXIsIHZhbHVlKSB7CiAgICAgICAgICBpZiAoZXNjYXBlcyhyZWNlaXZlcikpIHsKICAgICAgICAgICAgcmVjZWl2ZXJzVG9SZW1vdmUuYWRkKHJlY2VpdmVyKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZiAocmVjZWl2ZXJzVG9SZW1vdmUubGVuZ3RoID09IG1hcC5sZW5ndGgpIHsKICAgICAgICAgIC8vIFJlbW92ZSB0aGVtIGFsbCBieSByZW1vdmluZyB0aGUgZW50aXJlIG1hcC4KICAgICAgICAgIChmaWVsZHNUb1JlbW92ZSA/Pz0gPE9iamVjdD5bXSkuYWRkKGVsZW1lbnQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZWNlaXZlcnNUb1JlbW92ZS5mb3JFYWNoKG1hcC5yZW1vdmUpOwogICAgICAgIH0KICAgICAgICByZWNlaXZlcnNUb1JlbW92ZS5jbGVhcigpOwogICAgICB9KTsKICAgICAgZmllbGRzVG9SZW1vdmU/LmZvckVhY2goZmllbGRWYWx1ZXMucmVtb3ZlKTsKICAgIH0KCiAgICBpZiAoaW5zdHJ1Y3Rpb24uc2lkZUVmZmVjdHMuY2hhbmdlc0luZGV4KCkpIHsKICAgICAga2V5ZWRWYWx1ZXMuZm9yRWFjaCgocmVjZWl2ZXIsIG1hcCkgewogICAgICAgIGlmIChlc2NhcGVzKHJlY2VpdmVyKSkgewogICAgICAgICAgbWFwLmZvckVhY2goKGluZGV4LCB2YWx1ZSkgewogICAgICAgICAgICBtYXBbaW5kZXhdID0gbnVsbDsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgdmFsdWUgc3RvcmVkIGluIGByZWNlaXZlcltpbmRleF1gLiBSZXR1cm5zIG51bGwgaWYgd2UgZG9uJ3QKICAvLy8ga25vdy4KICBISW5zdHJ1Y3Rpb24gbG9va3VwS2V5ZWRWYWx1ZShISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIsIEhJbnN0cnVjdGlvbiBpbmRleCkgewogICAgTWFwPEhJbnN0cnVjdGlvbiwgSEluc3RydWN0aW9uPiBtYXAgPSBrZXllZFZhbHVlc1tyZWNlaXZlcl07CiAgICByZXR1cm4gKG1hcCA9PSBudWxsKSA/IG51bGwgOiBtYXBbaW5kZXhdOwogIH0KCiAgLy8vIFJlZ2lzdGVycyB0aGF0IGByZWNlaXZlcltpbmRleF1gIGlzIG5vdyBbdmFsdWVdLgogIHZvaWQgcmVnaXN0ZXJLZXllZFZhbHVlKAogICAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIsIEhJbnN0cnVjdGlvbiBpbmRleCwgSEluc3RydWN0aW9uIHZhbHVlKSB7CiAgICBNYXA8SEluc3RydWN0aW9uLCBISW5zdHJ1Y3Rpb24+IG1hcCA9CiAgICAgICAga2V5ZWRWYWx1ZXMucHV0SWZBYnNlbnQocmVjZWl2ZXIsICgpID0+IDxISW5zdHJ1Y3Rpb24sIEhJbnN0cnVjdGlvbj57fSk7CiAgICBtYXBbaW5kZXhdID0gdmFsdWU7CiAgfQoKICAvLy8gU2V0cyBgcmVjZWl2ZXJbaW5kZXhdYCB0byBjb250YWluIFt2YWx1ZV0uIEtpbGxzIGFsbCBwb3RlbnRpYWwgcGxhY2VzIHRoYXQKICAvLy8gbWF5IGJlIGFmZmVjdGVkIGJ5IHRoaXMgdXBkYXRlLgogIHZvaWQgcmVnaXN0ZXJLZXllZFZhbHVlVXBkYXRlKAogICAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIsIEhJbnN0cnVjdGlvbiBpbmRleCwgSEluc3RydWN0aW9uIHZhbHVlKSB7CiAgICBub25Fc2NhcGluZ1JlY2VpdmVycy5yZW1vdmUodmFsdWUubm9uQ2hlY2soKSk7CiAgICBrZXllZFZhbHVlcy5mb3JFYWNoKChrZXksIHZhbHVlcykgewogICAgICBpZiAobWF5QWxpYXMocmVjZWl2ZXIsIGtleSkpIHsKICAgICAgICAvLyBUeXBlZCBhcnJheXMgdGhhdCBhcmUgdmlld3Mgb2YgdGhlIHNhbWUgYnVmZmVyIG1heSBoYXZlIGRpZmZlcmVudAogICAgICAgIC8vIG9mZnNldHMgb3IgZWxlbWVudCBzaXplcywgdW5sZXNzIHRoZXkgYXJlIHRoZSBzYW1lIHR5cGVkIGFycmF5LgogICAgICAgIGJvb2wgd2Vha0luZGV4ID0gY291bGRCZVR5cGVkQXJyYXkoa2V5KSAmJiAhbXVzdEFsaWFzKHJlY2VpdmVyLCBrZXkpOwogICAgICAgIHZhbHVlcy5mb3JFYWNoKChvdGhlckluZGV4LCBvdGhlclZhbHVlKSB7CiAgICAgICAgICBpZiAod2Vha0luZGV4IHx8IG1heUFsaWFzKGluZGV4LCBvdGhlckluZGV4KSkgewogICAgICAgICAgICB2YWx1ZXNbb3RoZXJJbmRleF0gPSBudWxsOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICB9KTsKCiAgICAvLyBUeXBlZCBhcnJheXMgbWF5IG5hcnJvdyBpbmNvbWluZyB2YWx1ZXMuCiAgICBpZiAoY291bGRCZVR5cGVkQXJyYXkocmVjZWl2ZXIpKSByZXR1cm47CgogICAgTWFwPEhJbnN0cnVjdGlvbiwgSEluc3RydWN0aW9uPiBtYXAgPQogICAgICAgIGtleWVkVmFsdWVzLnB1dElmQWJzZW50KHJlY2VpdmVyLCAoKSA9PiA8SEluc3RydWN0aW9uLCBISW5zdHJ1Y3Rpb24+e30pOwogICAgbWFwW2luZGV4XSA9IHZhbHVlOwogIH0KCiAgLy8vIFJldHVybnMgYSBjb21tb24gaW5zdHJ1Y3Rpb24gZm9yIFtmaXJzdF0gYW5kIFtzZWNvbmRdLgogIC8vLwogIC8vLyBSZXR1cm5zIGBudWxsYCBpZiBlaXRoZXIgW2ZpcnN0XSBvciBbc2Vjb25kXSBpcyBudWxsLiBSZXR1cm5zIFtmaXJzdF0gaWYKICAvLy8gW2ZpcnN0XSBhbmQgW3NlY29uZF0gYXJlIGVxdWFsLiBPdGhlcndpc2UgY3JlYXRlcyBvciByZS11c2VzIGEgcGhpIGluCiAgLy8vIFtibG9ja10gdGhhdCBob2xkcyBbZmlyc3RdIGFuZCBbc2Vjb25kXS4KICBISW5zdHJ1Y3Rpb24gZmluZENvbW1vbkluc3RydWN0aW9uKEhJbnN0cnVjdGlvbiBmaXJzdCwgSEluc3RydWN0aW9uIHNlY29uZCwKICAgICAgSEJhc2ljQmxvY2sgYmxvY2ssIGludCBwcmVkZWNlc3NvckluZGV4KSB7CiAgICBpZiAoZmlyc3QgPT0gbnVsbCB8fCBzZWNvbmQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpZiAoZmlyc3QgPT0gc2Vjb25kKSByZXR1cm4gZmlyc3Q7CiAgICBpZiAoc2Vjb25kIGlzIEhHZXRMZW5ndGgpIHsKICAgICAgLy8gRG9uJ3QgYWx3YXlzIGNyZWF0ZSBwaGlzIGZvciBIR2V0TGVuZ3RoLiBUaGUgcGhpIGNvbmZ1c2VzIGFycmF5IGJvdW5kcwogICAgICAvLyBjaGVjayBlbGltaW5hdGlvbiBhbmQgdGhlIHJlc3VsdGluZyB2YXJpYWJsZS1oZWF2eSBjb2RlIHByb2JhYmx5IGlzCiAgICAgIC8vIGNvbmZ1c2luZyBmb3IgSmF2YVNjcmlwdCBWTXMuIEluIHByYWN0aWNlLCB0aGlzIG1vc3RseSBhZmZlY3RzIHRoZQogICAgICAvLyBleHBhbnNpb24gb2YgZm9yLWluIGxvb3BzIG9uIEFycmF5cywgc28gd2UgbWF0Y2ggdGhlIGV4cHJlc3Npb24KICAgICAgLy8KICAgICAgLy8gICAgIGNoZWNrQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKGFycmF5Lmxlbmd0aCA9PSBfZW5kLCBhcnJheSkKICAgICAgLy8KICAgICAgLy8gc3RhcnRpbmcgd2l0aCB0aGUgSEdldExlbmd0aCBvZiB0aGUgYGFycmF5Lmxlbmd0aGAsIGluIHRoZSBjYXNlIHdoZXJlCiAgICAgIC8vIGBhcnJheS5sZW5ndGhgIGlzIG5vdCB1c2VkIGVsc2V3aGVyZSAoaS5lLiBub3QgYWxyZWFkeSBvcHRpbWl6ZWQgdG8gdXNlCiAgICAgIC8vIGEgcHJldmlvdXMgdXNlLCBpbiB0aGUgbG9vcCBjb25kaXRpb24pLgogICAgICAvLwogICAgICAvLyBUT0RPKHNyYSk6IEZpZ3VyZSBvdXQgYSBiZXR0ZXIgd2F5IGVuc3VyZSAnbmljZScgbG9vcCBjb2RlLgogICAgICAvLyBUT0RPKDIyNDA3KTogVGhlIHBoaSB3b3VsZCBub3QgYmUgc28gYmFkIGlmIGl0IGRpZCBub3QgY29uZnVzZSBib3VuZHMKICAgICAgLy8gY2hlY2sgZWxpbWluYXRpb24uCiAgICAgIC8vIFRPRE8oMjU0MzcpOiBXZSBjb3VsZCBhZGQgYSBwaGkgaWYgd2UgdW5kaWQgdGhlIGhhcm1mdWwgY2FzZXMuCiAgICAgIGlmIChzZWNvbmQudXNlZEJ5Lmxlbmd0aCA9PSAxKSB7CiAgICAgICAgdmFyIHVzZXIgPSBzZWNvbmQudXNlZEJ5LnNpbmdsZTsKICAgICAgICBpZiAodXNlciBpcyBISWRlbnRpdHkgJiYgdXNlci51c2VkQnkubGVuZ3RoID09IDEpIHsKICAgICAgICAgIEhJbnN0cnVjdGlvbiB1c2VyMiA9IHVzZXIudXNlZEJ5LnNpbmdsZTsKICAgICAgICAgIGlmICh1c2VyMiBpcyBISW52b2tlU3RhdGljICYmCiAgICAgICAgICAgICAgdXNlcjIuZWxlbWVudCA9PQogICAgICAgICAgICAgICAgICBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5jaGVja0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcikgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIEFic3RyYWN0VmFsdWUgcGhpVHlwZSA9IF9hYnN0cmFjdFZhbHVlRG9tYWluLnVuaW9uKAogICAgICAgIHNlY29uZC5pbnN0cnVjdGlvblR5cGUsIGZpcnN0Lmluc3RydWN0aW9uVHlwZSk7CiAgICBpZiAoZmlyc3QgaXMgSFBoaSAmJiBmaXJzdC5ibG9jayA9PSBibG9jaykgewogICAgICBIUGhpIHBoaSA9IGZpcnN0OwogICAgICBwaGkuYWRkSW5wdXQoc2Vjb25kKTsKICAgICAgcGhpLmluc3RydWN0aW9uVHlwZSA9IHBoaVR5cGU7CiAgICAgIHJldHVybiBwaGk7CiAgICB9IGVsc2UgewogICAgICBIUGhpIHBoaSA9IG5ldyBIUGhpLm5vSW5wdXRzKG51bGwsIHBoaVR5cGUpOwogICAgICBibG9jay5hZGRQaGkocGhpKTsKICAgICAgLy8gUHJldmlvdXMgcHJlZGVjZXNzb3JzIGhhZCB0aGUgc2FtZSBpbnB1dC4gQSBwaGkgbXVzdCBoYXZlCiAgICAgIC8vIHRoZSBzYW1lIG51bWJlciBvZiBpbnB1dHMgYXMgaXRzIGJsb2NrIGhhcyBwcmVkZWNlc3NvcnMuCiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJlZGVjZXNzb3JJbmRleDsgaSsrKSB7CiAgICAgICAgcGhpLmFkZElucHV0KGZpcnN0KTsKICAgICAgfQogICAgICBwaGkuYWRkSW5wdXQoc2Vjb25kKTsKICAgICAgcmV0dXJuIHBoaTsKICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiBbdGhpc10gYW5kIHRoZSBbb3RoZXJdIG1lbW9yeSBzZXQuCiAgTWVtb3J5U2V0IGludGVyc2VjdGlvbkZvcigKICAgICAgTWVtb3J5U2V0IG90aGVyLCBIQmFzaWNCbG9jayBibG9jaywgaW50IHByZWRlY2Vzc29ySW5kZXgpIHsKICAgIE1lbW9yeVNldCByZXN1bHQgPSBuZXcgTWVtb3J5U2V0KGNsb3NlZFdvcmxkKTsKICAgIGlmIChvdGhlciA9PSBudWxsKSB7CiAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHZpc2l0IHRvIGEgbG9vcCBoZWFkZXIgKFtvdGhlcl0gaXMgYG51bGxgIGJlY2F1c2Ugd2UKICAgICAgLy8gaGF2ZSBub3QgdmlzaXRlZCB0aGUgYmFjayBlZGdlKS4gQ29weSB0aGUgbm9uRXNjYXBpbmdSZWNlaXZlcnMgdGhhdCBhcmUKICAgICAgLy8gZ3VhcmFudGVlZCB0byBzdXJ2aXZlIHRoZSBsb29wIGJlY2F1c2UgdGhleSBhcmUgbm90IGVzY2FwZWQgYmVmb3JlCiAgICAgIC8vIG1ldGhvZCBleGl0LgogICAgICAvLyBUT0RPKHNyYSk6IFdlIHNob3VsZCBkbyBhIHByb3BlciBkYXRhZmxvdyB0byBmaW5kIHRoZSBtYXhpbWFsCiAgICAgIC8vIG5vbkVzY2FwaW5nUmVjZWl2ZXJzIChhIHZhcmlhbnQgb2YgQXZhaWxhYmxlLUV4cHJlc3Npb25zKSwgd2hpY2ggbXVzdAogICAgICAvLyBjb252ZXJnZSBiZWZvcmUgd2UgZWRpdCB0aGUgcHJvZ3JhbSBpbiBbZmluZENvbW1vbkluc3RydWN0aW9uXS4KICAgICAgZm9yIChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gaW4gbm9uRXNjYXBpbmdSZWNlaXZlcnMpIHsKICAgICAgICBib29sIGlzTm9uRXNjYXBpbmdVc2UoSEluc3RydWN0aW9uIHVzZSkgewogICAgICAgICAgaWYgKHVzZSBpcyBIUmV0dXJuKSByZXR1cm4gdHJ1ZTsgLy8gRXNjYXBlcywgYnV0IHNvIGRvZXMgY29udHJvbC4KICAgICAgICAgIGlmICh1c2UgaXMgSEZpZWxkR2V0KSByZXR1cm4gdHJ1ZTsKICAgICAgICAgIGlmICh1c2UgaXMgSEZpZWxkU2V0KSB7CiAgICAgICAgICAgIHJldHVybiB1c2UudmFsdWUubm9uQ2hlY2soKSAhPSBpbnN0cnVjdGlvbjsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh1c2UgaXMgSFR5cGVJbmZvUmVhZFZhcmlhYmxlKSByZXR1cm4gdHJ1ZTsKICAgICAgICAgIGlmICh1c2UgaXMgSEdldExlbmd0aCkgcmV0dXJuIHRydWU7CiAgICAgICAgICBpZiAodXNlIGlzIEhCb3VuZHNDaGVjaykgcmV0dXJuIHRydWU7CiAgICAgICAgICBpZiAodXNlIGlzIEhJbmRleCkgcmV0dXJuIHRydWU7CiAgICAgICAgICBpZiAodXNlIGlzIEhJbmRleEFzc2lnbikgewogICAgICAgICAgICByZXR1cm4gdXNlLnZhbHVlLm5vbkNoZWNrKCkgIT0gaW5zdHJ1Y3Rpb247CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodXNlIGlzIEhJbnRlcmNlcHRvcikgcmV0dXJuIHRydWU7CiAgICAgICAgICBpZiAodXNlIGlzIEhJbnZva2VEeW5hbWljTWV0aG9kKSB7CiAgICAgICAgICAgIE1lbWJlckVudGl0eSBlbGVtZW50ID0gdXNlLmVsZW1lbnQ7CiAgICAgICAgICAgIGlmIChlbGVtZW50ICE9IG51bGwpIHsKICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5qc0FycmF5QWRkKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdXNlLmlucHV0cy5sYXN0ICE9IGluc3RydWN0aW9uOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHVzZSBpcyBISW52b2tlU3RhdGljKSB7CiAgICAgICAgICAgIGlmICh1c2UuZWxlbWVudCA9PQogICAgICAgICAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuY2hlY2tDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IpCiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9CgogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGluc3RydWN0aW9uLnVzZWRCeS5ldmVyeShpc05vbkVzY2FwaW5nVXNlKSkgewogICAgICAgICAgcmVzdWx0Lm5vbkVzY2FwaW5nUmVjZWl2ZXJzLmFkZChpbnN0cnVjdGlvbik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgZmllbGRWYWx1ZXMuZm9yRWFjaCgoZWxlbWVudCwgdmFsdWVzKSB7CiAgICAgIHZhciBvdGhlclZhbHVlcyA9IG90aGVyLmZpZWxkVmFsdWVzW2VsZW1lbnRdOwogICAgICBpZiAob3RoZXJWYWx1ZXMgPT0gbnVsbCkgcmV0dXJuOwogICAgICB2YWx1ZXMuZm9yRWFjaCgocmVjZWl2ZXIsIHZhbHVlKSB7CiAgICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gZmluZENvbW1vbkluc3RydWN0aW9uKAogICAgICAgICAgICB2YWx1ZSwgb3RoZXJWYWx1ZXNbcmVjZWl2ZXJdLCBibG9jaywgcHJlZGVjZXNzb3JJbmRleCk7CiAgICAgICAgaWYgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgICAgIHJlc3VsdC5yZWdpc3RlckZpZWxkVmFsdWUoZWxlbWVudCwgcmVjZWl2ZXIsIGluc3RydWN0aW9uKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CgogICAga2V5ZWRWYWx1ZXMuZm9yRWFjaCgocmVjZWl2ZXIsIHZhbHVlcykgewogICAgICB2YXIgb3RoZXJWYWx1ZXMgPSBvdGhlci5rZXllZFZhbHVlc1tyZWNlaXZlcl07CiAgICAgIGlmIChvdGhlclZhbHVlcyA9PSBudWxsKSByZXR1cm47CiAgICAgIHZhbHVlcy5mb3JFYWNoKChpbmRleCwgdmFsdWUpIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBmaW5kQ29tbW9uSW5zdHJ1Y3Rpb24oCiAgICAgICAgICAgIHZhbHVlLCBvdGhlclZhbHVlc1tpbmRleF0sIGJsb2NrLCBwcmVkZWNlc3NvckluZGV4KTsKICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24gIT0gbnVsbCkgewogICAgICAgICAgcmVzdWx0LnJlZ2lzdGVyS2V5ZWRWYWx1ZShyZWNlaXZlciwgaW5kZXgsIGluc3RydWN0aW9uKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CgogICAgbm9uRXNjYXBpbmdSZWNlaXZlcnMuZm9yRWFjaCgocmVjZWl2ZXIpIHsKICAgICAgaWYgKG90aGVyLm5vbkVzY2FwaW5nUmVjZWl2ZXJzLmNvbnRhaW5zKHJlY2VpdmVyKSkgewogICAgICAgIHJlc3VsdC5ub25Fc2NhcGluZ1JlY2VpdmVycy5hZGQocmVjZWl2ZXIpOwogICAgICB9CiAgICB9KTsKICAgIHJl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aXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBqc19hc3Q7CgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbicgc2hvdyBJdGVyYWJsZUJhc2U7CmltcG9ydCAnc3JjL3ByZWNlZGVuY2UuZGFydCc7CmltcG9ydCAnc3JjL2NoYXJhY3RlcnMuZGFydCcgYXMgY2hhckNvZGVzOwoKcGFydCAnc3JjL25vZGVzLmRhcnQnOwpwYXJ0ICdzcmMvYnVpbGRlci5kYXJ0JzsKcGFydCAnc3JjL3ByaW50ZXIuZGFydCc7CnBhcnQgJ3NyYy90ZW1wbGF0ZS5kYXJ0JzsKcGFydCAnc3JjL2VxdWl2YWxlbmNlX3Zpc2l0b3IuZGFydCc7ChEATk48ARABLB4rARcZGRolARpwYWNrYWdlOmpzX2FzdC9qc19hc3QuZGFydChzZGtyb290Oi9wa2cvanNfYXN0L2xpYi9zcmMvcHJpbnRlci5kYXJ0wAC6IS8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGpzX2FzdDsKCnR5cGVkZWYgU3RyaW5nIFJlbmFtZXIoTmFtZSBuYW1lKTsKCmNsYXNzIEphdmFTY3JpcHRQcmludGluZ09wdGlvbnMgewogIGZpbmFsIGJvb2wgc2hvdWxkQ29tcHJlc3NPdXRwdXQ7CiAgZmluYWwgYm9vbCBtaW5pZnlMb2NhbFZhcmlhYmxlczsKICBmaW5hbCBib29sIHByZWZlclNlbWljb2xvblRvTmV3bGluZUluTWluaWZpZWRPdXRwdXQ7CiAgZmluYWwgUmVuYW1lciByZW5hbWVyRm9yTmFtZXM7CgogIGNvbnN0IEphdmFTY3JpcHRQcmludGluZ09wdGlvbnMoCiAgICAgIHt0aGlzLnNob3VsZENvbXByZXNzT3V0cHV0OiBmYWxzZSwKICAgICAgdGhpcy5taW5pZnlMb2NhbFZhcmlhYmxlczogZmFsc2UsCiAgICAgIHRoaXMucHJlZmVyU2VtaWNvbG9uVG9OZXdsaW5lSW5NaW5pZmllZE91dHB1dDogZmFsc2UsCiAgICAgIHRoaXMucmVuYW1lckZvck5hbWVzOiBpZGVudGl0eVJlbmFtZXJ9KTsKCiAgc3RhdGljIFN0cmluZyBpZGVudGl0eVJlbmFtZXIoTmFtZSBuYW1lKSA9PiBuYW1lLm5hbWU7Cn0KCi8vLyBBbiBlbnZpcm9ubWVudCBpbiB3aGljaCBKYXZhU2NyaXB0IHByaW50aW5nIGlzIGRvbmUuICBQcm92aWRlcyBlbWl0dGluZyBvZgovLy8gdGV4dCBhbmQgcHJlLSBhbmQgcG9zdC12aXNpdCBjYWxsYmFja3MuCmFic3RyYWN0IGNsYXNzIEphdmFTY3JpcHRQcmludGluZ0NvbnRleHQgewogIC8vLyBTaWduYWxzIGFuIGVycm9yLiAgVGhpcyBzaG91bGQgaGFwcGVuIG9ubHkgZm9yIHNlcmlvdXMgaW50ZXJuYWwgZXJyb3JzLgogIHZvaWQgZXJyb3IoU3RyaW5nIG1lc3NhZ2UpIHsKICAgIHRocm93IG1lc3NhZ2U7CiAgfQoKICAvLy8gQWRkcyBbc3RyaW5nXSB0byB0aGUgb3V0cHV0LgogIHZvaWQgZW1pdChTdHJpbmcgc3RyaW5nKTsKCiAgLy8vIENhbGxiYWNrIGZvciB0aGUgc3RhcnQgb2YgcHJpbnRpbmcgb2YgW25vZGVdLiBbc3RhcnRQb3NpdGlvbl0gaXMgdGhlCiAgLy8vIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgb2YgW25vZGVdLgogIC8vLwogIC8vLyBbZW50ZXJOb2RlXSBpcyBjYWxsZWQgaW4gcHJlLXRyYXZlcnNhbCBvcmRlci4KICB2b2lkIGVudGVyTm9kZShOb2RlIG5vZGUsIGludCBzdGFydFBvc2l0aW9uKSB7fQoKICAvLy8gQ2FsbGJhY2sgZm9yIHRoZSBlbmQgb2YgcHJpbnRpbmcgb2YgW25vZGVdLiBbc3RhcnRQb3NpdGlvbl0gaXMgdGhlCiAgLy8vIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgb2YgW25vZGVdIChhbHNvIHByb3ZpZGVkCiAgLy8vIGluIHRoZSBbZW50ZXJOb2RlXSBjYWxsYmFjayksIFtlbmRQb3NpdGlvbl0gaXMgdGhlIHBvc2l0aW9uIGltbWVkaWF0ZWx5CiAgLy8vIGZvbGxvd2luZyB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgW25vZGVdLiBbY2xvc2luZ1Bvc2l0aW9uXSBpcyB0aGUKICAvLy8gcG9zaXRpb24gb2YgdGhlIGVuZGluZyBkZWxpbWl0ZXIgb2YgW25vZGVdLiBUaGlzIGlzIG9ubHkgcHJvdmlkZWQgZm9yCiAgLy8vIFtGdW5dIG5vZGVzIGFuZCBpcyBgbnVsbGAgb3RoZXJ3aXNlLgogIC8vLwogIC8vLyBbZW50ZXJOb2RlXSBpcyBjYWxsZWQgaW4gcG9zdC10cmF2ZXJzYWwgb3JkZXIuCiAgdm9pZCBleGl0Tm9kZSgKICAgICAgTm9kZSBub2RlLCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uLCBpbnQgY2xvc2luZ1Bvc2l0aW9uKSB7fQp9CgovLy8gQSBzaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgW0phdmFTY3JpcHRQcmludGluZ0NvbnRleHRdIHN1aXRhYmxlIGZvciB0ZXN0cy4KY2xhc3MgU2ltcGxlSmF2YVNjcmlwdFByaW50aW5nQ29udGV4dCBleHRlbmRzIEphdmFTY3JpcHRQcmludGluZ0NvbnRleHQgewogIGZpbmFsIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CgogIHZvaWQgZW1pdChTdHJpbmcgc3RyaW5nKSB7CiAgICBidWZmZXIud3JpdGUoc3RyaW5nKTsKICB9CgogIFN0cmluZyBnZXRUZXh0KCkgPT4gYnVmZmVyLnRvU3RyaW5nKCk7Cn0KClN0cmluZyBEZWJ1Z1ByaW50KE5vZGUgbm9kZSkgewogIEphdmFTY3JpcHRQcmludGluZ09wdGlvbnMgb3B0aW9ucyA9IG5ldyBKYXZhU2NyaXB0UHJpbnRpbmdPcHRpb25zKCk7CiAgU2ltcGxlSmF2YVNjcmlwdFByaW50aW5nQ29udGV4dCBjb250ZXh0ID0KICAgICAgbmV3IFNpbXBsZUphdmFTY3JpcHRQcmludGluZ0NvbnRleHQoKTsKICBQcmludGVyIHByaW50ZXIgPSBuZXcgUHJpbnRlcihvcHRpb25zLCBjb250ZXh0KTsKICBwcmludGVyLnZpc2l0KG5vZGUpOwogIHJldHVybiBjb250ZXh0LmdldFRleHQoKTsKfQoKY2xhc3MgUHJpbnRlciBpbXBsZW1lbnRzIE5vZGVWaXNpdG9yIHsKICBmaW5hbCBKYXZhU2NyaXB0UHJpbnRpbmdPcHRpb25zIG9wdGlvbnM7CiAgZmluYWwgSmF2YVNjcmlwdFByaW50aW5nQ29udGV4dCBjb250ZXh0OwogIGZpbmFsIGJvb2wgc2hvdWxkQ29tcHJlc3NPdXRwdXQ7CiAgZmluYWwgRGFuZ2xpbmdFbHNlVmlzaXRvciBkYW5nbGluZ0Vsc2VWaXNpdG9yOwogIGZpbmFsIExvY2FsTmFtZXIgbG9jYWxOYW1lcjsKCiAgaW50IF9jaGFyQ291bnQgPSAwOwogIGJvb2wgaW5Gb3JJbml0ID0gZmFsc2U7CiAgYm9vbCBhdFN0YXRlbWVudEJlZ2luID0gZmFsc2U7CiAgYm9vbCBwZW5kaW5nU2VtaWNvbG9uID0gZmFsc2U7CiAgYm9vbCBwZW5kaW5nU3BhY2UgPSBmYWxzZTsKCiAgLy8gVGhlIGN1cnJlbnQgaW5kZW50YXRpb24gbGV2ZWwuCiAgaW50IF9pbmRlbnRMZXZlbCA9IDA7CiAgLy8gQSBjYWNoZSBvZiBhbGwgaW5kZW50YXRpb24gc3RyaW5ncyB1c2VkIHNvIGZhci4KICBMaXN0PFN0cmluZz4gX2luZGVudExpc3QgPSA8U3RyaW5nPlsiIl07CgogIHN0YXRpYyBmaW5hbCBpZGVudGlmaWVyQ2hhcmFjdGVyUmVnRXhwID0gbmV3IFJlZ0V4cChyJ15bYS16QS1aXzAtOSRdJyk7CiAgc3RhdGljIGZpbmFsIGV4cHJlc3Npb25Db250aW51YXRpb25SZWdFeHAgPSBuZXcgUmVnRXhwKHInXlstKyhbXScpOwoKICBQcmludGVyKEphdmFTY3JpcHRQcmludGluZ09wdGlvbnMgb3B0aW9ucywgSmF2YVNjcmlwdFByaW50aW5nQ29udGV4dCBjb250ZXh0KQogICAgICA6IG9wdGlvbnMgPSBvcHRpb25zLAogICAgICAgIGNvbnRleHQgPSBjb250ZXh0LAogICAgICAgIHNob3VsZENvbXByZXNzT3V0cHV0ID0gb3B0aW9ucy5zaG91bGRDb21wcmVzc091dHB1dCwKICAgICAgICBkYW5nbGluZ0Vsc2VWaXNpdG9yID0gbmV3IERhbmdsaW5nRWxzZVZpc2l0b3IoY29udGV4dCksCiAgICAgICAgbG9jYWxOYW1lciA9IGRldGVybWluZVJlbmFtZXIoCiAgICAgICAgICAgIG9wdGlvbnMuc2hvdWxkQ29tcHJlc3NPdXRwdXQsIG9wdGlvbnMubWluaWZ5TG9jYWxWYXJpYWJsZXMpOwoKICBzdGF0aWMgTG9jYWxOYW1lciBkZXRlcm1pbmVSZW5hbWVyKAogICAgICBib29sIHNob3VsZENvbXByZXNzT3V0cHV0LCBib29sIGFsbG93VmFyaWFibGVNaW5pZmljYXRpb24pIHsKICAgIHJldHVybiAoc2hvdWxkQ29tcHJlc3NPdXRwdXQgJiYgYWxsb3dWYXJpYWJsZU1pbmlmaWNhdGlvbikKICAgICAgICA/IG5ldyBNaW5pZnlSZW5hbWVyKCkKICAgICAgICA6IG5ldyBJZGVudGl0eU5hbWVyKCk7CiAgfQoKICAvLyBUaGUgY3VycmVudCBpbmRlbnRhdGlvbiBzdHJpbmcuCiAgU3RyaW5nIGdldCBpbmRlbnRhdGlvbiB7CiAgICAvLyBMYXppbHkgYWRkIG5ldyBpbmRlbnRhdGlvbiBzdHJpbmdzIGFzIHJlcXVpcmVkLgogICAgd2hpbGUgKF9pbmRlbnRMaXN0Lmxlbmd0aCA8PSBfaW5kZW50TGV2ZWwpIHsKICAgICAgX2luZGVudExpc3QuYWRkKF9pbmRlbnRMaXN0Lmxhc3QgKyAiICAiKTsKICAgIH0KICAgIHJldHVybiBfaW5kZW50TGlzdFtfaW5kZW50TGV2ZWxdOwogIH0KCiAgdm9pZCBpbmRlbnRNb3JlKCkgewogICAgX2luZGVudExldmVsKys7CiAgfQoKICB2b2lkIGluZGVudExlc3MoKSB7CiAgICBfaW5kZW50TGV2ZWwtLTsKICB9CgogIC8vLyBBbHdheXMgZW1pdCBhIG5ld2xpbmUsIGV2ZW4gdW5kZXIgYGVuYWJsZU1pbmlmaWNhdGlvbmAuCiAgdm9pZCBmb3JjZUxpbmUoKSB7CiAgICBvdXQoIlxuIiwgaXNXaGl0ZXNwYWNlOiB0cnVlKTsKICB9CgogIC8vLyBFbWl0cyBhIG5ld2xpbmUgZm9yIHJlYWRhYmlsaXR5LgogIHZvaWQgbGluZU91dCgpIHsKICAgIGlmICghc2hvdWxkQ29tcHJlc3NPdXRwdXQpIGZvcmNlTGluZSgpOwogIH0KCiAgdm9pZCBzcGFjZU91dCgpIHsKICAgIGlmICghc2hvdWxkQ29tcHJlc3NPdXRwdXQpIG91dCgiICIsIGlzV2hpdGVzcGFjZTogdHJ1ZSk7CiAgfQoKICBTdHJpbmcgbGFzdEFkZGVkU3RyaW5nID0gbnVsbDsKCiAgaW50IGdldCBsYXN0Q2hhckNvZGUgewogICAgaWYgKGxhc3RBZGRlZFN0cmluZyA9PSBudWxsKSByZXR1cm4gMDsKICAgIGFzc2VydChsYXN0QWRkZWRTdHJpbmcubGVuZ3RoICE9IDApOwogICAgcmV0dXJuIGxhc3RBZGRlZFN0cmluZy5jb2RlVW5pdEF0KGxhc3RBZGRlZFN0cmluZy5sZW5ndGggLSAxKTsKICB9CgogIHZvaWQgb3V0KFN0cmluZyBzdHIsIHtib29sIGlzV2hpdGVzcGFjZTogZmFsc2V9KSB7CiAgICBpZiAoc3RyICE9ICIiKSB7CiAgICAgIGlmIChwZW5kaW5nU2VtaWNvbG9uKSB7CiAgICAgICAgaWYgKCFzaG91bGRDb21wcmVzc091dHB1dCkgewogICAgICAgICAgX2VtaXQoIjsiKTsKICAgICAgICB9IGVsc2UgaWYgKHN0ciAhPSAifSIpIHsKICAgICAgICAgIC8vIFdlIHdhbnQgdG8gb3V0cHV0IG5ld2xpbmUgaW5zdGVhZCBvZiBzZW1pY29sb24gYmVjYXVzZSBpdCBtYWtlcwogICAgICAgICAgLy8gdGhlIHJhdyBzdGFjayB0cmFjZXMgbXVjaCBlYXNpZXIgdG8gcmVhZCBhbmQgaXQgYWxzbyBtYWtlcyBsaW5lLQogICAgICAgICAgLy8gYmFzZWQgdG9vbHMgbGlrZSBkaWZmIHdvcmsgbXVjaCBiZXR0ZXIuICBKYXZhU2NyaXB0IHdpbGwKICAgICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgaW5zZXJ0IHRoZSBzZW1pY29sb24gYXQgdGhlIG5ld2xpbmUgaWYgaXQgbWVhbnMgYQogICAgICAgICAgLy8gcGFyc2luZyBlcnJvciBpcyBhdm9pZGVkLCBzbyB3ZSBjYW4gb25seSBkbyB0aGlzIHRyaWNrIGlmIHRoZQogICAgICAgICAgLy8gbmV4dCBsaW5lIGlzIG5vdCBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZ2x1ZWQgb250byBhIHZhbGlkCiAgICAgICAgICAvLyBleHByZXNzaW9uIHRvIG1ha2UgYSBuZXcgdmFsaWQgZXhwcmVzc2lvbi4KCiAgICAgICAgICAvLyBJZiB3ZSdyZSB1c2luZyB0aGUgbmV3IGVtaXR0ZXIgd2hlcmUgbW9zdCBwcmV0dHkgcHJpbnRlZCBjb2RlCiAgICAgICAgICAvLyBpcyBlc2NhcGVkIGluIHN0cmluZ3MsIGl0IGlzIGEgbG90IGVhc2llciB0byBkZWFsIHdpdGggc2VtaWNvbG9ucwogICAgICAgICAgLy8gdGhhbiBuZXdsaW5lcyBiZWNhdXNlIHRoZSBmb3JtZXIgZG9lc24ndCBuZWVkIGVzY2FwaW5nLgogICAgICAgICAgaWYgKG9wdGlvbnMucHJlZmVyU2VtaWNvbG9uVG9OZXdsaW5lSW5NaW5pZmllZE91dHB1dCB8fAogICAgICAgICAgICAgIGV4cHJlc3Npb25Db250aW51YXRpb25SZWdFeHAuaGFzTWF0Y2goc3RyKSkgewogICAgICAgICAgICBfZW1pdCgiOyIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX2VtaXQoIlxuIik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChwZW5kaW5nU3BhY2UgJiYKICAgICAgICAgICghc2hvdWxkQ29tcHJlc3NPdXRwdXQgfHwgaWRlbnRpZmllckNoYXJhY3RlclJlZ0V4cC5oYXNNYXRjaChzdHIpKSkgewogICAgICAgIF9lbWl0KCIgIik7CiAgICAgIH0KICAgICAgcGVuZGluZ1NwYWNlID0gZmFsc2U7CiAgICAgIHBlbmRpbmdTZW1pY29sb24gPSBmYWxzZTsKICAgICAgaWYgKCFpc1doaXRlc3BhY2UpIHsKICAgICAgICBlbnRlck5vZGUoKTsKICAgICAgfQogICAgICBfZW1pdChzdHIpOwogICAgICBsYXN0QWRkZWRTdHJpbmcgPSBzdHI7CiAgICB9CiAgfQoKICB2b2lkIG91dExuKFN0cmluZyBzdHIpIHsKICAgIG91dChzdHIpOwogICAgbGluZU91dCgpOwogIH0KCiAgdm9pZCBvdXRTZW1pY29sb25MbigpIHsKICAgIGlmIChzaG91bGRDb21wcmVzc091dHB1dCkgewogICAgICBwZW5kaW5nU2VtaWNvbG9uID0gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIG91dCgiOyIpOwogICAgICBmb3JjZUxpbmUoKTsKICAgIH0KICB9CgogIHZvaWQgb3V0SW5kZW50KFN0cmluZyBzdHIpIHsKICAgIGluZGVudCgpOwogICAgb3V0KHN0cik7CiAgfQoKICB2b2lkIG91dEluZGVudExuKFN0cmluZyBzdHIpIHsKICAgIGluZGVudCgpOwogICAgb3V0TG4oc3RyKTsKICB9CgogIHZvaWQgaW5kZW50KCkgewogICAgaWYgKCFzaG91bGRDb21wcmVzc091dHB1dCkgewogICAgICBvdXQoaW5kZW50YXRpb24sIGlzV2hpdGVzcGFjZTogdHJ1ZSk7CiAgICB9CiAgfQoKICBFbnRlckV4aXROb2RlIGN1cnJlbnROb2RlOwoKICB2b2lkIF9lbWl0KFN0cmluZyB0ZXh0KSB7CiAgICBjb250ZXh0LmVtaXQodGV4dCk7CiAgICBfY2hhckNvdW50ICs9IHRleHQubGVuZ3RoOwogIH0KCiAgdm9pZCBzdGFydE5vZGUoTm9kZSBub2RlKSB7CiAgICBjdXJyZW50Tm9kZSA9IG5ldyBFbnRlckV4aXROb2RlKGN1cnJlbnROb2RlLCBub2RlKTsKICAgIGlmIChub2RlIGlzIERlZmVycmVkRXhwcmVzc2lvbikgewogICAgICBzdGFydE5vZGUobm9kZS52YWx1ZSk7CiAgICB9CiAgfQoKICB2b2lkIGVudGVyTm9kZSgpIHsKICAgIGN1cnJlbnROb2RlLmFkZFRvTm9kZShjb250ZXh0LCBfY2hhckNvdW50KTsKICB9CgogIHZvaWQgZW5kTm9kZShOb2RlIG5vZGUpIHsKICAgIGlmIChub2RlIGlzIERlZmVycmVkRXhwcmVzc2lvbikgewogICAgICBlbmROb2RlKG5vZGUudmFsdWUpOwogICAgfQogICAgYXNzZXJ0KGN1cnJlbnROb2RlLm5vZGUgPT0gbm9kZSk7CiAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLmV4aXROb2RlKGNvbnRleHQsIF9jaGFyQ291bnQpOwogIH0KCiAgdm9pZCB2aXNpdChOb2RlIG5vZGUpIHsKICAgIHN0YXJ0Tm9kZShub2RlKTsKICAgIG5vZGUuYWNjZXB0KHRoaXMpOwogICAgZW5kTm9kZShub2RlKTsKICB9CgogIHZvaWQgdmlzaXRDb21tYVNlcGFyYXRlZChMaXN0PE5vZGU+IG5vZGVzLCBpbnQgaGFzUmVxdWlyZWRUeXBlLAogICAgICB7Ym9vbCBuZXdJbkZvckluaXQsIGJvb2wgbmV3QXRTdGF0ZW1lbnRCZWdpbn0pIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGkgIT0gMCkgewogICAgICAgIGF0U3RhdGVtZW50QmVnaW4gPSBmYWxzZTsKICAgICAgICBvdXQoIiwiKTsKICAgICAgICBzcGFjZU91dCgpOwogICAgICB9CiAgICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihub2Rlc1tpXSwgaGFzUmVxdWlyZWRUeXBlLAogICAgICAgICAgbmV3SW5Gb3JJbml0OiBuZXdJbkZvckluaXQsIG5ld0F0U3RhdGVtZW50QmVnaW46IG5ld0F0U3RhdGVtZW50QmVnaW4pOwogICAgfQogIH0KCiAgdm9pZCB2aXNpdEFsbChMaXN0PE5vZGU+IG5vZGVzKSB7CiAgICBub2Rlcy5mb3JFYWNoKHZpc2l0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQcm9ncmFtKFByb2dyYW0gcHJvZ3JhbSkgewogICAgaWYgKHByb2dyYW0uYm9keS5pc05vdEVtcHR5KSB7CiAgICAgIHZpc2l0QWxsKHByb2dyYW0uYm9keSk7CiAgICB9CiAgfQoKICBTdGF0ZW1lbnQgdW53cmFwQmxvY2tJZlNpbmdsZVN0YXRlbWVudChTdGF0ZW1lbnQgYm9keSkgewogICAgU3RhdGVtZW50IHJlc3VsdCA9IGJvZHk7CiAgICB3aGlsZSAocmVzdWx0IGlzIEJsb2NrKSB7CiAgICAgIEJsb2NrIGJsb2NrID0gcmVzdWx0OwogICAgICBpZiAoYmxvY2suc3RhdGVtZW50cy5sZW5ndGggIT0gMSkgYnJlYWs7CiAgICAgIHJlc3VsdCA9IGJsb2NrLnN0YXRlbWVudHMuc2luZ2xlOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGJvb2wgYmxvY2tCb2R5KFN0YXRlbWVudCBib2R5LCB7Ym9vbCBuZWVkc1NlcGFyYXRpb24sIGJvb2wgbmVlZHNOZXdsaW5lfSkgewogICAgaWYgKGJvZHkgaXMgQmxvY2spIHsKICAgICAgc3BhY2VPdXQoKTsKICAgICAgYmxvY2tPdXQoYm9keSwgc2hvdWxkSW5kZW50OiBmYWxzZSwgbmVlZHNOZXdsaW5lOiBuZWVkc05ld2xpbmUpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChzaG91bGRDb21wcmVzc091dHB1dCAmJiBuZWVkc1NlcGFyYXRpb24pIHsKICAgICAgLy8gSWYgW3Nob3VsZENvbXByZXNzT3V0cHV0XSBpcyBmYWxzZSwgdGhlbiB0aGUgJ2xpbmVPdXQnIHdpbGwgaW5zZXJ0CiAgICAgIC8vIHRoZSBzZXBhcmF0aW9uLgogICAgICBvdXQoIiAiLCBpc1doaXRlc3BhY2U6IHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgbGluZU91dCgpOwogICAgfQogICAgaW5kZW50TW9yZSgpOwogICAgdmlzaXQoYm9keSk7CiAgICBpbmRlbnRMZXNzKCk7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB2b2lkIGJsb2NrT3V0V2l0aG91dEJyYWNlcyhOb2RlIG5vZGUpIHsKICAgIGlmIChub2RlIGlzIEJsb2NrKSB7CiAgICAgIHN0YXJ0Tm9kZShub2RlKTsKICAgICAgQmxvY2sgYmxvY2sgPSBub2RlOwogICAgICBibG9jay5zdGF0ZW1lbnRzLmZvckVhY2goYmxvY2tPdXRXaXRob3V0QnJhY2VzKTsKICAgICAgZW5kTm9kZShub2RlKTsKICAgIH0gZWxzZSB7CiAgICAgIHZpc2l0KG5vZGUpOwogICAgfQogIH0KCiAgaW50IGJsb2NrT3V0KEJsb2NrIG5vZGUsIHtib29sIHNob3VsZEluZGVudCwgYm9vbCBuZWVkc05ld2xpbmV9KSB7CiAgICBpZiAoc2hvdWxkSW5kZW50KSBpbmRlbnQoKTsKICAgIHN0YXJ0Tm9kZShub2RlKTsKICAgIG91dCgieyIpOwogICAgbGluZU91dCgpOwogICAgaW5kZW50TW9yZSgpOwogICAgbm9kZS5zdGF0ZW1lbnRzLmZvckVhY2goYmxvY2tPdXRXaXRob3V0QnJhY2VzKTsKICAgIGluZGVudExlc3MoKTsKICAgIGluZGVudCgpOwogICAgb3V0KCJ9Iik7CiAgICBpbnQgY2xvc2luZ1Bvc2l0aW9uID0gX2NoYXJDb3VudCAtIDE7CiAgICBlbmROb2RlKG5vZGUpOwogICAgaWYgKG5lZWRzTmV3bGluZSkgbGluZU91dCgpOwogICAgcmV0dXJuIGNsb3NpbmdQb3NpdGlvbjsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCbG9jayhCbG9jayBibG9jaykgewogICAgYmxvY2tPdXQoYmxvY2ssIHNob3VsZEluZGVudDogdHJ1ZSwgbmVlZHNOZXdsaW5lOiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRFeHByZXNzaW9uU3RhdGVtZW50KEV4cHJlc3Npb25TdGF0ZW1lbnQgbm9kZSkgewogICAgaW5kZW50KCk7CiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uLCBFWFBSRVNTSU9OLAogICAgICAgIG5ld0luRm9ySW5pdDogZmFsc2UsIG5ld0F0U3RhdGVtZW50QmVnaW46IHRydWUpOwogICAgb3V0U2VtaWNvbG9uTG4oKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRFbXB0eVN0YXRlbWVudChFbXB0eVN0YXRlbWVudCBub2RlKSB7CiAgICBvdXRJbmRlbnRMbigiOyIpOwogIH0KCiAgdm9pZCBpZk91dChJZiBub2RlLCBib29sIHNob3VsZEluZGVudCkgewogICAgU3RhdGVtZW50IHRoZW4gPSB1bndyYXBCbG9ja0lmU2luZ2xlU3RhdGVtZW50KG5vZGUudGhlbik7CiAgICBTdGF0ZW1lbnQgZWxzZVBhcnQgPSBub2RlLm90aGVyd2lzZTsKICAgIGJvb2wgaGFzRWxzZSA9IG5vZGUuaGFzRWxzZTsKCiAgICAvLyBIYW5kbGUgZGFuZ2xpbmcgZWxzZXMgYW5kIGEgd29yay1hcm91bmQgZm9yIEFuZHJvaWQgNC4wIHN0b2NrIGJyb3dzZXIuCiAgICAvLyBBbmRyb2lkIDQuMCByZXF1aXJlcyBicmFjZXMgZm9yIGEgc2luZ2xlIGRvLXdoaWxlIGluIHRoZSBgdGhlbmAgYnJhbmNoLgogICAgLy8gU2VlIGlzc3VlIDEwOTIzLgogICAgaWYgKGhhc0Vsc2UpIHsKICAgICAgYm9vbCBuZWVkc0JyYWNlcyA9IHRoZW4uYWNjZXB0KGRhbmdsaW5nRWxzZVZpc2l0b3IpIHx8IHRoZW4gaXMgRG87CiAgICAgIGlmIChuZWVkc0JyYWNlcykgewogICAgICAgIHRoZW4gPSBuZXcgQmxvY2soPFN0YXRlbWVudD5bdGhlbl0pOwogICAgICB9CiAgICB9CiAgICBpZiAoc2hvdWxkSW5kZW50KSBpbmRlbnQoKTsKICAgIG91dCgiaWYiKTsKICAgIHNwYWNlT3V0KCk7CiAgICBvdXQoIigiKTsKICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihub2RlLmNvbmRpdGlvbiwgRVhQUkVTU0lPTiwKICAgICAgICBuZXdJbkZvckluaXQ6IGZhbHNlLCBuZXdBdFN0YXRlbWVudEJlZ2luOiBmYWxzZSk7CiAgICBvdXQoIikiKTsKICAgIGJvb2wgdGhlbldhc0Jsb2NrID0KICAgICAgICBibG9ja0JvZHkodGhlbiwgbmVlZHNTZXBhcmF0aW9uOiBmYWxzZSwgbmVlZHNOZXdsaW5lOiAhaGFzRWxzZSk7CiAgICBpZiAoaGFzRWxzZSkgewogICAgICBpZiAodGhlbldhc0Jsb2NrKSB7CiAgICAgICAgc3BhY2VPdXQoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbmRlbnQoKTsKICAgICAgfQogICAgICBvdXQoImVsc2UiKTsKICAgICAgaWYgKGVsc2VQYXJ0IGlzIElmKSB7CiAgICAgICAgcGVuZGluZ1NwYWNlID0gdHJ1ZTsKICAgICAgICBzdGFydE5vZGUoZWxzZVBhcnQpOwogICAgICAgIGlmT3V0KGVsc2VQYXJ0LCBmYWxzZSk7CiAgICAgICAgZW5kTm9kZShlbHNlUGFydCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYmxvY2tCb2R5KHVud3JhcEJsb2NrSWZTaW5nbGVTdGF0ZW1lbnQoZWxzZVBhcnQpLAogICAgICAgICAgICBuZWVkc1NlcGFyYXRpb246IHRydWUsIG5lZWRzTmV3bGluZTogdHJ1ZSk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJZihJZiBub2RlKSB7CiAgICBpZk91dChub2RlLCB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGb3IoRm9yIGxvb3ApIHsKICAgIG91dEluZGVudCgiZm9yIik7CiAgICBzcGFjZU91dCgpOwogICAgb3V0KCIoIik7CiAgICBpZiAobG9vcC5pbml0ICE9IG51bGwpIHsKICAgICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKGxvb3AuaW5pdCwgRVhQUkVTU0lPTiwKICAgICAgICAgIG5ld0luRm9ySW5pdDogdHJ1ZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgfQogICAgb3V0KCI7Iik7CiAgICBpZiAobG9vcC5jb25kaXRpb24gIT0gbnVsbCkgewogICAgICBzcGFjZU91dCgpOwogICAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24obG9vcC5jb25kaXRpb24sIEVYUFJFU1NJT04sCiAgICAgICAgICBuZXdJbkZvckluaXQ6IGZhbHNlLCBuZXdBdFN0YXRlbWVudEJlZ2luOiBmYWxzZSk7CiAgICB9CiAgICBvdXQoIjsiKTsKICAgIGlmIChsb29wLnVwZGF0ZSAhPSBudWxsKSB7CiAgICAgIHNwYWNlT3V0KCk7CiAgICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihsb29wLnVwZGF0ZSwgRVhQUkVTU0lPTiwKICAgICAgICAgIG5ld0luRm9ySW5pdDogZmFsc2UsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICAgIH0KICAgIG91dCgiKSIpOwogICAgYmxvY2tCb2R5KHVud3JhcEJsb2NrSWZTaW5nbGVTdGF0ZW1lbnQobG9vcC5ib2R5KSwKICAgICAgICBuZWVkc1NlcGFyYXRpb246IGZhbHNlLCBuZWVkc05ld2xpbmU6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZvckluKEZvckluIGxvb3ApIHsKICAgIG91dEluZGVudCgiZm9yIik7CiAgICBzcGFjZU91dCgpOwogICAgb3V0KCIoIik7CiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24obG9vcC5sZWZ0SGFuZFNpZGUsIEVYUFJFU1NJT04sCiAgICAgICAgbmV3SW5Gb3JJbml0OiB0cnVlLCBuZXdBdFN0YXRlbWVudEJlZ2luOiBmYWxzZSk7CiAgICBvdXQoIiBpbiIpOwogICAgcGVuZGluZ1NwYWNlID0gdHJ1ZTsKICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihsb29wLm9iamVjdCwgRVhQUkVTU0lPTiwKICAgICAgICBuZXdJbkZvckluaXQ6IGZhbHNlLCBuZXdBdFN0YXRlbWVudEJlZ2luOiBmYWxzZSk7CiAgICBvdXQoIikiKTsKICAgIGJsb2NrQm9keSh1bndyYXBCbG9ja0lmU2luZ2xlU3RhdGVtZW50KGxvb3AuYm9keSksCiAgICAgICAgbmVlZHNTZXBhcmF0aW9uOiBmYWxzZSwgbmVlZHNOZXdsaW5lOiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRXaGlsZShXaGlsZSBsb29wKSB7CiAgICBvdXRJbmRlbnQoIndoaWxlIik7CiAgICBzcGFjZU91dCgpOwogICAgb3V0KCIoIik7CiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24obG9vcC5jb25kaXRpb24sIEVYUFJFU1NJT04sCiAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgb3V0KCIpIik7CiAgICBibG9ja0JvZHkodW53cmFwQmxvY2tJZlNpbmdsZVN0YXRlbWVudChsb29wLmJvZHkpLAogICAgICAgIG5lZWRzU2VwYXJhdGlvbjogZmFsc2UsIG5lZWRzTmV3bGluZTogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RG8oRG8gbG9vcCkgewogICAgb3V0SW5kZW50KCJkbyIpOwogICAgaWYgKGJsb2NrQm9keSh1bndyYXBCbG9ja0lmU2luZ2xlU3RhdGVtZW50KGxvb3AuYm9keSksCiAgICAgICAgbmVlZHNTZXBhcmF0aW9uOiB0cnVlLCBuZWVkc05ld2xpbmU6IGZhbHNlKSkgewogICAgICBzcGFjZU91dCgpOwogICAgfSBlbHNlIHsKICAgICAgaW5kZW50KCk7CiAgICB9CiAgICBvdXQoIndoaWxlIik7CiAgICBzcGFjZU91dCgpOwogICAgb3V0KCIoIik7CiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24obG9vcC5jb25kaXRpb24sIEVYUFJFU1NJT04sCiAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgb3V0KCIpIik7CiAgICBvdXRTZW1pY29sb25MbigpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnRpbnVlKENvbnRpbnVlIG5vZGUpIHsKICAgIGlmIChub2RlLnRhcmdldExhYmVsID09IG51bGwpIHsKICAgICAgb3V0SW5kZW50KCJjb250aW51ZSIpOwogICAgfSBlbHNlIHsKICAgICAgb3V0SW5kZW50KCJjb250aW51ZSAke25vZGUudGFyZ2V0TGFiZWx9Iik7CiAgICB9CiAgICBvdXRTZW1pY29sb25MbigpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJyZWFrKEJyZWFrIG5vZGUpIHsKICAgIGlmIChub2RlLnRhcmdldExhYmVsID09IG51bGwpIHsKICAgICAgb3V0SW5kZW50KCJicmVhayIpOwogICAgfSBlbHNlIHsKICAgICAgb3V0SW5kZW50KCJicmVhayAke25vZGUudGFyZ2V0TGFiZWx9Iik7CiAgICB9CiAgICBvdXRTZW1pY29sb25MbigpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFJldHVybihSZXR1cm4gbm9kZSkgewogICAgaWYgKG5vZGUudmFsdWUgPT0gbnVsbCkgewogICAgICBvdXRJbmRlbnQoInJldHVybiIpOwogICAgfSBlbHNlIHsKICAgICAgb3V0SW5kZW50KCJyZXR1cm4iKTsKICAgICAgcGVuZGluZ1NwYWNlID0gdHJ1ZTsKICAgICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKG5vZGUudmFsdWUsIEVYUFJFU1NJT04sCiAgICAgICAgICBuZXdJbkZvckluaXQ6IGZhbHNlLCBuZXdBdFN0YXRlbWVudEJlZ2luOiBmYWxzZSk7CiAgICB9CiAgICAvLyBTZXQgdGhlIGNsb3NpbmcgcG9zaXRpb24gdG8gYmUgYmVmb3JlIHRoZSBvcHRpb25hbCBzZW1pY29sb24uCiAgICBjdXJyZW50Tm9kZS5jbG9zaW5nUG9zaXRpb24gPSBfY2hhckNvdW50OwogICAgb3V0U2VtaWNvbG9uTG4oKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREYXJ0WWllbGQoRGFydFlpZWxkIG5vZGUpIHsKICAgIGlmIChub2RlLmhhc1N0YXIpIHsKICAgICAgb3V0SW5kZW50KCJ5aWVsZCoiKTsKICAgIH0gZWxzZSB7CiAgICAgIG91dEluZGVudCgieWllbGQiKTsKICAgIH0KICAgIHBlbmRpbmdTcGFjZSA9IHRydWU7CiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uLCBFWFBSRVNTSU9OLAogICAgICAgIG5ld0luRm9ySW5pdDogZmFsc2UsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICAgIG91dFNlbWljb2xvbkxuKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VGhyb3coVGhyb3cgbm9kZSkgewogICAgb3V0SW5kZW50KCJ0aHJvdyIpOwogICAgcGVuZGluZ1NwYWNlID0gdHJ1ZTsKICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24sIEVYUFJFU1NJT04sCiAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgb3V0U2VtaWNvbG9uTG4oKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUcnkoVHJ5IG5vZGUpIHsKICAgIG91dEluZGVudCgidHJ5Iik7CiAgICBibG9ja0JvZHkobm9kZS5ib2R5LCBuZWVkc1NlcGFyYXRpb246IHRydWUsIG5lZWRzTmV3bGluZTogZmFsc2UpOwogICAgaWYgKG5vZGUuY2F0Y2hQYXJ0ICE9IG51bGwpIHsKICAgICAgdmlzaXQobm9kZS5jYXRjaFBhcnQpOwogICAgfQogICAgaWYgKG5vZGUuZmluYWxseVBhcnQgIT0gbnVsbCkgewogICAgICBzcGFjZU91dCgpOwogICAgICBvdXQoImZpbmFsbHkiKTsKICAgICAgYmxvY2tCb2R5KG5vZGUuZmluYWxseVBhcnQsIG5lZWRzU2VwYXJhdGlvbjogdHJ1ZSwgbmVlZHNOZXdsaW5lOiB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIGxpbmVPdXQoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDYXRjaChDYXRjaCBub2RlKSB7CiAgICBzcGFjZU91dCgpOwogICAgb3V0KCJjYXRjaCIpOwogICAgc3BhY2VPdXQoKTsKICAgIG91dCgiKCIpOwogICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKG5vZGUuZGVjbGFyYXRpb24sIEVYUFJFU1NJT04sCiAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgb3V0KCIpIik7CiAgICBibG9ja0JvZHkobm9kZS5ib2R5LCBuZWVkc1NlcGFyYXRpb246IGZhbHNlLCBuZWVkc05ld2xpbmU6IGZhbHNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTd2l0Y2goU3dpdGNoIG5vZGUpIHsKICAgIG91dEluZGVudCgic3dpdGNoIik7CiAgICBzcGFjZU91dCgpOwogICAgb3V0KCIoIik7CiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24obm9kZS5rZXksIEVYUFJFU1NJT04sCiAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgb3V0KCIpIik7CiAgICBzcGFjZU91dCgpOwogICAgb3V0TG4oInsiKTsKICAgIGluZGVudE1vcmUoKTsKICAgIHZpc2l0QWxsKG5vZGUuY2FzZXMpOwogICAgaW5kZW50TGVzcygpOwogICAgb3V0SW5kZW50TG4oIn0iKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDYXNlKENhc2Ugbm9kZSkgewogICAgb3V0SW5kZW50KCJjYXNlIik7CiAgICBwZW5kaW5nU3BhY2UgPSB0cnVlOwogICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKG5vZGUuZXhwcmVzc2lvbiwgRVhQUkVTU0lPTiwKICAgICAgICBuZXdJbkZvckluaXQ6IGZhbHNlLCBuZXdBdFN0YXRlbWVudEJlZ2luOiBmYWxzZSk7CiAgICBvdXRMbigiOiIpOwogICAgaWYgKCFub2RlLmJvZHkuc3RhdGVtZW50cy5pc0VtcHR5KSB7CiAgICAgIGluZGVudE1vcmUoKTsKICAgICAgYmxvY2tPdXRXaXRob3V0QnJhY2VzKG5vZGUuYm9keSk7CiAgICAgIGluZGVudExlc3MoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREZWZhdWx0KERlZmF1bHQgbm9kZSkgewogICAgb3V0SW5kZW50TG4oImRlZmF1bHQ6Iik7CiAgICBpZiAoIW5vZGUuYm9keS5zdGF0ZW1lbnRzLmlzRW1wdHkpIHsKICAgICAgaW5kZW50TW9yZSgpOwogICAgICBibG9ja091dFdpdGhvdXRCcmFjZXMobm9kZS5ib2R5KTsKICAgICAgaW5kZW50TGVzcygpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExhYmVsZWRTdGF0ZW1lbnQoTGFiZWxlZFN0YXRlbWVudCBub2RlKSB7CiAgICBTdGF0ZW1lbnQgYm9keSA9IHVud3JhcEJsb2NrSWZTaW5nbGVTdGF0ZW1lbnQobm9kZS5ib2R5KTsKICAgIC8vIGBsYWJlbDogYnJlYWsgbGFiZWw7YAogICAgLy8gRG9lcyBub3Qgd29yayBvbiBJRS4gVGhlIHN0YXRlbWVudCBpcyBhIG5vcCwgc28gcmVwbGFjZSBpdCBieSBhbiBlbXB0eQogICAgLy8gc3RhdGVtZW50LgogICAgLy8gU2VlOgogICAgLy8gaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy84OTE4ODkvcGFyc2VyLWJ1Z3MKICAgIGlmIChib2R5IGlzIEJyZWFrICYmIGJvZHkudGFyZ2V0TGFiZWwgPT0gbm9kZS5sYWJlbCkgewogICAgICB2aXNpdChuZXcgRW1wdHlTdGF0ZW1lbnQoKSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIG91dEluZGVudCgiJHtub2RlLmxhYmVsfToiKTsKICAgIGJsb2NrQm9keShib2R5LCBuZWVkc1NlcGFyYXRpb246IGZhbHNlLCBuZWVkc05ld2xpbmU6IHRydWUpOwogIH0KCiAgaW50IGZ1bmN0aW9uT3V0KEZ1biBmdW4sIE5vZGUgbmFtZSwgVmFyQ29sbGVjdG9yIHZhcnMpIHsKICAgIG91dCgiZnVuY3Rpb24iKTsKICAgIGlmIChuYW1lICE9IG51bGwpIHsKICAgICAgb3V0KCIgIik7CiAgICAgIC8vIE5hbWUgbXVzdCBiZSBhIFtEZWNsXS4gVGhlcmVmb3JlIG9ubHkgdGVzdCBmb3IgcHJpbWFyeSBleHByZXNzaW9ucy4KICAgICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKG5hbWUsIFBSSU1BUlksCiAgICAgICAgICBuZXdJbkZvckluaXQ6IGZhbHNlLCBuZXdBdFN0YXRlbWVudEJlZ2luOiBmYWxzZSk7CiAgICB9CiAgICBsb2NhbE5hbWVyLmVudGVyU2NvcGUodmFycyk7CiAgICBvdXQoIigiKTsKICAgIGlmIChmdW4ucGFyYW1zICE9IG51bGwpIHsKICAgICAgdmlzaXRDb21tYVNlcGFyYXRlZChmdW4ucGFyYW1zLCBQUklNQVJZLAogICAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgfQogICAgb3V0KCIpIik7CiAgICBzd2l0Y2ggKGZ1bi5hc3luY01vZGlmaWVyKSB7CiAgICAgIGNhc2UgQXN5bmNNb2RpZmllci5zeW5jOgogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEFzeW5jTW9kaWZpZXIuYXN5bmM6CiAgICAgICAgb3V0KCcgJywgaXNXaGl0ZXNwYWNlOiB0cnVlKTsKICAgICAgICBvdXQoJ2FzeW5jJyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQXN5bmNNb2RpZmllci5zeW5jU3RhcjoKICAgICAgICBvdXQoJyAnLCBpc1doaXRlc3BhY2U6IHRydWUpOwogICAgICAgIG91dCgnc3luYyonKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBBc3luY01vZGlmaWVyLmFzeW5jU3RhcjoKICAgICAgICBvdXQoJyAnLCBpc1doaXRlc3BhY2U6IHRydWUpOwogICAgICAgIG91dCgnYXN5bmMqJyk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBzcGFjZU91dCgpOwogICAgaW50IGNsb3NpbmdQb3NpdGlvbiA9CiAgICAgICAgYmxvY2tPdXQoZnVuLmJvZHksIHNob3VsZEluZGVudDogZmFsc2UsIG5lZWRzTmV3bGluZTogZmFsc2UpOwogICAgbG9jYWxOYW1lci5sZWF2ZVNjb3BlKCk7CiAgICByZXR1cm4gY2xvc2luZ1Bvc2l0aW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRGdW5jdGlvbkRlY2xhcmF0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24gZGVjbGFyYXRpb24pIHsKICAgIFZhckNvbGxlY3RvciB2YXJzID0gbmV3IFZhckNvbGxlY3RvcigpOwogICAgdmFycy52aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24oZGVjbGFyYXRpb24pOwogICAgaW5kZW50KCk7CiAgICBzdGFydE5vZGUoZGVjbGFyYXRpb24uZnVuY3Rpb24pOwogICAgY3VycmVudE5vZGUuY2xvc2luZ1Bvc2l0aW9uID0KICAgICAgICBmdW5jdGlvbk91dChkZWNsYXJhdGlvbi5mdW5jdGlvbiwgZGVjbGFyYXRpb24ubmFtZSwgdmFycyk7CiAgICBlbmROb2RlKGRlY2xhcmF0aW9uLmZ1bmN0aW9uKTsKICAgIGxpbmVPdXQoKTsKICB9CgogIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihFeHByZXNzaW9uIG5vZGUsIGludCByZXF1aXJlZFByZWNlZGVuY2UsCiAgICAgIHtib29sIG5ld0luRm9ySW5pdCwgYm9vbCBuZXdBdFN0YXRlbWVudEJlZ2lufSkgewogICAgYm9vbCBuZWVkc1BhcmVudGhlc2VzID0KICAgICAgICAvLyBhIC0gKGIgKyBjKS4KICAgICAgICAocmVxdWlyZWRQcmVjZWRlbmNlICE9IEVYUFJFU1NJT04gJiYKICAgICAgICAgICAgICAgIG5vZGUucHJlY2VkZW5jZUxldmVsIDwgcmVxdWlyZWRQcmVjZWRlbmNlKSB8fAogICAgICAgICAgICAvLyBmb3IgKGEgPSAoeCBpbiBvKTsgLi4uIDsgLi4uICkgeyAuLi4gfQogICAgICAgICAgICAobmV3SW5Gb3JJbml0ICYmIG5vZGUgaXMgQmluYXJ5ICYmIG5vZGUub3AgPT0gImluIikgfHwKICAgICAgICAgICAgLy8gKGZ1bmN0aW9uKCkgeyAuLi4gfSkoKS4KICAgICAgICAgICAgLy8gKHthOiAyLCBiOiAzfS50b1N0cmluZygpKS4KICAgICAgICAgICAgKG5ld0F0U3RhdGVtZW50QmVnaW4gJiYKICAgICAgICAgICAgICAgIChub2RlIGlzIE5hbWVkRnVuY3Rpb24gfHwKICAgICAgICAgICAgICAgICAgICBub2RlIGlzIEZ1biB8fAogICAgICAgICAgICAgICAgICAgIG5vZGUgaXMgT2JqZWN0SW5pdGlhbGl6ZXIpKTsKICAgIGlmIChuZWVkc1BhcmVudGhlc2VzKSB7CiAgICAgIGluRm9ySW5pdCA9IGZhbHNlOwogICAgICBhdFN0YXRlbWVudEJlZ2luID0gZmFsc2U7CiAgICAgIG91dCgiKCIpOwogICAgICB2aXNpdChub2RlKTsKICAgICAgb3V0KCIpIik7CiAgICB9IGVsc2UgewogICAgICBpbkZvckluaXQgPSBuZXdJbkZvckluaXQ7CiAgICAgIGF0U3RhdGVtZW50QmVnaW4gPSBuZXdBdFN0YXRlbWVudEJlZ2luOwogICAgICB2aXNpdChub2RlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QgbGlzdCkgewogICAgb3V0KCJ2YXIgIik7CiAgICBMaXN0PE5vZGU+IG5vZGVzID0gbGlzdC5kZWNsYXJhdGlvbnM7CiAgICBpZiAoaW5Gb3JJbml0KSB7CiAgICAgIHZpc2l0Q29tbWFTZXBhcmF0ZWQobm9kZXMsIEFTU0lHTk1FTlQsCiAgICAgICAgICBuZXdJbkZvckluaXQ6IGluRm9ySW5pdCwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgfSBlbHNlIHsKICAgICAgLy8gUHJpbnQgJ2JpZycgZGVjbGFyYXRpb25zIG9uIHRoZWlyIG93biBsaW5lLCB3aGlsZSBrZWVwaW5nIGFkamFjZW50CiAgICAgIC8vIHNtYWxsIGFuZCB1bmluaXRpYWxpemVkIGRlY2xhcmF0aW9ucyBvbiB0aGUgc2FtZSBsaW5lLgogICAgICBib29sIHVzZUluZGVudCA9IG5vZGVzLmxlbmd0aCA+IDEgJiYgbGlzdC5pbmRlbnRTcGxpdHM7CiAgICAgIGlmICh1c2VJbmRlbnQpIHsKICAgICAgICBpbmRlbnRNb3JlKCk7CiAgICAgIH0KICAgICAgYm9vbCBsYXN0V2FzQmlnID0gZmFsc2U7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBOb2RlIG5vZGUgPSBub2Rlc1tpXTsKICAgICAgICBib29sIHRoaXNJc0JpZyA9ICFfaXNTbWFsbEluaXRpYWxpemF0aW9uKG5vZGUpOwogICAgICAgIGlmIChpID4gMCkgewogICAgICAgICAgYXRTdGF0ZW1lbnRCZWdpbiA9IGZhbHNlOwogICAgICAgICAgb3V0KCIsIik7CiAgICAgICAgICBpZiAobGFzdFdhc0JpZyB8fCB0aGlzSXNCaWcpIHsKICAgICAgICAgICAgbGluZU91dCgpOwogICAgICAgICAgICBpbmRlbnQoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNwYWNlT3V0KCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihub2RlLCBBU1NJR05NRU5ULAogICAgICAgICAgICBuZXdJbkZvckluaXQ6IGluRm9ySW5pdCwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgICAgIGxhc3RXYXNCaWcgPSB0aGlzSXNCaWc7CiAgICAgIH0KICAgICAgaWYgKHVzZUluZGVudCkgewogICAgICAgIGluZGVudExlc3MoKTsKICAgICAgfQogICAgfQogIH0KCiAgc3RhdGljIGJvb2wgX2lzU21hbGxJbml0aWFsaXphdGlvbihOb2RlIG5vZGUpIHsKICAgIGlmIChub2RlIGlzIFZhcmlhYmxlSW5pdGlhbGl6YXRpb24pIHsKICAgICAgTm9kZSB2YWx1ZSA9IHVuZGVmZXIobm9kZS52YWx1ZSk7CiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKHZhbHVlIGlzIFRoaXMpIHJldHVybiB0cnVlOwogICAgICBpZiAodmFsdWUgaXMgTGl0ZXJhbE51bGwpIHJldHVybiB0cnVlOwogICAgICBpZiAodmFsdWUgaXMgTGl0ZXJhbE51bWJlcikgcmV0dXJuIHRydWU7CiAgICAgIGlmICh2YWx1ZSBpcyBMaXRlcmFsU3RyaW5nICYmIHZhbHVlLnZhbHVlLmxlbmd0aCA8PSA4KSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKHZhbHVlIGlzIE9iamVjdEluaXRpYWxpemVyICYmIHZhbHVlLnByb3BlcnRpZXMuaXNFbXB0eSkgcmV0dXJuIHRydWU7CiAgICAgIGlmICh2YWx1ZSBpcyBBcnJheUluaXRpYWxpemVyICYmIHZhbHVlLmVsZW1lbnRzLmlzRW1wdHkpIHJldHVybiB0cnVlOwogICAgICBpZiAodmFsdWUgaXMgTmFtZSAmJiB2YWx1ZS5uYW1lLmxlbmd0aCA8PSA4KSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgX291dHB1dEluY0RlYyhTdHJpbmcgb3AsIEV4cHJlc3Npb24gdmFyaWFibGUsIFtFeHByZXNzaW9uIGFsaWFzXSkgewogICAgaWYgKG9wID09ICcrJykgewogICAgICBpZiAobGFzdENoYXJDb2RlID09IGNoYXJDb2Rlcy4kUExVUykgb3V0KCIgIiwgaXNXaGl0ZXNwYWNlOiB0cnVlKTsKICAgICAgb3V0KCcrKycpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKGxhc3RDaGFyQ29kZSA9PSBjaGFyQ29kZXMuJE1JTlVTKSBvdXQoIiAiLCBpc1doaXRlc3BhY2U6IHRydWUpOwogICAgICBvdXQoJy0tJyk7CiAgICB9CiAgICBpZiAoYWxpYXMgIT0gbnVsbCkgc3RhcnROb2RlKGFsaWFzKTsKICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbih2YXJpYWJsZSwgVU5BUlksCiAgICAgICAgbmV3SW5Gb3JJbml0OiBpbkZvckluaXQsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICAgIGlmIChhbGlhcyAhPSBudWxsKSBlbmROb2RlKGFsaWFzKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0QXNzaWdubWVudChBc3NpZ25tZW50IGFzc2lnbm1lbnQpIHsKICAgIC8vLyBUbyBwcmludCBhc3NpZ25tZW50cyBsaWtlIGBhID0gYSArIDFgIGFuZCBgYSA9IGEgKyBiYCBjb21wYWN0bHkgYXMKICAgIC8vLyBgKythYCBhbmQgYGEgKz0gYmAgaW4gdGhlIGZhY2Ugb2YgW0RlZmVycmVkRXhwcmVzc2lvbl1zIHdlIGRldGVjdCB0aGUKICAgIC8vLyBwYXR0ZXJuIG9mIHRoZSB1bmRlZmVycmVkIGFzc2lnbm1lbnQuCiAgICBTdHJpbmcgb3AgPSBhc3NpZ25tZW50Lm9wOwogICAgTm9kZSBsZWZ0SGFuZFNpZGUgPSB1bmRlZmVyKGFzc2lnbm1lbnQubGVmdEhhbmRTaWRlKTsKICAgIE5vZGUgcmlnaHRIYW5kU2lkZSA9IHVuZGVmZXIoYXNzaWdubWVudC52YWx1ZSk7CiAgICBpZiAoKG9wID09ICcrJyB8fCBvcCA9PSAnLScpICYmCiAgICAgICAgbGVmdEhhbmRTaWRlIGlzIFZhcmlhYmxlVXNlICYmCiAgICAgICAgcmlnaHRIYW5kU2lkZSBpcyBMaXRlcmFsTnVtYmVyICYmCiAgICAgICAgcmlnaHRIYW5kU2lkZS52YWx1ZSA9PSAiMSIpIHsKICAgICAgLy8gT3V0cHV0ICdhICs9IDEnIGFzICcrK2EnIGFuZCAnYSAtPSAxJyBhcyAnLS1hJy4KICAgICAgX291dHB1dEluY0RlYyhvcCwgYXNzaWdubWVudC5sZWZ0SGFuZFNpZGUpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoIWFzc2lnbm1lbnQuaXNDb21wb3VuZCAmJgogICAgICAgIGxlZnRIYW5kU2lkZSBpcyBWYXJpYWJsZVVzZSAmJgogICAgICAgIHJpZ2h0SGFuZFNpZGUgaXMgQmluYXJ5KSB7CiAgICAgIE5vZGUgckxlZnQgPSB1bmRlZmVyKHJpZ2h0SGFuZFNpZGUubGVmdCk7CiAgICAgIE5vZGUgclJpZ2h0ID0gdW5kZWZlcihyaWdodEhhbmRTaWRlLnJpZ2h0KTsKICAgICAgU3RyaW5nIG9wID0gcmlnaHRIYW5kU2lkZS5vcDsKICAgICAgaWYgKG9wID09ICcrJyB8fAogICAgICAgICAgb3AgPT0gJy0nIHx8CiAgICAgICAgICBvcCA9PSAnLycgfHwKICAgICAgICAgIG9wID09ICcqJyB8fAogICAgICAgICAgb3AgPT0gJyUnIHx8CiAgICAgICAgICBvcCA9PSAnXicgfHwKICAgICAgICAgIG9wID09ICcmJyB8fAogICAgICAgICAgb3AgPT0gJ3wnKSB7CiAgICAgICAgaWYgKHJMZWZ0IGlzIFZhcmlhYmxlVXNlICYmIHJMZWZ0Lm5hbWUgPT0gbGVmdEhhbmRTaWRlLm5hbWUpIHsKICAgICAgICAgIC8vIE91dHB1dCAnYSA9IGEgKyAxJyBhcyAnKythJyBhbmQgJ2EgPSBhIC0gMScgYXMgJy0tYScuCiAgICAgICAgICBpZiAoKG9wID09ICcrJyB8fCBvcCA9PSAnLScpICYmCiAgICAgICAgICAgICAgclJpZ2h0IGlzIExpdGVyYWxOdW1iZXIgJiYKICAgICAgICAgICAgICByUmlnaHQudmFsdWUgPT0gIjEiKSB7CiAgICAgICAgICAgIF9vdXRwdXRJbmNEZWMob3AsIGFzc2lnbm1lbnQubGVmdEhhbmRTaWRlLCByaWdodEhhbmRTaWRlLmxlZnQpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICAvLyBPdXRwdXQgJ2EgPSBhICsgYicgYXMgJ2EgKz0gYicuCiAgICAgICAgICBzdGFydE5vZGUocmlnaHRIYW5kU2lkZS5sZWZ0KTsKICAgICAgICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihhc3NpZ25tZW50LmxlZnRIYW5kU2lkZSwgQ0FMTCwKICAgICAgICAgICAgICBuZXdJbkZvckluaXQ6IGluRm9ySW5pdCwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogYXRTdGF0ZW1lbnRCZWdpbik7CiAgICAgICAgICBlbmROb2RlKHJpZ2h0SGFuZFNpZGUubGVmdCk7CiAgICAgICAgICBzcGFjZU91dCgpOwogICAgICAgICAgb3V0KG9wKTsKICAgICAgICAgIG91dCgiPSIpOwogICAgICAgICAgc3BhY2VPdXQoKTsKICAgICAgICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihyUmlnaHQsIEFTU0lHTk1FTlQsCiAgICAgICAgICAgICAgbmV3SW5Gb3JJbml0OiBpbkZvckluaXQsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihhc3NpZ25tZW50LmxlZnRIYW5kU2lkZSwgQ0FMTCwKICAgICAgICBuZXdJbkZvckluaXQ6IGluRm9ySW5pdCwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogYXRTdGF0ZW1lbnRCZWdpbik7CiAgICBpZiAoYXNzaWdubWVudC52YWx1ZSAhPSBudWxsKSB7CiAgICAgIHNwYWNlT3V0KCk7CiAgICAgIGlmIChvcCAhPSBudWxsKSBvdXQob3ApOwogICAgICBvdXQoIj0iKTsKICAgICAgc3BhY2VPdXQoKTsKICAgICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKGFzc2lnbm1lbnQudmFsdWUsIEFTU0lHTk1FTlQsCiAgICAgICAgICBuZXdJbkZvckluaXQ6IGluRm9ySW5pdCwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRWYXJpYWJsZUluaXRpYWxpemF0aW9uKFZhcmlhYmxlSW5pdGlhbGl6YXRpb24gaW5pdGlhbGl6YXRpb24pIHsKICAgIHZpc2l0QXNzaWdubWVudChpbml0aWFsaXphdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENvbmRpdGlvbmFsKENvbmRpdGlvbmFsIGNvbmQpIHsKICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihjb25kLmNvbmRpdGlvbiwgTE9HSUNBTF9PUiwKICAgICAgICBuZXdJbkZvckluaXQ6IGluRm9ySW5pdCwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogYXRTdGF0ZW1lbnRCZWdpbik7CiAgICBzcGFjZU91dCgpOwogICAgb3V0KCI/Iik7CiAgICBzcGFjZU91dCgpOwogICAgLy8gVGhlIHRoZW4gcGFydCBpcyBhbGxvd2VkIHRvIGhhdmUgYW4gJ2luJy4KICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihjb25kLnRoZW4sIEFTU0lHTk1FTlQsCiAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgc3BhY2VPdXQoKTsKICAgIG91dCgiOiIpOwogICAgc3BhY2VPdXQoKTsKICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihjb25kLm90aGVyd2lzZSwgQVNTSUdOTUVOVCwKICAgICAgICBuZXdJbkZvckluaXQ6IGluRm9ySW5pdCwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXROZXcoTmV3IG5vZGUpIHsKICAgIG91dCgibmV3ICIpOwogICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKG5vZGUudGFyZ2V0LCBMRUZUX0hBTkRfU0lERSwKICAgICAgICBuZXdJbkZvckluaXQ6IGluRm9ySW5pdCwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgb3V0KCIoIik7CiAgICB2aXNpdENvbW1hU2VwYXJhdGVkKG5vZGUuYXJndW1lbnRzLCBBU1NJR05NRU5ULAogICAgICAgIG5ld0luRm9ySW5pdDogZmFsc2UsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICAgIG91dCgiKSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDYWxsKENhbGwgY2FsbCkgewogICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKGNhbGwudGFyZ2V0LCBDQUxMLAogICAgICAgIG5ld0luRm9ySW5pdDogaW5Gb3JJbml0LCBuZXdBdFN0YXRlbWVudEJlZ2luOiBhdFN0YXRlbWVudEJlZ2luKTsKICAgIG91dCgiKCIpOwogICAgdmlzaXRDb21tYVNlcGFyYXRlZChjYWxsLmFyZ3VtZW50cywgQVNTSUdOTUVOVCwKICAgICAgICBuZXdJbkZvckluaXQ6IGZhbHNlLCBuZXdBdFN0YXRlbWVudEJlZ2luOiBmYWxzZSk7CiAgICBvdXQoIikiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCaW5hcnkoQmluYXJ5IGJpbmFyeSkgewogICAgRXhwcmVzc2lvbiBsZWZ0ID0gYmluYXJ5LmxlZnQ7CiAgICBFeHByZXNzaW9uIHJpZ2h0ID0gYmluYXJ5LnJpZ2h0OwogICAgU3RyaW5nIG9wID0gYmluYXJ5Lm9wOwogICAgaW50IGxlZnRQcmVjZWRlbmNlUmVxdWlyZW1lbnQ7CiAgICBpbnQgcmlnaHRQcmVjZWRlbmNlUmVxdWlyZW1lbnQ7CiAgICBib29sIGxlZnRTcGFjZSA9IHRydWU7IC8vIGxlZnQ8SEVSRT5vcCByaWdodAogICAgc3dpdGNoIChvcCkgewogICAgICBjYXNlICcsJzoKICAgICAgICAvLyAgeCwgKHksIHopIDw9PiAoeCwgeSksIHouCiAgICAgICAgbGVmdFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IEVYUFJFU1NJT047CiAgICAgICAgcmlnaHRQcmVjZWRlbmNlUmVxdWlyZW1lbnQgPSBFWFBSRVNTSU9OOwogICAgICAgIGxlZnRTcGFjZSA9IGZhbHNlOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJ8fCI6CiAgICAgICAgbGVmdFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IExPR0lDQUxfT1I7CiAgICAgICAgLy8geCB8fCAoeSB8fCB6KSA8PT4gKHggfHwgeSkgfHwgei4KICAgICAgICByaWdodFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IExPR0lDQUxfT1I7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIiYmIjoKICAgICAgICBsZWZ0UHJlY2VkZW5jZVJlcXVpcmVtZW50ID0gTE9HSUNBTF9BTkQ7CiAgICAgICAgLy8geCAmJiAoeSAmJiB6KSA8PT4gKHggJiYgeSkgJiYgei4KICAgICAgICByaWdodFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IExPR0lDQUxfQU5EOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJ8IjoKICAgICAgICBsZWZ0UHJlY2VkZW5jZVJlcXVpcmVtZW50ID0gQklUX09SOwogICAgICAgIC8vIHggfCAoeSB8IHopIDw9PiAoeCB8IHkpIHwgei4KICAgICAgICByaWdodFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IEJJVF9PUjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiXiI6CiAgICAgICAgbGVmdFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IEJJVF9YT1I7CiAgICAgICAgLy8geCBeICh5IF4geikgPD0+ICh4IF4geSkgXiB6LgogICAgICAgIHJpZ2h0UHJlY2VkZW5jZVJlcXVpcmVtZW50ID0gQklUX1hPUjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiJiI6CiAgICAgICAgbGVmdFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IEJJVF9BTkQ7CiAgICAgICAgLy8geCAmICh5ICYgeikgPD0+ICh4ICYgeSkgJiB6LgogICAgICAgIHJpZ2h0UHJlY2VkZW5jZVJlcXVpcmVtZW50ID0gQklUX0FORDsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiPT0iOgogICAgICBjYXNlICIhPSI6CiAgICAgIGNhc2UgIj09PSI6CiAgICAgIGNhc2UgIiE9PSI6CiAgICAgICAgbGVmdFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IEVRVUFMSVRZOwogICAgICAgIHJpZ2h0UHJlY2VkZW5jZVJlcXVpcmVtZW50ID0gUkVMQVRJT05BTDsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiPCI6CiAgICAgIGNhc2UgIj4iOgogICAgICBjYXNlICI8PSI6CiAgICAgIGNhc2UgIj49IjoKICAgICAgY2FzZSAiaW5zdGFuY2VvZiI6CiAgICAgIGNhc2UgImluIjoKICAgICAgICBsZWZ0UHJlY2VkZW5jZVJlcXVpcmVtZW50ID0gUkVMQVRJT05BTDsKICAgICAgICByaWdodFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IFNISUZUOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICI+PiI6CiAgICAgIGNhc2UgIjw8IjoKICAgICAgY2FzZSAiPj4+IjoKICAgICAgICBsZWZ0UHJlY2VkZW5jZVJlcXVpcmVtZW50ID0gU0hJRlQ7CiAgICAgICAgcmlnaHRQcmVjZWRlbmNlUmVxdWlyZW1lbnQgPSBBRERJVElWRTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiKyI6CiAgICAgIGNhc2UgIi0iOgogICAgICAgIGxlZnRQcmVjZWRlbmNlUmVxdWlyZW1lbnQgPSBBRERJVElWRTsKICAgICAgICAvLyBXZSBjYW5ub3QgcmVtb3ZlIHBhcmVudGhlc2lzIGZvciAiKyIgYmVjYXVzZQogICAgICAgIC8vICAgeCArICh5ICsgeikgPCE9PiAoeCArIHkpICsgejoKICAgICAgICAvLyBFeGFtcGxlOgogICAgICAgIC8vICAgImEiICsgKDEgKyAyKSA9PiAiYTMiOwogICAgICAgIC8vICAgKCJhIiArIDEpICsgMiA9PiAiYTEyIjsKICAgICAgICByaWdodFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IE1VTFRJUExJQ0FUSVZFOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICIqIjoKICAgICAgY2FzZSAiLyI6CiAgICAgIGNhc2UgIiUiOgogICAgICAgIGxlZnRQcmVjZWRlbmNlUmVxdWlyZW1lbnQgPSBNVUxUSVBMSUNBVElWRTsKICAgICAgICAvLyBXZSBjYW5ub3QgcmVtb3ZlIHBhcmVudGhlc2lzIGZvciAiKiIgYmVjYXVzZSBvZiBwcmVjaXNpb24gaXNzdWVzLgogICAgICAgIHJpZ2h0UHJlY2VkZW5jZVJlcXVpcmVtZW50ID0gVU5BUlk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgY29udGV4dC5lcnJvcigiRm9yZ290IG9wZXJhdG9yOiAkb3AiKTsKICAgIH0KCiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24obGVmdCwgbGVmdFByZWNlZGVuY2VSZXF1aXJlbWVudCwKICAgICAgICBuZXdJbkZvckluaXQ6IGluRm9ySW5pdCwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogYXRTdGF0ZW1lbnRCZWdpbik7CgogICAgaWYgKG9wID09ICJpbiIgfHwgb3AgPT0gImluc3RhbmNlb2YiKSB7CiAgICAgIC8vIFRoZXJlIGFyZSBjYXNlcyB3aGVyZSB0aGUgc3BhY2UgaXMgbm90IHJlcXVpcmVkIGJ1dCB3aXRob3V0IGZ1cnRoZXIKICAgICAgLy8gYW5hbHlzaXMgd2UgY2Fubm90IGtub3cuCiAgICAgIG91dCgiICIsIGlzV2hpdGVzcGFjZTogdHJ1ZSk7CiAgICAgIG91dChvcCk7CiAgICAgIG91dCgiICIsIGlzV2hpdGVzcGFjZTogdHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICBpZiAobGVmdFNwYWNlKSBzcGFjZU91dCgpOwogICAgICBvdXQob3ApOwogICAgICBzcGFjZU91dCgpOwogICAgfQogICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKHJpZ2h0LCByaWdodFByZWNlZGVuY2VSZXF1aXJlbWVudCwKICAgICAgICBuZXdJbkZvckluaXQ6IGluRm9ySW5pdCwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFByZWZpeChQcmVmaXggdW5hcnkpIHsKICAgIFN0cmluZyBvcCA9IHVuYXJ5Lm9wOwogICAgc3dpdGNoIChvcCkgewogICAgICBjYXNlICJkZWxldGUiOgogICAgICBjYXNlICJ2b2lkIjoKICAgICAgY2FzZSAidHlwZW9mIjoKICAgICAgICAvLyBUaGVyZSBhcmUgY2FzZXMgd2hlcmUgdGhlIHNwYWNlIGlzIG5vdCByZXF1aXJlZCBidXQgd2l0aG91dCBmdXJ0aGVyCiAgICAgICAgLy8gYW5hbHlzaXMgd2UgY2Fubm90IGtub3cuCiAgICAgICAgb3V0KG9wKTsKICAgICAgICBvdXQoIiAiLCBpc1doaXRlc3BhY2U6IHRydWUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICIrIjoKICAgICAgY2FzZSAiKysiOgogICAgICAgIGlmIChsYXN0Q2hhckNvZGUgPT0gY2hhckNvZGVzLiRQTFVTKSBvdXQoIiAiLCBpc1doaXRlc3BhY2U6IHRydWUpOwogICAgICAgIG91dChvcCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIi0iOgogICAgICBjYXNlICItLSI6CiAgICAgICAgaWYgKGxhc3RDaGFyQ29kZSA9PSBjaGFyQ29kZXMuJE1JTlVTKSBvdXQoIiAiLCBpc1doaXRlc3BhY2U6IHRydWUpOwogICAgICAgIG91dChvcCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgb3V0KG9wKTsKICAgIH0KICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbih1bmFyeS5hcmd1bWVudCwgVU5BUlksCiAgICAgICAgbmV3SW5Gb3JJbml0OiBpbkZvckluaXQsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQb3N0Zml4KFBvc3RmaXggcG9zdGZpeCkgewogICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKHBvc3RmaXguYXJndW1lbnQsIENBTEwsCiAgICAgICAgbmV3SW5Gb3JJbml0OiBpbkZvckluaXQsIG5ld0F0U3RhdGVtZW50QmVnaW46IGF0U3RhdGVtZW50QmVnaW4pOwogICAgb3V0KHBvc3RmaXgub3ApOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFZhcmlhYmxlVXNlKFZhcmlhYmxlVXNlIHJlZikgewogICAgb3V0KGxvY2FsTmFtZXIuZ2V0TmFtZShyZWYubmFtZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFRoaXMoVGhpcyBub2RlKSB7CiAgICBvdXQoInRoaXMiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24gZGVjbCkgewogICAgb3V0KGxvY2FsTmFtZXIuZ2V0TmFtZShkZWNsLm5hbWUpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQYXJhbWV0ZXIoUGFyYW1ldGVyIHBhcmFtKSB7CiAgICBvdXQobG9jYWxOYW1lci5nZXROYW1lKHBhcmFtLm5hbWUpKTsKICB9CgogIGJvb2wgaXNEaWdpdChpbnQgY2hhckNvZGUpIHsKICAgIHJldHVybiBjaGFyQ29kZXMuJDAgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gY2hhckNvZGVzLiQ5OwogIH0KCiAgYm9vbCBpc1ZhbGlkSmF2YVNjcmlwdElkKFN0cmluZyBmaWVsZCkgewogICAgaWYgKGZpZWxkLmxlbmd0aCA8IDMpIHJldHVybiBmYWxzZTsKICAgIC8vIElnbm9yZSB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3RyaW5nLWRlbGltaXRlci4KICAgIGZvciAoaW50IGkgPSAxOyBpIDwgZmllbGQubGVuZ3RoIC0gMTsgaSsrKSB7CiAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiBhbGxvdyBtb3JlIGNoYXJhY3RlcnMuCiAgICAgIGludCBjaGFyQ29kZSA9IGZpZWxkLmNvZGVVbml0QXQoaSk7CiAgICAgIGlmICghKGNoYXJDb2Rlcy4kYSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBjaGFyQ29kZXMuJHogfHwKICAgICAgICAgIGNoYXJDb2Rlcy4kQSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBjaGFyQ29kZXMuJFogfHwKICAgICAgICAgIGNoYXJDb2RlID09IGNoYXJDb2Rlcy4kJCB8fAogICAgICAgICAgY2hhckNvZGUgPT0gY2hhckNvZGVzLiRfIHx8CiAgICAgICAgICBpICE9IDEgJiYgaXNEaWdpdChjaGFyQ29kZSkpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICAvLyBUT0RPKGZsb2l0c2NoKTogbm9ybWFsbHkgd2Ugc2hvdWxkIGFsc28gY2hlY2sgdGhhdCB0aGUgZmllbGQgaXMgbm90IGEKICAgIC8vIHJlc2VydmVkIHdvcmQuICBXZSBkb24ndCBnZW5lcmF0ZSBmaWVsZHMgd2l0aCByZXNlcnZlZCB3b3JkIG5hbWVzIGV4Y2VwdAogICAgLy8gZm9yICdzdXBlcicuCiAgICBpZiAoZmllbGQgPT0gJyJzdXBlciInKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoZmllbGQgPT0gJyJjYXRjaCInKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBY2Nlc3MoUHJvcGVydHlBY2Nlc3MgYWNjZXNzKSB7CiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24oYWNjZXNzLnJlY2VpdmVyLCBDQUxMLAogICAgICAgIG5ld0luRm9ySW5pdDogaW5Gb3JJbml0LCBuZXdBdFN0YXRlbWVudEJlZ2luOiBhdFN0YXRlbWVudEJlZ2luKTsKICAgIE5vZGUgc2VsZWN0b3IgPSB1bmRlZmVyKGFjY2Vzcy5zZWxlY3Rvcik7CiAgICBpZiAoc2VsZWN0b3IgaXMgTGl0ZXJhbFN0cmluZykgewogICAgICBTdHJpbmcgZmllbGRXaXRoUXVvdGVzID0gc2VsZWN0b3IudmFsdWU7CiAgICAgIGlmIChpc1ZhbGlkSmF2YVNjcmlwdElkKGZpZWxkV2l0aFF1b3RlcykpIHsKICAgICAgICBpZiAoYWNjZXNzLnJlY2VpdmVyIGlzIExpdGVyYWxOdW1iZXIgJiYKICAgICAgICAgICAgbGFzdENoYXJDb2RlICE9IGNoYXJDb2Rlcy4kQ0xPU0VfUEFSRU4pIHsKICAgICAgICAgIG91dCgiICIsIGlzV2hpdGVzcGFjZTogdHJ1ZSk7CiAgICAgICAgfQogICAgICAgIG91dCgiLiIpOwogICAgICAgIHN0YXJ0Tm9kZShhY2Nlc3Muc2VsZWN0b3IpOwogICAgICAgIG91dChmaWVsZFdpdGhRdW90ZXMuc3Vic3RyaW5nKDEsIGZpZWxkV2l0aFF1b3Rlcy5sZW5ndGggLSAxKSk7CiAgICAgICAgZW5kTm9kZShhY2Nlc3Muc2VsZWN0b3IpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfSBlbHNlIGlmIChzZWxlY3RvciBpcyBOYW1lKSB7CiAgICAgIE5vZGUgcmVjZWl2ZXIgPSB1bmRlZmVyKGFjY2Vzcy5yZWNlaXZlcik7CiAgICAgIGlmIChyZWNlaXZlciBpcyBMaXRlcmFsTnVtYmVyICYmIGxhc3RDaGFyQ29kZSAhPSBjaGFyQ29kZXMuJENMT1NFX1BBUkVOKSB7CiAgICAgICAgb3V0KCIgIiwgaXNXaGl0ZXNwYWNlOiB0cnVlKTsKICAgICAgfQogICAgICBvdXQoIi4iKTsKICAgICAgc3RhcnROb2RlKGFjY2Vzcy5zZWxlY3Rvcik7CiAgICAgIHNlbGVjdG9yLmFjY2VwdCh0aGlzKTsKICAgICAgZW5kTm9kZShhY2Nlc3Muc2VsZWN0b3IpOwogICAgICByZXR1cm47CiAgICB9CiAgICBvdXQoIlsiKTsKICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihhY2Nlc3Muc2VsZWN0b3IsIEVYUFJFU1NJT04sCiAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgb3V0KCJdIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TmFtZWRGdW5jdGlvbihOYW1lZEZ1bmN0aW9uIG5hbWVkRnVuY3Rpb24pIHsKICAgIFZhckNvbGxlY3RvciB2YXJzID0gbmV3IFZhckNvbGxlY3RvcigpOwogICAgdmFycy52aXNpdE5hbWVkRnVuY3Rpb24obmFtZWRGdW5jdGlvbik7CiAgICBzdGFydE5vZGUobmFtZWRGdW5jdGlvbi5mdW5jdGlvbik7CiAgICBpbnQgY2xvc2luZ1Bvc2l0aW9uID0gY3VycmVudE5vZGUuY2xvc2luZ1Bvc2l0aW9uID0KICAgICAgICBmdW5jdGlvbk91dChuYW1lZEZ1bmN0aW9uLmZ1bmN0aW9uLCBuYW1lZEZ1bmN0aW9uLm5hbWUsIHZhcnMpOwogICAgZW5kTm9kZShuYW1lZEZ1bmN0aW9uLmZ1bmN0aW9uKTsKICAgIC8vIFVzZSBjbG9zaW5nIHBvc2l0aW9uIG9mIGBuYW1lZEZ1bmN0aW9uLmZ1bmN0aW9uYCBhcyB0aGUgY2xvc2luZyBwb3NpdGlvbgogICAgLy8gb2YgdGhlIG5hbWVkIGZ1bmN0aW9uIGl0c2VsZi4KICAgIGN1cnJlbnROb2RlLmNsb3NpbmdQb3NpdGlvbiA9IGNsb3NpbmdQb3NpdGlvbjsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGdW4oRnVuIGZ1bikgewogICAgVmFyQ29sbGVjdG9yIHZhcnMgPSBuZXcgVmFyQ29sbGVjdG9yKCk7CiAgICB2YXJzLnZpc2l0RnVuKGZ1bik7CiAgICBjdXJyZW50Tm9kZS5jbG9zaW5nUG9zaXRpb24gPSBmdW5jdGlvbk91dChmdW4sIG51bGwsIHZhcnMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXREZWZlcnJlZEV4cHJlc3Npb24oRGVmZXJyZWRFeHByZXNzaW9uIG5vZGUpIHsKICAgIC8vIENvbnRpbnVlIHByaW50aW5nIHdpdGggdGhlIGV4cHJlc3Npb24gdmFsdWUuCiAgICBhc3NlcnQobm9kZS5wcmVjZWRlbmNlTGV2ZWwgPT0gbm9kZS52YWx1ZS5wcmVjZWRlbmNlTGV2ZWwpOwogICAgbm9kZS52YWx1ZS5hY2NlcHQodGhpcyk7CiAgfQoKICBvdXRwdXROdW1iZXJXaXRoUmVxdWlyZWRXaGl0ZXNwYWNlKFN0cmluZyBudW1iZXIpIHsKICAgIGludCBjaGFyQ29kZSA9IG51bWJlci5jb2RlVW5pdEF0KDApOwogICAgaWYgKGNoYXJDb2RlID09IGNoYXJDb2Rlcy4kTUlOVVMgJiYgbGFzdENoYXJDb2RlID09IGNoYXJDb2Rlcy4kTUlOVVMpIHsKICAgICAgb3V0KCIgIiwgaXNXaGl0ZXNwYWNlOiB0cnVlKTsKICAgIH0KICAgIG91dChudW1iZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXREZWZlcnJlZE51bWJlcihEZWZlcnJlZE51bWJlciBub2RlKSB7CiAgICBvdXRwdXROdW1iZXJXaXRoUmVxdWlyZWRXaGl0ZXNwYWNlKCIke25vZGUudmFsdWV9Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdERlZmVycmVkU3RyaW5nKERlZmVycmVkU3RyaW5nIG5vZGUpIHsKICAgIG91dChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0TGl0ZXJhbEJvb2woTGl0ZXJhbEJvb2wgbm9kZSkgewogICAgb3V0KG5vZGUudmFsdWUgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXRlcmFsU3RyaW5nKExpdGVyYWxTdHJpbmcgbm9kZSkgewogICAgb3V0KG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKFN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSkgewogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXROYW1lKE5hbWUgbm9kZSkgewogICAgb3V0KG9wdGlvbnMucmVuYW1lckZvck5hbWVzKG5vZGUpKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0UGFyZW50aGVzZXMoUGFyZW50aGVzZXMgbm9kZSkgewogICAgb3V0KCIoIik7CiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24obm9kZS5lbmNsb3NlZCwgRVhQUkVTU0lPTiwKICAgICAgICBuZXdJbkZvckluaXQ6IGZhbHNlLCBuZXdBdFN0YXRlbWVudEJlZ2luOiBmYWxzZSk7CiAgICBvdXQoIikiKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0TGl0ZXJhbE51bWJlcihMaXRlcmFsTnVtYmVyIG5vZGUpIHsKICAgIG91dHB1dE51bWJlcldpdGhSZXF1aXJlZFdoaXRlc3BhY2Uobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGl0ZXJhbE51bGwoTGl0ZXJhbE51bGwgbm9kZSkgewogICAgb3V0KCJudWxsIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QXJyYXlJbml0aWFsaXplcihBcnJheUluaXRpYWxpemVyIG5vZGUpIHsKICAgIG91dCgiWyIpOwogICAgTGlzdDxFeHByZXNzaW9uPiBlbGVtZW50cyA9IG5vZGUuZWxlbWVudHM7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIEV4cHJlc3Npb24gZWxlbWVudCA9IGVsZW1lbnRzW2ldOwogICAgICBpZiAoZWxlbWVudCBpcyBBcnJheUhvbGUpIHsKICAgICAgICAvLyBOb3RlIHRoYXQgYXJyYXkgaG9sZXMgbXVzdCBoYXZlIGEgdHJhaWxpbmcgIiwiIGV2ZW4gaWYgdGhleSBhcmUKICAgICAgICAvLyBpbiBsYXN0IHBvc2l0aW9uLiBPdGhlcndpc2UgYFssXWAgKGhhdmluZyBsZW5ndGggMSkgd291bGQgYmVjb21lCiAgICAgICAgLy8gZXF1YWwgdG8gYFtdYCAodGhlIGVtcHR5IGFycmF5KQogICAgICAgIC8vIGFuZCBbMSwsXSAoYXJyYXkgd2l0aCAxIGFuZCBhIGhvbGUpIHdvdWxkIGJlY29tZSBbMSxdID0gWzFdLgogICAgICAgIHN0YXJ0Tm9kZShlbGVtZW50KTsKICAgICAgICBvdXQoIiwiKTsKICAgICAgICBlbmROb2RlKGVsZW1lbnQpOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChpICE9IDApIHNwYWNlT3V0KCk7CiAgICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihlbGVtZW50LCBBU1NJR05NRU5ULAogICAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgICAvLyBXZSBjYW4gc2tpcCB0aGUgdHJhaWxpbmcgIiwiIGZvciB0aGUgbGFzdCBlbGVtZW50IChzaW5jZSBpdCdzIG5vdAogICAgICAvLyBhbiBhcnJheSBob2xlKS4KICAgICAgaWYgKGkgIT0gZWxlbWVudHMubGVuZ3RoIC0gMSkgb3V0KCIsIik7CiAgICB9CiAgICBvdXQoIl0iKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBcnJheUhvbGUoQXJyYXlIb2xlIG5vZGUpIHsKICAgIGNvbnRleHQuZXJyb3IoIlVucmVhY2hhYmxlIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0T2JqZWN0SW5pdGlhbGl6ZXIoT2JqZWN0SW5pdGlhbGl6ZXIgbm9kZSkgewogICAgLy8gUHJpbnQgYWxsIHRoZSBwcm9wZXJ0aWVzIG9uIG9uZSBsaW5lIHVudGlsIHdlIHNlZSBhIGZ1bmN0aW9uLXZhbHVlZAogICAgLy8gcHJvcGVydHkuICBJZGVhbGx5LCB3ZSB3b3VsZCB1c2UgYSBwcm9wZXIgcHJldHR5LXByaW50ZXIgdG8gbWFrZSB0aGUKICAgIC8vIGRlY2lzaW9uIGJhc2VkIG9uIGxheW91dC4KICAgIGJvb2wgZXhpdE9uZUxpbmVyTW9kZShFeHByZXNzaW9uIHZhbHVlKSB7CiAgICAgIHJldHVybiB2YWx1ZSBpcyBGdW4gfHwKICAgICAgICAgIHZhbHVlIGlzIEFycmF5SW5pdGlhbGl6ZXIgJiYgdmFsdWUuZWxlbWVudHMuYW55KChlKSA9PiBlIGlzIEZ1bik7CiAgICB9CgogICAgYm9vbCBpc09uZUxpbmVyID0gbm9kZS5pc09uZUxpbmVyIHx8IHNob3VsZENvbXByZXNzT3V0cHV0OwogICAgTGlzdDxQcm9wZXJ0eT4gcHJvcGVydGllcyA9IG5vZGUucHJvcGVydGllczsKICAgIG91dCgieyIpOwogICAgaW5kZW50TW9yZSgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIE5vZGUgdmFsdWUgPSBwcm9wZXJ0aWVzW2ldLnZhbHVlOwogICAgICBpZiAoaXNPbmVMaW5lciAmJiBleGl0T25lTGluZXJNb2RlKHZhbHVlKSkgaXNPbmVMaW5lciA9IGZhbHNlOwogICAgICBpZiAoaSAhPSAwKSB7CiAgICAgICAgb3V0KCIsIik7CiAgICAgICAgaWYgKGlzT25lTGluZXIpIHNwYWNlT3V0KCk7CiAgICAgIH0KICAgICAgaWYgKCFpc09uZUxpbmVyKSB7CiAgICAgICAgZm9yY2VMaW5lKCk7CiAgICAgICAgaW5kZW50KCk7CiAgICAgIH0KICAgICAgdmlzaXQocHJvcGVydGllc1tpXSk7CiAgICB9CiAgICBpbmRlbnRMZXNzKCk7CiAgICBpZiAoIWlzT25lTGluZXIgJiYgIXByb3BlcnRpZXMuaXNFbXB0eSkgewogICAgICBsaW5lT3V0KCk7CiAgICAgIGluZGVudCgpOwogICAgfQogICAgb3V0KCJ9Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UHJvcGVydHkoUHJvcGVydHkgbm9kZSkgewogICAgc3RhcnROb2RlKG5vZGUubmFtZSk7CiAgICBOb2RlIG5hbWUgPSB1bmRlZmVyKG5vZGUubmFtZSk7CiAgICBpZiAobmFtZSBpcyBMaXRlcmFsU3RyaW5nKSB7CiAgICAgIFN0cmluZyB0ZXh0ID0gbmFtZS52YWx1ZTsKICAgICAgaWYgKGlzVmFsaWRKYXZhU2NyaXB0SWQodGV4dCkpIHsKICAgICAgICBvdXQodGV4dC5zdWJzdHJpbmcoMSwgdGV4dC5sZW5ndGggLSAxKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb3V0KHRleHQpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKG5hbWUgaXMgTmFtZSkgewogICAgICBub2RlLm5hbWUuYWNjZXB0KHRoaXMpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KG5hbWUgaXMgTGl0ZXJhbE51bWJlcik7CiAgICAgIExpdGVyYWxOdW1iZXIgbmFtZU51bWJlciA9IG5vZGUubmFtZTsKICAgICAgb3V0KG5hbWVOdW1iZXIudmFsdWUpOwogICAgfQogICAgZW5kTm9kZShub2RlLm5hbWUpOwogICAgb3V0KCI6Iik7CiAgICBzcGFjZU91dCgpOwogICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKG5vZGUudmFsdWUsIEFTU0lHTk1FTlQsCiAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFJlZ0V4cExpdGVyYWwoUmVnRXhwTGl0ZXJhbCBub2RlKSB7CiAgICBvdXQobm9kZS5wYXR0ZXJuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXRlcmFsRXhwcmVzc2lvbihMaXRlcmFsRXhwcmVzc2lvbiBub2RlKSB7CiAgICBTdHJpbmcgdGVtcGxhdGUgPSBub2RlLnRlbXBsYXRlOwogICAgTGlzdDxFeHByZXNzaW9uPiBpbnB1dHMgPSBub2RlLmlucHV0czsKCiAgICBMaXN0PFN0cmluZz4gcGFydHMgPSB0ZW1wbGF0ZS5zcGxpdCgnIycpOwogICAgaW50IGlucHV0c0xlbmd0aCA9IGlucHV0cyA9PSBudWxsID8gMCA6IGlucHV0cy5sZW5ndGg7CiAgICBpZiAocGFydHMubGVuZ3RoICE9IGlucHV0c0xlbmd0aCArIDEpIHsKICAgICAgY29udGV4dC5lcnJvcignV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgSlM6ICR0ZW1wbGF0ZScpOwogICAgfQogICAgLy8gQ29kZSB0aGF0IHVzZXMgSlMgbXVzdCB0YWtlIGNhcmUgb2Ygb3BlcmF0b3IgcHJlY2VkZW5jZXMsIGFuZAogICAgLy8gcHV0IHBhcmVudGhlc2lzIGlmIG5lZWRlZC4KICAgIG91dChwYXJ0c1swXSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0c0xlbmd0aDsgaSsrKSB7CiAgICAgIHZpc2l0KGlucHV0c1tpXSk7CiAgICAgIG91dChwYXJ0c1tpICsgMV0pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpdGVyYWxTdGF0ZW1lbnQoTGl0ZXJhbFN0YXRlbWVudCBub2RlKSB7CiAgICBvdXRMbihub2RlLmNvZGUpOwogIH0KCiAgdm9pZCB2aXNpdEludGVycG9sYXRlZE5vZGUoSW50ZXJwb2xhdGVkTm9kZSBub2RlKSB7CiAgICBvdXQoJyMke25vZGUubmFtZU9yUG9zaXRpb259Jyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50ZXJwb2xhdGVkRXhwcmVzc2lvbihJbnRlcnBvbGF0ZWRFeHByZXNzaW9uIG5vZGUpID0+CiAgICAgIHZpc2l0SW50ZXJwb2xhdGVkTm9kZShub2RlKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludGVycG9sYXRlZExpdGVyYWwoSW50ZXJwb2xhdGVkTGl0ZXJhbCBub2RlKSA9PgogICAgICB2aXNpdEludGVycG9sYXRlZE5vZGUobm9kZSk7CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRlcnBvbGF0ZWRQYXJhbWV0ZXIoSW50ZXJwb2xhdGVkUGFyYW1ldGVyIG5vZGUpID0+CiAgICAgIHZpc2l0SW50ZXJwb2xhdGVkTm9kZShub2RlKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludGVycG9sYXRlZFNlbGVjdG9yKEludGVycG9sYXRlZFNlbGVjdG9yIG5vZGUpID0+CiAgICAgIHZpc2l0SW50ZXJwb2xhdGVkTm9kZShub2RlKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludGVycG9sYXRlZFN0YXRlbWVudChJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQgbm9kZSkgewogICAgb3V0TG4oJyMke25vZGUubmFtZU9yUG9zaXRpb259Jyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50ZXJwb2xhdGVkRGVjbGFyYXRpb24oSW50ZXJwb2xhdGVkRGVjbGFyYXRpb24gbm9kZSkgewogICAgdmlzaXRJbnRlcnBvbGF0ZWROb2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbW1lbnQoQ29tbWVudCBub2RlKSB7CiAgICBpZiAoc2hvdWxkQ29tcHJlc3NPdXRwdXQpIHJldHVybjsKICAgIFN0cmluZyBjb21tZW50ID0gbm9kZS5jb21tZW50LnRyaW0oKTsKICAgIGlmIChjb21tZW50LmlzRW1wdHkpIHJldHVybjsKICAgIGZvciAodmFyIGxpbmUgaW4gY29tbWVudC5zcGxpdCgnXG4nKSkgewogICAgICBpZiAoY29tbWVudC5zdGFydHNXaXRoKCcvLycpKSB7CiAgICAgICAgb3V0SW5kZW50TG4obGluZS50cmltKCkpOwogICAgICB9IGVsc2UgewogICAgICAgIG91dEluZGVudExuKCcvLyAke2xpbmUudHJpbSgpfScpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QXdhaXQoQXdhaXQgbm9kZSkgewogICAgb3V0KCJhd2FpdCAiKTsKICAgIHZpc2l0KG5vZGUuZXhwcmVzc2lvbik7CiAgfQp9CgpjbGFzcyBPcmRlcmVkU2V0PFQ+IHsKICBmaW5hbCBTZXQ8VD4gc2V0OwogIGZpbmFsIExpc3Q8VD4gbGlzdDsKCiAgT3JkZXJlZFNldCgpCiAgICAgIDogc2V0ID0gbmV3IFNldDxUPigpLAogICAgICAgIGxpc3QgPSA8VD5bXTsKCiAgdm9pZCBhZGQoVCB4KSB7CiAgICBpZiAoc2V0LmFkZCh4KSkgewogICAgICAvLyBbU2V0LmFkZF0gcmV0dXJucyBgdHJ1ZWAgaWYgJ3gnIHdhcyBhZGRlZC4KICAgICAgbGlzdC5hZGQoeCk7CiAgICB9CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBmdW4oVCB4KSkgewogICAgbGlzdC5mb3JFYWNoKGZ1bik7CiAgfQp9CgovLyBDb2xsZWN0cyBhbGwgdGhlIHZhciBkZWNsYXJhdGlvbnMgaW4gdGhlIGZ1bmN0aW9uLiAgV2UgbmVlZCB0byBkbyB0aGlzIGluIGEKLy8gc2VwYXJhdGUgcGFzcyBiZWNhdXNlIEpTIHZhcnMgYXJlIGxpZnRlZCB0byB0aGUgdG9wIG9mIHRoZSBmdW5jdGlvbi4KY2xhc3MgVmFyQ29sbGVjdG9yIGV4dGVuZHMgQmFzZVZpc2l0b3IgewogIGJvb2wgbmVzdGVkOwogIGJvb2wgZW5hYmxlUmVuYW1pbmcgPSB0cnVlOwogIGZpbmFsIE9yZGVyZWRTZXQ8U3RyaW5nPiB2YXJzOwogIGZpbmFsIE9yZGVyZWRTZXQ8U3RyaW5nPiBwYXJhbXM7CgogIHN0YXRpYyBmaW5hbCBTdHJpbmcgZGlzYWJsZVZhcmlhYmxlTWluaWZpY2F0aW9uUGF0dGVybiA9ICI6Om5vcmVuYW1pbmc6OiI7CiAgc3RhdGljIGZpbmFsIFN0cmluZyBlbmFibGVWYXJpYWJsZU1pbmlmaWNhdGlvblBhdHRlcm4gPSAiOjpkb3JlbmFtaW5nOjoiOwoKICBWYXJDb2xsZWN0b3IoKQogICAgICA6IG5lc3RlZCA9IGZhbHNlLAogICAgICAgIHZhcnMgPSBuZXcgT3JkZXJlZFNldDxTdHJpbmc+KCksCiAgICAgICAgcGFyYW1zID0gbmV3IE9yZGVyZWRTZXQ8U3RyaW5nPigpOwoKICB2b2lkIGZvckVhY2hWYXIodm9pZCBmbihTdHJpbmcgdikpID0+IHZhcnMuZm9yRWFjaChmbik7CiAgdm9pZCBmb3JFYWNoUGFyYW0odm9pZCBmbihTdHJpbmcgcCkpID0+IHBhcmFtcy5mb3JFYWNoKGZuKTsKCiAgdm9pZCBjb2xsZWN0VmFyc0luRnVuY3Rpb24oRnVuIGZ1bikgewogICAgaWYgKCFuZXN0ZWQpIHsKICAgICAgbmVzdGVkID0gdHJ1ZTsKICAgICAgaWYgKGZ1bi5wYXJhbXMgIT0gbnVsbCkgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnVuLnBhcmFtcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgcGFyYW1zLmFkZChmdW4ucGFyYW1zW2ldLm5hbWUpOwogICAgICAgIH0KICAgICAgfQogICAgICB2aXNpdEJsb2NrKGZ1bi5ib2R5KTsKICAgICAgbmVzdGVkID0gZmFsc2U7CiAgICB9CiAgfQoKICB2b2lkIHZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uIGRlY2xhcmF0aW9uKSB7CiAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgYm90aGVyIGNvbGxlY3RpbmcgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLgogICAgY29sbGVjdFZhcnNJbkZ1bmN0aW9uKGRlY2xhcmF0aW9uLmZ1bmN0aW9uKTsKICB9CgogIHZvaWQgdmlzaXROYW1lZEZ1bmN0aW9uKE5hbWVkRnVuY3Rpb24gbmFtZWRGdW5jdGlvbikgewogICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IGJvdGhlciBjb2xsZWN0aW5nIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbi4KICAgIGNvbGxlY3RWYXJzSW5GdW5jdGlvbihuYW1lZEZ1bmN0aW9uLmZ1bmN0aW9uKTsKICB9CgogIHZvaWQgdmlzaXRGdW4oRnVuIGZ1bikgewogICAgY29sbGVjdFZhcnNJbkZ1bmN0aW9uKGZ1bik7CiAgfQoKICB2b2lkIHZpc2l0VGhpcyhUaGlzIG5vZGUpIHt9CgogIHZvaWQgdmlzaXRDb21tZW50KENvbW1lbnQgbm9kZSkgewogICAgaWYgKG5vZGUuY29tbWVudC5jb250YWlucyhkaXNhYmxlVmFyaWFibGVNaW5pZmljYXRpb25QYXR0ZXJuKSkgewogICAgICBlbmFibGVSZW5hbWluZyA9IGZhbHNlOwogICAgfSBlbHNlIGlmIChub2RlLmNvbW1lbnQuY29udGFpbnMoZW5hYmxlVmFyaWFibGVNaW5pZmljYXRpb25QYXR0ZXJuKSkgewogICAgICBlbmFibGVSZW5hbWluZyA9IHRydWU7CiAgICB9CiAgfQoKICB2b2lkIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJpYWJsZURlY2xhcmF0aW9uIGRlY2wpIHsKICAgIGlmIChlbmFibGVSZW5hbWluZyAmJiBkZWNsLmFsbG93UmVuYW1lKSB2YXJzLmFkZChkZWNsLm5hbWUpOwogIH0KfQoKLyoqCiAqIFJldHVybnMgdHJ1ZSwgaWYgdGhlIGdpdmVuIG5vZGUgbXVzdCBiZSB3cmFwcGVkIGludG8gYnJhY2VzIHdoZW4gdXNlZAogKiBhcyB0aGVuLXN0YXRlbWVudCBpbiBhbiBbSWZdIHRoYXQgaGFzIGFuIGVsc2UgYnJhbmNoLgogKi8KY2xhc3MgRGFuZ2xpbmdFbHNlVmlzaXRvciBleHRlbmRzIEJhc2VWaXNpdG9yPGJvb2w+IHsKICBKYXZhU2NyaXB0UHJpbnRpbmdDb250ZXh0IGNvbnRleHQ7CgogIERhbmdsaW5nRWxzZVZpc2l0b3IodGhpcy5jb250ZXh0KTsKCiAgYm9vbCB2aXNpdFByb2dyYW0oUHJvZ3JhbSBub2RlKSA9PiBmYWxzZTsKCiAgYm9vbCB2aXNpdE5vZGUoTm9kZSBub2RlKSB7CiAgICBjb250ZXh0LmVycm9yKCJGb3Jnb3Qgbm9kZTogJG5vZGUiKTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgYm9vbCB2aXNpdEJsb2NrKEJsb2NrIG5vZGUpID0+IGZhbHNlOwogIGJvb2wgdmlzaXRFeHByZXNzaW9uU3RhdGVtZW50KEV4cHJlc3Npb25TdGF0ZW1lbnQgbm9kZSkgPT4gZmFsc2U7CiAgYm9vbCB2aXNpdEVtcHR5U3RhdGVtZW50KEVtcHR5U3RhdGVtZW50IG5vZGUpID0+IGZhbHNlOwogIGJvb2wgdmlzaXRJZihJZiBub2RlKSB7CiAgICBpZiAoIW5vZGUuaGFzRWxzZSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gbm9kZS5vdGhlcndpc2UuYWNjZXB0KHRoaXMpOwogIH0KCiAgYm9vbCB2aXNpdEZvcihGb3Igbm9kZSkgPT4gbm9kZS5ib2R5LmFjY2VwdCh0aGlzKTsKICBib29sIHZpc2l0Rm9ySW4oRm9ySW4gbm9kZSkgPT4gbm9kZS5ib2R5LmFjY2VwdCh0aGlzKTsKICBib29sIHZpc2l0V2hpbGUoV2hpbGUgbm9kZSkgPT4gbm9kZS5ib2R5LmFjY2VwdCh0aGlzKTsKICBib29sIHZpc2l0RG8oRG8gbm9kZSkgPT4gZmFsc2U7CiAgYm9vbCB2aXNpdENvbnRpbnVlKENvbnRpbnVlIG5vZGUpID0+IGZhbHNlOwogIGJvb2wgdmlzaXRCcmVhayhCcmVhayBub2RlKSA9PiBmYWxzZTsKICBib29sIHZpc2l0UmV0dXJuKFJldHVybiBub2RlKSA9PiBmYWxzZTsKICBib29sIHZpc2l0VGhyb3coVGhyb3cgbm9kZSkgPT4gZmFsc2U7CiAgYm9vbCB2aXNpdFRyeShUcnkgbm9kZSkgewogICAgaWYgKG5vZGUuZmluYWxseVBhcnQgIT0gbnVsbCkgewogICAgICByZXR1cm4gbm9kZS5maW5hbGx5UGFydC5hY2NlcHQodGhpcyk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbm9kZS5jYXRjaFBhcnQuYWNjZXB0KHRoaXMpOwogICAgfQogIH0KCiAgYm9vbCB2aXNpdENhdGNoKENhdGNoIG5vZGUpID0+IG5vZGUuYm9keS5hY2NlcHQodGhpcyk7CiAgYm9vbCB2aXNpdFN3aXRjaChTd2l0Y2ggbm9kZSkgPT4gZmFsc2U7CiAgYm9vbCB2aXNpdENhc2UoQ2FzZSBub2RlKSA9PiBmYWxzZTsKICBib29sIHZpc2l0RGVmYXVsdChEZWZhdWx0IG5vZGUpID0+IGZhbHNlOwogIGJvb2wgdmlzaXRGdW5jdGlvbkRlY2xhcmF0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24gbm9kZSkgPT4gZmFsc2U7CiAgYm9vbCB2aXNpdExhYmVsZWRTdGF0ZW1lbnQoTGFiZWxlZFN0YXRlbWVudCBub2RlKSA9PiBub2RlLmJvZHkuYWNjZXB0KHRoaXMpOwogIGJvb2wgdmlzaXRMaXRlcmFsU3RhdGVtZW50KExpdGVyYWxTdGF0ZW1lbnQgbm9kZSkgPT4gdHJ1ZTsKCiAgYm9vbCB2aXNpdEV4cHJlc3Npb24oRXhwcmVzc2lvbiBub2RlKSA9PiBmYWxzZTsKfQoKYWJzdHJhY3QgY2xhc3MgTG9jYWxOYW1lciB7CiAgU3RyaW5nIGdldE5hbWUoU3RyaW5nIG9sZE5hbWUpOwogIFN0cmluZyBkZWNsYXJlVmFyaWFibGUoU3RyaW5nIG9sZE5hbWUpOwogIFN0cmluZyBkZWNsYXJlUGFyYW1ldGVyKFN0cmluZyBvbGROYW1lKTsKICB2b2lkIGVudGVyU2NvcGUoVmFyQ29sbGVjdG9yIHZhcnMpOwogIHZvaWQgbGVhdmVTY29wZSgpOwp9CgpjbGFzcyBJZGVudGl0eU5hbWVyIGltcGxlbWVudHMgTG9jYWxOYW1lciB7CiAgU3RyaW5nIGdldE5hbWUoU3RyaW5nIG9sZE5hbWUpID0+IG9sZE5hbWU7CiAgU3RyaW5nIGRlY2xhcmVWYXJpYWJsZShTdHJpbmcgb2xkTmFtZSkgPT4gb2xkTmFtZTsKICBTdHJpbmcgZGVjbGFyZVBhcmFtZXRlcihTdHJpbmcgb2xkTmFtZSkgPT4gb2xkTmFtZTsKICB2b2lkIGVudGVyU2NvcGUoVmFyQ29sbGVjdG9yIHZhcnMpIHt9CiAgdm9pZCBsZWF2ZVNjb3BlKCkge30KfQoKY2xhc3MgTWluaWZ5UmVuYW1lciBpbXBsZW1lbnRzIExvY2FsTmFtZXIgewogIGZpbmFsIExpc3Q8TWFwPFN0cmluZywgU3RyaW5nPj4gbWFwcyA9IFtdOwogIGZpbmFsIExpc3Q8aW50PiBwYXJhbWV0ZXJOdW1iZXJTdGFjayA9IFtdOwogIGZpbmFsIExpc3Q8aW50PiB2YXJpYWJsZU51bWJlclN0YWNrID0gW107CiAgaW50IHBhcmFtZXRlck51bWJlciA9IDA7CiAgaW50IHZhcmlhYmxlTnVtYmVyID0gMDsKCiAgTWluaWZ5UmVuYW1lcigpOwoKICB2b2lkIGVudGVyU2NvcGUoVmFyQ29sbGVjdG9yIHZhcnMpIHsKICAgIG1hcHMuYWRkKG5ldyBNYXA8U3RyaW5nLCBTdHJpbmc+KCkpOwogICAgdmFyaWFibGVOdW1iZXJTdGFjay5hZGQodmFyaWFibGVOdW1iZXIpOwogICAgcGFyYW1ldGVyTnVtYmVyU3RhY2suYWRkKHBhcmFtZXRlck51bWJlcik7CiAgICB2YXJzLmZvckVhY2hWYXIoZGVjbGFyZVZhcmlhYmxlKTsKICAgIHZhcnMuZm9yRWFjaFBhcmFtKGRlY2xhcmVQYXJhbWV0ZXIpOwogIH0KCiAgdm9pZCBsZWF2ZVNjb3BlKCkgewogICAgbWFwcy5yZW1vdmVMYXN0KCk7CiAgICB2YXJpYWJsZU51bWJlciA9IHZhcmlhYmxlTnVtYmVyU3RhY2sucmVtb3ZlTGFzdCgpOwogICAgcGFyYW1ldGVyTnVtYmVyID0gcGFyYW1ldGVyTnVtYmVyU3RhY2sucmVtb3ZlTGFzdCgpOwogIH0KCiAgU3RyaW5nIGdldE5hbWUoU3RyaW5nIG9sZE5hbWUpIHsKICAgIC8vIEdvIGZyb20gaW5uZXIgc2NvcGUgdG8gb3V0ZXIgbG9va2luZyBmb3IgbWFwcGluZyBvZiBuYW1lLgogICAgZm9yIChpbnQgaSA9IG1hcHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgdmFyIG1hcCA9IG1hcHNbaV07CiAgICAgIHZhciByZXBsYWNlbWVudCA9IG1hcFtvbGROYW1lXTsKICAgICAgaWYgKHJlcGxhY2VtZW50ICE9IG51bGwpIHJldHVybiByZXBsYWNlbWVudDsKICAgIH0KICAgIHJldHVybiBvbGROYW1lOwogIH0KCiAgc3RhdGljIGNvbnN0IExPV0VSX0NBU0VfTEVUVEVSUyA9IDI2OwogIHN0YXRpYyBjb25zdCBMRVRURVJTID0gTE9XRVJfQ0FTRV9MRVRURVJTOwogIHN0YXRpYyBjb25zdCBESUdJVFMgPSAxMDsKCiAgc3RhdGljIGludCBudGhMZXR0ZXIoaW50IG4pIHsKICAgIHJldHVybiAobiA8IExPV0VSX0NBU0VfTEVUVEVSUykKICAgICAgICA/IGNoYXJDb2Rlcy4kYSArIG4KICAgICAgICA6IGNoYXJDb2Rlcy4kQSArIG4gLSBMT1dFUl9DQVNFX0xFVFRFUlM7CiAgfQoKICAvLyBQYXJhbWV0ZXJzIGdvIGZyb20gYSB0byB6IGFuZCB2YXJpYWJsZXMgZ28gZnJvbSB6IHRvIGEuICBUaGlzIG1ha2VzIGVhY2gKICAvLyBhcmd1bWVudCBsaXN0IGFuZCBlYWNoIHRvcC1vZi1mdW5jdGlvbiB2YXIgZGVjbGFyYXRpb24gbG9vayBzaW1pbGFyIGFuZAogIC8vIGhlbHBzIGd6aXAgY29tcHJlc3MgdGhlIGZpbGUuICBJZiB3ZSBoYXZlIG1vcmUgdGhhbiAyNiBhcmd1bWVudHMgYW5kCiAgLy8gdmFyaWFibGVzIHRoZW4gd2UgbWVldCBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgYWxwaGFiZXQuICBBZnRlcgogIC8vIHRoYXQgd2UgZ2l2ZSB1cCB0cnlpbmcgdG8gYmUgbmljZSB0byB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtIGFuZCBqdXN0CiAgLy8gdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSBmb3IgYXJndW1lbnRzIGFuZCB2YXJpYWJsZXMsIHN0YXJ0aW5nIHdpdGggQSwgYW5kCiAgLy8gbW92aW5nIG9uIHRvIGEwLCBhMSwgZXRjLgogIFN0cmluZyBkZWNsYXJlVmFyaWFibGUoU3RyaW5nIG9sZE5hbWUpIHsKICAgIGlmIChhdm9pZFJlbmFtaW5nKG9sZE5hbWUpKSByZXR1cm4gb2xkTmFtZTsKICAgIHZhciBuZXdOYW1lOwogICAgaWYgKHZhcmlhYmxlTnVtYmVyICsgcGFyYW1ldGVyTnVtYmVyIDwgTE9XRVJfQ0FTRV9MRVRURVJTKSB7CiAgICAgIC8vIFZhcmlhYmxlcyBzdGFydCBmcm9tIHogYW5kIGdvIGJhY2t3YXJkcywgZm9yIGJldHRlciBnemlwYWJpbGl0eS4KICAgICAgbmV3TmFtZSA9IGdldE5hbWVOdW1iZXIob2xkTmFtZSwgTE9XRVJfQ0FTRV9MRVRURVJTIC0gMSAtIHZhcmlhYmxlTnVtYmVyKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIEFmdGVyIDI2IHZhcmlhYmxlcyBhbmQgcGFyYW1ldGVycyB3ZSBhbGxvY2F0ZSB0aGVtIGluIHRoZSBzYW1lIG9yZGVyLgogICAgICBuZXdOYW1lID0gZ2V0TmFtZU51bWJlcihvbGROYW1lLCB2YXJpYWJsZU51bWJlciArIHBhcmFtZXRlck51bWJlcik7CiAgICB9CiAgICB2YXJpYWJsZU51bWJlcisrOwogICAgcmV0dXJuIG5ld05hbWU7CiAgfQoKICBTdHJpbmcgZGVjbGFyZVBhcmFtZXRlcihTdHJpbmcgb2xkTmFtZSkgewogICAgaWYgKGF2b2lkUmVuYW1pbmcob2xkTmFtZSkpIHJldHVybiBvbGROYW1lOwogICAgdmFyIG5ld05hbWU7CiAgICBpZiAodmFyaWFibGVOdW1iZXIgKyBwYXJhbWV0ZXJOdW1iZXIgPCBMT1dFUl9DQVNFX0xFVFRFUlMpIHsKICAgICAgbmV3TmFtZSA9IGdldE5hbWVOdW1iZXIob2xkTmFtZSwgcGFyYW1ldGVyTnVtYmVyKTsKICAgIH0gZWxzZSB7CiAgICAgIG5ld05hbWUgPSBnZXROYW1lTnVtYmVyKG9sZE5hbWUsIHZhcmlhYmxlTnVtYmVyICsgcGFyYW1ldGVyTnVtYmVyKTsKICAgIH0KICAgIHBhcmFtZXRlck51bWJlcisrOwogICAgcmV0dXJuIG5ld05hbWU7CiAgfQoKICBib29sIGF2b2lkUmVuYW1pbmcoU3RyaW5nIG9sZE5hbWUpIHsKICAgIC8vIFZhcmlhYmxlcyBvZiB0aGlzICRmb3JtJCBhcmUgdXNlZCBpbiBwYXR0ZXJuIG1hdGNoaW5nIHRoZSBtZXNzYWdlIG9mIEpTCiAgICAvLyBleGNlcHRpb25zLCBzbyBzaG91bGQgbm90IGJlIHJlbmFtZWQuCiAgICAvLyBUT0RPKHNyYSk6IEludHJvZHVjZSBhIHdheSBmb3IgaW5kaWNhdGluZyBpbiB0aGUgSlMgdGV4dCB3aGljaCB2YXJpYWJsZXMKICAgIC8vIHNob3VsZCBub3QgYmUgcmVuYW1lZC4KICAgIHJldHVybiBvbGROYW1lLnN0YXJ0c1dpdGgocickJykgJiYgb2xkTmFtZS5lbmRzV2l0aChyJyQnKTsKICB9CgogIFN0cmluZyBnZXROYW1lTnVtYmVyKFN0cmluZyBvbGROYW1lLCBpbnQgbikgewogICAgaWYgKG1hcHMuaXNFbXB0eSkgcmV0dXJuIG9sZE5hbWU7CgogICAgU3RyaW5nIG5ld05hbWU7CiAgICBpZiAobiA8IExFVFRFUlMpIHsKICAgICAgLy8gU3RhcnQgbmFtaW5nIHZhcmlhYmxlcyBhLCBiLCBjLCAuLi4sIHosIEEsIEIsIEMsIC4uLiwgWi4KICAgICAgbmV3TmFtZSA9IG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhbbnRoTGV0dGVyKG4pXSk7CiAgICB9IGVsc2UgewogICAgICAvLyBUaGVuIG5hbWUgdmFyaWFibGVzIGEwLCBhMSwgYTIsIC4uLiwgYTksIGIwLCBiMSwgLi4uLCBaOSwgYWEwLCBhYTEsIC4uLgogICAgICAvLyBGb3IgYWxsIGZ1bmN0aW9ucyB3aXRoIGZld2VyIHRoYW4gNTAwIGxvY2FscyB0aGlzIGlzIGp1c3QgYXMgY29tcGFjdAogICAgICAvLyBhcyB1c2luZyBhYSwgYWIsIGV0Yy4gYnV0IGF2b2lkcyBjbGFzaGVzIHdpdGgga2V5d29yZHMuCiAgICAgIG4gLT0gTEVUVEVSUzsKICAgICAgaW50IGRpZ2l0ID0gbiAlIERJR0lUUzsKICAgICAgbiB+Lz0gRElHSVRTOwogICAgICBpbnQgYWxwaGFDaGFycyA9IDE7CiAgICAgIGludCBuYW1lU3BhY2VTaXplID0gTEVUVEVSUzsKICAgICAgLy8gRmluZCBvdXQgd2hldGhlciB3ZSBzaG91bGQgdXNlIHRoZSAxLWNoYXJhY3RlciBuYW1lc3BhY2UgKHNpemUgNTIpLCB0aGUKICAgICAgLy8gMi1jaGFyYWN0ZXIgbmFtZXNwYWNlIChzaXplIDUyKjUyKSwgZXRjLgogICAgICB3aGlsZSAobiA+PSBuYW1lU3BhY2VTaXplKSB7CiAgICAgICAgbiAtPSBuYW1lU3BhY2VTaXplOwogICAgICAgIGFscGhhQ2hhcnMrKzsKICAgICAgICBuYW1lU3BhY2VTaXplICo9IExFVFRFUlM7CiAgICAgIH0KICAgICAgdmFyIGNvZGVzID0gPGludD5bXTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbHBoYUNoYXJzOyBpKyspIHsKICAgICAgICBuYW1lU3BhY2VTaXplIH4vPSBMRVRURVJTOwogICAgICAgIGNvZGVzLmFkZChudGhMZXR0ZXIoKG4gfi8gbmFtZVNwYWNlU2l6ZSkgJSBMRVRURVJTKSk7CiAgICAgIH0KICAgICAgY29kZXMuYWRkKGNoYXJDb2Rlcy4kMCArIGRpZ2l0KTsKICAgICAgbmV3TmFtZSA9IG5ldyBTdHJpbmcuZnJvbUNoYXJDb2Rlcyhjb2Rlcyk7CiAgICB9CiAgICBhc3NlcnQobmV3IFJlZ0V4cChyJ1thLXpBLVpdW2EtekEtWjAtOV0qJykuaGFzTWF0Y2gobmV3TmFtZSkpOwogICAgbWFwcy5sYXN0W29sZE5hbWVdID0gbmV3TmFtZTsKICAgIHJldHVybiBuZXdOYW1lOwogIH0KfQoKLy8vIEluZm9ybWF0aW9uIHBlcnRhaW5pbmcgdGhlIGVudGVyIGFuZCBleGl0IGNhbGxiYWNrcyBmb3IgW25vZGVdLgpjbGFzcyBFbnRlckV4aXROb2RlIHsKICBmaW5hbCBFbnRlckV4aXROb2RlIHBhcmVudDsKICBmaW5hbCBOb2RlIG5vZGU7CgogIGludCBzdGFydFBvc2l0aW9uOwogIGludCBjbG9zaW5nUG9zaXRpb247CgogIEVudGVyRXhpdE5vZGUodGhpcy5wYXJlbnQsIHRoaXMubm9kZSk7CgogIHZvaWQgYWRkVG9Ob2RlKEphdmFTY3JpcHRQcmludGluZ0NvbnRleHQgY29udGV4dCwgaW50IHBvc2l0aW9uKSB7CiAgICBpZiAoc3RhcnRQb3NpdGlvbiA9PSBudWxsKSB7CiAgICAgIC8vIFtwb3NpdGlvbl0gaXMgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIFtub2RlXS4KICAgICAgaWYgKHBhcmVudCAhPSBudWxsKSB7CiAgICAgICAgLy8gVGhpcyBtaWdodCBiZSB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHBhcmVudCBhcyB3ZWxsLgogICAgICAgIHBhcmVudC5hZGRUb05vZGUoY29udGV4dCwgcG9zaXRpb24pOwogICAgICB9CiAgICAgIHN0YXJ0UG9zaXRpb24gPSBwb3NpdGlvbjsKICAgICAgY29udGV4dC5lbnRlck5vZGUobm9kZSwgcG9zaXRpb24pOwogICAgfQogIH0KCiAgRW50ZXJFeGl0Tm9kZSBleGl0Tm9kZShKYXZhU2NyaXB0UHJpbnRpbmdDb250ZXh0IGNvbnRleHQsIGludCBwb3NpdGlvbikgewogICAgLy8gRW50ZXIgbXVzdCBoYXBwZW4gYmVmb3JlIGV4aXQuCiAgICBhZGRUb05vZGUoY29udGV4dCwgcG9zaXRpb24pOwogICAgY29udGV4dC5leGl0Tm9kZShub2RlLCBzdGFydFBvc2l0aW9uLCBwb3NpdGlvbiwgY2xvc2luZ1Bvc2l0aW9uKTsKICAgIHJldHVybiBwYXJlbnQ7CiAgfQp9CoZeAE5OPAEQASMBIiMjNyEBIykoPC8BOQIBTywrTh8TBAEjHAFLQAY0MgFJTk5HTCsGNRFNAgFPSjIBHRoEASkCAR9HLC0zFxwCAScrKyMxHwEWGiEhHQEkGDUrAUpGAVAbGz1AJ0kBJkM/Hh8EASUbNzEwBiYEARYUBAEWFAQBPhUjBAEnEywEARQ9BAEhARkrKUMEATUVHiUWIU1ORk1LRzgBS09FQjwYExkMCggaUBQIHCAbFQgSHQYEARsODwQBGiAfDRATBgQBHw4OBAEhDhAEARIhLAYEAR0BHBgfBAEeOCYdBgQBFTAEARwmGwYmPQQBGhUXEwQBQjctFCISFAg3UQYEASQaBAEMJyMeBgQBOx0eHC8oBhMEAU4ZEkcTBjNMGSQNEQYSERISBAEqGRcaNxUNEwYEAUUgFQ4PEjQSDg4qEyEcBAEMIT0EAQw8Djc5FgQBDDIWBAErPikhAU5PGBNJGS0IBiAPEA42Og4YSRMaFA8SCBMcHR0gGw86OAgGBAEMGhcEAQwcFhAOHTM7Bg4iEjg8Bg4fEjU8Bg43NQQBDCAWEA45ORAZMzoONzUEAQwgGBAONjoONzUEAQwaFTs3Eg0QBhIQDjY6DhYEAQwmJB0NMQYWBAEMICQaDS4GFgQBDCIeGw0bGzQ8BkUuFgQBDCgYGw0aBhk3OhYEAQwgGBk3OhYEAQwcFkYiHQYkEhZODREGBAEMIBASEA44Og5HBAEMIhkQDjA6DhAQEhoSFgQBDB4XGTc6ECkUKBQGBAEMJB0pFCgUBgQBDDY+HU4SDEw7Iw4GIUEEATsVGBBNKzwGIQ4eLzwGDiEfDyAmFg8jJhYPJCYXDwYQGkYdHAQBDD4sMA4lIkMjDwQBQTccGC0+NkMnKiQqIzEcGSAQExANIC4TBgQBDD8RKhUtQA1MQD4XFggfLx44FSQUKRcWExgMCjBCIAgXFggGBAEyKigmJi0vSk9MQAYSBAFLFUkRDUoRBikrPicEAQwrS04uHzo0JCcqJjkyDgYiJyMwMiQXFxcXFxcXF0dDKiklTBQMLSk/TycWExQWNEQSCggGOUkkEh8QEjpABgQBDEclBAEMJzZJEA4QMTE6EA4QNj4EAQwXETc+DjQ6DgQBDBktSQ40Og4EAQwkIyUbIyQxEhAlMDEbDxEwLDEPETEsMg8QLCgtDxAtKC4PEC0oLg8RERISLjEPEBARERkRMCwPERESKy8PEBAuOCsUJCU1DxAQEDRNLA8PLwYBO0kBLE0iJA8kDSEPEgY9PgQBDCMaEhUTFU8kESYPEBFLEQ8QEUwRDw8RBjE+BAEMJzJJFQQBDCsnBAEMHhEEAQw8KAQBDCkpBAEfQQQBKyg5MTAqREImJioWCAZNUBQqKhEEAQwsMUkuJS8yMDYoChIkRyIQCCMwUSYIECIdIA4GDjc6DgQBDDksLCc4RyVQJTMEAQwbLBhABAEMNTRAHQQBNilMJAYRBAEMLTkEAQwtFQQBDCcoBAEMMBUEAQw3HgQBDBkoBAEMJw41Og4EAQwrNAQBDCwRBAEMNg4vMCgiS0wrSBwSGhIIHjE8SxkuBg4EAQwoIgQBDDhLTCEuHUwGAT8xDhIyKEUUEiQIGRUSCBwGEi4REAYOBAEMJhokISAnMQ8TCB8eDSUsHQYYDhAyOgQBDDAXBAEMOCUrAS47LEQGRSITLRgZBgQBDDYWBAE2JAQBDEMjAQw9IwEMQSMBDD8jAQxAJgQBDEQhBAEMJCYqISwmIg8qCAYEAQwgExwEAgEWFBYBDxwWARIWNBMGBAEgFwQCAU9IKQ8eISMBTUwBERgpKwE6PgEoExUgNioKCBwWBgQBQ0YxBAE5RjMEARsgBAEfASRFHksdBgQBPEEEAgEESTkENiUBJQEsAR4pEQQBKEQ6GiQoBAE1OTkiLigqKBwkLA0qBgQBOSomLERPPQEyAgEcIiorJhUCASwtNTYoFwIBLC0tLBsaARMBJyktLyYpBAEWFzc5BAEjQTEZJjMGFAQBKC0cASAkGzEEAU5NSkxNTh8rMBFBSlENT0oGFhQEASwwEUE5DUoGFxQEASdPLVAePwQBMCYBFBdCOg1RTkEUHhQaI1EyIxwWIggbLSM+CCcxBkMiFAQCAUQWHhMBFRcBKQFEITUcQy0IICkGBAFMJiJGEwQCAR9wYWNrYWdlOmpzX2FzdC9zcmMvcHJpbnRlci5kYXJ0KXNka3Jvb3Q6L3BrZy9qc19hc3QvbGliL3NyYy90ZW1wbGF0ZS5kYXJ0wABlWi8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGpzX2FzdDsKCmNsYXNzIFRlbXBsYXRlTWFuYWdlciB7CiAgTWFwPFN0cmluZywgVGVtcGxhdGU+IGV4cHJlc3Npb25UZW1wbGF0ZXMgPSBuZXcgTWFwPFN0cmluZywgVGVtcGxhdGU+KCk7CiAgTWFwPFN0cmluZywgVGVtcGxhdGU+IHN0YXRlbWVudFRlbXBsYXRlcyA9IG5ldyBNYXA8U3RyaW5nLCBUZW1wbGF0ZT4oKTsKCiAgVGVtcGxhdGVNYW5hZ2VyKCk7CgogIFRlbXBsYXRlIGxvb2t1cEV4cHJlc3Npb25UZW1wbGF0ZShTdHJpbmcgc291cmNlKSB7CiAgICByZXR1cm4gZXhwcmVzc2lvblRlbXBsYXRlc1tzb3VyY2VdOwogIH0KCiAgVGVtcGxhdGUgZGVmaW5lRXhwcmVzc2lvblRlbXBsYXRlKFN0cmluZyBzb3VyY2UsIE5vZGUgYXN0KSB7CiAgICBUZW1wbGF0ZSB0ZW1wbGF0ZSA9CiAgICAgICAgbmV3IFRlbXBsYXRlKHNvdXJjZSwgYXN0LCBpc0V4cHJlc3Npb246IHRydWUsIGZvcmNlQ29weTogZmFsc2UpOwogICAgZXhwcmVzc2lvblRlbXBsYXRlc1tzb3VyY2VdID0gdGVtcGxhdGU7CiAgICByZXR1cm4gdGVtcGxhdGU7CiAgfQoKICBUZW1wbGF0ZSBsb29rdXBTdGF0ZW1lbnRUZW1wbGF0ZShTdHJpbmcgc291cmNlKSB7CiAgICByZXR1cm4gc3RhdGVtZW50VGVtcGxhdGVzW3NvdXJjZV07CiAgfQoKICBUZW1wbGF0ZSBkZWZpbmVTdGF0ZW1lbnRUZW1wbGF0ZShTdHJpbmcgc291cmNlLCBOb2RlIGFzdCkgewogICAgVGVtcGxhdGUgdGVtcGxhdGUgPQogICAgICAgIG5ldyBUZW1wbGF0ZShzb3VyY2UsIGFzdCwgaXNFeHByZXNzaW9uOiBmYWxzZSwgZm9yY2VDb3B5OiBmYWxzZSk7CiAgICBzdGF0ZW1lbnRUZW1wbGF0ZXNbc291cmNlXSA9IHRlbXBsYXRlOwogICAgcmV0dXJuIHRlbXBsYXRlOwogIH0KfQoKLyoqCiAqIEEgVGVtcGxhdGUgaXMgY3JlYXRlZCB3aXRoIEphdmFTY3JpcHQgQVNUIGNvbnRhaW5pbmcgcGxhY2Vob2xkZXJzIChpbnRlcmZhY2UKICogSW50ZXJwb2xhdGVkTm9kZSkuICBUaGUgW2luc3RhbnRpYXRlXSBtZXRob2QgY3JlYXRlcyBhbiBBU1QgdGhhdCBsb29rcyBsaWtlCiAqIHRoZSBvcmlnaW5hbCB3aXRoIHRoZSBwbGFjZWhvbGRlcnMgcmVwbGFjZWQgYnkgdGhlIGFyZ3VtZW50cyB0bwogKiBbaW5zdGFudGlhdGVdLgogKi8KY2xhc3MgVGVtcGxhdGUgewogIGZpbmFsIFN0cmluZyBzb3VyY2U7CiAgZmluYWwgYm9vbCBpc0V4cHJlc3Npb247CiAgZmluYWwgYm9vbCBmb3JjZUNvcHk7CiAgZmluYWwgTm9kZSBhc3Q7CgogIEluc3RhbnRpYXRvciBpbnN0YW50aWF0b3I7CgogIGludCBwb3NpdGlvbmFsQXJndW1lbnRDb3VudCA9IC0xOwoKICAvLyBOdWxsLCB1bmxlc3MgdGhlcmUgYXJlIG5hbWVkIGhvbGVzLgogIExpc3Q8U3RyaW5nPiBob2xlTmFtZXM7CiAgYm9vbCBnZXQgaXNQb3NpdGlvbmFsID0+IGhvbGVOYW1lcyA9PSBudWxsOwoKICBUZW1wbGF0ZSh0aGlzLnNvdXJjZSwgdGhpcy5hc3QsCiAgICAgIHt0aGlzLmlzRXhwcmVzc2lvbjogdHJ1ZSwgdGhpcy5mb3JjZUNvcHk6IGZhbHNlfSkgewogICAgYXNzZXJ0KHRoaXMuaXNFeHByZXNzaW9uID8gYXN0IGlzIEV4cHJlc3Npb24gOiBhc3QgaXMgU3RhdGVtZW50KTsKICAgIF9jb21waWxlKCk7CiAgfQoKICBUZW1wbGF0ZS53aXRoRXhwcmVzc2lvblJlc3VsdCh0aGlzLmFzdCkKICAgICAgOiBzb3VyY2UgPSBudWxsLAogICAgICAgIGlzRXhwcmVzc2lvbiA9IHRydWUsCiAgICAgICAgZm9yY2VDb3B5ID0gZmFsc2UgewogICAgYXNzZXJ0KGFzdCBpcyBFeHByZXNzaW9uKTsKICAgIGFzc2VydChfY2hlY2tOb1BsYWNlaG9sZGVycygpKTsKICAgIHBvc2l0aW9uYWxBcmd1bWVudENvdW50ID0gMDsKICAgIGluc3RhbnRpYXRvciA9IChhcmd1bWVudHMpID0+IGFzdDsKICB9CgogIFRlbXBsYXRlLndpdGhTdGF0ZW1lbnRSZXN1bHQodGhpcy5hc3QpCiAgICAgIDogc291cmNlID0gbnVsbCwKICAgICAgICBpc0V4cHJlc3Npb24gPSBmYWxzZSwKICAgICAgICBmb3JjZUNvcHkgPSBmYWxzZSB7CiAgICBhc3NlcnQoYXN0IGlzIFN0YXRlbWVudCk7CiAgICBhc3NlcnQoX2NoZWNrTm9QbGFjZWhvbGRlcnMoKSk7CiAgICBwb3NpdGlvbmFsQXJndW1lbnRDb3VudCA9IDA7CiAgICBpbnN0YW50aWF0b3IgPSAoYXJndW1lbnRzKSA9PiBhc3Q7CiAgfQoKICBib29sIF9jaGVja05vUGxhY2Vob2xkZXJzKCkgewogICAgSW5zdGFudGlhdG9yR2VuZXJhdG9yVmlzaXRvciBnZW5lcmF0b3IgPQogICAgICAgIG5ldyBJbnN0YW50aWF0b3JHZW5lcmF0b3JWaXNpdG9yKGZhbHNlKTsKICAgIGdlbmVyYXRvci5jb21waWxlKGFzdCk7CiAgICByZXR1cm4gZ2VuZXJhdG9yLmFuYWx5c2lzLmNvdW50ID09IDA7CiAgfQoKICB2b2lkIF9jb21waWxlKCkgewogICAgSW5zdGFudGlhdG9yR2VuZXJhdG9yVmlzaXRvciBnZW5lcmF0b3IgPQogICAgICAgIG5ldyBJbnN0YW50aWF0b3JHZW5lcmF0b3JWaXNpdG9yKGZvcmNlQ29weSk7CiAgICBpbnN0YW50aWF0b3IgPSBnZW5lcmF0b3IuY29tcGlsZShhc3QpOwogICAgcG9zaXRpb25hbEFyZ3VtZW50Q291bnQgPSBnZW5lcmF0b3IuYW5hbHlzaXMuY291bnQ7CiAgICBTZXQ8U3RyaW5nPiBuYW1lcyA9IGdlbmVyYXRvci5hbmFseXNpcy5ob2xlTmFtZXM7CiAgICBob2xlTmFtZXMgPSBuYW1lcy50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKICB9CgogIC8vLyBJbnN0YW50aWF0ZXMgdGhlIHRlbXBsYXRlIHdpdGggdGhlIGdpdmVuIFthcmd1bWVudHNdLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBmaWxscyBpbiB0aGUgaG9sZXMgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLiBUaGUgW2FyZ3VtZW50c10KICAvLy8gbXVzdCBiZSBlaXRoZXIgYSBbTGlzdF0gb3IgYSBbTWFwXS4KICBOb2RlIGluc3RhbnRpYXRlKHZhciBhcmd1bWVudHMpIHsKICAgIGlmIChhcmd1bWVudHMgaXMgTGlzdCkgewogICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSBwb3NpdGlvbmFsQXJndW1lbnRDb3VudCkgewogICAgICAgIHRocm93ICdXcm9uZyBudW1iZXIgb2YgdGVtcGxhdGUgYXJndW1lbnRzLCBnaXZlbiAke2FyZ3VtZW50cy5sZW5ndGh9LCAnCiAgICAgICAgICAgICdleHBlY3RlZCAkcG9zaXRpb25hbEFyZ3VtZW50Q291bnQnCiAgICAgICAgICAgICcsIHNvdXJjZTogIiRzb3VyY2UiJzsKICAgICAgfQogICAgICByZXR1cm4gaW5zdGFudGlhdG9yKGFyZ3VtZW50cyk7CiAgICB9CiAgICBhc3NlcnQoYXJndW1lbnRzIGlzIE1hcCk7CiAgICBpZiAoaG9sZU5hbWVzLmxlbmd0aCA8IGFyZ3VtZW50cy5sZW5ndGgpIHsKICAgICAgLy8gVGhpcyBzZWFyY2ggaXMgaW4gTyhuKSwgYnV0IHdlIG9ubHkgZG8gaXQgaW4gY2FzZSBvZiBhbiBlcnJvciwgYW5kIHRoZQogICAgICAvLyBudW1iZXIgb2YgaG9sZXMgc2hvdWxkIGJlIHF1aXRlIGxpbWl0ZWQuCiAgICAgIFN0cmluZyB1bnVzZWROYW1lcyA9CiAgICAgICAgICBhcmd1bWVudHMua2V5cy53aGVyZSgobmFtZSkgPT4gIWhvbGVOYW1lcy5jb250YWlucyhuYW1lKSkuam9pbigiLCAiKTsKICAgICAgdGhyb3cgIlRlbXBsYXRlIGFyZ3VtZW50cyBoYXMgdW51c2VkIG1hcHBpbmdzOiAkdW51c2VkTmFtZXMiOwogICAgfQogICAgaWYgKCFob2xlTmFtZXMuZXZlcnkoKFN0cmluZyBuYW1lKSA9PiBhcmd1bWVudHMuY29udGFpbnNLZXkobmFtZSkpKSB7CiAgICAgIFN0cmluZyBub3RGb3VuZCA9CiAgICAgICAgICBob2xlTmFtZXMud2hlcmUoKG5hbWUpID0+ICFhcmd1bWVudHMuY29udGFpbnNLZXkobmFtZSkpLmpvaW4oIiwgIik7CiAgICAgIHRocm93ICJUZW1wbGF0ZSBhcmd1bWVudHMgaXMgbWlzc2luZyBtYXBwaW5ncyBmb3I6ICRub3RGb3VuZCI7CiAgICB9CiAgICByZXR1cm4gaW5zdGFudGlhdG9yKGFyZ3VtZW50cyk7CiAgfQp9CgovKioKICogQW4gSW5zdGFudGlhdG9yIGlzIGEgRnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgYSBKUyBBU1QgdHJlZSBvciBMaXN0IG9mCiAqIHRyZWVzLiBbYXJndW1lbnRzXSBpcyBhIExpc3QgZm9yIHBvc2l0aW9uYWwgdGVtcGxhdGVzLCBvciBNYXAgZm9yCiAqIG5hbWVkIHRlbXBsYXRlcy4KICovCnR5cGVkZWYgLypOb2RlfEl0ZXJhYmxlPE5vZGU+Ki8gSW5zdGFudGlhdG9yKHZhciBhcmd1bWVudHMpOwoKLyoqCiAqIEluc3RhbnRpYXRvckdlbmVyYXRvclZpc2l0b3IgY29tcGlsZXMgYSB0ZW1wbGF0ZS4gIFRoaXMgY2xhc3MgY29tcGlsZXMgYSB0cmVlCiAqIGNvbnRhaW5pbmcgW0ludGVycG9sYXRlZE5vZGVdcyBpbnRvIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNyZWF0ZSBhIGNvcHkgb2YgdGhlCiAqIHRyZWUgd2l0aCB0aGUgaW50ZXJwb2xhdGVkIG5vZGVzIHN1YnN0aXR1dGVkIHdpdGggcHJvdmlkZWQgdmFsdWVzLgogKi8KY2xhc3MgSW5zdGFudGlhdG9yR2VuZXJhdG9yVmlzaXRvciBpbXBsZW1lbnRzIE5vZGVWaXNpdG9yPEluc3RhbnRpYXRvcj4gewogIGZpbmFsIGJvb2wgZm9yY2VDb3B5OwoKICBJbnRlcnBvbGF0ZWROb2RlQW5hbHlzaXMgYW5hbHlzaXMgPSBuZXcgSW50ZXJwb2xhdGVkTm9kZUFuYWx5c2lzKCk7CgogIC8qKgogICAqIFRoZSBlbnRpcmUgdHJlZSBpcyBjbG9uZWQgaWYgW2ZvcmNlQ29weV0gaXMgdHJ1ZS4KICAgKi8KICBJbnN0YW50aWF0b3JHZW5lcmF0b3JWaXNpdG9yKHRoaXMuZm9yY2VDb3B5KTsKCiAgSW5zdGFudGlhdG9yIGNvbXBpbGUoTm9kZSBub2RlKSB7CiAgICBhbmFseXNpcy52aXNpdChub2RlKTsKICAgIEluc3RhbnRpYXRvciByZXN1bHQgPSB2aXNpdChub2RlKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0aWMgZXJyb3IoU3RyaW5nIG1lc3NhZ2UpIHsKICAgIHRocm93IG1lc3NhZ2U7CiAgfQoKICBzdGF0aWMgSW5zdGFudGlhdG9yIHNhbWUoTm9kZSBub2RlKSA9PiAoYXJndW1lbnRzKSA9PiBub2RlOwogIHN0YXRpYyBOb2RlIG1ha2VOdWxsKGFyZ3VtZW50cykgPT4gbnVsbDsKCiAgSW5zdGFudGlhdG9yIHZpc2l0KE5vZGUgbm9kZSkgewogICAgaWYgKGZvcmNlQ29weSB8fCBhbmFseXNpcy5jb250YWluc0ludGVycG9sYXRlZE5vZGVzKG5vZGUpKSB7CiAgICAgIHJldHVybiBub2RlLmFjY2VwdCh0aGlzKTsKICAgIH0KICAgIHJldHVybiBzYW1lKG5vZGUpOwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0TnVsbGFibGUoTm9kZSBub2RlKSB7CiAgICBpZiAobm9kZSA9PSBudWxsKSByZXR1cm4gbWFrZU51bGw7CiAgICByZXR1cm4gdmlzaXQobm9kZSk7CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRTcGxheWFibGUoTm9kZSBub2RlKSB7CiAgICAvLyBUT0RPKHNyYSk6IFByb2Nlc3MgaW1tZWRpYXRlIFtJbnRlcnBvbGF0ZWROb2RlXXMsIHBlcm1pdHRpbmcgc3BsYXlpbmcuCiAgICByZXR1cm4gdmlzaXQobm9kZSk7CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXROb2RlKE5vZGUgbm9kZSkgewogICAgdGhyb3cgJ1VuaW1wbGVtZW50ZWQgSW5zdGFudGlhdG9yR2VuZXJhdG9yVmlzaXRvciBmb3IgJG5vZGUnOwogIH0KCiAgc3RhdGljIFJlZ0V4cCBpZGVudGlmaWVyUkUgPSBuZXcgUmVnRXhwKHInXltBLVphLXpfJF1bQS1aYS16XyQwLTldKiQnKTsKCiAgc3RhdGljIEV4cHJlc3Npb24gY29udmVydFN0cmluZ1RvVmFyaWFibGVVc2UoU3RyaW5nIHZhbHVlKSB7CiAgICBhc3NlcnQoaWRlbnRpZmllclJFLmhhc01hdGNoKHZhbHVlKSk7CiAgICByZXR1cm4gbmV3IFZhcmlhYmxlVXNlKHZhbHVlKTsKICB9CgogIHN0YXRpYyBFeHByZXNzaW9uIGNvbnZlcnRTdHJpbmdUb1ZhcmlhYmxlRGVjbGFyYXRpb24oU3RyaW5nIHZhbHVlKSB7CiAgICBhc3NlcnQoaWRlbnRpZmllclJFLmhhc01hdGNoKHZhbHVlKSk7CiAgICByZXR1cm4gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24odmFsdWUpOwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0SW50ZXJwb2xhdGVkRXhwcmVzc2lvbihJbnRlcnBvbGF0ZWRFeHByZXNzaW9uIG5vZGUpIHsKICAgIHZhciBuYW1lT3JQb3NpdGlvbiA9IG5vZGUubmFtZU9yUG9zaXRpb247CiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICB2YXIgdmFsdWUgPSBhcmd1bWVudHNbbmFtZU9yUG9zaXRpb25dOwogICAgICBpZiAodmFsdWUgaXMgRXhwcmVzc2lvbikgcmV0dXJuIHZhbHVlOwogICAgICBpZiAodmFsdWUgaXMgU3RyaW5nKSByZXR1cm4gY29udmVydFN0cmluZ1RvVmFyaWFibGVVc2UodmFsdWUpOwogICAgICB0aHJvdyBlcnJvcigKICAgICAgICAgICdJbnRlcnBvbGF0ZWQgdmFsdWUgIyRuYW1lT3JQb3NpdGlvbiBpcyBub3QgYW4gRXhwcmVzc2lvbjogJHZhbHVlJyk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0SW50ZXJwb2xhdGVkRGVjbGFyYXRpb24oSW50ZXJwb2xhdGVkRGVjbGFyYXRpb24gbm9kZSkgewogICAgdmFyIG5hbWVPclBvc2l0aW9uID0gbm9kZS5uYW1lT3JQb3NpdGlvbjsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1tuYW1lT3JQb3NpdGlvbl07CiAgICAgIGlmICh2YWx1ZSBpcyBEZWNsYXJhdGlvbikgcmV0dXJuIHZhbHVlOwogICAgICBpZiAodmFsdWUgaXMgU3RyaW5nKSByZXR1cm4gY29udmVydFN0cmluZ1RvVmFyaWFibGVEZWNsYXJhdGlvbih2YWx1ZSk7CiAgICAgIHRocm93IGVycm9yKAogICAgICAgICAgJ0ludGVycG9sYXRlZCB2YWx1ZSAjJG5hbWVPclBvc2l0aW9uIGlzIG5vdCBhIGRlY2xhcmF0aW9uOiAkdmFsdWUnKTsKICAgIH07CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRTcGxheWFibGVFeHByZXNzaW9uKE5vZGUgbm9kZSkgewogICAgaWYgKG5vZGUgaXMgSW50ZXJwb2xhdGVkRXhwcmVzc2lvbikgewogICAgICB2YXIgbmFtZU9yUG9zaXRpb24gPSBub2RlLm5hbWVPclBvc2l0aW9uOwogICAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1tuYW1lT3JQb3NpdGlvbl07CiAgICAgICAgRXhwcmVzc2lvbiB0b0V4cHJlc3Npb24oaXRlbSkgewogICAgICAgICAgaWYgKGl0ZW0gaXMgRXhwcmVzc2lvbikgcmV0dXJuIGl0ZW07CiAgICAgICAgICBpZiAoaXRlbSBpcyBTdHJpbmcpIHJldHVybiBjb252ZXJ0U3RyaW5nVG9WYXJpYWJsZVVzZShpdGVtKTsKICAgICAgICAgIHRocm93IGVycm9yKCdJbnRlcnBvbGF0ZWQgdmFsdWUgIyRuYW1lT3JQb3NpdGlvbiBpcyBub3QgJwogICAgICAgICAgICAgICdhbiBFeHByZXNzaW9uIG9yIExpc3Qgb2YgRXhwcmVzc2lvbnM6ICR2YWx1ZScpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHZhbHVlIGlzIEl0ZXJhYmxlKSByZXR1cm4gdmFsdWUubWFwKHRvRXhwcmVzc2lvbik7CiAgICAgICAgcmV0dXJuIHRvRXhwcmVzc2lvbih2YWx1ZSk7CiAgICAgIH07CiAgICB9CiAgICByZXR1cm4gdmlzaXQobm9kZSk7CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRJbnRlcnBvbGF0ZWRMaXRlcmFsKEludGVycG9sYXRlZExpdGVyYWwgbm9kZSkgewogICAgdmFyIG5hbWVPclBvc2l0aW9uID0gbm9kZS5uYW1lT3JQb3NpdGlvbjsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1tuYW1lT3JQb3NpdGlvbl07CiAgICAgIGlmICh2YWx1ZSBpcyBMaXRlcmFsIHx8IHZhbHVlIGlzIERlZmVycmVkRXhwcmVzc2lvbikgcmV0dXJuIHZhbHVlOwogICAgICBlcnJvcignSW50ZXJwb2xhdGVkIHZhbHVlICMkbmFtZU9yUG9zaXRpb24gaXMgbm90IGEgTGl0ZXJhbDogJHZhbHVlJyk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0SW50ZXJwb2xhdGVkUGFyYW1ldGVyKEludGVycG9sYXRlZFBhcmFtZXRlciBub2RlKSB7CiAgICB2YXIgbmFtZU9yUG9zaXRpb24gPSBub2RlLm5hbWVPclBvc2l0aW9uOwogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgdmFyIHZhbHVlID0gYXJndW1lbnRzW25hbWVPclBvc2l0aW9uXTsKCiAgICAgIFBhcmFtZXRlciB0b1BhcmFtZXRlcihpdGVtKSB7CiAgICAgICAgaWYgKGl0ZW0gaXMgUGFyYW1ldGVyKSByZXR1cm4gaXRlbTsKICAgICAgICBpZiAoaXRlbSBpcyBTdHJpbmcpIHJldHVybiBuZXcgUGFyYW1ldGVyKGl0ZW0pOwogICAgICAgIHRocm93IGVycm9yKCdJbnRlcnBvbGF0ZWQgdmFsdWUgIyRuYW1lT3JQb3NpdGlvbiBpcyBub3QgYSBQYXJhbWV0ZXIgb3InCiAgICAgICAgICAgICcgTGlzdCBvZiBQYXJhbWV0ZXJzOiAkdmFsdWUnKTsKICAgICAgfQoKICAgICAgaWYgKHZhbHVlIGlzIEl0ZXJhYmxlKSByZXR1cm4gdmFsdWUubWFwKHRvUGFyYW1ldGVyKTsKICAgICAgcmV0dXJuIHRvUGFyYW1ldGVyKHZhbHVlKTsKICAgIH07CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRJbnRlcnBvbGF0ZWRTZWxlY3RvcihJbnRlcnBvbGF0ZWRTZWxlY3RvciBub2RlKSB7CiAgICAvLyBBIHNlbGVjdG9yIGlzIGFuIGV4cHJlc3Npb24sIGFzIGluIGBhW3NlbGVjdG9yXWAuCiAgICAvLyBBIFN0cmluZyBhcmd1bWVudCBjb252ZXJ0ZWQgaW50byBhIExpdGVyYWxTdHJpbmcsIHNvIGBhLiNgIHdpdGggYXJndW1lbnQKICAgIC8vICdmb28nIGdlbmVyYXRlcyBgYVsiZm9vIl1gIHdoaWNoIHByaW50cyBhcyBgYS5mb29gLgogICAgdmFyIG5hbWVPclBvc2l0aW9uID0gbm9kZS5uYW1lT3JQb3NpdGlvbjsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1tuYW1lT3JQb3NpdGlvbl07CiAgICAgIGlmICh2YWx1ZSBpcyBFeHByZXNzaW9uKSByZXR1cm4gdmFsdWU7CiAgICAgIGlmICh2YWx1ZSBpcyBTdHJpbmcpIHJldHVybiBuZXcgTGl0ZXJhbFN0cmluZygnIiR2YWx1ZSInKTsKICAgICAgdGhyb3cgZXJyb3IoCiAgICAgICAgICAnSW50ZXJwb2xhdGVkIHZhbHVlICMkbmFtZU9yUG9zaXRpb24gaXMgbm90IGEgc2VsZWN0b3I6ICR2YWx1ZScpOwogICAgfTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdEludGVycG9sYXRlZFN0YXRlbWVudChJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQgbm9kZSkgewogICAgdmFyIG5hbWVPclBvc2l0aW9uID0gbm9kZS5uYW1lT3JQb3NpdGlvbjsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1tuYW1lT3JQb3NpdGlvbl07CiAgICAgIGlmICh2YWx1ZSBpcyBOb2RlKSByZXR1cm4gdmFsdWUudG9TdGF0ZW1lbnQoKTsKICAgICAgdGhyb3cgZXJyb3IoCiAgICAgICAgICAnSW50ZXJwb2xhdGVkIHZhbHVlICMkbmFtZU9yUG9zaXRpb24gaXMgbm90IGEgU3RhdGVtZW50OiAkdmFsdWUnKTsKICAgIH07CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRTcGxheWFibGVTdGF0ZW1lbnQoTm9kZSBub2RlKSB7CiAgICBpZiAobm9kZSBpcyBJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQpIHsKICAgICAgdmFyIG5hbWVPclBvc2l0aW9uID0gbm9kZS5uYW1lT3JQb3NpdGlvbjsKICAgICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgICB2YXIgdmFsdWUgPSBhcmd1bWVudHNbbmFtZU9yUG9zaXRpb25dOwogICAgICAgIFN0YXRlbWVudCB0b1N0YXRlbWVudChpdGVtKSB7CiAgICAgICAgICBpZiAoaXRlbSBpcyBTdGF0ZW1lbnQpIHJldHVybiBpdGVtOwogICAgICAgICAgaWYgKGl0ZW0gaXMgRXhwcmVzc2lvbikgcmV0dXJuIGl0ZW0udG9TdGF0ZW1lbnQoKTsKICAgICAgICAgIHRocm93IGVycm9yKCdJbnRlcnBvbGF0ZWQgdmFsdWUgIyRuYW1lT3JQb3NpdGlvbiBpcyBub3QgJwogICAgICAgICAgICAgICdhIFN0YXRlbWVudCBvciBMaXN0IG9mIFN0YXRlbWVudHM6ICR2YWx1ZScpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHZhbHVlIGlzIEl0ZXJhYmxlKSByZXR1cm4gdmFsdWUubWFwKHRvU3RhdGVtZW50KTsKICAgICAgICByZXR1cm4gdG9TdGF0ZW1lbnQodmFsdWUpOwogICAgICB9OwogICAgfQogICAgcmV0dXJuIHZpc2l0KG5vZGUpOwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0UHJvZ3JhbShQcm9ncmFtIG5vZGUpIHsKICAgIExpc3Q8SW5zdGFudGlhdG9yPiBpbnN0YW50aWF0b3JzID0KICAgICAgICBub2RlLmJvZHkubWFwKHZpc2l0U3BsYXlhYmxlU3RhdGVtZW50KS50b0xpc3QoKTsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIExpc3Q8U3RhdGVtZW50PiBzdGF0ZW1lbnRzID0gPFN0YXRlbWVudD5bXTsKICAgICAgdm9pZCBhZGQobm9kZSkgewogICAgICAgIGlmIChub2RlIGlzIEVtcHR5U3RhdGVtZW50KSByZXR1cm47CiAgICAgICAgaWYgKG5vZGUgaXMgSXRlcmFibGUpIHsKICAgICAgICAgIHN0YXRlbWVudHMuYWRkQWxsKG5vZGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdGF0ZW1lbnRzLmFkZChub2RlLnRvU3RhdGVtZW50KCkpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgZm9yIChJbnN0YW50aWF0b3IgaW5zdGFudGlhdG9yIGluIGluc3RhbnRpYXRvcnMpIHsKICAgICAgICBhZGQoaW5zdGFudGlhdG9yKGFyZ3VtZW50cykpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgUHJvZ3JhbShzdGF0ZW1lbnRzKTsKICAgIH07CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRCbG9jayhCbG9jayBub2RlKSB7CiAgICBMaXN0PEluc3RhbnRpYXRvcj4gaW5zdGFudGlhdG9ycyA9CiAgICAgICAgbm9kZS5zdGF0ZW1lbnRzLm1hcCh2aXNpdFNwbGF5YWJsZVN0YXRlbWVudCkudG9MaXN0KCk7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICBMaXN0PFN0YXRlbWVudD4gc3RhdGVtZW50cyA9IDxTdGF0ZW1lbnQ+W107CiAgICAgIHZvaWQgYWRkKG5vZGUpIHsKICAgICAgICBpZiAobm9kZSBpcyBFbXB0eVN0YXRlbWVudCkgcmV0dXJuOwogICAgICAgIGlmIChub2RlIGlzIEl0ZXJhYmxlKSB7CiAgICAgICAgICBzdGF0ZW1lbnRzLmFkZEFsbChub2RlKTsKICAgICAgICB9IGVsc2UgaWYgKG5vZGUgaXMgQmxvY2spIHsKICAgICAgICAgIHN0YXRlbWVudHMuYWRkQWxsKG5vZGUuc3RhdGVtZW50cyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN0YXRlbWVudHMuYWRkKG5vZGUudG9TdGF0ZW1lbnQoKSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBmb3IgKEluc3RhbnRpYXRvciBpbnN0YW50aWF0b3IgaW4gaW5zdGFudGlhdG9ycykgewogICAgICAgIGFkZChpbnN0YW50aWF0b3IoYXJndW1lbnRzKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBCbG9jayhzdGF0ZW1lbnRzKTsKICAgIH07CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRFeHByZXNzaW9uU3RhdGVtZW50KEV4cHJlc3Npb25TdGF0ZW1lbnQgbm9kZSkgewogICAgSW5zdGFudGlhdG9yIGJ1aWxkRXhwcmVzc2lvbiA9IHZpc2l0KG5vZGUuZXhwcmVzc2lvbik7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICByZXR1cm4gYnVpbGRFeHByZXNzaW9uKGFyZ3VtZW50cykudG9TdGF0ZW1lbnQoKTsKICAgIH07CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRFbXB0eVN0YXRlbWVudChFbXB0eVN0YXRlbWVudCBub2RlKSA9PgogICAgICAoYXJndW1lbnRzKSA9PiBuZXcgRW1wdHlTdGF0ZW1lbnQoKTsKCiAgSW5zdGFudGlhdG9yIHZpc2l0SWYoSWYgbm9kZSkgewogICAgaWYgKG5vZGUuY29uZGl0aW9uIGlzIEludGVycG9sYXRlZEV4cHJlc3Npb24pIHsKICAgICAgcmV0dXJuIHZpc2l0SWZDb25kaXRpb25hbENvbXBpbGF0aW9uKG5vZGUpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHZpc2l0SWZOb3JtYWwobm9kZSk7CiAgICB9CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRJZkNvbmRpdGlvbmFsQ29tcGlsYXRpb24oSWYgbm9kZSkgewogICAgLy8gU3BlY2lhbCB2ZXJzaW9uIG9mIHZpc2l0SW50ZXJwb2xhdGVkRXhwcmVzc2lvbiB0aGF0IHBlcm1pdHMgYm9vbHMuCiAgICBjb21waWxlQ29uZGl0aW9uKEludGVycG9sYXRlZEV4cHJlc3Npb24gbm9kZSkgewogICAgICB2YXIgbmFtZU9yUG9zaXRpb24gPSBub2RlLm5hbWVPclBvc2l0aW9uOwogICAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1tuYW1lT3JQb3NpdGlvbl07CiAgICAgICAgaWYgKHZhbHVlIGlzIGJvb2wpIHJldHVybiB2YWx1ZTsKICAgICAgICBpZiAodmFsdWUgaXMgRXhwcmVzc2lvbikgcmV0dXJuIHZhbHVlOwogICAgICAgIGlmICh2YWx1ZSBpcyBTdHJpbmcpIHJldHVybiBjb252ZXJ0U3RyaW5nVG9WYXJpYWJsZVVzZSh2YWx1ZSk7CiAgICAgICAgdGhyb3cgZXJyb3IoJ0ludGVycG9sYXRlZCB2YWx1ZSAjJG5hbWVPclBvc2l0aW9uICcKICAgICAgICAgICAgJ2lzIG5vdCBhbiBFeHByZXNzaW9uOiAkdmFsdWUnKTsKICAgICAgfTsKICAgIH0KCiAgICB2YXIgbWFrZUNvbmRpdGlvbiA9IGNvbXBpbGVDb25kaXRpb24obm9kZS5jb25kaXRpb24pOwogICAgSW5zdGFudGlhdG9yIG1ha2VUaGVuID0gdmlzaXQobm9kZS50aGVuKTsKICAgIEluc3RhbnRpYXRvciBtYWtlT3RoZXJ3aXNlID0gdmlzaXQobm9kZS5vdGhlcndpc2UpOwogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgdmFyIGNvbmRpdGlvbiA9IG1ha2VDb25kaXRpb24oYXJndW1lbnRzKTsKICAgICAgaWYgKGNvbmRpdGlvbiBpcyBib29sKSB7CiAgICAgICAgaWYgKGNvbmRpdGlvbiA9PSB0cnVlKSB7CiAgICAgICAgICByZXR1cm4gbWFrZVRoZW4oYXJndW1lbnRzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIG1ha2VPdGhlcndpc2UoYXJndW1lbnRzKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBJZihjb25kaXRpb24sIG1ha2VUaGVuKGFyZ3VtZW50cyksIG1ha2VPdGhlcndpc2UoYXJndW1lbnRzKSk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0SWZOb3JtYWwoSWYgbm9kZSkgewogICAgSW5zdGFudGlhdG9yIG1ha2VDb25kaXRpb24gPSB2aXNpdChub2RlLmNvbmRpdGlvbik7CiAgICBJbnN0YW50aWF0b3IgbWFrZVRoZW4gPSB2aXNpdChub2RlLnRoZW4pOwogICAgSW5zdGFudGlhdG9yIG1ha2VPdGhlcndpc2UgPSB2aXNpdChub2RlLm90aGVyd2lzZSk7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICByZXR1cm4gbmV3IElmKG1ha2VDb25kaXRpb24oYXJndW1lbnRzKSwgbWFrZVRoZW4oYXJndW1lbnRzKSwKICAgICAgICAgIG1ha2VPdGhlcndpc2UoYXJndW1lbnRzKSk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0Rm9yKEZvciBub2RlKSB7CiAgICBJbnN0YW50aWF0b3IgbWFrZUluaXQgPSB2aXNpdE51bGxhYmxlKG5vZGUuaW5pdCk7CiAgICBJbnN0YW50aWF0b3IgbWFrZUNvbmRpdGlvbiA9IHZpc2l0TnVsbGFibGUobm9kZS5jb25kaXRpb24pOwogICAgSW5zdGFudGlhdG9yIG1ha2VVcGRhdGUgPSB2aXNpdE51bGxhYmxlKG5vZGUudXBkYXRlKTsKICAgIEluc3RhbnRpYXRvciBtYWtlQm9keSA9IHZpc2l0KG5vZGUuYm9keSk7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICByZXR1cm4gbmV3IEZvcihtYWtlSW5pdChhcmd1bWVudHMpLCBtYWtlQ29uZGl0aW9uKGFyZ3VtZW50cyksCiAgICAgICAgICBtYWtlVXBkYXRlKGFyZ3VtZW50cyksIG1ha2VCb2R5KGFyZ3VtZW50cykpOwogICAgfTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdEZvckluKEZvckluIG5vZGUpIHsKICAgIEluc3RhbnRpYXRvciBtYWtlTGVmdEhhbmRTaWRlID0gdmlzaXQobm9kZS5sZWZ0SGFuZFNpZGUpOwogICAgSW5zdGFudGlhdG9yIG1ha2VPYmplY3QgPSB2aXNpdChub2RlLm9iamVjdCk7CiAgICBJbnN0YW50aWF0b3IgbWFrZUJvZHkgPSB2aXNpdChub2RlLmJvZHkpOwogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgcmV0dXJuIG5ldyBGb3JJbihtYWtlTGVmdEhhbmRTaWRlKGFyZ3VtZW50cyksIG1ha2VPYmplY3QoYXJndW1lbnRzKSwKICAgICAgICAgIG1ha2VCb2R5KGFyZ3VtZW50cykpOwogICAgfTsKICB9CgogIFRPRE8oU3RyaW5nIG5hbWUpIHsKICAgIHRocm93IG5ldyBVbmltcGxlbWVudGVkRXJyb3IoJyR0aGlzLiRuYW1lJyk7CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRXaGlsZShXaGlsZSBub2RlKSB7CiAgICBJbnN0YW50aWF0b3IgbWFrZUNvbmRpdGlvbiA9IHZpc2l0KG5vZGUuY29uZGl0aW9uKTsKICAgIEluc3RhbnRpYXRvciBtYWtlQm9keSA9IHZpc2l0KG5vZGUuYm9keSk7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICByZXR1cm4gbmV3IFdoaWxlKG1ha2VDb25kaXRpb24oYXJndW1lbnRzKSwgbWFrZUJvZHkoYXJndW1lbnRzKSk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0RG8oRG8gbm9kZSkgewogICAgSW5zdGFudGlhdG9yIG1ha2VCb2R5ID0gdmlzaXQobm9kZS5ib2R5KTsKICAgIEluc3RhbnRpYXRvciBtYWtlQ29uZGl0aW9uID0gdmlzaXQobm9kZS5jb25kaXRpb24pOwogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgcmV0dXJuIG5ldyBEbyhtYWtlQm9keShhcmd1bWVudHMpLCBtYWtlQ29uZGl0aW9uKGFyZ3VtZW50cykpOwogICAgfTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdENvbnRpbnVlKENvbnRpbnVlIG5vZGUpID0+CiAgICAgIChhcmd1bWVudHMpID0+IG5ldyBDb250aW51ZShub2RlLnRhcmdldExhYmVsKTsKCiAgSW5zdGFudGlhdG9yIHZpc2l0QnJlYWsoQnJlYWsgbm9kZSkgPT4KICAgICAgKGFyZ3VtZW50cykgPT4gbmV3IEJyZWFrKG5vZGUudGFyZ2V0TGFiZWwpOwoKICBJbnN0YW50aWF0b3IgdmlzaXRSZXR1cm4oUmV0dXJuIG5vZGUpIHsKICAgIEluc3RhbnRpYXRvciBtYWtlRXhwcmVzc2lvbiA9IHZpc2l0TnVsbGFibGUobm9kZS52YWx1ZSk7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgPT4gbmV3IFJldHVybihtYWtlRXhwcmVzc2lvbihhcmd1bWVudHMpKTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdERhcnRZaWVsZChEYXJ0WWllbGQgbm9kZSkgewogICAgSW5zdGFudGlhdG9yIG1ha2VFeHByZXNzaW9uID0gdmlzaXQobm9kZS5leHByZXNzaW9uKTsKICAgIHJldHVybiAoYXJndW1lbnRzKSA9PgogICAgICAgIG5ldyBEYXJ0WWllbGQobWFrZUV4cHJlc3Npb24oYXJndW1lbnRzKSwgbm9kZS5oYXNTdGFyKTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdFRocm93KFRocm93IG5vZGUpIHsKICAgIEluc3RhbnRpYXRvciBtYWtlRXhwcmVzc2lvbiA9IHZpc2l0KG5vZGUuZXhwcmVzc2lvbik7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgPT4gbmV3IFRocm93KG1ha2VFeHByZXNzaW9uKGFyZ3VtZW50cykpOwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0VHJ5KFRyeSBub2RlKSB7CiAgICBJbnN0YW50aWF0b3IgbWFrZUJvZHkgPSB2aXNpdChub2RlLmJvZHkpOwogICAgSW5zdGFudGlhdG9yIG1ha2VDYXRjaCA9IHZpc2l0TnVsbGFibGUobm9kZS5jYXRjaFBhcnQpOwogICAgSW5zdGFudGlhdG9yIG1ha2VGaW5hbGx5ID0gdmlzaXROdWxsYWJsZShub2RlLmZpbmFsbHlQYXJ0KTsKICAgIHJldHVybiAoYXJndW1lbnRzKSA9PiBuZXcgVHJ5KAogICAgICAgIG1ha2VCb2R5KGFyZ3VtZW50cyksIG1ha2VDYXRjaChhcmd1bWVudHMpLCBtYWtlRmluYWxseShhcmd1bWVudHMpKTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdENhdGNoKENhdGNoIG5vZGUpIHsKICAgIEluc3RhbnRpYXRvciBtYWtlRGVjbGFyYXRpb24gPSB2aXNpdChub2RlLmRlY2xhcmF0aW9uKTsKICAgIEluc3RhbnRpYXRvciBtYWtlQm9keSA9IHZpc2l0KG5vZGUuYm9keSk7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgPT4KICAgICAgICBuZXcgQ2F0Y2gobWFrZURlY2xhcmF0aW9uKGFyZ3VtZW50cyksIG1ha2VCb2R5KGFyZ3VtZW50cykpOwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0U3dpdGNoKFN3aXRjaCBub2RlKSB7CiAgICBJbnN0YW50aWF0b3IgbWFrZUtleSA9IHZpc2l0KG5vZGUua2V5KTsKICAgIEl0ZXJhYmxlPEluc3RhbnRpYXRvcj4gbWFrZUNhc2VzID0gbm9kZS5jYXNlcy5tYXAodmlzaXQpOwogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgcmV0dXJuIG5ldyBTd2l0Y2goCiAgICAgICAgICBtYWtlS2V5KGFyZ3VtZW50cyksCiAgICAgICAgICBtYWtlQ2FzZXMKICAgICAgICAgICAgICAubWFwPFN3aXRjaENsYXVzZT4oKEluc3RhbnRpYXRvciBtYWtlQ2FzZSkgPT4gbWFrZUNhc2UoYXJndW1lbnRzKSkKICAgICAgICAgICAgICAudG9MaXN0KCkpOwogICAgfTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdENhc2UoQ2FzZSBub2RlKSB7CiAgICBJbnN0YW50aWF0b3IgbWFrZUV4cHJlc3Npb24gPSB2aXNpdChub2RlLmV4cHJlc3Npb24pOwogICAgSW5zdGFudGlhdG9yIG1ha2VCb2R5ID0gdmlzaXQobm9kZS5ib2R5KTsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIHJldHVybiBuZXcgQ2FzZShtYWtlRXhwcmVzc2lvbihhcmd1bWVudHMpLCBtYWtlQm9keShhcmd1bWVudHMpKTsKICAgIH07CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXREZWZhdWx0KERlZmF1bHQgbm9kZSkgewogICAgSW5zdGFudGlhdG9yIG1ha2VCb2R5ID0gdmlzaXQobm9kZS5ib2R5KTsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIHJldHVybiBuZXcgRGVmYXVsdChtYWtlQm9keShhcmd1bWVudHMpKTsKICAgIH07CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRGdW5jdGlvbkRlY2xhcmF0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24gbm9kZSkgewogICAgSW5zdGFudGlhdG9yIG1ha2VOYW1lID0gdmlzaXQobm9kZS5uYW1lKTsKICAgIEluc3RhbnRpYXRvciBtYWtlRnVuY3Rpb24gPSB2aXNpdChub2RlLmZ1bmN0aW9uKTsKICAgIHJldHVybiAoYXJndW1lbnRzKSA9PgogICAgICAgIG5ldyBGdW5jdGlvbkRlY2xhcmF0aW9uKG1ha2VOYW1lKGFyZ3VtZW50cyksIG1ha2VGdW5jdGlvbihhcmd1bWVudHMpKTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdExhYmVsZWRTdGF0ZW1lbnQoTGFiZWxlZFN0YXRlbWVudCBub2RlKSB7CiAgICBJbnN0YW50aWF0b3IgbWFrZUJvZHkgPSB2aXNpdChub2RlLmJvZHkpOwogICAgcmV0dXJuIChhcmd1bWVudHMpID0+IG5ldyBMYWJlbGVkU3RhdGVtZW50KG5vZGUubGFiZWwsIG1ha2VCb2R5KGFyZ3VtZW50cykpOwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0TGl0ZXJhbFN0YXRlbWVudChMaXRlcmFsU3RhdGVtZW50IG5vZGUpID0+CiAgICAgIFRPRE8oJ3Zpc2l0TGl0ZXJhbFN0YXRlbWVudCcpOwogIEluc3RhbnRpYXRvciB2aXNpdExpdGVyYWxFeHByZXNzaW9uKExpdGVyYWxFeHByZXNzaW9uIG5vZGUpID0+CiAgICAgIFRPRE8oJ3Zpc2l0TGl0ZXJhbEV4cHJlc3Npb24nKTsKCiAgSW5zdGFudGlhdG9yIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qgbm9kZSkgewogICAgTGlzdDxJbnN0YW50aWF0b3I+IGRlY2xhcmF0aW9uTWFrZXJzID0KICAgICAgICBub2RlLmRlY2xhcmF0aW9ucy5tYXAodmlzaXQpLnRvTGlzdCgpOwogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgTGlzdDxWYXJpYWJsZUluaXRpYWxpemF0aW9uPiBkZWNsYXJhdGlvbnMgPSA8VmFyaWFibGVJbml0aWFsaXphdGlvbj5bXTsKICAgICAgZm9yIChJbnN0YW50aWF0b3IgaW5zdGFudGlhdG9yIGluIGRlY2xhcmF0aW9uTWFrZXJzKSB7CiAgICAgICAgdmFyIHJlc3VsdCA9IGluc3RhbnRpYXRvcihhcmd1bWVudHMpOwogICAgICAgIGRlY2xhcmF0aW9ucy5hZGQocmVzdWx0KTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGRlY2xhcmF0aW9ucyk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0QXNzaWdubWVudChBc3NpZ25tZW50IG5vZGUpIHsKICAgIEluc3RhbnRpYXRvciBtYWtlTGVmdEhhbmRTaWRlID0gdmlzaXQobm9kZS5sZWZ0SGFuZFNpZGUpOwogICAgU3RyaW5nIG9wID0gbm9kZS5vcDsKICAgIEluc3RhbnRpYXRvciBtYWtlVmFsdWUgPSB2aXNpdE51bGxhYmxlKG5vZGUudmFsdWUpOwogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgcmV0dXJuIG5ldyBBc3NpZ25tZW50LmNvbXBvdW5kKAogICAgICAgICAgbWFrZUxlZnRIYW5kU2lkZShhcmd1bWVudHMpLCBvcCwgbWFrZVZhbHVlKGFyZ3VtZW50cykpOwogICAgfTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdFZhcmlhYmxlSW5pdGlhbGl6YXRpb24oVmFyaWFibGVJbml0aWFsaXphdGlvbiBub2RlKSB7CiAgICBJbnN0YW50aWF0b3IgbWFrZURlY2xhcmF0aW9uID0gdmlzaXQobm9kZS5kZWNsYXJhdGlvbik7CiAgICBJbnN0YW50aWF0b3IgbWFrZVZhbHVlID0gdmlzaXROdWxsYWJsZShub2RlLnZhbHVlKTsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIHJldHVybiBuZXcgVmFyaWFibGVJbml0aWFsaXphdGlvbigKICAgICAgICAgIG1ha2VEZWNsYXJhdGlvbihhcmd1bWVudHMpLCBtYWtlVmFsdWUoYXJndW1lbnRzKSk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0Q29uZGl0aW9uYWwoQ29uZGl0aW9uYWwgY29uZCkgewogICAgSW5zdGFudGlhdG9yIG1ha2VDb25kaXRpb24gPSB2aXNpdChjb25kLmNvbmRpdGlvbik7CiAgICBJbnN0YW50aWF0b3IgbWFrZVRoZW4gPSB2aXNpdChjb25kLnRoZW4pOwogICAgSW5zdGFudGlhdG9yIG1ha2VPdGhlcndpc2UgPSB2aXNpdChjb25kLm90aGVyd2lzZSk7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgPT4gbmV3IENvbmRpdGlvbmFsKG1ha2VDb25kaXRpb24oYXJndW1lbnRzKSwKICAgICAgICBtYWtlVGhlbihhcmd1bWVudHMpLCBtYWtlT3RoZXJ3aXNlKGFyZ3VtZW50cykpOwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0TmV3KE5ldyBub2RlKSA9PgogICAgICBoYW5kbGVDYWxsT3JOZXcobm9kZSwgKHRhcmdldCwgYXJndW1lbnRzKSA9PiBuZXcgTmV3KHRhcmdldCwgYXJndW1lbnRzKSk7CgogIEluc3RhbnRpYXRvciB2aXNpdENhbGwoQ2FsbCBub2RlKSA9PgogICAgICBoYW5kbGVDYWxsT3JOZXcobm9kZSwgKHRhcmdldCwgYXJndW1lbnRzKSA9PiBuZXcgQ2FsbCh0YXJnZXQsIGFyZ3VtZW50cykpOwoKICBJbnN0YW50aWF0b3IgaGFuZGxlQ2FsbE9yTmV3KENhbGwgbm9kZSwgZmluaXNoKHRhcmdldCwgYXJndW1lbnRzKSkgewogICAgSW5zdGFudGlhdG9yIG1ha2VUYXJnZXQgPSB2aXNpdChub2RlLnRhcmdldCk7CiAgICBJdGVyYWJsZTxJbnN0YW50aWF0b3I+IGFyZ3VtZW50TWFrZXJzID0KICAgICAgICBub2RlLmFyZ3VtZW50cy5tYXAodmlzaXRTcGxheWFibGVFeHByZXNzaW9uKS50b0xpc3QoKTsKCiAgICAvLyBUT0RPKHNyYSk6IEF2b2lkIGNvcHlpbmcgY2FsbCBhcmd1bWVudHMgaWYgbm8gaW50ZXJwb2xhdGlvbiBvciBmb3JjZWQKICAgIC8vIGNvcHlpbmcuCiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICBOb2RlIHRhcmdldCA9IG1ha2VUYXJnZXQoYXJndW1lbnRzKTsKICAgICAgTGlzdDxFeHByZXNzaW9uPiBjYWxsQXJndW1lbnRzID0gPEV4cHJlc3Npb24+W107CiAgICAgIGZvciAoSW5zdGFudGlhdG9yIGluc3RhbnRpYXRvciBpbiBhcmd1bWVudE1ha2VycykgewogICAgICAgIHZhciByZXN1bHQgPSBpbnN0YW50aWF0b3IoYXJndW1lbnRzKTsKICAgICAgICBpZiAocmVzdWx0IGlzIEl0ZXJhYmxlKSB7CiAgICAgICAgICBjYWxsQXJndW1lbnRzLmFkZEFsbChyZXN1bHQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjYWxsQXJndW1lbnRzLmFkZChyZXN1bHQpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZmluaXNoKHRhcmdldCwgY2FsbEFyZ3VtZW50cy50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKSk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0QmluYXJ5KEJpbmFyeSBub2RlKSB7CiAgICBJbnN0YW50aWF0b3IgbWFrZUxlZnQgPSB2aXNpdChub2RlLmxlZnQpOwogICAgSW5zdGFudGlhdG9yIG1ha2VSaWdodCA9IHZpc2l0KG5vZGUucmlnaHQpOwogICAgU3RyaW5nIG9wID0gbm9kZS5vcDsKICAgIHJldHVybiAoYXJndW1lbnRzKSA9PgogICAgICAgIG5ldyBCaW5hcnkob3AsIG1ha2VMZWZ0KGFyZ3VtZW50cyksIG1ha2VSaWdodChhcmd1bWVudHMpKTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdFByZWZpeChQcmVmaXggbm9kZSkgewogICAgSW5zdGFudGlhdG9yIG1ha2VPcGVyYW5kID0gdmlzaXQobm9kZS5hcmd1bWVudCk7CiAgICBTdHJpbmcgb3AgPSBub2RlLm9wOwogICAgcmV0dXJuIChhcmd1bWVudHMpID0+IG5ldyBQcmVmaXgob3AsIG1ha2VPcGVyYW5kKGFyZ3VtZW50cykpOwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0UG9zdGZpeChQb3N0Zml4IG5vZGUpIHsKICAgIEluc3RhbnRpYXRvciBtYWtlT3BlcmFuZCA9IHZpc2l0KG5vZGUuYXJndW1lbnQpOwogICAgU3RyaW5nIG9wID0gbm9kZS5vcDsKICAgIHJldHVybiAoYXJndW1lbnRzKSA9PiBuZXcgUG9zdGZpeChvcCwgbWFrZU9wZXJhbmQoYXJndW1lbnRzKSk7CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRWYXJpYWJsZVVzZShWYXJpYWJsZVVzZSBub2RlKSA9PgogICAgICAoYXJndW1lbnRzKSA9PiBuZXcgVmFyaWFibGVVc2Uobm9kZS5uYW1lKTsKCiAgSW5zdGFudGlhdG9yIHZpc2l0VGhpcyhUaGlzIG5vZGUpID0+IChhcmd1bWVudHMpID0+IG5ldyBUaGlzKCk7CgogIEluc3RhbnRpYXRvciB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24oVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSA9PgogICAgICAoYXJndW1lbnRzKSA9PiBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihub2RlLm5hbWUpOwoKICBJbnN0YW50aWF0b3IgdmlzaXRQYXJhbWV0ZXIoUGFyYW1ldGVyIG5vZGUpID0+CiAgICAgIChhcmd1bWVudHMpID0+IG5ldyBQYXJhbWV0ZXIobm9kZS5uYW1lKTsKCiAgSW5zdGFudGlhdG9yIHZpc2l0QWNjZXNzKFByb3BlcnR5QWNjZXNzIG5vZGUpIHsKICAgIEluc3RhbnRpYXRvciBtYWtlUmVjZWl2ZXIgPSB2aXNpdChub2RlLnJlY2VpdmVyKTsKICAgIEluc3RhbnRpYXRvciBtYWtlU2VsZWN0b3IgPSB2aXNpdChub2RlLnNlbGVjdG9yKTsKICAgIHJldHVybiAoYXJndW1lbnRzKSA9PgogICAgICAgIG5ldyBQcm9wZXJ0eUFjY2VzcyhtYWtlUmVjZWl2ZXIoYXJndW1lbnRzKSwgbWFrZVNlbGVjdG9yKGFyZ3VtZW50cykpOwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0TmFtZWRGdW5jdGlvbihOYW1lZEZ1bmN0aW9uIG5vZGUpIHsKICAgIEluc3RhbnRpYXRvciBtYWtlRGVjbGFyYXRpb24gPSB2aXNpdChub2RlLm5hbWUpOwogICAgSW5zdGFudGlhdG9yIG1ha2VGdW5jdGlvbiA9IHZpc2l0KG5vZGUuZnVuY3Rpb24pOwogICAgcmV0dXJuIChhcmd1bWVudHMpID0+CiAgICAgICAgbmV3IE5hbWVkRnVuY3Rpb24obWFrZURlY2xhcmF0aW9uKGFyZ3VtZW50cyksIG1ha2VGdW5jdGlvbihhcmd1bWVudHMpKTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdEZ1bihGdW4gbm9kZSkgewogICAgTGlzdDxJbnN0YW50aWF0b3I+IHBhcmFtTWFrZXJzID0gbm9kZS5wYXJhbXMubWFwKHZpc2l0U3BsYXlhYmxlKS50b0xpc3QoKTsKICAgIEluc3RhbnRpYXRvciBtYWtlQm9keSA9IHZpc2l0KG5vZGUuYm9keSk7CiAgICAvLyBUT0RPKHNyYSk6IEF2b2lkIGNvcHlpbmcgcGFyYW1zIGlmIG5vIGludGVycG9sYXRpb24gb3IgZm9yY2VkIGNvcHlpbmcuCiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICBMaXN0PFBhcmFtZXRlcj4gcGFyYW1zID0gPFBhcmFtZXRlcj5bXTsKICAgICAgZm9yIChJbnN0YW50aWF0b3IgaW5zdGFudGlhdG9yIGluIHBhcmFtTWFrZXJzKSB7CiAgICAgICAgdmFyIHJlc3VsdCA9IGluc3RhbnRpYXRvcihhcmd1bWVudHMpOwogICAgICAgIGlmIChyZXN1bHQgaXMgSXRlcmFibGUpIHsKICAgICAgICAgIHBhcmFtcy5hZGRBbGwocmVzdWx0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcGFyYW1zLmFkZChyZXN1bHQpOwogICAgICAgIH0KICAgICAgfQogICAgICBTdGF0ZW1lbnQgYm9keSA9IG1ha2VCb2R5KGFyZ3VtZW50cyk7CiAgICAgIHJldHVybiBuZXcgRnVuKHBhcmFtcywgYm9keSk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0RGVmZXJyZWRFeHByZXNzaW9uKERlZmVycmVkRXhwcmVzc2lvbiBub2RlKSA9PiBzYW1lKG5vZGUpOwoKICBJbnN0YW50aWF0b3IgdmlzaXREZWZlcnJlZE51bWJlcihEZWZlcnJlZE51bWJlciBub2RlKSA9PiBzYW1lKG5vZGUpOwoKICBJbnN0YW50aWF0b3IgdmlzaXREZWZlcnJlZFN0cmluZyhEZWZlcnJlZFN0cmluZyBub2RlKSA9PiAoYXJndW1lbnRzKSA9PiBub2RlOwoKICBJbnN0YW50aWF0b3IgdmlzaXRMaXRlcmFsQm9vbChMaXRlcmFsQm9vbCBub2RlKSA9PgogICAgICAoYXJndW1lbnRzKSA9PiBuZXcgTGl0ZXJhbEJvb2wobm9kZS52YWx1ZSk7CgogIEluc3RhbnRpYXRvciB2aXNpdExpdGVyYWxTdHJpbmcoTGl0ZXJhbFN0cmluZyBub2RlKSA9PgogICAgICAoYXJndW1lbnRzKSA9PiBuZXcgTGl0ZXJhbFN0cmluZyhub2RlLnZhbHVlKTsKCiAgSW5zdGFudGlhdG9yIHZpc2l0TGl0ZXJhbE51bWJlcihMaXRlcmFsTnVtYmVyIG5vZGUpID0+CiAgICAgIChhcmd1bWVudHMpID0+IG5ldyBMaXRlcmFsTnVtYmVyKG5vZGUudmFsdWUpOwoKICBJbnN0YW50aWF0b3IgdmlzaXRMaXRlcmFsTnVsbChMaXRlcmFsTnVsbCBub2RlKSA9PgogICAgICAoYXJndW1lbnRzKSA9PiBuZXcgTGl0ZXJhbE51bGwoKTsKCiAgSW5zdGFudGlhdG9yIHZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbihTdHJpbmdDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIExpc3Q8SW5zdGFudGlhdG9yPiBwYXJ0TWFrZXJzID0KICAgICAgICBub2RlLnBhcnRzLm1hcCh2aXNpdCkudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICBMaXN0PExpdGVyYWw+IHBhcnRzID0gcGFydE1ha2VycwogICAgICAgICAgLm1hcCgoSW5zdGFudGlhdG9yIGluc3RhbnRpYXRvcikgPT4gaW5zdGFudGlhdG9yKGFyZ3VtZW50cykpCiAgICAgICAgICAudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgICAgIHJldHVybiBuZXcgU3RyaW5nQ29uY2F0ZW5hdGlvbihwYXJ0cyk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0TmFtZShOYW1lIG5vZGUpID0+IHNhbWUobm9kZSk7CgogIEluc3RhbnRpYXRvciB2aXNpdFBhcmVudGhlc2VzKFBhcmVudGhlc2VzIG5vZGUpIHsKICAgIEluc3RhbnRpYXRvciBtYWtlRW5jbG9zZWQgPSB2aXNpdChub2RlLmVuY2xvc2VkKTsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIEV4cHJlc3Npb24gZW5jbG9zZWQgPSBtYWtlRW5jbG9zZWQoYXJndW1lbnRzKTsKICAgICAgcmV0dXJuIFBhcmVudGhlc2VzKGVuY2xvc2VkKTsKICAgIH07CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRBcnJheUluaXRpYWxpemVyKEFycmF5SW5pdGlhbGl6ZXIgbm9kZSkgewogICAgLy8gVE9ETyhzcmEpOiBJbXBsZW1lbnQgc3BsaWNpbmc/CiAgICBMaXN0PEluc3RhbnRpYXRvcj4gZWxlbWVudE1ha2VycyA9CiAgICAgICAgbm9kZS5lbGVtZW50cy5tYXAodmlzaXQpLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgTGlzdDxFeHByZXNzaW9uPiBlbGVtZW50cyA9IGVsZW1lbnRNYWtlcnMKICAgICAgICAgIC5tYXA8RXhwcmVzc2lvbj4oCiAgICAgICAgICAgICAgKEluc3RhbnRpYXRvciBpbnN0YW50aWF0b3IpID0+IGluc3RhbnRpYXRvcihhcmd1bWVudHMpKQogICAgICAgICAgLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgICByZXR1cm4gbmV3IEFycmF5SW5pdGlhbGl6ZXIoZWxlbWVudHMpOwogICAgfTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdEFycmF5SG9sZShBcnJheUhvbGUgbm9kZSkgewogICAgcmV0dXJuIChhcmd1bWVudHMpID0+IG5ldyBBcnJheUhvbGUoKTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdE9iamVjdEluaXRpYWxpemVyKE9iamVjdEluaXRpYWxpemVyIG5vZGUpIHsKICAgIExpc3Q8SW5zdGFudGlhdG9yPiBwcm9wZXJ0eU1ha2VycyA9CiAgICAgICAgbm9kZS5wcm9wZXJ0aWVzLm1hcCh2aXNpdFNwbGF5YWJsZSkudG9MaXN0KCk7CiAgICBib29sIGlzT25lTGluZXIgPSBub2RlLmlzT25lTGluZXI7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICBMaXN0PFByb3BlcnR5PiBwcm9wZXJ0aWVzID0gPFByb3BlcnR5PltdOwogICAgICBmb3IgKEluc3RhbnRpYXRvciBpbnN0YW50aWF0b3IgaW4gcHJvcGVydHlNYWtlcnMpIHsKICAgICAgICB2YXIgcmVzdWx0ID0gaW5zdGFudGlhdG9yKGFyZ3VtZW50cyk7CiAgICAgICAgaWYgKHJlc3VsdCBpcyBJdGVyYWJsZSkgewogICAgICAgICAgcHJvcGVydGllcy5hZGRBbGwocmVzdWx0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcHJvcGVydGllcy5hZGQocmVzdWx0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBPYmplY3RJbml0aWFsaXplcihwcm9wZXJ0aWVzLCBpc09uZUxpbmVyOiBpc09uZUxpbmVyKTsKICAgIH07CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRQcm9wZXJ0eShQcm9wZXJ0eSBub2RlKSB7CiAgICBJbnN0YW50aWF0b3IgbWFrZU5hbWUgPSB2aXNpdChub2RlLm5hbWUpOwogICAgSW5zdGFudGlhdG9yIG1ha2VWYWx1ZSA9IHZpc2l0KG5vZGUudmFsdWUpOwogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgcmV0dXJuIG5ldyBQcm9wZXJ0eShtYWtlTmFtZShhcmd1bWVudHMpLCBtYWtlVmFsdWUoYXJndW1lbnRzKSk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0UmVnRXhwTGl0ZXJhbChSZWdFeHBMaXRlcmFsIG5vZGUpID0+CiAgICAgIChhcmd1bWVudHMpID0+IG5ldyBSZWdFeHBMaXRlcmFsKG5vZGUucGF0dGVybik7CgogIEluc3RhbnRpYXRvciB2aXNpdENvbW1lbnQoQ29tbWVudCBub2RlKSA9PiBUT0RPKCd2aXNpdENvbW1lbnQnKTsKCiAgSW5zdGFudGlhdG9yIHZpc2l0QXdhaXQoQXdhaXQgbm9kZSkgewogICAgSW5zdGFudGlhdG9yIG1ha2VFeHByZXNzaW9uID0gdmlzaXQobm9kZS5leHByZXNzaW9uKTsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIHJldHVybiBuZXcgQXdhaXQobWFrZUV4cHJlc3Npb24oYXJndW1lbnRzKSk7CiAgICB9OwogIH0KfQoKLyoqCiAqIEludGVycG9sYXRlZE5vZGVBbmFseXNpcyBkZXRlcm1pbmVzIHdoaWNoIEFTVCB0cmVlcyBjb250YWluCiAqIFtJbnRlcnBvbGF0ZWROb2RlXXMsIGFuZCB0aGUgbmFtZXMgb2YgdGhlIG5hbWVkIGludGVycG9sYXRlZCBub2Rlcy4KICovCmNsYXNzIEludGVycG9sYXRlZE5vZGVBbmFseXNpcyBleHRlbmRzIEJhc2VWaXNpdG9yIHsKICBmaW5hbCBTZXQ8Tm9kZT4gY29udGFpbnNJbnRlcnBvbGF0ZWROb2RlID0gbmV3IFNldDxOb2RlPigpOwogIGZpbmFsIFNldDxTdHJpbmc+IGhvbGVOYW1lcyA9IG5ldyBTZXQ8U3RyaW5nPigpOwogIGludCBjb3VudCA9IDA7CgogIEludGVycG9sYXRlZE5vZGVBbmFseXNpcygpOwoKICBib29sIGNvbnRhaW5zSW50ZXJwb2xhdGVkTm9kZXMoTm9kZSBub2RlKSA9PgogICAgICBjb250YWluc0ludGVycG9sYXRlZE5vZGUuY29udGFpbnMobm9kZSk7CgogIHZvaWQgdmlzaXQoTm9kZSBub2RlKSB7CiAgICBub2RlLmFjY2VwdCh0aGlzKTsKICB9CgogIHZvaWQgdmlzaXROb2RlKE5vZGUgbm9kZSkgewogICAgaW50IGJlZm9yZSA9IGNvdW50OwogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogICAgaWYgKGNvdW50ICE9IGJlZm9yZSkgY29udGFpbnNJbnRlcnBvbGF0ZWROb2RlLmFkZChub2RlKTsKICB9CgogIHZpc2l0SW50ZXJwb2xhdGVkTm9kZShJbnRlcnBvbGF0ZWROb2RlIG5vZGUpIHsKICAgIGNvbnRhaW5zSW50ZXJwb2xhdGVkTm9kZS5hZGQobm9kZSk7CiAgICBpZiAobm9kZS5pc05hbWVkKSBob2xlTmFtZXMuYWRkKG5vZGUubmFtZU9yUG9zaXRpb24pOwogICAgKytjb3VudDsKICB9Cn0KgxQATk48ARABGEtKARUBNSgEAT8YSSwVBAE0JwQBPhhKKxUEAgEEUE9DEgQRFxsYEgEdASQBKRouASI6RhAEASoXHRwfJCEnBAEpFx4cHiQhJwQBIC0xHCoEARQtNSs4Ni8EATwGTyokHTlQMCMIJgYeL1AyG1BEBkoYTkUGJAQCAQRJRRQEPQEEUVFGBEoYAUYBBjcGMAEkGicTBAEhEwQBPisBIkEgBhcEASonGAQBK04YBAEmQgQBSgE/KiMEAUcqKwQBSi4ZLS1FE08HBAFMLhktLk0TTwcEATUqMBsvKC9HRD8KAT8kCQYYBAFELhktSU0HBAFILhktASQsOFAsCAE8IQcEAUY5UDsuGS0tQRNMBwQBSC4ZLTUTTQcEATQpMBsvJi49RDwKAT4jCQYYBAEsJzkZMhcsICMRLgoIATkmCCYHBAEoJz8ZMhcsICMkLhEuCggBOSYIJAcEAUQ7GTcHBAE7KwEiNDINIgYEAThKNDAbLykvRzstCQYBOi44GTAfISYRKwoITwcEASg4LjgZQyUHBAEkNkA6LhlENwcEASg+Mi4ZSyAHBAEWMQQBKDguGUcHBAEiLjgZRAcEAS81ASkyASo9QQQBMDoaQAQBKDpABAEkLjxAI0wEASg8LhpEBAEqLD4ZGR4UURoHBAEmOi4ZRwcEASwuGS8HBAFELjYaTwQBPi5RBAE/JUEmAUwrLxlOPS4iCDgHBAEyPhk4GSZCBwQBSjw4GSk9BwQBNDguOEQ4BAElUAEnUQFHMiw/AU0QGSs3Oi4iKBElCghEBwQBKi4wGRpDBAEqNRlCBAEsNRlDBAE1MQFCAUU5ATEvATI2NhpOBAE4NTYaUAQBJE8uThkuNy4iIREeCggsJAcEAU8BRwFQATUyATk0ATk0ATUoAUQkNxknRyQtBwQBMwE0Nhk1JAcEAT4mJzoZMBxGJC0HBAEwKwQBQCg2JxkwOi4iJREiCghIBwQBLi4wGUYHBAE5NgFDASg6GTMHBAIBBD9HBDU+MxEBHgEvLwEaFwQBHhgePQQBMSg6DQQCASBwYWNrYWdlOmpzX2FzdC9zcmMvdGVtcGxhdGUuZGFydChzZGtyb290Oi9wa2cvanNfYXN0L2xpYi9zcmMvYnVpbGRlci5kYXJ0wADJ2i8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBVdGlsaXRpZXMgZm9yIGJ1aWxkaW5nIEpTIEFTVHMgYXQgcnVudGltZS4gIENvbnRhaW5zIGEgYnVpbGRlciBjbGFzcwovLyBhbmQgYSBwYXJzZXIgdGhhdCBwYXJzZXMgcGFydCBvZiB0aGUgbGFuZ3VhZ2UuCgpwYXJ0IG9mIGpzX2FzdDsKCi8qKgogKiBHbG9iYWwgdGVtcGxhdGUgbWFuYWdlci4gIFdlIHNob3VsZCBhaW0gdG8gaGF2ZSBhIGZpeGVkIG51bWJlciBvZgogKiB0ZW1wbGF0ZXMuIFRoaXMgaW1wbGllcyB0aGF0IHdlIGRvIG5vdCB1c2UganMoJ3h4eCcpIHRvIHBhcnNlIHRleHQgdGhhdCBpcwogKiBjb25zdHJ1Y3RlZCBmcm9tIHZhbHVlcyB0aGF0IGRlcGVuZCBvbiBuYW1lcyBpbiB0aGUgRGFydCBwcm9ncmFtLgogKgogKiBUT0RPKHNyYSk6IEZpbmQgdGhlIHJlbWFpbmluZyBwbGFjZXMgd2hlcmUganMoJ3h4eCcpIHVzZWQgdG8gcGFyc2UgYW4KICogdW5ib3VuZGVkIG51bWJlciBvZiBleHByZXNzaW9uLCBvciBpbnN0aXR1dGUgYSBjYWNoZSBwb2xpY3kuCiAqLwpUZW1wbGF0ZU1hbmFnZXIgdGVtcGxhdGVNYW5hZ2VyID0gbmV3IFRlbXBsYXRlTWFuYWdlcigpOwoKLyoqCgpbanNdIGlzIGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIEpzQnVpbGRlci4gIEpzQnVpbGRlciBpcyBhIHNldCBvZiBjb252ZW5pZW5jZXMKZm9yIGNvbnN0cnVjdGluZyBKYXZhU2NyaXB0IEFTVHMuCgpbc3RyaW5nXSBhbmQgW251bWJlcl0gYXJlIHVzZWQgdG8gY3JlYXRlIGxlYWYgQVNUIG5vZGVzOgoKICAgIHZhciBzID0ganMuc3RyaW5nKCdoZWxsbycpOyAgICAvLyAgcyA9IG5ldyBMaXRlcmFsU3RyaW5nKCciaGVsbG8iJykKICAgIHZhciBuID0ganMubnVtYmVyKDEyMyk7ICAgICAgICAvLyAgbiA9IG5ldyBMaXRlcmFsTnVtYmVyKDEyMykKCkluIHRoZSBsaW5lIGFib3ZlIGBhIC0tPiBiYCBtZWFucyBEYXJ0IGV4cHJlc3Npb24gYGFgIGV2YWx1YXRlcyB0byBhIEphdmFTY3JpcHQKQVNUIHRoYXQgd291bGQgcHJldHR5LXByaW50IGFzIGBiYC4KClRoZSBbY2FsbF0gbWV0aG9kIGNvbnN0cnVjdHMgYW4gRXhwcmVzc2lvbiBBU1QuCgpObyBhcmd1bWVudAoKICAgIGpzKCd3aW5kb3cuYWxlcnQoImhlbGxvIiknKSAgLS0+ICB3aW5kb3cuYWxlcnQoImhlbGxvIikKClRoZSBpbnB1dCB0ZXh0IGNhbiBjb250YWluIHBsYWNlaG9sZGVycyBgI2AgdGhhdCBhcmUgcmVwbGFjZWQgd2l0aCBwcm92aWRlZAphcmd1bWVudHMuICBBIHNpbmdsZSBhcmd1bWVudCBjYW4gYmUgcGFzc2VkIGRpcmVjdGx5OgoKICAgIGpzKCd3aW5kb3cuYWxlcnQoIyknLCBzKSAgIC0tPiAgd2luZG93LmFsZXJ0KCJoZWxsbyIpCgpNdWx0aXBsZSBhcmd1bWVudHMgYXJlIHBhc3NlZCBhcyBhIGxpc3Q6CgogICAganMoJyMgKyAjJywgW3MsIHNdKSAgLS0+ICAiaGVsbG8iICsgImhlbGxvIgoKVGhlIFtzdGF0ZW1lbnRdIG1ldGhvZCBjb25zdHJ1Y3RzIGEgU3RhdGVtZW50IEFTVCwgYnV0IGlzIG90aGVyd2lzZSBsaWtlIHRoZQpbY2FsbF0gbWV0aG9kLiAgVGhpcyBjb25zdHJ1Y3RzIGEgUmV0dXJuIEFTVDoKCiAgICB2YXIgcmV0ID0ganMuc3RhdGVtZW50KCdyZXR1cm4gIzsnLCBuKTsgIC0tPiAgcmV0dXJuIDEyMzsKCkEgcGxhY2Vob2xkZXIgaW4gYSBTdGF0ZW1lbnQgY29udGV4dCBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgc2VtaWNvbG9uICc7Jy4gIFlvdQpjYW4gdGhpbmsgb2YgYSBzdGF0ZW1lbnQgcGxhY2Vob2xkZXIgYXMgYmVpbmcgYCM7YCB0byBleHBsYWluIHdoeSB0aGUgb3V0cHV0CnN0aWxsIGhhcyBvbmUgc2VtaWNvbG9uOgoKICAgIGpzLnN0YXRlbWVudCgnaWYgKGhhcHB5KSAjOycsIHJldCkKICAgIC0tPgogICAgaWYgKGhhcHB5KQogICAgICByZXR1cm4gMTIzOwoKSWYgdGhlIHBsYWNlaG9sZGVyIGlzIG5vdCBmb2xsb3dlZCBieSBhIHNlbWljb2xvbiwgaXQgaXMgcGFydCBvZiBhbiBleHByZXNzaW9uLgpIZXJlIHRoZSBwbGFjZWhvbGRlciBpcyBpbiB0aGUgcG9zaXRpb24gb2YgdGhlIGZ1bmN0aW9uIGluIGEgZnVuY3Rpb24gY2FsbDoKCiAgICB2YXIgdkZvbyA9IG5ldyBWYXJpYWJsZVVzZSgnZm9vJyk7CiAgICBqcy5zdGF0ZW1lbnQoJ2lmIChoYXBweSkgIygiSGFwcHkhIiknLCB2Rm9vKQogICAgLS0+CiAgICBpZiAoaGFwcHkpCiAgICAgIGZvbygiSGFwcHkhIik7CgpHZW5lcmFsbHksIGEgcGxhY2Vob2xkZXIgaW4gYW4gZXhwcmVzc2lvbiBwb3NpdGlvbiByZXF1aXJlcyBhbiBFeHByZXNzaW9uIEFTVCBhcwphbiBhcmd1bWVudCBhbmQgYSBwbGFjZWhvbGRlciBpbiBhIHN0YXRlbWVudCBwb3NpdGlvbiByZXF1aXJlcyBhIFN0YXRlbWVudCBBU1QuCkFuIGV4cHJlc3Npb24gd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBTdGF0ZW1lbnQgaWYgbmVlZGVkIGJ5IGNyZWF0aW5nIGFuCkV4cHJlc3Npb25TdGF0ZW1lbnQuICBBIFN0cmluZyBhcmd1bWVudCB3aWxsIGJlIGNvbnZlcnRlZCBpbnRvIGEgVmFyaWFibGVVc2UgYW5kCnJlcXVpcmVzIHRoYXQgdGhlIHN0cmluZyBpcyBhIEphdmFTY3JpcHQgaWRlbnRpZmllci4KCiAgICBqcygnIyArIDEnLCB2Rm9vKSAgICAgICAtLT4gIGZvbyArIDEKICAgIGpzKCcjICsgMScsICdmb28nKSAgICAgIC0tPiAgZm9vICsgMQogICAganMoJyMgKyAxJywgJ2Zvby5iYXInKSAgLS0+ICBhc3NlcnRpb24gZmFpbHVyZQoKU29tZSBwbGFjZWhvbGRlciBwb3NpdGlvbnMgYXJlIF9zcGxpY2luZyBjb250ZXh0c18uICBBIGZ1bmN0aW9uIGFyZ3VtZW50IGxpc3QgaXMKYSBzcGxpY2luZyBleHByZXNzaW9uIGNvbnRleHQuICBBIHBsYWNlaG9sZGVyIGluIGEgc3BsaWNpbmcgZXhwcmVzc2lvbiBjb250ZXh0CmNhbiB0YWtlIGEgc2luZ2xlIEV4cHJlc3Npb24gKG9yIFN0cmluZywgY29udmVydGVkIHRvIFZhcmlhYmxlVXNlKSBvciBhbgpJdGVyYWJsZSBvZiBFeHByZXNzaW9ucyAoYW5kL29yIFN0cmluZ3MpLgoKICAgIC8vIG5vbi1zcGxpY2luZyBhcmd1bWVudDoKICAgIGpzKCcjKCMpJywgWydzYXknLCBzXSkgICAgICAgIC0tPiAgc2F5KCJoZWxsbyIpCiAgICAvLyBzcGxpY2luZyBhcmd1bWVudHM6CiAgICBqcygnIygjKScsIFsnc2F5JywgW11dKSAgICAgICAtLT4gIHNheSgpCiAgICBqcygnIygjKScsIFsnc2F5JywgW3NdXSkgICAgICAtLT4gIHNheSgiaGVsbG8iKQogICAganMoJyMoIyknLCBbJ3NheScsIFtzLCBuXV0pICAgLS0+ICBzYXkoImhlbGxvIiwgMTIzKQoKQSBzcGxpY2luZyBjb250ZXh0IGNhbiBiZSB1c2VkIHRvIGFwcGVuZCAnbGlzdHMnIGFuZCBhZGQgZXh0cmEgZWxlbWVudHM6CgogICAganMoJ2ZvbygjLCAjLCAxKScsIFsgWydhJywgbl0sIHNdKSAgICAgICAtLT4gIGZvbyhhLCAxMjMsICJoZWxsbyIsIDEpCiAgICBqcygnZm9vKCMsICMsIDEpJywgWyBbJ2EnLCBuXSwgW3MsIG5dXSkgIC0tPiAgZm9vKGEsIDEyMywgImhlbGxvIiwgMTIzLCAxKQogICAganMoJ2ZvbygjLCAjLCAxKScsIFsgW10sIFtzLCBuXV0pICAgICAgICAtLT4gIGZvbygiaGVsbG8iLCAxMjMsIDEpCiAgICBqcygnZm9vKCMsICMsIDEpJywgWyBbXSwgW10gXSkgICAgICAgICAgIC0tPiAgZm9vKDEpCgpUaGUgZ2VuZXJhdGlvbiBvZiBhIGNvbXBpbGUtdGltZSBvcHRpb25hbCBhcmd1bWVudCBleHByZXNzaW9uIGNhbiBiZSBjaG9zZW4gYnkKcHJvdmlkaW5nIGFuIGVtcHR5IG9yIHNpbmdsZXRvbiBsaXN0LgoKSW4gYWRkaXRpb24gdG8gRXhwcmVzc2lvbnMgYW5kIFN0YXRlbWVudHMsIHRoZXJlIGFyZSBQYXJhbWV0ZXJzLCB3aGljaCBvY2N1cgpvbmx5IGluIHRoZSBwYXJhbWV0ZXIgbGlzdCBvZiBhIGZ1bmN0aW9uIGV4cHJlc3Npb24gb3IgZGVjbGFyYXRpb24uClBsYWNlaG9sZGVycyBpbiBwYXJhbWV0ZXIgcG9zaXRpb25zIGJlaGF2ZSBsaWtlIHBsYWNlaG9sZGVycyBpbiBFeHByZXNzaW9uCnBvc2l0aW9ucywgZXhjZXB0IG9ubHkgUGFyYW1ldGVyIEFTVCBub2RlcyBhcmUgcGVybWl0dGVkLiAgU3RyaW5nIGFyZ3VtZW50cyBmb3IKcGFyYW1ldGVyIHBsYWNlaG9sZGVycyBhcmUgY29udmVydGVkIHRvIFBhcmFtZXRlciBBU1Qgbm9kZXMuCgogICAgdmFyIHBGb28gPSBuZXcgUGFyYW1ldGVyKCdmb28nKQogICAganMoJ2Z1bmN0aW9uKCMpIHsgcmV0dXJuICM7IH0nLCBbcEZvbywgdkZvb10pCiAgICAtLT4KICAgIGZ1bmN0aW9uKGZvbykgeyByZXR1cm4gZm9vOyB9CgpFeHByZXNzaW9ucyBhbmQgUGFyYW1ldGVycyBhcmUgbm90IGNvbXBhdGlibGUgd2l0aCBlYWNoIG90aGVyJ3MgY29udGV4dDoKCiAgICBqcygnZnVuY3Rpb24oIykgeyByZXR1cm4gIzsgfScsIFt2Rm9vLCB2Rm9vXSkgLS0+IGVycm9yCiAgICBqcygnZnVuY3Rpb24oIykgeyByZXR1cm4gIzsgfScsIFtwRm9vLCBwRm9vXSkgLS0+IGVycm9yCgpUaGUgcGFyYW1ldGVyIGNvbnRleHQgaXMgYSBzcGxpY2luZyBjb250ZXh0LiAgV2hlbiBjb21iaW5lZCB3aXRoIHRoZQpjb250ZXh0LXNlbnNpdGl2ZSBjb252ZXJzaW9uIG9mIFN0cmluZ3MsIHRoaXMgc2ltcGxpZmllcyB0aGUgY29uc3RydWN0aW9uIG9mCnRyYW1wb2xpbmUtbGlrZSBmdW5jdGlvbnM6CgogICAgdmFyIGFyZ3MgPSBbJ2EnLCAnYiddOwogICAganMoJ2Z1bmN0aW9uKCMpIHsgcmV0dXJuIGYodGhpcywgIyk7IH0nLCBbYXJncywgYXJnc10pCiAgICAtLT4KICAgIGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIGYodGhpcywgYSwgYik7IH0KCkEgc3RhdGVtZW50IHBsYWNlaG9sZGVyIGluIGEgQmxvY2sgaXMgYWxzbyBpbiBhIHNwbGljaW5nIGNvbnRleHQuICBJbiBhZGRpdGlvbgp0byBzcGxpY2luZyBJdGVyYWJsZXMsIHN0YXRlbWVudCBwbGFjZWhvbGRlcnMgaW4gYSBCbG9jayB3aWxsIGFsc28gc3BsaWNlIGEKQmxvY2sgb3IgYW4gRW1wdHlTdGF0ZW1lbnQuICBUaGlzIGZsYXR0ZW5zIG5lc3RlZCBibG9ja3MgYW5kIGFsbG93cyBibG9ja3MgdG8gYmUKYXBwZW5kZWQuCgogICAgdmFyIGIxID0ganMuc3RhdGVtZW50KCd7IDE7IDI7IH0nKTsKICAgIHZhciBzRW1wdHkgPSBuZXcgRW1wdHlzdGF0ZW1lbnQoKTsKICAgIGpzLnN0YXRlbWVudCgneyAjOyAjOyAjOyAjOyB9JywgW3NFbXB0eSwgYjEsIGIxLCBzRW1wdHldKQogICAgLS0+CiAgICB7IDE7IDI7IDE7IDI7IH0KCkEgcGxhY2Vob2xkZXIgaW4gdGhlIGNvbnRleHQgb2YgYW4gaWYtc3RhdGVtZW50IGNvbmRpdGlvbiBhbHNvIGFjY2VwdHMgYSBEYXJ0CmJvb2wgYXJndW1lbnQsIHdoaWNoIHNlbGVjdHMgdGhlIHRoZW4tcGFydCBvciBlbHNlLXBhcnQgb2YgdGhlIGlmLXN0YXRlbWVudDoKCiAgICBqcy5zdGF0ZW1lbnQoJ2lmICgjKSByZXR1cm47JywgdkZvbykgICAtLT4gIGlmIChmb28pIHJldHVybjsKICAgIGpzLnN0YXRlbWVudCgnaWYgKCMpIHJldHVybjsnLCB0cnVlKSAgIC0tPiAgcmV0dXJuOwogICAganMuc3RhdGVtZW50KCdpZiAoIykgcmV0dXJuOycsIGZhbHNlKSAgLS0+ICA7ICAgLy8gZW1wdHkgc3RhdGVtZW50CiAgICB2YXIgZVRydWUgPSBuZXcgTGl0ZXJhbEJvb2wodHJ1ZSk7CiAgICBqcy5zdGF0ZW1lbnQoJ2lmICgjKSByZXR1cm47JywgZVRydWUpICAtLT4gIGlmICh0cnVlKSByZXR1cm47CgpDb21iaW5lZCB3aXRoIGJsb2NrIHNwbGljaW5nLCBpZi1zdGF0ZW1lbnQgY29uZGl0aW9uIGNvbnRleHQgcGxhY2Vob2xkZXJzIGFsbG93cwp0aGUgY3JlYXRpb24gb2YgdGVtcGxhdGVzIHRoYXQgc2VsZWN0IGNvZGUgZGVwZW5kaW5nIG9uIHZhcmlhYmxlcy4KCiAgICBqcy5zdGF0ZW1lbnQoJ3sgMTsgaWYgKCMpIDI7IGVsc2UgeyAzOyA0OyB9IDU7fScsIHRydWUpCiAgICAtLT4geyAxOyAyOyA1OyB9CgogICAganMuc3RhdGVtZW50KCd7IDE7IGlmICgjKSAyOyBlbHNlIHsgMzsgNDsgfSA1O30nLCBmYWxzZSkKICAgIC0tPiB7IDE7IDM7IDQ7IDU7IH0KCkEgcGxhY2Vob2xkZXIgZm9sbG93aW5nIGEgcGVyaW9kIGluIGEgcHJvcGVydHkgYWNjZXNzIGlzIGluIGEgcHJvcGVydHkgYWNjZXNzCmNvbnRleHQuICBUaGlzIGlzIGp1c3QgbGlrZSBhbiBleHByZXNzaW9uIGNvbnRleHQsIGV4Y2VwdCBTdHJpbmcgYXJndW1lbnRzIGFyZQpjb252ZXJ0ZWQgdG8gSmF2YVNjcmlwdCBwcm9wZXJ0eSBhY2Nlc3Nlcy4gIEluIEphdmFTY3JpcHQsIGBhLmJgIGlzIHNob3J0LWhhbmQKZm9yIGBhWyJiIl1gOgoKICAgIGpzKCdhWyNdJywgdkZvbykgIC0tPiAgYVtmb29dCiAgICBqcygnYVsjXScsIHMpICAgICAtLT4gIGEuaGVsbG8gICAgKGkuZS4gYVsiaGVsbG8iXSkuCiAgICBqcygnYVsjXScsICd4JykgICAtLT4gIGFbeF0KCiAgICBqcygnYS4jJywgdkZvbykgICAtLT4gIGFbZm9vXQogICAganMoJ2EuIycsIHMpICAgICAgLS0+ICBhLmhlbGxvICAgIChpLmUuIGFbImhlbGxvIl0pCiAgICBqcygnYS4jJywgJ3gnKSAgICAtLT4gIGEueCAgICAgICAgKGkuZS4gYVsieCJdKQoKKFF1ZXN0aW9uIC0gc2hvdWxkIGAuI2AgYmUgcmVzdHJpY3RlZCB0byBwZXJtaXQgb25seSBTdHJpbmcgYXJndW1lbnRzPyBUaGUKdGVtcGxhdGUgc2hvdWxkIHByb2JhYmx5IGJlIHdyaXR0ZW4gd2l0aCBgW11gIGlmIG5vbi1zdHJpbmdzIGFyZSBhY2NlcHRlZC4pCgoKT2JqZWN0IGluaXRpYWxpemVycyBhbGxvdyBwbGFjZWhvbGRlcnMgaW4gdGhlIGtleSBwcm9wZXJ0eSBuYW1lIHBvc2l0aW9uOgoKICAgIGpzKCd7IzoxLCAjOjJ9JywgIFtzLCAnYnllJ10pICAgIC0tPiAge2hlbGxvOiAxLCBieWU6IDJ9CgoKV2hhdCBpcyBub3QgaW1wbGVtZW50ZWQ6CgogLSAgQXJyYXkgaW5pdGlhbGl6ZXJzIGFuZCBvYmplY3QgaW5pdGlhbGl6ZXJzIGNvdWxkIHN1cHBvcnQgc3BsaWNpbmcuICBJbiB0aGUKICAgIGFycmF5IGNhc2UsIHdlIHdvdWxkIG5lZWQgc29tZSB3YXkgdG8ga25vdyBpZiBhbiBBcnJheUluaXRpYWxpemVyIGFyZ3VtZW50CiAgICBzaG91bGQgYmUgc3BsaWNlIG9yIGlzIGludGVuZGVkIGFzIGEgc2luZ2xlIHZhbHVlLgoKKi8KY29uc3QgSnNCdWlsZGVyIGpzID0gY29uc3QgSnNCdWlsZGVyKCk7CgpjbGFzcyBKc0J1aWxkZXIgewogIGNvbnN0IEpzQnVpbGRlcigpOwoKICAvKioKICAgKiBQYXJzZXMgYSBiaXQgb2YgSmF2YVNjcmlwdCwgYW5kIHJldHVybnMgYW4gZXhwcmVzc2lvbi4KICAgKgogICAqIFNlZSB0aGUgTWluaUpzUGFyc2VyIGNsYXNzLgogICAqCiAgICogW2FyZ3VtZW50c10gY2FuIGJlIGEgc2luZ2xlIFtOb2RlXSAoZS5nLiBhbiBbRXhwcmVzc2lvbl0gb3IgW1N0YXRlbWVudF0pIG9yCiAgICogYSBsaXN0IG9mIFtOb2RlXXMsIHdoaWNoIHdpbGwgYmUgaW50ZXJwb2xhdGVkIGludG8gdGhlIHNvdXJjZSBhdCB0aGUgJyMnCiAgICogc2lnbnMuCiAgICovCiAgRXhwcmVzc2lvbiBjYWxsKFN0cmluZyBzb3VyY2UsIFt2YXIgYXJndW1lbnRzXSkgewogICAgVGVtcGxhdGUgdGVtcGxhdGUgPSBfZmluZEV4cHJlc3Npb25UZW1wbGF0ZShzb3VyY2UpOwogICAgaWYgKGFyZ3VtZW50cyA9PSBudWxsKSByZXR1cm4gdGVtcGxhdGUuaW5zdGFudGlhdGUoW10pOwogICAgLy8gV2UgYWxsb3cgYSBzaW5nbGUgYXJndW1lbnQgdG8gYmUgZ2l2ZW4gZGlyZWN0bHkuCiAgICBpZiAoYXJndW1lbnRzIGlzISBMaXN0ICYmIGFyZ3VtZW50cyBpcyEgTWFwKSBhcmd1bWVudHMgPSBbYXJndW1lbnRzXTsKICAgIHJldHVybiB0ZW1wbGF0ZS5pbnN0YW50aWF0ZShhcmd1bWVudHMpOwogIH0KCiAgLyoqCiAgICogUGFyc2VzIGEgSmF2YVNjcmlwdCBTdGF0ZW1lbnQsIG90aGVyd2lzZSBqdXN0IGxpa2UgW2NhbGxdLgogICAqLwogIFN0YXRlbWVudCBzdGF0ZW1lbnQoU3RyaW5nIHNvdXJjZSwgW3ZhciBhcmd1bWVudHNdKSB7CiAgICBUZW1wbGF0ZSB0ZW1wbGF0ZSA9IF9maW5kU3RhdGVtZW50VGVtcGxhdGUoc291cmNlKTsKICAgIGlmIChhcmd1bWVudHMgPT0gbnVsbCkgcmV0dXJuIHRlbXBsYXRlLmluc3RhbnRpYXRlKFtdKTsKICAgIC8vIFdlIGFsbG93IGEgc2luZ2xlIGFyZ3VtZW50IHRvIGJlIGdpdmVuIGRpcmVjdGx5LgogICAgaWYgKGFyZ3VtZW50cyBpcyEgTGlzdCAmJiBhcmd1bWVudHMgaXMhIE1hcCkgYXJndW1lbnRzID0gW2FyZ3VtZW50c107CiAgICByZXR1cm4gdGVtcGxhdGUuaW5zdGFudGlhdGUoYXJndW1lbnRzKTsKICB9CgogIC8qKgogICAqIFBhcnNlcyBKYXZhU2NyaXB0IHdyaXR0ZW4gaW4gdGhlIGBKU2AgZm9yZWlnbiBpbnN0cnVjdGlvbi4KICAgKgogICAqIFRoZSBbc291cmNlXSBtdXN0IGJlIGEgSmF2YVNjcmlwdCBleHByZXNzaW9uIG9yIGEgSmF2YVNjcmlwdCB0aHJvdwogICAqIHN0YXRlbWVudC4KICAgKi8KICBUZW1wbGF0ZSBwYXJzZUZvcmVpZ25KUyhTdHJpbmcgc291cmNlKSB7CiAgICAvLyBUT0RPKHNyYSk6IFBhcnNlIHdpdGggZXh0cmEgdmFsaWRhdGlvbiB0byBmb3JiaWQgYCNgIGludGVycG9sYXRpb24gaW4KICAgIC8vIGZ1bmN0aW9ucywgYXMgdGhpcyBsZWFkcyB0byB1bmFudGljaXBhdGVkIGNhcHR1cmUgb2YgdGVtcG9yYXJpZXMgdGhhdCBhcmUKICAgIC8vIHJldXNlZCBhZnRlciBjYXB0dXJlLgogICAgaWYgKHNvdXJjZS5zdGFydHNXaXRoKCJ0aHJvdyAiKSkgewogICAgICByZXR1cm4gX2ZpbmRTdGF0ZW1lbnRUZW1wbGF0ZShzb3VyY2UpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIF9maW5kRXhwcmVzc2lvblRlbXBsYXRlKHNvdXJjZSk7CiAgICB9CiAgfQoKICBUZW1wbGF0ZSBfZmluZEV4cHJlc3Npb25UZW1wbGF0ZShTdHJpbmcgc291cmNlKSB7CiAgICBUZW1wbGF0ZSB0ZW1wbGF0ZSA9IHRlbXBsYXRlTWFuYWdlci5sb29rdXBFeHByZXNzaW9uVGVtcGxhdGUoc291cmNlKTsKICAgIGlmICh0ZW1wbGF0ZSA9PSBudWxsKSB7CiAgICAgIE1pbmlKc1BhcnNlciBwYXJzZXIgPSBuZXcgTWluaUpzUGFyc2VyKHNvdXJjZSk7CiAgICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBhcnNlci5leHByZXNzaW9uKCk7CiAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGVNYW5hZ2VyLmRlZmluZUV4cHJlc3Npb25UZW1wbGF0ZShzb3VyY2UsIGV4cHJlc3Npb24pOwogICAgfQogICAgcmV0dXJuIHRlbXBsYXRlOwogIH0KCiAgVGVtcGxhdGUgX2ZpbmRTdGF0ZW1lbnRUZW1wbGF0ZShTdHJpbmcgc291cmNlKSB7CiAgICBUZW1wbGF0ZSB0ZW1wbGF0ZSA9IHRlbXBsYXRlTWFuYWdlci5sb29rdXBTdGF0ZW1lbnRUZW1wbGF0ZShzb3VyY2UpOwogICAgaWYgKHRlbXBsYXRlID09IG51bGwpIHsKICAgICAgTWluaUpzUGFyc2VyIHBhcnNlciA9IG5ldyBNaW5pSnNQYXJzZXIoc291cmNlKTsKICAgICAgU3RhdGVtZW50IHN0YXRlbWVudCA9IHBhcnNlci5zdGF0ZW1lbnQoKTsKICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZU1hbmFnZXIuZGVmaW5lU3RhdGVtZW50VGVtcGxhdGUoc291cmNlLCBzdGF0ZW1lbnQpOwogICAgfQogICAgcmV0dXJuIHRlbXBsYXRlOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhbiBFeHByZXNzaW9uIHRlbXBsYXRlIGZvciB0aGUgZ2l2ZW4gW3NvdXJjZV0uCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgdGVtcGxhdGUgaXMgY2FjaGVkLgogICAqLwogIFRlbXBsYXRlIGV4cHJlc3Npb25UZW1wbGF0ZUZvcihTdHJpbmcgc291cmNlKSB7CiAgICByZXR1cm4gX2ZpbmRFeHByZXNzaW9uVGVtcGxhdGUoc291cmNlKTsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYW4gRXhwcmVzc2lvbiB0ZW1wbGF0ZSB3aXRob3V0IGNhY2hpbmcgdGhlIHJlc3VsdC4KICAgKi8KICBUZW1wbGF0ZSB1bmNhY2hlZEV4cHJlc3Npb25UZW1wbGF0ZShTdHJpbmcgc291cmNlKSB7CiAgICBNaW5pSnNQYXJzZXIgcGFyc2VyID0gbmV3IE1pbmlKc1BhcnNlcihzb3VyY2UpOwogICAgRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VyLmV4cHJlc3Npb24oKTsKICAgIHJldHVybiBuZXcgVGVtcGxhdGUoc291cmNlLCBleHByZXNzaW9uLAogICAgICAgIGlzRXhwcmVzc2lvbjogdHJ1ZSwgZm9yY2VDb3B5OiBmYWxzZSk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgU3RhdGVtZW50IHRlbXBsYXRlIHdpdGhvdXQgY2FjaGluZyB0aGUgcmVzdWx0LgogICAqLwogIFRlbXBsYXRlIHVuY2FjaGVkU3RhdGVtZW50VGVtcGxhdGUoU3RyaW5nIHNvdXJjZSkgewogICAgTWluaUpzUGFyc2VyIHBhcnNlciA9IG5ldyBNaW5pSnNQYXJzZXIoc291cmNlKTsKICAgIFN0YXRlbWVudCBzdGF0ZW1lbnQgPSBwYXJzZXIuc3RhdGVtZW50KCk7CiAgICByZXR1cm4gbmV3IFRlbXBsYXRlKHNvdXJjZSwgc3RhdGVtZW50LAogICAgICAgIGlzRXhwcmVzc2lvbjogZmFsc2UsIGZvcmNlQ29weTogZmFsc2UpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlIGFuIEV4cHJlc3Npb24gdGVtcGxhdGUgd2hpY2ggaGFzIFthc3RdIGFzIHRoZSByZXN1bHQuICBUaGlzIGlzIHVzZWQKICAgKiB0byB3cmFwIGEgZ2VuZXJhdGVkIEFTVCBpbiBhIHplcm8tYXJndW1lbnQgVGVtcGxhdGUgc28gaXQgY2FuIGJlIHBhc3NlZCB0bwogICAqIGNvbnRleHQgdGhhdCBleHBlY3RzIGEgdGVtcGxhdGUuCiAgICovCiAgVGVtcGxhdGUgZXhwcmVzc2lvblRlbXBsYXRlWWllbGRpbmcoTm9kZSBhc3QpIHsKICAgIHJldHVybiBuZXcgVGVtcGxhdGUud2l0aEV4cHJlc3Npb25SZXN1bHQoYXN0KTsKICB9CgogIFRlbXBsYXRlIHN0YXRlbWVudFRlbXBsYXRlWWllbGRpbmcoTm9kZSBhc3QpIHsKICAgIHJldHVybiBuZXcgVGVtcGxhdGUud2l0aFN0YXRlbWVudFJlc3VsdChhc3QpOwogIH0KCiAgLy8vIENyZWF0ZXMgYSBsaXRlcmFsIGpzIHN0cmluZyBmcm9tIFt2YWx1ZV0uCiAgTGl0ZXJhbFN0cmluZyBfbGVnYWN5RXNjYXBlZFN0cmluZyhTdHJpbmcgdmFsdWUpIHsKICAgIC8vIFN0YXJ0IGJ5IGVzY2FwaW5nIHRoZSBiYWNrc2xhc2hlcy4KICAgIFN0cmluZyBlc2NhcGVkID0gdmFsdWUucmVwbGFjZUFsbCgnXFwnLCAnXFxcXCcpOwogICAgLy8gRG8gbm90IGVzY2FwZSB1bmljb2RlIGNoYXJhY3RlcnMgYW5kICcgYmVjYXVzZSB0aGV5IGFyZSBhbGxvd2VkIGluIHRoZQogICAgLy8gc3RyaW5nIGxpdGVyYWwgYW55d2F5LgogICAgZXNjYXBlZCA9IGVzY2FwZWQucmVwbGFjZUFsbE1hcHBlZChuZXcgUmVnRXhwKCdcbnwifFxifFx0fFx2fFxyJyksIChtYXRjaCkgewogICAgICBzd2l0Y2ggKG1hdGNoLmdyb3VwKDApKSB7CiAgICAgICAgY2FzZSAiXG4iOgogICAgICAgICAgcmV0dXJuIHIiXG4iOwogICAgICAgIGNhc2UgIlwiIjoKICAgICAgICAgIHJldHVybiByJ1wiJzsKICAgICAgICBjYXNlICJcYiI6CiAgICAgICAgICByZXR1cm4gciJcYiI7CiAgICAgICAgY2FzZSAiXHQiOgogICAgICAgICAgcmV0dXJuIHIiXHQiOwogICAgICAgIGNhc2UgIlxmIjoKICAgICAgICAgIHJldHVybiByIlxmIjsKICAgICAgICBjYXNlICJcciI6CiAgICAgICAgICByZXR1cm4gciJcciI7CiAgICAgICAgY2FzZSAiXHYiOgogICAgICAgICAgcmV0dXJuIHIiXHYiOwogICAgICB9CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJVbmV4cGVjdGVkIG1hdGNoOiAke21hdGNoLmdyb3VwKDApfSIpOwogICAgfSk7CiAgICBMaXRlcmFsU3RyaW5nIHJlc3VsdCA9IHN0cmluZyhlc2NhcGVkKTsKICAgIC8vIFdlIGRvbid0IGVzY2FwZSAnIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIHN0cmluZyBpcyB3cmFwcGVkCiAgICAvLyBpbnRvICIuIFZlcmlmeSB0aGF0IGFzc3VtcHRpb24uCiAgICBhc3NlcnQocmVzdWx0LnZhbHVlLmNvZGVVbml0QXQoMCkgPT0gJyInLmNvZGVVbml0QXQoMCkpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBDcmVhdGVzIGEgbGl0ZXJhbCBqcyBzdHJpbmcgZnJvbSBbdmFsdWVdLgogIExpdGVyYWxTdHJpbmcgZXNjYXBlZFN0cmluZyhTdHJpbmcgdmFsdWUsCiAgICAgIHtib29sIHV0Zjg6IGZhbHNlLCBib29sIGFzY2lpOiBmYWxzZX0pIHsKICAgIGlmICh1dGY4ID09IGZhbHNlICYmIGFzY2lpID09IGZhbHNlKSByZXR1cm4gX2xlZ2FjeUVzY2FwZWRTdHJpbmcodmFsdWUpOwogICAgaWYgKHV0ZjggJiYgYXNjaWkpIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCdDYW5ub3QgYmUgYm90aCBVVEY4IGFuZCBBU0NJSScpOwoKICAgIGludCBzaW5nbGVRdW90ZXMgPSAwOwogICAgaW50IGRvdWJsZVF1b3RlcyA9IDA7CiAgICBpbnQgb3RoZXJFc2NhcGVzID0gMDsKICAgIGludCB1bnBhaXJlZFN1cnJvZ2F0ZXMgPSAwOwoKICAgIGZvciAoaW50IHJ1bmUgaW4gdmFsdWUucnVuZXMpIHsKICAgICAgaWYgKHJ1bmUgPT0gY2hhckNvZGVzLiRCQUNLU0xBU0gpIHsKICAgICAgICArK290aGVyRXNjYXBlczsKICAgICAgfSBlbHNlIGlmIChydW5lID09IGNoYXJDb2Rlcy4kU1EpIHsKICAgICAgICArK3NpbmdsZVF1b3RlczsKICAgICAgfSBlbHNlIGlmIChydW5lID09IGNoYXJDb2Rlcy4kRFEpIHsKICAgICAgICArK2RvdWJsZVF1b3RlczsKICAgICAgfSBlbHNlIGlmIChydW5lID09IGNoYXJDb2Rlcy4kTEYgfHwKICAgICAgICAgIHJ1bmUgPT0gY2hhckNvZGVzLiRDUiB8fAogICAgICAgICAgcnVuZSA9PSBjaGFyQ29kZXMuJExTIHx8CiAgICAgICAgICBydW5lID09IGNoYXJDb2Rlcy4kUFMpIHsKICAgICAgICAvLyBMaW5lIHRlcm1pbmF0b3JzLgogICAgICAgICsrb3RoZXJFc2NhcGVzOwogICAgICB9IGVsc2UgaWYgKHJ1bmUgPT0gY2hhckNvZGVzLiRCUyB8fAogICAgICAgICAgcnVuZSA9PSBjaGFyQ29kZXMuJFRBQiB8fAogICAgICAgICAgcnVuZSA9PSBjaGFyQ29kZXMuJFZUQUIgfHwKICAgICAgICAgIHJ1bmUgPT0gY2hhckNvZGVzLiRGRikgewogICAgICAgICsrb3RoZXJFc2NhcGVzOwogICAgICB9IGVsc2UgaWYgKF9pc1VucGFpcmVkU3Vycm9nYXRlKHJ1bmUpKSB7CiAgICAgICAgKyt1bnBhaXJlZFN1cnJvZ2F0ZXM7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGFzY2lpICYmIChydW5lIDwgY2hhckNvZGVzLiRTUEFDRSB8fCBydW5lID49IGNoYXJDb2Rlcy4kREVMKSkgewogICAgICAgICAgKytvdGhlckVzY2FwZXM7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgTGl0ZXJhbFN0cmluZyBmaW5pc2goU3RyaW5nIHF1b3RlLCBTdHJpbmcgY29udGVudHMpIHsKICAgICAgcmV0dXJuIG5ldyBMaXRlcmFsU3RyaW5nKCckcXVvdGUkY29udGVudHMkcXVvdGUnKTsKICAgIH0KCiAgICBpZiAob3RoZXJFc2NhcGVzID09IDAgJiYgdW5wYWlyZWRTdXJyb2dhdGVzID09IDApIHsKICAgICAgaWYgKGRvdWJsZVF1b3RlcyA9PSAwKSByZXR1cm4gZmluaXNoKCciJywgdmFsdWUpOwogICAgICBpZiAoc2luZ2xlUXVvdGVzID09IDApIHJldHVybiBmaW5pc2goIiciLCB2YWx1ZSk7CiAgICB9CgogICAgYm9vbCB1c2VTaW5nbGVRdW90ZXMgPSBzaW5nbGVRdW90ZXMgPCBkb3VibGVRdW90ZXM7CgogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwoKICAgIGZvciAoaW50IHJ1bmUgaW4gdmFsdWUucnVuZXMpIHsKICAgICAgU3RyaW5nIGVzY2FwZSA9IF9pcnJlZ3VsYXJFc2NhcGUocnVuZSwgdXNlU2luZ2xlUXVvdGVzKTsKICAgICAgaWYgKGVzY2FwZSAhPSBudWxsKSB7CiAgICAgICAgc2Iud3JpdGUoZXNjYXBlKTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAocnVuZSA9PSBjaGFyQ29kZXMuJExTIHx8CiAgICAgICAgICBydW5lID09IGNoYXJDb2Rlcy4kUFMgfHwKICAgICAgICAgIF9pc1VucGFpcmVkU3Vycm9nYXRlKHJ1bmUpIHx8CiAgICAgICAgICBhc2NpaSAmJiAocnVuZSA8IGNoYXJDb2Rlcy4kU1BBQ0UgfHwgcnVuZSA+PSBjaGFyQ29kZXMuJERFTCkpIHsKICAgICAgICBpZiAocnVuZSA8IDB4MTAwKSB7CiAgICAgICAgICBzYi53cml0ZShyJ1x4Jyk7CiAgICAgICAgICBzYi53cml0ZShydW5lLnRvUmFkaXhTdHJpbmcoMTYpLnBhZExlZnQoMiwgJzAnKSk7CiAgICAgICAgfSBlbHNlIGlmIChydW5lIDwgMHgxMDAwMCkgewogICAgICAgICAgc2Iud3JpdGUocidcdScpOwogICAgICAgICAgc2Iud3JpdGUocnVuZS50b1JhZGl4U3RyaW5nKDE2KS5wYWRMZWZ0KDQsICcwJykpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIGFjY2VwdCB0aGUgRVM2IFx1e3p6enp6en0gZW5jb2RpbmcsIHNvIGVtaXQgdHdvCiAgICAgICAgICAvLyBzdXJyb2dhdGUgcGFpcnMuCiAgICAgICAgICB2YXIgYml0cyA9IHJ1bmUgLSAweDEwMDAwOwogICAgICAgICAgdmFyIGxlYWRpbmcgPSAweEQ4MDAgfCAoYml0cyA+PiAxMCk7CiAgICAgICAgICB2YXIgdHJhaWxpbmcgPSAweERDMDAgfCAoYml0cyAmIDB4M2ZmKTsKICAgICAgICAgIHNiLndyaXRlKHInXHUnKTsKICAgICAgICAgIHNiLndyaXRlKGxlYWRpbmcudG9SYWRpeFN0cmluZygxNikpOwogICAgICAgICAgc2Iud3JpdGUocidcdScpOwogICAgICAgICAgc2Iud3JpdGUodHJhaWxpbmcudG9SYWRpeFN0cmluZygxNikpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBzYi53cml0ZUNoYXJDb2RlKHJ1bmUpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGZpbmlzaCh1c2VTaW5nbGVRdW90ZXMgPyAiJyIgOiAnIicsIHNiLnRvU3RyaW5nKCkpOwogIH0KCiAgc3RhdGljIGJvb2wgX2lzVW5wYWlyZWRTdXJyb2dhdGUoaW50IGNvZGUpID0+IChjb2RlICYgMHhGRkZGRjgwMCkgPT0gMHhEODAwOwoKICBzdGF0aWMgU3RyaW5nIF9pcnJlZ3VsYXJFc2NhcGUoaW50IGNvZGUsIGJvb2wgdXNlU2luZ2xlUXVvdGVzKSB7CiAgICBzd2l0Y2ggKGNvZGUpIHsKICAgICAgY2FzZSBjaGFyQ29kZXMuJFNROgogICAgICAgIHJldHVybiB1c2VTaW5nbGVRdW90ZXMgPyByIlwnIiA6IHIiJyI7CiAgICAgIGNhc2UgY2hhckNvZGVzLiREUToKICAgICAgICByZXR1cm4gdXNlU2luZ2xlUXVvdGVzID8gciciJyA6IHInXCInOwogICAgICBjYXNlIGNoYXJDb2Rlcy4kQkFDS1NMQVNIOgogICAgICAgIHJldHVybiByJ1xcJzsKICAgICAgY2FzZSBjaGFyQ29kZXMuJEJTOgogICAgICAgIHJldHVybiByJ1xiJzsKICAgICAgY2FzZSBjaGFyQ29kZXMuJFRBQjoKICAgICAgICByZXR1cm4gcidcdCc7CiAgICAgIGNhc2UgY2hhckNvZGVzLiRMRjoKICAgICAgICByZXR1cm4gcidcbic7CiAgICAgIGNhc2UgY2hhckNvZGVzLiRWVEFCOgogICAgICAgIHJldHVybiByJ1x2JzsKICAgICAgY2FzZSBjaGFyQ29kZXMuJEZGOgogICAgICAgIHJldHVybiByJ1xmJzsKICAgICAgY2FzZSBjaGFyQ29kZXMuJENSOgogICAgICAgIHJldHVybiByJ1xyJzsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8vIENyZWF0ZXMgYSBsaXRlcmFsIGpzIHN0cmluZyBmcm9tIFt2YWx1ZV0uCiAgLy8vCiAgLy8vIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgcHV0cyBxdW90ZXMgYXJvdW5kIFt2YWx1ZV0uIEl0IGRvZXMgbm90IGRvCiAgLy8vIGFueSBlc2NhcGluZywgc28gdXNlIG9ubHkgd2hlbiB5b3UgY2FuIGd1YXJhbnRlZSB0aGF0IFt2YWx1ZV0gZG9lcyBub3QKICAvLy8gY29udGFpbiBuZXdsaW5lcyBvciBiYWNrc2xhc2hlcy4gRm9yIGVzY2FwaW5nIHRoZSBzdHJpbmcgdXNlCiAgLy8vIFtlc2NhcGVkU3RyaW5nXS4KICBMaXRlcmFsU3RyaW5nIHN0cmluZyhTdHJpbmcgdmFsdWUpID0+IG5ldyBMaXRlcmFsU3RyaW5nKCciJHZhbHVlIicpOwoKICAvLy8gQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBbTGl0ZXJhbFN0cmluZ10gZnJvbSBbdmFsdWVdLgogIC8vLwogIC8vLyBEb2VzIG5vdCBhZGQgcXVvdGVzIG9yIGRvIGFueSBlc2NhcGluZy4KICBMaXRlcmFsU3RyaW5nIHN0cmluZ1BhcnQoU3RyaW5nIHZhbHVlKSA9PiBuZXcgTGl0ZXJhbFN0cmluZyh2YWx1ZSk7CgogIFN0cmluZ0NvbmNhdGVuYXRpb24gY29uY2F0ZW5hdGVTdHJpbmdzKEl0ZXJhYmxlPExpdGVyYWw+IHBhcnRzLAogICAgICB7YWRkUXVvdGVzOiBmYWxzZX0pIHsKICAgIExpc3Q8TGl0ZXJhbD4gX3BhcnRzOwogICAgaWYgKGFkZFF1b3RlcykgewogICAgICBMaXRlcmFsIHF1b3RlID0gc3RyaW5nUGFydCgnIicpOwogICAgICBfcGFydHMgPSA8TGl0ZXJhbD5bcXVvdGVdCiAgICAgICAgLi5hZGRBbGwocGFydHMpCiAgICAgICAgLi5hZGQocXVvdGUpOwogICAgfSBlbHNlIHsKICAgICAgX3BhcnRzID0gbmV3IExpc3QuZnJvbShwYXJ0cywgZ3Jvd2FibGU6IGZhbHNlKTsKICAgIH0KICAgIHJldHVybiBuZXcgU3RyaW5nQ29uY2F0ZW5hdGlvbihfcGFydHMpOwogIH0KCiAgSXRlcmFibGU8TGl0ZXJhbD4gam9pbkxpdGVyYWxzKEl0ZXJhYmxlPExpdGVyYWw+IGxpc3QsIExpdGVyYWwgc2VwYXJhdG9yKSB7CiAgICByZXR1cm4gbmV3IF9JbnRlcmxlYXZlSXRlcmFibGU8TGl0ZXJhbD4obGlzdCwgc2VwYXJhdG9yKTsKICB9CgogIExpdGVyYWxTdHJpbmcgcXVvdGVOYW1lKE5hbWUgbmFtZSwge2FsbG93TnVsbDogZmFsc2V9KSB7CiAgICBpZiAobmFtZSA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICByZXR1cm4gbmV3IExpdGVyYWxTdHJpbmcoJyIiJyk7CiAgICB9CiAgICByZXR1cm4gbmV3IExpdGVyYWxTdHJpbmdGcm9tTmFtZShuYW1lKTsKICB9CgogIExpdGVyYWxOdW1iZXIgbnVtYmVyKG51bSB2YWx1ZSkgPT4gbmV3IExpdGVyYWxOdW1iZXIoJyR2YWx1ZScpOwoKICBMaXRlcmFsQm9vbCBib29sZWFuKGJvb2wgdmFsdWUpID0+IG5ldyBMaXRlcmFsQm9vbCh2YWx1ZSk7CgogIEFycmF5SW5pdGlhbGl6ZXIgbnVtQXJyYXkoSXRlcmFibGU8aW50PiBsaXN0KSA9PgogICAgICBuZXcgQXJyYXlJbml0aWFsaXplcihsaXN0Lm1hcChudW1iZXIpLnRvTGlzdCgpKTsKCiAgQXJyYXlJbml0aWFsaXplciBzdHJpbmdBcnJheShJdGVyYWJsZTxTdHJpbmc+IGxpc3QpID0+CiAgICAgIG5ldyBBcnJheUluaXRpYWxpemVyKGxpc3QubWFwKHN0cmluZykudG9MaXN0KCkpOwoKICBDb21tZW50IGNvbW1lbnQoU3RyaW5nIHRleHQpID0+IG5ldyBDb21tZW50KHRleHQpOwoKICBDYWxsIHByb3BlcnR5Q2FsbCgKICAgICAgRXhwcmVzc2lvbiByZWNlaXZlciwgRXhwcmVzc2lvbiBmaWVsZE5hbWUsIExpc3Q8RXhwcmVzc2lvbj4gYXJndW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IENhbGwobmV3IFByb3BlcnR5QWNjZXNzKHJlY2VpdmVyLCBmaWVsZE5hbWUpLCBhcmd1bWVudHMpOwogIH0KCiAgT2JqZWN0SW5pdGlhbGl6ZXIgb2JqZWN0TGl0ZXJhbChNYXA8U3RyaW5nLCBFeHByZXNzaW9uPiBtYXApIHsKICAgIExpc3Q8UHJvcGVydHk+IHByb3BlcnRpZXMgPSA8UHJvcGVydHk+W107CiAgICBtYXAuZm9yRWFjaCgobmFtZSwgdmFsdWUpIHsKICAgICAgcHJvcGVydGllcy5hZGQobmV3IFByb3BlcnR5KHN0cmluZyhuYW1lKSwgdmFsdWUpKTsKICAgIH0pOwogICAgcmV0dXJuIG5ldyBPYmplY3RJbml0aWFsaXplcihwcm9wZXJ0aWVzKTsKICB9Cn0KCkxpdGVyYWxTdHJpbmcgc3RyaW5nKFN0cmluZyB2YWx1ZSkgPT4ganMuc3RyaW5nKHZhbHVlKTsKTGl0ZXJhbFN0cmluZyBxdW90ZU5hbWUoTmFtZSBuYW1lLCB7YWxsb3dOdWxsOiBmYWxzZX0pIHsKICByZXR1cm4ganMucXVvdGVOYW1lKG5hbWUsIGFsbG93TnVsbDogYWxsb3dOdWxsKTsKfQoKTGl0ZXJhbFN0cmluZyBzdHJpbmdQYXJ0KFN0cmluZyB2YWx1ZSkgPT4ganMuc3RyaW5nUGFydCh2YWx1ZSk7Ckl0ZXJhYmxlPExpdGVyYWw+IGpvaW5MaXRlcmFscyhJdGVyYWJsZTxMaXRlcmFsPiBsaXN0LCBMaXRlcmFsIHNlcGFyYXRvcikgewogIHJldHVybiBqcy5qb2luTGl0ZXJhbHMobGlzdCwgc2VwYXJhdG9yKTsKfQoKU3RyaW5nQ29uY2F0ZW5hdGlvbiBjb25jYXRlbmF0ZVN0cmluZ3MoSXRlcmFibGU8TGl0ZXJhbD4gcGFydHMsCiAgICB7YWRkUXVvdGVzOiBmYWxzZX0pIHsKICByZXR1cm4ganMuY29uY2F0ZW5hdGVTdHJpbmdzKHBhcnRzLCBhZGRRdW90ZXM6IGFkZFF1b3Rlcyk7Cn0KCkxpdGVyYWxOdW1iZXIgbnVtYmVyKG51bSB2YWx1ZSkgPT4ganMubnVtYmVyKHZhbHVlKTsKQXJyYXlJbml0aWFsaXplciBudW1BcnJheShJdGVyYWJsZTxpbnQ+IGxpc3QpID0+IGpzLm51bUFycmF5KGxpc3QpOwpBcnJheUluaXRpYWxpemVyIHN0cmluZ0FycmF5KEl0ZXJhYmxlPFN0cmluZz4gbGlzdCkgPT4ganMuc3RyaW5nQXJyYXkobGlzdCk7CkNhbGwgcHJvcGVydHlDYWxsKAogICAgRXhwcmVzc2lvbiByZWNlaXZlciwgRXhwcmVzc2lvbiBmaWVsZE5hbWUsIExpc3Q8RXhwcmVzc2lvbj4gYXJndW1lbnRzKSB7CiAgcmV0dXJuIGpzLnByb3BlcnR5Q2FsbChyZWNlaXZlciwgZmllbGROYW1lLCBhcmd1bWVudHMpOwp9CgpPYmplY3RJbml0aWFsaXplciBvYmplY3RMaXRlcmFsKE1hcDxTdHJpbmcsIEV4cHJlc3Npb24+IG1hcCkgewogIHJldHVybiBqcy5vYmplY3RMaXRlcmFsKG1hcCk7Cn0KCmNsYXNzIE1pbmlKc1BhcnNlckVycm9yIHsKICBNaW5pSnNQYXJzZXJFcnJvcih0aGlzLnBhcnNlciwgdGhpcy5tZXNzYWdlKSB7fQoKICBmaW5hbCBNaW5pSnNQYXJzZXIgcGFyc2VyOwogIGZpbmFsIFN0cmluZyBtZXNzYWdlOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBpbnQgcG9zID0gcGFyc2VyLmxhc3RQb3NpdGlvbjsKCiAgICAvLyBEaXNjYXJkIGxpbmVzIGZvbGxvd2luZyB0aGUgbGluZSBjb250YWluaW5nIGxhc3RQb3NpdGlvbi4KICAgIFN0cmluZyBzcmMgPSBwYXJzZXIuc3JjOwogICAgaW50IG5ld2xpbmVQb3MgPSBzcmMuaW5kZXhPZignXG4nLCBwb3MpOwogICAgaWYgKG5ld2xpbmVQb3MgPj0gcG9zKSBzcmMgPSBzcmMuc3Vic3RyaW5nKDAsIG5ld2xpbmVQb3MpOwoKICAgIC8vIEV4dHJhY3QgdGhlIHByZWZpeCBvZiB0aGUgZXJyb3IgbGluZSBiZWZvcmUgbGFzdFBvc2l0aW9uLgogICAgU3RyaW5nIGxpbmUgPSBzcmM7CiAgICBpbnQgbGFzdExpbmVTdGFydCA9IGxpbmUubGFzdEluZGV4T2YoJ1xuJyk7CiAgICBpZiAobGFzdExpbmVTdGFydCA+PSAwKSBsaW5lID0gbGluZS5zdWJzdHJpbmcobGFzdExpbmVTdGFydCArIDEpOwogICAgU3RyaW5nIHByZWZpeCA9IGxpbmUuc3Vic3RyaW5nKDAsIHBvcyAtIChzcmMubGVuZ3RoIC0gbGluZS5sZW5ndGgpKTsKCiAgICAvLyBSZXBsYWNlIG5vbi10YWJzIHdpdGggc3BhY2VzLCBnaXZpbmcgYSBwcmludCBpbmRlbnQgdGhhdCBtYXRjaGVzIHRoZSB0ZXh0CiAgICAvLyBmb3IgdGFiYmluZy4KICAgIFN0cmluZyBzcGFjZXMgPSBwcmVmaXgucmVwbGFjZUFsbChuZXcgUmVnRXhwKHInW15cdF0nKSwgJyAnKTsKICAgIHJldHVybiAnRXJyb3IgaW4gTWluaUpzUGFyc2VyOlxuJHtzcmN9XG4kc3BhY2VzXlxuJHNwYWNlcyRtZXNzYWdlXG4nOwogIH0KfQoKLy8vIE1pbmkgSmF2YVNjcmlwdCBwYXJzZXIgZm9yIHRpbnkgc25pcHBldHMgb2YgY29kZSB0aGF0IHdlIHdhbnQgdG8gbWFrZSBpbnRvCi8vLyBBU1Qgbm9kZXMuICBIYW5kbGVzOgovLy8gKiBpZGVudGlmaWVycy4KLy8vICogZG90IGFjY2Vzcy4KLy8vICogbWV0aG9kIGNhbGxzLgovLy8gKiBbXSBhY2Nlc3MuCi8vLyAqIGFycmF5LCBzdHJpbmcsIHJlZ2V4cCwgYm9vbGVhbiwgbnVsbCBhbmQgbnVtZXJpYyBsaXRlcmFscy4KLy8vICogbW9zdCBvcGVyYXRvcnMuCi8vLyAqIGJyYWNrZXRzLgovLy8gKiB2YXIgZGVjbGFyYXRpb25zLgovLy8gKiBvcGVyYXRvciBwcmVjZWRlbmNlLgovLy8gKiBhbm9ueW1vdXMgZnVuY3Rpb25zIGFuZCBuYW1lZCBmdW5jdGlvbiBleHByZXNzaW9ucyBhbmQgZGVjbGFyYXRpb25zLgovLy8gTm90YWJsZSB0aGluZ3MgaXQgY2FuJ3QgZG8geWV0IGluY2x1ZGU6Ci8vLyAqIHNvbWUgc3RhdGVtZW50cyBhcmUgc3RpbGwgbWlzc2luZyAoZG8td2hpbGUsIHdoaWxlLCBzd2l0Y2gpLgovLy8KLy8vIEl0J3MgYSBmYWlybHkgc3RhbmRhcmQgcmVjdXJzaXZlIGRlc2NlbnQgcGFyc2VyLgovLy8KLy8vIExpdGVyYWwgc3RyaW5ncyBhcmUgcGFzc2VkIHRocm91Z2ggdG8gdGhlIGZpbmFsIEpTIHNvdXJjZSBjb2RlIHVuY2hhbmdlZCwKLy8vIGluY2x1ZGluZyB0aGUgY2hvaWNlIG9mIHN1cnJvdW5kaW5nIHF1b3Rlcywgc28gaWYgeW91IHBhcnNlCi8vLyByJ3ZhciB4ID0gImZvb1xuXCJiYXJcIiInIHlvdSB3aWxsIGVuZCB1cCB3aXRoCi8vLyAgIHZhciB4ID0gImZvb1xuXCJiYXJcIiIgaW4gdGhlIGZpbmFsIHByb2dyYW0uICBceCBhbmQgXHUgZXNjYXBlcyBhcmUgbm90Ci8vLyBhbGxvd2VkIGluIHN0cmluZyBhbmQgcmVnZXhwIGxpdGVyYWxzIGJlY2F1c2UgdGhlIG1hY2hpbmVyeSBmb3IgY2hlY2tpbmcKLy8vIHRoZWlyIGNvcnJlY3RuZXNzIGlzIHJhdGhlciBpbnZvbHZlZC4KY2xhc3MgTWluaUpzUGFyc2VyIHsKICBNaW5pSnNQYXJzZXIodGhpcy5zcmMpCiAgICAgIDogbGFzdENhdGVnb3J5ID0gTk9ORSwKICAgICAgICBsYXN0VG9rZW4gPSBudWxsLAogICAgICAgIGxhc3RQb3NpdGlvbiA9IDAsCiAgICAgICAgcG9zaXRpb24gPSAwIHsKICAgIGdldFRva2VuKCk7CiAgfQoKICBpbnQgbGFzdENhdGVnb3J5ID0gTk9ORTsKICBTdHJpbmcgbGFzdFRva2VuID0gbnVsbDsKICBpbnQgbGFzdFBvc2l0aW9uID0gMDsKICBpbnQgcG9zaXRpb24gPSAwOwogIGJvb2wgc2tpcHBlZE5ld2xpbmUgPSBmYWxzZTsgLy8gc2tpcHBlZCBuZXdsaW5lIGluIGxhc3QgZ2V0VG9rZW4/CiAgZmluYWwgU3RyaW5nIHNyYzsKCiAgZmluYWwgTGlzdDxJbnRlcnBvbGF0ZWROb2RlPiBpbnRlcnBvbGF0ZWRWYWx1ZXMgPSA8SW50ZXJwb2xhdGVkTm9kZT5bXTsKICBib29sIGdldCBoYXNOYW1lZEhvbGVzID0+CiAgICAgIGludGVycG9sYXRlZFZhbHVlcy5pc05vdEVtcHR5ICYmIGludGVycG9sYXRlZFZhbHVlcy5maXJzdC5pc05hbWVkOwogIGJvb2wgZ2V0IGhhc1Bvc2l0aW9uYWxIb2xlcyA9PgogICAgICBpbnRlcnBvbGF0ZWRWYWx1ZXMuaXNOb3RFbXB0eSAmJiBpbnRlcnBvbGF0ZWRWYWx1ZXMuZmlyc3QuaXNQb3NpdGlvbmFsOwoKICBzdGF0aWMgY29uc3QgTk9ORSA9IC0xOwogIHN0YXRpYyBjb25zdCBBTFBIQSA9IDA7CiAgc3RhdGljIGNvbnN0IE5VTUVSSUMgPSAxOwogIHN0YXRpYyBjb25zdCBTVFJJTkcgPSAyOwogIHN0YXRpYyBjb25zdCBTWU1CT0wgPSAzOwogIHN0YXRpYyBjb25zdCBBU1NJR05NRU5UID0gNDsKICBzdGF0aWMgY29uc3QgRE9UID0gNTsKICBzdGF0aWMgY29uc3QgTFBBUkVOID0gNjsKICBzdGF0aWMgY29uc3QgUlBBUkVOID0gNzsKICBzdGF0aWMgY29uc3QgTEJSQUNFID0gODsKICBzdGF0aWMgY29uc3QgUkJSQUNFID0gOTsKICBzdGF0aWMgY29uc3QgTFNRVUFSRSA9IDEwOwogIHN0YXRpYyBjb25zdCBSU1FVQVJFID0gMTE7CiAgc3RhdGljIGNvbnN0IENPTU1BID0gMTI7CiAgc3RhdGljIGNvbnN0IFFVRVJZID0gMTM7CiAgc3RhdGljIGNvbnN0IENPTE9OID0gMTQ7CiAgc3RhdGljIGNvbnN0IFNFTUlDT0xPTiA9IDE1OwogIHN0YXRpYyBjb25zdCBIQVNIID0gMTY7CiAgc3RhdGljIGNvbnN0IFdISVRFU1BBQ0UgPSAxNzsKICBzdGF0aWMgY29uc3QgT1RIRVIgPSAxODsKCiAgLy8gTWFrZSBzdXJlIHRoYXQgXV0gaXMgdHdvIHN5bWJvbHMuCiAgYm9vbCBzaW5nbGVDaGFyQ2F0ZWdvcnkoaW50IGNhdGVnb3J5KSA9PiBjYXRlZ29yeSA+PSBET1Q7CgogIHN0YXRpYyBTdHJpbmcgY2F0ZWdvcnlUb1N0cmluZyhpbnQgY2F0KSB7CiAgICBzd2l0Y2ggKGNhdCkgewogICAgICBjYXNlIE5PTkU6CiAgICAgICAgcmV0dXJuICJOT05FIjsKICAgICAgY2FzZSBBTFBIQToKICAgICAgICByZXR1cm4gIkFMUEhBIjsKICAgICAgY2FzZSBOVU1FUklDOgogICAgICAgIHJldHVybiAiTlVNRVJJQyI7CiAgICAgIGNhc2UgU1lNQk9MOgogICAgICAgIHJldHVybiAiU1lNQk9MIjsKICAgICAgY2FzZSBBU1NJR05NRU5UOgogICAgICAgIHJldHVybiAiQVNTSUdOTUVOVCI7CiAgICAgIGNhc2UgRE9UOgogICAgICAgIHJldHVybiAiRE9UIjsKICAgICAgY2FzZSBMUEFSRU46CiAgICAgICAgcmV0dXJuICJMUEFSRU4iOwogICAgICBjYXNlIFJQQVJFTjoKICAgICAgICByZXR1cm4gIlJQQVJFTiI7CiAgICAgIGNhc2UgTEJSQUNFOgogICAgICAgIHJldHVybiAiTEJSQUNFIjsKICAgICAgY2FzZSBSQlJBQ0U6CiAgICAgICAgcmV0dXJuICJSQlJBQ0UiOwogICAgICBjYXNlIExTUVVBUkU6CiAgICAgICAgcmV0dXJuICJMU1FVQVJFIjsKICAgICAgY2FzZSBSU1FVQVJFOgogICAgICAgIHJldHVybiAiUlNRVUFSRSI7CiAgICAgIGNhc2UgU1RSSU5HOgogICAgICAgIHJldHVybiAiU1RSSU5HIjsKICAgICAgY2FzZSBDT01NQToKICAgICAgICByZXR1cm4gIkNPTU1BIjsKICAgICAgY2FzZSBRVUVSWToKICAgICAgICByZXR1cm4gIlFVRVJZIjsKICAgICAgY2FzZSBDT0xPTjoKICAgICAgICByZXR1cm4gIkNPTE9OIjsKICAgICAgY2FzZSBTRU1JQ09MT046CiAgICAgICAgcmV0dXJuICJTRU1JQ09MT04iOwogICAgICBjYXNlIEhBU0g6CiAgICAgICAgcmV0dXJuICJIQVNIIjsKICAgICAgY2FzZSBXSElURVNQQUNFOgogICAgICAgIHJldHVybiAiV0hJVEVTUEFDRSI7CiAgICAgIGNhc2UgT1RIRVI6CiAgICAgICAgcmV0dXJuICJPVEhFUiI7CiAgICB9CiAgICByZXR1cm4gIlVua25vd246ICRjYXQiOwogIH0KCiAgc3RhdGljIGNvbnN0IENBVEVHT1JJRVMgPSBjb25zdCA8aW50PlsKICAgIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgLy8gMC03CiAgICBPVEhFUiwgV0hJVEVTUEFDRSwgV0hJVEVTUEFDRSwgT1RIRVIsIE9USEVSLCBXSElURVNQQUNFLCAvLyA4LTEzCiAgICBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIC8vIDE0LTIxCiAgICBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIC8vIDIyLTI5CiAgICBPVEhFUiwgT1RIRVIsIFdISVRFU1BBQ0UsIC8vIDMwLTMyCiAgICBTWU1CT0wsIE9USEVSLCBIQVNILCBBTFBIQSwgU1lNQk9MLCBTWU1CT0wsIE9USEVSLCAvLyAhIiMkJSbCtAogICAgTFBBUkVOLCBSUEFSRU4sIFNZTUJPTCwgU1lNQk9MLCBDT01NQSwgU1lNQk9MLCBET1QsIFNZTUJPTCwgLy8gKCkqKywtLi8KICAgIE5VTUVSSUMsIE5VTUVSSUMsIE5VTUVSSUMsIE5VTUVSSUMsIE5VTUVSSUMsIC8vIDAxMjM0CiAgICBOVU1FUklDLCBOVU1FUklDLCBOVU1FUklDLCBOVU1FUklDLCBOVU1FUklDLCAvLyA1Njc4OQogICAgQ09MT04sIFNFTUlDT0xPTiwgU1lNQk9MLCBTWU1CT0wsIFNZTUJPTCwgUVVFUlksIE9USEVSLCAvLyA6Ozw9Pj9ACiAgICBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIC8vIEFCQ0RFRkdICiAgICBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIC8vIElKS0xNTk9QCiAgICBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIC8vIFFSU1RVVldYCiAgICBBTFBIQSwgQUxQSEEsIExTUVVBUkUsIE9USEVSLCBSU1FVQVJFLCBTWU1CT0wsIEFMUEhBLCBPVEhFUiwgLy8gWVpbXF1eXycKICAgIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgLy8gYWJjZGVmZ2gKICAgIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgLy8gaWprbG1ub3AKICAgIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgLy8gcXJzdHV2d3gKICAgIEFMUEhBLCBBTFBIQSwgTEJSQUNFLCBTWU1CT0wsIFJCUkFDRSwgU1lNQk9MCiAgXTsgLy8geXp7fH1+CgogIC8vIFRoaXMgbXVzdCBiZSBhID49IHRoZSBoaWdoZXN0IHByZWNlZGVuY2UgbnVtYmVyIGhhbmRsZWQgYnkgcGFyc2VCaW5hcnkuCiAgc3RhdGljIHZhciBISUdIRVNUX1BBUlNFX0JJTkFSWV9QUkVDRURFTkNFID0gMTY7CiAgc3RhdGljIGJvb2wgaXNBc3NpZ25tZW50KFN0cmluZyBzeW1ib2wpID0+IEJJTkFSWV9QUkVDRURFTkNFW3N5bWJvbF0gPT0gMTc7CgogIC8vIEZyb20gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PcGVyYXRvcnMvT3BlcmF0b3JfUHJlY2VkZW5jZQogIHN0YXRpYyBmaW5hbCBCSU5BUllfUFJFQ0VERU5DRSA9IHsKICAgICcrPSc6IDE3LAogICAgJy09JzogMTcsCiAgICAnKj0nOiAxNywKICAgICcvPSc6IDE3LAogICAgJyU9JzogMTcsCiAgICAnXj0nOiAxNywKICAgICd8PSc6IDE3LAogICAgJyY9JzogMTcsCiAgICAnPDw9JzogMTcsCiAgICAnPj49JzogMTcsCiAgICAnPj4+PSc6IDE3LAogICAgJz0nOiAxNywKICAgICd8fCc6IDE0LAogICAgJyYmJzogMTMsCiAgICAnfCc6IDEyLAogICAgJ14nOiAxMSwKICAgICcmJzogMTAsCiAgICAnIT0nOiA5LAogICAgJz09JzogOSwKICAgICchPT0nOiA5LAogICAgJz09PSc6IDksCiAgICAnPCc6IDgsCiAgICAnPD0nOiA4LAogICAgJz49JzogOCwKICAgICc+JzogOCwKICAgICdpbic6IDgsCiAgICAnaW5zdGFuY2VvZic6IDgsCiAgICAnPDwnOiA3LAogICAgJz4+JzogNywKICAgICc+Pj4nOiA3LAogICAgJysnOiA2LAogICAgJy0nOiA2LAogICAgJyonOiA1LAogICAgJy8nOiA1LAogICAgJyUnOiA1CiAgfTsKICBzdGF0aWMgZmluYWwgVU5BUllfT1BFUkFUT1JTID0gWwogICAgJysrJywKICAgICctLScsCiAgICAnKycsCiAgICAnLScsCiAgICAnficsCiAgICAnIScsCiAgICAndHlwZW9mJywKICAgICd2b2lkJywKICAgICdkZWxldGUnLAogICAgJ2F3YWl0JwogIF0udG9TZXQoKTsKCiAgc3RhdGljIGZpbmFsIE9QRVJBVE9SU19USEFUX0xPT0tfTElLRV9JREVOVElGSUVSUyA9CiAgICAgIFsndHlwZW9mJywgJ3ZvaWQnLCAnZGVsZXRlJywgJ2luJywgJ2luc3RhbmNlb2YnLCAnYXdhaXQnXS50b1NldCgpOwoKICBzdGF0aWMgaW50IGNhdGVnb3J5KGludCBjb2RlKSB7CiAgICBpZiAoY29kZSA+PSBDQVRFR09SSUVTLmxlbmd0aCkgcmV0dXJuIE9USEVSOwogICAgcmV0dXJuIENBVEVHT1JJRVNbY29kZV07CiAgfQoKICBTdHJpbmcgZ2V0RGVsaW1pdGVkKGludCBzdGFydFBvc2l0aW9uKSB7CiAgICBwb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb247CiAgICBpbnQgZGVsaW1pdGVyID0gc3JjLmNvZGVVbml0QXQoc3RhcnRQb3NpdGlvbik7CiAgICBpbnQgY3VycmVudENvZGU7CiAgICBkbyB7CiAgICAgIHBvc2l0aW9uKys7CiAgICAgIGlmIChwb3NpdGlvbiA+PSBzcmMubGVuZ3RoKSBlcnJvcigiVW50ZXJtaW5hdGVkIGxpdGVyYWwiKTsKICAgICAgY3VycmVudENvZGUgPSBzcmMuY29kZVVuaXRBdChwb3NpdGlvbik7CiAgICAgIGlmIChjdXJyZW50Q29kZSA9PSBjaGFyQ29kZXMuJExGKSBlcnJvcigiVW50ZXJtaW5hdGVkIGxpdGVyYWwiKTsKICAgICAgaWYgKGN1cnJlbnRDb2RlID09IGNoYXJDb2Rlcy4kQkFDS1NMQVNIKSB7CiAgICAgICAgaWYgKCsrcG9zaXRpb24gPj0gc3JjLmxlbmd0aCkgZXJyb3IoIlVudGVybWluYXRlZCBsaXRlcmFsIik7CiAgICAgICAgaW50IGVzY2FwZWQgPSBzcmMuY29kZVVuaXRBdChwb3NpdGlvbik7CiAgICAgICAgaWYgKGVzY2FwZWQgPT0gY2hhckNvZGVzLiR4IHx8CiAgICAgICAgICAgIGVzY2FwZWQgPT0gY2hhckNvZGVzLiRYIHx8CiAgICAgICAgICAgIGVzY2FwZWQgPT0gY2hhckNvZGVzLiR1IHx8CiAgICAgICAgICAgIGVzY2FwZWQgPT0gY2hhckNvZGVzLiRVIHx8CiAgICAgICAgICAgIGNhdGVnb3J5KGVzY2FwZWQpID09IE5VTUVSSUMpIHsKICAgICAgICAgIGVycm9yKCdOdW1lcmljIGFuZCBoZXggZXNjYXBlcyBhcmUgbm90IGFsbG93ZWQgaW4gbGl0ZXJhbHMnKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gd2hpbGUgKGN1cnJlbnRDb2RlICE9IGRlbGltaXRlcik7CiAgICBwb3NpdGlvbisrOwogICAgcmV0dXJuIHNyYy5zdWJzdHJpbmcobGFzdFBvc2l0aW9uLCBwb3NpdGlvbik7CiAgfQoKICB2b2lkIGdldFRva2VuKCkgewogICAgc2tpcHBlZE5ld2xpbmUgPSBmYWxzZTsKICAgIGZvciAoOzspIHsKICAgICAgaWYgKHBvc2l0aW9uID49IHNyYy5sZW5ndGgpIGJyZWFrOwogICAgICBpbnQgY29kZSA9IHNyYy5jb2RlVW5pdEF0KHBvc2l0aW9uKTsKICAgICAgLy8gIFNraXAgJy8vJyBhbmQgJy8qJyBzdHlsZSBjb21tZW50cy4KICAgICAgaWYgKGNvZGUgPT0gY2hhckNvZGVzLiRTTEFTSCAmJiBwb3NpdGlvbiArIDEgPCBzcmMubGVuZ3RoKSB7CiAgICAgICAgaWYgKHNyYy5jb2RlVW5pdEF0KHBvc2l0aW9uICsgMSkgPT0gY2hhckNvZGVzLiRTTEFTSCkgewogICAgICAgICAgaW50IG5leHRQb3NpdGlvbiA9IHNyYy5pbmRleE9mKCdcbicsIHBvc2l0aW9uKTsKICAgICAgICAgIGlmIChuZXh0UG9zaXRpb24gPT0gLTEpIG5leHRQb3NpdGlvbiA9IHNyYy5sZW5ndGg7CiAgICAgICAgICBwb3NpdGlvbiA9IG5leHRQb3NpdGlvbjsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0gZWxzZSBpZiAoc3JjLmNvZGVVbml0QXQocG9zaXRpb24gKyAxKSA9PSBjaGFyQ29kZXMuJFNUQVIpIHsKICAgICAgICAgIGludCBuZXh0UG9zaXRpb24gPSBzcmMuaW5kZXhPZignKi8nLCBwb3NpdGlvbiArIDIpOwogICAgICAgICAgaWYgKG5leHRQb3NpdGlvbiA9PSAtMSkgZXJyb3IoJ1VudGVybWluYXRlZCBjb21tZW50Jyk7CiAgICAgICAgICBwb3NpdGlvbiA9IG5leHRQb3NpdGlvbiArIDI7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGNhdGVnb3J5KGNvZGUpICE9IFdISVRFU1BBQ0UpIGJyZWFrOwogICAgICBpZiAoY29kZSA9PSBjaGFyQ29kZXMuJExGKSBza2lwcGVkTmV3bGluZSA9IHRydWU7CiAgICAgICsrcG9zaXRpb247CiAgICB9CgogICAgaWYgKHBvc2l0aW9uID09IHNyYy5sZW5ndGgpIHsKICAgICAgbGFzdENhdGVnb3J5ID0gTk9ORTsKICAgICAgbGFzdFRva2VuID0gbnVsbDsKICAgICAgbGFzdFBvc2l0aW9uID0gcG9zaXRpb247CiAgICAgIHJldHVybjsKICAgIH0KICAgIGludCBjb2RlID0gc3JjLmNvZGVVbml0QXQocG9zaXRpb24pOwogICAgbGFzdFBvc2l0aW9uID0gcG9zaXRpb247CiAgICBpZiAoY29kZSA9PSBjaGFyQ29kZXMuJFNRIHx8IGNvZGUgPT0gY2hhckNvZGVzLiREUSkgewogICAgICAvLyBTdHJpbmcgbGl0ZXJhbC4KICAgICAgbGFzdENhdGVnb3J5ID0gU1RSSU5HOwogICAgICBsYXN0VG9rZW4gPSBnZXREZWxpbWl0ZWQocG9zaXRpb24pOwogICAgfSBlbHNlIGlmIChjb2RlID09IGNoYXJDb2Rlcy4kMCAmJgogICAgICAgIHBvc2l0aW9uICsgMiA8IHNyYy5sZW5ndGggJiYKICAgICAgICBzcmMuY29kZVVuaXRBdChwb3NpdGlvbiArIDEpID09IGNoYXJDb2Rlcy4keCkgewogICAgICAvLyBIZXggbGl0ZXJhbC4KICAgICAgZm9yIChwb3NpdGlvbiArPSAyOyBwb3NpdGlvbiA8IHNyYy5sZW5ndGg7IHBvc2l0aW9uKyspIHsKICAgICAgICBpbnQgY2F0ID0gY2F0ZWdvcnkoc3JjLmNvZGVVbml0QXQocG9zaXRpb24pKTsKICAgICAgICBpZiAoY2F0ICE9IE5VTUVSSUMgJiYgY2F0ICE9IEFMUEhBKSBicmVhazsKICAgICAgfQogICAgICBsYXN0Q2F0ZWdvcnkgPSBOVU1FUklDOwogICAgICBsYXN0VG9rZW4gPSBzcmMuc3Vic3RyaW5nKGxhc3RQb3NpdGlvbiwgcG9zaXRpb24pOwogICAgICBpZiAoaW50LnRyeVBhcnNlKGxhc3RUb2tlbikgPT0gbnVsbCkgewogICAgICAgIGVycm9yKCJVbnBhcnNlYWJsZSBudW1iZXIiKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChjb2RlID09IGNoYXJDb2Rlcy4kU0xBU0gpIHsKICAgICAgLy8gVG9rZW5zIHRoYXQgc3RhcnQgd2l0aCAvIGFyZSBzcGVjaWFsIGR1ZSB0byByZWdleHAgbGl0ZXJhbHMuCiAgICAgIGxhc3RDYXRlZ29yeSA9IFNZTUJPTDsKICAgICAgcG9zaXRpb24rKzsKICAgICAgaWYgKHBvc2l0aW9uIDwgc3JjLmxlbmd0aCAmJiBzcmMuY29kZVVuaXRBdChwb3NpdGlvbikgPT0gY2hhckNvZGVzLiRFUSkgewogICAgICAgIHBvc2l0aW9uKys7CiAgICAgIH0KICAgICAgbGFzdFRva2VuID0gc3JjLnN1YnN0cmluZyhsYXN0UG9zaXRpb24sIHBvc2l0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIEFsbCBvdGhlciB0b2tlbnMgaGFuZGxlZCBoZXJlLgogICAgICBpbnQgY2F0ID0gY2F0ZWdvcnkoc3JjLmNvZGVVbml0QXQocG9zaXRpb24pKTsKICAgICAgaW50IG5ld0NhdDsKICAgICAgZG8gewogICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgaWYgKHBvc2l0aW9uID09IHNyYy5sZW5ndGgpIGJyZWFrOwogICAgICAgIGludCBjb2RlID0gc3JjLmNvZGVVbml0QXQocG9zaXRpb24pOwogICAgICAgIC8vIFNwZWNpYWwgY29kZSB0byBkaXNhbGxvdyAhLCB+IGFuZCAvIGluIG5vbi1maXJzdCBwb3NpdGlvbiBpbiB0b2tlbiwKICAgICAgICAvLyBzbyB0aGF0ICEhIGFuZCB+fiBwYXJzZSBhcyB0d28gdG9rZW5zIGFuZCAhPSBwYXJzZXMgYXMgb25lLCB3aGlsZSA9LwogICAgICAgIC8vIHBhcnNlcyBhcyBhIGFuIGVxdWFscyB0b2tlbiBmb2xsb3dlZCBieSBhIHJlZ2V4cCBsaXRlcmFsIHN0YXJ0LgogICAgICAgIG5ld0NhdCA9IChjb2RlID09IGNoYXJDb2Rlcy4kQkFORyB8fAogICAgICAgICAgICAgICAgY29kZSA9PSBjaGFyQ29kZXMuJFNMQVNIIHx8CiAgICAgICAgICAgICAgICBjb2RlID09IGNoYXJDb2Rlcy4kVElMREUpCiAgICAgICAgICAgID8gTk9ORQogICAgICAgICAgICA6IGNhdGVnb3J5KGNvZGUpOwogICAgICB9IHdoaWxlICghc2luZ2xlQ2hhckNhdGVnb3J5KGNhdCkgJiYKICAgICAgICAgIChjYXQgPT0gbmV3Q2F0IHx8CiAgICAgICAgICAgICAgKGNhdCA9PSBBTFBIQSAmJiBuZXdDYXQgPT0gTlVNRVJJQykgfHwgLy8gZWcuIGxldmVsNDIuCiAgICAgICAgICAgICAgKGNhdCA9PSBOVU1FUklDICYmIG5ld0NhdCA9PSBET1QpKSk7IC8vIGVnLiAzLjE0MTUKICAgICAgbGFzdENhdGVnb3J5ID0gY2F0OwogICAgICBsYXN0VG9rZW4gPSBzcmMuc3Vic3RyaW5nKGxhc3RQb3NpdGlvbiwgcG9zaXRpb24pOwogICAgICBpZiAoY2F0ID09IE5VTUVSSUMpIHsKICAgICAgICBpZiAoZG91YmxlLnRyeVBhcnNlKGxhc3RUb2tlbikgPT0gbnVsbCkgewogICAgICAgICAgZXJyb3IoIlVucGFyc2VhYmxlIG51bWJlciIpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChjYXQgPT0gU1lNQk9MKSB7CiAgICAgICAgaW50IGJpbmFyeVByZWNlbmRlbmNlID0gQklOQVJZX1BSRUNFREVOQ0VbbGFzdFRva2VuXTsKICAgICAgICBpZiAoYmluYXJ5UHJlY2VuZGVuY2UgPT0gbnVsbCAmJiAhVU5BUllfT1BFUkFUT1JTLmNvbnRhaW5zKGxhc3RUb2tlbikpIHsKICAgICAgICAgIGVycm9yKCJVbmtub3duIG9wZXJhdG9yIik7CiAgICAgICAgfQogICAgICAgIGlmIChpc0Fzc2lnbm1lbnQobGFzdFRva2VuKSkgbGFzdENhdGVnb3J5ID0gQVNTSUdOTUVOVDsKICAgICAgfSBlbHNlIGlmIChjYXQgPT0gQUxQSEEpIHsKICAgICAgICBpZiAoT1BFUkFUT1JTX1RIQVRfTE9PS19MSUtFX0lERU5USUZJRVJTLmNvbnRhaW5zKGxhc3RUb2tlbikpIHsKICAgICAgICAgIGxhc3RDYXRlZ29yeSA9IFNZTUJPTDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgZXhwZWN0Q2F0ZWdvcnkoaW50IGNhdCkgewogICAgaWYgKGNhdCAhPSBsYXN0Q2F0ZWdvcnkpIGVycm9yKCJFeHBlY3RlZCAke2NhdGVnb3J5VG9TdHJpbmcoY2F0KX0iKTsKICAgIGdldFRva2VuKCk7CiAgfQoKICBib29sIGFjY2VwdENhdGVnb3J5KGludCBjYXQpIHsKICAgIGlmIChjYXQgPT0gbGFzdENhdGVnb3J5KSB7CiAgICAgIGdldFRva2VuKCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdm9pZCBleHBlY3RTZW1pY29sb24oKSB7CiAgICBpZiAoYWNjZXB0U2VtaWNvbG9uKCkpIHJldHVybjsKICAgIGVycm9yKCdFeHBlY3RlZCBTRU1JQ09MT04nKTsKICB9CgogIGJvb2wgYWNjZXB0U2VtaWNvbG9uKCkgewogICAgLy8gQWNjZXB0IHNlbWljb2xvbiBvciBhdXRvbWF0aWNhbGx5IGluc2VydGVkIHNlbWljb2xvbiBiZWZvcmUgY2xvc2UgYnJhY2UuCiAgICAvLyBNaW5pcGFyc2VyIGZvcmJpZHMgb3RoZXIga2luZHMgb2Ygc2VtaWNvbG9uIGluc2VydGlvbi4KICAgIGlmIChSQlJBQ0UgPT0gbGFzdENhdGVnb3J5KSByZXR1cm4gdHJ1ZTsKICAgIGlmIChOT05FID09IGxhc3RDYXRlZ29yeSkgcmV0dXJuIHRydWU7IC8vIGVuZCBvZiBpbnB1dAogICAgaWYgKHNraXBwZWROZXdsaW5lKSB7CiAgICAgIGVycm9yKCdObyBhdXRvbWF0aWMgc2VtaWNvbG9uIGluc2VydGlvbiBhdCBwcmVjZWRpbmcgbmV3bGluZScpOwogICAgfQogICAgcmV0dXJuIGFjY2VwdENhdGVnb3J5KFNFTUlDT0xPTik7CiAgfQoKICBib29sIGFjY2VwdFN0cmluZyhTdHJpbmcgc3RyaW5nKSB7CiAgICBpZiAobGFzdFRva2VuID09IHN0cmluZykgewogICAgICBnZXRUb2tlbigpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgZXJyb3IobWVzc2FnZSkgewogICAgdGhyb3cgbmV3IE1pbmlKc1BhcnNlckVycm9yKHRoaXMsIG1lc3NhZ2UpOwogIH0KCiAgLy8vIFJldHVybnMgZWl0aGVyIHRoZSBuYW1lIGZvciB0aGUgaG9sZSwgb3IgaXRzIGludGVnZXIgcG9zaXRpb24uCiAgcGFyc2VIYXNoKCkgewogICAgU3RyaW5nIGhvbGVOYW1lID0gbGFzdFRva2VuOwogICAgaWYgKGFjY2VwdENhdGVnb3J5KEFMUEhBKSkgewogICAgICAvLyBOYW1lZCBob2xlLiBFeGFtcGxlOiAnZnVuY3Rpb24gI2Z1bk5hbWUoKSB7IC4uLiB9JwogICAgICBpZiAoaGFzUG9zaXRpb25hbEhvbGVzKSB7CiAgICAgICAgZXJyb3IoJ0hvbGVzIG11c3QgYWxsIGJlIHBvc2l0aW9uYWwgb3IgbmFtZWQuICRob2xlTmFtZScpOwogICAgICB9CiAgICAgIHJldHVybiBob2xlTmFtZTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChoYXNOYW1lZEhvbGVzKSB7CiAgICAgICAgZXJyb3IoJ0hvbGVzIG11c3QgYWxsIGJlIHBvc2l0aW9uYWwgb3IgbmFtZWQuICRob2xlTmFtZScpOwogICAgICB9CiAgICAgIGludCBwb3NpdGlvbiA9IGludGVycG9sYXRlZFZhbHVlcy5sZW5ndGg7CiAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgIH0KICB9CgogIEV4cHJlc3Npb24gcGFyc2VQcmltYXJ5KCkgewogICAgU3RyaW5nIGxhc3QgPSBsYXN0VG9rZW47CiAgICBpZiAoYWNjZXB0Q2F0ZWdvcnkoQUxQSEEpKSB7CiAgICAgIGlmIChsYXN0ID09ICJ0cnVlIikgewogICAgICAgIHJldHVybiBuZXcgTGl0ZXJhbEJvb2wodHJ1ZSk7CiAgICAgIH0gZWxzZSBpZiAobGFzdCA9PSAiZmFsc2UiKSB7CiAgICAgICAgcmV0dXJuIG5ldyBMaXRlcmFsQm9vbChmYWxzZSk7CiAgICAgIH0gZWxzZSBpZiAobGFzdCA9PSAibnVsbCIpIHsKICAgICAgICByZXR1cm4gbmV3IExpdGVyYWxOdWxsKCk7CiAgICAgIH0gZWxzZSBpZiAobGFzdCA9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKCk7CiAgICAgIH0gZWxzZSBpZiAobGFzdCA9PSAidGhpcyIpIHsKICAgICAgICByZXR1cm4gbmV3IFRoaXMoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IFZhcmlhYmxlVXNlKGxhc3QpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGFjY2VwdENhdGVnb3J5KExQQVJFTikpIHsKICAgICAgRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uKCk7CiAgICAgIGV4cGVjdENhdGVnb3J5KFJQQVJFTik7CiAgICAgIHJldHVybiBleHByZXNzaW9uOwogICAgfSBlbHNlIGlmIChhY2NlcHRDYXRlZ29yeShTVFJJTkcpKSB7CiAgICAgIHJldHVybiBuZXcgTGl0ZXJhbFN0cmluZyhsYXN0KTsKICAgIH0gZWxzZSBpZiAoYWNjZXB0Q2F0ZWdvcnkoTlVNRVJJQykpIHsKICAgICAgcmV0dXJuIG5ldyBMaXRlcmFsTnVtYmVyKGxhc3QpOwogICAgfSBlbHNlIGlmIChhY2NlcHRDYXRlZ29yeShMQlJBQ0UpKSB7CiAgICAgIHJldHVybiBwYXJzZU9iamVjdEluaXRpYWxpemVyKCk7CiAgICB9IGVsc2UgaWYgKGFjY2VwdENhdGVnb3J5KExTUVVBUkUpKSB7CiAgICAgIHZhciB2YWx1ZXMgPSA8RXhwcmVzc2lvbj5bXTsKCiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgaWYgKGFjY2VwdENhdGVnb3J5KENPTU1BKSkgewogICAgICAgICAgdmFsdWVzLmFkZChuZXcgQXJyYXlIb2xlKCkpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmIChhY2NlcHRDYXRlZ29yeShSU1FVQVJFKSkgYnJlYWs7CiAgICAgICAgdmFsdWVzLmFkZChwYXJzZUFzc2lnbm1lbnQoKSk7CiAgICAgICAgaWYgKGFjY2VwdENhdGVnb3J5KFJTUVVBUkUpKSBicmVhazsKICAgICAgICBleHBlY3RDYXRlZ29yeShDT01NQSk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBBcnJheUluaXRpYWxpemVyKHZhbHVlcyk7CiAgICB9IGVsc2UgaWYgKGxhc3QgIT0gbnVsbCAmJiBsYXN0LnN0YXJ0c1dpdGgoIi8iKSkgewogICAgICBTdHJpbmcgcmVnZXhwID0gZ2V0RGVsaW1pdGVkKGxhc3RQb3NpdGlvbik7CiAgICAgIGdldFRva2VuKCk7CiAgICAgIFN0cmluZyBmbGFncyA9IGxhc3RUb2tlbjsKICAgICAgaWYgKCFhY2NlcHRDYXRlZ29yeShBTFBIQSkpIGZsYWdzID0gIiI7CiAgICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IG5ldyBSZWdFeHBMaXRlcmFsKHJlZ2V4cCArIGZsYWdzKTsKICAgICAgcmV0dXJuIGV4cHJlc3Npb247CiAgICB9IGVsc2UgaWYgKGFjY2VwdENhdGVnb3J5KEhBU0gpKSB7CiAgICAgIHZhciBuYW1lT3JQb3NpdGlvbiA9IHBhcnNlSGFzaCgpOwogICAgICBJbnRlcnBvbGF0ZWRFeHByZXNzaW9uIGV4cHJlc3Npb24gPQogICAgICAgICAgbmV3IEludGVycG9sYXRlZEV4cHJlc3Npb24obmFtZU9yUG9zaXRpb24pOwogICAgICBpbnRlcnBvbGF0ZWRWYWx1ZXMuYWRkKGV4cHJlc3Npb24pOwogICAgICByZXR1cm4gZXhwcmVzc2lvbjsKICAgIH0gZWxzZSB7CiAgICAgIGVycm9yKCJFeHBlY3RlZCBwcmltYXJ5IGV4cHJlc3Npb24iKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICBFeHByZXNzaW9uIHBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKCkgewogICAgaWYgKGxhc3RDYXRlZ29yeSA9PSBBTFBIQSB8fCBsYXN0Q2F0ZWdvcnkgPT0gSEFTSCkgewogICAgICBEZWNsYXJhdGlvbiBuYW1lID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKCk7CiAgICAgIHJldHVybiBuZXcgTmFtZWRGdW5jdGlvbihuYW1lLCBwYXJzZUZ1bigpKTsKICAgIH0KICAgIHJldHVybiBwYXJzZUZ1bigpOwogIH0KCiAgRXhwcmVzc2lvbiBwYXJzZUZ1bigpIHsKICAgIExpc3Q8UGFyYW1ldGVyPiBwYXJhbXMgPSA8UGFyYW1ldGVyPltdOwoKICAgIGV4cGVjdENhdGVnb3J5KExQQVJFTik7CiAgICBpZiAoIWFjY2VwdENhdGVnb3J5KFJQQVJFTikpIHsKICAgICAgZm9yICg7OykgewogICAgICAgIGlmIChhY2NlcHRDYXRlZ29yeShIQVNIKSkgewogICAgICAgICAgdmFyIG5hbWVPclBvc2l0aW9uID0gcGFyc2VIYXNoKCk7CiAgICAgICAgICBJbnRlcnBvbGF0ZWRQYXJhbWV0ZXIgcGFyYW1ldGVyID0KICAgICAgICAgICAgICBuZXcgSW50ZXJwb2xhdGVkUGFyYW1ldGVyKG5hbWVPclBvc2l0aW9uKTsKICAgICAgICAgIGludGVycG9sYXRlZFZhbHVlcy5hZGQocGFyYW1ldGVyKTsKICAgICAgICAgIHBhcmFtcy5hZGQocGFyYW1ldGVyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgU3RyaW5nIGFyZ3VtZW50TmFtZSA9IGxhc3RUb2tlbjsKICAgICAgICAgIGV4cGVjdENhdGVnb3J5KEFMUEhBKTsKICAgICAgICAgIHBhcmFtcy5hZGQobmV3IFBhcmFtZXRlcihhcmd1bWVudE5hbWUpKTsKICAgICAgICB9CiAgICAgICAgaWYgKGFjY2VwdENhdGVnb3J5KENPTU1BKSkgY29udGludWU7CiAgICAgICAgZXhwZWN0Q2F0ZWdvcnkoUlBBUkVOKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgQXN5bmNNb2RpZmllciBhc3luY01vZGlmaWVyOwogICAgaWYgKGFjY2VwdFN0cmluZygnYXN5bmMnKSkgewogICAgICBpZiAoYWNjZXB0U3RyaW5nKCcqJykpIHsKICAgICAgICBhc3luY01vZGlmaWVyID0gQXN5bmNNb2RpZmllci5hc3luY1N0YXI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXN5bmNNb2RpZmllciA9IEFzeW5jTW9kaWZpZXIuYXN5bmM7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoYWNjZXB0U3RyaW5nKCdzeW5jJykpIHsKICAgICAgaWYgKCFhY2NlcHRTdHJpbmcoJyonKSkgZXJyb3IoIk9ubHkgc3luYyogaXMgdmFsaWQgLSBzeW5jIGlzIGltcGxpZWQiKTsKICAgICAgYXN5bmNNb2RpZmllciA9IEFzeW5jTW9kaWZpZXIuc3luY1N0YXI7CiAgICB9IGVsc2UgewogICAgICBhc3luY01vZGlmaWVyID0gQXN5bmNNb2RpZmllci5zeW5jOwogICAgfQogICAgZXhwZWN0Q2F0ZWdvcnkoTEJSQUNFKTsKICAgIEJsb2NrIGJsb2NrID0gcGFyc2VCbG9jaygpOwogICAgcmV0dXJuIG5ldyBGdW4ocGFyYW1zLCBibG9jaywgYXN5bmNNb2RpZmllcjogYXN5bmNNb2RpZmllcik7CiAgfQoKICBFeHByZXNzaW9uIHBhcnNlT2JqZWN0SW5pdGlhbGl6ZXIoKSB7CiAgICBMaXN0PFByb3BlcnR5PiBwcm9wZXJ0aWVzID0gPFByb3BlcnR5PltdOwogICAgZm9yICg7OykgewogICAgICBpZiAoYWNjZXB0Q2F0ZWdvcnkoUkJSQUNFKSkgYnJlYWs7CiAgICAgIC8vIExpbWl0ZWQgc3Vic2V0OiBrZXlzIGFyZSBpZGVudGlmaWVycywgbm8gJ2dldCcgb3IgJ3NldCcgcHJvcGVydGllcy4KICAgICAgTGl0ZXJhbCBwcm9wZXJ0eU5hbWU7CiAgICAgIFN0cmluZyBpZGVudGlmaWVyID0gbGFzdFRva2VuOwogICAgICBpZiAoYWNjZXB0Q2F0ZWdvcnkoQUxQSEEpKSB7CiAgICAgICAgcHJvcGVydHlOYW1lID0gbmV3IExpdGVyYWxTdHJpbmcoJyIkaWRlbnRpZmllciInKTsKICAgICAgfSBlbHNlIGlmIChhY2NlcHRDYXRlZ29yeShTVFJJTkcpKSB7CiAgICAgICAgcHJvcGVydHlOYW1lID0gbmV3IExpdGVyYWxTdHJpbmcoaWRlbnRpZmllcik7CiAgICAgIH0gZWxzZSBpZiAoYWNjZXB0Q2F0ZWdvcnkoU1lNQk9MKSkgewogICAgICAgIC8vIGUuZy4gdm9pZAogICAgICAgIHByb3BlcnR5TmFtZSA9IG5ldyBMaXRlcmFsU3RyaW5nKCciJGlkZW50aWZpZXIiJyk7CiAgICAgIH0gZWxzZSBpZiAoYWNjZXB0Q2F0ZWdvcnkoSEFTSCkpIHsKICAgICAgICB2YXIgbmFtZU9yUG9zaXRpb24gPSBwYXJzZUhhc2goKTsKICAgICAgICBJbnRlcnBvbGF0ZWRMaXRlcmFsIGludGVycG9sYXRlZExpdGVyYWwgPQogICAgICAgICAgICBuZXcgSW50ZXJwb2xhdGVkTGl0ZXJhbChuYW1lT3JQb3NpdGlvbik7CiAgICAgICAgaW50ZXJwb2xhdGVkVmFsdWVzLmFkZChpbnRlcnBvbGF0ZWRMaXRlcmFsKTsKICAgICAgICBwcm9wZXJ0eU5hbWUgPSBpbnRlcnBvbGF0ZWRMaXRlcmFsOwogICAgICB9IGVsc2UgewogICAgICAgIGVycm9yKCdFeHBlY3RlZCBwcm9wZXJ0eSBuYW1lJyk7CiAgICAgIH0KICAgICAgZXhwZWN0Q2F0ZWdvcnkoQ09MT04pOwogICAgICBFeHByZXNzaW9uIHZhbHVlID0gcGFyc2VBc3NpZ25tZW50KCk7CiAgICAgIHByb3BlcnRpZXMuYWRkKG5ldyBQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKSk7CiAgICAgIGlmIChhY2NlcHRDYXRlZ29yeShSQlJBQ0UpKSBicmVhazsKICAgICAgZXhwZWN0Q2F0ZWdvcnkoQ09NTUEpOwogICAgfQogICAgcmV0dXJuIG5ldyBPYmplY3RJbml0aWFsaXplcihwcm9wZXJ0aWVzKTsKICB9CgogIEV4cHJlc3Npb24gcGFyc2VNZW1iZXIoKSB7CiAgICBFeHByZXNzaW9uIHJlY2VpdmVyID0gcGFyc2VQcmltYXJ5KCk7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBpZiAoYWNjZXB0Q2F0ZWdvcnkoRE9UKSkgewogICAgICAgIHJlY2VpdmVyID0gZ2V0RG90UmhzKHJlY2VpdmVyKTsKICAgICAgfSBlbHNlIGlmIChhY2NlcHRDYXRlZ29yeShMU1FVQVJFKSkgewogICAgICAgIEV4cHJlc3Npb24gaW5CcmFjZXMgPSBwYXJzZUV4cHJlc3Npb24oKTsKICAgICAgICBleHBlY3RDYXRlZ29yeShSU1FVQVJFKTsKICAgICAgICByZWNlaXZlciA9IG5ldyBQcm9wZXJ0eUFjY2VzcyhyZWNlaXZlciwgaW5CcmFjZXMpOwogICAgICB9IGVsc2UgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVjZWl2ZXI7CiAgfQoKICBFeHByZXNzaW9uIHBhcnNlQ2FsbCgpIHsKICAgIGJvb2wgY29uc3RydWN0b3IgPSBhY2NlcHRTdHJpbmcoIm5ldyIpOwogICAgRXhwcmVzc2lvbiByZWNlaXZlciA9IHBhcnNlTWVtYmVyKCk7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBpZiAoYWNjZXB0Q2F0ZWdvcnkoTFBBUkVOKSkgewogICAgICAgIGZpbmFsIGFyZ3VtZW50cyA9IDxFeHByZXNzaW9uPltdOwogICAgICAgIGlmICghYWNjZXB0Q2F0ZWdvcnkoUlBBUkVOKSkgewogICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgRXhwcmVzc2lvbiBhcmd1bWVudCA9IHBhcnNlQXNzaWdubWVudCgpOwogICAgICAgICAgICBhcmd1bWVudHMuYWRkKGFyZ3VtZW50KTsKICAgICAgICAgICAgaWYgKGFjY2VwdENhdGVnb3J5KFJQQVJFTikpIGJyZWFrOwogICAgICAgICAgICBleHBlY3RDYXRlZ29yeShDT01NQSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJlY2VpdmVyID0gY29uc3RydWN0b3IKICAgICAgICAgICAgPyBuZXcgTmV3KHJlY2VpdmVyLCBhcmd1bWVudHMpCiAgICAgICAgICAgIDogbmV3IENhbGwocmVjZWl2ZXIsIGFyZ3VtZW50cyk7CiAgICAgICAgY29uc3RydWN0b3IgPSBmYWxzZTsKICAgICAgfSBlbHNlIGlmICghY29uc3RydWN0b3IgJiYgYWNjZXB0Q2F0ZWdvcnkoTFNRVUFSRSkpIHsKICAgICAgICBFeHByZXNzaW9uIGluQnJhY2VzID0gcGFyc2VFeHByZXNzaW9uKCk7CiAgICAgICAgZXhwZWN0Q2F0ZWdvcnkoUlNRVUFSRSk7CiAgICAgICAgcmVjZWl2ZXIgPSBuZXcgUHJvcGVydHlBY2Nlc3MocmVjZWl2ZXIsIGluQnJhY2VzKTsKICAgICAgfSBlbHNlIGlmICghY29uc3RydWN0b3IgJiYgYWNjZXB0Q2F0ZWdvcnkoRE9UKSkgewogICAgICAgIHJlY2VpdmVyID0gZ2V0RG90UmhzKHJlY2VpdmVyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBKUyBhbGxvd3MgbmV3IHdpdGhvdXQgKCksIGJ1dCB3ZSBkb24ndC4KICAgICAgICBpZiAoY29uc3RydWN0b3IpIGVycm9yKCJQYXJlbnRoZXNlcyBhcmUgcmVxdWlyZWQgZm9yIG5ldyIpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVjZWl2ZXI7CiAgfQoKICBFeHByZXNzaW9uIGdldERvdFJocyhFeHByZXNzaW9uIHJlY2VpdmVyKSB7CiAgICBpZiAoYWNjZXB0Q2F0ZWdvcnkoSEFTSCkpIHsKICAgICAgdmFyIG5hbWVPclBvc2l0aW9uID0gcGFyc2VIYXNoKCk7CiAgICAgIEludGVycG9sYXRlZFNlbGVjdG9yIHByb3BlcnR5ID0gbmV3IEludGVycG9sYXRlZFNlbGVjdG9yKG5hbWVPclBvc2l0aW9uKTsKICAgICAgaW50ZXJwb2xhdGVkVmFsdWVzLmFkZChwcm9wZXJ0eSk7CiAgICAgIHJldHVybiBuZXcgUHJvcGVydHlBY2Nlc3MocmVjZWl2ZXIsIHByb3BlcnR5KTsKICAgIH0KICAgIFN0cmluZyBpZGVudGlmaWVyID0gbGFzdFRva2VuOwogICAgLy8gSW4gRVM1IGtleXdvcmRzIGxpa2UgZGVsZXRlIGFuZCBjb250aW51ZSBhcmUgYWxsb3dlZCBhcyBwcm9wZXJ0eQogICAgLy8gbmFtZXMsIGFuZCB0aGUgSW5kZXhlZERCIEFQSSB1c2VzIHRoYXQsIHNvIHdlIG5lZWQgdG8gYWxsb3cgaXQgaGVyZS4KICAgIGlmIChhY2NlcHRDYXRlZ29yeShTWU1CT0wpKSB7CiAgICAgIGlmICghT1BFUkFUT1JTX1RIQVRfTE9PS19MSUtFX0lERU5USUZJRVJTLmNvbnRhaW5zKGlkZW50aWZpZXIpKSB7CiAgICAgICAgZXJyb3IoIkV4cGVjdGVkIGFscGhhbnVtZXJpYyBpZGVudGlmaWVyIik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGV4cGVjdENhdGVnb3J5KEFMUEhBKTsKICAgIH0KICAgIHJldHVybiBuZXcgUHJvcGVydHlBY2Nlc3MuZmllbGQocmVjZWl2ZXIsIGlkZW50aWZpZXIpOwogIH0KCiAgRXhwcmVzc2lvbiBwYXJzZVBvc3RmaXgoKSB7CiAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwYXJzZUNhbGwoKTsKICAgIFN0cmluZyBvcGVyYXRvciA9IGxhc3RUb2tlbjsKICAgIC8vIEphdmFTY3JpcHQgZ3JhbW1hciBpczoKICAgIC8vICAgICBMZWZ0SGFuZFNpZGVFeHByZXNzaW9uIFtubyBMaW5lVGVybWluYXRvciBoZXJlXSArKwogICAgaWYgKGxhc3RDYXRlZ29yeSA9PSBTWU1CT0wgJiYKICAgICAgICAhc2tpcHBlZE5ld2xpbmUgJiYKICAgICAgICAoYWNjZXB0U3RyaW5nKCIrKyIpIHx8IGFjY2VwdFN0cmluZygiLS0iKSkpIHsKICAgICAgcmV0dXJuIG5ldyBQb3N0Zml4KG9wZXJhdG9yLCBleHByZXNzaW9uKTsKICAgIH0KICAgIC8vIElmIHdlIGRvbid0IGFjY2VwdCAnKysnIG9yICctLScgZHVlIHRvIHNraXBwZWROZXdsaW5lIGEgbmV3bGluZSwgbm8gb3RoZXIKICAgIC8vIHBhcnQgb2YgdGhlIHBhcnNlciB3aWxsIGFjY2VwdCB0aGUgdG9rZW4gYW5kIHdlIHdpbGwgZ2V0IGFuIGVycm9yIGF0IHRoZQogICAgLy8gd2hvbGUgZXhwcmVzc2lvbiBsZXZlbC4KICAgIHJldHVybiBleHByZXNzaW9uOwogIH0KCiAgRXhwcmVzc2lvbiBwYXJzZVVuYXJ5SGlnaCgpIHsKICAgIFN0cmluZyBvcGVyYXRvciA9IGxhc3RUb2tlbjsKICAgIGlmIChsYXN0Q2F0ZWdvcnkgPT0gU1lNQk9MICYmCiAgICAgICAgVU5BUllfT1BFUkFUT1JTLmNvbnRhaW5zKG9wZXJhdG9yKSAmJgogICAgICAgIChhY2NlcHRTdHJpbmcoIisrIikgfHwgYWNjZXB0U3RyaW5nKCItLSIpIHx8IGFjY2VwdFN0cmluZygnYXdhaXQnKSkpIHsKICAgICAgaWYgKG9wZXJhdG9yID09ICJhd2FpdCIpIHJldHVybiBuZXcgQXdhaXQocGFyc2VQb3N0Zml4KCkpOwogICAgICByZXR1cm4gbmV3IFByZWZpeChvcGVyYXRvciwgcGFyc2VQb3N0Zml4KCkpOwogICAgfQogICAgcmV0dXJuIHBhcnNlUG9zdGZpeCgpOwogIH0KCiAgRXhwcmVzc2lvbiBwYXJzZVVuYXJ5TG93KCkgewogICAgU3RyaW5nIG9wZXJhdG9yID0gbGFzdFRva2VuOwogICAgaWYgKGxhc3RDYXRlZ29yeSA9PSBTWU1CT0wgJiYKICAgICAgICBVTkFSWV9PUEVSQVRPUlMuY29udGFpbnMob3BlcmF0b3IpICYmCiAgICAgICAgb3BlcmF0b3IgIT0gIisrIiAmJgogICAgICAgIG9wZXJhdG9yICE9ICItLSIpIHsKICAgICAgZXhwZWN0Q2F0ZWdvcnkoU1lNQk9MKTsKICAgICAgaWYgKG9wZXJhdG9yID09ICJhd2FpdCIpIHJldHVybiBuZXcgQXdhaXQocGFyc2VQb3N0Zml4KCkpOwogICAgICByZXR1cm4gbmV3IFByZWZpeChvcGVyYXRvciwgcGFyc2VVbmFyeUxvdygpKTsKICAgIH0KICAgIHJldHVybiBwYXJzZVVuYXJ5SGlnaCgpOwogIH0KCiAgRXhwcmVzc2lvbiBwYXJzZUJpbmFyeShpbnQgbWF4UHJlY2VkZW5jZSkgewogICAgRXhwcmVzc2lvbiBsaHMgPSBwYXJzZVVuYXJ5TG93KCk7CiAgICBpbnQgbWluUHJlY2VkZW5jZTsKICAgIFN0cmluZyBsYXN0U3ltYm9sOwogICAgRXhwcmVzc2lvbiByaHM7IC8vIFRoaXMgaXMgbnVsbCBmaXJzdCB0aW1lIGFyb3VuZC4KICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIFN0cmluZyBzeW1ib2wgPSBsYXN0VG9rZW47CiAgICAgIGlmIChsYXN0Q2F0ZWdvcnkgIT0gU1lNQk9MIHx8CiAgICAgICAgICAhQklOQVJZX1BSRUNFREVOQ0UuY29udGFpbnNLZXkoc3ltYm9sKSB8fAogICAgICAgICAgQklOQVJZX1BSRUNFREVOQ0Vbc3ltYm9sXSA+IG1heFByZWNlZGVuY2UpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBleHBlY3RDYXRlZ29yeShTWU1CT0wpOwogICAgICBpZiAocmhzID09IG51bGwgfHwgQklOQVJZX1BSRUNFREVOQ0Vbc3ltYm9sXSA+PSBtaW5QcmVjZWRlbmNlKSB7CiAgICAgICAgaWYgKHJocyAhPSBudWxsKSBsaHMgPSBuZXcgQmluYXJ5KGxhc3RTeW1ib2wsIGxocywgcmhzKTsKICAgICAgICBtaW5QcmVjZWRlbmNlID0gQklOQVJZX1BSRUNFREVOQ0Vbc3ltYm9sXTsKICAgICAgICByaHMgPSBwYXJzZVVuYXJ5TG93KCk7CiAgICAgICAgbGFzdFN5bWJvbCA9IHN5bWJvbDsKICAgICAgfSBlbHNlIHsKICAgICAgICBFeHByZXNzaW9uIGhpZ2hlciA9IHBhcnNlQmluYXJ5KEJJTkFSWV9QUkVDRURFTkNFW3N5bWJvbF0pOwogICAgICAgIHJocyA9IG5ldyBCaW5hcnkoc3ltYm9sLCByaHMsIGhpZ2hlcik7CiAgICAgIH0KICAgIH0KICAgIGlmIChyaHMgPT0gbnVsbCkgcmV0dXJuIGxoczsKICAgIHJldHVybiBuZXcgQmluYXJ5KGxhc3RTeW1ib2wsIGxocywgcmhzKTsKICB9CgogIEV4cHJlc3Npb24gcGFyc2VDb25kaXRpb25hbCgpIHsKICAgIEV4cHJlc3Npb24gbGhzID0gcGFyc2VCaW5hcnkoSElHSEVTVF9QQVJTRV9CSU5BUllfUFJFQ0VERU5DRSk7CiAgICBpZiAoIWFjY2VwdENhdGVnb3J5KFFVRVJZKSkgcmV0dXJuIGxoczsKICAgIEV4cHJlc3Npb24gaWZUcnVlID0gcGFyc2VBc3NpZ25tZW50KCk7CiAgICBleHBlY3RDYXRlZ29yeShDT0xPTik7CiAgICBFeHByZXNzaW9uIGlmRmFsc2UgPSBwYXJzZUFzc2lnbm1lbnQoKTsKICAgIHJldHVybiBuZXcgQ29uZGl0aW9uYWwobGhzLCBpZlRydWUsIGlmRmFsc2UpOwogIH0KCiAgRXhwcmVzc2lvbiBwYXJzZUFzc2lnbm1lbnQoKSB7CiAgICBFeHByZXNzaW9uIGxocyA9IHBhcnNlQ29uZGl0aW9uYWwoKTsKICAgIFN0cmluZyBhc3NpZ25tZW50T3BlcmF0b3IgPSBsYXN0VG9rZW47CiAgICBpZiAoYWNjZXB0Q2F0ZWdvcnkoQVNTSUdOTUVOVCkpIHsKICAgICAgRXhwcmVzc2lvbiByaHMgPSBwYXJzZUFzc2lnbm1lbnQoKTsKICAgICAgaWYgKGFzc2lnbm1lbnRPcGVyYXRvciA9PSAiPSIpIHsKICAgICAgICByZXR1cm4gbmV3IEFzc2lnbm1lbnQobGhzLCByaHMpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIEhhbmRsZSArPSwgLT0sIGV0Yy4KICAgICAgICBTdHJpbmcgb3BlcmF0b3IgPQogICAgICAgICAgICBhc3NpZ25tZW50T3BlcmF0b3Iuc3Vic3RyaW5nKDAsIGFzc2lnbm1lbnRPcGVyYXRvci5sZW5ndGggLSAxKTsKICAgICAgICByZXR1cm4gbmV3IEFzc2lnbm1lbnQuY29tcG91bmQobGhzLCBvcGVyYXRvciwgcmhzKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGxoczsKICB9CgogIEV4cHJlc3Npb24gcGFyc2VFeHByZXNzaW9uKCkgewogICAgRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VBc3NpZ25tZW50KCk7CiAgICB3aGlsZSAoYWNjZXB0Q2F0ZWdvcnkoQ09NTUEpKSB7CiAgICAgIEV4cHJlc3Npb24gcmlnaHQgPSBwYXJzZUFzc2lnbm1lbnQoKTsKICAgICAgZXhwcmVzc2lvbiA9IG5ldyBCaW5hcnkoJywnLCBleHByZXNzaW9uLCByaWdodCk7CiAgICB9CiAgICByZXR1cm4gZXhwcmVzc2lvbjsKICB9CgogIFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoKSB7CiAgICBEZWNsYXJhdGlvbiBmaXJzdFZhcmlhYmxlID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKCk7CiAgICByZXR1cm4gZmluaXNoVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoZmlyc3RWYXJpYWJsZSk7CiAgfQoKICBWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCBmaW5pc2hWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgKICAgICAgRGVjbGFyYXRpb24gZmlyc3RWYXJpYWJsZSkgewogICAgdmFyIGluaXRpYWxpemF0aW9uID0gPFZhcmlhYmxlSW5pdGlhbGl6YXRpb24+W107CgogICAgdm9pZCBkZWNsYXJlKERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uKSB7CiAgICAgIEV4cHJlc3Npb24gaW5pdGlhbGl6ZXIgPSBudWxsOwogICAgICBpZiAoYWNjZXB0U3RyaW5nKCI9IikpIHsKICAgICAgICBpbml0aWFsaXplciA9IHBhcnNlQXNzaWdubWVudCgpOwogICAgICB9CiAgICAgIGluaXRpYWxpemF0aW9uLmFkZChuZXcgVmFyaWFibGVJbml0aWFsaXphdGlvbihkZWNsYXJhdGlvbiwgaW5pdGlhbGl6ZXIpKTsKICAgIH0KCiAgICBkZWNsYXJlKGZpcnN0VmFyaWFibGUpOwogICAgd2hpbGUgKGFjY2VwdENhdGVnb3J5KENPTU1BKSkgewogICAgICBEZWNsYXJhdGlvbiB2YXJpYWJsZSA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbigpOwogICAgICBkZWNsYXJlKHZhcmlhYmxlKTsKICAgIH0KICAgIHJldHVybiBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoaW5pdGlhbGl6YXRpb24pOwogIH0KCiAgRXhwcmVzc2lvbiBwYXJzZVZhckRlY2xhcmF0aW9uT3JFeHByZXNzaW9uKCkgewogICAgaWYgKGFjY2VwdFN0cmluZygidmFyIikpIHsKICAgICAgcmV0dXJuIHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb24oKTsKICAgIH0KICB9CgogIEV4cHJlc3Npb24gZXhwcmVzc2lvbigpIHsKICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBhcnNlVmFyRGVjbGFyYXRpb25PckV4cHJlc3Npb24oKTsKICAgIGlmIChsYXN0Q2F0ZWdvcnkgIT0gTk9ORSB8fCBwb3NpdGlvbiAhPSBzcmMubGVuZ3RoKSB7CiAgICAgIGVycm9yKCJVbnBhcnNlZCBqdW5rOiAke2NhdGVnb3J5VG9TdHJpbmcobGFzdENhdGVnb3J5KX0iKTsKICAgIH0KICAgIHJldHVybiBleHByZXNzaW9uOwogIH0KCiAgU3RhdGVtZW50IHN0YXRlbWVudCgpIHsKICAgIFN0YXRlbWVudCBzdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVudCgpOwogICAgaWYgKGxhc3RDYXRlZ29yeSAhPSBOT05FIHx8IHBvc2l0aW9uICE9IHNyYy5sZW5ndGgpIHsKICAgICAgZXJyb3IoIlVucGFyc2VkIGp1bms6ICR7Y2F0ZWdvcnlUb1N0cmluZyhsYXN0Q2F0ZWdvcnkpfSIpOwogICAgfQogICAgLy8gVE9ETyhzcmEpOiBpbnRlcnBvbGF0ZWQgY2FwdHVyZSBoZXJlPwogICAgcmV0dXJuIHN0YXRlbWVudDsKICB9CgogIEJsb2NrIHBhcnNlQmxvY2soKSB7CiAgICBMaXN0PFN0YXRlbWVudD4gc3RhdGVtZW50cyA9IDxTdGF0ZW1lbnQ+W107CgogICAgd2hpbGUgKCFhY2NlcHRDYXRlZ29yeShSQlJBQ0UpKSB7CiAgICAgIFN0YXRlbWVudCBzdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVudCgpOwogICAgICBzdGF0ZW1lbnRzLmFkZChzdGF0ZW1lbnQpOwogICAgfQogICAgcmV0dXJuIG5ldyBCbG9jayhzdGF0ZW1lbnRzKTsKICB9CgogIFN0YXRlbWVudCBwYXJzZVN0YXRlbWVudCgpIHsKICAgIGlmIChhY2NlcHRDYXRlZ29yeShMQlJBQ0UpKSByZXR1cm4gcGFyc2VCbG9jaygpOwoKICAgIGlmIChhY2NlcHRDYXRlZ29yeShTRU1JQ09MT04pKSByZXR1cm4gbmV3IEVtcHR5U3RhdGVtZW50KCk7CgogICAgaWYgKGxhc3RDYXRlZ29yeSA9PSBBTFBIQSkgewogICAgICBpZiAoYWNjZXB0U3RyaW5nKCdyZXR1cm4nKSkgcmV0dXJuIHBhcnNlUmV0dXJuKCk7CgogICAgICBpZiAoYWNjZXB0U3RyaW5nKCd0aHJvdycpKSByZXR1cm4gcGFyc2VUaHJvdygpOwoKICAgICAgaWYgKGFjY2VwdFN0cmluZygnYnJlYWsnKSkgewogICAgICAgIHJldHVybiBwYXJzZUJyZWFrT3JDb250aW51ZSgobGFiZWwpID0+IG5ldyBCcmVhayhsYWJlbCkpOwogICAgICB9CgogICAgICBpZiAoYWNjZXB0U3RyaW5nKCdjb250aW51ZScpKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlQnJlYWtPckNvbnRpbnVlKChsYWJlbCkgPT4gbmV3IENvbnRpbnVlKGxhYmVsKSk7CiAgICAgIH0KCiAgICAgIGlmIChhY2NlcHRTdHJpbmcoJ2lmJykpIHJldHVybiBwYXJzZUlmVGhlbkVsc2UoKTsKCiAgICAgIGlmIChhY2NlcHRTdHJpbmcoJ2ZvcicpKSByZXR1cm4gcGFyc2VGb3IoKTsKCiAgICAgIGlmIChhY2NlcHRTdHJpbmcoJ2Z1bmN0aW9uJykpIHJldHVybiBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKTsKCiAgICAgIGlmIChhY2NlcHRTdHJpbmcoJ3RyeScpKSByZXR1cm4gcGFyc2VUcnkoKTsKCiAgICAgIGlmIChhY2NlcHRTdHJpbmcoJ3ZhcicpKSB7CiAgICAgICAgRXhwcmVzc2lvbiBkZWNsYXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KCk7CiAgICAgICAgZXhwZWN0U2VtaWNvbG9uKCk7CiAgICAgICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uU3RhdGVtZW50KGRlY2xhcmF0aW9ucyk7CiAgICAgIH0KCiAgICAgIGlmIChhY2NlcHRTdHJpbmcoJ3doaWxlJykpIHJldHVybiBwYXJzZVdoaWxlKCk7CgogICAgICBpZiAoYWNjZXB0U3RyaW5nKCdkbycpKSByZXR1cm4gcGFyc2VEbygpOwoKICAgICAgaWYgKGFjY2VwdFN0cmluZygnc3dpdGNoJykpIHJldHVybiBwYXJzZVN3aXRjaCgpOwoKICAgICAgaWYgKGxhc3RUb2tlbiA9PSAnY2FzZScpIGVycm9yKCJDYXNlIG91dHNpZGUgc3dpdGNoLiIpOwoKICAgICAgaWYgKGxhc3RUb2tlbiA9PSAnZGVmYXVsdCcpIGVycm9yKCJEZWZhdWx0IG91dHNpZGUgc3dpdGNoLiIpOwoKICAgICAgaWYgKGxhc3RUb2tlbiA9PSAneWllbGQnKSByZXR1cm4gcGFyc2VZaWVsZCgpOwoKICAgICAgaWYgKGxhc3RUb2tlbiA9PSAnd2l0aCcpIHsKICAgICAgICBlcnJvcignTm90IGltcGxlbWVudGVkIGluIG1pbmkgcGFyc2VyJyk7CiAgICAgIH0KICAgIH0KCiAgICBib29sIGNoZWNrRm9ySW50ZXJwb2xhdGVkU3RhdGVtZW50ID0gbGFzdENhdGVnb3J5ID09IEhBU0g7CgogICAgRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uKCk7CgogICAgaWYgKGV4cHJlc3Npb24gaXMgVmFyaWFibGVVc2UgJiYgYWNjZXB0Q2F0ZWdvcnkoQ09MT04pKSB7CiAgICAgIHJldHVybiBuZXcgTGFiZWxlZFN0YXRlbWVudChleHByZXNzaW9uLm5hbWUsIHBhcnNlU3RhdGVtZW50KCkpOwogICAgfQoKICAgIGV4cGVjdFNlbWljb2xvbigpOwoKICAgIGlmIChjaGVja0ZvckludGVycG9sYXRlZFN0YXRlbWVudCkgewogICAgICAvLyAnUHJvbW90ZScgdGhlIGludGVycG9sYXRlZCBleHByZXNzaW9uIGAjO2AgdG8gYW4gaW50ZXJwb2xhdGVkCiAgICAgIC8vIHN0YXRlbWVudC4KICAgICAgaWYgKGV4cHJlc3Npb24gaXMgSW50ZXJwb2xhdGVkRXhwcmVzc2lvbikgewogICAgICAgIGFzc2VydChpZGVudGljYWwoaW50ZXJwb2xhdGVkVmFsdWVzLmxhc3QsIGV4cHJlc3Npb24pKTsKICAgICAgICBJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQgc3RhdGVtZW50ID0KICAgICAgICAgICAgbmV3IEludGVycG9sYXRlZFN0YXRlbWVudChleHByZXNzaW9uLm5hbWVPclBvc2l0aW9uKTsKICAgICAgICBpbnRlcnBvbGF0ZWRWYWx1ZXNbaW50ZXJwb2xhdGVkVmFsdWVzLmxlbmd0aCAtIDFdID0gc3RhdGVtZW50OwogICAgICAgIHJldHVybiBzdGF0ZW1lbnQ7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcmVzc2lvbik7CiAgfQoKICBTdGF0ZW1lbnQgcGFyc2VSZXR1cm4oKSB7CiAgICBpZiAoYWNjZXB0U2VtaWNvbG9uKCkpIHJldHVybiBuZXcgUmV0dXJuKCk7CiAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb24oKTsKICAgIGV4cGVjdFNlbWljb2xvbigpOwogICAgcmV0dXJuIG5ldyBSZXR1cm4oZXhwcmVzc2lvbik7CiAgfQoKICBTdGF0ZW1lbnQgcGFyc2VZaWVsZCgpIHsKICAgIGJvb2wgaGFzU3RhciA9IGFjY2VwdFN0cmluZygnKicpOwogICAgRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uKCk7CiAgICBleHBlY3RTZW1pY29sb24oKTsKICAgIHJldHVybiBuZXcgRGFydFlpZWxkKGV4cHJlc3Npb24sIGhhc1N0YXIpOwogIH0KCiAgU3RhdGVtZW50IHBhcnNlVGhyb3coKSB7CiAgICBpZiAoc2tpcHBlZE5ld2xpbmUpIGVycm9yKCd0aHJvdyBleHByZXNzaW9uIG11c3QgYmUgb24gc2FtZSBsaW5lJyk7CiAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb24oKTsKICAgIGV4cGVjdFNlbWljb2xvbigpOwogICAgcmV0dXJuIG5ldyBUaHJvdyhleHByZXNzaW9uKTsKICB9CgogIFN0YXRlbWVudCBwYXJzZUJyZWFrT3JDb250aW51ZShjb25zdHJ1Y3RvcikgewogICAgdmFyIGlkZW50aWZpZXIgPSBsYXN0VG9rZW47CiAgICBpZiAoIXNraXBwZWROZXdsaW5lICYmIGFjY2VwdENhdGVnb3J5KEFMUEhBKSkgewogICAgICBleHBlY3RTZW1pY29sb24oKTsKICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yKGlkZW50aWZpZXIpOwogICAgfQogICAgZXhwZWN0U2VtaWNvbG9uKCk7CiAgICByZXR1cm4gY29uc3RydWN0b3IobnVsbCk7CiAgfQoKICBTdGF0ZW1lbnQgcGFyc2VJZlRoZW5FbHNlKCkgewogICAgZXhwZWN0Q2F0ZWdvcnkoTFBBUkVOKTsKICAgIEV4cHJlc3Npb24gY29uZGl0aW9uID0gcGFyc2VFeHByZXNzaW9uKCk7CiAgICBleHBlY3RDYXRlZ29yeShSUEFSRU4pOwogICAgU3RhdGVtZW50IHRoZW5TdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVudCgpOwogICAgaWYgKGFjY2VwdFN0cmluZygnZWxzZScpKSB7CiAgICAgIC8vIFJlc29sdmVzIGRhbmdsaW5nIGVsc2UgYnkgYmluZGluZyAnZWxzZScgdG8gY2xvc2VzdCAnaWYnLgogICAgICBTdGF0ZW1lbnQgZWxzZVN0YXRlbWVudCA9IHBhcnNlU3RhdGVtZW50KCk7CiAgICAgIHJldHVybiBuZXcgSWYoY29uZGl0aW9uLCB0aGVuU3RhdGVtZW50LCBlbHNlU3RhdGVtZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgSWYubm9FbHNlKGNvbmRpdGlvbiwgdGhlblN0YXRlbWVudCk7CiAgICB9CiAgfQoKICBTdGF0ZW1lbnQgcGFyc2VGb3IoKSB7CiAgICAvLyBGb3ItaW5pdC1jb25kaXRpb24taW5jcmVtZW50IHN0eWxlIGxvb3BzIGFyZSBmdWxseSBzdXBwb3J0ZWQuCiAgICAvLwogICAgLy8gT25seSBvbmUgZm9yLWluIHZhcmlhbnQgaXMgY3VycmVudGx5IGltcGxlbWVudGVkOgogICAgLy8KICAgIC8vICAgICBmb3IgKHZhciB2YXJpYWJsZSBpbiBFeHByZXNzaW9uKSBTdGF0ZW1lbnQKICAgIC8vCiAgICBTdGF0ZW1lbnQgZmluaXNoRm9yKEV4cHJlc3Npb24gaW5pdCkgewogICAgICBFeHByZXNzaW9uIGNvbmRpdGlvbiA9IG51bGw7CiAgICAgIGlmICghYWNjZXB0Q2F0ZWdvcnkoU0VNSUNPTE9OKSkgewogICAgICAgIGNvbmRpdGlvbiA9IHBhcnNlRXhwcmVzc2lvbigpOwogICAgICAgIGV4cGVjdENhdGVnb3J5KFNFTUlDT0xPTik7CiAgICAgIH0KICAgICAgRXhwcmVzc2lvbiB1cGRhdGUgPSBudWxsOwogICAgICBpZiAoIWFjY2VwdENhdGVnb3J5KFJQQVJFTikpIHsKICAgICAgICB1cGRhdGUgPSBwYXJzZUV4cHJlc3Npb24oKTsKICAgICAgICBleHBlY3RDYXRlZ29yeShSUEFSRU4pOwogICAgICB9CiAgICAgIFN0YXRlbWVudCBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTsKICAgICAgcmV0dXJuIG5ldyBGb3IoaW5pdCwgY29uZGl0aW9uLCB1cGRhdGUsIGJvZHkpOwogICAgfQoKICAgIGV4cGVjdENhdGVnb3J5KExQQVJFTik7CiAgICBpZiAoYWNjZXB0Q2F0ZWdvcnkoU0VNSUNPTE9OKSkgewogICAgICByZXR1cm4gZmluaXNoRm9yKG51bGwpOwogICAgfQoKICAgIGlmIChhY2NlcHRTdHJpbmcoJ3ZhcicpKSB7CiAgICAgIERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKCk7CiAgICAgIGlmIChhY2NlcHRTdHJpbmcoJ2luJykpIHsKICAgICAgICBFeHByZXNzaW9uIG9iamVjdEV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb24oKTsKICAgICAgICBleHBlY3RDYXRlZ29yeShSUEFSRU4pOwogICAgICAgIFN0YXRlbWVudCBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTsKICAgICAgICByZXR1cm4gbmV3IEZvckluKAogICAgICAgICAgICBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoCiAgICAgICAgICAgICAgICBbbmV3IFZhcmlhYmxlSW5pdGlhbGl6YXRpb24oZGVjbGFyYXRpb24sIG51bGwpXSksCiAgICAgICAgICAgIG9iamVjdEV4cHJlc3Npb24sCiAgICAgICAgICAgIGJvZHkpOwogICAgICB9CiAgICAgIEV4cHJlc3Npb24gZGVjbGFyYXRpb25zID0gZmluaXNoVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoZGVjbGFyYXRpb24pOwogICAgICBleHBlY3RDYXRlZ29yeShTRU1JQ09MT04pOwogICAgICByZXR1cm4gZmluaXNoRm9yKGRlY2xhcmF0aW9ucyk7CiAgICB9CgogICAgRXhwcmVzc2lvbiBpbml0ID0gcGFyc2VFeHByZXNzaW9uKCk7CiAgICBleHBlY3RDYXRlZ29yeShTRU1JQ09MT04pOwogICAgcmV0dXJuIGZpbmlzaEZvcihpbml0KTsKICB9CgogIERlY2xhcmF0aW9uIHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbigpIHsKICAgIGlmIChhY2NlcHRDYXRlZ29yeShIQVNIKSkgewogICAgICB2YXIgbmFtZU9yUG9zaXRpb24gPSBwYXJzZUhhc2goKTsKICAgICAgSW50ZXJwb2xhdGVkRGVjbGFyYXRpb24gZGVjbGFyYXRpb24gPQogICAgICAgICAgbmV3IEludGVycG9sYXRlZERlY2xhcmF0aW9uKG5hbWVPclBvc2l0aW9uKTsKICAgICAgaW50ZXJwb2xhdGVkVmFsdWVzLmFkZChkZWNsYXJhdGlvbik7CiAgICAgIHJldHVybiBkZWNsYXJhdGlvbjsKICAgIH0gZWxzZSB7CiAgICAgIFN0cmluZyB0b2tlbiA9IGxhc3RUb2tlbjsKICAgICAgZXhwZWN0Q2F0ZWdvcnkoQUxQSEEpOwogICAgICByZXR1cm4gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24odG9rZW4pOwogICAgfQogIH0KCiAgU3RhdGVtZW50IHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpIHsKICAgIERlY2xhcmF0aW9uIG5hbWUgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oKTsKICAgIEV4cHJlc3Npb24gZnVuID0gcGFyc2VGdW4oKTsKICAgIHJldHVybiBuZXcgRnVuY3Rpb25EZWNsYXJhdGlvbihuYW1lLCBmdW4pOwogIH0KCiAgU3RhdGVtZW50IHBhcnNlVHJ5KCkgewogICAgZXhwZWN0Q2F0ZWdvcnkoTEJSQUNFKTsKICAgIEJsb2NrIGJvZHkgPSBwYXJzZUJsb2NrKCk7CiAgICBDYXRjaCBjYXRjaFBhcnQgPSBudWxsOwogICAgaWYgKGFjY2VwdFN0cmluZygnY2F0Y2gnKSkgY2F0Y2hQYXJ0ID0gcGFyc2VDYXRjaCgpOwogICAgQmxvY2sgZmluYWxseVBhcnQgPSBudWxsOwogICAgaWYgKGFjY2VwdFN0cmluZygnZmluYWxseScpKSB7CiAgICAgIGV4cGVjdENhdGVnb3J5KExCUkFDRSk7CiAgICAgIGZpbmFsbHlQYXJ0ID0gcGFyc2VCbG9jaygpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKGNhdGNoUGFydCA9PSBudWxsKSBlcnJvcigiZXhwZWN0ZWQgJ2ZpbmFsbHknIik7CiAgICB9CiAgICByZXR1cm4gbmV3IFRyeShib2R5LCBjYXRjaFBhcnQsIGZpbmFsbHlQYXJ0KTsKICB9CgogIFN3aXRjaENsYXVzZSBwYXJzZVN3aXRjaENsYXVzZSgpIHsKICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IG51bGw7CiAgICBpZiAoYWNjZXB0U3RyaW5nKCdjYXNlJykpIHsKICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbigpOwogICAgICBleHBlY3RDYXRlZ29yeShDT0xPTik7CiAgICB9IGVsc2UgewogICAgICBpZiAoIWFjY2VwdFN0cmluZygnZGVmYXVsdCcpKSB7CiAgICAgICAgZXJyb3IoJ2V4cGVjdGVkIGNhc2Ugb3IgZGVmYXVsdCcpOwogICAgICB9CiAgICAgIGV4cGVjdENhdGVnb3J5KENPTE9OKTsKICAgIH0KICAgIExpc3Qgc3RhdGVtZW50cyA9IG5ldyBMaXN0PFN0YXRlbWVudD4oKTsKICAgIHdoaWxlIChsYXN0Q2F0ZWdvcnkgIT0gUkJSQUNFICYmCiAgICAgICAgbGFzdFRva2VuICE9ICdjYXNlJyAmJgogICAgICAgIGxhc3RUb2tlbiAhPSAnZGVmYXVsdCcpIHsKICAgICAgc3RhdGVtZW50cy5hZGQocGFyc2VTdGF0ZW1lbnQoKSk7CiAgICB9CiAgICByZXR1cm4gZXhwcmVzc2lvbiA9PSBudWxsCiAgICAgICAgPyBuZXcgRGVmYXVsdChuZXcgQmxvY2soc3RhdGVtZW50cykpCiAgICAgICAgOiBuZXcgQ2FzZShleHByZXNzaW9uLCBuZXcgQmxvY2soc3RhdGVtZW50cykpOwogIH0KCiAgU3RhdGVtZW50IHBhcnNlV2hpbGUoKSB7CiAgICBleHBlY3RDYXRlZ29yeShMUEFSRU4pOwogICAgRXhwcmVzc2lvbiBjb25kaXRpb24gPSBwYXJzZUV4cHJlc3Npb24oKTsKICAgIGV4cGVjdENhdGVnb3J5KFJQQVJFTik7CiAgICBTdGF0ZW1lbnQgYm9keSA9IHBhcnNlU3RhdGVtZW50KCk7CiAgICByZXR1cm4gbmV3IFdoaWxlKGNvbmRpdGlvbiwgYm9keSk7CiAgfQoKICBTdGF0ZW1lbnQgcGFyc2VEbygpIHsKICAgIFN0YXRlbWVudCBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTsKICAgIGlmIChsYXN0VG9rZW4gIT0gIndoaWxlIikgZXJyb3IoIk1pc3Npbmcgd2hpbGUgYWZ0ZXIgZG8gYm9keS4iKTsKICAgIGdldFRva2VuKCk7CiAgICBleHBlY3RDYXRlZ29yeShMUEFSRU4pOwogICAgRXhwcmVzc2lvbiBjb25kaXRpb24gPSBwYXJzZUV4cHJlc3Npb24oKTsKICAgIGV4cGVjdENhdGVnb3J5KFJQQVJFTik7CiAgICBleHBlY3RTZW1pY29sb24oKTsKICAgIHJldHVybiBuZXcgRG8oYm9keSwgY29uZGl0aW9uKTsKICB9CgogIFN0YXRlbWVudCBwYXJzZVN3aXRjaCgpIHsKICAgIGV4cGVjdENhdGVnb3J5KExQQVJFTik7CiAgICBFeHByZXNzaW9uIGtleSA9IHBhcnNlRXhwcmVzc2lvbigpOwogICAgZXhwZWN0Q2F0ZWdvcnkoUlBBUkVOKTsKICAgIGV4cGVjdENhdGVnb3J5KExCUkFDRSk7CiAgICBMaXN0PFN3aXRjaENsYXVzZT4gY2xhdXNlcyA9IG5ldyBMaXN0PFN3aXRjaENsYXVzZT4oKTsKICAgIHdoaWxlIChsYXN0Q2F0ZWdvcnkgIT0gUkJSQUNFKSB7CiAgICAgIGNsYXVzZXMuYWRkKHBhcnNlU3dpdGNoQ2xhdXNlKCkpOwogICAgfQogICAgZXhwZWN0Q2F0ZWdvcnkoUkJSQUNFKTsKICAgIHJldHVybiBuZXcgU3dpdGNoKGtleSwgY2xhdXNlcyk7CiAgfQoKICBDYXRjaCBwYXJzZUNhdGNoKCkgewogICAgZXhwZWN0Q2F0ZWdvcnkoTFBBUkVOKTsKICAgIERlY2xhcmF0aW9uIGVycm9yTmFtZSA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbigpOwogICAgZXhwZWN0Q2F0ZWdvcnkoUlBBUkVOKTsKICAgIGV4cGVjdENhdGVnb3J5KExCUkFDRSk7CiAgICBCbG9jayBib2R5ID0gcGFyc2VCbG9jaygpOwogICAgcmV0dXJuIG5ldyBDYXRjaChlcnJvck5hbWUsIGJvZHkpOwogIH0KfQoKY2xhc3MgX0ludGVybGVhdmVJdGVyYXRvcjxUIGV4dGVuZHMgTm9kZT4gaW1wbGVtZW50cyBJdGVyYXRvcjxUPiB7CiAgSXRlcmF0b3I8VD4gc291cmNlOwogIFQgc2VwYXJhdG9yOwogIGJvb2wgaXNOZXh0U2VwYXJhdG9yID0gZmFsc2U7CiAgYm9vbCBpc0luaXRpYWxpemVkID0gZmFsc2U7CgogIF9JbnRlcmxlYXZlSXRlcmF0b3IodGhpcy5zb3VyY2UsIHRoaXMuc2VwYXJhdG9yKTsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmICghaXNJbml0aWFsaXplZCkgewogICAgICBpc0luaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgcmV0dXJuIHNvdXJjZS5tb3ZlTmV4dCgpOwogICAgfSBlbHNlIGlmIChpc05leHRTZXBhcmF0b3IpIHsKICAgICAgaXNOZXh0U2VwYXJhdG9yID0gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGlzTmV4dFNlcGFyYXRvciA9IHNvdXJjZS5tb3ZlTmV4dCgpOwogICAgfQogIH0KCiAgVCBnZXQgY3VycmVudCB7CiAgICBpZiAoaXNOZXh0U2VwYXJhdG9yKSByZXR1cm4gc2VwYXJhdG9yOwogICAgcmV0dXJuIHNvdXJjZS5jdXJyZW50OwogIH0KfQoKY2xhc3MgX0ludGVybGVhdmVJdGVyYWJsZTxUIGV4dGVuZHMgTm9kZT4gZXh0ZW5kcyBJdGVyYWJsZUJhc2U8VD4gewogIEl0ZXJhYmxlPFQ+IHNvdXJjZTsKICBUIHNlcGFyYXRvcjsKCiAgX0ludGVybGVhdmVJdGVyYWJsZSh0aGlzLnNvdXJjZSwgdGhpcy5zZXBhcmF0b3IpOwoKICBJdGVyYXRvcjxUPiBnZXQgaXRlcmF0b3IgewogICAgcmV0dXJuIG5ldyBfSW50ZXJsZWF2ZUl0ZXJhdG9yPFQ+KHNvdXJjZS5pdGVyYXRvciwgc2VwYXJhdG9yKTsKICB9Cn0Khk8ATk48AUgyARABBEVORQNJQAQ5AQQBTyIBOQFIQgFQJAEwAQwBPAFMNgE6ASkBMAFNLgE+AU9NGQEnCA8SAVBMAScxCA8VAVFQSFE1ASkpMwFRT0kqAR40Gy00OQFJAUpPRzkBTyYBTURLUD0BJDIIIgFJATw8AUVNGwEbOwgtAU9MUQoBKCc+CBQBTk0BQThHJ0IBUUMBPBUBPRgBTk9PDgEiOSABIjg0AUtMAQFKAT0BARkBT083AQMoARIVAQY8BSEFUU4MBjQ5PDhKLAQBBkAGODg8OEosBAEGQAVIEAYrTVEdJy0NLgYEATRKHDYzTwYVBAEzSRw2ME0GFQQBBjwFJgYyLAQBBkAGNzQxLC8EAQY+BjY0LiswBAEGUFAmBjIzBAExMgQBMDUqNU4eUSATGBMYExgTGBMYExgTGAhJCCxJJz0TBAEwLC9NUQEaGhogASQqGCoYKhgqIyMjHRgqJCUjGC8eD0waCggGATo5BgE4ODgGATgBKgEkPxwaEggjIyhKHBs8JRs8EU4eJS8yGy8bMAoPIAgGAT8EAU8BQxQaLxovIRYaFhsWGhYcFhoWGhYGEQQBMAZOTUMXRwE7Bi5GAUIcGhUnIBgWDTYGLAQBTj4EATsYGSYGLAQBQgE9ATM3ATk3ATUBFU9JBAFBLiA5CC4EAgE4OTMCAUBMKwIBQBo9AgE1RE0TTToCAT8gAgEaMgEdGAEWIwFBHS0/AUEXMEZJAVEUQkoEAgFPGRMSFBFBFhAYG0ssQwQ1BE5AM05NKhUZHRoaFxAEARsbGBREFAFKHEkhTgEaGhwbGx8YGxsbGx0dGxsbHxogGwEnPAEsExEXEhgUGhMZFx0QFhMZExkTGRMZFBoUGhMZEhgSGBIYFhwRFxcdEhgGHAQBKUNFRUUnQkw6OkdISEhNSEhIMQ8BTTNOAWYlDg4ODg4ODg4PDxANDg4NDQ0NDQ4ODA0NDA0VDQ0ODAwMDAsFIwoKCQkJCQ4MDgwNATZJASIxHQQBKx4zFQkSQS5HMUUwJycnJyxICggoEDIEARQcDykrLUNAOj0jFEY+QScUCggvOBIGASIbGB8OBikdOhkdKiclOBY/NjMIHjktJQgrRh0SUBQIOQ0oNBILFCstT1BLLSwqEx4rHEVBGjkcMicKIj5RJQpAIUghCggGBAEhSRAEASEfEhMGEgQBGyMhBAEbUD4tOxpGBiYEASUfEhMGEgQBGDAEAUUQISE8IEMIFw0bQwgwFwYEAR4dIRwmJCcjIicqIxsPJggpMR4ZKSYqJiknKiMBFSUnFAosJywfCCs3MhIgLkEZJygqNioZDSwTBgQBKTk1MgYXBAEaLAEcIxEkLCw5LSERKyEzCi0gDwgGISEfMQ8tCCdOLg0qBhwgQQQBKC4PKU0cJSM7KzYrFTspKjI1NSwPKQgdLDkpHQYuBAEdKhMhKCwxITsPDwgGFQQBGywpEyQqJxk1JS8jDAofKy0dPDEhOzgoDzNEDwgGFQQBLiAoUCg1BiNITCJIMwgNHQY7BAEeKSEePiIbNjAGUVAfFwQBICEiLk9BMwYbBAEfISIuHBweQTQGHQQBLiYXFzcTISQ0Nw8IHkdBMx8dD0QvCAYhLQQBIkMsKxssMgQBISkrJionKQ8fGkw8CAYQBAEhLyQsNwYXBAE7PDkEATkjNQEsJR8pCFAGARwkORkGOAQBMR8tDSAGBAEcPzpBBhcEARosOkEGLRYEARcwASYuIQYiBAEfNQFAASE4ATYBI0IIASZFCAE4ATIBRwEyASFCGzYIATYBMAE4AT4BRAE1ASExCAYBPwEvAT5GBgEXASlHFDJAKkJHGggGATAEARwwLxcjBAEbJi8XLwQBG0gvFyIEATAgNBkmBhceBAEgHC4cMCBDMj4NNgYEARlFBzkHNgcrIygnIwggJSQgCCk1BgEcJR4GAR88IDkgKxopQh4TCEwhJgYBKR8cBAErICgsNysaDSAdLQYEASkzIS8EARkcHxw5HiMeIg06BjIEASUiICYdDSYrCB0GLSUfIigGHi03BAEbHC4cJycEARgnRRAcLhwXJAQBHBwoHBw7JSgGHCUEARccOBwcHycEAgFDFg8gHgE0ARQaHCAiHxMNMgYEARIrGwQCAUQWDwE0AR1DBAIBH3BhY2thZ2U6anNfYXN0L3NyYy9idWlsZGVyLmRhcnQ0c2Rrcm9vdDovcGtnL2pzX2FzdC9saWIvc3JjL2VxdWl2YWxlbmNlX3Zpc2l0b3IuZGFydMAAQCEvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBqc19hc3Q7CgovLy8gVmlzaXRvciB0aGF0IGNvbXB1dGVzIHdoZXRoZXIgdHdvIFtOb2RlXXMgYXJlIHN0cnVjdHVyYWxseSBlcXVpdmFsZW50LgpjbGFzcyBFcXVpdmFsZW5jZVZpc2l0b3IgaW1wbGVtZW50cyBOb2RlVmlzaXRvcjE8Ym9vbCwgTm9kZT4gewogIGNvbnN0IEVxdWl2YWxlbmNlVmlzaXRvcigpOwoKICAvLy8gQ2FsbGVkIHdoZW4gW25vZGUxXSBhbmQgW25vZGUyXSBhcmUgbm90IGVxdWl2YWxlbnQuCiAgLy8vCiAgLy8vIE92ZXJyaWRlIHRoaXMgdG8gY29sbGVjdCBvciByZXBvcnQgaW5mb3JtYXRpb24gb24gdGhlIGluZXF1aXZhbGVudCBub2Rlcy4KICBib29sIGZhaWxBdChOb2RlIG5vZGUxLCBOb2RlIG5vZGUyKSA9PiBmYWxzZTsKCiAgLy8vIFJldHVybnMgd2hldGhlciB0aGUgbm9uLW5vZGUgdmFsdWVzIFt2YWx1ZTFdIGFuZCBbdmFsdWUyXSBhcmUgZXF1aXZhbGVudC4KICBib29sIHRlc3RWYWx1ZXMoTm9kZSBub2RlMSwgT2JqZWN0IHZhbHVlMSwgTm9kZSBub2RlMiwgT2JqZWN0IHZhbHVlMikgPT4KICAgICAgdmFsdWUxID09IHZhbHVlMjsKCiAgLy8vIFJldHVybnMgd2hldGhlciB0aGUgbGFiZWxzIFtsYWJlbDFdIGFuZCBbbGFiZWwyXSBhcmUgZXF1aXZhbGVudC4KICBib29sIHRlc3RMYWJlbHMoTm9kZSBub2RlMSwgU3RyaW5nIGxhYmVsMSwgTm9kZSBub2RlMiwgU3RyaW5nIGxhYmVsMikgPT4KICAgICAgbGFiZWwxID09IGxhYmVsMjsKCiAgYm9vbCB0ZXN0Tm9kZXMoTm9kZSBub2RlMSwgTm9kZSBub2RlMikgewogICAgaWYgKGlkZW50aWNhbChub2RlMSwgbm9kZTIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChub2RlMSA9PSBudWxsIHx8IG5vZGUyID09IG51bGwpIHJldHVybiBmYWlsQXQobm9kZTEsIG5vZGUyKTsKICAgIHJldHVybiBub2RlMS5hY2NlcHQxKHRoaXMsIG5vZGUyKTsKICB9CgogIGJvb2wgdGVzdE5vZGVMaXN0cyhMaXN0PE5vZGU+IGxpc3QxLCBMaXN0PE5vZGU+IGxpc3QyKSB7CiAgICBpbnQgaW5kZXggPSAwOwogICAgd2hpbGUgKGluZGV4IDwgbGlzdDEubGVuZ3RoICYmIGluZGV4IDwgbGlzdDIubGVuZ3RoKSB7CiAgICAgIGlmICghdGVzdE5vZGVzKGxpc3QxW2luZGV4XSwgbGlzdDJbaW5kZXhdKSkgcmV0dXJuIGZhbHNlOwogICAgICBpbmRleCsrOwogICAgfQogICAgaWYgKGluZGV4IDwgbGlzdDEubGVuZ3RoKSB7CiAgICAgIHJldHVybiBmYWlsQXQobGlzdDFbaW5kZXhdLCBudWxsKTsKICAgIH0gZWxzZSBpZiAoaW5kZXggPCBsaXN0Mi5sZW5ndGgpIHsKICAgICAgcmV0dXJuIGZhaWxBdChsaXN0MltpbmRleF0sIG51bGwpOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0UHJvZ3JhbShQcm9ncmFtIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBQcm9ncmFtKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBQcm9ncmFtIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2RlTGlzdHMobm9kZS5ib2R5LCBvdGhlci5ib2R5KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRJbnRlcnBvbGF0ZWREZWNsYXJhdGlvbihJbnRlcnBvbGF0ZWREZWNsYXJhdGlvbiBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgSW50ZXJwb2xhdGVkRGVjbGFyYXRpb24pIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIEludGVycG9sYXRlZERlY2xhcmF0aW9uIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3RWYWx1ZXMobm9kZSwgbm9kZS5uYW1lT3JQb3NpdGlvbiwgb3RoZXIsIG90aGVyLm5hbWVPclBvc2l0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQoSW50ZXJwb2xhdGVkU3RhdGVtZW50IG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIEludGVycG9sYXRlZFN0YXRlbWVudCBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUubmFtZU9yUG9zaXRpb24sIG90aGVyLCBvdGhlci5uYW1lT3JQb3NpdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SW50ZXJwb2xhdGVkU2VsZWN0b3IoSW50ZXJwb2xhdGVkU2VsZWN0b3Igbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIEludGVycG9sYXRlZFNlbGVjdG9yKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBJbnRlcnBvbGF0ZWRTZWxlY3RvciBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUubmFtZU9yUG9zaXRpb24sIG90aGVyLCBvdGhlci5uYW1lT3JQb3NpdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SW50ZXJwb2xhdGVkUGFyYW1ldGVyKEludGVycG9sYXRlZFBhcmFtZXRlciBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgSW50ZXJwb2xhdGVkUGFyYW1ldGVyKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBJbnRlcnBvbGF0ZWRQYXJhbWV0ZXIgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdFZhbHVlcyhub2RlLCBub2RlLm5hbWVPclBvc2l0aW9uLCBvdGhlciwgb3RoZXIubmFtZU9yUG9zaXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEludGVycG9sYXRlZExpdGVyYWwoSW50ZXJwb2xhdGVkTGl0ZXJhbCBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgSW50ZXJwb2xhdGVkTGl0ZXJhbCkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgSW50ZXJwb2xhdGVkTGl0ZXJhbCBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUubmFtZU9yUG9zaXRpb24sIG90aGVyLCBvdGhlci5uYW1lT3JQb3NpdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SW50ZXJwb2xhdGVkRXhwcmVzc2lvbihJbnRlcnBvbGF0ZWRFeHByZXNzaW9uIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBJbnRlcnBvbGF0ZWRFeHByZXNzaW9uKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBJbnRlcnBvbGF0ZWRFeHByZXNzaW9uIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3RWYWx1ZXMobm9kZSwgbm9kZS5uYW1lT3JQb3NpdGlvbiwgb3RoZXIsIG90aGVyLm5hbWVPclBvc2l0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRDb21tZW50KENvbW1lbnQgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIENvbW1lbnQpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIENvbW1lbnQgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdFZhbHVlcyhub2RlLCBub2RlLmNvbW1lbnQsIG90aGVyLCBvdGhlci5jb21tZW50KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRBd2FpdChBd2FpdCBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgQXdhaXQpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIEF3YWl0IG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2Rlcyhub2RlLmV4cHJlc3Npb24sIG90aGVyLmV4cHJlc3Npb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFJlZ0V4cExpdGVyYWwoUmVnRXhwTGl0ZXJhbCBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgUmVnRXhwTGl0ZXJhbCkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgUmVnRXhwTGl0ZXJhbCBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUucGF0dGVybiwgb3RoZXIsIG90aGVyLnBhdHRlcm4pOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFByb3BlcnR5KFByb3BlcnR5IG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBQcm9wZXJ0eSkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgUHJvcGVydHkgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUubmFtZSwgb3RoZXIubmFtZSkgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS52YWx1ZSwgb3RoZXIudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdE9iamVjdEluaXRpYWxpemVyKE9iamVjdEluaXRpYWxpemVyIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBPYmplY3RJbml0aWFsaXplcikgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgT2JqZWN0SW5pdGlhbGl6ZXIgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVMaXN0cyhub2RlLnByb3BlcnRpZXMsIG90aGVyLnByb3BlcnRpZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEFycmF5SG9sZShBcnJheUhvbGUgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIEFycmF5SG9sZSkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0QXJyYXlJbml0aWFsaXplcihBcnJheUluaXRpYWxpemVyIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBBcnJheUluaXRpYWxpemVyKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBBcnJheUluaXRpYWxpemVyIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2RlTGlzdHMobm9kZS5lbGVtZW50cywgb3RoZXIuZWxlbWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdE5hbWUoTmFtZSBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgTmFtZSkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgTmFtZSBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUua2V5LCBvdGhlciwgb3RoZXIua2V5KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRQYXJlbnRoZXNlcyhQYXJlbnRoZXNlcyBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgUGFyZW50aGVzZXMpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIFBhcmVudGhlc2VzIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3RWYWx1ZXMobm9kZSwgbm9kZS5lbmNsb3NlZCwgb3RoZXIsIG90aGVyLmVuY2xvc2VkKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKFN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIFN0cmluZ0NvbmNhdGVuYXRpb24pIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIFN0cmluZ0NvbmNhdGVuYXRpb24gb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVMaXN0cyhub2RlLnBhcnRzLCBvdGhlci5wYXJ0cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0TGl0ZXJhbE51bGwoTGl0ZXJhbE51bGwgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIExpdGVyYWxOdWxsKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRMaXRlcmFsTnVtYmVyKExpdGVyYWxOdW1iZXIgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIExpdGVyYWxOdW1iZXIpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIExpdGVyYWxOdW1iZXIgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdFZhbHVlcyhub2RlLCBub2RlLnZhbHVlLCBvdGhlciwgb3RoZXIudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdExpdGVyYWxTdHJpbmcoTGl0ZXJhbFN0cmluZyBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgTGl0ZXJhbFN0cmluZykgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgTGl0ZXJhbFN0cmluZyBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUudmFsdWUsIG90aGVyLCBvdGhlci52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0TGl0ZXJhbEJvb2woTGl0ZXJhbEJvb2wgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIExpdGVyYWxCb29sKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBMaXRlcmFsQm9vbCBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUudmFsdWUsIG90aGVyLCBvdGhlci52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RGVmZXJyZWRTdHJpbmcoRGVmZXJyZWRTdHJpbmcgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIERlZmVycmVkU3RyaW5nKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBEZWZlcnJlZFN0cmluZyBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUudmFsdWUsIG90aGVyLCBvdGhlci52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RGVmZXJyZWROdW1iZXIoRGVmZXJyZWROdW1iZXIgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIERlZmVycmVkTnVtYmVyKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBEZWZlcnJlZE51bWJlciBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUudmFsdWUsIG90aGVyLCBvdGhlci52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RGVmZXJyZWRFeHByZXNzaW9uKERlZmVycmVkRXhwcmVzc2lvbiBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgRGVmZXJyZWRFeHByZXNzaW9uKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBEZWZlcnJlZEV4cHJlc3Npb24gb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUudmFsdWUsIG90aGVyLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRGdW4oRnVuIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBGdW4pIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIEZ1biBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZUxpc3RzKG5vZGUucGFyYW1zLCBvdGhlci5wYXJhbXMpICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUuYm9keSwgb3RoZXIuYm9keSkgJiYKICAgICAgICB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUuYXN5bmNNb2RpZmllciwgb3RoZXIsIG90aGVyLmFzeW5jTW9kaWZpZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdE5hbWVkRnVuY3Rpb24oTmFtZWRGdW5jdGlvbiBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgTmFtZWRGdW5jdGlvbikgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgTmFtZWRGdW5jdGlvbiBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS5uYW1lLCBvdGhlci5uYW1lKSAmJgogICAgICAgIHRlc3ROb2Rlcyhub2RlLmZ1bmN0aW9uLCBvdGhlci5mdW5jdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0QWNjZXNzKFByb3BlcnR5QWNjZXNzIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBQcm9wZXJ0eUFjY2VzcykgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgUHJvcGVydHlBY2Nlc3Mgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUucmVjZWl2ZXIsIG90aGVyLnJlY2VpdmVyKSAmJgogICAgICAgIHRlc3ROb2Rlcyhub2RlLnNlbGVjdG9yLCBvdGhlci5zZWxlY3Rvcik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0UGFyYW1ldGVyKFBhcmFtZXRlciBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgUGFyYW1ldGVyKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBQYXJhbWV0ZXIgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdFZhbHVlcyhub2RlLCBub2RlLm5hbWUsIG90aGVyLCBvdGhlci5uYW1lKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIFZhcmlhYmxlRGVjbGFyYXRpb24pIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdFZhbHVlcyhub2RlLCBub2RlLm5hbWUsIG90aGVyLCBvdGhlci5uYW1lKSAmJgogICAgICAgIHRlc3RWYWx1ZXMobm9kZSwgbm9kZS5hbGxvd1JlbmFtZSwgb3RoZXIsIG90aGVyLmFsbG93UmVuYW1lKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUaGlzKFRoaXMgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIFRoaXMpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFZhcmlhYmxlVXNlKFZhcmlhYmxlVXNlIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBWYXJpYWJsZVVzZSkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgVmFyaWFibGVVc2Ugb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdFZhbHVlcyhub2RlLCBub2RlLm5hbWUsIG90aGVyLCBvdGhlci5uYW1lKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRQb3N0Zml4KFBvc3RmaXggbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIFBvc3RmaXgpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIFBvc3RmaXggb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdFZhbHVlcyhub2RlLCBub2RlLm9wLCBvdGhlciwgb3RoZXIub3ApICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUuYXJndW1lbnQsIG90aGVyLmFyZ3VtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRQcmVmaXgoUHJlZml4IG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBQcmVmaXgpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIFByZWZpeCBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUub3AsIG90aGVyLCBvdGhlci5vcCkgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS5hcmd1bWVudCwgb3RoZXIuYXJndW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEJpbmFyeShCaW5hcnkgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIEJpbmFyeSkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgQmluYXJ5IG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2Rlcyhub2RlLmxlZnQsIG90aGVyLmxlZnQpICYmCiAgICAgICAgdGVzdFZhbHVlcyhub2RlLCBub2RlLm9wLCBvdGhlciwgb3RoZXIub3ApICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUucmlnaHQsIG90aGVyLnJpZ2h0KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRDYWxsKENhbGwgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIENhbGwpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIENhbGwgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUudGFyZ2V0LCBvdGhlci50YXJnZXQpICYmCiAgICAgICAgdGVzdE5vZGVMaXN0cyhub2RlLmFyZ3VtZW50cywgb3RoZXIuYXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXROZXcoTmV3IG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBOZXcpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIE5ldyBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS50YXJnZXQsIG90aGVyLnRhcmdldCkgJiYKICAgICAgICB0ZXN0Tm9kZUxpc3RzKG5vZGUuYXJndW1lbnRzLCBvdGhlci5hcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdENvbmRpdGlvbmFsKENvbmRpdGlvbmFsIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBDb25kaXRpb25hbCkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgQ29uZGl0aW9uYWwgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUuY29uZGl0aW9uLCBvdGhlci5jb25kaXRpb24pICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUudGhlbiwgb3RoZXIudGhlbikgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS5vdGhlcndpc2UsIG90aGVyLm90aGVyd2lzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0VmFyaWFibGVJbml0aWFsaXphdGlvbihWYXJpYWJsZUluaXRpYWxpemF0aW9uIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBWYXJpYWJsZUluaXRpYWxpemF0aW9uKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBWYXJpYWJsZUluaXRpYWxpemF0aW9uIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2Rlcyhub2RlLmRlY2xhcmF0aW9uLCBvdGhlci5kZWNsYXJhdGlvbikgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS5sZWZ0SGFuZFNpZGUsIG90aGVyLmxlZnRIYW5kU2lkZSkgJiYKICAgICAgICB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUub3AsIG90aGVyLCBvdGhlci5vcCkgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS52YWx1ZSwgb3RoZXIudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEFzc2lnbm1lbnQoQXNzaWdubWVudCBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgQXNzaWdubWVudCkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgQXNzaWdubWVudCBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS5sZWZ0SGFuZFNpZGUsIG90aGVyLmxlZnRIYW5kU2lkZSkgJiYKICAgICAgICB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUub3AsIG90aGVyLCBvdGhlci5vcCkgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS52YWx1ZSwgb3RoZXIudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0IG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVMaXN0cyhub2RlLmRlY2xhcmF0aW9ucywgb3RoZXIuZGVjbGFyYXRpb25zKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRMaXRlcmFsRXhwcmVzc2lvbihMaXRlcmFsRXhwcmVzc2lvbiBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgTGl0ZXJhbEV4cHJlc3Npb24pIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIExpdGVyYWxFeHByZXNzaW9uIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3RWYWx1ZXMobm9kZSwgbm9kZS50ZW1wbGF0ZSwgb3RoZXIsIG90aGVyLnRlbXBsYXRlKSAmJgogICAgICAgIHRlc3ROb2RlTGlzdHMobm9kZS5pbnB1dHMsIG90aGVyLmlucHV0cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RGFydFlpZWxkKERhcnRZaWVsZCBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgRGFydFlpZWxkKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBEYXJ0WWllbGQgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUuZXhwcmVzc2lvbiwgb3RoZXIuZXhwcmVzc2lvbikgJiYKICAgICAgICB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUuaGFzU3Rhciwgb3RoZXIsIG90aGVyLmhhc1N0YXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdExpdGVyYWxTdGF0ZW1lbnQoTGl0ZXJhbFN0YXRlbWVudCBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgTGl0ZXJhbFN0YXRlbWVudCkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgTGl0ZXJhbFN0YXRlbWVudCBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUuY29kZSwgb3RoZXIsIG90aGVyLmNvZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdExhYmVsZWRTdGF0ZW1lbnQoTGFiZWxlZFN0YXRlbWVudCBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgTGFiZWxlZFN0YXRlbWVudCkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgTGFiZWxlZFN0YXRlbWVudCBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0TGFiZWxzKG5vZGUsIG5vZGUubGFiZWwsIG90aGVyLCBvdGhlci5sYWJlbCkgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS5ib2R5LCBvdGhlci5ib2R5KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRGdW5jdGlvbkRlY2xhcmF0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24gbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIEZ1bmN0aW9uRGVjbGFyYXRpb24pIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24gb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUubmFtZSwgb3RoZXIubmFtZSkgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS5mdW5jdGlvbiwgb3RoZXIuZnVuY3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdERlZmF1bHQoRGVmYXVsdCBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgRGVmYXVsdCkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgRGVmYXVsdCBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS5ib2R5LCBvdGhlci5ib2R5KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRDYXNlKENhc2Ugbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIENhc2UpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIENhc2Ugb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUuZXhwcmVzc2lvbiwgb3RoZXIuZXhwcmVzc2lvbikgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS5ib2R5LCBvdGhlci5ib2R5KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRTd2l0Y2goU3dpdGNoIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBTd2l0Y2gpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIFN3aXRjaCBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS5rZXksIG90aGVyLmtleSkgJiYKICAgICAgICB0ZXN0Tm9kZUxpc3RzKG5vZGUuY2FzZXMsIG90aGVyLmNhc2VzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRDYXRjaChDYXRjaCBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgQ2F0Y2gpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIENhdGNoIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2Rlcyhub2RlLmRlY2xhcmF0aW9uLCBvdGhlci5kZWNsYXJhdGlvbikgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS5ib2R5LCBvdGhlci5ib2R5KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUcnkoVHJ5IG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBUcnkpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIFRyeSBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS5ib2R5LCBvdGhlci5ib2R5KSAmJgogICAgICAgIHRlc3ROb2Rlcyhub2RlLmNhdGNoUGFydCwgb3RoZXIuY2F0Y2hQYXJ0KSAmJgogICAgICAgIHRlc3ROb2Rlcyhub2RlLmZpbmFsbHlQYXJ0LCBvdGhlci5maW5hbGx5UGFydCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0VGhyb3coVGhyb3cgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIFRocm93KSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBUaHJvdyBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS5leHByZXNzaW9uLCBvdGhlci5leHByZXNzaW9uKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRSZXR1cm4oUmV0dXJuIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBSZXR1cm4pIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIFJldHVybiBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS52YWx1ZSwgb3RoZXIudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEJyZWFrKEJyZWFrIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBCcmVhaykgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgQnJlYWsgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdExhYmVscyhub2RlLCBub2RlLnRhcmdldExhYmVsLCBvdGhlciwgb3RoZXIudGFyZ2V0TGFiZWwpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdENvbnRpbnVlKENvbnRpbnVlIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBDb250aW51ZSkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgQ29udGludWUgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdExhYmVscyhub2RlLCBub2RlLnRhcmdldExhYmVsLCBvdGhlciwgb3RoZXIudGFyZ2V0TGFiZWwpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdERvKERvIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBEbykgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgRG8gb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUuY29uZGl0aW9uLCBvdGhlci5jb25kaXRpb24pICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUuYm9keSwgb3RoZXIuYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0V2hpbGUoV2hpbGUgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIFdoaWxlKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBXaGlsZSBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS5jb25kaXRpb24sIG90aGVyLmNvbmRpdGlvbikgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS5ib2R5LCBvdGhlci5ib2R5KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRGb3JJbihGb3JJbiBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgRm9ySW4pIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIEZvckluIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2Rlcyhub2RlLmxlZnRIYW5kU2lkZSwgb3RoZXIubGVmdEhhbmRTaWRlKSAmJgogICAgICAgIHRlc3ROb2Rlcyhub2RlLm9iamVjdCwgb3RoZXIub2JqZWN0KSAmJgogICAgICAgIHRlc3ROb2Rlcyhub2RlLmJvZHksIG90aGVyLmJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEZvcihGb3Igbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIEZvcikgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgRm9yIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2Rlcyhub2RlLmluaXQsIG90aGVyLmluaXQpICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUuY29uZGl0aW9uLCBvdGhlci5jb25kaXRpb24pICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUudXBkYXRlLCBvdGhlci51cGRhdGUpICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUuYm9keSwgb3RoZXIuYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SWYoSWYgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIElmKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBJZiBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS5jb25kaXRpb24sIG90aGVyLmNvbmRpdGlvbikgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS50aGVuLCBvdGhlci50aGVuKSAmJgogICAgICAgIHRlc3ROb2Rlcyhub2RlLm90aGVyd2lzZSwgb3RoZXIub3RoZXJ3aXNlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRFbXB0eVN0YXRlbWVudChFbXB0eVN0YXRlbWVudCBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgRW1wdHlTdGF0ZW1lbnQpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnQoRXhwcmVzc2lvblN0YXRlbWVudCBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgRXhwcmVzc2lvblN0YXRlbWVudCkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgRXhwcmVzc2lvblN0YXRlbWVudCBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS5leHByZXNzaW9uLCBvdGhlci5leHByZXNzaW9uKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRCbG9jayhCbG9jayBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgQmxvY2spIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIEJsb2NrIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2RlTGlzdHMobm9kZS5zdGF0ZW1lbnRzLCBvdGhlci5zdGF0ZW1lbnRzKTsKICB9Cn0KggAATk48ARABSz8eAToGUDABUEsYAUdLGAErLkUnBAE7EztADwYgKScpBhEEAQwuMxkxBAEMTkMpTwQBDEpBJ08EAQxIQCZPBAEMSkEnTwQBDEY/JU8EAQxMQihPBAEMLjMZQQQBDCoxFzkEAQw6OR9BBAEMMDQaLywEAQxCPSM9BAEMMjURBAEMQDwiOQQBDCgwFjkEAQw2Nx1DBAEMRj8lMwQBDDY3EQQBDDo5Hz0EAQw6OR89BAEMNjcdPQQBDDw6ID0EAQw8OiA9BAEMRD4kLwQBDCYvFTcsSgQBDDo5Hy8yBAEMNDogNzIEAQwyNRs7BAEMRj8lPUYEAQwoMBEEAQw2Nx07BAEMLjMZOTIEAQwsMhg5MgQBDCwyGC82LAQBDCgwFjM4BAEMJi8VMzgEAQw2Nx05LDQEAQxMQig9PDYsBAEMNDYcPzYsBAEMTkMpQQQBDEI9I0UyBAEMMjUbOz4EAQxAPCI7BAEMQDwiPyoEAQxGPyUvMgQBDC4zGS0EAQwoMBY7KgQBDCwyGC0wBAEMKjEXPSoEAQwmLxUvNjgEAQwqMRc5BAEMLDIYLwQBDCoxF0kEAQwwNBpJBAEMJC4UOSoEAQwqMRc5KgQBDCoxFz8wKgQBDCYvFS82MCoEAQwkLhQ5LDQEAQw8OhEEAQxGPyU5BAEMKjEXPQQCAStwYWNrYWdlOmpzX2FzdC9zcmMvZXF1aXZhbGVuY2VfdmlzaXRvci5kYXJ0LnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzL2pzX2RlYnVnLmRhcnSISy8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gSGVscGVyIGZvciBkZWJ1ZyBKUyBub2Rlcy4KCmxpYnJhcnkganMuZGVidWc7CgppbXBvcnQgJ3BhY2thZ2U6anNfYXN0L2pzX2FzdC5kYXJ0JzsKCmltcG9ydCAnLi4vaW8vY29kZV9vdXRwdXQuZGFydCcgc2hvdyBCdWZmZXJlZENvZGVPdXRwdXQ7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnIHNob3cgSW5kZW50YXRpb24sIFRhZ2dpbmc7CgovLy8gVW5wYXJzZSB0aGUgSmF2YVNjcmlwdCBbbm9kZV0uClN0cmluZyBub2RlVG9TdHJpbmcoTm9kZSBub2RlLCB7Ym9vbCBwcmV0dHk6IGZhbHNlfSkgewogIEphdmFTY3JpcHRQcmludGluZ09wdGlvbnMgb3B0aW9ucyA9IG5ldyBKYXZhU2NyaXB0UHJpbnRpbmdPcHRpb25zKAogICAgICBzaG91bGRDb21wcmVzc091dHB1dDogIXByZXR0eSwKICAgICAgcHJlZmVyU2VtaWNvbG9uVG9OZXdsaW5lSW5NaW5pZmllZE91dHB1dDogIXByZXR0eSk7CiAgTGVuaWVudFByaW50aW5nQ29udGV4dCBwcmludGluZ0NvbnRleHQgPSBuZXcgTGVuaWVudFByaW50aW5nQ29udGV4dCgpOwogIG5ldyBQcmludGVyKG9wdGlvbnMsIHByaW50aW5nQ29udGV4dCkudmlzaXQobm9kZSk7CiAgcmV0dXJuIHByaW50aW5nQ29udGV4dC5nZXRUZXh0KCk7Cn0KCi8vLyBWaXNpdG9yIHRoYXQgY3JlYXRlcyBhbiBYTUwtbGlrZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RydWN0dXJlIG9mIGEKLy8vIEphdmFTY3JpcHQgW05vZGVdLgpjbGFzcyBEZWJ1Z1ByaW50ZXIgZXh0ZW5kcyBCYXNlVmlzaXRvciB3aXRoIEluZGVudGF0aW9uLCBUYWdnaW5nPE5vZGU+IHsKICBAb3ZlcnJpZGUKICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CgogIHZvaWQgdmlzaXROb2RlV2l0aENoaWxkcmVuKE5vZGUgbm9kZSwgU3RyaW5nIHR5cGUsIFtNYXAgcGFyYW1zXSkgewogICAgb3Blbk5vZGUobm9kZSwgdHlwZSwgcGFyYW1zKTsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICAgIGNsb3NlTm9kZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE5vZGUoTm9kZSBub2RlKSB7CiAgICB2aXNpdE5vZGVXaXRoQ2hpbGRyZW4obm9kZSwgJyR7bm9kZS5ydW50aW1lVHlwZX0nKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXROYW1lKE5hbWUgbm9kZSkgewogICAgb3BlbkFuZENsb3NlTm9kZShub2RlLCAnJHtub2RlLnJ1bnRpbWVUeXBlfScsIHsnbmFtZSc6IG5vZGUubmFtZX0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJpbmFyeShCaW5hcnkgbm9kZSkgewogICAgdmlzaXROb2RlV2l0aENoaWxkcmVuKG5vZGUsICcke25vZGUucnVudGltZVR5cGV9JywgeydvcCc6IG5vZGUub3B9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXRlcmFsU3RyaW5nKExpdGVyYWxTdHJpbmcgbm9kZSkgewogICAgb3BlbkFuZENsb3NlTm9kZShub2RlLCAnJHtub2RlLnJ1bnRpbWVUeXBlfScsIHsndmFsdWUnOiBub2RlLnZhbHVlfSk7CiAgfQoKICAvLy8gUHJldHR5LXByaW50cyBnaXZlbiBub2RlIHRyZWUgaW50byBzdHJpbmcuCiAgc3RhdGljIFN0cmluZyBwcmV0dHlQcmludChOb2RlIG5vZGUpIHsKICAgIHZhciBwID0gbmV3IERlYnVnUHJpbnRlcigpOwogICAgbm9kZS5hY2NlcHQocCk7CiAgICByZXR1cm4gcC5zYi50b1N0cmluZygpOwogIH0KfQoKLy8vIFNpbXBsZSBwcmludGluZyBjb250ZXh0IHRoYXQgZG9lc24ndCB0aHJvdyBvbiBlcnJvcnMuCmNsYXNzIExlbmllbnRQcmludGluZ0NvbnRleHQgZXh0ZW5kcyBTaW1wbGVKYXZhU2NyaXB0UHJpbnRpbmdDb250ZXh0CiAgICBpbXBsZW1lbnRzIEJ1ZmZlcmVkQ29kZU91dHB1dCB7CiAgQG92ZXJyaWRlCiAgdm9pZCBlcnJvcihTdHJpbmcgbWVzc2FnZSkgewogICAgYnVmZmVyLndyaXRlKCc+PiRtZXNzYWdlPDwnKTsKICB9Cn0KSQBOTjwBHwESASUBOTYBIzdFJTpJNSQCAUoXSQwoAUUiHhEEAQweOAQBDB5IBAEMIkkEAQwwSgQBMSkgFBwEAgE6RSQMHyIEAgElcGFja2FnZTpjb21waWxlci9zcmMvanMvanNfZGVidWcuZGFydERzZGtyb290Oi9zZGsvbGliL19pbnRlcm5hbC9qc19ydW50aW1lL2xpYi9zaGFyZWQvZW1iZWRkZWRfbmFtZXMuZGFydL5MLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBDb250YWlucyB0aGUgbmFtZXMgb2YgZ2xvYmFscyB0aGF0IGFyZSBlbWJlZGRlZCBpbnRvIHRoZSBvdXRwdXQgYnkgdGhlCi8vLyBjb21waWxlci4KLy8vCi8vLyBWYXJpYWJsZXMgZW1iZWRkZWQgdGhpcyB3YXkgc2hvdWxkIGJlIGFjY2VzcyB3aXRoIGBKU19FTUJFRERFRF9HTE9CQUxgIGZyb20KLy8vIHRoZSBgX2ZvcmVpZ25faGVscGVyYCBsaWJyYXJ5LgovLy8KLy8vIFRoaXMgbGlicmFyeSBpcyBzaGFyZWQgYmV0d2VlbiB0aGUgY29tcGlsZXIgYW5kIHRoZSBydW50aW1lIHN5c3RlbS4KbGlicmFyeSBkYXJ0MmpzLl9lbWJlZGRlZF9uYW1lczsKCi8vLyBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBpcyB1c2VkIHRvIG1hcmsgYSB0eXBlIGFzIHR5cGVkZWYuCi8vLwovLy8gV2l0aG91dCByZWZsZWN0aW9uIHR5cGVkZWZzIGFyZSByZW1vdmVkIChleHBhbmRlZCB0byB0aGVpciBmdW5jdGlvbiB0eXBlKQovLy8gYnV0IHdpdGggcmVmbGVjdGlvbiBhbiBvYmplY3QgaXMgbmVlZGVkIHRvIGhhdmUgdGhlIHR5cGVkZWYncyBuYW1lLiBUaGUKLy8vIG9iamVjdCBpcyBtYXJrZWQgd2l0aCB0aGlzIHByb3BlcnR5LgovLy8KLy8vIFRoaXMgcHJvcGVydHkgbmFtZSBvbmx5IGxpdmVzIG9uIGludGVybmFsIHR5cGUtb2JqZWN0cyBhbmQgaXMgb25seSB1c2VkCi8vLyB3aGVuIHJlZmxlY3Rpb24gaXMgZW5hYmxlZC4KY29uc3QgVFlQRURFRl9QUkVESUNBVEVfUFJPUEVSVFlfTkFNRSA9IHIiJCRpc1R5cGVkZWYiOwoKLy8vIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGlzIHVzZWQgdG8gZmluZCB0aGUgZnVuY3Rpb24gdHlwZSBvZiBhCi8vLyB0eXBlZGVmLgovLy8KLy8vIFdpdGhvdXQgcmVmbGVjdGlvbiB0eXBlZGVmcyBhcmUgcmVtb3ZlZCAoZXhwYW5kZWQgdG8gdGhlaXIgZnVuY3Rpb24gdHlwZSkKLy8vIGJ1dCB3aXRoIHJlZmxlY3Rpb24gYW4gb2JqZWN0IGlzIG5lZWRlZCB0byBoYXZlIHRoZSB0eXBlZGVmJ3MgbmFtZS4KLy8vCi8vLyBUaGUgdHlwZWRlZidzIG9iamVjdCBjb250YWlucyBhIHBvaW50ZXIgdG8gaXRzIGZ1bmN0aW9uIHR5cGUgKGFzIGFuIGluZGV4Ci8vLyBpbnRvIHRoZSBlbWJlZGRlZCBnbG9iYWwgW1RZUEVTXSkgaW4gdGhpcyBwcm9wZXJ0eS4KLy8vCi8vLyBUaGlzIHByb3BlcnR5IG5hbWUgb25seSBsaXZlcyBvbiBpbnRlcm5hbCB0eXBlLW9iamVjdHMgYW5kIGlzIG9ubHkgdXNlZAovLy8gd2hlbiByZWZsZWN0aW9uIGlzIGVuYWJsZWQuCmNvbnN0IFRZUEVERUZfVFlQRV9QUk9QRVJUWV9OQU1FID0gciIkdHlwZWRlZlR5cGUiOwoKLy8vIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGlzIHVzZWQgdG8gZmluZCB0aGUgbmF0aXZlIHN1cGVyY2xhc3Mgb2YKLy8vIGFuIGV4dGVuZGVkIGNsYXNzLgovLy8KLy8vIEV2ZXJ5IGNsYXNzIHRoYXQgZXh0ZW5kcyBhIG5hdGl2ZSBjbGFzcyBoYXMgdGhpcyBwcm9wZXJ0eSBzZXQgb24gaXRzCi8vLyBuYXRpdmUgY2xhc3MuCmNvbnN0IE5BVElWRV9TVVBFUkNMQVNTX1RBR19OQU1FID0gciIkbmF0aXZlU3VwZXJjbGFzc1RhZyI7CgovLy8gVGhlIG5hbWUgb2YgdGhlIHN0YXRpYy1mdW5jdGlvbiBwcm9wZXJ0eSBuYW1lLgovLy8KLy8vIFRoaXMgcHJvcGVydHkgaXMgc2V0IGZvciBhbGwgdGVhci1vZmZzIG9mIHN0YXRpYyBmdW5jdGlvbnMsIGFuZCBwcm92aWRlcwovLy8gdGhlIHN0YXRpYyBmdW5jdGlvbidzIHVuaXF1ZSAocG90ZW50aWFsbHkgbWluaWZpZWQpIG5hbWUuCmNvbnN0IFNUQVRJQ19GVU5DVElPTl9OQU1FX1BST1BFUlRZX05BTUUgPSByJyRzdGF0aWNfbmFtZSc7CgovLy8gVGhlIG5hbWUgb2YgdGhlIGVtYmVkZGVkIGdsb2JhbCBmb3IgbWV0YWRhdGEuCi8vLwovLy8gVXNlIFtKc0J1aWx0aW4uZ2V0TWV0YWRhdGFdIGluc3RlYWQgb2YgZGlyZWN0bHkgYWNjZXNzaW5nIHRoaXMgZW1iZWRkZWQKLy8vIGdsb2JhbC4KY29uc3QgTUVUQURBVEEgPSAnbWV0YWRhdGEnOwoKLy8vIEEgbGlzdCBvZiB0eXBlcyB1c2VkIGluIHRoZSBwcm9ncmFtIGUuZy4gZm9yIHJlZmxlY3Rpb24gb3IgZW5jb2Rpbmcgb2YKLy8vIGZ1bmN0aW9uIHR5cGVzLgovLy8KLy8vIFVzZSBbSnNCdWlsdGluLmdldFR5cGVdIGluc3RlYWQgb2YgZGlyZWN0bHkgYWNjZXNzaW5nIHRoaXMgZW1iZWRkZWQgZ2xvYmFsLgpjb25zdCBUWVBFUyA9ICd0eXBlcyc7CgovLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWFwcyBhIG5hbWUgb2YgYSBjbGFzcyB0byBpdHMgdHlwZS4KLy8vCi8vLyBUaGlzIGVtYmVkZGVkIGdsb2JhbCBpcyB1c2VkIGJ5IHRoZSBydW50aW1lIHdoZW4gY29tcHV0aW5nIHRoZSBpbnRlcm5hbAovLy8gcnVudGltZS10eXBlLWluZm9ybWF0aW9uIChydGkpIG9iamVjdC4KY29uc3QgR0VUX1RZUEVfRlJPTV9OQU1FID0gJ2dldFR5cGVGcm9tTmFtZSc7CgovLy8gQSBKUyBtYXAgZnJvbSBtYW5nbGVkIGdsb2JhbCBuYW1lcyB0byB0aGVpciB1bm1hbmdsZWQgbmFtZXMuCi8vLwovLy8gSWYgdGhlIHByb2dyYW0gZG9lcyBub3QgdXNlIHJlZmxlY3Rpb24sIHRoaXMgZW1iZWRkZWQgZ2xvYmFsIG1heSBiZSBlbXB0eQovLy8gKGJ1dCBub3QgbnVsbCBvciB1bmRlZmluZWQpLgpjb25zdCBNQU5HTEVEX0dMT0JBTF9OQU1FUyA9ICdtYW5nbGVkR2xvYmFsTmFtZXMnOwoKLy8vIEEgSlMgbWFwIGZyb20gbWFuZ2xlZCBpbnN0YW5jZSBuYW1lcyB0byB0aGVpciB1bm1hbmdsZWQgbmFtZXMuCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgbWFpbmx5IHVzZWQgZm9yIHJlZmxlY3Rpb24sIGJ1dCBpcyBhbHNvIHVzZWQgdG8KLy8vIG1hcCBjb25zdC1zeW1ib2xzIChgY29uc3QgU3ltYm9sKCd4JylgKSB0byB0aGUgbWFuZ2xlZCBpbnN0YW5jZSBuYW1lcy4KLy8vCi8vLyBUaGlzIGVtYmVkZGVkIGdsb2JhbCBtYXkgYmUgZW1wdHkgKGJ1dCBub3QgbnVsbCBvciB1bmRlZmluZWQpLgpjb25zdCBNQU5HTEVEX05BTUVTID0gJ21hbmdsZWROYW1lcyc7CgovLy8gQSBKUyBtYXAgZnJvbSBkaXNwYXRjaCB0YWdzICh1c3VhbGx5IGNvbnN0cnVjdG9yIG5hbWVzIG9mIERPTSBjbGFzc2VzKSB0bwovLy8gaW50ZXJjZXB0b3IgY2xhc3MuIFRoaXMgbWFwIGlzIHVzZWQgdG8gZmluZCB0aGUgY29ycmVjdCBpbnRlcmNlcHRvciBmb3IKLy8vIG5hdGl2ZSBjbGFzc2VzLgovLy8KLy8vIFRoaXMgZW1iZWRkZWQgZ2xvYmFsIGlzIHVzZWQgZm9yIG5hdGl2ZXMuCmNvbnN0IElOVEVSQ0VQVE9SU19CWV9UQUcgPSAnaW50ZXJjZXB0b3JzQnlUYWcnOwoKLy8vIEEgSlMgbWFwIGZyb20gZGlzcGF0Y2ggdGFncyAodXN1YWxseSBjb25zdHJ1Y3RvciBuYW1lcyBvZiBET00gY2xhc3NlcykgdG8KLy8vIGJvb2xlYW5zLiBFdmVyeSB0YWcgZW50cnkgb2YgW0lOVEVSQ0VQVE9SU19CWV9UQUddIGhhcyBhIGNvcnJlc3BvbmRpbmcKLy8vIGVudHJ5IGluIHRoZSBsZWFmLXRhZ3MgbWFwLgovLy8KLy8vIEEgdGFnLWVudHJ5IGlzIHRydWUsIHdoZW4gYSBjbGFzcyBjYW4gYmUgdHJlYXRlZCBhcyBsZWFmIGNsYXNzIGluIHRoZQovLy8gaGllcmFyY2h5LiBUaGF0IGlzLCBldmVuIHRob3VnaCBpdCBtaWdodCBoYXZlIHN1YmNsYXNzZXMsIGFsbCBzdWJjbGFzc2VzCi8vLyBoYXZlIHRoZSBzYW1lIGNvZGUgZm9yIHRoZSB1c2VkIG1ldGhvZHMuCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgdXNlZCBmb3IgbmF0aXZlcy4KY29uc3QgTEVBRl9UQUdTID0gJ2xlYWZUYWdzJzsKCi8vLyBBIEpTIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgaXNvbGF0ZSB0YWcgZm9yIGEgZ2l2ZW4gbmFtZS4KLy8vCi8vLyBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIFtJU09MQVRFX1RBR10gKGJlbG93KSB0byBjb25zdHJ1Y3QgYSBuYW1lIHRoYXQgaXMKLy8vIHVuaXF1ZSBwZXIgaXNvbGF0ZS4KLy8vCi8vLyBUaGlzIGVtYmVkZGVkIGdsb2JhbCBpcyB1c2VkIGZvciBuYXRpdmVzLgovLyBUT0RPKGZsb2l0c2NoKTogc2hvdWxkIHdlIHJlbmFtZSB0aGlzIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoCi8vICAgIFtJTlRFUkNFUFRPUlNfQllfVEFHXSBhbmQgW0xFQUZfVEFHU10uCmNvbnN0IEdFVF9JU09MQVRFX1RBRyA9ICdnZXRJc29sYXRlVGFnJzsKCi8vLyBBIHN0cmluZyB0aGF0IGlzIGRpZmZlcmVudCBmb3IgZWFjaCBydW5uaW5nIGlzb2xhdGUuCi8vLwovLy8gV2hlbiB0aGlzIGVtYmVkZGVkIGdsb2JhbCBpcyBpbml0aWFsaXplZCBhIGdsb2JhbCB2YXJpYWJsZSBpcyB1c2VkIHRvCi8vLyBlbnN1cmUgdGhhdCBubyBvdGhlciBydW5uaW5nIGlzb2xhdGUgdXNlcyB0aGUgc2FtZSBpc29sYXRlLXRhZyBzdHJpbmcuCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgdXNlZCBmb3IgbmF0aXZlcy4KLy8gVE9ETyhmbG9pdHNjaCk6IHNob3VsZCB3ZSByZW5hbWUgdGhpcyB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpb24gd2l0aAovLyAgICBbSU5URVJDRVBUT1JTX0JZX1RBR10gYW5kIFtMRUFGX1RBR1NdLgpjb25zdCBJU09MQVRFX1RBRyA9ICdpc29sYXRlVGFnJzsKCi8vLyBUaGlzIGVtYmVkZGVkIGdsb2JhbCAoYSBmdW5jdGlvbikgcmV0dXJucyB0aGUgaXNvbGF0ZS1zcGVjaWZpYyBkaXNwYXRjaC10YWcKLy8vIHRoYXQgaXMgdXNlZCB0byBhY2NlbGVyYXRlIGludGVyY2VwdG9yIGNhbGxzLgpjb25zdCBESVNQQVRDSF9QUk9QRVJUWV9OQU1FID0gImRpc3BhdGNoUHJvcGVydHlOYW1lIjsKCi8vLyBBbiBlbWJlZGRlZCBnbG9iYWwgdGhhdCBtYXBzIGEgW1R5cGVdIHRvIHRoZSBbSW50ZXJjZXB0b3JdIGFuZCBjb25zdHJ1Y3RvcnMKLy8vIGZvciB0aGF0IHR5cGUuCi8vLwovLy8gTW9yZSBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUgaW50ZXJjZXB0b3JzIGxpYnJhcnkgKGNsb3NlIHRvIGl0cwovLy8gdXNlKS4KY29uc3QgVFlQRV9UT19JTlRFUkNFUFRPUl9NQVAgPSAidHlwZVRvSW50ZXJjZXB0b3JNYXAiOwoKLy8vIFRoZSBjdXJyZW50IHNjcmlwdCdzIFVSSSB3aGVuIHRoZSBwcm9ncmFtIHdhcyBsb2FkZWQuCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgc2V0IGF0IHN0YXJ0dXAsIGp1c3QgYmVmb3JlIGludm9raW5nIGBtYWluYC4KY29uc3QgQ1VSUkVOVF9TQ1JJUFQgPSAnY3VycmVudFNjcmlwdCc7CgovLy8gQ29udGFpbnMgYSBtYXAgZnJvbSBsb2FkLWlkcyB0byBsaXN0cyBvZiBwYXJ0IGluZGV4ZXMuCi8vLwovLy8gVG8gbG9hZCB0aGUgZGVmZXJyZWQgbGlicmFyeSB0aGF0IGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBsb2FkLWlkLCB0aGUgcnVudGltZQovLy8gbXVzdCBsb2FkIGFsbCBhc3NvY2lhdGVkIFVSSXMgKG5hbWVkIGluIERFRkVSUkVEX1BBUlRfVVJJUykgYW5kIGluaXRpYWxpemUKLy8vIGFsbCB0aGUgbG9hZGVkIGh1bmtzIChERUZFUlJFRF9QQVJUX0hBU0hFUykuCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgb25seSB1c2VkIGZvciBkZWZlcnJlZCBsb2FkaW5nLgpjb25zdCBERUZFUlJFRF9MSUJSQVJZX1BBUlRTID0gJ2RlZmVycmVkTGlicmFyeVBhcnRzJzsKCi8vLyBDb250YWlucyBhIGxpc3Qgb2YgVVJJcyAoU3RyaW5ncyksIGluZGV4ZWQgYnkgcGFydC4KLy8vCi8vLyBUaGUgbGlzdHMgaW4gdGhlIERFRkVSUkVEX0xJQlJBUllfUEFSVFMgbWFwIGNvbnRhaW4gaW5kZXhlcyBpbnRvIHRoaXMgbGlzdC4KLy8vCi8vLyBUaGlzIGVtYmVkZGVkIGdsb2JhbCBpcyBvbmx5IHVzZWQgZm9yIGRlZmVycmVkIGxvYWRpbmcuCmNvbnN0IERFRkVSUkVEX1BBUlRfVVJJUyA9ICdkZWZlcnJlZFBhcnRVcmlzJzsKCi8vLyBDb250YWlucyBhIGxpc3Qgb2YgaGFzaGVzLCBpbmRleGVkIGJ5IHBhcnQuCi8vLwovLy8gVGhlIGxpc3RzIGluIHRoZSBERUZFUlJFRF9MSUJSQVJZX1BBUlRTIG1hcCBjb250YWluIGluZGV4ZXMgaW50byB0aGlzIGxpc3QuCi8vLwovLy8gVGhlIGhhc2hlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBVUklzIG9mIHRoZSBsb2FkLWlkcyAoc2VlCi8vLyBbREVGRVJSRURfUEFSVF9VUklTXSkuIFRoZXkgYXJlIFNIQTEgKG9yIHNpbWlsYXIpIGhhc2hlcyBvZiB0aGUgY29kZSB0aGF0Ci8vLyBtdXN0IGJlIGxvYWRlZC4gQnkgdXNpbmcgY3J5cHRvZ3JhcGhpYyBoYXNoZXMgd2UgY2FuICgxKSBoYW5kbGUgbG9hZGluZyBpbgovLy8gdGhlIHNhbWUgd2ViIHBhZ2UgdGhlIHBhcnRzIGZyb20gbXVsdGlwbGUgRGFydCBhcHBsaWNhdGlvbnMgKDIpIGF2b2lkCi8vLyBsb2FkaW5nIHNpbWlsYXIgY29kZSBtdWx0aXBsZSB0aW1lcy4KLy8vCi8vLyBUaGlzIGVtYmVkZGVkIGdsb2JhbCBpcyBvbmx5IHVzZWQgZm9yIGRlZmVycmVkIGxvYWRpbmcuCmNvbnN0IERFRkVSUkVEX1BBUlRfSEFTSEVTID0gJ2RlZmVycmVkUGFydEhhc2hlcyc7CgovLy8gSW5pdGlhbGl6ZSBhIGxvYWRlZCBodW5rLgovLy8KLy8vIE9uY2UgYSBodW5rICh0aGUgY29kZSBmcm9tIGEgZGVmZXJyZWQgVVJJKSBoYXMgYmVlbiBsb2FkZWQgaXQgbXVzdCBiZQovLy8gaW5pdGlhbGl6ZWQuIENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGhhc2ggKHNlZQovLy8gW0RFRkVSUkVEX0xJQlJBUllfSEFTSEVTXSkgaW5pdGlhbGl6ZXMgdGhlIGNvZGUuCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgb25seSB1c2VkIGZvciBkZWZlcnJlZCBsb2FkaW5nLgpjb25zdCBJTklUSUFMSVpFX0xPQURFRF9IVU5LID0gJ2luaXRpYWxpemVMb2FkZWRIdW5rJzsKCi8vLyBSZXR1cm5zLCB3aGV0aGVyIGEgaHVuayAoaWRlbnRpZmllZCBieSBpdHMgaGFzaCkgaGFzIGFscmVhZHkgYmVlbiBsb2FkZWQuCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgb25seSB1c2VkIGZvciBkZWZlcnJlZCBsb2FkaW5nLgpjb25zdCBJU19IVU5LX0xPQURFRCA9ICdpc0h1bmtMb2FkZWQnOwoKLy8vIFJldHVybnMsIHdoZXRoZXIgYSBodW5rIChpZGVudGlmaWVkIGJ5IGl0cyBoYXNoKSBoYXMgYWxyZWFkeSBiZWVuCi8vLyBpbml0aWFsaXplZC4KLy8vCi8vLyBUaGlzIGVtYmVkZGVkIGdsb2JhbCBpcyBvbmx5IHVzZWQgZm9yIGRlZmVycmVkIGxvYWRpbmcuCmNvbnN0IElTX0hVTktfSU5JVElBTElaRUQgPSAnaXNIdW5rSW5pdGlhbGl6ZWQnOwoKLy8vIEEgc2V0IChpbXBsZW1lbnRlZCBhcyBtYXAgdG8gYm9vbGVhbnMpIG9mIGh1bmtzIChpZGVudGlmaWVkIGJ5IGhhc2hlcykgdGhhdAovLy8gaGF2ZSBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgb25seSB1c2VkIGZvciBkZWZlcnJlZCBsb2FkaW5nLgovLy8KLy8vIFRoaXMgZ2xvYmFsIGlzIGFuIGVtaXR0ZXItaW50ZXJuYWwgZW1iZWRkZWQgZ2xvYmFsLCBhbmQgbm90IHVzZWQgYnkgdGhlCi8vLyBydW50aW1lLiBUaGUgY29uc3RhbnQgcmVtYWlucyBpbiB0aGlzIGZpbGUgdG8gbWFrZSBzdXJlIHRoYXQgb3RoZXIgZW1iZWRkZWQKLy8vIGdsb2JhbHMgZG9uJ3QgY2xhc2ggd2l0aCBpdC4KY29uc3QgREVGRVJSRURfSU5JVElBTElaRUQgPSAnZGVmZXJyZWRJbml0aWFsaXplZCc7CgovLy8gQSAnVW5pdmVyc2UnIG9iamVjdCB1c2VkIGJ5ICdkYXJ0Ol9ydGknLgovLy8KLy8vIFRoaXMgZW1iZWRkZWQgZ2xvYmFsIGlzIHVzZWQgZm9yIC0tZXhwZXJpbWVudC1uZXctcnRpLgpjb25zdCBSVElfVU5JVkVSU0UgPSAndHlwZVVuaXZlcnNlJzsKCi8vLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGFsbCBwcmVjb21waWxlZCBmdW5jdGlvbnMgKGluIHBhcnRpY3VsYXIKLy8vIGNvbnN0cnVjdG9ycykuCi8vLwovLy8gVGhhdCBpcywgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFycmF5IHRoYXQgdGhlIGZ1bGwgZW1pdHRlciB3b3VsZAovLy8gb3RoZXJ3aXNlIGJ1aWxkIGR5bmFtaWNhbGx5IHdoZW4gaXQgZmluaXNoZXMgYWxsIGNsYXNzZXMuCi8vLwovLy8gVGhpcyBjb25zdGFudCBpcyBvbmx5IHVzZWQgaW4gQ1NQIG1vZGUuCi8vLwovLy8gVGhpcyBnbG9iYWwgaXMgYW4gZW1pdHRlci1pbnRlcm5hbCBlbWJlZGRlZCBnbG9iYWwsIGFuZCBub3QgdXNlZCBieSB0aGUKLy8vIHJ1bnRpbWUuIFRoZSBjb25zdGFudCByZW1haW5zIGluIHRoaXMgZmlsZSB0byBtYWtlIHN1cmUgdGhhdCBvdGhlciBlbWJlZGRlZAovLy8gZ2xvYmFscyBkb24ndCBjbGFzaCB3aXRoIGl0Lgpjb25zdCBQUkVDT01QSUxFRCA9ICdwcmVjb21waWxlZCc7CgovLy8gQW4gZW1pdHRlci1pbnRlcm5hbCBlbWJlZGRlZCBnbG9iYWwuIFRoaXMgZ2xvYmFsIGlzIG5vdCB1c2VkIGJ5IHRoZSBydW50aW1lLgpjb25zdCBGSU5JU0hFRF9DTEFTU0VTID0gJ2ZpbmlzaGVkQ2xhc3Nlcyc7CgovLy8gQSBKYXZhU2NyaXB0IG9iamVjdCBsaXRlcmFsIHRoYXQgbWFwcyB0aGUgKG1pbmlmaWVkKSBKYXZhU2NyaXB0IGNvbnN0cnVjdG9yCi8vLyBuYW1lIChhcyBnaXZlbiBieSBbSnNCdWlsdGluLnJhd1J0aVRvSnNDb25zdHJ1Y3Rvck5hbWVdIHRvIHRoZQovLy8gSmF2YVNjcmlwdCBjb25zdHJ1Y3Rvci4KLy8vCi8vLyBUaGlzIGVtYmVkZGVkIGdsb2JhbCBpcyBvbmx5IHVzZWQgYnkgcmVmbGVjdGlvbi4KY29uc3QgQUxMX0NMQVNTRVMgPSAnYWxsQ2xhc3Nlcyc7CgovLy8gQSBtYXAgZnJvbSBlbGVtZW50IHRvIHR5cGUgaW5mb3JtYXRpb24uCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgb25seSB1c2VkIGJ5IHJlZmxlY3Rpb24uCmNvbnN0IFRZUEVfSU5GT1JNQVRJT04gPSAndHlwZUluZm9ybWF0aW9uJzsKCi8vLyBBIG1hcCBmcm9tIHN0YXRpY3MgdG8gdGhlaXIgZGVzY3JpcHRvcnMuCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgb25seSB1c2VkIGJ5IHJlZmxlY3Rpb24uCmNvbnN0IFNUQVRJQ1MgPSAnc3RhdGljcyc7CgovLy8gQW4gYXJyYXkgb2YgbGlicmFyeSBkZXNjcmlwdG9ycy4KLy8vCi8vLyBUaGUgZGVzY3JpcHRvciBjb250YWlucyBpbmZvcm1hdGlvbiBzdWNoIGFzIG5hbWUsIHVyaSwgY2xhc3NlcywgLi4uCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgb25seSB1c2VkIGJ5IHJlZmxlY3Rpb24uCmNvbnN0IExJQlJBUklFUyA9ICdsaWJyYXJpZXMnOwoKLy8vIEEgbWFwIGZyb20gbGF6eSBzdGF0aWNzIHRvIHRoZWlyIGluaXRpYWxpemVycy4KLy8vCi8vLyBUaGlzIGVtYmVkZGVkIGdsb2JhbCBpcyBvbmx5IHVzZWQgYnkgcmVmbGVjdGlvbi4KY29uc3QgTEFaSUVTID0gJ2xhemllcyc7CgovLy8gTmFtZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IFtKU19HRVRfTkFNRV0uCi8vIFRPRE8oaGVyaHV0KTogTWFrZSBlbnRyaWVzIGxvd2VyIGNhc2UgKGFzIGluIGZpZWxkcykgYW5kIGZpbmQgYSBiZXR0ZXIgbmFtZS4KZW51bSBKc0dldE5hbWUgewogIEdFVFRFUl9QUkVGSVgsCiAgU0VUVEVSX1BSRUZJWCwKICBDQUxMX1BSRUZJWCwKICBDQUxMX1BSRUZJWDAsCiAgQ0FMTF9QUkVGSVgxLAogIENBTExfUFJFRklYMiwKICBDQUxMX1BSRUZJWDMsCiAgQ0FMTF9QUkVGSVg0LAogIENBTExfUFJFRklYNSwKICBDQUxMX0NBVENIX0FMTCwKICBSRUZMRUNUQUJMRSwKICBDTEFTU19ERVNDUklQVE9SX1BST1BFUlRZLAogIFJFUVVJUkVEX1BBUkFNRVRFUl9QUk9QRVJUWSwKICBERUZBVUxUX1ZBTFVFU19QUk9QRVJUWSwKICBDQUxMX05BTUVfUFJPUEVSVFksCiAgREVGRVJSRURfQUNUSU9OX1BST1BFUlRZLAoKICAvLy8gUHJlZml4IHVzZWQgZm9yIGdlbmVyYXRlZCB0eXBlIGFyZ3VtZW50IHN1YnN0aXR1dGlvbnMgb24gY2xhc3Nlcy4KICBPUEVSQVRPUl9BU19QUkVGSVgsCgogIC8vLyBOYW1lIHVzZWQgZm9yIGdlbmVyYXRlZCBmdW5jdGlvbiB0eXBlcyBvbiBjbGFzc2VzIGFuZCBtZXRob2RzLgogIFNJR05BVFVSRV9OQU1FLAoKICAvLy8gTmFtZSBvZiBKYXZhU2NyaXB0IHByb3BlcnR5IHVzZWQgdG8gc3RvcmUgcnVudGltZS10eXBlIGluZm9ybWF0aW9uIG9uCiAgLy8vIGluc3RhbmNlcyBvZiBwYXJhbWV0ZXJpemVkIGNsYXNzZXMuCiAgUlRJX05BTUUsCgogIC8vLyBOYW1lIHVzZWQgdG8gdGFnIHR5cGVkZWZzLgogIFRZUEVERUZfVEFHLAoKICAvLy8gTmFtZSB1c2VkIHRvIHRhZyBhIGZ1bmN0aW9uIHR5cGUuCiAgRlVOQ1RJT05fVFlQRV9UQUcsCgogIC8vLyBOYW1lIHVzZWQgdG8gdGFnIGJvdW5kcyBvZiBhIGdlbmVyaWMgZnVuY3Rpb24gdHlwZS4gSWYgYm91bmRzIGFyZSBwcmVzZW50LAogIC8vLyB0aGUgcHJvcGVydHkgdmFsdWUgaXMgYW4gQXJyYXkgb2YgYm91bmRzICh0aGUgbGVuZ3RoIGdpdmVzIHRoZSBudW1iZXIgb2YKICAvLy8gdHlwZSBwYXJhbWV0ZXJzKS4gSWYgYWJzZW50LCB0aGUgdHlwZSBpcyBub3QgYSBnZW5lcmljIGZ1bmN0aW9uIHR5cGUuCiAgRlVOQ1RJT05fVFlQRV9HRU5FUklDX0JPVU5EU19UQUcsCgogIC8vLyBOYW1lIHVzZWQgdG8gdGFnIHZvaWQgcmV0dXJuIGluIGZ1bmN0aW9uIHR5cGUgcmVwcmVzZW50YXRpb25zIGluCiAgLy8vIEphdmFTY3JpcHQuCiAgRlVOQ1RJT05fVFlQRV9WT0lEX1JFVFVSTl9UQUcsCgogIC8vLyBOYW1lIHVzZWQgdG8gdGFnIHJldHVybiB0eXBlcyBpbiBmdW5jdGlvbiB0eXBlIHJlcHJlc2VudGF0aW9ucyBpbgogIC8vLyBKYXZhU2NyaXB0LgogIEZVTkNUSU9OX1RZUEVfUkVUVVJOX1RZUEVfVEFHLAoKICAvLy8gTmFtZSB1c2VkIHRvIHRhZyByZXF1aXJlZCBwYXJhbWV0ZXJzIGluIGZ1bmN0aW9uIHR5cGUgcmVwcmVzZW50YXRpb25zCiAgLy8vIGluIEphdmFTY3JpcHQuCiAgRlVOQ1RJT05fVFlQRV9SRVFVSVJFRF9QQVJBTUVURVJTX1RBRywKCiAgLy8vIE5hbWUgdXNlZCB0byB0YWcgb3B0aW9uYWwgcGFyYW1ldGVycyBpbiBmdW5jdGlvbiB0eXBlIHJlcHJlc2VudGF0aW9ucwogIC8vLyBpbiBKYXZhU2NyaXB0LgogIEZVTkNUSU9OX1RZUEVfT1BUSU9OQUxfUEFSQU1FVEVSU19UQUcsCgogIC8vLyBOYW1lIHVzZWQgdG8gdGFnIG5hbWVkIHBhcmFtZXRlcnMgaW4gZnVuY3Rpb24gdHlwZSByZXByZXNlbnRhdGlvbnMgaW4KICAvLy8gSmF2YVNjcmlwdC4KICBGVU5DVElPTl9UWVBFX05BTUVEX1BBUkFNRVRFUlNfVEFHLAoKICAvLy8gTmFtZSB1c2VkIHRvIHRhZyBhIEZ1dHVyZU9yIHR5cGUuCiAgRlVUVVJFX09SX1RBRywKCiAgLy8vIE5hbWUgdXNlZCB0byB0YWcgdHlwZSBhcmd1bWVudHMgdHlwZXMgaW4gRnV0dXJlT3IgdHlwZSByZXByZXNlbnRhdGlvbnMgaW4KICAvLy8gSmF2YVNjcmlwdC4KICBGVVRVUkVfT1JfVFlQRV9BUkdVTUVOVF9UQUcsCgogIC8vLyBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHR5cGUgb2YgdGhlIEZ1dHVyZSBjbGFzcy4KICBGVVRVUkVfQ0xBU1NfVFlQRV9OQU1FLAoKICAvLy8gRmllbGQgbmFtZSB1c2VkIGZvciBkZXRlcm1pbmluZyBpZiBhbiBvYmplY3Qgb3IgaXRzIGludGVyY2VwdG9yIGhhcwogIC8vLyBKYXZhU2NyaXB0IGluZGV4aW5nIGJlaGF2aW9yLgogIElTX0lOREVYQUJMRV9GSUVMRF9OQU1FLAoKICAvLy8gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0eXBlIG9mIHRoZSBudWxsIGNsYXNzLgogIE5VTExfQ0xBU1NfVFlQRV9OQU1FLAoKICAvLy8gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QgY2xhc3MuCiAgT0JKRUNUX0NMQVNTX1RZUEVfTkFNRSwKCiAgLy8vIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24gY2xhc3MuCiAgRlVOQ1RJT05fQ0xBU1NfVFlQRV9OQU1FLAoKICAvLy8gU3RyaW5nIHJlY2lwZSBmb3IgdGhlIFtib29sXSB0eXBlLgogIEJPT0xfUkVDSVBFLAoKICAvLy8gU3RyaW5nIHJlY2lwZSBmb3IgdGhlIFtkb3VibGVdIHR5cGUuCiAgRE9VQkxFX1JFQ0lQRSwKCiAgLy8vIFN0cmluZyByZWNpcGUgZm9yIHRoZSBbaW50XSB0eXBlLgogIElOVF9SRUNJUEUsCgogIC8vLyBTdHJpbmcgcmVjaXBlIGZvciB0aGUgW251bV0gdHlwZS4KICBOVU1fUkVDSVBFLAoKICAvLy8gU3RyaW5nIHJlY2lwZSBmb3IgdGhlIFtTdHJpbmddIHR5cGUuCiAgU1RSSU5HX1JFQ0lQRSwKCiAgLy8vIFByb3BlcnR5IG5hbWUgZm9yIFJ0aS5faXMgZmllbGQuCiAgUlRJX0ZJRUxEX0lTLAp9CgplbnVtIEpzQnVpbHRpbiB7CiAgLy8vIFJldHVybnMgdGhlIEphdmFTY3JpcHQgY29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIERhcnQncyBPYmplY3QgY2xhc3MuCiAgLy8vIFRoaXMgY2FuIGJlIHVzZWQgZm9yIHR5cGUgdGVzdHMsIGFzIGluCiAgLy8vCiAgLy8vICAgICB2YXIgY29uc3RydWN0b3IgPSBKU19CVUlMVElOKCcnLCBKc0J1aWx0aW4uZGFydE9iamVjdENvbnN0cnVjdG9yKTsKICAvLy8gICAgIGlmIChKUygnYm9vbCcsICcjIGluc3RhbmNlb2YgIycsIG9iaiwgY29uc3RydWN0b3IpKQogIC8vLyAgICAgICAuLi4KICBkYXJ0T2JqZWN0Q29uc3RydWN0b3IsCgogIC8vLyBSZXR1cm5zIHRoZSBKYXZhU2NyaXB0IGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGZvciB0aGUgcnVudGltZSdzIENsb3N1cmUKICAvLy8gY2xhc3MsIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBjbG9zdXJlIG9iamVjdHMuICBUaGlzIGNhbiBiZSB1c2VkIGZvciB0eXBlCiAgLy8vIHRlc3RzLCBhcyBpbgogIC8vLwogIC8vLyAgICAgdmFyIGNvbnN0cnVjdG9yID0gSlNfQlVJTFRJTignJywgSnNCdWlsdGluLmRhcnRDbG9zdXJlQ29uc3RydWN0b3IpOwogIC8vLyAgICAgaWYgKEpTKCdib29sJywgJyMgaW5zdGFuY2VvZiAjJywgb2JqLCBjb25zdHJ1Y3RvcikpCiAgLy8vICAgICAgIC4uLgogIGRhcnRDbG9zdXJlQ29uc3RydWN0b3IsCgogIC8vLyBSZXR1cm5zIHRoZSBKYXZhU2NyaXB0LWNvbnN0cnVjdG9yIG5hbWUgZ2l2ZW4gYW4gW2lzQ2hlY2tQcm9wZXJ0eV0uCiAgLy8vCiAgLy8vIFRoaXMgcmVsaWVzIG9uIGEgZGV0ZXJtaW5pc3RpYyBlbmNvZGluZyBvZiBpcy1jaGVjayBwcm9wZXJ0aWVzIChmb3IKICAvLy8gZXhhbXBsZSBgJGlzRm9vYCBmb3IgYSBjbGFzcyBgRm9vYCkuIEluIG1pbmlmaWVkIGNvZGUgdGhlIHJldHVybmVkCiAgLy8vIGNsYXNzbmFtZSBpcyB0aGUgbWluaWZpZWQgbmFtZSBvZiB0aGUgY2xhc3MuCiAgLy8vCiAgLy8vICAgICBKU19CVUlMVElOKCdyZXR1cm5zOlN0cmluZztkZXBlbmRzOm5vbmU7ZWZmZWN0czpub25lJywKICAvLy8gICAgICAgICAgICAgICAgSnNCdWlsdGluLmlzQ2hlY2tQcm9wZXJ0eVRvSnNDb25zdHJ1Y3Rvck5hbWUsCiAgLy8vICAgICAgICAgICAgICAgIGlzQ2hlY2tQcm9wZXJ0eSk7CiAgaXNDaGVja1Byb3BlcnR5VG9Kc0NvbnN0cnVjdG9yTmFtZSwKCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdHlwZSBpcyBhIGZ1bmN0aW9uIHR5cGUuIFJldHVybnMgZmFsc2UgZm9yCiAgLy8vIHRoZSBvbmUgYEZ1bmN0aW9uYCB0eXBlIHNpbmdsZXRvbi4gKFNlZSBbaXNGdW5jdGlvblR5cGVTaW5nbGV0b25dKS4KICAvLy8KICAvLy8gICAgIEpTX0JVSUxUSU4oJ2Jvb2wnLCBKc0J1aWx0aW4uaXNGdW5jdGlvblR5cGUsIG8pCiAgaXNGdW5jdGlvblR5cGUsCgogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHR5cGUgaXMgYSBGdXR1cmVPciB0eXBlLgogIC8vLwogIC8vLyAgICAgSlNfQlVJTFRJTignYm9vbCcsIEpzQnVpbHRpbi5pc0Z1dHVyZU9yVHlwZSwgbykKICBpc0Z1dHVyZU9yVHlwZSwKCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdHlwZSBpcyB0aGUgYHZvaWRgIHR5cGUuCiAgLy8vCiAgLy8vICAgICBKU19CVUlMVElOKCdib29sJywgSnNCdWlsdGluLmlzVm9pZFR5cGUsIG8pCiAgaXNWb2lkVHlwZSwKCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdHlwZSBpcyB0aGUgYGR5bmFtaWNgIHR5cGUuCiAgLy8vCiAgLy8vICAgICBKU19CVUlMVElOKCdib29sJywgSnNCdWlsdGluLmlzRHluYW1pY1R5cGUsIG8pCiAgaXNEeW5hbWljVHlwZSwKCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdHlwZSBpcyBhIHR5cGUgYXJndW1lbnQgb2YgYSBqcy1pbnRlcm9wIGNsYXNzCiAgLy8vIG9yIGEgc3VwZXJ0eXBlIG9mIGEganMtaW50ZXJvcCBjbGFzcy4KICAvLy8KICAvLy8gICAgIEpTX0JVSUxUSU4oJ2Jvb2wnLCBKc0J1aWx0aW4uaXNKc0ludGVyb3BUeXBlQXJndW1lbnQsIG8pCiAgaXNKc0ludGVyb3BUeXBlQXJndW1lbnQsCgogIC8vLyBSZXR1cm5zIHRoZSBKYXZhU2NyaXB0LWNvbnN0cnVjdG9yIG5hbWUgZ2l2ZW4gYW4gcnRpIGVuY29kaW5nLgogIC8vLwogIC8vLyAgICAgSlNfQlVJTFRJTignU3RyaW5nJywgSnNCdWlsdGluLnJhd1J0aVRvSnNDb25zdHJ1Y3Rvck5hbWUsIHJ0aSkKICByYXdSdGlUb0pzQ29uc3RydWN0b3JOYW1lLAoKICAvLy8gUmV0dXJucyB0aGUgcmF3IHJ1bnRpbWUgdHlwZSBvZiB0aGUgZ2l2ZW4gb2JqZWN0LiBUaGUgZ2l2ZW4gYXJndW1lbnQKICAvLy8gW29dIHNob3VsZCBiZSB0aGUgaW50ZXJjZXB0b3IgKGZvciBub24tRGFydCBvYmplY3RzKS4KICAvLy8KICAvLy8gICAgIEpTX0JVSUxUSU4oJycsIEpzQnVpbHRpbi5yYXdSdW50aW1lVHlwZSwgbykKICByYXdSdW50aW1lVHlwZSwKCiAgLy8vIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gdHlwZSBpcyBhIHN1YnR5cGUgb2Ygb3RoZXIuCiAgLy8vCiAgLy8vIFRoZSBhcmd1bWVudCBgb3RoZXJgIGlzIHRoZSBuYW1lIG9mIHRoZSBwb3RlbnRpYWwgc3VwZXJ0eXBlLiBJdCBpcwogIC8vLyBjb21wdXRlZCBieSBgcnVudGltZVR5cGVUb1N0cmluZ2A7CiAgLy8vCiAgLy8vICpUaGUgYG90aGVyYCBuYW1lIG11c3QgYmUgcGFzc2VkIGluIGJlZm9yZSB0aGUgYHR5cGVgLioKICAvLy8KICAvLy8gICAgIEpTX0JVSUxUSU4oJ3JldHVybnM6Ym9vbDtlZmZlY3RzOm5vbmU7ZGVwZW5kczpub25lJywKICAvLy8gICAgICAgICAgICAgICAgSnNCdWlsdGluLmlzU3VidHlwZSwgb3RoZXIsIHR5cGUpOwogIGlzU3VidHlwZSwKCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdHlwZSBlcXVhbHMgdGhlIHR5cGUgZ2l2ZW4gYXMgc2Vjb25kCiAgLy8vIGFyZ3VtZW50LiBVc2UgdGhlIEpTX0dFVF9OQU1FIGhlbHBlcnMgdG8gZ2V0IHRoZSB0eXBlIHJlcHJlc2VudGF0aW9uCiAgLy8vIGZvciB2YXJpb3VzIERhcnQgY2xhc3Nlcy4KICAvLy8KICAvLy8gICAgIEpTX0JVSUxUSU4oJ3JldHVybnM6Ym9vbDtlZmZlY3RzOm5vbmU7ZGVwZW5kczpub25lJywKICAvLy8gICAgICAgICAgICAgICAgSnNCdWlsdGluLmlzRnVuY3Rpb25UeXBlTGl0ZXJhbCwgdHlwZSwgbmFtZSk7CiAgaXNHaXZlblR5cGVSdGksCgogIC8vLyBSZXR1cm5zIHRoZSBtZXRhZGF0YSBvZiB0aGUgZ2l2ZW4gW2luZGV4XS4KICAvLy8KICAvLy8gICAgIEpTX0JVSUxUSU4oJ3JldHVybnM6dmFyO2VmZmVjdHM6bm9uZTtkZXBlbmRzOm5vbmUnLAogIC8vLyAgICAgICAgICAgICAgICBKc0J1aWx0aW4uZ2V0TWV0YWRhdGEsIGluZGV4KTsKICBnZXRNZXRhZGF0YSwKCiAgLy8vIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIGdpdmVuIFtpbmRleF0uCiAgLy8vCiAgLy8vICAgICBKU19CVUlMVElOKCdyZXR1cm5zOnZhcjtlZmZlY3RzOm5vbmU7ZGVwZW5kczpub25lJywKICAvLy8gICAgICAgICAgICAgICAgSnNCdWlsdGluLmdldFR5cGUsIGluZGV4KTsKICBnZXRUeXBlLAp9CgovLy8gTmFtZXMgb2YgZmllbGRzIG9mIHRoZSBSdGkgVW5pdmVyc2Ugb2JqZWN0LgpjbGFzcyBSdGlVbml2ZXJzZUZpZWxkTmFtZXMgewogIHN0YXRpYyBTdHJpbmcgZXZhbENhY2hlID0gJ2VDJzsKICBzdGF0aWMgU3RyaW5nIHR5cGVSdWxlcyA9ICd0Uic7CiAgc3RhdGljIFN0cmluZyBzaGFyZWRFbXB0eUFycmF5ID0gJ3NFQSc7Cn0KgcYATk48AUsOBFAjBEghAUUETkwpBEwgOAFJDQROSAROOARMIDQBSxcESRI8ATMETT48ATIETAwdAUsUBFAXAUAETCsuAUEETiEzAUMETEsEQyYBTkwUBC4xAU5LIARKTS0ELh4BQQRNGAQuSi0pATkESksELkotIgFQMjcBUBMETgo4AToESSgBOwRRTzEEPDcBOARQBDwvATAEUARBTk9KKQQ8MwEeBEpINQQ8NwFOBDwnAUYRBDwxAVAjBDwETFAhNAEtBDslAU0TBEg+BCwETFAhIwFRLAFQQxwENSIBLAQ1LAEtBDUbASUESAQ1HwEzBDUZAS9QERERDxAQEBAQEBIPHR8bFhwBSBYBRRIBTCoMASEPASgVAVFPTCQBRxIhAUgSIQFMFSkBTBUpAUwSJgEoEQFQEh8BPRoBSiQbATsYAT0aAT8cASkPASsRASgOASgOASsRAScQAgERSy0GTT4QGQFMTxMGTj4QGgFKBkpJMwZBQycmAUtKBjoSATkGOhIBOQY2DgE8BjkRAU4sBkMbAUUGSR0BSzwGNhIBPAZJKQY+Bj84DQFFSyAGP0MSATEGPjQPAS0GPjALAgEwHiIiKgIBLXBhY2thZ2U6anNfcnVudGltZS9zaGFyZWQvZW1iZWRkZWRfbmFtZXMuZGFydCxzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9uYXRpdmUvanMuZGFydKRtLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganM7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2lkZV9lZmZlY3RzLmRhcnQnIHNob3cgU2lkZUVmZmVjdHM7CmltcG9ydCAnYmVoYXZpb3IuZGFydCc7CgpjbGFzcyBIYXNDYXB0dXJlZFBsYWNlaG9sZGVycyBleHRlbmRzIGpzLkJhc2VWaXNpdG9yIHsKICBIYXNDYXB0dXJlZFBsYWNlaG9sZGVycy5fKCk7CgogIHN0YXRpYyBib29sIGNoZWNrKGpzLk5vZGUgbm9kZSkgewogICAgSGFzQ2FwdHVyZWRQbGFjZWhvbGRlcnMgdmlzaXRvciA9IG5ldyBIYXNDYXB0dXJlZFBsYWNlaG9sZGVycy5fKCk7CiAgICBub2RlLmFjY2VwdCh2aXNpdG9yKTsKICAgIHJldHVybiB2aXNpdG9yLmZvdW5kOwogIH0KCiAgaW50IGVuY2xvc2luZ0Z1bmN0aW9ucyA9IDA7CiAgYm9vbCBmb3VuZCA9IGZhbHNlOwoKICBAb3ZlcnJpZGUKICB2aXNpdEZ1bihqcy5GdW4gbm9kZSkgewogICAgKytlbmNsb3NpbmdGdW5jdGlvbnM7CiAgICBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgICAtLWVuY2xvc2luZ0Z1bmN0aW9uczsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0SW50ZXJwb2xhdGVkTm9kZShqcy5JbnRlcnBvbGF0ZWROb2RlIG5vZGUpIHsKICAgIGlmIChlbmNsb3NpbmdGdW5jdGlvbnMgPiAwKSB7CiAgICAgIGZvdW5kID0gdHJ1ZTsKICAgIH0KICB9Cn0KCmNsYXNzIFNpZGVFZmZlY3RzVmlzaXRvciBleHRlbmRzIGpzLkJhc2VWaXNpdG9yIHsKICBmaW5hbCBTaWRlRWZmZWN0cyBzaWRlRWZmZWN0czsKICBTaWRlRWZmZWN0c1Zpc2l0b3IodGhpcy5zaWRlRWZmZWN0cyk7CgogIHZvaWQgdmlzaXQoanMuTm9kZSBub2RlKSB7CiAgICBub2RlLmFjY2VwdCh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXRlcmFsRXhwcmVzc2lvbihqcy5MaXRlcmFsRXhwcmVzc2lvbiBub2RlKSB7CiAgICBzaWRlRWZmZWN0cy5zZXRBbGxTaWRlRWZmZWN0cygpOwogICAgc2lkZUVmZmVjdHMuc2V0RGVwZW5kc09uU29tZXRoaW5nKCk7CiAgICBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGl0ZXJhbFN0YXRlbWVudChqcy5MaXRlcmFsU3RhdGVtZW50IG5vZGUpIHsKICAgIHNpZGVFZmZlY3RzLnNldEFsbFNpZGVFZmZlY3RzKCk7CiAgICBzaWRlRWZmZWN0cy5zZXREZXBlbmRzT25Tb21ldGhpbmcoKTsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBc3NpZ25tZW50KGpzLkFzc2lnbm1lbnQgbm9kZSkgewogICAgc2lkZUVmZmVjdHMuc2V0Q2hhbmdlc1N0YXRpY1Byb3BlcnR5KCk7CiAgICBzaWRlRWZmZWN0cy5zZXRDaGFuZ2VzSW5zdGFuY2VQcm9wZXJ0eSgpOwogICAgc2lkZUVmZmVjdHMuc2V0Q2hhbmdlc0luZGV4KCk7CiAgICBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VmFyaWFibGVJbml0aWFsaXphdGlvbihqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uIG5vZGUpIHsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDYWxsKGpzLkNhbGwgbm9kZSkgewogICAgc2lkZUVmZmVjdHMuc2V0QWxsU2lkZUVmZmVjdHMoKTsKICAgIHNpZGVFZmZlY3RzLnNldERlcGVuZHNPblNvbWV0aGluZygpOwogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJpbmFyeShqcy5CaW5hcnkgbm9kZSkgewogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFRocm93KGpzLlRocm93IG5vZGUpIHsKICAgIC8vIFRPRE8obmdlb2ZmcmF5KTogSW5jb3Jwb3JhdGUgYSBtYXlUaHJvdyBmbGFnIGluIHRoZQogICAgLy8gW1NpZGVFZmZlY3RzXSBjbGFzcy4KICAgIHNpZGVFZmZlY3RzLnNldEFsbFNpZGVFZmZlY3RzKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TmV3KGpzLk5ldyBub2RlKSB7CiAgICBzaWRlRWZmZWN0cy5zZXRBbGxTaWRlRWZmZWN0cygpOwogICAgc2lkZUVmZmVjdHMuc2V0RGVwZW5kc09uU29tZXRoaW5nKCk7CiAgICBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UHJlZml4KGpzLlByZWZpeCBub2RlKSB7CiAgICBpZiAobm9kZS5vcCA9PSAnZGVsZXRlJykgewogICAgICBzaWRlRWZmZWN0cy5zZXRDaGFuZ2VzU3RhdGljUHJvcGVydHkoKTsKICAgICAgc2lkZUVmZmVjdHMuc2V0Q2hhbmdlc0luc3RhbmNlUHJvcGVydHkoKTsKICAgICAgc2lkZUVmZmVjdHMuc2V0Q2hhbmdlc0luZGV4KCk7CiAgICB9CiAgICBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VmFyaWFibGVVc2UoanMuVmFyaWFibGVVc2Ugbm9kZSkgewogICAgc2lkZUVmZmVjdHMuc2V0RGVwZW5kc09uU3RhdGljUHJvcGVydHlTdG9yZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFBvc3RmaXgoanMuUG9zdGZpeCBub2RlKSB7CiAgICBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QWNjZXNzKGpzLlByb3BlcnR5QWNjZXNzIG5vZGUpIHsKICAgIHNpZGVFZmZlY3RzLnNldERlcGVuZHNPbkluZGV4U3RvcmUoKTsKICAgIHNpZGVFZmZlY3RzLnNldERlcGVuZHNPbkluc3RhbmNlUHJvcGVydHlTdG9yZSgpOwogICAgc2lkZUVmZmVjdHMuc2V0RGVwZW5kc09uU3RhdGljUHJvcGVydHlTdG9yZSgpOwogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogIH0KfQoKLy8vIFRocm93QmVoYXZpb3JWaXNpdG9yIGdlbmVyYXRlcyBhIE5hdGl2ZVRocm93QmVoYXZpb3IgZGVzY3JpYmluZyB0aGUKLy8vIGV4Y2VwdGlvbiBiZWhhdmlvciBvZiBhIEphdmFTY3JpcHQgZXhwcmVzc2lvbi4KLy8vCi8vLyBUaGUgcmVzdWx0IGlzIHNlbWktY29uc2VydmF0aXZlLCBnaXZpbmcgcmVhc29uYWJsZSByZXN1bHRzIGZvciBtYW55IHNpbXBsZQovLy8gSlMgZnJhZ21lbnRzLiBUaGUgbm9uLWNvbnNlcnZhdGl2ZSBwYXJ0IGlzIHRoZSBhc3N1bXB0aW9uIHRoYXQgYmluYXJ5Ci8vLyBvcGVyYXRvcnMgYXJlIHVzZWQgb24gJ2dvb2QnIG9wZXJhbmRzIHRoYXQgZG8gbm90IGZvcmNlIGFyYml0cmFyeSBjb2RlIHRvIGJlCi8vLyBleGVjdXRlZCB2aWEgY29udmVyc2lvbnMgKHZhbHVlT2YoKSBhbmQgdG9TdHJpbmcoKSBtZXRob2RzKS4KLy8vCi8vLyBJbiBtYW55IGNhc2VzIGEgSlMgZnJhZ21lbnQgaGFzIG1vcmUgcHJlY2lzZSBiZWhhdmlvci4gSW4gdGhlc2UgY2FzZXMgdGhlCi8vLyBiZWhhdmlvciBzaG91bGQgYmUgZGVzY3JpYmVkIGFzIGEgcHJvcGVydHkgb2YgdGhlIEpTIGZyYWdtZW50LiBGb3IgZXhhbXBsZSwKLy8vIE9iamVjdC5rZXlzKCMpIGhhcyBhIFR5cGVFcnJvciBvbiBudWxsIC8gdW5kZWZpbmVkLCB3aGljaCBjYW4gb25seSBiZSBrbm93bgovLy8gaW4gdGhlIGNhbGxpbmcgY29udGV4dC4KLy8vCmNsYXNzIFRocm93QmVoYXZpb3JWaXNpdG9yIGV4dGVuZHMganMuQmFzZVZpc2l0b3I8TmF0aXZlVGhyb3dCZWhhdmlvcj4gewogIFRocm93QmVoYXZpb3JWaXNpdG9yKCk7CgogIE5hdGl2ZVRocm93QmVoYXZpb3IgYW5hbHl6ZShqcy5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiB2aXNpdChub2RlKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBjb21iaW5lZCBiZWhhdmlvciBvZiBzZXF1ZW50aWFsIGV4ZWN1dGlvbiBvZiBjb2RlIGhhdmluZwogIC8vLyBiZWhhdmlvciBbZmlyc3RdIGZvbGxvd2VkIGJ5IGNvZGUgaGF2aW5nIGJlaGF2aW9yIFtzZWNvbmRdLgogIHN0YXRpYyBOYXRpdmVUaHJvd0JlaGF2aW9yIHNlcXVlbmNlKAogICAgICBOYXRpdmVUaHJvd0JlaGF2aW9yIGZpcnN0LCBOYXRpdmVUaHJvd0JlaGF2aW9yIHNlY29uZCkgewogICAgcmV0dXJuIGZpcnN0LnRoZW4oc2Vjb25kKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBjb21iaW5lZCBiZWhhdmlvciBvZiBhIGNob2ljZSBiZXR3ZWVuIHR3byBwYXRocyB3aXRoIGJlaGF2aW9ycwogIC8vLyBbZmlyc3RdIGFuZCBbc2Vjb25kXS4KICBzdGF0aWMgTmF0aXZlVGhyb3dCZWhhdmlvciBjaG9pY2UoCiAgICAgIE5hdGl2ZVRocm93QmVoYXZpb3IgZmlyc3QsIE5hdGl2ZVRocm93QmVoYXZpb3Igc2Vjb25kKSB7CiAgICByZXR1cm4gZmlyc3Qub3Ioc2Vjb25kKTsKICB9CgogIE5hdGl2ZVRocm93QmVoYXZpb3IgdmlzaXQoanMuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gbm9kZS5hY2NlcHQodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVUaHJvd0JlaGF2aW9yIHZpc2l0Tm9kZShqcy5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBOYXRpdmVUaHJvd0JlaGF2aW9yLk1BWTsKICB9CgogIEBvdmVycmlkZQogIE5hdGl2ZVRocm93QmVoYXZpb3IgdmlzaXRMaXRlcmFsKGpzLkxpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIE5hdGl2ZVRocm93QmVoYXZpb3IuTkVWRVI7CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVUaHJvd0JlaGF2aW9yIHZpc2l0SW50ZXJwb2xhdGVkRXhwcmVzc2lvbihqcy5JbnRlcnBvbGF0ZWROb2RlIG5vZGUpIHsKICAgIHJldHVybiBOYXRpdmVUaHJvd0JlaGF2aW9yLk5FVkVSOwogIH0KCiAgQG92ZXJyaWRlCiAgTmF0aXZlVGhyb3dCZWhhdmlvciB2aXNpdEludGVycG9sYXRlZFNlbGVjdG9yKGpzLkludGVycG9sYXRlZE5vZGUgbm9kZSkgewogICAgcmV0dXJuIE5hdGl2ZVRocm93QmVoYXZpb3IuTkVWRVI7CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVUaHJvd0JlaGF2aW9yIHZpc2l0QXJyYXlJbml0aWFsaXplcihqcy5BcnJheUluaXRpYWxpemVyIG5vZGUpIHsKICAgIHJldHVybiBub2RlLmVsZW1lbnRzLm1hcCh2aXNpdCkuZm9sZChOYXRpdmVUaHJvd0JlaGF2aW9yLk5FVkVSLCBzZXF1ZW5jZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVUaHJvd0JlaGF2aW9yIHZpc2l0QXJyYXlIb2xlKGpzLkFycmF5SG9sZSBub2RlKSB7CiAgICByZXR1cm4gTmF0aXZlVGhyb3dCZWhhdmlvci5ORVZFUjsKICB9CgogIEBvdmVycmlkZQogIE5hdGl2ZVRocm93QmVoYXZpb3IgdmlzaXRPYmplY3RJbml0aWFsaXplcihqcy5PYmplY3RJbml0aWFsaXplciBub2RlKSB7CiAgICByZXR1cm4gbm9kZS5wcm9wZXJ0aWVzLm1hcCh2aXNpdCkuZm9sZChOYXRpdmVUaHJvd0JlaGF2aW9yLk5FVkVSLCBzZXF1ZW5jZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVUaHJvd0JlaGF2aW9yIHZpc2l0UHJvcGVydHkoanMuUHJvcGVydHkgbm9kZSkgewogICAgcmV0dXJuIHNlcXVlbmNlKHZpc2l0KG5vZGUubmFtZSksIHZpc2l0KG5vZGUudmFsdWUpKTsKICB9CgogIEBvdmVycmlkZQogIE5hdGl2ZVRocm93QmVoYXZpb3IgdmlzaXRBc3NpZ25tZW50KGpzLkFzc2lnbm1lbnQgbm9kZSkgewogICAgLy8gVE9ETyhzcmEpOiBDYW4gd2UgbWFrZSAiIy5wID0gIyIgYmUgbnVsbCgxKT8KICAgIHJldHVybiBOYXRpdmVUaHJvd0JlaGF2aW9yLk1BWTsKICB9CgogIEBvdmVycmlkZQogIE5hdGl2ZVRocm93QmVoYXZpb3IgdmlzaXRDYWxsKGpzLkNhbGwgbm9kZSkgewogICAganMuRXhwcmVzc2lvbiB0YXJnZXQgPSBub2RlLnRhcmdldDsKICAgIGlmICh0YXJnZXQgaXMganMuUHJvcGVydHlBY2Nlc3MgJiYgX2lzRmlyc3RJbnRlcnBvbGF0ZWRQcm9wZXJ0eSh0YXJnZXQpKSB7CiAgICAgIC8vICMuZiguLi4pOiBFdmFsdWF0ZSBzZWxlY3RvciAnZicsIGRlcmVmZXJlbmNlLCBldmFsdWF0ZSBhcmd1bWVudHMsIGFuZAogICAgICAvLyBmaW5hbGx5IGNhbGwgdGFyZ2V0LgogICAgICBOYXRpdmVUaHJvd0JlaGF2aW9yIHJlc3VsdCA9CiAgICAgICAgICBzZXF1ZW5jZSh2aXNpdCh0YXJnZXQuc2VsZWN0b3IpLCBOYXRpdmVUaHJvd0JlaGF2aW9yLk5VTExfTlNNKTsKICAgICAgZm9yIChqcy5FeHByZXNzaW9uIGFyZ3VtZW50IGluIG5vZGUuYXJndW1lbnRzKSB7CiAgICAgICAgcmVzdWx0ID0gc2VxdWVuY2UocmVzdWx0LCB2aXNpdChhcmd1bWVudCkpOwogICAgICB9CiAgICAgIHJldHVybiBzZXF1ZW5jZShyZXN1bHQsIE5hdGl2ZVRocm93QmVoYXZpb3IuTUFZKTsgLy8gVGFyZ2V0IG1heSB0aHJvdy4KICAgIH0KICAgIHJldHVybiBOYXRpdmVUaHJvd0JlaGF2aW9yLk1BWTsKICB9CgogIEBvdmVycmlkZQogIE5hdGl2ZVRocm93QmVoYXZpb3IgdmlzaXROZXcoanMuTmV3IG5vZGUpIHsKICAgIC8vIFRPRE8oc3JhKTogYG5ldyBBcnJheSh4KWAgd2hlcmUgYHhgIGlzIGEgc21hbGwgbnVtYmVyLgogICAgcmV0dXJuIE5hdGl2ZVRocm93QmVoYXZpb3IuTUFZOwogIH0KCiAgQG92ZXJyaWRlCiAgTmF0aXZlVGhyb3dCZWhhdmlvciB2aXNpdEJpbmFyeShqcy5CaW5hcnkgbm9kZSkgewogICAgTmF0aXZlVGhyb3dCZWhhdmlvciBsZWZ0ID0gdmlzaXQobm9kZS5sZWZ0KTsKICAgIE5hdGl2ZVRocm93QmVoYXZpb3IgcmlnaHQgPSB2aXNpdChub2RlLnJpZ2h0KTsKICAgIHN3aXRjaCAobm9kZS5vcCkgewogICAgICAvLyBXZSBtYWtlIHRoZSBub24tY29uc2VydmF0aXZlIGFzc3VtcHRpb24gdGhhdCB0aGVzZSBvcGVyYXRpb25zIGFyZSBub3QKICAgICAgLy8gdXNlZCBpbiB3YXlzIHRoYXQgZm9yY2UgY2FsbGluZyBhcmJpdHJhcnkgY29kZSB2aWEgdmFsdWVPZiBvcgogICAgICAvLyB0b1N0cmluZygpLgogICAgICBjYXNlICIqIjoKICAgICAgY2FzZSAiLyI6CiAgICAgIGNhc2UgIiUiOgogICAgICBjYXNlICIrIjoKICAgICAgY2FzZSAiLSI6CiAgICAgIGNhc2UgIjw8IjoKICAgICAgY2FzZSAiPj4iOgogICAgICBjYXNlICI+Pj4iOgogICAgICBjYXNlICI8IjoKICAgICAgY2FzZSAiPiI6CiAgICAgIGNhc2UgIjw9IjoKICAgICAgY2FzZSAiPj0iOgogICAgICBjYXNlICI9PSI6CiAgICAgIGNhc2UgIj09PSI6CiAgICAgIGNhc2UgIiE9IjoKICAgICAgY2FzZSAiIT09IjoKICAgICAgY2FzZSAiJiI6CiAgICAgIGNhc2UgIl4iOgogICAgICBjYXNlICJ8IjoKICAgICAgICByZXR1cm4gc2VxdWVuY2UobGVmdCwgcmlnaHQpOwoKICAgICAgY2FzZSAnLCc6CiAgICAgICAgcmV0dXJuIHNlcXVlbmNlKGxlZnQsIHJpZ2h0KTsKCiAgICAgIGNhc2UgIiYmIjoKICAgICAgY2FzZSAifHwiOgogICAgICAgIHJldHVybiBjaG9pY2UobGVmdCwgc2VxdWVuY2UobGVmdCwgcmlnaHQpKTsKCiAgICAgIGNhc2UgImluc3RhbmNlb2YiOgogICAgICBjYXNlICJpbiI6CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIE5hdGl2ZVRocm93QmVoYXZpb3IuTUFZOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgTmF0aXZlVGhyb3dCZWhhdmlvciB2aXNpdFRocm93KGpzLlRocm93IG5vZGUpIHsKICAgIHJldHVybiBzZXF1ZW5jZSh2aXNpdChub2RlLmV4cHJlc3Npb24pLCBOYXRpdmVUaHJvd0JlaGF2aW9yLk1BWSk7CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVUaHJvd0JlaGF2aW9yIHZpc2l0UHJlZml4KGpzLlByZWZpeCBub2RlKSB7CiAgICBpZiAobm9kZS5vcCA9PSAndHlwZW9mJyAmJiBub2RlLmFyZ3VtZW50IGlzIGpzLlZhcmlhYmxlVXNlKQogICAgICByZXR1cm4gTmF0aXZlVGhyb3dCZWhhdmlvci5ORVZFUjsKICAgIE5hdGl2ZVRocm93QmVoYXZpb3IgcmVzdWx0ID0gdmlzaXQobm9kZS5hcmd1bWVudCk7CiAgICBzd2l0Y2ggKG5vZGUub3ApIHsKICAgICAgY2FzZSAnKyc6CiAgICAgIGNhc2UgJy0nOgogICAgICBjYXNlICchJzoKICAgICAgY2FzZSAnfic6CiAgICAgIGNhc2UgJ3ZvaWQnOgogICAgICBjYXNlICd0eXBlb2YnOgogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIE5hdGl2ZVRocm93QmVoYXZpb3IuTUFZOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgTmF0aXZlVGhyb3dCZWhhdmlvciB2aXNpdFZhcmlhYmxlVXNlKGpzLlZhcmlhYmxlVXNlIG5vZGUpIHsKICAgIC8vIFdlIGNvdWxkIGdldCBhIFJlZmVyZW5jZUVycm9yIHVubGVzcyB0aGUgdmFyaWFibGUgaXMgaW4gc2NvcGUuIFRoZSBBU1QKICAgIC8vIGNvdWxkIGRpc3Rpbmd1aXNoIGluLXNjb3BlIGFuZCBvdXQtb2Ygc2NvcGUgcmVmZXJlbmNlcy4gRm9yIEpTIGZyYWdtZW50cywKICAgIC8vIHRoZSBvbmx5IHVzZSBvZiBWYXJpYWJsZVVzZSBzaG91bGQgYmUgZm9yIGdsb2JhbCByZWZlcmVuY2VzLiBDZXJ0YWluCiAgICAvLyBnbG9iYWwgbmFtZXMgYXJlIGFsbW9zdCBjZXJ0YWlubHkgbm90IHJlZmVyZW5jZSBlcnJvcnMsIGUuZyAnQXJyYXknLgogICAgc3dpdGNoIChub2RlLm5hbWUpIHsKICAgICAgY2FzZSAnQXJyYXknOgogICAgICBjYXNlICdNYXRoJzoKICAgICAgY2FzZSAnT2JqZWN0JzoKICAgICAgICByZXR1cm4gTmF0aXZlVGhyb3dCZWhhdmlvci5ORVZFUjsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gTmF0aXZlVGhyb3dCZWhhdmlvci5NQVk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVUaHJvd0JlaGF2aW9yIHZpc2l0QWNjZXNzKGpzLlByb3BlcnR5QWNjZXNzIG5vZGUpIHsKICAgIGpzLk5vZGUgcmVjZWl2ZXIgPSBub2RlLnJlY2VpdmVyOwogICAgTmF0aXZlVGhyb3dCZWhhdmlvciBmaXJzdCA9IHZpc2l0KHJlY2VpdmVyKTsKICAgIE5hdGl2ZVRocm93QmVoYXZpb3Igc2Vjb25kID0gdmlzaXQobm9kZS5zZWxlY3Rvcik7CgogICAgaWYgKF9pc0ZpcnN0SW50ZXJwb2xhdGVkUHJvcGVydHkobm9kZSkpIHsKICAgICAgZmlyc3QgPSBOYXRpdmVUaHJvd0JlaGF2aW9yLk5VTExfTlNNOwogICAgfSBlbHNlIHsKICAgICAgZmlyc3QgPSBOYXRpdmVUaHJvd0JlaGF2aW9yLk1BWTsKICAgIH0KCiAgICByZXR1cm4gc2VxdWVuY2UoZmlyc3QsIHNlY29uZCk7CiAgfQoKICBib29sIF9pc0ZpcnN0SW50ZXJwb2xhdGVkUHJvcGVydHkoanMuUHJvcGVydHlBY2Nlc3Mgbm9kZSkgewogICAganMuTm9kZSByZWNlaXZlciA9IG5vZGUucmVjZWl2ZXI7CiAgICBpZiAocmVjZWl2ZXIgaXMganMuSW50ZXJwb2xhdGVkRXhwcmVzc2lvbiAmJgogICAgICAgIHJlY2VpdmVyLmlzUG9zaXRpb25hbCAmJgogICAgICAgIHJlY2VpdmVyLm5hbWVPclBvc2l0aW9uID09IDApIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CoFUAE5OPAEeORgBNx8BJEcaGgQBHhYBDBoaHhoEAQw0IhQGBAIBMiEoAR0XBAEMOyUpHgQBDDklKR4EAQwtLC4jHgQBDEUeBAEMISUpHgQBDCUeBAEMIzscJQQBDB8lKR4EAQwlHy4wJQYeBAEMLzMEAQwnHgQBDC0qNTMeBAIBSDMET0pRQQROUFAcBEkaAS4YBAFLQic/HwQBURwlPx0EASweBAEMMCQEAQw2JgQBDE4mBAEMTCYEAQxITwQBDDomBAEMSlEEAQw4OgQBDDw0JAQBDDAoT08eI0o3NAhNBiQEAQwuPiQEAQw0MTMXT0cVEBAQEBARERIQEBERERIREhAQECYBECYBERE0ARkRDygGBAEMMkYEAQw0QCg3FxAQEBATFRcPKAYEAQw+TlFMTBkUExUqDygGBAEMPCYxNwEuLA0nBgEkBAE+JjEhKBMGEgQCASNwYWNrYWdlOmNvbXBpbGVyL3NyYy9uYXRpdmUvanMuZGFydDtzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pci9ydW50aW1lX3R5cGVfYW5hbHlzaXMuZGFydLnOLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCc7CmltcG9ydCAndXRpbC5kYXJ0JzsKCi8vLyBFbnVtIGZvciByZWNvZ25pemVkIHVzZSBraW5kcyBvZiBgT2JqZWN0LnJ1bnRpbWVUeXBlYC4KZW51bSBSdW50aW1lVHlwZVVzZUtpbmQgewogIC8vLyBVbmtub3duIHVzZSBvZiBgT2JqZWN0LnJ1bnRpbWVUeXBlYC4gVGhpcyBpcyB0aGUgZmFsbGJhY2sgdmFsdWUgaWYgdGhlCiAgLy8vIHVzYWdlIGRpZG4ndCBtYXRjaCBhbnkgb2YgdGhlIHJlY29nbml6ZWQgcGF0dGVybnMuCiAgdW5rbm93biwKCiAgLy8vIGBPYmplY3QucnVudGltZVR5cGVgIHVzZWQgaW4gYSBwYXR0ZXJuIGxpa2UKICAvLy8gYGEucnVudGltZVR5cGUgPT0gYi5ydW50aW1lVHlwZWAuCiAgZXF1YWxzLAoKICAvLy8gYE9iamVjdC5ydW50aW1lVHlwZWAgdXNlZCBpbiBhIHBhdHRlcm4gbGlrZSBgJyR7ZS5ydW50aW1lVHlwZX0nYCBvcgogIC8vLyBgZS5ydW50aW1lVHlwZS50b1N0cmluZygpYC4KICBzdHJpbmcsCn0KCi8vLyBEYXRhIG9iamVjdCB1c2UgZm9yIGNvbXB1dGluZyBzdGF0aWMgdHlwZSBpbmZvcm1hdGlvbiBvbiB1c2VzIG9mCi8vLyBgT2JqZWN0LnJ1bnRpbWVUeXBlYC4KY2xhc3MgUnVudGltZVR5cGVVc2VEYXRhIHsKICAvLy8gVGhlIHVzZSBraW5kIG9mIGBPYmplY3QucnVudGltZVR5cGVgLgogIGZpbmFsIFJ1bnRpbWVUeXBlVXNlS2luZCBraW5kOwoKICAvLy8gVGhlIHByb3BlcnR5IGdldCBmb3IgdGhlIGxlZnQgKG9yIHNpbmdsZSkgb2NjdXJyZW5jZSBvZiBgLnJ1bnRpbWVUeXBlYC4KICBmaW5hbCBpci5Qcm9wZXJ0eUdldCBsZWZ0UnVudGltZVR5cGVFeHByZXNzaW9uOwoKICAvLy8gVGhlIHJlY2VpdmVyIGV4cHJlc3Npb24uCiAgZmluYWwgaXIuRXhwcmVzc2lvbiByZWNlaXZlcjsKCiAgLy8vIFRoZSBzdGF0aWMgdHlwZSBvZiB0aGUgcmVjZWl2ZXIgZXhwcmVzc2lvbi4gVGhpcyBpcyBzZXQgaW4gdGhlIHN0YXRpYyB0eXBlCiAgLy8vIHZpc2l0b3IuCiAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlOwoKICAvLy8gVGhlIHByb3BlcnR5IGdldCBmb3IgdGhlIHJpZ2h0IG9jY3VycmVuY2Ugb2YgYC5ydW50aW1lVHlwZWAgd2hlbiBba2luZF0KICAvLy8gaXMgYFJ1bnRpbWVUeXBlVXNlS2luZC5lcXVhbHNgLgogIGZpbmFsIGlyLlByb3BlcnR5R2V0IHJpZ2h0UnVudGltZVR5cGVFeHByZXNzaW9uOwoKICAvLy8gVGhlIGFyZ3VtZW50IGV4cHJlc3Npb24gaWYgW2tpbmRdIGlzIGBSdW50aW1lVHlwZVVzZUtpbmQuZXF1YWxzYC4KICBmaW5hbCBpci5FeHByZXNzaW9uIGFyZ3VtZW50OwoKICAvLy8gVGhlIHN0YXRpYyB0eXBlIG9mIHRoZSBhcmd1bWVudCBleHByZXNzaW9uLiBUaGlzIGlzIHNldCBpbiB0aGUgc3RhdGljIHR5cGUKICAvLy8gdmlzaXRvci4KICBpci5EYXJ0VHlwZSBhcmd1bWVudFR5cGU7CgogIFJ1bnRpbWVUeXBlVXNlRGF0YSh0aGlzLmtpbmQsIHRoaXMubGVmdFJ1bnRpbWVUeXBlRXhwcmVzc2lvbiwgdGhpcy5yZWNlaXZlciwKICAgICAgdGhpcy5yaWdodFJ1bnRpbWVUeXBlRXhwcmVzc2lvbiwgdGhpcy5hcmd1bWVudCk7CgogIGJvb2wgZ2V0IGlzQ29tcGxldGUgewogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgUnVudGltZVR5cGVVc2VLaW5kLnVua25vd246CiAgICAgIGNhc2UgUnVudGltZVR5cGVVc2VLaW5kLnN0cmluZzoKICAgICAgICByZXR1cm4gcmVjZWl2ZXJUeXBlICE9IG51bGw7CiAgICAgIGNhc2UgUnVudGltZVR5cGVVc2VLaW5kLmVxdWFsczoKICAgICAgICByZXR1cm4gcmVjZWl2ZXJUeXBlICE9IG51bGwgJiYgYXJndW1lbnRUeXBlICE9IG51bGw7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBSdW50aW1lVHlwZVVzZUtpbmQgJGtpbmQuIik7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gIlJ1bnRpbWVUeXBlVXNlRGF0YShraW5kPSRraW5kLCIKICAgICAgICAicmVjZWl2ZXJHZXQ9JGxlZnRSdW50aW1lVHlwZUV4cHJlc3Npb24scmVjZWl2ZXI9JHJlY2VpdmVyLCIKICAgICAgICAicmVjZWl2ZXJUeXBlPSRyZWNlaXZlclR5cGUsYXJndW1lbnRHZXQ9JHJpZ2h0UnVudGltZVR5cGVFeHByZXNzaW9uLCIKICAgICAgICAiYXJndW1lbnQ9JGFyZ3VtZW50LGFyZ3VtZW50VHlwZT0kYXJndW1lbnRUeXBlKSI7CiAgfQp9CgovLy8gQ29tcHV0ZXMgdGhlIFtSdW50aW1lVHlwZVVzZURhdGFdIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGBlLnJ1bnRpbWVUeXBlYAovLy8gW25vZGVdLgovLy8KLy8vIFtjYWNoZV0gaXMgdXNlZCB0byBlbnN1cmUgdGhhdCBvbmx5IG9uZSBbUnVudGltZVR5cGVVc2VEYXRhXSBvYmplY3QgaXMKLy8vIGNyZWF0ZWQgcGVyIGNhc2UsIGV2ZW4gZm9yIHRoZSBgPT1gIGNhc2UuClJ1bnRpbWVUeXBlVXNlRGF0YSBjb21wdXRlUnVudGltZVR5cGVVc2UoCiAgICBNYXA8aXIuUHJvcGVydHlHZXQsIFJ1bnRpbWVUeXBlVXNlRGF0YT4gY2FjaGUsIGlyLlByb3BlcnR5R2V0IG5vZGUpIHsKICBSdW50aW1lVHlwZVVzZURhdGEgcmVjZWl2ZXJEYXRhID0gY2FjaGVbbm9kZV07CiAgaWYgKHJlY2VpdmVyRGF0YSAhPSBudWxsKSByZXR1cm4gcmVjZWl2ZXJEYXRhOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW25vZGVdIGlzIG9mIHRoZSBmb3JtIGBlLnJ1bnRpbWVUeXBlYC4KICBib29sIGlzR2V0UnVudGltZVR5cGUoaXIuVHJlZU5vZGUgbm9kZSkgewogICAgcmV0dXJuIG5vZGUgaXMgaXIuUHJvcGVydHlHZXQgJiYgbm9kZS5uYW1lLm5hbWUgPT0gSWRlbnRpZmllcnMucnVudGltZVR5cGVfOwogIH0KCiAgLy8vIFJldHVybnMgW25vZGVdIGlmIFtub2RlXSBpcyBvZiB0aGUgZm9ybSBgZS5ydW50aW1lVHlwZWAgYW5kIGBudWxsYAogIC8vLyBvdGhlcndpc2UuCiAgaXIuUHJvcGVydHlHZXQgYXNHZXRSdW50aW1lVHlwZShpci5UcmVlTm9kZSBub2RlKSB7CiAgICByZXR1cm4gaXNHZXRSdW50aW1lVHlwZShub2RlKSA/IG5vZGUgOiBudWxsOwogIH0KCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtub2RlXSBpcyBvZiB0aGUgZm9ybSBgZS50b1N0cmluZygpYC4KICBib29sIGlzSW52b2tlVG9TdHJpbmcoaXIuVHJlZU5vZGUgbm9kZSkgewogICAgcmV0dXJuIG5vZGUgaXMgaXIuTWV0aG9kSW52b2NhdGlvbiAmJiBub2RlLm5hbWUubmFtZSA9PSAndG9TdHJpbmcnOwogIH0KCiAgYXNzZXJ0KGlzR2V0UnVudGltZVR5cGUobm9kZSkpOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTcGVjaWFsLWNhc2UgYHRoaXMucnVudGltZVR5cGVgLgogIGlyLlByb3BlcnR5R2V0IHJlY2VpdmVyR2V0OwogIGlyLkV4cHJlc3Npb24gcmVjZWl2ZXI7CiAgaXIuUHJvcGVydHlHZXQgYXJndW1lbnRHZXQ7CiAgaXIuRXhwcmVzc2lvbiBhcmd1bWVudDsKICBSdW50aW1lVHlwZVVzZUtpbmQga2luZDsKCiAgaWYgKG5vZGUucmVjZWl2ZXIgaXMgaXIuVmFyaWFibGVHZXQgJiYKICAgICAgbm9kZS5wYXJlbnQgaXMgaXIuQ29uZGl0aW9uYWxFeHByZXNzaW9uICYmCiAgICAgIG5vZGUucGFyZW50LnBhcmVudCBpcyBpci5MZXQpIHsKICAgIE51bGxBd2FyZUV4cHJlc3Npb24gbnVsbEF3YXJlID0gZ2V0TnVsbEF3YXJlRXhwcmVzc2lvbihub2RlLnBhcmVudC5wYXJlbnQpOwogICAgaWYgKG51bGxBd2FyZSAhPSBudWxsKSB7CiAgICAgIC8vIFRoZSBub2RlIGlzIG9mIHRoZSBmb3JtOgogICAgICAvLwogICAgICAvLyAgICAgbGV0ICN0MSA9IGUgaW4gI3QxID09IG51bGwgPyBudWxsIDogI3QxLnJ1bnRpbWVUeXBlCiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgoKICAgICAgaWYgKG51bGxBd2FyZS5wYXJlbnQgaXMgaXIuVmFyaWFibGVEZWNsYXJhdGlvbiAmJgogICAgICAgICAgbnVsbEF3YXJlLnBhcmVudC5wYXJlbnQgaXMgaXIuTGV0KSB7CiAgICAgICAgTnVsbEF3YXJlRXhwcmVzc2lvbiBvdXRlciA9CiAgICAgICAgICAgIGdldE51bGxBd2FyZUV4cHJlc3Npb24obnVsbEF3YXJlLnBhcmVudC5wYXJlbnQpOwogICAgICAgIGlmIChvdXRlciAhPSBudWxsICYmCiAgICAgICAgICAgIG91dGVyLnJlY2VpdmVyID09IG51bGxBd2FyZS5sZXQgJiYKICAgICAgICAgICAgaXNJbnZva2VUb1N0cmluZyhvdXRlci5leHByZXNzaW9uKSkgewogICAgICAgICAgLy8gRGV0ZWN0ZWQKICAgICAgICAgIC8vCiAgICAgICAgICAvLyAgICAgZT8ucnVudGltZVR5cGU/LnRvU3RyaW5nKCkKICAgICAgICAgIC8vICAgICAgICBeCiAgICAgICAgICAvLyBlbmNvZGVkIGFzCiAgICAgICAgICAvLwogICAgICAgICAgLy8gICAgIGxldCAjdDIgPSAobGV0ICN0MSA9IGUgaW4gI3QxID09IG51bGwgPyBudWxsIDogI3QxLnJ1bnRpbWVUeXBlKQogICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAgICAgICAgIC8vICAgICAgICBpbiAjdDIgPT0gbnVsbCA/IG51bGwgOiAjdDIudG9TdHJpbmcoKQogICAgICAgICAgLy8KICAgICAgICAgIGtpbmQgPSBSdW50aW1lVHlwZVVzZUtpbmQuc3RyaW5nOwogICAgICAgICAgcmVjZWl2ZXIgPSBudWxsQXdhcmUucmVjZWl2ZXI7CiAgICAgICAgICByZWNlaXZlckdldCA9IG5vZGU7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKG51bGxBd2FyZS5wYXJlbnQgaXMgaXIuTWV0aG9kSW52b2NhdGlvbikgewogICAgICAgIGlyLk1ldGhvZEludm9jYXRpb24gbWV0aG9kSW52b2NhdGlvbiA9IG51bGxBd2FyZS5wYXJlbnQ7CiAgICAgICAgaWYgKG1ldGhvZEludm9jYXRpb24ucmVjZWl2ZXIgPT0gbnVsbEF3YXJlLmxldCAmJgogICAgICAgICAgICBtZXRob2RJbnZvY2F0aW9uLm5hbWUubmFtZSA9PSAnPT0nKSB7CiAgICAgICAgICAvLyBEZXRlY3RlZAogICAgICAgICAgLy8KICAgICAgICAgIC8vICBlMD8ucnVudGltZVR5cGUgPT0gb3RoZXIKICAgICAgICAgIGlyLlByb3BlcnR5R2V0IG90aGVyR2V0UnVudGltZVR5cGUgPQogICAgICAgICAgICAgIGFzR2V0UnVudGltZVR5cGUobWV0aG9kSW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbC5maXJzdCk7CiAgICAgICAgICBpZiAob3RoZXJHZXRSdW50aW1lVHlwZSAhPSBudWxsKSB7CiAgICAgICAgICAgIC8vIERldGVjdGVkCiAgICAgICAgICAgIC8vCiAgICAgICAgICAgIC8vICAgICBlMD8ucnVudGltZVR5cGUgPT0gZTEucnVudGltZVR5cGUKICAgICAgICAgICAgLy8gICAgICAgICBeCiAgICAgICAgICAgIC8vIGVuY29kZWQgYXMKICAgICAgICAgICAgLy8KICAgICAgICAgICAgLy8gICAgIChsZXQgI3QxID0gZTAgaW4gI3QxID09IG51bGwgPyBudWxsIDogI3QxLnJ1bnRpbWVUeXBlKQogICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogICAgICAgICAgICAvLyAgICAgICAgLj09KGUxLnJ1bnRpbWVUeXBlKQogICAgICAgICAgICBraW5kID0gUnVudGltZVR5cGVVc2VLaW5kLmVxdWFsczsKICAgICAgICAgICAgcmVjZWl2ZXIgPSBudWxsQXdhcmUucmVjZWl2ZXI7CiAgICAgICAgICAgIHJlY2VpdmVyR2V0ID0gbm9kZTsKICAgICAgICAgICAgYXJndW1lbnQgPSBvdGhlckdldFJ1bnRpbWVUeXBlLnJlY2VpdmVyOwogICAgICAgICAgICBhcmd1bWVudEdldCA9IG1ldGhvZEludm9jYXRpb24uYXJndW1lbnRzLnBvc2l0aW9uYWwuZmlyc3Q7CiAgICAgICAgICB9CgogICAgICAgICAgTnVsbEF3YXJlRXhwcmVzc2lvbiBvdGhlck51bGxBd2FyZSA9IGdldE51bGxBd2FyZUV4cHJlc3Npb24oCiAgICAgICAgICAgICAgbWV0aG9kSW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbC5maXJzdCk7CiAgICAgICAgICBpZiAob3RoZXJOdWxsQXdhcmUgIT0gbnVsbCAmJgogICAgICAgICAgICAgIGlzR2V0UnVudGltZVR5cGUob3RoZXJOdWxsQXdhcmUuZXhwcmVzc2lvbikpIHsKICAgICAgICAgICAgLy8gRGV0ZWN0ZWQKICAgICAgICAgICAgLy8KICAgICAgICAgICAgLy8gICAgIGUwPy5ydW50aW1lVHlwZSA9PSBlMT8ucnVudGltZVR5cGUKICAgICAgICAgICAgLy8gICAgICAgICBeCiAgICAgICAgICAgIC8vIGVuY29kZWQgYXMKICAgICAgICAgICAgLy8KICAgICAgICAgICAgLy8gICAgIChsZXQgI3QxID0gZTAgaW4gI3QxID09IG51bGwgPyBudWxsIDogI3QxLnJ1bnRpbWVUeXBlKQogICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogICAgICAgICAgICAvLyAgICAgICAgIC49PShsZXQgI3QyID0gZTEgaW4gI3QyID09IG51bGwgPyBudWxsIDogI3QyLnJ1bnRpbWVUeXBlKQogICAgICAgICAgICAvLwogICAgICAgICAgICBraW5kID0gUnVudGltZVR5cGVVc2VLaW5kLmVxdWFsczsKICAgICAgICAgICAgcmVjZWl2ZXIgPSBudWxsQXdhcmUucmVjZWl2ZXI7CiAgICAgICAgICAgIHJlY2VpdmVyR2V0ID0gbm9kZTsKICAgICAgICAgICAgYXJndW1lbnQgPSBvdGhlck51bGxBd2FyZS5yZWNlaXZlcjsKICAgICAgICAgICAgYXJndW1lbnRHZXQgPSBvdGhlck51bGxBd2FyZS5leHByZXNzaW9uOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoaXNJbnZva2VUb1N0cmluZyhudWxsQXdhcmUucGFyZW50KSkgewogICAgICAgICAgLy8gRGV0ZWN0ZWQKICAgICAgICAgIC8vCiAgICAgICAgICAvLyAgICAgZT8ucnVudGltZVR5cGUudG9TdHJpbmcoKQogICAgICAgICAgLy8gICAgICAgIF4KICAgICAgICAgIC8vIGVuY29kZWQgYXMKICAgICAgICAgIC8vCiAgICAgICAgICAvLyAgICAgKGxldCAjdDEgPSBlIGluICN0MSA9PSBudWxsID8gbnVsbCA6ICN0MS5ydW50aW1lVHlwZSkKICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogICAgICAgICAgLy8gICAgICAgICAudG9TdHJpbmcoKQogICAgICAgICAgLy8KICAgICAgICAgIGtpbmQgPSBSdW50aW1lVHlwZVVzZUtpbmQuc3RyaW5nOwogICAgICAgICAgcmVjZWl2ZXIgPSBudWxsQXdhcmUucmVjZWl2ZXI7CiAgICAgICAgICByZWNlaXZlckdldCA9IG5vZGU7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKG51bGxBd2FyZS5wYXJlbnQgaXMgaXIuQXJndW1lbnRzICYmCiAgICAgICAgICBudWxsQXdhcmUucGFyZW50LnBhcmVudCBpcyBpci5NZXRob2RJbnZvY2F0aW9uKSB7CiAgICAgICAgaXIuTWV0aG9kSW52b2NhdGlvbiBtZXRob2RJbnZvY2F0aW9uID0gbnVsbEF3YXJlLnBhcmVudC5wYXJlbnQ7CiAgICAgICAgaWYgKG1ldGhvZEludm9jYXRpb24ubmFtZS5uYW1lID09ICc9PScgJiYKICAgICAgICAgICAgbWV0aG9kSW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbC5maXJzdCA9PSBudWxsQXdhcmUubGV0KSB7CiAgICAgICAgICAvLyBbbnVsbEF3YXJlXSBpcyB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mID09LgoKICAgICAgICAgIGlyLlByb3BlcnR5R2V0IG90aGVyR2V0UnVudGltZVR5cGUgPQogICAgICAgICAgICAgIGFzR2V0UnVudGltZVR5cGUobWV0aG9kSW52b2NhdGlvbi5yZWNlaXZlcik7CiAgICAgICAgICBOdWxsQXdhcmVFeHByZXNzaW9uIG90aGVyTnVsbEF3YXJlID0KICAgICAgICAgICAgICBnZXROdWxsQXdhcmVFeHByZXNzaW9uKG1ldGhvZEludm9jYXRpb24ucmVjZWl2ZXIpOwoKICAgICAgICAgIGlmIChvdGhlckdldFJ1bnRpbWVUeXBlICE9IG51bGwpIHsKICAgICAgICAgICAgLy8gRGV0ZWN0ZWQKICAgICAgICAgICAgLy8KICAgICAgICAgICAgLy8gICAgIGUwLnJ1bnRpbWVUeXBlID09IGUxPy5ydW50aW1lVHlwZQogICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAgICAgICAgICAgLy8gZW5jb2RlZCBhcwogICAgICAgICAgICAvLwogICAgICAgICAgICAvLyAgICAgZTAucnVudGltZVR5cGUuPT0oCiAgICAgICAgICAgIC8vICAgICAgICAgbGV0ICN0MSA9IGUxIGluICN0MSA9PSBudWxsID8gbnVsbCA6ICN0MS5ydW50aW1lVHlwZSkKICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAgICAgICAgICAga2luZCA9IFJ1bnRpbWVUeXBlVXNlS2luZC5lcXVhbHM7CiAgICAgICAgICAgIHJlY2VpdmVyID0gb3RoZXJHZXRSdW50aW1lVHlwZS5yZWNlaXZlcjsKICAgICAgICAgICAgcmVjZWl2ZXJHZXQgPSBvdGhlckdldFJ1bnRpbWVUeXBlOwogICAgICAgICAgICBhcmd1bWVudCA9IG51bGxBd2FyZS5yZWNlaXZlcjsKICAgICAgICAgICAgYXJndW1lbnRHZXQgPSBub2RlOwogICAgICAgICAgfQoKICAgICAgICAgIGlmIChvdGhlck51bGxBd2FyZSAhPSBudWxsICYmCiAgICAgICAgICAgICAgaXNHZXRSdW50aW1lVHlwZShvdGhlck51bGxBd2FyZS5leHByZXNzaW9uKSkgewogICAgICAgICAgICAvLyBEZXRlY3RlZAogICAgICAgICAgICAvLwogICAgICAgICAgICAvLyAgICAgZTA/LnJ1bnRpbWVUeXBlID09IGUxPy5ydW50aW1lVHlwZQogICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAgICAgICAgICAgIC8vIGVuY29kZWQgYXMKICAgICAgICAgICAgLy8KICAgICAgICAgICAgLy8gICAgIChsZXQgI3QxID0gZTAgaW4gI3QxID09IG51bGwgPyBudWxsIDogI3QxLnJ1bnRpbWVUeXBlKQogICAgICAgICAgICAvLyAgICAgICAgIC49PShsZXQgI3QyID0gZTEgaW4gI3QyID09IG51bGwgPyBudWxsIDogI3QyLnJ1bnRpbWVUeXBlKQogICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAgICAgICAgICAga2luZCA9IFJ1bnRpbWVUeXBlVXNlS2luZC5lcXVhbHM7CiAgICAgICAgICAgIHJlY2VpdmVyID0gb3RoZXJOdWxsQXdhcmUucmVjZWl2ZXI7CiAgICAgICAgICAgIHJlY2VpdmVyR2V0ID0gb3RoZXJOdWxsQXdhcmUuZXhwcmVzc2lvbjsKICAgICAgICAgICAgYXJndW1lbnQgPSBudWxsQXdhcmUucmVjZWl2ZXI7CiAgICAgICAgICAgIGFyZ3VtZW50R2V0ID0gbm9kZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAobnVsbEF3YXJlLnBhcmVudCBpcyBpci5TdHJpbmdDb25jYXRlbmF0aW9uKSB7CiAgICAgICAgLy8gRGV0ZWN0ZWQKICAgICAgICAvLwogICAgICAgIC8vICAgICAnJHtlPy5ydW50aW1lVHlwZX0nCiAgICAgICAgLy8gICAgICAgICAgIF4KICAgICAgICAvLyBlbmNvZGVkIGFzCiAgICAgICAgLy8KICAgICAgICAvLyAgICAgJyR7bGV0ICN0MSA9IGUgaW4gI3QxID09IG51bGwgPyBudWxsIDogI3QxLnJ1bnRpbWVUeXBlfScKICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAgICAgICBraW5kID0gUnVudGltZVR5cGVVc2VLaW5kLnN0cmluZzsKICAgICAgICByZWNlaXZlciA9IG51bGxBd2FyZS5yZWNlaXZlcjsKICAgICAgICByZWNlaXZlckdldCA9IG5vZGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gRGVmYXVsdCB0byB1bmtub3duCiAgICAgICAgLy8KICAgICAgICAvLyAgICAgZT8ucnVudGltZVR5cGUKICAgICAgICAvLyAgICAgICAgXgogICAgICAgIC8vIGVuY29kZWQgYXMKICAgICAgICAvLwogICAgICAgIC8vICAgICBsZXQgI3QxID0gZSBpbiAjdDEgPT0gbnVsbCA/IG51bGwgOiAjdDEucnVudGltZVR5cGUKICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogICAgICAgIGtpbmQgPSBSdW50aW1lVHlwZVVzZUtpbmQudW5rbm93bjsKICAgICAgICByZWNlaXZlciA9IG51bGxBd2FyZS5yZWNlaXZlcjsKICAgICAgICByZWNlaXZlckdldCA9IG5vZGU7CiAgICAgIH0KICAgIH0KICB9IGVsc2UgaWYgKG5vZGUucGFyZW50IGlzIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gJiYKICAgICAgbm9kZS5wYXJlbnQucGFyZW50IGlzIGlyLkxldCkgewogICAgTnVsbEF3YXJlRXhwcmVzc2lvbiBudWxsQXdhcmUgPSBnZXROdWxsQXdhcmVFeHByZXNzaW9uKG5vZGUucGFyZW50LnBhcmVudCk7CiAgICBpZiAobnVsbEF3YXJlICE9IG51bGwgJiYgaXNJbnZva2VUb1N0cmluZyhudWxsQXdhcmUuZXhwcmVzc2lvbikpIHsKICAgICAgLy8gRGV0ZWN0ZWQKICAgICAgLy8KICAgICAgLy8gICAgIGUucnVudGltZVR5cGU/LnRvU3RyaW5nKCkKICAgICAgLy8gICAgICAgXgogICAgICAvLyBlbmNvZGVkIGFzCiAgICAgIC8vCiAgICAgIC8vICAgICBsZXQgI3QxID0gZS5ydW50aW1lVHlwZSBpbiAjdDEgPT0gbnVsbCA/IG51bGwgOiAjdDEudG9TdHJpbmcoKQogICAgICAvLyAgICAgICAgICAgICAgICAgXgogICAgICBraW5kID0gUnVudGltZVR5cGVVc2VLaW5kLnN0cmluZzsKICAgICAgcmVjZWl2ZXIgPSBub2RlLnJlY2VpdmVyOwogICAgICByZWNlaXZlckdldCA9IG5vZGU7CiAgICB9CiAgfSBlbHNlIGlmIChub2RlLnBhcmVudCBpcyBpci5NZXRob2RJbnZvY2F0aW9uKSB7CiAgICBpci5NZXRob2RJbnZvY2F0aW9uIG1ldGhvZEludm9jYXRpb24gPSBub2RlLnBhcmVudDsKICAgIGlmIChtZXRob2RJbnZvY2F0aW9uLm5hbWUubmFtZSA9PSAnPT0nICYmCiAgICAgICAgbWV0aG9kSW52b2NhdGlvbi5yZWNlaXZlciA9PSBub2RlKSB7CiAgICAgIC8vIFtub2RlXSBpcyB0aGUgbGVmdCBoYW5kIHNpZGUgb2YgPT0uCgogICAgICBpci5Qcm9wZXJ0eUdldCBvdGhlckdldFJ1bnRpbWVUeXBlID0KICAgICAgICAgIGFzR2V0UnVudGltZVR5cGUobWV0aG9kSW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbC5maXJzdCk7CiAgICAgIE51bGxBd2FyZUV4cHJlc3Npb24gbnVsbEF3YXJlID0KICAgICAgICAgIGdldE51bGxBd2FyZUV4cHJlc3Npb24obWV0aG9kSW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbC5maXJzdCk7CiAgICAgIGlmIChvdGhlckdldFJ1bnRpbWVUeXBlICE9IG51bGwpIHsKICAgICAgICAvLyBEZXRlY3RlZAogICAgICAgIC8vCiAgICAgICAgLy8gICAgIGUwLnJ1bnRpbWVUeXBlID09IGUxLnJ1bnRpbWVUeXBlCiAgICAgICAgLy8gICAgICAgIF4KICAgICAgICAvLyBlbmNvZGVkIGFzCiAgICAgICAgLy8KICAgICAgICAvLyAgICAgZTAucnVudGltZVR5cGUuPT0oZTEucnVudGltZVR5cGUpCiAgICAgICAgLy8gICAgICAgIF4KICAgICAgICBraW5kID0gUnVudGltZVR5cGVVc2VLaW5kLmVxdWFsczsKICAgICAgICByZWNlaXZlciA9IG5vZGUucmVjZWl2ZXI7CiAgICAgICAgcmVjZWl2ZXJHZXQgPSBub2RlOwogICAgICAgIGFyZ3VtZW50ID0gb3RoZXJHZXRSdW50aW1lVHlwZS5yZWNlaXZlcjsKICAgICAgICBhcmd1bWVudEdldCA9IG90aGVyR2V0UnVudGltZVR5cGU7CiAgICAgIH0gZWxzZSBpZiAobnVsbEF3YXJlICE9IG51bGwgJiYgaXNHZXRSdW50aW1lVHlwZShudWxsQXdhcmUuZXhwcmVzc2lvbikpIHsKICAgICAgICAvLyBEZXRlY3RlZAogICAgICAgIC8vCiAgICAgICAgLy8gICAgIGUwLnJ1bnRpbWVUeXBlID09IGUxPy5ydW50aW1lVHlwZQogICAgICAgIC8vICAgICAgICBeCiAgICAgICAgLy8gZW5jb2RlZCBhcwogICAgICAgIC8vCiAgICAgICAgLy8gICAgIGUwLnJ1bnRpbWVUeXBlLj09KAogICAgICAgIC8vICAgICAgICBeCiAgICAgICAgLy8gICAgICAgICBsZXQgI3QxID0gZTEgaW4gI3QxID09IG51bGwgPyBudWxsIDogI3QxLnJ1bnRpbWVUeXBlKQogICAgICAgIGtpbmQgPSBSdW50aW1lVHlwZVVzZUtpbmQuZXF1YWxzOwogICAgICAgIHJlY2VpdmVyID0gbm9kZS5yZWNlaXZlcjsKICAgICAgICByZWNlaXZlckdldCA9IG5vZGU7CiAgICAgICAgYXJndW1lbnQgPSBudWxsQXdhcmUucmVjZWl2ZXI7CiAgICAgICAgYXJndW1lbnRHZXQgPSBudWxsQXdhcmUuZXhwcmVzc2lvbjsKICAgICAgfQogICAgfSBlbHNlIGlmIChpc0ludm9rZVRvU3RyaW5nKG5vZGUucGFyZW50KSkgewogICAgICAvLyBEZXRlY3RlZAogICAgICAvLwogICAgICAvLyAgICAgZS5ydW50aW1lVHlwZS50b1N0cmluZygpCiAgICAgIC8vICAgICAgIF4KICAgICAga2luZCA9IFJ1bnRpbWVUeXBlVXNlS2luZC5zdHJpbmc7CiAgICAgIHJlY2VpdmVyID0gbm9kZS5yZWNlaXZlcjsKICAgICAgcmVjZWl2ZXJHZXQgPSBub2RlOwogICAgfQogIH0gZWxzZSBpZiAobm9kZS5wYXJlbnQgaXMgaXIuQXJndW1lbnRzICYmCiAgICAgIG5vZGUucGFyZW50LnBhcmVudCBpcyBpci5NZXRob2RJbnZvY2F0aW9uKSB7CiAgICBpci5NZXRob2RJbnZvY2F0aW9uIG1ldGhvZEludm9jYXRpb24gPSBub2RlLnBhcmVudC5wYXJlbnQ7CiAgICBpZiAobWV0aG9kSW52b2NhdGlvbi5uYW1lLm5hbWUgPT0gJz09JyAmJgogICAgICAgIG1ldGhvZEludm9jYXRpb24uYXJndW1lbnRzLnBvc2l0aW9uYWwuZmlyc3QgPT0gbm9kZSkgewogICAgICAvLyBbbm9kZV0gaXMgdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiA9PS4KICAgICAgaXIuUHJvcGVydHlHZXQgb3RoZXJHZXRSdW50aW1lVHlwZSA9CiAgICAgICAgICBhc0dldFJ1bnRpbWVUeXBlKG1ldGhvZEludm9jYXRpb24ucmVjZWl2ZXIpOwogICAgICBOdWxsQXdhcmVFeHByZXNzaW9uIG51bGxBd2FyZSA9CiAgICAgICAgICBnZXROdWxsQXdhcmVFeHByZXNzaW9uKG1ldGhvZEludm9jYXRpb24ucmVjZWl2ZXIpOwoKICAgICAgaWYgKG90aGVyR2V0UnVudGltZVR5cGUgIT0gbnVsbCkgewogICAgICAgIC8vIERldGVjdGVkCiAgICAgICAgLy8KICAgICAgICAvLyAgICAgZTAucnVudGltZVR5cGUgPT0gZTEucnVudGltZVR5cGUKICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgXgogICAgICAgIC8vIGVuY29kZWQgYXMKICAgICAgICAvLwogICAgICAgIC8vICAgICBlMC5ydW50aW1lVHlwZS49PShlMS5ydW50aW1lVHlwZSkKICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgXgogICAgICAgIGtpbmQgPSBSdW50aW1lVHlwZVVzZUtpbmQuZXF1YWxzOwogICAgICAgIHJlY2VpdmVyID0gb3RoZXJHZXRSdW50aW1lVHlwZS5yZWNlaXZlcjsKICAgICAgICByZWNlaXZlckdldCA9IG90aGVyR2V0UnVudGltZVR5cGU7CiAgICAgICAgYXJndW1lbnQgPSBub2RlLnJlY2VpdmVyOwogICAgICAgIGFyZ3VtZW50R2V0ID0gbm9kZTsKICAgICAgfSBlbHNlIGlmIChudWxsQXdhcmUgIT0gbnVsbCAmJiBpc0dldFJ1bnRpbWVUeXBlKG51bGxBd2FyZS5leHByZXNzaW9uKSkgewogICAgICAgIC8vIERldGVjdGVkCiAgICAgICAgLy8KICAgICAgICAvLyAgICAgZTA/LnJ1bnRpbWVUeXBlID09IGUxLnJ1bnRpbWVUeXBlCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAgICAgICAgLy8gZW5jb2RlZCBhcwogICAgICAgIC8vCiAgICAgICAgLy8gICAgIChsZXQgI3QxID0gZTAgaW4gI3QxID09IG51bGwgPyBudWxsIDogI3QxLnJ1bnRpbWVUeXBlKQogICAgICAgIC8vICAgICAgICAgLj09KGUxLnJ1bnRpbWVUeXBlKQogICAgICAgIC8vICAgICAgICAgICAgICAgIF4KICAgICAgICBraW5kID0gUnVudGltZVR5cGVVc2VLaW5kLmVxdWFsczsKICAgICAgICByZWNlaXZlciA9IG51bGxBd2FyZS5yZWNlaXZlcjsKICAgICAgICByZWNlaXZlckdldCA9IG51bGxBd2FyZS5leHByZXNzaW9uOwogICAgICAgIGFyZ3VtZW50ID0gbm9kZS5yZWNlaXZlcjsKICAgICAgICBhcmd1bWVudEdldCA9IG5vZGU7CiAgICAgIH0KICAgIH0KICB9IGVsc2UgaWYgKG5vZGUucGFyZW50IGlzIGlyLlN0cmluZ0NvbmNhdGVuYXRpb24pIHsKICAgIC8vIERldGVjdGVkCiAgICAvLwogICAgLy8gICAgICcke2UucnVudGltZVR5cGV9JwogICAgLy8gICAgICAgICAgXgogICAga2luZCA9IFJ1bnRpbWVUeXBlVXNlS2luZC5zdHJpbmc7CiAgICByZWNlaXZlciA9IG5vZGUucmVjZWl2ZXI7CiAgICByZWNlaXZlckdldCA9IG5vZGU7CiAgfQoKICBpZiAoa2luZCA9PSBudWxsKSB7CiAgICAvLyBEZWZhdWx0IHRvIHVua25vd24KICAgIC8vCiAgICAvLyAgICAgZS5ydW50aW1lVHlwZQogICAgLy8gICAgICAgXgogICAga2luZCA9IFJ1bnRpbWVUeXBlVXNlS2luZC51bmtub3duOwogICAgcmVjZWl2ZXIgPSBub2RlLnJlY2VpdmVyOwogICAgcmVjZWl2ZXJHZXQgPSBub2RlOwogIH0KCiAgUnVudGltZVR5cGVVc2VEYXRhIGRhdGEgPSBuZXcgUnVudGltZVR5cGVVc2VEYXRhKAogICAgICBraW5kLCByZWNlaXZlckdldCwgcmVjZWl2ZXIsIGFyZ3VtZW50R2V0LCBhcmd1bWVudCk7CiAgY2FjaGVbcmVjZWl2ZXJHZXRdID0gZGF0YTsKICBpZiAoYXJndW1lbnRHZXQgIT0gbnVsbCkgewogICAgY2FjaGVbYXJndW1lbnRHZXRdID0gZGF0YTsKICB9CgogIGFzc2VydChyZWNlaXZlckdldCAhPSBudWxsLCAiTWlzc2luZyByZWNlaXZlckdldCBpbiAkZGF0YSBmb3IgJG5vZGUuIik7CiAgYXNzZXJ0KCEoYXJndW1lbnQgIT0gbnVsbCAmJiBhcmd1bWVudEdldCA9PSBudWxsKSwKICAgICAgIk1pc3NpbmcgYXJndW1lbnRHZXQgaW4gJGRhdGEgZm9yICRub2RlLiIpOwogIGFzc2VydCgKICAgICAgcmVjZWl2ZXJHZXQgIT0gYXJndW1lbnRHZXQsICJEdXBsaWNhdGUgcHJvcGVydHkgZ2V0IGluICRkYXRhIGZvciAkbm9kZS4iKTsKICByZXR1cm4gZGF0YTsKfQqBoQBOTjwBKAEfFAE7Gk05CwEyKAoBSiIKAgFFGhssIQFOMgEfIAFRDxwBTiYzAUggAVEPHAFPNwEYFCcmJSY9BkgEAQwWLEVOOgQCAUsMBEsuKkoxMQE/LFEEAUkRNjEEAT4sSAQBIgE7HhoeGhsBKTEmUB0iCUE3ATgvJD0dLzIWDSwWGA1RRjsNLCkeCjxBOjIWDScvTS0YDzUZGg9KPyouKyA1RwwBRzwoPRgPNhkaD0o/UQ8uKyAwNQw5Fg0rFhgNRzghDSwpHgo1PEgyTDcBLzsvQQEtGA81KxoPJk1CLjUvKyAMASg9GA82LBoPSlFGLjA1KyAMCj8UCyMXFgtIPConHA8eCx4UFgtDNSsnHAgGNiZQRxIJJxEUCUwbKCAaBjM4Li0tAStJJk8pFAswFBYLMRQqIhwxK1AUCzEUFgsiFEkqIhwnLAgwEgkmESggGgYsMz8uPy4rNyY9ASkUCzAmFgsxJioxKyIcUBQLMScWC0YnHConLCIcCAY2EAceEiYeGAQBFhoHGQ8nHhgEATQ7HR0fBAFKNTIKUQ8CATJwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9ydW50aW1lX3R5cGVfYW5hbHlzaXMuZGFydDdzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29sbGVjdGlvbi9saWIvY29sbGVjdGlvbi5kYXJ0gzovLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKZXhwb3J0ICJzcmMvYWxnb3JpdGhtcy5kYXJ0IjsKZXhwb3J0ICJzcmMvY2Fub25pY2FsaXplZF9tYXAuZGFydCI7CmV4cG9ydCAic3JjL2NvbWJpbmVkX3dyYXBwZXJzL2NvbWJpbmVkX2l0ZXJhYmxlLmRhcnQiOwpleHBvcnQgInNyYy9jb21iaW5lZF93cmFwcGVycy9jb21iaW5lZF9saXN0LmRhcnQiOwpleHBvcnQgInNyYy9jb21iaW5lZF93cmFwcGVycy9jb21iaW5lZF9tYXAuZGFydCI7CmV4cG9ydCAic3JjL2NvbXBhcmF0b3JzLmRhcnQiOwpleHBvcnQgInNyYy9lcXVhbGl0eS5kYXJ0IjsKZXhwb3J0ICJzcmMvZXF1YWxpdHlfbWFwLmRhcnQiOwpleHBvcnQgInNyYy9lcXVhbGl0eV9zZXQuZGFydCI7CmV4cG9ydCAic3JjL2Z1bmN0aW9ucy5kYXJ0IjsKZXhwb3J0ICJzcmMvaXRlcmFibGVfemlwLmRhcnQiOwpleHBvcnQgInNyYy9wcmlvcml0eV9xdWV1ZS5kYXJ0IjsKZXhwb3J0ICJzcmMvcXVldWVfbGlzdC5kYXJ0IjsKZXhwb3J0ICJzcmMvdW5pb25fc2V0LmRhcnQiOwpleHBvcnQgInNyYy91bmlvbl9zZXRfY29udHJvbGxlci5kYXJ0IjsKZXhwb3J0ICJzcmMvdW5tb2RpZmlhYmxlX3dyYXBwZXJzLmRhcnQiOwpleHBvcnQgInNyYy93cmFwcGVycy5kYXJ0IjsKFwBOTjwBHiU3MzIfHCAgHSAiHh0oKRwBInBhY2thZ2U6Y29sbGVjdGlvbi9jb2xsZWN0aW9uLmRhcnQ3c2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2RhcnQyanNfaW5mby9saWIvc3JjL3V0aWwuZGFydIytLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqc19pbmZvLnNyYy51dGlsOwoKaW1wb3J0ICdwYWNrYWdlOmRhcnQyanNfaW5mby9pbmZvLmRhcnQnOwoKaW1wb3J0ICdncmFwaC5kYXJ0JzsKCi8vLyBDb21wdXRlcyBhIGdyYXBoIG9mIGRlcGVuZGVuY2llcyBmcm9tIFtpbmZvXS4KR3JhcGg8SW5mbz4gZ3JhcGhGcm9tSW5mbyhBbGxJbmZvIGluZm8pIHsKICBwcmludCgnICBpbmZvOiBkZXBlbmRlbmN5IGdyYXBoIGluZm9ybWF0aW9uIGlzIHdvcmsgaW4gcHJvZ3Jlc3MgYW5kJwogICAgICAnIG1pZ2h0IGJlIGluY29tcGxldGUnKTsKICAvLyBOb3RlOiB3ZSBhcmUgY29tYmluaW5nIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gdGhhdCBpcyBjb21wdXRlZCBpbiB0d28gd2F5cwogIC8vIChmdW5jdGlvbkluZm8udXNlcyB2cyBhbGxJbmZvLmRlcGVuZGVuY2llcykuCiAgLy8gVE9ETyhzaWdtdW5kKTogZml4IGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIHRoZXNlIHR3byB3YXlzLCBzdGljayB3aXRoIG9uZQogIC8vIG9mIHRoZW0uCiAgLy8gVE9ETyhzaWdtdW5kKTogY3JlYXRlIGEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgSW5mb0dyYXBoLCBpbnN0ZWFkIG9mCiAgLy8gdXNpbmcgdGhlIEVkZ2VMaXN0R3JhcGguCiAgdmFyIGdyYXBoID0gbmV3IEVkZ2VMaXN0R3JhcGg8SW5mbz4oKTsKICBmb3IgKHZhciBmIGluIGluZm8uZnVuY3Rpb25zKSB7CiAgICBncmFwaC5hZGROb2RlKGYpOwogICAgZm9yICh2YXIgZyBpbiBmLnVzZXMpIHsKICAgICAgZ3JhcGguYWRkRWRnZShmLCBnLnRhcmdldCk7CiAgICB9CiAgICBpZiAoaW5mby5kZXBlbmRlbmNpZXNbZl0gIT0gbnVsbCkgewogICAgICBmb3IgKHZhciBnIGluIGluZm8uZGVwZW5kZW5jaWVzW2ZdKSB7CiAgICAgICAgZ3JhcGguYWRkRWRnZShmLCBnKTsKICAgICAgfQogICAgfQogIH0KCiAgZm9yICh2YXIgZiBpbiBpbmZvLmZpZWxkcykgewogICAgZ3JhcGguYWRkTm9kZShmKTsKICAgIGZvciAodmFyIGcgaW4gZi51c2VzKSB7CiAgICAgIGdyYXBoLmFkZEVkZ2UoZiwgZy50YXJnZXQpOwogICAgfQogICAgaWYgKGluZm8uZGVwZW5kZW5jaWVzW2ZdICE9IG51bGwpIHsKICAgICAgZm9yICh2YXIgZyBpbiBpbmZvLmRlcGVuZGVuY2llc1tmXSkgewogICAgICAgIGdyYXBoLmFkZEVkZ2UoZiwgZyk7CiAgICAgIH0KICAgIH0KICB9CgogIHJldHVybiBncmFwaDsKfQoKLy8vIFByb3ZpZGUgYSB1bmlxdWUgbG9uZyBuYW1lIGFzc29jaWF0ZWQgd2l0aCBbaW5mb10uCi8vIFRPRE8oc2lnbXVuZCk6IGd1YXJhbnRlZSB0aGF0IHRoZSBuYW1lIGlzIGFjdHVhbGx5IHVuaXF1ZS4KU3RyaW5nIGxvbmdOYW1lKEluZm8gaW5mbywge2Jvb2wgdXNlTGlicmFyeVVyaTogZmFsc2UsIGJvb2wgZm9ySWQ6IGZhbHNlfSkgewogIHZhciBpbmZvUGF0aCA9IFtdOwogIHdoaWxlIChpbmZvICE9IG51bGwpIHsKICAgIGluZm9QYXRoLmFkZChpbmZvKTsKICAgIGluZm8gPSBpbmZvLnBhcmVudDsKICB9CiAgdmFyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogIHZhciBmaXJzdCA9IHRydWU7CiAgZm9yICh2YXIgc2VnbWVudCBpbiBpbmZvUGF0aC5yZXZlcnNlZCkgewogICAgaWYgKCFmaXJzdCkgc2Iud3JpdGUoJy4nKTsKICAgIC8vIFRPRE8oc2lnbXVuZCk6IGVuc3VyZSB0aGF0IHRoZSBmaXJzdCBzZWdtZW50IGlzIGEgTGlicmFyeUluZm8uCiAgICAvLyBhc3NlcnQoIWZpcnN0IHx8IHNlZ21lbnQgaXMgTGlicmFyeUluZm8pOwogICAgLy8gKHRvZGF5IG1pZ2h0IG5vdCBiZSB0cnVlIGZvciBmb3IgY2xvc3VyZSBjbGFzc2VzKS4KICAgIGlmIChzZWdtZW50IGlzIExpYnJhcnlJbmZvKSB7CiAgICAgIC8vIFRPRE8oa2V2bW9vKTogUmVtb3ZlIHRoaXMgd2hlbiBkYXJ0MmpzIGNhbiBiZSBpbnZva2VkIHdpdGggYW4gYXBwLXJvb3QKICAgICAgLy8gY3VzdG9tIFVSSQogICAgICBpZiAodXNlTGlicmFyeVVyaSAmJiBmb3JJZCAmJiBzZWdtZW50LnVyaS5pc1NjaGVtZSgnZmlsZScpKSB7CiAgICAgICAgYXNzZXJ0KFVyaS5iYXNlLmlzU2NoZW1lKCdmaWxlJykpOwogICAgICAgIHZhciBjdXJyZW50QmFzZSA9IFVyaS5iYXNlLnBhdGg7CiAgICAgICAgdmFyIHNlZ21lbnRTdHJpbmcgPSBzZWdtZW50LnVyaS5wYXRoOwoKICAgICAgICAvLyBJZiBsb25nTmFtZSBpcyBiZWluZyBjYWxsZWQgdG8gY2FsY3VsYXRlIGFuIGVsZW1lbnQgSUQgKGZvcklkID0gdHJ1ZSkKICAgICAgICAvLyB0aGVuIHVzZSBhIHJlbGF0aXZlIHBhdGggZm9yIHRoZSBsb25nTmFtZSBjYWxjdWxhdGlvbgogICAgICAgIC8vIFRoaXMgYWxsb3dzIGEgbW9yZSBzdGFibGUgSUQgZm9yIGNhc2VzIHdoZW4gZmlsZXMgYXJlIGdlbmVyYXRlZCBpbnRvCiAgICAgICAgLy8gdGVtcCBkaXJlY3RvcmllcyDigJMgZS5nLiB3aXRoIHBrZzpidWlsZF93ZWJfY29tcGlsZXJzCiAgICAgICAgaWYgKHNlZ21lbnRTdHJpbmcuc3RhcnRzV2l0aChjdXJyZW50QmFzZSkpIHsKICAgICAgICAgIHNlZ21lbnRTdHJpbmcgPSBzZWdtZW50U3RyaW5nLnN1YnN0cmluZyhjdXJyZW50QmFzZS5sZW5ndGgpOwogICAgICAgIH0KCiAgICAgICAgc2Iud3JpdGUoc2VnbWVudFN0cmluZyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2Iud3JpdGUodXNlTGlicmFyeVVyaSA/IHNlZ21lbnQudXJpIDogc2VnbWVudC5uYW1lKTsKICAgICAgfQogICAgICBzYi53cml0ZSgnOjonKTsKICAgIH0gZWxzZSB7CiAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICAgIHNiLndyaXRlKHNlZ21lbnQubmFtZSk7CiAgICB9CiAgfQogIHJldHVybiBzYi50b1N0cmluZygpOwp9CgovLy8gUHJvZHVjZSBhIHN0cmluZyBjb250YWluaW5nIFt2YWx1ZV0gcGFkZGVkIHdpdGggd2hpdGUgc3BhY2UgdXAgdG8gW25dIGNoYXJzLgpwYWQodmFsdWUsIG4sIHtib29sIHJpZ2h0OiBmYWxzZX0pIHsKICB2YXIgcyA9ICckdmFsdWUnOwogIGlmIChzLmxlbmd0aCA+PSBuKSByZXR1cm4gczsKICB2YXIgcGFkID0gJyAnICogKG4gLSBzLmxlbmd0aCk7CiAgcmV0dXJuIHJpZ2h0ID8gJyRzJHBhZCcgOiAnJHBhZCRzJzsKfQplAE5OPAEfASkBFQEyKkcfUDJPDk4eKSIWHCIGKCwdCAYEAR8WHCIGKCwdCAYEARACATc+TRUZGBgEHxQrH0YxOiJQFEQrKS4BUUFQQDVHCgEhDz4IFg0VHgYEGAIBUSUUHyImAgEicGFja2FnZTpkYXJ0MmpzX2luZm8vc3JjL3V0aWwuZGFydD5zZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvZGFydDJqc19pbmZvL2xpYi9zcmMvYmluYXJ5L3NpbmsuZGFydKwpLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDpjb252ZXJ0JzsKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwoKLy8vIEludGVyZmFjZSBmb3Igc2VyaWFsaXphdGlvbi4KLy8gVE9ETyhzaWdtdW5kKTogc2hhcmUgdGhpcyB3aXRoIHBrZzpjb21waWxlci9zcmMvc2VyaWFsaXphdGlvbi8qCmFic3RyYWN0IGNsYXNzIERhdGFTaW5rIHsKICAvLy8gVGhlIGFtb3VudCBvZiBkYXRhIHdyaXR0ZW4gdG8gdGhpcyBkYXRhIHNpbmsuCiAgLy8vCiAgLy8vIFRoZSB1bml0cyBpcyBiYXNlZCBvbiB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZSBmb3IgdGhpcyBkYXRhIHNpbmsuCiAgaW50IGdldCBsZW5ndGg7CgogIC8vLyBGbHVzaGVzIGFueSBwZW5kaW5nIGRhdGEgYW5kIGNsb3NlcyB0aGlzIGRhdGEgc2luay4KICAvLy8KICAvLy8gVGhlIGRhdGEgc2luayBjYW4gbm8gbG9uZ2VyIGJlIHdyaXR0ZW4gdG8gYWZ0ZXIgY2xvc2luZy4KICB2b2lkIGNsb3NlKCk7CgogIC8vLyBXcml0ZXMgYSByZWZlcmVuY2UgdG8gW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4gSWYgW3ZhbHVlXSBoYXMgbm90IHlldAogIC8vLyBiZWVuIHNlcmlhbGl6ZWQsIFtmXSBpcyBjYWxsZWQgdG8gc2VyaWFsaXplIHRoZSB2YWx1ZSBpdHNlbGYuCiAgdm9pZCB3cml0ZUNhY2hlZDxFPihFIHZhbHVlLCB2b2lkIGYoRSB2YWx1ZSkpOwoKICAvLy8gV3JpdGVzIHRoZSBwb3RlbnRpYWxseSBgbnVsbGAgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4gSWYgW3ZhbHVlXSBpcwogIC8vLyBub24tbnVsbCBbZl0gaXMgY2FsbGVkIHRvIHdyaXRlIHRoZSBub24tbnVsbCB2YWx1ZSB0byB0aGUgZGF0YSBzaW5rLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkVmFsdWVPck51bGxdLgogIHZvaWQgd3JpdGVWYWx1ZU9yTnVsbDxFPihFIHZhbHVlLCB2b2lkIGYoRSB2YWx1ZSkpOwoKICAvLy8gV3JpdGVzIHRoZSBbdmFsdWVzXSB0byB0aGlzIGRhdGEgc2luayBjYWxsaW5nIFtmXSB0byB3cml0ZSBlYWNoIHZhbHVlIHRvCiAgLy8vIHRoZSBkYXRhIHNpbmsuIElmIFthbGxvd051bGxdIGlzIGB0cnVlYCwgW3ZhbHVlc10gaXMgYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRMaXN0XS4KICB2b2lkIHdyaXRlTGlzdDxFPihJdGVyYWJsZTxFPiB2YWx1ZXMsIHZvaWQgZihFIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIHRoZSBib29sZWFuIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZUJvb2woYm9vbCB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgdGhlIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZUludChpbnQgdmFsdWUpOwoKICAvLy8gV3JpdGVzIHRoZSBwb3RlbnRpYWxseSBgbnVsbGAgbm9uLW5lZ2F0aXZlIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRJbnRPck51bGxdLgogIHZvaWQgd3JpdGVJbnRPck51bGwoaW50IHZhbHVlKTsKCiAgLy8vIFdyaXRlcyB0aGUgc3RyaW5nIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZVN0cmluZyhTdHJpbmcgdmFsdWUpOwoKICAvLy8gV3JpdGVzIHRoZSBwb3RlbnRpYWxseSBgbnVsbGAgc3RyaW5nIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRTdHJpbmdPck51bGxdLgogIHZvaWQgd3JpdGVTdHJpbmdPck51bGwoU3RyaW5nIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyB0aGUgc3RyaW5nIFt2YWx1ZXNdIHRvIHRoaXMgZGF0YSBzaW5rLiBJZiBbYWxsb3dOdWxsXSBpcyBgdHJ1ZWAsCiAgLy8vIFt2YWx1ZXNdIGlzIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkU3RyaW5nc10uCiAgdm9pZCB3cml0ZVN0cmluZ3MoSXRlcmFibGU8U3RyaW5nPiB2YWx1ZXMsIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyB0aGUgW21hcF0gZnJvbSBzdHJpbmcgdG8gW1ZdIHZhbHVlcyB0byB0aGlzIGRhdGEgc2luaywgY2FsbGluZyBbZl0KICAvLy8gdG8gd3JpdGUgZWFjaCB2YWx1ZSB0byB0aGUgZGF0YSBzaW5rLiBJZiBbYWxsb3dOdWxsXSBpcyBgdHJ1ZWAsIFttYXBdIGlzCiAgLy8vIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkU3RyaW5nTWFwXS4KICB2b2lkIHdyaXRlU3RyaW5nTWFwPFY+KE1hcDxTdHJpbmcsIFY+IG1hcCwgdm9pZCBmKFYgdmFsdWUpLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgdGhlIGVudW0gdmFsdWUgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDaGFuZ2UgdGhlIHNpZ25hdHVyZSB0bwogIC8vIGB2b2lkIHdyaXRlRW51bTxFIGV4dGVuZHMgRW51bTxFPj4oRSB2YWx1ZSk7YCB3aGVuIGFuIGludGVyZmFjZSBmb3IgZW51bXMKICAvLyBpcyBhZGRlZCB0byB0aGUgbGFuZ3VhZ2UuCiAgdm9pZCB3cml0ZUVudW0oZHluYW1pYyB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgdGhlIFVSSSBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVVcmkoVXJpIHZhbHVlKTsKfQoKLy8vIE1peGluIHRoYXQgaW1wbGVtZW50cyBhbGwgY29udmVuaWVuY2UgbWV0aG9kcyBvZiBbRGF0YVNpbmtdLgphYnN0cmFjdCBjbGFzcyBEYXRhU2lua01peGluIGltcGxlbWVudHMgRGF0YVNpbmsgewogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVJbnRPck51bGwoaW50IHZhbHVlKSB7CiAgICB3cml0ZUJvb2wodmFsdWUgIT0gbnVsbCk7CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICB3cml0ZUludCh2YWx1ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlU3RyaW5nT3JOdWxsKFN0cmluZyB2YWx1ZSkgewogICAgd3JpdGVCb29sKHZhbHVlICE9IG51bGwpOwogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgd3JpdGVTdHJpbmcodmFsdWUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVN0cmluZ3MoSXRlcmFibGU8U3RyaW5nPiB2YWx1ZXMsIHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBpZiAodmFsdWVzID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGFsbG93TnVsbCk7CiAgICAgIHdyaXRlSW50KDApOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVJbnQodmFsdWVzLmxlbmd0aCk7CiAgICAgIGZvciAoU3RyaW5nIHZhbHVlIGluIHZhbHVlcykgewogICAgICAgIHdyaXRlU3RyaW5nKHZhbHVlKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVN0cmluZ01hcDxWPihNYXA8U3RyaW5nLCBWPiBtYXAsIHZvaWQgZihWIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmIChtYXAgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludChtYXAubGVuZ3RoKTsKICAgICAgbWFwLmZvckVhY2goKFN0cmluZyBrZXksIFYgdmFsdWUpIHsKICAgICAgICB3cml0ZVN0cmluZyhrZXkpOwogICAgICAgIGYodmFsdWUpOwogICAgICB9KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVMaXN0PEU+KEl0ZXJhYmxlPEU+IHZhbHVlcywgdm9pZCBmKEUgdmFsdWUpLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKHZhbHVlcyA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICB3cml0ZUludCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlSW50KHZhbHVlcy5sZW5ndGgpOwogICAgICB2YWx1ZXMuZm9yRWFjaChmKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVWYWx1ZU9yTnVsbDxFPihFIHZhbHVlLCB2b2lkIGYoRSB2YWx1ZSkpIHsKICAgIHdyaXRlQm9vbCh2YWx1ZSAhPSBudWxsKTsKICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIGYodmFsdWUpOwogICAgfQogIH0KfQoKLy8vIERhdGEgc2luayBoZWxwZXIgdGhhdCBjYW5vbmljYWxpemVzIFtFXSB2YWx1ZXMgdXNpbmcgaW5kaWNlcy4KY2xhc3MgSW5kZXhlZFNpbms8RT4gewogIGZpbmFsIHZvaWQgRnVuY3Rpb24oaW50KSBfd3JpdGVJbnQ7CiAgZmluYWwgTWFwPEUsIGludD4gX2NhY2hlID0ge307CgogIEluZGV4ZWRTaW5rKHRoaXMuX3dyaXRlSW50KTsKCiAgLy8vIFdyaXRlIGEgcmVmZXJlbmNlIHRvIFt2YWx1ZV0gdG8gdGhlIGRhdGEgc2luay4KICAvLy8KICAvLy8gSWYgW3ZhbHVlXSBoYXMgbm90IGJlZW4gY2Fub25pY2FsaXplZCB5ZXQsIFt3cml0ZVZhbHVlXSBpcyBjYWxsZWQgdG8KICAvLy8gc2VyaWFsaXplIHRoZSBbdmFsdWVdIGl0c2VsZi4KICB2b2lkIHdyaXRlKEUgdmFsdWUsIHZvaWQgd3JpdGVWYWx1ZShFIHZhbHVlKSkgewogICAgaW50IGluZGV4ID0gX2NhY2hlW3ZhbHVlXTsKICAgIGlmIChpbmRleCA9PSBudWxsKSB7CiAgICAgIGluZGV4ID0gX2NhY2hlLmxlbmd0aDsKICAgICAgX2NhY2hlW3ZhbHVlXSA9IGluZGV4OwogICAgICBfd3JpdGVJbnQoaW5kZXgpOwogICAgICB3cml0ZVZhbHVlKHZhbHVlKTsKICAgIH0gZWxzZSB7CiAgICAgIF93cml0ZUludChpbmRleCk7CiAgICB9CiAgfQp9CgovLy8gQmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBbRGF0YVNpbmtdIHVzaW5nIFtEYXRhU2lua01peGluXSB0byBpbXBsZW1lbnQKLy8vIGNvbnZlbmllbmNlIG1ldGhvZHMuCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0RGF0YVNpbmsgZXh0ZW5kcyBEYXRhU2lua01peGluIGltcGxlbWVudHMgRGF0YVNpbmsgewogIEluZGV4ZWRTaW5rPFN0cmluZz4gX3N0cmluZ0luZGV4OwogIEluZGV4ZWRTaW5rPFVyaT4gX3VyaUluZGV4OwogIE1hcDxUeXBlLCBJbmRleGVkU2luaz4gX2dlbmVyYWxDYWNoZXMgPSB7fTsKCiAgQWJzdHJhY3REYXRhU2luaygpIHsKICAgIF9zdHJpbmdJbmRleCA9IG5ldyBJbmRleGVkU2luazxTdHJpbmc+KF93cml0ZUludEludGVybmFsKTsKICAgIF91cmlJbmRleCA9IG5ldyBJbmRleGVkU2luazxVcmk+KF93cml0ZUludEludGVybmFsKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVDYWNoZWQ8RT4oRSB2YWx1ZSwgdm9pZCBmKEUgdmFsdWUpKSB7CiAgICBJbmRleGVkU2luayBzaW5rID0KICAgICAgICBfZ2VuZXJhbENhY2hlc1tFXSA/Pz0gbmV3IEluZGV4ZWRTaW5rPEU+KF93cml0ZUludEludGVybmFsKTsKICAgIHNpbmsud3JpdGUodmFsdWUsICh2KSA9PiBmKHYpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVFbnVtKGR5bmFtaWMgdmFsdWUpIHsKICAgIF93cml0ZUVudW1JbnRlcm5hbCh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlQm9vbChib29sIHZhbHVlKSB7CiAgICBhc3NlcnQodmFsdWUgIT0gbnVsbCk7CiAgICBfd3JpdGVJbnRJbnRlcm5hbCh2YWx1ZSA/IDEgOiAwKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVVcmkoVXJpIHZhbHVlKSB7CiAgICBhc3NlcnQodmFsdWUgIT0gbnVsbCk7CiAgICBfd3JpdGVVcmkodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVN0cmluZyhTdHJpbmcgdmFsdWUpIHsKICAgIGFzc2VydCh2YWx1ZSAhPSBudWxsKTsKICAgIF93cml0ZVN0cmluZyh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlSW50KGludCB2YWx1ZSkgewogICAgYXNzZXJ0KHZhbHVlICE9IG51bGwpOwogICAgYXNzZXJ0KHZhbHVlID49IDAgJiYgdmFsdWUgPj4gMzAgPT0gMCk7CiAgICBfd3JpdGVJbnRJbnRlcm5hbCh2YWx1ZSk7CiAgfQoKICB2b2lkIF93cml0ZVN0cmluZyhTdHJpbmcgdmFsdWUpIHsKICAgIF9zdHJpbmdJbmRleC53cml0ZSh2YWx1ZSwgX3dyaXRlU3RyaW5nSW50ZXJuYWwpOwogIH0KCiAgdm9pZCBfd3JpdGVVcmkoVXJpIHZhbHVlKSB7CiAgICBfdXJpSW5kZXgud3JpdGUodmFsdWUsIF93cml0ZVVyaUludGVybmFsKTsKICB9CgogIC8vLyBBY3R1YWwgc2VyaWFsaXphdGlvbiBvZiBhIFVSSSB2YWx1ZSwgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KICB2b2lkIF93cml0ZVVyaUludGVybmFsKFVyaSB2YWx1ZSk7CgogIC8vLyBBY3R1YWwgc2VyaWFsaXphdGlvbiBvZiBhIFN0cmluZyB2YWx1ZSwgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KICB2b2lkIF93cml0ZVN0cmluZ0ludGVybmFsKFN0cmluZyB2YWx1ZSk7CgogIC8vLyBBY3R1YWwgc2VyaWFsaXphdGlvbiBvZiBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlLCBpbXBsZW1lbnRlZCBieQogIC8vLyBzdWJjbGFzc2VzLgogIHZvaWQgX3dyaXRlSW50SW50ZXJuYWwoaW50IHZhbHVlKTsKCiAgLy8vIEFjdHVhbCBzZXJpYWxpemF0aW9uIG9mIGFuIGVudW0gdmFsdWUsIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuCiAgdm9pZCBfd3JpdGVFbnVtSW50ZXJuYWwoZHluYW1pYyB2YWx1ZSk7Cn0KCi8vLyBbRGF0YVNpbmtdIHRoYXQgd3JpdGVzIGRhdGEgYXMgYSBzZXF1ZW5jZSBvZiBieXRlcy4KLy8vCi8vLyBUaGlzIGRhdGEgc2luayB3b3JrcyB0b2dldGhlciB3aXRoIFtCaW5hcnlTb3VyY2VdLgpjbGFzcyBCaW5hcnlTaW5rIGV4dGVuZHMgQWJzdHJhY3REYXRhU2luayB7CiAgZmluYWwgU2luazxMaXN0PGludD4+IHNpbms7CiAgQnVmZmVyZWRTaW5rIF9idWZmZXJlZFNpbms7CiAgaW50IF9sZW5ndGggPSAwOwoKICBCaW5hcnlTaW5rKHRoaXMuc2luaykgOiBfYnVmZmVyZWRTaW5rID0gbmV3IEJ1ZmZlcmVkU2luayhzaW5rKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBfd3JpdGVVcmlJbnRlcm5hbChVcmkgdmFsdWUpIHsKICAgIF93cml0ZVN0cmluZyh2YWx1ZS50b1N0cmluZygpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX3dyaXRlU3RyaW5nSW50ZXJuYWwoU3RyaW5nIHZhbHVlKSB7CiAgICBMaXN0PGludD4gYnl0ZXMgPSB1dGY4LmVuY29kZSh2YWx1ZSk7CiAgICBfd3JpdGVJbnRJbnRlcm5hbChieXRlcy5sZW5ndGgpOwogICAgX2J1ZmZlcmVkU2luay5hZGRCeXRlcyhieXRlcyk7CiAgICBfbGVuZ3RoICs9IGJ5dGVzLmxlbmd0aDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX3dyaXRlSW50SW50ZXJuYWwoaW50IHZhbHVlKSB7CiAgICBhc3NlcnQodmFsdWUgPj0gMCAmJiB2YWx1ZSA+PiAzMCA9PSAwKTsKICAgIGlmICh2YWx1ZSA8IDB4ODApIHsKICAgICAgX2J1ZmZlcmVkU2luay5hZGRCeXRlKHZhbHVlKTsKICAgICAgX2xlbmd0aCArPSAxOwogICAgfSBlbHNlIGlmICh2YWx1ZSA8IDB4NDAwMCkgewogICAgICBfYnVmZmVyZWRTaW5rLmFkZEJ5dGUyKCh2YWx1ZSA+PiA4KSB8IDB4ODAsIHZhbHVlICYgMHhGRik7CiAgICAgIF9sZW5ndGggKz0gMjsKICAgIH0gZWxzZSB7CiAgICAgIF9idWZmZXJlZFNpbmsuYWRkQnl0ZTQoKHZhbHVlID4+IDI0KSB8IDB4QzAsICh2YWx1ZSA+PiAxNikgJiAweEZGLAogICAgICAgICAgKHZhbHVlID4+IDgpICYgMHhGRiwgdmFsdWUgJiAweEZGKTsKICAgICAgX2xlbmd0aCArPSA0OwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfd3JpdGVFbnVtSW50ZXJuYWwoZHluYW1pYyB2YWx1ZSkgewogICAgX3dyaXRlSW50SW50ZXJuYWwodmFsdWUuaW5kZXgpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9idWZmZXJlZFNpbmsuZmx1c2hBbmREZXN0cm95KCk7CiAgICBfYnVmZmVyZWRTaW5rID0gbnVsbDsKICAgIHNpbmsuY2xvc2UoKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byB0aGlzIGRhdGEgc2luay4KICBpbnQgZ2V0IGxlbmd0aCA9PiBfbGVuZ3RoOwp9CgovLy8gUHV0cyBhIGJ1ZmZlciBpbiBmcm9udCBvZiBhIFtTaW5rPExpc3Q8aW50Pj5dLgovLyBUT0RPKHNpZ211bmQpOiBzaGFyZSB3aXRoIHRoZSBpbXBsZW1lbnRhdGlvbiBpbgovLyBwYWNrYWdlOmtlcm5lbC9iaW5hcnkvYXN0X3RvX2JpbmFyeS5kYXJ0CmNsYXNzIEJ1ZmZlcmVkU2luayB7CiAgc3RhdGljIGNvbnN0IGludCBTSVpFID0gMTAwMDAwOwogIHN0YXRpYyBjb25zdCBpbnQgU0FGRV9TSVpFID0gU0laRSAtIDU7CiAgc3RhdGljIGNvbnN0IGludCBTTUFMTCA9IDEwMDAwOwogIGZpbmFsIFNpbms8TGlzdDxpbnQ+PiBfc2luazsKICBVaW50OExpc3QgX2J1ZmZlciA9IG5ldyBVaW50OExpc3QoU0laRSk7CiAgaW50IGxlbmd0aCA9IDA7CiAgaW50IGZsdXNoZWRMZW5ndGggPSAwOwoKICBGbG9hdDY0TGlzdCBfZG91YmxlQnVmZmVyID0gbmV3IEZsb2F0NjRMaXN0KDEpOwogIFVpbnQ4TGlzdCBfZG91YmxlQnVmZmVyVWludDg7CgogIGludCBnZXQgb2Zmc2V0ID0+IGxlbmd0aCArIGZsdXNoZWRMZW5ndGg7CgogIEJ1ZmZlcmVkU2luayh0aGlzLl9zaW5rKTsKCiAgdm9pZCBhZGREb3VibGUoZG91YmxlIGQpIHsKICAgIF9kb3VibGVCdWZmZXJVaW50OCA/Pz0gX2RvdWJsZUJ1ZmZlci5idWZmZXIuYXNVaW50OExpc3QoKTsKICAgIF9kb3VibGVCdWZmZXJbMF0gPSBkOwogICAgYWRkQnl0ZTQoX2RvdWJsZUJ1ZmZlclVpbnQ4WzBdLCBfZG91YmxlQnVmZmVyVWludDhbMV0sCiAgICAgICAgX2RvdWJsZUJ1ZmZlclVpbnQ4WzJdLCBfZG91YmxlQnVmZmVyVWludDhbM10pOwogICAgYWRkQnl0ZTQoX2RvdWJsZUJ1ZmZlclVpbnQ4WzRdLCBfZG91YmxlQnVmZmVyVWludDhbNV0sCiAgICAgICAgX2RvdWJsZUJ1ZmZlclVpbnQ4WzZdLCBfZG91YmxlQnVmZmVyVWludDhbN10pOwogIH0KCiAgdm9pZCBhZGRCeXRlKGludCBieXRlKSB7CiAgICBfYnVmZmVyW2xlbmd0aCsrXSA9IGJ5dGU7CiAgICBpZiAobGVuZ3RoID09IFNJWkUpIHsKICAgICAgX3NpbmsuYWRkKF9idWZmZXIpOwogICAgICBfYnVmZmVyID0gbmV3IFVpbnQ4TGlzdChTSVpFKTsKICAgICAgbGVuZ3RoID0gMDsKICAgICAgZmx1c2hlZExlbmd0aCArPSBTSVpFOwogICAgfQogIH0KCiAgdm9pZCBhZGRCeXRlMihpbnQgYnl0ZTEsIGludCBieXRlMikgewogICAgaWYgKGxlbmd0aCA8IFNBRkVfU0laRSkgewogICAgICBfYnVmZmVyW2xlbmd0aCsrXSA9IGJ5dGUxOwogICAgICBfYnVmZmVyW2xlbmd0aCsrXSA9IGJ5dGUyOwogICAgfSBlbHNlIHsKICAgICAgYWRkQnl0ZShieXRlMSk7CiAgICAgIGFkZEJ5dGUoYnl0ZTIpOwogICAgfQogIH0KCiAgdm9pZCBhZGRCeXRlNChpbnQgYnl0ZTEsIGludCBieXRlMiwgaW50IGJ5dGUzLCBpbnQgYnl0ZTQpIHsKICAgIGlmIChsZW5ndGggPCBTQUZFX1NJWkUpIHsKICAgICAgX2J1ZmZlcltsZW5ndGgrK10gPSBieXRlMTsKICAgICAgX2J1ZmZlcltsZW5ndGgrK10gPSBieXRlMjsKICAgICAgX2J1ZmZlcltsZW5ndGgrK10gPSBieXRlMzsKICAgICAgX2J1ZmZlcltsZW5ndGgrK10gPSBieXRlNDsKICAgIH0gZWxzZSB7CiAgICAgIGFkZEJ5dGUoYnl0ZTEpOwogICAgICBhZGRCeXRlKGJ5dGUyKTsKICAgICAgYWRkQnl0ZShieXRlMyk7CiAgICAgIGFkZEJ5dGUoYnl0ZTQpOwogICAgfQogIH0KCiAgdm9pZCBhZGRCeXRlcyhMaXN0PGludD4gYnl0ZXMpIHsKICAgIC8vIEF2b2lkIGNvcHlpbmcgYSBsYXJnZSBidWZmZXIgaW50byB0aGUgYW5vdGhlciBsYXJnZSBidWZmZXIuIEFsc28sIGlmCiAgICAvLyB0aGUgYnl0ZXMgYnVmZmVyIGlzIHRvbyBsYXJnZSB0byBmaXQgaW4gb3VyIG93biBidWZmZXIsIGp1c3QgZW1pdCBib3RoLgogICAgaWYgKGxlbmd0aCArIGJ5dGVzLmxlbmd0aCA8IFNJWkUgJiYKICAgICAgICAoYnl0ZXMubGVuZ3RoIDwgU01BTEwgfHwgbGVuZ3RoIDwgU01BTEwpKSB7CiAgICAgIF9idWZmZXIuc2V0UmFuZ2UobGVuZ3RoLCBsZW5ndGggKyBieXRlcy5sZW5ndGgsIGJ5dGVzKTsKICAgICAgbGVuZ3RoICs9IGJ5dGVzLmxlbmd0aDsKICAgIH0gZWxzZSBpZiAoYnl0ZXMubGVuZ3RoIDwgU01BTEwpIHsKICAgICAgLy8gRmx1c2ggYXMgbXVjaCBhcyB3ZSBjYW4gaW4gdGhlIGN1cnJlbnQgYnVmZmVyLgogICAgICBfYnVmZmVyLnNldFJhbmdlKGxlbmd0aCwgU0laRSwgYnl0ZXMpOwogICAgICBfc2luay5hZGQoX2J1ZmZlcik7CiAgICAgIC8vIENvcHkgb3ZlciB0aGUgcmVtYWluZGVyIGludG8gYSBuZXcgYnVmZmVyLiBJdCBpcyBndWFyYW50ZWVkIHRvIGZpdAogICAgICAvLyBiZWNhdXNlIHRoZSBpbnB1dCBieXRlIGFycmF5IGlzIHNtYWxsLgogICAgICBpbnQgYWxyZWFkeUVtaXR0ZWQgPSBTSVpFIC0gbGVuZ3RoOwogICAgICBpbnQgcmVtYWluZGVyID0gYnl0ZXMubGVuZ3RoIC0gYWxyZWFkeUVtaXR0ZWQ7CiAgICAgIF9idWZmZXIgPSBuZXcgVWludDhMaXN0KFNJWkUpOwogICAgICBfYnVmZmVyLnNldFJhbmdlKDAsIHJlbWFpbmRlciwgYnl0ZXMsIGFscmVhZHlFbWl0dGVkKTsKICAgICAgbGVuZ3RoID0gcmVtYWluZGVyOwogICAgICBmbHVzaGVkTGVuZ3RoICs9IFNJWkU7CiAgICB9IGVsc2UgewogICAgICBmbHVzaCgpOwogICAgICBfc2luay5hZGQoYnl0ZXMpOwogICAgICBmbHVzaGVkTGVuZ3RoICs9IGJ5dGVzLmxlbmd0aDsKICAgIH0KICB9CgogIHZvaWQgZmx1c2goKSB7CiAgICBfc2luay5hZGQoX2J1ZmZlci5zdWJsaXN0KDAsIGxlbmd0aCkpOwogICAgX2J1ZmZlciA9IG5ldyBVaW50OExpc3QoU0laRSk7CiAgICBmbHVzaGVkTGVuZ3RoICs9IGxlbmd0aDsKICAgIGxlbmd0aCA9IDA7CiAgfQoKICB2b2lkIGZsdXNoQW5kRGVzdHJveSgpIHsKICAgIF9zaW5rLmFkZChfYnVmZmVyLnN1Ymxpc3QoMCwgbGVuZ3RoKSk7CiAgfQp9CoGTAE5OPAEXGgEhQxo0Bk4SAToGPxABTkQxAU1LBjwkNgFPUQY8HTkgATQeAUEcAUwGPCIiATMiAUYGPCUoAU4oBjwgRwFQTxwGPCI+IAE3Mk8fIQEwHAIBQTMMIx4ZFwYEAQwpHhkaBgQBDEgaGRMNHyUcCAYEAQw+IRcZEw0cKhoSCgYEAQw5IRoZEw0fGQYEAQw3HhkQBgQCAUIXJiEBHwE1BkskMh8ZHR0YGQ0YBgQCAUkZTCQeLgEXPzkEAQwyF0UkBAEMIh8EAQwfGyYEAQwdGxYEAQwjGxkEAQwdGyweBAEkNQQBHi8EAUYlAUkrAUsSJQFIKgIBOAQ3LB4eEwFCAQwmJAQBDCwqJSMdBAEMJiwYJBQhQRQNSS4UBgQBDCskBAERJRoSBAE9HQIBMzMsFSIpIh8rEhkBMiABLAEcAR0/Gjs3OzcEARseGholEh0GBAEoHiEhDRYWBgQBPh4hISEhDRYWFhYGBAEjTE8oND4eJzgtGkwwKjUlPRodDQ8YJQYEARErIx0QBAEbKwQCASlwYWNrYWdlOmRhcnQyanNfaW5mby9zcmMvYmluYXJ5L3NpbmsuZGFydEBzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvZGFydDJqc19pbmZvL2xpYi9zcmMvYmluYXJ5L3NvdXJjZS5kYXJ0n3IvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwppbXBvcnQgJ2RhcnQ6Y29udmVydCc7CgovLy8gSW50ZXJmYWNlIGZvciBkZXNlcmlhbGl6YXRpb24uCi8vIFRPRE8oc2lnbXVuZCk6IHNoYXJlIHRoaXMgd2l0aCBwa2c6Y29tcGlsZXIvc3JjL3NlcmlhbGl6YXRpb24vKgphYnN0cmFjdCBjbGFzcyBEYXRhU291cmNlIHsKICAvLy8gUmVhZHMgYSByZWZlcmVuY2UgdG8gYW4gW0VdIHZhbHVlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4gSWYgdGhlIHZhbHVlIGhhcwogIC8vLyBub3QgeWV0IGJlZW4gZGVzZXJpYWxpemVkLCBbZl0gaXMgY2FsbGVkIHRvIGRlc2VyaWFsaXplIHRoZSB2YWx1ZSBpdHNlbGYuCiAgRSByZWFkQ2FjaGVkPEU+KEUgZigpKTsKCiAgLy8vIFJlYWRzIGEgcG90ZW50aWFsbHkgYG51bGxgIFtFXSB2YWx1ZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UsIGNhbGxpbmcgW2ZdIHRvCiAgLy8vIHJlYWQgdGhlIG5vbi1udWxsIHZhbHVlIGZyb20gdGhlIGRhdGEgc291cmNlLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVWYWx1ZU9yTnVsbF0uCiAgRSByZWFkVmFsdWVPck51bGw8RT4oRSBmKCkpOwoKICAvLy8gUmVhZHMgYSBsaXN0IG9mIFtFXSB2YWx1ZXMgZnJvbSB0aGlzIGRhdGEgc291cmNlLiBJZiBbZW1wdHlBc051bGxdIGlzCiAgLy8vIGB0cnVlYCwgYG51bGxgIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gZW1wdHkgbGlzdC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlTGlzdF0uCiAgTGlzdDxFPiByZWFkTGlzdDxFPihFIGYoKSwge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhIGJvb2xlYW4gdmFsdWUgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIGJvb2wgcmVhZEJvb2woKTsKCiAgLy8vIFJlYWRzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIGludCByZWFkSW50KCk7CgogIC8vLyBSZWFkcyBhIHBvdGVudGlhbGx5IGBudWxsYCBub24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSBmcm9tIHRoaXMgZGF0YQogIC8vLyBzb3VyY2UuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZUludE9yTnVsbF0uCiAgaW50IHJlYWRJbnRPck51bGwoKTsKCiAgLy8vIFJlYWRzIGEgc3RyaW5nIHZhbHVlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBTdHJpbmcgcmVhZFN0cmluZygpOwoKICAvLy8gUmVhZHMgYSBwb3RlbnRpYWxseSBgbnVsbGAgc3RyaW5nIHZhbHVlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlU3RyaW5nT3JOdWxsXS4KICBTdHJpbmcgcmVhZFN0cmluZ09yTnVsbCgpOwoKICAvLy8gUmVhZHMgYSBsaXN0IG9mIHN0cmluZyB2YWx1ZXMgZnJvbSB0aGlzIGRhdGEgc291cmNlLiBJZiBbZW1wdHlBc051bGxdIGlzCiAgLy8vIGB0cnVlYCwgYG51bGxgIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gZW1wdHkgbGlzdC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlU3RyaW5nc10uCiAgTGlzdDxTdHJpbmc+IHJlYWRTdHJpbmdzKHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYSBtYXAgZnJvbSBzdHJpbmcgdmFsdWVzIHRvIFtWXSB2YWx1ZXMgZnJvbSB0aGlzIGRhdGEgc291cmNlLAogIC8vLyBjYWxsaW5nIFtmXSB0byByZWFkIGVhY2ggdmFsdWUgZnJvbSB0aGUgZGF0YSBzb3VyY2UuIElmIFtlbXB0eUFzTnVsbF0gaXMKICAvLy8gYHRydWVgLCBgbnVsbGAgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBlbXB0eSBtYXAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZVN0cmluZ01hcF0uCiAgTWFwPFN0cmluZywgVj4gcmVhZFN0cmluZ01hcDxWPihWIGYoKSwge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhbiBlbnVtIHZhbHVlIGZyb20gdGhlIGxpc3Qgb2YgZW51bSBbdmFsdWVzXSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgLy8vCiAgLy8vIFRoZSBbdmFsdWVzXSBhcmd1bWVudCBpcyBpbnRlbmRlZCB0byBiZSB0aGUgc3RhdGljIGAudmFsdWVzYCBmaWVsZCBvbgogIC8vLyBlbnVtIGNsYXNzZXMsIGZvciBpbnN0YW5jZToKICAvLy8KICAvLy8gICAgZW51bSBGb28geyBiYXIsIGJheiB9CiAgLy8vICAgIC4uLgogIC8vLyAgICBGb28gZm9vID0gc291cmNlLnJlYWRFbnVtKEZvby52YWx1ZXMpOwogIC8vLwogIEUgcmVhZEVudW08RT4oTGlzdDxFPiB2YWx1ZXMpOwoKICAvLy8gUmVhZHMgYSBVUkkgdmFsdWUgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIFVyaSByZWFkVXJpKCk7Cn0KCi8vLyBNaXhpbiB0aGF0IGltcGxlbWVudHMgYWxsIGNvbnZlbmllbmNlIG1ldGhvZHMgb2YgW0RhdGFTb3VyY2VdLgphYnN0cmFjdCBjbGFzcyBEYXRhU291cmNlTWl4aW4gaW1wbGVtZW50cyBEYXRhU291cmNlIHsKICBAb3ZlcnJpZGUKICBFIHJlYWRWYWx1ZU9yTnVsbDxFPihFIGYoKSkgewogICAgYm9vbCBoYXNWYWx1ZSA9IHJlYWRCb29sKCk7CiAgICBpZiAoaGFzVmFsdWUpIHsKICAgICAgcmV0dXJuIGYoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxFPiByZWFkTGlzdDxFPihFIGYoKSwge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSkgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgaWYgKGNvdW50ID09IDAgJiYgZW1wdHlBc051bGwpIHJldHVybiBudWxsOwogICAgTGlzdDxFPiBsaXN0ID0gbmV3IExpc3Q8RT4oY291bnQpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIGxpc3RbaV0gPSBmKCk7CiAgICB9CiAgICByZXR1cm4gbGlzdDsKICB9CgogIEBvdmVycmlkZQogIGludCByZWFkSW50T3JOdWxsKCkgewogICAgYm9vbCBoYXNWYWx1ZSA9IHJlYWRCb29sKCk7CiAgICBpZiAoaGFzVmFsdWUpIHsKICAgICAgcmV0dXJuIHJlYWRJbnQoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHJlYWRTdHJpbmdPck51bGwoKSB7CiAgICBib29sIGhhc1ZhbHVlID0gcmVhZEJvb2woKTsKICAgIGlmIChoYXNWYWx1ZSkgewogICAgICByZXR1cm4gcmVhZFN0cmluZygpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PFN0cmluZz4gcmVhZFN0cmluZ3Moe2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSkgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgaWYgKGNvdW50ID09IDAgJiYgZW1wdHlBc051bGwpIHJldHVybiBudWxsOwogICAgTGlzdDxTdHJpbmc+IGxpc3QgPSBuZXcgTGlzdDxTdHJpbmc+KGNvdW50KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICBsaXN0W2ldID0gcmVhZFN0cmluZygpOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBNYXA8U3RyaW5nLCBWPiByZWFkU3RyaW5nTWFwPFY+KFYgZigpLCB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBNYXA8U3RyaW5nLCBWPiBtYXAgPSB7fTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICBTdHJpbmcga2V5ID0gcmVhZFN0cmluZygpOwogICAgICBWIHZhbHVlID0gZigpOwogICAgICBtYXBba2V5XSA9IHZhbHVlOwogICAgfQogICAgcmV0dXJuIG1hcDsKICB9Cn0KCi8vLyBEYXRhIHNvdXJjZSBoZWxwZXIgcmVhZHMgY2Fub25pY2FsaXplZCBbRV0gdmFsdWVzIHRocm91Z2ggaW5kaWNlcy4KY2xhc3MgSW5kZXhlZFNvdXJjZTxFPiB7CiAgZmluYWwgaW50IEZ1bmN0aW9uKCkgX3JlYWRJbnQ7CiAgZmluYWwgTGlzdDxFPiBfY2FjaGUgPSBbXTsKICBmaW5hbCBTZXQ8aW50PiBfcGVuZGluZyA9IG5ldyBTZXQoKTsKCiAgSW5kZXhlZFNvdXJjZSh0aGlzLl9yZWFkSW50KTsKCiAgLy8vIFJlYWRzIGEgcmVmZXJlbmNlIHRvIGFuIFtFXSB2YWx1ZSBmcm9tIHRoZSBkYXRhIHNvdXJjZS4KICAvLy8KICAvLy8gSWYgdGhlIHZhbHVlIGhhc24ndCB5ZXQgYmVlbiByZWFkLCBbcmVhZFZhbHVlXSBpcyBjYWxsZWQgdG8gZGVzZXJpYWxpemUKICAvLy8gdGhlIHZhbHVlIGl0c2VsZi4KICBFIHJlYWQoRSByZWFkVmFsdWUoKSkgewogICAgaW50IGluZGV4ID0gX3JlYWRJbnQoKTsKICAgIGlmIChfcGVuZGluZy5jb250YWlucyhpbmRleCkpIHRocm93ICJzZXJpYWxpemF0aW9uIGN5Y2xlcyBub3Qgc3VwcG9ydGVkIjsKICAgIGlmIChpbmRleCA+PSBfY2FjaGUubGVuZ3RoKSB7CiAgICAgIF9wZW5kaW5nLmFkZChpbmRleCk7CiAgICAgIF9jYWNoZS5hZGQobnVsbCk7CiAgICAgIEUgdmFsdWUgPSByZWFkVmFsdWUoKTsKICAgICAgX3BlbmRpbmcucmVtb3ZlKGluZGV4KTsKICAgICAgX2NhY2hlW2luZGV4XSA9IHZhbHVlOwogICAgICByZXR1cm4gdmFsdWU7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX2NhY2hlW2luZGV4XTsKICAgIH0KICB9Cn0KCi8vLyBCYXNlIGltcGxlbWVudGF0aW9uIG9mIFtEYXRhU291cmNlXSB1c2luZyBbRGF0YVNvdXJjZU1peGluXSB0byBpbXBsZW1lbnQKLy8vIGNvbnZlbmllbmNlIG1ldGhvZHMuCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0RGF0YVNvdXJjZSBleHRlbmRzIERhdGFTb3VyY2VNaXhpbgogICAgaW1wbGVtZW50cyBEYXRhU291cmNlIHsKICBJbmRleGVkU291cmNlPFN0cmluZz4gX3N0cmluZ0luZGV4OwogIEluZGV4ZWRTb3VyY2U8VXJpPiBfdXJpSW5kZXg7CiAgTWFwPFR5cGUsIEluZGV4ZWRTb3VyY2U+IF9nZW5lcmFsQ2FjaGVzID0ge307CgogIEFic3RyYWN0RGF0YVNvdXJjZSgpIHsKICAgIF9zdHJpbmdJbmRleCA9IG5ldyBJbmRleGVkU291cmNlPFN0cmluZz4oX3JlYWRJbnRJbnRlcm5hbCk7CiAgICBfdXJpSW5kZXggPSBuZXcgSW5kZXhlZFNvdXJjZTxVcmk+KF9yZWFkSW50SW50ZXJuYWwpOwogIH0KCiAgQG92ZXJyaWRlCiAgRSByZWFkQ2FjaGVkPEU+KEUgZigpKSB7CiAgICBJbmRleGVkU291cmNlIHNvdXJjZSA9CiAgICAgICAgX2dlbmVyYWxDYWNoZXNbRV0gPz89IG5ldyBJbmRleGVkU291cmNlPEU+KF9yZWFkSW50SW50ZXJuYWwpOwogICAgcmV0dXJuIHNvdXJjZS5yZWFkKGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgRSByZWFkRW51bTxFPihMaXN0PEU+IHZhbHVlcykgewogICAgcmV0dXJuIF9yZWFkRW51bUludGVybmFsKHZhbHVlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBVcmkgcmVhZFVyaSgpIHsKICAgIHJldHVybiBfcmVhZFVyaSgpOwogIH0KCiAgVXJpIF9yZWFkVXJpKCkgewogICAgcmV0dXJuIF91cmlJbmRleC5yZWFkKF9yZWFkVXJpSW50ZXJuYWwpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCByZWFkQm9vbCgpIHsKICAgIGludCB2YWx1ZSA9IF9yZWFkSW50SW50ZXJuYWwoKTsKICAgIGFzc2VydCh2YWx1ZSA9PSAwIHx8IHZhbHVlID09IDEpOwogICAgcmV0dXJuIHZhbHVlID09IDE7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgcmVhZFN0cmluZygpIHsKICAgIHJldHVybiBfcmVhZFN0cmluZygpOwogIH0KCiAgU3RyaW5nIF9yZWFkU3RyaW5nKCkgewogICAgcmV0dXJuIF9zdHJpbmdJbmRleC5yZWFkKF9yZWFkU3RyaW5nSW50ZXJuYWwpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHJlYWRJbnQoKSB7CiAgICByZXR1cm4gX3JlYWRJbnRJbnRlcm5hbCgpOwogIH0KCiAgLy8vIEFjdHVhbCBkZXNlcmlhbGl6YXRpb24gb2YgYSBzdHJpbmcgdmFsdWUsIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuCiAgU3RyaW5nIF9yZWFkU3RyaW5nSW50ZXJuYWwoKTsKCiAgLy8vIEFjdHVhbCBkZXNlcmlhbGl6YXRpb24gb2YgYSBub24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSwgaW1wbGVtZW50ZWQgYnkKICAvLy8gc3ViY2xhc3Nlcy4KICBpbnQgX3JlYWRJbnRJbnRlcm5hbCgpOwoKICAvLy8gQWN0dWFsIGRlc2VyaWFsaXphdGlvbiBvZiBhIFVSSSB2YWx1ZSwgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KICBVcmkgX3JlYWRVcmlJbnRlcm5hbCgpOwoKICAvLy8gQWN0dWFsIGRlc2VyaWFsaXphdGlvbiBvZiBhbiBlbnVtIHZhbHVlIGluIFt2YWx1ZXNdLCBpbXBsZW1lbnRlZCBieQogIC8vLyBzdWJjbGFzc2VzLgogIEUgX3JlYWRFbnVtSW50ZXJuYWw8RT4oTGlzdDxFPiB2YWx1ZXMpOwp9CgovLy8gW0RhdGFTb3VyY2VdIHRoYXQgcmVhZHMgZGF0YSBmcm9tIGEgc2VxdWVuY2Ugb2YgYnl0ZXMuCi8vLwovLy8gVGhpcyBkYXRhIHNvdXJjZSB3b3JrcyB0b2dldGhlciB3aXRoIFtCaW5hcnlTaW5rXS4KY2xhc3MgQmluYXJ5U291cmNlIGV4dGVuZHMgQWJzdHJhY3REYXRhU291cmNlIHsKICBpbnQgX2J5dGVPZmZzZXQgPSAwOwogIGZpbmFsIExpc3Q8aW50PiBfYnl0ZXM7CgogIEJpbmFyeVNvdXJjZSh0aGlzLl9ieXRlcyk7CiAgaW50IF9yZWFkQnl0ZSgpID0+IF9ieXRlc1tfYnl0ZU9mZnNldCsrXTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIF9yZWFkU3RyaW5nSW50ZXJuYWwoKSB7CiAgICBpbnQgbGVuZ3RoID0gX3JlYWRJbnRJbnRlcm5hbCgpOwogICAgTGlzdDxpbnQ+IGJ5dGVzID0gbmV3IFVpbnQ4TGlzdChsZW5ndGgpOwogICAgYnl0ZXMuc2V0UmFuZ2UoMCwgYnl0ZXMubGVuZ3RoLCBfYnl0ZXMsIF9ieXRlT2Zmc2V0KTsKICAgIF9ieXRlT2Zmc2V0ICs9IGJ5dGVzLmxlbmd0aDsKICAgIHJldHVybiB1dGY4LmRlY29kZShieXRlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgX3JlYWRJbnRJbnRlcm5hbCgpIHsKICAgIHZhciBieXRlID0gX3JlYWRCeXRlKCk7CiAgICBpZiAoYnl0ZSAmIDB4ODAgPT0gMCkgewogICAgICAvLyAweHh4eHh4eAogICAgICByZXR1cm4gYnl0ZTsKICAgIH0gZWxzZSBpZiAoYnl0ZSAmIDB4NDAgPT0gMCkgewogICAgICAvLyAxMHh4eHh4eAogICAgICByZXR1cm4gKChieXRlICYgMHgzRikgPDwgOCkgfCBfcmVhZEJ5dGUoKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIDExeHh4eHh4CiAgICAgIHJldHVybiAoKGJ5dGUgJiAweDNGKSA8PCAyNCkgfAogICAgICAgICAgKF9yZWFkQnl0ZSgpIDw8IDE2KSB8CiAgICAgICAgICAoX3JlYWRCeXRlKCkgPDwgOCkgfAogICAgICAgICAgX3JlYWRCeXRlKCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBVcmkgX3JlYWRVcmlJbnRlcm5hbCgpIHsKICAgIFN0cmluZyB0ZXh0ID0gX3JlYWRTdHJpbmcoKTsKICAgIHJldHVybiBVcmkucGFyc2UodGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICBFIF9yZWFkRW51bUludGVybmFsPEU+KExpc3Q8RT4gdmFsdWVzKSB7CiAgICBpbnQgaW5kZXggPSBfcmVhZEludEludGVybmFsKCk7CiAgICBhc3NlcnQoCiAgICAgICAgMCA8PSBpbmRleCAmJiBpbmRleCA8IHZhbHVlcy5sZW5ndGgsCiAgICAgICAgIkludmFsaWQgZGF0YSBraW5kIGluZGV4LiAiCiAgICAgICAgIkV4cGVjdGVkIG9uZSBvZiAkdmFsdWVzLCBmb3VuZCBpbmRleCAkaW5kZXguIik7CiAgICByZXR1cm4gdmFsdWVzW2luZGV4XTsKICB9Cn0KgSoATk48ARoXASNDHFBQGgFRNAY8Ix8BTDsGPBw5ATMTAUARAUsOBjwhFwEyFwFFBjwkHQFPOwY8HzcBSk86BjwhRQFQBkwiBh8NMAYhAS8RAgFDNwwgIBQSBhEEAQw6GzAnJhUGEQQBDBggFBgGEQQBDB4gFBsGEQQBDDgbMDEmHgYRBAEMRhswHSYhFRgGEAQCAUcZIR0nASABPgZOGBocTiIbGB0eHRQNHAYEAgFNGTocJiAwARlAOgQBDBsbRhsEAQwiJgQBDBIXBAETLQQBDBQkJhcEAQwYGgQBGTMEAQwSHwQBSyABTRIaAUgaAUoSKgIBOwQ3MBcaAR0sAQwhJS06IR8EAQwbHBwSEyMSMQ0SJSAfFwYEAQwbIRwEAQwrJAwtJDkaBAIBK3BhY2thZ2U6ZGFydDJqc19pbmZvL3NyYy9iaW5hcnkvc291cmNlLmRhcnQzc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaXIvc2NvcGVfdmlzaXRvci5kYXJ0wACeWS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9jb25zdGFudF9ldmFsdWF0b3IuZGFydCcgYXMgaXI7CgppbXBvcnQgJ2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnc2NvcGUuZGFydCc7CgovLy8gVGhpcyBidWlsZGVyIHdhbGtzIHRoZSBjb2RlIHRvIGRldGVybWluZSB3aGF0IHZhcmlhYmxlcyBhcmUKLy8vIGFzc2lnbmVkL2NhcHR1cmVkL2ZyZWUgYXQgdmFyaW91cyBwb2ludHMgdG8gYnVpbGQgYSBbQ2xvc3VyZVNjb3BlTW9kZWxdIGFuZAovLy8gYSBbVmFyaWFibGVTY29wZU1vZGVsXSB0aGF0IGNhbiByZXNwb25kIHRvIHF1ZXJpZXMgYWJvdXQgaG93IGEgcGFydGljdWxhcgovLy8gdmFyaWFibGUgaXMgYmVpbmcgdXNlZCBhdCBhbnkgcG9pbnQgaW4gdGhlIGNvZGUuCmNsYXNzIFNjb3BlTW9kZWxCdWlsZGVyIGV4dGVuZHMgaXIuVmlzaXRvcjxJbml0aWFsaXplckNvbXBsZXhpdHk+CiAgICB3aXRoIFZhcmlhYmxlQ29sbGVjdG9yTWl4aW4gewogIGZpbmFsIGlyLkNvbnN0YW50RXZhbHVhdG9yIF9jb25zdGFudEV2YWx1YXRvcjsKCiAgZmluYWwgQ2xvc3VyZVNjb3BlTW9kZWwgX21vZGVsID0gbmV3IENsb3N1cmVTY29wZU1vZGVsKCk7CgogIC8vLyBBIG1hcCBvZiBlYWNoIHZpc2l0ZWQgY2FsbCBub2RlIHdpdGggdGhlIGFzc29jaWF0ZWQgaW5mb3JtYXRpb24gYWJvdXQgd2hhdAogIC8vLyB2YXJpYWJsZXMgYXJlIGNhcHR1cmVkL3VzZWQuIEVhY2ggaXIuTm9kZSBrZXkgY29ycmVzcG9uZHMgdG8gYSBzY29wZSB0aGF0CiAgLy8vIHdhcyBlbmNvdW50ZXJlZCB3aGlsZSB2aXNpdGluZyBhIGNsb3N1cmUgKGluaXRpYWxseSBjYWxsZWQgdGhyb3VnaAogIC8vLyBbdHJhbnNsYXRlTGF6eUluaXRpYWxpemVyXSBvciBbdHJhbnNsYXRlQ29uc3RydWN0b3JPclByb2NlZHVyZV0pLgogIE1hcDxpci5Ob2RlLCBLZXJuZWxDYXB0dXJlZFNjb3BlPiBnZXQgX3Njb3Blc0NhcHR1cmVkSW5DbG9zdXJlTWFwID0+CiAgICAgIF9tb2RlbC5jYXB0dXJlZFNjb3Blc01hcDsKCiAgLy8vIEEgbWFwIG9mIHRoZSBub2RlcyB0aGF0IHdlIGhhdmUgZmxhZ2dlZCBhcyBuZWNlc3NhcnkgdG8gZ2VuZXJhdGUgY2xvc3VyZQogIC8vLyBjbGFzc2VzIGZvciBpbiBhIGxhdGVyIHN0YWdlLiBXZSBtYXAgdGhhdCBub2RlIHRvIGluZm9ybWF0aW9uIGFzY2VydGFpbmVkCiAgLy8vIGFib3V0IHZhcmlhYmxlIHVzYWdlIGluIHRoZSBzdXJyb3VuZGluZyBzY29wZS4KICBNYXA8aXIuVHJlZU5vZGUsIEtlcm5lbFNjb3BlSW5mbz4gZ2V0IF9jbG9zdXJlc1RvR2VuZXJhdGUgPT4KICAgICAgX21vZGVsLmNsb3N1cmVzVG9HZW5lcmF0ZTsKCiAgLy8vIFRoZSBsb2NhbCB2YXJpYWJsZXMgdGhhdCBoYXZlIGJlZW4gZGVjbGFyZWQgaW4gdGhlIGN1cnJlbnQgc2NvcGUuCiAgTGlzdDxpci5Ob2RlIC8qIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gfCBUeXBlUGFyYW1ldGVyVHlwZVdpdGhDb250ZXh0ICovID4KICAgICAgX3Njb3BlVmFyaWFibGVzOwoKICAvLy8gUG9pbnRlciB0byB0aGUgY29udGV4dCBpbiB3aGljaCB0aGlzIGNsb3N1cmUgaXMgZXhlY3V0ZWQuCiAgLy8vIEZvciBleGFtcGxlLCBpbiB0aGUgZXhwcmVzc2lvbiBgdmFyIGZvbyA9ICgpID0+IDMgKyBpO2AsIHRoZSBleGVjdXRhYmxlCiAgLy8vIGNvbnRleHQgYXMgd2Ugd2FsayB0aGUgbm9kZXMgaW4gdGhhdCBleHByZXNzaW9uIGlzIHRoZSBpci5GaWVsZCBgZm9vYC4KICBpci5UcmVlTm9kZSBfZXhlY3V0YWJsZUNvbnRleHQ7CgogIC8vLyBBIGZsYWcgdG8gaW5kaWNhdGUgaWYgd2UgYXJlIGN1cnJlbnRseSBpbnNpZGUgYSBjbG9zdXJlLgogIGJvb2wgX2lzSW5zaWRlQ2xvc3VyZSA9IGZhbHNlOwoKICAvLy8gUG9pbnRlciB0byB0aGUgb3JpZ2luYWwgbm9kZSB3aGVyZSB0aGlzIGNsb3N1cmUgYnVpbGRlciBzdGFydGVkLgogIGlyLk5vZGUgX291dGVybW9zdE5vZGU7CgogIC8vLyBLZWVwIHRyYWNrIG9mIHRoZSBtdXRhdGVkIGxvY2FsIHZhcmlhYmxlcyBzbyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gYm94CiAgLy8vIG5vbi1tdXRhdGVkIHZhcmlhYmxlcy4gV2Uga25vdyB0aGVzZSBhcmUgb25seSBWYXJpYWJsZURlY2xhcmF0aW9ucyBiZWNhdXNlCiAgLy8vIHR5cGUgdmFyaWFibGUgdHlwZXMgYW5kIGB0aGlzYCB0eXBlcyBjYW4ndCBiZSBtdXRhdGVkIQogIFNldDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBfbXV0YXRlZFZhcmlhYmxlcyA9CiAgICAgIG5ldyBTZXQ8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4oKTsKCiAgLy8vIFRoZSBzZXQgb2YgdmFyaWFibGVzIHRoYXQgYXJlIGFjY2Vzc2VkIGluIHNvbWUgZm9ybSwgd2hldGhlciB0aGV5IGFyZQogIC8vLyBtdXRhdGVkIG9yIG5vdC4KICBTZXQ8aXIuTm9kZSAvKiBpci5WYXJpYWJsZURlY2xhcmF0aW9uIHwgVHlwZVBhcmFtZXRlclR5cGVXaXRoQ29udGV4dCAqLyA+CiAgICAgIF9jYXB0dXJlZFZhcmlhYmxlcyA9IG5ldyBTZXQ8aXIuTm9kZT4oKTsKCiAgLy8vIElmIHRydWUsIHRoZSB2aXNpdG9yIGlzIGN1cnJlbnRseSB0cmF2ZXJzaW5nIHNvbWUgbm9kZXMgdGhhdCBhcmUgaW5zaWRlIGEKICAvLy8gdHJ5IGJsb2NrLgogIGJvb2wgX2luVHJ5ID0gZmFsc2U7CgogIC8vLyBUaGUgY3VycmVudCBzY29wZSB3ZSBhcmUgaW4uCiAgS2VybmVsU2NvcGVJbmZvIF9jdXJyZW50U2NvcGVJbmZvOwoKICBib29sIF9oYXNUaGlzTG9jYWw7CgogIC8vLyBLZWVwcyB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGJveGVzIHRoYXQgd2UndmUgY3JlYXRlZCBzbyB0aGF0IHRoZXkgZWFjaAogIC8vLyBoYXZlIHVuaXF1ZSBuYW1lcy4KICBpbnQgX2JveENvdW50ZXIgPSAwOwoKICAvLy8gVGhlIGN1cnJlbnQgdXNhZ2Ugb2YgYSB0eXBlIGFubm90YXRpb24uCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXBkYXRlZCBpbiB0aGUgdmlzaXRvciB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHVuY29uZGl0aW9uYWwKICAvLy8gdHlwZSB2YXJpYWJsZSB1c2FnZSwgc3VjaCBhcyB0eXBlIGxpdGVyYWxzIGFuZCBpcyB0ZXN0cywgYW5kIGNvbmRpdGlvbmFsCiAgLy8vIHR5cGUgdmFyaWFibGUgdXNhZ2UsIHN1Y2ggYXMgdHlwZSBhcmd1bWVudCBpbiBtZXRob2QgaW52b2NhdGlvbnMuCiAgVmFyaWFibGVVc2UgX2N1cnJlbnRUeXBlVXNhZ2U7CgogIFNjb3BlTW9kZWxCdWlsZGVyKHRoaXMuX2NvbnN0YW50RXZhbHVhdG9yKTsKCiAgU2NvcGVNb2RlbCBjb21wdXRlTW9kZWwoaXIuTWVtYmVyIG5vZGUpIHsKICAgIGlmIChub2RlLmlzQWJzdHJhY3QgJiYgIW5vZGUuaXNFeHRlcm5hbCkgewogICAgICByZXR1cm4gY29uc3QgU2NvcGVNb2RlbCgKICAgICAgICAgIGluaXRpYWxpemVyQ29tcGxleGl0eTogY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKSk7CiAgICB9CgogICAgaWYgKG5vZGUgaXMgaXIuQ29uc3RydWN0b3IpIHsKICAgICAgX2hhc1RoaXNMb2NhbCA9IHRydWU7CiAgICB9IGVsc2UgaWYgKG5vZGUgaXMgaXIuUHJvY2VkdXJlICYmIG5vZGUua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLkZhY3RvcnkpIHsKICAgICAgX2hhc1RoaXNMb2NhbCA9IGZhbHNlOwogICAgfSBlbHNlIGlmIChub2RlLmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgX2hhc1RoaXNMb2NhbCA9IHRydWU7CiAgICB9IGVsc2UgewogICAgICBfaGFzVGhpc0xvY2FsID0gZmFsc2U7CiAgICB9CgogICAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IGluaXRpYWxpemVyQ29tcGxleGl0eSA9CiAgICAgICAgY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICAgIGlmIChub2RlIGlzIGlyLkZpZWxkKSB7CiAgICAgIGlmIChub2RlLmluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgICBpbml0aWFsaXplckNvbXBsZXhpdHkgPSBub2RlLmFjY2VwdCh0aGlzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbml0aWFsaXplckNvbXBsZXhpdHkgPSBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkuY29uc3RhbnQoKTsKICAgICAgICBfbW9kZWwuc2NvcGVJbmZvID0gbmV3IEtlcm5lbFNjb3BlSW5mbyhfaGFzVGhpc0xvY2FsKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KG5vZGUgaXMgaXIuUHJvY2VkdXJlIHx8IG5vZGUgaXMgaXIuQ29uc3RydWN0b3IpOwogICAgICBub2RlLmFjY2VwdCh0aGlzKTsKICAgIH0KICAgIHJldHVybiBuZXcgU2NvcGVNb2RlbCgKICAgICAgICBjbG9zdXJlU2NvcGVNb2RlbDogX21vZGVsLAogICAgICAgIHZhcmlhYmxlU2NvcGVNb2RlbDogdmFyaWFibGVTY29wZU1vZGVsLAogICAgICAgIGluaXRpYWxpemVyQ29tcGxleGl0eTogaW5pdGlhbGl6ZXJDb21wbGV4aXR5KTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSBkZWZhdWx0Tm9kZShpci5Ob2RlIG5vZGUpID0+CiAgICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoJ1VuaGFuZGxlZCBub2RlICRub2RlICgke25vZGUucnVudGltZVR5cGV9KScpOwoKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXROb2RlKGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIG5vZGU/LmFjY2VwdCh0aGlzKTsKICB9CgogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdE5vZGVzKExpc3Q8aXIuTm9kZT4gbm9kZXMpIHsKICAgIEluaXRpYWxpemVyQ29tcGxleGl0eSBjb21wbGV4aXR5ID0gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmNvbnN0YW50KCk7CiAgICBmb3IgKGlyLk5vZGUgbm9kZSBpbiBub2RlcykgewogICAgICBjb21wbGV4aXR5ID0gY29tcGxleGl0eS5jb21iaW5lKHZpc2l0Tm9kZShub2RlKSk7CiAgICB9CiAgICByZXR1cm4gY29tcGxleGl0eTsKICB9CgogIC8vLyBVcGRhdGUgdGhlIFtDYXB0dXJlZFNjb3BlXSBvYmplY3QgY29ycmVzcG9uZGluZyB0bwogIC8vLyB0aGlzIG5vZGUgaWYgYW55IHZhcmlhYmxlcyBhcmUgY2FwdHVyZWQuCiAgdm9pZCBhdHRhY2hDYXB0dXJlZFNjb3BlVmFyaWFibGVzKGlyLlRyZWVOb2RlIG5vZGUpIHsKICAgIFNldDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBjYXB0dXJlZFZhcmlhYmxlc0ZvclNjb3BlID0KICAgICAgICBuZXcgU2V0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+KCk7CgogICAgZm9yIChpci5Ob2RlIHZhcmlhYmxlIGluIF9zY29wZVZhcmlhYmxlcykgewogICAgICAvLyBObyBuZWVkIHRvIGJveCBub24tYXNzaWduYWJsZSBlbGVtZW50cy4KICAgICAgaWYgKHZhcmlhYmxlIGlzIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24pIHsKICAgICAgICBpZiAodmFyaWFibGUuaXNGaW5hbCB8fCB2YXJpYWJsZS5pc0NvbnN0KSBjb250aW51ZTsKICAgICAgICBpZiAoIV9tdXRhdGVkVmFyaWFibGVzLmNvbnRhaW5zKHZhcmlhYmxlKSkgY29udGludWU7CiAgICAgICAgaWYgKF9jYXB0dXJlZFZhcmlhYmxlcy5jb250YWlucyh2YXJpYWJsZSkpIHsKICAgICAgICAgIGNhcHR1cmVkVmFyaWFibGVzRm9yU2NvcGUuYWRkKHZhcmlhYmxlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmICghY2FwdHVyZWRWYXJpYWJsZXNGb3JTY29wZS5pc0VtcHR5KSB7CiAgICAgIGFzc2VydChfbW9kZWwuc2NvcGVJbmZvICE9IG51bGwpOwogICAgICBLZXJuZWxTY29wZUluZm8gZnJvbSA9IF9tb2RlbC5zY29wZUluZm87CgogICAgICBLZXJuZWxDYXB0dXJlZFNjb3BlIGNhcHR1cmVkU2NvcGU7CiAgICAgIHZhciBub2RlQm94ID0gbmV3IE5vZGVCb3goZ2V0Qm94TmFtZSgpLCBfZXhlY3V0YWJsZUNvbnRleHQpOwogICAgICBpZiAobm9kZSBpcyBpci5Gb3JTdGF0ZW1lbnQgfHwKICAgICAgICAgIG5vZGUgaXMgaXIuRm9ySW5TdGF0ZW1lbnQgfHwKICAgICAgICAgIG5vZGUgaXMgaXIuV2hpbGVTdGF0ZW1lbnQgfHwKICAgICAgICAgIG5vZGUgaXMgaXIuRG9TdGF0ZW1lbnQpIHsKICAgICAgICBjYXB0dXJlZFNjb3BlID0gbmV3IEtlcm5lbENhcHR1cmVkTG9vcFNjb3BlKAogICAgICAgICAgICBjYXB0dXJlZFZhcmlhYmxlc0ZvclNjb3BlLAogICAgICAgICAgICBub2RlQm94LAogICAgICAgICAgICBbXSwKICAgICAgICAgICAgZnJvbS5sb2NhbHNVc2VkSW5UcnlPclN5bmMsCiAgICAgICAgICAgIGZyb20uZnJlZVZhcmlhYmxlcywKICAgICAgICAgICAgZnJvbS5mcmVlVmFyaWFibGVzRm9yUnRpLAogICAgICAgICAgICBmcm9tLnRoaXNVc2VkQXNGcmVlVmFyaWFibGUsCiAgICAgICAgICAgIGZyb20udGhpc1VzZWRBc0ZyZWVWYXJpYWJsZUlmTmVlZHNSdGksCiAgICAgICAgICAgIF9oYXNUaGlzTG9jYWwpOwogICAgICB9IGVsc2UgewogICAgICAgIGNhcHR1cmVkU2NvcGUgPSBuZXcgS2VybmVsQ2FwdHVyZWRTY29wZSgKICAgICAgICAgICAgY2FwdHVyZWRWYXJpYWJsZXNGb3JTY29wZSwKICAgICAgICAgICAgbm9kZUJveCwKICAgICAgICAgICAgZnJvbS5sb2NhbHNVc2VkSW5UcnlPclN5bmMsCiAgICAgICAgICAgIGZyb20uZnJlZVZhcmlhYmxlcywKICAgICAgICAgICAgZnJvbS5mcmVlVmFyaWFibGVzRm9yUnRpLAogICAgICAgICAgICBmcm9tLnRoaXNVc2VkQXNGcmVlVmFyaWFibGUsCiAgICAgICAgICAgIGZyb20udGhpc1VzZWRBc0ZyZWVWYXJpYWJsZUlmTmVlZHNSdGksCiAgICAgICAgICAgIF9oYXNUaGlzTG9jYWwpOwogICAgICB9CiAgICAgIF9tb2RlbC5zY29wZUluZm8gPSBfc2NvcGVzQ2FwdHVyZWRJbkNsb3N1cmVNYXBbbm9kZV0gPSBjYXB0dXJlZFNjb3BlOwogICAgfQogIH0KCiAgLy8vIEdlbmVyYXRlIGEgdW5pcXVlIG5hbWUgZm9yIHRoZSBbX2JveENvdW50ZXJddGggYm94IGZpZWxkLgogIC8vLwogIC8vLyBUaGUgcmVzdWx0IGlzIHVzZWQgYXMgdGhlIG5hbWUgb2YgW05vZGVCb3hdcyBhbmQgW0JveExvY2FsXXMsIGFuZCBtdXN0CiAgLy8vIHRoZXJlZm9yZSBiZSB1bmlxdWUgdG8gYXZvaWQgYnJlYWtpbmcgYW4gaW52YXJpYW50IGluIHRoZSBlbGVtZW50IG1vZGVsCiAgLy8vIChjbGFzc2VzIGNhbm5vdCBkZWNsYXJlIG11bHRpcGxlIGZpZWxkcyB3aXRoIHRoZSBzYW1lIG5hbWUpLgogIC8vLwogIC8vLyBBbHNvLCB0aGUgbmFtZXMgc2hvdWxkIGJlIGRpc3RpbmN0IGZyb20gcmVhbCBmaWVsZCBuYW1lcyB0byBwcmV2ZW50CiAgLy8vIGNsYXNoZXMgd2l0aCBzZWxlY3RvcnMgZm9yIHRob3NlIGZpZWxkcy4KICAvLy8KICAvLy8gVGhlc2UgbmFtZXMgYXJlIG5vdCB1c2VkIGluIGdlbmVyYXRlZCBjb2RlLCBqdXN0IGFzIGVsZW1lbnQgbmFtZS4KICBTdHJpbmcgZ2V0Qm94TmFtZSgpIHsKICAgIHJldHVybiAiX2JveF8ke19ib3hDb3VudGVyKyt9IjsKICB9CgogIC8vLyBQZXJmb3JtIGJvb2sta2VlcGluZyB3aXRoIHRoZSBjdXJyZW50IHNldCBvZiBsb2NhbCB2YXJpYWJsZXMgdGhhdCBoYXZlCiAgLy8vIGJlZW4gc2VlbiB0aHVzIGZhciBiZWZvcmUgZW50ZXJpbmcgdGhpcyBuZXcgc2NvcGUuCiAgdm9pZCBlbnRlck5ld1Njb3BlKGlyLk5vZGUgbm9kZSwgdm9pZCB2aXNpdE5ld1Njb3BlKCkpIHsKICAgIExpc3Q8aXIuTm9kZT4gb2xkU2NvcGVWYXJpYWJsZXMgPSBfc2NvcGVWYXJpYWJsZXM7CiAgICBfc2NvcGVWYXJpYWJsZXMgPSA8aXIuTm9kZT5bXTsKICAgIHZpc2l0TmV3U2NvcGUoKTsKICAgIGF0dGFjaENhcHR1cmVkU2NvcGVWYXJpYWJsZXMobm9kZSk7CiAgICBfbXV0YXRlZFZhcmlhYmxlcy5yZW1vdmVBbGwoX3Njb3BlVmFyaWFibGVzKTsKICAgIF9zY29wZVZhcmlhYmxlcyA9IG9sZFNjb3BlVmFyaWFibGVzOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0TmFtZWRFeHByZXNzaW9uKGlyLk5hbWVkRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gdmlzaXROb2RlKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0VHJ5Q2F0Y2goaXIuVHJ5Q2F0Y2ggbm9kZSkgewogICAgYm9vbCBvbGRJblRyeSA9IF9pblRyeTsKICAgIF9pblRyeSA9IHRydWU7CiAgICB2aXNpdEluVmFyaWFibGVTY29wZShub2RlLCAoKSB7CiAgICAgIHZpc2l0Tm9kZShub2RlLmJvZHkpOwogICAgfSk7CiAgICB2aXNpdE5vZGVzKG5vZGUuY2F0Y2hlcyk7CiAgICBfaW5UcnkgPSBvbGRJblRyeTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0VHJ5RmluYWxseShpci5UcnlGaW5hbGx5IG5vZGUpIHsKICAgIGJvb2wgb2xkSW5UcnkgPSBfaW5Ucnk7CiAgICBfaW5UcnkgPSB0cnVlOwogICAgdmlzaXRJblZhcmlhYmxlU2NvcGUobm9kZSwgKCkgewogICAgICB2aXNpdE5vZGUobm9kZS5ib2R5KTsKICAgIH0pOwogICAgdmlzaXROb2RlKG5vZGUuZmluYWxpemVyKTsKICAgIF9pblRyeSA9IG9sZEluVHJ5OwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRWYXJpYWJsZUdldChpci5WYXJpYWJsZUdldCBub2RlKSB7CiAgICBfbWFya1ZhcmlhYmxlQXNVc2VkKG5vZGUudmFyaWFibGUsIFZhcmlhYmxlVXNlLmV4cGxpY2l0KTsKICAgIC8vIERvbid0IHZpc2l0IGBub2RlLnByb21vdGVkVHlwZWAuCiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFZhcmlhYmxlU2V0KGlyLlZhcmlhYmxlU2V0IG5vZGUpIHsKICAgIF9tdXRhdGVkVmFyaWFibGVzLmFkZChub2RlLnZhcmlhYmxlKTsKICAgIF9tYXJrVmFyaWFibGVBc1VzZWQobm9kZS52YXJpYWJsZSwgVmFyaWFibGVVc2UuZXhwbGljaXQpOwogICAgdmlzaXRJbkNvbnRleHQobm9kZS52YXJpYWJsZS50eXBlLCBWYXJpYWJsZVVzZS5sb2NhbFR5cGUpOwogICAgdmlzaXROb2RlKG5vZGUudmFsdWUpOwogICAgcmVnaXN0ZXJBc3NpZ25lZFZhcmlhYmxlKG5vZGUudmFyaWFibGUpOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICB2b2lkIF9oYW5kbGVWYXJpYWJsZURlY2xhcmF0aW9uKAogICAgICBpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUsIFZhcmlhYmxlVXNlIHVzYWdlKSB7CiAgICBpZiAoIW5vZGUuaXNGaWVsZEZvcm1hbCkgewogICAgICBfc2NvcGVWYXJpYWJsZXMuYWRkKG5vZGUpOwogICAgfQoKICAgIHZpc2l0SW5Db250ZXh0KG5vZGUudHlwZSwgdXNhZ2UpOwogICAgdmlzaXROb2RlKG5vZGUuaW5pdGlhbGl6ZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbihpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIF9oYW5kbGVWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUsIFZhcmlhYmxlVXNlLmxvY2FsVHlwZSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIC8vLyBBZGQgdGhpcyB2YXJpYWJsZSB0byB0aGUgc2V0IG9mIGZyZWUgdmFyaWFibGVzIGlmIGFwcHJvcHJpYXRlIGFuZCBhZGQgdG8KICAvLy8gdGhlIHRhbGx5IG9mIHZhcmlhYmxlcyB1c2VkIGluIHRyeSBvciBzeW5jIGJsb2Nrcy4KICAvLy8gSWYgW29ubHlGb3JSdGlDaGVja3NdIGlzIHRydWUsIGFkZCB0byB0aGUgZnJlZVZhcmlhYmxlc0ZvclJ0aSBzZXQgaW5zdGVhZAogIC8vLyBvZiBmcmVlVmFyaWFibGVzIGFzIHdlIHdpbGwgb25seSB1c2UgaXQgaWYgcnVudGltZSB0eXBlIGluZm9ybWF0aW9uIGlzCiAgLy8vIGNoZWNrZWQuCiAgdm9pZCBfbWFya1ZhcmlhYmxlQXNVc2VkKAogICAgICBpci5Ob2RlIC8qIFZhcmlhYmxlRGVjbGFyYXRpb24gfCBUeXBlUGFyYW1ldGVyVHlwZVdpdGhDb250ZXh0ICovIHZhcmlhYmxlLAogICAgICBWYXJpYWJsZVVzZSB1c2FnZSkgewogICAgYXNzZXJ0KHZhcmlhYmxlIGlzIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gfHwKICAgICAgICB2YXJpYWJsZSBpcyBUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQpOwogICAgYXNzZXJ0KHVzYWdlICE9IG51bGwpOwogICAgaWYgKF9pc0luc2lkZUNsb3N1cmUgJiYgIV9pbkN1cnJlbnRDb250ZXh0KHZhcmlhYmxlKSkgewogICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBub3QgZGVjbGFyZWQgaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24gYW5kIHRoZSBlbGVtZW50CiAgICAgIC8vIGlzIG5vdCB0aGUgY2xvc3VyZSBpdHNlbGYgd2UgbmVlZCB0byBtYXJrIHRoZSBlbGVtZW50IGFzIGZyZWUgdmFyaWFibGUuCiAgICAgIC8vIE5vdGUgdGhhdCB0aGUgY2hlY2sgb24gW2luc2lkZUNsb3N1cmVdIGlzIG5vdCBqdXN0IGFuCiAgICAgIC8vIG9wdGltaXphdGlvbjogZmFjdG9yaWVzIGhhdmUgdHlwZSBwYXJhbWV0ZXJzIGFzIGZ1bmN0aW9uCiAgICAgIC8vIHBhcmFtZXRlcnMsIGFuZCB0eXBlIHBhcmFtZXRlcnMgYXJlIGRlY2xhcmVkIGluIHRoZSBjbGFzcywgbm90CiAgICAgIC8vIHRoZSBmYWN0b3J5LgogICAgICBpZiAodXNhZ2UgPT0gVmFyaWFibGVVc2UuZXhwbGljaXQpIHsKICAgICAgICBfY3VycmVudFNjb3BlSW5mby5mcmVlVmFyaWFibGVzLmFkZCh2YXJpYWJsZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2N1cnJlbnRTY29wZUluZm8uZnJlZVZhcmlhYmxlc0ZvclJ0aQogICAgICAgICAgICAucHV0SWZBYnNlbnQodmFyaWFibGUsICgpID0+IG5ldyBTZXQ8VmFyaWFibGVVc2U+KCkpCiAgICAgICAgICAgIC5hZGQodXNhZ2UpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2luVHJ5ICYmIHZhcmlhYmxlIGlzIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24pIHsKICAgICAgX2N1cnJlbnRTY29wZUluZm8ubG9jYWxzVXNlZEluVHJ5T3JTeW5jLmFkZCh2YXJpYWJsZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRUaGlzRXhwcmVzc2lvbihpci5UaGlzRXhwcmVzc2lvbiB0aGlzRXhwcmVzc2lvbikgewogICAgaWYgKF9oYXNUaGlzTG9jYWwpIHsKICAgICAgX3JlZ2lzdGVyTmVlZHNUaGlzKFZhcmlhYmxlVXNlLmV4cGxpY2l0KTsKICAgIH0KICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0VHlwZVBhcmFtZXRlcihpci5UeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIpIHsKICAgIGlyLlRyZWVOb2RlIGNvbnRleHQgPSBfZXhlY3V0YWJsZUNvbnRleHQ7CiAgICBUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQgdHlwZVZhcmlhYmxlID0gbmV3IFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCgKICAgICAgICBuZXcgaXIuVHlwZVBhcmFtZXRlclR5cGUodHlwZVBhcmFtZXRlciksCiAgICAgICAgLy8gSWYgdGhpcyB0eXBlUGFyYW1ldGVyIGlzIHBhcnQgb2YgYSB0eXBlZGVmIHRoZW4gaXRzIHBhcmVudCBpcwogICAgICAgIC8vIG51bGwgYmVjYXVzZSBpdCBoYXMgbm8gY29udGV4dC4gSnVzdCBwYXNzIGluIG51bGwgZm9yIHRoZQogICAgICAgIC8vIGNvbnRleHQgaW4gdGhhdCBjYXNlLgogICAgICAgIHR5cGVQYXJhbWV0ZXIucGFyZW50ICE9IG51bGwgPyB0eXBlUGFyYW1ldGVyLnBhcmVudC5wYXJlbnQgOiBudWxsKTsKICAgIGlmIChfaXNJbnNpZGVDbG9zdXJlICYmIGNvbnRleHQgaXMgaXIuUHJvY2VkdXJlICYmIGNvbnRleHQuaXNGYWN0b3J5KSB7CiAgICAgIC8vIFRoaXMgaXMgYSBjbG9zdXJlIGluIGEgZmFjdG9yeSBjb25zdHJ1Y3Rvci4gIFNpbmNlIHRoZXJlIGlzIG5vCiAgICAgIC8vIFs6dGhpczpdLCB3ZSBoYXZlIHRvIG1hcmsgdGhlIHR5cGUgYXJndW1lbnRzIGFzIGZyZWUgdmFyaWFibGVzIHRvCiAgICAgIC8vIGNhcHR1cmUgdGhlbSBpbiB0aGUgY2xvc3VyZS4KICAgICAgX3VzZVR5cGVWYXJpYWJsZUFzTG9jYWwodHlwZVZhcmlhYmxlLCBfY3VycmVudFR5cGVVc2FnZSk7CiAgICB9CgogICAgaWYgKF9leGVjdXRhYmxlQ29udGV4dCBpcyBpci5NZW1iZXIgJiYgX2V4ZWN1dGFibGVDb250ZXh0IGlzISBpci5GaWVsZCkgewogICAgICAvLyBJbiBjaGVja2VkIG1vZGUsIHVzaW5nIGEgdHlwZSB2YXJpYWJsZSBpbiBhIHR5cGUgYW5ub3RhdGlvbiBtYXkgbGVhZAogICAgICAvLyB0byBhIHJ1bnRpbWUgdHlwZSBjaGVjayB0aGF0IG5lZWRzIHRvIGFjY2VzcyB0aGUgdHlwZSBhcmd1bWVudCBhbmQKICAgICAgLy8gdGhlcmVmb3JlIHRoZSBjbG9zdXJlIG5lZWRzIGEgdGhpcy1lbGVtZW50LCBpZiBpdCBpcyBub3QgaW4gYSBmaWVsZAogICAgICAvLyBpbml0aWFsaXplcjsgZmllbGQgaW5pdGlhbGl6ZXJzIGFyZSBldmFsdWF0ZWQgaW4gYSBjb250ZXh0IHdoZXJlCiAgICAgIC8vIHRoZSB0eXBlIGFyZ3VtZW50cyBhcmUgYXZhaWxhYmxlIGluIGxvY2Fscy4KCiAgICAgIGlmIChfaGFzVGhpc0xvY2FsKSB7CiAgICAgICAgX3JlZ2lzdGVyTmVlZHNUaGlzKF9jdXJyZW50VHlwZVVzYWdlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfdXNlVHlwZVZhcmlhYmxlQXNMb2NhbCh0eXBlVmFyaWFibGUsIF9jdXJyZW50VHlwZVVzYWdlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5jb25zdGFudCgpOwogIH0KCiAgLy8vIEFkZCBgdGhpc2AgYXMgYSB2YXJpYWJsZSB0aGF0IG5lZWRzIHRvIGJlIGFjY2Vzc2VkIChhbmQgdGh1cyBtYXkgYmVjb21lIGEKICAvLy8gZnJlZS9jYXB0dXJlZCB2YXJpYWJsZS4KICAvLy8gSWYgW29ubHlJZk5lZWRzUnRpXSBpcyB0cnVlLCBzZXQgdGhpc1VzZWRBc0ZyZWVWYXJpYWJsZUlmTmVlZHNSdGkgdG8gdHJ1ZQogIC8vLyBpbnN0ZWFkIG9mIHRoaXNVc2VkQXNGcmVlVmFyaWFibGUgYXMgd2Ugd2lsbCBvbmx5IHVzZSBgdGhpc2AgaWYgcnVudGltZQogIC8vLyB0eXBlIGluZm9ybWF0aW9uIGlzIGNoZWNrZWQuCiAgdm9pZCBfcmVnaXN0ZXJOZWVkc1RoaXMoVmFyaWFibGVVc2UgdXNhZ2UpIHsKICAgIGlmIChfaXNJbnNpZGVDbG9zdXJlKSB7CiAgICAgIGlmICh1c2FnZSA9PSBWYXJpYWJsZVVzZS5leHBsaWNpdCkgewogICAgICAgIF9jdXJyZW50U2NvcGVJbmZvLnRoaXNVc2VkQXNGcmVlVmFyaWFibGUgPSB0cnVlOwogICAgICB9IGVsc2UgewogICAgICAgIF9jdXJyZW50U2NvcGVJbmZvLnRoaXNVc2VkQXNGcmVlVmFyaWFibGVJZk5lZWRzUnRpLmFkZCh1c2FnZSk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEZvckluU3RhdGVtZW50KGlyLkZvckluU3RhdGVtZW50IG5vZGUpIHsKICAgIC8vIFdlIG5lZWQgdG8gc2V0IGBpblRyeWAgdG8gdHJ1ZSBpZiB0aGlzIGlzIGFuIGFzeW5jIGZvci1pbiBiZWNhdXNlIHdlCiAgICAvLyBkZXN1Z2FyIGl0IGludG8gYSB0cnktZmluYWxseSBpbiB0aGUgU1NBIHBoYXNlLgogICAgYm9vbCBvbGRJblRyeSA9IF9pblRyeTsKICAgIGlmIChub2RlLmlzQXN5bmMpIHsKICAgICAgX2luVHJ5ID0gdHJ1ZTsKICAgIH0KICAgIGVudGVyTmV3U2NvcGUobm9kZSwgKCkgewogICAgICB2aXNpdE5vZGUobm9kZS52YXJpYWJsZSk7CiAgICAgIHZpc2l0SW5WYXJpYWJsZVNjb3BlKG5vZGUsICgpIHsKICAgICAgICB2aXNpdE5vZGUobm9kZS5pdGVyYWJsZSk7CiAgICAgICAgdmlzaXROb2RlKG5vZGUuYm9keSk7CiAgICAgIH0pOwogICAgfSk7CiAgICBpZiAobm9kZS5pc0FzeW5jKSB7CiAgICAgIF9pblRyeSA9IG9sZEluVHJ5OwogICAgfQogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRXaGlsZVN0YXRlbWVudChpci5XaGlsZVN0YXRlbWVudCBub2RlKSB7CiAgICBlbnRlck5ld1Njb3BlKG5vZGUsICgpIHsKICAgICAgdmlzaXRJblZhcmlhYmxlU2NvcGUobm9kZSwgKCkgewogICAgICAgIHZpc2l0Tm9kZShub2RlLmNvbmRpdGlvbik7CiAgICAgICAgdmlzaXROb2RlKG5vZGUuYm9keSk7CiAgICAgIH0pOwogICAgfSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdERvU3RhdGVtZW50KGlyLkRvU3RhdGVtZW50IG5vZGUpIHsKICAgIGVudGVyTmV3U2NvcGUobm9kZSwgKCkgewogICAgICB2aXNpdEluVmFyaWFibGVTY29wZShub2RlLCAoKSB7CiAgICAgICAgdmlzaXROb2RlKG5vZGUuYm9keSk7CiAgICAgICAgdmlzaXROb2RlKG5vZGUuY29uZGl0aW9uKTsKICAgICAgfSk7CiAgICB9KTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0Rm9yU3RhdGVtZW50KGlyLkZvclN0YXRlbWVudCBub2RlKSB7CiAgICBMaXN0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+IGJveGVkTG9vcFZhcmlhYmxlcyA9CiAgICAgICAgPGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+W107CiAgICBlbnRlck5ld1Njb3BlKG5vZGUsICgpIHsKICAgICAgLy8gRmlyc3QgdmlzaXQgaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFuZCB1cGRhdGUgc3RlcHMgc28gd2UgY2FuIGVhc2lseQogICAgICAvLyBjaGVjayBpZiBhIGxvb3AgdmFyaWFibGUgd2FzIGNhcHR1cmVkIGluIG9uZSBvZiB0aGVzZSBzdWJleHByZXNzaW9ucy4KICAgICAgdmlzaXROb2Rlcyhub2RlLnZhcmlhYmxlcyk7CiAgICAgIHZpc2l0SW5WYXJpYWJsZVNjb3BlKG5vZGUsICgpIHsKICAgICAgICB2aXNpdE5vZGVzKG5vZGUudXBkYXRlcyk7CiAgICAgIH0pOwoKICAgICAgLy8gTG9vcCB2YXJpYWJsZXMgdGhhdCBoYXZlIG5vdCBiZWVuIGNhcHR1cmVkIHlldCBjYW4gc2FmZWx5IGJlIGZsYWdnZWQgYXMKICAgICAgLy8gbm9uLW11dGF0ZWQsIGJlY2F1c2Ugbm8gbmVzdGVkIGZ1bmN0aW9uIGNhbiBvYnNlcnZlIHRoZSBtdXRhdGlvbi4KICAgICAgZm9yIChpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlIGluIG5vZGUudmFyaWFibGVzKSB7CiAgICAgICAgaWYgKCFfY2FwdHVyZWRWYXJpYWJsZXMuY29udGFpbnModmFyaWFibGUpKSB7CiAgICAgICAgICBfbXV0YXRlZFZhcmlhYmxlcy5yZW1vdmUodmFyaWFibGUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gVmlzaXQgY29uZGl0aW9uIGFuZCBib2R5LgogICAgICAvLyBUaGlzIG11c3QgaGFwcGVuIGFmdGVyIHRoZSBhYm92ZSwgc28gYW55IGxvb3AgdmFyaWFibGVzIG11dGF0ZWQgaW4gdGhlCiAgICAgIC8vIGNvbmRpdGlvbiBvciBib2R5IGFyZSBpbmRlZWQgZmxhZ2dlZCBhcyBtdXRhdGVkLgogICAgICB2aXNpdEluVmFyaWFibGVTY29wZShub2RlLCAoKSB7CiAgICAgICAgdmlzaXROb2RlKG5vZGUuY29uZGl0aW9uKTsKICAgICAgICB2aXNpdE5vZGUobm9kZS5ib2R5KTsKICAgICAgfSk7CgogICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBkZWNsYXJlZCBsb29wIHZhcmlhYmxlcyB0aGF0IG5lZWQgdG8gYmUgYm94ZWQuCiAgICAgIGZvciAoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSBpbiBub2RlLnZhcmlhYmxlcykgewogICAgICAgIC8vIE5vbi1tdXRhdGVkIHZhcmlhYmxlcyBzaG91bGQgbm90IGJlIGJveGVkLiAgVGhlIF9tdXRhdGVkVmFyaWFibGVzIHNldAogICAgICAgIC8vIGdldHMgY2xlYXJlZCB3aGVuIGBlbnRlck5ld1Njb3BlYCByZXR1cm5zLCBzbyBjaGVjayBpdCBoZXJlLgogICAgICAgIGlmIChfY2FwdHVyZWRWYXJpYWJsZXMuY29udGFpbnModmFyaWFibGUpICYmCiAgICAgICAgICAgIF9tdXRhdGVkVmFyaWFibGVzLmNvbnRhaW5zKHZhcmlhYmxlKSkgewogICAgICAgICAgYm94ZWRMb29wVmFyaWFibGVzLmFkZCh2YXJpYWJsZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIEtlcm5lbENhcHR1cmVkU2NvcGUgc2NvcGUgPSBfc2NvcGVzQ2FwdHVyZWRJbkNsb3N1cmVNYXBbbm9kZV07CiAgICBpZiAoc2NvcGUgIT0gbnVsbCkgewogICAgICBfc2NvcGVzQ2FwdHVyZWRJbkNsb3N1cmVNYXBbbm9kZV0gPSBuZXcgS2VybmVsQ2FwdHVyZWRMb29wU2NvcGUoCiAgICAgICAgICBzY29wZS5ib3hlZFZhcmlhYmxlcywKICAgICAgICAgIHNjb3BlLmNhcHR1cmVkVmFyaWFibGVzQWNjZXNzb3IsCiAgICAgICAgICBib3hlZExvb3BWYXJpYWJsZXMsCiAgICAgICAgICBzY29wZS5sb2NhbHNVc2VkSW5UcnlPclN5bmMsCiAgICAgICAgICBzY29wZS5mcmVlVmFyaWFibGVzLAogICAgICAgICAgc2NvcGUuZnJlZVZhcmlhYmxlc0ZvclJ0aSwKICAgICAgICAgIHNjb3BlLnRoaXNVc2VkQXNGcmVlVmFyaWFibGUsCiAgICAgICAgICBzY29wZS50aGlzVXNlZEFzRnJlZVZhcmlhYmxlSWZOZWVkc1J0aSwKICAgICAgICAgIHNjb3BlLmhhc1RoaXNMb2NhbCk7CiAgICB9CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFN1cGVyTWV0aG9kSW52b2NhdGlvbigKICAgICAgaXIuU3VwZXJNZXRob2RJbnZvY2F0aW9uIG5vZGUpIHsKICAgIGlmIChfaGFzVGhpc0xvY2FsKSB7CiAgICAgIF9yZWdpc3Rlck5lZWRzVGhpcyhWYXJpYWJsZVVzZS5leHBsaWNpdCk7CiAgICB9CiAgICBpZiAobm9kZS5hcmd1bWVudHMudHlwZXMuaXNOb3RFbXB0eSkgewogICAgICB2aXNpdE5vZGVzSW5Db250ZXh0KG5vZGUuYXJndW1lbnRzLnR5cGVzLAogICAgICAgICAgbmV3IFZhcmlhYmxlVXNlLnN0YXRpY1R5cGVBcmd1bWVudChub2RlLmludGVyZmFjZVRhcmdldCkpOwogICAgfQogICAgdmlzaXROb2Rlcyhub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsKTsKICAgIHZpc2l0Tm9kZXMobm9kZS5hcmd1bWVudHMubmFtZWQpOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRTdXBlclByb3BlcnR5U2V0KGlyLlN1cGVyUHJvcGVydHlTZXQgbm9kZSkgewogICAgaWYgKF9oYXNUaGlzTG9jYWwpIHsKICAgICAgX3JlZ2lzdGVyTmVlZHNUaGlzKFZhcmlhYmxlVXNlLmV4cGxpY2l0KTsKICAgIH0KICAgIHZpc2l0Tm9kZShub2RlLnZhbHVlKTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0U3VwZXJQcm9wZXJ0eUdldChpci5TdXBlclByb3BlcnR5R2V0IG5vZGUpIHsKICAgIGlmIChfaGFzVGhpc0xvY2FsKSB7CiAgICAgIF9yZWdpc3Rlck5lZWRzVGhpcyhWYXJpYWJsZVVzZS5leHBsaWNpdCk7CiAgICB9CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIHZvaWQgdmlzaXRJbnZva2FibGUoaXIuVHJlZU5vZGUgbm9kZSwgdm9pZCBmKCkpIHsKICAgIGFzc2VydChub2RlIGlzIGlyLk1lbWJlciB8fCBub2RlIGlzIGlyLkxvY2FsRnVuY3Rpb24pOwogICAgYm9vbCBvbGRJc0luc2lkZUNsb3N1cmUgPSBfaXNJbnNpZGVDbG9zdXJlOwogICAgaXIuVHJlZU5vZGUgb2xkRXhlY3V0YWJsZUNvbnRleHQgPSBfZXhlY3V0YWJsZUNvbnRleHQ7CiAgICBLZXJuZWxTY29wZUluZm8gb2xkU2NvcGVJbmZvID0gX2N1cnJlbnRTY29wZUluZm87CgogICAgLy8gX291dGVybW9zdE5vZGUgaXMgb25seSBudWxsIHRoZSBmaXJzdCB0aW1lIHdlIGVudGVyIHRoZSBib2R5IG9mIHRoZQogICAgLy8gZmllbGQsIGNvbnN0cnVjdG9yLCBvciBtZXRob2QgdGhhdCBpcyBiZWluZyBhbmFseXplZC4KICAgIF9pc0luc2lkZUNsb3N1cmUgPSBfb3V0ZXJtb3N0Tm9kZSAhPSBudWxsOwogICAgX2V4ZWN1dGFibGVDb250ZXh0ID0gbm9kZTsKCiAgICBfY3VycmVudFNjb3BlSW5mbyA9IG5ldyBLZXJuZWxTY29wZUluZm8oX2hhc1RoaXNMb2NhbCk7CgogICAgaWYgKF9pc0luc2lkZUNsb3N1cmUpIHsKICAgICAgX2Nsb3N1cmVzVG9HZW5lcmF0ZVtub2RlXSA9IF9jdXJyZW50U2NvcGVJbmZvOwogICAgfSBlbHNlIHsKICAgICAgX291dGVybW9zdE5vZGUgPSBub2RlOwogICAgICBfbW9kZWwuc2NvcGVJbmZvID0gX2N1cnJlbnRTY29wZUluZm87CiAgICB9CgogICAgZW50ZXJOZXdTY29wZShub2RlLCBmKTsKCiAgICBLZXJuZWxTY29wZUluZm8gc2F2ZWRTY29wZUluZm8gPSBfY3VycmVudFNjb3BlSW5mbzsKICAgIGJvb2wgc2F2ZWRJc0luc2lkZUNsb3N1cmUgPSBfaXNJbnNpZGVDbG9zdXJlOwoKICAgIC8vIFJlc3RvcmUgb2xkIHZhbHVlcy4KICAgIF9pc0luc2lkZUNsb3N1cmUgPSBvbGRJc0luc2lkZUNsb3N1cmU7CiAgICBfY3VycmVudFNjb3BlSW5mbyA9IG9sZFNjb3BlSW5mbzsKICAgIF9leGVjdXRhYmxlQ29udGV4dCA9IG9sZEV4ZWN1dGFibGVDb250ZXh0OwoKICAgIC8vIE1hcmsgYWxsIGZyZWUgdmFyaWFibGVzIGFzIGNhcHR1cmVkIGFuZCBleHBlY3QgdG8gZW5jb3VudGVyIHRoZW0gaW4gdGhlCiAgICAvLyBvdXRlciBmdW5jdGlvbi4KICAgIEl0ZXJhYmxlPGlyLk5vZGU+IGZyZWVWYXJpYWJsZXMgPSBzYXZlZFNjb3BlSW5mby5mcmVlVmFyaWFibGVzOwogICAgYXNzZXJ0KGZyZWVWYXJpYWJsZXMuaXNFbXB0eSB8fCBzYXZlZElzSW5zaWRlQ2xvc3VyZSk7CiAgICBmb3IgKGlyLk5vZGUgZnJlZVZhcmlhYmxlIGluIGZyZWVWYXJpYWJsZXMpIHsKICAgICAgX2NhcHR1cmVkVmFyaWFibGVzLmFkZChmcmVlVmFyaWFibGUpOwogICAgICBfbWFya1ZhcmlhYmxlQXNVc2VkKGZyZWVWYXJpYWJsZSwgVmFyaWFibGVVc2UuZXhwbGljaXQpOwogICAgfQogICAgc2F2ZWRTY29wZUluZm8uZnJlZVZhcmlhYmxlc0ZvclJ0aS5mb3JFYWNoKAogICAgICAgIChUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQgZnJlZVZhcmlhYmxlRm9yUnRpLAogICAgICAgICAgICBTZXQ8VmFyaWFibGVVc2U+IHVzZVNldCkgewogICAgICBmb3IgKFZhcmlhYmxlVXNlIHVzYWdlIGluIHVzZVNldCkgewogICAgICAgIF9tYXJrVmFyaWFibGVBc1VzZWQoZnJlZVZhcmlhYmxlRm9yUnRpLCB1c2FnZSk7CiAgICAgIH0KICAgIH0pOwogICAgaWYgKF9pc0luc2lkZUNsb3N1cmUgJiYgc2F2ZWRTY29wZUluZm8udGhpc1VzZWRBc0ZyZWVWYXJpYWJsZSkgewogICAgICBfY3VycmVudFNjb3BlSW5mby50aGlzVXNlZEFzRnJlZVZhcmlhYmxlID0gdHJ1ZTsKICAgIH0KICAgIGlmIChfaXNJbnNpZGVDbG9zdXJlKSB7CiAgICAgIF9jdXJyZW50U2NvcGVJbmZvLnRoaXNVc2VkQXNGcmVlVmFyaWFibGVJZk5lZWRzUnRpCiAgICAgICAgICAuYWRkQWxsKHNhdmVkU2NvcGVJbmZvLnRoaXNVc2VkQXNGcmVlVmFyaWFibGVJZk5lZWRzUnRpKTsKICAgIH0KICB9CgogIC8vLyBSZXR1cm4gdHJ1ZSBpZiBbdmFyaWFibGVdJ3MgY29udGV4dCBpcyB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCBleGVjdXRhYmxlCiAgLy8vIGNvbnRleHQuCiAgYm9vbCBfaW5DdXJyZW50Q29udGV4dChpci5Ob2RlIHZhcmlhYmxlKSB7CiAgICBhc3NlcnQodmFyaWFibGUgaXMgaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB8fAogICAgICAgIHZhcmlhYmxlIGlzIFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCk7CiAgICBpZiAodmFyaWFibGUgaXMgVHlwZVZhcmlhYmxlVHlwZVdpdGhDb250ZXh0KSB7CiAgICAgIHJldHVybiB2YXJpYWJsZS5jb250ZXh0ID09IF9leGVjdXRhYmxlQ29udGV4dDsKICAgIH0KICAgIGlyLlRyZWVOb2RlIG5vZGUgPSB2YXJpYWJsZTsKICAgIHdoaWxlIChub2RlICE9IF9vdXRlcm1vc3ROb2RlICYmIG5vZGUgIT0gX2V4ZWN1dGFibGVDb250ZXh0KSB7CiAgICAgIG5vZGUgPSBub2RlLnBhcmVudDsKICAgIH0KICAgIHJldHVybiBub2RlID09IF9leGVjdXRhYmxlQ29udGV4dDsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEZpZWxkKGlyLkZpZWxkIG5vZGUpIHsKICAgIF9jdXJyZW50VHlwZVVzYWdlID0gVmFyaWFibGVVc2UuZmllbGRUeXBlOwogICAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IGNvbXBsZXhpdHk7CiAgICB2aXNpdEludm9rYWJsZShub2RlLCAoKSB7CiAgICAgIGNvbXBsZXhpdHkgPSB2aXNpdE5vZGUobm9kZS5pbml0aWFsaXplcik7CiAgICB9KTsKICAgIF9jdXJyZW50VHlwZVVzYWdlID0gbnVsbDsKICAgIHJldHVybiBjb21wbGV4aXR5OwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0Q29uc3RydWN0b3IoaXIuQ29uc3RydWN0b3Igbm9kZSkgewogICAgdmlzaXRJbnZva2FibGUobm9kZSwgKCkgewogICAgICB2aXNpdE5vZGVzKG5vZGUuaW5pdGlhbGl6ZXJzKTsKICAgICAgdmlzaXROb2RlKG5vZGUuZnVuY3Rpb24pOwogICAgfSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFByb2NlZHVyZShpci5Qcm9jZWR1cmUgbm9kZSkgewogICAgdmlzaXRJbnZva2FibGUobm9kZSwgKCkgewogICAgICB2aXNpdE5vZGUobm9kZS5mdW5jdGlvbik7CiAgICB9KTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKGlyLkZ1bmN0aW9uRXhwcmVzc2lvbiBub2RlKSB7CiAgICB2aXNpdEludm9rYWJsZShub2RlLCAoKSB7CiAgICAgIHZpc2l0SW5WYXJpYWJsZVNjb3BlKG5vZGUsICgpIHsKICAgICAgICB2aXNpdE5vZGUobm9kZS5mdW5jdGlvbik7CiAgICAgIH0pOwogICAgfSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24oaXIuRnVuY3Rpb25EZWNsYXJhdGlvbiBub2RlKSB7CiAgICB2aXNpdEludm9rYWJsZShub2RlLCAoKSB7CiAgICAgIHZpc2l0SW5WYXJpYWJsZVNjb3BlKG5vZGUsICgpIHsKICAgICAgICB2aXNpdE5vZGUobm9kZS5mdW5jdGlvbik7CiAgICAgIH0pOwogICAgfSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdER5bmFtaWNUeXBlKGlyLkR5bmFtaWNUeXBlIG5vZGUpID0+CiAgICAgIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5jb25zdGFudCgpOwoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRCb3R0b21UeXBlKGlyLkJvdHRvbVR5cGUgbm9kZSkgPT4KICAgICAgY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0SW52YWxpZFR5cGUoaXIuSW52YWxpZFR5cGUgbm9kZSkgPT4KICAgICAgY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0Vm9pZFR5cGUoaXIuVm9pZFR5cGUgbm9kZSkgPT4KICAgICAgY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmNvbnN0YW50KCk7CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEludGVyZmFjZVR5cGUoaXIuSW50ZXJmYWNlVHlwZSBub2RlKSB7CiAgICByZXR1cm4gdmlzaXROb2Rlcyhub2RlLnR5cGVBcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0RnVuY3Rpb25UeXBlKGlyLkZ1bmN0aW9uVHlwZSBub2RlKSB7CiAgICBJbml0aWFsaXplckNvbXBsZXhpdHkgY29tcGxleGl0eSA9IHZpc2l0Tm9kZShub2RlLnJldHVyblR5cGUpOwogICAgY29tcGxleGl0eSA9IGNvbXBsZXhpdHkuY29tYmluZSh2aXNpdE5vZGVzKG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMpKTsKICAgIGNvbXBsZXhpdHkgPSBjb21wbGV4aXR5LmNvbWJpbmUodmlzaXROb2Rlcyhub2RlLm5hbWVkUGFyYW1ldGVycykpOwogICAgcmV0dXJuIGNvbXBsZXhpdHkuY29tYmluZSh2aXNpdE5vZGVzKG5vZGUudHlwZVBhcmFtZXRlcnMpKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdE5hbWVkVHlwZShpci5OYW1lZFR5cGUgbm9kZSkgewogICAgcmV0dXJuIHZpc2l0Tm9kZShub2RlLnR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0VHlwZVBhcmFtZXRlclR5cGUoaXIuVHlwZVBhcmFtZXRlclR5cGUgbm9kZSkgewogICAgX2FuYWx5emVUeXBlVmFyaWFibGUobm9kZSwgX2N1cnJlbnRUeXBlVXNhZ2UpOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRJbkNvbnRleHQoaXIuTm9kZSBub2RlLCBWYXJpYWJsZVVzZSB1c2UpIHsKICAgIFZhcmlhYmxlVXNlIG9sZEN1cnJlbnRUeXBlVXNhZ2UgPSBfY3VycmVudFR5cGVVc2FnZTsKICAgIF9jdXJyZW50VHlwZVVzYWdlID0gdXNlOwogICAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IGNvbXBsZXhpdHkgPSB2aXNpdE5vZGUobm9kZSk7CiAgICBfY3VycmVudFR5cGVVc2FnZSA9IG9sZEN1cnJlbnRUeXBlVXNhZ2U7CiAgICByZXR1cm4gY29tcGxleGl0eTsKICB9CgogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdE5vZGVzSW5Db250ZXh0KAogICAgICBMaXN0PGlyLk5vZGU+IG5vZGVzLCBWYXJpYWJsZVVzZSB1c2UpIHsKICAgIFZhcmlhYmxlVXNlIG9sZEN1cnJlbnRUeXBlVXNhZ2UgPSBfY3VycmVudFR5cGVVc2FnZTsKICAgIF9jdXJyZW50VHlwZVVzYWdlID0gdXNlOwogICAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IGNvbXBsZXhpdHkgPSB2aXNpdE5vZGVzKG5vZGVzKTsKICAgIF9jdXJyZW50VHlwZVVzYWdlID0gb2xkQ3VycmVudFR5cGVVc2FnZTsKICAgIHJldHVybiBjb21wbGV4aXR5OwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0VHlwZUxpdGVyYWwoaXIuVHlwZUxpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIHZpc2l0SW5Db250ZXh0KG5vZGUudHlwZSwgVmFyaWFibGVVc2UuZXhwbGljaXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0SXNFeHByZXNzaW9uKGlyLklzRXhwcmVzc2lvbiBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5vcGVyYW5kKTsKICAgIHZpc2l0SW5Db250ZXh0KG5vZGUudHlwZSwgVmFyaWFibGVVc2UuZXhwbGljaXQpOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRBc0V4cHJlc3Npb24oaXIuQXNFeHByZXNzaW9uIG5vZGUpIHsKICAgIHZpc2l0Tm9kZShub2RlLm9wZXJhbmQpOwogICAgdmlzaXRJbkNvbnRleHQobm9kZS50eXBlLAogICAgICAgIG5vZGUuaXNUeXBlRXJyb3IgPyBWYXJpYWJsZVVzZS5pbXBsaWNpdENhc3QgOiBWYXJpYWJsZVVzZS5leHBsaWNpdCk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEF3YWl0RXhwcmVzc2lvbihpci5Bd2FpdEV4cHJlc3Npb24gbm9kZSkgewogICAgdmlzaXROb2RlKG5vZGUub3BlcmFuZCk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFlpZWxkU3RhdGVtZW50KGlyLllpZWxkU3RhdGVtZW50IG5vZGUpIHsKICAgIHZpc2l0Tm9kZShub2RlLmV4cHJlc3Npb24pOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRMb2FkTGlicmFyeShpci5Mb2FkTGlicmFyeSBub2RlKSB7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdENoZWNrTGlicmFyeUlzTG9hZGVkKAogICAgICBpci5DaGVja0xpYnJhcnlJc0xvYWRlZCBub2RlKSB7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEZ1bmN0aW9uTm9kZShpci5GdW5jdGlvbk5vZGUgbm9kZSkgewogICAgVmFyaWFibGVVc2UgcGFyYW1ldGVyVXNhZ2UgPSBub2RlLnBhcmVudCBpcyBpci5NZW1iZXIKICAgICAgICA/IG5ldyBWYXJpYWJsZVVzZS5tZW1iZXJQYXJhbWV0ZXIobm9kZS5wYXJlbnQpCiAgICAgICAgOiBuZXcgVmFyaWFibGVVc2UubG9jYWxQYXJhbWV0ZXIobm9kZS5wYXJlbnQpOwogICAgdmlzaXROb2Rlc0luQ29udGV4dChub2RlLnR5cGVQYXJhbWV0ZXJzLCBwYXJhbWV0ZXJVc2FnZSk7CiAgICBmb3IgKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb24gaW4gbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycykgewogICAgICBfaGFuZGxlVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbiwgcGFyYW1ldGVyVXNhZ2UpOwogICAgfQogICAgZm9yIChpci5WYXJpYWJsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uIGluIG5vZGUubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgIF9oYW5kbGVWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9uLCBwYXJhbWV0ZXJVc2FnZSk7CiAgICB9CiAgICB2aXNpdEluQ29udGV4dCgKICAgICAgICBub2RlLnJldHVyblR5cGUsCiAgICAgICAgbm9kZS5wYXJlbnQgaXMgaXIuTWVtYmVyCiAgICAgICAgICAgID8gbmV3IFZhcmlhYmxlVXNlLm1lbWJlclJldHVyblR5cGUobm9kZS5wYXJlbnQpCiAgICAgICAgICAgIDogbmV3IFZhcmlhYmxlVXNlLmxvY2FsUmV0dXJuVHlwZShub2RlLnBhcmVudCkpOwogICAgdmlzaXROb2RlKG5vZGUuYm9keSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdExpc3RMaXRlcmFsKGlyLkxpc3RMaXRlcmFsIG5vZGUpIHsKICAgIEluaXRpYWxpemVyQ29tcGxleGl0eSBjb21wbGV4aXR5ID0KICAgICAgICB2aXNpdEluQ29udGV4dChub2RlLnR5cGVBcmd1bWVudCwgVmFyaWFibGVVc2UubGlzdExpdGVyYWwpOwogICAgY29tcGxleGl0eSA9IGNvbXBsZXhpdHkuY29tYmluZSh2aXNpdE5vZGVzKG5vZGUuZXhwcmVzc2lvbnMpKTsKICAgIGlmIChub2RlLmlzQ29uc3QpIHsKICAgICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5jb25zdGFudCgpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGNvbXBsZXhpdHkubWFrZUVhZ2VyKCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRTZXRMaXRlcmFsKGlyLlNldExpdGVyYWwgbm9kZSkgewogICAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IGNvbXBsZXhpdHkgPQogICAgICAgIHZpc2l0SW5Db250ZXh0KG5vZGUudHlwZUFyZ3VtZW50LCBWYXJpYWJsZVVzZS5zZXRMaXRlcmFsKTsKICAgIGNvbXBsZXhpdHkgPSBjb21wbGV4aXR5LmNvbWJpbmUodmlzaXROb2Rlcyhub2RlLmV4cHJlc3Npb25zKSk7CiAgICBpZiAobm9kZS5pc0NvbnN0KSB7CiAgICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkuY29uc3RhbnQoKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBjb21wbGV4aXR5Lm1ha2VFYWdlcigpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0TWFwTGl0ZXJhbChpci5NYXBMaXRlcmFsIG5vZGUpIHsKICAgIEluaXRpYWxpemVyQ29tcGxleGl0eSBjb21wbGV4aXR5ID0KICAgICAgICB2aXNpdEluQ29udGV4dChub2RlLmtleVR5cGUsIFZhcmlhYmxlVXNlLm1hcExpdGVyYWwpOwogICAgY29tcGxleGl0eSA9IGNvbXBsZXhpdHkKICAgICAgICAuY29tYmluZSh2aXNpdEluQ29udGV4dChub2RlLnZhbHVlVHlwZSwgVmFyaWFibGVVc2UubWFwTGl0ZXJhbCkpOwogICAgY29tcGxleGl0eSA9IGNvbXBsZXhpdHkuY29tYmluZSh2aXNpdE5vZGVzKG5vZGUuZW50cmllcykpOwogICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmNvbnN0YW50KCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gY29tcGxleGl0eS5tYWtlRWFnZXIoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdE1hcEVudHJ5KGlyLk1hcEVudHJ5IG5vZGUpIHsKICAgIEluaXRpYWxpemVyQ29tcGxleGl0eSBjb21wbGV4aXR5ID0gdmlzaXROb2RlKG5vZGUua2V5KTsKICAgIHJldHVybiBjb21wbGV4aXR5LmNvbWJpbmUodmlzaXROb2RlKG5vZGUudmFsdWUpKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdE51bGxMaXRlcmFsKGlyLk51bGxMaXRlcmFsIG5vZGUpID0+CiAgICAgIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5jb25zdGFudCgpOwoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRTdHJpbmdMaXRlcmFsKGlyLlN0cmluZ0xpdGVyYWwgbm9kZSkgPT4KICAgICAgY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmNvbnN0YW50KCk7CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEludExpdGVyYWwoaXIuSW50TGl0ZXJhbCBub2RlKSA9PgogICAgICBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkuY29uc3RhbnQoKTsKCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0RG91YmxlTGl0ZXJhbChpci5Eb3VibGVMaXRlcmFsIG5vZGUpID0+CiAgICAgIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5jb25zdGFudCgpOwoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRTeW1ib2xMaXRlcmFsKGlyLlN5bWJvbExpdGVyYWwgbm9kZSkgPT4KICAgICAgY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmNvbnN0YW50KCk7CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEJvb2xMaXRlcmFsKGlyLkJvb2xMaXRlcmFsIG5vZGUpID0+CiAgICAgIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5jb25zdGFudCgpOwoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKGlyLlN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSkgewogICAgdmlzaXROb2Rlcyhub2RlLmV4cHJlc3Npb25zKTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0U3RhdGljR2V0KGlyLlN0YXRpY0dldCBub2RlKSB7CiAgICBpci5NZW1iZXIgdGFyZ2V0ID0gbm9kZS50YXJnZXQ7CiAgICBpZiAodGFyZ2V0IGlzIGlyLkZpZWxkKSB7CiAgICAgIHJldHVybiB0YXJnZXQuaXNDb25zdAogICAgICAgICAgPyBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkuY29uc3RhbnQoKQogICAgICAgICAgOiBuZXcgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmVhZ2VyKGZpZWxkczogPGlyLkZpZWxkPnt0YXJnZXR9KTsKICAgIH0gZWxzZSBpZiAodGFyZ2V0IGlzIGlyLlByb2NlZHVyZSAmJgogICAgICAgIHRhcmdldC5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuTWV0aG9kKSB7CiAgICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkuY29uc3RhbnQoKTsKICAgIH0KICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0U3RhdGljU2V0KGlyLlN0YXRpY1NldCBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS52YWx1ZSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFN0YXRpY0ludm9jYXRpb24oaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKSB7CiAgICBpZiAobm9kZS5hcmd1bWVudHMudHlwZXMuaXNOb3RFbXB0eSkgewogICAgICBWYXJpYWJsZVVzZSB1c2FnZTsKICAgICAgaWYgKG5vZGUudGFyZ2V0LmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5GYWN0b3J5KSB7CiAgICAgICAgdXNhZ2UgPSBuZXcgVmFyaWFibGVVc2UuY29uc3RydWN0b3JUeXBlQXJndW1lbnQobm9kZS50YXJnZXQpOwogICAgICB9IGVsc2UgewogICAgICAgIHVzYWdlID0gbmV3IFZhcmlhYmxlVXNlLnN0YXRpY1R5cGVBcmd1bWVudChub2RlLnRhcmdldCk7CiAgICAgIH0KCiAgICAgIHZpc2l0Tm9kZXNJbkNvbnRleHQobm9kZS5hcmd1bWVudHMudHlwZXMsIHVzYWdlKTsKICAgIH0KICAgIHZpc2l0Tm9kZXMobm9kZS5hcmd1bWVudHMucG9zaXRpb25hbCk7CiAgICB2aXNpdE5vZGVzKG5vZGUuYXJndW1lbnRzLm5hbWVkKTsKICAgIHJldHVybiBub2RlLmlzQ29uc3QKICAgICAgICA/IGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5jb25zdGFudCgpCiAgICAgICAgOiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKAogICAgICBpci5Db25zdHJ1Y3Rvckludm9jYXRpb24gbm9kZSkgewogICAgaWYgKG5vZGUuYXJndW1lbnRzLnR5cGVzLmlzTm90RW1wdHkpIHsKICAgICAgdmlzaXROb2Rlc0luQ29udGV4dChub2RlLmFyZ3VtZW50cy50eXBlcywKICAgICAgICAgIG5ldyBWYXJpYWJsZVVzZS5jb25zdHJ1Y3RvclR5cGVBcmd1bWVudChub2RlLnRhcmdldCkpOwogICAgfQogICAgdmlzaXROb2Rlcyhub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsKTsKICAgIHZpc2l0Tm9kZXMobm9kZS5hcmd1bWVudHMubmFtZWQpOwogICAgcmV0dXJuIG5vZGUuaXNDb25zdAogICAgICAgID8gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmNvbnN0YW50KCkKICAgICAgICA6IGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRDb25kaXRpb25hbEV4cHJlc3Npb24oCiAgICAgIGlyLkNvbmRpdGlvbmFsRXhwcmVzc2lvbiBub2RlKSB7CiAgICBJbml0aWFsaXplckNvbXBsZXhpdHkgY29tcGxleGl0eSA9IHZpc2l0Tm9kZShub2RlLmNvbmRpdGlvbik7CiAgICBjb21wbGV4aXR5ID0gY29tcGxleGl0eS5jb21iaW5lKHZpc2l0Tm9kZShub2RlLnRoZW4pKTsKICAgIHJldHVybiBjb21wbGV4aXR5LmNvbWJpbmUodmlzaXROb2RlKG5vZGUub3RoZXJ3aXNlKSk7CiAgICAvLyBEb24ndCB2aXNpdCBgbm9kZS5zdGF0aWNUeXBlYC4KICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdE1ldGhvZEludm9jYXRpb24oaXIuTWV0aG9kSW52b2NhdGlvbiBub2RlKSB7CiAgICBpci5UcmVlTm9kZSByZWNlaXZlciA9IG5vZGUucmVjZWl2ZXI7CiAgICB2aXNpdE5vZGUocmVjZWl2ZXIpOwogICAgaWYgKG5vZGUuYXJndW1lbnRzLnR5cGVzLmlzTm90RW1wdHkpIHsKICAgICAgVmFyaWFibGVVc2UgdXNhZ2U7CiAgICAgIGlmIChyZWNlaXZlciBpcyBpci5WYXJpYWJsZUdldCAmJgogICAgICAgICAgKHJlY2VpdmVyLnZhcmlhYmxlLnBhcmVudCBpcyBpci5Mb2NhbEZ1bmN0aW9uKSkgewogICAgICAgIHVzYWdlID0KICAgICAgICAgICAgbmV3IFZhcmlhYmxlVXNlLmxvY2FsVHlwZUFyZ3VtZW50KHJlY2VpdmVyLnZhcmlhYmxlLnBhcmVudCwgbm9kZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdXNhZ2UgPSBuZXcgVmFyaWFibGVVc2UuaW5zdGFuY2VUeXBlQXJndW1lbnQobm9kZSk7CiAgICAgIH0KICAgICAgdmlzaXROb2Rlc0luQ29udGV4dChub2RlLmFyZ3VtZW50cy50eXBlcywgdXNhZ2UpOwogICAgfQogICAgdmlzaXROb2Rlcyhub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsKTsKICAgIHZpc2l0Tm9kZXMobm9kZS5hcmd1bWVudHMubmFtZWQpOwogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVjb2duaXplIGNvbnN0YW50IG9wZXJhdGlvbnMuCiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFByb3BlcnR5R2V0KGlyLlByb3BlcnR5R2V0IG5vZGUpIHsKICAgIHZpc2l0Tm9kZShub2RlLnJlY2VpdmVyKTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0UHJvcGVydHlTZXQoaXIuUHJvcGVydHlTZXQgbm9kZSkgewogICAgdmlzaXROb2RlKG5vZGUucmVjZWl2ZXIpOwogICAgdmlzaXROb2RlKG5vZGUudmFsdWUpOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXREaXJlY3RQcm9wZXJ0eUdldChpci5EaXJlY3RQcm9wZXJ0eUdldCBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5yZWNlaXZlcik7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdERpcmVjdFByb3BlcnR5U2V0KGlyLkRpcmVjdFByb3BlcnR5U2V0IG5vZGUpIHsKICAgIHZpc2l0Tm9kZShub2RlLnJlY2VpdmVyKTsKICAgIHZpc2l0Tm9kZShub2RlLnZhbHVlKTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0Tm90KGlyLk5vdCBub2RlKSB7CiAgICByZXR1cm4gdmlzaXROb2RlKG5vZGUub3BlcmFuZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRMb2dpY2FsRXhwcmVzc2lvbihpci5Mb2dpY2FsRXhwcmVzc2lvbiBub2RlKSB7CiAgICBJbml0aWFsaXplckNvbXBsZXhpdHkgY29tcGxleGl0eSA9IHZpc2l0Tm9kZShub2RlLmxlZnQpOwogICAgcmV0dXJuIGNvbXBsZXhpdHkuY29tYmluZSh2aXNpdE5vZGUobm9kZS5yaWdodCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0TGV0KGlyLkxldCBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS52YXJpYWJsZSk7CiAgICB2aXNpdE5vZGUobm9kZS5ib2R5KTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0QmxvY2tFeHByZXNzaW9uKGlyLkJsb2NrRXhwcmVzc2lvbiBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5ib2R5KTsKICAgIHZpc2l0Tm9kZShub2RlLnZhbHVlKTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0Q2F0Y2goaXIuQ2F0Y2ggbm9kZSkgewogICAgdmlzaXRJbkNvbnRleHQobm9kZS5ndWFyZCwgVmFyaWFibGVVc2UuZXhwbGljaXQpOwogICAgdmlzaXROb2RlKG5vZGUuZXhjZXB0aW9uKTsKICAgIHZpc2l0Tm9kZShub2RlLnN0YWNrVHJhY2UpOwogICAgdmlzaXRJblZhcmlhYmxlU2NvcGUobm9kZSwgKCkgewogICAgICB2aXNpdE5vZGUobm9kZS5ib2R5KTsKICAgIH0pOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRJbnN0YW50aWF0aW9uKGlyLkluc3RhbnRpYXRpb24gbm9kZSkgewogICAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IGNvbXBsZXhpdHkgPSB2aXNpdE5vZGVzSW5Db250ZXh0KAogICAgICAgIG5vZGUudHlwZUFyZ3VtZW50cywgbmV3IFZhcmlhYmxlVXNlLmluc3RhbnRpYXRpb25UeXBlQXJndW1lbnQobm9kZSkpOwogICAgcmV0dXJuIGNvbXBsZXhpdHkuY29tYmluZSh2aXNpdE5vZGUobm9kZS5leHByZXNzaW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRUaHJvdyhpci5UaHJvdyBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5leHByZXNzaW9uKTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0UmV0aHJvdyhpci5SZXRocm93IG5vZGUpID0+CiAgICAgIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEJsb2NrKGlyLkJsb2NrIG5vZGUpIHsKICAgIHZpc2l0Tm9kZXMobm9kZS5zdGF0ZW1lbnRzKTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0QXNzZXJ0U3RhdGVtZW50KGlyLkFzc2VydFN0YXRlbWVudCBub2RlKSB7CiAgICB2aXNpdEluVmFyaWFibGVTY29wZShub2RlLCAoKSB7CiAgICAgIHZpc2l0Tm9kZShub2RlLmNvbmRpdGlvbik7CiAgICAgIHZpc2l0Tm9kZShub2RlLm1lc3NhZ2UpOwogICAgfSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFJldHVyblN0YXRlbWVudChpci5SZXR1cm5TdGF0ZW1lbnQgbm9kZSkgewogICAgdmlzaXROb2RlKG5vZGUuZXhwcmVzc2lvbik7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEVtcHR5U3RhdGVtZW50KGlyLkVtcHR5U3RhdGVtZW50IG5vZGUpIHsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChpci5FeHByZXNzaW9uU3RhdGVtZW50IG5vZGUpIHsKICAgIHZpc2l0Tm9kZShub2RlLmV4cHJlc3Npb24pOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRTd2l0Y2hTdGF0ZW1lbnQoaXIuU3dpdGNoU3RhdGVtZW50IG5vZGUpIHsKICAgIHZpc2l0Tm9kZShub2RlLmV4cHJlc3Npb24pOwogICAgdmlzaXRJblZhcmlhYmxlU2NvcGUobm9kZSwgKCkgewogICAgICB2aXNpdE5vZGVzKG5vZGUuY2FzZXMpOwogICAgfSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFN3aXRjaENhc2UoaXIuU3dpdGNoQ2FzZSBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5ib2R5KTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0Q29udGludWVTd2l0Y2hTdGF0ZW1lbnQoCiAgICAgIGlyLkNvbnRpbnVlU3dpdGNoU3RhdGVtZW50IG5vZGUpIHsKICAgIHJlZ2lzdGVyQ29udGludWVTd2l0Y2goKTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0QnJlYWtTdGF0ZW1lbnQoaXIuQnJlYWtTdGF0ZW1lbnQgbm9kZSkgewogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRMYWJlbGVkU3RhdGVtZW50KGlyLkxhYmVsZWRTdGF0ZW1lbnQgbm9kZSkgewogICAgdmlzaXROb2RlKG5vZGUuYm9keSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEZpZWxkSW5pdGlhbGl6ZXIoaXIuRmllbGRJbml0aWFsaXplciBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS52YWx1ZSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdExvY2FsSW5pdGlhbGl6ZXIoaXIuTG9jYWxJbml0aWFsaXplciBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS52YXJpYWJsZS5pbml0aWFsaXplcik7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFN1cGVySW5pdGlhbGl6ZXIoaXIuU3VwZXJJbml0aWFsaXplciBub2RlKSB7CiAgICBpZiAobm9kZS5hcmd1bWVudHMudHlwZXMuaXNOb3RFbXB0eSkgewogICAgICB2aXNpdE5vZGVzSW5Db250ZXh0KG5vZGUuYXJndW1lbnRzLnR5cGVzLAogICAgICAgICAgbmV3IFZhcmlhYmxlVXNlLmNvbnN0cnVjdG9yVHlwZUFyZ3VtZW50KG5vZGUudGFyZ2V0KSk7CiAgICB9CiAgICB2aXNpdE5vZGVzKG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwpOwogICAgdmlzaXROb2Rlcyhub2RlLmFyZ3VtZW50cy5uYW1lZCk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIoCiAgICAgIGlyLlJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgaWYgKG5vZGUuYXJndW1lbnRzLnR5cGVzLmlzTm90RW1wdHkpIHsKICAgICAgdmlzaXROb2Rlc0luQ29udGV4dChub2RlLmFyZ3VtZW50cy50eXBlcywKICAgICAgICAgIG5ldyBWYXJpYWJsZVVzZS5jb25zdHJ1Y3RvclR5cGVBcmd1bWVudChub2RlLnRhcmdldCkpOwogICAgfQogICAgdmlzaXROb2Rlcyhub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsKTsKICAgIHZpc2l0Tm9kZXMobm9kZS5hcmd1bWVudHMubmFtZWQpOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRBc3NlcnRJbml0aWFsaXplcihpci5Bc3NlcnRJbml0aWFsaXplciBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5zdGF0ZW1lbnQpOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRJZlN0YXRlbWVudChpci5JZlN0YXRlbWVudCBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5jb25kaXRpb24pOwogICAgdmlzaXROb2RlKG5vZGUudGhlbik7CiAgICB2aXNpdE5vZGUobm9kZS5vdGhlcndpc2UpOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRDb25zdGFudEV4cHJlc3Npb24oaXIuQ29uc3RhbnRFeHByZXNzaW9uIG5vZGUpIHsKICAgIGlmIChub2RlLmNvbnN0YW50IGlzIGlyLlVuZXZhbHVhdGVkQ29uc3RhbnQpIHsKICAgICAgbm9kZS5jb25zdGFudCA9IF9jb25zdGFudEV2YWx1YXRvci5ldmFsdWF0ZShub2RlKTsKICAgIH0KICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkuY29uc3RhbnQoKTsKICB9CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIG5vZGUgaXMgYSBmaWVsZCwgb3IgYSBjb25zdHJ1Y3RvciAoZmFjdG9yeSBvcgogIC8vLyBnZW5lcmF0aXZlKS4KICBib29sIF9pc0ZpZWxkT3JDb25zdHJ1Y3Rvcihpci5Ob2RlIG5vZGUpID0+CiAgICAgIG5vZGUgaXMgaXIuQ29uc3RydWN0b3IgfHwKICAgICAgbm9kZSBpcyBpci5GaWVsZCB8fAogICAgICAobm9kZSBpcyBpci5Qcm9jZWR1cmUgJiYgbm9kZS5pc0ZhY3RvcnkpOwoKICB2b2lkIF9hbmFseXplVHlwZVZhcmlhYmxlKGlyLlR5cGVQYXJhbWV0ZXJUeXBlIHR5cGUsIFZhcmlhYmxlVXNlIHVzYWdlKSB7CiAgICBhc3NlcnQodXNhZ2UgIT0gbnVsbCk7CiAgICBpZiAoX291dGVybW9zdE5vZGUgaXMgaXIuTWVtYmVyKSB7CiAgICAgIFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCB0eXBlVmFyaWFibGUgPQogICAgICAgICAgbmV3IFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCh0eXBlLCBfb3V0ZXJtb3N0Tm9kZSk7CiAgICAgIHN3aXRjaCAodHlwZVZhcmlhYmxlLmtpbmQpIHsKICAgICAgICBjYXNlIFR5cGVWYXJpYWJsZUtpbmQuY2xzOgogICAgICAgICAgaWYgKF9pc0ZpZWxkT3JDb25zdHJ1Y3Rvcihfb3V0ZXJtb3N0Tm9kZSkpIHsKICAgICAgICAgICAgLy8gQ2xhc3MgdHlwZSB2YXJpYWJsZSB1c2VkIGluIGEgZmllbGQgb3IgY29uc3RydWN0b3IuCiAgICAgICAgICAgIF91c2VUeXBlVmFyaWFibGVBc0xvY2FsKHR5cGVWYXJpYWJsZSwgdXNhZ2UpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gQ2xhc3MgdHlwZSB2YXJpYWJsZSB1c2VkIGluIGEgbWV0aG9kLgogICAgICAgICAgICBfcmVnaXN0ZXJOZWVkc1RoaXModXNhZ2UpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBUeXBlVmFyaWFibGVLaW5kLm1ldGhvZDoKICAgICAgICBjYXNlIFR5cGVWYXJpYWJsZUtpbmQubG9jYWw6CiAgICAgICAgICBfdXNlVHlwZVZhcmlhYmxlQXNMb2NhbCh0eXBlVmFyaWFibGUsIHVzYWdlKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgVHlwZVZhcmlhYmxlS2luZC5mdW5jdGlvbjoKICAgICAgICAvLyBUaGUgdHlwZSB2YXJpYWJsZSBpcyBhIGZ1bmN0aW9uIHR5cGUgdmFyaWFibGUsIGxpa2UgYFRgIGluCiAgICAgICAgLy8KICAgICAgICAvLyAgICAgTGlzdDx2b2lkIEZ1bmN0aW9uPFQ+KFQpPiBsaXN0OwogICAgICAgIC8vCiAgICAgICAgLy8gd2hpY2ggZG9lc24ndCBjb3JyZXNwb25kIHRvIGEgY2FwdHVyZWQgbG9jYWwgdmFyaWFibGUuCiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBJZiBbb25seUZvclJ0aUNoZWNrc10gaXMgdHJ1ZSwgdGhlIHZhcmlhYmxlIHdpbGwgYmUgYWRkZWQgdG8gYSBsaXN0CiAgLy8vIGluZGljYXRpbmcgaXQgKm1heSogYmUgdXNlZCBvbmx5IGlmIHJ1bnRpbWUgdHlwZSBpbmZvcm1hdGlvbiBpcyBjaGVja2VkLgogIHZvaWQgX3VzZVR5cGVWYXJpYWJsZUFzTG9jYWwoCiAgICAgIFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCB0eXBlVmFyaWFibGUsIFZhcmlhYmxlVXNlIHVzYWdlKSB7CiAgICBfbWFya1ZhcmlhYmxlQXNVc2VkKHR5cGVWYXJpYWJsZSwgdXNhZ2UpOwogIH0KfQoKZW51bSBDb21wbGV4aXR5TGV2ZWwgewogIGNvbnN0YW50LAogIHBvdGVudGlhbGx5RWFnZXIsCiAgZGVmaW5pdGVseUxhenksCn0KCmNsYXNzIEluaXRpYWxpemVyQ29tcGxleGl0eSB7CiAgZmluYWwgQ29tcGxleGl0eUxldmVsIGxldmVsOwogIGZpbmFsIFNldDxpci5GaWVsZD4gZmllbGRzOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBUaGlzIHNob3VsZCBob2xkIHRoZSBjb25zdGFudCBsaXRlcmFsIGZyb20gQ0ZFIHdoZW4KICAvLyBwcm92aWRlZC4KICBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkuY29uc3RhbnQoKQogICAgICA6IGxldmVsID0gQ29tcGxleGl0eUxldmVsLmNvbnN0YW50LAogICAgICAgIGZpZWxkcyA9IG51bGw7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSB0aGlzIHRvIGNvbGxlY3QgZGF0YSBvbiB0aGUgc2l6ZSBvZiB0aGUKICAvLyAgaW5pdGlhbGl6ZXIuCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmVhZ2VyKHt0aGlzLmZpZWxkc30pCiAgICAgIDogbGV2ZWwgPSBDb21wbGV4aXR5TGV2ZWwucG90ZW50aWFsbHlFYWdlcjsKCiAgY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKQogICAgICA6IGxldmVsID0gQ29tcGxleGl0eUxldmVsLmRlZmluaXRlbHlMYXp5LAogICAgICAgIGZpZWxkcyA9IG51bGw7CgogIEluaXRpYWxpemVyQ29tcGxleGl0eSBjb21iaW5lKEluaXRpYWxpemVyQ29tcGxleGl0eSBvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9IGVsc2UgaWYgKGlzTGF6eSB8fCBvdGhlci5pc0xhenkpIHsKICAgICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgICB9IGVsc2UgaWYgKGlzRWFnZXIgfHwgb3RoZXIuaXNFYWdlcikgewogICAgICBpZiAoZmllbGRzICE9IG51bGwgJiYgb3RoZXIuZmllbGRzICE9IG51bGwpIHsKICAgICAgICBmaWVsZHMuYWRkQWxsKG90aGVyLmZpZWxkcyk7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0gZWxzZSBpZiAoZmllbGRzICE9IG51bGwpIHsKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gb3RoZXI7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoaXNDb25zdGFudCAmJiBvdGhlci5pc0NvbnN0YW50KSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFRoaXMgaXMgY2FzZSBkb2Vzbid0IHdvcmsgaWYgSW5pdGlhbGl6ZXJDb21wbGV4aXR5CiAgICAgIC8vIG9iamVjdHMgb2YgY29uc3RhbnQgY29tcGxleGl0eSBob2xkIHRoZSBjb25zdGFudCBsaXRlcmFsLgogICAgICByZXR1cm4gdGhpczsKICAgIH0gZWxzZSBpZiAoaXNFYWdlcikgewogICAgICBhc3NlcnQob3RoZXIuaXNDb25zdGFudCk7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KGlzQ29uc3RhbnQpOwogICAgICBhc3NlcnQob3RoZXIuaXNFYWdlcik7CiAgICAgIHJldHVybiBvdGhlcjsKICAgIH0KICB9CgogIEluaXRpYWxpemVyQ29tcGxleGl0eSBtYWtlRWFnZXIoKSB7CiAgICBpZiAoaXNMYXp5IHx8IGlzRWFnZXIpIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IEluaXRpYWxpemVyQ29tcGxleGl0eS5lYWdlcigpOwogICAgfQogIH0KCiAgYm9vbCBnZXQgaXNDb25zdGFudCA9PiBsZXZlbCA9PSBDb21wbGV4aXR5TGV2ZWwuY29uc3RhbnQ7CgogIGJvb2wgZ2V0IGlzRWFnZXIgPT4gbGV2ZWwgPT0gQ29tcGxleGl0eUxldmVsLnBvdGVudGlhbGx5RWFnZXI7CgogIGJvb2wgZ2V0IGlzTGF6eSA9PiBsZXZlbCA9PSBDb21wbGV4aXR5TGV2ZWwuZGVmaW5pdGVseUxhenk7CgogIC8vLyBSZXR1cm5zIGEgc2hvcnQgdGV4dHVhbCByZXByZXNlbnRhdGlvbiB1c2VkIGZvciB0ZXN0aW5nLgogIFN0cmluZyBnZXQgc2hvcnRUZXh0IHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHN3aXRjaCAobGV2ZWwpIHsKICAgICAgY2FzZSBDb21wbGV4aXR5TGV2ZWwuY29uc3RhbnQ6CiAgICAgICAgc2Iud3JpdGUoJ2NvbnN0YW50Jyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ29tcGxleGl0eUxldmVsLnBvdGVudGlhbGx5RWFnZXI6CiAgICAgICAgc2Iud3JpdGUoJ2VhZ2VyJyk7CiAgICAgICAg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c3JjL2lyL3V0aWwuZGFydJrlLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfZW52aXJvbm1lbnQuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKCi8vLyBSZXR1cm5zIGEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiBbbm9kZV0gdGhhdCBpbmNsdWRlIHRoZSBydW50aW1lIHR5cGUgYW5kCi8vLyBoYXNoIGNvZGUgb2YgdGhlIG5vZGUgYW5kIGEgb25lIGxpbmUgcHJlZml4IG9mIHRoZSBub2RlIHRvU3RyaW5nIHRleHQuClN0cmluZyBub2RlVG9EZWJ1Z1N0cmluZyhpci5Ob2RlIG5vZGUsIFtpbnQgdGV4dExlbmd0aCA9IDQwXSkgewogIFN0cmluZyBibG9ja1RleHQgPSBub2RlLnRvU3RyaW5nKCkucmVwbGFjZUFsbCgnXG4nLCAnICcpOwogIGlmIChibG9ja1RleHQubGVuZ3RoID4gdGV4dExlbmd0aCkgewogICAgYmxvY2tUZXh0ID0gYmxvY2tUZXh0LnN1YnN0cmluZygwLCB0ZXh0TGVuZ3RoIC0gMykgKyAnLi4uJzsKICB9CiAgcmV0dXJuICcoJHtub2RlLnJ1bnRpbWVUeXBlfToke25vZGUuaGFzaENvZGV9KSR7YmxvY2tUZXh0fSc7Cn0KCi8vLyBDb21wYXJhdG9yIGZvciB0aGUgY2Fub25pY2FsIG9yZGVyIG9yIG5hbWVkIHBhcmFtZXRlcnMuCi8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGlzIHdoZW4gbmFtZWQgcGFyYW1ldGVycyBhcmUgc29ydGVkIGluIGRpbGwuCmludCBuYW1lZE9yZGVyaW5nKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gYSwgaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBiKSB7CiAgcmV0dXJuIGEubmFtZS5jb21wYXJlVG8oYi5uYW1lKTsKfQoKLy8vIENvbXBhcmF0b3IgZm9yIHRoZSBkZWNsYXJhdGlvbiBvcmRlciBvZiBwYXJhbWV0ZXJzLgppbnQgbmF0aXZlT3JkZXJpbmcoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBhLCBpci5WYXJpYWJsZURlY2xhcmF0aW9uIGIpIHsKICByZXR1cm4gYS5maWxlT2Zmc2V0LmNvbXBhcmVUbyhiLmZpbGVPZmZzZXQpOwp9CgpTb3VyY2VTcGFuIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKGlyLlRyZWVOb2RlIG5vZGUpIHsKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVc2UgW2lyLkxvY2F0aW9uXSBkaXJlY3RseSBhcyBhIFtTb3VyY2VTcGFuXS4KICBVcmkgdXJpOwogIGludCBvZmZzZXQ7CiAgd2hpbGUgKG5vZGUgIT0gbnVsbCkgewogICAgaWYgKG5vZGUuZmlsZU9mZnNldCAhPSBpci5UcmVlTm9kZS5ub09mZnNldCkgewogICAgICBvZmZzZXQgPSBub2RlLmZpbGVPZmZzZXQ7CiAgICAgIC8vIEBwYXRjaCBhbm5vdGF0aW9ucyBoYXZlIG5vIGxvY2F0aW9uLgogICAgICB1cmkgPSBub2RlLmxvY2F0aW9uPy5maWxlOwogICAgICBicmVhazsKICAgIH0KICAgIG5vZGUgPSBub2RlLnBhcmVudDsKICB9CiAgaWYgKHVyaSAhPSBudWxsKSB7CiAgICByZXR1cm4gbmV3IFNvdXJjZVNwYW4odXJpLCBvZmZzZXQsIG9mZnNldCArIDEpOwogIH0KICByZXR1cm4gbnVsbDsKfQoKLy8vIFJldHVybnMgdGhlIGBBc3luY01hcmtlcmAgY29ycmVzcG9uZGluZyB0byBgbm9kZS5hc3luY01hcmtlcmAuCkFzeW5jTWFya2VyIGdldEFzeW5jTWFya2VyKGlyLkZ1bmN0aW9uTm9kZSBub2RlKSB7CiAgc3dpdGNoIChub2RlLmFzeW5jTWFya2VyKSB7CiAgICBjYXNlIGlyLkFzeW5jTWFya2VyLkFzeW5jOgogICAgICByZXR1cm4gQXN5bmNNYXJrZXIuQVNZTkM7CiAgICBjYXNlIGlyLkFzeW5jTWFya2VyLkFzeW5jU3RhcjoKICAgICAgcmV0dXJuIEFzeW5jTWFya2VyLkFTWU5DX1NUQVI7CiAgICBjYXNlIGlyLkFzeW5jTWFya2VyLlN5bmM6CiAgICAgIHJldHVybiBBc3luY01hcmtlci5TWU5DOwogICAgY2FzZSBpci5Bc3luY01hcmtlci5TeW5jU3RhcjoKICAgICAgcmV0dXJuIEFzeW5jTWFya2VyLlNZTkNfU1RBUjsKICAgIGNhc2UgaXIuQXN5bmNNYXJrZXIuU3luY1lpZWxkaW5nOgogICAgZGVmYXVsdDoKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAiQXN5bmMgbWFya2VyICR7bm9kZS5hc3luY01hcmtlcn0gaXMgbm90IHN1cHBvcnRlZC4iKTsKICB9Cn0KCi8vLyBLZXJuZWwgZW5jb2RlcyBhIG51bGwtYXdhcmUgZXhwcmVzc2lvbiBgYT8uYmAgYXMKLy8vCi8vLyAgICAgbGV0IGZpbmFsICMxID0gYSBpbiAjMSA9PSBudWxsID8gbnVsbCA6ICMxLmIKLy8vCi8vLyBbZ2V0TnVsbEF3YXJlRXhwcmVzc2lvbl0gcmVjb2duaXplcyBzdWNoIGV4cHJlc3Npb25zIHN0b3JpbmcgdGhlIHJlc3VsdCBpbgovLy8gYSBbTnVsbEF3YXJlRXhwcmVzc2lvbl0gb2JqZWN0LgovLy8KLy8vIFtzeW50aGV0aWNWYXJpYWJsZV0gaG9sZHMgdGhlIHN5bnRoZXNpemVkIGAjMWAgdmFyaWFibGUuIFtleHByZXNzaW9uXSBob2xkcwovLy8gdGhlIGAjMS5iYCBleHByZXNzaW9uLiBbcmVjZWl2ZXJdIHJldHVybnMgYGFgIGV4cHJlc3Npb24uIFtwYXJlbnRdIHJldHVybnMKLy8vIHRoZSBwYXJlbnQgb2YgdGhlIGxldCBub2RlLCBpLmUuIHRoZSBwYXJlbnQgbm9kZSBvZiB0aGUgb3JpZ2luYWwgbnVsbC1hd2FyZQovLy8gZXhwcmVzc2lvbi4gW2xldF0gcmV0dXJucyB0aGUgbGV0IG5vZGUgY3JlYXRlZCBmb3IgdGhlIGVuY29kaW5nLgpjbGFzcyBOdWxsQXdhcmVFeHByZXNzaW9uIHsKICBmaW5hbCBpci5WYXJpYWJsZURlY2xhcmF0aW9uIHN5bnRoZXRpY1ZhcmlhYmxlOwogIGZpbmFsIGlyLkV4cHJlc3Npb24gZXhwcmVzc2lvbjsKCiAgTnVsbEF3YXJlRXhwcmVzc2lvbih0aGlzLnN5bnRoZXRpY1ZhcmlhYmxlLCB0aGlzLmV4cHJlc3Npb24pOwoKICBpci5FeHByZXNzaW9uIGdldCByZWNlaXZlciA9PiBzeW50aGV0aWNWYXJpYWJsZS5pbml0aWFsaXplcjsKCiAgaXIuVHJlZU5vZGUgZ2V0IHBhcmVudCA9PiBzeW50aGV0aWNWYXJpYWJsZS5wYXJlbnQucGFyZW50OwoKICBpci5MZXQgZ2V0IGxldCA9PiBzeW50aGV0aWNWYXJpYWJsZS5wYXJlbnQ7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IGxldC50b1N0cmluZygpOwp9CgpOdWxsQXdhcmVFeHByZXNzaW9uIGdldE51bGxBd2FyZUV4cHJlc3Npb24oaXIuVHJlZU5vZGUgbm9kZSkgewogIGlmIChub2RlIGlzIGlyLkxldCkgewogICAgaXIuRXhwcmVzc2lvbiBib2R5ID0gbm9kZS5ib2R5OwogICAgaWYgKG5vZGUudmFyaWFibGUubmFtZSA9PSBudWxsICYmCiAgICAgICAgbm9kZS52YXJpYWJsZS5pc0ZpbmFsICYmCiAgICAgICAgYm9keSBpcyBpci5Db25kaXRpb25hbEV4cHJlc3Npb24gJiYKICAgICAgICBib2R5LmNvbmRpdGlvbiBpcyBpci5NZXRob2RJbnZvY2F0aW9uICYmCiAgICAgICAgYm9keS50aGVuIGlzIGlyLk51bGxMaXRlcmFsKSB7CiAgICAgIGlyLk1ldGhvZEludm9jYXRpb24gaW52b2NhdGlvbiA9IGJvZHkuY29uZGl0aW9uOwogICAgICBpci5FeHByZXNzaW9uIHJlY2VpdmVyID0gaW52b2NhdGlvbi5yZWNlaXZlcjsKICAgICAgaWYgKGludm9jYXRpb24ubmFtZS5uYW1lID09ICc9PScgJiYKICAgICAgICAgIHJlY2VpdmVyIGlzIGlyLlZhcmlhYmxlR2V0ICYmCiAgICAgICAgICByZWNlaXZlci52YXJpYWJsZSA9PSBub2RlLnZhcmlhYmxlICYmCiAgICAgICAgICBpbnZvY2F0aW9uLmFyZ3VtZW50cy5wb3NpdGlvbmFsLnNpbmdsZSBpcyBpci5OdWxsTGl0ZXJhbCkgewogICAgICAgIC8vIFdlIGhhdmUKICAgICAgICAvLyAgIGxldCAjdDEgPSBlMCBpbiAjdDEgPT0gbnVsbCA/IG51bGwgOiBlMQogICAgICAgIHJldHVybiBuZXcgTnVsbEF3YXJlRXhwcmVzc2lvbihub2RlLnZhcmlhYmxlLCBib2R5Lm90aGVyd2lzZSk7CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIG51bGw7Cn0KCi8vLyBDaGVjayB3aGV0aGVyIFtub2RlXSBpcyBpbW1lZGlhdGVseSBndWFyZGVkIGJ5IGEKLy8vIFtpci5DaGVja0xpYnJhcnlJc0xvYWRlZF0sIGFuZCBoZW5jZSB0aGUgbm9kZSBpcyBhIGRlZmVycmVkIGFjY2Vzcy4KaXIuTGlicmFyeURlcGVuZGVuY3kgZ2V0RGVmZXJyZWRJbXBvcnQoaXIuVHJlZU5vZGUgbm9kZSkgewogIC8vIE5vdGU6IHRoaXMgY29kZSByZWxpZXMgb24gdGhlIENGRSBnZW5lcmF0aW5nIHRoZSBjb2RlIGFzIHdlIGV4cGVjdCBpdCBoZXJlLgogIC8vIElmIG9uZSBkYXkgd2Ugb3B0aW1pemUgYXdheSByZWR1bmRhbnQgQ2hlY2tMaWJyYXJ5SXNMb2FkZWQgaW5zdHJ1Y3Rpb25zLAogIC8vIHdlJ2QgbmVlZCB0byBkZXJpdmUgdGhpcyBpbmZvcm1hdGlvbiBkaXJlY3RseSBmcm9tIHRoZSBDRkUgKFNlZSAjMzUwMDUpLAogIGlyLlRyZWVOb2RlIHBhcmVudCA9IG5vZGUucGFyZW50OwoKICAvLyBUT0RPKHNpZ211bmQpOiByZW1vdmUgd2hlbiBDRkUgZ2VuZXJhdGVzIHRoZSBjb3JyZWN0IHRyZWUgKCMzNTMyMCkuIEZvcgogIC8vIGluc3RhbmNlLCBpdCBjdXJyZW50bHkgZ2VuZXJhdGVzCiAgLy8KICAvLyAgIGxldCBfID0gY2hlY2socHJlZml4KSBpbiAocHJlZml4OjpmaWVsZC5wcm9wZXJ0eSkKICAvLwogIC8vIGluc3RlYWQgb2Y6CiAgLy8KICAvLyAgIChsZXQgXyA9IGNoZWNrKHByZWZpeCkgaW4gcHJlZml4OjpmaWVsZCkucHJvcGVydHkKICBpZiAobm9kZSBpcyBpci5TdGF0aWNHZXQgfHwgbm9kZSBpcyBpci5Db25zdGFudEV4cHJlc3Npb24pIHsKICAgIHdoaWxlIChwYXJlbnQgaXMgaXIuUHJvcGVydHlHZXQgfHwgcGFyZW50IGlzIGlyLk1ldGhvZEludm9jYXRpb24pIHsKICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDsKICAgIH0KICB9CgogIGlmIChwYXJlbnQgaXMgaXIuTGV0KSB7CiAgICB2YXIgaW5pdGlhbGl6ZXIgPSBwYXJlbnQudmFyaWFibGUuaW5pdGlhbGl6ZXI7CiAgICBpZiAoaW5pdGlhbGl6ZXIgaXMgaXIuQ2hlY2tMaWJyYXJ5SXNMb2FkZWQpIHsKICAgICAgcmV0dXJuIGluaXRpYWxpemVyLmltcG9ydDsKICAgIH0KICB9CiAgcmV0dXJuIG51bGw7Cn0KCmNsYXNzIF9GcmVlVmFyaWFibGVWaXNpdG9yIGltcGxlbWVudHMgaXIuRGFydFR5cGVWaXNpdG9yPGJvb2w+IHsKICBjb25zdCBfRnJlZVZhcmlhYmxlVmlzaXRvcigpOwoKICBib29sIHZpc2l0KGlyLkRhcnRUeXBlIHR5cGUpIHsKICAgIGlmICh0eXBlICE9IG51bGwpIHJldHVybiB0eXBlLmFjY2VwdCh0aGlzKTsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgdmlzaXRMaXN0KExpc3Q8aXIuRGFydFR5cGU+IHR5cGVzKSB7CiAgICBmb3IgKGlyLkRhcnRUeXBlIHR5cGUgaW4gdHlwZXMpIHsKICAgICAgaWYgKHZpc2l0KHR5cGUpKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUeXBlZGVmVHlwZShpci5UeXBlZGVmVHlwZSBub2RlKSB7CiAgICByZXR1cm4gdmlzaXRMaXN0KG5vZGUudHlwZUFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0VHlwZVBhcmFtZXRlclR5cGUoaXIuVHlwZVBhcmFtZXRlclR5cGUgbm9kZSkgewogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RnVuY3Rpb25UeXBlKGlyLkZ1bmN0aW9uVHlwZSBub2RlKSB7CiAgICBpZiAodmlzaXQobm9kZS5yZXR1cm5UeXBlKSkgcmV0dXJuIHRydWU7CiAgICBpZiAodmlzaXRMaXN0KG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMpKSByZXR1cm4gdHJ1ZTsKICAgIGZvciAoaXIuTmFtZWRUeXBlIG5hbWVkVHlwZSBpbiBub2RlLm5hbWVkUGFyYW1ldGVycykgewogICAgICBpZiAodmlzaXQobmFtZWRUeXBlLnR5cGUpKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRJbnRlcmZhY2VUeXBlKGlyLkludGVyZmFjZVR5cGUgbm9kZSkgewogICAgcmV0dXJuIHZpc2l0TGlzdChub2RlLnR5cGVBcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEJvdHRvbVR5cGUoaXIuQm90dG9tVHlwZSBub2RlKSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFZvaWRUeXBlKGlyLlZvaWRUeXBlIG5vZGUpID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RHluYW1pY1R5cGUoaXIuRHluYW1pY1R5cGUgbm9kZSkgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRJbnZhbGlkVHlwZShpci5JbnZhbGlkVHlwZSBub2RlKSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBkZWZhdWx0RGFydFR5cGUoaXIuRGFydFR5cGUgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkZyZWVWYXJpYWJsZVZpc2l0b3IuZGVmYXVsdFR5cGVOb2RlIik7CiAgfQp9CgovLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW3R5cGVdIGNvbnRhaW5zIGEgdHlwZSB2YXJpYWJsZS4KLy8vCi8vLyBBbGwgdHlwZSB2YXJpYWJsZXMgKGNsYXNzIHR5cGUgdmFyaWFibGVzLCBnZW5lcmljIG1ldGhvZCB0eXBlIHZhcmlhYmxlcywKLy8vIGFuZCBmdW5jdGlvbiB0eXBlIHZhcmlhYmxlcykgYXJlIGNvbnNpZGVyZWQuCmJvb2wgY29udGFpbnNGcmVlVmFyaWFibGVzKGlyLkRhcnRUeXBlIHR5cGUpID0+CiAgICB0eXBlLmFjY2VwdChjb25zdCBfRnJlZVZhcmlhYmxlVmlzaXRvcigpKTsKgNkATk48ASg0LzUBGSQBUUtAPCdABD8CATxOSCMCAThJLwIBPUgLDhkzIC4hDQYYBBU0BA8CAUMzHh8gIyUeHyIkJg0iQQQCATUENQRPJARQT1BFHDIiAUABPwE9AS4BDCcCAT8YJCYhLDEnNzQqKDBGEzVHCAYEDwIBNUg7UU5OJAFNJgU5BREFOT9IHgYEARozMiEGBA8CAUEgASEwEgQBLCYkBhIEAQwvKgQBDDsRBAEMMS07Oy4GEgQBDDMqBAEMNQEMMQEMNwEMNwEMK0cEAgE3BE0xMC8BIXBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL3V0aWwuZGFydDdzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pci9zdGF0aWNfdHlwZV9jYWNoZS5kYXJ0h34vLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NvcmVfdHlwZXMuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfZW52aXJvbm1lbnQuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKCmNsYXNzIFN0YXRpY1R5cGVDYWNoZSB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnc3RhdGljLXR5cGUtY2FjaGUnOwoKICBmaW5hbCBNYXA8aXIuRXhwcmVzc2lvbiwgaXIuRGFydFR5cGU+IF9leHByZXNzaW9uVHlwZXM7CiAgZmluYWwgTWFwPGlyLkZvckluU3RhdGVtZW50LCBpci5EYXJ0VHlwZT4gX2ZvckluSXRlcmF0b3JUeXBlczsKCiAgY29uc3QgU3RhdGljVHlwZUNhY2hlKAogICAgICBbdGhpcy5fZXhwcmVzc2lvblR5cGVzID0gY29uc3Qge30sIHRoaXMuX2ZvckluSXRlcmF0b3JUeXBlc10pOwoKICBmYWN0b3J5IFN0YXRpY1R5cGVDYWNoZS5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBpci5NZW1iZXIgY29udGV4dCkgewogICAgcmV0dXJuIHNvdXJjZS5pbk1lbWJlckNvbnRleHQoY29udGV4dCwgKCkgewogICAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgICAgTWFwPGlyLkV4cHJlc3Npb24sIGlyLkRhcnRUeXBlPiBleHByZXNzaW9uVHlwZXMgPQogICAgICAgICAgc291cmNlLnJlYWRUcmVlTm9kZU1hcEluQ29udGV4dChzb3VyY2UucmVhZERhcnRUeXBlTm9kZSk7CiAgICAgIE1hcDxpci5Gb3JJblN0YXRlbWVudCwgaXIuRGFydFR5cGU+IGZvckluSXRlcmF0b3JUeXBlcyA9IHNvdXJjZQogICAgICAgICAgLnJlYWRUcmVlTm9kZU1hcEluQ29udGV4dChzb3VyY2UucmVhZERhcnRUeXBlTm9kZSwgZW1wdHlBc051bGw6IHRydWUpOwogICAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICAgIHJldHVybiBuZXcgU3RhdGljVHlwZUNhY2hlKGV4cHJlc3Npb25UeXBlcywgZm9ySW5JdGVyYXRvclR5cGVzKTsKICAgIH0pOwogIH0KCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaywgaXIuTWVtYmVyIGNvbnRleHQpIHsKICAgIHNpbmsuaW5NZW1iZXJDb250ZXh0KGNvbnRleHQsICgpIHsKICAgICAgc2luay5iZWdpbih0YWcpOwogICAgICBzaW5rLndyaXRlVHJlZU5vZGVNYXBJbkNvbnRleHQoX2V4cHJlc3Npb25UeXBlcywgc2luay53cml0ZURhcnRUeXBlTm9kZSk7CiAgICAgIHNpbmsud3JpdGVUcmVlTm9kZU1hcEluQ29udGV4dCgKICAgICAgICAgIF9mb3JJbkl0ZXJhdG9yVHlwZXMsIHNpbmsud3JpdGVEYXJ0VHlwZU5vZGUsCiAgICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgICBzaW5rLmVuZCh0YWcpOwogICAgfSk7CiAgfQoKICBpci5EYXJ0VHlwZSBvcGVyYXRvciBbXShpci5FeHByZXNzaW9uIG5vZGUpID0+IF9leHByZXNzaW9uVHlwZXNbbm9kZV07CgogIGlyLkRhcnRUeXBlIGdldEZvckluSXRlcmF0b3JUeXBlKGlyLkZvckluU3RhdGVtZW50IG5vZGUpIHsKICAgIHJldHVybiBfZm9ySW5JdGVyYXRvclR5cGVzICE9IG51bGwgPyBfZm9ySW5JdGVyYXRvclR5cGVzW25vZGVdIDogbnVsbDsKICB9Cn0KNQBOTjwBKDQvMTUBLgEYMQE6QQEZRQEuLjAZOERGURdHCAQBOycXUCY3HBUIBAFJAT1LBAIBLnBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL3N0YXRpY190eXBlX2NhY2hlLmRhcnQ8c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvdHlwZV9ncmFwaF9ub2Rlcy5kYXJ0wAEUgC8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGNvbXBpbGVyLnNyYy5pbmZlcnJlci50eXBlX2dyYXBoX25vZGVzOwoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nIHNob3cgSXRlcmFibGVCYXNlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JyBzaG93IElkZW50aWZpZXJzOwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvcjsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCcgc2hvdyBJbW11dGFibGVFbXB0eVNldCwgU2V0bGV0OwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwppbXBvcnQgJ2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICdkZWJ1Zy5kYXJ0JyBhcyBkZWJ1ZzsKaW1wb3J0ICdsb2NhbHNfaGFuZGxlci5kYXJ0JyBzaG93IEFyZ3VtZW50c1R5cGVzOwppbXBvcnQgJ2luZmVycmVyX2VuZ2luZS5kYXJ0JzsKaW1wb3J0ICd0eXBlX3N5c3RlbS5kYXJ0JzsKCi8vLyBDb21tb24gY2xhc3MgZm9yIGFsbCBub2RlcyBpbiB0aGUgZ3JhcGguIFRoZSBjdXJyZW50IG5vZGVzIGFyZToKLy8vCi8vLyAtIENvbmNyZXRlIHR5cGVzCi8vLyAtIEVsZW1lbnRzCi8vLyAtIENhbGwgc2l0ZXMKLy8vIC0gTmFycm93aW5nIGluc3RydWN0aW9ucwovLy8gLSBQaGkgaW5zdHJ1Y3Rpb25zCi8vLyAtIENvbnRhaW5lcnMgKGZvciBsaXN0cykKLy8vIC0gVHlwZSBvZiB0aGUgZWxlbWVudCBpbiBhIGNvbnRhaW5lcgovLy8KLy8vIEEgbm9kZSBoYXMgYSBzZXQgb2YgYXNzaWdubWVudHMgYW5kIHVzZXJzLiBBc3NpZ25tZW50cyBhcmUgdXNlZCB0bwovLy8gY29tcHV0ZSB0aGUgdHlwZSBvZiB0aGUgbm9kZSAoW1R5cGVJbmZvcm1hdGlvbi5jb21wdXRlVHlwZV0pLiBVc2VycyBhcmUKLy8vIGFkZGVkIHRvIHRoZSBpbmZlcnJlcidzIHdvcmsgcXVldWUgd2hlbiB0aGUgdHlwZSBvZiB0aGUgbm9kZQovLy8gY2hhbmdlcy4KYWJzdHJhY3QgY2xhc3MgVHlwZUluZm9ybWF0aW9uIHsKICBTZXQ8VHlwZUluZm9ybWF0aW9uPiB1c2VyczsKICB2YXIgLyogTGlzdHxQYXJhbWV0ZXJBc3NpZ25tZW50cyAqLyBfYXNzaWdubWVudHM7CgogIC8vLyBUaGUgdHlwZSB0aGUgaW5mZXJyZXIgaGFzIGZvdW5kIGZvciB0aGlzIFtUeXBlSW5mb3JtYXRpb25dLgogIC8vLyBJbml0aWFsbHkgZW1wdHkuCiAgQWJzdHJhY3RWYWx1ZSB0eXBlOwoKICAvLy8gVGhlIGdyYXBoIG5vZGUgb2YgdGhlIG1lbWJlciB0aGlzIFtUeXBlSW5mb3JtYXRpb25dIG5vZGUgYmVsb25ncyB0by4KICBmaW5hbCBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY29udGV4dDsKCiAgLy8vIFRoZSBlbGVtZW50IHRoaXMgW1R5cGVJbmZvcm1hdGlvbl0gbm9kZSBiZWxvbmdzIHRvLgogIE1lbWJlckVudGl0eSBnZXQgY29udGV4dE1lbWJlciA9PiBjb250ZXh0ID09IG51bGwgPyBudWxsIDogY29udGV4dC5tZW1iZXI7CgogIEl0ZXJhYmxlPFR5cGVJbmZvcm1hdGlvbj4gZ2V0IGFzc2lnbm1lbnRzID0+IF9hc3NpZ25tZW50czsKCiAgLy8vIFdlIGFiYW5kb24gaW5mZXJlbmNlIGluIGNlcnRhaW4gY2FzZXMgKGNvbXBsZXggY3ljbGljIGZsb3csIG5hdGl2ZQogIC8vLyBiZWhhdmlvdXJzLCBldGMuKS4gSW4gc29tZSBjYXNlLCB3ZSBtaWdodCByZXN1bWUgaW5mZXJlbmNlIGluIHRoZQogIC8vLyBjbG9zdXJlIHRyYWNlciwgd2hpY2ggaXMgaGFuZGxlZCBieSBjaGVja2luZyB3aGV0aGVyIFthc3NpZ25tZW50c10gaGFzCiAgLy8vIGJlZW4gc2V0IHRvIFtTVE9QX1RSQUNLSU5HX0FTU0lHTk1FTlRTX01BUktFUl0uCiAgYm9vbCBhYmFuZG9uSW5mZXJlbmNpbmcgPSBmYWxzZTsKICBib29sIGdldCBtaWdodFJlc3VtZSA9PgogICAgICAhaWRlbnRpY2FsKGFzc2lnbm1lbnRzLCBTVE9QX1RSQUNLSU5HX0FTU0lHTk1FTlRTX01BUktFUik7CgogIC8vLyBOdW1iZXIgb2YgdGltZXMgdGhpcyBbVHlwZUluZm9ybWF0aW9uXSBoYXMgY2hhbmdlZCB0eXBlLgogIGludCByZWZpbmVDb3VudCA9IDA7CgogIC8vLyBXaGV0aGVyIHRoaXMgW1R5cGVJbmZvcm1hdGlvbl0gaXMgY3VycmVudGx5IGluIHRoZSBpbmZlcnJlcidzCiAgLy8vIHdvcmsgcXVldWUuCiAgYm9vbCBpblF1ZXVlID0gZmFsc2U7CgogIC8vLyBVc2VkIHRvIGRpc2FibGUgZW5xdWV1ZWluZyBvZiB0eXBlIGluZm9ybWF0aW9ucyB3aGVyZSB3ZSBrbm93IHRoYXQgdGhlaXIKICAvLy8gdHlwZSB3aWxsIG5vdCBjaGFuZ2UgZm9yIG90aGVyIHJlYXNvbnMgdGhhbiBiZWluZyBzdGFibGUuIEZvciBleGFtcGxlLAogIC8vLyBpZiBpbmZlcmVuY2UgaXMgZGlzYWJsZWQgZm9yIGEgdHlwZSBhbmQgaXQgaXMgaGFyZHdpcmVkIHRvIGR5bmFtaWMsIHRoaXMKICAvLy8gaXMgc2V0IHRvIHRydWUgdG8gc3BhcmUgcmVjb21wdXRpbmcgZHluYW1pYyBhZ2FpbiBhbmQgYWdhaW4uIENoYW5naW5nIHRoaXMKICAvLy8gdG8gZmFsc2Ugc2hvdWxkIG5ldmVyIGNoYW5nZSBpbmZlcmVuY2Ugb3V0Y29tZSwganVzdCBtYWtlIGlzIHNsb3dlci4KICBib29sIGRvTm90RW5xdWV1ZSA9IGZhbHNlOwoKICAvLy8gV2hldGhlciB0aGlzIFtUeXBlSW5mb3JtYXRpb25dIGhhcyBhIHN0YWJsZSBbdHlwZV0gdGhhdCB3aWxsIG5vdAogIC8vLyBjaGFuZ2UuCiAgYm9vbCBpc1N0YWJsZSA9IGZhbHNlOwoKICAvLyBUeXBlSW5mb3JtYXRpb25zIGFyZSB1bmlxdWUuIFN0b3JlIGFuIGFyYml0cmFyeSBpZGVudGl0eSBoYXNoIGNvZGUuCiAgc3RhdGljIGludCBfc3RhdGljSGFzaENvZGUgPSAwOwogIEBvdmVycmlkZQogIGZpbmFsIGludCBoYXNoQ29kZSA9IF9zdGF0aWNIYXNoQ29kZSA9IChfc3RhdGljSGFzaENvZGUgKyAxKS50b1Vuc2lnbmVkKDMwKTsKCiAgYm9vbCBnZXQgaXNDb25jcmV0ZSA9PiBmYWxzZTsKCiAgVHlwZUluZm9ybWF0aW9uKHRoaXMudHlwZSwgdGhpcy5jb250ZXh0KQogICAgICA6IF9hc3NpZ25tZW50cyA9IDxUeXBlSW5mb3JtYXRpb24+W10sCiAgICAgICAgdXNlcnMgPSBuZXcgU2V0bGV0PFR5cGVJbmZvcm1hdGlvbj4oKTsKCiAgVHlwZUluZm9ybWF0aW9uLm5vQXNzaWdubWVudHModGhpcy50eXBlLCB0aGlzLmNvbnRleHQpCiAgICAgIDogX2Fzc2lnbm1lbnRzID0gY29uc3QgPFR5cGVJbmZvcm1hdGlvbj5bXSwKICAgICAgICB1c2VycyA9IG5ldyBTZXRsZXQ8VHlwZUluZm9ybWF0aW9uPigpOwoKICBUeXBlSW5mb3JtYXRpb24udW50cmFja2VkKHRoaXMudHlwZSkKICAgICAgOiBfYXNzaWdubWVudHMgPSBjb25zdCA8VHlwZUluZm9ybWF0aW9uPltdLAogICAgICAgIHVzZXJzID0gY29uc3QgSW1tdXRhYmxlRW1wdHlTZXQoKSwKICAgICAgICBjb250ZXh0ID0gbnVsbDsKCiAgVHlwZUluZm9ybWF0aW9uLndpdGhBc3NpZ25tZW50cyh0aGlzLnR5cGUsIHRoaXMuY29udGV4dCwgdGhpcy5fYXNzaWdubWVudHMpCiAgICAgIDogdXNlcnMgPSBuZXcgU2V0bGV0PFR5cGVJbmZvcm1hdGlvbj4oKTsKCiAgdm9pZCBhZGRVc2VyKFR5cGVJbmZvcm1hdGlvbiB1c2VyKSB7CiAgICBhc3NlcnQoIXVzZXIuaXNDb25jcmV0ZSk7CiAgICB1c2Vycy5hZGQodXNlcik7CiAgfQoKICB2b2lkIGFkZFVzZXJzT2YoVHlwZUluZm9ybWF0aW9uIG90aGVyKSB7CiAgICB1c2Vycy5hZGRBbGwob3RoZXIudXNlcnMpOwogIH0KCiAgdm9pZCByZW1vdmVVc2VyKFR5cGVJbmZvcm1hdGlvbiB1c2VyKSB7CiAgICBhc3NlcnQoIXVzZXIuaXNDb25jcmV0ZSk7CiAgICB1c2Vycy5yZW1vdmUodXNlcik7CiAgfQoKICAvLyBUaGUgYmVsb3cgaXMgbm90IGEgY29tcGlsZSB0aW1lIGNvbnN0YW50IHRvIG1ha2UgaXQgZGlmZmVyZW50aWFibGUKICAvLyBmcm9tIG90aGVyIGVtcHR5IGxpc3RzIG9mIFtUeXBlSW5mb3JtYXRpb25dLgogIHN0YXRpYyBmaW5hbCBTVE9QX1RSQUNLSU5HX0FTU0lHTk1FTlRTX01BUktFUiA9IG5ldyBMaXN0PFR5cGVJbmZvcm1hdGlvbj4oMCk7CgogIGJvb2wgYXJlQXNzaWdubWVudHNUcmFja2VkKCkgewogICAgcmV0dXJuIGFzc2lnbm1lbnRzICE9IFNUT1BfVFJBQ0tJTkdfQVNTSUdOTUVOVFNfTUFSS0VSOwogIH0KCiAgdm9pZCBhZGRBc3NpZ25tZW50KFR5cGVJbmZvcm1hdGlvbiBhc3NpZ25tZW50KSB7CiAgICAvLyBDaGVhcCBvbmUtbGV2ZWwgY3ljbGUgZGV0ZWN0aW9uLgogICAgaWYgKGFzc2lnbm1lbnQgPT0gdGhpcykgcmV0dXJuOwogICAgaWYgKGFyZUFzc2lnbm1lbnRzVHJhY2tlZCgpKSB7CiAgICAgIF9hc3NpZ25tZW50cy5hZGQoYXNzaWdubWVudCk7CiAgICB9CiAgICAvLyBFdmVuIGlmIHdlIGFiYW5kb24gaW5mZXJlbmNpbmcgb24gdGhpcyBbVHlwZUluZm9ybWF0aW9uXSB3ZQogICAgLy8gbmVlZCB0byBjb2xsZWN0IHRoZSB1c2Vycywgc28gdGhhdCBwaGFzZXMgdGhhdCB0cmFjayB3aGVyZQogICAgLy8gZWxlbWVudHMgZmxvdyBpbiBzdGlsbCB3b3JrLgogICAgYXNzaWdubWVudC5hZGRVc2VyKHRoaXMpOwogIH0KCiAgdm9pZCByZW1vdmVBc3NpZ25tZW50KFR5cGVJbmZvcm1hdGlvbiBhc3NpZ25tZW50KSB7CiAgICBpZiAoIWFiYW5kb25JbmZlcmVuY2luZyB8fCBtaWdodFJlc3VtZSkgewogICAgICBfYXNzaWdubWVudHMucmVtb3ZlKGFzc2lnbm1lbnQpOwogICAgfQogICAgLy8gV2UgY2FuIGhhdmUgbXVsdGlwbGUgYXNzaWdubWVudHMgb2YgdGhlIHNhbWUgW1R5cGVJbmZvcm1hdGlvbl0uCiAgICBpZiAoIWFzc2lnbm1lbnRzLmNvbnRhaW5zKGFzc2lnbm1lbnQpKSB7CiAgICAgIGFzc2lnbm1lbnQucmVtb3ZlVXNlcih0aGlzKTsKICAgIH0KICB9CgogIEFic3RyYWN0VmFsdWUgcmVmaW5lKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gYWJhbmRvbkluZmVyZW5jaW5nID8gc2FmZVR5cGUoaW5mZXJyZXIpIDogY29tcHV0ZVR5cGUoaW5mZXJyZXIpOwogIH0KCiAgLy8vIENvbXB1dGVzIGEgbmV3IHR5cGUgZm9yIHRoaXMgW1R5cGVJbmZvcm1hdGlvbl0gbm9kZSBkZXBlbmRpbmcgb24gaXRzCiAgLy8vIHBvdGVudGlhbGx5IHVwZGF0ZWQgaW5wdXRzLgogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpOwoKICAvLy8gUmV0dXJucyBhbiBhcHByb3hpbWF0aW9uIGZvciB0aGlzIFtUeXBlSW5mb3JtYXRpb25dIG5vZGUgdGhhdCBpcyBhbHdheXMKICAvLy8gc2FmZSB0byB1c2UuIFVzZWQgd2hlbiBhYmFuZG9uaW5nIGluZmVyZW5jZSBvbiBhIG5vZGUuCiAgQWJzdHJhY3RWYWx1ZSBzYWZlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIGluZmVycmVyLnR5cGVzLmR5bmFtaWNUeXBlLnR5cGU7CiAgfQoKICB2b2lkIGdpdmVVcChJbmZlcnJlckVuZ2luZSBpbmZlcnJlciwge2Jvb2wgY2xlYXJBc3NpZ25tZW50czogdHJ1ZX0pIHsKICAgIGFiYW5kb25JbmZlcmVuY2luZyA9IHRydWU7CiAgICAvLyBEbyBub3QgcmVtb3ZlIFt0aGlzXSBhcyBhIHVzZXIgb2Ygbm9kZXMgaW4gW2Fzc2lnbm1lbnRzXSwKICAgIC8vIGJlY2F1c2Ugb3VyIHRyYWNpbmcgYW5hbHlzaXMgY291bGQgYmUgaW50ZXJlc3RlZCBpbiB0cmFjaW5nCiAgICAvLyB0aGlzIG5vZGUuCiAgICBpZiAoY2xlYXJBc3NpZ25tZW50cykgX2Fzc2lnbm1lbnRzID0gU1RPUF9UUkFDS0lOR19BU1NJR05NRU5UU19NQVJLRVI7CiAgICAvLyBEbyBub3QgcmVtb3ZlIHVzZXJzIGJlY2F1c2Ugb3VyIHRyYWNpbmcgYW5hbHlzaXMgY291bGQgYmUKICAgIC8vIGludGVyZXN0ZWQgaW4gdHJhY2luZyB0aGUgdXNlcnMgb2YgdGhpcyBub2RlLgogIH0KCiAgdm9pZCBjbGVhcigpIHsKICAgIF9hc3NpZ25tZW50cyA9IFNUT1BfVFJBQ0tJTkdfQVNTSUdOTUVOVFNfTUFSS0VSOwogICAgdXNlcnMgPSBjb25zdCBJbW11dGFibGVFbXB0eVNldCgpOwogIH0KCiAgLy8vIFJlc2V0IHRoZSBhbmFseXNpcyBvZiB0aGlzIG5vZGUgYnkgbWFraW5nIGl0cyB0eXBlIGVtcHR5LgoKICBib29sIHJlc2V0KEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICBpZiAoYWJhbmRvbkluZmVyZW5jaW5nKSByZXR1cm4gZmFsc2U7CiAgICB0eXBlID0gaW5mZXJyZXIuYWJzdHJhY3RWYWx1ZURvbWFpbi5lbXB0eVR5cGU7CiAgICByZWZpbmVDb3VudCA9IDA7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGFjY2VwdChUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpOwoKICAvLy8gVGhlIFtFbGVtZW50XSB3aGVyZSB0aGlzIFtUeXBlSW5mb3JtYXRpb25dIHdhcyBjcmVhdGVkLiBNYXkgYmUgYG51bGxgCiAgLy8vIGZvciBzb21lIFtUeXBlSW5mb3JtYXRpb25dIG5vZGVzLCB3aGVyZSB3ZSBkbyBub3QgbmVlZCB0byBzdG9yZQogIC8vLyB0aGUgaW5mb3JtYXRpb24uCiAgTWVtYmVyRW50aXR5IGdldCBvd25lciA9PiAoY29udGV4dCAhPSBudWxsKSA/IGNvbnRleHQubWVtYmVyIDogbnVsbDsKCiAgLy8vIFJldHVybnMgd2hldGhlciB0aGUgdHlwZSBjYW5ub3QgY2hhbmdlIGFmdGVyIGl0IGhhcyBiZWVuCiAgLy8vIGluZmVycmVkLgogIGJvb2wgaGFzU3RhYmxlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuICFtaWdodFJlc3VtZSAmJiBhc3NpZ25tZW50cy5ldmVyeSgoZSkgPT4gZS5pc1N0YWJsZSk7CiAgfQoKICB2b2lkIHJlbW92ZUFuZENsZWFyUmVmZXJlbmNlcyhJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgYXNzaWdubWVudHMuZm9yRWFjaCgoaW5mbykgewogICAgICBpbmZvLnJlbW92ZVVzZXIodGhpcyk7CiAgICB9KTsKICB9CgogIHZvaWQgc3RhYmlsaXplKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZW1vdmVBbmRDbGVhclJlZmVyZW5jZXMoaW5mZXJyZXIpOwogICAgLy8gRG8gbm90IHJlbW92ZSB1c2VycyBiZWNhdXNlIHRoZSB0cmFjaW5nIGFuYWx5c2lzIGNvdWxkIGJlIGludGVyZXN0ZWQKICAgIC8vIGluIHRyYWNpbmcgdGhlIHVzZXJzIG9mIHRoaXMgbm9kZS4KICAgIF9hc3NpZ25tZW50cyA9IFNUT1BfVFJBQ0tJTkdfQVNTSUdOTUVOVFNfTUFSS0VSOwogICAgYWJhbmRvbkluZmVyZW5jaW5nID0gdHJ1ZTsKICAgIGlzU3RhYmxlID0gdHJ1ZTsKICB9CgogIHZvaWQgbWF5YmVSZXN1bWUoKSB7CiAgICBpZiAoIW1pZ2h0UmVzdW1lKSByZXR1cm47CiAgICBhYmFuZG9uSW5mZXJlbmNpbmcgPSBmYWxzZTsKICAgIGRvTm90RW5xdWV1ZSA9IGZhbHNlOwogIH0KCiAgLy8vIERlc3Ryb3lzIGluZm9ybWF0aW9uIG5vdCBuZWVkZWQgYWZ0ZXIgdHlwZSBpbmZlcmVuY2UuCiAgdm9pZCBjbGVhbnVwKCkgewogICAgdXNlcnMgPSBudWxsOwogICAgX2Fzc2lnbm1lbnRzID0gbnVsbDsKICB9CgogIFN0cmluZyB0b1N0cnVjdHVyZWRUZXh0KFN0cmluZyBpbmRlbnQpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIF90b1N0cnVjdHVyZWRUZXh0KHNiLCBpbmRlbnQsIG5ldyBTZXQ8VHlwZUluZm9ybWF0aW9uPigpKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgdm9pZCBfdG9TdHJ1Y3R1cmVkVGV4dCgKICAgICAgU3RyaW5nQnVmZmVyIHNiLCBTdHJpbmcgaW5kZW50LCBTZXQ8VHlwZUluZm9ybWF0aW9uPiBzZWVuKSB7CiAgICBzYi53cml0ZSh0b1N0cmluZygpKTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIEFwcGx5YWJsZVR5cGVJbmZvcm1hdGlvbiBpbXBsZW1lbnRzIFR5cGVJbmZvcm1hdGlvbiB7CiAgYm9vbCBtaWdodEJlUGFzc2VkVG9GdW5jdGlvbkFwcGx5ID0gZmFsc2U7Cn0KCi8vLyBNYXJrZXIgbm9kZSB1c2VkIG9ubHkgZHVyaW5nIHRyZWUgY29uc3RydWN0aW9uIGJ1dCBub3QgZHVyaW5nIGFjdHVhbCB0eXBlCi8vLyByZWZpbmVtZW50LgovLy8KLy8vIEN1cnJlbnRseSwgdGhpcyBpcyB1c2VkIHRvIGdpdmUgYSB0eXBlIHRvIGFuIG9wdGlvbmFsIHBhcmFtZXRlciBldmVuIGJlZm9yZQovLy8gdGhlIGNvcnJlc3BvbmRpbmcgZGVmYXVsdCBleHByZXNzaW9uIGhhcyBiZWVuIGFuYWx5emVkLiBTZWUKLy8vIFtnZXREZWZhdWx0VHlwZU9mUGFyYW1ldGVyXSBhbmQgW3NldERlZmF1bHRUeXBlT2ZQYXJhbWV0ZXJdIGZvciBkZXRhaWxzLgpjbGFzcyBQbGFjZWhvbGRlclR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIFR5cGVJbmZvcm1hdGlvbiB7CiAgUGxhY2Vob2xkZXJUeXBlSW5mb3JtYXRpb24oCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNvbnRleHQpCiAgICAgIDogc3VwZXIoYWJzdHJhY3RWYWx1ZURvbWFpbi5lbXB0eVR5cGUsIGNvbnRleHQpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdChUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgdmlzaXQgcGxhY2Vob2xkZXIiKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVmaW5lIHBsYWNlaG9sZGVyIik7CiAgfQoKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICJQbGFjZWhvbGRlciBbJGhhc2hDb2RlXSI7Cn0KCi8vLyBQYXJhbWV0ZXJzIG9mIGluc3RhbmNlIGZ1bmN0aW9ucyBiZWhhdmUgZGlmZmVyZW50bHkgdGhhbiBvdGhlcgovLy8gZWxlbWVudHMgYmVjYXVzZSB0aGUgaW5mZXJyZXIgbWF5IHJlbW92ZSBhc3NpZ25tZW50cy4gVGhpcyBoYXBwZW5zCi8vLyB3aGVuIHRoZSByZWNlaXZlciBvZiBhIGR5bmFtaWMgY2FsbCBzaXRlIGNhbiBiZSByZWZpbmVkCi8vLyB0byBhIHR5cGUgd2hlcmUgd2Uga25vdyBtb3JlIGFib3V0IHdoaWNoIGluc3RhbmNlIG1ldGhvZCBpcyBiZWluZwovLy8gY2FsbGVkLgpjbGFzcyBQYXJhbWV0ZXJBc3NpZ25tZW50cyBleHRlbmRzIEl0ZXJhYmxlQmFzZTxUeXBlSW5mb3JtYXRpb24+IHsKICBmaW5hbCBNYXA8VHlwZUluZm9ybWF0aW9uLCBpbnQ+IGFzc2lnbm1lbnRzID0gbmV3IE1hcDxUeXBlSW5mb3JtYXRpb24sIGludD4oKTsKCiAgdm9pZCByZW1vdmUoVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGludCBleGlzdGluZyA9IGFzc2lnbm1lbnRzW2luZm9dOwogICAgaWYgKGV4aXN0aW5nID09IG51bGwpIHJldHVybjsKICAgIGlmIChleGlzdGluZyA9PSAxKSB7CiAgICAgIGFzc2lnbm1lbnRzLnJlbW92ZShpbmZvKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2lnbm1lbnRzW2luZm9dID0gZXhpc3RpbmcgLSAxOwogICAgfQogIH0KCiAgdm9pZCBhZGQoVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGludCBleGlzdGluZyA9IGFzc2lnbm1lbnRzW2luZm9dOwogICAgaWYgKGV4aXN0aW5nID09IG51bGwpIHsKICAgICAgYXNzaWdubWVudHNbaW5mb10gPSAxOwogICAgfSBlbHNlIHsKICAgICAgYXNzaWdubWVudHNbaW5mb10gPSBleGlzdGluZyArIDE7CiAgICB9CiAgfQoKICB2b2lkIHJlcGxhY2UoVHlwZUluZm9ybWF0aW9uIG9sZCwgVHlwZUluZm9ybWF0aW9uIHJlcGxhY2VtZW50KSB7CiAgICBpbnQgZXhpc3RpbmcgPSBhc3NpZ25tZW50c1tvbGRdOwogICAgaWYgKGV4aXN0aW5nICE9IG51bGwpIHsKICAgICAgaW50IG90aGVyID0gYXNzaWdubWVudHNbcmVwbGFjZW1lbnRdOwogICAgICBpZiAob3RoZXIgIT0gbnVsbCkgZXhpc3RpbmcgKz0gb3RoZXI7CiAgICAgIGFzc2lnbm1lbnRzW3JlcGxhY2VtZW50XSA9IGV4aXN0aW5nOwogICAgICBhc3NpZ25tZW50cy5yZW1vdmUob2xkKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEl0ZXJhdG9yPFR5cGVJbmZvcm1hdGlvbj4gZ2V0IGl0ZXJhdG9yID0+IGFzc2lnbm1lbnRzLmtleXMuaXRlcmF0b3I7CiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8VHlwZUluZm9ybWF0aW9uPiB3aGVyZShGdW5jdGlvbiBmKSA9PiBhc3NpZ25tZW50cy5rZXlzLndoZXJlKGYpOwoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zKE9iamVjdCBpbmZvKSA9PiBhc3NpZ25tZW50cy5jb250YWluc0tleShpbmZvKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gYXNzaWdubWVudHMua2V5cy50b0xpc3QoKS50b1N0cmluZygpOwp9CgovLy8gQSBub2RlIHJlcHJlc2VudGluZyBhIHJlc29sdmVkIGVsZW1lbnQgb2YgdGhlIGNvbXBvbmVudC4gVGhlIGtpbmQgb2YKLy8vIGVsZW1lbnRzIHRoYXQgbmVlZCBhbiBbRWxlbWVudFR5cGVJbmZvcm1hdGlvbl0gYXJlOgovLy8KLy8vIC0gRnVuY3Rpb25zIChpbmNsdWRpbmcgZ2V0dGVycyBhbmQgc2V0dGVycykKLy8vIC0gQ29uc3RydWN0b3JzIChmYWN0b3J5IG9yIGdlbmVyYXRpdmUpCi8vLyAtIEZpZWxkcwovLy8gLSBQYXJhbWV0ZXJzCi8vLyAtIExvY2FsIHZhcmlhYmxlcyBtdXRhdGVkIGluIGNsb3N1cmVzCi8vLwovLy8gVGhlIFtFbGVtZW50VHlwZUluZm9ybWF0aW9uXSBvZiBhIGZ1bmN0aW9uIGFuZCBhIGNvbnN0cnVjdG9yIGlzIGl0cwovLy8gcmV0dXJuIHR5cGUuCi8vLwovLy8gTm90ZSB0aGF0IGEgZmV3IGVsZW1lbnRzIG9mIHRoZXNlIGtpbmRzIG11c3QgYmUgdHJlYXRlZCBzcGVjaWFsbHksCi8vLyBhbmQgdGhleSBhcmUgZGVhbHQgaW4gW0VsZW1lbnRUeXBlSW5mb3JtYXRpb24uaGFuZGxlU3BlY2lhbENhc2VzXToKLy8vCi8vLyAtIFBhcmFtZXRlcnMgb2YgY2xvc3VyZXMsIGBub1N1Y2hNZXRob2RgIGFuZCBgY2FsbGAgaW5zdGFuY2UKLy8vICAgbWV0aG9kczogd2UgY3VycmVudGx5IGRvIG5vdCBpbmZlciB0eXBlcyBmb3IgdGhvc2UuCi8vLwovLy8gLSBGaWVsZHMgYW5kIHBhcmFtZXRlcnMgYmVpbmcgYXNzaWduZWQgYnkgc3ludGhlc2l6ZWQgY2FsbHMgZG9uZSBieQovLy8gICB0aGUgYmFja2VuZDogd2UgZG8gbm90IGtub3cgd2hhdCB0eXBlcyB0aGUgYmFja2VuZCB3aWxsIHVzZS4KLy8vCi8vLyAtIE5hdGl2ZSBmdW5jdGlvbnMgYW5kIGZpZWxkczogYmVjYXVzZSBuYXRpdmUgbWV0aG9kcyBjb250YWluIG5vIERhcnQKLy8vICAgY29kZSwgYW5kIG5hdGl2ZSBmaWVsZHMgZG8gbm90IGhhdmUgRGFydCBhc3NpZ25tZW50cywgd2UganVzdAovLy8gICB0cnVzdCB0aGVpciB0eXBlIGFubm90YXRpb24uCi8vLwphYnN0cmFjdCBjbGFzcyBFbGVtZW50VHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgVHlwZUluZm9ybWF0aW9uIHsKICAvLy8gTWFya2VyIHRvIGRpc2FibGUgaW5mZXJlbmNlIGZvciBjbG9zdXJlcyBpbiBbaGFuZGxlU3BlY2lhbENhc2VzXS4KICBib29sIGRpc2FibGVJbmZlcmVuY2VGb3JDbG9zdXJlcyA9IHRydWU7CgogIEVsZW1lbnRUeXBlSW5mb3JtYXRpb24uX2ludGVybmFsKAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBjb250ZXh0KQogICAgICA6IHN1cGVyKGFic3RyYWN0VmFsdWVEb21haW4uZW1wdHlUeXBlLCBjb250ZXh0KTsKICBFbGVtZW50VHlwZUluZm9ybWF0aW9uLl93aXRoQXNzaWdubWVudHMoCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNvbnRleHQsCiAgICAgIFBhcmFtZXRlckFzc2lnbm1lbnRzIGFzc2lnbm1lbnRzKQogICAgICA6IHN1cGVyLndpdGhBc3NpZ25tZW50cygKICAgICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5lbXB0eVR5cGUsIGNvbnRleHQsIGFzc2lnbm1lbnRzKTsKCiAgU3RyaW5nIGdldEluZmVycmVkU2lnbmF0dXJlKFR5cGVTeXN0ZW0gdHlwZXMpOwoKICBTdHJpbmcgZ2V0IGRlYnVnTmFtZTsKfQoKLy8vIEEgbm9kZSByZXByZXNlbnRpbmcgbWVtYmVycyBpbiB0aGUgYnJvYWRlc3Qgc2Vuc2U6Ci8vLwovLy8gLSBGdW5jdGlvbnMKLy8vIC0gQ29uc3RydWN0b3JzCi8vLyAtIEZpZWxkcyAoYWxzbyBzeW50aGV0aWMgb25lcyBkdWUgdG8gY2xvc3VyZXMpCi8vLyAtIExvY2FsIGZ1bmN0aW9ucyAoY2xvc3VyZXMpCi8vLwovLy8gVGhlc2Ugc2hvdWxkIG5ldmVyIGJlIGNyZWF0ZWQgZGlyZWN0bHkgYnV0IGluc3RlYWQgYXJlIGNvbnN0cnVjdGVkIGJ5Ci8vLyB0aGUgW0VsZW1lbnRUeXBlSW5mb3JtYXRpb25dIGZhY3RvcnkuCmFic3RyYWN0IGNsYXNzIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIEVsZW1lbnRUeXBlSW5mb3JtYXRpb24KICAgIHdpdGggQXBwbHlhYmxlVHlwZUluZm9ybWF0aW9uIHsKICBmaW5hbCBNZW1iZXJFbnRpdHkgX21lbWJlcjsKCiAgLy8vIElmIFtlbGVtZW50XSBpcyBhIGZ1bmN0aW9uLCBbY2xvc3VyaXplZENvdW50XSBpcyB0aGUgbnVtYmVyIG9mCiAgLy8vIHRpbWVzIGl0IGlzIGNsb3N1cml6ZWQuIFRoZSB2YWx1ZSBnZXRzIHVwZGF0ZWQgd2hpbGUgaW5mZXJyaW5nLgogIGludCBjbG9zdXJpemVkQ291bnQgPSAwOwoKICAvLyBTdHJpY3QgYGJvb2xgIHZhbHVlIGlzIGNvbXB1dGVkIGluIGNsZWFudXAoKS4gQWxzbyB1c2VkIGFzIGEgZmxhZyB0byBzZWUgaWYKICAvLyBjbGVhbnVwIGhhcyBiZWVuIGNhbGxlZC4KICBib29sIF9pc0NhbGxlZE9uY2UgPSBudWxsOwoKICAvLy8gVGhpcyBtYXAgY29udGFpbnMgdGhlIGNhbGxlcnMgb2YgW2VsZW1lbnRdLiBJdCBzdG9yZXMgYWxsIHVuaXF1ZSBjYWxsCiAgLy8vIHNpdGVzIHRvIGVuYWJsZSBjb3VudGluZyB0aGUgZ2xvYmFsIG51bWJlciBvZiBjYWxsIHNpdGVzIG9mIFtlbGVtZW50XS4KICAvLy8KICAvLy8gQSBjYWxsIHNpdGUgaXMgZWl0aGVyIGFuIEFTVCBbYXN0Lk5vZGVdLCBhbiBbRWxlbWVudF0gKHNlZSB1c2VzIG9mCiAgLy8vIFtzeW50aGVzaXplRm9yd2FyZGluZ0NhbGxdIGluIFtTaW1wbGVUeXBlSW5mZXJyZXJWaXNpdG9yXSkgb3IgYW4gSVIKICAvLy8gW2lyLk5vZGVdLgogIC8vLwogIC8vLyBUaGUgZ2xvYmFsIGluZm9ybWF0aW9uIGlzIHN1bW1hcml6ZWQgaW4gW2NsZWFudXBdLCBhZnRlciB3aGljaCBbX2NhbGxlcnNdCiAgLy8vIGlzIHNldCB0byBgbnVsbGAuCiAgTWFwPE1lbWJlckVudGl0eSwgU2V0bGV0PE9iamVjdD4+IF9jYWxsZXJzOwoKICBNZW1iZXJUeXBlSW5mb3JtYXRpb24uX2ludGVybmFsKAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sIHRoaXMuX21lbWJlcikKICAgICAgOiBzdXBlci5faW50ZXJuYWwoYWJzdHJhY3RWYWx1ZURvbWFpbiwgbnVsbCk7CgogIE1lbWJlckVudGl0eSBnZXQgbWVtYmVyID0+IF9tZW1iZXI7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZGVidWdOYW1lID0+ICckbWVtYmVyJzsKCiAgdm9pZCBhZGRDYWxsKE1lbWJlckVudGl0eSBjYWxsZXIsIE9iamVjdCBub2RlKSB7CiAgICBfY2FsbGVycyA/Pz0gPE1lbWJlckVudGl0eSwgU2V0bGV0PE9iamVjdD4+e307CiAgICBfY2FsbGVycy5wdXRJZkFic2VudChjYWxsZXIsICgpID0+IG5ldyBTZXRsZXQoKSkuYWRkKG5vZGUpOwogIH0KCiAgdm9pZCByZW1vdmVDYWxsKE1lbWJlckVudGl0eSBjYWxsZXIsIE9iamVjdCBub2RlKSB7CiAgICBpZiAoX2NhbGxlcnMgPT0gbnVsbCkgcmV0dXJuOwogICAgU2V0bGV0IGNhbGxzID0gX2NhbGxlcnNbY2FsbGVyXTsKICAgIGlmIChjYWxscyA9PSBudWxsKSByZXR1cm47CiAgICBjYWxscy5yZW1vdmUobm9kZSk7CiAgICBpZiAoY2FsbHMuaXNFbXB0eSkgewogICAgICBfY2FsbGVycy5yZW1vdmUoY2FsbGVyKTsKICAgIH0KICB9CgogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZ2V0IGNhbGxlcnNGb3JUZXN0aW5nIHsKICAgIHJldHVybiBfY2FsbGVycz8ua2V5czsKICB9CgogIGJvb2wgaXNDYWxsZWRPbmNlKCkgewogICAgLy8gSWYgdGhpcyBhc3NlcnQgZmlyZXMgaXQgbWVhbnMgdGhhdCB0aGlzIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBmb3IgdGhlCiAgICAvLyBlbGVtZW50IHdhcyBub3QgcGFydCBvZiB0eXBlIGluZmVyZW5jZS4gVGhpcyBoYXBwZW5zIGZvcgogICAgLy8gQ29uc3RydWN0b3JCb2R5RWxlbWVudHMsIHNvIGd1YXJkIHRoZSBjYWxsIHdpdGggYSB0ZXN0IGZvcgogICAgLy8gQ29uc3RydWN0b3JCb2R5RWxlbWVudC4gRm9yIG90aGVyIGVsZW1lbnRzLCBpbnZlc3RpZ2F0ZSB3aHkgdGhlIGVsZW1lbnQKICAgIC8vIHdhcyBub3QgcHJlc2VudCBmb3IgdHlwZSBpbmZlcmVuY2UuCiAgICBhc3NlcnQoX2lzQ2FsbGVkT25jZSAhPSBudWxsKTsKICAgIHJldHVybiBfaXNDYWxsZWRPbmNlID8/IGZhbHNlOwogIH0KCiAgYm9vbCBfY29tcHV0ZUlzQ2FsbGVkT25jZSgpIHsKICAgIGlmIChfY2FsbGVycyA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICBpbnQgY291bnQgPSAwOwogICAgZm9yICh2YXIgc2V0IGluIF9jYWxsZXJzLnZhbHVlcykgewogICAgICBjb3VudCArPSBzZXQubGVuZ3RoOwogICAgICBpZiAoY291bnQgPiAxKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gY291bnQgPT0gMTsKICB9CgogIHZvaWQgY29tcHV0ZUlzQ2FsbGVkT25jZSgpIHsKICAgIGFzc2VydChfaXNDYWxsZWRPbmNlID09IG51bGwsICJpc0NhbGxlZE9uY2UgaGFzIGFscmVhZHkgYmVlbiBjb21wdXRlZC4iKTsKICAgIF9pc0NhbGxlZE9uY2UgPSBfY29tcHV0ZUlzQ2FsbGVkT25jZSgpOwogIH0KCiAgYm9vbCBnZXQgaXNDbG9zdXJpemVkID0+IGNsb3N1cml6ZWRDb3VudCA+IDA7CgogIC8vIENsb3N1cml6ZWQgbWV0aG9kcyBuZXZlciBiZWNvbWUgc3RhYmxlIHRvIGVuc3VyZSB0aGF0IHRoZSBpbmZvcm1hdGlvbiBpbgogIC8vIFt1c2Vyc10gaXMgYWNjdXJhdGUuIFRoZSBpbmZlcmVuY2Ugc3RvcHMgdHJhY2tpbmcgdXNlcnMgZm9yIHN0YWJsZSB0eXBlcy4KICAvLyBOb3RlIHRoYXQgd2Ugb25seSBvdmVycmlkZSB0aGUgZ2V0dGVyLCB0aGUgc2V0dGVyIHdpbGwgc3RpbGwgbW9kaWZ5IHRoZQogIC8vIHN0YXRlIG9mIHRoZSBbaXNTdGFibGVdIGZpZWxkIGluaGVyaXRlZCBmcm9tIFtUeXBlSW5mb3JtYXRpb25dLgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU3RhYmxlID0+IHN1cGVyLmlzU3RhYmxlICYmICFpc0Nsb3N1cml6ZWQ7CgogIEFic3RyYWN0VmFsdWUgaGFuZGxlU3BlY2lhbENhc2VzKEluZmVycmVyRW5naW5lIGluZmVycmVyKTsKCiAgQWJzdHJhY3RWYWx1ZSBfaGFuZGxlRnVuY3Rpb25DYXNlKAogICAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwgSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIGlmIChpbmZlcnJlci5jbG9zZWRXb3JsZC5uYXRpdmVEYXRhLmlzTmF0aXZlTWVtYmVyKGZ1bmN0aW9uKSkgewogICAgICAvLyBVc2UgdGhlIHR5cGUgYW5ub3RhdGlvbiBhcyB0aGUgdHlwZSBmb3IgbmF0aXZlIGVsZW1lbnRzLiBXZQogICAgICAvLyBhbHNvIGdpdmUgdXAgb24gaW5mZXJyaW5nIHRvIG1ha2Ugc3VyZSB0aGlzIGVsZW1lbnQgbmV2ZXIKICAgICAgLy8gZ29lcyBpbiB0aGUgd29yayBxdWV1ZS4KICAgICAgZ2l2ZVVwKGluZmVycmVyKTsKICAgICAgcmV0dXJuIGluZmVycmVyCiAgICAgICAgICAudHlwZU9mTmF0aXZlQmVoYXZpb3IoCiAgICAgICAgICAgICAgaW5mZXJyZXIuY2xvc2VkV29ybGQubmF0aXZlRGF0YS5nZXROYXRpdmVNZXRob2RCZWhhdmlvcihmdW5jdGlvbikpCiAgICAgICAgICAudHlwZTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQWJzdHJhY3RWYWx1ZSBwb3RlbnRpYWxseU5hcnJvd1R5cGUoCiAgICAgIEFic3RyYWN0VmFsdWUgbWFzaywgSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHJldHVybiBfcG90ZW50aWFsbHlOYXJyb3dUeXBlKG1hc2ssIGluZmVycmVyKTsKICB9CgogIEFic3RyYWN0VmFsdWUgX3BvdGVudGlhbGx5TmFycm93VHlwZSgKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrLCBJbmZlcnJlckVuZ2luZSBpbmZlcnJlcik7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIEFic3RyYWN0VmFsdWUgc3BlY2lhbCA9IGhhbmRsZVNwZWNpYWxDYXNlcyhpbmZlcnJlcik7CiAgICBpZiAoc3BlY2lhbCAhPSBudWxsKSByZXR1cm4gcG90ZW50aWFsbHlOYXJyb3dUeXBlKHNwZWNpYWwsIGluZmVycmVyKTsKICAgIHJldHVybiBwb3RlbnRpYWxseU5hcnJvd1R5cGUoCiAgICAgICAgaW5mZXJyZXIudHlwZXMuY29tcHV0ZVR5cGVNYXNrKGFzc2lnbm1lbnRzKSwgaW5mZXJyZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBzYWZlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIHBvdGVudGlhbGx5TmFycm93VHlwZShzdXBlci5zYWZlVHlwZShpbmZlcnJlciksIGluZmVycmVyKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdNZW1iZXIgJF9tZW1iZXIgJHR5cGUnOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoVHlwZUluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdE1lbWJlclR5cGVJbmZvcm1hdGlvbih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2xlYW51cCgpIHsKICAgIF9jYWxsZXJzID0gbnVsbDsKICAgIHN1cGVyLmNsZWFudXAoKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXRJbmZlcnJlZFNpZ25hdHVyZShUeXBlU3lzdGVtIHR5cGVzKSB7CiAgICByZXR1cm4gdHlwZXMuZ2V0SW5mZXJyZWRTaWduYXR1cmVPZk1ldGhvZChfbWVtYmVyKTsKICB9Cn0KCmNsYXNzIEZpZWxkVHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgTWVtYmVyVHlwZUluZm9ybWF0aW9uIHsKICBGaWVsZEVudGl0eSBnZXQgX2ZpZWxkID0+IF9tZW1iZXI7CiAgZmluYWwgRGFydFR5cGUgX3R5cGU7CgogIEZpZWxkVHlwZUluZm9ybWF0aW9uKAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sIEZpZWxkRW50aXR5IGVsZW1lbnQsIHRoaXMuX3R5cGUpCiAgICAgIDogc3VwZXIuX2ludGVybmFsKGFic3RyYWN0VmFsdWVEb21haW4sIGVsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGhhbmRsZVNwZWNpYWxDYXNlcyhJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgaWYgKCFpbmZlcnJlci5jYW5GaWVsZEJlVXNlZEZvckdsb2JhbE9wdGltaXphdGlvbnMoX2ZpZWxkKSB8fAogICAgICAgIGluZmVycmVyLmFzc3VtZUR5bmFtaWMoX2ZpZWxkKSkgewogICAgICAvLyBEbyBub3QgaW5mZXIgdHlwZXMgZm9yIGZpZWxkcyB0aGF0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGFubm90YXRpb24gb3IKICAgICAgLy8gYXJlIGFzc2lnbmVkIGJ5IHN5bnRoZXNpemVkIGNhbGxzCgogICAgICBnaXZlVXAoaW5mZXJyZXIpOwogICAgICByZXR1cm4gc2FmZVR5cGUoaW5mZXJyZXIpOwogICAgfQogICAgaWYgKGluZmVycmVyLmNsb3NlZFdvcmxkLm5hdGl2ZURhdGEuaXNOYXRpdmVNZW1iZXIoX2ZpZWxkKSkgewogICAgICAvLyBVc2UgdGhlIHR5cGUgYW5ub3RhdGlvbiBhcyB0aGUgdHlwZSBmb3IgbmF0aXZlIGVsZW1lbnRzLiBXZQogICAgICAvLyBhbHNvIGdpdmUgdXAgb24gaW5mZXJyaW5nIHRvIG1ha2Ugc3VyZSB0aGlzIGVsZW1lbnQgbmV2ZXIKICAgICAgLy8gZ29lcyBpbiB0aGUgd29yayBxdWV1ZS4KICAgICAgZ2l2ZVVwKGluZmVycmVyKTsKICAgICAgcmV0dXJuIGluZmVycmVyCiAgICAgICAgICAudHlwZU9mTmF0aXZlQmVoYXZpb3IoaW5mZXJyZXIuY2xvc2VkV29ybGQubmF0aXZlRGF0YQogICAgICAgICAgICAgIC5nZXROYXRpdmVGaWVsZExvYWRCZWhhdmlvcihfZmllbGQpKQogICAgICAgICAgLnR5cGU7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgX3BvdGVudGlhbGx5TmFycm93VHlwZSgKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrLCBJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIF9uYXJyb3dUeXBlKGluZmVycmVyLmNsb3NlZFdvcmxkLCBtYXNrLCBfdHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc1N0YWJsZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIC8vIFRoZSBudW1iZXIgb2YgYXNzaWdubWVudHMgb2Ygbm9uLWZpbmFsIGZpZWxkcyBpcwogICAgLy8gbm90IHN0YWJsZS4gVGhlcmVmb3JlIHN1Y2ggYSBmaWVsZCBjYW5ub3QgYmUgc3RhYmxlLgogICAgaWYgKCFfZmllbGQuaXNBc3NpZ25hYmxlKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiBzdXBlci5oYXNTdGFibGVUeXBlKGluZmVycmVyKTsKICB9Cn0KCmNsYXNzIEdldHRlclR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIE1lbWJlclR5cGVJbmZvcm1hdGlvbiB7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IF9nZXR0ZXIgPT4gX21lbWJlcjsKICBmaW5hbCBGdW5jdGlvblR5cGUgX3R5cGU7CgogIEdldHRlclR5cGVJbmZvcm1hdGlvbihBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sCiAgICAgIEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQsIHRoaXMuX3R5cGUpCiAgICAgIDogc3VwZXIuX2ludGVybmFsKGFic3RyYWN0VmFsdWVEb21haW4sIGVsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGhhbmRsZVNwZWNpYWxDYXNlcyhJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIF9oYW5kbGVGdW5jdGlvbkNhc2UoX2dldHRlciwgaW5mZXJyZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBfcG90ZW50aWFsbHlOYXJyb3dUeXBlKAogICAgICBBYnN0cmFjdFZhbHVlIG1hc2ssIEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gX25hcnJvd1R5cGUoaW5mZXJyZXIuY2xvc2VkV29ybGQsIG1hc2ssIF90eXBlLnJldHVyblR5cGUpOwogIH0KfQoKY2xhc3MgU2V0dGVyVHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgTWVtYmVyVHlwZUluZm9ybWF0aW9uIHsKICBGdW5jdGlvbkVudGl0eSBnZXQgX3NldHRlciA9PiBfbWVtYmVyOwoKICBTZXR0ZXJUeXBlSW5mb3JtYXRpb24oCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwgRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkKICAgICAgOiBzdXBlci5faW50ZXJuYWwoYWJzdHJhY3RWYWx1ZURvbWFpbiwgZWxlbWVudCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgaGFuZGxlU3BlY2lhbENhc2VzKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gX2hhbmRsZUZ1bmN0aW9uQ2FzZShfc2V0dGVyLCBpbmZlcnJlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIF9wb3RlbnRpYWxseU5hcnJvd1R5cGUoCiAgICAgIEFic3RyYWN0VmFsdWUgbWFzaywgSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHJldHVybiBtYXNrOwogIH0KfQoKY2xhc3MgTWV0aG9kVHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgTWVtYmVyVHlwZUluZm9ybWF0aW9uIHsKICBGdW5jdGlvbkVudGl0eSBnZXQgX21ldGhvZCA9PiBfbWVtYmVyOwogIGZpbmFsIEZ1bmN0aW9uVHlwZSBfdHlwZTsKCiAgTWV0aG9kVHlwZUluZm9ybWF0aW9uKEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgRnVuY3Rpb25FbnRpdHkgZWxlbWVudCwgdGhpcy5fdHlwZSkKICAgICAgOiBzdXBlci5faW50ZXJuYWwoYWJzdHJhY3RWYWx1ZURvbWFpbiwgZWxlbWVudCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgaGFuZGxlU3BlY2lhbENhc2VzKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gX2hhbmRsZUZ1bmN0aW9uQ2FzZShfbWV0aG9kLCBpbmZlcnJlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIF9wb3RlbnRpYWxseU5hcnJvd1R5cGUoCiAgICAgIEFic3RyYWN0VmFsdWUgbWFzaywgSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHJldHVybiBfbmFycm93VHlwZShpbmZlcnJlci5jbG9zZWRXb3JsZCwgbWFzaywgX3R5cGUucmV0dXJuVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc1N0YWJsZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpID0+IGZhbHNlOwp9CgpjbGFzcyBGYWN0b3J5Q29uc3RydWN0b3JUeXBlSW5mb3JtYXRpb24gZXh0ZW5kcyBNZW1iZXJUeXBlSW5mb3JtYXRpb24gewogIENvbnN0cnVjdG9yRW50aXR5IGdldCBfY29uc3RydWN0b3IgPT4gX21lbWJlcjsKICBmaW5hbCBGdW5jdGlvblR5cGUgX3R5cGU7CgogIEZhY3RvcnlDb25zdHJ1Y3RvclR5cGVJbmZvcm1hdGlvbihBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sCiAgICAgIENvbnN0cnVjdG9yRW50aXR5IGVsZW1lbnQsIHRoaXMuX3R5cGUpCiAgICAgIDogc3VwZXIuX2ludGVybmFsKGFic3RyYWN0VmFsdWVEb21haW4sIGVsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGhhbmRsZVNwZWNpYWxDYXNlcyhJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluID0gaW5mZXJyZXIuYWJzdHJhY3RWYWx1ZURvbWFpbjsKICAgIGlmIChfY29uc3RydWN0b3IuaXNGcm9tRW52aXJvbm1lbnRDb25zdHJ1Y3RvcikgewogICAgICBpZiAoX2NvbnN0cnVjdG9yLmVuY2xvc2luZ0NsYXNzID09IGluZmVycmVyLmNvbW1vbkVsZW1lbnRzLmludENsYXNzKSB7CiAgICAgICAgZ2l2ZVVwKGluZmVycmVyKTsKICAgICAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZURvbWFpbi5pbmNsdWRlTnVsbChhYnN0cmFjdFZhbHVlRG9tYWluLmludFR5cGUpOwogICAgICB9IGVsc2UgaWYgKF9jb25zdHJ1Y3Rvci5lbmNsb3NpbmdDbGFzcyA9PQogICAgICAgICAgaW5mZXJyZXIuY29tbW9uRWxlbWVudHMuYm9vbENsYXNzKSB7CiAgICAgICAgZ2l2ZVVwKGluZmVycmVyKTsKICAgICAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZURvbWFpbi5pbmNsdWRlTnVsbChhYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlKTsKICAgICAgfSBlbHNlIGlmIChfY29uc3RydWN0b3IuZW5jbG9zaW5nQ2xhc3MgPT0KICAgICAgICAgIGluZmVycmVyLmNvbW1vbkVsZW1lbnRzLnN0cmluZ0NsYXNzKSB7CiAgICAgICAgZ2l2ZVVwKGluZmVycmVyKTsKICAgICAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZURvbWFpbi5pbmNsdWRlTnVsbChhYnN0cmFjdFZhbHVlRG9tYWluLnN0cmluZ1R5cGUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX2hhbmRsZUZ1bmN0aW9uQ2FzZShfY29uc3RydWN0b3IsIGluZmVycmVyKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgX3BvdGVudGlhbGx5TmFycm93VHlwZSgKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrLCBJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIF9uYXJyb3dUeXBlKGluZmVycmVyLmNsb3NlZFdvcmxkLCBtYXNrLCBfdHlwZS5yZXR1cm5UeXBlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaGFzU3RhYmxlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIHN1cGVyLmhhc1N0YWJsZVR5cGUoaW5mZXJyZXIpOwogIH0KfQoKY2xhc3MgR2VuZXJhdGl2ZUNvbnN0cnVjdG9yVHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgTWVtYmVyVHlwZUluZm9ybWF0aW9uIHsKICBDb25zdHJ1Y3RvckVudGl0eSBnZXQgX2NvbnN0cnVjdG9yID0+IF9tZW1iZXI7CgogIEdlbmVyYXRpdmVDb25zdHJ1Y3RvclR5cGVJbmZvcm1hdGlvbigKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLCBDb25zdHJ1Y3RvckVudGl0eSBlbGVtZW50KQogICAgICA6IHN1cGVyLl9pbnRlcm5hbChhYnN0cmFjdFZhbHVlRG9tYWluLCBlbGVtZW50KTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBoYW5kbGVTcGVjaWFsQ2FzZXMoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHJldHVybiBfaGFuZGxlRnVuY3Rpb25DYXNlKF9jb25zdHJ1Y3RvciwgaW5mZXJyZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBfcG90ZW50aWFsbHlOYXJyb3dUeXBlKAogICAgICBBYnN0cmFjdFZhbHVlIG1hc2ssIEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gbWFzazsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaGFzU3RhYmxlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIHN1cGVyLmhhc1N0YWJsZVR5cGUoaW5mZXJyZXIpOwogIH0KfQoKLy8vIEEgbm9kZSByZXByZXNlbnRpbmcgcGFyYW1ldGVyczoKLy8vCi8vLyAtIFBhcmFtZXRlcnMKLy8vIC0gSW5pdGlhbGl6aW5nIGZvcm1hbHMKLy8vCi8vLyBUaGVzZSBzaG91bGQgbmV2ZXIgYmUgY3JlYXRlZCBkaXJlY3RseSBidXQgaW5zdGVhZCBhcmUgY29uc3RydWN0ZWQgYnkKLy8vIHRoZSBbRWxlbWVudFR5cGVJbmZvcm1hdGlvbl0gZmFjdG9yeS4KY2xhc3MgUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgRWxlbWVudFR5cGVJbmZvcm1hdGlvbiB7CiAgZmluYWwgTG9jYWwgX3BhcmFtZXRlcjsKICBmaW5hbCBEYXJ0VHlwZSBfdHlwZTsKICBmaW5hbCBGdW5jdGlvbkVudGl0eSBfbWV0aG9kOwogIGZpbmFsIGJvb2wgX2lzSW5zdGFuY2VNZW1iZXJQYXJhbWV0ZXI7CiAgZmluYWwgYm9vbCBfaXNDbG9zdXJlUGFyYW1ldGVyOwogIGZpbmFsIGJvb2wgX2lzSW5pdGlhbGl6aW5nRm9ybWFsOwogIGJvb2wgX2lzVGVhck9mZkNsb3N1cmVQYXJhbWV0ZXIgPSBmYWxzZTsKCiAgUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uLmxvY2FsRnVuY3Rpb24oCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNvbnRleHQsCiAgICAgIHRoaXMuX3BhcmFtZXRlciwKICAgICAgdGhpcy5fdHlwZSwKICAgICAgdGhpcy5fbWV0aG9kKQogICAgICA6IF9pc0luc3RhbmNlTWVtYmVyUGFyYW1ldGVyID0gZmFsc2UsCiAgICAgICAgX2lzQ2xvc3VyZVBhcmFtZXRlciA9IHRydWUsCiAgICAgICAgX2lzSW5pdGlhbGl6aW5nRm9ybWFsID0gZmFsc2UsCiAgICAgICAgc3VwZXIuX2ludGVybmFsKGFic3RyYWN0VmFsdWVEb21haW4sIGNvbnRleHQpOwoKICBQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24uc3RhdGljKEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNvbnRleHQsIHRoaXMuX3BhcmFtZXRlciwgdGhpcy5fdHlwZSwgdGhpcy5fbWV0aG9kLAogICAgICB7Ym9vbCBpc0luaXRpYWxpemluZ0Zvcm1hbDogZmFsc2V9KQogICAgICA6IF9pc0luc3RhbmNlTWVtYmVyUGFyYW1ldGVyID0gZmFsc2UsCiAgICAgICAgX2lzQ2xvc3VyZVBhcmFtZXRlciA9IGZhbHNlLAogICAgICAgIF9pc0luaXRpYWxpemluZ0Zvcm1hbCA9IGlzSW5pdGlhbGl6aW5nRm9ybWFsLAogICAgICAgIHN1cGVyLl9pbnRlcm5hbChhYnN0cmFjdFZhbHVlRG9tYWluLCBjb250ZXh0KTsKCiAgUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uLmluc3RhbmNlTWVtYmVyKAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sCiAgICAgIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBjb250ZXh0LAogICAgICB0aGlzLl9wYXJhbWV0ZXIsCiAgICAgIHRoaXMuX3R5cGUsCiAgICAgIHRoaXMuX21ldGhvZCwKICAgICAgUGFyYW1ldGVyQXNzaWdubWVudHMgYXNzaWdubWVudHMpCiAgICAgIDogX2lzSW5zdGFuY2VNZW1iZXJQYXJhbWV0ZXIgPSB0cnVlLAogICAgICAgIF9pc0Nsb3N1cmVQYXJhbWV0ZXIgPSBmYWxzZSwKICAgICAgICBfaXNJbml0aWFsaXppbmdGb3JtYWwgPSBmYWxzZSwKICAgICAgICBzdXBlci5fd2l0aEFzc2lnbm1lbnRzKGFic3RyYWN0VmFsdWVEb21haW4sIGNvbnRleHQsIGFzc2lnbm1lbnRzKTsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IG1ldGhvZCA9PiBfbWV0aG9kOwoKICBMb2NhbCBnZXQgcGFyYW1ldGVyID0+IF9wYXJhbWV0ZXI7CgogIGJvb2wgZ2V0IGlzUmVndWxhclBhcmFtZXRlciA9PiAhX2lzSW5pdGlhbGl6aW5nRm9ybWFsOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGRlYnVnTmFtZSA9PiAnJHBhcmFtZXRlcic7CgogIHZvaWQgdGFnQXNUZWFyT2ZmQ2xvc3VyZVBhcmFtZXRlcihJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgYXNzZXJ0KCFfaXNJbml0aWFsaXppbmdGb3JtYWwpOwogICAgX2lzVGVhck9mZkNsb3N1cmVQYXJhbWV0ZXIgPSB0cnVlOwogICAgLy8gV2UgaGF2ZSB0byBhZGQgYSBmbG93LWVkZ2UgZm9yIHRoZSBkZWZhdWx0IHZhbHVlIChpZiBpdCBleGlzdHMpLCBhcyB3ZQogICAgLy8gbWlnaHQgbm90IHNlZSBhbGwgY2FsbC1zaXRlcyBhbmQgdGh1cyBtaXNzIHRoZSB1c2Ugb2YgaXQuCiAgICBUeXBlSW5mb3JtYXRpb24gZGVmYXVsdFR5cGUgPQogICAgICAgIGluZmVycmVyLmdldERlZmF1bHRUeXBlT2ZQYXJhbWV0ZXIoX3BhcmFtZXRlcik7CiAgICBpZiAoZGVmYXVsdFR5cGUgIT0gbnVsbCkgZGVmYXVsdFR5cGUuYWRkVXNlcih0aGlzKTsKICB9CgogIC8vIFRPRE8oaGVyaHV0KTogQ2xlYW51cCBpbnRvIG9uZSBjb25kaXRpb25hbC4KICBBYnN0cmFjdFZhbHVlIGhhbmRsZVNwZWNpYWxDYXNlcyhJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgaWYgKCFpbmZlcnJlci5jYW5GdW5jdGlvblBhcmFtZXRlcnNCZVVzZWRGb3JHbG9iYWxPcHRpbWl6YXRpb25zKF9tZXRob2QpIHx8CiAgICAgICAgaW5mZXJyZXIuYXNzdW1lRHluYW1pYyhfbWV0aG9kKSkgewogICAgICAvLyBEbyBub3QgaW5mZXIgdHlwZXMgZm9yIHBhcmFtZXRlcnMgdGhhdCBoYXZlIGEgY29ycmVzcG9uZGluZyBhbm5vdGF0aW9uCiAgICAgIC8vIG9yIHRoYXQgYXJlIGFzc2lnbmVkIGJ5IHN5bnRoZXNpemVkIGNhbGxzLgogICAgICBnaXZlVXAoaW5mZXJyZXIpOwogICAgICByZXR1cm4gc2FmZVR5cGUoaW5mZXJyZXIpOwogICAgfQoKICAgIC8vIFRoZSBiZWxvdyBkbyBub3QgYXBwbHkgdG8gcGFyYW1ldGVycyBvZiBjb25zdHJ1Y3RvcnMsIHNvIHNraXAKICAgIC8vIGluaXRpYWxpemluZyBmb3JtYWxzLgogICAgaWYgKF9pc0luaXRpYWxpemluZ0Zvcm1hbCkgcmV0dXJuIG51bGw7CgogICAgaWYgKChfaXNUZWFyT2ZmQ2xvc3VyZVBhcmFtZXRlciB8fCBfaXNDbG9zdXJlUGFyYW1ldGVyKSAmJgogICAgICAgIGRpc2FibGVJbmZlcmVuY2VGb3JDbG9zdXJlcykgewogICAgICAvLyBEbyBub3QgaW5mZXIgdHlwZXMgZm9yIHBhcmFtZXRlcnMgb2YgY2xvc3VyZXMuIFdlIGRvIG5vdAogICAgICAvLyBjbGVhciB0aGUgYXNzaWdubWVudHMgaW4gY2FzZSB0aGUgY2xvc3VyZSBpcyBzdWNjZXNzZnVsbHkKICAgICAgLy8gdHJhY2VkLgogICAgICBnaXZlVXAoaW5mZXJyZXIsIGNsZWFyQXNzaWdubWVudHM6IGZhbHNlKTsKICAgICAgcmV0dXJuIHNhZmVUeXBlKGluZmVycmVyKTsKICAgIH0KICAgIGlmIChfaXNJbnN0YW5jZU1lbWJlclBhcmFtZXRlciAmJgogICAgICAgIChfbWV0aG9kLm5hbWUgPT0gSWRlbnRpZmllcnMubm9TdWNoTWV0aG9kXyB8fAogICAgICAgICAgICAoX21ldGhvZC5uYW1lID09IElkZW50aWZpZXJzLmNhbGwgJiYKICAgICAgICAgICAgICAgIGRpc2FibGVJbmZlcmVuY2VGb3JDbG9zdXJlcykpKSB7CiAgICAgIC8vIERvIG5vdCBpbmZlciB0eXBlcyBmb3IgcGFyYW1ldGVycyBvZiBbbm9TdWNoTWV0aG9kXSBhbmQgW2NhbGxdIGluc3RhbmNlCiAgICAgIC8vIG1ldGhvZHMuCiAgICAgIGdpdmVVcChpbmZlcnJlcik7CiAgICAgIHJldHVybiBzYWZlVHlwZShpbmZlcnJlcik7CiAgICB9CiAgICBpZiAoaW5mZXJyZXIuaW5mZXJyZWREYXRhQnVpbGRlcgogICAgICAgIC5nZXRDdXJyZW50bHlLbm93bk1pZ2h0QmVQYXNzZWRUb0FwcGx5KF9tZXRob2QpKSB7CiAgICAgIGdpdmVVcChpbmZlcnJlcik7CiAgICAgIHJldHVybiBzYWZlVHlwZShpbmZlcnJlcik7CiAgICB9CiAgICBpZiAoX21ldGhvZCA9PSBpbmZlcnJlci5tYWluRWxlbWVudCkgewogICAgICAvLyBUaGUgaW1wbGljaXQgY2FsbCB0byBtYWluIGlzIG5vdCBzZWVuIGJ5IHRoZSBpbmZlcnJlciwKICAgICAgLy8gdGhlcmVmb3JlIHdlIGV4cGxpY2l0bHkgc2V0IHRoZSB0eXBlIG9mIGl0cyBwYXJhbWV0ZXJzIGFzCiAgICAgIC8vIGR5bmFtaWMuCiAgICAgIC8vIFRPRE8oMTQ1NjYpOiBzeW50aGVzaXplIGEgY2FsbCBpbnN0ZWFkIHRvIGdldCB0aGUgZXhhY3QKICAgICAgLy8gdHlwZXMuCiAgICAgIGdpdmVVcChpbmZlcnJlcik7CiAgICAgIHJldHVybiBzYWZlVHlwZShpbmZlcnJlcik7CiAgICB9CgogICAgcmV0dXJuIG51bGw7CiAgfQoKICBBYnN0cmFjdFZhbHVlIHBvdGVudGlhbGx5TmFycm93VHlwZSgKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrLCBJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgaWYgKGluZmVycmVyLmNsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YQogICAgICAgIC5nZXRQYXJhbWV0ZXJDaGVja1BvbGljeShtZXRob2QpCiAgICAgICAgLmlzVHJ1c3RlZCkgewogICAgICAvLyBJbiBjaGVja2VkIG9yIHN0cm9uZyBtb2RlIHdlIGRvbid0IHRydXN0IHRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzCiAgICAgIC8vIHBhc3NlZCB0byBhIHBhcmFtZXRlci4gVGhlIG1lYW5zIHRoYXQgdGhlIGNoZWNraW5nIG9mIGEgcGFyYW1ldGVyIGlzCiAgICAgIC8vIGJhc2VkIG9uIHRoZSBhY3R1YWwgYXJndW1lbnRzLgogICAgICAvLwogICAgICAvLyBXaXRoIC0tdHJ1c3QtdHlwZS1hbm5vdGF0aW9ucyBvciAtLW9taXQtaW1wbGljaXQtY2hlY2tzIHdlIF9kb18gdHJ1c3QKICAgICAgLy8gdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYSBwYXJhbWV0ZXIgLSBhbmQgd2UgbmV2ZXIgY2hlY2sgdGhlbS4KICAgICAgLy8KICAgICAgLy8gSW4gYWxsIHRoZXNlIGNhc2VzIHdlIF9kb18gdHJ1c3QgdGhlIHN0YXRpYyB0eXBlIG9mIGEgcGFyYW1ldGVyIHdpdGhpbgogICAgICAvLyB0aGUgbWV0aG9kIGl0c2VsZi4gRm9yIGluc3RhbmNlOgogICAgICAvLwogICAgICAvLyAgICAgbWV0aG9kKGludCBpKSA9PiBpOwogICAgICAvLyAgICAgbWFpbigpIHsKICAgICAgLy8gICAgICAgZHluYW1pYyBmID0gbWV0aG9kOwogICAgICAvLyAgICAgICBmKDApOyAvLyB2YWxpZCBjYWxsCiAgICAgIC8vICAgICAgIGYoJycpOyAvLyBpbnZhbGlkIGNhbGwKICAgICAgLy8gICAgIH0KICAgICAgLy8KICAgICAgLy8gSGVyZSwgaW4gYWxsIGNhc2VzLCB3ZSBpbmZlciB0aGUgcmV0dXJuZWQgdmFsdWUgb2YgYG1ldGhvZGAgdG8gYmUgYW4KICAgICAgLy8gYGludGAuIEluIGNoZWNrZWQgYW5kIHN0cm9uZyBtb2RlIHdlIGluZmVyIHRoZSBwYXJhbWV0ZXIgb2YgYG1ldGhvZGAgdG8KICAgICAgLy8gYmUgZWl0aGVyIGBpbnRgIG9yIGBTdHJpbmdgIGFuZCB0aGVyZWZvcmUgaW5zZXJ0IGEgY2hlY2sgYXQgdGhlIGVudHJ5CiAgICAgIC8vIG9mICdtZXRob2QnLiBXaXRoIC0tdHJ1c3QtdHlwZS1hbm5vdGF0aW9ucyBvciAtLW9taXQtaW1wbGljaXQtY2hlY2tzIHdlCiAgICAgIC8vICh1bnNvdW5kbHkpIGluZmVyIHRoZSBwYXJhbWV0ZXIgdG8gYmUgYGludGAgYW5kIGxlYXZlIHRoZSBwYXJhbWV0ZXIKICAgICAgLy8gdW5jaGVja2VkLCBhbmQgYG1ldGhvZGAgd2lsbCBhdCBydW50aW1lIGFjdHVhbGx5IHJldHVybiBhIGBTdHJpbmdgIGZyb20KICAgICAgLy8gdGhlIHNlY29uZCBpbnZvY2F0aW9uLgogICAgICAvLwogICAgICAvLyBUaGUgdHJ1c3Rpbmcgb2YgdGhlIHBhcmFtZXRlciB0eXBlcyB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIG1ldGhvZCBpcwogICAgICAvLyBpcyBkb25lIHRocm91Z2ggYExvY2Fsc0hhbmRsZXIudXBkYXRlYCBjYWxsZWQgaW4KICAgICAgLy8gYEtlcm5lbFR5cGVHcmFwaEJ1aWxkZXIuaGFuZGxlUGFyYW1ldGVyYC4KICAgICAgcmV0dXJuIF9uYXJyb3dUeXBlKGluZmVycmVyLmNsb3NlZFdvcmxkLCBtYXNrLCBfdHlwZSk7CiAgICB9CiAgICByZXR1cm4gbWFzazsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIEFic3RyYWN0VmFsdWUgc3BlY2lhbCA9IGhhbmRsZVNwZWNpYWxDYXNlcyhpbmZlcnJlcik7CiAgICBpZiAoc3BlY2lhbCAhPSBudWxsKSByZXR1cm4gc3BlY2lhbDsKICAgIHJldHVybiBwb3RlbnRpYWxseU5hcnJvd1R5cGUoCiAgICAgICAgaW5mZXJyZXIudHlwZXMuY29tcHV0ZVR5cGVNYXNrKGFzc2lnbm1lbnRzKSwgaW5mZXJyZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBzYWZlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIHBvdGVudGlhbGx5TmFycm93VHlwZShzdXBlci5zYWZlVHlwZShpbmZlcnJlciksIGluZmVycmVyKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaGFzU3RhYmxlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgLy8gVGhlIG51bWJlciBvZiBhc3NpZ25tZW50cyBvZiBwYXJhbWV0ZXJzIG9mIGluc3RhbmNlIG1ldGhvZHMgaXMKICAgIC8vIG5vdCBzdGFibGUuIFRoZXJlZm9yZSBzdWNoIGEgcGFyYW1ldGVyIGNhbm5vdCBiZSBzdGFibGUuCiAgICBpZiAoX2lzSW5zdGFuY2VNZW1iZXJQYXJhbWV0ZXIpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHN1cGVyLmhhc1N0YWJsZVR5cGUoaW5mZXJyZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KFR5cGVJbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnUGFyYW1ldGVyICRfcGFyYW1ldGVyICR0eXBlJzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldEluZmVycmVkU2lnbmF0dXJlKFR5cGVTeXN0ZW0gdHlwZXMpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24uZ2V0SW5mZXJyZWRTaWduYXR1cmUnKTsKICB9Cn0KCmVudW0gQ2FsbFR5cGUgewogIGFjY2VzcywKICBmb3JJbiwKfQoKYm9vbCB2YWxpZENhbGxUeXBlKENhbGxUeXBlIGNhbGxUeXBlLCBPYmplY3QgY2FsbCkgewogIHN3aXRjaCAoY2FsbFR5cGUpIHsKICAgIGNhc2UgQ2FsbFR5cGUuYWNjZXNzOgogICAgICByZXR1cm4gY2FsbCBpcyBpci5Ob2RlOwogICAgY2FzZSBDYWxsVHlwZS5mb3JJbjoKICAgICAgcmV0dXJuIGNhbGwgaXMgaXIuRm9ySW5TdGF0ZW1lbnQ7CiAgfQogIHRocm93IG5ldyBTdGF0ZUVycm9yKCdVbmV4cGVjdGVkIGNhbGwgdHlwZSAkY2FsbFR5cGUuJyk7Cn0KCi8vLyBBIFtDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbl0gaXMgYSBjYWxsIGZvdW5kIGluIHRoZSBBU1QsIG9yIGEKLy8vIHN5bnRoZXNpemVkIGNhbGwgZm9yIGltcGxpY2l0IGNhbGxzIGluIERhcnQgKHN1Y2ggYXMgZm9yd2FyZGluZwovLy8gZmFjdG9yaWVzKS4gVGhlIFtfY2FsbF0gZmllbGQgaXMgYSBbYXN0Lk5vZGVdIGZvciB0aGUgZm9ybWVyLCBhbmQgYW4KLy8vIFtFbGVtZW50XSBmb3IgdGhlIGxhdHRlci4KLy8vCi8vLyBJbiB0aGUgaW5mZXJyZXIgZ3JhcGgsIFtDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbl0gbm9kZXMgZG8gbm90IGhhdmUKLy8vIGFueSBhc3NpZ25tZW50LiBUaGV5IHJlbHkgb24gdGhlIFtjYWxsZXJdIGZpZWxkIGZvciBzdGF0aWMgY2FsbHMsCi8vLyBhbmQgW3NlbGVjdG9yXSBhbmQgW3JlY2VpdmVyXSBmaWVsZHMgZm9yIGR5bmFtaWMgY2FsbHMuCmFic3RyYWN0IGNsYXNzIENhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgVHlwZUluZm9ybWF0aW9uCiAgICB3aXRoIEFwcGx5YWJsZVR5cGVJbmZvcm1hdGlvbiB7CiAgZmluYWwgT2JqZWN0IF9jYWxsOwogIGZpbmFsIE1lbWJlckVudGl0eSBjYWxsZXI7CiAgZmluYWwgU2VsZWN0b3Igc2VsZWN0b3I7CiAgZmluYWwgQWJzdHJhY3RWYWx1ZSBtYXNrOwogIGZpbmFsIEFyZ3VtZW50c1R5cGVzIGFyZ3VtZW50czsKICBmaW5hbCBib29sIGluTG9vcDsKCiAgQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNvbnRleHQsCiAgICAgIHRoaXMuX2NhbGwsCiAgICAgIHRoaXMuY2FsbGVyLAogICAgICB0aGlzLnNlbGVjdG9yLAogICAgICB0aGlzLm1hc2ssCiAgICAgIHRoaXMuYXJndW1lbnRzLAogICAgICB0aGlzLmluTG9vcCkKICAgICAgOiBzdXBlci5ub0Fzc2lnbm1lbnRzKGFic3RyYWN0VmFsdWVEb21haW4uZW1wdHlUeXBlLCBjb250ZXh0KSB7CiAgICBhc3NlcnQoX2NhbGwgaXMgaXIuTm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnQ2FsbCBzaXRlICRkZWJ1Z05hbWUgJHR5cGUnOwoKICAvLy8gQWRkIFt0aGlzXSB0byB0aGUgZ3JhcGggYmVpbmcgY29tcHV0ZWQgYnkgW2VuZ2luZV0uCiAgdm9pZCBhZGRUb0dyYXBoKEluZmVycmVyRW5naW5lIGVuZ2luZSk7CgogIC8vLyBSZXR1cm4gYW4gaXRlcmFibGUgb3ZlciB0aGUgdGFyZ2V0cyBvZiB0aGlzIGNhbGwuCiAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBnZXQgY2FsbGVlczsKCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWUgPT4gJyRfY2FsbCc7Cn0KCmNsYXNzIFN0YXRpY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gewogIGZpbmFsIE1lbWJlckVudGl0eSBjYWxsZWRFbGVtZW50OwoKICBTdGF0aWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbigKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY29udGV4dCwKICAgICAgT2JqZWN0IGNhbGwsCiAgICAgIE1lbWJlckVudGl0eSBlbmNsb3NpbmcsCiAgICAgIHRoaXMuY2FsbGVkRWxlbWVudCwKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgbWFzaywKICAgICAgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzLAogICAgICBib29sIGluTG9vcCkKICAgICAgOiBzdXBlcihhYnN0cmFjdFZhbHVlRG9tYWluLCBjb250ZXh0LCBjYWxsLCBlbmNsb3NpbmcsIHNlbGVjdG9yLCBtYXNrLAogICAgICAgICAgICBhcmd1bWVudHMsIGluTG9vcCk7CgogIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBfZ2V0Q2FsbGVkVHlwZUluZm8oSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHJldHVybiBpbmZlcnJlci50eXBlcy5nZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihjYWxsZWRFbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkVG9HcmFwaChJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNhbGxlZSA9IF9nZXRDYWxsZWRUeXBlSW5mbyhpbmZlcnJlcik7CiAgICBjYWxsZWUuYWRkQ2FsbChjYWxsZXIsIF9jYWxsKTsKICAgIGNhbGxlZS5hZGRVc2VyKHRoaXMpOwogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGFyZ3VtZW50cy5mb3JFYWNoKChpbmZvKSA9PiBpbmZvLmFkZFVzZXIodGhpcykpOwogICAgfQogICAgaW5mZXJyZXIudXBkYXRlUGFyYW1ldGVyQXNzaWdubWVudHMoCiAgICAgICAgdGhpcywgY2FsbGVkRWxlbWVudCwgYXJndW1lbnRzLCBzZWxlY3RvciwgbWFzaywKICAgICAgICByZW1vdmU6IGZhbHNlLCBhZGRUb1F1ZXVlOiBmYWxzZSk7CiAgfQoKICBib29sIGdldCBpc1N5bnRoZXNpemVkIHsKICAgIC8vIFNvbWUgY2FsbHMgZG8gbm90IGhhdmUgYSBjb3JyZXNwb25kaW5nIHNlbGVjdG9yLCBmb3IgZXhhbXBsZQogICAgLy8gZm9yd2FyZGluZyBmYWN0b3J5IGNvbnN0cnVjdG9ycywgb3Igc3ludGhlc2l6ZWQgc3VwZXIKICAgIC8vIGNvbnN0cnVjdG9yIGNhbGxzLiBXZSBzeW50aGVzaXplIHRoZXNlIGNhbGxzIGJ1dCBkbwogICAgLy8gbm90IGNyZWF0ZSBhIHNlbGVjdG9yIGZvciB0aGVtLgogICAgcmV0dXJuIHNlbGVjdG9yID09IG51bGw7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gX2dldENhbGxlZFR5cGVJbmZvV2l0aFNlbGVjdG9yKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gaW5mZXJyZXIudHlwZU9mTWVtYmVyV2l0aFNlbGVjdG9yKGNhbGxlZEVsZW1lbnQsIHNlbGVjdG9yKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIGlmIChpc1N5bnRoZXNpemVkKSB7CiAgICAgIGFzc2VydChhcmd1bWVudHMgIT0gbnVsbCk7CiAgICAgIHJldHVybiBfZ2V0Q2FsbGVkVHlwZUluZm8oaW5mZXJyZXIpLnR5cGU7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX2dldENhbGxlZFR5cGVJbmZvV2l0aFNlbGVjdG9yKGluZmVycmVyKS50eXBlOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBnZXQgY2FsbGVlcyA9PiBbY2FsbGVkRWxlbWVudF07CgogIEBvdmVycmlkZQogIGFjY2VwdChUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0U3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc1N0YWJsZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIGJvb2wgaXNTdGFibGUgPSBfZ2V0Q2FsbGVkVHlwZUluZm8oaW5mZXJyZXIpLmlzU3RhYmxlOwogICAgcmV0dXJuIGlzU3RhYmxlICYmCiAgICAgICAgKGFyZ3VtZW50cyA9PSBudWxsIHx8IGFyZ3VtZW50cy5ldmVyeSgoaW5mbykgPT4gaW5mby5pc1N0YWJsZSkpICYmCiAgICAgICAgc3VwZXIuaGFzU3RhYmxlVHlwZShpbmZlcnJlcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlbW92ZUFuZENsZWFyUmVmZXJlbmNlcyhJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgRWxlbWVudFR5cGVJbmZvcm1hdGlvbiBjYWxsZWUgPSBfZ2V0Q2FsbGVkVHlwZUluZm8oaW5mZXJyZXIpOwogICAgY2FsbGVlLnJlbW92ZVVzZXIodGhpcyk7CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgYXJndW1lbnRzLmZvckVhY2goKGluZm8pID0+IGluZm8ucmVtb3ZlVXNlcih0aGlzKSk7CiAgICB9CiAgICBzdXBlci5yZW1vdmVBbmRDbGVhclJlZmVyZW5jZXMoaW5mZXJyZXIpOwogIH0KfQoKY2xhc3MgRHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uPFQ+IGV4dGVuZHMgQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gewogIGZpbmFsIENhbGxUeXBlIF9jYWxsVHlwZTsKICBmaW5hbCBUeXBlSW5mb3JtYXRpb24gcmVjZWl2ZXI7CiAgZmluYWwgYm9vbCBpc0NvbmRpdGlvbmFsOwogIGJvb2wgX2hhc0Nsb3N1cmVDYWxsVGFyZ2V0czsKCiAgLy8vIENhY2hlZCBjb25jcmV0ZSB0YXJnZXRzIG9mIHRoaXMgY2FsbC4KICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IF9jb25jcmV0ZVRhcmdldHM7CgogIER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbigKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY29udGV4dCwKICAgICAgdGhpcy5fY2FsbFR5cGUsCiAgICAgIFQgY2FsbCwKICAgICAgTWVtYmVyRW50aXR5IGVuY2xvc2luZywKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgbWFzaywKICAgICAgdGhpcy5yZWNlaXZlciwKICAgICAgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzLAogICAgICBib29sIGluTG9vcCwKICAgICAgdGhpcy5pc0NvbmRpdGlvbmFsKQogICAgICA6IHN1cGVyKGFic3RyYWN0VmFsdWVEb21haW4sIGNvbnRleHQsIGNhbGwsIGVuY2xvc2luZywgc2VsZWN0b3IsIG1hc2ssCiAgICAgICAgICAgIGFyZ3VtZW50cywgaW5Mb29wKSB7CiAgICBhc3NlcnQodmFsaWRDYWxsVHlwZShfY2FsbFR5cGUsIF9jYWxsKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZFRvR3JhcGgoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIGFzc2VydChyZWNlaXZlciAhPSBudWxsKTsKICAgIEFic3RyYWN0VmFsdWUgdHlwZU1hc2sgPSBjb21wdXRlVHlwZWRTZWxlY3RvcihpbmZlcnJlcik7CiAgICBfaGFzQ2xvc3VyZUNhbGxUYXJnZXRzID0KICAgICAgICBpbmZlcnJlci5jbG9zZWRXb3JsZC5pbmNsdWRlc0Nsb3N1cmVDYWxsKHNlbGVjdG9yLCB0eXBlTWFzayk7CiAgICBfY29uY3JldGVUYXJnZXRzID0gaW5mZXJyZXIuY2xvc2VkV29ybGQubG9jYXRlTWVtYmVycyhzZWxlY3RvciwgdHlwZU1hc2spOwogICAgcmVjZWl2ZXIuYWRkVXNlcih0aGlzKTsKICAgIGlmIChhcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBhcmd1bWVudHMuZm9yRWFjaCgoaW5mbykgPT4gaW5mby5hZGRVc2VyKHRoaXMpKTsKICAgIH0KICAgIGZvciAoTWVtYmVyRW50aXR5IGVsZW1lbnQgaW4gX2NvbmNyZXRlVGFyZ2V0cykgewogICAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY2FsbGVlID0KICAgICAgICAgIGluZmVycmVyLnR5cGVzLmdldEluZmVycmVkVHlwZU9mTWVtYmVyKGVsZW1lbnQpOwogICAgICBjYWxsZWUuYWRkQ2FsbChjYWxsZXIsIF9jYWxsKTsKICAgICAgY2FsbGVlLmFkZFVzZXIodGhpcyk7CiAgICAgIGluZmVycmVyLnVwZGF0ZVBhcmFtZXRlckFzc2lnbm1lbnRzKAogICAgICAgICAgdGhpcywgZWxlbWVudCwgYXJndW1lbnRzLCBzZWxlY3RvciwgdHlwZU1hc2ssCiAgICAgICAgICByZW1vdmU6IGZhbHNlLCBhZGRUb1F1ZXVlOiBmYWxzZSk7CiAgICB9CiAgfQoKICAvLy8gYHRydWVgIGlmIHRoaXMgaW52b2NhdGlvbiBjYW4gaGl0IGEgJ2NhbGwnIG1ldGhvZCBvbiBhIGNsb3N1cmUuCiAgYm9vbCBnZXQgaGFzQ2xvc3VyZUNhbGxUYXJnZXRzID0+IF9oYXNDbG9zdXJlQ2FsbFRhcmdldHM7CgogIC8vLyBBbGwgY29uY3JldGUgdGFyZ2V0cyBvZiB0aGlzIGludm9jYXRpb24uIElmIFtoYXNDbG9zdXJlQ2FsbFRhcmdldHNdIGlzCiAgLy8vIGB0cnVlYCB0aGUgaW52b2NhdGlvbiBjYW4gYWRkaXRpb25hbCB0YXJnZXQgYW4gdW5rbm93biBzZXQgb2YgJ2NhbGwnCiAgLy8vIG1ldGhvZHMgb24gY2xvc3VyZXMuCiAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBnZXQgY29uY3JldGVUYXJnZXRzID0+IF9jb25jcmV0ZVRhcmdldHM7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZ2V0IGNhbGxlZXMgPT4gX2NvbmNyZXRlVGFyZ2V0czsKCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZWRTZWxlY3RvcihJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgQWJzdHJhY3RWYWx1ZSByZWNlaXZlclR5cGUgPSByZWNlaXZlci50eXBlOwoKICAgIGlmIChtYXNrICE9IHJlY2VpdmVyVHlwZSkgewogICAgICByZXR1cm4gcmVjZWl2ZXJUeXBlID09IGluZmVycmVyLmFic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUKICAgICAgICAgID8gbnVsbAogICAgICAgICAgOiByZWNlaXZlclR5cGU7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbWFzazsKICAgIH0KICB9CgogIGJvb2wgdGFyZ2V0c0luY2x1ZGVDb21wbGV4Tm9TdWNoTWV0aG9kKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gX2NvbmNyZXRlVGFyZ2V0cy5hbnkoKE1lbWJlckVudGl0eSBlKSB7CiAgICAgIHJldHVybiBlLmlzRnVuY3Rpb24gJiYKICAgICAgICAgIGUuaXNJbnN0YW5jZU1lbWJlciAmJgogICAgICAgICAgZS5uYW1lID09IElkZW50aWZpZXJzLm5vU3VjaE1ldGhvZF8gJiYKICAgICAgICAgIGluZmVycmVyLm5vU3VjaE1ldGhvZERhdGEuaXNDb21wbGV4KGUpOwogICAgfSk7CiAgfQoKICAvLy8gV2Ugb3B0aW1pemUgY2VydGFpbiBvcGVyYXRpb25zIG9uIHRoZSBbaW50XSBjbGFzcyBiZWNhdXNlIHdlIGtub3cgbW9yZQogIC8vLyBhYm91dCB0aGVpciByZXR1cm4gdHlwZSB0aGFuIHRoZSBhY3R1YWwgRGFydCBjb2RlLiBGb3IgZXhhbXBsZSwgd2Uga25vdwogIC8vLyBpbnQgKyBpbnQgcmV0dXJucyBhbiBpbnQuIFRoZSBEYXJ0IGxpYnJhcnkgY29kZSBmb3IgW2ludC5vcGVyYXRvcitdIG9ubHkKICAvLy8gc2F5cyBpdCByZXR1cm5zIGEgW251bV0uCiAgLy8vCiAgLy8vIFJldHVybnMgdGhlIG1vcmUgcHJlY2lzZSBUeXBlSW5mb3JtYXRpb24sIG9yIGBudWxsYCB0byBkZWZlciB0byB0aGUKICAvLy8gbGlicmFyeSBjb2RlLgogIFR5cGVJbmZvcm1hdGlvbiBoYW5kbGVJbnRyaXNpZmllZFNlbGVjdG9yKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSBtYXNrLCBJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkID0gaW5mZXJyZXIuY2xvc2VkV29ybGQ7CiAgICBpZiAobWFzayA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGlmIChpbmZlcnJlci5hYnN0cmFjdFZhbHVlRG9tYWluLmlzSW50ZWdlck9yTnVsbChtYXNrKS5pc1BvdGVudGlhbGx5RmFsc2UpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAoIXNlbGVjdG9yLmlzQ2FsbCAmJiAhc2VsZWN0b3IuaXNPcGVyYXRvcikgcmV0dXJuIG51bGw7CiAgICBpZiAoIWFyZ3VtZW50cy5uYW1lZC5pc0VtcHR5KSByZXR1cm4gbnVsbDsKICAgIGlmIChhcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggPiAxKSByZXR1cm4gbnVsbDsKCiAgICBDbGFzc0VudGl0eSB1aW50MzFJbXBsZW1lbnRhdGlvbiA9IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmpzVUludDMxQ2xhc3M7CiAgICBib29sIGlzSW50KGluZm8pID0+IGluZm8udHlwZS5jb250YWluc09ubHlJbnQoY2xvc2VkV29ybGQpOwogICAgYm9vbCBpc0VtcHR5KGluZm8pID0+IGluZm8udHlwZS5pc0VtcHR5OwogICAgYm9vbCBpc1VJbnQzMShpbmZvKSB7CiAgICAgIHJldHVybiBpbmZvLnR5cGUuc2F0aXNmaWVzKHVpbnQzMUltcGxlbWVudGF0aW9uLCBjbG9zZWRXb3JsZCk7CiAgICB9CgogICAgYm9vbCBpc1Bvc2l0aXZlSW50KGluZm8pIHsKICAgICAgcmV0dXJuIGluZm8udHlwZS5zYXRpc2ZpZXMoCiAgICAgICAgICBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5qc1Bvc2l0aXZlSW50Q2xhc3MsIGNsb3NlZFdvcmxkKTsKICAgIH0KCiAgICBUeXBlSW5mb3JtYXRpb24gdHJ5TGF0ZXIoKSA9PiBpbmZlcnJlci50eXBlcy5ub25OdWxsRW1wdHlUeXBlOwoKICAgIFR5cGVJbmZvcm1hdGlvbiBhcmd1bWVudCA9CiAgICAgICAgYXJndW1lbnRzLmlzRW1wdHkgPyBudWxsIDogYXJndW1lbnRzLnBvc2l0aW9uYWwuZmlyc3Q7CgogICAgU3RyaW5nIG5hbWUgPSBzZWxlY3Rvci5uYW1lOwogICAgLy8gVGhlc2UgYXJlIHR5cGUgaW5mZXJlbmNlIHJ1bGVzIG9ubHkgZm9yIHVzZWZ1bCBjYXNlcyB0aGF0IGFyZSBub3QKICAgIC8vIGV4cHJlc3NlZCBpbiB0aGUgbGlicmFyeSBjb2RlLCBmb3IgZXhhbXBsZToKICAgIC8vCiAgICAvLyAgICAgaW50ICsgaW50ICAgICAgICAtPiAgaW50CiAgICAvLyAgICAgdWludDMxIHwgdWludDMxICAtPiAgdWludDMxCiAgICAvLwogICAgc3dpdGNoIChuYW1lKSB7CiAgICAgIGNhc2UgJyonOgogICAgICBjYXNlICcrJzoKICAgICAgY2FzZSAnJSc6CiAgICAgIGNhc2UgJ3JlbWFpbmRlcic6CiAgICAgIGNhc2UgJ34vJzoKICAgICAgICBpZiAoaXNFbXB0eShhcmd1bWVudCkpIHJldHVybiB0cnlMYXRlcigpOwogICAgICAgIGlmIChpc1Bvc2l0aXZlSW50KHJlY2VpdmVyKSAmJiBpc1Bvc2l0aXZlSW50KGFyZ3VtZW50KSkgewogICAgICAgICAgLy8gdWludDMxICsgdWludDMxIC0+IHVpbnQzMgogICAgICAgICAgaWYgKG5hbWUgPT0gJysnICYmIGlzVUludDMxKHJlY2VpdmVyKSAmJiBpc1VJbnQzMShhcmd1bWVudCkpIHsKICAgICAgICAgICAgcmV0dXJuIGluZmVycmVyLnR5cGVzLnVpbnQzMlR5cGU7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gaW5mZXJyZXIudHlwZXMucG9zaXRpdmVJbnRUeXBlOwogICAgICAgIH0KICAgICAgICBpZiAoaXNJbnQoYXJndW1lbnQpKSB7CiAgICAgICAgICByZXR1cm4gaW5mZXJyZXIudHlwZXMuaW50VHlwZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICBjYXNlICd8JzoKICAgICAgY2FzZSAnXic6CiAgICAgICAgaWYgKGlzRW1wdHkoYXJndW1lbnQpKSByZXR1cm4gdHJ5TGF0ZXIoKTsKICAgICAgICBpZiAoaXNVSW50MzEocmVjZWl2ZXIpICYmIGlzVUludDMxKGFyZ3VtZW50KSkgewogICAgICAgICAgcmV0dXJuIGluZmVycmVyLnR5cGVzLnVpbnQzMVR5cGU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwoKICAgICAgY2FzZSAnPj4nOgogICAgICAgIGlmIChpc0VtcHR5KGFyZ3VtZW50KSkgcmV0dXJuIHRyeUxhdGVyKCk7CiAgICAgICAgaWYgKGlzVUludDMxKHJlY2VpdmVyKSkgewogICAgICAgICAgcmV0dXJuIGluZmVycmVyLnR5cGVzLnVpbnQzMVR5cGU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwoKICAgICAgY2FzZSAnJic6CiAgICAgICAgaWYgKGlzRW1wdHkoYXJndW1lbnQpKSByZXR1cm4gdHJ5TGF0ZXIoKTsKICAgICAgICBpZiAoaXNVSW50MzEocmVjZWl2ZXIpIHx8IGlzVUludDMxKGFyZ3VtZW50KSkgewogICAgICAgICAgcmV0dXJuIGluZmVycmVyLnR5cGVzLnVpbnQzMVR5cGU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwoKICAgICAgY2FzZSAnLSc6CiAgICAgICAgaWYgKGlzRW1wdHkoYXJndW1lbnQpKSByZXR1cm4gdHJ5TGF0ZXIoKTsKICAgICAgICBpZiAoaXNJbnQoYXJndW1lbnQpKSB7CiAgICAgICAgICByZXR1cm4gaW5mZXJyZXIudHlwZXMuaW50VHlwZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICBjYXNlICd1bmFyeS0nOgogICAgICAgIC8vIFRoZSByZWNlaXZlciBiZWluZyBhbiBpbnQsIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBhbHNvIGJlIGFuIGludC4KICAgICAgICByZXR1cm4gaW5mZXJyZXIudHlwZXMuaW50VHlwZTsKCiAgICAgIGNhc2UgJ2Ficyc6CiAgICAgICAgcmV0dXJuIGFyZ3VtZW50cy5oYXNOb0FyZ3VtZW50cygpCiAgICAgICAgICAgID8gaW5mZXJyZXIudHlwZXMucG9zaXRpdmVJbnRUeXBlCiAgICAgICAgICAgIDogbnVsbDsKCiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQgPSBpbmZlcnJlci5jbG9zZWRXb3JsZDsKICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiA9IGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW47CiAgICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IG9sZFRhcmdldHMgPSBfY29uY3JldGVUYXJnZXRzOwogICAgQWJzdHJhY3RWYWx1ZSB0eXBlTWFzayA9IGNvbXB1dGVUeXBlZFNlbGVjdG9yKGluZmVycmVyKTsKICAgIGluZmVycmVyLnVwZGF0ZVNlbGVjdG9ySW5NZW1iZXIoCiAgICAgICAgY2FsbGVyLCBfY2FsbFR5cGUsIF9jYWxsLCBzZWxlY3RvciwgdHlwZU1hc2spOwoKICAgIF9oYXNDbG9zdXJlQ2FsbFRhcmdldHMgPQogICAgICAgIGNsb3NlZFdvcmxkLmluY2x1ZGVzQ2xvc3VyZUNhbGwoc2VsZWN0b3IsIHR5cGVNYXNrKTsKICAgIF9jb25jcmV0ZVRhcmdldHMgPSBjbG9zZWRXb3JsZC5sb2NhdGVNZW1iZXJzKHNlbGVjdG9yLCB0eXBlTWFzayk7CgogICAgLy8gVXBkYXRlIHRoZSBjYWxsIGdyYXBoIGlmIHRoZSB0YXJnZXRzIGNvdWxkIGhhdmUgY2hhbmdlZC4KICAgIGlmICghaWRlbnRpY2FsKF9jb25jcmV0ZVRhcmdldHMsIG9sZFRhcmdldHMpKSB7CiAgICAgIC8vIEFkZCBjYWxscyB0byBuZXcgdGFyZ2V0cyB0byB0aGUgZ3JhcGguCiAgICAgIF9jb25jcmV0ZVRhcmdldHMKICAgICAgICAgIC53aGVyZSgodGFyZ2V0KSA9PiAhb2xkVGFyZ2V0cy5jb250YWlucyh0YXJnZXQpKQogICAgICAgICAgLmZvckVhY2goKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNhbGxlZSA9CiAgICAgICAgICAgIGluZmVycmVyLnR5cGVzLmdldEluZmVycmVkVHlwZU9mTWVtYmVyKGVsZW1lbnQpOwogICAgICAgIGNhbGxlZS5hZGRDYWxsKGNhbGxlciwgX2NhbGwpOwogICAgICAgIGNhbGxlZS5hZGRVc2VyKHRoaXMpOwogICAgICAgIGluZmVycmVyLnVwZGF0ZVBhcmFtZXRlckFzc2lnbm1lbnRzKAogICAgICAgICAgICB0aGlzLCBlbGVtZW50LCBhcmd1bWVudHMsIHNlbGVjdG9yLCB0eXBlTWFzaywKICAgICAgICAgICAgcmVtb3ZlOiBmYWxzZSwgYWRkVG9RdWV1ZTogdHJ1ZSk7CiAgICAgIH0pOwoKICAgICAgLy8gV2FsayBvdmVyIHRoZSBvbGQgdGFyZ2V0cywgYW5kIHJlbW92ZSBjYWxscyB0aGF0IGNhbm5vdCBoYXBwZW4gYW55bW9yZS4KICAgICAgb2xkVGFyZ2V0cwogICAgICAgICAgLndoZXJlKCh0YXJnZXQpID0+ICFfY29uY3JldGVUYXJnZXRzLmNvbnRhaW5zKHRhcmdldCkpCiAgICAgICAgICAuZm9yRWFjaCgoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgICAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY2FsbGVlID0KICAgICAgICAgICAgaW5mZXJyZXIudHlwZXMuZ2V0SW5mZXJyZWRUeXBlT2ZNZW1iZXIoZWxlbWVudCk7CiAgICAgICAgY2FsbGVlLnJlbW92ZUNhbGwoY2FsbGVyLCBfY2FsbCk7CiAgICAgICAgY2FsbGVlLnJlbW92ZVVzZXIodGhpcyk7CiAgICAgICAgaW5mZXJyZXIudXBkYXRlUGFyYW1ldGVyQXNzaWdubWVudHMoCiAgICAgICAgICAgIHRoaXMsIGVsZW1lbnQsIGFyZ3VtZW50cywgc2VsZWN0b3IsIHR5cGVNYXNrLAogICAgICAgICAgICByZW1vdmU6IHRydWUsIGFkZFRvUXVldWU6IHRydWUpOwogICAgICB9KTsKICAgIH0KCiAgICAvLyBXYWxrIG92ZXIgdGhlIGZvdW5kIHRhcmdldHMsIGFuZCBjb21wdXRlIHRoZSBqb2luZWQgdW5pb24gdHlwZSBtYXNrCiAgICAvLyBmb3IgYWxsIHRoZXNlIHRhcmdldHMuCiAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKICAgIGlmIChfaGFzQ2xvc3VyZUNhbGxUYXJnZXRzKSB7CiAgICAgIHJlc3VsdCA9IGFic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGU7CiAgICB9IGVsc2UgewogICAgICByZXN1bHQgPSBpbmZlcnJlci50eXBlcwogICAgICAgICAgLmpvaW5UeXBlTWFza3MoX2NvbmNyZXRlVGFyZ2V0cy5tYXAoKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICAgICAgaWYgKGluZmVycmVyLnJldHVybnNMaXN0RWxlbWVudFR5cGUoc2VsZWN0b3IsIHR5cGVNYXNrKSkgewogICAgICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4uZ2V0Q29udGFpbmVyRWxlbWVudFR5cGUocmVjZWl2ZXIudHlwZSk7CiAgICAgICAgfSBlbHNlIGlmIChpbmZlcnJlci5yZXR1cm5zTWFwVmFsdWVUeXBlKHNlbGVjdG9yLCB0eXBlTWFzaykpIHsKICAgICAgICAgIGlmIChhYnN0cmFjdFZhbHVlRG9tYWluLmlzRGljdGlvbmFyeSh0eXBlTWFzaykpIHsKICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSBhcmcgPSBhcmd1bWVudHMucG9zaXRpb25hbFswXS50eXBlOwogICAgICAgICAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRQcmltaXRpdmVWYWx1ZShhcmcpOwogICAgICAgICAgICBpZiAodmFsdWUgaXMgU3RyaW5nQ29uc3RhbnRWYWx1ZSkgewogICAgICAgICAgICAgIFN0cmluZyBrZXkgPSB2YWx1ZS5zdHJpbmdWYWx1ZTsKICAgICAgICAgICAgICBpZiAoYWJzdHJhY3RWYWx1ZURvbWFpbi5jb250YWluc0RpY3Rpb25hcnlLZXkodHlwZU1hc2ssIGtleSkpIHsKICAgICAgICAgICAgICAgIGlmIChkZWJ1Zy5WRVJCT1NFKSB7CiAgICAgICAgICAgICAgICAgIHByaW50KCJEaWN0aW9uYXJ5IGxvb2t1cCBmb3IgJGtleSB5aWVsZHMgIgogICAgICAgICAgICAgICAgICAgICAgIiR7YWJzdHJhY3RWYWx1ZURvbWFpbi5nZXREaWN0aW9uYXJ5VmFsdWVGb3JLZXkodHlwZU1hc2ssIGtleSl9LiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4uZ2V0RGljdGlvbmFyeVZhbHVlRm9yS2V5KAogICAgICAgICAgICAgICAgICAgIHR5cGVNYXNrLCBrZXkpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBUaGUgdHlwZU1hcCBpcyBwcmVjaXNlLCBzbyBpZiB3ZSBkbyBub3QgZmluZCB0aGUga2V5LCB0aGUKICAgICAgICAgICAgICAgIC8vIGxvb2t1cCB3aWxsIGJlIFtudWxsXSBhdCBydW50aW1lLgogICAgICAgICAgICAgICAgaWYgKGRlYnVnLlZFUkJPU0UpIHsKICAgICAgICAgICAgICAgICAgcHJpbnQoIkRpY3Rpb25hcnkgbG9va3VwIGZvciAka2V5IHlpZWxkcyBbbnVsbF0uIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gaW5mZXJyZXIudHlwZXMubnVsbFR5cGUudHlwZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGFzc2VydChhYnN0cmFjdFZhbHVlRG9tYWluLmlzTWFwKHR5cGVNYXNrKSk7CiAgICAgICAgICBpZiAoZGVidWcuVkVSQk9TRSkgewogICAgICAgICAgICBwcmludCgiTWFwIGxvb2t1cCBmb3IgJHNlbGVjdG9yIHlpZWxkcyAiCiAgICAgICAgICAgICAgICAiJHthYnN0cmFjdFZhbHVlRG9tYWluLmdldE1hcFZhbHVlVHlwZSh0eXBlTWFzayl9LiIpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4uZ2V0TWFwVmFsdWVUeXBlKHR5cGVNYXNrKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgVHlwZUluZm9ybWF0aW9uIGluZm8gPQogICAgICAgICAgICAgIGhhbmRsZUludHJpc2lmaWVkU2VsZWN0b3Ioc2VsZWN0b3IsIHR5cGVNYXNrLCBpbmZlcnJlcik7CiAgICAgICAgICBpZiAoaW5mbyAhPSBudWxsKSByZXR1cm4gaW5mby50eXBlOwogICAgICAgICAgcmV0dXJuIGluZmVycmVyLnR5cGVPZk1lbWJlcldpdGhTZWxlY3RvcihlbGVtZW50LCBzZWxlY3RvcikudHlwZTsKICAgICAgICB9CiAgICAgIH0pKTsKICAgIH0KICAgIGlmIChpc0NvbmRpdGlvbmFsICYmCiAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5pc051bGwocmVjZWl2ZXIudHlwZSkuaXNQb3RlbnRpYWxseVRydWUpIHsKICAgICAgLy8gQ29uZGl0aW9uYWwgY2FsbCBzaXRlcyAoZS5nLiBgYT8uYmApIG1heSBiZSBudWxsIGlmIHRoZSByZWNlaXZlciBpcwogICAgICAvLyBudWxsLgogICAgICByZXN1bHQgPSBhYnN0cmFjdFZhbHVlRG9tYWluLmluY2x1ZGVOdWxsKHJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBnaXZlVXAoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIsIHtib29sIGNsZWFyQXNzaWdubWVudHM6IHRydWV9KSB7CiAgICBpZiAoIWFiYW5kb25JbmZlcmVuY2luZykgewogICAgICBpbmZlcnJlci51cGRhdGVTZWxlY3RvckluTWVtYmVyKGNhbGxlciwgX2NhbGxUeXBlLCBfY2FsbCwgc2VsZWN0b3IsIG1hc2spOwogICAgICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IG9sZFRhcmdldHMgPSBfY29uY3JldGVUYXJnZXRzOwogICAgICBfaGFzQ2xvc3VyZUNhbGxUYXJnZXRzID0KICAgICAgICAgIGluZmVycmVyLmNsb3NlZFdvcmxkLmluY2x1ZGVzQ2xvc3VyZUNhbGwoc2VsZWN0b3IsIG1hc2spOwogICAgICBfY29uY3JldGVUYXJnZXRzID0gaW5mZXJyZXIuY2xvc2VkV29ybGQubG9jYXRlTWVtYmVycyhzZWxlY3RvciwgbWFzayk7CiAgICAgIGZvciAoTWVtYmVyRW50aXR5IGVsZW1lbnQgaW4gX2NvbmNyZXRlVGFyZ2V0cykgewogICAgICAgIGlmICghb2xkVGFyZ2V0cy5jb250YWlucyhlbGVtZW50KSkgewogICAgICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNhbGxlZSA9CiAgICAgICAgICAgICAgaW5mZXJyZXIudHlwZXMuZ2V0SW5mZXJyZWRUeXBlT2ZNZW1iZXIoZWxlbWVudCk7CiAgICAgICAgICBjYWxsZWUuYWRkQ2FsbChjYWxsZXIsIF9jYWxsKTsKICAgICAgICAgIGluZmVycmVyLnVwZGF0ZVBhcmFtZXRlckFzc2lnbm1lbnRzKAogICAgICAgICAgICAgIHRoaXMsIGVsZW1lbnQsIGFyZ3VtZW50cywgc2VsZWN0b3IsIG1hc2ssCiAgICAgICAgICAgICAgcmVtb3ZlOiBmYWxzZSwgYWRkVG9RdWV1ZTogdHJ1ZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBzdXBlci5naXZlVXAoaW5mZXJyZXIsIGNsZWFyQXNzaWdubWVudHM6IGNsZWFyQXNzaWdubWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZW1vdmVBbmRDbGVhclJlZmVyZW5jZXMoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIGZvciAoTWVtYmVyRW50aXR5IGVsZW1lbnQgaW4gX2NvbmNyZXRlVGFyZ2V0cykgewogICAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY2FsbGVlID0KICAgICAgICAgIGluZmVycmVyLnR5cGVzLmdldEluZmVycmVkVHlwZU9mTWVtYmVyKGVsZW1lbnQpOwogICAgICBjYWxsZWUucmVtb3ZlVXNlcih0aGlzKTsKICAgIH0KICAgIGlmIChhcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBhcmd1bWVudHMuZm9yRWFjaCgoaW5mbykgPT4gaW5mby5yZW1vdmVVc2VyKHRoaXMpKTsKICAgIH0KICAgIHN1cGVyLnJlbW92ZUFuZENsZWFyUmVmZXJlbmNlcyhpbmZlcnJlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnQ2FsbCBzaXRlICRkZWJ1Z05hbWUgb24gJHtyZWNlaXZlci50eXBlfSAkdHlwZSc7CgogIEBvdmVycmlkZQogIGFjY2VwdChUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0RHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNTdGFibGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gcmVjZWl2ZXIuaXNTdGFibGUgJiYKICAgICAgICBfY29uY3JldGVUYXJnZXRzLmV2ZXJ5KChNZW1iZXJFbnRpdHkgZWxlbWVudCkgPT4KICAgICAgICAgICAgaW5mZXJyZXIudHlwZXMuZ2V0SW5mZXJyZWRUeXBlT2ZNZW1iZXIoZWxlbWVudCkuaXNTdGFibGUpICYmCiAgICAgICAgKGFyZ3VtZW50cyA9PSBudWxsIHx8IGFyZ3VtZW50cy5ldmVyeSgoaW5mbykgPT4gaW5mby5pc1N0YWJsZSkpICYmCiAgICAgICAgc3VwZXIuaGFzU3RhYmxlVHlwZShpbmZlcnJlcik7CiAgfQp9CgpjbGFzcyBDbG9zdXJlQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gZXh0ZW5kcyBDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiB7CiAgZmluYWwgVHlwZUluZm9ybWF0aW9uIGNsb3N1cmU7CgogIENsb3N1cmVDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbigKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY29udGV4dCwKICAgICAgT2JqZWN0IGNhbGwsCiAgICAgIE1lbWJlckVudGl0eSBlbmNsb3NpbmcsCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIG1hc2ssCiAgICAgIHRoaXMuY2xvc3VyZSwKICAgICAgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzLAogICAgICBib29sIGluTG9vcCkKICAgICAgOiBzdXBlcihhYnN0cmFjdFZhbHVlRG9tYWluLCBjb250ZXh0LCBjYWxsLCBlbmNsb3NpbmcsIHNlbGVjdG9yLCBtYXNrLAogICAgICAgICAgICBhcmd1bWVudHMsIGluTG9vcCk7CgogIEBvdmVycmlkZQogIHZvaWQgYWRkVG9HcmFwaChJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgYXJndW1lbnRzLmZvckVhY2goKGluZm8pID0+IGluZm8uYWRkVXNlcih0aGlzKSk7CiAgICBjbG9zdXJlLmFkZFVzZXIodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSA9PiBzYWZlVHlwZShpbmZlcnJlcik7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZ2V0IGNhbGxlZXMgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBjb21wdXRlIGNhbGxlZXMgb2YgYSBjbG9zdXJlIGNhbGwuIik7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnQ2xvc3VyZSBjYWxsICRkZWJ1Z05hbWUgb24gJGNsb3N1cmUnOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoVHlwZUluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdENsb3N1cmVDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVtb3ZlQW5kQ2xlYXJSZWZlcmVuY2VzKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICAvLyBUaGlzIG1ldGhvZCBpcyBhIHBsYWNlaG9sZGVyIGZvciB0aGUgZm9sbG93aW5nIGNvbW1lbnQ6CiAgICAvLyBXZSBzaG91bGQgbWFpbnRhaW4gdGhlIGluZm9ybWF0aW9uIHRoYXQgdGhlIGNsb3N1cmUgaXMgYSB1c2VyCiAgICAvLyBvZiBpdHMgYXJndW1lbnRzIGJlY2F1c2Ugd2UgZG8gbm90IGNoZWNrIHRoYXQgdGhlIGFyZ3VtZW50cwogICAgLy8gaGF2ZSBhIHN0YWJsZSB0eXBlIGZvciBhIGNsb3N1cmUgY2FsbCB0byBiZSBzdGFibGU7IG91ciB0cmFjaW5nCiAgICAvLyBhbmFseXNpcyB3YW50IHRvIGtub3cgd2hldGhlciBhbiAobm9uLXN0YWJsZSkgYXJndW1lbnQgaXMKICAgIC8vIHBhc3NlZCB0byBhIGNsb3N1cmUuCiAgICByZXR1cm4gc3VwZXIucmVtb3ZlQW5kQ2xlYXJSZWZlcmVuY2VzKGluZmVycmVyKTsKICB9Cn0KCi8vLyBBIFtDb25jcmV0ZVR5cGVJbmZvcm1hdGlvbl0gcmVwcmVzZW50cyBhIHR5cGUgdGhhdCBuZWVkZWQKLy8vIHRvIGJlIG1hdGVyaWFsaXplZCBkdXJpbmcgdGhlIGNyZWF0aW9uIG9mIHRoZSBncmFwaC4gRm9yIGV4YW1wbGUsCi8vLyBsaXRlcmFscywgWzp0aGlzOl0gb3IgWzpzdXBlcjpdIG5lZWQgYSBbQ29uY3JldGVUeXBlSW5mb3JtYXRpb25dLgovLy8KLy8vIFtDb25jcmV0ZVR5cGVJbmZvcm1hdGlvbl0gbm9kZXMgaGF2ZSBubyBhc3NpZ25tZW50LiBBbHNvLCB0byBzYXZlCi8vLyBvbiBtZW1vcnksIHdlIGRvIG5vdCBhZGQgdXNlcnMgdG8gW0NvbmNyZXRlVHlwZUluZm9ybWF0aW9uXSBub2RlcywKLy8vIGJlY2F1c2Ugd2Uga25vdyBzdWNoIG5vZGUgd2lsbCBuZXZlciBiZSByZWZpbmVkIHRvIGEgZGlmZmVyZW50Ci8vLyB0eXBlLgpjbGFzcyBDb25jcmV0ZVR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIFR5cGVJbmZvcm1hdGlvbiB7CiAgQ29uY3JldGVUeXBlSW5mb3JtYXRpb24oQWJzdHJhY3RWYWx1ZSB0eXBlKSA6IHN1cGVyLnVudHJhY2tlZCh0eXBlKSB7CiAgICB0aGlzLmlzU3RhYmxlID0gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQ29uY3JldGUgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRVc2VyKFR5cGVJbmZvcm1hdGlvbiB1c2VyKSB7CiAgICAvLyBOb3RoaW5nIHRvIGRvLCBhIGNvbmNyZXRlIHR5cGUgZG9lcyBub3QgZ2V0IHVwZGF0ZWQgc28gbmV2ZXIKICAgIC8vIG5lZWRzIHRvIG5vdGlmeSBpdHMgdXNlcnMuCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZFVzZXJzT2YoVHlwZUluZm9ybWF0aW9uIG90aGVyKSB7CiAgICAvLyBOb3RoaW5nIHRvIGRvLCBhIGNvbmNyZXRlIHR5cGUgZG9lcyBub3QgZ2V0IHVwZGF0ZWQgc28gbmV2ZXIKICAgIC8vIG5lZWRzIHRvIG5vdGlmeSBpdHMgdXNlcnMuCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlbW92ZVVzZXIoVHlwZUluZm9ybWF0aW9uIHVzZXIpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkQXNzaWdubWVudChUeXBlSW5mb3JtYXRpb24gYXNzaWdubWVudCkgewogICAgdGhyb3cgIk5vdCBzdXBwb3J0ZWQiOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZW1vdmVBc3NpZ25tZW50KFR5cGVJbmZvcm1hdGlvbiBhc3NpZ25tZW50KSB7CiAgICB0aHJvdyAiTm90IHN1cHBvcnRlZCI7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSA9PiB0eXBlOwoKICBAb3ZlcnJpZGUKICBib29sIHJlc2V0KEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICB0aHJvdyAiTm90IHN1cHBvcnRlZCI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnVHlwZSAkdHlwZSc7CgogIEBvdmVycmlkZQogIGFjY2VwdChUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Q29uY3JldGVUeXBlSW5mb3JtYXRpb24odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc1N0YWJsZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpID0+IHRydWU7Cn0KCmNsYXNzIFN0cmluZ0xpdGVyYWxUeXBlSW5mb3JtYXRpb24gZXh0ZW5kcyBDb25jcmV0ZVR5cGVJbmZvcm1hdGlvbiB7CiAgZmluYWwgU3RyaW5nIHZhbHVlOwoKICBTdHJpbmdMaXRlcmFsVHlwZUluZm9ybWF0aW9uKAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sIHRoaXMudmFsdWUsIEFic3RyYWN0VmFsdWUgbWFzaykKICAgICAgOiBzdXBlcihhYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZVByaW1pdGl2ZVZhbHVlKAogICAgICAgICAgICBtYXNrLCBuZXcgU3RyaW5nQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpKTsKCiAgU3RyaW5nIGFzU3RyaW5nKCkgPT4gdmFsdWU7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1R5cGUgJHR5cGUgdmFsdWUgJHt2YWx1ZX0nOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoVHlwZUluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFN0cmluZ0xpdGVyYWxUeXBlSW5mb3JtYXRpb24odGhpcyk7CiAgfQp9CgpjbGFzcyBCb29sTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIENvbmNyZXRlVHlwZUluZm9ybWF0aW9uIHsKICBmaW5hbCBib29sIHZhbHVlOwoKICBCb29sTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbigKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLCB0aGlzLnZhbHVlLCBBYnN0cmFjdFZhbHVlIG1hc2spCiAgICAgIDogc3VwZXIoYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVQcmltaXRpdmVWYWx1ZSgKICAgICAgICAgICAgbWFzaywgdmFsdWUgPyBuZXcgVHJ1ZUNvbnN0YW50VmFsdWUoKSA6IG5ldyBGYWxzZUNvbnN0YW50VmFsdWUoKSkpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnVHlwZSAkdHlwZSB2YWx1ZSAke3ZhbHVlfSc7CgogIEBvdmVycmlkZQogIGFjY2VwdChUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Qm9vbExpdGVyYWxUeXBlSW5mb3JtYXRpb24odGhpcyk7CiAgfQp9CgovLy8gQSBbTmFycm93VHlwZUluZm9ybWF0aW9uXSBuYXJyb3dzIGEgW1R5cGVJbmZvcm1hdGlvbl0gdG8gYSB0eXBlLAovLy8gcmVwcmVzZW50ZWQgaW4gW3R5cGVBbm5vdGF0aW9uXS4KLy8vCi8vLyBBIFtOYXJyb3dUeXBlSW5mb3JtYXRpb25dIG5vZGUgaGFzIG9ubHkgb25lIGFzc2lnbm1lbnQ6IHRoZQovLy8gW1R5cGVJbmZvcm1hdGlvbl0gaXQgbmFycm93cy4KLy8vCi8vLyBbTmFycm93VHlwZUluZm9ybWF0aW9uXSBub2RlcyBhcmUgY3JlYXRlZCBmb3I6Ci8vLwovLy8gLSBDb2RlIGFmdGVyIGBpc2AgYW5kIGBhc2AgY2hlY2tzLCB3aGVyZSB3ZSBoYXZlIG1vcmUgaW5mb3JtYXRpb24KLy8vICAgb24gdGhlIHR5cGUgb2YgdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiB0aGUgZXhwcmVzc2lvbi4KLy8vCi8vLyAtIENvZGUgYWZ0ZXIgYSBkeW5hbWljIGNhbGwsIHdoZXJlIHdlIGhhdmUgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUKLy8vICAgdHlwZSBvZiB0aGUgcmVjZWl2ZXI6IGl0IGNhbiBvbmx5IGJlIG9mIGEgY2xhc3MgdGhhdCBob2xkcyBhCi8vLyAgIHBvdGVudGlhbCB0YXJnZXQgb2YgdGhpcyBkeW5hbWljIGNhbGwuCi8vLwovLy8gLSBJbiBjaGVja2VkIG1vZGUsIGFmdGVyIGEgdHlwZSBhbm5vdGF0aW9uLCB3ZSBoYXZlIG1vcmUKLy8vICAgaW5mb3JtYXRpb24gb24gdGhlIHR5cGUgb2YgYSBsb2NhbC4KY2xhc3MgTmFycm93VHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgVHlwZUluZm9ybWF0aW9uIHsKICBmaW5hbCBBYnN0cmFjdFZhbHVlIHR5cGVBbm5vdGF0aW9uOwoKICBOYXJyb3dUeXBlSW5mb3JtYXRpb24oQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICBUeXBlSW5mb3JtYXRpb24gbmFycm93ZWRUeXBlLCB0aGlzLnR5cGVBbm5vdGF0aW9uKQogICAgICA6IHN1cGVyKGFic3RyYWN0VmFsdWVEb21haW4uZW1wdHlUeXBlLCBuYXJyb3dlZFR5cGUuY29udGV4dCkgewogICAgYWRkQXNzaWdubWVudChuYXJyb3dlZFR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYWRkQXNzaWdubWVudChUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgc3VwZXIuYWRkQXNzaWdubWVudChpbmZvKTsKICAgIGFzc2VydChhc3NpZ25tZW50cy5sZW5ndGggPT0gMSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4gPSBpbmZlcnJlci5hYnN0cmFjdFZhbHVlRG9tYWluOwogICAgQWJzdHJhY3RWYWx1ZSBpbnB1dCA9IGFzc2lnbm1lbnRzLmZpcnN0LnR5cGU7CiAgICBBYnN0cmFjdFZhbHVlIGludGVyc2VjdGlvbiA9CiAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5pbnRlcnNlY3Rpb24oaW5wdXQsIHR5cGVBbm5vdGF0aW9uKTsKICAgIGlmIChkZWJ1Zy5BTk9NQUxZX1dBUk4pIHsKICAgICAgaWYgKGFic3RyYWN0VmFsdWVEb21haW4uY29udGFpbnMoaW5wdXQsIGludGVyc2VjdGlvbikuaXNEZWZpbml0ZWx5RmFsc2UgfHwKICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAgICAgICAuY29udGFpbnModHlwZUFubm90YXRpb24sIGludGVyc2VjdGlvbikKICAgICAgICAgICAgICAuaXNEZWZpbml0ZWx5RmFsc2UpIHsKICAgICAgICBwcmludCgiQU5PTUFMWSBXQVJOSU5HOiBuYXJyb3dlZCAkaW5wdXQgdG8gJGludGVyc2VjdGlvbiB2aWEgIgogICAgICAgICAgICAiJHR5cGVBbm5vdGF0aW9uIik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBpbnRlcnNlY3Rpb247CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ05hcnJvdyB0byAkdHlwZUFubm90YXRpb24gJHR5cGUnOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KFR5cGVJbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXROYXJyb3dUeXBlSW5mb3JtYXRpb24odGhpcyk7CiAgfQp9CgovLy8gQW4gW0luZmVycmVkVHlwZUluZm9ybWF0aW9uXSBpcyBhIFtUeXBlSW5mb3JtYXRpb25dIHRoYXQKLy8vIGRlZmF1bHRzIHRvIHRoZSBkeW5hbWljIHR5cGUgdW50aWwgaXQgaXMgbWFya2VkIGFzIGJlaW5nCi8vLyBpbmZlcnJlZCwgYXQgd2hpY2ggcG9pbnQgaXQgY29tcHV0ZXMgaXRzIHR5cGUgYmFzZWQgb24KLy8vIGl0cyBhc3NpZ25tZW50cy4KYWJzdHJhY3QgY2xhc3MgSW5mZXJyZWRUeXBlSW5mb3JtYXRpb24gZXh0ZW5kcyBUeXBlSW5mb3JtYXRpb24gewogIC8vLyBXaGV0aGVyIHRoZSBlbGVtZW50IHR5cGUgaW4gdGhhdCBjb250YWluZXIgaGFzIGJlZW4gaW5mZXJyZWQuCiAgYm9vbCBpbmZlcnJlZCA9IGZhbHNlOwoKICBJbmZlcnJlZFR5cGVJbmZvcm1hdGlvbihBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sCiAgICAgIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBjb250ZXh0LCBUeXBlSW5mb3JtYXRpb24gcGFyZW50VHlwZSkKICAgICAgOiBzdXBlcihhYnN0cmFjdFZhbHVlRG9tYWluLmVtcHR5VHlwZSwgY29udGV4dCkgewogICAgaWYgKHBhcmVudFR5cGUgIT0gbnVsbCkgYWRkQXNzaWdubWVudChwYXJlbnRUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIGlmICghaW5mZXJyZWQpIHJldHVybiBzYWZlVHlwZShpbmZlcnJlcik7CiAgICByZXR1cm4gaW5mZXJyZXIudHlwZXMuY29tcHV0ZVR5cGVNYXNrKGFzc2lnbm1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaGFzU3RhYmxlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIGluZmVycmVkICYmIHN1cGVyLmhhc1N0YWJsZVR5cGUoaW5mZXJyZXIpOwogIH0KfQoKLy8vIEEgW0xpc3RUeXBlSW5mb3JtYXRpb25dIGlzIGEgW1R5cGVJbmZvcm1hdGlvbl0gY3JlYXRlZAovLy8gZm9yIGVhY2ggYExpc3RgIGluc3RhbnRpYXRpb25zLgpjbGFzcyBMaXN0VHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgVHlwZUluZm9ybWF0aW9uIHdpdGggVHJhY2VkVHlwZUluZm9ybWF0aW9uIHsKICBmaW5hbCBFbGVtZW50SW5Db250YWluZXJUeXBlSW5mb3JtYXRpb24gZWxlbWVudFR5cGU7CgogIC8vLyBUaGUgY29udGFpbmVyIHR5cGUgYmVmb3JlIGl0IGlzIGluZmVycmVkLgogIGZpbmFsIEFic3RyYWN0VmFsdWUgb3JpZ2luYWxUeXBlOwoKICAvLy8gVGhlIGxlbmd0aCBhdCB0aGUgYWxsb2NhdGlvbiBzaXRlLgogIGZpbmFsIGludCBvcmlnaW5hbExlbmd0aDsKCiAgLy8vIFRoZSBsZW5ndGggYWZ0ZXIgdGhlIGNvbnRhaW5lciBoYXMgYmVlbiB0cmFjZWQuCiAgaW50IGluZmVycmVkTGVuZ3RoOwoKICAvLy8gV2hldGhlciB0aGlzIGxpc3QgZ29lcyB0aHJvdWdoIGEgZ3Jvd2FibGUgY2hlY2suCiAgLy8vIFdlIGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSBpdCBkb2VzLgogIGJvb2wgY2hlY2tzR3Jvd2FibGUgPSB0cnVlOwoKICBMaXN0VHlwZUluZm9ybWF0aW9uKAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sCiAgICAgIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBjb250ZXh0LAogICAgICB0aGlzLm9yaWdpbmFsVHlwZSwKICAgICAgdGhpcy5lbGVtZW50VHlwZSwKICAgICAgdGhpcy5vcmlnaW5hbExlbmd0aCkKICAgICAgOiBzdXBlcihvcmlnaW5hbFR5cGUsIGNvbnRleHQpIHsKICAgIGluZmVycmVkTGVuZ3RoID0gYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRDb250YWluZXJMZW5ndGgob3JpZ2luYWxUeXBlKTsKICAgIGVsZW1lbnRUeXBlLmFkZFVzZXIodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnTGlzdCB0eXBlICR0eXBlJzsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KFR5cGVJbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRMaXN0VHlwZUluZm9ybWF0aW9uKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNTdGFibGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gZWxlbWVudFR5cGUuaXNTdGFibGUgJiYgc3VwZXIuaGFzU3RhYmxlVHlwZShpbmZlcnJlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4gPSBpbmZlcnJlci5hYnN0cmFjdFZhbHVlRG9tYWluOwogICAgQWJzdHJhY3RWYWx1ZSBtYXNrID0gdHlwZTsKICAgIGlmICghYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0NvbnRhaW5lcih0eXBlKSB8fAogICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uZ2V0Q29udGFpbmVyRWxlbWVudFR5cGUodHlwZSkgIT0gZWxlbWVudFR5cGUudHlwZSB8fAogICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uZ2V0Q29udGFpbmVyTGVuZ3RoKHR5cGUpICE9IGluZmVycmVkTGVuZ3RoKSB7CiAgICAgIHJldHVybiBhYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZUNvbnRhaW5lclZhbHVlKAogICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRHZW5lcmFsaXphdGlvbihvcmlnaW5hbFR5cGUpLAogICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRBbGxvY2F0aW9uTm9kZShvcmlnaW5hbFR5cGUpLAogICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRBbGxvY2F0aW9uRWxlbWVudChvcmlnaW5hbFR5cGUpLAogICAgICAgICAgZWxlbWVudFR5cGUudHlwZSwKICAgICAgICAgIGluZmVycmVkTGVuZ3RoKTsKICAgIH0KICAgIHJldHVybiBtYXNrOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBzYWZlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgPT4gb3JpZ2luYWxUeXBlOwoKICBAb3ZlcnJpZGUKICB2b2lkIGNsZWFudXAoKSB7CiAgICBzdXBlci5jbGVhbnVwKCk7CiAgICBlbGVtZW50VHlwZS5jbGVhbnVwKCk7CiAgICBfZmxvd3NJbnRvID0gbnVsbDsKICB9Cn0KCi8vLyBBbiBbRWxlbWVudEluQ29udGFpbmVyVHlwZUluZm9ybWF0aW9uXSBob2xkcyB0aGUgY29tbW9uIHR5cGUgb2YgdGhlCi8vLyBlbGVtZW50cyBpbiBhIFtMaXN0VHlwZUluZm9ybWF0aW9uXS4KY2xhc3MgRWxlbWVudEluQ29udGFpbmVyVHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgSW5mZXJyZWRUeXBlSW5mb3JtYXRpb24gewogIEVsZW1lbnRJbkNvbnRhaW5lclR5cGVJbmZvcm1hdGlvbihBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sCiAgICAgIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBjb250ZXh0LCBlbGVtZW50VHlwZSkKICAgICAgOiBzdXBlcihhYnN0cmFjdFZhbHVlRG9tYWluLCBjb250ZXh0LCBlbGVtZW50VHlwZSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdFbGVtZW50IGluIGNvbnRhaW5lciAkdHlwZSc7CgogIEBvdmVycmlkZQogIGFjY2VwdChUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0RWxlbWVudEluQ29udGFpbmVyVHlwZUluZm9ybWF0aW9uKHRoaXMpOwogIH0KfQoKLy8vIEEgW1NldFR5cGVJbmZvcm1hdGlvbl0gaXMgYSBbVHlwZUluZm9ybWF0aW9uXSBjcmVhdGVkIGZvciBzZXRzLgpjbGFzcyBTZXRUeXBlSW5mb3JtYXRpb24gZXh0ZW5kcyBUeXBlSW5mb3JtYXRpb24gd2l0aCBUcmFjZWRUeXBlSW5mb3JtYXRpb24gewogIGZpbmFsIEVsZW1lbnRJblNldFR5cGVJbmZvcm1hdGlvbiBlbGVtZW50VHlwZTsKCiAgZmluYWwgQWJzdHJhY3RWYWx1ZSBvcmlnaW5hbFR5cGU7CgogIFNldFR5cGVJbmZvcm1hdGlvbigKICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNvbnRleHQsIHRoaXMub3JpZ2luYWxUeXBlLCB0aGlzLmVsZW1lbnRUeXBlKQogICAgICA6IHN1cGVyKG9yaWdpbmFsVHlwZSwgY29udGV4dCkgewogICAgZWxlbWVudFR5cGUuYWRkVXNlcih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdTZXQgdHlwZSAkdHlwZSc7CgogIEBvdmVycmlkZQogIGFjY2VwdChUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0U2V0VHlwZUluZm9ybWF0aW9uKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluID0gaW5mZXJyZXIuYWJzdHJhY3RWYWx1ZURvbWFpbjsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IHR5cGU7CiAgICBpZiAoIWFic3RyYWN0VmFsdWVEb21haW4uaXNTZXQodHlwZSkgfHwKICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmdldFNldEVsZW1lbnRUeXBlKHR5cGUpICE9IGVsZW1lbnRUeXBlLnR5cGUpIHsKICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlU2V0VmFsdWUoCiAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmdldEdlbmVyYWxpemF0aW9uKG9yaWdpbmFsVHlwZSksCiAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmdldEFsbG9jYXRpb25Ob2RlKG9yaWdpbmFsVHlwZSksCiAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmdldEFsbG9jYXRpb25FbGVtZW50KG9yaWdpbmFsVHlwZSksCiAgICAgICAgICBlbGVtZW50VHlwZS50eXBlKTsKICAgIH0KICAgIHJldHVybiBtYXNrOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBzYWZlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgPT4gb3JpZ2luYWxUeXBlOwoKICBAb3ZlcnJpZGUKICBib29sIGhhc1N0YWJsZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHJldHVybiBlbGVtZW50VHlwZS5pc1N0YWJsZSAmJiBzdXBlci5oYXNTdGFibGVUeXBlKGluZmVycmVyKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2xlYW51cCgpIHsKICAgIHN1cGVyLmNsZWFudXAoKTsKICAgIGVsZW1lbnRUeXBlLmNsZWFudXAoKTsKICAgIF9mbG93c0ludG8gPSBudWxsOwogIH0KfQoKLy8vIEFuIFtFbGVtZW50SW5TZXRUeXBlSW5mb3JtYXRpb25dIGhvbGRzIHRoZSBjb21tb24gdHlwZSBvZiB0aGUgZWxlbWVudHMgaW4gYQovLy8gW1NldFR5cGVJbmZvcm1hdGlvbl0uCmNsYXNzIEVsZW1lbnRJblNldFR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIEluZmVycmVkVHlwZUluZm9ybWF0aW9uIHsKICBFbGVtZW50SW5TZXRUeXBlSW5mb3JtYXRpb24oQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY29udGV4dCwgZWxlbWVudFR5cGUpCiAgICAgIDogc3VwZXIoYWJzdHJhY3RWYWx1ZURvbWFpbiwgY29udGV4dCwgZWxlbWVudFR5cGUpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnRWxlbWVudCBpbiBzZXQgJHR5cGUnOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoVHlwZUluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdEVsZW1lbnRJblNldFR5cGVJbmZvcm1hdGlvbih0aGlzKTsKICB9Cn0KCi8vLyBBIFtNYXBUeXBlSW5mb3JtYXRpb25dIGlzIGEgW1R5cGVJbmZvcm1hdGlvbl0gY3JlYXRlZAovLy8gZm9yIG1hcHMuCmNsYXNzIE1hcFR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIFR5cGVJbmZvcm1hdGlvbiB3aXRoIFRyYWNlZFR5cGVJbmZvcm1hdGlvbiB7CiAgLy8gV2hlbiBpbiBEaWN0aW9uYXJ5IG1vZGUsIHRoaXMgbWFwIHRyYWNrcyB0aGUgdHlwZSBvZiB0aGUgdmFsdWVzIHRoYXQKICAvLyBoYXZlIGJlZW4gYXNzaWduZWQgdG8gYSBzcGVjaWZpYyBbU3RyaW5nXSBrZXkuCiAgZmluYWwgTWFwPFN0cmluZywgVmFsdWVJbk1hcFR5cGVJbmZvcm1hdGlvbj4gdHlwZUluZm9NYXAgPSB7fTsKICAvLyBUaGVzZSBmaWVsZHMgdHJhY2sgdGhlIG92ZXJhbGwgdHlwZSBvZiB0aGUga2V5cy92YWx1ZXMgaW4gdGhlIG1hcC4KICBmaW5hbCBLZXlJbk1hcFR5cGVJbmZvcm1hdGlvbiBrZXlUeXBlOwogIGZpbmFsIFZhbHVlSW5NYXBUeXBlSW5mb3JtYXRpb24gdmFsdWVUeXBlOwogIGZpbmFsIEFic3RyYWN0VmFsdWUgb3JpZ2luYWxUeXBlOwoKICAvLyBTZXQgdG8gZmFsc2UgaWYgYSBzdGF0aWNhbGx5IHVua25vd24ga2V5IGZsb3dzIGludG8gdGhpcyBtYXAuCiAgYm9vbCBfYWxsS2V5c0FyZVN0cmluZ3MgPSB0cnVlOwoKICBib29sIGdldCBpbkRpY3Rpb25hcnlNb2RlID0+ICFiYWlsZWRPdXQgJiYgX2FsbEtleXNBcmVTdHJpbmdzOwoKICBNYXBUeXBlSW5mb3JtYXRpb24oTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNvbnRleHQsIHRoaXMub3JpZ2luYWxUeXBlLAogICAgICB0aGlzLmtleVR5cGUsIHRoaXMudmFsdWVUeXBlKQogICAgICA6IHN1cGVyKG9yaWdpbmFsVHlwZSwgY29udGV4dCkgewogICAga2V5VHlwZS5hZGRVc2VyKHRoaXMpOwogICAgdmFsdWVUeXBlLmFkZFVzZXIodGhpcyk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gYWRkRW50cnlBc3NpZ25tZW50KEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgVHlwZUluZm9ybWF0aW9uIGtleSwgVHlwZUluZm9ybWF0aW9uIHZhbHVlLAogICAgICBbYm9vbCBub25OdWxsID0gZmFsc2VdKSB7CiAgICBUeXBlSW5mb3JtYXRpb24gbmV3SW5mbyA9IG51bGw7CiAgICBpZiAoX2FsbEtleXNBcmVTdHJpbmdzICYmIGtleSBpcyBTdHJpbmdMaXRlcmFsVHlwZUluZm9ybWF0aW9uKSB7CiAgICAgIFN0cmluZyBrZXlTdHJpbmcgPSBrZXkuYXNTdHJpbmcoKTsKICAgICAgdHlwZUluZm9NYXAucHV0SWZBYnNlbnQoa2V5U3RyaW5nLCAoKSB7CiAgICAgICAgbmV3SW5mbyA9IG5ldyBWYWx1ZUluTWFwVHlwZUluZm9ybWF0aW9uKAogICAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLCBjb250ZXh0LCBudWxsLCBub25OdWxsKTsKICAgICAgICByZXR1cm4gbmV3SW5mbzsKICAgICAgfSk7CiAgICAgIHR5cGVJbmZvTWFwW2tleVN0cmluZ10uYWRkQXNzaWdubWVudCh2YWx1ZSk7CiAgICB9IGVsc2UgewogICAgICBfYWxsS2V5c0FyZVN0cmluZ3MgPSBmYWxzZTsKICAgICAgdHlwZUluZm9NYXAuY2xlYXIoKTsKICAgIH0KICAgIGtleVR5cGUuYWRkQXNzaWdubWVudChrZXkpOwogICAgdmFsdWVUeXBlLmFkZEFzc2lnbm1lbnQodmFsdWUpOwogICAgaWYgKG5ld0luZm8gIT0gbnVsbCkgbmV3SW5mby5hZGRVc2VyKHRoaXMpOwoKICAgIHJldHVybiBuZXdJbmZvOwogIH0KCiAgTGlzdDxUeXBlSW5mb3JtYXRpb24+IGFkZE1hcEFzc2lnbm1lbnQoCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwgTWFwVHlwZUluZm9ybWF0aW9uIG90aGVyKSB7CiAgICBMaXN0PFR5cGVJbmZvcm1hdGlvbj4gbmV3SW5mb3MgPSA8VHlwZUluZm9ybWF0aW9uPltdOwogICAgaWYgKF9hbGxLZXlzQXJlU3RyaW5ncyAmJiBvdGhlci5pbkRpY3Rpb25hcnlNb2RlKSB7CiAgICAgIG90aGVyLnR5cGVJbmZvTWFwLmZvckVhY2goKGtleVN0cmluZywgdmFsdWUpIHsKICAgICAgICB0eXBlSW5mb01hcC5wdXRJZkFic2VudChrZXlTdHJpbmcsICgpIHsKICAgICAgICAgIFR5cGVJbmZvcm1hdGlvbiBuZXdJbmZvID0gbmV3IFZhbHVlSW5NYXBUeXBlSW5mb3JtYXRpb24oCiAgICAgICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbiwgY29udGV4dCwgbnVsbCwgZmFsc2UpOwogICAgICAgICAgbmV3SW5mb3MuYWRkKG5ld0luZm8pOwogICAgICAgICAgcmV0dXJuIG5ld0luZm87CiAgICAgICAgfSk7CiAgICAgICAgdHlwZUluZm9NYXBba2V5U3RyaW5nXS5hZGRBc3NpZ25tZW50KHZhbHVlKTsKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICBfYWxsS2V5c0FyZVN0cmluZ3MgPSBmYWxzZTsKICAgICAgdHlwZUluZm9NYXAuY2xlYXIoKTsKICAgIH0KICAgIGtleVR5cGUuYWRkQXNzaWdubWVudChvdGhlci5rZXlUeXBlKTsKICAgIHZhbHVlVHlwZS5hZGRBc3NpZ25tZW50KG90aGVyLnZhbHVlVHlwZSk7CgogICAgcmV0dXJuIG5ld0luZm9zOwogIH0KCiAgbWFya0FzSW5mZXJyZWQoKSB7CiAgICBrZXlUeXBlLmluZmVycmVkID0gdmFsdWVUeXBlLmluZmVycmVkID0gdHJ1ZTsKICAgIHR5cGVJbmZvTWFwLnZhbHVlcy5mb3JFYWNoKCh2KSA9PiB2LmluZmVycmVkID0gdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBhZGRBc3NpZ25tZW50KFR5cGVJbmZvcm1hdGlvbiBvdGhlcikgewogICAgdGhyb3cgIm5vdCBzdXBwb3J0ZWQiOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KFR5cGVJbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRNYXBUeXBlSW5mb3JtYXRpb24odGhpcyk7CiAgfQoKICBBYnN0cmFjdFZhbHVlIHRvVHlwZU1hc2soSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiA9IGluZmVycmVyLmFic3RyYWN0VmFsdWVEb21haW47CiAgICBpZiAoaW5EaWN0aW9uYXJ5TW9kZSkgewogICAgICBNYXA8U3RyaW5nLCBBYnN0cmFjdFZhbHVlPiBtYXBwaW5ncyA9IG5ldyBNYXA8U3RyaW5nLCBBYnN0cmFjdFZhbHVlPigpOwogICAgICBmb3IgKHZhciBrZXkgaW4gdHlwZUluZm9NYXAua2V5cykgewogICAgICAgIG1hcHBpbmdzW2tleV0gPSB0eXBlSW5mb01hcFtrZXldLnR5cGU7CiAgICAgIH0KICAgICAgcmV0dXJuIGluZmVycmVyLmFic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlRGljdGlvbmFyeVZhbHVlKAogICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRHZW5lcmFsaXphdGlvbihvcmlnaW5hbFR5cGUpLAogICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRBbGxvY2F0aW9uTm9kZShvcmlnaW5hbFR5cGUpLAogICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRBbGxvY2F0aW9uRWxlbWVudChvcmlnaW5hbFR5cGUpLAogICAgICAgICAga2V5VHlwZS50eXBlLAogICAgICAgICAgdmFsdWVUeXBlLnR5cGUsCiAgICAgICAgICBtYXBwaW5ncyk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gaW5mZXJyZXIuYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVNYXBWYWx1ZSgKICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uZ2V0R2VuZXJhbGl6YXRpb24ob3JpZ2luYWxUeXBlKSwKICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uZ2V0QWxsb2NhdGlvbk5vZGUob3JpZ2luYWxUeXBlKSwKICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uZ2V0QWxsb2NhdGlvbkVsZW1lbnQob3JpZ2luYWxUeXBlKSwKICAgICAgICAgIGtleVR5cGUudHlwZSwKICAgICAgICAgIHZhbHVlVHlwZS50eXBlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiA9IGluZmVycmVyLmFic3RyYWN0VmFsdWVEb21haW47CiAgICBpZiAoYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0RpY3Rpb25hcnkodHlwZSkgIT0gaW5EaWN0aW9uYXJ5TW9kZSkgewogICAgICByZXR1cm4gdG9UeXBlTWFzayhpbmZlcnJlcik7CiAgICB9IGVsc2UgaWYgKGFic3RyYWN0VmFsdWVEb21haW4uaXNEaWN0aW9uYXJ5KHR5cGUpKSB7CiAgICAgIGFzc2VydChpbkRpY3Rpb25hcnlNb2RlKTsKICAgICAgZm9yIChTdHJpbmcga2V5IGluIHR5cGVJbmZvTWFwLmtleXMpIHsKICAgICAgICBUeXBlSW5mb3JtYXRpb24gdmFsdWUgPSB0eXBlSW5mb01hcFtrZXldOwogICAgICAgIGlmICghYWJzdHJhY3RWYWx1ZURvbWFpbi5jb250YWluc0RpY3Rpb25hcnlLZXkodHlwZSwga2V5KSAmJgogICAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmNvbnRhaW5zQWxsKHZhbHVlLnR5cGUpLmlzRGVmaW5pdGVseUZhbHNlICYmCiAgICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uaXNOdWxsKHZhbHVlLnR5cGUpLmlzRGVmaW5pdGVseUZhbHNlKSB7CiAgICAgICAgICByZXR1cm4gdG9UeXBlTWFzayhpbmZlcnJlcik7CiAgICAgICAgfQogICAgICAgIGlmIChhYnN0cmFjdFZhbHVlRG9tYWluLmdldERpY3Rpb25hcnlWYWx1ZUZvcktleSh0eXBlLCBrZXkpICE9CiAgICAgICAgICAgIHR5cGVJbmZvTWFwW2tleV0udHlwZSkgewogICAgICAgICAgcmV0dXJuIHRvVHlwZU1hc2soaW5mZXJyZXIpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmIChhYnN0cmFjdFZhbHVlRG9tYWluLmlzTWFwKHR5cGUpKSB7CiAgICAgIGlmIChhYnN0cmFjdFZhbHVlRG9tYWluLmdldE1hcEtleVR5cGUodHlwZSkgIT0ga2V5VHlwZS50eXBlIHx8CiAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmdldE1hcFZhbHVlVHlwZSh0eXBlKSAhPSB2YWx1ZVR5cGUudHlwZSkgewogICAgICAgIHJldHVybiB0b1R5cGVNYXNrKGluZmVycmVyKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHRvVHlwZU1hc2soaW5mZXJyZXIpOwogICAgfQoKICAgIHJldHVybiB0eXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBzYWZlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgPT4gb3JpZ2luYWxUeXBlOwoKICBAb3ZlcnJpZGUKICBib29sIGhhc1N0YWJsZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHJldHVybiBrZXlUeXBlLmlzU3RhYmxlICYmCiAgICAgICAgdmFsdWVUeXBlLmlzU3RhYmxlICYmCiAgICAgICAgc3VwZXIuaGFzU3RhYmxlVHlwZShpbmZlcnJlcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsZWFudXAoKSB7CiAgICBzdXBlci5jbGVhbnVwKCk7CiAgICBrZXlUeXBlLmNsZWFudXAoKTsKICAgIHZhbHVlVHlwZS5jbGVhbnVwKCk7CiAgICBmb3IgKFR5cGVJbmZvcm1hdGlvbiBpbmZvIGluIHR5cGVJbmZvTWFwLnZhbHVlcykgewogICAgICBpbmZvLmNsZWFudXAoKTsKICAgIH0KICAgIF9mbG93c0ludG8gPSBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdNYXAgJHR5cGUgKEs6JGtleVR5cGUsIFY6JHZhbHVlVHlwZSkgY29udGVudHMgJHR5cGVJbmZvTWFwJzsKICB9Cn0KCi8vLyBBIFtLZXlJbk1hcFR5cGVJbmZvcm1hdGlvbl0gaG9sZHMgdGhlIGNvbW1vbiB0eXBlCi8vLyBmb3IgdGhlIGtleXMgaW4gYSBbTWFwVHlwZUluZm9ybWF0aW9uXQpjbGFzcyBLZXlJbk1hcFR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIEluZmVycmVkVHlwZUluZm9ybWF0aW9uIHsKICBLZXlJbk1hcFR5cGVJbmZvcm1hdGlvbihBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sCiAgICAgIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBjb250ZXh0LCBUeXBlSW5mb3JtYXRpb24ga2V5VHlwZSkKICAgICAgOiBzdXBlcihhYnN0cmFjdFZhbHVlRG9tYWluLCBjb250ZXh0LCBrZXlUeXBlKTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KFR5cGVJbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRLZXlJbk1hcFR5cGVJbmZvcm1hdGlvbih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdLZXkgaW4gTWFwICR0eXBlJzsKfQoKLy8vIEEgW1ZhbHVlSW5NYXBUeXBlSW5mb3JtYXRpb25dIGhvbGRzIHRoZSBjb21tb24gdHlwZQovLy8gZm9yIHRoZSB2YWx1ZXMgaW4gYSBbTWFwVHlwZUluZm9ybWF0aW9uXQpjbGFzcyBWYWx1ZUluTWFwVHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgSW5mZXJyZWRUeXBlSW5mb3JtYXRpb24gewogIC8vIFtub25OdWxsXSBpcyBzZXQgdG8gdHJ1ZSBpZiB0aGlzIHZhbHVlIGlzIGtub3duIHRvIGJlIHBhcnQgb2YgdGhlIG1hcC4KICAvLyBOb3RlIHRoYXQgb25seSB2YWx1ZXMgYXNzaWduZWQgdG8gYSBzcGVjaWZpYyBrZXkgdmFsdWUgaW4gZGljdGlvbmFyeQogIC8vIG1vZGUgY2FuIGV2ZXIgYmUgbWFya2VkIGFzIFtub25OdWxsXS4KICBmaW5hbCBib29sIG5vbk51bGw7CgogIFZhbHVlSW5NYXBUeXBlSW5mb3JtYXRpb24oQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY29udGV4dCwgVHlwZUluZm9ybWF0aW9uIHZhbHVlVHlwZSwKICAgICAgW3RoaXMubm9uTnVsbCA9IGZhbHNlXSkKICAgICAgOiBzdXBlcihhYnN0cmFjdFZhbHVlRG9tYWluLCBjb250ZXh0LCB2YWx1ZVR5cGUpOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoVHlwZUluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFZhbHVlSW5NYXBUeXBlSW5mb3JtYXRpb24odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gbm9uTnVsbAogICAgICAgID8gc3VwZXIuY29tcHV0ZVR5cGUoaW5mZXJyZXIpCiAgICAgICAgOiBpbmZlcnJlci5hYnN0cmFjdFZhbHVlRG9tYWluLmluY2x1ZGVOdWxsKHN1cGVyLmNvbXB1dGVUeXBlKGluZmVycmVyKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnVmFsdWUgaW4gTWFwICR0eXBlJzsKfQoKLy8vIEEgW1BoaUVsZW1lbnRUeXBlSW5mb3JtYXRpb25dIGlzIGFuIHVuaW9uIG9mCi8vLyBbRWxlbWVudFR5cGVJbmZvcm1hdGlvbl0sIHRoYXQgaXMgbG9jYWwgdG8gYSBtZXRob2QuCmNsYXNzIFBoaUVsZW1lbnRUeXBlSW5mb3JtYXRpb24gZXh0ZW5kcyBUeXBlSW5mb3JtYXRpb24gewogIGZpbmFsIGlyLk5vZGUgYnJhbmNoTm9kZTsKICBmaW5hbCBMb2NhbCB2YXJpYWJsZTsKICBmaW5hbCBib29sIGlzVHJ5OwoKICBQaGlFbGVtZW50VHlwZUluZm9ybWF0aW9uKEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNvbnRleHQsIHRoaXMuYnJhbmNoTm9kZSwgdGhpcy52YXJpYWJsZSwKICAgICAge3RoaXMuaXNUcnl9KQogICAgICA6IHN1cGVyKGFic3RyYWN0VmFsdWVEb21haW4uZW1wdHlUeXBlLCBjb250ZXh0KTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIGluZmVycmVyLnR5cGVzLmNvbXB1dGVUeXBlTWFzayhhc3NpZ25tZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnUGhpKCRoYXNoQ29kZSkgJHZhcmlhYmxlICR0eXBlJzsKCiAgQG92ZXJyaWRlCiAgdm9pZCBfdG9TdHJ1Y3R1cmVkVGV4dCgKICAgICAgU3RyaW5nQnVmZmVyIHNiLCBTdHJpbmcgaW5kZW50LCBTZXQ8VHlwZUluZm9ybWF0aW9uPiBzZWVuKSB7CiAgICBpZiAoc2Vlbi5hZGQodGhpcykpIHsKICAgICAgc2Iud3JpdGUoJyR7dG9TdHJpbmcoKX0gWycpOwogICAgICBmb3IgKFR5cGVJbmZvcm1hdGlvbiBhc3NpZ25tZW50IGluIGFzc2lnbm1lbnRzKSB7CiAgICAgICAgc2Iud3JpdGUoJ1xuJGluZGVudCAgJyk7CiAgICAgICAgYXNzaWdubWVudC5fdG9TdHJ1Y3R1cmVkVGV4dChzYiwgJyRpbmRlbnQgICcsIHNlZW4pOwogICAgICB9CiAgICAgIHNiLndyaXRlKCcgXScpOwogICAgfSBlbHNlIHsKICAgICAgc2Iud3JpdGUoJyR7dG9TdHJpbmcoKX0gWyAuLi4gXScpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KFR5cGVJbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRQaGlFbGVtZW50VHlwZUluZm9ybWF0aW9uKHRoaXMpOwogIH0KfQoKY2xhc3MgQ2xvc3VyZVR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIFR5cGVJbmZvcm1hdGlvbgogICAgd2l0aCBBcHBseWFibGVUeXBlSW5mb3JtYXRpb24gewogIGZpbmFsIEZ1bmN0aW9uRW50aXR5IF9lbGVtZW50OwoKICBDbG9zdXJlVHlwZUluZm9ybWF0aW9uKEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNvbnRleHQsIHRoaXMuX2VsZW1lbnQpCiAgICAgIDogc3VwZXIoYWJzdHJhY3RWYWx1ZURvbWFpbi5lbXB0eVR5cGUsIGNvbnRleHQpOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgY2xvc3VyZSA9PiBfZWxlbWVudDsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgPT4gc2FmZVR5cGUoaW5mZXJyZXIpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHNhZmVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gaW5mZXJyZXIudHlwZXMuZnVuY3Rpb25UeXBlLnR5cGU7CiAgfQoKICBTdHJpbmcgZ2V0IGRlYnVnTmFtZSA9PiAnJGNsb3N1cmUnOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnQ2xvc3VyZSAkX2VsZW1lbnQnOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoVHlwZUluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdENsb3N1cmVUeXBlSW5mb3JtYXRpb24odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc1N0YWJsZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIFN0cmluZyBnZXRJbmZlcnJlZFNpZ25hdHVyZShUeXBlU3lzdGVtIHR5cGVzKSB7CiAgICByZXR1cm4gdHlwZXMuZ2V0SW5mZXJyZWRTaWduYXR1cmVPZk1ldGhvZChfZWxlbWVudCk7CiAgfQp9CgovLy8gTWl4aW4gZm9yIFtUeXBlSW5mb3JtYXRpb25dIG5vZGVzIHRoYXQgY2FuIGJhaWwgb3V0IGR1cmluZyB0cmFjaW5nLgphYnN0cmFjdCBjbGFzcyBUcmFjZWRUeXBlSW5mb3JtYXRpb24gaW1wbGVtZW50cyBUeXBlSW5mb3JtYXRpb24gewogIC8vLyBTZXQgdG8gZmFsc2Ugb25jZSBhbmFseXNpcyBoYXMgc3VjY2VlZGVkLgogIGJvb2wgYmFpbGVkT3V0ID0gdHJ1ZTsKCiAgLy8vIFNldCB0byB0cnVlIG9uY2UgYW5hbHlzaXMgaXMgY29tcGxldGVkLgogIGJvb2wgYW5hbHl6ZWQgPSBmYWxzZTsKCiAgU2V0PFR5cGVJbmZvcm1hdGlvbj4gX2Zsb3dzSW50bzsKCiAgLy8vIFRoZSBzZXQgb2YgW1R5cGVJbmZvcm1hdGlvbl0gbm9kZXMgd2hlcmUgdmFsdWVzIGZyb20gdGhlIHRyYWNlZCBub2RlIGNvdWxkCiAgLy8vIGZsb3cgaW4uCiAgU2V0PFR5cGVJbmZvcm1hdGlvbj4gZ2V0IGZsb3dzSW50byB7CiAgICByZXR1cm4gKF9mbG93c0ludG8gPT0gbnVsbCkKICAgICAgICA/IGNvbnN0IEltbXV0YWJsZUVtcHR5U2V0PFR5cGVJbmZvcm1hdGlvbj4oKQogICAgICAgIDogX2Zsb3dzSW50bzsKICB9CgogIC8vLyBBZGRzIFtub2Rlc10gdG8gdGhlIHNldHMgb2YgdmFsdWVzIHRoaXMgW1RyYWNlZFR5cGVJbmZvcm1hdGlvbl0gZmxvd3MKICAvLy8gaW50by4KICB2b2lkIGFkZEZsb3dzSW50b1RhcmdldHMoSXRlcmFibGU8VHlwZUluZm9ybWF0aW9uPiBub2RlcykgewogICAgaWYgKF9mbG93c0ludG8gPT0gbnVsbCkgewogICAgICBfZmxvd3NJbnRvID0gbm9kZXMudG9TZXQoKTsKICAgIH0gZWxzZSB7CiAgICAgIF9mbG93c0ludG8uYWRkQWxsKG5vZGVzKTsKICAgIH0KICB9Cn0KCmNsYXNzIEF3YWl0VHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgVHlwZUluZm9ybWF0aW9uIHsKICBmaW5hbCBpci5Ob2RlIF9ub2RlOwoKICBBd2FpdFR5cGVJbmZvcm1hdGlvbihBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sCiAgICAgIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBjb250ZXh0LCB0aGlzLl9ub2RlKQogICAgICA6IHN1cGVyKGFic3RyYWN0VmFsdWVEb21haW4uZW1wdHlUeXBlLCBjb250ZXh0KTsKCiAgLy8gVE9ETygyMjg5NCk6IENvbXB1dGUgYSBiZXR0ZXIgdHlwZSBoZXJlLgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpID0+IHNhZmVUeXBlKGluZmVycmVyKTsKCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWUgPT4gJyRfbm9kZSc7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdBd2FpdCc7CgogIEBvdmVycmlkZQogIGFjY2VwdChUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0QXdhaXRUeXBlSW5mb3JtYXRpb24odGhpcyk7CiAgfQp9CgpjbGFzcyBZaWVsZFR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIFR5cGVJbmZvcm1hdGlvbiB7CiAgZmluYWwgaXIuTm9kZSBfbm9kZTsKCiAgWWllbGRUeXBlSW5mb3JtYXRpb24oQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY29udGV4dCwgdGhpcy5fbm9kZSkKICAgICAgOiBzdXBlcihhYnN0cmFjdFZhbHVlRG9tYWluLmVtcHR5VHlwZSwgY29udGV4dCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpID0+IHNhZmVUeXBlKGluZmVycmVyKTsKCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWUgPT4gJyRfbm9kZSc7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdZaWVsZCc7CgogIEBvdmVycmlkZQogIGFjY2VwdChUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0WWllbGRUeXBlSW5mb3JtYXRpb24odGhpcyk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBUeXBlSW5mb3JtYXRpb25WaXNpdG9yPFQ+IHsKICBUIHZpc2l0TmFycm93VHlwZUluZm9ybWF0aW9uKE5hcnJvd1R5cGVJbmZvcm1hdGlvbiBpbmZvKTsKICBUIHZpc2l0UGhpRWxlbWVudFR5cGVJbmZvcm1hdGlvbihQaGlFbGVtZW50VHlwZUluZm9ybWF0aW9uIGluZm8pOwogIFQgdmlzaXRFbGVtZW50SW5Db250YWluZXJUeXBlSW5mb3JtYXRpb24oCiAgICAgIEVsZW1lbnRJbkNvbnRhaW5lclR5cGVJbmZvcm1hdGlvbiBpbmZvKTsKICBUIHZpc2l0RWxlbWVudEluU2V0VHlwZUluZm9ybWF0aW9uKEVsZW1lbnRJblNldFR5cGVJbmZvcm1hdGlvbiBpbmZvKTsKICBUIHZpc2l0S2V5SW5NYXBUeXBlSW5mb3JtYXRpb24oS2V5SW5NYXBUeXBlSW5mb3JtYXRpb24gaW5mbyk7CiAgVCB2aXNpdFZhbHVlSW5NYXBUeXBlSW5mb3JtYXRpb24oVmFsdWVJbk1hcFR5cGVJbmZvcm1hdGlvbiBpbmZvKTsKICBUIHZpc2l0TGlzdFR5cGVJbmZvcm1hdGlvbihMaXN0VHlwZUluZm9ybWF0aW9uIGluZm8pOwogIFQgdmlzaXRTZXRUeXBlSW5mb3JtYXRpb24oU2V0VHlwZUluZm9ybWF0aW9uIGluZm8pOwogIFQgdmlzaXRNYXBUeXBlSW5mb3JtYXRpb24oTWFwVHlwZUluZm9ybWF0aW9uIGluZm8pOwogIFQgdmlzaXRDb25jcmV0ZVR5cGVJbmZvcm1hdGlvbihDb25jcmV0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKTsKICBUIHZpc2l0U3RyaW5nTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbihTdHJpbmdMaXRlcmFsVHlwZUluZm9ybWF0aW9uIGluZm8pOwogIFQgdmlzaXRCb29sTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbihCb29sTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbiBpbmZvKTsKICBUIHZpc2l0Q2xvc3VyZUNhbGxTaXRlVHlwZUluZm9ybWF0aW9uKENsb3N1cmVDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKTsKICBUIHZpc2l0U3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oU3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbyk7CiAgVCB2aXNpdER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihEeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbyk7CiAgVCB2aXNpdE1lbWJlclR5cGVJbmZvcm1hdGlvbihNZW1iZXJUeXBlSW5mb3JtYXRpb24gaW5mbyk7CiAgVCB2aXNpdFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbihQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24gaW5mbyk7CiAgVCB2aXNpdENsb3N1cmVUeXBlSW5mb3JtYXRpb24oQ2xvc3VyZVR5cGVJbmZvcm1hdGlvbiBpbmZvKTsKICBUIHZpc2l0QXdhaXRUeXBlSW5mb3JtYXRpb24oQXdhaXRUeXBlSW5mb3JtYXRpb24gaW5mbyk7CiAgVCB2aXNpdFlpZWxkVHlwZUluZm9ybWF0aW9uKFlpZWxkVHlwZUluZm9ybWF0aW9uIGluZm8pOwp9CgpBYnN0cmFjdFZhbHVlIF9uYXJyb3dUeXBlKAogICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLCBBYnN0cmFjdFZhbHVlIHR5cGUsIERhcnRUeXBlIGFubm90YXRpb24sCiAgICB7Ym9vbCBpc051bGxhYmxlOiB0cnVlfSkgewogIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiA9IGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW47CiAgQWJzdHJhY3RWYWx1ZSBvdGhlclR5cGU7CiAgaWYgKGFubm90YXRpb24udHJlYXRBc0R5bmFtaWMpIHsKICAgIHJldHVybiB0eXBlOwogIH0gZWxzZSBpZiAoYW5ub3RhdGlvbi5pc0ludGVyZmFjZVR5cGUpIHsKICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlVHlwZSA9IGFubm90YXRpb247CiAgICBpZiAoaW50ZXJmYWNlVHlwZS5lbGVtZW50ID09IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzKSB7CiAgICAgIHJldHVybiB0eXBlOwogICAgfQogICAgb3RoZXJUeXBlID0gYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVOb25OdWxsU3VidHlwZShpbnRlcmZhY2VUeXBlLmVsZW1lbnQpOwogIH0gZWxzZSBpZiAoYW5ub3RhdGlvbi5pc1ZvaWQpIHsKICAgIHJldHVybiB0eXBlOwogIH0gZWxzZSBpZiAoYW5ub3RhdGlvbi5pc1R5cGVkZWYgfHwgYW5ub3RhdGlvbi5pc0Z1bmN0aW9uVHlwZSkgewogICAgb3RoZXJUeXBlID0gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5mdW5jdGlvblR5cGU7CiAgfSBlbHNlIGlmIChhbm5vdGF0aW9uLmlzRnV0dXJlT3IpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE5hcnJvdyBGdXR1cmVPciB0eXBlcy4KICAgIHJldHVybiB0eXBlOwogIH0gZWxzZSB7CiAgICBhc3NlcnQoYW5ub3RhdGlvbi5pc1R5cGVWYXJpYWJsZSB8fCBhbm5vdGF0aW9uLmlzRnVuY3Rpb25UeXBlVmFyaWFibGUpOwogICAgLy8gVE9ETyhuZ2VvZmZyYXkpOiBOYXJyb3cgdG8gYm91bmQuCiAgICByZXR1cm4gdHlwZTsKICB9CiAgaWYgKGlzTnVsbGFibGUpIHsKICAgIG90aGVyVHlwZSA9IGFic3RyYWN0VmFsdWVEb21haW4uaW5jbHVkZU51bGwob3RoZXJUeXBlKTsKICB9CiAgaWYgKHR5cGUgPT0gbnVsbCkgewogICAgcmV0dXJuIG90aGVyVHlwZTsKICB9CiAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4uaW50ZXJzZWN0aW9uKHR5cGUsIG90aGVyVHlwZSk7Cn0KiGsATk48ATABLAEoATAjJCEy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dCcgYXMgaXI7CgovLy8gSW50ZXJmYWNlIGZvciBhY2Nlc3Npbmcgc3RhdGljIHR5cGVzIG9uIGV4cHJlc3Npb25zLgphYnN0cmFjdCBjbGFzcyBTdGF0aWNUeXBlUHJvdmlkZXIgewogIGlyLkRhcnRUeXBlIGdldFN0YXRpY1R5cGUoaXIuRXhwcmVzc2lvbiBub2RlKTsKICBpci5EYXJ0VHlwZSBnZXRGb3JJbkl0ZXJhdG9yVHlwZShpci5Gb3JJblN0YXRlbWVudCBub2RlKTsKfQoRAE5OPAEoNC8xNQE5JDE8AgExcGFja2FnZTpjb21waWxlci9zcmMvaXIvc3RhdGljX3R5cGVfcHJvdmlkZXIuZGFydDNzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zc2EvdHlwZV9idWlsZGVyLmRhcnTAAE6NLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnYnVpbGRlcl9rZXJuZWwuZGFydCc7CmltcG9ydCAnbm9kZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL3R5cGVfcmVjaXBlLmRhcnQnOwppbXBvcnQgJy4uL2lvL3NvdXJjZV9pbmZvcm1hdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3VzZS5kYXJ0JyBzaG93IFR5cGVVc2U7CmltcG9ydCAnLi4vd29ybGQuZGFydCc7CgovLy8gRW51bSB0aGF0IGRlZmluZXMgaG93IGEgbWVtYmVyIGhhcyBhY2Nlc3MgdG8gdGhlIGN1cnJlbnQgdHlwZSB2YXJpYWJsZXMuCmVudW0gQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgewogIC8vLyBUaGUgbWVtYmVyIGhhcyBubyBhY2Nlc3MgdG8gdHlwZSB2YXJpYWJsZXMuCiAgbm9uZSwKCiAgLy8vIFR5cGUgdmFyaWFibGVzIGFyZSBhY2Nlc3NpYmxlIGFzIGEgcHJvcGVydHkgb24gYHRoaXNgLgogIHByb3BlcnR5LAoKICAvLy8gVHlwZSB2YXJpYWJsZXMgYXJlIGFjY2Vzc2libGUgYXMgcGFyYW1ldGVycyBpbiB0aGUgY3VycmVudCBjb250ZXh0LgogIHBhcmFtZXRlciwKCiAgLy8vIElmIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgYSBnZW5lcmF0aXZlIGNvbnN0cnVjdG9yLCB0eXBlIHZhcmlhYmxlcyBhcmUKICAvLy8gYWNjZXNzaWJsZSBhcyBwYXJhbWV0ZXJzLCBvdGhlcndpc2UgdHlwZSB2YXJpYWJsZXMgYXJlIGFjY2Vzc2libGUgYXMKICAvLy8gYSBwcm9wZXJ0eSBvbiBgdGhpc2AuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCBmb3IgaW5zdGFuY2UgZmllbGRzIHdob3NlIGluaXRpYWxpemVycyBhcmUgZXhlY3V0ZWQgaW4gdGhlCiAgLy8vIGNvbnN0cnVjdG9ycy4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBdm9pZCB0aGUgbmVlZCBmb3IgdGhpcyBieSBhZGRpbmcgYSBmaWVsZC1zZXR0ZXIKICAvLyB0byB0aGUgSi1tb2RlbC4KICBpbnN0YW5jZUZpZWxkLAp9CgovLy8gRnVuY3Rpb25zIHRvIGluc2VydCB0eXBlIGNoZWNraW5nLCBjb2VyY2lvbiwgYW5kIGluc3RydWN0aW9uIGluc2VydGlvbgovLy8gZGVwZW5kaW5nIG9uIHRoZSBlbnZpcm9ubWVudCBmb3IgZGFydCBjb2RlLgphYnN0cmFjdCBjbGFzcyBUeXBlQnVpbGRlciB7CiAgZmluYWwgS2VybmVsU3NhR3JhcGhCdWlsZGVyIGJ1aWxkZXI7CgogIFR5cGVCdWlsZGVyKHRoaXMuYnVpbGRlcik7CgogIEpDbG9zZWRXb3JsZCBnZXQgX2Nsb3NlZFdvcmxkID0+IGJ1aWxkZXIuY2xvc2VkV29ybGQ7CgogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IF9hYnN0cmFjdFZhbHVlRG9tYWluID0+CiAgICAgIF9jbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICAvLy8gQ3JlYXRlIGEgdHlwZSBtYXNrIGZvciAndHJ1c3RpbmcnIGEgRGFydFR5cGUuIFJldHVybnMgYG51bGxgIGlmIHRoZXJlIGlzCiAgLy8vIG5vIGFwcHJveGltYXRpbmcgdHlwZSBtYXNrIChpLmUuIHRoZSB0eXBlIG1hc2sgd291bGQgYmUgYGR5bmFtaWNgKS4KICBBYnN0cmFjdFZhbHVlIHRydXN0VHlwZU1hc2soRGFydFR5cGUgdHlwZSkgewogICAgaWYgKHR5cGUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICB0eXBlID0gYnVpbGRlci5sb2NhbHNIYW5kbGVyLnN1YnN0SW5Db250ZXh0KHR5cGUpOwogICAgdHlwZSA9IHR5cGUudW5hbGlhc2VkOwogICAgaWYgKHR5cGUuaXNEeW5hbWljKSByZXR1cm4gbnVsbDsKICAgIGlmICghdHlwZS5pc0ludGVyZmFjZVR5cGUpIHJldHVybiBudWxsOwogICAgaWYgKHR5cGUgPT0gX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLm9iamVjdFR5cGUpIHJldHVybiBudWxsOwogICAgLy8gVGhlIHR5cGUgZWxlbWVudCBpcyBlaXRoZXIgYSBjbGFzcyBvciB0aGUgdm9pZCBlbGVtZW50LgogICAgQ2xhc3NFbnRpdHkgZWxlbWVudCA9ICh0eXBlIGFzIEludGVyZmFjZVR5cGUpLmVsZW1lbnQ7CiAgICByZXR1cm4gX2Fic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlTnVsbGFibGVTdWJ0eXBlKGVsZW1lbnQpOwogIH0KCiAgLy8vIENyZWF0ZSBhbiBpbnN0cnVjdGlvbiB0byBzaW1wbHkgdHJ1c3QgdGhlIHByb3ZpZGVkIHR5cGUuCiAgSEluc3RydWN0aW9uIF90cnVzdFR5cGUoSEluc3RydWN0aW9uIG9yaWdpbmFsLCBEYXJ0VHlwZSB0eXBlKSB7CiAgICBhc3NlcnQodHlwZSAhPSBudWxsKTsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IHRydXN0VHlwZU1hc2sodHlwZSk7CiAgICBpZiAobWFzayA9PSBudWxsKSByZXR1cm4gb3JpZ2luYWw7CiAgICByZXR1cm4gbmV3IEhUeXBlS25vd24ucGlubmVkKG1hc2ssIG9yaWdpbmFsKTsKICB9CgogIC8vLyBQcm9kdWNlcyBjb2RlIHRoYXQgY2hlY2tzIHRoZSBydW50aW1lIHR5cGUgaXMgYWN0dWFsbHkgdGhlIHR5cGUgc3BlY2lmaWVkCiAgLy8vIGJ5IGF0dGVtcHRpbmcgYSB0eXBlIGNvbnZlcnNpb24uCiAgSEluc3RydWN0aW9uIF9jaGVja1R5cGUoSEluc3RydWN0aW9uIG9yaWdpbmFsLCBEYXJ0VHlwZSB0eXBlKSB7CiAgICBhc3NlcnQodHlwZSAhPSBudWxsKTsKICAgIHR5cGUgPSBidWlsZGVyLmxvY2Fsc0hhbmRsZXIuc3Vic3RJbkNvbnRleHQodHlwZSk7CiAgICBISW5zdHJ1Y3Rpb24gb3RoZXIgPQogICAgICAgIGJ1aWxkVHlwZUNvbnZlcnNpb24ob3JpZ2luYWwsIHR5cGUsIEhUeXBlQ29udmVyc2lvbi5UWVBFX0NIRUNLKTsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFRoaXMgb3BlcmF0aW9uIG9uIGByZWdpc3RyeWAgbWF5IGJlIGluY29uc2lzdGVudC4KICAgIC8vIElmIGl0IGlzIG5lZWRlZCB0aGVuIGl0IHNlZW1zIGxpa2VseSB0aGF0IHNpbWlsYXIgaW52b2NhdGlvbnMgb2YKICAgIC8vIGBidWlsZFR5cGVDb252ZXJzaW9uYCBpbiBgU3NhQnVpbGRlci52aXNpdEFzYCBzaG91bGQgYWxzbyBiZSBmb2xsb3dlZCBieQogICAgLy8gYSBzaW1pbGFyIG9wZXJhdGlvbiBvbiBgcmVnaXN0cnlgOyBvdGhlcndpc2UsIHRoaXMgb25lIG1pZ2h0IG5vdCBiZQogICAgLy8gbmVlZGVkLgogICAgYnVpbGRlci5yZWdpc3RyeT8ucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLmlzQ2hlY2sodHlwZSkpOwogICAgaWYgKG90aGVyIGlzIEhUeXBlQ29udmVyc2lvbiAmJiBvdGhlci5pc1JlZHVuZGFudChidWlsZGVyLmNsb3NlZFdvcmxkKSkgewogICAgICByZXR1cm4gb3JpZ2luYWw7CiAgICB9CiAgICBpZiAob3RoZXIgaXMgSEFzQ2hlY2sgJiYgb3RoZXIuaXNSZWR1bmRhbnQoYnVpbGRlci5jbG9zZWRXb3JsZCkpIHsKICAgICAgcmV0dXJuIG9yaWdpbmFsOwogICAgfQogICAgcmV0dXJuIG90aGVyOwogIH0KCiAgLy8vIFByb2R1Y2VzIGNvZGUgdGhhdCBjaGVja3MgdGhlIHJ1bnRpbWUgdHlwZSBpcyBhY3R1YWxseSB0aGUgdHlwZSBzcGVjaWZpZWQKICAvLy8gYnkgYXR0ZW1wdGluZyBhIHR5cGUgY29udmVyc2lvbi4KICBISW5zdHJ1Y3Rpb24gX2NoZWNrQm9vbENvbnZlcmlvbihISW5zdHJ1Y3Rpb24gb3JpZ2luYWwpIHsKICAgIHZhciBjaGVja0luc3RydWN0aW9uID0KICAgICAgICBIQm9vbENvbnZlcnNpb24ob3JpZ2luYWwsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlKTsKICAgIGlmIChjaGVja0luc3RydWN0aW9uLmlzUmVkdW5kYW50KF9jbG9zZWRXb3JsZCkpIHsKICAgICAgcmV0dXJuIG9yaWdpbmFsOwogICAgfQogICAgRGFydFR5cGUgYm9vbFR5cGUgPSBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuYm9vbFR5cGU7CiAgICBidWlsZGVyLnJlZ2lzdHJ5Py5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UuaXNDaGVjayhib29sVHlwZSkpOwogICAgcmV0dXJuIGNoZWNrSW5zdHJ1Y3Rpb247CiAgfQoKICBISW5zdHJ1Y3Rpb24gdHJ1c3RUeXBlT2ZQYXJhbWV0ZXIoSEluc3RydWN0aW9uIG9yaWdpbmFsLCBEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSA9PSBudWxsKSByZXR1cm4gb3JpZ2luYWw7CiAgICBISW5zdHJ1Y3Rpb24gdHJ1c3RlZCA9IF90cnVzdFR5cGUob3JpZ2luYWwsIHR5cGUpOwogICAgaWYgKHRydXN0ZWQgPT0gb3JpZ2luYWwpIHJldHVybiBvcmlnaW5hbDsKICAgIGlmICh0cnVzdGVkIGlzIEhUeXBlS25vd24gJiYgdHJ1c3RlZC5pc1JlZHVuZGFudChidWlsZGVyLmNsb3NlZFdvcmxkKSkgewogICAgICByZXR1cm4gb3JpZ2luYWw7CiAgICB9CiAgICBidWlsZGVyLmFkZCh0cnVzdGVkKTsKICAgIHJldHVybiB0cnVzdGVkOwogIH0KCiAgSEluc3RydWN0aW9uIHBvdGVudGlhbGx5Q2hlY2tPclRydXN0VHlwZU9mUGFyYW1ldGVyKAogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyQ29udGV4dCwgSEluc3RydWN0aW9uIG9yaWdpbmFsLCBEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSA9PSBudWxsKSByZXR1cm4gb3JpZ2luYWw7CiAgICBISW5zdHJ1Y3Rpb24gY2hlY2tlZE9yVHJ1c3RlZCA9IG9yaWdpbmFsOwogICAgQ2hlY2tQb2xpY3kgcGFyYW1ldGVyQ2hlY2tQb2xpY3kgPSBidWlsZGVyLmNsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YQogICAgICAgIC5nZXRQYXJhbWV0ZXJDaGVja1BvbGljeShtZW1iZXJDb250ZXh0KTsKICAgIGlmIChwYXJhbWV0ZXJDaGVja1BvbGljeS5pc1RydXN0ZWQpIHsKICAgICAgY2hlY2tlZE9yVHJ1c3RlZCA9IF90cnVzdFR5cGUob3JpZ2luYWwsIHR5cGUpOwogICAgfSBlbHNlIGlmIChwYXJhbWV0ZXJDaGVja1BvbGljeS5pc0VtaXR0ZWQpIHsKICAgICAgY2hlY2tlZE9yVHJ1c3RlZCA9IF9jaGVja1R5cGUob3JpZ2luYWwsIHR5cGUpOwogICAgfQogICAgaWYgKGNoZWNrZWRPclRydXN0ZWQgPT0gb3JpZ2luYWwpIHJldHVybiBvcmlnaW5hbDsKICAgIGJ1aWxkZXIuYWRkKGNoZWNrZWRPclRydXN0ZWQpOwogICAgcmV0dXJuIGNoZWNrZWRPclRydXN0ZWQ7CiAgfQoKICAvLy8gRGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0IGFuZCB0aGUgbW9kZSwgd3JhcCB0aGUgZ2l2ZW4gdHlwZSBpbiBhbgogIC8vLyBpbnN0cnVjdGlvbiB0aGF0IGNoZWNrcyB0aGUgdHlwZSBpcyB3aGF0IHdlIGV4cGVjdCBvciBhdXRvbWF0aWNhbGx5CiAgLy8vIHRydXN0cyB0aGUgd3JpdHRlbiB0eXBlLgogIEhJbnN0cnVjdGlvbiBwb3RlbnRpYWxseUNoZWNrT3JUcnVzdFR5cGVPZkFzc2lnbm1lbnQoCiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXJDb250ZXh0LCBISW5zdHJ1Y3Rpb24gb3JpZ2luYWwsIERhcnRUeXBlIHR5cGUpIHsKICAgIGlmICh0eXBlID09IG51bGwpIHJldHVybiBvcmlnaW5hbDsKICAgIEhJbnN0cnVjdGlvbiBjaGVja2VkT3JUcnVzdGVkID0gX3RydXN0VHlwZShvcmlnaW5hbCwgdHlwZSk7CiAgICBpZiAoY2hlY2tlZE9yVHJ1c3RlZCA9PSBvcmlnaW5hbCkgcmV0dXJuIG9yaWdpbmFsOwogICAgYnVpbGRlci5hZGQoY2hlY2tlZE9yVHJ1c3RlZCk7CiAgICByZXR1cm4gY2hlY2tlZE9yVHJ1c3RlZDsKICB9CgogIEhJbnN0cnVjdGlvbiBwb3RlbnRpYWxseUNoZWNrT3JUcnVzdFR5cGVPZkNvbmRpdGlvbigKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlckNvbnRleHQsIEhJbnN0cnVjdGlvbiBvcmlnaW5hbCkgewogICAgRGFydFR5cGUgYm9vbFR5cGUgPSBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuYm9vbFR5cGU7CiAgICBISW5zdHJ1Y3Rpb24gY2hlY2tlZE9yVHJ1c3RlZCA9IG9yaWdpbmFsOwogICAgQ2hlY2tQb2xpY3kgY29uZGl0aW9uQ2hlY2tQb2xpY3kgPSBidWlsZGVyLmNsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YQogICAgICAgIC5nZXRDb25kaXRpb25DaGVja1BvbGljeShtZW1iZXJDb250ZXh0KTsKICAgIGlmIChjb25kaXRpb25DaGVja1BvbGljeS5pc1RydXN0ZWQpIHsKICAgICAgY2hlY2tlZE9yVHJ1c3RlZCA9IF90cnVzdFR5cGUob3JpZ2luYWwsIGJvb2xUeXBlKTsKICAgIH0gZWxzZSBpZiAoY29uZGl0aW9uQ2hlY2tQb2xpY3kuaXNFbWl0dGVkKSB7CiAgICAgIGNoZWNrZWRPclRydXN0ZWQgPSBfY2hlY2tCb29sQ29udmVyaW9uKG9yaWdpbmFsKTsKICAgIH0KICAgIGlmIChjaGVja2VkT3JUcnVzdGVkID09IG9yaWdpbmFsKSByZXR1cm4gb3JpZ2luYWw7CiAgICBidWlsZGVyLmFkZChjaGVja2VkT3JUcnVzdGVkKTsKICAgIHJldHVybiBjaGVja2VkT3JUcnVzdGVkOwogIH0KCiAgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgY29tcHV0ZVR5cGVWYXJpYWJsZUFjY2VzcyhNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgLy8vIEhlbHBlciB0byBjcmVhdGUgYW4gaW5zdHJ1Y3Rpb24gdGhhdCBnZXRzIHRoZSB2YWx1ZSBvZiBhIHR5cGUgdmFyaWFibGUuCiAgSEluc3RydWN0aW9uIGFkZFR5cGVWYXJpYWJsZVJlZmVyZW5jZSgKICAgICAgVHlwZVZhcmlhYmxlVHlwZSB0eXBlLCBNZW1iZXJFbnRpdHkgbWVtYmVyLAogICAgICB7U291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb259KSB7CiAgICBMb2NhbCB0eXBlVmFyaWFibGVMb2NhbCA9CiAgICAgICAgYnVpbGRlci5sb2NhbHNIYW5kbGVyLmdldFR5cGVWYXJpYWJsZUFzTG9jYWwodHlwZSk7CgogICAgLy8vIFJlYWQgW3R5cGVWYXJpYWJsZV0gYXMgYSBwcm9wZXJ0eSBvZiBvbiBgdGhpc2AuCiAgICBISW5zdHJ1Y3Rpb24gcmVhZEFzUHJvcGVydHkoKSB7CiAgICAgIHJldHVybiByZWFkVHlwZVZhcmlhYmxlKHR5cGUsIG1lbWJlciwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CgogICAgLy8vIFJlYWQgW3R5cGVWYXJpYWJsZV0gYXMgYSBwYXJhbWV0ZXIuCiAgICBISW5zdHJ1Y3Rpb24gcmVhZEFzUGFyYW1ldGVyKCkgewogICAgICByZXR1cm4gYnVpbGRlci5sb2NhbHNIYW5kbGVyCiAgICAgICAgICAucmVhZExvY2FsKHR5cGVWYXJpYWJsZUxvY2FsLCBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwogICAgfQoKICAgIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzIHR5cGVWYXJpYWJsZUFjY2VzczsKICAgIGlmICh0eXBlLmVsZW1lbnQudHlwZURlY2xhcmF0aW9uIGlzIENsYXNzRW50aXR5KSB7CiAgICAgIHR5cGVWYXJpYWJsZUFjY2VzcyA9IGNvbXB1dGVUeXBlVmFyaWFibGVBY2Nlc3MobWVtYmVyKTsKICAgIH0gZWxzZSB7CiAgICAgIHR5cGVWYXJpYWJsZUFjY2VzcyA9IENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLnBhcmFtZXRlcjsKICAgIH0KICAgIHN3aXRjaCAodHlwZVZhcmlhYmxlQWNjZXNzKSB7CiAgICAgIGNhc2UgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MucGFyYW1ldGVyOgogICAgICAgIHJldHVybiByZWFkQXNQYXJhbWV0ZXIoKTsKICAgICAgY2FzZSBDbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcy5pbnN0YW5jZUZpZWxkOgogICAgICAgIGlmIChtZW1iZXIgIT0gYnVpbGRlci50YXJnZXRFbGVtZW50KSB7CiAgICAgICAgICAvLyBXaGVuIFttZW1iZXJdIGlzIGEgZmllbGQsIHdlIGNhbiBlaXRoZXIgYmUgZ2VuZXJhdGluZyBhIGNoZWNrZWQKICAgICAgICAgIC8vIHNldHRlciBvciBpbmxpbmluZyBpdHMgaW5pdGlhbGl6ZXIgaW4gYSBjb25zdHJ1Y3Rvci4gQW4gaW5pdGlhbGl6ZXIKICAgICAgICAgIC8vIGlzIG5ldmVyIGJ1aWx0IHN0YW5kYWxvbmUsIHNvIGluIHRoYXQgY2FzZSBbdGFyZ2V0XSBpcyBub3QgdGhlCiAgICAgICAgICAvLyBbbWVtYmVyXSBpdHNlbGYuCiAgICAgICAgICByZXR1cm4gcmVhZEFzUGFyYW1ldGVyKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZWFkQXNQcm9wZXJ0eSgpOwogICAgICBjYXNlIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLnByb3BlcnR5OgogICAgICAgIHJldHVybiByZWFkQXNQcm9wZXJ0eSgpOwogICAgICBjYXNlIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLm5vbmU6CiAgICAgICAgYnVpbGRlci5yZXBvcnRlci5pbnRlcm5hbEVycm9yKAogICAgICAgICAgICB0eXBlLmVsZW1lbnQsICdVbmV4cGVjdGVkIHR5cGUgdmFyaWFibGUgaW4gc3RhdGljIGNvbnRleHQuJyk7CiAgICB9CiAgICBidWlsZGVyLnJlcG9ydGVyLmludGVybmFsRXJyb3IoCiAgICAgICAgdHlwZS5lbGVtZW50LCAnVW5leHBlY3RlZCB0eXBlIHZhcmlhYmxlIGFjY2VzczogJHR5cGVWYXJpYWJsZUFjY2Vzcy4nKTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8vIEdlbmVyYXRlIGNvZGUgdG8gZXh0cmFjdCB0aGUgdHlwZSBhcmd1bWVudCBmcm9tIHRoZSBvYmplY3QuCiAgSEluc3RydWN0aW9uIHJlYWRUeXBlVmFyaWFibGUoVHlwZVZhcmlhYmxlVHlwZSB2YXJpYWJsZSwgTWVtYmVyRW50aXR5IG1lbWJlciwKICAgICAge1NvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9ufSkgewogICAgYXNzZXJ0KG1lbWJlci5pc0luc3RhbmNlTWVtYmVyKTsKICAgIGFzc2VydCh2YXJpYWJsZS5lbGVtZW50LnR5cGVEZWNsYXJhdGlvbiBpcyBDbGFzc0VudGl0eSk7CiAgICBISW5zdHJ1Y3Rpb24gdGFyZ2V0ID0KICAgICAgICBidWlsZGVyLmxvY2Fsc0hhbmRsZXIucmVhZFRoaXMoc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIEhJbnN0cnVjdGlvbiBpbnRlcmNlcHRvciA9CiAgICAgICAgbmV3IEhJbnRlcmNlcHRvcih0YXJnZXQsIF9hYnN0cmFjdFZhbHVlRG9tYWluLm5vbk51bGxUeXBlKQogICAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogICAgYnVpbGRlci5hZGQoaW50ZXJjZXB0b3IpOwogICAgYnVpbGRlci5wdXNoKG5ldyBIVHlwZUluZm9SZWFkVmFyaWFibGUuaW50ZXJjZXB0ZWQoCiAgICAgICAgdmFyaWFibGUsIGludGVyY2VwdG9yLCB0YXJnZXQsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKQogICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb24pOwogICAgcmV0dXJuIGJ1aWxkZXIucG9wKCk7CiAgfQoKICBISW5zdHJ1Y3Rpb24gYnVpbGRUeXBlQXJndW1lbnRSZXByZXNlbnRhdGlvbnMoCiAgICAgIERhcnRUeXBlIHR5cGUsIE1lbWJlckVudGl0eSBzb3VyY2VFbGVtZW50LAogICAgICBbU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb25dKSB7CiAgICBhc3NlcnQoIXR5cGUuaXNUeXBlVmFyaWFibGUpOwogICAgLy8gQ29tcHV0ZSB0aGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHR5cGUgYXJndW1lbnRzLCBpbmNsdWRpbmcgYWNjZXNzCiAgICAvLyB0byB0aGUgcnVudGltZSB0eXBlIGluZm9ybWF0aW9uIGZvciB0eXBlIHZhcmlhYmxlcyBhcyBpbnN0cnVjdGlvbnMuCiAgICBhc3NlcnQodHlwZS5pc0ludGVyZmFjZVR5cGUpOwogICAgSW50ZXJmYWNlVHlwZSBpbnRlcmZhY2UgPSB0eXBlOwogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cyA9IDxISW5zdHJ1Y3Rpb24+W107CiAgICBmb3IgKERhcnRUeXBlIGFyZ3VtZW50IGluIGludGVyZmFjZS50eXBlQXJndW1lbnRzKSB7CiAgICAgIGlucHV0cy5hZGQoYW5hbHl6ZVR5cGVBcmd1bWVudChhcmd1bWVudCwgc291cmNlRWxlbWVudCwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQogICAgSEluc3RydWN0aW9uIHJlcHJlc2VudGF0aW9uID0gbmV3IEhUeXBlSW5mb0V4cHJlc3Npb24oCiAgICAgICAgVHlwZUluZm9FeHByZXNzaW9uS2luZC5JTlNUQU5DRSwKICAgICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGludGVyZmFjZS5lbGVtZW50KSwKICAgICAgICBpbnB1dHMsCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpCiAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgIHJldHVybiByZXByZXNlbnRhdGlvbjsKICB9CgogIEhJbnN0cnVjdGlvbiBhbmFseXplVHlwZUFyZ3VtZW50KAogICAgICBEYXJ0VHlwZSBhcmd1bWVudCwgTWVtYmVyRW50aXR5IHNvdXJjZUVsZW1lbnQsCiAgICAgIHtTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbn0pIHsKICAgIGlmIChidWlsZGVyLm9wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSkgewogICAgICByZXR1cm4gYW5hbHl6ZVR5cGVBcmd1bWVudE5ld1J0aShhcmd1bWVudCwgc291cmNlRWxlbWVudCwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CiAgICBhcmd1bWVudCA9IGFyZ3VtZW50LnVuYWxpYXNlZDsKICAgIGlmIChhcmd1bWVudC50cmVhdEFzRHluYW1pYykgewogICAgICAvLyBSZXByZXNlbnQgW2R5bmFtaWNdIGFzIFtudWxsXS4KICAgICAgcmV0dXJuIGJ1aWxkZXIuZ3JhcGguYWRkQ29uc3RhbnROdWxsKF9jbG9zZWRXb3JsZCk7CiAgICB9CgogICAgaWYgKGFyZ3VtZW50LmlzVHlwZVZhcmlhYmxlKSB7CiAgICAgIHJldHVybiBhZGRUeXBlVmFyaWFibGVSZWZlcmVuY2UoYXJndW1lbnQsIHNvdXJjZUVsZW1lbnQsCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwogICAgfQoKICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMgPSA8SEluc3RydWN0aW9uPltdOwogICAgYXJndW1lbnQuZm9yRWFjaFR5cGVWYXJpYWJsZSgoVHlwZVZhcmlhYmxlVHlwZSB2YXJpYWJsZSkgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBbHNvIG1ha2UgdGhpcyBjb25kaXRpb25hbCBvbiB3aGV0aGVyIHdlIGhhdmUKICAgICAgLy8gY2FsY3VsYXRlZCB3ZSBuZWVkIHRoYXQgcGFydGljdWxhciBtZXRob2Qgc2lnbmF0dXJlLgogICAgICBpbnB1dHMuYWRkKGFuYWx5emVUeXBlQXJndW1lbnQodmFyaWFibGUsIHNvdXJjZUVsZW1lbnQpKTsKICAgIH0pOwogICAgSEluc3RydWN0aW9uIHJlc3VsdCA9IG5ldyBIVHlwZUluZm9FeHByZXNzaW9uKAogICAgICAgIFR5cGVJbmZvRXhwcmVzc2lvbktpbmQuQ09NUExFVEUsCiAgICAgICAgYXJndW1lbnQsCiAgICAgICAgaW5wdXRzLAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKQogICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgICBidWlsZGVyLmFkZChyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEhJbnN0cnVjdGlvbiBhbmFseXplVHlwZUFyZ3VtZW50TmV3UnRpKAogICAgICBEYXJ0VHlwZSBhcmd1bWVudCwgTWVtYmVyRW50aXR5IHNvdXJjZUVsZW1lbnQsCiAgICAgIHtTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbn0pIHsKICAgIGFyZ3VtZW50ID0gYXJndW1lbnQudW5hbGlhc2VkOwoKICAgIGlmICghYXJndW1lbnQuY29udGFpbnNUeXBlVmFyaWFibGVzKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBydGkgPSBITG9hZFR5cGUoYXJndW1lbnQsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKQogICAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgYnVpbGRlci5hZGQocnRpKTsKICAgICAgcmV0dXJuIHJ0aTsKICAgIH0KICAgIC8vIFRPRE8oc3JhKTogTG9jYXRlIHR5cGUgZW52aXJvbm1lbnQuCiAgICBfRW52aXJvbm1lbnRFeHByZXNzaW9uQW5kU3RydWN0dXJlIGVudmlyb25tZW50QWNjZXNzID0KICAgICAgICBfYnVpbGRFbnZpcm9ubWVudEZvclR5cGUoYXJndW1lbnQsIHNvdXJjZUVsZW1lbnQsCiAgICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CgogICAgSEluc3RydWN0aW9uIHJ0aSA9IEhUeXBlRXZhbCgKICAgICAgICBlbnZpcm9ubWVudEFjY2Vzcy5leHByZXNzaW9uLAogICAgICAgIGVudmlyb25tZW50QWNjZXNzLnN0cnVjdHVyZSwKICAgICAgICBUeXBlRXhwcmVzc2lvblJlY2lwZShhcmd1bWVudCksCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpCiAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgIGJ1aWxkZXIuYWRkKHJ0aSk7CiAgICByZXR1cm4gcnRpOwogIH0KCiAgX0Vudmlyb25tZW50RXhwcmVzc2lvbkFuZFN0cnVjdHVyZSBfYnVpbGRFbnZpcm9ubWVudEZvclR5cGUoCiAgICAgIERhcnRUeXBlIHR5cGUsIE1lbWJlckVudGl0eSBtZW1iZXIsCiAgICAgIHtTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbn0pIHsKICAgIGFzc2VydCh0eXBlLmNvbnRhaW5zVHlwZVZhcmlhYmxlcyk7CiAgICAvLyBCdWlsZCB0aGUgZW52aXJvbm1lbnQgZm9yIGVhY2ggYWNjZXNzLCBhbmQgaG9wZSBHVk4gcmVkdWNlcyB0aGUgbGFyZ2VyCiAgICAvLyBudW1iZXIgb2YgZXhwcmVzc2lvbnMuIEFub3RoZXIgb3B0aW9uIGlzIHRvIHByZWNvbXB1dGUgdGhlIGVudmlyb25tZW50IGF0CiAgICAvLyBwcm9jZWR1cmUgZW50cnkgYW5kIG9wdGltaXplIGVhcmx5LWV4aXRzIGJ5IHNpbmtpbmcgdGhlIHByZWNvbXB1dGVkCiAgICAvLyBlbnZpcm9ubWVudC4KCiAgICAvLyBTcGxpdCB0aGUgdHlwZSB2YXJpYWJsZXMgaW50byBjbGFzcy1zY29wZSBhbmQgZnVuY3Rpb24tc2NvcGUocykuCiAgICBib29sIHVzZXNJbnN0YW5jZVBhcmFtZXRlcnMgPSBmYWxzZTsKICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlVHlwZTsKICAgIFNldDxUeXBlVmFyaWFibGVUeXBlPiBwYXJhbWV0ZXJzID0gU2V0KCk7CgogICAgdm9pZCBwcm9jZXNzVHlwZVZhcmlhYmxlKFR5cGVWYXJpYWJsZVR5cGUgdHlwZSkgewogICAgICBDbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyB0eXBlVmFyaWFibGVBY2Nlc3M7CiAgICAgIGlmICh0eXBlLmVsZW1lbnQudHlwZURlY2xhcmF0aW9uIGlzIENsYXNzRW50aXR5KSB7CiAgICAgICAgdHlwZVZhcmlhYmxlQWNjZXNzID0gY29tcHV0ZVR5cGVWYXJpYWJsZUFjY2VzcyhtZW1iZXIpOwogICAgICAgIGludGVyZmFjZVR5cGUgPSBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50CiAgICAgICAgICAgIC5nZXRUaGlzVHlwZSh0eXBlLmVsZW1lbnQudHlwZURlY2xhcmF0aW9uKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0eXBlVmFyaWFibGVBY2Nlc3MgPSBDbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcy5wYXJhbWV0ZXI7CiAgICAgIH0KICAgICAgc3dpdGNoICh0eXBlVmFyaWFibGVBY2Nlc3MpIHsKICAgICAgICBjYXNlIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLnBhcmFtZXRlcjoKICAgICAgICAgIHBhcmFtZXRlcnMuYWRkKHR5cGUpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNhc2UgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MuaW5zdGFuY2VGaWVsZDoKICAgICAgICAgIGlmIChtZW1iZXIgIT0gYnVpbGRlci50YXJnZXRFbGVtZW50KSB7CiAgICAgICAgICAgIC8vIFdoZW4gW21lbWJlcl0gaXMgYSBmaWVsZCwgd2UgY2FuIGVpdGhlciBiZSBnZW5lcmF0aW5nIGEgY2hlY2tlZAogICAgICAgICAgICAvLyBzZXR0ZXIgb3IgaW5saW5pbmcgaXRzIGluaXRpYWxpemVyIGluIGEgY29uc3RydWN0b3IuIEFuCiAgICAgICAgICAgIC8vIGluaXRpYWxpemVyIGlzIG5ldmVyIGJ1aWx0IHN0YW5kYWxvbmUsIHNvIGluIHRoYXQgY2FzZSBbdGFyZ2V0XQogICAgICAgICAgICAvLyBpcyBub3QgdGhlIFttZW1iZXJdIGl0c2VsZi4KICAgICAgICAgICAgcGFyYW1ldGVycy5hZGQodHlwZSk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIHVzZXNJbnN0YW5jZVBhcmFtZXRlcnMgPSB0cnVlOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNhc2UgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MucHJvcGVydHk6CiAgICAgICAgICB1c2VzSW5zdGFuY2VQYXJhbWV0ZXJzID0gdHJ1ZTsKICAgICAgICAgIHJldHVybjsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgYnVpbGRlci5yZXBvcnRlci5pbnRlcm5hbEVycm9yKAogICAgICAgICAgICAgIHR5cGUuZWxlbWVudCwgJ1VuZXhwZWN0ZWQgdHlwZSB2YXJpYWJsZSBpbiBzdGF0aWMgY29udGV4dC4nKTsKICAgICAgfQogICAgfQoKICAgIHR5cGUuZm9yRWFjaFR5cGVWYXJpYWJsZShwcm9jZXNzVHlwZVZhcmlhYmxlKTsKCiAgICBISW5zdHJ1Y3Rpb24gZW52aXJvbm1lbnQ7CiAgICBUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUgc3RydWN0dXJlOwoKICAgIGlmICh1c2VzSW5zdGFuY2VQYXJhbWV0ZXJzKSB7CiAgICAgIEhJbnN0cnVjdGlvbiB0YXJnZXQgPQogICAgICAgICAgYnVpbGRlci5sb2NhbHNIYW5kbGVyLnJlYWRUaGlzKHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIC8vIFRPRE8oc3JhKTogSEluc3RhbmNlRW52aXJvbm1lbnQgc2hvdWxkIHByb2JhYmx5IHRha2UgYW4gaW50ZXJjZXB0b3IgdG8KICAgICAgLy8gYWxsb3cgdGhlIGdldEludGVyY2VwdG9yIGNhbGwgdG8gYmUgcmV1c2VkLgogICAgICBlbnZpcm9ubWVudCA9CiAgICAgICAgICBISW5zdGFuY2VFbnZpcm9ubWVudCh0YXJnZXQsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKQogICAgICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgICAgIGJ1aWxkZXIuYWRkKGVudmlyb25tZW50KTsKICAgICAgc3RydWN0dXJlID0gRnVsbFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZShjbGFzc1R5cGU6IGludGVyZmFjZVR5cGUpOwogICAgfQoKICAgIC8vIFRPRE8oc3JhKTogVmlzaXQgcGFyYW1ldGVycyBpbiBzb3VyY2Utb3JkZXIuCiAgICBmb3IgKFR5cGVWYXJpYWJsZVR5cGUgcGFyYW1ldGVyIGluIHBhcmFtZXRlcnMpIHsKICAgICAgTG9jYWwgdHlwZVZhcmlhYmxlTG9jYWwgPQogICAgICAgICAgYnVpbGRlci5sb2NhbHNIYW5kbGVyLmdldFR5cGVWYXJpYWJsZUFzTG9jYWwocGFyYW1ldGVyKTsKICAgICAgSEluc3RydWN0aW9uIGFjY2VzcyA9IGJ1aWxkZXIubG9jYWxzSGFuZGxlcgogICAgICAgICAgLnJlYWRMb2NhbCh0eXBlVmFyaWFibGVMb2NhbCwgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKCiAgICAgIGlmIChlbnZpcm9ubWVudCA9PSBudWxsKSB7CiAgICAgICAgZW52aXJvbm1lbnQgPSBhY2Nlc3M7CiAgICAgICAgc3RydWN0dXJlID0gU2luZ2xldG9uVHlwZUVudmlyb25tZW50U3RydWN0dXJlKHBhcmFtZXRlcik7CiAgICAgIH0gZWxzZSBpZiAoc3RydWN0dXJlIGlzIFNpbmdsZXRvblR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSkgewogICAgICAgIFNpbmdsZXRvblR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSBzaW5nbGV0b25TdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgICAgLy8gQ29udmVydCBhIHNpbmdsZXRvbiBlbnZpcm9ubWVudCBpbnRvIGEgc2luZ2xldG9uIHR1cGxlIGFuZCBleHRlbmQgaXQKICAgICAgICAvLyB2aWEgJ2JpbmQnLiBpLmUuIGdlbmVyYXRlIGBlbnYxLl9ldmFsKCJAPDA+IikuX2JpbmQoZW52MilgIFRPRE8oc3JhKToKICAgICAgICAvLyBIYXZlIGEgYmluZDEgaW5zdHJ1Y3Rpb24uCiAgICAgICAgLy8gVE9ETyhzcmEpOiBBZGQgYSAnUnRpLl9iaW5kMScgbWV0aG9kIHRvIHNob3J0ZW4gYW5kIGFjY2VsZXJhdGUgdGhpcwogICAgICAgIC8vIGNvbW1vbiBjYXNlLgogICAgICAgIEhJbnN0cnVjdGlvbiBzaW5nbGV0b25UdXBsZSA9IEhUeXBlRXZhbCgKICAgICAgICAgICAgZW52aXJvbm1lbnQsCiAgICAgICAgICAgIHN0cnVjdHVyZSwKICAgICAgICAgICAgRnVsbFR5cGVFbnZpcm9ubWVudFJlY2lwZSh0eXBlczogW3NpbmdsZXRvblN0cnVjdHVyZS52YXJpYWJsZV0pLAogICAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSkKICAgICAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgICBidWlsZGVyLmFkZChzaW5nbGV0b25UdXBsZSk7CiAgICAgICAgZW52aXJvbm1lbnQgPQogICAgICAgICAgICBIVHlwZUJpbmQoc2luZ2xldG9uVHVwbGUsIGFjY2VzcywgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpOwogICAgICAgIGJ1aWxkZXIuYWRkKGVudmlyb25tZW50KTsKICAgICAgICBzdHJ1Y3R1cmUgPSBGdWxsVHlwZUVudmlyb25tZW50U3RydWN0dXJlKAogICAgICAgICAgICBiaW5kaW5nczogW3NpbmdsZXRvblN0cnVjdHVyZS52YXJpYWJsZSwgcGFyYW1ldGVyXSk7CiAgICAgIH0gZWxzZSBpZiAoc3RydWN0dXJlIGlzIEZ1bGxUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUpIHsKICAgICAgICBGdWxsVHlwZUVudmlyb25tZW50U3RydWN0dXJlIGZ1bGxTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgICAgZW52aXJvbm1lbnQgPQogICAgICAgICAgICBIVHlwZUJpbmQoZW52aXJvbm1lbnQsIGFjY2VzcywgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpOwogICAgICAgIGJ1aWxkZXIuYWRkKGVudmlyb25tZW50KTsKICAgICAgICBzdHJ1Y3R1cmUgPSBGdWxsVHlwZUVudmlyb25tZW50U3RydWN0dXJlKAogICAgICAgICAgICBjbGFzc1R5cGU6IGZ1bGxTdHJ1Y3R1cmUuY2xhc3NUeXBlLAogICAgICAgICAgICBiaW5kaW5nczogWy4uLmZ1bGxTdHJ1Y3R1cmUuYmluZGluZ3MsIHBhcmFtZXRlcl0pOwogICAgICB9IGVsc2UgewogICAgICAgIGJ1aWxkZXIucmVwb3J0ZXIuaW50ZXJuYWxFcnJvcihwYXJhbWV0ZXIuZWxlbWVudCwgJ1VuZXhwZWN0ZWQnKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBfRW52aXJvbm1lbnRFeHByZXNzaW9uQW5kU3RydWN0dXJlKGVudmlyb25tZW50LCBzdHJ1Y3R1cmUpOwogIH0KCiAgLy8vIEJ1aWxkIGEgW0hUeXBlQ29udmVyc2lvbl0gZm9yIGNvbnZlcnRpbmcgW29yaWdpbmFsXSB0byB0eXBlIFt0eXBlXS4KICAvLy8KICAvLy8gSW52YXJpYW50OiBbdHlwZV0gbXVzdCBiZSB2YWxpZCBpbiB0aGUgY29udGV4dC4KICAvLy8gU2VlIFtMb2NhbHNIYW5kbGVyLnN1YnN0SW5Db250ZXh0XS4KICBISW5zdHJ1Y3Rpb24gYnVpbGRUeXBlQ29udmVyc2lvbigKICAgICAgSEluc3RydWN0aW9uIG9yaWdpbmFsLCBEYXJ0VHlwZSB0eXBlLCBpbnQga2luZCwKICAgICAge1NvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9ufSkgewogICAgaWYgKGJ1aWxkZXIub3B0aW9ucy5leHBlcmltZW50TmV3UnRpKSB7CiAgICAgIHJldHVybiBidWlsZEFzQ2hlY2sob3JpZ2luYWwsIHR5cGUsCiAgICAgICAgICBpc1R5cGVFcnJvcjoga2luZCA9PSBIVHlwZUNvbnZlcnNpb24uVFlQRV9DSEVDSywKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CgogICAgaWYgKHR5cGUgPT0gbnVsbCkgcmV0dXJuIG9yaWdpbmFsOwogICAgdHlwZSA9IHR5cGUudW5hbGlhc2VkOwogICAgaWYgKHR5cGUuaXNJbnRlcmZhY2VUeXBlICYmICF0eXBlLnRyZWF0QXNSYXcpIHsKICAgICAgSW50ZXJmYWNlVHlwZSBpbnRlcmZhY2VUeXBlID0gdHlwZTsKICAgICAgQWJzdHJhY3RWYWx1ZSBzdWJ0eXBlID0KICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZU51bGxhYmxlU3VidHlwZShpbnRlcmZhY2VUeXBlLmVsZW1lbnQpOwogICAgICBISW5zdHJ1Y3Rpb24gcmVwcmVzZW50YXRpb25zID0gYnVpbGRUeXBlQXJndW1lbnRSZXByZXNlbnRhdGlvbnMoCiAgICAgICAgICB0eXBlLCBidWlsZGVyLnNvdXJjZUVsZW1lbnQsIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgYnVpbGRlci5hZGQocmVwcmVzZW50YXRpb25zKTsKICAgICAgcmV0dXJuIG5ldyBIVHlwZUNvbnZlcnNpb24ud2l0aFR5cGVSZXByZXNlbnRhdGlvbigKICAgICAgICAgIHR5cGUsIGtpbmQsIHN1YnR5cGUsIG9yaWdpbmFsLCByZXByZXNlbnRhdGlvbnMpCiAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogICAgfSBlbHNlIGlmICh0eXBlLmlzVHlwZVZhcmlhYmxlKSB7CiAgICAgIEFic3RyYWN0VmFsdWUgc3VidHlwZSA9IG9yaWdpbmFsLmluc3RydWN0aW9uVHlwZTsKICAgICAgSEluc3RydWN0aW9uIHR5cGVWYXJpYWJsZSA9CiAgICAgICAgICBhZGRUeXBlVmFyaWFibGVSZWZlcmVuY2UodHlwZSwgYnVpbGRlci5zb3VyY2VFbGVtZW50KTsKICAgICAgcmV0dXJuIG5ldyBIVHlwZUNvbnZlcnNpb24ud2l0aFR5cGVSZXByZXNlbnRhdGlvbigKICAgICAgICAgIHR5cGUsIGtpbmQsIHN1YnR5cGUsIG9yaWdpbmFsLCB0eXBlVmFyaWFibGUpCiAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogICAgfSBlbHNlIGlmICh0eXBlLmlzRnVuY3Rpb25UeXBlIHx8IHR5cGUuaXNGdXR1cmVPcikgewogICAgICBISW5zdHJ1Y3Rpb24gcmVpZmllZFR5cGUgPQogICAgICAgICAgYW5hbHl6ZVR5cGVBcmd1bWVudCh0eXBlLCBidWlsZGVyLnNvdXJjZUVsZW1lbnQpOwogICAgICAvLyBUeXBlTWFza3MgZG9uJ3QgZW5jb2RlIGZ1bmN0aW9uIHR5cGVzIG9yIEZ1dHVyZU9yIHR5cGVzLgogICAgICBBYnN0cmFjdFZhbHVlIHJlZmluZWRNYXNrID0gb3JpZ2luYWwuaW5zdHJ1Y3Rpb25UeXBlOwogICAgICByZXR1cm4gbmV3IEhUeXBlQ29udmVyc2lvbi53aXRoVHlwZVJlcHJlc2VudGF0aW9uKAogICAgICAgICAgdHlwZSwga2luZCwgcmVmaW5lZE1hc2ssIG9yaWdpbmFsLCByZWlmaWVkVHlwZSkKICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gb3JpZ2luYWwuY29udmVydFR5cGUoX2Nsb3NlZFdvcmxkLCB0eXBlLCBraW5kKQogICAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgIH0KICB9CgogIC8vLyBCdWlsZCBhIFtIQXNDaGVja10gZm9yIGNvbnZlcnRpbmcgW29yaWdpbmFsXSB0byB0eXBlIFt0eXBlXS4KICAvLy8KICAvLy8gSW52YXJpYW50OiBbdHlwZV0gbXVzdCBiZSB2YWxpZCBpbiB0aGUgY29udGV4dC4KICAvLy8gU2VlIFtMb2NhbHNIYW5kbGVyLnN1YnN0SW5Db250ZXh0XS4KICBISW5zdHJ1Y3Rpb24gYnVpbGRBc0NoZWNrKEhJbnN0cnVjdGlvbiBvcmlnaW5hbCwgRGFydFR5cGUgdHlwZSwKICAgICAge2Jvb2wgaXNUeXBlRXJyb3IsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9ufSkgewogICAgaWYgKHR5cGUgPT0gbnVsbCkgcmV0dXJuIG9yaWdpbmFsOwogICAgdHlwZSA9IHR5cGUudW5hbGlhc2VkOwoKICAgIGlmICh0eXBlLmlzRHluYW1pYykgcmV0dXJuIG9yaWdpbmFsOwogICAgaWYgKHR5cGUuaXNWb2lkKSByZXR1cm4gb3JpZ2luYWw7CiAgICBpZiAodHlwZSA9PSBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMub2JqZWN0VHlwZSkgcmV0dXJuIG9yaWdpbmFsOwoKICAgIEhJbnN0cnVjdGlvbiByZWlmaWVkVHlwZSA9IGFuYWx5emVUeXBlQXJndW1lbnROZXdSdGkoCiAgICAgICAgdHlwZSwgYnVpbGRlci5zb3VyY2VFbGVtZW50LAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBBYnN0cmFjdFZhbHVlV2l0aFByZWNpc2lvbiBjaGVja2VkVHlwZSA9CiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlRnJvbVN0YXRpY1R5cGUodHlwZSwgbnVsbGFibGU6IHRydWUpOwogICAgQWJzdHJhY3RWYWx1ZSBpbnN0cnVjdGlvblR5cGUgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbi5pbnRlcnNlY3Rpb24oCiAgICAgICAgb3JpZ2luYWwuaW5zdHJ1Y3Rpb25UeXBlLCBjaGVja2VkVHlwZS5hYnN0cmFjdFZhbHVlKTsKICAgIHJldHVybiBIQXNDaGVjaygKICAgICAgICBvcmlnaW5hbCwgcmVpZmllZFR5cGUsIGNoZWNrZWRUeXBlLCB0eXBlLCBpc1R5cGVFcnJvciwgaW5zdHJ1Y3Rpb25UeXBlKQogICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgfQp9CgpjbGFzcyBfRW52aXJvbm1lbnRFeHByZXNzaW9uQW5kU3RydWN0dXJlIHsKICBmaW5hbCBISW5zdHJ1Y3Rpb24gZXhwcmVzc2lvbjsKICBmaW5hbCBUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUgc3RydWN0dXJlOwogIF9FbnZpcm9ubWVudEV4cHJlc3Npb25BbmRTdHJ1Y3R1cmUodGhpcy5leHByZXNzaW9uLCB0aGlzLnN0cnVjdHVyZSk7Cn0KgfIATk48AR4VJCExJygaLBgBTR8yCAE9DAFKDQFNSxwGThRLFRECAUswHScBHQE4ATIoAU9KLyM3GyUsRT87QAQBP0IaLicyBAFQJ0IaNxlJTkhQSw9CThcGRxcGEgQBUCc8G0I2FwY+Rh0EAUwnNy5NFwYaFAQBN0onLksxKjUxNQY3Ix0EAUdKHzhKJ0A3Ix0EATc7Pi5LMSo5MTgGNyMdBAFKAU4pMi8ePAE4JCwxBgEsJSNPBgEwNz4NPgYiLiIyL01RTB4kCiEtISkoSgYkUBEEAUJQLyU9Gk4fQzMeOEkwGgQBMTEvIkpLIiQyOT4yBjspSBAqLxsEASQ1LyxAMQYjIyg6BgEjPzEGATI/TD5ACDMpEhAqLxkTBAEqNS8jAStPMRgSBis7OjMBIiYlKCovFhAEAT8qLyhOUUsUAUgpIS4BNjI5QDg4D0AIJDAgEjQxT0dPKyIUDCkSLykSESpMCAYBMwEeKAEiHFBQNRRJNSBKBgE0NSBDMk8BIR5CQ0pQUSVPGDEZF00uMyUWUSIyQT5AFk4iMjA/D0kIBgFHBAFKBjYqJDYvLCo7MQYBJxs0Kh5NRzskOToxJjgiQTk3MTkhPEI8OToxDTwxBgQBQwY2KkJBJxsBKSZJATolLy1JRz4VUC8EAgErISxHAgEqcGFja2FnZTpjb21waWxlci9zcmMvc3NhL3R5cGVfYnVpbGRlci5kYXJ0OnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2luZmVycmVyL2J1aWxkZXJfa2VybmVsLmRhcnTAATJmLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9jbG9zdXJlLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL2NvbnN0YW50X3N5c3RlbS5kYXJ0JyBhcyBjb25zdGFudF9zeXN0ZW07CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9qdW1wcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaXIvY29uc3RhbnRzLmRhcnQnOwppbXBvcnQgJy4uL2lyL3N0YXRpY190eXBlX3Byb3ZpZGVyLmRhcnQnOwppbXBvcnQgJy4uL2lyL3V0aWwuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9maWVsZF9hbmFseXNpcy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19tb2RlbC9lbGVtZW50X21hcC5kYXJ0JzsKaW1wb3J0ICcuLi9qc19tb2RlbC9sb2NhbHMuZGFydCcgc2hvdyBKdW1wVmlzaXRvcjsKaW1wb3J0ICcuLi9qc19tb2RlbC9qc193b3JsZC5kYXJ0JzsKaW1wb3J0ICcuLi9uYXRpdmUvYmVoYXZpb3IuZGFydCc7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zaWRlX2VmZmVjdHMuZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnOwppbXBvcnQgJ2luZmVycmVyX2VuZ2luZS5kYXJ0JzsKaW1wb3J0ICdsb2NhbHNfaGFuZGxlci5kYXJ0JzsKaW1wb3J0ICd0eXBlX2dyYXBoX25vZGVzLmRhcnQnOwppbXBvcnQgJ3R5cGVfc3lzdGVtLmRhcnQnOwoKLy8vIFtLZXJuZWxUeXBlR3JhcGhCdWlsZGVyXSBjb25zdHJ1Y3RzIGEgdHlwZS1pbmZlcmVuY2UgZ3JhcGggZm9yIGEgcGFydGljdWxhcgovLy8gZWxlbWVudC4KLy8vCi8vLyBDYWxsaW5nIFtydW5dIHdpbGwgc3RhcnQgdGhlIHdvcmsgb2YgdmlzaXRpbmcgdGhlIGJvZHkgb2YgdGhlIGNvZGUgdG8KLy8vIGNvbnN0cnVjdCBhIHNldCBvZiBpbmZlcmVuY2Utbm9kZXMgdGhhdCBhYnN0cmFjdGx5IHJlcHJlc2VudCB3aGF0IHRoZSBjb2RlCi8vLyBpcyBkb2luZy4KY2xhc3MgS2VybmVsVHlwZUdyYXBoQnVpbGRlciBleHRlbmRzIGlyLlZpc2l0b3I8VHlwZUluZm9ybWF0aW9uPiB7CiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwogIGZpbmFsIEpzQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwogIGZpbmFsIEluZmVycmVyRW5naW5lIF9pbmZlcnJlcjsKICBmaW5hbCBUeXBlU3lzdGVtIF90eXBlczsKICBmaW5hbCBNZW1iZXJFbnRpdHkgX2FuYWx5emVkTWVtYmVyOwogIGZpbmFsIGlyLk5vZGUgX2FuYWx5emVkTm9kZTsKICBmaW5hbCBLZXJuZWxUb0xvY2Fsc01hcCBfbG9jYWxzTWFwOwogIGZpbmFsIEdsb2JhbFR5cGVJbmZlcmVuY2VFbGVtZW50RGF0YSBfbWVtYmVyRGF0YTsKICBmaW5hbCBib29sIF9pbkdlbmVyYXRpdmVDb25zdHJ1Y3RvcjsKCiAgTG9jYWxTdGF0ZSBfc3RhdGVJbnRlcm5hbDsKICBMb2NhbFN0YXRlIF9zdGF0ZUFmdGVyV2hlblRydWVJbnRlcm5hbDsKICBMb2NhbFN0YXRlIF9zdGF0ZUFmdGVyV2hlbkZhbHNlSW50ZXJuYWw7CgogIC8vLyBSZXR1cm5zIHRoZSBjdXJyZW50IGxvY2FsIHN0YXRlIGZvciB3aGVuIHRoZSBib29sZWFuIHZhbHVlIG9mIHRoZSBtb3N0CiAgLy8vIHJlY2VudGx5IHZpc2l0ZWQgbm9kZSBpcyBub3QgdGFrZW4gaW50byBhY2NvdW50CiAgTG9jYWxTdGF0ZSBnZXQgX3N0YXRlIHsKICAgIHJldHVybiBfc3RhdGVJbnRlcm5hbDsKICB9CgogIC8vLyBTZXRzIHRoZSBjdXJyZW50IGxvY2FsIHN0YXRlIGZvciB3aGVuIHRoZSBib29sZWFuIHZhbHVlIG9mIHRoZSBtb3N0CiAgLy8vIHJlY2VudGx5IHZpc2l0ZWQgbm9kZSBpcyBub3QgdGFrZW4gaW50byBhY2NvdW50CiAgLy8vCiAgLy8vIFRoaXMgdXNlZCBmb3Igd2hlbiB0aGUgbW9zdCByZWNlbnRseSB2aXNpdGVkIG5vZGUgaXMgbm90IGEgYm9vbGVhbgogIC8vLyBleHByZXNzaW9uIGFuZCB0aGVyZSBmb3IgYWxzbyByZXNldHMgW19zdGF0ZUFmdGVyV2hlblRydWVdIGFuZAogIC8vLyBbX3N0YXRlQWZ0ZXJXaGVuRmFsc2VdIHRvIHRoZSBzYW1lIHZhbHVlLgogIHZvaWQgc2V0IF9zdGF0ZShMb2NhbFN0YXRlIHZhbHVlKSB7CiAgICBfc3RhdGVJbnRlcm5hbCA9IHZhbHVlOwogICAgX3N0YXRlQWZ0ZXJXaGVuVHJ1ZUludGVybmFsID0gX3N0YXRlQWZ0ZXJXaGVuRmFsc2VJbnRlcm5hbCA9IG51bGw7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgY3VycmVudCBsb2NhbCBzdGF0ZSBmb3Igd2hlbiB0aGUgbW9zdCByZWNlbnRseSB2aXNpdGVkIG5vZGUKICAvLy8gaGFzIGV2YWx1YXRlZCB0byBgdHJ1ZWAuCiAgLy8vCiAgLy8vIElmIHRoZSBtb3N0IHJlY2VudGx5IHZpc2l0ZWQgbm9kZSBpcyBub3QgYSBib29sZWFuIGV4cHJlc3Npb24gdGhlbiB0aGlzIGlzCiAgLy8vIHRoZSBzYW1lIGFzIFtfc3RhdGVdLgogIExvY2FsU3RhdGUgZ2V0IF9zdGF0ZUFmdGVyV2hlblRydWUgPT4KICAgICAgX3N0YXRlQWZ0ZXJXaGVuVHJ1ZUludGVybmFsID8/IF9zdGF0ZUludGVybmFsOwoKICAvLy8gUmV0dXJucyB0aGUgY3VycmVudCBsb2NhbCBzdGF0ZSBmb3Igd2hlbiB0aGUgbW9zdCByZWNlbnRseSB2aXNpdGVkIG5vZGUKICAvLy8gaGFzIGV2YWx1YXRlZCB0byBgZmFsc2VgLgogIC8vLwogIC8vLyBJZiB0aGUgbW9zdCByZWNlbnRseSB2aXNpdGVkIG5vZGUgaXMgbm90IGEgYm9vbGVhbiBleHByZXNzaW9uIHRoZW4gdGhpcyBpcwogIC8vLyB0aGUgc2FtZSBhcyBbX3N0YXRlXS4KICBMb2NhbFN0YXRlIGdldCBfc3RhdGVBZnRlcldoZW5GYWxzZSA9PgogICAgICBfc3RhdGVBZnRlcldoZW5GYWxzZUludGVybmFsID8/IF9zdGF0ZUludGVybmFsOwoKICAvLy8gU2V0cyB0aGUgY3VycmVudCBsb2NhbCBzdGF0ZS4gW2Jhc2VdIGlzIHRoZSBsb2NhbCBzdGF0ZSBmb3Igd2hlbiB0aGUKICAvLy8gYm9vbGVhbiB2YWx1ZSBvZiB0aGUgbW9zdCByZWNlbnRseSB2aXNpdGVkIG5vZGUgaXMgbm90IHRha2VuIGludG8gYWNjb3VudC4KICAvLy8gW3doZW5UcnVlXSBhbmQgW3doZW5GYWxzZV0gYXJlIHRoZSBsb2NhbCBzdGF0ZSBmb3Igd2hlbiB0aGUgYm9vbGVhbiB2YWx1ZQogIC8vLyBvZiB0aGUgbW9zdCByZWNlbnRseSB2aXNpdGVkIG5vZGUgaXMgYHRydWVgIG9yIGBmYWxzZWAsIHJlc3BlY3RpdmVseS4KICB2b2lkIF9zZXRTdGF0ZUFmdGVyKAogICAgICBMb2NhbFN0YXRlIGJhc2UsIExvY2FsU3RhdGUgd2hlblRydWUsIExvY2FsU3RhdGUgd2hlbkZhbHNlKSB7CiAgICBfc3RhdGVJbnRlcm5hbCA9IGJhc2U7CiAgICBfc3RhdGVBZnRlcldoZW5UcnVlSW50ZXJuYWwgPSB3aGVuVHJ1ZTsKICAgIF9zdGF0ZUFmdGVyV2hlbkZhbHNlSW50ZXJuYWwgPSB3aGVuRmFsc2U7CiAgfQoKICBmaW5hbCBTaWRlRWZmZWN0c0J1aWxkZXIgX3NpZGVFZmZlY3RzQnVpbGRlcjsKICBmaW5hbCBNYXA8SnVtcFRhcmdldCwgTGlzdDxMb2NhbFN0YXRlPj4gX2JyZWFrc0ZvciA9CiAgICAgIDxKdW1wVGFyZ2V0LCBMaXN0PExvY2FsU3RhdGU+Pnt9OwogIGZpbmFsIE1hcDxKdW1wVGFyZ2V0LCBMaXN0PExvY2FsU3RhdGU+PiBfY29udGludWVzRm9yID0KICAgICAgPEp1bXBUYXJnZXQsIExpc3Q8TG9jYWxTdGF0ZT4+e307CiAgVHlwZUluZm9ybWF0aW9uIF9yZXR1cm5UeXBlOwogIGZpbmFsIFNldDxMb2NhbD4gX2NhcHR1cmVkVmFyaWFibGVzID0gbmV3IFNldDxMb2NhbD4oKTsKICBmaW5hbCBNYXA8TG9jYWwsIEZpZWxkRW50aXR5PiBfY2FwdHVyZWRBbmRCb3hlZDsKCiAgZmluYWwgU3RhdGljVHlwZVByb3ZpZGVyIF9zdGF0aWNUeXBlUHJvdmlkZXI7CgogIC8vLyBXaGV0aGVyIHdlIGN1cnJlbnRseSB0YWtlbiB0aGUgYm9vbGVhbiByZXN1bHQgb2YgaXMtY2hlY2tzIG9yIG51bGwtY2hlY2tzCiAgLy8vIGludG8gYWNjb3VudCBpbiB0aGUgbG9jYWwgc3RhdGUuCiAgYm9vbCBfYWNjdW11bGF0ZUlzQ2hlY2tzID0gZmFsc2U7CgogIEtlcm5lbFR5cGVHcmFwaEJ1aWxkZXIoCiAgICAgIHRoaXMuX29wdGlvbnMsCiAgICAgIHRoaXMuX2Nsb3NlZFdvcmxkLAogICAgICB0aGlzLl9pbmZlcnJlciwKICAgICAgdGhpcy5fYW5hbHl6ZWRNZW1iZXIsCiAgICAgIHRoaXMuX2FuYWx5emVkTm9kZSwKICAgICAgdGhpcy5fbG9jYWxzTWFwLAogICAgICB0aGlzLl9zdGF0aWNUeXBlUHJvdmlkZXIsCiAgICAgIFt0aGlzLl9zdGF0ZUludGVybmFsLAogICAgICBNYXA8TG9jYWwsIEZpZWxkRW50aXR5PiBjYXB0dXJlZEFuZEJveGVkXSkKICAgICAgOiB0aGlzLl90eXBlcyA9IF9pbmZlcnJlci50eXBlcywKICAgICAgICB0aGlzLl9tZW1iZXJEYXRhID0gX2luZmVycmVyLmRhdGFPZk1lbWJlcihfYW5hbHl6ZWRNZW1iZXIpLAogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFNob3VsZCBzaWRlIGVmZmVjdHMgYWxzbyBiZSB0cmFja2VkIGZvciBmaWVsZAogICAgICAgIC8vIGluaXRpYWxpemVycz8KICAgICAgICB0aGlzLl9zaWRlRWZmZWN0c0J1aWxkZXIgPSBfYW5hbHl6ZWRNZW1iZXIgaXMgRnVuY3Rpb25FbnRpdHkKICAgICAgICAgICAgPyBfaW5mZXJyZXIuaW5mZXJyZWREYXRhQnVpbGRlcgogICAgICAgICAgICAgICAgLmdldFNpZGVFZmZlY3RzQnVpbGRlcihfYW5hbHl6ZWRNZW1iZXIpCiAgICAgICAgICAgIDogbmV3IFNpZGVFZmZlY3RzQnVpbGRlci5mcmVlKF9hbmFseXplZE1lbWJlciksCiAgICAgICAgdGhpcy5faW5HZW5lcmF0aXZlQ29uc3RydWN0b3IgPSBfYW5hbHl6ZWROb2RlIGlzIGlyLkNvbnN0cnVjdG9yLAogICAgICAgIHRoaXMuX2NhcHR1cmVkQW5kQm94ZWQgPSBjYXB0dXJlZEFuZEJveGVkICE9IG51bGwKICAgICAgICAgICAgPyBuZXcgTWFwPExvY2FsLCBGaWVsZEVudGl0eT4uZnJvbShjYXB0dXJlZEFuZEJveGVkKQogICAgICAgICAgICA6IDxMb2NhbCwgRmllbGRFbnRpdHk+e30gewogICAgaWYgKF9zdGF0ZSAhPSBudWxsKSByZXR1cm47CgogICAgX3N0YXRlID0gbmV3IExvY2FsU3RhdGUuaW5pdGlhbCgKICAgICAgICBpbkdlbmVyYXRpdmVDb25zdHJ1Y3RvcjogX2luR2VuZXJhdGl2ZUNvbnN0cnVjdG9yKTsKICB9CgogIEpzVG9FbGVtZW50TWFwIGdldCBfZWxlbWVudE1hcCA9PiBfY2xvc2VkV29ybGQuZWxlbWVudE1hcDsKCiAgQ2xvc3VyZURhdGEgZ2V0IF9jbG9zdXJlRGF0YUxvb2t1cCA9PiBfY2xvc2VkV29ybGQuY2xvc3VyZURhdGFMb29rdXA7CgogIERhcnRUeXBlIF9nZXRTdGF0aWNUeXBlKGlyLkV4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIF9lbGVtZW50TWFwLmdldERhcnRUeXBlKF9zdGF0aWNUeXBlUHJvdmlkZXIuZ2V0U3RhdGljVHlwZShub2RlKSk7CiAgfQoKICBpbnQgX2xvb3BMZXZlbCA9IDA7CgogIGJvb2wgZ2V0IGluTG9vcCA9PiBfbG9vcExldmVsID4gMDsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFttZW1iZXJdIGlzIGRlZmluZWQgaW4gYSBzdWJjbGFzcyBvZiB0aGUgY3VycmVudCB0aGlzCiAgLy8vIHR5cGUuCiAgYm9vbCBfaXNJbkNsYXNzT3JTdWJjbGFzcyhNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBDbGFzc0VudGl0eSBjbHMgPSBfZWxlbWVudE1hcC5nZXRNZW1iZXJUaGlzVHlwZShfYW5hbHl6ZWRNZW1iZXIpPy5lbGVtZW50OwogICAgaWYgKGNscyA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX2Nsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzU3ViY2xhc3NPZihtZW1iZXIuZW5jbG9zaW5nQ2xhc3MsIGNscyk7CiAgfQoKICAvLy8gQ2hlY2tzIHdoZXRoZXIgdGhlIGFjY2VzcyBvciB1cGRhdGUgb2YgW3NlbGVjdG9yXSBvbiBbbWFza10gcG90ZW50aWFsbHkKICAvLy8gZXhwb3NlcyBgdGhpc2AuCiAgLy8vCiAgLy8vIElmIGFsbCBtYXRjaGluZyBtZW1iZXJzIGFyZSBpbnN0YW5jZSBmaWVsZHMgb24gdGhlIGN1cnJlbnQgYHRoaXNgCiAgLy8vIGNsYXNzIG9yIHN1YmNsYXNzZXMsIGB0aGlzYCBpcyBub3QgY29uc2lkZXJlZCB0byBiZSBleHBvc2VkLgogIC8vLwogIC8vLyBJZiBhbiBpbnN0YW5jZSBmaWVsZCBtYXRjaGVkIHdpdGggYSBbc2VsZWN0b3JdIHRoYXQgaXMgX25vdF8gYSBzZXR0ZXIsIHRoZQogIC8vLyBmaWVsZCBpcyBjb25zaWRlcmVkIHRvIGhhdmUgYmVlbiByZWFkIGJlZm9yZSBpbml0aWFsaXphdGlvbiBhbmQgdGhlIGZpZWxkCiAgLy8vIGlzIGFzc3VtZWQgdG8gYmUgcG90ZW50aWFsbHkgYG51bGxgLgogIHZvaWQgX2NoZWNrSWZFeHBvc2VzVGhpcyhTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSBtYXNrKSB7CiAgICBpZiAoX3N0YXRlLmlzVGhpc0V4cG9zZWQpIHsKICAgICAgLy8gV2UgYWxyZWFkeSBjb25zaWRlciBgdGhpc2AgdG8gaGF2ZSBiZWVuIGV4cG9zZWQuCiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChfaW5mZXJyZXIuY2xvc2VkV29ybGQuaW5jbHVkZXNDbG9zdXJlQ2FsbChzZWxlY3RvciwgbWFzaykpIHsKICAgICAgLy8gVE9ETyhuZ2VvZmZyYXkpOiBXZSBjb3VsZCBkbyBiZXR0ZXIgaGVyZSBpZiB3ZSBrbmV3IHdoYXQgd2UKICAgICAgLy8gYXJlIGNhbGxpbmcgZG9lcyBub3QgZXhwb3NlIHRoaXMuCiAgICAgIF9zdGF0ZS5tYXJrVGhpc0FzRXhwb3NlZCgpOwogICAgfSBlbHNlIHsKICAgICAgX2luZmVycmVyLmZvckVhY2hFbGVtZW50TWF0Y2hpbmcoc2VsZWN0b3IsIG1hc2ssIChNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgICAgIGlmIChlbGVtZW50ICE9IG51bGwgJiYgZWxlbWVudC5pc0ZpZWxkKSB7CiAgICAgICAgICBGaWVsZEVudGl0eSBmaWVsZCA9IGVsZW1lbnQ7CiAgICAgICAgICBpZiAoIXNlbGVjdG9yLmlzU2V0dGVyICYmCiAgICAgICAgICAgICAgX2lzSW5DbGFzc09yU3ViY2xhc3MoZmllbGQpICYmCiAgICAgICAgICAgICAgZmllbGQuaXNBc3NpZ25hYmxlICYmCiAgICAgICAgICAgICAgX3N0YXRlLnJlYWRGaWVsZChmaWVsZCkgPT0gbnVsbCAmJgogICAgICAgICAgICAgIGdldEZpZWxkSW5pdGlhbGl6ZXIoX2VsZW1lbnRNYXAsIGZpZWxkKSA9PSBudWxsKSB7CiAgICAgICAgICAgIC8vIElmIHRoZSBmaWVsZCBpcyBiZWluZyB1c2VkIGJlZm9yZSB0aGlzIGNvbnN0cnVjdG9yCiAgICAgICAgICAgIC8vIGFjdHVhbGx5IGhhZCBhIGNoYW5jZSB0byBpbml0aWFsaXplIGl0LCBzYXkgaXQgY2FuIGJlCiAgICAgICAgICAgIC8vIG51bGwuCiAgICAgICAgICAgIF9pbmZlcnJlci5yZWNvcmRUeXBlT2ZGaWVsZChmaWVsZCwgX3R5cGVzLm51bGxUeXBlKTsKICAgICAgICAgIH0KICAgICAgICAgIC8vIEFjY2Vzc2luZyBhIGZpZWxkIGRvZXMgbm90IGV4cG9zZSBgdGhpc2AuCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgLy8gVE9ETyhuZ2VvZmZyYXkpOiBXZSBjb3VsZCBkbyBiZXR0ZXIgaGVyZSBpZiB3ZSBrbmV3IHdoYXQgd2UKICAgICAgICAvLyBhcmUgY2FsbGluZyBkb2VzIG5vdCBleHBvc2UgdGhpcy4KICAgICAgICBfc3RhdGUubWFya1RoaXNBc0V4cG9zZWQoKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0pOwogICAgfQogIH0KCiAgVHlwZUluZm9ybWF0aW9uIHJ1bigpIHsKICAgIGlmIChfYW5hbHl6ZWRNZW1iZXIuaXNGaWVsZCkgewogICAgICBpZiAoX2FuYWx5emVkTm9kZSA9PSBudWxsIHx8IF9hbmFseXplZE5vZGUgaXMgaXIuTnVsbExpdGVyYWwpIHsKICAgICAgICAvLyBFYWdlcmx5IGJhaWxvdXQsIGJlY2F1c2UgY29tcHV0aW5nIHRoZSBjbG9zdXJlIGRhdGEgb25seQogICAgICAgIC8vIHdvcmtzIGZvciBmdW5jdGlvbnMgYW5kIGZpZWxkIGFzc2lnbm1lbnRzLgogICAgICAgIHJldHVybiBfdHlwZXMubnVsbFR5cGU7CiAgICAgIH0KICAgIH0KCiAgICAvLyBVcGRhdGUgdGhlIGxvY2FscyB0aGF0IGFyZSBib3hlZCBpbiBbbG9jYWxzXS4gVGhlc2UgbG9jYWxzIHdpbGwKICAgIC8vIGJlIGhhbmRsZWQgc3BlY2lhbGx5LCBpbiB0aGF0IHdlIGFyZSBjb21wdXRpbmcgdGhlaXIgTFVCIGF0CiAgICAvLyBlYWNoIHVwZGF0ZSwgYW5kIHJlYWRpbmcgdGhlbSB5aWVsZHMgdGhlIHR5cGUgdGhhdCB3YXMgZm91bmQgaW4gYQogICAgLy8gcHJldmlvdXMgYW5hbHlzaXMgb2YgW291dGVybW9zdEVsZW1lbnRdLgogICAgU2NvcGVJbmZvIHNjb3BlSW5mbyA9IF9jbG9zdXJlRGF0YUxvb2t1cC5nZXRTY29wZUluZm8oX2FuYWx5emVkTWVtYmVyKTsKICAgIHNjb3BlSW5mby5mb3JFYWNoQm94ZWRWYXJpYWJsZSgodmFyaWFibGUsIGZpZWxkKSB7CiAgICAgIF9jYXB0dXJlZEFuZEJveGVkW3ZhcmlhYmxlXSA9IGZpZWxkOwogICAgfSk7CgogICAgcmV0dXJuIHZpc2l0KF9hbmFseXplZE5vZGUpOwogIH0KCiAgYm9vbCBpc0luY29tcGF0aWJsZUludm9rZShGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzKSB7CiAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlID0gZnVuY3Rpb24ucGFyYW1ldGVyU3RydWN0dXJlOwoKICAgIHJldHVybiBhcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggPAogICAgICAgICAgICBwYXJhbWV0ZXJTdHJ1Y3R1cmUucmVxdWlyZWRQYXJhbWV0ZXJzIHx8CiAgICAgICAgYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoID4gcGFyYW1ldGVyU3RydWN0dXJlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzIHx8CiAgICAgICAgYXJndW1lbnRzLm5hbWVkLmtleXMKICAgICAgICAgICAgLmFueSgobmFtZSkgPT4gIXBhcmFtZXRlclN0cnVjdHVyZS5uYW1lZFBhcmFtZXRlcnMuY29udGFpbnMobmFtZSkpOwogIH0KCiAgdm9pZCByZWNvcmRSZXR1cm5UeXBlKFR5cGVJbmZvcm1hdGlvbiB0eXBlKSB7CiAgICBGdW5jdGlvbkVudGl0eSBhbmFseXplZE1ldGhvZCA9IF9hbmFseXplZE1lbWJlcjsKICAgIF9yZXR1cm5UeXBlID0KICAgICAgICBfaW5mZXJyZXIuYWRkUmV0dXJuVHlwZUZvck1ldGhvZChhbmFseXplZE1ldGhvZCwgX3JldHVyblR5cGUsIHR5cGUpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIF90aGlzVHlwZTsKICBUeXBlSW5mb3JtYXRpb24gZ2V0IHRoaXNUeXBlIHsKICAgIGlmIChfdGhpc1R5cGUgIT0gbnVsbCkgcmV0dXJuIF90aGlzVHlwZTsKICAgIENsYXNzRW50aXR5IGNscyA9IF9lbGVtZW50TWFwLmdldE1lbWJlclRoaXNUeXBlKF9hbmFseXplZE1lbWJlcik/LmVsZW1lbnQ7CiAgICBpZiAoX2Nsb3NlZFdvcmxkLmlzVXNlZEFzTWl4aW4oY2xzKSkgewogICAgICByZXR1cm4gX3RoaXNUeXBlID0gX3R5cGVzLm5vbk51bGxTdWJ0eXBlKGNscyk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX3RoaXNUeXBlID0gX3R5cGVzLm5vbk51bGxTdWJjbGFzcyhjbHMpOwogICAgfQogIH0KCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0KGlyLk5vZGUgbm9kZSwge2Jvb2wgY29uZGl0aW9uQ29udGV4dDogZmFsc2V9KSB7CiAgICB2YXIgb2xkQWNjdW11bGF0ZUlzQ2hlY2tzID0gX2FjY3VtdWxhdGVJc0NoZWNrczsKICAgIF9hY2N1bXVsYXRlSXNDaGVja3MgPSBjb25kaXRpb25Db250ZXh0OwogICAgdmFyIHJlc3VsdCA9IG5vZGU/LmFjY2VwdCh0aGlzKTsKICAgIF9hY2N1bXVsYXRlSXNDaGVja3MgPSBvbGRBY2N1bXVsYXRlSXNDaGVja3M7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgdm9pZCB2aXNpdExpc3QoTGlzdDxpci5Ob2RlPiBub2RlcykgewogICAgaWYgKG5vZGVzID09IG51bGwpIHJldHVybjsKICAgIG5vZGVzLmZvckVhY2godmlzaXQpOwogIH0KCiAgdm9pZCBoYW5kbGVQYXJhbWV0ZXIoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlLCB7Ym9vbCBpc09wdGlvbmFsfSkgewogICAgTG9jYWwgbG9jYWwgPSBfbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUobm9kZSk7CiAgICBEYXJ0VHlwZSB0eXBlID0gX2xvY2Fsc01hcC5nZXRMb2NhbFR5cGUoX2VsZW1lbnRNYXAsIGxvY2FsKTsKICAgIF9zdGF0ZS51cGRhdGVMb2NhbChfaW5mZXJyZXIsIF9jYXB0dXJlZEFuZEJveGVkLCBsb2NhbCwKICAgICAgICBfaW5mZXJyZXIudHlwZU9mUGFyYW1ldGVyKGxvY2FsKSwgbm9kZSwgdHlwZSk7CiAgICBpZiAoaXNPcHRpb25hbCkgewogICAgICBUeXBlSW5mb3JtYXRpb24gdHlwZTsKICAgICAgaWYgKG5vZGUuaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICAgIHR5cGUgPSB2aXNpdChub2RlLmluaXRpYWxpemVyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0eXBlID0gX3R5cGVzLm51bGxUeXBlOwogICAgICB9CiAgICAgIF9pbmZlcnJlci5zZXREZWZhdWx0VHlwZU9mUGFyYW1ldGVyKGxvY2FsLCB0eXBlLAogICAgICAgICAgaXNJbnN0YW5jZU1lbWJlcjogX2FuYWx5emVkTWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0Q29uc3RydWN0b3IoaXIuQ29uc3RydWN0b3Igbm9kZSkgewogICAgaGFuZGxlUGFyYW1ldGVycyhub2RlLmZ1bmN0aW9uKTsKICAgIG5vZGUuaW5pdGlhbGl6ZXJzLmZvckVhY2godmlzaXQpOwogICAgdmlzaXQobm9kZS5mdW5jdGlvbi5ib2R5KTsKCiAgICBDbGFzc0VudGl0eSBjbHMgPSBfYW5hbHl6ZWRNZW1iZXIuZW5jbG9zaW5nQ2xhc3M7CiAgICBpZiAoIShub2RlLmluaXRpYWxpemVycy5pc05vdEVtcHR5ICYmCiAgICAgICAgbm9kZS5pbml0aWFsaXplcnMuZmlyc3QgaXMgaXIuUmVkaXJlY3RpbmdJbml0aWFsaXplcikpIHsKICAgICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBpbnN0YW5jZSBmaWVsZHMsIGFuZCBnaXZlIGEgbnVsbCB0eXBlIHRvCiAgICAgIC8vIGZpZWxkcyB0aGF0IHdlIGhhdmVuJ3QgaW5pdGlhbGl6ZWQgZm9yIHN1cmUuCiAgICAgIF9lbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoTG9jYWxDbGFzc01lbWJlcihjbHMsCiAgICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICAgIGlmIChtZW1iZXIuaXNGaWVsZCAmJiBtZW1iZXIuaXNJbnN0YW5jZU1lbWJlciAmJiBtZW1iZXIuaXNBc3NpZ25hYmxlKSB7CiAgICAgICAgICBUeXBlSW5mb3JtYXRpb24gdHlwZSA9IF9zdGF0ZS5yZWFkRmllbGQobWVtYmVyKTsKICAgICAgICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9IF9lbGVtZW50TWFwLmdldE1lbWJlckRlZmluaXRpb24obWVtYmVyKTsKICAgICAgICAgIGFzc2VydChkZWZpbml0aW9uLmtpbmQgPT0gTWVtYmVyS2luZC5yZWd1bGFyKTsKICAgICAgICAgIGlyLkZpZWxkIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgICBpZiAodHlwZSA9PSBudWxsICYmCiAgICAgICAgICAgICAgKG5vZGUuaW5pdGlhbGl6ZXIgPT0gbnVsbCB8fAogICAgICAgICAgICAgICAgICBub2RlLmluaXRpYWxpemVyIGlzIGlyLk51bGxMaXRlcmFsKSkgewogICAgICAgICAgICBfaW5mZXJyZXIucmVjb3JkVHlwZU9mRmllbGQobWVtYmVyLCBfdHlwZXMubnVsbFR5cGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICBfaW5mZXJyZXIucmVjb3JkRXhwb3Nlc1RoaXMoX2FuYWx5emVkTWVtYmVyLCBfc3RhdGUuaXNUaGlzRXhwb3NlZCk7CgogICAgaWYgKGNscy5pc0Fic3RyYWN0KSB7CiAgICAgIGlmIChfY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNJbnN0YW50aWF0ZWQoY2xzKSkgewogICAgICAgIF9yZXR1cm5UeXBlID0gX3R5cGVzLm5vbk51bGxTdWJjbGFzcyhjbHMpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEF2b2lkIGFuYWx5emluZyBbX2FuYWx5emVkTWVtYmVyXSBpbiB0aGlzCiAgICAgICAgLy8gY2FzZTsgaXQncyBuZXZlciBjYWxsZWQuCiAgICAgICAgX3JldHVyblR5cGUgPSBfdHlwZXMubm9uTnVsbEVtcHR5KCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIF9yZXR1cm5UeXBlID0gX3R5cGVzLm5vbk51bGxFeGFjdChjbHMpOwogICAgfQogICAgYXNzZXJ0KF9icmVha3NGb3IuaXNFbXB0eSk7CiAgICBhc3NlcnQoX2NvbnRpbnVlc0Zvci5pc0VtcHR5KTsKICAgIHJldHVybiBfcmV0dXJuVHlwZTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0RmllbGRJbml0aWFsaXplcihpci5GaWVsZEluaXRpYWxpemVyIG5vZGUpIHsKICAgIFR5cGVJbmZvcm1hdGlvbiByaHNUeXBlID0gdmlzaXQobm9kZS52YWx1ZSk7CiAgICBGaWVsZEVudGl0eSBmaWVsZCA9IF9lbGVtZW50TWFwLmdldEZpZWxkKG5vZGUuZmllbGQpOwogICAgX3N0YXRlLnVwZGF0ZUZpZWxkKGZpZWxkLCByaHNUeXBlKTsKICAgIF9pbmZlcnJlci5yZWNvcmRUeXBlT2ZGaWVsZChmaWVsZCwgcmhzVHlwZSk7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0U3VwZXJJbml0aWFsaXplcihpci5TdXBlckluaXRpYWxpemVyIG5vZGUpIHsKICAgIENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yID0gX2VsZW1lbnRNYXAuZ2V0Q29uc3RydWN0b3Iobm9kZS50YXJnZXQpOwogICAgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzID0gYW5hbHl6ZUFyZ3VtZW50cyhub2RlLmFyZ3VtZW50cyk7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IG5ldyBTZWxlY3RvcihTZWxlY3RvcktpbmQuQ0FMTCwgY29uc3RydWN0b3IubWVtYmVyTmFtZSwKICAgICAgICBfZWxlbWVudE1hcC5nZXRDYWxsU3RydWN0dXJlKG5vZGUuYXJndW1lbnRzKSk7CiAgICBBYnN0cmFjdFZhbHVlIG1hc2sgPSBfbWVtYmVyRGF0YS50eXBlT2ZTZW5kKG5vZGUpOwogICAgaGFuZGxlQ29uc3RydWN0b3JJbnZva2UoCiAgICAgICAgbm9kZSwgbm9kZS5hcmd1bWVudHMsIHNlbGVjdG9yLCBtYXNrLCBjb25zdHJ1Y3RvciwgYXJndW1lbnRzKTsKCiAgICBfaW5mZXJyZXIuYW5hbHl6ZShjb25zdHJ1Y3Rvcik7CiAgICBpZiAoX2luZmVycmVyLmNoZWNrSWZFeHBvc2VzVGhpcyhjb25zdHJ1Y3RvcikpIHsKICAgICAgX3N0YXRlLm1hcmtUaGlzQXNFeHBvc2VkKCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0UmVkaXJlY3RpbmdJbml0aWFsaXplcihpci5SZWRpcmVjdGluZ0luaXRpYWxpemVyIG5vZGUpIHsKICAgIENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yID0gX2VsZW1lbnRNYXAuZ2V0Q29uc3RydWN0b3Iobm9kZS50YXJnZXQpOwogICAgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzID0gYW5hbHl6ZUFyZ3VtZW50cyhub2RlLmFyZ3VtZW50cyk7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IG5ldyBTZWxlY3RvcihTZWxlY3RvcktpbmQuQ0FMTCwgY29uc3RydWN0b3IubWVtYmVyTmFtZSwKICAgICAgICBfZWxlbWVudE1hcC5nZXRDYWxsU3RydWN0dXJlKG5vZGUuYXJndW1lbnRzKSk7CiAgICBBYnN0cmFjdFZhbHVlIG1hc2sgPSBfbWVtYmVyRGF0YS50eXBlT2ZTZW5kKG5vZGUpOwogICAgaGFuZGxlQ29uc3RydWN0b3JJbnZva2UoCiAgICAgICAgbm9kZSwgbm9kZS5hcmd1bWVudHMsIHNlbGVjdG9yLCBtYXNrLCBjb25zdHJ1Y3RvciwgYXJndW1lbnRzKTsKCiAgICBfaW5mZXJyZXIuYW5hbHl6ZShjb25zdHJ1Y3Rvcik7CiAgICBpZiAoX2luZmVycmVyLmNoZWNrSWZFeHBvc2VzVGhpcyhjb25zdHJ1Y3RvcikpIHsKICAgICAgX3N0YXRlLm1hcmtUaGlzQXNFeHBvc2VkKCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0TG9jYWxJbml0aWFsaXplcihpci5Mb2NhbEluaXRpYWxpemVyIG5vZGUpIHsKICAgIHZpc2l0KG5vZGUudmFyaWFibGUpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIGhhbmRsZVBhcmFtZXRlcnMoaXIuRnVuY3Rpb25Ob2RlIG5vZGUpIHsKICAgIGludCBwb3NpdGlvbiA9IDA7CiAgICBmb3IgKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyIGluIG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMpIHsKICAgICAgaGFuZGxlUGFyYW1ldGVyKHBhcmFtZXRlciwKICAgICAgICAgIGlzT3B0aW9uYWw6IHBvc2l0aW9uID49IG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCk7CiAgICAgIHBvc2l0aW9uKys7CiAgICB9CiAgICBmb3IgKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyIGluIG5vZGUubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgIGhhbmRsZVBhcmFtZXRlcihwYXJhbWV0ZXIsIGlzT3B0aW9uYWw6IHRydWUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0RnVuY3Rpb25Ob2RlKGlyLkZ1bmN0aW9uTm9kZSBub2RlKSB7CiAgICBoYW5kbGVQYXJhbWV0ZXJzKG5vZGUpOwoKICAgIGlmIChfY2xvc2VkV29ybGQubmF0aXZlRGF0YS5pc05hdGl2ZU1lbWJlcihfYW5hbHl6ZWRNZW1iZXIpKSB7CiAgICAgIC8vIE5hdGl2ZSBtZXRob2RzIGRvIG5vdCBoYXZlIGEgYm9keSwgYW5kIHdlIGN1cnJlbnRseSBqdXN0IHNheQogICAgICAvLyB0aGV5IHJldHVybiBkeW5hbWljLgogICAgICByZXR1cm4gX3R5cGVzLmR5bmFtaWNUeXBlOwogICAgfQoKICAgIHZpc2l0KG5vZGUuYm9keSk7CiAgICBzd2l0Y2ggKG5vZGUuYXN5bmNNYXJrZXIpIHsKICAgICAgY2FzZSBpci5Bc3luY01hcmtlci5TeW5jOgogICAgICAgIGlmIChfcmV0dXJuVHlwZSA9PSBudWxsKSB7CiAgICAgICAgICAvLyBObyByZXR1cm4gaW4gdGhlIGJvZHkuCiAgICAgICAgICBfcmV0dXJuVHlwZSA9IF9zdGF0ZS5zZWVuUmV0dXJuT3JUaHJvdwogICAgICAgICAgICAgID8gX3R5cGVzLm5vbk51bGxFbXB0eSgpIC8vIEJvZHkgYWx3YXlzIHRocm93cy4KICAgICAgICAgICAgICA6IF90eXBlcy5udWxsVHlwZTsKICAgICAgICB9IGVsc2UgaWYgKCFfc3RhdGUuc2VlblJldHVybk9yVGhyb3cpIHsKICAgICAgICAgIC8vIFdlIGhhdmVuJ1R5cGVJbmZvcm1hdGlvbiBzZWVuIHJldHVybnMgb24gYWxsIGJyYW5jaGVzLiBTbyB0aGUKICAgICAgICAgIC8vIG1ldGhvZCBtYXkgYWxzbyByZXR1cm4gbnVsbC4KICAgICAgICAgIHJlY29yZFJldHVyblR5cGUoX3R5cGVzLm51bGxUeXBlKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIGlyLkFzeW5jTWFya2VyLlN5bmNTdGFyOgogICAgICAgIC8vIFRPRE8oYXNnZXJmKTogTWF5YmUgbWFrZSBhIENvbnRhaW5lclR5cGVNYXNrIGZvciB0aGVzZT8gVGhlIHR5cGUKICAgICAgICAvLyAgICAgICAgICAgICAgIGNvbnRhaW5lZCBpcyB0aGUgbWV0aG9kIGJvZHkncyByZXR1cm4gdHlwZS4KICAgICAgICByZWNvcmRSZXR1cm5UeXBlKF90eXBlcy5zeW5jU3Rhckl0ZXJhYmxlVHlwZSk7CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIGlyLkFzeW5jTWFya2VyLkFzeW5jOgogICAgICAgIHJlY29yZFJldHVyblR5cGUoX3R5cGVzLmFzeW5jRnV0dXJlVHlwZSk7CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIGlyLkFzeW5jTWFya2VyLkFzeW5jU3RhcjoKICAgICAgICByZWNvcmRSZXR1cm5UeXBlKF90eXBlcy5hc3luY1N0YXJTdHJlYW1UeXBlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBpci5Bc3luY01hcmtlci5TeW5jWWllbGRpbmc6CiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIF9hbmFseXplZE1lbWJlciwgIlVuZXhwZWN0ZWQgYXN5bmMgbWFya2VyOiAke25vZGUuYXN5bmNNYXJrZXJ9Iik7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBhc3NlcnQoX2JyZWFrc0Zvci5pc0VtcHR5KTsKICAgIGFzc2VydChfY29udGludWVzRm9yLmlzRW1wdHkpOwogICAgcmV0dXJuIF9yZXR1cm5UeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0SW5zdGFudGlhdGlvbihpci5JbnN0YW50aWF0aW9uIG5vZGUpIHsKICAgIHJldHVybiBjcmVhdGVJbnN0YW50aWF0aW9uVHlwZUluZm9ybWF0aW9uKHZpc2l0KG5vZGUuZXhwcmVzc2lvbikpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGNyZWF0ZUluc3RhbnRpYXRpb25UeXBlSW5mb3JtYXRpb24oCiAgICAgIFR5cGVJbmZvcm1hdGlvbiBleHByZXNzaW9uVHlwZSkgewogICAgLy8gVE9ETyhzcmEpOiBBZGQgYSBUeXBlSW5mb3JtYXRpb24gZm9yIEluc3RhbnRpYXRpb25zLiAgSW5zdGFudGlhdGVkCiAgICAvLyBnZW5lcmljIG1ldGhvZHMgd2lsbCBuZWVkIHRvIGJlIHRyYWNlZCBzZXBhcmF0ZWx5LCBhbmQgaGF2ZSB0aGUKICAgIC8vIGluZm9ybWF0aW9uIGdhdGhlcmVkIGluIHRyYWNpbmcgcmVmbGVjdGVkIGJhY2sgdG8gdGhlIGdlbmVyaWMgbWV0aG9kLiBGb3IKICAgIC8vIG5vdywgcGFzcyBhbG9uZyB0aGUgdW5pbnN0YW50aWF0ZWQgbWV0aG9kLgogICAgcmV0dXJuIGV4cHJlc3Npb25UeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIGRlZmF1bHRFeHByZXNzaW9uKGlyLkV4cHJlc3Npb24gbm9kZSkgewogICAgdGhyb3cgbmV3IFVuaW1wbGVtZW50ZWRFcnJvcigKICAgICAgICAnVW5oYW5kbGVkIGV4cHJlc3Npb246ICR7bm9kZX0gKCR7bm9kZS5ydW50aW1lVHlwZX0pJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBkZWZhdWx0U3RhdGVtZW50KGlyLlN0YXRlbWVudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5pbXBsZW1lbnRlZEVycm9yKAogICAgICAgICdVbmhhbmRsZWQgc3RhdGVtZW50OiAke25vZGV9ICgke25vZGUucnVudGltZVR5cGV9KScpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0TnVsbExpdGVyYWwoaXIuTnVsbExpdGVyYWwgbGl0ZXJhbCkgewogICAgcmV0dXJuIGNyZWF0ZU51bGxUeXBlSW5mb3JtYXRpb24oKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBjcmVhdGVOdWxsVHlwZUluZm9ybWF0aW9uKCkgewogICAgcmV0dXJuIF90eXBlcy5udWxsVHlwZTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0QmxvY2soaXIuQmxvY2sgYmxvY2spIHsKICAgIGZvciAoaXIuU3RhdGVtZW50IHN0YXRlbWVudCBpbiBibG9jay5zdGF0ZW1lbnRzKSB7CiAgICAgIHZpc2l0KHN0YXRlbWVudCk7CiAgICAgIGlmIChfc3RhdGUuYWJvcnRzKSBicmVhazsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRFeHByZXNzaW9uU3RhdGVtZW50KGlyLkV4cHJlc3Npb25TdGF0ZW1lbnQgbm9kZSkgewogICAgdmlzaXQobm9kZS5leHByZXNzaW9uKTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRFbXB0eVN0YXRlbWVudChpci5FbXB0eVN0YXRlbWVudCBub2RlKSB7CiAgICAvLyBOb3RoaW5nIHRvIGRvLgogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEFzc2VydFN0YXRlbWVudChpci5Bc3NlcnRTdGF0ZW1lbnQgbm9kZSkgewogICAgLy8gQXZvaWQgcG9sbHV0aW9uIGZyb20gYXNzZXJ0IHN0YXRlbWVudCB1bmxlc3MgZW5hYmxlZC4KICAgIGlmICghX29wdGlvbnMuZW5hYmxlVXNlckFzc2VydGlvbnMpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTaG91bGQgYXNzZXJ0IGJlIHVzZWQgd2l0aCAtLXRydXN0LXR5cGUtYW5ub3RhdGlvbnM/CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBUcmFjayByZWFjaGFibGUgZm9yIGFzc2VydGlvbnMga25vd24gdG8gZmFpbC4KICAgIExvY2FsU3RhdGUgc3RhdGVCZWZvcmUgPSBfc3RhdGU7CiAgICBoYW5kbGVDb25kaXRpb24obm9kZS5jb25kaXRpb24pOwogICAgTG9jYWxTdGF0ZSBhZnRlckNvbmRpdGlvbldoZW5UcnVlID0gX3N0YXRlQWZ0ZXJXaGVuVHJ1ZTsKICAgIExvY2FsU3RhdGUgYWZ0ZXJDb25kaXRpb25XaGVuRmFsc2UgPSBfc3RhdGVBZnRlcldoZW5GYWxzZTsKICAgIF9zdGF0ZSA9IG5ldyBMb2NhbFN0YXRlLmNoaWxkUGF0aChhZnRlckNvbmRpdGlvbldoZW5GYWxzZSk7CiAgICB2aXNpdChub2RlLm1lc3NhZ2UpOwogICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyTWVzc2FnZSA9IF9zdGF0ZTsKICAgIHN0YXRlQWZ0ZXJNZXNzYWdlLnNlZW5SZXR1cm5PclRocm93ID0gdHJ1ZTsKICAgIF9zdGF0ZSA9IHN0YXRlQmVmb3JlLm1lcmdlRGlhbW9uZEZsb3coCiAgICAgICAgX2luZmVycmVyLCBhZnRlckNvbmRpdGlvbldoZW5UcnVlLCBzdGF0ZUFmdGVyTWVzc2FnZSk7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0QnJlYWtTdGF0ZW1lbnQoaXIuQnJlYWtTdGF0ZW1lbnQgbm9kZSkgewogICAgSnVtcFRhcmdldCB0YXJnZXQgPSBfbG9jYWxzTWFwLmdldEp1bXBUYXJnZXRGb3JCcmVhayhub2RlKTsKICAgIF9zdGF0ZS5zZWVuQnJlYWtPckNvbnRpbnVlID0gdHJ1ZTsKICAgIC8vIERvIGEgZGVlcC1jb3B5IG9mIHRoZSBsb2NhbHMsIGJlY2F1c2UgdGhlIGNvZGUgZm9sbG93aW5nIHRoZQogICAgLy8gYnJlYWsgd2lsbCBjaGFuZ2UgdGhlbS4KICAgIGlmIChfbG9jYWxzTWFwLmdlbmVyYXRlQ29udGludWVGb3JCcmVhayhub2RlKSkgewogICAgICBfY29udGludWVzRm9yW3RhcmdldF0uYWRkKG5ldyBMb2NhbFN0YXRlLmRlZXBDb3B5T2YoX3N0YXRlKSk7CiAgICB9IGVsc2UgewogICAgICBfYnJlYWtzRm9yW3RhcmdldF0uYWRkKG5ldyBMb2NhbFN0YXRlLmRlZXBDb3B5T2YoX3N0YXRlKSk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0TGFiZWxlZFN0YXRlbWVudChpci5MYWJlbGVkU3RhdGVtZW50IG5vZGUpIHsKICAgIGlyLlN0YXRlbWVudCBib2R5ID0gbm9kZS5ib2R5OwogICAgaWYgKEp1bXBWaXNpdG9yLmNhbkJlQnJlYWtUYXJnZXQoYm9keSkpIHsKICAgICAgLy8gTG9vcHMgYW5kIHN3aXRjaGVzIGhhbmRsZSB0aGVpciBvd24gbGFiZWxzLgogICAgICB2aXNpdChib2R5KTsKICAgIH0gZWxzZSB7CiAgICAgIEp1bXBUYXJnZXQganVtcFRhcmdldCA9IF9sb2NhbHNNYXAuZ2V0SnVtcFRhcmdldEZvckxhYmVsKG5vZGUpOwogICAgICBfc2V0dXBCcmVha3NBbmRDb250aW51ZXMoanVtcFRhcmdldCk7CiAgICAgIHZpc2l0KGJvZHkpOwogICAgICBfc3RhdGUubWVyZ2VBZnRlckJyZWFrcyhfaW5mZXJyZXIsIF9nZXRCcmVha3MoanVtcFRhcmdldCkpOwogICAgICBfY2xlYXJCcmVha3NBbmRDb250aW51ZXMoanVtcFRhcmdldCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0U3dpdGNoU3RhdGVtZW50KGlyLlN3aXRjaFN0YXRlbWVudCBub2RlKSB7CiAgICB2aXNpdChub2RlLmV4cHJlc3Npb24pOwoKICAgIEp1bXBUYXJnZXQganVtcFRhcmdldCA9IF9sb2NhbHNNYXAuZ2V0SnVtcFRhcmdldEZvclN3aXRjaChub2RlKTsKICAgIF9zZXR1cEJyZWFrc0FuZENvbnRpbnVlcyhqdW1wVGFyZ2V0KTsKCiAgICBMaXN0PEp1bXBUYXJnZXQ+IGNvbnRpbnVlVGFyZ2V0cyA9IDxKdW1wVGFyZ2V0PltdOwogICAgZm9yIChpci5Td2l0Y2hDYXNlIHN3aXRjaENhc2UgaW4gbm9kZS5jYXNlcykgewogICAgICBKdW1wVGFyZ2V0IGNvbnRpbnVlVGFyZ2V0ID0KICAgICAgICAgIF9sb2NhbHNNYXAuZ2V0SnVtcFRhcmdldEZvclN3aXRjaENhc2Uoc3dpdGNoQ2FzZSk7CiAgICAgIGlmIChjb250aW51ZVRhcmdldCAhPSBudWxsKSB7CiAgICAgICAgY29udGludWVUYXJnZXRzLmFkZChjb250aW51ZVRhcmdldCk7CiAgICAgIH0KICAgIH0KICAgIGlmIChjb250aW51ZVRhcmdldHMuaXNOb3RFbXB0eSkgewogICAgICBjb250aW51ZVRhcmdldHMuZm9yRWFjaChfc2V0dXBCcmVha3NBbmRDb250aW51ZXMpOwoKICAgICAgLy8gSWYgdGhlIHN3aXRjaCBzdGF0ZW1lbnQgaGFzIGEgY29udGludWUsIHdlIGNvbnNlcnZhdGl2ZWx5CiAgICAgIC8vIHZpc2l0IGFsbCBjYXNlcyBhbmQgdXBkYXRlIFtsb2NhbHNdIHVudGlsIHdlIGhhdmUgcmVhY2hlZCBhCiAgICAgIC8vIGZpeGVkIHBvaW50LgogICAgICBib29sIGNoYW5nZWQ7CiAgICAgIF9zdGF0ZS5zdGFydExvb3AoX2luZmVycmVyLCBub2RlKTsKICAgICAgZG8gewogICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKICAgICAgICBmb3IgKGlyLlN3aXRjaENhc2Ugc3dpdGNoQ2FzZSBpbiBub2RlLmNhc2VzKSB7CiAgICAgICAgICBMb2NhbFN0YXRlIHN0YXRlQmVmb3JlQ2FzZSA9IF9zdGF0ZTsKICAgICAgICAgIF9zdGF0ZSA9IG5ldyBMb2NhbFN0YXRlLmNoaWxkUGF0aChzdGF0ZUJlZm9yZUNhc2UpOwogICAgICAgICAgdmlzaXQoc3dpdGNoQ2FzZSk7CiAgICAgICAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJDYXNlID0gX3N0YXRlOwogICAgICAgICAgY2hhbmdlZCA9CiAgICAgICAgICAgICAgc3RhdGVCZWZvcmVDYXNlLm1lcmdlQWxsKF9pbmZlcnJlciwgW3N0YXRlQWZ0ZXJDYXNlXSkgfHwgY2hhbmdlZDsKICAgICAgICAgIF9zdGF0ZSA9IHN0YXRlQmVmb3JlQ2FzZTsKICAgICAgICB9CiAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOwogICAgICBfc3RhdGUuZW5kTG9vcChfaW5mZXJyZXIsIG5vZGUpOwoKICAgICAgY29udGludWVUYXJnZXRzLmZvckVhY2goX2NsZWFyQnJlYWtzQW5kQ29udGludWVzKTsKICAgIH0gZWxzZSB7CiAgICAgIExvY2FsU3RhdGUgc3RhdGVCZWZvcmVDYXNlID0gX3N0YXRlOwogICAgICBMaXN0PExvY2FsU3RhdGU+IHN0YXRlc1RvTWVyZ2UgPSA8TG9jYWxTdGF0ZT5bXTsKICAgICAgYm9vbCBoYXNEZWZhdWx0Q2FzZSA9IGZhbHNlOwoKICAgICAgZm9yIChpci5Td2l0Y2hDYXNlIHN3aXRjaENhc2UgaW4gbm9kZS5jYXNlcykgewogICAgICAgIGlmIChzd2l0Y2hDYXNlLmlzRGVmYXVsdCkgewogICAgICAgICAgaGFzRGVmYXVsdENhc2UgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBfc3RhdGUgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoc3RhdGVCZWZvcmVDYXNlKTsKICAgICAgICB2aXNpdChzd2l0Y2hDYXNlKTsKICAgICAgICBzdGF0ZXNUb01lcmdlLmFkZChfc3RhdGUpOwogICAgICB9CiAgICAgIHN0YXRlQmVmb3JlQ2FzZS5tZXJnZUFmdGVyQnJlYWtzKF9pbmZlcnJlciwgc3RhdGVzVG9NZXJnZSwKICAgICAgICAgIGtlZXBPd25Mb2NhbHM6ICFoYXNEZWZhdWx0Q2FzZSk7CiAgICAgIF9zdGF0ZSA9IHN0YXRlQmVmb3JlQ2FzZTsKICAgIH0KICAgIF9jbGVhckJyZWFrc0FuZENvbnRpbnVlcyhqdW1wVGFyZ2V0KTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRTd2l0Y2hDYXNlKGlyLlN3aXRjaENhc2Ugbm9kZSkgewogICAgdmlzaXQobm9kZS5ib2R5KTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDb250aW51ZVN3aXRjaFN0YXRlbWVudChpci5Db250aW51ZVN3aXRjaFN0YXRlbWVudCBub2RlKSB7CiAgICBKdW1wVGFyZ2V0IHRhcmdldCA9IF9sb2NhbHNNYXAuZ2V0SnVtcFRhcmdldEZvckNvbnRpbnVlU3dpdGNoKG5vZGUpOwogICAgX3N0YXRlLnNlZW5CcmVha09yQ29udGludWUgPSB0cnVlOwogICAgLy8gRG8gYSBkZWVwLWNvcHkgb2YgdGhlIGxvY2FscywgYmVjYXVzZSB0aGUgY29kZSBmb2xsb3dpbmcgdGhlCiAgICAvLyBicmVhayB3aWxsIGNoYW5nZSB0aGVtLgogICAgX2NvbnRpbnVlc0Zvclt0YXJnZXRdLmFkZChuZXcgTG9jYWxTdGF0ZS5kZWVwQ29weU9mKF9zdGF0ZSkpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRMaXN0TGl0ZXJhbChpci5MaXN0TGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gY3JlYXRlTGlzdFR5cGVJbmZvcm1hdGlvbigKICAgICAgICBub2RlLCBub2RlLmV4cHJlc3Npb25zLm1hcCgoZSkgPT4gdmlzaXQoZSkpLAogICAgICAgIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gY3JlYXRlTGlzdFR5cGVJbmZvcm1hdGlvbigKICAgICAgaXIuVHJlZU5vZGUgbm9kZSwgSXRlcmFibGU8VHlwZUluZm9ybWF0aW9uPiBlbGVtZW50VHlwZXMsCiAgICAgIHtib29sIGlzQ29uc3R9KSB7CiAgICAvLyBXZSBvbmx5IHNldCB0aGUgdHlwZSBvbmNlLiBXZSBkb24ndCBuZWVkIHRvIHJlLXZpc2l0IHRoZSBjaGlsZHJlbgogICAgLy8gd2hlbiByZS1hbmFseXppbmcgdGhlIG5vZGUuCiAgICByZXR1cm4gX2luZmVycmVyLmNvbmNyZXRlVHlwZXMucHV0SWZBYnNlbnQobm9kZSwgKCkgewogICAgICBUeXBlSW5mb3JtYXRpb24gZWxlbWVudFR5cGU7CiAgICAgIGludCBsZW5ndGggPSAwOwogICAgICBmb3IgKFR5cGVJbmZvcm1hdGlvbiB0eXBlIGluIGVsZW1lbnRUeXBlcykgewogICAgICAgIGVsZW1lbnRUeXBlID0gZWxlbWVudFR5cGUgPT0gbnVsbAogICAgICAgICAgICA/IF90eXBlcy5hbGxvY2F0ZVBoaShudWxsLCBudWxsLCB0eXBlLCBpc1RyeTogZmFsc2UpCiAgICAgICAgICAgIDogX3R5cGVzLmFkZFBoaUlucHV0KG51bGwsIGVsZW1lbnRUeXBlLCB0eXBlKTsKICAgICAgICBsZW5ndGgrKzsKICAgICAgfQogICAgICBlbGVtZW50VHlwZSA9IGVsZW1lbnRUeXBlID09IG51bGwKICAgICAgICAgID8gX3R5cGVzLm5vbk51bGxFbXB0eSgpCiAgICAgICAgICA6IF90eXBlcy5zaW1wbGlmeVBoaShudWxsLCBudWxsLCBlbGVtZW50VHlwZSk7CiAgICAgIFR5cGVJbmZvcm1hdGlvbiBjb250YWluZXJUeXBlID0KICAgICAgICAgIGlzQ29uc3QgPyBfdHlwZXMuY29uc3RMaXN0VHlwZSA6IF90eXBlcy5ncm93YWJsZUxpc3RUeXBlOwogICAgICByZXR1cm4gX3R5cGVzLmFsbG9jYXRlTGlzdCgKICAgICAgICAgIGNvbnRhaW5lclR5cGUsIG5vZGUsIF9hbmFseXplZE1lbWJlciwgZWxlbWVudFR5cGUsIGxlbmd0aCk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdFNldExpdGVyYWwoaXIuU2V0TGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gY3JlYXRlU2V0VHlwZUluZm9ybWF0aW9uKG5vZGUsIG5vZGUuZXhwcmVzc2lvbnMubWFwKChlKSA9PiB2aXNpdChlKSksCiAgICAgICAgaXNDb25zdDogbm9kZS5pc0NvbnN0KTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBjcmVhdGVTZXRUeXBlSW5mb3JtYXRpb24oCiAgICAgIGlyLlRyZWVOb2RlIG5vZGUsIEl0ZXJhYmxlPFR5cGVJbmZvcm1hdGlvbj4gZWxlbWVudFR5cGVzLAogICAgICB7Ym9vbCBpc0NvbnN0fSkgewogICAgcmV0dXJuIF9pbmZlcnJlci5jb25jcmV0ZVR5cGVzLnB1dElmQWJzZW50KG5vZGUsICgpIHsKICAgICAgVHlwZUluZm9ybWF0aW9uIGVsZW1lbnRUeXBlOwogICAgICBmb3IgKFR5cGVJbmZvcm1hdGlvbiB0eXBlIGluIGVsZW1lbnRUeXBlcykgewogICAgICAgIGVsZW1lbnRUeXBlID0gZWxlbWVudFR5cGUgPT0gbnVsbAogICAgICAgICAgICA/IF90eXBlcy5hbGxvY2F0ZVBoaShudWxsLCBudWxsLCB0eXBlLCBpc1RyeTogZmFsc2UpCiAgICAgICAgICAgIDogX3R5cGVzLmFkZFBoaUlucHV0KG51bGwsIGVsZW1lbnRUeXBlLCB0eXBlKTsKICAgICAgfQogICAgICBlbGVtZW50VHlwZSA9IGVsZW1lbnRUeXBlID09IG51bGwKICAgICAgICAgID8gX3R5cGVzLm5vbk51bGxFbXB0eSgpCiAgICAgICAgICA6IF90eXBlcy5zaW1wbGlmeVBoaShudWxsLCBudWxsLCBlbGVtZW50VHlwZSk7CiAgICAgIFR5cGVJbmZvcm1hdGlvbiBjb250YWluZXJUeXBlID0KICAgICAgICAgIGlzQ29uc3QgPyBfdHlwZXMuY29uc3RTZXRUeXBlIDogX3R5cGVzLnNldFR5cGU7CiAgICAgIHJldHVybiBfdHlwZXMuYWxsb2NhdGVTZXQoCiAgICAgICAgICBjb250YWluZXJUeXBlLCBub2RlLCBfYW5hbHl6ZWRNZW1iZXIsIGVsZW1lbnRUeXBlKTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0TWFwTGl0ZXJhbChpci5NYXBMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBjcmVhdGVNYXBUeXBlSW5mb3JtYXRpb24oCiAgICAgICAgbm9kZSwgbm9kZS5lbnRyaWVzLm1hcCgoZSkgPT4gbmV3IFBhaXIodmlzaXQoZS5rZXkpLCB2aXNpdChlLnZhbHVlKSkpLAogICAgICAgIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gY3JlYXRlTWFwVHlwZUluZm9ybWF0aW9uKGlyLlRyZWVOb2RlIG5vZGUsCiAgICAgIEl0ZXJhYmxlPFBhaXI8VHlwZUluZm9ybWF0aW9uLCBUeXBlSW5mb3JtYXRpb24+PiBlbnRyeVR5cGVzLAogICAgICB7Ym9vbCBpc0NvbnN0fSkgewogICAgcmV0dXJuIF9pbmZlcnJlci5jb25jcmV0ZVR5cGVzLnB1dElmQWJzZW50KG5vZGUsICgpIHsKICAgICAgTGlzdCBrZXlUeXBlcyA9IDxUeXBlSW5mb3JtYXRpb24+W107CiAgICAgIExpc3QgdmFsdWVUeXBlcyA9IDxUeXBlSW5mb3JtYXRpb24+W107CgogICAgICBmb3IgKFBhaXI8VHlwZUluZm9ybWF0aW9uLCBUeXBlSW5mb3JtYXRpb24+IGVudHJ5VHlwZSBpbiBlbnRyeVR5cGVzKSB7CiAgICAgICAga2V5VHlwZXMuYWRkKGVudHJ5VHlwZS5hKTsKICAgICAgICB2YWx1ZVR5cGVzLmFkZChlbnRyeVR5cGUuYik7CiAgICAgIH0KCiAgICAgIFR5cGVJbmZvcm1hdGlvbiB0eXBlID0gaXNDb25zdCA/IF90eXBlcy5jb25zdE1hcFR5cGUgOiBfdHlwZXMubWFwVHlwZTsKICAgICAgcmV0dXJuIF90eXBlcy5hbGxvY2F0ZU1hcCgKICAgICAgICAgIHR5cGUsIG5vZGUsIF9hbmFseXplZE1lbWJlciwga2V5VHlwZXMsIHZhbHVlVHlwZXMpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRSZXR1cm5TdGF0ZW1lbnQoaXIuUmV0dXJuU3RhdGVtZW50IG5vZGUpIHsKICAgIGlyLk5vZGUgZXhwcmVzc2lvbiA9IG5vZGUuZXhwcmVzc2lvbjsKICAgIHJlY29yZFJldHVyblR5cGUoZXhwcmVzc2lvbiA9PSBudWxsID8gX3R5cGVzLm51bGxUeXBlIDogdmlzaXQoZXhwcmVzc2lvbikpOwogICAgX3N0YXRlLnNlZW5SZXR1cm5PclRocm93ID0gdHJ1ZTsKICAgIF9zdGF0ZS5tYXJrSW5pdGlhbGl6YXRpb25Bc0luZGVmaW5pdGUoKTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0Qm9vbExpdGVyYWwoaXIuQm9vbExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIGNyZWF0ZUJvb2xUeXBlSW5mb3JtYXRpb24obm9kZS52YWx1ZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gY3JlYXRlQm9vbFR5cGVJbmZvcm1hdGlvbihib29sIHZhbHVlKSB7CiAgICByZXR1cm4gX3R5cGVzLmJvb2xMaXRlcmFsVHlwZSh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRJbnRMaXRlcmFsKGlyLkludExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIGNyZWF0ZUludFR5cGVJbmZvcm1hdGlvbihub2RlLnZhbHVlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBjcmVhdGVJbnRUeXBlSW5mb3JtYXRpb24oaW50IHZhbHVlKSB7CiAgICAvLyBUaGUgSmF2YVNjcmlwdCBiYWNrZW5kIG1heSB0dXJuIHRoaXMgbGl0ZXJhbCBpbnRvIGEgZG91YmxlIGF0CiAgICAvLyBydW50aW1lLgogICAgcmV0dXJuIF90eXBlcy5nZXRDb25jcmV0ZVR5cGVGb3IoX2Nsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAuY29tcHV0ZUFic3RyYWN0VmFsdWVGb3JDb25zdGFudCgKICAgICAgICAgICAgY29uc3RhbnRfc3lzdGVtLmNyZWF0ZUludEZyb21JbnQodmFsdWUpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXREb3VibGVMaXRlcmFsKGlyLkRvdWJsZUxpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIGNyZWF0ZURvdWJsZVR5cGVJbmZvcm1hdGlvbihub2RlLnZhbHVlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBjcmVhdGVEb3VibGVUeXBlSW5mb3JtYXRpb24oZG91YmxlIHZhbHVlKSB7CiAgICAvLyBUaGUgSmF2YVNjcmlwdCBiYWNrZW5kIG1heSB0dXJuIHRoaXMgbGl0ZXJhbCBpbnRvIGEgZG91YmxlIGF0CiAgICAvLyBydW50aW1lLgogICAgcmV0dXJuIF90eXBlcy5nZXRDb25jcmV0ZVR5cGVGb3IoX2Nsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAuY29tcHV0ZUFic3RyYWN0VmFsdWVGb3JDb25zdGFudChjb25zdGFudF9zeXN0ZW0uY3JlYXRlRG91YmxlKHZhbHVlKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0U3RyaW5nTGl0ZXJhbChpci5TdHJpbmdMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBjcmVhdGVTdHJpbmdUeXBlSW5mb3JtYXRpb24obm9kZS52YWx1ZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gY3JlYXRlU3RyaW5nVHlwZUluZm9ybWF0aW9uKFN0cmluZyB2YWx1ZSkgewogICAgcmV0dXJuIF90eXBlcy5zdHJpbmdMaXRlcmFsVHlwZSh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKGlyLlN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSkgewogICAgLy8gSW50ZXJwb2xhdGlvbiBjb3VsZCBoYXZlIGFueSBlZmZlY3RzIHNpbmNlIGl0IGNvdWxkIGNhbGwgYW55IHRvU3RyaW5nKCkKICAgIC8vIG1ldGhvZC4KICAgIC8vIFRPRE8oc3JhKTogVGhpcyBjb3VsZCBiZSBtb2RlbGxlZCBieSBhIGNhbGwgdG8gdG9TdHJpbmcoKSBidXQgd2l0aCBhCiAgICAvLyBndWFyYW50ZWVkIFN0cmluZyByZXR1cm4gdHlwZS4gIEludGVycG9sYXRpb24gb2Yga25vd24gdHlwZXMgd291bGQgZ2V0CiAgICAvLyBzcGVjaWFsaXplZCBlZmZlY3RzLiAgVGhpcyB3b3VsZCBub3QgY3VycmVudGx5IGJlIGVmZmVjdGl2ZSBzaW5jZSB0aGUgSlMKICAgIC8vIGNvZGUgaW4gdGhlIHRvU3RyaW5nIG1ldGhvZHMgZm9yIGludGVyY2VwdGVkIHByaW1pdGl2ZSB0eXBlcyBpcyBhc3N1bWVkCiAgICAvLyB0byBoYXZlIGFsbCBlZmZlY3RzLiAgRWZmZWN0IGFubm90YXRpb25zIG9uIEpTIGNvZGUgd291bGQgYmUgbmVlZGVkIHRvCiAgICAvLyBnZXQgdGhlIGJlbmVmaXQuCiAgICBfc2lkZUVmZmVjdHNCdWlsZGVyLnNldEFsbFNpZGVFZmZlY3RzKCk7CgogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogICAgcmV0dXJuIF90eXBlcy5zdHJpbmdUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0U3ltYm9sTGl0ZXJhbChpci5TeW1ib2xMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBjcmVhdGVTeW1ib2xMaXRlcmFsVHlwZUluZm9ybWF0aW9uKCk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gY3JlYXRlU3ltYm9sTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbigpIHsKICAgIHJldHVybiBfdHlwZXMKICAgICAgICAubm9uTnVsbFN1YnR5cGUoX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLnN5bWJvbEltcGxlbWVudGF0aW9uQ2xhc3MpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0VHlwZUxpdGVyYWwoaXIuVHlwZUxpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIGNyZWF0ZVR5cGVMaXRlcmFsSW5mb3JtYXRpb24oKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBjcmVhdGVUeXBlTGl0ZXJhbEluZm9ybWF0aW9uKCkgewogICAgcmV0dXJuIF90eXBlcy50eXBlVHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24oaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICBhc3NlcnQoCiAgICAgICAgbm9kZS5wYXJlbnQgaXMhIGlyLkZ1bmN0aW9uTm9kZSwgIlVuZXhwZWN0ZWQgcGFyYW1ldGVyIGRlY2xhcmF0aW9uLiIpOwogICAgTG9jYWwgbG9jYWwgPSBfbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUobm9kZSk7CiAgICBEYXJ0VHlwZSB0eXBlID0gX2xvY2Fsc01hcC5nZXRMb2NhbFR5cGUoX2VsZW1lbnRNYXAsIGxvY2FsKTsKICAgIGlmIChub2RlLmluaXRpYWxpemVyID09IG51bGwpIHsKICAgICAgX3N0YXRlLnVwZGF0ZUxvY2FsKAogICAgICAgICAgX2luZmVycmVyLCBfY2FwdHVyZWRBbmRCb3hlZCwgbG9jYWwsIF90eXBlcy5udWxsVHlwZSwgbm9kZSwgdHlwZSk7CiAgICB9IGVsc2UgewogICAgICBfc3RhdGUudXBkYXRlTG9jYWwoX2luZmVycmVyLCBfY2FwdHVyZWRBbmRCb3hlZCwgbG9jYWwsCiAgICAgICAgICB2aXNpdChub2RlLmluaXRpYWxpemVyKSwgbm9kZSwgdHlwZSk7CiAgICB9CiAgICBpZiAobm9kZS5pbml0aWFsaXplciBpcyBpci5UaGlzRXhwcmVzc2lvbikgewogICAgICBfc3RhdGUubWFya1RoaXNBc0V4cG9zZWQoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0VmFyaWFibGVHZXQoaXIuVmFyaWFibGVHZXQgbm9kZSkgewogICAgTG9jYWwgbG9jYWwgPSBfbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUobm9kZS52YXJpYWJsZSk7CiAgICBUeXBlSW5mb3JtYXRpb24gdHlwZSA9CiAgICAgICAgX3N0YXRlLnJlYWRMb2NhbChfaW5mZXJyZXIsIF9jYXB0dXJlZEFuZEJveGVkLCBsb2NhbCk7CiAgICBhc3NlcnQodHlwZSAhPSBudWxsLCAiTWlzc2luZyB0eXBlIGluZm9ybWF0aW9uIGZvciAkbG9jYWwuIik7CiAgICByZXR1cm4gdHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdFZhcmlhYmxlU2V0KGlyLlZhcmlhYmxlU2V0IG5vZGUpIHsKICAgIFR5cGVJbmZvcm1hdGlvbiByaHNUeXBlID0gdmlzaXQobm9kZS52YWx1ZSk7CiAgICBpZiAobm9kZS52YWx1ZSBpcyBpci5UaGlzRXhwcmVzc2lvbikgewogICAgICBfc3RhdGUubWFya1RoaXNBc0V4cG9zZWQoKTsKICAgIH0KICAgIExvY2FsIGxvY2FsID0gX2xvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKG5vZGUudmFyaWFibGUpOwogICAgRGFydFR5cGUgdHlwZSA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxUeXBlKF9lbGVtZW50TWFwLCBsb2NhbCk7CiAgICBfc3RhdGUudXBkYXRlTG9jYWwoCiAgICAgICAgX2luZmVycmVyLCBfY2FwdHVyZWRBbmRCb3hlZCwgbG9jYWwsIHJoc1R5cGUsIG5vZGUsIHR5cGUpOwogICAgcmV0dXJuIHJoc1R5cGU7CiAgfQoKICBBcmd1bWVudHNUeXBlcyBhbmFseXplQXJndW1lbnRzKGlyLkFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIExpc3Q8VHlwZUluZm9ybWF0aW9uPiBwb3NpdGlvbmFsID0gPFR5cGVJbmZvcm1hdGlvbj5bXTsKICAgIE1hcDxTdHJpbmcsIFR5cGVJbmZvcm1hdGlvbj4gbmFtZWQ7CiAgICBmb3IgKGlyLkV4cHJlc3Npb24gYXJndW1lbnQgaW4gYXJndW1lbnRzLnBvc2l0aW9uYWwpIHsKICAgICAgLy8gVE9ETyhuZ2VvZmZyYXkpOiBXZSBjb3VsZCBkbyBiZXR0ZXIgaGVyZSBpZiB3ZSBrbmV3IHdoYXQgd2UKICAgICAgLy8gYXJlIGNhbGxpbmcgZG9lcyBub3QgZXhwb3NlIHRoaXMuCiAgICAgIGlmIChhcmd1bWVudCBpcyBpci5UaGlzRXhwcmVzc2lvbikgewogICAgICAgIF9zdGF0ZS5tYXJrVGhpc0FzRXhwb3NlZCgpOwogICAgICB9CiAgICAgIHBvc2l0aW9uYWwuYWRkKHZpc2l0KGFyZ3VtZW50KSk7CiAgICB9CiAgICBmb3IgKGlyLk5hbWVkRXhwcmVzc2lvbiBhcmd1bWVudCBpbiBhcmd1bWVudHMubmFtZWQpIHsKICAgICAgbmFtZWQgPz89IDxTdHJpbmcsIFR5cGVJbmZvcm1hdGlvbj57fTsKICAgICAgaXIuRXhwcmVzc2lvbiB2YWx1ZSA9IGFyZ3VtZW50LnZhbHVlOwogICAgICAvLyBUT0RPKG5nZW9mZnJheSk6IFdlIGNvdWxkIGRvIGJldHRlciBoZXJlIGlmIHdlIGtuZXcgd2hhdCB3ZQogICAgICAvLyBhcmUgY2FsbGluZyBkb2VzIG5vdCBleHBvc2UgdGhpcy4KICAgICAgaWYgKHZhbHVlIGlzIGlyLlRoaXNFeHByZXNzaW9uKSB7CiAgICAgICAgX3N0YXRlLm1hcmtUaGlzQXNFeHBvc2VkKCk7CiAgICAgIH0KICAgICAgbmFtZWRbYXJndW1lbnQubmFtZV0gPSB2aXNpdCh2YWx1ZSk7CiAgICB9CgogICAgcmV0dXJuIG5ldyBBcmd1bWVudHNUeXBlcyhwb3NpdGlvbmFsLCBuYW1lZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRNZXRob2RJbnZvY2F0aW9uKGlyLk1ldGhvZEludm9jYXRpb24gbm9kZSkgewogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBfZWxlbWVudE1hcC5nZXRTZWxlY3Rvcihub2RlKTsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IF9tZW1iZXJEYXRhLnR5cGVPZlNlbmQobm9kZSk7CgogICAgaXIuVHJlZU5vZGUgcmVjZWl2ZXIgPSBub2RlLnJlY2VpdmVyOwogICAgaWYgKHJlY2VpdmVyIGlzIGlyLlZhcmlhYmxlR2V0ICYmCiAgICAgICAgcmVjZWl2ZXIudmFyaWFibGUucGFyZW50IGlzIGlyLkZ1bmN0aW9uRGVjbGFyYXRpb24pIHsKICAgICAgLy8gVGhpcyBpcyBhbiBpbnZvY2F0aW9uIG9mIGEgbmFtZWQgbG9jYWwgZnVuY3Rpb24uCiAgICAgIEFyZ3VtZW50c1R5cGVzIGFyZ3VtZW50cyA9IGFuYWx5emVBcmd1bWVudHMobm9kZS5hcmd1bWVudHMpOwogICAgICBDbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvIGluZm8gPQogICAgICAgICAgX2Nsb3N1cmVEYXRhTG9va3VwLmdldENsb3N1cmVJbmZvKHJlY2VpdmVyLnZhcmlhYmxlLnBhcmVudCk7CiAgICAgIGlmIChpc0luY29tcGF0aWJsZUludm9rZShpbmZvLmNhbGxNZXRob2QsIGFyZ3VtZW50cykpIHsKICAgICAgICByZXR1cm4gX3R5cGVzLmR5bmFtaWNUeXBlOwogICAgICB9CgogICAgICBUeXBlSW5mb3JtYXRpb24gdHlwZSA9CiAgICAgICAgICBoYW5kbGVTdGF0aWNJbnZva2Uobm9kZSwgc2VsZWN0b3IsIG1hc2ssIGluZm8uY2FsbE1ldGhvZCwgYXJndW1lbnRzKTsKICAgICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9CiAgICAgICAgICBfZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlKGluZm8uY2FsbE1ldGhvZCk7CiAgICAgIGlmIChmdW5jdGlvblR5cGUucmV0dXJuVHlwZS5jb250YWluc0ZyZWVUeXBlVmFyaWFibGVzKSB7CiAgICAgICAgLy8gVGhlIHJldHVybiB0eXBlIHZhcmllcyB3aXRoIHRoZSBjYWxsIHNpdGUgc28gd2UgbmFycm93IHRoZSBzdGF0aWMKICAgICAgICAvLyByZXR1cm4gdHlwZS4KICAgICAgICB0eXBlID0gX3R5cGVzLm5hcnJvd1R5cGUodHlwZSwgX2dldFN0YXRpY1R5cGUobm9kZSkpOwogICAgICB9CiAgICAgIHJldHVybiB0eXBlOwogICAgfQoKICAgIFR5cGVJbmZvcm1hdGlvbiByZWNlaXZlclR5cGUgPSB2aXNpdChyZWNlaXZlcik7CiAgICBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHMgPSBhbmFseXplQXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKTsKICAgIGlmIChzZWxlY3Rvci5uYW1lID09ICc9PScpIHsKICAgICAgaWYgKF90eXBlcy5pc051bGwocmVjZWl2ZXJUeXBlKSkgewogICAgICAgIC8vIG51bGwgPT0gbwogICAgICAgIF9wb3RlbnRpYWxseUFkZE51bGxDaGVjayhub2RlLCBub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmZpcnN0KTsKICAgICAgICByZXR1cm4gX3R5cGVzLmJvb2xUeXBlOwogICAgICB9IGVsc2UgaWYgKF90eXBlcy5pc051bGwoYXJndW1lbnRzLnBvc2l0aW9uYWxbMF0pKSB7CiAgICAgICAgLy8gbyA9PSBudWxsCiAgICAgICAgX3BvdGVudGlhbGx5QWRkTnVsbENoZWNrKG5vZGUsIG5vZGUucmVjZWl2ZXIpOwogICAgICAgIHJldHVybiBfdHlwZXMuYm9vbFR5cGU7CiAgICAgIH0KICAgIH0KICAgIGlmIChub2RlLnJlY2VpdmVyIGlzIGlyLlRoaXNFeHByZXNzaW9uKSB7CiAgICAgIF9jaGVja0lmRXhwb3Nlc1RoaXMoCiAgICAgICAgICBzZWxlY3RvciwgX3R5cGVzLm5ld1R5cGVkU2VsZWN0b3IocmVjZWl2ZXJUeXBlLCBtYXNrKSk7CiAgICB9CiAgICBUeXBlSW5mb3JtYXRpb24gdHlwZSA9IGhhbmRsZUR5bmFtaWNJbnZva2UoCiAgICAgICAgQ2FsbFR5cGUuYWNjZXNzLCBub2RlLCBzZWxlY3RvciwgbWFzaywgcmVjZWl2ZXJUeXBlLCBhcmd1bWVudHMpOwogICAgaXIuTWVtYmVyIGludGVyZmFjZVRhcmdldCA9IG5vZGUuaW50ZXJmYWNlVGFyZ2V0OwogICAgaWYgKGludGVyZmFjZVRhcmdldCAhPSBudWxsKSB7CiAgICAgIGlmIChpbnRlcmZhY2VUYXJnZXQgaXMgaXIuUHJvY2VkdXJlICYmCiAgICAgICAgICAoaW50ZXJmYWNlVGFyZ2V0LmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5NZXRob2QgfHwKICAgICAgICAgICAgICBpbnRlcmZhY2VUYXJnZXQua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLk9wZXJhdG9yKSkgewogICAgICAgIC8vIFB1bGwgdGhlIHR5cGUgZnJvbSBrZXJuZWwgKGluc3RlYWQgb2YgZnJvbSB0aGUgSi1tb2RlbCkgYmVjYXVzZSB0aGUKICAgICAgICAvLyBpbnRlcmZhY2UgdGFyZ2V0IG1pZ2h0IGJlIGFic3RyYWN0IGFuZCB0aGVyZWZvcmUgbm90IHBhcnQgb2YgdGhlCiAgICAgICAgLy8gSi1tb2RlbC4KICAgICAgICBpci5EYXJ0VHlwZSByZXR1cm5UeXBlID0gaW50ZXJmYWNlVGFyZ2V0LmZ1bmN0aW9uLnJldHVyblR5cGU7CiAgICAgICAgLy8gVGhlIHJldHVybiB0eXBlIHZhcmllcyB3aXRoIHRoZSBjYWxsIHNpdGUgc28gd2UgbmFycm93IHRoZSBzdGF0aWMKICAgICAgICAvLyByZXR1cm4gdHlwZS4KICAgICAgICBpZiAoY29udGFpbnNGcmVlVmFyaWFibGVzKHJldHVyblR5cGUpKSB7CiAgICAgICAgICB0eXBlID0gX3R5cGVzLm5hcnJvd1R5cGUodHlwZSwgX2dldFN0YXRpY1R5cGUobm9kZSkpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBUaGUgcmV0dXJuIHR5cGUgaXMgdGhyb3duIGF3YXkgd2hlbiB1c2luZyBbVHlwZU1hc2tdczsgbmFycm93IHRvIHRoZQogICAgICAgIC8vIHN0YXRpYyByZXR1cm4gdHlwZS4KICAgICAgICB0eXBlID0gX3R5cGVzLm5hcnJvd1R5cGUodHlwZSwgX2dldFN0YXRpY1R5cGUobm9kZSkpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyBXZSBkb24ndCBoYXZlIGEga25vd24gdGFyZ2V0IGJ1dCB0aGUgc3RhdGljIHR5cGUgaG9sZCBzb21lIGluZm9ybWF0aW9uCiAgICAgIC8vIGlmIGl0IGlzIGEgZnVuY3Rpb24gdHlwZS4KICAgICAgdHlwZSA9IF90eXBlcy5uYXJyb3dUeXBlKHR5cGUsIF9nZXRTdGF0aWNUeXBlKG5vZGUpKTsKICAgIH0KICAgIHJldHVybiB0eXBlOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIF9oYW5kbGVEeW5hbWljKAogICAgICBDYWxsVHlwZSBjYWxsVHlwZSwKICAgICAgaXIuTm9kZSBub2RlLAogICAgICBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrLAogICAgICBUeXBlSW5mb3JtYXRpb24gcmVjZWl2ZXJUeXBlLAogICAgICBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHMpIHsKICAgIGFzc2VydChyZWNlaXZlclR5cGUgIT0gbnVsbCk7CiAgICBpZiAoX3R5cGVzLnNlbGVjdG9yTmVlZHNVcGRhdGUocmVjZWl2ZXJUeXBlLCBtYXNrKSkgewogICAgICBtYXNrID0gcmVjZWl2ZXJUeXBlID09IF90eXBlcy5keW5hbWljVHlwZQogICAgICAgICAgPyBudWxsCiAgICAgICAgICA6IF90eXBlcy5uZXdUeXBlZFNlbGVjdG9yKHJlY2VpdmVyVHlwZSwgbWFzayk7CiAgICAgIF9pbmZlcnJlci51cGRhdGVTZWxlY3RvckluTWVtYmVyKAogICAgICAgICAgX2FuYWx5emVkTWVtYmVyLCBjYWxsVHlwZSwgbm9kZSwgc2VsZWN0b3IsIG1hc2spOwogICAgfQoKICAgIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGU7CiAgICBpZiAobm9kZSBpcyBpci5NZXRob2RJbnZvY2F0aW9uICYmIG5vZGUucmVjZWl2ZXIgaXMgaXIuVmFyaWFibGVHZXQpIHsKICAgICAgaXIuVmFyaWFibGVHZXQgZ2V0ID0gbm9kZS5yZWNlaXZlcjsKICAgICAgdmFyaWFibGUgPSBnZXQudmFyaWFibGU7CiAgICB9IGVsc2UgaWYgKG5vZGUgaXMgaXIuUHJvcGVydHlHZXQgJiYgbm9kZS5yZWNlaXZlciBpcyBpci5WYXJpYWJsZUdldCkgewogICAgICBpci5WYXJpYWJsZUdldCBnZXQgPSBub2RlLnJlY2VpdmVyOwogICAgICB2YXJpYWJsZSA9IGdldC52YXJpYWJsZTsKICAgIH0gZWxzZSBpZiAobm9kZSBpcyBpci5Qcm9wZXJ0eVNldCAmJiBub2RlLnJlY2VpdmVyIGlzIGlyLlZhcmlhYmxlR2V0KSB7CiAgICAgIGlyLlZhcmlhYmxlR2V0IGdldCA9IG5vZGUucmVjZWl2ZXI7CiAgICAgIHZhcmlhYmxlID0gZ2V0LnZhcmlhYmxlOwogICAgfQoKICAgIGlmICh2YXJpYWJsZSAhPSBudWxsKSB7CiAgICAgIExvY2FsIGxvY2FsID0gX2xvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKHZhcmlhYmxlKTsKICAgICAgaWYgKCFfY2FwdHVyZWRWYXJpYWJsZXMuY29udGFpbnMobG9jYWwpKSB7CiAgICAgICAgRGFydFR5cGUgdHlwZSA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxUeXBlKF9lbGVtZW50TWFwLCBsb2NhbCk7CiAgICAgICAgX3N0YXRlLnVwZGF0ZUxvY2FsKAogICAgICAgICAgICBfaW5mZXJyZXIsIF9jYXB0dXJlZEFuZEJveGVkLCBsb2NhbCwgcmVjZWl2ZXJUeXBlLCBub2RlLCB0eXBlLAogICAgICAgICAgICBpc051bGxhYmxlOiBzZWxlY3Rvci5hcHBsaWVzVG9OdWxsV2l0aG91dFRocm93KCkpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIF9pbmZlcnJlci5yZWdpc3RlckNhbGxlZFNlbGVjdG9yKGNhbGxUeXBlLCBub2RlLCBzZWxlY3RvciwgbWFzaywKICAgICAgICByZWNlaXZlclR5cGUsIF9hbmFseXplZE1lbWJlciwgYXJndW1lbnRzLCBfc2lkZUVmZmVjdHNCdWlsZGVyLAogICAgICAgIGluTG9vcDogaW5Mb29wLCBpc0NvbmRpdGlvbmFsOiBmYWxzZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gaGFuZGxlRHluYW1pY0dldChpci5Ob2RlIG5vZGUsIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIG1hc2ssIFR5cGVJbmZvcm1hdGlvbiByZWNlaXZlclR5cGUpIHsKICAgIHJldHVybiBfaGFuZGxlRHluYW1pYygKICAgICAgICBDYWxsVHlwZS5hY2Nlc3MsIG5vZGUsIHNlbGVjdG9yLCBtYXNrLCByZWNlaXZlclR5cGUsIG51bGwpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGhhbmRsZUR5bmFtaWNTZXQoCiAgICAgIGlyLk5vZGUgbm9kZSwKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgbWFzaywKICAgICAgVHlwZUluZm9ybWF0aW9uIHJlY2VpdmVyVHlwZSwKICAgICAgVHlwZUluZm9ybWF0aW9uIHJoc1R5cGUpIHsKICAgIEFyZ3VtZW50c1R5cGVzIGFyZ3VtZW50cyA9IG5ldyBBcmd1bWVudHNUeXBlcyhbcmhzVHlwZV0sIG51bGwpOwogICAgcmV0dXJuIF9oYW5kbGVEeW5hbWljKAogICAgICAgIENhbGxUeXBlLmFjY2Vzcywgbm9kZSwgc2VsZWN0b3IsIG1hc2ssIHJlY2VpdmVyVHlwZSwgYXJndW1lbnRzKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBoYW5kbGVEeW5hbWljSW52b2tlKAogICAgICBDYWxsVHlwZSBjYWxsVHlwZSwKICAgICAgaXIuTm9kZSBub2RlLAogICAgICBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrLAogICAgICBUeXBlSW5mb3JtYXRpb24gcmVjZWl2ZXJUeXBlLAogICAgICBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBfaGFuZGxlRHluYW1pYygKICAgICAgICBjYWxsVHlwZSwgbm9kZSwgc2VsZWN0b3IsIG1hc2ssIHJlY2VpdmVyVHlwZSwgYXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdExldChpci5MZXQgbm9kZSkgewogICAgdmlzaXQobm9kZS52YXJpYWJsZSk7CiAgICByZXR1cm4gdmlzaXQobm9kZS5ib2R5KTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdEJsb2NrRXhwcmVzc2lvbihpci5CbG9ja0V4cHJlc3Npb24gbm9kZSkgewogICAgdmlzaXQobm9kZS5ib2R5KTsKICAgIHJldHVybiB2aXNpdChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdEZvckluU3RhdGVtZW50KGlyLkZvckluU3RhdGVtZW50IG5vZGUpIHsKICAgIGlmIChub2RlLml0ZXJhYmxlIGlzIGlyLlRoaXNFeHByZXNzaW9uKSB7CiAgICAgIC8vIEFueSByZWFzb25hYmxlIGltcGxlbWVudGF0aW9uIG9mIGFuIGl0ZXJhdG9yIHdvdWxkIGV4cG9zZQogICAgICAvLyB0aGlzLCBzbyB3ZSBwbGF5IGl0IHNhZmUgYW5kIGFzc3VtZSBpdCB3aWxsLgogICAgICBfc3RhdGUubWFya1RoaXNBc0V4cG9zZWQoKTsKICAgIH0KCiAgICBBYnN0cmFjdFZhbHVlIGN1cnJlbnRNYXNrOwogICAgQWJzdHJhY3RWYWx1ZSBtb3ZlTmV4dE1hc2s7CiAgICBUeXBlSW5mb3JtYXRpb24gaXRlcmF0b3JUeXBlOwogICAgaWYgKG5vZGUuaXNBc3luYykgewogICAgICBUeXBlSW5mb3JtYXRpb24gZXhwcmVzc2lvblR5cGUgPSB2aXNpdChub2RlLml0ZXJhYmxlKTsKCiAgICAgIGN1cnJlbnRNYXNrID0gX21lbWJlckRhdGEudHlwZU9mSXRlcmF0b3JDdXJyZW50KG5vZGUpOwogICAgICBtb3ZlTmV4dE1hc2sgPSBfbWVtYmVyRGF0YS50eXBlT2ZJdGVyYXRvck1vdmVOZXh0KG5vZGUpOwoKICAgICAgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IgPQogICAgICAgICAgX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLnN0cmVhbUl0ZXJhdG9yQ29uc3RydWN0b3I7CgogICAgICAvLy8gU3ludGhlc2l6ZSBhIGNhbGwgdG8gdGhlIFtTdHJlYW1JdGVyYXRvcl0gY29uc3RydWN0b3IuCiAgICAgIGl0ZXJhdG9yVHlwZSA9IGhhbmRsZVN0YXRpY0ludm9rZShub2RlLCBudWxsLCBudWxsLCBjb25zdHJ1Y3RvciwKICAgICAgICAgIG5ldyBBcmd1bWVudHNUeXBlcyhbZXhwcmVzc2lvblR5cGVdLCBudWxsKSk7CiAgICB9IGVsc2UgewogICAgICBUeXBlSW5mb3JtYXRpb24gZXhwcmVzc2lvblR5cGUgPSB2aXNpdChub2RlLml0ZXJhYmxlKTsKICAgICAgU2VsZWN0b3IgaXRlcmF0b3JTZWxlY3RvciA9IFNlbGVjdG9ycy5pdGVyYXRvcjsKICAgICAgQWJzdHJhY3RWYWx1ZSBpdGVyYXRvck1hc2sgPSBfbWVtYmVyRGF0YS50eXBlT2ZJdGVyYXRvcihub2RlKTsKICAgICAgY3VycmVudE1hc2sgPSBfbWVtYmVyRGF0YS50eXBlT2ZJdGVyYXRvckN1cnJlbnQobm9kZSk7CiAgICAgIG1vdmVOZXh0TWFzayA9IF9tZW1iZXJEYXRhLnR5cGVPZkl0ZXJhdG9yTW92ZU5leHQobm9kZSk7CgogICAgICBpdGVyYXRvclR5cGUgPSBoYW5kbGVEeW5hbWljSW52b2tlKENhbGxUeXBlLmZvckluLCBub2RlLCBpdGVyYXRvclNlbGVjdG9yLAogICAgICAgICAgaXRlcmF0b3JNYXNrLCBleHByZXNzaW9uVHlwZSwgbmV3IEFyZ3VtZW50c1R5cGVzLmVtcHR5KCkpOwogICAgfQoKICAgIGhhbmRsZUR5bmFtaWNJbnZva2UoQ2FsbFR5cGUuZm9ySW4sIG5vZGUsIFNlbGVjdG9ycy5tb3ZlTmV4dCwgbW92ZU5leHRNYXNrLAogICAgICAgIGl0ZXJhdG9yVHlwZSwgbmV3IEFyZ3VtZW50c1R5cGVzLmVtcHR5KCkpOwogICAgVHlwZUluZm9ybWF0aW9uIGN1cnJlbnRUeXBlID0gaGFuZGxlRHluYW1pY0ludm9rZSgKICAgICAgICBDYWxsVHlwZS5mb3JJbiwKICAgICAgICBub2RlLAogICAgICAgIFNlbGVjdG9ycy5jdXJyZW50LAogICAgICAgIGN1cnJlbnRNYXNrLAogICAgICAgIGl0ZXJhdG9yVHlwZSwKICAgICAgICBuZXcgQXJndW1lbnRzVHlwZXMuZW1wdHkoKSk7CgogICAgTG9jYWwgdmFyaWFibGUgPSBfbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUobm9kZS52YXJpYWJsZSk7CiAgICBEYXJ0VHlwZSB2YXJpYWJsZVR5cGUgPSBfbG9jYWxzTWFwLmdldExvY2FsVHlwZShfZWxlbWVudE1hcCwgdmFyaWFibGUpOwogICAgX3N0YXRlLnVwZGF0ZUxvY2FsKF9pbmZlcnJlciwgX2NhcHR1cmVkQW5kQm94ZWQsIHZhcmlhYmxlLCBjdXJyZW50VHlwZSwKICAgICAgICBub2RlLnZhcmlhYmxlLCB2YXJpYWJsZVR5cGUpOwoKICAgIEp1bXBUYXJnZXQgdGFyZ2V0ID0gX2xvY2Fsc01hcC5nZXRKdW1wVGFyZ2V0Rm9yRm9ySW4obm9kZSk7CiAgICByZXR1cm4gaGFuZGxlTG9vcChub2RlLCB0YXJnZXQsICgpIHsKICAgICAgdmlzaXQobm9kZS5ib2R5KTsKICAgIH0pOwogIH0KCiAgdm9pZCBfc2V0dXBCcmVha3NBbmRDb250aW51ZXMoSnVtcFRhcmdldCB0YXJnZXQpIHsKICAgIGlmICh0YXJnZXQgPT0gbnVsbCkgcmV0dXJuOwogICAgaWYgKHRhcmdldC5pc0NvbnRpbnVlVGFyZ2V0KSB7CiAgICAgIF9jb250aW51ZXNGb3JbdGFyZ2V0XSA9IDxMb2NhbFN0YXRlPltdOwogICAgfQogICAgaWYgKHRhcmdldC5pc0JyZWFrVGFyZ2V0KSB7CiAgICAgIF9icmVha3NGb3JbdGFyZ2V0XSA9IDxMb2NhbFN0YXRlPltdOwogICAgfQogIH0KCiAgdm9pZCBfY2xlYXJCcmVha3NBbmRDb250aW51ZXMoSnVtcFRhcmdldCBlbGVtZW50KSB7CiAgICBfY29udGludWVzRm9yLnJlbW92ZShlbGVtZW50KTsKICAgIF9icmVha3NGb3IucmVtb3ZlKGVsZW1lbnQpOwogIH0KCiAgTGlzdDxMb2NhbFN0YXRlPiBfZ2V0QnJlYWtzKEp1bXBUYXJnZXQgdGFyZ2V0KSB7CiAgICBMaXN0PExvY2FsU3RhdGU+IGxpc3QgPSA8TG9jYWxTdGF0ZT5bX3N0YXRlXTsKICAgIGlmICh0YXJnZXQgPT0gbnVsbCkgcmV0dXJuIGxpc3Q7CiAgICBpZiAoIXRhcmdldC5pc0JyZWFrVGFyZ2V0KSByZXR1cm4gbGlzdDsKICAgIHJldHVybiBsaXN0Li5hZGRBbGwoX2JyZWFrc0Zvclt0YXJnZXRdKTsKICB9CgogIExpc3Q8TG9jYWxTdGF0ZT4gX2dldExvb3BCYWNrRWRnZXMoSnVtcFRhcmdldCB0YXJnZXQpIHsKICAgIExpc3Q8TG9jYWxTdGF0ZT4gbGlzdCA9IDxMb2NhbFN0YXRlPltfc3RhdGVdOwogICAgaWYgKHRhcmdldCA9PSBudWxsKSByZXR1cm4gbGlzdDsKICAgIGlmICghdGFyZ2V0LmlzQ29udGludWVUYXJnZXQpIHJldHVybiBsaXN0OwogICAgcmV0dXJuIGxpc3QuLmFkZEFsbChfY29udGludWVzRm9yW3RhcmdldF0pOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGhhbmRsZUxvb3AoaXIuTm9kZSBub2RlLCBKdW1wVGFyZ2V0IHRhcmdldCwgdm9pZCBsb2dpYygpKSB7CiAgICBfbG9vcExldmVsKys7CiAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgIExvY2FsU3RhdGUgc3RhdGVCZWZvcmUgPSBfc3RhdGU7CiAgICBzdGF0ZUJlZm9yZS5zdGFydExvb3AoX2luZmVycmVyLCBub2RlKTsKICAgIGRvIHsKICAgICAgLy8gU2V0dXAgKGFuZCBjbGVhciBpbiBjYXNlIG9mIG11bHRpcGxlIGl0ZXJhdGlvbnMgb2YgdGhlIGxvb3ApCiAgICAgIC8vIHRoZSBsaXN0cyBvZiBicmVha3MgYW5kIGNvbnRpbnVlcyBzZWVuIGluIHRoZSBsb29wLgogICAgICBfc2V0dXBCcmVha3NBbmRDb250aW51ZXModGFyZ2V0KTsKICAgICAgX3N0YXRlID0gbmV3IExvY2FsU3RhdGUuY2hpbGRQYXRoKHN0YXRlQmVmb3JlKTsKICAgICAgbG9naWMoKTsKICAgICAgY2hhbmdlZCA9IHN0YXRlQmVmb3JlLm1lcmdlQWxsKF9pbmZlcnJlciwgX2dldExvb3BCYWNrRWRnZXModGFyZ2V0KSk7CiAgICB9IHdoaWxlIChjaGFuZ2VkKTsKICAgIF9sb29wTGV2ZWwtLTsKICAgIHN0YXRlQmVmb3JlLmVuZExvb3AoX2luZmVycmVyLCBub2RlKTsKICAgIGJvb2wga2VlcE93bkxvY2FscyA9IG5vZGUgaXMhIGlyLkRvU3RhdGVtZW50OwogICAgX3N0YXRlID0gc3RhdGVCZWZvcmUubWVyZ2VBZnRlckJyZWFrcyhfaW5mZXJyZXIsIF9nZXRCcmVha3ModGFyZ2V0KSwKICAgICAgICBrZWVwT3duTG9jYWxzOiBrZWVwT3duTG9jYWxzKTsKICAgIF9jbGVhckJyZWFrc0FuZENvbnRpbnVlcyh0YXJnZXQpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRDb25zdHJ1Y3Rvckludm9jYXRpb24oaXIuQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUpIHsKICAgIENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yID0gX2VsZW1lbnRNYXAuZ2V0Q29uc3RydWN0b3Iobm9kZS50YXJnZXQpOwogICAgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzID0gYW5hbHl6ZUFyZ3VtZW50cyhub2RlLmFyZ3VtZW50cyk7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IF9lbGVtZW50TWFwLmdldFNlbGVjdG9yKG5vZGUpOwogICAgQWJzdHJhY3RWYWx1ZSBtYXNrID0gX21lbWJlckRhdGEudHlwZU9mU2VuZChub2RlKTsKICAgIHJldHVybiBoYW5kbGVDb25zdHJ1Y3Rvckludm9rZSgKICAgICAgICBub2RlLCBub2RlLmFyZ3VtZW50cywgc2VsZWN0b3IsIG1hc2ssIGNvbnN0cnVjdG9yLCBhcmd1bWVudHMpOwogIH0KCiAgLy8vIFRyeSB0byBmaW5kIHRoZSBsZW5ndGggZ2l2ZW4gdG8gYSBmaXhlZCBhcnJheSBjb25zdHJ1Y3RvciBjYWxsLgogIGludCBfZmluZExlbmd0aChpci5Bcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICBpbnQgZmluaXNoKGludCBsZW5ndGgpIHsKICAgICAgLy8gRmlsdGVyIG91dCBsZW5ndGhzIHRoYXQgc2hvdWxkIG5vdCBiZSB0cmFja2VkLgogICAgICBpZiAobGVuZ3RoIDwgMCkgcmV0dXJuIG51bGw7CiAgICAgIC8vIFNlcmlhbGl6YXRpb24gbGltaXQuCiAgICAgIGlmIChsZW5ndGggPj0gKDEgPDwgMzApKSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuIGxlbmd0aDsKICAgIH0KCiAgICBpci5FeHByZXNzaW9uIGZpcnN0QXJndW1lbnQgPSBhcmd1bWVudHMucG9zaXRpb25hbC5maXJzdDsKICAgIGlmIChmaXJzdEFyZ3VtZW50IGlzIGlyLkNvbnN0YW50RXhwcmVzc2lvbiAmJgogICAgICAgIGZpcnN0QXJndW1lbnQuY29uc3RhbnQgaXMgaXIuRG91YmxlQ29uc3RhbnQpIHsKICAgICAgaXIuRG91YmxlQ29uc3RhbnQgY29uc3RhbnQgPSBmaXJzdEFyZ3VtZW50LmNvbnN0YW50OwogICAgICBkb3VibGUgZG91YmxlVmFsdWUgPSBjb25zdGFudC52YWx1ZTsKICAgICAgaW50IHRydW5jYXRlZFZhbHVlID0gZG91YmxlVmFsdWUudHJ1bmNhdGUoKTsKICAgICAgaWYgKGRvdWJsZVZhbHVlID09IHRydW5jYXRlZFZhbHVlKSB7CiAgICAgICAgcmV0dXJuIGZpbmlzaCh0cnVuY2F0ZWRWYWx1ZSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoZmlyc3RBcmd1bWVudCBpcyBpci5JbnRMaXRlcmFsKSB7CiAgICAgIHJldHVybiBmaW5pc2goZmlyc3RBcmd1bWVudC52YWx1ZSk7CiAgICB9IGVsc2UgaWYgKGZpcnN0QXJndW1lbnQgaXMgaXIuU3RhdGljR2V0KSB7CiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBfZWxlbWVudE1hcC5nZXRNZW1iZXIoZmlyc3RBcmd1bWVudC50YXJnZXQpOwogICAgICBpZiAobWVtYmVyLmlzRmllbGQpIHsKICAgICAgICBGaWVsZEFuYWx5c2lzRGF0YSBmaWVsZERhdGEgPQogICAgICAgICAgICBfY2xvc2VkV29ybGQuZmllbGRBbmFseXNpcy5nZXRGaWVsZERhdGEobWVtYmVyKTsKICAgICAgICBpZiAoZmllbGREYXRhLmlzRWZmZWN0aXZlbHlDb25zdGFudCAmJiBmaWVsZERhdGEuY29uc3RhbnRWYWx1ZS5pc0ludCkgewogICAgICAgICAgSW50Q29uc3RhbnRWYWx1ZSBpbnRWYWx1ZSA9IGZpZWxkRGF0YS5jb25zdGFudFZhbHVlOwogICAgICAgICAgaWYgKGludFZhbHVlLmludFZhbHVlLmlzVmFsaWRJbnQpIHsKICAgICAgICAgICAgcmV0dXJuIGZpbmlzaChpbnRWYWx1ZS5pbnRWYWx1ZS50b0ludCgpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8vIFJldHVybnMgYHRydWVgIGlmCiAgYm9vbCBfaXNDb25zdHJ1Y3Rvck9mVHlwZWRBcnJheVN1YmNsYXNzKENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yKSB7CiAgICBDbGFzc0VudGl0eSBjbHMgPSBjb25zdHJ1Y3Rvci5lbmNsb3NpbmdDbGFzczsKICAgIHJldHVybiBjbHMubGlicmFyeS5jYW5vbmljYWxVcmkgPT0gVXJpcy5kYXJ0X19uYXRpdmVfdHlwZWRfZGF0YSAmJgogICAgICAgIF9jbG9zZWRXb3JsZC5uYXRpdmVEYXRhLmlzTmF0aXZlQ2xhc3MoY2xzKSAmJgogICAgICAgIF9jbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeQogICAgICAgICAgICAuaXNTdWJ0eXBlT2YoY2xzLCBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMudHlwZWREYXRhQ2xhc3MpICYmCiAgICAgICAgX2Nsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5CiAgICAgICAgICAgIC5pc1N1YnR5cGVPZihjbHMsIF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5saXN0Q2xhc3MpICYmCiAgICAgICAgY29uc3RydWN0b3IubmFtZSA9PSAnJzsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBoYW5kbGVDb25zdHJ1Y3Rvckludm9rZSgKICAgICAgaXIuTm9kZSBub2RlLAogICAgICBpci5Bcmd1bWVudHMgYXJndW1lbnRzLAogICAgICBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrLAogICAgICBDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvciwKICAgICAgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzVHlwZXMpIHsKICAgIFR5cGVJbmZvcm1hdGlvbiByZXR1cm5UeXBlID0KICAgICAgICBoYW5kbGVTdGF0aWNJbnZva2Uobm9kZSwgc2VsZWN0b3IsIG1hc2ssIGNvbnN0cnVjdG9yLCBhcmd1bWVudHNUeXBlcyk7CiAgICBpZiAoX2VsZW1lbnRNYXAuY29tbW9uRWxlbWVudHMuaXNVbm5hbWVkTGlzdENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKSkgewogICAgICAvLyBXZSBoYXZlIGBuZXcgTGlzdCguLi4pYC4KICAgICAgaWYgKGFyZ3VtZW50cy5wb3NpdGlvbmFsLmlzRW1wdHkgJiYgYXJndW1lbnRzLm5hbWVkLmlzRW1wdHkpIHsKICAgICAgICAvLyBXZSBoYXZlIGBuZXcgTGlzdCgpYC4KICAgICAgICByZXR1cm4gX2luZmVycmVyLmNvbmNyZXRlVHlwZXMucHV0SWZBYnNlbnQoCiAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgICgpID0+IF90eXBlcy5hbGxvY2F0ZUxpc3QoX3R5cGVzLmdyb3dhYmxlTGlzdFR5cGUsIG5vZGUsCiAgICAgICAgICAgICAgICBfYW5hbHl6ZWRNZW1iZXIsIF90eXBlcy5ub25OdWxsRW1wdHkoKSwgMCkpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFdlIGhhdmUgYG5ldyBMaXN0KGxlbilgLgogICAgICAgIGludCBsZW5ndGggPSBfZmluZExlbmd0aChhcmd1bWVudHMpOwogICAgICAgIHJldHVybiBfaW5mZXJyZXIuY29uY3JldGVUeXBlcy5wdXRJZkFic2VudCgKICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgKCkgPT4gX3R5cGVzLmFsbG9jYXRlTGlzdChfdHlwZXMuZml4ZWRMaXN0VHlwZSwgbm9kZSwKICAgICAgICAgICAgICAgIF9hbmFseXplZE1lbWJlciwgX3R5cGVzLm51bGxUeXBlLCBsZW5ndGgpKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChfZWxlbWVudE1hcC5jb21tb25FbGVtZW50cwogICAgICAgIC5pc0ZpbGxlZExpc3RDb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcikpIHsKICAgICAgLy8gV2UgaGF2ZSBgbmV3IFVpbnQzMkxpc3QobGVuLCBmaWxsKWAuCiAgICAgIGludCBsZW5ndGggPSBfZmluZExlbmd0aChhcmd1bWVudHMpOwogICAgICBUeXBlSW5mb3JtYXRpb24gZWxlbWVudFR5cGUgPSBhcmd1bWVudHNUeXBlcy5wb3NpdGlvbmFsWzFdOwoKICAgICAgcmV0dXJuIF9pbmZlcnJlci5jb25jcmV0ZVR5cGVzLnB1dElmQWJzZW50KAogICAgICAgICAgbm9kZSwKICAgICAgICAgICgpID0+IF90eXBlcy5hbGxvY2F0ZUxpc3QoX3R5cGVzLmZpeGVkTGlzdFR5cGUsIG5vZGUsIF9hbmFseXplZE1lbWJlciwKICAgICAgICAgICAgICBlbGVtZW50VHlwZSwgbGVuZ3RoKSk7CiAgICB9IGVsc2UgaWYgKF9pc0NvbnN0cnVjdG9yT2ZUeXBlZEFycmF5U3ViY2xhc3MoY29uc3RydWN0b3IpKSB7CiAgICAgIC8vIFdlIGhhdmUgc29tZXRoaW5nIGxpa2UgYG5ldyBMaXN0LmZpbGxlZChsZW4sIGZpbGwpYC4KICAgICAgaW50IGxlbmd0aCA9IF9maW5kTGVuZ3RoKGFyZ3VtZW50cyk7CiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBfZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQKICAgICAgICAgIC5sb29rdXBDbGFzc01lbWJlcihjb25zdHJ1Y3Rvci5lbmNsb3NpbmdDbGFzcywgJ1tdJyk7CiAgICAgIFR5cGVJbmZvcm1hdGlvbiBlbGVtZW50VHlwZSA9IF9pbmZlcnJlci5yZXR1cm5UeXBlT2ZNZW1iZXIobWVtYmVyKTsKICAgICAgcmV0dXJuIF9pbmZlcnJlci5jb25jcmV0ZVR5cGVzLnB1dElmQWJzZW50KAogICAgICAgICAgbm9kZSwKICAgICAgICAgICgpID0+IF90eXBlcy5hbGxvY2F0ZUxpc3QoCiAgICAgICAgICAgICAgX3R5cGVzLm5vbk51bGxFeGFjdChjb25zdHJ1Y3Rvci5lbmNsb3NpbmdDbGFzcyksCiAgICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgICBfYW5hbHl6ZWRNZW1iZXIsCiAgICAgICAgICAgICAgZWxlbWVudFR5cGUsCiAgICAgICAgICAgICAgbGVuZ3RoKSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gcmV0dXJuVHlwZTsKICAgIH0KICB9CgogIFR5cGVJbmZvcm1hdGlvbiBoYW5kbGVTdGF0aWNJbnZva2UoaXIuTm9kZSBub2RlLCBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrLCBNZW1iZXJFbnRpdHkgZWxlbWVudCwgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gX2luZmVycmVyLnJlZ2lzdGVyQ2FsbGVkTWVtYmVyKG5vZGUsIHNlbGVjdG9yLCBtYXNrLCBfYW5hbHl6ZWRNZW1iZXIsCiAgICAgICAgZWxlbWVudCwgYXJndW1lbnRzLCBfc2lkZUVmZmVjdHNCdWlsZGVyLCBpbkxvb3ApOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGhhbmRsZUNsb3N1cmVDYWxsKGlyLk5vZGUgbm9kZSwgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgbWFzaywgTWVtYmVyRW50aXR5IG1lbWJlciwgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gX2luZmVycmVyLnJlZ2lzdGVyQ2FsbGVkQ2xvc3VyZSgKICAgICAgICBub2RlLAogICAgICAgIHNlbGVjdG9yLAogICAgICAgIG1hc2ssCiAgICAgICAgX2luZmVycmVyLnR5cGVPZk1lbWJlcihtZW1iZXIpLAogICAgICAgIF9hbmFseXplZE1lbWJlciwKICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgX3NpZGVFZmZlY3RzQnVpbGRlciwKICAgICAgICBpbkxvb3A6IGluTG9vcCk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gaGFuZGxlRm9yZWlnbkludm9rZSgKICAgICAgaXIuU3RhdGljSW52b2NhdGlvbiBub2RlLAogICAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwKICAgICAgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzLAogICAgICBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrKSB7CiAgICBTdHJpbmcgbmFtZSA9IGZ1bmN0aW9uLm5hbWU7CiAgICBoYW5kbGVTdGF0aWNJbnZva2Uobm9kZSwgc2VsZWN0b3IsIG1hc2ssIGZ1bmN0aW9uLCBhcmd1bWVudHMpOwogICAgaWYgKG5hbWUgPT0gSWRlbnRpZmllcnMuSlMpIHsKICAgICAgTmF0aXZlQmVoYXZpb3IgbmF0aXZlQmVoYXZpb3IgPQogICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0TmF0aXZlQmVoYXZpb3JGb3JKc0NhbGwobm9kZSk7CiAgICAgIF9zaWRlRWZmZWN0c0J1aWxkZXIuYWRkKG5hdGl2ZUJlaGF2aW9yLnNpZGVFZmZlY3RzKTsKICAgICAgcmV0dXJuIF9pbmZlcnJlci50eXBlT2ZOYXRpdmVCZWhhdmlvcihuYXRpdmVCZWhhdmlvcik7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gSWRlbnRpZmllcnMuSlNfRU1CRURERURfR0xPQkFMKSB7CiAgICAgIE5hdGl2ZUJlaGF2aW9yIG5hdGl2ZUJlaGF2aW9yID0KICAgICAgICAgIF9lbGVtZW50TWFwLmdldE5hdGl2ZUJlaGF2aW9yRm9ySnNFbWJlZGRlZEdsb2JhbENhbGwobm9kZSk7CiAgICAgIF9zaWRlRWZmZWN0c0J1aWxkZXIuYWRkKG5hdGl2ZUJlaGF2aW9yLnNpZGVFZmZlY3RzKTsKICAgICAgcmV0dXJuIF9pbmZlcnJlci50eXBlT2ZOYXRpdmVCZWhhdmlvcihuYXRpdmVCZWhhdmlvcik7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gSWRlbnRpZmllcnMuSlNfQlVJTFRJTikgewogICAgICBOYXRpdmVCZWhhdmlvciBuYXRpdmVCZWhhdmlvciA9CiAgICAgICAgICBfZWxlbWVudE1hcC5nZXROYXRpdmVCZWhhdmlvckZvckpzQnVpbHRpbkNhbGwobm9kZSk7CiAgICAgIF9zaWRlRWZmZWN0c0J1aWxkZXIuYWRkKG5hdGl2ZUJlaGF2aW9yLnNpZGVFZmZlY3RzKTsKICAgICAgcmV0dXJuIF9pbmZlcnJlci50eXBlT2ZOYXRpdmVCZWhhdmlvcihuYXRpdmVCZWhhdmlvcik7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gSWRlbnRpZmllcnMuSlNfU1RSSU5HX0NPTkNBVCkgewogICAgICByZXR1cm4gX3R5cGVzLnN0cmluZ1R5cGU7CiAgICB9IGVsc2UgewogICAgICBfc2lkZUVmZmVjdHNCdWlsZGVyLnNldEFsbFNpZGVFZmZlY3RzKCk7CiAgICAgIHJldHVybiBfdHlwZXMuZHluYW1pY1R5cGU7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRTdGF0aWNJbnZvY2F0aW9uKGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSkgewogICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IF9lbGVtZW50TWFwLmdldE1lbWJlcihub2RlLnRhcmdldCk7CiAgICBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHMgPSBhbmFseXplQXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKTsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gX2VsZW1lbnRNYXAuZ2V0U2VsZWN0b3Iobm9kZSk7CiAgICBBYnN0cmFjdFZhbHVlIG1hc2sgPSBfbWVtYmVyRGF0YS50eXBlT2ZTZW5kKG5vZGUpOwogICAgaWYgKF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5pc0ZvcmVpZ24obWVtYmVyKSkgewogICAgICByZXR1cm4gaGFuZGxlRm9yZWlnbkludm9rZShub2RlLCBtZW1iZXIsIGFyZ3VtZW50cywgc2VsZWN0b3IsIG1hc2spOwogICAgfSBlbHNlIGlmIChtZW1iZXIuaXNDb25zdHJ1Y3RvcikgewogICAgICByZXR1cm4gaGFuZGxlQ29uc3RydWN0b3JJbnZva2UoCiAgICAgICAgICBub2RlLCBub2RlLmFyZ3VtZW50cywgc2VsZWN0b3IsIG1hc2ssIG1lbWJlciwgYXJndW1lbnRzKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChtZW1iZXIuaXNGdW5jdGlvbiwgIlVuZXhwZWN0ZWQgc3RhdGljIGludm9jYXRpb24gdGFyZ2V0OiAkbWVtYmVyIik7CiAgICAgIFR5cGVJbmZvcm1hdGlvbiB0eXBlID0KICAgICAgICAgIGhhbmRsZVN0YXRpY0ludm9rZShub2RlLCBzZWxlY3RvciwgbWFzaywgbWVtYmVyLCBhcmd1bWVudHMpOwogICAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlID0KICAgICAgICAgIF9lbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvblR5cGUobWVtYmVyKTsKICAgICAgaWYgKGZ1bmN0aW9uVHlwZS5yZXR1cm5UeXBlLmNvbnRhaW5zRnJlZVR5cGVWYXJpYWJsZXMpIHsKICAgICAgICAvLyBUaGUgcmV0dXJuIHR5cGUgdmFyaWVzIHdpdGggdGhlIGNhbGwgc2l0ZSBzbyB3ZSBuYXJyb3cgdGhlIHN0YXRpYwogICAgICAgIC8vIHJldHVybiB0eXBlLgogICAgICAgIHR5cGUgPSBfdHlwZXMubmFycm93VHlwZSh0eXBlLCBfZ2V0U3RhdGljVHlwZShub2RlKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHR5cGU7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRMb2FkTGlicmFyeShpci5Mb2FkTGlicmFyeSBub2RlKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJbXByb3ZlIHRoaXMgYnkgcmV0dXJuaW5nIGEgRnV0dXJlIHR5cGUgaW5zdGVhZC4KICAgIHJldHVybiBfdHlwZXMuZHluYW1pY1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRTdGF0aWNHZXQoaXIuU3RhdGljR2V0IG5vZGUpIHsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IF9tZW1iZXJEYXRhLnR5cGVPZlNlbmQobm9kZSk7CiAgICBhc3NlcnQobWFzayA9PSBudWxsKTsKICAgIHJldHVybiBjcmVhdGVTdGF0aWNHZXRUeXBlSW5mb3JtYXRpb24obm9kZSwgbm9kZS50YXJnZXQsIG1hc2s6IG1hc2spOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGNyZWF0ZVN0YXRpY0dldFR5cGVJbmZvcm1hdGlvbihpci5Ob2RlIG5vZGUsIGlyLk1lbWJlciB0YXJnZXQsCiAgICAgIHtBYnN0cmFjdFZhbHVlIG1hc2t9KSB7CiAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyKHRhcmdldCk7CiAgICByZXR1cm4gaGFuZGxlU3RhdGljSW52b2tlKAogICAgICAgIG5vZGUsIG5ldyBTZWxlY3Rvci5nZXR0ZXIobWVtYmVyLm1lbWJlck5hbWUpLCBtYXNrLCBtZW1iZXIsIG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0U3RhdGljU2V0KGlyLlN0YXRpY1NldCBub2RlKSB7CiAgICBUeXBlSW5mb3JtYXRpb24gcmhzVHlwZSA9IHZpc2l0KG5vZGUudmFsdWUpOwogICAgaWYgKG5vZGUudmFsdWUgaXMgaXIuVGhpc0V4cHJlc3Npb24pIHsKICAgICAgX3N0YXRlLm1hcmtUaGlzQXNFeHBvc2VkKCk7CiAgICB9CiAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyKG5vZGUudGFyZ2V0KTsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IF9tZW1iZXJEYXRhLnR5cGVPZlNlbmQobm9kZSk7CiAgICBoYW5kbGVTdGF0aWNJbnZva2Uobm9kZSwgbmV3IFNlbGVjdG9yLnNldHRlcihtZW1iZXIubWVtYmVyTmFtZSksIG1hc2ssCiAgICAgICAgbWVtYmVyLCBuZXcgQXJndW1lbnRzVHlwZXMoW3Joc1R5cGVdLCBudWxsKSk7CiAgICByZXR1cm4gcmhzVHlwZTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBoYW5kbGVQcm9wZXJ0eUdldCgKICAgICAgaXIuVHJlZU5vZGUgbm9kZSwgVHlwZUluZm9ybWF0aW9uIHJlY2VpdmVyVHlwZSwgaXIuTWVtYmVyIGludGVyZmFjZVRhcmdldCwKICAgICAge2Jvb2wgaXNUaGlzfSkgewogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBfZWxlbWVudE1hcC5nZXRTZWxlY3Rvcihub2RlKTsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IF9tZW1iZXJEYXRhLnR5cGVPZlNlbmQobm9kZSk7CiAgICBpZiAoaXNUaGlzKSB7CiAgICAgIF9jaGVja0lmRXhwb3Nlc1RoaXMoCiAgICAgICAgICBzZWxlY3RvciwgX3R5cGVzLm5ld1R5cGVkU2VsZWN0b3IocmVjZWl2ZXJUeXBlLCBtYXNrKSk7CiAgICB9CiAgICBUeXBlSW5mb3JtYXRpb24gdHlwZSA9IGhhbmRsZUR5bmFtaWNHZXQobm9kZSwgc2VsZWN0b3IsIG1hc2ssIHJlY2VpdmVyVHlwZSk7CiAgICBpZiAoaW50ZXJmYWNlVGFyZ2V0ICE9IG51bGwpIHsKICAgICAgLy8gUHVsbCB0aGUgdHlwZSBmcm9tIGtlcm5lbCAoaW5zdGVhZCBvZiBmcm9tIHRoZSBKLW1vZGVsKSBiZWNhdXNlIHRoZQogICAgICAvLyBpbnRlcmZhY2UgdGFyZ2V0IG1pZ2h0IGJlIGFic3RyYWN0IGFuZCB0aGVyZWZvcmUgbm90IHBhcnQgb2YgdGhlCiAgICAgIC8vIEotbW9kZWwuCiAgICAgIGlyLkRhcnRUeXBlIHJlc3VsdFR5cGUgPSBpbnRlcmZhY2VUYXJnZXQuZ2V0dGVyVHlwZTsKICAgICAgLy8gVGhlIHJlc3VsdCB0eXBlIHZhcmllcyB3aXRoIHRoZSBjYWxsIHNpdGUgc28gd2UgbmFycm93IHRoZSBzdGF0aWMKICAgICAgLy8gcmVzdWx0IHR5cGUuCiAgICAgIGlmIChjb250YWluc0ZyZWVWYXJpYWJsZXMocmVzdWx0VHlwZSkpIHsKICAgICAgICB0eXBlID0gX3R5cGVzLm5hcnJvd1R5cGUodHlwZSwgX2dldFN0YXRpY1R5cGUobm9kZSkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdFByb3BlcnR5R2V0KGlyLlByb3BlcnR5R2V0IG5vZGUpIHsKICAgIFR5cGVJbmZvcm1hdGlvbiByZWNlaXZlclR5cGUgPSB2aXNpdChub2RlLnJlY2VpdmVyKTsKICAgIHJldHVybiBoYW5kbGVQcm9wZXJ0eUdldChub2RlLCByZWNlaXZlclR5cGUsIG5vZGUuaW50ZXJmYWNlVGFyZ2V0LAogICAgICAgIGlzVGhpczogbm9kZS5yZWNlaXZlciBpcyBpci5UaGlzRXhwcmVzc2lvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXREaXJlY3RQcm9wZXJ0eUdldChpci5EaXJlY3RQcm9wZXJ0eUdldCBub2RlKSB7CiAgICBUeXBlSW5mb3JtYXRpb24gcmVjZWl2ZXJUeXBlID0gdGhpc1R5cGU7CiAgICByZXR1cm4gaGFuZGxlUHJvcGVydHlHZXQobm9kZSwgcmVjZWl2ZXJUeXBlLCBub2RlLnRhcmdldCwgaXNUaGlzOiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdFByb3BlcnR5U2V0KGlyLlByb3BlcnR5U2V0IG5vZGUpIHsKICAgIFR5cGVJbmZvcm1hdGlvbiByZWNlaXZlclR5cGUgPSB2aXNpdChub2RlLnJlY2VpdmVyKTsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gX2VsZW1lbnRNYXAuZ2V0U2VsZWN0b3Iobm9kZSk7CiAgICBBYnN0cmFjdFZhbHVlIG1hc2sgPSBfbWVtYmVyRGF0YS50eXBlT2ZTZW5kKG5vZGUpOwoKICAgIFR5cGVJbmZvcm1hdGlvbiByaHNUeXBlID0gdmlzaXQobm9kZS52YWx1ZSk7CiAgICBpZiAobm9kZS52YWx1ZSBpcyBpci5UaGlzRXhwcmVzc2lvbikgewogICAgICBfc3RhdGUubWFya1RoaXNBc0V4cG9zZWQoKTsKICAgIH0KCiAgICBpZiAoX2luR2VuZXJhdGl2ZUNvbnN0cnVjdG9yICYmIG5vZGUucmVjZWl2ZXIgaXMgaXIuVGhpc0V4cHJlc3Npb24pIHsKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlZE1hc2sgPSBfdHlwZXMubmV3VHlwZWRTZWxlY3RvcihyZWNlaXZlclR5cGUsIG1hc2spOwogICAgICBpZiAoIV9jbG9zZWRXb3JsZC5pbmNsdWRlc0Nsb3N1cmVDYWxsKHNlbGVjdG9yLCB0eXBlZE1hc2spKSB7CiAgICAgICAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiB0YXJnZXRzID0KICAgICAgICAgICAgX2Nsb3NlZFdvcmxkLmxvY2F0ZU1lbWJlcnMoc2VsZWN0b3IsIHR5cGVkTWFzayk7CiAgICAgICAgLy8gV2UganVzdCByZWNvZ25pemVkIGEgZmllbGQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGZvcm06CiAgICAgICAgLy8gYHRoaXMuZm9vID0gNDJgLiBJZiB0aGVyZSBpcyBvbmx5IG9uZSB0YXJnZXQsIHdlIGNhbiB1cGRhdGUKICAgICAgICAvLyBpdHMgdHlwZS4KICAgICAgICBpZiAodGFyZ2V0cy5sZW5ndGggPT0gMSkgewogICAgICAgICAgTWVtYmVyRW50aXR5IHNpbmdsZSA9IHRhcmdldHMuZmlyc3Q7CiAgICAgICAgICBpZiAoc2luZ2xlLmlzRmllbGQpIHsKICAgICAgICAgICAgRmllbGRFbnRpdHkgZmllbGQgPSBzaW5nbGU7CiAgICAgICAgICAgIF9zdGF0ZS51cGRhdGVGaWVsZChmaWVsZCwgcmhzVHlwZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAobm9kZS5yZWNlaXZlciBpcyBpci5UaGlzRXhwcmVzc2lvbikgewogICAgICBfY2hlY2tJZkV4cG9zZXNUaGlzKAogICAgICAgICAgc2VsZWN0b3IsIF90eXBlcy5uZXdUeXBlZFNlbGVjdG9yKHJlY2VpdmVyVHlwZSwgbWFzaykpOwogICAgfQogICAgaGFuZGxlRHluYW1pY1NldChub2RlLCBzZWxlY3RvciwgbWFzaywgcmVjZWl2ZXJUeXBlLCByaHNUeXBlKTsKICAgIHJldHVybiByaHNUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0VGhpc0V4cHJlc3Npb24oaXIuVGhpc0V4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIHRoaXNUeXBlOwogIH0KCiAgdm9pZCBoYW5kbGVDb25kaXRpb24oaXIuTm9kZSBub2RlKSB7CiAgICBib29sIG9sZEFjY3VtdWxhdGVJc0NoZWNrcyA9IF9hY2N1bXVsYXRlSXNDaGVja3M7CiAgICBfYWNjdW11bGF0ZUlzQ2hlY2tzID0gdHJ1ZTsKICAgIHZpc2l0KG5vZGUsIGNvbmRpdGlvbkNvbnRleHQ6IHRydWUpOwogICAgX2FjY3VtdWxhdGVJc0NoZWNrcyA9IG9sZEFjY3VtdWxhdGVJc0NoZWNrczsKICB9CgogIHZvaWQgX3BvdGVudGlhbGx5QWRkSXNDaGVjayhpci5Jc0V4cHJlc3Npb24gbm9kZSkgewogICAgaWYgKCFfYWNjdW11bGF0ZUlzQ2hlY2tzKSByZXR1cm47CiAgICBpci5FeHByZXNzaW9uIG9wZXJhbmQgPSBub2RlLm9wZXJhbmQ7CiAgICBpZiAob3BlcmFuZCBpcyBpci5WYXJpYWJsZUdldCkgewogICAgICBMb2NhbCBsb2NhbCA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZShvcGVyYW5kLnZhcmlhYmxlKTsKICAgICAgRGFydFR5cGUgdHlwZSA9IF9lbGVtZW50TWFwLmdldERhcnRUeXBlKG5vZGUudHlwZSk7CiAgICAgIExvY2FsU3RhdGUgc3RhdGVBZnRlckNoZWNrV2hlblRydWUgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoX3N0YXRlKTsKICAgICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyQ2hlY2tXaGVuRmFsc2UgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoX3N0YXRlKTsKICAgICAgc3RhdGVBZnRlckNoZWNrV2hlblRydWUubmFycm93TG9jYWwoCiAgICAgICAgICBfaW5mZXJyZXIsIF9jYXB0dXJlZEFuZEJveGVkLCBsb2NhbCwgdHlwZSwgbm9kZSk7CiAgICAgIF9zZXRTdGF0ZUFmdGVyKF9zdGF0ZSwgc3RhdGVBZnRlckNoZWNrV2hlblRydWUsIHN0YXRlQWZ0ZXJDaGVja1doZW5GYWxzZSk7CiAgICB9CiAgfQoKICB2b2lkIF9wb3RlbnRpYWxseUFkZE51bGxDaGVjaygKICAgICAgaXIuTWV0aG9kSW52b2NhdGlvbiBub2RlLCBpci5FeHByZXNzaW9uIHJlY2VpdmVyKSB7CiAgICBpZiAoIV9hY2N1bXVsYXRlSXNDaGVja3MpIHJldHVybjsKICAgIGlmIChyZWNlaXZlciBpcyBpci5WYXJpYWJsZUdldCkgewogICAgICBMb2NhbCBsb2NhbCA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZShyZWNlaXZlci52YXJpYWJsZSk7CiAgICAgIERhcnRUeXBlIGxvY2FsVHlwZSA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxUeXBlKF9lbGVtZW50TWFwLCBsb2NhbCk7CiAgICAgIExvY2FsU3RhdGUgc3RhdGVBZnRlckNoZWNrV2hlblRydWUgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoX3N0YXRlKTsKICAgICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyQ2hlY2tXaGVuRmFsc2UgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoX3N0YXRlKTsKICAgICAgc3RhdGVBZnRlckNoZWNrV2hlblRydWUudXBkYXRlTG9jYWwoX2luZmVycmVyLCBfY2FwdHVyZWRBbmRCb3hlZCwgbG9jYWwsCiAgICAgICAgICBfdHlwZXMubnVsbFR5cGUsIG5vZGUsIGxvY2FsVHlwZSk7CiAgICAgIHN0YXRlQWZ0ZXJDaGVja1doZW5GYWxzZS5uYXJyb3dMb2NhbChfaW5mZXJyZXIsIF9jYXB0dXJlZEFuZEJveGVkLCBsb2NhbCwKICAgICAgICAgIF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5vYmplY3RUeXBlLCBub2RlKTsKICAgICAgX3NldFN0YXRlQWZ0ZXIoX3N0YXRlLCBzdGF0ZUFmdGVyQ2hlY2tXaGVuVHJ1ZSwgc3RhdGVBZnRlckNoZWNrV2hlbkZhbHNlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdElmU3RhdGVtZW50KGlyLklmU3RhdGVtZW50IG5vZGUpIHsKICAgIExvY2FsU3RhdGUgc3RhdGVCZWZvcmUgPSBfc3RhdGU7CiAgICBoYW5kbGVDb25kaXRpb24obm9kZS5jb25kaXRpb24pOwogICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyQ29uZGl0aW9uV2hlblRydWUgPSBfc3RhdGVBZnRlcldoZW5UcnVlOwogICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyQ29uZGl0aW9uV2hlbkZhbHNlID0gX3N0YXRlQWZ0ZXJXaGVuRmFsc2U7CiAgICBfc3RhdGUgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoc3RhdGVBZnRlckNvbmRpdGlvbldoZW5UcnVlKTsKICAgIHZpc2l0KG5vZGUudGhlbik7CiAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJUaGVuID0gX3N0YXRlOwogICAgX3N0YXRlID0gbmV3IExvY2FsU3RhdGUuY2hpbGRQYXRoKHN0YXRlQWZ0ZXJDb25kaXRpb25XaGVuRmFsc2UpOwogICAgdmlzaXQobm9kZS5vdGhlcndpc2UpOwogICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyRWxzZSA9IF9zdGF0ZTsKICAgIF9zdGF0ZSA9CiAgICAgICAgc3RhdGVCZWZvcmUubWVyZ2VEaWFtb25kRmxvdyhfaW5mZXJyZXIsIHN0YXRlQWZ0ZXJUaGVuLCBzdGF0ZUFmdGVyRWxzZSk7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdElzRXhwcmVzc2lvbihpci5Jc0V4cHJlc3Npb24gbm9kZSkgewogICAgdmlzaXQobm9kZS5vcGVyYW5kKTsKICAgIF9wb3RlbnRpYWxseUFkZElzQ2hlY2sobm9kZSk7CiAgICByZXR1cm4gX3R5cGVzLmJvb2xUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0Tm90KGlyLk5vdCBub2RlKSB7CiAgICB2aXNpdChub2RlLm9wZXJhbmQsIGNvbmRpdGlvbkNvbnRleHQ6IF9hY2N1bXVsYXRlSXNDaGVja3MpOwogICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyT3BlcmFuZFdoZW5UcnVlID0gX3N0YXRlQWZ0ZXJXaGVuVHJ1ZTsKICAgIExvY2FsU3RhdGUgc3RhdGVBZnRlck9wZXJhbmRXaGVuRmFsc2UgPSBfc3RhdGVBZnRlcldoZW5GYWxzZTsKICAgIF9zZXRTdGF0ZUFmdGVyKAogICAgICAgIF9zdGF0ZSwgc3RhdGVBZnRlck9wZXJhbmRXaGVuRmFsc2UsIHN0YXRlQWZ0ZXJPcGVyYW5kV2hlblRydWUpOwogICAgcmV0dXJuIF90eXBlcy5ib29sVHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdExvZ2ljYWxFeHByZXNzaW9uKGlyLkxvZ2ljYWxFeHByZXNzaW9uIG5vZGUpIHsKICAgIGlmIChub2RlLm9wZXJhdG9yID09ICcmJicpIHsKICAgICAgTG9jYWxTdGF0ZSBzdGF0ZUJlZm9yZSA9IF9zdGF0ZTsKICAgICAgX3N0YXRlID0gbmV3IExvY2FsU3RhdGUuY2hpbGRQYXRoKHN0YXRlQmVmb3JlKTsKICAgICAgaGFuZGxlQ29uZGl0aW9uKG5vZGUubGVmdCk7CiAgICAgIExvY2FsU3RhdGUgc3RhdGVBZnRlckxlZnRXaGVuVHJ1ZSA9IF9zdGF0ZUFmdGVyV2hlblRydWU7CiAgICAgIExvY2FsU3RhdGUgc3RhdGVBZnRlckxlZnRXaGVuRmFsc2UgPSBfc3RhdGVBZnRlcldoZW5GYWxzZTsKICAgICAgX3N0YXRlID0gbmV3IExvY2FsU3RhdGUuY2hpbGRQYXRoKHN0YXRlQWZ0ZXJMZWZ0V2hlblRydWUpOwogICAgICBoYW5kbGVDb25kaXRpb24obm9kZS5yaWdodCk7CiAgICAgIExvY2FsU3RhdGUgc3RhdGVBZnRlclJpZ2h0V2hlblRydWUgPSBfc3RhdGVBZnRlcldoZW5UcnVlOwogICAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJSaWdodFdoZW5GYWxzZSA9IF9zdGF0ZUFmdGVyV2hlbkZhbHNlOwogICAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJXaGVuVHJ1ZSA9IHN0YXRlQWZ0ZXJSaWdodFdoZW5UcnVlOwogICAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJXaGVuRmFsc2UgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoc3RhdGVCZWZvcmUpCiAgICAgICAgICAubWVyZ2VEaWFtb25kRmxvdygKICAgICAgICAgICAgICBfaW5mZXJyZXIsIHN0YXRlQWZ0ZXJMZWZ0V2hlbkZhbHNlLCBzdGF0ZUFmdGVyUmlnaHRXaGVuRmFsc2UpOwogICAgICBMb2NhbFN0YXRlIGFmdGVyID0gc3RhdGVCZWZvcmUubWVyZ2VEaWFtb25kRmxvdygKICAgICAgICAgIF9pbmZlcnJlciwgc3RhdGVBZnRlcldoZW5UcnVlLCBzdGF0ZUFmdGVyV2hlbkZhbHNlKTsKICAgICAgX3NldFN0YXRlQWZ0ZXIoYWZ0ZXIsIHN0YXRlQWZ0ZXJXaGVuVHJ1ZSwgc3RhdGVBZnRlcldoZW5GYWxzZSk7CiAgICAgIHJldHVybiBfdHlwZXMuYm9vbFR5cGU7CiAgICB9IGVsc2UgaWYgKG5vZGUub3BlcmF0b3IgPT0gJ3x8JykgewogICAgICBMb2NhbFN0YXRlIHN0YXRlQmVmb3JlID0gX3N0YXRlOwogICAgICBfc3RhdGUgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoc3RhdGVCZWZvcmUpOwogICAgICBoYW5kbGVDb25kaXRpb24obm9kZS5sZWZ0KTsKICAgICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyTGVmdFdoZW5UcnVlID0gX3N0YXRlQWZ0ZXJXaGVuVHJ1ZTsKICAgICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyTGVmdFdoZW5GYWxzZSA9IF9zdGF0ZUFmdGVyV2hlbkZhbHNlOwogICAgICBfc3RhdGUgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoc3RhdGVBZnRlckxlZnRXaGVuRmFsc2UpOwogICAgICBoYW5kbGVDb25kaXRpb24obm9kZS5yaWdodCk7CiAgICAgIExvY2FsU3RhdGUgc3RhdGVBZnRlclJpZ2h0V2hlblRydWUgPSBfc3RhdGVBZnRlcldoZW5UcnVlOwogICAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJSaWdodFdoZW5GYWxzZSA9IF9zdGF0ZUFmdGVyV2hlbkZhbHNlOwogICAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJXaGVuVHJ1ZSA9IG5ldyBMb2NhbFN0YXRlLmNoaWxkUGF0aChzdGF0ZUJlZm9yZSkKICAgICAgICAgIC5tZXJnZURpYW1vbmRGbG93KAogICAgICAgICAgICAgIF9pbmZlcnJlciwgc3RhdGVBZnRlckxlZnRXaGVuVHJ1ZSwgc3RhdGVBZnRlclJpZ2h0V2hlblRydWUpOwogICAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJXaGVuRmFsc2UgPSBzdGF0ZUFmdGVyUmlnaHRXaGVuRmFsc2U7CiAgICAgIExvY2FsU3RhdGUgc3RhdGVBZnRlciA9IHN0YXRlQmVmb3JlLm1lcmdlRGlhbW9uZEZsb3coCiAgICAgICAgICBfaW5mZXJyZXIsIHN0YXRlQWZ0ZXJXaGVuVHJ1ZSwgc3RhdGVBZnRlcldoZW5GYWxzZSk7CiAgICAgIF9zZXRTdGF0ZUFmdGVyKHN0YXRlQWZ0ZXIsIHN0YXRlQWZ0ZXJXaGVuVHJ1ZSwgc3RhdGVBZnRlcldoZW5GYWxzZSk7CiAgICAgIHJldHVybiBfdHlwZXMuYm9vbFR5cGU7CiAgICB9CiAgICBmYWlsZWRBdChDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICJVbmV4cGVjdGVkIGxvZ2ljYWwgb3BlcmF0b3IgJyR7bm9kZS5vcGVyYXRvcn0nLiIpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRDb25kaXRpb25hbEV4cHJlc3Npb24oaXIuQ29uZGl0aW9uYWxFeHByZXNzaW9uIG5vZGUpIHsKICAgIExvY2FsU3RhdGUgc3RhdGVCZWZvcmUgPSBfc3RhdGU7CiAgICBoYW5kbGVDb25kaXRpb24obm9kZS5jb25kaXRpb24pOwogICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyV2hlblRydWUgPSBfc3RhdGVBZnRlcldoZW5UcnVlOwogICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyV2hlbkZhbHNlID0gX3N0YXRlQWZ0ZXJXaGVuRmFsc2U7CiAgICBfc3RhdGUgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoc3RhdGVBZnRlcldoZW5UcnVlKTsKICAgIFR5cGVJbmZvcm1hdGlvbiBmaXJzdFR5cGUgPSB2aXNpdChub2RlLnRoZW4pOwogICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyVGhlbiA9IF9zdGF0ZTsKICAgIF9zdGF0ZSA9IG5ldyBMb2NhbFN0YXRlLmNoaWxkUGF0aChzdGF0ZUFmdGVyV2hlbkZhbHNlKTsKICAgIFR5cGVJbmZvcm1hdGlvbiBzZWNvbmRUeXBlID0gdmlzaXQobm9kZS5vdGhlcndpc2UpOwogICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyRWxzZSA9IF9zdGF0ZTsKICAgIF9zdGF0ZSA9CiAgICAgICAgc3RhdGVCZWZvcmUubWVyZ2VEaWFtb25kRmxvdyhfaW5mZXJyZXIsIHN0YXRlQWZ0ZXJUaGVuLCBzdGF0ZUFmdGVyRWxzZSk7CiAgICByZXR1cm4gX3R5cGVzLmFsbG9jYXRlRGlhbW9uZFBoaShmaXJzdFR5cGUsIHNlY29uZFR5cGUpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGhhbmRsZUxvY2FsRnVuY3Rpb24oCiAgICAgIGlyLlRyZWVOb2RlIG5vZGUsIGlyLkZ1bmN0aW9uTm9kZSBmdW5jdGlvbk5vZGUsCiAgICAgIFtpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlXSkgewogICAgLy8gV2UgbG9vc2UgdHJhY2sgb2YgW3RoaXNdIGluIGNsb3N1cmVzIChzZWUgaXNzdWUgMjA4NDApLiBUbyBiZSBvbgogICAgLy8gdGhlIHNhZmUgc2lkZSwgd2UgbWFyayBbdGhpc10gYXMgZXhwb3NlZCBoZXJlLiBXZSBjb3VsZCBkbyBiZXR0ZXIgYnkKICAgIC8vIGFuYWx5emluZyB0aGUgY2xvc3VyZS4KICAgIC8vIFRPRE8oaGVyaHV0KTogQW5hbHl6ZSB3aGV0aGVyIGNsb3N1cmUgZXhwb3NlcyB0aGlzLiBQb3NzaWJseSB1c2luZwogICAgLy8gd2hldGhlciB0aGUgY3JlYXRlZCBjbG9zdXJlIGFzIGEgYHRoaXNMb2NhbGAuCiAgICBfc3RhdGUubWFya1RoaXNBc0V4cG9zZWQoKTsKCiAgICBDbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvIGluZm8gPSBfY2xvc3VyZURhdGFMb29rdXAuZ2V0Q2xvc3VyZUluZm8obm9kZSk7CgogICAgLy8gUmVjb3JkIHRoZSB0eXBlcyBvZiBjYXB0dXJlZCBub24tYm94ZWQgdmFyaWFibGVzLiBUeXBlcyBvZgogICAgLy8gdGhlc2UgdmFyaWFibGVzIG1heSBhbHJlYWR5IGJlIHRoZXJlLCBiZWNhdXNlIG9mIGFuIGFuYWx5c2lzIG9mCiAgICAvLyBhIHByZXZpb3VzIGNsb3N1cmUuCiAgICBpbmZvLmZvckVhY2hGcmVlVmFyaWFibGUoKExvY2FsIHZhcmlhYmxlLCBGaWVsZEVudGl0eSBmaWVsZCkgewogICAgICBpZiAoIWluZm8uaXNCb3hlZFZhcmlhYmxlKHZhcmlhYmxlKSkgewogICAgICAgIGlmICh2YXJpYWJsZSA9PSBpbmZvLnRoaXNMb2NhbCkgewogICAgICAgICAgX2luZmVycmVyLnJlY29yZFR5cGVPZkZpZWxkKGZpZWxkLCB0aGlzVHlwZSk7CiAgICAgICAgfQogICAgICAgIFR5cGVJbmZvcm1hdGlvbiBsb2NhbFR5cGUgPQogICAgICAgICAgICBfc3RhdGUucmVhZExvY2FsKF9pbmZlcnJlciwgX2NhcHR1cmVkQW5kQm94ZWQsIHZhcmlhYmxlKTsKICAgICAgICAvLyBUaGUgdHlwZSBpcyBudWxsIGZvciB0eXBlIHBhcmFtZXRlcnMuCiAgICAgICAgaWYgKGxvY2FsVHlwZSAhPSBudWxsKSB7CiAgICAgICAgICBfaW5mZXJyZXIucmVjb3JkVHlwZU9mRmllbGQoZmllbGQsIGxvY2FsVHlwZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIF9jYXB0dXJlZFZhcmlhYmxlcy5hZGQodmFyaWFibGUpOwogICAgfSk7CgogICAgVHlwZUluZm9ybWF0aW9uIGxvY2FsRnVuY3Rpb25UeXBlID0KICAgICAgICBfaW5mZXJyZXIuY29uY3JldGVUeXBlcy5wdXRJZkFic2VudChub2RlLCAoKSB7CiAgICAgIHJldHVybiBfdHlwZXMuYWxsb2NhdGVDbG9zdXJlKGluZm8uY2FsbE1ldGhvZCk7CiAgICB9KTsKICAgIGlmICh2YXJpYWJsZSAhPSBudWxsKSB7CiAgICAgIExvY2FsIGxvY2FsID0gX2xvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKHZhcmlhYmxlKTsKICAgICAgRGFydFR5cGUgdHlwZSA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxUeXBlKF9lbGVtZW50TWFwLCBsb2NhbCk7CiAgICAgIF9zdGF0ZS51cGRhdGVMb2NhbCgKICAgICAgICAgIF9pbmZlcnJlciwgX2NhcHR1cmVkQW5kQm94ZWQsIGxvY2FsLCBsb2NhbEZ1bmN0aW9uVHlwZSwgbm9kZSwgdHlwZSwKICAgICAgICAgIGlzTnVsbGFibGU6IGZhbHNlKTsKICAgIH0KCiAgICAvLyBXZSBkb24ndCBwdXQgdGhlIGNsb3N1cmUgaW4gdGhlIHdvcmsgcXVldWUgb2YgdGhlCiAgICAvLyBpbmZlcnJlciwgYmVjYXVzZSBpdCB3aWxsIHNoYXJlIGluZm9ybWF0aW9uIHdpdGggaXRzIGVuY2xvc2luZwogICAgLy8gbWV0aG9kLCBsaWtlIGZvciBleGFtcGxlIHRoZSB0eXBlcyBvZiBsb2NhbCB2YXJpYWJsZXMuCiAgICBMb2NhbFN0YXRlIGNsb3N1cmVTdGF0ZSA9IG5ldyBMb2NhbFN0YXRlLmNsb3N1cmUoX3N0YXRlKTsKICAgIEtlcm5lbFR5cGVHcmFwaEJ1aWxkZXIgdmlzaXRvciA9IG5ldyBLZXJuZWxUeXBlR3JhcGhCdWlsZGVyKAogICAgICAgIF9vcHRpb25zLAogICAgICAgIF9jbG9zZWRXb3JsZCwKICAgICAgICBfaW5mZXJyZXIsCiAgICAgICAgaW5mby5jYWxsTWV0aG9kLAogICAgICAgIGZ1bmN0aW9uTm9kZSwKICAgICAgICBfbG9jYWxzTWFwLAogICAgICAgIF9zdGF0aWNUeXBlUHJvdmlkZXIsCiAgICAgICAgY2xvc3VyZVN0YXRlLAogICAgICAgIF9jYXB0dXJlZEFuZEJveGVkKTsKICAgIHZpc2l0b3IucnVuKCk7CiAgICBfaW5mZXJyZXIucmVjb3JkUmV0dXJuVHlwZShpbmZvLmNhbGxNZXRob2QsIHZpc2l0b3IuX3JldHVyblR5cGUpOwoKICAgIHJldHVybiBsb2NhbEZ1bmN0aW9uVHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24oaXIuRnVuY3Rpb25EZWNsYXJhdGlvbiBub2RlKSB7CiAgICByZXR1cm4gaGFuZGxlTG9jYWxGdW5jdGlvbihub2RlLCBub2RlLmZ1bmN0aW9uLCBub2RlLnZhcmlhYmxlKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbihpci5GdW5jdGlvbkV4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIGhhbmRsZUxvY2FsRnVuY3Rpb24obm9kZSwgbm9kZS5mdW5jdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFdoaWxlU3RhdGVtZW50KGlyLldoaWxlU3RhdGVtZW50IG5vZGUpIHsKICAgIHJldHVybiBoYW5kbGVMb29wKG5vZGUsIF9sb2NhbHNNYXAuZ2V0SnVtcFRhcmdldEZvcldoaWxlKG5vZGUpLCAoKSB7CiAgICAgIGhhbmRsZUNvbmRpdGlvbihub2RlLmNvbmRpdGlvbik7CiAgICAgIF9zdGF0ZSA9IG5ldyBMb2NhbFN0YXRlLmNoaWxkUGF0aChfc3RhdGVBZnRlcldoZW5UcnVlKTsKICAgICAgdmlzaXQobm9kZS5ib2R5KTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXREb1N0YXRlbWVudChpci5Eb1N0YXRlbWVudCBub2RlKSB7CiAgICByZXR1cm4gaGFuZGxlTG9vcChub2RlLCBfbG9jYWxzTWFwLmdldEp1bXBUYXJnZXRGb3JEbyhub2RlKSwgKCkgewogICAgICB2aXNpdChub2RlLmJvZHkpOwogICAgICBoYW5kbGVDb25kaXRpb24obm9kZS5jb25kaXRpb24pOwogICAgICAvLyBUT0RPKDI5MzA5KTogVGhpcyBjb25kaXRpb24gYXBwZWFycyB0byBzdHJlbmd0aGVuIGJvdGggdGhlIGJhY2stZWRnZQogICAgICAvLyBhbmQgZXhpdC1lZGdlLiBGb3Igbm93LCBhdm9pZCBzdHJlbmd0aGVuaW5nIG9uIHRoZSBjb25kaXRpb24gdW50aWwgdGhlCiAgICAgIC8vIHByb3BlciBmaXggaXMgZm91bmQuCiAgICAgIC8vCiAgICAgIC8vICAgICBfc3RhdGUgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoX3N0YXRlQWZ0ZXJXaGVuVHJ1ZSwgbm9kZS5ib2R5KTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRGb3JTdGF0ZW1lbnQoaXIuRm9yU3RhdGVtZW50IG5vZGUpIHsKICAgIGZvciAoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSBpbiBub2RlLnZhcmlhYmxlcykgewogICAgICB2aXNpdCh2YXJpYWJsZSk7CiAgICB9CiAgICByZXR1cm4gaGFuZGxlTG9vcChub2RlLCBfbG9jYWxzTWFwLmdldEp1bXBUYXJnZXRGb3JGb3Iobm9kZSksICgpIHsKICAgICAgaGFuZGxlQ29uZGl0aW9uKG5vZGUuY29uZGl0aW9uKTsKICAgICAgX3N0YXRlID0gbmV3IExvY2FsU3RhdGUuY2hpbGRQYXRoKF9zdGF0ZUFmdGVyV2hlblRydWUpOwogICAgICB2aXNpdChub2RlLmJvZHkpOwogICAgICBmb3IgKGlyLkV4cHJlc3Npb24gdXBkYXRlIGluIG5vZGUudXBkYXRlcykgewogICAgICAgIHZpc2l0KHVwZGF0ZSk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUcnlDYXRjaChpci5UcnlDYXRjaCBub2RlKSB7CiAgICBMb2NhbFN0YXRlIHN0YXRlQmVmb3JlID0gX3N0YXRlOwogICAgX3N0YXRlID0gbmV3IExvY2FsU3RhdGUudHJ5QmxvY2soc3RhdGVCZWZvcmUsIG5vZGUpOwogICAgX3N0YXRlLm1hcmtJbml0aWFsaXphdGlvbkFzSW5kZWZpbml0ZSgpOwogICAgdmlzaXQobm9kZS5ib2R5KTsKICAgIExvY2FsU3RhdGUgc3RhdGVBZnRlckJvZHkgPSBfc3RhdGU7CiAgICBfc3RhdGUgPSBzdGF0ZUJlZm9yZS5tZXJnZUZsb3coX2luZmVycmVyLCBzdGF0ZUFmdGVyQm9keSk7CiAgICBmb3IgKGlyLkNhdGNoIGNhdGNoQmxvY2sgaW4gbm9kZS5jYXRjaGVzKSB7CiAgICAgIExvY2FsU3RhdGUgc3RhdGVCZWZvcmVDYXRjaCA9IF9zdGF0ZTsKICAgICAgX3N0YXRlID0gbmV3IExvY2FsU3RhdGUuY2hpbGRQYXRoKHN0YXRlQmVmb3JlQ2F0Y2gpOwogICAgICB2aXNpdChjYXRjaEJsb2NrKTsKICAgICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyQ2F0Y2ggPSBfc3RhdGU7CiAgICAgIF9zdGF0ZSA9IHN0YXRlQmVmb3JlQ2F0Y2gubWVyZ2VGbG93KF9pbmZlcnJlciwgc3RhdGVBZnRlckNhdGNoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUcnlGaW5hbGx5KGlyLlRyeUZpbmFsbHkgbm9kZSkgewogICAgTG9jYWxTdGF0ZSBzdGF0ZUJlZm9yZSA9IF9zdGF0ZTsKICAgIF9zdGF0ZSA9IG5ldyBMb2NhbFN0YXRlLnRyeUJsb2NrKHN0YXRlQmVmb3JlLCBub2RlKTsKICAgIF9zdGF0ZS5tYXJrSW5pdGlhbGl6YXRpb25Bc0luZGVmaW5pdGUoKTsKICAgIHZpc2l0KG5vZGUuYm9keSk7CiAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJCb2R5ID0gX3N0YXRlOwogICAgX3N0YXRlID0gc3RhdGVCZWZvcmUubWVyZ2VGbG93KF9pbmZlcnJlciwgc3RhdGVBZnRlckJvZHkpOwogICAgdmlzaXQobm9kZS5maW5hbGl6ZXIpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENhdGNoKGlyLkNhdGNoIG5vZGUpIHsKICAgIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gZXhjZXB0aW9uID0gbm9kZS5leGNlcHRpb247CiAgICBpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKICAgICAgVHlwZUluZm9ybWF0aW9uIG1hc2s7CiAgICAgIERhcnRUeXBlIHR5cGUgPSBub2RlLmd1YXJkICE9IG51bGwKICAgICAgICAgID8gX2VsZW1lbnRNYXAuZ2V0RGFydFR5cGUobm9kZS5ndWFyZCkKICAgICAgICAgIDogY29uc3QgRHluYW1pY1R5cGUoKTsKICAgICAgaWYgKHR5cGUuaXNJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgSW50ZXJmYWNlVHlwZSBpbnRlcmZhY2VUeXBlID0gdHlwZTsKICAgICAgICBtYXNrID0gX3R5cGVzLm5vbk51bGxTdWJ0eXBlKGludGVyZmFjZVR5cGUuZWxlbWVudCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWFzayA9IF90eXBlcy5keW5hbWljVHlwZTsKICAgICAgfQogICAgICBMb2NhbCBsb2NhbCA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZShleGNlcHRpb24pOwogICAgICBfc3RhdGUudXBkYXRlTG9jYWwoCiAgICAgICAgICBfaW5mZXJyZXIsIF9jYXB0dXJlZEFuZEJveGVkLCBsb2NhbCwgbWFzaywgbm9kZSwgY29uc3QgRHluYW1pY1R5cGUoKSwKICAgICAgICAgIGlzTnVsbGFibGU6IGZhbHNlIC8qIGB0aHJvdyBudWxsYCBwcm9kdWNlcyBhIE51bGxUaHJvd25FcnJvciAqLyk7CiAgICB9CiAgICBpci5WYXJpYWJsZURlY2xhcmF0aW9uIHN0YWNrVHJhY2UgPSBub2RlLnN0YWNrVHJhY2U7CiAgICBpZiAoc3RhY2tUcmFjZSAhPSBudWxsKSB7CiAgICAgIExvY2FsIGxvY2FsID0gX2xvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKHN0YWNrVHJhY2UpOwogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVc2UgYSBtYXNrIGJhc2VkIG9uIFtTdGFja1RyYWNlXS4KICAgICAgLy8gTm90ZTogc3RhY2sgdHJhY2UgbWF5IGJlIG51bGwgaWYgdXNlcnMgb21pdCBhIHN0YWNrIGluCiAgICAgIC8vIGBjb21wbGV0ZXIuY29tcGxldGVFcnJvcmAuCiAgICAgIF9zdGF0ZS51cGRhdGVMb2NhbChfaW5mZXJyZXIsIF9jYXB0dXJlZEFuZEJveGVkLCBsb2NhbCwKICAgICAgICAgIF90eXBlcy5keW5hbWljVHlwZSwgbm9kZSwgY29uc3QgRHluYW1pY1R5cGUoKSk7CiAgICB9CiAgICB2aXNpdChub2RlLmJvZHkpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRUaHJvdyhpci5UaHJvdyBub2RlKSB7CiAgICB2aXNpdChub2RlLmV4cHJlc3Npb24pOwogICAgX3N0YXRlLnNlZW5SZXR1cm5PclRocm93ID0gdHJ1ZTsKICAgIHJldHVybiBfdHlwZXMubm9uTnVsbEVtcHR5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRSZXRocm93KGlyLlJldGhyb3cgbm9kZSkgewogICAgX3N0YXRlLnNlZW5SZXR1cm5PclRocm93ID0gdHJ1ZTsKICAgIHJldHVybiBfdHlwZXMubm9uTnVsbEVtcHR5KCk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gaGFuZGxlU3VwZXJOb1N1Y2hNZXRob2QoaXIuTm9kZSBub2RlLCBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrLCBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHMpIHsKICAgIC8vIEVuc3VyZSB3ZSBjcmVhdGUgYSBub2RlLCB0byBtYWtlIGV4cGxpY2l0IHRoZSBjYWxsIHRvIHRoZQogICAgLy8gYG5vU3VjaE1ldGhvZGAgaGFuZGxlci4KICAgIEZ1bmN0aW9uRW50aXR5IG5vU3VjaE1ldGhvZCA9CiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U3VwZXJOb1N1Y2hNZXRob2QoX2FuYWx5emVkTWVtYmVyLmVuY2xvc2luZ0NsYXNzKTsKICAgIHJldHVybiBoYW5kbGVTdGF0aWNJbnZva2Uobm9kZSwgc2VsZWN0b3IsIG1hc2ssIG5vU3VjaE1ldGhvZCwgYXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdFN1cGVyUHJvcGVydHlHZXQoaXIuU3VwZXJQcm9wZXJ0eUdldCBub2RlKSB7CiAgICAvLyBUT0RPKGhlcmh1dCk6IFdlIGNvdWxkIGRvIGJldHRlciBoZXJlIGlmIHdlIGtuZXcgd2hhdCB3ZQogICAgLy8gYXJlIGNhbGxpbmcgZG9lcyBub3QgZXhwb3NlIHRoaXMuCiAgICBfc3RhdGUubWFya1RoaXNBc0V4cG9zZWQoKTsKCiAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0KICAgICAgICBfZWxlbWVudE1hcC5nZXRTdXBlck1lbWJlcihfYW5hbHl6ZWRNZW1iZXIsIG5vZGUubmFtZSk7CiAgICBhc3NlcnQobWVtYmVyICE9IG51bGwsICJObyBtZW1iZXIgZm91bmQgZm9yIHN1cGVyIHByb3BlcnR5IGdldDogJG5vZGUiKTsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IF9tZW1iZXJEYXRhLnR5cGVPZlNlbmQobm9kZSk7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IG5ldyBTZWxlY3Rvci5nZXR0ZXIoX2VsZW1lbnRNYXAuZ2V0TmFtZShub2RlLm5hbWUpKTsKICAgIFR5cGVJbmZvcm1hdGlvbiB0eXBlID0KICAgICAgICBoYW5kbGVTdGF0aWNJbnZva2Uobm9kZSwgc2VsZWN0b3IsIG1hc2ssIG1lbWJlciwgbnVsbCk7CiAgICBpZiAobWVtYmVyLmlzR2V0dGVyKSB7CiAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPQogICAgICAgICAgX2VsZW1lbnRNYXAuZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZShtZW1iZXIpOwogICAgICBpZiAoZnVuY3Rpb25UeXBlLnJldHVyblR5cGUuY29udGFpbnNGcmVlVHlwZVZhcmlhYmxlcykgewogICAgICAgIC8vIFRoZSByZXN1bHQgdHlwZSB2YXJpZXMgd2l0aCB0aGUgY2FsbCBzaXRlIHNvIHdlIG5hcnJvdyB0aGUgc3RhdGljCiAgICAgICAgLy8gcmVzdWx0IHR5cGUuCiAgICAgICAgdHlwZSA9IF90eXBlcy5uYXJyb3dUeXBlKHR5cGUsIF9nZXRTdGF0aWNUeXBlKG5vZGUpKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChtZW1iZXIuaXNGaWVsZCkgewogICAgICBEYXJ0VHlwZSBmaWVsZFR5cGUgPSBfZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQuZ2V0RmllbGRUeXBlKG1lbWJlcik7CiAgICAgIGlmIChmaWVsZFR5cGUuY29udGFpbnNGcmVlVHlwZVZhcmlhYmxlcykgewogICAgICAgIC8vIFRoZSByZXN1bHQgdHlwZSB2YXJpZXMgd2l0aCB0aGUgY2FsbCBzaXRlIHNvIHdlIG5hcnJvdyB0aGUgc3RhdGljCiAgICAgICAgLy8gcmVzdWx0IHR5cGUuCiAgICAgICAgdHlwZSA9IF90eXBlcy5uYXJyb3dUeXBlKHR5cGUsIF9nZXRTdGF0aWNUeXBlKG5vZGUpKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRTdXBlclByb3BlcnR5U2V0KGlyLlN1cGVyUHJvcGVydHlTZXQgbm9kZSkgewogICAgLy8gVE9ETyhoZXJodXQpOiBXZSBjb3VsZCBkbyBiZXR0ZXIgaGVyZSBpZiB3ZSBrbmV3IHdoYXQgd2UKICAgIC8vIGFyZSBjYWxsaW5nIGRvZXMgbm90IGV4cG9zZSB0aGlzLgogICAgX3N0YXRlLm1hcmtUaGlzQXNFeHBvc2VkKCk7CgogICAgVHlwZUluZm9ybWF0aW9uIHJoc1R5cGUgPSB2aXNpdChub2RlLnZhbHVlKTsKICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPQogICAgICAgIF9lbGVtZW50TWFwLmdldFN1cGVyTWVtYmVyKF9hbmFseXplZE1lbWJlciwgbm9kZS5uYW1lLCBzZXR0ZXI6IHRydWUpOwogICAgYXNzZXJ0KG1lbWJlciAhPSBudWxsLCAiTm8gbWVtYmVyIGZvdW5kIGZvciBzdXBlciBwcm9wZXJ0eSBzZXQ6ICRub2RlIik7CiAgICBBYnN0cmFjdFZhbHVlIG1hc2sgPSBfbWVtYmVyRGF0YS50eXBlT2ZTZW5kKG5vZGUpOwogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBuZXcgU2VsZWN0b3Iuc2V0dGVyKF9lbGVtZW50TWFwLmdldE5hbWUobm9kZS5uYW1lKSk7CiAgICBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHMgPSBuZXcgQXJndW1lbnRzVHlwZXMoW3Joc1R5cGVdLCBudWxsKTsKICAgIGhhbmRsZVN0YXRpY0ludm9rZShub2RlLCBzZWxlY3RvciwgbWFzaywgbWVtYmVyLCBhcmd1bWVudHMpOwogICAgcmV0dXJuIHJoc1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRTdXBlck1ldGhvZEludm9jYXRpb24oaXIuU3VwZXJNZXRob2RJbnZvY2F0aW9uIG5vZGUpIHsKICAgIC8vIFRPRE8oaGVyaHV0KTogV2UgY291bGQgZG8gYmV0dGVyIGhlcmUgaWYgd2Uga25ldyB3aGF0IHdlCiAgICAvLyBhcmUgY2FsbGluZyBkb2VzIG5vdCBleHBvc2UgdGhpcy4KICAgIF9zdGF0ZS5tYXJrVGhpc0FzRXhwb3NlZCgpOwoKICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPQogICAgICAgIF9lbGVtZW50TWFwLmdldFN1cGVyTWVtYmVyKF9hbmFseXplZE1lbWJlciwgbm9kZS5uYW1lKTsKICAgIEFyZ3VtZW50c1R5cGVzIGFyZ3VtZW50cyA9IGFuYWx5emVBcmd1bWVudHMobm9kZS5hcmd1bWVudHMpOwogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBfZWxlbWVudE1hcC5nZXRTZWxlY3Rvcihub2RlKTsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IF9tZW1iZXJEYXRhLnR5cGVPZlNlbmQobm9kZSk7CiAgICBpZiAobWVtYmVyID09IG51bGwpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVGhpcyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LgogICAgICByZXR1cm4gaGFuZGxlU3VwZXJOb1N1Y2hNZXRob2Qobm9kZSwgc2VsZWN0b3IsIG1hc2ssIGFyZ3VtZW50cyk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQobWVtYmVyLmlzRnVuY3Rpb24sICJVbmV4cGVjdGVkIHN1cGVyIGludm9jYXRpb24gdGFyZ2V0OiAkbWVtYmVyIik7CiAgICAgIGlmIChpc0luY29tcGF0aWJsZUludm9rZShtZW1iZXIsIGFyZ3VtZW50cykpIHsKICAgICAgICByZXR1cm4gaGFuZGxlU3VwZXJOb1N1Y2hNZXRob2Qobm9kZSwgc2VsZWN0b3IsIG1hc2ssIGFyZ3VtZW50cyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgVHlwZUluZm9ybWF0aW9uIHR5cGUgPQogICAgICAgICAgICBoYW5kbGVTdGF0aWNJbnZva2Uobm9kZSwgc2VsZWN0b3IsIG1hc2ssIG1lbWJlciwgYXJndW1lbnRzKTsKICAgICAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlID0KICAgICAgICAgICAgX2VsZW1lbnRNYXAuZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZShtZW1iZXIpOwogICAgICAgIGlmIChmdW5jdGlvblR5cGUucmV0dXJuVHlwZS5jb250YWluc0ZyZWVUeXBlVmFyaWFibGVzKSB7CiAgICAgICAgICAvLyBUaGUgcmV0dXJuIHR5cGUgdmFyaWVzIHdpdGggdGhlIGNhbGwgc2l0ZSBzbyB3ZSBuYXJyb3cgdGhlIHN0YXRpYwogICAgICAgICAgLy8gcmV0dXJuIHR5cGUuCiAgICAgICAgICB0eXBlID0gX3R5cGVzLm5hcnJvd1R5cGUodHlwZSwgX2dldFN0YXRpY1R5cGUobm9kZSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHlwZTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0QXNFeHByZXNzaW9uKGlyLkFzRXhwcmVzc2lvbiBub2RlKSB7CiAgICBUeXBlSW5mb3JtYXRpb24gb3BlcmFuZFR5cGUgPSB2aXNpdChub2RlLm9wZXJhbmQpOwogICAgcmV0dXJuIF90eXBlcy5uYXJyb3dUeXBlKG9wZXJhbmRUeXBlLCBfZWxlbWVudE1hcC5nZXREYXJ0VHlwZShub2RlLnR5cGUpKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdEF3YWl0RXhwcmVzc2lvbihpci5Bd2FpdEV4cHJlc3Npb24gbm9kZSkgewogICAgVHlwZUluZm9ybWF0aW9uIGZ1dHVyZVR5cGUgPSB2aXNpdChub2RlLm9wZXJhbmQpOwogICAgcmV0dXJuIF9pbmZlcnJlci5yZWdpc3RlckF3YWl0KG5vZGUsIGZ1dHVyZVR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0WWllbGRTdGF0ZW1lbnQoaXIuWWllbGRTdGF0ZW1lbnQgbm9kZSkgewogICAgVHlwZUluZm9ybWF0aW9uIG9wZXJhbmRUeXBlID0gdmlzaXQobm9kZS5leHByZXNzaW9uKTsKICAgIHJldHVybiBfaW5mZXJyZXIucmVnaXN0ZXJZaWVsZChub2RlLCBvcGVyYW5kVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRDaGVja0xpYnJhcnlJc0xvYWRlZChpci5DaGVja0xpYnJhcnlJc0xvYWRlZCBub2RlKSB7CiAgICByZXR1cm4gX3R5cGVzLm5vbk51bGxFbXB0eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0SW52YWxpZEV4cHJlc3Npb24oaXIuSW52YWxpZEV4cHJlc3Npb24gbm9kZSkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWF5YmUgdGhpcyBzaG91bGQgYmUgW2VtcHR5XSBpbnN0ZWFkPwogICAgcmV0dXJuIF90eXBlcy5keW5hbWljVHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdENvbnN0YW50RXhwcmVzc2lvbihpci5Db25zdGFudEV4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIG5ldyBUeXBlSW5mb3JtYXRpb25Db25zdGFudFZpc2l0b3IodGhpcywgbm9kZSkKICAgICAgICAudmlzaXRDb25zdGFudChub2RlLmNvbnN0YW50KTsKICB9Cn0KCmNsYXNzIFR5cGVJbmZvcm1hdGlvbkNvbnN0YW50VmlzaXRvcgogICAgZXh0ZW5kcyBpci5Db21wdXRlT25jZUNvbnN0YW50VmlzaXRvcjxUeXBlSW5mb3JtYXRpb24+IHsKICBmaW5hbCBLZXJuZWxUeXBlR3JhcGhCdWlsZGVyIGJ1aWxkZXI7CiAgZmluYWwgaXIuQ29uc3RhbnRFeHByZXNzaW9uIGV4cHJlc3Npb247CgogIFR5cGVJbmZvcm1hdGlvbkNvbnN0YW50VmlzaXRvcih0aGlzLmJ1aWxkZXIsIHRoaXMuZXhwcmVzc2lvbik7CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiBkZWZhdWx0Q29uc3RhbnQoaXIuQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlVuZXhwZWN0ZWQgY29uc3RhbnQ6ICIKICAgICAgICAiJHtub2RlfSAoJHtub2RlLnJ1bnRpbWVUeXBlfSkiKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdE51bGxDb25zdGFudChpci5OdWxsQ29uc3RhbnQgbm9kZSkgewogICAgcmV0dXJuIGJ1aWxkZXIuY3JlYXRlTnVsbFR5cGVJbmZvcm1hdGlvbigpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0Qm9vbENvbnN0YW50KGlyLkJvb2xDb25zdGFudCBub2RlKSB7CiAgICByZXR1cm4gYnVpbGRlci5jcmVhdGVCb29sVHlwZUluZm9ybWF0aW9uKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0SW50Q29uc3RhbnQoaXIuSW50Q29uc3RhbnQgbm9kZSkgewogICAgcmV0dXJuIGJ1aWxkZXIuY3JlYXRlSW50VHlwZUluZm9ybWF0aW9uKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0RG91YmxlQ29uc3RhbnQoaXIuRG91YmxlQ29uc3RhbnQgbm9kZSkgewogICAgcmV0dXJuIGJ1aWxkZXIuY3JlYXRlRG91YmxlVHlwZUluZm9ybWF0aW9uKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0U3RyaW5nQ29uc3RhbnQoaXIuU3RyaW5nQ29uc3RhbnQgbm9kZSkgewogICAgcmV0dXJuIGJ1aWxkZXIuY3JlYXRlU3RyaW5nVHlwZUluZm9ybWF0aW9uKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0U3ltYm9sQ29uc3RhbnQoaXIuU3ltYm9sQ29uc3RhbnQgbm9kZSkgewogICAgcmV0dXJuIGJ1aWxkZXIuY3JlYXRlU3ltYm9sTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbigpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0TWFwQ29uc3RhbnQoaXIuTWFwQ29uc3RhbnQgbm9kZSkgewogICAgcmV0dXJuIGJ1aWxkZXIuY3JlYXRlTWFwVHlwZUluZm9ybWF0aW9uKAogICAgICAgIG5ldyBDb25zdGFudFJlZmVyZW5jZShleHByZXNzaW9uLCBub2RlKSwKICAgICAgICBub2RlLmVudHJpZXMKICAgICAgICAgICAgLm1hcCgoZSkgPT4gbmV3IFBhaXIodmlzaXRDb25zdGFudChlLmtleSksIHZpc2l0Q29uc3RhbnQoZS52YWx1ZSkpKSwKICAgICAgICBpc0NvbnN0OiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdExpc3RDb25zdGFudChpci5MaXN0Q29uc3RhbnQgbm9kZSkgewogICAgcmV0dXJuIGJ1aWxkZXIuY3JlYXRlTGlzdFR5cGVJbmZvcm1hdGlvbigKICAgICAgICBuZXcgQ29uc3RhbnRSZWZlcmVuY2UoZXhwcmVzc2lvbiwgbm9kZSksCiAgICAgICAgbm9kZS5lbnRyaWVzLm1hcCgoZSkgPT4gdmlzaXRDb25zdGFudChlKSksCiAgICAgICAgaXNDb25zdDogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRTZXRDb25zdGFudChpci5TZXRDb25zdGFudCBub2RlKSB7CiAgICByZXR1cm4gYnVpbGRlci5jcmVhdGVTZXRUeXBlSW5mb3JtYXRpb24oCiAgICAgICAgbmV3IENvbnN0YW50UmVmZXJlbmNlKGV4cHJlc3Npb24sIG5vZGUpLAogICAgICAgIG5vZGUuZW50cmllcy5tYXAoKGUpID0+IHZpc2l0Q29uc3RhbnQoZSkpLAogICAgICAgIGlzQ29uc3Q6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0SW5zdGFuY2VDb25zdGFudChpci5JbnN0YW5jZUNvbnN0YW50IG5vZGUpIHsKICAgIG5vZGUuZmllbGRWYWx1ZXMuZm9yRWFjaCgoaXIuUmVmZXJlbmNlIHJlZmVyZW5jZSwgaXIuQ29uc3RhbnQgdmFsdWUpIHsKICAgICAgYnVpbGRlci5faW5mZXJyZXIucmVjb3JkVHlwZU9mRmllbGQoCiAgICAgICAgICBidWlsZGVyLl9lbGVtZW50TWFwLmdldEZpZWxkKHJlZmVyZW5jZS5hc0ZpZWxkKSwKICAgICAgICAgIHZpc2l0Q29uc3RhbnQodmFsdWUpKTsKICAgIH0pOwogICAgcmV0dXJuIGJ1aWxkZXIuX3R5cGVzLmdldENvbmNyZXRlVHlwZUZvcihidWlsZGVyCiAgICAgICAgLl9jbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgLmNyZWF0ZU5vbk51bGxFeGFjdChidWlsZGVyLl9lbGVtZW50TWFwLmdldENsYXNzKG5vZGUuY2xhc3NOb2RlKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0UGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCgKICAgICAgaXIuUGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCBub2RlKSB7CiAgICByZXR1cm4gYnVpbGRlci5jcmVhdGVJbnN0YW50aWF0aW9uVHlwZUluZm9ybWF0aW9uKAogICAgICAgIHZpc2l0Q29uc3RhbnQobm9kZS50ZWFyT2ZmQ29uc3RhbnQpKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdFRlYXJPZmZDb25zdGFudChpci5UZWFyT2ZmQ29uc3RhbnQgbm9kZSkgewogICAgcmV0dXJuIGJ1aWxkZXIuY3JlYXRlU3RhdGljR2V0VHlwZUluZm9ybWF0aW9uKG5vZGUsIG5vZGUucHJvY2VkdXJlKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdFR5cGVMaXRlcmFsQ29uc3RhbnQoaXIuVHlwZUxpdGVyYWxDb25zdGFudCBub2RlKSB7CiAgICByZXR1cm4gYnVpbGRlci5jcmVhdGVUeXBlTGl0ZXJhbEluZm9ybWF0aW9uKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRVbmV2YWx1YXRlZENvbnN0YW50KGlyLlVuZXZhbHVhdGVkQ29uc3RhbnQgbm9kZSkgewogICAgYXNzZXJ0KGZhbHNlLCAiVW5leHBlY3RlZCB1bmV2YWx1YXRlZCBjb25zdGFudDogJG5vZGUiKTsKICAgIHJldHVybiBidWlsZGVyLl90eXBlcy5keW5hbWljVHlwZTsKICB9Cn0KCmNsYXNzIFJlZmluZW1lbnQgewogIGZpbmFsIFNlbGVjdG9yIHNlbGVjdG9yOwogIGZpbmFsIEFic3RyYWN0VmFsdWUgbWFzazsKCiAgUmVmaW5lbWVudCh0aGlzLnNlbGVjdG9yLCB0aGlzLm1hc2spOwp9CgpjbGFzcyBMb2NhbFN0YXRlIHsKICBmaW5hbCBMb2NhbHNIYW5kbGVyIF9sb2NhbHM7CiAgZmluYWwgRmllbGRJbml0aWFsaXphdGlvblNjb3BlIF9maWVsZHM7CiAgYm9vbCBzZWVuUmV0dXJuT3JUaHJvdyA9IGZhbHNlOwogIGJvb2wgc2VlbkJyZWFrT3JDb250aW51ZSA9IGZhbHNlOwogIExvY2Fsc0hhbmRsZXIgX3RyeUJsb2NrOwoKICBMb2NhbFN0YXRlLmluaXRpYWwoe2Jvb2wgaW5HZW5lcmF0aXZlQ29uc3RydWN0b3J9KQogICAgICA6IHRoaXMuaW50ZXJuYWwoCiAgICAgICAgICAgIG5ldyBMb2NhbHNIYW5kbGVyKCksCiAgICAgICAgICAgIGluR2VuZXJhdGl2ZUNvbnN0cnVjdG9yID8gbmV3IEZpZWxkSW5pdGlhbGl6YXRpb25TY29wZSgpIDogbnVsbCwKICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgc2VlblJldHVybk9yVGhyb3c6IGZhbHNlLAogICAgICAgICAgICBzZWVuQnJlYWtPckNvbnRpbnVlOiBmYWxzZSk7CgogIExvY2FsU3RhdGUuY2hpbGRQYXRoKExvY2FsU3RhdGUgb3RoZXIpCiAgICAgIDogdGhpcy5pbnRlcm5hbChuZXcgTG9jYWxzSGFuZGxlci5mcm9tKG90aGVyLl9sb2NhbHMpLAogICAgICAgICAgICBuZXcgRmllbGRJbml0aWFsaXphdGlvblNjb3BlLmZyb20ob3RoZXIuX2ZpZWxkcyksIG90aGVyLl90cnlCbG9jaywKICAgICAgICAgICAgc2VlblJldHVybk9yVGhyb3c6IGZhbHNlLCBzZWVuQnJlYWtPckNvbnRpbnVlOiBmYWxzZSk7CgogIExvY2FsU3RhdGUuY2xvc3VyZShMb2NhbFN0YXRlIG90aGVyKQogICAgICA6IHRoaXMuaW50ZXJuYWwobmV3IExvY2Fsc0hhbmRsZXIuZnJvbShvdGhlci5fbG9jYWxzKSwKICAgICAgICAgICAgbmV3IEZpZWxkSW5pdGlhbGl6YXRpb25TY29wZS5mcm9tKG90aGVyLl9maWVsZHMpLCBudWxsLAogICAgICAgICAgICBzZWVuUmV0dXJuT3JUaHJvdzogZmFsc2UsIHNlZW5CcmVha09yQ29udGludWU6IGZhbHNlKTsKCiAgZmFjdG9yeSBMb2NhbFN0YXRlLnRyeUJsb2NrKExvY2FsU3RhdGUgb3RoZXIsIGlyLlRyZWVOb2RlIG5vZGUpIHsKICAgIExvY2Fsc0hhbmRsZXIgbG9jYWxzID0gbmV3IExvY2Fsc0hhbmRsZXIudHJ5QmxvY2sob3RoZXIuX2xvY2Fscywgbm9kZSk7CiAgICBGaWVsZEluaXRpYWxpemF0aW9uU2NvcGUgZmllbGRTY29wZSA9CiAgICAgICAgbmV3IEZpZWxkSW5pdGlhbGl6YXRpb25TY29wZS5mcm9tKG90aGVyLl9maWVsZHMpOwogICAgTG9jYWxzSGFuZGxlciB0cnlCbG9jayA9IGxvY2FsczsKICAgIHJldHVybiBuZXcgTG9jYWxTdGF0ZS5pbnRlcm5hbChsb2NhbHMsIGZpZWxkU2NvcGUsIHRyeUJsb2NrLAogICAgICAgIHNlZW5SZXR1cm5PclRocm93OiBmYWxzZSwgc2VlbkJyZWFrT3JDb250aW51ZTogZmFsc2UpOwogIH0KCiAgTG9jYWxTdGF0ZS5kZWVwQ29weU9mKExvY2FsU3RhdGUgb3RoZXIpCiAgICAgIDogX2xvY2FscyA9IG5ldyBMb2NhbHNIYW5kbGVyLmRlZXBDb3B5T2Yob3RoZXIuX2xvY2FscyksCiAgICAgICAgX3RyeUJsb2NrID0gb3RoZXIuX3RyeUJsb2NrLAogICAgICAgIF9maWVsZHMgPSBvdGhlci5fZmllbGRzOwoKICBMb2NhbFN0YXRlLmludGVybmFsKHRoaXMuX2xvY2FscywgdGhpcy5fZmllbGRzLCB0aGlzLl90cnlCbG9jaywKICAgICAge3RoaXMuc2VlblJldHVybk9yVGhyb3csIHRoaXMuc2VlbkJyZWFrT3JDb250aW51ZX0pOwoKICBib29sIGdldCBhYm9ydHMgewogICAgcmV0dXJuIHNlZW5SZXR1cm5PclRocm93IHx8IHNlZW5CcmVha09yQ29udGludWU7CiAgfQoKICBib29sIGdldCBpc1RoaXNFeHBvc2VkIHsKICAgIHJldHVybiBfZmllbGRzID09IG51bGwgfHwgX2ZpZWxkcy5pc1RoaXNFeHBvc2VkOwogIH0KCiAgdm9pZCBtYXJrVGhpc0FzRXhwb3NlZCgpIHsKICAgIF9maWVsZHM/LmlzVGhpc0V4cG9zZWQgPSB0cnVlOwogIH0KCiAgdm9pZCBtYXJrSW5pdGlhbGl6YXRpb25Bc0luZGVmaW5pdGUoKSB7CiAgICBfZmllbGRzPy5pc0luZGVmaW5pdGUgPSB0cnVlOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIHJlYWRGaWVsZChGaWVsZEVudGl0eSBmaWVsZCkgewogICAgcmV0dXJuIF9maWVsZHMucmVhZEZpZWxkKGZpZWxkKTsKICB9CgogIHZvaWQgdXBkYXRlRmllbGQoRmllbGRFbnRpdHkgZmllbGQsIFR5cGVJbmZvcm1hdGlvbiB0eXBlKSB7CiAgICBfZmllbGRzLnVwZGF0ZUZpZWxkKGZpZWxkLCB0eXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiByZWFkTG9jYWwoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIsCiAgICAgIE1hcDxMb2NhbCwgRmllbGRFbnRpdHk+IGNhcHR1cmVkQW5kQm94ZWQsIExvY2FsIGxvY2FsKSB7CiAgICBGaWVsZEVudGl0eSBmaWVsZCA9IGNhcHR1cmVkQW5kQm94ZWRbbG9jYWxdOwogICAgaWYgKGZpZWxkICE9IG51bGwpIHsKICAgICAgcmV0dXJuIGluZmVycmVyLnR5cGVPZk1lbWJlcihmaWVsZCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX2xvY2Fscy51c2UoaW5mZXJyZXIsIGxvY2FsKTsKICAgIH0KICB9CgogIHZvaWQgdXBkYXRlTG9jYWwoCiAgICAgIEluZmVycmVyRW5naW5lIGluZmVycmVyLAogICAgICBNYXA8TG9jYWwsIEZpZWxkRW50aXR5PiBjYXB0dXJlZEFuZEJveGVkLAogICAgICBMb2NhbCBsb2NhbCwKICAgICAgVHlwZUluZm9ybWF0aW9uIHR5cGUsCiAgICAgIGlyLk5vZGUgbm9kZSwKICAgICAgRGFydFR5cGUgc3RhdGljVHlwZSwKICAgICAge2lzTnVsbGFibGU6IHRydWV9KSB7CiAgICBhc3NlcnQodHlwZSAhPSBudWxsKTsKICAgIHR5cGUgPSBpbmZlcnJlci50eXBlcy5uYXJyb3dUeXBlKHR5cGUsIHN0YXRpY1R5cGUsIGlzTnVsbGFibGU6IGlzTnVsbGFibGUpOwoKICAgIEZpZWxkRW50aXR5IGZpZWxkID0gY2FwdHVyZWRBbmRCb3hlZFtsb2NhbF07CiAgICBpZiAoZmllbGQgIT0gbnVsbCkgewogICAgICBpbmZlcnJlci5yZWNvcmRUeXBlT2ZGaWVsZChmaWVsZCwgdHlwZSk7CiAgICB9IGVsc2UgewogICAgICBfbG9jYWxzLnVwZGF0ZShpbmZlcnJlciwgbG9jYWwsIHR5cGUsIG5vZGUsIHN0YXRpY1R5cGUsIF90cnlCbG9jayk7CiAgICB9CiAgfQoKICB2b2lkIG5hcnJvd0xvY2FsKAogICAgICBJbmZlcnJlckVuZ2luZSBpbmZlcnJlciwKICAgICAgTWFwPExvY2FsLCBGaWVsZEVudGl0eT4gY2FwdHVyZWRBbmRCb3hlZCwKICAgICAgTG9jYWwgbG9jYWwsCiAgICAgIERhcnRUeXBlIHR5cGUsCiAgICAgIGlyLk5vZGUgbm9kZSkgewogICAgVHlwZUluZm9ybWF0aW9uIGN1cnJlbnRUeXBlID0gcmVhZExvY2FsKGluZmVycmVyLCBjYXB0dXJlZEFuZEJveGVkLCBsb2NhbCk7CiAgICB1cGRhdGVMb2NhbChpbmZlcnJlciwgY2FwdHVyZWRBbmRCb3hlZCwgbG9jYWwsIGN1cnJlbnRUeXBlLCBub2RlLCB0eXBlLAogICAgICAgIGlzTnVsbGFibGU6IGZhbHNlKTsKICB9CgogIExvY2FsU3RhdGUgbWVyZ2VGbG93KEluZmVycmVyRW5naW5lIGluZmVycmVyLCBMb2NhbFN0YXRlIG90aGVyKSB7CiAgICBzZWVuUmV0dXJuT3JUaHJvdyA9IGZhbHNlOwogICAgc2VlbkJyZWFrT3JDb250aW51ZSA9IGZhbHNlOwoKICAgIGlmIChvdGhlci5hYm9ydHMpIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICBMb2NhbHNIYW5kbGVyIGxvY2FscyA9IF9sb2NhbHMubWVyZ2VGbG93KGluZmVycmVyLCBvdGhlci5fbG9jYWxzKTsKICAgIHJldHVybiBuZXcgTG9jYWxTdGF0ZS5pbnRlcm5hbChsb2NhbHMsIF9maWVsZHMsIF90cnlCbG9jaywKICAgICAgICBzZWVuUmV0dXJuT3JUaHJvdzogc2VlblJldHVybk9yVGhyb3csCiAgICAgICAgc2VlbkJyZWFrT3JDb250aW51ZTogc2VlbkJyZWFrT3JDb250aW51ZSk7CiAgfQoKICBMb2NhbFN0YXRlIG1lcmdlRGlhbW9uZEZsb3coCiAgICAgIEluZmVycmVyRW5naW5lIGluZmVycmVyLCBMb2NhbFN0YXRlIHRoZW5CcmFuY2gsIExvY2FsU3RhdGUgZWxzZUJyYW5jaCkgewogICAgc2VlblJldHVybk9yVGhyb3cgPQogICAgICAgIHRoZW5CcmFuY2guc2VlblJldHVybk9yVGhyb3cgJiYgZWxzZUJyYW5jaC5zZWVuUmV0dXJuT3JUaHJvdzsKICAgIHNlZW5CcmVha09yQ29udGludWUgPQogICAgICAgIHRoZW5CcmFuY2guc2VlbkJyZWFrT3JDb250aW51ZSAmJiBlbHNlQnJhbmNoLnNlZW5CcmVha09yQ29udGludWU7CgogICAgTG9jYWxzSGFuZGxlciBsb2NhbHM7CiAgICBpZiAoYWJvcnRzKSB7CiAgICAgIGxvY2FscyA9IF9sb2NhbHM7CiAgICB9IGVsc2UgaWYgKHRoZW5CcmFuY2guYWJvcnRzKSB7CiAgICAgIGxvY2FscyA9IF9sb2NhbHMubWVyZ2VGbG93KGluZmVycmVyLCBlbHNlQnJhbmNoLl9sb2NhbHMsIGluUGxhY2U6IHRydWUpOwogICAgfSBlbHNlIGlmIChlbHNlQnJhbmNoLmFib3J0cykgewogICAgICBsb2NhbHMgPSBfbG9jYWxzLm1lcmdlRmxvdyhpbmZlcnJlciwgdGhlbkJyYW5jaC5fbG9jYWxzLCBpblBsYWNlOiB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIGxvY2FscyA9IF9sb2NhbHMubWVyZ2VEaWFtb25kRmxvdygKICAgICAgICAgIGluZmVycmVyLCB0aGVuQnJhbmNoLl9sb2NhbHMsIGVsc2VCcmFuY2guX2xvY2Fscyk7CiAgICB9CgogICAgRmllbGRJbml0aWFsaXphdGlvblNjb3BlIGZpZWxkU2NvcGUgPSBfZmllbGRzPy5tZXJnZURpYW1vbmRGbG93KAogICAgICAgIGluZmVycmVyLCB0aGVuQnJhbmNoLl9maWVsZHMsIGVsc2VCcmFuY2guX2ZpZWxkcyk7CiAgICByZXR1cm4gbmV3IExvY2FsU3RhdGUuaW50ZXJuYWwobG9jYWxzLCBmaWVsZFNjb3BlLCBfdHJ5QmxvY2ssCiAgICAgICAgc2VlblJldHVybk9yVGhyb3c6IHNlZW5SZXR1cm5PclRocm93LAogICAgICAgIHNlZW5CcmVha09yQ29udGludWU6IHNlZW5CcmVha09yQ29udGludWUpOwogIH0KCiAgTG9jYWxTdGF0ZSBtZXJnZUFmdGVyQnJlYWtzKEluZmVycmVyRW5naW5lIGluZmVycmVyLCBMaXN0PExvY2FsU3RhdGU+IHN0YXRlcywKICAgICAge2Jvb2wga2VlcE93bkxvY2FsczogdHJ1ZX0pIHsKICAgIGJvb2wgYWxsQnJhbmNoZXNBYm9ydCA9IHRydWU7CiAgICBmb3IgKExvY2FsU3RhdGUgc3RhdGUgaW4gc3RhdGVzKSB7CiAgICAgIGFsbEJyYW5jaGVzQWJvcnQgPSBhbGxCcmFuY2hlc0Fib3J0ICYmIHN0YXRlLnNlZW5SZXR1cm5PclRocm93OwogICAgfQoKICAgIGtlZXBPd25Mb2NhbHMgPSBrZWVwT3duTG9jYWxzICYmICFzZWVuUmV0dXJuT3JUaHJvdzsKCiAgICBMb2NhbHNIYW5kbGVyIGxvY2FscyA9IF9sb2NhbHMubWVyZ2VBZnRlckJyZWFrcygKICAgICAgICBpbmZlcnJlciwKICAgICAgICBzdGF0ZXMKICAgICAgICAgICAgLndoZXJlKChMb2NhbFN0YXRlIHN0YXRlKSA9PiAhc3RhdGUuc2VlblJldHVybk9yVGhyb3cpCiAgICAgICAgICAgIC5tYXAoKExvY2FsU3RhdGUgc3RhdGUpID0+IHN0YXRlLl9sb2NhbHMpLAogICAgICAgIGtlZXBPd25Mb2NhbHM6IGtlZXBPd25Mb2NhbHMpOwogICAgc2VlblJldHVybk9yVGhyb3cgPSBhbGxCcmFuY2hlc0Fib3J0ICYmICFrZWVwT3duTG9jYWxzOwogICAgcmV0dXJuIG5ldyBMb2NhbFN0YXRlLmludGVybmFsKGxvY2FscywgX2ZpZWxkcywgX3RyeUJsb2NrLAogICAgICAgIHNlZW5SZXR1cm5PclRocm93OiBzZWVuUmV0dXJuT3JUaHJvdywKICAgICAgICBzZWVuQnJlYWtPckNvbnRpbnVlOiBzZWVuQnJlYWtPckNvbnRpbnVlKTsKICB9CgogIGJvb2wgbWVyZ2VBbGwoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIsIExpc3Q8TG9jYWxTdGF0ZT4gc3RhdGVzKSB7CiAgICBhc3NlcnQoIXNlZW5SZXR1cm5PclRocm93KTsKICAgIHJldHVybiBfbG9jYWxzLm1lcmdlQWxsKAogICAgICAgIGluZmVycmVyLAogICAgICAgIHN0YXRlcwogICAgICAgICAgICAud2hlcmUoKExvY2FsU3RhdGUgc3RhdGUpID0+ICFzdGF0ZS5zZWVuUmV0dXJuT3JUaHJvdykKICAgICAgICAgICAgLm1hcCgoTG9jYWxTdGF0ZSBzdGF0ZSkgPT4gc3RhdGUuX2xvY2FscykpOwogIH0KCiAgdm9pZCBzdGFydExvb3AoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIsIGlyLk5vZGUgbG9vcCkgewogICAgX2xvY2Fscy5zdGFydExvb3AoaW5mZXJyZXIsIGxvb3ApOwogIH0KCiAgdm9pZCBlbmRMb29wKEluZmVycmVyRW5naW5lIGluZmVycmVyLCBpci5Ob2RlIGxvb3ApIHsKICAgIF9sb2NhbHMuZW5kTG9vcChpbmZlcnJlciwgbG9vcCk7CiAgfQoKICBTdHJpbmcgdG9TdHJ1Y3R1cmVkVGV4dChTdHJpbmcgaW5kZW50KSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBfdG9TdHJ1Y3R1cmVkVGV4dChzYiwgaW5kZW50KTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgdm9pZCBfdG9TdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IsIFN0cmluZyBpbmRlbnQpIHsKICAgIHNiLndyaXRlKCdMb2NhbFN0YXRlKCRoYXNoQ29kZSkgWycpOwogICAgc2Iud3JpdGUoJ1xuJHtpbmRlbnR9ICBsb2NhbHM6Jyk7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L2luZmVycmVyL2J1aWxkZXJfa2VybmVsLmRhcnQ6c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvY2xvc3VyZV90cmFjZXIuZGFydJRILy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgY29tcGlsZXIuc3JjLmluZmVycmVyLmNsb3N1cmVfdHJhY2VyOwoKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCcgc2hvdyBJZGVudGlmaWVycywgTmFtZXM7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvcjsKaW1wb3J0ICdhYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnZGVidWcuZGFydCcgYXMgZGVidWc7CmltcG9ydCAnaW5mZXJyZXJfZW5naW5lLmRhcnQnOwppbXBvcnQgJ25vZGVfdHJhY2VyLmRhcnQnOwppbXBvcnQgJ3R5cGVfZ3JhcGhfbm9kZXMuZGFydCc7CgpjbGFzcyBDbG9zdXJlVHJhY2VyVmlzaXRvciBleHRlbmRzIFRyYWNlclZpc2l0b3IgewogIGZpbmFsIEl0ZXJhYmxlPEZ1bmN0aW9uRW50aXR5PiB0cmFjZWRFbGVtZW50czsKICBmaW5hbCBMaXN0PENhbGxTaXRlVHlwZUluZm9ybWF0aW9uPiBfY2FsbHNUb0FuYWx5emUgPQogICAgICBuZXcgTGlzdDxDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbj4oKTsKCiAgQ2xvc3VyZVRyYWNlclZpc2l0b3IodGhpcy50cmFjZWRFbGVtZW50cywgQXBwbHlhYmxlVHlwZUluZm9ybWF0aW9uIHRyYWNlZFR5cGUsCiAgICAgIEluZmVycmVyRW5naW5lIGluZmVycmVyKQogICAgICA6IHN1cGVyKHRyYWNlZFR5cGUsIGluZmVycmVyKSB7CiAgICBhc3NlcnQoCiAgICAgICAgdHJhY2VkRWxlbWVudHMuZXZlcnkoKGYpID0+ICFmLmlzQWJzdHJhY3QpLAogICAgICAgICJUcmFjaW5nIGFic3RyYWN0IG1ldGhvZHM6ICIKICAgICAgICAiJHt0cmFjZWRFbGVtZW50cy53aGVyZSgoZikgPT4gZi5pc0Fic3RyYWN0KX0iKTsKICB9CgogIEBvdmVycmlkZQogIEFwcGx5YWJsZVR5cGVJbmZvcm1hdGlvbiBnZXQgdHJhY2VkVHlwZSA9PiBzdXBlci50cmFjZWRUeXBlOwoKICB2b2lkIHJ1bigpIHsKICAgIGFuYWx5emUoKTsKICAgIGlmICghY29udGludWVBbmFseXppbmcpIHJldHVybjsKICAgIF9jYWxsc1RvQW5hbHl6ZS5mb3JFYWNoKF9hbmFseXplQ2FsbCk7CiAgICBmb3IgKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQgaW4gdHJhY2VkRWxlbWVudHMpIHsKICAgICAgaW5mZXJyZXIudHlwZXMuc3RyYXRlZ3kuZm9yRWFjaFBhcmFtZXRlcihlbGVtZW50LCAoTG9jYWwgcGFyYW1ldGVyKSB7CiAgICAgICAgRWxlbWVudFR5cGVJbmZvcm1hdGlvbiBpbmZvID0KICAgICAgICAgICAgaW5mZXJyZXIudHlwZXMuZ2V0SW5mZXJyZWRUeXBlT2ZQYXJhbWV0ZXIocGFyYW1ldGVyKTsKICAgICAgICBpbmZvLmRpc2FibGVJbmZlcmVuY2VGb3JDbG9zdXJlcyA9IGZhbHNlOwogICAgICB9KTsKICAgIH0KICB9CgogIHZvaWQgX3RhZ0FzRnVuY3Rpb25BcHBseVRhcmdldChbU3RyaW5nIHJlYXNvbl0pIHsKICAgIHRyYWNlZFR5cGUubWlnaHRCZVBhc3NlZFRvRnVuY3Rpb25BcHBseSA9IHRydWU7CiAgICBpZiAoZGVidWcuVkVSQk9TRSkgewogICAgICBwcmludCgiQ2xvc3VyZSAkdHJhY2VkVHlwZSBtaWdodCBiZSBwYXNzZWQgdG8gYXBwbHk6ICRyZWFzb24iKTsKICAgIH0KICB9CgogIHZvaWQgX3JlZ2lzdGVyQ2FsbEZvckxhdGVyQW5hbHlzaXMoQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgX2NhbGxzVG9BbmFseXplLmFkZChpbmZvKTsKICB9CgogIHZvaWQgX2FuYWx5emVDYWxsKENhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gaW5mby5zZWxlY3RvcjsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IGluZm8ubWFzazsKICAgIHRyYWNlZEVsZW1lbnRzLmZvckVhY2goKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uRWxlbWVudCkgewogICAgICBpZiAoIXNlbGVjdG9yLmNhbGxTdHJ1Y3R1cmUKICAgICAgICAgIC5zaWduYXR1cmVBcHBsaWVzKGZ1bmN0aW9uRWxlbWVudC5wYXJhbWV0ZXJTdHJ1Y3R1cmUpKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGluZmVycmVyLnVwZGF0ZVBhcmFtZXRlckFzc2lnbm1lbnRzKAogICAgICAgICAgaW5mbywgZnVuY3Rpb25FbGVtZW50LCBpbmZvLmFyZ3VtZW50cywgc2VsZWN0b3IsIG1hc2ssCiAgICAgICAgICByZW1vdmU6IGZhbHNlLCBhZGRUb1F1ZXVlOiBmYWxzZSk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q2xvc3VyZUNhbGxTaXRlVHlwZUluZm9ybWF0aW9uKENsb3N1cmVDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBzdXBlci52aXNpdENsb3N1cmVDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihpbmZvKTsKICAgIGlmIChpbmZvLmNsb3N1cmUgPT0gY3VycmVudFVzZXIpIHsKICAgICAgX3JlZ2lzdGVyQ2FsbEZvckxhdGVyQW5hbHlzaXMoaW5mbyk7CiAgICB9IGVsc2UgewogICAgICBiYWlsb3V0KCdQYXNzZWQgdG8gYSBjbG9zdXJlJyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFN0YXRpY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKFN0YXRpY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIHN1cGVyLnZpc2l0U3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oaW5mbyk7CiAgICBNZW1iZXJFbnRpdHkgY2FsbGVkID0gaW5mby5jYWxsZWRFbGVtZW50OwogICAgaWYgKGluZmVycmVyLmNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmlzRm9yZWlnbihjYWxsZWQpKSB7CiAgICAgIFN0cmluZyBuYW1lID0gY2FsbGVkLm5hbWU7CiAgICAgIGlmIChuYW1lID09IElkZW50aWZpZXJzLkpTIHx8IG5hbWUgPT0gSWRlbnRpZmllcnMuREFSVF9DTE9TVVJFX1RPX0pTKSB7CiAgICAgICAgYmFpbG91dCgnVXNlZCBpbiBKUyAke2luZm8uZGVidWdOYW1lfScpOwogICAgICB9CiAgICB9CiAgICBpZiAoY2FsbGVkLmlzR2V0dGVyICYmCiAgICAgICAgaW5mby5zZWxlY3RvciAhPSBudWxsICYmCiAgICAgICAgaW5mby5zZWxlY3Rvci5pc0NhbGwgJiYKICAgICAgICBpbmZlcnJlci50eXBlcy5nZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihjYWxsZWQpID09IGN1cnJlbnRVc2VyKSB7CiAgICAgIC8vIFRoaXMgbm9kZSBjYW4gYmUgYSBjbG9zdXJlIGNhbGwgYXMgd2VsbC4gRm9yIGV4YW1wbGUsIGBmb28oKWAKICAgICAgLy8gd2hlcmUgYGZvb2AgaXMgYSBnZXR0ZXIuCiAgICAgIF9yZWdpc3RlckNhbGxGb3JMYXRlckFuYWx5c2lzKGluZm8pOwogICAgfQogICAgaWYgKF9jaGVja0lmRnVuY3Rpb25BcHBseShjYWxsZWQpICYmCiAgICAgICAgaW5mby5hcmd1bWVudHMgIT0gbnVsbCAmJgogICAgICAgIGluZm8uYXJndW1lbnRzLmNvbnRhaW5zKGN1cnJlbnRVc2VyKSkgewogICAgICBfdGFnQXNGdW5jdGlvbkFwcGx5VGFyZ2V0KCJzdGF0aWMgY2FsbCIpOwogICAgfQogIH0KCiAgYm9vbCBfY2hlY2tJZkN1cnJlbnRVc2VyKE1lbWJlckVudGl0eSBlbGVtZW50KSA9PgogICAgICBpbmZlcnJlci50eXBlcy5nZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihlbGVtZW50KSA9PSBjdXJyZW50VXNlcjsKCiAgYm9vbCBfY2hlY2tJZkZ1bmN0aW9uQXBwbHkoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBpbmZlcnJlci5jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5pc0Z1bmN0aW9uQXBwbHlNZXRob2QoZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihEeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgc3VwZXIudmlzaXREeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oaW5mbyk7CiAgICBpZiAoaW5mby5zZWxlY3Rvci5pc0NhbGwpIHsKICAgICAgaWYgKGluZm8uYXJndW1lbnRzLmNvbnRhaW5zKGN1cnJlbnRVc2VyKSkgewogICAgICAgIGlmIChpbmZvLmhhc0Nsb3N1cmVDYWxsVGFyZ2V0cyB8fAogICAgICAgICAgICBpbmZvLmNvbmNyZXRlVGFyZ2V0cy5hbnkoKGVsZW1lbnQpID0+ICFlbGVtZW50LmlzRnVuY3Rpb24pKSB7CiAgICAgICAgICBiYWlsb3V0KCdQYXNzZWQgdG8gYSBjbG9zdXJlJyk7CiAgICAgICAgfQogICAgICAgIGlmIChpbmZvLmNvbmNyZXRlVGFyZ2V0cy5hbnkoX2NoZWNrSWZGdW5jdGlvbkFwcGx5KSkgewogICAgICAgICAgX3RhZ0FzRnVuY3Rpb25BcHBseVRhcmdldCgiZHluYW1pYyBjYWxsIik7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGluZm8uY29uY3JldGVUYXJnZXRzLmFueShfY2hlY2tJZkN1cnJlbnRVc2VyKSkgewogICAgICAgIF9yZWdpc3RlckNhbGxGb3JMYXRlckFuYWx5c2lzKGluZm8pOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGluZm8uc2VsZWN0b3IuaXNHZXR0ZXIgJiYKICAgICAgICBpbmZvLnNlbGVjdG9yLm1lbWJlck5hbWUgPT0gTmFtZXMuY2FsbCkgewogICAgICAvLyBXZSBhcmUgcG90ZW50aWFsbHkgdGVhcmluZyBvZmYgb3Vyc2VsZiBoZXJlCiAgICAgIGFkZE5ld0VzY2FwZUluZm9ybWF0aW9uKGluZm8pOwogICAgfQogIH0KfQoKY2xhc3MgU3RhdGljVGVhck9mZkNsb3N1cmVUcmFjZXJWaXNpdG9yIGV4dGVuZHMgQ2xvc3VyZVRyYWNlclZpc2l0b3IgewogIFN0YXRpY1RlYXJPZmZDbG9zdXJlVHJhY2VyVmlzaXRvcigKICAgICAgRnVuY3Rpb25FbnRpdHkgdHJhY2VkRWxlbWVudCwgdHJhY2VkVHlwZSwgaW5mZXJyZXIpCiAgICAgIDogc3VwZXIoW3RyYWNlZEVsZW1lbnRdLCB0cmFjZWRUeXBlLCBpbmZlcnJlcik7CgogIEBvdmVycmlkZQogIHZpc2l0U3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oU3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgc3VwZXIudmlzaXRTdGF0aWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihpbmZvKTsKICAgIGlmIChpbmZvLmNhbGxlZEVsZW1lbnQgPT0gdHJhY2VkRWxlbWVudHMuZmlyc3QgJiYKICAgICAgICBpbmZvLnNlbGVjdG9yICE9IG51bGwgJiYKICAgICAgICBpbmZvLnNlbGVjdG9yLmlzR2V0dGVyKSB7CiAgICAgIGFkZE5ld0VzY2FwZUluZm9ybWF0aW9uKGluZm8pOwogICAgfQogIH0KfQqAmABOTjwBLgE3JDIlHh8bIAEzMTgrAVEfJgw0JTkEAQw/AQ8PJCs1TCZCMgoGBAE0NBlGBgQBRR8EATQnJD4iQxAIK0EtCAQBDE01JysNJgYEAQxLNC5BIU4xCAYbISBJRyIrBikiMDAGBAE0RgE1TwQBDE01IDIqSioKPzUKQi0IKTI1JQYEAgFHJTo2AQxLNDYhIiUGBAIBMXBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL2Nsb3N1cmVfdHJhY2VyLmRhcnQxc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvZGVidWcuZGFydIHpLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBWYWx1ZXMgdXNlZCBvbmx5IGZvciBkZWJ1Z2dpbmcgdHlwZSBpbmZlcmVuY2UuCmxpYnJhcnkgY29tcGlsZXIuc3JjLmluZmVycmVyLmRlYnVnOwoKY29uc3QgYm9vbCBWRVJCT1NFID0gZmFsc2U7CmNvbnN0IGJvb2wgUFJJTlRfU1VNTUFSWSA9IGZhbHNlOwpjb25zdCBib29sIEFOT01BTFlfV0FSTiA9IGZhbHNlOwpib29sIFBSSU5UX0dSQVBIID0gZmFsc2U7CmJvb2wgUFJJTlRfR1JBUEhfQUxMX05PREVTID0gZmFsc2U7IC8vIEluY2x1ZGUgdXNlbGVzcyBub2Rlcz8KDgBOTjwBMyUBHCIhGj4BKHBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL2RlYnVnLmRhcnQ6c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvbG9jYWxzX2hhbmRsZXIuZGFydMAAUY4vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBsb2NhbHNfaGFuZGxlcjsKCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJyBzaG93IEl0ZXJhYmxlTWl4aW47CmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2lyL3V0aWwuZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnOwppbXBvcnQgJ2luZmVycmVyX2VuZ2luZS5kYXJ0JzsKaW1wb3J0ICd0eXBlX2dyYXBoX25vZGVzLmRhcnQnOwoKLy8vIEEgdmFyaWFibGUgc2NvcGUgaG9sZHMgdHlwZXMgZm9yIHZhcmlhYmxlcy4gSXQgaGFzIGEgbGluayB0byBhCi8vLyBwYXJlbnQgc2NvcGUsIGJ1dCBuZXZlciBjaGFuZ2VzIHRoZSB0eXBlcyBpbiB0aGF0IHBhcmVudC4gSW5zdGVhZCwKLy8vIHVwZGF0ZXMgdG8gbG9jYWxzIG9mIGEgcGFyZW50IHNjb3BlIGFyZSBwdXQgaW4gdGhlIGN1cnJlbnQgc2NvcGUuCi8vLyBUaGUgaW5mZXJyZXIgbWFrZXMgc3VyZSB1cGRhdGVzIGdldCBtZXJnZWQgaW50byB0aGUgcGFyZW50IHNjb3BlLAovLy8gb25jZSB0aGUgY29udHJvbCBmbG93IGJsb2NrIGhhcyBiZWVuIHZpc2l0ZWQuCmNsYXNzIFZhcmlhYmxlU2NvcGUgewogIC8vLyBUaGUgbnVtYmVyIG9mIHBhcmVudCBzY29wZXMgb2YgdGhpcyBzY29wZS4KICAvLy8KICAvLy8gVGhpcyBpcyB1c2VkIGZvciBjb21wdXRpbmcgY29tbW9uIHBhcmVudHMgZWZmaWNpZW50bHkuCiAgZmluYWwgaW50IF9sZXZlbDsKCiAgTWFwPExvY2FsLCBUeXBlSW5mb3JtYXRpb24+IHZhcmlhYmxlczsKCiAgLy8vIFRoZSBwYXJlbnQgb2YgdGhpcyBzY29wZS4gTnVsbCBmb3IgdGhlIHJvb3Qgc2NvcGUuCiAgZmluYWwgVmFyaWFibGVTY29wZSBwYXJlbnQ7CgogIC8vLyBUaGUgW2lyLk5vZGVdIHRoYXQgY3JlYXRlZCB0aGlzIHNjb3BlLgogIGZpbmFsIGlyLk5vZGUgdHJ5QmxvY2s7CgogIGZpbmFsIFZhcmlhYmxlU2NvcGUgY29weU9mOwoKICBWYXJpYWJsZVNjb3BlKHt0aGlzLnBhcmVudH0pCiAgICAgIDogdGhpcy52YXJpYWJsZXMgPSBudWxsLAogICAgICAgIHRoaXMuY29weU9mID0gbnVsbCwKICAgICAgICB0aGlzLnRyeUJsb2NrID0gbnVsbCwKICAgICAgICBfbGV2ZWwgPSAocGFyZW50Py5fbGV2ZWwgPz8gLTEpICsgMTsKCiAgVmFyaWFibGVTY29wZS50cnlCbG9jayh0aGlzLnRyeUJsb2NrLCB7dGhpcy5wYXJlbnR9KQogICAgICA6IHRoaXMudmFyaWFibGVzID0gbnVsbCwKICAgICAgICB0aGlzLmNvcHlPZiA9IG51bGwsCiAgICAgICAgX2xldmVsID0gKHBhcmVudD8uX2xldmVsID8/IC0xKSArIDEgewogICAgYXNzZXJ0KHRyeUJsb2NrIGlzIGlyLlRyeUNhdGNoIHx8IHRyeUJsb2NrIGlzIGlyLlRyeUZpbmFsbHksCiAgICAgICAgIlVuZXhwZWN0ZWQgYmxvY2sgJHRyeUJsb2NrIGZvciBWYXJpYWJsZVNjb3BlLnRyeUJsb2NrIik7CiAgfQoKICBWYXJpYWJsZVNjb3BlLmRlZXBDb3B5T2YoVmFyaWFibGVTY29wZSBvdGhlcikKICAgICAgOiB2YXJpYWJsZXMgPSBvdGhlci52YXJpYWJsZXMgPT0gbnVsbAogICAgICAgICAgICA/IG51bGwKICAgICAgICAgICAgOiBuZXcgTWFwPExvY2FsLCBUeXBlSW5mb3JtYXRpb24+LmZyb20ob3RoZXIudmFyaWFibGVzKSwKICAgICAgICB0cnlCbG9jayA9IG90aGVyLnRyeUJsb2NrLAogICAgICAgIGNvcHlPZiA9IG90aGVyLmNvcHlPZiA/PyBvdGhlciwKICAgICAgICBfbGV2ZWwgPSBvdGhlci5fbGV2ZWwsCiAgICAgICAgcGFyZW50ID0gb3RoZXIucGFyZW50ID09IG51bGwKICAgICAgICAgICAgPyBudWxsCiAgICAgICAgICAgIDogbmV3IFZhcmlhYmxlU2NvcGUuZGVlcENvcHlPZihvdGhlci5wYXJlbnQpOwoKICAvLy8gYHRydWVgIGlmIHRoaXMgc2NvcGUgaXMgZm9yIGEgdHJ5IGJsb2NrLgogIGJvb2wgZ2V0IGlzVHJ5ID0+IHRyeUJsb2NrICE9IG51bGw7CgogIC8vLyBSZXR1cm5zIHRoZSBbVmFyaWFibGVTY29wZV0gdGhhdCBkZWZpbmVzIHRoZSBpZGVudGl0eSBvZiB0aGlzIHNjb3BlLgogIC8vLwogIC8vLyBJZiB0aGlzIHNjb3BlIGlzIGEgY29weSBvZiBhbm90aGVyIHNjb3BlLCB0aGUgaWRlbnRpdHkgaXMgdGhlIGlkZW50aXR5CiAgLy8vIG9mIHRoZSBvdGhlciBzY29wZSwgb3RoZXJ3aXNlIHRoZSBpZGVudGl0eSBpcyB0aGUgc2NvcGUgaXRzZWxmLgogIFZhcmlhYmxlU2NvcGUgZ2V0IGlkZW50aXR5ID0+IGNvcHlPZiA/PyB0aGlzOwoKICAvLy8gUmV0dXJucyB0aGUgY29tbW9uIHBhcmVudCBiZXR3ZWVuIHRoaXMgYW5kIFtvdGhlcl0gYmFzZWQgb24gW2lkZW50aXR5XS4KICBWYXJpYWJsZVNjb3BlIGNvbW1vblBhcmVudChWYXJpYWJsZVNjb3BlIG90aGVyKSB7CiAgICBpZiAoaWRlbnRpdHkgPT0gb3RoZXIuaWRlbnRpdHkpIHsKICAgICAgcmV0dXJuIGlkZW50aXR5OwogICAgfSBlbHNlIGlmIChfbGV2ZWwgPiBvdGhlci5fbGV2ZWwpIHsKICAgICAgcmV0dXJuIHBhcmVudC5jb21tb25QYXJlbnQob3RoZXIpOwogICAgfSBlbHNlIGlmIChfbGV2ZWwgPCBvdGhlci5fbGV2ZWwpIHsKICAgICAgcmV0dXJuIGNvbW1vblBhcmVudChvdGhlci5wYXJlbnQpOwogICAgfSBlbHNlIGlmIChfbGV2ZWwgPiAwKSB7CiAgICAgIHJldHVybiBwYXJlbnQuY29tbW9uUGFyZW50KG90aGVyLnBhcmVudCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIFR5cGVJbmZvcm1hdGlvbiBvcGVyYXRvciBbXShMb2NhbCB2YXJpYWJsZSkgewogICAgVHlwZUluZm9ybWF0aW9uIHJlc3VsdDsKICAgIGlmICh2YXJpYWJsZXMgPT0gbnVsbCB8fCAocmVzdWx0ID0gdmFyaWFibGVzW3ZhcmlhYmxlXSkgPT0gbnVsbCkgewogICAgICByZXR1cm4gcGFyZW50ID09IG51bGwgPyBudWxsIDogcGFyZW50W3ZhcmlhYmxlXTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShMb2NhbCB2YXJpYWJsZSwgVHlwZUluZm9ybWF0aW9uIG1hc2spIHsKICAgIGFzc2VydChtYXNrICE9IG51bGwpOwogICAgaWYgKHZhcmlhYmxlcyA9PSBudWxsKSB7CiAgICAgIHZhcmlhYmxlcyA9IG5ldyBNYXA8TG9jYWwsIFR5cGVJbmZvcm1hdGlvbj4oKTsKICAgIH0KICAgIHZhcmlhYmxlc1t2YXJpYWJsZV0gPSBtYXNrOwogIH0KCiAgLy8vIENhbGxzIFtmXSBmb3IgYWxsIHZhcmlhYmxlcyBpbiB0aGlzIGFuZCBwYXJlbnQgc2NvcGVzIHVudGlsIGFuZCBpbmNsdWRpbmcKICAvLy8gW3Njb3BlXS4gW2ZdIGlzIGNhbGxlZCBhdCBtb3N0IG9uY2UgZm9yIGVhY2ggdmFyaWFibGUuCiAgdm9pZCBmb3JFYWNoTG9jYWxVbnRpbFNjb3BlKAogICAgICBWYXJpYWJsZVNjb3BlIHNjb3BlLCB2b2lkIGYoTG9jYWwgdmFyaWFibGUsIFR5cGVJbmZvcm1hdGlvbiB0eXBlKSkgewogICAgX2ZvckVhY2hMb2NhbFVudGlsU2NvcGUoc2NvcGUsIGYsIG5ldyBTZXRsZXQ8TG9jYWw+KCksIHRoaXMpOwogIH0KCiAgdm9pZCBfZm9yRWFjaExvY2FsVW50aWxTY29wZSgKICAgICAgVmFyaWFibGVTY29wZSBzY29wZSwKICAgICAgdm9pZCBmKExvY2FsIHZhcmlhYmxlLCBUeXBlSW5mb3JtYXRpb24gdHlwZSksCiAgICAgIFNldGxldDxMb2NhbD4gc2VlbkxvY2FscywKICAgICAgVmFyaWFibGVTY29wZSBvcmlnaW4pIHsKICAgIGlmICh2YXJpYWJsZXMgIT0gbnVsbCkgewogICAgICB2YXJpYWJsZXMuZm9yRWFjaCgodmFyaWFibGUsIHR5cGUpIHsKICAgICAgICBpZiAoc2VlbkxvY2Fscy5jb250YWlucyh2YXJpYWJsZSkpIHJldHVybjsKICAgICAgICBzZWVuTG9jYWxzLmFkZCh2YXJpYWJsZSk7CiAgICAgICAgZih2YXJpYWJsZSwgdHlwZSk7CiAgICAgIH0pOwogICAgfQogICAgaWYgKHNjb3BlPy5pZGVudGl0eSA9PSBpZGVudGl0eSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAocGFyZW50ICE9IG51bGwpIHsKICAgICAgcGFyZW50Ll9mb3JFYWNoTG9jYWxVbnRpbFNjb3BlKHNjb3BlLCBmLCBzZWVuTG9jYWxzLCBvcmlnaW4pOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KAogICAgICAgICAgc2NvcGUgPT0gbnVsbCwKICAgICAgICAgICJTY29wZSBub3QgZm91bmQ6IFxuIgogICAgICAgICAgIm9yaWdpbj0ke29yaWdpbi50b1N0cnVjdHVyZWRUZXh0KCcnKX1cbiIKICAgICAgICAgICJzY29wZT0ke3Njb3BlLnRvU3RydWN0dXJlZFRleHQoJycpfSIpOwogICAgfQogIH0KCiAgdm9pZCBmb3JFYWNoTG9jYWwodm9pZCBmKExvY2FsIHZhcmlhYmxlLCBUeXBlSW5mb3JtYXRpb24gdHlwZSkpIHsKICAgIGZvckVhY2hMb2NhbFVudGlsU2NvcGUobnVsbCwgZik7CiAgfQoKICBib29sIHVwZGF0ZXMoTG9jYWwgdmFyaWFibGUpIHsKICAgIGlmICh2YXJpYWJsZXMgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHZhcmlhYmxlcy5jb250YWluc0tleSh2YXJpYWJsZSk7CiAgfQoKICBTdHJpbmcgdG9TdHJ1Y3R1cmVkVGV4dChTdHJpbmcgaW5kZW50KSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBfdG9TdHJ1Y3R1cmVkVGV4dChzYiwgaW5kZW50KTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgdm9pZCBfdG9TdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IsIFN0cmluZyBpbmRlbnQpIHsKICAgIHNiLndyaXRlKCdWYXJpYWJsZVNjb3BlKCRoYXNoQ29kZSkgWycpOwogICAgc2Iud3JpdGUoJ1xuJHtpbmRlbnR9ICBsZXZlbDokX2xldmVsJyk7CiAgICBpZiAoY29weU9mICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJ1xuJHtpbmRlbnR9ICBjb3B5T2Y6VmFyaWFibGVTY29wZSgke2NvcHlPZi5oYXNoQ29kZX0pJyk7CiAgICB9CiAgICBpZiAodHJ5QmxvY2sgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgnXG4ke2luZGVudH0gIHRyeUJsb2NrOiAke25vZGVUb0RlYnVnU3RyaW5nKHRyeUJsb2NrKX0nKTsKICAgIH0KICAgIGlmICh2YXJpYWJsZXMgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgnXG4ke2luZGVudH0gIHZhcmlhYmxlczonKTsKICAgICAgdmFyaWFibGVzLmZvckVhY2goKExvY2FsIGxvY2FsLCBUeXBlSW5mb3JtYXRpb24gdHlwZSkgewogICAgICAgIHNiLndyaXRlKCdcbiR7aW5kZW50fSAgICAkbG9jYWw6ICcpOwogICAgICAgIHNiLndyaXRlKHR5cGUudG9TdHJ1Y3R1cmVkVGV4dCgnJHtpbmRlbnR9ICAgICAgJykpOwogICAgICB9KTsKICAgIH0KICAgIGlmIChwYXJlbnQgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgnXG4ke2luZGVudH0gIHBhcmVudDonKTsKICAgICAgcGFyZW50Ll90b1N0cnVjdHVyZWRUZXh0KHNiLCAnJHtpbmRlbnR9ICAgICAnKTsKICAgIH0KICAgIHNiLndyaXRlKCddJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmcgcmVzdCA9IHBhcmVudCA9PSBudWxsID8gIm51bGwiIDogcGFyZW50LnRvU3RyaW5nKCk7CiAgICByZXR1cm4gJ3skdmFyaWFibGVzfSAkcmVzdCc7CiAgfQp9CgovLy8gVHJhY2tzIGluaXRpYWxpemVycyB2aWEgaW5pdGlhbGl6YXRpb25zIGFuZCBhc3NpZ25tZW50cy4KY2xhc3MgRmllbGRJbml0aWFsaXphdGlvblNjb3BlIHsKICBNYXA8RmllbGRFbnRpdHksIFR5cGVJbmZvcm1hdGlvbj4gZmllbGRzOwogIGJvb2wgaXNUaGlzRXhwb3NlZDsKCiAgLy8vIGB0cnVlYCB3aGVuIGNvbnRyb2wgZmxvdyBwcmV2ZW50cyBhY2N1bXVsYXRpbmcgZGVmaW5pdGUgYXNzaWdubWVudHMsCiAgLy8vIGUuZy4gYW4gZWFybHkgcmV0dXJuIG9yIGNhdWdodCBleGNlcHRpb24uCiAgYm9vbCBpc0luZGVmaW5pdGU7CgogIEZpZWxkSW5pdGlhbGl6YXRpb25TY29wZSgpCiAgICAgIDogaXNUaGlzRXhwb3NlZCA9IGZhbHNlLAogICAgICAgIGlzSW5kZWZpbml0ZSA9IGZhbHNlOwoKICBGaWVsZEluaXRpYWxpemF0aW9uU2NvcGUuaW50ZXJuYWxGcm9tKEZpZWxkSW5pdGlhbGl6YXRpb25TY29wZSBvdGhlcikKICAgICAgOiBpc1RoaXNFeHBvc2VkID0gb3RoZXIuaXNUaGlzRXhwb3NlZCwKICAgICAgICBpc0luZGVmaW5pdGUgPSBvdGhlci5pc0luZGVmaW5pdGU7CgogIGZhY3RvcnkgRmllbGRJbml0aWFsaXphdGlvblNjb3BlLmZyb20oRmllbGRJbml0aWFsaXphdGlvblNjb3BlIG90aGVyKSB7CiAgICBpZiAob3RoZXIgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gbmV3IEZpZWxkSW5pdGlhbGl6YXRpb25TY29wZS5pbnRlcm5hbEZyb20ob3RoZXIpOwogIH0KCiAgdm9pZCB1cGRhdGVGaWVsZChGaWVsZEVudGl0eSBmaWVsZCwgVHlwZUluZm9ybWF0aW9uIHR5cGUpIHsKICAgIGlmIChpc1RoaXNFeHBvc2VkKSByZXR1cm47CiAgICBpZiAoaXNJbmRlZmluaXRlKSByZXR1cm47CiAgICBmaWVsZHMgPz89IG5ldyBNYXA8RmllbGRFbnRpdHksIFR5cGVJbmZvcm1hdGlvbj4oKTsKICAgIGZpZWxkc1tmaWVsZF0gPSB0eXBlOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIHJlYWRGaWVsZChGaWVsZEVudGl0eSBmaWVsZCkgewogICAgcmV0dXJuIGZpZWxkcyA9PSBudWxsID8gbnVsbCA6IGZpZWxkc1tmaWVsZF07CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBmKEZpZWxkRW50aXR5IGVsZW1lbnQsIFR5cGVJbmZvcm1hdGlvbiB0eXBlKSkgewogICAgZmllbGRzPy5mb3JFYWNoKGYpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGpvaW4gYmV0d2VlbiBbdGhlblNjb3BlXSBhbmQgW2Vsc2VTY29wZV0gd2hpY2ggbW9kZWxzIHRoZQogIC8vLyBmbG93IHRocm91Z2ggZWl0aGVyIFt0aGVuU2NvcGVdIG9yIFtlbHNlU2NvcGVdLgogIEZpZWxkSW5pdGlhbGl6YXRpb25TY29wZSBtZXJnZURpYW1vbmRGbG93KEluZmVycmVyRW5naW5lIGluZmVycmVyLAogICAgICBGaWVsZEluaXRpYWxpemF0aW9uU2NvcGUgdGhlblNjb3BlLCBGaWVsZEluaXRpYWxpemF0aW9uU2NvcGUgZWxzZVNjb3BlKSB7CiAgICBhc3NlcnQoZWxzZVNjb3BlICE9IG51bGwpOwoKICAgIC8vIFF1aWNrIGJhaWxvdXQgY2hlY2suIElmIFtpc1RoaXNFeHBvc2VkXSBvciBbaXNJbmRlZmluaXRlXSBpcyB0cnVlLCB3ZQogICAgLy8ga25vdyB0aGUgY29kZSBmb2xsb3dpbmcgd29uJ1R5cGVJbmZvcm1hdGlvbiBkbyBhbnl0aGluZy4KICAgIGlmIChpc1RoaXNFeHBvc2VkKSByZXR1cm4gdGhpczsKICAgIGlmIChpc0luZGVmaW5pdGUpIHJldHVybiB0aGlzOwoKICAgIEZpZWxkSW5pdGlhbGl6YXRpb25TY29wZSBvdGhlclNjb3BlID0KICAgICAgICBlbHNlU2NvcGUuZmllbGRzID09IG51bGwgPyB0aGlzIDogZWxzZVNjb3BlOwoKICAgIHRoZW5TY29wZS5mb3JFYWNoKChGaWVsZEVudGl0eSBmaWVsZCwgVHlwZUluZm9ybWF0aW9uIHR5cGUpIHsKICAgICAgVHlwZUluZm9ybWF0aW9uIG90aGVyVHlwZSA9IG90aGVyU2NvcGUucmVhZEZpZWxkKGZpZWxkKTsKICAgICAgaWYgKG90aGVyVHlwZSA9PSBudWxsKSByZXR1cm47CiAgICAgIHVwZGF0ZUZpZWxkKGZpZWxkLCBpbmZlcnJlci50eXBlcy5hbGxvY2F0ZURpYW1vbmRQaGkodHlwZSwgb3RoZXJUeXBlKSk7CiAgICB9KTsKCiAgICBpc1RoaXNFeHBvc2VkID0gdGhlblNjb3BlLmlzVGhpc0V4cG9zZWQgfHwgZWxzZVNjb3BlLmlzVGhpc0V4cG9zZWQ7CiAgICBpc0luZGVmaW5pdGUgPSB0aGVuU2NvcGUuaXNJbmRlZmluaXRlIHx8IGVsc2VTY29wZS5pc0luZGVmaW5pdGU7CiAgICByZXR1cm4gdGhpczsKICB9Cn0KCi8vLyBQbGFjZWhvbGRlciBmb3IgaW5mZXJyZWQgYXJndW1lbnRzIHR5cGVzIG9uIHNlbmRzLgpjbGFzcyBBcmd1bWVudHNUeXBlcyBleHRlbmRzIEl0ZXJhYmxlTWl4aW48VHlwZUluZm9ybWF0aW9uPiB7CiAgZmluYWwgTGlzdDxUeXBlSW5mb3JtYXRpb24+IHBvc2l0aW9uYWw7CiAgZmluYWwgTWFwPFN0cmluZywgVHlwZUluZm9ybWF0aW9uPiBuYW1lZDsKICBBcmd1bWVudHNUeXBlcyh0aGlzLnBvc2l0aW9uYWwsIG5hbWVkKQogICAgICA6IHRoaXMubmFtZWQgPSAobmFtZWQgPT0gbnVsbCB8fCBuYW1lZC5pc0VtcHR5KSA/IGNvbnN0IHt9IDogbmFtZWQgewogICAgYXNzZXJ0KHRoaXMucG9zaXRpb25hbC5ldmVyeSgoVHlwZUluZm9ybWF0aW9uIHR5cGUpID0+IHR5cGUgIT0gbnVsbCkpOwogICAgYXNzZXJ0KHRoaXMubmFtZWQudmFsdWVzLmV2ZXJ5KChUeXBlSW5mb3JtYXRpb24gdHlwZSkgPT4gdHlwZSAhPSBudWxsKSk7CiAgfQoKICBBcmd1bWVudHNUeXBlcy5lbXB0eSgpCiAgICAgIDogcG9zaXRpb25hbCA9IGNvbnN0IFtdLAogICAgICAgIG5hbWVkID0gY29uc3Qge307CgogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoID0+IHBvc2l0aW9uYWwubGVuZ3RoICsgbmFtZWQubGVuZ3RoOwoKICBAb3ZlcnJpZGUKICBJdGVyYXRvcjxUeXBlSW5mb3JtYXRpb24+IGdldCBpdGVyYXRvciA9PiBuZXcgQXJndW1lbnRzVHlwZXNJdGVyYXRvcih0aGlzKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gInsgcG9zaXRpb25hbCA9ICRwb3NpdGlvbmFsLCBuYW1lZCA9ICRuYW1lZCB9IjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKHBvc2l0aW9uYWwubGVuZ3RoICE9IG90aGVyLnBvc2l0aW9uYWwubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICBpZiAobmFtZWQubGVuZ3RoICE9IG90aGVyLm5hbWVkLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb3NpdGlvbmFsLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChwb3NpdGlvbmFsW2ldICE9IG90aGVyLnBvc2l0aW9uYWxbaV0pIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHZhciByZXN1bHQgPSB0cnVlOwogICAgbmFtZWQuZm9yRWFjaCgobmFtZSwgdHlwZSkgewogICAgICBpZiAob3RoZXIubmFtZWRbbmFtZV0gIT0gdHlwZSkgcmVzdWx0ID0gZmFsc2U7CiAgICB9KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdBcmd1bWVudHNUeXBlcy5oYXNoQ29kZScpOwoKICBib29sIGhhc05vQXJndW1lbnRzKCkgPT4gcG9zaXRpb25hbC5pc0VtcHR5ICYmIG5hbWVkLmlzRW1wdHk7CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaCh2b2lkIGYoVHlwZUluZm9ybWF0aW9uIHR5cGUpKSB7CiAgICBwb3NpdGlvbmFsLmZvckVhY2goZik7CiAgICBuYW1lZC52YWx1ZXMuZm9yRWFjaChmKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZXZlcnkoYm9vbCBmKFR5cGVJbmZvcm1hdGlvbiB0eXBlKSkgewogICAgcmV0dXJuIHBvc2l0aW9uYWwuZXZlcnkoZikgJiYgbmFtZWQudmFsdWVzLmV2ZXJ5KGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWlucyhPYmplY3QgdHlwZSkgewogICAgcmV0dXJuIHBvc2l0aW9uYWwuY29udGFpbnModHlwZSkgfHwgbmFtZWQuY29udGFpbnNWYWx1ZSh0eXBlKTsKICB9Cn0KCmNsYXNzIEFyZ3VtZW50c1R5cGVzSXRlcmF0b3IgaW1wbGVtZW50cyBJdGVyYXRvcjxUeXBlSW5mb3JtYXRpb24+IHsKICBmaW5hbCBJdGVyYXRvcjxUeXBlSW5mb3JtYXRpb24+IHBvc2l0aW9uYWw7CiAgZmluYWwgSXRlcmF0b3I8VHlwZUluZm9ybWF0aW9uPiBuYW1lZDsKICBib29sIF9pdGVyYXRlUG9zaXRpb25hbCA9IHRydWU7CgogIEFyZ3VtZW50c1R5cGVzSXRlcmF0b3IoQXJndW1lbnRzVHlwZXMgaXRlcmF0ZWUpCiAgICAgIDogcG9zaXRpb25hbCA9IGl0ZXJhdGVlLnBvc2l0aW9uYWwuaXRlcmF0b3IsCiAgICAgICAgbmFtZWQgPSBpdGVyYXRlZS5uYW1lZC52YWx1ZXMuaXRlcmF0b3I7CgogIEl0ZXJhdG9yPFR5cGVJbmZvcm1hdGlvbj4gZ2V0IF9jdXJyZW50SXRlcmF0b3IgPT4KICAgICAgX2l0ZXJhdGVQb3NpdGlvbmFsID8gcG9zaXRpb25hbCA6IG5hbWVkOwoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gZ2V0IGN1cnJlbnQgPT4gX2N1cnJlbnRJdGVyYXRvci5jdXJyZW50OwoKICBAb3ZlcnJpZGUKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKF9pdGVyYXRlUG9zaXRpb25hbCAmJiBwb3NpdGlvbmFsLm1vdmVOZXh0KCkpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBfaXRlcmF0ZVBvc2l0aW9uYWwgPSBmYWxzZTsKICAgIHJldHVybiBuYW1lZC5tb3ZlTmV4dCgpOwogIH0KfQoKLy8vIFBsYWNlaG9sZGVyIGZvciBpbmZlcnJlZCB0eXBlcyBvZiBsb2NhbCB2YXJpYWJsZXMuCmNsYXNzIExvY2Fsc0hhbmRsZXIgewogIGZpbmFsIFZhcmlhYmxlU2NvcGUgX2xvY2FsczsKCiAgTG9jYWxzSGFuZGxlcigpIDogX2xvY2FscyA9IG5ldyBWYXJpYWJsZVNjb3BlKCk7CgogIExvY2Fsc0hhbmRsZXIuZnJvbShMb2NhbHNIYW5kbGVyIG90aGVyKQogICAgICA6IF9sb2NhbHMgPSBuZXcgVmFyaWFibGVTY29wZShwYXJlbnQ6IG90aGVyLl9sb2NhbHMpOwoKICBMb2NhbHNIYW5kbGVyLnRyeUJsb2NrKExvY2Fsc0hhbmRsZXIgb3RoZXIsIGlyLlRyZWVOb2RlIGJsb2NrKQogICAgICA6IF9sb2NhbHMgPSBuZXcgVmFyaWFibGVTY29wZS50cnlCbG9jayhibG9jaywgcGFyZW50OiBvdGhlci5fbG9jYWxzKTsKCiAgTG9jYWxzSGFuZGxlci5kZWVwQ29weU9mKExvY2Fsc0hhbmRsZXIgb3RoZXIpCiAgICAgIDogX2xvY2FscyA9IG5ldyBWYXJpYWJsZVNjb3BlLmRlZXBDb3B5T2Yob3RoZXIuX2xvY2Fscyk7CgogIFR5cGVJbmZvcm1hdGlvbiB1c2UoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIsIExvY2FsIGxvY2FsKSB7CiAgICByZXR1cm4gX2xvY2Fsc1tsb2NhbF07CiAgfQoKICB2b2lkIHVwZGF0ZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlciwgTG9jYWwgbG9jYWwsIFR5cGVJbmZvcm1hdGlvbiB0eXBlLAogICAgICBpci5Ob2RlIG5vZGUsIERhcnRUeXBlIHN0YXRpY1R5cGUsIExvY2Fsc0hhbmRsZXIgdHJ5QmxvY2spIHsKICAgIGlmICh0cnlCbG9jayAhPSBudWxsKSB7CiAgICAgIC8vIFdlIGRvbid0IGtub3cgaWYgYW4gYXNzaWdubWVudCBpbiBhIHRyeSBibG9jawogICAgICAvLyB3aWxsIGJlIGV4ZWN1dGVkLCBzbyBhbGwgYXNzaWdubWVudHMgaW4gdGhhdCBibG9jayBhcmUKICAgICAgLy8gcG90ZW50aWFsIHR5cGVzIGFmdGVyIHdlIGhhdmUgbGVmdCBpdC4gV2UgdXBkYXRlIHRoZSBwYXJlbnQKICAgICAgLy8gb2YgdGhlIHRyeSBibG9jayBzbyB0aGF0LCBhdCBleGl0IG9mIHRoZSB0cnkgYmxvY2ssIHdlIGdldAogICAgICAvLyB0aGUgcmlnaHQgcGhpIGZvciBpdC4KICAgICAgVHlwZUluZm9ybWF0aW9uIGV4aXN0aW5nID0gdHJ5QmxvY2suX2xvY2Fscy5wYXJlbnRbbG9jYWxdOwogICAgICBpZiAoZXhpc3RpbmcgIT0gbnVsbCkgewogICAgICAgIFR5cGVJbmZvcm1hdGlvbiBwaGlUeXBlID0gaW5mZXJyZXIudHlwZXMuYWxsb2NhdGVQaGkoCiAgICAgICAgICAgIHRyeUJsb2NrLl9sb2NhbHMudHJ5QmxvY2ssIGxvY2FsLCBleGlzdGluZywKICAgICAgICAgICAgaXNUcnk6IHRyeUJsb2NrLl9sb2NhbHMuaXNUcnkpOwogICAgICAgIFR5cGVJbmZvcm1hdGlvbiBpbnB1dFR5cGUgPQogICAgICAgICAgICBpbmZlcnJlci50eXBlcy5hZGRQaGlJbnB1dChsb2NhbCwgcGhpVHlwZSwgdHlwZSk7CiAgICAgICAgdHJ5QmxvY2suX2xvY2Fscy5wYXJlbnRbbG9jYWxdID0gaW5wdXRUeXBlOwogICAgICB9CiAgICAgIC8vIFVwZGF0ZSB0aGUgY3VycmVudCBoYW5kbGVyIHVuY29uZGl0aW9uYWxseSB3aXRoIHRoZSBuZXcKICAgICAgLy8gdHlwZS4KICAgICAgX2xvY2Fsc1tsb2NhbF0gPSB0eXBlOwogICAgfSBlbHNlIHsKICAgICAgX2xvY2Fsc1tsb2NhbF0gPSB0eXBlOwogICAgfQogIH0KCiAgLy8vIFJldHVybnMgdGhlIGpvaW4gYmV0d2VlbiB0aGlzIGxvY2FscyBoYW5kbGVyIGFuZCBbb3RoZXJdIHdoaWNoIG1vZGVscyB0aGUKICAvLy8gZmxvdyB0aHJvdWdoIGVpdGhlciB0aGlzIG9yIFtvdGhlcl0uCiAgLy8vCiAgLy8vIElmIFtpblBsYWNlXSBpcyBgdHJ1ZWAsIHRoZSB2YXJpYWJsZSB0eXBlcyBpbiB0aGlzIGxvY2FscyBoYW5kbGVyIGFyZQogIC8vLyByZXBsYWNlZCBieSB0aGUgdmFyaWFibGVzIHR5cGVzIGluIFtvdGhlcl0uIE90aGVyd2lzZSB0aGUgdmFyaWFibGUgdHlwZXMKICAvLy8gZnJvbSBib3RoIGFyZSBtZXJnZWQgd2l0aCBhIHBoaSB0eXBlLgogIExvY2Fsc0hhbmRsZXIgbWVyZ2VGbG93KEluZmVycmVyRW5naW5lIGluZmVycmVyLCBMb2NhbHNIYW5kbGVyIG90aGVyLAogICAgICB7Ym9vbCBpblBsYWNlOiBmYWxzZX0pIHsKICAgIFZhcmlhYmxlU2NvcGUgY29tbW9uID0gX2xvY2Fscy5jb21tb25QYXJlbnQob3RoZXIuX2xvY2Fscyk7CiAgICBhc3NlcnQoCiAgICAgICAgY29tbW9uICE9IG51bGwsCiAgICAgICAgIk5vIGNvbW1vbiBwYXJlbnQgZm9yXG4iCiAgICAgICAgIjE6JHtfbG9jYWxzLnRvU3RydWN0dXJlZFRleHQoJyAgJyl9XG4iCiAgICAgICAgIjI6JHtvdGhlci5fbG9jYWxzLnRvU3RydWN0dXJlZFRleHQoJyAgJyl9Iik7CiAgICBhc3NlcnQoCiAgICAgICAgY29tbW9uID09IF9sb2NhbHMgfHwgX2xvY2Fscy52YXJpYWJsZXMgPT0gbnVsbCwKICAgICAgICAiTm9uLWVtcHR5IGNvbW1vbiBwYXJlbnQgZm9yXG4iCiAgICAgICAgIjE6JHtjb21tb24udG9TdHJ1Y3R1cmVkVGV4dCgnICAnKX1cbiIKICAgICAgICAiMjoke19sb2NhbHMudG9TdHJ1Y3R1cmVkVGV4dCgnICAnKX0iKTsKICAgIG90aGVyLl9sb2NhbHMuZm9yRWFjaExvY2FsVW50aWxTY29wZShjb21tb24sCiAgICAgICAgKExvY2FsIGxvY2FsLCBUeXBlSW5mb3JtYXRpb24gdHlwZSkgewogICAgICBUeXBlSW5mb3JtYXRpb24gbXlUeXBlID0gX2xvY2Fsc1tsb2NhbF07CiAgICAgIGlmIChteVR5cGUgPT0gbnVsbCkgcmV0dXJuOyAvLyBWYXJpYWJsZSBpcyBvbmx5IGRlZmluZWQgaW4gW290aGVyXS4KICAgICAgaWYgKHR5cGUgPT0gbXlUeXBlKSByZXR1cm47CiAgICAgIF9sb2NhbHNbbG9jYWxdID0KICAgICAgICAgIGluUGxhY2UgPyB0eXBlIDogaW5mZXJyZXIudHlwZXMuYWxsb2NhdGVEaWFtb25kUGhpKG15VHlwZSwgdHlwZSk7CiAgICB9KTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGpvaW4gYmV0d2VlbiBbdGhlbkJyYW5jaF0gYW5kIFtlbHNlQnJhbmNoXSB3aGljaCBtb2RlbHMgdGhlCiAgLy8vIGZsb3cgdGhyb3VnaCBlaXRoZXIgW3RoZW5CcmFuY2hdIG9yIFtlbHNlQnJhbmNoXS4KICBMb2NhbHNIYW5kbGVyIG1lcmdlRGlhbW9uZEZsb3coSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIsCiAgICAgIExvY2Fsc0hhbmRsZXIgdGhlbkJyYW5jaCwgTG9jYWxzSGFuZGxlciBlbHNlQnJhbmNoKSB7CiAgICBhc3NlcnQoZWxzZUJyYW5jaCAhPSBudWxsKTsKCiAgICB2b2lkIG1lcmdlTG9jYWwoTG9jYWwgbG9jYWwpIHsKICAgICAgVHlwZUluZm9ybWF0aW9uIG15VHlwZSA9IF9sb2NhbHNbbG9jYWxdOwogICAgICBpZiAobXlUeXBlID09IG51bGwpIHJldHVybjsKICAgICAgVHlwZUluZm9ybWF0aW9uIGVsc2VUeXBlID0gZWxzZUJyYW5jaC5fbG9jYWxzW2xvY2FsXTsKICAgICAgVHlwZUluZm9ybWF0aW9uIHRoZW5UeXBlID0gdGhlbkJyYW5jaC5fbG9jYWxzW2xvY2FsXTsKICAgICAgaWYgKHRoZW5UeXBlID09IGVsc2VUeXBlKSB7CiAgICAgICAgX2xvY2Fsc1tsb2NhbF0gPSB0aGVuVHlwZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfbG9jYWxzW2xvY2FsXSA9IGluZmVycmVyLnR5cGVzLmFsbG9jYXRlRGlhbW9uZFBoaSh0aGVuVHlwZSwgZWxzZVR5cGUpOwogICAgICB9CiAgICB9CgogICAgVmFyaWFibGVTY29wZSBjb21tb24gPSBfbG9jYWxzLmNvbW1vblBhcmVudCh0aGVuQnJhbmNoLl9sb2NhbHMpOwogICAgYXNzZXJ0KAogICAgICAgIGNvbW1vbiAhPSBudWxsLAogICAgICAgICJObyBjb21tb24gcGFyZW50IGZvclxuIgogICAgICAgICIxOiR7X2xvY2Fscy50b1N0cnVjdHVyZWRUZXh0KCcgICcpfVxuIgogICAgICAgICIyOiR7dGhlbkJyYW5jaC5fbG9jYWxzLnRvU3RydWN0dXJlZFRleHQoJyAgJyl9Iik7CiAgICBhc3NlcnQoCiAgICAgICAgX2xvY2Fscy5jb21tb25QYXJlbnQoZWxzZUJyYW5jaC5fbG9jYWxzKSA9PSBjb21tb24sCiAgICAgICAgIkRpZmYgY29tbW9uIHBhcmVudCBmb3JcbiIKICAgICAgICAiMToke2NvbW1vbi50b1N0cnVjdHVyZWRUZXh0KCcgICcpfVxuMjoiCiAgICAgICAgIiR7X2xvY2Fscy5jb21tb25QYXJlbnQoZWxzZUJyYW5jaC5fbG9jYWxzKT8udG9TdHJ1Y3R1cmVkVGV4dCgnICAnKX0iKTsKICAgIGFzc2VydCgKICAgICAgICBjb21tb24gPT0gX2xvY2FscyB8fCBfbG9jYWxzLnZhcmlhYmxlcyA9PSBudWxsLAogICAgICAgICJOb24tZW1wdHkgY29tbW9uIHBhcmVudCBmb3JcbiIKICAgICAgICAiY29tbW9uOiR7Y29tbW9uLnRvU3RydWN0dXJlZFRleHQoJyAgJyl9XG4iCiAgICAgICAgIjE6JHtfbG9jYWxzLnRvU3RydWN0dXJlZFRleHQoJyAgJyl9XG4iCiAgICAgICAgIjI6JHt0aGVuQnJhbmNoLl9sb2NhbHMudG9TdHJ1Y3R1cmVkVGV4dCgnICAnKX0iKTsKICAgIHRoZW5CcmFuY2guX2xvY2Fscy5mb3JFYWNoTG9jYWxVbnRpbFNjb3BlKGNvbW1vbiwgKExvY2FsIGxvY2FsLCBfKSB7CiAgICAgIG1lcmdlTG9jYWwobG9jYWwpOwogICAgfSk7CiAgICBlbHNlQnJhbmNoLl9sb2NhbHMuZm9yRWFjaExvY2FsVW50aWxTY29wZShjb21tb24sIChMb2NhbCBsb2NhbCwgXykgewogICAgICAvLyBEaXNjYXJkIGxvY2FscyB3ZSBhbHJlYWR5IHByb2Nlc3NlZCB3aGVuIGl0ZXJhdGluZyBvdmVyCiAgICAgIC8vIFt0aGVuQnJhbmNoXSdzIGxvY2Fscy4KICAgICAgaWYgKCF0aGVuQnJhbmNoLl9sb2NhbHMudXBkYXRlcyhsb2NhbCkpIG1lcmdlTG9jYWwobG9jYWwpOwogICAgfSk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8vLyBNZXJnZSBhbGwgW0xvY2Fsc0hhbmRsZXJdIGluIFtoYW5kbGVyc10gaW50byBbOnRoaXM6XS4KICAvLy8KICAvLy8gSWYgW2tlZXBPd25Mb2NhbHNdIGlzIHRydWUsIHRoZSB0eXBlcyBvZiBsb2NhbHMgaW4gdGhpcwogIC8vLyBbTG9jYWxzSGFuZGxlcl0gYXJlIGJlaW5nIHVzZWQgaW4gdGhlIG1lcmdlLiBba2VlcE93bkxvY2Fsc10KICAvLy8gc2hvdWxkIGJlIHRydWUgaWYgdGhpcyBbTG9jYWxzSGFuZGxlcl0sIHRoZSBkb21pbmF0b3Igb2YKICAvLy8gYWxsIFtoYW5kbGVyc10sIGFsc28gZGlyZWN0bHkgZmxvd3MgaW50byB0aGUgam9pbiBwb2ludCwKICAvLy8gdGhhdCBpcyB0aGUgY29kZSBhZnRlciBhbGwgW2hhbmRsZXJzXS4gRm9yIGV4YW1wbGUsIGNvbnNpZGVyOgogIC8vLwogIC8vLyBbOiBzd2l0Y2ggKC4uLikgewogIC8vLyAgICAgIGNhc2UgMTogLi4uOyBicmVhazsKICAvLy8gICAgfQogIC8vLyA6XQogIC8vLwogIC8vLyBUaGUgW0xvY2Fsc0hhbmRsZXJdIGF0IGVudHJ5IG9mIHRoZSBzd2l0Y2ggYWxzbyBmbG93cyBpbnRvIHRoZQogIC8vLyBleGl0IG9mIHRoZSBzd2l0Y2gsIGJlY2F1c2UgdGhlcmUgaXMgbm8gZGVmYXVsdCBjYXNlLiBTbyB0aGUKICAvLy8gdHlwZXMgb2YgbG9jYWxzIGF0IGVudHJ5IG9mIHRoZSBzd2l0Y2ggaGF2ZSB0byB0YWtlIHBhcnQgdG8gdGhlCiAgLy8vIG1lcmdlLgogIC8vLwogIC8vLyBUaGUgYWJvdmUgc2l0dWF0aW9uIGlzIGFsc28gdHJ1ZSBmb3IgbGFiZWxlZCBzdGF0ZW1lbnRzIGxpa2UKICAvLy8KICAvLy8gWzogTDogewogIC8vLyAgICAgIGlmICguLi4pIGJyZWFrOwogIC8vLyAgICAgIC4uLgogIC8vLyAgICB9CiAgLy8vIDpdCiAgLy8vCiAgLy8vIHdoZXJlIFs6dGhpczpdIGlzIHRoZSBbTG9jYWxzSGFuZGxlcl0gZm9yIHRoZSBwYXRocyB0aHJvdWdoIHRoZQogIC8vLyBsYWJlbGVkIHN0YXRlbWVudCB0aGF0IGRvIG5vdCBicmVhayBvdXQuCiAgTG9jYWxzSGFuZGxlciBtZXJnZUFmdGVyQnJlYWtzKAogICAgICBJbmZlcnJlckVuZ2luZSBpbmZlcnJlciwgSXRlcmFibGU8TG9jYWxzSGFuZGxlcj4gaGFuZGxlcnMsCiAgICAgIHtib29sIGtlZXBPd25Mb2NhbHM6IHRydWV9KSB7CiAgICBpci5Ob2RlIHRyeUJsb2NrID0gX2xvY2Fscy50cnlCbG9jazsKICAgIC8vIFVzZSBhIHNlcGFyYXRlIGxvY2FscyBoYW5kbGVyIHRvIHBlcmZvcm0gdGhlIG1lcmdlIGluLCBzbyB0aGF0IFBoaQogICAgLy8gY3JlYXRpb24gZG9lcyBub3QgaW52YWxpZGF0ZSBwcmV2aW91cyB0eXBlIGtub3dsZWRnZSB3aGlsZSB3ZSBtaWdodAogICAgLy8gc3RpbGwgbG9vayBpdCB1cC4KICAgIFZhcmlhYmxlU2NvcGUgbWVyZ2VkID0gdHJ5QmxvY2sgIT0gbnVsbAogICAgICAgID8gbmV3IFZhcmlhYmxlU2NvcGUudHJ5QmxvY2sodHJ5QmxvY2ssIHBhcmVudDogX2xvY2FscykKICAgICAgICA6IG5ldyBWYXJpYWJsZVNjb3BlKHBhcmVudDogX2xvY2Fscyk7CiAgICBTZXQ8TG9jYWw+IHNlZW5Mb2NhbHMgPSBuZXcgU2V0bGV0PExvY2FsPigpOwogICAgLy8gTWVyZ2UgYWxsIG90aGVyIGhhbmRsZXJzLgogICAgZm9yIChMb2NhbHNIYW5kbGVyIGhhbmRsZXIgaW4gaGFuZGxlcnMpIHsKICAgICAgVmFyaWFibGVTY29wZSBjb21tb24gPSBfbG9jYWxzLmNvbW1vblBhcmVudChoYW5kbGVyLl9sb2NhbHMpOwogICAgICBhc3NlcnQoCiAgICAgICAgICBjb21tb24gIT0gbnVsbCwKICAgICAgICAgICJObyBjb21tb24gcGFyZW50IGZvclxuIgogICAgICAgICAgIjE6JHtfbG9jYWxzLnRvU3RydWN0dXJlZFRleHQoJyAgJyl9XG4iCiAgICAgICAgICAiMjoke2hhbmRsZXIuX2xvY2Fscy50b1N0cnVjdHVyZWRUZXh0KCcgICcpfSIpOwogICAgICBhc3NlcnQoCiAgICAgICAgICBjb21tb24gPT0gX2xvY2FscyB8fCBfbG9jYWxzLnZhcmlhYmxlcyA9PSBudWxsLAogICAgICAgICAgIk5vbi1lbXB0eSBjb21tb24gcGFyZW50IGZvclxuIgogICAgICAgICAgImNvbW1vbjoke2NvbW1vbi50b1N0cnVjdHVyZWRUZXh0KCcgICcpfVxuIgogICAgICAgICAgIjE6JHtfbG9jYWxzLnRvU3RydWN0dXJlZFRleHQoJyAgJyl9XG4iCiAgICAgICAgICAiMjoke2hhbmRsZXIuX2xvY2Fscy50b1N0cnVjdHVyZWRUZXh0KCcgICcpfSIpOwogICAgICBoYW5kbGVyLl9sb2NhbHMuZm9yRWFjaExvY2FsVW50aWxTY29wZShjb21tb24sIChsb2NhbCwgb3RoZXJUeXBlKSB7CiAgICAgICAgVHlwZUluZm9ybWF0aW9uIG15VHlwZSA9IG1lcmdlZFtsb2NhbF07CiAgICAgICAgaWYgKG15VHlwZSA9PSBudWxsKSByZXR1cm47CiAgICAgICAgVHlwZUluZm9ybWF0aW9uIG5ld1R5cGU7CiAgICAgICAgaWYgKCFzZWVuTG9jYWxzLmNvbnRhaW5zKGxvY2FsKSkgewogICAgICAgICAgbmV3VHlwZSA9IGluZmVycmVyLnR5cGVzLmFsbG9jYXRlUGhpKAogICAgICAgICAgICAgIG1lcmdlZC50cnlCbG9jaywgbG9jYWwsIG90aGVyVHlwZSwKICAgICAgICAgICAgICBpc1RyeTogbWVyZ2VkLmlzVHJ5KTsKICAgICAgICAgIHNlZW5Mb2NhbHMuYWRkKGxvY2FsKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbmV3VHlwZSA9IGluZmVycmVyLnR5cGVzLmFkZFBoaUlucHV0KGxvY2FsLCBteVR5cGUsIG90aGVyVHlwZSk7CiAgICAgICAgfQogICAgICAgIGlmIChuZXdUeXBlICE9IG15VHlwZSkgewogICAgICAgICAgbWVyZ2VkW2xvY2FsXSA9IG5ld1R5cGU7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIC8vIElmIHdlIHdhbnQgdG8ga2VlcCBvd24gbG9jYWxzLCB3ZSBtZXJnZSBbc2VlbkxvY2Fsc10gZnJvbSBbdGhpc10gaW50bwogICAgLy8gW21lcmdlZF0gdG8gdXBkYXRlIHRoZSBQaGkgbm9kZXMgd2l0aCBvcmlnaW5hbCB2YWx1ZXMuCiAgICBpZiAoa2VlcE93bkxvY2FscykgewogICAgICBmb3IgKExvY2FsIHZhcmlhYmxlIGluIHNlZW5Mb2NhbHMpIHsKICAgICAgICBUeXBlSW5mb3JtYXRpb24gb3JpZ2luYWxUeXBlID0gX2xvY2Fsc1t2YXJpYWJsZV07CiAgICAgICAgaWYgKG9yaWdpbmFsVHlwZSAhPSBudWxsKSB7CiAgICAgICAgICBtZXJnZWRbdmFyaWFibGVdID0gaW5mZXJyZXIudHlwZXMKICAgICAgICAgICAgICAuYWRkUGhpSW5wdXQodmFyaWFibGUsIG1lcmdlZFt2YXJpYWJsZV0sIG9yaWdpbmFsVHlwZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAvLyBDbGVhbiB1cCBQaGkgbm9kZXMgd2l0aCBzaW5nbGUgaW5wdXQgYW5kIHN0b3JlIGJhY2sgcmVzdWx0IGludG8KICAgIC8vIGFjdHVhbCBsb2NhbHMgaGFuZGxlci4KICAgIG1lcmdlZC5mb3JFYWNoTG9jYWxVbnRpbFNjb3BlKG1lcmdlZCwKICAgICAgICAoTG9jYWwgdmFyaWFibGUsIFR5cGVJbmZvcm1hdGlvbiB0eXBlKSB7CiAgICAgIF9sb2NhbHNbdmFyaWFibGVdID0gaW5mZXJyZXIudHlwZXMuc2ltcGxpZnlQaGkodHJ5QmxvY2ssIHZhcmlhYmxlLCB0eXBlKTsKICAgIH0pOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvLy8gTWVyZ2UgYWxsIFtMb2NhbHNIYW5kbGVyXSBpbiBbaGFuZGxlcnNdIGludG8gdGhpcyBoYW5kbGVyLgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgYSBsb2NhbCBpbiB0aGlzIGhhbmRsZXIgaGFzIGNoYW5nZWQuCiAgYm9vbCBtZXJnZUFsbChJbmZlcnJlckVuZ2luZSBpbmZlcnJlciwgSXRlcmFibGU8TG9jYWxzSGFuZGxlcj4gaGFuZGxlcnMpIHsKICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgaGFuZGxlcnMuZm9yRWFjaCgoTG9jYWxzSGFuZGxlciBvdGhlcikgewogICAgICBWYXJpYWJsZVNjb3BlIGNvbW1vbiA9IF9sb2NhbHMuY29tbW9uUGFyZW50KG90aGVyLl9sb2NhbHMpOwogICAgICBhc3NlcnQoCiAgICAgICAgICBjb21tb24gIT0gbnVsbCwKICAgICAgICAgICJObyBjb21tb24gcGFyZW50IGZvclxuIgogICAgICAgICAgIjE6JHtfbG9jYWxzLnRvU3RydWN0dXJlZFRleHQoJyAgJyl9XG4iCiAgICAgICAgICAiMjoke290aGVyLl9sb2NhbHMudG9TdHJ1Y3R1cmVkVGV4dCgnICAnKX0iKTsKICAgICAgYXNzZXJ0KAogICAgICAgICAgY29tbW9uID09IF9sb2NhbHMgfHwgX2xvY2Fscy52YXJpYWJsZXMgPT0gbnVsbCwKICAgICAgICAgICJOb24tZW1wdHkgY29tbW9uIHBhcmVudCBmb3JcbiIKICAgICAgICAgICJjb21tb246JHtjb21tb24udG9TdHJ1Y3R1cmVkVGV4dCgnICAnKX1cbiIKICAgICAgICAgICIxOiR7X2xvY2Fscy50b1N0cnVjdHVyZWRUZXh0KCcgICcpfVxuIgogICAgICAgICAgIjI6JHtvdGhlci5fbG9jYWxzLnRvU3RydWN0dXJlZFRleHQoJyAgJyl9Iik7CiAgICAgIG90aGVyLl9sb2NhbHMuZm9yRWFjaExvY2FsVW50aWxTY29wZShjb21tb24sIChsb2NhbCwgb3RoZXJUeXBlKSB7CiAgICAgICAgVHlwZUluZm9ybWF0aW9uIG15VHlwZSA9IF9sb2NhbHNbbG9jYWxdOwogICAgICAgIGlmIChteVR5cGUgPT0gbnVsbCkgcmV0dXJuOwogICAgICAgIFR5cGVJbmZvcm1hdGlvbiBuZXdUeXBlID0KICAgICAgICAgICAgaW5mZXJyZXIudHlwZXMuYWRkUGhpSW5wdXQobG9jYWwsIG15VHlwZSwgb3RoZXJUeXBlKTsKICAgICAgICBpZiAobmV3VHlwZSAhPSBteVR5cGUpIHsKICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgX2xvY2Fsc1tsb2NhbF0gPSBuZXdUeXBlOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICAgIHJldHVybiBjaGFuZ2VkOwogIH0KCiAgdm9pZCBzdGFydExvb3AoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIsIGlyLk5vZGUgbG9vcCkgewogICAgX2xvY2Fscy5mb3JFYWNoTG9jYWwoKExvY2FsIHZhcmlhYmxlLCBUeXBlSW5mb3JtYXRpb24gdHlwZSkgewogICAgICBUeXBlSW5mb3JtYXRpb24gbmV3VHlwZSA9CiAgICAgICAgICBpbmZlcnJlci50eXBlcy5hbGxvY2F0ZUxvb3BQaGkobG9vcCwgdmFyaWFibGUsIHR5cGUsIGlzVHJ5OiBmYWxzZSk7CiAgICAgIGlmIChuZXdUeXBlICE9IHR5cGUpIHsKICAgICAgICBfbG9jYWxzW3ZhcmlhYmxlXSA9IG5ld1R5cGU7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgdm9pZCBlbmRMb29wKEluZmVycmVyRW5naW5lIGluZmVycmVyLCBpci5Ob2RlIGxvb3ApIHsKICAgIF9sb2NhbHMuZm9yRWFjaExvY2FsKChMb2NhbCB2YXJpYWJsZSwgVHlwZUluZm9ybWF0aW9uIHR5cGUpIHsKICAgICAgVHlwZUluZm9ybWF0aW9uIG5ld1R5cGUgPQogICAgICAgICAgaW5mZXJyZXIudHlwZXMuc2ltcGxpZnlQaGkobG9vcCwgdmFyaWFibGUsIHR5cGUpOwogICAgICBpZiAobmV3VHlwZSAhPSB0eXBlKSB7CiAgICAgICAgX2xvY2Fsc1t2YXJpYWJsZV0gPSBuZXdUeXBlOwogICAgICB9CiAgICB9KTsKICB9CgogIFN0cmluZyB0b1N0cnVjdHVyZWRUZXh0KFN0cmluZyBpbmRlbnQpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIF90b1N0cnVjdHVyZWRUZXh0KHNiLCBpbmRlbnQpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICB2b2lkIF90b1N0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYiwgU3RyaW5nIGluZGVudCkgewogICAgc2Iud3JpdGUoJ0xvY2Fsc0hhbmRsZXIoJGhhc2hDb2RlKSBbJyk7CiAgICBzYi53cml0ZSgnXG4ke2luZGVudH0gIGxvY2FsczonKTsKICAgIF9sb2NhbHMuX3RvU3RydWN0dXJlZFRleHQoc2IsICcke2luZGVudH0gICAgJyk7CiAgICBzYi53cml0ZSgnXG5dJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnTG9jYWxzSGFuZGxlcignKTsKICAgIHNiLndyaXRlKCdsb2NhbHM9JF9sb2NhbHMnKTsKICAgIHNiLndyaXRlKCcpJyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KgmMATk48ARgBLSgkIRocHyABQ0dGRjIWMQY9FAEpATkeAS0aAR4BHx8cHi0BNx8cLkFCBAEwLBNFIygfJhM6AS8mAUsGTUYwAU40JhcoKSgpHTANEwYEATAcRzcGEwQBPBodNQYgBAFQPR9LQgQBIBs0IB4dKzMiGwoGJw4GGkQNDhkgNDIGBAFEJQQBISksBAErKiMaBAE7LCwaSQYcSQYdKz4tPAoGGig2BhMEAQwWPyEEAgE9ISwWAUswFQEdHx4BSC0rAUokPQQBPh8eOBoEATEyBAFEGAQBTDZFUB8BTUAkIwEqNQFCPyVOCAFIRREEAgE3PiosKUtLTQQBGR8aAQw2AQxOAQxHAQwcRDoyPgYXITUIEwQBDE0BQAEMLxsdBAEMLTkEAQwfQwQCAUQuKSIBMjMwATQvAQw7AQwUNxMGIB0EAgE3Fh8BMwEqPAFBTAEwPwE+GwQBSkMcN0BFRB9BHj44LCQ+NAhBDx0NHQYEAVArBkxPLEgfQAwYITA2DDgoLzAxLi9KIhdMCBEEAU44OjwgASMvIjw8IiMPUAgGAUUMGCEwOww8IzFQDDgoNDA7SRkISUEgQQgRBAE9Bj5DPz9EBhgfCwkGRUNGDQZDBg4bDwsJBkYvIkEkKUpLGSxALjEhLkQOGiMyOg46KjYyOkowJCErMDEkIRFKCiEjCgoGTT4ZKzokLEYKCAZHHioxUAgRBAFBO00aLUIOGiMyOA46KjYyOEgxJCJCIRokCgoIFAQBOkIgTh0lCAgEAThCIDwdJQgIBAErKiMaBAE7LCY0FQQBDBYqICETGgQCATFwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci9sb2NhbHNfaGFuZGxlci5kYXJ0N3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2luZmVycmVyL2xpc3RfdHJhY2VyLmRhcnST7C8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGNvbXBpbGVyLnNyYy5pbmZlcnJlci5saXN0X3RyYWNlcjsKCmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnIHNob3cgU2V0bGV0OwppbXBvcnQgJ25vZGVfdHJhY2VyLmRhcnQnOwppbXBvcnQgJ3R5cGVfZ3JhcGhfbm9kZXMuZGFydCc7CgovLy8gQSBzZXQgb2Ygc2VsZWN0b3IgbmFtZXMgdGhhdCBbTGlzdF0gaW1wbGVtZW50cywgdGhhdCB3ZSBrbm93IGRvIG5vdAovLy8gY2hhbmdlIHRoZSBlbGVtZW50IHR5cGUgb2YgdGhlIGxpc3QsIG9yIGxldCB0aGUgbGlzdCBlc2NhcGUgdG8gY29kZQovLy8gdGhhdCBtaWdodCBjaGFuZ2UgdGhlIGVsZW1lbnQgdHlwZS4KU2V0PFN0cmluZz4gb2tMaXN0U2VsZWN0b3JzU2V0ID0gbmV3IFNldDxTdHJpbmc+LmZyb20oY29uc3QgPFN0cmluZz5bCiAgLy8gRnJvbSBPYmplY3QuCiAgJz09JywKICAnaGFzaENvZGUnLAogICd0b1N0cmluZycsCiAgJ25vU3VjaE1ldGhvZCcsCiAgJ3J1bnRpbWVUeXBlJywKCiAgLy8gRnJvbSBJdGVyYWJsZS4KICAnaXRlcmF0b3InLAogICdtYXAnLAogICd3aGVyZScsCiAgJ2V4cGFuZCcsCiAgJ2NvbnRhaW5zJywKICAnZm9yRWFjaCcsCiAgJ3JlZHVjZScsCiAgJ2ZvbGQnLAogICdldmVyeScsCiAgJ2pvaW4nLAogICdhbnknLAogICd0b0xpc3QnLAogICd0b1NldCcsCiAgJ2xlbmd0aCcsCiAgJ2lzRW1wdHknLAogICdpc05vdEVtcHR5JywKICAndGFrZScsCiAgJ3Rha2VXaGlsZScsCiAgJ3NraXAnLAogICdza2lwV2hpbGUnLAogICdmaXJzdCcsCiAgJ2xhc3QnLAogICdzaW5nbGUnLAogICdmaXJzdFdoZXJlJywKICAnbGFzdFdoZXJlJywKICAnc2luZ2xlV2hlcmUnLAogICdlbGVtZW50QXQnLAoKICAvLyBGcm9tIExpc3QuCiAgJ1tdJywKICAnbGVuZ3RoJywKICAncmV2ZXJzZWQnLAogICdzb3J0JywKICAnaW5kZXhPZicsCiAgJ2xhc3RJbmRleE9mJywKICAnY2xlYXInLAogICdyZW1vdmUnLAogICdyZW1vdmVBdCcsCiAgJ3JlbW92ZUxhc3QnLAogICdyZW1vdmVXaGVyZScsCiAgJ3JldGFpbldoZXJlJywKICAnc3VibGlzdCcsCiAgJ2dldFJhbmdlJywKICAncmVtb3ZlUmFuZ2UnLAogICdhc01hcCcsCgogIC8vIEZyb20gSlNBcnJheS4KICAnY2hlY2tNdXRhYmxlJywKICAnY2hlY2tHcm93YWJsZScsCl0pOwoKU2V0PFN0cmluZz4gZG9Ob3RDaGFuZ2VMZW5ndGhTZWxlY3RvcnNTZXQgPSBuZXcgU2V0PFN0cmluZz4uZnJvbShjb25zdCA8U3RyaW5nPlsKICAvLyBGcm9tIE9iamVjdC4KICAnPT0nLAogICdoYXNoQ29kZScsCiAgJ3RvU3RyaW5nJywKICAnbm9TdWNoTWV0aG9kJywKICAncnVudGltZVR5cGUnLAoKICAvLyBGcm9tIEl0ZXJhYmxlLgogICdpdGVyYXRvcicsCiAgJ21hcCcsCiAgJ3doZXJlJywKICAnZXhwYW5kJywKICAnY29udGFpbnMnLAogICdmb3JFYWNoJywKICAncmVkdWNlJywKICAnZm9sZCcsCiAgJ2V2ZXJ5JywKICAnam9pbicsCiAgJ2FueScsCiAgJ3RvTGlzdCcsCiAgJ3RvU2V0JywKICAnbGVuZ3RoJywKICAnaXNFbXB0eScsCiAgJ2lzTm90RW1wdHknLAogICd0YWtlJywKICAndGFrZVdoaWxlJywKICAnc2tpcCcsCiAgJ3NraXBXaGlsZScsCiAgJ2ZpcnN0JywKICAnbGFzdCcsCiAgJ3NpbmdsZScsCiAgJ2ZpcnN0V2hlcmUnLAogICdsYXN0V2hlcmUnLAogICdzaW5nbGVXaGVyZScsCiAgJ2VsZW1lbnRBdCcsCgogIC8vIEZyb20gTGlzdC4KICAnW10nLAogICdbXT0nLAogICdsZW5ndGgnLAogICdyZXZlcnNlZCcsCiAgJ3NvcnQnLAogICdpbmRleE9mJywKICAnbGFzdEluZGV4T2YnLAogICdzdWJsaXN0JywKICAnZ2V0UmFuZ2UnLAogICdhc01hcCcsCgogIC8vIEZyb20gSlNBcnJheS4KICAnY2hlY2tNdXRhYmxlJywKICAnY2hlY2tHcm93YWJsZScsCl0pOwoKY2xhc3MgTGlzdFRyYWNlclZpc2l0b3IgZXh0ZW5kcyBUcmFjZXJWaXNpdG9yIHsKICAvLyBUaGUgW1NldF0gb2YgZm91bmQgYXNzaWdubWVudHMgdG8gdGhlIGxpc3QuCiAgU2V0PFR5cGVJbmZvcm1hdGlvbj4gYXNzaWdubWVudHMgPSBuZXcgU2V0bGV0PFR5cGVJbmZvcm1hdGlvbj4oKTsKICBib29sIGNhbGxzR3Jvd2FibGVNZXRob2QgPSBmYWxzZTsKCiAgTGlzdFRyYWNlclZpc2l0b3IodHJhY2VkVHlwZSwgaW5mZXJyZXIpIDogc3VwZXIodHJhY2VkVHlwZSwgaW5mZXJyZXIpOwoKICAvLy8gUmV0dXJucyBbdHJ1ZV0gaWYgdGhlIGFuYWx5c2lzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIFtmYWxzZV0gaWYgaXQKICAvLy8gYmFpbGVkIG91dC4gSW4gdGhlIGZvcm1lciBjYXNlLCBbYXNzaWdubWVudHNdIGhvbGRzIGEgbGlzdCBvZgogIC8vLyBbVHlwZUluZm9ybWF0aW9uXSBub2RlcyB0aGF0IGZsb3cgaW50byB0aGUgZWxlbWVudCB0eXBlIG9mIHRoaXMgbGlzdC4KICBib29sIHJ1bigpIHsKICAgIGFuYWx5emUoKTsKICAgIExpc3RUeXBlSW5mb3JtYXRpb24gbGlzdCA9IHRyYWNlZFR5cGU7CiAgICBpZiAoY29udGludWVBbmFseXppbmcpIHsKICAgICAgaWYgKCFjYWxsc0dyb3dhYmxlTWV0aG9kICYmIGxpc3QuaW5mZXJyZWRMZW5ndGggPT0gbnVsbCkgewogICAgICAgIGxpc3QuaW5mZXJyZWRMZW5ndGggPSBsaXN0Lm9yaWdpbmFsTGVuZ3RoOwogICAgICB9CiAgICAgIGxpc3QuYWRkRmxvd3NJbnRvVGFyZ2V0cyhmbG93c0ludG8pOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIGNhbGxzR3Jvd2FibGVNZXRob2QgPSB0cnVlOwogICAgICBhc3NpZ25tZW50cyA9IG51bGw7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q2xvc3VyZUNhbGxTaXRlVHlwZUluZm9ybWF0aW9uKENsb3N1cmVDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBiYWlsb3V0KCdQYXNzZWQgdG8gYSBjbG9zdXJlJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFN0YXRpY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKFN0YXRpY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIHN1cGVyLnZpc2l0U3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oaW5mbyk7CiAgICBNZW1iZXJFbnRpdHkgY2FsbGVkID0gaW5mby5jYWxsZWRFbGVtZW50OwogICAgaWYgKGluZmVycmVyLmNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmlzRm9yZWlnbihjYWxsZWQpICYmCiAgICAgICAgY2FsbGVkLm5hbWUgPT0gSWRlbnRpZmllcnMuSlMpIHsKICAgICAgYmFpbG91dCgnVXNlZCBpbiBKUyAke2luZm8uZGVidWdOYW1lfScpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXREeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oRHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIHN1cGVyLnZpc2l0RHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKGluZm8pOwogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBpbmZvLnNlbGVjdG9yOwogICAgU3RyaW5nIHNlbGVjdG9yTmFtZSA9IHNlbGVjdG9yLm5hbWU7CiAgICBpZiAoY3VycmVudFVzZXIgPT0gaW5mby5yZWNlaXZlcikgewogICAgICBpZiAoIW9rTGlzdFNlbGVjdG9yc1NldC5jb250YWlucyhzZWxlY3Rvck5hbWUpKSB7CiAgICAgICAgaWYgKHNlbGVjdG9yLmlzQ2FsbCkgewogICAgICAgICAgaW50IHBvc2l0aW9uYWxMZW5ndGggPSBpbmZvLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aDsKICAgICAgICAgIGlmIChzZWxlY3Rvck5hbWUgPT0gJ2FkZCcpIHsKICAgICAgICAgICAgaWYgKHBvc2l0aW9uYWxMZW5ndGggPT0gMSkgewogICAgICAgICAgICAgIGFzc2lnbm1lbnRzLmFkZChpbmZvLmFyZ3VtZW50cy5wb3NpdGlvbmFsWzBdKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3Rvck5hbWUgPT0gJ2luc2VydCcpIHsKICAgICAgICAgICAgaWYgKHBvc2l0aW9uYWxMZW5ndGggPT0gMikgewogICAgICAgICAgICAgIGFzc2lnbm1lbnRzLmFkZChpbmZvLmFyZ3VtZW50cy5wb3NpdGlvbmFsWzFdKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYmFpbG91dCgnVXNlZCBpbiBhIG5vdC1vayBzZWxlY3RvcicpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pc0luZGV4U2V0KSB7CiAgICAgICAgICBhc3NpZ25tZW50cy5hZGQoaW5mby5hcmd1bWVudHMucG9zaXRpb25hbFsxXSk7CiAgICAgICAgfSBlbHNlIGlmICghc2VsZWN0b3IuaXNJbmRleCkgewogICAgICAgICAgYmFpbG91dCgnVXNlZCBpbiBhIG5vdC1vayBzZWxlY3RvcicpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIWRvTm90Q2hhbmdlTGVuZ3RoU2VsZWN0b3JzU2V0LmNvbnRhaW5zKHNlbGVjdG9yTmFtZSkpIHsKICAgICAgICBjYWxsc0dyb3dhYmxlTWV0aG9kID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoc2VsZWN0b3JOYW1lID09ICdsZW5ndGgnICYmIHNlbGVjdG9yLmlzU2V0dGVyKSB7CiAgICAgICAgY2FsbHNHcm93YWJsZU1ldGhvZCA9IHRydWU7CiAgICAgICAgYXNzaWdubWVudHMuYWRkKGluZmVycmVyLnR5cGVzLm51bGxUeXBlKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pc0NhbGwgJiYKICAgICAgICAoaW5mby5oYXNDbG9zdXJlQ2FsbFRhcmdldHMgfHwKICAgICAgICAgICAgaW5mby5jb25jcmV0ZVRhcmdldHMuYW55KChlbGVtZW50KSA9PiAhZWxlbWVudC5pc0Z1bmN0aW9uKSkpIHsKICAgICAgYmFpbG91dCgnUGFzc2VkIHRvIGEgY2xvc3VyZScpOwogICAgICByZXR1cm47CiAgICB9CiAgfQp9CoDYAE5OPAErAR8kMigbIAFISChGEggODhIRARQOCQsMDg0MCgsKCQwLDA0QCg8KDwsKDBAPEQ8BEAgMDgoNEQsMDhAREQ0OEQsBExITBAFREggODhIRARQOCQsMDg0MCgsKCQwLDA0QCg8KDwsKDBAPEQ8BEAgJDA4KDRENDgsBExITBAEwMUQkAUkBS0RMDw8rHUEzCCsTDSIaFAYEAQxNJAQBDEs0LkEpLwYEAQxNNScpKDgfQycpPQ4xKT0OEzIUDCo5KDASCghDJAg7JDIIIidLJg4GBAIBLnBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL2xpc3RfdHJhY2VyLmRhcnQ2c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvbWFwX3RyYWNlci5kYXJ0kx4vLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBjb21waWxlci5zcmMuaW5mZXJyZXIubWFwX3RyYWNlcjsKCmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CmltcG9ydCAnbm9kZV90cmFjZXIuZGFydCc7CmltcG9ydCAndHlwZV9ncmFwaF9ub2Rlcy5kYXJ0JzsKClNldDxTdHJpbmc+IG9rTWFwU2VsZWN0b3JzU2V0ID0gbmV3IFNldC5mcm9tKGNvbnN0IDxTdHJpbmc+WwogIC8vIEZyb20gT2JqZWN0LgogICI9PSIsCiAgImhhc2hDb2RlIiwKICAidG9TdHJpbmciLAogICJub1N1Y2hNZXRob2QiLAogICJydW50aW1lVHlwZSIsCiAgLy8gRnJvbSBNYXAKICAiW10iLAogICJpc0VtcHR5IiwKICAiaXNOb3RFbXB0eSIsCiAgImtleXMiLAogICJsZW5ndGgiLAogICJ2YWx1ZXMiLAogICJjbGVhciIsCiAgImNvbnRhaW5zS2V5IiwKICAiY29udGFpbnNWYWx1ZSIsCiAgImZvckVhY2giLAogICJyZW1vdmUiCl0pOwoKY2xhc3MgTWFwVHJhY2VyVmlzaXRvciBleHRlbmRzIFRyYWNlclZpc2l0b3IgewogIC8vIFRoZXNlIGxpc3RzIGFyZSB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgbmV3bHkgZGlzY292ZXJlZCBhc3NpZ25tZW50cyB0bwogIC8vIHRoZSBtYXAuIE5vdGUgdGhhdCBlbGVtZW50cyBhdCBjb3JyZXNwb25kaW5nIGluZGljZXMgYXJlIGV4cGVjdGVkIHRvCiAgLy8gYmVsb25nIHRvIHRoZSBzYW1lIGFzc2lnbm1lbnQgb3BlcmF0aW9uLgogIExpc3Q8VHlwZUluZm9ybWF0aW9uPiBrZXlBc3NpZ25tZW50cyA9IDxUeXBlSW5mb3JtYXRpb24+W107CiAgTGlzdDxUeXBlSW5mb3JtYXRpb24+IHZhbHVlQXNzaWdubWVudHMgPSA8VHlwZUluZm9ybWF0aW9uPltdOwogIC8vIFRoaXMgbGlzdCBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgYXNzaWdubWVudHMgb2YgZW50aXJlIG1hcHMgdG8KICAvLyB0aGlzIG1hcC4KICBMaXN0PE1hcFR5cGVJbmZvcm1hdGlvbj4gbWFwQXNzaWdubWVudHMgPSA8TWFwVHlwZUluZm9ybWF0aW9uPltdOwoKICBNYXBUcmFjZXJWaXNpdG9yKHRyYWNlZFR5cGUsIGluZmVycmVyKSA6IHN1cGVyKHRyYWNlZFR5cGUsIGluZmVycmVyKTsKCiAgLy8vIFJldHVybnMgW3RydWVdIGlmIHRoZSBhbmFseXNpcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCBbZmFsc2VdCiAgLy8vIGlmIGl0IGJhaWxlZCBvdXQuIEluIHRoZSBmb3JtZXIgY2FzZSwgW2tleUFzc2lnbm1lbnRzXSBhbmQKICAvLy8gW3ZhbHVlQXNzaWdubWVudHNdIGhvbGQgYSBsaXN0IG9mIFtUeXBlSW5mb3JtYXRpb25dIG5vZGVzIHRoYXQKICAvLy8gZmxvdyBpbnRvIHRoZSBrZXkgYW5kIHZhbHVlIHR5cGVzIG9mIHRoaXMgbWFwLgogIGJvb2wgcnVuKCkgewogICAgYW5hbHl6ZSgpOwogICAgTWFwVHlwZUluZm9ybWF0aW9uIG1hcCA9IHRyYWNlZFR5cGU7CiAgICBpZiAoY29udGludWVBbmFseXppbmcpIHsKICAgICAgbWFwLmFkZEZsb3dzSW50b1RhcmdldHMoZmxvd3NJbnRvKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBrZXlBc3NpZ25tZW50cyA9IHZhbHVlQXNzaWdubWVudHMgPSBtYXBBc3NpZ25tZW50cyA9IG51bGw7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENsb3N1cmVDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihDbG9zdXJlQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgYmFpbG91dCgnUGFzc2VkIHRvIGEgY2xvc3VyZScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRTdGF0aWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihTdGF0aWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBzdXBlci52aXNpdFN0YXRpY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKGluZm8pOwogICAgTWVtYmVyRW50aXR5IGNhbGxlZCA9IGluZm8uY2FsbGVkRWxlbWVudDsKICAgIGlmIChpbmZlcnJlci5jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5pc0ZvcmVpZ24oY2FsbGVkKSAmJgogICAgICAgIGNhbGxlZC5uYW1lID09IElkZW50aWZpZXJzLkpTKSB7CiAgICAgIGJhaWxvdXQoJ1VzZWQgaW4gSlMgJHtpbmZvLmRlYnVnTmFtZX0nKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0RHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBzdXBlci52aXNpdER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihpbmZvKTsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gaW5mby5zZWxlY3RvcjsKICAgIFN0cmluZyBzZWxlY3Rvck5hbWUgPSBzZWxlY3Rvci5uYW1lOwogICAgaWYgKGN1cnJlbnRVc2VyID09IGluZm8ucmVjZWl2ZXIpIHsKICAgICAgaWYgKCFva01hcFNlbGVjdG9yc1NldC5jb250YWlucyhzZWxlY3Rvck5hbWUpKSB7CiAgICAgICAgaWYgKHNlbGVjdG9yLmlzQ2FsbCkgewogICAgICAgICAgaWYgKHNlbGVjdG9yTmFtZSA9PSAnYWRkQWxsJykgewogICAgICAgICAgICAvLyBBbGwga2V5cyBhbmQgdmFsdWVzIGZyb20gdGhlIGFyZ3VtZW50IGZsb3cgaW50bwogICAgICAgICAgICAvLyB0aGUgbWFwLgogICAgICAgICAgICBUeXBlSW5mb3JtYXRpb24gbWFwID0gaW5mby5hcmd1bWVudHMucG9zaXRpb25hbFswXTsKICAgICAgICAgICAgaWYgKG1hcCBpcyBNYXBUeXBlSW5mb3JtYXRpb24pIHsKICAgICAgICAgICAgICBpbmZlcnJlci5hbmFseXplTWFwQW5kRW5xdWV1ZShtYXApOwogICAgICAgICAgICAgIG1hcEFzc2lnbm1lbnRzLmFkZChtYXApOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIC8vIElmIHdlIGNvdWxkIHNlbGVjdCBhIGNvbXBvbmVudCBmcm9tIGEgW1R5cGVJbmZvcm1hdGlvbl0sCiAgICAgICAgICAgICAgLy8gbGlrZSB0aGUga2V5dHlwZSBvciB2YWx1ZXR5cGUgaW4gdGhpcyBjYXNlLCB3ZSBjb3VsZAogICAgICAgICAgICAgIC8vIHByb3BhZ2F0ZSBtb3JlIGhlcmUuCiAgICAgICAgICAgICAgLy8gVE9ETyhoZXJodXQpOiBpbXBsZW1lbnQgc2VsZWN0aW9uIG9uIFtUeXBlSW5mb3JtYXRpb25dLgogICAgICAgICAgICAgIGJhaWxvdXQoJ0FkZGluZyBtYXAgd2l0aCB1bmtub3duIHR5cGVpbmZvIHRvIGN1cnJlbnQgbWFwJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3JOYW1lID09ICdwdXRJZkFic2VudCcpIHsKICAgICAgICAgICAgLy8gVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgbmV3IGtleSwgdGhlIHJlc3VsdCB0eXBlIG9mCiAgICAgICAgICAgIC8vIHRoZSBzZWNvbmQgYXJndW1lbnQgYmVjb21lcyBhIG5ldyB2YWx1ZS4KICAgICAgICAgICAgLy8gVW5mb3J0dW5hdGVseSwgdGhlIHR5cGUgaW5mb3JtYXRpb24gZG9lcyBub3QKICAgICAgICAgICAgLy8gZXhwbGljaXRseSB0cmFjayB0aGUgcmV0dXJuIHR5cGUsIHlldCwgc28gd2UgaGF2ZQogICAgICAgICAgICAvLyB0byBnbyB0byBkeW5hbWljLgogICAgICAgICAgICAvLyBUT0RPKGhlcmh1dCwxNjUwNyk6IFVzZSByZXR1cm4gdHlwZSBvZiBjbG9zdXJlIGluCiAgICAgICAgICAgIC8vIE1hcC5wdXRJZkFic2VudC4KICAgICAgICAgICAga2V5QXNzaWdubWVudHMuYWRkKGluZm8uYXJndW1lbnRzLnBvc2l0aW9uYWxbMF0pOwogICAgICAgICAgICB2YWx1ZUFzc2lnbm1lbnRzLmFkZChpbmZlcnJlci50eXBlcy5keW5hbWljVHlwZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBJdCB3b3VsZCBiZSBuaWNlIHRvIGhhbmRsZSBbTWFwLmtleXNdIGFuZCBbTWFwLnZhbHVlc10sIHRvby4KICAgICAgICAgICAgLy8gSG93ZXZlciwgY3VycmVudGx5IHRob3NlIGNhbGxzIGRvIG5vdCB0cmlnZ2VyIHRoZSBjcmVhdGlvbgogICAgICAgICAgICAvLyBvZiBhIFtMaXN0VHlwZUluZm9ybWF0aW9uXSwgc28gSSBoYXZlIG5vd2hlcmUgdG8gcHJvcGFnYXRlCiAgICAgICAgICAgIC8vIHRoYXQgaW5mb3JtYXRpb24uCiAgICAgICAgICAgIC8vIFRPRE8oaGVyaHV0KTogYWRkIHN1cHBvcnQgZm9yIE1hcC5rZXlzIGFuZCBNYXAudmFsdWVzLgogICAgICAgICAgICBiYWlsb3V0KCdNYXAgdXNlZCBpbiBhIG5vdC1vayBzZWxlY3RvciBbJHNlbGVjdG9yTmFtZV0nKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuaXNJbmRleFNldCkgewogICAgICAgICAga2V5QXNzaWdubWVudHMuYWRkKGluZm8uYXJndW1lbnRzLnBvc2l0aW9uYWxbMF0pOwogICAgICAgICAgdmFsdWVBc3NpZ25tZW50cy5hZGQoaW5mby5hcmd1bWVudHMucG9zaXRpb25hbFsxXSk7CiAgICAgICAgfSBlbHNlIGlmICghc2VsZWN0b3IuaXNJbmRleCkgewogICAgICAgICAgYmFpbG91dCgnTWFwIHVzZWQgaW4gYSBub3Qtb2sgc2VsZWN0b3IgWyRzZWxlY3Rvck5hbWVdJyk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLmlzQ2FsbCAmJgogICAgICAgIChpbmZvLmhhc0Nsb3N1cmVDYWxsVGFyZ2V0cyB8fAogICAgICAgICAgICBpbmZvLmNvbmNyZXRlVGFyZ2V0cy5hbnkoKGVsZW1lbnQpID0+ICFlbGVtZW50LmlzRnVuY3Rpb24pKSkgewogICAgICBiYWlsb3V0KCdQYXNzZWQgdG8gYSBjbG9zdXJlJyk7CiAgICAgIHJldHVybjsKICAgIH0KICB9Cn0KgIYATk48ASoBHyQyGyABPRIIDg4SEQ4IDRAKDAwLERMNCwQBL0tKLj5ARg9EAUgBRUFFNQ8PKR0qEwY/EgQBDE0kBAEMSzQuQSkvBgQBDE01JykoNx8qPxhALTInFUpGJklKDjZDODxBIUEgPj4TTEpKIUZGFAwqPD4oRBIKCCInSyYOBgQCAS1wYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci9tYXBfdHJhY2VyLmRhcnQ2c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvc2V0X3RyYWNlci5kYXJ0jZEvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBjb21waWxlci5zcmMuaW5mZXJyZXIuc2V0X3RyYWNlcjsKCmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CmltcG9ydCAnbm9kZV90cmFjZXIuZGFydCc7CmltcG9ydCAndHlwZV9ncmFwaF9ub2Rlcy5kYXJ0JzsKCi8vLyBBIHNldCBvZiBzZWxlY3RvciBuYW1lcyB0aGF0IFtTZXRdIGltcGxlbWVudHMgYW5kIHdoaWNoIHdlIGtub3cgZG8gbm90Ci8vLyBjaGFuZ2UgdGhlIGVsZW1lbnQgdHlwZSBvZiB0aGUgc2V0IG9yIGxldCB0aGUgc2V0IGVzY2FwZSB0byBjb2RlIHRoYXQgbWlnaHQKLy8vIGNoYW5nZSB0aGUgZWxlbWVudCB0eXBlLgpTZXQ8U3RyaW5nPiBva1NldFNlbGVjdG9yU2V0ID0gbmV3IFNldDxTdHJpbmc+LmZyb20oY29uc3QgPFN0cmluZz5bCiAgLy8gRnJvbSBPYmplY3QuCiAgJz09JywKICAnaGFzaENvZGUnLAogICd0b1N0cmluZycsCiAgJ25vU3VjaE1ldGhvZCcsCiAgJ3J1bnRpbWVUeXBlJywKCiAgLy8gRnJvbSBJdGVyYWJsZS4KICAnaXRlcmF0b3InLAogICdtYXAnLAogICd3aGVyZScsCiAgJ2V4cGFuZCcsCiAgJ2NvbnRhaW5zJywKICAnZm9yRWFjaCcsCiAgJ3JlZHVjZScsCiAgJ2ZvbGQnLAogICdldmVyeScsCiAgJ2pvaW4nLAogICdhbnknLAogICd0b0xpc3QnLAogICd0b1NldCcsCiAgJ2xlbmd0aCcsCiAgJ2lzRW1wdHknLAogICdpc05vdEVtcHR5JywKICAndGFrZScsCiAgJ3Rha2VXaGlsZScsCiAgJ3NraXAnLAogICdza2lwV2hpbGUnLAogICdmaXJzdCcsCiAgJ2xhc3QnLAogICdzaW5nbGUnLAogICdmaXJzdFdoZXJlJywKICAnbGFzdFdoZXJlJywKICAnc2luZ2xlV2hlcmUnLAogICdlbGVtZW50QXQnLAoKICAvLyBGcm9tIFNldC4KICAnY2xlYXInLAogICdjb250YWluc0FsbCcsCiAgJ2RpZmZlcmVuY2UnLAogICdpbnRlcnNlY3Rpb24nLAogICdsb29rdXAnLAogICdyZW1vdmUnLAogICdyZW1vdmVBbGwnLAogICdyZW1vdmVXaGVyZScsCiAgJ3JldGFpbkFsbCcsCiAgJ3JldGFpbldoZXJlJywKICAndW5pb24nLApdKTsKCmNsYXNzIFNldFRyYWNlclZpc2l0b3IgZXh0ZW5kcyBUcmFjZXJWaXNpdG9yIHsKICBMaXN0PFR5cGVJbmZvcm1hdGlvbj4gYXNzaWdubWVudHMgPSA8VHlwZUluZm9ybWF0aW9uPltdOwoKICBTZXRUcmFjZXJWaXNpdG9yKHRyYWNlZFR5cGUsIGluZmVycmVyKSA6IHN1cGVyKHRyYWNlZFR5cGUsIGluZmVycmVyKTsKCiAgLy8vIFJldHVybnMgW3RydWVdIGlmIHRoZSBhbmFseXNpcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCBbZmFsc2VdIGlmIGl0CiAgLy8vIGJhaWxlZCBvdXQuIEluIHRoZSBmb3JtZXIgY2FzZSwgW2Fzc2lnbm1lbnRzXSBob2xkcyBhIGxpc3Qgb2YKICAvLy8gW1R5cGVJbmZvcm1hdGlvbl0gbm9kZXMgdGhhdCBmbG93IGludG8gdGhlIGVsZW1lbnQgdHlwZSBvZiB0aGlzIHNldC4KICBib29sIHJ1bigpIHsKICAgIGFuYWx5emUoKTsKICAgIFNldFR5cGVJbmZvcm1hdGlvbiBzZXQgPSB0cmFjZWRUeXBlOwogICAgaWYgKGNvbnRpbnVlQW5hbHl6aW5nKSB7CiAgICAgIHNldC5hZGRGbG93c0ludG9UYXJnZXRzKGZsb3dzSW50byk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgYXNzaWdubWVudHMgPSBudWxsOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDbG9zdXJlQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oQ2xvc3VyZUNhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGJhaWxvdXQoJ1Bhc3NlZCB0byBhIGNsb3N1cmUnKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0U3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oU3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgc3VwZXIudmlzaXRTdGF0aWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihpbmZvKTsKICAgIE1lbWJlckVudGl0eSBjYWxsZWQgPSBpbmZvLmNhbGxlZEVsZW1lbnQ7CiAgICBpZiAoaW5mZXJyZXIuY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuaXNGb3JlaWduKGNhbGxlZCkgJiYKICAgICAgICBjYWxsZWQubmFtZSA9PSBJZGVudGlmaWVycy5KUykgewogICAgICBiYWlsb3V0KCdVc2VkIGluIEpTICR7aW5mby5kZWJ1Z05hbWV9Jyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihEeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgc3VwZXIudmlzaXREeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oaW5mbyk7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IGluZm8uc2VsZWN0b3I7CiAgICBTdHJpbmcgc2VsZWN0b3JOYW1lID0gc2VsZWN0b3IubmFtZTsKICAgIGlmIChjdXJyZW50VXNlciA9PSBpbmZvLnJlY2VpdmVyKSB7CiAgICAgIGlmICghb2tTZXRTZWxlY3RvclNldC5jb250YWlucyhzZWxlY3Rvck5hbWUpKSB7CiAgICAgICAgaWYgKHNlbGVjdG9yLmlzQ2FsbCkgewogICAgICAgICAgc3dpdGNoIChzZWxlY3Rvck5hbWUpIHsKICAgICAgICAgICAgY2FzZSAnYWRkJzoKICAgICAgICAgICAgICBhc3NpZ25tZW50cy5hZGQoaW5mby5hcmd1bWVudHMucG9zaXRpb25hbFswXSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2FkZEFsbCc6CiAgICAgICAgICAgICAgLy8gVE9ETyhmaXNoeXRoZWZpc2gpOiBFeHRyYWN0IHR5cGUgYXJndW1lbnQgZnJvbSB0eXBlCiAgICAgICAgICAgICAgLy8gaW5mb3JtYXRpb24uCiAgICAgICAgICAgICAgYmFpbG91dCgnQWRkaW5nIGl0ZXJhYmxlIHdpdGggdW5rbm93biB0eXBlaW5mbyB0byBjdXJyZW50IHNldCcpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIGJhaWxvdXQoJ1NldCB1c2VkIGluIGEgbm90LW9rIHNlbGVjdG9yIFskc2VsZWN0b3JOYW1lXScpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pc0NhbGwgJiYKICAgICAgICAoaW5mby5oYXNDbG9zdXJlQ2FsbFRhcmdldHMgfHwKICAgICAgICAgICAgaW5mby5jb25jcmV0ZVRhcmdldHMuYW55KChlbGVtZW50KSA9PiAhZWxlbWVudC5pc0Z1bmN0aW9uKSkpIHsKICAgICAgYmFpbG91dCgnUGFzc2VkIHRvIGEgY2xvc3VyZScpOwogICAgICByZXR1cm47CiAgICB9CiAgfQp9CoCFAE5OPAEqAR8kMhsgAUtQHUQSCA4OEhEBFA4JCwwODQwKCwoJDAsMDRAKDwoPCwoMEA8RDwEPCxEQEgwMDxEPEQsEAS87AUgBS0RLDw8pHSoTBhgSBAEMTSQEAQxLNC5BKS8GBAEMTTUnKSg2HyIYPRUbRR5PFRVIDBIKCCInSyYOBgQCAS1wYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci9zZXRfdHJhY2VyLmRhcnQ7c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvdHlwZV9ncmFwaF9kdW1wLmRhcnS6ry8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCmxpYnJhcnkgZGFydDJqcy5pbmZlcnJlci50eXBlX2dyYXBoX2R1bXA7CgppbXBvcnQgJy4uLy4uL2NvbXBpbGVyX25ldy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdHlfdXRpbHMuZGFydCcgYXMgdXRpbHM7CmltcG9ydCAnYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJ2luZmVycmVyX2VuZ2luZS5kYXJ0JzsKaW1wb3J0ICd0eXBlX2dyYXBoX25vZGVzLmRhcnQnOwppbXBvcnQgJ2RlYnVnLmRhcnQnOwoKLy8vIER1bXBzIHRoZSB0eXBlIGluZmVyZW5jZSBncmFwaCBpbiBHcmFwaHZpeiBEb3QgZm9ybWF0IGludG8gdGhlIGB0eXBlZ3JhcGhgCi8vLyBzdWJmb2xkZXIgb2YgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIEVhY2ggZnVuY3Rpb24gYm9keSBpcyBkdW1wZWQgaW4KLy8vIGEgc2VwYXJhdGUgZmlsZS4KLy8vCi8vLyBUaGUgcmVzdWx0aW5nIC5kb3QgZmlsZXMgbXVzdCBiZSBwcm9jZXNzZWQgdXNpbmcgdGhlIEdyYXBodml6IGBkb3RgIGNvbW1hbmQsCi8vLyB3aGljaCBjYW4gYmUgb2J0YWluZWQgZnJvbSBgaHR0cDovL3d3dy5ncmFwaHZpei5vcmdgLCBvciBpbnN0YWxsZWQgdXNpbmcKLy8vIG1vc3QgcGFja2FnZSBtYW5hZ2VycyAoc2VhcmNoIGZvciBgZ3JhcGh2aXpgIG9yIGBkb3RgKS4KLy8vCi8vLyBFeGFtcGxlIGNvbW1hbmRzOgovLy8KLy8vICAgICBkb3QgLVRwbmcgLU8gdHlwZWdyYXBoL21haW4uZG90Ci8vLyAgICAgb3BlbiB0eXBlZ3JhcGgvbWFpbi5kb3QucG5nCi8vLwovLy8gICAgIGRvdCAtVHBuZyAtTyB0eXBlZ3JhcGgvZGFydC5faW50ZXJuYWwuU29ydC5fZHVhbFBpdm90UXVpY2tzb3J0LmRvdAovLy8gICAgIG9wZW4gdHlwZWdyYXBoL2RhcnQuX2ludGVybmFsLlNvcnQuX2R1YWxQaXZvdFF1aWNrc29ydC5kb3QucG5nCi8vLwpjbGFzcyBUeXBlR3JhcGhEdW1wIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIG91dHB1dERpciA9ICd0eXBlZ3JhcGgnOwoKICBmaW5hbCBDb21waWxlck91dHB1dCBjb21waWxlck91dHB1dDsKICBmaW5hbCBJbmZlcnJlckVuZ2luZSBpbmZlcnJlcjsKICBmaW5hbCBNYXA8VHlwZUluZm9ybWF0aW9uLCBTZXQ8VHlwZUluZm9ybWF0aW9uPj4gYXNzaWdubWVudHNCZWZvcmVBbmFseXNpcyA9CiAgICAgIDxUeXBlSW5mb3JtYXRpb24sIFNldDxUeXBlSW5mb3JtYXRpb24+Pnt9OwogIGZpbmFsIE1hcDxUeXBlSW5mb3JtYXRpb24sIFNldDxUeXBlSW5mb3JtYXRpb24+PiBhc3NpZ25tZW50c0JlZm9yZVRyYWNpbmcgPQogICAgICA8VHlwZUluZm9ybWF0aW9uLCBTZXQ8VHlwZUluZm9ybWF0aW9uPj57fTsKICBmaW5hbCBTZXQ8U3RyaW5nPiB1c2VkRmlsZW5hbWVzID0gbmV3IFNldDxTdHJpbmc+KCk7CgogIFR5cGVHcmFwaER1bXAodGhpcy5jb21waWxlck91dHB1dCwgdGhpcy5pbmZlcnJlcik7CgogIC8vLyBUYWtlIGEgY29weSBvZiB0aGUgYXNzaWdubWVudCBzZXQgZm9yIGVhY2ggbm9kZSwgc2luY2UgdGhhdCBtYXkgY2hhbmdlCiAgLy8vIGR1cmluZyB0aGUgYW5hbHlzaXMuCiAgdm9pZCBiZWZvcmVBbmFseXNpcygpIHsKICAgIGZvciAoVHlwZUluZm9ybWF0aW9uIG5vZGUgaW4gaW5mZXJyZXIudHlwZXMuYWxsVHlwZXMpIHsKICAgICAgU2V0PFR5cGVJbmZvcm1hdGlvbj4gY29weSA9IG5vZGUuYXNzaWdubWVudHMudG9TZXQoKTsKICAgICAgaWYgKCFjb3B5LmlzRW1wdHkpIHsKICAgICAgICBhc3NpZ25tZW50c0JlZm9yZUFuYWx5c2lzW25vZGVdID0gY29weTsKICAgICAgfQogICAgfQogIH0KCiAgLy8vIExpa2UgW2JlZm9yZUFuYWx5c2lzXSwgdGFrZXMgYSBjb3B5IG9mIHRoZSBhc3NpZ25tZW50IHNldHMuCiAgdm9pZCBiZWZvcmVUcmFjaW5nKCkgewogICAgZm9yIChUeXBlSW5mb3JtYXRpb24gbm9kZSBpbiBpbmZlcnJlci50eXBlcy5hbGxUeXBlcykgewogICAgICBTZXQ8VHlwZUluZm9ybWF0aW9uPiBjb3B5ID0gbm9kZS5hc3NpZ25tZW50cy50b1NldCgpOwogICAgICBpZiAoIWNvcHkuaXNFbXB0eSkgewogICAgICAgIGFzc2lnbm1lbnRzQmVmb3JlVHJhY2luZ1tub2RlXSA9IGNvcHk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBEdW1wcyB0aGUgZW50aXJlIGdyYXBoLgogIHZvaWQgYWZ0ZXJBbmFseXNpcygpIHsKICAgIC8vIEdyb3VwIGFsbCB0aGUgdHlwZSBub2RlcyBieSB0aGVpciBjb250ZXh0IG1lbWJlci4KICAgIE1hcDxNZW1iZXJFbnRpdHksIExpc3Q8VHlwZUluZm9ybWF0aW9uPj4gbm9kZXMgPQogICAgICAgIDxNZW1iZXJFbnRpdHksIExpc3Q8VHlwZUluZm9ybWF0aW9uPj57fTsKICAgIGZvciAoVHlwZUluZm9ybWF0aW9uIG5vZGUgaW4gaW5mZXJyZXIudHlwZXMuYWxsVHlwZXMpIHsKICAgICAgaWYgKG5vZGUuY29udGV4dE1lbWJlciAhPSBudWxsKSB7CiAgICAgICAgbm9kZXMKICAgICAgICAgICAgLnB1dElmQWJzZW50KG5vZGUuY29udGV4dE1lbWJlciwgKCkgPT4gPFR5cGVJbmZvcm1hdGlvbj5bXSkKICAgICAgICAgICAgLmFkZChub2RlKTsKICAgICAgfQogICAgfQogICAgLy8gUHJpbnQgZXZlcnkgZ3JvdXAgc2VwYXJhdGVseS4KICAgIGZvciAoTWVtYmVyRW50aXR5IGVsZW1lbnQgaW4gbm9kZXMua2V5cykgewogICAgICBPdXRwdXRTaW5rIG91dHB1dDsKICAgICAgdHJ5IHsKICAgICAgICBTdHJpbmcgbmFtZSA9IGZpbGVuYW1lRnJvbUVsZW1lbnQoZWxlbWVudCk7CiAgICAgICAgb3V0cHV0ID0gY29tcGlsZXJPdXRwdXQuY3JlYXRlT3V0cHV0U2luaygKICAgICAgICAgICAgJyRvdXRwdXREaXIvJG5hbWUnLCAnZG90JywgT3V0cHV0VHlwZS5kZWJ1Zyk7CiAgICAgICAgX0dyYXBoR2VuZXJhdG9yIHZpc2l0b3IgPSBuZXcgX0dyYXBoR2VuZXJhdG9yKAogICAgICAgICAgICB0aGlzLCBlbGVtZW50LCBvdXRwdXQsIGluZmVycmVyLmFic3RyYWN0VmFsdWVEb21haW4uZ2V0Q29tcGFjdFRleHQpOwogICAgICAgIGZvciAoVHlwZUluZm9ybWF0aW9uIG5vZGUgaW4gbm9kZXNbZWxlbWVudF0pIHsKICAgICAgICAgIHZpc2l0b3IudmlzaXQobm9kZSk7CiAgICAgICAgfQogICAgICAgIHZpc2l0b3IuYWRkTWlzc2luZ05vZGVzKCk7CiAgICAgICAgdmlzaXRvci5maW5pc2goKTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICBpZiAob3V0cHV0ICE9IG51bGwpIHsKICAgICAgICAgIG91dHB1dC5jbG9zZSgpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgLy8vIFJldHVybnMgdGhlIGZpbGVuYW1lICh3aXRob3V0IGV4dGVuc2lvbikgaW4gd2hpY2ggdG8gZHVtcCB0aGUgdHlwZQogIC8vLyBncmFwaCBmb3IgW2VsZW1lbnRdLgogIC8vLwogIC8vLyBXaWxsIG5ldmVyIHJldHVybiB0aGUgYSBnaXZlbiBmaWxlbmFtZSBtb3JlIHRoYW4gb25jZSwgZXZlbiBpZiBjYWxsZWQgd2l0aAogIC8vLyB0aGUgc2FtZSBlbGVtZW50LgogIFN0cmluZyBmaWxlbmFtZUZyb21FbGVtZW50KE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICAvLyBUaGUgdG9TdHJpbmcgbWV0aG9kIG9mIGVsZW1lbnRzIGluY2x1ZGUgY2hhcmFjdGVycyB0aGF0IGFyZSB1bnN1aXRhYmxlCiAgICAvLyBmb3IgVVJJcyBhbmQgZmlsZSBzeXN0ZW1zLgogICAgTGlzdDxTdHJpbmc+IHBhcnRzID0gPFN0cmluZz5bXTsKICAgIHBhcnRzLmFkZChlbGVtZW50LmxpYnJhcnkuY2Fub25pY2FsVXJpLnBhdGhTZWdtZW50cy5sYXN0KTsKICAgIHBhcnRzLmFkZChlbGVtZW50LmVuY2xvc2luZ0NsYXNzPy5uYW1lKTsKICAgIGlmIChlbGVtZW50LmlzR2V0dGVyKSB7CiAgICAgIHBhcnRzLmFkZCgnZ2V0LSR7ZWxlbWVudC5uYW1lfScpOwogICAgfSBlbHNlIGlmIChlbGVtZW50LmlzU2V0dGVyKSB7CiAgICAgIHBhcnRzLmFkZCgnc2V0LSR7ZWxlbWVudC5uYW1lfScpOwogICAgfSBlbHNlIGlmIChlbGVtZW50LmlzQ29uc3RydWN0b3IpIHsKICAgICAgaWYgKGVsZW1lbnQubmFtZS5pc0VtcHR5KSB7CiAgICAgICAgcGFydHMuYWRkKCctY29uc3RydWN0b3InKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwYXJ0cy5hZGQoZWxlbWVudC5uYW1lKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcGFydHMuYWRkKAogICAgICAgICAgdXRpbHMub3BlcmF0b3JOYW1lVG9JZGVudGlmaWVyKGVsZW1lbnQubmFtZSkucmVwbGFjZUFsbChyJyQnLCAnLScpKTsKICAgIH0KICAgIFN0cmluZyBmaWxlbmFtZSA9IHBhcnRzLndoZXJlKCh4KSA9PiB4ICE9IG51bGwgJiYgeCAhPSAnJykuam9pbignLicpOwogICAgaWYgKHVzZWRGaWxlbmFtZXMuYWRkKGZpbGVuYW1lKSkgcmV0dXJuIGZpbGVuYW1lOwogICAgLy8gVGhlIGZpbGVuYW1lIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBieSBhbm90aGVyIG1ldGhvZC4gQXBwZW5kIGEgc2VyaWFsCiAgICAvLyBudW1iZXIgdG8gZW5zdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBpdC4KICAgIGludCBzZXJpYWxOdW1iZXIgPSAyOwogICAgd2hpbGUgKCF1c2VkRmlsZW5hbWVzLmFkZCgnJGZpbGVuYW1lLSRzZXJpYWxOdW1iZXInKSkgewogICAgICArK3NlcmlhbE51bWJlcjsKICAgIH0KICAgIHJldHVybiAnJGZpbGVuYW1lLSRzZXJpYWxOdW1iZXInOwogIH0KfQoKLy8vIEJ1aWxkcyB0aGUgR3JhcGh2aXogRG90IGZpbGUgZm9yIG9uZSBmdW5jdGlvbiBib2R5LgpjbGFzcyBfR3JhcGhHZW5lcmF0b3IgZXh0ZW5kcyBUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHsKICBmaW5hbCBUeXBlR3JhcGhEdW1wIGdsb2JhbDsKICBmaW5hbCBTZXQ8VHlwZUluZm9ybWF0aW9uPiBzZWVuID0gbmV3IFNldDxUeXBlSW5mb3JtYXRpb24+KCk7CiAgZmluYWwgTGlzdDxUeXBlSW5mb3JtYXRpb24+IHdvcmtsaXN0ID0gbmV3IExpc3Q8VHlwZUluZm9ybWF0aW9uPigpOwogIGZpbmFsIE1hcDxUeXBlSW5mb3JtYXRpb24sIGludD4gbm9kZUlkID0gPFR5cGVJbmZvcm1hdGlvbiwgaW50Pnt9OwogIGZpbmFsIFN0cmluZyBGdW5jdGlvbihBYnN0cmFjdFZhbHVlKSBmb3JtYXRUeXBlOwogIGludCB1c2VkSWRzID0gMDsKICBmaW5hbCBPdXRwdXRTaW5rIG91dHB1dDsKICBmaW5hbCBNZW1iZXJFbnRpdHkgZWxlbWVudDsKICBUeXBlSW5mb3JtYXRpb24gcmV0dXJuVmFsdWU7CgogIF9HcmFwaEdlbmVyYXRvcih0aGlzLmdsb2JhbCwgdGhpcy5lbGVtZW50LCB0aGlzLm91dHB1dCwgdGhpcy5mb3JtYXRUeXBlKSB7CiAgICByZXR1cm5WYWx1ZSA9IGdsb2JhbC5pbmZlcnJlci50eXBlcy5nZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihlbGVtZW50KTsKICAgIGdldE5vZGUocmV0dXJuVmFsdWUpOyAvLyBFbnN1cmUgcmV0dXJuIHZhbHVlIGlzIHBhcnQgb2YgZ3JhcGguCiAgICBhcHBlbmQoJ2RpZ3JhcGggeycpOwogIH0KCiAgdm9pZCBmaW5pc2goKSB7CiAgICBhcHBlbmQoJ30nKTsKICB9CgogIC8vLyBFbnN1cmVzIHRoYXQgYWxsIG5vZGVzIHdoaWNoIGhhdmUgYmVlbiByZWZlcmVuY2VkIGFyZSBnZW5lcmF0ZWQuCiAgLy8vCiAgLy8vIFNvbWV0aW1lcyBhbiBpbnB1dCB0byBhIFR5cGVJbmZvcm1hdGlvbiBub2RlIGRvZXMgbm90IGJlbG9uZyB0byB0aGUgc2FtZQogIC8vLyBmdW5jdGlvbiBib2R5LCBhbmQgdGhlIGdyYXBoIGxvb2tzIGNvbmZ1c2luZyBpZiB0aGV5IGFyZSBtaXNzaW5nLgogIHZvaWQgYWRkTWlzc2luZ05vZGVzKCkgewogICAgd2hpbGUgKHdvcmtsaXN0LmlzTm90RW1wdHkpIHsKICAgICAgVHlwZUluZm9ybWF0aW9uIG5vZGUgPSB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7CiAgICAgIGFzc2VydChub2RlSWQuY29udGFpbnNLZXkobm9kZSkpOwogICAgICB2aXNpdChub2RlKTsKICAgIH0KICB9CgogIHZvaWQgdmlzaXQoVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGlmIChzZWVuLmNvbnRhaW5zKGluZm8pKSByZXR1cm47CiAgICBpbmZvLmFjY2VwdCh0aGlzKTsKICB9CgogIHZvaWQgYXBwZW5kKFN0cmluZyBzdHJpbmcpIHsKICAgIG91dHB1dC4uYWRkKHN0cmluZykuLmFkZCgnXG4nKTsKICB9CgogIFN0cmluZyBzaG9ydGVuKFN0cmluZyB0ZXh0KSB7CiAgICBpZiAodGV4dC5sZW5ndGggPiA0MCkgewogICAgICByZXR1cm4gdGV4dC5zdWJzdHJpbmcoMCwgMTkpICsgJy4uLicgKyB0ZXh0LnN1YnN0cmluZyh0ZXh0Lmxlbmd0aCAtIDE4KTsKICAgIH0KICAgIHJldHVybiB0ZXh0OwogIH0KCiAgaW50IGdldEZyZXNoSWQoKSA9PiArK3VzZWRJZHM7CgogIC8vLyBPYnRhaW5zIGEgdW5pcXVlIElEIGZvciB0aGUgbm9kZSByZXByZXNlbnRpbmcgW2luZm9dLgogIFN0cmluZyBnZXROb2RlKFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBpbnQgaWQgPSBub2RlSWQucHV0SWZBYnNlbnQoaW5mbywgKCkgewogICAgICB3b3JrbGlzdC5hZGQoaW5mbyk7IC8vIEVuc3VyZSB0aGF0IHRoZSByZWZlcmVuY2VkIG5vZGUgaXMgZ2VuZXJhdGVkLgogICAgICByZXR1cm4gZ2V0RnJlc2hJZCgpOwogICAgfSk7CiAgICByZXR1cm4gJyRpZCc7CiAgfQoKICBmaW5hbCBSZWdFeHAgZXNjYXBlUmVnZXhwID0gbmV3IFJlZ0V4cCgnWyJ7fTw+fF0nKTsKCiAgLy8vIEVzY2FwZXMgY2hhcmFjdGVycyBpbiBbdGV4dF0gc28gaXQgY2FuIGJlIHVzZWQgYXMgcGFydCBvZiBhIGxhYmVsLgogIFN0cmluZyBlc2NhcGVMYWJlbChTdHJpbmcgdGV4dCkgewogICAgcmV0dXJuIHRleHQucmVwbGFjZUFsbE1hcHBlZChlc2NhcGVSZWdleHAsIChtKSA9PiAnXFwke20uZ3JvdXAoMCl9Jyk7CiAgfQoKICAvLy8gQ3JlYXRlcyBhbiBlZGdlIGZyb20gW3NyY10gdG8gW2RzdF0uCiAgLy8vCiAgLy8vIElmIFtkc3RdIGlzIGEgcmVjb3JkIHR5cGUgbm9kZSwgW3BvcnRdIG1heSByZWZlciB0byBvbmUgb2YgdGhlIGZpZWxkcwogIC8vLyBkZWZpbmVkIGluIHRoYXQgcmVjb3JkIChlLmcuIGBvYmpgLCBgYXJnMGAsIGBhcmcxYCwgZXRjKQogIHZvaWQgYWRkRWRnZShUeXBlSW5mb3JtYXRpb24gc3JjLCBUeXBlSW5mb3JtYXRpb24gZHN0LAogICAgICB7U3RyaW5nIHBvcnQsIFN0cmluZyBjb2xvcjogJ2JsYWNrJ30pIHsKICAgIGlmIChpc0V4dGVybmFsKHNyYykgJiYgaXNFeHRlcm5hbChkc3QpKSB7CiAgICAgIHJldHVybjsgLy8gRG8gbm90IGFkZCBlZGdlcyBiZXR3ZWVuIGV4dGVybmFsIG5vZGVzLgogICAgfQogICAgU3RyaW5nIGRzdFRleHQgPSBnZXROb2RlKGRzdCk7CiAgICBpZiAocG9ydCAhPSBudWxsKSB7CiAgICAgIGRzdFRleHQgKz0gJzokcG9ydCc7CiAgICB9CiAgICBpZiAoc3JjIGlzIENvbmNyZXRlVHlwZUluZm9ybWF0aW9uKSB7CiAgICAgIC8vIENvbmNyZXRlIHR5cGVzIGNhbiBoYXZlIGEgaHVnZSBudW1iZXIgb2YgdXNlcyB3aGljaCB3aWxsIGZsb29kIHRoZQogICAgICAvLyBncmFwaCB3aXRoIHZlcnkgbG9uZyBoYXJkLXRvLWZvbGxvdyBlZGdlcy4gQ29weSB0aGUgY29uY3JldGUgbm9kZXMKICAgICAgLy8gZm9yIGV2ZXJ5IHVzZSB0byBlbmhhbmNlIHJlYWRhYmlsaXR5LgogICAgICBpbnQgaWQgPSBnZXRGcmVzaElkKCk7CiAgICAgIFN0cmluZyB0eXBlID0gZXNjYXBlTGFiZWwoJyR7Zm9ybWF0VHlwZShzcmMudHlwZSl9Jyk7CiAgICAgIFN0cmluZyB0ZXh0ID0gJ0NvbmNyZXRlJzsKICAgICAgU3RyaW5nIGxhYmVsID0gJ3skdGV4dHw8cmV0dXJuVHlwZT4gJHR5cGV9JzsKICAgICAgYXBwZW5kKCckaWQgW3NoYXBlPXJlY29yZCxzdHlsZT1kb3R0ZWQsbGFiZWw9IiRsYWJlbCJdJyk7CiAgICAgIGFwcGVuZCgnJGlkIC0+ICRkc3RUZXh0IFtjb2xvcj0iJGNvbG9yIl0nKTsKICAgIH0gZWxzZSB7CiAgICAgIGFwcGVuZCgnJHtnZXROb2RlKHNyYyl9OnJldHVyblR5cGUgLT4gJGRzdFRleHQgW2NvbG9yPSIkY29sb3IiXScpOwogICAgfQogIH0KCiAgLy8gU29tZSBncmFwaHMgYXJlIGZsb29kZWQgYnkgYSBodWdlIG51bWJlciBvZiBwaGkgYW5kIG5hcnJvdyBub2Rlcy4KICAvLyBXZSBjb2xvciB0aGUgbm9kZXMgc28gdGhlICJpbnRlcmVzdGluZyIgbm9kZXMgc3RhbmQgb3V0IG1vcmUuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBkZWZhdWx0Tm9kZUNvbG9yID0gJyNlZWZmZWUnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgcGhpQ29sb3IgPSAnI2VlZmZmZic7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBuYXJyb3dDb2xvciA9IHBoaUNvbG9yOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgY2FsbENvbG9yID0gJyNmZmZmZWUnOwoKICAvLyBDb2xvcnMgZm9yIGVkZ2VzIGJhc2VkIG9uIHdoZXRoZXIgdGhleSB3ZXJlIGFkZGVkIG9yIHJlbW92ZWQgZHVyaW5nIHRoZQogIC8vIGFuYWx5c2lzLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdW5jaGFuZ2VkRWRnZSA9ICdibGFjayc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBhZGRlZEVkZ2UgPSAnZ3JlZW40JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHJlbW92ZWRFZGdlID0gJ3JlZDMnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGVtcG9yYXJ5RWRnZSA9ICdvcmFuZ2UnOyAvLyBBZGRlZCBhbmQgdGhlbiByZW1vdmVkIGFnYWluLgoKICBib29sIGlzRXh0ZXJuYWwoVHlwZUluZm9ybWF0aW9uIG5vZGUpIHsKICAgIHJldHVybiBub2RlICE9IHJldHVyblZhbHVlICYmIG5vZGUuY29udGV4dE1lbWJlciAhPSBlbGVtZW50OwogIH0KCiAgU3RyaW5nIGdldFN0eWxlRm9yTm9kZShUeXBlSW5mb3JtYXRpb24gbm9kZSwgU3RyaW5nIGNvbG9yKSB7CiAgICByZXR1cm4gaXNFeHRlcm5hbChub2RlKQogICAgICAgID8gJ3N0eWxlPWRvdHRlZCcKICAgICAgICA6ICdzdHlsZT1maWxsZWQsZmlsbGNvbG9yPSIkY29sb3IiJzsKICB9CgogIC8vLyBBZGRzIGRldGFpbHMgdGhhdCBhcmUgbm90IHNwZWNpZmljIHRvIGEgc3ViY2xhc3Mgb2YgW1R5cGVJbmZvcm1hdGlvbl0uCiAgU3RyaW5nIGFwcGVuZERldGFpbHMoVHlwZUluZm9ybWF0aW9uIG5vZGUsIFN0cmluZyB0ZXh0KSB7CiAgICBpZiAobm9kZSA9PSByZXR1cm5WYWx1ZSkgewogICAgICByZXR1cm4gJyR0ZXh0XG4ocmV0dXJuIHZhbHVlKSc7CiAgICB9CiAgICBpZiAobm9kZS5jb250ZXh0TWVtYmVyICE9IG51bGwgJiYgbm9kZS5jb250ZXh0TWVtYmVyICE9IGVsZW1lbnQpIHsKICAgICAgcmV0dXJuICckdGV4dFxuKGZyb20gJHtub2RlLmNvbnRleHRNZW1iZXJ9KSc7CiAgICB9CiAgICByZXR1cm4gdGV4dDsKICB9CgogIC8vLyBDcmVhdGVzIGEgbm9kZSBmb3IgW25vZGVdIGRpc3BsYXlpbmcgdGhlIGdpdmVuIFt0ZXh0XSBpbiBpdHMgYm94LgogIC8vLwogIC8vLyBbaW5wdXRzXSBzcGVjaWZ5IG5hbWVkIGlucHV0cyB0byB0aGUgbm9kZS4gSWYgb21pdHRlZCwgZWRnZXMgd2lsbCBiZQogIC8vLyBiYXNlZCBvbiBbbm9kZS5hc3NpZ25tZW50c10uCiAgdm9pZCBhZGROb2RlKFR5cGVJbmZvcm1hdGlvbiBub2RlLCBTdHJpbmcgdGV4dCwKICAgICAge1N0cmluZyBjb2xvcjogZGVmYXVsdE5vZGVDb2xvciwgTWFwPFN0cmluZywgVHlwZUluZm9ybWF0aW9uPiBpbnB1dHN9KSB7CiAgICBzZWVuLmFkZChub2RlKTsKICAgIFN0cmluZyBzdHlsZSA9IGdldFN0eWxlRm9yTm9kZShub2RlLCBjb2xvcik7CiAgICB0ZXh0ID0gYXBwZW5kRGV0YWlscyhub2RlLCB0ZXh0KTsKICAgIHRleHQgPSBlc2NhcGVMYWJlbCh0ZXh0KTsKICAgIFN0cmluZyBpZCA9IGdldE5vZGUobm9kZSk7CiAgICBTdHJpbmcgcmV0dXJuVHlwZSA9IGVzY2FwZUxhYmVsKGZvcm1hdFR5cGUobm9kZS50eXBlKSk7CiAgICBpZiAoaW5wdXRzICE9IG51bGwpIHsKICAgICAgSXRlcmFibGU8U3RyaW5nPiBrZXlzID0gaW5wdXRzLmtleXMud2hlcmUoKGtleSkgPT4gaW5wdXRzW2tleV0gIT0gbnVsbCk7CiAgICAgIFN0cmluZyBoZWFkZXIgPSBrZXlzLm1hcCgoa2V5KSA9PiAnPGEka2V5PiAka2V5Jykuam9pbignfCcpOwogICAgICBTdHJpbmcgbGFiZWwgPSAne3skaGVhZGVyfXwkdGV4dHw8cmV0dXJuVHlwZT4gJHJldHVyblR5cGV9JzsKICAgICAgYXBwZW5kKCckaWQgW3NoYXBlPXJlY29yZCxsYWJlbD0iJGxhYmVsIiwkc3R5bGVdJyk7CiAgICAgIGZvciAoU3RyaW5nIGtleSBpbiBrZXlzKSB7CiAgICAgICAgYWRkRWRnZShpbnB1dHNba2V5XSwgbm9kZSwgcG9ydDogJ2Eka2V5Jyk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIFN0cmluZyBsYWJlbCA9ICd7JHRleHR8PHJldHVyblR5cGU+ICRyZXR1cm5UeXBlfSc7CiAgICAgIGFwcGVuZCgnJGlkIFtzaGFwZT1yZWNvcmQsbGFiZWw9IiRsYWJlbCIsJHN0eWxlXScpOwogICAgICAvLyBBZGQgYXNzaWdubWVudCBlZGdlcy4gQ29sb3IgdGhlIGVkZ2VzIGJhc2VkIG9uIHdoZXRoZXIgdGhleSB3ZXJlCiAgICAgIC8vIGFkZGVkLCByZW1vdmVkLCB0ZW1wb3JhcnksIG9yIHVuY2hhbmdlZC4KICAgICAgZHluYW1pYyBvcmlnaW5hbFNldCA9IGdsb2JhbC5hc3NpZ25tZW50c0JlZm9yZUFuYWx5c2lzW25vZGVdID8/IGNvbnN0IFtdOwogICAgICB2YXIgdHJhY2VyU2V0ID0gZ2xvYmFsLmFzc2lnbm1lbnRzQmVmb3JlVHJhY2luZ1tub2RlXSA/PyBjb25zdCBbXTsKICAgICAgdmFyIGN1cnJlbnRTZXQgPSBub2RlLmFzc2lnbm1lbnRzLnRvU2V0KCk7CiAgICAgIGZvciAoVHlwZUluZm9ybWF0aW9uIGFzc2lnbm1lbnQgaW4gY3VycmVudFNldCkgewogICAgICAgIFN0cmluZyBjb2xvciA9CiAgICAgICAgICAgIG9yaWdpbmFsU2V0LmNvbnRhaW5zKGFzc2lnbm1lbnQpID8gdW5jaGFuZ2VkRWRnZSA6IGFkZGVkRWRnZTsKICAgICAgICBhZGRFZGdlKGFzc2lnbm1lbnQsIG5vZGUsIGNvbG9yOiBjb2xvcik7CiAgICAgIH0KICAgICAgZm9yIChUeXBlSW5mb3JtYXRpb24gYXNzaWdubWVudCBpbiBvcmlnaW5hbFNldCkgewogICAgICAgIGlmICghY3VycmVudFNldC5jb250YWlucyhhc3NpZ25tZW50KSkgewogICAgICAgICAgYWRkRWRnZShhc3NpZ25tZW50LCBub2RlLCBjb2xvcjogcmVtb3ZlZEVkZ2UpOwogICAgICAgIH0KICAgICAgfQogICAgICBmb3IgKFR5cGVJbmZvcm1hdGlvbiBhc3NpZ25tZW50IGluIHRyYWNlclNldCkgewogICAgICAgIGlmICghY3VycmVudFNldC5jb250YWlucyhhc3NpZ25tZW50KSAmJgogICAgICAgICAgICAhb3JpZ2luYWxTZXQuY29udGFpbnMoYXNzaWdubWVudCkpIHsKICAgICAgICAgIGFkZEVkZ2UoYXNzaWdubWVudCwgbm9kZSwgY29sb3I6IHRlbXBvcmFyeUVkZ2UpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKFBSSU5UX0dSQVBIX0FMTF9OT0RFUykgewogICAgICBmb3IgKFR5cGVJbmZvcm1hdGlvbiB1c2VyIGluIG5vZGUudXNlcnMpIHsKICAgICAgICBpZiAoIWlzRXh0ZXJuYWwodXNlcikpIHsKICAgICAgICAgIHZpc2l0KHVzZXIpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE5hcnJvd1R5cGVJbmZvcm1hdGlvbihOYXJyb3dUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgLy8gT21pdCB1bnVzZWQgTmFycm93cy4KICAgIGlmICghUFJJTlRfR1JBUEhfQUxMX05PREVTICYmIGluZm8udXNlcnMuaXNFbXB0eSkgcmV0dXJuOwogICAgYWRkTm9kZShpbmZvLCAnTmFycm93XG4ke2Zvcm1hdFR5cGUoaW5mby50eXBlQW5ub3RhdGlvbil9JywKICAgICAgICBjb2xvcjogbmFycm93Q29sb3IpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFBoaUVsZW1lbnRUeXBlSW5mb3JtYXRpb24oUGhpRWxlbWVudFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICAvLyBPbWl0IHVudXNlZCBQaGlzLgogICAgaWYgKCFQUklOVF9HUkFQSF9BTExfTk9ERVMgJiYgaW5mby51c2Vycy5pc0VtcHR5KSByZXR1cm47CiAgICBhZGROb2RlKGluZm8sICdQaGkgJHtpbmZvLnZhcmlhYmxlPy5uYW1lID8/ICcnfScsIGNvbG9yOiBwaGlDb2xvcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RWxlbWVudEluQ29udGFpbmVyVHlwZUluZm9ybWF0aW9uKAogICAgICBFbGVtZW50SW5Db250YWluZXJUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgYWRkTm9kZShpbmZvLCAnRWxlbWVudEluQ29udGFpbmVyJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RWxlbWVudEluU2V0VHlwZUluZm9ybWF0aW9uKEVsZW1lbnRJblNldFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBhZGROb2RlKGluZm8sICdFbGVtZW50SW5TZXQnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRLZXlJbk1hcFR5cGVJbmZvcm1hdGlvbihLZXlJbk1hcFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBhZGROb2RlKGluZm8sICdLZXlJbk1hcCcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFZhbHVlSW5NYXBUeXBlSW5mb3JtYXRpb24oVmFsdWVJbk1hcFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBhZGROb2RlKGluZm8sICdWYWx1ZUluTWFwJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGlzdFR5cGVJbmZvcm1hdGlvbihMaXN0VHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGFkZE5vZGUoaW5mbywgJ0xpc3QnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTZXRUeXBlSW5mb3JtYXRpb24oU2V0VHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGFkZE5vZGUoaW5mbywgJ1NldCcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE1hcFR5cGVJbmZvcm1hdGlvbihNYXBUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgYWRkTm9kZShpbmZvLCAnTWFwJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29uY3JldGVUeXBlSW5mb3JtYXRpb24oQ29uY3JldGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgYWRkTm9kZShpbmZvLCAnQ29uY3JldGUnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdHJpbmdMaXRlcmFsVHlwZUluZm9ybWF0aW9uKFN0cmluZ0xpdGVyYWxUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgU3RyaW5nIHRleHQgPSBzaG9ydGVuKGluZm8udmFsdWUpLnJlcGxhY2VBbGwoJ1xuJywgJ1xcbicpOwogICAgYWRkTm9kZShpbmZvLCAnU3RyaW5nTGl0ZXJhbFxuIiR0ZXh0IicpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJvb2xMaXRlcmFsVHlwZUluZm9ybWF0aW9uKEJvb2xMaXRlcmFsVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGFkZE5vZGUoaW5mbywgJ0Jvb2xMaXRlcmFsXG4ke2luZm8udmFsdWV9Jyk7CiAgfQoKICB2b2lkIGhhbmRsZUNhbGwoQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbywgU3RyaW5nIHRleHQsCiAgICAgIE1hcDxTdHJpbmcsIFR5cGVJbmZvcm1hdGlvbj4gaW5wdXRzKSB7CiAgICBTdHJpbmcgc291cmNlQ29kZSA9IHNob3J0ZW4oJyR7aW5mby5kZWJ1Z05hbWV9Jyk7CiAgICB0ZXh0ID0gJyR0ZXh0XG4kc291cmNlQ29kZSc7CiAgICBpZiAoaW5mby5hcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGluZm8uYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoOyArK2kpIHsKICAgICAgICBpbnB1dHNbJ2FyZyRpJ10gPSBpbmZvLmFyZ3VtZW50cy5wb3NpdGlvbmFsW2ldOwogICAgICB9CiAgICAgIGZvciAoU3RyaW5nIGFyZ05hbWUgaW4gaW5mby5hcmd1bWVudHMubmFtZWQua2V5cykgewogICAgICAgIGlucHV0c1thcmdOYW1lXSA9IGluZm8uYXJndW1lbnRzLm5hbWVkW2FyZ05hbWVdOwogICAgICB9CiAgICB9CiAgICBhZGROb2RlKGluZm8sIHRleHQsIGNvbG9yOiBjYWxsQ29sb3IsIGlucHV0czogaW5wdXRzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDbG9zdXJlQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oCiAgICAgIENsb3N1cmVDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBoYW5kbGVDYWxsKGluZm8sICdDbG9zdXJlQ2FsbFNpdGUnLCB7fSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oU3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgaGFuZGxlQ2FsbChpbmZvLCAnU3RhdGljQ2FsbFNpdGUnLCB7fSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKAogICAgICBEeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgaGFuZGxlQ2FsbChpbmZvLCAnRHluYW1pY0NhbGxTaXRlJywgeydvYmonOiBpbmZvLnJlY2VpdmVyfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TWVtYmVyVHlwZUluZm9ybWF0aW9uKE1lbWJlclR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBhZGROb2RlKGluZm8sICdNZW1iZXJcbiR7aW5mby5kZWJ1Z05hbWV9Jyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uKFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBhZGROb2RlKGluZm8sICdQYXJhbWV0ZXIgJHtpbmZvLmRlYnVnTmFtZX0nKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDbG9zdXJlVHlwZUluZm9ybWF0aW9uKENsb3N1cmVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgU3RyaW5nIHRleHQgPSBzaG9ydGVuKCcke2luZm8uZGVidWdOYW1lfScpOwogICAgYWRkTm9kZShpbmZvLCAnQ2xvc3VyZVxuJHRleHQnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBd2FpdFR5cGVJbmZvcm1hdGlvbihBd2FpdFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBTdHJpbmcgdGV4dCA9IHNob3J0ZW4oJyR7aW5mby5kZWJ1Z05hbWV9Jyk7CiAgICBhZGROb2RlKGluZm8sICdBd2FpdFxuJHRleHQnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRZaWVsZFR5cGVJbmZvcm1hdGlvbihZaWVsZFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBTdHJpbmcgdGV4dCA9IHNob3J0ZW4oJyR7aW5mby5kZWJ1Z05hbWV9Jyk7CiAgICBhZGROb2RlKGluZm8sICdZaWVsZFxuJHRleHQnKTsKICB9Cn0KgcAATk48KgEiJDElHyAVAU9QFQRRTTwEFgQoJARLRwQWLwEnIU8xTjE3ATUBTRsaPDwbMAgGBAFCGTw8Gy8IBgQBHhk5NTE8KA5IGAgGJS8ZDDQyOjdRNx8KIxoSHhoKCAYEAUkbBlEYNU4iJT8tHCgjKCgiIw8hCA0RTwZKNk0vGjwWBiYEAgE4Nx5ARkUzExseHwFNSkMZBAESEQQBRwZPSBsiNCgTBgQBJSUXBAEfJAQBIBxPBhEEASEBPCkrSxsIEgQBNgFJJEoEASsGTD85Li46BiMYGwYqTEwvHTwgM0AyDUkGBAFHQzQsLi0BTQ8vLCxRASpBBAE/HBktBAFNPB8mBkc0BhEEAUgGSyMyTxQxJh4fPBpPQ0M6ITMIDTk6SjJQSTE3F0oxCDgwOQoINjAxOwoIBiExIRcKCAYEAQxAHD5AHQQBDEgZPkgEAQwvMCkEAQxMIwQBDEQfBAEMSCEEAQw8GwQBDDoaBAEMOhoEAQxEHwQBDE4/LQQBDEoxBAE9LTYhIkM4CDo5CAY7BAEMLC0tBAEMUCwEAQwsLUEEAQxAMAQBDEYyBAEMQjAlBAEMPjAjBAEMPjAjBAIBMnBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL3R5cGVfZ3JhcGhfZHVtcC5kYXJ0N3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2luZmVycmVyL3R5cGVfc3lzdGVtLmRhcnTAAGHgLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JzsKaW1wb3J0ICdhYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAndHlwZV9ncmFwaF9ub2Rlcy5kYXJ0JzsKCi8vLyBTdHJhdGVneSBmb3IgY3JlYXRpbmcgdHlwZSBpbmZvcm1hdGlvbiBmcm9tIG1lbWJlcnMgYW5kIHBhcmFtZXRlcnMgYW5kIHR5cGUKLy8vIGluZm9ybWF0aW9uIGZvciBub2Rlcy4KYWJzdHJhY3QgY2xhc3MgVHlwZVN5c3RlbVN0cmF0ZWd5IHsKICAvLy8gQ3JlYXRlcyBbTWVtYmVyVHlwZUluZm9ybWF0aW9uXSBmb3IgW21lbWJlcl0uCiAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNyZWF0ZU1lbWJlclR5cGVJbmZvcm1hdGlvbigKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLCBNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgLy8vIENyZWF0ZXMgW1BhcmFtZXRlclR5cGVJbmZvcm1hdGlvbl0gZm9yIFtwYXJhbWV0ZXJdLgogIFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbiBjcmVhdGVQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24oCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgTG9jYWwgcGFyYW1ldGVyLAogICAgICBUeXBlU3lzdGVtIHR5cGVzKTsKCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBwYXJhbWV0ZXIgaW4gW2Z1bmN0aW9uXS4KICB2b2lkIGZvckVhY2hQYXJhbWV0ZXIoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24sIHZvaWQgZihMb2NhbCBwYXJhbWV0ZXIpKTsKCiAgLy8vIFJldHVybnMgd2hldGhlciBbbm9kZV0gaXMgdmFsaWQgYXMgYSBnZW5lcmFsIHBoaSBub2RlLgogIGJvb2wgY2hlY2tQaGlOb2RlKGlyLk5vZGUgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgW25vZGVdIGlzIHZhbGlkIGFzIGEgbG9vcCBwaGkgbm9kZS4KICBib29sIGNoZWNrTG9vcFBoaU5vZGUoaXIuTm9kZSBub2RlKTsKCiAgLy8vIFJldHVybnMgd2hldGhlciBbbm9kZV0gaXMgdmFsaWQgYXMgYSBsaXN0IGFsbG9jYXRpb24gbm9kZS4KICBib29sIGNoZWNrTGlzdE5vZGUoaXIuTm9kZSBub2RlKTsKCiAgLy8vIFJldHVybnMgd2hldGhlciBbbm9kZV0gaXMgdmFsaWQgYXMgYSBzZXQgYWxsb2NhdGlvbiBub2RlLgogIGJvb2wgY2hlY2tTZXROb2RlKGlyLk5vZGUgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgW25vZGVdIGlzIHZhbGlkIGFzIGEgbWFwIGFsbG9jYXRpb24gbm9kZS4KICBib29sIGNoZWNrTWFwTm9kZShpci5Ob2RlIG5vZGUpOwoKICAvLy8gUmV0dXJucyB3aGV0aGVyIFtjbHNdIGlzIHZhbGlkIGFzIGEgdHlwZSBtYXNrIGJhc2UgY2xhc3MuCiAgYm9vbCBjaGVja0NsYXNzRW50aXR5KENsYXNzRW50aXR5IGNscyk7Cn0KCi8vLyBUaGUgY2xhc3MgW1NpbXBsZUluZmVycmVyVmlzaXRvcl0gd2lsbCB1c2Ugd2hlbiB3b3JraW5nIG9uIHR5cGVzLgpjbGFzcyBUeXBlU3lzdGVtIHsKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwogIGZpbmFsIFR5cGVTeXN0ZW1TdHJhdGVneSBzdHJhdGVneTsKCiAgLy8vIFtwYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb25zXSBhbmQgW21lbWJlclR5cGVJbmZvcm1hdGlvbnNdIG9yZGVyZWQgYnkKICAvLy8gY3JlYXRpb24gdGltZS4gVGhpcyBpcyB1c2VkIGFzIHRoZSBpbmZlcmVuY2UgZW5xdWV1ZWluZyBvcmRlci4KICBmaW5hbCBMaXN0PFR5cGVJbmZvcm1hdGlvbj4gX29yZGVyZWRUeXBlSW5mb3JtYXRpb25zID0gPFR5cGVJbmZvcm1hdGlvbj5bXTsKCiAgLy8vIFtQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb25dcyBmb3IgcGFyYW1ldGVycy4KICBmaW5hbCBNYXA8TG9jYWwsIFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbj4gcGFyYW1ldGVyVHlwZUluZm9ybWF0aW9ucyA9CiAgICAgIG5ldyBNYXA8TG9jYWwsIFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbj4oKTsKCiAgLy8vIFtNZW1iZXJUeXBlSW5mb3JtYXRpb25dcyBmb3IgbWVtYmVycy4KICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBNZW1iZXJUeXBlSW5mb3JtYXRpb24+IG1lbWJlclR5cGVJbmZvcm1hdGlvbnMgPQogICAgICBuZXcgTWFwPE1lbWJlckVudGl0eSwgTWVtYmVyVHlwZUluZm9ybWF0aW9uPigpOwoKICAvLy8gW0xpc3RUeXBlSW5mb3JtYXRpb25dIGZvciBhbGxvY2F0ZWQgbGlzdHMuCiAgZmluYWwgTWFwPGlyLlRyZWVOb2RlLCBMaXN0VHlwZUluZm9ybWF0aW9uPiBhbGxvY2F0ZWRMaXN0cyA9CiAgICAgIG5ldyBNYXA8aXIuVHJlZU5vZGUsIExpc3RUeXBlSW5mb3JtYXRpb24+KCk7CgogIC8vLyBbU2V0VHlwZUluZm9ybWF0aW9uXSBmb3IgYWxsb2NhdGVkIFNldHMuCiAgZmluYWwgTWFwPGlyLlRyZWVOb2RlLCBTZXRUeXBlSW5mb3JtYXRpb24+IGFsbG9jYXRlZFNldHMgPQogICAgICBuZXcgTWFwPGlyLlRyZWVOb2RlLCBTZXRUeXBlSW5mb3JtYXRpb24+KCk7CgogIC8vLyBbTWFwVHlwZUluZm9ybWF0aW9uXSBmb3IgYWxsb2NhdGVkIE1hcHMuCiAgZmluYWwgTWFwPGlyLlRyZWVOb2RlLCBUeXBlSW5mb3JtYXRpb24+IGFsbG9jYXRlZE1hcHMgPQogICAgICBuZXcgTWFwPGlyLlRyZWVOb2RlLCBUeXBlSW5mb3JtYXRpb24+KCk7CgogIC8vLyBDbG9zdXJlcyBmb3VuZCBkdXJpbmcgdGhlIGFuYWx5c2lzLgogIGZpbmFsIFNldDxUeXBlSW5mb3JtYXRpb24+IGFsbG9jYXRlZENsb3N1cmVzID0gbmV3IFNldDxUeXBlSW5mb3JtYXRpb24+KCk7CgogIC8vLyBDYWNoZSBvZiBbQ29uY3JldGVUeXBlSW5mb3JtYXRpb25dLgogIGZpbmFsIE1hcDxBYnN0cmFjdFZhbHVlLCBUeXBlSW5mb3JtYXRpb24+IGNvbmNyZXRlVHlwZXMgPQogICAgICBuZXcgTWFwPEFic3RyYWN0VmFsdWUsIFR5cGVJbmZvcm1hdGlvbj4oKTsKCiAgLy8vIExpc3Qgb2YgW1R5cGVJbmZvcm1hdGlvbl1zIGZvciBjYWxscyBpbnNpZGUgbWV0aG9kIGJvZGllcy4KICBmaW5hbCBMaXN0PENhbGxTaXRlVHlwZUluZm9ybWF0aW9uPiBhbGxvY2F0ZWRDYWxscyA9CiAgICAgIDxDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbj5bXTsKCiAgLy8vIExpc3Qgb2YgW1R5cGVJbmZvcm1hdGlvbl1zIGFsbG9jYXRlZCBpbnNpZGUgbWV0aG9kIGJvZGllcyAobmFycm93aW5nLAogIC8vLyBwaGlzLCBhbmQgY29udGFpbmVycykuCiAgZmluYWwgTGlzdDxUeXBlSW5mb3JtYXRpb24+IGFsbG9jYXRlZFR5cGVzID0gPFR5cGVJbmZvcm1hdGlvbj5bXTsKCiAgLy8vIFtwYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb25zXSBhbmQgW21lbWJlclR5cGVJbmZvcm1hdGlvbnNdIG9yZGVyZWQgYnkKICAvLy8gY3JlYXRpb24gdGltZS4gVGhpcyBpcyB1c2VkIGFzIHRoZSBpbmZlcmVuY2UgZW5xdWV1ZWluZyBvcmRlci4KICBJdGVyYWJsZTxUeXBlSW5mb3JtYXRpb24+IGdldCBvcmRlcmVkVHlwZUluZm9ybWF0aW9ucyA9PgogICAgICBfb3JkZXJlZFR5cGVJbmZvcm1hdGlvbnM7CgogIEl0ZXJhYmxlPFR5cGVJbmZvcm1hdGlvbj4gZ2V0IGFsbFR5cGVzID0+IFsKICAgICAgICBwYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb25zLnZhbHVlcywKICAgICAgICBtZW1iZXJUeXBlSW5mb3JtYXRpb25zLnZhbHVlcywKICAgICAgICBhbGxvY2F0ZWRMaXN0cy52YWx1ZXMsCiAgICAgICAgYWxsb2NhdGVkU2V0cy52YWx1ZXMsCiAgICAgICAgYWxsb2NhdGVkTWFwcy52YWx1ZXMsCiAgICAgICAgYWxsb2NhdGVkQ2xvc3VyZXMsCiAgICAgICAgY29uY3JldGVUeXBlcy52YWx1ZXMsCiAgICAgICAgYWxsb2NhdGVkQ2FsbHMsCiAgICAgICAgYWxsb2NhdGVkVHlwZXMKICAgICAgXS5leHBhbmQoKHgpID0+IHgpOwoKICBUeXBlU3lzdGVtKHRoaXMuX2Nsb3NlZFdvcmxkLCB0aGlzLnN0cmF0ZWd5KSB7CiAgICBub25OdWxsRW1wdHlUeXBlID0gZ2V0Q29uY3JldGVUeXBlRm9yKF9hYnN0cmFjdFZhbHVlRG9tYWluLmVtcHR5VHlwZSk7CiAgfQoKICBBYnN0cmFjdFZhbHVlRG9tYWluIGdldCBfYWJzdHJhY3RWYWx1ZURvbWFpbiA9PgogICAgICBfY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKCiAgLy8vIFVzZWQgdG8gZ3JvdXAgW1R5cGVJbmZvcm1hdGlvbl0gbm9kZXMgYnkgdGhlIGVsZW1lbnQgdGhhdCB0cmlnZ2VyZWQgdGhlaXIKICAvLy8gY3JlYXRpb24uCiAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIF9jdXJyZW50TWVtYmVyID0gbnVsbDsKICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gZ2V0IGN1cnJlbnRNZW1iZXIgPT4gX2N1cnJlbnRNZW1iZXI7CgogIHZvaWQgd2l0aE1lbWJlcihNZW1iZXJFbnRpdHkgZWxlbWVudCwgdm9pZCBhY3Rpb24oKSkgewogICAgYXNzZXJ0KF9jdXJyZW50TWVtYmVyID09IG51bGwsCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwgIkFscmVhZHkgY29uc3RydWN0aW5nIGdyYXBoIGZvciAkX2N1cnJlbnRNZW1iZXIuIikpOwogICAgX2N1cnJlbnRNZW1iZXIgPSBnZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihlbGVtZW50KTsKICAgIGFjdGlvbigpOwogICAgX2N1cnJlbnRNZW1iZXIgPSBudWxsOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIG51bGxUeXBlQ2FjaGU7CiAgVHlwZUluZm9ybWF0aW9uIGdldCBudWxsVHlwZSB7CiAgICBpZiAobnVsbFR5cGVDYWNoZSAhPSBudWxsKSByZXR1cm4gbnVsbFR5cGVDYWNoZTsKICAgIHJldHVybiBudWxsVHlwZUNhY2hlID0gZ2V0Q29uY3JldGVUeXBlRm9yKF9hYnN0cmFjdFZhbHVlRG9tYWluLm51bGxUeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBpbnRUeXBlQ2FjaGU7CiAgVHlwZUluZm9ybWF0aW9uIGdldCBpbnRUeXBlIHsKICAgIGlmIChpbnRUeXBlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIGludFR5cGVDYWNoZTsKICAgIHJldHVybiBpbnRUeXBlQ2FjaGUgPSBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4uaW50VHlwZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gdWludDMyVHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgdWludDMyVHlwZSB7CiAgICBpZiAodWludDMyVHlwZUNhY2hlICE9IG51bGwpIHJldHVybiB1aW50MzJUeXBlQ2FjaGU7CiAgICByZXR1cm4gdWludDMyVHlwZUNhY2hlID0KICAgICAgICBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4udWludDMyVHlwZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gdWludDMxVHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgdWludDMxVHlwZSB7CiAgICBpZiAodWludDMxVHlwZUNhY2hlICE9IG51bGwpIHJldHVybiB1aW50MzFUeXBlQ2FjaGU7CiAgICByZXR1cm4gdWludDMxVHlwZUNhY2hlID0KICAgICAgICBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4udWludDMxVHlwZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gcG9zaXRpdmVJbnRUeXBlQ2FjaGU7CiAgVHlwZUluZm9ybWF0aW9uIGdldCBwb3NpdGl2ZUludFR5cGUgewogICAgaWYgKHBvc2l0aXZlSW50VHlwZUNhY2hlICE9IG51bGwpIHJldHVybiBwb3NpdGl2ZUludFR5cGVDYWNoZTsKICAgIHJldHVybiBwb3NpdGl2ZUludFR5cGVDYWNoZSA9CiAgICAgICAgZ2V0Q29uY3JldGVUeXBlRm9yKF9hYnN0cmFjdFZhbHVlRG9tYWluLnBvc2l0aXZlSW50VHlwZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gZG91YmxlVHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgZG91YmxlVHlwZSB7CiAgICBpZiAoZG91YmxlVHlwZUNhY2hlICE9IG51bGwpIHJldHVybiBkb3VibGVUeXBlQ2FjaGU7CiAgICByZXR1cm4gZG91YmxlVHlwZUNhY2hlID0KICAgICAgICBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4uZG91YmxlVHlwZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gbnVtVHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgbnVtVHlwZSB7CiAgICBpZiAobnVtVHlwZUNhY2hlICE9IG51bGwpIHJldHVybiBudW1UeXBlQ2FjaGU7CiAgICByZXR1cm4gbnVtVHlwZUNhY2hlID0gZ2V0Q29uY3JldGVUeXBlRm9yKF9hYnN0cmFjdFZhbHVlRG9tYWluLm51bVR5cGUpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGJvb2xUeXBlQ2FjaGU7CiAgVHlwZUluZm9ybWF0aW9uIGdldCBib29sVHlwZSB7CiAgICBpZiAoYm9vbFR5cGVDYWNoZSAhPSBudWxsKSByZXR1cm4gYm9vbFR5cGVDYWNoZTsKICAgIHJldHVybiBib29sVHlwZUNhY2hlID0gZ2V0Q29uY3JldGVUeXBlRm9yKF9hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBmdW5jdGlvblR5cGVDYWNoZTsKICBUeXBlSW5mb3JtYXRpb24gZ2V0IGZ1bmN0aW9uVHlwZSB7CiAgICBpZiAoZnVuY3Rpb25UeXBlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIGZ1bmN0aW9uVHlwZUNhY2hlOwogICAgcmV0dXJuIGZ1bmN0aW9uVHlwZUNhY2hlID0KICAgICAgICBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4uZnVuY3Rpb25UeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBsaXN0VHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgbGlzdFR5cGUgewogICAgaWYgKGxpc3RUeXBlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIGxpc3RUeXBlQ2FjaGU7CiAgICByZXR1cm4gbGlzdFR5cGVDYWNoZSA9IGdldENvbmNyZXRlVHlwZUZvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi5saXN0VHlwZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gY29uc3RMaXN0VHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgY29uc3RMaXN0VHlwZSB7CiAgICBpZiAoY29uc3RMaXN0VHlwZUNhY2hlICE9IG51bGwpIHJldHVybiBjb25zdExpc3RUeXBlQ2FjaGU7CiAgICByZXR1cm4gY29uc3RMaXN0VHlwZUNhY2hlID0KICAgICAgICBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4uY29uc3RMaXN0VHlwZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gZml4ZWRMaXN0VHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgZml4ZWRMaXN0VHlwZSB7CiAgICBpZiAoZml4ZWRMaXN0VHlwZUNhY2hlICE9IG51bGwpIHJldHVybiBmaXhlZExpc3RUeXBlQ2FjaGU7CiAgICByZXR1cm4gZml4ZWRMaXN0VHlwZUNhY2hlID0KICAgICAgICBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4uZml4ZWRMaXN0VHlwZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gZ3Jvd2FibGVMaXN0VHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgZ3Jvd2FibGVMaXN0VHlwZSB7CiAgICBpZiAoZ3Jvd2FibGVMaXN0VHlwZUNhY2hlICE9IG51bGwpIHJldHVybiBncm93YWJsZUxpc3RUeXBlQ2FjaGU7CiAgICByZXR1cm4gZ3Jvd2FibGVMaXN0VHlwZUNhY2hlID0KICAgICAgICBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4uZ3Jvd2FibGVMaXN0VHlwZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gc2V0VHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgc2V0VHlwZSA9PgogICAgICBzZXRUeXBlQ2FjaGUgPz89IGdldENvbmNyZXRlVHlwZUZvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi5zZXRUeXBlKTsKCiAgVHlwZUluZm9ybWF0aW9uIGNvbnN0U2V0VHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgY29uc3RTZXRUeXBlID0+IGNvbnN0U2V0VHlwZUNhY2hlID8/PQogICAgICBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4uY29uc3RTZXRUeXBlKTsKCiAgVHlwZUluZm9ybWF0aW9uIG1hcFR5cGVDYWNoZTsKICBUeXBlSW5mb3JtYXRpb24gZ2V0IG1hcFR5cGUgewogICAgaWYgKG1hcFR5cGVDYWNoZSAhPSBudWxsKSByZXR1cm4gbWFwVHlwZUNhY2hlOwogICAgcmV0dXJuIG1hcFR5cGVDYWNoZSA9IGdldENvbmNyZXRlVHlwZUZvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi5tYXBUeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBjb25zdE1hcFR5cGVDYWNoZTsKICBUeXBlSW5mb3JtYXRpb24gZ2V0IGNvbnN0TWFwVHlwZSB7CiAgICBpZiAoY29uc3RNYXBUeXBlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIGNvbnN0TWFwVHlwZUNhY2hlOwogICAgcmV0dXJuIGNvbnN0TWFwVHlwZUNhY2hlID0KICAgICAgICBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4uY29uc3RNYXBUeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBzdHJpbmdUeXBlQ2FjaGU7CiAgVHlwZUluZm9ybWF0aW9uIGdldCBzdHJpbmdUeXBlIHsKICAgIGlmIChzdHJpbmdUeXBlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIHN0cmluZ1R5cGVDYWNoZTsKICAgIHJldHVybiBzdHJpbmdUeXBlQ2FjaGUgPQogICAgICAgIGdldENvbmNyZXRlVHlwZUZvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi5zdHJpbmdUeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiB0eXBlVHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgdHlwZVR5cGUgewogICAgaWYgKHR5cGVUeXBlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIHR5cGVUeXBlQ2FjaGU7CiAgICByZXR1cm4gdHlwZVR5cGVDYWNoZSA9IGdldENvbmNyZXRlVHlwZUZvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi50eXBlVHlwZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gZHluYW1pY1R5cGVDYWNoZTsKICBUeXBlSW5mb3JtYXRpb24gZ2V0IGR5bmFtaWNUeXBlIHsKICAgIGlmIChkeW5hbWljVHlwZUNhY2hlICE9IG51bGwpIHJldHVybiBkeW5hbWljVHlwZUNhY2hlOwogICAgcmV0dXJuIGR5bmFtaWNUeXBlQ2FjaGUgPQogICAgICAgIGdldENvbmNyZXRlVHlwZUZvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gYXN5bmNGdXR1cmVUeXBlQ2FjaGU7CiAgLy8gU3VidHlwZSBvZiBGdXR1cmUgcmV0dXJuZWQgYnkgYXN5bmMgbWV0aG9kcy4KICBUeXBlSW5mb3JtYXRpb24gZ2V0IGFzeW5jRnV0dXJlVHlwZSB7CiAgICBpZiAoYXN5bmNGdXR1cmVUeXBlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIGFzeW5jRnV0dXJlVHlwZUNhY2hlOwogICAgcmV0dXJuIGFzeW5jRnV0dXJlVHlwZUNhY2hlID0KICAgICAgICBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4uYXN5bmNGdXR1cmVUeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBzeW5jU3Rhckl0ZXJhYmxlVHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgc3luY1N0YXJJdGVyYWJsZVR5cGUgewogICAgaWYgKHN5bmNTdGFySXRlcmFibGVUeXBlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIHN5bmNTdGFySXRlcmFibGVUeXBlQ2FjaGU7CiAgICByZXR1cm4gc3luY1N0YXJJdGVyYWJsZVR5cGVDYWNoZSA9CiAgICAgICAgZ2V0Q29uY3JldGVUeXBlRm9yKF9hYnN0cmFjdFZhbHVlRG9tYWluLnN5bmNTdGFySXRlcmFibGVUeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBhc3luY1N0YXJTdHJlYW1UeXBlQ2FjaGU7CiAgVHlwZUluZm9ybWF0aW9uIGdldCBhc3luY1N0YXJTdHJlYW1UeXBlIHsKICAgIGlmIChhc3luY1N0YXJTdHJlYW1UeXBlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIGFzeW5jU3RhclN0cmVhbVR5cGVDYWNoZTsKICAgIHJldHVybiBhc3luY1N0YXJTdHJlYW1UeXBlQ2FjaGUgPQogICAgICAgIGdldENvbmNyZXRlVHlwZUZvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi5hc3luY1N0YXJTdHJlYW1UeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBub25OdWxsRW1wdHlUeXBlOwoKICBUeXBlSW5mb3JtYXRpb24gc3RyaW5nTGl0ZXJhbFR5cGUoU3RyaW5nIHZhbHVlKSB7CiAgICByZXR1cm4gbmV3IFN0cmluZ0xpdGVyYWxUeXBlSW5mb3JtYXRpb24oCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4sIHZhbHVlLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5zdHJpbmdUeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBib29sTGl0ZXJhbFR5cGUoYm9vbCB2YWx1ZSkgewogICAgcmV0dXJuIG5ldyBCb29sTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbigKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiwgdmFsdWUsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBsZWFzdCB1cHBlciBib3VuZCBiZXR3ZWVuIFtmaXJzdFR5cGVdIGFuZAogIC8vLyBbc2Vjb25kVHlwZV0uCiAgVHlwZUluZm9ybWF0aW9uIGNvbXB1dGVMVUIoCiAgICAgIFR5cGVJbmZvcm1hdGlvbiBmaXJzdFR5cGUsIFR5cGVJbmZvcm1hdGlvbiBzZWNvbmRUeXBlKSB7CiAgICBpZiAoZmlyc3RUeXBlID09IG51bGwpIHJldHVybiBzZWNvbmRUeXBlOwogICAgaWYgKGZpcnN0VHlwZSA9PSBzZWNvbmRUeXBlKSByZXR1cm4gZmlyc3RUeXBlOwogICAgaWYgKGZpcnN0VHlwZSA9PSBub25OdWxsRW1wdHlUeXBlKSByZXR1cm4gc2Vjb25kVHlwZTsKICAgIGlmIChzZWNvbmRUeXBlID09IG5vbk51bGxFbXB0eVR5cGUpIHJldHVybiBmaXJzdFR5cGU7CiAgICBpZiAoZmlyc3RUeXBlID09IGR5bmFtaWNUeXBlIHx8IHNlY29uZFR5cGUgPT0gZHluYW1pY1R5cGUpIHsKICAgICAgcmV0dXJuIGR5bmFtaWNUeXBlOwogICAgfQogICAgcmV0dXJuIGdldENvbmNyZXRlVHlwZUZvcigKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi51bmlvbihmaXJzdFR5cGUudHlwZSwgc2Vjb25kVHlwZS50eXBlKSk7CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgYHNlbGVjdG9yYCBzaG91bGQgYmUgdXBkYXRlZCB0byByZWZsZWN0IHRoZSBuZXcKICAvLy8gYHJlY2VpdmVyVHlwZWAuCiAgYm9vbCBzZWxlY3Rvck5lZWRzVXBkYXRlKFR5cGVJbmZvcm1hdGlvbiBpbmZvLCBBYnN0cmFjdFZhbHVlIG1hc2spIHsKICAgIHJldHVybiBpbmZvLnR5cGUgIT0gbWFzazsKICB9CgogIGJvb2wgX2lzTm9uTnVsbE5hcnJvdyhUeXBlSW5mb3JtYXRpb24gdHlwZSkgPT4KICAgICAgdHlwZSBpcyBOYXJyb3dUeXBlSW5mb3JtYXRpb24gJiYKICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uaXNOdWxsKHR5cGUudHlwZUFubm90YXRpb24pLmlzRGVmaW5pdGVseUZhbHNlOwoKICAvLy8gUmV0dXJucyB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gW3R5cGVdIGFuZCBbYW5ub3RhdGlvbl0uCiAgLy8vIFtpc051bGxhYmxlXSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgYW5ub3RhdGlvbiBpbXBsaWVzIGEgbnVsbAogIC8vLyB0eXBlLgogIFR5cGVJbmZvcm1hdGlvbiBuYXJyb3dUeXBlKFR5cGVJbmZvcm1hdGlvbiB0eXBlLCBEYXJ0VHlwZSBhbm5vdGF0aW9uLAogICAgICB7Ym9vbCBpc051bGxhYmxlOiB0cnVlfSkgewogICAgQWJzdHJhY3RWYWx1ZSBvdGhlclR5cGU7CiAgICBpZiAoYW5ub3RhdGlvbi5pc1ZvaWQpIHJldHVybiB0eXBlOwogICAgaWYgKGFubm90YXRpb24udHJlYXRBc0R5bmFtaWMpIHsKICAgICAgaWYgKGlzTnVsbGFibGUpIHJldHVybiB0eXBlOwogICAgICAvLyBJZiB0aGUgaW5wdXQgaXMgYWxyZWFkeSBuYXJyb3dlZCB0byBiZSBub3QtbnVsbCwgdGhlcmUgaXMgbm8gdmFsdWUKICAgICAgLy8gaW4gYWRkaW5nIGFub3RoZXIgbmFycm93aW5nIG5vZGUuCiAgICAgIGlmIChfaXNOb25OdWxsTmFycm93KHR5cGUpKSByZXR1cm4gdHlwZTsKICAgICAgb3RoZXJUeXBlID0gX2Fic3RyYWN0VmFsdWVEb21haW4uZXhjbHVkZU51bGwoZHluYW1pY1R5cGUudHlwZSk7CiAgICB9IGVsc2UgaWYgKGFubm90YXRpb24uaXNJbnRlcmZhY2VUeXBlKSB7CiAgICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlID0gYW5ub3RhdGlvbjsKICAgICAgaWYgKGludGVyZmFjZS5lbGVtZW50ID09IF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcykgewogICAgICAgIGlmIChpc051bGxhYmxlKSByZXR1cm4gdHlwZTsKICAgICAgICBpZiAoX2lzTm9uTnVsbE5hcnJvdyh0eXBlKSkgcmV0dXJuIHR5cGU7CiAgICAgICAgb3RoZXJUeXBlID0gX2Fic3RyYWN0VmFsdWVEb21haW4uZXhjbHVkZU51bGwoZHluYW1pY1R5cGUudHlwZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb3RoZXJUeXBlID0KICAgICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlTm9uTnVsbFN1YnR5cGUoaW50ZXJmYWNlLmVsZW1lbnQpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGFubm90YXRpb24uaXNUeXBlZGVmIHx8IGFubm90YXRpb24uaXNGdW5jdGlvblR5cGUpIHsKICAgICAgb3RoZXJUeXBlID0gZnVuY3Rpb25UeXBlLnR5cGU7CiAgICB9IGVsc2UgaWYgKGFubm90YXRpb24uaXNGdXR1cmVPcikgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdXBwb3J0IG5hcnJvd2luZyBvZiBGdXR1cmVPci4KICAgICAgcmV0dXJuIHR5cGU7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoYW5ub3RhdGlvbi5pc1R5cGVWYXJpYWJsZSk7CiAgICAgIC8vIFRPRE8obmdlb2ZmcmF5KTogTmFycm93IHRvIGJvdW5kLgogICAgICByZXR1cm4gdHlwZTsKICAgIH0KICAgIGlmIChpc051bGxhYmxlKSB7CiAgICAgIG90aGVyVHlwZSA9IF9hYnN0cmFjdFZhbHVlRG9tYWluLmluY2x1ZGVOdWxsKG90aGVyVHlwZSk7CiAgICB9CiAgICBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4uaXNFeGFjdCh0eXBlLnR5cGUpLmlzRGVmaW5pdGVseVRydWUpIHJldHVybiB0eXBlOwogICAgVHlwZUluZm9ybWF0aW9uIG5ld1R5cGUgPQogICAgICAgIG5ldyBOYXJyb3dUeXBlSW5mb3JtYXRpb24oX2Fic3RyYWN0VmFsdWVEb21haW4sIHR5cGUsIG90aGVyVHlwZSk7CiAgICBhbGxvY2F0ZWRUeXBlcy5hZGQobmV3VHlwZSk7CiAgICByZXR1cm4gbmV3VHlwZTsKICB9CgogIFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbiBnZXRJbmZlcnJlZFR5cGVPZlBhcmFtZXRlcihMb2NhbCBwYXJhbWV0ZXIpIHsKICAgIHJldHVybiBwYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb25zLnB1dElmQWJzZW50KHBhcmFtZXRlciwgKCkgewogICAgICBQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24gdHlwZUluZm9ybWF0aW9uID0KICAgICAgICAgIHN0cmF0ZWd5LmNyZWF0ZVBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbigKICAgICAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiwgcGFyYW1ldGVyLCB0aGlzKTsKICAgICAgX29yZGVyZWRUeXBlSW5mb3JtYXRpb25zLmFkZCh0eXBlSW5mb3JtYXRpb24pOwogICAgICByZXR1cm4gdHlwZUluZm9ybWF0aW9uOwogICAgfSk7CiAgfQoKICB2b2lkIGZvckVhY2hQYXJhbWV0ZXJUeXBlKAogICAgICB2b2lkIGYoTG9jYWwgcGFyYW1ldGVyLCBQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24gdHlwZUluZm9ybWF0aW9uKSkgewogICAgcGFyYW1ldGVyVHlwZUluZm9ybWF0aW9ucy5mb3JFYWNoKGYpOwogIH0KCiAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGdldEluZmVycmVkVHlwZU9mTWVtYmVyKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIGFzc2VydCghbWVtYmVyLmlzQWJzdHJhY3QsCiAgICAgICAgZmFpbGVkQXQobWVtYmVyLCAiVW5leHBlY3RlZCBhYnN0cmFjdCBtZW1iZXIgJG1lbWJlci4iKSk7CiAgICByZXR1cm4gbWVtYmVyVHlwZUluZm9ybWF0aW9uc1ttZW1iZXJdID8/PSBfZ2V0SW5mZXJyZWRUeXBlT2ZNZW1iZXIobWVtYmVyKTsKICB9CgogIHZvaWQgZm9yRWFjaE1lbWJlclR5cGUoCiAgICAgIHZvaWQgZihNZW1iZXJFbnRpdHkgbWVtYmVyLCBNZW1iZXJUeXBlSW5mb3JtYXRpb24gdHlwZUluZm9ybWF0aW9uKSkgewogICAgbWVtYmVyVHlwZUluZm9ybWF0aW9ucy5mb3JFYWNoKGYpOwogIH0KCiAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIF9nZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gdHlwZUluZm9ybWF0aW9uID0KICAgICAgICBzdHJhdGVneS5jcmVhdGVNZW1iZXJUeXBlSW5mb3JtYXRpb24oX2Fic3RyYWN0VmFsdWVEb21haW4sIG1lbWJlcik7CiAgICBfb3JkZXJlZFR5cGVJbmZvcm1hdGlvbnMuYWRkKHR5cGVJbmZvcm1hdGlvbik7CiAgICByZXR1cm4gdHlwZUluZm9ybWF0aW9uOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGludGVybmFsIGluZmVycmVyIHJlcHJlc2VudGF0aW9uIGZvciBbbWFza10uCiAgQ29uY3JldGVUeXBlSW5mb3JtYXRpb24gZ2V0Q29uY3JldGVUeXBlRm9yKEFic3RyYWN0VmFsdWUgbWFzaykgewogICAgYXNzZXJ0KG1hc2sgIT0gbnVsbCk7CiAgICByZXR1cm4gY29uY3JldGVUeXBlcy5wdXRJZkFic2VudChtYXNrLCAoKSB7CiAgICAgIHJldHVybiBuZXcgQ29uY3JldGVUeXBlSW5mb3JtYXRpb24obWFzayk7CiAgICB9KTsKICB9CgogIFN0cmluZyBnZXRJbmZlcnJlZFNpZ25hdHVyZU9mTWV0aG9kKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKSB7CiAgICBFbGVtZW50VHlwZUluZm9ybWF0aW9uIGluZm8gPSBnZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihmdW5jdGlvbik7CiAgICB2YXIgcmVzID0gIiI7CiAgICBzdHJhdGVneS5mb3JFYWNoUGFyYW1ldGVyKGZ1bmN0aW9uLCAoTG9jYWwgcGFyYW1ldGVyKSB7CiAgICAgIFR5cGVJbmZvcm1hdGlvbiB0eXBlID0gZ2V0SW5mZXJyZWRUeXBlT2ZQYXJhbWV0ZXIocGFyYW1ldGVyKTsKICAgICAgcmVzICs9ICIke3Jlcy5pc0VtcHR5ID8gJygnIDogJywgJ30ke3R5cGUudHlwZX0gJHtwYXJhbWV0ZXIubmFtZX0iOwogICAgfSk7CiAgICByZXMgKz0gIikgLT4gJHtpbmZvLnR5cGV9IjsKICAgIHJldHVybiByZXM7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gbm9uTnVsbFN1YnR5cGUoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBhc3NlcnQoc3RyYXRlZ3kuY2hlY2tDbGFzc0VudGl0eShjbHMpKTsKICAgIHJldHVybiBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlTm9uTnVsbFN1YnR5cGUoY2xzKSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gbm9uTnVsbFN1YmNsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgYXNzZXJ0KHN0cmF0ZWd5LmNoZWNrQ2xhc3NFbnRpdHkoY2xzKSk7CiAgICByZXR1cm4gZ2V0Q29uY3JldGVUeXBlRm9yKF9hYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZU5vbk51bGxTdWJjbGFzcyhjbHMpKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBub25OdWxsRXhhY3QoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBhc3NlcnQoc3RyYXRlZ3kuY2hlY2tDbGFzc0VudGl0eShjbHMpKTsKICAgIHJldHVybiBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlTm9uTnVsbEV4YWN0KGNscykpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIG5vbk51bGxFbXB0eSgpIHsKICAgIHJldHVybiBub25OdWxsRW1wdHlUeXBlOwogIH0KCiAgYm9vbCBpc051bGwoVHlwZUluZm9ybWF0aW9uIHR5cGUpIHsKICAgIHJldHVybiB0eXBlID09IG51bGxUeXBlOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGFsbG9jYXRlTGlzdCgKICAgICAgVHlwZUluZm9ybWF0aW9uIHR5cGUsIGlyLlRyZWVOb2RlIG5vZGUsIE1lbWJlckVudGl0eSBlbmNsb3NpbmcsCiAgICAgIFtUeXBlSW5mb3JtYXRpb24gZWxlbWVudFR5cGUsIGludCBsZW5ndGhdKSB7CiAgICBhc3NlcnQoc3RyYXRlZ3kuY2hlY2tMaXN0Tm9kZShub2RlKSk7CiAgICBDbGFzc0VudGl0eSB0eXBlZERhdGFDbGFzcyA9IF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy50eXBlZERhdGFDbGFzczsKICAgIGJvb2wgaXNUeXBlZEFycmF5ID0gdHlwZWREYXRhQ2xhc3MgIT0gbnVsbCAmJgogICAgICAgIF9jbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc0luc3RhbnRpYXRlZCh0eXBlZERhdGFDbGFzcykgJiYKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgICAgICAuaXNJbnN0YW5jZU9mT3JOdWxsKHR5cGUudHlwZSwgdHlwZWREYXRhQ2xhc3MpCiAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlOwogICAgYm9vbCBpc0NvbnN0ID0gKHR5cGUudHlwZSA9PSBfYWJzdHJhY3RWYWx1ZURvbWFpbi5jb25zdExpc3RUeXBlKTsKICAgIGJvb2wgaXNGaXhlZCA9ICh0eXBlLnR5cGUgPT0gX2Fic3RyYWN0VmFsdWVEb21haW4uZml4ZWRMaXN0VHlwZSkgfHwKICAgICAgICBpc0NvbnN0IHx8CiAgICAgICAgaXNUeXBlZEFycmF5OwogICAgYm9vbCBpc0VsZW1lbnRJbmZlcnJlZCA9IGlzQ29uc3QgfHwgaXNUeXBlZEFycmF5OwoKICAgIGludCBpbmZlcnJlZExlbmd0aCA9IGlzRml4ZWQgPyBsZW5ndGggOiBudWxsOwogICAgQWJzdHJhY3RWYWx1ZSBlbGVtZW50VHlwZU1hc2sgPQogICAgICAgIGlzRWxlbWVudEluZmVycmVkID8gZWxlbWVudFR5cGUudHlwZSA6IGR5bmFtaWNUeXBlLnR5cGU7CiAgICBBYnN0cmFjdFZhbHVlIG1hc2sgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVDb250YWluZXJWYWx1ZSgKICAgICAgICB0eXBlLnR5cGUsIG5vZGUsIGVuY2xvc2luZywgZWxlbWVudFR5cGVNYXNrLCBpbmZlcnJlZExlbmd0aCk7CiAgICBFbGVtZW50SW5Db250YWluZXJUeXBlSW5mb3JtYXRpb24gZWxlbWVudCA9CiAgICAgICAgbmV3IEVsZW1lbnRJbkNvbnRhaW5lclR5cGVJbmZvcm1hdGlvbigKICAgICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4sIGN1cnJlbnRNZW1iZXIsIGVsZW1lbnRUeXBlKTsKICAgIGVsZW1lbnQuaW5mZXJyZWQgPSBpc0VsZW1lbnRJbmZlcnJlZDsKCiAgICBhbGxvY2F0ZWRUeXBlcy5hZGQoZWxlbWVudCk7CiAgICByZXR1cm4gYWxsb2NhdGVkTGlzdHNbbm9kZV0gPSBuZXcgTGlzdFR5cGVJbmZvcm1hdGlvbigKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiwgY3VycmVudE1lbWJlciwgbWFzaywgZWxlbWVudCwgbGVuZ3RoKTsKICB9CgogIC8vLyBDcmVhdGVzIGEgW1R5cGVJbmZvcm1hdGlvbl0gb2JqZWN0IGVpdGhlciBmb3IgdGhlIGNsb3N1cml6YXRpb24gb2YgYQogIC8vLyBzdGF0aWMgb3IgdG9wLWxldmVsIG1ldGhvZCBbZWxlbWVudF0gdXNlZCBhcyBhIGZ1bmN0aW9uIGNvbnN0YW50IG9yIGZvcgogIC8vLyB0aGUgc3ludGhlc2l6ZWQgJ2NhbGwnIG1ldGhvZCBbZWxlbWVudF0gY3JlYXRlZCBmb3IgYSBsb2NhbCBmdW5jdGlvbi4KICBUeXBlSW5mb3JtYXRpb24gYWxsb2NhdGVDbG9zdXJlKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIFR5cGVJbmZvcm1hdGlvbiByZXN1bHQgPSBuZXcgQ2xvc3VyZVR5cGVJbmZvcm1hdGlvbigKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiwgY3VycmVudE1lbWJlciwgZWxlbWVudCk7CiAgICBhbGxvY2F0ZWRDbG9zdXJlcy5hZGQocmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gYWxsb2NhdGVTZXQoCiAgICAgIFR5cGVJbmZvcm1hdGlvbiB0eXBlLCBpci5UcmVlTm9kZSBub2RlLCBNZW1iZXJFbnRpdHkgZW5jbG9zaW5nLAogICAgICBbVHlwZUluZm9ybWF0aW9uIGVsZW1lbnRUeXBlXSkgewogICAgYXNzZXJ0KHN0cmF0ZWd5LmNoZWNrU2V0Tm9kZShub2RlKSk7CiAgICBib29sIGlzQ29uc3QgPSB0eXBlLnR5cGUgPT0gX2Fic3RyYWN0VmFsdWVEb21haW4uY29uc3RTZXRUeXBlOwoKICAgIEFic3RyYWN0VmFsdWUgZWxlbWVudFR5cGVNYXNrID0KICAgICAgICBpc0NvbnN0ID8gZWxlbWVudFR5cGUudHlwZSA6IGR5bmFtaWNUeXBlLnR5cGU7CiAgICBBYnN0cmFjdFZhbHVlIG1hc2sgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVTZXRWYWx1ZSgKICAgICAgICB0eXBlLnR5cGUsIG5vZGUsIGVuY2xvc2luZywgZWxlbWVudFR5cGVNYXNrKTsKICAgIEVsZW1lbnRJblNldFR5cGVJbmZvcm1hdGlvbiBlbGVtZW50ID0gbmV3IEVsZW1lbnRJblNldFR5cGVJbmZvcm1hdGlvbigKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiwgY3VycmVudE1lbWJlciwgZWxlbWVudFR5cGUpOwogICAgZWxlbWVudC5pbmZlcnJlZCA9IGlzQ29uc3Q7CgogICAgYWxsb2NhdGVkVHlwZXMuYWRkKGVsZW1lbnQpOwogICAgcmV0dXJuIGFsbG9jYXRlZFNldHNbbm9kZV0gPQogICAgICAgIG5ldyBTZXRUeXBlSW5mb3JtYXRpb24oY3VycmVudE1lbWJlciwgbWFzaywgZWxlbWVudCk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gYWxsb2NhdGVNYXAoCiAgICAgIENvbmNyZXRlVHlwZUluZm9ybWF0aW9uIHR5cGUsIGlyLlRyZWVOb2RlIG5vZGUsIE1lbWJlckVudGl0eSBlbGVtZW50LAogICAgICBbTGlzdDxUeXBlSW5mb3JtYXRpb24+IGtleVR5cGVzLCBMaXN0PFR5cGVJbmZvcm1hdGlvbj4gdmFsdWVUeXBlc10pIHsKICAgIGFzc2VydChzdHJhdGVneS5jaGVja01hcE5vZGUobm9kZSkpOwogICAgYXNzZXJ0KGtleVR5cGVzLmxlbmd0aCA9PSB2YWx1ZVR5cGVzLmxlbmd0aCk7CiAgICBib29sIGlzRml4ZWQgPSAodHlwZS50eXBlID09IF9hYnN0cmFjdFZhbHVlRG9tYWluLmNvbnN0TWFwVHlwZSk7CgogICAgVHlwZUluZm9ybWF0aW9uIGtleVR5cGUsIHZhbHVlVHlwZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwga2V5VHlwZXMubGVuZ3RoOyArK2kpIHsKICAgICAgVHlwZUluZm9ybWF0aW9uIHR5cGUgPSBrZXlUeXBlc1tpXTsKICAgICAga2V5VHlwZSA9IGtleVR5cGUgPT0gbnVsbAogICAgICAgICAgPyBhbGxvY2F0ZVBoaShudWxsLCBudWxsLCB0eXBlLCBpc1RyeTogZmFsc2UpCiAgICAgICAgICA6IGFkZFBoaUlucHV0KG51bGwsIGtleVR5cGUsIHR5cGUpOwoKICAgICAgdHlwZSA9IHZhbHVlVHlwZXNbaV07CiAgICAgIHZhbHVlVHlwZSA9IHZhbHVlVHlwZSA9PSBudWxsCiAgICAgICAgICA/IGFsbG9jYXRlUGhpKG51bGwsIG51bGwsIHR5cGUsIGlzVHJ5OiBmYWxzZSkKICAgICAgICAgIDogYWRkUGhpSW5wdXQobnVsbCwgdmFsdWVUeXBlLCB0eXBlKTsKICAgIH0KCiAgICBrZXlUeXBlID0KICAgICAgICBrZXlUeXBlID09IG51bGwgPyBub25OdWxsRW1wdHkoKSA6IHNpbXBsaWZ5UGhpKG51bGwsIG51bGwsIGtleVR5cGUpOwogICAgdmFsdWVUeXBlID0KICAgICAgICB2YWx1ZVR5cGUgPT0gbnVsbCA/IG5vbk51bGxFbXB0eSgpIDogc2ltcGxpZnlQaGkobnVsbCwgbnVsbCwgdmFsdWVUeXBlKTsKCiAgICBBYnN0cmFjdFZhbHVlIGtleVR5cGVNYXNrLCB2YWx1ZVR5cGVNYXNrOwogICAgaWYgKGlzRml4ZWQpIHsKICAgICAga2V5VHlwZU1hc2sgPSBrZXlUeXBlLnR5cGU7CiAgICAgIHZhbHVlVHlwZU1hc2sgPSB2YWx1ZVR5cGUudHlwZTsKICAgIH0gZWxzZSB7CiAgICAgIGtleVR5cGVNYXNrID0gdmFsdWVUeXBlTWFzayA9IGR5bmFtaWNUeXBlLnR5cGU7CiAgICB9CiAgICBBYnN0cmFjdFZhbHVlIG1hc2sgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVNYXBWYWx1ZSgKICAgICAgICB0eXBlLnR5cGUsIG5vZGUsIGVsZW1lbnQsIGtleVR5cGVNYXNrLCB2YWx1ZVR5cGVNYXNrKTsKCiAgICBUeXBlSW5mb3JtYXRpb24ga2V5VHlwZUluZm8gPSBuZXcgS2V5SW5NYXBUeXBlSW5mb3JtYXRpb24oCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4sIGN1cnJlbnRNZW1iZXIsIGtleVR5cGUpOwogICAgVHlwZUluZm9ybWF0aW9uIHZhbHVlVHlwZUluZm8gPSBuZXcgVmFsdWVJbk1hcFR5cGVJbmZvcm1hdGlvbigKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiwgY3VycmVudE1lbWJlciwgdmFsdWVUeXBlKTsKICAgIGFsbG9jYXRlZFR5cGVzLmFkZChrZXlUeXBlSW5mbyk7CiAgICBhbGxvY2F0ZWRUeXBlcy5hZGQodmFsdWVUeXBlSW5mbyk7CgogICAgTWFwVHlwZUluZm9ybWF0aW9uIG1hcCA9CiAgICAgICAgbmV3IE1hcFR5cGVJbmZvcm1hdGlvbihjdXJyZW50TWVtYmVyLCBtYXNrLCBrZXlUeXBlSW5mbywgdmFsdWVUeXBlSW5mbyk7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrZXlUeXBlcy5sZW5ndGg7ICsraSkgewogICAgICBUeXBlSW5mb3JtYXRpb24gbmV3VHlwZSA9IG1hcC5hZGRFbnRyeUFzc2lnbm1lbnQoCiAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiwga2V5VHlwZXNbaV0sIHZhbHVlVHlwZXNbaV0sIHRydWUpOwogICAgICBpZiAobmV3VHlwZSAhPSBudWxsKSBhbGxvY2F0ZWRUeXBlcy5hZGQobmV3VHlwZSk7CiAgICB9CgogICAgLy8gU2hvcnRjdXQ6IElmIHdlIGFscmVhZHkgaGF2ZSBhIGZpcnN0IGFwcHJveGltYXRpb24gb2YgdGhlIGtleS92YWx1ZSB0eXBlLAogICAgLy8gc3RhcnQgcHJvcGFnYXRpbmcgaXQgZWFybHkuCiAgICBpZiAoaXNGaXhlZCkgbWFwLm1hcmtBc0luZmVycmVkKCk7CgogICAgYWxsb2NhdGVkTWFwc1tub2RlXSA9IG1hcDsKICAgIHJldHVybiBtYXA7CiAgfQoKICBBYnN0cmFjdFZhbHVlIG5ld1R5cGVkU2VsZWN0b3IoVHlwZUluZm9ybWF0aW9uIGluZm8sIEFic3RyYWN0VmFsdWUgbWFzaykgewogICAgLy8gT25seSB0eXBlIHRoZSBzZWxlY3RvciBpZiBbaW5mb10gaXMgY29uY3JldGUsIGJlY2F1c2UgdGhlIG90aGVyCiAgICAvLyBraW5kcyBvZiBbVHlwZUluZm9ybWF0aW9uXSBoYXZlIHRoZSBlbXB0eSB0eXBlIGF0IHRoaXMgcG9pbnQgb2YKICAgIC8vIGFuYWx5c2lzLgogICAgcmV0dXJuIGluZm8uaXNDb25jcmV0ZSA/IGluZm8udHlwZSA6IG1hc2s7CiAgfQoKICAvLy8gUmV0dXJucyBhIG5ldyB0eXBlIHRoYXQgdW5pb25zIFtmaXJzdElucHV0XSBhbmQgW3NlY29uZElucHV0XS4KICBUeXBlSW5mb3JtYXRpb24gYWxsb2NhdGVEaWFtb25kUGhpKAogICAgICBUeXBlSW5mb3JtYXRpb24gZmlyc3RJbnB1dCwgVHlwZUluZm9ybWF0aW9uIHNlY29uZElucHV0KSB7CiAgICBQaGlFbGVtZW50VHlwZUluZm9ybWF0aW9uIHJlc3VsdCA9IG5ldyBQaGlFbGVtZW50VHlwZUluZm9ybWF0aW9uKAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLCBjdXJyZW50TWVtYmVyLCBudWxsLCBudWxsLAogICAgICAgIGlzVHJ5OiBmYWxzZSk7CiAgICByZXN1bHQuYWRkQXNzaWdubWVudChmaXJzdElucHV0KTsKICAgIHJlc3VsdC5hZGRBc3NpZ25tZW50KHNlY29uZElucHV0KTsKICAgIGFsbG9jYXRlZFR5cGVzLmFkZChyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFBoaUVsZW1lbnRUeXBlSW5mb3JtYXRpb24gX2FkZFBoaSgKICAgICAgaXIuTm9kZSBub2RlLCBMb2NhbCB2YXJpYWJsZSwgVHlwZUluZm9ybWF0aW9uIGlucHV0VHlwZSwgYm9vbCBpc1RyeSkgewogICAgUGhpRWxlbWVudFR5cGVJbmZvcm1hdGlvbiByZXN1bHQgPSBuZXcgUGhpRWxlbWVudFR5cGVJbmZvcm1hdGlvbigKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiwgY3VycmVudE1lbWJlciwgbm9kZSwgdmFyaWFibGUsCiAgICAgICAgaXNUcnk6IGlzVHJ5KTsKICAgIGFsbG9jYXRlZFR5cGVzLmFkZChyZXN1bHQpOwogICAgcmVzdWx0LmFkZEFzc2lnbm1lbnQoaW5wdXRUeXBlKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gUmV0dXJucyBhIG5ldyB0eXBlIGZvciBob2xkaW5nIHRoZSBwb3RlbnRpYWwgdHlwZXMgb2YgW2VsZW1lbnRdLgogIC8vLyBbaW5wdXRUeXBlXSBpcyB0aGUgZmlyc3QgaW5jb21pbmcgdHlwZSBvZiB0aGUgcGhpLgogIFBoaUVsZW1lbnRUeXBlSW5mb3JtYXRpb24gYWxsb2NhdGVQaGkoCiAgICAgIGlyLk5vZGUgbm9kZSwgTG9jYWwgdmFyaWFibGUsIFR5cGVJbmZvcm1hdGlvbiBpbnB1dFR5cGUsCiAgICAgIHtib29sIGlzVHJ5fSkgewogICAgYXNzZXJ0KHN0cmF0ZWd5LmNoZWNrUGhpTm9kZShub2RlKSk7CiAgICAvLyBDaGVjayBpZiBbaW5wdXRUeXBlXSBpcyBhIHBoaSBmb3IgYSBsb2NhbCB1cGRhdGVkIGluCiAgICAvLyB0aGUgdHJ5L2NhdGNoIGJsb2NrIFtub2RlXS4gSWYgaXQgaXMsIG5vIG5lZWQgdG8gYWxsb2NhdGUgYSBuZXcKICAgIC8vIHBoaS4KICAgIGlmIChpbnB1dFR5cGUgaXMgUGhpRWxlbWVudFR5cGVJbmZvcm1hdGlvbiAmJgogICAgICAgIGlucHV0VHlwZS5icmFuY2hOb2RlID09IG5vZGUgJiYKICAgICAgICBpbnB1dFR5cGUuaXNUcnkpIHsKICAgICAgcmV0dXJuIGlucHV0VHlwZTsKICAgIH0KICAgIHJldHVybiBfYWRkUGhpKG5vZGUsIHZhcmlhYmxlLCBpbnB1dFR5cGUsIGlzVHJ5KTsKICB9CgogIC8vLyBSZXR1cm5zIGEgbmV3IHR5cGUgZm9yIGhvbGRpbmcgdGhlIHBvdGVudGlhbCB0eXBlcyBvZiBbZWxlbWVudF0uCiAgLy8vIFtpbnB1dFR5cGVdIGlzIHRoZSBmaXJzdCBpbmNvbWluZyB0eXBlIG9mIHRoZSBwaGkuIFthbGxvY2F0ZUxvb3BQaGldCiAgLy8vIG9ubHkgZGlmZmVycyBmcm9tIFthbGxvY2F0ZVBoaV0gaW4gdGhhdCBpdCBhbGxvd3MgdGhlIHVuZGVybHlpbmcKICAvLy8gaW1wbGVtZW50YXRpb24gb2YgW1R5cGVTeXN0ZW1dIHRvIGRpZmZlcmVudGlhdGUgUGhpIG5vZGVzIGR1ZSB0byBsb29wcwogIC8vLyBmcm9tIG90aGVyIG1lcmdpbmcgdXNlcy4KICBQaGlFbGVtZW50VHlwZUluZm9ybWF0aW9uIGFsbG9jYXRlTG9vcFBoaSgKICAgICAgaXIuTm9kZSBub2RlLCBMb2NhbCB2YXJpYWJsZSwgVHlwZUluZm9ybWF0aW9uIGlucHV0VHlwZSwKICAgICAge2Jvb2wgaXNUcnl9KSB7CiAgICBhc3NlcnQoc3RyYXRlZ3kuY2hlY2tMb29wUGhpTm9kZShub2RlKSk7CiAgICByZXR1cm4gX2FkZFBoaShub2RlLCB2YXJpYWJsZSwgaW5wdXRUeXBlLCBpc1RyeSk7CiAgfQoKICAvLy8gU2ltcGxpZXMgdGhlIHBoaSByZXByZXNlbnRpbmcgW2VsZW1lbnRdIGFuZCBvZiB0aGUgdHlwZQogIC8vLyBbcGhpVHlwZV0uIEZvciBleGFtcGxlLCBpZiB0aGlzIHBoaSBoYXMgb25lIGluY29taW5nIGlucHV0LCBhbgogIC8vLyBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCBjb3VsZCBqdXN0IHJldHVybiB0aGF0IGluY29taW5nCiAgLy8vIGlucHV0IHR5cGUuCiAgVHlwZUluZm9ybWF0aW9uIHNpbXBsaWZ5UGhpKAogICAgICBpci5Ob2RlIG5vZGUsIExvY2FsIHZhcmlhYmxlLCBQaGlFbGVtZW50VHlwZUluZm9ybWF0aW9uIHBoaVR5cGUpIHsKICAgIGFzc2VydChwaGlUeXBlLmJyYW5jaE5vZGUgPT0gbm9kZSk7CiAgICBpZiAocGhpVHlwZS5hc3NpZ25tZW50cy5sZW5ndGggPT0gMSkgcmV0dXJuIHBoaVR5cGUuYXNzaWdubWVudHMuZmlyc3Q7CiAgICByZXR1cm4gcGhpVHlwZTsKICB9CgogIC8vLyBBZGRzIFtuZXdUeXBlXSBhcyBhbiBpbnB1dCBvZiBbcGhpVHlwZV0uCiAgUGhpRWxlbWVudFR5cGVJbmZvcm1hdGlvbiBhZGRQaGlJbnB1dChMb2NhbCB2YXJpYWJsZSwKICAgICAgUGhpRWxlbWVudFR5cGVJbmZvcm1hdGlvbiBwaGlUeXBlLCBUeXBlSW5mb3JtYXRpb24gbmV3VHlwZSkgewogICAgcGhpVHlwZS5hZGRBc3NpZ25tZW50KG5ld1R5cGUpOwogICAgcmV0dXJuIHBoaVR5cGU7CiAgfQoKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlTWFzayhJdGVyYWJsZTxUeXBlSW5mb3JtYXRpb24+IGFzc2lnbm1lbnRzKSB7CiAgICByZXR1cm4gam9pblR5cGVNYXNrcyhhc3NpZ25tZW50cy5tYXAoKGUpID0+IGUudHlwZSkpOwogIH0KCiAgQWJzdHJhY3RWYWx1ZSBqb2luVHlwZU1hc2tzKEl0ZXJhYmxlPEFic3RyYWN0VmFsdWU+IG1hc2tzKSB7CiAgICB2YXIgZHluYW1pY1R5cGUgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZTsKICAgIC8vIE9wdGltaXphdGlvbjogd2UgYXJlIGl0ZXJhdGluZyBvdmVyIG1hc2tzIHR3aWNlLCBidXQgYmVjYXVzZSBgbWFza3NgIGlzIGEKICAgIC8vIG1hcHBlZCBpdGVyYWJsZSwgd2Ugc2F2ZSB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdHMgdG8gYXZvaWQgY29tcHV0aW5nIHRoZW0KICAgIC8vIGFnYWluLgogICAgdmFyIGxpc3QgPSBbXTsKICAgIGJvb2wgaXNEeW5hbWljSW5nb3JpbmdOdWxsID0gZmFsc2U7CiAgICBib29sIG1heUJlTnVsbCA9IGZhbHNlOwogICAgZm9yIChBYnN0cmFjdFZhbHVlIG1hc2sgaW4gbWFza3MpIHsKICAgICAgLy8gRG9uJ3QgZG8gYW55IHdvcmsgb24gY29tcHV0aW5nIHVuaW9ucyBpZiB3ZSBrbm93IHRoYXQgYWZ0ZXIgYWxsIHRoYXQKICAgICAgLy8gd29yayB0aGUgcmVzdWx0IHdpbGwgYmUgYGR5bmFtaWNgLgogICAgICAvLyBUT0RPKHNpZ211bmQpOiBjaGFuZ2UgdG8gYG1hc2sgPT0gZHluYW1pY1R5cGVgIHNvIHdlIGNhbiBjb250aW51ZSB0bwogICAgICAvLyB0cmFjayB0aGUgbm9uLW51bGxhYmxlIGJpdC4KICAgICAgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluLmNvbnRhaW5zQWxsKG1hc2spLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgICAgaXNEeW5hbWljSW5nb3JpbmdOdWxsID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4uaXNOdWxsKG1hc2spLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgICAgbWF5QmVOdWxsID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoaXNEeW5hbWljSW5nb3JpbmdOdWxsICYmIG1heUJlTnVsbCkgcmV0dXJuIGR5bmFtaWNUeXBlOwogICAgICBsaXN0LmFkZChtYXNrKTsKICAgIH0KCiAgICBBYnN0cmFjdFZhbHVlIG5ld1R5cGUgPSBudWxsOwogICAgZm9yIChBYnN0cmFjdFZhbHVlIG1hc2sgaW4gbGlzdCkgewogICAgICBuZXdUeXBlID0KICAgICAgICAgIG5ld1R5cGUgPT0gbnVsbCA/IG1hc2sgOiBfYWJzdHJhY3RWYWx1ZURvbWFpbi51bmlvbihuZXdUeXBlLCBtYXNrKTsKICAgICAgLy8gTGlrZXdpc2UgLSBzdG9wIGVhcmx5IGlmIHdlIGFscmVhZHkgcmVhY2ggZHluYW1pYy4KICAgICAgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluLmNvbnRhaW5zQWxsKG5ld1R5cGUpLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgICAgaXNEeW5hbWljSW5nb3JpbmdOdWxsID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4uaXNOdWxsKG5ld1R5cGUpLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgICAgbWF5QmVOdWxsID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoaXNEeW5hbWljSW5nb3JpbmdOdWxsICYmIG1heUJlTnVsbCkgcmV0dXJuIGR5bmFtaWNUeXBlOwogICAgfQoKICAgIHJldHVybiBuZXdUeXBlID8/IF9hYnN0cmFjdFZhbHVlRG9tYWluLmVtcHR5VHlwZTsKICB9Cn0KgqEATk48ASgZJCEYJSABUBskNDVFATo7LxcZATJLAT0jATonAUEkAUAjAUAjAUAqAgFGEyMlAUpFTgEySTIBLEo2ATE/MwEvPTIBLzovASpNASo8MQFBNyMBTB1EAUpFOyABLionHx4eGx4YFxoBMUsEATIoAVAQLz0BOSNPNw4bBAEhITVOBAEgIDNMBAEjIzkdPQQBIyM5HT0EASgoQyJCBAEjIzkdPQQBICAzTAQBISE1TgQBJSU9Hz8EASEhNU4EASYmPyBABAEmJj8gQAQBKSlFI0MEASAhSQElPD0BICAzTAQBJSU9Hz8EASMjOR09BAEhITVOBAEkJDsePgQBKDIoQyJCBAEtLU0nRwQBLCxLJkYEASQBNC1HBAEwK0UEATwUHj8uMzo6QRoGH0YEAUgWRx4EATEnSgFAQwxIIR0oJSNMKy9GLSxKJTFIDxRKCEQlKD0TDSkrEwYWPwZPHkohFAQBSUExMzY1HggEAR1LKgQBRx9CUAQBGkwnBAFILEwzHAQBP0MaMDAIBAFBRRI8REoIIBAEATQsTwQBNSxQBAEyLE0EASMdBAEmHQQBIEYzKk0yRh07H0ZIExY2ATIkQURGMC8/KgEhO0UEAUtOTDw5NyMTBAEfRicpQwEkNz42SzsgASEhPgQBH0xMKTJFASgwKiA4LgEcJDgwBgEOTRBRAS4TIiYNNgY+PwE/N0M5JScBHVEBMDhDOAYBUSMnAR8QBAFNR0cRLwQBRSZBRjkXJicgEwQBJU1GPRcgJRMEAUc5KT8WKTxHDDIoGxgGNgQBR0tHTR8tPxYtNgQBPkVEEh9JKEsUBAEvOEQkFAQBSToEAT84UVEOEygcKE4sTiVGJghBGghCFgYBIicQTjxJJghEGghCBgE2BAIBLnBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL3R5cGVfc3lzdGVtLmRhcnQxc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc3NhL3NzYV90cmFjZXIuZGFydMAAVTEvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBzc2EudHJhY2VyOwoKaW1wb3J0ICcuLi8uLi9jb21waWxlcl9uZXcuZGFydCcgc2hvdyBPdXRwdXRTaW5rOwppbXBvcnQgJy4uL2RpYWdub3N0aWNzL2ludmFyaWFudC5kYXJ0JyBzaG93IERFQlVHX01PREU7CmltcG9ydCAnLi4vaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmFtZXIuZGFydCcgc2hvdyBzdWZmaXhGb3JHZXRJbnRlcmNlcHRvcjsKaW1wb3J0ICcuLi90cmFjZXIuZGFydCc7CmltcG9ydCAnLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CmltcG9ydCAnbm9kZXMuZGFydCc7CgovLy8gT3V0cHV0cyBTU0EgY29kZSBpbiBhIGZvcm1hdCByZWFkYWJsZSBieSBIeWRyYSBJUi4KLy8vIFRyYWNpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgc2VlIC4uL3RyYWNlci5kYXJ0IGZvciBob3cKLy8vIHRvIGVuYWJsZSBpdC4KY2xhc3MgSFRyYWNlciBleHRlbmRzIEhHcmFwaFZpc2l0b3Igd2l0aCBUcmFjZXJVdGlsIHsKICBmaW5hbCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQ7CiAgQG92ZXJyaWRlCiAgZmluYWwgT3V0cHV0U2luayBvdXRwdXQ7CgogIEhUcmFjZXIodGhpcy5vdXRwdXQsIHRoaXMuY2xvc2VkV29ybGQpOwoKICB2b2lkIHRyYWNlR3JhcGgoU3RyaW5nIG5hbWUsIEhHcmFwaCBncmFwaCkgewogICAgREVCVUdfTU9ERSA9IHRydWU7CiAgICB0YWcoImNmZyIsICgpIHsKICAgICAgcHJpbnRQcm9wZXJ0eSgibmFtZSIsIG5hbWUpOwogICAgICB2aXNpdERvbWluYXRvclRyZWUoZ3JhcGgpOwogICAgfSk7CiAgfQoKICB2b2lkIGFkZFByZWRlY2Vzc29ycyhIQmFzaWNCbG9jayBibG9jaykgewogICAgaWYgKGJsb2NrLnByZWRlY2Vzc29ycy5pc0VtcHR5KSB7CiAgICAgIHByaW50RW1wdHlQcm9wZXJ0eSgicHJlZGVjZXNzb3JzIik7CiAgICB9IGVsc2UgewogICAgICBhZGRJbmRlbnQoKTsKICAgICAgYWRkKCJwcmVkZWNlc3NvcnMiKTsKICAgICAgZm9yIChIQmFzaWNCbG9jayBwcmVkZWNlc3NvciBpbiBibG9jay5wcmVkZWNlc3NvcnMpIHsKICAgICAgICBhZGQoJyAiQiR7cHJlZGVjZXNzb3IuaWR9IicpOwogICAgICB9CiAgICAgIGFkZCgiXG4iKTsKICAgIH0KICB9CgogIHZvaWQgYWRkU3VjY2Vzc29ycyhIQmFzaWNCbG9jayBibG9jaykgewogICAgaWYgKGJsb2NrLnN1Y2Nlc3NvcnMuaXNFbXB0eSkgewogICAgICBwcmludEVtcHR5UHJvcGVydHkoInN1Y2Nlc3NvcnMiKTsKICAgIH0gZWxzZSB7CiAgICAgIGFkZEluZGVudCgpOwogICAgICBhZGQoInN1Y2Nlc3NvcnMiKTsKICAgICAgZm9yIChIQmFzaWNCbG9jayBzdWNjZXNzb3IgaW4gYmxvY2suc3VjY2Vzc29ycykgewogICAgICAgIGFkZCgnICJCJHtzdWNjZXNzb3IuaWR9IicpOwogICAgICB9CiAgICAgIGFkZCgiXG4iKTsKICAgIH0KICB9CgogIHZvaWQgYWRkSW5zdHJ1Y3Rpb25zKAogICAgICBISW5zdHJ1Y3Rpb25TdHJpbmdpZmllciBzdHJpbmdpZmllciwgSEluc3RydWN0aW9uTGlzdCBsaXN0KSB7CiAgICBmb3IgKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IGxpc3QuZmlyc3Q7CiAgICAgICAgaW5zdHJ1Y3Rpb24gIT0gbnVsbDsKICAgICAgICBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uLm5leHQpIHsKICAgICAgaW50IGJjaSA9IDA7CiAgICAgIGludCB1c2VzID0gaW5zdHJ1Y3Rpb24udXNlZEJ5Lmxlbmd0aDsKICAgICAgU3RyaW5nIGNoYW5nZXMgPSBpbnN0cnVjdGlvbi5zaWRlRWZmZWN0cy5oYXNTaWRlRWZmZWN0cygpID8gJyEnIDogJyAnOwogICAgICBTdHJpbmcgZGVwZW5kcyA9IGluc3RydWN0aW9uLnNpZGVFZmZlY3RzLmRlcGVuZHNPblNvbWV0aGluZygpID8gJz8nIDogJyc7CiAgICAgIGFkZEluZGVudCgpOwogICAgICBTdHJpbmcgdGVtcG9yYXJ5SWQgPSBzdHJpbmdpZmllci50ZW1wb3JhcnlJZChpbnN0cnVjdGlvbik7CiAgICAgIFN0cmluZyBpbnN0cnVjdGlvblN0cmluZyA9IHN0cmluZ2lmaWVyLnZpc2l0KGluc3RydWN0aW9uKTsKICAgICAgYWRkKCIkYmNpICR1c2VzICR0ZW1wb3JhcnlJZCAkaW5zdHJ1Y3Rpb25TdHJpbmcgJGNoYW5nZXMgJGRlcGVuZHMgPHxAXG4iKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCYXNpY0Jsb2NrKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICBISW5zdHJ1Y3Rpb25TdHJpbmdpZmllciBzdHJpbmdpZmllciA9CiAgICAgICAgbmV3IEhJbnN0cnVjdGlvblN0cmluZ2lmaWVyKGJsb2NrLCBjbG9zZWRXb3JsZCk7CiAgICBhc3NlcnQoYmxvY2suaWQgIT0gbnVsbCk7CiAgICB0YWcoImJsb2NrIiwgKCkgewogICAgICBwcmludFByb3BlcnR5KCJuYW1lIiwgIkIke2Jsb2NrLmlkfSIpOwogICAgICBwcmludFByb3BlcnR5KCJmcm9tX2JjaSIsIC0xKTsKICAgICAgcHJpbnRQcm9wZXJ0eSgidG9fYmNpIiwgLTEpOwogICAgICBhZGRQcmVkZWNlc3NvcnMoYmxvY2spOwogICAgICBhZGRTdWNjZXNzb3JzKGJsb2NrKTsKICAgICAgcHJpbnRFbXB0eVByb3BlcnR5KCJ4aGFuZGxlcnMiKTsKICAgICAgcHJpbnRFbXB0eVByb3BlcnR5KCJmbGFncyIpOwogICAgICBpZiAoYmxvY2suZG9taW5hdG9yICE9IG51bGwpIHsKICAgICAgICBwcmludFByb3BlcnR5KCJkb21pbmF0b3IiLCAiQiR7YmxvY2suZG9taW5hdG9yLmlkfSIpOwogICAgICB9CiAgICAgIHRhZygic3RhdGVzIiwgKCkgewogICAgICAgIHRhZygibG9jYWxzIiwgKCkgewogICAgICAgICAgcHJpbnRQcm9wZXJ0eSgic2l6ZSIsIDApOwogICAgICAgICAgcHJpbnRQcm9wZXJ0eSgibWV0aG9kIiwgIk5vbmUiKTsKICAgICAgICAgIGJsb2NrLmZvckVhY2hQaGkoKHBoaSkgewogICAgICAgICAgICBTdHJpbmcgcGhpSWQgPSBzdHJpbmdpZmllci50ZW1wb3JhcnlJZChwaGkpOwogICAgICAgICAgICBTdHJpbmdCdWZmZXIgaW5wdXRJZHMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGhpLmlucHV0cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIGlucHV0SWRzLndyaXRlKHN0cmluZ2lmaWVyLnRlbXBvcmFyeUlkKHBoaS5pbnB1dHNbaV0pKTsKICAgICAgICAgICAgICBpbnB1dElkcy53cml0ZSgiICIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHByaW50bG4oIiR7cGhpLmlkfSAkcGhpSWQgWyAkaW5wdXRJZHNdIik7CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICAgIHRhZygiSElSIiwgKCkgewogICAgICAgIGFkZEluc3RydWN0aW9ucyhzdHJpbmdpZmllciwgYmxvY2sucGhpcyk7CiAgICAgICAgYWRkSW5zdHJ1Y3Rpb25zKHN0cmluZ2lmaWVyLCBibG9jayk7CiAgICAgIH0pOwogICAgfSk7CiAgfQp9CgpjbGFzcyBISW5zdHJ1Y3Rpb25TdHJpbmdpZmllciBpbXBsZW1lbnRzIEhWaXNpdG9yPFN0cmluZz4gewogIGZpbmFsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZDsKICBmaW5hbCBIQmFzaWNCbG9jayBjdXJyZW50QmxvY2s7CgogIEhJbnN0cnVjdGlvblN0cmluZ2lmaWVyKHRoaXMuY3VycmVudEJsb2NrLCB0aGlzLmNsb3NlZFdvcmxkKTsKCiAgQWJzdHJhY3RWYWx1ZURvbWFpbiBnZXQgX2Fic3RyYWN0VmFsdWVEb21haW4gPT4KICAgICAgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKCiAgdmlzaXQoSEluc3RydWN0aW9uIG5vZGUpID0+ICcke25vZGUuYWNjZXB0KHRoaXMpfSAke25vZGUuaW5zdHJ1Y3Rpb25UeXBlfSc7CgogIFN0cmluZyB0ZW1wb3JhcnlJZChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIFN0cmluZyBwcmVmaXg7CiAgICBpZiAoaW5zdHJ1Y3Rpb24uaXNOdWxsKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHByZWZpeCA9ICd1JzsKICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24KICAgICAgICAuaXNDb25mbGljdGluZyhfYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBwcmVmaXggPSAnYyc7CiAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uCiAgICAgICAgLmlzRXh0ZW5kYWJsZUFycmF5KF9hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHByZWZpeCA9ICdlJzsKICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24KICAgICAgICAuaXNGaXhlZEFycmF5KF9hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHByZWZpeCA9ICdmJzsKICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24KICAgICAgICAuaXNNdXRhYmxlQXJyYXkoX2Fic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcHJlZml4ID0gJ20nOwogICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi5pc0FycmF5KF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHByZWZpeCA9ICdhJzsKICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24uaXNTdHJpbmcoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcHJlZml4ID0gJ3MnOwogICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbgogICAgICAgIC5pc0luZGV4YWJsZVByaW1pdGl2ZShfYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBwcmVmaXggPSAncic7CiAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLmlzQm9vbGVhbihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBwcmVmaXggPSAnYic7CiAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLmlzSW50ZWdlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBwcmVmaXggPSAnaSc7CiAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLmlzRG91YmxlKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHByZWZpeCA9ICdkJzsKICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24uaXNOdW1iZXIoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcHJlZml4ID0gJ24nOwogICAgfSBlbHNlIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgIC5jb250YWluc0FsbChpbnN0cnVjdGlvbi5pbnN0cnVjdGlvblR5cGUpCiAgICAgICAgLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgIHByZWZpeCA9ICd2JzsKICAgIH0gZWxzZSB7CiAgICAgIHByZWZpeCA9ICdVJzsKICAgIH0KICAgIHJldHVybiAiJHByZWZpeCR7aW5zdHJ1Y3Rpb24uaWR9IjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdExhdGVWYWx1ZShITGF0ZVZhbHVlIG5vZGUpIHsKICAgIHJldHVybiAiTGF0ZVZhbHVlOiAke3RlbXBvcmFyeUlkKG5vZGUuaW5wdXRzWzBdKX0iOwogIH0KCiAgU3RyaW5nIGhhbmRsZUludm9rZUJpbmFyeShISW52b2tlQmluYXJ5IG5vZGUsIFN0cmluZyBvcGNvZGUpIHsKICAgIFN0cmluZyBsZWZ0ID0gdGVtcG9yYXJ5SWQobm9kZS5sZWZ0KTsKICAgIFN0cmluZyByaWdodCA9IHRlbXBvcmFyeUlkKG5vZGUucmlnaHQpOwogICAgcmV0dXJuICckb3Bjb2RlOiAkbGVmdCAkcmlnaHQnOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0QWJzKEhBYnMgbm9kZSkgewogICAgU3RyaW5nIG9wZXJhbmQgPSB0ZW1wb3JhcnlJZChub2RlLm9wZXJhbmQpOwogICAgcmV0dXJuICJBYnM6ICRvcGVyYW5kIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEFkZChIQWRkIG5vZGUpID0+IGhhbmRsZUludm9rZUJpbmFyeShub2RlLCAnQWRkJyk7CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEJpdEFuZChIQml0QW5kIG5vZGUpID0+IGhhbmRsZUludm9rZUJpbmFyeShub2RlLCAnQml0QW5kJyk7CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEJpdE5vdChIQml0Tm90IG5vZGUpIHsKICAgIFN0cmluZyBvcGVyYW5kID0gdGVtcG9yYXJ5SWQobm9kZS5vcGVyYW5kKTsKICAgIHJldHVybiAiQml0Tm90OiAkb3BlcmFuZCI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRCaXRPcihIQml0T3Igbm9kZSkgPT4gaGFuZGxlSW52b2tlQmluYXJ5KG5vZGUsICdCaXRPcicpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRCaXRYb3IoSEJpdFhvciBub2RlKSA9PiBoYW5kbGVJbnZva2VCaW5hcnkobm9kZSwgJ0JpdFhvcicpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRCb3VuZHNDaGVjayhIQm91bmRzQ2hlY2sgbm9kZSkgewogICAgU3RyaW5nIGxlbmd0aElkID0gdGVtcG9yYXJ5SWQobm9kZS5sZW5ndGgpOwogICAgU3RyaW5nIGluZGV4SWQgPSB0ZW1wb3JhcnlJZChub2RlLmluZGV4KTsKICAgIHJldHVybiAiQm91bmRzQ2hlY2s6IGxlbmd0aCA9ICRsZW5ndGhJZCwgaW5kZXggPSAkaW5kZXhJZCI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRCcmVhayhIQnJlYWsgbm9kZSkgewogICAgSEJhc2ljQmxvY2sgdGFyZ2V0ID0gY3VycmVudEJsb2NrLnN1Y2Nlc3NvcnNbMF07CiAgICBpZiAobm9kZS5sYWJlbCAhPSBudWxsKSB7CiAgICAgIHJldHVybiAiQnJlYWsgJHtub2RlLmxhYmVsLmxhYmVsTmFtZX06IChCJHt0YXJnZXQuaWR9KSI7CiAgICB9CiAgICByZXR1cm4gIkJyZWFrOiAoQiR7dGFyZ2V0LmlkfSkiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0Q29uc3RhbnQoSENvbnN0YW50IGNvbnN0YW50KSA9PiAiQ29uc3RhbnQ6ICR7Y29uc3RhbnQuY29uc3RhbnR9IjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0Q29udGludWUoSENvbnRpbnVlIG5vZGUpIHsKICAgIEhCYXNpY0Jsb2NrIHRhcmdldCA9IGN1cnJlbnRCbG9jay5zdWNjZXNzb3JzWzBdOwogICAgaWYgKG5vZGUubGFiZWwgIT0gbnVsbCkgewogICAgICByZXR1cm4gIkNvbnRpbnVlICR7bm9kZS5sYWJlbC5sYWJlbE5hbWV9OiAoQiR7dGFyZ2V0LmlkfSkiOwogICAgfQogICAgcmV0dXJuICJDb250aW51ZTogKEIke3RhcmdldC5pZH0pIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdENyZWF0ZShIQ3JlYXRlIG5vZGUpIHsKICAgIHJldHVybiBoYW5kbGVHZW5lcmljSW52b2tlKCJDcmVhdGUiLCAiJHtub2RlLmVsZW1lbnQubmFtZX0iLCBub2RlLmlucHV0cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRDcmVhdGVCb3goSENyZWF0ZUJveCBub2RlKSB7CiAgICByZXR1cm4gaGFuZGxlR2VuZXJpY0ludm9rZSgiQ3JlYXRlQm94IiwgIiIsIG5vZGUuaW5wdXRzKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdERpdmlkZShIRGl2aWRlIG5vZGUpID0+IGhhbmRsZUludm9rZUJpbmFyeShub2RlLCAnRGl2aWRlJyk7CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEV4aXQoSEV4aXQgbm9kZSkgPT4gIkV4aXQiOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRGaWVsZEdldChIRmllbGRHZXQgbm9kZSkgewogICAgaWYgKG5vZGUuaXNOdWxsQ2hlY2spIHsKICAgICAgcmV0dXJuICdGaWVsZEdldDogTnVsbENoZWNrICR7dGVtcG9yYXJ5SWQobm9kZS5yZWNlaXZlcil9JzsKICAgIH0KICAgIFN0cmluZyBmaWVsZE5hbWUgPSBub2RlLmVsZW1lbnQubmFtZTsKICAgIHJldHVybiAnRmllbGRHZXQ6ICR7dGVtcG9yYXJ5SWQobm9kZS5yZWNlaXZlcil9LiRmaWVsZE5hbWUnOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0RmllbGRTZXQoSEZpZWxkU2V0IG5vZGUpIHsKICAgIFN0cmluZyB2YWx1ZUlkID0gdGVtcG9yYXJ5SWQobm9kZS52YWx1ZSk7CiAgICBTdHJpbmcgZmllbGROYW1lID0gbm9kZS5lbGVtZW50Lm5hbWU7CiAgICByZXR1cm4gJ0ZpZWxkU2V0OiAke3RlbXBvcmFyeUlkKG5vZGUucmVjZWl2ZXIpfS4kZmllbGROYW1lIHRvICR2YWx1ZUlkJzsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFJlYWRNb2RpZnlXcml0ZShIUmVhZE1vZGlmeVdyaXRlIG5vZGUpIHsKICAgIFN0cmluZyBmaWVsZE5hbWUgPSBub2RlLmVsZW1lbnQubmFtZTsKICAgIFN0cmluZyByZWNlaXZlcklkID0gdGVtcG9yYXJ5SWQobm9kZS5yZWNlaXZlcik7CiAgICBTdHJpbmcgb3AgPSBub2RlLmpzT3A7CiAgICBpZiAobm9kZS5pc0Fzc2lnbk9wKSB7CiAgICAgIFN0cmluZyB2YWx1ZUlkID0gdGVtcG9yYXJ5SWQobm9kZS52YWx1ZSk7CiAgICAgIHJldHVybiAnUmVhZE1vZGlmeVdyaXRlOiAkcmVjZWl2ZXJJZC4kZmllbGROYW1lICRvcD0gJHZhbHVlSWQnOwogICAgfSBlbHNlIGlmIChub2RlLmlzUHJlT3ApIHsKICAgICAgcmV0dXJuICdSZWFkTW9kaWZ5V3JpdGU6ICRvcCRyZWNlaXZlcklkLiRmaWVsZE5hbWUnOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICdSZWFkTW9kaWZ5V3JpdGU6ICRyZWNlaXZlcklkLiRmaWVsZE5hbWUkb3AnOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0R2V0TGVuZ3RoKEhHZXRMZW5ndGggbm9kZSkgewogICAgcmV0dXJuICdHZXRMZW5ndGg6ICR7dGVtcG9yYXJ5SWQobm9kZS5yZWNlaXZlcil9JzsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdExvY2FsR2V0KEhMb2NhbEdldCBub2RlKSB7CiAgICBTdHJpbmcgbG9jYWxOYW1lID0gbm9kZS52YXJpYWJsZS5uYW1lOwogICAgcmV0dXJuICdMb2NhbEdldDogJHt0ZW1wb3JhcnlJZChub2RlLmxvY2FsKX0uJGxvY2FsTmFtZSc7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRMb2NhbFNldChITG9jYWxTZXQgbm9kZSkgewogICAgU3RyaW5nIHZhbHVlSWQgPSB0ZW1wb3JhcnlJZChub2RlLnZhbHVlKTsKICAgIFN0cmluZyBsb2NhbE5hbWUgPSBub2RlLnZhcmlhYmxlLm5hbWU7CiAgICByZXR1cm4gJ0xvY2FsU2V0OiAke3RlbXBvcmFyeUlkKG5vZGUubG9jYWwpfS4kbG9jYWxOYW1lIHRvICR2YWx1ZUlkJzsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEdvdG8oSEdvdG8gbm9kZSkgewogICAgSEJhc2ljQmxvY2sgdGFyZ2V0ID0gY3VycmVudEJsb2NrLnN1Y2Nlc3NvcnNbMF07CiAgICByZXR1cm4gIkdvdG86IChCJHt0YXJnZXQuaWR9KSI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRHcmVhdGVyKEhHcmVhdGVyIG5vZGUpID0+IGhhbmRsZUludm9rZUJpbmFyeShub2RlLCAnR3JlYXRlcicpOwogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEdyZWF0ZXJFcXVhbChIR3JlYXRlckVxdWFsIG5vZGUpIHsKICAgIHJldHVybiBoYW5kbGVJbnZva2VCaW5hcnkobm9kZSwgJ0dyZWF0ZXJFcXVhbCcpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0SWRlbnRpdHkoSElkZW50aXR5IG5vZGUpID0+IGhhbmRsZUludm9rZUJpbmFyeShub2RlLCAnSWRlbnRpdHknKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0SWYoSElmIG5vZGUpIHsKICAgIEhCYXNpY0Jsb2NrIHRoZW5CbG9jayA9IGN1cnJlbnRCbG9jay5zdWNjZXNzb3JzWzBdOwogICAgSEJhc2ljQmxvY2sgZWxzZUJsb2NrID0gY3VycmVudEJsb2NrLnN1Y2Nlc3NvcnNbMV07CiAgICBTdHJpbmcgY29uZGl0aW9uSWQgPSB0ZW1wb3JhcnlJZChub2RlLmlucHV0c1swXSk7CiAgICByZXR1cm4gIklmICgkY29uZGl0aW9uSWQpOiAoQiR7dGhlbkJsb2NrLmlkfSkgZWxzZSAoQiR7ZWxzZUJsb2NrLmlkfSkiOwogIH0KCiAgU3RyaW5nIGhhbmRsZUdlbmVyaWNJbnZva2UoCiAgICAgIFN0cmluZyBpbnZva2VUeXBlLCBTdHJpbmcgZnVuY3Rpb25OYW1lLCBMaXN0PEhJbnN0cnVjdGlvbj4gYXJndW1lbnRzKSB7CiAgICBTdHJpbmdCdWZmZXIgYXJndW1lbnRzU3RyaW5nID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGkgIT0gMCkgYXJndW1lbnRzU3RyaW5nLndyaXRlKCIsICIpOwogICAgICBhcmd1bWVudHNTdHJpbmcud3JpdGUodGVtcG9yYXJ5SWQoYXJndW1lbnRzW2ldKSk7CiAgICB9CiAgICByZXR1cm4gIiRpbnZva2VUeXBlOiAkZnVuY3Rpb25OYW1lKCRhcmd1bWVudHNTdHJpbmcpIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEluZGV4KEhJbmRleCBub2RlKSB7CiAgICBTdHJpbmcgcmVjZWl2ZXIgPSB0ZW1wb3JhcnlJZChub2RlLnJlY2VpdmVyKTsKICAgIFN0cmluZyBpbmRleCA9IHRlbXBvcmFyeUlkKG5vZGUuaW5kZXgpOwogICAgcmV0dXJuICJJbmRleDogJHJlY2VpdmVyWyRpbmRleF0iOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0SW5kZXhBc3NpZ24oSEluZGV4QXNzaWduIG5vZGUpIHsKICAgIFN0cmluZyByZWNlaXZlciA9IHRlbXBvcmFyeUlkKG5vZGUucmVjZWl2ZXIpOwogICAgU3RyaW5nIGluZGV4ID0gdGVtcG9yYXJ5SWQobm9kZS5pbmRleCk7CiAgICBTdHJpbmcgdmFsdWUgPSB0ZW1wb3JhcnlJZChub2RlLnZhbHVlKTsKICAgIHJldHVybiAiSW5kZXhBc3NpZ246ICRyZWNlaXZlclskaW5kZXhdID0gJHZhbHVlIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEludGVyY2VwdG9yKEhJbnRlcmNlcHRvciBub2RlKSB7CiAgICBTdHJpbmcgdmFsdWUgPSB0ZW1wb3JhcnlJZChub2RlLmlucHV0c1swXSk7CiAgICBpZiAobm9kZS5pbnRlcmNlcHRlZENsYXNzZXMgIT0gbnVsbCkgewogICAgICBTdHJpbmcgY2xzID0gc3VmZml4Rm9yR2V0SW50ZXJjZXB0b3IoY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMsCiAgICAgICAgICBjbG9zZWRXb3JsZC5uYXRpdmVEYXRhLCBub2RlLmludGVyY2VwdGVkQ2xhc3Nlcyk7CiAgICAgIHJldHVybiAiSW50ZXJjZXB0b3IgKCR7Y2xzfSk6ICR2YWx1ZSI7CiAgICB9CiAgICByZXR1cm4gIkludGVyY2VwdG9yOiAkdmFsdWUiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0SW52b2tlQ2xvc3VyZShISW52b2tlQ2xvc3VyZSBub2RlKSA9PgogICAgICBoYW5kbGVJbnZva2VEeW5hbWljKG5vZGUsICJJbnZva2VDbG9zdXJlIik7CgogIFN0cmluZyBoYW5kbGVJbnZva2VEeW5hbWljKEhJbnZva2VEeW5hbWljIGludm9rZSwgU3RyaW5nIGtpbmQpIHsKICAgIFN0cmluZyByZWNlaXZlciA9IHRlbXBvcmFyeUlkKGludm9rZS5yZWNlaXZlcik7CiAgICBTdHJpbmcgbmFtZSA9IGludm9rZS5zZWxlY3Rvci5uYW1lOwogICAgU3RyaW5nIHRhcmdldCA9ICIkcmVjZWl2ZXIuJG5hbWUiOwogICAgaW50IG9mZnNldCA9IEhJbnZva2UuQVJHVU1FTlRTX09GRlNFVDsKICAgIExpc3QgYXJndW1lbnRzID0gaW52b2tlLmlucHV0cy5zdWJsaXN0KG9mZnNldCk7CiAgICByZXR1cm4gaGFuZGxlR2VuZXJpY0ludm9rZShraW5kLCB0YXJnZXQsIGFyZ3VtZW50cykgKwogICAgICAgICIoJHtpbnZva2UucmVjZWl2ZXJUeXBlfSkiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0SW52b2tlRHluYW1pY01ldGhvZChISW52b2tlRHluYW1pY01ldGhvZCBub2RlKSA9PgogICAgICBoYW5kbGVJbnZva2VEeW5hbWljKG5vZGUsICJJbnZva2VEeW5hbWljTWV0aG9kIik7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0SW52b2tlRHluYW1pY0dldHRlcihISW52b2tlRHluYW1pY0dldHRlciBub2RlKSA9PgogICAgICBoYW5kbGVJbnZva2VEeW5hbWljKG5vZGUsICJJbnZva2VEeW5hbWljR2V0dGVyIik7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0SW52b2tlRHluYW1pY1NldHRlcihISW52b2tlRHluYW1pY1NldHRlciBub2RlKSA9PgogICAgICBoYW5kbGVJbnZva2VEeW5hbWljKG5vZGUsICJJbnZva2VEeW5hbWljU2V0dGVyIik7CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEludm9rZVN0YXRpYyhISW52b2tlU3RhdGljIGludm9rZSkgewogICAgU3RyaW5nIHRhcmdldCA9IGludm9rZS5lbGVtZW50Lm5hbWU7CiAgICByZXR1cm4gaGFuZGxlR2VuZXJpY0ludm9rZSgiSW52b2tlU3RhdGljIiwgdGFyZ2V0LCBpbnZva2UuaW5wdXRzKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEludm9rZVN1cGVyKEhJbnZva2VTdXBlciBpbnZva2UpIHsKICAgIFN0cmluZyB0YXJnZXQgPSBpbnZva2UuZWxlbWVudC5uYW1lOwogICAgcmV0dXJuIGhhbmRsZUdlbmVyaWNJbnZva2UoIkludm9rZVN1cGVyIiwgdGFyZ2V0LCBpbnZva2UuaW5wdXRzKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEludm9rZUNvbnN0cnVjdG9yQm9keShISW52b2tlQ29uc3RydWN0b3JCb2R5IGludm9rZSkgewogICAgU3RyaW5nIHRhcmdldCA9IGludm9rZS5lbGVtZW50Lm5hbWU7CiAgICByZXR1cm4gaGFuZGxlR2VuZXJpY0ludm9rZSgiSW52b2tlQ29uc3RydWN0b3JCb2R5IiwgdGFyZ2V0LCBpbnZva2UuaW5wdXRzKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEludm9rZUdlbmVyYXRvckJvZHkoSEludm9rZUdlbmVyYXRvckJvZHkgaW52b2tlKSB7CiAgICBTdHJpbmcgdGFyZ2V0ID0gaW52b2tlLmVsZW1lbnQubmFtZTsKICAgIHJldHVybiBoYW5kbGVHZW5lcmljSW52b2tlKCJJbnZva2VHZW5lcmF0b3JCb2R5IiwgdGFyZ2V0LCBpbnZva2UuaW5wdXRzKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEZvcmVpZ25Db2RlKEhGb3JlaWduQ29kZSBub2RlKSB7CiAgICB2YXIgdGVtcGxhdGUgPSBub2RlLmNvZGVUZW1wbGF0ZTsKICAgIFN0cmluZyBjb2RlID0gJyR7dGVtcGxhdGUuYXN0fSc7CiAgICB2YXIgaW5wdXRzID0gbm9kZS5pbnB1dHMubWFwKHRlbXBvcmFyeUlkKS5qb2luKCcsICcpOwogICAgcmV0dXJuICJGb3JlaWduQ29kZTogJGNvZGUgKCRpbnB1dHMpIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdExlc3MoSExlc3Mgbm9kZSkgPT4gaGFuZGxlSW52b2tlQmluYXJ5KG5vZGUsICdMZXNzJyk7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0TGVzc0VxdWFsKEhMZXNzRXF1YWwgbm9kZSkgPT4KICAgICAgaGFuZGxlSW52b2tlQmluYXJ5KG5vZGUsICdMZXNzRXF1YWwnKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0TGl0ZXJhbExpc3QoSExpdGVyYWxMaXN0IG5vZGUpIHsKICAgIFN0cmluZ0J1ZmZlciBlbGVtZW50c1N0cmluZyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZS5pbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGkgIT0gMCkgZWxlbWVudHNTdHJpbmcud3JpdGUoIiwgIik7CiAgICAgIGVsZW1lbnRzU3RyaW5nLndyaXRlKHRlbXBvcmFyeUlkKG5vZGUuaW5wdXRzW2ldKSk7CiAgICB9CiAgICByZXR1cm4gIkxpdGVyYWxMaXN0OiBbJGVsZW1lbnRzU3RyaW5nXSI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRMb29wQnJhbmNoKEhMb29wQnJhbmNoIGJyYW5jaCkgewogICAgSEJhc2ljQmxvY2sgYm9keUJsb2NrID0gY3VycmVudEJsb2NrLnN1Y2Nlc3NvcnNbMF07CiAgICBIQmFzaWNCbG9jayBleGl0QmxvY2sgPSBjdXJyZW50QmxvY2suc3VjY2Vzc29yc1sxXTsKICAgIFN0cmluZyBjb25kaXRpb25JZCA9IHRlbXBvcmFyeUlkKGJyYW5jaC5pbnB1dHNbMF0pOwogICAgcmV0dXJuICJMb29wQnJhbmNoICgkY29uZGl0aW9uSWQpOiAoQiR7Ym9keUJsb2NrLmlkfSkgdGhlbiAoQiR7ZXhpdEJsb2NrLmlkfSkiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0TXVsdGlwbHkoSE11bHRpcGx5IG5vZGUpID0+IGhhbmRsZUludm9rZUJpbmFyeShub2RlLCAnTXVsdGlwbHknKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0TmVnYXRlKEhOZWdhdGUgbm9kZSkgewogICAgU3RyaW5nIG9wZXJhbmQgPSB0ZW1wb3JhcnlJZChub2RlLm9wZXJhbmQpOwogICAgcmV0dXJuICJOZWdhdGU6ICRvcGVyYW5kIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdE5vdChITm90IG5vZGUpID0+ICJOb3Q6ICR7dGVtcG9yYXJ5SWQobm9kZS5pbnB1dHNbMF0pfSI7CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFBhcmFtZXRlclZhbHVlKEhQYXJhbWV0ZXJWYWx1ZSBub2RlKSB7CiAgICByZXR1cm4gIlBhcmFtZXRlclZhbHVlOiAke25vZGUuc291cmNlRWxlbWVudC5uYW1lfSI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRMb2NhbFZhbHVlKEhMb2NhbFZhbHVlIG5vZGUpIHsKICAgIHJldHVybiAiTG9jYWxWYWx1ZTogJHtub2RlLnNvdXJjZUVsZW1lbnQubmFtZX0iOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0UGhpKEhQaGkgcGhpKSB7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgYnVmZmVyLndyaXRlKCJQaGk6ICIpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwaGkuaW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChpID4gMCkgYnVmZmVyLndyaXRlKCIsICIpOwogICAgICBidWZmZXIud3JpdGUodGVtcG9yYXJ5SWQocGhpLmlucHV0c1tpXSkpOwogICAgfQogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0UmVmKEhSZWYgbm9kZSkgewogICAgcmV0dXJuICdSZWY6ICR7dGVtcG9yYXJ5SWQobm9kZS52YWx1ZSl9JzsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFJldHVybihIUmV0dXJuIG5vZGUpID0+ICJSZXR1cm46ICR7dGVtcG9yYXJ5SWQobm9kZS5pbnB1dHNbMF0pfSI7CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFNoaWZ0TGVmdChIU2hpZnRMZWZ0IG5vZGUpID0+CiAgICAgIGhhbmRsZUludm9rZUJpbmFyeShub2RlLCAnU2hpZnRMZWZ0Jyk7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0U2hpZnRSaWdodChIU2hpZnRSaWdodCBub2RlKSA9PgogICAgICBoYW5kbGVJbnZva2VCaW5hcnkobm9kZSwgJ1NoaWZ0UmlnaHQnKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0U3RhdGljKEhTdGF0aWMgbm9kZSkgPT4gIlN0YXRpYzogJHtub2RlLmVsZW1lbnQubmFtZX0iOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRMYXp5U3RhdGljKEhMYXp5U3RhdGljIG5vZGUpID0+CiAgICAgICJMYXp5U3RhdGljOiAke25vZGUuZWxlbWVudC5uYW1lfSI7CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdE9uZVNob3RJbnRlcmNlcHRvcihIT25lU2hvdEludGVyY2VwdG9yIG5vZGUpID0+CiAgICAgIGhhbmRsZUludm9rZUR5bmFtaWMobm9kZSwgIk9uZVNob3RJbnRlcmNlcHRvciIpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRTdGF0aWNTdG9yZShIU3RhdGljU3RvcmUgbm9kZSkgewogICAgU3RyaW5nIGxocyA9IG5vZGUuZWxlbWVudC5uYW1lOwogICAgcmV0dXJuICJTdGF0aWNTdG9yZTogJGxocyA9ICR7dGVtcG9yYXJ5SWQobm9kZS5pbnB1dHNbMF0pfSI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRTdHJpbmdDb25jYXQoSFN0cmluZ0NvbmNhdCBub2RlKSB7CiAgICB2YXIgbGVmdElkID0gdGVtcG9yYXJ5SWQobm9kZS5sZWZ0KTsKICAgIHZhciByaWdodElkID0gdGVtcG9yYXJ5SWQobm9kZS5yaWdodCk7CiAgICByZXR1cm4gIlN0cmluZ0NvbmNhdDogJGxlZnRJZCArICRyaWdodElkIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFN0cmluZ2lmeShIU3RyaW5naWZ5IG5vZGUpIHsKICAgIHJldHVybiAiU3RyaW5naWZ5OiAke3RlbXBvcmFyeUlkKG5vZGUuaW5wdXRzWzBdKX0iOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0U3VidHJhY3QoSFN1YnRyYWN0IG5vZGUpID0+IGhhbmRsZUludm9rZUJpbmFyeShub2RlLCAnU3VidHJhY3QnKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0U3dpdGNoKEhTd2l0Y2ggbm9kZSkgewogICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGJ1Zi53cml0ZSgiU3dpdGNoOiAoIik7CiAgICBidWYud3JpdGUodGVtcG9yYXJ5SWQobm9kZS5pbnB1dHNbMF0pKTsKICAgIGJ1Zi53cml0ZSgiKSAiKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbm9kZS5pbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgYnVmLndyaXRlKHRlbXBvcmFyeUlkKG5vZGUuaW5wdXRzW2ldKSk7CiAgICAgIGJ1Zi53cml0ZSgiOiBCIik7CiAgICAgIGJ1Zi53cml0ZShub2RlLmJsb2NrLnN1Y2Nlc3NvcnNbaSAtIDFdLmlkKTsKICAgICAgYnVmLndyaXRlKCIsICIpOwogICAgfQogICAgYnVmLndyaXRlKCJkZWZhdWx0OiBCIik7CiAgICBidWYud3JpdGUobm9kZS5kZWZhdWx0VGFyZ2V0LmlkKTsKICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFRoaXMoSFRoaXMgbm9kZSkgPT4gIlRoaXMiOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRUaHJvdyhIVGhyb3cgbm9kZSkgPT4gIlRocm93OiAke3RlbXBvcmFyeUlkKG5vZGUuaW5wdXRzWzBdKX0iOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRUaHJvd0V4cHJlc3Npb24oSFRocm93RXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gIlRocm93RXhwcmVzc2lvbjogJHt0ZW1wb3JhcnlJZChub2RlLmlucHV0c1swXSl9IjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFRydW5jYXRpbmdEaXZpZGUoSFRydW5jYXRpbmdEaXZpZGUgbm9kZSkgewogICAgcmV0dXJuIGhhbmRsZUludm9rZUJpbmFyeShub2RlLCAnVHJ1bmNhdGluZ0RpdmlkZScpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0UmVtYWluZGVyKEhSZW1haW5kZXIgbm9kZSkgewogICAgcmV0dXJuIGhhbmRsZUludm9rZUJpbmFyeShub2RlLCAnUmVtYWluZGVyJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRFeGl0VHJ5KEhFeGl0VHJ5IG5vZGUpIHsKICAgIHJldHVybiAiRXhpdFRyeSI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRUcnkoSFRyeSBub2RlKSB7CiAgICBMaXN0PEhCYXNpY0Jsb2NrPiBzdWNjZXNzb3JzID0gY3VycmVudEJsb2NrLnN1Y2Nlc3NvcnM7CiAgICBTdHJpbmcgdHJ5QmxvY2sgPSAnQiR7c3VjY2Vzc29yc1swXS5pZH0nOwogICAgU3RyaW5nIGNhdGNoQmxvY2sgPSAnbm9uZSc7CiAgICBpZiAobm9kZS5jYXRjaEJsb2NrICE9IG51bGwpIHsKICAgICAgY2F0Y2hCbG9jayA9ICdCJHtzdWNjZXNzb3JzWzFdLmlkfSc7CiAgICB9CgogICAgU3RyaW5nIGZpbmFsbHlCbG9jayA9ICdub25lJzsKICAgIGlmIChub2RlLmZpbmFsbHlCbG9jayAhPSBudWxsKSB7CiAgICAgIGZpbmFsbHlCbG9jayA9ICdCJHtub2RlLmZpbmFsbHlCbG9jay5pZH0nOwogICAgfQoKICAgIHJldHVybiAiVHJ5OiAkdHJ5QmxvY2ssIENhdGNoOiAkY2F0Y2hCbG9jaywgRmluYWxseTogJGZpbmFsbHlCbG9jaywgIgogICAgICAgICJKb2luOiBCJHtzdWNjZXNzb3JzLmxhc3QuaWR9IjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdElzKEhJcyBub2RlKSB7CiAgICBTdHJpbmcgdHlwZSA9IG5vZGUudHlwZUV4cHJlc3Npb24udG9TdHJpbmcoKTsKICAgIHJldHVybiAiSXM6ICR7dGVtcG9yYXJ5SWQobm9kZS5leHByZXNzaW9uKX0gaXMgJHR5cGUiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0SXNWaWFJbnRlcmNlcHRvcihISXNWaWFJbnRlcmNlcHRvciBub2RlKSB7CiAgICBTdHJpbmcgdHlwZSA9IG5vZGUudHlwZUV4cHJlc3Npb24udG9TdHJpbmcoKTsKICAgIHJldHVybiAiSXNWaWFJbnRlcmNlcHRvcjogJHt0ZW1wb3JhcnlJZChub2RlLmlucHV0c1swXSl9IGlzICR0eXBlIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFR5cGVDb252ZXJzaW9uKEhUeXBlQ29udmVyc2lvbiBub2RlKSB7CiAgICBTdHJpbmcgY2hlY2tlZElucHV0ID0gdGVtcG9yYXJ5SWQobm9kZS5jaGVja2VkSW5wdXQpOwogICAgU3RyaW5nIHJlc3Q7CiAgICBpZiAobm9kZS5pbnB1dHMubGVuZ3RoID09IDIpIHsKICAgICAgcmVzdCA9ICIgJHt0ZW1wb3JhcnlJZChub2RlLmlucHV0cy5sYXN0KX0iOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KG5vZGUuaW5wdXRzLmxlbmd0aCA9PSAxKTsKICAgICAgcmVzdCA9ICIiOwogICAgfQogICAgU3RyaW5nIGtpbmQgPSBfdHlwZUNvbnZlcnNpb25LaW5kKG5vZGUpOwogICAgcmV0dXJuICJUeXBlQ29udmVyc2lvbjogJGtpbmQgJGNoZWNrZWRJbnB1dCB0byAke25vZGUuaW5zdHJ1Y3Rpb25UeXBlfSRyZXN0IjsKICB9CgogIFN0cmluZyBfdHlwZUNvbnZlcnNpb25LaW5kKEhUeXBlQ29udmVyc2lvbiBub2RlKSB7CiAgICBpZiAobm9kZS5pc1R5cGVDaGVjaykgcmV0dXJuICdUWVBFX0NIRUNLJzsKICAgIGlmIChub2RlLmlzQ2FzdENoZWNrKSByZXR1cm4gJ0NBU1RfQ0hFQ0snOwogICAgcmV0dXJuICc/JzsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFByaW1pdGl2ZUNoZWNrKEhQcmltaXRpdmVDaGVjayBub2RlKSB7CiAgICBTdHJpbmcgY2hlY2tlZElucHV0ID0gdGVtcG9yYXJ5SWQobm9kZS5jaGVja2VkSW5wdXQpOwogICAgYXNzZXJ0KG5vZGUuaW5wdXRzLmxlbmd0aCA9PSAxKTsKICAgIFN0cmluZyBraW5kID0gX3ByaW1pdGl2ZUNoZWNrS2luZChub2RlKTsKICAgIHJldHVybiAiUHJpbWl0aXZlQ2hlY2s6ICRraW5kICRjaGVja2VkSW5wdXQgdG8gJHtub2RlLmluc3RydWN0aW9uVHlwZX0iOwogIH0KCiAgU3RyaW5nIF9wcmltaXRpdmVDaGVja0tpbmQoSFByaW1pdGl2ZUNoZWNrIG5vZGUpIHsKICAgIGlmIChub2RlLmlzUmVjZWl2ZXJUeXBlQ2hlY2spIHJldHVybiAnUkVDRUlWRVInOwogICAgaWYgKG5vZGUuaXNBcmd1bWVudFR5cGVDaGVjaykgcmV0dXJuICdBUkdVTUVOVCc7CiAgICByZXR1cm4gJz8nOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0Qm9vbENvbnZlcnNpb24oSEJvb2xDb252ZXJzaW9uIG5vZGUpIHsKICAgIFN0cmluZyBjaGVja2VkSW5wdXQgPSB0ZW1wb3JhcnlJZChub2RlLmNoZWNrZWRJbnB1dCk7CiAgICByZXR1cm4gIkJvb2xDb252ZXJzaW9uOiAkY2hlY2tlZElucHV0IjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFR5cGVLbm93bihIVHlwZUtub3duIG5vZGUpIHsKICAgIGFzc2VydChub2RlLmlucHV0cy5sZW5ndGggPD0gMik7CiAgICBTdHJpbmcgcmVzdWx0ID0KICAgICAgICAiVHlwZUtub3duOiAke3RlbXBvcmFyeUlkKG5vZGUuY2hlY2tlZElucHV0KX0gaXMgJHtub2RlLmtub3duVHlwZX0iOwogICAgaWYgKG5vZGUud2l0bmVzcyAhPSBudWxsKSB7CiAgICAgIHJlc3VsdCArPSAiIHdpdG5lc3NlZCBieSAke3RlbXBvcmFyeUlkKG5vZGUud2l0bmVzcyl9IjsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRSYW5nZUNvbnZlcnNpb24oSFJhbmdlQ29udmVyc2lvbiBub2RlKSB7CiAgICByZXR1cm4gIlJhbmdlQ29udmVyc2lvbjogJHtub2RlLmNoZWNrZWRJbnB1dH0iOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0VHlwZUluZm9SZWFkUmF3KEhUeXBlSW5mb1JlYWRSYXcgbm9kZSkgewogICAgdmFyIGlucHV0cyA9IG5vZGUuaW5wdXRzLm1hcCh0ZW1wb3JhcnlJZCkuam9pbignLCAnKTsKICAgIHJldHVybiAiVHlwZUluZm9SZWFkUmF3OiAkaW5wdXRzIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFR5cGVJbmZvUmVhZFZhcmlhYmxlKEhUeXBlSW5mb1JlYWRWYXJpYWJsZSBub2RlKSB7CiAgICB2YXIgaW5wdXRzID0gbm9kZS5pbnB1dHMubWFwKHRlbXBvcmFyeUlkKS5qb2luKCcsICcpOwogICAgcmV0dXJuICJUeXBlSW5mb1JlYWRWYXJpYWJsZTogJHtub2RlLnZhcmlhYmxlfSAgJGlucHV0cyI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRUeXBlSW5mb0V4cHJlc3Npb24oSFR5cGVJbmZvRXhwcmVzc2lvbiBub2RlKSB7CiAgICB2YXIgaW5wdXRzID0gbm9kZS5pbnB1dHMubWFwKHRlbXBvcmFyeUlkKS5qb2luKCcsICcpOwogICAgcmV0dXJuICJUeXBlSW5mb0V4cHJlc3Npb246ICR7bm9kZS5raW5kQXNTdHJpbmd9ICR7bm9kZS5kYXJ0VHlwZX0iCiAgICAgICAgIiAoJGlucHV0cykiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0QXdhaXQoSEF3YWl0IG5vZGUpIHsKICAgIHJldHVybiAiQXdhaXQ6ICR7dGVtcG9yYXJ5SWQobm9kZS5pbnB1dHNbMF0pfSI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRZaWVsZChIWWllbGQgbm9kZSkgewogICAgcmV0dXJuICJZaWVsZCR7bm9kZS5oYXNTdGFyID8gIioiIDogIiJ9OiAke3RlbXBvcmFyeUlkKG5vZGUuaW5wdXRzWzBdKX0iOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0SXNUZXN0KEhJc1Rlc3Qgbm9kZSkgewogICAgdmFyIGlucHV0cyA9IG5vZGUuaW5wdXRzLm1hcCh0ZW1wb3JhcnlJZCkuam9pbignLCAnKTsKICAgIHJldHVybiAiSXNUZXN0OiAkaW5wdXRzIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEFzQ2hlY2soSEFzQ2hlY2sgbm9kZSkgewogICAgdmFyIGlucHV0cyA9IG5vZGUuaW5wdXRzLm1hcCh0ZW1wb3JhcnlJZCkuam9pbignLCAnKTsKICAgIFN0cmluZyBlcnJvciA9IG5vZGUuaXNUeXBlRXJyb3IgPyAnVHlwZUVycm9yJyA6ICdDYXN0RXJyb3InOwogICAgcmV0dXJuICJBc0NoZWNrOiAkZXJyb3IgJGlucHV0cyI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRBc0NoZWNrU2ltcGxlKEhBc0NoZWNrU2ltcGxlIG5vZGUpIHsKICAgIHZhciBpbnB1dHMgPSBub2RlLmlucHV0cy5tYXAodGVtcG9yYXJ5SWQpLmpvaW4oJywgJyk7CiAgICBTdHJpbmcgZXJyb3IgPSBub2RlLmlzVHlwZUVycm9yID8gJ1R5cGVFcnJvcicgOiAnQ2FzdEVycm9yJzsKICAgIHJldHVybiAiQXNDaGVja1NpbXBsZTogJGVycm9yICR7bm9kZS5kYXJ0VHlwZX0gJGlucHV0cyI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRTdWJ0eXBlQ2hlY2soSFN1YnR5cGVDaGVjayBub2RlKSB7CiAgICB2YXIgaW5wdXRzID0gbm9kZS5pbnB1dHMubWFwKHRlbXBvcmFyeUlkKS5qb2luKCcsICcpOwogICAgcmV0dXJuICJTdWJ0eXBlQ2hlY2s6ICRpbnB1dHMiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0TG9hZFR5cGUoSExvYWRUeXBlIG5vZGUpIHsKICAgIHZhciBpbnB1dHMgPSBub2RlLmlucHV0cy5tYXAodGVtcG9yYXJ5SWQpLmpvaW4oJywgJyk7CiAgICByZXR1cm4gIkxvYWRUeXBlOiAke25vZGUudHlwZUV4cHJlc3Npb259ICAkaW5wdXRzIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEluc3RhbmNlRW52aXJvbm1lbnQoSEluc3RhbmNlRW52aXJvbm1lbnQgbm9kZSkgewogICAgdmFyIGlucHV0cyA9IG5vZGUuaW5wdXRzLm1hcCh0ZW1wb3JhcnlJZCkuam9pbignLCAnKTsKICAgIHJldHVybiAiSW5zdGFuY2VFbnZpcm9ubWVudDogJGlucHV0cyI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRUeXBlRXZhbChIVHlwZUV2YWwgbm9kZSkgewogICAgdmFyIGlucHV0cyA9IG5vZGUuaW5wdXRzLm1hcCh0ZW1wb3JhcnlJZCkuam9pbignLCAnKTsKICAgIHJldHVybiAiVHlwZUV2YWw6ICR7bm9kZS50eXBlRXhwcmVzc2lvbn0gICR7bm9kZS5lbnZTdHJ1Y3R1cmV9ICAkaW5wdXRzIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFR5cGVCaW5kKEhUeXBlQmluZCBub2RlKSB7CiAgICB2YXIgaW5wdXRzID0gbm9kZS5pbnB1dHMubWFwKHRlbXBvcmFyeUlkKS5qb2luKCcsICcpOwogICAgcmV0dXJuICJUeXBlQmluZDogJGlucHV0cyI7CiAgfQp9CoLYAE5OPAEUATI4MUAZKhUBNz8SNiIMGwEqAS8XFCMhCAQBLCYqDRMbPCYIEQYEASokKA0TGTgkCBEGBAEYRDAdKhMsTVATQUFRBgQBDCwqOR4WLSUjHhwnIyU+CBkbJCsjOTg6RiMONg4MChYyLQoIBAIBPCIiAUABMicBTgExE0UUGy0dFBsxHRQbLB0UGy4dFE0UThQbNB0UTxRPFE4UThQkMh4UDRQGJwQBDCs4BAFBKiwkBAEMHzAcBAEMQQEMSgEMJTAfBAEMRwEMSgEMLzAuQAQBDCM1Hj8GJQQBDFABDCk1HkIGKAQBDCVPBAEMKz4EAQxKAQwqAQwpHEIGKkEEAQwpLipNBAEMNyo0GxswRh87DTsGBAEMKzcEAQwpKz4EAQwpLitKBAEMITUkBAEMTQwxNQQBDFABDB04ODZMBAEeTjcxLzgGOwQBDCMyLCcEAQwvMiwsNgQBDC8wK0c8LQYiBAEMNDIBQzQoJys0OiQEAQxAOAxAOAxAOAEMMylHBAEMMSlGBAEMRSlQBAEMQSlOBAEMLyYlOisEAQxEDCwtAQwvNjMuOQYtBAEMLzg4OFQEAQxQAQwlMB8EAQxHAQw1OQQBDC01BAEMHi4bMiUwBh4EAQwfLgQBDFABDCwtDC4uAQxGAQwuKgEMPjcBDC8kQQQBDDEpKy8EAQwrOAQBDFABDCUrHCwVMy4YMhcGHSYbBAEMKgEMTQEMNz4EAQw5OQQBDCsyBAEMJxYEAQwfPC4gIysGASIlMQYBSigEAQwdMjsEAQw5MkgEAQw1OhEjMg0nEQYtUgQBNS8vEAQBDDU6JS1NBAE1NTUQBAEMNTosBAEMKyUUTSA+BhMEAQw3NAQBDDc6JwQBDEE6PgQBDD06RxYEAQwjNAQBDCNOBAEMJToeBAEMJzpBJgQBDDM6QT0EAQwxOiQEAQwpOjgEAQw/OisEAQwpOk4EAQwpOiAEAgEocGFja2FnZTpjb21waWxlci9zcmMvc3NhL3NzYV90cmFjZXIuZGFydENzZGtyb290Oi9zZGsvbGliL19pbnRlcm5hbC9qc19ydW50aW1lL2xpYi9zaGFyZWQvcmVjaXBlX3N5bnRheC5kYXJ0pNQvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIENvbnN0YW50cyBhbmQgcHJlZGljYXRlcyB1c2VkIGZvciBlbmNvZGluZyBhbmQgZGVjb2RpbmcgdHlwZSByZWNpcGVzLgovLy8KLy8vIFRoaXMgbGlicmFyeSBpcyBzaGFyZWQgYmV0d2VlbiB0aGUgY29tcGlsZXIgYW5kIHRoZSBydW50aW1lIHN5c3RlbS4KbGlicmFyeSBkYXJ0MmpzLl9yZWNpcGVfc3ludGF4OwoKYWJzdHJhY3QgY2xhc3MgUmVjaXBlIHsKICBSZWNpcGUuXygpOwoKICAvLyBPcGVyYXRvcnMuCgogIHN0YXRpYyBjb25zdCBpbnQgc2VwYXJhdG9yID0gX2NvbW1hOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgc2VwYXJhdG9yU3RyaW5nID0gX2NvbW1hU3RyaW5nOwoKICBzdGF0aWMgY29uc3QgaW50IHRvVHlwZSA9IF9zZW1pY29sb247CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0b1R5cGVTdHJpbmcgPSBfc2VtaWNvbG9uU3RyaW5nOwoKICBzdGF0aWMgY29uc3QgaW50IHB1c2hEeW5hbWljID0gX2F0OwogIHN0YXRpYyBjb25zdCBTdHJpbmcgcHVzaER5bmFtaWNTdHJpbmcgPSBfYXRTdHJpbmc7CiAgc3RhdGljIGNvbnN0IGludCBwdXNoVm9pZCA9IF90aWxkZTsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHB1c2hWb2lkU3RyaW5nID0gX3RpbGRlU3RyaW5nOwoKICBzdGF0aWMgY29uc3QgaW50IHdyYXBTdGFyID0gX2FzdGVyaXNrOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgd3JhcFN0YXJTdHJpbmcgPSBfYXN0ZXJpc2tTdHJpbmc7CiAgc3RhdGljIGNvbnN0IGludCB3cmFwUXVlc3Rpb24gPSBfcXVlc3Rpb247CiAgc3RhdGljIGNvbnN0IFN0cmluZyB3cmFwUXVlc3Rpb25TdHJpbmcgPSBfcXVlc3Rpb25TdHJpbmc7CiAgc3RhdGljIGNvbnN0IGludCB3cmFwRnV0dXJlT3IgPSBfc2xhc2g7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB3cmFwRnV0dXJlT3JTdHJpbmcgPSBfc2xhc2hTdHJpbmc7CgogIHN0YXRpYyBjb25zdCBpbnQgc3RhcnRUeXBlQXJndW1lbnRzID0gX2xlc3NUaGFuOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgc3RhcnRUeXBlQXJndW1lbnRzU3RyaW5nID0gX2xlc3NUaGFuU3RyaW5nOwogIHN0YXRpYyBjb25zdCBpbnQgZW5kVHlwZUFyZ3VtZW50cyA9IF9ncmVhdGVyVGhhbjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGVuZFR5cGVBcmd1bWVudHNTdHJpbmcgPSBfZ3JlYXRlclRoYW5TdHJpbmc7CgogIHN0YXRpYyBjb25zdCBpbnQgc3RhcnRGdW5jdGlvbkFyZ3VtZW50cyA9IF9sZWZ0UGFyZW47CiAgc3RhdGljIGNvbnN0IFN0cmluZyBzdGFydEZ1bmN0aW9uQXJndW1lbnRzU3RyaW5nID0gX2xlZnRQYXJlblN0cmluZzsKICBzdGF0aWMgY29uc3QgaW50IGVuZEZ1bmN0aW9uQXJndW1lbnRzID0gX3JpZ2h0UGFyZW47CiAgc3RhdGljIGNvbnN0IFN0cmluZyBlbmRGdW5jdGlvbkFyZ3VtZW50c1N0cmluZyA9IF9yaWdodFBhcmVuU3RyaW5nOwogIHN0YXRpYyBjb25zdCBpbnQgc3RhcnRPcHRpb25hbEdyb3VwID0gX2xlZnRCcmFja2V0OwogIHN0YXRpYyBjb25zdCBTdHJpbmcgc3RhcnRPcHRpb25hbEdyb3VwU3RyaW5nID0gX2xlZnRCcmFja2V0U3RyaW5nOwogIHN0YXRpYyBjb25zdCBpbnQgZW5kT3B0aW9uYWxHcm91cCA9IF9yaWdodEJyYWNrZXQ7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBlbmRPcHRpb25hbEdyb3VwU3RyaW5nID0gX3JpZ2h0QnJhY2tldFN0cmluZzsKICBzdGF0aWMgY29uc3QgaW50IHN0YXJ0TmFtZWRHcm91cCA9IF9sZWZ0QnJhY2U7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBzdGFydE5hbWVkR3JvdXBTdHJpbmcgPSBfbGVmdEJyYWNlU3RyaW5nOwogIHN0YXRpYyBjb25zdCBpbnQgZW5kTmFtZWRHcm91cCA9IF9yaWdodEJyYWNlOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgZW5kTmFtZWRHcm91cFN0cmluZyA9IF9yaWdodEJyYWNlU3RyaW5nOwogIHN0YXRpYyBjb25zdCBpbnQgbmFtZVNlcGFyYXRvciA9IF9jb2xvbjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIG5hbWVTZXBhcmF0b3JTdHJpbmcgPSBfY29sb25TdHJpbmc7CgogIHN0YXRpYyBjb25zdCBpbnQgZ2VuZXJpY0Z1bmN0aW9uVHlwZVBhcmFtZXRlckluZGV4ID0gX2NpcmN1bWZsZXg7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBnZW5lcmljRnVuY3Rpb25UeXBlUGFyYW1ldGVySW5kZXhTdHJpbmcgPQogICAgICBfY2lyY3VtZmxleFN0cmluZzsKCiAgc3RhdGljIGNvbnN0IGludCBleHRlbnNpb25PcCA9IF9hbXBlcnNhbmQ7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBleHRlbnNpb25PcFN0cmluZyA9IF9hbXBlcnNhbmRTdHJpbmc7CiAgc3RhdGljIGNvbnN0IGludCBwdXNoTmV2ZXJFeHRlbnNpb24gPSAwOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgcHVzaE5ldmVyRXh0ZW5zaW9uU3RyaW5nID0gJyRwdXNoTmV2ZXJFeHRlbnNpb24nOwogIHN0YXRpYyBjb25zdCBpbnQgcHVzaEFueUV4dGVuc2lvbiA9IDE7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBwdXNoQW55RXh0ZW5zaW9uU3RyaW5nID0gJyRwdXNoQW55RXh0ZW5zaW9uJzsKCiAgLy8gTnVtYmVyIGFuZCBuYW1lIGNvbXBvbmVudHMuCgogIHN0YXRpYyBib29sIGlzRGlnaXQoaW50IGNvZGUpID0+IGNvZGUgPj0gX2RpZ2l0MCAmJiBjb2RlIDw9IF9kaWdpdDk7CiAgc3RhdGljIGludCBkaWdpdFZhbHVlKGludCBjb2RlKSA9PiBjb2RlIC0gX2RpZ2l0MDsKCiAgc3RhdGljIGJvb2wgaXNJZGVudGlmaWVyU3RhcnQoaW50IGNoKSA9PgogICAgICAoKChjaCB8IDMyKSAtIF9sb3dlcmNhc2VBKSAmIDB4ZmZmZikgPCAyNiB8fAogICAgICAoY2ggPT0gX3VuZGVyc2NvcmUpIHx8CiAgICAgIChjaCA9PSBfZG9sbGFyKTsKCiAgc3RhdGljIGNvbnN0IGludCBwZXJpb2QgPSBfcGVyaW9kOwoKICAvLyBQcml2YXRlIG5hbWVzLgoKICBzdGF0aWMgY29uc3QgaW50IF9mb3JtZmVlZCA9IDB4MEM7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfZm9ybWZlZWRTdHJpbmcgPSAnXGYnOwoKICBzdGF0aWMgY29uc3QgaW50IF9zcGFjZSA9IDB4MjA7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfc3BhY2VTdHJpbmcgPSAnICc7CiAgc3RhdGljIGNvbnN0IGludCBfZXhjbGFtYXRpb24gPSAweDIxOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX2V4Y2xhbWF0aW9uU3RyaW5nID0gJyEnOwogIHN0YXRpYyBjb25zdCBpbnQgX2hhc2ggPSAweDIzOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX2hhc2hTdHJpbmcgPSAnIyc7CiAgc3RhdGljIGNvbnN0IGludCBfZG9sbGFyID0gMHgyNDsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9kb2xsYXJTdHJpbmcgPSByJyQnOwogIHN0YXRpYyBjb25zdCBpbnQgX3BlcmNlbnQgPSAweDI1OwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX3BlcmNlbnRTdHJpbmcgPSAnJSc7CiAgc3RhdGljIGNvbnN0IGludCBfYW1wZXJzYW5kID0gMHgyNjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9hbXBlcnNhbmRTdHJpbmcgPSAnJic7CiAgc3RhdGljIGNvbnN0IGludCBfYXBvc3Ryb3BoZSA9IDB4Mjc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfYXBvc3Ryb3BoZVN0cmluZyA9ICInIjsKICBzdGF0aWMgY29uc3QgaW50IF9sZWZ0UGFyZW4gPSAweDI4OwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX2xlZnRQYXJlblN0cmluZyA9ICcoJzsKICBzdGF0aWMgY29uc3QgaW50IF9yaWdodFBhcmVuID0gMHgyOTsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9yaWdodFBhcmVuU3RyaW5nID0gJyknOwogIHN0YXRpYyBjb25zdCBpbnQgX2FzdGVyaXNrID0gMHgyQTsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9hc3Rlcmlza1N0cmluZyA9ICcqJzsKICBzdGF0aWMgY29uc3QgaW50IF9wbHVzID0gMHgyQjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9wbHVzU3RyaW5nID0gJysnOwogIHN0YXRpYyBjb25zdCBpbnQgX2NvbW1hID0gMHgyQzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9jb21tYVN0cmluZyA9ICcsJzsKICBzdGF0aWMgY29uc3QgaW50IF9taW51cyA9IDB4MkQ7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfbWludXNTdHJpbmcgPSAnLSc7CiAgc3RhdGljIGNvbnN0IGludCBfcGVyaW9kID0gMHgyRTsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9wZXJpb2RTdHJpbmcgPSAnLic7CiAgc3RhdGljIGNvbnN0IGludCBfc2xhc2ggPSAweDJGOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX3NsYXNoU3RyaW5nID0gJy8nOwoKICBzdGF0aWMgY29uc3QgaW50IF9kaWdpdDAgPSAweDMwOwogIHN0YXRpYyBjb25zdCBpbnQgX2RpZ2l0OSA9IDB4Mzk7CgogIHN0YXRpYyBjb25zdCBpbnQgX2NvbG9uID0gMHgzQTsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9jb2xvblN0cmluZyA9ICc6JzsKICBzdGF0aWMgY29uc3QgaW50IF9zZW1pY29sb24gPSAweDNCOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX3NlbWljb2xvblN0cmluZyA9ICc7JzsKICBzdGF0aWMgY29uc3QgaW50IF9sZXNzVGhhbiA9IDB4M0M7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfbGVzc1RoYW5TdHJpbmcgPSAnPCc7CiAgc3RhdGljIGNvbnN0IGludCBfZXF1YWxzID0gMHgzRDsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9lcXVhbHNTdHJpbmcgPSAnPSc7CiAgc3RhdGljIGNvbnN0IGludCBfZ3JlYXRlclRoYW4gPSAweDNFOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX2dyZWF0ZXJUaGFuU3RyaW5nID0gJz4nOwogIHN0YXRpYyBjb25zdCBpbnQgX3F1ZXN0aW9uID0gMHgzRjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9xdWVzdGlvblN0cmluZyA9ICc/JzsKICBzdGF0aWMgY29uc3QgaW50IF9hdCA9IDB4NDA7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfYXRTdHJpbmcgPSAnQCc7CgogIHN0YXRpYyBjb25zdCBpbnQgX3VwcGVyY2FzZUEgPSAweDQxOwogIHN0YXRpYyBjb25zdCBpbnQgX3VwcGVyY2FzZVogPSAweDVBOwoKICBzdGF0aWMgY29uc3QgaW50IF9sZWZ0QnJhY2tldCA9IDB4NUI7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfbGVmdEJyYWNrZXRTdHJpbmcgPSAnWyc7CiAgc3RhdGljIGNvbnN0IGludCBfYmFja3NsYXNoID0gMHg1QzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9iYWNrc2xhc2hTdHJpbmcgPSByJ1wnOwogIHN0YXRpYyBjb25zdCBpbnQgX3JpZ2h0QnJhY2tldCA9IDB4NUQ7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfcmlnaHRCcmFja2V0U3RyaW5nID0gJ10nOwogIHN0YXRpYyBjb25zdCBpbnQgX2NpcmN1bWZsZXggPSAweDVFOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX2NpcmN1bWZsZXhTdHJpbmcgPSAnXic7CiAgc3RhdGljIGNvbnN0IGludCBfdW5kZXJzY29yZSA9IDB4NUY7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfdW5kZXJzY29yZVN0cmluZyA9ICdfJzsKICBzdGF0aWMgY29uc3QgaW50IF9iYWNrdGljayA9IDB4NjA7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfYmFja3RpY2tTdHJpbmcgPSAnYCc7CgogIHN0YXRpYyBjb25zdCBpbnQgX2xvd2VyY2FzZUEgPSAweDYxOwogIHN0YXRpYyBjb25zdCBpbnQgX2xvd2VyY2FzZVogPSAweDdBOwoKICBzdGF0aWMgY29uc3QgaW50IF9sZWZ0QnJhY2UgPSAweDdCOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX2xlZnRCcmFjZVN0cmluZyA9ICd7JzsKICBzdGF0aWMgY29uc3QgaW50IF92ZXJ0aWNhbCA9IDB4N0M7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfdmVydGljYWxTdHJpbmcgPSAnfCc7CiAgc3RhdGljIGNvbnN0IGludCBfcmlnaHRCcmFjZSA9IDB4N0Q7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfcmlnaHRCcmFjZVN0cmluZyA9ICd9JzsKICBzdGF0aWMgY29uc3QgaW50IF90aWxkZSA9IDB4N0U7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfdGlsZGVTdHJpbmcgPSAnfic7CgogIHN0YXRpYyB2b2lkIHRlc3RFcXVpdmFsZW5jZSgpIHsKICAgIHZvaWQgdGVzdChTdHJpbmcgbGFiZWwsIGludCBjaGFyQ29kZSwgU3RyaW5nIHN0cikgewogICAgICBpZiAoU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkgIT0gc3RyKSB7CiAgICAgICAgdGhyb3cgU3RhdGVFcnJvcigiJGxhYmVsOiBTdHJpbmcuZnJvbUNoYXJDb2RlKCRjaGFyQ29kZSkgIT0gJHN0ciIpOwogICAgICB9CiAgICB9CgogICAgdm9pZCB0ZXN0RXh0ZW5zaW9uKFN0cmluZyBsYWJlbCwgaW50IG9wLCBTdHJpbmcgc3RyKSB7CiAgICAgIGlmICgnJG9wJyAhPSBzdHIpIHsKICAgICAgICB0aHJvdyBTdGF0ZUVycm9yKCIkbGFiZWw6ICRvcC50b1N0cmluZygpICE9ICRzdHIiKTsKICAgICAgfQogICAgfQoKICAgIHRlc3QoInNlcGFyYXRvciIsIHNlcGFyYXRvciwgc2VwYXJhdG9yU3RyaW5nKTsKICAgIHRlc3QoInRvVHlwZSIsIHRvVHlwZSwgdG9UeXBlU3RyaW5nKTsKICAgIHRlc3QoInB1c2hEeW5hbWljIiwgcHVzaER5bmFtaWMsIHB1c2hEeW5hbWljU3RyaW5nKTsKICAgIHRlc3QoInB1c2hWb2lkIiwgcHVzaFZvaWQsIHB1c2hWb2lkU3RyaW5nKTsKICAgIHRlc3QoIndyYXBTdGFyIiwgd3JhcFN0YXIsIHdyYXBTdGFyU3RyaW5nKTsKICAgIHRlc3QoIndyYXBRdWVzdGlvbiIsIHdyYXBRdWVzdGlvbiwgd3JhcFF1ZXN0aW9uU3RyaW5nKTsKICAgIHRlc3QoIndyYXBGdXR1cmVPciIsIHdyYXBGdXR1cmVPciwgd3JhcEZ1dHVyZU9yU3RyaW5nKTsKICAgIHRlc3QoInN0YXJ0VHlwZUFyZ3VtZW50cyIsIHN0YXJ0VHlwZUFyZ3VtZW50cywgc3RhcnRUeXBlQXJndW1lbnRzU3RyaW5nKTsKICAgIHRlc3QoImVuZFR5cGVBcmd1bWVudHMiLCBlbmRUeXBlQXJndW1lbnRzLCBlbmRUeXBlQXJndW1lbnRzU3RyaW5nKTsKICAgIHRlc3QoInN0YXJ0RnVuY3Rpb25Bcmd1bWVudHMiLCBzdGFydEZ1bmN0aW9uQXJndW1lbnRzLAogICAgICAgIHN0YXJ0RnVuY3Rpb25Bcmd1bWVudHNTdHJpbmcpOwogICAgdGVzdCgiZW5kRnVuY3Rpb25Bcmd1bWVudHMiLCBlbmRGdW5jdGlvbkFyZ3VtZW50cywKICAgICAgICBlbmRGdW5jdGlvbkFyZ3VtZW50c1N0cmluZyk7CiAgICB0ZXN0KCJzdGFydE9wdGlvbmFsR3JvdXAiLCBzdGFydE9wdGlvbmFsR3JvdXAsIHN0YXJ0T3B0aW9uYWxHcm91cFN0cmluZyk7CiAgICB0ZXN0KCJlbmRPcHRpb25hbEdyb3VwIiwgZW5kT3B0aW9uYWxHcm91cCwgZW5kT3B0aW9uYWxHcm91cFN0cmluZyk7CiAgICB0ZXN0KCJzdGFydE5hbWVkR3JvdXAiLCBzdGFydE5hbWVkR3JvdXAsIHN0YXJ0TmFtZWRHcm91cFN0cmluZyk7CiAgICB0ZXN0KCJlbmROYW1lZEdyb3VwIiwgZW5kTmFtZWRHcm91cCwgZW5kTmFtZWRHcm91cFN0cmluZyk7CiAgICB0ZXN0KCJuYW1lU2VwYXJhdG9yIiwgbmFtZVNlcGFyYXRvciwgbmFtZVNlcGFyYXRvclN0cmluZyk7CiAgICB0ZXN0KCJnZW5lcmljRnVuY3Rpb25UeXBlUGFyYW1ldGVySW5kZXgiLCBnZW5lcmljRnVuY3Rpb25UeXBlUGFyYW1ldGVySW5kZXgsCiAgICAgICAgZ2VuZXJpY0Z1bmN0aW9uVHlwZVBhcmFtZXRlckluZGV4U3RyaW5nKTsKICAgIHRlc3QoImV4dGVuc2lvbk9wIiwgZXh0ZW5zaW9uT3AsIGV4dGVuc2lvbk9wU3RyaW5nKTsKICAgIHRlc3RFeHRlbnNpb24oCiAgICAgICAgInB1c2hOZXZlckV4dGVuc2lvbiIsIHB1c2hOZXZlckV4dGVuc2lvbiwgcHVzaE5ldmVyRXh0ZW5zaW9uU3RyaW5nKTsKICAgIHRlc3RFeHRlbnNpb24oInB1c2hBbnlFeHRlbnNpb24iLCBwdXNoQW55RXh0ZW5zaW9uLCBwdXNoQW55RXh0ZW5zaW9uU3RyaW5nKTsKCiAgICB0ZXN0KCJfZm9ybWZlZWQiLCBfZm9ybWZlZWQsIF9mb3JtZmVlZFN0cmluZyk7CiAgICB0ZXN0KCJfc3BhY2UiLCBfc3BhY2UsIF9zcGFjZVN0cmluZyk7CiAgICB0ZXN0KCJfZXhjbGFtYXRpb24iLCBfZXhjbGFtYXRpb24sIF9leGNsYW1hdGlvblN0cmluZyk7CiAgICB0ZXN0KCJfaGFzaCIsIF9oYXNoLCBfaGFzaFN0cmluZyk7CiAgICB0ZXN0KCJfZG9sbGFyIiwgX2RvbGxhciwgX2RvbGxhclN0cmluZyk7CiAgICB0ZXN0KCJfcGVyY2VudCIsIF9wZXJjZW50LCBfcGVyY2VudFN0cmluZyk7CiAgICB0ZXN0KCJfYW1wZXJzYW5kIiwgX2FtcGVyc2FuZCwgX2FtcGVyc2FuZFN0cmluZyk7CiAgICB0ZXN0KCJfYXBvc3Ryb3BoZSIsIF9hcG9zdHJvcGhlLCBfYXBvc3Ryb3BoZVN0cmluZyk7CiAgICB0ZXN0KCJfbGVmdFBhcmVuIiwgX2xlZnRQYXJlbiwgX2xlZnRQYXJlblN0cmluZyk7CiAgICB0ZXN0KCJfcmlnaHRQYXJlbiIsIF9yaWdodFBhcmVuLCBfcmlnaHRQYXJlblN0cmluZyk7CiAgICB0ZXN0KCJfYXN0ZXJpc2siLCBfYXN0ZXJpc2ssIF9hc3Rlcmlza1N0cmluZyk7CiAgICB0ZXN0KCJfcGx1cyIsIF9wbHVzLCBfcGx1c1N0cmluZyk7CiAgICB0ZXN0KCJfY29tbWEiLCBfY29tbWEsIF9jb21tYVN0cmluZyk7CiAgICB0ZXN0KCJfbWludXMiLCBfbWludXMsIF9taW51c1N0cmluZyk7CiAgICB0ZXN0KCJfcGVyaW9kIiwgX3BlcmlvZCwgX3BlcmlvZFN0cmluZyk7CiAgICB0ZXN0KCJfc2xhc2giLCBfc2xhc2gsIF9zbGFzaFN0cmluZyk7CiAgICB0ZXN0KCJfY29sb24iLCBfY29sb24sIF9jb2xvblN0cmluZyk7CiAgICB0ZXN0KCJfc2VtaWNvbG9uIiwgX3NlbWljb2xvbiwgX3NlbWljb2xvblN0cmluZyk7CiAgICB0ZXN0KCJfbGVzc1RoYW4iLCBfbGVzc1RoYW4sIF9sZXNzVGhhblN0cmluZyk7CiAgICB0ZXN0KCJfZXF1YWxzIiwgX2VxdWFscywgX2VxdWFsc1N0cmluZyk7CiAgICB0ZXN0KCJfZ3JlYXRlclRoYW4iLCBfZ3JlYXRlclRoYW4sIF9ncmVhdGVyVGhhblN0cmluZyk7CiAgICB0ZXN0KCJfcXVlc3Rpb24iLCBfcXVlc3Rpb24sIF9xdWVzdGlvblN0cmluZyk7CiAgICB0ZXN0KCJfYXQiLCBfYXQsIF9hdFN0cmluZyk7CiAgICB0ZXN0KCJfbGVmdEJyYWNrZXQiLCBfbGVmdEJyYWNrZXQsIF9sZWZ0QnJhY2tldFN0cmluZyk7CiAgICB0ZXN0KCJfYmFja3NsYXNoIiwgX2JhY2tzbGFzaCwgX2JhY2tzbGFzaFN0cmluZyk7CiAgICB0ZXN0KCJfcmlnaHRCcmFja2V0IiwgX3JpZ2h0QnJhY2tldCwgX3JpZ2h0QnJhY2tldFN0cmluZyk7CiAgICB0ZXN0KCJfY2lyY3VtZmxleCIsIF9jaXJjdW1mbGV4LCBfY2lyY3VtZmxleFN0cmluZyk7CiAgICB0ZXN0KCJfdW5kZXJzY29yZSIsIF91bmRlcnNjb3JlLCBfdW5kZXJzY29yZVN0cmluZyk7CiAgICB0ZXN0KCJfYmFja3RpY2siLCBfYmFja3RpY2ssIF9iYWNrdGlja1N0cmluZyk7CiAgICB0ZXN0KCJfbGVmdEJyYWNlIiwgX2xlZnRCcmFjZSwgX2xlZnRCcmFjZVN0cmluZyk7CiAgICB0ZXN0KCJfdmVydGljYWwiLCBfdmVydGljYWwsIF92ZXJ0aWNhbFN0cmluZyk7CiAgICB0ZXN0KCJfcmlnaHRCcmFjZSIsIF9yaWdodEJyYWNlLCBfcmlnaHRCcmFjZVN0cmluZyk7CiAgICB0ZXN0KCJfdGlsZGUiLCBfdGlsZGUsIF90aWxkZVN0cmluZyk7CiAgfQp9CoDoAE5OPAFKBEggARgOARABJzYBKDcBJjUmNQEpOC08KjkBM0I0QwE4RzdGNkU1RDFAMD8rOgFEQBkBLTwrSClEASEBRzUBKzMdFwElARQBJS4BIiooMCEpIywkLCYuJy8mLicvJS0hKSIqIiojKyIqASMjASIqJi4lLSMrKDAlLR8nAScnASgwJi8pMScvJy8lLQEnJwEmLiUtJy8iKgEiODJMCAYBOxo8CAYBMyo5MDA8PE5IOyc3JU5IRT8/UTI5E01RATMqPCctMDY5NjkzJyoqLSoqNjMtPDMhPDY/OTkzNjM5KgQCASxwYWNrYWdlOmpzX3J1bnRpbWUvc2hhcmVkL3JlY2lwZV9zeW50YXguZGFydEJzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19lbWl0dGVyL2NsYXNzX3N0dWJfZ2VuZXJhdG9yLmRhcnS5UC8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuanNfZW1pdHRlci5jbGFzc19zdHViX2dlbmVyYXRvcjsKCmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnIHNob3cgSWRlbnRpZmllcnMsIFNlbGVjdG9yczsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBDb21tb25FbGVtZW50czsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqc0FzdDsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBzaG93IGpzOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvZmllbGRfYW5hbHlzaXMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYW1lci5kYXJ0JyBzaG93IE5hbWVyOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvaW50ZXJjZXB0b3JfZGF0YS5kYXJ0JyBzaG93IEludGVyY2VwdG9yRGF0YTsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NvZGVnZW5fd29ybGRfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JyBzaG93IFNlbGVjdG9yOwppbXBvcnQgJy4uL3VuaXZlcnNlL3dvcmxkX2J1aWxkZXIuZGFydCcgc2hvdyBTZWxlY3RvckNvbnN0cmFpbnRzOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwoKaW1wb3J0ICdjb2RlX2VtaXR0ZXJfdGFzay5kYXJ0JzsKaW1wb3J0ICdtb2RlbC5kYXJ0JzsKCmNsYXNzIENsYXNzU3R1YkdlbmVyYXRvciB7CiAgZmluYWwgTmFtZXIgX25hbWVyOwogIGZpbmFsIENvZGVnZW5Xb3JsZCBfY29kZWdlbldvcmxkOwogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CiAgZmluYWwgYm9vbCBlbmFibGVNaW5pZmljYXRpb247CiAgZmluYWwgRW1pdHRlciBfZW1pdHRlcjsKICBmaW5hbCBDb21tb25FbGVtZW50cyBfY29tbW9uRWxlbWVudHM7CgogIENsYXNzU3R1YkdlbmVyYXRvcih0aGlzLl9lbWl0dGVyLCB0aGlzLl9jb21tb25FbGVtZW50cywgdGhpcy5fbmFtZXIsCiAgICAgIHRoaXMuX2NvZGVnZW5Xb3JsZCwgdGhpcy5fY2xvc2VkV29ybGQsCiAgICAgIHt0aGlzLmVuYWJsZU1pbmlmaWNhdGlvbn0pOwoKICBJbnRlcmNlcHRvckRhdGEgZ2V0IF9pbnRlcmNlcHRvckRhdGEgPT4gX2Nsb3NlZFdvcmxkLmludGVyY2VwdG9yRGF0YTsKCiAganNBc3QuRXhwcmVzc2lvbiBnZW5lcmF0ZUNsYXNzQ29uc3RydWN0b3IoCiAgICAgIENsYXNzRW50aXR5IGNsYXNzRWxlbWVudCwgTGlzdDxqc0FzdC5OYW1lPiBmaWVsZHMsIGJvb2wgaGFzUnRpRmllbGQpIHsKICAgIC8vIFRPRE8oc3JhKTogSW1wbGVtZW50IHBsYWNlaG9sZGVycyBpbiBWYXJpYWJsZURlY2xhcmF0aW9uIHBvc2l0aW9uOgogICAgLy8KICAgIC8vICAgICBTdHJpbmcgY29uc3RydWN0b3JOYW1lID0gbmFtZXIuZ2V0TmFtZU9mQ2xhc3MoY2xhc3NFbGVtZW50KTsKICAgIC8vICAgICByZXR1cm4ganMuc3RhdGVtZW50KCdmdW5jdGlvbiAjKCMpIHsgIzsgfScsCiAgICAvLyAgICAgICAgWyBjb25zdHJ1Y3Rvck5hbWUsIGZpZWxkcywKICAgIC8vICAgICAgICAgICAgZmllbGRzLm1hcCgKICAgIC8vICAgICAgICAgICAgICAgIChuYW1lKSA9PiBqcygndGhpcy4jID0gIycsIFtuYW1lLCBuYW1lXSkpXSkpOwogICAgZHluYW1pYyB0eXBlUGFyYW1ldGVycyA9IGNvbnN0IDxqc0FzdC5QYXJhbWV0ZXI+W107CiAgICBkeW5hbWljIHR5cGVJbml0cyA9IGNvbnN0IDxqc0FzdC5FeHByZXNzaW9uPltdOwogICAgaWYgKGhhc1J0aUZpZWxkKSB7CiAgICAgIGR5bmFtaWMgcnRpTmFtZSA9IF9uYW1lci5ydGlGaWVsZEpzTmFtZTsKICAgICAgdHlwZVBhcmFtZXRlcnMgPSBydGlOYW1lOwogICAgICB0eXBlSW5pdHMgPSBqcygndGhpcy4jID0gIycsIFtydGlOYW1lLCBydGlOYW1lXSk7CiAgICB9CiAgICBMaXN0PGpzQXN0LlBhcmFtZXRlcj4gcGFyYW1ldGVycyA9IG5ldyBMaXN0PGpzQXN0LlBhcmFtZXRlcj4uZ2VuZXJhdGUoCiAgICAgICAgZmllbGRzLmxlbmd0aCwgKGkpID0+IG5ldyBqc0FzdC5QYXJhbWV0ZXIoJ3QkaScpKTsKICAgIExpc3Q8anNBc3QuRXhwcmVzc2lvbj4gZmllbGRJbml0aWFsaXplcnMgPQogICAgICAgIG5ldyBMaXN0PGpzQXN0LkV4cHJlc3Npb24+LmdlbmVyYXRlKGZpZWxkcy5sZW5ndGgsIChpKSB7CiAgICAgIHJldHVybiBqcygndGhpcy4jID0gIycsIFtmaWVsZHNbaV0sIHBhcmFtZXRlcnNbaV1dKTsKICAgIH0pOwogICAgcmV0dXJuIGpzKCdmdW5jdGlvbigjLCAjKSB7ICM7ICM7IHRoaXMuIygpO30nLCBbCiAgICAgIHBhcmFtZXRlcnMsCiAgICAgIHR5cGVQYXJhbWV0ZXJzLAogICAgICBmaWVsZEluaXRpYWxpemVycywKICAgICAgdHlwZUluaXRzLAogICAgICBfbmFtZXIuZml4ZWROYW1lcy5kZWZlcnJlZEFjdGlvbgogICAgXSk7CiAgfQoKICBqc0FzdC5FeHByZXNzaW9uIGdlbmVyYXRlR2V0dGVyKE1lbWJlckVudGl0eSBtZW1iZXIsIGpzQXN0Lk5hbWUgZmllbGROYW1lKSB7CiAgICBDbGFzc0VudGl0eSBjbHMgPSBtZW1iZXIuZW5jbG9zaW5nQ2xhc3M7CiAgICBTdHJpbmcgcmVjZWl2ZXIgPQogICAgICAgIF9pbnRlcmNlcHRvckRhdGEuaXNJbnRlcmNlcHRlZENsYXNzKGNscykgPyAncmVjZWl2ZXInIDogJ3RoaXMnOwogICAgTGlzdDxTdHJpbmc+IGFyZ3MgPQogICAgICAgIF9pbnRlcmNlcHRvckRhdGEuaXNJbnRlcmNlcHRlZE1ldGhvZChtZW1iZXIpID8gWydyZWNlaXZlciddIDogW107CiAgICByZXR1cm4ganMoJ2Z1bmN0aW9uKCMpIHsgcmV0dXJuICMuIyB9JywgW2FyZ3MsIHJlY2VpdmVyLCBmaWVsZE5hbWVdKTsKICB9CgogIGpzQXN0LkV4cHJlc3Npb24gZ2VuZXJhdGVTZXR0ZXIoTWVtYmVyRW50aXR5IG1lbWJlciwganNBc3QuTmFtZSBmaWVsZE5hbWUpIHsKICAgIENsYXNzRW50aXR5IGNscyA9IG1lbWJlci5lbmNsb3NpbmdDbGFzczsKICAgIFN0cmluZyByZWNlaXZlciA9CiAgICAgICAgX2ludGVyY2VwdG9yRGF0YS5pc0ludGVyY2VwdGVkQ2xhc3MoY2xzKSA/ICdyZWNlaXZlcicgOiAndGhpcyc7CiAgICBMaXN0PFN0cmluZz4gYXJncyA9CiAgICAgICAgX2ludGVyY2VwdG9yRGF0YS5pc0ludGVyY2VwdGVkTWV0aG9kKG1lbWJlcikgPyBbJ3JlY2VpdmVyJ10gOiBbXTsKICAgIC8vIFRPRE8oZmxvaXRzY2gpOiByZW1vdmUgJ3JldHVybic/CiAgICByZXR1cm4ganMoCiAgICAgICAgJ2Z1bmN0aW9uKCMsIHYpIHsgcmV0dXJuICMuIyA9IHY7IH0nLCBbYXJncywgcmVjZWl2ZXIsIGZpZWxkTmFtZV0pOwogIH0KCiAgLy8vIERvY3VtZW50YXRpb24gd2FudGVkIC0tIGpvaG5uaXdpbnRoZXIKICAvLy8KICAvLy8gSW52YXJpYW50OiBbbWVtYmVyXSBtdXN0IGJlIGEgZGVjbGFyYXRpb24gZWxlbWVudC4KICBNYXA8anNBc3QuTmFtZSwganNBc3QuRXhwcmVzc2lvbj4gZ2VuZXJhdGVDYWxsU3R1YnNGb3JHZXR0ZXIoCiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4gc2VsZWN0b3JzKSB7CiAgICAvLyBJZiB0aGUgbWV0aG9kIGlzIGludGVyY2VwdGVkLCB0aGUgc3R1YiBnZXRzIHRoZQogICAgLy8gcmVjZWl2ZXIgZXhwbGljaXRseSBhbmQgd2UgbmVlZCB0byBwYXNzIGl0IHRvIHRoZSBnZXR0ZXIgY2FsbC4KICAgIGJvb2wgaXNJbnRlcmNlcHRlZE1ldGhvZCA9IF9pbnRlcmNlcHRvckRhdGEuaXNJbnRlcmNlcHRlZE1ldGhvZChtZW1iZXIpOwogICAgYm9vbCBpc0ludGVyY2VwdGVkQ2xhc3MgPQogICAgICAgIF9pbnRlcmNlcHRvckRhdGEuaXNJbnRlcmNlcHRlZENsYXNzKG1lbWJlci5lbmNsb3NpbmdDbGFzcyk7CgogICAgY29uc3QgU3RyaW5nIHJlY2VpdmVyQXJndW1lbnROYW1lID0gcickcmVjZWl2ZXInOwoKICAgIGpzQXN0LkV4cHJlc3Npb24gYnVpbGRHZXR0ZXIoKSB7CiAgICAgIGpzQXN0LkV4cHJlc3Npb24gcmVjZWl2ZXIgPQogICAgICAgICAganMoaXNJbnRlcmNlcHRlZENsYXNzID8gcmVjZWl2ZXJBcmd1bWVudE5hbWUgOiAndGhpcycpOwogICAgICBpZiAobWVtYmVyLmlzR2V0dGVyKSB7CiAgICAgICAganNBc3QuTmFtZSBnZXR0ZXJOYW1lID0gX25hbWVyLmdldHRlckZvckVsZW1lbnQobWVtYmVyKTsKICAgICAgICBpZiAoaXNJbnRlcmNlcHRlZE1ldGhvZCkgewogICAgICAgICAgcmV0dXJuIGpzKCd0aGlzLiMoIyknLCBbZ2V0dGVyTmFtZSwgcmVjZWl2ZXJdKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGpzKCcjLiMoKScsIFtyZWNlaXZlciwgZ2V0dGVyTmFtZV0pOwogICAgICB9IGVsc2UgewogICAgICAgIEZpZWxkQW5hbHlzaXNEYXRhIGZpZWxkRGF0YSA9CiAgICAgICAgICAgIF9jbG9zZWRXb3JsZC5maWVsZEFuYWx5c2lzLmdldEZpZWxkRGF0YShtZW1iZXIpOwogICAgICAgIGlmIChmaWVsZERhdGEuaXNFZmZlY3RpdmVseUNvbnN0YW50KSB7CiAgICAgICAgICByZXR1cm4gX2VtaXR0ZXIuY29uc3RhbnRSZWZlcmVuY2UoZmllbGREYXRhLmNvbnN0YW50VmFsdWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBqc0FzdC5OYW1lIGZpZWxkTmFtZSA9IF9uYW1lci5pbnN0YW5jZUZpZWxkUHJvcGVydHlOYW1lKG1lbWJlcik7CiAgICAgICAgICByZXR1cm4ganMoJyMuIycsIFtyZWNlaXZlciwgZmllbGROYW1lXSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgTWFwPGpzQXN0Lk5hbWUsIGpzQXN0LkV4cHJlc3Npb24+IGdlbmVyYXRlZFN0dWJzID0KICAgICAgICA8anNBc3QuTmFtZSwganNBc3QuRXhwcmVzc2lvbj57fTsKCiAgICAvLyBUd28gc2VsZWN0b3JzIG1heSBtYXRjaCBidXQgZGlmZmVyIG9ubHkgaW4gdHlwZS4gIFRvIGF2b2lkIGdlbmVyYXRpbmcKICAgIC8vIGlkZW50aWNhbCBzdHVicyBmb3IgZWFjaCB3ZSB0cmFjayB1bnR5cGVkIHNlbGVjdG9ycyB3aGljaCBhbHJlYWR5IGhhdmUKICAgIC8vIHN0dWJzLgogICAgU2V0PFNlbGVjdG9yPiBnZW5lcmF0ZWRTZWxlY3RvcnMgPSBuZXcgU2V0PFNlbGVjdG9yPigpOwogICAgZm9yIChTZWxlY3RvciBzZWxlY3RvciBpbiBzZWxlY3RvcnMua2V5cykgewogICAgICBpZiAoZ2VuZXJhdGVkU2VsZWN0b3JzLmNvbnRhaW5zKHNlbGVjdG9yKSkgY29udGludWU7CiAgICAgIGlmICghc2VsZWN0b3IuYXBwbGllc1VubmFtZWQobWVtYmVyKSkgY29udGludWU7CiAgICAgIGlmIChzZWxlY3RvcnNbc2VsZWN0b3JdCiAgICAgICAgICAuY2FuSGl0KG1lbWJlciwgc2VsZWN0b3IubWVtYmVyTmFtZSwgX2Nsb3NlZFdvcmxkKSkgewogICAgICAgIGdlbmVyYXRlZFNlbGVjdG9ycy5hZGQoc2VsZWN0b3IpOwoKICAgICAgICBqc0FzdC5OYW1lIGludm9jYXRpb25OYW1lID0gX25hbWVyLmludm9jYXRpb25OYW1lKHNlbGVjdG9yKTsKICAgICAgICBTZWxlY3RvciBjYWxsU2VsZWN0b3IgPSBuZXcgU2VsZWN0b3IuY2FsbENsb3N1cmVGcm9tKHNlbGVjdG9yKTsKICAgICAgICBqc0FzdC5OYW1lIGNsb3N1cmVDYWxsTmFtZSA9IF9uYW1lci5pbnZvY2F0aW9uTmFtZShjYWxsU2VsZWN0b3IpOwoKICAgICAgICBMaXN0PGpzQXN0LlBhcmFtZXRlcj4gcGFyYW1ldGVycyA9IDxqc0FzdC5QYXJhbWV0ZXI+W107CiAgICAgICAgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiBhcmd1bWVudHMgPSA8anNBc3QuRXhwcmVzc2lvbj5bXTsKICAgICAgICBpZiAoaXNJbnRlcmNlcHRlZE1ldGhvZCkgewogICAgICAgICAgcGFyYW1ldGVycy5hZGQobmV3IGpzQXN0LlBhcmFtZXRlcihyZWNlaXZlckFyZ3VtZW50TmFtZSkpOwogICAgICAgIH0KCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZWxlY3Rvci5hcmd1bWVudENvdW50OyBpKyspIHsKICAgICAgICAgIFN0cmluZyBuYW1lID0gJ2FyZyRpJzsKICAgICAgICAgIHBhcmFtZXRlcnMuYWRkKG5ldyBqc0FzdC5QYXJhbWV0ZXIobmFtZSkpOwogICAgICAgICAgYXJndW1lbnRzLmFkZChqcygnIycsIG5hbWUpKTsKICAgICAgICB9CgogICAgICAgIGpzQXN0LkZ1biBmdW5jdGlvbiA9IGpzKCdmdW5jdGlvbigjKSB7IHJldHVybiAjLiMoIyk7IH0nLAogICAgICAgICAgICBbcGFyYW1ldGVycywgYnVpbGRHZXR0ZXIoKSwgY2xvc3VyZUNhbGxOYW1lLCBhcmd1bWVudHNdKTsKCiAgICAgICAgZ2VuZXJhdGVkU3R1YnNbaW52b2NhdGlvbk5hbWVdID0gZnVuY3Rpb247CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gZ2VuZXJhdGVkU3R1YnM7CiAgfQoKICBNYXA8anNBc3QuTmFtZSwgU2VsZWN0b3I+IGNvbXB1dGVTZWxlY3RvcnNGb3JOc21IYW5kbGVycygpIHsKICAgIE1hcDxqc0FzdC5OYW1lLCBTZWxlY3Rvcj4ganNOYW1lcyA9IDxqc0FzdC5OYW1lLCBTZWxlY3Rvcj57fTsKCiAgICAvLyBEbyBub3QgZ2VuZXJhdGUgbm8gc3VjaCBtZXRob2QgaGFuZGxlcnMgaWYgdGhlcmUgaXMgbm8gY2xhc3MuCiAgICBpZiAoX2NvZGVnZW5Xb3JsZC5kaXJlY3RseUluc3RhbnRpYXRlZENsYXNzZXMuaXNFbXB0eSkgewogICAgICByZXR1cm4ganNOYW1lczsKICAgIH0KCiAgICB2b2lkIGFkZE5vU3VjaE1ldGhvZEhhbmRsZXJzKAogICAgICAgIFN0cmluZyBpZ25vcmUsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4gc2VsZWN0b3JzKSB7CiAgICAgIGZvciAoU2VsZWN0b3Igc2VsZWN0b3IgaW4gc2VsZWN0b3JzLmtleXMpIHsKICAgICAgICBpZiAoc2VsZWN0b3IgPT0gU2VsZWN0b3JzLnJ1bnRpbWVUeXBlXyB8fAogICAgICAgICAgICBzZWxlY3RvciA9PSBTZWxlY3RvcnMuZXF1YWxzIHx8CiAgICAgICAgICAgIHNlbGVjdG9yID09IFNlbGVjdG9ycy50b1N0cmluZ18gfHwKICAgICAgICAgICAgc2VsZWN0b3IgPT0gU2VsZWN0b3JzLmhhc2hDb2RlXyB8fAogICAgICAgICAgICBzZWxlY3RvciA9PSBTZWxlY3RvcnMubm9TdWNoTWV0aG9kXykgewogICAgICAgICAgLy8gU2tpcCBPYmplY3QgbWV0aG9kcyBzaW5jZSB0aGVzZSBuZWVkIG5vIG5vU3VjaE1ldGhvZCBoYW5kbGluZwogICAgICAgICAgLy8gcmVnYXJkbGVzcyBvZiB0aGUgcHJlY2lzaW9uIG9mIHRoZSBzZWxlY3RvciBjb25zdHJhaW50cy4KICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgU2VsZWN0b3JDb25zdHJhaW50cyBtYXNrU2V0ID0gc2VsZWN0b3JzW3NlbGVjdG9yXTsKICAgICAgICBpZiAobWFza1NldC5uZWVkc05vU3VjaE1ldGhvZEhhbmRsaW5nKHNlbGVjdG9yLCBfY2xvc2VkV29ybGQpKSB7CiAgICAgICAgICBqc0FzdC5OYW1lIGpzTmFtZSA9IF9uYW1lci5pbnZvY2F0aW9uTWlycm9ySW50ZXJuYWxOYW1lKHNlbGVjdG9yKTsKICAgICAgICAgIGpzTmFtZXNbanNOYW1lXSA9IHNlbGVjdG9yOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIF9jb2RlZ2VuV29ybGQuZm9yRWFjaEludm9rZWROYW1lKGFkZE5vU3VjaE1ldGhvZEhhbmRsZXJzKTsKICAgIF9jb2RlZ2VuV29ybGQuZm9yRWFjaEludm9rZWRHZXR0ZXIoYWRkTm9TdWNoTWV0aG9kSGFuZGxlcnMpOwogICAgX2NvZGVnZW5Xb3JsZC5mb3JFYWNoSW52b2tlZFNldHRlcihhZGROb1N1Y2hNZXRob2RIYW5kbGVycyk7CiAgICByZXR1cm4ganNOYW1lczsKICB9CgogIFN0dWJNZXRob2QgZ2VuZXJhdGVTdHViRm9yTm9TdWNoTWV0aG9kKGpzQXN0Lk5hbWUgbmFtZSwgU2VsZWN0b3Igc2VsZWN0b3IpIHsKICAgIC8vIFZhbHVlcyBtYXRjaCBKU0ludm9jYXRpb25NaXJyb3IgaW4ganMtaGVscGVyIGxpYnJhcnkuCiAgICBpbnQgdHlwZSA9IHNlbGVjdG9yLmludm9jYXRpb25NaXJyb3JLaW5kOwogICAgTGlzdDxTdHJpbmc+IHBhcmFtZXRlck5hbWVzID0KICAgICAgICBuZXcgTGlzdC5nZW5lcmF0ZShzZWxlY3Rvci5hcmd1bWVudENvdW50LCAoaSkgPT4gJ1wkJGknKSArCiAgICAgICAgICAgIG5ldyBMaXN0LmdlbmVyYXRlKHNlbGVjdG9yLnR5cGVBcmd1bWVudENvdW50LCAoaSkgPT4gJ1wkVCR7aSArIDF9Jyk7CgogICAgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiBhcmdOYW1lcyA9IHNlbGVjdG9yLmNhbGxTdHJ1Y3R1cmUKICAgICAgICAuZ2V0T3JkZXJlZE5hbWVkQXJndW1lbnRzKCkKICAgICAgICAubWFwKChTdHJpbmcgbmFtZSkgPT4ganMuc3RyaW5nKG5hbWUpKQogICAgICAgIC50b0xpc3QoKTsKCiAgICBqc0FzdC5OYW1lIG1ldGhvZE5hbWUgPSBfbmFtZXIuYXNOYW1lKHNlbGVjdG9yLmludm9jYXRpb25NaXJyb3JNZW1iZXJOYW1lKTsKICAgIGpzQXN0Lk5hbWUgaW50ZXJuYWxOYW1lID0gX25hbWVyLmludm9jYXRpb25NaXJyb3JJbnRlcm5hbE5hbWUoc2VsZWN0b3IpOwoKICAgIGFzc2VydChfaW50ZXJjZXB0b3JEYXRhLmlzSW50ZXJjZXB0ZWROYW1lKElkZW50aWZpZXJzLm5vU3VjaE1ldGhvZF8pKTsKICAgIGJvb2wgaXNJbnRlcmNlcHRlZCA9IF9pbnRlcmNlcHRvckRhdGEuaXNJbnRlcmNlcHRlZE5hbWUoc2VsZWN0b3IubmFtZSk7CiAgICBqc0FzdC5FeHByZXNzaW9uIGV4cHJlc3Npb24gPSBqcygnJyd0aGlzLiNub1N1Y2hNZXRob2ROYW1lKCNyZWNlaXZlciwKICAgICAgICAgICAgICAgICAgICAjY3JlYXRlSW52b2NhdGlvbk1pcnJvcigjbWV0aG9kTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjaW50ZXJuYWxOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhcmd1bWVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI25hbWVkQXJndW1lbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0eXBlQXJndW1lbnRDb3VudCkpJycnLCB7CiAgICAgICdyZWNlaXZlcic6IGlzSW50ZXJjZXB0ZWQgPyByJyRyZWNlaXZlcicgOiAndGhpcycsCiAgICAgICdub1N1Y2hNZXRob2ROYW1lJzogX25hbWVyLm5vU3VjaE1ldGhvZE5hbWUsCiAgICAgICdjcmVhdGVJbnZvY2F0aW9uTWlycm9yJzoKICAgICAgICAgIF9lbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKF9jb21tb25FbGVtZW50cy5jcmVhdGVJbnZvY2F0aW9uTWlycm9yKSwKICAgICAgJ21ldGhvZE5hbWUnOgogICAgICAgICAganMucXVvdGVOYW1lKGVuYWJsZU1pbmlmaWNhdGlvbiA/IGludGVybmFsTmFtZSA6IG1ldGhvZE5hbWUpLAogICAgICAnaW50ZXJuYWxOYW1lJzoganMucXVvdGVOYW1lKGludGVybmFsTmFtZSksCiAgICAgICd0eXBlJzoganMubnVtYmVyKHR5cGUpLAogICAgICAnYXJndW1lbnRzJzogbmV3IGpzQXN0LkFycmF5SW5pdGlhbGl6ZXIoCiAgICAgICAgICBwYXJhbWV0ZXJOYW1lcy5tYXA8anNBc3QuRXhwcmVzc2lvbj4oanMpLnRvTGlzdCgpKSwKICAgICAgJ25hbWVkQXJndW1lbnRzJzogbmV3IGpzQXN0LkFycmF5SW5pdGlhbGl6ZXIoYXJnTmFtZXMpLAogICAgICAndHlwZUFyZ3VtZW50Q291bnQnOiBqcy5udW1iZXIoc2VsZWN0b3IudHlwZUFyZ3VtZW50Q291bnQpCiAgICB9KTsKCiAgICBqc0FzdC5FeHByZXNzaW9uIGZ1bmN0aW9uOwogICAgaWYgKGlzSW50ZXJjZXB0ZWQpIHsKICAgICAgZnVuY3Rpb24gPSBqcygKICAgICAgICAgIHInZnVuY3Rpb24oJHJlY2VpdmVyLCAjKSB7IHJldHVybiAjIH0nLCBbcGFyYW1ldGVyTmFtZXMsIGV4cHJlc3Npb25dKTsKICAgIH0gZWxzZSB7CiAgICAgIGZ1bmN0aW9uID0ganMocidmdW5jdGlvbigjKSB7IHJldHVybiAjIH0nLCBbcGFyYW1ldGVyTmFtZXMsIGV4cHJlc3Npb25dKTsKICAgIH0KICAgIHJldHVybiBuZXcgU3R1Yk1ldGhvZChuYW1lLCBmdW5jdGlvbik7CiAgfQp9CgovLy8gQ3JlYXRlcyB0d28gSmF2YVNjcmlwdCBmdW5jdGlvbnM6IGB0ZWFyT2ZmR2V0dGVyYCBhbmQgYHRlYXJPZmZgLgovLy8KLy8vIGB0ZWFyT2ZmR2V0dGVyYCBpcyBpbnRlcm5hbCBhbmQgb25seSB1c2VkIGJ5IGB0ZWFyT2ZmYC4KLy8vCi8vLyBgdGVhck9mZmAgdGFrZXMgdGhlIGZvbGxvd2luZyBhcmd1bWVudHM6Ci8vLyAgICogYGZ1bmNzYDogYSBsaXN0IG9mIGZ1bmN0aW9ucy4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgcmVwcmVzZW50aW5nIHRoZQovLy8gICAgIG1lbWJlciB0aGF0IGlzIHRvcm4gb2ZmLiBUaGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSwgc2luY2UgYSBtZW1iZXIKLy8vICAgICBjYW4gaGF2ZSBzZXZlcmFsIHN0dWJzLgovLy8gICAgIEVhY2ggZnVuY3Rpb24gbXVzdCBoYXZlIHRoZSBgJGNhbGxOYW1lYCBwcm9wZXJ0eSBzZXQuCi8vLyAgICogYGFwcGx5VHJhbXBvbGluZUluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIHN0dWIgdG8gYmUgdXNlZCBmb3IKLy8vICAgICBGdW5jdGlvbi5hcHBseQovLy8gICAqIGByZWZsZWN0aW9uSW5mb2A6IGNvbnRhaW5zIHJlZmxlY3RpdmUgaW5mb3JtYXRpb24sIGFuZCB0aGUgZnVuY3Rpb24KLy8vICAgICB0eXBlLiBUT0RPKGZsb2l0c2NoKTogcG9pbnQgdG8gd2hlcmUgdGhpcyBpcyBzcGVjaWZpZWQuCi8vLyAgICogYGlzU3RhdGljYC4KLy8vICAgKiBgbmFtZWAuCi8vLyAgICogYGlzSW50ZXJjZXB0ZWQuCkxpc3Q8anNBc3QuU3RhdGVtZW50PiBidWlsZFRlYXJPZmZDb2RlKENvbXBpbGVyT3B0aW9ucyBvcHRpb25zLCBFbWl0dGVyIGVtaXR0ZXIsCiAgICBOYW1lciBuYW1lciwgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpIHsKICBGdW5jdGlvbkVudGl0eSBjbG9zdXJlRnJvbVRlYXJPZmYgPSBjb21tb25FbGVtZW50cy5jbG9zdXJlRnJvbVRlYXJPZmY7CiAganNBc3QuRXhwcmVzc2lvbiB0ZWFyT2ZmQWNjZXNzRXhwcmVzc2lvbjsKICBqc0FzdC5FeHByZXNzaW9uIHRlYXJPZmZHbG9iYWxPYmplY3RTdHJpbmc7CiAganNBc3QuRXhwcmVzc2lvbiB0ZWFyT2ZmR2xvYmFsT2JqZWN0OwogIGlmIChjbG9zdXJlRnJvbVRlYXJPZmYgIT0gbnVsbCkgewogICAgdGVhck9mZkFjY2Vzc0V4cHJlc3Npb24gPSBlbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGNsb3N1cmVGcm9tVGVhck9mZik7CiAgICB0ZWFyT2ZmR2xvYmFsT2JqZWN0ID0KICAgICAgICBqcy5zdHJpbmdQYXJ0KG5hbWVyLmdsb2JhbE9iamVjdEZvck1lbWJlcihjbG9zdXJlRnJvbVRlYXJPZmYpKTsKICAgIHRlYXJPZmZHbG9iYWxPYmplY3RTdHJpbmcgPQogICAgICAgIGpzLnN0cmluZyhuYW1lci5nbG9iYWxPYmplY3RGb3JNZW1iZXIoY2xvc3VyZUZyb21UZWFyT2ZmKSk7CiAgfSBlbHNlIHsKICAgIC8vIERlZmF1bHQgdmFsdWVzIGZvciBtb2NrZWQtdXAgdGVzdCBsaWJyYXJpZXMuCiAgICB0ZWFyT2ZmQWNjZXNzRXhwcmVzc2lvbiA9CiAgICAgICAganMocicnJ2Z1bmN0aW9uKCkgeyB0aHJvdyAiSGVscGVyICdjbG9zdXJlRnJvbVRlYXJPZmYnIG1pc3NpbmcuIiB9JycnKTsKICAgIHRlYXJPZmZHbG9iYWxPYmplY3RTdHJpbmcgPSBqcy5zdHJpbmcoJ01pc3NpbmdIZWxwZXJGdW5jdGlvbicpOwogICAgdGVhck9mZkdsb2JhbE9iamVjdCA9IGpzKAogICAgICAgIHInJycoZnVuY3Rpb24oKSB7IHRocm93ICJIZWxwZXIgJ2Nsb3N1cmVGcm9tVGVhck9mZicgbWlzc2luZy4iIH0pKCknJycpOwogIH0KCiAganNBc3QuU3RhdGVtZW50IHRlYXJPZmZHZXR0ZXI7CiAgaWYgKCFvcHRpb25zLnVzZUNvbnRlbnRTZWN1cml0eVBvbGljeSkgewogICAganNBc3QuRXhwcmVzc2lvbiB0ZWFyT2ZmQWNjZXNzVGV4dCA9IG5ldyBqc0FzdC5VbnBhcnNlZE5vZGUoCiAgICAgICAgdGVhck9mZkFjY2Vzc0V4cHJlc3Npb24sIG9wdGlvbnMuZW5hYmxlTWluaWZpY2F0aW9uLCBmYWxzZSk7CiAgICB0ZWFyT2ZmR2V0dGVyID0ganMuc3RhdGVtZW50KCcnJwpmdW5jdGlvbiB0ZWFyT2ZmR2V0dGVyKGZ1bmNzLCBhcHBseVRyYW1wb2xpbmVJbmRleCwgcmVmbGVjdGlvbkluZm8sIG5hbWUsIGlzSW50ZXJjZXB0ZWQpIHsKICByZXR1cm4gaXNJbnRlcmNlcHRlZAogICAgICA/IG5ldyBGdW5jdGlvbigiZnVuY3MiLCAiYXBwbHlUcmFtcG9saW5lSW5kZXgiLCAicmVmbGVjdGlvbkluZm8iLCAibmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICN0ZWFyT2ZmR2xvYmFsT2JqZWN0U3RyaW5nLCAiYyIsCiAgICAgICAgICAicmV0dXJuIGZ1bmN0aW9uIHRlYXJPZmZfIiArIG5hbWUgKyAoZnVuY3Rpb25Db3VudGVyKyspICsgIihyZWNlaXZlcikgeyIgKwogICAgICAgICAgICAiaWYgKGMgPT09IG51bGwpIGMgPSAiICsgI3RlYXJPZmZBY2Nlc3NUZXh0ICsgIigiICsKICAgICAgICAgICAgICAgICJ0aGlzLCBmdW5jcywgYXBwbHlUcmFtcG9saW5lSW5kZXgsIHJlZmxlY3Rpb25JbmZvLCBmYWxzZSwgdHJ1ZSwgbmFtZSk7IiArCiAgICAgICAgICAgICAgICAicmV0dXJuIG5ldyBjKHRoaXMsIGZ1bmNzWzBdLCByZWNlaXZlciwgbmFtZSk7IiArCiAgICAgICAgICAgIn0iKShmdW5jcywgYXBwbHlUcmFtcG9saW5lSW5kZXgsIHJlZmxlY3Rpb25JbmZvLCBuYW1lLCAjdGVhck9mZkdsb2JhbE9iamVjdCwgbnVsbCkKICAgICAgOiBuZXcgRnVuY3Rpb24oImZ1bmNzIiwgImFwcGx5VHJhbXBvbGluZUluZGV4IiwgInJlZmxlY3Rpb25JbmZvIiwgIm5hbWUiLAogICAgICAgICAgICAgICAgICAgICAjdGVhck9mZkdsb2JhbE9iamVjdFN0cmluZywgImMiLAogICAgICAgICAgInJldHVybiBmdW5jdGlvbiB0ZWFyT2ZmXyIgKyBuYW1lICsgKGZ1bmN0aW9uQ291bnRlcisrKSsgIigpIHsiICsKICAgICAgICAgICAgImlmIChjID09PSBudWxsKSBjID0gIiArICN0ZWFyT2ZmQWNjZXNzVGV4dCArICIoIiArCiAgICAgICAgICAgICAgICAidGhpcywgZnVuY3MsIGFwcGx5VHJhbXBvbGluZUluZGV4LCByZWZsZWN0aW9uSW5mbywgZmFsc2UsIGZhbHNlLCBuYW1lKTsiICsKICAgICAgICAgICAgICAgICJyZXR1cm4gbmV3IGModGhpcywgZnVuY3NbMF0sIG51bGwsIG5hbWUpOyIgKwogICAgICAgICAgICAgIn0iKShmdW5jcywgYXBwbHlUcmFtcG9saW5lSW5kZXgsIHJlZmxlY3Rpb25JbmZvLCBuYW1lLCAjdGVhck9mZkdsb2JhbE9iamVjdCwgbnVsbCk7Cn0nJycsIHsKICAgICAgJ3RlYXJPZmZBY2Nlc3NUZXh0JzogdGVhck9mZkFjY2Vzc1RleHQsCiAgICAgICd0ZWFyT2ZmR2xvYmFsT2JqZWN0JzogdGVhck9mZkdsb2JhbE9iamVjdCwKICAgICAgJ3RlYXJPZmZHbG9iYWxPYmplY3RTdHJpbmcnOiB0ZWFyT2ZmR2xvYmFsT2JqZWN0U3RyaW5nCiAgICB9KTsKICB9IGVsc2UgewogICAgdGVhck9mZkdldHRlciA9IGpzLnN0YXRlbWVudCgnJycKICAgICAgZnVuY3Rpb24gdGVhck9mZkdldHRlcihmdW5jcywgYXBwbHlUcmFtcG9saW5lSW5kZXgsIHJlZmxlY3Rpb25JbmZvLCBuYW1lLCBpc0ludGVyY2VwdGVkKSB7CiAgICAgICAgdmFyIGNhY2hlID0gbnVsbDsKICAgICAgICByZXR1cm4gaXNJbnRlcmNlcHRlZAogICAgICAgICAgICA/IGZ1bmN0aW9uKHJlY2VpdmVyKSB7CiAgICAgICAgICAgICAgICBpZiAoY2FjaGUgPT09IG51bGwpIGNhY2hlID0gIygKICAgICAgICAgICAgICAgICAgICB0aGlzLCBmdW5jcywgYXBwbHlUcmFtcG9saW5lSW5kZXgsIHJlZmxlY3Rpb25JbmZvLCBmYWxzZSwgdHJ1ZSwgbmFtZSk7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGNhY2hlKHRoaXMsIGZ1bmNzWzBdLCByZWNlaXZlciwgbmFtZSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICA6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKGNhY2hlID09PSBudWxsKSBjYWNoZSA9ICMoCiAgICAgICAgICAgICAgICAgICAgdGhpcywgZnVuY3MsIGFwcGx5VHJhbXBvbGluZUluZGV4LCByZWZsZWN0aW9uSW5mbywgZmFsc2UsIGZhbHNlLCBuYW1lKTsKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgY2FjaGUodGhpcywgZnVuY3NbMF0sIG51bGwsIG5hbWUpOwogICAgICAgICAgICAgIH07CiAgICAgIH0nJycsIFt0ZWFyT2ZmQWNjZXNzRXhwcmVzc2lvbiwgdGVhck9mZkFjY2Vzc0V4cHJlc3Npb25dKTsKICB9CgogIGpzQXN0LlN0YXRlbWVudCB0ZWFyT2ZmID0ganMuc3RhdGVtZW50KCcnJwogICAgICBmdW5jdGlvbiB0ZWFyT2ZmKGZ1bmNzLCBhcHBseVRyYW1wb2xpbmVJbmRleCwKICAgICAgICAgIHJlZmxlY3Rpb25JbmZvLCBpc1N0YXRpYywgbmFtZSwgaXNJbnRlcmNlcHRlZCkgewogICAgICB2YXIgY2FjaGUgPSBudWxsOwogICAgICByZXR1cm4gaXNTdGF0aWMKICAgICAgICAgID8gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgaWYgKGNhY2hlID09PSBudWxsKSBjYWNoZSA9ICN0ZWFyT2ZmKAogICAgICAgICAgICAgICAgICB0aGlzLCBmdW5jcywgYXBwbHlUcmFtcG9saW5lSW5kZXgsCiAgICAgICAgICAgICAgICAgIHJlZmxlY3Rpb25JbmZvLCB0cnVlLCBmYWxzZSwgbmFtZSkucHJvdG90eXBlOwogICAgICAgICAgICAgIHJldHVybiBjYWNoZTsKICAgICAgICAgICAgfQogICAgICAgICAgOiB0ZWFyT2ZmR2V0dGVyKGZ1bmNzLCBhcHBseVRyYW1wb2xpbmVJbmRleCwKICAgICAgICAgICAgICByZWZsZWN0aW9uSW5mbywgbmFtZSwgaXNJbnRlcmNlcHRlZCk7CiAgICB9JycnLCB7J3RlYXJPZmYnOiB0ZWFyT2ZmQWNjZXNzRXhwcmVzc2lvbn0pOwoKICByZXR1cm4gPGpzQXN0LlN0YXRlbWVudD5bdGVhck9mZkdldHRlciwgdGVhck9mZl07Cn0KgVoATk48ATEBOzYkISAsLkMaMTJCKgEhFQEbFiQjIRooAUctIgFIAS1NSgdINykeRDg0Fy8gOAZLOy9BOwg1EhYZEScIBAFPLRZIGEpKBAFPLRZIGEooD0wEASwGOUBLN0ZNHkQBNgElIkIdQSM6CjQPJj0vRhFLMwoIBgE3KgFNTg48MDs2HkAqAUVISgFAQSNFCgE7ITUoCgFCRgEzCAYBGwQBP0IBRT0WBgEiRzIyLC8vM0tGFAoBO0lNJgoIBgE/QUEUBAFPPS4iQ1EBPSQvEwFQTQFLTEo5OzM4PUc5MyBRFEgyHy8+PkEIAR8ZFVENUAYrBAIBRQQ8BC1PTCA+RxdMQBQQGFEySSwuKCRQGkggRAs0HlBEHlEEASErQUUlWxdQNlVAW0JfUDZMQFw+YgguMj0ICyVhGh0jL1tCEBsvXD4RQQQBLTQ7GBYZNDVAHA43NDEBNAIBOXBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvY2xhc3Nfc3R1Yl9nZW5lcmF0b3IuZGFydEpzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19lbWl0dGVyL2luc3RhbnRpYXRpb25fc3R1Yl9nZW5lcmF0b3IuZGFydKFGLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5qc19lbWl0dGVyLmluc3RhbnRpYXRpb25fc3R1Yl9nZW5lcmF0b3I7CgppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IEpDb21tb25FbGVtZW50cywgSkVsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9pby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydCc7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganNBc3Q7CmltcG9ydCAnLi4vanMvanMuZGFydCcgc2hvdyBqczsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hbWVyLmRhcnQnIHNob3cgTmFtZXI7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0JyBzaG93IENhbGxTdHJ1Y3R1cmU7CmltcG9ydCAnLi4vdW5pdmVyc2UvY29kZWdlbl93b3JsZF9idWlsZGVyLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CmltcG9ydCAnLi4vdW5pdmVyc2Uvd29ybGRfYnVpbGRlci5kYXJ0JyBzaG93IFNlbGVjdG9yQ29uc3RyYWludHM7CmltcG9ydCAnLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CgppbXBvcnQgJ21vZGVsLmRhcnQnOwoKaW1wb3J0ICdjb2RlX2VtaXR0ZXJfdGFzay5kYXJ0JyBzaG93IENvZGVFbWl0dGVyVGFzaywgRW1pdHRlcjsKCi8vIEdlbmVyYXRvciBvZiBzdHVicyByZXF1aXJlZCBmb3IgSW5zdGFudGlhdGlvbiBjbGFzc2VzLgpjbGFzcyBJbnN0YW50aWF0aW9uU3R1YkdlbmVyYXRvciB7CiAgZmluYWwgQ29kZUVtaXR0ZXJUYXNrIF9lbWl0dGVyVGFzazsKICBmaW5hbCBOYW1lciBfbmFtZXI7CiAgZmluYWwgQ29kZWdlbldvcmxkIF9jb2RlZ2VuV29ybGQ7CiAgZmluYWwgSkNsb3NlZFdvcmxkIF9jbG9zZWRXb3JsZDsKICAvLyBpZ25vcmU6IFVOVVNFRF9GSUVMRAogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kgX3NvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3k7CgogIEluc3RhbnRpYXRpb25TdHViR2VuZXJhdG9yKHRoaXMuX2VtaXR0ZXJUYXNrLCB0aGlzLl9uYW1lciwgdGhpcy5fY2xvc2VkV29ybGQsCiAgICAgIHRoaXMuX2NvZGVnZW5Xb3JsZCwgdGhpcy5fc291cmNlSW5mb3JtYXRpb25TdHJhdGVneSk7CgogIEVtaXR0ZXIgZ2V0IF9lbWl0dGVyID0+IF9lbWl0dGVyVGFzay5lbWl0dGVyOwoKICBKQ29tbW9uRWxlbWVudHMgZ2V0IF9jb21tb25FbGVtZW50cyA9PiBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHM7CiAgSkVsZW1lbnRFbnZpcm9ubWVudCBnZXQgX2VsZW1lbnRFbnZpcm9ubWVudCA9PgogICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50OwoKICBDb21waWxlck9wdGlvbnMgZ2V0IF9vcHRpb25zID0+IF9lbWl0dGVyVGFzay5vcHRpb25zOwoKICAvLy8gR2VuZXJhdGVzIGEgc3R1YiB0byBmb3J3YXJkIGEgY2FsbCBzZWxlY3RvciB3aXRoIG5vIHR5cGUgYXJndW1lbnRzIHRvIGEKICAvLy8gY2FsbCBzZWxlY3RvciB3aXRoIHN0b3JlZCB0eXBlcy4KICAvLy8KICAvLy8gW2luc3RhbnRpYXRpb25DbGFzc10gaXMgdGhlIGNsYXNzIGNvbnRhaW5pbmcgdGhlIGNhcHR1cmVkIHR5cGUgYXJndW1lbnRzLgogIC8vLyBbY2FsbFNlbGVjdG9yXSBpcyB0aGUgc2VsZWN0b3Igd2l0aCBubyB0eXBlIGFyZ3VtZW50cy4gW3RhcmdldFNlbGVjdG9yXSBpcwogIC8vLyB0aGUgc2VsZWN0b3IgYWNjZXB0aW5nIHRoZSB0eXBlIGFyZ3VtZW50cy4KICBQYXJhbWV0ZXJTdHViTWV0aG9kIF9nZW5lcmF0ZVN0dWIoCiAgICAgIENsYXNzRW50aXR5IGluc3RhbnRpYXRpb25DbGFzcywKICAgICAgRmllbGRFbnRpdHkgZnVuY3Rpb25GaWVsZCwKICAgICAgU2VsZWN0b3IgY2FsbFNlbGVjdG9yLAogICAgICBTZWxlY3RvciB0YXJnZXRTZWxlY3RvcikgewogICAgLy8gVE9ETyhzcmEpOiBHZW5lcmF0ZSBzb3VyY2UgaW5mb3JtYXRpb24gZm9yIHN0dWIgdGhhdCBoYXMgbm8gbWVtYmVyLgogICAgLy8KICAgIC8vU291cmNlSW5mb3JtYXRpb25CdWlsZGVyIHNvdXJjZUluZm9ybWF0aW9uQnVpbGRlciA9CiAgICAvLyAgICBfc291cmNlSW5mb3JtYXRpb25TdHJhdGVneS5jcmVhdGVCdWlsZGVyRm9yQ29udGV4dChtZW1iZXIpOwogICAgLy9Tb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9CiAgICAvLyAgICBzb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRTdHViKG1lbWJlciwgY2FsbFN0cnVjdHVyZSk7CgogICAgYXNzZXJ0KGNhbGxTZWxlY3Rvci50eXBlQXJndW1lbnRDb3VudCA9PSAwKTsKICAgIGludCB0eXBlQXJndW1lbnRDb3VudCA9IHRhcmdldFNlbGVjdG9yLnR5cGVBcmd1bWVudENvdW50OwogICAgYXNzZXJ0KHR5cGVBcmd1bWVudENvdW50ID4gMCk7CgogICAgLy8gVGhlIGZvcndhcmRpbmcgc3R1YiBmb3IgdGhyZWUgYXJndW1lbnRzIG9mIGFuIGluc3RhbnRpYXRpb24gd2l0aCB0d28gdHlwZQogICAgLy8gYXJndW1lbnRzIGxvb2tzIGxpa2UgdGhpczoKICAgIC8vCiAgICAvLyBgYGAKICAgIC8vIGNhbGwkMzogZnVuY3Rpb24oYTAsIGExLCBhMikgewogICAgLy8gICByZXR1cm4gdGhpcy5fZi5jYWxsJDIkMyhhMCwgYTEsIGEyLCB0aGlzLiR0aVswXSwgdGhpcy4kdGlbMV0pOwogICAgLy8gfQogICAgLy8gYGBgCgogICAgTGlzdDxqc0FzdC5QYXJhbWV0ZXI+IHBhcmFtZXRlcnMgPSA8anNBc3QuUGFyYW1ldGVyPltdOwogICAgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiBhcmd1bWVudHMgPSA8anNBc3QuRXhwcmVzc2lvbj5bXTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNhbGxTZWxlY3Rvci5hcmd1bWVudENvdW50OyBpKyspIHsKICAgICAgU3RyaW5nIGpzTmFtZSA9ICdhJGknOwogICAgICBhcmd1bWVudHMuYWRkKGpzKCcjJywganNOYW1lKSk7CiAgICAgIHBhcmFtZXRlcnMuYWRkKG5ldyBqc0FzdC5QYXJhbWV0ZXIoanNOYW1lKSk7CiAgICB9CgogICAgaWYgKF9vcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0YXJnZXRTZWxlY3Rvci50eXBlQXJndW1lbnRDb3VudDsgaSsrKSB7CiAgICAgICAgYXJndW1lbnRzLmFkZChqcygndGhpcy4jLiNbI10nLCBbCiAgICAgICAgICBfbmFtZXIucnRpRmllbGRKc05hbWUsCiAgICAgICAgICBfbmFtZXIuZmllbGRQcm9wZXJ0eU5hbWUoX2NvbW1vbkVsZW1lbnRzLnJ0aVJlc3RGaWVsZCksCiAgICAgICAgICBqcy5udW1iZXIoaSkKICAgICAgICBdKSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGFyZ2V0U2VsZWN0b3IudHlwZUFyZ3VtZW50Q291bnQ7IGkrKykgewogICAgICAgIGFyZ3VtZW50cy5hZGQoanMoJ3RoaXMuI1sjXScsIFtfbmFtZXIucnRpRmllbGRKc05hbWUsIGpzLm51bWJlcihpKV0pKTsKICAgICAgfQogICAgfQoKICAgIGpzQXN0LkZ1biBmdW5jdGlvbiA9IGpzKCdmdW5jdGlvbigjKSB7IHJldHVybiB0aGlzLiMuIygjKTsgfScsIFsKICAgICAgcGFyYW1ldGVycywKICAgICAgX25hbWVyLmZpZWxkUHJvcGVydHlOYW1lKGZ1bmN0aW9uRmllbGQpLAogICAgICBfbmFtZXIuaW52b2NhdGlvbk5hbWUodGFyZ2V0U2VsZWN0b3IpLAogICAgICBhcmd1bWVudHMsCiAgICBdKTsKICAgIC8vIFRPRE8oc3JhKTogLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbik7CgogICAganNBc3QuTmFtZSBuYW1lID0gX25hbWVyLmludm9jYXRpb25OYW1lKGNhbGxTZWxlY3Rvcik7CiAgICByZXR1cm4gbmV3IFBhcmFtZXRlclN0dWJNZXRob2QobmFtZSwgbnVsbCwgZnVuY3Rpb24pOwogIH0KCiAgLy8vIEdlbmVyYXRlcyBhIHN0dWIgZm9yIGEgJ3NpZ25hdHVyZScgc2VsZWN0b3IuIFRoZSBzdHViIGNhbGxzIHRoZSB1bmRlcmx5aW5nCiAgLy8vIGZ1bmN0aW9uJ3MgJ3NpZ25hdHVyZScgbWV0aG9kIGFuZCBjYWxscyBhIGhlbHBlciB0byBzdWJzaXR1dGUgdGhlIHR5cGUKICAvLy8gcGFyYW1ldGVycyBpbiB0aGUgdHlwZSB0ZXJtLiBUaGUgc3R1YiBsb29rcyBsaWtlIHRoaXM6CiAgLy8vCiAgLy8vIGBgYAogIC8vLyAkc2lnbmF0dXJlOjogZnVuY3Rpb24oKSB7CiAgLy8vICAgcmV0dXJuIEguaW5zdGFudGlhdGVkR2VuZXJpY0Z1bmN0aW9uVHlwZSgKICAvLy8gICAgICAgSC5leHRyYWN0RnVuY3Rpb25UeXBlT2JqZWN0RnJvbUludGVybmFsKHRoaXMuX2dlbmVyaWNDbG9zdXJlKSwKICAvLy8gICAgICAgdGhpcy4kdGkpOwogIC8vLyB9CiAgLy8vIGBgYAogIFBhcmFtZXRlclN0dWJNZXRob2QgX2dlbmVyYXRlU2lnbmF0dXJlU3R1YihGaWVsZEVudGl0eSBmdW5jdGlvbkZpZWxkKSB7CiAgICBqc0FzdC5OYW1lIG9wZXJhdG9yU2lnbmF0dXJlID0KICAgICAgICBfbmFtZXIuYXNOYW1lKF9uYW1lci5maXhlZE5hbWVzLm9wZXJhdG9yU2lnbmF0dXJlKTsKCiAgICBqc0FzdC5GdW4gZnVuY3Rpb24gPSBfb3B0aW9ucy5leHBlcmltZW50TmV3UnRpCiAgICAgICAgPyBfZ2VuZXJhdGVTaWduYXR1cmVOZXdSdGkoZnVuY3Rpb25GaWVsZCkKICAgICAgICA6IF9nZW5lcmF0ZVNpZ25hdHVyZUxlZ2FjeShmdW5jdGlvbkZpZWxkKTsKCiAgICAvLyBUT0RPKHNyYSk6IEdlbmVyYXRlIHNvdXJjZSBpbmZvcm1hdGlvbiBmb3Igc3R1YiB0aGF0IGhhcyBubyBtZW1iZXIuCiAgICAvLyBUT0RPKHNyYSk6IC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pOwoKICAgIHJldHVybiBuZXcgUGFyYW1ldGVyU3R1Yk1ldGhvZChvcGVyYXRvclNpZ25hdHVyZSwgbnVsbCwgZnVuY3Rpb24pOwogIH0KCiAganNBc3QuRnVuIF9nZW5lcmF0ZVNpZ25hdHVyZUxlZ2FjeShGaWVsZEVudGl0eSBmdW5jdGlvbkZpZWxkKSA9PgogICAgICBqcygnZnVuY3Rpb24oKSB7IHJldHVybiAjKCModGhpcy4jKSwgdGhpcy4jKTsgfScsIFsKICAgICAgICBfZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcygKICAgICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmluc3RhbnRpYXRlZEdlbmVyaWNGdW5jdGlvblR5cGUpLAogICAgICAgIF9lbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKAogICAgICAgICAgICBfY29tbW9uRWxlbWVudHMuZXh0cmFjdEZ1bmN0aW9uVHlwZU9iamVjdEZyb21JbnRlcm5hbCksCiAgICAgICAgX25hbWVyLmZpZWxkUHJvcGVydHlOYW1lKGZ1bmN0aW9uRmllbGQpLAogICAgICAgIF9uYW1lci5ydGlGaWVsZEpzTmFtZSwKICAgICAgXSk7CgogIGpzQXN0LkZ1biBfZ2VuZXJhdGVTaWduYXR1cmVOZXdSdGkoRmllbGRFbnRpdHkgZnVuY3Rpb25GaWVsZCkgPT4KICAgICAganMoJ2Z1bmN0aW9uKCkgeyByZXR1cm4gIygjKHRoaXMuIyksIHRoaXMuIyk7IH0nLCBbCiAgICAgICAgX2VtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MoCiAgICAgICAgICAgIF9jb21tb25FbGVtZW50cy5pbnN0YW50aWF0ZWRHZW5lcmljRnVuY3Rpb25UeXBlTmV3UnRpKSwKICAgICAgICBfZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcyhfY29tbW9uRWxlbWVudHMuY2xvc3VyZUZ1bmN0aW9uVHlwZSksCiAgICAgICAgX25hbWVyLmZpZWxkUHJvcGVydHlOYW1lKGZ1bmN0aW9uRmllbGQpLAogICAgICAgIF9uYW1lci5ydGlGaWVsZEpzTmFtZSwKICAgICAgXSk7CgogIC8vIFJldHVybnMgYWxsIHN0dWJzIGZvciBhbiBpbnN0YW50aWF0aW9uIGNsYXNzLgogIC8vCiAgTGlzdDxTdHViTWV0aG9kPiBnZW5lcmF0ZVN0dWJzKAogICAgICBDbGFzc0VudGl0eSBpbnN0YW50aWF0aW9uQ2xhc3MsIEZ1bmN0aW9uRW50aXR5IG1lbWJlcikgewogICAgLy8gMS4gRmluZCB0aGUgbnVtYmVyIG9mIHR5cGUgcGFyYW1ldGVycyBpbiBbaW5zdGFudGlhdGlvbkNsYXNzXS4KICAgIGludCB0eXBlQXJndW1lbnRDb3VudCA9IF9jbG9zZWRXb3JsZC5kYXJ0VHlwZXMKICAgICAgICAuZ2V0VGhpc1R5cGUoaW5zdGFudGlhdGlvbkNsYXNzKQogICAgICAgIC50eXBlQXJndW1lbnRzCiAgICAgICAgLmxlbmd0aDsKICAgIGFzc2VydCh0eXBlQXJndW1lbnRDb3VudCA+IDApOwoKICAgIC8vIDIuIEZpbmQgdGhlIGZ1bmN0aW9uIGZpZWxkIGFjY2VzcyBwYXRoLgogICAgRmllbGRFbnRpdHkgZnVuY3Rpb25GaWVsZDsKICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaEluc3RhbmNlRmllbGQoaW5zdGFudGlhdGlvbkNsYXNzLAogICAgICAgIChDbGFzc0VudGl0eSBlbmNsb3NpbmcsIEZpZWxkRW50aXR5IGZpZWxkKSB7CiAgICAgIGlmIChfY2xvc2VkV29ybGQuZmllbGRBbmFseXNpcy5nZXRGaWVsZERhdGEoZmllbGQpLmlzRWxpZGVkKSByZXR1cm47CiAgICAgIGlmIChmaWVsZC5uYW1lID09ICdfZ2VuZXJpY0Nsb3N1cmUnKSBmdW5jdGlvbkZpZWxkID0gZmllbGQ7CiAgICB9KTsKICAgIGFzc2VydChmdW5jdGlvbkZpZWxkICE9IG51bGwsCiAgICAgICAgIkNhbid0IGZpbmQgQ2xvc3VyZSBmaWVsZCBvZiAkaW5zdGFudGlhdGlvbkNsYXNzIik7CgogICAgU3RyaW5nIGNhbGwgPSBfbmFtZXIuY2xvc3VyZUludm9jYXRpb25TZWxlY3Rvck5hbWU7CiAgICBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+IGNhbGxTZWxlY3RvcnMgPQogICAgICAgIF9jb2RlZ2VuV29ybGQuaW52b2NhdGlvbnNCeU5hbWUoY2FsbCk7CgogICAgU2V0PFBhcmFtZXRlclN0cnVjdHVyZT4gY29tcHV0ZUxpdmVQYXJhbWV0ZXJTdHJ1Y3R1cmVzKCkgewogICAgICBTZXQ8UGFyYW1ldGVyU3RydWN0dXJlPiBwYXJhbWV0ZXJTdHJ1Y3R1cmVzID0KICAgICAgICAgIG5ldyBTZXQ8UGFyYW1ldGVyU3RydWN0dXJlPigpOwoKICAgICAgdm9pZCBwcm9jZXNzKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKSB7CiAgICAgICAgaWYgKGZ1bmN0aW9uLnBhcmFtZXRlclN0cnVjdHVyZS50eXBlUGFyYW1ldGVycyA9PSB0eXBlQXJndW1lbnRDb3VudCkgewogICAgICAgICAgcGFyYW1ldGVyU3RydWN0dXJlcy5hZGQoZnVuY3Rpb24ucGFyYW1ldGVyU3RydWN0dXJlKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIF9jb2RlZ2VuV29ybGQuY2xvc3VyaXplZFN0YXRpY3MuZm9yRWFjaChwcm9jZXNzKTsKICAgICAgX2NvZGVnZW5Xb3JsZC5jbG9zdXJpemVkTWVtYmVycy5mb3JFYWNoKHByb2Nlc3MpOwogICAgICBfY29kZWdlbldvcmxkLmZvckVhY2hHZW5lcmljQ2xvc3VyZUNhbGxNZXRob2QocHJvY2Vzcyk7CgogICAgICByZXR1cm4gcGFyYW1ldGVyU3RydWN0dXJlczsKICAgIH0KCiAgICBMaXN0PFN0dWJNZXRob2Q+IHN0dWJzID0gPFN0dWJNZXRob2Q+W107CgogICAgLy8gRm9yIGV2ZXJ5IGNhbGwtc2VsZWN0b3IgZ2VuZXJhdGUgYSBzdHViIHRvIHRoZSBjb3JyZXNwb25kaW5nIHNlbGVjdG9yCiAgICAvLyB3aXRoIGZpbGxlZC1pbiB0eXBlIGFyZ3VtZW50cy4KCiAgICBpZiAoY2FsbFNlbGVjdG9ycyAhPSBudWxsKSB7CiAgICAgIFNldDxQYXJhbWV0ZXJTdHJ1Y3R1cmU+IHBhcmFtZXRlclN0cnVjdHVyZXM7CiAgICAgIGZvciAoU2VsZWN0b3Igc2VsZWN0b3IgaW4gY2FsbFNlbGVjdG9ycy5rZXlzKSB7CiAgICAgICAgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlID0gc2VsZWN0b3IuY2FsbFN0cnVjdHVyZTsKICAgICAgICBpZiAoY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRDb3VudCAhPSAwKSBjb250aW51ZTsKICAgICAgICBDYWxsU3RydWN0dXJlIGdlbmVyaWNDYWxsU3RydWN0dXJlID0KICAgICAgICAgICAgY2FsbFN0cnVjdHVyZS53aXRoVHlwZUFyZ3VtZW50Q291bnQodHlwZUFyZ3VtZW50Q291bnQpOwogICAgICAgIHBhcmFtZXRlclN0cnVjdHVyZXMgPz89IGNvbXB1dGVMaXZlUGFyYW1ldGVyU3RydWN0dXJlcygpOwogICAgICAgIGZvciAoUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSBpbiBwYXJhbWV0ZXJTdHJ1Y3R1cmVzKSB7CiAgICAgICAgICBpZiAoZ2VuZXJpY0NhbGxTdHJ1Y3R1cmUuc2lnbmF0dXJlQXBwbGllcyhwYXJhbWV0ZXJTdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgIFNlbGVjdG9yIGdlbmVyaWNTZWxlY3RvciA9CiAgICAgICAgICAgICAgICBuZXcgU2VsZWN0b3IuY2FsbChzZWxlY3Rvci5tZW1iZXJOYW1lLCBnZW5lcmljQ2FsbFN0cnVjdHVyZSk7CiAgICAgICAgICAgIHN0dWJzLmFkZChfZ2VuZXJhdGVTdHViKAogICAgICAgICAgICAgICAgaW5zdGFudGlhdGlvbkNsYXNzLCBmdW5jdGlvbkZpZWxkLCBzZWxlY3RvciwgZ2VuZXJpY1NlbGVjdG9yKSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHN0dWJzLmFkZChfZ2VuZXJhdGVTaWduYXR1cmVTdHViKGZ1bmN0aW9uRmllbGQpKTsKCiAgICByZXR1cm4gc3R1YnM7CiAgfQp9CoDjAE5OPAE5AUwkKCEgLho9MTJCKgEVAT8BOiMmFiQjGj4BUDwBMAFGMScBOAFOJwZQUTElJiEdIUsHOkYsRQExPiMBUSIHCyZICQsBPD0BOx0mMwYBJUMqIUIXDQgNQ08IBgFFEi8tEQg9ATs6BAFRTT0GCiAySxcICkojPAEzMjMBSz0BRwQBQzonPidEMR8KAUM6J0RMMR8KATMFIj9GMykXESMBLx9BNUtCCCI8ATg3LwE/NCkBLk9ACggBODg+ASIGAS0BTSYBITM2PjwtREJNSydOJVATDAoIBgE2ARIEAgFBcGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9pbnN0YW50aWF0aW9uX3N0dWJfZ2VuZXJhdG9yLmRhcnRIc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfZW1pdHRlci9pbnRlcmNlcHRvcl9zdHViX2dlbmVyYXRvci5kYXJ0wABDAC8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuanNfZW1pdHRlci5pbnRlcmNlcHRvcl9zdHViX2dlbmVyYXRvcjsKCmltcG9ydCAncGFja2FnZTpqc19ydW50aW1lL3NoYXJlZC9lbWJlZGRlZF9uYW1lcy5kYXJ0JyBhcyBlbWJlZGRlZE5hbWVzOwoKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JyBzaG93IEludGVyZmFjZVR5cGU7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganNBc3Q7CmltcG9ydCAnLi4vanMvanMuZGFydCcgc2hvdyBqczsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hbWVyLmRhcnQnIHNob3cgTmFtZXI7CmltcG9ydCAnLi4vanNfYmFja2VuZC9jdXN0b21fZWxlbWVudHNfYW5hbHlzaXMuZGFydCcKICAgIHNob3cgQ3VzdG9tRWxlbWVudHNDb2RlZ2VuQW5hbHlzaXM7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYXRpdmVfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2ludGVyY2VwdG9yX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vbmF0aXZlL2VucXVldWUuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY29kZWdlbl93b3JsZF9idWlsZGVyLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CmltcG9ydCAnLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CgppbXBvcnQgJ2NvZGVfZW1pdHRlcl90YXNrLmRhcnQnIHNob3cgRW1pdHRlcjsKCmNsYXNzIEludGVyY2VwdG9yU3R1YkdlbmVyYXRvciB7CiAgZmluYWwgQ29tbW9uRWxlbWVudHMgX2NvbW1vbkVsZW1lbnRzOwogIGZpbmFsIEVtaXR0ZXIgX2VtaXR0ZXI7CiAgZmluYWwgTmF0aXZlQ29kZWdlbkVucXVldWVyIF9uYXRpdmVDb2RlZ2VuRW5xdWV1ZXI7CiAgZmluYWwgTmFtZXIgX25hbWVyOwogIGZpbmFsIEN1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzIF9jdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpczsKICBmaW5hbCBDb2RlZ2VuV29ybGQgX2NvZGVnZW5Xb3JsZDsKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwoKICBJbnRlcmNlcHRvclN0dWJHZW5lcmF0b3IoCiAgICAgIHRoaXMuX2NvbW1vbkVsZW1lbnRzLAogICAgICB0aGlzLl9lbWl0dGVyLAogICAgICB0aGlzLl9uYXRpdmVDb2RlZ2VuRW5xdWV1ZXIsCiAgICAgIHRoaXMuX25hbWVyLAogICAgICB0aGlzLl9jdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpcywKICAgICAgdGhpcy5fY29kZWdlbldvcmxkLAogICAgICB0aGlzLl9jbG9zZWRXb3JsZCk7CgogIE5hdGl2ZURhdGEgZ2V0IF9uYXRpdmVEYXRhID0+IF9jbG9zZWRXb3JsZC5uYXRpdmVEYXRhOwoKICBJbnRlcmNlcHRvckRhdGEgZ2V0IF9pbnRlcmNlcHRvckRhdGEgPT4gX2Nsb3NlZFdvcmxkLmludGVyY2VwdG9yRGF0YTsKCiAganNBc3QuRXhwcmVzc2lvbiBnZW5lcmF0ZUdldEludGVyY2VwdG9yTWV0aG9kKAogICAgICBTcGVjaWFsaXplZEdldEludGVyY2VwdG9yIGludGVyY2VwdG9yKSB7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXMgPSBpbnRlcmNlcHRvci5jbGFzc2VzOwoKICAgIGpzQXN0LkV4cHJlc3Npb24gaW50ZXJjZXB0b3JGb3IoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICAgIHJldHVybiBfZW1pdHRlci5pbnRlcmNlcHRvclByb3RvdHlwZUFjY2VzcyhjbHMpOwogICAgfQoKICAgIC8vLyBCdWlsZCBhIEphdmFTY3JpcHQgQVNUIG5vZGUgZm9yIGRvaW5nIGEgdHlwZSBjaGVjayBvbgogICAgLy8vIFtjbHNdLiBbY2xzXSBtdXN0IGJlIGEgbm9uLW5hdGl2ZSBpbnRlcmNlcHRvciBjbGFzcy4KICAgIGpzQXN0LlN0YXRlbWVudCBidWlsZEludGVyY2VwdG9yQ2hlY2soQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICAgIGpzQXN0LkV4cHJlc3Npb24gY29uZGl0aW9uOwogICAgICBhc3NlcnQoX2ludGVyY2VwdG9yRGF0YS5pc0ludGVyY2VwdGVkQ2xhc3MoY2xzKSk7CiAgICAgIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzQm9vbENsYXNzKSB7CiAgICAgICAgY29uZGl0aW9uID0ganMoJyh0eXBlb2YgcmVjZWl2ZXIpID09ICJib29sZWFuIicpOwogICAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNJbnRDbGFzcyB8fAogICAgICAgICAgY2xzID09IF9jb21tb25FbGVtZW50cy5qc0RvdWJsZUNsYXNzIHx8CiAgICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzTnVtYmVyQ2xhc3MpIHsKICAgICAgICB0aHJvdyAnaW50ZXJuYWwgZXJyb3InOwogICAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzIHx8CiAgICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzTXV0YWJsZUFycmF5Q2xhc3MgfHwKICAgICAgICAgIGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNGaXhlZEFycmF5Q2xhc3MgfHwKICAgICAgICAgIGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNFeHRlbmRhYmxlQXJyYXlDbGFzcykgewogICAgICAgIGNvbmRpdGlvbiA9IGpzKCdyZWNlaXZlci5jb25zdHJ1Y3RvciA9PSBBcnJheScpOwogICAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNTdHJpbmdDbGFzcykgewogICAgICAgIGNvbmRpdGlvbiA9IGpzKCcodHlwZW9mIHJlY2VpdmVyKSA9PSAic3RyaW5nIicpOwogICAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNOdWxsQ2xhc3MpIHsKICAgICAgICBjb25kaXRpb24gPSBqcygncmVjZWl2ZXIgPT0gbnVsbCcpOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93ICdpbnRlcm5hbCBlcnJvcic7CiAgICAgIH0KICAgICAgcmV0dXJuIGpzLnN0YXRlbWVudCgnaWYgKCMpIHJldHVybiAjJywgW2NvbmRpdGlvbiwgaW50ZXJjZXB0b3JGb3IoY2xzKV0pOwogICAgfQoKICAgIGJvb2wgaGFzQXJyYXkgPSBmYWxzZTsKICAgIGJvb2wgaGFzQm9vbCA9IGZhbHNlOwogICAgYm9vbCBoYXNEb3VibGUgPSBmYWxzZTsKICAgIGJvb2wgaGFzSW50ID0gZmFsc2U7CiAgICBib29sIGhhc051bGwgPSBmYWxzZTsKICAgIGJvb2wgaGFzTnVtYmVyID0gZmFsc2U7CiAgICBib29sIGhhc1N0cmluZyA9IGZhbHNlOwogICAgYm9vbCBoYXNOYXRpdmUgPSBmYWxzZTsKICAgIGJvb2wgYW55TmF0aXZlQ2xhc3NlcyA9IF9uYXRpdmVDb2RlZ2VuRW5xdWV1ZXIuaGFzSW5zdGFudGlhdGVkTmF0aXZlQ2xhc3NlczsKCiAgICBmb3IgKENsYXNzRW50aXR5IGNscyBpbiBjbGFzc2VzKSB7CiAgICAgIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcyB8fAogICAgICAgICAgY2xzID09IF9jb21tb25FbGVtZW50cy5qc011dGFibGVBcnJheUNsYXNzIHx8CiAgICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzRml4ZWRBcnJheUNsYXNzIHx8CiAgICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzRXh0ZW5kYWJsZUFycmF5Q2xhc3MpCiAgICAgICAgaGFzQXJyYXkgPSB0cnVlOwogICAgICBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzQm9vbENsYXNzKQogICAgICAgIGhhc0Jvb2wgPSB0cnVlOwogICAgICBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzRG91YmxlQ2xhc3MpCiAgICAgICAgaGFzRG91YmxlID0gdHJ1ZTsKICAgICAgZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5qc0ludENsYXNzKQogICAgICAgIGhhc0ludCA9IHRydWU7CiAgICAgIGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNOdWxsQ2xhc3MpCiAgICAgICAgaGFzTnVsbCA9IHRydWU7CiAgICAgIGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNOdW1iZXJDbGFzcykKICAgICAgICBoYXNOdW1iZXIgPSB0cnVlOwogICAgICBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzU3RyaW5nQ2xhc3MpCiAgICAgICAgaGFzU3RyaW5nID0gdHJ1ZTsKICAgICAgZWxzZSB7CiAgICAgICAgLy8gVGhlIHNldCBvZiBjbGFzc2VzIGluY2x1ZGVzIGNsYXNzZXMgbWl4ZWQtaW4gdG8gaW50ZXJjZXB0b3IgY2xhc3NlcwogICAgICAgIC8vIGFuZCB1c2VyIGV4dGVuc2lvbnMgb2YgbmF0aXZlIGNsYXNzZXMuCiAgICAgICAgLy8KICAgICAgICAvLyBUaGUgc2V0IG9mIGNsYXNzZXMgYWxzbyBpbmNsdWRlcyB0aGUgJ3ByaW1pdGl2ZScgaW50ZXJjZXB0b3IKICAgICAgICAvLyBQbGFpbkphdmFTY3JpcHRPYmplY3QgZXZlbiB3aGVuIGl0IGhhcyBub3QgYmVlbiByZXNvbHZlZCwgc2luY2UgaXQgaXMKICAgICAgICAvLyBvbmx5IHJlc29sdmVkIHRocm91Z2ggdGhlIHJlZmVyZW5jZSBpbiBnZXROYXRpdmVJbnRlcmNlcHRvciB3aGVuCiAgICAgICAgLy8gZ2V0TmF0aXZlSW50ZXJjZXB0b3IgaXMgbWFya2VkIGFzIHVzZWQuICBHdWFyZCBhZ2FpbnN0IHByb2JpbmcKICAgICAgICAvLyB1bnJlc29sdmVkIFBsYWluSmF2YVNjcmlwdE9iamVjdCBieSB0ZXN0aW5nIGZvciBhbnlOYXRpdmVDbGFzc2VzLgoKICAgICAgICBpZiAoYW55TmF0aXZlQ2xhc3NlcykgewogICAgICAgICAgaWYgKF9uYXRpdmVEYXRhLmlzTmF0aXZlT3JFeHRlbmRzTmF0aXZlKGNscykpIGhhc05hdGl2ZSA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoaGFzRG91YmxlKSB7CiAgICAgIGhhc051bWJlciA9IHRydWU7CiAgICB9CiAgICBpZiAoaGFzSW50KSBoYXNOdW1iZXIgPSB0cnVlOwoKICAgIGlmIChjbGFzc2VzLmNvbnRhaW5zQWxsKF9pbnRlcmNlcHRvckRhdGEuaW50ZXJjZXB0ZWRDbGFzc2VzKSkgewogICAgICAvLyBJLmUuIHRoaXMgaXMgdGhlIGdlbmVyYWwgaW50ZXJjZXB0b3IuCiAgICAgIGhhc05hdGl2ZSA9IGFueU5hdGl2ZUNsYXNzZXM7CiAgICB9CgogICAgTGlzdDxqc0FzdC5TdGF0ZW1lbnQ+IHN0YXRlbWVudHMgPSA8anNBc3QuU3RhdGVtZW50PltdOwoKICAgIGlmIChoYXNOdW1iZXIpIHsKICAgICAganNBc3QuU3RhdGVtZW50IHdoZW5OdW1iZXI7CgogICAgICAvLy8gTm90ZTogdGhlcmUgYXJlIHR3byBudW1iZXIgY2xhc3NlcyBpbiBwbGF5OiBEYXJ0J3MgW251bV0sCiAgICAgIC8vLyBhbmQgSmF2YVNjcmlwdCdzIE51bWJlciAodHlwZW9mIHJlY2VpdmVyID09ICdudW1iZXInKS4gIFRoaXMKICAgICAgLy8vIGlzIHRoZSBmYWxsYmFjayB1c2VkIHdoZW4gd2UgaGF2ZSBkZXRlcm1pbmVkIHRoYXQgcmVjZWl2ZXIKICAgICAgLy8vIGlzIGEgSmF2YVNjcmlwdCBOdW1iZXIuCiAgICAgIGpzQXN0LkV4cHJlc3Npb24gaW50ZXJjZXB0b3JGb3JOdW1iZXIgPSBpbnRlcmNlcHRvckZvcihoYXNEb3VibGUKICAgICAgICAgID8gX2NvbW1vbkVsZW1lbnRzLmpzRG91YmxlQ2xhc3MKICAgICAgICAgIDogX2NvbW1vbkVsZW1lbnRzLmpzTnVtYmVyQ2xhc3MpOwoKICAgICAgaWYgKGhhc0ludCkgewogICAgICAgIHdoZW5OdW1iZXIgPSBqcy5zdGF0ZW1lbnQoJycnewogICAgICAgICAgICBpZiAoTWF0aC5mbG9vcihyZWNlaXZlcikgPT0gcmVjZWl2ZXIpIHJldHVybiAjOwogICAgICAgICAgICByZXR1cm4gIzsKICAgICAgICB9JycnLAogICAgICAgICAgICBbaW50ZXJjZXB0b3JGb3IoX2NvbW1vbkVsZW1lbnRzLmpzSW50Q2xhc3MpLCBpbnRlcmNlcHRvckZvck51bWJlcl0pOwogICAgICB9IGVsc2UgewogICAgICAgIHdoZW5OdW1iZXIgPSBqcy5zdGF0ZW1lbnQoJ3JldHVybiAjJywgaW50ZXJjZXB0b3JGb3JOdW1iZXIpOwogICAgICB9CiAgICAgIHN0YXRlbWVudHMKICAgICAgICAgIC5hZGQoanMuc3RhdGVtZW50KCdpZiAodHlwZW9mIHJlY2VpdmVyID09ICJudW1iZXIiKSAjOycsIHdoZW5OdW1iZXIpKTsKICAgIH0KCiAgICBpZiAoaGFzU3RyaW5nKSB7CiAgICAgIHN0YXRlbWVudHMuYWRkKGJ1aWxkSW50ZXJjZXB0b3JDaGVjayhfY29tbW9uRWxlbWVudHMuanNTdHJpbmdDbGFzcykpOwogICAgfQogICAgaWYgKGhhc051bGwpIHsKICAgICAgc3RhdGVtZW50cy5hZGQoYnVpbGRJbnRlcmNlcHRvckNoZWNrKF9jb21tb25FbGVtZW50cy5qc051bGxDbGFzcykpOwogICAgfSBlbHNlIHsKICAgICAgLy8gUmV0dXJuaW5nICJ1bmRlZmluZWQiIG9yICJudWxsIiBoZXJlIHdpbGwgcHJvdm9rZSBhIEphdmFTY3JpcHQKICAgICAgLy8gVHlwZUVycm9yIHdoaWNoIGlzIGxhdGVyIGlkZW50aWZpZWQgYXMgYSBudWxsLWVycm9yIGJ5CiAgICAgIC8vIFt1bndyYXBFeGNlcHRpb25dIGluIGpzX2hlbHBlci5kYXJ0LgogICAgICBzdGF0ZW1lbnRzLmFkZChqcy5zdGF0ZW1lbnQoJ2lmIChyZWNlaXZlciA9PSBudWxsKSByZXR1cm4gcmVjZWl2ZXInKSk7CiAgICB9CiAgICBpZiAoaGFzQm9vbCkgewogICAgICBzdGF0ZW1lbnRzLmFkZChidWlsZEludGVyY2VwdG9yQ2hlY2soX2NvbW1vbkVsZW1lbnRzLmpzQm9vbENsYXNzKSk7CiAgICB9CiAgICAvLyBUT0RPKGFoZSk6IEl0IG1pZ2h0IGJlIGZhc3RlciB0byBjaGVjayBmb3IgQXJyYXkgYmVmb3JlCiAgICAvLyBmdW5jdGlvbiBhbmQgYm9vbC4KICAgIGlmIChoYXNBcnJheSkgewogICAgICBzdGF0ZW1lbnRzLmFkZChidWlsZEludGVyY2VwdG9yQ2hlY2soX2NvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcykpOwogICAgfQoKICAgIGlmIChoYXNOYXRpdmUpIHsKICAgICAgc3RhdGVtZW50cy5hZGQoanMuc3RhdGVtZW50KHInJyd7CiAgICAgICAgICBpZiAodHlwZW9mIHJlY2VpdmVyICE9ICJvYmplY3QiKSB7CiAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZWNlaXZlciA9PSAiZnVuY3Rpb24iICkgcmV0dXJuICM7CiAgICAgICAgICAgICAgcmV0dXJuIHJlY2VpdmVyOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHJlY2VpdmVyIGluc3RhbmNlb2YgIykgcmV0dXJuIHJlY2VpdmVyOwogICAgICAgICAgcmV0dXJuICMocmVjZWl2ZXIpOwogICAgICB9JycnLCBbCiAgICAgICAgaW50ZXJjZXB0b3JGb3IoX2NvbW1vbkVsZW1lbnRzLmpzSmF2YVNjcmlwdEZ1bmN0aW9uQ2xhc3MpLAogICAgICAgIF9lbWl0dGVyLmNvbnN0cnVjdG9yQWNjZXNzKF9jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcyksCiAgICAgICAgX2VtaXR0ZXIKICAgICAgICAgICAgLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKF9jb21tb25FbGVtZW50cy5nZXROYXRpdmVJbnRlcmNlcHRvck1ldGhvZCkKICAgICAgXSkpOwogICAgfSBlbHNlIHsKICAgICAgQ2xhc3NFbnRpdHkganNVbmtub3duID0gX2NvbW1vbkVsZW1lbnRzLmpzVW5rbm93bkphdmFTY3JpcHRPYmplY3RDbGFzczsKICAgICAgaWYgKF9jb2RlZ2VuV29ybGQuZGlyZWN0bHlJbnN0YW50aWF0ZWRDbGFzc2VzLmNvbnRhaW5zKGpzVW5rbm93bikpIHsKICAgICAgICBzdGF0ZW1lbnRzLmFkZChqcy5zdGF0ZW1lbnQoJ2lmICghKHJlY2VpdmVyIGluc3RhbmNlb2YgIykpIHJldHVybiAjOycsIFsKICAgICAgICAgIF9lbWl0dGVyLmNvbnN0cnVjdG9yQWNjZXNzKF9jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcyksCiAgICAgICAgICBpbnRlcmNlcHRvckZvcihqc1Vua25vd24pCiAgICAgICAgXSkpOwogICAgICB9CgogICAgICBzdGF0ZW1lbnRzLmFkZChqcy5zdGF0ZW1lbnQoJ3JldHVybiByZWNlaXZlcicpKTsKICAgIH0KCiAgICByZXR1cm4ganMoJycnZnVuY3Rpb24ocmVjZWl2ZXIpIHsgIzsgfScnJywgbmV3IGpzQXN0LkJsb2NrKHN0YXRlbWVudHMpKTsKICB9CgogIGpzQXN0LkNhbGwgX2dlbmVyYXRlSXNKc0luZGV4YWJsZUNhbGwoCiAgICAgIGpzQXN0LkV4cHJlc3Npb24gdXNlMSwganNBc3QuRXhwcmVzc2lvbiB1c2UyKSB7CiAgICBTdHJpbmcgZGlzcGF0Y2hQcm9wZXJ0eU5hbWUgPSBlbWJlZGRlZE5hbWVzLkRJU1BBVENIX1BST1BFUlRZX05BTUU7CiAgICBqc0FzdC5FeHByZXNzaW9uIGRpc3BhdGNoUHJvcGVydHkgPQogICAgICAgIF9lbWl0dGVyLmdlbmVyYXRlRW1iZWRkZWRHbG9iYWxBY2Nlc3MoZGlzcGF0Y2hQcm9wZXJ0eU5hbWUpOwoKICAgIC8vIFdlIHBhc3MgdGhlIGRpc3BhdGNoIHByb3BlcnR5IHJlY29yZCB0byB0aGUgaXNKc0luZGV4YWJsZQogICAgLy8gaGVscGVyIHJhdGhlciB0aGFuIHJlYWRpbmcgaXQgaW5zaWRlIHRoZSBoZWxwZXIgdG8gaW5jcmVhc2UgdGhlCiAgICAvLyBjaGFuY2Ugb2YgbWFraW5nIHRoZSBkaXNwYXRjaCByZWNvcmQgYWNjZXNzIG1vbm9tb3JwaGljLgogICAganNBc3QuUHJvcGVydHlBY2Nlc3MgcmVjb3JkID0KICAgICAgICBuZXcganNBc3QuUHJvcGVydHlBY2Nlc3ModXNlMiwgZGlzcGF0Y2hQcm9wZXJ0eSk7CgogICAgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiBhcmd1bWVudHMgPSA8anNBc3QuRXhwcmVzc2lvbj5bdXNlMSwgcmVjb3JkXTsKICAgIEZ1bmN0aW9uRW50aXR5IGhlbHBlciA9IF9jb21tb25FbGVtZW50cy5pc0pzSW5kZXhhYmxlOwogICAganNBc3QuRXhwcmVzc2lvbiBoZWxwZXJFeHByZXNzaW9uID0gX2VtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MoaGVscGVyKTsKICAgIHJldHVybiBuZXcganNBc3QuQ2FsbChoZWxwZXJFeHByZXNzaW9uLCBhcmd1bWVudHMpOwogIH0KCiAgLy8gUmV0dXJucyBhIHN0YXRlbWVudCB0aGF0IHRha2VzIGNhcmUgb2YgcGVyZm9ybWFuY2UgY3JpdGljYWwKICAvLyBjb21tb24gY2FzZSBmb3IgYSBvbmUtc2hvdCBpbnRlcmNlcHRvciwgb3IgbnVsbCBpZiB0aGVyZSBpcyBubwogIC8vIGZhc3QgcGF0aC4KICBqc0FzdC5TdGF0ZW1lbnQgX2Zhc3RQYXRoRm9yT25lU2hvdEludGVyY2VwdG9yKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgU2V0PENsYXNzRW50aXR5PiBjbGFzc2VzKSB7CiAgICBpZiAoc2VsZWN0b3IuaXNPcGVyYXRvcikgewogICAgICBTdHJpbmcgbmFtZSA9IHNlbGVjdG9yLm5hbWU7CiAgICAgIGlmIChuYW1lID09ICc9PScpIHsKICAgICAgICByZXR1cm4ganMuc3RhdGVtZW50KCcnJ3sKICAgICAgICAgIGlmIChyZWNlaXZlciA9PSBudWxsKSByZXR1cm4gYTAgPT0gbnVsbDsKICAgICAgICAgIGlmICh0eXBlb2YgcmVjZWl2ZXIgIT0gIm9iamVjdCIpCiAgICAgICAgICAgIHJldHVybiBhMCAhPSBudWxsICYmIHJlY2VpdmVyID09PSBhMDsKICAgICAgICB9JycnKTsKICAgICAgfQogICAgICBpZiAoIWNsYXNzZXMuY29udGFpbnMoX2NvbW1vbkVsZW1lbnRzLmpzSW50Q2xhc3MpICYmCiAgICAgICAgICAhY2xhc3Nlcy5jb250YWlucyhfY29tbW9uRWxlbWVudHMuanNOdW1iZXJDbGFzcykgJiYKICAgICAgICAgICFjbGFzc2VzLmNvbnRhaW5zKF9jb21tb25FbGVtZW50cy5qc0RvdWJsZUNsYXNzKSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGlmIChzZWxlY3Rvci5hcmd1bWVudENvdW50ID09IDEpIHsKICAgICAgICAvLyBUaGUgZm9sbG93aW5nIG9wZXJhdG9ycyBkbyBub3QgbWFwIHRvIGEgSmF2YVNjcmlwdCBvcGVyYXRvci4KICAgICAgICBpZiAobmFtZSA9PSAnfi8nIHx8IG5hbWUgPT0gJzw8JyB8fCBuYW1lID09ICclJyB8fCBuYW1lID09ICc+PicpIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBqc0FzdC5FeHByZXNzaW9uIHJlc3VsdCA9IGpzKCdyZWNlaXZlciAkbmFtZSBhMCcpOwogICAgICAgIGlmIChuYW1lID09ICcmJyB8fCBuYW1lID09ICd8JyB8fCBuYW1lID09ICdeJykgewogICAgICAgICAgcmVzdWx0ID0ganMoJyMgPj4+IDAnLCByZXN1bHQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4ganMuc3RhdGVtZW50KAogICAgICAgICAgICAnaWYgKHR5cGVvZiByZWNlaXZlciA9PSAibnVtYmVyIiAmJiB0eXBlb2YgYTAgPT0gIm51bWJlciIpJwogICAgICAgICAgICAnICByZXR1cm4gIzsnLAogICAgICAgICAgICByZXN1bHQpOwogICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJ3VuYXJ5LScpIHsKICAgICAgICByZXR1cm4ganMKICAgICAgICAgICAgLnN0YXRlbWVudCgnaWYgKHR5cGVvZiByZWNlaXZlciA9PSAibnVtYmVyIikgcmV0dXJuIC1yZWNlaXZlcicpOwogICAgICB9IGVsc2UgewogICAgICAgIGFzc2VydChuYW1lID09ICd+Jyk7CiAgICAgICAgcmV0dXJuIGpzLnN0YXRlbWVudCgnJycKICAgICAgICAgIGlmICh0eXBlb2YgcmVjZWl2ZXIgPT0gIm51bWJlciIgJiYgTWF0aC5mbG9vcihyZWNlaXZlcikgPT0gcmVjZWl2ZXIpCiAgICAgICAgICAgIHJldHVybiAofnJlY2VpdmVyKSA+Pj4gMDsKICAgICAgICAgICcnJyk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuaXNJbmRleCB8fCBzZWxlY3Rvci5pc0luZGV4U2V0KSB7CiAgICAgIC8vIEZvciBhbiBpbmRleCBvcGVyYXRpb24sIHRoaXMgY29kZSBnZW5lcmF0ZXM6CiAgICAgIC8vCiAgICAgIC8vICAgIGlmICh0eXBlb2YgYTAgPT09ICJudW1iZXIiKSB7CiAgICAgIC8vICAgICAgaWYgKHJlY2VpdmVyLmNvbnN0cnVjdG9yID09IEFycmF5IHx8CiAgICAgIC8vICAgICAgICAgIHR5cGVvZiByZWNlaXZlciA9PSAic3RyaW5nIikgewogICAgICAvLyAgICAgICAgaWYgKGEwID4+PiAwID09PSBhMCAmJiBhMCA8IHJlY2VpdmVyLmxlbmd0aCkgewogICAgICAvLyAgICAgICAgICByZXR1cm4gcmVjZWl2ZXJbYTBdOwogICAgICAvLyAgICAgICAgfQogICAgICAvLyAgICAgIH0KICAgICAgLy8gICAgfQogICAgICAvLwogICAgICAvLyBGb3IgYW4gaW5kZXggc2V0IG9wZXJhdGlvbiwgdGhpcyBjb2RlIGdlbmVyYXRlczoKICAgICAgLy8KICAgICAgLy8gICAgaWYgKHR5cGVvZiBhMCA9PT0gIm51bWJlciIpIHsKICAgICAgLy8gICAgICBpZiAocmVjZWl2ZXIuY29uc3RydWN0b3IgPT0gQXJyYXkgJiYgIXJlY2VpdmVyLmltbXV0YWJsZSRsaXN0KSB7CiAgICAgIC8vICAgICAgICBpZiAoYTAgPj4+IDAgPT09IGEwICYmIGEwIDwgcmVjZWl2ZXIubGVuZ3RoKSB7CiAgICAgIC8vICAgICAgICAgIHJldHVybiByZWNlaXZlclthMF0gPSBhMTsKICAgICAgLy8gICAgICAgIH0KICAgICAgLy8gICAgICB9CiAgICAgIC8vICAgIH0KICAgICAgYm9vbCBjb250YWluc0FycmF5ID0gY2xhc3Nlcy5jb250YWlucyhfY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzKTsKICAgICAgYm9vbCBjb250YWluc1N0cmluZyA9IGNsYXNzZXMuY29udGFpbnMoX2NvbW1vbkVsZW1lbnRzLmpzU3RyaW5nQ2xhc3MpOwogICAgICBib29sIGNvbnRhaW5zSnNJbmRleGFibGUgPSBfY2xvc2VkV29ybGQKICAgICAgICAgICAgICAuaXNJbXBsZW1lbnRlZChfY29tbW9uRWxlbWVudHMuanNJbmRleGluZ0JlaGF2aW9ySW50ZXJmYWNlKSAmJgogICAgICAgICAgY2xhc3Nlcy5hbnkoKGNscykgewogICAgICAgICAgICByZXR1cm4gX2Nsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5CiAgICAgICAgICAgICAgICAuaXNTdWJ0eXBlT2YoY2xzLCBfY29tbW9uRWxlbWVudHMuanNJbmRleGluZ0JlaGF2aW9ySW50ZXJmYWNlKTsKICAgICAgICAgIH0pOwogICAgICAvLyBUaGUgaW5kZXggc2V0IG9wZXJhdG9yIHJlcXVpcmVzIGEgY2hlY2sgb24gaXRzIHNldCB2YWx1ZSBpbgogICAgICAvLyBjaGVja2VkIG1vZGUsIHNvIHdlIGRvbid0IG9wdGltaXplIHRoZSBpbnRlcmNlcHRvciBpZiB0aGUKICAgICAgLy8gX2NvbXBpbGVyIGhhcyB0eXBlIGFzc2VydGlvbnMgZW5hYmxlZC4KICAgICAgaWYgKHNlbGVjdG9yLmlzSW5kZXhTZXQgJiYKICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1cHBvcnQgYW5ub3RhdGlvbnMgb24gdGhlIHBvc3NpYmxlIHRhcmdldHMKICAgICAgICAgIC8vIGFuZCB1c2VkIHRoZWlyIHBhcmFtZXRlciBjaGVjayBwb2xpY3kgaGVyZS4KICAgICAgICAgIChfY2xvc2VkV29ybGQuYW5ub3RhdGlvbnNEYXRhCiAgICAgICAgICAgICAgICAgIC5nZXRQYXJhbWV0ZXJDaGVja1BvbGljeShudWxsKQogICAgICAgICAgICAgICAgICAuaXNFbWl0dGVkIHx8CiAgICAgICAgICAgICAgIWNvbnRhaW5zQXJyYXkpKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgaWYgKCFjb250YWluc0FycmF5ICYmICFjb250YWluc1N0cmluZykgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGpzQXN0LkV4cHJlc3Npb24gYXJyYXlDaGVjayA9IGpzKCdyZWNlaXZlci5jb25zdHJ1Y3RvciA9PSBBcnJheScpOwoKICAgICAgLy8gTGF6eSBnZW5lcmF0aW9uIG9mIHRoZSBpbmRleGFibGUgY2hlY2suIElmIGluZGV4YWJsZSBiZWhhdmlvciBpc24ndAogICAgICAvLyB1c2VkLCB0aGUgaXNKc0luZGV4YWJsZSBmdW5jdGlvbiBpc24ndCBwYXJ0IG9mIHRoZSBjbG9zZWQgd29ybGQuCiAgICAgIGpzQXN0LkV4cHJlc3Npb24gZ2VuZXJpY0luZGV4YWJsZUNoZWNrKCkgPT4KICAgICAgICAgIF9nZW5lcmF0ZUlzSnNJbmRleGFibGVDYWxsKGpzKCdyZWNlaXZlcicpLCBqcygncmVjZWl2ZXInKSk7CgogICAgICBqc0FzdC5FeHByZXNzaW9uIG9yRXhwKGxlZnQsIHJpZ2h0KSB7CiAgICAgICAgcmV0dXJuIGxlZnQgPT0gbnVsbCA/IHJpZ2h0IDoganMoJyMgfHwgIycsIFtsZWZ0LCByaWdodF0pOwogICAgICB9CgogICAgICBpZiAoc2VsZWN0b3IuaXNJbmRleCkgewogICAgICAgIGpzQXN0LkV4cHJlc3Npb24gdHlwZUNoZWNrOwogICAgICAgIGlmIChjb250YWluc0FycmF5KSB7CiAgICAgICAgICB0eXBlQ2hlY2sgPSBhcnJheUNoZWNrOwogICAgICAgIH0KCiAgICAgICAgaWYgKGNvbnRhaW5zU3RyaW5nKSB7CiAgICAgICAgICB0eXBlQ2hlY2sgPSBvckV4cCh0eXBlQ2hlY2ssIGpzKCd0eXBlb2YgcmVjZWl2ZXIgPT0gInN0cmluZyInKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoY29udGFpbnNKc0luZGV4YWJsZSkgewogICAgICAgICAgdHlwZUNoZWNrID0gb3JFeHAodHlwZUNoZWNrLCBnZW5lcmljSW5kZXhhYmxlQ2hlY2soKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4ganMuc3RhdGVtZW50KCcnJwogICAgICAgICAgaWYgKHR5cGVvZiBhMCA9PT0gIm51bWJlciIpCiAgICAgICAgICAgIGlmICgjKQogICAgICAgICAgICAgIGlmICgoYTAgPj4+IDApID09PSBhMCAmJiBhMCA8IHJlY2VpdmVyLmxlbmd0aCkKICAgICAgICAgICAgICAgIHJldHVybiByZWNlaXZlclthMF07CiAgICAgICAgICAnJycsIHR5cGVDaGVjayk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAganNBc3QuRXhwcmVzc2lvbiB0eXBlQ2hlY2s7CiAgICAgICAgaWYgKGNvbnRhaW5zQXJyYXkpIHsKICAgICAgICAgIHR5cGVDaGVjayA9IGFycmF5Q2hlY2s7CiAgICAgICAgfQoKICAgICAgICBpZiAoY29udGFpbnNKc0luZGV4YWJsZSkgewogICAgICAgICAgdHlwZUNoZWNrID0gb3JFeHAodHlwZUNoZWNrLCBnZW5lcmljSW5kZXhhYmxlQ2hlY2soKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4ganMuc3RhdGVtZW50KHInJycKICAgICAgICAgIGlmICh0eXBlb2YgYTAgPT09ICJudW1iZXIiKQogICAgICAgICAgICBpZiAoIyAmJiAhcmVjZWl2ZXIuaW1tdXRhYmxlJGxpc3QgJiYKICAgICAgICAgICAgICAgIChhMCA+Pj4gMCkgPT09IGEwICYmIGEwIDwgcmVjZWl2ZXIubGVuZ3RoKQogICAgICAgICAgICAgIHJldHVybiByZWNlaXZlclthMF0gPSBhMTsKICAgICAgICAgICcnJywgdHlwZUNoZWNrKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pc0NhbGwpIHsKICAgICAgaWYgKHNlbGVjdG9yLm5hbWUgPT0gJ2FicycgJiYgc2VsZWN0b3IuYXJndW1lbnRDb3VudCA9PSAwKSB7CiAgICAgICAgcmV0dXJuIGpzLnN0YXRlbWVudChyJycnCiAgICAgICAgICBpZiAodHlwZW9mIHJlY2VpdmVyID09PSAibnVtYmVyIikgcmV0dXJuIE1hdGguYWJzKHJlY2VpdmVyKTsKICAgICAgICAnJycpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLmlzR2V0dGVyKSB7CiAgICAgIGlmIChzZWxlY3Rvci5uYW1lID09ICdzaWduJykgewogICAgICAgIHJldHVybiBqcy5zdGF0ZW1lbnQocicnJwogICAgICAgICAgaWYgKHR5cGVvZiByZWNlaXZlciA9PT0gIm51bWJlciIpCiAgICAgICAgICAgICByZXR1cm4gcmVjZWl2ZXIgPiAwID8gMSA6IHJlY2VpdmVyIDwgMCA/IC0xIDogcmVjZWl2ZXI7CiAgICAgICAgJycnKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBqc0FzdC5FeHByZXNzaW9uIGdlbmVyYXRlT25lU2hvdEludGVyY2VwdG9yKE9uZVNob3RJbnRlcmNlcHRvciBpbnRlcmNlcHRvcikgewogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBpbnRlcmNlcHRvci5zZWxlY3RvcjsKICAgIFNldDxDbGFzc0VudGl0eT4gY2xhc3NlcyA9IGludGVyY2VwdG9yLmNsYXNzZXM7CiAgICBqc0FzdC5OYW1lIGdldEludGVyY2VwdG9yTmFtZSA9IF9uYW1lci5uYW1lRm9yR2V0SW50ZXJjZXB0b3IoY2xhc3Nlcyk7CgogICAgTGlzdDxTdHJpbmc+IHBhcmFtZXRlck5hbWVzID0gPFN0cmluZz5bXTsKICAgIHBhcmFtZXRlck5hbWVzLmFkZCgncmVjZWl2ZXInKTsKCiAgICBpZiAoc2VsZWN0b3IuaXNTZXR0ZXIpIHsKICAgICAgcGFyYW1ldGVyTmFtZXMuYWRkKCd2YWx1ZScpOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZWxlY3Rvci5hcmd1bWVudENvdW50OyBpKyspIHsKICAgICAgICBwYXJhbWV0ZXJOYW1lcy5hZGQoJ2EkaScpOwogICAgICB9CiAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IHNlbGVjdG9yLnR5cGVBcmd1bWVudENvdW50OyBpKyspIHsKICAgICAgICBwYXJhbWV0ZXJOYW1lcy5hZGQoJ1wkVCRpJyk7CiAgICAgIH0KICAgIH0KCiAgICBqc0FzdC5OYW1lIGludm9jYXRpb25OYW1lID0gX25hbWVyLmludm9jYXRpb25OYW1lKHNlbGVjdG9yKTsKICAgIFN0cmluZyBnbG9iYWxPYmplY3QgPQogICAgICAgIF9uYW1lci5nbG9iYWxPYmplY3RGb3JMaWJyYXJ5KF9jb21tb25FbGVtZW50cy5pbnRlcmNlcHRvcnNMaWJyYXJ5KTsKCiAgICBqc0FzdC5TdGF0ZW1lbnQgb3B0aW1pemVkUGF0aCA9CiAgICAgICAgX2Zhc3RQYXRoRm9yT25lU2hvdEludGVyY2VwdG9yKHNlbGVjdG9yLCBjbGFzc2VzKTsKICAgIGlmIChvcHRpbWl6ZWRQYXRoID09IG51bGwpIG9wdGltaXplZFBhdGggPSBqcy5zdGF0ZW1lbnQoJzsnKTsKCiAgICByZXR1cm4ganMoJ2Z1bmN0aW9uKCMpIHsgIzsgcmV0dXJuICMuIyhyZWNlaXZlcikuIygjKSB9JywgWwogICAgICBwYXJhbWV0ZXJOYW1lcywKICAgICAgb3B0aW1pemVkUGF0aCwKICAgICAgZ2xvYmFsT2JqZWN0LAogICAgICBnZXRJbnRlcmNlcHRvck5hbWUsCiAgICAgIGludm9jYXRpb25OYW1lLAogICAgICBwYXJhbWV0ZXJOYW1lcwogICAgXSk7CiAgfQoKICBqc0FzdC5BcnJheUluaXRpYWxpemVyIGdlbmVyYXRlVHlwZVRvSW50ZXJjZXB0b3JNYXAoKSB7CiAgICAvLyBUT0RPKHNyYSk6IFBlcmhhcHMgaW5qZWN0IGEgY29uc3RhbnQgaW5zdGVhZD8KICAgIEN1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzIGFuYWx5c2lzID0gX2N1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzOwogICAgaWYgKCFhbmFseXNpcy5uZWVkc1RhYmxlKSByZXR1cm4gbnVsbDsKCiAgICBMaXN0PGpzQXN0LkV4cHJlc3Npb24+IGVsZW1lbnRzID0gPGpzQXN0LkV4cHJlc3Npb24+W107CiAgICBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBjb25zdGFudHMgPQogICAgICAgIF9jb2RlZ2VuV29ybGQuZ2V0Q29uc3RhbnRzRm9yRW1pc3Npb24oX2VtaXR0ZXIuY29tcGFyZUNvbnN0YW50cyk7CiAgICBmb3IgKENvbnN0YW50VmFsdWUgY29uc3RhbnQgaW4gY29uc3RhbnRzKSB7CiAgICAgIGlmIChjb25zdGFudCBpcyBUeXBlQ29uc3RhbnRWYWx1ZSAmJgogICAgICAgICAgY29uc3RhbnQucmVwcmVzZW50ZWRUeXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgICBJbnRlcmZhY2VUeXBlIHR5cGUgPSBjb25zdGFudC5yZXByZXNlbnRlZFR5cGU7CiAgICAgICAgQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50ID0gdHlwZS5lbGVtZW50OwogICAgICAgIGlmICghYW5hbHlzaXMubmVlZHNDbGFzcyhjbGFzc0VsZW1lbnQpKSBjb250aW51ZTsKCiAgICAgICAgZWxlbWVudHMuYWRkKF9lbWl0dGVyLmNvbnN0YW50UmVmZXJlbmNlKGNvbnN0YW50KSk7CiAgICAgICAgZWxlbWVudHMuYWRkKF9lbWl0dGVyLmludGVyY2VwdG9yQ2xhc3NBY2Nlc3MoY2xhc3NFbGVtZW50KSk7CgogICAgICAgIC8vIENyZWF0ZSBKYXZhU2NyaXB0IE9iamVjdCBtYXAgZm9yIGJ5LW5hbWUgbG9va3VwIG9mIGdlbmVyYXRpdmUKICAgICAgICAvLyBjb25zdHJ1Y3RvcnMuICBGb3IgZXhhbXBsZSwgdGhlIGNsYXNzIEEgaGFzIHRocmVlIGdlbmVyYXRpdmUKICAgICAgICAvLyBjb25zdHJ1Y3RvcnMKICAgICAgICAvLwogICAgICAgIC8vICAgICBjbGFzcyBBIHsKICAgICAgICAvLyAgICAgICBBKCkge30KICAgICAgICAvLyAgICAgICBBLmZvbygpIHt9CiAgICAgICAgLy8gICAgICAgQS5iYXIoKSB7fQogICAgICAgIC8vICAgICB9CiAgICAgICAgLy8KICAgICAgICAvLyBXaGljaCBhcmUgZGVzY3JpYmVkIGJ5IHRoZSBtYXAKICAgICAgICAvLwogICAgICAgIC8vICAgICB7IiI6IEEuQSQsICJmb28iOiBBLkEkZm9vLCAiYmFyIjogQS5BJGJhcn0KICAgICAgICAvLwogICAgICAgIC8vIFdlIGV4cGVjdCBtb3N0IG9mIHRoZSB0aW1lIHRoZSBtYXAgd2lsbCBiZSBhIHNpbmdsZXRvbi4KICAgICAgICB2YXIgcHJvcGVydGllcyA9IDxqc0FzdC5Qcm9wZXJ0eT5bXTsKICAgICAgICBmb3IgKENvbnN0cnVjdG9yRW50aXR5IG1lbWJlciBpbiBhbmFseXNpcy5jb25zdHJ1Y3RvcnMoY2xhc3NFbGVtZW50KSkgewogICAgICAgICAgcHJvcGVydGllcy5hZGQobmV3IGpzQXN0LlByb3BlcnR5KAogICAgICAgICAgICAgIGpzLnN0cmluZyhtZW1iZXIubmFtZSksIF9lbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKG1lbWJlcikpKTsKICAgICAgICB9CgogICAgICAgIHZhciBtYXAgPSBuZXcganNBc3QuT2JqZWN0SW5pdGlhbGl6ZXIocHJvcGVydGllcyk7CiAgICAgICAgZWxlbWVudHMuYWRkKG1hcCk7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbmV3IGpzQXN0LkFycmF5SW5pdGlhbGl6ZXIoZWxlbWVudHMpOwogIH0KfQqB0QBOTjwBNwFJASIjJDQhIC41KCkuITEyKgEuASEoGjYWRiQjARwcFSMTKxoaATkBSAExLzQBNzcGAT49PSI4MDo2MjIgODg2Ozk5OTcsDyAIUAYBGxocGRocHBxRAScxODY5GTMYNRoyFzMYNRo1Gg1PMgtIUUxKTQEgSgoIBhUYBiIBRC8kBgE8ARUiAURHRSJHKiwBFCc8Fg5RD0UIEVEGARVMBhNKDUhALk0GE0oGPxoUSwYBFSgtPB8MNh4OQ0ERTgsNTktRQyQNCAE3BgFNBAEpNkgoRQFBR0AiOgFJO084BAFBRBAyNR8jGiEzKzIPCDs+PhUIKUhLFwo7OSoKHUgbFSUSTQ8dIE8mEAg6NgkqMzE/JxIQDgk6CSpPPywSEA5LTS5NHi9QDkVDMCFOOSgxICEVCC8VCEkBTUoyRgEsQwgBHiQdIgoBHksKASNBCgEgJhM9JRsPJB0iCgEjQQoBISYxOygbCCJDIUcOCCQlISxFDggGEQQBUC40SwEuJAEdIw05Iwg+JQgGAUEaTAEkO0IBQBYVFBoWFQgEATo1TSsBPChKMCs3NzE6ATxFAUlIGAsZGBwcEQsqCzoLQy1QLU8KATsbCAYBMQQCAT9wYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL2ludGVyY2VwdG9yX3N0dWJfZ2VuZXJhdG9yLmRhcnRGc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfZW1pdHRlci9tYWluX2NhbGxfc3R1Yl9nZW5lcmF0b3IuZGFydIizLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5qc19lbWl0dGVyLm1haW5fY2FsbF9zdHViX2dlbmVyYXRvcjsKCmltcG9ydCAncGFja2FnZTpqc19ydW50aW1lL3NoYXJlZC9lbWJlZGRlZF9uYW1lcy5kYXJ0JyBhcyBlbWJlZGRlZE5hbWVzOwoKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqc0FzdDsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBzaG93IGpzOwoKaW1wb3J0ICdjb2RlX2VtaXR0ZXJfdGFzay5kYXJ0JyBzaG93IEVtaXR0ZXI7CgpjbGFzcyBNYWluQ2FsbFN0dWJHZW5lcmF0b3IgewogIHN0YXRpYyBqc0FzdC5TdGF0ZW1lbnQgZ2VuZXJhdGVJbnZva2VNYWluKAogICAgICBFbWl0dGVyIGVtaXR0ZXIsIEZ1bmN0aW9uRW50aXR5IG1haW4pIHsKICAgIGpzQXN0LkV4cHJlc3Npb24gbWFpbkNhbGxDbG9zdXJlID0gZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcyhtYWluKTsKICAgIGpzQXN0LkV4cHJlc3Npb24gY3VycmVudFNjcmlwdEFjY2VzcyA9CiAgICAgICAgZW1pdHRlci5nZW5lcmF0ZUVtYmVkZGVkR2xvYmFsQWNjZXNzKGVtYmVkZGVkTmFtZXMuQ1VSUkVOVF9TQ1JJUFQpOwoKICAgIC8vIFRoaXMgY29kZSBmaW5kcyB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBzY3JpcHQgYnkgbGlzdGVuaW5nIHRvIHRoZQogICAgLy8gb25sb2FkIGV2ZW50IG9mIGFsbCBzY3JpcHQgdGFncyBhbmQgZ2V0dGluZyB0aGUgZmlyc3Qgc2NyaXB0IHdoaWNoCiAgICAvLyBmaW5pc2hlcy4gU2luY2Ugb25sb2FkIGlzIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciBleGVjdXRpb24gdGhpcyBzaG91bGQKICAgIC8vIG5vdCBzdWJzdGFudGlhbGx5IGNoYW5nZSBleGVjdXRpb24gb3JkZXIuCiAgICByZXR1cm4ganMuc3RhdGVtZW50KCcnJwogICAgICAoZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIGNhbGxiYWNrKG51bGwpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAvLyBXaGVuIHJ1bm5pbmcgYXMgYSBjb250ZW50LXNjcmlwdCBvZiBhIGNocm9tZS1leHRlbnNpb24gdGhlCiAgICAgICAgLy8gJ2N1cnJlbnRTY3JpcHQnIGlzIGBudWxsYCAoYnV0IG5vdCB1bmRlZmluZWQpLgogICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQuY3VycmVudFNjcmlwdCAhPSAndW5kZWZpbmVkJykgewogICAgICAgICAgY2FsbGJhY2soZG9jdW1lbnQuY3VycmVudFNjcmlwdCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICB2YXIgc2NyaXB0cyA9IGRvY3VtZW50LnNjcmlwdHM7CiAgICAgICAgZnVuY3Rpb24gb25Mb2FkKGV2ZW50KSB7CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgc2NyaXB0c1tpXS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIiwgb25Mb2FkLCBmYWxzZSk7CiAgICAgICAgICB9CiAgICAgICAgICBjYWxsYmFjayhldmVudC50YXJnZXQpOwogICAgICAgIH0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgIHNjcmlwdHNbaV0uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIG9uTG9hZCwgZmFsc2UpOwogICAgICAgIH0KICAgICAgfSkoZnVuY3Rpb24oY3VycmVudFNjcmlwdCkgewogICAgICAgICNjdXJyZW50U2NyaXB0ID0gY3VycmVudFNjcmlwdDsKCiAgICAgICAgaWYgKHR5cGVvZiBkYXJ0TWFpblJ1bm5lciA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgZGFydE1haW5SdW5uZXIoI21haW5DYWxsQ2xvc3VyZSwgW10pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAjbWFpbkNhbGxDbG9zdXJlKFtdKTsKICAgICAgICB9CiAgICAgIH0pJycnLCB7CiAgICAgICdjdXJyZW50U2NyaXB0JzogY3VycmVudFNjcmlwdEFjY2VzcywKICAgICAgJ21haW5DYWxsQ2xvc3VyZSc6IG1haW5DYWxsQ2xvc3VyZQogICAgfSk7CiAgfQp9CkAATk48ATUBSQEkISABLgEeLS5LK0wBSkpQMRwdLxoSCkY6PCwSCgEoITVDDCIKMz4KIygBNDARIAoPLCkIBAIBPXBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvbWFpbl9jYWxsX3N0dWJfZ2VuZXJhdG9yLmRhcnQ+c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfZW1pdHRlci9uYXRpdmVfZ2VuZXJhdG9yLmRhcnShIS8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuanNfZW1pdHRlci5uYXRpdmVfZ2VuZXJhdG9yOwoKaW1wb3J0ICdwYWNrYWdlOmpzX3J1bnRpbWUvc2hhcmVkL2VtYmVkZGVkX25hbWVzLmRhcnQnIGFzIGVtYmVkZGVkTmFtZXM7CgppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIGFzIGpzQXN0OwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIHNob3cganM7CmltcG9ydCAnLi4vanNfYmFja2VuZC9iYWNrZW5kX3VzYWdlLmRhcnQnIHNob3cgQmFja2VuZFVzYWdlOwoKaW1wb3J0ICdtb2RlbC5kYXJ0JzsKCmNsYXNzIE5hdGl2ZUdlbmVyYXRvciB7CiAgc3RhdGljIGJvb2wgbmVlZHNJc29sYXRlQWZmaW5pdHlUYWdJbml0aWFsaXphdGlvbihCYWNrZW5kVXNhZ2UgYmFja2VuZFVzYWdlKSB7CiAgICByZXR1cm4gYmFja2VuZFVzYWdlLm5lZWRUb0luaXRpYWxpemVJc29sYXRlQWZmaW5pdHlUYWc7CiAgfQoKICAvLy8gR2VuZXJhdGVzIHRoZSBjb2RlIGZvciBpc29sYXRlIGFmZmluaXR5IHRhZ3MuCiAgLy8vCiAgLy8vIEluZGVwZW5kZW50bHkgRGFydCBwcm9ncmFtcyBvbiB0aGUgc2FtZSBwYWdlIG11c3Qgbm90IGludGVyZmVyZSBhbmQKICAvLy8gdGhpcyBjb2RlIHNldHMgdXAgdGhlIHZhcmlhYmxlcyBuZWVkZWQgdG8gZ3VhcmFudGVlIHRoYXQgYmVoYXZpb3IuCiAgc3RhdGljIGpzQXN0LlN0YXRlbWVudCBnZW5lcmF0ZUlzb2xhdGVBZmZpbml0eVRhZ0luaXRpYWxpemF0aW9uKAogICAgICBCYWNrZW5kVXNhZ2UgYmFja2VuZFVzYWdlLAogICAgICBqc0FzdC5FeHByZXNzaW9uIGdlbmVyYXRlRW1iZWRkZWRHbG9iYWxBY2Nlc3MoU3RyaW5nIGdsb2JhbCksCiAgICAgIGpzQXN0LkV4cHJlc3Npb24gaW50ZXJuU3RyaW5nRnVuY3Rpb24pIHsKICAgIGFzc2VydChiYWNrZW5kVXNhZ2UubmVlZFRvSW5pdGlhbGl6ZUlzb2xhdGVBZmZpbml0eVRhZyk7CgogICAganNBc3QuRXhwcmVzc2lvbiBnZXRJc29sYXRlVGFnQWNjZXNzID0KICAgICAgICBnZW5lcmF0ZUVtYmVkZGVkR2xvYmFsQWNjZXNzKGVtYmVkZGVkTmFtZXMuR0VUX0lTT0xBVEVfVEFHKTsKICAgIGpzQXN0LkV4cHJlc3Npb24gaXNvbGF0ZVRhZ0FjY2VzcyA9CiAgICAgICAgZ2VuZXJhdGVFbWJlZGRlZEdsb2JhbEFjY2VzcyhlbWJlZGRlZE5hbWVzLklTT0xBVEVfVEFHKTsKICAgIGpzQXN0LkV4cHJlc3Npb24gZGlzcGF0Y2hQcm9wZXJ0eU5hbWVBY2Nlc3MgPQogICAgICAgIGdlbmVyYXRlRW1iZWRkZWRHbG9iYWxBY2Nlc3MoZW1iZWRkZWROYW1lcy5ESVNQQVRDSF9QUk9QRVJUWV9OQU1FKTsKCiAgICByZXR1cm4ganMuc3RhdGVtZW50KCcnJwogICAgICAhZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGludGVybiA9ICNpbnRlcm5TdHJpbmdGdW5jdGlvbjsKCiAgICAgICAgI2dldElzb2xhdGVUYWcgPSBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgICByZXR1cm4gaW50ZXJuKCJfX19kYXJ0XyIgKyBuYW1lICsgI2lzb2xhdGVUYWcpOwogICAgICAgIH07CgogICAgICAgIC8vIFRvIGVuc3VyZSB0aGF0IGRpZmZlcmVudCBwcm9ncmFtcyBsb2FkZWQgaW50byB0aGUgc2FtZSBjb250ZXh0IChwYWdlKQogICAgICAgIC8vIHVzZSBkaXN0aW5jdCBkaXNwYXRjaCBwcm9wZXJpZXMsIHdlIHBsYWNlIGFuIG9iamVjdCBvbiBgT2JqZWN0YCB0bwogICAgICAgIC8vIGNvbnRhaW4gdGhlIG5hbWVzIGFscmVhZHkgaW4gdXNlLgogICAgICAgIHZhciB0YWJsZVByb3BlcnR5ID0gIl9fX2RhcnRfaXNvbGF0ZV90YWdzXyI7CiAgICAgICAgdmFyIHVzZWRQcm9wZXJ0aWVzID0gT2JqZWN0W3RhYmxlUHJvcGVydHldIHx8CiAgICAgICAgICAgIChPYmplY3RbdGFibGVQcm9wZXJ0eV0gPSBPYmplY3QuY3JlYXRlKG51bGwpKTsKCiAgICAgICAgdmFyIHJvb3RQcm9wZXJ0eSA9ICJfJHtnZW5lcmF0ZUlzb2xhdGVUYWdSb290KCl9IjsKICAgICAgICBmb3IgKHZhciBpID0gMDsgOyBpKyspIHsKICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IGludGVybihyb290UHJvcGVydHkgKyAiXyIgKyBpICsgIl8iKTsKICAgICAgICAgIGlmICghKHByb3BlcnR5IGluIHVzZWRQcm9wZXJ0aWVzKSkgewogICAgICAgICAgICB1c2VkUHJvcGVydGllc1twcm9wZXJ0eV0gPSAxOwogICAgICAgICAgICAjaXNvbGF0ZVRhZyA9IHByb3BlcnR5OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCNpbml0aWFsaXplRGlzcGF0Y2hQcm9wZXJ0eSkgewogICAgICAgICAgI2Rpc3BhdGNoUHJvcGVydHlOYW1lID0gI2dldElzb2xhdGVUYWcoImRpc3BhdGNoX3JlY29yZCIpOwogICAgICAgIH0KICAgICAgfSgpOwogICAgJycnLCB7CiAgICAgICdpbml0aWFsaXplRGlzcGF0Y2hQcm9wZXJ0eSc6CiAgICAgICAgICBiYWNrZW5kVXNhZ2UubmVlZFRvSW5pdGlhbGl6ZURpc3BhdGNoUHJvcGVydHksCiAgICAgICdpbnRlcm5TdHJpbmdGdW5jdGlvbic6IGludGVyblN0cmluZ0Z1bmN0aW9uLAogICAgICAnZ2V0SXNvbGF0ZVRhZyc6IGdldElzb2xhdGVUYWdBY2Nlc3MsCiAgICAgICdpc29sYXRlVGFnJzogaXNvbGF0ZVRhZ0FjY2VzcywKICAgICAgJ2Rpc3BhdGNoUHJvcGVydHlOYW1lJzogZGlzcGF0Y2hQcm9wZXJ0eU5hbWVBY2Nlc3MKICAgIH0pOwogIH0KCiAgc3RhdGljIFN0cmluZyBnZW5lcmF0ZUlzb2xhdGVUYWdSb290KCkgewogICAgLy8gVE9ETyhzcmEpOiBNRDUgb2YgY29udHJpYnV0aW5nIHNvdXJjZSBjb2RlIG9yIFVSSXM/CiAgICByZXR1cm4gJ1p4WXhYJzsKICB9CgogIC8vLyBFbmNvZGVzIHRoZSBjb2xsZWN0ZWQgbmF0aXZlIGluZm9ybWF0aW9uIHNvIHRoYXQgaXQgY2FuIGJlIHRyZWF0ZWQgYnkKICAvLy8gdGhlIG5hdGl2ZSBpbmZvLWhhbmRsZXIgYmVsb3cuCiAgLy8vCiAgLy8vIFRoZSBlbmNvZGVkIGluZm9ybWF0aW9uIGhhcyB0aGUgZm9ybToKICAvLy8KICAvLyAgICAiJSI6ICJsZWFmVGFnMXxsZWFmVGFnMnwuLi47bm9ubGVhZlRhZzF8Li4uO0NsYXNzMXxDbGFzczJ8Li4uIiwKICAvLwogIC8vIElmIHRoZXJlIGlzIG5vIGRhdGEgZm9sbG93aW5nIGEgc2VtaWNvbG9uLCB0aGUgc2VtaWNvbG9uIGNhbiBiZSBvbWl0dGVkLgogIHN0YXRpYyBqc0FzdC5FeHByZXNzaW9uIGVuY29kZU5hdGl2ZUluZm8oQ2xhc3MgY2xzKSB7CiAgICBMaXN0PFN0cmluZz4gbGVhZlRhZ3MgPSBjbHMubmF0aXZlTGVhZlRhZ3M7CiAgICBMaXN0PFN0cmluZz4gbm9uTGVhZlRhZ3MgPSBjbHMubmF0aXZlTm9uTGVhZlRhZ3M7CiAgICBMaXN0PENsYXNzPiBleHRlbnNpb25zID0gY2xzLm5hdGl2ZUV4dGVuc2lvbnM7CgogICAgU3RyaW5nIGZvcm1hdFRhZ3MoSXRlcmFibGU8U3RyaW5nPiB0YWdzKSB7CiAgICAgIGlmICh0YWdzID09IG51bGwpIHJldHVybiAnJzsKICAgICAgcmV0dXJuICh0YWdzLnRvTGlzdCgpLi5zb3J0KCkpLmpvaW4oJ3wnKTsKICAgIH0KCiAgICBTdHJpbmcgbGVhZlN0ciA9IGZvcm1hdFRhZ3MobGVhZlRhZ3MpOwogICAgU3RyaW5nIG5vbkxlYWZTdHIgPSBmb3JtYXRUYWdzKG5vbkxlYWZUYWdzKTsKCiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKGxlYWZTdHIpOwogICAgaWYgKG5vbkxlYWZTdHIgIT0gJycpIHsKICAgICAgc2IuLndyaXRlKCc7JykuLndyaXRlKG5vbkxlYWZTdHIpOwogICAgfQoKICAgIFN0cmluZyBlbmNvZGluZyA9IHNiLnRvU3RyaW5nKCk7CgogICAgaWYgKGNscy5pc05hdGl2ZSB8fCBlbmNvZGluZyAhPSAnJyB8fCBleHRlbnNpb25zICE9IG51bGwpIHsKICAgICAgTGlzdDxqc0FzdC5MaXRlcmFsPiBwYXJ0cyA9IDxqc0FzdC5MaXRlcmFsPltqcy5zdHJpbmdQYXJ0KGVuY29kaW5nKV07CiAgICAgIGlmIChleHRlbnNpb25zICE9IG51bGwpIHsKICAgICAgICBwYXJ0cwogICAgICAgICAgLi5hZGQoanMuc3RyaW5nUGFydCgnOycpKQogICAgICAgICAgLi5hZGRBbGwoanMuam9pbkxpdGVyYWxzKAogICAgICAgICAgICAgIGV4dGVuc2lvbnMubWFwKChDbGFzcyBjbHMpID0+IGNscy5uYW1lKSwganMuc3RyaW5nUGFydCgnfCcpKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGpzQXN0LmNvbmNhdGVuYXRlU3RyaW5ncyhwYXJ0cywgYWRkUXVvdGVzOiB0cnVlKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8vIFJldHVybnMgYSBKYXZhU2NyaXB0IHRlbXBsYXRlIHRoYXQgZmlsbHMgdGhlIGVtYmVkZGVkIGdsb2JhbHMgcmVmZXJlbmNlZAogIC8vLyBieSBbaW50ZXJjZXB0b3JzQnlUYWdBY2Nlc3NdIGFuZCBbbGVhZlRhZ3NBY2Nlc3NdLgogIC8vLwogIC8vLyBUaGlzIGNvZGUgbXVzdCBiZSBpbnZva2VkIGZvciBldmVyeSBjbGFzcyB0aGF0IGhhcyBhIG5hdGl2ZSBpbmZvIGJlZm9yZQogIC8vLyB0aGUgcHJvZ3JhbSBzdGFydHMuCiAgLy8vCiAgLy8vIFRoZSBbaW5mb0FjY2Vzc10gcGFyYW1ldGVyIG11c3QgZXZhbHVhdGUgdG8gYW4gZXhwcmVzc2lvbiB0aGF0IGNvbnRhaW5zCiAgLy8vIHRoZSBpbmZvIChhcyBhIEphdmFTY3JpcHQgc3RyaW5nKS4KICAvLy8KICAvLy8gVGhlIFtjb25zdHJ1Y3RvckFjY2Vzc10gcGFyYW1ldGVyIG11c3QgZXZhbHVhdGUgdG8gYW4gZXhwcmVzc2lvbiB0aGF0CiAgLy8vIGNvbnRhaW5zIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgY2xhc3MuIFRoZSBjb25zdHJ1Y3RvcidzIHByb3RvdHlwZSBtdXN0CiAgLy8vIGJlIHNldCB1cC4KICAvLy8KICAvLy8gVGhlIFtzdWJjbGFzc1JlYWRHZW5lcmF0b3JdIGZ1bmN0aW9uIG11c3QgZXZhbHVhdGUgdG8gYSBKUyBleHByZXNzaW9uCiAgLy8vIHRoYXQgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgY29uc3RydWN0b3IgKHdpdGggZXZhbHVhdGVkIHByb3RvdHlwZSkKICAvLy8gb2YgdGhlIGdpdmVuIEpTIGV4cHJlc3Npb24uCiAgLy8vCiAgLy8vIFRoZSBbaW50ZXJjZXB0b3JzQnlUYWdBY2Nlc3NdIG11c3QgcG9pbnQgdG8gdGhlIGVtYmVkZGVkIGdsb2JhbAogIC8vLyBbZW1iZWRkZWROYW1lcy5JTlRFUkNFUFRPUlNfQllfVEFHXSBhbmQgbXVzdCBiZSBpbml0aWFsaXplZCB3aXRoIGFuIGVtcHR5CiAgLy8vIEpTIE9iamVjdCAodXNlZCBhcyBhIG1hcCkuCiAgLy8vCiAgLy8vIFNpbWlsYXJseSwgdGhlIFtsZWFmVGFnc0FjY2Vzc10gbXVzdCBwb2ludCB0byB0aGUgZW1iZWRkZWQgZ2xvYmFsCiAgLy8vIFtlbWJlZGRlZE5hbWVzLkxFQUZfVEFHU10gYW5kIG11c3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCBhbiBlbXB0eSBKUyBPYmplY3QKICAvLy8gKHVzZWQgYXMgYSBtYXApLgogIC8vLwogIC8vLyBCb3RoIHZhcmlhYmxlcyBhcmUgcGFzc2VkIGluIChpbnN0ZWFkIG9mIGNyZWF0aW5nIHRoZSBhY2Nlc3MgaGVyZSkgdG8KICAvLy8gbWFrZSBzdXJlIHRoZSBjYWxsZXIgaXMgYXdhcmUgb2YgdGhlc2UgZ2xvYmFscy4KICBzdGF0aWMganNBc3QuU3RhdGVtZW50IGJ1aWxkTmF0aXZlSW5mb0hhbmRsZXIoCiAgICAgIGpzQXN0LkV4cHJlc3Npb24gaW5mb0FjY2VzcywKICAgICAganNBc3QuRXhwcmVzc2lvbiBjb25zdHJ1Y3RvckFjY2VzcywKICAgICAganNBc3QuRXhwcmVzc2lvbiBzdWJjbGFzc1JlYWRHZW5lcmF0b3IoanNBc3QuRXhwcmVzc2lvbiBzdWJjbGFzcyksCiAgICAgIGpzQXN0LkV4cHJlc3Npb24gaW50ZXJjZXB0b3JzQnlUYWdBY2Nlc3MsCiAgICAgIGpzQXN0LkV4cHJlc3Npb24gbGVhZlRhZ3NBY2Nlc3MpIHsKICAgIGpzQXN0LkV4cHJlc3Npb24gc3ViY2xhc3NSZWFkID0KICAgICAgICBzdWJjbGFzc1JlYWRHZW5lcmF0b3IoanMoJ3N1YmNsYXNzZXNbaV0nLCBbXSkpOwogICAgcmV0dXJuIGpzLnN0YXRlbWVudCgnJycKICAgICAgICAgIC8vIFRoZSBuYXRpdmUgaW5mbyBsb29rcyBsaWtlIHRoaXM6CiAgICAgICAgICAvLwogICAgICAgICAgLy8gSHRtbEVsZW1lbnQ6IHsKICAgICAgICAgIC8vICAgICAiJSI6ICJIVE1MRGl2RWxlbWVudHxIVE1MQW5jaG9yRWxlbWVudDtIVE1MRWxlbWVudDtGYW5jeUJ1dHRvbiIKICAgICAgICAgIC8vCiAgICAgICAgICAvLyBUaGUgZmlyc3QgdHdvIHNlbWljb2xvbi1zZXBhcmF0ZWQgcGFydHMgY29udGFpbiBkaXNwYXRjaCB0YWdzLCB0aGUKICAgICAgICAgIC8vIHRoaXJkIGNvbnRhaW5zIHRoZSBKYXZhU2NyaXB0IG5hbWVzIGZvciBjbGFzc2VzLgogICAgICAgICAgLy8KICAgICAgICAgIC8vIFRoZSB0YWdzIGluZGljYXRlIHRoYXQgSmF2YVNjcmlwdCBvYmplY3RzIHdpdGggdGhlIGRpc3BhdGNoIHRhZ3MKICAgICAgICAgIC8vICh1c3VhbGx5IGNvbnN0cnVjdG9yIG5hbWVzKSBIVE1MRGl2RWxlbWVudCwgSFRNTEFuY2hvckVsZW1lbnQgYW5kCiAgICAgICAgICAvLyBIVE1MRWxlbWVudCBhbGwgbWFwIHRvIHRoZSBEYXJ0IG5hdGl2ZSBjbGFzcyBuYW1lZCBIdG1sRWxlbWVudC4KICAgICAgICAgIC8vIFRoZSBmaXJzdCBzZXQgaXMgZm9yIGVmZmVjdGl2ZSBsZWFmIG5vZGVzIGluIHRoZSBoaWVyYXJjaHksIHRoZQogICAgICAgICAgLy8gc2Vjb25kIHNldCBpcyBub24tbGVhZiBub2Rlcy4KICAgICAgICAgIC8vCiAgICAgICAgICAvLyBUaGUgdGhpcmQgcGFydCBjb250YWlucyB0aGUgSmF2YVNjcmlwdCBuYW1lcyBvZiBEYXJ0IGNsYXNzZXMgdGhhdAogICAgICAgICAgLy8gZXh0ZW5kIHRoZSBuYXRpdmUgY2xhc3MuIEhlcmUsIEZhbmN5QnV0dG9uIGV4dGVuZHMgSHRtbEVsZW1lbnQsIHNvCiAgICAgICAgICAvLyB0aGUgcnVudGltZSBuZWVkcyB0byBrbm93IHRoYXQgd2luZG93LkhUTUxFbGVtZW50LnByb3RvdHlwZSBpcyB0aGUKICAgICAgICAgIC8vIHByb3RvdHlwZSB0aGF0IG5lZWRzIHRvIGJlIGV4dGVuZGVkIGluIGNyZWF0aW5nIHRoZSBjdXN0b20gZWxlbWVudC4KICAgICAgICAgIC8vCiAgICAgICAgICAvLyBUaGUgaW5mb3JtYXRpb24gaXMgdXNlZCB0byBidWlsZCB0YWJsZXMgcmVmZXJlbmNlZCBieQogICAgICAgICAgLy8gZ2V0TmF0aXZlSW50ZXJjZXB0b3IgYW5kIGN1c3RvbSBlbGVtZW50IHN1cHBvcnQuCiAgICAgICAgICB7CiAgICAgICAgICAgIHZhciBuYXRpdmVTcGVjID0gI2luZm8uc3BsaXQoIjsiKTsKICAgICAgICAgICAgaWYgKG5hdGl2ZVNwZWNbMF0pIHsKICAgICAgICAgICAgICB2YXIgdGFncyA9IG5hdGl2ZVNwZWNbMF0uc3BsaXQoInwiKTsKICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhZ3MubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICNpbnRlcmNlcHRvcnNCeVRhZ0FjY2Vzc1t0YWdzW2ldXSA9ICNjb25zdHJ1Y3RvcjsKICAgICAgICAgICAgICAgICNsZWFmVGFnc0FjY2Vzc1t0YWdzW2ldXSA9IHRydWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChuYXRpdmVTcGVjWzFdKSB7CiAgICAgICAgICAgICAgdGFncyA9IG5hdGl2ZVNwZWNbMV0uc3BsaXQoInwiKTsKICAgICAgICAgICAgICBpZiAoI2FsbG93TmF0aXZlc1N1YmNsYXNzaW5nKSB7CiAgICAgICAgICAgICAgICBpZiAobmF0aXZlU3BlY1syXSkgewogICAgICAgICAgICAgICAgICB2YXIgc3ViY2xhc3NlcyA9IG5hdGl2ZVNwZWNbMl0uc3BsaXQoInwiKTsKICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdWJjbGFzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHN1YmNsYXNzID0gI3N1YmNsYXNzUmVhZDsKICAgICAgICAgICAgICAgICAgICBzdWJjbGFzcy4jbmF0aXZlU3VwZXJjbGFzc1RhZ05hbWUgPSB0YWdzWzBdOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGFncy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAjaW50ZXJjZXB0b3JzQnlUYWdBY2Nlc3NbdGFnc1tpXV0gPSAjY29uc3RydWN0b3I7CiAgICAgICAgICAgICAgICAgICNsZWFmVGFnc0FjY2Vzc1t0YWdzW2ldXSA9IGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgJycnLCB7CiAgICAgICdpbmZvJzogaW5mb0FjY2VzcywKICAgICAgJ2NvbnN0cnVjdG9yJzogY29uc3RydWN0b3JBY2Nlc3MsCiAgICAgICdzdWJjbGFzc1JlYWQnOiBzdWJjbGFzc1JlYWQsCiAgICAgICdpbnRlcmNlcHRvcnNCeVRhZ0FjY2Vzcyc6IGludGVyY2VwdG9yc0J5VGFnQWNjZXNzLAogICAgICAnbGVhZlRhZ3NBY2Nlc3MnOiBsZWFmVGFnc0FjY2VzcywKICAgICAgJ25hdGl2ZVN1cGVyY2xhc3NUYWdOYW1lJzogZW1iZWRkZWROYW1lcy5OQVRJVkVfU1VQRVJDTEFTU19UQUdfTkFNRSwKICAgICAgJ2FsbG93TmF0aXZlc1N1YmNsYXNzaW5nJzogdHJ1ZQogICAgfSk7CiAgfQp9CoDYAE5OPAEtAUkBISA9ARUBGFE8BAE0BkpJQyFELz0BK0UoQTJMARwULAEqOgsBUU4tNTY7ATshPy8qJBMMCitFCgsLJDk0LCY5CAQBKzsUBAFMJQYsBkgFTjgwNjMBLyMwBgErMQExHCkGASUBQEwgDiQkTQg/BhEEAU85Bk4aBk4pBkxOEQZMTSIGRlAhBkhQFwZMNjEjKkkwKSQ4HC4NHFENUD4NTk9NTSsNT1BQUQ1DPgwvITM2QjEQDiEvLiU9QDJBFBI0RDQSEA4MCxooJDooSyYIBAIBNXBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvbmF0aXZlX2dlbmVyYXRvci5kYXJ0RnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2VtaXR0ZXIvcGFyYW1ldGVyX3N0dWJfZ2VuZXJhdG9yLmRhcnTAAEOALy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5qc19lbWl0dGVyLnBhcmFtZXRlcl9zdHViX2dlbmVyYXRvcjsKCmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgSkVsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2lvL3NvdXJjZV9pbmZvcm1hdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqc0FzdDsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBzaG93IGpzOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmFtZXIuZGFydCcgc2hvdyBOYW1lcjsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hdGl2ZV9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvaW50ZXJjZXB0b3JfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzX25ldy5kYXJ0JyBzaG93IFJlY2lwZUVuY29kZXI7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydCcgc2hvdyBDYWxsU3RydWN0dXJlOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NvZGVnZW5fd29ybGRfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JyBzaG93IFNlbGVjdG9yOwppbXBvcnQgJy4uL3VuaXZlcnNlL3dvcmxkX2J1aWxkZXIuZGFydCcgc2hvdyBTZWxlY3RvckNvbnN0cmFpbnRzOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwoKaW1wb3J0ICdtb2RlbC5kYXJ0JzsKCmltcG9ydCAnY29kZV9lbWl0dGVyX3Rhc2suZGFydCcgc2hvdyBFbWl0dGVyOwppbXBvcnQgJ25hdGl2ZV9lbWl0dGVyLmRhcnQnOwoKY2xhc3MgUGFyYW1ldGVyU3R1YkdlbmVyYXRvciB7CiAgc3RhdGljIGZpbmFsIFNldDxTZWxlY3Rvcj4gZW1wdHlTZWxlY3RvclNldCA9IG5ldyBTZXQ8U2VsZWN0b3I+KCk7CgogIGZpbmFsIEVtaXR0ZXIgX2VtaXR0ZXI7CiAgZmluYWwgTmF0aXZlRW1pdHRlciBfbmF0aXZlRW1pdHRlcjsKICBmaW5hbCBOYW1lciBfbmFtZXI7CiAgZmluYWwgUnVudGltZVR5cGVzRW5jb2RlciBfcnRpRW5jb2RlcjsKICBmaW5hbCBSZWNpcGVFbmNvZGVyIF9ydGlSZWNpcGVFbmNvZGVyOyAvLyBgbnVsbGAgaWYgbm90IGV4cGVyaW1lbnROZXdSdGkuCiAgZmluYWwgTmF0aXZlRGF0YSBfbmF0aXZlRGF0YTsKICBmaW5hbCBJbnRlcmNlcHRvckRhdGEgX2ludGVyY2VwdG9yRGF0YTsKICBmaW5hbCBDb2RlZ2VuV29ybGQgX2NvZGVnZW5Xb3JsZDsKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kgX3NvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3k7CgogIFBhcmFtZXRlclN0dWJHZW5lcmF0b3IoCiAgICAgIHRoaXMuX2VtaXR0ZXIsCiAgICAgIHRoaXMuX25hdGl2ZUVtaXR0ZXIsCiAgICAgIHRoaXMuX25hbWVyLAogICAgICB0aGlzLl9ydGlFbmNvZGVyLAogICAgICB0aGlzLl9ydGlSZWNpcGVFbmNvZGVyLAogICAgICB0aGlzLl9uYXRpdmVEYXRhLAogICAgICB0aGlzLl9pbnRlcmNlcHRvckRhdGEsCiAgICAgIHRoaXMuX2NvZGVnZW5Xb3JsZCwKICAgICAgdGhpcy5fY2xvc2VkV29ybGQsCiAgICAgIHRoaXMuX3NvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kpOwoKICBKRWxlbWVudEVudmlyb25tZW50IGdldCBfZWxlbWVudEVudmlyb25tZW50ID0+CiAgICAgIF9jbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQ7CgogIGJvb2wgbmVlZHNTdXBlckdldHRlcihGdW5jdGlvbkVudGl0eSBlbGVtZW50KSA9PgogICAgICBfY29kZWdlbldvcmxkLm1ldGhvZHNOZWVkc1N1cGVyR2V0dGVyKGVsZW1lbnQpOwoKICAvLy8gR2VuZXJhdGVzIHN0dWJzIHRvIGZpbGwgaW4gbWlzc2luZyBvcHRpb25hbCBuYW1lZCBvciBwb3NpdGlvbmFsIGFyZ3VtZW50cwogIC8vLyBhbmQgbWlzc2luZyB0eXBlIGFyZ3VtZW50cy4gIFJldHVybnMgYG51bGxgIGlmIG5vIHN0dWIgaXMgbmVlZGVkLgogIC8vLwogIC8vLyBNZXRob2RzIGxpa2UgYGZvbyhbeF0pYCBhbmQgYGJhcih7eH0pYCBtYXkgYmUgaW52b2tlZCBieSB0aGUgZm9sbG93aW5nCiAgLy8vIGNhbGxzOiBgZm9vKCksIGZvbygxKSwgYmFyKCksIGJhcih4OiAxKWAuIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyB0aGUgc3R1YgogIC8vLyBmb3IgdGhlIGdpdmVuIFtzZWxlY3Rvcl0gYW5kIHJldHVybnMgdGhlIGdlbmVyYXRlZCBbUGFyYW1ldGVyU3R1Yk1ldGhvZF0uCiAgLy8vCiAgLy8vIE1lbWJlcnMgbWF5IGJlIGludm9rZWQgaW4gdHdvIHdheXM6IGRpcmVjdGx5LCBvciB0aHJvdWdoIGEgY2xvc3VyZS4gSW4gdGhlCiAgLy8vIGxhdHRlciBjYXNlIHRoZSBjYWxsZXIgaW52b2tlcyB0aGUgdGVhci1vZmYgY2xvc3VyZSdzIGBjYWxsYCBtZXRob2QuIFRoaXMKICAvLy8gbWV0aG9kIFtnZW5lcmF0ZVBhcmFtZXRlclN0dWJdIGFjY2VwdHMgdHdvIHNlbGVjdG9ycy4gVGhlIHJldHVybmVkIHN0dWIKICAvLy8gbWV0aG9kIGhhcyB0aGUgY29ycmVzcG9uZGluZyBuYW1lIFtQYXJhbWV0ZXJTdHViTWV0aG9kLm5hbWVdIGFuZAogIC8vLyBbUGFyYW1ldGVyU3R1Yk1ldGhvZC5jYWxsTmFtZV0gc2V0IGlmIHRoZSBpbnB1dCBzZWxlY3RvciBpcyBub24tbnVsbCAoYW5kCiAgLy8vIHRoZSBtZW1iZXIgbmVlZHMgYSBzdHViKS4KICBQYXJhbWV0ZXJTdHViTWV0aG9kIGdlbmVyYXRlUGFyYW1ldGVyU3R1YigKICAgICAgRnVuY3Rpb25FbnRpdHkgbWVtYmVyLCBTZWxlY3RvciBzZWxlY3RvciwgU2VsZWN0b3IgY2FsbFNlbGVjdG9yKSB7CiAgICAvLyBUaGUgbmFtaW5nIGhlcmUgY2FuIGJlIGEgYml0IGNvbmZ1c2luZy4gVGhlcmUgaXMgYSBjYWxsIHNpdGUgc29tZXdoZXJlCiAgICAvLyB0aGF0IGNhbGxzIHRoZSBzdHViIHZpYSB0aGUgW3NlbGVjdG9yXSwgd2hpY2ggaGFzIGEgW0NhbGxTdHJ1Y3R1cmVdLCBzbwogICAgLy8gdGhlICpDYWxsKlN0cnVjdHVyZSBkZXRlcm1pbmVzIHRoZSAqcGFyYW1ldGVycyogb2YgdGhlIHN0dWIuIFRoZSBib2R5IG9mCiAgICAvLyB0aGUgc3R1YiBjYWxscyB0aGUgbWVtYmVyIHdoaWNoIGhhcyBhIFtQYXJhbWV0ZXJTdHJ1Y3R1cmVdLCBzbyB0aGUKICAgIC8vICpQYXJhbWV0ZXIqU3RydWN0dXJlIGRldGVybWluZXMgdGhlICphcmd1bWVudHMqIG9mIHRoZSBmb3J3YXJkaW5nIGNhbGwuCgogICAgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlID0gc2VsZWN0b3IuY2FsbFN0cnVjdHVyZTsKICAgIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUgPSBtZW1iZXIucGFyYW1ldGVyU3RydWN0dXJlOwogICAgaW50IHBvc2l0aW9uYWxBcmd1bWVudENvdW50ID0gY2FsbFN0cnVjdHVyZS5wb3NpdGlvbmFsQXJndW1lbnRDb3VudDsKICAgIGFzc2VydChjYWxsU3RydWN0dXJlLnR5cGVBcmd1bWVudENvdW50ID09IDAgfHwKICAgICAgICBjYWxsU3RydWN0dXJlLnR5cGVBcmd1bWVudENvdW50ID09IHBhcmFtZXRlclN0cnVjdHVyZS50eXBlUGFyYW1ldGVycyk7CgogICAgLy8gV2UgZG9uJ3QgbmVlZCBhIHN0dWIgaWYgdGhlIGFyZ3VtZW50cyBtYXRjaCB0aGUgdGFyZ2V0IHBhcmFtZXRlcnMsCiAgICAvLyBpLmUuIHRoZXJlIGFyZSBubyBtaXNzaW5nIG9wdGlvbmFsIGFyZ3VtZW50cyBvciB0eXBlcy4gVGhlIHNlbGVjdG9yCiAgICAvLyBhcHBsaWVzIHRvIHRoZSBtZW1iZXIsIHNvIHdlIGNhbiBjaGVjayB1c2luZyBjb3VudHMuCiAgICBpZiAoY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRDb3VudCA9PSBwYXJhbWV0ZXJTdHJ1Y3R1cmUudHlwZVBhcmFtZXRlcnMpIHsKICAgICAgaWYgKHBvc2l0aW9uYWxBcmd1bWVudENvdW50ID09IHBhcmFtZXRlclN0cnVjdHVyZS50b3RhbFBhcmFtZXRlcnMpIHsKICAgICAgICAvLyBQb3NpdGlvbmFsIG9wdGlvbmFsIGFyZ3VtZW50cyBhcmUgYWxsIHByb3ZpZGVkLgogICAgICAgIGFzc2VydChjYWxsU3RydWN0dXJlLmlzVW5uYW1lZCk7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgaWYgKHBhcmFtZXRlclN0cnVjdHVyZS5uYW1lZFBhcmFtZXRlcnMuaXNOb3RFbXB0eSAmJgogICAgICAgICAgY2FsbFN0cnVjdHVyZS5uYW1lZEFyZ3VtZW50Q291bnQgPT0KICAgICAgICAgICAgICBwYXJhbWV0ZXJTdHJ1Y3R1cmUubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICAgIC8vIE5hbWVkIG9wdGlvbmFsIGFyZ3VtZW50cyBhcmUgYWxsIHByb3ZpZGVkLgogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CgogICAgTGlzdDxTdHJpbmc+IG5hbWVzID0gY2FsbFN0cnVjdHVyZS5nZXRPcmRlcmVkTmFtZWRBcmd1bWVudHMoKTsKCiAgICBib29sIGlzSW50ZXJjZXB0ZWRNZXRob2QgPSBfaW50ZXJjZXB0b3JEYXRhLmlzSW50ZXJjZXB0ZWRNZXRob2QobWVtYmVyKTsKCiAgICAvLyBJZiB0aGUgbWV0aG9kIGlzIGludGVyY2VwdGVkLCB3ZSBuZWVkIHRvIGFsc28gcGFzcyB0aGUgYWN0dWFsIHJlY2VpdmVyLgogICAgaW50IGV4dHJhQXJndW1lbnRDb3VudCA9IGlzSW50ZXJjZXB0ZWRNZXRob2QgPyAxIDogMDsKICAgIC8vIFVzZSAnJHJlY2VpdmVyJyB0byBhdm9pZCBjbGFzaGVzIHdpdGggb3RoZXIgcGFyYW1ldGVyIG5hbWVzLiBVc2luZwogICAgLy8gJyRyZWNlaXZlcicgd29ya3MgYmVjYXVzZSBuYW1lci5zYWZlVmFyaWFibGVOYW1lIHVzZWQgZm9yIGdldHRpbmcKICAgIC8vIHBhcmFtZXRlciBuYW1lcyBuZXZlciByZXR1cm5zIGEgbmFtZSBiZWdpbm5pbmcgd2l0aCBhIHNpbmdsZSAnJCcuCiAgICBTdHJpbmcgcmVjZWl2ZXJBcmd1bWVudE5hbWUgPSByJyRyZWNlaXZlcic7CgogICAgLy8gVGhlIHBhcmFtZXRlcnMgdGhhdCB0aGlzIHN0dWIgdGFrZXMuCiAgICBMaXN0PGpzQXN0LlBhcmFtZXRlcj4gc3R1YlBhcmFtZXRlcnMgPSBuZXcgTGlzdDxqc0FzdC5QYXJhbWV0ZXI+KAogICAgICAgIGV4dHJhQXJndW1lbnRDb3VudCArCiAgICAgICAgICAgIHNlbGVjdG9yLmFyZ3VtZW50Q291bnQgKwogICAgICAgICAgICBzZWxlY3Rvci50eXBlQXJndW1lbnRDb3VudCk7CiAgICAvLyBUaGUgYXJndW1lbnRzIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHJlYWwgbWV0aG9kLgogICAgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiB0YXJnZXRBcmd1bWVudHMgPSBuZXcgTGlzdDxqc0FzdC5FeHByZXNzaW9uPigKICAgICAgICBleHRyYUFyZ3VtZW50Q291bnQgKwogICAgICAgICAgICBwYXJhbWV0ZXJTdHJ1Y3R1cmUudG90YWxQYXJhbWV0ZXJzICsKICAgICAgICAgICAgcGFyYW1ldGVyU3RydWN0dXJlLnR5cGVQYXJhbWV0ZXJzKTsKCiAgICBpbnQgY291bnQgPSAwOwogICAgaWYgKGlzSW50ZXJjZXB0ZWRNZXRob2QpIHsKICAgICAgY291bnQrKzsKICAgICAgc3R1YlBhcmFtZXRlcnNbMF0gPSBuZXcganNBc3QuUGFyYW1ldGVyKHJlY2VpdmVyQXJndW1lbnROYW1lKTsKICAgICAgdGFyZ2V0QXJndW1lbnRzWzBdID0ganMoJyMnLCByZWNlaXZlckFyZ3VtZW50TmFtZSk7CiAgICB9CgogICAgaW50IG9wdGlvbmFsUGFyYW1ldGVyU3RhcnQgPSBwb3NpdGlvbmFsQXJndW1lbnRDb3VudCArIGV4dHJhQXJndW1lbnRDb3VudDsKICAgIC8vIEluY2x1ZGVzIGV4dHJhIHJlY2VpdmVyIGFyZ3VtZW50IHdoZW4gdXNpbmcgaW50ZXJjZXB0b3IgY29udmVudGlvbgogICAgaW50IGluZGV4T2ZMYXN0T3B0aW9uYWxBcmd1bWVudEluUGFyYW1ldGVycyA9IG9wdGlvbmFsUGFyYW1ldGVyU3RhcnQgLSAxOwoKICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaFBhcmFtZXRlcihtZW1iZXIsCiAgICAgICAgKF8sIFN0cmluZyBuYW1lLCBDb25zdGFudFZhbHVlIHZhbHVlKSB7CiAgICAgIFN0cmluZyBqc05hbWUgPSBfbmFtZXIuc2FmZVZhcmlhYmxlTmFtZShuYW1lKTsKICAgICAgYXNzZXJ0KGpzTmFtZSAhPSByZWNlaXZlckFyZ3VtZW50TmFtZSk7CiAgICAgIGlmIChjb3VudCA8IG9wdGlvbmFsUGFyYW1ldGVyU3RhcnQpIHsKICAgICAgICBzdHViUGFyYW1ldGVyc1tjb3VudF0gPSBuZXcganNBc3QuUGFyYW1ldGVyKGpzTmFtZSk7CiAgICAgICAgdGFyZ2V0QXJndW1lbnRzW2NvdW50XSA9IGpzKCcjJywganNOYW1lKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbnQgaW5kZXggPSBuYW1lcy5pbmRleE9mKG5hbWUpOwogICAgICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICAgICAgaW5kZXhPZkxhc3RPcHRpb25hbEFyZ3VtZW50SW5QYXJhbWV0ZXJzID0gY291bnQ7CiAgICAgICAgICAvLyBUaGUgb3JkZXIgb2YgdGhlIG5hbWVkIGFyZ3VtZW50cyBpcyBub3QgdGhlIHNhbWUgYXMgdGhlCiAgICAgICAgICAvLyBvbmUgaW4gdGhlIHJlYWwgbWV0aG9kICh3aGljaCBpcyBpbiBEYXJ0IHNvdXJjZSBvcmRlcikuCiAgICAgICAgICB0YXJnZXRBcmd1bWVudHNbY291bnRdID0ganMoJyMnLCBqc05hbWUpOwogICAgICAgICAgc3R1YlBhcmFtZXRlcnNbb3B0aW9uYWxQYXJhbWV0ZXJTdGFydCArIGluZGV4XSA9CiAgICAgICAgICAgICAgbmV3IGpzQXN0LlBhcmFtZXRlcihqc05hbWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICAgICAgICB0YXJnZXRBcmd1bWVudHNbY291bnRdID0KICAgICAgICAgICAgICAgIF9lbWl0dGVyLmNvbnN0YW50UmVmZXJlbmNlKG5ldyBOdWxsQ29uc3RhbnRWYWx1ZSgpKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghdmFsdWUuaXNOdWxsKSB7CiAgICAgICAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIHRoZSBudWxsIGNvbnN0YW50LCB3ZSBzaG91bGQgbm90IHBhc3MgaXQKICAgICAgICAgICAgICAvLyBkb3duIHRvIHRoZSBuYXRpdmUgbWV0aG9kLgogICAgICAgICAgICAgIGluZGV4T2ZMYXN0T3B0aW9uYWxBcmd1bWVudEluUGFyYW1ldGVycyA9IGNvdW50OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRhcmdldEFyZ3VtZW50c1tjb3VudF0gPSBfZW1pdHRlci5jb25zdGFudFJlZmVyZW5jZSh2YWx1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvdW50Kys7CiAgICB9KTsKCiAgICBpZiAocGFyYW1ldGVyU3RydWN0dXJlLnR5cGVQYXJhbWV0ZXJzID4gMCkgewogICAgICBpbnQgcGFyYW1ldGVySW5kZXggPQogICAgICAgICAgc3R1YlBhcmFtZXRlcnMubGVuZ3RoIC0gcGFyYW1ldGVyU3RydWN0dXJlLnR5cGVQYXJhbWV0ZXJzOwogICAgICBmb3IgKFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlCiAgICAgICAgICBpbiBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZVZhcmlhYmxlcyhtZW1iZXIpKSB7CiAgICAgICAgaWYgKHNlbGVjdG9yLnR5cGVBcmd1bWVudENvdW50ID09IDApIHsKICAgICAgICAgIERhcnRUeXBlIGRlZmF1bHRUeXBlID0gX2Nsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudAogICAgICAgICAgICAgIC5nZXRUeXBlVmFyaWFibGVEZWZhdWx0VHlwZSh0eXBlVmFyaWFibGUuZWxlbWVudCk7CiAgICAgICAgICBpZiAoX3J0aVJlY2lwZUVuY29kZXIgIT0gbnVsbCkgewogICAgICAgICAgICBqc0FzdC5FeHByZXNzaW9uIHR5cGVSdGkgPSBfcnRpUmVjaXBlRW5jb2Rlci5ldmFsdWF0ZVJlY2lwZSgKICAgICAgICAgICAgICAgIF9lbWl0dGVyLAogICAgICAgICAgICAgICAgX3J0aVJlY2lwZUVuY29kZXIuZW5jb2RlUmVjaXBlV2l0aFZhcmlhYmxlc1JlcGxhY2VCeUFueSgKICAgICAgICAgICAgICAgICAgICBfZW1pdHRlciwgZGVmYXVsdFR5cGUpKTsKICAgICAgICAgICAgdGFyZ2V0QXJndW1lbnRzW2NvdW50KytdID0gdHlwZVJ0aTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRhcmdldEFyZ3VtZW50c1tjb3VudCsrXSA9IF9ydGlFbmNvZGVyLmdldFR5cGVSZXByZXNlbnRhdGlvbigKICAgICAgICAgICAgICAgIF9lbWl0dGVyLCBkZWZhdWx0VHlwZSwgKF8pID0+IF9lbWl0dGVyLmNvbnN0YW50UmVmZXJlbmNlKAogICAgICAgICAgICAgICAgICAgIC8vIFRPRE8oMzM0MjIpOiBTdXBwb3J0IHR5cGUgdmFyaWFibGVzIGluIGRlZmF1bHQKICAgICAgICAgICAgICAgICAgICAvLyB0eXBlcy4gVGVtcG9yYXJpbHkgdXNpbmcgdGhlICJhbnkiIHR5cGUgKGVuY29kZWQgYXMgLTIpIHRvCiAgICAgICAgICAgICAgICAgICAgLy8gYXZvaWQgZmFpbGluZyBvbiBib3VuZHMgY2hlY2tzLgogICAgICAgICAgICAgICAgICAgIG5ldyBJbnRDb25zdGFudFZhbHVlKG5ldyBCaWdJbnQuZnJvbSgtMikpKSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIFN0cmluZyBqc05hbWUgPSAnXCQke3R5cGVWYXJpYWJsZS5lbGVtZW50Lm5hbWV9JzsKICAgICAgICAgIHN0dWJQYXJhbWV0ZXJzW3BhcmFtZXRlckluZGV4KytdID0gbmV3IGpzQXN0LlBhcmFtZXRlcihqc05hbWUpOwogICAgICAgICAgdGFyZ2V0QXJndW1lbnRzW2NvdW50KytdID0ganMoJyMnLCBqc05hbWUpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHZhciBib2R5OyAvLyBMaXN0IG9yIGpzQXN0LlN0YXRlbWVudC4KICAgIGlmIChfbmF0aXZlRGF0YS5oYXNGaXhlZEJhY2tlbmROYW1lKG1lbWJlcikpIHsKICAgICAgYm9keSA9IF9uYXRpdmVFbWl0dGVyLmdlbmVyYXRlUGFyYW1ldGVyU3R1YlN0YXRlbWVudHMoCiAgICAgICAgICBtZW1iZXIsCiAgICAgICAgICBpc0ludGVyY2VwdGVkTWV0aG9kLAogICAgICAgICAgX25hbWVyLmludm9jYXRpb25OYW1lKHNlbGVjdG9yKSwKICAgICAgICAgIHN0dWJQYXJhbWV0ZXJzLAogICAgICAgICAgdGFyZ2V0QXJndW1lbnRzLAogICAgICAgICAgaW5kZXhPZkxhc3RPcHRpb25hbEFyZ3VtZW50SW5QYXJhbWV0ZXJzKTsKICAgIH0gZWxzZSBpZiAobWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgaWYgKG5lZWRzU3VwZXJHZXR0ZXIobWVtYmVyKSkgewogICAgICAgIENsYXNzRW50aXR5IHN1cGVyQ2xhc3MgPSBtZW1iZXIuZW5jbG9zaW5nQ2xhc3M7CiAgICAgICAganNBc3QuTmFtZSBtZXRob2ROYW1lID0gX25hbWVyLmluc3RhbmNlTWV0aG9kTmFtZShtZW1iZXIpOwogICAgICAgIC8vIFdoZW4gcmVkaXJlY3RpbmcsIHdlIG11c3QgZW5zdXJlIHRoYXQgd2UgZG9uJ3QgZW5kIHVwIGluIGEgc3ViY2xhc3MuCiAgICAgICAgLy8gV2UgdGh1cyBjYW4ndCBqdXN0IGludm9rZSBgdGhpcy5mb28kMS5jYWxsKGZpbGxlZEluQXJndW1lbnRzKWAuCiAgICAgICAgLy8gSW5zdGVhZCB3ZSBuZWVkIHRvIGNhbGwgdGhlIHN0YXRpY2FsbHkgcmVzb2x2ZWQgdGFyZ2V0LgogICAgICAgIC8vICAgYDxjbGFzcz4ucHJvdG90eXBlLmJhciQxLmNhbGwodGhpcywgYXJndW1lbnQwLCAuLi4pYC4KICAgICAgICBib2R5ID0ganMuc3RhdGVtZW50KCdyZXR1cm4gIy4jLmNhbGwodGhpcywgIyk7JywgWwogICAgICAgICAgX2VtaXR0ZXIucHJvdG90eXBlQWNjZXNzKHN1cGVyQ2xhc3MsIGhhc0JlZW5JbnN0YW50aWF0ZWQ6IHRydWUpLAogICAgICAgICAgbWV0aG9kTmFtZSwKICAgICAgICAgIHRhcmdldEFyZ3VtZW50cwogICAgICAgIF0pOwogICAgICB9IGVsc2UgewogICAgICAgIGJvZHkgPSBqcy5zdGF0ZW1lbnQoJ3JldHVybiB0aGlzLiMoIyk7JywKICAgICAgICAgICAgW19uYW1lci5pbnN0YW5jZU1ldGhvZE5hbWUobWVtYmVyKSwgdGFyZ2V0QXJndW1lbnRzXSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGJvZHkgPSBqcy5zdGF0ZW1lbnQoJ3JldHVybiAjKCMpJywKICAgICAgICAgIFtfZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcyhtZW1iZXIpLCB0YXJnZXRBcmd1bWVudHNdKTsKICAgIH0KCiAgICBTb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIgc291cmNlSW5mb3JtYXRpb25CdWlsZGVyID0KICAgICAgICBfc291cmNlSW5mb3JtYXRpb25TdHJhdGVneS5jcmVhdGVCdWlsZGVyRm9yQ29udGV4dChtZW1iZXIpOwogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZFN0dWIobWVtYmVyLCBjYWxsU3RydWN0dXJlKTsKCiAgICBqc0FzdC5GdW4gZnVuY3Rpb24gPSBqcygnZnVuY3Rpb24oIykgeyAjOyB9JywgW3N0dWJQYXJhbWV0ZXJzLCBib2R5XSkKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKTsKCiAgICBqc0FzdC5OYW1lIG5hbWUgPSBtZW1iZXIuaXNTdGF0aWMgPyBudWxsIDogX25hbWVyLmludm9jYXRpb25OYW1lKHNlbGVjdG9yKTsKICAgIGpzQXN0Lk5hbWUgY2FsbE5hbWUgPQogICAgICAgIChjYWxsU2VsZWN0b3IgIT0gbnVsbCkgPyBfbmFtZXIuaW52b2NhdGlvbk5hbWUoY2FsbFNlbGVjdG9yKSA6IG51bGw7CiAgICByZXR1cm4gbmV3IFBhcmFtZXRlclN0dWJNZXRob2QobmFtZSwgY2FsbE5hbWUsIGZ1bmN0aW9uLCBlbGVtZW50OiBtZW1iZXIpOwogIH0KCiAgLy8gV2UgZmlsbCB0aGUgbGlzdHMgZGVwZW5kaW5nIG9uIHBvc3NpYmxlL2ludm9rZWQgc2VsZWN0b3JzLiBGb3IgZXhhbXBsZSwKICAvLyB0YWtlIG1ldGhvZCBmb286CiAgLy8gICAgZm9vKGEsIGIsIHtjLCBkfSk7CiAgLy8KICAvLyBXZSBtYXkgaGF2ZSBtdWx0aXBsZSB3YXlzIG9mIGNhbGxpbmcgZm9vOgogIC8vICgxKSBmb28oMSwgMik7CiAgLy8gKDIpIGZvbygxLCAyLCBjOiAzKTsKICAvLyAoMykgZm9vKDEsIDIsIGQ6IDQpOwogIC8vICg0KSBmb28oMSwgMiwgYzogMywgZDogNCk7CiAgLy8gKDUpIGZvbygxLCAyLCBkOiA0LCBjOiAzKTsKICAvLwogIC8vIFdoYXQgd2UgZ2VuZXJhdGUgYXQgdGhlIGNhbGwgc2l0ZXMgYXJlOgogIC8vICgxKSBmb28kMigxLCAyKTsKICAvLyAoMikgZm9vJDMkYygxLCAyLCAzKTsKICAvLyAoMykgZm9vJDMkZCgxLCAyLCA0KTsKICAvLyAoNCkgZm9vJDQkYyRkKDEsIDIsIDMsIDQpOwogIC8vICg1KSBmb28kNCRjJGQoMSwgMiwgMywgNCk7CiAgLy8KICAvLyBUaGUgc3R1YnMgd2UgZ2VuZXJhdGUgYXJlIChleHByZXNzZWQgaW4gRGFydCk6CiAgLy8gKDEpIGZvbyQyKGEsIGIpID0+IGZvbyQ0JGMkZChhLCBiLCBudWxsLCBudWxsKQogIC8vICgyKSBmb28kMyRjKGEsIGIsIGMpID0+IGZvbyQ0JGMkZChhLCBiLCBjLCBudWxsKTsKICAvLyAoMykgZm9vJDMkZChhLCBiLCBkKSA9PiBmb28kNCRjJGQoYSwgYiwgbnVsbCwgZCk7CiAgLy8gKDQpIE5vIHN0dWIgZ2VuZXJhdGVkLCBjYWxsIGlzIGRpcmVjdC4KICAvLyAoNSkgTm8gc3R1YiBnZW5lcmF0ZWQsIGNhbGwgaXMgZGlyZWN0LgogIC8vCiAgLy8gV2UgbmVlZCB0byBwYXkgYXR0ZW50aW9uIGlmIHRoaXMgc3R1YiBpcyBmb3IgYSBmdW5jdGlvbiB0aGF0IGhhcyBiZWVuCiAgLy8gaW52b2tlZCBmcm9tIGEgc3ViY2xhc3MuIFRoZW4gd2UgY2Fubm90IGp1c3QgcmVkaXJlY3QsIHNpbmNlIHRoYXQKICAvLyB3b3VsZCBpbnZva2UgdGhlIG1ldGhvZHMgb2YgdGhlIHN1YmNsYXNzLiBXZSBoYXZlIHRvIGNvbXBpbGUgdG86CiAgLy8gKDEpIGZvbyQyKGEsIGIpID0+IE15Q2xhc3MuZm9vJDQkYyRkLmNhbGwodGhpcywgYSwgYiwgbnVsbCwgbnVsbCkKICAvLyAoMikgZm9vJDMkYyhhLCBiLCBjKSA9PiBNeUNsYXNzLmZvbyQ0JGMkZCh0aGlzLCBhLCBiLCBjLCBudWxsKTsKICAvLyAoMykgZm9vJDMkZChhLCBiLCBkKSA9PiBNeUNsYXNzLmZvbyQ0JGMkZCh0aGlzLCBhLCBiLCBudWxsLCBkKTsKICBMaXN0PFBhcmFtZXRlclN0dWJNZXRob2Q+IGdlbmVyYXRlUGFyYW1ldGVyU3R1YnMoRnVuY3Rpb25FbnRpdHkgbWVtYmVyLAogICAgICB7Ym9vbCBjYW5UZWFyT2ZmLCBib29sIGNhbkJlQXBwbGllZH0pIHsKICAgIGFzc2VydChjYW5UZWFyT2ZmICE9IG51bGwpOwogICAgYXNzZXJ0KGNhbkJlQXBwbGllZCAhPSBudWxsKTsKICAgIC8vIFRoZSBzZXQgb2Ygc2VsZWN0b3JzIHRoYXQgYXBwbHkgdG8gYG1lbWJlcmAuIEZvciBleGFtcGxlLCBmb3IKICAgIC8vIGEgbWVtYmVyIGBmb28oeCwgW3ldKWAgdGhlIGZvbGxvd2luZyBzZWxlY3RvcnMgbWF5IGFwcGx5OgogICAgLy8gYGZvbyh4KWAsIGFuZCBgZm9vKHgsIHkpYC4KICAgIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4gbGl2ZVNlbGVjdG9yczsKICAgIC8vIFRoZSBzZXQgb2Ygc2VsZWN0b3JzIHRoYXQgYXBwbHkgdG8gYG1lbWJlcmAgaWYgaXQncyBuYW1lIHdhcyBgY2FsbGAuCiAgICAvLyBUaGlzIGhhcHBlbnMgd2hlbiBhIG1lbWJlciBpcyB0b3JuIG9mZi4gSW4gdGhhdCBjYXNlIGNhbGxzIHRvIHRoZQogICAgLy8gZnVuY3Rpb24gdXNlIHRoZSBuYW1lIGBjYWxsYCwgYW5kIHdlIG11c3QgYmUgYWJsZSB0byBoYW5kbGUgZXZlcnkKICAgIC8vIGBjYWxsYCBpbnZvY2F0aW9uIHRoYXQgbWF0Y2hlcyB0aGUgc2lnbmF0dXJlLiBGb3IgZXhhbXBsZSwgZm9yCiAgICAvLyBhIG1lbWJlciBgZm9vKHgsIFt5XSlgIHRoZSBmb2xsb3dpbmcgc2VsZWN0b3JzIHdvdWxkIGJlIHBvc3NpYmxlCiAgICAvLyBjYWxsLXNlbGVjdG9yczogYGNhbGwoeClgLCBhbmQgYGNhbGwoeCwgeSlgLgogICAgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPiBjYWxsU2VsZWN0b3JzOwoKICAgIGludCBtZW1iZXJUeXBlUGFyYW1ldGVycyA9IG1lbWJlci5wYXJhbWV0ZXJTdHJ1Y3R1cmUudHlwZVBhcmFtZXRlcnM7CgogICAgLy8gT25seSBpbnN0YW5jZSBtZW1iZXJzIChub3Qgc3RhdGljIG1ldGhvZHMpIG5lZWQgc3R1YnMuCiAgICBpZiAobWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgbGl2ZVNlbGVjdG9ycyA9IF9jb2RlZ2VuV29ybGQuaW52b2NhdGlvbnNCeU5hbWUobWVtYmVyLm5hbWUpOwogICAgfQoKICAgIGlmIChjYW5UZWFyT2ZmKSB7CiAgICAgIFN0cmluZyBjYWxsID0gX25hbWVyLmNsb3N1cmVJbnZvY2F0aW9uU2VsZWN0b3JOYW1lOwogICAgICBjYWxsU2VsZWN0b3JzID0gX2NvZGVnZW5Xb3JsZC5pbnZvY2F0aW9uc0J5TmFtZShjYWxsKTsKICAgIH0KCiAgICBhc3NlcnQoZW1wdHlTZWxlY3RvclNldC5pc0VtcHR5KTsKICAgIGxpdmVTZWxlY3RvcnMgPz89IGNvbnN0IDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz57fTsKICAgIGNhbGxTZWxlY3RvcnMgPz89IGNvbnN0IDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz57fTsKCiAgICBMaXN0PFBhcmFtZXRlclN0dWJNZXRob2Q+IHN0dWJzID0gPFBhcmFtZXRlclN0dWJNZXRob2Q+W107CgogICAgaWYgKGxpdmVTZWxlY3RvcnMuaXNFbXB0eSAmJgogICAgICAgIGNhbGxTZWxlY3RvcnMuaXNFbXB0eSAmJgogICAgICAgIC8vIEZ1bmN0aW9uLmFwcGx5IG1pZ2h0IG5lZWQgYSBzdHViIHRvIGRlZmF1bHQgdGhlIHR5cGUgcGFyYW1ldGVyLgogICAgICAgICEoY2FuQmVBcHBsaWVkICYmIG1lbWJlclR5cGVQYXJhbWV0ZXJzID4gMCkpIHsKICAgICAgcmV0dXJuIHN0dWJzOwogICAgfQoKICAgIC8vIEZvciBldmVyeSBjYWxsLXNlbGVjdG9yIHRoZSBjb3JyZXNwb25kaW5nIHNlbGVjdG9yIHdpdGggdGhlIG5hbWUgb2YgdGhlCiAgICAvLyBtZW1iZXIuCiAgICAvLwogICAgLy8gRm9yIGV4YW1wbGUsIGZvciB0aGUgY2FsbC1zZWxlY3RvciBgY2FsbCh4LCB5KWAgdGhlIHJlbmFtZWQgc2VsZWN0b3IKICAgIC8vIGZvciBtZW1iZXIgYGZvb2Agd291bGQgYmUgYGZvbyh4LCB5KWAuCiAgICBTZXQ8U2VsZWN0b3I+IHJlbmFtZWRDYWxsU2VsZWN0b3JzID0gbmV3IFNldDxTZWxlY3Rvcj4oKTsKCiAgICBTZXQ8U2VsZWN0b3I+IHN0dWJTZWxlY3RvcnMgPSBuZXcgU2V0PFNlbGVjdG9yPigpOwoKICAgIC8vIFN0YXJ0IHdpdGggY2xvc3VyZS1jYWxsIHNlbGVjdG9ycywgc2luY2Ugc2luY2UgdGhleSBpbXBseSB0aGUgZ2VuZXJhdGlvbgogICAgLy8gb2YgdGhlIG5vbi1jYWxsIHZlcnNpb24uCiAgICBpZiAoY2FuQmVBcHBsaWVkICYmIG1lbWJlclR5cGVQYXJhbWV0ZXJzID4gMCkgewogICAgICAvLyBGdW5jdGlvbi5hcHBseSBjYWxscyB0aGUgZnVuY3Rpb24gd2l0aCBubyB0eXBlIGFyZ3VtZW50cywgc28gZ2VuZXJpYwogICAgICAvLyBtZXRob2RzIG5lZWQgdGhlIHN0dWIgdG8gZGVmYXVsdCB0aGUgdHlwZSBhcmd1bWVudHMuCiAgICAgIC8vIFRoaXMgaGFzIHRvIGJlIHRoZSBmaXJzdCBzdHViLgogICAgICBTZWxlY3RvciBuYW1lZFNlbGVjdG9yID0gbmV3IFNlbGVjdG9yLmZyb21FbGVtZW50KG1lbWJlcikudG9Ob25HZW5lcmljKCk7CiAgICAgIFNlbGVjdG9yIGNsb3N1cmVTZWxlY3RvciA9CiAgICAgICAgICBuYW1lZFNlbGVjdG9yLmlzQ2xvc3VyZUNhbGwgPyBudWxsIDogbmFtZWRTZWxlY3Rvci50b0NhbGxTZWxlY3RvcigpOwoKICAgICAgcmVuYW1lZENhbGxTZWxlY3RvcnMuYWRkKG5hbWVkU2VsZWN0b3IpOwogICAgICBzdHViU2VsZWN0b3JzLmFkZChuYW1lZFNlbGVjdG9yKTsKICAgICAgUGFyYW1ldGVyU3R1Yk1ldGhvZCBzdHViID0KICAgICAgICAgIGdlbmVyYXRlUGFyYW1ldGVyU3R1YihtZW1iZXIsIG5hbWVkU2VsZWN0b3IsIGNsb3N1cmVTZWxlY3Rvcik7CiAgICAgIGFzc2VydChzdHViICE9IG51bGwpOwogICAgICBzdHVicy5hZGQoc3R1Yik7CiAgICB9CgogICAgZm9yIChTZWxlY3RvciBzZWxlY3RvciBpbiBjYWxsU2VsZWN0b3JzLmtleXMpIHsKICAgICAgU2VsZWN0b3IgcmVuYW1lZFNlbGVjdG9yID0KICAgICAgICAgIG5ldyBTZWxlY3Rvci5jYWxsKG1lbWJlci5tZW1iZXJOYW1lLCBzZWxlY3Rvci5jYWxsU3RydWN0dXJlKTsKICAgICAgcmVuYW1lZENhbGxTZWxlY3RvcnMuYWRkKHJlbmFtZWRTZWxlY3Rvcik7CgogICAgICBpZiAoIXJlbmFtZWRTZWxlY3Rvci5hcHBsaWVzVW5uYW1lZChtZW1iZXIpKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KCiAgICAgIGlmIChzdHViU2VsZWN0b3JzLmFkZChyZW5hbWVkU2VsZWN0b3IpKSB7CiAgICAgICAgUGFyYW1ldGVyU3R1Yk1ldGhvZCBzdHViID0KICAgICAgICAgICAgZ2VuZXJhdGVQYXJhbWV0ZXJTdHViKG1lbWJlciwgcmVuYW1lZFNlbGVjdG9yLCBzZWxlY3Rvcik7CiAgICAgICAgaWYgKHN0dWIgIT0gbnVsbCkgewogICAgICAgICAgc3R1YnMuYWRkKHN0dWIpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gQSBnZW5lcmljIG1ldGhvZCBtaWdodCBuZWVkIHRvIHN1cHBvcnQgYGNhbGw8VD4oeClgIGZvciBhIGdlbmVyaWMKICAgICAgLy8gaW5zdGFudGlhdGlvbiBzdHViIHdpdGhvdXQgYGNhbGw8VD4oeClgIGJlaW5nIGluIFtjYWxsU2VsZWN0b3JzXS4KICAgICAgLy8gW3NlbGVjdG9yXSB3aWxsIGJlIGBjYWxsKHgpYCAodGhhdCBhbHJlYWR5IHBhc3NlcyB0aGUgYXBwbGllc1VubmFtZWQKICAgICAgLy8gY2hlY2sgYnkgZGVmYXVsdGluZyB0eXBlIGFyZ3VtZW50cyksIGFuZCB0aGUgbWV0aG9kIHdpbGwgYmUgZ2VuZXJpYy4KICAgICAgLy8KICAgICAgLy8gVGhpcyBpcyBiYXNpY2FsbHkgdGhlIHNhbWUgbG9naWMgYXMgYWJvdmUsIGJ1dCB3aXRoIHR5cGUgYXJndW1lbnRzLgogICAgICBpZiAoc2VsZWN0b3IuY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRDb3VudCA9PSAwKSB7CiAgICAgICAgaWYgKG1lbWJlclR5cGVQYXJhbWV0ZXJzID4gMCkgewogICAgICAgICAgU2VsZWN0b3IgcmVuYW1lZFNlbGVjdG9yV2l0aFR5cGVBcmd1bWVudHMgPSBuZXcgU2VsZWN0b3IuY2FsbCgKICAgICAgICAgICAgICBtZW1iZXIubWVtYmVyTmFtZSwKICAgICAgICAgICAgICBzZWxlY3Rvci5jYWxsU3RydWN0dXJlCiAgICAgICAgICAgICAgICAgIC53aXRoVHlwZUFyZ3VtZW50Q291bnQobWVtYmVyVHlwZVBhcmFtZXRlcnMpKTsKICAgICAgICAgIHJlbmFtZWRDYWxsU2VsZWN0b3JzLmFkZChyZW5hbWVkU2VsZWN0b3JXaXRoVHlwZUFyZ3VtZW50cyk7CgogICAgICAgICAgaWYgKHN0dWJTZWxlY3RvcnMuYWRkKHJlbmFtZWRTZWxlY3RvcldpdGhUeXBlQXJndW1lbnRzKSkgewogICAgICAgICAgICBTZWxlY3RvciBjbG9zdXJlU2VsZWN0b3IgPQogICAgICAgICAgICAgICAgbmV3IFNlbGVjdG9yLmNhbGxDbG9zdXJlRnJvbShyZW5hbWVkU2VsZWN0b3JXaXRoVHlwZUFyZ3VtZW50cyk7CiAgICAgICAgICAgIFBhcmFtZXRlclN0dWJNZXRob2Qgc3R1YiA9IGdlbmVyYXRlUGFyYW1ldGVyU3R1YigKICAgICAgICAgICAgICAgIG1lbWJlciwgcmVuYW1lZFNlbGVjdG9yV2l0aFR5cGVBcmd1bWVudHMsIGNsb3N1cmVTZWxlY3Rvcik7CiAgICAgICAgICAgIGlmIChzdHViICE9IG51bGwpIHsKICAgICAgICAgICAgICBzdHVicy5hZGQoc3R1Yik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBOb3cgcnVuIHRocm91Z2ggdGhlIGFjdHVhbCBtZW1iZXIgc2VsZWN0b3JzIChlZy4gYGZvbyQyKHgsIHkpYCBhbmQgbm90CiAgICAvLyBgY2FsbCQyKHgsIHkpYCkuIFNvbWUgb2YgdGhlbSBoYXZlIGFscmVhZHkgYmVlbiBnZW5lcmF0ZWQgYmVjYXVzZSBvZiB0aGUKICAgIC8vIGNhbGwtc2VsZWN0b3JzIGFuZCB0aGV5IGFyZSBpbiB0aGUgcmVuYW1lZENhbGxTZWxlY3RvcnMgc2V0LgogICAgZm9yIChTZWxlY3RvciBzZWxlY3RvciBpbiBsaXZlU2VsZWN0b3JzLmtleXMpIHsKICAgICAgaWYgKHJlbmFtZWRDYWxsU2VsZWN0b3JzLmNvbnRhaW5zKHNlbGVjdG9yKSkgY29udGludWU7CiAgICAgIGlmICghc2VsZWN0b3IuYXBwbGllc1VubmFtZWQobWVtYmVyKSkgY29udGludWU7CiAgICAgIGlmICghbGl2ZVNlbGVjdG9yc1tzZWxlY3Rvcl0KICAgICAgICAgIC5jYW5IaXQobWVtYmVyLCBzZWxlY3Rvci5tZW1iZXJOYW1lLCBfY2xvc2VkV29ybGQpKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KCiAgICAgIGlmIChzdHViU2VsZWN0b3JzLmFkZChzZWxlY3RvcikpIHsKICAgICAgICBQYXJhbWV0ZXJTdHViTWV0aG9kIHN0dWIgPQogICAgICAgICAgICBnZW5lcmF0ZVBhcmFtZXRlclN0dWIobWVtYmVyLCBzZWxlY3RvciwgbnVsbCk7CiAgICAgICAgaWYgKHN0dWIgIT0gbnVsbCkgewogICAgICAgICAgc3R1YnMuYWRkKHN0dWIpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHJldHVybiBzdHViczsKICB9Cn0KgZ4ATk48ATUBOyMkISghIC4pLitCPTEyQioBFQEuHgEfRQEaJhYpTCAqJCM+ARoVGxMYHhgdGhkoATEnATM2AVBIBk1PUAZRUE5HUCAtSU5PUEpPATpHSTNPAUpLPFBLOykVCDsuOzYVCAYBQwFNAU86SklJMAEsRh0lKT1JHTEwARMfD0U6BgFPSk4BMTA1Liw9Mg8pGztFRTQ7KxEfJUUTIUosPw5IDAoIDwgBMRtFKVEvQUErSRpJLTATSkpGUjdBDBE8SjYKCAYBKjM9Eh8rGhs0KiY4Q1BLQ0M7SxYaDA8xQwgNKUUGAThEKkMBSjMBUBpNTwQBTRYbBS8UGhogIAUtFhsbICAFNDQ3NywsBUtHRkdFRUouICJFQSI2TElJRkg0NgFJAT4jRAYBFjo9BgEmPz8BPwEhIUs3FAYBTw8HTC4+ATcBUCA0Tj4oUCFPAS8oIUkcFwYBNCFIMQE1EggBMCNGHBsKCAFLS05OCU07KEkhJUFGAUUnUD5MIB8ODAoIBgFOUEQ0PTYjQBIIASkjOxwbCggGARIEAgE9cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9wYXJhbWV0ZXJfc3R1Yl9nZW5lcmF0b3IuZGFydERzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19lbWl0dGVyL3J1bnRpbWVfdHlwZV9nZW5lcmF0b3IuZGFydLeBLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5qc19lbWl0dGVyLnJ1bnRpbWVfdHlwZV9nZW5lcmF0b3I7CgppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IENvbW1vbkVsZW1lbnRzOwppbXBvcnQgJy4uL2RlZmVycmVkX2xvYWQuZGFydCcgc2hvdyBPdXRwdXRVbml0LCBPdXRwdXRVbml0RGF0YTsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqc0FzdDsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBzaG93IGpzOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvanNfaW50ZXJvcF9hbmFseXNpcy5kYXJ0JyBhcyBqc0ludGVyb3BBbmFseXNpczsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hbWVyLmRhcnQnIHNob3cgTmFtZXI7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzLmRhcnQnCiAgICBzaG93IFJ1bnRpbWVUeXBlc0NoZWNrcywgUnVudGltZVR5cGVzRW5jb2RlciwgT25WYXJpYWJsZUNhbGxiYWNrOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19jb2RlZ2VuLmRhcnQnCiAgICBzaG93IENsYXNzQ2hlY2tzLCBDbGFzc0Z1bmN0aW9uVHlwZSwgU3Vic3RpdHV0aW9uLCBUeXBlQ2hlY2s7CmltcG9ydCAnLi4vanNfZW1pdHRlci9zb3J0ZXIuZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnIHNob3cgU2V0bGV0OwoKaW1wb3J0ICdjb2RlX2VtaXR0ZXJfdGFzay5kYXJ0JyBzaG93IENvZGVFbWl0dGVyVGFzaywgRW1pdHRlcjsKCi8vIEZ1bmN0aW9uIHNpZ25hdHVyZXMgdXNlZCBpbiB0aGUgZ2VuZXJhdGlvbiBvZiBydW50aW1lIHR5cGUgaW5mb3JtYXRpb24uCnR5cGVkZWYgdm9pZCBGdW5jdGlvblR5cGVTaWduYXR1cmVFbWl0dGVyKENsYXNzRnVuY3Rpb25UeXBlIGNsYXNzRnVuY3Rpb25UeXBlKTsKCmNsYXNzIFR5cGVUZXN0IHsKICBmaW5hbCBqc0FzdC5OYW1lIG5hbWU7CiAgZmluYWwganNBc3QuTm9kZSBleHByZXNzaW9uOwoKICBUeXBlVGVzdCh0aGlzLm5hbWUsIHRoaXMuZXhwcmVzc2lvbik7Cn0KCmNsYXNzIFR5cGVUZXN0cyB7CiAgVHlwZVRlc3QgaXNUZXN0OwogIFR5cGVUZXN0IHN1YnN0aXR1dGlvbjsKICBUeXBlVGVzdCBzaWduYXR1cmU7Cn0KCmNsYXNzIFR5cGVUZXN0UHJvcGVydGllcyB7CiAgLy8vIFRoZSBpbmRleCBvZiB0aGUgZnVuY3Rpb24gdHlwZSBpbnRvIHRoZSBtZXRhZGF0YS4KICAvLy8KICAvLy8gSWYgdGhlIGNsYXNzIGRvZXNuJ3QgaGF2ZSBhIGZ1bmN0aW9uIHR5cGUgdGhpcyBmaWVsZCBpcyBgbnVsbGAuCiAgLy8vCiAgLy8vIElmIHRoZSBpcyB0ZXN0cyB3ZXJlIGdlbmVyYXRlZCB3aXRoIGBzdG9yZUZ1bmN0aW9uVHlwZUluTWV0YWRhdGFgIHNldCB0bwogIC8vLyBgZmFsc2VgLCB0aGlzIGZpZWxkIGlzIGBudWxsYCwgYW5kIHRoZSBbcHJvcGVydGllc10gY29udGFpbiBhIHByb3BlcnR5CiAgLy8vIHRoYXQgZW5jb2RlcyB0aGUgZnVuY3Rpb24gdHlwZS4KICBqc0FzdC5FeHByZXNzaW9uIGZ1bmN0aW9uVHlwZUluZGV4OwoKICAvLy8gVGhlIHByb3BlcnRpZXMgdGhhdCBtdXN0IGJlIGluc3RhbGxlZCBvbiB0aGUgcHJvdG90eXBlIG9mIHRoZQogIC8vLyBKUyBjb25zdHJ1Y3RvciBvZiB0aGUgW0NsYXNzRW50aXR5XSBmb3Igd2hpY2ggdGhlIGlzIGNoZWNrcyB3ZXJlCiAgLy8vIGdlbmVyYXRlZC4KICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIFR5cGVUZXN0cz4gX3Byb3BlcnRpZXMgPSA8Q2xhc3NFbnRpdHksIFR5cGVUZXN0cz57fTsKCiAgdm9pZCBhZGRJc1Rlc3QoQ2xhc3NFbnRpdHkgY2xzLCBqc0FzdC5OYW1lIG5hbWUsIGpzQXN0Lk5vZGUgZXhwcmVzc2lvbikgewogICAgVHlwZVRlc3RzIHR5cGVUZXN0cyA9IF9wcm9wZXJ0aWVzLnB1dElmQWJzZW50KGNscywgKCkgPT4gbmV3IFR5cGVUZXN0cygpKTsKICAgIHR5cGVUZXN0cy5pc1Rlc3QgPSBuZXcgVHlwZVRlc3QobmFtZSwgZXhwcmVzc2lvbik7CiAgfQoKICB2b2lkIGFkZFN1YnN0aXR1dGlvbigKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCBqc0FzdC5OYW1lIG5hbWUsIGpzQXN0Lk5vZGUgZXhwcmVzc2lvbikgewogICAgVHlwZVRlc3RzIHR5cGVUZXN0cyA9IF9wcm9wZXJ0aWVzLnB1dElmQWJzZW50KGNscywgKCkgPT4gbmV3IFR5cGVUZXN0cygpKTsKICAgIHR5cGVUZXN0cy5zdWJzdGl0dXRpb24gPSBuZXcgVHlwZVRlc3QobmFtZSwgZXhwcmVzc2lvbik7CiAgfQoKICB2b2lkIGFkZFNpZ25hdHVyZShDbGFzc0VudGl0eSBjbHMsIGpzQXN0Lk5hbWUgbmFtZSwganNBc3QuTm9kZSBleHByZXNzaW9uKSB7CiAgICBUeXBlVGVzdHMgdHlwZVRlc3RzID0gX3Byb3BlcnRpZXMucHV0SWZBYnNlbnQoY2xzLCAoKSA9PiBuZXcgVHlwZVRlc3RzKCkpOwogICAgdHlwZVRlc3RzLnNpZ25hdHVyZSA9IG5ldyBUeXBlVGVzdChuYW1lLCBleHByZXNzaW9uKTsKICB9CgogIHZvaWQgZm9yRWFjaFByb3BlcnR5KAogICAgICBTb3J0ZXIgc29ydGVyLCB2b2lkIGYoanNBc3QuTmFtZSBuYW1lLCBqc0FzdC5Ob2RlIGV4cHJlc3Npb24pKSB7CiAgICB2b2lkIGhhbmRsZVR5cGVUZXN0KFR5cGVUZXN0IHR5cGVUZXN0KSB7CiAgICAgIGlmICh0eXBlVGVzdCA9PSBudWxsKSByZXR1cm47CiAgICAgIGYodHlwZVRlc3QubmFtZSwgdHlwZVRlc3QuZXhwcmVzc2lvbik7CiAgICB9CgogICAgZm9yIChDbGFzc0VudGl0eSBjbHMgaW4gc29ydGVyLnNvcnRDbGFzc2VzKF9wcm9wZXJ0aWVzLmtleXMpKSB7CiAgICAgIFR5cGVUZXN0cyB0eXBlVGVzdHMgPSBfcHJvcGVydGllc1tjbHNdOwogICAgICBoYW5kbGVUeXBlVGVzdCh0eXBlVGVzdHMuaXNUZXN0KTsKICAgICAgaGFuZGxlVHlwZVRlc3QodHlwZVRlc3RzLnN1YnN0aXR1dGlvbik7CiAgICAgIGhhbmRsZVR5cGVUZXN0KHR5cGVUZXN0cy5zaWduYXR1cmUpOwogICAgfQogIH0KfQoKY2xhc3MgUnVudGltZVR5cGVHZW5lcmF0b3IgewogIGZpbmFsIENvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKICBmaW5hbCBPdXRwdXRVbml0RGF0YSBfb3V0cHV0VW5pdERhdGE7CiAgZmluYWwgQ29kZUVtaXR0ZXJUYXNrIGVtaXR0ZXJUYXNrOwogIGZpbmFsIE5hbWVyIF9uYW1lcjsKICBmaW5hbCBSdW50aW1lVHlwZXNDaGVja3MgX3J0aUNoZWNrczsKICBmaW5hbCBSdW50aW1lVHlwZXNFbmNvZGVyIF9ydGlFbmNvZGVyOwogIGZpbmFsIF9UeXBlQ29udGFpbmVkSW5PdXRwdXRVbml0VmlzaXRvciBfb3V0cHV0VW5pdFZpc2l0b3I7CgogIFJ1bnRpbWVUeXBlR2VuZXJhdG9yKHRoaXMuX2NvbW1vbkVsZW1lbnRzLCB0aGlzLl9vdXRwdXRVbml0RGF0YSwKICAgICAgdGhpcy5lbWl0dGVyVGFzaywgdGhpcy5fbmFtZXIsIHRoaXMuX3J0aUNoZWNrcywgdGhpcy5fcnRpRW5jb2RlcikKICAgICAgOiBfb3V0cHV0VW5pdFZpc2l0b3IgPSBuZXcgX1R5cGVDb250YWluZWRJbk91dHB1dFVuaXRWaXNpdG9yKAogICAgICAgICAgICBfY29tbW9uRWxlbWVudHMsIF9vdXRwdXRVbml0RGF0YSk7CgogIC8vLyBHZW5lcmF0ZSAiaXMgdGVzdHMiIGZvciBbY2xzXSBpdHNlbGYsIGFuZCB0aGUgImlzIHRlc3RzIiBmb3IgdGhlCiAgLy8vIGNsYXNzZXMgaXQgaW1wbGVtZW50cyBhbmQgdHlwZSBhcmd1bWVudCBzdWJzdGl0dXRpb24gZnVuY3Rpb25zIGZvciB0aGVzZQogIC8vLyB0ZXN0cy4gICBXZSBkb24ndCBuZWVkIHRvIGFkZCB0aGUgImlzIHRlc3RzIiBvZiB0aGUgc3VwZXIgY2xhc3MgYmVjYXVzZQogIC8vLyB0aGV5IHdpbGwgYmUgaW5oZXJpdGVkIGF0IHJ1bnRpbWUsIGJ1dCB3ZSBtYXkgbmVlZCB0byBnZW5lcmF0ZSB0aGUKICAvLy8gc3Vic3RpdHV0aW9ucywgYmVjYXVzZSB0aGV5IG1heSBoYXZlIGNoYW5nZWQuCgogIC8vLyBHZW5lcmF0ZXMgYWxsIHByb3BlcnRpZXMgbmVjZXNzYXJ5IGZvciBpcy1jaGVja3Mgb24gdGhlIFtjbGFzc0VsZW1lbnRdLgogIC8vLwogIC8vLyBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIFtUeXBlVGVzdFByb3BlcnRpZXNdIHRoYXQgY29udGFpbnMgdGhlIHByb3BlcnRpZXMKICAvLy8gdGhhdCBtdXN0IGJlIGluc3RhbGxlZCBvbiB0aGUgcHJvdG90eXBlIG9mIHRoZSBKUyBjb25zdHJ1Y3RvciBvZiB0aGUKICAvLy8gW2NsYXNzRWxlbWVudF0uCiAgLy8vCiAgLy8vIElmIFtzdG9yZUZ1bmN0aW9uVHlwZUluTWV0YWRhdGFdIGlzIGB0cnVlYCwgc3RvcmVzIHRoZSByZWlmaWVkIGZ1bmN0aW9uCiAgLy8vIHR5cGUgKGlmIGNsYXNzIGhhcyBvbmUpIGluIHRoZSBtZXRhZGF0YSBvYmplY3QgYW5kIHN0b3JlcyBpdHMgaW5kZXggaW4KICAvLy8gdGhlIHJlc3VsdC4gVGhpcyBpcyBvbmx5IHBvc3NpYmxlIGZvciBmdW5jdGlvbiB0eXBlcyB0aGF0IGRvIG5vdCBjb250YWluCiAgLy8vIHR5cGUgdmFyaWFibGVzLgogIFR5cGVUZXN0UHJvcGVydGllcyBnZW5lcmF0ZUlzVGVzdHMoQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50LAogICAgICBNYXA8TWVtYmVyRW50aXR5LCBqc0FzdC5FeHByZXNzaW9uPiBnZW5lcmF0ZWRDb2RlLAogICAgICB7Ym9vbCBzdG9yZUZ1bmN0aW9uVHlwZUluTWV0YWRhdGE6IHRydWV9KSB7CiAgICBUeXBlVGVzdFByb3BlcnRpZXMgcmVzdWx0ID0gbmV3IFR5cGVUZXN0UHJvcGVydGllcygpOwoKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEluY2x1ZGUgZnVuY3Rpb24gc2lnbmF0dXJlcyBpbiBbQ2xhc3NDaGVja3NdLgogICAgdm9pZCBnZW5lcmF0ZUZ1bmN0aW9uVHlwZVNpZ25hdHVyZShDbGFzc0Z1bmN0aW9uVHlwZSBjbGFzc0Z1bmN0aW9uVHlwZSkgewogICAgICBGdW5jdGlvbkVudGl0eSBtZXRob2QgPSBjbGFzc0Z1bmN0aW9uVHlwZS5jYWxsRnVuY3Rpb247CiAgICAgIEZ1bmN0aW9uVHlwZSB0eXBlID0gY2xhc3NGdW5jdGlvblR5cGUuY2FsbFR5cGU7CgogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBdm9pZCB1bm5lZWRlZCBmdW5jdGlvbiB0eXBlIGluZGljZXMgb3IKICAgICAgLy8gc2lnbmF0dXJlcy4gV2UgZWl0aGVyIG5lZWQgdGhlbSBmb3IgbWlycm9ycyBvciBiZWNhdXNlIFt0eXBlXSBpcwogICAgICAvLyBwb3RlbnRpYWxseSBhIHN1YnR5cGUgb2YgYSBjaGVja2VkIGZ1bmN0aW9uLiBDdXJyZW50bHkgd2UgZWFnZXJseQogICAgICAvLyBnZW5lcmF0ZSBhIGZ1bmN0aW9uIHR5cGUgaW5kZXggb3Igc2lnbmF0dXJlIGZvciBhbGwgY2FsbGFibGUgY2xhc3Nlcy4KICAgICAganNBc3QuRXhwcmVzc2lvbiBmdW5jdGlvblR5cGVJbmRleDsKICAgICAgYm9vbCBpc0RlZmVycmVkID0gZmFsc2U7CiAgICAgIGlmICghdHlwZS5jb250YWluc1R5cGVWYXJpYWJsZXMpIHsKICAgICAgICAvLyBUT0RPKHNpZ211bmQpOiB1c2Ugb3V0cHV0IHVuaXQgb2YgW21ldGhvZF0gd2hlbiB0aGUgY2xhc3NlcyBtZW50aW9uZWQKICAgICAgICAvLyBpbiBbdHlwZV0gYXJlbid0IGluIHRoZSBtYWluIG91dHB1dCB1bml0LiAoSXNzdWUgIzMxMDMyKQogICAgICAgIE91dHB1dFVuaXQgbWFpbk91dHB1dFVuaXQgPSBfb3V0cHV0VW5pdERhdGEubWFpbk91dHB1dFVuaXQ7CiAgICAgICAgaWYgKF9vdXRwdXRVbml0VmlzaXRvci5pc1R5cGVDb250YWluZWRJbih0eXBlLCBtYWluT3V0cHV0VW5pdCkpIHsKICAgICAgICAgIGZ1bmN0aW9uVHlwZUluZGV4ID0KICAgICAgICAgICAgICBlbWl0dGVyVGFzay5tZXRhZGF0YUNvbGxlY3Rvci5yZWlmeVR5cGUodHlwZSwgbWFpbk91dHB1dFVuaXQpOwogICAgICAgIH0gZWxzZSBpZiAoIXN0b3JlRnVuY3Rpb25UeXBlSW5NZXRhZGF0YSkgewogICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3VwcG9ydCBzaGFyaW5nIGRlZmVycmVkIHNpZ25hdHVyZXMgd2l0aCB0aGUKICAgICAgICAgIC8vIGZ1bGwgZW1pdHRlci4KICAgICAgICAgIGlzRGVmZXJyZWQgPSB0cnVlOwogICAgICAgICAgZnVuY3Rpb25UeXBlSW5kZXggPSBlbWl0dGVyVGFzay5tZXRhZGF0YUNvbGxlY3RvcgogICAgICAgICAgICAgIC5yZWlmeVR5cGUodHlwZSwgX291dHB1dFVuaXREYXRhLm91dHB1dFVuaXRGb3JNZW1iZXIobWV0aG9kKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzdG9yZUZ1bmN0aW9uVHlwZUluTWV0YWRhdGEgJiYgZnVuY3Rpb25UeXBlSW5kZXggIT0gbnVsbCkgewogICAgICAgIHJlc3VsdC5mdW5jdGlvblR5cGVJbmRleCA9IGZ1bmN0aW9uVHlwZUluZGV4OwogICAgICB9IGVsc2UgewogICAgICAgIGpzQXN0LkV4cHJlc3Npb24gZW5jb2RpbmcgPQogICAgICAgICAgICBnZW5lcmF0ZWRDb2RlW2NsYXNzRnVuY3Rpb25UeXBlLnNpZ25hdHVyZUZ1bmN0aW9uXTsKICAgICAgICBpZiAoY2xhc3NGdW5jdGlvblR5cGUuc2lnbmF0dXJlRnVuY3Rpb24gPT0gbnVsbCkgewogICAgICAgICAgLy8gVGhlIHNpZ25hdHVyZSBmdW5jdGlvbiBpc24ndCBsaXZlLgogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoZnVuY3Rpb25UeXBlSW5kZXggIT0gbnVsbCkgewogICAgICAgICAgaWYgKGlzRGVmZXJyZWQpIHsKICAgICAgICAgICAgLy8gVGhlIGZ1bmN0aW9uIHR5cGUgaW5kZXggbXVzdCBiZSBvZmZzZXQgYnkgdGhlIG51bWJlciBvZiB0eXBlcwogICAgICAgICAgICAvLyBhbHJlYWR5IGxvYWRlZC4KICAgICAgICAgICAgZW5jb2RpbmcgPSBuZXcganNBc3QuQmluYXJ5KAogICAgICAgICAgICAgICAgJysnLAogICAgICAgICAgICAgICAgbmV3IGpzQXN0LlZhcmlhYmxlVXNlKF9uYW1lci50eXBlc09mZnNldE5hbWUpLAogICAgICAgICAgICAgICAgZnVuY3Rpb25UeXBlSW5kZXgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZW5jb2RpbmcgPSBmdW5jdGlvblR5cGVJbmRleDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGVuY29kaW5nICE9IG51bGwpIHsKICAgICAgICAgIGpzQXN0Lk5hbWUgb3BlcmF0b3JTaWduYXR1cmUgPQogICAgICAgICAgICAgIF9uYW1lci5hc05hbWUoX25hbWVyLmZpeGVkTmFtZXMub3BlcmF0b3JTaWduYXR1cmUpOwogICAgICAgICAgcmVzdWx0LmFkZFNpZ25hdHVyZShjbGFzc0VsZW1lbnQsIG9wZXJhdG9yU2lnbmF0dXJlLCBlbmNvZGluZyk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgdm9pZCBnZW5lcmF0ZVR5cGVDaGVjayhUeXBlQ2hlY2sgY2hlY2spIHsKICAgICAgQ2xhc3NFbnRpdHkgY2hlY2tlZENsYXNzID0gY2hlY2suY2xzOwogICAgICBpZiAoY2hlY2submVlZHNJcykgewogICAgICAgIHJlc3VsdC5hZGRJc1Rlc3QoCiAgICAgICAgICAgIGNoZWNrZWRDbGFzcywgX25hbWVyLm9wZXJhdG9ySXMoY2hlY2tlZENsYXNzKSwganMoJzEnKSk7CiAgICAgIH0KICAgICAgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbiA9IGNoZWNrLnN1YnN0aXR1dGlvbjsKICAgICAgaWYgKHN1YnN0aXR1dGlvbiAhPSBudWxsKSB7CiAgICAgICAganNBc3QuRXhwcmVzc2lvbiBib2R5ID0KICAgICAgICAgICAgX2dldFN1YnN0aXR1dGlvbkNvZGUoZW1pdHRlclRhc2suZW1pdHRlciwgc3Vic3RpdHV0aW9uKTsKICAgICAgICByZXN1bHQuYWRkU3Vic3RpdHV0aW9uKAogICAgICAgICAgICBjaGVja2VkQ2xhc3MsIF9uYW1lci5zdWJzdGl0dXRpb25OYW1lKGNoZWNrZWRDbGFzcyksIGJvZHkpOwogICAgICB9CiAgICB9CgogICAgX2dlbmVyYXRlSXNUZXN0c09uKAogICAgICAgIGNsYXNzRWxlbWVudCwgZ2VuZXJhdGVGdW5jdGlvblR5cGVTaWduYXR1cmUsIGdlbmVyYXRlVHlwZUNoZWNrKTsKCiAgICBpZiAoY2xhc3NFbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRGdW5jdGlvbkNsYXNzKSB7CiAgICAgIHZhciB0eXBlID0ganNJbnRlcm9wQW5hbHlzaXMuYnVpbGRKc0Z1bmN0aW9uVHlwZSgpOwogICAgICBpZiAodHlwZSAhPSBudWxsKSB7CiAgICAgICAganNBc3QuRXhwcmVzc2lvbiB0aGlzQWNjZXNzID0gbmV3IGpzQXN0LlRoaXMoKTsKICAgICAgICBqc0FzdC5FeHByZXNzaW9uIGVuY29kaW5nID0gX3J0aUVuY29kZXIuZ2V0U2lnbmF0dXJlRW5jb2RpbmcoCiAgICAgICAgICAgIF9uYW1lciwgZW1pdHRlclRhc2suZW1pdHRlciwgdHlwZSwgdGhpc0FjY2Vzcyk7CiAgICAgICAganNBc3QuTmFtZSBvcGVyYXRvclNpZ25hdHVyZSA9CiAgICAgICAgICAgIF9uYW1lci5hc05hbWUoX25hbWVyLmZpeGVkTmFtZXMub3BlcmF0b3JTaWduYXR1cmUpOwogICAgICAgIHJlc3VsdC5hZGRTaWduYXR1cmUoY2xhc3NFbGVtZW50LCBvcGVyYXRvclNpZ25hdHVyZSwgZW5jb2RpbmcpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIENvbXB1dGUgYSBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdGhhdCBkZXNjcmliZXMgdGhlIG5lY2Vzc2FyeSBzdWJzdGl0dXRpb24KICAvLy8gZm9yIHR5cGUgYXJndW1lbnRzIGluIGEgc3VidHlwZSB0ZXN0LgogIC8vLwogIC8vLyBUaGUgcmVzdWx0IGNhbiBiZToKICAvLy8gIDEpIGBudWxsYCwgaWYgbm8gc3Vic3RpdHV0ZWQgY2hlY2sgaXMgbmVjZXNzYXJ5LCBiZWNhdXNlIHRoZSB0eXBlCiAgLy8vICAgICB2YXJpYWJsZXMgYXJlIHRoZSBzYW1lIG9yIHRoZXJlIGFyZSBubyB0eXBlIHZhcmlhYmxlcyBpbiB0aGUgY2xhc3MKICAvLy8gICAgIHRoYXQgaXMgY2hlY2tlZCBmb3IuCiAgLy8vICAyKSBBIGxpc3QgZXhwcmVzc2lvbiBkZXNjcmliaW5nIHRoZSB0eXBlIGFyZ3VtZW50cyB0byBiZSB1c2VkIGluIHRoZQogIC8vLyAgICAgc3VidHlwZSBjaGVjaywgaWYgdGhlIHR5cGUgYXJndW1lbnRzIHRvIGJlIHVzZWQgaW4gdGhlIGNoZWNrIGRvIG5vdAogIC8vLyAgICAgZGVwZW5kIG9uIHRoZSB0eXBlIGFyZ3VtZW50cyBvZiB0aGUgb2JqZWN0LgogIC8vLyAgMykgQSBmdW5jdGlvbiBtYXBwaW5nIHRoZSB0eXBlIHZhcmlhYmxlcyBvZiB0aGUgb2JqZWN0IHRvIGJlIGNoZWNrZWQgdG8KICAvLy8gICAgIGEgbGlzdCBleHByZXNzaW9uLgogIGpzQXN0LkV4cHJlc3Npb24gX2dldFN1YnN0aXR1dGlvbkNvZGUoCiAgICAgIEVtaXR0ZXIgZW1pdHRlciwgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbikgewogICAgaWYgKHN1YnN0aXR1dGlvbi5pc1RyaXZpYWwpIHsKICAgICAgcmV0dXJuIG5ldyBqc0FzdC5MaXRlcmFsTnVsbCgpOwogICAgfQoKICAgIGlmIChzdWJzdGl0dXRpb24uaXNKc0ludGVyb3ApIHsKICAgICAgcmV0dXJuIGpzKCdmdW5jdGlvbigpIHsgcmV0dXJuICMgfScsCiAgICAgICAgICBfcnRpRW5jb2Rlci5nZXRKc0ludGVyb3BUeXBlQXJndW1lbnRzKHN1YnN0aXR1dGlvbi5sZW5ndGgpKTsKICAgIH0KCiAgICBqc0FzdC5FeHByZXNzaW9uIGRlY2xhcmF0aW9uKFR5cGVWYXJpYWJsZVR5cGUgdmFyaWFibGUpIHsKICAgICAgcmV0dXJuIG5ldyBqc0FzdC5QYXJhbWV0ZXIoX2dldFZhcmlhYmxlTmFtZSh2YXJpYWJsZS5lbGVtZW50Lm5hbWUpKTsKICAgIH0KCiAgICBqc0FzdC5FeHByZXNzaW9uIHVzZShUeXBlVmFyaWFibGVUeXBlIHZhcmlhYmxlKSB7CiAgICAgIHJldHVybiBuZXcganNBc3QuVmFyaWFibGVVc2UoX2dldFZhcmlhYmxlTmFtZSh2YXJpYWJsZS5lbGVtZW50Lm5hbWUpKTsKICAgIH0KCiAgICBpZiAoc3Vic3RpdHV0aW9uLmFyZ3VtZW50cy5ldmVyeSgoRGFydFR5cGUgdHlwZSkgPT4gdHlwZS5pc0R5bmFtaWMpKSB7CiAgICAgIHJldHVybiBlbWl0dGVyLmdlbmVyYXRlRnVuY3Rpb25UaGF0UmV0dXJuc051bGwoKTsKICAgIH0gZWxzZSB7CiAgICAgIGpzQXN0LkV4cHJlc3Npb24gdmFsdWUgPQogICAgICAgICAgX2dldFN1YnN0aXR1dGlvblJlcHJlc2VudGF0aW9uKGVtaXR0ZXIsIHN1YnN0aXR1dGlvbi5hcmd1bWVudHMsIHVzZSk7CiAgICAgIGlmIChzdWJzdGl0dXRpb24uaXNGdW5jdGlvbikgewogICAgICAgIEl0ZXJhYmxlPGpzQXN0LkV4cHJlc3Npb24+IGZvcm1hbHMgPQogICAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBQYXNzIFtkZWNsYXJhdGlvbl0gZGlyZWN0bHkgdG8gYG1hcGAgd2hlbgogICAgICAgICAgICAvLyBgc3Vic3RpdHV0aW9uLnBhcmFtZXRlcnNgIGNhbiBubyBsb25nZXIgYmUgYQogICAgICAgICAgICAvLyBgTGlzdDxSZXNvbHV0aW9uRGFydFR5cGU+YC4KICAgICAgICAgICAgc3Vic3RpdHV0aW9uLnBhcmFtZXRlcnMubWFwKCh0eXBlKSA9PiBkZWNsYXJhdGlvbih0eXBlKSk7CiAgICAgICAgcmV0dXJuIGpzKCdmdW5jdGlvbigjKSB7IHJldHVybiAjIH0nLCBbZm9ybWFscywgdmFsdWVdKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4ganMoJ2Z1bmN0aW9uKCkgeyByZXR1cm4gIyB9JywgdmFsdWUpOwogICAgICB9CiAgICB9CiAgfQoKICBqc0FzdC5FeHByZXNzaW9uIF9nZXRTdWJzdGl0dXRpb25SZXByZXNlbnRhdGlvbigKICAgICAgRW1pdHRlciBlbWl0dGVyLCBMaXN0PERhcnRUeXBlPiB0eXBlcywgT25WYXJpYWJsZUNhbGxiYWNrIG9uVmFyaWFibGUpIHsKICAgIExpc3Q8anNBc3QuRXhwcmVzc2lvbj4gZWxlbWVudHMgPSB0eXBlcwogICAgICAgIC5tYXAoKERhcnRUeXBlIHR5cGUpID0+CiAgICAgICAgICAgIF9ydGlFbmNvZGVyLmdldFR5cGVSZXByZXNlbnRhdGlvbihlbWl0dGVyLCB0eXBlLCBvblZhcmlhYmxlKSkKICAgICAgICAudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgICByZXR1cm4gbmV3IGpzQXN0LkFycmF5SW5pdGlhbGl6ZXIoZWxlbWVudHMpOwogIH0KCiAgU3RyaW5nIF9nZXRWYXJpYWJsZU5hbWUoU3RyaW5nIG5hbWUpIHsKICAgIC8vIEtlcm5lbCB0eXBlIHZhcmlhYmxlIG5hbWVzIGZvciBhbm9ueW1vdXMgbWl4aW4gYXBwbGljYXRpb25zIGhhdmUgbmFtZXMKICAgIC8vIGNhbm9uaWNhbGl6ZWQgdG8gYSBub24taWRlbnRpZmllZCwgZS5nLiAnI1UwJy4KICAgIG5hbWUgPSBuYW1lLnJlcGxhY2VBbGwoJyMnLCAnXycpOwogICAgcmV0dXJuIF9uYW1lci5zYWZlVmFyaWFibGVOYW1lKG5hbWUpOwogIH0KCiAgdm9pZCBfZ2VuZXJhdGVJc1Rlc3RzT24oCiAgICAgIENsYXNzRW50aXR5IGNscywKICAgICAgRnVuY3Rpb25UeXBlU2lnbmF0dXJlRW1pdHRlciBnZW5lcmF0ZUZ1bmN0aW9uVHlwZVNpZ25hdHVyZSwKICAgICAgdm9pZCBlbWl0VHlwZUNoZWNrKFR5cGVDaGVjayBjaGVjaykpIHsKICAgIFNldGxldDxDbGFzc0VudGl0eT4gZ2VuZXJhdGVkID0gbmV3IFNldGxldDxDbGFzc0VudGl0eT4oKTsKCiAgICAvLyBQcmVjb21wdXRlZCBpcyBjaGVja3MuCiAgICBDbGFzc0NoZWNrcyBjbGFzc0NoZWNrcyA9IF9ydGlDaGVja3MucmVxdWlyZWRDaGVja3NbY2xzXTsKICAgIEl0ZXJhYmxlPFR5cGVDaGVjaz4gdHlwZUNoZWNrcyA9IGNsYXNzQ2hlY2tzLmNoZWNrczsKICAgIGlmICh0eXBlQ2hlY2tzICE9IG51bGwpIHsKICAgICAgZm9yIChUeXBlQ2hlY2sgdHlwZUNoZWNrIGluIHR5cGVDaGVja3MpIHsKICAgICAgICBpZiAoIWdlbmVyYXRlZC5jb250YWlucyh0eXBlQ2hlY2suY2xzKSkgewogICAgICAgICAgZW1pdFR5cGVDaGVjayh0eXBlQ2hlY2spOwogICAgICAgICAgZ2VuZXJhdGVkLmFkZCh0eXBlQ2hlY2suY2xzKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBpZiAoY2xhc3NDaGVja3MuZnVuY3Rpb25UeXBlICE9IG51bGwpIHsKICAgICAgZ2VuZXJhdGVGdW5jdGlvblR5cGVTaWduYXR1cmUoY2xhc3NDaGVja3MuZnVuY3Rpb25UeXBlKTsKICAgIH0KICB9Cn0KCi8vLyBWaXNpdG9yIHRoYXQgY2hlY2tzIHdoZXRoZXIgYSB0eXBlIGlzIGNvbnRhaW5lZCB3aXRoaW4gb25lIG91dHB1dCB1bml0LgpjbGFzcyBfVHlwZUNvbnRhaW5lZEluT3V0cHV0VW5pdFZpc2l0b3IKICAgIGltcGxlbWVudHMgRGFydFR5cGVWaXNpdG9yPGJvb2wsIE91dHB1dFVuaXQ+IHsKICBmaW5hbCBDb21tb25FbGVtZW50cyBfY29tbW9uRWxlbWVudHM7CiAgZmluYWwgT3V0cHV0VW5pdERhdGEgX291dHB1dFVuaXREYXRhOwoKICBfVHlwZUNvbnRhaW5lZEluT3V0cHV0VW5pdFZpc2l0b3IodGhpcy5fY29tbW9uRWxlbWVudHMsIHRoaXMuX291dHB1dFVuaXREYXRhKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGFsbCBjbGFzc2VzIG1lbnRpb25lZCBpbiBbdHlwZV0gYXJlIGluIFtvdXRwdXRVbml0XS4KICBib29sIGlzVHlwZUNvbnRhaW5lZEluKERhcnRUeXBlIHR5cGUsIE91dHB1dFVuaXQgb3V0cHV0VW5pdCkgPT4KICAgICAgdmlzaXQodHlwZSwgb3V0cHV0VW5pdCk7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXQoRGFydFR5cGUgdHlwZSwgT3V0cHV0VW5pdCBhcmd1bWVudCkgPT4gdHlwZS5hY2NlcHQodGhpcywgYXJndW1lbnQpOwoKICBib29sIHZpc2l0TGlzdChMaXN0PERhcnRUeXBlPiB0eXBlcywgT3V0cHV0VW5pdCBhcmd1bWVudCkgewogICAgZm9yIChEYXJ0VHlwZSB0eXBlIGluIHR5cGVzKSB7CiAgICAgIGlmICghdmlzaXQodHlwZSwgYXJndW1lbnQpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRGdXR1cmVPclR5cGUoRnV0dXJlT3JUeXBlIHR5cGUsIE91dHB1dFVuaXQgYXJndW1lbnQpIHsKICAgIGlmIChfb3V0cHV0VW5pdERhdGEub3V0cHV0VW5pdEZvckNsYXNzKF9jb21tb25FbGVtZW50cy5mdW5jdGlvbkNsYXNzKSAhPQogICAgICAgIGFyZ3VtZW50KSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB2aXNpdCh0eXBlLnR5cGVBcmd1bWVudCwgYXJndW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdER5bmFtaWNUeXBlKER5bmFtaWNUeXBlIHR5cGUsIE91dHB1dFVuaXQgYXJndW1lbnQpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRBbnlUeXBlKEFueVR5cGUgdHlwZSwgT3V0cHV0VW5pdCBhcmd1bWVudCkgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFR5cGVkZWZUeXBlKFR5cGVkZWZUeXBlIHR5cGUsIE91dHB1dFVuaXQgYXJndW1lbnQpIHsKICAgIHJldHVybiB2aXNpdCh0eXBlLnVuYWxpYXNlZCwgYXJndW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEludGVyZmFjZVR5cGUoSW50ZXJmYWNlVHlwZSB0eXBlLCBPdXRwdXRVbml0IGFyZ3VtZW50KSB7CiAgICBpZiAoX291dHB1dFVuaXREYXRhLm91dHB1dFVuaXRGb3JDbGFzcyh0eXBlLmVsZW1lbnQpICE9IGFyZ3VtZW50KSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB2aXNpdExpc3QodHlwZS50eXBlQXJndW1lbnRzLCBhcmd1bWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSB0eXBlLCBPdXRwdXRVbml0IGFyZ3VtZW50KSB7CiAgICBib29sIHJlc3VsdCA9IHZpc2l0KHR5cGUucmV0dXJuVHlwZSwgYXJndW1lbnQpICYmCiAgICAgICAgdmlzaXRMaXN0KHR5cGUucGFyYW1ldGVyVHlwZXMsIGFyZ3VtZW50KSAmJgogICAgICAgIHZpc2l0TGlzdCh0eXBlLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMsIGFyZ3VtZW50KSAmJgogICAgICAgIHZpc2l0TGlzdCh0eXBlLm5hbWVkUGFyYW1ldGVyVHlwZXMsIGFyZ3VtZW50KTsKICAgIGlmICghcmVzdWx0KSByZXR1cm4gZmFsc2U7CiAgICBmb3IgKEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHR5cGVWYXJpYWJsZSBpbiB0eXBlLnR5cGVWYXJpYWJsZXMpIHsKICAgICAgaWYgKCF2aXNpdCh0eXBlVmFyaWFibGUuYm91bmQsIGFyZ3VtZW50KSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RnVuY3Rpb25UeXBlVmFyaWFibGUoCiAgICAgIEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHR5cGUsIE91dHB1dFVuaXQgYXJndW1lbnQpIHsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFR5cGVWYXJpYWJsZVR5cGUoVHlwZVZhcmlhYmxlVHlwZSB0eXBlLCBPdXRwdXRVbml0IGFyZ3VtZW50KSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0Vm9pZFR5cGUoVm9pZFR5cGUgdHlwZSwgT3V0cHV0VW5pdCBhcmd1bWVudCkgewogICAgcmV0dXJuIHRydWU7CiAgfQp9CoF+AE5OPAEzATZAJCEhIEYuKkYyQiQoAT8BS1ABERkfASgCARITGRYCARs4BkYGT00mJgFERxFOAUxPNwQBGEFPPQQBT086BAEYRy0kLQYBRC4oLisGBAIBHSgoJRYnKT4BQ0hELwFHT05JNAFOBk9LFgZOTU8WPzkyOgFKTj42AUZKS08qHylRRERKHk0zTxsdPE0KCEY2DyRAOzASCikcTR8pFT8kEyoMCiApQkoKCAYBLiwbGkUINiIgRSBICAYBGEkBRToaOEY8J0BICAYTBAFQLAYZSU0fTE42Tx0pNCImBgEkK0cGAT5LBgE2TQYBSzgNH1AlLU48K0ZBDzUIBgQBM04sIEoiMQQBKU42JioEARsXQi0/AR4+OR4wMiQoCggGASw/BgQCAUwoMygoAVEBTUIfAQxRAT4jJBYIBhEEAQxDTRQUBi8EAQxIAQxAAQxBLAQBDEVIFAY0BAEMQzY0PDcfRDIWCAYRBAEMIjgRBAEMSxIEAQw7EQQCATtwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL3J1bnRpbWVfdHlwZV9nZW5lcmF0b3IuZGFydDlzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy91bml2ZXJzZS90YXJnZXRfY2hlY2tzLmRhcnSIVy8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMudGFyZ2V0X2NoZWNrczsKCi8vLyBBIHN1bW1hcnkgb2YgdGhlIGNoZWNrcyByZXF1aXJlZCB3aGVuIGVudGVyaW5nIGEgdGFyZ2V0IG1ldGhvZC4KLy8vCi8vLyBUaGUgdGFyZ2V0IGNoZWNrcyBhcmUgdXNlZCB0byBhbm5vdGF0ZSBjYWxsIHNpdGVzIHdpdGggdGhlIGNoZWNraW5nIHJlcXVpcmVkCi8vLyBmcm9tIHRoYXQgY2FsbCBzaXRlLgovLy8KLy8vIFRoZSB0YXJnZXQgY2FuIGVpdGhlciBwZXJmb3JtIHdvcnN0LWNhc2UgY2hlY2tzIG92ZXIgYWxsIGNhbGwgc2l0ZXMsIG9yIGNhbgovLy8gYmUgZ2VuZXJhdGVkIGFzIG11bHRpcGxlIGVudHJ5IHBvaW50cyBmb3IgZGlmZmVyZW50IFRhcmdldENoZWNrcy4KLy8vCi8vLyBUaGUgVGFyZ2V0Q2hlY2tzIGF0IGEgY2FsbCBzaXRlIGNhbiBiZSByZWZpbmVkIGJ5IGFuYWx5c2lzLiAgRm9yIGV4YW1wbGUsCi8vLyB0aGUgZ2VuZXJpYyBjb3ZhcmlhbnQgY2hlY2sgZm9yIHdyaXRpbmcgaW50byBhIExpc3QgbWlnaHQgbm90IGJlIHJlcXVpcmVkCi8vLyB3aGVuIGNvcHlpbmcgdmFsdWVzIGZyb20gYSBMaXN0IGFsbG9jYXRlZCB3aXRoIHRoZSBzYW1lIHR5cGUgdmFyaWFibGUgdmFsdWUuCi8vLwovLy8gVGhlIFRhcmdldENoZWNrcyBhdCBhIGNhbGwgc2l0ZSBjYW4gYmUgdXNlZCB0byBpbmZvcm0gb3B0aW1pemF0aW9ucywgZm9yCi8vLyBleGFtcGxlLCBvbmx5IGxvd2VyaW5nIHRvIHNpbXBsZXIgaW5zdHJ1Y3Rpb25zIHdoZW4gZ2VuZXJpYyBjb3ZhcmlhbnQgY2hlY2sKLy8vIGlzIHJlcXVpcmVkLgovLy8KLy8vIFVuc291bmQgbW9kZXMgY2FuIGJlIGltcGxlbWVudGVkIGluIGEgc2NvcGVkIG1hbm5lciBieSB1c2luZyBhIFRhcmdldENoZWNrcwovLy8gdGhhdCBoYXMgZmV3ZXIgY2hlY2tzIHRoYW4gcmVxdWlyZWQgKG9yIG5vIGNoZWNrcykgaW4gdGhlIHVuc291bmQgcmVnaW9uLgpjbGFzcyBUYXJnZXRDaGVja3MgewogIC8vIFR5cGljYWwgb2YgZGlyZWN0IHN0YXRpYyBjYWxsIHNpdGVzLgogIC8vIFR5cGljYWwgb2Ygc3RhdGljIG1ldGhvZCB0YXJnZXRzIHdpdGggbm8gdGVhci1vZmZzLgogIHN0YXRpYyBmaW5hbCBUYXJnZXRDaGVja3Mgbm9uZSA9IGNvbnN0IFRhcmdldENoZWNrcy5fKGZhbHNlLCBmYWxzZSwgZmFsc2UpOwoKICAvLyBUeXBpY2FsIG9mIGNsb3N1cmUgY2FsbHMgYW5kIGR5bmFtaWMgY2FsbHMuCiAgc3RhdGljIGZpbmFsIFRhcmdldENoZWNrcyBkeW5hbWljQ2hlY2tzID0KICAgICAgY29uc3QgVGFyZ2V0Q2hlY2tzLl8odHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CgogIC8vIFR5cGljYWwgb2YgbWV0aG9kIGNhbGxzLgogIHN0YXRpYyBmaW5hbCBUYXJnZXRDaGVja3MgY292YXJpYW50Q2hlY2tzID0KICAgICAgY29uc3QgVGFyZ2V0Q2hlY2tzLl8oZmFsc2UsIHRydWUsIGZhbHNlKTsKCiAgLy8gVE9ETyhzcmEpOiBUaGlzIGNhbiBiZSBtb3JlIGZpbmUtZ3JhaW5lZCwgdGFsa2luZyBhYm91dCBpbmRpdmlkdWFsCiAgLy8gcGFyYW1ldGVycy4KICBmaW5hbCBib29sIF9jaGVja090aGVyUGFyYW1ldGVyczsKICBmaW5hbCBib29sIF9jaGVja0NvdmFyaWFudFBhcmFtZXRlcnM7CiAgZmluYWwgYm9vbCBfY2hlY2tUeXBlUGFyYW1ldGVyczsKICBjb25zdCBUYXJnZXRDaGVja3MuXygKICAgIHRoaXMuX2NoZWNrT3RoZXJQYXJhbWV0ZXJzLAogICAgdGhpcy5fY2hlY2tDb3ZhcmlhbnRQYXJhbWV0ZXJzLAogICAgdGhpcy5fY2hlY2tUeXBlUGFyYW1ldGVycywKICApOwoKICBib29sIGdldCBjaGVja1R5cGVQYXJhbWV0ZXJzID0+IF9jaGVja1R5cGVQYXJhbWV0ZXJzOwogIGJvb2wgZ2V0IGNoZWNrQ292YXJpYW50UGFyYW1ldGVycyA9PiBfY2hlY2tDb3ZhcmlhbnRQYXJhbWV0ZXJzOwogIGJvb2wgZ2V0IGNoZWNrQWxsUGFyYW1ldGVycyA9PiBfY2hlY2tPdGhlclBhcmFtZXRlcnM7Cn0KNgBOTjwBHwFEBFEZBFBGBE5OUQRNUBEEUE4VKjlOATEsLgEeLjABSBEkKCMYICQfBQE4QjgCATBwYWNrYWdlOmNvbXBpbGVyL3NyYy91bml2ZXJzZS90YXJnZXRfY2hlY2tzLmRhcnQzc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc3NhL2p1bXBfaGFuZGxlci5kYXJ0n6AvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvanVtcHMuZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJy4uL2lvL3NvdXJjZV9pbmZvcm1hdGlvbi5kYXJ0JzsKCmltcG9ydCAnYnVpbGRlcl9rZXJuZWwuZGFydCc7CmltcG9ydCAnbG9jYWxzX2hhbmRsZXIuZGFydCc7CmltcG9ydCAnbm9kZXMuZGFydCc7CgovLy8gQSBzaW5nbGUgYnJlYWsvY29udGludWUgaW5zdHJ1Y3Rpb24uCmNsYXNzIF9KdW1wSGFuZGxlckVudHJ5IHsKICBmaW5hbCBISnVtcCBqdW1wSW5zdHJ1Y3Rpb247CiAgZmluYWwgTG9jYWxzSGFuZGxlciBsb2NhbHM7CiAgYm9vbCBpc0JyZWFrKCkgPT4ganVtcEluc3RydWN0aW9uIGlzIEhCcmVhazsKICBib29sIGlzQ29udGludWUoKSA9PiBqdW1wSW5zdHJ1Y3Rpb24gaXMgSENvbnRpbnVlOwogIF9KdW1wSGFuZGxlckVudHJ5KHRoaXMuanVtcEluc3RydWN0aW9uLCB0aGlzLmxvY2Fscyk7Cn0KCmFic3RyYWN0IGNsYXNzIEp1bXBIYW5kbGVyIHsKICBmYWN0b3J5IEp1bXBIYW5kbGVyKEtlcm5lbFNzYUdyYXBoQnVpbGRlciBidWlsZGVyLCBKdW1wVGFyZ2V0IHRhcmdldCkgewogICAgcmV0dXJuIG5ldyBUYXJnZXRKdW1wSGFuZGxlcihidWlsZGVyLCB0YXJnZXQpOwogIH0KICB2b2lkIGdlbmVyYXRlQnJlYWsoU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIFtMYWJlbERlZmluaXRpb24gbGFiZWxdKTsKICB2b2lkIGdlbmVyYXRlQ29udGludWUoU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIFtMYWJlbERlZmluaXRpb24gbGFiZWxdKTsKICB2b2lkIGZvckVhY2hCcmVhayh2b2lkIGFjdGlvbihIQnJlYWsgaW5zdHJ1Y3Rpb24sIExvY2Fsc0hhbmRsZXIgbG9jYWxzKSk7CiAgdm9pZCBmb3JFYWNoQ29udGludWUoCiAgICAgIHZvaWQgYWN0aW9uKEhDb250aW51ZSBpbnN0cnVjdGlvbiwgTG9jYWxzSGFuZGxlciBsb2NhbHMpKTsKICBib29sIGhhc0FueUNvbnRpbnVlKCk7CiAgYm9vbCBoYXNBbnlCcmVhaygpOwogIHZvaWQgY2xvc2UoKTsKICBmaW5hbCBKdW1wVGFyZ2V0IHRhcmdldDsKICBMaXN0PExhYmVsRGVmaW5pdGlvbj4gZ2V0IGxhYmVsczsKfQoKLy8vIEp1bXAgaGFuZGxlciB1c2VkIHRvIGF2b2lkIG51bGwgY2hlY2tzIHdoZW4gYSB0YXJnZXQgaXNuJ3QgdXNlZCBhcyB0aGUKLy8vIHRhcmdldCBvZiBhIGJyZWFrLCBhbmQgdGhlcmVmb3JlIGRvZXNuJ3QgbmVlZCBhIGJyZWFrIGhhbmRsZXIgYXNzb2NpYXRlZAovLy8gd2l0aCBpdC4KY2xhc3MgTnVsbEp1bXBIYW5kbGVyIGltcGxlbWVudHMgSnVtcEhhbmRsZXIgewogIGZpbmFsIERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlcjsKCiAgTnVsbEp1bXBIYW5kbGVyKHRoaXMucmVwb3J0ZXIpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGdlbmVyYXRlQnJlYWsoU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIFtMYWJlbERlZmluaXRpb24gbGFiZWxdKSB7CiAgICByZXBvcnRlci5pbnRlcm5hbEVycm9yKENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgJ051bGxKdW1wSGFuZGxlci5nZW5lcmF0ZUJyZWFrIHNob3VsZCBub3QgYmUgY2FsbGVkLicpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBnZW5lcmF0ZUNvbnRpbnVlKFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICBbTGFiZWxEZWZpbml0aW9uIGxhYmVsXSkgewogICAgcmVwb3J0ZXIuaW50ZXJuYWxFcnJvcihDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICdOdWxsSnVtcEhhbmRsZXIuZ2VuZXJhdGVDb250aW51ZSBzaG91bGQgbm90IGJlIGNhbGxlZC4nKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaEJyZWFrKEZ1bmN0aW9uIGlnbm9yZWQpIHt9CiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoQ29udGludWUoRnVuY3Rpb24gaWdub3JlZCkge30KICBAb3ZlcnJpZGUKICB2b2lkIGNsb3NlKCkge30KICBAb3ZlcnJpZGUKICBib29sIGhhc0FueUNvbnRpbnVlKCkgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNBbnlCcmVhaygpID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBMaXN0PExhYmVsRGVmaW5pdGlvbj4gZ2V0IGxhYmVscyA9PiBjb25zdCA8TGFiZWxEZWZpbml0aW9uPltdOwogIEBvdmVycmlkZQogIEp1bXBUYXJnZXQgZ2V0IHRhcmdldCA9PiBudWxsOwp9CgovLy8gSnVtcCBoYW5kbGVyIHRoYXQgcmVjb3JkcyBicmVha3MgdW50aWwgYSB0YXJnZXQgYmxvY2sgaXMgYXZhaWxhYmxlLgovLy8KLy8vIEJyZWFrcyBhcmUgYWx3YXlzIGZvcndhcmQganVtcHMuIENvbnRpbnVlcyBpbiBsb29wcyBhcmUgaW1wbGVtZW50ZWQgYXMKLy8vIGJyZWFrcyBvZiB0aGUgYm9keS4gQ29udGludWVzIGluIHN3aXRjaGVzIGlzIGN1cnJlbnRseSBub3QgaGFuZGxlZC4KY2xhc3MgVGFyZ2V0SnVtcEhhbmRsZXIgaW1wbGVtZW50cyBKdW1wSGFuZGxlciB7CiAgZmluYWwgS2VybmVsU3NhR3JhcGhCdWlsZGVyIGJ1aWxkZXI7CiAgQG92ZXJyaWRlCiAgZmluYWwgSnVtcFRhcmdldCB0YXJnZXQ7CiAgZmluYWwgTGlzdDxfSnVtcEhhbmRsZXJFbnRyeT4ganVtcHM7CgogIFRhcmdldEp1bXBIYW5kbGVyKEtlcm5lbFNzYUdyYXBoQnVpbGRlciBidWlsZGVyLCB0aGlzLnRhcmdldCkKICAgICAgOiB0aGlzLmJ1aWxkZXIgPSBidWlsZGVyLAogICAgICAgIGp1bXBzID0gPF9KdW1wSGFuZGxlckVudHJ5PltdIHsKICAgIGFzc2VydChidWlsZGVyLmp1bXBUYXJnZXRzW3RhcmdldF0gPT0gbnVsbCk7CiAgICBidWlsZGVyLmp1bXBUYXJnZXRzW3RhcmdldF0gPSB0aGlzOwogIH0KCiAgQWJzdHJhY3RWYWx1ZURvbWFpbiBnZXQgX2Fic3RyYWN0VmFsdWVEb21haW4gPT4KICAgICAgYnVpbGRlci5jbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICBAb3ZlcnJpZGUKICB2b2lkIGdlbmVyYXRlQnJlYWsoU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIFtMYWJlbERlZmluaXRpb24gbGFiZWxdKSB7CiAgICBISW5zdHJ1Y3Rpb24gYnJlYWtJbnN0cnVjdGlvbjsKICAgIGlmIChsYWJlbCA9PSBudWxsKSB7CiAgICAgIGJyZWFrSW5zdHJ1Y3Rpb24gPQogICAgICAgICAgbmV3IEhCcmVhayhfYWJzdHJhY3RWYWx1ZURvbWFpbiwgdGFyZ2V0LCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9IGVsc2UgewogICAgICBicmVha0luc3RydWN0aW9uID0KICAgICAgICAgIG5ldyBIQnJlYWsudG9MYWJlbChfYWJzdHJhY3RWYWx1ZURvbWFpbiwgbGFiZWwsIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0KICAgIExvY2Fsc0hhbmRsZXIgbG9jYWxzID0gbmV3IExvY2Fsc0hhbmRsZXIuZnJvbShidWlsZGVyLmxvY2Fsc0hhbmRsZXIpOwogICAgYnVpbGRlci5jbG9zZShicmVha0luc3RydWN0aW9uKTsKICAgIGp1bXBzLmFkZChuZXcgX0p1bXBIYW5kbGVyRW50cnkoYnJlYWtJbnN0cnVjdGlvbiwgbG9jYWxzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGdlbmVyYXRlQ29udGludWUoU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIFtMYWJlbERlZmluaXRpb24gbGFiZWxdKSB7CiAgICBISW5zdHJ1Y3Rpb24gY29udGludWVJbnN0cnVjdGlvbjsKICAgIGlmIChsYWJlbCA9PSBudWxsKSB7CiAgICAgIGNvbnRpbnVlSW5zdHJ1Y3Rpb24gPQogICAgICAgICAgbmV3IEhDb250aW51ZShfYWJzdHJhY3RWYWx1ZURvbWFpbiwgdGFyZ2V0LCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9IGVsc2UgewogICAgICBjb250aW51ZUluc3RydWN0aW9uID0KICAgICAgICAgIG5ldyBIQ29udGludWUudG9MYWJlbChfYWJzdHJhY3RWYWx1ZURvbWFpbiwgbGFiZWwsIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgLy8gU3dpdGNoIGNhc2UgY29udGludWUgc3RhdGVtZW50cyBtdXN0IGJlIGhhbmRsZWQgYnkgdGhlCiAgICAgIC8vIFtTd2l0Y2hDYXNlSnVtcEhhbmRsZXJdLgogICAgICBhc3NlcnQoIWxhYmVsLnRhcmdldC5pc1N3aXRjaENhc2UpOwogICAgfQogICAgTG9jYWxzSGFuZGxlciBsb2NhbHMgPSBuZXcgTG9jYWxzSGFuZGxlci5mcm9tKGJ1aWxkZXIubG9jYWxzSGFuZGxlcik7CiAgICBidWlsZGVyLmNsb3NlKGNvbnRpbnVlSW5zdHJ1Y3Rpb24pOwogICAganVtcHMuYWRkKG5ldyBfSnVtcEhhbmRsZXJFbnRyeShjb250aW51ZUluc3RydWN0aW9uLCBsb2NhbHMpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaEJyZWFrKEZ1bmN0aW9uIGFjdGlvbikgewogICAgZm9yIChfSnVtcEhhbmRsZXJFbnRyeSBlbnRyeSBpbiBqdW1wcykgewogICAgICBpZiAoZW50cnkuaXNCcmVhaygpKSBhY3Rpb24oZW50cnkuanVtcEluc3RydWN0aW9uLCBlbnRyeS5sb2NhbHMpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoQ29udGludWUoRnVuY3Rpb24gYWN0aW9uKSB7CiAgICBmb3IgKF9KdW1wSGFuZGxlckVudHJ5IGVudHJ5IGluIGp1bXBzKSB7CiAgICAgIGlmIChlbnRyeS5pc0NvbnRpbnVlKCkpIGFjdGlvbihlbnRyeS5qdW1wSW5zdHJ1Y3Rpb24sIGVudHJ5LmxvY2Fscyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc0FueUNvbnRpbnVlKCkgewogICAgZm9yIChfSnVtcEhhbmRsZXJFbnRyeSBlbnRyeSBpbiBqdW1wcykgewogICAgICBpZiAoZW50cnkuaXNDb250aW51ZSgpKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaGFzQW55QnJlYWsoKSB7CiAgICBmb3IgKF9KdW1wSGFuZGxlckVudHJ5IGVudHJ5IGluIGp1bXBzKSB7CiAgICAgIGlmIChlbnRyeS5pc0JyZWFrKCkpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjbG9zZSgpIHsKICAgIC8vIFRoZSBtYXBwaW5nIGZyb20gVGFyZ2V0RWxlbWVudCB0byBKdW1wSGFuZGxlciBpcyBubyBsb25nZXIgbmVlZGVkLgogICAgYnVpbGRlci5qdW1wVGFyZ2V0cy5yZW1vdmUodGFyZ2V0KTsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8TGFiZWxEZWZpbml0aW9uPiBnZXQgbGFiZWxzIHsKICAgIExpc3Q8TGFiZWxEZWZpbml0aW9uPiByZXN1bHQgPSBudWxsOwogICAgZm9yIChMYWJlbERlZmluaXRpb24gZWxlbWVudCBpbiB0YXJnZXQubGFiZWxzKSB7CiAgICAgIHJlc3VsdCA/Pz0gPExhYmVsRGVmaW5pdGlvbj5bXTsKICAgICAgcmVzdWx0LmFkZChlbGVtZW50KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQgPz8gY29uc3QgPExhYmVsRGVmaW5pdGlvbj5bXTsKICB9Cn0KCi8vLyBTcGVjaWFsIFtKdW1wSGFuZGxlcl0gaW1wbGVtZW50YXRpb24gdXNlZCB0byBoYW5kbGUgY29udGludWUgc3RhdGVtZW50cwovLy8gdGFyZ2V0aW5nIHN3aXRjaCBjYXNlcy4KYWJzdHJhY3QgY2xhc3MgU3dpdGNoQ2FzZUp1bXBIYW5kbGVyIGV4dGVuZHMgVGFyZ2V0SnVtcEhhbmRsZXIgewogIC8vLyBNYXAgZnJvbSBzd2l0Y2ggY2FzZSB0YXJnZXRzIHRvIGluZGljZXMgdXNlZCB0byBlbmNvZGUgdGhlIGZsb3cgb2YgdGhlCiAgLy8vIHN3aXRjaCBjYXNlIGxvb3AuCiAgZmluYWwgTWFwPEp1bXBUYXJnZXQsIGludD4gdGFyZ2V0SW5kZXhNYXAgPSBuZXcgTWFwPEp1bXBUYXJnZXQsIGludD4oKTsKCiAgU3dpdGNoQ2FzZUp1bXBIYW5kbGVyKEtlcm5lbFNzYUdyYXBoQnVpbGRlciBidWlsZGVyLCBKdW1wVGFyZ2V0IHRhcmdldCkKICAgICAgOiBzdXBlcihidWlsZGVyLCB0YXJnZXQpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGdlbmVyYXRlQnJlYWsoU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIFtMYWJlbERlZmluaXRpb24gbGFiZWxdKSB7CiAgICBpZiAobGFiZWwgPT0gbnVsbCkgewogICAgICAvLyBDcmVhdGVzIGEgc3BlY2lhbCBicmVhayBpbnN0cnVjdGlvbiBmb3IgdGhlIHN5bnRoZXRpYyBsb29wIGdlbmVyYXRlZAogICAgICAvLyBmb3IgYSBzd2l0Y2ggc3RhdGVtZW50IHdpdGggY29udGludWUgc3RhdGVtZW50cy4gU2VlCiAgICAgIC8vIFtTc2FGcm9tQXN0TWl4aW4uYnVpbGRDb21wbGV4U3dpdGNoU3RhdGVtZW50XSBmb3IgZGV0YWlsLgoKICAgICAgSEluc3RydWN0aW9uIGJyZWFrSW5zdHJ1Y3Rpb24gPSBuZXcgSEJyZWFrKAogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4sIHRhcmdldCwgc291cmNlSW5mb3JtYXRpb24sCiAgICAgICAgICBicmVha1N3aXRjaENvbnRpbnVlTG9vcDogdHJ1ZSk7CiAgICAgIExvY2Fsc0hhbmRsZXIgbG9jYWxzID0gbmV3IExvY2Fsc0hhbmRsZXIuZnJvbShidWlsZGVyLmxvY2Fsc0hhbmRsZXIpOwogICAgICBidWlsZGVyLmNsb3NlKGJyZWFrSW5zdHJ1Y3Rpb24pOwogICAgICBqdW1wcy5hZGQobmV3IF9KdW1wSGFuZGxlckVudHJ5KGJyZWFrSW5zdHJ1Y3Rpb24sIGxvY2FscykpOwogICAgfSBlbHNlIHsKICAgICAgc3VwZXIuZ2VuZXJhdGVCcmVhayhzb3VyY2VJbmZvcm1hdGlvbiwgbGFiZWwpOwogICAgfQogIH0KCiAgYm9vbCBpc0NvbnRpbnVlVG9Td2l0Y2hDYXNlKExhYmVsRGVmaW5pdGlvbiBsYWJlbCkgewogICAgcmV0dXJuIGxhYmVsICE9IG51bGwgJiYgdGFyZ2V0SW5kZXhNYXAuY29udGFpbnNLZXkobGFiZWwudGFyZ2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZ2VuZXJhdGVDb250aW51ZShTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgW0xhYmVsRGVmaW5pdGlvbiBsYWJlbF0pIHsKICAgIGlmIChpc0NvbnRpbnVlVG9Td2l0Y2hDYXNlKGxhYmVsKSkgewogICAgICAvLyBDcmVhdGVzIHRoZSBzcGVjaWFsIGluc3RydWN0aW9ucyAnbGFiZWwgPSBpOyBjb250aW51ZSBsOycgdXNlZCBpbgogICAgICAvLyBzd2l0Y2ggc3RhdGVtZW50cyB3aXRoIGNvbnRpbnVlIHN0YXRlbWVudHMuIFNlZQogICAgICAvLyBbU3NhRnJvbUFzdE1peGluLmJ1aWxkQ29tcGxleFN3aXRjaFN0YXRlbWVudF0gZm9yIGRldGFpbC4KCiAgICAgIGFzc2VydChsYWJlbCAhPSBudWxsKTsKICAgICAgSEluc3RydWN0aW9uIHZhbHVlID0gYnVpbGRlci5ncmFwaAogICAgICAgICAgLmFkZENvbnN0YW50SW50KHRhcmdldEluZGV4TWFwW2xhYmVsLnRhcmdldF0sIGJ1aWxkZXIuY2xvc2VkV29ybGQpOwogICAgICBidWlsZGVyLmxvY2Fsc0hhbmRsZXIudXBkYXRlTG9jYWwodGFyZ2V0LCB2YWx1ZSk7CgogICAgICBhc3NlcnQobGFiZWwudGFyZ2V0LmxhYmVscy5jb250YWlucyhsYWJlbCkpOwogICAgICBISW5zdHJ1Y3Rpb24gY29udGludWVJbnN0cnVjdGlvbiA9CiAgICAgICAgICBuZXcgSENvbnRpbnVlKF9hYnN0cmFjdFZhbHVlRG9tYWluLCB0YXJnZXQsIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgTG9jYWxzSGFuZGxlciBsb2NhbHMgPSBuZXcgTG9jYWxzSGFuZGxlci5mcm9tKGJ1aWxkZXIubG9jYWxzSGFuZGxlcik7CiAgICAgIGJ1aWxkZXIuY2xvc2UoY29udGludWVJbnN0cnVjdGlvbik7CiAgICAgIGp1bXBzLmFkZChuZXcgX0p1bXBIYW5kbGVyRW50cnkoY29udGludWVJbnN0cnVjdGlvbiwgbG9jYWxzKSk7CiAgICB9IGVsc2UgewogICAgICBzdXBlci5nZW5lcmF0ZUNvbnRpbnVlKHNvdXJjZUluZm9ybWF0aW9uLCBsYWJlbCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsb3NlKCkgewogICAgLy8gVGhlIG1hcHBpbmcgZnJvbSBUYXJnZXRFbGVtZW50IHRvIEp1bXBIYW5kbGVyIGlzIG5vIGxvbmdlciBuZWVkZWQuCiAgICBmb3IgKEp1bXBUYXJnZXQgdGFyZ2V0IGluIHRhcmdldEluZGV4TWFwLmtleXMpIHsKICAgICAgYnVpbGRlci5qdW1wVGFyZ2V0cy5yZW1vdmUodGFyZ2V0KTsKICAgIH0KICAgIHN1cGVyLmNsb3NlKCk7CiAgfQp9CoD5AE5OPAEZITEoAR4eFQEpGh8eLzU4AgEdSjMEOiA9IEwYQRkWEBskAgFLTQ0vJQEiAQw6ITZABAEMPSE2QwQBDCkMLAwSDCIMHwEMQQwhAgFIBEtIMScMGycBQCAoMSgEATIvAQw6ISMZGUcNGU4GSiVABAEMPSEmGRxKDRxRQCIqBkooQwQBDCctSAYEAQwqLUsGBAEMGi0rBhIEAQwXLSgGEgQBDBFKKAQBDCUpNSYbBjAEAgFMHEFNGEoBSiABDDohGU4+QwEyOypMJ0INNQYEATdGBAEMPSEpSzlDAR0pTjgBMylKTCpFDTgGBAEMEUo1KgYTBAIBKnBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9qdW1wX2hhbmRsZXIuZGFydDxzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zc2Eva2VybmVsX3N0cmluZ19idWlsZGVyLmRhcnSJ4S8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICdidWlsZGVyX2tlcm5lbC5kYXJ0JzsKaW1wb3J0ICdub2Rlcy5kYXJ0JzsKCi8vLyBWaXNpdHMgYW5kIGNvbmNhdGVuYXRlcyB0aGUgZXhwcmVzc2lvbnMgaW4gYSBzdHJpbmcgY29uY2F0ZW5hdGlvbi4KY2xhc3MgS2VybmVsU3RyaW5nQnVpbGRlciBleHRlbmRzIGlyLlZpc2l0b3IgewogIGZpbmFsIEtlcm5lbFNzYUdyYXBoQnVpbGRlciBidWlsZGVyOwoKICAvLy8gVGhlIHN0cmluZyB2YWx1ZSBnZW5lcmF0ZWQgc28gZmFyLgogIEhJbnN0cnVjdGlvbiByZXN1bHQgPSBudWxsOwoKICBLZXJuZWxTdHJpbmdCdWlsZGVyKHRoaXMuYnVpbGRlcik7CgogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IF9hYnN0cmFjdFZhbHVlRG9tYWluID0+CiAgICAgIGJ1aWxkZXIuY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWZhdWx0Tm9kZShpci5Ob2RlIG5vZGUpIHsKICAgIGZhaWxlZEF0KENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsICdVbmV4cGVjdGVkIG5vZGU6ICRub2RlJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGRlZmF1bHRFeHByZXNzaW9uKGlyLkV4cHJlc3Npb24gbm9kZSkgewogICAgbm9kZS5hY2NlcHQoYnVpbGRlcik7CiAgICBISW5zdHJ1Y3Rpb24gZXhwcmVzc2lvbiA9IGJ1aWxkZXIucG9wKCk7CgogICAgLy8gV2Ugd2FudCB0byB1c2UgSFN0cmluZ2lmeSB3aGVuOgogICAgLy8gICAxLiBUaGUgdmFsdWUgaXMga25vd24gdG8gYmUgYSBwcmltaXRpdmUgdHlwZSwgYmVjYXVzZSBpdCBtaWdodCBnZXQKICAgIC8vICAgICAgY29uc3RhbnQtZm9sZGVkIGFuZCBjb2RlZ2VuIGhhcyBzb21lIHRyaWNrcyB3aXRoIEphdmFTY3JpcHQKICAgIC8vICAgICAgY29udmVyc2lvbnMuCiAgICAvLyAgIDIuIFRoZSB2YWx1ZSBjYW4gYmUgcHJpbWl0aXZlLCBiZWNhdXNlIHRoZSBsaWJyYXJ5IHN0cmluZ2lmaWVyIGhhcwogICAgLy8gICAgICBmYXN0LXBhdGggY29kZSBmb3IgbW9zdCBwcmltaXRpdmVzLgogICAgaWYgKGV4cHJlc3Npb24uaXNQcmltaXRpdmUoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgIGFwcGVuZChzdHJpbmdpZnkoZXhwcmVzc2lvbikpOwogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gVE9ETyhlZm9ydHVuYSk6IElmIHdlIGRlY2lkZSB0byBkbyBpbmxpbmluZyBiZWZvcmUgZmluaXNoaW5nIGNvbnN0cnVjdGluZwogICAgLy8gdGhlIGNvbnRyb2wgZmxvdyBncmFwaCwgd2UnZCB3YW50IHRvIGRvIHRoZSBvcHRpbWl6YXRpb24gb2YKICAgIC8vIGNhbGxpbmcgdG9TdHJpbmcgaGVyZSBpZiB0aGUgdHlwZSBpcyBwcm92YWJseSBhIHN0cmluZyByYXRoZXIgdGhhbiBpbiB0aGUKICAgIC8vIG9wdGltaXphdGlvbiBwaGFzZSAod2hpY2ggaXMgd2hlcmUgd2UgY3VycmVudGx5IGRvIGl0KS4KCiAgICBhcHBlbmQoc3RyaW5naWZ5KGV4cHJlc3Npb24pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKGlyLlN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSkgewogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogIH0KCiAgdm9pZCBhcHBlbmQoSEluc3RydWN0aW9uIGV4cHJlc3Npb24pIHsKICAgIHJlc3VsdCA9IChyZXN1bHQgPT0gbnVsbCkgPyBleHByZXNzaW9uIDogY29uY2F0KHJlc3VsdCwgZXhwcmVzc2lvbik7CiAgfQoKICBISW5zdHJ1Y3Rpb24gY29uY2F0KEhJbnN0cnVjdGlvbiBsZWZ0LCBISW5zdHJ1Y3Rpb24gcmlnaHQpIHsKICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9CiAgICAgICAgbmV3IEhTdHJpbmdDb25jYXQobGVmdCwgcmlnaHQsIF9hYnN0cmFjdFZhbHVlRG9tYWluLnN0cmluZ1R5cGUpOwogICAgYnVpbGRlci5hZGQoaW5zdHJ1Y3Rpb24pOwogICAgcmV0dXJuIGluc3RydWN0aW9uOwogIH0KCiAgSEluc3RydWN0aW9uIHN0cmluZ2lmeShISW5zdHJ1Y3Rpb24gZXhwcmVzc2lvbikgewogICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0KICAgICAgICBuZXcgSFN0cmluZ2lmeShleHByZXNzaW9uLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5zdHJpbmdUeXBlKQogICAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IGV4cHJlc3Npb24uc291cmNlSW5mb3JtYXRpb247CiAgICBidWlsZGVyLmFkZChpbnN0cnVjdGlvbik7CiAgICByZXR1cm4gaW5zdHJ1Y3Rpb247CiAgfQp9Ck4ATk48ASgBGTEeFQFHLycBKR4BJQEyLwEMI0MEAQwvGi0BJ0xIGUwwSiUOBgFRQ1E/ASMEAQw/HgQBKUkEAT8fSR4YBAE0H0Q+HhgEAgEzcGFja2FnZTpjb21waWxlci9zcmMvc3NhL2tlcm5lbF9zdHJpbmdfYnVpbGRlci5kYXJ0NXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NzYS9sb2NhbHNfaGFuZGxlci5kYXJ0wABxxy8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYXRpdmVfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2ludGVyY2VwdG9yX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvY2xvc3VyZS5kYXJ0JyBzaG93IEpSZWNvcmRGaWVsZCwgSkNsb3N1cmVGaWVsZDsKaW1wb3J0ICcuLi9qc19tb2RlbC9sb2NhbHMuZGFydCcgc2hvdyBKTG9jYWw7CmltcG9ydCAnLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CgppbXBvcnQgJ2J1aWxkZXJfa2VybmVsLmRhcnQnOwppbXBvcnQgJ25vZGVzLmRhcnQnOwppbXBvcnQgJ3R5cGVzLmRhcnQnOwoKLy8vIEtlZXBzIHRyYWNrIG9mIGxvY2FscyAoaW5jbHVkaW5nIHBhcmFtZXRlcnMgYW5kIHBoaXMpIHdoZW4gYnVpbGRpbmcuIFRoZQovLy8gJ3RoaXMnIHJlZmVyZW5jZSBpcyB0cmVhdGVkIGFzIHBhcmFtZXRlciBhbmQgaGVuY2UgaGFuZGxlZCBieSB0aGlzIGNsYXNzLAovLy8gdG9vLgpjbGFzcyBMb2NhbHNIYW5kbGVyIHsKICAvLy8gVGhlIHZhbHVlcyBvZiBsb2NhbHMgdGhhdCBjYW4gYmUgZGlyZWN0bHkgYWNjZXNzZWQgKHdpdGhvdXQgcmVkaXJlY3Rpb25zCiAgLy8vIHRvIGJveGVzIG9yIGNsb3N1cmUtZmllbGRzKS4KICAvLy8KICAvLy8gW2RpcmVjdExvY2Fsc10gaXMgaXRlcmF0ZWQsIHNvIGl0IGlzICJpbnNlcnRpb24gb3JkZXJlZCIgdG8gbWFrZSB0aGUKICAvLy8gaXRlcmF0aW9uIG9yZGVyIGEgZnVuY3Rpb24gb25seSBvZiBpbnNlcnRpb25zIGFuZCBub3QgYSBmdW5jdGlvbiBvZgogIC8vLyBlLmcuIEVsZW1lbnQgaGFzaCBjb2Rlcy4gIEknZCBwcmVmZXIgdG8gdXNlIGEgU29ydGVkTWFwIGJ1dCBzb21lIGVsZW1lbnRzCiAgLy8vIGRvbid0IGhhdmUgc291cmNlIGxvY2F0aW9ucyBmb3IgW0VsZW1lbnRzLmNvbXBhcmVCeVBvc2l0aW9uXS4KICBNYXA8TG9jYWwsIEhJbnN0cnVjdGlvbj4gZGlyZWN0TG9jYWxzID0gbmV3IE1hcDxMb2NhbCwgSEluc3RydWN0aW9uPigpOwogIE1hcDxMb2NhbCwgRmllbGRFbnRpdHk+IHJlZGlyZWN0aW9uTWFwcGluZyA9IG5ldyBNYXA8TG9jYWwsIEZpZWxkRW50aXR5PigpOwogIGZpbmFsIEtlcm5lbFNzYUdyYXBoQnVpbGRlciBidWlsZGVyOwogIFNjb3BlSW5mbyBzY29wZUluZm87CiAgTWFwPFR5cGVWYXJpYWJsZVR5cGUsIFR5cGVWYXJpYWJsZUxvY2FsPiB0eXBlVmFyaWFibGVMb2NhbHMgPQogICAgICBuZXcgTWFwPFR5cGVWYXJpYWJsZVR5cGUsIFR5cGVWYXJpYWJsZUxvY2FsPigpOwogIGZpbmFsIEVudGl0eSBleGVjdXRhYmxlQ29udGV4dDsKICBmaW5hbCBNZW1iZXJFbnRpdHkgbWVtYmVyQ29udGV4dDsKCiAgLy8vIFRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLiBgbnVsbGAgaWYgaW4gYSBzdGF0aWMgY29udGV4dC4KICAvLy8KICAvLy8gVGhpcyBpcyB0aGUgdHlwZSBvZiBgdGhpc2AgaXMgdGhlIGN1cnJlbnQgY29udGV4dCwgYW5kIGlzIG9mdGVuIHRoZQogIC8vLyAndGhpcyB0eXBlJyBvZiB0aGUgZW5jbG9zaW5nIGNsYXNzIG9mIGEgbWVtYmVyLgogIC8vLwogIC8vLyBJZiB0aGUgY3VycmVudCBpbnN0YW5jZSBpcyBjb25jcmV0ZSwgd2UgY2FuIGhhbmRsZSBmaXhlZCB0eXBlIGFyZ3VtZW50IGluCiAgLy8vIGNhc2Ugb2YgaW5saW5pbmcuIEZvciBpbnN0YW5jZSwgY2hlY2tpbmcgYCdmb28nYCBhZ2FpbnN0IGBTdHJpbmdgIGluc3RlYWQKICAvLy8gb2YgYFRgIGluIGBtYWluYDoKICAvLy8KICAvLy8gICAgIGNsYXNzIEZvbzxUPiB7CiAgLy8vICAgICAgIFQgZmllbGQ7CiAgLy8vICAgICAgIEZvbyh0aGlzLmZpZWxkKTsKICAvLy8gICAgIH0KICAvLy8gICAgIG1haW4oKSB7CiAgLy8vICAgICAgIG5ldyBGb288U3RyaW5nPignZm9vJyk7CiAgLy8vICAgICB9CiAgLy8vCiAgZmluYWwgSW50ZXJmYWNlVHlwZSBpbnN0YW5jZVR5cGU7CgogIGZpbmFsIE5hdGl2ZURhdGEgX25hdGl2ZURhdGE7CgogIGZpbmFsIEludGVyY2VwdG9yRGF0YSBfaW50ZXJjZXB0b3JEYXRhOwoKICBMb2NhbHNIYW5kbGVyKHRoaXMuYnVpbGRlciwgdGhpcy5leGVjdXRhYmxlQ29udGV4dCwgdGhpcy5tZW1iZXJDb250ZXh0LAogICAgICB0aGlzLmluc3RhbmNlVHlwZSwgdGhpcy5fbmF0aXZlRGF0YSwgdGhpcy5faW50ZXJjZXB0b3JEYXRhKTsKCiAgSkNsb3NlZFdvcmxkIGdldCBfY2xvc2VkV29ybGQgPT4gYnVpbGRlci5jbG9zZWRXb3JsZDsKCiAgQWJzdHJhY3RWYWx1ZURvbWFpbiBnZXQgX2Fic3RyYWN0VmFsdWVEb21haW4gPT4KICAgICAgX2Nsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW47CgogIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGdldCBfZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cyA9PgogICAgICBidWlsZGVyLmdsb2JhbEluZmVyZW5jZVJlc3VsdHM7CgogIC8vLyBTdWJzdGl0dXRlZCB0eXBlIHZhcmlhYmxlcyBvY2N1cnJpbmcgaW4gW3R5cGVdIGludG8gdGhlIGNvbnRleHQgb2YKICAvLy8gW2NvbnRleHRDbGFzc10uCiAgRGFydFR5cGUgc3Vic3RJbkNvbnRleHQoRGFydFR5cGUgdHlwZSkgewogICAgRGFydFR5cGUgbmV3VHlwZSA9IHR5cGU7CiAgICBpZiAoaW5zdGFuY2VUeXBlICE9IG51bGwpIHsKICAgICAgQ2xhc3NFbnRpdHkgdHlwZUNvbnRleHQgPSBEYXJ0VHlwZXMuZ2V0Q2xhc3NDb250ZXh0KG5ld1R5cGUpOwogICAgICBpZiAodHlwZUNvbnRleHQgIT0gbnVsbCkgewogICAgICAgIG5ld1R5cGUgPSBfY2xvc2VkV29ybGQuZGFydFR5cGVzLnN1YnN0QnlDb250ZXh0KAogICAgICAgICAgICBuZXdUeXBlLAogICAgICAgICAgICBfY2xvc2VkV29ybGQuZGFydFR5cGVzLmFzSW5zdGFuY2VPZigKICAgICAgICAgICAgICAgIF9jbG9zZWRXb3JsZC5kYXJ0VHlwZXMuZ2V0VGhpc1R5cGUoaW5zdGFuY2VUeXBlLmVsZW1lbnQpLAogICAgICAgICAgICAgICAgdHlwZUNvbnRleHQpKTsKICAgICAgfQogICAgICBpZiAoIWluc3RhbmNlVHlwZS5jb250YWluc1R5cGVWYXJpYWJsZXMpIHsKICAgICAgICBuZXdUeXBlID0gX2Nsb3NlZFdvcmxkLmRhcnRUeXBlcy5zdWJzdEJ5Q29udGV4dChuZXdUeXBlLCBpbnN0YW5jZVR5cGUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3VHlwZTsKICB9CgogIC8vLyBDcmVhdGVzIGEgbmV3IFtMb2NhbHNIYW5kbGVyXSBiYXNlZCBvbiBbb3RoZXJdLiBXZSBvbmx5IG5lZWQgdG8KICAvLy8gY29weSB0aGUgW2RpcmVjdExvY2Fsc10sIHNpbmNlIHRoZSBvdGhlciBmaWVsZHMgY2FuIGJlIHNoYXJlZAogIC8vLyB0aHJvdWdob3V0IHRoZSBBU1QgdmlzaXQuCiAgTG9jYWxzSGFuZGxlci5mcm9tKExvY2Fsc0hhbmRsZXIgb3RoZXIpCiAgICAgIDogZGlyZWN0TG9jYWxzID0gbmV3IE1hcDxMb2NhbCwgSEluc3RydWN0aW9uPi5mcm9tKG90aGVyLmRpcmVjdExvY2FscyksCiAgICAgICAgcmVkaXJlY3Rpb25NYXBwaW5nID0gb3RoZXIucmVkaXJlY3Rpb25NYXBwaW5nLAogICAgICAgIGV4ZWN1dGFibGVDb250ZXh0ID0gb3RoZXIuZXhlY3V0YWJsZUNvbnRleHQsCiAgICAgICAgbWVtYmVyQ29udGV4dCA9IG90aGVyLm1lbWJlckNvbnRleHQsCiAgICAgICAgaW5zdGFuY2VUeXBlID0gb3RoZXIuaW5zdGFuY2VUeXBlLAogICAgICAgIGJ1aWxkZXIgPSBvdGhlci5idWlsZGVyLAogICAgICAgIHNjb3BlSW5mbyA9IG90aGVyLnNjb3BlSW5mbywKICAgICAgICBfbmF0aXZlRGF0YSA9IG90aGVyLl9uYXRpdmVEYXRhLAogICAgICAgIF9pbnRlcmNlcHRvckRhdGEgPSBvdGhlci5faW50ZXJjZXB0b3JEYXRhLAogICAgICAgIGFjdGl2YXRpb25WYXJpYWJsZXMgPSBvdGhlci5hY3RpdmF0aW9uVmFyaWFibGVzLAogICAgICAgIGNhY2hlZFR5cGVPZlRoaXMgPSBvdGhlci5jYWNoZWRUeXBlT2ZUaGlzLAogICAgICAgIGNhY2hlZFR5cGVzT2ZDYXB0dXJlZFZhcmlhYmxlcyA9IG90aGVyLmNhY2hlZFR5cGVzT2ZDYXB0dXJlZFZhcmlhYmxlczsKCiAgLy8vIFJlZGlyZWN0cyBhY2Nlc3NlcyBmcm9tIGVsZW1lbnQgW2Zyb21dIHRvIGVsZW1lbnQgW3RvXS4gVGhlIFt0b10gZWxlbWVudAogIC8vLyBtdXN0IGJlIGEgYm94ZWQgdmFyaWFibGUgb3IgYSB2YXJpYWJsZSB0aGF0IGlzIHN0b3JlZCBpbiBhIGNsb3N1cmUtZmllbGQuCiAgdm9pZCByZWRpcmVjdEVsZW1lbnQoTG9jYWwgZnJvbSwgRmllbGRFbnRpdHkgdG8pIHsKICAgIGFzc2VydChyZWRpcmVjdGlvbk1hcHBpbmdbZnJvbV0gPT0gbnVsbCk7CiAgICByZWRpcmVjdGlvbk1hcHBpbmdbZnJvbV0gPSB0bzsKICAgIGFzc2VydChpc1N0b3JlZEluQ2xvc3VyZUZpZWxkKGZyb20pIHx8IGlzQm94ZWQoZnJvbSkpOwogIH0KCiAgSEluc3RydWN0aW9uIGNyZWF0ZUJveChTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgSEluc3RydWN0aW9uIGJveCA9IG5ldyBIQ3JlYXRlQm94KF9hYnN0cmFjdFZhbHVlRG9tYWluLm5vbk51bGxUeXBlKQogICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgICBidWlsZGVyLmFkZChib3gpOwogICAgcmV0dXJuIGJveDsKICB9CgogIC8vLyBJZiB0aGUgc2NvcGUgKGZ1bmN0aW9uIG9yIGxvb3ApIFtub2RlXSBoYXMgY2FwdHVyZWQgdmFyaWFibGVzIHRoZW4gdGhpcwogIC8vLyBtZXRob2QgY3JlYXRlcyBhIGJveCBhbmQgc2V0cyB1cCB0aGUgcmVkaXJlY3Rpb25zLgogIHZvaWQgZW50ZXJTY29wZSgKICAgICAgQ2FwdHVyZWRTY29wZSBjbG9zdXJlSW5mbywgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIHtib29sIGZvckdlbmVyYXRpdmVDb25zdHJ1Y3RvckJvZHk6IGZhbHNlLCBISW5zdHJ1Y3Rpb24gaW5saW5lZEJveH0pIHsKICAgIC8vIFNlZSBpZiBhbnkgdmFyaWFibGUgaW4gdGhlIHRvcC1zY29wZSBvZiB0aGUgZnVuY3Rpb24gaXMgY2FwdHVyZWQuIElmIHllcwogICAgLy8gd2UgbmVlZCB0byBjcmVhdGUgYSBib3gtb2JqZWN0LgogICAgaWYgKCFjbG9zdXJlSW5mby5yZXF1aXJlc0NvbnRleHRCb3gpIHJldHVybjsKICAgIEhJbnN0cnVjdGlvbiBib3g7CiAgICAvLyBUaGUgc2NvcGUgaGFzIGNhcHR1cmVkIHZhcmlhYmxlcy4KICAgIGlmIChmb3JHZW5lcmF0aXZlQ29uc3RydWN0b3JCb2R5KSB7CiAgICAgIC8vIFRoZSBib3ggaXMgcGFzc2VkIGFzIGEgcGFyYW1ldGVyIHRvIGEgZ2VuZXJhdGl2ZSBjb25zdHJ1Y3RvciBib2R5LgogICAgICBib3ggPSBpbmxpbmVkQm94ID8/CiAgICAgICAgICBidWlsZGVyLmFkZFBhcmFtZXRlcigKICAgICAgICAgICAgICBjbG9zdXJlSW5mby5jb250ZXh0LCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ub25OdWxsVHlwZSk7CiAgICB9IGVsc2UgewogICAgICBib3ggPSBjcmVhdGVCb3goc291cmNlSW5mb3JtYXRpb24pOwogICAgfQogICAgLy8gQWRkIHRoZSBib3ggdG8gdGhlIGtub3duIGxvY2Fscy4KICAgIGRpcmVjdExvY2Fsc1tjbG9zdXJlSW5mby5jb250ZXh0XSA9IGJveDsKICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFjY2Vzc2VzIHRvIHRoZSBib3hlZCBsb2NhbHMgZ28gaW50byB0aGUgYm94LiBXZSBhbHNvCiAgICAvLyBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHBhcmFtZXRlcnMgYXJlIGNvcGllZCBpbnRvIHRoZSBib3ggaWYgbmVjZXNzYXJ5LgogICAgY2xvc3VyZUluZm8uZm9yRWFjaEJveGVkVmFyaWFibGUoKExvY2FsIGZyb20sIEZpZWxkRW50aXR5IHRvKSB7CiAgICAgIC8vIFRoZSBbZnJvbV0gY2FuIG9ubHkgYmUgYSBwYXJhbWV0ZXIgZm9yIGZ1bmN0aW9uLXNjb3BlcyBhbmQgbm90CiAgICAgIC8vIGxvb3Agc2NvcGVzLgogICAgICBKTG9jYWwgakZyb20gPSBmcm9tOwogICAgICBib29sIGlzUGFyYW1ldGVyID0gakZyb20uaXNSZWd1bGFyUGFyYW1ldGVyOwogICAgICBhc3NlcnQoaXNQYXJhbWV0ZXIgIT0gbnVsbCk7CiAgICAgIGlmIChpc1BhcmFtZXRlciAmJiAhZm9yR2VuZXJhdGl2ZUNvbnN0cnVjdG9yQm9keSkgewogICAgICAgIC8vIE5vdyB0aGF0IHRoZSByZWRpcmVjdGlvbiBpcyBzZXQgdXAsIHRoZSB1cGRhdGUgdG8gdGhlIGxvY2FsIHdpbGwKICAgICAgICAvLyB3cml0ZSB0aGUgcGFyYW1ldGVyIHZhbHVlIGludG8gdGhlIGJveC4KICAgICAgICAvLyBTdG9yZSB0aGUgY2FwdHVyZWQgcGFyYW1ldGVyIGluIHRoZSBib3guIEdldCB0aGUgY3VycmVudCB2YWx1ZQogICAgICAgIC8vIGJlZm9yZSB3ZSBwdXQgdGhlIHJlZGlyZWN0aW9uIGluIHBsYWNlLgogICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSBsb2NhbCBmb3IgYSBnZW5lcmF0aXZlCiAgICAgICAgLy8gY29uc3RydWN0b3IgYm9keSwgYmVjYXVzZSBpdCByZWNlaXZlcyBhIGJveCB0aGF0IGFscmVhZHkKICAgICAgICAvLyBjb250YWlucyB0aGUgdXBkYXRlcyBhcyB0aGUgbGFzdCBwYXJhbWV0ZXIuCiAgICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gcmVhZExvY2FsKGZyb20pOwogICAgICAgIHJlZGlyZWN0RWxlbWVudChmcm9tLCB0byk7CiAgICAgICAgdXBkYXRlTG9jYWwoZnJvbSwgaW5zdHJ1Y3Rpb24pOwogICAgICB9IGVsc2UgewogICAgICAgIHJlZGlyZWN0RWxlbWVudChmcm9tLCB0byk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgLy8vIFJlcGxhY2VzIHRoZSBjdXJyZW50IGJveCB3aXRoIGEgbmV3IGJveCBhbmQgY29waWVzIG92ZXIgdGhlIGdpdmVuIGxpc3QKICAvLy8gb2YgZWxlbWVudHMgZnJvbSB0aGUgb2xkIGJveCBpbnRvIHRoZSBuZXcgYm94LgogIHZvaWQgdXBkYXRlQ2FwdHVyZUJveChMb2NhbCBjdXJyZW50Qm94LCBMaXN0PExvY2FsPiB0b0JlQ29waWVkRWxlbWVudHMsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICAvLyBDcmVhdGUgYSBuZXcgYm94IGFuZCBjb3B5IG92ZXIgdGhlIHZhbHVlcyBmcm9tIHRoZSBvbGQgYm94IGludG8gdGhlCiAgICAvLyBuZXcgb25lLgogICAgSEluc3RydWN0aW9uIG9sZEJveCA9IHJlYWRMb2NhbChjdXJyZW50Qm94KTsKICAgIEhJbnN0cnVjdGlvbiBuZXdCb3ggPSBjcmVhdGVCb3goc291cmNlSW5mb3JtYXRpb24pOwogICAgZm9yIChMb2NhbCBib3hlZFZhcmlhYmxlIGluIHRvQmVDb3BpZWRFbGVtZW50cykgewogICAgICAvLyBbcmVhZExvY2FsXSB1c2VzIHRoZSBbY3VycmVudEJveF0gdG8gZmluZCBpdHMgYm94LiBCeSByZXBsYWNpbmcgaXQKICAgICAgLy8gYmVoaW5kIGl0cyBiYWNrIHdlIGNhbiBzdGlsbCBnZXQgdG8gdGhlIG9sZCB2YWx1ZXMuCiAgICAgIHVwZGF0ZUxvY2FsKGN1cnJlbnRCb3gsIG9sZEJveCk7CiAgICAgIEhJbnN0cnVjdGlvbiBvbGRWYWx1ZSA9IHJlYWRMb2NhbChib3hlZFZhcmlhYmxlKTsKICAgICAgdXBkYXRlTG9jYWwoY3VycmVudEJveCwgbmV3Qm94KTsKICAgICAgdXBkYXRlTG9jYWwoYm94ZWRWYXJpYWJsZSwgb2xkVmFsdWUpOwogICAgfQogICAgdXBkYXRlTG9jYWwoY3VycmVudEJveCwgbmV3Qm94KTsKICB9CgogIC8vLyBEb2N1bWVudGF0aW9uIHdhbnRlZCAtLSBqb2hubml3aW50aGVyCiAgLy8vCiAgLy8vIEludmFyaWFudDogW2Z1bmN0aW9uXSBtdXN0IGJlIGFuIGltcGxlbWVudGF0aW9uIGVsZW1lbnQuCiAgdm9pZCBzdGFydEZ1bmN0aW9uKAogICAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCwKICAgICAgU2NvcGVJbmZvIHNjb3BlSW5mbywKICAgICAgQ2FwdHVyZWRTY29wZSBzY29wZURhdGEsCiAgICAgIE1hcDxMb2NhbCwgQWJzdHJhY3RWYWx1ZT4gcGFyYW1ldGVycywKICAgICAgU2V0PExvY2FsPiBlbGlkZWRQYXJhbWV0ZXJzLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAge2Jvb2wgaXNHZW5lcmF0aXZlQ29uc3RydWN0b3JCb2R5fSkgewogICAgdGhpcy5zY29wZUluZm8gPSBzY29wZUluZm87CgogICAgcGFyYW1ldGVycy5mb3JFYWNoKChMb2NhbCBsb2NhbCwgQWJzdHJhY3RWYWx1ZSB0eXBlTWFzaykgewogICAgICBpZiAoaXNHZW5lcmF0aXZlQ29uc3RydWN0b3JCb2R5KSB7CiAgICAgICAgaWYgKHNjb3BlRGF0YS5pc0JveGVkVmFyaWFibGUobG9jYWwpKSB7CiAgICAgICAgICAvLyBUaGUgcGFyYW1ldGVyIHdpbGwgYmUgYSBmaWVsZCBpbiB0aGUgYm94IHBhc3NlZCBhcyB0aGUKICAgICAgICAgIC8vIGxhc3QgcGFyYW1ldGVyLiBTbyBubyBuZWVkIHRvIGhhdmUgaXQuCiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9CiAgICAgIEhJbnN0cnVjdGlvbiBwYXJhbWV0ZXIgPSBidWlsZGVyLmFkZFBhcmFtZXRlcihsb2NhbCwgdHlwZU1hc2ssCiAgICAgICAgICBpc0VsaWRlZDogZWxpZGVkUGFyYW1ldGVycy5jb250YWlucyhsb2NhbCkpOwogICAgICBidWlsZGVyLnBhcmFtZXRlcnNbbG9jYWxdID0gcGFyYW1ldGVyOwogICAgICBkaXJlY3RMb2NhbHNbbG9jYWxdID0gcGFyYW1ldGVyOwogICAgfSk7CiAgICBidWlsZGVyLmVsaWRlZFBhcmFtZXRlcnMgPSBlbGlkZWRQYXJhbWV0ZXJzOwoKICAgIGVudGVyU2NvcGUoc2NvcGVEYXRhLCBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICBmb3JHZW5lcmF0aXZlQ29uc3RydWN0b3JCb2R5OiBpc0dlbmVyYXRpdmVDb25zdHJ1Y3RvckJvZHkpOwoKICAgIC8vIFdoZW4gd2UgcmVtb3ZlIHRoZSBlbGVtZW50IG1vZGVsLCB3ZSBjYW4ganVzdCB1c2UgdGhlIGZpcnN0IGNoZWNrCiAgICAvLyAoYmVjYXVzZSB0aGUgdW5kZXJseWluZyBlbGVtZW50cyB3b24ndCBhbGwgYmUgKmJvdGgqIFNjb3BlSW5mb3MgYW5kCiAgICAvLyBDbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvcykuCiAgICBpZiAoc2NvcGVJbmZvIGlzIENsb3N1cmVSZXByZXNlbnRhdGlvbkluZm8gJiYgc2NvcGVJbmZvLmlzQ2xvc3VyZSkgewogICAgICBDbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvIGNsb3N1cmVEYXRhID0gc2NvcGVJbmZvOwogICAgICAvLyBJZiB0aGUgZnJlZVZhcmlhYmxlTWFwcGluZyBpcyBub3QgZW1wdHksIHRoZW4gdGhpcyBmdW5jdGlvbiB3YXMgYQogICAgICAvLyBuZXN0ZWQgY2xvc3VyZSB0aGF0IGNhcHR1cmVzIHZhcmlhYmxlcy4gUmVkaXJlY3QgdGhlIGNhcHR1cmVkCiAgICAgIC8vIHZhcmlhYmxlcyB0byBmaWVsZHMgaW4gdGhlIGNsb3N1cmUuCiAgICAgIGNsb3N1cmVEYXRhLmZvckVhY2hGcmVlVmFyaWFibGUoKExvY2FsIGZyb20sIEZpZWxkRW50aXR5IHRvKSB7CiAgICAgICAgcmVkaXJlY3RFbGVtZW50KGZyb20sIHRvKTsKICAgICAgfSk7CiAgICAgIC8vIEluc2lkZSBjbG9zdXJlIHJlZGlyZWN0IHJlZmVyZW5jZXMgdG8gaXRzZWxmIHRvIFs6dGhpczpdLgogICAgICBIVGhpcyB0aGlzSW5zdHJ1Y3Rpb24gPQogICAgICAgICAgbmV3IEhUaGlzKGNsb3N1cmVEYXRhLnRoaXNMb2NhbCwgX2Fic3RyYWN0VmFsdWVEb21haW4ubm9uTnVsbFR5cGUpOwogICAgICBidWlsZGVyLmdyYXBoLnRoaXNJbnN0cnVjdGlvbiA9IHRoaXNJbnN0cnVjdGlvbjsKICAgICAgYnVpbGRlci5ncmFwaC5lbnRyeS5hZGRBdEVudHJ5KHRoaXNJbnN0cnVjdGlvbik7CiAgICAgIHVwZGF0ZUxvY2FsKGNsb3N1cmVEYXRhLmNsb3N1cmVFbnRpdHksIHRoaXNJbnN0cnVjdGlvbik7CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlcikgewogICAgICAvLyBPbmNlIGNsb3N1cmVzIGhhdmUgYmVlbiBtYXBwZWQgdG8gY2xhc3NlcyB0aGVpciBpbnN0YW5jZSBtZW1iZXJzIG1pZ2h0CiAgICAgIC8vIG5vdCBoYXZlIGFueSB0aGlzRWxlbWVudCBpZiB0aGUgY2xvc3VyZSB3YXMgY3JlYXRlZCBpbnNpZGUgYSBzdGF0aWMKICAgICAgLy8gY29udGV4dC4KICAgICAgSFRoaXMgdGhpc0luc3RydWN0aW9uID0gbmV3IEhUaGlzKHNjb3BlSW5mby50aGlzTG9jYWwsIGdldFR5cGVPZlRoaXMoKSk7CiAgICAgIGJ1aWxkZXIuZ3JhcGgudGhpc0luc3RydWN0aW9uID0gdGhpc0luc3RydWN0aW9uOwogICAgICBidWlsZGVyLmdyYXBoLmVudHJ5LmFkZEF0RW50cnkodGhpc0luc3RydWN0aW9uKTsKICAgICAgZGlyZWN0TG9jYWxzW3Njb3BlSW5mby50aGlzTG9jYWxdID0gdGhpc0luc3RydWN0aW9uOwogICAgfQoKICAgIC8vIElmIHRoaXMgbWV0aG9kIGlzIGFuIGludGVyY2VwdGVkIG1ldGhvZCwgYWRkIHRoZSBleHRyYQogICAgLy8gcGFyYW1ldGVyIHRvIGl0LCB0aGF0IGlzIHRoZSBhY3R1YWwgcmVjZWl2ZXIgZm9yIGludGVyY2VwdGVkCiAgICAvLyBjbGFzc2VzLCBvciB0aGUgc2FtZSBhcyBbOnRoaXM6XSBmb3Igbm9uLWludGVyY2VwdGVkIGNsYXNzZXMuCiAgICBDbGFzc0VudGl0eSBjbHMgPSBlbGVtZW50LmVuY2xvc2luZ0NsYXNzOwoKICAgIC8vIFdoZW4gdGhlIGNsYXNzIGV4dGVuZHMgYSBuYXRpdmUgY2xhc3MsIHRoZSBpbnN0YW5jZSBpcyBwcmUtY29uc3RydWN0ZWQKICAgIC8vIGFuZCBwYXNzZWQgdG8gdGhlIGdlbmVyYXRpdmUgY29uc3RydWN0b3IgZmFjdG9yeSBmdW5jdGlvbiBhcyBhIHBhcmFtZXRlci4KICAgIC8vIEluc3RlYWQgb2YgYWxsb2NhdGluZyBhbmQgaW5pdGlhbGl6aW5nIHRoZSBvYmplY3QsIHRoZSBjb25zdHJ1Y3RvcgogICAgLy8gJ3VwZ3JhZGVzJyB0aGUgbmF0aXZlIHN1YmNsYXNzIG9iamVjdCBieSBpbml0aWFsaXppbmcgdGhlIERhcnQgZmllbGRzLgogICAgYm9vbCBpc05hdGl2ZVVwZ3JhZGVGYWN0b3J5ID0gZWxlbWVudCBpcyBDb25zdHJ1Y3RvckVudGl0eSAmJgogICAgICAgIGVsZW1lbnQuaXNHZW5lcmF0aXZlQ29uc3RydWN0b3IgJiYKICAgICAgICBfbmF0aXZlRGF0YS5pc05hdGl2ZU9yRXh0ZW5kc05hdGl2ZShjbHMpOwogICAgaWYgKF9pbnRlcmNlcHRvckRhdGEuaXNJbnRlcmNlcHRlZE1ldGhvZChlbGVtZW50KSkgewogICAgICBib29sIGlzSW50ZXJjZXB0ZWRDbGFzcyA9IF9pbnRlcmNlcHRvckRhdGEuaXNJbnRlcmNlcHRlZENsYXNzKGNscyk7CiAgICAgIFN0cmluZyBuYW1lID0gaXNJbnRlcmNlcHRlZENsYXNzID8gJ3JlY2VpdmVyJyA6ICdfJzsKICAgICAgU3ludGhldGljTG9jYWwgcGFyYW1ldGVyID0gY3JlYXRlTG9jYWwobmFtZSk7CiAgICAgIEhQYXJhbWV0ZXJWYWx1ZSB2YWx1ZSA9IG5ldyBIUGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyLCBnZXRUeXBlT2ZUaGlzKCkpOwogICAgICBidWlsZGVyLmdyYXBoLmV4cGxpY2l0UmVjZWl2ZXJQYXJhbWV0ZXIgPSB2YWx1ZTsKICAgICAgYnVpbGRlci5ncmFwaC5lbnRyeS5hZGRBZnRlcihkaXJlY3RMb2NhbHNbc2NvcGVJbmZvLnRoaXNMb2NhbF0sIHZhbHVlKTsKICAgICAgaWYgKGJ1aWxkZXIubGFzdEFkZGVkUGFyYW1ldGVyID09IG51bGwpIHsKICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaW5zZXJ0ZWQsIG1ha2Ugc3VyZSBpdCBzdGF5cyBmaXJzdC4KICAgICAgICBidWlsZGVyLmxhc3RBZGRlZFBhcmFtZXRlciA9IHZhbHVlOwogICAgICB9CiAgICAgIGlmIChpc0ludGVyY2VwdGVkQ2xhc3MpIHsKICAgICAgICAvLyBPbmx5IHVzZSB0aGUgZXh0cmEgcGFyYW1ldGVyIGluIGludGVyY2VwdGVkIGNsYXNzZXMuCiAgICAgICAgZGlyZWN0TG9jYWxzW3Njb3BlSW5mby50aGlzTG9jYWxdID0gdmFsdWU7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoaXNOYXRpdmVVcGdyYWRlRmFjdG9yeSkgewogICAgICBTeW50aGV0aWNMb2NhbCBwYXJhbWV0ZXIgPSBjcmVhdGVMb2NhbCgncmVjZWl2ZXInKTsKICAgICAgLy8gVW5saWtlIGB0aGlzYCwgcmVjZWl2ZXIgaXMgbnVsbGFibGUgc2luY2UgZGlyZWN0IGNhbGxzIHRvIGdlbmVyYXRpdmUKICAgICAgLy8gY29uc3RydWN0b3IgY2FsbCB0aGUgY29uc3RydWN0b3Igd2l0aCBgbnVsbGAuCiAgICAgIEhQYXJhbWV0ZXJWYWx1ZSB2YWx1ZSA9IG5ldyBIUGFyYW1ldGVyVmFsdWUoCiAgICAgICAgICBwYXJhbWV0ZXIsIF9jbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZU51bGxhYmxlRXhhY3QoY2xzKSk7CiAgICAgIGJ1aWxkZXIuZ3JhcGguZXhwbGljaXRSZWNlaXZlclBhcmFtZXRlciA9IHZhbHVlOwogICAgICBidWlsZGVyLmdyYXBoLmVudHJ5LmFkZEF0RW50cnkodmFsdWUpOwogICAgICBpZiAoYnVpbGRlci5sYXN0QWRkZWRQYXJhbWV0ZXIgPT0gbnVsbCkgewogICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGZpcnN0IHBhcmFtZXRlciBpbnNlcnRlZCwgbWFrZSBzdXJlIGl0IHN0YXlzIGZpcnN0LgogICAgICAgIGJ1aWxkZXIubGFzdEFkZGVkUGFyYW1ldGVyID0gdmFsdWU7CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGxvY2FsIGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseS4gQm94ZWQgdmFyaWFibGVzIG9yCiAgLy8vIGNhcHR1cmVkIHZhcmlhYmxlcyB0aGF0IGFyZSBzdG9yZWQgaW4gdGhlIGNsb3N1cmUtZmllbGQgcmV0dXJuIFs6ZmFsc2U6XS4KICBib29sIGlzQWNjZXNzZWREaXJlY3RseShMb2NhbCBsb2NhbCkgewogICAgYXNzZXJ0KGxvY2FsICE9IG51bGwpOwogICAgcmV0dXJuICFyZWRpcmVjdGlvbk1hcHBpbmcuY29udGFpbnNLZXkobG9jYWwpICYmCiAgICAgICAgIXNjb3BlSW5mby5sb2NhbElzVXNlZEluVHJ5T3JTeW5jKGxvY2FsKTsKICB9CgogIGJvb2wgaXNTdG9yZWRJbkNsb3N1cmVGaWVsZChMb2NhbCBsb2NhbCkgewogICAgYXNzZXJ0KGxvY2FsICE9IG51bGwpOwogICAgaWYgKGlzQWNjZXNzZWREaXJlY3RseShsb2NhbCkpIHJldHVybiBmYWxzZTsKICAgIGlmIChzY29wZUluZm8gaXMhIENsb3N1cmVSZXByZXNlbnRhdGlvbkluZm8pIHJldHVybiBmYWxzZTsKICAgIEZpZWxkRW50aXR5IHJlZGlyZWN0VGFyZ2V0ID0gcmVkaXJlY3Rpb25NYXBwaW5nW2xvY2FsXTsKICAgIGlmIChyZWRpcmVjdFRhcmdldCA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gcmVkaXJlY3RUYXJnZXQgaXMgSkNsb3N1cmVGaWVsZDsKICB9CgogIGJvb2wgaXNCb3hlZChMb2NhbCBsb2NhbCkgewogICAgaWYgKGlzQWNjZXNzZWREaXJlY3RseShsb2NhbCkpIHJldHVybiBmYWxzZTsKICAgIGlmIChpc1N0b3JlZEluQ2xvc3VyZUZpZWxkKGxvY2FsKSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHJlZGlyZWN0aW9uTWFwcGluZy5jb250YWluc0tleShsb2NhbCk7CiAgfQoKICBib29sIF9pc1VzZWRJblRyeU9yR2VuZXJhdG9yKExvY2FsIGxvY2FsKSB7CiAgICByZXR1cm4gc2NvcGVJbmZvLmxvY2FsSXNVc2VkSW5UcnlPclN5bmMobG9jYWwpOwogIH0KCiAgLy8vIFJldHVybnMgYW4gW0hJbnN0cnVjdGlvbl0gZm9yIHRoZSBnaXZlbiBlbGVtZW50LiBJZiB0aGUgZWxlbWVudCBpcwogIC8vLyBib3hlZCBvciBzdG9yZWQgaW4gYSBjbG9zdXJlIHRoZW4gdGhlIG1ldGhvZCBnZW5lcmF0ZXMgY29kZSB0byByZXRyaWV2ZQogIC8vLyB0aGUgdmFsdWUuCiAgSEluc3RydWN0aW9uIHJlYWRMb2NhbChMb2NhbCBsb2NhbCwge1NvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9ufSkgewogICAgaWYgKGlzQWNjZXNzZWREaXJlY3RseShsb2NhbCkpIHsKICAgICAgaWYgKGRpcmVjdExvY2Fsc1tsb2NhbF0gPT0gbnVsbCkgewogICAgICAgIGlmIChsb2NhbCBpcyBUeXBlVmFyaWFibGVMb2NhbCkgewogICAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICAgICAiUnVudGltZSB0eXBlIGluZm9ybWF0aW9uIG5vdCBhdmFpbGFibGUgZm9yICRsb2NhbCAiCiAgICAgICAgICAgICAgImluICR7ZGlyZWN0TG9jYWxzLmtleXN9IGZvciAkZXhlY3V0YWJsZUNvbnRleHQuIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICAgIGxvY2FsLAogICAgICAgICAgICAgICJDYW5ub3QgZmluZCB2YWx1ZSAkbG9jYWwgaW4gJHtkaXJlY3RMb2NhbHMua2V5c30gZm9yICIKICAgICAgICAgICAgICAiJGV4ZWN1dGFibGVDb250ZXh0LiIpOwogICAgICAgIH0KICAgICAgfQogICAgICBISW5zdHJ1Y3Rpb24gdmFsdWUgPSBkaXJlY3RMb2NhbHNbbG9jYWxdOwogICAgICBpZiAoc291cmNlSW5mb3JtYXRpb24gIT0gbnVsbCkgewogICAgICAgIHZhbHVlID0gbmV3IEhSZWYodmFsdWUsIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICBidWlsZGVyLmFkZCh2YWx1ZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHZhbHVlOwogICAgfSBlbHNlIGlmIChpc1N0b3JlZEluQ2xvc3VyZUZpZWxkKGxvY2FsKSkgewogICAgICBDbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvIGNsb3N1cmVEYXRhID0gc2NvcGVJbmZvOwogICAgICBGaWVsZEVudGl0eSByZWRpcmVjdCA9IHJlZGlyZWN0aW9uTWFwcGluZ1tsb2NhbF07CiAgICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciA9IHJlYWRMb2NhbChjbG9zdXJlRGF0YS5jbG9zdXJlRW50aXR5KTsKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlID0gbG9jYWwgaXMgQm94TG9jYWwKICAgICAgICAgID8gX2Fic3RyYWN0VmFsdWVEb21haW4ubm9uTnVsbFR5cGUKICAgICAgICAgIDogZ2V0VHlwZU9mQ2FwdHVyZWRWYXJpYWJsZShyZWRpcmVjdCk7CiAgICAgIEhJbnN0cnVjdGlvbiBmaWVsZEdldCA9CiAgICAgICAgICBuZXcgSEZpZWxkR2V0KHJlZGlyZWN0LCByZWNlaXZlciwgdHlwZSwgc291cmNlSW5mb3JtYXRpb24pOwogICAgICBidWlsZGVyLmFkZChmaWVsZEdldCk7CiAgICAgIHJldHVybiBmaWVsZEdldDsKICAgIH0gZWxzZSBpZiAoaXNCb3hlZChsb2NhbCkpIHsKICAgICAgRmllbGRFbnRpdHkgcmVkaXJlY3QgPSByZWRpcmVjdGlvbk1hcHBpbmdbbG9jYWxdOwogICAgICBCb3hMb2NhbCBsb2NhbEJveDsKICAgICAgLy8gSW4gdGhlIGZ1bmN0aW9uIHRoYXQgZGVjbGFyZXMgdGhlIGNhcHR1cmVkIHZhcmlhYmxlIHRoZSBib3ggaXMKICAgICAgLy8gYWNjZXNzZWQgYXMgZGlyZWN0IGxvY2FsLiBJbnNpZGUgdGhlIG5lc3RlZCBjbG9zdXJlIHRoZSBib3ggaXMKICAgICAgLy8gYWNjZXNzZWQgdGhyb3VnaCBhIGNsb3N1cmUtZmllbGQuCiAgICAgIC8vIENhbGxpbmcgW3JlYWRMb2NhbF0gbWFrZXMgc3VyZSB3ZSBnZW5lcmF0ZSB0aGUgY29ycmVjdCBjb2RlIHRvIGdldAogICAgICAvLyB0aGUgYm94LgogICAgICBpZiAocmVkaXJlY3QgaXMgSlJlY29yZEZpZWxkKSB7CiAgICAgICAgbG9jYWxCb3ggPSByZWRpcmVjdC5ib3g7CiAgICAgIH0KICAgICAgYXNzZXJ0KGxvY2FsQm94ICE9IG51bGwpOwoKICAgICAgSEluc3RydWN0aW9uIGJveCA9IHJlYWRMb2NhbChsb2NhbEJveCk7CiAgICAgIEhJbnN0cnVjdGlvbiBsb29rdXAgPSBuZXcgSEZpZWxkR2V0KHJlZGlyZWN0LCBib3gsCiAgICAgICAgICBnZXRUeXBlT2ZDYXB0dXJlZFZhcmlhYmxlKHJlZGlyZWN0KSwgc291cmNlSW5mb3JtYXRpb24pOwogICAgICBidWlsZGVyLmFkZChsb29rdXApOwogICAgICByZXR1cm4gbG9va3VwOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KF9pc1VzZWRJblRyeU9yR2VuZXJhdG9yKGxvY2FsKSk7CiAgICAgIEhMb2NhbFZhbHVlIGxvY2FsVmFsdWUgPSBnZXRMb2NhbChsb2NhbCk7CiAgICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IG5ldyBITG9jYWxHZXQobG9jYWwsIGxvY2FsVmFsdWUsCiAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSwgc291cmNlSW5mb3JtYXRpb24pOwogICAgICBidWlsZGVyLmFkZChpbnN0cnVjdGlvbik7CiAgICAgIHJldHVybiBpbnN0cnVjdGlvbjsKICAgIH0KICB9CgogIEhJbnN0cnVjdGlvbiByZWFkVGhpcyh7U291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb259KSB7CiAgICBISW5zdHJ1Y3Rpb24gcmVzID0KICAgICAgICByZWFkTG9jYWwoc2NvcGVJbmZvLnRoaXNMb2NhbCwgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGlmIChyZXMuaW5zdHJ1Y3Rpb25UeXBlID09IG51bGwpIHsKICAgICAgcmVzLmluc3RydWN0aW9uVHlwZSA9IGdldFR5cGVPZlRoaXMoKTsKICAgIH0KICAgIHJldHVybiByZXM7CiAgfQoKICBITG9jYWxWYWx1ZSBnZXRMb2NhbChMb2NhbCBsb2NhbCwge1NvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9ufSkgewogICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgYSBwYXJhbWV0ZXIsIHdlIGFscmVhZHkgaGF2ZSBhCiAgICAvLyBIUGFyYW1ldGVyVmFsdWUgZm9yIGl0LiBXZSBjYW5ub3QgY3JlYXRlIGFub3RoZXIgb25lIGJlY2F1c2UKICAgIC8vIGl0IGNvdWxkIHRoZW4gaGF2ZSBhbm90aGVyIG5hbWUgdGhhbiB0aGUgcmVhbCBwYXJhbWV0ZXIuIEFuZAogICAgLy8gdGhlIG90aGVyIG9uZSB3b3VsZCBub3Qga25vdyBpdCBpcyBqdXN0IGEgY29weSBvZiB0aGUgcmVhbAogICAgLy8gcGFyYW1ldGVyLgogICAgaWYgKGJ1aWxkZXIucGFyYW1ldGVycy5jb250YWluc0tleShsb2NhbCkpIHsKICAgICAgcmV0dXJuIGJ1aWxkZXIucGFyYW1ldGVyc1tsb2NhbF07CiAgICB9CgogICAgcmV0dXJuIGFjdGl2YXRpb25WYXJpYWJsZXMucHV0SWZBYnNlbnQobG9jYWwsICgpIHsKICAgICAgSExvY2FsVmFsdWUgbG9jYWxWYWx1ZSA9CiAgICAgICAgICBuZXcgSExvY2FsVmFsdWUobG9jYWwsIF9hYnN0cmFjdFZhbHVlRG9tYWluLm5vbk51bGxUeXBlKQogICAgICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgICAgIGJ1aWxkZXIuZ3JhcGguZW50cnkuYWRkQXRFeGl0KGxvY2FsVmFsdWUpOwogICAgICByZXR1cm4gbG9jYWxWYWx1ZTsKICAgIH0pOwogIH0KCiAgTG9jYWwgZ2V0VHlwZVZhcmlhYmxlQXNMb2NhbChUeXBlVmFyaWFibGVUeXBlIHR5cGUpIHsKICAgIHJldHVybiB0eXBlVmFyaWFibGVMb2NhbHMucHV0SWZBYnNlbnQodHlwZSwgKCkgewogICAgICByZXR1cm4gbmV3IFR5cGVWYXJpYWJsZUxvY2FsKHR5cGUpOwogICAgfSk7CiAgfQoKICAvLy8gU2V0cyB0aGUgW2VsZW1lbnRdIHRvIFt2YWx1ZV0uIElmIHRoZSBlbGVtZW50IGlzIGJveGVkIG9yIHN0b3JlZCBpbiBhCiAgLy8vIGNsb3N1cmUgdGhlbiB0aGUgbWV0aG9kIGdlbmVyYXRlcyBjb2RlIHRvIHNldCB0aGUgdmFsdWUuCiAgdm9pZCB1cGRhdGVMb2NhbChMb2NhbCBsb2NhbCwgSEluc3RydWN0aW9uIHZhbHVlLAogICAgICB7U291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb259KSB7CiAgICBpZiAodmFsdWUgaXMgSFJlZikgewogICAgICBIUmVmIHJlZiA9IHZhbHVlOwogICAgICB2YWx1ZSA9IHJlZi52YWx1ZTsKICAgIH0KICAgIGFzc2VydCghaXNTdG9yZWRJbkNsb3N1cmVGaWVsZChsb2NhbCksCiAgICAgICAgIkxvY2FsICRsb2NhbCBpcyBzdG9yZWQgaW4gYSBjbG9zdXJlIGZpZWxkLiIpOwogICAgaWYgKGlzQWNjZXNzZWREaXJlY3RseShsb2NhbCkpIHsKICAgICAgZGlyZWN0TG9jYWxzW2xvY2FsXSA9IHZhbHVlOwogICAgfSBlbHNlIGlmIChpc0JveGVkKGxvY2FsKSkgewogICAgICBGaWVsZEVudGl0eSByZWRpcmVjdCA9IHJlZGlyZWN0aW9uTWFwcGluZ1tsb2NhbF07CiAgICAgIGFzc2VydChyZWRpcmVjdCAhPSBudWxsKTsKICAgICAgQm94TG9jYWwgbG9jYWxCb3g7CiAgICAgIGlmIChyZWRpcmVjdCBpcyBKUmVjb3JkRmllbGQpIHsKICAgICAgICBsb2NhbEJveCA9IHJlZGlyZWN0LmJveDsKICAgICAgfQogICAgICBhc3NlcnQobG9jYWxCb3ggIT0gbnVsbCk7CgogICAgICAvLyBUaGUgYm94IGl0c2VsZiBjb3VsZCBiZSBjYXB0dXJlZCwgb3IgYmUgbG9jYWwuIEEgbG9jYWwgdmFyaWFibGUgdGhhdAogICAgICAvLyBpcyBjYXB0dXJlZCB3aWxsIGJlIGJveGVkLCBidXQgdGhlIGJveCBpdHNlbGYgd2lsbCBiZSBhIGxvY2FsLgogICAgICAvLyBJbnNpZGUgdGhlIGNsb3N1cmUgdGhlIGJveCBpcyBzdG9yZWQgaW4gYSBjbG9zdXJlLWZpZWxkIGFuZCBjYW5ub3QKICAgICAgLy8gYmUgYWNjZXNzZWQgZGlyZWN0bHkuCiAgICAgIEhJbnN0cnVjdGlvbiBib3ggPSByZWFkTG9jYWwobG9jYWxCb3gpOwogICAgICBidWlsZGVyLmFkZChuZXcgSEZpZWxkU2V0KF9hYnN0cmFjdFZhbHVlRG9tYWluLCByZWRpcmVjdCwgYm94LCB2YWx1ZSkKICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KF9pc1VzZWRJblRyeU9yR2VuZXJhdG9yKGxvY2FsKSk7CiAgICAgIEhMb2NhbFZhbHVlIGxvY2FsVmFsdWUgPSBnZXRMb2NhbChsb2NhbCk7CiAgICAgIGJ1aWxkZXIuYWRkKG5ldyBITG9jYWxTZXQoX2Fic3RyYWN0VmFsdWVEb21haW4sIGxvY2FsLCBsb2NhbFZhbHVlLCB2YWx1ZSkKICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb24pOwogICAgfQogIH0KCiAgLy8vIFRoaXMgZnVuY3Rpb24sIHN0YXJ0TG9vcCwgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHZpc2l0aW5nIGFueSBjaGlsZHJlbiBvZgogIC8vLyB0aGUgbG9vcC4gSW4gcGFydGljdWxhciBpdCBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIGV4ZWN1dGluZyB0aGUKICAvLy8gaW5pdGlhbGl6ZXJzLgogIC8vLwogIC8vLyBUaGUgW0xvY2Fsc0hhbmRsZXJdIHdpbGwgbWFrZSB0aGUgYm94ZXMgYW5kIHVwZGF0ZXMgYXQgdGhlIHJpZ2h0IG1vbWVudC4KICAvLy8gVGhlIGJ1aWxkZXIganVzdCBuZWVkcyB0byBjYWxsIFtlbnRlckxvb3BCb2R5XSBhbmQgW2VudGVyTG9vcFVwZGF0ZXNdCiAgLy8vIChmb3IgW2FzdC5Gb3JdIGxvb3BzKSBhdCB0aGUgY29ycmVjdCBwbGFjZXMuIEZvciBwaGktaGFuZGxpbmcKICAvLy8gW2JlZ2luTG9vcEhlYWRlcl0gYW5kIFtlbmRMb29wXSBtdXN0IGFsc28gYmUgY2FsbGVkLgogIC8vLwogIC8vLyBUaGUgY29ycmVjdCBwbGFjZSBmb3IgdGhlIGJveCBkZXBlbmRzIG9uIHRoZSBnaXZlbiBsb29wLiBJbiBtb3N0IGNhc2VzCiAgLy8vIHRoZSBib3ggd2lsbCBiZSBjcmVhdGVkIHdoZW4gZW50ZXJpbmcgdGhlIGxvb3AtYm9keTogd2hpbGUsIGRvLXdoaWxlLCBhbmQKICAvLy8gZm9yLWluIChhc3N1bWluZyB0aGUgY2FsbCB0byBbOm5leHQ6XSBpcyBpbnNpZGUgdGhlIGJvZHkpIGNhbiBhbHdheXMgYmUKICAvLy8gY29uc3RydWN0ZWQgdGhpcyB3YXkuCiAgLy8vCiAgLy8vIFRoaW5ncyBhcmUgc2xpZ2h0bHkgbW9yZSBjb21wbGljYXRlZCBmb3IgW2FzdC5Gb3JdIGxvb3BzLiBJZiBubyBkZWNsYXJlZAogIC8vLyBsb29wIHZhcmlhYmxlIGlzIGJveGVkIHRoZW4gdGhlIGxvb3AtYm9keSBhcHByb2FjaCB3b3JrcyBoZXJlIHRvby4gSWYgYQogIC8vLyBsb29wLXZhcmlhYmxlIGlzIGJveGVkIHdlIG5lZWQgdG8gaW50cm9kdWNlIGEgbmV3IGJveCBmb3IgdGhlCiAgLy8vIGxvb3AtdmFyaWFibGUgYmVmb3JlIHdlIGVudGVyIHRoZSBpbml0aWFsaXplciBzbyB0aGF0IHRoZSBpbml0aWFsaXplcgogIC8vLyB3cml0ZXMgdGhlIHZhbHVlcyBpbnRvIHRoZSBib3guIEluIGFueSBjYXNlIHdlIG5lZWQgdG8gY3JlYXRlIHRoZSBib3gKICAvLy8gYmVmb3JlIHRoZSBjb25kaXRpb24gc2luY2UgdGhlIGNvbmRpdGlvbiBjb3VsZCBib3ggdGhlIHZhcmlhYmxlLgogIC8vLyBTaW5jZSB0aGUgZmlyc3QgYm94IGlzIGNyZWF0ZWQgb3V0c2lkZSB0aGUgYWN0dWFsIGxvb3Agd2UgaGF2ZSBhIHNlY29uZAogIC8vLyBsb2NhdGlvbiB3aGVyZSBhIGJveCBpcyBjcmVhdGVkOiBqdXN0IGJlZm9yZSB0aGUgdXBkYXRlcy4gVGhpcyBpcwogIC8vLyBuZWNlc3Nhcnkgc2luY2UgdXBkYXRlcyBhcmUgY29uc2lkZXJlZCB0byBiZSBwYXJ0IG9mIHRoZSBuZXh0IGl0ZXJhdGlvbgogIC8vLyAoYW5kIGNhbiBhZ2FpbiBjYXB0dXJlIHZhcmlhYmxlcykuCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlIHRoZSBmb2xsb3dpbmcgRGFydCBjb2RlIHByaW50cyAxIDMgLS0gMyA0LgogIC8vLwogIC8vLyAgICAgdmFyIGZzID0gW107CiAgLy8vICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IChmKCkgeyBmcy5hZGQoZik7IHByaW50KGkpOyBpKys7IH0pKCkpIHsKICAvLy8gICAgICAgaSsrOwogIC8vLyAgICAgfQogIC8vLyAgICAgcHJpbnQoIi0tIik7CiAgLy8vICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI7IGkrKykgZnNbaV0oKTsKICAvLy8KICAvLy8gV2Ugc29sdmUgdGhpcyBieSBlbWl0dGluZyB0aGUgZm9sbG93aW5nIGNvZGUgKG9ubHkgZm9yIFthc3QuRm9yXSBsb29wcyk6CiAgLy8vICA8Q3JlYXRlIGJveD4gICAgPD09IG1vdmUgdGhlIGZpcnN0IGJveCBjcmVhdGlvbiBvdXRzaWRlIHRoZSBsb29wLgogIC8vLyAgPGluaXRpYWxpemVyPjsKICAvLy8gIGxvb3AtZW50cnk6CiAgLy8vICAgIGlmICghPGNvbmRpdGlvbj4pIGdvdG8gbG9vcC1leGl0OwogIC8vLyAgICA8Ym9keT4KICAvLy8gICAgPHVwZGF0ZSBib3g+ICAvLyBjcmVhdGUgYSBuZXcgYm94IGFuZCBjb3B5IHRoZSBjYXB0dXJlZCBsb29wLXZhcmlhYmxlcy4KICAvLy8gICAgPHVwZGF0ZXM+CiAgLy8vICAgIGdvdG8gbG9vcC1lbnRyeTsKICAvLy8gIGxvb3AtZXhpdDoKICB2b2lkIHN0YXJ0TG9vcCgKICAgICAgQ2FwdHVyZWRMb29wU2NvcGUgbG9vcEluZm8sIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBpZiAobG9vcEluZm8uaGFzQm94ZWRMb29wVmFyaWFibGVzKSB7CiAgICAgIC8vIElmIHRoZXJlIGFyZSBib3hlZCBsb29wIHZhcmlhYmxlcyB0aGVuIHdlIHNldCB1cCB0aGUgYm94IGFuZAogICAgICAvLyByZWRpcmVjdGlvbnMgYWxyZWFkeSBub3cuIFRoaXMgd2F5IHRoZSBpbml0aWFsaXplciBjYW4gd3JpdGUgaXRzCiAgICAgIC8vIHZhbHVlcyBpbnRvIHRoZSBib3guCiAgICAgIC8vIEZvciBvdGhlciBsb29wcyB0aGUgYm94IHdpbGwgYmUgY3JlYXRlZCB3aGVuIGVudGVyaW5nIHRoZSBib2R5LgogICAgICBlbnRlclNjb3BlKGxvb3BJbmZvLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CiAgfQoKICAvLy8gQ3JlYXRlIHBoaXMgYXQgdGhlIGxvb3AgZW50cnkgZm9yIGxvY2FsIHZhcmlhYmxlcyAocmVhZHkgZm9yIHRoZSB2YWx1ZXMKICAvLy8gZnJvbSB0aGUgYmFjayBlZGdlKS4gIFBvcHVsYXRlIHRoZSBwaGlzIHdpdGggdGhlIGN1cnJlbnQgdmFsdWVzLgogIHZvaWQgYmVnaW5Mb29wSGVhZGVyKEhCYXNpY0Jsb2NrIGxvb3BFbnRyeSkgewogICAgLy8gQ3JlYXRlIGEgY29weSBiZWNhdXNlIHdlIG1vZGlmeSB0aGUgbWFwIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGl0LgogICAgTWFwPExvY2FsLCBISW5zdHJ1Y3Rpb24+IHNhdmVkRGlyZWN0TG9jYWxzID0KICAgICAgICBuZXcgTWFwPExvY2FsLCBISW5zdHJ1Y3Rpb24+LmZyb20oZGlyZWN0TG9jYWxzKTsKCiAgICAvLyBDcmVhdGUgcGhpcyBmb3IgYWxsIGVsZW1lbnRzIGluIHRoZSBkZWZpbml0aW9ucyBlbnZpcm9ubWVudC4KICAgIHNhdmVkRGlyZWN0TG9jYWxzLmZvckVhY2goKExvY2FsIGxvY2FsLCBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgICAgaWYgKGlzQWNjZXNzZWREaXJlY3RseShsb2NhbCkpIHsKICAgICAgICAvLyBXZSBrbm93ICd0aGlzJyBjYW5ub3QgYmUgbW9kaWZpZWQuCiAgICAgICAgaWYgKGxvY2FsICE9IHNjb3BlSW5mby50aGlzTG9jYWwpIHsKICAgICAgICAgIEhQaGkgcGhpID0gbmV3IEhQaGkuc2luZ2xlSW5wdXQoCiAgICAgICAgICAgICAgbG9jYWwsIGluc3RydWN0aW9uLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSk7CiAgICAgICAgICBsb29wRW50cnkuYWRkUGhpKHBoaSk7CiAgICAgICAgICBkaXJlY3RMb2NhbHNbbG9jYWxdID0gcGhpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkaXJlY3RMb2NhbHNbbG9jYWxdID0gaW5zdHJ1Y3Rpb247CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICB9CgogIHZvaWQgZW50ZXJMb29wQm9keSgKICAgICAgQ2FwdHVyZWRMb29wU2NvcGUgbG9vcEluZm8sIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICAvLyBJZiB0aGVyZSBhcmUgbm8gZGVjbGFyZWQgYm94ZWQgbG9vcCB2YXJpYWJsZXMgdGhlbiB3ZSBkaWQgbm90IGNyZWF0ZSB0aGUKICAgIC8vIGJveCBiZWZvcmUgdGhlIGluaXRpYWxpemVyIGFuZCB3ZSBoYXZlIHRvIGNyZWF0ZSB0aGUgYm94IG5vdy4KICAgIGlmICghbG9vcEluZm8uaGFzQm94ZWRMb29wVmFyaWFibGVzKSB7CiAgICAgIGVudGVyU2NvcGUobG9vcEluZm8sIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0KICB9CgogIHZvaWQgZW50ZXJMb29wVXBkYXRlcygKICAgICAgQ2FwdHVyZWRMb29wU2NvcGUgbG9vcEluZm8sIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICAvLyBJZiB0aGVyZSBhcmUgZGVjbGFyZWQgYm94ZWQgbG9vcCB2YXJpYWJsZXMgdGhlbiB0aGUgdXBkYXRlcyBtaWdodCBoYXZlCiAgICAvLyBhY2Nlc3MgdG8gdGhlIGJveCBhbmQgd2UgbXVzdCBzd2l0Y2ggdG8gYSBuZXcgYm94IGJlZm9yZSBleGVjdXRpbmcgdGhlCiAgICAvLyB1cGRhdGVzLgogICAgLy8gSW4gYWxsIG90aGVyIGNhc2VzIGEgbmV3IGJveCB3aWxsIGJlIGNyZWF0ZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9keSBvZgogICAgLy8gdGhlIG5leHQgaXRlcmF0aW9uLgogICAgaWYgKGxvb3BJbmZvLmhhc0JveGVkTG9vcFZhcmlhYmxlcykgewogICAgICB1cGRhdGVDYXB0dXJlQm94KAogICAgICAgICAgbG9vcEluZm8uY29udGV4dCwgbG9vcEluZm8uYm94ZWRMb29wVmFyaWFibGVzLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CiAgfQoKICAvLy8gR29lcyB0aHJvdWdoIHRoZSBwaGlzIGNyZWF0ZWQgaW4gYmVnaW5Mb29wSGVhZGVyIGVudHJ5IGFuZCBhZGRzIHRoZQogIC8vLyBpbnB1dCBmcm9tIHRoZSBiYWNrIGVkZ2UgKGZyb20gdGhlIGN1cnJlbnQgdmFsdWUgb2YgZGlyZWN0TG9jYWxzKSB0byB0aGVtLgogIHZvaWQgZW5kTG9vcChIQmFzaWNCbG9jayBsb29wRW50cnkpIHsKICAgIC8vIElmIHRoZSBsb29wIGhhcyBhbiBhYm9ydGluZyBib2R5LCB3ZSBkb24ndCB1cGRhdGUgdGhlIGxvb3AKICAgIC8vIHBoaXMuCiAgICBpZiAobG9vcEVudHJ5LnByZWRlY2Vzc29ycy5sZW5ndGggPT0gMSkgcmV0dXJuOwogICAgbG9vcEVudHJ5LmZvckVhY2hQaGkoKEhQaGkgcGhpKSB7CiAgICAgIExvY2FsIGVsZW1lbnQgPSBwaGkuc291cmNlRWxlbWVudDsKICAgICAgSEluc3RydWN0aW9uIHBvc3RMb29wRGVmaW5pdGlvbiA9IGRpcmVjdExvY2Fsc1tlbGVtZW50XTsKICAgICAgcGhpLmFkZElucHV0KHBvc3RMb29wRGVmaW5pdGlvbik7CiAgICB9KTsKICB9CgogIC8vLyBNZXJnZSBbb3RoZXJMb2NhbHNdIGludG8gdGhpcyBsb2NhbHMgaGFuZGxlciwgY3JlYXRpbmcgcGhpLW5vZGVzIHdoZW4KICAvLy8gdGhlcmUgaXMgYSBjb25mbGljdC4KICAvLy8gSWYgYSBwaGkgbm9kZSBpcyBuZWNlc3NhcnksIGl0IHdpbGwgdXNlIHRoaXMgaGFuZGxlcidzIGluc3RydWN0aW9uIGFzIHRoZQogIC8vLyBmaXJzdCBpbnB1dCwgYW5kIHRoZSBvdGhlckxvY2FscyBpbnN0cnVjdGlvbiBhcyB0aGUgc2Vjb25kLgogIHZvaWQgbWVyZ2VXaXRoKExvY2Fsc0hhbmRsZXIgb3RoZXJMb2NhbHMsIEhCYXNpY0Jsb2NrIGpvaW5CbG9jaykgewogICAgLy8gSWYgYW4gZWxlbWVudCBpcyBpbiBvbmUgbWFwIGJ1dCBub3QgdGhlIG90aGVyIHdlIGNhbiBzYWZlbHkKICAgIC8vIGlnbm9yZSBpdC4gSXQgbWVhbnMgdGhhdCBhIHZhcmlhYmxlIHdhcyBkZWNsYXJlZCBpbiB0aGUKICAgIC8vIGJsb2NrLiBTaW5jZSB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgYXJlIHNjb3BlZCB0aGUgZGVjbGFyZWQKICAgIC8vIHZhcmlhYmxlIGNhbm5vdCBiZSBhbGl2ZSBvdXRzaWRlIHRoZSBibG9jay4gTm90ZTogdGhpcyBpcyBvbmx5CiAgICAvLyB0cnVlIGZvciBub2RlcyB3aGVyZSB3ZSBkbyBqb2lucy4KICAgIE1hcDxMb2NhbCwgSEluc3RydWN0aW9uPiBqb2luZWRMb2NhbHMgPSBuZXcgTWFwPExvY2FsLCBISW5zdHJ1Y3Rpb24+KCk7CiAgICBvdGhlckxvY2Fscy5kaXJlY3RMb2NhbHMuZm9yRWFjaCgoTG9jYWwgbG9jYWwsIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgICAvLyBXZSBrbm93ICd0aGlzJyBjYW5ub3QgYmUgbW9kaWZpZWQuCiAgICAgIGlmIChsb2NhbCA9PSBzY29wZUluZm8udGhpc0xvY2FsKSB7CiAgICAgICAgYXNzZXJ0KGRpcmVjdExvY2Fsc1tsb2NhbF0gPT0gaW5zdHJ1Y3Rpb24pOwogICAgICAgIGpvaW5lZExvY2Fsc1tsb2NhbF0gPSBpbnN0cnVjdGlvbjsKICAgICAgfSBlbHNlIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gbWluZSA9IGRpcmVjdExvY2Fsc1tsb2NhbF07CiAgICAgICAgaWYgKG1pbmUgPT0gbnVsbCkgcmV0dXJuOwogICAgICAgIGlmIChpZGVudGljYWwoaW5zdHJ1Y3Rpb24sIG1pbmUpKSB7CiAgICAgICAgICBqb2luZWRMb2NhbHNbbG9jYWxdID0gaW5zdHJ1Y3Rpb247CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIEhJbnN0cnVjdGlvbiBwaGkgPSBuZXcgSFBoaS5tYW55SW5wdXRzKAogICAgICAgICAgICAgIGxvY2FsLAogICAgICAgICAgICAgIDxISW5zdHJ1Y3Rpb24+W21pbmUsIGluc3RydWN0aW9uXSwKICAgICAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSk7CiAgICAgICAgICBqb2luQmxvY2suYWRkUGhpKHBoaSk7CiAgICAgICAgICBqb2luZWRMb2NhbHNbbG9jYWxdID0gcGhpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICBkaXJlY3RMb2NhbHMgPSBqb2luZWRMb2NhbHM7CiAgfQoKICAvLy8gV2hlbiBjb250cm9sIGZsb3cgbWVyZ2VzLCB0aGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBtZXJnZSBzZXZlcmFsCiAgLy8vIGxvY2Fsc0hhbmRsZXJzIGludG8gYSBuZXcgb25lIHVzaW5nIHBoaXMuICBUaGUgbmV3IGxvY2Fsc0hhbmRsZXIgaXMKICAvLy8gcmV0dXJuZWQuICBVbmxlc3MgaXQgaXMgYWxzbyBpbiB0aGUgbGlzdCwgdGhlIGN1cnJlbnQgbG9jYWxzSGFuZGxlciBpcyBub3QKICAvLy8gdXNlZCBmb3IgaXRzIHZhbHVlcywgb25seSBmb3IgaXRzIGRlY2xhcmVkIHZhcmlhYmxlcy4gVGhpcyBpcyBhIHdheSB0bwogIC8vLyBleGNsdWRlIGxvY2FsIHZhbHVlcyBmcm9tIHRoZSByZXN1bHQgd2hlbiB0aGV5IGFyZSBubyBsb25nZXIgaW4gc2NvcGUuCiAgTG9jYWxzSGFuZGxlciBtZXJnZU11bHRpcGxlKAogICAgICBMaXN0PExvY2Fsc0hhbmRsZXI+IGxvY2Fsc0hhbmRsZXJzLCBIQmFzaWNCbG9jayBqb2luQmxvY2spIHsKICAgIGFzc2VydChsb2NhbHNIYW5kbGVycy5sZW5ndGggPiAwKTsKICAgIGlmIChsb2NhbHNIYW5kbGVycy5sZW5ndGggPT0gMSkgcmV0dXJuIGxvY2Fsc0hhbmRsZXJzLnNpbmdsZTsKICAgIE1hcDxMb2NhbCwgSEluc3RydWN0aW9uPiBqb2luZWRMb2NhbHMgPSBuZXcgTWFwPExvY2FsLCBISW5zdHJ1Y3Rpb24+KCk7CiAgICBISW5zdHJ1Y3Rpb24gdGhpc1ZhbHVlID0gbnVsbDsKICAgIGRpcmVjdExvY2Fscy5mb3JFYWNoKChMb2NhbCBsb2NhbCwgSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICAgIGlmIChsb2NhbCAhPSBzY29wZUluZm8udGhpc0xvY2FsKSB7CiAgICAgICAgSFBoaSBwaGkgPSBuZXcgSFBoaS5ub0lucHV0cyhsb2NhbCwgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpOwogICAgICAgIGpvaW5lZExvY2Fsc1tsb2NhbF0gPSBwaGk7CiAgICAgICAgam9pbkJsb2NrLmFkZFBoaShwaGkpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFdlIGtub3cgdGhhdCAidGhpcyIgbmV2ZXIgY2hhbmdlcywgaWYgaXQncyB0aGVyZS4KICAgICAgICAvLyBTYXZlIGl0IGZvciBsYXRlci4gV2hpbGUgbWVyZ2luZywgdGhlcmUgaXMgbm8gcGhpIGZvciAidGhpcyIsCiAgICAgICAgLy8gc28gd2UgZG9uJ3QgaGF2ZSB0byBzcGVjaWFsIGNhc2UgaXQgaW4gdGhlIG1lcmdlIGxvb3AuCiAgICAgICAgdGhpc1ZhbHVlID0gaW5zdHJ1Y3Rpb247CiAgICAgIH0KICAgIH0pOwogICAgZm9yIChMb2NhbHNIYW5kbGVyIGhhbmRsZXIgaW4gbG9jYWxzSGFuZGxlcnMpIHsKICAgICAgaGFuZGxlci5kaXJlY3RMb2NhbHMuZm9yRWFjaCgoTG9jYWwgbG9jYWwsIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgICAgIEhQaGkgcGhpID0gam9pbmVkTG9jYWxzW2xvY2FsXTsKICAgICAgICBpZiAocGhpICE9IG51bGwpIHsKICAgICAgICAgIHBoaS5hZGRJbnB1dChpbnN0cnVjdGlvbik7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIGlmICh0aGlzVmFsdWUgIT0gbnVsbCkgewogICAgICAvLyBJZiB0aGVyZSB3YXMgYSAidGhpcyIgZm9yIHRoZSBzY29wZSwgYWRkIGl0IHRvIHRoZSBuZXcgbG9jYWxzLgogICAgICBqb2luZWRMb2NhbHNbc2NvcGVJbmZvLnRoaXNMb2NhbF0gPSB0aGlzVmFsdWU7CiAgICB9CgogICAgLy8gUmVtb3ZlIGxvY2FscyB0aGF0IGFyZSBub3QgaW4gYWxsIGhhbmRsZXJzLgogICAgZGlyZWN0TG9jYWxzID0gbmV3IE1hcDxMb2NhbCwgSEluc3RydWN0aW9uPigpOwogICAgam9pbmVkTG9jYWxzLmZvckVhY2goKExvY2FsIGxvY2FsLCBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgICAgaWYgKGxvY2FsICE9IHNjb3BlSW5mby50aGlzTG9jYWwgJiYKICAgICAgICAgIGluc3RydWN0aW9uLmlucHV0cy5sZW5ndGggIT0gbG9jYWxzSGFuZGxlcnMubGVuZ3RoKSB7CiAgICAgICAgam9pbkJsb2NrLnJlbW92ZVBoaShpbnN0cnVjdGlvbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZGlyZWN0TG9jYWxzW2xvY2FsXSA9IGluc3RydWN0aW9uOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgQWJzdHJhY3RWYWx1ZSBjYWNoZWRUeXBlT2ZUaGlzOwoKICBBYnN0cmFjdFZhbHVlIGdldFR5cGVPZlRoaXMoKSB7CiAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdCA9IGNhY2hlZFR5cGVPZlRoaXM7CiAgICBpZiAocmVzdWx0ID09IG51bGwpIHsKICAgICAgVGhpc0xvY2FsIGxvY2FsID0gc2NvcGVJbmZvLnRoaXNMb2NhbDsKICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gbG9jYWwuZW5jbG9zaW5nQ2xhc3M7CiAgICAgIGlmIChfY2xvc2VkV29ybGQuaXNVc2VkQXNNaXhpbihjbHMpKSB7CiAgICAgICAgLy8gSWYgdGhlIGVuY2xvc2luZyBjbGFzcyBpcyB1c2VkIGFzIGEgbWl4aW4sIFs6dGhpczpdIGNhbiBiZQogICAgICAgIC8vIG9mIHRoZSBjbGFzcyB0aGF0IG1peGlucyB0aGUgZW5jbG9zaW5nIGNsYXNzLiBUaGVzZSB0d28KICAgICAgICAvLyBjbGFzc2VzIGRvIG5vdCBoYXZlIGEgc3ViY2xhc3MgcmVsYXRpb25zaGlwLCBzbywgZm9yCiAgICAgICAgLy8gc2ltcGxpY2l0eSwgd2UgbWFyayB0aGUgdHlwZSBhcyBhbiBpbnRlcmZhY2UgdHlwZS4KICAgICAgICByZXN1bHQgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVOb25OdWxsU3VidHlwZShjbHMpOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc3VsdCA9IF9hYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZU5vbk51bGxTdWJjbGFzcyhjbHMpOwogICAgICB9CiAgICAgIGNhY2hlZFR5cGVPZlRoaXMgPSByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgTWFwPEZpZWxkRW50aXR5LCBBYnN0cmFjdFZhbHVlPiBjYWNoZWRUeXBlc09mQ2FwdHVyZWRWYXJpYWJsZXMgPQogICAgICBuZXcgTWFwPEZpZWxkRW50aXR5LCBBYnN0cmFjdFZhbHVlPigpOwoKICBBYnN0cmFjdFZhbHVlIGdldFR5cGVPZkNhcHR1cmVkVmFyaWFibGUoRmllbGRFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIGNhY2hlZFR5cGVzT2ZDYXB0dXJlZFZhcmlhYmxlcy5wdXRJZkFic2VudChlbGVtZW50LCAoKSB7CiAgICAgIHJldHVybiBBYnN0cmFjdFZhbHVlRmFjdG9yeS5pbmZlcnJlZFR5cGVGb3JNZW1iZXIoCiAgICAgICAgICBlbGVtZW50LCBfZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cyk7CiAgICB9KTsKICB9CgogIC8vLyBWYXJpYWJsZXMgc3RvcmVkIGluIHRoZSBjdXJyZW50IGFjdGl2YXRpb24uIFRoZXNlIHZhcmlhYmxlcyBhcmUKICAvLy8gYmVpbmcgdXBkYXRlZCBpbiB0cnkvY2F0Y2ggYmxvY2tzLCBhbmQgc2hvdWxkIGJlCiAgLy8vIGFjY2Vzc2VkIGluZGlyZWN0bHkgdGhyb3VnaCBbSExvY2FsR2V0XSBhbmQgW0hMb2NhbFNldF0uCiAgTWFwPExvY2FsLCBITG9jYWxWYWx1ZT4gYWN0aXZhdGlvblZhcmlhYmxlcyA9IDxMb2NhbCwgSExvY2FsVmFsdWU+e307CgogIFN5bnRoZXRpY0xvY2FsIGNyZWF0ZUxvY2FsKFN0cmluZyBuYW1lKSB7CiAgICByZXR1cm4gbmV3IFN5bnRoZXRpY0xvY2FsKG5hbWUsIGV4ZWN1dGFibGVDb250ZXh0LCBtZW1iZXJDb250ZXh0KTsKICB9Cn0KCi8vLyBBIHN5bnRoZXRpYyBsb2NhbCB2YXJpYWJsZSBvbmx5IHVzZWQgd2l0aCB0aGUgU1NBIGdyYXBoLgovLy8KLy8vIEZvciBpbnN0YW5jZSB1c2VkIGZvciBob2xkaW5nIHJldHVybiB2YWx1ZSBvZiBmdW5jdGlvbiBvciB0aGUgZXhjZXB0aW9uIG9mIGEKLy8vIHRyeS1jYXRjaCBzdGF0ZW1lbnQuCmNsYXNzIFN5bnRoZXRpY0xvY2FsIGV4dGVuZHMgTG9jYWwgewogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lOwogIGZpbmFsIEVudGl0eSBleGVjdXRhYmxlQ29udGV4dDsKICBmaW5hbCBNZW1iZXJFbnRpdHkgbWVtYmVyQ29udGV4dDsKCiAgLy8gQXZvaWQgc2xvdyBPYmplY3QuaGFzaENvZGUuCiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGhhc2hDb2RlID0gX25leHRIYXNoQ29kZSA9IChfbmV4dEhhc2hDb2RlICsgMSkudG9VbnNpZ25lZCgzMCk7CiAgc3RhdGljIGludCBfbmV4dEhhc2hDb2RlID0gMDsKCiAgU3ludGhldGljTG9jYWwodGhpcy5uYW1lLCB0aGlzLmV4ZWN1dGFibGVDb250ZXh0LCB0aGlzLm1lbWJlckNvbnRleHQpOwoKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICdTeW50aGV0aWNMb2NhbCgkbmFtZSknOwp9CoLGAE5OPAEaGSQhMSEoKS5ELioBHhUVAU1OCRZPIwZLSlBESk4nF0A2IiQBRwZKNgZQUBgGGRUdDBMkDAYkASABKgFKQwE4ATIoATwmAUkWKx0gRCE5FTFKHwgxUAgGFAQBRkQgKk43NS0rISUpMzkzTwFPUDUuIzsEAUBILxYQBAFOORNGTVAnMRYpKEwaIEYNKgYoLUxPREgWGzMjOkwzSjM+RDc0IygPIwgIBAFNNUotSxAxODZMPSc4JywGJQQBLAY/FhwbHywjKywgAT8pMEQ0EgoIRTctJwgxAS1EAUlLJEk5S0ctRSMKQx5ONzc/K1BNEk83NzsGAT5ERS4BTlFKTkIrMjlKOzRPN04wTiwIIEAzCCk6TjczUTctME4sCAYEAU1QKRs1MgQBLRsxPzwuLAQBHjE1MgQBLjQEAUlOEU8lKSoUKUNCERQVRiYKCDAnNBwIFDA5OEQtLTEeRh0XITgZSEgrTBImIQggAS45QxsVDS4wQkAgGgYEAUEXTictBhAEAU04RERCEjEoBgE3H0M1MRkIBAE4NSoIBAFMPzQvGRgZBis3JSMhOCAZJiEIIAFOSEwfLkwyDS4wUDIGBAFPSRQGT0xEOwZNUE4cBk9ORExMR05ITikGPQYXShEMFy8GT0kWEysQURMaEhJJKkZKHkkvBgQBTkcwSDE5AURIJy4sK0UhJREtCggIBAEWSVBFKy8GBAEZSU5OEE4bKhhNBgQBSlEoQg00Jik/KAgEAUwbUEJFQz9CRilMTywqNCsPMSIsLREyFTExISUKCAghBAFJSlFNTR9DJ0JMI0MqTyMfDz1JQiEICDRNKBslCgoGHUg1BgEzM0MqQCoPKwgIEQQBIgEiLRotLi1GQ0A+QQ9CCCEGEwQBQy0BQUQ5LQgEAUY3P0gBLEcEAgE9BFEZJQwVIiQBIQxLIAFJAQwpAgEscGFja2FnZTpjb21waWxlci9zcmMvc3NhL2xvY2Fsc19oYW5kbGVyLmRhcnQzc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc3NhL2xvb3BfaGFuZGxlci5kYXJ0tPEvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2Nsb3N1cmUuZGFydCcgc2hvdyBDYXB0dXJlZExvb3BTY29wZTsKaW1wb3J0ICcuLi9lbGVtZW50cy9qdW1wcy5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vaW8vc291cmNlX2luZm9ybWF0aW9uLmRhcnQnOwoKaW1wb3J0ICdidWlsZGVyX2tlcm5lbC5kYXJ0JzsKaW1wb3J0ICdqdW1wX2hhbmRsZXIuZGFydCc7CmltcG9ydCAnbG9jYWxzX2hhbmRsZXIuZGFydCc7CmltcG9ydCAnbm9kZXMuZGFydCc7CgovLy8gQnVpbGRzIHRoZSBTU0EgZ3JhcGggZm9yIGxvb3Agbm9kZXMuCmFic3RyYWN0IGNsYXNzIExvb3BIYW5kbGVyIHsKICBmaW5hbCBLZXJuZWxTc2FHcmFwaEJ1aWxkZXIgYnVpbGRlcjsKCiAgTG9vcEhhbmRsZXIodGhpcy5idWlsZGVyKTsKCiAgQWJzdHJhY3RWYWx1ZURvbWFpbiBnZXQgX2Fic3RyYWN0VmFsdWVEb21haW4gPT4KICAgICAgYnVpbGRlci5jbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICAvLy8gQnVpbGRzIGEgZ3JhcGggZm9yIHRoZSBnaXZlbiBbbG9vcF0gbm9kZS4KICAvLy8KICAvLy8gRm9yIHdoaWxlIGxvb3BzLCBbaW5pdGlhbGl6ZV0gYW5kIFt1cGRhdGVdIGFyZSBudWxsLgogIC8vLyBUaGUgW2NvbmRpdGlvbl0gZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBib29sZWFuIHJlc3VsdC4KICAvLy8gTm9uZSBvZiB0aGUgZnVuY3Rpb25zIG11c3QgbGVhdmUgYW55dGhpbmcgb24gdGhlIHN0YWNrLgogIHZvaWQgaGFuZGxlTG9vcCgKICAgICAgaXIuTm9kZSBsb29wLAogICAgICBDYXB0dXJlZExvb3BTY29wZSBsb29wQ2xvc3VyZUluZm8sCiAgICAgIEp1bXBUYXJnZXQganVtcFRhcmdldCwKICAgICAgdm9pZCBpbml0aWFsaXplKCksCiAgICAgIEhJbnN0cnVjdGlvbiBjb25kaXRpb24oKSwKICAgICAgdm9pZCB1cGRhdGUoKSwKICAgICAgdm9pZCBib2R5KCksCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICAvLyBHZW5lcmF0ZToKICAgIC8vICA8aW5pdGlhbGl6ZXI+CiAgICAvLyAgbG9vcC1lbnRyeToKICAgIC8vICAgIGlmICghPGNvbmRpdGlvbj4pIGdvdG8gbG9vcC1leGl0OwogICAgLy8gICAgPGJvZHk+CiAgICAvLyAgICA8dXBkYXRlcz4KICAgIC8vICAgIGdvdG8gbG9vcC1lbnRyeTsKICAgIC8vICBsb29wLWV4aXQ6CgogICAgYnVpbGRlci5sb2NhbHNIYW5kbGVyLnN0YXJ0TG9vcChsb29wQ2xvc3VyZUluZm8sIHNvdXJjZUluZm9ybWF0aW9uKTsKCiAgICAvLyBUaGUgaW5pdGlhbGl6ZXIuCiAgICBTdWJFeHByZXNzaW9uIGluaXRpYWxpemVyR3JhcGggPSBudWxsOwogICAgSEJhc2ljQmxvY2sgc3RhcnRCbG9jazsKICAgIGlmIChpbml0aWFsaXplICE9IG51bGwpIHsKICAgICAgSEJhc2ljQmxvY2sgaW5pdGlhbGl6ZXJCbG9jayA9IGJ1aWxkZXIub3Blbk5ld0Jsb2NrKCk7CiAgICAgIHN0YXJ0QmxvY2sgPSBpbml0aWFsaXplckJsb2NrOwogICAgICBpbml0aWFsaXplKCk7CiAgICAgIGFzc2VydCghYnVpbGRlci5pc0Fib3J0ZWQoKSk7CiAgICAgIGluaXRpYWxpemVyR3JhcGggPSBuZXcgU3ViRXhwcmVzc2lvbihpbml0aWFsaXplckJsb2NrLCBidWlsZGVyLmN1cnJlbnQpOwogICAgfQoKICAgIGJ1aWxkZXIubG9vcERlcHRoKys7CiAgICBKdW1wSGFuZGxlciBqdW1wSGFuZGxlciA9IGJlZ2luTG9vcEhlYWRlcihsb29wLCBqdW1wVGFyZ2V0KTsKICAgIEhMb29wSW5mb3JtYXRpb24gbG9vcEluZm8gPSBidWlsZGVyLmN1cnJlbnQubG9vcEluZm9ybWF0aW9uOwogICAgSEJhc2ljQmxvY2sgY29uZGl0aW9uQmxvY2sgPSBidWlsZGVyLmN1cnJlbnQ7CiAgICBpZiAoc3RhcnRCbG9jayA9PSBudWxsKSBzdGFydEJsb2NrID0gY29uZGl0aW9uQmxvY2s7CgogICAgSEluc3RydWN0aW9uIGNvbmRpdGlvbkluc3RydWN0aW9uID0gY29uZGl0aW9uKCk7CiAgICBIQmFzaWNCbG9jayBjb25kaXRpb25FbmRCbG9jayA9IGJ1aWxkZXIKICAgICAgICAuY2xvc2UobmV3IEhMb29wQnJhbmNoKF9hYnN0cmFjdFZhbHVlRG9tYWluLCBjb25kaXRpb25JbnN0cnVjdGlvbikpOwogICAgU3ViRXhwcmVzc2lvbiBjb25kaXRpb25FeHByZXNzaW9uID0KICAgICAgICBuZXcgU3ViRXhwcmVzc2lvbihjb25kaXRpb25CbG9jaywgY29uZGl0aW9uRW5kQmxvY2spOwoKICAgIC8vIFNhdmUgdGhlIHZhbHVlcyBvZiB0aGUgbG9jYWwgdmFyaWFibGVzIGF0IHRoZSBlbmQgb2YgdGhlIGNvbmRpdGlvbgogICAgLy8gYmxvY2suICBUaGVzZSBhcmUgdGhlIHZhbHVlcyB0aGF0IHdpbGwgZmxvdyB0byB0aGUgbG9vcCBleGl0IGlmIHRoZQogICAgLy8gY29uZGl0aW9uIGZhaWxzLgogICAgTG9jYWxzSGFuZGxlciBzYXZlZExvY2FscyA9IG5ldyBMb2NhbHNIYW5kbGVyLmZyb20oYnVpbGRlci5sb2NhbHNIYW5kbGVyKTsKCiAgICAvLyBUaGUgYm9keS4KICAgIEhCYXNpY0Jsb2NrIGJlZ2luQm9keUJsb2NrID0gYnVpbGRlci5hZGROZXdCbG9jaygpOwogICAgY29uZGl0aW9uRW5kQmxvY2suYWRkU3VjY2Vzc29yKGJlZ2luQm9keUJsb2NrKTsKICAgIGJ1aWxkZXIub3BlbihiZWdpbkJvZHlCbG9jayk7CgogICAgYnVpbGRlci5sb2NhbHNIYW5kbGVyLmVudGVyTG9vcEJvZHkobG9vcENsb3N1cmVJbmZvLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBib2R5KCk7CgogICAgU3ViR3JhcGggYm9keUdyYXBoID0gbmV3IFN1YkdyYXBoKGJlZ2luQm9keUJsb2NrLCBidWlsZGVyLmxhc3RPcGVuZWRCbG9jayk7CiAgICBIQmFzaWNCbG9jayBib2R5QmxvY2sgPSBidWlsZGVyLmN1cnJlbnQ7CiAgICBpZiAoYnVpbGRlci5jdXJyZW50ICE9IG51bGwpIGJ1aWxkZXIuY2xvc2UobmV3IEhHb3RvKF9hYnN0cmFjdFZhbHVlRG9tYWluKSk7CgogICAgU3ViRXhwcmVzc2lvbiB1cGRhdGVHcmFwaDsKCiAgICBib29sIGxvb3BJc0RlZ2VuZXJhdGUgPSAhanVtcEhhbmRsZXIuaGFzQW55Q29udGludWUoKSAmJiBib2R5QmxvY2sgPT0gbnVsbDsKICAgIGlmICghbG9vcElzRGVnZW5lcmF0ZSkgewogICAgICAvLyBVcGRhdGUuCiAgICAgIC8vIFdlIGNyZWF0ZSBhbiB1cGRhdGUgYmxvY2ssIGV2ZW4gd2hlbiB3ZSBhcmUgaW4gYSB3aGlsZSBsb29wLiBUaGVyZSB0aGUKICAgICAgLy8gdXBkYXRlIGJsb2NrIGlzIHRoZSBqdW1wLXRhcmdldCBmb3IgY29udGludWUgc3RhdGVtZW50cy4gV2UgY291bGQgYXZvaWQKICAgICAgLy8gdGhlIGNyZWF0aW9uIGlmIHRoZXJlIGlzIG5vIGNvbnRpbnVlLCBidXQgZm9yIG5vdyB3ZSBhbHdheXMgY3JlYXRlIGl0LgogICAgICBIQmFzaWNCbG9jayB1cGRhdGVCbG9jayA9IGJ1aWxkZXIuYWRkTmV3QmxvY2soKTsKCiAgICAgIExpc3Q8TG9jYWxzSGFuZGxlcj4gY29udGludWVIYW5kbGVycyA9IDxMb2NhbHNIYW5kbGVyPltdOwogICAgICBqdW1wSGFuZGxlcgogICAgICAgICAgLmZvckVhY2hDb250aW51ZSgoSENvbnRpbnVlIGluc3RydWN0aW9uLCBMb2NhbHNIYW5kbGVyIGxvY2FscykgewogICAgICAgIGluc3RydWN0aW9uLmJsb2NrLmFkZFN1Y2Nlc3Nvcih1cGRhdGVCbG9jayk7CiAgICAgICAgY29udGludWVIYW5kbGVycy5hZGQobG9jYWxzKTsKICAgICAgfSk7CgogICAgICBpZiAoYm9keUJsb2NrICE9IG51bGwpIHsKICAgICAgICBjb250aW51ZUhhbmRsZXJzLmFkZChidWlsZGVyLmxvY2Fsc0hhbmRsZXIpOwogICAgICAgIGJvZHlCbG9jay5hZGRTdWNjZXNzb3IodXBkYXRlQmxvY2spOwogICAgICB9CgogICAgICBidWlsZGVyLm9wZW4odXBkYXRlQmxvY2spOwogICAgICBidWlsZGVyLmxvY2Fsc0hhbmRsZXIgPQogICAgICAgICAgY29udGludWVIYW5kbGVyc1swXS5tZXJnZU11bHRpcGxlKGNvbnRpbnVlSGFuZGxlcnMsIHVwZGF0ZUJsb2NrKTsKCiAgICAgIExpc3Q8TGFiZWxEZWZpbml0aW9uPiBsYWJlbHMgPSBqdW1wSGFuZGxlci5sYWJlbHM7CiAgICAgIGlmIChsYWJlbHMuaXNOb3RFbXB0eSkgewogICAgICAgIGJlZ2luQm9keUJsb2NrLnNldEJsb2NrRmxvdygKICAgICAgICAgICAgbmV3IEhMYWJlbGVkQmxvY2tJbmZvcm1hdGlvbigKICAgICAgICAgICAgICAgIG5ldyBIU3ViR3JhcGhCbG9ja0luZm9ybWF0aW9uKGJvZHlHcmFwaCksIGp1bXBIYW5kbGVyLmxhYmVscywKICAgICAgICAgICAgICAgIGlzQ29udGludWU6IHRydWUpLAogICAgICAgICAgICB1cGRhdGVCbG9jayk7CiAgICAgIH0gZWxzZSBpZiAoanVtcFRhcmdldCAhPSBudWxsICYmIGp1bXBUYXJnZXQuaXNDb250aW51ZVRhcmdldCkgewogICAgICAgIGJlZ2luQm9keUJsb2NrLnNldEJsb2NrRmxvdygKICAgICAgICAgICAgbmV3IEhMYWJlbGVkQmxvY2tJbmZvcm1hdGlvbi5pbXBsaWNpdCgKICAgICAgICAgICAgICAgIG5ldyBIU3ViR3JhcGhCbG9ja0luZm9ybWF0aW9uKGJvZHlHcmFwaCksIGp1bXBUYXJnZXQsCiAgICAgICAgICAgICAgICBpc0NvbnRpbnVlOiB0cnVlKSwKICAgICAgICAgICAgdXBkYXRlQmxvY2spOwogICAgICB9CgogICAgICBidWlsZGVyLmxvY2Fsc0hhbmRsZXIKICAgICAgICAgIC5lbnRlckxvb3BVcGRhdGVzKGxvb3BDbG9zdXJlSW5mbywgc291cmNlSW5mb3JtYXRpb24pOwoKICAgICAgdXBkYXRlKCk7CgogICAgICBIQmFzaWNCbG9jayB1cGRhdGVFbmRCbG9jayA9CiAgICAgICAgICBidWlsZGVyLmNsb3NlKG5ldyBIR290byhfYWJzdHJhY3RWYWx1ZURvbWFpbikpOwogICAgICAvLyBUaGUgYmFjay1lZGdlIGNvbXBsZXRpbmcgdGhlIGN5Y2xlLgogICAgICB1cGRhdGVFbmRCbG9jay5hZGRTdWNjZXNzb3IoY29uZGl0aW9uQmxvY2spOwogICAgICB1cGRhdGVHcmFwaCA9IG5ldyBTdWJFeHByZXNzaW9uKHVwZGF0ZUJsb2NrLCB1cGRhdGVFbmRCbG9jayk7CgogICAgICAvLyBBdm9pZCBhIGNyaXRpY2FsIGVkZ2UgZnJvbSB0aGUgY29uZGl0aW9uIHRvIHRoZSBsb29wLWV4aXQgYm9keS4KICAgICAgSEJhc2ljQmxvY2sgY29uZGl0aW9uRXhpdEJsb2NrID0gYnVpbGRlci5hZGROZXdCbG9jaygpOwogICAgICBidWlsZGVyLm9wZW4oY29uZGl0aW9uRXhpdEJsb2NrKTsKICAgICAgYnVpbGRlci5jbG9zZShuZXcgSEdvdG8oX2Fic3RyYWN0VmFsdWVEb21haW4pKTsKICAgICAgY29uZGl0aW9uRW5kQmxvY2suYWRkU3VjY2Vzc29yKGNvbmRpdGlvbkV4aXRCbG9jayk7CgogICAgICBlbmRMb29wKGNvbmRpdGlvbkJsb2NrLCBjb25kaXRpb25FeGl0QmxvY2ssIGp1bXBIYW5kbGVyLCBzYXZlZExvY2Fscyk7CgogICAgICBjb25kaXRpb25CbG9jay5wb3N0UHJvY2Vzc0xvb3BIZWFkZXIoKTsKICAgICAgSExvb3BCbG9ja0luZm9ybWF0aW9uIGluZm8gPSBuZXcgSExvb3BCbG9ja0luZm9ybWF0aW9uKAogICAgICAgICAgbG9vcEtpbmQobG9vcCksCiAgICAgICAgICBidWlsZGVyLndyYXBFeHByZXNzaW9uR3JhcGgoaW5pdGlhbGl6ZXJHcmFwaCksCiAgICAgICAgICBidWlsZGVyLndyYXBFeHByZXNzaW9uR3JhcGgoY29uZGl0aW9uRXhwcmVzc2lvbiksCiAgICAgICAgICBidWlsZGVyLndyYXBTdGF0ZW1lbnRHcmFwaChib2R5R3JhcGgpLAogICAgICAgICAgYnVpbGRlci53cmFwRXhwcmVzc2lvbkdyYXBoKHVwZGF0ZUdyYXBoKSwKICAgICAgICAgIGNvbmRpdGlvbkJsb2NrLmxvb3BJbmZvcm1hdGlvbi50YXJnZXQsCiAgICAgICAgICBjb25kaXRpb25CbG9jay5sb29wSW5mb3JtYXRpb24ubGFiZWxzLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb24pOwoKICAgICAgc3RhcnRCbG9jay5zZXRCbG9ja0Zsb3coaW5mbywgYnVpbGRlci5jdXJyZW50KTsKICAgICAgbG9vcEluZm8ubG9vcEJsb2NrSW5mb3JtYXRpb24gPSBpbmZvOwogICAgfSBlbHNlIHsKICAgICAgLy8gVGhlIGJvZHkgb2YgdGhlIGZvci93aGlsZSBsb29wIGFsd2F5cyBhYm9ydHMsIHNvIHRoZXJlIGlzIG5vIGJhY2sgZWRnZS4KICAgICAgLy8gV2UgdHVybiB0aGUgY29kZSBpbnRvOgogICAgICAvLyBpZiAoY29uZGl0aW9uKSB7CiAgICAgIC8vICAgYm9keTsKICAgICAgLy8gfSBlbHNlIHsKICAgICAgLy8gICAvLyBXZSBhbHdheXMgY3JlYXRlIGFuIGVtcHR5IGVsc2UgYmxvY2sgdG8gYXZvaWQgY3JpdGljYWwgZWRnZXMuCiAgICAgIC8vIH0KICAgICAgLy8KICAgICAgLy8gSWYgdGhlcmUgaXMgYW55IGJyZWFrIGluIHRoZSBib2R5LCB3ZSBhdHRhY2ggYSBzeW50aGV0aWMKICAgICAgLy8gbGFiZWwgdG8gdGhlIGlmLgogICAgICBIQmFzaWNCbG9jayBlbHNlQmxvY2sgPSBidWlsZGVyLmFkZE5ld0Jsb2NrKCk7CiAgICAgIGJ1aWxkZXIub3BlbihlbHNlQmxvY2spOwogICAgICBidWlsZGVyLmNsb3NlKG5ldyBIR290byhfYWJzdHJhY3RWYWx1ZURvbWFpbikpOwogICAgICAvLyBQYXNzIHRoZSBlbHNlQmxvY2sgYXMgdGhlIGJyYW5jaEJsb2NrLCBiZWNhdXNlIHRoYXQncyB0aGUgYmxvY2sgd2UgZ28KICAgICAgLy8gdG8ganVzdCBiZWZvcmUgbGVhdmluZyB0aGUgJ2xvb3AnLgogICAgICBlbmRMb29wKGNvbmRpdGlvbkJsb2NrLCBlbHNlQmxvY2ssIGp1bXBIYW5kbGVyLCBzYXZlZExvY2Fscyk7CgogICAgICBTdWJHcmFwaCBlbHNlR3JhcGggPSBuZXcgU3ViR3JhcGgoZWxzZUJsb2NrLCBlbHNlQmxvY2spOwogICAgICAvLyBSZW1vdmUgdGhlIGxvb3AgaW5mb3JtYXRpb24gYXR0YWNoZWQgdG8gdGhlIGhlYWRlci4KICAgICAgY29uZGl0aW9uQmxvY2subG9vcEluZm9ybWF0aW9uID0gbnVsbDsKCiAgICAgIC8vIFJlbW92ZSB0aGUgW0hMb29wQnJhbmNoXSBpbnN0cnVjdGlvbiBhbmQgcmVwbGFjZSBpdCB3aXRoCiAgICAgIC8vIFtISWZdLgogICAgICBISW5zdHJ1Y3Rpb24gY29uZGl0aW9uID0gY29uZGl0aW9uRW5kQmxvY2subGFzdC5pbnB1dHNbMF07CiAgICAgIGNvbmRpdGlvbkVuZEJsb2NrLmFkZEF0RXhpdChuZXcgSElmKF9hYnN0cmFjdFZhbHVlRG9tYWluLCBjb25kaXRpb24pKTsKICAgICAgY29uZGl0aW9uRW5kQmxvY2suYWRkU3VjY2Vzc29yKGVsc2VCbG9jayk7CiAgICAgIGNvbmRpdGlvbkVuZEJsb2NrLnJlbW92ZShjb25kaXRpb25FbmRCbG9jay5sYXN0KTsKICAgICAgSElmQmxvY2tJbmZvcm1hdGlvbiBpbmZvID0gbmV3IEhJZkJsb2NrSW5mb3JtYXRpb24oCiAgICAgICAgICBidWlsZGVyLndyYXBFeHByZXNzaW9uR3JhcGgoY29uZGl0aW9uRXhwcmVzc2lvbiksCiAgICAgICAgICBidWlsZGVyLndyYXBTdGF0ZW1lbnRHcmFwaChib2R5R3JhcGgpLAogICAgICAgICAgYnVpbGRlci53cmFwU3RhdGVtZW50R3JhcGgoZWxzZUdyYXBoKSk7CgogICAgICBjb25kaXRpb25FbmRCbG9jay5zZXRCbG9ja0Zsb3coaW5mbywgYnVpbGRlci5jdXJyZW50KTsKICAgICAgSElmIGlmQmxvY2sgPSBjb25kaXRpb25FbmRCbG9jay5sYXN0OwogICAgICBpZkJsb2NrLmJsb2NrSW5mb3JtYXRpb24gPSBjb25kaXRpb25FbmRCbG9jay5ibG9ja0Zsb3c7CgogICAgICAvLyBJZiB0aGUgYm9keSBoYXMgYW55IGJyZWFrLCBhdHRhY2ggYSBzeW50aGVzaXplZCBsYWJlbCB0byB0aGUKICAgICAgLy8gaWYgYmxvY2suCiAgICAgIGlmIChqdW1wSGFuZGxlci5oYXNBbnlCcmVhaygpKSB7CiAgICAgICAgTGFiZWxEZWZpbml0aW9uIGxhYmVsID0KICAgICAgICAgICAganVtcFRhcmdldC5hZGRMYWJlbCgnbG9vcCcsIGlzQnJlYWtUYXJnZXQ6IHRydWUpOwogICAgICAgIFN1YkdyYXBoIGxhYmVsR3JhcGggPSBuZXcgU3ViR3JhcGgoY29uZGl0aW9uQmxvY2ssIGJ1aWxkZXIuY3VycmVudCk7CiAgICAgICAgSExhYmVsZWRCbG9ja0luZm9ybWF0aW9uIGxhYmVsSW5mbyA9IG5ldyBITGFiZWxlZEJsb2NrSW5mb3JtYXRpb24oCiAgICAgICAgICAgIG5ldyBIU3ViR3JhcGhCbG9ja0luZm9ybWF0aW9uKGxhYmVsR3JhcGgpLAogICAgICAgICAgICA8TGFiZWxEZWZpbml0aW9uPltsYWJlbF0pOwoKICAgICAgICBjb25kaXRpb25CbG9jay5zZXRCbG9ja0Zsb3cobGFiZWxJbmZvLCBidWlsZGVyLmN1cnJlbnQpOwoKICAgICAgICBqdW1wSGFuZGxlci5mb3JFYWNoQnJlYWsoKEhCcmVhayBicmVha0luc3RydWN0aW9uLCBfKSB7CiAgICAgICAgICBIQmFzaWNCbG9jayBibG9jayA9IGJyZWFrSW5zdHJ1Y3Rpb24uYmxvY2s7CiAgICAgICAgICBibG9jay5hZGRBdEV4aXQobmV3IEhCcmVhay50b0xhYmVsKAogICAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLCBsYWJlbCwgc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgICAgIGJsb2NrLnJlbW92ZShicmVha0luc3RydWN0aW9uKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAganVtcEhhbmRsZXIuY2xvc2UoKTsKICAgIGJ1aWxkZXIubG9vcERlcHRoLS07CiAgfQoKICAvLy8gQ3JlYXRlcyBhIG5ldyBsb29wLWhlYWRlciBibG9jay4gVGhlIHByZXZpb3VzIFtjdXJyZW50XSBibG9jawogIC8vLyBpcyBjbG9zZWQgd2l0aCBhbiBbSEdvdG9dIGFuZCByZXBsYWNlZCBieSB0aGUgbmV3bHkgY3JlYXRlZCBibG9jay4KICAvLy8gQWxzbyBub3RpZmllcyB0aGUgbG9jYWxzIGhhbmRsZXIgdGhhdCB3ZSdyZSBlbnRlcmluZyBhIGxvb3AuCiAgSnVtcEhhbmRsZXIgYmVnaW5Mb29wSGVhZGVyKGlyLlRyZWVOb2RlIG5vZGUsIEp1bXBUYXJnZXQganVtcFRhcmdldCkgewogICAgYXNzZXJ0KCFidWlsZGVyLmlzQWJvcnRlZCgpKTsKICAgIEhCYXNpY0Jsb2NrIHByZXZpb3VzQmxvY2sgPSBidWlsZGVyLmNsb3NlKG5ldyBIR290byhfYWJzdHJhY3RWYWx1ZURvbWFpbikpOwoKICAgIEp1bXBIYW5kbGVyIGp1bXBIYW5kbGVyID0KICAgICAgICBjcmVhdGVKdW1wSGFuZGxlcihub2RlLCBqdW1wVGFyZ2V0LCBpc0xvb3BKdW1wOiB0cnVlKTsKICAgIEhCYXNpY0Jsb2NrIGxvb3BFbnRyeSA9IGJ1aWxkZXIuZ3JhcGgKICAgICAgICAuYWRkTmV3TG9vcEhlYWRlckJsb2NrKGp1bXBIYW5kbGVyLnRhcmdldCwganVtcEhhbmRsZXIubGFiZWxzKTsKICAgIHByZXZpb3VzQmxvY2suYWRkU3VjY2Vzc29yKGxvb3BFbnRyeSk7CiAgICBidWlsZGVyLm9wZW4obG9vcEVudHJ5KTsKCiAgICBidWlsZGVyLmxvY2Fsc0hhbmRsZXIuYmVnaW5Mb29wSGVhZGVyKGxvb3BFbnRyeSk7CiAgICByZXR1cm4ganVtcEhhbmRsZXI7CiAgfQoKICAvLy8gRW5kcyB0aGUgbG9vcC4KICAvLy8KICAvLy8gSXQgZG9lcyB0aGlzIGJ5OgogIC8vLyAtIGNyZWF0aW5nIGEgbmV3IGJsb2NrIGFuZCBhZGRpbmcgaXQgYXMgc3VjY2Vzc29yIHRvIHRoZSBbYnJhbmNoRXhpdEJsb2NrXQogIC8vLyAgIGFuZCBhbnkgYmxvY2tzIHRoYXQgZW5kIGluIGJyZWFrLgogIC8vLyAtIG9wZW5pbmcgdGhlIG5ldyBibG9jayAoc2V0dGluZyBhcyBbY3VycmVudF0pLgogIC8vLyAtIG5vdGlmeWluZyB0aGUgbG9jYWxzIGhhbmRsZXIgdGhhdCB3ZSdyZSBleGl0aW5nIGEgbG9vcC4KICAvLy8KICAvLy8gW3NhdmVkTG9jYWxzXSBhcmUgdGhlIGxvY2FscyBmcm9tIHRoZSBlbmQgb2YgdGhlIGxvb3AgY29uZGl0aW9uLgogIC8vLwogIC8vLyBbYnJhbmNoRXhpdEJsb2NrXSBpcyB0aGUgZXhpdCAoYnJhbmNoaW5nKSBibG9jayBvZiB0aGUgY29uZGl0aW9uLgogIC8vLyBHZW5lcmFsbHkgdGhpcyBpcyBub3QgdGhlIHRvcCBvZiB0aGUgbG9vcCwgc2luY2UgdGhpcyB3b3VsZCBsZWFkIHRvCiAgLy8vIGNyaXRpY2FsIGVkZ2VzLiBJdCBpcyBudWxsIGZvciBkZWdlbmVyYXRlIGRvLXdoaWxlIGxvb3BzIHRoYXQgaGF2ZSBubyBiYWNrCiAgLy8vIGVkZ2UgYmVjYXVzZSB0aGV5IGFib3J0ICh0aHJvdy9yZXR1cm4vYnJlYWsgaW4gdGhlIGJvZHkgYW5kIGhhdmUgbm8KICAvLy8gY29udGludWVzKS4KICB2b2lkIGVuZExvb3AoSEJhc2ljQmxvY2sgbG9vcEVudHJ5LCBIQmFzaWNCbG9jayBicmFuY2hFeGl0QmxvY2ssCiAgICAgIEp1bXBIYW5kbGVyIGp1bXBIYW5kbGVyLCBMb2NhbHNIYW5kbGVyIHNhdmVkTG9jYWxzKSB7CiAgICBIQmFzaWNCbG9jayBsb29wRXhpdEJsb2NrID0gYnVpbGRlci5hZGROZXdCbG9jaygpOwoKICAgIExpc3Q8TG9jYWxzSGFuZGxlcj4gYnJlYWtIYW5kbGVycyA9IDxMb2NhbHNIYW5kbGVyPltdOwogICAgLy8gQ29sbGVjdCBkYXRhIGZvciB0aGUgc3VjY2Vzc29ycyBhbmQgdGhlIHBoaXMgYXQgZWFjaCBicmVhay4KICAgIGp1bXBIYW5kbGVyLmZvckVhY2hCcmVhaygoSEJyZWFrIGJyZWFrSW5zdHJ1Y3Rpb24sIExvY2Fsc0hhbmRsZXIgbG9jYWxzKSB7CiAgICAgIGJyZWFrSW5zdHJ1Y3Rpb24uYmxvY2suYWRkU3VjY2Vzc29yKGxvb3BFeGl0QmxvY2spOwogICAgICBicmVha0hhbmRsZXJzLmFkZChsb2NhbHMpOwogICAgfSk7CgogICAgLy8gVGhlIGV4aXQgYmxvY2sgaXMgYSBzdWNjZXNzb3Igb2YgdGhlIGxvb3AgY29uZGl0aW9uIGlmIGl0IGlzIHJlYWNoZWQuCiAgICAvLyBXZSBkb24ndCBhZGQgdGhlIHN1Y2Nlc3NvciBpbiB0aGUgY2FzZSBvZiBhIHdoaWxlL2ZvciBsb29wIHRoYXQgYWJvcnRzCiAgICAvLyBiZWNhdXNlIHRoZSBjYWxsZXIgb2YgZW5kTG9vcCB3aWxsIGJlIHdpcmluZyB1cCBhIHNwZWNpYWwgZW1wdHkgZWxzZQogICAgLy8gYmxvY2sgaW5zdGVhZC4KICAgIGlmIChicmFuY2hFeGl0QmxvY2sgIT0gbnVsbCkgewogICAgICBicmFuY2hFeGl0QmxvY2suYWRkU3VjY2Vzc29yKGxvb3BFeGl0QmxvY2spOwogICAgfQogICAgLy8gVXBkYXRlIHRoZSBwaGlzIGF0IHRoZSBsb29wIGVudHJ5IHdpdGggdGhlIGN1cnJlbnQgdmFsdWVzIG9mIGxvY2Fscy4KICAgIGJ1aWxkZXIubG9jYWxzSGFuZGxlci5lbmRMb29wKGxvb3BFbnRyeSk7CgogICAgLy8gU3RhcnQgZ2VuZXJhdGluZyBjb2RlIGZvciB0aGUgZXhpdCBibG9jay4KICAgIGJ1aWxkZXIub3Blbihsb29wRXhpdEJsb2NrKTsKCiAgICAvLyBDcmVhdGUgYSBuZXcgbG9jYWxzSGFuZGxlciBmb3IgdGhlIGxvb3BFeGl0QmxvY2sgd2l0aCB0aGUgY29ycmVjdCBwaGlzLgogICAgaWYgKCFicmVha0hhbmRsZXJzLmlzRW1wdHkpIHsKICAgICAgaWYgKGJyYW5jaEV4aXRCbG9jayAhPSBudWxsKSB7CiAgICAgICAgLy8gQWRkIHRoZSB2YWx1ZXMgb2YgdGhlIGxvY2FscyBhdCB0aGUgZW5kIG9mIHRoZSBjb25kaXRpb24gYmxvY2sgdG8KICAgICAgICAvLyB0aGUgcGhpcy4gIFRoZXNlIGFyZSB0aGUgdmFsdWVzIHRoYXQgZmxvdyB0byB0aGUgZXhpdCBpZiB0aGUKICAgICAgICAvLyBjb25kaXRpb24gZmFpbHMuCiAgICAgICAgYnJlYWtIYW5kbGVycy5hZGQoc2F2ZWRMb2NhbHMpOwogICAgICB9CiAgICAgIGJ1aWxkZXIubG9jYWxzSGFuZGxlciA9CiAgICAgICAgICBzYXZlZExvY2Fscy5tZXJnZU11bHRpcGxlKGJyZWFrSGFuZGxlcnMsIGxvb3BFeGl0QmxvY2spOwogICAgfSBlbHNlIHsKICAgICAgYnVpbGRlci5sb2NhbHNIYW5kbGVyID0gc2F2ZWRMb2NhbHM7CiAgICB9CiAgfQoKICAvLy8gRGV0ZXJtaW5lIHdoYXQga2luZCBvZiBsb29wIFtub2RlXSByZXByZXNlbnRzLgogIC8vLwogIC8vLyBUaGUgcmVzdWx0IGlzIG9uZSBvZiB0aGUga2luZHMgZGVmaW5lZCBpbiBbSExvb3BCbG9ja0luZm9ybWF0aW9uXS4KICBpbnQgbG9vcEtpbmQoaXIuVHJlZU5vZGUgbm9kZSk7CgogIC8vLyBDcmVhdGVzIGEgW0p1bXBIYW5kbGVyXSBmb3IgYSBzdGF0ZW1lbnQuIFRoZSBub2RlIG11c3QgYmUgYSBqdW1wCiAgLy8vIHRhcmdldC4gSWYgdGhlcmUgYXJlIG5vIGJyZWFrcyBvciBjb250aW51ZXMgdGFyZ2V0aW5nIHRoZSBzdGF0ZW1lbnQsCiAgLy8vIGEgc3BlY2lhbCAibnVsbCBoYW5kbGVyIiBpcyByZXR1cm5lZC4KICAvLy8KICAvLy8gW2lzTG9vcEp1bXBdIGlzIFs6dHJ1ZTpdIHdoZW4gdGhlIGp1bXAgaGFuZGxlciBpcyBmb3IgYSBsb29wLiBUaGlzIGlzIHVzZWQKICAvLy8gdG8gZGlzdGluZ3Vpc2ggdGhlIHN5bnRoZXNpemVkIGxvb3AgY3JlYXRlZCBmb3IgYSBzd2l0Y2ggc3RhdGVtZW50IHdpdGgKICAvLy8gY29udGludWUgc3RhdGVtZW50cyBmcm9tIHNpbXBsZSBzd2l0Y2ggc3RhdGVtZW50cy4KICBKdW1wSGFuZGxlciBjcmVhdGVKdW1wSGFuZGxlcihpci5UcmVlTm9kZSBub2RlLCBKdW1wVGFyZ2V0IGp1bXBUYXJnZXQsCiAgICAgIHtib29sIGlzTG9vcEp1bXB9KTsKfQoKLy8gVE9ETyhoZXQpOiBTaW5jZSBrZXJuZWwgc2ltcGxpZmllcyBsb29wIGJyZWFrcyBhbmQgY29udGludWVzLCB3ZSBzaG91bGQKLy8gcmV3cml0ZSB0aGUgbG9vcCBoYW5kbGVyIGZyb20gc2NyYXRjaCB0byBhY2NvdW50IGZvciB0aGUgc2ltcGxpZmllZCBzdHJ1Y3R1cmUKY2xhc3MgS2VybmVsTG9vcEhhbmRsZXIgZXh0ZW5kcyBMb29wSGFuZGxlciB7CiAgQG92ZXJyaWRlCiAgZmluYWwgS2VybmVsU3NhR3JhcGhCdWlsZGVyIGJ1aWxkZXI7CgogIEtlcm5lbExvb3BIYW5kbGVyKEtlcm5lbFNzYUdyYXBoQnVpbGRlciBidWlsZGVyKQogICAgICA6IHRoaXMuYnVpbGRlciA9IGJ1aWxkZXIsCiAgICAgICAgc3VwZXIoYnVpbGRlcik7CgogIEBvdmVycmlkZQogIEp1bXBIYW5kbGVyIGNyZWF0ZUp1bXBIYW5kbGVyKGlyLlRyZWVOb2RlIG5vZGUsIEp1bXBUYXJnZXQganVtcFRhcmdldCwKICAgICAgICAgIHtib29sIGlzTG9vcEp1bXB9KSA9PgogICAgICBidWlsZGVyLmNyZWF0ZUp1bXBIYW5kbGVyKG5vZGUsIGp1bXBUYXJnZXQsIGlzTG9vcEp1bXA6IGlzTG9vcEp1bXApOwoKICBAb3ZlcnJpZGUKICBpbnQgbG9vcEtpbmQoaXIuVHJlZU5vZGUgbm9kZSkgPT4gbm9kZS5hY2NlcHQobmV3IF9LZXJuZWxMb29wVHlwZVZpc2l0b3IoKSk7Cn0KCmNsYXNzIF9LZXJuZWxMb29wVHlwZVZpc2l0b3IgZXh0ZW5kcyBpci5WaXNpdG9yPGludD4gewogIEBvdmVycmlkZQogIGludCBkZWZhdWx0Tm9kZShpci5Ob2RlIG5vZGUpID0+IEhMb29wQmxvY2tJbmZvcm1hdGlvbi5OT1RfQV9MT09QOwoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRXaGlsZVN0YXRlbWVudChpci5XaGlsZVN0YXRlbWVudCBub2RlKSA9PgogICAgICBITG9vcEJsb2NrSW5mb3JtYXRpb24uV0hJTEVfTE9PUDsKCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0Rm9yU3RhdGVtZW50KGlyLkZvclN0YXRlbWVudCBub2RlKSA9PiBITG9vcEJsb2NrSW5mb3JtYXRpb24uRk9SX0xPT1A7CgogIEBvdmVycmlkZQogIGludCB2aXNpdERvU3RhdGVtZW50KGlyLkRvU3RhdGVtZW50IG5vZGUpID0+CiAgICAgIEhMb29wQmxvY2tJbmZvcm1hdGlvbi5ET19XSElMRV9MT09QOwoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRGb3JJblN0YXRlbWVudChpci5Gb3JJblN0YXRlbWVudCBub2RlKSA9PgogICAgICBITG9vcEJsb2NrSW5mb3JtYXRpb24uRk9SX0lOX0xPT1A7CgogIEBvdmVycmlkZQogIGludCB2aXNpdFN3aXRjaFN0YXRlbWVudChpci5Td2l0Y2hTdGF0ZW1lbnQgbm9kZSkgPT4KICAgICAgSExvb3BCbG9ja0luZm9ybWF0aW9uLlNXSVRDSF9DT05USU5VRV9MT09QOwp9CoFkAE5OPAEoATEhMSgBHhweFQEpHScBHQEyLwEwBjs9PhMUKR0ZIBUTLREWFCwRFBsTAUkBGCscHj0lFCRPBgEZQUEyOQE1LE0oPgFKSxhPARE4NCIBTQwBUC1RAR8BUB0RUFFQNwFAEks1JgoBHzUtCAEhHkwBOR8lKk4jGkYlM0YjGggBHEEBEAEjOi0zRAFJPig2OgFNAS4+Gjk8MTQxMR4BNiwNUSAaERJMCwlCGjUfNk8sRAE/PS0BQhBBTTE4OjwxMgE9LD4BRhMnID5NSzcnAUEBQDYuQCoMCAYZGQQBRElDSSJQAR4/KkgrHQE2GAQBFQYXUSo2QAZHBkhKUUoSQzw3ATtDTzohCAFNTkwWIzMGTC4BMSEBTyIlTUgcKAgeQw0rBgQBNQZJIgFHSywGUU45SRoCAUtRLgwnATMgGAEMSSBLAQxPAgE3DEUBDDUoAQxRAQwvKwEMNSkBDDcyAgEqcGFja2FnZTpjb21waWxlci9zcmMvc3NhL2xvb3BfaGFuZGxlci5kYXJ0OXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NzYS9zc2FfYnJhbmNoX2J1aWxkZXIuZGFydJ6lLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9pby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydCc7CgppbXBvcnQgJ2J1aWxkZXJfa2VybmVsLmRhcnQnOwppbXBvcnQgJ2xvY2Fsc19oYW5kbGVyLmRhcnQnOwppbXBvcnQgJ25vZGVzLmRhcnQnOwoKY2xhc3MgU3NhQnJhbmNoIHsKICBmaW5hbCBTc2FCcmFuY2hCdWlsZGVyIGJyYW5jaEJ1aWxkZXI7CiAgZmluYWwgSEJhc2ljQmxvY2sgYmxvY2s7CiAgTG9jYWxzSGFuZGxlciBzdGFydExvY2FsczsKICBMb2NhbHNIYW5kbGVyIGV4aXRMb2NhbHM7CiAgU3ViR3JhcGggZ3JhcGg7CgogIFNzYUJyYW5jaCh0aGlzLmJyYW5jaEJ1aWxkZXIpIDogYmxvY2sgPSBuZXcgSEJhc2ljQmxvY2soKTsKfQoKY2xhc3MgU3NhQnJhbmNoQnVpbGRlciB7CiAgZmluYWwgS2VybmVsU3NhR3JhcGhCdWlsZGVyIGJ1aWxkZXI7CiAgZmluYWwgU3Bhbm5hYmxlIGRpYWdub3N0aWNOb2RlOwoKICBTc2FCcmFuY2hCdWlsZGVyKHRoaXMuYnVpbGRlciwgW3RoaXMuZGlhZ25vc3RpY05vZGVdKTsKCiAgQWJzdHJhY3RWYWx1ZURvbWFpbiBnZXQgX2Fic3RyYWN0VmFsdWVEb21haW4gPT4KICAgICAgYnVpbGRlci5jbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICB2b2lkIGNoZWNrTm90QWJvcnRlZCgpIHsKICAgIGlmIChidWlsZGVyLmlzQWJvcnRlZCgpKSB7CiAgICAgIGZhaWxlZEF0KGRpYWdub3N0aWNOb2RlLCAiYWJvcnRlZCBjb250cm9sIGZsb3ciKTsKICAgIH0KICB9CgogIHZvaWQgYnVpbGRDb25kaXRpb24oCiAgICAgIHZvaWQgdmlzaXRDb25kaXRpb24oKSwKICAgICAgU3NhQnJhbmNoIGNvbmRpdGlvbkJyYW5jaCwKICAgICAgU3NhQnJhbmNoIHRoZW5CcmFuY2gsCiAgICAgIFNzYUJyYW5jaCBlbHNlQnJhbmNoLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgc3RhcnRCcmFuY2goY29uZGl0aW9uQnJhbmNoKTsKICAgIHZpc2l0Q29uZGl0aW9uKCk7CiAgICBjaGVja05vdEFib3J0ZWQoKTsKICAgIGFzc2VydChpZGVudGljYWwoYnVpbGRlci5jdXJyZW50LCBidWlsZGVyLmxhc3RPcGVuZWRCbG9jaykpOwogICAgSEluc3RydWN0aW9uIGNvbmRpdGlvblZhbHVlID0gYnVpbGRlci5wb3BCb29saWZpZWQoKTsKICAgIEhJZiBicmFuY2ggPSBuZXcgSElmKF9hYnN0cmFjdFZhbHVlRG9tYWluLCBjb25kaXRpb25WYWx1ZSkKICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogICAgSEJhc2ljQmxvY2sgY29uZGl0aW9uRXhpdEJsb2NrID0gYnVpbGRlci5jdXJyZW50OwogICAgYnVpbGRlci5jbG9zZShicmFuY2gpOwogICAgY29uZGl0aW9uQnJhbmNoLmV4aXRMb2NhbHMgPSBidWlsZGVyLmxvY2Fsc0hhbmRsZXI7CiAgICBjb25kaXRpb25FeGl0QmxvY2suYWRkU3VjY2Vzc29yKHRoZW5CcmFuY2guYmxvY2spOwogICAgY29uZGl0aW9uRXhpdEJsb2NrLmFkZFN1Y2Nlc3NvcihlbHNlQnJhbmNoLmJsb2NrKTsKICAgIGJvb2wgY29uZGl0aW9uQnJhbmNoTG9jYWxzQ2FuQmVSZXVzZWQgPQogICAgICAgIG1lcmdlTG9jYWxzKGNvbmRpdGlvbkJyYW5jaCwgdGhlbkJyYW5jaCwgbWF5UmV1c2VGcm9tTG9jYWxzOiB0cnVlKTsKICAgIG1lcmdlTG9jYWxzKGNvbmRpdGlvbkJyYW5jaCwgZWxzZUJyYW5jaCwKICAgICAgICBtYXlSZXVzZUZyb21Mb2NhbHM6IGNvbmRpdGlvbkJyYW5jaExvY2Fsc0NhbkJlUmV1c2VkKTsKCiAgICBjb25kaXRpb25CcmFuY2guZ3JhcGggPQogICAgICAgIG5ldyBTdWJFeHByZXNzaW9uKGNvbmRpdGlvbkJyYW5jaC5ibG9jaywgY29uZGl0aW9uRXhpdEJsb2NrKTsKICB9CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGxvY2FscyBvZiB0aGUgW2Zyb21CcmFuY2hdIG1heSBiZSByZXVzZWQuIEEgWzp0cnVlOl0KICAvLy8gcmV0dXJuIHZhbHVlIGltcGxpZXMgdGhhdCBbbWF5UmV1c2VGcm9tTG9jYWxzXSB3YXMgc2V0IHRvIFs6dHJ1ZTpdLgogIGJvb2wgbWVyZ2VMb2NhbHMoU3NhQnJhbmNoIGZyb21CcmFuY2gsIFNzYUJyYW5jaCB0b0JyYW5jaCwKICAgICAge2Jvb2wgbWF5UmV1c2VGcm9tTG9jYWxzfSkgewogICAgTG9jYWxzSGFuZGxlciBmcm9tTG9jYWxzID0gZnJvbUJyYW5jaC5leGl0TG9jYWxzOwogICAgaWYgKHRvQnJhbmNoLnN0YXJ0TG9jYWxzID09IG51bGwpIHsKICAgICAgaWYgKG1heVJldXNlRnJvbUxvY2FscykgewogICAgICAgIHRvQnJhbmNoLnN0YXJ0TG9jYWxzID0gZnJvbUxvY2FsczsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdG9CcmFuY2guc3RhcnRMb2NhbHMgPSBuZXcgTG9jYWxzSGFuZGxlci5mcm9tKGZyb21Mb2NhbHMpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB0b0JyYW5jaC5zdGFydExvY2Fscy5tZXJnZVdpdGgoZnJvbUxvY2FscywgdG9CcmFuY2guYmxvY2spOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CgogIHZvaWQgc3RhcnRCcmFuY2goU3NhQnJhbmNoIGJyYW5jaCkgewogICAgYnVpbGRlci5ncmFwaC5hZGRCbG9jayhicmFuY2guYmxvY2spOwogICAgYnVpbGRlci5sb2NhbHNIYW5kbGVyID0gYnJhbmNoLnN0YXJ0TG9jYWxzOwogICAgYnVpbGRlci5vcGVuKGJyYW5jaC5ibG9jayk7CiAgfQoKICBISW5zdHJ1Y3Rpb24gYnVpbGRCcmFuY2goU3NhQnJhbmNoIGJyYW5jaCwgdm9pZCB2aXNpdEJyYW5jaCgpLAogICAgICBTc2FCcmFuY2ggam9pbkJyYW5jaCwgYm9vbCBpc0V4cHJlc3Npb24pIHsKICAgIHN0YXJ0QnJhbmNoKGJyYW5jaCk7CiAgICB2aXNpdEJyYW5jaCgpOwogICAgYnJhbmNoLmdyYXBoID0gbmV3IFN1YkdyYXBoKGJyYW5jaC5ibG9jaywgYnVpbGRlci5sYXN0T3BlbmVkQmxvY2spOwogICAgYnJhbmNoLmV4aXRMb2NhbHMgPSBidWlsZGVyLmxvY2Fsc0hhbmRsZXI7CiAgICBpZiAoIWJ1aWxkZXIuaXNBYm9ydGVkKCkpIHsKICAgICAgYnVpbGRlci5nb3RvKGJ1aWxkZXIuY3VycmVudCwgam9pbkJyYW5jaC5ibG9jayk7CiAgICAgIG1lcmdlTG9jYWxzKGJyYW5jaCwgam9pbkJyYW5jaCwgbWF5UmV1c2VGcm9tTG9jYWxzOiB0cnVlKTsKICAgIH0KICAgIGlmIChpc0V4cHJlc3Npb24pIHsKICAgICAgY2hlY2tOb3RBYm9ydGVkKCk7CiAgICAgIHJldHVybiBidWlsZGVyLnBvcCgpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBoYW5kbGVJZih2b2lkIHZpc2l0Q29uZGl0aW9uKCksIHZvaWQgdmlzaXRUaGVuKCksIHZvaWQgdmlzaXRFbHNlKCksCiAgICAgIHtTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbn0pIHsKICAgIGlmICh2aXNpdEVsc2UgPT0gbnVsbCkgewogICAgICAvLyBNYWtlIHN1cmUgdG8gaGF2ZSBhbiBlbHNlIHBhcnQgdG8gYXZvaWQgYSBjcml0aWNhbCBlZGdlLiBBCiAgICAgIC8vIGNyaXRpY2FsIGVkZ2UgaXMgYW4gZWRnZSB0aGF0IGNvbm5lY3RzIGEgYmxvY2sgd2l0aCBtdWx0aXBsZQogICAgICAvLyBzdWNjZXNzb3JzIHRvIGEgYmxvY2sgd2l0aCBtdWx0aXBsZSBwcmVkZWNlc3NvcnMuIFdlIGF2b2lkCiAgICAgIC8vIHN1Y2ggZWRnZXMgYmVjYXVzZSB0aGV5IHByZXZlbnQgaW5zZXJ0aW5nIGNvcGllcyBkdXJpbmcgY29kZQogICAgICAvLyBnZW5lcmF0aW9uIG9mIHBoaSBpbnN0cnVjdGlvbnMuCiAgICAgIHZpc2l0RWxzZSA9ICgpIHt9OwogICAgfQoKICAgIF9oYW5kbGVEaWFtb25kQnJhbmNoKHZpc2l0Q29uZGl0aW9uLCB2aXNpdFRoZW4sIHZpc2l0RWxzZSwKICAgICAgICBpc0V4cHJlc3Npb246IGZhbHNlLCBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgaGFuZGxlQ29uZGl0aW9uYWwodm9pZCB2aXNpdENvbmRpdGlvbigpLCB2b2lkIHZpc2l0VGhlbigpLCB2b2lkIHZpc2l0RWxzZSgpKSB7CiAgICBhc3NlcnQodmlzaXRFbHNlICE9IG51bGwpOwogICAgX2hhbmRsZURpYW1vbmRCcmFuY2godmlzaXRDb25kaXRpb24sIHZpc2l0VGhlbiwgdmlzaXRFbHNlLAogICAgICAgIGlzRXhwcmVzc2lvbjogdHJ1ZSk7CiAgfQoKICBoYW5kbGVJZk51bGwodm9pZCBsZWZ0KCksIHZvaWQgcmlnaHQoKSkgewogICAgLy8geCA/PyB5IGlzIHRyYW5zZm9ybWVkIGludG86IHggPT0gbnVsbCA/IHkgOiB4CiAgICBISW5zdHJ1Y3Rpb24gbGVmdEV4cHJlc3Npb247CiAgICBoYW5kbGVDb25kaXRpb25hbCgoKSB7CiAgICAgIGxlZnQoKTsKICAgICAgbGVmdEV4cHJlc3Npb24gPSBidWlsZGVyLnBvcCgpOwogICAgICBidWlsZGVyLnB1c2hDaGVja051bGwobGVmdEV4cHJlc3Npb24pOwogICAgfSwgcmlnaHQsICgpID0+IGJ1aWxkZXIuc3RhY2suYWRkKGxlZnRFeHByZXNzaW9uKSk7CiAgfQoKICAvLy8gQ3JlYXRlcyB0aGUgZ3JhcGggZm9yICcmJicgb3IgJ3x8JyBvcGVyYXRvcnMuCiAgLy8vCiAgLy8vIHggJiYgeSBpcyB0cmFuc2Zvcm1lZCBpbnRvOgogIC8vLwogIC8vLyAgICAgdDAgPSBib29saWZ5KHgpOwogIC8vLyAgICAgaWYgKHQwKSB7CiAgLy8vICAgICAgIHQxID0gYm9vbGlmeSh5KTsKICAvLy8gICAgIH0KICAvLy8gICAgIHJlc3VsdCA9IHBoaSh0MSwgZmFsc2UpOwogIC8vLwogIC8vLyB4IHx8IHkgaXMgdHJhbnNmb3JtZWQgaW50bzoKICAvLy8KICAvLy8gICAgIHQwID0gYm9vbGlmeSh4KTsKICAvLy8gICAgIGlmIChub3QodDApKSB7CiAgLy8vICAgICAgIHQxID0gYm9vbGlmeSh5KTsKICAvLy8gICAgIH0KICAvLy8gICAgIHJlc3VsdCA9IHBoaSh0MSwgdHJ1ZSk7CiAgdm9pZCBoYW5kbGVMb2dpY2FsQmluYXJ5KAogICAgICB2b2lkIGxlZnQoKSwgdm9pZCByaWdodCgpLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAge2Jvb2wgaXNBbmR9KSB7CiAgICBISW5zdHJ1Y3Rpb24gYm9vbGlmaWVkTGVmdDsKICAgIEhJbnN0cnVjdGlvbiBib29saWZpZWRSaWdodDsKCiAgICB2b2lkIHZpc2l0Q29uZGl0aW9uKCkgewogICAgICBsZWZ0KCk7CiAgICAgIGJvb2xpZmllZExlZnQgPSBidWlsZGVyLnBvcEJvb2xpZmllZCgpOwogICAgICBidWlsZGVyLnN0YWNrLmFkZChib29saWZpZWRMZWZ0KTsKICAgICAgaWYgKCFpc0FuZCkgewogICAgICAgIGJ1aWxkZXIucHVzaChuZXcgSE5vdChidWlsZGVyLnBvcCgpLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSkKICAgICAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIHZpc2l0VGhlbigpIHsKICAgICAgcmlnaHQoKTsKICAgICAgYm9vbGlmaWVkUmlnaHQgPSBidWlsZGVyLnBvcEJvb2xpZmllZCgpOwogICAgfQoKICAgIGhhbmRsZUlmKHZpc2l0Q29uZGl0aW9uLCB2aXNpdFRoZW4sIG51bGwsCiAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIEhDb25zdGFudCBub3RJc0FuZCA9CiAgICAgICAgYnVpbGRlci5ncmFwaC5hZGRDb25zdGFudEJvb2woIWlzQW5kLCBidWlsZGVyLmNsb3NlZFdvcmxkKTsKICAgIEhQaGkgcmVzdWx0ID0gbmV3IEhQaGkubWFueUlucHV0cygKICAgICAgICBudWxsLAogICAgICAgIDxISW5zdHJ1Y3Rpb24+W2Jvb2xpZmllZFJpZ2h0LCBub3RJc0FuZF0sCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpCiAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgIGJ1aWxkZXIuY3VycmVudC5hZGRQaGkocmVzdWx0KTsKICAgIGJ1aWxkZXIuc3RhY2suYWRkKHJlc3VsdCk7CiAgfQoKICB2b2lkIF9oYW5kbGVEaWFtb25kQnJhbmNoKAogICAgICB2b2lkIHZpc2l0Q29uZGl0aW9uKCksIHZvaWQgdmlzaXRUaGVuKCksIHZvaWQgdmlzaXRFbHNlKCksCiAgICAgIHtib29sIGlzRXhwcmVzc2lvbiwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb259KSB7CiAgICBTc2FCcmFuY2ggY29uZGl0aW9uQnJhbmNoID0gbmV3IFNzYUJyYW5jaCh0aGlzKTsKICAgIFNzYUJyYW5jaCB0aGVuQnJhbmNoID0gbmV3IFNzYUJyYW5jaCh0aGlzKTsKICAgIFNzYUJyYW5jaCBlbHNlQnJhbmNoID0gbmV3IFNzYUJyYW5jaCh0aGlzKTsKICAgIFNzYUJyYW5jaCBqb2luQnJhbmNoID0gbmV3IFNzYUJyYW5jaCh0aGlzKTsKCiAgICBjb25kaXRpb25CcmFuY2guc3RhcnRMb2NhbHMgPSBidWlsZGVyLmxvY2Fsc0hhbmRsZXI7CiAgICBidWlsZGVyLmdvdG8oYnVpbGRlci5jdXJyZW50LCBjb25kaXRpb25CcmFuY2guYmxvY2spOwoKICAgIGJ1aWxkQ29uZGl0aW9uKHZpc2l0Q29uZGl0aW9uLCBjb25kaXRpb25CcmFuY2gsIHRoZW5CcmFuY2gsIGVsc2VCcmFuY2gsCiAgICAgICAgc291cmNlSW5mb3JtYXRpb24pOwogICAgSEluc3RydWN0aW9uIHRoZW5WYWx1ZSA9CiAgICAgICAgYnVpbGRCcmFuY2godGhlbkJyYW5jaCwgdmlzaXRUaGVuLCBqb2luQnJhbmNoLCBpc0V4cHJlc3Npb24pOwogICAgSEluc3RydWN0aW9uIGVsc2VWYWx1ZSA9CiAgICAgICAgYnVpbGRCcmFuY2goZWxzZUJyYW5jaCwgdmlzaXRFbHNlLCBqb2luQnJhbmNoLCBpc0V4cHJlc3Npb24pOwoKICAgIGlmIChpc0V4cHJlc3Npb24pIHsKICAgICAgYXNzZXJ0KHRoZW5WYWx1ZSAhPSBudWxsICYmIGVsc2VWYWx1ZSAhPSBudWxsKTsKICAgICAgSFBoaSBwaGkgPSBuZXcgSFBoaS5tYW55SW5wdXRzKG51bGwsIDxISW5zdHJ1Y3Rpb24+W3RoZW5WYWx1ZSwgZWxzZVZhbHVlXSwKICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKTsKICAgICAgam9pbkJyYW5jaC5ibG9jay5hZGRQaGkocGhpKTsKICAgICAgYnVpbGRlci5zdGFjay5hZGQocGhpKTsKICAgIH0KCiAgICBIQmFzaWNCbG9jayBqb2luQmxvY2s7CiAgICAvLyBJZiBhdCBsZWFzdCBvbmUgYnJhbmNoIGRpZCBub3QgYWJvcnQsIG9wZW4gdGhlIGpvaW5CcmFuY2guCiAgICBpZiAoIWpvaW5CcmFuY2guYmxvY2sucHJlZGVjZXNzb3JzLmlzRW1wdHkpIHsKICAgICAgc3RhcnRCcmFuY2goam9pbkJyYW5jaCk7CiAgICAgIGpvaW5CbG9jayA9IGpvaW5CcmFuY2guYmxvY2s7CiAgICB9CgogICAgSElmQmxvY2tJbmZvcm1hdGlvbiBpbmZvID0gbmV3IEhJZkJsb2NrSW5mb3JtYXRpb24oCiAgICAgICAgbmV3IEhTdWJFeHByZXNzaW9uQmxvY2tJbmZvcm1hdGlvbihjb25kaXRpb25CcmFuY2guZ3JhcGgpLAogICAgICAgIG5ldyBIU3ViR3JhcGhCbG9ja0luZm9ybWF0aW9uKHRoZW5CcmFuY2guZ3JhcGgpLAogICAgICAgIG5ldyBIU3ViR3JhcGhCbG9ja0luZm9ybWF0aW9uKGVsc2VCcmFuY2guZ3JhcGgpKTsKCiAgICBIQmFzaWNCbG9jayBjb25kaXRpb25TdGFydEJsb2NrID0gY29uZGl0aW9uQnJhbmNoLmJsb2NrOwogICAgY29uZGl0aW9uU3RhcnRCbG9jay5zZXRCbG9ja0Zsb3coaW5mbywgam9pbkJsb2NrKTsKICAgIFN1YkdyYXBoIGNvbmRpdGlvbkdyYXBoID0gY29uZGl0aW9uQnJhbmNoLmdyYXBoOwogICAgSElmIGJyYW5jaCA9IGNvbmRpdGlvbkdyYXBoLmVuZC5sYXN0OwogICAgYXNzZXJ0KGJyYW5jaCBpcyBISWYpOwogICAgYnJhbmNoLmJsb2NrSW5mb3JtYXRpb24gPSBjb25kaXRpb25TdGFydEJsb2NrLmJsb2NrRmxvdzsKICB9Cn0KgOwATk48ARkxKAEeHhUBEigbHRwSAT0CARknIgE5ATIvARsfOAYEARcdIRwcLSIWF0E6Py82Gzg3NyxMLT8BHEYEAU9KPSM2KCArFg9DFQgNQhMGBAEnKjAgBAFBMRkTSC8gN0EGGBkcBhEEAUYvHURGREYpGQYBP0QEAVEfPx0EASw1IRsOJi04BAE0BiIGGxQdDCMGIgYbGR0MIhxGFiAhARwOLigUTDQIBgEXDy8GAS4vGUQnDjIqLyQfBAEdQUI1MDAwATk6AUwcHUYdRgEYNlEtJB4GARtCMh8kBgE4Qzk6AT03NSobPQQCATBwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2Evc3NhX2JyYW5jaF9idWlsZGVyLmRhcnQ/c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc3NhL3N3aXRjaF9jb250aW51ZV9hbmFseXNpcy5kYXJ0jjIvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CgovLy8gSGVscGVyIGNsYXNzIHRoYXQgdHJhdmVyc2VzIGEga2VybmVsIEFTVCBzdWJ0cmVlIHRvIHNlZSBpZiBpdCBoYXMgYW55Ci8vLyBjb250aW51ZSBzdGF0ZW1lbnRzIGluIHRoZSBib2R5IG9mIGFueSBzd2l0Y2ggY2FzZXMgKGhhdmluZyBjb250aW51ZQovLy8gc3RhdGVtZW50cyByZXN1bHRzIGluIGEgbW9yZSBjb21wbGV4IGdlbmVyYXRlZCBjb2RlKS4KY2xhc3MgU3dpdGNoQ29udGludWVBbmFseXNpcyBleHRlbmRzIGlyLlZpc2l0b3I8Ym9vbD4gewogIFN3aXRjaENvbnRpbnVlQW5hbHlzaXMuXygpOwoKICBzdGF0aWMgYm9vbCBjb250YWluc0NvbnRpbnVlKGlyLlN0YXRlbWVudCBzd2l0Y2hDYXNlQm9keSkgewogICAgcmV0dXJuIHN3aXRjaENhc2VCb2R5LmFjY2VwdChuZXcgU3dpdGNoQ29udGludWVBbmFseXNpcy5fKCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdENvbnRpbnVlU3dpdGNoU3RhdGVtZW50KGlyLkNvbnRpbnVlU3dpdGNoU3RhdGVtZW50IGNvbnRpbnVlU3RtdCkgewogICAgLy8gVE9ETyhlZm9ydHVuYSk6IENoZWNrIHdoYXQgdGhlIHRhcmdldCBvZiB0aGlzIGNvbnRpbnVlIHN0YXRlbWVudCBhY3R1YWxseQogICAgLy8gSVMsIGJlY2F1c2UgZGVwZW5kaW5nIG9uIHdoZXJlIHRoZSBsYWJlbCBwb2ludHMgaWYgd2UgaGF2ZSBhIG5lc3RlZAogICAgLy8gc3dpdGNoIHN0YXRlbWVudCB3ZSBtaWdodCBiZSBhYmxlIHRvIG91dHB1dCBzaW1wbGVyIGNvZGUgKG5vdCB0aGUgY29tcGxleAogICAgLy8gc3dpdGNoIHN0YXRlbWVudCkuCiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRCbG9jayhpci5CbG9jayBibG9jaykgewogICAgZm9yIChpci5TdGF0ZW1lbnQgc3RhdGVtZW50IGluIGJsb2NrLnN0YXRlbWVudHMpIHsKICAgICAgaWYgKHN0YXRlbWVudC5hY2NlcHQodGhpcykpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdExhYmVsZWRTdGF0ZW1lbnQoaXIuTGFiZWxlZFN0YXRlbWVudCBzdGF0ZW1lbnQpIHsKICAgIHJldHVybiBzdGF0ZW1lbnQuYm9keS5hY2NlcHQodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RG9TdGF0ZW1lbnQoaXIuRG9TdGF0ZW1lbnQgZG9TdGF0ZW1lbnQpIHsKICAgIHJldHVybiBkb1N0YXRlbWVudC5ib2R5LmFjY2VwdCh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRGb3JTdGF0ZW1lbnQoaXIuRm9yU3RhdGVtZW50IGZvclN0YXRlbWVudCkgewogICAgcmV0dXJuIGZvclN0YXRlbWVudC5ib2R5LmFjY2VwdCh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRGb3JJblN0YXRlbWVudChpci5Gb3JJblN0YXRlbWVudCBmb3JJblN0YXRlbWVudCkgewogICAgcmV0dXJuIGZvckluU3RhdGVtZW50LmJvZHkuYWNjZXB0KHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFN3aXRjaFN0YXRlbWVudChpci5Td2l0Y2hTdGF0ZW1lbnQgc3dpdGNoU3RhdGVtZW50KSB7CiAgICBmb3IgKHZhciBzd2l0Y2hDYXNlIGluIHN3aXRjaFN0YXRlbWVudC5jYXNlcykgewogICAgICBpZiAoc3dpdGNoQ2FzZS5hY2NlcHQodGhpcykpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFN3aXRjaENhc2UoaXIuU3dpdGNoQ2FzZSBzd2l0Y2hDYXNlKSB7CiAgICByZXR1cm4gc3dpdGNoQ2FzZS5ib2R5LmFjY2VwdCh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRJZlN0YXRlbWVudChpci5JZlN0YXRlbWVudCBpZlN0YXRlbWVudCkgewogICAgcmV0dXJuIGlmU3RhdGVtZW50LnRoZW4uYWNjZXB0KHRoaXMpIHx8CiAgICAgICAgKGlmU3RhdGVtZW50Lm90aGVyd2lzZSAhPSBudWxsICYmIGlmU3RhdGVtZW50Lm90aGVyd2lzZS5hY2NlcHQodGhpcykpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFRyeUNhdGNoKGlyLlRyeUNhdGNoIHRyeUNhdGNoKSB7CiAgICBpZiAodHJ5Q2F0Y2guYm9keS5hY2NlcHQodGhpcykpIHsKICAgICAgZm9yICh2YXIgY2F0Y2hTdGF0ZW1lbnQgaW4gdHJ5Q2F0Y2guY2F0Y2hlcykgewogICAgICAgIGlmIChjYXRjaFN0YXRlbWVudC5hY2NlcHQodGhpcykpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFdoaWxlU3RhdGVtZW50KGlyLldoaWxlU3RhdGVtZW50IHN0YXRlbWVudCkgewogICAgcmV0dXJuIHN0YXRlbWVudC5ib2R5LmFjY2VwdCh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRDYXRjaChpci5DYXRjaCBjYXRjaFN0YXRlbWVudCkgewogICAgcmV0dXJuIGNhdGNoU3RhdGVtZW50LmJvZHkuYWNjZXB0KHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFRyeUZpbmFsbHkoaXIuVHJ5RmluYWxseSB0cnlGaW5hbGx5KSB7CiAgICByZXR1cm4gdHJ5RmluYWxseS5ib2R5LmFjY2VwdCh0aGlzKSAmJiB0cnlGaW5hbGx5LmZpbmFsaXplci5hY2NlcHQodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbihpci5GdW5jdGlvbkRlY2xhcmF0aW9uIGRlY2xhcmF0aW9uKSB7CiAgICByZXR1cm4gZGVjbGFyYXRpb24uZnVuY3Rpb24uYWNjZXB0KHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEZ1bmN0aW9uTm9kZShpci5GdW5jdGlvbk5vZGUgbm9kZSkgewogICAgcmV0dXJuIG5vZGUuYm9keS5hY2NlcHQodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGRlZmF1bHRTdGF0ZW1lbnQoaXIuU3RhdGVtZW50IG5vZGUpIHsKICAgIGlmIChub2RlIGlzIGlyLkV4cHJlc3Npb25TdGF0ZW1lbnQgfHwKICAgICAgICBub2RlIGlzIGlyLkVtcHR5U3RhdGVtZW50IHx8CiAgICAgICAgbm9kZSBpcyBpci5CcmVha1N0YXRlbWVudCB8fAogICAgICAgIG5vZGUgaXMgaXIuUmV0dXJuU3RhdGVtZW50IHx8CiAgICAgICAgbm9kZSBpcyBpci5Bc3NlcnRTdGF0ZW1lbnQgfHwKICAgICAgICBub2RlIGlzIGlyLllpZWxkU3RhdGVtZW50IHx8CiAgICAgICAgbm9kZSBpcyBpci5WYXJpYWJsZURlY2xhcmF0aW9uKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHRocm93ICdTdGF0ZW1lbnQgdHlwZSAke25vZGUucnVudGltZVR5cGV9IG5vdCBoYW5kbGVkIGluICcKICAgICAgICAnU3dpdGNoQ29udGludWVBbmFseXNpcyc7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGRlZmF1bHROb2RlKGlyLk5vZGUgbm9kZSkgPT4gZmFsc2U7Cn0KgIUATk48ASgBSkk6OB4BPkIEAQxPUUtRGhEEAQwkNyQVCAYSBAEMPigEAQw2KgQBDDkrBAEMPy0EAQxCNCUVCAYSBAEMMykEAQw2LE8EAQwtJjUrFwoIBhIEAQw6KAQBDC0tBAEMM04EAQxGLgQBDDEjBAEMLSolJSYmJSoUBj8iBAEMKwIBNnBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9zd2l0Y2hfY29udGludWVfYW5hbHlzaXMuZGFydDFzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pci9lbGVtZW50X21hcC5kYXJ0iygvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NvcmVfdHlwZXMuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9lbnZpcm9ubWVudC5kYXJ0JyBhcyBpcjsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9pbmRleGVkLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL29yZGVyZWRfdHlwZXNldC5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0JzsKCi8vLyBJbnRlcmZhY2UgdGhhdCB0cmFuc2xhdGVzIGJldHdlZW4gS2VybmVsIElSIG5vZGVzIGFuZCBlbnRpdGllcy4KLy8vCi8vLyBUaGlzIGludGVyZmFjZSBpcyB1c2VkIGludGVybmFsbHkgdG8gaW1wbGVtZW50IFtLZXJuZWxUb0VsZW1lbnRNYXBdIGluIHRoZQovLy8gZnJvbnRlbmQgYW5kIFtKc1RvRWxlbWVudE1hcF0gaW4gdGhlIGJhY2tlbmQuCmFic3RyYWN0IGNsYXNzIElyVG9FbGVtZW50TWFwIHsKICAvLy8gUmV0dXJucyB0aGUgW0RhcnRUeXBlXSBjb3JyZXNwb25kaW5nIHRvIFt0eXBlXS4KICBEYXJ0VHlwZSBnZXREYXJ0VHlwZShpci5EYXJ0VHlwZSB0eXBlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtNZW1iZXJFbnRpdHldIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1lbWJlciBbbm9kZV0uCiAgTWVtYmVyRW50aXR5IGdldE1lbWJlcihpci5NZW1iZXIgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbRnVuY3Rpb25FbnRpdHldIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb2NlZHVyZSBbbm9kZV0uCiAgRnVuY3Rpb25FbnRpdHkgZ2V0TWV0aG9kKGlyLlByb2NlZHVyZSBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtDb25zdHJ1Y3RvckVudGl0eV0gY29ycmVzcG9uZGluZyB0byB0aGUgZ2VuZXJhdGl2ZSBvciBmYWN0b3J5CiAgLy8vIGNvbnN0cnVjdG9yIFtub2RlXS4KICBDb25zdHJ1Y3RvckVudGl0eSBnZXRDb25zdHJ1Y3Rvcihpci5NZW1iZXIgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbRmllbGRFbnRpdHldIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpZWxkIFtub2RlXS4KICBGaWVsZEVudGl0eSBnZXRGaWVsZChpci5GaWVsZCBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtDbGFzc0VudGl0eV0gY29ycmVzcG9uZGluZyB0byB0aGUgY2xhc3MgW25vZGVdLgogIENsYXNzRW50aXR5IGdldENsYXNzKGlyLkNsYXNzIG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgW0Z1bmN0aW9uVHlwZV0gb2YgdGhlIFtub2RlXS4KICBGdW5jdGlvblR5cGUgZ2V0RnVuY3Rpb25UeXBlKGlyLkZ1bmN0aW9uTm9kZSBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtUeXBlZGVmVHlwZV0gY29ycmVzcG9uZGluZyB0byByYXcgdHlwZSBvZiB0aGUgdHlwZWRlZiBbbm9kZV0uCiAgVHlwZWRlZlR5cGUgZ2V0VHlwZWRlZlR5cGUoaXIuVHlwZWRlZiBub2RlKTsKCiAgLy8vIFJldHVybiB0aGUgW0ludGVyZmFjZVR5cGVdIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFtjbHNdIHdpdGggdGhlIGdpdmVuCiAgLy8vIFt0eXBlQXJndW1lbnRzXS4KICBJbnRlcmZhY2VUeXBlIGNyZWF0ZUludGVyZmFjZVR5cGUoCiAgICAgIGlyLkNsYXNzIGNscywgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyk7CgogIC8vLyBSZXR1cm5zIHRoZSBbQ2FsbFN0cnVjdHVyZV0gY29ycmVzcG9uZGluZyB0byB0aGUgW2FyZ3VtZW50c10uCiAgQ2FsbFN0cnVjdHVyZSBnZXRDYWxsU3RydWN0dXJlKGlyLkFyZ3VtZW50cyBhcmd1bWVudHMpOwoKICAvLy8gUmV0dXJucyB0aGUgW1R5cGVWYXJpYWJsZUVudGl0eV0gY29ycmVzcG9uZGluZyB0byB0aGUgdHlwZSBwYXJhbWV0ZXIKICAvLy8gW25vZGVdLgogIFR5cGVWYXJpYWJsZUVudGl0eSBnZXRUeXBlVmFyaWFibGUoaXIuVHlwZVBhcmFtZXRlciBub2RlKTsKCiAgQ29tbW9uRWxlbWVudHMgZ2V0IGNvbW1vbkVsZW1lbnRzOwogIERpYWdub3N0aWNSZXBvcnRlciBnZXQgcmVwb3J0ZXI7CiAgSW50ZXJmYWNlVHlwZSBnZXRUaGlzVHlwZShJbmRleGVkQ2xhc3MgY2xzKTsKICBJbnRlcmZhY2VUeXBlIGdldFN1cGVyVHlwZShJbmRleGVkQ2xhc3MgY2xzKTsKICBPcmRlcmVkVHlwZVNldCBnZXRPcmRlcmVkVHlwZVNldChJbmRleGVkQ2xhc3MgY2xzKTsKICBJdGVyYWJsZTxJbnRlcmZhY2VUeXBlPiBnZXRJbnRlcmZhY2VzKEluZGV4ZWRDbGFzcyBjbHMpOwogIEludGVyZmFjZVR5cGUgYXNJbnN0YW5jZU9mKEludGVyZmFjZVR5cGUgdHlwZSwgQ2xhc3NFbnRpdHkgY2xzKTsKICBEYXJ0VHlwZSBzdWJzdEJ5Q29udGV4dChEYXJ0VHlwZSB0eXBlLCBJbnRlcmZhY2VUeXBlIGNvbnRleHQpOwogIERhcnRUeXBlIGdldENhbGxUeXBlKEludGVyZmFjZVR5cGUgdHlwZSk7CiAgaW50IGdldEhpZXJhcmNoeURlcHRoKEluZGV4ZWRDbGFzcyBjbHMpOwogIERhcnRUeXBlIGdldFR5cGVWYXJpYWJsZUJvdW5kKEluZGV4ZWRUeXBlVmFyaWFibGUgdHlwZVZhcmlhYmxlKTsKfQpJAE5OPAEoNC81ARkiJCMhIioBRARPMiA2KgFFKgFKLwFRGjQBQycBQycBMDYBUS8BSxclNgFEOgFLDj0BJSMvMDY7Q0EsK0MCAShwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9lbGVtZW50X21hcC5kYXJ0MnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL29yZGVyZWRfdHlwZXNldC5kYXJ0p34vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBvcmRlcmVkX3R5cGVzZXQ7CgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JwogICAgc2hvdyBMaW5rLCBMaW5rQnVpbGRlciwgTGlua0VudHJ5OwoKaW1wb3J0ICdjb21tb24uZGFydCc7CmltcG9ydCAnZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwoKLy8vIEFuIG9yZGVyZWQgc2V0IG9mIHRoZSBzdXBlcnR5cGVzIG9mIGEgY2xhc3MuIFRoZSBzdXBlcnR5cGVzIG9mIGEgY2xhc3MgYXJlCi8vLyBvcmRlcmVkIGJ5IGRlY3JlYXNpbmcgaGllcmFyY2h5IGRlcHRoIGFuZCBieSB0aGUgb3JkZXIgdGhleSBhcmUgZXh0ZW5kZWQsCi8vLyBtaXhlZCBpbiwgb3IgaW1wbGVtZW50ZWQuCi8vLwovLy8gRm9yIHRoZXNlIGNsYXNzZXMKLy8vCi8vLyAgICAgY2xhc3MgQSB7fSAvLyBEZXB0aCA9IDEuCi8vLyAgICAgY2xhc3MgQiB7fSAvLyBEZXB0aCA9IDEuCi8vLyAgICAgY2xhc3MgQyBleHRlbmRzIEIgaW1wbGVtZW50cyBBIHt9IC8vIERlcHRoIDIuCi8vLwovLy8gdGhlIG9yZGVyZWQgc3VwZXJ0eXBlcyBhcmUKLy8vCi8vLyAgICAgQTogW0EsIE9iamVjdF0KLy8vICAgICBCOiBbQiwgT2JqZWN0XQovLy8gICAgIEM6IFtDLCBCLCBBLCBPYmplY3RdCmNsYXNzIE9yZGVyZWRUeXBlU2V0IHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW09yZGVyZWRUeXBlU2V0XSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ29yZGVyZWQtdHlwZS1zZXQnOwoKICBmaW5hbCBMaXN0PExpbms8SW50ZXJmYWNlVHlwZT4+IF9sZXZlbHM7CiAgZmluYWwgTGluazxJbnRlcmZhY2VUeXBlPiB0eXBlczsKCiAgT3JkZXJlZFR5cGVTZXQuaW50ZXJuYWwodGhpcy5fbGV2ZWxzLCB0aGlzLnR5cGVzKTsKCiAgLy8vIERlc2VyaWFsaXplcyBhIFtPcmRlcmVkVHlwZVNldF0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBPcmRlcmVkVHlwZVNldC5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1ha2UgdGhlIGRlc2VyaWFsaXplZCB0eXBlIHNldHMgc2hhcmUgdGhlaXIKICAgIC8vIGludGVybmFsIGxpbmtzIGxpa2UgdGhlIG9yaWdpbmFsIHR5cGUgc2V0cyBkbz8KICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaW50IHR5cGVzQ291bnQgPSBzb3VyY2UucmVhZEludCgpOwogICAgTGlua0J1aWxkZXI8SW50ZXJmYWNlVHlwZT4gdHlwZUxpbmtCdWlsZGVyID0KICAgICAgICBuZXcgTGlua0J1aWxkZXI8SW50ZXJmYWNlVHlwZT4oKTsKICAgIExpc3Q8TGluazxJbnRlcmZhY2VUeXBlPj4gbGlua3MgPSBbXTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXNDb3VudDsgaSsrKSB7CiAgICAgIGxpbmtzLmFkZCh0eXBlTGlua0J1aWxkZXIuYWRkTGFzdChzb3VyY2UucmVhZERhcnRUeXBlKCkpKTsKICAgIH0KICAgIExpbms8SW50ZXJmYWNlVHlwZT4gdHlwZXMgPQogICAgICAgIHR5cGVMaW5rQnVpbGRlci50b0xpbmsoY29uc3QgTGluazxJbnRlcmZhY2VUeXBlPigpKTsKICAgIGxpbmtzLmFkZChjb25zdCBMaW5rPEludGVyZmFjZVR5cGU+KCkpOwoKICAgIGludCBsZXZlbENvdW50ID0gc291cmNlLnJlYWRJbnQoKTsKICAgIExpc3Q8TGluazxJbnRlcmZhY2VUeXBlPj4gbGV2ZWxzID0KICAgICAgICBuZXcgTGlzdDxMaW5rPEludGVyZmFjZVR5cGU+PihsZXZlbENvdW50KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGV2ZWxDb3VudDsgaSsrKSB7CiAgICAgIGxldmVsc1tpXSA9IGxpbmtzW3NvdXJjZS5yZWFkSW50KCldOwogICAgfQogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBPcmRlcmVkVHlwZVNldC5pbnRlcm5hbChsZXZlbHMsIHR5cGVzKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW09yZGVyZWRUeXBlU2V0XSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgTGlzdDxJbnRlcmZhY2VUeXBlPiB0eXBlTGlzdCA9IHR5cGVzLnRvTGlzdCgpOwogICAgc2luay53cml0ZUludCh0eXBlTGlzdC5sZW5ndGgpOwogICAgZm9yIChJbnRlcmZhY2VUeXBlIHR5cGUgaW4gdHlwZUxpc3QpIHsKICAgICAgc2luay53cml0ZURhcnRUeXBlKHR5cGUpOwogICAgfQogICAgTGlzdDxpbnQ+IGxldmVsTGlzdCA9IFtdOwogICAgTGluazxJbnRlcmZhY2VUeXBlPiBsaW5rID0gdHlwZXM7CiAgICB3aGlsZSAobGluayAhPSBudWxsKSB7CiAgICAgIGludCBpbmRleCA9IF9sZXZlbHMuaW5kZXhPZihsaW5rKTsKICAgICAgaWYgKGluZGV4ICE9IC0xKSB7CiAgICAgICAgbGV2ZWxMaXN0LmFkZChpbmRleCk7CiAgICAgIH0KICAgICAgbGluayA9IGxpbmsudGFpbDsKICAgIH0KICAgIHNpbmsud3JpdGVJbnQobGV2ZWxMaXN0Lmxlbmd0aCk7CiAgICBmb3IgKGludCBsZXZlbCBpbiBsZXZlbExpc3QpIHsKICAgICAgc2luay53cml0ZUludChsZXZlbCk7CiAgICB9CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgZmFjdG9yeSBPcmRlcmVkVHlwZVNldC5zaW5nbGV0b24oSW50ZXJmYWNlVHlwZSB0eXBlKSB7CiAgICBMaW5rPEludGVyZmFjZVR5cGU+IHR5cGVzID0KICAgICAgICBuZXcgTGlua0VudHJ5PEludGVyZmFjZVR5cGU+KHR5cGUsIGNvbnN0IExpbms8SW50ZXJmYWNlVHlwZT4oKSk7CiAgICBMaXN0PExpbms8SW50ZXJmYWNlVHlwZT4+IGxpc3QgPSBuZXcgTGlzdDxMaW5rPEludGVyZmFjZVR5cGU+PigxKTsKICAgIGxpc3RbMF0gPSB0eXBlczsKICAgIHJldHVybiBuZXcgT3JkZXJlZFR5cGVTZXQuaW50ZXJuYWwobGlzdCwgdHlwZXMpOwogIH0KCiAgLy8vIENyZWF0ZXMgYSBuZXcgW09yZGVyZWRUeXBlU2V0XSBmb3IgW3R5cGVdIHdoZW4gaXQgZGlyZWN0bHkgZXh0ZW5kcyB0aGUKICAvLy8gY2xhc3Mgd2hpY2ggdGhpcyBzZXQgcmVwcmVzZW50cy4gVGhpcyBpcyBmb3IgaW5zdGFuY2UgdXNlZCB0byBjcmVhdGUgdGhlCiAgLy8vIHR5cGUgc2V0IGZvciBbQ2xvc3VyZUNsYXNzRWxlbWVudF0gd2hpY2ggZXh0ZW5kcyBbQ2xvc3VyZV0uCiAgT3JkZXJlZFR5cGVTZXQgZXh0ZW5kQ2xhc3MoSW50ZXJmYWNlVHlwZSB0eXBlKSB7CiAgICBhc3NlcnQoCiAgICAgICAgdHlwZXMuaGVhZC50cmVhdEFzUmF3LAogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICB0eXBlLmVsZW1lbnQsCiAgICAgICAgICAgICdDYW5ub3QgZXh0ZW5kIGdlbmVyaWMgY2xhc3MgJHt0eXBlcy5oZWFkfSB1c2luZyAnCiAgICAgICAgICAgICdPcmRlcmVkVHlwZVNldC5leHRlbmRDbGFzcycpKTsKICAgIExpbms8SW50ZXJmYWNlVHlwZT4gZXh0ZW5kZWRUeXBlcyA9CiAgICAgICAgbmV3IExpbmtFbnRyeTxJbnRlcmZhY2VUeXBlPih0eXBlLCB0eXBlcyk7CiAgICBMaXN0PExpbms8SW50ZXJmYWNlVHlwZT4+IGxpc3QgPSBuZXcgTGlzdDxMaW5rPEludGVyZmFjZVR5cGU+PihsZXZlbHMgKyAxKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGV2ZWxzOyBpKyspIHsKICAgICAgbGlzdFtpXSA9IF9sZXZlbHNbaV07CiAgICB9CiAgICBsaXN0W2xldmVsc10gPSBleHRlbmRlZFR5cGVzOwogICAgcmV0dXJuIG5ldyBPcmRlcmVkVHlwZVNldC5pbnRlcm5hbChsaXN0LCBleHRlbmRlZFR5cGVzKTsKICB9CgogIExpbms8SW50ZXJmYWNlVHlwZT4gZ2V0IHN1cGVydHlwZXMgPT4gdHlwZXMudGFpbDsKCiAgaW50IGdldCBsZXZlbHMgPT4gX2xldmVscy5sZW5ndGg7CgogIGludCBnZXQgbWF4RGVwdGggPT4gbGV2ZWxzIC0gMTsKCiAgTGluazxJbnRlcmZhY2VUeXBlPiBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IGxldmVscykgewogICAgICByZXR1cm4gX2xldmVsc1tpbmRleF07CiAgICB9CiAgICByZXR1cm4gY29uc3QgTGluazxJbnRlcmZhY2VUeXBlPigpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIG9mZnNldHMgaW50byBbdHlwZXNdIGF0IHdoaWNoIGVhY2ggbGV2ZWwgYmVnaW5zLgogIExpc3Q8aW50PiBnZXQgbGV2ZWxPZmZzZXRzIHsKICAgIExpc3Q8aW50PiBvZmZzZXRzID0gbmV3IExpc3QuZmlsbGVkKGxldmVscywgLTEpOwogICAgaW50IG9mZnNldCA9IDA7CiAgICBMaW5rPEludGVyZmFjZVR5cGU+IHBvaW50ZXIgPSB0eXBlczsKICAgIGZvciAoaW50IGRlcHRoID0gbWF4RGVwdGg7IGRlcHRoID49IDA7IGRlcHRoLS0pIHsKICAgICAgd2hpbGUgKCFpZGVudGljYWwocG9pbnRlciwgX2xldmVsc1tkZXB0aF0pKSB7CiAgICAgICAgcG9pbnRlciA9IHBvaW50ZXIudGFpbDsKICAgICAgICBvZmZzZXQrKzsKICAgICAgfQogICAgICBvZmZzZXRzW2RlcHRoXSA9IG9mZnNldDsKICAgIH0KICAgIHJldHVybiBvZmZzZXRzOwogIH0KCiAgdm9pZCBmb3JFYWNoKGludCBsZXZlbCwgdm9pZCBmKEludGVyZmFjZVR5cGUgdHlwZSkpIHsKICAgIGlmIChsZXZlbCA8IGxldmVscykgewogICAgICBMaW5rPEludGVyZmFjZVR5cGU+IHBvaW50ZXIgPSBfbGV2ZWxzW2xldmVsXTsKICAgICAgTGluazxJbnRlcmZhY2VUeXBlPiBlbmQgPQogICAgICAgICAgbGV2ZWwgPiAwID8gX2xldmVsc1tsZXZlbCAtIDFdIDogY29uc3QgTGluazxJbnRlcmZhY2VUeXBlPigpOwogICAgICAvLyBUT0RPKGhldCk6IGNoZWNraW5nIGBpc05vdEVtcHR5YCBzaG91bGQgYmUgdW5uZWNlc3NhcnksIHJlbW92ZSB3aGVuCiAgICAgIC8vIGNvbnN0YW50cyBhcmUgcHJvcGVybHkgY2Fub25pY2FsaXplZAogICAgICB3aGlsZSAocG9pbnRlci5pc05vdEVtcHR5ICYmICFpZGVudGljYWwocG9pbnRlciwgZW5kKSkgewogICAgICAgIGYocG9pbnRlci5oZWFkKTsKICAgICAgICBwb2ludGVyID0gcG9pbnRlci50YWlsOwogICAgICB9CiAgICB9CiAgfQoKICBJbnRlcmZhY2VUeXBlIGFzSW5zdGFuY2VPZihDbGFzc0VudGl0eSBjbHMsIGludCBoaWVyYXJjaHlEZXB0aCkgewogICAgaW50IGxldmVsID0gaGllcmFyY2h5RGVwdGg7CiAgICBpZiAobGV2ZWwgPCBsZXZlbHMpIHsKICAgICAgTGluazxJbnRlcmZhY2VUeXBlPiBwb2ludGVyID0gX2xldmVsc1tsZXZlbF07CiAgICAgIExpbms8SW50ZXJmYWNlVHlwZT4gZW5kID0KICAgICAgICAgIGxldmVsID4gMCA/IF9sZXZlbHNbbGV2ZWwgLSAxXSA6IGNvbnN0IExpbms8SW50ZXJmYWNlVHlwZT4oKTsKICAgICAgLy8gVE9ETyhoZXQpOiBjaGVja2luZyBgaXNOb3RFbXB0eWAgc2hvdWxkIGJlIHVubmVjZXNzYXJ5LCByZW1vdmUgd2hlbgogICAgICAvLyBjb25zdGFudHMgYXJlIHByb3Blcmx5IGNhbm9uaWNhbGl6ZWQKICAgICAgd2hpbGUgKHBvaW50ZXIuaXNOb3RFbXB0eSAmJiAhaWRlbnRpY2FsKHBvaW50ZXIsIGVuZCkpIHsKICAgICAgICBpZiAoY2xzID09IHBvaW50ZXIuaGVhZC5lbGVtZW50KSB7CiAgICAgICAgICByZXR1cm4gcG9pbnRlci5oZWFkOwogICAgICAgIH0KICAgICAgICBwb2ludGVyID0gcG9pbnRlci50YWlsOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IHR5cGVzLnRvU3RyaW5nKCk7Cn0KCi8vLyBCdWlsZGVyIGZvciBjcmVhdGlvbiBhbiBvcmRlcmVkIHNldCBvZiB0aGUgc3VwZXJ0eXBlcyBvZiBhIGNsYXNzLiBUaGUKLy8vIHN1cGVydHlwZXMgYXJlIG9yZGVyZWQgYnkgZGVjcmVhc2luZyBoaWVyYXJjaHkgZGVwdGggYW5kIGJ5IHRoZSBvcmRlciB0aGV5Ci8vLyBhcmUgZXh0ZW5kZWQsIG1peGVkIGluLCBvciBpbXBsZW1lbnRlZC4KLy8vCi8vLyBGb3IgdGhlc2UgY2xhc3NlcwovLy8KLy8vICAgICBjbGFzcyBBIHt9IC8vIERlcHRoID0gMS4KLy8vICAgICBjbGFzcyBCIHt9IC8vIERlcHRoID0gMS4KLy8vICAgICBjbGFzcyBDIGV4dGVuZHMgQiBpbXBsZW1lbnRzIEEge30gLy8gRGVwdGggMi4KLy8vCi8vLyB0aGUgb3JkZXJlZCBzdXBlcnR5cGVzIGFyZQovLy8KLy8vICAgICBBOiBbQSwgT2JqZWN0XQovLy8gICAgIEI6IFtCLCBPYmplY3RdCi8vLyAgICAgQzogW0MsIEIsIEEsIE9iamVjdF0KYWJzdHJhY3QgY2xhc3MgT3JkZXJlZFR5cGVTZXRCdWlsZGVyIHsKICBPcmRlcmVkVHlwZVNldCBjcmVhdGVPcmRlcmVkVHlwZVNldCgKICAgICAgSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUsIExpbms8RGFydFR5cGU+IGludGVyZmFjZXMpOwp9CgphYnN0cmFjdCBjbGFzcyBPcmRlcmVkVHlwZVNldEJ1aWxkZXJCYXNlIGltcGxlbWVudHMgT3JkZXJlZFR5cGVTZXRCdWlsZGVyIHsKICBNYXA8aW50LCBMaW5rRW50cnk8SW50ZXJmYWNlVHlwZT4+IG1hcCA9CiAgICAgIG5ldyBNYXA8aW50LCBMaW5rRW50cnk8SW50ZXJmYWNlVHlwZT4+KCk7CiAgaW50IG1heERlcHRoID0gLTE7CgogIGZpbmFsIENsYXNzRW50aXR5IGNsczsKCiAgT3JkZXJlZFR5cGVTZXRCdWlsZGVyQmFzZSh0aGlzLmNscyk7CgogIEludGVyZmFjZVR5cGUgZ2V0VGhpc1R5cGUoY292YXJpYW50IENsYXNzRW50aXR5IGNscyk7CiAgSW50ZXJmYWNlVHlwZSBzdWJzdEJ5Q29udGV4dCgKICAgICAgY292YXJpYW50IEludGVyZmFjZVR5cGUgdHlwZSwgY292YXJpYW50IEludGVyZmFjZVR5cGUgY29udGV4dCk7CiAgaW50IGdldEhpZXJhcmNoeURlcHRoKGNvdmFyaWFudCBDbGFzc0VudGl0eSBjbHMpOwogIE9yZGVyZWRUeXBlU2V0IGdldE9yZGVyZWRUeXBlU2V0KGNvdmFyaWFudCBDbGFzc0VudGl0eSBjbHMpOwoKICBAb3ZlcnJpZGUKICBPcmRlcmVkVHlwZVNldCBjcmVhdGVPcmRlcmVkVHlwZVNldCgKICAgICAgSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUsIExpbms8RGFydFR5cGU+IGludGVyZmFjZXMpIHsKICAgIC8vIFRPRE8oMTUyOTYpOiBDb2xsYXBzZSB0aGVzZSBpdGVyYXRpb25zIHRvIG9uZSB3aGVuIHRoZSBvcmRlciBpcyBub3QKICAgIC8vIG5lZWRlZC4KICAgIGFkZChzdXBlcnR5cGUpOwogICAgZm9yIChMaW5rPERhcnRUeXBlPiBsaW5rID0gaW50ZXJmYWNlczsgIWxpbmsuaXNFbXB0eTsgbGluayA9IGxpbmsudGFpbCkgewogICAgICBhZGQobGluay5oZWFkKTsKICAgIH0KCiAgICBfYWRkQWxsU3VwZXJ0eXBlcyhzdXBlcnR5cGUpOwogICAgZm9yIChMaW5rPERhcnRUeXBlPiBsaW5rID0gaW50ZXJmYWNlczsgIWxpbmsuaXNFbXB0eTsgbGluayA9IGxpbmsudGFpbCkgewogICAgICBfYWRkQWxsU3VwZXJ0eXBlcyhsaW5rLmhlYWQpOwogICAgfQogICAgYWRkKGdldFRoaXNUeXBlKGNscykpOwogICAgcmV0dXJuIHRvVHlwZVNldCgpOwogIH0KCiAgLy8vIEFkZHMgW3R5cGVdIGFuZCBhbGwgc3VwZXJ0eXBlcyBvZiBbdHlwZV0gdG8gW2FsbFN1cGVydHlwZXNdIHdoaWxlCiAgLy8vIHN1YnN0aXR1dGluZyB0eXBlIHZhcmlhYmxlcy4KICB2b2lkIF9hZGRBbGxTdXBlcnR5cGVzKEludGVyZmFjZVR5cGUgdHlwZSkgewogICAgQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50ID0gdHlwZS5lbGVtZW50OwogICAgTGluazxJbnRlcmZhY2VUeXBlPiBzdXBlcnR5cGVzID0gZ2V0T3JkZXJlZFR5cGVTZXQoY2xhc3NFbGVtZW50KS5zdXBlcnR5cGVzOwogICAgYXNzZXJ0KAogICAgICAgIHN1cGVydHlwZXMgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgY2xzLAogICAgICAgICAgICAiU3VwZXJ0eXBlcyBub3QgY29tcHV0ZWQgb24gJGNsYXNzRWxlbWVudCAiCiAgICAgICAgICAgICJkdXJpbmcgcmVzb2x1dGlvbiBvZiAkY2xzIikpOwogICAgd2hpbGUgKCFzdXBlcnR5cGVzLmlzRW1wdHkpIHsKICAgICAgSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUgPSBzdXBlcnR5cGVzLmhlYWQ7CiAgICAgIGFkZChzdWJzdEJ5Q29udGV4dChzdXBlcnR5cGUsIHR5cGUpKTsKICAgICAgc3VwZXJ0eXBlcyA9IHN1cGVydHlwZXMudGFpbDsKICAgIH0KICB9CgogIHZvaWQgYWRkKEludGVyZmFjZVR5cGUgdHlwZSkgewogICAgaWYgKHR5cGUuZWxlbWVudCA9PSBjbHMpIHsKICAgICAgX2FkZEF0RGVwdGgodHlwZSwgbWF4RGVwdGggKyAxKTsKICAgIH0gZWxzZSB7CiAgICAgIF9hZGRBdERlcHRoKHR5cGUsIGdldEhpZXJhcmNoeURlcHRoKHR5cGUuZWxlbWVudCkpOwogICAgfQogIH0KCiAgdm9pZCBfYWRkQXREZXB0aChJbnRlcmZhY2VUeXBlIHR5cGUsIGludCBkZXB0aCkgewogICAgTGlua0VudHJ5PEludGVyZmFjZVR5cGU+IHByZXYgPSBudWxsOwogICAgTGlua0VudHJ5PEludGVyZmFjZVR5cGU+IGxpbmsgPSBtYXBbZGVwdGhdOwogICAgd2hpbGUgKGxpbmsgIT0gbnVsbCkgewogICAgICBJbnRlcmZhY2VUeXBlIGV4aXN0aW5nVHlwZSA9IGxpbmsuaGVhZDsKICAgICAgaWYgKGV4aXN0aW5nVHlwZSA9PSB0eXBlKSByZXR1cm47CiAgICAgIGlmIChleGlzdGluZ1R5cGUuZWxlbWVudCA9PSB0eXBlLmVsZW1lbnQpIHsKICAgICAgICBhc3NlcnQoZmFsc2UsIGZhaWxlZEF0KGNscywgJ0ludmFsaWQgb3JkZXJlZCB0eXBlc2V0IGZvciAkY2xzJykpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBwcmV2ID0gbGluazsKICAgICAgbGluayA9IGxpbmsudGFpbDsKICAgIH0KICAgIExpbmtFbnRyeTxJbnRlcmZhY2VUeXBlPiBuZXh0ID0gbmV3IExpbmtFbnRyeTxJbnRlcmZhY2VUeXBlPih0eXBlKTsKICAgIG5leHQudGFpbCA9IG51bGw7CiAgICBpZiAocHJldiA9PSBudWxsKSB7CiAgICAgIG1hcFtkZXB0aF0gPSBuZXh0OwogICAgfSBlbHNlIHsKICAgICAgcHJldi50YWlsID0gbmV4dDsKICAgIH0KICAgIGlmIChkZXB0aCA+IG1heERlcHRoKSB7CiAgICAgIG1heERlcHRoID0gZGVwdGg7CiAgICB9CiAgfQoKICBPcmRlcmVkVHlwZVNldCB0b1R5cGVTZXQoKSB7CiAgICBMaXN0PExpbms8SW50ZXJmYWNlVHlwZT4+IGxldmVscyA9CiAgICAgICAgbmV3IExpc3Q8TGluazxJbnRlcmZhY2VUeXBlPj4obWF4RGVwdGggKyAxKTsKICAgIGlmIChtYXhEZXB0aCA8IDApIHsKICAgICAgcmV0dXJuIG5ldyBPcmRlcmVkVHlwZVNldC5pbnRlcm5hbChsZXZlbHMsIGNvbnN0IExpbms8SW50ZXJmYWNlVHlwZT4oKSk7CiAgICB9CiAgICBMaW5rPEludGVyZmFjZVR5cGU+IG5leHQgPSBjb25zdCBMaW5rPEludGVyZmFjZVR5cGU+KCk7CiAgICBmb3IgKGludCBkZXB0aCA9IDA7IGRlcHRoIDw9IG1heERlcHRoOyBkZXB0aCsrKSB7CiAgICAgIExpbmtFbnRyeTxJbnRlcmZhY2VUeXBlPiBmaXJzdCA9IG1hcFtkZXB0aF07CiAgICAgIGlmIChmaXJzdCA9PSBudWxsKSB7CiAgICAgICAgbGV2ZWxzW2RlcHRoXSA9IG5leHQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbGV2ZWxzW2RlcHRoXSA9IGZpcnN0OwogICAgICAgIExpbmtFbnRyeTxJbnRlcmZhY2VUeXBlPiBsYXN0ID0gZmlyc3Q7CiAgICAgICAgd2hpbGUgKGxhc3QudGFpbCAhPSBudWxsKSB7CiAgICAgICAgICBsYXN0ID0gbGFzdC50YWlsOwogICAgICAgIH0KICAgICAgICBsYXN0LnRhaWwgPSBuZXh0OwogICAgICAgIG5leHQgPSBmaXJzdDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBPcmRlcmVkVHlwZVNldC5pbnRlcm5hbChsZXZlbHMsIGxldmVscy5sYXN0KTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGZvciAoaW50IGRlcHRoID0gMDsgZGVwdGggPD0gbWF4RGVwdGg7IGRlcHRoKyspIHsKICAgICAgc2Iud3JpdGUoJyRkZXB0aDogJyk7CiAgICAgIExpbmtFbnRyeTxJbnRlcmZhY2VUeXBlPiBmaXJzdCA9IG1hcFtkZXB0aF07CiAgICAgIGZpcnN0LnByaW50T24oc2IsICIsICIpOwogICAgICBzYi53cml0ZSgnXG4nKTsKICAgIH0KICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQqBQwBOTjwBGQE5JwEWIR4rAU9OHgQWBCEhNgQfBBcXHRdIHTABKyMBNQE8QUg2FycxKiorQQYgPSwBJyczKysGFTcEATIoFTMkKyAGHiYbKRkeCBgGJSMcBhMEATkgSUcVNQQBTU9CMwwfEho/LCgzUCccBiI9BAE0ASQBIgEvGh0GKAQBQx81FCk2NCASCB8GFAQBOBo0IEhNLj8ZIAgGBAFEIBo0IEhNLj8rHwogCAYRBAEMKQIBSk8sBBYEISE2BB8EFxcdJyc7AgFMKzAVARkBJwE4IEY0PwEMJzxLDxROFgYBIk4kBhsYBAFIIy8tUQwcEhE4KyIxLCQGBAEhHycNOgYEATQqMBsuKDJKEAgTGAZIFhgZDRgGHBgGBAEfJzUYTwY8NjMbHg8fLyQcChoWCAY9BAEMFio2HDMfFgYaBAIBKXBhY2thZ2U6Y29tcGlsZXIvc3JjL29yZGVyZWRfdHlwZXNldC5kYXJ0OXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2NvbXBpbGVfdGltZV9jb25zdGFudHMuZGFydIQ0Ly8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5jb21waWxlX3RpbWVfY29uc3RhbnRfZXZhbHVhdG9yOwoKaW1wb3J0ICdjb21tb24vdGFza3MuZGFydCcgc2hvdyBDb21waWxlclRhc2ssIE1lYXN1cmVyOwppbXBvcnQgJ2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwoKLy8vIEEgW0NvbnN0YW50RW52aXJvbm1lbnRdIHByb3ZpZGVzIGFjY2VzcyBmb3IgY29uc3RhbnRzIGNvbXBpbGVkIGZvciB2YXJpYWJsZQovLy8gaW5pdGlhbGl6ZXJzLgphYnN0cmFjdCBjbGFzcyBDb25zdGFudEVudmlyb25tZW50IHt9CgovLy8gQSBbQmFja2VuZENvbnN0YW50RW52aXJvbm1lbnRdIHByb3ZpZGVzIGFjY2VzcyB0byBjb25zdGFudHMgbmVlZGVkIGZvcgovLy8gYmFja2VuZCBpbXBsZW1lbnRhdGlvbi4KYWJzdHJhY3QgY2xhc3MgQmFja2VuZENvbnN0YW50RW52aXJvbm1lbnQgZXh0ZW5kcyBDb25zdGFudEVudmlyb25tZW50IHsKICAvLy8gUmVnaXN0ZXIgdGhhdCBbZWxlbWVudF0gbmVlZHMgbGF6eSBpbml0aWFsaXphdGlvbi4KICB2b2lkIHJlZ2lzdGVyTGF6eVN0YXRpYyhGaWVsZEVudGl0eSBlbGVtZW50KTsKfQoKLy8vIEludGVyZmFjZSBmb3IgdGhlIHRhc2sgdGhhdCBjb21waWxlcyB0aGUgY29uc3RhbnQgZW52aXJvbm1lbnRzIGZvciB0aGUKLy8vIGZyb250ZW5kIGFuZCBiYWNrZW5kIGludGVycHJldGF0aW9uIG9mIGNvbXBpbGUtdGltZSBjb25zdGFudHMuCmFic3RyYWN0IGNsYXNzIENvbnN0YW50Q29tcGlsZXJUYXNrIGV4dGVuZHMgQ29tcGlsZXJUYXNrCiAgICBpbXBsZW1lbnRzIENvbnN0YW50RW52aXJvbm1lbnQgewogIENvbnN0YW50Q29tcGlsZXJUYXNrKE1lYXN1cmVyIG1lYXN1cmVyKSA6IHN1cGVyKG1lYXN1cmVyKTsKfQocAE5OPAExATghAVASJgFLHEg5MAIBS0M5JT0CATBwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb21waWxlX3RpbWVfY29uc3RhbnRzLmRhcnQ4c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaXIvY2FjaGVkX3N0YXRpY190eXBlLmRhcnSKUy8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbGFzc19oaWVyYXJjaHkuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2FsZ2VicmEuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9lbnZpcm9ubWVudC5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdzdGF0aWNfdHlwZV9iYXNlLmRhcnQnOwppbXBvcnQgJ3N0YXRpY190eXBlX2NhY2hlLmRhcnQnOwppbXBvcnQgJ3N0YXRpY190eXBlX3Byb3ZpZGVyLmRhcnQnOwoKLy8vIENsYXNzIHRoYXQgcHJvdmlkZXMgdGhlIHN0YXRpYyB0eXBlIG9mIGV4cHJlc3Npb24gdXNpbmcgdGhlIHZpc2l0b3IgcGF0dGVybgovLy8gYW5kIGEgcHJlY29tcHV0ZWQgY2FjaGUgZm9yIGNvbXBsZXggZXhwcmVzc2lvbiB0eXBlLgpjbGFzcyBDYWNoZWRTdGF0aWNUeXBlIGV4dGVuZHMgU3RhdGljVHlwZUJhc2UgaW1wbGVtZW50cyBTdGF0aWNUeXBlUHJvdmlkZXIgewogIGZpbmFsIFN0YXRpY1R5cGVDYWNoZSBfY2FjaGU7CgogIEBvdmVycmlkZQogIGZpbmFsIFRoaXNJbnRlcmZhY2VUeXBlIHRoaXNUeXBlOwoKICBDYWNoZWRTdGF0aWNUeXBlKAogICAgICBpci5UeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50LCB0aGlzLl9jYWNoZSwgdGhpcy50aGlzVHlwZSkKICAgICAgOiBzdXBlcih0eXBlRW52aXJvbm1lbnQpOwoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKGlyLkV4cHJlc3Npb24gbm9kZSkgewogICAgaXIuRGFydFR5cGUgdHlwZSA9IG5vZGUuYWNjZXB0KHRoaXMpOwogICAgYXNzZXJ0KHR5cGUgIT0gbnVsbCwgIk5vIHN0YXRpYyB0eXBlIGZvdW5kIGZvciAke25vZGUucnVudGltZVR5cGV9LiIpOwogICAgcmV0dXJuIHR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSBnZXRGb3JJbkl0ZXJhdG9yVHlwZShpci5Gb3JJblN0YXRlbWVudCBub2RlKSB7CiAgICBpci5EYXJ0VHlwZSB0eXBlID0gX2NhY2hlLmdldEZvckluSXRlcmF0b3JUeXBlKG5vZGUpOwogICAgYXNzZXJ0KHR5cGUgIT0gbnVsbCwgIk5vIGZvci1pbiBpdGVyYXRvciB0eXBlIGZvdW5kIGZvciAke25vZGV9LiIpOwogICAgcmV0dXJuIHR5cGU7CiAgfQoKICBpci5EYXJ0VHlwZSBfZ2V0U3RhdGljVHlwZShpci5FeHByZXNzaW9uIG5vZGUpIHsKICAgIGlyLkRhcnRUeXBlIHR5cGUgPSBfY2FjaGVbbm9kZV07CiAgICBhc3NlcnQodHlwZSAhPSBudWxsLCAiTm8gc3RhdGljIHR5cGUgY2FjaGVkIGZvciAke25vZGUucnVudGltZVR5cGV9LiIpOwogICAgcmV0dXJuIHR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdFZhcmlhYmxlR2V0KGlyLlZhcmlhYmxlR2V0IG5vZGUpID0+IF9nZXRTdGF0aWNUeXBlKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdFByb3BlcnR5R2V0KGlyLlByb3BlcnR5R2V0IG5vZGUpID0+IF9nZXRTdGF0aWNUeXBlKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdERpcmVjdFByb3BlcnR5R2V0KGlyLkRpcmVjdFByb3BlcnR5R2V0IG5vZGUpID0+CiAgICAgIF9nZXRTdGF0aWNUeXBlKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdFN1cGVyUHJvcGVydHlHZXQoaXIuU3VwZXJQcm9wZXJ0eUdldCBub2RlKSA9PgogICAgICBfZ2V0U3RhdGljVHlwZShub2RlKTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRNZXRob2RJbnZvY2F0aW9uKGlyLk1ldGhvZEludm9jYXRpb24gbm9kZSkgPT4KICAgICAgX2dldFN0YXRpY1R5cGUobm9kZSk7CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0RGlyZWN0TWV0aG9kSW52b2NhdGlvbihpci5EaXJlY3RNZXRob2RJbnZvY2F0aW9uIG5vZGUpID0+CiAgICAgIF9nZXRTdGF0aWNUeXBlKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdFN0YXRpY0ludm9jYXRpb24oaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKSA9PgogICAgICBfZ2V0U3RhdGljVHlwZShub2RlKTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRTdXBlck1ldGhvZEludm9jYXRpb24oaXIuU3VwZXJNZXRob2RJbnZvY2F0aW9uIG5vZGUpID0+CiAgICAgIF9nZXRTdGF0aWNUeXBlKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdENvbnN0cnVjdG9ySW52b2NhdGlvbihpci5Db25zdHJ1Y3Rvckludm9jYXRpb24gbm9kZSkgPT4KICAgICAgX2dldFN0YXRpY1R5cGUobm9kZSk7CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0SW5zdGFudGlhdGlvbihpci5JbnN0YW50aWF0aW9uIG5vZGUpID0+IF9nZXRTdGF0aWNUeXBlKG5vZGUpOwp9ClQATk48ASg0LzE1ICEkAVA5TiABDCQBFEYgAQwyKksRBAEMPTpIEQQBMyVMEQQBDE0BDE0BDEMcAQxBHAEMQRwBDE0cAQxBHAEMSxwBDEscAQxRAgEvcGFja2FnZTpjb21waWxlci9zcmMvaXIvY2FjaGVkX3N0YXRpY190eXBlLmRhcnQrc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaXIvZGVidWcuZGFydIgxLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBIZWxwZXIgZm9yIGRlYnVnIEtlcm5lbCBub2Rlcy4KCmxpYnJhcnkga2VybmVsLmRlYnVnOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCc7CmltcG9ydCAncGFja2FnZTprZXJuZWwvdmlzaXRvci5kYXJ0JzsKCmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnIHNob3cgSW5kZW50YXRpb24sIFRhZ2dpbmc7CgpjbGFzcyBEZWJ1Z1ByaW50ZXIgZXh0ZW5kcyBWaXNpdG9yIHdpdGggSW5kZW50YXRpb24sIFRhZ2dpbmc8Tm9kZT4gewogIEBvdmVycmlkZQogIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKCiAgdm9pZCB2aXNpdE5vZGVXaXRoQ2hpbGRyZW4oTm9kZSBub2RlLCBTdHJpbmcgdHlwZSwgW01hcCBwYXJhbXNdKSB7CiAgICBvcGVuTm9kZShub2RlLCB0eXBlLCBwYXJhbXMpOwogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogICAgY2xvc2VOb2RlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGRlZmF1bHROb2RlKE5vZGUgbm9kZSkgewogICAgdmlzaXROb2RlV2l0aENoaWxkcmVuKG5vZGUsICcke25vZGUucnVudGltZVR5cGV9Jyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TmFtZShOYW1lIG5vZGUpIHsKICAgIG9wZW5BbmRDbG9zZU5vZGUobm9kZSwgJyR7bm9kZS5ydW50aW1lVHlwZX0nLAogICAgICAgIHsnbmFtZSc6IG5vZGUubmFtZSwgJ2xpYnJhcnknOiBub2RlLmxpYnJhcnk/Lm5hbWV9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRMaXRlcmFsKEludExpdGVyYWwgbm9kZSkgewogICAgb3BlbkFuZENsb3NlTm9kZShub2RlLCAnJHtub2RlLnJ1bnRpbWVUeXBlfScsIHsndmFsdWUnOiAnJHtub2RlLnZhbHVlfSd9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRWYXJpYWJsZUdldChWYXJpYWJsZUdldCBub2RlKSB7CiAgICBvcGVuQW5kQ2xvc2VOb2RlKAogICAgICAgIG5vZGUsICcke25vZGUucnVudGltZVR5cGV9Jywgeyd2YXJpYWJsZSc6ICcke25vZGUudmFyaWFibGV9J30pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0YXRpY0dldChTdGF0aWNHZXQgbm9kZSkgewogICAgb3BlbkFuZENsb3NlTm9kZShub2RlLCAnJHtub2RlLnJ1bnRpbWVUeXBlfScsIHsndGFyZ2V0JzogJyR7bm9kZS50YXJnZXR9J30pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24oVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICBvcGVuTm9kZShub2RlLCAnJHtub2RlLnJ1bnRpbWVUeXBlfScsIHsKICAgICAgJ25hbWUnOiAnJHtub2RlLm5hbWUgPz8gJy0tdW5uYW1lZC0tJ30nLAogICAgICAnaXNGaW5hbCc6ICcke25vZGUuaXNGaW5hbH0nLAogICAgICAnaXNDb25zdCc6ICcke25vZGUuaXNDb25zdH0nLAogICAgICAnaXNGaWVsZEZvcm1hbCc6ICcke25vZGUuaXNGaWVsZEZvcm1hbH0nCiAgICB9KTsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICAgIGNsb3NlTm9kZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludGVyZmFjZVR5cGUoSW50ZXJmYWNlVHlwZSBub2RlKSB7CiAgICBvcGVuTm9kZShub2RlLCAnJHtub2RlLnJ1bnRpbWVUeXBlfScsIHsKICAgICAgJ25hbWUnOiAnJHtub2RlLmNsYXNzTm9kZS5uYW1lfScsCiAgICB9KTsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICAgIGNsb3NlTm9kZSgpOwogIH0KCiAgLy8vIFByZXR0eS1wcmludHMgZ2l2ZW4gbm9kZSB0cmVlIGludG8gc3RyaW5nLgogIHN0YXRpYyBTdHJpbmcgcHJldHR5UHJpbnQoTm9kZSBub2RlKSB7CiAgICB2YXIgcCA9IG5ldyBEZWJ1Z1ByaW50ZXIoKTsKICAgIG5vZGUuYWNjZXB0KHApOwogICAgcmV0dXJuIHAuc2IudG9TdHJpbmcoKTsKICB9Cn0KUABOTjwBIwEWASImATYBRQwoAUUiHhEEAQwgOAQBDB4yPQQBDCpPBAEMLBZIBAEMKFEEAQw8LC8kJC8IHhEEAQwwLCgIHhEEATEpIBQcBAIBInBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL2RlYnVnLmRhcnQrc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaXIvdHlwZXMuZGFydJINLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL29yZGVyZWRfdHlwZXNldC5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50X21hcC5kYXJ0JzsKCi8vLyBTdXBwb3J0IGZvciBzdWJ0eXBlIGNoZWNrcyBvZiBrZXJuZWwgYmFzZWQgW0RhcnRUeXBlXXMuCmNsYXNzIEtlcm5lbERhcnRUeXBlcyBleHRlbmRzIERhcnRUeXBlcyB7CiAgZmluYWwgSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcDsKICBmaW5hbCBTdWJ0eXBlVmlzaXRvcjxEYXJ0VHlwZT4gc3VidHlwZVZpc2l0b3I7CiAgZmluYWwgUG90ZW50aWFsU3VidHlwZVZpc2l0b3I8RGFydFR5cGU+IHBvdGVudGlhbFN1YnR5cGVWaXNpdG9yOwoKICBLZXJuZWxEYXJ0VHlwZXModGhpcy5lbGVtZW50TWFwKQogICAgICA6IHRoaXMuc3VidHlwZVZpc2l0b3IgPSBuZXcgS2VybmVsU3VidHlwZVZpc2l0b3IoZWxlbWVudE1hcCksCiAgICAgICAgdGhpcy5wb3RlbnRpYWxTdWJ0eXBlVmlzaXRvciA9CiAgICAgICAgICAgIG5ldyBfS2VybmVsUG90ZW50aWFsU3VidHlwZVZpc2l0b3IoZWxlbWVudE1hcCk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNQb3RlbnRpYWxTdWJ0eXBlKERhcnRUeXBlIHQsIERhcnRUeXBlIHMsCiAgICAgIHtib29sIGFzc3VtZUluc3RhbnRpYXRpb25zOiB0cnVlfSkgewogICAgcmV0dXJuIHBvdGVudGlhbFN1YnR5cGVWaXNpdG9yLmlzUG90ZW50aWFsU3VidHlwZSh0LCBzLAogICAgICAgIGFzc3VtZUluc3RhbnRpYXRpb25zOiBhc3N1bWVJbnN0YW50aWF0aW9ucyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzQXNzaWduYWJsZShEYXJ0VHlwZSB0LCBEYXJ0VHlwZSBzKSB7CiAgICByZXR1cm4gaXNTdWJ0eXBlKHQsIHMpIHx8IGlzU3VidHlwZShzLCB0KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNTdWJ0eXBlKERhcnRUeXBlIHQsIERhcnRUeXBlIHMpIHsKICAgIHJldHVybiBzdWJ0eXBlVmlzaXRvci5pc1N1YnR5cGUodCwgcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldFRoaXNUeXBlKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuZ2V0VGhpc1R5cGUoY2xzKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0U3VwZXJ0eXBlKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuZ2V0U3VwZXJUeXBlKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxJbnRlcmZhY2VUeXBlPiBnZXRTdXBlcnR5cGVzKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuZ2V0T3JkZXJlZFR5cGVTZXQoY2xzKS5zdXBlcnR5cGVzOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8SW50ZXJmYWNlVHlwZT4gZ2V0SW50ZXJmYWNlcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLmdldEludGVyZmFjZXMoY2xzKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgYXNJbnN0YW5jZU9mKEludGVyZmFjZVR5cGUgdHlwZSwgQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5hc0luc3RhbmNlT2YodHlwZSwgY2xzKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHN1YnN0QnlDb250ZXh0KERhcnRUeXBlIGJhc2UsIEludGVyZmFjZVR5cGUgY29udGV4dCkgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuc3Vic3RCeUNvbnRleHQoYmFzZSwgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICBGdW5jdGlvblR5cGUgZ2V0Q2FsbFR5cGUoSW50ZXJmYWNlVHlwZSB0eXBlKSB7CiAgICBEYXJ0VHlwZSBjYWxsVHlwZSA9IGVsZW1lbnRNYXAuZ2V0Q2FsbFR5cGUodHlwZSk7CiAgICByZXR1cm4gY2FsbFR5cGUgaXMgRnVuY3Rpb25UeXBlID8gY2FsbFR5cGUgOiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjaGVja1R5cGVWYXJpYWJsZUJvdW5kczxUPigKICAgICAgVCBjb250ZXh0LAogICAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICBMaXN0PERhcnRUeXBlPiB0eXBlVmFyaWFibGVzLAogICAgICB2b2lkIGNoZWNrVHlwZVZhcmlhYmxlQm91bmQoVCBjb250ZXh0LCBEYXJ0VHlwZSB0eXBlQXJndW1lbnQsCiAgICAgICAgICBUeXBlVmFyaWFibGVUeXBlIHR5cGVWYXJpYWJsZSwgRGFydFR5cGUgYm91bmQpKSB7CiAgICBhc3NlcnQodHlwZVZhcmlhYmxlcy5sZW5ndGggPT0gdHlwZUFyZ3VtZW50cy5sZW5ndGgpOwogICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHR5cGVBcmd1bWVudHMubGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgIERhcnRUeXBlIHR5cGVBcmd1bWVudCA9IHR5cGVBcmd1bWVudHNbaW5kZXhdOwogICAgICBUeXBlVmFyaWFibGVUeXBlIHR5cGVWYXJpYWJsZSA9IHR5cGVWYXJpYWJsZXNbaW5kZXhdOwogICAgICBEYXJ0VHlwZSBib3VuZCA9IGVsZW1lbnRNYXAKICAgICAgICAgIC5nZXRUeXBlVmFyaWFibGVCb3VuZCh0eXBlVmFyaWFibGUuZWxlbWVudCkKICAgICAgICAgIC5zdWJzdCh0eXBlQXJndW1lbnRzLCB0eXBlVmFyaWFibGVzKTsKICAgICAgY2hlY2tUeXBlVmFyaWFibGVCb3VuZChjb250ZXh0LCB0eXBlQXJndW1lbnQsIHR5cGVWYXJpYWJsZSwgYm91bmQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgQ29tbW9uRWxlbWVudHMgZ2V0IGNvbW1vbkVsZW1lbnRzID0+IGVsZW1lbnRNYXAuY29tbW9uRWxlbWVudHM7Cn0KCmNsYXNzIEtlcm5lbE9yZGVyZWRUeXBlU2V0QnVpbGRlciBleHRlbmRzIE9yZGVyZWRUeXBlU2V0QnVpbGRlckJhc2UgewogIGZpbmFsIElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXA7CgogIEtlcm5lbE9yZGVyZWRUeXBlU2V0QnVpbGRlcih0aGlzLmVsZW1lbnRNYXAsIENsYXNzRW50aXR5IGNscykgOiBzdXBlcihjbHMpOwoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldFRoaXNUeXBlKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuZ2V0VGhpc1R5cGUoY2xzKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgc3Vic3RCeUNvbnRleHQoSW50ZXJmYWNlVHlwZSB0eXBlLCBJbnRlcmZhY2VUeXBlIGNvbnRleHQpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLnN1YnN0QnlDb250ZXh0KHR5cGUsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldEhpZXJhcmNoeURlcHRoKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuZ2V0SGllcmFyY2h5RGVwdGgoY2xzKTsKICB9CgogIEBvdmVycmlkZQogIE9yZGVyZWRUeXBlU2V0IGdldE9yZGVyZWRUeXBlU2V0KENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuZ2V0T3JkZXJlZFR5cGVTZXQoY2xzKTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0VHlwZVJlbGF0aW9uTWl4aW4KICAgIGltcGxlbWVudHMgQWJzdHJhY3RUeXBlUmVsYXRpb248RGFydFR5cGU+IHsKICBJclRvRWxlbWVudE1hcCBnZXQgZWxlbWVudE1hcDsKCiAgQG92ZXJyaWRlCiAgQ29tbW9uRWxlbWVudHMgZ2V0IGNvbW1vbkVsZW1lbnRzID0+IGVsZW1lbnRNYXAuY29tbW9uRWxlbWVudHM7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldFR5cGVWYXJpYWJsZUJvdW5kKFR5cGVWYXJpYWJsZUVudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5nZXRUeXBlVmFyaWFibGVCb3VuZChlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uVHlwZSBnZXRDYWxsVHlwZShJbnRlcmZhY2VUeXBlIHR5cGUpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLmdldENhbGxUeXBlKHR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBhc0luc3RhbmNlT2YoSW50ZXJmYWNlVHlwZSB0eXBlLCBDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLmFzSW5zdGFuY2VPZih0eXBlLCBjbHMpOwogIH0KfQoKY2xhc3MgS2VybmVsU3VidHlwZVZpc2l0b3IgZXh0ZW5kcyBTdWJ0eXBlVmlzaXRvcjxEYXJ0VHlwZT4KICAgIHdpdGggQWJzdHJhY3RUeXBlUmVsYXRpb25NaXhpbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcDsKCiAgS2VybmVsU3VidHlwZVZpc2l0b3IodGhpcy5lbGVtZW50TWFwKTsKfQoKY2xhc3MgX0tlcm5lbFBvdGVudGlhbFN1YnR5cGVWaXNpdG9yIGV4dGVuZHMgUG90ZW50aWFsU3VidHlwZVZpc2l0b3I8RGFydFR5cGU+CiAgICB3aXRoIEFic3RyYWN0VHlwZVJlbGF0aW9uTWl4aW4gewogIEBvdmVycmlkZQogIGZpbmFsIElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXA7CgogIF9LZXJuZWxQb3RlbnRpYWxTdWJ0eXBlVmlzaXRvcih0aGlzLmVsZW1lbnRNYXApOwp9CoCiAE5OPAEiJCEiGwE8KiMxQwEjRCc8AQwyKzw1BAEMLi8EAQwrKwQBDC8oBAEMMCkEAQw7OQQBDDsqBAEMRC8EAQxCNQQBDDE2NwQBDCMRJCREPDpBNDwiNjBKBgQBDEICAUYjAU4BDC8oBAEMTDUEAQwrLgQBDDYuBAIBKTAhAQxCAQw+NQQBDDEpBAEMRC8EAgE8JQwjASkCAU8lDCMBMwIBInBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL3R5cGVzLmRhcnQuc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaXIvdmlzaXRvcnMuZGFydMAAb2AvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NvcmVfdHlwZXMuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfZW52aXJvbm1lbnQuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvY29uc3RhbnRfc3lzdGVtLmRhcnQnIGFzIGNvbnN0YW50X3N5c3RlbTsKaW1wb3J0ICcuLi9jb25zdGFudHMvY29uc3RydWN0b3JzLmRhcnQnOwppbXBvcnQgJy4uL2NvbnN0YW50cy9leHByZXNzaW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9vcGVyYXRvcnMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaXIvZWxlbWVudF9tYXAuZGFydCc7CmltcG9ydCAnLi4vaXIvdXRpbC5kYXJ0JzsKCi8vLyBWaXNpdG9yIHRoYXQgY29udmVydHMgc3RyaW5nIGxpdGVyYWxzIGFuZCBjb25jYXRlbmF0aW9ucyBvZiBzdHJpbmcgbGl0ZXJhbHMKLy8vIGludG8gdGhlIHN0cmluZyB2YWx1ZS4KY2xhc3MgU3RyaW5naWZpZXIgZXh0ZW5kcyBpci5FeHByZXNzaW9uVmlzaXRvcjxTdHJpbmc+IHsKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRTdHJpbmdMaXRlcmFsKGlyLlN0cmluZ0xpdGVyYWwgbm9kZSkgPT4gbm9kZS52YWx1ZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbihpci5TdHJpbmdDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGZvciAoaXIuRXhwcmVzc2lvbiBleHByZXNzaW9uIGluIG5vZGUuZXhwcmVzc2lvbnMpIHsKICAgICAgU3RyaW5nIHZhbHVlID0gZXhwcmVzc2lvbi5hY2NlcHQodGhpcyk7CiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgc2Iud3JpdGUodmFsdWUpOwogICAgfQogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRDb25zdGFudEV4cHJlc3Npb24oaXIuQ29uc3RhbnRFeHByZXNzaW9uIG5vZGUpIHsKICAgIGlyLkNvbnN0YW50IGNvbnN0YW50ID0gbm9kZS5jb25zdGFudDsKICAgIGlmIChjb25zdGFudCBpcyBpci5TdHJpbmdDb25zdGFudCkgewogICAgICByZXR1cm4gY29uc3RhbnQudmFsdWU7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCi8vLyBWaXNpdG9yIHRoYXQgY29udmVydHMgYSBrZXJuZWwgY29uc3RhbnQgZXhwcmVzc2lvbiBpbnRvIGEKLy8vIFtDb25zdGFudEV4cHJlc3Npb25dLgpjbGFzcyBDb25zdGFudGlmaWVyIGV4dGVuZHMgaXIuRXhwcmVzc2lvblZpc2l0b3I8Q29uc3RhbnRFeHByZXNzaW9uPiB7CiAgZmluYWwgYm9vbCByZXF1aXJlQ29uc3RhbnQ7CiAgZmluYWwgSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcDsKICBpci5UcmVlTm9kZSBmYWlsTm9kZTsKICBmaW5hbCBNYXA8aXIuVmFyaWFibGVEZWNsYXJhdGlvbiwgQ29uc3RhbnRFeHByZXNzaW9uPiBfaW5pdGlhbGl6ZXJMb2NhbHMgPQogICAgICA8aXIuVmFyaWFibGVEZWNsYXJhdGlvbiwgQ29uc3RhbnRFeHByZXNzaW9uPnt9OwoKICBDb25zdGFudGlmaWVyKHRoaXMuZWxlbWVudE1hcCwge3RoaXMucmVxdWlyZUNvbnN0YW50OiB0cnVlfSk7CgogIENvbW1vbkVsZW1lbnRzIGdldCBfY29tbW9uRWxlbWVudHMgPT4gZWxlbWVudE1hcC5jb21tb25FbGVtZW50czsKCiAgQ29uc3RhbnRFeHByZXNzaW9uIHZpc2l0KGlyLkV4cHJlc3Npb24gbm9kZSkgewogICAgQ29uc3RhbnRFeHByZXNzaW9uIGNvbnN0YW50ID0gbm9kZS5hY2NlcHQodGhpcyk7CiAgICBpZiAoY29uc3RhbnQgPT0gbnVsbCAmJiByZXF1aXJlQ29uc3RhbnQpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3VwcG9ydCBjb250ZXh0dWFsIGVycm9yIG1lc3NhZ2VzLgogICAgICBlbGVtZW50TWFwLnJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKGZhaWxOb2RlID8/IG5vZGUpLAogICAgICAgICAgTWVzc2FnZUtpbmQuTk9UX0FfQ09NUElMRV9USU1FX0NPTlNUQU5UKTsKICAgICAgcmV0dXJuIG5ldyBFcnJvbmVvdXNDb25zdGFudEV4cHJlc3Npb24oKTsKICAgIH0KICAgIHJldHVybiBjb25zdGFudDsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiBkZWZhdWx0RXhwcmVzc2lvbihpci5FeHByZXNzaW9uIG5vZGUpIHsKICAgIGlmIChyZXF1aXJlQ29uc3RhbnQpIHsKICAgICAgZmFpbE5vZGUgPz89IG5vZGU7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIExpc3Q8Q29uc3RhbnRFeHByZXNzaW9uPiBfY29tcHV0ZUxpc3QoTGlzdDxpci5FeHByZXNzaW9uPiBleHByZXNzaW9ucykgewogICAgTGlzdDxDb25zdGFudEV4cHJlc3Npb24+IGxpc3QgPSA8Q29uc3RhbnRFeHByZXNzaW9uPltdOwogICAgZm9yIChpci5FeHByZXNzaW9uIGV4cHJlc3Npb24gaW4gZXhwcmVzc2lvbnMpIHsKICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIGNvbnN0YW50ID0gdmlzaXQoZXhwcmVzc2lvbik7CiAgICAgIGlmIChjb25zdGFudCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgbGlzdC5hZGQoY29uc3RhbnQpOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBMaXN0PENvbnN0YW50RXhwcmVzc2lvbj4gX2NvbXB1dGVBcmd1bWVudHMoaXIuQXJndW1lbnRzIG5vZGUpIHsKICAgIExpc3Q8Q29uc3RhbnRFeHByZXNzaW9uPiBhcmd1bWVudHMgPSA8Q29uc3RhbnRFeHByZXNzaW9uPltdOwogICAgZm9yIChpci5FeHByZXNzaW9uIGFyZ3VtZW50IGluIG5vZGUucG9zaXRpb25hbCkgewogICAgICBDb25zdGFudEV4cHJlc3Npb24gY29uc3RhbnQgPSB2aXNpdChhcmd1bWVudCk7CiAgICAgIGlmIChjb25zdGFudCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgYXJndW1lbnRzLmFkZChjb25zdGFudCk7CiAgICB9CiAgICBmb3IgKGlyLk5hbWVkRXhwcmVzc2lvbiBhcmd1bWVudCBpbiBub2RlLm5hbWVkKSB7CiAgICAgIENvbnN0YW50RXhwcmVzc2lvbiBjb25zdGFudCA9IHZpc2l0KGFyZ3VtZW50LnZhbHVlKTsKICAgICAgaWYgKGNvbnN0YW50ID09IG51bGwpIHJldHVybiBudWxsOwogICAgICBhcmd1bWVudHMuYWRkKGNvbnN0YW50KTsKICAgIH0KICAgIHJldHVybiBhcmd1bWVudHM7CiAgfQoKICBDb25zdHJ1Y3RlZENvbnN0YW50RXhwcmVzc2lvbiBfY29tcHV0ZUNvbnN0cnVjdG9ySW52b2NhdGlvbigKICAgICAgaXIuQ29uc3RydWN0b3IgdGFyZ2V0LAogICAgICBpci5Bcmd1bWVudHMgYXJndW1lbnRzLAogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhpcyB3aGVuIGNvcnJlY3QgdHlwZSBhcmd1bWVudHMgYXJlIHBhc3NlZAogICAgICAvLyB0aHJvdWdoIFthcmd1bWVudHNdLiBDdXJyZW50IFtpci5SZWRpcmVjdGluZ0luaXRpYWxpemVyXSBkb2Vzbid0IGhhdmUKICAgICAgLy8gYW55IHR5cGUgYXJndW1lbnRzLgogICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlcykgewogICAgTGlzdDxDb25zdGFudEV4cHJlc3Npb24+IGV4cHJlc3Npb25zID0gX2NvbXB1dGVBcmd1bWVudHMoYXJndW1lbnRzKTsKICAgIGlmIChleHByZXNzaW9ucyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBuZXcgQ29uc3RydWN0ZWRDb25zdGFudEV4cHJlc3Npb24oCiAgICAgICAgZWxlbWVudE1hcC5jcmVhdGVJbnRlcmZhY2VUeXBlKHRhcmdldC5lbmNsb3NpbmdDbGFzcywgdHlwZXMpLAogICAgICAgIGVsZW1lbnRNYXAuZ2V0Q29uc3RydWN0b3IodGFyZ2V0KSwKICAgICAgICBlbGVtZW50TWFwLmdldENhbGxTdHJ1Y3R1cmUoYXJndW1lbnRzKSwKICAgICAgICBleHByZXNzaW9ucyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gdmlzaXRDb25zdHJ1Y3Rvckludm9jYXRpb24oaXIuQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUpIHsKICAgIGlmICghbm9kZS5pc0NvbnN0KSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfY29tcHV0ZUNvbnN0cnVjdG9ySW52b2NhdGlvbigKICAgICAgICBub2RlLnRhcmdldCwgbm9kZS5hcmd1bWVudHMsIG5vZGUuYXJndW1lbnRzLnR5cGVzKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiB2aXNpdFZhcmlhYmxlR2V0KGlyLlZhcmlhYmxlR2V0IG5vZGUpIHsKICAgIENvbnN0YW50RXhwcmVzc2lvbiBjb25zdGFudCA9IF9pbml0aWFsaXplckxvY2Fsc1tub2RlLnZhcmlhYmxlXTsKICAgIGlmIChjb25zdGFudCAhPSBudWxsKSB7CiAgICAgIHJldHVybiBjb25zdGFudDsKICAgIH0KICAgIGlmIChub2RlLnZhcmlhYmxlLnBhcmVudCBpcyBpci5GdW5jdGlvbk5vZGUpIHsKICAgICAgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uID0gbm9kZS52YXJpYWJsZS5wYXJlbnQ7CiAgICAgIGludCBpbmRleCA9IGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmluZGV4T2Yobm9kZS52YXJpYWJsZSk7CiAgICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICAgIHJldHVybiBuZXcgUG9zaXRpb25hbEFyZ3VtZW50UmVmZXJlbmNlKGluZGV4KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQoZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzLmNvbnRhaW5zKG5vZGUudmFyaWFibGUpKTsKICAgICAgICByZXR1cm4gbmV3IE5hbWVkQXJndW1lbnRSZWZlcmVuY2Uobm9kZS52YXJpYWJsZS5uYW1lKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChub2RlLnZhcmlhYmxlLmlzQ29uc3QpIHsKICAgICAgcmV0dXJuIHZpc2l0KG5vZGUudmFyaWFibGUuaW5pdGlhbGl6ZXIpOwogICAgfQogICAgcmV0dXJuIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIHZpc2l0U3RhdGljR2V0KGlyLlN0YXRpY0dldCBub2RlKSB7CiAgICBpci5NZW1iZXIgdGFyZ2V0ID0gbm9kZS50YXJnZXQ7CiAgICBpZiAodGFyZ2V0IGlzIGlyLkZpZWxkICYmIHRhcmdldC5pc0NvbnN0KSB7CiAgICAgIHJldHVybiBuZXcgRmllbGRDb25zdGFudEV4cHJlc3Npb24oZWxlbWVudE1hcC5nZXRGaWVsZChub2RlLnRhcmdldCkpOwogICAgfSBlbHNlIGlmICh0YXJnZXQgaXMgaXIuUHJvY2VkdXJlICYmCiAgICAgICAgdGFyZ2V0LmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5NZXRob2QpIHsKICAgICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24gPSBlbGVtZW50TWFwLmdldE1ldGhvZChub2RlLnRhcmdldCk7CiAgICAgIERhcnRUeXBlIHR5cGUgPSBlbGVtZW50TWFwLmdldEZ1bmN0aW9uVHlwZShub2RlLnRhcmdldC5mdW5jdGlvbik7CiAgICAgIHJldHVybiBuZXcgRnVuY3Rpb25Db25zdGFudEV4cHJlc3Npb24oZnVuY3Rpb24sIHR5cGUpOwogICAgfQogICAgcmV0dXJuIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIHZpc2l0TnVsbExpdGVyYWwoaXIuTnVsbExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIG5ldyBOdWxsQ29uc3RhbnRFeHByZXNzaW9uKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gdmlzaXRCb29sTGl0ZXJhbChpci5Cb29sTGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gbmV3IEJvb2xDb25zdGFudEV4cHJlc3Npb24obm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gdmlzaXRJbnRMaXRlcmFsKGlyLkludExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIG5ldyBJbnRDb25zdGFudEV4cHJlc3Npb24oCiAgICAgICAgbmV3IEJpZ0ludC5mcm9tKG5vZGUudmFsdWUpLnRvVW5zaWduZWQoNjQpKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiB2aXNpdERvdWJsZUxpdGVyYWwoaXIuRG91YmxlTGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gbmV3IERvdWJsZUNvbnN0YW50RXhwcmVzc2lvbihub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiB2aXNpdFN0cmluZ0xpdGVyYWwoaXIuU3RyaW5nTGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gbmV3IFN0cmluZ0NvbnN0YW50RXhwcmVzc2lvbihub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiB2aXNpdFN5bWJvbExpdGVyYWwoaXIuU3ltYm9sTGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gbmV3IFN5bWJvbENvbnN0YW50RXhwcmVzc2lvbihub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiB2aXNpdFN0cmluZ0NvbmNhdGVuYXRpb24oaXIuU3RyaW5nQ29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICBMaXN0PENvbnN0YW50RXhwcmVzc2lvbj4gZXhwcmVzc2lvbnMgPSBfY29tcHV0ZUxpc3Qobm9kZS5leHByZXNzaW9ucyk7CiAgICBpZiAoZXhwcmVzc2lvbnMgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gbmV3IENvbmNhdGVuYXRlQ29uc3RhbnRFeHByZXNzaW9uKGV4cHJlc3Npb25zKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiB2aXNpdE1hcExpdGVyYWwoaXIuTWFwTGl0ZXJhbCBub2RlKSB7CiAgICBpZiAoIW5vZGUuaXNDb25zdCkgewogICAgICByZXR1cm4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgICB9CiAgICBEYXJ0VHlwZSBrZXlUeXBlID0gZWxlbWVudE1hcC5nZXREYXJ0VHlwZShub2RlLmtleVR5cGUpOwogICAgRGFydFR5cGUgdmFsdWVUeXBlID0gZWxlbWVudE1hcC5nZXREYXJ0VHlwZShub2RlLnZhbHVlVHlwZSk7CiAgICBMaXN0PENvbnN0YW50RXhwcmVzc2lvbj4ga2V5cyA9IDxDb25zdGFudEV4cHJlc3Npb24+W107CiAgICBMaXN0PENvbnN0YW50RXhwcmVzc2lvbj4gdmFsdWVzID0gPENvbnN0YW50RXhwcmVzc2lvbj5bXTsKICAgIGZvciAoaXIuTWFwRW50cnkgZW50cnkgaW4gbm9kZS5lbnRyaWVzKSB7CiAgICAgIENvbnN0YW50RXhwcmVzc2lvbiBrZXkgPSB2aXNpdChlbnRyeS5rZXkpOwogICAgICBpZiAoa2V5ID09IG51bGwpIHJldHVybiBudWxsOwogICAgICBrZXlzLmFkZChrZXkpOwogICAgICBDb25zdGFudEV4cHJlc3Npb24gdmFsdWUgPSB2aXNpdChlbnRyeS52YWx1ZSk7CiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgdmFsdWVzLmFkZCh2YWx1ZSk7CiAgICB9CiAgICByZXR1cm4gbmV3IE1hcENvbnN0YW50RXhwcmVzc2lvbigKICAgICAgICBfY29tbW9uRWxlbWVudHMubWFwVHlwZShrZXlUeXBlLCB2YWx1ZVR5cGUpLCBrZXlzLCB2YWx1ZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIHZpc2l0U2V0TGl0ZXJhbChpci5TZXRMaXRlcmFsIG5vZGUpIHsKICAgIGlmICghbm9kZS5pc0NvbnN0KSB7CiAgICAgIHJldHVybiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICAgIH0KICAgIERhcnRUeXBlIGVsZW1lbnRUeXBlID0gZWxlbWVudE1hcC5nZXREYXJ0VHlwZShub2RlLnR5cGVBcmd1bWVudCk7CiAgICBMaXN0PENvbnN0YW50RXhwcmVzc2lvbj4gdmFsdWVzID0gPENvbnN0YW50RXhwcmVzc2lvbj5bXTsKICAgIGZvciAoaXIuRXhwcmVzc2lvbiBleHByZXNzaW9uIGluIG5vZGUuZXhwcmVzc2lvbnMpIHsKICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIHZhbHVlID0gdmlzaXQoZXhwcmVzc2lvbik7CiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgdmFsdWVzLmFkZCh2YWx1ZSk7CiAgICB9CiAgICByZXR1cm4gbmV3IFNldENvbnN0YW50RXhwcmVzc2lvbigKICAgICAgICBfY29tbW9uRWxlbWVudHMuc2V0VHlwZShlbGVtZW50VHlwZSksIHZhbHVlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gdmlzaXRMaXN0TGl0ZXJhbChpci5MaXN0TGl0ZXJhbCBub2RlKSB7CiAgICBpZiAoIW5vZGUuaXNDb25zdCkgewogICAgICByZXR1cm4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgICB9CiAgICBEYXJ0VHlwZSBlbGVtZW50VHlwZSA9IGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUobm9kZS50eXBlQXJndW1lbnQpOwogICAgTGlzdDxDb25zdGFudEV4cHJlc3Npb24+IHZhbHVlcyA9IDxDb25zdGFudEV4cHJlc3Npb24+W107CiAgICBmb3IgKGlyLkV4cHJlc3Npb24gZXhwcmVzc2lvbiBpbiBub2RlLmV4cHJlc3Npb25zKSB7CiAgICAgIENvbnN0YW50RXhwcmVzc2lvbiB2YWx1ZSA9IHZpc2l0KGV4cHJlc3Npb24pOwogICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIHZhbHVlcy5hZGQodmFsdWUpOwogICAgfQogICAgcmV0dXJuIG5ldyBMaXN0Q29uc3RhbnRFeHByZXNzaW9uKAogICAgICAgIF9jb21tb25FbGVtZW50cy5saXN0VHlwZShlbGVtZW50VHlwZSksIHZhbHVlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gdmlzaXRUeXBlTGl0ZXJhbChpci5UeXBlTGl0ZXJhbCBub2RlKSB7CiAgICBTdHJpbmcgbmFtZTsKICAgIERhcnRUeXBlIHR5cGUgPSBlbGVtZW50TWFwLmdldERhcnRUeXBlKG5vZGUudHlwZSk7CiAgICBpZiAodHlwZS5pc0R5bmFtaWMpIHsKICAgICAgbmFtZSA9ICdkeW5hbWljJzsKICAgIH0gZWxzZSBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgIG5hbWUgPSB0eXBlLmVsZW1lbnQubmFtZTsKICAgIH0gZWxzZSBpZiAodHlwZS5pc1R5cGVkZWYpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ29tcHV0ZSBhIG5hbWUgZm9yIHRoZSB0eXBlIGxpdGVyYWw/IEl0IGlzIG9ubHkKICAgICAgLy8gdXNlZCBpbiBlcnJvciBtZXNzYWdlcyBpbiB0aGUgb2xkIFNTQSBidWlsZGVyLgogICAgICBuYW1lID0gJz8nOwogICAgfSBlbHNlIGlmIChub2RlLnR5cGUgaXMgaXIuRnVuY3Rpb25UeXBlKSB7CiAgICAgIGlyLkZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSBub2RlLnR5cGU7CiAgICAgIGFzc2VydChmdW5jdGlvblR5cGUudHlwZWRlZiAhPSBudWxsKTsKICAgICAgdHlwZSA9IGVsZW1lbnRNYXAuZ2V0VHlwZWRlZlR5cGUoZnVuY3Rpb25UeXBlLnR5cGVkZWYpOwogICAgICBuYW1lID0gZnVuY3Rpb25UeXBlLnR5cGVkZWYubmFtZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICAgIH0KICAgIHJldHVybiBuZXcgVHlwZUNvbnN0YW50RXhwcmVzc2lvbih0eXBlLCBuYW1lKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiB2aXNpdEFzRXhwcmVzc2lvbihpci5Bc0V4cHJlc3Npb24gbm9kZSkgewogICAgQ29uc3RhbnRFeHByZXNzaW9uIGV4cHJlc3Npb24gPSB2aXNpdChub2RlLm9wZXJhbmQpOwogICAgaWYgKGV4cHJlc3Npb24gPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBEYXJ0VHlwZSB0eXBlID0gZWxlbWVudE1hcC5nZXREYXJ0VHlwZShub2RlLnR5cGUpOwogICAgcmV0dXJuIG5ldyBBc0NvbnN0YW50RXhwcmVzc2lvbihleHByZXNzaW9uLCB0eXBlKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiB2aXNpdEluc3RhbnRpYXRpb24oaXIuSW5zdGFudGlhdGlvbiBub2RlKSB7CiAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0KICAgICAgICBub2RlLnR5cGVBcmd1bWVudHMubWFwKGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUpLnRvTGlzdCgpOwogICAgZm9yIChEYXJ0VHlwZSB0eXBlQXJndW1lbnQgaW4gdHlwZUFyZ3VtZW50cykgewogICAgICBpZiAodHlwZUFyZ3VtZW50LmNvbnRhaW5zVHlwZVZhcmlhYmxlcykgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgICBDb25zdGFudEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHZpc2l0KG5vZGUuZXhwcmVzc2lvbik7CiAgICBpZiAoZXhwcmVzc2lvbiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBuZXcgSW5zdGFudGlhdGlvbkNvbnN0YW50RXhwcmVzc2lvbih0eXBlQXJndW1lbnRzLCBleHByZXNzaW9uKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiB2aXNpdE5vdChpci5Ob3Qgbm9kZSkgewogICAgQ29uc3RhbnRFeHByZXNzaW9uIGV4cHJlc3Npb24gPSB2aXNpdChub2RlLm9wZXJhbmQpOwogICAgaWYgKGV4cHJlc3Npb24gPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gbmV3IFVuYXJ5Q29uc3RhbnRFeHByZXNzaW9uKFVuYXJ5T3BlcmF0b3IuTk9ULCBleHByZXNzaW9uKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiB2aXNpdENvbmRpdGlvbmFsRXhwcmVzc2lvbihpci5Db25kaXRpb25hbEV4cHJlc3Npb24gbm9kZSkgewogICAgQ29uc3RhbnRFeHByZXNzaW9uIGNvbmRpdGlvbiA9IHZpc2l0KG5vZGUuY29uZGl0aW9uKTsKICAgIGlmIChjb25kaXRpb24gPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBDb25zdGFudEV4cHJlc3Npb24gdHJ1ZUV4cCA9IHZpc2l0KG5vZGUudGhlbik7CiAgICBpZiAodHJ1ZUV4cCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIENvbnN0YW50RXhwcmVzc2lvbiBmYWxzZUV4cCA9IHZpc2l0KG5vZGUub3RoZXJ3aXNlKTsKICAgIGlmIChmYWxzZUV4cCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBuZXcgQ29uZGl0aW9uYWxDb25zdGFudEV4cHJlc3Npb24oY29uZGl0aW9uLCB0cnVlRXhwLCBmYWxzZUV4cCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gdmlzaXRQcm9wZXJ0eUdldChpci5Qcm9wZXJ0eUdldCBub2RlKSB7CiAgICBpZiAobm9kZS5uYW1lLm5hbWUgIT0gJ2xlbmd0aCcpIHsKICAgICAgZmFpbE5vZGUgPz89IG5vZGU7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgQ29uc3RhbnRFeHByZXNzaW9uIHJlY2VpdmVyID0gdmlzaXQobm9kZS5yZWNlaXZlcik7CiAgICBpZiAocmVjZWl2ZXIgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gbmV3IFN0cmluZ0xlbmd0aENvbnN0YW50RXhwcmVzc2lvbihyZWNlaXZlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gdmlzaXRNZXRob2RJbnZvY2F0aW9uKGlyLk1ldGhvZEludm9jYXRpb24gbm9kZSkgewogICAgLy8gTWV0aG9kIGludm9jYXRpb25zIGFyZSBnZW5lcmFsbHkgbm90IGNvbnN0YW50IGV4cHJlc3Npb25zIGJ1dCB1bmFyeQogICAgLy8gYW5kIGJpbmFyeSBleHByZXNzaW9ucyBhcmUgZW5jb2RlZCBhcyBtZXRob2QgaW52b2NhdGlvbnMgaW4ga2VybmVsLgogICAgaWYgKG5vZGUuYXJndW1lbnRzLm5hbWVkLmlzTm90RW1wdHkpIHsKICAgICAgcmV0dXJuIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogICAgfQogICAgaWYgKG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoID09IDApIHsKICAgICAgVW5hcnlPcGVyYXRvciBvcGVyYXRvcjsKICAgICAgaWYgKG5vZGUubmFtZS5uYW1lID09IFVuYXJ5T3BlcmF0b3IuTkVHQVRFLnNlbGVjdG9yTmFtZSkgewogICAgICAgIG9wZXJhdG9yID0gVW5hcnlPcGVyYXRvci5ORUdBVEU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb3BlcmF0b3IgPSBVbmFyeU9wZXJhdG9yLnBhcnNlKG5vZGUubmFtZS5uYW1lKTsKICAgICAgfQogICAgICBpZiAob3BlcmF0b3IgIT0gbnVsbCkgewogICAgICAgIENvbnN0YW50RXhwcmVzc2lvbiBleHByZXNzaW9uID0gdmlzaXQobm9kZS5yZWNlaXZlcik7CiAgICAgICAgaWYgKGV4cHJlc3Npb24gPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgICAgcmV0dXJuIG5ldyBVbmFyeUNvbnN0YW50RXhwcmVzc2lvbihvcGVyYXRvciwgZXhwcmVzc2lvbik7CiAgICAgIH0KICAgIH0KICAgIGlmIChub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCA9PSAxKSB7CiAgICAgIEJpbmFyeU9wZXJhdG9yIG9wZXJhdG9yID0gQmluYXJ5T3BlcmF0b3IucGFyc2Uobm9kZS5uYW1lLm5hbWUpOwogICAgICBpZiAob3BlcmF0b3IgIT0gbnVsbCkgewogICAgICAgIENvbnN0YW50RXhwcmVzc2lvbiBsZWZ0ID0gdmlzaXQobm9kZS5yZWNlaXZlcik7CiAgICAgICAgaWYgKGxlZnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIHJpZ2h0ID0gdmlzaXQobm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5zaW5nbGUpOwogICAgICAgIGlmIChyaWdodCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICByZXR1cm4gbmV3IEJpbmFyeUNvbnN0YW50RXhwcmVzc2lvbihsZWZ0LCBvcGVyYXRvciwgcmlnaHQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gdmlzaXRTdGF0aWNJbnZvY2F0aW9uKGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSkgewogICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IGVsZW1lbnRNYXAuZ2V0TWVtYmVyKG5vZGUudGFyZ2V0KTsKICAgIGlmIChtZW1iZXIgPT0gX2NvbW1vbkVsZW1lbnRzLmlkZW50aWNhbEZ1bmN0aW9uKSB7CiAgICAgIGlmIChub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCA9PSAyICYmCiAgICAgICAgICBub2RlLmFyZ3VtZW50cy5uYW1lZC5pc0VtcHR5KSB7CiAgICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIGxlZnQgPSB2aXNpdChub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsWzBdKTsKICAgICAgICBpZiAobGVmdCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICBDb25zdGFudEV4cHJlc3Npb24gcmlnaHQgPSB2aXNpdChub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsWzFdKTsKICAgICAgICBpZiAocmlnaHQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgICAgcmV0dXJuIG5ldyBJZGVudGljYWxDb25zdGFudEV4cHJlc3Npb24obGVmdCwgcmlnaHQpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKG1lbWJlci5uYW1lID09ICdmcm9tRW52aXJvbm1lbnQnICYmCiAgICAgICAgbm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggPT0gMSkgewogICAgICBDb25zdGFudEV4cHJlc3Npb24gbmFtZSA9IHZpc2l0KG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwuc2luZ2xlKTsKICAgICAgaWYgKG5hbWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIENvbnN0YW50RXhwcmVzc2lvbiBkZWZhdWx0VmFsdWU7CiAgICAgIGlmIChub2RlLmFyZ3VtZW50cy5uYW1lZC5sZW5ndGggPT0gMSkgewogICAgICAgIGlmIChub2RlLmFyZ3VtZW50cy5uYW1lZC5zaW5nbGUubmFtZSAhPSAnZGVmYXVsdFZhbHVlJykgewogICAgICAgICAgcmV0dXJuIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogICAgICAgIH0KICAgICAgICBkZWZhdWx0VmFsdWUgPSB2aXNpdChub2RlLmFyZ3VtZW50cy5uYW1lZC5zaW5nbGUudmFsdWUpOwogICAgICAgIGlmIChkZWZhdWx0VmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgaWYgKG1lbWJlci5lbmNsb3NpbmdDbGFzcyA9PSBfY29tbW9uRWxlbWVudHMuYm9vbENsYXNzKSB7CiAgICAgICAgcmV0dXJuIG5ldyBCb29sRnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9uKG5hbWUsIGRlZmF1bHRWYWx1ZSk7CiAgICAgIH0gZWxzZSBpZiAobWVtYmVyLmVuY2xvc2luZ0NsYXNzID09IF9jb21tb25FbGVtZW50cy5pbnRDbGFzcykgewogICAgICAgIHJldHVybiBuZXcgSW50RnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9uKG5hbWUsIGRlZmF1bHRWYWx1ZSk7CiAgICAgIH0gZWxzZSBpZiAobWVtYmVyLmVuY2xvc2luZ0NsYXNzID09IF9jb21tb25FbGVtZW50cy5zdHJpbmdDbGFzcykgewogICAgICAgIHJldHVybiBuZXcgU3RyaW5nRnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9uKG5hbWUsIGRlZmF1bHRWYWx1ZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiB2aXNpdExvZ2ljYWxFeHByZXNzaW9uKGlyLkxvZ2ljYWxFeHByZXNzaW9uIG5vZGUpIHsKICAgIEJpbmFyeU9wZXJhdG9yIG9wZXJhdG9yID0gQmluYXJ5T3BlcmF0b3IucGFyc2Uobm9kZS5vcGVyYXRvcik7CiAgICBpZiAob3BlcmF0b3IgIT0gbnVsbCAmJgogICAgICAgIEJpbmFyeUNvbnN0YW50RXhwcmVzc2lvbi5wb3RlbnRpYWxPcGVyYXRvcihvcGVyYXRvcikpIHsKICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIGxlZnQgPSB2aXNpdChub2RlLmxlZnQpOwogICAgICBpZiAobGVmdCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIHJpZ2h0ID0gdmlzaXQobm9kZS5yaWdodCk7CiAgICAgIGlmIChyaWdodCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuIG5ldyBCaW5hcnlDb25zdGFudEV4cHJlc3Npb24obGVmdCwgb3BlcmF0b3IsIHJpZ2h0KTsKICAgIH0KICAgIHJldHVybiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiB2aXNpdExldChpci5MZXQgbm9kZSkgewogICAgaXIuRXhwcmVzc2lvbiBib2R5ID0gbm9kZS5ib2R5OwogICAgaWYgKGJvZHkgaXMgaXIuQ29uZGl0aW9uYWxFeHByZXNzaW9uKSB7CiAgICAgIGlyLkV4cHJlc3Npb24gY29uZGl0aW9uID0gYm9keS5jb25kaXRpb247CiAgICAgIGlmIChjb25kaXRpb24gaXMgaXIuTWV0aG9kSW52b2NhdGlvbikgewogICAgICAgIGlyLkV4cHJlc3Npb24gcmVjZWl2ZXIgPSBjb25kaXRpb24ucmVjZWl2ZXI7CiAgICAgICAgaXIuRXhwcmVzc2lvbiBvdGhlcndpc2UgPSBib2R5Lm90aGVyd2lzZTsKICAgICAgICBpZiAoY29uZGl0aW9uLm5hbWUubmFtZSA9PSBCaW5hcnlPcGVyYXRvci5FUS5uYW1lICYmCiAgICAgICAgICAgIHJlY2VpdmVyIGlzIGlyLlZhcmlhYmxlR2V0ICYmCiAgICAgICAgICAgIGNvbmRpdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbC5zaW5nbGUgaXMgaXIuTnVsbExpdGVyYWwgJiYKICAgICAgICAgICAgb3RoZXJ3aXNlIGlzIGlyLlZhcmlhYmxlR2V0KSB7CiAgICAgICAgICBpZiAocmVjZWl2ZXIudmFyaWFibGUgPT0gbm9kZS52YXJpYWJsZSAmJgogICAgICAgICAgICAgIG90aGVyd2lzZS52YXJpYWJsZSA9PSBub2RlLnZhcmlhYmxlKSB7CiAgICAgICAgICAgIC8vIFdlIGhhdmUgPGxlZnQ+ID8/IDxyaWdodD4gZW5jb2RlZCBhczoKICAgICAgICAgICAgLy8gICAgbGV0ICMxID0gPGxlZnQ+IGluICMxID09IG51bGwgPyA8cmlnaHQ+IDogIzEKICAgICAgICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIGxlZnQgPSB2aXNpdChub2RlLnZhcmlhYmxlLmluaXRpYWxpemVyKTsKICAgICAgICAgICAgaWYgKGxlZnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIENvbnN0YW50RXhwcmVzc2lvbiByaWdodCA9IHZpc2l0KGJvZHkudGhlbik7CiAgICAgICAgICAgIGlmIChyaWdodCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIFtJRl9OVUxMXSBiaW5hcnkgY29uc3RhbnQgZXhwcmVzc2lvbgogICAgICAgICAgICAvLyB3aGVuIHRoZSByZXNvbHZlciBpcyByZW1vdmVkOyB0aGVuIHdlIG5vIGxvbmdlciBuZWVkIHRoZQogICAgICAgICAgICAvLyBleHByZXNzaW9ucyB0byBiZSBzdHJ1Y3R1cmFsbHkgZXF1aXZhbGVuY2UgZm9yIGVxdWl2YWxlbmNlCiAgICAgICAgICAgIC8vIHRlc3RpbmcuCiAgICAgICAgICAgIHJldHVybiBuZXcgQmluYXJ5Q29uc3RhbnRFeHByZXNzaW9uKAogICAgICAgICAgICAgICAgbGVmdCwgQmluYXJ5T3BlcmF0b3IuSUZfTlVMTCwgcmlnaHQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIHZpc2l0QmxvY2tFeHByZXNzaW9uKGlyLkJsb2NrRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgfQoKICAvLy8gQ29tcHV0ZSB0aGUgW0NvbnN0YW50Q29uc3RydWN0b3JdIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNvbnN0IGNvbnN0cnVjdG9yCiAgLy8vIFtub2RlXS4KICBDb25zdGFudENvbnN0cnVjdG9yIGNvbXB1dGVDb25zdGFudENvbnN0cnVjdG9yKGlyLkNvbnN0cnVjdG9yIG5vZGUpIHsKICAgIGFzc2VydChub2RlLmlzQ29uc3QpOwogICAgaXIuQ2xhc3MgY2xzID0gbm9kZS5lbmNsb3NpbmdDbGFzczsKICAgIEludGVyZmFjZVR5cGUgdHlwZSA9IGVsZW1lbnRNYXAuZ2V0VGhpc1R5cGUoZWxlbWVudE1hcC5nZXRDbGFzcyhjbHMpKTsKCiAgICBNYXA8ZHluYW1pYywgQ29uc3RhbnRFeHByZXNzaW9uPiBkZWZhdWx0VmFsdWVzID0KICAgICAgICA8ZHluYW1pYywgQ29uc3RhbnRFeHByZXNzaW9uPnt9OwogICAgaW50IHBhcmFtZXRlckluZGV4ID0gMDsKICAgIGZvciAoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBwYXJhbWV0ZXIKICAgICAgICBpbiBub2RlLmZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzKSB7CiAgICAgIGlmIChwYXJhbWV0ZXJJbmRleCA+PSBub2RlLmZ1bmN0aW9uLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpIHsKICAgICAgICBDb25zdGFudEV4cHJlc3Npb24gZGVmYXVsdFZhbHVlOwogICAgICAgIGlmIChwYXJhbWV0ZXIuaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICAgICAgZGVmYXVsdFZhbHVlID0gdmlzaXQocGFyYW1ldGVyLmluaXRpYWxpemVyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGVmYXVsdFZhbHVlID0gbmV3IE51bGxDb25zdGFudEV4cHJlc3Npb24oKTsKICAgICAgICB9CiAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICBkZWZhdWx0VmFsdWVzW3BhcmFtZXRlckluZGV4XSA9IGRlZmF1bHRWYWx1ZTsKICAgICAgfQogICAgICBwYXJhbWV0ZXJJbmRleCsrOwogICAgfQogICAgZm9yIChpci5WYXJpYWJsZURlY2xhcmF0aW9uIHBhcmFtZXRlciBpbiBub2RlLmZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycykgewogICAgICBDb25zdGFudEV4cHJlc3Npb24gZGVmYXVsdFZhbHVlID0gdmlzaXQocGFyYW1ldGVyLmluaXRpYWxpemVyKTsKICAgICAgaWYgKGRlZmF1bHRWYWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgZGVmYXVsdFZhbHVlc1twYXJhbWV0ZXIubmFtZV0gPSBkZWZhdWx0VmFsdWU7CiAgICB9CgogICAgYm9vbCBpc1JlZGlyZWN0aW5nID0gbm9kZS5pbml0aWFsaXplcnMubGVuZ3RoID09IDEgJiYKICAgICAgICBub2RlLmluaXRpYWxpemVycy5zaW5nbGUgaXMgaXIuUmVkaXJlY3RpbmdJbml0aWFsaXplcjsKCiAgICBNYXA8RmllbGRFbnRpdHksIENvbnN0YW50RXhwcmVzc2lvbj4gZmllbGRNYXAgPQogICAgICAgIDxGaWVsZEVudGl0eSwgQ29uc3RhbnRFeHByZXNzaW9uPnt9OwoKICAgIHZvaWQgcmVnaXN0ZXJGaWVsZChpci5GaWVsZCBmaWVsZCwgQ29uc3RhbnRFeHByZXNzaW9uIGNvbnN0YW50KSB7CiAgICAgIGZpZWxkTWFwW2VsZW1lbnRNYXAuZ2V0RmllbGQoZmllbGQpXSA9IGNvbnN0YW50OwogICAgfQoKICAgIGlmICghaXNSZWRpcmVjdGluZykgewogICAgICBmb3IgKGlyLkZpZWxkIGZpZWxkIGluIGNscy5maWVsZHMpIHsKICAgICAgICBpZiAoZmllbGQuaXNTdGF0aWMpIGNvbnRpbnVlOwogICAgICAgIGlmIChmaWVsZC5pbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgICByZWdpc3RlckZpZWxkKGZpZWxkLCB2aXNpdChmaWVsZC5pbml0aWFsaXplcikpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIENvbnN0cnVjdGVkQ29uc3RhbnRFeHByZXNzaW9uIHN1cGVyQ29uc3RydWN0b3JJbnZvY2F0aW9uOwogICAgTGlzdDxBc3NlcnRDb25zdGFudEV4cHJlc3Npb24+IGFzc2VydGlvbnMgPSA8QXNzZXJ0Q29uc3RhbnRFeHByZXNzaW9uPltdOwogICAgZm9yIChpci5Jbml0aWFsaXplciBpbml0aWFsaXplciBpbiBub2RlLmluaXRpYWxpemVycykgewogICAgICBpZiAoaW5pdGlhbGl6ZXIgaXMgaXIuRmllbGRJbml0aWFsaXplcikgewogICAgICAgIHJlZ2lzdGVyRmllbGQoaW5pdGlhbGl6ZXIuZmllbGQsIHZpc2l0KGluaXRpYWxpemVyLnZhbHVlKSk7CiAgICAgIH0gZWxzZSBpZiAoaW5pdGlhbGl6ZXIgaXMgaXIuU3VwZXJJbml0aWFsaXplcikgewogICAgICAgIHN1cGVyQ29uc3RydWN0b3JJbnZvY2F0aW9uID0gX2NvbXB1dGVDb25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgICAgICAgIGluaXRpYWxpemVyLnRhcmdldCwKICAgICAgICAgICAgaW5pdGlhbGl6ZXIuYXJndW1lbnRzLAogICAgICAgICAgICBpbml0aWFsaXplci5hcmd1bWVudHMudHlwZXMpOwogICAgICB9IGVsc2UgaWYgKGluaXRpYWxpemVyIGlzIGlyLlJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIpIHsKICAgICAgICBzdXBlckNvbnN0cnVjdG9ySW52b2NhdGlvbiA9IF9jb21wdXRlQ29uc3RydWN0b3JJbnZvY2F0aW9uKAogICAgICAgICAgICBpbml0aWFsaXplci50YXJnZXQsCiAgICAgICAgICAgIGluaXRpYWxpemVyLmFyZ3VtZW50cywKICAgICAgICAgICAgbm9kZS5lbmNsb3NpbmdDbGFzcy50aGlzVHlwZS50eXBlQXJndW1lbnRzKTsKICAgICAgfSBlbHNlIGlmIChpbml0aWFsaXplciBpcyBpci5Bc3NlcnRJbml0aWFsaXplcikgewogICAgICAgIENvbnN0YW50RXhwcmVzc2lvbiBjb25kaXRpb24gPSB2aXNpdChpbml0aWFsaXplci5zdGF0ZW1lbnQuY29uZGl0aW9uKTsKICAgICAgICBDb25zdGFudEV4cHJlc3Npb24gbWVzc2FnZSA9IGluaXRpYWxpemVyLnN0YXRlbWVudC5tZXNzYWdlICE9IG51bGwKICAgICAgICAgICAgPyB2aXNpdChpbml0aWFsaXplci5zdGF0ZW1lbnQubWVzc2FnZSkKICAgICAgICAgICAgOiBudWxsOwogICAgICAgIGFzc2VydGlvbnMuYWRkKG5ldyBBc3NlcnRDb25zdGFudEV4cHJlc3Npb24oY29uZGl0aW9uLCBtZXNzYWdlKSk7CiAgICAgIH0gZWxzZSBpZiAoaW5pdGlhbGl6ZXIgaXMgaXIuSW52YWxpZEluaXRpYWxpemVyKSB7CiAgICAgICAgU3RyaW5nIGNvbnN0cnVjdG9yTmFtZSA9ICcke2Nscy5uYW1lfS4ke25vZGUubmFtZX0nOwogICAgICAgIGVsZW1lbnRNYXAucmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgICBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShpbml0aWFsaXplciksCiAgICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQ09OU1RSVUNUT1IsCiAgICAgICAgICAgIHsnY29uc3RydWN0b3JOYW1lJzogY29uc3RydWN0b3JOYW1lfSk7CiAgICAgICAgcmV0dXJuIG5ldyBFcnJvbmVvdXNDb25zdGFudENvbnN0cnVjdG9yKCk7CiAgICAgIH0gZWxzZSBpZiAoaW5pdGlhbGl6ZXIgaXMgaXIuTG9jYWxJbml0aWFsaXplcikgewogICAgICAgIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBpbml0aWFsaXplci52YXJpYWJsZTsKICAgICAgICBDb25zdGFudEV4cHJlc3Npb24gY29uc3RhbnQgPSB2aXNpdCh2YXJpYWJsZS5pbml0aWFsaXplcik7CiAgICAgICAgaWYgKGNvbnN0YW50ICE9IG51bGwpIHsKICAgICAgICAgIF9pbml0aWFsaXplckxvY2Fsc1t2YXJpYWJsZV0gPSBjb25zdGFudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIFtfRXJyb25lb3VzSW5pdGlhbGl6ZXJWaXNpdG9yXSBpbgogICAgICAgICAgLy8gYHNzYS9idWlsZGVyX2tlcm5lbC5kYXJ0YCB0byBpZGVudGlmeSBlcnJvbmVvdXMgaW5pdGlhbGl6ZXIuCiAgICAgICAgICBTdHJpbmcgY29uc3RydWN0b3JOYW1lID0gJyR7Y2xzLm5hbWV9LiR7bm9kZS5uYW1lfSc7CiAgICAgICAgICBlbGVtZW50TWFwLnJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgICAgICBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShpbml0aWFsaXplciksCiAgICAgICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9DT05TVFJVQ1RPUiwKICAgICAgICAgICAgICB7J2NvbnN0cnVjdG9yTmFtZSc6IGNvbnN0cnVjdG9yTmFtZX0pOwogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvbmVvdXNDb25zdGFudENvbnN0cnVjdG9yKCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgICAnVW5leHBlY3RlZCBpbml0aWFsaXplciAkaW5pdGlhbGl6ZXIgKCR7aW5pdGlhbGl6ZXIucnVudGltZVR5cGV9KScpOwogICAgICB9CiAgICB9CiAgICBpZiAoaXNSZWRpcmVjdGluZykgewogICAgICByZXR1cm4gbmV3IFJlZGlyZWN0aW5nR2VuZXJhdGl2ZUNvbnN0YW50Q29uc3RydWN0b3IoCiAgICAgICAgICBkZWZhdWx0VmFsdWVzLCBzdXBlckNvbnN0cnVjdG9ySW52b2NhdGlvbik7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IEdlbmVyYXRpdmVDb25zdGFudENvbnN0cnVjdG9yKHR5cGUsIGRlZmF1bHRWYWx1ZXMsIGZpZWxkTWFwLAogICAgICAgICAgYXNzZXJ0aW9ucywgc3VwZXJDb25zdHJ1Y3Rvckludm9jYXRpb24pOwogICAgfQogIH0KfQoKLy8vIFZpc2l0b3IgdGhhdCBjb252ZXJ0cyBrZXJuZWwgZGFydCB0eXBlcyBpbnRvIFtEYXJ0VHlwZV0uCmNsYXNzIERhcnRUeXBlQ29udmVydGVyIGV4dGVuZHMgaXIuRGFydFR5cGVWaXNpdG9yPERhcnRUeXBlPiB7CiAgZmluYWwgSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcDsKICBmaW5hbCBNYXA8aXIuVHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IGN1cnJlbnRGdW5jdGlvblR5cGVQYXJhbWV0ZXJzID0KICAgICAgPGlyLlR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogIGJvb2wgdG9wTGV2ZWwgPSB0cnVlOwoKICBEYXJ0VHlwZUNvbnZlcnRlcih0aGlzLmVsZW1lbnRNYXApOwoKICBEYXJ0VHlwZSBjb252ZXJ0KGlyLkRhcnRUeXBlIHR5cGUpIHsKICAgIHRvcExldmVsID0gdHJ1ZTsKICAgIHJldHVybiB0eXBlLmFjY2VwdCh0aGlzKTsKICB9CgogIC8vLyBWaXNpdCBhIGlubmVyIHR5cGUuCiAgRGFydFR5cGUgdmlzaXRUeXBlKGlyLkRhcnRUeXBlIHR5cGUpIHsKICAgIHRvcExldmVsID0gZmFsc2U7CiAgICByZXR1cm4gdHlwZS5hY2NlcHQodGhpcyk7CiAgfQoKICBJbnRlcmZhY2VUeXBlIHZpc2l0U3VwZXJ0eXBlKGlyLlN1cGVydHlwZSBub2RlKSB7CiAgICBDbGFzc0VudGl0eSBjbHMgPSBlbGVtZW50TWFwLmdldENsYXNzKG5vZGUuY2xhc3NOb2RlKTsKICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVHlwZShjbHMsIHZpc2l0VHlwZXMobm9kZS50eXBlQXJndW1lbnRzKSk7CiAgfQoKICBMaXN0PERhcnRUeXBlPiB2aXNpdFR5cGVzKExpc3Q8aXIuRGFydFR5cGU+IHR5cGVzKSB7CiAgICB0b3BMZXZlbCA9IGZhbHNlOwogICAgcmV0dXJuIG5ldyBMaXN0LmdlbmVyYXRlKAogICAgICAgIHR5cGVzLmxlbmd0aCwgKGludCBpbmRleCkgPT4gdHlwZXNbaW5kZXhdLmFjY2VwdCh0aGlzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdFR5cGVQYXJhbWV0ZXJUeXBlKGlyLlR5cGVQYXJhbWV0ZXJUeXBlIG5vZGUpIHsKICAgIERhcnRUeXBlIHR5cGVQYXJhbWV0ZXIgPSBjdXJyZW50RnVuY3Rpb25UeXBlUGFyYW1ldGVyc1tub2RlLnBhcmFtZXRlcl07CiAgICBpZiAodHlwZVBhcmFtZXRlciAhPSBudWxsKSB7CiAgICAgIHJldHVybiB0eXBlUGFyYW1ldGVyOwogICAgfQogICAgaWYgKG5vZGUucGFyYW1ldGVyLnBhcmVudCBpcyBpci5UeXBlZGVmKSB7CiAgICAgIC8vIFR5cGVkZWZzIGFyZSBvbmx5IHVzZWQgaW4gdHlwZSBsaXRlcmFscyBzbyB3ZSBuZXZlciBuZWVkIHRoZWlyIHR5cGUKICAgICAgLy8gdmFyaWFibGVzLgogICAgICByZXR1cm4gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgIH0KICAgIHJldHVybiBuZXcgVHlwZVZhcmlhYmxlVHlwZShlbGVtZW50TWFwLmdldFR5cGVWYXJpYWJsZShub2RlLnBhcmFtZXRlcikpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRGdW5jdGlvblR5cGUoaXIuRnVuY3Rpb25UeXBlIG5vZGUpIHsKICAgIGludCBpbmRleCA9IDA7CiAgICBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiB0eXBlVmFyaWFibGVzOwogICAgZm9yIChpci5UeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIgaW4gbm9kZS50eXBlUGFyYW1ldGVycykgewogICAgICBGdW5jdGlvblR5cGVWYXJpYWJsZSB0eXBlVmFyaWFibGUgPSBuZXcgRnVuY3Rpb25UeXBlVmFyaWFibGUoaW5kZXgpOwogICAgICBjdXJyZW50RnVuY3Rpb25UeXBlUGFyYW1ldGVyc1t0eXBlUGFyYW1ldGVyXSA9IHR5cGVWYXJpYWJsZTsKICAgICAgdHlwZVZhcmlhYmxlcyA/Pz0gPEZ1bmN0aW9uVHlwZVZhcmlhYmxlPltdOwogICAgICB0eXBlVmFyaWFibGVzLmFkZCh0eXBlVmFyaWFibGUpOwogICAgICBpbmRleCsrOwogICAgfQogICAgaWYgKHR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgdHlwZVZhcmlhYmxlcy5sZW5ndGg7IGluZGV4KyspIHsKICAgICAgICB0eXBlVmFyaWFibGVzW2luZGV4XS5ib3VuZCA9CiAgICAgICAgICAgIG5vZGUudHlwZVBhcmFtZXRlcnNbaW5kZXhdLmJvdW5kLmFjY2VwdCh0aGlzKTsKICAgICAgfQogICAgfQoKICAgIEZ1bmN0aW9uVHlwZSB0eXBlID0gbmV3IEZ1bmN0aW9uVHlwZSgKICAgICAgICB2aXNpdFR5cGUobm9kZS5yZXR1cm5UeXBlKSwKICAgICAgICB2aXNpdFR5cGVzKG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMKICAgICAgICAgICAgLnRha2Uobm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50KQogICAgICAgICAgICAudG9MaXN0KCkpLAogICAgICAgIHZpc2l0VHlwZXMobm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycwogICAgICAgICAgICAuc2tpcChub2RlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpCiAgICAgICAgICAgIC50b0xpc3QoKSksCiAgICAgICAgbm9kZS5uYW1lZFBhcmFtZXRlcnMubWFwKChuKSA9PiBuLm5hbWUpLnRvTGlzdCgpLAogICAgICAgIG5vZGUubmFtZWRQYXJhbWV0ZXJzLm1hcCgobikgPT4gdmlzaXRUeXBlKG4udHlwZSkpLnRvTGlzdCgpLAogICAgICAgIHR5cGVWYXJpYWJsZXMgPz8gY29uc3QgPEZ1bmN0aW9uVHlwZVZhcmlhYmxlPltdKTsKICAgIGZvciAoaXIuVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyIGluIG5vZGUudHlwZVBhcmFtZXRlcnMpIHsKICAgICAgY3VycmVudEZ1bmN0aW9uVHlwZVBhcmFtZXRlcnMucmVtb3ZlKHR5cGVQYXJhbWV0ZXIpOwogICAgfQogICAgcmV0dXJuIHR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdEludGVyZmFjZVR5cGUoaXIuSW50ZXJmYWNlVHlwZSBub2RlKSB7CiAgICBDbGFzc0VudGl0eSBjbHMgPSBlbGVtZW50TWFwLmdldENsYXNzKG5vZGUuY2xhc3NOb2RlKTsKICAgIGlmIChjbHMubmFtZSA9PSAnRnV0dXJlT3InICYmCiAgICAgICAgY2xzLmxpYnJhcnkgPT0gZWxlbWVudE1hcC5jb21tb25FbGVtZW50cy5hc3luY0xpYnJhcnkpIHsKICAgICAgcmV0dXJuIG5ldyBGdXR1cmVPclR5cGUodmlzaXRUeXBlcyhub2RlLnR5cGVBcmd1bWVudHMpLnNpbmdsZSk7CiAgICB9CiAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUoY2xzLCB2aXNpdFR5cGVzKG5vZGUudHlwZUFyZ3VtZW50cykpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRWb2lkVHlwZShpci5Wb2lkVHlwZSBub2RlKSB7CiAgICByZXR1cm4gY29uc3QgVm9pZFR5cGUoKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0RHluYW1pY1R5cGUoaXIuRHluYW1pY1R5cGUgbm9kZSkgewogICAgcmV0dXJuIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdEludmFsaWRUeXBlKGlyLkludmFsaWRUeXBlIG5vZGUpIHsKICAgIC8vIFJvb3QgdXNlcyBzdWNoIGEgYG8gaXMgVW5yZXNvbHZlZGAgYW5kIGBvIGFzIFVucmVzb2x2ZWRgIG11c3QgYmUgc3BlY2lhbAogICAgLy8gY2FzZWQgaW4gdGhlIGJ1aWxkZXIsIG5lc3RlZCBpbnZhbGlkIHR5cGVzIGFyZSB0cmVhdGVkIGFzIGBkeW5hbWljYC4KICAgIHJldHVybiBjb25zdCBEeW5hbWljVHlwZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRCb3R0b21UeXBlKGlyLkJvdHRvbVR5cGUgbm9kZSkgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuY29tbW9uRWxlbWVudHMubnVsbFR5cGU7CiAgfQp9CgpjbGFzcyBDb25zdGFudFZhbHVlZmllciBleHRlbmRzIGlyLkNvbXB1dGVPbmNlQ29uc3RhbnRWaXNpdG9yPENvbnN0YW50VmFsdWU+IHsKICBmaW5hbCBJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwOwoKICBDb25zdGFudFZhbHVlZmllcih0aGlzLmVsZW1lbnRNYXApOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGRlZmF1bHRDb25zdGFudChpci5Db25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiVW5leHBlY3RlZCBjb25zdGFudCAkbm9kZSAoJHtub2RlLnJ1bnRpbWVUeXBlfSkuIik7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0VW5ldmFsdWF0ZWRDb25zdGFudChpci5VbmV2YWx1YXRlZENvbnN0YW50IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJVbmV4cGVjdGVkIHVuZXZhbHVhdGVkIGNvbnN0YW50ICRub2RlLiIpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdFR5cGVMaXRlcmFsQ29uc3RhbnQoaXIuVHlwZUxpdGVyYWxDb25zdGFudCBub2RlKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZVR5cGUoCiAgICAgICAgZWxlbWVudE1hcC5jb21tb25FbGVtZW50cywgZWxlbWVudE1hcC5nZXREYXJ0VHlwZShub2RlLnR5cGUpKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRUZWFyT2ZmQ29uc3RhbnQoaXIuVGVhck9mZkNvbnN0YW50IG5vZGUpIHsKICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uID0gZWxlbWVudE1hcC5nZXRNZXRob2Qobm9kZS5wcm9jZWR1cmUpOwogICAgRGFydFR5cGUgdHlwZSA9IGVsZW1lbnRNYXAuZ2V0RnVuY3Rpb25UeXBlKG5vZGUucHJvY2VkdXJlLmZ1bmN0aW9uKTsKICAgIHJldHVybiBuZXcgRnVuY3Rpb25Db25zdGFudFZhbHVlKGZ1bmN0aW9uLCB0eXBlKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50KAogICAgICBpci5QYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50IG5vZGUpIHsKICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPSBbXTsKICAgIGZvciAoaXIuRGFydFR5cGUgdHlwZSBpbiBub2RlLnR5cGVzKSB7CiAgICAgIHR5cGVBcmd1bWVudHMuYWRkKGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUodHlwZSkpOwogICAgfQogICAgRnVuY3Rpb25Db25zdGFudFZhbHVlIGZ1bmN0aW9uID0gdmlzaXRDb25zdGFudChub2RlLnRlYXJPZmZDb25zdGFudCk7CiAgICByZXR1cm4gbmV3IEluc3RhbnRpYXRpb25Db25zdGFudFZhbHVlKHR5cGVBcmd1bWVudHMsIGZ1bmN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRJbnN0YW5jZUNvbnN0YW50KGlyLkluc3RhbmNlQ29uc3RhbnQgbm9kZSkgewogICAgSW50ZXJmYWNlVHlwZSB0eXBlID0KICAgICAgICBlbGVtZW50TWFwLmNyZWF0ZUludGVyZmFjZVR5cGUobm9kZS5jbGFzc05vZGUsIG5vZGUudHlwZUFyZ3VtZW50cyk7CiAgICBNYXA8RmllbGRFbnRpdHksIENvbnN0YW50VmFsdWU+IGZpZWxkcyA9IHt9OwogICAgbm9kZS5maWVsZFZhbHVlcy5mb3JFYWNoKChpci5SZWZlcmVuY2UgcmVmZXJlbmNlLCBpci5Db25zdGFudCB2YWx1ZSkgewogICAgICBGaWVsZEVudGl0eSBmaWVsZCA9IGVsZW1lbnRNYXAuZ2V0RmllbGQocmVmZXJlbmNlLmFzRmllbGQpOwogICAgICBmaWVsZHNbZmllbGRdID0gdmlzaXRDb25zdGFudCh2YWx1ZSk7CiAgICB9KTsKICAgIHJldHVybiBuZXcgQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlKHR5cGUsIGZpZWxkcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0TGlzdENvbnN0YW50KGlyLkxpc3RDb25zdGFudCBub2RlKSB7CiAgICBMaXN0PENvbnN0YW50VmFsdWU+IGVsZW1lbnRzID0gW107CiAgICBmb3IgKGlyLkNvbnN0YW50IGVsZW1lbnQgaW4gbm9kZS5lbnRyaWVzKSB7CiAgICAgIGVsZW1lbnRzLmFkZCh2aXNpdENvbnN0YW50KGVsZW1lbnQpKTsKICAgIH0KICAgIERhcnRUeXBlIHR5cGUgPSBlbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzCiAgICAgICAgLmxpc3RUeXBlKGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUobm9kZS50eXBlQXJndW1lbnQpKTsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uY3JlYXRlTGlzdCh0eXBlLCBlbGVtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0U2V0Q29uc3RhbnQoaXIuU2V0Q29uc3RhbnQgbm9kZSkgewogICAgTGlzdDxDb25zdGFudFZhbHVlPiBlbGVtZW50cyA9IFtdOwogICAgZm9yIChpci5Db25zdGFudCBlbGVtZW50IGluIG5vZGUuZW50cmllcykgewogICAgICBlbGVtZW50cy5hZGQodmlzaXRDb25zdGFudChlbGVtZW50KSk7CiAgICB9CiAgICBEYXJ0VHlwZSB0eXBlID0gZWxlbWVudE1hcC5jb21tb25FbGVtZW50cwogICAgICAgIC5zZXRUeXBlKGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUobm9kZS50eXBlQXJndW1lbnQpKTsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uY3JlYXRlU2V0KGVsZW1lbnRNYXAuY29tbW9uRWxlbWVudHMsIHR5cGUsIGVsZW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRNYXBDb25zdGFudChpci5NYXBDb25zdGFudCBub2RlKSB7CiAgICBMaXN0PENvbnN0YW50VmFsdWU+IGtleXMgPSBbXTsKICAgIExpc3Q8Q29uc3RhbnRWYWx1ZT4gdmFsdWVzID0gW107CiAgICBmb3IgKGlyLkNvbnN0YW50TWFwRW50cnkgZWxlbWVudCBpbiBub2RlLmVudHJpZXMpIHsKICAgICAga2V5cy5hZGQodmlzaXRDb25zdGFudChlbGVtZW50LmtleSkpOwogICAgICB2YWx1ZXMuYWRkKHZpc2l0Q29uc3RhbnQoZWxlbWVudC52YWx1ZSkpOwogICAgfQogICAgRGFydFR5cGUgdHlwZSA9IGVsZW1lbnRNYXAuY29tbW9uRWxlbWVudHMubWFwVHlwZSgKICAgICAgICBlbGVtZW50TWFwLmdldERhcnRUeXBlKG5vZGUua2V5VHlwZSksCiAgICAgICAgZWxlbWVudE1hcC5nZXREYXJ0VHlwZShub2RlLnZhbHVlVHlwZSkpOwogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVNYXAoCiAgICAgICAgZWxlbWVudE1hcC5jb21tb25FbGVtZW50cywgdHlwZSwga2V5cywgdmFsdWVzKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRTeW1ib2xDb25zdGFudChpci5TeW1ib2xDb25zdGFudCBub2RlKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZVN5bWJvbChlbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzLCBub2RlLm5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdFN0cmluZ0NvbnN0YW50KGlyLlN0cmluZ0NvbnN0YW50IG5vZGUpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uY3JlYXRlU3RyaW5nKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdERvdWJsZUNvbnN0YW50KGlyLkRvdWJsZUNvbnN0YW50IG5vZGUpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uY3JlYXRlRG91YmxlKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdEludENvbnN0YW50KGlyLkludENvbnN0YW50IG5vZGUpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uY3JlYXRlSW50RnJvbUludChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRCb29sQ29uc3RhbnQoaXIuQm9vbENvbnN0YW50IG5vZGUpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uY3JlYXRlQm9vbChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXROdWxsQ29uc3RhbnQoaXIuTnVsbENvbnN0YW50IG5vZGUpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uY3JlYXRlTnVsbCgpOwogIH0KfQqDFwBOTjwBKDQvMTUBGT8pKCMiJCUhIRoBUBs5DEIBDEEqOS4mFwYaBAEMPyopHQYRBAIBPhpHHiMYTTYBQAFDATE1L0EuOzQwBhUEAQw9GxkGEQQBSzw0NykaBhEEAUJBNjUpHwY2OykfBhYEAT8dHlFPHSFJKi5GKzAWBAEMUSQqPAQBDD1FHBcGMzdIGTcPQj8IKC8GJAQBDDkkMEwpMkNIPQYkBAEMPSkEAQw9MwQBDDsmNQQBDEE1BAEMQTUEAQxBNQQBDE1LKjsEAQw7GSYGPUE8Pi4xJBU1JhkGJkQEAQw7GSYGRj45NCYZBiY3BAEMPRkmBkY+OTQmGQYnOAQBDD0RNxoYKCAhTjgSLzAsPigNJgYzBAEMPzkpNzcEAQxBI0EzMBUIBjwpSwQBDC05KUcEAQxROigzJjknTAQBDD0mGRMGOCc5BAEMR0tLKyYGMR5BKQ84CB4+LUIIBjFGHjgnTChECAYkBAEMRz03MypHJ0goPQgzMUklJy5CKgpBLwhATkZNSVAIBiQEAQxJQxxAMiU0JkIGJAQBDC0kLDAuNTI9KkcrNDU1P0grOSxQSEoYMTYMCggGJAQBDEUkBAFPDkgaKEsBNSkcKjFEKS03ETcKLzYIGAZORi00BgE6PwE0LQFGNwYBGismKToKCAYBPk48MEQ3RCAjKj1EICM5OE9LMxRKOT0wODYzMzdAQyAzEUhKPzI6ODU1Cg8kUQgGGTs2DU4zBgQCAT0/I0gmGAEmAScVHgQBGikWHgQBNDtDBAE3Fh5BBAEMP0whHAYvTRQiBk0EAQw1Ey5CS0MyJw8GIUMlOwgGASokLS8YLS8YOkU6QjsGEQQBDDc7IkFGBkMEAQwtHQQBDDMgBAEMM1BMIAQBDDEvBAIBTyMBJgEMNCA9BAEMSEoEAQxIJ0cEAQxAREk2BAEMMy4nKzcGSkQEAQxCGUwxS0IsCDcEAQw6JzAsBi4+NwQBDDgnMCwGLj1RBAEMOCMlOCwwBjcuMSY4BAEMPk8EAQw+NQQBDD41BAEMODkEAQw6MwQBDDopBAIBJXBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL3Zpc2l0b3JzLmRhcnQtc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMva2VybmVsL2Vudi5kYXJ0wAByuy8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMua2VybmVsLmVudjsKCmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9kYXJ0MmpzLmRhcnQnCiAgICBzaG93IGlzUmVkaXJlY3RpbmdGYWN0b3J5OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xvbmUuZGFydCc7CmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6Y29sbGVjdGlvbi9jb2xsZWN0aW9uLmRhcnQnIHNob3cgbWVyZ2VTb3J0OyAvLyBhIHN0YWJsZSBzb3J0LgoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL2NvbnN0cnVjdG9ycy5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvZXhwcmVzc2lvbnMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pci9lbGVtZW50X21hcC5kYXJ0JzsKaW1wb3J0ICcuLi9pci9zdGF0aWNfdHlwZV9jYWNoZS5kYXJ0JzsKaW1wb3J0ICcuLi9pci92aXNpdG9ycy5kYXJ0JzsKaW1wb3J0ICcuLi9pci91dGlsLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL2VsZW1lbnRfbWFwLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL2Vudi5kYXJ0JzsKaW1wb3J0ICcuLi9vcmRlcmVkX3R5cGVzZXQuZGFydCc7CmltcG9ydCAnLi4vc3NhL3R5cGVfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9tZW1iZXJfdXNhZ2UuZGFydCc7CmltcG9ydCAnZWxlbWVudF9tYXBfaW1wbC5kYXJ0JzsKCi8vLyBFbnZpcm9ubWVudCBmb3IgZmFzdCBsb29rdXAgb2YgY29tcG9uZW50IGxpYnJhcmllcy4KY2xhc3MgS1Byb2dyYW1FbnYgewogIGZpbmFsIFNldDxpci5Db21wb25lbnQ+IF9jb21wb25lbnRzID0gbmV3IFNldDxpci5Db21wb25lbnQ+KCk7CgogIE1hcDxVcmksIEtMaWJyYXJ5RW52PiBfbGlicmFyeU1hcDsKCiAgLy8vIFRPRE8oam9obm5pd2ludGhlcik6IEhhbmRsZSBhcmJpdHJhcnkgbG9hZCBvcmRlciBpZiBuZWVkZWQuCiAgaXIuTWVtYmVyIGdldCBtYWluTWV0aG9kID0+IF9jb21wb25lbnRzLmZpcnN0Py5tYWluTWV0aG9kOwoKICBpci5Db21wb25lbnQgZ2V0IG1haW5Db21wb25lbnQgPT4gX2NvbXBvbmVudHMuZmlyc3Q7CgogIHZvaWQgYWRkQ29tcG9uZW50KGlyLkNvbXBvbmVudCBjb21wb25lbnQpIHsKICAgIGlmIChfY29tcG9uZW50cy5hZGQoY29tcG9uZW50KSkgewogICAgICBpZiAoX2xpYnJhcnlNYXAgIT0gbnVsbCkgewogICAgICAgIF9hZGRMaWJyYXJpZXMoY29tcG9uZW50KTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBfYWRkTGlicmFyaWVzKGlyLkNvbXBvbmVudCBjb21wb25lbnQpIHsKICAgIGZvciAoaXIuTGlicmFyeSBsaWJyYXJ5IGluIGNvbXBvbmVudC5saWJyYXJpZXMpIHsKICAgICAgX2xpYnJhcnlNYXBbbGlicmFyeS5pbXBvcnRVcmldID0gbmV3IEtMaWJyYXJ5RW52KGxpYnJhcnkpOwogICAgfQogIH0KCiAgdm9pZCBfZW5zdXJlTGlicmFyeU1hcCgpIHsKICAgIGlmIChfbGlicmFyeU1hcCA9PSBudWxsKSB7CiAgICAgIF9saWJyYXJ5TWFwID0gPFVyaSwgS0xpYnJhcnlFbnY+e307CiAgICAgIGZvciAoaXIuQ29tcG9uZW50IGNvbXBvbmVudCBpbiBfY29tcG9uZW50cykgewogICAgICAgIF9hZGRMaWJyYXJpZXMoY29tcG9uZW50KTsKICAgICAgfQogICAgfQogIH0KCiAgLy8vIFJldHVybiB0aGUgW0tMaWJyYXJ5RW52XSBmb3IgdGhlIGxpYnJhcnkgd2l0aCB0aGUgY2Fub25pY2FsIFt1cmldLgogIEtMaWJyYXJ5RW52IGxvb2t1cExpYnJhcnkoVXJpIHVyaSkgewogICAgX2Vuc3VyZUxpYnJhcnlNYXAoKTsKICAgIHJldHVybiBfbGlicmFyeU1hcFt1cmldOwogIH0KCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBsaWJyYXJ5IGluIHRoaXMgZW52aXJvbm1lbnQuCiAgdm9pZCBmb3JFYWNoTGlicmFyeSh2b2lkIGYoS0xpYnJhcnlFbnYgbGlicmFyeSkpIHsKICAgIF9lbnN1cmVMaWJyYXJ5TWFwKCk7CiAgICBfbGlicmFyeU1hcC52YWx1ZXMuZm9yRWFjaChmKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbGlicmFyaWVzIGluIHRoaXMgZW52aXJvbm1lbnQuCiAgaW50IGdldCBsZW5ndGggewogICAgX2Vuc3VyZUxpYnJhcnlNYXAoKTsKICAgIHJldHVybiBfbGlicmFyeU1hcC5sZW5ndGg7CiAgfQoKICAvLy8gQ29udmVydCB0aGlzIFtLUHJvZ3JhbUVudl0gdG8gdGhlIGNvcnJlc3BvbmRpbmcgW0pQcm9ncmFtRW52XS4KICBKUHJvZ3JhbUVudiBjb252ZXJ0KCkgPT4gbmV3IEpQcm9ncmFtRW52KF9jb21wb25lbnRzKTsKfQoKLy8vIEVudmlyb25tZW50IGZvciBmYXN0IGxvb2t1cCBvZiBsaWJyYXJ5IGNsYXNzZXMgYW5kIG1lbWJlcnMuCmNsYXNzIEtMaWJyYXJ5RW52IHsKICBmaW5hbCBpci5MaWJyYXJ5IGxpYnJhcnk7CgogIE1hcDxTdHJpbmcsIEtDbGFzc0Vudj4gX2NsYXNzTWFwOwogIE1hcDxTdHJpbmcsIGlyLk1lbWJlcj4gX21lbWJlck1hcDsKICBNYXA8U3RyaW5nLCBpci5NZW1iZXI+IF9zZXR0ZXJNYXA7CgogIEtMaWJyYXJ5RW52KHRoaXMubGlicmFyeSk7CgogIHZvaWQgX2Vuc3VyZUNsYXNzTWFwKCkgewogICAgaWYgKF9jbGFzc01hcCA9PSBudWxsKSB7CiAgICAgIF9jbGFzc01hcCA9IDxTdHJpbmcsIEtDbGFzc0Vudj57fTsKICAgICAgZm9yIChpci5DbGFzcyBjbHMgaW4gbGlicmFyeS5jbGFzc2VzKSB7CiAgICAgICAgX2NsYXNzTWFwW2Nscy5uYW1lXSA9IG5ldyBLQ2xhc3NFbnZJbXBsKGNscyk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBSZXR1cm4gdGhlIFtLQ2xhc3NFbnZdIGZvciB0aGUgY2xhc3MgW25hbWVdIGluIFtsaWJyYXJ5XS4KICBLQ2xhc3NFbnYgbG9va3VwQ2xhc3MoU3RyaW5nIG5hbWUpIHsKICAgIF9lbnN1cmVDbGFzc01hcCgpOwogICAgcmV0dXJuIF9jbGFzc01hcFtuYW1lXTsKICB9CgogIC8vLyBDYWxscyBbZl0gZm9yIGVhY2ggY2xhc3MgaW4gdGhpcyBsaWJyYXJ5LgogIHZvaWQgZm9yRWFjaENsYXNzKHZvaWQgZihLQ2xhc3NFbnYgY2xzKSkgewogICAgX2Vuc3VyZUNsYXNzTWFwKCk7CiAgICBfY2xhc3NNYXAudmFsdWVzLmZvckVhY2goZik7CiAgfQoKICB2b2lkIF9lbnN1cmVNZW1iZXJNYXBzKCkgewogICAgaWYgKF9tZW1iZXJNYXAgPT0gbnVsbCkgewogICAgICBfbWVtYmVyTWFwID0gPFN0cmluZywgaXIuTWVtYmVyPnt9OwogICAgICBfc2V0dGVyTWFwID0gPFN0cmluZywgaXIuTWVtYmVyPnt9OwogICAgICBmb3IgKGlyLk1lbWJlciBtZW1iZXIgaW4gbGlicmFyeS5tZW1iZXJzKSB7CiAgICAgICAgaWYgKG1lbWJlci5uYW1lLm5hbWUuY29udGFpbnMoJyMnKSkgewogICAgICAgICAgLy8gU2tpcCBzeW50aGV0aWMgLmRpbGwgbWVtYmVycy4KICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAobWVtYmVyIGlzIGlyLlByb2NlZHVyZSkgewogICAgICAgICAgaWYgKG1lbWJlci5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuU2V0dGVyKSB7CiAgICAgICAgICAgIF9zZXR0ZXJNYXBbbWVtYmVyLm5hbWUubmFtZV0gPSBtZW1iZXI7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfbWVtYmVyTWFwW21lbWJlci5uYW1lLm5hbWVdID0gbWVtYmVyOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAobWVtYmVyIGlzIGlyLkZpZWxkKSB7CiAgICAgICAgICBfbWVtYmVyTWFwW21lbWJlci5uYW1lLm5hbWVdID0gbWVtYmVyOwogICAgICAgICAgaWYgKG1lbWJlci5pc011dGFibGUpIHsKICAgICAgICAgICAgX3NldHRlck1hcFttZW1iZXIubmFtZS5uYW1lXSA9IG1lbWJlcjsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgICAgTk9fTE9DQVRJT05fU1BBTk5BQkxFLCAiVW5leHBlY3RlZCBsaWJyYXJ5IG1lbWJlciBub2RlOiAkbWVtYmVyIik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICAvLy8gUmV0dXJuIHRoZSBbaXIuTWVtYmVyXSBmb3IgdGhlIG1lbWJlciBbbmFtZV0gaW4gW2xpYnJhcnldLgogIGlyLk1lbWJlciBsb29rdXBNZW1iZXIoU3RyaW5nIG5hbWUsIHtib29sIHNldHRlcjogZmFsc2V9KSB7CiAgICBfZW5zdXJlTWVtYmVyTWFwcygpOwogICAgcmV0dXJuIHNldHRlciA/IF9zZXR0ZXJNYXBbbmFtZV0gOiBfbWVtYmVyTWFwW25hbWVdOwogIH0KCiAgdm9pZCBmb3JFYWNoTWVtYmVyKHZvaWQgZihpci5NZW1iZXIgbWVtYmVyKSkgewogICAgX2Vuc3VyZU1lbWJlck1hcHMoKTsKICAgIF9tZW1iZXJNYXAudmFsdWVzLmZvckVhY2goZik7CiAgICBmb3IgKGlyLk1lbWJlciBtZW1iZXIgaW4gX3NldHRlck1hcC52YWx1ZXMpIHsKICAgICAgaWYgKG1lbWJlciBpcyBpci5Qcm9jZWR1cmUpIHsKICAgICAgICBmKG1lbWJlcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gU2tpcCBmaWVsZHM7IHRoZXNlIGFyZSBhbHNvIGluIF9tZW1iZXJNYXAuCiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBDb252ZXJ0IHRoaXMgW0tMaWJyYXJ5RW52XSB0byBhIGNvcnJlc3BvbmRpbmcgW0pMaWJyYXJ5RW52XSBjb250YWluaW5nCiAgLy8vIG9ubHkgdGhlIG1lbWJlcnMgaW4gW2xpdmVNZW1iZXJzXS4KICBKTGlicmFyeUVudiBjb252ZXJ0KElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsCiAgICAgIE1hcDxNZW1iZXJFbnRpdHksIE1lbWJlclVzYWdlPiBsaXZlTWVtYmVyVXNhZ2UpIHsKICAgIE1hcDxTdHJpbmcsIGlyLk1lbWJlcj4gbWVtYmVyTWFwOwogICAgTWFwPFN0cmluZywgaXIuTWVtYmVyPiBzZXR0ZXJNYXA7CiAgICBpZiAoX21lbWJlck1hcCA9PSBudWxsKSB7CiAgICAgIG1lbWJlck1hcCA9IGNvbnN0IDxTdHJpbmcsIGlyLk1lbWJlcj57fTsKICAgIH0gZWxzZSB7CiAgICAgIG1lbWJlck1hcCA9IDxTdHJpbmcsIGlyLk1lbWJlcj57fTsKICAgICAgX21lbWJlck1hcC5mb3JFYWNoKChTdHJpbmcgbmFtZSwgaXIuTWVtYmVyIG5vZGUpIHsKICAgICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gZWxlbWVudE1hcC5nZXRNZW1iZXIobm9kZSk7CiAgICAgICAgaWYgKGxpdmVNZW1iZXJVc2FnZS5jb250YWluc0tleShtZW1iZXIpKSB7CiAgICAgICAgICBtZW1iZXJNYXBbbmFtZV0gPSBub2RlOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICBpZiAoX3NldHRlck1hcCA9PSBudWxsKSB7CiAgICAgIHNldHRlck1hcCA9IGNvbnN0IDxTdHJpbmcsIGlyLk1lbWJlcj57fTsKICAgIH0gZWxzZSB7CiAgICAgIHNldHRlck1hcCA9IDxTdHJpbmcsIGlyLk1lbWJlcj57fTsKICAgICAgX3NldHRlck1hcC5mb3JFYWNoKChTdHJpbmcgbmFtZSwgaXIuTWVtYmVyIG5vZGUpIHsKICAgICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gZWxlbWVudE1hcC5nZXRNZW1iZXIobm9kZSk7CiAgICAgICAgaWYgKGxpdmVNZW1iZXJVc2FnZS5jb250YWluc0tleShtZW1iZXIpKSB7CiAgICAgICAgICBzZXR0ZXJNYXBbbmFtZV0gPSBub2RlOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gbmV3IEpMaWJyYXJ5RW52KGxpYnJhcnksIG1lbWJlck1hcCwgc2V0dGVyTWFwKTsKICB9Cn0KCmNsYXNzIEtMaWJyYXJ5RGF0YSB7CiAgZmluYWwgaXIuTGlicmFyeSBsaWJyYXJ5OwogIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IF9tZXRhZGF0YTsKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBdm9pZCBkaXJlY3QgYWNjZXNzIHRvIFtpbXBvcnRzXS4KICBNYXA8aXIuTGlicmFyeURlcGVuZGVuY3ksIEltcG9ydEVudGl0eT4gaW1wb3J0czsKCiAgS0xpYnJhcnlEYXRhKHRoaXMubGlicmFyeSk7CgogIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IGdldE1ldGFkYXRhKEtlcm5lbFRvRWxlbWVudE1hcEltcGwgZWxlbWVudE1hcCkgewogICAgcmV0dXJuIF9tZXRhZGF0YSA/Pz0gZWxlbWVudE1hcC5nZXRNZXRhZGF0YShsaWJyYXJ5LmFubm90YXRpb25zKTsKICB9CgogIEl0ZXJhYmxlPEltcG9ydEVudGl0eT4gZ2V0SW1wb3J0cyhLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIGVsZW1lbnRNYXApIHsKICAgIGlmIChpbXBvcnRzID09IG51bGwpIHsKICAgICAgTGlzdDxpci5MaWJyYXJ5RGVwZW5kZW5jeT4gZGVwZW5kZW5jaWVzID0gbGlicmFyeS5kZXBlbmRlbmNpZXM7CiAgICAgIGlmIChkZXBlbmRlbmNpZXMuaXNFbXB0eSkgewogICAgICAgIGltcG9ydHMgPSBjb25zdCA8aXIuTGlicmFyeURlcGVuZGVuY3ksIEltcG9ydEVudGl0eT57fTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbXBvcnRzID0gPGlyLkxpYnJhcnlEZXBlbmRlbmN5LCBJbXBvcnRFbnRpdHk+e307CiAgICAgICAgZGVwZW5kZW5jaWVzLmZvckVhY2goKGlyLkxpYnJhcnlEZXBlbmRlbmN5IG5vZGUpIHsKICAgICAgICAgIGlmIChub2RlLmlzRXhwb3J0KSByZXR1cm47CiAgICAgICAgICBpbXBvcnRzW25vZGVdID0gbmV3IEltcG9ydEVudGl0eSgKICAgICAgICAgICAgICBub2RlLmlzRGVmZXJyZWQsCiAgICAgICAgICAgICAgbm9kZS5uYW1lLAogICAgICAgICAgICAgIG5vZGUudGFyZ2V0TGlicmFyeS5pbXBvcnRVcmksCiAgICAgICAgICAgICAgZWxlbWVudE1hcC5nZXRMaWJyYXJ5KG5vZGUuZW5jbG9zaW5nTGlicmFyeSkuY2Fub25pY2FsVXJpKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGltcG9ydHMudmFsdWVzOwogIH0KCiAgLy8vIENvbnZlcnQgdGhpcyBbS0xpYnJhcnlEYXRhXSB0byB0aGUgY29ycmVzcG9uZGluZyBbSkxpYnJhcnlEYXRhXS4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBXaHkgaXNuJ3QgW2ltcG9ydHNdIGVuc3VyZWQgdG8gYmUgbm9uLW51bGwgaGVyZT8KICBKTGlicmFyeURhdGEgY29udmVydCgpIHsKICAgIHJldHVybiBuZXcgSkxpYnJhcnlEYXRhKGxpYnJhcnksIGltcG9ydHMpOwogIH0KfQoKLy8vIE1lbWJlciBkYXRhIGZvciBhIGNsYXNzLgphYnN0cmFjdCBjbGFzcyBLQ2xhc3NFbnYgewogIC8vLyBUaGUgW2lyLkNsYXNzXSB0aGF0IGRlZmluZWQgdGhlIGNsYXNzLCBpZiBhbnkuCiAgaXIuQ2xhc3MgZ2V0IGNsczsKCiAgLy8vIFdoZXRoZXIgdGhlIGNsYXNzIGlzIGFuIHVubmFtZWQgbWl4aW4gYXBwbGljYXRpb24uCiAgYm9vbCBnZXQgaXNVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbjsKCiAgLy8vIFdoZXRoZXIgdGhlIGNsYXNzIGlzIGEgbWl4aW4gYXBwbGljYXRpb24gdGhhdCBtaXhlcyBpbiBtZXRob2RzIHdpdGggc3VwZXIKICAvLy8gY2FsbHMuCiAgYm9vbCBnZXQgaXNTdXBlck1peGluQXBwbGljYXRpb247CgogIC8vLyBFbnN1cmVzIHRoYXQgYWxsIG1lbWJlcnMgaGF2ZSBiZWVuIGNvbXB1dGVkIGZvciBbY2xzXS4KICB2b2lkIGVuc3VyZU1lbWJlcnMoS2VybmVsVG9FbGVtZW50TWFwSW1wbCBlbGVtZW50TWFwKTsKCiAgLy8vIFJldHVybiB0aGUgW01lbWJlckVudGl0eV0gZm9yIHRoZSBtZW1iZXIgW25hbWVdIGluIHRoZSBjbGFzcy4gSWYgW3NldHRlcl0KICAvLy8gaXMgYHRydWVgLCB0aGUgc2V0dGVyIG9yIGFzc2lnbmFibGUgZmllbGQgY29ycmVzcG9uZGluZyB0byBbbmFtZV0gaXMKICAvLy8gcmV0dXJuZWQuCiAgTWVtYmVyRW50aXR5IGxvb2t1cE1lbWJlcihJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwLCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgc2V0dGVyOiBmYWxzZX0pOwoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIG1lbWJlciBvZiBbY2xzXS4KICB2b2lkIGZvckVhY2hNZW1iZXIoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgdm9pZCBmKE1lbWJlckVudGl0eSBtZW1iZXIpKTsKCiAgLy8vIFJldHVybiB0aGUgW0NvbnN0cnVjdG9yRW50aXR5XSBmb3IgdGhlIGNvbnN0cnVjdG9yIFtuYW1lXSBpbiBbY2xzXS4KICBDb25zdHJ1Y3RvckVudGl0eSBsb29rdXBDb25zdHJ1Y3RvcihJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwLCBTdHJpbmcgbmFtZSk7CgogIC8vLyBDYWxscyBbZl0gZm9yIGVhY2ggY29uc3RydWN0b3Igb2YgW2Nsc10uCiAgdm9pZCBmb3JFYWNoQ29uc3RydWN0b3IoCiAgICAgIElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIHZvaWQgZihDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvcikpOwoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIGNvbnN0cnVjdG9yIGJvZHkgZm9yIHRoZSBsaXZlIGNvbnN0cnVjdG9ycyBpbiB0aGUKICAvLy8gY2xhc3MuCiAgdm9pZCBmb3JFYWNoQ29uc3RydWN0b3JCb2R5KHZvaWQgZihDb25zdHJ1Y3RvckJvZHlFbnRpdHkgY29uc3RydWN0b3IpKTsKCiAgLy8vIENvbnZlcnQgdGhpcyBbS0NsYXNzRW52XSB0byB0aGUgY29ycmVzcG9uZGluZyBbSkNsYXNzRW52XSBjb250YWluaW5nIG9ubHkKICAvLy8gdGhlIG1lbWJlcnMgaW4gW2xpdmVNZW1iZXJzXS4KICBKQ2xhc3NFbnYgY29udmVydChJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwLAogICAgICBNYXA8TWVtYmVyRW50aXR5LCBNZW1iZXJVc2FnZT4gbGl2ZU1lbWJlclVzYWdlKTsKfQoKaW50IG9yZGVyQnlGaWxlT2Zmc2V0KGlyLlRyZWVOb2RlIGEsIGlyLlRyZWVOb2RlIGIpIHsKICB2YXIgYUxvYyA9IGEubG9jYXRpb247CiAgdmFyIGJMb2MgPSBiLmxvY2F0aW9uOwogIHZhciBhVXJpID0gJyR7YUxvYy5maWxlfSc7CiAgdmFyIGJVcmkgPSAnJHtiTG9jLmZpbGV9JzsKICB2YXIgdXJpQ29tcGFyZSA9IGFVcmkuY29tcGFyZVRvKGJVcmkpOwogIGlmICh1cmlDb21wYXJlICE9IDApIHJldHVybiB1cmlDb21wYXJlOwogIHJldHVybiBhLmZpbGVPZmZzZXQuY29tcGFyZVRvKGIuZmlsZU9mZnNldCk7Cn0KCi8vLyBFbnZpcm9ubWVudCBmb3IgZmFzdCBsb29rdXAgb2YgY2xhc3MgbWVtYmVycy4KY2xhc3MgS0NsYXNzRW52SW1wbCBpbXBsZW1lbnRzIEtDbGFzc0VudiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgaXIuQ2xhc3MgY2xzOwoKICBNYXA8U3RyaW5nLCBpci5NZW1iZXI+IF9jb25zdHJ1Y3Rvck1hcDsKICBNYXA8U3RyaW5nLCBpci5NZW1iZXI+IF9tZW1iZXJNYXA7CiAgTWFwPFN0cmluZywgaXIuTWVtYmVyPiBfc2V0dGVyTWFwOwogIExpc3Q8aXIuTWVtYmVyPiBfbWVtYmVyczsgLy8gaW4gZGVjbGFyYXRpb24gb3JkZXIuCiAgYm9vbCBfaXNTdXBlck1peGluQXBwbGljYXRpb247CgogIC8vLyBDb25zdHJ1Y3RvciBib2RpZXMgY3JlYXRlZCBmb3IgdGhpcyBjbGFzcy4KICBMaXN0PENvbnN0cnVjdG9yQm9keUVudGl0eT4gX2NvbnN0cnVjdG9yQm9keUxpc3Q7CgogIEtDbGFzc0VudkltcGwodGhpcy5jbHMpOwoKICBLQ2xhc3NFbnZJbXBsLmludGVybmFsKHRoaXMuY2xzLCB0aGlzLl9jb25zdHJ1Y3Rvck1hcCwgdGhpcy5fbWVtYmVyTWFwLAogICAgICB0aGlzLl9zZXR0ZXJNYXAsIHRoaXMuX21lbWJlcnMsIHRoaXMuX2lzU3VwZXJNaXhpbkFwcGxpY2F0aW9uKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbiA9PiBjbHMuaXNBbm9ueW1vdXNNaXhpbjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTdXBlck1peGluQXBwbGljYXRpb24gewogICAgYXNzZXJ0KF9pc1N1cGVyTWl4aW5BcHBsaWNhdGlvbiAhPSBudWxsKTsKICAgIHJldHVybiBfaXNTdXBlck1peGluQXBwbGljYXRpb247CiAgfQoKICAvLy8gQ29waWVkIGZyb20gJ3BhY2thZ2U6a2VybmVsL3RyYW5zZm9ybWF0aW9ucy9taXhpbl9mdWxsX3Jlc29sdXRpb24uZGFydCcuCiAgaXIuQ29uc3RydWN0b3IgX2J1aWxkRm9yd2FyZGluZ0NvbnN0cnVjdG9yKAogICAgICBDbG9uZVZpc2l0b3IgY2xvbmVyLCBpci5Db25zdHJ1Y3RvciBzdXBlcmNsYXNzQ29uc3RydWN0b3IpIHsKICAgIHZhciBzdXBlckZ1bmN0aW9uID0gc3VwZXJjbGFzc0NvbnN0cnVjdG9yLmZ1bmN0aW9uOwoKICAgIC8vIFdlIGtlZXAgdHlwZXMgYW5kIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgcGFyYW1ldGVycyBidXQgYWx3YXlzIG1hcmsgdGhlCiAgICAvLyBwYXJhbWV0ZXJzIGFzIGZpbmFsIChzaW5jZSB3ZSBqdXN0IGZvcndhcmQgdGhlbSB0byB0aGUgc3VwZXIKICAgIC8vIGNvbnN0cnVjdG9yKS4KICAgIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gY2xvbmVWYXJpYWJsZShpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKSB7CiAgICAgIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gY2xvbmUgPSBjbG9uZXIuY2xvbmUodmFyaWFibGUpOwogICAgICBjbG9uZS5pc0ZpbmFsID0gdHJ1ZTsKICAgICAgcmV0dXJuIGNsb25lOwogICAgfQoKICAgIC8vIEJ1aWxkIGEgW0Z1bmN0aW9uTm9kZV0gd2hpY2ggaGFzIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgdGhlIG9uZSBpbiB0aGUKICAgIC8vIHN1cGVyY2xhc3MgY29uc3RydWN0b3IuCiAgICB2YXIgcG9zaXRpb25hbFBhcmFtZXRlcnMgPQogICAgICAgIHN1cGVyRnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMubWFwKGNsb25lVmFyaWFibGUpLnRvTGlzdCgpOwogICAgdmFyIG5hbWVkUGFyYW1ldGVycyA9CiAgICAgICAgc3VwZXJGdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMubWFwKGNsb25lVmFyaWFibGUpLnRvTGlzdCgpOwogICAgdmFyIGZ1bmN0aW9uID0gbmV3IGlyLkZ1bmN0aW9uTm9kZShuZXcgaXIuRW1wdHlTdGF0ZW1lbnQoKSwKICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVyczogcG9zaXRpb25hbFBhcmFtZXRlcnMsCiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzOiBuYW1lZFBhcmFtZXRlcnMsCiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogc3VwZXJGdW5jdGlvbi5yZXF1aXJlZFBhcmFtZXRlckNvdW50LAogICAgICAgIHJldHVyblR5cGU6IGNvbnN0IGlyLlZvaWRUeXBlKCkpOwoKICAgIC8vIEJ1aWxkIGEgW1N1cGVySW5pdGlhbGl6ZXJdIHdoaWNoIHRha2VzIGFsbCBwb3NpdGlvbmFsL25hbWVkIHBhcmFtZXRlcnMKICAgIC8vIGFuZCBmb3J3YXJkIHRoZW0gdG8gdGhlIHN1cGVyIGNsYXNzIGNvbnN0cnVjdG9yLgogICAgdmFyIHBvc2l0aW9uYWxBcmd1bWVudHMgPSA8aXIuRXhwcmVzc2lvbj5bXTsKICAgIGZvciAodmFyIHZhcmlhYmxlIGluIHBvc2l0aW9uYWxQYXJhbWV0ZXJzKSB7CiAgICAgIHBvc2l0aW9uYWxBcmd1bWVudHMuYWRkKG5ldyBpci5WYXJpYWJsZUdldCh2YXJpYWJsZSkpOwogICAgfQogICAgdmFyIG5hbWVkQXJndW1lbnRzID0gPGlyLk5hbWVkRXhwcmVzc2lvbj5bXTsKICAgIGZvciAodmFyIHZhcmlhYmxlIGluIG5hbWVkUGFyYW1ldGVycykgewogICAgICBuYW1lZEFyZ3VtZW50cy5hZGQoCiAgICAgICAgICBuZXcgaXIuTmFtZWRFeHByZXNzaW9uKHZhcmlhYmxlLm5hbWUsIG5ldyBpci5WYXJpYWJsZUdldCh2YXJpYWJsZSkpKTsKICAgIH0KICAgIHZhciBzdXBlckluaXRpYWxpemVyID0gbmV3IGlyLlN1cGVySW5pdGlhbGl6ZXIoc3VwZXJjbGFzc0NvbnN0cnVjdG9yLAogICAgICAgIG5ldyBpci5Bcmd1bWVudHMocG9zaXRpb25hbEFyZ3VtZW50cywgbmFtZWQ6IG5hbWVkQXJndW1lbnRzKSk7CgogICAgLy8gQXNzZW1ibGUgdGhlIGNvbnN0cnVjdG9yLgogICAgcmV0dXJuIG5ldyBpci5Db25zdHJ1Y3RvcihmdW5jdGlvbiwKICAgICAgICBuYW1lOiBzdXBlcmNsYXNzQ29uc3RydWN0b3IubmFtZSwKICAgICAgICBpbml0aWFsaXplcnM6IDxpci5Jbml0aWFsaXplcj5bc3VwZXJJbml0aWFsaXplcl0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbnN1cmVNZW1iZXJzKEtlcm5lbFRvRWxlbWVudE1hcEltcGwgZWxlbWVudE1hcCkgewogICAgX2Vuc3VyZU1hcHMoZWxlbWVudE1hcCk7CiAgfQoKICB2b2lkIF9lbnN1cmVNYXBzKEtlcm5lbFRvRWxlbWVudE1hcEltcGwgZWxlbWVudE1hcCkgewogICAgaWYgKF9tZW1iZXJNYXAgIT0gbnVsbCkgcmV0dXJuOwoKICAgIF9tZW1iZXJNYXAgPSA8U3RyaW5nLCBpci5NZW1iZXI+e307CiAgICBfc2V0dGVyTWFwID0gPFN0cmluZywgaXIuTWVtYmVyPnt9OwogICAgX2NvbnN0cnVjdG9yTWFwID0gPFN0cmluZywgaXIuTWVtYmVyPnt9OwogICAgdmFyIG1lbWJlcnMgPSA8aXIuTWVtYmVyPltdOwogICAgX2lzU3VwZXJNaXhpbkFwcGxpY2F0aW9uID0gZmFsc2U7CgogICAgdm9pZCBhZGRGaWVsZChpci5GaWVsZCBtZW1iZXIsIHtib29sIGluY2x1ZGVTdGF0aWN9KSB7CiAgICAgIGlmICghaW5jbHVkZVN0YXRpYyAmJiBtZW1iZXIuaXNTdGF0aWMpIHJldHVybjsKICAgICAgdmFyIG5hbWUgPSBtZW1iZXIubmFtZS5uYW1lOwogICAgICBpZiAobmFtZS5jb250YWlucygnIycpKSB7CiAgICAgICAgLy8gU2tpcCBzeW50aGV0aWMgLmRpbGwgbWVtYmVycy4KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgX21lbWJlck1hcFtuYW1lXSA9IG1lbWJlcjsKICAgICAgaWYgKG1lbWJlci5pc011dGFibGUpIHsKICAgICAgICBfc2V0dGVyTWFwW25hbWVdID0gbWVtYmVyOwogICAgICB9CiAgICAgIG1lbWJlcnMuYWRkKG1lbWJlcik7CiAgICB9CgogICAgdm9pZCBhZGRQcm9jZWR1cmUoaXIuUHJvY2VkdXJlIG1lbWJlciwKICAgICAgICB7Ym9vbCBpbmNsdWRlU3RhdGljLCBib29sIGluY2x1ZGVOb1N1Y2hNZXRob2RGb3J3YXJkZXJzfSkgewogICAgICBpZiAobWVtYmVyLmlzRm9yd2FyZGluZ1N0dWIgJiYgbWVtYmVyLmlzQWJzdHJhY3QpIHsKICAgICAgICAvLyBTa2lwIGFic3RyYWN0IGZvcndhcmRpbmcgc3R1YnMuIFRoZXNlIGFyZSBuZXZlciBlbWl0dGVkIGJ1dCB0aGV5CiAgICAgICAgLy8gbWlnaHQgc2hhZG93IHRoZSBpbmNsdXNpb24gb2YgYSBtaXhlZCBpbiBtZXRob2QgaW4gY29kZSBsaWtlOgogICAgICAgIC8vCiAgICAgICAgLy8gICAgIGNsYXNzIFN1cGVyIHt9CiAgICAgICAgLy8gICAgIGNsYXNzIE1peGluPFQ+IHsKICAgICAgICAvLyAgICAgICB2b2lkIG1ldGhvZChUIHQpIHt9CiAgICAgICAgLy8gICAgIH0KICAgICAgICAvLyAgICAgY2xhc3MgQ2xhc3MgZXh0ZW5kcyBTdXBlciB3aXRoIE1peGluPGludD4ge30KICAgICAgICAvLyAgICAgbWFpbigpID0+IG5ldyBDbGFzcygpLm1ldGhvZCgpOwogICAgICAgIC8vCiAgICAgICAgLy8gSGVyZSBhIHN0dWIgaXMgY3JlYXRlZCBmb3IgYFN1cGVyJk1peGluLm1ldGhvZGAgaGlkaW5nIHRoYXQKICAgICAgICAvLyBgTWl4aW4ubWV0aG9kYCBpcyBpbmhlcml0ZWQgYnkgYENsYXNzYC4KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKG1lbWJlci5pc0ZvcndhcmRpbmdTdHViICYmIGNscy5pc0Fub255bW91c01peGluKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICghaW5jbHVkZVN0YXRpYyAmJiBtZW1iZXIuaXNTdGF0aWMpIHJldHVybjsKICAgICAgaWYgKG1lbWJlci5pc05vU3VjaE1ldGhvZEZvcndhcmRlcikgewogICAgICAgIC8vIFRPRE8oc2lnbXVuZCk6IHJlbW92ZSBvbmNlICMzMzczMiBpcyBmaXhlZC4KICAgICAgICBpZiAoIWluY2x1ZGVOb1N1Y2hNZXRob2RGb3J3YXJkZXJzIHx8CiAgICAgICAgICAgIG1lbWJlci5uYW1lLmlzUHJpdmF0ZSAmJgogICAgICAgICAgICAgICAgbWVtYmVyLm5hbWUubGlicmFyeU5hbWUgIT0gbWVtYmVyLmVuY2xvc2luZ0xpYnJhcnkucmVmZXJlbmNlKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhciBuYW1lID0gbWVtYmVyLm5hbWUubmFtZTsKICAgICAgYXNzZXJ0KCFuYW1lLmNvbnRhaW5zKCcjJykpOwogICAgICBpZiAobWVtYmVyLmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5GYWN0b3J5KSB7CiAgICAgICAgaWYgKGlzUmVkaXJlY3RpbmdGYWN0b3J5KG1lbWJlcikpIHsKICAgICAgICAgIC8vIERvbid0IGluY2x1ZGUgcmVkaXJlY3RpbmcgZmFjdG9yaWVzLgogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBfY29uc3RydWN0b3JNYXBbbmFtZV0gPSBtZW1iZXI7CiAgICAgIH0gZWxzZSBpZiAobWVtYmVyLmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5TZXR0ZXIpIHsKICAgICAgICBfc2V0dGVyTWFwW25hbWVdID0gbWVtYmVyOwogICAgICAgIG1lbWJlcnMuYWRkKG1lbWJlcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KG1lbWJlci5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuTWV0aG9kIHx8CiAgICAgICAgICAgIG1lbWJlci5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuR2V0dGVyIHx8CiAgICAgICAgICAgIG1lbWJlci5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuT3BlcmF0b3IpOwogICAgICAgIF9tZW1iZXJNYXBbbmFtZV0gPSBtZW1iZXI7CiAgICAgICAgbWVtYmVycy5hZGQobWVtYmVyKTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgYWRkQ29uc3RydWN0b3JzKGlyLkNsYXNzIGMpIHsKICAgICAgZm9yIChpci5Db25zdHJ1Y3RvciBtZW1iZXIgaW4gYy5jb25zdHJ1Y3RvcnMpIHsKICAgICAgICB2YXIgbmFtZSA9IG1lbWJlci5uYW1lLm5hbWU7CiAgICAgICAgYXNzZXJ0KCFuYW1lLmNvbnRhaW5zKCcjJykpOwogICAgICAgIF9jb25zdHJ1Y3Rvck1hcFtuYW1lXSA9IG1lbWJlcjsKICAgICAgfQogICAgfQoKICAgIGludCBtaXhpbk1lbWJlckNvdW50ID0gMDsKCiAgICBpZiAoY2xzLm1peGVkSW5DbGFzcyAhPSBudWxsKSB7CiAgICAgIENsb25lVmlzaXRvciBjbG9uZVZpc2l0b3I7CiAgICAgIGZvciAoaXIuRmllbGQgZmllbGQgaW4gY2xzLm1peGVkSW5DbGFzcy5taXhpbi5maWVsZHMpIHsKICAgICAgICBpZiAoZmllbGQuY29udGFpbnNTdXBlckNhbGxzKSB7CiAgICAgICAgICBfaXNTdXBlck1peGluQXBwbGljYXRpb24gPSB0cnVlOwogICAgICAgICAgY2xvbmVWaXNpdG9yID8/PSBuZXcgQ2xvbmVWaXNpdG9yKAogICAgICAgICAgICAgIHR5cGVTdWJzdGl0dXRpb246IGdldFN1YnN0aXR1dGlvbk1hcChjbHMubWl4ZWRJblR5cGUpKTsKICAgICAgICAgIGNscy5hZGRNZW1iZXIoY2xvbmVWaXNpdG9yLmNsb25lKGZpZWxkKSk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgYWRkRmllbGQoZmllbGQsIGluY2x1ZGVTdGF0aWM6IGZhbHNlKTsKICAgICAgfQogICAgICBmb3IgKGlyLlByb2NlZHVyZSBwcm9jZWR1cmUgaW4gY2xzLm1peGVkSW5DbGFzcy5taXhpbi5wcm9jZWR1cmVzKSB7CiAgICAgICAgaWYgKHByb2NlZHVyZS5jb250YWluc1N1cGVyQ2FsbHMpIHsKICAgICAgICAgIF9pc1N1cGVyTWl4aW5BcHBsaWNhdGlvbiA9IHRydWU7CiAgICAgICAgICBjbG9uZVZpc2l0b3IgPz89IG5ldyBDbG9uZVZpc2l0b3IoCiAgICAgICAgICAgICAgdHlwZVN1YnN0aXR1dGlvbjogZ2V0U3Vic3RpdHV0aW9uTWFwKGNscy5taXhlZEluVHlwZSkpOwogICAgICAgICAgY2xzLmFkZE1lbWJlcihjbG9uZVZpc2l0b3IuY2xvbmUocHJvY2VkdXJlKSk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgYWRkUHJvY2VkdXJlKHByb2NlZHVyZSwKICAgICAgICAgICAgaW5jbHVkZVN0YXRpYzogZmFsc2UsIGluY2x1ZGVOb1N1Y2hNZXRob2RGb3J3YXJkZXJzOiBmYWxzZSk7CiAgICAgIH0KICAgICAgbWVyZ2VTb3J0KG1lbWJlcnMsIGNvbXBhcmU6IG9yZGVyQnlGaWxlT2Zmc2V0KTsKICAgICAgbWl4aW5NZW1iZXJDb3VudCA9IG1lbWJlcnMubGVuZ3RoOwogICAgfQoKICAgIGZvciAoaXIuRmllbGQgbWVtYmVyIGluIGNscy5maWVsZHMpIHsKICAgICAgYWRkRmllbGQobWVtYmVyLCBpbmNsdWRlU3RhdGljOiB0cnVlKTsKICAgIH0KICAgIGFkZENvbnN0cnVjdG9ycyhjbHMpOwogICAgZm9yIChpci5Qcm9jZWR1cmUgbWVtYmVyIGluIGNscy5wcm9jZWR1cmVzKSB7CiAgICAgIGFkZFByb2NlZHVyZShtZW1iZXIsCiAgICAgICAgICBpbmNsdWRlU3RhdGljOiB0cnVlLCBpbmNsdWRlTm9TdWNoTWV0aG9kRm9yd2FyZGVyczogdHJ1ZSk7CiAgICB9CgogICAgaWYgKGlzVW5uYW1lZE1peGluQXBwbGljYXRpb24gJiYgX2NvbnN0cnVjdG9yTWFwLmlzRW1wdHkpIHsKICAgICAgLy8gRW5zdXJlIHRoYXQgY29uc3RydWN0b3JzIGFyZSBjcmVhdGVkIGZvciB0aGUgc3VwZXJjbGFzcyBpbiBjYXNlIGl0CiAgICAgIC8vIGlzIGFsc28gYW4gdW5uYW1lZCBtaXhpbiBhcHBsaWNhdGlvbi4KICAgICAgQ2xhc3NFbnRpdHkgc3VwZXJjbGFzcyA9IGVsZW1lbnRNYXAuZ2V0Q2xhc3MoY2xzLnN1cGVyY2xhc3MpOwogICAgICBlbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudC5sb29rdXBDb25zdHJ1Y3RvcihzdXBlcmNsYXNzLCAnJyk7CgogICAgICAvLyBVbm5hbWVkIG1peGluIGFwcGxpY2F0aW9ucyBoYXZlIG5vIGNvbnN0cnVjdG9ycyB3aGVuIHJlYWQgZnJvbSAuZGlsbC4KICAgICAgLy8gRm9yIGVhY2ggZ2VuZXJhdGl2ZSBjb25zdHJ1Y3RvciBpbiB0aGUgc3VwZXJjbGFzcyB3ZSBtYWtlIGEKICAgICAgLy8gY29ycmVzcG9uZGluZyBmb3J3YXJkaW5nIGNvbnN0cnVjdG9yIGluIHRoZSBzdWJjbGFzcy4KICAgICAgLy8KICAgICAgLy8gVGhpcyBjb2RlIGlzIGNvcGllZCBmcm9tCiAgICAgIC8vICdwYWNrYWdlOmtlcm5lbC90cmFuc2Zvcm1hdGlvbnMvbWl4aW5fZnVsbF9yZXNvbHV0aW9uLmRhcnQnCiAgICAgIHZhciBzdXBlcmNsYXNzU3Vic3RpdHV0aW9uID0gZ2V0U3Vic3RpdHV0aW9uTWFwKGNscy5zdXBlcnR5cGUpOwogICAgICB2YXIgc3VwZXJjbGFzc0Nsb25lciA9CiAgICAgICAgICBuZXcgQ2xvbmVWaXNpdG9yKHR5cGVTdWJzdGl0dXRpb246IHN1cGVyY2xhc3NTdWJzdGl0dXRpb24pOwoKICAgICAgZm9yICh2YXIgc3VwZXJjbGFzc0NvbnN0cnVjdG9yIGluIGNscy5zdXBlcmNsYXNzLmNvbnN0cnVjdG9ycykgewogICAgICAgIHZhciBmb3J3YXJkaW5nQ29uc3RydWN0b3IgPSBfYnVpbGRGb3J3YXJkaW5nQ29uc3RydWN0b3IoCiAgICAgICAgICAgIHN1cGVyY2xhc3NDbG9uZXIsIHN1cGVyY2xhc3NDb25zdHJ1Y3Rvcik7CiAgICAgICAgY2xzLmFkZE1lbWJlcihmb3J3YXJkaW5nQ29uc3RydWN0b3IpOwogICAgICAgIF9jb25zdHJ1Y3Rvck1hcFtmb3J3YXJkaW5nQ29uc3RydWN0b3IubmFtZS5uYW1lXSA9CiAgICAgICAgICAgIGZvcndhcmRpbmdDb25zdHJ1Y3RvcjsKICAgICAgfQogICAgfQoKICAgIG1lcmdlU29ydChtZW1iZXJzLCBzdGFydDogbWl4aW5NZW1iZXJDb3VudCwgY29tcGFyZTogb3JkZXJCeUZpbGVPZmZzZXQpOwogICAgX21lbWJlcnMgPSBtZW1iZXJzOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyRW50aXR5IGxvb2t1cE1lbWJlcihJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwLCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgc2V0dGVyOiBmYWxzZX0pIHsKICAgIF9lbnN1cmVNYXBzKGVsZW1lbnRNYXApOwogICAgaXIuTWVtYmVyIG1lbWJlciA9IHNldHRlciA/IF9zZXR0ZXJNYXBbbmFtZV0gOiBfbWVtYmVyTWFwW25hbWVdOwogICAgcmV0dXJuIG1lbWJlciAhPSBudWxsID8gZWxlbWVudE1hcC5nZXRNZW1iZXIobWVtYmVyKSA6IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hNZW1iZXIoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgdm9pZCBmKE1lbWJlckVudGl0eSBtZW1iZXIpKSB7CiAgICBfZW5zdXJlTWFwcyhlbGVtZW50TWFwKTsKICAgIF9tZW1iZXJzLmZvckVhY2goKGlyLk1lbWJlciBtZW1iZXIpIHsKICAgICAgZihlbGVtZW50TWFwLmdldE1lbWJlcihtZW1iZXIpKTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RydWN0b3JFbnRpdHkgbG9va3VwQ29uc3RydWN0b3IoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgU3RyaW5nIG5hbWUpIHsKICAgIF9lbnN1cmVNYXBzKGVsZW1lbnRNYXApOwogICAgaXIuTWVtYmVyIGNvbnN0cnVjdG9yID0gX2NvbnN0cnVjdG9yTWFwW25hbWVdOwogICAgcmV0dXJuIGNvbnN0cnVjdG9yICE9IG51bGwgPyBlbGVtZW50TWFwLmdldENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKSA6IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hDb25zdHJ1Y3RvcigKICAgICAgSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgdm9pZCBmKENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yKSkgewogICAgX2Vuc3VyZU1hcHMoZWxlbWVudE1hcCk7CiAgICBfY29uc3RydWN0b3JNYXAudmFsdWVzLmZvckVhY2goKGlyLk1lbWJlciBjb25zdHJ1Y3RvcikgewogICAgICBmKGVsZW1lbnRNYXAuZ2V0Q29uc3RydWN0b3IoY29uc3RydWN0b3IpKTsKICAgIH0pOwogIH0KCiAgdm9pZCBhZGRDb25zdHJ1Y3RvckJvZHkoQ29uc3RydWN0b3JCb2R5RW50aXR5IGNvbnN0cnVjdG9yQm9keSkgewogICAgX2NvbnN0cnVjdG9yQm9keUxpc3QgPz89IDxDb25zdHJ1Y3RvckJvZHlFbnRpdHk+W107CiAgICBfY29uc3RydWN0b3JCb2R5TGlzdC5hZGQoY29uc3RydWN0b3JCb2R5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaENvbnN0cnVjdG9yQm9keSh2b2lkIGYoQ29uc3RydWN0b3JCb2R5RW50aXR5IGNvbnN0cnVjdG9yKSkgewogICAgX2NvbnN0cnVjdG9yQm9keUxpc3Q/LmZvckVhY2goZik7CiAgfQoKICBAb3ZlcnJpZGUKICBKQ2xhc3NFbnYgY29udmVydChJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwLAogICAgICBNYXA8TWVtYmVyRW50aXR5LCBNZW1iZXJVc2FnZT4gbGl2ZU1lbWJlclVzYWdlKSB7CiAgICBNYXA8U3RyaW5nLCBpci5NZW1iZXI+IGNvbnN0cnVjdG9yTWFwOwogICAgTWFwPFN0cmluZywgaXIuTWVtYmVyPiBtZW1iZXJNYXA7CiAgICBNYXA8U3RyaW5nLCBpci5NZW1iZXI+IHNldHRlck1hcDsKICAgIExpc3Q8aXIuTWVtYmVyPiBtZW1iZXJzOwogICAgaWYgKF9jb25zdHJ1Y3Rvck1hcCA9PSBudWxsKSB7CiAgICAgIGNvbnN0cnVjdG9yTWFwID0gY29uc3QgPFN0cmluZywgaXIuTWVtYmVyPnt9OwogICAgfSBlbHNlIHsKICAgICAgY29uc3RydWN0b3JNYXAgPSA8U3RyaW5nLCBpci5NZW1iZXI+e307CiAgICAgIF9jb25zdHJ1Y3Rvck1hcC5mb3JFYWNoKChTdHJpbmcgbmFtZSwgaXIuTWVtYmVyIG5vZGUpIHsKICAgICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gZWxlbWVudE1hcC5nZXRNZW1iZXIobm9kZSk7CiAgICAgICAgaWYgKGxpdmVNZW1iZXJVc2FnZS5jb250YWluc0tleShtZW1iZXIpKSB7CiAgICAgICAgICBjb25zdHJ1Y3Rvck1hcFtuYW1lXSA9IG5vZGU7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIGlmIChfbWVtYmVyTWFwID09IG51bGwpIHsKICAgICAgbWVtYmVyTWFwID0gY29uc3QgPFN0cmluZywgaXIuTWVtYmVyPnt9OwogICAgfSBlbHNlIHsKICAgICAgbWVtYmVyTWFwID0gPFN0cmluZywgaXIuTWVtYmVyPnt9OwogICAgICBfbWVtYmVyTWFwLmZvckVhY2goKFN0cmluZyBuYW1lLCBpci5NZW1iZXIgbm9kZSkgewogICAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBlbGVtZW50TWFwLmdldE1lbWJlcihub2RlKTsKICAgICAgICBpZiAobGl2ZU1lbWJlclVzYWdlLmNvbnRhaW5zS2V5KG1lbWJlcikpIHsKICAgICAgICAgIG1lbWJlck1hcFtuYW1lXSA9IG5vZGU7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIGlmIChfc2V0dGVyTWFwID09IG51bGwpIHsKICAgICAgc2V0dGVyTWFwID0gY29uc3QgPFN0cmluZywgaXIuTWVtYmVyPnt9OwogICAgfSBlbHNlIHsKICAgICAgc2V0dGVyTWFwID0gPFN0cmluZywgaXIuTWVtYmVyPnt9OwogICAgICBfc2V0dGVyTWFwLmZvckVhY2goKFN0cmluZyBuYW1lLCBpci5NZW1iZXIgbm9kZSkgewogICAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBlbGVtZW50TWFwLmdldE1lbWJlcihub2RlKTsKICAgICAgICBpZiAobGl2ZU1lbWJlclVzYWdlLmNvbnRhaW5zS2V5KG1lbWJlcikpIHsKICAgICAgICAgIHNldHRlck1hcFtuYW1lXSA9IG5vZGU7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIGlmIChfbWVtYmVycyA9PSBudWxsKSB7CiAgICAgIG1lbWJlcnMgPSBjb25zdCA8aXIuTWVtYmVyPltdOwogICAgfSBlbHNlIHsKICAgICAgbWVtYmVycyA9IDxpci5NZW1iZXI+W107CiAgICAgIF9tZW1iZXJzLmZvckVhY2goKGlyLk1lbWJlciBub2RlKSB7CiAgICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IGVsZW1lbnRNYXAuZ2V0TWVtYmVyKG5vZGUpOwogICAgICAgIGlmIChsaXZlTWVtYmVyVXNhZ2UuY29udGFpbnNLZXkobWVtYmVyKSkgewogICAgICAgICAgbWVtYmVycy5hZGQobm9kZSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIHJldHVybiBuZXcgSkNsYXNzRW52SW1wbChjbHMsIGNvbnN0cnVjdG9yTWFwLCBtZW1iZXJNYXAsIHNldHRlck1hcCwgbWVtYmVycywKICAgICAgICBfaXNTdXBlck1peGluQXBwbGljYXRpb24gPz8gZmFsc2UpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgS0NsYXNzRGF0YSB7CiAgaXIuQ2xhc3MgZ2V0IG5vZGU7CgogIEludGVyZmFjZVR5cGUgZ2V0IHRoaXNUeXBlOwogIEludGVyZmFjZVR5cGUgZ2V0IHJhd1R5cGU7CiAgSW50ZXJmYWNlVHlwZSBnZXQgc3VwZXJ0eXBlOwogIEludGVyZmFjZVR5cGUgZ2V0IG1peGVkSW5UeXBlOwogIExpc3Q8SW50ZXJmYWNlVHlwZT4gZ2V0IGludGVyZmFjZXM7CiAgT3JkZXJlZFR5cGVTZXQgZ2V0IG9yZGVyZWRUeXBlU2V0OwogIERhcnRUeXBlIGdldCBjYWxsVHlwZTsKCiAgYm9vbCBnZXQgaXNFbnVtQ2xhc3M7CiAgYm9vbCBnZXQgaXNNaXhpbkFwcGxpY2F0aW9uOwoKICBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBnZXRNZXRhZGF0YShJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwKTsKCiAgLy8vIENvbnZlcnQgdGhpcyBbS0NsYXNzRGF0YV0gdG8gdGhlIGNvcnJlc3BvbmRpbmcgW0pDbGFzc0RhdGFdLgogIEpDbGFzc0RhdGEgY29udmVydCgpOwp9CgpjbGFzcyBLQ2xhc3NEYXRhSW1wbCBpbXBsZW1lbnRzIEtDbGFzc0RhdGEgewogIEBvdmVycmlkZQogIGZpbmFsIGlyLkNsYXNzIG5vZGU7CiAgQG92ZXJyaWRlCiAgYm9vbCBpc01peGluQXBwbGljYXRpb247CiAgYm9vbCBpc0NhbGxUeXBlQ29tcHV0ZWQgPSBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSB0aGlzVHlwZTsKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIHJhd1R5cGU7CiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGU7CiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBtaXhlZEluVHlwZTsKICBAb3ZlcnJpZGUKICBMaXN0PEludGVyZmFjZVR5cGU+IGludGVyZmFjZXM7CiAgQG92ZXJyaWRlCiAgT3JkZXJlZFR5cGVTZXQgb3JkZXJlZFR5cGVTZXQ7CgogIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IF9tZXRhZGF0YTsKCiAgS0NsYXNzRGF0YUltcGwodGhpcy5ub2RlKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFbnVtQ2xhc3MgPT4gbm9kZS5pc0VudW07CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldCBjYWxsVHlwZSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBnZXRNZXRhZGF0YSgKICAgICAgY292YXJpYW50IEtlcm5lbFRvRWxlbWVudE1hcEltcGwgZWxlbWVudE1hcCkgewogICAgcmV0dXJuIF9tZXRhZGF0YSA/Pz0gZWxlbWVudE1hcC5nZXRNZXRhZGF0YShub2RlLmFubm90YXRpb25zKTsKICB9CgogIEBvdmVycmlkZQogIEpDbGFzc0RhdGEgY29udmVydCgpIHsKICAgIHJldHVybiBuZXcgSkNsYXNzRGF0YUltcGwobm9kZSwgbmV3IFJlZ3VsYXJDbGFzc0RlZmluaXRpb24obm9kZSkpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgS01lbWJlckRhdGEgewogIGlyLk1lbWJlciBnZXQgbm9kZTsKCiAgU3RhdGljVHlwZUNhY2hlIHN0YXRpY1R5cGVzOwoKICBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBnZXRNZXRhZGF0YShJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwKTsKCiAgSW50ZXJmYWNlVHlwZSBnZXRNZW1iZXJUaGlzVHlwZShKc1RvRWxlbWVudE1hcCBlbGVtZW50TWFwKTsKCiAgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgZ2V0IGNsYXNzVHlwZVZhcmlhYmxlQWNjZXNzOwoKICAvLy8gQ29udmVydCB0aGlzIFtLTWVtYmVyRGF0YV0gdG8gdGhlIGNvcnJlc3BvbmRpbmcgW0pNZW1iZXJEYXRhXS4KICBKTWVtYmVyRGF0YSBjb252ZXJ0KCk7Cn0KCmFic3RyYWN0IGNsYXNzIEtNZW1iZXJEYXRhSW1wbCBpbXBsZW1lbnRzIEtNZW1iZXJEYXRhIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBpci5NZW1iZXIgbm9kZTsKCiAgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gX21ldGFkYXRhOwoKICBAb3ZlcnJpZGUKICBTdGF0aWNUeXBlQ2FjaGUgc3RhdGljVHlwZXM7CgogIEtNZW1iZXJEYXRhSW1wbCh0aGlzLm5vZGUpOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBnZXRNZXRhZGF0YSgKICAgICAgY292YXJpYW50IEtlcm5lbFRvRWxlbWVudE1hcEltcGwgZWxlbWVudE1hcCkgewogICAgcmV0dXJuIF9tZXRhZGF0YSA/Pz0gZWxlbWVudE1hcC5nZXRNZXRhZGF0YShub2RlLmFubm90YXRpb25zKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0TWVtYmVyVGhpc1R5cGUoSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IGVsZW1lbnRNYXAuZ2V0TWVtYmVyKG5vZGUpOwogICAgQ2xhc3NFbnRpdHkgY2xzID0gbWVtYmVyLmVuY2xvc2luZ0NsYXNzOwogICAgaWYgKGNscyAhPSBudWxsKSB7CiAgICAgIHJldHVybiBlbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShjbHMpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBLRnVuY3Rpb25EYXRhIGltcGxlbWVudHMgS01lbWJlckRhdGEgewogIEZ1bmN0aW9uVHlwZSBnZXRGdW5jdGlvblR5cGUoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCk7CgogIExpc3Q8VHlwZVZhcmlhYmxlVHlwZT4gZ2V0RnVuY3Rpb25UeXBlVmFyaWFibGVzKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApOwoKICB2b2lkIGZvckVhY2hQYXJhbWV0ZXIoSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwKICAgICAgdm9pZCBmKERhcnRUeXBlIHR5cGUsIFN0cmluZyBuYW1lLCBDb25zdGFudFZhbHVlIGRlZmF1bHRWYWx1ZSkpOwp9CgphYnN0cmFjdCBjbGFzcyBLRnVuY3Rpb25EYXRhTWl4aW4gaW1wbGVtZW50cyBLRnVuY3Rpb25EYXRhIHsKICBpci5GdW5jdGlvbk5vZGUgZ2V0IGZ1bmN0aW9uTm9kZTsKICBMaXN0PFR5cGVWYXJpYWJsZVR5cGU+IF90eXBlVmFyaWFibGVzOwoKICBAb3ZlcnJpZGUKICBMaXN0PFR5cGVWYXJpYWJsZVR5cGU+IGdldEZ1bmN0aW9uVHlwZVZhcmlhYmxlcygKICAgICAgY292YXJpYW50IEtlcm5lbFRvRWxlbWVudE1hcEltcGwgZWxlbWVudE1hcCkgewogICAgaWYgKF90eXBlVmFyaWFibGVzID09IG51bGwpIHsKICAgICAgaWYgKGZ1bmN0aW9uTm9kZS50eXBlUGFyYW1ldGVycy5pc0VtcHR5KSB7CiAgICAgICAgX3R5cGVWYXJpYWJsZXMgPSBjb25zdCA8VHlwZVZhcmlhYmxlVHlwZT5bXTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpci5UcmVlTm9kZSBwYXJlbnQgPSBmdW5jdGlvbk5vZGUucGFyZW50OwogICAgICAgIGlmIChwYXJlbnQgaXMgaXIuQ29uc3RydWN0b3IgfHwKICAgICAgICAgICAgKHBhcmVudCBpcyBpci5Qcm9jZWR1cmUgJiYKICAgICAgICAgICAgICAgIHBhcmVudC5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuRmFjdG9yeSkpIHsKICAgICAgICAgIF90eXBlVmFyaWFibGVzID0gY29uc3QgPFR5cGVWYXJpYWJsZVR5cGU+W107CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF90eXBlVmFyaWFibGVzID0gZnVuY3Rpb25Ob2RlLnR5cGVQYXJhbWV0ZXJzCiAgICAgICAgICAgICAgLm1hcDxUeXBlVmFyaWFibGVUeXBlPigoaXIuVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyKSB7CiAgICAgICAgICAgIHJldHVybiBlbGVtZW50TWFwCiAgICAgICAgICAgICAgICAuZ2V0RGFydFR5cGUobmV3IGlyLlR5cGVQYXJhbWV0ZXJUeXBlKHR5cGVQYXJhbWV0ZXIpKTsKICAgICAgICAgIH0pLnRvTGlzdCgpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIF90eXBlVmFyaWFibGVzOwogIH0KfQoKY2xhc3MgS0Z1bmN0aW9uRGF0YUltcGwgZXh0ZW5kcyBLTWVtYmVyRGF0YUltcGwKICAgIHdpdGggS0Z1bmN0aW9uRGF0YU1peGluCiAgICBpbXBsZW1lbnRzIEtGdW5jdGlvbkRhdGEgewogIEBvdmVycmlkZQogIGZpbmFsIGlyLkZ1bmN0aW9uTm9kZSBmdW5jdGlvbk5vZGU7CiAgRnVuY3Rpb25UeXBlIF90eXBlOwoKICBLRnVuY3Rpb25EYXRhSW1wbChpci5NZW1iZXIgbm9kZSwgdGhpcy5mdW5jdGlvbk5vZGUpIDogc3VwZXIobm9kZSk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uVHlwZSBnZXRGdW5jdGlvblR5cGUoY292YXJpYW50IEtlcm5lbFRvRWxlbWVudE1hcEltcGwgZWxlbWVudE1hcCkgewogICAgcmV0dXJuIF90eXBlID8/PSBlbGVtZW50TWFwLmdldEZ1bmN0aW9uVHlwZShmdW5jdGlvbk5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoUGFyYW1ldGVyKEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsCiAgICAgIHZvaWQgZihEYXJ0VHlwZSB0eXBlLCBTdHJpbmcgbmFtZSwgQ29uc3RhbnRWYWx1ZSBkZWZhdWx0VmFsdWUpKSB7CiAgICB2b2lkIGhhbmRsZVBhcmFtZXRlcihpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUsIHtib29sIGlzT3B0aW9uYWw6IHRydWV9KSB7CiAgICAgIERhcnRUeXBlIHR5cGUgPSBlbGVtZW50TWFwLmdldERhcnRUeXBlKG5vZGUudHlwZSk7CiAgICAgIFN0cmluZyBuYW1lID0gbm9kZS5uYW1lOwogICAgICBDb25zdGFudFZhbHVlIGRlZmF1bHRWYWx1ZTsKICAgICAgaWYgKGlzT3B0aW9uYWwpIHsKICAgICAgICBpZiAobm9kZS5pbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBlbGVtZW50TWFwLmdldENvbnN0YW50VmFsdWUobm9kZS5pbml0aWFsaXplcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IG5ldyBOdWxsQ29uc3RhbnRWYWx1ZSgpOwogICAgICAgIH0KICAgICAgfQogICAgICBmKHR5cGUsIG5hbWUsIGRlZmF1bHRWYWx1ZSk7CiAgICB9CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmdW5jdGlvbk5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgaGFuZGxlUGFyYW1ldGVyKGZ1bmN0aW9uTm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXSwKICAgICAgICAgIGlzT3B0aW9uYWw6IGkgPj0gZnVuY3Rpb25Ob2RlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpOwogICAgfQogICAgZnVuY3Rpb25Ob2RlLm5hbWVkUGFyYW1ldGVycy50b0xpc3QoKQogICAgICAuLnNvcnQobmFtZWRPcmRlcmluZykKICAgICAgLi5mb3JFYWNoKGhhbmRsZVBhcmFtZXRlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkRhdGEgY29udmVydCgpIHsKICAgIHJldHVybiBuZXcgRnVuY3Rpb25EYXRhSW1wbCgKICAgICAgICBub2RlLCBmdW5jdGlvbk5vZGUsIG5ldyBSZWd1bGFyTWVtYmVyRGVmaW5pdGlvbihub2RlKSwgc3RhdGljVHlwZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgZ2V0IGNsYXNzVHlwZVZhcmlhYmxlQWNjZXNzIHsKICAgIGlmIChub2RlLmlzSW5zdGFuY2VNZW1iZXIpIHJldHVybiBDbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcy5wcm9wZXJ0eTsKICAgIHJldHVybiBDbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcy5ub25lOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgS0NvbnN0cnVjdG9yRGF0YSBleHRlbmRzIEtGdW5jdGlvbkRhdGEgewogIENvbnN0YW50Q29uc3RydWN0b3IgZ2V0Q29uc3RydWN0b3JDb25zdGFudCgKICAgICAgS2VybmVsVG9FbGVtZW50TWFwSW1wbCBlbGVtZW50TWFwLCBDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3Rvcik7Cn0KCmNsYXNzIEtDb25zdHJ1Y3RvckRhdGFJbXBsIGV4dGVuZHMgS0Z1bmN0aW9uRGF0YUltcGwKICAgIGltcGxlbWVudHMgS0NvbnN0cnVjdG9yRGF0YSB7CiAgQ29uc3RhbnRDb25zdHJ1Y3RvciBfY29uc3RhbnRDb25zdHJ1Y3RvcjsKICBDb25zdHJ1Y3RvckJvZHlFbnRpdHkgY29uc3RydWN0b3JCb2R5OwoKICBLQ29uc3RydWN0b3JEYXRhSW1wbChpci5NZW1iZXIgbm9kZSwgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uTm9kZSkKICAgICAgOiBzdXBlcihub2RlLCBmdW5jdGlvbk5vZGUpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudENvbnN0cnVjdG9yIGdldENvbnN0cnVjdG9yQ29uc3RhbnQoCiAgICAgIEtlcm5lbFRvRWxlbWVudE1hcEltcGwgZWxlbWVudE1hcCwgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IpIHsKICAgIGlmIChfY29uc3RhbnRDb25zdHJ1Y3RvciA9PSBudWxsKSB7CiAgICAgIGlmIChub2RlIGlzIGlyLkNvbnN0cnVjdG9yICYmIGNvbnN0cnVjdG9yLmlzQ29uc3QpIHsKICAgICAgICBfY29uc3RhbnRDb25zdHJ1Y3RvciA9CiAgICAgICAgICAgIG5ldyBDb25zdGFudGlmaWVyKGVsZW1lbnRNYXApLmNvbXB1dGVDb25zdGFudENvbnN0cnVjdG9yKG5vZGUpOwogICAgICB9IGVsc2UgewogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBjb25zdHJ1Y3RvciwKICAgICAgICAgICAgIlVuZXhwZWN0ZWQgY29uc3RydWN0b3IgJGNvbnN0cnVjdG9yIGluICIKICAgICAgICAgICAgIkNvbnN0cnVjdG9yRGF0YUltcGwuX2dldENvbnN0cnVjdG9yQ29uc3RhbnQiKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIF9jb25zdGFudENvbnN0cnVjdG9yOwogIH0KCiAgQG92ZXJyaWRlCiAgSkNvbnN0cnVjdG9yRGF0YSBjb252ZXJ0KCkgewogICAgTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uOwogICAgaWYgKG5vZGUgaXMgaXIuQ29uc3RydWN0b3IpIHsKICAgICAgZGVmaW5pdGlvbiA9IG5ldyBTcGVjaWFsTWVtYmVyRGVmaW5pdGlvbihub2RlLCBNZW1iZXJLaW5kLmNvbnN0cnVjdG9yKTsKICAgIH0gZWxzZSB7CiAgICAgIGRlZmluaXRpb24gPSBuZXcgUmVndWxhck1lbWJlckRlZmluaXRpb24obm9kZSk7CiAgICB9CiAgICByZXR1cm4gbmV3IEpDb25zdHJ1Y3RvckRhdGFJbXBsKAogICAgICAgIG5vZGUsIGZ1bmN0aW9uTm9kZSwgZGVmaW5pdGlvbiwgc3RhdGljVHlwZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgZ2V0IGNsYXNzVHlwZVZhcmlhYmxlQWNjZXNzID0+CiAgICAgIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLnBhcmFtZXRlcjsKfQoKYWJzdHJhY3QgY2xhc3MgS0ZpZWxkRGF0YSBleHRlbmRzIEtNZW1iZXJEYXRhIHsKICBEYXJ0VHlwZSBnZXRGaWVsZFR5cGUoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCk7CgogIENvbnN0YW50RXhwcmVzc2lvbiBnZXRGaWVsZENvbnN0YW50RXhwcmVzc2lvbigKICAgICAgS2VybmVsVG9FbGVtZW50TWFwSW1wbCBlbGVtZW50TWFwKTsKfQoKY2xhc3MgS0ZpZWxkRGF0YUltcGwgZXh0ZW5kcyBLTWVtYmVyRGF0YUltcGwgaW1wbGVtZW50cyBLRmllbGREYXRhIHsKICBEYXJ0VHlwZSBfdHlwZTsKICBDb25zdGFudEV4cHJlc3Npb24gX2NvbnN0YW50RXhwcmVzc2lvbjsKCiAgS0ZpZWxkRGF0YUltcGwoaXIuRmllbGQgbm9kZSkgOiBzdXBlcihub2RlKTsKCiAgQG92ZXJyaWRlCiAgaXIuRmllbGQgZ2V0IG5vZGUgPT4gc3VwZXIubm9kZTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0RmllbGRUeXBlKGNvdmFyaWFudCBLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIGVsZW1lbnRNYXApIHsKICAgIHJldHVybiBfdHlwZSA/Pz0gZWxlbWVudE1hcC5nZXREYXJ0VHlwZShub2RlLnR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIGdldEZpZWxkQ29uc3RhbnRFeHByZXNzaW9uKAogICAgICBLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIGVsZW1lbnRNYXApIHsKICAgIGlmIChfY29uc3RhbnRFeHByZXNzaW9uID09IG51bGwpIHsKICAgICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICAgIF9jb25zdGFudEV4cHJlc3Npb24gPQogICAgICAgICAgICBuZXcgQ29uc3RhbnRpZmllcihlbGVtZW50TWFwKS52aXNpdChub2RlLmluaXRpYWxpemVyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUobm9kZSksCiAgICAgICAgICAgICJVbmV4cGVjdGVkIGZpZWxkICR7bm9kZX0gaW4gIgogICAgICAgICAgICAiRmllbGREYXRhSW1wbC5nZXRGaWVsZENvbnN0YW50Iik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfY29uc3RhbnRFeHByZXNzaW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgZ2V0IGNsYXNzVHlwZVZhcmlhYmxlQWNjZXNzIHsKICAgIGlmIChub2RlLmlzSW5zdGFuY2VNZW1iZXIpIHJldHVybiBDbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcy5pbnN0YW5jZUZpZWxkOwogICAgcmV0dXJuIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLm5vbmU7CiAgfQoKICBAb3ZlcnJpZGUKICBKRmllbGREYXRhIGNvbnZlcnQoKSB7CiAgICByZXR1cm4gbmV3IEpGaWVsZERhdGFJbXBsKAogICAgICAgIG5vZGUsIG5ldyBSZWd1bGFyTWVtYmVyRGVmaW5pdGlvbihub2RlKSwgc3RhdGljVHlwZXMpOwogIH0KfQoKY2xhc3MgS1R5cGVkZWZEYXRhIHsKICBmaW5hbCBpci5UeXBlZGVmIG5vZGU7CiAgZmluYWwgVHlwZWRlZkVudGl0eSBlbGVtZW50OwogIGZpbmFsIFR5cGVkZWZUeXBlIHJhd1R5cGU7CgogIEtUeXBlZGVmRGF0YSh0aGlzLm5vZGUsIHRoaXMuZWxlbWVudCwgdGhpcy5yYXdUeXBlKTsKfQoKY2xhc3MgS1R5cGVWYXJpYWJsZURhdGEgewogIGZpbmFsIGlyLlR5cGVQYXJhbWV0ZXIgbm9kZTsKICBEYXJ0VHlwZSBfYm91bmQ7CiAgRGFydFR5cGUgX2RlZmF1bHRUeXBlOwoKICBLVHlwZVZhcmlhYmxlRGF0YSh0aGlzLm5vZGUpOwoKICBEYXJ0VHlwZSBnZXRCb3VuZChJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwKSB7CiAgICByZXR1cm4gX2JvdW5kID8/PSBlbGVtZW50TWFwLmdldERhcnRUeXBlKG5vZGUuYm91bmQpOwogIH0KCiAgRGFydFR5cGUgZ2V0RGVmYXVsdFR5cGUoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgLy8gVE9ETygzNDUyMik6IFJlbW92ZSBgPz8gY29uc3QgaXIuRHluYW1pY1R5cGUoKWAgd2hlbiBpc3N1ZSAzNDUyMiBpcwogICAgLy8gZml4ZWQuCiAgICByZXR1cm4gX2RlZmF1bHRUeXBlID8/PQogICAgICAgIGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUobm9kZS5kZWZhdWx0VHlwZSA/PyBjb25zdCBpci5EeW5hbWljVHlwZSgpKTsKICB9CgogIEpUeXBlVmFyaWFibGVEYXRhIGNvcHkoKSB7CiAgICByZXR1cm4gbmV3IEpUeXBlVmFyaWFibGVEYXRhKG5vZGUpOwogIH0KfQqDqABOTjwBHAE5HwEoJCtOARkpKCMkISEnHhonHyIjKCABOBRBASUBQj0BNwEuJiEiCAYEAS82QQYEAR0fKjQiCAYEAUknGR0EATY1GSMEATsTGR8EAUU5AgFAFBwBJCUlAR0BGx0pLjYIBgQBQCcXHAQBMC0XIQQBHR4qKjIuKxQKJjgzEzMMKTEiMwwRFFEKCAYEAUE+GTkEATEZIjIkEw82CAYEAU0pMTgmJh4vDSk5OjMiCgoGHi8NKTk6MyIKCgY7BAIBFRwlPDMBHgFLRgQBSRtGIkAPOjslLB8ZLEoMCAYbBAFHSxsvBAIBHRs1FAE5JgFQDSQBPTkBUEsQRB0BKk4BSk8BLxtJAUsNSgFQJC83AgE2GRkdHSkqLwIBMisMFgEqJSU1IQExNAEbAUpGAQw+AQwlLiUEAU8uQzgBT0QVTD0cFAYBTh8fSBpDQDQqRioBTjgxMT0GMSwaUAZKRwEhKCo7BAEMOh0EATgkASgoLSEmATs1IyApEAghHiMIGwYBK0Q6TEkLHiAlETwvC0czEAg9EAg1LDcuJVASCggjIzUsMhIKKDsjHQ85NjcjHQgGASc2JSUoCAYBHgEkIT4oKy1GNBQKLwhKLCstRjgUCiBJCDYpBgEqLQYaMhtFBgFATC9ERwFPRT8JIkVGHUYBR0E2LjsjCAYBTRgEAQxEHh1FQQQBDE8dKicIBAEMUB0zUAQBDBtKHT0xCAQBQzgvBAEMSyYEAQwvOCsmJh0jNA0uPjozJwoKBh4vDSk5OjMiCgoGHi8NKTk6MyIKCgYcJQ0fKjozHQoKBlEsBAIBHBUBHh0fISYlGQEYHwFCAUMYAgEtDBcMGyMBDBoMGQwbDB0MIgwhASUBHQEMJwEMIQEMJzVDBAEMGUcEAgEdFgEfAUIBPgE3AUUZAgE4DBgBJQEMHwEeAQwnNUMEAQw/Ni0XPQYRBAIBNjsBTgEzRwIBPSQpAQwzNSIxNQ8yKCc8NxE3SB5HFwoIBhsEAgEwHB8MJhYBRgEMTj8EAQwzSFE5HyIYKEgRMgoIIwYBSTxBBiocIgQBDBshTQQBDDhIKQQCATguSQIBNSIsKQFFIwEMLkooOx9MDxIZNjwIBiEEAQwfISJODTYGJTYEAQw5KQIBMDQBMSoCAUUSKgEvAQwjAQxHOAQBDDErJxoeQw8SMSsvCAYgBAEMOE0pBAEMGR8/BAIBFRkfHQE3AgEaHxMZASABMToEATdLDhxMBAEdKAQCASRwYWNrYWdlOmNvbXBpbGVyL3NyYy9rZXJuZWwvZW52LmRhcnQ4c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvdW5pdmVyc2UvZnVuY3Rpb25fc2V0LmRhcnSnbS8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IHVuaXZlcnNlLmZ1bmN0aW9uX3NldDsKCmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnIHNob3cgSWRlbnRpZmllcnMsIFNlbGVjdG9yczsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnIHNob3cgSGFzaGluZywgU2V0bGV0OwppbXBvcnQgJ3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CgovLyBUT0RPKGthc3BlcmwpOiBUaGlzIGFjdHVhbGx5IGhvbGRzIGdldHRlcnMgYW5kIHNldHRlcnMganVzdCBmaW5lCi8vIHRvbyBhbmQgc3RyaWNseSB0aGV5IGFyZW4ndCBmdW5jdGlvbnMuIE1heWJlIHRoaXMgbmVlZHMgYSBiZXR0ZXIKLy8gbmFtZSAtLSBzb21ldGhpbmcgbGlrZSBFbGVtZW50U2V0IHNlZW1zIGEgYml0IHRvbyBnZW5lcmljLgpjbGFzcyBGdW5jdGlvblNldCB7CiAgZmluYWwgTWFwPFN0cmluZywgRnVuY3Rpb25TZXROb2RlPiBfbm9kZXM7CgogIGZhY3RvcnkgRnVuY3Rpb25TZXQoSXRlcmFibGU8TWVtYmVyRW50aXR5PiBsaXZlSW5zdGFuY2VNZW1iZXJzKSB7CiAgICBNYXA8U3RyaW5nLCBGdW5jdGlvblNldE5vZGU+IG5vZGVzID0gbmV3IE1hcDxTdHJpbmcsIEZ1bmN0aW9uU2V0Tm9kZT4oKTsKICAgIGZvciAoTWVtYmVyRW50aXR5IG1lbWJlciBpbiBsaXZlSW5zdGFuY2VNZW1iZXJzKSB7CiAgICAgIFN0cmluZyBuYW1lID0gbWVtYmVyLm5hbWU7CiAgICAgIChub2Rlc1tuYW1lXSA/Pz0gbmV3IEZ1bmN0aW9uU2V0Tm9kZShuYW1lKSkuYWRkKG1lbWJlcik7CiAgICB9CiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uU2V0LmludGVybmFsKG5vZGVzKTsKICB9CgogIEZ1bmN0aW9uU2V0LmludGVybmFsKHRoaXMuX25vZGVzKTsKCiAgYm9vbCBjb250YWlucyhNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KGVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlcik7CiAgICBhc3NlcnQoIWVsZW1lbnQuaXNBYnN0cmFjdCk7CiAgICBTdHJpbmcgbmFtZSA9IGVsZW1lbnQubmFtZTsKICAgIEZ1bmN0aW9uU2V0Tm9kZSBub2RlID0gX25vZGVzW25hbWVdOwogICAgcmV0dXJuIChub2RlICE9IG51bGwpID8gbm9kZS5jb250YWlucyhlbGVtZW50KSA6IGZhbHNlOwogIH0KCiAgLy8vIFJldHVybnMgYWxsIHRoZSBmdW5jdGlvbnMgdGhhdCBtYXkgYmUgaW52b2tlZCB3aXRoIHRoZSBbc2VsZWN0b3JdIG9uIGEKICAvLy8gcmVjZWl2ZXIgd2l0aCB0aGUgZ2l2ZW4gW2NvbnN0cmFpbnRdLiBUaGUgcmV0dXJuZWQgZWxlbWVudHMgbWF5IGluY2x1ZGUKICAvLy8gbm9TdWNoTWV0aG9kIGhhbmRsZXJzIHRoYXQgYXJlIHBvdGVudGlhbCB0YXJnZXRzIGluZGlyZWN0bHkgdGhyb3VnaCB0aGUKICAvLy8gbm9TdWNoTWV0aG9kIG1lY2hhbmlzbS4KICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGZpbHRlcigKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXIsIEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSB7CiAgICByZXR1cm4gcXVlcnkoc2VsZWN0b3IsIHJlY2VpdmVyLCBkb21haW4pLmZ1bmN0aW9uczsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBtYXNrIGZvciB0aGUgcG90ZW50aWFsIHJlY2VpdmVycyBvZiBhIGR5bmFtaWMgY2FsbCB0bwogIC8vLyBbc2VsZWN0b3JdIG9uIFtjb25zdHJhaW50XS4KICAvLy8KICAvLy8gVGhpcyB3aWxsIG5hcnJvdyB0aGUgY29uc3RyYWludHMgb2YgW2NvbnN0cmFpbnRdIHRvIGEgW1R5cGVNYXNrXSBvZiB0aGUKICAvLy8gc2V0IG9mIGNsYXNzZXMgdGhhdCBhY3R1YWxseSBpbXBsZW1lbnQgdGhlIHNlbGVjdGVkIG1lbWJlciBvciBpbXBsZW1lbnQKICAvLy8gdGhlIGhhbmRsaW5nICdub1N1Y2hNZXRob2QnIHdoZXJlIHRoZSBzZWxlY3RlZCBtZW1iZXIgaXMgdW5pbXBsZW1lbnRlZC4KICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZSgKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXIsIEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSB7CiAgICByZXR1cm4gcXVlcnkoc2VsZWN0b3IsIHJlY2VpdmVyLCBkb21haW4pLmNvbXB1dGVNYXNrKGRvbWFpbik7CiAgfQoKICBTZWxlY3Rvck1hc2sgX2NyZWF0ZVNlbGVjdG9yTWFzaygKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXIsIEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSB7CiAgICByZXR1cm4gcmVjZWl2ZXIgIT0gbnVsbAogICAgICAgID8gbmV3IFNlbGVjdG9yTWFzayhzZWxlY3RvciwgcmVjZWl2ZXIpCiAgICAgICAgOiBuZXcgU2VsZWN0b3JNYXNrKHNlbGVjdG9yLCBkb21haW4uZHluYW1pY1R5cGUpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIHNldCBvZiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdGhlIHRhcmdldCBvZiBhIGNhbGwgdG8KICAvLy8gW3NlbGVjdG9yXSBvbiBhIHJlY2VpdmVyIGNvbnN0cmFpbmVkIGJ5IFtjb25zdHJhaW50XSBpbmNsdWRpbmcKICAvLy8gJ25vU3VjaE1ldGhvZCcgbWV0aG9kcyB3aGVyZSBhcHBsaWNhYmxlLgogIEZ1bmN0aW9uU2V0UXVlcnkgcXVlcnkoCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyLCBBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgewogICAgU3RyaW5nIG5hbWUgPSBzZWxlY3Rvci5uYW1lOwogICAgU2VsZWN0b3JNYXNrIHNlbGVjdG9yTWFzayA9IF9jcmVhdGVTZWxlY3Rvck1hc2soc2VsZWN0b3IsIHJlY2VpdmVyLCBkb21haW4pOwogICAgU2VsZWN0b3JNYXNrIG5vU3VjaE1ldGhvZE1hc2sgPQogICAgICAgIG5ldyBTZWxlY3Rvck1hc2soU2VsZWN0b3JzLm5vU3VjaE1ldGhvZF8sIHNlbGVjdG9yTWFzay5yZWNlaXZlcik7CiAgICBGdW5jdGlvblNldE5vZGUgbm9kZSA9IF9ub2Rlc1tuYW1lXTsKICAgIEZ1bmN0aW9uU2V0Tm9kZSBub1N1Y2hNZXRob2RzID0gX25vZGVzW0lkZW50aWZpZXJzLm5vU3VjaE1ldGhvZF9dOwogICAgaWYgKG5vZGUgIT0gbnVsbCkgewogICAgICByZXR1cm4gbm9kZS5xdWVyeShzZWxlY3Rvck1hc2ssIGRvbWFpbiwgbm9TdWNoTWV0aG9kcywgbm9TdWNoTWV0aG9kTWFzayk7CiAgICB9CiAgICAvLyBJZiB0aGVyZSBpcyBubyBtZXRob2QgdGhhdCBtYXRjaGVzIFtzZWxlY3Rvcl0gd2Uga25vdyB3ZSBjYW4KICAgIC8vIG9ubHkgaGl0IFs6bm9TdWNoTWV0aG9kOl0uCiAgICBpZiAobm9TdWNoTWV0aG9kcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBjb25zdCBFbXB0eUZ1bmN0aW9uU2V0UXVlcnkoKTsKICAgIH0KICAgIHJldHVybiBub1N1Y2hNZXRob2RzLnF1ZXJ5KG5vU3VjaE1ldGhvZE1hc2ssIGRvbWFpbik7CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBhY3Rpb24oTWVtYmVyRW50aXR5IG1lbWJlcikpIHsKICAgIF9ub2Rlcy5mb3JFYWNoKChTdHJpbmcgbmFtZSwgRnVuY3Rpb25TZXROb2RlIG5vZGUpIHsKICAgICAgbm9kZS5mb3JFYWNoKGFjdGlvbik7CiAgICB9KTsKICB9Cn0KCi8vLyBBIHNlbGVjdG9yL2NvbnN0cmFpbnQgcGFpciByZXByZXNlbnRpbmcgdGhlIGR5bmFtaWMgaW52b2NhdGlvbiBvZiBbc2VsZWN0b3JdCi8vLyBvbiBhIHJlY2VpdmVyIGNvbnN0cmFpbmVkIGJ5IFtjb25zdHJhaW50XS4KY2xhc3MgU2VsZWN0b3JNYXNrIHsKICBmaW5hbCBTZWxlY3RvciBzZWxlY3RvcjsKICBmaW5hbCBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyOwogIEBvdmVycmlkZQogIGZpbmFsIGludCBoYXNoQ29kZTsKCiAgU2VsZWN0b3JNYXNrKHRoaXMuc2VsZWN0b3IsIHRoaXMucmVjZWl2ZXIpCiAgICAgIDogdGhpcy5oYXNoQ29kZSA9CiAgICAgICAgICAgIEhhc2hpbmcubWl4SGFzaENvZGVCaXRzKHNlbGVjdG9yLmhhc2hDb2RlLCByZWNlaXZlci5oYXNoQ29kZSkgewogICAgYXNzZXJ0KHJlY2VpdmVyICE9IG51bGwpOwogIH0KCiAgU3RyaW5nIGdldCBuYW1lID0+IHNlbGVjdG9yLm5hbWU7CgogIGJvb2wgYXBwbGllcyhNZW1iZXJFbnRpdHkgZWxlbWVudCwgQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pIHsKICAgIGlmICghc2VsZWN0b3IuYXBwbGllc1VubmFtZWQoZWxlbWVudCkpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBkb21haW4KICAgICAgICAuaXNUYXJnZXRpbmdNZW1iZXIocmVjZWl2ZXIsIGVsZW1lbnQsIHNlbGVjdG9yLm1lbWJlck5hbWUpCiAgICAgICAgLmlzUG90ZW50aWFsbHlUcnVlOwogIH0KCiAgYm9vbCBuZWVkc05vU3VjaE1ldGhvZEhhbmRsaW5nKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSB7CiAgICByZXR1cm4gZG9tYWluCiAgICAgICAgLm5lZWRzTm9TdWNoTWV0aG9kSGFuZGxpbmcocmVjZWl2ZXIsIHNlbGVjdG9yKQogICAgICAgIC5pc1BvdGVudGlhbGx5VHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBzZWxlY3RvciA9PSBvdGhlci5zZWxlY3RvciAmJiByZWNlaXZlciA9PSBvdGhlci5yZWNlaXZlcjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICcoJHNlbGVjdG9yLCRyZWNlaXZlciknOwp9CgovLy8gQSBub2RlIGluIHRoZSBbRnVuY3Rpb25TZXRdIGNhY2hpbmcgYWxsIFtGdW5jdGlvblNldFF1ZXJ5XSBvYmplY3QgZm9yCi8vLyBzZWxlY3RvcnMgd2l0aCB0aGUgc2FtZSBbbmFtZV0uCmNsYXNzIEZ1bmN0aW9uU2V0Tm9kZSB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgZmluYWwgTWFwPFNlbGVjdG9yTWFzaywgRnVuY3Rpb25TZXRRdWVyeT4gY2FjaGUgPQogICAgICA8U2VsZWN0b3JNYXNrLCBGdW5jdGlvblNldFF1ZXJ5Pnt9OwoKICAvLyBJbml0aWFsbHksIHdlIGtlZXAgdGhlIGVsZW1lbnRzIGluIGEgbGlzdCBiZWNhdXNlIGl0IGlzIG1vcmUKICAvLyBjb21wYWN0IHRoYW4gYSBoYXNoIHNldC4gT25jZSB3ZSBnZXQgZW5vdWdoIGVsZW1lbnRzLCB3ZSBjaGFuZ2UKICAvLyB0aGUgcmVwcmVzZW50YXRpb24gdG8gYmUgYSBzZXQgdG8gZ2V0IGZhc3RlciBjb250YWlucyBjaGVja3MuCiAgc3RhdGljIGNvbnN0IGludCBNQVhfRUxFTUVOVFNfSU5fTElTVCA9IDg7CiAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBlbGVtZW50cyA9IDxNZW1iZXJFbnRpdHk+W107CiAgYm9vbCBpc0xpc3QgPSB0cnVlOwoKICBGdW5jdGlvblNldE5vZGUodGhpcy5uYW1lKTsKCiAgdm9pZCBhZGQoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydChlbGVtZW50Lm5hbWUgPT0gbmFtZSk7CiAgICAvLyBXZSB0cnkgdG8gYXZvaWQgY2xlYXJpbmcgdGhlIGNhY2hlIHVubGVzcyB3ZSBoYXZlIHRvLiBGb3IgdGhhdAogICAgLy8gcmVhc29uIHdlIGtlZXAgdGhlIGV4cGxpY2l0IGNvbnRhaW5zIGNoZWNrIGV2ZW4gdGhvdWdoIHRoZSBhZGQKICAgIC8vIG1ldGhvZCBlbmRzIHVwIGRvaW5nIHRoZSB3b3JrIGFnYWluIChmb3Igc2V0cykuCiAgICBpZiAoIWVsZW1lbnRzLmNvbnRhaW5zKGVsZW1lbnQpKSB7CiAgICAgIGlmIChpc0xpc3QgJiYgZWxlbWVudHMubGVuZ3RoID49IE1BWF9FTEVNRU5UU19JTl9MSVNUKSB7CiAgICAgICAgZWxlbWVudHMgPSBlbGVtZW50cy50b1NldCgpOwogICAgICAgIGlzTGlzdCA9IGZhbHNlOwogICAgICB9CiAgICAgIGlmIChpc0xpc3QpIHsKICAgICAgICBMaXN0PE1lbWJlckVudGl0eT4gbGlzdCA9IGVsZW1lbnRzOwogICAgICAgIGxpc3QuYWRkKGVsZW1lbnQpOwogICAgICB9IGVsc2UgewogICAgICAgIFNldDxNZW1iZXJFbnRpdHk+IHNldCA9IGVsZW1lbnRzOwogICAgICAgIHNldC5hZGQoZWxlbWVudCk7CiAgICAgIH0KICAgICAgaWYgKCFjYWNoZS5pc0VtcHR5KSBjYWNoZS5jbGVhcigpOwogICAgfQogIH0KCiAgdm9pZCByZW1vdmUoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydChlbGVtZW50Lm5hbWUgPT0gbmFtZSk7CiAgICBpZiAoaXNMaXN0KSB7CiAgICAgIExpc3Q8TWVtYmVyRW50aXR5PiBsaXN0ID0gZWxlbWVudHM7CiAgICAgIGludCBpbmRleCA9IGxpc3QuaW5kZXhPZihlbGVtZW50KTsKICAgICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuOwogICAgICBNZW1iZXJFbnRpdHkgbGFzdCA9IGxpc3QucmVtb3ZlTGFzdCgpOwogICAgICBpZiAoaW5kZXggIT0gbGlzdC5sZW5ndGgpIHsKICAgICAgICBsaXN0W2luZGV4XSA9IGxhc3Q7CiAgICAgIH0KICAgICAgaWYgKCFjYWNoZS5pc0VtcHR5KSBjYWNoZS5jbGVhcigpOwogICAgfSBlbHNlIHsKICAgICAgU2V0PE1lbWJlckVudGl0eT4gc2V0ID0gZWxlbWVudHM7CiAgICAgIGlmIChzZXQucmVtb3ZlKGVsZW1lbnQpKSB7CiAgICAgICAgLy8gVG8gYXZvaWQgd29iYmxpbmcgYmV0d2VlbiB0aGUgdHdvIHJlcHJlc2VudGF0aW9ucywgd2UgZG8KICAgICAgICAvLyBub3QgdHJhbnNpdGlvbiBiYWNrIHRvIHRoZSBsaXN0IHJlcHJlc2VudGF0aW9uIGV2ZW4gaWYgd2UKICAgICAgICAvLyBlbmQgdXAgd2l0aCBmZXcgZW5vdWdoIGVsZW1lbnRzIGF0IHRoaXMgcG9pbnQuCiAgICAgICAgaWYgKCFjYWNoZS5pc0VtcHR5KSBjYWNoZS5jbGVhcigpOwogICAgICB9CiAgICB9CiAgfQoKICBib29sIGNvbnRhaW5zKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoZWxlbWVudC5uYW1lID09IG5hbWUpOwogICAgcmV0dXJuIGVsZW1lbnRzLmNvbnRhaW5zKGVsZW1lbnQpOwogIH0KCiAgdm9pZCBmb3JFYWNoKHZvaWQgYWN0aW9uKE1lbWJlckVudGl0eSBtZW1iZXIpKSB7CiAgICBlbGVtZW50cy5mb3JFYWNoKGFjdGlvbik7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB0aGUgdGFyZ2V0IG9mIFtzZWxlY3Rvck1hc2tdCiAgLy8vIGluY2x1ZGluZyBubyBzdWNoIG1ldGhvZCBoYW5kbGluZyB3aGVyZSBhcHBsaWNhYmxlLgogIEZ1bmN0aW9uU2V0UXVlcnkgcXVlcnkoU2VsZWN0b3JNYXNrIHNlbGVjdG9yTWFzaywgQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4sCiAgICAgIFtGdW5jdGlvblNldE5vZGUgbm9TdWNoTWV0aG9kcywgU2VsZWN0b3JNYXNrIG5vU3VjaE1ldGhvZE1hc2tdKSB7CiAgICBhc3NlcnQoc2VsZWN0b3JNYXNrLm5hbWUgPT0gbmFtZSk7CiAgICBGdW5jdGlvblNldFF1ZXJ5IHJlc3VsdCA9IGNhY2hlW3NlbGVjdG9yTWFza107CiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHJldHVybiByZXN1bHQ7CgogICAgU2V0bGV0PE1lbWJlckVudGl0eT4gZnVuY3Rpb25zOwogICAgZm9yIChNZW1iZXJFbnRpdHkgZWxlbWVudCBpbiBlbGVtZW50cykgewogICAgICBpZiAoc2VsZWN0b3JNYXNrLmFwcGxpZXMoZWxlbWVudCwgZG9tYWluKSkgewogICAgICAgIGlmIChmdW5jdGlvbnMgPT0gbnVsbCkgewogICAgICAgICAgLy8gRGVmZXIgdGhlIGFsbG9jYXRpb24gb2YgdGhlIGZ1bmN0aW9ucyBzZXQgdW50aWwgd2UgYXJlCiAgICAgICAgICAvLyBzdXJlIHdlIG5lZWQgaXQuIFRoaXMgYWxsb3dzIHVzIHRvIHJldHVybiBpbW11dGFibGUgZW1wdHkKICAgICAgICAgIC8vIGxpc3RzIHdoZW4gdGhlIGZpbHRlcmluZyBwcm9kdWNlZCBubyByZXN1bHRzLgogICAgICAgICAgZnVuY3Rpb25zID0gbmV3IFNldGxldDxNZW1iZXJFbnRpdHk+KCk7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9ucy5hZGQoZWxlbWVudCk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBJZiB3ZSBjYW5ub3QgZW5zdXJlIGEgbWV0aG9kIHdpbGwgYmUgZm91bmQgYXQgcnVudGltZSwgd2UgYWxzbwogICAgLy8gYWRkIFtub1N1Y2hNZXRob2RdIGltcGxlbWVudGF0aW9ucyB0aGF0IGFwcGx5IHRvIFttYXNrXSBhcwogICAgLy8gcG90ZW50aWFsIHRhcmdldHMuCiAgICBpZiAobm9TdWNoTWV0aG9kcyAhPSBudWxsICYmCiAgICAgICAgc2VsZWN0b3JNYXNrLm5lZWRzTm9TdWNoTWV0aG9kSGFuZGxpbmcoZG9tYWluKSkgewogICAgICBGdW5jdGlvblNldFF1ZXJ5IG5vU3VjaE1ldGhvZFF1ZXJ5ID0KICAgICAgICAgIG5vU3VjaE1ldGhvZHMucXVlcnkobm9TdWNoTWV0aG9kTWFzaywgZG9tYWluKTsKICAgICAgaWYgKCFub1N1Y2hNZXRob2RRdWVyeS5mdW5jdGlvbnMuaXNFbXB0eSkgewogICAgICAgIGlmIChmdW5jdGlvbnMgPT0gbnVsbCkgewogICAgICAgICAgZnVuY3Rpb25zID0KICAgICAgICAgICAgICBuZXcgU2V0bGV0PE1lbWJlckVudGl0eT4uZnJvbShub1N1Y2hNZXRob2RRdWVyeS5mdW5jdGlvbnMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmdW5jdGlvbnMuYWRkQWxsKG5vU3VjaE1ldGhvZFF1ZXJ5LmZ1bmN0aW9ucyk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBjYWNoZVtzZWxlY3Rvck1hc2tdID0gcmVzdWx0ID0gKGZ1bmN0aW9ucyAhPSBudWxsKQogICAgICAgID8gbmV3IEZ1bGxGdW5jdGlvblNldFF1ZXJ5KGZ1bmN0aW9ucykKICAgICAgICA6IGNvbnN0IEVtcHR5RnVuY3Rpb25TZXRRdWVyeSgpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdGdW5jdGlvblNldE5vZGUoJyk7CiAgICBTdHJpbmcgY29tbWEgPSAnJzsKICAgIGNhY2hlLmZvckVhY2goKG1hc2ssIHF1ZXJ5KSB7CiAgICAgIHNiLndyaXRlKGNvbW1hKTsKICAgICAgc2Iud3JpdGUoJyRtYXNrPSRxdWVyeScpOwogICAgICBjb21tYSA9ICcsJzsKICAgIH0pOwogICAgc2Iud3JpdGUoJyknKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKLy8vIEEgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSB0aGUgcG90ZW50aWFsIHRhcmdldHMgb2YgYWxsIGNhbGwgc2l0ZXMgc2hhcmluZwovLy8gdGhlIHNhbWUgcmVjZWl2ZXIgbWFzayBhbmQgc2VsZWN0b3IuCmFic3RyYWN0IGNsYXNzIEZ1bmN0aW9uU2V0UXVlcnkgewogIGNvbnN0IEZ1bmN0aW9uU2V0UXVlcnkoKTsKCiAgLy8vIENvbXB1dGUgdGhlIHR5cGUgb2YgYWxsIHBvdGVudGlhbCByZWNlaXZlcnMgb2YgdGhpcyBmdW5jdGlvbiBzZXQuCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlTWFzayhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbik7CgogIC8vLyBSZXR1cm5zIGFsbCBwb3RlbnRpYWwgdGFyZ2V0cyBvZiB0aGlzIGZ1bmN0aW9uIHNldC4KICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGdldCBmdW5jdGlvbnM7Cn0KCmNsYXNzIEVtcHR5RnVuY3Rpb25TZXRRdWVyeSBpbXBsZW1lbnRzIEZ1bmN0aW9uU2V0UXVlcnkgewogIGNvbnN0IEVtcHR5RnVuY3Rpb25TZXRRdWVyeSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVNYXNrKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PiBkb21haW4uZW1wdHlUeXBlOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGdldCBmdW5jdGlvbnMgPT4gY29uc3QgPE1lbWJlckVudGl0eT5bXTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJzxlbXB0eT4nOwp9CgpjbGFzcyBGdWxsRnVuY3Rpb25TZXRRdWVyeSBpbXBsZW1lbnRzIEZ1bmN0aW9uU2V0UXVlcnkgewogIEBvdmVycmlkZQogIGZpbmFsIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZnVuY3Rpb25zOwoKICBBYnN0cmFjdFZhbHVlIF9yZWNlaXZlcjsKCiAgRnVsbEZ1bmN0aW9uU2V0UXVlcnkodGhpcy5mdW5jdGlvbnMpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVNYXNrKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSB7CiAgICByZXR1cm4gX3JlY2VpdmVyID8/PSBkb21haW4uY29tcHV0ZVJlY2VpdmVyKGZ1bmN0aW9ucyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJF9yZWNlaXZlcjokZnVuY3Rpb25zJzsKfQqBLQBOTjwBHwE7JDExJgFERD4ULQFETTchPwYsBAElASgmISApPAQBTU5OHiFPOAQBSCIGTk5OHk9CBAEkTxwvOgQBR0UvGk8hUSRKKUcYUAZEIiEsBjoEATM5HAgEAgFRLxUbIAwWAS0YTB4EASQBQzkSQxwEAT8SNxwEAQwcLUUEAQwwAgFKJBgVNCoBQkVDLTYWAR4BIyJGRjcnPyUYCBQsGw8qGggpBgQBJiISKikdLSIcCCkNKCFERTorCAYEASgiJwQBMx4EAUw6UEgnMycBJC0zIURHOzIKIAgGAUZCGiE6KzkyIRZKETkKCAY3LikTBAEMFioiFyIXIBMIExoEAgFQKSIcAUg5ATooAgE6IQEMTQEMQgEMIgIBOQwqARsBKAEMOjwEAQwwAgEvcGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2UvZnVuY3Rpb25fc2V0LmRhcnREc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2FwaV9wcm90b3R5cGUvY29uc3RhbnRfZXZhbHVhdG9yLmRhcnSB/i8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZyb250X2VuZC5jb25zdGFudF9ldmFsdWF0b3I7CgpleHBvcnQgJy4uL2Zhc3RhL2tlcm5lbC9jb25zdGFudF9ldmFsdWF0b3IuZGFydCcKICAgIHNob3cKICAgICAgICBDb25zdGFudEV2YWx1YXRvciwKICAgICAgICBDb25zdGFudHNUcmFuc2Zvcm1lciwKICAgICAgICBFcnJvclJlcG9ydGVyLAogICAgICAgIEV2YWx1YXRpb25FbnZpcm9ubWVudCwKICAgICAgICBTaW1wbGVFcnJvclJlcG9ydGVyLAogICAgICAgIHRyYW5zZm9ybUNvbXBvbmVudCwKICAgICAgICB0cmFuc2Zvcm1MaWJyYXJpZXM7ChEATk48ASYBMQkbHhcfHRwcATtwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9jb25zdGFudF9ldmFsdWF0b3IuZGFydDdzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9rZXJuZWwva2VybmVsX2ltcGFjdC5kYXJ0wACBqC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi9yZXNvbHV0aW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvZXhwcmVzc2lvbnMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pci9jb25zdGFudHMuZGFydCc7CmltcG9ydCAnLi4vaXIvaW1wYWN0LmRhcnQnOwppbXBvcnQgJy4uL2lyL2ltcGFjdF9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2lyL3J1bnRpbWVfdHlwZV9hbmFseXNpcy5kYXJ0JzsKaW1wb3J0ICcuLi9pci9zY29wZS5kYXJ0JzsKaW1wb3J0ICcuLi9pci9zdGF0aWNfdHlwZS5kYXJ0JzsKaW1wb3J0ICcuLi9pci91dGlsLmRhcnQnOwppbXBvcnQgJy4uL2lyL3Zpc2l0b3JzLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvYW5ub3RhdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYXRpdmVfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9uYXRpdmUvYmVoYXZpb3IuZGFydCc7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi9yZXNvbHV0aW9uL3JlZ2lzdHJ5LmRhcnQnIHNob3cgUmVzb2x1dGlvbldvcmxkSW1wYWN0QnVpbGRlcjsKaW1wb3J0ICcuLi91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9mZWF0dXJlLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3VzZS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS93b3JsZF9idWlsZGVyLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRfbWFwLmRhcnQnOwoKLy8vIFZpc2l0b3IgdGhhdCBjb21wdXRlcyB0aGUgd29ybGQgaW1wYWN0IG9mIGEgbWVtYmVyLgpjbGFzcyBLZXJuZWxJbXBhY3RCdWlsZGVyIGV4dGVuZHMgSW1wYWN0QnVpbGRlckJhc2UKICAgIHdpdGggS2VybmVsSW1wYWN0UmVnaXN0cnlNaXhpbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgUmVzb2x1dGlvbldvcmxkSW1wYWN0QnVpbGRlciBpbXBhY3RCdWlsZGVyOwogIEBvdmVycmlkZQogIGZpbmFsIEtlcm5lbFRvRWxlbWVudE1hcCBlbGVtZW50TWFwOwogIEBvdmVycmlkZQogIGZpbmFsIERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlcjsKICBAb3ZlcnJpZGUKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CiAgQG92ZXJyaWRlCiAgZmluYWwgTWVtYmVyRW50aXR5IGN1cnJlbnRNZW1iZXI7CiAgZmluYWwgU2V0PFByYWdtYUFubm90YXRpb24+IF9hbm5vdGF0aW9uczsKICBAb3ZlcnJpZGUKICBmaW5hbCBDb25zdGFudFZhbHVlZmllciBfY29uc3RhbnRWYWx1ZWZpZXI7CgogIEtlcm5lbEltcGFjdEJ1aWxkZXIoCiAgICAgIHRoaXMuZWxlbWVudE1hcCwKICAgICAgdGhpcy5jdXJyZW50TWVtYmVyLAogICAgICB0aGlzLnJlcG9ydGVyLAogICAgICB0aGlzLl9vcHRpb25zLAogICAgICBWYXJpYWJsZVNjb3BlTW9kZWwgdmFyaWFibGVTY29wZU1vZGVsLAogICAgICB0aGlzLl9hbm5vdGF0aW9ucywKICAgICAgdGhpcy5fY29uc3RhbnRWYWx1ZWZpZXIpCiAgICAgIDogdGhpcy5pbXBhY3RCdWlsZGVyID0gbmV3IFJlc29sdXRpb25Xb3JsZEltcGFjdEJ1aWxkZXIoY3VycmVudE1lbWJlciksCiAgICAgICAgc3VwZXIoZWxlbWVudE1hcC50eXBlRW52aXJvbm1lbnQsIGVsZW1lbnRNYXAuY2xhc3NIaWVyYXJjaHksCiAgICAgICAgICAgIHZhcmlhYmxlU2NvcGVNb2RlbCk7CgogIEBvdmVycmlkZQogIENvbW1vbkVsZW1lbnRzIGdldCBjb21tb25FbGVtZW50cyA9PiBlbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzOwoKICBAb3ZlcnJpZGUKICBOYXRpdmVCYXNpY0RhdGEgZ2V0IF9uYXRpdmVCYXNpY0RhdGEgPT4gZWxlbWVudE1hcC5uYXRpdmVCYXNpY0RhdGE7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IHVzZUFzc2VydHMgPT4gX29wdGlvbnMuZW5hYmxlVXNlckFzc2VydGlvbnM7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGluZmVyRWZmZWN0aXZlbHlGaW5hbFZhcmlhYmxlVHlwZXMgPT4KICAgICAgIV9hbm5vdGF0aW9ucy5jb250YWlucyhQcmFnbWFBbm5vdGF0aW9uLmRpc2FibGVGaW5hbCk7Cn0KCi8vLyBDb252ZXJ0cyBhIFtJbXBhY3REYXRhXSBvYmplY3QgYmFzZWQgb24ga2VybmVsIHRvIHRoZSBjb3JyZXNwb25kaW5nCi8vLyBbUmVzb2x1dGlvbkltcGFjdF0gYmFzZWQgb24gdGhlIEsgbW9kZWwuCmNsYXNzIEtlcm5lbEltcGFjdENvbnZlcnRlciBleHRlbmRzIEtlcm5lbEltcGFjdFJlZ2lzdHJ5TWl4aW4gewogIEBvdmVycmlkZQogIGZpbmFsIFJlc29sdXRpb25Xb3JsZEltcGFjdEJ1aWxkZXIgaW1wYWN0QnVpbGRlcjsKICBAb3ZlcnJpZGUKICBmaW5hbCBLZXJuZWxUb0VsZW1lbnRNYXAgZWxlbWVudE1hcDsKICBAb3ZlcnJpZGUKICBmaW5hbCBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXI7CiAgQG92ZXJyaWRlCiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwogIEBvdmVycmlkZQogIGZpbmFsIE1lbWJlckVudGl0eSBjdXJyZW50TWVtYmVyOwogIEBvdmVycmlkZQogIGZpbmFsIENvbnN0YW50VmFsdWVmaWVyIF9jb25zdGFudFZhbHVlZmllcjsKCiAgS2VybmVsSW1wYWN0Q29udmVydGVyKHRoaXMuZWxlbWVudE1hcCwgdGhpcy5jdXJyZW50TWVtYmVyLCB0aGlzLnJlcG9ydGVyLAogICAgICB0aGlzLl9vcHRpb25zLCB0aGlzLl9jb25zdGFudFZhbHVlZmllcikKICAgICAgOiB0aGlzLmltcGFjdEJ1aWxkZXIgPSBuZXcgUmVzb2x1dGlvbldvcmxkSW1wYWN0QnVpbGRlcihjdXJyZW50TWVtYmVyKTsKCiAgQG92ZXJyaWRlCiAgaXIuVHlwZUVudmlyb25tZW50IGdldCB0eXBlRW52aXJvbm1lbnQgPT4gZWxlbWVudE1hcC50eXBlRW52aXJvbm1lbnQ7CgogIEBvdmVycmlkZQogIENvbW1vbkVsZW1lbnRzIGdldCBjb21tb25FbGVtZW50cyA9PiBlbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzOwoKICBAb3ZlcnJpZGUKICBOYXRpdmVCYXNpY0RhdGEgZ2V0IF9uYXRpdmVCYXNpY0RhdGEgPT4gZWxlbWVudE1hcC5uYXRpdmVCYXNpY0RhdGE7CgogIC8vLyBDb252ZXJ0cyBhIFtJbXBhY3REYXRhXSBvYmplY3QgYmFzZWQgb24ga2VybmVsIHRvIHRoZSBjb3JyZXNwb25kaW5nCiAgLy8vIFtSZXNvbHV0aW9uSW1wYWN0XSBiYXNlZCBvbiB0aGUgSyBtb2RlbC4KICBSZXNvbHV0aW9uSW1wYWN0IGNvbnZlcnQoSW1wYWN0RGF0YSBpbXBhY3REYXRhKSB7CiAgICBpbXBhY3REYXRhLmFwcGx5KHRoaXMpOwogICAgcmV0dXJuIGltcGFjdEJ1aWxkZXI7CiAgfQp9CgovLy8gW0ltcGFjdFJlZ2lzdHJ5XSB0aGF0IGNvbnZlcnRzIGtlcm5lbCBiYXNlZCBpbXBhY3QgZGF0YSB0byB3b3JsZCBpbXBhY3QKLy8vIG9iamVjdCBiYXNlZCBvbiB0aGUgSyBtb2RlbC4KYWJzdHJhY3QgY2xhc3MgS2VybmVsSW1wYWN0UmVnaXN0cnlNaXhpbiBpbXBsZW1lbnRzIEltcGFjdFJlZ2lzdHJ5IHsKICBDb21waWxlck9wdGlvbnMgZ2V0IF9vcHRpb25zOwogIERpYWdub3N0aWNSZXBvcnRlciBnZXQgcmVwb3J0ZXI7CiAgS2VybmVsVG9FbGVtZW50TWFwIGdldCBlbGVtZW50TWFwOwogIE1lbWJlckVudGl0eSBnZXQgY3VycmVudE1lbWJlcjsKICBSZXNvbHV0aW9uV29ybGRJbXBhY3RCdWlsZGVyIGdldCBpbXBhY3RCdWlsZGVyOwogIGlyLlR5cGVFbnZpcm9ubWVudCBnZXQgdHlwZUVudmlyb25tZW50OwogIENvbW1vbkVsZW1lbnRzIGdldCBjb21tb25FbGVtZW50czsKICBOYXRpdmVCYXNpY0RhdGEgZ2V0IF9uYXRpdmVCYXNpY0RhdGE7CiAgQ29uc3RhbnRWYWx1ZWZpZXIgZ2V0IF9jb25zdGFudFZhbHVlZmllcjsKCiAgT2JqZWN0IF9jb21wdXRlUmVjZWl2ZXJDb25zdHJhaW50KAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsIENsYXNzUmVsYXRpb24gcmVsYXRpb24pIHsKICAgIGlmIChyZWNlaXZlclR5cGUgaXMgaXIuSW50ZXJmYWNlVHlwZSkgewogICAgICBpZiAocmVjZWl2ZXJUeXBlLmNsYXNzTm9kZSA9PSB0eXBlRW52aXJvbm1lbnQuZnV0dXJlT3JDbGFzcykgewogICAgICAgIC8vIENGRSBlbmNvZGVzIEZ1dHVyZU9yIGFzIGFuIGludGVyZmFjZSB0eXBlIQogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgU3Ryb25nTW9kZUNvbnN0cmFpbnQoY29tbW9uRWxlbWVudHMsIF9uYXRpdmVCYXNpY0RhdGEsCiAgICAgICAgICBlbGVtZW50TWFwLmdldENsYXNzKHJlY2VpdmVyVHlwZS5jbGFzc05vZGUpLCByZWxhdGlvbik7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJQYXJhbWV0ZXJDaGVjayhpci5EYXJ0VHlwZSBpclR5cGUpIHsKICAgIERhcnRUeXBlIHR5cGUgPSBlbGVtZW50TWFwLmdldERhcnRUeXBlKGlyVHlwZSk7CiAgICBpZiAoIXR5cGUuaXNEeW5hbWljKSB7CiAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLnBhcmFtZXRlckNoZWNrKHR5cGUpKTsKICAgIH0KICB9CgogIExpc3Q8RGFydFR5cGU+IF9nZXRUeXBlQXJndW1lbnRzKExpc3Q8aXIuRGFydFR5cGU+IHR5cGVzKSB7CiAgICBpZiAodHlwZXMuaXNFbXB0eSkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gdHlwZXMubWFwKGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUpLnRvTGlzdCgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckxhenlGaWVsZCgpIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJGZWF0dXJlKEZlYXR1cmUuTEFaWV9GSUVMRCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyRmllbGROb2RlKGlyLkZpZWxkIGZpZWxkKSB7CiAgICBpZiAoZmllbGQuaXNJbnN0YW5jZU1lbWJlciAmJgogICAgICAgIF9uYXRpdmVCYXNpY0RhdGEKICAgICAgICAgICAgLmlzTmF0aXZlQ2xhc3MoZWxlbWVudE1hcC5nZXRDbGFzcyhmaWVsZC5lbmNsb3NpbmdDbGFzcykpKSB7CiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBlbGVtZW50TWFwLmdldE1lbWJlcihmaWVsZCk7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE5hdGl2ZURhdGFCdWlsZGVyIGFscmVhZHkgaGFzIHRoZSBuYXRpdmUgYmVoYXZpb3IKICAgICAgLy8gYXQgdGhpcyBwb2ludC4gVXNlIHRoYXQgaW5zdGVhZC4KICAgICAgYm9vbCBpc0pzSW50ZXJvcCA9IF9uYXRpdmVCYXNpY0RhdGEuaXNKc0ludGVyb3BNZW1iZXIobWVtYmVyKTsKICAgICAgTGlzdDxDb25zdGFudFZhbHVlPiBtZXRhZGF0YSA9CiAgICAgICAgICBlbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudC5nZXRNZW1iZXJNZXRhZGF0YShtZW1iZXIpOwogICAgICBJdGVyYWJsZTxTdHJpbmc+IGNyZWF0ZXNBbm5vdGF0aW9ucyA9CiAgICAgICAgICBnZXRDcmVhdGVzQW5ub3RhdGlvbnMocmVwb3J0ZXIsIGNvbW1vbkVsZW1lbnRzLCBtZXRhZGF0YSk7CiAgICAgIEl0ZXJhYmxlPFN0cmluZz4gcmV0dXJuc0Fubm90YXRpb25zID0KICAgICAgICAgIGdldFJldHVybnNBbm5vdGF0aW9ucyhyZXBvcnRlciwgY29tbW9uRWxlbWVudHMsIG1ldGFkYXRhKTsKICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3Rlck5hdGl2ZURhdGEoZWxlbWVudE1hcC5nZXROYXRpdmVCZWhhdmlvckZvckZpZWxkTG9hZCgKICAgICAgICAgIGZpZWxkLCBjcmVhdGVzQW5ub3RhdGlvbnMsIHJldHVybnNBbm5vdGF0aW9ucywKICAgICAgICAgIGlzSnNJbnRlcm9wOiBpc0pzSW50ZXJvcCkpOwogICAgICBpbXBhY3RCdWlsZGVyCiAgICAgICAgICAucmVnaXN0ZXJOYXRpdmVEYXRhKGVsZW1lbnRNYXAuZ2V0TmF0aXZlQmVoYXZpb3JGb3JGaWVsZFN0b3JlKGZpZWxkKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQ29uc3RydWN0b3JOb2RlKGlyLkNvbnN0cnVjdG9yIGNvbnN0cnVjdG9yKSB7CiAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gZWxlbWVudE1hcC5nZXRNZW1iZXIoY29uc3RydWN0b3IpOwogICAgaWYgKGNvbnN0cnVjdG9yLmlzRXh0ZXJuYWwgJiYgIWNvbW1vbkVsZW1lbnRzLmlzRm9yZWlnbkhlbHBlcihtZW1iZXIpKSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE5hdGl2ZURhdGFCdWlsZGVyIGFscmVhZHkgaGFzIHRoZSBuYXRpdmUgYmVoYXZpb3IKICAgICAgLy8gYXQgdGhpcyBwb2ludC4gVXNlIHRoYXQgaW5zdGVhZC4KICAgICAgYm9vbCBpc0pzSW50ZXJvcCA9IF9uYXRpdmVCYXNpY0RhdGEuaXNKc0ludGVyb3BNZW1iZXIobWVtYmVyKTsKICAgICAgTGlzdDxDb25zdGFudFZhbHVlPiBtZXRhZGF0YSA9CiAgICAgICAgICBlbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudC5nZXRNZW1iZXJNZXRhZGF0YShtZW1iZXIpOwogICAgICBJdGVyYWJsZTxTdHJpbmc+IGNyZWF0ZXNBbm5vdGF0aW9ucyA9CiAgICAgICAgICBnZXRDcmVhdGVzQW5ub3RhdGlvbnMocmVwb3J0ZXIsIGNvbW1vbkVsZW1lbnRzLCBtZXRhZGF0YSk7CiAgICAgIEl0ZXJhYmxlPFN0cmluZz4gcmV0dXJuc0Fubm90YXRpb25zID0KICAgICAgICAgIGdldFJldHVybnNBbm5vdGF0aW9ucyhyZXBvcnRlciwgY29tbW9uRWxlbWVudHMsIG1ldGFkYXRhKTsKICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3Rlck5hdGl2ZURhdGEoZWxlbWVudE1hcC5nZXROYXRpdmVCZWhhdmlvckZvck1ldGhvZCgKICAgICAgICAgIGNvbnN0cnVjdG9yLCBjcmVhdGVzQW5ub3RhdGlvbnMsIHJldHVybnNBbm5vdGF0aW9ucywKICAgICAgICAgIGlzSnNJbnRlcm9wOiBpc0pzSW50ZXJvcCkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN5bmNTdGFyKGlyLkRhcnRUeXBlIGVsZW1lbnRUeXBlKSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRmVhdHVyZShGZWF0dXJlLlNZTkNfU1RBUik7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKAogICAgICAgIGNvbW1vbkVsZW1lbnRzLnN5bmNTdGFySXRlcmFibGVGYWN0b3J5LAogICAgICAgIGNvbnN0IENhbGxTdHJ1Y3R1cmUudW5uYW1lZCgxLCAxKSwKICAgICAgICA8RGFydFR5cGU+W2VsZW1lbnRNYXAuZ2V0RGFydFR5cGUoZWxlbWVudFR5cGUpXSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckFzeW5jKGlyLkRhcnRUeXBlIGVsZW1lbnRUeXBlKSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRmVhdHVyZShGZWF0dXJlLkFTWU5DKTsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoCiAgICAgICAgY29tbW9uRWxlbWVudHMuYXN5bmNBd2FpdENvbXBsZXRlckZhY3RvcnksCiAgICAgICAgY29uc3QgQ2FsbFN0cnVjdHVyZS51bm5hbWVkKDAsIDEpLAogICAgICAgIDxEYXJ0VHlwZT5bZWxlbWVudE1hcC5nZXREYXJ0VHlwZShlbGVtZW50VHlwZSldKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQXN5bmNTdGFyKGlyLkRhcnRUeXBlIGVsZW1lbnRUeXBlKSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRmVhdHVyZShGZWF0dXJlLkFTWU5DX1NUQVIpOwogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZSgKICAgICAgICBjb21tb25FbGVtZW50cy5hc3luY1N0YXJTdHJlYW1Db250cm9sbGVyRmFjdG9yeSwKICAgICAgICBjb25zdCBDYWxsU3RydWN0dXJlLnVubmFtZWQoMSwgMSksCiAgICAgICAgPERhcnRUeXBlPltlbGVtZW50TWFwLmdldERhcnRUeXBlKGVsZW1lbnRUeXBlKV0pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJQcm9jZWR1cmVOb2RlKGlyLlByb2NlZHVyZSBwcm9jZWR1cmUpIHsKICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBlbGVtZW50TWFwLmdldE1lbWJlcihwcm9jZWR1cmUpOwogICAgaWYgKHByb2NlZHVyZS5pc0V4dGVybmFsICYmICFjb21tb25FbGVtZW50cy5pc0ZvcmVpZ25IZWxwZXIobWVtYmVyKSkgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBOYXRpdmVEYXRhQnVpbGRlciBhbHJlYWR5IGhhcyB0aGUgbmF0aXZlIGJlaGF2aW9yCiAgICAgIC8vIGF0IHRoaXMgcG9pbnQuIFVzZSB0aGF0IGluc3RlYWQuCiAgICAgIGJvb2wgaXNKc0ludGVyb3AgPSBfbmF0aXZlQmFzaWNEYXRhLmlzSnNJbnRlcm9wTWVtYmVyKG1lbWJlcik7CiAgICAgIExpc3Q8Q29uc3RhbnRWYWx1ZT4gbWV0YWRhdGEgPQogICAgICAgICAgZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQuZ2V0TWVtYmVyTWV0YWRhdGEobWVtYmVyKTsKICAgICAgSXRlcmFibGU8U3RyaW5nPiBjcmVhdGVzQW5ub3RhdGlvbnMgPQogICAgICAgICAgZ2V0Q3JlYXRlc0Fubm90YXRpb25zKHJlcG9ydGVyLCBjb21tb25FbGVtZW50cywgbWV0YWRhdGEpOwogICAgICBJdGVyYWJsZTxTdHJpbmc+IHJldHVybnNBbm5vdGF0aW9ucyA9CiAgICAgICAgICBnZXRSZXR1cm5zQW5ub3RhdGlvbnMocmVwb3J0ZXIsIGNvbW1vbkVsZW1lbnRzLCBtZXRhZGF0YSk7CiAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJOYXRpdmVEYXRhKGVsZW1lbnRNYXAuZ2V0TmF0aXZlQmVoYXZpb3JGb3JNZXRob2QoCiAgICAgICAgICBwcm9jZWR1cmUsIGNyZWF0ZXNBbm5vdGF0aW9ucywgcmV0dXJuc0Fubm90YXRpb25zLAogICAgICAgICAgaXNKc0ludGVyb3A6IGlzSnNJbnRlcm9wKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVySW50TGl0ZXJhbChpbnQgdmFsdWUpIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJDb25zdGFudExpdGVyYWwoCiAgICAgICAgbmV3IEludENvbnN0YW50RXhwcmVzc2lvbihuZXcgQmlnSW50LmZyb20odmFsdWUpLnRvVW5zaWduZWQoNjQpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyRG91YmxlTGl0ZXJhbChkb3VibGUgdmFsdWUpIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJDb25zdGFudExpdGVyYWwobmV3IERvdWJsZUNvbnN0YW50RXhwcmVzc2lvbih2YWx1ZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckJvb2xMaXRlcmFsKGJvb2wgdmFsdWUpIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJDb25zdGFudExpdGVyYWwobmV3IEJvb2xDb25zdGFudEV4cHJlc3Npb24odmFsdWUpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdHJpbmdMaXRlcmFsKFN0cmluZyB2YWx1ZSkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckNvbnN0YW50TGl0ZXJhbChuZXcgU3RyaW5nQ29uc3RhbnRFeHByZXNzaW9uKHZhbHVlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3ltYm9sTGl0ZXJhbChTdHJpbmcgdmFsdWUpIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJDb25zdFN5bWJvbE5hbWUodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck51bGxMaXRlcmFsKCkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckNvbnN0YW50TGl0ZXJhbChuZXcgTnVsbENvbnN0YW50RXhwcmVzc2lvbigpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJMaXN0TGl0ZXJhbChpci5EYXJ0VHlwZSBlbGVtZW50VHlwZSwKICAgICAge2Jvb2wgaXNDb25zdCwgYm9vbCBpc0VtcHR5fSkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3Rlckxpc3RMaXRlcmFsKG5ldyBMaXN0TGl0ZXJhbFVzZSgKICAgICAgICBjb21tb25FbGVtZW50cy5saXN0VHlwZShlbGVtZW50TWFwLmdldERhcnRUeXBlKGVsZW1lbnRUeXBlKSksCiAgICAgICAgaXNDb25zdGFudDogaXNDb25zdCwKICAgICAgICBpc0VtcHR5OiBpc0VtcHR5KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU2V0TGl0ZXJhbChpci5EYXJ0VHlwZSBlbGVtZW50VHlwZSwKICAgICAge2Jvb2wgaXNDb25zdCwgYm9vbCBpc0VtcHR5fSkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclNldExpdGVyYWwobmV3IFNldExpdGVyYWxVc2UoCiAgICAgICAgY29tbW9uRWxlbWVudHMuc2V0VHlwZShlbGVtZW50TWFwLmdldERhcnRUeXBlKGVsZW1lbnRUeXBlKSksCiAgICAgICAgaXNDb25zdGFudDogaXNDb25zdCwKICAgICAgICBpc0VtcHR5OiBpc0VtcHR5KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTWFwTGl0ZXJhbChpci5EYXJ0VHlwZSBrZXlUeXBlLCBpci5EYXJ0VHlwZSB2YWx1ZVR5cGUsCiAgICAgIHtib29sIGlzQ29uc3QsIGJvb2wgaXNFbXB0eX0pIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJNYXBMaXRlcmFsKG5ldyBNYXBMaXRlcmFsVXNlKAogICAgICAgIGNvbW1vbkVsZW1lbnRzLm1hcFR5cGUoCiAgICAgICAgICAgIGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUoa2V5VHlwZSksIGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUodmFsdWVUeXBlKSksCiAgICAgICAgaXNDb25zdGFudDogaXNDb25zdCwKICAgICAgICBpc0VtcHR5OiBpc0VtcHR5KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTmV3KAogICAgICBpci5NZW1iZXIgdGFyZ2V0LAogICAgICBpci5JbnRlcmZhY2VUeXBlIHR5cGUsCiAgICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsCiAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCwKICAgICAge2Jvb2wgaXNDb25zdH0pIHsKICAgIENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yID0gZWxlbWVudE1hcC5nZXRDb25zdHJ1Y3Rvcih0YXJnZXQpOwogICAgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlID0gbmV3IENhbGxTdHJ1Y3R1cmUoCiAgICAgICAgcG9zaXRpb25hbEFyZ3VtZW50cyArIG5hbWVkQXJndW1lbnRzLmxlbmd0aCwKICAgICAgICBuYW1lZEFyZ3VtZW50cywKICAgICAgICB0eXBlQXJndW1lbnRzLmxlbmd0aCk7CiAgICBJbXBvcnRFbnRpdHkgZGVmZXJyZWRJbXBvcnQgPSBlbGVtZW50TWFwLmdldEltcG9ydChpbXBvcnQpOwogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShpc0NvbnN0CiAgICAgICAgPyBuZXcgU3RhdGljVXNlLmNvbnN0Q29uc3RydWN0b3JJbnZva2UoY29uc3RydWN0b3IsIGNhbGxTdHJ1Y3R1cmUsCiAgICAgICAgICAgIGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUodHlwZSksIGRlZmVycmVkSW1wb3J0KQogICAgICAgIDogbmV3IFN0YXRpY1VzZS50eXBlZENvbnN0cnVjdG9ySW52b2tlKGNvbnN0cnVjdG9yLCBjYWxsU3RydWN0dXJlLAogICAgICAgICAgICBlbGVtZW50TWFwLmdldERhcnRUeXBlKHR5cGUpLCBkZWZlcnJlZEltcG9ydCkpOwogICAgaWYgKHR5cGUudHlwZUFyZ3VtZW50cy5hbnkoKGlyLkRhcnRUeXBlIHR5cGUpID0+IHR5cGUgaXMhIGlyLkR5bmFtaWNUeXBlKSkgewogICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRmVhdHVyZShGZWF0dXJlLlRZUEVfVkFSSUFCTEVfQk9VTkRTX0NIRUNLKTsKICAgIH0KCiAgICBpZiAoY29tbW9uRWxlbWVudHMuaXNTeW1ib2xDb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcikpIHsKICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckZlYXR1cmUoRmVhdHVyZS5TWU1CT0xfQ09OU1RSVUNUT1IpOwogICAgfQoKICAgIGlmICh0YXJnZXQuaXNFeHRlcm5hbCAmJgogICAgICAgIGNvbnN0cnVjdG9yLmlzRnJvbUVudmlyb25tZW50Q29uc3RydWN0b3IgJiYKICAgICAgICAhaXNDb25zdCkgewogICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRmVhdHVyZShGZWF0dXJlLlRIUk9XX1VOU1VQUE9SVEVEX0VSUk9SKTsKICAgICAgLy8gV2UgbmVlZCB0byByZWdpc3RlciB0aGUgZXh0ZXJuYWwgY29uc3RydWN0b3IgYXMgbGl2ZSBiZWxvdywgc28gZG9uJ3QKICAgICAgLy8gcmV0dXJuIGhlcmUuCiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQ29uc3RJbnN0YW50aWF0aW9uKGlyLkNsYXNzIGNscywgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cywKICAgICAgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0KSB7CiAgICBJbXBvcnRFbnRpdHkgZGVmZXJyZWRJbXBvcnQgPSBlbGVtZW50TWFwLmdldEltcG9ydChpbXBvcnQpOwogICAgSW50ZXJmYWNlVHlwZSB0eXBlID0gZWxlbWVudE1hcC5jcmVhdGVJbnRlcmZhY2VUeXBlKGNscywgdHlwZUFyZ3VtZW50cyk7CiAgICBpbXBhY3RCdWlsZGVyCiAgICAgICAgLnJlZ2lzdGVyVHlwZVVzZShuZXcgVHlwZVVzZS5jb25zdEluc3RhbnRpYXRpb24odHlwZSwgZGVmZXJyZWRJbXBvcnQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJDb25zdENvbnN0cnVjdG9ySW52b2NhdGlvbk5vZGUoaXIuQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUpIHsKICAgIGFzc2VydChub2RlLmlzQ29uc3QpOwogICAgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IgPSBlbGVtZW50TWFwLmdldENvbnN0cnVjdG9yKG5vZGUudGFyZ2V0KTsKICAgIGlmIChjb21tb25FbGVtZW50cy5pc1N5bWJvbENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKSkgewogICAgICBDb25zdGFudFZhbHVlIHZhbHVlID0KICAgICAgICAgIGVsZW1lbnRNYXAuZ2V0Q29uc3RhbnRWYWx1ZShub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmZpcnN0KTsKICAgICAgaWYgKCF2YWx1ZS5pc1N0cmluZykgewogICAgICAgIC8vIFRPRE8oaGV0KTogR2V0IHRoZSBhY3R1YWwgc3BhbiBmb3IgdGhlIFN5bWJvbCBjb25zdHJ1Y3RvciBhcmd1bWVudAogICAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICAgTWVzc2FnZUtpbmQuU1RSSU5HX0VYUEVDVEVELAogICAgICAgICAgICB7J3R5cGUnOiB2YWx1ZS5nZXRUeXBlKGVsZW1lbnRNYXAuY29tbW9uRWxlbWVudHMpfSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIFN0cmluZ0NvbnN0YW50VmFsdWUgc3RyaW5nVmFsdWUgPSB2YWx1ZTsKICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckNvbnN0U3ltYm9sTmFtZShzdHJpbmdWYWx1ZS5zdHJpbmdWYWx1ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3VwZXJJbml0aWFsaXplcigKICAgICAgaXIuQ29uc3RydWN0b3Igc291cmNlLAogICAgICBpci5Db25zdHJ1Y3RvciB0YXJnZXQsCiAgICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsCiAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1heWJlIHJld3JpdGUgYG5vZGUudGFyZ2V0YCB0byBwb2ludCB0byBhCiAgICAvLyBzeW50aGVzaXplZCB1bm5hbWVkIG1peGluIGNvbnN0cnVjdG9yIHdoZW4gbmVlZGVkLiBUaGlzIHdvdWxkIHJlcXVpcmUgdXMKICAgIC8vIHRvIGNvbnNpZGVyIGltcGFjdCBidWlsZGluZyBhIHJlcXVpcmVkIHByZS1zdGVwIGZvciBpbmZlcmVuY2UgYW5kCiAgICAvLyBzc2EtYnVpbGRpbmcuCiAgICBDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvciA9CiAgICAgICAgZWxlbWVudE1hcC5nZXRTdXBlckNvbnN0cnVjdG9yKHNvdXJjZSwgdGFyZ2V0KTsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdXBlckNvbnN0cnVjdG9ySW52b2tlKAogICAgICAgIGNvbnN0cnVjdG9yLAogICAgICAgIG5ldyBDYWxsU3RydWN0dXJlKHBvc2l0aW9uYWxBcmd1bWVudHMgKyBuYW1lZEFyZ3VtZW50cy5sZW5ndGgsCiAgICAgICAgICAgIG5hbWVkQXJndW1lbnRzLCB0eXBlQXJndW1lbnRzLmxlbmd0aCkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdGF0aWNJbnZvY2F0aW9uKAogICAgICBpci5Qcm9jZWR1cmUgcHJvY2VkdXJlLAogICAgICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLAogICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQpIHsKICAgIEZ1bmN0aW9uRW50aXR5IHRhcmdldCA9IGVsZW1lbnRNYXAuZ2V0TWV0aG9kKHByb2NlZHVyZSk7CiAgICBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUgPSBuZXcgQ2FsbFN0cnVjdHVyZSgKICAgICAgICBwb3NpdGlvbmFsQXJndW1lbnRzICsgbmFtZWRBcmd1bWVudHMubGVuZ3RoLAogICAgICAgIG5hbWVkQXJndW1lbnRzLAogICAgICAgIHR5cGVBcmd1bWVudHMubGVuZ3RoKTsKICAgIExpc3Q8RGFydFR5cGU+IGRhcnRUeXBlQXJndW1lbnRzID0gX2dldFR5cGVBcmd1bWVudHModHlwZUFyZ3VtZW50cyk7CiAgICBpZiAoY29tbW9uRWxlbWVudHMuaXNFeHRyYWN0VHlwZUFyZ3VtZW50cyh0YXJnZXQpKSB7CiAgICAgIF9oYW5kbGVFeHRyYWN0VHlwZUFyZ3VtZW50cyh0YXJnZXQsIGRhcnRUeXBlQXJndW1lbnRzLCBjYWxsU3RydWN0dXJlKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIHsKICAgICAgSW1wb3J0RW50aXR5IGRlZmVycmVkSW1wb3J0ID0gZWxlbWVudE1hcC5nZXRJbXBvcnQoaW1wb3J0KTsKICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZSgKICAgICAgICAgIHRhcmdldCwgY2FsbFN0cnVjdHVyZSwgZGFydFR5cGVBcmd1bWVudHMsIGRlZmVycmVkSW1wb3J0KSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3RhdGljSW52b2NhdGlvbk5vZGUoaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKSB7CiAgICBzd2l0Y2ggKGVsZW1lbnRNYXAuZ2V0Rm9yZWlnbktpbmQobm9kZSkpIHsKICAgICAgY2FzZSBGb3JlaWduS2luZC5KUzoKICAgICAgICBpbXBhY3RCdWlsZGVyCiAgICAgICAgICAgIC5yZWdpc3Rlck5hdGl2ZURhdGEoZWxlbWVudE1hcC5nZXROYXRpdmVCZWhhdmlvckZvckpzQ2FsbChub2RlKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgRm9yZWlnbktpbmQuSlNfQlVJTFRJTjoKICAgICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyTmF0aXZlRGF0YSgKICAgICAgICAgICAgZWxlbWVudE1hcC5nZXROYXRpdmVCZWhhdmlvckZvckpzQnVpbHRpbkNhbGwobm9kZSkpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEZvcmVpZ25LaW5kLkpTX0VNQkVEREVEX0dMT0JBTDoKICAgICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyTmF0aXZlRGF0YSgKICAgICAgICAgICAgZWxlbWVudE1hcC5nZXROYXRpdmVCZWhhdmlvckZvckpzRW1iZWRkZWRHbG9iYWxDYWxsKG5vZGUpKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBGb3JlaWduS2luZC5KU19JTlRFUkNFUFRPUl9DT05TVEFOVDoKICAgICAgICBJbnRlcmZhY2VUeXBlIHR5cGUgPQogICAgICAgICAgICBlbGVtZW50TWFwLmdldEludGVyZmFjZVR5cGVGb3JKc0ludGVyY2VwdG9yQ2FsbChub2RlKTsKICAgICAgICBpZiAodHlwZSAhPSBudWxsKSB7CiAgICAgICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyVHlwZVVzZShuZXcgVHlwZVVzZS5pbnN0YW50aWF0aW9uKHR5cGUpKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgRm9yZWlnbktpbmQuTk9ORToKICAgICAgICBicmVhazsKICAgIH0KICB9CgogIHZvaWQgX2hhbmRsZUV4dHJhY3RUeXBlQXJndW1lbnRzKEZ1bmN0aW9uRW50aXR5IHRhcmdldCwKICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cywgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlKSB7CiAgICAvLyBleHRyYWN0VHlwZUFyZ3VtZW50czxNYXA+KG9iaiwgZm4pIGhhcyBhZGRpdGlvbmFsIGltcGFjdHM6CiAgICAvLwogICAgLy8gICAxLiBBbGwgY2xhc3NlcyBpbXBsZW1lbnRpbmcgTWFwIG5lZWQgdG8gY2FycnkgdHlwZSBhcmd1bWVudHMgKHNpbWlsYXIKICAgIC8vICAgICAgdG8gY2hlY2tpbmcgYG8gaXMgTWFwPEssIFY+YCkuCiAgICAvLwogICAgLy8gICAyLiBUaGVyZSBpcyBhbiBpbnZvY2F0aW9uIG9mIGZuIHdpdGggc29tZSBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHMuCiAgICAvLwogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZSgKICAgICAgICBuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZSh0YXJnZXQsIGNhbGxTdHJ1Y3R1cmUsIHR5cGVBcmd1bWVudHMpKTsKCiAgICBpZiAodHlwZUFyZ3VtZW50cy5sZW5ndGggIT0gMSkgcmV0dXJuOwogICAgRGFydFR5cGUgbWF0Y2hlZFR5cGUgPSB0eXBlQXJndW1lbnRzLmZpcnN0OwoKICAgIGlmIChtYXRjaGVkVHlwZSBpcyEgSW50ZXJmYWNlVHlwZSkgcmV0dXJuOwogICAgSW50ZXJmYWNlVHlwZSBpbnRlcmZhY2VUeXBlID0gbWF0Y2hlZFR5cGU7CiAgICBDbGFzc0VudGl0eSBjbHMgPSBpbnRlcmZhY2VUeXBlLmVsZW1lbnQ7CiAgICBJbnRlcmZhY2VUeXBlIHRoaXNUeXBlID0gZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQuZ2V0VGhpc1R5cGUoY2xzKTsKCiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyVHlwZVVzZShuZXcgVHlwZVVzZS5pc0NoZWNrKHRoaXNUeXBlKSk7CgogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBuZXcgU2VsZWN0b3IuY2FsbENsb3N1cmUoCiAgICAgICAgMCwgY29uc3QgPFN0cmluZz5bXSwgdGhpc1R5cGUudHlwZUFyZ3VtZW50cy5sZW5ndGgpOwogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckR5bmFtaWNVc2UoCiAgICAgICAgbmV3IER5bmFtaWNVc2Uoc2VsZWN0b3IsIG51bGwsIHRoaXNUeXBlLnR5cGVBcmd1bWVudHMpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdGF0aWNUZWFyT2ZmKAogICAgICBpci5Qcm9jZWR1cmUgcHJvY2VkdXJlLCBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQpIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNUZWFyT2ZmKAogICAgICAgIGVsZW1lbnRNYXAuZ2V0TWV0aG9kKHByb2NlZHVyZSksIGVsZW1lbnRNYXAuZ2V0SW1wb3J0KGltcG9ydCkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdGF0aWNHZXQoaXIuTWVtYmVyIG1lbWJlciwgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0KSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3RhdGljR2V0KAogICAgICAgIGVsZW1lbnRNYXAuZ2V0TWVtYmVyKG1lbWJlciksIGVsZW1lbnRNYXAuZ2V0SW1wb3J0KGltcG9ydCkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdGF0aWNTZXQoaXIuTWVtYmVyIG1lbWJlciwgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0KSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3RhdGljU2V0KAogICAgICAgIGVsZW1lbnRNYXAuZ2V0TWVtYmVyKG1lbWJlciksIGVsZW1lbnRNYXAuZ2V0SW1wb3J0KGltcG9ydCkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdXBlckludm9jYXRpb24oaXIuTmFtZSBuYW1lLCBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLCBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICBGdW5jdGlvbkVudGl0eSBtZXRob2QgPQogICAgICAgIGVsZW1lbnRNYXAuZ2V0U3VwZXJNZW1iZXIoY3VycmVudE1lbWJlciwgbmFtZSwgc2V0dGVyOiBmYWxzZSk7CiAgICBMaXN0PERhcnRUeXBlPiBkYXJ0VHlwZUFyZ3VtZW50cyA9IF9nZXRUeXBlQXJndW1lbnRzKHR5cGVBcmd1bWVudHMpOwogICAgaWYgKG1ldGhvZCAhPSBudWxsKSB7CiAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdXBlckludm9rZSgKICAgICAgICAgIG1ldGhvZCwKICAgICAgICAgIG5ldyBDYWxsU3RydWN0dXJlKHBvc2l0aW9uYWxBcmd1bWVudHMgKyBuYW1lZEFyZ3VtZW50cy5sZW5ndGgsCiAgICAgICAgICAgICAgbmFtZWRBcmd1bWVudHMsIHR5cGVBcmd1bWVudHMubGVuZ3RoKSwKICAgICAgICAgIGRhcnRUeXBlQXJndW1lbnRzKSk7CiAgICB9IGVsc2UgewogICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3VwZXJJbnZva2UoCiAgICAgICAgICBlbGVtZW50TWFwLmdldFN1cGVyTm9TdWNoTWV0aG9kKGN1cnJlbnRNZW1iZXIuZW5jbG9zaW5nQ2xhc3MpLAogICAgICAgICAgQ2FsbFN0cnVjdHVyZS5PTkVfQVJHKSk7CiAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJGZWF0dXJlKEZlYXR1cmUuU1VQRVJfTk9fU1VDSF9NRVRIT0QpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN1cGVyR2V0KGlyLk5hbWUgbmFtZSkgewogICAgTWVtYmVyRW50aXR5IG1lbWJlciA9CiAgICAgICAgZWxlbWVudE1hcC5nZXRTdXBlck1lbWJlcihjdXJyZW50TWVtYmVyLCBuYW1lLCBzZXR0ZXI6IGZhbHNlKTsKICAgIGlmIChtZW1iZXIgIT0gbnVsbCkgewogICAgICBpZiAobWVtYmVyLmlzRnVuY3Rpb24pIHsKICAgICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3VwZXJUZWFyT2ZmKG1lbWJlcikpOwogICAgICB9IGVsc2UgewogICAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdXBlckdldChtZW1iZXIpKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN1cGVySW52b2tlKAogICAgICAgICAgZWxlbWVudE1hcC5nZXRTdXBlck5vU3VjaE1ldGhvZChjdXJyZW50TWVtYmVyLmVuY2xvc2luZ0NsYXNzKSwKICAgICAgICAgIENhbGxTdHJ1Y3R1cmUuT05FX0FSRykpOwogICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRmVhdHVyZShGZWF0dXJlLlNVUEVSX05PX1NVQ0hfTUVUSE9EKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdXBlclNldChpci5OYW1lIG5hbWUpIHsKICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPQogICAgICAgIGVsZW1lbnRNYXAuZ2V0U3VwZXJNZW1iZXIoY3VycmVudE1lbWJlciwgbmFtZSwgc2V0dGVyOiB0cnVlKTsKICAgIGlmIChtZW1iZXIgIT0gbnVsbCkgewogICAgICBpZiAobWVtYmVyLmlzRmllbGQpIHsKICAgICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3VwZXJGaWVsZFNldChtZW1iZXIpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3VwZXJTZXR0ZXJTZXQobWVtYmVyKSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdXBlckludm9rZSgKICAgICAgICAgIGVsZW1lbnRNYXAuZ2V0U3VwZXJOb1N1Y2hNZXRob2QoY3VycmVudE1lbWJlci5lbmNsb3NpbmdDbGFzcyksCiAgICAgICAgICBDYWxsU3RydWN0dXJlLk9ORV9BUkcpKTsKICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckZlYXR1cmUoRmVhdHVyZS5TVVBFUl9OT19TVUNIX01FVEhPRCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTG9jYWxGdW5jdGlvbkludm9jYXRpb24oCiAgICAgIGlyLkZ1bmN0aW9uRGVjbGFyYXRpb24gbG9jYWxGdW5jdGlvbiwKICAgICAgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywKICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlID0gbmV3IENhbGxTdHJ1Y3R1cmUoCiAgICAgICAgcG9zaXRpb25hbEFyZ3VtZW50cyArIG5hbWVkQXJndW1lbnRzLmxlbmd0aCwKICAgICAgICBuYW1lZEFyZ3VtZW50cywKICAgICAgICB0eXBlQXJndW1lbnRzLmxlbmd0aCk7CiAgICBMaXN0PERhcnRUeXBlPiBkYXJ0VHlwZUFyZ3VtZW50cyA9IF9nZXRUeXBlQXJndW1lbnRzKHR5cGVBcmd1bWVudHMpOwogICAgLy8gSW52b2NhdGlvbiBvZiBhIGxvY2FsIGZ1bmN0aW9uLiBObyBuZWVkIGZvciBkeW5hbWljIHVzZSwgYnV0CiAgICAvLyB3ZSBuZWVkIHRvIHRyYWNrIHRoZSB0eXBlIGFyZ3VtZW50cy4KICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5jbG9zdXJlQ2FsbCgKICAgICAgICBlbGVtZW50TWFwLmdldExvY2FsRnVuY3Rpb24obG9jYWxGdW5jdGlvbiksCiAgICAgICAgY2FsbFN0cnVjdHVyZSwKICAgICAgICBkYXJ0VHlwZUFyZ3VtZW50cykpOwogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogWWV0LCBhbGFzLCB3ZSBuZWVkIHRoZSBkeW5hbWljIHVzZSBmb3Igbm93LiBSZW1vdmUKICAgIC8vIHRoaXMgd2hlbiBrZXJuZWwgYWRkcyBhbiBgaXNGdW5jdGlvbkNhbGxgIGZsYWcgdG8KICAgIC8vIFtpci5NZXRob2RJbnZvY2F0aW9uXS4KICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJEeW5hbWljVXNlKAogICAgICAgIG5ldyBEeW5hbWljVXNlKGNhbGxTdHJ1Y3R1cmUuY2FsbFNlbGVjdG9yLCBudWxsLCBkYXJ0VHlwZUFyZ3VtZW50cykpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckR5bmFtaWNJbnZvY2F0aW9uKAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsCiAgICAgIENsYXNzUmVsYXRpb24gcmVsYXRpb24sCiAgICAgIGlyLk5hbWUgbmFtZSwKICAgICAgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywKICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBlbGVtZW50TWFwLmdldEludm9jYXRpb25TZWxlY3RvcigKICAgICAgICBuYW1lLCBwb3NpdGlvbmFsQXJndW1lbnRzLCBuYW1lZEFyZ3VtZW50cywgdHlwZUFyZ3VtZW50cy5sZW5ndGgpOwogICAgTGlzdDxEYXJ0VHlwZT4gZGFydFR5cGVBcmd1bWVudHMgPSBfZ2V0VHlwZUFyZ3VtZW50cyh0eXBlQXJndW1lbnRzKTsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJEeW5hbWljVXNlKG5ldyBEeW5hbWljVXNlKHNlbGVjdG9yLAogICAgICAgIF9jb21wdXRlUmVjZWl2ZXJDb25zdHJhaW50KHJlY2VpdmVyVHlwZSwgcmVsYXRpb24pLCBkYXJ0VHlwZUFyZ3VtZW50cykpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckZ1bmN0aW9uSW52b2NhdGlvbigKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLAogICAgICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLAogICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUgPSBuZXcgQ2FsbFN0cnVjdHVyZSgKICAgICAgICBwb3NpdGlvbmFsQXJndW1lbnRzICsgbmFtZWRBcmd1bWVudHMubGVuZ3RoLAogICAgICAgIG5hbWVkQXJndW1lbnRzLAogICAgICAgIHR5cGVBcmd1bWVudHMubGVuZ3RoKTsKICAgIExpc3Q8RGFydFR5cGU+IGRhcnRUeXBlQXJndW1lbnRzID0gX2dldFR5cGVBcmd1bWVudHModHlwZUFyZ3VtZW50cyk7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRHluYW1pY1VzZShuZXcgRHluYW1pY1VzZSgKICAgICAgICBjYWxsU3RydWN0dXJlLmNhbGxTZWxlY3RvciwKICAgICAgICBfY29tcHV0ZVJlY2VpdmVyQ29uc3RyYWludChyZWNlaXZlclR5cGUsIENsYXNzUmVsYXRpb24uc3VidHlwZSksCiAgICAgICAgZGFydFR5cGVBcmd1bWVudHMpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJJbnN0YW5jZUludm9jYXRpb24oCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwKICAgICAgQ2xhc3NSZWxhdGlvbiByZWxhdGlvbiwKICAgICAgaXIuTWVtYmVyIHRhcmdldCwKICAgICAgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywKICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgTGlzdDxEYXJ0VHlwZT4gZGFydFR5cGVBcmd1bWVudHMgPSBfZ2V0VHlwZUFyZ3VtZW50cyh0eXBlQXJndW1lbnRzKTsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJEeW5hbWljVXNlKG5ldyBEeW5hbWljVXNlKAogICAgICAgIGVsZW1lbnRNYXAuZ2V0SW52b2NhdGlvblNlbGVjdG9yKHRhcmdldC5uYW1lLCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICAgICAgICBuYW1lZEFyZ3VtZW50cywgdHlwZUFyZ3VtZW50cy5sZW5ndGgpLAogICAgICAgIF9jb21wdXRlUmVjZWl2ZXJDb25zdHJhaW50KHJlY2VpdmVyVHlwZSwgcmVsYXRpb24pLAogICAgICAgIGRhcnRUeXBlQXJndW1lbnRzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyRHluYW1pY0dldCgKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBDbGFzc1JlbGF0aW9uIHJlbGF0aW9uLCBpci5OYW1lIG5hbWUpIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJEeW5hbWljVXNlKG5ldyBEeW5hbWljVXNlKAogICAgICAgIG5ldyBTZWxlY3Rvci5nZXR0ZXIoZWxlbWVudE1hcC5nZXROYW1lKG5hbWUpKSwKICAgICAgICBfY29tcHV0ZVJlY2VpdmVyQ29uc3RyYWludChyZWNlaXZlclR5cGUsIHJlbGF0aW9uKSwKICAgICAgICBjb25zdCA8RGFydFR5cGU+W10pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJJbnN0YW5jZUdldCgKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBDbGFzc1JlbGF0aW9uIHJlbGF0aW9uLCBpci5NZW1iZXIgdGFyZ2V0KSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRHluYW1pY1VzZShuZXcgRHluYW1pY1VzZSgKICAgICAgICBuZXcgU2VsZWN0b3IuZ2V0dGVyKGVsZW1lbnRNYXAuZ2V0TmFtZSh0YXJnZXQubmFtZSkpLAogICAgICAgIF9jb21wdXRlUmVjZWl2ZXJDb25zdHJhaW50KHJlY2VpdmVyVHlwZSwgcmVsYXRpb24pLAogICAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckR5bmFtaWNTZXQoCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwgQ2xhc3NSZWxhdGlvbiByZWxhdGlvbiwgaXIuTmFtZSBuYW1lKSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRHluYW1pY1VzZShuZXcgRHluYW1pY1VzZSgKICAgICAgICBuZXcgU2VsZWN0b3Iuc2V0dGVyKGVsZW1lbnRNYXAuZ2V0TmFtZShuYW1lKSksCiAgICAgICAgX2NvbXB1dGVSZWNlaXZlckNvbnN0cmFpbnQocmVjZWl2ZXJUeXBlLCByZWxhdGlvbiksCiAgICAgICAgY29uc3QgPERhcnRUeXBlPltdKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVySW5zdGFuY2VTZXQoCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwgQ2xhc3NSZWxhdGlvbiByZWxhdGlvbiwgaXIuTWVtYmVyIHRhcmdldCkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckR5bmFtaWNVc2UobmV3IER5bmFtaWNVc2UoCiAgICAgICAgbmV3IFNlbGVjdG9yLnNldHRlcihlbGVtZW50TWFwLmdldE5hbWUodGFyZ2V0Lm5hbWUpKSwKICAgICAgICBfY29tcHV0ZVJlY2VpdmVyQ29uc3RyYWludChyZWNlaXZlclR5cGUsIHJlbGF0aW9uKSwKICAgICAgICBjb25zdCA8RGFydFR5cGU+W10pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJSdW50aW1lVHlwZVVzZShpci5Qcm9wZXJ0eUdldCBub2RlLCBSdW50aW1lVHlwZVVzZUtpbmQga2luZCwKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBpci5EYXJ0VHlwZSBhcmd1bWVudFR5cGUpIHsKICAgIERhcnRUeXBlIHJlY2VpdmVyRGFydFR5cGUgPSBlbGVtZW50TWFwLmdldERhcnRUeXBlKHJlY2VpdmVyVHlwZSk7CiAgICBEYXJ0VHlwZSBhcmd1bWVudERhcnRUeXBlID0KICAgICAgICBhcmd1bWVudFR5cGUgPT0gbnVsbCA/IG51bGwgOiBlbGVtZW50TWFwLmdldERhcnRUeXBlKGFyZ3VtZW50VHlwZSk7CgogICAgaWYgKF9vcHRpb25zLm9taXRJbXBsaWNpdENoZWNrcykgewogICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICBjYXNlIFJ1bnRpbWVUeXBlVXNlS2luZC5zdHJpbmc6CiAgICAgICAgICBpZiAoIV9vcHRpb25zLmxheFJ1bnRpbWVUeXBlVG9TdHJpbmcpIHsKICAgICAgICAgICAgaWYgKHJlY2VpdmVyRGFydFR5cGUgPT0gY29tbW9uRWxlbWVudHMub2JqZWN0VHlwZSkgewogICAgICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydEhpbnRNZXNzYWdlKGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKG5vZGUpLAogICAgICAgICAgICAgICAgICBNZXNzYWdlS2luZC5SVU5USU1FX1RZUEVfVE9fU1RSSU5HX09CSkVDVCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0SGludE1lc3NhZ2UoCiAgICAgICAgICAgICAgICAgIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKG5vZGUpLAogICAgICAgICAgICAgICAgICBNZXNzYWdlS2luZC5SVU5USU1FX1RZUEVfVE9fU1RSSU5HX1NVQlRZUEUsCiAgICAgICAgICAgICAgICAgIHsncmVjZWl2ZXJUeXBlJzogJyR7cmVjZWl2ZXJEYXJ0VHlwZX0uJ30pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFJ1bnRpbWVUeXBlVXNlS2luZC5lcXVhbHM6CiAgICAgICAgY2FzZSBSdW50aW1lVHlwZVVzZUtpbmQudW5rbm93bjoKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyUnVudGltZVR5cGVVc2UoCiAgICAgICAgbmV3IFJ1bnRpbWVUeXBlVXNlKGtpbmQsIHJlY2VpdmVyRGFydFR5cGUsIGFyZ3VtZW50RGFydFR5cGUpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJBc3NlcnQoe2Jvb2wgd2l0aE1lc3NhZ2V9KSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRmVhdHVyZSgKICAgICAgICB3aXRoTWVzc2FnZSA/IEZlYXR1cmUuQVNTRVJUX1dJVEhfTUVTU0FHRSA6IEZlYXR1cmUuQVNTRVJUKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJHZW5lcmljSW5zdGFudGlhdGlvbigKICAgICAgaXIuRnVuY3Rpb25UeXBlIGV4cHJlc3Npb25UeXBlLCBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBUcmFjayB3aGljaCBhcml0aWVzIGFyZSB1c2VkIGluIGluc3RhbnRpYXRpb24uCiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVySW5zdGFudGlhdGlvbihuZXcgR2VuZXJpY0luc3RhbnRpYXRpb24oCiAgICAgICAgZWxlbWVudE1hcC5nZXREYXJ0VHlwZShleHByZXNzaW9uVHlwZSksCiAgICAgICAgdHlwZUFyZ3VtZW50cy5tYXAoZWxlbWVudE1hcC5nZXREYXJ0VHlwZSkudG9MaXN0KCkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdHJpbmdDb25jYXRlbmF0aW9uKCkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckZlYXR1cmUoRmVhdHVyZS5TVFJJTkdfSU5URVJQT0xBVElPTik7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRmVhdHVyZShGZWF0dXJlLlNUUklOR19KVVhUQVBPU0lUSU9OKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJMb2NhbEZ1bmN0aW9uKGlyLlRyZWVOb2RlIG5vZGUpIHsKICAgIExvY2FsIGZ1bmN0aW9uID0gZWxlbWVudE1hcC5nZXRMb2NhbEZ1bmN0aW9uKG5vZGUpOwogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLmNsb3N1cmUoZnVuY3Rpb24pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJMb2NhbFdpdGhvdXRJbml0aWFsaXplcigpIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJGZWF0dXJlKEZlYXR1cmUuTE9DQUxfV0lUSE9VVF9JTklUSUFMSVpFUik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVySXNDaGVjayhpci5EYXJ0VHlwZSB0eXBlKSB7CiAgICBpbXBhY3RCdWlsZGVyCiAgICAgICAgLnJlZ2lzdGVyVHlwZVVzZShuZXcgVHlwZVVzZS5pc0NoZWNrKGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUodHlwZSkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJJbXBsaWNpdENhc3QoaXIuRGFydFR5cGUgdHlwZSkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclR5cGVVc2UoCiAgICAgICAgbmV3IFR5cGVVc2UuaW1wbGljaXRDYXN0KGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUodHlwZSkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJBc0Nhc3QoaXIuRGFydFR5cGUgdHlwZSkgewogICAgaW1wYWN0QnVpbGRlcgogICAgICAgIC5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UuYXNDYXN0KGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUodHlwZSkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJUaHJvdygpIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJGZWF0dXJlKEZlYXR1cmUuVEhST1dfRVhQUkVTU0lPTik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3luY0ZvckluKGlyLkRhcnRUeXBlIGl0ZXJhYmxlVHlwZSwgaXIuRGFydFR5cGUgaXRlcmF0b3JUeXBlLAogICAgICBDbGFzc1JlbGF0aW9uIGl0ZXJhdG9yQ2xhc3NSZWxhdGlvbikgewogICAgT2JqZWN0IHJlY2VpdmVyQ29uc3RyYWludCA9CiAgICAgICAgX2NvbXB1dGVSZWNlaXZlckNvbnN0cmFpbnQoaXRlcmF0b3JUeXBlLCBpdGVyYXRvckNsYXNzUmVsYXRpb24pOwogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckZlYXR1cmUoRmVhdHVyZS5TWU5DX0ZPUl9JTik7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRHluYW1pY1VzZSgKICAgICAgICBuZXcgRHluYW1pY1VzZShTZWxlY3RvcnMuaXRlcmF0b3IsIHJlY2VpdmVyQ29uc3RyYWludCwgY29uc3QgW10pKTsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJEeW5hbWljVXNlKAogICAgICAgIG5ldyBEeW5hbWljVXNlKFNlbGVjdG9ycy5jdXJyZW50LCByZWNlaXZlckNvbnN0cmFpbnQsIGNvbnN0IFtdKSk7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRHluYW1pY1VzZSgKICAgICAgICBuZXcgRHluYW1pY1VzZShTZWxlY3RvcnMubW92ZU5leHQsIHJlY2VpdmVyQ29uc3RyYWludCwgY29uc3QgW10pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJBc3luY0ZvckluKGlyLkRhcnRUeXBlIGl0ZXJhYmxlVHlwZSwgaXIuRGFydFR5cGUgaXRlcmF0b3JUeXBlLAogICAgICBDbGFzc1JlbGF0aW9uIGl0ZXJhdG9yQ2xhc3NSZWxhdGlvbikgewogICAgT2JqZWN0IHJlY2VpdmVyQ29uc3RyYWludCA9CiAgICAgICAgX2NvbXB1dGVSZWNlaXZlckNvbnN0cmFpbnQoaXRlcmF0b3JUeXBlLCBpdGVyYXRvckNsYXNzUmVsYXRpb24pOwogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckZlYXR1cmUoRmVhdHVyZS5BU1lOQ19GT1JfSU4pOwogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckR5bmFtaWNVc2UoCiAgICAgICAgbmV3IER5bmFtaWNVc2UoU2VsZWN0b3JzLmNhbmNlbCwgcmVjZWl2ZXJDb25zdHJhaW50LCBjb25zdCBbXSkpOwogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckR5bmFtaWNVc2UoCiAgICAgICAgbmV3IER5bmFtaWNVc2UoU2VsZWN0b3JzLmN1cnJlbnQsIHJlY2VpdmVyQ29uc3RyYWludCwgY29uc3QgW10pKTsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJEeW5hbWljVXNlKAogICAgICAgIG5ldyBEeW5hbWljVXNlKFNlbGVjdG9ycy5tb3ZlTmV4dCwgcmVjZWl2ZXJDb25zdHJhaW50LCBjb25zdCBbXSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckNhdGNoKCkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckZlYXR1cmUoRmVhdHVyZS5DQVRDSF9TVEFURU1FTlQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN0YWNrVHJhY2UoKSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRmVhdHVyZShGZWF0dXJlLlNUQUNLX1RSQUNFX0lOX0NBVENIKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJDYXRjaFR5cGUoaXIuRGFydFR5cGUgdHlwZSkgewogICAgaW1wYWN0QnVpbGRlcgogICAgICAgIC5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UuY2F0Y2hUeXBlKGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUodHlwZSkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJUeXBlTGl0ZXJhbChpci5EYXJ0VHlwZSB0eXBlLCBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQpIHsKICAgIEltcG9ydEVudGl0eSBkZWZlcnJlZEltcG9ydCA9IGVsZW1lbnRNYXAuZ2V0SW1wb3J0KGltcG9ydCk7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyVHlwZVVzZSgKICAgICAgICBuZXcgVHlwZVVzZS50eXBlTGl0ZXJhbChlbGVtZW50TWFwLmdldERhcnRUeXBlKHR5cGUpLCBkZWZlcnJlZEltcG9ydCkpOwogICAgaWYgKHR5cGUgaXMgaXIuRnVuY3Rpb25UeXBlKSB7CiAgICAgIGFzc2VydCh0eXBlLnR5cGVkZWYgIT0gbnVsbCk7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENhbiB3ZSBhdm9pZCB0aGUgdHlwZWRlZiB0eXBlIGFsdG9nZXRoZXI/CiAgICAgIC8vIFdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHR5cGVkZWYgaXMgbGl2ZS4KICAgICAgZWxlbWVudE1hcC5nZXRUeXBlZGVmVHlwZSh0eXBlLnR5cGVkZWYpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckZpZWxkSW5pdGlhbGl6YXRpb24oaXIuRmllbGQgbm9kZSkgewogICAgaW1wYWN0QnVpbGRlcgogICAgICAgIC5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLmZpZWxkSW5pdChlbGVtZW50TWFwLmdldEZpZWxkKG5vZGUpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyRmllbGRDb25zdGFudEluaXRpYWxpemF0aW9uKAogICAgICBpci5GaWVsZCBub2RlLCBDb25zdGFudFJlZmVyZW5jZSBjb25zdGFudCkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLmZpZWxkQ29uc3RhbnRJbml0KAogICAgICAgIGVsZW1lbnRNYXAuZ2V0RmllbGQobm9kZSksCiAgICAgICAgX2NvbnN0YW50VmFsdWVmaWVyLnZpc2l0Q29uc3RhbnQoY29uc3RhbnQuY29uc3RhbnQpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyUmVkaXJlY3RpbmdJbml0aWFsaXplcigKICAgICAgaXIuQ29uc3RydWN0b3IgY29uc3RydWN0b3IsCiAgICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsCiAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIENvbnN0cnVjdG9yRW50aXR5IHRhcmdldCA9IGVsZW1lbnRNYXAuZ2V0Q29uc3RydWN0b3IoY29uc3RydWN0b3IpOwogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN1cGVyQ29uc3RydWN0b3JJbnZva2UoCiAgICAgICAgdGFyZ2V0LAogICAgICAgIG5ldyBDYWxsU3RydWN0dXJlKHBvc2l0aW9uYWxBcmd1bWVudHMgKyBuYW1lZEFyZ3VtZW50cy5sZW5ndGgsCiAgICAgICAgICAgIG5hbWVkQXJndW1lbnRzLCB0eXBlQXJndW1lbnRzLmxlbmd0aCkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJMb2FkTGlicmFyeSgpIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoCiAgICAgICAgY29tbW9uRWxlbWVudHMubG9hZERlZmVycmVkTGlicmFyeSwgQ2FsbFN0cnVjdHVyZS5PTkVfQVJHKSk7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRmVhdHVyZShGZWF0dXJlLkxPQURfTElCUkFSWSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3dpdGNoU3RhdGVtZW50Tm9kZShpci5Td2l0Y2hTdGF0ZW1lbnQgbm9kZSkgewogICAgLy8gVE9ETygzMjU1Nyk6IFJlbW92ZSB0aGlzIHdoZW4gaXNzdWUgMzI1NTcgaXMgZml4ZWQuCiAgICBpci5UcmVlTm9kZSBmaXJzdENhc2U7CiAgICBEYXJ0VHlwZSBmaXJzdENhc2VUeXBlOwogICAgRGlhZ25vc3RpY01lc3NhZ2UgZXJyb3I7CiAgICBMaXN0PERpYWdub3N0aWNNZXNzYWdlPiBpbmZvcyA9IDxEaWFnbm9zdGljTWVzc2FnZT5bXTsKCiAgICBib29sIG92ZXJyaWRlc0VxdWFscyhJbnRlcmZhY2VUeXBlIHR5cGUpIHsKICAgICAgaWYgKHR5cGUgPT0gY29tbW9uRWxlbWVudHMuc3ltYm9sSW1wbGVtZW50YXRpb25UeXBlKSB7CiAgICAgICAgLy8gVHJlYXQgc3ltYm9sIGNvbnN0YW50cyBhcyBpZiBTeW1ib2wgZG9lc24ndCBvdmVycmlkZSBgPT1gLgogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBDbGFzc0VudGl0eSBjbHMgPSB0eXBlLmVsZW1lbnQ7CiAgICAgIHdoaWxlIChjbHMgIT0gbnVsbCkgewogICAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPQogICAgICAgICAgICBlbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudC5sb29rdXBDbGFzc01lbWJlcihjbHMsICc9PScpOwogICAgICAgIGlmIChtZW1iZXIuaXNBYnN0cmFjdCkgewogICAgICAgICAgY2xzID0gZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQuZ2V0U3VwZXJDbGFzcyhjbHMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gbWVtYmVyLmVuY2xvc2luZ0NsYXNzICE9IGNvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgZm9yIChpci5Td2l0Y2hDYXNlIHN3aXRjaENhc2UgaW4gbm9kZS5jYXNlcykgewogICAgICBmb3IgKGlyLkV4cHJlc3Npb24gZXhwcmVzc2lvbiBpbiBzd2l0Y2hDYXNlLmV4cHJlc3Npb25zKSB7CiAgICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IGVsZW1lbnRNYXAuZ2V0Q29uc3RhbnRWYWx1ZShleHByZXNzaW9uKTsKICAgICAgICBEYXJ0VHlwZSB0eXBlID0gdmFsdWUuZ2V0VHlwZShlbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzKTsKICAgICAgICBpZiAoZmlyc3RDYXNlVHlwZSA9PSBudWxsKSB7CiAgICAgICAgICBmaXJzdENhc2UgPSBleHByZXNzaW9uOwogICAgICAgICAgZmlyc3RDYXNlVHlwZSA9IHR5cGU7CgogICAgICAgICAgLy8gV2Ugb25seSByZXBvcnQgdGhlIGJhZCB0eXBlIG9uIHRoZSBmaXJzdCBjbGFzcyBlbGVtZW50LiBBbGwgb3RoZXJzCiAgICAgICAgICAvLyBnZXQgYSAidHlwZSBkaWZmZXJzIiBlcnJvci4KICAgICAgICAgIGlmICh0eXBlID09IGNvbW1vbkVsZW1lbnRzLmRvdWJsZVR5cGUpIHsKICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgICAgICAgY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUoZXhwcmVzc2lvbiksCiAgICAgICAgICAgICAgICBNZXNzYWdlS2luZC5TV0lUQ0hfQ0FTRV9WQUxVRV9PVkVSUklERVNfRVFVQUxTLAogICAgICAgICAgICAgICAgeyd0eXBlJzogImRvdWJsZSJ9KTsKICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBjb21tb25FbGVtZW50cy5mdW5jdGlvblR5cGUpIHsKICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKG5vZGUpLAogICAgICAgICAgICAgICAgTWVzc2FnZUtpbmQuU1dJVENIX0NBU0VfRk9SQklEREVOLCB7J3R5cGUnOiAiRnVuY3Rpb24ifSk7CiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmlzT2JqZWN0ICYmCiAgICAgICAgICAgICAgdHlwZSAhPSBjb21tb25FbGVtZW50cy50eXBlTGl0ZXJhbFR5cGUgJiYKICAgICAgICAgICAgICBvdmVycmlkZXNFcXVhbHModHlwZSkpIHsKICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgICAgICAgY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUoZmlyc3RDYXNlKSwKICAgICAgICAgICAgICAgIE1lc3NhZ2VLaW5kLlNXSVRDSF9DQVNFX1ZBTFVFX09WRVJSSURFU19FUVVBTFMsCiAgICAgICAgICAgICAgICB7J3R5cGUnOiB0eXBlfSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmICh0eXBlICE9IGZpcnN0Q2FzZVR5cGUpIHsKICAgICAgICAgICAgaWYgKGVycm9yID09IG51bGwpIHsKICAgICAgICAgICAgICBlcnJvciA9IHJlcG9ydGVyLmNyZWF0ZU1lc3NhZ2UoCiAgICAgICAgICAgICAgICAgIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKG5vZGUpLAogICAgICAgICAgICAgICAgICBNZXNzYWdlS2luZC5TV0lUQ0hfQ0FTRV9UWVBFU19OT1RfRVFVQUwsCiAgICAgICAgICAgICAgICAgIHsndHlwZSc6IGZpcnN0Q2FzZVR5cGV9KTsKICAgICAgICAgICAgICBpbmZvcy5hZGQocmVwb3J0ZXIuY3JlYXRlTWVzc2FnZSgKICAgICAgICAgICAgICAgICAgY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUoZmlyc3RDYXNlKSwKICAgICAgICAgICAgICAgICAgTWVzc2FnZUtpbmQuU1dJVENIX0NBU0VfVFlQRVNfTk9UX0VRVUFMX0NBU0UsCiAgICAgICAgICAgICAgICAgIHsndHlwZSc6IGZpcnN0Q2FzZVR5cGV9KSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW5mb3MuYWRkKHJlcG9ydGVyLmNyZWF0ZU1lc3NhZ2UoCiAgICAgICAgICAgICAgICBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShleHByZXNzaW9uKSwKICAgICAgICAgICAgICAgIE1lc3NhZ2VLaW5kLlNXSVRDSF9DQVNFX1RZUEVTX05PVF9FUVVBTF9DQVNFLAogICAgICAgICAgICAgICAgeyd0eXBlJzogdHlwZX0pKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChlcnJvciAhPSBudWxsKSB7CiAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yKGVycm9yLCBpbmZvcyk7CiAgICB9CiAgfQp9CoOMAE5OPAEoNQEZHyQiKCMkIR8cISsbIRoeKSkiGkgqIyQfKRsBODQlDDQMJwwlDCIMJCwMLgEXFxoVFS0ZH05FIQEMQgEMRgEMOAEMMT0CAUgtQAw0DCcMJQwiDCQMLgFMLk4BDEgBDEIBDEYBSi80HBoEAgFMIUUgIyUiMiolKCwBJTosRTYVCEhCBhEEAQw0NBtHBgQBPiQ3BAEMHTcEAQwrIhlJOVAqRSVDLEUsRVE5JhRRBgQBDD09TVAqRSVDLEUsRU4/JgYEAQwzNkAwKzsEAQwwMkAzKzsEAQw0N0A5KzsEAQw3O0tQKkUlQyxFLEVOPSYGBAEMJytLBAEMLVAEAQwpTgQBDC1QBAEMLTIEAQwfSQQBDDQmOkYdHAQBDDMmOEUdHAQBDEYmOCBRHRwEAQwUGB0fIycjGEc1NRgfQCxLOks8UUkGATtBBgEdNBRGThYGBAEMUSVATRJQBAEMTxpMOxxIHU4lJylBEAgvRgYEAQwhHR0fIylGUEkVJDhKFUc1BAEMIR4fIyclPTU1GB9JOU0ODUJCRgYEAQxALxsWTg8jKkEPKypIDzAdQxxKCg8dDwYEATpDQgdPKwdNByVLASswAS8vLU0BQgEyPSZBBAEMHj1BSQQBDEo9RgQBDEo9RgQBDEZGHEdJGkESSTUfDUFJI0MGBAEMKBpHGh9ND0kIDUFJI0MGBAEMKBpGGhxOD08IDUFJI0MGBAEMKCwfIyk1NRgfSUQsPzQXHU85HiZOBAEMIiAeFB8jKTpKST5RBAEMIyAfIyk1NRgfSTUkSR0EAQwjIB4YHyMpSTVLMzwdBAEMG0g1NzweBAEMHEw1PjweBAEMG0g1NzweBAEMHEw1PjweBAEMTDxGIEwBJxYoMkFOPhUqNz49DgwRKCkRCAYqRwQBDCwjRQQBDCVJS0IwPgQBDCdBQQQBDDE4RgQBDCtGBAEMKxJNBAEMMCNBBAEMKhJMBAEMGT0EAQxNLSBJOCZLJkomSwQBDE4tIEk5JkkmSiZLBAEMGTwEAQweQQQBDC0STwQBDExAI1AjJEg1LwYEAQw0ElAEAQwsM0UjPwQBDCciHyMpR0oQRzUEAQwfQEU5BAEMPjsbHB07AS89RhYIJhweSCFCEUYKCBQGATNBR0IlIiABUCkzKTtAJTxNSic4Jyk6QCEMESchLjc7LDA8QC0OLjs+IgwKCAYZKgYEAgEucGFja2FnZTpjb21waWxlci9zcmMva2VybmVsL2tlcm5lbF9pbXBhY3QuZGFydC5zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zc2EvbG9nZ2luZy5kYXJ0oNIvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvdGVzdGluZy9mZWF0dXJlcy5kYXJ0JzsKaW1wb3J0ICdub2Rlcy5kYXJ0JzsKCi8vLyBMb2cgdXNlZCBmb3IgdW5pdCB0ZXN0aW5nIG9wdGltaXphdGlvbnMuCmNsYXNzIE9wdGltaXphdGlvblRlc3RMb2cgewogIExpc3Q8T3B0aW1pemF0aW9uTG9nRW50cnk+IGVudHJpZXMgPSBbXTsKCiAgTWFwPFN0cmluZywgU2V0PEhJbnN0cnVjdGlvbj4+IF91bmNvbnZlcnRlZDsKCiAgRmVhdHVyZXMgX3JlZ2lzdGVyKFN0cmluZyB0YWcsIEhJbnN0cnVjdGlvbiBvcmlnaW5hbCwgSEluc3RydWN0aW9uIGNvbnZlcnRlZCwKICAgICAgdm9pZCBmKEZlYXR1cmVzIGZlYXR1cmVzKSkgewogICAgaWYgKGNvbnZlcnRlZCA9PSBudWxsKSB7CiAgICAgIF91bmNvbnZlcnRlZCA/Pz0ge307CiAgICAgIFNldDxISW5zdHJ1Y3Rpb24+IHNldCA9IF91bmNvbnZlcnRlZFt0YWddID8/PSBuZXcgU2V0PEhJbnN0cnVjdGlvbj4oKTsKICAgICAgaWYgKCFzZXQuYWRkKG9yaWdpbmFsKSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgICBGZWF0dXJlcyBmZWF0dXJlcyA9IG5ldyBGZWF0dXJlcygpOwogICAgZihmZWF0dXJlcyk7CiAgICBlbnRyaWVzLmFkZChuZXcgT3B0aW1pemF0aW9uTG9nRW50cnkodGFnLCBmZWF0dXJlcykpOwogICAgcmV0dXJuIGZlYXR1cmVzOwogIH0KCiAgdm9pZCByZWdpc3RlckZpZWxkR2V0KEhJbnZva2VEeW5hbWljR2V0dGVyIG9yaWdpbmFsLCBIRmllbGRHZXQgY29udmVydGVkKSB7CiAgICBGZWF0dXJlcyBmZWF0dXJlcyA9IG5ldyBGZWF0dXJlcygpOwogICAgaWYgKGNvbnZlcnRlZC5lbGVtZW50ICE9IG51bGwpIHsKICAgICAgZmVhdHVyZXNbJ25hbWUnXSA9CiAgICAgICAgICAnJHtjb252ZXJ0ZWQuZWxlbWVudC5lbmNsb3NpbmdDbGFzcy5uYW1lfS4ke2NvbnZlcnRlZC5lbGVtZW50Lm5hbWV9JzsKICAgIH0gZWxzZSB7CiAgICAgIGZlYXR1cmVzWyduYW1lJ10gPSAnPG51bGwtZ3VhcmQ+JzsKICAgIH0KICAgIGVudHJpZXMuYWRkKG5ldyBPcHRpbWl6YXRpb25Mb2dFbnRyeSgnRmllbGRHZXQnLCBmZWF0dXJlcykpOwogIH0KCiAgdm9pZCByZWdpc3RlckZpZWxkU2V0KEhJbnZva2VEeW5hbWljU2V0dGVyIG9yaWdpbmFsLCBbSEZpZWxkU2V0IGNvbnZlcnRlZF0pIHsKICAgIEZlYXR1cmVzIGZlYXR1cmVzID0gbmV3IEZlYXR1cmVzKCk7CiAgICBpZiAoY29udmVydGVkICE9IG51bGwpIHsKICAgICAgZmVhdHVyZXNbJ25hbWUnXSA9CiAgICAgICAgICAnJHtjb252ZXJ0ZWQuZWxlbWVudC5lbmNsb3NpbmdDbGFzcy5uYW1lfS4ke2NvbnZlcnRlZC5lbGVtZW50Lm5hbWV9JzsKICAgIH0gZWxzZSB7CiAgICAgIGZlYXR1cmVzWydyZW1vdmVkJ10gPSBvcmlnaW5hbC5zZWxlY3Rvci5uYW1lOwogICAgfQogICAgZW50cmllcy5hZGQobmV3IE9wdGltaXphdGlvbkxvZ0VudHJ5KCdGaWVsZFNldCcsIGZlYXR1cmVzKSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyRmllbGRDYWxsKEhJbnZva2VEeW5hbWljTWV0aG9kIG9yaWdpbmFsLCBIRmllbGRHZXQgY29udmVydGVkKSB7CiAgICBGZWF0dXJlcyBmZWF0dXJlcyA9IG5ldyBGZWF0dXJlcygpOwogICAgaWYgKGNvbnZlcnRlZC5lbGVtZW50ICE9IG51bGwpIHsKICAgICAgZmVhdHVyZXNbJ25hbWUnXSA9CiAgICAgICAgICAnJHtjb252ZXJ0ZWQuZWxlbWVudC5lbmNsb3NpbmdDbGFzcy5uYW1lfS4ke2NvbnZlcnRlZC5lbGVtZW50Lm5hbWV9JzsKICAgIH0gZWxzZSB7CiAgICAgIGZlYXR1cmVzWyduYW1lJ10gPSAnPG51bGwtZ3VhcmQ+JzsKICAgIH0KICAgIGVudHJpZXMuYWRkKG5ldyBPcHRpbWl6YXRpb25Mb2dFbnRyeSgnRmllbGRDYWxsJywgZmVhdHVyZXMpKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJDb25zdGFudEZpZWxkR2V0KAogICAgICBISW52b2tlRHluYW1pY0dldHRlciBvcmlnaW5hbCwgRmllbGRFbnRpdHkgZmllbGQsIEhDb25zdGFudCBjb252ZXJ0ZWQpIHsKICAgIEZlYXR1cmVzIGZlYXR1cmVzID0gbmV3IEZlYXR1cmVzKCk7CiAgICBmZWF0dXJlc1snbmFtZSddID0gJyR7ZmllbGQuZW5jbG9zaW5nQ2xhc3MubmFtZX0uJHtmaWVsZC5uYW1lfSc7CiAgICBmZWF0dXJlc1sndmFsdWUnXSA9IGNvbnZlcnRlZC5jb25zdGFudC50b1N0cnVjdHVyZWRUZXh0KCk7CiAgICBlbnRyaWVzLmFkZChuZXcgT3B0aW1pemF0aW9uTG9nRW50cnkoJ0NvbnN0YW50RmllbGRHZXQnLCBmZWF0dXJlcykpOwogIH0KCiAgdm9pZCByZWdpc3RlckNvbnN0YW50RmllbGRDYWxsKAogICAgICBISW52b2tlRHluYW1pY01ldGhvZCBvcmlnaW5hbCwgRmllbGRFbnRpdHkgZmllbGQsIEhDb25zdGFudCBjb252ZXJ0ZWQpIHsKICAgIEZlYXR1cmVzIGZlYXR1cmVzID0gbmV3IEZlYXR1cmVzKCk7CiAgICBmZWF0dXJlc1snbmFtZSddID0gJyR7ZmllbGQuZW5jbG9zaW5nQ2xhc3MubmFtZX0uJHtmaWVsZC5uYW1lfSc7CiAgICBmZWF0dXJlc1sndmFsdWUnXSA9IGNvbnZlcnRlZC5jb25zdGFudC50b1N0cnVjdHVyZWRUZXh0KCk7CiAgICBlbnRyaWVzLmFkZChuZXcgT3B0aW1pemF0aW9uTG9nRW50cnkoJ0NvbnN0YW50RmllbGRDYWxsJywgZmVhdHVyZXMpKTsKICB9CgogIEZlYXR1cmVzIF9yZWdpc3RlclNwZWNpYWxpemVyKAogICAgICBISW52b2tlRHluYW1pYyBvcmlnaW5hbCwgSEluc3RydWN0aW9uIGNvbnZlcnRlZCwgU3RyaW5nIG5hbWUsCiAgICAgIFtTdHJpbmcgdW5jb252ZXJ0ZWROYW1lXSkgewogICAgYXNzZXJ0KCEoY29udmVydGVkID09IG51bGwgJiYgdW5jb252ZXJ0ZWROYW1lID09IG51bGwpKTsKICAgIHJldHVybiBfcmVnaXN0ZXIoJ1NwZWNpYWxpemVyJywgb3JpZ2luYWwsIGNvbnZlcnRlZCwgKEZlYXR1cmVzIGZlYXR1cmVzKSB7CiAgICAgIGlmIChjb252ZXJ0ZWQgIT0gbnVsbCkgewogICAgICAgIGZlYXR1cmVzLmFkZChuYW1lKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBmZWF0dXJlcy5hZGQodW5jb252ZXJ0ZWROYW1lKTsKICAgICAgfQogICAgfSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVySW5kZXhBc3NpZ24oSEludm9rZUR5bmFtaWMgb3JpZ2luYWwsIEhJbmRleEFzc2lnbiBjb252ZXJ0ZWQpIHsKICAgIF9yZWdpc3RlclNwZWNpYWxpemVyKG9yaWdpbmFsLCBjb252ZXJ0ZWQsICdJbmRleEFzc2lnbicpOwogIH0KCiAgdm9pZCByZWdpc3RlckluZGV4KEhJbnZva2VEeW5hbWljIG9yaWdpbmFsLCBISW5kZXggY29udmVydGVkKSB7CiAgICBfcmVnaXN0ZXJTcGVjaWFsaXplcihvcmlnaW5hbCwgY29udmVydGVkLCAnSW5kZXgnKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJCaXROb3QoSEludm9rZUR5bmFtaWMgb3JpZ2luYWwsIEhCaXROb3QgY29udmVydGVkKSB7CiAgICBfcmVnaXN0ZXJTcGVjaWFsaXplcihvcmlnaW5hbCwgY29udmVydGVkLCAnQml0Tm90Jyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyVW5hcnlOZWdhdGUoSEludm9rZUR5bmFtaWMgb3JpZ2luYWwsIEhOZWdhdGUgY29udmVydGVkKSB7CiAgICBfcmVnaXN0ZXJTcGVjaWFsaXplcihvcmlnaW5hbCwgY29udmVydGVkLCAnTmVnYXRlJyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyQWJzKEhJbnZva2VEeW5hbWljIG9yaWdpbmFsLCBIQWJzIGNvbnZlcnRlZCkgewogICAgX3JlZ2lzdGVyU3BlY2lhbGl6ZXIob3JpZ2luYWwsIGNvbnZlcnRlZCwgJ0FicycpOwogIH0KCiAgdm9pZCByZWdpc3RlckFkZChISW52b2tlRHluYW1pYyBvcmlnaW5hbCwgSEFkZCBjb252ZXJ0ZWQpIHsKICAgIF9yZWdpc3RlclNwZWNpYWxpemVyKG9yaWdpbmFsLCBjb252ZXJ0ZWQsICdBZGQnKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJEaXZpZGUoSEludm9rZUR5bmFtaWMgb3JpZ2luYWwsIEhEaXZpZGUgY29udmVydGVkKSB7CiAgICBfcmVnaXN0ZXJTcGVjaWFsaXplcihvcmlnaW5hbCwgY29udmVydGVkLCAnRGl2aWRlJyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyTW9kdWxvKEhJbnZva2VEeW5hbWljIG9yaWdpbmFsLCBbSFJlbWFpbmRlciBjb252ZXJ0ZWRdKSB7CiAgICBfcmVnaXN0ZXJTcGVjaWFsaXplcihvcmlnaW5hbCwgY29udmVydGVkLCAnTW9kdWxvJywgJ0R5bmFtaWNNb2R1bG8nKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJSZW1haW5kZXIoSEludm9rZUR5bmFtaWMgb3JpZ2luYWwsIEhSZW1haW5kZXIgY29udmVydGVkKSB7CiAgICBfcmVnaXN0ZXJTcGVjaWFsaXplcihvcmlnaW5hbCwgY29udmVydGVkLCAnUmVtYWluZGVyJyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyTXVsdGlwbHkoSEludm9rZUR5bmFtaWMgb3JpZ2luYWwsIEhNdWx0aXBseSBjb252ZXJ0ZWQpIHsKICAgIF9yZWdpc3RlclNwZWNpYWxpemVyKG9yaWdpbmFsLCBjb252ZXJ0ZWQsICdNdWx0aXBseScpOwogIH0KCiAgdm9pZCByZWdpc3RlclN1YnRyYWN0KEhJbnZva2VEeW5hbWljIG9yaWdpbmFsLCBIU3VidHJhY3QgY29udmVydGVkKSB7CiAgICBfcmVnaXN0ZXJTcGVjaWFsaXplcihvcmlnaW5hbCwgY29udmVydGVkLCAnU3VidHJhY3QnKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJUcnVuY2F0aW5nRGl2aWRlKAogICAgICBISW52b2tlRHluYW1pYyBvcmlnaW5hbCwgSFRydW5jYXRpbmdEaXZpZGUgY29udmVydGVkKSB7CiAgICBfcmVnaXN0ZXJTcGVjaWFsaXplcihvcmlnaW5hbCwgY29udmVydGVkLCAnVHJ1bmNhdGluZ0RpdmlkZScsCiAgICAgICAgJ1RydW5jYXRpbmdEaXZpZGUuJHtvcmlnaW5hbC5zZWxlY3Rvci5uYW1lfScpOwogIH0KCiAgdm9pZCByZWdpc3RlclNoaWZ0TGVmdChISW52b2tlRHluYW1pYyBvcmlnaW5hbCwgSFNoaWZ0TGVmdCBjb252ZXJ0ZWQpIHsKICAgIF9yZWdpc3RlclNwZWNpYWxpemVyKG9yaWdpbmFsLCBjb252ZXJ0ZWQsICdTaGlmdExlZnQnLAogICAgICAgICdTaGlmdExlZnQuJHtvcmlnaW5hbC5zZWxlY3Rvci5uYW1lfScpOwogIH0KCiAgdm9pZCByZWdpc3RlclNoaWZ0UmlnaHQoSEludm9rZUR5bmFtaWMgb3JpZ2luYWwsIEhTaGlmdFJpZ2h0IGNvbnZlcnRlZCkgewogICAgX3JlZ2lzdGVyU3BlY2lhbGl6ZXIob3JpZ2luYWwsIGNvbnZlcnRlZCwgJ1NoaWZ0UmlnaHQnLAogICAgICAgICdTaGlmdFJpZ2h0LiR7b3JpZ2luYWwuc2VsZWN0b3IubmFtZX0nKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJCaXRPcihISW52b2tlRHluYW1pYyBvcmlnaW5hbCwgSEJpdE9yIGNvbnZlcnRlZCkgewogICAgX3JlZ2lzdGVyU3BlY2lhbGl6ZXIob3JpZ2luYWwsIGNvbnZlcnRlZCwgJ0JpdE9yJyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyQml0QW5kKEhJbnZva2VEeW5hbWljIG9yaWdpbmFsLCBIQml0QW5kIGNvbnZlcnRlZCkgewogICAgX3JlZ2lzdGVyU3BlY2lhbGl6ZXIob3JpZ2luYWwsIGNvbnZlcnRlZCwgJ0JpdEFuZCcpOwogIH0KCiAgdm9pZCByZWdpc3RlckJpdFhvcihISW52b2tlRHluYW1pYyBvcmlnaW5hbCwgSEJpdFhvciBjb252ZXJ0ZWQpIHsKICAgIF9yZWdpc3RlclNwZWNpYWxpemVyKG9yaWdpbmFsLCBjb252ZXJ0ZWQsICdCaXRYb3InKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJFcXVhbHMoSEludm9rZUR5bmFtaWMgb3JpZ2luYWwsIEhJZGVudGl0eSBjb252ZXJ0ZWQpIHsKICAgIF9yZWdpc3RlclNwZWNpYWxpemVyKG9yaWdpbmFsLCBjb252ZXJ0ZWQsICdFcXVhbHMnKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJMZXNzKEhJbnZva2VEeW5hbWljIG9yaWdpbmFsLCBITGVzcyBjb252ZXJ0ZWQpIHsKICAgIF9yZWdpc3RlclNwZWNpYWxpemVyKG9yaWdpbmFsLCBjb252ZXJ0ZWQsICdMZXNzJyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyR3JlYXRlcihISW52b2tlRHluYW1pYyBvcmlnaW5hbCwgSEdyZWF0ZXIgY29udmVydGVkKSB7CiAgICBfcmVnaXN0ZXJTcGVjaWFsaXplcihvcmlnaW5hbCwgY29udmVydGVkLCAnR3JlYXRlcicpOwogIH0KCiAgdm9pZCByZWdpc3Rlckxlc3NFcXVhbChISW52b2tlRHluYW1pYyBvcmlnaW5hbCwgSExlc3NFcXVhbCBjb252ZXJ0ZWQpIHsKICAgIF9yZWdpc3RlclNwZWNpYWxpemVyKG9yaWdpbmFsLCBjb252ZXJ0ZWQsICdMZXNzRXF1YWxzJyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyR3JlYXRlckVxdWFsKEhJbnZva2VEeW5hbWljIG9yaWdpbmFsLCBIR3JlYXRlckVxdWFsIGNvbnZlcnRlZCkgewogICAgX3JlZ2lzdGVyU3BlY2lhbGl6ZXIob3JpZ2luYWwsIGNvbnZlcnRlZCwgJ0dyZWF0ZXJFcXVhbHMnKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJDb2RlVW5pdEF0KEhJbnZva2VEeW5hbWljIG9yaWdpbmFsKSB7CiAgICBGZWF0dXJlcyBmZWF0dXJlcyA9IG5ldyBGZWF0dXJlcygpOwogICAgZmVhdHVyZXNbJ25hbWUnXSA9IG9yaWdpbmFsLnNlbGVjdG9yLm5hbWU7CiAgICBlbnRyaWVzLmFkZChuZXcgT3B0aW1pemF0aW9uTG9nRW50cnkoJ0NvZGVVbml0QXQnLCBmZWF0dXJlcykpOwogIH0KCiAgdm9pZCByZWdpc3RlckNvbXBhcmVUbyhISW52b2tlRHluYW1pYyBvcmlnaW5hbCwgW0hDb25zdGFudCBjb252ZXJ0ZWRdKSB7CiAgICBGZWF0dXJlcyBmZWF0dXJlcyA9IG5ldyBGZWF0dXJlcygpOwogICAgaWYgKGNvbnZlcnRlZCAhPSBudWxsKSB7CiAgICAgIGZlYXR1cmVzWydjb25zdGFudCddID0gY29udmVydGVkLmNvbnN0YW50LnRvRGFydFRleHQoKTsKICAgIH0KICAgIGVudHJpZXMuYWRkKG5ldyBPcHRpbWl6YXRpb25Mb2dFbnRyeSgnQ29tcGFyZVRvJywgZmVhdHVyZXMpKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJTdWJzdHJpbmcoSEludm9rZUR5bmFtaWMgb3JpZ2luYWwpIHsKICAgIEZlYXR1cmVzIGZlYXR1cmVzID0gbmV3IEZlYXR1cmVzKCk7CiAgICBlbnRyaWVzLmFkZChuZXcgT3B0aW1pemF0aW9uTG9nRW50cnkoJ1N1YnN0cmluZycsIGZlYXR1cmVzKSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyVHJpbShISW52b2tlRHluYW1pYyBvcmlnaW5hbCkgewogICAgRmVhdHVyZXMgZmVhdHVyZXMgPSBuZXcgRmVhdHVyZXMoKTsKICAgIGVudHJpZXMuYWRkKG5ldyBPcHRpbWl6YXRpb25Mb2dFbnRyeSgnVHJpbScsIGZlYXR1cmVzKSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyUGF0dGVybk1hdGNoKEhJbnZva2VEeW5hbWljIG9yaWdpbmFsKSB7CiAgICBGZWF0dXJlcyBmZWF0dXJlcyA9IG5ldyBGZWF0dXJlcygpOwogICAgZW50cmllcy5hZGQobmV3IE9wdGltaXphdGlvbkxvZ0VudHJ5KCdQYXR0ZXJuTWF0Y2gnLCBmZWF0dXJlcykpOwogIH0KCiAgdm9pZCByZWdpc3RlclJvdW5kKEhJbnZva2VEeW5hbWljIG9yaWdpbmFsKSB7CiAgICBfcmVnaXN0ZXJTcGVjaWFsaXplcihvcmlnaW5hbCwgbnVsbCwgbnVsbCwgJ1JvdW5kJyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyUHJpbWl0aXZlQ2hlY2soSEluc3RydWN0aW9uIG9yaWdpbmFsLCBIUHJpbWl0aXZlQ2hlY2sgY2hlY2spIHsKICAgIEZlYXR1cmVzIGZlYXR1cmVzID0gbmV3IEZlYXR1cmVzKCk7CgogICAgaWYgKGNoZWNrLmlzUmVjZWl2ZXJUeXBlQ2hlY2spIHsKICAgICAgZmVhdHVyZXNbJ2tpbmQnXSA9ICdyZWNlaXZlcic7CiAgICB9IGVsc2UgaWYgKGNoZWNrLmlzQXJndW1lbnRUeXBlQ2hlY2spIHsKICAgICAgZmVhdHVyZXNbJ2tpbmQnXSA9ICdhcmd1bWVudCc7CiAgICB9CiAgICBpZiAoY2hlY2sudHlwZUV4cHJlc3Npb24gIT0gbnVsbCkgewogICAgICBmZWF0dXJlc1sndHlwZSddID0gJyR7Y2hlY2sudHlwZUV4cHJlc3Npb259JzsKICAgIH0KICAgIGVudHJpZXMuYWRkKG5ldyBPcHRpbWl6YXRpb25Mb2dFbnRyeSgnUHJpbWl0aXZlQ2hlY2snLCBmZWF0dXJlcykpOwogIH0KCiAgU3RyaW5nIGdldFRleHQoKSB7CiAgICByZXR1cm4gZW50cmllcy5qb2luKCcsXG4nKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdPcHRpbWl6YXRpb25Mb2coJHtnZXRUZXh0KCl9KSc7Cn0KCi8vLyBBIHJlZ2lzdGVyZWQgb3B0aW1pemF0aW9uLgpjbGFzcyBPcHRpbWl6YXRpb25Mb2dFbnRyeSB7CiAgLy8vIFN0cmluZyB0aGF0IHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIG9wdGltaXphdGlvbiBraW5kLgogIGZpbmFsIFN0cmluZyB0YWc7CgogIC8vLyBBZGRpdGlvbmFsIGRhdGEgZm9yIHRoaXMgb3B0aW1pemF0aW9uLgogIGZpbmFsIEZlYXR1cmVzIGZlYXR1cmVzOwoKICBPcHRpbWl6YXRpb25Mb2dFbnRyeSh0aGlzLnRhZywgdGhpcy5mZWF0dXJlcyk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICckdGFnKCR7ZmVhdHVyZXMuZ2V0VGV4dCgpfSknOwp9CoD9AE5OPAEkNhUBLRwrAS8BUCMdG00gFQgGKBE6FQQBTiglGVANKQZBBAFQKB0ZUA00BkEEAU8oJRlQDSkGQgQBIU8oRT9JBAEiTyhFP0oEASFEIj1PHxwPJwgIBAFOPgQBQjgEAUQ5BAFJOQQBPjYEAT42BAFEOQQBSUoEAUo8BAFIOwQBSDsEASE+QjcEAUo7MAQBTDwxBAFCOAQBRDkEAUQ5BAFGOQQBQDcEAUY6BAFKPQQBUEAEATUoL0MEAUsoHT4GQgQBNChCBAEvKD0EATcoRQQBMDkEAU4oASUlLCUGKDQGRwQBFSAEAQw4AgEfHT0UAS0bATEBDDYCASVwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvbG9nZ2luZy5kYXJ0SHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9wYXJzZXIvbGl0ZXJhbF9lbnRyeV9pbmZvX2ltcGwuZGFydJ/bLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnOwppbXBvcnQgJ2xpdGVyYWxfZW50cnlfaW5mby5kYXJ0JzsKaW1wb3J0ICdwYXJzZXIuZGFydCc7CmltcG9ydCAndXRpbC5kYXJ0JzsKCi8vLyBbaWZDb25kaXRpb25dIGlzIHRoZSBmaXJzdCBzdGVwIGZvciBwYXJzaW5nIGEgbGl0ZXJhbCBlbnRyeQovLy8gc3RhcnRpbmcgd2l0aCBgaWZgIGNvbnRyb2wgZmxvdy4KY29uc3QgTGl0ZXJhbEVudHJ5SW5mbyBpZkNvbmRpdGlvbiA9IGNvbnN0IElmQ29uZGl0aW9uKCk7CgovLy8gW3NwcmVhZE9wZXJhdG9yXSBpcyB0aGUgZmlyc3Qgc3RlcCBmb3IgcGFyc2luZyBhIGxpdGVyYWwgZW50cnkKLy8vIHByZWNlZGVkIGJ5IGEgJy4uLicgc3ByZWFkIG9wZXJhdG9yLgpjb25zdCBMaXRlcmFsRW50cnlJbmZvIHNwcmVhZE9wZXJhdG9yID0gY29uc3QgU3ByZWFkT3BlcmF0b3IoKTsKCi8vLyBUaGUgZmlyc3Qgc3RlcCB3aGVuIHByb2Nlc3NpbmcgYSBgZm9yYCBjb250cm9sIGZsb3cgY29sbGVjdGlvbiBlbnRyeS4KY2xhc3MgRm9yQ29uZGl0aW9uIGV4dGVuZHMgTGl0ZXJhbEVudHJ5SW5mbyB7CiAgYm9vbCBpblN0eWxlOwoKICBGb3JDb25kaXRpb24oKSA6IHN1cGVyKGZhbHNlLCAwKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2UoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgVG9rZW4gYXdhaXRUb2tlbjsKICAgIGlmIChvcHRpb25hbCgnYXdhaXQnLCBuZXh0KSkgewogICAgICBhd2FpdFRva2VuID0gdG9rZW4gPSBuZXh0OwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIH0KICAgIGZpbmFsIFRva2VuIGZvclRva2VuID0gbmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnZm9yJywgZm9yVG9rZW4pKTsKICAgIHBhcnNlci5saXN0ZW5lci5iZWdpbkZvckNvbnRyb2xGbG93KGF3YWl0VG9rZW4sIGZvclRva2VuKTsKCiAgICB0b2tlbiA9IHBhcnNlci5wYXJzZUZvckxvb3BQYXJ0c1N0YXJ0KGF3YWl0VG9rZW4sIGZvclRva2VuKTsKICAgIFRva2VuIGlkZW50aWZpZXIgPSB0b2tlbi5uZXh0OwogICAgdG9rZW4gPSBwYXJzZXIucGFyc2VGb3JMb29wUGFydHNNaWQodG9rZW4sIGF3YWl0VG9rZW4sIGZvclRva2VuKTsKCiAgICBpZiAob3B0aW9uYWwoJ2luJywgdG9rZW4ubmV4dCkgfHwgb3B0aW9uYWwoJzonLCB0b2tlbi5uZXh0KSkgewogICAgICAvLyBQcm9jZXNzIGBmb3IgKCAuLi4gaW4gLi4uIClgCiAgICAgIGluU3R5bGUgPSB0cnVlOwogICAgICB0b2tlbiA9IHBhcnNlci5wYXJzZUZvckluTG9vcFBhcnRzUmVzdCgKICAgICAgICAgIHRva2VuLCBhd2FpdFRva2VuLCBmb3JUb2tlbiwgaWRlbnRpZmllcik7CiAgICB9IGVsc2UgewogICAgICAvLyBQcm9jZXNzIGBmb3IgKCAuLi4gOyAuLi4gOyAuLi4gKWAKICAgICAgaW5TdHlsZSA9IGZhbHNlOwogICAgICB0b2tlbiA9IHBhcnNlci5wYXJzZUZvckxvb3BQYXJ0c1Jlc3QodG9rZW4sIGZvclRva2VuLCBhd2FpdFRva2VuKTsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIEBvdmVycmlkZQogIExpdGVyYWxFbnRyeUluZm8gY29tcHV0ZU5leHQoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG9wdGlvbmFsKCdmb3InLCBuZXh0KSB8fAogICAgICAgIChvcHRpb25hbCgnYXdhaXQnLCBuZXh0KSAmJiBvcHRpb25hbCgnZm9yJywgbmV4dC5uZXh0KSkpIHsKICAgICAgcmV0dXJuIG5ldyBOZXN0ZWQoCiAgICAgICAgbmV3IEZvckNvbmRpdGlvbigpLAogICAgICAgIGluU3R5bGUgPyBjb25zdCBGb3JJbkNvbXBsZXRlKCkgOiBjb25zdCBGb3JDb21wbGV0ZSgpLAogICAgICApOwogICAgfSBlbHNlIGlmIChvcHRpb25hbCgnaWYnLCBuZXh0KSkgewogICAgICByZXR1cm4gbmV3IE5lc3RlZCgKICAgICAgICBpZkNvbmRpdGlvbiwKICAgICAgICBpblN0eWxlID8gY29uc3QgRm9ySW5Db21wbGV0ZSgpIDogY29uc3QgRm9yQ29tcGxldGUoKSwKICAgICAgKTsKICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJy4uLicsIG5leHQpIHx8IG9wdGlvbmFsKCcuLi4/JywgbmV4dCkpIHsKICAgICAgcmV0dXJuIGluU3R5bGUgPyBjb25zdCBGb3JJblNwcmVhZCgpIDogY29uc3QgRm9yU3ByZWFkKCk7CiAgICB9CiAgICByZXR1cm4gaW5TdHlsZSA/IGNvbnN0IEZvckluRW50cnkoKSA6IGNvbnN0IEZvckVudHJ5KCk7CiAgfQp9CgovLy8gQSBzdGVwIGZvciBwYXJzaW5nIGEgc3ByZWFkIGNvbGxlY3Rpb24KLy8vIGFzIHRoZSAiZm9yIiBjb250cm9sIGZsb3cncyBleHByZXNzaW9uLgpjbGFzcyBGb3JTcHJlYWQgZXh0ZW5kcyBTcHJlYWRPcGVyYXRvciB7CiAgY29uc3QgRm9yU3ByZWFkKCk7CgogIEBvdmVycmlkZQogIExpdGVyYWxFbnRyeUluZm8gY29tcHV0ZU5leHQoVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBjb25zdCBGb3JDb21wbGV0ZSgpOwogIH0KfQoKLy8vIEEgc3RlcCBmb3IgcGFyc2luZyBhIHNwcmVhZCBjb2xsZWN0aW9uCi8vLyBhcyB0aGUgImZvci1pbiIgY29udHJvbCBmbG93J3MgZXhwcmVzc2lvbi4KY2xhc3MgRm9ySW5TcHJlYWQgZXh0ZW5kcyBTcHJlYWRPcGVyYXRvciB7CiAgY29uc3QgRm9ySW5TcHJlYWQoKTsKCiAgQG92ZXJyaWRlCiAgTGl0ZXJhbEVudHJ5SW5mbyBjb21wdXRlTmV4dChUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIGNvbnN0IEZvckluQ29tcGxldGUoKTsKICB9Cn0KCi8vLyBBIHN0ZXAgZm9yIHBhcnNpbmcgYSBsaXRlcmFsIGxpc3QsIHNldCwgb3IgbWFwIGVudHJ5Ci8vLyBhcyB0aGUgImZvciIgY29udHJvbCBmbG93J3MgZXhwcmVzc2lvbi4KY2xhc3MgRm9yRW50cnkgZXh0ZW5kcyBMaXRlcmFsRW50cnlJbmZvIHsKICBjb25zdCBGb3JFbnRyeSgpIDogc3VwZXIodHJ1ZSwgMCk7CgogIEBvdmVycmlkZQogIExpdGVyYWxFbnRyeUluZm8gY29tcHV0ZU5leHQoVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBjb25zdCBGb3JDb21wbGV0ZSgpOwogIH0KfQoKLy8vIEEgc3RlcCBmb3IgcGFyc2luZyBhIGxpdGVyYWwgbGlzdCwgc2V0LCBvciBtYXAgZW50cnkKLy8vIGFzIHRoZSAiZm9yLWluIiBjb250cm9sIGZsb3cncyBleHByZXNzaW9uLgpjbGFzcyBGb3JJbkVudHJ5IGV4dGVuZHMgTGl0ZXJhbEVudHJ5SW5mbyB7CiAgY29uc3QgRm9ySW5FbnRyeSgpIDogc3VwZXIodHJ1ZSwgMCk7CgogIEBvdmVycmlkZQogIExpdGVyYWxFbnRyeUluZm8gY29tcHV0ZU5leHQoVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBjb25zdCBGb3JJbkNvbXBsZXRlKCk7CiAgfQp9CgpjbGFzcyBGb3JDb21wbGV0ZSBleHRlbmRzIExpdGVyYWxFbnRyeUluZm8gewogIGNvbnN0IEZvckNvbXBsZXRlKCkgOiBzdXBlcihmYWxzZSwgMCk7CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBwYXJzZXIubGlzdGVuZXIuZW5kRm9yQ29udHJvbEZsb3codG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KfQoKY2xhc3MgRm9ySW5Db21wbGV0ZSBleHRlbmRzIExpdGVyYWxFbnRyeUluZm8gewogIGNvbnN0IEZvckluQ29tcGxldGUoKSA6IHN1cGVyKGZhbHNlLCAwKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2UoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIHBhcnNlci5saXN0ZW5lci5lbmRGb3JJbkNvbnRyb2xGbG93KHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9Cn0KCi8vLyBUaGUgZmlyc3Qgc3RlcCB3aGVuIHByb2Nlc3NpbmcgYW4gYGlmYCBjb250cm9sIGZsb3cgY29sbGVjdGlvbiBlbnRyeS4KY2xhc3MgSWZDb25kaXRpb24gZXh0ZW5kcyBMaXRlcmFsRW50cnlJbmZvIHsKICBjb25zdCBJZkNvbmRpdGlvbigpIDogc3VwZXIoZmFsc2UsIDEpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZShUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgZmluYWwgVG9rZW4gaWZUb2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2lmJywgaWZUb2tlbikpOwogICAgcGFyc2VyLmxpc3RlbmVyLmJlZ2luSWZDb250cm9sRmxvdyhpZlRva2VuKTsKICAgIFRva2VuIHJlc3VsdCA9IHBhcnNlci5lbnN1cmVQYXJlbnRoZXNpemVkQ29uZGl0aW9uKGlmVG9rZW4pOwogICAgcGFyc2VyLmxpc3RlbmVyLmJlZ2luVGhlbkNvbnRyb2xGbG93KHJlc3VsdCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgTGl0ZXJhbEVudHJ5SW5mbyBjb21wdXRlTmV4dChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAob3B0aW9uYWwoJ2ZvcicsIG5leHQpIHx8CiAgICAgICAgKG9wdGlvbmFsKCdhd2FpdCcsIG5leHQpICYmIG9wdGlvbmFsKCdmb3InLCBuZXh0Lm5leHQpKSkgewogICAgICByZXR1cm4gbmV3IE5lc3RlZChuZXcgRm9yQ29uZGl0aW9uKCksIGNvbnN0IElmQ29tcGxldGUoKSk7CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCdpZicsIG5leHQpKSB7CiAgICAgIHJldHVybiBuZXcgTmVzdGVkKGlmQ29uZGl0aW9uLCBjb25zdCBJZkNvbXBsZXRlKCkpOwogICAgfSBlbHNlIGlmIChvcHRpb25hbCgnLi4uJywgbmV4dCkgfHwgb3B0aW9uYWwoJy4uLj8nLCBuZXh0KSkgewogICAgICByZXR1cm4gY29uc3QgSWZTcHJlYWQoKTsKICAgIH0KICAgIHJldHVybiBjb25zdCBJZkVudHJ5KCk7CiAgfQp9CgovLy8gQSBzdGVwIGZvciBwYXJzaW5nIGEgc3ByZWFkIGNvbGxlY3Rpb24KLy8vIGFzIHRoZSBgaWZgIGNvbnRyb2wgZmxvdydzIHRoZW4tZXhwcmVzc2lvbi4KY2xhc3MgSWZTcHJlYWQgZXh0ZW5kcyBTcHJlYWRPcGVyYXRvciB7CiAgY29uc3QgSWZTcHJlYWQoKTsKCiAgQG92ZXJyaWRlCiAgTGl0ZXJhbEVudHJ5SW5mbyBjb21wdXRlTmV4dChUb2tlbiB0b2tlbikgPT4gY29uc3QgSWZDb21wbGV0ZSgpOwp9CgovLy8gQSBzdGVwIGZvciBwYXJzaW5nIGEgbGl0ZXJhbCBsaXN0LCBzZXQsIG9yIG1hcCBlbnRyeQovLy8gYXMgdGhlIGBpZmAgY29udHJvbCBmbG93J3MgdGhlbi1leHByZXNzaW9uLgpjbGFzcyBJZkVudHJ5IGV4dGVuZHMgTGl0ZXJhbEVudHJ5SW5mbyB7CiAgY29uc3QgSWZFbnRyeSgpIDogc3VwZXIodHJ1ZSwgMCk7CgogIEBvdmVycmlkZQogIExpdGVyYWxFbnRyeUluZm8gY29tcHV0ZU5leHQoVG9rZW4gdG9rZW4pID0+IGNvbnN0IElmQ29tcGxldGUoKTsKfQoKY2xhc3MgSWZDb21wbGV0ZSBleHRlbmRzIExpdGVyYWxFbnRyeUluZm8gewogIGNvbnN0IElmQ29tcGxldGUoKSA6IHN1cGVyKGZhbHNlLCAwKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2UoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIGlmICghb3B0aW9uYWwoJ2Vsc2UnLCB0b2tlbi5uZXh0KSkgewogICAgICBwYXJzZXIubGlzdGVuZXIuZW5kSWZDb250cm9sRmxvdyh0b2tlbik7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBAb3ZlcnJpZGUKICBMaXRlcmFsRW50cnlJbmZvIGNvbXB1dGVOZXh0KFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gb3B0aW9uYWwoJ2Vsc2UnLCB0b2tlbi5uZXh0KSA/IGNvbnN0IElmRWxzZSgpIDogbnVsbDsKICB9Cn0KCi8vLyBBIHN0ZXAgZm9yIHBhcnNpbmcgdGhlIGBlbHNlYCBwb3J0aW9uIG9mIGFuIGBpZmAgY29udHJvbCBmbG93LgpjbGFzcyBJZkVsc2UgZXh0ZW5kcyBMaXRlcmFsRW50cnlJbmZvIHsKICBjb25zdCBJZkVsc2UoKSA6IHN1cGVyKGZhbHNlLCAtMSk7CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBlbHNlVG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdlbHNlJywgZWxzZVRva2VuKSk7CiAgICBwYXJzZXIubGlzdGVuZXIuaGFuZGxlRWxzZUNvbnRyb2xGbG93KGVsc2VUb2tlbik7CiAgICByZXR1cm4gZWxzZVRva2VuOwogIH0KCiAgQG92ZXJyaWRlCiAgTGl0ZXJhbEVudHJ5SW5mbyBjb21wdXRlTmV4dChUb2tlbiB0b2tlbikgewogICAgYXNzZXJ0KG9wdGlvbmFsKCdlbHNlJywgdG9rZW4pKTsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG9wdGlvbmFsKCdmb3InLCBuZXh0KSB8fAogICAgICAgIChvcHRpb25hbCgnYXdhaXQnLCBuZXh0KSAmJiBvcHRpb25hbCgnZm9yJywgbmV4dC5uZXh0KSkpIHsKICAgICAgcmV0dXJuIG5ldyBOZXN0ZWQobmV3IEZvckNvbmRpdGlvbigpLCBjb25zdCBJZkVsc2VDb21wbGV0ZSgpKTsKICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ2lmJywgbmV4dCkpIHsKICAgICAgcmV0dXJuIG5ldyBOZXN0ZWQoaWZDb25kaXRpb24sIGNvbnN0IElmRWxzZUNvbXBsZXRlKCkpOwogICAgfSBlbHNlIGlmIChvcHRpb25hbCgnLi4uJywgbmV4dCkgfHwgb3B0aW9uYWwoJy4uLj8nLCBuZXh0KSkgewogICAgICByZXR1cm4gY29uc3QgRWxzZVNwcmVhZCgpOwogICAgfQogICAgcmV0dXJuIGNvbnN0IEVsc2VFbnRyeSgpOwogIH0KfQoKY2xhc3MgRWxzZVNwcmVhZCBleHRlbmRzIFNwcmVhZE9wZXJhdG9yIHsKICBjb25zdCBFbHNlU3ByZWFkKCk7CgogIEBvdmVycmlkZQogIExpdGVyYWxFbnRyeUluZm8gY29tcHV0ZU5leHQoVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBjb25zdCBJZkVsc2VDb21wbGV0ZSgpOwogIH0KfQoKY2xhc3MgRWxzZUVudHJ5IGV4dGVuZHMgTGl0ZXJhbEVudHJ5SW5mbyB7CiAgY29uc3QgRWxzZUVudHJ5KCkgOiBzdXBlcih0cnVlLCAwKTsKCiAgQG92ZXJyaWRlCiAgTGl0ZXJhbEVudHJ5SW5mbyBjb21wdXRlTmV4dChUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIGNvbnN0IElmRWxzZUNvbXBsZXRlKCk7CiAgfQp9CgpjbGFzcyBJZkVsc2VDb21wbGV0ZSBleHRlbmRzIExpdGVyYWxFbnRyeUluZm8gewogIGNvbnN0IElmRWxzZUNvbXBsZXRlKCkgOiBzdXBlcihmYWxzZSwgMCk7CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBwYXJzZXIubGlzdGVuZXIuZW5kSWZFbHNlQ29udHJvbEZsb3codG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KfQoKLy8vIFRoZSBmaXJzdCBzdGVwIHdoZW4gcHJvY2Vzc2luZyBhIHNwcmVhZCBlbnRyeS4KY2xhc3MgU3ByZWFkT3BlcmF0b3IgZXh0ZW5kcyBMaXRlcmFsRW50cnlJbmZvIHsKICBjb25zdCBTcHJlYWRPcGVyYXRvcigpIDogc3VwZXIoZmFsc2UsIDApOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZShUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgZmluYWwgVG9rZW4gb3BlcmF0b3IgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCcuLi4nLCBvcGVyYXRvcikgfHwgb3B0aW9uYWwoJy4uLj8nLCBvcGVyYXRvcikpOwogICAgdG9rZW4gPSBwYXJzZXIucGFyc2VFeHByZXNzaW9uKG9wZXJhdG9yKTsKICAgIHBhcnNlci5saXN0ZW5lci5oYW5kbGVTcHJlYWRFeHByZXNzaW9uKG9wZXJhdG9yKTsKICAgIHJldHVybiB0b2tlbjsKICB9Cn0KCmNsYXNzIE5lc3RlZCBleHRlbmRzIExpdGVyYWxFbnRyeUluZm8gewogIExpdGVyYWxFbnRyeUluZm8gbmVzdGVkU3RlcDsKICBmaW5hbCBMaXRlcmFsRW50cnlJbmZvIGxhc3RTdGVwOwoKICBOZXN0ZWQodGhpcy5uZXN0ZWRTdGVwLCB0aGlzLmxhc3RTdGVwKSA6IHN1cGVyKGZhbHNlLCAwKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaGFzRW50cnkgPT4gbmVzdGVkU3RlcC5oYXNFbnRyeTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2UoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpID0+IG5lc3RlZFN0ZXAucGFyc2UodG9rZW4sIHBhcnNlcik7CgogIEBvdmVycmlkZQogIExpdGVyYWxFbnRyeUluZm8gY29tcHV0ZU5leHQoVG9rZW4gdG9rZW4pIHsKICAgIG5lc3RlZFN0ZXAgPSBuZXN0ZWRTdGVwLmNvbXB1dGVOZXh0KHRva2VuKTsKICAgIHJldHVybiBuZXN0ZWRTdGVwICE9IG51bGwgPyB0aGlzIDogbGFzdFN0ZXA7CiAgfQp9CoEjAE1OPAEjIhYUAUAlOgFDKUABSi4QASQBDCwdFiMhGQYhJz8BQSNGAUMmFi40DSsXSQYSBAEMLh0hQxkcPwknGRU/CUJABjwEAgErLCkVAQwuIAQCASsvKxcBDC4iBAIBOSwqJQEMLiAEAgE5LywnAQwuIgQCAS0pAQwsLhIEAgEvKwEMLDASBAIBSi0pAQwsJiUxQTITBAEMLh0hQ0EnOkIfBhwEAgErMCgUAQxDAgE5MCkkAQxDAgEsKAEMLCkvBhIEAQwuQQQCAUMoJQEMLCIpNhYEAQwuJR0hQ0UnPkIhBh4EAgEqFgEMLiMEAgErJgEMLiMEAgEwLAEMLDESBAIBMzAsAQwsJ0UuNhIEAgEoHyMBPAEMLAEMTgEMLjAxBAIBP3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvbGl0ZXJhbF9lbnRyeV9pbmZvX2ltcGwuZGFydD9zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvcGFyc2VyL3R5cGVfaW5mb19pbXBsLmRhcnTAAI5jLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEucGFyc2VyLnR5cGVfaW5mb19pbXBsOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgU3ludGhldGljVG9rZW4sIFRva2VuLCBUb2tlblR5cGU7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnIGFzIGZhc3RhOwoKaW1wb3J0ICcuLi9zY2FubmVyL3Rva2VuX2NvbnN0YW50cy5kYXJ0JyBzaG93IElERU5USUZJRVJfVE9LRU47CgppbXBvcnQgJy4uL3V0aWwvbGluay5kYXJ0JyBzaG93IExpbms7CgppbXBvcnQgJ2ZvcndhcmRpbmdfbGlzdGVuZXIuZGFydCcgc2hvdyBGb3J3YXJkaW5nTGlzdGVuZXI7CgppbXBvcnQgJ2lkZW50aWZpZXJfY29udGV4dC5kYXJ0JyBzaG93IElkZW50aWZpZXJDb250ZXh0OwoKaW1wb3J0ICdtZW1iZXJfa2luZC5kYXJ0JyBzaG93IE1lbWJlcktpbmQ7CgppbXBvcnQgJ2xpc3RlbmVyLmRhcnQnIHNob3cgTGlzdGVuZXI7CgppbXBvcnQgJ3BhcnNlci5kYXJ0JyBzaG93IFBhcnNlcjsKCmltcG9ydCAndHlwZV9pbmZvLmRhcnQnOwoKaW1wb3J0ICd1dGlsLmRhcnQnCiAgICBzaG93CiAgICAgICAgb3B0aW9uYWwsCiAgICAgICAgc2tpcE1ldGFkYXRhLAogICAgICAgIHNwbGl0R3RFcSwKICAgICAgICBzcGxpdEd0RnJvbUd0R3RFcSwKICAgICAgICBzcGxpdEd0RnJvbUd0R3RHdCwKICAgICAgICBzcGxpdEd0RnJvbUd0R3RHdEVxLAogICAgICAgIHNwbGl0R3RHdCwKICAgICAgICBzeW50aGV0aWNHdDsKCi8vLyBbU2ltcGxlVHlwZV0gaXMgYSBzcGVjaWFsaXplZCBbVHlwZUluZm9dIHJldHVybmVkIGJ5IFtjb21wdXRlVHlwZV0KLy8vIHdoZW4gdGhlcmUgaXMgYSBzaW5nbGUgaWRlbnRpZmllciBhcyB0aGUgdHlwZSByZWZlcmVuY2UuCmNvbnN0IFR5cGVJbmZvIHNpbXBsZVR5cGUgPSBjb25zdCBTaW1wbGVUeXBlKCk7CgovLy8gW1NpbXBsZU51bGxhYmxlVHlwZV0gaXMgYSBzcGVjaWFsaXplZCBbVHlwZUluZm9dIHJldHVybmVkIGJ5IFtjb21wdXRlVHlwZV0KLy8vIHdoZW4gdGhlcmUgaXMgYSBzaW5nbGUgaWRlbnRpZmllciBmb2xsb3dlZCBieSBgP2AgYXMgdGhlIHR5cGUgcmVmZXJlbmNlLgpjb25zdCBUeXBlSW5mbyBzaW1wbGVOdWxsYWJsZVR5cGUgPSBjb25zdCBTaW1wbGVOdWxsYWJsZVR5cGUoKTsKCi8vLyBbUHJlZml4ZWRUeXBlXSBpcyBhIHNwZWNpYWxpemVkIFtUeXBlSW5mb10gcmV0dXJuZWQgYnkgW2NvbXB1dGVUeXBlXQovLy8gd2hlbiB0aGUgdHlwZSByZWZlcmVuY2UgaXMgb2YgdGhlIGZvcm06IGlkZW50aWZpZXIgYC5gIGlkZW50aWZpZXIuCmNvbnN0IFR5cGVJbmZvIHByZWZpeGVkVHlwZSA9IGNvbnN0IFByZWZpeGVkVHlwZSgpOwoKLy8vIFtTaW1wbGVUeXBlV2l0aDFBcmd1bWVudF0gaXMgYSBzcGVjaWFsaXplZCBbVHlwZUluZm9dIHJldHVybmVkIGJ5Ci8vLyBbY29tcHV0ZVR5cGVdIHdoZW4gdGhlIHR5cGUgcmVmZXJlbmNlIGlzIG9mIHRoZSBmb3JtOgovLy8gaWRlbnRpZmllciBgPGAgaWRlbnRpZmllciBgPmAuCmNvbnN0IFR5cGVJbmZvIHNpbXBsZVR5cGVXaXRoMUFyZ3VtZW50ID0KICAgIGNvbnN0IFNpbXBsZVR5cGVXaXRoMUFyZ3VtZW50KHNpbXBsZVR5cGVBcmd1bWVudDEpOwoKLy8vIFtTaW1wbGVUeXBlV2l0aDFBcmd1bWVudF0gaXMgYSBzcGVjaWFsaXplZCBbVHlwZUluZm9dIHJldHVybmVkIGJ5Ci8vLyBbY29tcHV0ZVR5cGVdIHdoZW4gdGhlIHR5cGUgcmVmZXJlbmNlIGlzIG9mIHRoZSBmb3JtOgovLy8gaWRlbnRpZmllciBgPGAgaWRlbnRpZmllciBgPj1gLgpjb25zdCBUeXBlSW5mbyBzaW1wbGVUeXBlV2l0aDFBcmd1bWVudEd0RXEgPQogICAgY29uc3QgU2ltcGxlVHlwZVdpdGgxQXJndW1lbnQoc2ltcGxlVHlwZUFyZ3VtZW50MUd0RXEpOwoKLy8vIFtTaW1wbGVUeXBlV2l0aDFBcmd1bWVudF0gaXMgYSBzcGVjaWFsaXplZCBbVHlwZUluZm9dIHJldHVybmVkIGJ5Ci8vLyBbY29tcHV0ZVR5cGVdIHdoZW4gdGhlIHR5cGUgcmVmZXJlbmNlIGlzIG9mIHRoZSBmb3JtOgovLy8gaWRlbnRpZmllciBgPGAgaWRlbnRpZmllciBgPj5gLgpjb25zdCBUeXBlSW5mbyBzaW1wbGVUeXBlV2l0aDFBcmd1bWVudEd0R3QgPQogICAgY29uc3QgU2ltcGxlVHlwZVdpdGgxQXJndW1lbnQoc2ltcGxlVHlwZUFyZ3VtZW50MUd0R3QpOwoKLy8vIFtTaW1wbGVOdWxsYWJsZVR5cGVXaXRoMUFyZ3VtZW50XSBpcyBhIHNwZWNpYWxpemVkIFtUeXBlSW5mb10gcmV0dXJuZWQgYnkKLy8vIFtjb21wdXRlVHlwZV0gd2hlbiB0aGUgdHlwZSByZWZlcmVuY2UgaXMgb2YgdGhlIGZvcm06Ci8vLyBpZGVudGlmaWVyIGA8YCBpZGVudGlmaWVyIGA+YCBgP2AuCmNvbnN0IFR5cGVJbmZvIHNpbXBsZU51bGxhYmxlVHlwZVdpdGgxQXJndW1lbnQgPQogICAgY29uc3QgU2ltcGxlTnVsbGFibGVUeXBlV2l0aDFBcmd1bWVudCgpOwoKLy8vIFtTaW1wbGVUeXBlQXJndW1lbnQxXSBpcyBhIHNwZWNpYWxpemVkIFtUeXBlUGFyYW1PckFyZ0luZm9dIHJldHVybmVkIGJ5Ci8vLyBbY29tcHV0ZVR5cGVQYXJhbU9yQXJnXSB3aGVuIHRoZSB0eXBlIHJlZmVyZW5jZSBpcyBvZiB0aGUgZm9ybToKLy8vIGA8YCBpZGVudGlmaWVyIGA+YC4KY29uc3QgVHlwZVBhcmFtT3JBcmdJbmZvIHNpbXBsZVR5cGVBcmd1bWVudDEgPSBjb25zdCBTaW1wbGVUeXBlQXJndW1lbnQxKCk7CgovLy8gW1NpbXBsZVR5cGVBcmd1bWVudDFdIGlzIGEgc3BlY2lhbGl6ZWQgW1R5cGVQYXJhbU9yQXJnSW5mb10gcmV0dXJuZWQgYnkKLy8vIFtjb21wdXRlVHlwZVBhcmFtT3JBcmddIHdoZW4gdGhlIHR5cGUgcmVmZXJlbmNlIGlzIG9mIHRoZSBmb3JtOgovLy8gYDxgIGlkZW50aWZpZXIgYD49YC4KY29uc3QgVHlwZVBhcmFtT3JBcmdJbmZvIHNpbXBsZVR5cGVBcmd1bWVudDFHdEVxID0KICAgIGNvbnN0IFNpbXBsZVR5cGVBcmd1bWVudDFHdEVxKCk7CgovLy8gW1NpbXBsZVR5cGVBcmd1bWVudDFdIGlzIGEgc3BlY2lhbGl6ZWQgW1R5cGVQYXJhbU9yQXJnSW5mb10gcmV0dXJuZWQgYnkKLy8vIFtjb21wdXRlVHlwZVBhcmFtT3JBcmddIHdoZW4gdGhlIHR5cGUgcmVmZXJlbmNlIGlzIG9mIHRoZSBmb3JtOgovLy8gYDxgIGlkZW50aWZpZXIgYD4+YC4KY29uc3QgVHlwZVBhcmFtT3JBcmdJbmZvIHNpbXBsZVR5cGVBcmd1bWVudDFHdEd0ID0KICAgIGNvbnN0IFNpbXBsZVR5cGVBcmd1bWVudDFHdEd0KCk7CgovLy8gU2VlIGRvY3VtZW50YXRpb24gb24gdGhlIFtub1R5cGVdIGNvbnN0LgpjbGFzcyBOb1R5cGUgaW1wbGVtZW50cyBUeXBlSW5mbyB7CiAgY29uc3QgTm9UeXBlKCk7CgogIEBvdmVycmlkZQogIFR5cGVJbmZvIGdldCBhc05vbk51bGxhYmxlID0+IHRoaXM7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGNvdWxkQmVFeHByZXNzaW9uID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc051bGxhYmxlID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVUeXBlTm90Vm9pZChUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgdG9rZW4ubmV4dCwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZFR5cGUpOwogICAgcGFyc2VyLnJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4pOwogICAgcmV0dXJuIHNpbXBsZVR5cGUucGFyc2VUeXBlKHRva2VuLCBwYXJzZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlVHlwZU9yVm9pZChUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgPT4KICAgICAgZW5zdXJlVHlwZU5vdFZvaWQodG9rZW4sIHBhcnNlcik7CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlVHlwZU5vdFZvaWQoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpID0+CiAgICAgIHBhcnNlVHlwZSh0b2tlbiwgcGFyc2VyKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2VUeXBlKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBwYXJzZXIubGlzdGVuZXIuaGFuZGxlTm9UeXBlKHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIEBvdmVycmlkZQogIFRva2VuIHNraXBUeXBlKFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gdG9rZW47CiAgfQp9CgovLy8gU2VlIGRvY3VtZW50YXRpb24gb24gdGhlIFtwcmVmaXhlZFR5cGVdIGNvbnN0LgpjbGFzcyBQcmVmaXhlZFR5cGUgaW1wbGVtZW50cyBUeXBlSW5mbyB7CiAgY29uc3QgUHJlZml4ZWRUeXBlKCk7CgogIEBvdmVycmlkZQogIFR5cGVJbmZvIGdldCBhc05vbk51bGxhYmxlID0+IHRoaXM7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGNvdWxkQmVFeHByZXNzaW9uID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTnVsbGFibGUgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZVR5cGVOb3RWb2lkKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSA9PgogICAgICBwYXJzZVR5cGUodG9rZW4sIHBhcnNlcik7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZVR5cGVPclZvaWQoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpID0+CiAgICAgIHBhcnNlVHlwZSh0b2tlbiwgcGFyc2VyKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2VUeXBlTm90Vm9pZChUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgPT4KICAgICAgcGFyc2VUeXBlKHRva2VuLCBwYXJzZXIpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZVR5cGUoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIHN0YXJ0ID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KHRva2VuLmlzS2V5d29yZE9ySWRlbnRpZmllcik7CiAgICBMaXN0ZW5lciBsaXN0ZW5lciA9IHBhcnNlci5saXN0ZW5lcjsKICAgIGxpc3RlbmVyLmhhbmRsZUlkZW50aWZpZXIodG9rZW4sIElkZW50aWZpZXJDb250ZXh0LnByZWZpeGVkVHlwZVJlZmVyZW5jZSk7CgogICAgVG9rZW4gcGVyaW9kID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCcuJywgdG9rZW4pKTsKCiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQodG9rZW4uaXNLZXl3b3JkT3JJZGVudGlmaWVyKTsKICAgIGxpc3RlbmVyLmhhbmRsZUlkZW50aWZpZXIoCiAgICAgICAgdG9rZW4sIElkZW50aWZpZXJDb250ZXh0LnR5cGVSZWZlcmVuY2VDb250aW51YXRpb24pOwogICAgbGlzdGVuZXIuaGFuZGxlUXVhbGlmaWVkKHBlcmlvZCk7CgogICAgbGlzdGVuZXIuaGFuZGxlTm9UeXBlQXJndW1lbnRzKHRva2VuLm5leHQpOwogICAgbGlzdGVuZXIuaGFuZGxlVHlwZShzdGFydCwgbnVsbCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBAb3ZlcnJpZGUKICBUb2tlbiBza2lwVHlwZShUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIHRva2VuLm5leHQubmV4dC5uZXh0OwogIH0KfQoKLy8vIFNlZSBkb2N1bWVudGF0aW9uIG9uIHRoZSBbc2ltcGxlTnVsbGFibGVUeXBlV2l0aDFBcmd1bWVudF0gY29uc3QuCmNsYXNzIFNpbXBsZU51bGxhYmxlVHlwZVdpdGgxQXJndW1lbnQgZXh0ZW5kcyBTaW1wbGVUeXBlV2l0aDFBcmd1bWVudCB7CiAgY29uc3QgU2ltcGxlTnVsbGFibGVUeXBlV2l0aDFBcmd1bWVudCgpIDogc3VwZXIoc2ltcGxlVHlwZUFyZ3VtZW50MSk7CgogIEBvdmVycmlkZQogIFR5cGVJbmZvIGdldCBhc05vbk51bGxhYmxlID0+IHNpbXBsZVR5cGVXaXRoMUFyZ3VtZW50OwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc051bGxhYmxlID0+IHRydWU7CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlVHlwZVJlc3QoVG9rZW4gc3RhcnQsIFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJz8nLCB0b2tlbikpOwogICAgcGFyc2VyLmxpc3RlbmVyLmhhbmRsZVR5cGUoc3RhcnQsIHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIEBvdmVycmlkZQogIFRva2VuIHNraXBUeXBlKFRva2VuIHRva2VuKSB7CiAgICB0b2tlbiA9IHN1cGVyLnNraXBUeXBlKHRva2VuKS5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCc/JywgdG9rZW4pKTsKICAgIHJldHVybiB0b2tlbjsKICB9Cn0KCi8vLyBTZWUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgW3NpbXBsZVR5cGVXaXRoMUFyZ3VtZW50XSBjb25zdC4KY2xhc3MgU2ltcGxlVHlwZVdpdGgxQXJndW1lbnQgaW1wbGVtZW50cyBUeXBlSW5mbyB7CiAgZmluYWwgVHlwZVBhcmFtT3JBcmdJbmZvIHR5cGVBcmc7CgogIGNvbnN0IFNpbXBsZVR5cGVXaXRoMUFyZ3VtZW50KHRoaXMudHlwZUFyZyk7CgogIEBvdmVycmlkZQogIFR5cGVJbmZvIGdldCBhc05vbk51bGxhYmxlID0+IHRoaXM7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGNvdWxkQmVFeHByZXNzaW9uID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc051bGxhYmxlID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVUeXBlTm90Vm9pZChUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgPT4KICAgICAgcGFyc2VUeXBlKHRva2VuLCBwYXJzZXIpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVUeXBlT3JWb2lkKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSA9PgogICAgICBwYXJzZVR5cGUodG9rZW4sIHBhcnNlcik7CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlVHlwZU5vdFZvaWQoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpID0+CiAgICAgIHBhcnNlVHlwZSh0b2tlbiwgcGFyc2VyKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2VUeXBlKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBzdGFydCA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydCh0b2tlbi5pc0tleXdvcmRPcklkZW50aWZpZXIpOwogICAgcGFyc2VyLmxpc3RlbmVyLmhhbmRsZUlkZW50aWZpZXIodG9rZW4sIElkZW50aWZpZXJDb250ZXh0LnR5cGVSZWZlcmVuY2UpOwogICAgdG9rZW4gPSB0eXBlQXJnLnBhcnNlQXJndW1lbnRzKHRva2VuLCBwYXJzZXIpOwogICAgcmV0dXJuIHBhcnNlVHlwZVJlc3Qoc3RhcnQsIHRva2VuLCBwYXJzZXIpOwogIH0KCiAgVG9rZW4gcGFyc2VUeXBlUmVzdChUb2tlbiBzdGFydCwgVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIHBhcnNlci5saXN0ZW5lci5oYW5kbGVUeXBlKHN0YXJ0LCBudWxsKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIEBvdmVycmlkZQogIFRva2VuIHNraXBUeXBlKFRva2VuIHRva2VuKSB7CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQodG9rZW4uaXNLZXl3b3JkT3JJZGVudGlmaWVyKTsKICAgIHJldHVybiB0eXBlQXJnLnNraXAodG9rZW4pOwogIH0KfQoKLy8vIFNlZSBkb2N1bWVudGF0aW9uIG9uIHRoZSBbc2ltcGxlTnVsbGFibGVUeXBlXSBjb25zdC4KY2xhc3MgU2ltcGxlTnVsbGFibGVUeXBlIGV4dGVuZHMgU2ltcGxlVHlwZSB7CiAgY29uc3QgU2ltcGxlTnVsbGFibGVUeXBlKCk7CgogIEBvdmVycmlkZQogIFR5cGVJbmZvIGdldCBhc05vbk51bGxhYmxlID0+IHNpbXBsZVR5cGU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTnVsbGFibGUgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2VUeXBlUmVzdChUb2tlbiBzdGFydCwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gdG9rZW4gPSBzdGFydC5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCc/JywgdG9rZW4pKTsKICAgIHBhcnNlci5saXN0ZW5lci5oYW5kbGVUeXBlKHN0YXJ0LCB0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBAb3ZlcnJpZGUKICBUb2tlbiBza2lwVHlwZShUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIHRva2VuLm5leHQubmV4dDsKICB9Cn0KCi8vLyBTZWUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgW3NpbXBsZVR5cGVdIGNvbnN0LgpjbGFzcyBTaW1wbGVUeXBlIGltcGxlbWVudHMgVHlwZUluZm8gewogIGNvbnN0IFNpbXBsZVR5cGUoKTsKCiAgQG92ZXJyaWRlCiAgVHlwZUluZm8gZ2V0IGFzTm9uTnVsbGFibGUgPT4gdGhpczsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgY291bGRCZUV4cHJlc3Npb24gPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOdWxsYWJsZSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlVHlwZU5vdFZvaWQoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpID0+CiAgICAgIHBhcnNlVHlwZSh0b2tlbiwgcGFyc2VyKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlVHlwZU9yVm9pZChUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgPT4KICAgICAgcGFyc2VUeXBlKHRva2VuLCBwYXJzZXIpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZVR5cGVOb3RWb2lkKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSA9PgogICAgICBwYXJzZVR5cGUodG9rZW4sIHBhcnNlcik7CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlVHlwZShUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGlzVmFsaWRUeXBlUmVmZXJlbmNlKHRva2VuKSk7CiAgICBwYXJzZXIubGlzdGVuZXIuaGFuZGxlSWRlbnRpZmllcih0b2tlbiwgSWRlbnRpZmllckNvbnRleHQudHlwZVJlZmVyZW5jZSk7CiAgICB0b2tlbiA9IG5vVHlwZVBhcmFtT3JBcmcucGFyc2VBcmd1bWVudHModG9rZW4sIHBhcnNlcik7CiAgICByZXR1cm4gcGFyc2VUeXBlUmVzdCh0b2tlbiwgcGFyc2VyKTsKICB9CgogIFRva2VuIHBhcnNlVHlwZVJlc3QoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIHBhcnNlci5saXN0ZW5lci5oYW5kbGVUeXBlKHRva2VuLCBudWxsKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIEBvdmVycmlkZQogIFRva2VuIHNraXBUeXBlKFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gdG9rZW4ubmV4dDsKICB9Cn0KCi8vLyBTZWUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgW3ZvaWRUeXBlXSBjb25zdC4KY2xhc3MgVm9pZFR5cGUgaW1wbGVtZW50cyBUeXBlSW5mbyB7CiAgY29uc3QgVm9pZFR5cGUoKTsKCiAgQG92ZXJyaWRlCiAgVHlwZUluZm8gZ2V0IGFzTm9uTnVsbGFibGUgPT4gdGhpczsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgY291bGRCZUV4cHJlc3Npb24gPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTnVsbGFibGUgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZVR5cGVOb3RWb2lkKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICAvLyBSZXBvcnQgYW4gZXJyb3IsIHRoZW4gcGFyc2UgYHZvaWRgIGFzIGlmIGl0IHdlcmUgYSB0eXBlIG5hbWUuCiAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0b2tlbi5uZXh0LCBmYXN0YS5tZXNzYWdlSW52YWxpZFZvaWQpOwogICAgcmV0dXJuIHNpbXBsZVR5cGUucGFyc2VUeXBlTm90Vm9pZCh0b2tlbiwgcGFyc2VyKTsKICB9CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZVR5cGVPclZvaWQoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpID0+CiAgICAgIHBhcnNlVHlwZSh0b2tlbiwgcGFyc2VyKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2VUeXBlTm90Vm9pZChUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgPT4KICAgICAgZW5zdXJlVHlwZU5vdFZvaWQodG9rZW4sIHBhcnNlcik7CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlVHlwZShUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgcGFyc2VyLmxpc3RlbmVyLmhhbmRsZVZvaWRLZXl3b3JkKHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIEBvdmVycmlkZQogIFRva2VuIHNraXBUeXBlKFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gdG9rZW4ubmV4dDsKICB9Cn0KCmJvb2wgbG9va3NMaWtlTmFtZShUb2tlbiB0b2tlbikgPT4KICAgIHRva2VuLmtpbmQgPT0gSURFTlRJRklFUl9UT0tFTiB8fAogICAgb3B0aW9uYWwoJ3RoaXMnLCB0b2tlbikgfHwKICAgICh0b2tlbi5pc0lkZW50aWZpZXIgJiYKICAgICAgICAvLyBBbHRob3VnaCBgdHlwZWRlZmAgaXMgYSBsZWdhbCBpZGVudGlmaWVyLAogICAgICAgIC8vIHR5cGUgYHR5cGVkZWZgIGlkZW50aWZpZXIgaXMgbm90IGxlZ2FsIGFuZCBpbiB0aGlzIHNpdHVhdGlvbgogICAgICAgIC8vIGB0eXBlZGVmYCBpcyBwcm9iYWJseSBhIHNlcGFyYXRlIGRlY2xhcmF0aW9uLgogICAgICAgICghb3B0aW9uYWwoJ3R5cGVkZWYnLCB0b2tlbikgfHwgIXRva2VuLm5leHQuaXNJZGVudGlmaWVyKSk7CgovLy8gV2hlbiBtaXNzaW5nIGEgY29tbWEsIGRldGVybWluZSBpZiB0aGUgZ2l2ZW4gdG9rZW4gbG9va3MgbGlrZSBpdCBzaG91bGQKLy8vIGJlIHBhcnQgb2YgYSBjb2xsZWN0aW9uIG9mIHR5cGUgcGFyYW1ldGVycyBvciBhcmd1bWVudHMuCmJvb2wgbG9va3NMaWtlVHlwZVBhcmFtT3JBcmcoYm9vbCBpbkRlY2xhcmF0aW9uLCBUb2tlbiB0b2tlbikgewogIGlmIChpbkRlY2xhcmF0aW9uICYmIHRva2VuLmtpbmQgPT0gSURFTlRJRklFUl9UT0tFTikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAobmV4dC5raW5kID09IElERU5USUZJRVJfVE9LRU4gfHwKICAgICAgICBvcHRpb25hbCgnLCcsIG5leHQpIHx8CiAgICAgICAgaXNDbG9zZXIobmV4dCkpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgfQogIHJldHVybiBmYWxzZTsKfQoKLy8vIEluc3RhbmNlcyBvZiBbQ29tcGxleFR5cGVJbmZvXSBhcmUgcmV0dXJuZWQgYnkgW2NvbXB1dGVUeXBlXSB0byByZXByZXNlbnQKLy8vIHR5cGUgcmVmZXJlbmNlcyB0aGF0IGNhbm5vdCBiZSByZXByZXNlbnRlZCBieSB0aGUgY29uc3RhbnRzIGFib3ZlLgpjbGFzcyBDb21wbGV4VHlwZUluZm8gaW1wbGVtZW50cyBUeXBlSW5mbyB7CiAgLy8vIFRoZSBmaXJzdCB0b2tlbiBpbiB0aGUgdHlwZSByZWZlcmVuY2UuCiAgVG9rZW4gc3RhcnQ7CgogIC8vLyBUeXBlIGFyZ3VtZW50cyB3ZXJlIHNlZW4gZHVyaW5nIGFuYWx5c2lzLgogIGZpbmFsIFR5cGVQYXJhbU9yQXJnSW5mbyB0eXBlQXJndW1lbnRzOwoKICAvLy8gVGhlIHRva2VuIGJlZm9yZSB0aGUgdHJhaWxpbmcgcXVlc3Rpb24gbWFyayBvciBgbnVsbGAgaWYgZWl0aGVyCiAgLy8vIDEpIHRoZXJlIGlzIG5vIHRyYWlsaW5nIHF1ZXN0aW9uIG1hcmssIG9yCiAgLy8vIDIpIHRoZSB0cmFpbGluZyBxdWVzdGlvbiBtYXJrIGlzIG5vdCBwYXJ0IG9mIHRoZSB0eXBlIHJlZmVyZW5jZS4KICBUb2tlbiBiZWZvcmVRdWVzdGlvbk1hcms7CgogIC8vLyBUaGUgbGFzdCB0b2tlbiBpbiB0aGUgdHlwZSByZWZlcmVuY2UuCiAgVG9rZW4gZW5kOwoKICAvLy8gVGhlIGBGdW5jdGlvbmAgdG9rZW5zIGJlZm9yZSB0aGUgc3RhcnQgb2YgdHlwZSB2YXJpYWJsZXMgb2YgZnVuY3Rpb24gdHlwZXMKICAvLy8gYXMgc2VlbiBkdXJpbmcgYW5hbHlzaXMuCiAgTGluazxUb2tlbj4gdHlwZVZhcmlhYmxlU3RhcnRlcnMgPSBjb25zdCBMaW5rPFRva2VuPigpOwoKICAvLy8gSWYgdGhlIHJlY2VpdmVyIHJlcHJlc2VudHMgYSBnZW5lcmFsaXplZCBmdW5jdGlvbiB0eXBlIHRoZW4gdGhpcyBpbmRpY2F0ZXMKICAvLy8gd2hldGhlciBpdCBoYXMgYSByZXR1cm4gdHlwZSwgb3RoZXJ3aXNlIHRoaXMgaXMgYG51bGxgLgogIGJvb2wgZ2Z0SGFzUmV0dXJuVHlwZTsKCiAgQ29tcGxleFR5cGVJbmZvKFRva2VuIGJlZm9yZVN0YXJ0LCB0aGlzLnR5cGVBcmd1bWVudHMpCiAgICAgIDogdGhpcy5zdGFydCA9IGJlZm9yZVN0YXJ0Lm5leHQgewogICAgYXNzZXJ0KHR5cGVBcmd1bWVudHMgIT0gbnVsbCk7CiAgfQoKICBDb21wbGV4VHlwZUluZm8uX25vbk51bGxhYmxlKHRoaXMuc3RhcnQsIHRoaXMudHlwZUFyZ3VtZW50cywgdGhpcy5lbmQsCiAgICAgIHRoaXMudHlwZVZhcmlhYmxlU3RhcnRlcnMsIHRoaXMuZ2Z0SGFzUmV0dXJuVHlwZSk7CgogIEBvdmVycmlkZQogIFR5cGVJbmZvIGdldCBhc05vbk51bGxhYmxlIHsKICAgIHJldHVybiBiZWZvcmVRdWVzdGlvbk1hcmsgPT0gbnVsbAogICAgICAgID8gdGhpcwogICAgICAgIDogbmV3IENvbXBsZXhUeXBlSW5mby5fbm9uTnVsbGFibGUoc3RhcnQsIHR5cGVBcmd1bWVudHMsCiAgICAgICAgICAgIGJlZm9yZVF1ZXN0aW9uTWFyaywgdHlwZVZhcmlhYmxlU3RhcnRlcnMsIGdmdEhhc1JldHVyblR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgY291bGRCZUV4cHJlc3Npb24gPT4KICAgICAgdHlwZUFyZ3VtZW50cyA9PSBub1R5cGVQYXJhbU9yQXJnICYmIHR5cGVWYXJpYWJsZVN0YXJ0ZXJzLmlzRW1wdHk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTnVsbGFibGUgPT4gYmVmb3JlUXVlc3Rpb25NYXJrICE9IG51bGw7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZVR5cGVOb3RWb2lkKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSA9PgogICAgICBwYXJzZVR5cGUodG9rZW4sIHBhcnNlcik7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZVR5cGVPclZvaWQoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpID0+CiAgICAgIHBhcnNlVHlwZSh0b2tlbiwgcGFyc2VyKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2VUeXBlTm90Vm9pZChUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgPT4KICAgICAgcGFyc2VUeXBlKHRva2VuLCBwYXJzZXIpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZVR5cGUoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIGFzc2VydChpZGVudGljYWwodG9rZW4ubmV4dCwgc3RhcnQpKTsKCiAgICBpZiAob3B0aW9uYWwoJy4nLCBzdGFydCkpIHsKICAgICAgLy8gUmVjb3Zlcnk6IEluc2VydCBtaXNzaW5nIGlkZW50aWZpZXIgd2l0aG91dCBzZW5kaW5nIGV2ZW50cwogICAgICBzdGFydCA9IHBhcnNlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKAogICAgICAgICAgdG9rZW4sIElkZW50aWZpZXJDb250ZXh0LnByZWZpeGVkVHlwZVJlZmVyZW5jZSk7CiAgICB9CgogICAgZmluYWwgTGlzdDxUb2tlbj4gdHlwZVZhcmlhYmxlRW5kR3JvdXBzID0gPFRva2VuPltdOwogICAgZm9yIChMaW5rPFRva2VuPiB0ID0gdHlwZVZhcmlhYmxlU3RhcnRlcnM7IHQuaXNOb3RFbXB0eTsgdCA9IHQudGFpbCkgewogICAgICB0eXBlVmFyaWFibGVFbmRHcm91cHMuYWRkKAogICAgICAgICAgY29tcHV0ZVR5cGVQYXJhbU9yQXJnKHQuaGVhZCwgdHJ1ZSkucGFyc2VWYXJpYWJsZXModC5oZWFkLCBwYXJzZXIpKTsKICAgICAgcGFyc2VyLmxpc3RlbmVyLmJlZ2luRnVuY3Rpb25UeXBlKHN0YXJ0KTsKICAgIH0KCiAgICBpZiAoZ2Z0SGFzUmV0dXJuVHlwZSA9PSBmYWxzZSkgewogICAgICAvLyBBIGZ1bmN0aW9uIHR5cGUgd2l0aG91dCByZXR1cm4gdHlwZS4KICAgICAgLy8gUHVzaCB0aGUgbm9uLWV4aXN0aW5nIHJldHVybiB0eXBlIGZpcnN0LiBUaGUgbG9vcCBiZWxvdyB3aWxsCiAgICAgIC8vIGdlbmVyYXRlIHRoZSBmdWxsIHR5cGUuCiAgICAgIG5vVHlwZS5wYXJzZVR5cGUodG9rZW4sIHBhcnNlcik7CiAgICB9IGVsc2UgewogICAgICBUb2tlbiB0eXBlUmVmT3JQcmVmaXggPSB0b2tlbi5uZXh0OwogICAgICBpZiAob3B0aW9uYWwoJ3ZvaWQnLCB0eXBlUmVmT3JQcmVmaXgpKSB7CiAgICAgICAgdG9rZW4gPSB2b2lkVHlwZS5wYXJzZVR5cGUodG9rZW4sIHBhcnNlcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKCFvcHRpb25hbCgnLicsIHR5cGVSZWZPclByZWZpeCkgJiYKICAgICAgICAgICAgIW9wdGlvbmFsKCcuJywgdHlwZVJlZk9yUHJlZml4Lm5leHQpKSB7CiAgICAgICAgICB0b2tlbiA9CiAgICAgICAgICAgICAgcGFyc2VyLmVuc3VyZUlkZW50aWZpZXIodG9rZW4sIElkZW50aWZpZXJDb250ZXh0LnR5cGVSZWZlcmVuY2UpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0b2tlbiA9IHBhcnNlci5lbnN1cmVJZGVudGlmaWVyKAogICAgICAgICAgICAgIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC5wcmVmaXhlZFR5cGVSZWZlcmVuY2UpOwogICAgICAgICAgdG9rZW4gPSBwYXJzZXIucGFyc2VRdWFsaWZpZWRSZXN0KAogICAgICAgICAgICAgIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC50eXBlUmVmZXJlbmNlQ29udGludWF0aW9uKTsKICAgICAgICAgIGlmICh0b2tlbi5pc1N5bnRoZXRpYyAmJiBlbmQgPT0gdHlwZVJlZk9yUHJlZml4Lm5leHQpIHsKICAgICAgICAgICAgLy8gUmVjb3Zlcnk6IFVwZGF0ZSBgZW5kYCBpZiBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIHdhcyBpbnNlcnRlZC4KICAgICAgICAgICAgZW5kID0gdG9rZW47CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRva2VuID0gdHlwZUFyZ3VtZW50cy5wYXJzZUFyZ3VtZW50cyh0b2tlbiwgcGFyc2VyKTsKCiAgICAgICAgLy8gT25seSBjb25zdW1lIHRoZSBgP2AgaWYgaXQgaXMgcGFydCBvZiB0aGUgY29tcGxleCB0eXBlCiAgICAgICAgVG9rZW4gcXVlc3Rpb25NYXJrID0gdG9rZW4ubmV4dDsKICAgICAgICBpZiAob3B0aW9uYWwoJz8nLCBxdWVzdGlvbk1hcmspICYmCiAgICAgICAgICAgICh0eXBlVmFyaWFibGVFbmRHcm91cHMuaXNOb3RFbXB0eSB8fCBiZWZvcmVRdWVzdGlvbk1hcmsgIT0gbnVsbCkpIHsKICAgICAgICAgIHRva2VuID0gcXVlc3Rpb25NYXJrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBxdWVzdGlvbk1hcmsgPSBudWxsOwogICAgICAgIH0KCiAgICAgICAgcGFyc2VyLmxpc3RlbmVyLmhhbmRsZVR5cGUodHlwZVJlZk9yUHJlZml4LCBxdWVzdGlvbk1hcmspOwogICAgICB9CiAgICB9CgogICAgaW50IGVuZEdyb3VwSW5kZXggPSB0eXBlVmFyaWFibGVFbmRHcm91cHMubGVuZ3RoIC0gMTsKICAgIGZvciAoTGluazxUb2tlbj4gdCA9IHR5cGVWYXJpYWJsZVN0YXJ0ZXJzOyB0LmlzTm90RW1wdHk7IHQgPSB0LnRhaWwpIHsKICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICBhc3NlcnQob3B0aW9uYWwoJ0Z1bmN0aW9uJywgdG9rZW4pKTsKICAgICAgVG9rZW4gZnVuY3Rpb25Ub2tlbiA9IHRva2VuOwoKICAgICAgaWYgKG9wdGlvbmFsKCI8IiwgdG9rZW4ubmV4dCkpIHsKICAgICAgICAvLyBTa2lwIHR5cGUgcGFyYW1ldGVycywgdGhleSB3ZXJlIHBhcnNlZCBhYm92ZS4KICAgICAgICB0b2tlbiA9IHR5cGVWYXJpYWJsZUVuZEdyb3Vwc1tlbmRHcm91cEluZGV4XTsKICAgICAgICBhc3NlcnQob3B0aW9uYWwoJz4nLCB0b2tlbikpOwogICAgICB9CiAgICAgIHRva2VuID0gcGFyc2VyLnBhcnNlRm9ybWFsUGFyYW1ldGVyc1JlcXVpcmVkT3B0KAogICAgICAgICAgdG9rZW4sIE1lbWJlcktpbmQuR2VuZXJhbGl6ZWRGdW5jdGlvblR5cGUpOwoKICAgICAgLy8gT25seSBjb25zdW1lIHRoZSBgP2AgaWYgaXQgaXMgcGFydCBvZiB0aGUgY29tcGxleCB0eXBlCiAgICAgIFRva2VuIHF1ZXN0aW9uTWFyayA9IHRva2VuLm5leHQ7CiAgICAgIGlmIChvcHRpb25hbCgnPycsIHF1ZXN0aW9uTWFyaykgJiYKICAgICAgICAgIChlbmRHcm91cEluZGV4ID4gMCB8fCBiZWZvcmVRdWVzdGlvbk1hcmsgIT0gbnVsbCkpIHsKICAgICAgICB0b2tlbiA9IHF1ZXN0aW9uTWFyazsKICAgICAgfSBlbHNlIHsKICAgICAgICBxdWVzdGlvbk1hcmsgPSBudWxsOwogICAgICB9CgogICAgICAtLWVuZEdyb3VwSW5kZXg7CiAgICAgIHBhcnNlci5saXN0ZW5lci5lbmRGdW5jdGlvblR5cGUoZnVuY3Rpb25Ub2tlbiwgcXVlc3Rpb25NYXJrKTsKICAgIH0KCiAgICAvLyBUaGVyZSBhcmUgdHdvIHNpdHVhdGlvbnMgaW4gd2hpY2ggdGhlIFt0b2tlbl0gIT0gW2VuZF06CiAgICAvLyBWYWxpZCBjb2RlOiAgICBpZGVudGlmaWVyIGA8YCBpZGVudGlmaWVyIGA8YCBpZGVudGlmaWVyIGA+PmAKICAgIC8vICAgIHdoZXJlIGA+PmAgaXMgcmVwbGFjZWQgYnkgdHdvIHRva2Vucy4KICAgIC8vIEludmFsaWQgY29kZTogIGlkZW50aWZpZXIgYDxgIGlkZW50aWZpZXIgaWRlbnRpZmllciBgPmAKICAgIC8vICAgIHdoZXJlIGEgc3ludGhldGljIGA+YCBpcyBpbnNlcnRlZCBiZXR3ZWVuIHRoZSBpZGVudGlmaWVycy4KICAgIGFzc2VydChpZGVudGljYWwodG9rZW4sIGVuZCkgfHwgb3B0aW9uYWwoJz4nLCB0b2tlbikpOwoKICAgIC8vIER1cmluZyByZWNvdmVyeSwgW3Rva2VuXSBtYXkgYmUgYSBzeW50aGV0aWMgdGhhdCB3YXMgaW5zZXJ0ZWQgaW4gdGhlCiAgICAvLyBtaWRkbGUgb2YgdGhlIHR5cGUgcmVmZXJlbmNlLgogICAgZW5kID0gdG9rZW47CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBAb3ZlcnJpZGUKICBUb2tlbiBza2lwVHlwZShUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIGVuZDsKICB9CgogIC8vLyBHaXZlbiBgRnVuY3Rpb25gIG5vbi1pZGVudGlmaWVyLCBjb21wdXRlIHRoZSB0eXBlCiAgLy8vIGFuZCByZXR1cm4gdGhlIHJlY2VpdmVyIG9yIG9uZSBvZiB0aGUgW1R5cGVJbmZvXSBjb25zdGFudHMuCiAgVHlwZUluZm8gY29tcHV0ZU5vVHlwZUdGVChUb2tlbiBiZWZvcmVTdGFydCwgYm9vbCByZXF1aXJlZCkgewogICAgYXNzZXJ0KG9wdGlvbmFsKCdGdW5jdGlvbicsIHN0YXJ0KSk7CiAgICBhc3NlcnQoYmVmb3JlU3RhcnQubmV4dCA9PSBzdGFydCk7CgogICAgY29tcHV0ZVJlc3QoYmVmb3JlU3RhcnQsIHJlcXVpcmVkKTsKICAgIGlmIChnZnRIYXNSZXR1cm5UeXBlID09IG51bGwpIHsKICAgICAgcmV0dXJuIHJlcXVpcmVkID8gc2ltcGxlVHlwZSA6IG5vVHlwZTsKICAgIH0KICAgIGFzc2VydChlbmQgIT0gbnVsbCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8vLyBHaXZlbiB2b2lkIGBGdW5jdGlvbmAgbm9uLWlkZW50aWZpZXIsIGNvbXB1dGUgdGhlIHR5cGUKICAvLy8gYW5kIHJldHVybiB0aGUgcmVjZWl2ZXIgb3Igb25lIG9mIHRoZSBbVHlwZUluZm9dIGNvbnN0YW50cy4KICBUeXBlSW5mbyBjb21wdXRlVm9pZEdGVChib29sIHJlcXVpcmVkKSB7CiAgICBhc3NlcnQob3B0aW9uYWwoJ3ZvaWQnLCBzdGFydCkpOwogICAgYXNzZXJ0KG9wdGlvbmFsKCdGdW5jdGlvbicsIHN0YXJ0Lm5leHQpKTsKCiAgICBjb21wdXRlUmVzdChzdGFydCwgcmVxdWlyZWQpOwogICAgaWYgKGdmdEhhc1JldHVyblR5cGUgPT0gbnVsbCkgewogICAgICByZXR1cm4gdm9pZFR5cGU7CiAgICB9CiAgICBhc3NlcnQoZW5kICE9IG51bGwpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvLy8gR2l2ZW4gaWRlbnRpZmllciBgRnVuY3Rpb25gIG5vbi1pZGVudGlmaWVyLCBjb21wdXRlIHRoZSB0eXBlCiAgLy8vIGFuZCByZXR1cm4gdGhlIHJlY2VpdmVyIG9yIG9uZSBvZiB0aGUgW1R5cGVJbmZvXSBjb25zdGFudHMuCiAgVHlwZUluZm8gY29tcHV0ZUlkZW50aWZpZXJHRlQoYm9vbCByZXF1aXJlZCkgewogICAgYXNzZXJ0KGlzVmFsaWRUeXBlUmVmZXJlbmNlKHN0YXJ0KSk7CiAgICBhc3NlcnQob3B0aW9uYWwoJ0Z1bmN0aW9uJywgc3RhcnQubmV4dCkpOwoKICAgIGNvbXB1dGVSZXN0KHN0YXJ0LCByZXF1aXJlZCk7CiAgICBpZiAoZ2Z0SGFzUmV0dXJuVHlwZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBzaW1wbGVUeXBlOwogICAgfQogICAgYXNzZXJ0KGVuZCAhPSBudWxsKTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLy8vIEdpdmVuIGlkZW50aWZpZXIgYD9gIGBGdW5jdGlvbmAgbm9uLWlkZW50aWZpZXIsIGNvbXB1dGUgdGhlIHR5cGUKICAvLy8gYW5kIHJldHVybiB0aGUgcmVjZWl2ZXIgb3Igb25lIG9mIHRoZSBbVHlwZUluZm9dIGNvbnN0YW50cy4KICBUeXBlSW5mbyBjb21wdXRlSWRlbnRpZmllclF1ZXN0aW9uR0ZUKGJvb2wgcmVxdWlyZWQpIHsKICAgIGFzc2VydChpc1ZhbGlkVHlwZVJlZmVyZW5jZShzdGFydCkpOwogICAgYXNzZXJ0KG9wdGlvbmFsKCc/Jywgc3RhcnQubmV4dCkpOwogICAgYXNzZXJ0KG9wdGlvbmFsKCdGdW5jdGlvbicsIHN0YXJ0Lm5leHQubmV4dCkpOwoKICAgIGNvbXB1dGVSZXN0KHN0YXJ0LCByZXF1aXJlZCk7CiAgICBpZiAoZ2Z0SGFzUmV0dXJuVHlwZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBzaW1wbGVOdWxsYWJsZVR5cGU7CiAgICB9CiAgICBhc3NlcnQoZW5kICE9IG51bGwpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvLy8gR2l2ZW4gYSBidWlsdGluLCByZXR1cm4gdGhlIHJlY2VpdmVyIHNvIHRoYXQgcGFyc2VUeXBlIHdpbGwgcmVwb3J0CiAgLy8vIGFuIGVycm9yIGZvciB0aGUgYnVpbHRpbiB1c2VkIGFzIGEgdHlwZS4KICBUeXBlSW5mbyBjb21wdXRlQnVpbHRpbk9yVmFyQXNUeXBlKGJvb2wgcmVxdWlyZWQpIHsKICAgIGFzc2VydChzdGFydC50eXBlLmlzQnVpbHRJbiB8fCBvcHRpb25hbCgndmFyJywgc3RhcnQpKTsKCiAgICBlbmQgPSB0eXBlQXJndW1lbnRzLnNraXAoc3RhcnQpOwogICAgY29tcHV0ZVJlc3QoZW5kLCByZXF1aXJlZCk7CiAgICBhc3NlcnQoZW5kICE9IG51bGwpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvLy8gR2l2ZW4gaWRlbnRpZmllciBgPGAgLi4uIGA+YCwgY29tcHV0ZSB0aGUgdHlwZQogIC8vLyBhbmQgcmV0dXJuIHRoZSByZWNlaXZlciBvciBvbmUgb2YgdGhlIFtUeXBlSW5mb10gY29uc3RhbnRzLgogIFR5cGVJbmZvIGNvbXB1dGVTaW1wbGVXaXRoVHlwZUFyZ3VtZW50cyhib29sIHJlcXVpcmVkKSB7CiAgICBhc3NlcnQoaXNWYWxpZFR5cGVSZWZlcmVuY2Uoc3RhcnQpKTsKICAgIGFzc2VydChvcHRpb25hbCgnPCcsIHN0YXJ0Lm5leHQpKTsKICAgIGFzc2VydCh0eXBlQXJndW1lbnRzICE9IG5vVHlwZVBhcmFtT3JBcmcpOwoKICAgIGVuZCA9IHR5cGVBcmd1bWVudHMuc2tpcChzdGFydCk7CiAgICBjb21wdXRlUmVzdChlbmQsIHJlcXVpcmVkKTsKCiAgICBpZiAoIXJlcXVpcmVkICYmICFsb29rc0xpa2VOYW1lKGVuZC5uZXh0KSAmJiBnZnRIYXNSZXR1cm5UeXBlID09IG51bGwpIHsKICAgICAgcmV0dXJuIG5vVHlwZTsKICAgIH0KICAgIGFzc2VydChlbmQgIT0gbnVsbCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8vLyBHaXZlbiBpZGVudGlmaWVyIGAuYCBpZGVudGlmaWVyIChvciBgLmAgaWRlbnRpZmllciBvciBpZGVudGlmaWVyIGAuYAogIC8vLyBmb3IgcmVjb3ZlcnkpLCBjb21wdXRlIHRoZSB0eXBlIGFuZCByZXR1cm4gdGhlIHJlY2VpdmVyIG9yIG9uZSBvZiB0aGUKICAvLy8gW1R5cGVJbmZvXSBjb25zdGFudHMuCiAgVHlwZUluZm8gY29tcHV0ZVByZWZpeGVkVHlwZShib29sIHJlcXVpcmVkKSB7CiAgICBUb2tlbiB0b2tlbiA9IHN0YXJ0OwogICAgaWYgKCFvcHRpb25hbCgnLicsIHRva2VuKSkgewogICAgICBhc3NlcnQodG9rZW4uaXNLZXl3b3JkT3JJZGVudGlmaWVyKTsKICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgfQogICAgYXNzZXJ0KG9wdGlvbmFsKCcuJywgdG9rZW4pKTsKICAgIGlmICh0b2tlbi5uZXh0LmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICB9CgogICAgZW5kID0gdHlwZUFyZ3VtZW50cy5za2lwKHRva2VuKTsKICAgIGNvbXB1dGVSZXN0KGVuZCwgcmVxdWlyZWQpOwogICAgaWYgKCFyZXF1aXJlZCAmJiAhbG9va3NMaWtlTmFtZShlbmQubmV4dCkgJiYgZ2Z0SGFzUmV0dXJuVHlwZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBub1R5cGU7CiAgICB9CiAgICBhc3NlcnQoZW5kICE9IG51bGwpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICB2b2lkIGNvbXB1dGVSZXN0KFRva2VuIHRva2VuLCBib29sIHJlcXVpcmVkKSB7CiAgICBpZiAob3B0aW9uYWwoJz8nLCB0b2tlbi5uZXh0KSkgewogICAgICBiZWZvcmVRdWVzdGlvbk1hcmsgPSB0b2tlbjsKICAgICAgZW5kID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgfQogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgd2hpbGUgKG9wdGlvbmFsKCdGdW5jdGlvbicsIHRva2VuKSkgewogICAgICBUb2tlbiB0eXBlVmFyaWFibGVTdGFydCA9IHRva2VuOwogICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogQ29uc2lkZXIgY2FjaGluZyBUeXBlUGFyYW1PckFyZ0luZm8KICAgICAgdG9rZW4gPSBjb21wdXRlVHlwZVBhcmFtT3JBcmcodG9rZW4sIHRydWUpLnNraXAodG9rZW4pOwogICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICAgIGlmICghb3B0aW9uYWwoJygnLCB0b2tlbikpIHsKICAgICAgICBicmVhazsgLy8gTm90IGEgZnVuY3Rpb24gdHlwZS4KICAgICAgfQogICAgICB0b2tlbiA9IHRva2VuLmVuZEdyb3VwOwogICAgICBpZiAodG9rZW4gPT0gbnVsbCkgewogICAgICAgIGJyZWFrOyAvLyBOb3QgYSBmdW5jdGlvbiB0eXBlLgogICAgICB9CiAgICAgIGlmICghcmVxdWlyZWQpIHsKICAgICAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICBpZiAob3B0aW9uYWwoJz8nLCBuZXh0KSkgewogICAgICAgICAgbmV4dCA9IG5leHQubmV4dDsKICAgICAgICB9CiAgICAgICAgaWYgKCEobmV4dC5pc0lkZW50aWZpZXIgfHwgb3B0aW9uYWwoJ3RoaXMnLCBuZXh0KSkpIHsKICAgICAgICAgIGJyZWFrOyAvLyBgRnVuY3Rpb25gIHVzZWQgYXMgdGhlIG5hbWUgaW4gYSBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KICAgICAgICB9CiAgICAgIH0KICAgICAgYXNzZXJ0KG9wdGlvbmFsKCcpJywgdG9rZW4pKTsKICAgICAgZ2Z0SGFzUmV0dXJuVHlwZSA/Pz0gdHlwZVZhcmlhYmxlU3RhcnQgIT0gc3RhcnQ7CiAgICAgIHR5cGVWYXJpYWJsZVN0YXJ0ZXJzID0gdHlwZVZhcmlhYmxlU3RhcnRlcnMucHJlcGVuZCh0eXBlVmFyaWFibGVTdGFydCk7CgogICAgICBiZWZvcmVRdWVzdGlvbk1hcmsgPSBudWxsOwogICAgICBlbmQgPSB0b2tlbjsKICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwoKICAgICAgaWYgKG9wdGlvbmFsKCc/JywgdG9rZW4pKSB7CiAgICAgICAgYmVmb3JlUXVlc3Rpb25NYXJrID0gZW5kOwogICAgICAgIGVuZCA9IHRva2VuOwogICAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgfQogICAgfQogIH0KfQoKLy8vIFNlZSBbbm9UeXBlUGFyYW1PckFyZ10uCmNsYXNzIE5vVHlwZVBhcmFtT3JBcmcgZXh0ZW5kcyBUeXBlUGFyYW1PckFyZ0luZm8gewogIGNvbnN0IE5vVHlwZVBhcmFtT3JBcmcoKTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCB0eXBlQXJndW1lbnRDb3VudCA9PiAwOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZUFyZ3VtZW50cyhUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgcGFyc2VyLmxpc3RlbmVyLmhhbmRsZU5vVHlwZUFyZ3VtZW50cyh0b2tlbi5uZXh0KTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlVmFyaWFibGVzKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBwYXJzZXIubGlzdGVuZXIuaGFuZGxlTm9UeXBlVmFyaWFibGVzKHRva2VuLm5leHQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgQG92ZXJyaWRlCiAgVG9rZW4gc2tpcChUb2tlbiB0b2tlbikgPT4gdG9rZW47Cn0KCmNsYXNzIFNpbXBsZVR5cGVBcmd1bWVudDEgZXh0ZW5kcyBUeXBlUGFyYW1PckFyZ0luZm8gewogIGNvbnN0IFNpbXBsZVR5cGVBcmd1bWVudDEoKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTaW1wbGVUeXBlQXJndW1lbnQgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCB0eXBlQXJndW1lbnRDb3VudCA9PiAxOwoKICBAb3ZlcnJpZGUKICBUeXBlSW5mbyBnZXQgdHlwZUluZm8gPT4gc2ltcGxlVHlwZVdpdGgxQXJndW1lbnQ7CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlQXJndW1lbnRzKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBiZWdpbkdyb3VwID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnPCcsIGJlZ2luR3JvdXApKTsKICAgIFRva2VuIGVuZEdyb3VwID0gcGFyc2VFbmRHcm91cChiZWdpbkdyb3VwLCBiZWdpbkdyb3VwLm5leHQpOwogICAgTGlzdGVuZXIgbGlzdGVuZXIgPSBwYXJzZXIubGlzdGVuZXI7CiAgICBsaXN0ZW5lci5iZWdpblR5cGVBcmd1bWVudHMoYmVnaW5Hcm91cCk7CiAgICBzaW1wbGVUeXBlLnBhcnNlVHlwZShiZWdpbkdyb3VwLCBwYXJzZXIpOwogICAgcGFyc2VyLmxpc3RlbmVyLmVuZFR5cGVBcmd1bWVudHMoMSwgYmVnaW5Hcm91cCwgZW5kR3JvdXApOwogICAgcmV0dXJuIGVuZEdyb3VwOwogIH0KCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2VWYXJpYWJsZXMoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIGJlZ2luR3JvdXAgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCc8JywgYmVnaW5Hcm91cCkpOwogICAgdG9rZW4gPSBiZWdpbkdyb3VwLm5leHQ7CiAgICBUb2tlbiBlbmRHcm91cCA9IHBhcnNlRW5kR3JvdXAoYmVnaW5Hcm91cCwgdG9rZW4pOwogICAgTGlzdGVuZXIgbGlzdGVuZXIgPSBwYXJzZXIubGlzdGVuZXI7CiAgICBsaXN0ZW5lci5iZWdpblR5cGVWYXJpYWJsZXMoYmVnaW5Hcm91cCk7CiAgICBsaXN0ZW5lci5iZWdpbk1ldGFkYXRhU3Rhcih0b2tlbik7CiAgICBsaXN0ZW5lci5lbmRNZXRhZGF0YVN0YXIoMCk7CiAgICBsaXN0ZW5lci5oYW5kbGVJZGVudGlmaWVyKHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC50eXBlVmFyaWFibGVEZWNsYXJhdGlvbik7CiAgICBsaXN0ZW5lci5iZWdpblR5cGVWYXJpYWJsZSh0b2tlbik7CiAgICBsaXN0ZW5lci5oYW5kbGVUeXBlVmFyaWFibGVzRGVmaW5lZCh0b2tlbiwgMSk7CiAgICBsaXN0ZW5lci5oYW5kbGVOb1R5cGUodG9rZW4pOwogICAgbGlzdGVuZXIuZW5kVHlwZVZhcmlhYmxlKGVuZEdyb3VwLCAwLCBudWxsKTsKICAgIGxpc3RlbmVyLmVuZFR5cGVWYXJpYWJsZXMoYmVnaW5Hcm91cCwgZW5kR3JvdXApOwogICAgcmV0dXJuIGVuZEdyb3VwOwogIH0KCiAgQG92ZXJyaWRlCiAgVG9rZW4gc2tpcChUb2tlbiB0b2tlbikgewogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCc8JywgdG9rZW4pKTsKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydCh0b2tlbi5pc0tleXdvcmRPcklkZW50aWZpZXIpOwogICAgcmV0dXJuIHNraXBFbmRHcm91cCh0b2tlbik7CiAgfQoKICBUb2tlbiBza2lwRW5kR3JvdXAoVG9rZW4gdG9rZW4pIHsKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnPicsIHRva2VuKSk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZUVuZEdyb3VwKFRva2VuIGJlZ2luR3JvdXAsIFRva2VuIHRva2VuKSB7CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJz4nLCB0b2tlbikpOwogICAgcmV0dXJuIHRva2VuOwogIH0KfQoKY2xhc3MgU2ltcGxlVHlwZUFyZ3VtZW50MUd0RXEgZXh0ZW5kcyBTaW1wbGVUeXBlQXJndW1lbnQxIHsKICBjb25zdCBTaW1wbGVUeXBlQXJndW1lbnQxR3RFcSgpOwoKICBAb3ZlcnJpZGUKICBUeXBlSW5mbyBnZXQgdHlwZUluZm8gPT4gc2ltcGxlVHlwZVdpdGgxQXJndW1lbnRHdEVxOwoKICBUb2tlbiBza2lwRW5kR3JvdXAoVG9rZW4gdG9rZW4pIHsKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnPj0nLCB0b2tlbikpOwogICAgcmV0dXJuIHNwbGl0R3RFcSh0b2tlbik7CiAgfQoKICBUb2tlbiBwYXJzZUVuZEdyb3VwKFRva2VuIGJlZ2luR3JvdXAsIFRva2VuIGJlZm9yZUVuZEdyb3VwKSB7CiAgICBUb2tlbiBlbmRHcm91cCA9IGJlZm9yZUVuZEdyb3VwLm5leHQ7CiAgICBpZiAoIW9wdGlvbmFsKCc+JywgZW5kR3JvdXApKSB7CiAgICAgIGVuZEdyb3VwID0gc3BsaXRHdEVxKGVuZEdyb3VwKTsKICAgICAgZW5kR3JvdXAubmV4dC5zZXROZXh0KGVuZEdyb3VwLm5leHQubmV4dCk7CiAgICB9CiAgICBiZWZvcmVFbmRHcm91cC5zZXROZXh0KGVuZEdyb3VwKTsKICAgIHJldHVybiBlbmRHcm91cDsKICB9Cn0KCmNsYXNzIFNpbXBsZVR5cGVBcmd1bWVudDFHdEd0IGV4dGVuZHMgU2ltcGxlVHlwZUFyZ3VtZW50MSB7CiAgY29uc3QgU2ltcGxlVHlwZUFyZ3VtZW50MUd0R3QoKTsKCiAgQG92ZXJyaWRlCiAgVHlwZUluZm8gZ2V0IHR5cGVJbmZvID0+IHNpbXBsZVR5cGVXaXRoMUFyZ3VtZW50R3RHdDsKCiAgVG9rZW4gc2tpcEVuZEdyb3VwKFRva2VuIHRva2VuKSB7CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJz4+JywgdG9rZW4pKTsKICAgIHJldHVybiBzcGxpdEd0R3QodG9rZW4pOwogIH0KCiAgVG9rZW4gcGFyc2VFbmRHcm91cChUb2tlbiBiZWdpbkdyb3VwLCBUb2tlbiBiZWZvcmVFbmRHcm91cCkgewogICAgVG9rZW4gZW5kR3JvdXAgPSBiZWZvcmVFbmRHcm91cC5uZXh0OwogICAgaWYgKCFvcHRpb25hbCgnPicsIGVuZEdyb3VwKSkgewogICAgICBlbmRHcm91cCA9IHNwbGl0R3RHdChlbmRHcm91cCk7CiAgICAgIGVuZEdyb3VwLm5leHQuc2V0TmV4dChlbmRHcm91cC5uZXh0Lm5leHQpOwogICAgfQogICAgYmVmb3JlRW5kR3JvdXAuc2V0TmV4dChlbmRHcm91cCk7CiAgICByZXR1cm4gZW5kR3JvdXA7CiAgfQp9CgpjbGFzcyBDb21wbGV4VHlwZVBhcmFtT3JBcmdJbmZvIGV4dGVuZHMgVHlwZVBhcmFtT3JBcmdJbmZvIHsKICAvLy8gVGhlIGZpcnN0IHRva2VuIGluIHRoZSB0eXBlIHZhci4KICBmaW5hbCBUb2tlbiBzdGFydDsKCiAgLy8vIElmIFtpbkRlY2xhcmF0aW9uXSBpcyBgdHJ1ZWAsIHRoZW4gdGhpcyB3aWxsIG1vcmUgYWdncmVzc2l2ZWx5IHJlY292ZXIKICAvLy8gZ2l2ZW4gdW5iYWxhbmNlZCBgPGAgYD5gIGFuZCBpbnZhbGlkIHBhcmFtZXRlcnMgb3IgYXJndW1lbnRzLgogIGZpbmFsIGJvb2wgaW5EZWNsYXJhdGlvbjsKCiAgQG92ZXJyaWRlCiAgaW50IHR5cGVBcmd1bWVudENvdW50OwoKICAvLy8gVGhlIGA+YCB0b2tlbiB3aGljaCBlbmRzIHRoZSB0eXBlIHBhcmFtZXRlciBvciBhcmd1bWVudC4KICAvLy8gVGhpcyBjbG9zZXIgbWF5IGJlIHN5bnRoZXRpYywgcG9pbnRzIHRvIHRoZSBuZXh0IHRva2VuIGluIHRoZSBzdHJlYW0sCiAgLy8vIGlzIG9ubHkgdXNlZCB3aGVuIHNraXBwaW5nIG92ZXIgdGhlIHR5cGUgcGFyYW1ldGVycyBvciBhcmd1bWVudHMsCiAgLy8vIGFuZCBtYXkgbm90IGJlIHBhcnQgb2YgdGhlIHRva2VuIHN0cmVhbS4KICBUb2tlbiBza2lwRW5kOwoKICBDb21wbGV4VHlwZVBhcmFtT3JBcmdJbmZvKFRva2VuIHRva2VuLCB0aGlzLmluRGVjbGFyYXRpb24pCiAgICAgIDogYXNzZXJ0KG9wdGlvbmFsKCc8JywgdG9rZW4ubmV4dCkpLAogICAgICAgIGFzc2VydChpbkRlY2xhcmF0aW9uICE9IG51bGwpLAogICAgICAgIHN0YXJ0ID0gdG9rZW4ubmV4dDsKCiAgLy8vIFBhcnNlIHRoZSB0b2tlbnMgYW5kIHJldHVybiB0aGUgcmVjZWl2ZXIgb3IgW25vVHlwZVBhcmFtT3JBcmddIGlmIHRoZXJlCiAgLy8vIGFyZSBubyB0eXBlIHBhcmFtZXRlcnMgb3IgYXJndW1lbnRzLiBUaGlzIGRvZXMgbm90IG1vZGlmeSB0aGUgdG9rZW4KICAvLy8gc3RyZWFtLgogIFR5cGVQYXJhbU9yQXJnSW5mbyBjb21wdXRlKCkgewogICAgVG9rZW4gdG9rZW47CiAgICBUb2tlbiBuZXh0ID0gc3RhcnQ7CiAgICB0eXBlQXJndW1lbnRDb3VudCA9IDA7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IGNvbXB1dGVUeXBlKG5leHQsIHRydWUsIGluRGVjbGFyYXRpb24pOwogICAgICBpZiAodHlwZUluZm8gPT0gbm9UeXBlKSB7CiAgICAgICAgd2hpbGUgKHR5cGVJbmZvID09IG5vVHlwZSAmJiBvcHRpb25hbCgnQCcsIG5leHQubmV4dCkpIHsKICAgICAgICAgIG5leHQgPSBza2lwTWV0YWRhdGEobmV4dCk7CiAgICAgICAgICB0eXBlSW5mbyA9IGNvbXB1dGVUeXBlKG5leHQsIHRydWUsIGluRGVjbGFyYXRpb24pOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZUluZm8gPT0gbm9UeXBlKSB7CiAgICAgICAgICBpZiAobmV4dCA9PSBzdGFydCAmJiAhaW5EZWNsYXJhdGlvbiAmJiAhaXNDbG9zZXIobmV4dC5uZXh0KSkgewogICAgICAgICAgICByZXR1cm4gbm9UeXBlUGFyYW1PckFyZzsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghb3B0aW9uYWwoJywnLCBuZXh0Lm5leHQpKSB7CiAgICAgICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhc3NlcnQodHlwZUluZm8gIT0gbm9UeXBlIHx8IG9wdGlvbmFsKCcsJywgbmV4dC5uZXh0KSk7CiAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIHByb2Nlc3MgdHlwZSAoaWYgYW55KSBhbmQgY29uc3VtZSBgLGAKICAgICAgfQogICAgICArK3R5cGVBcmd1bWVudENvdW50OwogICAgICB0b2tlbiA9IHR5cGVJbmZvLnNraXBUeXBlKG5leHQpOwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKG9wdGlvbmFsKCdleHRlbmRzJywgbmV4dCkpIHsKICAgICAgICB0b2tlbiA9IGNvbXB1dGVUeXBlKG5leHQsIHRydWUsIGluRGVjbGFyYXRpb24pLnNraXBUeXBlKG5leHQpOwogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICB9CiAgICAgIGlmICghb3B0aW9uYWwoJywnLCBuZXh0KSkgewogICAgICAgIHNraXBFbmQgPSBzcGxpdENsb3NlcihuZXh0KTsKICAgICAgICBpZiAoc2tpcEVuZCAhPSBudWxsKSB7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgICAgaWYgKCFpbkRlY2xhcmF0aW9uKSB7CiAgICAgICAgICByZXR1cm4gbm9UeXBlUGFyYW1PckFyZzsKICAgICAgICB9CgogICAgICAgIC8vIFJlY292ZXJ5CiAgICAgICAgaWYgKCFsb29rc0xpa2VUeXBlUGFyYW1PckFyZyhpbkRlY2xhcmF0aW9uLCBuZXh0KSkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIC8vIExvb2tzIGxpa2UgbWlzc2luZyBjb21tYS4gQ29udGludWUgbG9vcGluZy4KICAgICAgICBuZXh0ID0gdG9rZW47CiAgICAgIH0KICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgc2tpcEVuZCA9IHNwbGl0Q2xvc2VyKG5leHQpOwogICAgaWYgKHNraXBFbmQgPT0gbnVsbCkgewogICAgICBpZiAob3B0aW9uYWwoJygnLCBuZXh0KSkgewogICAgICAgIHRva2VuID0gbmV4dC5lbmRHcm91cDsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgfQogICAgICBza2lwRW5kID0gc3BsaXRDbG9zZXIobmV4dCk7CiAgICAgIGlmIChza2lwRW5kID09IG51bGwpIHsKICAgICAgICBza2lwRW5kID0gc3BsaXRDbG9zZXIobmV4dC5uZXh0KTsKICAgICAgfQogICAgICBpZiAoc2tpcEVuZCA9PSBudWxsKSB7CiAgICAgICAgc2tpcEVuZCA9IHN5bnRoZXRpY0d0KG5leHQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdGhpczsKICB9CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlQXJndW1lbnRzKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBhc3NlcnQoaWRlbnRpY2FsKHRva2VuLm5leHQsIHN0YXJ0KSk7CiAgICBUb2tlbiBuZXh0ID0gc3RhcnQ7CiAgICBwYXJzZXIubGlzdGVuZXIuYmVnaW5UeXBlQXJndW1lbnRzKHN0YXJ0KTsKICAgIGludCBjb3VudCA9IDA7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IGNvbXB1dGVUeXBlKG5leHQsIHRydWUsIGluRGVjbGFyYXRpb24pOwogICAgICBpZiAodHlwZUluZm8gPT0gbm9UeXBlKSB7CiAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICB3aGlsZSAodHlwZUluZm8gPT0gbm9UeXBlICYmIG9wdGlvbmFsKCdAJywgbmV4dC5uZXh0KSkgewogICAgICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICAgICAgbmV4dC5uZXh0LCBmYXN0YS50ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbik7CiAgICAgICAgICBuZXh0ID0gc2tpcE1ldGFkYXRhKG5leHQpOwogICAgICAgICAgdHlwZUluZm8gPSBjb21wdXRlVHlwZShuZXh0LCB0cnVlLCBpbkRlY2xhcmF0aW9uKTsKICAgICAgICB9CiAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIHByb2Nlc3MgdHlwZSAoaWYgYW55KSBhbmQgY29uc3VtZSBgLGAKICAgICAgfQogICAgICB0b2tlbiA9IHR5cGVJbmZvLmVuc3VyZVR5cGVPclZvaWQobmV4dCwgcGFyc2VyKTsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICsrY291bnQ7CiAgICAgIGlmICghb3B0aW9uYWwoJywnLCBuZXh0KSkgewogICAgICAgIGlmIChwYXJzZUNsb3Nlcih0b2tlbikpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICBpZiAoIWxvb2tzTGlrZVR5cGVQYXJhbU9yQXJnKGluRGVjbGFyYXRpb24sIG5leHQpKSB7CiAgICAgICAgICB0b2tlbiA9IHBhcnNlVW5leHBlY3RlZEVuZCh0b2tlbiwgdHJ1ZSwgcGFyc2VyKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICAvLyBNaXNzaW5nIGNvbW1hLiBSZXBvcnQgZXJyb3IsIGluc2VydCBjb21tYSwgYW5kIGNvbnRpbnVlIGxvb3BpbmcuCiAgICAgICAgbmV4dCA9IHBhcnNlTWlzc2luZ0NvbW1hKHRva2VuLCBwYXJzZXIpOwogICAgICB9CiAgICB9CiAgICBUb2tlbiBlbmRHcm91cCA9IHRva2VuLm5leHQ7CiAgICBwYXJzZXIubGlzdGVuZXIuZW5kVHlwZUFyZ3VtZW50cyhjb3VudCwgc3RhcnQsIGVuZEdyb3VwKTsKICAgIHJldHVybiBlbmRHcm91cDsKICB9CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlVmFyaWFibGVzKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBhc3NlcnQoaWRlbnRpY2FsKHRva2VuLm5leHQsIHN0YXJ0KSk7CiAgICBUb2tlbiBuZXh0ID0gc3RhcnQ7CiAgICBMaXN0ZW5lciBsaXN0ZW5lciA9IHBhcnNlci5saXN0ZW5lcjsKICAgIGxpc3RlbmVyLmJlZ2luVHlwZVZhcmlhYmxlcyhzdGFydCk7CiAgICBpbnQgY291bnQgPSAwOwoKICAgIExpbms8VG9rZW4+IHR5cGVTdGFydHMgPSBjb25zdCBMaW5rPFRva2VuPigpOwogICAgTGluazxUeXBlSW5mbz4gc3VwZXJUeXBlSW5mb3MgPSBjb25zdCBMaW5rPFR5cGVJbmZvPigpOwoKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIHRva2VuID0gcGFyc2VyLnBhcnNlTWV0YWRhdGFTdGFyKG5leHQpOwogICAgICBuZXh0ID0gcGFyc2VyLmVuc3VyZUlkZW50aWZpZXIoCiAgICAgICAgICB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQudHlwZVZhcmlhYmxlRGVjbGFyYXRpb24pOwogICAgICB0b2tlbiA9IG5leHQ7CiAgICAgIGxpc3RlbmVyLmJlZ2luVHlwZVZhcmlhYmxlKHRva2VuKTsKICAgICAgdHlwZVN0YXJ0cyA9IHR5cGVTdGFydHMucHJlcGVuZCh0b2tlbik7CgogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKG9wdGlvbmFsKCdleHRlbmRzJywgbmV4dCkpIHsKICAgICAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IGNvbXB1dGVUeXBlKG5leHQsIHRydWUsIGluRGVjbGFyYXRpb24pOwogICAgICAgIHRva2VuID0gdHlwZUluZm8uc2tpcFR5cGUobmV4dCk7CiAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgc3VwZXJUeXBlSW5mb3MgPSBzdXBlclR5cGVJbmZvcy5wcmVwZW5kKHR5cGVJbmZvKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdXBlclR5cGVJbmZvcyA9IHN1cGVyVHlwZUluZm9zLnByZXBlbmQobnVsbCk7CiAgICAgIH0KCiAgICAgICsrY291bnQ7CiAgICAgIGlmICghb3B0aW9uYWwoJywnLCBuZXh0KSkgewogICAgICAgIGlmIChpc0Nsb3Nlcih0b2tlbikpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICBpZiAoIWxvb2tzTGlrZVR5cGVQYXJhbU9yQXJnKGluRGVjbGFyYXRpb24sIG5leHQpKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgLy8gTWlzc2luZyBjb21tYS4gUmVwb3J0IGVycm9yLCBpbnNlcnQgY29tbWEsIGFuZCBjb250aW51ZSBsb29waW5nLgogICAgICAgIG5leHQgPSBwYXJzZU1pc3NpbmdDb21tYSh0b2tlbiwgcGFyc2VyKTsKICAgICAgfQogICAgfQoKICAgIGFzc2VydChjb3VudCA+IDApOwogICAgYXNzZXJ0KHR5cGVTdGFydHMuc2xvd0xlbmd0aCgpID09IGNvdW50KTsKICAgIGFzc2VydChzdXBlclR5cGVJbmZvcy5zbG93TGVuZ3RoKCkgPT0gY291bnQpOwogICAgbGlzdGVuZXIuaGFuZGxlVHlwZVZhcmlhYmxlc0RlZmluZWQodG9rZW4sIGNvdW50KTsKCiAgICB0b2tlbiA9IG51bGw7CiAgICB3aGlsZSAodHlwZVN0YXJ0cy5pc05vdEVtcHR5KSB7CiAgICAgIFRva2VuIHRva2VuMiA9IHR5cGVTdGFydHMuaGVhZDsKICAgICAgVHlwZUluZm8gdHlwZUluZm8gPSBzdXBlclR5cGVJbmZvcy5oZWFkOwoKICAgICAgVG9rZW4gZXh0ZW5kc09yU3VwZXIgPSBudWxsOwogICAgICBUb2tlbiBuZXh0MiA9IHRva2VuMi5uZXh0OwogICAgICBpZiAodHlwZUluZm8gIT0gbnVsbCkgewogICAgICAgIGFzc2VydChvcHRpb25hbCgnZXh0ZW5kcycsIG5leHQyKSk7CiAgICAgICAgZXh0ZW5kc09yU3VwZXIgPSBuZXh0MjsKICAgICAgICB0b2tlbjIgPSB0eXBlSW5mby5lbnN1cmVUeXBlTm90Vm9pZChuZXh0MiwgcGFyc2VyKTsKICAgICAgICBuZXh0MiA9IHRva2VuMi5uZXh0OwogICAgICB9IGVsc2UgewogICAgICAgIGFzc2VydCghb3B0aW9uYWwoJ2V4dGVuZHMnLCBuZXh0MikpOwogICAgICAgIGxpc3RlbmVyLmhhbmRsZU5vVHlwZSh0b2tlbjIpOwogICAgICB9CiAgICAgIC8vIFR5cGUgdmFyaWFibGVzIGFyZSAiY29tcGxldGVkIiBpbiByZXZlcnNlIG9yZGVyLCBzbyBjYXB0dXJlIHRoZSBsYXN0CiAgICAgIC8vIGNvbnN1bWVkIHRva2VuIGZyb20gdGhlIGZpcnN0ICJjb21wbGV0ZWQiIHR5cGUgdmFyaWFibGUuCiAgICAgIHRva2VuID8/PSB0b2tlbjI7CiAgICAgIGxpc3RlbmVyLmVuZFR5cGVWYXJpYWJsZShuZXh0MiwgLS1jb3VudCwgZXh0ZW5kc09yU3VwZXIpOwoKICAgICAgdHlwZVN0YXJ0cyA9IHR5cGVTdGFydHMudGFpbDsKICAgICAgc3VwZXJUeXBlSW5mb3MgPSBzdXBlclR5cGVJbmZvcy50YWlsOwogICAgfQoKICAgIGlmICghcGFyc2VDbG9zZXIodG9rZW4pKSB7CiAgICAgIHRva2VuID0gcGFyc2VVbmV4cGVjdGVkRW5kKHRva2VuLCBmYWxzZSwgcGFyc2VyKTsKICAgIH0KICAgIFRva2VuIGVuZEdyb3VwID0gdG9rZW4ubmV4dDsKICAgIGxpc3RlbmVyLmVuZFR5cGVWYXJpYWJsZXMoc3RhcnQsIGVuZEdyb3VwKTsKICAgIHJldHVybiBlbmRHcm91cDsKICB9CgogIFRva2VuIHBhcnNlTWlzc2luZ0NvbW1hKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgIG5leHQsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRCdXRHb3Qud2l0aEFyZ3VtZW50cygnLCcpKTsKICAgIHJldHVybiBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0VG9rZW4oCiAgICAgICAgdG9rZW4sIG5ldyBTeW50aGV0aWNUb2tlbihUb2tlblR5cGUuQ09NTUEsIG5leHQuY2hhck9mZnNldCkpOwogIH0KCiAgVG9rZW4gcGFyc2VVbmV4cGVjdGVkRW5kKFRva2VuIHRva2VuLCBib29sIGlzQXJndW1lbnRzLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGJvb2wgZXJyb3JSZXBvcnRlZCA9IHRva2VuLmlzU3ludGhldGljIHx8IChuZXh0LmlzU3ludGhldGljICYmICFuZXh0LmlzRW9mKTsKCiAgICBib29sIHR5cGVGb2xsb3dzRXh0ZW5kcyA9IGZhbHNlOwogICAgaWYgKG9wdGlvbmFsKCdleHRlbmRzJywgbmV4dCkpIHsKICAgICAgaWYgKCFlcnJvclJlcG9ydGVkKSB7CiAgICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgIHRva2VuLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQWZ0ZXJCdXRHb3Qud2l0aEFyZ3VtZW50cygnPicpKTsKICAgICAgICBlcnJvclJlcG9ydGVkID0gdHJ1ZTsKICAgICAgfQogICAgICB0b2tlbiA9IG5leHQ7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICB0eXBlRm9sbG93c0V4dGVuZHMgPSBpc1ZhbGlkVHlwZVJlZmVyZW5jZShuZXh0KTsKCiAgICAgIGlmIChwYXJzZUNsb3Nlcih0b2tlbikpIHsKICAgICAgICByZXR1cm4gdG9rZW47CiAgICAgIH0KICAgIH0KCiAgICBpZiAodHlwZUZvbGxvd3NFeHRlbmRzIHx8CiAgICAgICAgb3B0aW9uYWwoJ2R5bmFtaWMnLCBuZXh0KSB8fAogICAgICAgIG9wdGlvbmFsKCd2b2lkJywgbmV4dCkgfHwKICAgICAgICBvcHRpb25hbCgnRnVuY3Rpb24nLCBuZXh0KSkgewogICAgICBUeXBlSW5mbyBpbnZhbGlkVHlwZSA9IGNvbXB1dGVUeXBlKHRva2VuLCB0cnVlKTsKICAgICAgaWYgKGludmFsaWRUeXBlICE9IG5vVHlwZSkgewogICAgICAgIGlmICghZXJyb3JSZXBvcnRlZCkgewogICAgICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgdG9rZW4sIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRBZnRlckJ1dEdvdC53aXRoQXJndW1lbnRzKCc+JykpOwogICAgICAgICAgZXJyb3JSZXBvcnRlZCA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBQYXJzZSB0aGUgdHlwZSBzbyB0aGF0IHRoZSB0b2tlbiBzdHJlYW0gaXMgcHJvcGVybHkgbW9kaWZpZWQsCiAgICAgICAgLy8gYnV0IGVuc3VyZSB0aGF0IHBhcnNlciBldmVudHMgYXJlIGlnbm9yZWQgYnkgcmVwbGFjaW5nIHRoZSBsaXN0ZW5lci4KICAgICAgICBmaW5hbCBMaXN0ZW5lciBvcmlnaW5hbExpc3RlbmVyID0gcGFyc2VyLmxpc3RlbmVyOwogICAgICAgIHBhcnNlci5saXN0ZW5lciA9IG5ldyBGb3J3YXJkaW5nTGlzdGVuZXIoKTsKICAgICAgICB0b2tlbiA9IGludmFsaWRUeXBlLnBhcnNlVHlwZSh0b2tlbiwgcGFyc2VyKTsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICBwYXJzZXIubGlzdGVuZXIgPSBvcmlnaW5hbExpc3RlbmVyOwoKICAgICAgICBpZiAocGFyc2VDbG9zZXIodG9rZW4pKSB7CiAgICAgICAgICByZXR1cm4gdG9rZW47CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgVHlwZVBhcmFtT3JBcmdJbmZvIGludmFsaWRUeXBlVmFyID0KICAgICAgICBjb21wdXRlVHlwZVBhcmFtT3JBcmcodG9rZW4sIGluRGVjbGFyYXRpb24pOwogICAgaWYgKGludmFsaWRUeXBlVmFyICE9IG5vVHlwZVBhcmFtT3JBcmcpIHsKICAgICAgaWYgKCFlcnJvclJlcG9ydGVkKSB7CiAgICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgIHRva2VuLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQWZ0ZXJCdXRHb3Qud2l0aEFyZ3VtZW50cygnPicpKTsKICAgICAgICBlcnJvclJlcG9ydGVkID0gdHJ1ZTsKICAgICAgfQoKICAgICAgLy8gUGFyc2UgdGhlIHR5cGUgc28gdGhhdCB0aGUgdG9rZW4gc3RyZWFtIGlzIHByb3Blcmx5IG1vZGlmaWVkLAogICAgICAvLyBidXQgZW5zdXJlIHRoYXQgcGFyc2VyIGV2ZW50cyBhcmUgaWdub3JlZCBieSByZXBsYWNpbmcgdGhlIGxpc3RlbmVyLgogICAgICBmaW5hbCBMaXN0ZW5lciBvcmlnaW5hbExpc3RlbmVyID0gcGFyc2VyLmxpc3RlbmVyOwogICAgICBwYXJzZXIubGlzdGVuZXIgPSBuZXcgRm9yd2FyZGluZ0xpc3RlbmVyKCk7CiAgICAgIHRva2VuID0gaXNBcmd1bWVudHMKICAgICAgICAgID8gaW52YWxpZFR5cGVWYXIucGFyc2VBcmd1bWVudHModG9rZW4sIHBhcnNlcikKICAgICAgICAgIDogaW52YWxpZFR5cGVWYXIucGFyc2VWYXJpYWJsZXModG9rZW4sIHBhcnNlcik7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBwYXJzZXIubGlzdGVuZXIgPSBvcmlnaW5hbExpc3RlbmVyOwoKICAgICAgaWYgKHBhcnNlQ2xvc2VyKHRva2VuKSkgewogICAgICAgIHJldHVybiB0b2tlbjsKICAgICAgfQogICAgfQoKICAgIGlmIChvcHRpb25hbCgnKCcsIG5leHQpICYmIG5leHQuZW5kR3JvdXAgIT0gbnVsbCkgewogICAgICBpZiAoIWVycm9yUmVwb3J0ZWQpIHsKICAgICAgICAvLyBPbmx5IHJlcG9ydCBhbiBlcnJvciBpZiBvbmUgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcmVwb3J0ZWQuCiAgICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgIHRva2VuLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQWZ0ZXJCdXRHb3Qud2l0aEFyZ3VtZW50cygnPicpKTsKICAgICAgICBlcnJvclJlcG9ydGVkID0gdHJ1ZTsKICAgICAgfQogICAgICB0b2tlbiA9IG5leHQuZW5kR3JvdXA7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwoKICAgICAgaWYgKHBhcnNlQ2xvc2VyKHRva2VuKSkgewogICAgICAgIHJldHVybiB0b2tlbjsKICAgICAgfQogICAgfQoKICAgIGlmICghZXJyb3JSZXBvcnRlZCkgewogICAgICAvLyBPbmx5IHJlcG9ydCBhbiBlcnJvciBpZiBvbmUgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcmVwb3J0ZWQuCiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgdG9rZW4sIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRBZnRlckJ1dEdvdC53aXRoQXJndW1lbnRzKCc+JykpOwogICAgfQogICAgaWYgKHBhcnNlQ2xvc2VyKG5leHQpKSB7CiAgICAgIHJldHVybiBuZXh0OwogICAgfQogICAgVG9rZW4gZW5kR3JvdXAgPSBzdGFydC5lbmRHcm91cDsKICAgIGlmIChlbmRHcm91cCAhPSBudWxsKSB7CiAgICAgIHdoaWxlICh0b2tlbi5uZXh0ICE9IGVuZEdyb3VwICYmICF0b2tlbi5pc0VvZikgewogICAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZW5kR3JvdXAgPSBzeW50aGV0aWNHdChuZXh0KTsKICAgICAgZW5kR3JvdXAuc2V0TmV4dChuZXh0KTsKICAgICAgdG9rZW4uc2V0TmV4dChlbmRHcm91cCk7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBAb3ZlcnJpZGUKICBUb2tlbiBza2lwKFRva2VuIHRva2VuKSB7CiAgICBhc3NlcnQoc2tpcEVuZCAhPSBudWxsKTsKICAgIHJldHVybiBza2lwRW5kOwogIH0KfQoKLy8vIFJldHVybiBgdHJ1ZWAgaWYgW3Rva2VuXSBpcyBvbmUgb2YgYD5gLCBgPj5gLCBgPj4+YCwgYD49YCwgYD4+PWAsIG9yIGA+Pj49YC4KYm9vbCBpc0Nsb3NlcihUb2tlbiB0b2tlbikgewogIGZpbmFsIFN0cmluZyB2YWx1ZSA9IHRva2VuLnN0cmluZ1ZhbHVlOwogIHJldHVybiBpZGVudGljYWwodmFsdWUsICc+JykgfHwKICAgICAgaWRlbnRpY2FsKHZhbHVlLCAnPj4nKSB8fAogICAgICBpZGVudGljYWwodmFsdWUsICc+PScpIHx8CiAgICAgIGlkZW50aWNhbCh2YWx1ZSwgJz4+PicpIHx8CiAgICAgIGlkZW50aWNhbCh2YWx1ZSwgJz4+PScpIHx8CiAgICAgIGlkZW50aWNhbCh2YWx1ZSwgJz4+Pj0nKTsKfQoKLy8vIElmIFtiZWZvcmVDbG9zZXJdLm5leHQgaXMgb25lIG9mIGA+YCwgYD4+YCwgYD4+PmAsIGA+PWAsIGA+Pj1gLCBvciBgPj4+PWAKLy8vIHRoZW4gdXBkYXRlIHRoZSB0b2tlbiBzdHJlYW0gYW5kIHJldHVybiBgdHJ1ZWAuCmJvb2wgcGFyc2VDbG9zZXIoVG9rZW4gYmVmb3JlQ2xvc2VyKSB7CiAgVG9rZW4gdW5zcGxpdCA9IGJlZm9yZUNsb3Nlci5uZXh0OwogIFRva2VuIHNwbGl0ID0gc3BsaXRDbG9zZXIodW5zcGxpdCk7CiAgaWYgKHNwbGl0ID09IHVuc3BsaXQpIHsKICAgIHJldHVybiB0cnVlOwogIH0gZWxzZSBpZiAoc3BsaXQgPT0gbnVsbCkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBzcGxpdC5uZXh0LnNldE5leHQodW5zcGxpdC5uZXh0KTsKICBiZWZvcmVDbG9zZXIuc2V0TmV4dChzcGxpdCk7CiAgcmV0dXJuIHRydWU7Cn0KCi8vLyBJZiBbY2xvc2VyXSBpcyBgPmAgdGhlbiByZXR1cm4gaXQuCi8vLyBJZiBbY2xvc2VyXSBpcyBvbmUgb2YgYD4+YCwgYD4+PmAsIGA+PWAsIGA+Pj1gLCAgb3IgYD4+Pj1gIHRoZW4gc3BsaXQKLy8vIHRoZSB0b2tlbiBhbmQgcmV0dXJuIHRoZSBsZWFkaW5nIGA+YCB3aXRob3V0IHVwZGF0aW5nIHRoZSB0b2tlbiBzdHJlYW0uCi8vLyBJZiBbY2xvc2VyXSBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlbiByZXR1cm4gbnVsbDsKVG9rZW4gc3BsaXRDbG9zZXIoVG9rZW4gY2xvc2VyKSB7CiAgU3RyaW5nIHZhbHVlID0gY2xvc2VyLnN0cmluZ1ZhbHVlOwogIGlmIChpZGVudGljYWwodmFsdWUsICc+JykpIHsKICAgIHJldHVybiBjbG9zZXI7CiAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICc+PicpKSB7CiAgICByZXR1cm4gc3BsaXRHdEd0KGNsb3Nlcik7CiAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICc+PScpKSB7CiAgICByZXR1cm4gc3BsaXRHdEVxKGNsb3Nlcik7CiAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICc+Pj4nKSkgewogICAgcmV0dXJuIHNwbGl0R3RGcm9tR3RHdEd0KGNsb3Nlcik7CiAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICc+Pj0nKSkgewogICAgcmV0dXJuIHNwbGl0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X3N5c3RlbTsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2lvL2NvZGVfb3V0cHV0LmRhcnQnOwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIGFzIGpzQXN0OwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIHNob3cganM7CmltcG9ydCAnLi4vanNfYmFja2VuZC9maWVsZF9hbmFseXNpcy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19lbWl0dGVyL2NvZGVfZW1pdHRlcl90YXNrLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL3R5cGVfcmVjaXBlLmRhcnQnIHNob3cgVHlwZUV4cHJlc3Npb25SZWNpcGU7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICdmaWVsZF9hbmFseXNpcy5kYXJ0JyBzaG93IEpGaWVsZEFuYWx5c2lzOwppbXBvcnQgJ3J1bnRpbWVfdHlwZXMuZGFydCc7CmltcG9ydCAncnVudGltZV90eXBlc19uZXcuZGFydCcgc2hvdyBSZWNpcGVFbmNvZGVyOwppbXBvcnQgJ3J1bnRpbWVfdHlwZXNfcmVzb2x1dGlvbi5kYXJ0JzsKCnR5cGVkZWYganNBc3QuRXhwcmVzc2lvbiBfQ29uc3RhbnRSZWZlcmVuY2VHZW5lcmF0b3IoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCk7Cgp0eXBlZGVmIGpzQXN0LkV4cHJlc3Npb24gX0NvbnN0YW50TGlzdEdlbmVyYXRvcihqc0FzdC5FeHByZXNzaW9uIGFycmF5KTsKCi8vLyBWaXNpdG9yIHRoYXQgY3JlYXRlcyBbanNBc3QuRXhwcmVzc2lvbl1zIGZvciBjb25zdGFudHMgdGhhdCBhcmUgaW5saW5lZAovLy8gYW5kIHRoZXJlZm9yZSBjYW4gYmUgY3JlYXRlZCBkdXJpbmcgbW9kdWxhciBjb2RlIGdlbmVyYXRpb24uCmNsYXNzIE1vZHVsYXJDb25zdGFudEVtaXR0ZXIKICAgIGltcGxlbWVudHMgQ29uc3RhbnRWYWx1ZVZpc2l0b3I8anNBc3QuRXhwcmVzc2lvbiwgTnVsbD4gewogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBfb3B0aW9uczsKCiAgTW9kdWxhckNvbnN0YW50RW1pdHRlcih0aGlzLl9vcHRpb25zKTsKCiAgLy8vIENvbnN0cnVjdHMgYSBsaXRlcmFsIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gdGhlIGNvbnN0YW50LiBVc2VzIGEKICAvLy8gY2Fub25pY2FsIG5hbWUgdW5sZXNzIHRoZSBjb25zdGFudCBjYW4gYmUgZW1pdHRlZCBtdWx0aXBsZSB0aW1lcyAoYXMgZm9yCiAgLy8vIG51bWJlcnMgYW5kIHN0cmluZ3MpLgogIGpzQXN0LkV4cHJlc3Npb24gZ2VuZXJhdGUoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgewogICAgcmV0dXJuIF92aXNpdChjb25zdGFudCk7CiAgfQoKICBqc0FzdC5FeHByZXNzaW9uIF92aXNpdChDb25zdGFudFZhbHVlIGNvbnN0YW50KSB7CiAgICByZXR1cm4gY29uc3RhbnQuYWNjZXB0KHRoaXMsIG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdEZ1bmN0aW9uKEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICB0aHJvdyBmYWlsZWRBdChOT19MT0NBVElPTl9TUEFOTkFCTEUsCiAgICAgICAgIlRoZSBmdW5jdGlvbiBjb25zdGFudCBkb2VzIG5vdCBuZWVkIHNwZWNpZmljIEpTIGNvZGUuIik7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0TnVsbChOdWxsQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICByZXR1cm4gbmV3IGpzQXN0LkxpdGVyYWxOdWxsKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0Tm9uQ29uc3RhbnQoTm9uQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICByZXR1cm4gbmV3IGpzQXN0LkxpdGVyYWxOdWxsKCk7CiAgfQoKICBzdGF0aWMgZmluYWwgX2V4cG9uZW50aWFsUkUgPSBuZXcgUmVnRXhwKCdeJwogICAgICAnXChbLStdP1wpJyAvLyAxOiBzaWduCiAgICAgICdcKFswLTldK1wpJyAvLyAyOiBsZWFkaW5nIGRpZ2l0KHMpCiAgICAgICdcKFwuXChbMC05XSpcKVwpPycgLy8gNDogZnJhY3Rpb24gZGlnaXRzCiAgICAgICdlXChbLStdP1swLTldK1wpJyAvLyA1OiBleHBvbmVudCB3aXRoIHNpZ24KICAgICAgcickJyk7CgogIC8vLyBSZWR1Y2VzIHRoZSBzaXplIG9mIGV4cG9uZW50aWFsIHJlcHJlc2VudGF0aW9ucyB3aGVuIG1pbmlmaWNhdGlvbiBpcwogIC8vLyBlbmFibGVkLgogIC8vLwogIC8vLyBSZW1vdmVzIHRoZSAiKyIgYWZ0ZXIgdGhlIGV4cG9uZW50aWFsIHNpZ24sIGFuZCByZW1vdmVzIHRoZSAiLiIgYmVmb3JlIHRoZQogIC8vLyAiZSIuIEZvciBleGFtcGxlIGAxLjIzZSs1YCBpcyBjaGFuZ2VkIHRvIGAxMjNlM2AuCiAgU3RyaW5nIF9zaG9ydGVuRXhwb25lbnRpYWxSZXByZXNlbnRhdGlvbihTdHJpbmcgbnVtYmVyU3RyaW5nKSB7CiAgICBNYXRjaCBtYXRjaCA9IF9leHBvbmVudGlhbFJFLmZpcnN0TWF0Y2gobnVtYmVyU3RyaW5nKTsKICAgIGlmIChtYXRjaCA9PSBudWxsKSByZXR1cm4gbnVtYmVyU3RyaW5nOwogICAgU3RyaW5nIHNpZ24gPSBtYXRjaFsxXTsKICAgIFN0cmluZyBsZWFkaW5nRGlnaXRzID0gbWF0Y2hbMl07CiAgICBTdHJpbmcgZnJhY3Rpb25EaWdpdHMgPSBtYXRjaFs0XTsKICAgIGludCBleHBvbmVudCA9IGludC5wYXJzZShtYXRjaFs1XSk7CiAgICBpZiAoZnJhY3Rpb25EaWdpdHMgPT0gbnVsbCkgZnJhY3Rpb25EaWdpdHMgPSAnJzsKICAgIGV4cG9uZW50IC09IGZyYWN0aW9uRGlnaXRzLmxlbmd0aDsKICAgIFN0cmluZyByZXN1bHQgPSAnJHtzaWdufSR7bGVhZGluZ0RpZ2l0c30ke2ZyYWN0aW9uRGlnaXRzfWUke2V4cG9uZW50fSc7CiAgICBhc3NlcnQoZG91YmxlLnBhcnNlKHJlc3VsdCkgPT0gZG91YmxlLnBhcnNlKG51bWJlclN0cmluZykpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRJbnQoSW50Q29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICBCaWdJbnQgdmFsdWUgPSBjb25zdGFudC5pbnRWYWx1ZTsKICAgIC8vIFNpbmNlIHdlIGFyZSBpbiBKYXZhU2NyaXB0IHdlIGNhbiBzaG9ydGVuIGxvbmcgaW50ZWdlcnMgdG8gdGhlaXIgc2hvcnRlcgogICAgLy8gZXhwb25lbnRpYWwgcmVwcmVzZW50YXRpb24sIGZvciBleGFtcGxlOiAiMWU0IiBpcyBzaG9ydGVyIHRoYW4gIjEwMDAwIi4KICAgIC8vCiAgICAvLyBOb3RlIHRoYXQgdGhpcyBzaG9ydGVuaW5nIGFwcGFyZW50bHkgbG9zZXMgcHJlY2lzaW9uIGZvciBiaWcgbnVtYmVycwogICAgLy8gKGxpa2UgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NSB3aGljaCBiZWNvbWVzIDEyMzQ1Njc4OTAxMjM0NTY4ZTgpLgogICAgLy8gSG93ZXZlciwgc2luY2UgSmF2YVNjcmlwdCBlbmdpbmVzIHJlcHJlc2VudCBhbGwgbnVtYmVycyBhcyBkb3VibGVzLCB0aGVzZQogICAgLy8gZGlnaXRzIGFyZSBsb3N0IGFueXdheS4KICAgIFN0cmluZyByZXByZXNlbnRhdGlvbiA9IHZhbHVlLnRvU3RyaW5nKCk7CiAgICBTdHJpbmcgYWx0ZXJuYXRpdmUgPSBudWxsOwogICAgaW50IGN1dG9mZiA9IF9vcHRpb25zLmVuYWJsZU1pbmlmaWNhdGlvbiA/IDEwMDAwIDogMWUxMC50b0ludCgpOwogICAgaWYgKHZhbHVlLmFicygpID49IG5ldyBCaWdJbnQuZnJvbShjdXRvZmYpKSB7CiAgICAgIGFsdGVybmF0aXZlID0gX3Nob3J0ZW5FeHBvbmVudGlhbFJlcHJlc2VudGF0aW9uKAogICAgICAgICAgdmFsdWUudG9Eb3VibGUoKS50b1N0cmluZ0FzRXhwb25lbnRpYWwoKSk7CiAgICB9CiAgICBpZiAoYWx0ZXJuYXRpdmUgIT0gbnVsbCAmJiBhbHRlcm5hdGl2ZS5sZW5ndGggPCByZXByZXNlbnRhdGlvbi5sZW5ndGgpIHsKICAgICAgcmVwcmVzZW50YXRpb24gPSBhbHRlcm5hdGl2ZTsKICAgIH0KICAgIHJldHVybiBuZXcganNBc3QuTGl0ZXJhbE51bWJlcihyZXByZXNlbnRhdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0RG91YmxlKERvdWJsZUNvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgZG91YmxlIHZhbHVlID0gY29uc3RhbnQuZG91YmxlVmFsdWU7CiAgICBpZiAodmFsdWUuaXNOYU4pIHsKICAgICAgcmV0dXJuIGpzKCIwLzAiKTsKICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gZG91YmxlLmluZmluaXR5KSB7CiAgICAgIHJldHVybiBqcygiMS8wIik7CiAgICB9IGVsc2UgaWYgKHZhbHVlID09IC1kb3VibGUuaW5maW5pdHkpIHsKICAgICAgcmV0dXJuIGpzKCItMS8wIik7CiAgICB9IGVsc2UgewogICAgICBTdHJpbmcgc2hvcnRlbmVkID0gX3Nob3J0ZW5FeHBvbmVudGlhbFJlcHJlc2VudGF0aW9uKCIkdmFsdWUiKTsKICAgICAgcmV0dXJuIG5ldyBqc0FzdC5MaXRlcmFsTnVtYmVyKHNob3J0ZW5lZCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0Qm9vbChCb29sQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICBpZiAoX29wdGlvbnMuZW5hYmxlTWluaWZpY2F0aW9uKSB7CiAgICAgIGlmIChjb25zdGFudC5pc1RydWUpIHsKICAgICAgICAvLyBVc2UgITAgZm9yIHRydWUuCiAgICAgICAgcmV0dXJuIGpzKCIhMCIpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFVzZSAhMSBmb3IgZmFsc2UuCiAgICAgICAgcmV0dXJuIGpzKCIhMSIpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gY29uc3RhbnQuaXNUcnVlID8ganMoJ3RydWUnKSA6IGpzKCdmYWxzZScpOwogICAgfQogIH0KCiAgLy8vIFdyaXRlIHRoZSBjb250ZW50cyBvZiB0aGUgcXVvdGVkIHN0cmluZyB0byBhIFtDb2RlQnVmZmVyXSBpbgogIC8vLyBhIGZvcm0gdGhhdCBpcyB2YWxpZCBhcyBKYXZhU2NyaXB0IHN0cmluZyBsaXRlcmFsIGNvbnRlbnQuCiAgLy8vIFRoZSBzdHJpbmcgaXMgYXNzdW1lZCBxdW90ZWQgYnkgZG91YmxlIHF1b3RlIGNoYXJhY3RlcnMuCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdFN0cmluZyhTdHJpbmdDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIHJldHVybiBqcy5lc2NhcGVkU3RyaW5nKGNvbnN0YW50LnN0cmluZ1ZhbHVlLCBhc2NpaTogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0RHVtbXlJbnRlcmNlcHRvcihEdW1teUludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwKICAgICAgW19dKSB7CiAgICByZXR1cm4gbmV3IGpzQXN0LkxpdGVyYWxOdW1iZXIoJzAnKTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRVbnJlYWNoYWJsZShVbnJlYWNoYWJsZUNvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgcmV0dXJuIG5ldyBqc0FzdC5MaXRlcmFsTnVtYmVyKCcwJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0SnNOYW1lKEpzTmFtZUNvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgcmV0dXJuIGNvbnN0YW50Lm5hbWU7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0SW5zdGFudGlhdGlvbihJbnN0YW50aWF0aW9uQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwKICAgICAgICAgIFtfXSkgPT4KICAgICAgbnVsbDsKCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdERlZmVycmVkR2xvYmFsKERlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwKICAgICAgICAgIFtfXSkgPT4KICAgICAgbnVsbDsKCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdEludGVyY2VwdG9yKEludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSA9PgogICAgICBudWxsOwoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0VHlwZShUeXBlQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0Q29uc3RydWN0ZWQoQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pID0+CiAgICAgIG51bGw7CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRNYXAoTWFwQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0U2V0KFNldENvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdExpc3QoTGlzdENvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgPT4gbnVsbDsKfQoKLy8vIEdlbmVyYXRlcyB0aGUgSmF2YVNjcmlwdCBleHByZXNzaW9ucyBmb3IgY29uc3RhbnRzLgovLy8KLy8vIEl0IHVzZXMgYSBnaXZlbiBbX2NvbnN0YW50UmVmZXJlbmNlR2VuZXJhdG9yXSB0byByZWZlcmVuY2UgbmVzdGVkIGNvbnN0YW50cwovLy8gKGlmIHRoZXJlIGFyZSBzb21lKS4gSXQgaXMgaGVuY2UgdXAgdG8gdGhhdCBmdW5jdGlvbiB0byBkZWNpZGUgd2hpY2gKLy8vIGNvbnN0YW50cyBzaG91bGQgYmUgaW5saW5lZCBvciBub3QuCmNsYXNzIENvbnN0YW50RW1pdHRlciBleHRlbmRzIE1vZHVsYXJDb25zdGFudEVtaXR0ZXIgewogIC8vIE1hdGNoZXMgYmxhbmsgbGluZXMsIGNvbW1lbnQgbGluZXMgYW5kIHRyYWlsaW5nIGNvbW1lbnRzIHRoYXQgY2FuJ3QgYmUgcGFydAogIC8vIG9mIGEgc3RyaW5nLgogIHN0YXRpYyBmaW5hbCBSZWdFeHAgQ09NTUVOVF9SRSA9CiAgICAgIG5ldyBSZWdFeHAocicnJ14gKigvLy4qKT9cbnwgICovL1teJyciXG5dKiQnJycsIG11bHRpTGluZTogdHJ1ZSk7CgogIGZpbmFsIEpDb21tb25FbGVtZW50cyBfY29tbW9uRWxlbWVudHM7CiAgZmluYWwgSkVsZW1lbnRFbnZpcm9ubWVudCBfZWxlbWVudEVudmlyb25tZW50OwogIGZpbmFsIFJ1bnRpbWVUeXBlc05lZWQgX3J0aU5lZWQ7CiAgZmluYWwgUnVudGltZVR5cGVzRW5jb2RlciBfcnRpRW5jb2RlcjsKICBmaW5hbCBSZWNpcGVFbmNvZGVyIF9ydGlSZWNpcGVFbmNvZGVyOwogIGZpbmFsIEpGaWVsZEFuYWx5c2lzIF9maWVsZEFuYWx5c2lzOwogIGZpbmFsIEVtaXR0ZXIgX2VtaXR0ZXI7CiAgZmluYWwgX0NvbnN0YW50UmVmZXJlbmNlR2VuZXJhdG9yIF9jb25zdGFudFJlZmVyZW5jZUdlbmVyYXRvcjsKICBmaW5hbCBfQ29uc3RhbnRMaXN0R2VuZXJhdG9yIF9tYWtlQ29uc3RhbnRMaXN0OwoKICAvLy8gVGhlIGdpdmVuIFtfY29uc3RhbnRSZWZlcmVuY2VHZW5lcmF0b3JdIGZ1bmN0aW9uIG11c3QsIHdoZW4gaW52b2tlZCB3aXRoIGEKICAvLy8gY29uc3RhbnQsIGVpdGhlciByZXR1cm4gYSByZWZlcmVuY2Ugb3IgcmV0dXJuIGl0cyBsaXRlcmFsIGV4cHJlc3Npb24gaWYgaXQKICAvLy8gY2FuIGJlIGlubGluZWQuCiAgQ29uc3RhbnRFbWl0dGVyKAogICAgICBDb21waWxlck9wdGlvbnMgb3B0aW9ucywKICAgICAgdGhpcy5fY29tbW9uRWxlbWVudHMsCiAgICAgIHRoaXMuX2VsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgdGhpcy5fcnRpTmVlZCwKICAgICAgdGhpcy5fcnRpRW5jb2RlciwKICAgICAgdGhpcy5fcnRpUmVjaXBlRW5jb2RlciwKICAgICAgdGhpcy5fZmllbGRBbmFseXNpcywKICAgICAgdGhpcy5fZW1pdHRlciwKICAgICAgdGhpcy5fY29uc3RhbnRSZWZlcmVuY2VHZW5lcmF0b3IsCiAgICAgIHRoaXMuX21ha2VDb25zdGFudExpc3QpCiAgICAgIDogc3VwZXIob3B0aW9ucyk7CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRMaXN0KExpc3RDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIExpc3Q8anNBc3QuRXhwcmVzc2lvbj4gZWxlbWVudHMgPSBjb25zdGFudC5lbnRyaWVzCiAgICAgICAgLm1hcChfY29uc3RhbnRSZWZlcmVuY2VHZW5lcmF0b3IpCiAgICAgICAgLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAganNBc3QuQXJyYXlJbml0aWFsaXplciBhcnJheSA9IG5ldyBqc0FzdC5BcnJheUluaXRpYWxpemVyKGVsZW1lbnRzKTsKICAgIGpzQXN0LkV4cHJlc3Npb24gdmFsdWUgPSBfbWFrZUNvbnN0YW50TGlzdChhcnJheSk7CiAgICBpZiAoX29wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSkgewogICAgICByZXR1cm4gbWF5YmVBZGRMaXN0VHlwZUFyZ3VtZW50c05ld1J0aShjb25zdGFudCwgY29uc3RhbnQudHlwZSwgdmFsdWUpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG1heWJlQWRkVHlwZUFyZ3VtZW50cyhjb25zdGFudCwgY29uc3RhbnQudHlwZSwgdmFsdWUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdFNldChjb25zdGFudF9zeXN0ZW0uSmF2YVNjcmlwdFNldENvbnN0YW50IGNvbnN0YW50LAogICAgICBbX10pIHsKICAgIEludGVyZmFjZVR5cGUgc291cmNlVHlwZSA9IGNvbnN0YW50LnR5cGU7CiAgICBDbGFzc0VudGl0eSBjbGFzc0VsZW1lbnQgPSBzb3VyY2VUeXBlLmVsZW1lbnQ7CiAgICBTdHJpbmcgY2xhc3NOYW1lID0gY2xhc3NFbGVtZW50Lm5hbWU7CiAgICBpZiAoIWlkZW50aWNhbChjbGFzc0VsZW1lbnQsIF9jb21tb25FbGVtZW50cy5jb25zdFNldExpdGVyYWxDbGFzcykpIHsKICAgICAgZmFpbGVkQXQoCiAgICAgICAgICBjbGFzc0VsZW1lbnQsICJDb21waWxlciBlbmNvdXRlcmVkIHVuZXhwZWN0ZWQgc2V0IGNsYXNzICRjbGFzc05hbWUiKTsKICAgIH0KCiAgICBMaXN0PGpzQXN0LkV4cHJlc3Npb24+IGFyZ3VtZW50cyA9IDxqc0FzdC5FeHByZXNzaW9uPlsKICAgICAgX2NvbnN0YW50UmVmZXJlbmNlR2VuZXJhdG9yKGNvbnN0YW50LmVudHJpZXMpLAogICAgXTsKCiAgICBpZiAoX3J0aU5lZWQuY2xhc3NOZWVkc1R5cGVBcmd1bWVudHMoY2xhc3NFbGVtZW50KSkgewogICAgICBpZiAoX29wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSkgewogICAgICAgIGFyZ3VtZW50cy5hZGQoX3JlaWZpZWRUeXBlTmV3UnRpKHNvdXJjZVR5cGUpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhcmd1bWVudHMKICAgICAgICAgICAgLmFkZChfcmVpZmllZFR5cGVBcmd1bWVudHMoY29uc3RhbnQsIHNvdXJjZVR5cGUudHlwZUFyZ3VtZW50cykpOwogICAgICB9CiAgICB9CgogICAganNBc3QuRXhwcmVzc2lvbiBjb25zdHJ1Y3RvciA9IF9lbWl0dGVyLmNvbnN0cnVjdG9yQWNjZXNzKGNsYXNzRWxlbWVudCk7CiAgICByZXR1cm4gbmV3IGpzQXN0Lk5ldyhjb25zdHJ1Y3RvciwgYXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRNYXAoY29uc3RhbnRfc3lzdGVtLkphdmFTY3JpcHRNYXBDb25zdGFudCBjb25zdGFudCwKICAgICAgW19dKSB7CiAgICBqc0FzdC5FeHByZXNzaW9uIGpzTWFwKCkgewogICAgICBMaXN0PGpzQXN0LlByb3BlcnR5PiBwcm9wZXJ0aWVzID0gPGpzQXN0LlByb3BlcnR5PltdOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbnN0YW50Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgU3RyaW5nQ29uc3RhbnRWYWx1ZSBrZXkgPSBjb25zdGFudC5rZXlzW2ldOwogICAgICAgIGlmIChrZXkuc3RyaW5nVmFsdWUgPT0KICAgICAgICAgICAgY29uc3RhbnRfc3lzdGVtLkphdmFTY3JpcHRNYXBDb25zdGFudC5QUk9UT19QUk9QRVJUWSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICAvLyBLZXlzIGluIGxpdGVyYWwgbWFwcyBtdXN0IGJlIGVtaXR0ZWQgaW4gcGxhY2UuCiAgICAgICAganNBc3QuTGl0ZXJhbCBrZXlFeHByZXNzaW9uID0gX3Zpc2l0KGtleSk7CiAgICAgICAganNBc3QuRXhwcmVzc2lvbiB2YWx1ZUV4cHJlc3Npb24gPQogICAgICAgICAgICBfY29uc3RhbnRSZWZlcmVuY2VHZW5lcmF0b3IoY29uc3RhbnQudmFsdWVzW2ldKTsKICAgICAgICBwcm9wZXJ0aWVzLmFkZChuZXcganNBc3QuUHJvcGVydHkoa2V5RXhwcmVzc2lvbiwgdmFsdWVFeHByZXNzaW9uKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBqc0FzdC5PYmplY3RJbml0aWFsaXplcihwcm9wZXJ0aWVzKTsKICAgIH0KCiAgICBqc0FzdC5FeHByZXNzaW9uIGpzR2VuZXJhbE1hcCgpIHsKICAgICAgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiBkYXRhID0gPGpzQXN0LkV4cHJlc3Npb24+W107CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29uc3RhbnQua2V5cy5sZW5ndGg7IGkrKykgewogICAgICAgIGpzQXN0LkV4cHJlc3Npb24ga2V5RXhwcmVzc2lvbiA9CiAgICAgICAgICAgIF9jb25zdGFudFJlZmVyZW5jZUdlbmVyYXRvcihjb25zdGFudC5rZXlzW2ldKTsKICAgICAgICBqc0FzdC5FeHByZXNzaW9uIHZhbHVlRXhwcmVzc2lvbiA9CiAgICAgICAgICAgIF9jb25zdGFudFJlZmVyZW5jZUdlbmVyYXRvcihjb25zdGFudC52YWx1ZXNbaV0pOwogICAgICAgIGRhdGEuYWRkKGtleUV4cHJlc3Npb24pOwogICAgICAgIGRhdGEuYWRkKHZhbHVlRXhwcmVzc2lvbik7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBqc0FzdC5BcnJheUluaXRpYWxpemVyKGRhdGEpOwogICAgfQoKICAgIENsYXNzRW50aXR5IGNsYXNzRWxlbWVudCA9IGNvbnN0YW50LnR5cGUuZWxlbWVudDsKICAgIFN0cmluZyBjbGFzc05hbWUgPSBjbGFzc0VsZW1lbnQubmFtZTsKCiAgICBMaXN0PGpzQXN0LkV4cHJlc3Npb24+IGFyZ3VtZW50cyA9IDxqc0FzdC5FeHByZXNzaW9uPltdOwoKICAgIC8vIFRoZSBhcmd1bWVudHMgb2YgdGhlIEphdmFTY3JpcHQgY29uc3RydWN0b3IgZm9yIGFueSBnaXZlbiBEYXJ0IGNsYXNzCiAgICAvLyBhcmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIG1lbWJlcnMgb2YgdGhlIGNsYXNzIGVsZW1lbnQuCiAgICBpbnQgZW1pdHRlZEFyZ3VtZW50Q291bnQgPSAwOwogICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoSW5zdGFuY2VGaWVsZChjbGFzc0VsZW1lbnQsCiAgICAgICAgKENsYXNzRW50aXR5IGVuY2xvc2luZywgRmllbGRFbnRpdHkgZmllbGQpIHsKICAgICAgaWYgKF9maWVsZEFuYWx5c2lzLmdldEZpZWxkRGF0YShmaWVsZCkuaXNFbGlkZWQpIHJldHVybjsKICAgICAgaWYgKGZpZWxkLm5hbWUgPT0gY29uc3RhbnRfc3lzdGVtLkphdmFTY3JpcHRNYXBDb25zdGFudC5MRU5HVEhfTkFNRSkgewogICAgICAgIGFyZ3VtZW50cwogICAgICAgICAgICAuYWRkKG5ldyBqc0FzdC5MaXRlcmFsTnVtYmVyKCcke2NvbnN0YW50LmtleUxpc3QuZW50cmllcy5sZW5ndGh9JykpOwogICAgICB9IGVsc2UgaWYgKGZpZWxkLm5hbWUgPT0KICAgICAgICAgIGNvbnN0YW50X3N5c3RlbS5KYXZhU2NyaXB0TWFwQ29uc3RhbnQuSlNfT0JKRUNUX05BTUUpIHsKICAgICAgICBhcmd1bWVudHMuYWRkKGpzTWFwKCkpOwogICAgICB9IGVsc2UgaWYgKGZpZWxkLm5hbWUgPT0KICAgICAgICAgIGNvbnN0YW50X3N5c3RlbS5KYXZhU2NyaXB0TWFwQ29uc3RhbnQuS0VZU19OQU1FKSB7CiAgICAgICAgYXJndW1lbnRzLmFkZChfY29uc3RhbnRSZWZlcmVuY2VHZW5lcmF0b3IoY29uc3RhbnQua2V5TGlzdCkpOwogICAgICB9IGVsc2UgaWYgKGZpZWxkLm5hbWUgPT0KICAgICAgICAgIGNvbnN0YW50X3N5c3RlbS5KYXZhU2NyaXB0TWFwQ29uc3RhbnQuUFJPVE9fVkFMVUUpIHsKICAgICAgICBhc3NlcnQoY29uc3RhbnQucHJvdG9WYWx1ZSAhPSBudWxsKTsKICAgICAgICBhcmd1bWVudHMuYWRkKF9jb25zdGFudFJlZmVyZW5jZUdlbmVyYXRvcihjb25zdGFudC5wcm90b1ZhbHVlKSk7CiAgICAgIH0gZWxzZSBpZiAoZmllbGQubmFtZSA9PQogICAgICAgICAgY29uc3RhbnRfc3lzdGVtLkphdmFTY3JpcHRNYXBDb25zdGFudC5KU19EQVRBX05BTUUpIHsKICAgICAgICBhcmd1bWVudHMuYWRkKGpzR2VuZXJhbE1hcCgpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBmYWlsZWRBdChmaWVsZCwKICAgICAgICAgICAgIkNvbXBpbGVyIGhhcyB1bmV4cGVjdGVkIGZpZWxkICR7ZmllbGQubmFtZX0gZm9yICR7Y2xhc3NOYW1lfS4iKTsKICAgICAgfQogICAgICBlbWl0dGVkQXJndW1lbnRDb3VudCsrOwogICAgfSk7CiAgICBpZiAoKGNsYXNzTmFtZSA9PSBjb25zdGFudF9zeXN0ZW0uSmF2YVNjcmlwdE1hcENvbnN0YW50LkRBUlRfU1RSSU5HX0NMQVNTICYmCiAgICAgICAgICAgIGVtaXR0ZWRBcmd1bWVudENvdW50ICE9IDMpIHx8CiAgICAgICAgKGNsYXNzTmFtZSA9PSBjb25zdGFudF9zeXN0ZW0uSmF2YVNjcmlwdE1hcENvbnN0YW50LkRBUlRfUFJPVE9fQ0xBU1MgJiYKICAgICAgICAgICAgZW1pdHRlZEFyZ3VtZW50Q291bnQgIT0gNCkgfHwKICAgICAgICAoY2xhc3NOYW1lID09CiAgICAgICAgICAgICAgICBjb25zdGFudF9zeXN0ZW0uSmF2YVNjcmlwdE1hcENvbnN0YW50LkRBUlRfR0VORVJBTF9DTEFTUyAmJgogICAgICAgICAgICBlbWl0dGVkQXJndW1lbnRDb3VudCAhPSAxKSkgewogICAgICBmYWlsZWRBdChjbGFzc0VsZW1lbnQsCiAgICAgICAgICAiQ29tcGlsZXIgYW5kICR7Y2xhc3NOYW1lfSBkaXNhZ3JlZSBvbiBudW1iZXIgb2YgZmllbGRzLiIpOwogICAgfQoKICAgIGlmIChfcnRpTmVlZC5jbGFzc05lZWRzVHlwZUFyZ3VtZW50cyhjbGFzc0VsZW1lbnQpKSB7CiAgICAgIGlmIChfb3B0aW9ucy5leHBlcmltZW50TmV3UnRpKSB7CiAgICAgICAgYXJndW1lbnRzLmFkZChfcmVpZmllZFR5cGVOZXdSdGkoY29uc3RhbnQudHlwZSkpOwogICAgICB9IGVsc2UgewogICAgICAgIGFyZ3VtZW50cwogICAgICAgICAgICAuYWRkKF9yZWlmaWVkVHlwZUFyZ3VtZW50cyhjb25zdGFudCwgY29uc3RhbnQudHlwZS50eXBlQXJndW1lbnRzKSk7CiAgICAgIH0KICAgIH0KCiAgICBqc0FzdC5FeHByZXNzaW9uIGNvbnN0cnVjdG9yID0gX2VtaXR0ZXIuY29uc3RydWN0b3JBY2Nlc3MoY2xhc3NFbGVtZW50KTsKICAgIGpzQXN0LkV4cHJlc3Npb24gdmFsdWUgPSBuZXcganNBc3QuTmV3KGNvbnN0cnVjdG9yLCBhcmd1bWVudHMpOwogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAganNBc3QuUHJvcGVydHlBY2Nlc3MgZ2V0SGVscGVyUHJvcGVydHkoRnVuY3Rpb25FbnRpdHkgaGVscGVyKSB7CiAgICByZXR1cm4gX2VtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MoaGVscGVyKTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRUeXBlKFR5cGVDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIERhcnRUeXBlIHR5cGUgPSBjb25zdGFudC5yZXByZXNlbnRlZFR5cGUudW5hbGlhc2VkOwoKICAgIGlmIChfb3B0aW9ucy5leHBlcmltZW50TmV3UnRpKSB7CiAgICAgIGFzc2VydCghdHlwZS5jb250YWluc1R5cGVWYXJpYWJsZXMpOwoKICAgICAganNBc3QuRXhwcmVzc2lvbiByZWNpcGUgPSBfcnRpUmVjaXBlRW5jb2Rlci5lbmNvZGVHcm91bmRSZWNpcGUoCiAgICAgICAgICBfZW1pdHRlciwgVHlwZUV4cHJlc3Npb25SZWNpcGUodHlwZSkpOwoKICAgICAgLy8gR2VuZXJhdGUgIGB0eXBlTGl0ZXJhbChyZWNpcGUpYC4KCiAgICAgIC8vIFRPRE8oc3JhKTogYHR5cGVMaXRlcmFsKHIpYCBjYWxscyBgY3JlYXRlUnVudGltZVR5cGUoZmluZFR5cGUocikpYC4KICAgICAgLy8gRmluZCBhIHdheSB0byBzaGFyZSB0aGUgYGZpbmRUeXBlYCBjYWxsIHdpdGggbWV0aG9kcyB0aGF0IGFsc28gdXNlIHRoZQogICAgICAvLyB0eXBlLgogICAgICByZXR1cm4ganMoJyMoIyknLAogICAgICAgICAgW2dldEhlbHBlclByb3BlcnR5KF9jb21tb25FbGVtZW50cy50eXBlTGl0ZXJhbE1ha2VyKSwgcmVjaXBlXSk7CiAgICB9IGVsc2UgewogICAgICBqc0FzdC5FeHByZXNzaW9uIHVuZXhwZWN0ZWQoVHlwZVZhcmlhYmxlVHlwZSBfdmFyaWFibGUpIHsKICAgICAgICBUeXBlVmFyaWFibGVUeXBlIHZhcmlhYmxlID0gX3ZhcmlhYmxlOwogICAgICAgIHRocm93IGZhaWxlZEF0KAogICAgICAgICAgICBOT19MT0NBVElPTl9TUEFOTkFCTEUsCiAgICAgICAgICAgICJVbmV4cGVjdGVkIHR5cGUgdmFyaWFibGUgJyR7dmFyaWFibGV9JyIKICAgICAgICAgICAgIiBpbiBjb25zdGFudCAnJHtjb25zdGFudC50b0RhcnRUZXh0KCl9JyIpOwogICAgICB9CgogICAgICBqc0FzdC5FeHByZXNzaW9uIHJ0aSA9CiAgICAgICAgICBfcnRpRW5jb2Rlci5nZXRUeXBlUmVwcmVzZW50YXRpb24oX2VtaXR0ZXIsIHR5cGUsIHVuZXhwZWN0ZWQpOwoKICAgICAgcmV0dXJuIG5ldyBqc0FzdC5DYWxsKAogICAgICAgICAgZ2V0SGVscGVyUHJvcGVydHkoX2NvbW1vbkVsZW1lbnRzLmNyZWF0ZVJ1bnRpbWVUeXBlKSwgW3J0aV0pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdEludGVyY2VwdG9yKEludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICBDbGFzc0VudGl0eSBpbnRlcmNlcHRvckNsYXNzID0gY29uc3RhbnQuY2xzOwogICAgcmV0dXJuIF9lbWl0dGVyLmludGVyY2VwdG9yUHJvdG90eXBlQWNjZXNzKGludGVyY2VwdG9yQ2xhc3MpOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdENvbnN0cnVjdGVkKENvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICBDbGFzc0VudGl0eSBlbGVtZW50ID0gY29uc3RhbnQudHlwZS5lbGVtZW50OwogICAgaWYgKGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLmpzQ29uc3RDbGFzcykgewogICAgICBTdHJpbmdDb25zdGFudFZhbHVlIHN0ciA9IGNvbnN0YW50LmZpZWxkcy52YWx1ZXMuc2luZ2xlOwogICAgICBTdHJpbmcgdmFsdWUgPSBzdHIuc3RyaW5nVmFsdWU7CiAgICAgIHJldHVybiBuZXcganNBc3QuTGl0ZXJhbEV4cHJlc3Npb24oc3RyaXBDb21tZW50cyh2YWx1ZSkpOwogICAgfQogICAganNBc3QuRXhwcmVzc2lvbiBjb25zdHJ1Y3RvciA9CiAgICAgICAgX2VtaXR0ZXIuY29uc3RydWN0b3JBY2Nlc3MoY29uc3RhbnQudHlwZS5lbGVtZW50KTsKICAgIExpc3Q8anNBc3QuRXhwcmVzc2lvbj4gZmllbGRzID0gPGpzQXN0LkV4cHJlc3Npb24+W107CiAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hJbnN0YW5jZUZpZWxkKGVsZW1lbnQsIChfLCBGaWVsZEVudGl0eSBmaWVsZCkgewogICAgICBGaWVsZEFuYWx5c2lzRGF0YSBmaWVsZERhdGEgPSBfZmllbGRBbmFseXNpcy5nZXRGaWVsZERhdGEoZmllbGQpOwogICAgICBpZiAoZmllbGREYXRhLmlzRWxpZGVkKSByZXR1cm47CiAgICAgIGlmICghZmllbGREYXRhLmlzSW5pdGlhbGl6ZWRJbkFsbG9jYXRvcikgewogICAgICAgIGZpZWxkcy5hZGQoX2NvbnN0YW50UmVmZXJlbmNlR2VuZXJhdG9yKGNvbnN0YW50LmZpZWxkc1tmaWVsZF0pKTsKICAgICAgfQogICAgfSk7CiAgICBpZiAoX3J0aU5lZWQuY2xhc3NOZWVkc1R5cGVBcmd1bWVudHMoY29uc3RhbnQudHlwZS5lbGVtZW50KSkgewogICAgICBpZiAoX29wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSkgewogICAgICAgIGZpZWxkcy5hZGQoX3JlaWZpZWRUeXBlTmV3UnRpKGNvbnN0YW50LnR5cGUpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBmaWVsZHMKICAgICAgICAgICAgLmFkZChfcmVpZmllZFR5cGVBcmd1bWVudHMoY29uc3RhbnQsIGNvbnN0YW50LnR5cGUudHlwZUFyZ3VtZW50cykpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IGpzQXN0Lk5ldyhjb25zdHJ1Y3RvciwgZmllbGRzKTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRJbnN0YW50aWF0aW9uKEluc3RhbnRpYXRpb25Db25zdGFudFZhbHVlIGNvbnN0YW50LAogICAgICBbX10pIHsKICAgIENsYXNzRW50aXR5IGNscyA9CiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmdldEluc3RhbnRpYXRpb25DbGFzcyhjb25zdGFudC50eXBlQXJndW1lbnRzLmxlbmd0aCk7CiAgICBMaXN0PGpzQXN0LkV4cHJlc3Npb24+IGZpZWxkcyA9IDxqc0FzdC5FeHByZXNzaW9uPlsKICAgICAgX2NvbnN0YW50UmVmZXJlbmNlR2VuZXJhdG9yKGNvbnN0YW50LmZ1bmN0aW9uKQogICAgXTsKICAgIGlmIChfb3B0aW9ucy5leHBlcmltZW50TmV3UnRpKSB7CiAgICAgIGZpZWxkcwogICAgICAgICAgLmFkZChfcmVpZmllZFR5cGVOZXdSdGkoSW50ZXJmYWNlVHlwZShjbHMsIGNvbnN0YW50LnR5cGVBcmd1bWVudHMpKSk7CiAgICB9IGVsc2UgewogICAgICBmaWVsZHMuYWRkKF9yZWlmaWVkVHlwZUFyZ3VtZW50cyhjb25zdGFudCwgY29uc3RhbnQudHlwZUFyZ3VtZW50cykpOwogICAgfQogICAganNBc3QuRXhwcmVzc2lvbiBjb25zdHJ1Y3RvciA9IF9lbWl0dGVyLmNvbnN0cnVjdG9yQWNjZXNzKGNscyk7CiAgICByZXR1cm4gbmV3IGpzQXN0Lk5ldyhjb25zdHJ1Y3RvciwgZmllbGRzKTsKICB9CgogIFN0cmluZyBzdHJpcENvbW1lbnRzKFN0cmluZyByYXdKYXZhU2NyaXB0KSB7CiAgICByZXR1cm4gcmF3SmF2YVNjcmlwdC5yZXBsYWNlQWxsKENPTU1FTlRfUkUsICcnKTsKICB9CgogIGpzQXN0LkV4cHJlc3Npb24gbWF5YmVBZGRUeXBlQXJndW1lbnRzKAogICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50LCBJbnRlcmZhY2VUeXBlIHR5cGUsIGpzQXN0LkV4cHJlc3Npb24gdmFsdWUpIHsKICAgIGlmICh0eXBlIGlzIEludGVyZmFjZVR5cGUgJiYKICAgICAgICAhdHlwZS50cmVhdEFzUmF3ICYmCiAgICAgICAgX3J0aU5lZWQuY2xhc3NOZWVkc1R5cGVBcmd1bWVudHModHlwZS5lbGVtZW50KSkgewogICAgICByZXR1cm4gbmV3IGpzQXN0LkNhbGwoCiAgICAgICAgICBnZXRIZWxwZXJQcm9wZXJ0eShfY29tbW9uRWxlbWVudHMuc2V0UnVudGltZVR5cGVJbmZvKSwKICAgICAgICAgIFt2YWx1ZSwgX3JlaWZpZWRUeXBlQXJndW1lbnRzKGNvbnN0YW50LCB0eXBlLnR5cGVBcmd1bWVudHMpXSk7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBqc0FzdC5FeHByZXNzaW9uIG1heWJlQWRkTGlzdFR5cGVBcmd1bWVudHNOZXdSdGkoCiAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQsIEludGVyZmFjZVR5cGUgdHlwZSwganNBc3QuRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgLy8gTGlzdDxUPiAtLT4gSlNBcnJheTxUPgogICAgaWYgKHR5cGUuZWxlbWVudCAhPSBfY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzKSB7CiAgICAgIHR5cGUgPSBJbnRlcmZhY2VUeXBlKF9jb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3MsIHR5cGUudHlwZUFyZ3VtZW50cyk7CiAgICB9CiAgICBpZiAoX3J0aU5lZWQuY2xhc3NOZWVkc1R5cGVBcmd1bWVudHModHlwZS5lbGVtZW50KSkgewogICAgICByZXR1cm4gbmV3IGpzQXN0LkNhbGwoCiAgICAgICAgICBnZXRIZWxwZXJQcm9wZXJ0eShfY29tbW9uRWxlbWVudHMuc2V0UnVudGltZVR5cGVJbmZvKSwKICAgICAgICAgIFt2YWx1ZSwgX3JlaWZpZWRUeXBlTmV3UnRpKHR5cGUpXSk7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBqc0FzdC5FeHByZXNzaW9uIF9yZWlmaWVkVHlwZUFyZ3VtZW50cygKICAgICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAganNBc3QuRXhwcmVzc2lvbiB1bmV4cGVjdGVkKFR5cGVWYXJpYWJsZVR5cGUgX3ZhcmlhYmxlKSB7CiAgICAgIFR5cGVWYXJpYWJsZVR5cGUgdmFyaWFibGUgPSBfdmFyaWFibGU7CiAgICAgIHRocm93IGZhaWxlZEF0KAogICAgICAgICAgTk9fTE9DQVRJT05fU1BBTk5BQkxFLAogICAgICAgICAgIlVuZXhwZWN0ZWQgdHlwZSB2YXJpYWJsZSAnJHt2YXJpYWJsZX0nIgogICAgICAgICAgIiBpbiBjb25zdGFudCAnJHtjb25zdGFudC50b0RhcnRUZXh0KCl9JyIpOwogICAgfQoKICAgIExpc3Q8anNBc3QuRXhwcmVzc2lvbj4gYXJndW1lbnRzID0gPGpzQXN0LkV4cHJlc3Npb24+W107CiAgICBmb3IgKERhcnRUeXBlIGFyZ3VtZW50IGluIHR5cGVBcmd1bWVudHMpIHsKICAgICAgYXJndW1lbnRzLmFkZCgKICAgICAgICAgIF9ydGlFbmNvZGVyLmdldFR5cGVSZXByZXNlbnRhdGlvbihfZW1pdHRlciwgYXJndW1lbnQsIHVuZXhwZWN0ZWQpKTsKICAgIH0KICAgIHJldHVybiBuZXcganNBc3QuQXJyYXlJbml0aWFsaXplcihhcmd1bWVudHMpOwogIH0KCiAganNBc3QuRXhwcmVzc2lvbiBfcmVpZmllZFR5cGVOZXdSdGkoRGFydFR5cGUgdHlwZSkgewogICAgYXNzZXJ0KF9vcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpOwogICAgYXNzZXJ0KCF0eXBlLmNvbnRhaW5zVHlwZVZhcmlhYmxlcyk7CiAgICBqc0FzdC5FeHByZXNzaW9uIHJlY2lwZSA9IF9ydGlSZWNpcGVFbmNvZGVyLmVuY29kZUdyb3VuZFJlY2lwZSgKICAgICAgICBfZW1pdHRlciwgVHlwZUV4cHJlc3Npb25SZWNpcGUodHlwZSkpOwogICAgcmV0dXJuIGpzKHInIygjKScsIFtnZXRIZWxwZXJQcm9wZXJ0eShfY29tbW9uRWxlbWVudHMuZmluZFR5cGUpLCByZWNpcGVdKTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXREZWZlcnJlZEdsb2JhbChEZWZlcnJlZEdsb2JhbENvbnN0YW50VmFsdWUgY29uc3RhbnQsCiAgICAgIFtfXSkgewogICAgcmV0dXJuIF9jb25zdGFudFJlZmVyZW5jZUdlbmVyYXRvcihjb25zdGFudC5yZWZlcmVuY2VkKTsKICB9Cn0KggkATk48ARkiPyMkISEhICwvQRoyHTQoAU4BSQFMQR0+IgEpAU1PHDYdBAE0KAQBDEgqQgQBDEAkBAEMRiQEAS8dKjAyDQFLDwZROEI7LBwlJig1J0xAEwQBDD4mUE8HTEtRHy4fRTI3NQZNJAY0BAEMRCkXGCsYLBkNRjEGBAEMQCcdHBkPHRkIDTkGBAFDQT8MREAEAQxRDSkEAQxOKQQBDEQaBAEMSxIMAQxNEgwBDE8MAQxHAQxPDAEMRQEMRQEMRwIBOARQSSg3URIjSAEpMSMpKScaQTIBUVEWEx8cIBUYHhsVKB4YAQxANyoiSTclTg1EBgQBDEwNLjMqShBQBgE7NQcBOic3DxJNCAYBTTIEAQxMDR88MjQfRBQKATozKz1MCDYGASY6Nyk7Kz0hIwgvBgE2KgE9AUxCIjs1P00SUR9CIB89Rh8/LUkfQCcPGE4IHghRKlAqFkwqHUYGATonOg8SUAgGAU1EEgQBQjIEAQxAOAElKwFGMQEqAU1QDxhKDUAvGCM1OAgBHUkBHUgGBAEMTjFCBAEMTjEzPyZABiM7Ok9IJjFJCAhDJzcPD1AIBi8EAQxLDRZOODUHJQ1QDUsGRC8EAS81BAEqTCEcOh1BSQYSBAE0TB44TgY6HUEuBhIEASo+Pi0WITM2BgE9LxVOBjIEATcnKUQvTwQBDE0NPQQCATVwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2NvbnN0YW50X2VtaXR0ZXIuZGFydEtzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19lbWl0dGVyL3N0YXJ0dXBfZW1pdHRlci9tb2RlbF9lbWl0dGVyLmRhcnS+1y8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuanNfZW1pdHRlci5zdGFydHVwX2VtaXR0ZXIubW9kZWxfZW1pdHRlcjsKCmltcG9ydCAnZGFydDpjb252ZXJ0JyBzaG93IEpzb25FbmNvZGVyOwppbXBvcnQgJ2RhcnQ6bWF0aCcgc2hvdyBSYW5kb207CgppbXBvcnQgJ3BhY2thZ2U6anNfcnVudGltZS9zaGFyZWQvZW1iZWRkZWRfbmFtZXMuZGFydCcKICAgIHNob3cKICAgICAgICBERUZFUlJFRF9JTklUSUFMSVpFRCwKICAgICAgICBERUZFUlJFRF9MSUJSQVJZX1BBUlRTLAogICAgICAgIERFRkVSUkVEX1BBUlRfVVJJUywKICAgICAgICBERUZFUlJFRF9QQVJUX0hBU0hFUywKICAgICAgICBHRVRfVFlQRV9GUk9NX05BTUUsCiAgICAgICAgSU5JVElBTElaRV9MT0FERURfSFVOSywKICAgICAgICBJTlRFUkNFUFRPUlNfQllfVEFHLAogICAgICAgIElTX0hVTktfSU5JVElBTElaRUQsCiAgICAgICAgSVNfSFVOS19MT0FERUQsCiAgICAgICAgSnNHZXROYW1lLAogICAgICAgIExFQUZfVEFHUywKICAgICAgICBNQU5HTEVEX0dMT0JBTF9OQU1FUywKICAgICAgICBNQU5HTEVEX05BTUVTLAogICAgICAgIE1FVEFEQVRBLAogICAgICAgIE5BVElWRV9TVVBFUkNMQVNTX1RBR19OQU1FLAogICAgICAgIFJUSV9VTklWRVJTRSwKICAgICAgICBSdGlVbml2ZXJzZUZpZWxkTmFtZXMsCiAgICAgICAgVFlQRV9UT19JTlRFUkNFUFRPUl9NQVAsCiAgICAgICAgVFlQRVM7CgppbXBvcnQgJ3BhY2thZ2U6anNfYXN0L3NyYy9wcmVjZWRlbmNlLmRhcnQnIGFzIGpzX3ByZWNlZGVuY2U7CgppbXBvcnQgJy4uLy4uLy4uL2NvbXBpbGVyX25ldy5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vLi4vY29tbW9uL3Rhc2tzLmRhcnQnOwppbXBvcnQgJy4uLy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCcKICAgIHNob3cgQ29uc3RhbnRWYWx1ZSwgRnVuY3Rpb25Db25zdGFudFZhbHVlLCBOdWxsQ29uc3RhbnRWYWx1ZTsKaW1wb3J0ICcuLi8uLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBDb21tb25FbGVtZW50cywgSkVsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICcuLi8uLi9kdW1wX2luZm8uZGFydCc7CmltcG9ydCAnLi4vLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vLi4vaGFzaC9zaGExLmRhcnQnIHNob3cgSGFzaGVyOwppbXBvcnQgJy4uLy4uL2lvL2NvZGVfb3V0cHV0LmRhcnQnOwppbXBvcnQgJy4uLy4uL2lvL2xvY2F0aW9uX3Byb3ZpZGVyLmRhcnQnIHNob3cgTG9jYXRpb25Db2xsZWN0b3I7CmltcG9ydCAnLi4vLi4vaW8vc291cmNlX2luZm9ybWF0aW9uLmRhcnQnOwppbXBvcnQgJy4uLy4uL2lvL3NvdXJjZV9tYXBfYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZU1hcEJ1aWxkZXI7CmltcG9ydCAnLi4vLi4vanMvanMuZGFydCcgYXMganM7CmltcG9ydCAnLi4vLi4vanNfYmFja2VuZC9qc19iYWNrZW5kLmRhcnQnCiAgICBzaG93IE5hbWVyLCBDb25zdGFudEVtaXR0ZXIsIFN0cmluZ0JhY2tlZE5hbWU7CmltcG9ydCAnLi4vLi4vanNfYmFja2VuZC9qc19pbnRlcm9wX2FuYWx5c2lzLmRhcnQnIGFzIGpzSW50ZXJvcEFuYWx5c2lzOwppbXBvcnQgJy4uLy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfY29kZWdlbi5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfbmV3LmRhcnQnCiAgICBzaG93IFJlY2lwZUVuY29kZXIsIFJlY2lwZUVuY29kZXJJbXBsLCBSdWxlc2V0LCBSdWxlc2V0RW5jb2RlcjsKaW1wb3J0ICcuLi8uLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uLy4uL3VuaXZlcnNlL2NvZGVnZW5fd29ybGRfYnVpbGRlci5kYXJ0JyBzaG93IENvZGVnZW5Xb3JsZDsKaW1wb3J0ICcuLi8uLi93b3JsZC5kYXJ0JzsKaW1wb3J0ICcuLi9jb2RlX2VtaXR0ZXJfdGFzay5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudF9vcmRlcmluZy5kYXJ0JyBzaG93IENvbnN0YW50T3JkZXJpbmc7CmltcG9ydCAnLi4vaGVhZGVycy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19lbWl0dGVyLmRhcnQnIHNob3cgYnVpbGRUZWFyT2ZmQ29kZSwgTmF0aXZlR2VuZXJhdG9yOwppbXBvcnQgJy4uL21vZGVsLmRhcnQnOwoKcGFydCAnZnJhZ21lbnRfZW1pdHRlci5kYXJ0JzsKCmNsYXNzIE1vZGVsRW1pdHRlciB7CiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwogIGZpbmFsIERpYWdub3N0aWNSZXBvcnRlciBfcmVwb3J0ZXI7CiAgZmluYWwgQ29tcGlsZXJPdXRwdXQgX291dHB1dFByb3ZpZGVyOwogIGZpbmFsIER1bXBJbmZvVGFzayBfZHVtcEluZm9UYXNrOwogIGZpbmFsIE5hbWVyIF9uYW1lcjsKICBmaW5hbCBDb21waWxlclRhc2sgX3Rhc2s7CiAgZmluYWwgRW1pdHRlciBfZW1pdHRlcjsKICBDb25zdGFudEVtaXR0ZXIgX2NvbnN0YW50RW1pdHRlcjsKICBmaW5hbCBib29sIF9zaG91bGRHZW5lcmF0ZVNvdXJjZU1hcDsKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwogIGZpbmFsIENvbnN0YW50T3JkZXJpbmcgX2NvbnN0YW50T3JkZXJpbmc7CiAgZmluYWwgU291cmNlSW5mb3JtYXRpb25TdHJhdGVneSBfc291cmNlSW5mb3JtYXRpb25TdHJhdGVneTsKCiAgLy8gVGhlIGZ1bGwgY29kZSB0aGF0IGlzIHdyaXR0ZW4gdG8gZWFjaCBodW5rIHBhcnQtZmlsZS4KICBmaW5hbCBNYXA8RnJhZ21lbnQsIENvZGVPdXRwdXQ+IG91dHB1dEJ1ZmZlcnMgPSB7fTsKCiAgU2V0PEZyYWdtZW50PiBvbWl0dGVkRnJhZ21lbnRzID0gU2V0KCk7CgogIC8vLyBGb3IgZGVmZXJyZWQgbG9hZGluZyB3ZSBjb21tdW5pY2F0ZSB0aGUgaW5pdGlhbGl6ZXJzIHZpYSB0aGlzIGdsb2JhbCB2YXIuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBkZWZlcnJlZEluaXRpYWxpemVyc0dsb2JhbCA9CiAgICAgIHIiJF9fZGFydF9kZWZlcnJlZF9pbml0aWFsaXplcnNfXyI7CgogIHN0YXRpYyBjb25zdCBTdHJpbmcgcGFydEV4dGVuc2lvbiA9ICJwYXJ0IjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGRlZmVycmVkRXh0ZW5zaW9uID0gInBhcnQuanMiOwoKICBzdGF0aWMgY29uc3QgU3RyaW5nIHR5cGVOYW1lUHJvcGVydHkgPSByImJ1aWx0aW4kY2xzIjsKCiAgTW9kZWxFbWl0dGVyKAogICAgICB0aGlzLl9vcHRpb25zLAogICAgICB0aGlzLl9yZXBvcnRlciwKICAgICAgdGhpcy5fb3V0cHV0UHJvdmlkZXIsCiAgICAgIHRoaXMuX2R1bXBJbmZvVGFzaywKICAgICAgdGhpcy5fbmFtZXIsCiAgICAgIHRoaXMuX2Nsb3NlZFdvcmxkLAogICAgICB0aGlzLl90YXNrLAogICAgICB0aGlzLl9lbWl0dGVyLAogICAgICB0aGlzLl9zb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5LAogICAgICBSdW50aW1lVHlwZXNFbmNvZGVyIHJ0aUVuY29kZXIsCiAgICAgIFJlY2lwZUVuY29kZXIgcnRpUmVjaXBlRW5jb2RlciwKICAgICAgdGhpcy5fc2hvdWxkR2VuZXJhdGVTb3VyY2VNYXApCiAgICAgIDogX2NvbnN0YW50T3JkZXJpbmcgPSBuZXcgQ29uc3RhbnRPcmRlcmluZyhfY2xvc2VkV29ybGQuc29ydGVyKSB7CiAgICB0aGlzLl9jb25zdGFudEVtaXR0ZXIgPSBuZXcgQ29uc3RhbnRFbWl0dGVyKAogICAgICAgIF9vcHRpb25zLAogICAgICAgIF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cywKICAgICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LAogICAgICAgIF9jbG9zZWRXb3JsZC5ydGlOZWVkLAogICAgICAgIHJ0aUVuY29kZXIsCiAgICAgICAgcnRpUmVjaXBlRW5jb2RlciwKICAgICAgICBfY2xvc2VkV29ybGQuZmllbGRBbmFseXNpcywKICAgICAgICBfZW1pdHRlciwKICAgICAgICB0aGlzLmdlbmVyYXRlQ29uc3RhbnRSZWZlcmVuY2UsCiAgICAgICAgY29uc3RhbnRMaXN0R2VuZXJhdG9yKTsKICB9CgogIGpzLkV4cHJlc3Npb24gY29uc3RhbnRMaXN0R2VuZXJhdG9yKGpzLkV4cHJlc3Npb24gYXJyYXkpIHsKICAgIC8vIFRPRE8oZmxvaXRzY2gpOiByZW1vdmUgaGFyZC1jb2RlZCBuYW1lLgogICAgcmV0dXJuIGpzLmpzKCdtYWtlQ29uc3RMaXN0KCMpJywgW2FycmF5XSk7CiAgfQoKICBib29sIGlzQ29uc3RhbnRJbmxpbmVkT3JBbHJlYWR5RW1pdHRlZChDb25zdGFudFZhbHVlIGNvbnN0YW50KSB7CiAgICBpZiAoY29uc3RhbnQuaXNGdW5jdGlvbikgcmV0dXJuIHRydWU7IC8vIEFscmVhZHkgZW1pdHRlZC4KICAgIGlmIChjb25zdGFudC5pc1ByaW1pdGl2ZSkgcmV0dXJuIHRydWU7IC8vIElubGluZWQuCiAgICBpZiAoY29uc3RhbnQuaXNEdW1teSkgcmV0dXJuIHRydWU7IC8vIElubGluZWQuCiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLyBUT0RPKGZsb2l0c2NoKTogY29waWVkIGZyb20gT2xkRW1pdHRlci4gQWRqdXN0IG9yIHNoYXJlLgogIGludCBjb21wYXJlQ29uc3RhbnRzKENvbnN0YW50VmFsdWUgYSwgQ29uc3RhbnRWYWx1ZSBiKSB7CiAgICAvLyBJbmxpbmVkIGNvbnN0YW50cyBkb24ndCBhZmZlY3QgdGhlIG9yZGVyIGFuZCBzb21ldGltZXMgZG9uJ3QgZXZlbiBoYXZlCiAgICAvLyBuYW1lcy4KICAgIGludCBjbXAxID0gaXNDb25zdGFudElubGluZWRPckFscmVhZHlFbWl0dGVkKGEpID8gMCA6IDE7CiAgICBpbnQgY21wMiA9IGlzQ29uc3RhbnRJbmxpbmVkT3JBbHJlYWR5RW1pdHRlZChiKSA/IDAgOiAxOwogICAgaWYgKGNtcDEgKyBjbXAyIDwgMikgcmV0dXJuIGNtcDEgLSBjbXAyOwoKICAgIC8vIEVtaXQgY29uc3RhbnQgaW50ZXJjZXB0b3JzIGZpcnN0LiBDb25zdGFudCBpbnRlcmNlcHRvcnMgZm9yIHByaW1pdGl2ZXMKICAgIC8vIG1pZ2h0IGJlIHVzZWQgYnkgY29kZSB0aGF0IGJ1aWxkcyBvdGhlciBjb25zdGFudHMuICBTZWUgSXNzdWUgMTgxNzMuCiAgICBpZiAoYS5pc0ludGVyY2VwdG9yICE9IGIuaXNJbnRlcmNlcHRvcikgewogICAgICByZXR1cm4gYS5pc0ludGVyY2VwdG9yID8gLTEgOiAxOwogICAgfQoKICAgIC8vIFNvcnRpbmcgYnkgdGhlIGxvbmcgbmFtZSBjbHVzdGVycyBjb25zdGFudHMgd2l0aCB0aGUgc2FtZSBjb25zdHJ1Y3RvcgogICAgLy8gd2hpY2ggY29tcHJlc3NlcyBhIHRpbnkgYml0IGJldHRlci4KICAgIGludCByID0gX25hbWVyLmNvbnN0YW50TG9uZ05hbWUoYSkuY29tcGFyZVRvKF9uYW1lci5jb25zdGFudExvbmdOYW1lKGIpKTsKICAgIGlmIChyICE9IDApIHJldHVybiByOwoKICAgIC8vIFJlc29sdmUgY29sbGlzaW9ucyBpbiB0aGUgbG9uZyBuYW1lIGJ5IHVzaW5nIGEgc3RydWN0dXJhbCBvcmRlci4KICAgIHJldHVybiBfY29uc3RhbnRPcmRlcmluZy5jb21wYXJlKGEsIGIpOwogIH0KCiAganMuRXhwcmVzc2lvbiBnZW5lcmF0ZUNvbnN0YW50UmVmZXJlbmNlKENvbnN0YW50VmFsdWUgdmFsdWUpIHsKICAgIGlmICh2YWx1ZS5pc0Z1bmN0aW9uKSB7CiAgICAgIEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZSBmdW5jdGlvbkNvbnN0YW50ID0gdmFsdWU7CiAgICAgIHJldHVybiBfZW1pdHRlci5zdGF0aWNDbG9zdXJlQWNjZXNzKGZ1bmN0aW9uQ29uc3RhbnQuZWxlbWVudCk7CiAgICB9CgogICAgLy8gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgImlzSW5saW5lZCIgcGFydCwgYnV0IGl0IGRvZXMgbm90IGh1cnQgdG8KICAgIC8vIHRlc3QgZm9yIHRoZSBvdGhlciBwcmVkaWNhdGVzLgogICAgaWYgKGlzQ29uc3RhbnRJbmxpbmVkT3JBbHJlYWR5RW1pdHRlZCh2YWx1ZSkpIHsKICAgICAgcmV0dXJuIF9jb25zdGFudEVtaXR0ZXIuZ2VuZXJhdGUodmFsdWUpOwogICAgfQogICAgcmV0dXJuIGpzLmpzKCcjLiMnLAogICAgICAgIFtfbmFtZXIuZ2xvYmFsT2JqZWN0Rm9yQ29uc3RhbnQodmFsdWUpLCBfbmFtZXIuY29uc3RhbnROYW1lKHZhbHVlKV0pOwogIH0KCiAgaW50IGVtaXRQcm9ncmFtKFByb2dyYW0gcHJvZ3JhbSwgQ29kZWdlbldvcmxkIGNvZGVnZW5Xb3JsZCkgewogICAgTWFpbkZyYWdtZW50IG1haW5GcmFnbWVudCA9IHByb2dyYW0uZnJhZ21lbnRzLmZpcnN0OwogICAgTGlzdDxEZWZlcnJlZEZyYWdtZW50PiBkZWZlcnJlZEZyYWdtZW50cyA9CiAgICAgICAgbmV3IExpc3Q8RGVmZXJyZWRGcmFnbWVudD4uZnJvbShwcm9ncmFtLmRlZmVycmVkRnJhZ21lbnRzKTsKCiAgICBGcmFnbWVudEVtaXR0ZXIgZnJhZ21lbnRFbWl0dGVyID0gbmV3IEZyYWdtZW50RW1pdHRlcigKICAgICAgICBfb3B0aW9ucywKICAgICAgICBfZHVtcEluZm9UYXNrLAogICAgICAgIF9uYW1lciwKICAgICAgICBfZW1pdHRlciwKICAgICAgICBfY29uc3RhbnRFbWl0dGVyLAogICAgICAgIHRoaXMsCiAgICAgICAgX2Nsb3NlZFdvcmxkLAogICAgICAgIGNvZGVnZW5Xb3JsZCk7CgogICAgdmFyIGRlZmVycmVkTG9hZGluZ1N0YXRlID0gbmV3IERlZmVycmVkTG9hZGluZ1N0YXRlKCk7CiAgICBqcy5TdGF0ZW1lbnQgbWFpbkNvZGUgPQogICAgICAgIGZyYWdtZW50RW1pdHRlci5lbWl0TWFpbkZyYWdtZW50KHByb2dyYW0sIGRlZmVycmVkTG9hZGluZ1N0YXRlKTsKCiAgICBNYXA8RGVmZXJyZWRGcmFnbWVudCwganMuRXhwcmVzc2lvbj4gZGVmZXJyZWRGcmFnbWVudHNDb2RlID0ge307CgogICAgZm9yIChEZWZlcnJlZEZyYWdtZW50IGZyYWdtZW50IGluIGRlZmVycmVkRnJhZ21lbnRzKSB7CiAgICAgIGpzLkV4cHJlc3Npb24gdHlwZXMgPQogICAgICAgICAgcHJvZ3JhbS5tZXRhZGF0YVR5cGVzRm9yT3V0cHV0VW5pdChmcmFnbWVudC5vdXRwdXRVbml0KTsKICAgICAganMuRXhwcmVzc2lvbiBmcmFnbWVudENvZGUgPSBmcmFnbWVudEVtaXR0ZXIuZW1pdERlZmVycmVkRnJhZ21lbnQoCiAgICAgICAgICBmcmFnbWVudCwgdHlwZXMsIHByb2dyYW0uaG9sZGVycyk7CiAgICAgIGlmIChmcmFnbWVudENvZGUgIT0gbnVsbCkgewogICAgICAgIGRlZmVycmVkRnJhZ21lbnRzQ29kZVtmcmFnbWVudF0gPSBmcmFnbWVudENvZGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb21pdHRlZEZyYWdtZW50cy5hZGQoZnJhZ21lbnQpOwogICAgICB9CiAgICB9CgogICAganMuVG9rZW5Db3VudGVyIGNvdW50ZXIgPSBuZXcganMuVG9rZW5Db3VudGVyKCk7CiAgICBkZWZlcnJlZEZyYWdtZW50c0NvZGUudmFsdWVzLmZvckVhY2goY291bnRlci5jb3VudFRva2Vucyk7CiAgICBjb3VudGVyLmNvdW50VG9rZW5zKG1haW5Db2RlKTsKCiAgICBwcm9ncmFtLmZpbmFsaXplcnMuZm9yRWFjaCgoanMuVG9rZW5GaW5hbGl6ZXIgZikgPT4gZi5maW5hbGl6ZVRva2VucygpKTsKCiAgICAvLyBUT0RPKHNyYSk6IFRoaXMgaXMgd2hlcmUgd2Uga25vdyBpZiB0aGUgdHlwZXMgKGFuZCBwb3RlbnRpYWxseSBvdGhlcgogICAgLy8gZGVmZXJyZWQgQVNUcyBpbnNpZGUgdGhlIHBhcnRzKSBoYXZlIGFueSBjb250ZW50cy4gV2Ugc2hvdWxkIHdhaXQgdW50aWwKICAgIC8vIHRoaXMgcG9pbnQgdG8gZGVjaWRlIGlmIGEgcGFydCBpcyBlbXB0eS4KCiAgICBNYXA8RGVmZXJyZWRGcmFnbWVudCwgU3RyaW5nPiBodW5rSGFzaGVzID0KICAgICAgICBfdGFzay5tZWFzdXJlU3VidGFzaygnd3JpdGUgZnJhZ21lbnRzJywgKCkgewogICAgICByZXR1cm4gd3JpdGVEZWZlcnJlZEZyYWdtZW50cyhkZWZlcnJlZEZyYWdtZW50c0NvZGUpOwogICAgfSk7CgogICAgLy8gTm93IHRoYXQgd2UgaGF2ZSB3cml0dGVuIHRoZSBkZWZlcnJlZCBodW5rcywgd2UgY2FuIGNyZWF0ZSB0aGUgZGVmZXJyZWQKICAgIC8vIGxvYWRpbmcgZGF0YS4KICAgIGZyYWdtZW50RW1pdHRlci5maW5hbGl6ZURlZmVycmVkTG9hZGluZ0RhdGEoCiAgICAgICAgcHJvZ3JhbS5sb2FkTWFwLCBodW5rSGFzaGVzLCBkZWZlcnJlZExvYWRpbmdTdGF0ZSk7CgogICAgX3Rhc2subWVhc3VyZVN1YnRhc2soJ3dyaXRlIGZyYWdtZW50cycsICgpIHsKICAgICAgd3JpdGVNYWluRnJhZ21lbnQobWFpbkZyYWdtZW50LCBtYWluQ29kZSwKICAgICAgICAgIGlzU3BsaXQ6IHByb2dyYW0uZGVmZXJyZWRGcmFnbWVudHMuaXNOb3RFbXB0eSB8fAogICAgICAgICAgICAgIHByb2dyYW0uaGFzU29mdERlZmVycmVkQ2xhc3NlcyB8fAogICAgICAgICAgICAgIF9vcHRpb25zLmV4cGVyaW1lbnRhbFRyYWNrQWxsb2NhdGlvbnMpOwogICAgfSk7CgogICAgaWYgKF9jbG9zZWRXb3JsZC5iYWNrZW5kVXNhZ2UucmVxdWlyZXNQcmVhbWJsZSAmJgogICAgICAgICFfY2xvc2VkV29ybGQuYmFja2VuZFVzYWdlLmlzSHRtbExvYWRlZCkgewogICAgICBfcmVwb3J0ZXIucmVwb3J0SGludE1lc3NhZ2UoTk9fTE9DQVRJT05fU1BBTk5BQkxFLCBNZXNzYWdlS2luZC5QUkVBTUJMRSk7CiAgICB9CgogICAgaWYgKF9vcHRpb25zLmRlZmVycmVkTWFwVXJpICE9IG51bGwpIHsKICAgICAgd3JpdGVEZWZlcnJlZE1hcCgpOwogICAgfQoKICAgIC8vIFJldHVybiB0aGUgdG90YWwgcHJvZ3JhbSBzaXplLgogICAgcmV0dXJuIG91dHB1dEJ1ZmZlcnMudmFsdWVzLmZvbGQoMCwgKGEsIGIpID0+IGEgKyBiLmxlbmd0aCk7CiAgfQoKICAvLy8gR2VuZXJhdGVzIGEgc2ltcGxlIGhlYWRlciB0aGF0IHByb3ZpZGVzIHRoZSBjb21waWxlcidzIGJ1aWxkIGlkLgogIGpzLkNvbW1lbnQgYnVpbGRHZW5lcmF0ZWRCeSgpIHsKICAgIFN0cmluZ0J1ZmZlciBmbGF2b3IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBmbGF2b3Iud3JpdGUoJ2Zhc3Qgc3RhcnR1cCBlbWl0dGVyJyk7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhpcyBmbGF2b3IuCiAgICBmbGF2b3Iud3JpdGUoJywgc3Ryb25nJyk7CiAgICBpZiAoX29wdGlvbnMudHJ1c3RQcmltaXRpdmVzKSBmbGF2b3Iud3JpdGUoJywgdHJ1c3QgcHJpbWl0aXZlcycpOwogICAgaWYgKF9vcHRpb25zLm9taXRJbXBsaWNpdENoZWNrcykgZmxhdm9yLndyaXRlKCcsIG9taXQgY2hlY2tzJyk7CiAgICBpZiAoX29wdGlvbnMubGF4UnVudGltZVR5cGVUb1N0cmluZykgewogICAgICBmbGF2b3Iud3JpdGUoJywgbGF4IHJ1bnRpbWUgdHlwZScpOwogICAgfQogICAgaWYgKF9vcHRpb25zLnVzZUNvbnRlbnRTZWN1cml0eVBvbGljeSkgZmxhdm9yLndyaXRlKCcsIENTUCcpOwogICAgcmV0dXJuIG5ldyBqcy5Db21tZW50KGdlbmVyYXRlZEJ5KF9vcHRpb25zLCBmbGF2b3I6ICckZmxhdm9yJykpOwogIH0KCiAgLy8vIFdyaXRlcyBhbGwgZGVmZXJyZWQgZnJhZ21lbnQncyBjb2RlIGludG8gZmlsZXMuCiAgLy8vCiAgLy8vIFJldHVybnMgYSBtYXAgZnJvbSBmcmFnbWVudCB0byBpdHMgaGFzaGNvZGUgKGFzIHVzZWQgZm9yIHRoZSBkZWZlcnJlZAogIC8vLyBsaWJyYXJ5IGNvZGUpLgogIC8vLwogIC8vLyBVcGRhdGVzIHRoZSBzaGFyZWQgW291dHB1dEJ1ZmZlcnNdIGZpZWxkIHdpdGggdGhlIG91dHB1dC4KICBNYXA8RGVmZXJyZWRGcmFnbWVudCwgU3RyaW5nPiB3cml0ZURlZmVycmVkRnJhZ21lbnRzKAogICAgICBNYXA8RGVmZXJyZWRGcmFnbWVudCwganMuRXhwcmVzc2lvbj4gZnJhZ21lbnRzQ29kZSkgewogICAgTWFwPERlZmVycmVkRnJhZ21lbnQsIFN0cmluZz4gaHVua0hhc2hlcyA9IHt9OwoKICAgIGZyYWdtZW50c0NvZGUuZm9yRWFjaCgoRGVmZXJyZWRGcmFnbWVudCBmcmFnbWVudCwganMuRXhwcmVzc2lvbiBjb2RlKSB7CiAgICAgIGh1bmtIYXNoZXNbZnJhZ21lbnRdID0gd3JpdGVEZWZlcnJlZEZyYWdtZW50KGZyYWdtZW50LCBjb2RlKTsKICAgIH0pOwoKICAgIHJldHVybiBodW5rSGFzaGVzOwogIH0KCiAganMuU3RhdGVtZW50IGJ1aWxkRGVmZXJyZWRJbml0aWFsaXplckdsb2JhbCgpIHsKICAgIHJldHVybiBqcy5qcy5zdGF0ZW1lbnQoCiAgICAgICAgJ3NlbGYuI2RlZmVycmVkSW5pdGlhbGl6ZXJzID0gJwogICAgICAgICdzZWxmLiNkZWZlcnJlZEluaXRpYWxpemVycyB8fCBPYmplY3QuY3JlYXRlKG51bGwpOycsCiAgICAgICAgeydkZWZlcnJlZEluaXRpYWxpemVycyc6IGRlZmVycmVkSW5pdGlhbGl6ZXJzR2xvYmFsfSk7CiAgfQoKICAvLyBXcml0ZXMgdGhlIGdpdmVuIFtmcmFnbWVudF0ncyBbY29kZV0gaW50byBhIGZpbGUuCiAgLy8KICAvLyBVcGRhdGVzIHRoZSBzaGFyZWQgW291dHB1dEJ1ZmZlcnNdIGZpZWxkIHdpdGggdGhlIG91dHB1dC4KICB2b2lkIHdyaXRlTWFpbkZyYWdtZW50KE1haW5GcmFnbWVudCBmcmFnbWVudCwganMuU3RhdGVtZW50IGNvZGUsCiAgICAgIHtib29sIGlzU3BsaXR9KSB7CiAgICBMb2NhdGlvbkNvbGxlY3RvciBsb2NhdGlvbkNvbGxlY3RvcjsKICAgIExpc3Q8Q29kZU91dHB1dExpc3RlbmVyPiBjb2RlT3V0cHV0TGlzdGVuZXJzOwogICAgaWYgKF9zaG91bGRHZW5lcmF0ZVNvdXJjZU1hcCkgewogICAgICBfdGFzay5tZWFzdXJlU3VidGFzaygnc291cmNlLW1hcHMnLCAoKSB7CiAgICAgICAgbG9jYXRpb25Db2xsZWN0b3IgPSBuZXcgTG9jYXRpb25Db2xsZWN0b3IoKTsKICAgICAgICBjb2RlT3V0cHV0TGlzdGVuZXJzID0gPENvZGVPdXRwdXRMaXN0ZW5lcj5bbG9jYXRpb25Db2xsZWN0b3JdOwogICAgICB9KTsKICAgIH0KCiAgICBDb2RlT3V0cHV0IG1haW5PdXRwdXQgPSBuZXcgU3RyZWFtQ29kZU91dHB1dCgKICAgICAgICBfb3V0cHV0UHJvdmlkZXIuY3JlYXRlT3V0cHV0U2luaygnJywgJ2pzJywgT3V0cHV0VHlwZS5qcyksCiAgICAgICAgY29kZU91dHB1dExpc3RlbmVycyk7CiAgICBvdXRwdXRCdWZmZXJzW2ZyYWdtZW50XSA9IG1haW5PdXRwdXQ7CgogICAganMuUHJvZ3JhbSBwcm9ncmFtID0gbmV3IGpzLlByb2dyYW0oWwogICAgICBidWlsZEdlbmVyYXRlZEJ5KCksCiAgICAgIG5ldyBqcy5Db21tZW50KEhPT0tTX0FQSV9VU0FHRSksCiAgICAgIGlzU3BsaXQgPyBidWlsZERlZmVycmVkSW5pdGlhbGl6ZXJHbG9iYWwoKSA6IG5ldyBqcy5CbG9jay5lbXB0eSgpLAogICAgICBjb2RlCiAgICBdKTsKCiAgICBDb2RlQnVmZmVyIGJ1ZmZlciA9IGpzLmNyZWF0ZUNvZGVCdWZmZXIoCiAgICAgICAgcHJvZ3JhbSwgX29wdGlvbnMsIF9zb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5LAogICAgICAgIG1vbml0b3I6IF9kdW1wSW5mb1Rhc2spOwogICAgX3Rhc2subWVhc3VyZVN1YnRhc2soJ2VtaXQgYnVmZmVycycsICgpIHsKICAgICAgbWFpbk91dHB1dC5hZGRCdWZmZXIoYnVmZmVyKTsKICAgIH0pOwoKICAgIGlmIChfc2hvdWxkR2VuZXJhdGVTb3VyY2VNYXApIHsKICAgICAgX3Rhc2subWVhc3VyZVN1YnRhc2soJ3NvdXJjZS1tYXBzJywgKCkgewogICAgICAgIG1haW5PdXRwdXQuYWRkKFNvdXJjZU1hcEJ1aWxkZXIuZ2VuZXJhdGVTb3VyY2VNYXBUYWcoCiAgICAgICAgICAgIF9vcHRpb25zLnNvdXJjZU1hcFVyaSwgX29wdGlvbnMub3V0cHV0VXJpKSk7CiAgICAgIH0pOwogICAgfQoKICAgIG1haW5PdXRwdXQuY2xvc2UoKTsKCiAgICBpZiAoX3Nob3VsZEdlbmVyYXRlU291cmNlTWFwKSB7CiAgICAgIF90YXNrLm1lYXN1cmVTdWJ0YXNrKCdzb3VyY2UtbWFwcycsICgpIHsKICAgICAgICBTb3VyY2VNYXBCdWlsZGVyLm91dHB1dFNvdXJjZU1hcCgKICAgICAgICAgICAgbWFpbk91dHB1dCwKICAgICAgICAgICAgbG9jYXRpb25Db2xsZWN0b3IsCiAgICAgICAgICAgIF9uYW1lci5jcmVhdGVNaW5pZmllZEdsb2JhbE5hbWVNYXAoKSwKICAgICAgICAgICAgX25hbWVyLmNyZWF0ZU1pbmlmaWVkSW5zdGFuY2VOYW1lTWFwKCksCiAgICAgICAgICAgICcnLAogICAgICAgICAgICBfb3B0aW9ucy5zb3VyY2VNYXBVcmksCiAgICAgICAgICAgIF9vcHRpb25zLm91dHB1dFVyaSwKICAgICAgICAgICAgX291dHB1dFByb3ZpZGVyKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICAvLyBXcml0ZXMgdGhlIGdpdmVuIFtmcmFnbWVudF0ncyBbY29kZV0gaW50byBhIGZpbGUuCiAgLy8KICAvLyBSZXR1cm5zIHRoZSBkZWZlcnJlZCBmcmFnbWVudCdzIGhhc2guCiAgLy8KICAvLyBVcGRhdGVzIHRoZSBzaGFyZWQgW291dHB1dEJ1ZmZlcnNdIGZpZWxkIHdpdGggdGhlIG91dHB1dC4KICBTdHJpbmcgd3JpdGVEZWZlcnJlZEZyYWdtZW50KERlZmVycmVkRnJhZ21lbnQgZnJhZ21lbnQsIGpzLkV4cHJlc3Npb24gY29kZSkgewogICAgTGlzdDxDb2RlT3V0cHV0TGlzdGVuZXI+IG91dHB1dExpc3RlbmVycyA9IFtdOwogICAgSGFzaGVyIGhhc2hlciA9IG5ldyBIYXNoZXIoKTsKICAgIG91dHB1dExpc3RlbmVycy5hZGQoaGFzaGVyKTsKCiAgICBMb2NhdGlvbkNvbGxlY3RvciBsb2NhdGlvbkNvbGxlY3RvcjsKICAgIGlmIChfc2hvdWxkR2VuZXJhdGVTb3VyY2VNYXApIHsKICAgICAgX3Rhc2subWVhc3VyZVN1YnRhc2soJ3NvdXJjZS1tYXBzJywgKCkgewogICAgICAgIGxvY2F0aW9uQ29sbGVjdG9yID0gbmV3IExvY2F0aW9uQ29sbGVjdG9yKCk7CiAgICAgICAgb3V0cHV0TGlzdGVuZXJzLmFkZChsb2NhdGlvbkNvbGxlY3Rvcik7CiAgICAgIH0pOwogICAgfQoKICAgIFN0cmluZyBodW5rUHJlZml4ID0gZnJhZ21lbnQub3V0cHV0RmlsZU5hbWU7CgogICAgQ29kZU91dHB1dCBvdXRwdXQgPSBuZXcgU3RyZWFtQ29kZU91dHB1dCgKICAgICAgICBfb3V0cHV0UHJvdmlkZXIuY3JlYXRlT3V0cHV0U2luaygKICAgICAgICAgICAgaHVua1ByZWZpeCwgZGVmZXJyZWRFeHRlbnNpb24sIE91dHB1dFR5cGUuanNQYXJ0KSwKICAgICAgICBvdXRwdXRMaXN0ZW5lcnMpOwoKICAgIG91dHB1dEJ1ZmZlcnNbZnJhZ21lbnRdID0gb3V0cHV0OwoKICAgIC8vIFRoZSBbY29kZV0gY29udGFpbnMgdGhlIGZ1bmN0aW9uIHRoYXQgbXVzdCBiZSBpbnZva2VkIHdoZW4gdGhlIGRlZmVycmVkCiAgICAvLyBodW5rIGlzIGxvYWRlZC4KICAgIC8vIFRoYXQgZnVuY3Rpb24gbXVzdCBiZSBpbiBhIG1hcCBmcm9tIGl0cyBoYXNoY29kZSB0byB0aGUgZnVuY3Rpb24uIFNpbmNlCiAgICAvLyB3ZSBkb24ndCBrbm93IHRoZSBoYXNoIGJlZm9yZSB3ZSBhY3R1YWxseSBlbWl0IHRoZSBjb2RlIHdlIHN0b3JlIHRoZQogICAgLy8gZnVuY3Rpb24gaW4gYSB0ZW1wb3JhcnkgZmllbGQgZmlyc3Q6CiAgICAvLwogICAgLy8gICBkZWZlcnJlZEluaXRpYWxpemVyLmN1cnJlbnQgPSA8cHJldHR5LXByaW50ZWQgY29kZT47CiAgICAvLyAgIGRlZmVycmVkSW5pdGlhbGl6ZXJbPGhhc2g+XSA9IGRlZmVycmVkSW5pdGlhbGl6ZXIuY3VycmVudDsKCiAgICBqcy5Qcm9ncmFtIHByb2dyYW0gPSBuZXcganMuUHJvZ3JhbShbCiAgICAgIGJ1aWxkR2VuZXJhdGVkQnkoKSwKICAgICAgYnVpbGREZWZlcnJlZEluaXRpYWxpemVyR2xvYmFsKCksCiAgICAgIGpzLmpzLnN0YXRlbWVudCgnJGRlZmVycmVkSW5pdGlhbGl6ZXJzR2xvYmFsLmN1cnJlbnQgPSAjJywgY29kZSkKICAgIF0pOwoKICAgIENvZGVCdWZmZXIgYnVmZmVyID0ganMuY3JlYXRlQ29kZUJ1ZmZlcigKICAgICAgICBwcm9ncmFtLCBfb3B0aW9ucywgX3NvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3ksCiAgICAgICAgbW9uaXRvcjogX2R1bXBJbmZvVGFzayk7CiAgICBfdGFzay5tZWFzdXJlU3VidGFzaygnZW1pdCBidWZmZXJzJywgKCkgewogICAgICBvdXRwdXQuYWRkQnVmZmVyKGJ1ZmZlcik7CiAgICB9KTsKCiAgICAvLyBNYWtlIGEgdW5pcXVlIGhhc2ggb2YgdGhlIGNvZGUgKGJlZm9yZSB0aGUgc291cmNlbWFwcyBhcmUgYWRkZWQpCiAgICAvLyBUaGlzIHdpbGwgYmUgdXNlZCB0byByZXRyaWV2ZSB0aGUgaW5pdGlhbGl6aW5nIGZ1bmN0aW9uIGZyb20gdGhlIGdsb2JhbAogICAgLy8gdmFyaWFibGUuCiAgICBTdHJpbmcgaGFzaCA9IGhhc2hlci5nZXRIYXNoKCk7CgogICAgLy8gTm93IHdlIGNvcHkgdGhlIGRlZmVycmVkSW5pdGlhbGl6ZXIuY3VycmVudCBpbnRvIGl0cyBjb3JyZWN0IGhhc2guCiAgICBvdXRwdXQuYWRkKCdcbiR7ZGVmZXJyZWRJbml0aWFsaXplcnNHbG9iYWx9WyIkaGFzaCJdID0gJwogICAgICAgICcke2RlZmVycmVkSW5pdGlhbGl6ZXJzR2xvYmFsfS5jdXJyZW50Jyk7CgogICAgaWYgKF9zaG91bGRHZW5lcmF0ZVNvdXJjZU1hcCkgewogICAgICBfdGFzay5tZWFzdXJlU3VidGFzaygnc291cmNlLW1hcHMnLCAoKSB7CiAgICAgICAgVXJpIG1hcFVyaSwgcGFydFVyaTsKICAgICAgICBVcmkgc291cmNlTWFwVXJpID0gX29wdGlvbnMuc291cmNlTWFwVXJpOwogICAgICAgIFVyaSBvdXRwdXRVcmkgPSBfb3B0aW9ucy5vdXRwdXRVcmk7CiAgICAgICAgU3RyaW5nIHBhcnROYW1lID0gIiRodW5rUHJlZml4LiRwYXJ0RXh0ZW5zaW9uIjsKICAgICAgICBTdHJpbmcgaHVua0ZpbGVOYW1lID0gIiRodW5rUHJlZml4LiRkZWZlcnJlZEV4dGVuc2lvbiI7CgogICAgICAgIGlmIChzb3VyY2VNYXBVcmkgIT0gbnVsbCkgewogICAgICAgICAgU3RyaW5nIG1hcEZpbGVOYW1lID0gaHVua0ZpbGVOYW1lICsgIi5tYXAiOwogICAgICAgICAgTGlzdDxTdHJpbmc+IG1hcFNlZ21lbnRzID0gc291cmNlTWFwVXJpLnBhdGhTZWdtZW50cy50b0xpc3QoKTsKICAgICAgICAgIG1hcFNlZ21lbnRzW21hcFNlZ21lbnRzLmxlbmd0aCAtIDFdID0gbWFwRmlsZU5hbWU7CiAgICAgICAgICBtYXBVcmkgPSBfb3B0aW9ucy5zb3VyY2VNYXBVcmkucmVwbGFjZShwYXRoU2VnbWVudHM6IG1hcFNlZ21lbnRzKTsKICAgICAgICB9CgogICAgICAgIGlmIChvdXRwdXRVcmkgIT0gbnVsbCkgewogICAgICAgICAgTGlzdDxTdHJpbmc+IHBhcnRTZWdtZW50cyA9IG91dHB1dFVyaS5wYXRoU2VnbWVudHMudG9MaXN0KCk7CiAgICAgICAgICBwYXJ0U2VnbWVudHNbcGFydFNlZ21lbnRzLmxlbmd0aCAtIDFdID0gaHVua0ZpbGVOYW1lOwogICAgICAgICAgcGFydFVyaSA9IF9vcHRpb25zLm91dHB1dFVyaS5yZXBsYWNlKHBhdGhTZWdtZW50czogcGFydFNlZ21lbnRzKTsKICAgICAgICB9CgogICAgICAgIG91dHB1dC5hZGQoU291cmNlTWFwQnVpbGRlci5nZW5lcmF0ZVNvdXJjZU1hcFRhZyhtYXBVcmksIHBhcnRVcmkpKTsKICAgICAgICBvdXRwdXQuY2xvc2UoKTsKICAgICAgICBTb3VyY2VNYXBCdWlsZGVyLm91dHB1dFNvdXJjZU1hcChvdXRwdXQsIGxvY2F0aW9uQ29sbGVjdG9yLCB7fSwge30sCiAgICAgICAgICAgIHBhcnROYW1lLCBtYXBVcmksIHBhcnRVcmksIF9vdXRwdXRQcm92aWRlcik7CiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgb3V0cHV0LmNsb3NlKCk7CiAgICB9CgogICAgcmV0dXJuIGhhc2g7CiAgfQoKICAvLy8gV3JpdGVzIGEgbWFwcGluZyBmcm9tIGxpYnJhcnktbmFtZSB0byBodW5rIGZpbGVzLgogIC8vLwogIC8vLyBUaGUgb3V0cHV0IGlzIHdyaXR0ZW4gaW50byBhIHNlcGFyYXRlIGZpbGUgdGhhdCBjYW4gYmUgdXNlZCBieSBvdXRzaWRlCiAgLy8vIHRvb2xzLgogIHZvaWQgd3JpdGVEZWZlcnJlZE1hcCgpIHsKICAgIE1hcDxTdHJpbmcsIGR5bmFtaWM+IG1hcHBpbmcgPSB7fTsKICAgIC8vIEpzb24gZG9lcyBub3Qgc3VwcG9ydCBjb21tZW50cywgc28gd2UgZW1iZWQgdGhlIGV4cGxhbmF0aW9uIGluIHRoZQogICAgLy8gZGF0YS4KICAgIG1hcHBpbmdbIl9jb21tZW50Il0gPSAiVGhpcyBtYXBwaW5nIHNob3dzIHdoaWNoIGNvbXBpbGVkIGAuanNgIGZpbGVzIGFyZSAiCiAgICAgICAgIm5lZWRlZCBmb3IgYSBnaXZlbiBkZWZlcnJlZCBsaWJyYXJ5IGltcG9ydC4iOwogICAgbWFwcGluZy5hZGRBbGwoX2Nsb3NlZFdvcmxkLm91dHB1dFVuaXREYXRhLmNvbXB1dGVEZWZlcnJlZE1hcCgKICAgICAgICBfb3B0aW9ucywgX2Nsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgICBvbWl0dGVkVW5pdHM6CiAgICAgICAgICAgIG9taXR0ZWRGcmFnbWVudHMubWFwKChmcmFnbWVudCkgPT4gZnJhZ21lbnQub3V0cHV0VW5pdCkudG9TZXQoKSkpOwogICAgX291dHB1dFByb3ZpZGVyLmNyZWF0ZU91dHB1dFNpbmsoCiAgICAgICAgX29wdGlvbnMuZGVmZXJyZWRNYXBVcmkucGF0aCwgJycsIE91dHB1dFR5cGUuZGVmZXJyZWRNYXApCiAgICAgIC4uYWRkKGNvbnN0IEpzb25FbmNvZGVyLndpdGhJbmRlbnQoIiAgIikuY29udmVydChtYXBwaW5nKSkKICAgICAgLi5jbG9zZSgpOwogIH0KfQqBxQBOTjwBOgEoIAE3CR4gHB4cIB0dGBMTHhcSJBYfIQ8BPgElHCIlQk4fJyQrJEErQSEqM0kuNjFEHUYbJDoaRBgBHgEVIiYoJBYcGiQnIyw+ATs2ASoBUDMqAS41ATkBEBUWHBoTGRIVJyYmJUgxEiUpHhQaJBIoIAQBPS8vBAFDPjczEgQBPjtODj09LQFOTC4nBgFNK04aAUgsBAFBHDZFBgFPJjQvBhhOBAFAOS9EATsSFxASGg4WFwE7HEkBRQE7HENJLSI4DygIBgE1PyMBTQFMTzABLzU8CAFPFTE8ATEwOzA2CAE2M1AGASsaBgEmQQQBRyIuKjAeRkQrKgZCRQQBNgZMFQZAODwzAUxECAEXBAEyHCg+PwQBNwU/QxgpMiQvNUcKBgEyQx4qASoaJ0kLCAEtNyEuJAgBJC8+OQoGARgBJC8qGB8yNBAjIB4KBgQBNwUrBT9QMyIhASkkLzUwCgYBMQEuKj8aASYBTxdPTCwHPkQBKhooRwgBLTchLiAIAUhPESQBSj0yASQvHTIsOEABJDZJPU0KASFHQEwKAUwYTDkKDRYGAREEATgGTQ0cJ0oNTzdDMxZPJkJBEQQCAUJwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL3N0YXJ0dXBfZW1pdHRlci9tb2RlbF9lbWl0dGVyLmRhcnROc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfZW1pdHRlci9zdGFydHVwX2VtaXR0ZXIvZnJhZ21lbnRfZW1pdHRlci5kYXJ0wAE4Ay8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQyanMuanNfZW1pdHRlci5zdGFydHVwX2VtaXR0ZXIubW9kZWxfZW1pdHRlcjsKCi8vLyBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBzdG9yZXMgdGhlIHRlYXItb2ZmIGdldHRlciBvbiBhIHN0YXRpYwovLy8gZnVuY3Rpb24uCi8vLwovLy8gVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IHVzZWQgd2hlbiBpc29sYXRlcyBhcmUgdXNlZC4KLy8vCi8vLyBXaGVuIHNlcmlhbGl6aW5nIHN0YXRpYyBmdW5jdGlvbnMgd2UgdHJhbnNtaXQgdGhlCi8vLyBuYW1lIG9mIHRoZSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBub3QgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uJ3MgZ2V0dGVyLiBXZQovLy8gc3RvcmUgdGhlIGdldHRlci1mdW5jdGlvbiBvbiB0aGUgc3RhdGljIGZ1bmN0aW9uIGl0c2VsZiwgd2hpY2ggYWxsb3dzIHVzIHRvCi8vLyBmaW5kIGl0IGVhc2lseS4KY29uc3QgU3RyaW5nIHRlYXJPZmZQcm9wZXJ0eU5hbWUgPSByJyR0ZWFyT2ZmJzsKCi8vLyBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBzdG9yZXMgdGhlIGxpc3Qgb2YgZmllbGRzIG9uIGEgY29uc3RydWN0b3IuCi8vLwovLy8gVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IHVzZWQgd2hlbiBpc29sYXRlcyBhcmUgdXNlZC4KLy8vCi8vLyBXaGVuIHNlcmlhbGl6aW5nIG9iamVjdHMgd2UgZXh0cmFjdCBhbGwgZmllbGRzIGZyb20gYW55IGdpdmVuIG9iamVjdC4KLy8vIFdlIGV4dHJhY3QgdGhlIG5hbWVzIG9mIGFsbCBmaWVsZHMgZnJvbSBhIGZyZXNoIGVtcHR5IG9iamVjdC4gVGhpcyBsaXN0Ci8vLyBpcyBjYWNoZWQgb24gdGhlIGNvbnN0cnVjdG9yIGluIHRoaXMgcHJvcGVydHkgdG8gdG8gYXZvaWQgdG9vIG1hbnkKLy8vIGFsbG9jYXRpb25zLgpjb25zdCBTdHJpbmcgY2FjaGVkQ2xhc3NGaWVsZE5hbWVzID0gcickY2FjaGVkRmllbGROYW1lcyc7CgovLy8gVGhlIGZhc3Qgc3RhcnR1cCBlbWl0dGVyJ3MgZ29hbCBpcyB0byBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIHdvcmsgdGhhdCB0aGUKLy8vIEphdmFTY3JpcHQgZW5naW5lIGhhcyB0byBkbyBiZWZvcmUgaXQgY2FuIHN0YXJ0IHJ1bm5pbmcgdXNlciBjb2RlLgovLy8KLy8vIFdoZW5ldmVyIHBvc3NpYmxlLCB0aGUgZW1pdHRlciB1c2VzIG9iamVjdCBsaXRlcmFscyBpbnN0ZWFkIG9mIHVwZGF0aW5nCi8vLyBvYmplY3RzLgovLy8KLy8vIEV4YW1wbGU6Ci8vLwovLy8gICAgIC8vIEhvbGRlcnMgYXJlIGluaXRpYWxpemVkIGRpcmVjdGx5IHdpdGggdGhlIGNsYXNzZXMgYW5kIHN0YXRpYwovLy8gICAgIC8vIGZ1bmN0aW9ucy4KLy8vICAgICB2YXIgQSA9IHsgUG9pbnQ6IGZ1bmN0aW9uIFBvaW50KHgsIHkpIHsgdGhpcy54ID0geDsgdGhpcy55ID0geSB9LAovLy8gICAgICAgICAgICAgICBzb21lU3RhdGljRnVuY3Rpb246IGZ1bmN0aW9uIHNvbWVTdGF0aWNGdW5jdGlvbigpIHsgLi4uIH0gfTsKLy8vCi8vLyAgICAgLy8gQ2xhc3MtYmVoYXZpb3IgaXMgZW1pdHRlZCBpbiBhIHByb3RvdHlwZSBvYmplY3QgdGhhdCBpcyBkaXJlY3RseQovLy8gICAgIC8vIGFzc2lnbmVkOgovLy8gICAgIEEuUG9pbnQucHJvdG90eXBlID0geyBkaXN0YW5jZVRvOiBmdW5jdGlvbihvdGhlcikgeyAuLi4gfSB9OwovLy8KLy8vICAgICAvLyBJbmhlcml0YW5jZSBpcyBhY2hpZXZlZCBieSB1cGRhdGluZyB0aGUgcHJvdG90eXBlIG9iamVjdHMgKGhpZGRlbiBpbgovLy8gICAgIC8vIGEgaGVscGVyIGZ1bmN0aW9uKToKLy8vICAgICBBLlBvaW50LnByb3RvdHlwZS5fX3Byb3RvX18gPSBILk9iamVjdC5wcm90b3R5cGU7Ci8vLwovLy8gVGhlIGVtaXR0ZXIgZG9lc24ndCB0cnkgdG8gYmUgY2xldmVyIGFuZCBlbWl0cyBldmVyeXRoaW5nIGJlZm9yZWhhbmQuIFRoaXMKLy8vIGluY3JlYXNlcyB0aGUgb3V0cHV0IHNpemUsIGJ1dCBpbXByb3ZlcyBwZXJmb3JtYW5jZS4KLy8vCi8vIFRoZSBjb2RlIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IGFsbCBEYXJ0IGNvZGUgaXMgaW5zaWRlIGhvbGRlcnMuIEFzIHN1Y2gKLy8gd2UgY2FuIHVzZSAiZ2xvYmFsIiBuYW1lcyBob3dldmVyIHdlIHdhbnQuIEFzIGxvbmcgYXMgd2UgZG9uJ3Qgc2hhZG93Ci8vIEphdmFTY3JpcHQgdmFyaWFibGVzIChsaWtlIGBBcnJheWApIHdlIGFyZSBmcmVlIHRvIGNob3NlIHdoYXRldmVyIHZhcmlhYmxlCi8vIG5hbWVzIHdlIHdhbnQuIEZ1cnRoZXJtb3JlLCB0aGUgcHJldHR5LXByaW50ZXIgbWluaWZpZXMgbG9jYWwgdmFyaWFibGVzLCB0aHVzCi8vIHJlZHVjaW5nIHRoZWlyIHNpemUuCmNvbnN0IFN0cmluZyBtYWluQm9pbGVycGxhdGUgPSAnJycKKGZ1bmN0aW9uIGRhcnRQcm9ncmFtKCkgewovLyBDb3BpZXMgdGhlIG93biBwcm9wZXJ0aWVzIGZyb20gW2Zyb21dIHRvIFt0b10uCmZ1bmN0aW9uIGNvcHlQcm9wZXJ0aWVzKGZyb20sIHRvKSB7CiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhmcm9tKTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKICAgIHZhciBrZXkgPSBrZXlzW2ldOwogICAgdG9ba2V5XSA9IGZyb21ba2V5XTsKICB9Cn0KCi8vIE9ubHkgdXNlIGRpcmVjdCBwcm90byBhY2Nlc3MgdG8gY29uc3RydWN0IHRoZSBwcm90b3R5cGUgY2hhaW4gKGluc3RlYWQgb2YKLy8gY29weWluZyBwcm9wZXJ0aWVzKSBvbiBwbGF0Zm9ybXMgd2hlcmUgd2Uga25vdyBpdCB3b3JrcyB3ZWxsIChDaHJvbWUgLyBkOCkuCnZhciBzdXBwb3J0c0RpcmVjdFByb3RvQWNjZXNzID0gI2RpcmVjdEFjY2Vzc1Rlc3RFeHByZXNzaW9uOwoKLy8gU2V0cyB0aGUgbmFtZSBwcm9wZXJ0eSBvZiBmdW5jdGlvbnMsIGlmIHRoZSBKUyBlbmdpbmUgZG9lc24ndCBzZXQgdGhlIG5hbWUKLy8gaXRzZWxmLgovLyBBcyBvZiAyMDE4IG9ubHkgSUUxMSBkb2Vzbid0IHNldCB0aGUgbmFtZS4KZnVuY3Rpb24gc2V0RnVuY3Rpb25OYW1lc0lmTmVjZXNzYXJ5KGhvbGRlcnMpIHsKICBmdW5jdGlvbiB0KCl7fTsKICBpZiAodHlwZW9mIHQubmFtZSA9PSAic3RyaW5nIikgcmV0dXJuOwoKICBmb3IgKHZhciBpID0gMDsgaSA8IGhvbGRlcnMubGVuZ3RoOyBpKyspIHsKICAgIHZhciBob2xkZXIgPSBob2xkZXJzW2ldOwogICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhob2xkZXIpOwogICAgZm9yICh2YXIgaiA9IDA7IGogPCBrZXlzLmxlbmd0aDsgaisrKSB7CiAgICAgIHZhciBrZXkgPSBrZXlzW2pdOwogICAgICB2YXIgZiA9IGhvbGRlcltrZXldOwogICAgICBpZiAodHlwZW9mIGYgPT0gJ2Z1bmN0aW9uJykgZi5uYW1lID0ga2V5OwogICAgfQogIH0KfQoKLy8gTWFrZXMgW2Nsc10gaW5oZXJpdCBmcm9tIFtzdXBdLgovLyBPbiBDaHJvbWUsIEZpcmVmb3ggYW5kIHJlY2VudCBJRXMgdGhpcyBoYXBwZW5zIGJ5IHVwZGF0aW5nIHRoZSBpbnRlcm5hbAovLyBwcm90by1wcm9wZXJ0eSBvZiB0aGUgY2xhc3NlcyAncHJvdG90eXBlJyBmaWVsZC4KLy8gT2xkZXIgSUVzIHVzZSBgT2JqZWN0LmNyZWF0ZWAgYW5kIGNvcHkgb3ZlciB0aGUgcHJvcGVydGllcy4KZnVuY3Rpb24gaW5oZXJpdChjbHMsIHN1cCkgewogIC8vIE5vdGUgdGhhdCBSVEkgbmVlZHMgY2xzLm5hbWUsIGJ1dCB3ZSBkb24ndCBuZWVkIHRvIHNldCBpdCBhbnltb3JlLgogIGNscy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjbHM7CiAgY2xzLnByb3RvdHlwZVsjb3BlcmF0b3JJc1ByZWZpeCArIGNscy5uYW1lXSA9IGNsczsKCiAgLy8gVGhlIHN1cGVyY2xhc3MgaXMgb25seSBudWxsIGZvciB0aGUgRGFydCBPYmplY3QuCiAgaWYgKHN1cCAhPSBudWxsKSB7CiAgICBpZiAoc3VwcG9ydHNEaXJlY3RQcm90b0FjY2VzcykgewogICAgICAvLyBGaXJlZm94IGRvZXNuJ3QgbGlrZSB0byB1cGRhdGUgdGhlIHByb3RvdHlwZXMsIGJ1dCB3aGVuIHNldHRpbmcgdXAKICAgICAgLy8gdGhlIGhpZXJhcmNoeSBjaGFpbiBpdCdzIG9rLgogICAgICBjbHMucHJvdG90eXBlLl9fcHJvdG9fXyA9IHN1cC5wcm90b3R5cGU7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHZhciBjbHNQcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cC5wcm90b3R5cGUpOwogICAgY29weVByb3BlcnRpZXMoY2xzLnByb3RvdHlwZSwgY2xzUHJvdG90eXBlKTsKICAgIGNscy5wcm90b3R5cGUgPSBjbHNQcm90b3R5cGU7CiAgfQp9CgovLyBCYXRjaGVkIHZlcnNpb24gb2YgW2luaGVyaXRdIGZvciBtdWx0aXBsZSBjbGFzc2VzIGZyb20gb25lIHN1cGVyY2xhc3MuCmZ1bmN0aW9uIGluaGVyaXRNYW55KHN1cCwgY2xhc3NlcykgewogIGZvciAodmFyIGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkrKykgewogICAgaW5oZXJpdChjbGFzc2VzW2ldLCBzdXApOwogIH0KfQoKLy8gTWl4ZXMgaW4gdGhlIHByb3BlcnRpZXMgb2YgW21peGluXSBpbnRvIFtjbHNdLgpmdW5jdGlvbiBtaXhpbihjbHMsIG1peGluKSB7CiAgY29weVByb3BlcnRpZXMobWl4aW4ucHJvdG90eXBlLCBjbHMucHJvdG90eXBlKTsKICBjbHMucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY2xzOwp9CgovLyBDcmVhdGVzIGEgbGF6eSBmaWVsZC4KLy8KLy8gQSBsYXp5IGZpZWxkIGhhcyBhIHN0b3JhZ2UgZW50cnksIFtuYW1lXSwgd2hpY2ggaG9sZHMgdGhlIHZhbHVlLCBhbmQgYQovLyBnZXR0ZXIgKFtnZXR0ZXJOYW1lXSkgdG8gYWNjZXNzIHRoZSBmaWVsZC4gSWYgdGhlIGZpZWxkIHdhc24ndCBzZXQgYmVmb3JlCi8vIHRoZSBmaXJzdCBhY2Nlc3MsIGl0IGlzIGluaXRpYWxpemVkIHdpdGggdGhlIFtpbml0aWFsaXplcl0uCmZ1bmN0aW9uIGxhenkoaG9sZGVyLCBuYW1lLCBnZXR0ZXJOYW1lLCBpbml0aWFsaXplcikgewogIHZhciB1bmluaXRpYWxpemVkU2VudGluZWwgPSBob2xkZXI7CiAgaG9sZGVyW25hbWVdID0gdW5pbml0aWFsaXplZFNlbnRpbmVsOwogIGhvbGRlcltnZXR0ZXJOYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgaG9sZGVyW2dldHRlck5hbWVdID0gZnVuY3Rpb24oKSB7ICNjeWNsaWNUaHJvdyhuYW1lKSB9OwogICAgdmFyIHJlc3VsdDsKICAgIHZhciBzZW50aW5lbEluUHJvZ3Jlc3MgPSBpbml0aWFsaXplcjsKICAgIHRyeSB7CiAgICAgIGlmIChob2xkZXJbbmFtZV0gPT09IHVuaW5pdGlhbGl6ZWRTZW50aW5lbCkgewogICAgICAgIHJlc3VsdCA9IGhvbGRlcltuYW1lXSA9IHNlbnRpbmVsSW5Qcm9ncmVzczsKICAgICAgICByZXN1bHQgPSBob2xkZXJbbmFtZV0gPSBpbml0aWFsaXplcigpOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc3VsdCA9IGhvbGRlcltuYW1lXTsKICAgICAgfQogICAgfSBmaW5hbGx5IHsKICAgICAgLy8gVXNlIHRyeS1maW5hbGx5LCBub3QgdHJ5LWNhdGNoL3Rocm93IGFzIGl0IGRlc3Ryb3lzIHRoZSBzdGFjawogICAgICAvLyB0cmFjZS4KICAgICAgaWYgKHJlc3VsdCA9PT0gc2VudGluZWxJblByb2dyZXNzKSB7CiAgICAgICAgLy8gVGhlIGxhenkgc3RhdGljIChob2xkZXJbbmFtZV0pIG1pZ2h0IGhhdmUgYmVlbiBzZXQgdG8gYSBkaWZmZXJlbnQKICAgICAgICAvLyB2YWx1ZS4gQWNjb3JkaW5nIHRvIHNwZWMgd2Ugc3RpbGwgaGF2ZSB0byByZXNldCBpdCB0byBudWxsLCBpZgogICAgICAgIC8vIHRoZSBpbml0aWFsaXphdGlvbiBmYWlsZWQuCiAgICAgICAgaG9sZGVyW25hbWVdID0gbnVsbDsKICAgICAgfQogICAgICAvLyBUT0RPKGZsb2l0c2NoKTogZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgdGhlIGZ1bmN0aW9uIHNob3VsZCBwcm9iYWJseQogICAgICAvLyBiZSB1bmlxdWUgZm9yIGVhY2ggc3RhdGljLgogICAgICBob2xkZXJbZ2V0dGVyTmFtZV0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXNbbmFtZV07IH07CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH07Cn0KCi8vIEdpdmVuIGEgbGlzdCwgbWFya3MgaXQgYXMgY29uc3RhbnQuCi8vCi8vIFRoZSBydW50aW1lIGVuc3VyZXMgdGhhdCBjb25zdC1saXN0cyBjYW5ub3QgYmUgbW9kaWZpZWQuCmZ1bmN0aW9uIG1ha2VDb25zdExpc3QobGlzdCkgewogIC8vIEJ5IGFzc2lnbmluZyBhIGZ1bmN0aW9uIHRvIHRoZSBwcm9wZXJ0aWVzIHRoZXkgYmVjb21lIHBhcnQgb2YgdGhlCiAgLy8gaGlkZGVuIGNsYXNzLiBUaGUgYWN0dWFsIHZhbHVlcyBvZiB0aGUgZmllbGRzIGRvbid0IG1hdHRlciwgc2luY2Ugd2UKICAvLyBvbmx5IGNoZWNrIGlmIHRoZXkgZXhpc3QuCiAgbGlzdC5pbW11dGFibGVcJGxpc3QgPSBBcnJheTsKICBsaXN0LmZpeGVkXCRsZW5ndGggPSBBcnJheTsKICByZXR1cm4gbGlzdDsKfQoKZnVuY3Rpb24gY29udmVydFRvRmFzdE9iamVjdChwcm9wZXJ0aWVzKSB7CiAgLy8gQ3JlYXRlIGFuIGluc3RhbmNlIHRoYXQgdXNlcyAncHJvcGVydGllcycgYXMgcHJvdG90eXBlLiBUaGlzIHNob3VsZAogIC8vIG1ha2UgJ3Byb3BlcnRpZXMnIGEgZmFzdCBvYmplY3QuCiAgZnVuY3Rpb24gdCgpIHt9CiAgdC5wcm90b3R5cGUgPSBwcm9wZXJ0aWVzOwogIG5ldyB0KCk7CiAgcmV0dXJuIHByb3BlcnRpZXM7Cn0KCmZ1bmN0aW9uIGNvbnZlcnRBbGxUb0Zhc3RPYmplY3QoYXJyYXlPZk9iamVjdHMpIHsKICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZPYmplY3RzLmxlbmd0aDsgKytpKSB7CiAgICBjb252ZXJ0VG9GYXN0T2JqZWN0KGFycmF5T2ZPYmplY3RzW2ldKTsKICB9Cn0KCi8vIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBieSB0aGUgdGVhck9mZkNvZGUgdG8gZ3VhcmFudGVlIHVuaXF1ZSBmdW5jdGlvbnMgcGVyCi8vIHRlYXItb2Zmcy4KdmFyIGZ1bmN0aW9uQ291bnRlciA9IDA7CiN0ZWFyT2ZmQ29kZTsKCi8vIEVhY2ggZGVmZXJyZWQgaHVuayBjb21lcyB3aXRoIGl0cyBvd24gdHlwZXMgd2hpY2ggYXJlIGFkZGVkIHRvIHRoZSBlbmQKLy8gb2YgdGhlIHR5cGVzLWFycmF5LgovLyBUaGUgYGZ1blR5cGVzYCBwYXNzZWQgdG8gdGhlIGBpbnN0YWxsVGVhck9mZmAgZnVuY3Rpb24gYmVsb3cgaXMgcmVsYXRpdmUgdG8KLy8gdGhlIGh1bmsgdGhlIGZ1bmN0aW9uIGNvbWVzIGZyb20uIFRoZSBgdHlwZXNPZmZzZXRgIHZhcmlhYmxlIGVuY29kZXMgdGhlCi8vIG9mZnNldCBhdCB3aGljaCB0aGUgbmV3IHR5cGVzIHdpbGwgYmUgYWRkZWQuCnZhciB0eXBlc09mZnNldCA9IDA7CgovLyBBZGFwdHMgdGhlIHN0b3JlZCBkYXRhLCBzbyBpdCdzIHN1aXRhYmxlIGZvciBhIHRlYXJPZmYgY2FsbC4KLy8KLy8gU3RvcmVzIHRoZSB0ZWFyLW9mZiBnZXR0ZXItZnVuY3Rpb24gaW4gdGhlIFtjb250YWluZXJdJ3MgW2dldHRlck5hbWVdCi8vIHByb3BlcnR5LgovLwovLyBUaGUgW2NvbnRhaW5lcl0gaXMgZWl0aGVyIGEgY2xhc3MgKHRoYXQgaXMsIGl0cyBwcm90b3R5cGUpLCBvciB0aGUgaG9sZGVyIGZvcgovLyBzdGF0aWMgZnVuY3Rpb25zLgovLwovLyBUaGUgYXJndW1lbnQgW2Z1bnNPck5hbWVzXSBpcyBhbiBhcnJheSBvZiBzdHJpbmdzIG9yIGZ1bmN0aW9ucy4gSWYgaXQgaXMgYQovLyBuYW1lLCB0aGVuIHRoZSBmdW5jdGlvbiBzaG91bGQgYmUgZmV0Y2hlZCBmcm9tIHRoZSBjb250YWluZXIuIFRoZSBmaXJzdAovLyBlbnRyeSBpbiB0aGF0IGFycmF5ICptdXN0KiBiZSBhIHN0cmluZy4KLy8KLy8gVE9ETyhmbG9pdHNjaCk6IENoYW5nZSB0ZWFyT2ZmQ29kZSB0byBhY2NlcHQgdGhlIGRhdGEgZGlyZWN0bHksIG9yIGNyZWF0ZSBhCi8vIGRpZmZlcmVudCB0ZWFyT2ZmQ29kZT8KZnVuY3Rpb24gaW5zdGFsbFRlYXJPZmYoCiAgICBjb250YWluZXIsIGdldHRlck5hbWUsIGlzU3RhdGljLCBpc0ludGVyY2VwdGVkLCByZXF1aXJlZFBhcmFtZXRlckNvdW50LAogICAgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzLCBjYWxsTmFtZXMsIGZ1bnNPck5hbWVzLCBmdW5UeXBlLCBhcHBseUluZGV4KSB7CiAgLy8gQSBmdW5jdGlvbiBjYW4gaGF2ZSBzZXZlcmFsIHN0dWJzIChmb3IgZXhhbXBsZSB0byBmaWxsIGluIG9wdGlvbmFsCiAgLy8gYXJndW1lbnRzKS4gV2UgY29sbGVjdCB0aGVzZSBmdW5jdGlvbnMgaW4gdGhlIGBmdW5zYCBhcnJheS4KICB2YXIgZnVucyA9IFtdOwogIGZvciAodmFyIGkgPSAwOyBpIDwgZnVuc09yTmFtZXMubGVuZ3RoOyBpKyspIHsKICAgIHZhciBmdW4gPSBmdW5zT3JOYW1lc1tpXTsKICAgIGlmICgodHlwZW9mIGZ1bikgPT0gJ3N0cmluZycpIGZ1biA9IGNvbnRhaW5lcltmdW5dOwogICAgZnVuLiNjYWxsTmFtZSA9IGNhbGxOYW1lc1tpXTsKICAgIGZ1bnMucHVzaChmdW4pOwogIH0KCiAgLy8gVGhlIG1haW4gZnVuY3Rpb24gdG8gd2hpY2ggYWxsIHN0dWJzIHJlZGlyZWN0LgogIHZhciBmdW4gPSBmdW5zWzBdOwoKICBmdW5bI2FyZ3VtZW50Q291bnRdID0gcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDsKICBmdW5bI2RlZmF1bHRBcmd1bWVudFZhbHVlc10gPSBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXM7CiAgdmFyIHJlZmxlY3Rpb25JbmZvID0gZnVuVHlwZTsKICBpZiAodHlwZW9mIHJlZmxlY3Rpb25JbmZvID09ICJudW1iZXIiKSB7CiAgICAvLyBUaGUgcmVmbGVjdGlvbkluZm8gY2FuIGVpdGhlciBiZSBhIGZ1bmN0aW9uLCBvciBhIHBvaW50ZXIgaW50byB0aGUgdHlwZXMKICAgIC8vIHRhYmxlLiBJZiBpdCBwb2ludHMgaW50byB0aGUgdHlwZXMtdGFibGUgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGluZGV4LAogICAgLy8gaW4gY2FzZSB0aGUgdGVhci1vZmYgaXMgcGFydCBvZiBhIGRlZmVycmVkIGh1bmsuCiAgICByZWZsZWN0aW9uSW5mbyA9IHJlZmxlY3Rpb25JbmZvICsgdHlwZXNPZmZzZXQ7CiAgfQogIHZhciBuYW1lID0gZnVuc09yTmFtZXNbMF07CiAgZnVuLiNzdHViTmFtZSA9IG5hbWU7CiAgdmFyIGdldHRlckZ1bmN0aW9uID0KICAgICAgdGVhck9mZihmdW5zLCBhcHBseUluZGV4IHx8IDAsIHJlZmxlY3Rpb25JbmZvLCBpc1N0YXRpYywgbmFtZSwgaXNJbnRlcmNlcHRlZCk7CiAgY29udGFpbmVyW2dldHRlck5hbWVdID0gZ2V0dGVyRnVuY3Rpb247CiAgaWYgKGlzU3RhdGljKSB7CiAgICBmdW4uJHRlYXJPZmZQcm9wZXJ0eU5hbWUgPSBnZXR0ZXJGdW5jdGlvbjsKICB9Cn0KCmZ1bmN0aW9uIGluc3RhbGxTdGF0aWNUZWFyT2ZmKAogICAgY29udGFpbmVyLCBnZXR0ZXJOYW1lLAogICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzLAogICAgY2FsbE5hbWVzLCBmdW5zT3JOYW1lcywgZnVuVHlwZSwgYXBwbHlJbmRleCkgewogIC8vIFRPRE8oc3JhKTogU3BlY2lhbGl6ZSBpbnN0YWxsVGVhck9mZiBmb3Igc3RhdGljIG1ldGhvZHMuIEl0IG1pZ2h0IGJlCiAgLy8gcG9zc2libGUgdG8gaGFuZGxlIHNvbWUgdmVyeSBjb21tb24gc2ltcGxlIGNhc2VzIGRpcmVjdGx5LgogIHJldHVybiBpbnN0YWxsVGVhck9mZigKICAgICAgY29udGFpbmVyLCBnZXR0ZXJOYW1lLCB0cnVlLCBmYWxzZSwKICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzLAogICAgICBjYWxsTmFtZXMsIGZ1bnNPck5hbWVzLCBmdW5UeXBlLCBhcHBseUluZGV4KTsKfQoKZnVuY3Rpb24gaW5zdGFsbEluc3RhbmNlVGVhck9mZigKICAgIGNvbnRhaW5lciwgZ2V0dGVyTmFtZSwgaXNJbnRlcmNlcHRlZCwKICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgIGNhbGxOYW1lcywgZnVuc09yTmFtZXMsIGZ1blR5cGUsIGFwcGx5SW5kZXgpIHsKICAvLyBUT0RPKHNyYSk6IFNwZWNpYWxpemUgaW5zdGFsbFRlYXJPZmYgZm9yIGluc3RhbmNlIG1ldGhvZHMuCiAgcmV0dXJuIGluc3RhbGxUZWFyT2ZmKAogICAgICBjb250YWluZXIsIGdldHRlck5hbWUsIGZhbHNlLCBpc0ludGVyY2VwdGVkLAogICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50LCBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICAgIGNhbGxOYW1lcywgZnVuc09yTmFtZXMsIGZ1blR5cGUsIGFwcGx5SW5kZXgpOwp9CgovLyBJbnN0ZWFkIG9mIHNldHRpbmcgdGhlIGludGVyY2VwdG9yIHRhZ3MgZGlyZWN0bHkgd2UgdXNlIHRoaXMgdXBkYXRlCi8vIGZ1bmN0aW9uLiBUaGlzIG1ha2VzIGl0IGVhc2llciBmb3IgZGVmZXJyZWQgZnJhZ21lbnRzIHRvIGNvbnRyaWJ1dGUgdG8gdGhlCi8vIGVtYmVkZGVkIGdsb2JhbC4KZnVuY3Rpb24gc2V0T3JVcGRhdGVJbnRlcmNlcHRvcnNCeVRhZyhuZXdUYWdzKSB7CiAgdmFyIHRhZ3MgPSAjZW1iZWRkZWRJbnRlcmNlcHRvclRhZ3M7CiAgaWYgKCF0YWdzKSB7CiAgICAjZW1iZWRkZWRJbnRlcmNlcHRvclRhZ3MgPSBuZXdUYWdzOwogICAgcmV0dXJuOwogIH0KICBjb3B5UHJvcGVydGllcyhuZXdUYWdzLCB0YWdzKTsKfQoKLy8gSW5zdGVhZCBvZiBzZXR0aW5nIHRoZSBsZWFmIHRhZ3MgZGlyZWN0bHkgd2UgdXNlIHRoaXMgdXBkYXRlCi8vIGZ1bmN0aW9uLiBUaGlzIG1ha2VzIGl0IGVhc2llciBmb3IgZGVmZXJyZWQgZnJhZ21lbnRzIHRvIGNvbnRyaWJ1dGUgdG8gdGhlCi8vIGVtYmVkZGVkIGdsb2JhbC4KZnVuY3Rpb24gc2V0T3JVcGRhdGVMZWFmVGFncyhuZXdUYWdzKSB7CiAgdmFyIHRhZ3MgPSAjZW1iZWRkZWRMZWFmVGFnczsKICBpZiAoIXRhZ3MpIHsKICAgICNlbWJlZGRlZExlYWZUYWdzID0gbmV3VGFnczsKICAgIHJldHVybjsKICB9CiAgY29weVByb3BlcnRpZXMobmV3VGFncywgdGFncyk7Cn0KCi8vIFVwZGF0ZXMgdGhlIHR5cGVzIGVtYmVkZGVkIGdsb2JhbC4KZnVuY3Rpb24gdXBkYXRlVHlwZXMobmV3VHlwZXMpIHsKICB2YXIgdHlwZXMgPSAjZW1iZWRkZWRUeXBlczsKICB2YXIgbGVuZ3RoID0gdHlwZXMubGVuZ3RoOwogIC8vIFRoZSB0ZWFyLW9mZiBmdW5jdGlvbiB1c2VzIGFub3RoZXIgJ3R5cGVzT2Zmc2V0JyB2YWx1ZSBjYWNoZWQgaW4KICAvLyBbaW5pdGlhbGl6ZURlZmVycmVkSHVua10gc28gW3VwZGF0ZVR5cGVzXSBjYW4gYmUgY2FsbGVkIGVpdGhlciBiZWZvcmUgb3IKICAvLyBhZnRlciB0aGUgdGVhcm9mZnMgaGF2ZSBiZWVuIGluc3RhbGxlZC4KICB0eXBlcy5wdXNoLmFwcGx5KHR5cGVzLCBuZXdUeXBlcyk7CiAgcmV0dXJuIGxlbmd0aDsKfQoKLy8gVXBkYXRlcyB0aGUgZ2l2ZW4gaG9sZGVyIHdpdGggdGhlIHByb3BlcnRpZXMgb2YgdGhlIFtuZXdIb2xkZXJdLgovLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiBhIGRlZmVycmVkIGZyYWdtZW50IGlzIGluaXRpYWxpemVkLgpmdW5jdGlvbiB1cGRhdGVIb2xkZXIoaG9sZGVyLCBuZXdIb2xkZXIpIHsKICBjb3B5UHJvcGVydGllcyhuZXdIb2xkZXIsIGhvbGRlcik7CiAgcmV0dXJuIGhvbGRlcjsKfQoKdmFyICNodW5rSGVscGVycyA9IChmdW5jdGlvbigpewogIHZhciBta0luc3RhbmNlID0gZnVuY3Rpb24oCiAgICAgIGlzSW50ZXJjZXB0ZWQsIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgY2FsbE5hbWVzLCBhcHBseUluZGV4KSB7CiAgICByZXR1cm4gZnVuY3Rpb24oY29udGFpbmVyLCBnZXR0ZXJOYW1lLCBuYW1lLCBmdW5UeXBlKSB7CiAgICAgIHJldHVybiBpbnN0YWxsSW5zdGFuY2VUZWFyT2ZmKAogICAgICAgICAgY29udGFpbmVyLCBnZXR0ZXJOYW1lLCBpc0ludGVyY2VwdGVkLAogICAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzLAogICAgICAgICAgY2FsbE5hbWVzLCBbbmFtZV0sIGZ1blR5cGUsIGFwcGx5SW5kZXgpOwogICAgfQogIH0sCgogIG1rU3RhdGljID0gZnVuY3Rpb24oCiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgY2FsbE5hbWVzLCBhcHBseUluZGV4KSB7CiAgICByZXR1cm4gZnVuY3Rpb24oY29udGFpbmVyLCBnZXR0ZXJOYW1lLCBuYW1lLCBmdW5UeXBlKSB7CiAgICAgIHJldHVybiBpbnN0YWxsU3RhdGljVGVhck9mZigKICAgICAgICAgIGNvbnRhaW5lciwgZ2V0dGVyTmFtZSwKICAgICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgICAgIGNhbGxOYW1lcywgW25hbWVdLCBmdW5UeXBlLCBhcHBseUluZGV4KTsKICAgIH0KICB9OwoKICAvLyBUT0RPKHNyYSk6IE1pbmlmeSBwcm9wZXJ0aWVzIG9mICdodW5rSGVscGVycycuCiAgcmV0dXJuIHsKICAgIGluaGVyaXQ6IGluaGVyaXQsCiAgICBpbmhlcml0TWFueTogaW5oZXJpdE1hbnksCiAgICBtaXhpbjogbWl4aW4sCiAgICBpbnN0YWxsU3RhdGljVGVhck9mZjogaW5zdGFsbFN0YXRpY1RlYXJPZmYsCiAgICBpbnN0YWxsSW5zdGFuY2VUZWFyT2ZmOiBpbnN0YWxsSW5zdGFuY2VUZWFyT2ZmLAoKICAgICAgICAvLyBVbmludGVyY2VwdGVkIG1ldGhvZHMuCiAgICBfaW5zdGFuY2VfMHU6IG1rSW5zdGFuY2UoMCwgMCwgbnVsbCwgWyNjYWxsMHNlbGVjdG9yXSwgMCksCiAgICBfaW5zdGFuY2VfMXU6IG1rSW5zdGFuY2UoMCwgMSwgbnVsbCwgWyNjYWxsMXNlbGVjdG9yXSwgMCksCiAgICBfaW5zdGFuY2VfMnU6IG1rSW5zdGFuY2UoMCwgMiwgbnVsbCwgWyNjYWxsMnNlbGVjdG9yXSwgMCksCgogICAgICAgIC8vIEludGVyY2VwdGVkIG1ldGhvZHMuCiAgICBfaW5zdGFuY2VfMGk6IG1rSW5zdGFuY2UoMSwgMCwgbnVsbCwgWyNjYWxsMHNlbGVjdG9yXSwgMCksCiAgICBfaW5zdGFuY2VfMWk6IG1rSW5zdGFuY2UoMSwgMSwgbnVsbCwgWyNjYWxsMXNlbGVjdG9yXSwgMCksCiAgICBfaW5zdGFuY2VfMmk6IG1rSW5zdGFuY2UoMSwgMiwgbnVsbCwgWyNjYWxsMnNlbGVjdG9yXSwgMCksCgogICAgICAgIC8vIFN0YXRpYyBtZXRob2RzLgogICAgX3N0YXRpY18wOiBta1N0YXRpYygwLCBudWxsLCBbI2NhbGwwc2VsZWN0b3JdLCAwKSwKICAgIF9zdGF0aWNfMTogbWtTdGF0aWMoMSwgbnVsbCwgWyNjYWxsMXNlbGVjdG9yXSwgMCksCiAgICBfc3RhdGljXzI6IG1rU3RhdGljKDIsIG51bGwsIFsjY2FsbDJzZWxlY3Rvcl0sIDApLAoKICAgIG1ha2VDb25zdExpc3Q6IG1ha2VDb25zdExpc3QsCiAgICBsYXp5OiBsYXp5LAogICAgdXBkYXRlSG9sZGVyOiB1cGRhdGVIb2xkZXIsCiAgICBjb252ZXJ0VG9GYXN0T2JqZWN0OiBjb252ZXJ0VG9GYXN0T2JqZWN0LAogICAgc2V0RnVuY3Rpb25OYW1lc0lmTmVjZXNzYXJ5OiBzZXRGdW5jdGlvbk5hbWVzSWZOZWNlc3NhcnksCiAgICB1cGRhdGVUeXBlczogdXBkYXRlVHlwZXMsCiAgICBzZXRPclVwZGF0ZUludGVyY2VwdG9yc0J5VGFnOiBzZXRPclVwZGF0ZUludGVyY2VwdG9yc0J5VGFnLAogICAgc2V0T3JVcGRhdGVMZWFmVGFnczogc2V0T3JVcGRhdGVMZWFmVGFncywKICB9Owp9KSgpOwoKLy8gRXZlcnkgZGVmZXJyZWQgaHVuayAoaS5lLiBmcmFnbWVudCkgaXMgYSBmdW5jdGlvbiB0aGF0IHdlIGNhbiBpbnZva2UgdG8KLy8gaW5pdGlhbGl6ZSBpdC4gQXQgdGhpcyBtb21lbnQgaXQgY29udHJpYnV0ZXMgaXRzIGRhdGEgdG8gdGhlIG1haW4gaHVuay4KZnVuY3Rpb24gaW5pdGlhbGl6ZURlZmVycmVkSHVuayhodW5rKSB7CiAgLy8gVXBkYXRlIHRoZSB0eXBlc09mZnNldCBmb3IgdGhlIG5leHQgZGVmZXJyZWQgbGlicmFyeS4KICB0eXBlc09mZnNldCA9ICNlbWJlZGRlZFR5cGVzLmxlbmd0aDsKCiAgLy8gVE9ETyhmbG9pdHNjaCk6IGV4dGVuZCBuYXRpdmVzLgogIGh1bmsoaHVua0hlbHBlcnMsICNlbWJlZGRlZEdsb2JhbHNPYmplY3QsIGhvbGRlcnMsICNzdGF0aWNTdGF0ZSk7Cn0KCi8vIFJldHVybnMgdGhlIGdsb2JhbCB3aXRoIHRoZSBnaXZlbiBbbmFtZV0uCmZ1bmN0aW9uIGdldEdsb2JhbEZyb21OYW1lKG5hbWUpIHsKICAvLyBUT0RPKGZsb2l0c2NoKTogd2UgYXJlIHJ1bm5pbmcgdGhyb3VnaCBhbGwgaG9sZGVycy4gU2luY2UgbmVnYXRpdmUKICAvLyBsb29rdXBzIGFyZSBleHBlbnNpdmUgd2UgbWlnaHQgbmVlZCB0byBpbXByb3ZlIHRoaXMuCiAgLy8gUmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgYWxsIG5hbWVzIGFyZSB1bmlxdWUgYWNyb3NzIGFsbCBob2xkZXJzLgogIGZvciAodmFyIGkgPSAwOyBpIDwgaG9sZGVycy5sZW5ndGg7IGkrKykgewogICAgLy8gVGhlIGNvbnN0YW50IGhvbGRlciByZXVzZXMgdGhlIHNhbWUgbmFtZXMuIFRoZXJlZm9yZSB3ZSBtdXN0IHNraXAgaXQuCiAgICBpZiAoaG9sZGVyc1tpXSA9PSAjY29uc3RhbnRIb2xkZXJSZWZlcmVuY2UpIGNvbnRpbnVlOwogICAgLy8gUmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgYWxsIHZhcmlhYmxlcyBhcmUgdW5pcXVlLgogICAgaWYgKGhvbGRlcnNbaV1bbmFtZV0pIHJldHVybiBob2xkZXJzW2ldW25hbWVdOwogIH0KfQoKaWYgKCNoYXNTb2Z0RGVmZXJyZWRDbGFzc2VzKSB7CiAgLy8gTG9hZHMgdGhlIHNvZnQtZGVmZXJyZWQgY2xhc3NlcyBhbmQgaW5pdGlhbGl6ZXMgdGhlbS4KICAvLyBVcGRhdGVzIHRoZSBwcm90b3R5cGUgb2YgdGhlIGdpdmVuIG9iamVjdC4KICBmdW5jdGlvbiBzb2Z0RGVmKG8pIHsKICAgIHNvZnREZWYgPSBmdW5jdGlvbihvKSB7fTsgIC8vIFJlcGxhY2Ugb3Vyc2VsdmVzLgogICAgI2RlZmVycmVkR2xvYmFsWyNzb2Z0SWRdKAogICAgICAgIGhvbGRlcnMsICNlbWJlZGRlZEdsb2JhbHNPYmplY3QsICNzdGF0aWNTdGF0ZSwKICAgICAgICBodW5rSGVscGVycyk7CiAgICBpZiAobyAhPSBudWxsKSB7CiAgICAgIC8vIFRPRE8oMjk1NzQpOiBzaG91bGQgd2UgZG8gc29tZXRoaW5nIGRpZmZlcmVudCBmb3IgRmlyZWZveD8KICAgICAgLy8gSWYgd2UgcmVjb21tZW5kIHRoYXQgdGhlIHByb2dyYW0gdHJpZ2dlcnMgdGhlIGxvYWQgYnkgaXRzZWxmIGJlZm9yZQogICAgICAvLyBjbGFzc2VzIGFyZSBuZWVkZWQsIHRoZW4gdGhpcyBsaW5lIHNob3VsZCByYXJlbHkgYmUgaGl0LgogICAgICAvLyBBbHNvLCBpdCBpcyBvbmx5IGhpdCBhdCBtb3N0IG9uY2UgKHBlciBzb2Z0LWRlZmVycmVkIGNodW5rKS4KICAgICAgby5fX3Byb3RvX18gPSBvLmNvbnN0cnVjdG9yLnByb3RvdHlwZTsKICAgIH0KICB9Cn0KCmlmICgjaXNUcmFja2luZ0FsbG9jYXRpb25zKSB7CiAgdmFyIGFsbG9jYXRpb25zID0gI2RlZmVycmVkR2xvYmFsWydhbGxvY2F0aW9ucyddID0ge307Cn0KCi8vIENyZWF0ZXMgdGhlIGhvbGRlcnMuCiNob2xkZXJzOwoKLy8gSWYgdGhlIG5hbWUgaXMgbm90IHNldCBvbiB0aGUgZnVuY3Rpb25zLCBkbyBpdCBub3cuCmh1bmtIZWxwZXJzLnNldEZ1bmN0aW9uTmFtZXNJZk5lY2Vzc2FyeShob2xkZXJzKTsKCi8vIFRPRE8oZmxvaXRzY2gpOiB3ZSBzaG91bGQgYnVpbGQgdGhpcyBvYmplY3QgYXMgYSBsaXRlcmFsLgp2YXIgI3N0YXRpY1N0YXRlRGVjbGFyYXRpb24gPSB7fTsKCi8vIFNldHMgdGhlIHByb3RvdHlwZXMgb2YgY2xhc3Nlcy4KI3Byb3RvdHlwZXM7Ci8vIFNldHMgYWxpYXNlcyBvZiBtZXRob2RzIChvbiB0aGUgcHJvdG90eXBlcyBvZiBjbGFzc2VzKS4KI2FsaWFzZXM7Ci8vIEluc3RhbGxzIHRoZSB0ZWFyLW9mZnMgb2YgZnVuY3Rpb25zLgojdGVhck9mZnM7Ci8vIEJ1aWxkcyB0aGUgaW5oZXJpdGFuY2Ugc3RydWN0dXJlLgojaW5oZXJpdGFuY2U7CgovLyBFbWl0cyB0aGUgZW1iZWRkZWQgZ2xvYmFscy4gVGhpcyBuZWVkcyB0byBiZSBiZWZvcmUgY29uc3RhbnRzIHNvIHRoZSBlbWJlZGRlZAovLyBnbG9iYWwgdHlwZSByZXNvdXJjZXMgYXJlIGF2YWlsYWJsZSBmb3IgZ2VuZXJhdGluZyBjb25zdGFudHMuCiNlbWJlZGRlZEdsb2JhbHNQYXJ0MTsKCi8vIEFkZHMgdGhlIHN1YnR5cGUgcnVsZXMgZm9yIHRoZSBuZXcgUlRJLgojdHlwZVJ1bGVzOwoKLy8gSW5zdGFudGlhdGVzIGFsbCBjb25zdGFudHMuCiNjb25zdGFudHM7CgovLyBBZGRzIHRvIHRoZSBlbWJlZGRlZCBnbG9iYWxzLiBBIGZldyBnbG9iYWxzIHJlZmVyIHRvIGNvbnN0YW50cy4KI2VtYmVkZGVkR2xvYmFsc1BhcnQyOyAKCi8vIEluaXRpYWxpemVzIHRoZSBzdGF0aWMgbm9uLWZpbmFsIGZpZWxkcyAod2l0aCB0aGVpciBjb25zdGFudCB2YWx1ZXMpLgojc3RhdGljTm9uRmluYWxGaWVsZHM7Ci8vIENyZWF0ZXMgbGF6eSBnZXR0ZXJzIGZvciBzdGF0aWNzIHRoYXQgbXVzdCBydW4gaW5pdGlhbGl6ZXJzIG9uIGZpcnN0IGFjY2Vzcy4KI2xhenlTdGF0aWNzOwoKLy8gU2V0cyB1cCB0aGUgbmF0aXZlIHN1cHBvcnQuCi8vIE5hdGl2ZS1zdXBwb3J0IHVzZXMgc2V0T3JVcGRhdGVJbnRlcmNlcHRvcnNCeVRhZyBhbmQgc2V0T3JVcGRhdGVMZWFmVGFncy4KI25hdGl2ZVN1cHBvcnQ7CgovLyBTZXRzIHVwIHRoZSBqcy1pbnRlcm9wIHN1cHBvcnQuCiNqc0ludGVyb3BTdXBwb3J0OwoKLy8gRW5zdXJlIGhvbGRlcnMgYXJlIGluIGZhc3QgbW9kZSwgbm93IHdlIGhhdmUgZmluaXNoZWQgYWRkaW5nIHRoaW5ncy4KY29udmVydEFsbFRvRmFzdE9iamVjdChob2xkZXJzKTsKY29udmVydFRvRmFzdE9iamVjdCgjc3RhdGljU3RhdGUpOwoKLy8gSW52b2tlcyBtYWluIChtYWtpbmcgc3VyZSB0aGF0IGl0IHJlY29yZHMgdGhlICdjdXJyZW50LXNjcmlwdCcgdmFsdWUpLgojaW52b2tlTWFpbjsKfSkoKQonJyc7CgovLy8gQW4gZXhwcmVzc2lvbiB0aGF0IHJldHVybnMgYHRydWVgIGlmIGBfX3Byb3RvX19gIGNhbiBiZSBhc3NpZ25lZCB0byBzdGl0Y2gKLy8vIHRvZ2V0aGVyIGEgcHJvdG90eXBlIGNoYWluLCBhbmQgdGhlIHBlcmZvcm1hbmNlIGlzIGdvb2QuCmNvbnN0IFN0cmluZyBkaXJlY3RBY2Nlc3NUZXN0RXhwcmVzc2lvbiA9IHInJycKICAoZnVuY3Rpb24gKCkgewogICAgdmFyIGNscyA9IGZ1bmN0aW9uICgpIHt9OwogICAgY2xzLnByb3RvdHlwZSA9IHsncCc6IHt9fTsKICAgIHZhciBvYmplY3QgPSBuZXcgY2xzKCk7CiAgICBpZiAoIShvYmplY3QuX19wcm90b19fICYmIG9iamVjdC5fX3Byb3RvX18ucCA9PT0gY2xzLnByb3RvdHlwZS5wKSkKICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIHRyeSB7CiAgICAgIC8vIEFyZSB3ZSBydW5uaW5nIG9uIGEgcGxhdGZvcm0gd2hlcmUgdGhlIHBlcmZvcm1hbmNlIGlzIGdvb2Q/CiAgICAgIC8vIChpLmUuIENocm9tZSBvciBkOCkuCgogICAgICAvLyBDaHJvbWUgdXNlckFnZW50PwogICAgICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPSAidW5kZWZpbmVkIiAmJgogICAgICAgICAgdHlwZW9mIG5hdmlnYXRvci51c2VyQWdlbnQgPT0gInN0cmluZyIgJiYKICAgICAgICAgIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiQ2hyb21lLyIpID49IDApIHJldHVybiB0cnVlOwogICAgICAvLyBkOCB2ZXJzaW9uKCkgbG9va3MgbGlrZSAiTi5OLk4uTiIsIGpzc2hlbGwgdmVyc2lvbigpIGxpa2UgIk4iLgogICAgICBpZiAodHlwZW9mIHZlcnNpb24gPT0gImZ1bmN0aW9uIiAmJgogICAgICAgICAgdmVyc2lvbi5sZW5ndGggPT0gMCkgewogICAgICAgIHZhciB2ID0gdmVyc2lvbigpOwogICAgICAgIGlmICgvXlxkK1wuXGQrXC5cZCtcLlxkKyQvLnRlc3QodikpIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9IGNhdGNoKF8pIHt9CgogICAgcmV0dXJuIGZhbHNlOwogIH0pKCkKJycnOwoKLy8vIFNvZnQtZGVmZXJyZWQgZnJhZ21lbnRzIGFyZSBidWlsdCBzaW1pbGFybHkgdG8gdGhlIG1haW4gZnJhZ21lbnQuCgovLy8gRGVmZXJyZWQgZnJhZ21lbnRzIChha2EgJ2h1bmtzJykgYXJlIGJ1aWx0IHNpbWlsYXJseSB0byB0aGUgbWFpbiBmcmFnbWVudC4KLy8vCi8vLyBIb3dldmVyLCBhdCBzcGVjaWZpYyBtb21lbnRzIHRoZXkgbmVlZCB0byBjb250cmlidXRlIHRoZWlyIGRhdGEuCi8vLyBGb3IgZXhhbXBsZSwgb25jZSB0aGUgaG9sZGVycyBoYXZlIGJlZW4gY3JlYXRlZCwgdGhleSBhcmUgaW5jbHVkZWQgaW50bwovLy8gdGhlIG1haW4gaG9sZGVycy4KLy8vCi8vLyBUaGlzIHRlbXBsYXRlIGlzIHVzZWQgZm9yIERhcnQgMi4KY29uc3QgU3RyaW5nIGRlZmVycmVkQm9pbGVycGxhdGVEYXJ0MiA9ICcnJwpmdW5jdGlvbihodW5rSGVscGVycywgI2VtYmVkZGVkR2xvYmFsc09iamVjdCwgaG9sZGVyc0xpc3QsICNzdGF0aWNTdGF0ZSkgewoKLy8gQnVpbGRzIHRoZSBob2xkZXJzLiBUaGV5IG9ubHkgY29udGFpbiB0aGUgZGF0YSBmb3IgbmV3IGhvbGRlcnMuCiNob2xkZXJzOwoKLy8gSWYgdGhlIG5hbWUgaXMgbm90IHNldCBvbiB0aGUgZnVuY3Rpb25zLCBkbyBpdCBub3cuCmh1bmtIZWxwZXJzLnNldEZ1bmN0aW9uTmFtZXNJZk5lY2Vzc2FyeSgjZGVmZXJyZWRIb2xkZXJzTGlzdCk7CgovLyBVcGRhdGVzIHRoZSBob2xkZXJzIG9mIHRoZSBtYWluLWZyYWdtZW50LiBVc2VzIHRoZSBwcm92aWRlZCBob2xkZXJzTGlzdCB0bwovLyBhY2Nlc3MgdGhlIG1haW4gaG9sZGVycy4KLy8gVGhlIGxvY2FsIGhvbGRlcnMgYXJlIHJlcGxhY2VkIGJ5IHRoZSBjb21iaW5lZCBob2xkZXJzLiBUaGlzIGlzIG5lY2Vzc2FyeQovLyBmb3IgdGhlIGluaGVyaXRhbmNlIHNldHVwIGJlbG93LgojdXBkYXRlSG9sZGVyczsKLy8gU2V0cyB0aGUgcHJvdG90eXBlcyBvZiB0aGUgbmV3IGNsYXNzZXMuCiNwcm90b3R5cGVzOwovLyBBZGQgc2lnbmF0dXJlIGZ1bmN0aW9uIHR5cGVzIGFuZCBjb21wdXRlIHRoZSB0eXBlcyBvZmZzZXQgaW4gYGluaXQudHlwZXNgLgovLyBUaGVzZSBjYW4gb25seSByZWZlciB0byByZWd1bGFyIGNsYXNzZXMgYW5kIGluIERhcnQgMiBvbmx5IGNsb3N1cmVzIGhhdmUKLy8gZnVuY3Rpb24gdHlwZXMgc28gdGhlIGB0eXBlc09mZnNldGAgaGFzIGJlZW4gc2FmZWx5IGNvbXB1dGVkIGJlZm9yZSBpdCdzCi8vIHJlZmVycmVkIGluIHRoZSBzaWduYXR1cmVzIG9mIHRoZSBgY2xvc3VyZXNgIGJlbG93Lgp2YXIgI3R5cGVzT2Zmc2V0ID0gaHVua0hlbHBlcnMudXBkYXRlVHlwZXMoI3R5cGVzKTsKI2Nsb3N1cmVzOwovLyBTZXRzIGFsaWFzZXMgb2YgbWV0aG9kcyAob24gdGhlIHByb3RvdHlwZXMgb2YgY2xhc3NlcykuCiNhbGlhc2VzOwovLyBJbnN0YWxscyB0aGUgdGVhci1vZmZzIG9mIGZ1bmN0aW9ucy4KI3RlYXJPZmZzOwovLyBCdWlsZHMgdGhlIGluaGVyaXRhbmNlIHN0cnVjdHVyZS4KI2luaGVyaXRhbmNlOwoKLy8gQWRkcyB0aGUgc3VidHlwZSBydWxlcyBmb3IgdGhlIG5ldyBSVEkuCiN0eXBlUnVsZXM7CgovLyBJbnN0YW50aWF0ZXMgYWxsIGNvbnN0YW50cyBvZiB0aGlzIGRlZmVycmVkIGZyYWdtZW50LgovLyBOb3RlIHRoYXQgdGhlIGNvbnN0YW50LWhvbGRlciBoYXMgYmVlbiB1cGRhdGVkIGVhcmxpZXIgYW5kIHN0b3JpbmcgdGhlCi8vIGNvbnN0YW50IHZhbHVlcyBpbiB0aGUgY29uc3RhbnQtaG9sZGVyIG1ha2VzIHRoZW0gYXZhaWxhYmxlIGdsb2JhbGx5LgojY29uc3RhbnRzOwovLyBJbml0aWFsaXplcyB0aGUgc3RhdGljIG5vbi1maW5hbCBmaWVsZHMgKHdpdGggdGhlaXIgY29uc3RhbnQgdmFsdWVzKS4KI3N0YXRpY05vbkZpbmFsRmllbGRzOwovLyBDcmVhdGVzIGxhenkgZ2V0dGVycyBmb3Igc3RhdGljcyB0aGF0IG11c3QgcnVuIGluaXRpYWxpemVycyBvbiBmaXJzdCBhY2Nlc3MuCiNsYXp5U3RhdGljczsKCi8vIE5hdGl2ZS1zdXBwb3J0IHVzZXMgc2V0T3JVcGRhdGVJbnRlcmNlcHRvcnNCeVRhZyBhbmQgc2V0T3JVcGRhdGVMZWFmVGFncy4KI25hdGl2ZVN1cHBvcnQ7Cn0nJyc7CgovLy8KLy8vIEhvd2V2ZXIsIHRoZXkgZG9uJ3QgY29udHJpYnV0ZSBhbnl0aGluZyB0byBnbG9iYWwgbmFtZXNwYWNlLCBidXQganVzdAovLy8gaW5pdGlhbGl6ZSBleGlzdGluZyBjbGFzc2VzLiBGb3IgZXhhbXBsZSwgdGhleSB1cGRhdGUgdGhlIGluaGVyaXRhbmNlCi8vLyBoaWVyYXJjaHksIGFuZCBhZGQgbWV0aG9kcyB0aGUgcHJvdG90eXBlcy4KY29uc3QgU3RyaW5nIHNvZnREZWZlcnJlZEJvaWxlcnBsYXRlID0gJycnCiNkZWZlcnJlZEdsb2JhbFsjc29mdElkXSA9CiAgZnVuY3Rpb24oaG9sZGVyc0xpc3QsICNlbWJlZGRlZEdsb2JhbHNPYmplY3QsICNzdGF0aWNTdGF0ZSwKICAgICAgICAgICBodW5rSGVscGVycykgewoKLy8gSW5zdGFsbHMgdGhlIGhvbGRlcnMgYXMgbG9jYWwgdmFyaWFibGVzLgojaW5zdGFsbEhvbGRlcnNBc0xvY2FsczsKLy8gU2V0cyB0aGUgcHJvdG90eXBlcyBvZiB0aGUgbmV3IGNsYXNzZXMuCiNwcm90b3R5cGVzOwovLyBTZXRzIGFsaWFzZXMgb2YgbWV0aG9kcyAob24gdGhlIHByb3RvdHlwZXMgb2YgY2xhc3NlcykuCiNhbGlhc2VzOwovLyBJbnN0YWxscyB0aGUgdGVhci1vZmZzIG9mIGZ1bmN0aW9ucy4KI3RlYXJPZmZzOwovLyBCdWlsZHMgdGhlIGluaGVyaXRhbmNlIHN0cnVjdHVyZS4KI2luaGVyaXRhbmNlOwp9JycnOwoKLy8vIFRoaXMgY2xhc3MgYnVpbGRzIGEgSmF2YVNjcmlwdCB0cmVlIGZvciBhIGdpdmVuIGZyYWdtZW50LgovLy8KLy8vIEEgZnJhZ21lbnQgaXMgZ2VuZXJhbGx5IHdyaXR0ZW4gaW50byBhIHNlcGFyYXRlIGZpbGUgc28gdGhhdCBpdCBjYW4gYmUKLy8vIGxvYWRlZCBkeW5hbWljYWxseSB3aGVuIGEgZGVmZXJyZWQgbGlicmFyeSBpcyBsb2FkZWQuCi8vLwovLy8gVGhpcyBjbGFzcyBpcyBzdGF0ZWxlc3MgYW5kIGNhbiBiZSByZXVzZWQgZm9yIGRpZmZlcmVudCBmcmFnbWVudHMuCmNsYXNzIEZyYWdtZW50RW1pdHRlciB7CiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwogIGZpbmFsIER1bXBJbmZvVGFzayBfZHVtcEluZm9UYXNrOwogIGZpbmFsIE5hbWVyIF9uYW1lcjsKICBmaW5hbCBFbWl0dGVyIF9lbWl0dGVyOwogIGZpbmFsIENvbnN0YW50RW1pdHRlciBfY29uc3RhbnRFbWl0dGVyOwogIGZpbmFsIE1vZGVsRW1pdHRlciBfbW9kZWxFbWl0dGVyOwogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CiAgZmluYWwgQ29kZWdlbldvcmxkIF9jb2RlZ2VuV29ybGQ7CiAgUmVjaXBlRW5jb2RlciBfcmVjaXBlRW5jb2RlcjsKICBSdWxlc2V0RW5jb2RlciBfcnVsZXNldEVuY29kZXI7CgogIERhcnRUeXBlcyBnZXQgX2RhcnRUeXBlcyA9PiBfY2xvc2VkV29ybGQuZGFydFR5cGVzOwogIEpFbGVtZW50RW52aXJvbm1lbnQgZ2V0IF9lbGVtZW50RW52aXJvbm1lbnQgPT4KICAgICAgX2Nsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudDsKCiAganMuTmFtZSBfY2FsbDBOYW1lLCBfY2FsbDFOYW1lLCBfY2FsbDJOYW1lOwogIGpzLk5hbWUgZ2V0IGNhbGwwTmFtZSA9PgogICAgICBfY2FsbDBOYW1lID8/PSBfbmFtZXIuZ2V0TmFtZUZvckpzR2V0TmFtZShudWxsLCBKc0dldE5hbWUuQ0FMTF9QUkVGSVgwKTsKICBqcy5OYW1lIGdldCBjYWxsMU5hbWUgPT4KICAgICAgX2NhbGwxTmFtZSA/Pz0gX25hbWVyLmdldE5hbWVGb3JKc0dldE5hbWUobnVsbCwgSnNHZXROYW1lLkNBTExfUFJFRklYMSk7CiAganMuTmFtZSBnZXQgY2FsbDJOYW1lID0+CiAgICAgIF9jYWxsMk5hbWUgPz89IF9uYW1lci5nZXROYW1lRm9ySnNHZXROYW1lKG51bGwsIEpzR2V0TmFtZS5DQUxMX1BSRUZJWDIpOwoKICBGcmFnbWVudEVtaXR0ZXIoCiAgICAgIHRoaXMuX29wdGlvbnMsCiAgICAgIHRoaXMuX2R1bXBJbmZvVGFzaywKICAgICAgdGhpcy5fbmFtZXIsCiAgICAgIHRoaXMuX2VtaXR0ZXIsCiAgICAgIHRoaXMuX2NvbnN0YW50RW1pdHRlciwKICAgICAgdGhpcy5fbW9kZWxFbWl0dGVyLAogICAgICB0aGlzLl9jbG9zZWRXb3JsZCwKICAgICAgdGhpcy5fY29kZWdlbldvcmxkKSB7CiAgICBpZiAoX29wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSkgewogICAgICBfcmVjaXBlRW5jb2RlciA9IFJlY2lwZUVuY29kZXJJbXBsKAogICAgICAgICAgX2Nsb3NlZFdvcmxkLAogICAgICAgICAgX29wdGlvbnMuZGlzYWJsZVJ0aU9wdGltaXphdGlvbgogICAgICAgICAgICAgID8gVHJpdmlhbFJ1bnRpbWVUeXBlc1N1YnN0aXR1dGlvbnMoX2Nsb3NlZFdvcmxkKQogICAgICAgICAgICAgIDogUnVudGltZVR5cGVzSW1wbChfY2xvc2VkV29ybGQpLAogICAgICAgICAgX2Nsb3NlZFdvcmxkLm5hdGl2ZURhdGEsCiAgICAgICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LAogICAgICAgICAgX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLAogICAgICAgICAgX2Nsb3NlZFdvcmxkLnJ0aU5lZWQpOwogICAgICBfcnVsZXNldEVuY29kZXIgPQogICAgICAgICAgUnVsZXNldEVuY29kZXIoX2Nsb3NlZFdvcmxkLmRhcnRUeXBlcywgX2VtaXR0ZXIsIF9yZWNpcGVFbmNvZGVyKTsKICAgIH0KICB9CgogIGpzLkV4cHJlc3Npb24gZ2VuZXJhdGVFbWJlZGRlZEdsb2JhbEFjY2VzcyhTdHJpbmcgZ2xvYmFsKSA9PgogICAgICBfZW1pdHRlci5nZW5lcmF0ZUVtYmVkZGVkR2xvYmFsQWNjZXNzKGdsb2JhbCk7CgogIGpzLkV4cHJlc3Npb24gZ2VuZXJhdGVDb25zdGFudFJlZmVyZW5jZShDb25zdGFudFZhbHVlIHZhbHVlKSA9PgogICAgICBfbW9kZWxFbWl0dGVyLmdlbmVyYXRlQ29uc3RhbnRSZWZlcmVuY2UodmFsdWUpOwoKICBqcy5FeHByZXNzaW9uIGNsYXNzUmVmZXJlbmNlKENsYXNzIGNscykgewogICAgcmV0dXJuIGpzLmpzKCcjLiMnLCBbY2xzLmhvbGRlci5uYW1lLCBjbHMubmFtZV0pOwogIH0KCiAgdm9pZCByZWdpc3RlckVudGl0eUFzdChFbnRpdHkgZW50aXR5LCBqcy5Ob2RlIGNvZGUsIHtMaWJyYXJ5RW50aXR5IGxpYnJhcnl9KSB7CiAgICBfZHVtcEluZm9UYXNrLnJlZ2lzdGVyRW50aXR5QXN0KGVudGl0eSwgY29kZSk7CiAgICAvLyBUT0RPKHNpZ211bmQpOiBzdG9wIHJlY29kaW5nIGFzc29jaWF0aW9ucyB0d2ljZSwgZHVtcC1pbmZvIGFscmVhZHkKICAgIC8vIGhhcyBsaWJyYXJ5IHRvIGVsZW1lbnQgZGVwZW5kZW5jaWVzIHRvIHJlY292ZXIgdGhpcyBkYXRhLgogICAgaWYgKGxpYnJhcnkgIT0gbnVsbCkgX2R1bXBJbmZvVGFzay5yZWdpc3RlckVudGl0eUFzdChsaWJyYXJ5LCBjb2RlKTsKICB9CgogIGpzLlN0YXRlbWVudCBlbWl0TWFpbkZyYWdtZW50KAogICAgICBQcm9ncmFtIHByb2dyYW0sIERlZmVycmVkTG9hZGluZ1N0YXRlIGRlZmVycmVkTG9hZGluZ1N0YXRlKSB7CiAgICBNYWluRnJhZ21lbnQgZnJhZ21lbnQgPSBwcm9ncmFtLmZyYWdtZW50cy5maXJzdDsKCiAgICBJdGVyYWJsZTxIb2xkZXI+IG5vblN0YXRpY1N0YXRlSG9sZGVycyA9CiAgICAgICAgcHJvZ3JhbS5ob2xkZXJzLndoZXJlKChIb2xkZXIgaG9sZGVyKSA9PiAhaG9sZGVyLmlzU3RhdGljU3RhdGVIb2xkZXIpOwoKICAgIFN0cmluZyBzb2Z0RGVmZXJyZWRJZCA9ICJzb2Z0RGVmZXJyZWQke25ldyBSYW5kb20oKS5uZXh0SW50KDB4N0ZGRkZGRkYpfSI7CgogICAgSG9sZGVyQ29kZSBob2xkZXJDb2RlID0KICAgICAgICBlbWl0SG9sZGVycyhwcm9ncmFtLmhvbGRlcnMsIGZyYWdtZW50LCBpbml0aWFsaXplRW1wdHlIb2xkZXJzOiB0cnVlKTsKCiAgICBqcy5TdGF0ZW1lbnQgbWFpbkNvZGUgPSBqcy5qcy5zdGF0ZW1lbnQobWFpbkJvaWxlcnBsYXRlLCB7CiAgICAgIC8vIFRPRE8oMjk0NTUpOiAnaHVua0hlbHBlcnMnIGRpc3BsYWNlcyBvdGhlciBuYW1lcywgc28gZG9uJ3QgbWluaWZ5IGl0LgogICAgICAnaHVua0hlbHBlcnMnOiBqcy5WYXJpYWJsZURlY2xhcmF0aW9uKCdodW5rSGVscGVycycsIGFsbG93UmVuYW1lOiBmYWxzZSksCiAgICAgICdkaXJlY3RBY2Nlc3NUZXN0RXhwcmVzc2lvbic6IGpzLmpzKGRpcmVjdEFjY2Vzc1Rlc3RFeHByZXNzaW9uKSwKICAgICAgJ2N5Y2xpY1Rocm93JzogX2VtaXR0ZXIKICAgICAgICAgIC5zdGF0aWNGdW5jdGlvbkFjY2VzcyhfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuY3ljbGljVGhyb3dIZWxwZXIpLAogICAgICAnb3BlcmF0b3JJc1ByZWZpeCc6IGpzLnN0cmluZyhfbmFtZXIuZml4ZWROYW1lcy5vcGVyYXRvcklzUHJlZml4KSwKICAgICAgJ3RlYXJPZmZDb2RlJzogbmV3IGpzLkJsb2NrKGJ1aWxkVGVhck9mZkNvZGUoCiAgICAgICAgICBfb3B0aW9ucywgX2VtaXR0ZXIsIF9uYW1lciwgX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzKSksCiAgICAgICdlbWJlZGRlZFR5cGVzJzogZ2VuZXJhdGVFbWJlZGRlZEdsb2JhbEFjY2VzcyhUWVBFUyksCiAgICAgICdlbWJlZGRlZEludGVyY2VwdG9yVGFncyc6CiAgICAgICAgICBnZW5lcmF0ZUVtYmVkZGVkR2xvYmFsQWNjZXNzKElOVEVSQ0VQVE9SU19CWV9UQUcpLAogICAgICAnZW1iZWRkZWRMZWFmVGFncyc6IGdlbmVyYXRlRW1iZWRkZWRHbG9iYWxBY2Nlc3MoTEVBRl9UQUdTKSwKICAgICAgJ2VtYmVkZGVkR2xvYmFsc09iamVjdCc6IGpzLmpzKCJpbml0IiksCiAgICAgICdzdGF0aWNTdGF0ZURlY2xhcmF0aW9uJzogbmV3IGpzLlZhcmlhYmxlRGVjbGFyYXRpb24oCiAgICAgICAgICBfbmFtZXIuc3RhdGljU3RhdGVIb2xkZXIsCiAgICAgICAgICBhbGxvd1JlbmFtZTogZmFsc2UpLAogICAgICAnc3RhdGljU3RhdGUnOiBqcy5qcygnIycsIF9uYW1lci5zdGF0aWNTdGF0ZUhvbGRlciksCiAgICAgICdjb25zdGFudEhvbGRlclJlZmVyZW5jZSc6IGJ1aWxkQ29uc3RhbnRIb2xkZXJSZWZlcmVuY2UocHJvZ3JhbSksCiAgICAgICdob2xkZXJzJzogaG9sZGVyQ29kZS5zdGF0ZW1lbnRzLAogICAgICAnY2FsbE5hbWUnOiBqcy5zdHJpbmcoX25hbWVyLmZpeGVkTmFtZXMuY2FsbE5hbWVGaWVsZCksCiAgICAgICdzdHViTmFtZSc6IGpzLnN0cmluZyhfbmFtZXIuc3R1Yk5hbWVGaWVsZCksCiAgICAgICdhcmd1bWVudENvdW50JzoganMuc3RyaW5nKF9uYW1lci5maXhlZE5hbWVzLnJlcXVpcmVkUGFyYW1ldGVyRmllbGQpLAogICAgICAnZGVmYXVsdEFyZ3VtZW50VmFsdWVzJzoganMuc3RyaW5nKF9uYW1lci5maXhlZE5hbWVzLmRlZmF1bHRWYWx1ZXNGaWVsZCksCiAgICAgICdkZWZlcnJlZEdsb2JhbCc6IE1vZGVsRW1pdHRlci5kZWZlcnJlZEluaXRpYWxpemVyc0dsb2JhbCwKICAgICAgJ2hhc1NvZnREZWZlcnJlZENsYXNzZXMnOiBwcm9ncmFtLmhhc1NvZnREZWZlcnJlZENsYXNzZXMsCiAgICAgICdzb2Z0SWQnOiBqcy5zdHJpbmcoc29mdERlZmVycmVkSWQpLAogICAgICAnaXNUcmFja2luZ0FsbG9jYXRpb25zJzogX29wdGlvbnMuZXhwZXJpbWVudGFsVHJhY2tBbGxvY2F0aW9ucywKICAgICAgJ3Byb3RvdHlwZXMnOiBlbWl0UHJvdG90eXBlcyhmcmFnbWVudCksCiAgICAgICdpbmhlcml0YW5jZSc6IGVtaXRJbmhlcml0YW5jZShmcmFnbWVudCksCiAgICAgICdhbGlhc2VzJzogZW1pdEluc3RhbmNlTWV0aG9kQWxpYXNlcyhmcmFnbWVudCksCiAgICAgICd0ZWFyT2Zmcyc6IGVtaXRJbnN0YWxsVGVhck9mZnMoZnJhZ21lbnQpLAogICAgICAnY29uc3RhbnRzJzogZW1pdENvbnN0YW50cyhmcmFnbWVudCksCiAgICAgICdzdGF0aWNOb25GaW5hbEZpZWxkcyc6IGVtaXRTdGF0aWNOb25GaW5hbEZpZWxkcyhmcmFnbWVudCksCiAgICAgICdsYXp5U3RhdGljcyc6IGVtaXRMYXppbHlJbml0aWFsaXplZFN0YXRpY3MoZnJhZ21lbnQpLAogICAgICAnZW1iZWRkZWRHbG9iYWxzUGFydDEnOgogICAgICAgICAgZW1pdEVtYmVkZGVkR2xvYmFsc1BhcnQxKHByb2dyYW0sIGRlZmVycmVkTG9hZGluZ1N0YXRlKSwKICAgICAgJ2VtYmVkZGVkR2xvYmFsc1BhcnQyJzoKICAgICAgICAgIGVtaXRFbWJlZGRlZEdsb2JhbHNQYXJ0Mihwcm9ncmFtLCBkZWZlcnJlZExvYWRpbmdTdGF0ZSksCiAgICAgICd0eXBlUnVsZXMnOiBlbWl0VHlwZVJ1bGVzKGZyYWdtZW50KSwKICAgICAgJ25hdGl2ZVN1cHBvcnQnOiBwcm9ncmFtLm5lZWRzTmF0aXZlU3VwcG9ydAogICAgICAgICAgPyBlbWl0TmF0aXZlU3VwcG9ydChmcmFnbWVudCkKICAgICAgICAgIDogbmV3IGpzLkVtcHR5U3RhdGVtZW50KCksCiAgICAgICdqc0ludGVyb3BTdXBwb3J0JzoganNJbnRlcm9wQW5hbHlzaXMuYnVpbGRKc0ludGVyb3BCb290c3RyYXAoCiAgICAgICAgICAgICAgX2NvZGVnZW5Xb3JsZCwgX2Nsb3NlZFdvcmxkLm5hdGl2ZURhdGEsIF9uYW1lcikgPz8KICAgICAgICAgIG5ldyBqcy5FbXB0eVN0YXRlbWVudCgpLAogICAgICAnaW52b2tlTWFpbic6IGZyYWdtZW50Lmludm9rZU1haW4sCgogICAgICAnY2FsbDBzZWxlY3Rvcic6IGpzLnF1b3RlTmFtZShjYWxsME5hbWUpLAogICAgICAnY2FsbDFzZWxlY3Rvcic6IGpzLnF1b3RlTmFtZShjYWxsMU5hbWUpLAogICAgICAnY2FsbDJzZWxlY3Rvcic6IGpzLnF1b3RlTmFtZShjYWxsMk5hbWUpLAogICAgfSk7CiAgICBpZiAocHJvZ3JhbS5oYXNTb2Z0RGVmZXJyZWRDbGFzc2VzKSB7CiAgICAgIHJldHVybiBuZXcganMuQmxvY2soWwogICAgICAgIGpzLmpzLnN0YXRlbWVudChzb2Z0RGVmZXJyZWRCb2lsZXJwbGF0ZSwgewogICAgICAgICAgJ2RlZmVycmVkR2xvYmFsJzogTW9kZWxFbWl0dGVyLmRlZmVycmVkSW5pdGlhbGl6ZXJzR2xvYmFsLAogICAgICAgICAgJ3NvZnRJZCc6IGpzLnN0cmluZyhzb2Z0RGVmZXJyZWRJZCksCiAgICAgICAgICAvLyBUT0RPKGZsb2l0c2NoKTogZG9uJ3QganVzdCByZWZlcmVuY2UgJ2luaXQnLgogICAgICAgICAgJ2VtYmVkZGVkR2xvYmFsc09iamVjdCc6IG5ldyBqcy5QYXJhbWV0ZXIoJ2luaXQnKSwKICAgICAgICAgICdzdGF0aWNTdGF0ZSc6IG5ldyBqcy5QYXJhbWV0ZXIoX25hbWVyLnN0YXRpY1N0YXRlSG9sZGVyKSwKICAgICAgICAgICdpbnN0YWxsSG9sZGVyc0FzTG9jYWxzJzoKICAgICAgICAgICAgICBlbWl0SW5zdGFsbEhvbGRlcnNBc0xvY2Fscyhub25TdGF0aWNTdGF0ZUhvbGRlcnMpLAogICAgICAgICAgJ3Byb3RvdHlwZXMnOiBlbWl0UHJvdG90eXBlcyhmcmFnbWVudCwgc29mdERlZmVycmVkOiB0cnVlKSwKICAgICAgICAgICdhbGlhc2VzJzogZW1pdEluc3RhbmNlTWV0aG9kQWxpYXNlcyhmcmFnbWVudCwgc29mdERlZmVycmVkOiB0cnVlKSwKICAgICAgICAgICd0ZWFyT2Zmcyc6IGVtaXRJbnN0YWxsVGVhck9mZnMoZnJhZ21lbnQsIHNvZnREZWZlcnJlZDogdHJ1ZSksCiAgICAgICAgICAnaW5oZXJpdGFuY2UnOiBlbWl0SW5oZXJpdGFuY2UoZnJhZ21lbnQsIHNvZnREZWZlcnJlZDogdHJ1ZSksCiAgICAgICAgfSksCiAgICAgICAgbWFpbkNvZGUKICAgICAgXSk7CiAgICB9CiAgICByZXR1cm4gbWFpbkNvZGU7CiAgfQoKICBqcy5TdGF0ZW1lbnQgZW1pdEluc3RhbGxIb2xkZXJzQXNMb2NhbHMoSXRlcmFibGU8SG9sZGVyPiBob2xkZXJzKSB7CiAgICBMaXN0PGpzLlN0YXRlbWVudD4gaG9sZGVySW5pdHMgPSBbXTsKICAgIGludCBjb3VudGVyID0gMDsKICAgIGZvciAoSG9sZGVyIGhvbGRlciBpbiBob2xkZXJzKSB7CiAgICAgIGhvbGRlckluaXRzLmFkZChuZXcganMuRXhwcmVzc2lvblN0YXRlbWVudChuZXcganMuVmFyaWFibGVJbml0aWFsaXphdGlvbigKICAgICAgICAgIG5ldyBqcy5WYXJpYWJsZURlY2xhcmF0aW9uKGhvbGRlci5uYW1lLCBhbGxvd1JlbmFtZTogZmFsc2UpLAogICAgICAgICAganMuanMoImhvbGRlcnNMaXN0WyNdIiwganMubnVtYmVyKGNvdW50ZXIrKykpKSkpOwogICAgfQogICAgcmV0dXJuIG5ldyBqcy5CbG9jayhob2xkZXJJbml0cyk7CiAgfQoKICBqcy5FeHByZXNzaW9uIGVtaXREZWZlcnJlZEZyYWdtZW50KERlZmVycmVkRnJhZ21lbnQgZnJhZ21lbnQsCiAgICAgIGpzLkV4cHJlc3Npb24gZGVmZXJyZWRUeXBlcywgTGlzdDxIb2xkZXI+IGhvbGRlcnMpIHsKICAgIEhvbGRlckNvZGUgaG9sZGVyQ29kZSA9CiAgICAgICAgZW1pdEhvbGRlcnMoaG9sZGVycywgZnJhZ21lbnQsIGluaXRpYWxpemVFbXB0eUhvbGRlcnM6IGZhbHNlKTsKCiAgICBMaXN0PEhvbGRlcj4gbm9uU3RhdGljU3RhdGVIb2xkZXJzID0gaG9sZGVycwogICAgICAgIC53aGVyZSgoSG9sZGVyIGhvbGRlcikgPT4gIWhvbGRlci5pc1N0YXRpY1N0YXRlSG9sZGVyKQogICAgICAgIC50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKCiAgICBMaXN0PGpzLlN0YXRlbWVudD4gdXBkYXRlSG9sZGVyQXNzaWdubWVudHMgPSBbXTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9uU3RhdGljU3RhdGVIb2xkZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgIEhvbGRlciBob2xkZXIgPSBub25TdGF0aWNTdGF0ZUhvbGRlcnNbaV07CiAgICAgIGlmIChob2xkZXJDb2RlLmFjdGl2ZUhvbGRlcnMuY29udGFpbnMoaG9sZGVyKSkgewogICAgICAgIHVwZGF0ZUhvbGRlckFzc2lnbm1lbnRzLmFkZChqcy5qcy5zdGF0ZW1lbnQoCiAgICAgICAgICAgICcjaG9sZGVyID0gaHVua0hlbHBlcnMudXBkYXRlSG9sZGVyKGhvbGRlcnNMaXN0WyNpbmRleF0sICNob2xkZXIpJywKICAgICAgICAgICAgewogICAgICAgICAgICAgICdpbmRleCc6IGpzLm51bWJlcihpKSwKICAgICAgICAgICAgICAnaG9sZGVyJzogbmV3IGpzLlZhcmlhYmxlVXNlKGhvbGRlci5uYW1lKQogICAgICAgICAgICB9KSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gVE9ETyhzcmEpOiBDaGFuZ2UgZGVjbGFyYXRpb24gZm9sbG93ZWQgYnkgYXNzaWdubWVudHMgdG8gZGVjbGFyYXRpb25zCiAgICAgICAgLy8gd2l0aCBpbml0aWFsaXphdGlvbi4KICAgICAgICB1cGRhdGVIb2xkZXJBc3NpZ25tZW50cy5hZGQoanMuanMuc3RhdGVtZW50KAogICAgICAgICAgICAnI2hvbGRlciA9IGhvbGRlcnNMaXN0WyNpbmRleF0nLCB7CiAgICAgICAgICAnaW5kZXgnOiBqcy5udW1iZXIoaSksCiAgICAgICAgICAnaG9sZGVyJzogbmV3IGpzLlZhcmlhYmxlVXNlKGhvbGRlci5uYW1lKQogICAgICAgIH0pKTsKICAgICAgfQogICAgfQoKICAgIHZhciBjbGFzc1Byb3RvdHlwZXMgPSBlbWl0UHJvdG90eXBlcyhmcmFnbWVudCwgaW5jbHVkZUNsb3N1cmVzOiBmYWxzZSk7CiAgICB2YXIgY2xvc3VyZVByb3RvdHlwZXMgPSBlbWl0UHJvdG90eXBlcyhmcmFnbWVudCwgaW5jbHVkZUNsb3N1cmVzOiB0cnVlKTsKICAgIHZhciBpbmhlcml0YW5jZSA9IGVtaXRJbmhlcml0YW5jZShmcmFnbWVudCk7CiAgICB2YXIgbWV0aG9kQWxpYXNlcyA9IGVtaXRJbnN0YW5jZU1ldGhvZEFsaWFzZXMoZnJhZ21lbnQpOwogICAgdmFyIHRlYXJPZmZzID0gZW1pdEluc3RhbGxUZWFyT2ZmcyhmcmFnbWVudCk7CiAgICB2YXIgY29uc3RhbnRzID0gZW1pdENvbnN0YW50cyhmcmFnbWVudCk7CiAgICB2YXIgdHlwZVJ1bGVzID0gZW1pdFR5cGVSdWxlcyhmcmFnbWVudCk7CiAgICB2YXIgc3RhdGljTm9uRmluYWxGaWVsZHMgPSBlbWl0U3RhdGljTm9uRmluYWxGaWVsZHMoZnJhZ21lbnQpOwogICAgdmFyIGxhenlJbml0aWFsaXplcnMgPSBlbWl0TGF6aWx5SW5pdGlhbGl6ZWRTdGF0aWNzKGZyYWdtZW50KTsKICAgIC8vIFRPRE8oZmxvaXRzY2gpOiBvbmx5IGNhbGwgZW1pdE5hdGl2ZVN1cHBvcnQgaWYgd2UgbmVlZCBuYXRpdmUuCiAgICB2YXIgbmF0aXZlU3VwcG9ydCA9IGVtaXROYXRpdmVTdXBwb3J0KGZyYWdtZW50KTsKCiAgICAvLyBUT0RPKHNyYSk6IEhvdyBkbyB3ZSB0ZWxsIGlmIFtkZWZlcnJlZFR5cGVzXSBpcyBlbXB0eT8gSXQgaXMgZmlsbGVkLWluCiAgICAvLyBsYXRlciB2aWEgdGhlIHByb2dyYW0gZmluYWxpemVycy4gU28gd2Ugc2hvdWxkIGRlZmVyIHRoZSBkZWNpc2lvbiBvbiB0aGUKICAgIC8vIGVtcHRpbmVzcyBvZiB0aGUgZnJhZ21lbnQgdW50aWwgdGhlIGZpbmFsaXplcnMgaGF2ZSBydW4uICBGb3Igbm93IHdlIHNlZW0KICAgIC8vIHRvIGdldCBhd2F5IHdpdGggdGhlIGZhY3QgdGhhdCB0eXBlIGluZGV4ZXMgYXJlIGVpdGhlciAoMSkgbWFpbiB1bml0IG9yCiAgICAvLyAoMikgbG9jYWwgdG8gdGhlIGVtaXR0ZWQgdW5pdCwgc28gdGhlcmUgaXMgbm8gc3VjaCB0aGluZyBhcyBhIHR5cGUgaW4gYQogICAgLy8gZGVmZXJyZWQgdW5pdCB0aGF0IGlzIHJlZmVyZW5jZWQgZnJvbSBhbm90aGVyIGRlZmVycmVkIHVuaXQuICBJZiB3ZSBkaWQKICAgIC8vIG5vdCBlbWl0IGFueSBmdW5jdGlvbnMsIHRoZW4gd2UgcHJvYmFibHkgZGlkIG5vdCB1c2UgdGhlIHNpZ25hdHVyZSB0eXBlcwogICAgLy8gaW4gdGhlIE91dHB1dFVuaXQncyB0eXBlcywgbGVhdmluZyB0aGVtIHVudXNlZCBhbmQgdHJlZS1zaGFrZW4uCgogICAgaWYgKGhvbGRlckNvZGUuYWN0aXZlSG9sZGVycy5pc0VtcHR5ICYmCiAgICAgICAgaXNFbXB0eVN0YXRlbWVudChjbGFzc1Byb3RvdHlwZXMpICYmCiAgICAgICAgaXNFbXB0eVN0YXRlbWVudChjbG9zdXJlUHJvdG90eXBlcykgJiYKICAgICAgICBpc0VtcHR5U3RhdGVtZW50KGluaGVyaXRhbmNlKSAmJgogICAgICAgIGlzRW1wdHlTdGF0ZW1lbnQobWV0aG9kQWxpYXNlcykgJiYKICAgICAgICBpc0VtcHR5U3RhdGVtZW50KHRlYXJPZmZzKSAmJgogICAgICAgIGlzRW1wdHlTdGF0ZW1lbnQoY29uc3RhbnRzKSAmJgogICAgICAgIGlzRW1wdHlTdGF0ZW1lbnQoc3RhdGljTm9uRmluYWxGaWVsZHMpICYmCiAgICAgICAgaXNFbXB0eVN0YXRlbWVudChsYXp5SW5pdGlhbGl6ZXJzKSAmJgogICAgICAgIGlzRW1wdHlTdGF0ZW1lbnQobmF0aXZlU3VwcG9ydCkpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAganMuRXhwcmVzc2lvbiBjb2RlID0ganMuanMoZGVmZXJyZWRCb2lsZXJwbGF0ZURhcnQyLCB7CiAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiBkb24ndCBqdXN0IHJlZmVyZW5jZSAnaW5pdCcuCiAgICAgICdlbWJlZGRlZEdsb2JhbHNPYmplY3QnOiBuZXcganMuUGFyYW1ldGVyKCdpbml0JyksCiAgICAgICdzdGF0aWNTdGF0ZSc6IG5ldyBqcy5QYXJhbWV0ZXIoX25hbWVyLnN0YXRpY1N0YXRlSG9sZGVyKSwKICAgICAgJ2hvbGRlcnMnOiBob2xkZXJDb2RlLnN0YXRlbWVudHMsCiAgICAgICdkZWZlcnJlZEhvbGRlcnNMaXN0JzogbmV3IGpzLkFycmF5SW5pdGlhbGl6ZXIoaG9sZGVyQ29kZS5hY3RpdmVIb2xkZXJzCiAgICAgICAgICAubWFwKChob2xkZXIpID0+IGpzLmpzKCIjIiwgaG9sZGVyLm5hbWUpKQogICAgICAgICAgLnRvTGlzdChncm93YWJsZTogZmFsc2UpKSwKICAgICAgJ3VwZGF0ZUhvbGRlcnMnOiBuZXcganMuQmxvY2sodXBkYXRlSG9sZGVyQXNzaWdubWVudHMpLAogICAgICAncHJvdG90eXBlcyc6IGNsYXNzUHJvdG90eXBlcywKICAgICAgJ2Nsb3N1cmVzJzogY2xvc3VyZVByb3RvdHlwZXMsCiAgICAgICdpbmhlcml0YW5jZSc6IGluaGVyaXRhbmNlLAogICAgICAnYWxpYXNlcyc6IG1ldGhvZEFsaWFzZXMsCiAgICAgICd0ZWFyT2Zmcyc6IHRlYXJPZmZzLAogICAgICAndHlwZVJ1bGVzJzogdHlwZVJ1bGVzLAogICAgICAnY29uc3RhbnRzJzogY29uc3RhbnRzLAogICAgICAnc3RhdGljTm9uRmluYWxGaWVsZHMnOiBzdGF0aWNOb25GaW5hbEZpZWxkcywKICAgICAgJ2xhenlTdGF0aWNzJzogbGF6eUluaXRpYWxpemVycywKICAgICAgJ3R5cGVzJzogZGVmZXJyZWRUeXBlcywKICAgICAgJ25hdGl2ZVN1cHBvcnQnOiBuYXRpdmVTdXBwb3J0LAogICAgICAndHlwZXNPZmZzZXQnOiBfbmFtZXIudHlwZXNPZmZzZXROYW1lLAogICAgfSk7CgogICAgaWYgKF9vcHRpb25zLmV4cGVyaW1lbnRTdGFydHVwRnVuY3Rpb25zKSB7CiAgICAgIGNvZGUgPSBqcy5QYXJlbnRoZXNlcyhjb2RlKTsKICAgIH0KICAgIHJldHVybiBjb2RlOwogIH0KCiAgLy8vIEVtaXRzIGFsbCBob2xkZXJzLCBleGNlcHQgZm9yIHRoZSBzdGF0aWMtc3RhdGUgaG9sZGVyLgogIC8vLwogIC8vLyBUaGUgZW1pdHRlZCBob2xkZXJzIGNvbnRhaW4gY2xhc3NlcyAob25seSB0aGUgY29uc3RydWN0b3JzKSBhbmQgYWxsCiAgLy8vIHN0YXRpYyBmdW5jdGlvbnMuCiAgSG9sZGVyQ29kZSBlbWl0SG9sZGVycyhMaXN0PEhvbGRlcj4gaG9sZGVycywgRnJhZ21lbnQgZnJhZ21lbnQsCiAgICAgIHtib29sIGluaXRpYWxpemVFbXB0eUhvbGRlcnN9KSB7CiAgICBhc3NlcnQoaW5pdGlhbGl6ZUVtcHR5SG9sZGVycyAhPSBudWxsKTsKICAgIC8vIFNraXAgdGhlIHN0YXRpYy1zdGF0ZSBob2xkZXIgaW4gdGhpcyBmdW5jdGlvbi4KICAgIGhvbGRlcnMgPSBob2xkZXJzCiAgICAgICAgLndoZXJlKChIb2xkZXIgaG9sZGVyKSA9PiAhaG9sZGVyLmlzU3RhdGljU3RhdGVIb2xkZXIpCiAgICAgICAgLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwoKICAgIE1hcDxIb2xkZXIsIExpc3Q8anMuUHJvcGVydHk+PiBob2xkZXJDb2RlID0ge307CgogICAgZm9yIChIb2xkZXIgaG9sZGVyIGluIGhvbGRlcnMpIHsKICAgICAgaG9sZGVyQ29kZVtob2xkZXJdID0gPGpzLlByb3BlcnR5PltdOwogICAgfQoKICAgIGZvciAoTGlicmFyeSBsaWJyYXJ5IGluIGZyYWdtZW50LmxpYnJhcmllcykgewogICAgICBmb3IgKFN0YXRpY01ldGhvZCBtZXRob2QgaW4gbGlicmFyeS5zdGF0aWNzKSB7CiAgICAgICAgYXNzZXJ0KCFtZXRob2QuaG9sZGVyLmlzU3RhdGljU3RhdGVIb2xkZXIpOwogICAgICAgIE1hcDxqcy5OYW1lLCBqcy5FeHByZXNzaW9uPiBwcm9wZXJ0eU1hcCA9IGVtaXRTdGF0aWNNZXRob2QobWV0aG9kKTsKICAgICAgICBwcm9wZXJ0eU1hcC5mb3JFYWNoKChqcy5OYW1lIGtleSwganMuRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgICAgICAgdmFyIHByb3BlcnR5ID0gbmV3IGpzLlByb3BlcnR5KGpzLnF1b3RlTmFtZShrZXkpLCB2YWx1ZSk7CiAgICAgICAgICBob2xkZXJDb2RlW21ldGhvZC5ob2xkZXJdLmFkZChwcm9wZXJ0eSk7CiAgICAgICAgICByZWdpc3RlckVudGl0eUFzdChtZXRob2QuZWxlbWVudCwgcHJvcGVydHksIGxpYnJhcnk6IGxpYnJhcnkuZWxlbWVudCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgZm9yIChDbGFzcyBjbHMgaW4gbGlicmFyeS5jbGFzc2VzKSB7CiAgICAgICAgYXNzZXJ0KCFjbHMuaG9sZGVyLmlzU3RhdGljU3RhdGVIb2xkZXIpOwogICAgICAgIGpzLkV4cHJlc3Npb24gY29uc3RydWN0b3IgPSBlbWl0Q29uc3RydWN0b3IoY2xzKTsKICAgICAgICB2YXIgcHJvcGVydHkgPSBuZXcganMuUHJvcGVydHkoanMucXVvdGVOYW1lKGNscy5uYW1lKSwgY29uc3RydWN0b3IpOwogICAgICAgIHJlZ2lzdGVyRW50aXR5QXN0KGNscy5lbGVtZW50LCBwcm9wZXJ0eSwgbGlicmFyeTogbGlicmFyeS5lbGVtZW50KTsKICAgICAgICBob2xkZXJDb2RlW2Nscy5ob2xkZXJdLmFkZChwcm9wZXJ0eSk7CiAgICAgIH0KICAgIH0KCiAgICBMaXN0PGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24+IGhvbGRlckluaXRpYWxpemF0aW9ucyA9IFtdOwogICAgTGlzdDxIb2xkZXI+IGFjdGl2ZUhvbGRlcnMgPSBbXTsKCiAgICBmb3IgKEhvbGRlciBob2xkZXIgaW4gaG9sZGVycykgewogICAgICBMaXN0PGpzLlByb3BlcnR5PiBwcm9wZXJ0aWVzID0gaG9sZGVyQ29kZVtob2xkZXJdOwogICAgICBpZiAocHJvcGVydGllcy5pc0VtcHR5KSB7CiAgICAgICAgaG9sZGVySW5pdGlhbGl6YXRpb25zLmFkZChuZXcganMuVmFyaWFibGVJbml0aWFsaXphdGlvbigKICAgICAgICAgICAgbmV3IGpzLlZhcmlhYmxlRGVjbGFyYXRpb24oaG9sZGVyLm5hbWUsIGFsbG93UmVuYW1lOiBmYWxzZSksCiAgICAgICAgICAgIGluaXRpYWxpemVFbXB0eUhvbGRlcnMKICAgICAgICAgICAgICAgID8gbmV3IGpzLk9iamVjdEluaXRpYWxpemVyKHByb3BlcnRpZXMpCiAgICAgICAgICAgICAgICA6IG51bGwpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhY3RpdmVIb2xkZXJzLmFkZChob2xkZXIpOwogICAgICAgIGhvbGRlckluaXRpYWxpemF0aW9ucy5hZGQobmV3IGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24oCiAgICAgICAgICAgIG5ldyBqcy5WYXJpYWJsZURlY2xhcmF0aW9uKGhvbGRlci5uYW1lLCBhbGxvd1JlbmFtZTogZmFsc2UpLAogICAgICAgICAgICBuZXcganMuT2JqZWN0SW5pdGlhbGl6ZXIocHJvcGVydGllcykpKTsKICAgICAgfQogICAgfQoKICAgIC8vIFRoZSBnZW5lcmF0ZWQgY29kZSBsb29rcyBsaWtlIHRoaXM6CiAgICAvLwogICAgLy8gICAgewogICAgLy8gICAgICB2YXIgSCA9IHsuLi59LCAuLi4sIEcgPSB7Li4ufTsKICAgIC8vICAgICAgdmFyIGhvbGRlcnMgPSBbIEgsIC4uLiwgRyBdOyAvLyBNYWluIHVuaXQgb25seS4KICAgIC8vICAgIH0KCiAgICBMaXN0PGpzLlN0YXRlbWVudD4gc3RhdGVtZW50cyA9IFtdOwogICAgc3RhdGVtZW50cy5hZGQobmV3IGpzLkV4cHJlc3Npb25TdGF0ZW1lbnQobmV3IGpzLlZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KAogICAgICAgIGhvbGRlckluaXRpYWxpemF0aW9ucywKICAgICAgICBpbmRlbnRTcGxpdHM6IGZhbHNlKSkpOwogICAgaWYgKGluaXRpYWxpemVFbXB0eUhvbGRlcnMpIHsKICAgICAgc3RhdGVtZW50cy5hZGQoanMuanMuc3RhdGVtZW50KAogICAgICAgICAgJ3ZhciBob2xkZXJzID0gIycsCiAgICAgICAgICBuZXcganMuQXJyYXlJbml0aWFsaXplcihob2xkZXJzCiAgICAgICAgICAgICAgLm1hcCgoaG9sZGVyKSA9PiBuZXcganMuVmFyaWFibGVVc2UoaG9sZGVyLm5hbWUpKQogICAgICAgICAgICAgIC50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKSkpKTsKICAgIH0KICAgIHJldHVybiBuZXcgSG9sZGVyQ29kZSgKICAgICAgYWN0aXZlSG9sZGVyczogYWN0aXZlSG9sZGVycywKICAgICAgc3RhdGVtZW50czogbmV3IGpzLkJsb2NrKHN0YXRlbWVudHMpLAogICAgKTsKICB9CgogIC8vLyBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBjb25zdGFudCBob2xkZXIsIG9yIHRoZSBKUy1saXRlcmFsIGBudWxsYC4KICBqcy5FeHByZXNzaW9uIGJ1aWxkQ29uc3RhbnRIb2xkZXJSZWZlcmVuY2UoUHJvZ3JhbSBwcm9ncmFtKSB7CiAgICBIb2xkZXIgY29uc3RhbnRIb2xkZXIgPSBwcm9ncmFtLmhvbGRlcnMuZmlyc3RXaGVyZSgKICAgICAgICAoSG9sZGVyIGhvbGRlcikgPT4gaG9sZGVyLmlzQ29uc3RhbnRzSG9sZGVyLAogICAgICAgIG9yRWxzZTogKCkgPT4gbnVsbCk7CiAgICBpZiAoY29uc3RhbnRIb2xkZXIgPT0gbnVsbCkgcmV0dXJuIG5ldyBqcy5MaXRlcmFsTnVsbCgpOwogICAgcmV0dXJuIG5ldyBqcy5WYXJpYWJsZVVzZShjb25zdGFudEhvbGRlci5uYW1lKTsKICB9CgogIC8vLyBFbWl0cyB0aGUgZ2l2ZW4gW21ldGhvZF0uCiAgLy8vCiAgLy8vIEEgRGFydCBtZXRob2QgbWlnaHQgcmVzdWx0IGluIHNldmVyYWwgSmF2YVNjcmlwdCBmdW5jdGlvbnMsIGlmIGl0CiAgLy8vIHJlcXVpcmVzIHN0dWJzLiBUaGUgcmV0dXJuZWQgbWFwIGNvbnRhaW5zIHRoZSBvcmlnaW5hbCBtZXRob2QgYW5kIGFsbAogIC8vLyB0aGUgc3R1YnMgaXQgbmVlZHMuCiAgTWFwPGpzLk5hbWUsIGpzLkV4cHJlc3Npb24+IGVtaXRTdGF0aWNNZXRob2QoU3RhdGljTWV0aG9kIG1ldGhvZCkgewogICAgTWFwPGpzLk5hbWUsIGpzLkV4cHJlc3Npb24+IGpzTWV0aG9kcyA9IHt9OwoKICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gaW5zdGFsbCBzdHViLW1ldGhvZHMuIFRoZXkgY2FuIG9ubHkgYmUgdXNlZCB3aGVuIHRoZXJlCiAgICAvLyBhcmUgdGVhci1vZmZzLCBpbiB3aGljaCBjYXNlIHRoZXkgYXJlIGVtaXR0ZWQgdGhlcmUuCiAgICBhc3NlcnQoKCkgewogICAgICBpZiAobWV0aG9kIGlzIFN0YXRpY0RhcnRNZXRob2QpIHsKICAgICAgICByZXR1cm4gbWV0aG9kLm5lZWRzVGVhck9mZiB8fCBtZXRob2QucGFyYW1ldGVyU3R1YnMuaXNFbXB0eTsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0oKSk7CiAgICBqc01ldGhvZHNbbWV0aG9kLm5hbWVdID0gbWV0aG9kLmNvZGU7CgogICAgcmV0dXJuIGpzTWV0aG9kczsKICB9CgogIC8vLyBFbWl0cyBhIGNvbnN0cnVjdG9yIGZvciB0aGUgZ2l2ZW4gY2xhc3MgW2Nsc10uCiAgLy8vCiAgLy8vIFRoZSBjb25zdHJ1Y3RvciBpcyBzdGF0aWNhbGx5IGJ1aWx0LgogIGpzLkV4cHJlc3Npb24gZW1pdENvbnN0cnVjdG9yKENsYXNzIGNscykgewogICAganMuTmFtZSBuYW1lID0gY2xzLm5hbWU7CiAgICAvLyBJZiB0aGUgY2xhc3MgaXMgbm90IGRpcmVjdGx5IGluc3RhbnRpYXRlZCB3ZSBvbmx5IG5lZWQgaXQgZm9yIGluaGVyaXRhbmNlCiAgICAvLyBvciBSVEkuIEluIGVpdGhlciBjYXNlIHdlIGRvbid0IG5lZWQgaXRzIGZpZWxkcy4KICAgIGlmIChjbHMuaXNOYXRpdmUgfHwgIWNscy5pc0RpcmVjdGx5SW5zdGFudGlhdGVkKSB7CiAgICAgIHJldHVybiBqcy5qcygnZnVuY3Rpb24gIygpIHsgfScsIG5hbWUpOwogICAgfQoKICAgIHZhciBzdGF0ZW1lbnRzID0gPGpzLlN0YXRlbWVudD5bXTsKICAgIHZhciBwYXJhbWV0ZXJzID0gPGpzLlBhcmFtZXRlcj5bXTsKICAgIHZhciB0aGlzUmVmOwoKICAgIGlmIChjbHMuaXNTb2Z0RGVmZXJyZWQpIHsKICAgICAgc3RhdGVtZW50cy5hZGQoanMuanMuc3RhdGVtZW50KCdzb2Z0RGVmKHRoaXMpJykpOwogICAgfSBlbHNlIGlmIChfb3B0aW9ucy5leHBlcmltZW50YWxUcmFja0FsbG9jYXRpb25zKSB7CiAgICAgIFN0cmluZyBxdWFsaWZpZWROYW1lID0KICAgICAgICAgICIke2Nscy5lbGVtZW50LmxpYnJhcnkuY2Fub25pY2FsVXJpfToke2Nscy5lbGVtZW50Lm5hbWV9IjsKICAgICAgc3RhdGVtZW50cy5hZGQoanMuanMuc3RhdGVtZW50KCdhbGxvY2F0aW9uc1siJHF1YWxpZmllZE5hbWUiXSA9IHRydWUnKSk7CiAgICB9CgogICAgTGlzdDxGaWVsZD4gZW1pdHRlZEZpZWxkcyA9IGNscy5maWVsZHMud2hlcmUoKGYpID0+ICFmLmlzRWxpZGVkKS50b0xpc3QoKTsKCiAgICAvLyBJZiB0aGVyZSBhcmUgbWFueSByZWZlcmVuY2VzIHRvIGB0aGlzYCwgY2FjaGUgaXQgaW4gYSBsb2NhbC4KICAgIGlmIChlbWl0dGVkRmllbGRzLmxlbmd0aCArIChjbHMuaGFzUnRpRmllbGQgPyAxIDogMCkgPj0gNCkgewogICAgICAvLyBQYXJhbWV0ZXJzIGFyZSBuYW1lZCB0MCwgdDEsIGV0Yywgc28gJ18nIHdpbGwgbm90IGNvbmZsaWN0LiBGb3JjaW5nICdfJwogICAgICAvLyBpbiBtaW5pZmllZCBtb2RlIHdvcmtzIGJlY2F1c2Ugbm8gcGFyYW1ldGVyIG9yIGxvY2FsIGFsc28gbWluaWZpZXMgdG8KICAgICAgLy8gJ18nICh0aGUgbWluaWZpZXIgZG9lc24ndCBrbm93ICdfJyBpcyBhdmFpbGFibGUpLgogICAgICBqcy5OYW1lIHVuZGVyc2NvcmUgPSBuZXcgU3RyaW5nQmFja2VkTmFtZSgnXycpOwogICAgICBzdGF0ZW1lbnRzLmFkZChqcy5qcy5zdGF0ZW1lbnQoJ3ZhciAjID0gdGhpczsnLCB1bmRlcnNjb3JlKSk7CiAgICAgIHRoaXNSZWYgPSB1bmRlcnNjb3JlOwogICAgfSBlbHNlIHsKICAgICAgdGhpc1JlZiA9IGpzLmpzKCd0aGlzJyk7CiAgICB9CgogICAgLy8gQ2hhaW4gYXNzaWdubWVudHMgb2YgdGhlIHNhbWUgdmFsdWUsIGUuZy4gYHRoaXMuYiA9IHRoaXMuYSA9IG51bGxgLgogICAgLy8gTGltaXQgY2hhaW4gbGVuZ3RoIHNvIHRoYXQgdGhlIEphdmFTY3JpcHQgcGFyc2VyIGhhcyBib3VuZGVkIHJlY3Vyc2lvbi4KICAgIGNvbnN0IGludCBtYXhDaGFpbkxlbmd0aCA9IDMwOwogICAganMuRXhwcmVzc2lvbiBhc3NpZ25tZW50ID0gbnVsbDsKICAgIGludCBjaGFpbkxlbmd0aCA9IDA7CiAgICBDb25zdGFudFZhbHVlIHByZXZpb3VzQ29uc3RhbnQgPSBudWxsOwogICAgdm9pZCBmbHVzaEFzc2lnbm1lbnQoKSB7CiAgICAgIGlmIChhc3NpZ25tZW50ICE9IG51bGwpIHsKICAgICAgICBzdGF0ZW1lbnRzLmFkZChqcy5qcy5zdGF0ZW1lbnQoJyM7JywgYXNzaWdubWVudCkpOwogICAgICAgIGFzc2lnbm1lbnQgPSBudWxsOwogICAgICAgIGNoYWluTGVuZ3RoID0gMDsKICAgICAgICBwcmV2aW91c0NvbnN0YW50ID0gbnVsbDsKICAgICAgfQogICAgfQoKICAgIGZvciAoRmllbGQgZmllbGQgaW4gZW1pdHRlZEZpZWxkcykgewogICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gZmllbGQuaW5pdGlhbGl6ZXJJbkFsbG9jYXRvcjsKICAgICAgaWYgKGNvbnN0YW50ICE9IG51bGwpIHsKICAgICAgICBpZiAoY29uc3RhbnQgPT0gcHJldmlvdXNDb25zdGFudCAmJiBjaGFpbkxlbmd0aCA8IG1heENoYWluTGVuZ3RoKSB7CiAgICAgICAgICBhc3NpZ25tZW50ID0ganMuanMoJyMuIyA9ICMnLCBbdGhpc1JlZiwgZmllbGQubmFtZSwgYXNzaWdubWVudF0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmbHVzaEFzc2lnbm1lbnQoKTsKICAgICAgICAgIGFzc2lnbm1lbnQgPSBqcy5qcygnIy4jID0gIycsIFsKICAgICAgICAgICAgdGhpc1JlZiwKICAgICAgICAgICAgZmllbGQubmFtZSwKICAgICAgICAgICAgX2NvbnN0YW50RW1pdHRlci5nZW5lcmF0ZShjb25zdGFudCksCiAgICAgICAgICBdKTsKICAgICAgICB9CiAgICAgICAgKytjaGFpbkxlbmd0aDsKICAgICAgICBwcmV2aW91c0NvbnN0YW50ID0gY29uc3RhbnQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZmx1c2hBc3NpZ25tZW50KCk7CiAgICAgICAganMuUGFyYW1ldGVyIHBhcmFtZXRlciA9IG5ldyBqcy5QYXJhbWV0ZXIoJ3Qke3BhcmFtZXRlcnMubGVuZ3RofScpOwogICAgICAgIHBhcmFtZXRlcnMuYWRkKHBhcmFtZXRlcik7CiAgICAgICAgc3RhdGVtZW50cy5hZGQoCiAgICAgICAgICAgIGpzLmpzLnN0YXRlbWVudCgnIy4jID0gIycsIFt0aGlzUmVmLCBmaWVsZC5uYW1lLCBwYXJhbWV0ZXIubmFtZV0pKTsKICAgICAgfQogICAgfQogICAgZmx1c2hBc3NpZ25tZW50KCk7CgogICAgaWYgKGNscy5oYXNSdGlGaWVsZCkgewogICAgICBqcy5QYXJhbWV0ZXIgcGFyYW1ldGVyID0gbmV3IGpzLlBhcmFtZXRlcigndCR7cGFyYW1ldGVycy5sZW5ndGh9Jyk7CiAgICAgIHBhcmFtZXRlcnMuYWRkKHBhcmFtZXRlcik7CiAgICAgIHN0YXRlbWVudHMuYWRkKGpzLmpzLnN0YXRlbWVudCgKICAgICAgICAgICcjLiMgPSAjJywgW3RoaXNSZWYsIF9uYW1lci5ydGlGaWVsZEpzTmFtZSwgcGFyYW1ldGVyLm5hbWVdKSk7CiAgICB9CgogICAgcmV0dXJuIGpzLmpzKCdmdW5jdGlvbiAjKCMpIHsgIyB9JywgW25hbWUsIHBhcmFtZXRlcnMsIHN0YXRlbWVudHNdKTsKICB9CgogIC8vLyBFbWl0cyB0aGUgcHJvdG90eXBlLXNlY3Rpb24gb2YgdGhlIGZyYWdtZW50LgogIC8vLwogIC8vLyBUaGlzIHNlY3Rpb24gdXBkYXRlcyB0aGUgcHJvdG90eXBlLXByb3BlcnR5IG9mIGFsbCBjb25zdHJ1Y3RvcnMgaW4gdGhlCiAgLy8vIGdsb2JhbCBob2xkZXJzLgogIC8vLwogIC8vLyBbc29mdERlZmVycmVkXSBkZXRlcm1pbmUgd2hldGhlciBwcm90b3R5cGVzIGZvciBzb2Z0IGRlZmVycmVkIGNsYXNzZXMgYXJlCiAgLy8vIGdlbmVyYXRlZC4KICAvLy8KICAvLy8gSWYgW2luY2x1ZGVDbG9zdXJlc10gaXMgYHRydWVgIG9ubHkgcHJvdG90eXBlcyBmb3IgY2xvc3VyZSBjbGFzc2VzIGFyZQogIC8vLyBnZW5lcmF0ZWQsIGlmIFtpbmNsdWRlQ2xvc3VyZXNdIGlzIGBmYWxzZWAgb25seSBwcm90b3R5cGVzIGZvciBub24tY2xvc3VyZQogIC8vLyBjbGFzc2VzIGFyZSBnZW5lcmF0ZWQuIE90aGVyd2lzZSBwcm90b3R5cGVzIGZvciBhbGwgY2xhc3NlcyBhcmUgZ2VuZXJhdGVkLgogIGpzLlN0YXRlbWVudCBlbWl0UHJvdG90eXBlcyhGcmFnbWVudCBmcmFnbWVudCwKICAgICAge2Jvb2wgc29mdERlZmVycmVkID0gZmFsc2UsIGJvb2wgaW5jbHVkZUNsb3N1cmVzfSkgewogICAgTGlzdDxqcy5TdGF0ZW1lbnQ+IGFzc2lnbm1lbnRzID0gZnJhZ21lbnQubGlicmFyaWVzCiAgICAgICAgLmV4cGFuZCgoTGlicmFyeSBsaWJyYXJ5KSA9PiBsaWJyYXJ5LmNsYXNzZXMpCiAgICAgICAgLndoZXJlKChDbGFzcyBjbHMpIHsKICAgICAgaWYgKGluY2x1ZGVDbG9zdXJlcyAhPSBudWxsKSB7CiAgICAgICAgaWYgKGNscy5lbGVtZW50LmlzQ2xvc3VyZSAhPSBpbmNsdWRlQ2xvc3VyZXMpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGNscy5pc1NvZnREZWZlcnJlZCA9PSBzb2Z0RGVmZXJyZWQ7CiAgICB9KS5tYXAoKENsYXNzIGNscykgewogICAgICB2YXIgcHJvdG8gPSBqcy5qcy5zdGF0ZW1lbnQoCiAgICAgICAgICAnIy5wcm90b3R5cGUgPSAjOycsIFtjbGFzc1JlZmVyZW5jZShjbHMpLCBlbWl0UHJvdG90eXBlKGNscyldKTsKICAgICAgQ2xhc3NFbnRpdHkgZWxlbWVudCA9IGNscy5lbGVtZW50OwogICAgICByZWdpc3RlckVudGl0eUFzdChlbGVtZW50LCBwcm90bywgbGlicmFyeTogZWxlbWVudC5saWJyYXJ5KTsKICAgICAgcmV0dXJuIHByb3RvOwogICAgfSkudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CgogICAgcmV0dXJuIG5ldyBqcy5CbG9jayhhc3NpZ25tZW50cyk7CiAgfQoKICAvLy8gRW1pdHMgdGhlIHByb3RvdHlwZSBvZiB0aGUgZ2l2ZW4gY2xhc3MgW2Nsc10uCiAgLy8vCiAgLy8vIFRoZSBwcm90b3R5cGUgaXMgZ2VuZXJhdGVkIGFzIG9iamVjdCBsaXRlcmFsLiBJbmhlcml0YW5jZSBpcyBpZ25vcmVkLgogIC8vLwogIC8vLyBUaGUgcHJvdG90eXBlIGFsc28gaW5jbHVkZXMgdGhlIGBpcy1wcm9wZXJ0eWAgdGhhdCBldmVyeSBjbGFzcyBtdXN0IGhhdmUuCiAgLy8gVE9ETyhmbG9pdHNjaCk6IHdlIGNvdWxkIGF2b2lkIHRoYXQgcHJvcGVydHkgaWYgd2Uga25ldyB0aGF0IGl0IHdhc24ndAogIC8vICAgIG5lZWRlZC4KICBqcy5FeHByZXNzaW9uIGVtaXRQcm90b3R5cGUoQ2xhc3MgY2xzKSB7CiAgICBJdGVyYWJsZTxNZXRob2Q+IG1ldGhvZHMgPSBjbHMubWV0aG9kczsKICAgIEl0ZXJhYmxlPE1ldGhvZD4gY2hlY2tlZFNldHRlcnMgPSBjbHMuY2hlY2tlZFNldHRlcnM7CiAgICBJdGVyYWJsZTxNZXRob2Q+IGlzQ2hlY2tzID0gY2xzLmlzQ2hlY2tzOwogICAgSXRlcmFibGU8TWV0aG9kPiBjYWxsU3R1YnMgPSBjbHMuY2FsbFN0dWJzOwogICAgSXRlcmFibGU8TWV0aG9kPiBub1N1Y2hNZXRob2RTdHVicyA9IGNscy5ub1N1Y2hNZXRob2RTdHViczsKICAgIEl0ZXJhYmxlPE1ldGhvZD4gZ2V0dGVyc1NldHRlcnMgPSBnZW5lcmF0ZUdldHRlcnNTZXR0ZXJzKGNscyk7CiAgICBJdGVyYWJsZTxNZXRob2Q+IGFsbE1ldGhvZHMgPSBbCiAgICAgIG1ldGhvZHMsCiAgICAgIGNoZWNrZWRTZXR0ZXJzLAogICAgICBpc0NoZWNrcywKICAgICAgY2FsbFN0dWJzLAogICAgICBub1N1Y2hNZXRob2RTdHVicywKICAgICAgZ2V0dGVyc1NldHRlcnMKICAgIF0uZXhwYW5kKCh4KSA9PiB4KTsKCiAgICBMaXN0PGpzLlByb3BlcnR5PiBwcm9wZXJ0aWVzID0gW107CgogICAgaWYgKGNscy5zdXBlcmNsYXNzID09IG51bGwpIHsKICAgICAgLy8gVE9ETyhzcmEpOiBXaGF0IGlzIHRoaXMgZG9pbmc/IERvY3VtZW50IG9yIHJlbW92ZS4KICAgICAgcHJvcGVydGllcwogICAgICAgICAgLmFkZChqcy5Qcm9wZXJ0eShqcy5zdHJpbmcoImNvbnN0cnVjdG9yIiksIGNsYXNzUmVmZXJlbmNlKGNscykpKTsKICAgICAgcHJvcGVydGllcy5hZGQoanMuUHJvcGVydHkoX25hbWVyLm9wZXJhdG9ySXMoY2xzLmVsZW1lbnQpLCBqcy5udW1iZXIoMSkpKTsKICAgIH0KCiAgICBhbGxNZXRob2RzLmZvckVhY2goKE1ldGhvZCBtZXRob2QpIHsKICAgICAgZW1pdEluc3RhbmNlTWV0aG9kKG1ldGhvZCkKICAgICAgICAgIC5mb3JFYWNoKChqcy5FeHByZXNzaW9uIG5hbWUsIGpzLkV4cHJlc3Npb24gY29kZSkgewogICAgICAgIHZhciBwcm9wID0ganMuUHJvcGVydHkobmFtZSwgY29kZSk7CiAgICAgICAgcmVnaXN0ZXJFbnRpdHlBc3QobWV0aG9kLmVsZW1lbnQsIHByb3ApOwogICAgICAgIHByb3BlcnRpZXMuYWRkKHByb3ApOwogICAgICB9KTsKICAgIH0pOwoKICAgIGlmIChjbHMuaXNDbG9zdXJlQmFzZUNsYXNzKSB7CiAgICAgIC8vIENsb3N1cmVzIGV4dGVuZCBhIGNvbW1vbiBiYXNlIGNsYXNzLCBzbyB3ZSBjYW4gcHV0IHByb3BlcnRpZXMgb24gdGhlCiAgICAgIC8vIHByb3RvdHlwZSBmb3IgY29tbW9uIHZhbHVlcy4KCiAgICAgIC8vIENsb3N1cmVzIHRha2luZyBleGFjdGx5IG9uZSBhcmd1bWVudCBhcmUgY29tbW9uLgogICAgICBwcm9wZXJ0aWVzLmFkZChqcy5Qcm9wZXJ0eShqcy5zdHJpbmcoX25hbWVyLmZpeGVkTmFtZXMuY2FsbENhdGNoQWxsTmFtZSksCiAgICAgICAgICBqcy5xdW90ZU5hbWUoY2FsbDFOYW1lKSkpOwogICAgICBwcm9wZXJ0aWVzLmFkZChqcy5Qcm9wZXJ0eSgKICAgICAgICAgIGpzLnN0cmluZyhfbmFtZXIuZml4ZWROYW1lcy5yZXF1aXJlZFBhcmFtZXRlckZpZWxkKSwganMubnVtYmVyKDEpKSk7CgogICAgICAvLyBNb3N0IGNsb3N1cmVzIGhhdmUgbm8gb3B0aW9uYWwgYXJndW1lbnRzLgogICAgICBwcm9wZXJ0aWVzLmFkZChqcy5Qcm9wZXJ0eSgKICAgICAgICAgIGpzLnN0cmluZyhfbmFtZXIuZml4ZWROYW1lcy5kZWZhdWx0VmFsdWVzRmllbGQpLAogICAgICAgICAgbmV3IGpzLkxpdGVyYWxOdWxsKCkpKTsKICAgIH0KCiAgICByZXR1cm4gbmV3IGpzLk9iamVjdEluaXRpYWxpemVyKHByb3BlcnRpZXMpOwogIH0KCiAgLy8vIEdlbmVyYXRlcyBhIGdldHRlciBmb3IgdGhlIGdpdmVuIFtmaWVsZF0uCiAgTWV0aG9kIGdlbmVyYXRlR2V0dGVyKEZpZWxkIGZpZWxkKSB7CiAgICBhc3NlcnQoZmllbGQubmVlZHNHZXR0ZXIpOwoKICAgIGpzLkV4cHJlc3Npb24gY29kZTsKICAgIGlmIChmaWVsZC5pc0VsaWRlZCkgewogICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50VmFsdWUgPSBmaWVsZC5jb25zdGFudFZhbHVlOwogICAgICBhc3NlcnQoCiAgICAgICAgICBjb25zdGFudFZhbHVlICE9IG51bGwsICJObyBjb25zdGFudCB2YWx1ZSBmb3IgZWxpZGVkIGZpZWxkOiAkZmllbGQiKTsKICAgICAgaWYgKGNvbnN0YW50VmFsdWUgPT0gbnVsbCkgewogICAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIG9jY3VyIGJlY2F1c2UgY29kZWdlbiBtZW1iZXIgdXNhZ2UgaXMgbm93IGxpbWl0ZWQKICAgICAgICAvLyBieSBjbG9zZWQgd29ybGQgbWVtYmVyIHVzYWdlLiBJbiB0aGUgY2FzZSB3ZSd2ZSBtaXNzZWQgYSBzcG90IHdlCiAgICAgICAgLy8gY2F1dGlvdXNseSBnZW5lcmF0ZSBhIG51bGwgY29uc3RhbnQuCiAgICAgICAgY29uc3RhbnRWYWx1ZSA9IG5ldyBOdWxsQ29uc3RhbnRWYWx1ZSgpOwogICAgICB9CiAgICAgIGNvZGUgPSBqcy5qcygKICAgICAgICAgICJmdW5jdGlvbigpIHsgcmV0dXJuICM7IH0iLCBnZW5lcmF0ZUNvbnN0YW50UmVmZXJlbmNlKGNvbnN0YW50VmFsdWUpKTsKICAgIH0gZWxzZSB7CiAgICAgIFN0cmluZyB0ZW1wbGF0ZTsKICAgICAgaWYgKGZpZWxkLm5lZWRzSW50ZXJjZXB0ZWRHZXR0ZXJPblJlY2VpdmVyKSB7CiAgICAgICAgdGVtcGxhdGUgPSAiZnVuY3Rpb24ocmVjZWl2ZXIpIHsgcmV0dXJuIHJlY2VpdmVyWyNdOyB9IjsKICAgICAgfSBlbHNlIGlmIChmaWVsZC5uZWVkc0ludGVyY2VwdGVkR2V0dGVyT25UaGlzKSB7CiAgICAgICAgdGVtcGxhdGUgPSAiZnVuY3Rpb24ocmVjZWl2ZXIpIHsgcmV0dXJuIHRoaXNbI107IH0iOwogICAgICB9IGVsc2UgewogICAgICAgIGFzc2VydCghZmllbGQubmVlZHNJbnRlcmNlcHRlZEdldHRlcik7CiAgICAgICAgdGVtcGxhdGUgPSAiZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzWyNdOyB9IjsKICAgICAgfQogICAgICBqcy5FeHByZXNzaW9uIGZpZWxkTmFtZSA9IGpzLnF1b3RlTmFtZShmaWVsZC5uYW1lKTsKICAgICAgY29kZSA9IGpzLmpzKHRlbXBsYXRlLCBmaWVsZE5hbWUpOwogICAgfQogICAganMuTmFtZSBnZXR0ZXJOYW1lID0gX25hbWVyLmRlcml2ZUdldHRlck5hbWUoZmllbGQuYWNjZXNzb3JOYW1lKTsKICAgIHJldHVybiBuZXcgU3R1Yk1ldGhvZChnZXR0ZXJOYW1lLCBjb2RlKTsKICB9CgogIC8vLyBHZW5lcmF0ZXMgYSBzZXR0ZXIgZm9yIHRoZSBnaXZlbiBbZmllbGRdLgogIE1ldGhvZCBnZW5lcmF0ZVNldHRlcihGaWVsZCBmaWVsZCkgewogICAgYXNzZXJ0KGZpZWxkLm5lZWRzVW5jaGVja2VkU2V0dGVyKTsKCiAgICBTdHJpbmcgdGVtcGxhdGU7CiAgICBqcy5FeHByZXNzaW9uIGNvZGU7CiAgICBpZiAoZmllbGQuaXNFbGlkZWQpIHsKICAgICAgY29kZSA9IGpzLmpzKCJmdW5jdGlvbigpIHsgfSIpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKGZpZWxkLm5lZWRzSW50ZXJjZXB0ZWRTZXR0ZXJPblJlY2VpdmVyKSB7CiAgICAgICAgdGVtcGxhdGUgPSAiZnVuY3Rpb24ocmVjZWl2ZXIsIHZhbCkgeyByZXR1cm4gcmVjZWl2ZXJbI10gPSB2YWw7IH0iOwogICAgICB9IGVsc2UgaWYgKGZpZWxkLm5lZWRzSW50ZXJjZXB0ZWRTZXR0ZXJPblRoaXMpIHsKICAgICAgICB0ZW1wbGF0ZSA9ICJmdW5jdGlvbihyZWNlaXZlciwgdmFsKSB7IHJldHVybiB0aGlzWyNdID0gdmFsOyB9IjsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQoIWZpZWxkLm5lZWRzSW50ZXJjZXB0ZWRTZXR0ZXIpOwogICAgICAgIHRlbXBsYXRlID0gImZ1bmN0aW9uKHZhbCkgeyByZXR1cm4gdGhpc1sjXSA9IHZhbDsgfSI7CiAgICAgIH0KICAgICAganMuRXhwcmVzc2lvbiBmaWVsZE5hbWUgPSBqcy5xdW90ZU5hbWUoZmllbGQubmFtZSk7CiAgICAgIGNvZGUgPSBqcy5qcyh0ZW1wbGF0ZSwgZmllbGROYW1lKTsKICAgIH0KCiAgICBqcy5OYW1lIHNldHRlck5hbWUgPSBfbmFtZXIuZGVyaXZlU2V0dGVyTmFtZShmaWVsZC5hY2Nlc3Nvck5hbWUpOwogICAgcmV0dXJuIG5ldyBTdHViTWV0aG9kKHNldHRlck5hbWUsIGNvZGUpOwogIH0KCiAgLy8vIEdlbmVyYXRlcyBhbGwgZ2V0dGVycyBhbmQgc2V0dGVycyB0aGUgZ2l2ZW4gY2xhc3MgW2Nsc10gbmVlZHMuCiAgSXRlcmFibGU8TWV0aG9kPiBnZW5lcmF0ZUdldHRlcnNTZXR0ZXJzKENsYXNzIGNscykgewogICAgSXRlcmFibGU8TWV0aG9kPiBnZXR0ZXJzID0gY2xzLmZpZWxkcwogICAgICAgIC53aGVyZSgoRmllbGQgZmllbGQpID0+IGZpZWxkLm5lZWRzR2V0dGVyKQogICAgICAgIC5tYXAoZ2VuZXJhdGVHZXR0ZXIpOwoKICAgIEl0ZXJhYmxlPE1ldGhvZD4gc2V0dGVycyA9IGNscy5maWVsZHMKICAgICAgICAud2hlcmUoKEZpZWxkIGZpZWxkKSA9PiBmaWVsZC5uZWVkc1VuY2hlY2tlZFNldHRlcikKICAgICAgICAubWFwKGdlbmVyYXRlU2V0dGVyKTsKCiAgICByZXR1cm4gW2dldHRlcnMsIHNldHRlcnNdLmV4cGFuZCgoeCkgPT4geCk7CiAgfQoKICAvLy8gRW1pdHMgdGhlIGdpdmVuIGluc3RhbmNlIFttZXRob2RdLgogIC8vLwogIC8vLyBUaGUgZ2l2ZW4gbWV0aG9kIG1heSBiZSBhIHN0dWItbWV0aG9kIChmb3IgZXhhbXBsZSBmb3IgaXMtY2hlY2tzKS4KICAvLy8KICAvLy8gSWYgaXQgaXMgYSBEYXJ0LW1ldGhvZCwgYWxsIG5lY2Vzc2FyeSBzdHViLW1ldGhvZHMgYXJlIGVtaXR0ZWQsIHRvby4gSW4KICAvLy8gdGhhdCBjYXNlIHRoZSByZXR1cm5lZCBtYXAgY29udGFpbnMgbW9yZSB0aGFuIGp1c3Qgb25lIGVudHJ5LgogIC8vLwogIC8vLyBJZiB0aGUgbWV0aG9kIGlzIGEgY2xvc3VyZSBjYWxsLW1ldGhvZCwgYWxzbyByZXR1cm5zIHRoZSBuZWNlc3NhcnkKICAvLy8gcHJvcGVydGllcyBpbiBjYXNlIHRoZSBjbG9zdXJlIGNhbiBiZSBhcHBsaWVkLgogIE1hcDxqcy5FeHByZXNzaW9uLCBqcy5FeHByZXNzaW9uPiBlbWl0SW5zdGFuY2VNZXRob2QoTWV0aG9kIG1ldGhvZCkgewogICAgdmFyIHByb3BlcnRpZXMgPSA8anMuRXhwcmVzc2lvbiwganMuRXhwcmVzc2lvbj57fTsKCiAgICBwcm9wZXJ0aWVzW21ldGhvZC5uYW1lXSA9IG1ldGhvZC5jb2RlOwogICAgaWYgKG1ldGhvZCBpcyBJbnN0YW5jZU1ldGhvZCkgewogICAgICBmb3IgKFBhcmFtZXRlclN0dWJNZXRob2Qgc3R1Yk1ldGhvZCBpbiBtZXRob2QucGFyYW1ldGVyU3R1YnMpIHsKICAgICAgICBwcm9wZXJ0aWVzW3N0dWJNZXRob2QubmFtZV0gPSBzdHViTWV0aG9kLmNvZGU7CiAgICAgIH0KCiAgICAgIGlmIChtZXRob2QuaXNDbG9zdXJlQ2FsbE1ldGhvZCAmJiBtZXRob2QuY2FuQmVBcHBsaWVkKSB7CiAgICAgICAgLy8gVE9ETyhzcmEpOiBXZSBzaG91bGQgYWxzbyBhZGQgdGhlc2UgcHJvcGVydGllcyBmb3IgdGhlIHVzZXItZGVmaW5lZAogICAgICAgIC8vIGBjYWxsYCBtZXRob2Qgb24gY2xhc3Nlcy4gRnVuY3Rpb24uYXBwbHkgaXMgY3VycmVudGx5IGJyb2tlbiBmb3IKICAgICAgICAvLyBjb21wbGV4IGNhc2VzLiBbZm9yY2VBZGRdIG1pZ2h0IGJlIHRydWUgd2hlbiB0aGlzIGlzIGZpeGVkLgogICAgICAgIGJvb2wgZm9yY2VBZGQgPSAhbWV0aG9kLmlzQ2xvc3VyZUNhbGxNZXRob2Q7CgogICAgICAgIC8vIENvbW1vbiBjYXNlIG9mICJjYWxsKiI6ICJjYWxsJDEiIGlzIHN0b3JlZCBvbiB0aGUgQ2xvc3VyZSBjbGFzcy4KICAgICAgICBpZiAobWV0aG9kLmFwcGx5SW5kZXggIT0gMCB8fAogICAgICAgICAgICBtZXRob2QucGFyYW1ldGVyU3R1YnMuaXNOb3RFbXB0eSB8fAogICAgICAgICAgICBtZXRob2QucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCAhPSAxIHx8CiAgICAgICAgICAgIGZvcmNlQWRkKSB7CiAgICAgICAgICBqcy5OYW1lIGFwcGx5TmFtZSA9IG1ldGhvZC5hcHBseUluZGV4ID09IDAKICAgICAgICAgICAgICA/IG1ldGhvZC5uYW1lCiAgICAgICAgICAgICAgOiBtZXRob2QucGFyYW1ldGVyU3R1YnNbbWV0aG9kLmFwcGx5SW5kZXggLSAxXS5uYW1lOwogICAgICAgICAgcHJvcGVydGllc1tqcy5zdHJpbmcoX25hbWVyLmZpeGVkTmFtZXMuY2FsbENhdGNoQWxsTmFtZSldID0KICAgICAgICAgICAgICBqcy5xdW90ZU5hbWUoYXBwbHlOYW1lKTsKICAgICAgICB9CiAgICAgICAgLy8gQ29tbW9uIGNhc2Ugb2YgJzEnIGlzIHN0b3JlZCBvbiB0aGUgQ2xvc3VyZSBjbGFzcy4KICAgICAgICBpZiAobWV0aG9kLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQgIT0gMSB8fCBmb3JjZUFkZCkgewogICAgICAgICAgcHJvcGVydGllc1tqcy5zdHJpbmcoX25hbWVyLmZpeGVkTmFtZXMucmVxdWlyZWRQYXJhbWV0ZXJGaWVsZCldID0KICAgICAgICAgICAgICBqcy5udW1iZXIobWV0aG9kLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpOwogICAgICAgIH0KCiAgICAgICAganMuRXhwcmVzc2lvbiBkZWZhdWx0VmFsdWVzID0KICAgICAgICAgICAgX2VuY29kZU9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcyhtZXRob2QpOwogICAgICAgIC8vIERlZmF1bHQgdmFsdWVzIHByb3BlcnR5IG9mIGBudWxsYCBpcyBzdG9yZWQgb24gdGhlIGNvbW1vbiBKUwogICAgICAgIC8vIHN1cGVyY2xhc3MuCiAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZXMgaXMhIGpzLkxpdGVyYWxOdWxsIHx8IGZvcmNlQWRkKSB7CiAgICAgICAgICBwcm9wZXJ0aWVzW2pzLnN0cmluZyhfbmFtZXIuZml4ZWROYW1lcy5kZWZhdWx0VmFsdWVzRmllbGQpXSA9CiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlczsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gcHJvcGVydGllczsKICB9CgogIC8vLyBFbWl0cyB0aGUgaW5oZXJpdGFuY2UgYmxvY2sgb2YgdGhlIGZyYWdtZW50LgogIC8vLwogIC8vLyBJbiB0aGlzIHNlY3Rpb24gcHJvdG90eXBlIGNoYWlucyBhcmUgdXBkYXRlZCBhbmQgbWl4aW4gZnVuY3Rpb25zIGFyZQogIC8vLyBjb3BpZWQuCiAganMuU3RhdGVtZW50IGVtaXRJbmhlcml0YW5jZShGcmFnbWVudCBmcmFnbWVudCwge2Jvb2wgc29mdERlZmVycmVkID0gZmFsc2V9KSB7CiAgICBMaXN0PGpzLlN0YXRlbWVudD4gaW5oZXJpdENhbGxzID0gW107CiAgICBMaXN0PGpzLlN0YXRlbWVudD4gbWl4aW5DYWxscyA9IFtdOwogICAgLy8gbG9jYWwgY2FjaGVzIG9mIGZ1bmN0aW9ucyB0byBhbGxvdyBtaW5pZmFjdGlvbiBvZiBmdW5jdGlvbiBuYW1lIGluIGNhbGwuCiAgICBMb2NhbEFsaWFzZXMgbG9jYWxzID0gTG9jYWxBbGlhc2VzKCk7CgogICAgU2V0PENsYXNzPiBjbGFzc2VzSW5GcmFnbWVudCA9IFNldCgpOwogICAgZm9yIChMaWJyYXJ5IGxpYnJhcnkgaW4gZnJhZ21lbnQubGlicmFyaWVzKSB7CiAgICAgIGNsYXNzZXNJbkZyYWdtZW50LmFkZEFsbChsaWJyYXJ5LmNsYXNzZXMKICAgICAgICAgIC53aGVyZSgoKENsYXNzIGNscykgPT4gY2xzLmlzU29mdERlZmVycmVkID09IHNvZnREZWZlcnJlZCkpKTsKICAgIH0KCiAgICBNYXA8Q2xhc3MsIExpc3Q8Q2xhc3M+PiBzdWJjbGFzc2VzID0ge307CiAgICBTZXQ8Q2xhc3M+IHNlZW4gPSBTZXQoKTsKCiAgICB2b2lkIGNvbGxlY3QoY2xzKSB7CiAgICAgIGlmIChjbHMgPT0gbnVsbCB8fCBzZWVuLmNvbnRhaW5zKGNscykpIHJldHVybjsKCiAgICAgIENsYXNzIHN1cGVyY2xhc3MgPSBjbHMuc3VwZXJjbGFzczsKICAgICAgaWYgKGNsYXNzZXNJbkZyYWdtZW50LmNvbnRhaW5zKHN1cGVyY2xhc3MpKSB7CiAgICAgICAgY29sbGVjdChzdXBlcmNsYXNzKTsKICAgICAgfQoKICAgICAgc3ViY2xhc3Nlcy5wdXRJZkFic2VudChzdXBlcmNsYXNzLCAoKSA9PiA8Q2xhc3M+W10pLmFkZChjbHMpOwoKICAgICAgc2Vlbi5hZGQoY2xzKTsKICAgIH0KCiAgICBmb3IgKExpYnJhcnkgbGlicmFyeSBpbiBmcmFnbWVudC5saWJyYXJpZXMpIHsKICAgICAgZm9yIChDbGFzcyBjbHMgaW4gbGlicmFyeS5jbGFzc2VzKSB7CiAgICAgICAgaWYgKGNscy5pc1NvZnREZWZlcnJlZCAhPSBzb2Z0RGVmZXJyZWQpIGNvbnRpbnVlOwogICAgICAgIGNvbGxlY3QoY2xzKTsKICAgICAgICBpZiAoY2xzLm1peGluQ2xhc3MgIT0gbnVsbCkgewogICAgICAgICAganMuU3RhdGVtZW50IHN0YXRlbWVudCA9IGpzLmpzLnN0YXRlbWVudCgnIygjLCAjKScsIFsKICAgICAgICAgICAgbG9jYWxzLmZpbmQoJ19taXhpbicsICdodW5rSGVscGVycy5taXhpbicpLAogICAgICAgICAgICBjbGFzc1JlZmVyZW5jZShjbHMpLAogICAgICAgICAgICBjbGFzc1JlZmVyZW5jZShjbHMubWl4aW5DbGFzcyksCiAgICAgICAgICBdKTsKICAgICAgICAgIHJlZ2lzdGVyRW50aXR5QXN0KGNscy5lbGVtZW50LCBzdGF0ZW1lbnQsIGxpYnJhcnk6IGxpYnJhcnkuZWxlbWVudCk7CiAgICAgICAgICBtaXhpbkNhbGxzLmFkZChzdGF0ZW1lbnQpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGZvciAoQ2xhc3Mgc3VwZXJjbGFzcyBpbiBzdWJjbGFzc2VzLmtleXMpIHsKICAgICAgTGlzdDxDbGFzcz4gbGlzdCA9IHN1YmNsYXNzZXNbc3VwZXJjbGFzc107CiAgICAgIGpzLkV4cHJlc3Npb24gc3VwZXJjbGFzc1JlZmVyZW5jZSA9IChzdXBlcmNsYXNzID09IG51bGwpCiAgICAgICAgICA/IG5ldyBqcy5MaXRlcmFsTnVsbCgpCiAgICAgICAgICA6IGNsYXNzUmVmZXJlbmNlKHN1cGVyY2xhc3MpOwogICAgICBpZiAobGlzdC5sZW5ndGggPT0gMSkgewogICAgICAgIENsYXNzIGNscyA9IGxpc3Quc2luZ2xlOwogICAgICAgIHZhciBzdGF0ZW1lbnQgPSBqcy5qcy5zdGF0ZW1lbnQoJyMoIywgIyknLCBbCiAgICAgICAgICBsb2NhbHMuZmluZCgnX2luaGVyaXQnLCAnaHVua0hlbHBlcnMuaW5oZXJpdCcpLAogICAgICAgICAgY2xhc3NSZWZlcmVuY2UoY2xzKSwKICAgICAgICAgIHN1cGVyY2xhc3NSZWZlcmVuY2UKICAgICAgICBdKTsKICAgICAgICByZWdpc3RlckVudGl0eUFzdChjbHMuZWxlbWVudCwgc3RhdGVtZW50LCBsaWJyYXJ5OiBjbHMuZWxlbWVudC5saWJyYXJ5KTsKICAgICAgICBpbmhlcml0Q2FsbHMuYWRkKHN0YXRlbWVudCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgTGlzdDxqcy5FeHByZXNzaW9uPiBsaXN0RWxlbWVudHMgPSBbXTsKICAgICAgICAvLyBTaW5jZSBpbmhlcml0TWFueSBzaGFyZXMgdGhlIHN1cGVyY2xhc3MgcmVmZXJlbmNlLCB3ZSBhdHRyaWJ1dGUgaXQKICAgICAgICAvLyBvbmx5IHRvIHRoZSBmaXJzdCBzdWJjbGFzcy4KICAgICAgICBDbGFzc0VudGl0eSBmaXJzdENsYXNzID0gbGlzdC5maXJzdC5lbGVtZW50OwogICAgICAgIHJlZ2lzdGVyRW50aXR5QXN0KGZpcnN0Q2xhc3MsIHN1cGVyY2xhc3NSZWZlcmVuY2UsCiAgICAgICAgICAgIGxpYnJhcnk6IGZpcnN0Q2xhc3MubGlicmFyeSk7CiAgICAgICAgZm9yIChDbGFzcyBjbHMgaW4gbGlzdCkgewogICAgICAgICAganMuRXhwcmVzc2lvbiByZWZlcmVuY2UgPSBjbGFzc1JlZmVyZW5jZShjbHMpOwogICAgICAgICAgcmVnaXN0ZXJFbnRpdHlBc3QoY2xzLmVsZW1lbnQsIHJlZmVyZW5jZSwKICAgICAgICAgICAgICBsaWJyYXJ5OiBjbHMuZWxlbWVudC5saWJyYXJ5KTsKICAgICAgICAgIGxpc3RFbGVtZW50cy5hZGQocmVmZXJlbmNlKTsKICAgICAgICB9CiAgICAgICAgaW5oZXJpdENhbGxzLmFkZChqcy5qcy5zdGF0ZW1lbnQoJyMoIywgIyknLCBbCiAgICAgICAgICBsb2NhbHMuZmluZCgnX2luaGVyaXRNYW55JywgJ2h1bmtIZWxwZXJzLmluaGVyaXRNYW55JyksCiAgICAgICAgICBzdXBlcmNsYXNzUmVmZXJlbmNlLAogICAgICAgICAganMuQXJyYXlJbml0aWFsaXplcihsaXN0RWxlbWVudHMpCiAgICAgICAgXSkpOwogICAgICB9CiAgICB9CgogICAgTGlzdDxqcy5TdGF0ZW1lbnQ+IHN0YXRlbWVudHMgPSBbXTsKICAgIGlmIChsb2NhbHMuaXNOb3RFbXB0eSkgewogICAgICBzdGF0ZW1lbnRzLmFkZChsb2NhbHMudG9TdGF0ZW1lbnQoKSk7CiAgICB9CiAgICBzdGF0ZW1lbnRzLmFkZEFsbChpbmhlcml0Q2FsbHMpOwogICAgc3RhdGVtZW50cy5hZGRBbGwobWl4aW5DYWxscyk7CiAgICByZXR1cm4gd3JhcFBoYXNlKCdpbmhlcml0YW5jZScsIHN0YXRlbWVudHMpOwogIH0KCiAgLy8vIEVtaXRzIHRoZSBzZXR1cCBvZiBtZXRob2QgYWxpYXNlcy4KICAvLy8KICAvLy8gVGhpcyBzdGVwIGNvbnNpc3RzIG9mIHNpbXBseSBjb3B5aW5nIEphdmFTY3JpcHQgZnVuY3Rpb25zIHRvIHRoZWlyCiAgLy8vIGFsaWFzZWQgbmFtZXMgc28gdGhleSBwb2ludCB0byB0aGUgc2FtZSBmdW5jdGlvbi4KICBqcy5TdGF0ZW1lbnQgZW1pdEluc3RhbmNlTWV0aG9kQWxpYXNlcyhGcmFnbWVudCBmcmFnbWVudCwKICAgICAge2Jvb2wgc29mdERlZmVycmVkID0gZmFsc2V9KSB7CiAgICBMaXN0PGpzLlN0YXRlbWVudD4gYXNzaWdubWVudHMgPSBbXTsKCiAgICBmb3IgKExpYnJhcnkgbGlicmFyeSBpbiBmcmFnbWVudC5saWJyYXJpZXMpIHsKICAgICAgZm9yIChDbGFzcyBjbHMgaW4gbGlicmFyeS5jbGFzc2VzKSB7CiAgICAgICAgaWYgKGNscy5pc1NvZnREZWZlcnJlZCAhPSBzb2Z0RGVmZXJyZWQpIGNvbnRpbnVlOwogICAgICAgIGJvb2wgZmlyc3RBbGlhcyA9IHRydWU7CiAgICAgICAgZm9yIChJbnN0YW5jZU1ldGhvZCBtZXRob2QgaW4gY2xzLm1ldGhvZHMpIHsKICAgICAgICAgIGlmIChtZXRob2QuYWxpYXNOYW1lICE9IG51bGwpIHsKICAgICAgICAgICAgaWYgKGZpcnN0QWxpYXMpIHsKICAgICAgICAgICAgICBmaXJzdEFsaWFzID0gZmFsc2U7CiAgICAgICAgICAgICAganMuU3RhdGVtZW50IHN0YXRlbWVudCA9IGpzLmpzLnN0YXRlbWVudCgKICAgICAgICAgICAgICAgICAgYXNzaWdubWVudHMuaXNFbXB0eQogICAgICAgICAgICAgICAgICAgICAgPyAndmFyIF8gPSAjLnByb3RvdHlwZTsnCiAgICAgICAgICAgICAgICAgICAgICA6ICdfID0gIy5wcm90b3R5cGUnLAogICAgICAgICAgICAgICAgICBjbGFzc1JlZmVyZW5jZShjbHMpKTsKICAgICAgICAgICAgICByZWdpc3RlckVudGl0eUFzdChtZXRob2QuZWxlbWVudCwgc3RhdGVtZW50KTsKICAgICAgICAgICAgICBhc3NpZ25tZW50cy5hZGQoc3RhdGVtZW50KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBqcy5TdGF0ZW1lbnQgc3RhdGVtZW50ID0ganMuanMuc3RhdGVtZW50KCdfLiMgPSBfLiMnLAogICAgICAgICAgICAgICAgW2pzLnF1b3RlTmFtZShtZXRob2QuYWxpYXNOYW1lKSwganMucXVvdGVOYW1lKG1ldGhvZC5uYW1lKV0pOwogICAgICAgICAgICByZWdpc3RlckVudGl0eUFzdChtZXRob2QuZWxlbWVudCwgc3RhdGVtZW50KTsKICAgICAgICAgICAgYXNzaWdubWVudHMuYWRkKHN0YXRlbWVudCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gd3JhcFBoYXNlKCdhbGlhc2VzJywgYXNzaWdubWVudHMpOwogIH0KCiAgLy8vIEVuY29kZXMgdGhlIG9wdGlvbmFsIGRlZmF1bHQgdmFsdWVzIHNvIHRoYXQgdGhlIHJ1bnRpbWUgRnVuY3Rpb24uYXBwbHkKICAvLy8gY2FuIHVzZSB0aGVtLgogIGpzLkV4cHJlc3Npb24gX2VuY29kZU9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcyhEYXJ0TWV0aG9kIG1ldGhvZCkgewogICAgLy8gVE9ETyhoZXJodXQpOiBSZXBsYWNlIFtqcy5MaXRlcmFsTnVsbF0gd2l0aCBbanMuQXJyYXlIb2xlXS4KICAgIGlmIChtZXRob2Qub3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzIGlzIExpc3QpIHsKICAgICAgTGlzdDxDb25zdGFudFZhbHVlPiBkZWZhdWx0VmFsdWVzID0gbWV0aG9kLm9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlczsKICAgICAgaWYgKGRlZmF1bHRWYWx1ZXMuaXNFbXB0eSkgewogICAgICAgIHJldHVybiBuZXcganMuTGl0ZXJhbE51bGwoKTsKICAgICAgfQogICAgICBJdGVyYWJsZTxqcy5FeHByZXNzaW9uPiBlbGVtZW50cyA9CiAgICAgICAgICBkZWZhdWx0VmFsdWVzLm1hcChnZW5lcmF0ZUNvbnN0YW50UmVmZXJlbmNlKTsKICAgICAgcmV0dXJuIGpzLmpzKCdmdW5jdGlvbigpIHsgcmV0dXJuICM7IH0nLAogICAgICAgICAgbmV3IGpzLkFycmF5SW5pdGlhbGl6ZXIoZWxlbWVudHMudG9MaXN0KCkpKTsKICAgIH0gZWxzZSB7CiAgICAgIE1hcDxTdHJpbmcsIENvbnN0YW50VmFsdWU+IGRlZmF1bHRWYWx1ZXMgPQogICAgICAgICAgbWV0aG9kLm9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlczsKICAgICAgTGlzdDxqcy5Qcm9wZXJ0eT4gcHJvcGVydGllcyA9IFtdOwogICAgICBMaXN0PFN0cmluZz4gbmFtZXMgPSBkZWZhdWx0VmFsdWVzLmtleXMudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgICAgIC8vIFNvcnQgdGhlIG5hbWVzIHRoZSBzYW1lIHdheSB3ZSBzb3J0IHRoZW0gZm9yIHRoZSBuYW1lZC1hcmd1bWVudCBjYWxsaW5nCiAgICAgIC8vIGNvbnZlbnRpb24uCiAgICAgIG5hbWVzLnNvcnQoKTsKCiAgICAgIGZvciAoU3RyaW5nIG5hbWUgaW4gbmFtZXMpIHsKICAgICAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gZGVmYXVsdFZhbHVlc1tuYW1lXTsKICAgICAgICBwcm9wZXJ0aWVzLmFkZCgKICAgICAgICAgICAgbmV3IGpzLlByb3BlcnR5KGpzLnN0cmluZyhuYW1lKSwgZ2VuZXJhdGVDb25zdGFudFJlZmVyZW5jZSh2YWx1ZSkpKTsKICAgICAgfQogICAgICByZXR1cm4ganMuanMoCiAgICAgICAgICAnZnVuY3Rpb24oKSB7IHJldHVybiAjOyB9JywgbmV3IGpzLk9iamVjdEluaXRpYWxpemVyKHByb3BlcnRpZXMpKTsKICAgIH0KICB9CgogIC8vLyBXcmFwcyB0aGUgc3RhdGVtZW50IGluIGEgbmFtZWQgZnVuY3Rpb24gdG8gdGhhdCBpdCBzaG93cyB1cCBhcyBhIHVuaXQgaW4KICAvLy8gcHJvZmlsZXMuCiAgLy8gVE9ETyhzcmEpOiBTaG91bGQgdGhpcyBiZSBjb25kaXRpb25hbD8KICBqcy5TdGF0ZW1lbnQgd3JhcFBoYXNlKFN0cmluZyBuYW1lLCBMaXN0PGpzLlN0YXRlbWVudD4gc3RhdGVtZW50cykgewogICAganMuQmxvY2sgYmxvY2sgPSBuZXcganMuQmxvY2soc3RhdGVtZW50cyk7CiAgICBpZiAoc3RhdGVtZW50cy5pc0VtcHR5KSByZXR1cm4gYmxvY2s7CiAgICByZXR1cm4ganMuanMuc3RhdGVtZW50KCcoZnVuY3Rpb24gIygpeyN9KSgpOycsIFtuYW1lLCBibG9ja10pOwogIH0KCiAgYm9vbCBpc0VtcHR5U3RhdGVtZW50KGpzLlN0YXRlbWVudCBzdGF0ZW1lbnQpIHsKICAgIGlmIChzdGF0ZW1lbnQgaXMganMuQmxvY2spIHsKICAgICAgcmV0dXJuIHN0YXRlbWVudC5zdGF0ZW1lbnRzLmlzRW1wdHk7CiAgICB9CiAgICByZXR1cm4gc3RhdGVtZW50IGlzIGpzLkVtcHR5U3RhdGVtZW50OwogIH0KCiAgLy8vIEVtaXRzIHRoZSBzZWN0aW9uIHRoYXQgaW5zdGFsbHMgdGVhci1vZmYgZ2V0dGVycy4KICBqcy5TdGF0ZW1lbnQgZW1pdEluc3RhbGxUZWFyT2ZmcyhGcmFnbWVudCBmcmFnbWVudCwKICAgICAge2Jvb2wgc29mdERlZmVycmVkID0gZmFsc2V9KSB7CiAgICBMb2NhbEFsaWFzZXMgbG9jYWxzID0gTG9jYWxBbGlhc2VzKCk7CgogICAgLy8vIEVtaXRzIHRoZSBzdGF0ZW1lbnQgdGhhdCBpbnN0YWxscyBhIHRlYXIgb2ZmIGZvciBhIG1ldGhvZC4KICAgIC8vLwogICAgLy8vIFRlYXItb2ZmcyBtaWdodCBiZSBwYXNzZWQgdG8gYEZ1bmN0aW9uLmFwcGx5YCB3aGljaCBtZWFucyB0aGF0IGFsbAogICAgLy8vIGNhbGxpbmctY29udmVudGlvbnMgKHdpdGggb3Igd2l0aG91dCBvcHRpb25hbCBwb3NpdGlvbmFsL25hbWVkCiAgICAvLy8gYXJndW1lbnRzKSBhcmUgcG9zc2libGUuIEFzIHN1Y2gsIHRoZSB0ZWFyLW9mZiBuZWVkcyBlbm91Z2ggaW5mb3JtYXRpb24KICAgIC8vLyB0byBmaWxsIGluIG1pc3NpbmcgcGFyYW1ldGVycy4KICAgIGpzLlN0YXRlbWVudCBlbWl0SW5zdGFsbFRlYXJPZmYoCiAgICAgICAganMuRXhwcmVzc2lvbiBjb250YWluZXIsIERhcnRNZXRob2QgbWV0aG9kKSB7CiAgICAgIExpc3Q8anMuTmFtZT4gY2FsbE5hbWVzID0gW107CiAgICAgIExpc3Q8anMuRXhwcmVzc2lvbj4gZnVuc09yTmFtZXMgPSBbXTsKCiAgICAgIC8vLyBBZGRzIHRoZSBzdHViLW1ldGhvZCdzIGNvZGUgb3IgbmFtZSB0byB0aGUgW2Z1bnNPck5hbWVzXSBhcnJheS4KICAgICAgLy8vCiAgICAgIC8vLyBTdGF0aWMgbWV0aG9kcyBkb24ndCBuZWVkIHN0dWItbWV0aG9kcyBleGNlcHQgZm9yIHRlYXItb2Zmcy4gQXMgc3VjaCwKICAgICAgLy8vIHRoZXkgYXJlIG5vdCBlbWl0dGVkIGluIHRoZSBwcm90b3R5cGUsIGJ1dCBkaXJlY3RseSBwYXNzZWQgaGVyZS4KICAgICAgLy8vCiAgICAgIC8vLyBJbnN0YW5jZS1tZXRob2RzIGluc3RhbGwgdGhlIHN0dWItbWV0aG9kcyBpbiB0aGVpciBwcm90b3R5cGUsIGFuZCB3ZQogICAgICAvLy8gdXNlIHN0cmluZy1iYXNlZCByZWRpcmVjdGlvbnMgdG8gZmluZCB0aGVtIHRoZXJlLgogICAgICB2b2lkIGFkZEZ1bk9yTmFtZShTdHViTWV0aG9kIHN0dWJNZXRob2QpIHsKICAgICAgICBpZiAobWV0aG9kLmlzU3RhdGljKSB7CiAgICAgICAgICBmdW5zT3JOYW1lcy5hZGQoc3R1Yk1ldGhvZC5jb2RlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZnVuc09yTmFtZXMuYWRkKGpzLnF1b3RlTmFtZShzdHViTWV0aG9kLm5hbWUpKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGNhbGxOYW1lcy5hZGQobWV0aG9kLmNhbGxOYW1lKTsKICAgICAgLy8gVGhlIGZpcnN0IGVudHJ5IGluIHRoZSBmdW5zT3JOYW1lcy1hcnJheSBtdXN0IGJlIGEgc3RyaW5nLgogICAgICBmdW5zT3JOYW1lcy5hZGQoanMucXVvdGVOYW1lKG1ldGhvZC5uYW1lKSk7CiAgICAgIGZvciAoUGFyYW1ldGVyU3R1Yk1ldGhvZCBzdHViTWV0aG9kIGluIG1ldGhvZC5wYXJhbWV0ZXJTdHVicykgewogICAgICAgIGNhbGxOYW1lcy5hZGQoc3R1Yk1ldGhvZC5jYWxsTmFtZSk7CiAgICAgICAgYWRkRnVuT3JOYW1lKHN0dWJNZXRob2QpOwogICAgICB9CgogICAgICBqcy5BcnJheUluaXRpYWxpemVyIGNhbGxOYW1lQXJyYXkgPQogICAgICAgICAgbmV3IGpzLkFycmF5SW5pdGlhbGl6ZXIoY2FsbE5hbWVzLm1hcChqcy5xdW90ZU5hbWUpLnRvTGlzdCgpKTsKICAgICAganMuQXJyYXlJbml0aWFsaXplciBmdW5zT3JOYW1lc0FycmF5ID0KICAgICAgICAgIG5ldyBqcy5BcnJheUluaXRpYWxpemVyKGZ1bnNPck5hbWVzKTsKCiAgICAgIGJvb2wgaXNJbnRlcmNlcHRlZCA9IGZhbHNlOwogICAgICBpZiAobWV0aG9kIGlzIEluc3RhbmNlTWV0aG9kKSB7CiAgICAgICAgaXNJbnRlcmNlcHRlZCA9IG1ldGhvZC5pc0ludGVyY2VwdGVkOwogICAgICB9CgogICAgICBpbnQgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA9IG1ldGhvZC5yZXF1aXJlZFBhcmFtZXRlckNvdW50OwogICAgICBqcy5FeHByZXNzaW9uIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcyA9IG5ldyBqcy5MaXRlcmFsTnVsbCgpOwogICAgICBpZiAobWV0aG9kLmNhbkJlQXBwbGllZCkgewogICAgICAgIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcyA9CiAgICAgICAgICAgIF9lbmNvZGVPcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMobWV0aG9kKTsKICAgICAgfQoKICAgICAgdmFyIGFwcGx5SW5kZXggPSBqcy5udW1iZXIobWV0aG9kLmFwcGx5SW5kZXgpOwoKICAgICAgaWYgKG1ldGhvZC5pc1N0YXRpYykgewogICAgICAgIGlmIChyZXF1aXJlZFBhcmFtZXRlckNvdW50IDw9IDIgJiYKICAgICAgICAgICAgY2FsbE5hbWVzLmxlbmd0aCA9PSAxICYmCiAgICAgICAgICAgIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcyBpcyBqcy5MaXRlcmFsTnVsbCAmJgogICAgICAgICAgICBtZXRob2QuYXBwbHlJbmRleCA9PSAwKSB7CiAgICAgICAgICBqcy5TdGF0ZW1lbnQgZmluaXNoKGludCBhcml0eSkgewogICAgICAgICAgICAvLyBTaG9ydCBmb3JtIGZvciBleGFjdGx5IDAvMS8yIGFyZ3VtZW50cy4KICAgICAgICAgICAgdmFyIGluc3RhbGwgPQogICAgICAgICAgICAgICAgbG9jYWxzLmZpbmQoJ19zdGF0aWNfJHthcml0eX0nLCAnaHVua0hlbHBlcnMuX3N0YXRpY18ke2FyaXR5fScpOwogICAgICAgICAgICByZXR1cm4ganMuanMuc3RhdGVtZW50KCcnJwogICAgICAgICAgICAgICAgI2luc3RhbGwoI2NvbnRhaW5lciwgI2dldHRlck5hbWUsICNuYW1lLCAjZnVuVHlwZSknJycsIHsKICAgICAgICAgICAgICAiaW5zdGFsbCI6IGluc3RhbGwsCiAgICAgICAgICAgICAgImNvbnRhaW5lciI6IGNvbnRhaW5lciwKICAgICAgICAgICAgICAiZ2V0dGVyTmFtZSI6IGpzLnF1b3RlTmFtZShtZXRob2QudGVhck9mZk5hbWUpLAogICAgICAgICAgICAgICJuYW1lIjogZnVuc09yTmFtZXMuc2luZ2xlLAogICAgICAgICAgICAgICJmdW5UeXBlIjogbWV0aG9kLmZ1bmN0aW9uVHlwZSwKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CgogICAgICAgICAgdmFyIGluc3RhbGxlZE5hbWUgPSBjYWxsTmFtZXMuc2luZ2xlOwogICAgICAgICAgaWYgKGluc3RhbGxlZE5hbWUgPT0gY2FsbDBOYW1lKSByZXR1cm4gZmluaXNoKDApOwogICAgICAgICAgaWYgKGluc3RhbGxlZE5hbWUgPT0gY2FsbDFOYW1lKSByZXR1cm4gZmluaXNoKDEpOwogICAgICAgICAgaWYgKGluc3RhbGxlZE5hbWUgPT0gY2FsbDJOYW1lKSByZXR1cm4gZmluaXNoKDIpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGluc3RhbGwgPQogICAgICAgICAgICBsb2NhbHMuZmluZCgnX3N0YXRpYycsICdodW5rSGVscGVycy5pbnN0YWxsU3RhdGljVGVhck9mZicpOwogICAgICAgIHJldHVybiBqcy5qcy5zdGF0ZW1lbnQoJycnCiAgICAgICAgICAgICNpbnN0YWxsKCNjb250YWluZXIsICNnZXR0ZXJOYW1lLAogICAgICAgICAgICAgICAgICAgICAjcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwgI29wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgICAgICAgICAgICAgICAgICNjYWxsTmFtZXMsICNmdW5zT3JOYW1lcywgI2Z1blR5cGUsICNhcHBseUluZGV4KScnJywgewogICAgICAgICAgImluc3RhbGwiOiBpbnN0YWxsLAogICAgICAgICAgImNvbnRhaW5lciI6IGNvbnRhaW5lciwKICAgICAgICAgICJnZXR0ZXJOYW1lIjoganMucXVvdGVOYW1lKG1ldGhvZC50ZWFyT2ZmTmFtZSksCiAgICAgICAgICAicmVxdWlyZWRQYXJhbWV0ZXJDb3VudCI6IGpzLm51bWJlcihyZXF1aXJlZFBhcmFtZXRlckNvdW50KSwKICAgICAgICAgICJvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMiOiBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICAgICAgICAiY2FsbE5hbWVzIjogY2FsbE5hbWVBcnJheSwKICAgICAgICAgICJmdW5zT3JOYW1lcyI6IGZ1bnNPck5hbWVzQXJyYXksCiAgICAgICAgICAiZnVuVHlwZSI6IG1ldGhvZC5mdW5jdGlvblR5cGUsCiAgICAgICAgICAiYXBwbHlJbmRleCI6IGFwcGx5SW5kZXgsCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPD0gMiAmJgogICAgICAgICAgICBjYWxsTmFtZXMubGVuZ3RoID09IDEgJiYKICAgICAgICAgICAgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzIGlzIGpzLkxpdGVyYWxOdWxsICYmCiAgICAgICAgICAgIG1ldGhvZC5hcHBseUluZGV4ID09IDApIHsKICAgICAgICAgIGpzLlN0YXRlbWVudCBmaW5pc2goaW50IGFyaXR5KSB7CiAgICAgICAgICAgIC8vIFNob3J0IGZvcm0gZm9yIGV4YWN0bHkgMC8xLzIgYXJndW1lbnRzLgogICAgICAgICAgICBTdHJpbmcgaXNJbnRlcmNlcHRlZFRhZyA9IGlzSW50ZXJjZXB0ZWQgPyAnaScgOiAndSc7CiAgICAgICAgICAgIHZhciBpbnN0YWxsID0gbG9jYWxzLmZpbmQoJ19pbnN0YW5jZV8ke2FyaXR5fV8ke2lzSW50ZXJjZXB0ZWRUYWd9JywKICAgICAgICAgICAgICAgICdodW5rSGVscGVycy5faW5zdGFuY2VfJHthcml0eX0ke2lzSW50ZXJjZXB0ZWRUYWd9Jyk7CiAgICAgICAgICAgIHJldHVybiBqcy5qcy5zdGF0ZW1lbnQoJycnCiAgICAgICAgICAgICAgICAjaW5zdGFsbCgjY29udGFpbmVyLCAjZ2V0dGVyTmFtZSwgI25hbWUsICNmdW5UeXBlKScnJywgewogICAgICAgICAgICAgICJpbnN0YWxsIjogaW5zdGFsbCwKICAgICAgICAgICAgICAiY29udGFpbmVyIjogY29udGFpbmVyLAogICAgICAgICAgICAgICJnZXR0ZXJOYW1lIjoganMucXVvdGVOYW1lKG1ldGhvZC50ZWFyT2ZmTmFtZSksCiAgICAgICAgICAgICAgIm5hbWUiOiBmdW5zT3JOYW1lcy5zaW5nbGUsCiAgICAgICAgICAgICAgImZ1blR5cGUiOiBtZXRob2QuZnVuY3Rpb25UeXBlLAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KCiAgICAgICAgICB2YXIgaW5zdGFsbGVkTmFtZSA9IGNhbGxOYW1lcy5zaW5nbGU7CiAgICAgICAgICBpZiAoaW5zdGFsbGVkTmFtZSA9PSBjYWxsME5hbWUpIHJldHVybiBmaW5pc2goMCk7CiAgICAgICAgICBpZiAoaW5zdGFsbGVkTmFtZSA9PSBjYWxsMU5hbWUpIHJldHVybiBmaW5pc2goMSk7CiAgICAgICAgICBpZiAoaW5zdGFsbGVkTmFtZSA9PSBjYWxsMk5hbWUpIHJldHVybiBmaW5pc2goMik7CiAgICAgICAgfQoKICAgICAgICB2YXIgaW5zdGFsbCA9CiAgICAgICAgICAgIGxvY2Fscy5maW5kKCdfaW5zdGFuY2UnLCAnaHVua0hlbHBlcnMuaW5zdGFsbEluc3RhbmNlVGVhck9mZicpOwogICAgICAgIHJldHVybiBqcy5qcy5zdGF0ZW1lbnQoJycnCiAgICAgICAgICAgICNpbnN0YWxsKCNjb250YWluZXIsICNnZXR0ZXJOYW1lLCAjaXNJbnRlcmNlcHRlZCwKICAgICAgICAgICAgICAgICAgICAgI3JlcXVpcmVkUGFyYW1ldGVyQ291bnQsICNvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICAgICAgICAgICAgICAgICAgICNjYWxsTmFtZXMsICNmdW5zT3JOYW1lcywgI2Z1blR5cGUsICNhcHBseUluZGV4KScnJywgewogICAgICAgICAgImluc3RhbGwiOiBpbnN0YWxsLAogICAgICAgICAgImNvbnRhaW5lciI6IGNvbnRhaW5lciwKICAgICAgICAgICJnZXR0ZXJOYW1lIjoganMucXVvdGVOYW1lKG1ldGhvZC50ZWFyT2ZmTmFtZSksCiAgICAgICAgICAvLyAnVHJ1dGh5JyB2YWx1ZXMgYXJlIG9rIGZvciBgaXNJbnRlcmNlcHRlZGAuCiAgICAgICAgICAiaXNJbnRlcmNlcHRlZCI6IGpzLm51bWJlcihpc0ludGVyY2VwdGVkID8gMSA6IDApLAogICAgICAgICAgInJlcXVpcmVkUGFyYW1ldGVyQ291bnQiOiBqcy5udW1iZXIocmVxdWlyZWRQYXJhbWV0ZXJDb3VudCksCiAgICAgICAgICAib3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzIjogb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzLAogICAgICAgICAgImNhbGxOYW1lcyI6IGNhbGxOYW1lQXJyYXksCiAgICAgICAgICAiZnVuc09yTmFtZXMiOiBmdW5zT3JOYW1lc0FycmF5LAogICAgICAgICAgImZ1blR5cGUiOiBtZXRob2QuZnVuY3Rpb25UeXBlLAogICAgICAgICAgImFwcGx5SW5kZXgiOiBhcHBseUluZGV4LAogICAgICAgIH0pOwogICAgICB9CiAgICB9CgogICAgTGlzdDxqcy5TdGF0ZW1lbnQ+IGluaXRzID0gW107CiAgICBqcy5FeHByZXNzaW9uIHRlbXA7CgogICAgZm9yIChMaWJyYXJ5IGxpYnJhcnkgaW4gZnJhZ21lbnQubGlicmFyaWVzKSB7CiAgICAgIGZvciAoU3RhdGljTWV0aG9kIG1ldGhvZCBpbiBsaWJyYXJ5LnN0YXRpY3MpIHsKICAgICAgICAvLyBUT0RPKGZsb2l0c2NoKTogY2FuIHRoZXJlIGJlIGFueXRoaW5nIGVsc2UgdGhhbiBhIFN0YXRpY0RhcnRNZXRob2Q/CiAgICAgICAgaWYgKG1ldGhvZCBpcyBTdGF0aWNEYXJ0TWV0aG9kKSB7CiAgICAgICAgICBpZiAobWV0aG9kLm5lZWRzVGVhck9mZikgewogICAgICAgICAgICBIb2xkZXIgaG9sZGVyID0gbWV0aG9kLmhvbGRlcjsKICAgICAgICAgICAganMuU3RhdGVtZW50IHN0YXRlbWVudCA9CiAgICAgICAgICAgICAgICBlbWl0SW5zdGFsbFRlYXJPZmYobmV3IGpzLlZhcmlhYmxlVXNlKGhvbGRlci5uYW1lKSwgbWV0aG9kKTsKICAgICAgICAgICAgcmVnaXN0ZXJFbnRpdHlBc3QobWV0aG9kLmVsZW1lbnQsIHN0YXRlbWVudCwKICAgICAgICAgICAgICAgIGxpYnJhcnk6IGxpYnJhcnkuZWxlbWVudCk7CiAgICAgICAgICAgIGluaXRzLmFkZChzdGF0ZW1lbnQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBmb3IgKENsYXNzIGNscyBpbiBsaWJyYXJ5LmNsYXNzZXMpIHsKICAgICAgICBpZiAoY2xzLmlzU29mdERlZmVycmVkICE9IHNvZnREZWZlcnJlZCkgY29udGludWU7CiAgICAgICAgdmFyIG1ldGhvZHMgPSBjbHMubWV0aG9kcy53aGVyZSgoZHluYW1pYyBtKSA9PiBtLm5lZWRzVGVhck9mZikudG9MaXN0KCk7CiAgICAgICAganMuRXhwcmVzc2lvbiBjb250YWluZXIgPSBqcy5qcygiIy5wcm90b3R5cGUiLCBjbGFzc1JlZmVyZW5jZShjbHMpKTsKICAgICAgICBqcy5FeHByZXNzaW9uIHJlZmVyZW5jZSA9IGNvbnRhaW5lcjsKICAgICAgICBpZiAobWV0aG9kcy5sZW5ndGggPiAxKSB7CiAgICAgICAgICBpZiAodGVtcCA9PSBudWxsKSB7CiAgICAgICAgICAgIGluaXRzLmFkZChqcy5qcy5zdGF0ZW1lbnQoJ3ZhciBfOycpKTsKICAgICAgICAgICAgdGVtcCA9IGpzLmpzKCdfJyk7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBGaXJzdCBjYWxsIHVzZXMgYXNzaWdubWVudCB0byB0ZW1wIHRvIGNhY2hlIHRoZSBjb250YWluZXIuCiAgICAgICAgICByZWZlcmVuY2UgPSBqcy5qcygnIyA9ICMnLCBbdGVtcCwgY29udGFpbmVyXSk7CiAgICAgICAgfQogICAgICAgIGZvciAoSW5zdGFuY2VNZXRob2QgbWV0aG9kIGluIG1ldGhvZHMpIHsKICAgICAgICAgIGpzLlN0YXRlbWVudCBzdGF0ZW1lbnQgPSBlbWl0SW5zdGFsbFRlYXJPZmYocmVmZXJlbmNlLCBtZXRob2QpOwogICAgICAgICAgcmVnaXN0ZXJFbnRpdHlBc3QobWV0aG9kLmVsZW1lbnQsIHN0YXRlbWVudCk7CiAgICAgICAgICBpbml0cy5hZGQoc3RhdGVtZW50KTsKICAgICAgICAgIHJlZmVyZW5jZSA9IHRlbXA7IC8vIFNlY29uZCBhbmQgc3Vic2VxdWVudCBjYWxscyB1c2UgdGVtcC4KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBpZiAobG9jYWxzLmlzTm90RW1wdHkpIHsKICAgICAgaW5pdHMuaW5zZXJ0KDAsIGxvY2Fscy50b1N0YXRlbWVudCgpKTsKICAgIH0KCiAgICByZXR1cm4gd3JhcFBoYXNlKCdpbnN0YWxsVGVhck9mZnMnLCBpbml0cyk7CiAgfQoKICAvLy8gRW1pdHMgdGhlIGNvbnN0YW50cyBzZWN0aW9uLgogIGpzLlN0YXRlbWVudCBlbWl0Q29uc3RhbnRzKEZyYWdtZW50IGZyYWdtZW50KSB7CiAgICBMaXN0PGpzLlN0YXRlbWVudD4gYXNzaWdubWVudHMgPSBbXTsKICAgIGJvb2wgaGFzTGlzdCA9IGZhbHNlOwogICAgZm9yIChDb25zdGFudCBjb25zdGFudCBpbiBmcmFnbWVudC5jb25zdGFudHMpIHsKICAgICAgLy8gVE9ETygyNTIzMCk6IFdlIG9ubHkgbmVlZCB0byBuYW1lIGNvbnN0YW50cyB0aGF0IGFyZSB1c2VkIGZyb20gZnVuY3Rpb24KICAgICAgLy8gYm9kaWVzIG9yIGZyb20gb3RoZXIgY29uc3RhbnRzIGluIGEgZGlmZmVyZW50IHBhcnQuCiAgICAgIHZhciBhc3NpZ25tZW50ID0ganMuanMuc3RhdGVtZW50KCcjLiMgPSAjJywgWwogICAgICAgIGNvbnN0YW50LmhvbGRlci5uYW1lLAogICAgICAgIGNvbnN0YW50Lm5hbWUsCiAgICAgICAgX2NvbnN0YW50RW1pdHRlci5nZW5lcmF0ZShjb25zdGFudC52YWx1ZSkKICAgICAgXSk7CiAgICAgIF9kdW1wSW5mb1Rhc2sucmVnaXN0ZXJDb25zdGFudEFzdChjb25zdGFudC52YWx1ZSwgYXNzaWdubWVudCk7CiAgICAgIGFzc2lnbm1lbnRzLmFkZChhc3NpZ25tZW50KTsKICAgICAgaWYgKGNvbnN0YW50LnZhbHVlLmlzTGlzdCkgaGFzTGlzdCA9IHRydWU7CiAgICB9CiAgICBpZiAoaGFzTGlzdCkgewogICAgICBhc3NpZ25tZW50cy5pbnNlcnQoCiAgICAgICAgICAwLCBqcy5qcy5zdGF0ZW1lbnQoJ3ZhciBtYWtlQ29uc3RMaXN0ID0gaHVua0hlbHBlcnMubWFrZUNvbnN0TGlzdDsnKSk7CiAgICB9CiAgICByZXR1cm4gd3JhcFBoYXNlKCdjb25zdGFudHMnLCBhc3NpZ25tZW50cyk7CiAgfQoKICAvLy8gRW1pdHMgdGhlIHN0YXRpYyBub24tZmluYWwgZmllbGRzIHNlY3Rpb24uCiAgLy8vCiAgLy8vIFRoaXMgc2VjdGlvbiBpbml0aWFsaXplcyBhbGwgc3RhdGljIG5vbi1maW5hbCBmaWVsZHMgdGhhdCBkb24ndCByZXF1aXJlCiAgLy8vIGFuIGluaXRpYWxpemVyLgogIGpzLlN0YXRlbWVudCBlbWl0U3RhdGljTm9uRmluYWxGaWVsZHMoRnJhZ21lbnQgZnJhZ21lbnQpIHsKICAgIExpc3Q8U3RhdGljRmllbGQ+IGZpZWxkcyA9IGZyYWdtZW50LnN0YXRpY05vbkZpbmFsRmllbGRzOwogICAgLy8gVE9ETyhzcmEpOiBDaGFpbiBhc3NpZ25tZW50cyB0aGF0IGhhdmUgdGhlIHNhbWUgdmFsdWUsIGkuZS4KICAgIC8vCiAgICAvLyAgICAkLnggPSBudWxsOyAkLnkgPSBudWxsOyAkLnogPSBudWxsOwogICAgLy8gLS0+CiAgICAvLyAgICAkLnogPSAkLnkgPSAkLnggPSBudWxsOwogICAgLy8KICAgIEl0ZXJhYmxlPGpzLlN0YXRlbWVudD4gc3RhdGVtZW50cyA9IGZpZWxkcy5tYXAoKFN0YXRpY0ZpZWxkIGZpZWxkKSB7CiAgICAgIGFzc2VydChmaWVsZC5ob2xkZXIuaXNTdGF0aWNTdGF0ZUhvbGRlcik7CiAgICAgIGpzLlN0YXRlbWVudCBzdGF0ZW1lbnQ7CiAgICAgIGlmIChmaWVsZC5pc0luaXRpYWxpemVkQnlDb25zdGFudCkgewogICAgICAgIHN0YXRlbWVudCA9IGpzLmpzCiAgICAgICAgICAgIC5zdGF0ZW1lbnQoIiMuIyA9ICM7IiwgW2ZpZWxkLmhvbGRlci5uYW1lLCBmaWVsZC5uYW1lLCBmaWVsZC5jb2RlXSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2suIEZpZWxkIGluaXRpYWxpemVycyBhcmUgZ2VuZXJhdGVkIGFzIGEKICAgICAgICAvLyBmdW5jdGlvbiBlbmRpbmcgd2l0aCBhIHJldHVybiBzdGF0ZW1lbnQuIFdlIHJlcGxhY2UgdGhlIGZ1bmN0aW9uCiAgICAgICAgLy8gd2l0aCB0aGUgYm9keSBibG9jayBhbmQgcmVwbGFjZSB0aGUgcmV0dXJuIHN0YXRlbWVudCB3aXRoIGFuCiAgICAgICAgLy8gYXNzaWdubWVudCB0byB0aGUgZmllbGQuCiAgICAgICAgLy8KICAgICAgICAvLyBTaW5jZSB1bm5lZWRlZCBibG9ja3MgYXJlIG5vdCBnZW5lcmF0ZWQgaW4gdGhlIG91dHB1dCwKICAgICAgICAvLyB0aGUgc3RhdGVtZW50KHMpIG9mIHRoZSBpbml0aWFsaXplcyBhcmUgaW5saW5lZCBpbiB0aGUgZW1pdHRlZCBjb2RlLgogICAgICAgIC8vCiAgICAgICAgLy8gVGhpcyBpcyBhIGNoZWFwIHdheSBvZiBzdXBwb3J0aW5nIGVhZ2VyIGZpZWxkcyAoYXMgb3Bwb3NlZCB0bwogICAgICAgIC8vIGdlbmVyYXRpbmcgb25lIFNTQSBncmFwaCBmb3IgYWxsIGVhZ2VyIGZpZWxkcykgdGhvdWdoIGl0IGRvZXMgbm90CiAgICAgICAgLy8gYXZvaWQgcmVkdW5kYW50IGRlY2xhcmF0aW9uIG9mIGxvY2FsIHZhcmlhYmxlLCBmb3IgaW5zdGFuY2UgZm9yCiAgICAgICAgLy8gdHlwZSBhcmd1bWVudHMuCiAgICAgICAganMuRnVuIGNvZGUgPSBmaWVsZC5jb2RlOwogICAgICAgIGFzc2VydChjb2RlICE9IG51bGwsICJObyBjb2RlIGZvciAkZmllbGQiKTsKICAgICAgICBpZiAoY29kZS5wYXJhbXMuaXNFbXB0eSAmJgogICAgICAgICAgICBjb2RlLmJvZHkuc3RhdGVtZW50cy5sZW5ndGggPT0gMSAmJgogICAgICAgICAgICBjb2RlLmJvZHkuc3RhdGVtZW50cy5sYXN0IGlzIGpzLlJldHVybikgewogICAgICAgICAgLy8gRm9yIG5vdyB3ZSBvbmx5IHN1cHBvcnQgaW5pdGlhbGl6ZXJzIG9mIHRoZSBmb3JtCiAgICAgICAgICAvLwogICAgICAgICAgLy8gICBmdW5jdGlvbigpIHsgcmV0dXJuIGU7IH0KICAgICAgICAgIC8vCiAgICAgICAgICAvLyBUbyBhdm9pZCB1bmZvcmVzZWVuIGNvbnNlcXVlbmNlcyBvZiBoYXZpbmcgcGFyYW1ldGVycyBhbmQgbG9jYWxzCiAgICAgICAgICAvLyBpbiB0aGUgaW5pdGlhbGl6ZXIgY29kZS4KICAgICAgICAgIGpzLlJldHVybiBsYXN0ID0gY29kZS5ib2R5LnN0YXRlbWVudHMubGFzdDsKICAgICAgICAgIHN0YXRlbWVudCA9IGpzLmpzLnN0YXRlbWVudCgKICAgICAgICAgICAgICAiIy4jID0gIzsiLCBbZmllbGQuaG9sZGVyLm5hbWUsIGZpZWxkLm5hbWUsIGxhc3QudmFsdWVdKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gU2FmZSBmYWxsYmFjayBpbiB0aGUgZXZlbnQgb2YgYSBmaWVsZCBpbml0aWFsaXplciB3aXRoIG5vIHJldHVybgogICAgICAgICAgLy8gc3RhdGVtZW50IGFzIHRoZSBsYXN0IHN0YXRlbWVudC4KICAgICAgICAgIHN0YXRlbWVudCA9IGpzLmpzCiAgICAgICAgICAgICAgLnN0YXRlbWVudCgiIy4jID0gIygpOyIsIFtmaWVsZC5ob2xkZXIubmFtZSwgZmllbGQubmFtZSwgY29kZV0pOwogICAgICAgIH0KICAgICAgfQogICAgICByZWdpc3RlckVudGl0eUFzdChmaWVsZC5lbGVtZW50LCBzdGF0ZW1lbnQsCiAgICAgICAgICBsaWJyYXJ5OiBmaWVsZC5lbGVtZW50LmxpYnJhcnkpOwogICAgICByZXR1cm4gc3RhdGVtZW50OwogICAgfSk7CiAgICByZXR1cm4gd3JhcFBoYXNlKCdzdGF0aWNGaWVsZHMnLCBzdGF0ZW1lbnRzLnRvTGlzdCgpKTsKICB9CgogIC8vLyBFbWl0cyBsYXp5IGZpZWxkcy4KICAvLy8KICAvLy8gVGhpcyBzZWN0aW9uIGluaXRpYWxpemVzIGFsbCBzdGF0aWMgKGZpbmFsIGFuZCBub24tZmluYWwpIGZpZWxkcyB0aGF0CiAgLy8vIHJlcXVpcmUgYW4gaW5pdGlhbGl6ZXIuCiAganMuU3RhdGVtZW50IGVtaXRMYXppbHlJbml0aWFsaXplZFN0YXRpY3MoRnJhZ21lbnQgZnJhZ21lbnQpIHsKICAgIExpc3Q8U3RhdGljRmllbGQ+IGZpZWxkcyA9IGZyYWdtZW50LnN0YXRpY0xhemlseUluaXRpYWxpemVkRmllbGRzOwogICAgTGlzdDxqcy5TdGF0ZW1lbnQ+IHN0YXRlbWVudHMgPSBbXTsKICAgIExvY2FsQWxpYXNlcyBsb2NhbHMgPSBMb2NhbEFsaWFzZXMoKTsKICAgIGZvciAoU3RhdGljRmllbGQgZmllbGQgaW4gZmllbGRzKSB7CiAgICAgIGFzc2VydChmaWVsZC5ob2xkZXIuaXNTdGF0aWNTdGF0ZUhvbGRlcik7CiAgICAgIGpzLlN0YXRlbWVudCBzdGF0ZW1lbnQgPSBqcy5qcy5zdGF0ZW1lbnQoIiMoIywgIywgIywgIyk7IiwgWwogICAgICAgIGxvY2Fscy5maW5kKCdfbGF6eScsICdodW5rSGVscGVycy5sYXp5JyksCiAgICAgICAgZmllbGQuaG9sZGVyLm5hbWUsCiAgICAgICAganMucXVvdGVOYW1lKGZpZWxkLm5hbWUpLAogICAgICAgIGpzLnF1b3RlTmFtZShmaWVsZC5nZXR0ZXJOYW1lKSwKICAgICAgICBmaWVsZC5jb2RlCiAgICAgIF0pOwoKICAgICAgcmVnaXN0ZXJFbnRpdHlBc3QoZmllbGQuZWxlbWVudCwgc3RhdGVtZW50LAogICAgICAgICAgbGlicmFyeTogZmllbGQuZWxlbWVudC5saWJyYXJ5KTsKICAgICAgc3RhdGVtZW50cy5hZGQoc3RhdGVtZW50KTsKICAgIH0KCiAgICBpZiAobG9jYWxzLmlzTm90RW1wdHkpIHsKICAgICAgc3RhdGVtZW50cy5pbnNlcnQoMCwgbG9jYWxzLnRvU3RhdGVtZW50KCkpOwogICAgfQoKICAgIHJldHVybiB3cmFwUGhhc2UoJ2xhenlJbml0aWFsaXplcnMnLCBzdGF0ZW1lbnRzKTsKICB9CgogIC8vLyBFbWl0cyB0aGUgZW1iZWRkZWQgZ2xvYmFscyB0aGF0IGFyZSBuZWVkZWQgZm9yIGRlZmVycmVkIGxvYWRpbmcuCiAgLy8vCiAgLy8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSBpbnZva2VkIGZvciB0aGUgbWFpbiBmcmFnbWVudC4KICAvLy8KICAvLy8gVGhlIFtsb2FkTWFwXSBjb250YWlucyBhIG1hcCBmcm9tIGxvYWQtaWRzIChmb3IgZWFjaCBkZWZlcnJlZCBsaWJyYXJ5KQogIC8vLyB0byB0aGUgbGlzdCBvZiBnZW5lcmF0ZWQgZnJhZ21lbnRzIHRoYXQgbXVzdCBiZSBpbnN0YWxsZWQgd2hlbiB0aGUKICAvLy8gZGVmZXJyZWQgbGlicmFyeSBpcyBsb2FkZWQuCiAgSXRlcmFibGU8anMuUHJvcGVydHk+IGVtaXRFbWJlZGRlZEdsb2JhbHNGb3JEZWZlcnJlZExvYWRpbmcoCiAgICAgIERlZmVycmVkTG9hZGluZ1N0YXRlIGRlZmVycmVkTG9hZGluZ1N0YXRlKSB7CiAgICBMaXN0PGpzLlByb3BlcnR5PiBnbG9iYWxzID0gW107CgogICAgZ2xvYmFscy5hZGQobmV3IGpzLlByb3BlcnR5KAogICAgICAgIGpzLnN0cmluZyhERUZFUlJFRF9JTklUSUFMSVpFRCksIGpzLmpzKCJPYmplY3QuY3JlYXRlKG51bGwpIikpKTsKCiAgICBTdHJpbmcgZGVmZXJyZWRHbG9iYWwgPSBNb2RlbEVtaXR0ZXIuZGVmZXJyZWRJbml0aWFsaXplcnNHbG9iYWw7CiAgICBqcy5FeHByZXNzaW9uIGlzSHVua0xvYWRlZEZ1bmN0aW9uID0KICAgICAgICBqcy5qcygiZnVuY3Rpb24oaGFzaCkgeyByZXR1cm4gISEkZGVmZXJyZWRHbG9iYWxbaGFzaF07IH0iKTsKICAgIGdsb2JhbHMKICAgICAgICAuYWRkKG5ldyBqcy5Qcm9wZXJ0eShqcy5zdHJpbmcoSVNfSFVOS19MT0FERUQpLCBpc0h1bmtMb2FkZWRGdW5jdGlvbikpOwoKICAgIGpzLkV4cHJlc3Npb24gaXNIdW5rSW5pdGlhbGl6ZWRGdW5jdGlvbiA9IGpzLmpzKAogICAgICAgICJmdW5jdGlvbihoYXNoKSB7IHJldHVybiAhISNkZWZlcnJlZEluaXRpYWxpemVkW2hhc2hdOyB9IiwgewogICAgICAnZGVmZXJyZWRJbml0aWFsaXplZCc6IGdlbmVyYXRlRW1iZWRkZWRHbG9iYWxBY2Nlc3MoREVGRVJSRURfSU5JVElBTElaRUQpCiAgICB9KTsKICAgIGdsb2JhbHMuYWRkKG5ldyBqcy5Qcm9wZXJ0eSgKICAgICAgICBqcy5zdHJpbmcoSVNfSFVOS19JTklUSUFMSVpFRCksIGlzSHVua0luaXRpYWxpemVkRnVuY3Rpb24pKTsKCiAgICAvLy8gU2VlIFtmaW5hbGl6ZURlZmVycmVkTG9hZGluZ0RhdGFdIGZvciB0aGUgZm9ybWF0IG9mIHRoZSBkZWZlcnJlZCBodW5rLgogICAganMuRXhwcmVzc2lvbiBpbml0aWFsaXplTG9hZGVkSHVua0Z1bmN0aW9uID0ganMuanMoIiIiCiAgICAgICAgICAgIGZ1bmN0aW9uKGhhc2gpIHsKICAgICAgICAgICAgICB2YXIgaHVuayA9ICRkZWZlcnJlZEdsb2JhbFtoYXNoXTsKICAgICAgICAgICAgICBpZiAoaHVuayA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICB0aHJvdyAiRGVmZXJyZWRMb2FkaW5nIHN0YXRlIGVycm9yOiBjb2RlIHdpdGggaGFzaCAnIiArCiAgICAgICAgICAgICAgICAgICAgaGFzaCArICInIHdhcyBub3QgbG9hZGVkIjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaW5pdGlhbGl6ZURlZmVycmVkSHVuayhodW5rKTsKICAgICAgICAgICAgICAjZGVmZXJyZWRJbml0aWFsaXplZFtoYXNoXSA9IHRydWU7CiAgICAgICAgICAgIH0iIiIsIHsKICAgICAgJ2RlZmVycmVkSW5pdGlhbGl6ZWQnOiBnZW5lcmF0ZUVtYmVkZGVkR2xvYmFsQWNjZXNzKERFRkVSUkVEX0lOSVRJQUxJWkVEKQogICAgfSk7CgogICAgZ2xvYmFscy5hZGQobmV3IGpzLlByb3BlcnR5KAogICAgICAgIGpzLnN0cmluZyhJTklUSUFMSVpFX0xPQURFRF9IVU5LKSwgaW5pdGlhbGl6ZUxvYWRlZEh1bmtGdW5jdGlvbikpOwoKICAgIGdsb2JhbHMuYWRkKG5ldyBqcy5Qcm9wZXJ0eShqcy5zdHJpbmcoREVGRVJSRURfTElCUkFSWV9QQVJUUyksCiAgICAgICAgZGVmZXJyZWRMb2FkaW5nU3RhdGUuZGVmZXJyZWRMaWJyYXJ5UGFydHMpKTsKICAgIGdsb2JhbHMuYWRkKG5ldyBqcy5Qcm9wZXJ0eSgKICAgICAgICBqcy5zdHJpbmcoREVGRVJSRURfUEFSVF9VUklTKSwgZGVmZXJyZWRMb2FkaW5nU3RhdGUuZGVmZXJyZWRQYXJ0VXJpcykpOwogICAgZ2xvYmFscy5hZGQobmV3IGpzLlByb3BlcnR5KGpzLnN0cmluZyhERUZFUlJFRF9QQVJUX0hBU0hFUyksCiAgICAgICAgZGVmZXJyZWRMb2FkaW5nU3RhdGUuZGVmZXJyZWRQYXJ0SGFzaGVzKSk7CgogICAgcmV0dXJuIGdsb2JhbHM7CiAgfQoKICAvLyBDcmVhdGUgZGF0YSB1c2VkIGZvciBsb2FkaW5nIGFuZCBpbml0aWFsaXppbmcgdGhlIGh1bmtzIGZvciBhIGRlZmVycmVkCiAgLy8gaW1wb3J0LiBUaGVyZSBhcmUgdGhyZWUgcGFydHM6IGEgbWFwIGZyb20gbG9hZElkIHRvIGxpc3Qgb2YgcGFydHMsIHdoZXJlCiAgLy8gcGFydHMgYXJlIHJlcHJlc2VudGVkIGFzIGFuIGluZGV4OyBhbiBhcnJheSBvZiB1cmlzIGluZGV4ZWQgYnkgcGFydDsgYW5kIGFuCiAgLy8gYXJyYXkgb2YgaGFzaGVzIGluZGV4ZWQgYnkgcGFydC4KICAvLyBbZGVmZXJyZWRMb2FkSGFzaGVzXSBtYXkgaGF2ZSBtaXNzaW5nIGVudHJpZXMgdG8gaW5kaWNhdGUgZW1wdHkgcGFydHMuCiAgdm9pZCBmaW5hbGl6ZURlZmVycmVkTG9hZGluZ0RhdGEoCiAgICAgIE1hcDxTdHJpbmcsIExpc3Q8RnJhZ21lbnQ+PiBsb2FkTWFwLAogICAgICBNYXA8RGVmZXJyZWRGcmFnbWVudCwgU3RyaW5nPiBkZWZlcnJlZExvYWRIYXNoZXMsCiAgICAgIERlZmVycmVkTG9hZGluZ1N0YXRlIGRlZmVycmVkTG9hZGluZ1N0YXRlKSB7CiAgICBpZiAobG9hZE1hcC5pc0VtcHR5KSByZXR1cm47CgogICAgTWFwPEZyYWdtZW50LCBpbnQ+IGZyYWdtZW50SW5kZXhlcyA9IHt9OwogICAgTGlzdDxTdHJpbmc+IGZyYWdtZW50VXJpcyA9IFtdOwogICAgTGlzdDxTdHJpbmc+IGZyYWdtZW50SGFzaGVzID0gW107CgogICAgTGlzdDxqcy5Qcm9wZXJ0eT4gbGlicmFyeVBhcnRzTWFwRW50cmllcyA9IFtdOwoKICAgIGxvYWRNYXAuZm9yRWFjaCgoU3RyaW5nIGxvYWRJZCwgTGlzdDxGcmFnbWVudD4gZnJhZ21lbnRMaXN0KSB7CiAgICAgIExpc3Q8anMuRXhwcmVzc2lvbj4gaW5kZXhlcyA9IFtdOwogICAgICBmb3IgKEZyYWdtZW50IGZyYWdtZW50IGluIGZyYWdtZW50TGlzdCkgewogICAgICAgIFN0cmluZyBmcmFnbWVudEhhc2ggPSBkZWZlcnJlZExvYWRIYXNoZXNbZnJhZ21lbnRdOwogICAgICAgIGlmIChmcmFnbWVudEhhc2ggPT0gbnVsbCkgY29udGludWU7CiAgICAgICAgaW50IGluZGV4ID0gZnJhZ21lbnRJbmRleGVzW2ZyYWdtZW50XTsKICAgICAgICBpZiAoaW5kZXggPT0gbnVsbCkgewogICAgICAgICAgaW5kZXggPSBmcmFnbWVudEluZGV4ZXNbZnJhZ21lbnRdID0gZnJhZ21lbnRJbmRleGVzLmxlbmd0aDsKICAgICAgICAgIGZyYWdtZW50VXJpcy5hZGQoCiAgICAgICAgICAgICAgIiR7ZnJhZ21lbnQub3V0cHV0RmlsZU5hbWV9LiR7TW9kZWxFbWl0dGVyLmRlZmVycmVkRXh0ZW5zaW9ufSIpOwogICAgICAgICAgZnJhZ21lbnRIYXNoZXMuYWRkKGZyYWdtZW50SGFzaCk7CiAgICAgICAgfQogICAgICAgIGluZGV4ZXMuYWRkKGpzLm51bWJlcihpbmRleCkpOwogICAgICB9CiAgICAgIGxpYnJhcnlQYXJ0c01hcEVudHJpZXMuYWRkKAogICAgICAgICAgbmV3IGpzLlByb3BlcnR5KGpzLnN0cmluZyhsb2FkSWQpLCBuZXcganMuQXJyYXlJbml0aWFsaXplcihpbmRleGVzKSkpOwogICAgfSk7CgogICAgZGVmZXJyZWRMb2FkaW5nU3RhdGUuZGVmZXJyZWRMaWJyYXJ5UGFydHMKICAgICAgICAuc2V0VmFsdWUobmV3IGpzLk9iamVjdEluaXRpYWxpemVyKGxpYnJhcnlQYXJ0c01hcEVudHJpZXMpKTsKICAgIGRlZmVycmVkTG9hZGluZ1N0YXRlLmRlZmVycmVkUGFydFVyaXMKICAgICAgICAuc2V0VmFsdWUoanMuc3RyaW5nQXJyYXkoZnJhZ21lbnRVcmlzKSk7CiAgICBkZWZlcnJlZExvYWRpbmdTdGF0ZS5kZWZlcnJlZFBhcnRIYXNoZXMKICAgICAgICAuc2V0VmFsdWUoanMuc3RyaW5nQXJyYXkoZnJhZ21lbnRIYXNoZXMpKTsKICB9CgogIC8vLyBFbWl0cyB0aGUgW01BTkdMRURfR0xPQkFMX05BTUVTXSBlbWJlZGRlZCBnbG9iYWwuCiAgLy8vCiAgLy8vIFRoaXMgZ2xvYmFsIG1hcHMgbWluaWZpZWQgbmFtZXMgZm9yIHNlbGVjdGVkIGNsYXNzZXMgKHNvbWUgaW1wb3J0YW50CiAgLy8vIGNvcmUgY2xhc3NlcywgYW5kIHNvbWUgbmF0aXZlIGNsYXNzZXMpIHRvIHRoZWlyIHVubWluaWZpZWQgbmFtZXMuCiAganMuUHJvcGVydHkgZW1pdE1hbmdsZWRHbG9iYWxOYW1lcygpIHsKICAgIExpc3Q8anMuUHJvcGVydHk+IG5hbWVzID0gW107CgogICAgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMgPSBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHM7CiAgICAvLyBXZSB3YW50IHRvIGtlZXAgdGhlIG9yaWdpbmFsIG5hbWVzIGZvciB0aGUgbW9zdCBjb21tb24gY29yZSBjbGFzc2VzIHdoZW4KICAgIC8vIGNhbGxpbmcgdG9TdHJpbmcgb24gdGhlbS4KICAgIExpc3Q8Q2xhc3NFbnRpdHk+IG5hdGl2ZUNsYXNzZXNOZWVkaW5nVW5tYW5nbGVkTmFtZSA9IFsKICAgICAgY29tbW9uRWxlbWVudHMuaW50Q2xhc3MsCiAgICAgIGNvbW1vbkVsZW1lbnRzLmRvdWJsZUNsYXNzLAogICAgICBjb21tb25FbGVtZW50cy5udW1DbGFzcywKICAgICAgY29tbW9uRWxlbWVudHMuc3RyaW5nQ2xhc3MsCiAgICAgIGNvbW1vbkVsZW1lbnRzLmJvb2xDbGFzcywKICAgICAgY29tbW9uRWxlbWVudHMubnVsbENsYXNzLAogICAgICBjb21tb25FbGVtZW50cy5saXN0Q2xhc3MKICAgIF07CiAgICAvLyBUT0RPKGZsb2l0c2NoKTogdGhpcyBzaG91bGQgcHJvYmFibHkgYmUgb24gYSBwZXItZnJhZ21lbnQgYmFzaXMuCiAgICBuYXRpdmVDbGFzc2VzTmVlZGluZ1VubWFuZ2xlZE5hbWUuZm9yRWFjaCgoZWxlbWVudCkgewogICAgICBuYW1lcy5hZGQobmV3IGpzLlByb3BlcnR5KAogICAgICAgICAganMucXVvdGVOYW1lKF9uYW1lci5jbGFzc05hbWUoZWxlbWVudCkpLCBqcy5zdHJpbmcoZWxlbWVudC5uYW1lKSkpOwogICAgfSk7CgogICAgcmV0dXJuIG5ldyBqcy5Qcm9wZXJ0eSgKICAgICAgICBqcy5zdHJpbmcoTUFOR0xFRF9HTE9CQUxfTkFNRVMpLCBuZXcganMuT2JqZWN0SW5pdGlhbGl6ZXIobmFtZXMpKTsKICB9CgogIC8vLyBFbWl0cyB0aGUgW0dFVF9UWVBFX0ZST01fTkFNRV0gZW1iZWRkZWQgZ2xvYmFsLgogIC8vLwogIC8vLyBUaGlzIGVtYmVkZGVkIGdsb2JhbCBwcm92aWRlcyBhIHdheSB0byBnbyBmcm9tIGEgY2xhc3MgbmFtZSAod2hpY2ggaXMKICAvLy8gYWxzbyB0aGUgY29uc3RydWN0b3IncyBuYW1lKSB0byB0aGUgY29uc3RydWN0b3IgaXRzZWxmLgogIGpzLlByb3BlcnR5IGVtaXRHZXRUeXBlRnJvbU5hbWUoKSB7CiAgICBqcy5FeHByZXNzaW9uIGZ1bmN0aW9uID0ganMuanMoImdldEdsb2JhbEZyb21OYW1lIik7CiAgICByZXR1cm4gbmV3IGpzLlByb3BlcnR5KGpzLnN0cmluZyhHRVRfVFlQRV9GUk9NX05BTUUpLCBmdW5jdGlvbik7CiAgfQoKICAvLy8gRW1pdHMgdGhlIFtNRVRBREFUQV0gZW1iZWRkZWQgZ2xvYmFsLgogIC8vLwogIC8vLyBUaGUgbWV0YWRhdGEgaXRzZWxmIGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0ZWQgZWFybGllciBhbmQgaXMgc3RvcmVkIGluCiAgLy8vIHRoZSBbcHJvZ3JhbV0uCiAgTGlzdDxqcy5Qcm9wZXJ0eT4gZW1pdE1ldGFkYXRhKFByb2dyYW0gcHJvZ3JhbSkgewogICAgTGlzdDxqcy5Qcm9wZXJ0eT4gbWV0YWRhdGFHbG9iYWxzID0gW107CgogICAganMuUHJvcGVydHkgY3JlYXRlR2xvYmFsKGpzLkV4cHJlc3Npb24gbWV0YWRhdGEsIFN0cmluZyBnbG9iYWwpIHsKICAgICAgcmV0dXJuIG5ldyBqcy5Qcm9wZXJ0eShqcy5zdHJpbmcoZ2xvYmFsKSwgbWV0YWRhdGEpOwogICAgfQoKICAgIHZhciBtYWluVW5pdCA9IHByb2dyYW0ubWFpbkZyYWdtZW50Lm91dHB1dFVuaXQ7CiAgICBqcy5FeHByZXNzaW9uIG1ldGFkYXRhID0gcHJvZ3JhbS5tZXRhZGF0YUZvck91dHB1dFVuaXQobWFpblVuaXQpOwogICAgbWV0YWRhdGFHbG9iYWxzLmFkZChjcmVhdGVHbG9iYWwobWV0YWRhdGEsIE1FVEFEQVRBKSk7CiAgICBqcy5FeHByZXNzaW9uIHR5cGVzID0gcHJvZ3JhbS5tZXRhZGF0YVR5cGVzRm9yT3V0cHV0VW5pdChtYWluVW5pdCk7CiAgICBtZXRhZGF0YUdsb2JhbHMuYWRkKGNyZWF0ZUdsb2JhbCh0eXBlcywgVFlQRVMpKTsKCiAgICByZXR1cm4gbWV0YWRhdGFHbG9iYWxzOwogIH0KCiAgLy8vIEVtaXRzIGFsbCBlbWJlZGRlZCBnbG9iYWxzLgogIGpzLlN0YXRlbWVudCBlbWl0RW1iZWRkZWRHbG9iYWxzUGFydDEoCiAgICAgIFByb2dyYW0gcHJvZ3JhbSwgRGVmZXJyZWRMb2FkaW5nU3RhdGUgZGVmZXJyZWRMb2FkaW5nU3RhdGUpIHsKICAgIExpc3Q8anMuUHJvcGVydHk+IGdsb2JhbHMgPSBbXTsKCiAgICBpZiAocHJvZ3JhbS5sb2FkTWFwLmlzTm90RW1wdHkpIHsKICAgICAgZ2xvYmFscwogICAgICAgICAgLmFkZEFsbChlbWl0RW1iZWRkZWRHbG9iYWxzRm9yRGVmZXJyZWRMb2FkaW5nKGRlZmVycmVkTG9hZGluZ1N0YXRlKSk7CiAgICB9CgogICAgaWYgKHByb2dyYW0udHlwZVRvSW50ZXJjZXB0b3JNYXAgIT0gbnVsbCkgewogICAgICAvLyBUaGlzIHByb3BlcnR5IGlzIGFzc2lnbmVkIGxhdGVyLgogICAgICAvLyBJbml0aWFsaXplIHByb3BlcnR5IHRvIGF2b2lkIG1hcCB0cmFuc2l0aW9ucy4KICAgICAgZ2xvYmFscy5hZGQobmV3IGpzLlByb3BlcnR5KAogICAgICAgICAganMuc3RyaW5nKFRZUEVfVE9fSU5URVJDRVBUT1JfTUFQKSwganMuTGl0ZXJhbE51bGwoKSkpOwogICAgfQoKICAgIGlmIChfb3B0aW9ucy5leHBlcmltZW50TmV3UnRpKSB7CiAgICAgIGdsb2JhbHMuYWRkKGpzLlByb3BlcnR5KGpzLnN0cmluZyhSVElfVU5JVkVSU0UpLCBjcmVhdGVSdGlVbml2ZXJzZSgpKSk7CiAgICB9CgogICAgZ2xvYmFscy5hZGQoZW1pdE1hbmdsZWRHbG9iYWxOYW1lcygpKTsKCiAgICAvLyBUaGUgW01BTkdMRURfTkFNRVNdIHRhYmxlIG11c3QgY29udGFpbiB0aGUgbWFwcGluZyBmb3IgY29uc3Qgc3ltYm9scy4KICAgIC8vIFdpdGhvdXQgY29uc3Qgc3ltYm9scywgdGhlIHRhYmxlIGlzIG9ubHkgcmVsZXZhbnQgZm9yIHJlZmxlY3Rpb24gYW5kCiAgICAvLyB0aGVyZWZvcmUgdW51c2VkIGluIHRoaXMgZW1pdHRlci4KICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGUgbmVlZCBmb3IgYWRkaW5nIGFuIGVtcHR5IGxpc3Qgb2YKICAgIC8vIG1hbmdsZWQgbmFtZXMuCiAgICBnbG9iYWxzLmFkZChuZXcganMuUHJvcGVydHkoCiAgICAgICAganMuc3RyaW5nKE1BTkdMRURfTkFNRVMpLCBuZXcganMuT2JqZWN0SW5pdGlhbGl6ZXIoPGpzLlByb3BlcnR5PltdKSkpOwoKICAgIGdsb2JhbHMuYWRkKGVtaXRHZXRUeXBlRnJvbU5hbWUoKSk7CgogICAgZ2xvYmFscy5hZGRBbGwoZW1pdE1ldGFkYXRhKHByb2dyYW0pKTsKCiAgICBpZiAocHJvZ3JhbS5uZWVkc05hdGl2ZVN1cHBvcnQpIHsKICAgICAgZ2xvYmFscy5hZGQobmV3IGpzLlByb3BlcnR5KAogICAgICAgICAganMuc3RyaW5nKElOVEVSQ0VQVE9SU19CWV9UQUcpLCBuZXcganMuTGl0ZXJhbE51bGwoKSkpOwogICAgICBnbG9iYWxzLmFkZChuZXcganMuUHJvcGVydHkoanMuc3RyaW5nKExFQUZfVEFHUyksIG5ldyBqcy5MaXRlcmFsTnVsbCgpKSk7CiAgICB9CgogICAganMuT2JqZWN0SW5pdGlhbGl6ZXIgZ2xvYmFsc09iamVjdCA9IG5ldyBqcy5PYmplY3RJbml0aWFsaXplcihnbG9iYWxzKTsKCiAgICByZXR1cm4ganMuanMuc3RhdGVtZW50KCd2YXIgaW5pdCA9ICM7JywgZ2xvYmFsc09iamVjdCk7CiAgfQoKICAvLy8gRmluaXNoIHNldHRpbmcgdXAgZW1iZWRkZWQgZ2xvYmFscy4KICBqcy5TdGF0ZW1lbnQgZW1pdEVtYmVkZGVkR2xvYmFsc1BhcnQyKAogICAgICBQcm9ncmFtIHByb2dyYW0sIERlZmVycmVkTG9hZGluZ1N0YXRlIGRlZmVycmVkTG9hZGluZ1N0YXRlKSB7CiAgICBMaXN0PGpzLlN0YXRlbWVudD4gc3RhdGVtZW50cyA9IFtdOwogICAgaWYgKHByb2dyYW0udHlwZVRvSW50ZXJjZXB0b3JNYXAgIT0gbnVsbCkgewogICAgICBzdGF0ZW1lbnRzLmFkZChqcy5qcy5zdGF0ZW1lbnQoJ2luaXQuIyA9ICM7JywKICAgICAgICAgIFtqcy5zdHJpbmcoVFlQRV9UT19JTlRFUkNFUFRPUl9NQVApLCBwcm9ncmFtLnR5cGVUb0ludGVyY2VwdG9yTWFwXSkpOwogICAgfQogICAgcmV0dXJuIGpzLkJsb2NrKHN0YXRlbWVudHMpOwogIH0KCiAganMuU3RhdGVtZW50IGVtaXRUeXBlUnVsZXMoRnJhZ21lbnQgZnJhZ21lbnQpIHsKICAgIGlmICghX29wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSkgcmV0dXJuIGpzLkVtcHR5U3RhdGVtZW50KCk7CgogICAgUnVsZXNldCBydWxlc2V0ID0gUnVsZXNldC5lbXB0eSgpOwogICAgSXRlcmFibGU8Q2xhc3M+IGNsYXNzZXMgPQogICAgICAgIGZyYWdtZW50LmxpYnJhcmllcy5leHBhbmQoKExpYnJhcnkgbGlicmFyeSkgPT4gbGlicmFyeS5jbGFzc2VzKTsKICAgIGNsYXNzZXMuZm9yRWFjaCgoQ2xhc3MgY2xzKSB7CiAgICAgIGlmIChjbHMuY2xhc3NDaGVja3NOZXdSdGkgPT0gbnVsbCkgcmV0dXJuOwogICAgICBJbnRlcmZhY2VUeXBlIHRhcmdldFR5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGNscy5lbGVtZW50KTsKICAgICAgSXRlcmFibGU8SW50ZXJmYWNlVHlwZT4gc3VwZXJ0eXBlcyA9IGNscy5jbGFzc0NoZWNrc05ld1J0aS5jaGVja3MubWFwKAogICAgICAgICAgKFR5cGVDaGVjayBjaGVjaykgPT4gX2RhcnRUeXBlcy5hc0luc3RhbmNlT2YodGFyZ2V0VHlwZSwgY2hlY2suY2xzKSk7CiAgICAgIE1hcDxUeXBlVmFyaWFibGVUeXBlLCBEYXJ0VHlwZT4gdHlwZVZhcmlhYmxlcyA9IHt9OwogICAgICBmb3IgKFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlIGluIGNscy5uYW1lZFR5cGVWYXJpYWJsZXNOZXdSdGkpIHsKICAgICAgICBUeXBlVmFyaWFibGVFbnRpdHkgZWxlbWVudCA9IHR5cGVWYXJpYWJsZS5lbGVtZW50OwogICAgICAgIEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlID0KICAgICAgICAgICAgX2RhcnRUeXBlcy5hc0luc3RhbmNlT2YodGFyZ2V0VHlwZSwgZWxlbWVudC50eXBlRGVjbGFyYXRpb24pOwogICAgICAgIExpc3Q8RGFydFR5cGU+IHN1cGVydHlwZUFyZ3VtZW50cyA9IHN1cGVydHlwZS50eXBlQXJndW1lbnRzOwogICAgICAgIHR5cGVWYXJpYWJsZXNbdHlwZVZhcmlhYmxlXSA9IHN1cGVydHlwZUFyZ3VtZW50c1tlbGVtZW50LmluZGV4XTsKICAgICAgfQogICAgICBydWxlc2V0LmFkZCh0YXJnZXRUeXBlLCBzdXBlcnR5cGVzLCB0eXBlVmFyaWFibGVzKTsKICAgIH0pOwoKICAgIEZ1bmN0aW9uRW50aXR5IG1ldGhvZCA9IF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5ydGlBZGRSdWxlc01ldGhvZDsKICAgIHJldHVybiBqcy5qcy5zdGF0ZW1lbnQoJyMoaW5pdC4jLEpTT04ucGFyc2UoIykpOycsIFsKICAgICAgX2VtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MobWV0aG9kKSwKICAgICAgUlRJX1VOSVZFUlNFLAogICAgICBfcnVsZXNldEVuY29kZXIuZW5jb2RlUnVsZXNldChydWxlc2V0KSwKICAgIF0pOwogIH0KCiAgLy8vIFJldHVybnMgYW4gZXhwcmVzc2lvbiB0aGF0IGNyZWF0ZXMgdGhlIGluaXRpYWwgUnRpIFVuaXZlcnNlLgogIC8vLwogIC8vLyBUaGlzIG5lZWRzIHRvIGJlIGtlcHQgaW4gc3luYyB3aXRoIGBfVW5pdmVyc2UuY3JlYXRlYCBpbiBgZGFydDpfcnRpYC4KICBqcy5FeHByZXNzaW9uIGNyZWF0ZVJ0aVVuaXZlcnNlKCkgewogICAgTGlzdDxqcy5Qcm9wZXJ0eT4gdW5pdmVyc2VGaWVsZHMgPSBbXTsKICAgIHZvaWQgaW5pdEZpZWxkKFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpIHsKICAgICAgdW5pdmVyc2VGaWVsZHMuYWRkKGpzLlByb3BlcnR5KGpzLnN0cmluZyhuYW1lKSwganMuanModmFsdWUpKSk7CiAgICB9CgogICAgaW5pdEZpZWxkKFJ0aVVuaXZlcnNlRmllbGROYW1lcy5ldmFsQ2FjaGUsICduZXcgTWFwKCknKTsKICAgIGluaXRGaWVsZChSdGlVbml2ZXJzZUZpZWxkTmFtZXMudHlwZVJ1bGVzLCAne30nKTsKICAgIGluaXRGaWVsZChSdGlVbml2ZXJzZUZpZWxkTmFtZXMuc2hhcmVkRW1wdHlBcnJheSwgJ1tdJyk7CgogICAgcmV0dXJuIGpzLk9iamVjdEluaXRpYWxpemVyKHVuaXZlcnNlRmllbGRzKTsKICB9CgogIC8vLyBFbWl0cyBkYXRhIG5lZWRlZCBmb3IgbmF0aXZlIGNsYXNzZXMuCiAgLy8vCiAgLy8vIFdlIGRvbid0IHRyeSB0byByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIG5hdGl2ZSBkYXRhLCBidXQgcmF0aGVyIGJ1aWxkCiAgLy8vIEphdmFTY3JpcHQgb2JqZWN0IGxpdGVyYWxzIHRoYXQgY29udGFpbiBhbGwgdGhlIGluZm9ybWF0aW9uIGRpcmVjdGx5LgogIC8vLyBUaGlzIG1lYW5zIHRoYXQgdGhlIG91dHB1dCBzaXplIGlzIGJpZ2dlciwgYnV0IHRoYXQgdGhlIHN0YXJ0dXAgaXMgZmFzdGVyLgogIC8vLwogIC8vLyBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBzdGF0aWMgZXF1aXZhbGVudCBvZgogIC8vLyBbTmF0aXZlR2VuZXJhdG9yLmJ1aWxkTmF0aXZlSW5mb0hhbmRsZXJdLgogIGpzLlN0YXRlbWVudCBlbWl0TmF0aXZlU3VwcG9ydChGcmFnbWVudCBmcmFnbWVudCkgewogICAgTGlzdDxqcy5TdGF0ZW1lbnQ+IHN0YXRlbWVudHMgPSBbXTsKCiAgICAvLyBUaGUgaXNvbGF0ZS1hZmZpbml0eSB0YWcgbXVzdCBvbmx5IGJlIGluaXRpYWxpemVkIG9uY2UgcGVyIHByb2dyYW0uCiAgICBpZiAoZnJhZ21lbnQuaXNNYWluRnJhZ21lbnQgJiYKICAgICAgICBOYXRpdmVHZW5lcmF0b3IubmVlZHNJc29sYXRlQWZmaW5pdHlUYWdJbml0aWFsaXphdGlvbigKICAgICAgICAgICAgX2Nsb3NlZFdvcmxkLmJhY2tlbmRVc2FnZSkpIHsKICAgICAgc3RhdGVtZW50cy5hZGQoTmF0aXZlR2VuZXJhdG9yLmdlbmVyYXRlSXNvbGF0ZUFmZmluaXR5VGFnSW5pdGlhbGl6YXRpb24oCiAgICAgICAgICBfY2xvc2VkV29ybGQuYmFja2VuZFVzYWdlLCBnZW5lcmF0ZUVtYmVkZGVkR2xvYmFsQWNjZXNzLCBqcy5qcygiIiIKICAgICAgICAvLyBPbiBWOCwgdGhlICdpbnRlcm4nIGZ1bmN0aW9uIGNvbnZlcnRzIGEgc3RyaW5nIHRvIGEgc3ltYm9sLCB3aGljaAogICAgICAgIC8vIG1ha2VzIHByb3BlcnR5IGFjY2VzcyBtdWNoIGZhc3Rlci4KICAgICAgICAvLyBUT0RPKHNyYSk6IFVzZSBTeW1ib2wgb24gbm9uLUlFMTEgYnJvd3NlcnMuCiAgICAgICAgZnVuY3Rpb24gKHMpIHsKICAgICAgICAgIHZhciBvID0ge307CiAgICAgICAgICBvW3NdID0gMTsKICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhodW5rSGVscGVycy5jb252ZXJ0VG9GYXN0T2JqZWN0KG8pKVswXTsKICAgICAgICB9IiIiLCBbXSkpKTsKICAgIH0KCiAgICBNYXA8U3RyaW5nLCBqcy5FeHByZXNzaW9uPiBpbnRlcmNlcHRvcnNCeVRhZyA9IHt9OwogICAgTWFwPFN0cmluZywganMuRXhwcmVzc2lvbj4gbGVhZlRhZ3MgPSB7fTsKICAgIExpc3Q8anMuU3RhdGVtZW50PiBzdWJjbGFzc0Fzc2lnbm1lbnRzID0gW107CgogICAgZm9yIChMaWJyYXJ5IGxpYnJhcnkgaW4gZnJhZ21lbnQubGlicmFyaWVzKSB7CiAgICAgIGZvciAoQ2xhc3MgY2xzIGluIGxpYnJhcnkuY2xhc3NlcykgewogICAgICAgIGlmIChjbHMubmF0aXZlTGVhZlRhZ3MgIT0gbnVsbCkgewogICAgICAgICAgZm9yIChTdHJpbmcgdGFnIGluIGNscy5uYXRpdmVMZWFmVGFncykgewogICAgICAgICAgICBpbnRlcmNlcHRvcnNCeVRhZ1t0YWddID0gY2xhc3NSZWZlcmVuY2UoY2xzKTsKICAgICAgICAgICAgbGVhZlRhZ3NbdGFnXSA9IG5ldyBqcy5MaXRlcmFsQm9vbCh0cnVlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGNscy5uYXRpdmVOb25MZWFmVGFncyAhPSBudWxsKSB7CiAgICAgICAgICBmb3IgKFN0cmluZyB0YWcgaW4gY2xzLm5hdGl2ZU5vbkxlYWZUYWdzKSB7CiAgICAgICAgICAgIGludGVyY2VwdG9yc0J5VGFnW3RhZ10gPSBjbGFzc1JlZmVyZW5jZShjbHMpOwogICAgICAgICAgICBsZWFmVGFnc1t0YWddID0gbmV3IGpzLkxpdGVyYWxCb29sKGZhbHNlKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChjbHMubmF0aXZlRXh0ZW5zaW9ucyAhPSBudWxsKSB7CiAgICAgICAgICAgIExpc3Q8Q2xhc3M+IHN1YmNsYXNzZXMgPSBjbHMubmF0aXZlRXh0ZW5zaW9uczsKICAgICAgICAgICAganMuRXhwcmVzc2lvbiBiYXNlID0ganMuc3RyaW5nKGNscy5uYXRpdmVOb25MZWFmVGFnc1swXSk7CgogICAgICAgICAgICBmb3IgKENsYXNzIHN1YmNsYXNzIGluIHN1YmNsYXNzZXMpIHsKICAgICAgICAgICAgICBzdWJjbGFzc0Fzc2lnbm1lbnRzLmFkZChqcy5qcy5zdGF0ZW1lbnQoJyMuIyA9ICM7JywgWwogICAgICAgICAgICAgICAgY2xhc3NSZWZlcmVuY2Uoc3ViY2xhc3MpLAogICAgICAgICAgICAgICAgTkFUSVZFX1NVUEVSQ0xBU1NfVEFHX05BTUUsCiAgICAgICAgICAgICAgICBiYXNlCiAgICAgICAgICAgICAgXSkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgaWYgKGludGVyY2VwdG9yc0J5VGFnLmlzTm90RW1wdHkpIHsKICAgICAgc3RhdGVtZW50cy5hZGQoanMuanMuc3RhdGVtZW50KAogICAgICAgICAgImh1bmtIZWxwZXJzLnNldE9yVXBkYXRlSW50ZXJjZXB0b3JzQnlUYWcoIyk7IiwKICAgICAgICAgIGpzLm9iamVjdExpdGVyYWwoaW50ZXJjZXB0b3JzQnlUYWcpKSk7CiAgICB9CiAgICBpZiAobGVhZlRhZ3MuaXNOb3RFbXB0eSkgewogICAgICBzdGF0ZW1lbnRzLmFkZChqcy5qcy5zdGF0ZW1lbnQoCiAgICAgICAgICAiaHVua0hlbHBlcnMuc2V0T3JVcGRhdGVMZWFmVGFncygjKTsiLCBqcy5vYmplY3RMaXRlcmFsKGxlYWZUYWdzKSkpOwogICAgfQogICAgc3RhdGVtZW50cy5hZGRBbGwoc3ViY2xhc3NBc3NpZ25tZW50cyk7CgogICAgcmV0dXJuIHdyYXBQaGFzZSgnbmF0aXZlU3VwcG9ydCcsIHN0YXRlbWVudHMpOwogIH0KfQoKY2xhc3MgTG9jYWxBbGlhc2VzIHsKICBmaW5hbCBNYXA8U3RyaW5nLCBqcy5FeHByZXNzaW9uPiBfbG9jYWxzID0ge307CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2xvY2Fscy5pc0VtcHR5OwogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gIWlzRW1wdHk7CgogIFN0cmluZyBmaW5kKFN0cmluZyBhbGlhcywgU3RyaW5nIGV4cHJlc3Npb24pIHsKICAgIF9sb2NhbHNbYWxpYXNdID8/PSBqcy5qcyhleHByZXNzaW9uKTsKICAgIHJldHVybiBhbGlhczsKICB9CgogIGpzLlN0YXRlbWVudCB0b1N0YXRlbWVudCgpIHsKICAgIExpc3Q8anMuVmFyaWFibGVJbml0aWFsaXphdGlvbj4gaW5pdGlhbGl6YXRpb25zID0gW107CiAgICBfbG9jYWxzLmZvckVhY2goKGxvY2FsLCB2YWx1ZSkgewogICAgICBpbml0aWFsaXphdGlvbnMKICAgICAgICAgIC5hZGQoanMuVmFyaWFibGVJbml0aWFsaXphdGlvbihqcy5WYXJpYWJsZURlY2xhcmF0aW9uKGxvY2FsKSwgdmFsdWUpKTsKICAgIH0pOwogICAgcmV0dXJuIGpzLkV4cHJlc3Npb25TdGF0ZW1lbnQoanMuVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoaW5pdGlhbGl6YXRpb25zKSk7CiAgfQp9CgovLy8gQ29kZSB0byBpbml0aWFsaXplIGhvbGRlciB3aXRoIGFuY2lsbGFyeSBpbmZvcm1hdGlvbi4KY2xhc3MgSG9sZGVyQ29kZSB7CiAgZmluYWwgTGlzdDxIb2xkZXI+IGFjdGl2ZUhvbGRlcnM7CiAganMuU3RhdGVtZW50IHN0YXRlbWVudHM7CiAgSG9sZGVyQ29kZSh7dGhpcy5hY3RpdmVIb2xkZXJzLCB0aGlzLnN0YXRlbWVudHN9KTsKfQoKY2xhc3MgRGVmZXJyZWRMb2FkaW5nU3RhdGUgewogIGZpbmFsIGRlZmVycmVkTGlicmFyeVBhcnRzID0gbmV3IERlZmVycmVkUHJpbWFyeUV4cHJlc3Npb24oKTsKICBmaW5hbCBkZWZlcnJlZFBhcnRVcmlzID0gbmV3IERlZmVycmVkUHJpbWFyeUV4cHJlc3Npb24oKTsKICBmaW5hbCBkZWZlcnJlZFBhcnRIYXNoZXMgPSBuZXcgRGVmZXJyZWRQcmltYXJ5RXhwcmVzc2lvbigpOwp9CgpjbGFzcyBEZWZlcnJlZFByaW1h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YXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gQ29udGFpbnMgZXJyb3IgY29kZXMgdGhhdCB0cmFuc2Zvcm1lZCBhc3luYy9hc3luYyogZnVuY3Rpb25zIHVzZSB0bwovLy8gY29tbXVuaWNhdGUgd2l0aCBqc19oZWxwZXIgZnVuY3Rpb25zLgoKY29uc3QgaW50IFNVQ0NFU1MgPSAwOwpjb25zdCBpbnQgRVJST1IgPSAxOwpjb25zdCBpbnQgU1RSRUFNX1dBU19DQU5DRUxFRCA9IDI7CgwATk48AUgqARcVIwE2cGFja2FnZTpqc19ydW50aW1lL3NoYXJlZC9hc3luY19hd2FpdF9lcnJvcl9jb2Rlcy5kYXJ0NnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NzYS9jb2RlZ2VuX2hlbHBlcnMuZGFydMAAs1UvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2ludGVyY2VwdG9yX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JyBzaG93IFNlbGVjdG9yOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwppbXBvcnQgJ2NvZGVnZW4uZGFydCcgc2hvdyBDb2RlZ2VuUGhhc2U7CmltcG9ydCAnbm9kZXMuZGFydCc7CgovLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGludm9jYXRpb24gb2YgW3NlbGVjdG9yXSBvbiBbbWVtYmVyXSBjYW4gdXNlIGFuCi8vLyBhbGlhc2VkIG1lbWJlci4KLy8vCi8vLyBJbnZva2luZyBhIHN1cGVyIGdldHRlciBpc24ndCBzdXBwb3J0ZWQsIHRoaXMgd291bGQgcmVxdWlyZSBjaGFuZ2VzIHRvCi8vLyBjb21wYWN0IGZpZWxkIGRlc2NyaXB0b3JzIGluIHRoZSBlbWl0dGVyLgpib29sIGNhblVzZUFsaWFzZWRTdXBlck1lbWJlcihNZW1iZXJFbnRpdHkgbWVtYmVyLCBTZWxlY3RvciBzZWxlY3RvcikgewogIHJldHVybiAhc2VsZWN0b3IuaXNHZXR0ZXI7Cn0KCi8vLyBSZXBsYWNlcyBzb21lIGluc3RydWN0aW9ucyB3aXRoIHNwZWNpYWxpemVkIHZlcnNpb25zIHRvIG1ha2UgY29kZWdlbiBlYXNpZXIuCi8vLyBDYWNoZXMgY29kZWdlbiBpbmZvcm1hdGlvbiBvbiBub2Rlcy4KY2xhc3MgU3NhSW5zdHJ1Y3Rpb25TZWxlY3Rpb24gZXh0ZW5kcyBIQmFzZVZpc2l0b3Igd2l0aCBDb2RlZ2VuUGhhc2UgewogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CiAgZmluYWwgSW50ZXJjZXB0b3JEYXRhIF9pbnRlcmNlcHRvckRhdGE7CiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwogIEhHcmFwaCBncmFwaDsKCiAgU3NhSW5zdHJ1Y3Rpb25TZWxlY3Rpb24oCiAgICAgIHRoaXMuX29wdGlvbnMsIHRoaXMuX2Nsb3NlZFdvcmxkLCB0aGlzLl9pbnRlcmNlcHRvckRhdGEpOwoKICBBYnN0cmFjdFZhbHVlRG9tYWluIGdldCBfYWJzdHJhY3RWYWx1ZURvbWFpbiA9PgogICAgICBfY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEdyYXBoKEhHcmFwaCBncmFwaCkgewogICAgdGhpcy5ncmFwaCA9IGdyYXBoOwogICAgdmlzaXREb21pbmF0b3JUcmVlKGdyYXBoKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0QmFzaWNCbG9jayhIQmFzaWNCbG9jayBibG9jaykgewogICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gYmxvY2suZmlyc3Q7CiAgICB3aGlsZSAoaW5zdHJ1Y3Rpb24gIT0gbnVsbCkgewogICAgICBISW5zdHJ1Y3Rpb24gbmV4dCA9IGluc3RydWN0aW9uLm5leHQ7CiAgICAgIEhJbnN0cnVjdGlvbiByZXBsYWNlbWVudCA9IGluc3RydWN0aW9uLmFjY2VwdCh0aGlzKTsKICAgICAgaWYgKHJlcGxhY2VtZW50ICE9IGluc3RydWN0aW9uICYmIHJlcGxhY2VtZW50ICE9IG51bGwpIHsKICAgICAgICBibG9jay5yZXdyaXRlKGluc3RydWN0aW9uLCByZXBsYWNlbWVudCk7CgogICAgICAgIC8vIElmIHRoZSByZXBsYWNlbWVudCBpbnN0cnVjdGlvbiBkb2VzIG5vdCBrbm93IGl0cyBzb3VyY2UgZWxlbWVudCwgdXNlCiAgICAgICAgLy8gdGhlIHNvdXJjZSBlbGVtZW50IG9mIHRoZSBpbnN0cnVjdGlvbi4KICAgICAgICBpZiAocmVwbGFjZW1lbnQuc291cmNlRWxlbWVudCA9PSBudWxsKSB7CiAgICAgICAgICByZXBsYWNlbWVudC5zb3VyY2VFbGVtZW50ID0gaW5zdHJ1Y3Rpb24uc291cmNlRWxlbWVudDsKICAgICAgICB9CiAgICAgICAgaWYgKHJlcGxhY2VtZW50LnNvdXJjZUluZm9ybWF0aW9uID09IG51bGwpIHsKICAgICAgICAgIHJlcGxhY2VtZW50LnNvdXJjZUluZm9ybWF0aW9uID0gaW5zdHJ1Y3Rpb24uc291cmNlSW5mb3JtYXRpb247CiAgICAgICAgfQogICAgICAgIGlmICghcmVwbGFjZW1lbnQuaXNJbkJhc2ljQmxvY2soKSkgewogICAgICAgICAgLy8gVGhlIGNvbnN0YW50IGZvbGRpbmcgY2FuIHJldHVybiBhbiBpbnN0cnVjdGlvbiB0aGF0IGlzIGFscmVhZHkKICAgICAgICAgIC8vIHBhcnQgb2YgdGhlIGdyYXBoIChsaWtlIGFuIGlucHV0KSwgc28gd2Ugb25seSBhZGQgdGhlIHJlcGxhY2VtZW50CiAgICAgICAgICAvLyBpZiBuZWNlc3NhcnkuCiAgICAgICAgICBibG9jay5hZGRBZnRlcihpbnN0cnVjdGlvbiwgcmVwbGFjZW1lbnQpOwogICAgICAgICAgLy8gVmlzaXQgdGhlIHJlcGxhY2VtZW50IGFzIHRoZSBuZXh0IGluc3RydWN0aW9uIGluIGNhc2UgaXQgY2FuIGFsc28KICAgICAgICAgIC8vIGJlIGNvbnN0YW50IGZvbGRlZCBhd2F5LgogICAgICAgICAgbmV4dCA9IHJlcGxhY2VtZW50OwogICAgICAgIH0KICAgICAgICBibG9jay5yZW1vdmUoaW5zdHJ1Y3Rpb24pOwogICAgICB9CiAgICAgIGluc3RydWN0aW9uID0gbmV4dDsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEluc3RydWN0aW9uKEhJbnN0cnVjdGlvbiBub2RlKSB7CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdElzKEhJcyBub2RlKSB7CiAgICBpZiAobm9kZS5raW5kID09IEhJcy5SQVdfQ0hFQ0spIHsKICAgICAgSEluc3RydWN0aW9uIGludGVyY2VwdG9yID0gbm9kZS5pbnRlcmNlcHRvcjsKICAgICAgaWYgKGludGVyY2VwdG9yICE9IG51bGwpIHsKICAgICAgICByZXR1cm4gbmV3IEhJc1ZpYUludGVyY2VwdG9yKAogICAgICAgICAgICBub2RlLnR5cGVFeHByZXNzaW9uLCBpbnRlcmNlcHRvciwgX2Fic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdElkZW50aXR5KEhJZGVudGl0eSBub2RlKSB7CiAgICBub2RlLnNpbmdsZUNvbXBhcmlzb25PcCA9IHNpbXBsZU9wKG5vZGUubGVmdCwgbm9kZS5yaWdodCk7CiAgICByZXR1cm4gbm9kZTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBzaW5nbGUgSmF2YVNjcmlwdCBjb21wYXJpc29uIChgPT1gIG9yIGA9PT1gKSBpZiB0aGF0CiAgLy8vIGltcGxlbWVudHMgYGlkZW50aWNhbChsZWZ0LCByaWdodClgLCBvciByZXR1cm5zIGBudWxsYCBpZiB0aGUgbW9yZSBjb21wbGV4CiAgLy8vIHRlcm5hcnkgYGxlZnQgPT0gbnVsbCA/IHJpZ2h0ID09IG51bGwgOiBsZWZ0ID09PSByaWdodGAgaXMgcmVxdWlyZWQuCiAgU3RyaW5nIHNpbXBsZU9wKEhJbnN0cnVjdGlvbiBsZWZ0LCBISW5zdHJ1Y3Rpb24gcmlnaHQpIHsKICAgIEFic3RyYWN0VmFsdWUgbGVmdFR5cGUgPSBsZWZ0Lmluc3RydWN0aW9uVHlwZTsKICAgIEFic3RyYWN0VmFsdWUgcmlnaHRUeXBlID0gcmlnaHQuaW5zdHJ1Y3Rpb25UeXBlOwogICAgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzTnVsbChsZWZ0VHlwZSkuaXNEZWZpbml0ZWx5RmFsc2UpIHsKICAgICAgcmV0dXJuICc9PT0nOwogICAgfQogICAgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzTnVsbChyaWdodFR5cGUpLmlzRGVmaW5pdGVseUZhbHNlKSB7CiAgICAgIHJldHVybiAnPT09JzsKICAgIH0KCiAgICAvLyBEYXJ0IGBudWxsYCBpcyBpbXBsZW1lbnRlZCBieSBKYXZhU2NyaXB0IGBudWxsYCBhbmQgYHVuZGVmaW5lZGAgd2hpY2ggYXJlCiAgICAvLyBub3Qgc3RyaWN0LWVxdWFscywgc28gd2UgY2FuJ3QgdXNlIGA9PT1gLiBXZSB3b3VsZCBsaWtlIHRvIHVzZSBgPT1gIGJ1dAogICAgLy8gbmVlZCB0byBhdm9pZCBhbnkgY2FzZXMgZnJvbSBFUzYgNy4yLjE0IHRoYXQgaW52b2x2ZSBjb252ZXJzaW9ucy4KICAgIGlmIChsZWZ0LmlzQ29uc3RhbnROdWxsKCkgfHwgcmlnaHQuaXNDb25zdGFudE51bGwoKSkgewogICAgICByZXR1cm4gJz09JzsKICAgIH0KCiAgICBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4uaXNOdW1iZXJPck51bGwobGVmdFR5cGUpLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc051bWJlck9yTnVsbChyaWdodFR5cGUpLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuICc9PSc7CiAgICB9CiAgICBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4uaXNTdHJpbmdPck51bGwobGVmdFR5cGUpLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc1N0cmluZ09yTnVsbChyaWdodFR5cGUpLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuICc9PSc7CiAgICB9CiAgICBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4uaXNCb29sZWFuT3JOdWxsKGxlZnRUeXBlKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uaXNCb29sZWFuT3JOdWxsKHJpZ2h0VHlwZSkuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gJz09JzsKICAgIH0KCiAgICBpZiAoX2ludGVyY2VwdGVkKGxlZnRUeXBlKSkgcmV0dXJuIG51bGw7CiAgICBpZiAoX2ludGVyY2VwdGVkKHJpZ2h0VHlwZSkpIHJldHVybiBudWxsOwogICAgcmV0dXJuICc9PSc7CiAgfQoKICAvLyBUb1ByaW1pdGl2ZSBjb252ZXJzaW9ucyBvZiBhbiBvYmplY3Qgb2NjdXIgd2hlbiB0aGUgb3RoZXIgb3BlcmFuZCBpcyBhCiAgLy8gcHJpbWl0aXZlIChOdW1iZXIsIFN0cmluZywgU3ltYm9sIGFuZCwgaW5kaXJlY3RseSwgQm9vbGVhbikuIFdlIHVzZQogIC8vICdpbnRlcmNlcHRlZCcgdHlwZXMgYXMgYSBwcm94eSBmb3IgYWxsIHRoZSBwcmltaXRpdmUgdHlwZXMuCiAgYm9vbCBfaW50ZXJjZXB0ZWQoQWJzdHJhY3RWYWx1ZSB0eXBlKSA9PiBfYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAuaXNJbnRlcmNlcHRvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi5leGNsdWRlTnVsbCh0eXBlKSkKICAgICAgLmlzUG90ZW50aWFsbHlUcnVlOwoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRJbnZva2VEeW5hbWljKEhJbnZva2VEeW5hbWljIG5vZGUpIHsKICAgIHRyeVJlcGxhY2VFeHBsaWNpdFJlY2VpdmVyV2l0aER1bW15KAogICAgICAgIG5vZGUsIG5vZGUuc2VsZWN0b3IsIG5vZGUuZWxlbWVudCwgbm9kZS5yZWNlaXZlclR5cGUpOwogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRJbnZva2VTdXBlcihISW52b2tlU3VwZXIgbm9kZSkgewogICAgdHJ5UmVwbGFjZUV4cGxpY2l0UmVjZWl2ZXJXaXRoRHVtbXkoCiAgICAgICAgbm9kZSwgbm9kZS5zZWxlY3Rvciwgbm9kZS5lbGVtZW50LCBudWxsKTsKICAgIHJldHVybiBub2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0T25lU2hvdEludGVyY2VwdG9yKEhPbmVTaG90SW50ZXJjZXB0b3Igbm9kZSkgewogICAgLy8gVGhlIHJlY2VpdmVyIHBhcmFtZXRlciBzaG91bGQgbmV2ZXIgYmUgcmVwbGFjZWQgd2l0aCBhIGR1bW15IGNvbnN0YW50LgogICAgcmV0dXJuIG5vZGU7CiAgfQoKICB2b2lkIHRyeVJlcGxhY2VFeHBsaWNpdFJlY2VpdmVyV2l0aER1bW15KEhJbnZva2Ugbm9kZSwgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIE1lbWJlckVudGl0eSB0YXJnZXQsIEFic3RyYWN0VmFsdWUgbWFzaykgewogICAgLy8gQ2FsbHMgb2YgdGhlIGZvcm0KICAgIC8vCiAgICAvLyAgICAgYS5mb28kMShhLCB4KQogICAgLy8KICAgIC8vIHdoZXJlIHRoZSBpbnRlcmNlcHRvciBjYWxsaW5nIGNvbnZlbnRpb24gaXMgdXNlZCBjb21lIGZyb20gcmVjb2duaXppbmcKICAgIC8vIHRoYXQgJ2EnIGlzIGEgJ3NlbGYtaW50ZXJjZXB0b3InLiAgSWYgdGhlIHNlbGVjdG9yIG1hdGNoZXMgb25seSBtZXRob2RzCiAgICAvLyB0aGF0IGlnbm9yZSB0aGUgZXhwbGljaXQgcmVjZWl2ZXIgcGFyYW1ldGVyLCByZXBsYWNlIG9jY3VycmVuY2VzIG9mIHRoZQogICAgLy8gcmVjZWl2ZXIgYXJndW1lbnQgd2l0aCBhIGR1bW15IHJlY2VpdmVyICcwJzoKICAgIC8vCiAgICAvLyAgICAgYS5mb28kMShhLCB4KSAgIC0tLT4gICBhLmZvbyQxKDAsIHgpCiAgICAvLwogICAgLy8gVGhpcyBvZnRlbiByZWR1Y2VzIHRoZSBudW1iZXIgb2YgcmVmZXJlbmNlcyB0byAnYScgdG8gb25lLCBhbGxvd2luZyAnYScKICAgIC8vIHRvIGJlIGdlbmVyYXRlZCBhdCB1c2UgdG8gYXZvaWQgYSB0ZW1wb3JhcnksIGUuZy4KICAgIC8vCiAgICAvLyAgICAgdDEgPSBiLmdldCR0aGluZygpOwogICAgLy8gICAgIHQxLmZvbyQxKHQxLCB4KQogICAgLy8gLS0tPgogICAgLy8gICAgIGIuZ2V0JHRoaW5nKCkuZm9vJDEoMCwgeCkKICAgIC8vCiAgICBhc3NlcnQodGFyZ2V0ICE9IG51bGwgfHwgbWFzayAhPSBudWxsKTsKCiAgICBpZiAoIW5vZGUuaXNJbnRlcmNlcHRlZENhbGwpIHJldHVybjsKCiAgICAvLyBUT0RPKDE1OTMzKTogTWFrZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBwcm9wZXJ0eSBleHRyYWN0aW9uIGNsb3N1cmVzCiAgICAvLyB3b3JrIHdpdGggdGhlIGR1bW15IHJlY2VpdmVyIG9wdGltaXphdGlvbi4KICAgIGlmIChzZWxlY3Rvci5pc0dldHRlcikgcmV0dXJuOwoKICAgIC8vIFRoaXMgYXNzaWdubWVudCBvZiBpbnB1dHMgaXMgdW5pZm9ybSBmb3IgSEludm9rZUR5bmFtaWMgYW5kIEhJbnZva2VTdXBlci4KICAgIEhJbnN0cnVjdGlvbiBpbnRlcmNlcHRvciA9IG5vZGUuaW5wdXRzWzBdOwogICAgSEluc3RydWN0aW9uIHJlY2VpdmVyQXJndW1lbnQgPSBub2RlLmlucHV0c1sxXTsKCiAgICAvLyBBICdzZWxmLWludGVyY2VwdG9yJz8KICAgIGlmIChpbnRlcmNlcHRvci5ub25DaGVjaygpICE9IHJlY2VpdmVyQXJndW1lbnQubm9uQ2hlY2soKSkgcmV0dXJuOwoKICAgIC8vIFRPRE8oc3JhKTogU2hvdWxkIHRoaXMgYmUgYW4gYXNzZXJ0PwogICAgaWYgKCFfaW50ZXJjZXB0b3JEYXRhLmlzSW50ZXJjZXB0ZWRTZWxlY3RvcihzZWxlY3RvcikpIHJldHVybjsKCiAgICBpZiAodGFyZ2V0ICE9IG51bGwpIHsKICAgICAgLy8gQSBjYWxsIHRoYXQgcmVzb2x2ZXMgdG8gYSBzaW5nbGUgaW5zdGFuY2UgbWV0aG9kIChlbGVtZW50KSByZXF1aXJlcyB0aGUKICAgICAgLy8gY2FsbGluZyBjb252ZW50aW9uIGNvbnNpc3RlbnQgd2l0aCB0aGUgbWV0aG9kLgogICAgICBDbGFzc0VudGl0eSBjbHMgPSB0YXJnZXQuZW5jbG9zaW5nQ2xhc3M7CiAgICAgIGFzc2VydChfaW50ZXJjZXB0b3JEYXRhLmlzSW50ZXJjZXB0ZWRNZXRob2QodGFyZ2V0KSk7CiAgICAgIGlmIChfaW50ZXJjZXB0b3JEYXRhLmlzSW50ZXJjZXB0ZWRDbGFzcyhjbHMpKSByZXR1cm47CiAgICB9IGVsc2UgaWYgKF9pbnRlcmNlcHRvckRhdGEuaXNJbnRlcmNlcHRlZE1peGluU2VsZWN0b3IoCiAgICAgICAgc2VsZWN0b3IsIG1hc2ssIF9jbG9zZWRXb3JsZCkpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQgPQogICAgICAgIER1bW15SW50ZXJjZXB0b3JDb25zdGFudFZhbHVlKHJlY2VpdmVyQXJndW1lbnQuaW5zdHJ1Y3Rpb25UeXBlKTsKICAgIEhDb25zdGFudCBkdW1teSA9IGdyYXBoLmFkZENvbnN0YW50KGNvbnN0YW50LCBfY2xvc2VkV29ybGQpOwogICAgcmVjZWl2ZXJBcmd1bWVudC51c2VkQnkucmVtb3ZlKG5vZGUpOwogICAgbm9kZS5pbnB1dHNbMV0gPSBkdW1teTsKICAgIGR1bW15LnVzZWRCeS5hZGQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRGaWVsZFNldChIRmllbGRTZXQgc2V0dGVyKSB7CiAgICAvLyBQYXR0ZXJuIG1hdGNoCiAgICAvLyAgICAgdDEgPSB4LmY7IHQyID0gdDEgKyAxOyB4LmYgPSB0MjsgdXNlKHQyKSAgIC0tPiAgKyt4LmYKICAgIC8vICAgICB0MSA9IHguZjsgdDIgPSB0MSBvcCB5OyB4LmYgPSB0MjsgdXNlKHQyKSAgLS0+ICB4LmYgb3A9IHkKICAgIC8vICAgICB0MSA9IHguZjsgdDIgPSB0MSArIDE7IHguZiA9IHQyOyB1c2UodDEpICAgLS0+ICB4LmYrKwogICAgSEJhc2ljQmxvY2sgYmxvY2sgPSBzZXR0ZXIuYmxvY2s7CiAgICBISW5zdHJ1Y3Rpb24gb3AgPSBzZXR0ZXIudmFsdWU7CiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSBzZXR0ZXIucmVjZWl2ZXI7CgogICAgYm9vbCBpc01hdGNoaW5nUmVhZChISW5zdHJ1Y3Rpb24gY2FuZGlkYXRlKSB7CiAgICAgIGlmIChjYW5kaWRhdGUgaXMgSEZpZWxkR2V0KSB7CiAgICAgICAgaWYgKGNhbmRpZGF0ZS5lbGVtZW50ICE9IHNldHRlci5lbGVtZW50KSByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKGNhbmRpZGF0ZS5yZWNlaXZlciAhPSBzZXR0ZXIucmVjZWl2ZXIpIHJldHVybiBmYWxzZTsKICAgICAgICAvLyBSZWNvZ25pemUgb25seSB0aHJlZSBpbnN0cnVjdGlvbnMgaW4gc2VxdWVuY2UgaW4gdGhlIHNhbWUgYmxvY2suIFRoaXMKICAgICAgICAvLyBjb3VsZCBiZSBicm9hZGVuZWQgdG8gYWxsb3cgbm9uLWludGVyZmVyaW5nIGludGVybGVhdmVkIGluc3RydWN0aW9ucy4KICAgICAgICBpZiAob3AuYmxvY2sgIT0gYmxvY2spIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAoY2FuZGlkYXRlLmJsb2NrICE9IGJsb2NrKSByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKHNldHRlci5wcmV2aW91cyAhPSBvcCkgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChvcC5wcmV2aW91cyAhPSBjYW5kaWRhdGUpIHJldHVybiBmYWxzZTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgSEluc3RydWN0aW9uIG5vTWF0Y2hpbmdSZWFkKCkgewogICAgICAvLyBJZiB3ZSBoYXZlIG90aGVyIEhGaWVsZFNldCBvcHRpbWl6YXRpb25zLCB0aGV5IGdvIGhlcmUuCiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIEhJbnN0cnVjdGlvbiByZXBsYWNlT3AoSEluc3RydWN0aW9uIHJlcGxhY2VtZW50LCBISW5zdHJ1Y3Rpb24gZ2V0dGVyKSB7CiAgICAgIGJsb2NrLmFkZEJlZm9yZShzZXR0ZXIsIHJlcGxhY2VtZW50KTsKICAgICAgYmxvY2sucmVtb3ZlKHNldHRlcik7CiAgICAgIGJsb2NrLnJld3JpdGUob3AsIHJlcGxhY2VtZW50KTsKICAgICAgYmxvY2sucmVtb3ZlKG9wKTsKICAgICAgYmxvY2sucmVtb3ZlKGdldHRlcik7CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIEhJbnN0cnVjdGlvbiBwbHVzT3JNaW51cyhTdHJpbmcgYXNzaWduT3AsIFN0cmluZyBpbmNyZW1lbnRPcCkgewogICAgICBISW52b2tlQmluYXJ5IGJpbmFyeSA9IG9wOwogICAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IGJpbmFyeS5sZWZ0OwogICAgICBISW5zdHJ1Y3Rpb24gcmlnaHQgPSBiaW5hcnkucmlnaHQ7CiAgICAgIGlmIChpc01hdGNoaW5nUmVhZChsZWZ0KSkgewogICAgICAgIGlmIChsZWZ0LnVzZWRCeS5sZW5ndGggPT0gMSkgewogICAgICAgICAgaWYgKHJpZ2h0IGlzIEhDb25zdGFudCAmJiByaWdodC5jb25zdGFudC5pc09uZSkgewogICAgICAgICAgICBISW5zdHJ1Y3Rpb24gcm13ID0gbmV3IEhSZWFkTW9kaWZ5V3JpdGUucHJlT3AoCiAgICAgICAgICAgICAgICBzZXR0ZXIuZWxlbWVudCwgaW5jcmVtZW50T3AsIHJlY2VpdmVyLCBvcC5pbnN0cnVjdGlvblR5cGUpOwogICAgICAgICAgICByZXR1cm4gcmVwbGFjZU9wKHJtdywgbGVmdCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBISW5zdHJ1Y3Rpb24gcm13ID0gbmV3IEhSZWFkTW9kaWZ5V3JpdGUuYXNzaWduT3AoCiAgICAgICAgICAgICAgICBzZXR0ZXIuZWxlbWVudCwgYXNzaWduT3AsIHJlY2VpdmVyLCByaWdodCwgb3AuaW5zdHJ1Y3Rpb25UeXBlKTsKICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2VPcChybXcsIGxlZnQpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAob3AudXNlZEJ5Lmxlbmd0aCA9PSAxICYmCiAgICAgICAgICAgIHJpZ2h0IGlzIEhDb25zdGFudCAmJgogICAgICAgICAgICByaWdodC5jb25zdGFudC5pc09uZSkgewogICAgICAgICAgSEluc3RydWN0aW9uIHJtdyA9IG5ldyBIUmVhZE1vZGlmeVdyaXRlLnBvc3RPcCgKICAgICAgICAgICAgICBzZXR0ZXIuZWxlbWVudCwgaW5jcmVtZW50T3AsIHJlY2VpdmVyLCBvcC5pbnN0cnVjdGlvblR5cGUpOwogICAgICAgICAgYmxvY2suYWRkQWZ0ZXIobGVmdCwgcm13KTsKICAgICAgICAgIGJsb2NrLnJlbW92ZShzZXR0ZXIpOwogICAgICAgICAgYmxvY2sucmVtb3ZlKG9wKTsKICAgICAgICAgIGJsb2NrLnJld3JpdGUobGVmdCwgcm13KTsKICAgICAgICAgIGJsb2NrLnJlbW92ZShsZWZ0KTsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbm9NYXRjaGluZ1JlYWQoKTsKICAgIH0KCiAgICBISW5zdHJ1Y3Rpb24gc2ltcGxlKAogICAgICAgIFN0cmluZyBhc3NpZ25PcCwgSEluc3RydWN0aW9uIGxlZnQsIEhJbnN0cnVjdGlvbiByaWdodCkgewogICAgICBpZiAoaXNNYXRjaGluZ1JlYWQobGVmdCkpIHsKICAgICAgICBpZiAobGVmdC51c2VkQnkubGVuZ3RoID09IDEpIHsKICAgICAgICAgIEhJbnN0cnVjdGlvbiBybXcgPSBuZXcgSFJlYWRNb2RpZnlXcml0ZS5hc3NpZ25PcCgKICAgICAgICAgICAgICBzZXR0ZXIuZWxlbWVudCwgYXNzaWduT3AsIHJlY2VpdmVyLCByaWdodCwgb3AuaW5zdHJ1Y3Rpb25UeXBlKTsKICAgICAgICAgIHJldHVybiByZXBsYWNlT3Aocm13LCBsZWZ0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG5vTWF0Y2hpbmdSZWFkKCk7CiAgICB9CgogICAgSEluc3RydWN0aW9uIHNpbXBsZUJpbmFyeShTdHJpbmcgYXNzaWduT3ApIHsKICAgICAgSEludm9rZUJpbmFyeSBiaW5hcnkgPSBvcDsKICAgICAgcmV0dXJuIHNpbXBsZShhc3NpZ25PcCwgYmluYXJ5LmxlZnQsIGJpbmFyeS5yaWdodCk7CiAgICB9CgogICAgSEluc3RydWN0aW9uIGJpdG9wKFN0cmluZyBhc3NpZ25PcCkgewogICAgICAvLyBIQml0QW5kLCBIQml0T3IgZXRjLiBhcmUgbW9yZSBkaWZmaWN1bHQgYmVjYXVzZSBIQml0QW5kKGEueCwgeSkKICAgICAgLy8gc29tZXRpbWVzIG5lZWRzIHRvIGJlIGZvcmNlZCB0byB1bnNpZ25lZDogYS54ID0gKGEueCAmIHkpID4+PiAwLgogICAgICBpZiAob3AuaXNVSW50MzEoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICByZXR1cm4gc2ltcGxlQmluYXJ5KGFzc2lnbk9wKTsKICAgICAgfQogICAgICByZXR1cm4gbm9NYXRjaGluZ1JlYWQoKTsKICAgIH0KCiAgICBpZiAob3AgaXMgSEFkZCkgcmV0dXJuIHBsdXNPck1pbnVzKCcrJywgJysrJyk7CiAgICBpZiAob3AgaXMgSFN1YnRyYWN0KSByZXR1cm4gcGx1c09yTWludXMoJy0nLCAnLS0nKTsKCiAgICBpZiAob3AgaXMgSFN0cmluZ0NvbmNhdCkgcmV0dXJuIHNpbXBsZSgnKycsIG9wLmxlZnQsIG9wLnJpZ2h0KTsKCiAgICBpZiAob3AgaXMgSE11bHRpcGx5KSByZXR1cm4gc2ltcGxlQmluYXJ5KCcqJyk7CiAgICBpZiAob3AgaXMgSERpdmlkZSkgcmV0dXJuIHNpbXBsZUJpbmFyeSgnLycpOwoKICAgIGlmIChvcCBpcyBIQml0QW5kKSByZXR1cm4gYml0b3AoJyYnKTsKICAgIGlmIChvcCBpcyBIQml0T3IpIHJldHVybiBiaXRvcCgnfCcpOwogICAgaWYgKG9wIGlzIEhCaXRYb3IpIHJldHVybiBiaXRvcCgnXicpOwoKICAgIHJldHVybiBub01hdGNoaW5nUmVhZCgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRJZihISWYgbm9kZSkgewogICAgaWYgKCFfb3B0aW9ucy5leHBlcmltZW50VG9Cb29sZWFuKSByZXR1cm4gbm9kZTsKICAgIEhJbnN0cnVjdGlvbiBjb25kaXRpb24gPSBub2RlLmlucHV0cy5zaW5nbGU7CiAgICAvLyBpZiAoeCAhPSBudWxsKSAtLT4gaWYgKHgpCiAgICBpZiAoY29uZGl0aW9uIGlzIEhOb3QpIHsKICAgICAgSEluc3RydWN0aW9uIHRlc3QgPSBjb25kaXRpb24uaW5wdXRzLnNpbmdsZTsKICAgICAgaWYgKHRlc3QgaXMgSElkZW50aXR5KSB7CiAgICAgICAgSEluc3RydWN0aW9uIG9wZXJhbmQxID0gdGVzdC5pbnB1dHNbMF07CiAgICAgICAgSEluc3RydWN0aW9uIG9wZXJhbmQyID0gdGVzdC5pbnB1dHNbMV07CiAgICAgICAgaWYgKG9wZXJhbmQyLmlzTnVsbChfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgICAgICAhX2ludGVyY2VwdGVkKG9wZXJhbmQxLmluc3RydWN0aW9uVHlwZSkpIHsKICAgICAgICAgIGlmICh0ZXN0LnVzZWRCeS5sZW5ndGggPT0gMSAmJiBjb25kaXRpb24udXNlZEJ5Lmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgIG5vZGUuY2hhbmdlVXNlKGNvbmRpdGlvbiwgb3BlcmFuZDEpOwogICAgICAgICAgICBjb25kaXRpb24uYmxvY2sucmVtb3ZlKGNvbmRpdGlvbik7CiAgICAgICAgICAgIHRlc3QuYmxvY2sucmVtb3ZlKHRlc3QpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgLy8gaWYgKHggPT0gbnVsbCkgPT4gaWYgKCF4KQogICAgaWYgKGNvbmRpdGlvbiBpcyBISWRlbnRpdHkgJiYgY29uZGl0aW9uLnVzZWRCeS5sZW5ndGggPT0gMSkgewogICAgICBISW5zdHJ1Y3Rpb24gb3BlcmFuZDEgPSBjb25kaXRpb24uaW5wdXRzWzBdOwogICAgICBISW5zdHJ1Y3Rpb24gb3BlcmFuZDIgPSBjb25kaXRpb24uaW5wdXRzWzFdOwogICAgICBpZiAob3BlcmFuZDIuaXNOdWxsKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgICAhX2ludGVyY2VwdGVkKG9wZXJhbmQxLmluc3RydWN0aW9uVHlwZSkpIHsKICAgICAgICB2YXIgbm90ID0gSE5vdChvcGVyYW5kMSwgX2Fic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUpOwogICAgICAgIG5vZGUuYmxvY2suYWRkQmVmb3JlKG5vZGUsIG5vdCk7CiAgICAgICAgbm9kZS5jaGFuZ2VVc2UoY29uZGl0aW9uLCBub3QpOwogICAgICAgIGNvbmRpdGlvbi5ibG9jay5yZW1vdmUoY29uZGl0aW9uKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5vZGU7CiAgfQp9CgovLy8gUmVtb3ZlIFtIVHlwZUtub3duXSBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgZ3JhcGgsIHRvIG1ha2UgY29kZWdlbgovLy8gYW5hbHlzaXMgZWFzaWVyLgpjbGFzcyBTc2FUeXBlS25vd25SZW1vdmVyIGV4dGVuZHMgSEJhc2VWaXNpdG9yIHdpdGggQ29kZWdlblBoYXNlIHsKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0R3JhcGgoSEdyYXBoIGdyYXBoKSB7CiAgICB2aXNpdERvbWluYXRvclRyZWUoZ3JhcGgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJhc2ljQmxvY2soSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IGJsb2NrLmZpcnN0OwogICAgd2hpbGUgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgSEluc3RydWN0aW9uIG5leHQgPSBpbnN0cnVjdGlvbi5uZXh0OwogICAgICBpbnN0cnVjdGlvbi5hY2NlcHQodGhpcyk7CiAgICAgIGluc3RydWN0aW9uID0gbmV4dDsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlS25vd24oSFR5cGVLbm93biBpbnN0cnVjdGlvbikgewogICAgZm9yIChISW5zdHJ1Y3Rpb24gdXNlciBpbiBpbnN0cnVjdGlvbi51c2VkQnkpIHsKICAgICAgaWYgKHVzZXIgaXMgSFR5cGVDb252ZXJzaW9uKSB7CiAgICAgICAgdXNlci5pbnB1dFR5cGUgPSBpbnN0cnVjdGlvbi5pbnN0cnVjdGlvblR5cGU7CiAgICAgIH0gZWxzZSBpZiAodXNlciBpcyBIUHJpbWl0aXZlQ2hlY2spIHsKICAgICAgICB1c2VyLmlucHV0VHlwZSA9IGluc3RydWN0aW9uLmluc3RydWN0aW9uVHlwZTsKICAgICAgfQogICAgfQogICAgaW5zdHJ1Y3Rpb24uYmxvY2sucmV3cml0ZShpbnN0cnVjdGlvbiwgaW5zdHJ1Y3Rpb24uY2hlY2tlZElucHV0KTsKICAgIGluc3RydWN0aW9uLmJsb2NrLnJlbW92ZShpbnN0cnVjdGlvbik7CiAgfQp9CgovLy8gUmVtb3ZlIFtIUHJpbWl0aXZlQ2hlY2tdIGluc3RydWN0aW9ucyBmcm9tIHRoZSBncmFwaCBpbiAnLS10cnVzdC1wcmltaXRpdmVzJwovLy8gbW9kZS4KY2xhc3MgU3NhVHJ1c3RlZENoZWNrUmVtb3ZlciBleHRlbmRzIEhCYXNlVmlzaXRvciB3aXRoIENvZGVnZW5QaGFzZSB7CiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwoKICBTc2FUcnVzdGVkQ2hlY2tSZW1vdmVyKHRoaXMuX29wdGlvbnMpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0R3JhcGgoSEdyYXBoIGdyYXBoKSB7CiAgICBpZiAoIV9vcHRpb25zLnRydXN0UHJpbWl0aXZlcykgcmV0dXJuOwogICAgdmlzaXREb21pbmF0b3JUcmVlKGdyYXBoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCYXNpY0Jsb2NrKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBibG9jay5maXJzdDsKICAgIHdoaWxlIChpbnN0cnVjdGlvbiAhPSBudWxsKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBuZXh0ID0gaW5zdHJ1Y3Rpb24ubmV4dDsKICAgICAgaW5zdHJ1Y3Rpb24uYWNjZXB0KHRoaXMpOwogICAgICBpbnN0cnVjdGlvbiA9IG5leHQ7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UHJpbWl0aXZlQ2hlY2soSFByaW1pdGl2ZUNoZWNrIGluc3RydWN0aW9uKSB7CiAgICBpbnN0cnVjdGlvbi5ibG9jay5yZXdyaXRlKGluc3RydWN0aW9uLCBpbnN0cnVjdGlvbi5jaGVja2VkSW5wdXQpOwogICAgaW5zdHJ1Y3Rpb24uYmxvY2sucmVtb3ZlKGluc3RydWN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCb29sQ29udmVyc2lvbihIQm9vbENvbnZlcnNpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGluc3RydWN0aW9uLmJsb2NrLnJld3JpdGUoaW5zdHJ1Y3Rpb24sIGluc3RydWN0aW9uLmNoZWNrZWRJbnB1dCk7CiAgICBpbnN0cnVjdGlvbi5ibG9jay5yZW1vdmUoaW5zdHJ1Y3Rpb24pOwogIH0KfQoKLy8vIFVzZSB0aGUgcmVzdWx0IG9mIHN0YXRpYyBhbmQgZmllbGQgYXNzaWdubWVudHMgd2hlcmUgaXQgaXMgcHJvZml0YWJsZSB0byB1c2UKLy8vIHRoZSByZXN1bHQgb2YgdGhlIGFzc2lnbm1lbnQgaW5zdGVhZCBvZiB0aGUgdmFsdWUuCi8vLwovLy8gICAgIGEueCA9IHY7Ci8vLyAgICAgYi55ID0gdjsKLy8vIC0tPgovLy8gICAgIGIueSA9IGEueCA9IHY7CmNsYXNzIFNzYUFzc2lnbm1lbnRDaGFpbmluZyBleHRlbmRzIEhCYXNlVmlzaXRvciB3aXRoIENvZGVnZW5QaGFzZSB7CiAgZmluYWwgSkNsb3NlZFdvcmxkIF9jbG9zZWRXb3JsZDsKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CiAgLy9IR3JhcGggZ3JhcGg7CgogIFNzYUFzc2lnbm1lbnRDaGFpbmluZyh0aGlzLl9vcHRpb25zLCB0aGlzLl9jbG9zZWRXb3JsZCk7CgogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IF9hYnN0cmFjdFZhbHVlRG9tYWluID0+CiAgICAgIF9jbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0R3JhcGgoSEdyYXBoIGdyYXBoKSB7CiAgICAvL3RoaXMuZ3JhcGggPSBncmFwaDsKICAgIHZpc2l0RG9taW5hdG9yVHJlZShncmFwaCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QmFzaWNCbG9jayhIQmFzaWNCbG9jayBibG9jaykgewogICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gYmxvY2suZmlyc3Q7CiAgICB3aGlsZSAoaW5zdHJ1Y3Rpb24gIT0gbnVsbCkgewogICAgICBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uLmFjY2VwdCh0aGlzKTsKICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIHRoZSBuZXh0IGluc3RydWN0aW9uLgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEluc3RydWN0aW9uKEhJbnN0cnVjdGlvbiBub2RlKSB7CiAgICByZXR1cm4gbm9kZS5uZXh0OwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0RmllbGRTZXQoSEZpZWxkU2V0IHNldHRlcikgewogICAgcmV0dXJuIHRyeUNoYWluQXNzaWdubWVudChzZXR0ZXIsIHNldHRlci52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRTdGF0aWNTdG9yZShIU3RhdGljU3RvcmUgc3RvcmUpIHsKICAgIHJldHVybiB0cnlDaGFpbkFzc2lnbm1lbnQoc3RvcmUsIHN0b3JlLmlucHV0cy5zaW5nbGUpOwogIH0KCiAgSEluc3RydWN0aW9uIHRyeUNoYWluQXNzaWdubWVudChISW5zdHJ1Y3Rpb24gc2V0dGVyLCBISW5zdHJ1Y3Rpb24gdmFsdWUpIHsKICAgIC8vIFRyeSB0byB1c2UgcmVzdWx0IG9mIGZpZWxkIG9yIHN0YXRpYyBhc3NpZ25tZW50CiAgICAvLwogICAgLy8gICAgIHQxID0gdjsgIHguZiA9IHQxOyAgLi4uIHQxIC4uLgogICAgLy8gLS0+CiAgICAvLyAgICAgdDEgPSB4LmYgPSB2OyAgLi4uIHQxIC4uLgogICAgLy8KCiAgICAvLyBTaW5nbGUgdXNlIGlzIHRoaXMgc2V0dGVyIHNvIHRoZXJlIHdpbGwgYmUgbm8gb3RoZXIgdXNlcyB0byBjaGFpbiB0by4KICAgIGlmICh2YWx1ZS51c2VkQnkubGVuZ3RoIDw9IDEpIHJldHVybiBzZXR0ZXIubmV4dDsKCiAgICAvLyBJdCBpcyBhbHdheXMgd29ydGh3aGlsZSBjaGFpbmluZyBpbnRvIGFub3RoZXIgc2V0dGVyLCBzaW5jZSBpdCByZWR1Y2VzCiAgICAvLyB0aGUgbnVtYmVyIG9mIHJlZmVyZW5jZXMgdG8gW3ZhbHVlXS4KICAgIEhJbnN0cnVjdGlvbiBjaGFpbiA9IHNldHRlcjsKICAgIHNldHRlci5pbnN0cnVjdGlvblR5cGUgPSB2YWx1ZS5pbnN0cnVjdGlvblR5cGU7CiAgICBmb3IgKEhJbnN0cnVjdGlvbiBjdXJyZW50ID0gc2V0dGVyLm5leHQ7OykgewogICAgICBpZiAoY3VycmVudCBpcyBIRmllbGRTZXQpIHsKICAgICAgICBIRmllbGRTZXQgbmV4dFNldHRlciA9IGN1cnJlbnQ7CiAgICAgICAgaWYgKG5leHRTZXR0ZXIudmFsdWUgPT0gdmFsdWUgJiYgbmV4dFNldHRlci5yZWNlaXZlciAhPSB2YWx1ZSkgewogICAgICAgICAgbmV4dFNldHRlci5jaGFuZ2VVc2UodmFsdWUsIGNoYWluKTsKICAgICAgICAgIG5leHRTZXR0ZXIuaW5zdHJ1Y3Rpb25UeXBlID0gdmFsdWUuaW5zdHJ1Y3Rpb25UeXBlOwogICAgICAgICAgY2hhaW4gPSBuZXh0U2V0dGVyOwogICAgICAgICAgY3VycmVudCA9IG5leHRTZXR0ZXIubmV4dDsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChjdXJyZW50IGlzIEhTdGF0aWNTdG9yZSkgewogICAgICAgIEhTdGF0aWNTdG9yZSBuZXh0U3RvcmUgPSBjdXJyZW50OwogICAgICAgIGlmIChuZXh0U3RvcmUudmFsdWUgPT0gdmFsdWUpIHsKICAgICAgICAgIG5leHRTdG9yZS5jaGFuZ2VVc2UodmFsdWUsIGNoYWluKTsKICAgICAgICAgIG5leHRTdG9yZS5pbnN0cnVjdGlvblR5cGUgPSB2YWx1ZS5pbnN0cnVjdGlvblR5cGU7CiAgICAgICAgICBjaGFpbiA9IG5leHRTdG9yZTsKICAgICAgICAgIGN1cnJlbnQgPSBuZXh0U3RvcmUubmV4dDsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChjdXJyZW50IGlzIEhSZXR1cm4pIHsKICAgICAgICBpZiAoY3VycmVudC5pbnB1dHMuc2luZ2xlID09IHZhbHVlKSB7CiAgICAgICAgICBjdXJyZW50LmNoYW5nZVVzZSh2YWx1ZSwgY2hhaW4pOwogICAgICAgICAgcmV0dXJuIGN1cnJlbnQubmV4dDsKICAgICAgICB9CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICB9CgogICAgZmluYWwgSEluc3RydWN0aW9uIG5leHQgPSBjaGFpbi5uZXh0OwoKICAgIGlmICh2YWx1ZS51c2VkQnkubGVuZ3RoIDw9IDEpIHJldHVybiBuZXh0OyAvLyBzZXR0ZXIgaXMgb25seSByZW1haW5pbmcgdXNlLgoKICAgIC8vIENoYWluIHRvIG90aGVyIHBsYWNlcy4KICAgIHZhciB1c2VzID0gRG9taW5hdGVkVXNlcy5vZih2YWx1ZSwgY2hhaW4sIGV4Y2x1ZGVEb21pbmF0b3I6IHRydWUpOwoKICAgIGlmICh1c2VzLmlzRW1wdHkpIHJldHVybiBuZXh0OwoKICAgIGJvb2wgc2ltcGxlU291cmNlID0gdmFsdWUgaXMgSENvbnN0YW50IHx8IHZhbHVlIGlzIEhQYXJhbWV0ZXJWYWx1ZTsKCiAgICBpZiAodXNlcy5pc1NpbmdsZXRvbikgewogICAgICB2YXIgdXNlID0gdXNlcy5zaW5nbGU7CiAgICAgIGlmICh1c2UgaXMgSFBoaSkgewogICAgICAgIC8vIEZpbHRlciBvdXQgYmFjay1lZGdlcyAtIHRoYXQgY2F1c2VzIHByb2JsZW1zIGZvciB2YXJpYWJsZQogICAgICAgIC8vIGFzc2lnbm1lbnQuCiAgICAgICAgLy8gVE9ETyhzcmEpOiBCZXR0ZXIgYW5hbHlzaXMgdG8gcGVybWl0IHBoaXMgdGhhdCBhcmUgcGFydCBvZiBhCiAgICAgICAgLy8gZm9yd2FyZHMtb25seSB0cmVlLgogICAgICAgIGlmICh1c2UuYmxvY2suaWQgPCBjaGFpbi5ibG9jay5pZCkgcmV0dXJuIG5leHQ7CiAgICAgICAgaWYgKHVzZS51c2VkQnkuYW55KChub2RlKSA9PiBub2RlIGlzIEhQaGkpKSByZXR1cm4gbmV4dDsKCiAgICAgICAgLy8gQSBmb3J3YXJkIHBoaSBvZnRlbiBoYXMgYSBuZXcgbmFtZS4gV2Ugd2FudCB0byBhdm9pZCBbdmFsdWVdIGhhdmluZyBhCiAgICAgICAgLy8gbmFtZSBhdCB0aGUgc2FtZSB0aW1lLCBzbyBjaGFpbiBpbnRvIHRoZSBwaGkgb25seSBpZiBbdmFsdWVdICgxKSB3aWxsCiAgICAgICAgLy8gbmV2ZXIgaGF2ZSBhIG5hbWUgKGxpa2UgYSBjb25zdGFudCkgKDIpIHVuYXZvaWRhYmx5IGhhcyBhIG5hbWUKICAgICAgICAvLyAoZS5nLiBhIHBhcmFtZXRlcikgb3IgKDMpIGNoYWluaW5nIHdpbGwgcmVzdWx0IGluIGEgc2luZ2xlIHVzZSB0aGF0CiAgICAgICAgLy8gdmFyaWFibGUgYWxsb2NhdG9yIGNhbiB0cnkgdG8gbmFtZSBjb25zaXN0ZW50bHkgd2l0aCB0aGUgb3RoZXIgcGhpCiAgICAgICAgLy8gaW5wdXRzLgogICAgICAgIGlmIChzaW1wbGVTb3VyY2UgfHwgdmFsdWUudXNlZEJ5Lmxlbmd0aCA8PSAyKSB7CiAgICAgICAgICBpZiAodmFsdWUuaXNQdXJlKF9hYnN0cmFjdFZhbHVlRG9tYWluKSB8fAogICAgICAgICAgICAgIHNldHRlci5wcmV2aW91cyA9PSB2YWx1ZSB8fAogICAgICAgICAgICAgIC8vIHRoZSBmb2xsb3dpbmcgdGVzdHMgZm9yIGltbWVkaWF0ZWx5IHByZXZpb3VzIHBoaS4KICAgICAgICAgICAgICAoc2V0dGVyLnByZXZpb3VzID09IG51bGwgJiYgdmFsdWUuYmxvY2sgPT0gc2V0dGVyLmJsb2NrKSkgewogICAgICAgICAgICB1c2VzLnJlcGxhY2VXaXRoKGNoYWluKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5leHQ7CiAgICAgIH0KICAgICAgLy8gVE9ETyhzcmEpOiBDaGFpbnMgd2l0aCBvbmUgcmVtYWluaW5nIHBvdGVudGlhbCB1c2UgaGF2ZSB0aGUgcG90ZW50aWFsCiAgICAgIC8vIHRvIGdlbmVyYXRlIGh1Z2UgZXhwcmVzc2lvbiBjb250YWluaW5nIG1hbnkgbmVzdGVkIGFzc2lnbm1lbnRzLiBUaGlzCiAgICAgIC8vIHdpbGwgYmUgc21hbGxlciBidXQgbmVhcmx5IGltcG9zc2libGUgdG8gcmVhZC4gQXJlIHRoZXJlIGludGVyaW9yCiAgICAgIC8vIHBvc2l0aW9ucyB0aGF0IHdlIHNob3VsZCBjaGFpbiBpbnRvIGJlY2F1c2UgdGhleSBhcmUgbm90IHRvbyBkaWZmaWN1bHQKICAgICAgLy8gdG8gcmVhZD8KICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CgogICAgaWYgKHNpbXBsZVNvdXJjZSkgcmV0dXJuIG5leHQ7CgogICAgLy8gSWYgdGhlcmUgYXJlIG1hbnkgcmVtYWluaW5nIHVzZXMsIGJ1dCB0aGV5IGFyZSBhbGwgZG9taW5hdGVkIGJ5IFtjaGFpbl0sCiAgICAvLyB0aGUgdmFyaWFibGUgYWxsb2NhdG9yIHdpbGwgdHJ5IHRvIGdpdmUgdGhlbSBhbGwgdGhlIHNhbWUgbmFtZS4KICAgIGlmICh1c2VzLmxlbmd0aCA+PSAyICYmCiAgICAgICAgdmFsdWUudXNlZEJ5Lmxlbmd0aCAtIHVzZXMubGVuZ3RoIDw9IDEgJiYKICAgICAgICB2YWx1ZSA9PSB2YWx1ZS5ub25DaGVjaygpKSB7CiAgICAgIC8vIElmIFt2YWx1ZV0gaXMgYSBwaGksIGl0IG1pZ2h0IGhhdmUgYSBuYW1lLiBFeGNlcHRpb25zIGFyZSBwaGlzIHRoYXQgY2FuCiAgICAgIC8vIGJlIGNvbXBpbGVkIGludG8gZXhwcmVzc2lvbnMgbGlrZSBgYT9iOmNgIGFuZCBgYSYmYmAuIFdlIGNhbid0IHRlbGwKICAgICAgLy8gaGVyZSBpZiB0aGUgcGhpIGlzIGFuIGV4cHJlc3Npb24sIHdoaWNoIHdlIGNvdWxkIGNoYWluLCBvciBhbgogICAgICAvLyBpZi10aGVuLWVsc2Ugd2l0aCBhc3NpZ25tZW50cyB0byBhIHZhcmlhYmxlLiBJZiB3ZSB0cnkgdG8gY2hhaW4gYW4KICAgICAgLy8gaWYtdGhlbi1lbHNlIHBoaSB3ZSB3aWxsIGVuZCB1cCBnZW5lcmF0aW5nIGNvZGUgbGlrZQogICAgICAvLwogICAgICAvLyAgICAgdDIgPSB0aGlzLnggPSB0MTsgIC8vIHQxIGlzIHRoZSBwaGksIHQyIGlzIHRoZSBjaGFpbmVkIG5hbWUKICAgICAgLy8KICAgICAgaWYgKHZhbHVlIGlzIEhQaGkpIHJldHVybiBuZXh0OwoKICAgICAgLy8gV2UgbmVlZCBbdmFsdWVdIHRvIGJlIGdlbmVyYXRlLWF0LXVzZSBpbiB0aGUgc2V0dGVyIHRvIGF2b2lkIGl0IGhhdmluZwogICAgICAvLyBhIG5hbWUuIEFzIGEgcXVpY2sgY2hlY2sgZm9yIGdlbmVyYXRlLWF0LXVzZSwgYWNjZXB0IHB1cmUgYW5kCiAgICAgIC8vIGltbWVkaWF0ZWx5IHByZWNlZGluZyBpbnN0cnVjdGlvbnMuCiAgICAgIGlmICh2YWx1ZS5pc1B1cmUoX2Fic3RyYWN0VmFsdWVEb21haW4pIHx8IHNldHRlci5wcmV2aW91cyA9PSB2YWx1ZSkgewogICAgICAgIC8vIFRPRE8oc3JhKTogV2UgY2FuIHRvbGVyYXRlIGEgZmV3IG5vbi10aHJvd2luZyBsb2FkcyBiZXR3ZWVuIHNldHRlcgogICAgICAgIC8vIGFuZCB2YWx1ZS4KICAgICAgICB1c2VzLnJlcGxhY2VXaXRoKGNoYWluKTsKICAgICAgICBjaGFpbi5zb3VyY2VFbGVtZW50ID8/PSB2YWx1ZS5zb3VyY2VFbGVtZW50OwogICAgICB9CiAgICAgIHJldHVybiBuZXh0OwogICAgfQoKICAgIHJldHVybiBuZXh0OwogIH0KfQoKLy8vIEluc3RlYWQgb2YgZW1pdHRpbmcgZWFjaCBTU0EgaW5zdHJ1Y3Rpb24gd2l0aCBhIHRlbXBvcmFyeSB2YXJpYWJsZQovLy8gbWFyayBpbnN0cnVjdGlvbnMgdGhhdCBjYW4gYmUgZW1pdHRlZCBhdCB0aGVpciB1c2Utc2l0ZS4KLy8vIEZvciBleGFtcGxlLCBpbjoKLy8vICAgdDAgPSA0OwovLy8gICB0MSA9IDM7Ci8vLyAgIHQyID0gYWRkKHQwLCB0MSk7Ci8vLyB0MCBhbmQgdDEgd291bGQgYmUgbWFya2VkIGFuZCB0aGUgcmVzdWx0aW5nIGNvZGUgd291bGQgdGhlbiBiZToKLy8vICAgdDIgPSBhZGQoNCwgMyk7CmNsYXNzIFNzYUluc3RydWN0aW9uTWVyZ2VyIGV4dGVuZHMgSEJhc2VWaXNpdG9yIHdpdGggQ29kZWdlblBoYXNlIHsKICBmaW5hbCBBYnN0cmFjdFZhbHVlRG9tYWluIF9hYnN0cmFjdFZhbHVlRG9tYWluOwoKICAvLy8gTGlzdCBvZiBbSEluc3RydWN0aW9uXSB0aGF0IHRoZSBpbnN0cnVjdGlvbiBtZXJnZXIgZXhwZWN0cyBpbgogIC8vLyBvcmRlciB3aGVuIHZpc2l0aW5nIHRoZSBpbnB1dHMgb2YgYW4gaW5zdHJ1Y3Rpb24uCiAgTGlzdDxISW5zdHJ1Y3Rpb24+IGV4cGVjdGVkSW5wdXRzOwoKICAvLy8gU2V0IG9mIHB1cmUgW0hJbnN0cnVjdGlvbl0gdGhhdCB0aGUgaW5zdHJ1Y3Rpb24gbWVyZ2VyIGV4cGVjdHMgdG8KICAvLy8gZmluZC4gVGhlIG9yZGVyIG9mIHB1cmUgaW5zdHJ1Y3Rpb25zIGRvIG5vdCBtYXR0ZXIsIGFzIHRoZXkgd2lsbAogIC8vLyBub3QgYmUgYWZmZWN0ZWQgYnkgc2lkZSBlZmZlY3RzLgogIFNldDxISW5zdHJ1Y3Rpb24+IHB1cmVJbnB1dHM7CiAgU2V0PEhJbnN0cnVjdGlvbj4gZ2VuZXJhdGVBdFVzZVNpdGU7CgogIHZvaWQgbWFya0FzR2VuZXJhdGVBdFVzZVNpdGUoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBhc3NlcnQoIWluc3RydWN0aW9uLmlzSnNTdGF0ZW1lbnQoKSk7CiAgICBnZW5lcmF0ZUF0VXNlU2l0ZS5hZGQoaW5zdHJ1Y3Rpb24pOwogIH0KCiAgU3NhSW5zdHJ1Y3Rpb25NZXJnZXIodGhpcy5fYWJzdHJhY3RWYWx1ZURvbWFpbiwgdGhpcy5nZW5lcmF0ZUF0VXNlU2l0ZSk7CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRHcmFwaChIR3JhcGggZ3JhcGgpIHsKICAgIHZpc2l0RG9taW5hdG9yVHJlZShncmFwaCk7CiAgfQoKICB2b2lkIGFuYWx5emVJbnB1dHMoSEluc3RydWN0aW9uIHVzZXIsIGludCBzdGFydCkgewogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cyA9IHVzZXIuaW5wdXRzOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBpbnB1dCA9IGlucHV0c1tpXTsKICAgICAgaWYgKCFnZW5lcmF0ZUF0VXNlU2l0ZS5jb250YWlucyhpbnB1dCkgJiYKICAgICAgICAgICFpbnB1dC5pc0NvZGVNb3Rpb25JbnZhcmlhbnQoKSAmJgogICAgICAgICAgaW5wdXQudXNlZEJ5Lmxlbmd0aCA9PSAxICYmCiAgICAgICAgICBpbnB1dCBpcyEgSFBoaSAmJgogICAgICAgICAgaW5wdXQgaXMhIEhMb2NhbFZhbHVlICYmCiAgICAgICAgICAhaW5wdXQuaXNKc1N0YXRlbWVudCgpKSB7CiAgICAgICAgaWYgKGlzRWZmZWN0aXZlbHlQdXJlKGlucHV0KSkgewogICAgICAgICAgLy8gT25seSBjb25zaWRlciBhIHB1cmUgaW5wdXQgaWYgaXQgaXMgaW4gdGhlIHNhbWUgbG9vcC4KICAgICAgICAgIC8vIE90aGVyd2lzZSwgd2UgbWlnaHQgbW92ZSBHVk4nZWQgaW5zdHJ1Y3Rpb24gYmFjayBpbnRvIHRoZQogICAgICAgICAgLy8gbG9vcC4KICAgICAgICAgIGlmICh1c2VyLmhhc1NhbWVMb29wSGVhZGVyQXMoaW5wdXQpKSB7CiAgICAgICAgICAgIC8vIE1vdmUgaXQgY2xvc2VyIHRvIFt1c2VyXSwgc28gdGhhdCBpbnN0cnVjdGlvbnMgaW4KICAgICAgICAgICAgLy8gYmV0d2VlbiBkbyBub3QgcHJldmVudCBtYWtpbmcgaXQgZ2VuZXJhdGUgYXQgdXNlIHNpdGUuCiAgICAgICAgICAgIGlucHV0Lm1vdmVCZWZvcmUodXNlcik7CiAgICAgICAgICAgIHB1cmVJbnB1dHMuYWRkKGlucHV0KTsKICAgICAgICAgICAgLy8gUHJldmlvdXMgY29tcHV0YXRpb25zIGRvbmUgb24gW2lucHV0XSBhcmUgbm93IGludmFsaWQKICAgICAgICAgICAgLy8gYmVjYXVzZSB3ZSBtb3ZlZCBbaW5wdXRdIHRvIGFub3RoZXIgcGxhY2UuIFNvIGFsbAogICAgICAgICAgICAvLyBub24gY29kZSBtb3Rpb24gaW52YXJpYW50IGluc3RydWN0aW9ucyBuZWVkCiAgICAgICAgICAgIC8vIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgW2dlbmVyYXRlQXRVc2VTaXRlXSBzZXQuCiAgICAgICAgICAgIGlucHV0LmlucHV0cy5mb3JFYWNoKChpbnN0cnVjdGlvbikgewogICAgICAgICAgICAgIGlmICghaW5zdHJ1Y3Rpb24uaXNDb2RlTW90aW9uSW52YXJpYW50KCkpIHsKICAgICAgICAgICAgICAgIGdlbmVyYXRlQXRVc2VTaXRlLnJlbW92ZShpbnN0cnVjdGlvbik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgLy8gVmlzaXQgdGhlIHB1cmUgaW5wdXQgbm93IHNvIHRoYXQgdGhlIGV4cGVjdGVkIGlucHV0cwogICAgICAgICAgICAvLyBhcmUgYWZ0ZXIgdGhlIGV4cGVjdGVkIGlucHV0cyBvZiBbdXNlcl0uCiAgICAgICAgICAgIGlucHV0LmFjY2VwdCh0aGlzKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgZXhwZWN0ZWRJbnB1dHMuYWRkKGlucHV0KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIC8vIFNvbWUgbm9uLXB1cmUgaW5zdHJ1Y3Rpb25zIG1heSBiZSB0cmVhdGVkIGFzIHB1cmUuIEhMb2NhbEdldCBkZXBlbmRzIG9uCiAgLy8gYXNzaWdubWVudHMsIGJ1dCB3ZSBjYW4gaWdub3JlIHRoZSBpbml0aWFsaXppbmcgYXNzaWdubWVudCBzaW5jZSBpdCB3aWxsIGJ5CiAgLy8gY29uc3RydWN0aW9uIGFsd2F5cyBwcmVjZWRlIGEgdXNlLgogIGJvb2wgaXNFZmZlY3RpdmVseVB1cmUoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSExvY2FsR2V0KSByZXR1cm4gIWlzQXNzaWduZWRMb2NhbChpbnN0cnVjdGlvbi5sb2NhbCk7CiAgICByZXR1cm4gaW5zdHJ1Y3Rpb24uaXNQdXJlKF9hYnN0cmFjdFZhbHVlRG9tYWluKTsKICB9CgogIGJvb2wgaXNBc3NpZ25lZExvY2FsKEhMb2NhbFZhbHVlIGxvY2FsKSB7CiAgICAvLyBbSExvY2FsVmFsdWVdcyBoYXZlIGFuIGluaXRpYWxpemluZyBhc3NpZ25tZW50IHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8KICAgIC8vIHByZWNlZGUgdGhlIHVzZSwgZXhjZXB0IGZvciBbSFBhcmFtZXRlclZhbHVlXXMgd2hpY2ggYXJlICdhc3NpZ25lZCcgYXQKICAgIC8vIGVudHJ5LgogICAgaW50IGluaXRpYWxpemluZ0Fzc2lnbm1lbnRDb3VudCA9IChsb2NhbCBpcyBIUGFyYW1ldGVyVmFsdWUpID8gMCA6IDE7CiAgICByZXR1cm4gbG9jYWwudXNlZEJ5CiAgICAgICAgLndoZXJlKCh1c2VyKSA9PiB1c2VyIGlzIEhMb2NhbFNldCkKICAgICAgICAuc2tpcChpbml0aWFsaXppbmdBc3NpZ25tZW50Q291bnQpCiAgICAgICAgLmlzTm90RW1wdHk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW5zdHJ1Y3Rpb24oSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICAvLyBBIGNvZGUgbW90aW9uIGludmFyaWFudCBpbnN0cnVjdGlvbiBpcyBkZWFsdCBiZWZvcmUgdmlzaXRpbmcgaXQuCiAgICBhc3NlcnQoIWluc3RydWN0aW9uLmlzQ29kZU1vdGlvbkludmFyaWFudCgpKTsKICAgIGFuYWx5emVJbnB1dHMoaW5zdHJ1Y3Rpb24sIDApOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludm9rZVN1cGVyKEhJbnZva2VTdXBlciBpbnN0cnVjdGlvbikgewogICAgTWVtYmVyRW50aXR5IHN1cGVyTWV0aG9kID0gaW5zdHJ1Y3Rpb24uZWxlbWVudDsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gaW5zdHJ1Y3Rpb24uc2VsZWN0b3I7CiAgICAvLyBJZiBhbGlhc2VkIHN1cGVyIG1lbWJlcnMgY2Fubm90IGJlIHVzZWQsIHdlIHdpbGwgZ2VuZXJhdGUgY29kZSBsaWtlCiAgICAvLwogICAgLy8gICAgIEMucHJvdG90eXBlLm1ldGhvZC5jYWxsKGluc3RhbmNlKQogICAgLy8KICAgIC8vIHdoZXJlIGluc3RhbmNlIGlzIHRoZSBbdGhpc10gb2JqZWN0IGZvciB0aGUgbWV0aG9kLiBJbiBzdWNoIGEgY2FzZSwgdGhlCiAgICAvLyBnZXQgb2YgcHJvdG90eXBlIG1pZ2h0IGJlIGV2YWx1YXRlZCBiZWZvcmUgaW5zdGFuY2UgaXMgY3JlYXRlZCBpZiB3ZQogICAgLy8gZ2VuZXJhdGUgaW5zdGFuY2UgYXQgdXNlIHNpdGUsIHdoaWNoIGluIHR1cm4gbWlnaHQgdXBkYXRlIHRoZSBwcm90b3R5cGUKICAgIC8vIGFmdGVyIGZpcnN0IGFjY2VzcyBpZiB3ZSB1c2UgbGF6eSBpbml0aWFsaXphdGlvbi4KICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgdGhlcmVmb3JlIGRvbid0IGFsbG93IHRoZSByZWNlaXZlciAodGhlIGZpcnN0IGFyZ3VtZW50KQogICAgLy8gdG8gYmUgZ2VuZXJhdGVkIGF0IHVzZSBzaXRlLCBhbmQgb25seSBhbmFseXplIGFsbCBvdGhlciBhcmd1bWVudHMuCiAgICBpZiAoIWNhblVzZUFsaWFzZWRTdXBlck1lbWJlcihzdXBlck1ldGhvZCwgc2VsZWN0b3IpKSB7CiAgICAgIGFuYWx5emVJbnB1dHMoaW5zdHJ1Y3Rpb24sIDEpOwogICAgfSBlbHNlIHsKICAgICAgc3VwZXIudmlzaXRJbnZva2VTdXBlcihpbnN0cnVjdGlvbik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SXMoSElzIGluc3RydWN0aW9uKSB7CiAgICAvLyBJbiB0aGUgZ2VuZXJhbCBjYXNlIHRoZSBpbnB1dCBtaWdodCBiZSB1c2VkIG11bHRwbGUgbXVsdGlwbGUgdGltZXMsIHNvIGl0CiAgICAvLyBtdXN0IG5vdCBiZSBzZXQgZ2VuZXJhdGUgYXQgdXNlIHNpdGUuCgogICAgLy8gSWYgdGhlIGNvZGUgd2lsbCBnZW5lcmF0ZSAnaW5zdGFuY2VvZicgdGhlbiB3ZSBjYW4gZ2VuZXJhdGUgYXQgdXNlIHNpdGUuCiAgICBpZiAoaW5zdHJ1Y3Rpb24udXNlSW5zdGFuY2VPZikgewogICAgICBhbmFseXplSW5wdXRzKGluc3RydWN0aW9uLCAwKTsKICAgIH0KCiAgICAvLyBDb21wb3VuZCBhbmQgdmFyaWFibGUgY2hlY2tzIHVzZSBhIHNlcGFyYXRlIGluc3RydWN0aW9uIHRvIGNvbXB1dGUgdGhlCiAgICAvLyByZXN1bHQuCiAgICBpZiAoaW5zdHJ1Y3Rpb24uaXNDb21wb3VuZENoZWNrIHx8IGluc3RydWN0aW9uLmlzVmFyaWFibGVDaGVjaykgewogICAgICBhbmFseXplSW5wdXRzKGluc3RydWN0aW9uLCAwKTsKICAgIH0KICB9CgogIC8vIEEgYm91bmRzIGNoZWNrIG1ldGhvZCBtdXN0IG5vdCBoYXZlIGl0cyBmaXJzdCBpbnB1dCBnZW5lcmF0ZWQgYXQgdXNlIHNpdGUsCiAgLy8gYmVjYXVzZSBpdCdzIHVzaW5nIGl0IHR3aWNlLgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCb3VuZHNDaGVjayhIQm91bmRzQ2hlY2sgaW5zdHJ1Y3Rpb24pIHsKICAgIGFuYWx5emVJbnB1dHMoaW5zdHJ1Y3Rpb24sIDEpOwogIH0KCiAgLy8gQW4gaWRlbnRpdHkgb3BlcmF0aW9uIG11c3Qgb25seSBoYXZlIGl0cyBpbnB1dHMgZ2VuZXJhdGVkIGF0IHVzZSBzaXRlIGlmCiAgLy8gZG9lcyBub3QgcmVxdWlyZSBhbiBleHByZXNzaW9uIHdpdGggbXVsdGlwbGUgdXNlcyAoYmVjYXVzZSBvZiBudWxsIC8KICAvLyB1bmRlZmluZWQpLgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJZGVudGl0eShISWRlbnRpdHkgaW5zdHJ1Y3Rpb24pIHsKICAgIGlmIChpbnN0cnVjdGlvbi5zaW5nbGVDb21wYXJpc29uT3AgIT0gbnVsbCkgewogICAgICBzdXBlci52aXNpdElkZW50aXR5KGluc3RydWN0aW9uKTsKICAgIH0KICAgIC8vIERvIG5vdGhpbmcuCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZUNvbnZlcnNpb24oSFR5cGVDb252ZXJzaW9uIGluc3RydWN0aW9uKSB7CiAgICAvLyBUeXBlIGNoZWNrcyBhbmQgY2FzdCBjaGVja3MgY29tcGlsZSB0byBjb2RlIHRoYXQgb25seSB1c2UgdGhlaXIgaW5wdXQKICAgIC8vIG9uY2UsIHNvIHdlIGNhbiBzYWZlbHkgdmlzaXQgdGhlbSBhbmQgdHJ5IHRvIG1lcmdlIHRoZSBpbnB1dC4KICAgIHZpc2l0SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEFzQ2hlY2soSEFzQ2hlY2sgaW5zdHJ1Y3Rpb24pIHsKICAgIC8vIFR5cGUgY2hlY2tzIGFuZCBjYXN0IGNoZWNrcyBjb21waWxlIHRvIGNvZGUgdGhhdCBvbmx5IHVzZSB0aGVpciBpbnB1dAogICAgLy8gb25jZSwgc28gd2UgY2FuIHNhZmVseSB2aXNpdCB0aGVtIGFuZCB0cnkgdG8gbWVyZ2UgdGhlIGlucHV0LgogICAgdmlzaXRJbnN0cnVjdGlvbihpbnN0cnVjdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QXNDaGVja1NpbXBsZShIQXNDaGVja1NpbXBsZSBpbnN0cnVjdGlvbikgewogICAgLy8gVHlwZSBjaGVja3MgYW5kIGNhc3QgY2hlY2tzIGNvbXBpbGUgdG8gY29kZSB0aGF0IG9ubHkgdXNlIHRoZWlyIGlucHV0CiAgICAvLyBvbmNlLCBzbyB3ZSBjYW4gc2FmZWx5IHZpc2l0IHRoZW0gYW5kIHRyeSB0byBtZXJnZSB0aGUgaW5wdXQuCiAgICB2aXNpdEluc3RydWN0aW9uKGluc3RydWN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlRXZhbChIVHlwZUV2YWwgaW5zdHJ1Y3Rpb24pIHsKICAgIC8vIFR5cGUgZXhwcmVzc2lvbnMgY29tcGlsZSB0byBjb2RlIHRoYXQgb25seSB1c2UgdGhlaXIgaW5wdXQgb25jZSwgc28gd2UKICAgIC8vIGNhbiBzYWZlbHkgdmlzaXQgdGhlbSBhbmQgdHJ5IHRvIG1lcmdlIHRoZSBpbnB1dC4KICAgIHZpc2l0SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFByaW1pdGl2ZUNoZWNrKEhQcmltaXRpdmVDaGVjayBpbnN0cnVjdGlvbikge30KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVLbm93bihIVHlwZUtub3duIGluc3RydWN0aW9uKSB7CiAgICAvLyBbSFR5cGVLbm93bl0gaW5zdHJ1Y3Rpb25zIGFyZSByZW1vdmVkIGJlZm9yZSBjb2RlIGdlbmVyYXRpb24uCiAgICBhc3NlcnQoZmFsc2UpOwogIH0KCiAgdm9pZCB0cnlHZW5lcmF0ZUF0VXNlU2l0ZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGlmIChpbnN0cnVjdGlvbi5pc0NvbnRyb2xGbG93KCkpIHJldHVybjsKICAgIG1hcmtBc0dlbmVyYXRlQXRVc2VTaXRlKGluc3RydWN0aW9uKTsKICB9CgogIGJvb2wgaXNCbG9ja1NpbmdsZVByZWRlY2Vzc29yKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICByZXR1cm4gYmxvY2suc3VjY2Vzc29ycy5sZW5ndGggPT0gMSAmJgogICAgICAgIGJsb2NrLnN1Y2Nlc3NvcnNbMF0ucHJlZGVjZXNzb3JzLmxlbmd0aCA9PSAxOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJhc2ljQmxvY2soSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIC8vIENvbXBlbnNhdGUgZnJvbSBub3QgbWVyZ2luZyBibG9ja3M6IGlmIHRoZSBibG9jayBpcyB0aGUKICAgIC8vIHNpbmdsZSBwcmVkZWNlc3NvciBvZiBpdHMgc2luZ2xlIHN1Y2Nlc3NvciwgbGV0IHRoZSBzdWNjZXNzb3IKICAgIC8vIHZpc2l0IGl0LgogICAgaWYgKGlzQmxvY2tTaW5nbGVQcmVkZWNlc3NvcihibG9jaykpIHJldHVybjsKCiAgICB0cnlNZXJnaW5nRXhwcmVzc2lvbnMoYmxvY2spOwogIH0KCiAgdm9pZCB0cnlNZXJnaW5nRXhwcmVzc2lvbnMoSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIC8vIFZpc2l0IGVhY2ggaW5zdHJ1Y3Rpb24gb2YgdGhlIGJhc2ljIGJsb2NrIGluIGxhc3QtdG8tZmlyc3Qgb3JkZXIuCiAgICAvLyBLZWVwIGEgbGlzdCBvZiBleHBlY3RlZCBpbnB1dHMgb2YgdGhlIGN1cnJlbnQgImV4cHJlc3Npb24iIGJlaW5nCiAgICAvLyBtZXJnZWQuIElmIGluc3RydWN0aW9ucyBvY2N1ciBpbiB0aGUgZXhwZWN0ZWQgb3JkZXIsIHRoZXkgYXJlCiAgICAvLyBpbmNsdWRlZCBpbiB0aGUgZXhwcmVzc2lvbi4KCiAgICAvLyBUaGUgZXhwZWN0ZWRJbnB1dHMgbGlzdCBob2xkcyBub24tdHJpdmlhbCBpbnN0cnVjdGlvbnMgdGhhdCBtYXkKICAgIC8vIGJlIGdlbmVyYXRlZCBhdCB0aGVpciB1c2Ugc2l0ZSwgaWYgdGhleSBvY2N1ciBpbiB0aGUgY29ycmVjdCBvcmRlci4KICAgIGlmIChleHBlY3RlZElucHV0cyA9PSBudWxsKSBleHBlY3RlZElucHV0cyA9IG5ldyBMaXN0PEhJbnN0cnVjdGlvbj4oKTsKICAgIGlmIChwdXJlSW5wdXRzID09IG51bGwpIHB1cmVJbnB1dHMgPSBuZXcgU2V0PEhJbnN0cnVjdGlvbj4oKTsKCiAgICAvLyBQb3AgaW5zdHJ1Y3Rpb25zIGZyb20gZXhwZWN0ZWRJbnB1dHMgdW50aWwgaW5zdHJ1Y3Rpb24gaXMgZm91bmQuCiAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBpdCBpcyBmb3VuZCwgb3IgZmFsc2UgaWYgbm90LgogICAgYm9vbCBmaW5kSW5JbnB1dHNBbmRQb3BOb25NYXRjaGluZyhISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgICAgYXNzZXJ0KCFpc0VmZmVjdGl2ZWx5UHVyZShpbnN0cnVjdGlvbikpOwogICAgICB3aGlsZSAoIWV4cGVjdGVkSW5wdXRzLmlzRW1wdHkpIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gbmV4dElucHV0ID0gZXhwZWN0ZWRJbnB1dHMucmVtb3ZlTGFzdCgpOwogICAgICAgIGFzc2VydCghZ2VuZXJhdGVBdFVzZVNpdGUuY29udGFpbnMobmV4dElucHV0KSk7CiAgICAgICAgYXNzZXJ0KG5leHRJbnB1dC51c2VkQnkubGVuZ3RoID09IDEpOwogICAgICAgIGlmIChpZGVudGljYWwobmV4dElucHV0LCBpbnN0cnVjdGlvbikpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgYmxvY2subGFzdC5hY2NlcHQodGhpcyk7CiAgICBmb3IgKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IGJsb2NrLmxhc3QucHJldmlvdXM7CiAgICAgICAgaW5zdHJ1Y3Rpb24gIT0gbnVsbDsKICAgICAgICBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uLnByZXZpb3VzKSB7CiAgICAgIGlmIChnZW5lcmF0ZUF0VXNlU2l0ZS5jb250YWlucyhpbnN0cnVjdGlvbikpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoaW5zdHJ1Y3Rpb24uaXNDb2RlTW90aW9uSW52YXJpYW50KCkpIHsKICAgICAgICBtYXJrQXNHZW5lcmF0ZUF0VXNlU2l0ZShpbnN0cnVjdGlvbik7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKGlzRWZmZWN0aXZlbHlQdXJlKGluc3RydWN0aW9uKSkgewogICAgICAgIGlmIChwdXJlSW5wdXRzLmNvbnRhaW5zKGluc3RydWN0aW9uKSkgewogICAgICAgICAgdHJ5R2VuZXJhdGVBdFVzZVNpdGUoaW5zdHJ1Y3Rpb24pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBJZiB0aGUgaW5wdXQgaXMgbm90IGluIHRoZSBbcHVyZUlucHV0c10gc2V0LCBpdCBoYXMgbm90CiAgICAgICAgICAvLyBiZWVuIHZpc2l0ZWQgb3Igc2hvdWxkIG5vdCBiZSBnZW5lcmF0ZWQgYXQgdXNlLXNpdGUuIFRoZSBtb3N0CiAgICAgICAgICAvLyBsaWtlbHkgcmVhc29uIGZvciB0aGUgbGF0dGVyLCBpcyB0aGF0IHRoZSBpbnN0cnVjdGlvbiBpcyB1c2VkCiAgICAgICAgICAvLyBpbiBtb3JlIHRoYW4gb25lIGxvY2F0aW9uLgogICAgICAgICAgLy8gV2UgbXVzdCBlaXRoZXIgY2xlYXIgdGhlIGV4cGVjdGVkSW5wdXRzLCBvciBtb3ZlIHRoZSBwdXJlCiAgICAgICAgICAvLyBpbnN0cnVjdGlvbidzIGlucHV0cyBpbiBmcm9udCBvZiB0aGUgZXhpc3Rpbmcgb25lcy4KICAgICAgICAgIC8vIEV4YW1wbGU6CiAgICAgICAgICAvLyAgIHQxID0gZm9vKCk7ICAvLyBzaWRlLWVmZmVjdC4KICAgICAgICAgIC8vICAgdDIgPSBiYXIoKTsgIC8vIHNpZGUtZWZmZWN0LgogICAgICAgICAgLy8gICB0MyA9IHB1cmUodDIpOyAgICAvLyB1c2VkIG1vcmUgdGhhbiBvbmNlLgogICAgICAgICAgLy8gICBmKHQxLCB0Myk7ICAgLy8gZXhwZWN0ZWQgaW5wdXRzIG9mICdmJzogdDEuCiAgICAgICAgICAvLyAgIHVzZSh0Myk7CiAgICAgICAgICAvLwogICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgY2xlYXIgdGhlIGV4cGVjdGVkIGlucHV0cyB3ZSBlbmQgdXAgaW4gYSBzaXR1YXRpb24KICAgICAgICAgIC8vIHdoZXJlIHB1cmUgcHVzaGVzICJ0MiIgb24gdG9wIG9mICJ0MSIgbGVhZGluZyB0bzoKICAgICAgICAgIC8vICAgdDMgPSBwdXJlKGJhcigpKTsKICAgICAgICAgIC8vICAgZihmb28oKSwgdDMpOwogICAgICAgICAgLy8gICB1c2UodDMpOwogICAgICAgICAgLy8KICAgICAgICAgIC8vIElmIHdlIGNsZWFyIHRoZSBleHBlY3RlZC1pbnB1dHMgbGlzdCB3ZSBoYXZlIHRoZSBjb3JyZWN0CiAgICAgICAgICAvLyBvdXRwdXQ6CiAgICAgICAgICAvLyAgIHQxID0gZm9vKCk7CiAgICAgICAgICAvLyAgIHQzID0gcHVyZShiYXIoKSk7CiAgICAgICAgICAvLyAgIGYodDEsIHQzKTsKICAgICAgICAgIC8vICAgdXNlKHQzKTsKICAgICAgICAgIC8vCiAgICAgICAgICAvLyBDbGVhcmluZyBpcywgaG93ZXZlciwgbm90IG9wdGltYWwuCiAgICAgICAgICAvLyBFeGFtcGxlOgogICAgICAgICAgLy8gICB0MSA9IGZvbygpOyAgLy8gdDEgaXMgbm93IHVzZWQgYnkgYHB1cmVgLgogICAgICAgICAgLy8gICB0MiA9IGJhcigpOyAgLy8gdDIgaXMgbm93IHVzZWQgYnkgYGZgLgogICAgICAgICAgLy8gICB0MyA9IHB1cmUodDEpOwogICAgICAgICAgLy8gICBmKHQyLCB0Myk7CiAgICAgICAgICAvLyAgIHVzZSh0Myk7CiAgICAgICAgICAvLwogICAgICAgICAgLy8gSWYgd2UgY2xlYXIgdGhlIGV4cGVjdGVkLWlucHV0cyB3ZSBjYW4ndCBnZW5lcmF0ZS1hdC11c2UgYW55IG9mCiAgICAgICAgICAvLyB0aGUgaW5zdHJ1Y3Rpb25zLgogICAgICAgICAgLy8KICAgICAgICAgIC8vIFRoZSBvcHRpbWFsIHNvbHV0aW9uIGlzIHRvIG1vdmUgdGhlIGlucHV0cyBvZiAncHVyZScgaW4KICAgICAgICAgIC8vIGZyb250IG9mIHRoZSBleHBlY3RlZElucHV0cyBsaXN0LiBUaGlzIG1ha2VzIHNlbnNlLCBzaW5jZSB3ZQogICAgICAgICAgLy8gcHVzaCBleHBlY3RlZC1pbnB1dHMgZnJvbSBsZWZ0LXRvIHJpZ2h0LCBhbmQgdGhlIGBwdXJlYCBmdW5jdGlvbgogICAgICAgICAgLy8gaW52b2NhdGlvbiBpcyAibW9yZSBsZWZ0IiAoaS5lLiBiZWZvcmUpIHRoZSBmaXJzdCBhcmd1bWVudCBvZiBgZmAuCiAgICAgICAgICAvLyBXaXRoIHRoYXQgYXBwcm9hY2ggd2UgZW5kIHVwIHdpdGg6CiAgICAgICAgICAvLyAgIHQzID0gcHVyZShmb28oKSk7CiAgICAgICAgICAvLyAgIGYoYmFyKCksIHQzKTsKICAgICAgICAgIC8vICAgdXNlKHQzKTsKICAgICAgICAgIC8vCiAgICAgICAgICBpbnQgb2xkTGVuZ3RoID0gZXhwZWN0ZWRJbnB1dHMubGVuZ3RoOwogICAgICAgICAgaW5zdHJ1Y3Rpb24uYWNjZXB0KHRoaXMpOwogICAgICAgICAgaWYgKG9sZExlbmd0aCAhPSAwICYmIG9sZExlbmd0aCAhPSBleHBlY3RlZElucHV0cy5sZW5ndGgpIHsKICAgICAgICAgICAgLy8gTW92ZSB0aGUgcHVyZSBpbnN0cnVjdGlvbidzIGlucHV0cyB0byB0aGUgZnJvbnQuCiAgICAgICAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBuZXdJbnB1dHMgPSBleHBlY3RlZElucHV0cy5zdWJsaXN0KG9sZExlbmd0aCk7CiAgICAgICAgICAgIGludCBuZXdDb3VudCA9IG5ld0lucHV0cy5sZW5ndGg7CiAgICAgICAgICAgIGV4cGVjdGVkSW5wdXRzLnNldFJhbmdlKAogICAgICAgICAgICAgICAgbmV3Q291bnQsIG5ld0NvdW50ICsgb2xkTGVuZ3RoLCBleHBlY3RlZElucHV0cyk7CiAgICAgICAgICAgIGV4cGVjdGVkSW5wdXRzLnNldFJhbmdlKDAsIG5ld0NvdW50LCBuZXdJbnB1dHMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoZmluZEluSW5wdXRzQW5kUG9wTm9uTWF0Y2hpbmcoaW5zdHJ1Y3Rpb24pKSB7CiAgICAgICAgICAvLyBUaGUgY3VycmVudCBpbnN0cnVjdGlvbiBpcyB0aGUgbmV4dCBub24tdHJpdmlhbAogICAgICAgICAgLy8gZXhwZWN0ZWQgaW5wdXQuCiAgICAgICAgICB0cnlHZW5lcmF0ZUF0VXNlU2l0ZShpbnN0cnVjdGlvbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFzc2VydChleHBlY3RlZElucHV0cy5pc0VtcHR5KTsKICAgICAgICB9CiAgICAgICAgaW5zdHJ1Y3Rpb24uYWNjZXB0KHRoaXMpOwogICAgICB9CiAgICB9CgogICAgaWYgKGJsb2NrLnByZWRlY2Vzc29ycy5sZW5ndGggPT0gMSAmJgogICAgICAgIGlzQmxvY2tTaW5nbGVQcmVkZWNlc3NvcihibG9jay5wcmVkZWNlc3NvcnNbMF0pKSB7CiAgICAgIGFzc2VydChibG9jay5waGlzLmlzRW1wdHkpOwogICAgICB0cnlNZXJnaW5nRXhwcmVzc2lvbnMoYmxvY2sucHJlZGVjZXNzb3JzWzBdKTsKICAgIH0gZWxzZSB7CiAgICAgIGV4cGVjdGVkSW5wdXRzID0gbnVsbDsKICAgICAgcHVyZUlucHV0cyA9IG51bGw7CiAgICB9CiAgfQp9CgovLy8gIERldGVjdCBjb250cm9sIGZsb3cgYXJpc2luZyBmcm9tIHNob3J0LWNpcmN1aXQgbG9naWNhbCBhbmQKLy8vICBjb25kaXRpb25hbCBvcGVyYXRvcnMsIGFuZCBwcmVwYXJlIHRoZSBwcm9ncmFtIHRvIGJlIGdlbmVyYXRlZAovLy8gIHVzaW5nIHRoZXNlIG9wZXJhdG9ycyBpbnN0ZWFkIG9mIG5lc3RlZCBpZnMgYW5kIGJvb2xlYW4gdmFyaWFibGVzLgpjbGFzcyBTc2FDb25kaXRpb25NZXJnZXIgZXh0ZW5kcyBIR3JhcGhWaXNpdG9yIHdpdGggQ29kZWdlblBoYXNlIHsKICBTZXQ8SEluc3RydWN0aW9uPiBnZW5lcmF0ZUF0VXNlU2l0ZTsKICBTZXQ8SEluc3RydWN0aW9uPiBjb250cm9sRmxvd09wZXJhdG9yczsKCiAgdm9pZCBtYXJrQXNHZW5lcmF0ZUF0VXNlU2l0ZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGFzc2VydCghaW5zdHJ1Y3Rpb24uaXNKc1N0YXRlbWVudCgpKTsKICAgIGdlbmVyYXRlQXRVc2VTaXRlLmFkZChpbnN0cnVjdGlvbik7CiAgfQoKICBTc2FDb25kaXRpb25NZXJnZXIodGhpcy5nZW5lcmF0ZUF0VXNlU2l0ZSwgdGhpcy5jb250cm9sRmxvd09wZXJhdG9ycyk7CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRHcmFwaChIR3JhcGggZ3JhcGgpIHsKICAgIHZpc2l0UG9zdERvbWluYXRvclRyZWUoZ3JhcGgpOwogIH0KCiAgLy8vIENoZWNrIGlmIGEgYmxvY2sgaGFzIGF0IGxlYXN0IG9uZSBzdGF0ZW1lbnQgb3RoZXIgdGhhbgogIC8vLyBbaW5zdHJ1Y3Rpb25dLgogIGJvb2wgaGFzQW55U3RhdGVtZW50KEhCYXNpY0Jsb2NrIGJsb2NrLCBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIC8vIElmIFtpbnN0cnVjdGlvbl0gaXMgbm90IGluIFtibG9ja10sIHRoZW4gaWYgdGhlIGJsb2NrIGlzIG5vdAogICAgLy8gZW1wdHksIHdlIGtub3cgdGhlcmUgd2lsbCBiZSBhIHN0YXRlbWVudCB0byBlbWl0LgogICAgaWYgKCFpZGVudGljYWwoaW5zdHJ1Y3Rpb24uYmxvY2ssIGJsb2NrKSkgewogICAgICByZXR1cm4gIWlkZW50aWNhbChibG9jay5sYXN0LCBibG9jay5maXJzdCk7CiAgICB9CgogICAgLy8gSWYgW2luc3RydWN0aW9uXSBpcyBub3QgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gb2YgdGhlIGJsb2NrCiAgICAvLyBiZWZvcmUgdGhlIGNvbnRyb2wgZmxvdyBpbnN0cnVjdGlvbiwgb3IgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24sCiAgICAvLyB0aGVuIHdlIHdpbGwgaGF2ZSB0byBlbWl0IGEgc3RhdGVtZW50IGZvciB0aGF0IGxhc3QgaW5zdHJ1Y3Rpb24uCiAgICBpZiAoaW5zdHJ1Y3Rpb24gIT0gYmxvY2subGFzdCAmJgogICAgICAgICFpZGVudGljYWwoaW5zdHJ1Y3Rpb24sIGJsb2NrLmxhc3QucHJldmlvdXMpKSByZXR1cm4gdHJ1ZTsKCiAgICAvLyBJZiBvbmUgb2YgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgYmxvY2sgdW50aWwgW2luc3RydWN0aW9uXSBpcwogICAgLy8gbm90IGdlbmVyYXRlZCBhdCB1c2Ugc2l0ZSwgdGhlbiB3ZSB3aWxsIGhhdmUgdG8gZW1pdCBhCiAgICAvLyBzdGF0ZW1lbnQgZm9yIGl0LgogICAgLy8gVE9ETyhuZ2VvZmZyYXkpOiB3ZSBjb3VsZCBnZW5lcmF0ZSBhIGNvbW1hIHNlcGFyYXRlZAogICAgLy8gbGlzdCBvZiBleHByZXNzaW9ucy4KICAgIGZvciAoSEluc3RydWN0aW9uIHRlbXAgPSBibG9jay5maXJzdDsKICAgICAgICAhaWRlbnRpY2FsKHRlbXAsIGluc3RydWN0aW9uKTsKICAgICAgICB0ZW1wID0gdGVtcC5uZXh0KSB7CiAgICAgIGlmICghZ2VuZXJhdGVBdFVzZVNpdGUuY29udGFpbnModGVtcCkpIHJldHVybiB0cnVlOwogICAgfQoKICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgaXNTYWZlVG9HZW5lcmF0ZUF0VXNlU2l0ZShISW5zdHJ1Y3Rpb24gdXNlciwgSEluc3RydWN0aW9uIGlucHV0KSB7CiAgICAvLyBIQ3JlYXRlIGV2YWx1YXRlcyBhcmd1bWVudHMgaW4gb3JkZXIgYW5kIHBhc3NlcyB0aGVtIHRvIGEgY29uc3RydWN0b3IuCiAgICBpZiAodXNlciBpcyBIQ3JlYXRlKSByZXR1cm4gdHJ1ZTsKICAgIC8vIEEgW0hGb3JlaWduXSBpbnN0cnVjdGlvbiB1c2VzIG9wZXJhdG9ycyBhbmQgaWYgd2UgZ2VuZXJhdGUgW2lucHV0XSBhdCB1c2UKICAgIC8vIHNpdGUsIHRoZSBwcmVjZWRlbmNlIG9yIGV2YWx1YXRpb24gb3JkZXIgbWlnaHQgYmUgd3JvbmcuCiAgICBpZiAodXNlciBpcyBIRm9yZWlnbikgcmV0dXJuIGZhbHNlOwogICAgLy8gQSBbSENoZWNrXSBpbnN0cnVjdGlvbiB3aXRoIGNvbnRyb2wgZmxvdyB1c2VzIGl0cyBpbnB1dAogICAgLy8gbXVsdGlwbGUgdGltZXMsIHNvIHdlIGF2b2lkIGdlbmVyYXRpbmcgaXQgYXQgdXNlIHNpdGUuCiAgICBpZiAodXNlciBpcyBIQ2hlY2sgJiYgdXNlci5pc0NvbnRyb2xGbG93KCkpIHJldHVybiBmYWxzZTsKICAgIC8vIEEgW0hJc10gaW5zdHJ1Y3Rpb24gdXNlcyBpdHMgaW5wdXQgbXVsdGlwbGUgdGltZXMsIHNvIHdlCiAgICAvLyBhdm9pZCBnZW5lcmF0aW5nIGl0IGF0IHVzZSBzaXRlLgogICAgaWYgKHVzZXIgaXMgSElzKSByZXR1cm4gZmFsc2U7CiAgICAvLyBBdm9pZCBjb2RlIG1vdGlvbiBpbnRvIGEgbG9vcC4KICAgIHJldHVybiB1c2VyLmhhc1NhbWVMb29wSGVhZGVyQXMoaW5wdXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJhc2ljQmxvY2soSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIGlmIChibG9jay5sYXN0IGlzISBISWYpIHJldHVybjsKICAgIEhJZiBzdGFydElmID0gYmxvY2subGFzdDsKICAgIEhCYXNpY0Jsb2NrIGVuZCA9IHN0YXJ0SWYuam9pbkJsb2NrOwoKICAgIC8vIFdlIGNoZWNrIHRoYXQgdGhlIHN0cnVjdHVyZSBpcyB0aGUgZm9sbG93aW5nOgogICAgLy8gICAgICAgICBJZgogICAgLy8gICAgICAgLyAgICBcCiAgICAvLyAgICAgIC8gICAgICBcCiAgICAvLyAgIDEgZXhwciAgICBnb3RvCiAgICAvLyAgICBnb3RvICAgICAvCiAgICAvLyAgICAgIFwgICAgIC8KICAgIC8vICAgICAgIFwgICAvCiAgICAvLyBwaGkoZXhwciwgdHJ1ZXxmYWxzZSkKICAgIC8vCiAgICAvLyBhbmQgdGhlIHNhbWUgZm9yIG5lc3RlZCBub2RlczoKICAgIC8vCiAgICAvLyAgICAgICAgICAgIElmCiAgICAvLyAgICAgICAgICAvICAgIFwKICAgIC8vICAgICAgICAgLyAgICAgIFwKICAgIC8vICAgICAgMSBleHByMSAgICBcCiAgICAvLyAgICAgICBJZiAgICAgICAgIFwKICAgIC8vICAgICAgLyAgXCAgICAgICAgIFwKICAgIC8vICAgICAvICAgIFwgICAgICAgICBnb3RvCiAgICAvLyAgMSBleHByMiAgICAgICAgICAgIHwKICAgIC8vICAgIGdvdG8gICAgZ290byAgICAgfAogICAgLy8gICAgICBcICAgICAvICAgICAgICB8CiAgICAvLyAgICAgICBcICAgLyAgICAgICAgIHwKICAgIC8vICAgcGhpMShleHByMiwgdHJ1ZXxmYWxzZSkKICAgIC8vICAgICAgICAgIFwgICAgICAgICAgfAogICAgLy8gICAgICAgICAgIFwgICAgICAgICB8CiAgICAvLyAgICAgICAgICAgICBwaGkocGhpMSwgdHJ1ZXxmYWxzZSkKCiAgICBpZiAoZW5kID09IG51bGwpIHJldHVybjsKICAgIGlmIChlbmQucGhpcy5pc0VtcHR5KSByZXR1cm47CiAgICBpZiAoIWlkZW50aWNhbChlbmQucGhpcy5maXJzdCwgZW5kLnBoaXMubGFzdCkpIHJldHVybjsKICAgIEhCYXNpY0Jsb2NrIGVsc2VCbG9jayA9IHN0YXJ0SWYuZWxzZUJsb2NrOwoKICAgIGlmICghaWRlbnRpY2FsKGVuZC5wcmVkZWNlc3NvcnNbMV0sIGVsc2VCbG9jaykpIHJldHVybjsKICAgIEhQaGkgcGhpID0gZW5kLnBoaXMuZmlyc3Q7CiAgICBISW5zdHJ1Y3Rpb24gdGhlbklucHV0ID0gcGhpLmlucHV0c1swXTsKICAgIEhJbnN0cnVjdGlvbiBlbHNlSW5wdXQgPSBwaGkuaW5wdXRzWzFdOwogICAgaWYgKHRoZW5JbnB1dC5pc0pzU3RhdGVtZW50KCkgfHwgZWxzZUlucHV0LmlzSnNTdGF0ZW1lbnQoKSkgcmV0dXJuOwoKICAgIGlmIChoYXNBbnlTdGF0ZW1lbnQoZWxzZUJsb2NrLCBlbHNlSW5wdXQpKSByZXR1cm47CiAgICBhc3NlcnQoZWxzZUJsb2NrLnN1Y2Nlc3NvcnMubGVuZ3RoID09IDEpOwogICAgYXNzZXJ0KGVuZC5wcmVkZWNlc3NvcnMubGVuZ3RoID09IDIpOwoKICAgIEhCYXNpY0Jsb2NrIHRoZW5CbG9jayA9IHN0YXJ0SWYudGhlbkJsb2NrOwogICAgLy8gU2tpcCB0cml2aWFsIGdvdG8gYmxvY2tzLgogICAgd2hpbGUgKHRoZW5CbG9jay5zdWNjZXNzb3JzWzBdICE9IGVuZCAmJiB0aGVuQmxvY2suZmlyc3QgaXMgSEdvdG8pIHsKICAgICAgdGhlbkJsb2NrID0gdGhlbkJsb2NrLnN1Y2Nlc3NvcnNbMF07CiAgICB9CgogICAgLy8gSWYgdGhlIFt0aGVuQmxvY2tdIGlzIGFscmVhZHkgYSBjb250cm9sIGZsb3cgb3BlcmF0aW9uLCBhbmQgZG9lcyBub3QKICAgIC8vIGhhdmUgYW55IHN0YXRlbWVudCBhbmQgaXRzIGpvaW4gYmxvY2sgaXMgW2VuZF0sIHdlIGNhbiBlbWl0IGEKICAgIC8vIHNlcXVlbmNlIG9mIGNvbnRyb2wgZmxvdyBvcGVyYXRpb24uCiAgICBpZiAoY29udHJvbEZsb3dPcGVyYXRvcnMuY29udGFpbnModGhlbkJsb2NrLmxhc3QpKSB7CiAgICAgIEhJZiBvdGhlcklmID0gdGhlbkJsb2NrLmxhc3Q7CiAgICAgIGlmICghaWRlbnRpY2FsKG90aGVySWYuam9pbkJsb2NrLCBlbmQpKSB7CiAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBhIGpvaW4gYmxvY2sgdGhhdCBqdXN0IGZlZWRzIGludG8gb3VyIGpvaW4gYmxvY2suCiAgICAgICAgSEJhc2ljQmxvY2sgb3RoZXJKb2luID0gb3RoZXJJZi5qb2luQmxvY2s7CiAgICAgICAgaWYgKG90aGVySm9pbi5maXJzdCAhPSBvdGhlckpvaW4ubGFzdCkgcmV0dXJuOwogICAgICAgIGlmIChvdGhlckpvaW4uc3VjY2Vzc29ycy5sZW5ndGggIT0gMSkgcmV0dXJuOwogICAgICAgIGlmIChvdGhlckpvaW4uc3VjY2Vzc29yc1swXSAhPSBlbmQpIHJldHVybjsKICAgICAgICBpZiAob3RoZXJKb2luLnBoaXMuaXNFbXB0eSkgcmV0dXJuOwogICAgICAgIGlmICghaWRlbnRpY2FsKG90aGVySm9pbi5waGlzLmZpcnN0LCBvdGhlckpvaW4ucGhpcy5sYXN0KSkgcmV0dXJuOwogICAgICAgIEhQaGkgb3RoZXJQaGkgPSBvdGhlckpvaW4ucGhpcy5maXJzdDsKICAgICAgICBpZiAodGhlbklucHV0ICE9IG90aGVyUGhpKSByZXR1cm47CiAgICAgICAgaWYgKGVsc2VJbnB1dCAhPSBvdGhlclBoaS5pbnB1dHNbMV0pIHJldHVybjsKICAgICAgfQogICAgICBpZiAoaGFzQW55U3RhdGVtZW50KHRoZW5CbG9jaywgb3RoZXJJZikpIHJldHVybjsKICAgIH0gZWxzZSB7CiAgICAgIGlmICghaWRlbnRpY2FsKGVuZC5wcmVkZWNlc3NvcnNbMF0sIHRoZW5CbG9jaykpIHJldHVybjsKICAgICAgaWYgKGhhc0FueVN0YXRlbWVudCh0aGVuQmxvY2ssIHRoZW5JbnB1dCkpIHJldHVybjsKICAgICAgYXNzZXJ0KHRoZW5CbG9jay5zdWNjZXNzb3JzLmxlbmd0aCA9PSAxKTsKICAgIH0KCiAgICAvLyBGcm9tIG5vdyBvbiwgd2UgaGF2ZSByZWNvZ25pemVkIGEgY29udHJvbCBmbG93IG9wZXJhdGlvbiBidWlsdCBmcm9tCiAgICAvLyB0aGUgYnVpbGRlci4gTWFyayB0aGUgaWYgaW5zdHJ1Y3Rpb24gYXMgc3VjaC4KICAgIGNvbnRyb2xGbG93T3BlcmF0b3JzLmFkZChzdGFydElmKTsKCiAgICAvLyBGaW5kIHRoZSBuZXh0IG5vbi1IR290byBpbnN0cnVjdGlvbiBmb2xsb3dpbmcgdGhlIHBoaS4KICAgIEhJbnN0cnVjdGlvbiBuZXh0SW5zdHJ1Y3Rpb24gPSBwaGkuYmxvY2suZmlyc3Q7CiAgICB3aGlsZSAobmV4dEluc3RydWN0aW9uIGlzIEhHb3RvKSB7CiAgICAgIG5leHRJbnN0cnVjdGlvbiA9IG5leHRJbnN0cnVjdGlvbi5ibG9jay5zdWNjZXNzb3JzWzBdLmZpcnN0OwogICAgfQoKICAgIC8vIElmIHRoZSBvcGVyYXRpb24gaXMgb25seSB1c2VkIGJ5IHRoZSBmaXJzdCBpbnN0cnVjdGlvbgogICAgLy8gb2YgaXRzIGJsb2NrIGFuZCBpcyBzYWZlIHRvIGJlIGdlbmVyYXRlZCBhdCB1c2Ugc2l0ZSwgbWFyayBpdAogICAgLy8gc28uCiAgICBpZiAocGhpLnVzZWRCeS5sZW5ndGggPT0gMSAmJgogICAgICAgIHBoaS51c2VkQnlbMF0gPT0gbmV4dEluc3RydWN0aW9uICYmCiAgICAgICAgaXNTYWZlVG9HZW5lcmF0ZUF0VXNlU2l0ZShwaGkudXNlZEJ5WzBdLCBwaGkpKSB7CiAgICAgIG1hcmtBc0dlbmVyYXRlQXRVc2VTaXRlKHBoaSk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChlbHNlSW5wdXQuYmxvY2ssIGVsc2VCbG9jaykpIHsKICAgICAgYXNzZXJ0KGVsc2VJbnB1dC51c2VkQnkubGVuZ3RoID09IDEpOwogICAgICBtYXJrQXNHZW5lcmF0ZUF0VXNlU2l0ZShlbHNlSW5wdXQpOwogICAgfQoKICAgIC8vIElmIFt0aGVuSW5wdXRdIGlzIGRlZmluZWQgaW4gdGhlIGZpcnN0IHByZWRlY2Vzc29yLCB0aGVuIGl0IGlzIG9ubHkgdXNlZAogICAgLy8gYnkgW3BoaV0gYW5kIGNhbiBiZSBnZW5lcmF0ZWQgYXQgdXNlIHNpdGUuCiAgICBpZiAoaWRlbnRpY2FsKHRoZW5JbnB1dC5ibG9jaywgZW5kLnByZWRlY2Vzc29yc1swXSkpIHsKICAgICAgYXNzZXJ0KHRoZW5JbnB1dC51c2VkQnkubGVuZ3RoID09IDEpOwogICAgICBtYXJrQXNHZW5lcmF0ZUF0VXNlU2l0ZSh0aGVuSW5wdXQpOwogICAgfQogIH0KfQoKLy8vIEluc2VydCAnY2FjaGVzJyBmb3Igd2hvbGUtZnVuY3Rpb24gcmVnaW9uLWNvbnN0YW50cyB3aGVuIHRoZSBsb2NhbCBtaW5pZmllZAovLy8gbmFtZSB3b3VsZCBiZSBzaG9ydGVyIHRoYW4gcmVwZWF0ZWQgcmVmZXJlbmNlcy4gIFRoZXNlIGFyZSBjYWNoZXMgZm9yICd0aGlzJwovLy8gYW5kIGNvbnN0YW50IHZhbHVlcy4KY2xhc3MgU3NhU2hhcmVSZWdpb25Db25zdGFudHMgZXh0ZW5kcyBIQmFzZVZpc2l0b3Igd2l0aCBDb2RlZ2VuUGhhc2UgewogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBfb3B0aW9uczsKCiAgU3NhU2hhcmVSZWdpb25Db25zdGFudHModGhpcy5fb3B0aW9ucyk7CgogIEBvdmVycmlkZQogIHZpc2l0R3JhcGgoSEdyYXBoIGdyYXBoKSB7CiAgICAvLyBXZSBuZWVkIHRoZSBhc3luYyByZXdyaXRlIHRvIGJlIHNtYXJ0ZXIgYWJvdXQgaG9pc3RpbmcgcmVnaW9uIGNvbnN0YW50cwogICAgLy8gYmVmb3JlIGl0IGlzIHdvcnRoLXdoaWxlLgogICAgaWYgKGdyYXBoLm5lZWRzQXN5bmNSZXdyaXRlKSByZXR1cm47CgogICAgLy8gJ0hUaGlzJyBhbmQgY29uc3RhbnRzIGFyZSBpbiB0aGUgZW50cnkgYmxvY2suIE5vIG5lZWQgdG8gd2FsayB0aGUgcmVzdCBvZgogICAgLy8gdGhlIGdyYXBoLgogICAgdmlzaXRCYXNpY0Jsb2NrKGdyYXBoLmVudHJ5KTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0QmFzaWNCbG9jayhIQmFzaWNCbG9jayBibG9jaykgewogICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gYmxvY2suZmlyc3Q7CiAgICB3aGlsZSAoaW5zdHJ1Y3Rpb24gIT0gbnVsbCkgewogICAgICBISW5zdHJ1Y3Rpb24gbmV4dCA9IGluc3RydWN0aW9uLm5leHQ7CiAgICAgIGluc3RydWN0aW9uLmFjY2VwdCh0aGlzKTsKICAgICAgaW5zdHJ1Y3Rpb24gPSBuZXh0OwogICAgfQogIH0KCiAgLy8gTm90IGFsbCBvY2N1cnJlbmNlcyBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCBhIGxvY2FsIHZhcmlhYmxlIGNhY2hlLCBzbyB3ZQogIC8vIGZpbHRlciB0aGUgdXNlcy4KICBpbnQgX2NvdW50Q2FjaGVhYmxlVXNlcygKICAgICAgSEluc3RydWN0aW9uIG5vZGUsIGJvb2wgRnVuY3Rpb24oSEluc3RydWN0aW9uKSBjYWNoZWFibGUpIHsKICAgIHJldHVybiBub2RlLnVzZWRCeS53aGVyZShjYWNoZWFibGUpLmxlbmd0aDsKICB9CgogIC8vIFJlcGxhY2UgY2FjaGVhYmxlIHVzZXMgd2l0aCBhIHJlZmVyZW5jZSB0byBhIEhMYXRlVmFsdWUgbm9kZS4KICBfY2FjaGUoCiAgICAgIEhJbnN0cnVjdGlvbiBub2RlLCBib29sIEZ1bmN0aW9uKEhJbnN0cnVjdGlvbikgY2FjaGVhYmxlLCBTdHJpbmcgbmFtZSkgewogICAgdmFyIHVzZXJzID0gbm9kZS51c2VkQnkudG9MaXN0KCk7CiAgICB2YXIgcmVmZXJlbmNlID0gbmV3IEhMYXRlVmFsdWUobm9kZSk7CiAgICAvLyBUT0RPKHNyYSk6IFRoZSBzb3VyY2VJbmZvcm1hdGlvbiBzaG91bGQgcmVhbGx5IGJlIGZyb20gdGhlIGZ1bmN0aW9uCiAgICAvLyBlbnRyeSwgbm90IHRoZSB1c2Ugb2YgYHRoaXNgLgogICAgcmVmZXJlbmNlLnNvdXJjZUluZm9ybWF0aW9uID0gbm9kZS5zb3VyY2VJbmZvcm1hdGlvbjsKICAgIHJlZmVyZW5jZS5zb3VyY2VFbGVtZW50ID0gX0V4cHJlc3Npb25OYW1lKG5hbWUpOwogICAgbm9kZS5ibG9jay5hZGRBZnRlcihub2RlLCByZWZlcmVuY2UpOwogICAgZm9yIChISW5zdHJ1Y3Rpb24gdXNlciBpbiB1c2VycykgewogICAgICBpZiAoY2FjaGVhYmxlKHVzZXIpKSB7CiAgICAgICAgdXNlci5jaGFuZ2VVc2Uobm9kZSwgcmVmZXJlbmNlKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFRoaXMoSFRoaXMgbm9kZSkgewogICAgaW50IHNpemUgPSA0OwogICAgLy8gQ29tcGFyZSB0aGUgc2l6ZSBvZiB0aGUgdW5jaGFuZ2VkIG1pbmlmaWVkIHdpdGggdGhlIHNpemUgb2YgdGhlIG1pbmlmaWVkCiAgICAvLyBjb2RlIHdoZXJlICd0aGlzJyBpcyBhc3NpZ25lZCB0byBhIHZhcmlhYmxlLiBXZSBhc3N1bWUgdGhlIHZhcmlhYmxlIGhhcwogICAgLy8gbWluaWZpZWQgc2l6ZSAxLgogICAgLy8KICAgIC8vIFRoZSBzaXplIG92ZXJoZWFkIG9mIGludHJvZHVjaW5nIGEgdmFyaWFibGUgaW4gdGhlIHdvcnN0IGNhc2UgaW5jbHVkZXMKICAgIC8vICd2YXIgJzoKICAgIC8vCiAgICAvLyAgICAgICAgICAgMTIzNCAgIC8vIHNpemUKICAgIC8vICAgICB2YXIgeD10aGlzOyAgLy8gKG1pbmlmaWVkICc7JyBjYW4gYmUgZW5kLW9mLWxpbmUpCiAgICAvLyAgICAgMTIzNDU2ICAgIDcgIC8vIGFkZGl0aW9uYWwgb3ZlcmhlYWQKICAgIC8vCiAgICAvLyBUT0RPKHNyYSk6IElmIHRoZXJlIGFyZSBtdWx0aXBsZSB2YWx1ZXMgdGhhdCBjYW4gcG90ZW50aWFsbHkgYmUgY2FjaGVkLAogICAgLy8gdGhleSBjYW4gc2hhcmUgdGhlICd2YXIgJyBjb3N0LCBldmVuIGlmIG5vbmUgb2YgdGhlbSBhcmUgYmVuZWZpY2lhbAogICAgLy8gaW5kaXZpZHVhbGx5LgogICAgaW50IHVzZUNvdW50ID0gbm9kZS51c2VkQnkubGVuZ3RoOwogICAgaWYgKHVzZUNvdW50ICogc2l6ZSA8PSA3ICsgc2l6ZSArIHVzZUNvdW50ICogMSkgcmV0dXJuOwogICAgX2NhY2hlKG5vZGUsIChfKSA9PiB0cnVlLCAnX3RoaXMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb25zdGFudChIQ29uc3RhbnQgbm9kZSkgewogICAgaWYgKG5vZGUudXNlZEJ5Lmxlbmd0aCA8PSAxKSByZXR1cm47CiAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gbm9kZS5jb25zdGFudDsKCiAgICBpZiAoY29uc3RhbnQuaXNOdWxsKSB7CiAgICAgIF9oYW5kbGVOdWxsKG5vZGUpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGNvbnN0YW50LmlzSW50KSB7CiAgICAgIF9oYW5kbGVJbnQobm9kZSwgY29uc3RhbnQpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGNvbnN0YW50LmlzU3RyaW5nKSB7CiAgICAgIF9oYW5kbGVTdHJpbmcobm9kZSwgY29uc3RhbnQpOwogICAgICByZXR1cm47CiAgICB9CiAgfQoKICB2b2lkIF9oYW5kbGVOdWxsKEhDb25zdGFudCBub2RlKSB7CiAgICBpbnQgc2l6ZSA9IDQ7CgogICAgYm9vbCBfaXNDYWNoZWFibGVVc2UoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICAgIC8vIE9uZS1zaG90IGludGVyY2VwdG9ycyBoYXZlIGBudWxsYCBhcyBhIGR1bW15IGludGVyY2VwdG9yLgogICAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSE9uZVNob3RJbnRlcmNlcHRvcikgcmV0dXJuIGZhbHNlOwoKICAgICAgaWYgKGluc3RydWN0aW9uIGlzIEhJbnZva2UpIHJldHVybiB0cnVlOwogICAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSENyZWF0ZSkgcmV0dXJuIHRydWU7CiAgICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIUGhpKSByZXR1cm4gdHJ1ZTsKCiAgICAgIC8vIFdlIHJldHVybiBgbnVsbGAgYnkgcmVtb3ZpbmcgdGhlIHJldHVybiBleHByZXNzaW9uIG9yIHN0YXRlbWVudC4KICAgICAgaWYgKGluc3RydWN0aW9uIGlzIEhSZXR1cm4pIHJldHVybiBmYWxzZTsKCiAgICAgIC8vIEphdmFTY3JpcHQgYHggPT0gbnVsbGAgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiBgeCA9PSBfbnVsbGAuCiAgICAgIGlmIChpbnN0cnVjdGlvbiBpcyBISWRlbnRpdHkpIHJldHVybiBmYWxzZTsKCiAgICAgIC8vIFRPRE8oc3JhKTogRGV0ZXJtaW5lIGlmIG90aGVyIHVzZXMgcmVzdWx0IGluIGZhc3RlciBKYXZhU2NyaXB0IGNvZGUuCiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpbnQgdXNlQ291bnQgPSBfY291bnRDYWNoZWFibGVVc2VzKG5vZGUsIF9pc0NhY2hlYWJsZVVzZSk7CiAgICBpZiAodXNlQ291bnQgKiBzaXplIDw9IDcgKyBzaXplICsgdXNlQ291bnQgKiAxKSByZXR1cm47CiAgICBfY2FjaGUobm9kZSwgX2lzQ2FjaGVhYmxlVXNlLCAnX251bGwnKTsKICAgIHJldHVybjsKICB9CgogIHZvaWQgX2hhbmRsZUludChIQ29uc3RhbnQgbm9kZSwgSW50Q29uc3RhbnRWYWx1ZSBpbnRDb25zdGFudCkgewogICAgQmlnSW50IHZhbHVlID0gaW50Q29uc3RhbnQuaW50VmFsdWU7CiAgICBTdHJpbmcgdGV4dCA9IHZhbHVlLnRvU3RyaW5nKCk7CiAgICBpbnQgc2l6ZSA9IHRleHQubGVuZ3RoOwogICAgaWYgKHNpemUgPD0gMykgcmV0dXJuOwoKICAgIGJvb2wgX2lzQ2FjaGVhYmxlVXNlKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSEludm9rZSkgcmV0dXJuIHRydWU7CiAgICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIQ3JlYXRlKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGluc3RydWN0aW9uIGlzIEhSZXR1cm4pIHJldHVybiB0cnVlOwogICAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSFBoaSkgcmV0dXJuIHRydWU7CgogICAgICAvLyBKYXZhU2NyaXB0IGB4ID09PSA1YCBpcyBtb3JlIGVmZmljaWVudCB0aGFuIGB4ID09PSBfNWAuCiAgICAgIGlmIChpbnN0cnVjdGlvbiBpcyBISWRlbnRpdHkpIHJldHVybiBmYWxzZTsKCiAgICAgIC8vIEZvcmVpZ24gY29kZSB0ZW1wbGF0ZXMgbWF5IHVzZSBsaXRlcmFscyBpbiB3YXlzIHRoYXQgYXJlIGJlbmVmaWNpYWwuCiAgICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIRm9yZWlnbkNvZGUpIHJldHVybiBmYWxzZTsKCiAgICAgIC8vIFRPRE8oc3JhKTogRGV0ZXJtaW5lIGlmIG90aGVyIHVzZXMgcmVzdWx0IGluIGZhc3RlciBKYXZhU2NyaXB0IGNvZGUuCiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpbnQgdXNlQ291bnQgPSBfY291bnRDYWNoZWFibGVVc2VzKG5vZGUsIF9pc0NhY2hlYWJsZVVzZSk7CiAgICBpZiAodXNlQ291bnQgKiBzaXplIDw9IDcgKyBzaXplICsgdXNlQ291bnQgKiAxKSByZXR1cm47CiAgICBfY2FjaGUobm9kZSwgX2lzQ2FjaGVhYmxlVXNlLCAnXyR7dGV4dC5yZXBsYWNlRmlyc3QoIi0iLCAiXyIpfScpOwogIH0KCiAgdm9pZCBfaGFuZGxlU3RyaW5nKEhDb25zdGFudCBub2RlLCBTdHJpbmdDb25zdGFudFZhbHVlIHN0cmluZ0NvbnN0YW50KSB7CiAgICBTdHJpbmcgdmFsdWUgPSBzdHJpbmdDb25zdGFudC5zdHJpbmdWYWx1ZTsKICAgIGludCBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7CiAgICBpbnQgc2l6ZSA9IGxlbmd0aCArIDI7IC8vIEluY2x1ZGUgcXVvdGVzLgogICAgaWYgKHNpemUgPD0gMikgcmV0dXJuOwoKICAgIGJvb2wgX2lzQ2FjaGVhYmxlVXNlKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgICAvLyBGb3JlaWduIGNvZGUgdGVtcGxhdGVzIG1heSB1c2UgbGl0ZXJhbHMgaW4gd2F5cyB0aGF0IGFyZSBiZW5lZmljaWFsLgogICAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSEZvcmVpZ25Db2RlKSByZXR1cm4gZmFsc2U7CgogICAgICAvLyBDYWNoZSBsYXJnZXIgc3RyaW5ncyBldmVuIGlmIHVuZm9ydHVuYXRlLgogICAgICBpZiAobGVuZ3RoID49IDE2KSByZXR1cm4gdHJ1ZTsKCiAgICAgIGlmIChpbnN0cnVjdGlvbiBpcyBISW52b2tlKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGluc3RydWN0aW9uIGlzIEhDcmVhdGUpIHJldHVybiB0cnVlOwogICAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSFJldHVybikgcmV0dXJuIHRydWU7CiAgICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIUGhpKSByZXR1cm4gdHJ1ZTsKCiAgICAgIC8vIFRPRE8oc3JhKTogQ2hlY2sgaWYgYS54PSJzIiBjYW4gYXZvaWQgb3Igc3BlY2lhbGl6ZSBhIHdyaXRlIGJhcnJpZXIuCiAgICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIRmllbGRTZXQpIHJldHVybiB0cnVl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YWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvY29kZWdlbl9oZWxwZXJzLmRhcnQ5c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc3NhL3ZhcmlhYmxlX2FsbG9jYXRvci5kYXJ0wABckS8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hbWVyLmRhcnQnIHNob3cgTW9kdWxhck5hbWVyOwppbXBvcnQgJ2NvZGVnZW4uZGFydCcgc2hvdyBDb2RlZ2VuUGhhc2U7CmltcG9ydCAnbm9kZXMuZGFydCc7CgovLy8gVGhlIFtMaXZlUmFuZ2VdIGNsYXNzIGNvdmVycyBhIHJhbmdlIHdoZXJlIGFuIGluc3RydWN0aW9uIGlzIGxpdmUuCmNsYXNzIExpdmVSYW5nZSB7CiAgZmluYWwgaW50IHN0YXJ0OwogIC8vIFtlbmRdIGlzIG5vdCBmaW5hbCBiZWNhdXNlIGl0IGNhbiBiZSB1cGRhdGVkIGR1ZSB0byBsb29wcy4KICBpbnQgZW5kOwogIExpdmVSYW5nZSh0aGlzLnN0YXJ0LCB0aGlzLmVuZCkgewogICAgYXNzZXJ0KHN0YXJ0IDw9IGVuZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnWyRzdGFydCAkZW5kWyc7Cn0KCi8vLyBUaGUgW0xpdmVJbnRlcnZhbF0gY2xhc3MgY29udGFpbnMgdGhlIGxpc3Qgb2YgcmFuZ2VzIHdoZXJlIGFuCi8vLyBpbnN0cnVjdGlvbiBpcyBsaXZlLgpjbGFzcyBMaXZlSW50ZXJ2YWwgewogIC8vLyBUaGUgaWQgd2hlcmUgdGhlIGluc3RydWN0aW9uIGlzIGRlZmluZWQuCiAgaW50IHN0YXJ0OwogIGZpbmFsIExpc3Q8TGl2ZVJhbmdlPiByYW5nZXM7CiAgTGl2ZUludGVydmFsKCkgOiByYW5nZXMgPSA8TGl2ZVJhbmdlPltdOwoKICAvLyBXZSB3YW50IFtIQ2hlY2tdIGluc3RydWN0aW9ucyB0byBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlCiAgLy8gaW5zdHJ1Y3Rpb24gaXQgY2hlY2tzLCBzbyBib3RoIGluc3RydWN0aW9ucyBzaG91bGQgc2hhcmUgdGhlIHNhbWUKICAvLyBsaXZlIHJhbmdlcy4KICBMaXZlSW50ZXJ2YWwuZm9yQ2hlY2sodGhpcy5zdGFydCwgTGl2ZUludGVydmFsIGNoZWNrZWRJbnRlcnZhbCkKICAgICAgOiByYW5nZXMgPSBjaGVja2VkSW50ZXJ2YWwucmFuZ2VzOwoKICAvLy8gVXBkYXRlIGFsbCByYW5nZXMgdGhhdCBhcmUgY29udGFpbmVkIGluIFtmcm9tLCB0b1sgdG8KICAvLy8gZGllIGF0IFt0b10uCiAgdm9pZCBsb29wVXBkYXRlKGludCBmcm9tLCBpbnQgdG8pIHsKICAgIGZvciAoTGl2ZVJhbmdlIHJhbmdlIGluIHJhbmdlcykgewogICAgICBpZiAoZnJvbSA8PSByYW5nZS5zdGFydCAmJiByYW5nZS5lbmQgPCB0bykgewogICAgICAgIHJhbmdlLmVuZCA9IHRvOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gQWRkIGEgbmV3IHJhbmdlIHRvIHRoaXMgaW50ZXJ2YWwuCiAgdm9pZCBhZGQoTGl2ZVJhbmdlIGludGVydmFsKSB7CiAgICByYW5nZXMuYWRkKGludGVydmFsKTsKICB9CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgb25lIG9mIHRoZSByYW5nZXMgb2YgdGhpcyBpbnRlcnZhbCBkaWVzIGF0IFthdF0uCiAgYm9vbCBkaWVzQXQoaW50IGF0KSB7CiAgICBmb3IgKExpdmVSYW5nZSByYW5nZSBpbiByYW5nZXMpIHsKICAgICAgaWYgKHJhbmdlLmVuZCA9PSBhdCkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBMaXN0PFN0cmluZz4gcmVzID0gbmV3IExpc3Q8U3RyaW5nPigpOwogICAgZm9yIChmaW5hbCBpbnRlcnZhbCBpbiByYW5nZXMpIHJlcy5hZGQoaW50ZXJ2YWwudG9TdHJpbmcoKSk7CiAgICByZXR1cm4gJygke3Jlcy5qb2luKCIsICIpfSknOwogIH0KfQoKLy8vIFRoZSBbTGl2ZUVudmlyb25tZW50XSBjbGFzcyBjb250YWlucyB0aGUgbGl2ZUluIHNldCBvZiBhIGJhc2ljCi8vLyBibG9jay4gQSBsaXZlSW4gc2V0IG9mIGEgYmxvY2sgY29udGFpbnMgdGhlIGluc3RydWN0aW9ucyB0aGF0IGFyZQovLy8gbGl2ZSB3aGVuIGVudGVyaW5nIHRoYXQgYmxvY2suCmNsYXNzIExpdmVFbnZpcm9ubWVudCB7CiAgLy8vIFRoZSBpbnN0cnVjdGlvbiBpZCB3aGVyZSB0aGUgYmFzaWMgYmxvY2sgc3RhcnRzLiBTZWUKICAvLy8gW1NzYUxpdmVJbnRlcnZhbEJ1aWxkZXIuaW5zdHJ1Y3Rpb25JZF0uCiAgaW50IHN0YXJ0SWQ7CgogIC8vLyBUaGUgaW5zdHJ1Y3Rpb24gaWQgd2hlcmUgdGhlIGJhc2ljIGJsb2NrIGVuZHMuCiAgZmluYWwgaW50IGVuZElkOwoKICAvLy8gTG9vcCBtYXJrZXJzIHRoYXQgd2lsbCBiZSB1cGRhdGVkIG9uY2UgdGhlIGxvb3AgaGVhZGVyIGlzCiAgLy8vIHZpc2l0ZWQuIFRoZSBsaXZlSW4gc2V0IG9mIHRoZSBsb29wIGhlYWRlciB3aWxsIGJlIG1lcmdlZCBpbnRvIHRoaXMKICAvLy8gZW52aXJvbm1lbnQuIFtsb29wTWFya2Vyc10gaXMgYSBtYXBwaW5nIGZyb20gYmxvY2sgaGVhZGVyIHRvIHRoZQogIC8vLyBlbmQgaW5zdHJ1Y3Rpb24gaWQgb2YgdGhlIGxvb3AgZXhpdCBibG9jay4KICBmaW5hbCBNYXA8SEJhc2ljQmxvY2ssIGludD4gbG9vcE1hcmtlcnM7CgogIC8vLyBUaGUgaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIGxpdmUgaW4gdGhpcyBiYXNpYyBibG9jay4gVGhlIHZhbHVlcyBvZgogIC8vLyB0aGUgbWFwIGNvbnRhaW4gdGhlIGluc3RydWN0aW9uIGlkcyB3aGVyZSB0aGUgaW5zdHJ1Y3Rpb25zIGRpZS4KICAvLy8gSXQgd2lsbCBiZSB1c2VkIHdoZW4gYWRkaW5nIGEgcmFuZ2UgdG8gdGhlIGxpdmUgaW50ZXJ2YWwgb2YgYW4KICAvLy8gaW5zdHJ1Y3Rpb24uCiAgZmluYWwgTWFwPEhJbnN0cnVjdGlvbiwgaW50PiBsaXZlSW5zdHJ1Y3Rpb25zOwoKICAvLy8gTWFwIGNvbnRhaW5pbmcgdGhlIGxpdmUgaW50ZXJ2YWxzIG9mIGluc3RydWN0aW9ucy4KICBmaW5hbCBNYXA8SEluc3RydWN0aW9uLCBMaXZlSW50ZXJ2YWw+IGxpdmVJbnRlcnZhbHM7CgogIExpdmVFbnZpcm9ubWVudCh0aGlzLmxpdmVJbnRlcnZhbHMsIHRoaXMuZW5kSWQpCiAgICAgIDogbGl2ZUluc3RydWN0aW9ucyA9IG5ldyBNYXA8SEluc3RydWN0aW9uLCBpbnQ+KCksCiAgICAgICAgbG9vcE1hcmtlcnMgPSBuZXcgTWFwPEhCYXNpY0Jsb2NrLCBpbnQ+KCk7CgogIC8vLyBSZW1vdmUgYW4gaW5zdHJ1Y3Rpb24gZnJvbSB0aGUgbGl2ZUluIHNldC4gVGhpcyBtZXRob2QgYWxzbwogIC8vLyB1cGRhdGVzIHRoZSBsaXZlIGludGVydmFsIG9mIFtpbnN0cnVjdGlvbl0gdG8gY29udGFpbiB0aGUgbmV3CiAgLy8vIHJhbmdlOiBbaWQsIC8gaWQgY29udGFpbmVkIGluIFtsaXZlSW5zdHJ1Y3Rpb25zXSAvXS4KICB2b2lkIHJlbW92ZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24sIGludCBpZCkgewogICAgTGl2ZUludGVydmFsIGludGVydmFsID0KICAgICAgICBsaXZlSW50ZXJ2YWxzLnB1dElmQWJzZW50KGluc3RydWN0aW9uLCAoKSA9PiBuZXcgTGl2ZUludGVydmFsKCkpOwogICAgaW50IGxhc3RJZCA9IGxpdmVJbnN0cnVjdGlvbnNbaW5zdHJ1Y3Rpb25dOwogICAgLy8gSWYgW2xhc3RJZF0gaXMgbnVsbCwgdGhlbiB0aGlzIGluc3RydWN0aW9uIGlzIG5vdCBiZWluZyB1c2VkLgogICAgaW50ZXJ2YWwuYWRkKG5ldyBMaXZlUmFuZ2UoaWQsIGxhc3RJZCA9PSBudWxsID8gaWQgOiBsYXN0SWQpKTsKICAgIC8vIFRoZSBpbnN0cnVjdGlvbiBpcyBkZWZpbmVkIGF0IFtpZF0uCiAgICBpbnRlcnZhbC5zdGFydCA9IGlkOwogICAgbGl2ZUluc3RydWN0aW9ucy5yZW1vdmUoaW5zdHJ1Y3Rpb24pOwogIH0KCiAgLy8vIEFkZCBbaW5zdHJ1Y3Rpb25dIHRvIHRoZSBsaXZlSW4gc2V0LiBJZiB0aGUgaW5zdHJ1Y3Rpb24gaXMgbm90CiAgLy8vIGFscmVhZHkgaW4gdGhlIHNldCwgd2Ugc2F2ZSB0aGUgaWQgd2hlcmUgaXQgZGllcy4KICB2b2lkIGFkZChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24sIGludCB1c2VySWQpIHsKICAgIC8vIE5vdGUgdGhhdCB3ZSBhcmUgdmlzaXRpbmcgdGhlIGdyYXBoIGluIHBvc3QtZG9taW5hdG9yIG9yZGVyLCBzbwogICAgLy8gdGhlIGZpcnN0IHRpbWUgd2Ugc2VlIGEgdmFyaWFibGUgaXMgd2hlbiBpdCBkaWVzLgogICAgbGl2ZUluc3RydWN0aW9ucy5wdXRJZkFic2VudChpbnN0cnVjdGlvbiwgKCkgPT4gdXNlcklkKTsKICB9CgogIC8vLyBNZXJnZSB0aGlzIGVudmlyb25tZW50IHdpdGggW290aGVyXS4gVXBkYXRlIHRoZSBlbmQgaWQgb2YKICAvLy8gaW5zdHJ1Y3Rpb25zIGluIGNhc2UgdGhleSBhcmUgZGlmZmVyZW50IGJldHdlZW4gdGhpcyBhbmQgW290aGVyXS4KICB2b2lkIG1lcmdlV2l0aChMaXZlRW52aXJvbm1lbnQgb3RoZXIpIHsKICAgIG90aGVyLmxpdmVJbnN0cnVjdGlvbnMuZm9yRWFjaCgoSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBpbnQgZXhpc3RpbmdJZCkgewogICAgICAvLyBJZiBib3RoIGVudmlyb25tZW50cyBoYXZlIHRoZSBzYW1lIGluc3RydWN0aW9uIGlkIG9mIHdoZXJlCiAgICAgIC8vIFtpbnN0cnVjdGlvbl0gZGllcywgdGhlcmUgaXMgbm8gbmVlZCB0byB1cGRhdGUgdGhlIGxpdmUKICAgICAgLy8gaW50ZXJ2YWwgb2YgW2luc3RydWN0aW9uXS4gRm9yIGV4YW1wbGUgdGhlIGlmIGJsb2NrIGFuZCB0aGUKICAgICAgLy8gZWxzZSBibG9jayBoYXZlIHRoZSBzYW1lIGVuZCBpZCBmb3IgYW4gaW5zdHJ1Y3Rpb24gdGhhdCBpcwogICAgICAvLyBiZWluZyB1c2VkIGluIHRoZSBqb2luIGJsb2NrIGFuZCBkZWZpbmVkIGJlZm9yZSB0aGUgaWYvZWxzZS4KICAgICAgaWYgKGV4aXN0aW5nSWQgPT0gZW5kSWQpIHJldHVybjsKICAgICAgTGl2ZUludGVydmFsIHJhbmdlID0KICAgICAgICAgIGxpdmVJbnRlcnZhbHMucHV0SWZBYnNlbnQoaW5zdHJ1Y3Rpb24sICgpID0+IG5ldyBMaXZlSW50ZXJ2YWwoKSk7CiAgICAgIHJhbmdlLmFkZChuZXcgTGl2ZVJhbmdlKG90aGVyLnN0YXJ0SWQsIGV4aXN0aW5nSWQpKTsKICAgICAgbGl2ZUluc3RydWN0aW9uc1tpbnN0cnVjdGlvbl0gPSBlbmRJZDsKICAgIH0pOwogICAgb3RoZXIubG9vcE1hcmtlcnMuZm9yRWFjaCgoaywgdikgewogICAgICBsb29wTWFya2Vyc1trXSA9IHY7CiAgICB9KTsKICB9CgogIHZvaWQgYWRkTG9vcE1hcmtlcihIQmFzaWNCbG9jayBoZWFkZXIsIGludCBpZCkgewogICAgYXNzZXJ0KCFsb29wTWFya2Vycy5jb250YWluc0tleShoZWFkZXIpKTsKICAgIGxvb3BNYXJrZXJzW2hlYWRlcl0gPSBpZDsKICB9CgogIHZvaWQgcmVtb3ZlTG9vcE1hcmtlcihIQmFzaWNCbG9jayBoZWFkZXIpIHsKICAgIGFzc2VydChsb29wTWFya2Vycy5jb250YWluc0tleShoZWFkZXIpKTsKICAgIGxvb3BNYXJrZXJzLnJlbW92ZShoZWFkZXIpOwogIH0KCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBsaXZlSW5zdHJ1Y3Rpb25zLmlzRW1wdHkgJiYgbG9vcE1hcmtlcnMuaXNFbXB0eTsKICBib29sIGNvbnRhaW5zKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgPT4KICAgICAgbGl2ZUluc3RydWN0aW9ucy5jb250YWluc0tleShpbnN0cnVjdGlvbik7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gbGl2ZUluc3RydWN0aW9ucy50b1N0cmluZygpOwp9CgovLy8gQnVpbGRzIHRoZSBsaXZlIGludGVydmFscyBvZiBlYWNoIGluc3RydWN0aW9uLiBUaGUgYWxnb3JpdGhtIHZpc2l0cwovLy8gdGhlIGdyYXBoIHBvc3QtZG9taW5hdG9yIHRyZWUgdG8gZmluZCB0aGUgbGFzdCB1c2VzIG9mIGFuCi8vLyBpbnN0cnVjdGlvbiwgYW5kIGNvbXB1dGVzIHRoZSBsaXZlSW5zIG9mIGVhY2ggYmFzaWMgYmxvY2suCmNsYXNzIFNzYUxpdmVJbnRlcnZhbEJ1aWxkZXIgZXh0ZW5kcyBIQmFzZVZpc2l0b3Igd2l0aCBDb2RlZ2VuUGhhc2UgewogIGZpbmFsIFNldDxISW5zdHJ1Y3Rpb24+IGdlbmVyYXRlQXRVc2VTaXRlOwogIGZpbmFsIFNldDxISW5zdHJ1Y3Rpb24+IGNvbnRyb2xGbG93T3BlcmF0b3JzOwoKICAvLy8gQSBjb3VudGVyIHRvIGFzc2lnbiBzdGFydCBhbmQgZW5kIGlkcyB0byBsaXZlIHJhbmdlcy4gVGhlIGluaXRpYWwKICAvLy8gdmFsdWUgaXMgbm90IHJlbGV2YW50LiBOb3RlIHRoYXQgaW5zdHJ1Y3Rpb25JZCBnb2VzIGRvd253YXJkIHRvIGVhc2UKICAvLy8gcmVhc29uaW5nIGFib3V0IGxpdmUgcmFuZ2VzICh0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24gb2YgYSBncmFwaCBoYXMKICAvLy8gdGhlIGxvd2VzdCBpZCkuCiAgaW50IGluc3RydWN0aW9uSWQgPSAwOwoKICAvLy8gVGhlIGxpdmVJbnMgb2YgYmFzaWMgYmxvY2tzLgogIGZpbmFsIE1hcDxIQmFzaWNCbG9jaywgTGl2ZUVudmlyb25tZW50PiBsaXZlSW5zdHJ1Y3Rpb25zOwoKICAvLy8gVGhlIGxpdmUgaW50ZXJ2YWxzIG9mIGluc3RydWN0aW9ucy4KICBmaW5hbCBNYXA8SEluc3RydWN0aW9uLCBMaXZlSW50ZXJ2YWw+IGxpdmVJbnRlcnZhbHM7CgogIFNzYUxpdmVJbnRlcnZhbEJ1aWxkZXIodGhpcy5nZW5lcmF0ZUF0VXNlU2l0ZSwgdGhpcy5jb250cm9sRmxvd09wZXJhdG9ycykKICAgICAgOiBsaXZlSW5zdHJ1Y3Rpb25zID0gbmV3IE1hcDxIQmFzaWNCbG9jaywgTGl2ZUVudmlyb25tZW50PigpLAogICAgICAgIGxpdmVJbnRlcnZhbHMgPSBuZXcgTWFwPEhJbnN0cnVjdGlvbiwgTGl2ZUludGVydmFsPigpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0R3JhcGgoSEdyYXBoIGdyYXBoKSB7CiAgICB2aXNpdFBvc3REb21pbmF0b3JUcmVlKGdyYXBoKTsKICAgIGlmICghbGl2ZUluc3RydWN0aW9uc1tncmFwaC5lbnRyeV0uaXNFbXB0eSkgewogICAgICBmYWlsZWRBdChDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLCAnTGl2ZUludGVydmFsQnVpbGRlci4nKTsKICAgIH0KICB9CgogIHZvaWQgbWFya0lucHV0c0FzTGl2ZUluRW52aXJvbm1lbnQoCiAgICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiwgTGl2ZUVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICBmb3IgKGludCBpID0gMCwgbGVuID0gaW5zdHJ1Y3Rpb24uaW5wdXRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIG1hcmtBc0xpdmVJbkVudmlyb25tZW50KGluc3RydWN0aW9uLmlucHV0c1tpXSwgZW52aXJvbm1lbnQpOwogICAgfQogIH0KCiAgLy8gUmV0dXJucyB0aGUgbm9uLUhDaGVjayBpbnN0cnVjdGlvbiwgb3IgdGhlIGxhc3QgW0hDaGVja10gaW4gdGhlCiAgLy8gY2hlY2sgY2hhaW4gdGhhdCBpcyBub3QgZ2VuZXJhdGUgYXQgdXNlIHNpdGUuCiAgLy8KICAvLyBGb3IgZXhhbXBsZToKICAvLwogIC8vICAgICB0MSA9IEdlbmVyYXRlZEF0VXNlU2l0ZSBpbnN0cnVjdGlvbgogIC8vICAgICB0MiA9IGNoZWNrKHQxKQogIC8vICAgICB0MyA9IGNoZWNrKHQyKQogIC8vICAgICB0NCA9IHVzZSh0MykKICAvLyAgICAgdDUgPSB1c2UodDMpCiAgLy8gICAgIHQ2ID0gdXNlKHQyKQogIC8vCiAgLy8gVGhlIHQxIGlzIGdlbmVyYXRlLWF0LXVzZSBzaXRlLCBhbmQgdGhlIGxpdmUtcmFuZ2UgbXVzdCB0aHVzIGJlIG9uIHQyIGFuZAogIC8vIG5vdCBvbiB0aGUgY2hlY2tlZCBpbnN0cnVjdGlvbiB0MS4KICAvLyBXaGVuIGxvb2tpbmcgZm9yIHRoZSBjaGVja2VkSW5zdHJ1Y3Rpb25Pck5vbkdlbmVyYXRlQXRVc2VTaXRlIG9mIHQzIHdlIG11c3QKICAvLyByZXR1cm4gdDIuCiAgSEluc3RydWN0aW9uIGNoZWNrZWRJbnN0cnVjdGlvbk9yTm9uR2VuZXJhdGVBdFVzZVNpdGUoSENoZWNrIGNoZWNrKSB7CiAgICBkeW5hbWljIGNoZWNrZWQgPSBjaGVjay5jaGVja2VkSW5wdXQ7CiAgICB3aGlsZSAoY2hlY2tlZCBpcyBIQ2hlY2spIHsKICAgICAgSEluc3RydWN0aW9uIG5leHQgPSBjaGVja2VkLmNoZWNrZWRJbnB1dDsKICAgICAgaWYgKGdlbmVyYXRlQXRVc2VTaXRlLmNvbnRhaW5zKG5leHQpKSBicmVhazsKICAgICAgY2hlY2tlZCA9IG5leHQ7CiAgICB9CiAgICByZXR1cm4gY2hlY2tlZDsKICB9CgogIHZvaWQgbWFya0FzTGl2ZUluRW52aXJvbm1lbnQoCiAgICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiwgTGl2ZUVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICBpZiAoZ2VuZXJhdGVBdFVzZVNpdGUuY29udGFpbnMoaW5zdHJ1Y3Rpb24pKSB7CiAgICAgIG1hcmtJbnB1dHNBc0xpdmVJbkVudmlyb25tZW50KGluc3RydWN0aW9uLCBlbnZpcm9ubWVudCk7CiAgICB9IGVsc2UgewogICAgICBlbnZpcm9ubWVudC5hZGQoaW5zdHJ1Y3Rpb24sIGluc3RydWN0aW9uSWQpOwogICAgICAvLyBTcGVjaWFsIGNhc2UgdGhlIEhDaGVjayBpbnN0cnVjdGlvbiB0byBtYXJrIHRoZSBhY3R1YWwKICAgICAgLy8gY2hlY2tlZCBpbnN0cnVjdGlvbiBsaXZlLiBUaGUgY2hlY2tlZCBpbnN0cnVjdGlvbiBhbmQgdGhlCiAgICAgIC8vIFtIQ2hlY2tdIHdpbGwgc2hhcmUgdGhlIHNhbWUgbGl2ZSByYW5nZXMuCiAgICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIQ2hlY2spIHsKICAgICAgICBIQ2hlY2sgY2hlY2sgPSBpbnN0cnVjdGlvbjsKICAgICAgICBISW5zdHJ1Y3Rpb24gY2hlY2tlZCA9IGNoZWNrZWRJbnN0cnVjdGlvbk9yTm9uR2VuZXJhdGVBdFVzZVNpdGUoY2hlY2spOwogICAgICAgIGlmICghZ2VuZXJhdGVBdFVzZVNpdGUuY29udGFpbnMoY2hlY2tlZCkpIHsKICAgICAgICAgIGVudmlyb25tZW50LmFkZChjaGVja2VkLCBpbnN0cnVjdGlvbklkKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgcmVtb3ZlRnJvbUVudmlyb25tZW50KAogICAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24sIExpdmVFbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgZW52aXJvbm1lbnQucmVtb3ZlKGluc3RydWN0aW9uLCBpbnN0cnVjdGlvbklkKTsKICAgIC8vIFNwZWNpYWwgY2FzZSB0aGUgSENoZWNrIGluc3RydWN0aW9uIHRvIGhhdmUgdGhlIHNhbWUgbGl2ZQogICAgLy8gaW50ZXJ2YWwgYXMgdGhlIGluc3RydWN0aW9uIGl0IGlzIGNoZWNraW5nLgogICAgaWYgKGluc3RydWN0aW9uIGlzIEhDaGVjaykgewogICAgICBIQ2hlY2sgY2hlY2sgPSBpbnN0cnVjdGlvbjsKICAgICAgSEluc3RydWN0aW9uIGNoZWNrZWQgPSBjaGVja2VkSW5zdHJ1Y3Rpb25Pck5vbkdlbmVyYXRlQXRVc2VTaXRlKGNoZWNrKTsKICAgICAgaWYgKCFnZW5lcmF0ZUF0VXNlU2l0ZS5jb250YWlucyhjaGVja2VkKSkgewogICAgICAgIGxpdmVJbnRlcnZhbHMucHV0SWZBYnNlbnQoY2hlY2tlZCwgKCkgPT4gbmV3IExpdmVJbnRlcnZhbCgpKTsKICAgICAgICAvLyBVbmNvbmRpdGlvbmFsbHkgZm9yY2UgdGhlIGxpdmUgcmFuZ2VzIG9mIHRoZSBIQ2hlY2sgdG8KICAgICAgICAvLyBiZSB0aGUgbGl2ZSByYW5nZXMgb2YgdGhlIGluc3RydWN0aW9uIGl0IGlzIGNoZWNraW5nLgogICAgICAgIGxpdmVJbnRlcnZhbHNbaW5zdHJ1Y3Rpb25dID0KICAgICAgICAgICAgbmV3IExpdmVJbnRlcnZhbC5mb3JDaGVjayhpbnN0cnVjdGlvbklkLCBsaXZlSW50ZXJ2YWxzW2NoZWNrZWRdKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJhc2ljQmxvY2soSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIExpdmVFbnZpcm9ubWVudCBlbnZpcm9ubWVudCA9CiAgICAgICAgbmV3IExpdmVFbnZpcm9ubWVudChsaXZlSW50ZXJ2YWxzLCBpbnN0cnVjdGlvbklkKTsKCiAgICAvLyBJZiB0aGUgY29udHJvbCBmbG93IGluc3RydWN0aW9uIGluIHRoaXMgYmxvY2sgd2lsbCBhY3R1YWxseSBiZQogICAgLy8gaW5saW5lZCBpbiB0aGUgY29kZWdlbiBpbiB0aGUgam9pbiBibG9jaywgd2UgbmVlZCB0byBtYWtlCiAgICAvLyB3aGF0ZXZlciBpcyB1c2VkIGJ5IHRoYXQgY29udHJvbCBmbG93IGluc3RydWN0aW9uIGFzIGxpdmUgaW4KICAgIC8vIHRoZSBqb2luIGJsb2NrLgogICAgaWYgKGNvbnRyb2xGbG93T3BlcmF0b3JzLmNvbnRhaW5zKGJsb2NrLmxhc3QpKSB7CiAgICAgIEhJZiBpZkluc3RydWN0aW9uID0gYmxvY2subGFzdDsKICAgICAgSEJhc2ljQmxvY2sgam9pbkJsb2NrID0gaWZJbnN0cnVjdGlvbi5qb2luQmxvY2s7CiAgICAgIGlmIChnZW5lcmF0ZUF0VXNlU2l0ZS5jb250YWlucyhqb2luQmxvY2sucGhpcy5maXJzdCkpIHsKICAgICAgICBtYXJrSW5wdXRzQXNMaXZlSW5FbnZpcm9ubWVudCgKICAgICAgICAgICAgaWZJbnN0cnVjdGlvbiwgbGl2ZUluc3RydWN0aW9uc1tqb2luQmxvY2tdKTsKICAgICAgfQogICAgfQoKICAgIC8vIEFkZCB0byB0aGUgZW52aXJvbm1lbnQgdGhlIGxpdmVJbiBvZiBpdHMgc3VjY2Vzc29yLCBhcyB3ZWxsIGFzCiAgICAvLyB0aGUgaW5wdXRzIG9mIHRoZSBwaGlzIG9mIHRoZSBzdWNjZXNzb3IgdGhhdCBmbG93IGZyb20gdGhpcyBibG9jay4KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmxvY2suc3VjY2Vzc29ycy5sZW5ndGg7IGkrKykgewogICAgICBIQmFzaWNCbG9jayBzdWNjZXNzb3IgPSBibG9jay5zdWNjZXNzb3JzW2ldOwogICAgICBMaXZlRW52aXJvbm1lbnQgc3VjY2Vzc29yRW52ID0gbGl2ZUluc3RydWN0aW9uc1tzdWNjZXNzb3JdOwogICAgICBpZiAoc3VjY2Vzc29yRW52ICE9IG51bGwpIHsKICAgICAgICBlbnZpcm9ubWVudC5tZXJnZVdpdGgoc3VjY2Vzc29yRW52KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBlbnZpcm9ubWVudC5hZGRMb29wTWFya2VyKHN1Y2Nlc3NvciwgaW5zdHJ1Y3Rpb25JZCk7CiAgICAgIH0KCiAgICAgIGludCBpbmRleCA9IHN1Y2Nlc3Nvci5wcmVkZWNlc3NvcnMuaW5kZXhPZihibG9jayk7CiAgICAgIGZvciAoSFBoaSBwaGkgPSBzdWNjZXNzb3IucGhpcy5maXJzdDsgcGhpICE9IG51bGw7IHBoaSA9IHBoaS5uZXh0KSB7CiAgICAgICAgbWFya0FzTGl2ZUluRW52aXJvbm1lbnQocGhpLmlucHV0c1tpbmRleF0sIGVudmlyb25tZW50KTsKICAgICAgfQogICAgfQoKICAgIC8vIEl0ZXJhdGUgb3ZlciBhbGwgaW5zdHJ1Y3Rpb25zIHRvIHJlbW92ZSBhbiBpbnN0cnVjdGlvbiBmcm9tIHRoZQogICAgLy8gZW52aXJvbm1lbnQgYW5kIGFkZCBpdHMgaW5wdXRzLgogICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gYmxvY2subGFzdDsKICAgIHdoaWxlIChpbnN0cnVjdGlvbiAhPSBudWxsKSB7CiAgICAgIGlmICghZ2VuZXJhdGVBdFVzZVNpdGUuY29udGFpbnMoaW5zdHJ1Y3Rpb24pKSB7CiAgICAgICAgcmVtb3ZlRnJvbUVudmlyb25tZW50KGluc3RydWN0aW9uLCBlbnZpcm9ubWVudCk7CiAgICAgICAgbWFya0lucHV0c0FzTGl2ZUluRW52aXJvbm1lbnQoaW5zdHJ1Y3Rpb24sIGVudmlyb25tZW50KTsKICAgICAgfQogICAgICBpbnN0cnVjdGlvbklkLS07CiAgICAgIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb24ucHJldmlvdXM7CiAgICB9CgogICAgLy8gV2UganVzdCByZW1vdmUgdGhlIHBoaXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuIFRoZSBpbnB1dHMgb2YgdGhlCiAgICAvLyBwaGlzIHdpbGwgYmUgcHV0IGluIHRoZSBlbnZpcm9ubWVudCBvZiB0aGUgcHJlZGVjZXNzb3JzLgogICAgZm9yIChIUGhpIHBoaSA9IGJsb2NrLnBoaXMuZmlyc3Q7IHBoaSAhPSBudWxsOyBwaGkgPSBwaGkubmV4dCkgewogICAgICBpZiAoIWdlbmVyYXRlQXRVc2VTaXRlLmNvbnRhaW5zKHBoaSkpIHsKICAgICAgICBlbnZpcm9ubWVudC5yZW1vdmUocGhpLCBpbnN0cnVjdGlvbklkKTsKICAgICAgfQogICAgfQoKICAgIC8vIFNhdmUgdGhlIGxpdmVJbnN0cnVjdGlvbnMgb2YgdGhhdCBibG9jay4KICAgIGVudmlyb25tZW50LnN0YXJ0SWQgPSBpbnN0cnVjdGlvbklkICsgMTsKICAgIGxpdmVJbnN0cnVjdGlvbnNbYmxvY2tdID0gZW52aXJvbm1lbnQ7CgogICAgLy8gSWYgdGhlIGJsb2NrIGlzIGEgbG9vcCBoZWFkZXIsIHdlIGNhbiByZW1vdmUgdGhlIGxvb3AgbWFya2VyLAogICAgLy8gYmVjYXVzZSBpdCB3aWxsIGp1c3QgcmVjb21wdXRlIHRoZSBsb29wIHBoaXMuCiAgICAvLyBXZSBhbHNvIGNoZWNrIGlmIHRoaXMgbG9vcCBoZWFkZXIgaGFzIGFueSBiYWNrIGVkZ2VzLiBJZiBub3QsCiAgICAvLyB3ZSBrbm93IHRoZXJlIGlzIG5vIGxvb3AgbWFya2VyIGZvciBpdC4KICAgIGlmIChibG9jay5pc0xvb3BIZWFkZXIoKSAmJiBibG9jay5wcmVkZWNlc3NvcnMubGVuZ3RoID4gMSkgewogICAgICB1cGRhdGVMb29wTWFya2VyKGJsb2NrKTsKICAgIH0KICB9CgogIHZvaWQgdXBkYXRlTG9vcE1hcmtlcihIQmFzaWNCbG9jayBoZWFkZXIpIHsKICAgIExpdmVFbnZpcm9ubWVudCBlbnYgPSBsaXZlSW5zdHJ1Y3Rpb25zW2hlYWRlcl07CiAgICBpbnQgbGFzdElkID0gZW52Lmxvb3BNYXJrZXJzW2hlYWRlcl07CiAgICAvLyBVcGRhdGUgYWxsIGluc3RydWN0aW9ucyB0aGF0IGFyZSBsaXZlSW5zIGluIFtoZWFkZXJdIHRvIGhhdmUgYQogICAgLy8gcmFuZ2UgdGhhdCBjb3ZlcnMgdGhlIGxvb3AuCiAgICBlbnYubGl2ZUluc3RydWN0aW9ucy5mb3JFYWNoKChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24sIGludCBpZCkgewogICAgICBMaXZlSW50ZXJ2YWwgcmFuZ2UgPQogICAgICAgICAgZW52LmxpdmVJbnRlcnZhbHMucHV0SWZBYnNlbnQoaW5zdHJ1Y3Rpb24sICgpID0+IG5ldyBMaXZlSW50ZXJ2YWwoKSk7CiAgICAgIHJhbmdlLmxvb3BVcGRhdGUoZW52LnN0YXJ0SWQsIGxhc3RJZCk7CiAgICAgIGVudi5saXZlSW5zdHJ1Y3Rpb25zW2luc3RydWN0aW9uXSA9IGxhc3RJZDsKICAgIH0pOwoKICAgIGVudi5yZW1vdmVMb29wTWFya2VyKGhlYWRlcik7CgogICAgLy8gVXBkYXRlIGFsbCBsaXZlSW5zIHNldCB0byBjb250YWluIHRoZSBsaXZlSW5zIG9mIFtoZWFkZXJdLgogICAgbGl2ZUluc3RydWN0aW9ucy5mb3JFYWNoKChIQmFzaWNCbG9jayBibG9jaywgTGl2ZUVudmlyb25tZW50IG90aGVyKSB7CiAgICAgIGlmIChvdGhlci5sb29wTWFya2Vycy5jb250YWluc0tleShoZWFkZXIpKSB7CiAgICAgICAgZW52LmxpdmVJbnN0cnVjdGlvbnMuZm9yRWFjaCgoSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBpbnQgaWQpIHsKICAgICAgICAgIG90aGVyLmxpdmVJbnN0cnVjdGlvbnNbaW5zdHJ1Y3Rpb25dID0gaWQ7CiAgICAgICAgfSk7CiAgICAgICAgb3RoZXIucmVtb3ZlTG9vcE1hcmtlcihoZWFkZXIpOwogICAgICAgIGVudi5sb29wTWFya2Vycy5mb3JFYWNoKChrLCB2KSB7CiAgICAgICAgICBvdGhlci5sb29wTWFya2Vyc1trXSA9IHY7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0pOwogIH0KfQoKLy8vIFJlcHJlc2VudHMgYSBjb3B5IGZyb20gb25lIGluc3RydWN0aW9uIHRvIGFub3RoZXIuIFRoZSBjb2RlZ2VuCi8vLyBhbHNvIHVzZXMgdGhpcyBjbGFzcyB0byByZXByZXNlbnQgYSBjb3B5IGZyb20gb25lIHZhcmlhYmxlIHRvCi8vLyBhbm90aGVyLgpjbGFzcyBDb3B5PFQ+IHsKICBmaW5hbCBUIHNvdXJjZTsKICBmaW5hbCBUIGRlc3RpbmF0aW9uOwoKICBDb3B5KHRoaXMuc291cmNlLCB0aGlzLmRlc3RpbmF0aW9uKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyRkZXN0aW5hdGlvbiA8LSAkc291cmNlJzsKfQoKLy8vIEEgY29weSBoYW5kbGVyIGNvbnRhaW5zIHRoZSBjb3BpZXMgdGhhdCBhIGJhc2ljIGJsb2NrIG5lZWRzIHRvIGRvCi8vLyBhZnRlciBleGVjdXRpbmcgYWxsIGl0cyBpbnN0cnVjdGlvbnMuCmNsYXNzIENvcHlIYW5kbGVyIHsKICAvLy8gVGhlIGNvcGllcyBmcm9tIGFuIGluc3RydWN0aW9uIHRvIGEgcGhpIG9mIHRoZSBzdWNjZXNzb3IuCiAgZmluYWwgTGlzdDxDb3B5PEhJbnN0cnVjdGlvbj4+IGNvcGllczsKCiAgLy8vIEFzc2lnbm1lbnRzIGZyb20gYW4gaW5zdHJ1Y3Rpb24gdGhhdCBkb2VzIG5vdCBuZWVkIGEgbmFtZSAoZS5nLiBhCiAgLy8vIGNvbnN0YW50KSB0byB0aGUgcGhpIG9mIGEgc3VjY2Vzc29yLgogIGZpbmFsIExpc3Q8Q29weTxISW5zdHJ1Y3Rpb24+PiBhc3NpZ25tZW50czsKCiAgQ29weUhhbmRsZXIoKQogICAgICA6IGNvcGllcyA9IG5ldyBMaXN0PENvcHk8SEluc3RydWN0aW9uPj4oKSwKICAgICAgICBhc3NpZ25tZW50cyA9IG5ldyBMaXN0PENvcHk8SEluc3RydWN0aW9uPj4oKTsKCiAgdm9pZCBhZGRDb3B5KEhJbnN0cnVjdGlvbiBzb3VyY2UsIEhJbnN0cnVjdGlvbiBkZXN0aW5hdGlvbikgewogICAgY29waWVzLmFkZChuZXcgQ29weTxISW5zdHJ1Y3Rpb24+KHNvdXJjZSwgZGVzdGluYXRpb24pKTsKICB9CgogIHZvaWQgYWRkQXNzaWdubWVudChISW5zdHJ1Y3Rpb24gc291cmNlLCBISW5zdHJ1Y3Rpb24gZGVzdGluYXRpb24pIHsKICAgIGFzc2lnbm1lbnRzLmFkZChuZXcgQ29weTxISW5zdHJ1Y3Rpb24+KHNvdXJjZSwgZGVzdGluYXRpb24pKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdDb3BpZXM6ICRjb3BpZXMsIGFzc2lnbm1lbnRzOiAkYXNzaWdubWVudHMnOwoKICBib29sIGdldCBpc0VtcHR5ID0+IGNvcGllcy5pc0VtcHR5ICYmIGFzc2lnbm1lbnRzLmlzRW1wdHk7Cn0KCi8vLyBDb250YWlucyB0aGUgbWFwcGluZyBiZXR3ZWVuIGluc3RydWN0aW9ucyBhbmQgdGhlaXIgbmFtZXMgZm9yIGNvZGUKLy8vIGdlbmVyYXRpb24sIGFzIHdlbGwgYXMgdGhlIFtDb3B5SGFuZGxlcl0gZm9yIGVhY2ggYmFzaWMgYmxvY2suCmNsYXNzIFZhcmlhYmxlTmFtZXMgewogIGZpbmFsIE1hcDxISW5zdHJ1Y3Rpb24sIFN0cmluZz4gb3duTmFtZTsKICBmaW5hbCBNYXA8SEJhc2ljQmxvY2ssIENvcHlIYW5kbGVyPiBjb3B5SGFuZGxlcnM7CgogIC8vIFVzZWQgdG8gY29udHJvbCBoZXVyaXN0aWMgdGhhdCBkZXRlcm1pbmVzIGhvdyBsb2NhbCB2YXJpYWJsZXMgYXJlIGRlY2xhcmVkLgogIGZpbmFsIFNldDxTdHJpbmc+IGFsbFVzZWROYW1lczsKCiAgLy8vIE5hbWUgdGhhdCBpcyB1c2VkIGFzIGEgdGVtcG9yYXJ5IHRvIGJyZWFrIGN5Y2xlcyBpbgogIC8vLyBwYXJhbGxlbCBjb3BpZXMuIFdlIG1ha2Ugc3VyZSB0aGlzIG5hbWUgaXMgbm90IGJlaW5nIHVzZWQKICAvLy8gYW55d2hlcmUgYnkgcmVzZXJ2aW5nIGl0IHdoZW4gd2UgYWxsb2NhdGUgbmFtZXMgZm9yIGluc3RydWN0aW9ucy4KICBmaW5hbCBTdHJpbmcgc3dhcFRlbXA7CgogIFN0cmluZyBnZXRTd2FwVGVtcCgpIHsKICAgIGFsbFVzZWROYW1lcy5hZGQoc3dhcFRlbXApOwogICAgcmV0dXJuIHN3YXBUZW1wOwogIH0KCiAgVmFyaWFibGVOYW1lcygpCiAgICAgIDogb3duTmFtZSA9IG5ldyBNYXA8SEluc3RydWN0aW9uLCBTdHJpbmc+KCksCiAgICAgICAgY29weUhhbmRsZXJzID0gbmV3IE1hcDxIQmFzaWNCbG9jaywgQ29weUhhbmRsZXI+KCksCiAgICAgICAgYWxsVXNlZE5hbWVzID0gbmV3IFNldDxTdHJpbmc+KCksCiAgICAgICAgc3dhcFRlbXAgPSAndDAnOwoKICBpbnQgZ2V0IG51bWJlck9mVmFyaWFibGVzID0+IGFsbFVzZWROYW1lcy5sZW5ndGg7CgogIFN0cmluZyBnZXROYW1lKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgcmV0dXJuIG93bk5hbWVbaW5zdHJ1Y3Rpb25dOwogIH0KCiAgQ29weUhhbmRsZXIgZ2V0Q29weUhhbmRsZXIoSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIHJldHVybiBjb3B5SGFuZGxlcnNbYmxvY2tdOwogIH0KCiAgdm9pZCBhZGROYW1lVXNlZChTdHJpbmcgbmFtZSkgewogICAgYWxsVXNlZE5hbWVzLmFkZChuYW1lKTsKICB9CgogIGJvb2wgaGFzTmFtZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pID0+IG93bk5hbWUuY29udGFpbnNLZXkoaW5zdHJ1Y3Rpb24pOwoKICB2b2lkIGFkZENvcHkoSEJhc2ljQmxvY2sgYmxvY2ssIEhJbnN0cnVjdGlvbiBzb3VyY2UsIEhQaGkgZGVzdGluYXRpb24pIHsKICAgIENvcHlIYW5kbGVyIGhhbmRsZXIgPQogICAgICAgIGNvcHlIYW5kbGVycy5wdXRJZkFic2VudChibG9jaywgKCkgPT4gbmV3IENvcHlIYW5kbGVyKCkpOwogICAgaGFuZGxlci5hZGRDb3B5KHNvdXJjZSwgZGVzdGluYXRpb24pOwogIH0KCiAgdm9pZCBhZGRBc3NpZ25tZW50KEhCYXNpY0Jsb2NrIGJsb2NrLCBISW5zdHJ1Y3Rpb24gc291cmNlLCBIUGhpIGRlc3RpbmF0aW9uKSB7CiAgICBDb3B5SGFuZGxlciBoYW5kbGVyID0KICAgICAgICBjb3B5SGFuZGxlcnMucHV0SWZBYnNlbnQoYmxvY2ssICgpID0+IG5ldyBDb3B5SGFuZGxlcigpKTsKICAgIGhhbmRsZXIuYWRkQXNzaWdubWVudChzb3VyY2UsIGRlc3RpbmF0aW9uKTsKICB9Cn0KCi8vLyBBbGxvY2F0ZXMgdmFyaWFibGUgbmFtZXMgZm9yIGluc3RydWN0aW9ucywgbWFraW5nIHN1cmUgdGhleSBkb24ndCBjb2xsaWRlLgpjbGFzcyBWYXJpYWJsZU5hbWVyIHsKICBmaW5hbCBWYXJpYWJsZU5hbWVzIG5hbWVzOwogIGZpbmFsIE1vZHVsYXJOYW1lciBfbmFtZXI7CiAgZmluYWwgU2V0PFN0cmluZz4gdXNlZE5hbWVzOwogIGZpbmFsIExpc3Q8U3RyaW5nPiBmcmVlVGVtcG9yYXJ5TmFtZXM7CiAgaW50IHRlbXBvcmFyeUluZGV4ID0gMDsKICBzdGF0aWMgZmluYWwgUmVnRXhwIHJlZ2V4cCA9IG5ldyBSZWdFeHAoJ3RbMC05XSsnKTsKCiAgVmFyaWFibGVOYW1lcihMaXZlRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsIHRoaXMubmFtZXMsIHRoaXMuX25hbWVyKQogICAgICA6IHVzZWROYW1lcyA9IG5ldyBTZXQ8U3RyaW5nPigpLAogICAgICAgIGZyZWVUZW1wb3JhcnlOYW1lcyA9IG5ldyBMaXN0PFN0cmluZz4oKSB7CiAgICAvLyBbVmFyaWFibGVOYW1lcy5zd2FwVGVtcF0gaXMgdXNlZCB3aGVuIHRoZXJlIGlzIGEgY3ljbGUgaW4gYSBjb3B5IGhhbmRsZXIuCiAgICAvLyBUaGVyZWZvcmUgd2UgbWFrZSBzdXJlIG5vIG9uZSB1c2VzIGl0LgogICAgdXNlZE5hbWVzLmFkZChuYW1lcy5zd2FwVGVtcCk7CgogICAgLy8gQWxsIGxpdmVJbnMgaW5zdHJ1Y3Rpb25zIG11c3QgaGF2ZSBhIG5hbWUgYXQgdGhpcyBwb2ludCwgc28gd2UKICAgIC8vIGFkZCB0aGVtIHRvIHRoZSBsaXN0IG9mIHVzZWQgbmFtZXMuCiAgICBlbnZpcm9ubWVudC5saXZlSW5zdHJ1Y3Rpb25zLmZvckVhY2goKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiwgaW50IGluZGV4KSB7CiAgICAgIFN0cmluZyBuYW1lID0gbmFtZXMuZ2V0TmFtZShpbnN0cnVjdGlvbik7CiAgICAgIGlmIChuYW1lICE9IG51bGwpIHsKICAgICAgICB1c2VkTmFtZXMuYWRkKG5hbWUpOwogICAgICAgIG5hbWVzLmFkZE5hbWVVc2VkKG5hbWUpOwogICAgICB9CiAgICB9KTsKICB9CgogIFN0cmluZyBhbGxvY2F0ZVdpdGhIaW50KFN0cmluZyBvcmlnaW5hbE5hbWUpIHsKICAgIGludCBpID0gMDsKICAgIFN0cmluZyBuYW1lID0gX25hbWVyLnNhZmVWYXJpYWJsZU5hbWUob3JpZ2luYWxOYW1lKTsKICAgIHdoaWxlICh1c2VkTmFtZXMuY29udGFpbnMobmFtZSkpIHsKICAgICAgbmFtZSA9IF9uYW1lci5zYWZlVmFyaWFibGVOYW1lKCckb3JpZ2luYWxOYW1lJHtpKyt9Jyk7CiAgICB9CiAgICByZXR1cm4gbmFtZTsKICB9CgogIFN0cmluZyBhbGxvY2F0ZVRlbXBvcmFyeSgpIHsKICAgIHdoaWxlICghZnJlZVRlbXBvcmFyeU5hbWVzLmlzRW1wdHkpIHsKICAgICAgU3RyaW5nIG5hbWUgPSBmcmVlVGVtcG9yYXJ5TmFtZXMucmVtb3ZlTGFzdCgpOwogICAgICBpZiAoIXVzZWROYW1lcy5jb250YWlucyhuYW1lKSkgcmV0dXJuIG5hbWU7CiAgICB9CiAgICBTdHJpbmcgbmFtZSA9ICd0JHt0ZW1wb3JhcnlJbmRleCsrfSc7CiAgICB3aGlsZSAodXNlZE5hbWVzLmNvbnRhaW5zKG5hbWUpKSBuYW1lID0gJ3Qke3RlbXBvcmFyeUluZGV4Kyt9JzsKICAgIHJldHVybiBuYW1lOwogIH0KCiAgSFBoaSBmaXJzdFBoaVVzZXJXaXRoRWxlbWVudChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGZvciAoSEluc3RydWN0aW9uIHVzZXIgaW4gaW5zdHJ1Y3Rpb24udXNlZEJ5KSB7CiAgICAgIGlmICh1c2VyIGlzIEhQaGkgJiYgdXNlci5zb3VyY2VFbGVtZW50ICE9IG51bGwpIHsKICAgICAgICByZXR1cm4gdXNlcjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBTdHJpbmcgYWxsb2NhdGVOYW1lKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgU3RyaW5nIG5hbWU7CiAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSENoZWNrKSB7CiAgICAgIC8vIFNwZWNpYWwgY2FzZSB0aGlzIGluc3RydWN0aW9uIHRvIHVzZSB0aGUgbmFtZSBvZiBpdHMKICAgICAgLy8gaW5wdXQgaWYgaXQgaGFzIG9uZS4KICAgICAgSEluc3RydWN0aW9uIHRlbXAgPSBpbnN0cnVjdGlvbjsKICAgICAgZG8gewogICAgICAgIHRlbXAgPSAodGVtcCBhcyBIQ2hlY2spLmNoZWNrZWRJbnB1dDsKICAgICAgICBuYW1lID0gbmFtZXMub3duTmFtZVt0ZW1wXTsKICAgICAgfSB3aGlsZSAobmFtZSA9PSBudWxsICYmIHRlbXAgaXMgSENoZWNrKTsKICAgICAgaWYgKG5hbWUgIT0gbnVsbCkgcmV0dXJuIGFkZEFsbG9jYXRlZE5hbWUoaW5zdHJ1Y3Rpb24sIG5hbWUpOwogICAgfQoKICAgIGlmIChpbnN0cnVjdGlvbi5zb3VyY2VFbGVtZW50ICE9IG51bGwpIHsKICAgICAgaWYgKGluc3RydWN0aW9uLnNvdXJjZUVsZW1lbnQubmFtZSAhPSBudWxsKSB7CiAgICAgICAgbmFtZSA9IGFsbG9jYXRlV2l0aEhpbnQoaW5zdHJ1Y3Rpb24uc291cmNlRWxlbWVudC5uYW1lKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBTb3VyY2UgZWxlbWVudCBpcyBzeW50aGVzaXplZCBhbmQgaGFzIG5vIG5hbWUuCiAgICAgICAgbmFtZSA9IGFsbG9jYXRlVGVtcG9yYXJ5KCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIFdlIGNvdWxkIG5vdCBmaW5kIGFuIGVsZW1lbnQgZm9yIHRoZSBpbnN0cnVjdGlvbi4gSWYgdGhlCiAgICAgIC8vIGluc3RydWN0aW9uIGlzIHVzZWQgYnkgYSBwaGksIHRyeSB0byB1c2UgdGhlIG5hbWUgb2YgdGhlIHBoaS4KICAgICAgLy8gT3RoZXJ3aXNlLCBqdXN0IGFsbG9jYXRlIGEgdGVtcG9yYXJ5IG5hbWUuCiAgICAgIEhQaGkgcGhpID0gZmlyc3RQaGlVc2VyV2l0aEVsZW1lbnQoaW5zdHJ1Y3Rpb24pOwogICAgICBpZiAocGhpICE9IG51bGwpIHsKICAgICAgICBuYW1lID0gYWxsb2NhdGVXaXRoSGludChwaGkuc291cmNlRWxlbWVudC5uYW1lKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBuYW1lID0gYWxsb2NhdGVUZW1wb3JhcnkoKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGFkZEFsbG9jYXRlZE5hbWUoaW5zdHJ1Y3Rpb24sIG5hbWUpOwogIH0KCiAgU3RyaW5nIGFkZEFsbG9jYXRlZE5hbWUoSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBTdHJpbmcgbmFtZSkgewogICAgdXNlZE5hbWVzLmFkZChuYW1lKTsKICAgIG5hbWVzLmFkZE5hbWVVc2VkKG5hbWUpOwogICAgbmFtZXMub3duTmFtZVtpbnN0cnVjdGlvbl0gPSBuYW1lOwogICAgcmV0dXJuIG5hbWU7CiAgfQoKICAvLy8gRnJlZXMgW2luc3RydWN0aW9uXSdzIG5hbWUgc28gaXQgY2FuIGJlIHVzZWQgZm9yIG90aGVyIGluc3RydWN0aW9ucy4KICB2b2lkIGZyZWVOYW1lKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgU3RyaW5nIG93bk5hbWUgPSBuYW1lcy5vd25OYW1lW2luc3RydWN0aW9uXTsKICAgIGlmIChvd25OYW1lICE9IG51bGwpIHsKICAgICAgLy8gV2UgY2hlY2sgaWYgd2UgaGF2ZSBhbHJlYWR5IGxvb2tlZCBmb3IgdGVtcG9yYXJ5IG5hbWVzCiAgICAgIC8vIGJlY2F1c2UgaWYgd2UgaGF2ZW4ndCwgY2hhbmNlcyBhcmUgdGhlIHRlbXBvcmFyeSB3ZSBhbGxvY2F0ZQogICAgICAvLyBpbiB0aGlzIGJsb2NrIGNhbiBtYXRjaCBhIHBoaSB3aXRoIHRoZSBzYW1lIG5hbWUgaW4gdGhlCiAgICAgIC8vIHN1Y2Nlc3NvciBibG9jay4KICAgICAgaWYgKHRlbXBvcmFyeUluZGV4ICE9IDAgJiYgcmVnZXhwLmhhc01hdGNoKG93bk5hbWUpKSB7CiAgICAgICAgZnJlZVRlbXBvcmFyeU5hbWVzLmFkZChvd25OYW1lKTsKICAgICAgfQogICAgICB1c2VkTmFtZXMucmVtb3ZlKG93bk5hbWUpOwogICAgfQogIH0KfQoKLy8vIFZpc2l0cyBhbGwgYmxvY2tzIGluIHRoZSBncmFwaCwgc2V0cyBuYW1lcyB0byBpbnN0cnVjdGlvbnMsIGFuZAovLy8gY3JlYXRlcyB0aGUgW0NvcHlIYW5kbGVyXSBmb3IgZWFjaCBibG9jay4gVGhpcyBjbGFzcyBuZWVkcyB0byBoYXZlCi8vLyB0aGUgbGl2ZUlucyBzZXQgYXMgd2VsbCBhcyBhbGwgdGhlIGxpdmUgaW50ZXJ2YWxzIG9mIGluc3RydWN0aW9ucy4KLy8vIEl0IHZpc2l0cyB0aGUgZ3JhcGggaW4gZG9taW5hdG9yIG9yZGVyLCBzbyB0aGF0IGF0IGVhY2ggZW50cnkgb2YgYQovLy8gYmxvY2ssIHRoZSBpbnN0cnVjdGlvbnMgaW4gaXRzIGxpdmVJbnMgc2V0IGhhdmUgbmFtZXMuCi8vLwovLy8gV2hlbiB2aXNpdGluZyBhIGJsb2NrLCBpdCBnb2VzIHRocm91Z2ggYWxsIGluc3RydWN0aW9ucy4gRm9yIGVhY2gKLy8vIGluc3RydWN0aW9uLCBpdCBmcmVlcyB0aGUgbmFtZXMgb2YgdGhlIGlucHV0cyB0aGF0IGRpZSBhdCB0aGF0Ci8vLyBpbnN0cnVjdGlvbiwgYW5kIGFsbG9jYXRlcyBhIG5hbWUgdG8gdGhlIGluc3RydWN0aW9uLiBGb3IgZWFjaCBwaGksCi8vLyBpdCBhZGRzIGEgY29weSB0byB0aGUgQ29weUhhbmRsZXIgb2YgdGhlIGNvcnJlc3BvbmRpbmcgcHJlZGVjZXNzb3IuCmNsYXNzIFNzYVZhcmlhYmxlQWxsb2NhdG9yIGV4dGVuZHMgSEJhc2VWaXNpdG9yIHdpdGggQ29kZWdlblBoYXNlIHsKICBmaW5hbCBNb2R1bGFyTmFtZXIgX25hbWVyOwogIGZpbmFsIE1hcDxIQmFzaWNCbG9jaywgTGl2ZUVudmlyb25tZW50PiBsaXZlSW5zdHJ1Y3Rpb25zOwogIGZpbmFsIE1hcDxISW5zdHJ1Y3Rpb24sIExpdmVJbnRlcnZhbD4gbGl2ZUludGVydmFsczsKICBmaW5hbCBTZXQ8SEluc3RydWN0aW9uPiBnZW5lcmF0ZUF0VXNlU2l0ZTsKCiAgZmluYWwgVmFyaWFibGVOYW1lcyBuYW1lczsKCiAgU3NhVmFyaWFibGVBbGxvY2F0b3IodGhpcy5fbmFtZXIsIHRoaXMubGl2ZUluc3RydWN0aW9ucywgdGhpcy5saXZlSW50ZXJ2YWxzLAogICAgICB0aGlzLmdlbmVyYXRlQXRVc2VTaXRlKQogICAgICA6IHRoaXMubmFtZXMgPSBuZXcgVmFyaWFibGVOYW1lcygpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0R3JhcGgoSEdyYXBoIGdyYXBoKSB7CiAgICB2aXNpdERvbWluYXRvclRyZWUoZ3JhcGgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJhc2ljQmxvY2soSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIFZhcmlhYmxlTmFtZXIgdmFyaWFibGVOYW1lciA9CiAgICAgICAgbmV3IFZhcmlhYmxlTmFtZXIobGl2ZUluc3RydWN0aW9uc1tibG9ja10sIG5hbWVzLCBfbmFtZXIpOwoKICAgIGJsb2NrLmZvckVhY2hQaGkoKEhQaGkgcGhpKSB7CiAgICAgIGhhbmRsZVBoaShwaGksIHZhcmlhYmxlTmFtZXIpOwogICAgfSk7CgogICAgYmxvY2suZm9yRWFjaEluc3RydWN0aW9uKChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgICAgaGFuZGxlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24sIHZhcmlhYmxlTmFtZXIpOwogICAgfSk7CiAgfQoKICAvLy8gUmV0dXJucyB3aGV0aGVyIFtpbnN0cnVjdGlvbl0gbmVlZHMgYSBuYW1lLiBJbnN0cnVjdGlvbnMgdGhhdAogIC8vLyBoYXZlIG5vIHVzZXJzIG9yIHRoYXQgYXJlIGdlbmVyYXRlZCBhdCB1c2Ugc2l0ZSBkbyBub3QgbmVlZCBhIG5hbWUuCiAgYm9vbCBuZWVkc05hbWUoaW5zdHJ1Y3Rpb24pIHsKICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIVGhpcykgcmV0dXJuIGZhbHNlOwogICAgaWYgKGluc3RydWN0aW9uIGlzIEhQYXJhbWV0ZXJWYWx1ZSkgcmV0dXJuIHRydWU7CiAgICBpZiAoaW5zdHJ1Y3Rpb24udXNlZEJ5LmlzRW1wdHkpIHJldHVybiBmYWxzZTsKICAgIGlmIChnZW5lcmF0ZUF0VXNlU2l0ZS5jb250YWlucyhpbnN0cnVjdGlvbikpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiAhaW5zdHJ1Y3Rpb24ubm9uQ2hlY2soKS5pc0NvZGVNb3Rpb25JbnZhcmlhbnQoKTsKICB9CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgW2luc3RydWN0aW9uXSBkaWVzIGF0IHRoZSBpbnN0cnVjdGlvbiBbYXRdLgogIGJvb2wgZGllc0F0KEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiwgSEluc3RydWN0aW9uIGF0KSB7CiAgICBMaXZlSW50ZXJ2YWwgYXRJbnRlcnZhbCA9IGxpdmVJbnRlcnZhbHNbYXRdOwogICAgTGl2ZUludGVydmFsIGluc3RydWN0aW9uSW50ZXJ2YWwgPSBsaXZlSW50ZXJ2YWxzW2luc3RydWN0aW9uXTsKICAgIGludCBzdGFydCA9IGF0SW50ZXJ2YWwuc3RhcnQ7CiAgICByZXR1cm4gaW5zdHJ1Y3Rpb25JbnRlcnZhbC5kaWVzQXQoc3RhcnQpOwogIH0KCiAgdm9pZCBmcmVlVXNlZE5hbWVzQXQoCiAgICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiwgSEluc3RydWN0aW9uIGF0LCBWYXJpYWJsZU5hbWVyIG5hbWVyKSB7CiAgICBpZiAobmVlZHNOYW1lKGluc3RydWN0aW9uKSkgewogICAgICBpZiAoZGllc0F0KGluc3RydWN0aW9uLCBhdCkpIHsKICAgICAgICBuYW1lci5mcmVlTmFtZShpbnN0cnVjdGlvbik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoZ2VuZXJhdGVBdFVzZVNpdGUuY29udGFpbnMoaW5zdHJ1Y3Rpb24pKSB7CiAgICAgIC8vIElmIHRoZSBpbnN0cnVjdGlvbiBpcyBnZW5lcmF0ZWQgYXQgdXNlIHNpdGUsIHRoZW4gYWxsIGl0cwogICAgICAvLyBpbnB1dHMgbWF5IGFsc28gZGllIGF0IFthdF0uCiAgICAgIGZvciAoaW50IGkgPSAwLCBsZW4gPSBpbnN0cnVjdGlvbi5pbnB1dHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gaW5wdXQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbaV07CiAgICAgICAgZnJlZVVzZWROYW1lc0F0KGlucHV0LCBhdCwgbmFtZXIpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIGhhbmRsZUluc3RydWN0aW9uKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiwgVmFyaWFibGVOYW1lciBuYW1lcikgewogICAgaWYgKGdlbmVyYXRlQXRVc2VTaXRlLmNvbnRhaW5zKGluc3RydWN0aW9uKSkgewogICAgICBhc3NlcnQoIWxpdmVJbnRlcnZhbHMuY29udGFpbnNLZXkoaW5zdHJ1Y3Rpb24pKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGZvciAoaW50IGkgPSAwLCBsZW4gPSBpbnN0cnVjdGlvbi5pbnB1dHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgSEluc3RydWN0aW9uIGlucHV0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzW2ldOwogICAgICBmcmVlVXNlZE5hbWVzQXQoaW5wdXQsIGluc3RydWN0aW9uLCBuYW1lcik7CiAgICB9CgogICAgaWYgKG5lZWRzTmFtZShpbnN0cnVjdGlvbikpIHsKICAgICAgbmFtZXIuYWxsb2NhdGVOYW1lKGluc3RydWN0aW9uKTsKICAgIH0KICB9CgogIHZvaWQgaGFuZGxlUGhpKEhQaGkgcGhpLCBWYXJpYWJsZU5hbWVyIG5hbWVyKSB7CiAgICBpZiAoIW5lZWRzTmFtZShwaGkpKSByZXR1cm47CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwaGkuaW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBpbnB1dCA9IHBoaS5pbnB1dHNbaV07CiAgICAgIEhCYXNpY0Jsb2NrIHByZWRlY2Vzc29yID0gcGhpLmJsb2NrLnByZWRlY2Vzc29yc1tpXTsKICAgICAgLy8gQSBbSFR5cGVLbm93bl0gaW5zdHJ1Y3Rpb24gbmV2ZXIgaGFzIGEgbmFtZSwgYnV0IGl0cyBjaGVja2VkCiAgICAgIC8vIGlucHV0IG1pZ2h0LCB0aGVyZWZvcmUgd2UgbmVlZCB0byBkbyBhIGNvcHkgaW5zdGVhZCBvZiBhbgogICAgICAvLyBhc3NpZ25tZW50LgogICAgICB3aGlsZSAoaW5wdXQgaXMgSFR5cGVLbm93bikgaW5wdXQgPSBpbnB1dC5pbnB1dHNbMF07CiAgICAgIGlmICghbmVlZHNOYW1lKGlucHV0KSkgewogICAgICAgIG5hbWVzLmFkZEFzc2lnbm1lbnQocHJlZGVjZXNzb3IsIGlucHV0LCBwaGkpOwogICAgICB9IGVsc2UgewogICAgICAgIG5hbWVzLmFkZENvcHkocHJlZGVjZXNzb3IsIGlucHV0LCBwaGkpOwogICAgICB9CiAgICB9CgogICAgbmFtZXIuYWxsb2NhdGVOYW1lKHBoaSk7CiAgfQp9CoKiAE5OPAEZNSkVAUcSE0ALJBoEAQwoAgFCGRUvDSArAUBHEkIpATwTJiYzGAgGBAEoIRoEAUcYJigGEgQBDBYrQSIEAgFDRiMYOy4PATUTAUBKRzErAUhGRRMxATk3ATI5MwFCRDsyHEowRUMrGSoEAUU4M0c5PQQBQEgqUERBRURGJxtMOy0IJxoIBAEzLh4EAS4tIAQBRy0xDDQCAUg+P0YtMAFIS0gWGQEjPAEqNwFMRD8BDCIjMkMGBAEmP0VDBgQBRTMFEgUtGBgWFhYFTyhREEgqIDAzFgYUBAEgPzM/DTNAQzMjJFA0MwoIBgQBHj80QTMhIk4yRkJBJU4IBgQBDCwiOwFGQUQXNSY3Pic5CAYBRko4M0IiLQ89CAE5S0EIBgFHJysiNjlBCBcqBgFHQEUuMAgGATAtKwFFNUUvQR8GBAEuNCpGI0YbUC0yCAEiAUJKM0o0DCgpJAwICAQCAUNCDRASFwEnAQwyAgFGKhRAKQFIKy4BEDE2AUA9BAFGQgQBDEUBPQIBR0MWKzQBUSIBOkBIGQEZIBUEARIzPCoZATQBLSEEATIgBAEiHAQBTgFLGkIqBAFRGkIwBAIBTxYdHR8pGjYBRicyUS4jAUYrUTAaHSEICAQBMQ85Jz0GEQQBHyo1MgYqRBEEATs0OBUIBhEEATIRIT4eJwsuJDBEBgEtNEEPOiQIDUJHNDcZOQ8kCAYwBAFDGR0nEQQBSywxG0BGQRo9KQghBgQCAURHR0c7BEZDSEhEHTw3LQEdAU8eKgEMIh8EAQwsIkMBIiUIATo1CAQBREogLDUyPzwEAUI7MUMiLgQBGEgiJSUIOkMmRzQrCAYEAUozNw4GAUUyMgYBIicGBAEyIQEyKjtGQxU7HzYPMAgGAR0EAgEwcGFja2FnZTpjb21waWxlci9zcmMvc3NhL3ZhcmlhYmxlX2FsbG9jYXRvci5kYXJ0QHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2JhY2tlbmQvc3BlY2lhbGl6ZWRfY2hlY2tzLmRhcnSJ3S8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IEpDb21tb25FbGVtZW50czsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKCmNsYXNzIFNwZWNpYWxpemVkQ2hlY2tzIHsKICBzdGF0aWMgTWVtYmVyRW50aXR5IGZpbmRBc0NoZWNrKAogICAgICBEYXJ0VHlwZSBkYXJ0VHlwZSwgYm9vbCBpc1R5cGVFcnJvciwgSkNvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSB7CiAgICBpZiAoZGFydFR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICBpZiAoZGFydFR5cGUudHlwZUFyZ3VtZW50cy5pc05vdEVtcHR5KSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuIF9maW5kQXNDaGVjayhkYXJ0VHlwZS5lbGVtZW50LCBjb21tb25FbGVtZW50cywKICAgICAgICAgIGlzVHlwZUVycm9yOiBpc1R5cGVFcnJvciwgaXNOdWxsYWJsZTogdHJ1ZSk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHN0YXRpYyBNZW1iZXJFbnRpdHkgX2ZpbmRBc0NoZWNrKAogICAgICBDbGFzc0VudGl0eSBlbGVtZW50LCBKQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIHtib29sIGlzVHlwZUVycm9yLCBib29sIGlzTnVsbGFibGV9KSB7CiAgICBpZiAoZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5qc1N0cmluZ0NsYXNzIHx8CiAgICAgICAgZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5zdHJpbmdDbGFzcykgewogICAgICBpZiAoaXNOdWxsYWJsZSkgewogICAgICAgIHJldHVybiBpc1R5cGVFcnJvcgogICAgICAgICAgICA/IGNvbW1vbkVsZW1lbnRzLnNwZWNpYWxpemVkQ2hlY2tTdHJpbmdOdWxsYWJsZQogICAgICAgICAgICA6IGNvbW1vbkVsZW1lbnRzLnNwZWNpYWxpemVkQXNTdHJpbmdOdWxsYWJsZTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBpZiAoZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5qc0Jvb2xDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuYm9vbENsYXNzKSB7CiAgICAgIGlmIChpc051bGxhYmxlKSB7CiAgICAgICAgcmV0dXJuIGlzVHlwZUVycm9yCiAgICAgICAgICAgID8gY29tbW9uRWxlbWVudHMuc3BlY2lhbGl6ZWRDaGVja0Jvb2xOdWxsYWJsZQogICAgICAgICAgICA6IGNvbW1vbkVsZW1lbnRzLnNwZWNpYWxpemVkQXNCb29sTnVsbGFibGU7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuanNEb3VibGVDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuZG91YmxlQ2xhc3MpIHsKICAgICAgaWYgKGlzTnVsbGFibGUpIHsKICAgICAgICByZXR1cm4gaXNUeXBlRXJyb3IKICAgICAgICAgICAgPyBjb21tb25FbGVtZW50cy5zcGVjaWFsaXplZENoZWNrRG91YmxlTnVsbGFibGUKICAgICAgICAgICAgOiBjb21tb25FbGVtZW50cy5zcGVjaWFsaXplZEFzRG91YmxlTnVsbGFibGU7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuanNOdW1iZXJDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMubnVtQ2xhc3MpIHsKICAgICAgaWYgKGlzTnVsbGFibGUpIHsKICAgICAgICByZXR1cm4gaXNUeXBlRXJyb3IKICAgICAgICAgICAgPyBjb21tb25FbGVtZW50cy5zcGVjaWFsaXplZENoZWNrTnVtTnVsbGFibGUKICAgICAgICAgICAgOiBjb21tb25FbGVtZW50cy5zcGVjaWFsaXplZEFzTnVtTnVsbGFibGU7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuanNJbnRDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuaW50Q2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLmpzVUludDMyQ2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLmpzVUludDMxQ2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLmpzUG9zaXRpdmVJbnRDbGFzcykgewogICAgICBpZiAoaXNOdWxsYWJsZSkgewogICAgICAgIHJldHVybiBpc1R5cGVFcnJvcgogICAgICAgICAgICA/IGNvbW1vbkVsZW1lbnRzLnNwZWNpYWxpemVkQ2hlY2tJbnROdWxsYWJsZQogICAgICAgICAgICA6IGNvbW1vbkVsZW1lbnRzLnNwZWNpYWxpemVkQXNJbnROdWxsYWJsZTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICByZXR1cm4gbnVsbDsKICB9Cn0KUABOTjwBNyQhARojTSU6PDcGEQQBJDstMzEYGzw6CBMGATEvGBs6OAgTBgEzMRgbPDoIEwYBMy4YGzk3CBMGATAuMzM4GBs5NwgTBgERBAIBN3BhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvc3BlY2lhbGl6ZWRfY2hlY2tzLmRhcnQ9c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc3NhL2ludGVyY2VwdG9yX3NpbXBsaWZpZXIuZGFydMAASxIvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBDb21tb25FbGVtZW50czsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2ludGVyY2VwdG9yX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvcjsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JyBzaG93IEpDbG9zZWRXb3JsZDsKaW1wb3J0ICdub2Rlcy5kYXJ0JzsKaW1wb3J0ICdvcHRpbWl6ZS5kYXJ0JzsKCi8vLyBUaGlzIHBoYXNlIHNpbXBsaWZpZXMgaW50ZXJjZXB0b3JzIGluIG11bHRpcGxlIHdheXM6Ci8vLwovLy8gMSkgSWYgdGhlIGludGVyY2VwdG9yIGlzIGZvciBhbiBvYmplY3Qgd2hvc2UgdHlwZSBpcyBrbm93biwgaXQKLy8vIHRyaWVzIHRvIHVzZSBhIGNvbnN0YW50IGludGVyY2VwdG9yIGluc3RlYWQuCi8vLwovLy8gMikgSW50ZXJjZXB0b3JzIGFyZSBzcGVjaWFsaXplZCBiYXNlZCBvbiB0aGUgc2VsZWN0b3IgaXQgaXMgdXNlZCB3aXRoLgovLy8KLy8vIDMpIElmIHdlIGtub3cgdGhlIG9iamVjdCBpcyBub3QgaW50ZXJjZXB0ZWQsIHdlIGp1c3QgdXNlIHRoZSBvYmplY3QKLy8vIGluc3RlYWQuCi8vLwovLy8gNCkgU2luZ2xlIHVzZSBpbnRlcmNlcHRvcnMgYXQgZHluYW1pYyBpbnZva2Ugc2l0ZXMgYXJlIHJlcGxhY2VkIHdpdGggJ29uZQovLy8gc2hvdCBpbnRlcmNlcHRvcnMnIHdoaWNoIGFyZSBzeW50aGVzaXplZCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyB0aGF0IGZldGNoCi8vLyB0aGUgaW50ZXJjZXB0b3IgYW5kIHRoZW4gY2FsbCB0aGUgbWV0aG9kLiAgVGhpcyBzYXZlcyBjb2RlIHNpemUgYW5kIG1ha2VzIHRoZQovLy8gcmVjZWl2ZXIgb2YgYW4gaW50ZXJjZXB0ZWQgY2FsbCBhIGNhbmRpZGF0ZSBmb3IgYmVpbmcgZ2VuZXJhdGVkIGF0IHVzZSBzaXRlLgovLy8KLy8vIDUpIFNvbWUgSElzIG9wZXJhdGlvbnMgb24gYW4gaW50ZXJjZXB0b3IgYXJlIHJlcGxhY2VkIHdpdGggYSBISXMgdmVyc2lvbiB0aGF0Ci8vLyB1c2VzICdpbnN0YW5jZW9mJyByYXRoZXIgdGhhbiB0ZXN0aW5nIGEgdHlwZSBmbGFnLgovLy8KY2xhc3MgU3NhU2ltcGxpZnlJbnRlcmNlcHRvcnMgZXh0ZW5kcyBIQmFzZVZpc2l0b3IKICAgIGltcGxlbWVudHMgT3B0aW1pemF0aW9uUGhhc2UgewogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lID0gIlNzYVNpbXBsaWZ5SW50ZXJjZXB0b3JzIjsKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwogIGZpbmFsIENsYXNzRW50aXR5IF9lbmNsb3NpbmdDbGFzczsKICBIR3JhcGggX2dyYXBoOwoKICBTc2FTaW1wbGlmeUludGVyY2VwdG9ycyh0aGlzLl9jbG9zZWRXb3JsZCwgdGhpcy5fZW5jbG9zaW5nQ2xhc3MpOwoKICBDb21tb25FbGVtZW50cyBnZXQgX2NvbW1vbkVsZW1lbnRzID0+IF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50czsKCiAgSW50ZXJjZXB0b3JEYXRhIGdldCBfaW50ZXJjZXB0b3JEYXRhID0+IF9jbG9zZWRXb3JsZC5pbnRlcmNlcHRvckRhdGE7CgogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IF9hYnN0cmFjdFZhbHVlRG9tYWluID0+CiAgICAgIF9jbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0R3JhcGgoSEdyYXBoIGdyYXBoKSB7CiAgICB0aGlzLl9ncmFwaCA9IGdyYXBoOwogICAgdmlzaXREb21pbmF0b3JUcmVlKGdyYXBoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCYXNpY0Jsb2NrKEhCYXNpY0Jsb2NrIG5vZGUpIHsKICAgIGN1cnJlbnRCbG9jayA9IG5vZGU7CgogICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gbm9kZS5maXJzdDsKICAgIHdoaWxlIChpbnN0cnVjdGlvbiAhPSBudWxsKSB7CiAgICAgIGJvb2wgc2hvdWxkUmVtb3ZlID0gaW5zdHJ1Y3Rpb24uYWNjZXB0KHRoaXMpOwogICAgICBISW5zdHJ1Y3Rpb24gbmV4dCA9IGluc3RydWN0aW9uLm5leHQ7CiAgICAgIGlmIChzaG91bGRSZW1vdmUpIHsKICAgICAgICBpbnN0cnVjdGlvbi5ibG9jay5yZW1vdmUoaW5zdHJ1Y3Rpb24pOwogICAgICB9CiAgICAgIGluc3RydWN0aW9uID0gbmV4dDsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRJbnN0cnVjdGlvbihISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SW52b2tlKEhJbnZva2UgaW52b2tlKSB7CiAgICBpZiAoIWludm9rZS5pc0ludGVyY2VwdGVkQ2FsbCkgcmV0dXJuIGZhbHNlOwogICAgZHluYW1pYyBpbnRlcmNlcHRvciA9IGludm9rZS5pbnB1dHNbMF07CiAgICBpZiAoaW50ZXJjZXB0b3IgaXMhIEhJbnRlcmNlcHRvcikgcmV0dXJuIGZhbHNlOwoKICAgIC8vIFRPRE8oc3JhKTogTW92ZSB0aGlzIHBlci1jYWxsIGNvZGUgdG8gdmlzaXRJbnRlcmNlcHRvci4KICAgIC8vCiAgICAvLyBUaGUgaW50ZXJjZXB0b3IgaXMgdmlzaXRlZCBmaXJzdCwgc28gd2UgZ2V0IGhlcmUgb25seSB3aGVuIHRoZQogICAgLy8gaW50ZXJjZXB0b3Igd2FzIG5vdCByZXdyaXR0ZW4gdG8gYSBzaW5nbGUgc2hhcmVkIHJlcGxhY2VtZW50LiAgSSdtIG5vdAogICAgLy8gc3VyZSB3ZSBzaG91bGQgc3Vic3RpdHV0ZSBhIGNvbnN0YW50IGludGVyY2VwdG9yIG9uIGEgcGVyLWNhbGwgYmFzaXMgaWYKICAgIC8vIHRoZSBpbnRlcmNlcHRvciBpcyBhbHJlYWR5IGF2YWlsYWJsZSBpbiBhIGxvY2FsIHZhcmlhYmxlLCBidXQgaXQgaXMKICAgIC8vIHBvc3NpYmxlIHRoYXQgYWxsIHVzZXMgY2FuIGJlIHJld3JpdHRlbiB0byB1c2UgZGlmZmVyZW50IGNvbnN0YW50cy4KCiAgICBISW5zdHJ1Y3Rpb24gY29uc3RhbnQgPSB0cnlDb21wdXRlQ29uc3RhbnRJbnRlcmNlcHRvcigKICAgICAgICBpbnZva2UuaW5wdXRzWzFdLCBpbnRlcmNlcHRvci5pbnRlcmNlcHRlZENsYXNzZXMpOwogICAgaWYgKGNvbnN0YW50ICE9IG51bGwpIHsKICAgICAgaW52b2tlLmNoYW5nZVVzZShpbnRlcmNlcHRvciwgY29uc3RhbnQpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgYm9vbCBjYW5Vc2VTZWxmRm9ySW50ZXJjZXB0b3IoSEluc3RydWN0aW9uIHJlY2VpdmVyLAogICAgICB7U2V0PENsYXNzRW50aXR5PiBpbnRlcmNlcHRlZENsYXNzZXN9KSB7CiAgICBpZiAocmVjZWl2ZXIuaXNQcmltaXRpdmUoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgIC8vIFByaW1pdGl2ZXMgYWx3YXlzIG5lZWQgaW50ZXJjZXB0b3JzLgogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAocmVjZWl2ZXIuaXNOdWxsKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc1BvdGVudGlhbGx5VHJ1ZSkgewogICAgICBpZiAoaW50ZXJjZXB0ZWRDbGFzc2VzID09IG51bGwgfHwKICAgICAgICAgIGludGVyY2VwdGVkQ2xhc3Nlcy5jb250YWlucyhfY29tbW9uRWxlbWVudHMuanNOdWxsQ2xhc3MpKSB7CiAgICAgICAgLy8gTmVlZCB0aGUgSlNOdWxsIGludGVyY2VwdG9yLgogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQoKICAgIC8vIEFsbCBpbnRlcmNlcHRlZCBjbGFzc2VzIGV4dGVuZCBgSW50ZXJjZXB0b3JgLCBzbyBpZiB0aGUgcmVjZWl2ZXIgY2FuJ3QgYmUKICAgIC8vIGEgY2xhc3MgZXh0ZW5kaW5nIGBJbnRlcmNlcHRvcmAgdGhlbiBpdCBjYW4gYmUgY2FsbGVkIGRpcmVjdGx5LgogICAgcmV0dXJuIF9hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgLmlzSW50ZXJjZXB0b3IocmVjZWl2ZXIuaW5zdHJ1Y3Rpb25UeXBlKQogICAgICAgIC5pc0RlZmluaXRlbHlGYWxzZTsKICB9CgogIEhJbnN0cnVjdGlvbiB0cnlDb21wdXRlQ29uc3RhbnRJbnRlcmNlcHRvcigKICAgICAgSEluc3RydWN0aW9uIGlucHV0LCBTZXQ8Q2xhc3NFbnRpdHk+IGludGVyY2VwdGVkQ2xhc3NlcykgewogICAgQ2xhc3NFbnRpdHkgY29uc3RhbnRJbnRlcmNlcHRvciA9IHRyeUNvbXB1dGVDb25zdGFudEludGVyY2VwdG9yRnJvbVR5cGUoCiAgICAgICAgaW5wdXQuaW5zdHJ1Y3Rpb25UeXBlLCBpbnRlcmNlcHRlZENsYXNzZXMpOwoKICAgIGlmIChjb25zdGFudEludGVyY2VwdG9yID09IG51bGwpIHJldHVybiBudWxsOwoKICAgIC8vIElmIHdlIGp1c3QgaGFwcGVuIHRvIGJlIGluIGFuIGluc3RhbmNlIG1ldGhvZCBvZiB0aGUgY29uc3RhbnQKICAgIC8vIGludGVyY2VwdG9yLCBgdGhpc2AgaXMgYSBzaG9ydGVyIGFsaWFzLgogICAgaWYgKGNvbnN0YW50SW50ZXJjZXB0b3IgPT0gX2VuY2xvc2luZ0NsYXNzICYmCiAgICAgICAgX2dyYXBoLnRoaXNJbnN0cnVjdGlvbiAhPSBudWxsKSB7CiAgICAgIHJldHVybiBfZ3JhcGgudGhpc0luc3RydWN0aW9uOwogICAgfQoKICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSBuZXcgSW50ZXJjZXB0b3JDb25zdGFudFZhbHVlKGNvbnN0YW50SW50ZXJjZXB0b3IpOwogICAgcmV0dXJuIF9ncmFwaC5hZGRDb25zdGFudChjb25zdGFudCwgX2Nsb3NlZFdvcmxkKTsKICB9CgogIENsYXNzRW50aXR5IHRyeUNvbXB1dGVDb25zdGFudEludGVyY2VwdG9yRnJvbVR5cGUoCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSwgU2V0PENsYXNzRW50aXR5PiBpbnRlcmNlcHRlZENsYXNzZXMpIHsKICAgIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc051bGwodHlwZSkuaXNQb3RlbnRpYWxseVRydWUpIHsKICAgICAgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzTnVsbCh0eXBlKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgcmV0dXJuIF9jb21tb25FbGVtZW50cy5qc051bGxDbGFzczsKICAgICAgfQogICAgfSBlbHNlIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0ludGVnZXJPck51bGwodHlwZSkuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gX2NvbW1vbkVsZW1lbnRzLmpzSW50Q2xhc3M7CiAgICB9IGVsc2UgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzRG91YmxlT3JOdWxsKHR5cGUpLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIF9jb21tb25FbGVtZW50cy5qc0RvdWJsZUNsYXNzOwogICAgfSBlbHNlIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0Jvb2xlYW5Pck51bGwodHlwZSkuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gX2NvbW1vbkVsZW1lbnRzLmpzQm9vbENsYXNzOwogICAgfSBlbHNlIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc1N0cmluZ09yTnVsbCh0eXBlKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBfY29tbW9uRWxlbWVudHMuanNTdHJpbmdDbGFzczsKICAgIH0gZWxzZSBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4uaXNBcnJheSh0eXBlKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBfY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzOwogICAgfSBlbHNlIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc051bWJlck9yTnVsbCh0eXBlKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgIWludGVyY2VwdGVkQ2xhc3Nlcy5jb250YWlucyhfY29tbW9uRWxlbWVudHMuanNJbnRDbGFzcykgJiYKICAgICAgICAhaW50ZXJjZXB0ZWRDbGFzc2VzLmNvbnRhaW5zKF9jb21tb25FbGVtZW50cy5qc0RvdWJsZUNsYXNzKSkgewogICAgICAvLyBJZiB0aGUgbWV0aG9kIGJlaW5nIGludGVyY2VwdGVkIGlzIG5vdCBkZWZpbmVkIGluIFtpbnRdIG9yIFtkb3VibGVdIHdlCiAgICAgIC8vIGNhbiBzYWZlbHkgdXNlIHRoZSBudW1iZXIgaW50ZXJjZXB0b3IuICBUaGlzIGlzIGJlY2F1c2Ugbm9uZSBvZiB0aGUKICAgICAgLy8gW2ludF0gb3IgW2RvdWJsZV0gbWV0aG9kcyBhcmUgY2FsbGVkIGZyb20gYSBtZXRob2QgZGVmaW5lZCBvbiBbbnVtXS4KICAgICAgcmV0dXJuIF9jb21tb25FbGVtZW50cy5qc051bWJlckNsYXNzOwogICAgfSBlbHNlIHsKICAgICAgLy8gVHJ5IHRvIGZpbmQgY29uc3RhbnQgaW50ZXJjZXB0b3IgZm9yIGEgbmF0aXZlIGNsYXNzLiAgSWYgdGhlIHJlY2VpdmVyCiAgICAgIC8vIGlzIGNvbnN0cmFpbmVkIHRvIGEgbGVhZiBuYXRpdmUgY2xhc3MsIHdlIGNhbiB1c2UgdGhlIGNsYXNzJ3MKICAgICAgLy8gaW50ZXJjZXB0b3IgZGlyZWN0bHkuCgogICAgICAvLyBUT0RPKHNyYSk6IEtleSBET00gY2xhc3NlcyBsaWtlIE5vZGUsIEVsZW1lbnQgYW5kIEV2ZW50IGFyZSBub3QgbGVhZgogICAgICAvLyBjbGFzc2VzLiAgV2hlbiB0aGUgcmVjZWl2ZXIgdHlwZSBpcyBub3QgYSBsZWFmIGNsYXNzLCB3ZSBtaWdodCBzdGlsbCBiZQogICAgICAvLyBhYmxlIHRvIHVzZSB0aGUgcmVjZWl2ZXIgY2xhc3MgYXMgYSBjb25zdGFudCBpbnRlcmNlcHRvci4gIEl0IGlzCiAgICAgIC8vIHVzdWFsbHkgdGhlIGNhc2UgdGhhdCBtZXRob2RzIGRlZmluZWQgb24gYSBub24tbGVhZiBjbGFzcyBkb24ndCB0ZXN0CiAgICAgIC8vIGZvciBhIHN1YmNsYXNzIG9yIGNhbGwgbWV0aG9kcyBkZWZpbmVkIG9uIGEgc3ViY2xhc3MuICBQcm92aWRlZCB0aGUKICAgICAgLy8gY29kZSBpcyBjb21wbGV0ZWx5IGluc2Vuc2l0aXZlIHRvIHRoZSBzcGVjaWZpYyBpbnN0YW5jZSBzdWJjbGFzc2VzLCB3ZQogICAgICAvLyBjYW4gdXNlIHRoZSBub24tbGVhZiBjbGFzcyBkaXJlY3RseS4KICAgICAgQ2xhc3NFbnRpdHkgZWxlbWVudCA9IF9hYnN0cmFjdFZhbHVlRG9tYWluLmdldEV4YWN0Q2xhc3ModHlwZSk7CiAgICAgIGlmIChlbGVtZW50ICE9IG51bGwgJiYgX2Nsb3NlZFdvcmxkLm5hdGl2ZURhdGEuaXNOYXRpdmVDbGFzcyhlbGVtZW50KSkgewogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIG51bGw7CiAgfQoKICBISW5zdHJ1Y3Rpb24gZmluZERvbWluYXRvcihJdGVyYWJsZTxISW5zdHJ1Y3Rpb24+IGluc3RydWN0aW9ucykgewogICAgSEluc3RydWN0aW9uIHJlc3VsdDsKICAgIEwxOgogICAgZm9yIChISW5zdHJ1Y3Rpb24gY2FuZGlkYXRlIGluIGluc3RydWN0aW9ucykgewogICAgICBmb3IgKEhJbnN0cnVjdGlvbiBjdXJyZW50IGluIGluc3RydWN0aW9ucykgewogICAgICAgIGlmIChjdXJyZW50ICE9IGNhbmRpZGF0ZSAmJiAhY2FuZGlkYXRlLmRvbWluYXRlcyhjdXJyZW50KSkgY29udGludWUgTDE7CiAgICAgIH0KICAgICAgcmVzdWx0ID0gY2FuZGlkYXRlOwogICAgICBicmVhazsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0aWMgaW50IHVzZUNvdW50KEhJbnN0cnVjdGlvbiB1c2VyLCBISW5zdHJ1Y3Rpb24gdXNlZCkgPT4KICAgICAgdXNlci5pbnB1dHMud2hlcmUoKGlucHV0KSA9PiBpbnB1dCA9PSB1c2VkKS5sZW5ndGg7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRJbnRlcmNlcHRvcihISW50ZXJjZXB0b3Igbm9kZSkgewogICAgaWYgKG5vZGUucmVjZWl2ZXIubm9uQ2hlY2soKSA9PSBfZ3JhcGguZXhwbGljaXRSZWNlaXZlclBhcmFtZXRlcikgewogICAgICAvLyBJZiBgZXhwbGljaXRSZWNlaXZlclBhcmFtZXRlcmAgaXMgc2V0IGl0IG1lYW5zIHRoZSBjdXJyZW50IG1ldGhvZCBpcyBhbgogICAgICAvLyBpbnRlcmNlcHRvciBtZXRob2QsIGFuZCBgdGhpc2AgaXMgdGhlIGludGVyY2VwdG9yLiAgVGhlIGNhbGxlciBqdXN0IGRpZAogICAgICAvLyBgZ2V0SW50ZXJjZXB0b3IoZm9vKS5jdXJyZW50TWV0aG9kKGZvbylgIHRvIGVudGVyIHRoZSBjdXJyZW50IG1ldGhvZC4KICAgICAgbm9kZS5ibG9jay5yZXdyaXRlKG5vZGUsIF9ncmFwaC50aGlzSW5zdHJ1Y3Rpb24pOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICByZXdyaXRlU2VsZkludGVyY2VwdG9yVXNlcyhub2RlKTsKCiAgICBpZiAobm9kZS51c2VkQnkuaXNFbXB0eSkgcmV0dXJuIHRydWU7CgogICAgLy8gU3BlY2lhbGl6ZSB0aGUgaW50ZXJjZXB0b3Igd2l0aCBzZXQgb2YgY2xhc3NlcyBpdCBpbnRlcmNlcHRzLCBjb25zaWRlcmluZwogICAgLy8gYWxsIHVzZXMuICAoVGhlIHNwZWNpYWxpemVkIGludGVyY2VwdG9yIGhhcyBhIHNob3J0ZXIgZGlzcGF0Y2ggY2hhaW4pLgogICAgLy8gVGhpcyBvcGVyYXRpb24gYXBwbGllcyBvbmx5IHdoZXJlIHRoZSBpbnRlcmNlcHRvciBpcyB1c2VkIHRvIGRpc3BhdGNoIGEKICAgIC8vIG1ldGhvZC4gIE90aGVyIHVzZXMsIGUuZy4gYXMgYW4gb3JkaW5hcnkgYXJndW1lbnQgb3IgYSBISXMgY2hlY2sgdXNlIHRoZQogICAgLy8gbW9zdCBnZW5lcmFsIGludGVyY2VwdG9yLgogICAgLy8KICAgIC8vIFRPRE8oc3JhKTogVGFrZSBpbnRvIGFjY291bnQgdGhlIHJlY2VpdmVyIHR5cGUgYXQgZWFjaCBjYWxsLiAgZS5nOgogICAgLy8KICAgIC8vICAgICAoYSkgPT4gYS5sZW5ndGggKyBhLmhhc2hDb2RlCiAgICAvLwogICAgLy8gQ3VycmVudGx5IHdlIHVzZSB0aGUgbW9zdCBnZW5lcmFsIGludGVyY2VwdG9yIHNpbmNlIGFsbCBpbnRlcmNlcHRlZCB0eXBlcwogICAgLy8gaW1wbGVtZW50IGBoYXNoQ29kZWAuIEJ1dCBpbiB0aGlzIGV4YW1wbGUsIGBhLmhhc2hDb2RlYCBpcyBvbmx5IHJlYWNoZWQKICAgIC8vIGlmIGBhLmxlbmd0aGAgc3VjY2VlZHMsIHdoaWNoIGlzIGluZGljYXRlZCBieSB0aGUgaGFzaENvZGUgcmVjZWl2ZXIgYmVpbmcKICAgIC8vIGEgSFR5cGVLbm93biBpbnN0cnVjdGlvbi4KCiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGludGVyY2VwdGVkQ2xhc3NlczsKICAgIEhJbnN0cnVjdGlvbiBkb21pbmF0b3IgPSBmaW5kRG9taW5hdG9yKG5vZGUudXNlZEJ5KTsKICAgIC8vIElmIHRoZXJlIGlzIGEgY2FsbCB0aGF0IGRvbWluYXRlcyBhbGwgb3RoZXIgdXNlcywgd2UgY2FuIHVzZSBqdXN0IHRoZQogICAgLy8gc2VsZWN0b3Igb2YgdGhhdCBpbnN0cnVjdGlvbi4KICAgIGlmIChkb21pbmF0b3IgaXMgSEludm9rZUR5bmFtaWMgJiYKICAgICAgICBkb21pbmF0b3IuaXNDYWxsT25JbnRlcmNlcHRvcihfY2xvc2VkV29ybGQpICYmCiAgICAgICAgbm9kZSA9PSBkb21pbmF0b3IucmVjZWl2ZXIgJiYKICAgICAgICB1c2VDb3VudChkb21pbmF0b3IsIG5vZGUpID09IDEpIHsKICAgICAgaW50ZXJjZXB0ZWRDbGFzc2VzID0gX2ludGVyY2VwdG9yRGF0YS5nZXRJbnRlcmNlcHRlZENsYXNzZXNPbigKICAgICAgICAgIGRvbWluYXRvci5zZWxlY3Rvci5uYW1lLCBfY2xvc2VkV29ybGQpOwoKICAgICAgLy8gSWYgd2UgZm91bmQgdGhhdCB3ZSBuZWVkIG51bWJlciwgd2UgbXVzdCBzdGlsbCBnbyB0aHJvdWdoIGFsbAogICAgICAvLyB1c2VzIHRvIGNoZWNrIGlmIHRoZXkgcmVxdWlyZSBpbnQsIG9yIGRvdWJsZS4KICAgICAgaWYgKGludGVyY2VwdGVkQ2xhc3Nlcy5jb250YWlucyhfY29tbW9uRWxlbWVudHMuanNOdW1iZXJDbGFzcykgJiYKICAgICAgICAgICEoaW50ZXJjZXB0ZWRDbGFzc2VzLmNvbnRhaW5zKF9jb21tb25FbGVtZW50cy5qc0RvdWJsZUNsYXNzKSB8fAogICAgICAgICAgICAgIGludGVyY2VwdGVkQ2xhc3Nlcy5jb250YWlucyhfY29tbW9uRWxlbWVudHMuanNJbnRDbGFzcykpKSB7CiAgICAgICAgU2V0PENsYXNzRW50aXR5PiByZXF1aXJlZDsKICAgICAgICBmb3IgKEhJbnN0cnVjdGlvbiB1c2VyIGluIG5vZGUudXNlZEJ5KSB7CiAgICAgICAgICBpZiAodXNlciBpcyEgSEludm9rZSkgY29udGludWU7CiAgICAgICAgICBTZXQ8Q2xhc3NFbnRpdHk+IGludGVyY2VwdGVkID0gX2ludGVyY2VwdG9yRGF0YQogICAgICAgICAgICAgIC5nZXRJbnRlcmNlcHRlZENsYXNzZXNPbih1c2VyLnNlbGVjdG9yLm5hbWUsIF9jbG9zZWRXb3JsZCk7CiAgICAgICAgICBpZiAoaW50ZXJjZXB0ZWQuY29udGFpbnMoX2NvbW1vbkVsZW1lbnRzLmpzSW50Q2xhc3MpKSB7CiAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSB0eXBlIGFyZ3VtZW50IHdoZW4gYWxsIHVzZXMgb2YKICAgICAgICAgICAgLy8gaW50ZXJjZXB0ZWQgY2xhc3NlcyBleHBlY3QgZW50aXRpZXMgaW5zdGVhZCBvZiBlbGVtZW50cy4KICAgICAgICAgICAgcmVxdWlyZWQgPz89IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CiAgICAgICAgICAgIHJlcXVpcmVkLmFkZChfY29tbW9uRWxlbWVudHMuanNJbnRDbGFzcyk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoaW50ZXJjZXB0ZWQuY29udGFpbnMoX2NvbW1vbkVsZW1lbnRzLmpzRG91YmxlQ2xhc3MpKSB7CiAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSB0eXBlIGFyZ3VtZW50IHdoZW4gYWxsIHVzZXMgb2YKICAgICAgICAgICAgLy8gaW50ZXJjZXB0ZWQgY2xhc3NlcyBleHBlY3QgZW50aXRpZXMgaW5zdGVhZCBvZiBlbGVtZW50cy4KICAgICAgICAgICAgcmVxdWlyZWQgPz89IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CiAgICAgICAgICAgIHJlcXVpcmVkLmFkZChfY29tbW9uRWxlbWVudHMuanNEb3VibGVDbGFzcyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIERvbid0IG1vZGlmeSB0aGUgcmVzdWx0IG9mCiAgICAgICAgLy8gW19pbnRlcmNlcHRvckRhdGEuZ2V0SW50ZXJjZXB0ZWRDbGFzc2VzT25dLgogICAgICAgIGlmIChyZXF1aXJlZCAhPSBudWxsKSB7CiAgICAgICAgICBpbnRlcmNlcHRlZENsYXNzZXMgPSBpbnRlcmNlcHRlZENsYXNzZXMudW5pb24ocmVxdWlyZWQpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIHR5cGUgYXJndW1lbnQgd2hlbiBhbGwgdXNlcyBvZiBpbnRlcmNlcHRlZAogICAgICAvLyBjbGFzc2VzIGV4cGVjdCBlbnRpdGllcyBpbnN0ZWFkIG9mIGVsZW1lbnRzLgogICAgICBpbnRlcmNlcHRlZENsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwogICAgICBmb3IgKEhJbnN0cnVjdGlvbiB1c2VyIGluIG5vZGUudXNlZEJ5KSB7CiAgICAgICAgaWYgKHVzZXIgaXMgSEludm9rZUR5bmFtaWMgJiYKICAgICAgICAgICAgdXNlci5pc0NhbGxPbkludGVyY2VwdG9yKF9jbG9zZWRXb3JsZCkgJiYKICAgICAgICAgICAgbm9kZSA9PSB1c2VyLnJlY2VpdmVyICYmCiAgICAgICAgICAgIHVzZUNvdW50KHVzZXIsIG5vZGUpID09IDEpIHsKICAgICAgICAgIGludGVyY2VwdGVkQ2xhc3Nlcy5hZGRBbGwoX2ludGVyY2VwdG9yRGF0YS5nZXRJbnRlcmNlcHRlZENsYXNzZXNPbigKICAgICAgICAgICAgICB1c2VyLnNlbGVjdG9yLm5hbWUsIF9jbG9zZWRXb3JsZCkpOwogICAgICAgIH0gZWxzZSBpZiAodXNlciBpcyBISW52b2tlU3VwZXIgJiYKICAgICAgICAgICAgdXNlci5pc0NhbGxPbkludGVyY2VwdG9yKF9jbG9zZWRXb3JsZCkgJiYKICAgICAgICAgICAgbm9kZSA9PSB1c2VyLnJlY2VpdmVyICYmCiAgICAgICAgICAgIHVzZUNvdW50KHVzZXIsIG5vZGUpID09IDEpIHsKICAgICAgICAgIGludGVyY2VwdGVkQ2xhc3Nlcy5hZGRBbGwoX2ludGVyY2VwdG9yRGF0YS5nZXRJbnRlcmNlcHRlZENsYXNzZXNPbigKICAgICAgICAgICAgICB1c2VyLnNlbGVjdG9yLm5hbWUsIF9jbG9zZWRXb3JsZCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBVc2UgYSBtb3N0IGdlbmVyYWwgaW50ZXJjZXB0b3IgZm9yIG90aGVyIGluc3RydWN0aW9ucywgZXhhbXBsZSwKICAgICAgICAgIC8vIGlzLWNoZWNrcyBhbmQgZXNjYXBpbmcgaW50ZXJjZXB0b3JzLgogICAgICAgICAgaW50ZXJjZXB0ZWRDbGFzc2VzLmFkZEFsbChfaW50ZXJjZXB0b3JEYXRhLmludGVyY2VwdGVkQ2xhc3Nlcyk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBub2RlLmludGVyY2VwdGVkQ2xhc3NlcyA9IGludGVyY2VwdGVkQ2xhc3NlczsKCiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSBub2RlLnJlY2VpdmVyOwoKICAgIC8vIFRyeSBjb21wdXRpbmcgYSBjb25zdGFudCBpbnRlcmNlcHRvci4KICAgIEhJbnN0cnVjdGlvbiBjb25zdGFudEludGVyY2VwdG9yID0KICAgICAgICB0cnlDb21wdXRlQ29uc3RhbnRJbnRlcmNlcHRvcihyZWNlaXZlciwgaW50ZXJjZXB0ZWRDbGFzc2VzKTsKICAgIGlmIChjb25zdGFudEludGVyY2VwdG9yICE9IG51bGwpIHsKICAgICAgbm9kZS5ibG9jay5yZXdyaXRlKG5vZGUsIGNvbnN0YW50SW50ZXJjZXB0b3IpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLy8gSWYgaXQgaXMgYSBjb25kaXRpb25hbCBjb25zdGFudCBpbnRlcmNlcHRvciBhbmQgd2FzIG5vdCBzdHJlbmd0aGVuZWQgdG8gYQogICAgLy8gY29uc3RhbnQgaW50ZXJjZXB0b3IgdGhlbiB0aGVyZSBpcyBub3RoaW5nIG1vcmUgd2UgY2FuIGRvLgogICAgaWYgKG5vZGUuaXNDb25kaXRpb25hbENvbnN0YW50SW50ZXJjZXB0b3IpIHJldHVybiBmYWxzZTsKCiAgICAvLyBEbyB3ZSBoYXZlIGFuICdhbG1vc3QgY29uc3RhbnQnIGludGVyY2VwdG9yPyAgVGhlIHJlY2VpdmVyIGNvdWxkIGJlCiAgICAvLyBgbnVsbGAgYnV0IG5vdCBhbnkgb3RoZXIgSmF2YVNjcmlwdCBmYWxzeSB2YWx1ZSwgYG51bGxgIHZhbHVlcyBjYXVzZQogICAgLy8gYE5vU3VjaE1ldGhvZEVycm9yYHMsIGFuZCBpZiB0aGUgcmVjZWl2ZXIgd2FzIG5vdCBudWxsIHdlIHdvdWxkIGhhdmUgYQogICAgLy8gY29uc3RhbnQgaW50ZXJjZXB0b3IgYENgLiAgVGhlbiB3ZSBjYW4gdXNlIGAocmVjZWl2ZXIgJiYgQylgIGZvciB0aGUKICAgIC8vIGludGVyY2VwdG9yLgogICAgaWYgKHJlY2VpdmVyLmlzTnVsbChfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNQb3RlbnRpYWxseVRydWUpIHsKICAgICAgaWYgKCFpbnRlcmNlcHRlZENsYXNzZXMuY29udGFpbnMoX2NvbW1vbkVsZW1lbnRzLmpzTnVsbENsYXNzKSkgewogICAgICAgIC8vIENhbiB1c2UgYChyZWNlaXZlciAmJiBDKWAgb25seSBpZiByZWNlaXZlciBpcyBlaXRoZXIgbnVsbCBvciB0cnV0aHkuCiAgICAgICAgaWYgKCEocmVjZWl2ZXIKICAgICAgICAgICAgICAgIC5pc1ByaW1pdGl2ZU51bWJlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgICAgIC5pc1BvdGVudGlhbGx5VHJ1ZSB8fAogICAgICAgICAgICByZWNlaXZlcgogICAgICAgICAgICAgICAgLmlzUHJpbWl0aXZlQm9vbGVhbihfYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgICAgIC5pc1BvdGVudGlhbGx5VHJ1ZSB8fAogICAgICAgICAgICByZWNlaXZlcgogICAgICAgICAgICAgICAgLmlzUHJpbWl0aXZlU3RyaW5nKF9hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAgICAgLmlzUG90ZW50aWFsbHlUcnVlKSkgewogICAgICAgICAgQ2xhc3NFbnRpdHkgaW50ZXJjZXB0b3JDbGFzcyA9IHRyeUNvbXB1dGVDb25zdGFudEludGVyY2VwdG9yRnJvbVR5cGUoCiAgICAgICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZXhjbHVkZU51bGwocmVjZWl2ZXIuaW5zdHJ1Y3Rpb25UeXBlKSwKICAgICAgICAgICAgICBpbnRlcmNlcHRlZENsYXNzZXMpOwogICAgICAgICAgaWYgKGludGVyY2VwdG9yQ2xhc3MgIT0gbnVsbCkgewogICAgICAgICAgICBISW5zdHJ1Y3Rpb24gY29uc3RhbnRJbnN0cnVjdGlvbiA9IF9ncmFwaC5hZGRDb25zdGFudCgKICAgICAgICAgICAgICAgIG5ldyBJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUoaW50ZXJjZXB0b3JDbGFzcyksIF9jbG9zZWRXb3JsZCk7CiAgICAgICAgICAgIG5vZGUuY29uZGl0aW9uYWxDb25zdGFudEludGVyY2VwdG9yID0gY29uc3RhbnRJbnN0cnVjdGlvbjsKICAgICAgICAgICAgY29uc3RhbnRJbnN0cnVjdGlvbi51c2VkQnkuYWRkKG5vZGUpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgLy8gVHJ5IGNyZWF0aW5nIGEgb25lLXNob3QgaW50ZXJjZXB0b3Igb3Igb3B0aW1pemVkIGlzLWNoZWNrCiAgICBpZiAobm9kZS51c2VkQnkubGVuZ3RoICE9IDEpIHJldHVybiBmYWxzZTsKICAgIEhJbnN0cnVjdGlvbiB1c2VyID0gbm9kZS51c2VkQnkuc2luZ2xlOwoKICAgIC8vIElmIHRoZSBpbnRlcmNlcHRvciBbbm9kZV0gd2FzIGxvb3AgaG9pc3RlZCwgd2Uga2VlcCB0aGUgaW50ZXJjZXB0b3IuCiAgICBpZiAoIXVzZXIuaGFzU2FtZUxvb3BIZWFkZXJBcyhub2RlKSkgcmV0dXJuIGZhbHNlOwoKICAgIGJvb2wgcmVwbGFjZVVzZXJXaXRoKEhJbnN0cnVjdGlvbiByZXBsYWNlbWVudCkgewogICAgICBIQmFzaWNCbG9jayBibG9jayA9IHVzZXIuYmxvY2s7CiAgICAgIGJsb2NrLmFkZEFmdGVyKHVzZXIsIHJlcGxhY2VtZW50KTsKICAgICAgYmxvY2sucmV3cml0ZSh1c2VyLCByZXBsYWNlbWVudCk7CiAgICAgIGJsb2NrLnJlbW92ZSh1c2VyKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmICh1c2VyIGlzIEhJcykgewogICAgICAvLyBTZWUgaWYgd2UgY2FuIHJld3JpdGUgdGhlIGlzLWNoZWNrIHRvIHVzZSAnaW5zdGFuY2VvZicsIGkuZS4gcmV3cml0ZQogICAgICAvLyAiZ2V0SW50ZXJjZXB0b3IoeCkuJGlzVCIgdG8gInggaW5zdGFuY2VvZiBUIi4KICAgICAgaWYgKG5vZGUgPT0gdXNlci5pbnRlcmNlcHRvcikgewogICAgICAgIGlmIChfaW50ZXJjZXB0b3JEYXRhLm1heUdlbmVyYXRlSW5zdGFuY2VvZkNoZWNrKAogICAgICAgICAgICB1c2VyLnR5cGVFeHByZXNzaW9uLCBfY2xvc2VkV29ybGQpKSB7CiAgICAgICAgICBISW5zdHJ1Y3Rpb24gaW5zdGFuY2VvZkNoZWNrID0gbmV3IEhJcy5pbnN0YW5jZU9mKHVzZXIudHlwZUV4cHJlc3Npb24sCiAgICAgICAgICAgICAgdXNlci5leHByZXNzaW9uLCB1c2VyLmluc3RydWN0aW9uVHlwZSwgdXNlci5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgICAgICBpbnN0YW5jZW9mQ2hlY2suc291cmNlRWxlbWVudCA9IHVzZXIuc291cmNlRWxlbWVudDsKICAgICAgICAgIHJldHVybiByZXBsYWNlVXNlcldpdGgoaW5zdGFuY2VvZkNoZWNrKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodXNlciBpcyBISW52b2tlRHluYW1pYykgewogICAgICBpZiAobm9kZSA9PSB1c2VyLmlucHV0c1swXSkgewogICAgICAgIC8vIFJlcGxhY2UgdGhlIHVzZXIgd2l0aCBhIFtIT25lU2hvdEludGVyY2VwdG9yXS4KICAgICAgICBIQ29uc3RhbnQgbnVsbENvbnN0YW50ID0gX2dyYXBoLmFkZENvbnN0YW50TnVsbChfY2xvc2VkV29ybGQpOwogICAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMgPSBuZXcgTGlzdDxISW5zdHJ1Y3Rpb24+LmZyb20odXNlci5pbnB1dHMpOwogICAgICAgIGlucHV0c1swXSA9IG51bGxDb25zdGFudDsKICAgICAgICBIT25lU2hvdEludGVyY2VwdG9yIG9uZVNob3RJbnRlcmNlcHRvciA9IG5ldyBIT25lU2hvdEludGVyY2VwdG9yKAogICAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgICAgICAgdXNlci5zZWxlY3RvciwKICAgICAgICAgICAgdXNlci5yZWNlaXZlclR5cGUsCiAgICAgICAgICAgIGlucHV0cywKICAgICAgICAgICAgdXNlci5pbnN0cnVjdGlvblR5cGUsCiAgICAgICAgICAgIHVzZXIudHlwZUFyZ3VtZW50cywKICAgICAgICAgICAgaW50ZXJjZXB0ZWRDbGFzc2VzKTsKICAgICAgICBvbmVTaG90SW50ZXJjZXB0b3Iuc291cmNlSW5mb3JtYXRpb24gPSB1c2VyLnNvdXJjZUluZm9ybWF0aW9uOwogICAgICAgIG9uZVNob3RJbnRlcmNlcHRvci5zb3VyY2VFbGVtZW50ID0gdXNlci5zb3VyY2VFbGVtZW50OwogICAgICAgIHJldHVybiByZXBsYWNlVXNlcldpdGgob25lU2hvdEludGVyY2VwdG9yKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgcmV3cml0ZVNlbGZJbnRlcmNlcHRvclVzZXMoSEludGVyY2VwdG9yIG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciA9IG5vZGUucmVjZWl2ZXI7CgogICAgLy8gQXQgaW5zdHJ1Y3Rpb25zIHRoYXQgdXNlIHRoZSBpbnRlcmNlcHRvciBhbmQgaXRzIHJlY2VpdmVyLCB0aGUgcmVjZWl2ZXIKICAgIC8vIG1pZ2h0IGJlIHJlZmluZWQgYXQgdGhlIHVzZSBzaXRlLgoKICAgIC8vICAgICBkeW5hbWljIHggPSAuLi4KICAgIC8vICAgICBpZiAoeCBpcyBNdW1ibGUpIHsKICAgIC8vICAgICAgIHByaW50KHgubGVuZ3RoKTsgIC8vIFNlbGYtaW50ZXJjZXB0b3IgaGVyZS4KICAgIC8vICAgICB9IGVsc2UgewogICAgLy8gICAgICAgcHJpbnQoeC5sZW5ndGgpOyAgLy8KICAgIC8vICAgICB9CgogICAgZmluaXNoSW52b2tlKEhJbnZva2UgaW52b2tlLCBTZWxlY3RvciBzZWxlY3RvcikgewogICAgICBISW5zdHJ1Y3Rpb24gY2FsbFJlY2VpdmVyID0gaW52b2tlLmdldERhcnRSZWNlaXZlcihfY2xvc2VkV29ybGQpOwogICAgICBpZiAocmVjZWl2ZXIubm9uQ2hlY2soKSA9PSBjYWxsUmVjZWl2ZXIubm9uQ2hlY2soKSkgewogICAgICAgIFNldDxDbGFzc0VudGl0eT4gaW50ZXJjZXB0ZWRDbGFzc2VzID0gX2ludGVyY2VwdG9yRGF0YQogICAgICAgICAgICAuZ2V0SW50ZXJjZXB0ZWRDbGFzc2VzT24oc2VsZWN0b3IubmFtZSwgX2Nsb3NlZFdvcmxkKTsKCiAgICAgICAgaWYgKGNhblVzZVNlbGZGb3JJbnRlcmNlcHRvcihjYWxsUmVjZWl2ZXIsCiAgICAgICAgICAgIGludGVyY2VwdGVkQ2xhc3NlczogaW50ZXJjZXB0ZWRDbGFzc2VzKSkgewogICAgICAgICAgaW52b2tlLmNoYW5nZVVzZShub2RlLCBjYWxsUmVjZWl2ZXIpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGZvciAoSEluc3RydWN0aW9uIHVzZXIgaW4gbm9kZS51c2VkQnkudG9MaXN0KCkpIHsKICAgICAgaWYgKHVzZXIgaXMgSElzKSB7CiAgICAgICAgaWYgKHVzZXIuaW50ZXJjZXB0b3IgPT0gbm9kZSkgewogICAgICAgICAgSEluc3RydWN0aW9uIGV4cHJlc3Npb24gPSB1c2VyLmV4cHJlc3Npb247CiAgICAgICAgICBpZiAoY2FuVXNlU2VsZkZvckludGVyY2VwdG9yKGV4cHJlc3Npb24pKSB7CiAgICAgICAgICAgIHVzZXIuY2hhbmdlVXNlKG5vZGUsIGV4cHJlc3Npb24pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICh1c2VyIGlzIEhJbnZva2VEeW5hbWljKSB7CiAgICAgICAgaWYgKHVzZXIuaXNDYWxsT25JbnRlcmNlcHRvcihfY2xvc2VkV29ybGQpICYmCiAgICAgICAgICAgIG5vZGUgPT0gdXNlci5pbnB1dHNbMF0gJiYKICAgICAgICAgICAgdXNlQ291bnQodXNlciwgbm9kZSkgPT0gMSkgewogICAgICAgICAgZmluaXNoSW52b2tlKHVzZXIsIHVzZXIuc2VsZWN0b3IpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICh1c2VyIGlzIEhJbnZva2VTdXBlcikgewogICAgICAgIGlmICh1c2VyLmlzQ2FsbE9uSW50ZXJjZXB0b3IoX2Nsb3NlZFdvcmxkKSAmJgogICAgICAgICAgICBub2RlID09IHVzZXIuaW5wdXRzWzBdICYmCiAgICAgICAgICAgIHVzZUNvdW50KHVzZXIsIG5vZGUpID09IDEpIHsKICAgICAgICAgIGZpbmlzaEludm9rZSh1c2VyLCB1c2VyLnNlbGVjdG9yKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gVE9ETyhzcmEpOiBBcmUgdGhlcmUgb3RoZXIgcGFpcmVkIHVzZXMgb2YgdGhlIHJlY2VpdmVyIGFuZAogICAgICAgIC8vIGludGVyY2VwdG9yIHdoZXJlIHdlIGNhbiBtYWtlIHVzZSBvZiBhIHN0cmVuZ3RoZW5lZCByZWNlaXZlcj8KICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdE9uZVNob3RJbnRlcmNlcHRvcihIT25lU2hvdEludGVyY2VwdG9yIG5vZGUpIHsKICAgIC8vICdVbmRvJyB0aGUgb25lLXNob3QgdHJhbnNmb3JtYXRpb24gaWYgdGhlIHJlY2VpdmVyIGhhcyBhIGNvbnN0YW50CiAgICAvLyBpbnRlcmNlcHRvci4KICAgIEhJbnN0cnVjdGlvbiBjb25zdGFudCA9CiAgICAgICAgdHJ5Q29tcHV0ZUNvbnN0YW50SW50ZXJjZXB0b3Iobm9kZS5pbnB1dHNbMV0sIG5vZGUuaW50ZXJjZXB0ZWRDbGFzc2VzKTsKCiAgICBpZiAoY29uc3RhbnQgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwoKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gbm9kZS5zZWxlY3RvcjsKICAgIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXJUeXBlID0gbm9kZS5yZWNlaXZlclR5cGU7CiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb247CiAgICBpZiAoc2VsZWN0b3IuaXNHZXR0ZXIpIHsKICAgICAgaW5zdHJ1Y3Rpb24gPSBuZXcgSEludm9rZUR5bmFtaWNHZXR0ZXIoCiAgICAgICAgICBzZWxlY3RvciwKICAgICAgICAgIHJlY2VpdmVyVHlwZSwKICAgICAgICAgIG5vZGUuZWxlbWVudCwKICAgICAgICAgIDxISW5zdHJ1Y3Rpb24+W2NvbnN0YW50LCBub2RlLmlucHV0c1sxXV0sCiAgICAgICAgICB0cnVlLAogICAgICAgICAgbm9kZS5pbnN0cnVjdGlvblR5cGUsCiAgICAgICAgICBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuaXNTZXR0ZXIpIHsKICAgICAgaW5zdHJ1Y3Rpb24gPSBuZXcgSEludm9rZUR5bmFtaWNTZXR0ZXIoCiAgICAgICAgICBzZWxlY3RvciwKICAgICAgICAgIHJlY2VpdmVyVHlwZSwKICAgICAgICAgIG5vZGUuZWxlbWVudCwKICAgICAgICAgIDxISW5zdHJ1Y3Rpb24+W2NvbnN0YW50LCBub2RlLmlucHV0c1sxXSwgbm9kZS5pbnB1dHNbMl1dLAogICAgICAgICAgdHJ1ZSwKICAgICAgICAgIG5vZGUuaW5zdHJ1Y3Rpb25UeXBlLAogICAgICAgICAgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9IGVsc2UgewogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzID0gbmV3IExpc3Q8SEluc3RydWN0aW9uPi5mcm9tKG5vZGUuaW5wdXRzKTsKICAgICAgaW5wdXRzWzBdID0gY29uc3RhbnQ7CiAgICAgIGluc3RydWN0aW9uID0gbmV3IEhJbnZva2VEeW5hbWljTWV0aG9kKHNlbGVjdG9yLCByZWNlaXZlclR5cGUsIGlucHV0cywKICAgICAgICAgIG5vZGUuaW5zdHJ1Y3Rpb25UeXBlLCBub2RlLnR5cGVBcmd1bWVudHMsIG5vZGUuc291cmNlSW5mb3JtYXRpb24sCiAgICAgICAgICBpc0ludGVyY2VwdGVkOiB0cnVlKTsKICAgIH0KCiAgICBIQmFzaWNCbG9jayBibG9jayA9IG5vZGUuYmxvY2s7CiAgICBibG9jay5hZGRBZnRlcihub2RlLCBpbnN0cnVjdGlvbik7CiAgICBibG9jay5yZXdyaXRlKG5vZGUsIGluc3RydWN0aW9uKTsKICAgIHJldHVybiB0cnVlOwogIH0KfQqB5QBOTjwBNiMkMS4yKhUYATkEQzEESwRIDQROUFJRBFI3BDMjDDEjJREBRAFFAUgBMigBDCIZHwQBDCsZASsiNCwaLwgaBgQBDDwBDCUxLDQBPwdGTk9LSwE7OxwvBhIEATcvSC4UBkMoRigWCAYBUUcgMRwEAS5BTTQBMgFFLzIqJQYBUDcEATVBP0AsCE4pTSxOKk0sRitNREdQTU4sDU9HHwFOUUpOTVAuRk8YCAYBEQQBRBkIMzNQCBoNBhMEAT86AQwtSFFRTzgTBgEmASoBUU5PUCEHSgcoB1FPUSEBKTlNJSc3JipFMgFHN0hKSiMxKjpKQkdIMTYMRUdIMTkMCiY3IEMKCA1NNjMvJjYlKU4yKzYlKU4yEU0yShEKCAYBMgErAS0nRSc1FAYBUUI9AUtMTkwUQ0dQFzkmFTomFTknUEojKkNPRzIaDAoIBgFBLywBTDcBNSYpKBoUBgEXTjcmOTJRTj4zCggpJDpHTiJKIhsfFCIgIUc/NAgGARIEATcrAU8pARseORQiDQE2SDw/QwEzNzAKCAYBNhkoNTYuDAorNiYpLQopNiYpLQoPRkkIBgQBDDtJFBxQASgBJzQeHS4UGBg0ECAjJC4UGBhEECAjDUwcTUwgBgEkJyYRBAIBNHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9pbnRlcmNlcHRvcl9zaW1wbGlmaWVyLmRhcnQ4c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc3NhL3R5cGVzX3Byb3BhZ2F0aW9uLmRhcnTAAFCnLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgQ29tbW9uRWxlbWVudHM7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CmltcG9ydCAnLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CmltcG9ydCAnbG9nZ2luZy5kYXJ0JzsKaW1wb3J0ICdub2Rlcy5kYXJ0JzsKaW1wb3J0ICdvcHRpbWl6ZS5kYXJ0JzsKCi8vLyBUeXBlIHByb3BhZ2F0aW9uIGFuZCBjb25kaXRpb25pbmcgY2hlY2sgaW5zZXJ0aW9uLgovLy8KLy8vIDEuIFR5cGUgcHJvcGFnYXRpb24gKGRhdGFmbG93KSB0byBkZXRlcm1pbmUgdGhlIHR5cGVzIG9mIGFsbCBub2Rlcy4KLy8vCi8vLyAyLiBIVHlwZUtub3duIG5vZGUgaW5zZXJ0aW9uIGNhcHR1cmVzIHR5cGUgc3RyZW5ndGhlbmluZy4KLy8vCi8vLyAzLiBDb25kaXRpb25pbmcgY2hlY2sgaW5zZXJ0aW9uIGluc2VydHMgcmVjZWl2ZXIgYW5kIGFyZ3VtZW50IGNoZWNrcyBvbgovLy8gICAgY2FsbHMgd2hlcmUgdGhhdCBjYWxsIGlzIGV4cGVjdGVkIHRvIGJlIHJlcGxhY2VkIHdpdGggYW4gaW5zdHJ1Y3Rpb24gd2l0aAovLy8gICAgYSBuYXJyb3dlciBkb21haW4uIEZvciBleGFtcGxlIGB7TnVsbCxpbnR9ICsge2ludH1gIHdvdWxkIGluc2VydCBhbgovLy8gICAgcmVjZWl2ZXIgY2hlY2sgdG8gc3RyZW5ndGhlbiB0aGUgdHlwZXMgdG8gYHtpbnR9ICsge2ludH1gIHRvIGFsbG93IHRoZQovLy8gICAgY2FsbCBvZiBgb3BlcmF0b3IrYCB0byBiZSByZXBsYWNlZCB3aXRoIGEgSEFkZCBpbnN0cnVjdGlvbi4KLy8vCi8vLyBBbmFseXNpcyBhbmQgbm9kZSBpbnNlcnRpb24gYXJlIGRvbmUgdG9nZXRoZXIsIHNpbmNlIGluc2VydGlvbiBpbXByb3ZlcyB0aGUKLy8vIHR5cGUgcHJvcGFnYXRpb24gcmVzdWx0cy4KLy8gVE9ETyhzcmEpOiBUaGUgSW52b2tlRHluYW1pY1NwZWNpYWxpemVyIHNob3VsZCBiZSBjb25zdWx0ZWQgZm9yIGJldHRlcgovLyB0YXJnZXRlZCBjb25kaXRpb25pbmcgY2hlY2tzLgpjbGFzcyBTc2FUeXBlUHJvcGFnYXRvciBleHRlbmRzIEhCYXNlVmlzaXRvciBpbXBsZW1lbnRzIE9wdGltaXphdGlvblBoYXNlIHsKICBmaW5hbCBNYXA8aW50LCBISW5zdHJ1Y3Rpb24+IHdvcmttYXAgPSBuZXcgTWFwPGludCwgSEluc3RydWN0aW9uPigpOwogIGZpbmFsIExpc3Q8aW50PiB3b3JrbGlzdCA9IG5ldyBMaXN0PGludD4oKTsKICBmaW5hbCBNYXA8SEluc3RydWN0aW9uLCBGdW5jdGlvbj4gcGVuZGluZ09wdGltaXphdGlvbnMgPQogICAgICBuZXcgTWFwPEhJbnN0cnVjdGlvbiwgRnVuY3Rpb24+KCk7CgogIGZpbmFsIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHM7CiAgZmluYWwgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHM7CiAgZmluYWwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkOwogIGZpbmFsIE9wdGltaXphdGlvblRlc3RMb2cgX2xvZzsKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gJ1NzYVR5cGVQcm9wYWdhdG9yJzsKCiAgU3NhVHlwZVByb3BhZ2F0b3IoCiAgICAgIHRoaXMucmVzdWx0cywgdGhpcy5jb21tb25FbGVtZW50cywgdGhpcy5jbG9zZWRXb3JsZCwgdGhpcy5fbG9nKTsKCiAgQWJzdHJhY3RWYWx1ZURvbWFpbiBnZXQgYWJzdHJhY3RWYWx1ZURvbWFpbiA9PgogICAgICBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgcmV0dXJuIGluc3RydWN0aW9uLmFjY2VwdCh0aGlzKTsKICB9CgogIC8vIFJlLWNvbXB1dGUgYW5kIHVwZGF0ZSB0aGUgdHlwZSBvZiB0aGUgaW5zdHJ1Y3Rpb24uIFJldHVybnMKICAvLyB3aGV0aGVyIG9yIG5vdCB0aGUgdHlwZSB3YXMgY2hhbmdlZC4KICBib29sIHVwZGF0ZVR5cGUoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICAvLyBDb21wdXRlIG9sZCBhbmQgbmV3IHR5cGVzLgogICAgQWJzdHJhY3RWYWx1ZSBvbGRUeXBlID0gaW5zdHJ1Y3Rpb24uaW5zdHJ1Y3Rpb25UeXBlOwogICAgQWJzdHJhY3RWYWx1ZSBuZXdUeXBlID0gY29tcHV0ZVR5cGUoaW5zdHJ1Y3Rpb24pOwogICAgYXNzZXJ0KG5ld1R5cGUgIT0gbnVsbCk7CiAgICAvLyBXZSB1bmNvbmRpdGlvbmFsbHkgcmVwbGFjZSB0aGUgcHJvcGFnYXRlZCB0eXBlIHdpdGggdGhlIG5ldyB0eXBlLiBUaGUKICAgIC8vIGNvbXB1dGVUeXBlIG11c3QgbWFrZSBzdXJlIHRoYXQgd2UgZXZlbnR1YWxseSByZWFjaCBhIHN0YWJsZSBzdGF0ZS4KICAgIGluc3RydWN0aW9uLmluc3RydWN0aW9uVHlwZSA9IG5ld1R5cGU7CiAgICByZXR1cm4gb2xkVHlwZSAhPSBuZXdUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEdyYXBoKEhHcmFwaCBncmFwaCkgewogICAgdmlzaXREb21pbmF0b3JUcmVlKGdyYXBoKTsKICAgIHByb2Nlc3NXb3JrbGlzdCgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRCYXNpY0Jsb2NrKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICBpZiAoYmxvY2suaXNMb29wSGVhZGVyKCkpIHsKICAgICAgYmxvY2suZm9yRWFjaFBoaSgoSFBoaSBwaGkpIHsKICAgICAgICAvLyBTZXQgdGhlIGluaXRpYWwgdHlwZSBmb3IgdGhlIHBoaS4gV2UncmUgbm90IHVzaW5nIHRoZSB0eXBlCiAgICAgICAgLy8gdGhlIHBoaSB0aGlua3MgaXQgaGFzIGJlY2F1c2UgbmV3IG9wdGltaXphdGlvbnMgbWF5IGltcGx5CiAgICAgICAgLy8gY2hhbmdpbmcgaXQuCiAgICAgICAgLy8gSW4gdGhlb3J5IHdlIHdvdWxkIG5lZWQgdG8gbWFyawogICAgICAgIC8vIHRoZSB0eXBlIG9mIGFsbCBvdGhlciBpbmNvbWluZyBlZGdlcyBhcyAidW5pbml0aWFsaXplZCIgYW5kIHRha2UgdGhpcwogICAgICAgIC8vIGludG8gYWNjb3VudCB3aGVuIGRvaW5nIHRoZSBwcm9wYWdhdGlvbiBpbnNpZGUgdGhlIHBoaXMuIEp1c3QKICAgICAgICAvLyBzZXR0aW5nIHRoZSBwcm9wYWdhdGVkIHR5cGUgaXMgaG93ZXZlciBlYXNpZXIuCiAgICAgICAgcGhpLmluc3RydWN0aW9uVHlwZSA9IHBoaS5pbnB1dHNbMF0uaW5zdHJ1Y3Rpb25UeXBlOwogICAgICAgIGFkZFRvV29ya0xpc3QocGhpKTsKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICBibG9jay5mb3JFYWNoUGhpKChIUGhpIHBoaSkgewogICAgICAgIGlmICh1cGRhdGVUeXBlKHBoaSkpIHsKICAgICAgICAgIGFkZERlcGVuZGVudEluc3RydWN0aW9uc1RvV29ya0xpc3QocGhpKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQoKICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IGJsb2NrLmZpcnN0OwogICAgd2hpbGUgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgaWYgKHVwZGF0ZVR5cGUoaW5zdHJ1Y3Rpb24pKSB7CiAgICAgICAgYWRkRGVwZW5kZW50SW5zdHJ1Y3Rpb25zVG9Xb3JrTGlzdChpbnN0cnVjdGlvbik7CiAgICAgIH0KICAgICAgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbi5uZXh0OwogICAgfQogIH0KCiAgdm9pZCBwcm9jZXNzV29ya2xpc3QoKSB7CiAgICBkbyB7CiAgICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSkgewogICAgICAgIGludCBpZCA9IHdvcmtsaXN0LnJlbW92ZUxhc3QoKTsKICAgICAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSB3b3JrbWFwW2lkXTsKICAgICAgICBhc3NlcnQoaW5zdHJ1Y3Rpb24gIT0gbnVsbCk7CiAgICAgICAgd29ya21hcC5yZW1vdmUoaWQpOwogICAgICAgIGlmICh1cGRhdGVUeXBlKGluc3RydWN0aW9uKSkgewogICAgICAgICAgYWRkRGVwZW5kZW50SW5zdHJ1Y3Rpb25zVG9Xb3JrTGlzdChpbnN0cnVjdGlvbik7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIFdoaWxlIHByb2Nlc3NpbmcgdGhlIG9wdGltaXphYmxlIGFyaXRobWV0aWMgaW5zdHJ1Y3Rpb25zLCB3ZQogICAgICAvLyBtYXkgZGlzY292ZXIgYmV0dGVyIHR5cGUgaW5mb3JtYXRpb24gZm9yIGRvbWluYXRlZCB1c2VycyBvZgogICAgICAvLyByZXBsYWNlZCBvcGVyYW5kcywgc28gd2UgbWF5IG5lZWQgdG8gdGFrZSBhbm90aGVyIHN0YWIgYXQKICAgICAgLy8gZW1wdHlpbmcgdGhlIHdvcmtsaXN0IGFmdGVyd2FyZHMuCiAgICAgIHByb2Nlc3NQZW5kaW5nT3B0aW1pemF0aW9ucygpOwogICAgfSB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkpOwogIH0KCiAgdm9pZCBhZGRUb1dvcmtMaXN0KEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgZmluYWwgaW50IGlkID0gaW5zdHJ1Y3Rpb24uaWQ7CgogICAgaWYgKCF3b3JrbWFwLmNvbnRhaW5zS2V5KGlkKSkgewogICAgICB3b3JrbGlzdC5hZGQoaWQpOwogICAgICB3b3JrbWFwW2lkXSA9IGluc3RydWN0aW9uOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB2aXNpdEJpbmFyeUFyaXRobWV0aWMoSEJpbmFyeUFyaXRobWV0aWMgaW5zdHJ1Y3Rpb24pIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gaW5zdHJ1Y3Rpb24ubGVmdDsKICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IGluc3RydWN0aW9uLnJpZ2h0OwogICAgaWYgKGxlZnQuaXNJbnRlZ2VyKGFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICByaWdodC5pc0ludGVnZXIoYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZURvbWFpbi5pbnRUeXBlOwogICAgfQogICAgaWYgKGxlZnQuaXNEb3VibGUoYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZURvbWFpbi5kb3VibGVUeXBlOwogICAgfQogICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4ubnVtVHlwZTsKICB9CgogIEFic3RyYWN0VmFsdWUgY2hlY2tQb3NpdGl2ZUludGVnZXIoSEJpbmFyeUFyaXRobWV0aWMgaW5zdHJ1Y3Rpb24pIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gaW5zdHJ1Y3Rpb24ubGVmdDsKICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IGluc3RydWN0aW9uLnJpZ2h0OwogICAgaWYgKGxlZnQuaXNQb3NpdGl2ZUludGVnZXIoYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgIHJpZ2h0LmlzUG9zaXRpdmVJbnRlZ2VyKGFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4ucG9zaXRpdmVJbnRUeXBlOwogICAgfQogICAgcmV0dXJuIHZpc2l0QmluYXJ5QXJpdGhtZXRpYyhpbnN0cnVjdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHZpc2l0TXVsdGlwbHkoSE11bHRpcGx5IGluc3RydWN0aW9uKSB7CiAgICByZXR1cm4gY2hlY2tQb3NpdGl2ZUludGVnZXIoaW5zdHJ1Y3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB2aXNpdEFkZChIQWRkIGluc3RydWN0aW9uKSB7CiAgICByZXR1cm4gY2hlY2tQb3NpdGl2ZUludGVnZXIoaW5zdHJ1Y3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB2aXNpdERpdmlkZShIRGl2aWRlIGluc3RydWN0aW9uKSB7CiAgICAvLyBBbHdheXMgZG91YmxlLCBhcyBpbml0aWFsaXplZC4KICAgIHJldHVybiBpbnN0cnVjdGlvbi5pbnN0cnVjdGlvblR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHZpc2l0VHJ1bmNhdGluZ0RpdmlkZShIVHJ1bmNhdGluZ0RpdmlkZSBpbnN0cnVjdGlvbikgewogICAgLy8gQWx3YXlzIGFzIGluaXRpYWxpemVkLgogICAgcmV0dXJuIGluc3RydWN0aW9uLmluc3RydWN0aW9uVHlwZTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdmlzaXRSZW1haW5kZXIoSFJlbWFpbmRlciBpbnN0cnVjdGlvbikgewogICAgLy8gQWx3YXlzIGFzIGluaXRpYWxpemVkLgogICAgcmV0dXJuIGluc3RydWN0aW9uLmluc3RydWN0aW9uVHlwZTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdmlzaXROZWdhdGUoSE5lZ2F0ZSBpbnN0cnVjdGlvbikgewogICAgSEluc3RydWN0aW9uIG9wZXJhbmQgPSBpbnN0cnVjdGlvbi5vcGVyYW5kOwogICAgLy8gV2UgaGF2ZSBpbnRlZ2VyIHN1YmNsYXNzZXMgdGhhdCByZXByZXNlbnQgcmFuZ2VzLCBzbyB3aWRlbiBhbnkgaW50CiAgICAvLyBzdWJjbGFzcyB0byBmdWxsIGludGVnZXIuCiAgICBpZiAob3BlcmFuZC5pc0ludGVnZXIoYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZURvbWFpbi5pbnRUeXBlOwogICAgfQogICAgcmV0dXJuIGluc3RydWN0aW9uLm9wZXJhbmQuaW5zdHJ1Y3Rpb25UeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB2aXNpdEFicyhIQWJzIGluc3RydWN0aW9uKSB7CiAgICAvLyBUT0RPKHNyYSk6IENhbiBuYXJyb3cgdG8gbm9uLW5lZ2F0aXZlIHR5cGUgZm9yIGludGVnZXJzLgogICAgcmV0dXJuIGluc3RydWN0aW9uLm9wZXJhbmQuaW5zdHJ1Y3Rpb25UeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB2aXNpdEluc3RydWN0aW9uKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgYXNzZXJ0KGluc3RydWN0aW9uLmluc3RydWN0aW9uVHlwZSAhPSBudWxsKTsKICAgIHJldHVybiBpbnN0cnVjdGlvbi5pbnN0cnVjdGlvblR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHZpc2l0UGhpKEhQaGkgcGhpKSB7CiAgICBBYnN0cmFjdFZhbHVlIGNhbmRpZGF0ZVR5cGUgPSBhYnN0cmFjdFZhbHVlRG9tYWluLmVtcHR5VHlwZTsKICAgIGZvciAoaW50IGkgPSAwLCBsZW5ndGggPSBwaGkuaW5wdXRzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIEFic3RyYWN0VmFsdWUgaW5wdXRUeXBlID0gcGhpLmlucHV0c1tpXS5pbnN0cnVjdGlvblR5cGU7CiAgICAgIGNhbmRpZGF0ZVR5cGUgPSBhYnN0cmFjdFZhbHVlRG9tYWluLnVuaW9uKGNhbmRpZGF0ZVR5cGUsIGlucHV0VHlwZSk7CiAgICB9CiAgICByZXR1cm4gY2FuZGlkYXRlVHlwZTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdmlzaXRUeXBlQ29udmVyc2lvbihIVHlwZUNvbnZlcnNpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIEhJbnN0cnVjdGlvbiBpbnB1dCA9IGluc3RydWN0aW9uLmNoZWNrZWRJbnB1dDsKICAgIEFic3RyYWN0VmFsdWUgaW5wdXRUeXBlID0gaW5wdXQuaW5zdHJ1Y3Rpb25UeXBlOwogICAgQWJzdHJhY3RWYWx1ZSBjaGVja2VkVHlwZSA9IGluc3RydWN0aW9uLmNoZWNrZWRUeXBlOwogICAgQWJzdHJhY3RWYWx1ZSBvdXRwdXRUeXBlID0KICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmludGVyc2VjdGlvbihjaGVja2VkVHlwZSwgaW5wdXRUeXBlKTsKICAgIG91dHB1dFR5cGUgPSBfbnVtZXJpY0ZpeHVwKG91dHB1dFR5cGUsIGlucHV0VHlwZSwgY2hlY2tlZFR5cGUpOwogICAgaWYgKGlucHV0VHlwZSAhPSBvdXRwdXRUeXBlKSB7CiAgICAgIC8vIFJlcGxhY2UgZG9taW5hdGVkIHVzZXMgb2YgaW5wdXQgd2l0aCB1c2VzIG9mIHRoaXMgSFR5cGVDb252ZXJzaW9uIHNvCiAgICAgIC8vIHRoZSB1c2VzIGJlbmVmaXQgZnJvbSB0aGUgc3Ryb25nZXIgdHlwZS4KICAgICAgLy8KICAgICAgLy8gVGhlIGRlcGVuZGVuY3kgb24gdGhlIGNoZWNrZWQgdmFsdWUgYWxzbyBpbXByb3ZlcyB0aGUgZ2VuZXJhdGVkCiAgICAgIC8vIEphdmFTY3JpcHQuIE1hbnkgY2hlY2tzIGFyZSBjb21waWxlZCB0byBhIGZ1bmN0aW9uIGNhbGwgZXhwcmVzc2lvbiB0aGF0CiAgICAgIC8vIHJldHVybnMgdGhlIGNoZWNrZWQgcmVzdWx0LCBzbyB0aGUgY2hlY2sgY2FuIGJlIGdlbmVyYXRlZCBhcyBhCiAgICAgIC8vIHN1YmV4cHJlc3Npb24gcmF0aGVyIHRoYW4gYSBzZXBhcmF0ZSBzdGF0ZW1lbnQuCiAgICAgIC8vCiAgICAgIC8vIERvIG5vdCByZXBsYWNlIGxvY2FsIGFjY2Vzc2VzLCBzaW5jZSB0aGUgbG9jYWwgbXVzdCBiZSBhIEhMb2NhbFZhbHVlLAogICAgICAvLyBub3QgYSBIVHlwZUNvbnZlcnNpb24uCiAgICAgIGlmICghKGlucHV0IGlzIEhQYXJhbWV0ZXJWYWx1ZSAmJiBpbnB1dC51c2VkQXNWYXJpYWJsZSgpKSkgewogICAgICAgIGlucHV0LnJlcGxhY2VBbGxVc2Vyc0RvbWluYXRlZEJ5KGluc3RydWN0aW9uLm5leHQsIGluc3RydWN0aW9uKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG91dHB1dFR5cGU7CiAgfQoKICBBYnN0cmFjdFZhbHVlIF9udW1lcmljRml4dXAoQWJzdHJhY3RWYWx1ZSBvdXRwdXRUeXBlLCBBYnN0cmFjdFZhbHVlIGlucHV0VHlwZSwKICAgICAgQWJzdHJhY3RWYWx1ZSBjaGVja2VkVHlwZSkgewogICAgaWYgKGFic3RyYWN0VmFsdWVEb21haW4uaXNFbXB0eShvdXRwdXRUeXBlKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIC8vIEludGVyc2VjdGlvbiBvZiBkb3VibGUgYW5kIGludGVnZXIgY29uZmxpY3RzIChpcyBlbXB0eSksIGJ1dCBKUyBudW1iZXJzCiAgICAgIC8vIGNhbiBiZSBib3RoIGludCBhbmQgZG91YmxlIGF0IHRoZSBzYW1lIHRpbWUuICBGb3IgZXhhbXBsZSwgdGhlIGlucHV0CiAgICAgIC8vIGNhbiBiZSBhIGxpdGVyYWwgZG91YmxlICc4LjAnIHRoYXQgaXMgbWFya2VkIGFzIGFuIGludGVnZXIgKGJlY2F1c2UgJ2lzCiAgICAgIC8vIGludCcgd2lsbCByZXR1cm4gJ3RydWUnKS4gIFdoYXQgd2UgcmVhbGx5IG5lZWQgdG8gZG8gaXMgbWFrZSB0aGUKICAgICAgLy8gb3ZlcmxhcCBiZXR3ZWVuIGludCBhbmQgZG91YmxlIHZhbHVlcyBleHBsaWNpdCBpbiB0aGUgVHlwZU1hc2sgc3lzdGVtLgogICAgICBpZiAoYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0ludGVnZXJPck51bGwoaW5wdXRUeXBlKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmlzRG91YmxlT3JOdWxsKGNoZWNrZWRUeXBlKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgaWYgKGFic3RyYWN0VmFsdWVEb21haW4uaXNOdWxsKGlucHV0VHlwZSkuaXNQb3RlbnRpYWxseVRydWUgJiYKICAgICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5pc051bGwoY2hlY2tlZFR5cGUpLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgICAgICBvdXRwdXRUeXBlID0KICAgICAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmluY2x1ZGVOdWxsKGFic3RyYWN0VmFsdWVEb21haW4uZG91YmxlVHlwZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG91dHB1dFR5cGUgPSBhYnN0cmFjdFZhbHVlRG9tYWluLmRvdWJsZVR5cGU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gb3V0cHV0VHlwZTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdmlzaXRQcmltaXRpdmVDaGVjayhIUHJpbWl0aXZlQ2hlY2sgaW5zdHJ1Y3Rpb24pIHsKICAgIEhJbnN0cnVjdGlvbiBpbnB1dCA9IGluc3RydWN0aW9uLmNoZWNrZWRJbnB1dDsKICAgIEFic3RyYWN0VmFsdWUgaW5wdXRUeXBlID0gaW5wdXQuaW5zdHJ1Y3Rpb25UeXBlOwogICAgQWJzdHJhY3RWYWx1ZSBjaGVja2VkVHlwZSA9IGluc3RydWN0aW9uLmNoZWNrZWRUeXBlOwoKICAgIC8vIFdlIG11c3QgbWFrZSBzdXJlIGEgcmVjZWl2ZXIgb3IgYXJndW1lbnQgY2hlY2sgZG9lcyBub3QgdHJ5IHRvIGRvIGFuIGludAogICAgLy8gY2hlY2ssIGJlY2F1c2UgYW4gaW50IGNoZWNrIGlzIG5vdCBlbm91Z2guICBXZSBvbmx5IGRvIGFuIGludCBjaGVjayBpZgogICAgLy8gdGhlIGlucHV0IGlzIGludGVnZXIgb3IgbnVsbC4KICAgIGlmIChhYnN0cmFjdFZhbHVlRG9tYWluLmlzTnVtYmVyT3JOdWxsKGNoZWNrZWRUeXBlKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0RvdWJsZU9yTnVsbChjaGVja2VkVHlwZSkuaXNEZWZpbml0ZWx5RmFsc2UgJiYKICAgICAgICBpbnB1dC5pc0ludGVnZXJPck51bGwoYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBpbnN0cnVjdGlvbi5jaGVja2VkVHlwZSA9IGFic3RyYWN0VmFsdWVEb21haW4uaW50VHlwZTsKICAgIH0gZWxzZSBpZiAoYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgICAgICAuaXNJbnRlZ2VyT3JOdWxsKGNoZWNrZWRUeXBlKQogICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgIGlucHV0LmlzSW50ZWdlck9yTnVsbChhYnN0cmFjdFZhbHVlRG9tYWluKS5pc1BvdGVudGlhbGx5RmFsc2UpIHsKICAgICAgaW5zdHJ1Y3Rpb24uY2hlY2tlZFR5cGUgPSBhYnN0cmFjdFZhbHVlRG9tYWluLm51bVR5cGU7CiAgICB9CgogICAgQWJzdHJhY3RWYWx1ZSBvdXRwdXRUeXBlID0KICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmludGVyc2VjdGlvbihjaGVja2VkVHlwZSwgaW5wdXRUeXBlKTsKICAgIG91dHB1dFR5cGUgPSBfbnVtZXJpY0ZpeHVwKG91dHB1dFR5cGUsIGlucHV0VHlwZSwgY2hlY2tlZFR5cGUpOwogICAgaWYgKGlucHV0VHlwZSAhPSBvdXRwdXRUeXBlKSB7CiAgICAgIC8vIFJlcGxhY2UgZG9taW5hdGVkIHVzZXMgb2YgaW5wdXQgd2l0aCB1c2VzIG9mIHRoaXMgSFByaW1pdGl2ZUNoZWNrIHNvCiAgICAgIC8vIHRoZSB1c2VzIGJlbmVmaXQgZnJvbSB0aGUgc3Ryb25nZXIgdHlwZS4KICAgICAgLy8KICAgICAgLy8gRG8gbm90IHJlcGxhY2UgbG9jYWwgdmFyaWFibGUgYWNjZXNzZXMsIHNpbmNlIHRoZSBsb2NhbCBtdXN0IGJlIGEKICAgICAgLy8gSExvY2FsVmFsdWUsIG5vdCBhbm90aGVyIGtpbmQgb2YgaW5zdHJ1Y3Rpb24uCiAgICAgIGlmICghKGlucHV0IGlzIEhQYXJhbWV0ZXJWYWx1ZSAmJiBpbnB1dC51c2VkQXNWYXJpYWJsZSgpKSkgewogICAgICAgIGlucHV0LnJlcGxhY2VBbGxVc2Vyc0RvbWluYXRlZEJ5KGluc3RydWN0aW9uLm5leHQsIGluc3RydWN0aW9uKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG91dHB1dFR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHZpc2l0VHlwZUtub3duKEhUeXBlS25vd24gaW5zdHJ1Y3Rpb24pIHsKICAgIEhJbnN0cnVjdGlvbiBpbnB1dCA9IGluc3RydWN0aW9uLmNoZWNrZWRJbnB1dDsKICAgIEFic3RyYWN0VmFsdWUgaW5wdXRUeXBlID0gaW5wdXQuaW5zdHJ1Y3Rpb25UeXBlOwogICAgQWJzdHJhY3RWYWx1ZSBvdXRwdXRUeXBlID0KICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmludGVyc2VjdGlvbihpbnN0cnVjdGlvbi5rbm93blR5cGUsIGlucHV0VHlwZSk7CiAgICBpZiAoaW5wdXRUeXBlICE9IG91dHB1dFR5cGUpIHsKICAgICAgaW5wdXQucmVwbGFjZUFsbFVzZXJzRG9taW5hdGVkQnkoaW5zdHJ1Y3Rpb24ubmV4dCwgaW5zdHJ1Y3Rpb24pOwogICAgfQogICAgcmV0dXJuIG91dHB1dFR5cGU7CiAgfQoKICB2b2lkIGNvbnZlcnRJbnB1dChISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwgSEluc3RydWN0aW9uIGlucHV0LAogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUsIGludCBraW5kLCBEYXJ0VHlwZSB0eXBlRXhwcmVzc2lvbikgewogICAgYXNzZXJ0KGtpbmQgPT0gSFByaW1pdGl2ZUNoZWNrLlJFQ0VJVkVSX1RZUEVfQ0hFQ0sgfHwKICAgICAgICBraW5kID09IEhQcmltaXRpdmVDaGVjay5BUkdVTUVOVF9UWVBFX0NIRUNLKTsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gKGtpbmQgPT0gSFByaW1pdGl2ZUNoZWNrLlJFQ0VJVkVSX1RZUEVfQ0hFQ0spCiAgICAgICAgPyBpbnN0cnVjdGlvbi5zZWxlY3RvcgogICAgICAgIDogbnVsbDsKICAgIEhQcmltaXRpdmVDaGVjayBjb252ZXJ0ZWQgPSBuZXcgSFByaW1pdGl2ZUNoZWNrKAogICAgICAgIHR5cGVFeHByZXNzaW9uLCBraW5kLCB0eXBlLCBpbnB1dCwgaW5zdHJ1Y3Rpb24uc291cmNlSW5mb3JtYXRpb24sCiAgICAgICAgcmVjZWl2ZXJUeXBlQ2hlY2tTZWxlY3Rvcjogc2VsZWN0b3IpOwogICAgaW5zdHJ1Y3Rpb24uYmxvY2suYWRkQmVmb3JlKGluc3RydWN0aW9uLCBjb252ZXJ0ZWQpOwogICAgaW5wdXQucmVwbGFjZUFsbFVzZXJzRG9taW5hdGVkQnkoaW5zdHJ1Y3Rpb24sIGNvbnZlcnRlZCk7CiAgICBfbG9nPy5yZWdpc3RlclByaW1pdGl2ZUNoZWNrKGluc3RydWN0aW9uLCBjb252ZXJ0ZWQpOwogIH0KCiAgYm9vbCBpc0NoZWNrRW5vdWdoRm9yTnNtT3JBZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24sIEFic3RyYWN0VmFsdWUgdHlwZSkgewogICAgLy8gSW4gc29tZSBjYXNlcywgd2Ugd2FudCB0aGUgcmVjZWl2ZXIgdG8gYmUgYW4gaW50ZWdlciwKICAgIC8vIGJ1dCB0aGF0IGRvZXMgbm90IG1lYW4gd2Ugd2lsbCBnZXQgYSBOb1N1Y2hNZXRob2RFcnJvcgogICAgLy8gaWYgaXQncyBub3Q6IHRoZSByZWNlaXZlciBjb3VsZCBiZSBhIGRvdWJsZS4KICAgIGlmIChhYnN0cmFjdFZhbHVlRG9tYWluLmlzSW50ZWdlck9yTnVsbCh0eXBlKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIC8vIElmIHRoZSBpbnN0cnVjdGlvbidzIHR5cGUgaXMgaW50ZWdlciBvciBudWxsLCB0aGUgY29kZWdlbgogICAgICAvLyB3aWxsIGVtaXQgYSBudWxsIGNoZWNrLCB3aGljaCBpcyBlbm91Z2ggdG8ga25vdyBpZiBpdCB3aWxsCiAgICAgIC8vIGhpdCBhIG5vU3VjaE1ldGhvZC4KICAgICAgcmV0dXJuIGluc3RydWN0aW9uLmlzSW50ZWdlck9yTnVsbChhYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLyBBZGQgYSByZWNlaXZlciB0eXBlIGNoZWNrIHdoZW4gdGhlIGNhbGwgY2FuIG9ubHkgaGl0CiAgLy8gW25vU3VjaE1ldGhvZF0gaWYgdGhlIHJlY2VpdmVyIGlzIG5vdCBvZiBhIHNwZWNpZmljIHR5cGUuCiAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIHJlY2VpdmVyIHR5cGUgY2hlY2sgd2FzIGFkZGVkLgogIGJvb2wgY2hlY2tSZWNlaXZlcihISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbikgewogICAgYXNzZXJ0KGluc3RydWN0aW9uLmlzSW50ZXJjZXB0ZWRDYWxsKTsKICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciA9IGluc3RydWN0aW9uLmlucHV0c1sxXTsKICAgIGlmIChyZWNlaXZlci5pc051bWJlcihhYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChyZWNlaXZlci5pc051bWJlck9yTnVsbChhYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIGNvbnZlcnRJbnB1dCgKICAgICAgICAgIGluc3RydWN0aW9uLAogICAgICAgICAgcmVjZWl2ZXIsCiAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmV4Y2x1ZGVOdWxsKHJlY2VpdmVyLmluc3RydWN0aW9uVHlwZSksCiAgICAgICAgICBIUHJpbWl0aXZlQ2hlY2suUkVDRUlWRVJfVFlQRV9DSEVDSywKICAgICAgICAgIGNvbW1vbkVsZW1lbnRzLm51bVR5cGUpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24uZWxlbWVudCA9PSBudWxsKSB7CiAgICAgIGlmIChjbG9zZWRXb3JsZC5pbmNsdWRlc0Nsb3N1cmVDYWxsKAogICAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsIGluc3RydWN0aW9uLnJlY2VpdmVyVHlwZSkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiB0YXJnZXRzID0gY2xvc2VkV29ybGQubG9jYXRlTWVtYmVycygKICAgICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yLCBpbnN0cnVjdGlvbi5yZWNlaXZlclR5cGUpOwogICAgICBpZiAodGFyZ2V0cy5sZW5ndGggPT0gMSkgewogICAgICAgIE1lbWJlckVudGl0eSB0YXJnZXQgPSB0YXJnZXRzLmZpcnN0OwogICAgICAgIENsYXNzRW50aXR5IGNscyA9IHRhcmdldC5lbmNsb3NpbmdDbGFzczsKICAgICAgICBBYnN0cmFjdFZhbHVlIHR5cGUgPSBhYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZU5vbk51bGxTdWJjbGFzcyhjbHMpOwogICAgICAgIC8vIFdlIGN1cnJlbnRseSBvbmx5IG9wdGltaXplIG9uIHNvbWUgcHJpbWl0aXZlIHR5cGVzLgogICAgICAgIERhcnRUeXBlIHR5cGVFeHByZXNzaW9uOwogICAgICAgIGlmIChhYnN0cmFjdFZhbHVlRG9tYWluLmlzTnVtYmVyT3JOdWxsKHR5cGUpLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICAgIHR5cGVFeHByZXNzaW9uID0gY29tbW9uRWxlbWVudHMubnVtVHlwZTsKICAgICAgICB9IGVsc2UgaWYgKGFic3RyYWN0VmFsdWVEb21haW4uaXNCb29sZWFuT3JOdWxsKHR5cGUpLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICAgIHR5cGVFeHByZXNzaW9uID0gY29tbW9uRWxlbWVudHMuYm9vbFR5cGU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKCFpc0NoZWNrRW5vdWdoRm9yTnNtT3JBZShyZWNlaXZlciwgdHlwZSkpIHJldHVybiBmYWxzZTsKICAgICAgICBpbnN0cnVjdGlvbi5lbGVtZW50ID0gdGFyZ2V0OwogICAgICAgIGNvbnZlcnRJbnB1dChpbnN0cnVjdGlvbiwgcmVjZWl2ZXIsIHR5cGUsCiAgICAgICAgICAgIEhQcmltaXRpdmVDaGVjay5SRUNFSVZFUl9UWVBFX0NIRUNLLCB0eXBlRXhwcmVzc2lvbik7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vIEFkZCBhbiBhcmd1bWVudCB0eXBlIGNoZWNrIGlmIHRoZSBhcmd1bWVudCBpcyBub3Qgb2YgYSB0eXBlCiAgLy8gZXhwZWN0ZWQgYnkgdGhlIGNhbGwuCiAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIGFyZ3VtZW50IHR5cGUgY2hlY2sgd2FzIGFkZGVkLgogIGJvb2wgY2hlY2tBcmd1bWVudChISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbikgewogICAgSEluc3RydWN0aW9uIGxlZnQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMV07CiAgICBISW5zdHJ1Y3Rpb24gcmlnaHQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMl07CgogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBpbnN0cnVjdGlvbi5zZWxlY3RvcjsKICAgIGlmIChzZWxlY3Rvci5pc09wZXJhdG9yICYmCiAgICAgICAgbGVmdC5pc051bWJlcihhYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIGlmIChyaWdodC5pc051bWJlcihhYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSA9CiAgICAgICAgICByaWdodC5pc0ludGVnZXJPck51bGwoYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZQogICAgICAgICAgICAgID8gYWJzdHJhY3RWYWx1ZURvbWFpbi5leGNsdWRlTnVsbChyaWdodC5pbnN0cnVjdGlvblR5cGUpCiAgICAgICAgICAgICAgOiBhYnN0cmFjdFZhbHVlRG9tYWluLm51bVR5cGU7CiAgICAgIC8vIFRPRE8obmdlb2ZmcmF5KTogU29tZSBudW1iZXIgb3BlcmF0aW9ucyBkb24ndCBoYXZlIGEgYnVpbHRpbgogICAgICAvLyB2YXJpYW50IGFuZCB3aWxsIGRvIHRoZSBjaGVjayBpbiB0aGVpciBtZXRob2QgYW55d2F5LiBXZQogICAgICAvLyBzdGlsbCBhZGQgYSBjaGVjayBiZWNhdXNlIGl0IGFsbG93cyB0byBHVk4gdGhlc2Ugb3BlcmF0aW9ucywKICAgICAgLy8gYnV0IHdlIHNob3VsZCBmaW5kIGEgYmV0dGVyIHdheS4KICAgICAgY29udmVydElucHV0KGluc3RydWN0aW9uLCByaWdodCwgdHlwZSwKICAgICAgICAgIEhQcmltaXRpdmVDaGVjay5BUkdVTUVOVF9UWVBFX0NIRUNLLCBjb21tb25FbGVtZW50cy5udW1UeXBlKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB2b2lkIHByb2Nlc3NQZW5kaW5nT3B0aW1pemF0aW9ucygpIHsKICAgIHBlbmRpbmdPcHRpbWl6YXRpb25zLmZvckVhY2goKGluc3RydWN0aW9uLCBhY3Rpb24pID0+IGFjdGlvbigpKTsKICAgIHBlbmRpbmdPcHRpbWl6YXRpb25zLmNsZWFyKCk7CiAgfQoKICB2b2lkIGFkZERlcGVuZGVudEluc3RydWN0aW9uc1RvV29ya0xpc3QoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBmb3IgKGludCBpID0gMCwgbGVuZ3RoID0gaW5zdHJ1Y3Rpb24udXNlZEJ5Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIC8vIFRoZSB0eXBlIHByb3BhZ2F0b3Igb25seSBwcm9wYWdhdGVzIHR5cGVzIGZvcndhcmQuIFdlCiAgICAgIC8vIHRodXMgb25seSBuZWVkIHRvIGFkZCB0aGUgdXNlcnMgb2YgdGhlIFtpbnN0cnVjdGlvbl0gdG8gdGhlIGxpc3QuCiAgICAgIGFkZFRvV29ya0xpc3QoaW5zdHJ1Y3Rpb24udXNlZEJ5W2ldKTsKICAgIH0KICB9CgogIHZvaWQgYWRkQWxsVXNlcnNCdXQoSEludm9rZUR5bmFtaWMgaW52b2tlLCBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGluc3RydWN0aW9uLnVzZWRCeS5mb3JFYWNoKChISW5zdHJ1Y3Rpb24gdXNlcikgewogICAgICBpZiAodXNlciAhPSBpbnZva2UpIGFkZFRvV29ya0xpc3QodXNlcik7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdmlzaXRJbnZva2VEeW5hbWljKEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uKSB7CiAgICBpZiAoaW5zdHJ1Y3Rpb24uaXNJbnRlcmNlcHRlZENhbGwpIHsKICAgICAgLy8gV2UgY2Fubm90IGRvIHRoZSBmb2xsb3dpbmcgb3B0aW1pemF0aW9uIG5vdywgYmVjYXVzZSB3ZSBoYXZlIHRvIHdhaXQKICAgICAgLy8gZm9yIHRoZSB0eXBlIHByb3BhZ2F0aW9uIHRvIGJlIHN0YWJsZS4gVGhlIHJlY2VpdmVyIG9mIFtpbnN0cnVjdGlvbl0KICAgICAgLy8gbWlnaHQgbW92ZSBmcm9tIG51bWJlciB0byBkeW5hbWljLgogICAgICB2b2lkIGNoZWNrSW5wdXRzKCkgewogICAgICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gaW5zdHJ1Y3Rpb24uc2VsZWN0b3I7CiAgICAgICAgaWYgKHNlbGVjdG9yLmlzT3BlcmF0b3IgJiYgc2VsZWN0b3IubmFtZSAhPSAnPT0nKSB7CiAgICAgICAgICBpZiAoY2hlY2tSZWNlaXZlcihpbnN0cnVjdGlvbikpIHsKICAgICAgICAgICAgYWRkQWxsVXNlcnNCdXQoaW5zdHJ1Y3Rpb24sIGluc3RydWN0aW9uLmlucHV0c1sxXSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIXNlbGVjdG9yLmlzVW5hcnlPcGVyYXRvciAmJiBjaGVja0FyZ3VtZW50KGluc3RydWN0aW9uKSkgewogICAgICAgICAgICBhZGRBbGxVc2Vyc0J1dChpbnN0cnVjdGlvbiwgaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLmlzQ2FsbCkgewogICAgICAgICAgaWYgKHNlbGVjdG9yLm5hbWUgPT0gJ2FicycgJiYgc2VsZWN0b3IuYXJndW1lbnRDb3VudCA9PSAwKSB7CiAgICAgICAgICAgIGlmIChjaGVja1JlY2VpdmVyKGluc3RydWN0aW9uKSkgewogICAgICAgICAgICAgIGFkZEFsbFVzZXJzQnV0KGluc3RydWN0aW9uLCBpbnN0cnVjdGlvbi5pbnB1dHNbMV0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICBwZW5kaW5nT3B0aW1pemF0aW9ucy5wdXRJZkFic2VudChpbnN0cnVjdGlvbiwgKCkgPT4gY2hlY2tJbnB1dHMpOwogICAgfQoKICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciA9IGluc3RydWN0aW9uLmdldERhcnRSZWNlaXZlcihjbG9zZWRXb3JsZCk7CiAgICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZSA9IHJlY2VpdmVyLmluc3RydWN0aW9uVHlwZTsKICAgIGluc3RydWN0aW9uLnVwZGF0ZVJlY2VpdmVyVHlwZShhYnN0cmFjdFZhbHVlRG9tYWluLCByZWNlaXZlclR5cGUpOwoKICAgIC8vIFRyeSB0byByZWZpbmUgdGhhdCB0aGUgcmVjZWl2ZXIgaXMgbm90IG51bGwgYWZ0ZXIgdGhpcyBjYWxsIGJ5IGluc2VydGluZwogICAgLy8gYSByZWZpbmVtZW50IG5vZGUgKEhUeXBlS25vd24pLgogICAgdmFyIHNlbGVjdG9yID0gaW5zdHJ1Y3Rpb24uc2VsZWN0b3I7CiAgICBpZiAoIXNlbGVjdG9yLmlzQ2xvc3VyZUNhbGwgJiYgIXNlbGVjdG9yLmFwcGxpZXNUb051bGxXaXRob3V0VGhyb3coKSkgewogICAgICB2YXIgbmV4dCA9IGluc3RydWN0aW9uLm5leHQ7CiAgICAgIGlmIChuZXh0IGlzIEhUeXBlS25vd24gJiYgbmV4dC5jaGVja2VkSW5wdXQgPT0gcmVjZWl2ZXIpIHsKICAgICAgICAvLyBPbiBhIHByZXZpb3VzIHBhc3Mgb3IgaXRlcmF0aW9uIHdlIGFscmVhZHkgcmVmaW5lZCBbcmVjZWl2ZXJdIGJ5CiAgICAgICAgLy8gaW5zZXJ0aW5nIGEgW0hUeXBlS25vd25dIGluc3RydWN0aW9uLiBUaGF0IHJlcGxhY2VkIHNldmVyYWwgZG9taW5hdGVkCiAgICAgICAgLy8gdXNlcyB3aXRoIHRoZSByZWZpbmVtZW50LiBXZSB1cGRhdGUgdGhlIHR5cGUgb2YgdGhlIFtIVHlwZUtub3duXQogICAgICAgIC8vIGluc3RydWN0aW9uIGJlY2F1c2UgaXQgbWF5IGhhdmUgYmVlbiByZWZpbmVkIHdpdGggYSBjb3JyZWN0IHR5cGUgYXQKICAgICAgICAvLyB0aGUgdGltZSwgYnV0IGluY29ycmVjdCBub3cuCiAgICAgICAgQWJzdHJhY3RWYWx1ZSBuZXdUeXBlID0gYWJzdHJhY3RWYWx1ZURvbWFpbi5leGNsdWRlTnVsbChyZWNlaXZlclR5cGUpOwogICAgICAgIGlmIChuZXh0Lmluc3RydWN0aW9uVHlwZSAhPSBuZXdUeXBlKSB7CiAgICAgICAgICBuZXh0Lmtub3duVHlwZSA9IG5leHQuaW5zdHJ1Y3Rpb25UeXBlID0gbmV3VHlwZTsKICAgICAgICAgIGFkZERlcGVuZGVudEluc3RydWN0aW9uc1RvV29ya0xpc3QobmV4dCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGFic3RyYWN0VmFsdWVEb21haW4uaXNOdWxsKHJlY2VpdmVyVHlwZSkuaXNQb3RlbnRpYWxseVRydWUpIHsKICAgICAgICBEb21pbmF0ZWRVc2VzIHVzZXMgPQogICAgICAgICAgICBEb21pbmF0ZWRVc2VzLm9mKHJlY2VpdmVyLCBpbnN0cnVjdGlvbiwgZXhjbHVkZURvbWluYXRvcjogdHJ1ZSk7CiAgICAgICAgaWYgKHVzZXMuaXNOb3RFbXB0eSkgewogICAgICAgICAgLy8gSW5zZXJ0IGEgcmVmaW5lbWVudCBub2RlIGFmdGVyIHRoZSBjYWxsIGFuZCB1cGRhdGUgYWxsIHVzZXJzCiAgICAgICAgICAvLyBkb21pbmF0ZWQgYnkgdGhlIGNhbGwgdG8gdXNlIHRoYXQgbm9kZSBpbnN0ZWFkIG9mIFtyZWNlaXZlcl0uCiAgICAgICAgICBBYnN0cmFjdFZhbHVlIG5ld1R5cGUgPSBhYnN0cmFjdFZhbHVlRG9tYWluLmV4Y2x1ZGVOdWxsKHJlY2VpdmVyVHlwZSk7CiAgICAgICAgICBIVHlwZUtub3duIGNvbnZlcnRlZCA9CiAgICAgICAgICAgICAgbmV3IEhUeXBlS25vd24ud2l0bmVzc2VkKG5ld1R5cGUsIHJlY2VpdmVyLCBpbnN0cnVjdGlvbik7CiAgICAgICAgICBpbnN0cnVjdGlvbi5ibG9jay5hZGRCZWZvcmUoaW5zdHJ1Y3Rpb24ubmV4dCwgY29udmVydGVkKTsKICAgICAgICAgIHVzZXMucmVwbGFjZVdpdGgoY29udmVydGVkKTsKICAgICAgICAgIGFkZERlcGVuZGVudEluc3RydWN0aW9uc1RvV29ya0xpc3QoY29udmVydGVkKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gaW5zdHJ1Y3Rpb24uc3BlY2lhbGl6ZXIKICAgICAgICAuY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB2aXNpdEFzQ2hlY2soSEFzQ2hlY2sgaW5zdHJ1Y3Rpb24pIHsKICAgIEhJbnN0cnVjdGlvbiBpbnB1dCA9IGluc3RydWN0aW9uLmNoZWNrZWRJbnB1dDsKICAgIEFic3RyYWN0VmFsdWUgaW5wdXRUeXBlID0gaW5wdXQuaW5zdHJ1Y3Rpb25UeXBlOwogICAgQWJzdHJhY3RWYWx1ZSBjaGVja2VkVHlwZSA9IGluc3RydWN0aW9uLmNoZWNrZWRUeXBlLmFic3RyYWN0VmFsdWU7CiAgICBBYnN0cmFjdFZhbHVlIG91dHB1dFR5cGUgPQogICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uaW50ZXJzZWN0aW9uKGNoZWNrZWRUeXBlLCBpbnB1dFR5cGUpOwogICAgb3V0cHV0VHlwZSA9IF9udW1lcmljRml4dXAob3V0cHV0VHlwZSwgaW5wdXRUeXBlLCBjaGVja2VkVHlwZSk7CiAgICBpZiAoaW5wdXRUeXBlICE9IG91dHB1dFR5cGUpIHsKICAgICAgLy8gUmVwbGFjZSBkb21pbmF0ZWQgdXNlcyBvZiBpbnB1dCB3aXRoIHVzZXMgb2YgdGhpcyBIVHlwZUNvbnZlcnNpb24gc28KICAgICAgLy8gdGhlIHVzZXMgYmVuZWZpdCBmcm9tIHRoZSBzdHJvbmdlciB0eXBlLgogICAgICAvLwogICAgICAvLyBEbyBub3QgcmVwbGFjZSBsb2NhbCBhY2Nlc3Nlcywgc2luY2UgdGhlIGxvY2FsIG11c3QgYmUgYSBITG9jYWxWYWx1ZSwKICAgICAgLy8gbm90IGEgSEFzQ2hlY2suCiAgICAgIGlmICghKGlucHV0IGlzIEhQYXJhbWV0ZXJWYWx1ZSAmJiBpbnB1dC51c2VkQXNWYXJpYWJsZSgpKSkgewogICAgICAgIGlucHV0LnJlcGxhY2VBbGxVc2Vyc0RvbWluYXRlZEJ5KGluc3RydWN0aW9uLm5leHQsIGluc3RydWN0aW9uKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG91dHB1dFR5cGU7CiAgfQp9CoINAE5OPAE2JCExITIqFxUYATcESAQ+BExRS05DBFAeSiFMRy47KQEsJyIiDCoBFUcBMScBOCUEAUAqLiI5Nh1NSysfBAEMIh8XBAEMJyAkRkUYK1FJOj0cCg0kHzMKCgYBLCIlOQgmBgQBGwkiKDAlHCc7CghGRUMrJSEEATEjASQYIQYEAQxHKixAQSoGPy0GKAQBRiosSEkyBi8EAQw3LgQBDC0uBAEMMyYoBAEMRx4oBAEMOR4oBAEMMzBKIUMqBjAEAQwtQDAEAQw9MSgEAQwlQUM/SwYaBAEMQzM1OR9CRCNOMglJUUg5CU8gQ0kIBhcEAVEjRFFOUUpQTU5HSRdPETcKCAYXBAEMQzM1OQFQTiVMTUc9IyohST0GAR9CRCNOMglLN0NJCAYXBAEMOTM1H0wjRwYXBAFEPzo2Rh8QNUouOT46BAFPPT40RkNEHVAGEQQBOj83MyszQxQGSRQXFEUvIxMuKz0WCEI7IS0xTT8hSTNRNBEYCkQmMkIVCAYSBAFBGzczLzABLh8/QhYIG0ZHLUZCRiotSBMGEgQBJ0UiBAFGSz9LLAYEAUk1LwgEAQxBKU5OLBsyPCxADElADCZHLkIODAoIAUgGAUY7RwFQJylMI0FMUUxPKE8vOzQKTx1NH0pLUSFIRCc5CggGASNHBAEMNTM1Rx9CRCNOMglPGUNJCAYXBAIBL3BhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS90eXBlc19wcm9wYWdhdGlvbi5kYXJ0O3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NzYS92YWx1ZV9yYW5nZV9hbmFseXplci5kYXJ0wACcBS8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2NvbnN0YW50cy9jb25zdGFudF9zeXN0ZW0uZGFydCcgYXMgY29uc3RhbnRfc3lzdGVtOwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CmltcG9ydCAnbm9kZXMuZGFydCc7CmltcG9ydCAnb3B0aW1pemUuZGFydCc7CgpjbGFzcyBWYWx1ZVJhbmdlSW5mbyB7CiAgSW50VmFsdWUgaW50WmVybzsKICBJbnRWYWx1ZSBpbnRPbmU7CgogIFZhbHVlUmFuZ2VJbmZvKCkgewogICAgaW50WmVybyA9IG5ld0ludFZhbHVlKEJpZ0ludC56ZXJvKTsKICAgIGludE9uZSA9IG5ld0ludFZhbHVlKEJpZ0ludC5vbmUpOwogIH0KCiAgVmFsdWUgbmV3SW50VmFsdWUoQmlnSW50IHZhbHVlKSB7CiAgICByZXR1cm4gbmV3IEludFZhbHVlKHZhbHVlLCB0aGlzKTsKICB9CgogIFZhbHVlIG5ld0luc3RydWN0aW9uVmFsdWUoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICByZXR1cm4gbmV3IEluc3RydWN0aW9uVmFsdWUoaW5zdHJ1Y3Rpb24sIHRoaXMpOwogIH0KCiAgVmFsdWUgbmV3UG9zaXRpdmVWYWx1ZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIHJldHVybiBuZXcgUG9zaXRpdmVWYWx1ZShpbnN0cnVjdGlvbiwgdGhpcyk7CiAgfQoKICBWYWx1ZSBuZXdBZGRWYWx1ZShWYWx1ZSBsZWZ0LCBWYWx1ZSByaWdodCkgewogICAgcmV0dXJuIG5ldyBBZGRWYWx1ZShsZWZ0LCByaWdodCwgdGhpcyk7CiAgfQoKICBWYWx1ZSBuZXdTdWJ0cmFjdFZhbHVlKFZhbHVlIGxlZnQsIFZhbHVlIHJpZ2h0KSB7CiAgICByZXR1cm4gbmV3IFN1YnRyYWN0VmFsdWUobGVmdCwgcmlnaHQsIHRoaXMpOwogIH0KCiAgVmFsdWUgbmV3TmVnYXRlVmFsdWUoVmFsdWUgdmFsdWUpIHsKICAgIHJldHVybiBuZXcgTmVnYXRlVmFsdWUodmFsdWUsIHRoaXMpOwogIH0KCiAgUmFuZ2UgbmV3VW5ib3VuZFJhbmdlKCkgewogICAgcmV0dXJuIG5ldyBSYW5nZS51bmJvdW5kKHRoaXMpOwogIH0KCiAgUmFuZ2UgbmV3Tm9ybWFsaXplZFJhbmdlKFZhbHVlIGxvdywgVmFsdWUgdXApIHsKICAgIHJldHVybiBuZXcgUmFuZ2Uubm9ybWFsaXplKGxvdywgdXAsIHRoaXMpOwogIH0KCiAgUmFuZ2UgbmV3TWFya2VyUmFuZ2UoKSB7CiAgICByZXR1cm4gbmV3IFJhbmdlKAogICAgICAgIG5ldyBNYXJrZXJWYWx1ZShmYWxzZSwgdGhpcyksIG5ldyBNYXJrZXJWYWx1ZSh0cnVlLCB0aGlzKSwgdGhpcyk7CiAgfQp9CgovLy8gQSBbVmFsdWVdIHJlcHJlc2VudHMgYm90aCBzeW1ib2xpYyB2YWx1ZXMgbGlrZSB0aGUgdmFsdWUgb2YgYQovLy8gcGFyYW1ldGVyLCBvciB0aGUgbGVuZ3RoIG9mIGFuIGFycmF5LCBhbmQgY29uY3JldGUgdmFsdWVzLCBsaWtlCi8vLyBjb25zdGFudHMuCmFic3RyYWN0IGNsYXNzIFZhbHVlIHsKICBmaW5hbCBWYWx1ZVJhbmdlSW5mbyBpbmZvOwogIGNvbnN0IFZhbHVlKHRoaXMuaW5mbyk7CgogIFZhbHVlIG9wZXJhdG9yICsoVmFsdWUgb3RoZXIpID0+IGNvbnN0IFVua25vd25WYWx1ZSgpOwogIFZhbHVlIG9wZXJhdG9yIC0oVmFsdWUgb3RoZXIpID0+IGNvbnN0IFVua25vd25WYWx1ZSgpOwogIFZhbHVlIG9wZXJhdG9yIC0oKSA9PiBjb25zdCBVbmtub3duVmFsdWUoKTsKICBWYWx1ZSBvcGVyYXRvciAmKFZhbHVlIG90aGVyKSA9PiBjb25zdCBVbmtub3duVmFsdWUoKTsKCiAgVmFsdWUgbWluKFZhbHVlIG90aGVyKSB7CiAgICBpZiAodGhpcyA9PSBvdGhlcikgcmV0dXJuIHRoaXM7CiAgICBpZiAob3RoZXIgPT0gY29uc3QgTWluSW50VmFsdWUoKSkgcmV0dXJuIG90aGVyOwogICAgaWYgKG90aGVyID09IGNvbnN0IE1heEludFZhbHVlKCkpIHJldHVybiB0aGlzOwogICAgVmFsdWUgdmFsdWUgPSB0aGlzIC0gb3RoZXI7CiAgICBpZiAodmFsdWUuaXNQb3NpdGl2ZSkgcmV0dXJuIG90aGVyOwogICAgaWYgKHZhbHVlLmlzTmVnYXRpdmUpIHJldHVybiB0aGlzOwogICAgcmV0dXJuIGNvbnN0IFVua25vd25WYWx1ZSgpOwogIH0KCiAgVmFsdWUgbWF4KFZhbHVlIG90aGVyKSB7CiAgICBpZiAodGhpcyA9PSBvdGhlcikgcmV0dXJuIHRoaXM7CiAgICBpZiAob3RoZXIgPT0gY29uc3QgTWluSW50VmFsdWUoKSkgcmV0dXJuIHRoaXM7CiAgICBpZiAob3RoZXIgPT0gY29uc3QgTWF4SW50VmFsdWUoKSkgcmV0dXJuIG90aGVyOwogICAgVmFsdWUgdmFsdWUgPSB0aGlzIC0gb3RoZXI7CiAgICBpZiAodmFsdWUuaXNQb3NpdGl2ZSkgcmV0dXJuIHRoaXM7CiAgICBpZiAodmFsdWUuaXNOZWdhdGl2ZSkgcmV0dXJuIG90aGVyOwogICAgcmV0dXJuIGNvbnN0IFVua25vd25WYWx1ZSgpOwogIH0KCiAgYm9vbCBnZXQgaXNOZWdhdGl2ZSA9PiBmYWxzZTsKICBib29sIGdldCBpc1Bvc2l0aXZlID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzWmVybyA9PiBmYWxzZTsKfQoKLy8vIFRoZSBbTWFya2VyVmFsdWVdIGNsYXNzIGlzIHVzZWQgdG8gcmVjb2duaXplIHJhbmdlcyBvZiBsb29wCi8vLyB1cGRhdGVzLgpjbGFzcyBNYXJrZXJWYWx1ZSBleHRlbmRzIFZhbHVlIHsKICAvLy8gSWYgW3Bvc2l0aXZlXSBpcyB0cnVlIChyZXNwZWN0aXZlbHkgZmFsc2UpLCB0aGUgbWFya2VyIGdvZXMKICAvLy8gdG8gW01heEludFZhbHVlXSAocmVzcGVjdGl2ZWx5IFtNaW5JbnRWYWx1ZV0pIHdoZW4gYmVpbmcgYWRkZWQKICAvLy8gdG8gYSBwb3NpdGl2ZSAocmVzcGVjdGl2ZWx5IG5lZ2F0aXZlKSB2YWx1ZS4KICBmaW5hbCBib29sIHBvc2l0aXZlOwoKICBjb25zdCBNYXJrZXJWYWx1ZSh0aGlzLnBvc2l0aXZlLCBpbmZvKSA6IHN1cGVyKGluZm8pOwoKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciArKFZhbHVlIG90aGVyKSB7CiAgICBpZiAob3RoZXIuaXNQb3NpdGl2ZSAmJiBwb3NpdGl2ZSkgcmV0dXJuIGNvbnN0IE1heEludFZhbHVlKCk7CiAgICBpZiAob3RoZXIuaXNOZWdhdGl2ZSAmJiAhcG9zaXRpdmUpIHJldHVybiBjb25zdCBNaW5JbnRWYWx1ZSgpOwogICAgaWYgKG90aGVyIGlzIEludFZhbHVlKSByZXR1cm4gdGhpczsKICAgIHJldHVybiBjb25zdCBVbmtub3duVmFsdWUoKTsKICB9CgogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yIC0oVmFsdWUgb3RoZXIpIHsKICAgIGlmIChvdGhlci5pc1Bvc2l0aXZlICYmICFwb3NpdGl2ZSkgcmV0dXJuIGNvbnN0IE1pbkludFZhbHVlKCk7CiAgICBpZiAob3RoZXIuaXNOZWdhdGl2ZSAmJiBwb3NpdGl2ZSkgcmV0dXJuIGNvbnN0IE1heEludFZhbHVlKCk7CiAgICBpZiAob3RoZXIgaXMgSW50VmFsdWUpIHJldHVybiB0aGlzOwogICAgcmV0dXJuIGNvbnN0IFVua25vd25WYWx1ZSgpOwogIH0KfQoKLy8vIEFuIFtJbnRWYWx1ZV0gY29udGFpbnMgYSBjb25zdGFudCBpbnRlZ2VyIHZhbHVlLgpjbGFzcyBJbnRWYWx1ZSBleHRlbmRzIFZhbHVlIHsKICBmaW5hbCBCaWdJbnQgdmFsdWU7CgogIGNvbnN0IEludFZhbHVlKHRoaXMudmFsdWUsIGluZm8pIDogc3VwZXIoaW5mbyk7CgogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yICsoZHluYW1pYyBvdGhlcikgewogICAgaWYgKG90aGVyLmlzWmVybykgcmV0dXJuIHRoaXM7CiAgICBpZiAob3RoZXIgaXMhIEludFZhbHVlKSByZXR1cm4gb3RoZXIgKyB0aGlzOwogICAgZHluYW1pYyBjb25zdGFudCA9IGNvbnN0YW50X3N5c3RlbS5hZGQuZm9sZCgKICAgICAgICBjb25zdGFudF9zeXN0ZW0uY3JlYXRlSW50KHZhbHVlKSwKICAgICAgICBjb25zdGFudF9zeXN0ZW0uY3JlYXRlSW50KG90aGVyLnZhbHVlKSk7CiAgICBpZiAoIWNvbnN0YW50LmlzSW50KSByZXR1cm4gY29uc3QgVW5rbm93blZhbHVlKCk7CiAgICByZXR1cm4gaW5mby5uZXdJbnRWYWx1ZShjb25zdGFudC5pbnRWYWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciAtKGR5bmFtaWMgb3RoZXIpIHsKICAgIGlmIChvdGhlci5pc1plcm8pIHJldHVybiB0aGlzOwogICAgaWYgKG90aGVyIGlzISBJbnRWYWx1ZSkgcmV0dXJuIC1vdGhlciArIHRoaXM7CiAgICBkeW5hbWljIGNvbnN0YW50ID0gY29uc3RhbnRfc3lzdGVtLnN1YnRyYWN0LmZvbGQoCiAgICAgICAgY29uc3RhbnRfc3lzdGVtLmNyZWF0ZUludCh2YWx1ZSksCiAgICAgICAgY29uc3RhbnRfc3lzdGVtLmNyZWF0ZUludChvdGhlci52YWx1ZSkpOwogICAgaWYgKCFjb25zdGFudC5pc0ludCkgcmV0dXJuIGNvbnN0IFVua25vd25WYWx1ZSgpOwogICAgcmV0dXJuIGluZm8ubmV3SW50VmFsdWUoY29uc3RhbnQuaW50VmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgLSgpIHsKICAgIGlmIChpc1plcm8pIHJldHVybiB0aGlzOwogICAgZHluYW1pYyBjb25zdGFudCA9CiAgICAgICAgY29uc3RhbnRfc3lzdGVtLm5lZ2F0ZS5mb2xkKGNvbnN0YW50X3N5c3RlbS5jcmVhdGVJbnQodmFsdWUpKTsKICAgIGlmICghY29uc3RhbnQuaXNJbnQpIHJldHVybiBjb25zdCBVbmtub3duVmFsdWUoKTsKICAgIHJldHVybiBpbmZvLm5ld0ludFZhbHVlKGNvbnN0YW50LmludFZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yICYoZHluYW1pYyBvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBJbnRWYWx1ZSkgcmV0dXJuIGNvbnN0IFVua25vd25WYWx1ZSgpOwogICAgZHluYW1pYyBjb25zdGFudCA9IGNvbnN0YW50X3N5c3RlbS5iaXRBbmQuZm9sZCgKICAgICAgICBjb25zdGFudF9zeXN0ZW0uY3JlYXRlSW50KHZhbHVlKSwKICAgICAgICBjb25zdGFudF9zeXN0ZW0uY3JlYXRlSW50KG90aGVyLnZhbHVlKSk7CiAgICByZXR1cm4gaW5mby5uZXdJbnRWYWx1ZShjb25zdGFudC5pbnRWYWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBWYWx1ZSBtaW4oZHluYW1pYyBvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBJbnRWYWx1ZSkgcmV0dXJuIG90aGVyLm1pbih0aGlzKTsKICAgIHJldHVybiB0aGlzLnZhbHVlIDwgb3RoZXIudmFsdWUgPyB0aGlzIDogb3RoZXI7CiAgfQoKICBAb3ZlcnJpZGUKICBWYWx1ZSBtYXgoZHluYW1pYyBvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBJbnRWYWx1ZSkgcmV0dXJuIG90aGVyLm1heCh0aGlzKTsKICAgIHJldHVybiB0aGlzLnZhbHVlIDwgb3RoZXIudmFsdWUgPyBvdGhlciA6IHRoaXM7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIEludFZhbHVlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdGhpcy52YWx1ZSA9PSBvdGhlci52YWx1ZTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ0ludFZhbHVlLmhhc2hDb2RlJyk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdJbnRWYWx1ZSAkdmFsdWUnOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTmVnYXRpdmUgPT4gdmFsdWUgPCBCaWdJbnQuemVybzsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1Bvc2l0aXZlID0+IHZhbHVlID49IEJpZ0ludC56ZXJvOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzWmVybyA9PiB2YWx1ZSA9PSBCaWdJbnQuemVybzsKfQoKLy8vIFRoZSBbTWF4SW50VmFsdWVdIHJlcHJlc2VudHMgdGhlIG1heGltdW0gdmFsdWUgYW4gaW50ZWdlciBjYW4gaGF2ZSwKLy8vIHdoaWNoIGlzIGN1cnJlbnRseSAraW5maW5pdHkuCmNsYXNzIE1heEludFZhbHVlIGV4dGVuZHMgVmFsdWUgewogIGNvbnN0IE1heEludFZhbHVlKCkgOiBzdXBlcihudWxsKTsKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciArKFZhbHVlIG90aGVyKSA9PiB0aGlzOwogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yIC0oVmFsdWUgb3RoZXIpID0+IHRoaXM7CiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgLSgpID0+IGNvbnN0IE1pbkludFZhbHVlKCk7CiAgQG92ZXJyaWRlCiAgVmFsdWUgbWluKFZhbHVlIG90aGVyKSA9PiBvdGhlcjsKICBAb3ZlcnJpZGUKICBWYWx1ZSBtYXgoVmFsdWUgb3RoZXIpID0+IHRoaXM7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ01heCc7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOZWdhdGl2ZSA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1Bvc2l0aXZlID0+IHRydWU7Cn0KCi8vLyBUaGUgW01pbkludFZhbHVlXSByZXByZXNlbnRzIHRoZSBtaW5pbXVtIHZhbHVlIGFuIGludGVnZXIgY2FuIGhhdmUsCi8vLyB3aGljaCBpcyBjdXJyZW50bHkgLWluZmluaXR5LgpjbGFzcyBNaW5JbnRWYWx1ZSBleHRlbmRzIFZhbHVlIHsKICBjb25zdCBNaW5JbnRWYWx1ZSgpIDogc3VwZXIobnVsbCk7CiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgKyhWYWx1ZSBvdGhlcikgPT4gdGhpczsKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciAtKFZhbHVlIG90aGVyKSA9PiB0aGlzOwogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yIC0oKSA9PiBjb25zdCBNYXhJbnRWYWx1ZSgpOwogIEBvdmVycmlkZQogIFZhbHVlIG1pbihWYWx1ZSBvdGhlcikgPT4gdGhpczsKICBAb3ZlcnJpZGUKICBWYWx1ZSBtYXgoVmFsdWUgb3RoZXIpID0+IG90aGVyOwogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdNaW4nOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTmVnYXRpdmUgPT4gdHJ1ZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1Bvc2l0aXZlID0+IGZhbHNlOwp9CgovLy8gVGhlIFtVbmtub3duVmFsdWVdIGlzIHRoZSBzZW50aW5lbCBpbiBvdXIgYW5hbHlzaXMgdG8gbWFyayBhbgovLy8gb3BlcmF0aW9uIHRoYXQgY291bGQgbm90IGJlIGRvbmUgYmVjYXVzZSBvZiB0b28gbXVjaCBjb21wbGV4aXR5LgpjbGFzcyBVbmtub3duVmFsdWUgZXh0ZW5kcyBWYWx1ZSB7CiAgY29uc3QgVW5rbm93blZhbHVlKCkgOiBzdXBlcihudWxsKTsKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciArKFZhbHVlIG90aGVyKSA9PiBjb25zdCBVbmtub3duVmFsdWUoKTsKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciAtKFZhbHVlIG90aGVyKSA9PiBjb25zdCBVbmtub3duVmFsdWUoKTsKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciAtKCkgPT4gY29uc3QgVW5rbm93blZhbHVlKCk7CiAgQG92ZXJyaWRlCiAgVmFsdWUgbWluKFZhbHVlIG90aGVyKSA9PiBjb25zdCBVbmtub3duVmFsdWUoKTsKICBAb3ZlcnJpZGUKICBWYWx1ZSBtYXgoVmFsdWUgb3RoZXIpID0+IGNvbnN0IFVua25vd25WYWx1ZSgpOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTmVnYXRpdmUgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNQb3NpdGl2ZSA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnVW5rbm93bic7Cn0KCi8vLyBBIHN5bWJvbGljIHZhbHVlIHJlcHJlc2VudGluZyBhbiBbSEluc3RydWN0aW9uXS4KY2xhc3MgSW5zdHJ1Y3Rpb25WYWx1ZSBleHRlbmRzIFZhbHVlIHsKICBmaW5hbCBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb247CiAgSW5zdHJ1Y3Rpb25WYWx1ZSh0aGlzLmluc3RydWN0aW9uLCBpbmZvKSA6IHN1cGVyKGluZm8pOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIEluc3RydWN0aW9uVmFsdWUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0aGlzLmluc3RydWN0aW9uID09IG90aGVyLmluc3RydWN0aW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignSW5zdHJ1Y3Rpb25WYWx1ZS5oYXNoQ29kZScpOwoKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciArKFZhbHVlIG90aGVyKSB7CiAgICBpZiAob3RoZXIuaXNaZXJvKSByZXR1cm4gdGhpczsKICAgIGlmIChvdGhlciBpcyBJbnRWYWx1ZSkgewogICAgICBpZiAob3RoZXIuaXNOZWdhdGl2ZSkgewogICAgICAgIHJldHVybiBpbmZvLm5ld1N1YnRyYWN0VmFsdWUodGhpcywgLW90aGVyKTsKICAgICAgfQogICAgICByZXR1cm4gaW5mby5uZXdBZGRWYWx1ZSh0aGlzLCBvdGhlcik7CiAgICB9CiAgICBpZiAob3RoZXIgaXMgSW5zdHJ1Y3Rpb25WYWx1ZSkgewogICAgICByZXR1cm4gaW5mby5uZXdBZGRWYWx1ZSh0aGlzLCBvdGhlcik7CiAgICB9CiAgICByZXR1cm4gb3RoZXIgKyB0aGlzOwogIH0KCiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgLShWYWx1ZSBvdGhlcikgewogICAgaWYgKG90aGVyLmlzWmVybykgcmV0dXJuIHRoaXM7CiAgICBpZiAodGhpcyA9PSBvdGhlcikgcmV0dXJuIGluZm8uaW50WmVybzsKICAgIGlmIChvdGhlciBpcyBJbnRWYWx1ZSkgewogICAgICBpZiAob3RoZXIuaXNOZWdhdGl2ZSkgewogICAgICAgIHJldHVybiBpbmZvLm5ld0FkZFZhbHVlKHRoaXMsIC1vdGhlcik7CiAgICAgIH0KICAgICAgcmV0dXJuIGluZm8ubmV3U3VidHJhY3RWYWx1ZSh0aGlzLCBvdGhlcik7CiAgICB9CiAgICBpZiAob3RoZXIgaXMgSW5zdHJ1Y3Rpb25WYWx1ZSkgewogICAgICByZXR1cm4gaW5mby5uZXdTdWJ0cmFjdFZhbHVlKHRoaXMsIG90aGVyKTsKICAgIH0KICAgIHJldHVybiAtb3RoZXIgKyB0aGlzOwogIH0KCiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgLSgpIHsKICAgIHJldHVybiBpbmZvLm5ld05lZ2F0ZVZhbHVlKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOZWdhdGl2ZSA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1Bvc2l0aXZlID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnSW5zdHJ1Y3Rpb246ICRpbnN0cnVjdGlvbic7Cn0KCi8vLyBTcGVjaWFsIHZhbHVlIGZvciBpbnN0cnVjdGlvbnMgd2hvc2UgdHlwZSBpcyBhIHBvc2l0aXZlIGludGVnZXIuCmNsYXNzIFBvc2l0aXZlVmFsdWUgZXh0ZW5kcyBJbnN0cnVjdGlvblZhbHVlIHsKICBQb3NpdGl2ZVZhbHVlKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiwgaW5mbykgOiBzdXBlcihpbnN0cnVjdGlvbiwgaW5mbyk7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNQb3NpdGl2ZSA9PiB0cnVlOwp9CgovLy8gUmVwcmVzZW50cyBhIGJpbmFyeSBvcGVyYXRpb24gb24gdHdvIFtWYWx1ZV0sIHdoZXJlIHRoZSBvcGVyYXRpb24KLy8vIGRpZCBub3QgeWllbGQgYSBjYW5vbmljYWwgdmFsdWUuCmNsYXNzIEJpbmFyeU9wZXJhdGlvblZhbHVlIGV4dGVuZHMgVmFsdWUgewogIGZpbmFsIFZhbHVlIGxlZnQ7CiAgZmluYWwgVmFsdWUgcmlnaHQ7CiAgQmluYXJ5T3BlcmF0aW9uVmFsdWUodGhpcy5sZWZ0LCB0aGlzLnJpZ2h0LCBpbmZvKSA6IHN1cGVyKGluZm8pOwp9CgpjbGFzcyBBZGRWYWx1ZSBleHRlbmRzIEJpbmFyeU9wZXJhdGlvblZhbHVlIHsKICBBZGRWYWx1ZShsZWZ0LCByaWdodCwgaW5mbykgOiBzdXBlcihsZWZ0LCByaWdodCwgaW5mbyk7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyEgQWRkVmFsdWUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiAobGVmdCA9PSBvdGhlci5sZWZ0ICYmIHJpZ2h0ID09IG90aGVyLnJpZ2h0KSB8fAogICAgICAgIChsZWZ0ID09IG90aGVyLnJpZ2h0ICYmIHJpZ2h0ID09IG90aGVyLmxlZnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignQWRkVmFsdWUuaGFzaENvZGUnKTsKCiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgLSgpID0+IC1sZWZ0IC0gcmlnaHQ7CgogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yICsoVmFsdWUgb3RoZXIpIHsKICAgIGlmIChvdGhlci5pc1plcm8pIHJldHVybiB0aGlzOwogICAgVmFsdWUgdmFsdWUgPSBsZWZ0ICsgb3RoZXI7CiAgICBpZiAodmFsdWUgIT0gY29uc3QgVW5rbm93blZhbHVlKCkgJiYgdmFsdWUgaXMhIEJpbmFyeU9wZXJhdGlvblZhbHVlKSB7CiAgICAgIHJldHVybiB2YWx1ZSArIHJpZ2h0OwogICAgfQogICAgLy8gSWYgdGhlIHJlc3VsdCBpcyBub3Qgc2ltcGxlIGVub3VnaCwgd2UgdHJ5IHRoZSBzYW1lIGFwcHJvYWNoCiAgICAvLyB3aXRoIFtyaWdodF0uCiAgICB2YWx1ZSA9IHJpZ2h0ICsgb3RoZXI7CiAgICBpZiAodmFsdWUgIT0gY29uc3QgVW5rbm93blZhbHVlKCkgJiYgdmFsdWUgaXMhIEJpbmFyeU9wZXJhdGlvblZhbHVlKSB7CiAgICAgIHJldHVybiBsZWZ0ICsgdmFsdWU7CiAgICB9CiAgICByZXR1cm4gY29uc3QgVW5rbm93blZhbHVlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciAtKFZhbHVlIG90aGVyKSB7CiAgICBpZiAob3RoZXIuaXNaZXJvKSByZXR1cm4gdGhpczsKICAgIFZhbHVlIHZhbHVlID0gbGVmdCAtIG90aGVyOwogICAgaWYgKHZhbHVlICE9IGNvbnN0IFVua25vd25WYWx1ZSgpICYmIHZhbHVlIGlzISBCaW5hcnlPcGVyYXRpb25WYWx1ZSkgewogICAgICByZXR1cm4gdmFsdWUgKyByaWdodDsKICAgIH0KICAgIC8vIElmIHRoZSByZXN1bHQgaXMgbm90IHNpbXBsZSBlbm91Z2gsIHdlIHRyeSB0aGUgc2FtZSBhcHByb2FjaAogICAgLy8gd2l0aCBbcmlnaHRdLgogICAgdmFsdWUgPSByaWdodCAtIG90aGVyOwogICAgaWYgKHZhbHVlICE9IGNvbnN0IFVua25vd25WYWx1ZSgpICYmIHZhbHVlIGlzISBCaW5hcnlPcGVyYXRpb25WYWx1ZSkgewogICAgICByZXR1cm4gbGVmdCArIHZhbHVlOwogICAgfQogICAgcmV0dXJuIGNvbnN0IFVua25vd25WYWx1ZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOZWdhdGl2ZSA9PiBsZWZ0LmlzTmVnYXRpdmUgJiYgcmlnaHQuaXNOZWdhdGl2ZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1Bvc2l0aXZlID0+IGxlZnQuaXNQb3NpdGl2ZSAmJiByaWdodC5pc1Bvc2l0aXZlOwogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICckbGVmdCArICRyaWdodCc7Cn0KCmNsYXNzIFN1YnRyYWN0VmFsdWUgZXh0ZW5kcyBCaW5hcnlPcGVyYXRpb25WYWx1ZSB7CiAgU3VidHJhY3RWYWx1ZShsZWZ0LCByaWdodCwgaW5mbykgOiBzdXBlcihsZWZ0LCByaWdodCwgaW5mbyk7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyEgU3VidHJhY3RWYWx1ZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIGxlZnQgPT0gb3RoZXIubGVmdCAmJiByaWdodCA9PSBvdGhlci5yaWdodDsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ1N1YnRyYWN0VmFsdWUuaGFzaENvZGUnKTsKCiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgLSgpID0+IHJpZ2h0IC0gbGVmdDsKCiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgKyhWYWx1ZSBvdGhlcikgewogICAgaWYgKG90aGVyLmlzWmVybykgcmV0dXJuIHRoaXM7CiAgICBWYWx1ZSB2YWx1ZSA9IGxlZnQgKyBvdGhlcjsKICAgIGlmICh2YWx1ZSAhPSBjb25zdCBVbmtub3duVmFsdWUoKSAmJiB2YWx1ZSBpcyEgQmluYXJ5T3BlcmF0aW9uVmFsdWUpIHsKICAgICAgcmV0dXJuIHZhbHVlIC0gcmlnaHQ7CiAgICB9CiAgICAvLyBJZiB0aGUgcmVzdWx0IGlzIG5vdCBzaW1wbGUgZW5vdWdoLCB3ZSB0cnkgdGhlIHNhbWUgYXBwcm9hY2gKICAgIC8vIHdpdGggW3JpZ2h0XS4KICAgIHZhbHVlID0gb3RoZXIgLSByaWdodDsKICAgIGlmICh2YWx1ZSAhPSBjb25zdCBVbmtub3duVmFsdWUoKSAmJiB2YWx1ZSBpcyEgQmluYXJ5T3BlcmF0aW9uVmFsdWUpIHsKICAgICAgcmV0dXJuIGxlZnQgKyB2YWx1ZTsKICAgIH0KICAgIHJldHVybiBjb25zdCBVbmtub3duVmFsdWUoKTsKICB9CgogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yIC0oVmFsdWUgb3RoZXIpIHsKICAgIGlmIChvdGhlci5pc1plcm8pIHJldHVybiB0aGlzOwogICAgVmFsdWUgdmFsdWUgPSBsZWZ0IC0gb3RoZXI7CiAgICBpZiAodmFsdWUgIT0gY29uc3QgVW5rbm93blZhbHVlKCkgJiYgdmFsdWUgaXMhIEJpbmFyeU9wZXJhdGlvblZhbHVlKSB7CiAgICAgIHJldHVybiB2YWx1ZSAtIHJpZ2h0OwogICAgfQogICAgLy8gSWYgdGhlIHJlc3VsdCBpcyBub3Qgc2ltcGxlIGVub3VnaCwgd2UgdHJ5IHRoZSBzYW1lIGFwcHJvYWNoCiAgICAvLyB3aXRoIFtyaWdodF0uCiAgICB2YWx1ZSA9IHJpZ2h0ICsgb3RoZXI7CiAgICBpZiAodmFsdWUgIT0gY29uc3QgVW5rbm93blZhbHVlKCkgJiYgdmFsdWUgaXMhIEJpbmFyeU9wZXJhdGlvblZhbHVlKSB7CiAgICAgIHJldHVybiBsZWZ0IC0gdmFsdWU7CiAgICB9CiAgICByZXR1cm4gY29uc3QgVW5rbm93blZhbHVlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc05lZ2F0aXZlID0+IGxlZnQuaXNOZWdhdGl2ZSAmJiByaWdodC5pc1Bvc2l0aXZlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUG9zaXRpdmUgPT4gbGVmdC5pc1Bvc2l0aXZlICYmIHJpZ2h0LmlzTmVnYXRpdmU7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyRsZWZ0IC0gJHJpZ2h0JzsKfQoKY2xhc3MgTmVnYXRlVmFsdWUgZXh0ZW5kcyBWYWx1ZSB7CiAgZmluYWwgVmFsdWUgdmFsdWU7CiAgTmVnYXRlVmFsdWUodGhpcy52YWx1ZSwgaW5mbykgOiBzdXBlcihpbmZvKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBOZWdhdGVWYWx1ZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHZhbHVlID09IG90aGVyLnZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignTmVnYXRlLmhhc2hDb2RlJyk7CgogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yICsob3RoZXIpIHsKICAgIGlmIChvdGhlci5pc1plcm8pIHJldHVybiB0aGlzOwogICAgaWYgKG90aGVyID09IHZhbHVlKSByZXR1cm4gaW5mby5pbnRaZXJvOwogICAgaWYgKG90aGVyIGlzIE5lZ2F0ZVZhbHVlKSByZXR1cm4gdGhpcyAtIG90aGVyLnZhbHVlOwogICAgaWYgKG90aGVyIGlzIEludFZhbHVlKSB7CiAgICAgIGlmIChvdGhlci5pc05lZ2F0aXZlKSB7CiAgICAgICAgcmV0dXJuIGluZm8ubmV3U3VidHJhY3RWYWx1ZSh0aGlzLCAtb3RoZXIpOwogICAgICB9CiAgICAgIHJldHVybiBpbmZvLm5ld1N1YnRyYWN0VmFsdWUob3RoZXIsIHZhbHVlKTsKICAgIH0KICAgIGlmIChvdGhlciBpcyBJbnN0cnVjdGlvblZhbHVlKSB7CiAgICAgIHJldHVybiBpbmZvLm5ld1N1YnRyYWN0VmFsdWUob3RoZXIsIHZhbHVlKTsKICAgIH0KICAgIHJldHVybiBvdGhlciAtIHZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgJihWYWx1ZSBvdGhlcikgPT4gY29uc3QgVW5rbm93blZhbHVlKCk7CgogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yIC0ob3RoZXIpIHsKICAgIGlmIChvdGhlci5pc1plcm8pIHJldHVybiB0aGlzOwogICAgaWYgKG90aGVyIGlzIEludFZhbHVlKSB7CiAgICAgIGlmIChvdGhlci5pc05lZ2F0aXZlKSB7CiAgICAgICAgcmV0dXJuIGluZm8ubmV3U3VidHJhY3RWYWx1ZSgtb3RoZXIsIHZhbHVlKTsKICAgICAgfQogICAgICByZXR1cm4gaW5mby5uZXdTdWJ0cmFjdFZhbHVlKHRoaXMsIG90aGVyKTsKICAgIH0KICAgIGlmIChvdGhlciBpcyBJbnN0cnVjdGlvblZhbHVlKSB7CiAgICAgIHJldHVybiBpbmZvLm5ld1N1YnRyYWN0VmFsdWUodGhpcywgb3RoZXIpOwogICAgfQogICAgaWYgKG90aGVyIGlzIE5lZ2F0ZVZhbHVlKSByZXR1cm4gdGhpcyArIG90aGVyLnZhbHVlOwogICAgcmV0dXJuIC1vdGhlciAtIHZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgLSgpID0+IHZhbHVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc05lZ2F0aXZlID0+IHZhbHVlLmlzUG9zaXRpdmU7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNQb3NpdGl2ZSA9PiB2YWx1ZS5pc05lZ2F0aXZlOwogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICctJHZhbHVlJzsKfQoKLy8vIEEgW1JhbmdlXSByZXByZXNlbnRzIHRoZSBwb3NzaWJsZSBpbnRlZ2VyIHZhbHVlcyBhbiBpbnN0cnVjdGlvbgovLy8gY2FuIGhhdmUsIGZyb20gaXRzIFtsb3dlcl0gYm91bmQgdG8gaXRzIFt1cHBlcl0gYm91bmQsIGJvdGgKLy8vIGluY2x1ZGVkLgpjbGFzcyBSYW5nZSB7CiAgZmluYWwgVmFsdWUgbG93ZXI7CiAgZmluYWwgVmFsdWUgdXBwZXI7CiAgZmluYWwgVmFsdWVSYW5nZUluZm8gaW5mbzsKICBSYW5nZSh0aGlzLmxvd2VyLCB0aGlzLnVwcGVyLCB0aGlzLmluZm8pIHsKICAgIGFzc2VydChsb3dlciAhPSBjb25zdCBVbmtub3duVmFsdWUoKSk7CiAgICBhc3NlcnQodXBwZXIgIT0gY29uc3QgVW5rbm93blZhbHVlKCkpOwogIH0KCiAgUmFuZ2UudW5ib3VuZChpbmZvKSA6IHRoaXMoY29uc3QgTWluSW50VmFsdWUoKSwgY29uc3QgTWF4SW50VmFsdWUoKSwgaW5mbyk7CgogIC8vLyBDaGVja3MgaWYgdGhlIGdpdmVuIHZhbHVlcyBhcmUgdW5rbm93biwgYW5kIGNyZWF0ZXMgYQogIC8vLyByYW5nZSB0aGF0IGRvZXMgbm90IGhhdmUgYW55IHVua25vd24gdmFsdWVzLgogIFJhbmdlLm5vcm1hbGl6ZShWYWx1ZSBsb3csIFZhbHVlIHVwLCBpbmZvKQogICAgICA6IHRoaXMobG93ID09IGNvbnN0IFVua25vd25WYWx1ZSgpID8gY29uc3QgTWluSW50VmFsdWUoKSA6IGxvdywKICAgICAgICAgICAgdXAgPT0gY29uc3QgVW5rbm93blZhbHVlKCkgPyBjb25zdCBNYXhJbnRWYWx1ZSgpIDogdXAsIGluZm8pOwoKICBSYW5nZSB1bmlvbihSYW5nZSBvdGhlcikgewogICAgcmV0dXJuIGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKAogICAgICAgIGxvd2VyLm1pbihvdGhlci5sb3dlciksIHVwcGVyLm1heChvdGhlci51cHBlcikpOwogIH0KCiAgUmFuZ2UgaW50ZXJzZWN0aW9uKFJhbmdlIG90aGVyKSB7CiAgICBWYWx1ZSBsb3cgPSBsb3dlci5tYXgob3RoZXIubG93ZXIpOwogICAgVmFsdWUgdXAgPSB1cHBlci5taW4ob3RoZXIudXBwZXIpOwogICAgLy8gSWYgd2UgY291bGQgbm90IGNvbXB1dGUgbWF4IG9yIG1pbiwgcGljayBhIHZhbHVlIGluIHRoZSB0d28KICAgIC8vIHJhbmdlcywgd2l0aCBwcmlvcml0eSB0byBbSW50VmFsdWVdcyBiZWNhdXNlIHRoZXkgYXJlIHNpbXBsZXIuCiAgICBpZiAobG93ID09IGNvbnN0IFVua25vd25WYWx1ZSgpKSB7CiAgICAgIGlmIChsb3dlciBpcyBJbnRWYWx1ZSkKICAgICAgICBsb3cgPSBsb3dlcjsKICAgICAgZWxzZSBpZiAob3RoZXIubG93ZXIgaXMgSW50VmFsdWUpCiAgICAgICAgbG93ID0gb3RoZXIubG93ZXI7CiAgICAgIGVsc2UKICAgICAgICBsb3cgPSBsb3dlcjsKICAgIH0KICAgIGlmICh1cCA9PSBjb25zdCBVbmtub3duVmFsdWUoKSkgewogICAgICBpZiAodXBwZXIgaXMgSW50VmFsdWUpCiAgICAgICAgdXAgPSB1cHBlcjsKICAgICAgZWxzZSBpZiAob3RoZXIudXBwZXIgaXMgSW50VmFsdWUpCiAgICAgICAgdXAgPSBvdGhlci51cHBlcjsKICAgICAgZWxzZQogICAgICAgIHVwID0gdXBwZXI7CiAgICB9CiAgICByZXR1cm4gaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UobG93LCB1cCk7CiAgfQoKICBSYW5nZSBvcGVyYXRvciArKFJhbmdlIG90aGVyKSB7CiAgICByZXR1cm4gaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UobG93ZXIgKyBvdGhlci5sb3dlciwgdXBwZXIgKyBvdGhlci51cHBlcik7CiAgfQoKICBSYW5nZSBvcGVyYXRvciAtKFJhbmdlIG90aGVyKSB7CiAgICByZXR1cm4gaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UobG93ZXIgLSBvdGhlci51cHBlciwgdXBwZXIgLSBvdGhlci5sb3dlcik7CiAgfQoKICBSYW5nZSBvcGVyYXRvciAtKCkgewogICAgcmV0dXJuIGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKC11cHBlciwgLWxvd2VyKTsKICB9CgogIFJhbmdlIG9wZXJhdG9yICYoUmFuZ2Ugb3RoZXIpIHsKICAgIGlmIChpc1NpbmdsZVZhbHVlICYmCiAgICAgICAgb3RoZXIuaXNTaW5nbGVWYWx1ZSAmJgogICAgICAgIGxvd2VyIGlzIEludFZhbHVlICYmCiAgICAgICAgb3RoZXIubG93ZXIgaXMgSW50VmFsdWUpIHsKICAgICAgcmV0dXJuIGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKGxvd2VyICYgb3RoZXIubG93ZXIsIHVwcGVyICYgb3RoZXIudXBwZXIpOwogICAgfQogICAgaWYgKGlzUG9zaXRpdmUgJiYgb3RoZXIuaXNQb3NpdGl2ZSkgewogICAgICBWYWx1ZSB1cCA9IHVwcGVyLm1pbihvdGhlci51cHBlcik7CiAgICAgIGlmICh1cCA9PSBjb25zdCBVbmtub3duVmFsdWUoKSkgewogICAgICAgIC8vIElmIHdlIGNvdWxkIG5vdCBmaW5kIGEgdHJpdmlhbCBib3VuZCwganVzdCB0cnkgdG8gdXNlIHRoZQogICAgICAgIC8vIG9uZSB0aGF0IGlzIGFuIGludC4KICAgICAgICB1cCA9IHVwcGVyIGlzIEludFZhbHVlID8gdXBwZXIgOiBvdGhlci51cHBlcjsKICAgICAgICAvLyBNYWtlIHN1cmUgd2UgZ2V0IHRoZSBzYW1lIHVwcGVyIGJvdW5kLCB3aGV0aGVyIGl0J3MgYSAmIGIKICAgICAgICAvLyBvciBiICYgYS4KICAgICAgICBpZiAodXAgaXMhIEludFZhbHVlICYmIHVwcGVyICE9IG90aGVyLnVwcGVyKSB1cCA9IGNvbnN0IE1heEludFZhbHVlKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKGluZm8uaW50WmVybywgdXApOwogICAgfSBlbHNlIGlmIChpc1Bvc2l0aXZlKSB7CiAgICAgIHJldHVybiBpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZShpbmZvLmludFplcm8sIHVwcGVyKTsKICAgIH0gZWxzZSBpZiAob3RoZXIuaXNQb3NpdGl2ZSkgewogICAgICByZXR1cm4gaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UoaW5mby5pbnRaZXJvLCBvdGhlci51cHBlcik7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gaW5mby5uZXdVbmJvdW5kUmFuZ2UoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyEgUmFuZ2UpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBvdGhlci5sb3dlciA9PSBsb3dlciAmJiBvdGhlci51cHBlciA9PSB1cHBlcjsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ1JhbmdlLmhhc2hDb2RlJyk7CgogIGJvb2wgb3BlcmF0b3IgPChSYW5nZSBvdGhlcikgewogICAgcmV0dXJuIHVwcGVyICE9IG90aGVyLmxvd2VyICYmIHVwcGVyLm1pbihvdGhlci5sb3dlcikgPT0gdXBwZXI7CiAgfQoKICBib29sIG9wZXJhdG9yID4oUmFuZ2Ugb3RoZXIpIHsKICAgIHJldHVybiBsb3dlciAhPSBvdGhlci51cHBlciAmJiBsb3dlci5tYXgob3RoZXIudXBwZXIpID09IGxvd2VyOwogIH0KCiAgYm9vbCBvcGVyYXRvciA8PShSYW5nZSBvdGhlcikgewogICAgcmV0dXJuIHVwcGVyLm1pbihvdGhlci5sb3dlcikgPT0gdXBwZXI7CiAgfQoKICBib29sIG9wZXJhdG9yID49KFJhbmdlIG90aGVyKSB7CiAgICByZXR1cm4gbG93ZXIubWF4KG90aGVyLnVwcGVyKSA9PSBsb3dlcjsKICB9CgogIGJvb2wgZ2V0IGlzTmVnYXRpdmUgPT4gdXBwZXIuaXNOZWdhdGl2ZTsKICBib29sIGdldCBpc1Bvc2l0aXZlID0+IGxvd2VyLmlzUG9zaXRpdmU7CiAgYm9vbCBnZXQgaXNTaW5nbGVWYWx1ZSA9PiBsb3dlciA9PSB1cHBlcjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1skbG93ZXIsICR1cHBlcl0nOwp9CgovLy8gVmlzaXRzIHRoZSBncmFwaCBpbiBkb21pbmF0b3Igb3JkZXIsIGFuZCBjb21wdXRlcyB2YWx1ZSByYW5nZXMgZm9yCi8vLyBpbnRlZ2VyIGluc3RydWN0aW9ucy4gV2hpbGUgdmlzaXRpbmcgdGhlIGdyYXBoLCB0aGlzIHBoYXNlIGFsc28KLy8vIHJlbW92ZXMgdW5uZWNlc3NhcnkgYm91bmRzIGNoZWNrcywgYW5kIGNvbXBhcmlzb25zIHRoYXQgYXJlIHByb3ZlbgovLy8gdG8gYmUgdHJ1ZSBvciBmYWxzZS4KY2xhc3MgU3NhVmFsdWVSYW5nZUFuYWx5emVyIGV4dGVuZHMgSEJhc2VWaXNpdG9yIGltcGxlbWVudHMgT3B0aW1pemF0aW9uUGhhc2UgewogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgbmFtZSA9PiAnU1NBIHZhbHVlIHJhbmdlIGJ1aWxkZXInOwoKICAvLy8gTGlzdCBvZiBbSFJhbmdlQ29udmVyc2lvbl0gaW5zdHJ1Y3Rpb25zIGNyZWF0ZWQgYnkgdGhlIHBoYXNlLiBXZQogIC8vLyBzYXZlIHRoZW0gaGVyZSBpbiBvcmRlciB0byByZW1vdmUgdGhlbSBvbmNlIHRoZSBwaGFzZSBpcyBkb25lLgogIGZpbmFsIExpc3Q8SFJhbmdlQ29udmVyc2lvbj4gY29udmVyc2lvbnMgPSA8SFJhbmdlQ29udmVyc2lvbj5bXTsKCiAgLy8vIFZhbHVlIHJhbmdlcyBmb3IgaW50ZWdlciBpbnN0cnVjdGlvbnMuIFRoaXMgbWFwIGdldHMgcG9wdWxhdGVkIGJ5CiAgLy8vIHRoZSBkb21pbmF0b3IgdHJlZSB2aXNpdC4KICBmaW5hbCBNYXA8SEluc3RydWN0aW9uLCBSYW5nZT4gcmFuZ2VzID0gbmV3IE1hcDxISW5zdHJ1Y3Rpb24sIFJhbmdlPigpOwoKICBmaW5hbCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQ7CiAgZmluYWwgVmFsdWVSYW5nZUluZm8gaW5mbzsKICBmaW5hbCBTc2FPcHRpbWl6ZXJUYXNrIG9wdGltaXplcjsKCiAgSEdyYXBoIGdyYXBoOwoKICBTc2FWYWx1ZVJhbmdlQW5hbHl6ZXIoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLCB0aGlzLm9wdGltaXplcikKICAgICAgOiBpbmZvID0gbmV3IFZhbHVlUmFuZ2VJbmZvKCksCiAgICAgICAgdGhpcy5jbG9zZWRXb3JsZCA9IGNsb3NlZFdvcmxkOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0R3JhcGgoSEdyYXBoIGdyYXBoKSB7CiAgICB0aGlzLmdyYXBoID0gZ3JhcGg7CiAgICB2aXNpdERvbWluYXRvclRyZWUoZ3JhcGgpOwogICAgLy8gV2UgcmVtb3ZlIHRoZSByYW5nZSBjb252ZXJzaW9ucyBhZnRlciB2aXNpdGluZyB0aGUgZ3JhcGggc28KICAgIC8vIHRoYXQgdGhlIGdyYXBoIGRvZXMgbm90IGdldCBwb2xsdXRlZCB3aXRoIHRoZXNlIGluc3RydWN0aW9ucwogICAgLy8gb25seSBuZWNlc3NhcnkgZm9yIHRoaXMgcGhhc2UuCiAgICByZW1vdmVSYW5nZUNvbnZlcnNpb24oKTsKICAgIC8vIFRPRE8oaGVyaHV0KTogRmluZCBhIGNsZWFuZXIgd2F5IHRvIHBhc3MgYXJvdW5kIHJhbmdlcy4KICAgIG9wdGltaXplci5yYW5nZXMgPSByYW5nZXM7CiAgfQoKICB2b2lkIHJlbW92ZVJhbmdlQ29udmVyc2lvbigpIHsKICAgIGNvbnZlcnNpb25zLmZvckVhY2goKEhSYW5nZUNvbnZlcnNpb24gaW5zdHJ1Y3Rpb24pIHsKICAgICAgaW5zdHJ1Y3Rpb24uYmxvY2sucmV3cml0ZShpbnN0cnVjdGlvbiwgaW5zdHJ1Y3Rpb24uaW5wdXRzWzBdKTsKICAgICAgaW5zdHJ1Y3Rpb24uYmxvY2sucmVtb3ZlKGluc3RydWN0aW9uKTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJhc2ljQmxvY2soSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIHZvaWQgdmlzaXQoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICAgIFJhbmdlIHJhbmdlID0gaW5zdHJ1Y3Rpb24uYWNjZXB0KHRoaXMpOwogICAgICBpZiAoaW5zdHJ1Y3Rpb24KICAgICAgICAgIC5pc0ludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgYXNzZXJ0KHJhbmdlICE9IG51bGwpOwogICAgICAgIHJhbmdlc1tpbnN0cnVjdGlvbl0gPSByYW5nZTsKICAgICAgfQogICAgfQoKICAgIGJsb2NrLmZvckVhY2hQaGkodmlzaXQpOwogICAgYmxvY2suZm9yRWFjaEluc3RydWN0aW9uKHZpc2l0KTsKICB9CgogIEBvdmVycmlkZQogIFJhbmdlIHZpc2l0SW5zdHJ1Y3Rpb24oSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBpZiAoaW5zdHJ1Y3Rpb24KICAgICAgICAuaXNQb3NpdGl2ZUludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UoCiAgICAgICAgICBpbmZvLmludFplcm8sIGluZm8ubmV3UG9zaXRpdmVWYWx1ZShpbnN0cnVjdGlvbikpOwogICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbgogICAgICAgIC5pc0ludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBJbnN0cnVjdGlvblZhbHVlIHZhbHVlID0gaW5mby5uZXdJbnN0cnVjdGlvblZhbHVlKGluc3RydWN0aW9uKTsKICAgICAgcmV0dXJuIGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKHZhbHVlLCB2YWx1ZSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gaW5mby5uZXdVbmJvdW5kUmFuZ2UoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIFJhbmdlIHZpc2l0UGhpKEhQaGkgcGhpKSB7CiAgICBpZiAocGhpLmlzSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc1BvdGVudGlhbGx5RmFsc2UpCiAgICAgIHJldHVybiBpbmZvLm5ld1VuYm91bmRSYW5nZSgpOwogICAgLy8gU29tZSBwaGFzZXMgbWF5IHJlcGxhY2UgaW5zdHJ1Y3Rpb25zIHRoYXQgY2hhbmdlIHRoZSBpbnB1dHMgb2YKICAgIC8vIHRoaXMgcGhpLiBPbmx5IHRoZSBbU3NhVHlwZXNQcm9wYWdhdGlvbl0gcGhhc2Ugd2lsbCB1cGRhdGUgdGhlCiAgICAvLyBwaGkgdHlwZS4gUGxheSBpdCBzYWZlIGJ5IGFzc3VtaW5nIHRoZSBbU3NhVHlwZXNQcm9wYWdhdGlvbl0KICAgIC8vIHBoYXNlIGlzIG5vdCBuZWNlc3NhcmlseSBydW4gYmVmb3JlIHRoZSBbVmFsdWVSYW5nZUFuYWx5emVyXS4KICAgIGlmIChwaGkuaW5wdXRzLmFueSgoaSkgPT4KICAgICAgICBpLmlzSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc1BvdGVudGlhbGx5RmFsc2UpKSB7CiAgICAgIHJldHVybiBpbmZvLm5ld1VuYm91bmRSYW5nZSgpOwogICAgfQogICAgaWYgKHBoaS5ibG9jay5pc0xvb3BIZWFkZXIoKSkgewogICAgICBSYW5nZSByYW5nZSA9CiAgICAgICAgICBuZXcgTG9vcFVwZGF0ZVJlY29nbml6ZXIoY2xvc2VkV29ybGQsIHJhbmdlcywgaW5mbykucnVuKHBoaSk7CiAgICAgIGlmIChyYW5nZSA9PSBudWxsKSByZXR1cm4gaW5mby5uZXdVbmJvdW5kUmFuZ2UoKTsKICAgICAgcmV0dXJuIHJhbmdlOwogICAgfQoKICAgIFJhbmdlIHJhbmdlID0gcmFuZ2VzW3BoaS5pbnB1dHNbMF1dOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBwaGkuaW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHJhbmdlID0gcmFuZ2UudW5pb24ocmFuZ2VzW3BoaS5pbnB1dHNbaV1dKTsKICAgIH0KICAgIHJldHVybiByYW5nZTsKICB9CgogIEBvdmVycmlkZQogIFJhbmdlIHZpc2l0Q29uc3RhbnQoSENvbnN0YW50IGhDb25zdGFudCkgewogICAgaWYgKGhDb25zdGFudAogICAgICAgIC5pc0ludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAuaXNQb3RlbnRpYWxseUZhbHNlKSB7CiAgICAgIHJldHVybiBpbmZvLm5ld1VuYm91bmRSYW5nZSgpOwogICAgfQogICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IGhDb25zdGFudC5jb25zdGFudDsKICAgIE51bUNvbnN0YW50VmFsdWUgY29uc3RhbnROdW07CiAgICBpZiAoY29uc3RhbnQgaXMgRGVmZXJyZWRHbG9iYWxDb25zdGFudFZhbHVlKSB7CiAgICAgIGNvbnN0YW50TnVtID0gY29uc3RhbnQucmVmZXJlbmNlZDsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0YW50TnVtID0gY29uc3RhbnQ7CiAgICB9CiAgICBpZiAoY29uc3RhbnROdW0uaXNQb3NpdGl2ZUluZmluaXR5IHx8IGNvbnN0YW50TnVtLmlzTmVnYXRpdmVJbmZpbml0eSkgewogICAgICByZXR1cm4gaW5mby5uZXdVbmJvdW5kUmFuZ2UoKTsKICAgIH0KICAgIGlmIChjb25zdGFudE51bS5pc01pbnVzWmVybykgewogICAgICBjb25zdGFudE51bSA9IG5ldyBJbnRDb25zdGFudFZhbHVlKEJpZ0ludC56ZXJvKTsKICAgIH0KCiAgICBCaWdJbnQgaW50VmFsdWUgPSBjb25zdGFudE51bSBpcyBJbnRDb25zdGFudFZhbHVlCiAgICAgICAgPyBjb25zdGFudE51bS5pbnRWYWx1ZQogICAgICAgIDogbmV3IEJpZ0ludC5mcm9tKGNvbnN0YW50TnVtLmRvdWJsZVZhbHVlLnRvSW50KCkpOwogICAgVmFsdWUgdmFsdWUgPSBpbmZvLm5ld0ludFZhbHVlKGludFZhbHVlKTsKICAgIHJldHVybiBpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZSh2YWx1ZSwgdmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgUmFuZ2UgdmlzaXRGaWVsZEdldChIRmllbGRHZXQgZmllbGRHZXQpIHsKICAgIHJldHVybiB2aXNpdEluc3RydWN0aW9uKGZpZWxkR2V0KTsKICB9CgogIEBvdmVycmlkZQogIFJhbmdlIHZpc2l0R2V0TGVuZ3RoKEhHZXRMZW5ndGggbm9kZSkgewogICAgUG9zaXRpdmVWYWx1ZSB2YWx1ZSA9IGluZm8ubmV3UG9zaXRpdmVWYWx1ZShub2RlKTsKICAgIC8vIFdlIGtub3cgdGhpcyByYW5nZSBpcyBhYm92ZSB6ZXJvLiBUbyBzaW1wbGlmeSB0aGUgYW5hbHlzaXMsIHdlCiAgICAvLyBwdXQgdGhlIHplcm8gdmFsdWUgYXMgdGhlIGxvd2VyIGJvdW5kIG9mIHRoaXMgcmFuZ2UuIFRoaXMKICAgIC8vIGFsbG93cyB0byBlYXNpbHkgcmVtb3ZlIHRoZSBzZWNvbmQgYm91bmQgY2hlY2sgaW4gdGhlIGZvbGxvd2luZwogICAgLy8gZXhwcmVzc2lvbjogYVsxXSArIGFbMF0uCiAgICByZXR1cm4gaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UoaW5mby5pbnRaZXJvLCB2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBSYW5nZSB2aXNpdEJvdW5kc0NoZWNrKEhCb3VuZHNDaGVjayBjaGVjaykgewogICAgLy8gU2F2ZSB0aGUgbmV4dCBpbnN0cnVjdGlvbiwgaW4gY2FzZSB0aGUgY2hlY2sgZ2V0cyByZW1vdmVkLgogICAgSEluc3RydWN0aW9uIG5leHQgPSBjaGVjay5uZXh0OwogICAgUmFuZ2UgaW5kZXhSYW5nZSA9IHJhbmdlc1tjaGVjay5pbmRleF07CiAgICBSYW5nZSBsZW5ndGhSYW5nZSA9IHJhbmdlc1tjaGVjay5sZW5ndGhdOwogICAgaWYgKGluZGV4UmFuZ2UgPT0gbnVsbCkgewogICAgICBpbmRleFJhbmdlID0gaW5mby5uZXdVbmJvdW5kUmFuZ2UoKTsKICAgICAgYXNzZXJ0KGNoZWNrLmluZGV4CiAgICAgICAgICAuaXNJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAuaXNQb3RlbnRpYWxseUZhbHNlKTsKICAgIH0KICAgIGlmIChsZW5ndGhSYW5nZSA9PSBudWxsKSB7CiAgICAgIC8vIFdlIG1pZ2h0IGhhdmUgbG9zdCB0aGUgbGVuZ3RoIHJhbmdlIGR1ZSB0byBhIHR5cGUgY29udmVyc2lvbiB0aGF0CiAgICAgIC8vIGFzc2VydHMgYSBub24taW50ZWdlciB0eXBlLiBJbiBzdWNoIGEgY2FzZSwgdGhlIHByb2dyYW0gd2lsbCBuZXZlcgogICAgICAvLyBnZXQgdG8gdGhpcyBwb2ludCBhbnl3YXksIHNvIG5vIG5lZWQgdG8gdHJ5IGFuZCByZWZpbmUgcmFuZ2VzLgogICAgICByZXR1cm4gaW5kZXhSYW5nZTsKICAgIH0KICAgIGFzc2VydChjaGVjay5sZW5ndGgKICAgICAgICAuaXNJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpOwoKICAgIC8vIENoZWNrIGlmIHRoZSBpbmRleCBpcyBzdHJpY3RseSBiZWxvdyB0aGUgdXBwZXIgYm91bmQgb2YgdGhlIGxlbmd0aAogICAgLy8gcmFuZ2UuCiAgICBWYWx1ZSBtYXhJbmRleCA9IGxlbmd0aFJhbmdlLnVwcGVyIC0gaW5mby5pbnRPbmU7CiAgICBib29sIGJlbG93TGVuZ3RoID0gbWF4SW5kZXggIT0gY29uc3QgTWF4SW50VmFsdWUoKSAmJgogICAgICAgIGluZGV4UmFuZ2UudXBwZXIubWluKG1heEluZGV4KSA9PSBpbmRleFJhbmdlLnVwcGVyOwoKICAgIC8vIENoZWNrIGlmIHRoZSBpbmRleCBpcyBzdHJpY3RseSBiZWxvdyB0aGUgbG93ZXIgYm91bmQgb2YgdGhlIGxlbmd0aAogICAgLy8gcmFuZ2UuCiAgICBiZWxvd0xlbmd0aCA9IGJlbG93TGVuZ3RoIHx8CiAgICAgICAgKGluZGV4UmFuZ2UudXBwZXIgIT0gbGVuZ3RoUmFuZ2UubG93ZXIgJiYKICAgICAgICAgICAgaW5kZXhSYW5nZS51cHBlci5taW4obGVuZ3RoUmFuZ2UubG93ZXIpID09IGluZGV4UmFuZ2UudXBwZXIpOwogICAgaWYgKGluZGV4UmFuZ2UuaXNQb3NpdGl2ZSAmJiBiZWxvd0xlbmd0aCkgewogICAgICBjaGVjay5ibG9jay5yZXdyaXRlKGNoZWNrLCBjaGVjay5pbmRleCk7CiAgICAgIGNoZWNrLmJsb2NrLnJlbW92ZShjaGVjayk7CiAgICB9IGVsc2UgaWYgKGluZGV4UmFuZ2UuaXNOZWdhdGl2ZSB8fCBsZW5ndGhSYW5nZSA8IGluZGV4UmFuZ2UpIHsKICAgICAgY2hlY2suc3RhdGljQ2hlY2tzID0gSEJvdW5kc0NoZWNrLkFMV0FZU19GQUxTRTsKICAgICAgLy8gVGhlIGNoZWNrIGlzIGFsd2F5cyBmYWxzZSwgYW5kIHdoYXRldmVyIGluc3RydWN0aW9uIGl0CiAgICAgIC8vIGRvbWluYXRlcyBpcyBkZWFkIGNvZGUuCiAgICAgIHJldHVybiBpbmRleFJhbmdlOwogICAgfSBlbHNlIGlmIChpbmRleFJhbmdlLmlzUG9zaXRpdmUpIHsKICAgICAgY2hlY2suc3RhdGljQ2hlY2tzID0gSEJvdW5kc0NoZWNrLkFMV0FZU19BQk9WRV9aRVJPOwogICAgfSBlbHNlIGlmIChiZWxvd0xlbmd0aCkgewogICAgICBjaGVjay5zdGF0aWNDaGVja3MgPSBIQm91bmRzQ2hlY2suQUxXQVlTX0JFTE9XX0xFTkdUSDsKICAgIH0KCiAgICBpZiAoaW5kZXhSYW5nZS5pc1Bvc2l0aXZlKSB7CiAgICAgIC8vIElmIHRoZSB0ZXN0IHBhc3Nlcywgd2Uga25vdyB0aGUgbG93ZXIgYm91bmQgb2YgdGhlIGxlbmd0aCBpcwogICAgICAvLyBncmVhdGVyIG9yIGVxdWFsIHRoYW4gdGhlIGxvd2VyIGJvdW5kIG9mIHRoZSBpbmRleC4KICAgICAgVmFsdWUgbG93ID0gbGVuZ3RoUmFuZ2UubG93ZXIubWF4KGluZGV4UmFuZ2UubG93ZXIpOwogICAgICBpZiAobG93ICE9IGNvbnN0IFVua25vd25WYWx1ZSgpKSB7CiAgICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gY3JlYXRlUmFuZ2VDb252ZXJzaW9uKG5leHQsIGNoZWNrLmxlbmd0aCk7CiAgICAgICAgcmFuZ2VzW2luc3RydWN0aW9uXSA9IGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKGxvdywgbGVuZ3RoUmFuZ2UudXBwZXIpOwogICAgICB9CiAgICB9CgogICAgLy8gVXBkYXRlIHRoZSByYW5nZSBvZiB0aGUgaW5kZXggaWYgdXNpbmcgdGhlIG1heGltdW0gaW5kZXgKICAgIC8vIG5hcnJvd3MgaXQuIFVzZSB0aGF0IG5ldyByYW5nZSBmb3IgdGhpcyBpbnN0cnVjdGlvbiBhcyB3ZWxsLgogICAgUmFuZ2UgbmV3SW5kZXhSYW5nZSA9IGluZGV4UmFuZ2UKICAgICAgICAuaW50ZXJzZWN0aW9uKGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKGluZm8uaW50WmVybywgbWF4SW5kZXgpKTsKICAgIGlmIChpbmRleFJhbmdlID09IG5ld0luZGV4UmFuZ2UpIHJldHVybiBpbmRleFJhbmdlOwogICAgLy8gRXhwbGljaXRseSBhdHRhY2ggdGhlIHJhbmdlIGluZm9ybWF0aW9uIHRvIHRoZSBpbmRleCBpbnN0cnVjdGlvbiwKICAgIC8vIHdoaWNoIG1heSBiZSB1c2VkIGJ5IG90aGVyIGluc3RydWN0aW9ucy4gIFJldHVybmluZyB0aGUgbmV3IHJhbmdlIHdpbGwKICAgIC8vIGF0dGFjaCBpdCB0byB0aGlzIGluc3RydWN0aW9uLgogICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gY3JlYXRlUmFuZ2VDb252ZXJzaW9uKG5leHQsIGNoZWNrLmluZGV4KTsKICAgIHJhbmdlc1tpbnN0cnVjdGlvbl0gPSBuZXdJbmRleFJhbmdlOwogICAgcmV0dXJuIG5ld0luZGV4UmFuZ2U7CiAgfQoKICBAb3ZlcnJpZGUKICBSYW5nZSB2aXNpdFJlbGF0aW9uYWwoSFJlbGF0aW9uYWwgcmVsYXRpb25hbCkgewogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gcmVsYXRpb25hbC5yaWdodDsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gcmVsYXRpb25hbC5sZWZ0OwogICAgaWYgKGxlZnQuaXNJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzUG90ZW50aWFsbHlGYWxzZSkgewogICAgICByZXR1cm4gaW5mby5uZXdVbmJvdW5kUmFuZ2UoKTsKICAgIH0KICAgIGlmIChyaWdodC5pc0ludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNQb3RlbnRpYWxseUZhbHNlKSB7CiAgICAgIHJldHVybiBpbmZvLm5ld1VuYm91bmRSYW5nZSgpOwogICAgfQogICAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24gPSByZWxhdGlvbmFsLm9wZXJhdGlvbigpOwogICAgUmFuZ2UgcmlnaHRSYW5nZSA9IHJhbmdlc1tyZWxhdGlvbmFsLnJpZ2h0XTsKICAgIFJhbmdlIGxlZnRSYW5nZSA9IHJhbmdlc1tyZWxhdGlvbmFsLmxlZnRdOwoKICAgIGlmIChyZWxhdGlvbmFsIGlzIEhJZGVudGl0eSkgewogICAgICBoYW5kbGVFcXVhbGl0eUNoZWNrKHJlbGF0aW9uYWwpOwogICAgfSBlbHNlIGlmIChvcGVyYXRpb24uYXBwbHkobGVmdFJhbmdlLCByaWdodFJhbmdlKSkgewogICAgICByZWxhdGlvbmFsLmJsb2NrCiAgICAgICAgICAucmV3cml0ZShyZWxhdGlvbmFsLCBncmFwaC5hZGRDb25zdGFudEJvb2wodHJ1ZSwgY2xvc2VkV29ybGQpKTsKICAgICAgcmVsYXRpb25hbC5ibG9jay5yZW1vdmUocmVsYXRpb25hbCk7CiAgICB9IGVsc2UgaWYgKG5lZ2F0ZU9wZXJhdGlvbihvcGVyYXRpb24pLmFwcGx5KGxlZnRSYW5nZSwgcmlnaHRSYW5nZSkpIHsKICAgICAgcmVsYXRpb25hbC5ibG9jawogICAgICAgICAgLnJld3JpdGUocmVsYXRpb25hbCwgZ3JhcGguYWRkQ29uc3RhbnRCb29sKGZhbHNlLCBjbG9zZWRXb3JsZCkpOwogICAgICByZWxhdGlvbmFsLmJsb2NrLnJlbW92ZShyZWxhdGlvbmFsKTsKICAgIH0KICAgIHJldHVybiBpbmZvLm5ld1VuYm91bmRSYW5nZSgpOwogIH0KCiAgdm9pZCBoYW5kbGVFcXVhbGl0eUNoZWNrKEhSZWxhdGlvbmFsIG5vZGUpIHsKICAgIFJhbmdlIHJpZ2h0ID0gcmFuZ2VzW25vZGUucmlnaHRdOwogICAgUmFuZ2UgbGVmdCA9IHJhbmdlc1tub2RlLmxlZnRdOwogICAgaWYgKGxlZnQuaXNTaW5nbGVWYWx1ZSAmJiByaWdodC5pc1NpbmdsZVZhbHVlICYmIGxlZnQgPT0gcmlnaHQpIHsKICAgICAgbm9kZS5ibG9jay5yZXdyaXRlKG5vZGUsIGdyYXBoLmFkZENvbnN0YW50Qm9vbCh0cnVlLCBjbG9zZWRXb3JsZCkpOwogICAgICBub2RlLmJsb2NrLnJlbW92ZShub2RlKTsKICAgIH0KICB9CgogIFJhbmdlIGhhbmRsZUludm9rZU1vZHVsbyhISW52b2tlRHluYW1pY01ldGhvZCBpbnZva2UpIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gaW52b2tlLmlucHV0c1sxXTsKICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IGludm9rZS5pbnB1dHNbMl07CiAgICBSYW5nZSBkaXZpc29yID0gcmFuZ2VzW3JpZ2h0XTsKICAgIGlmIChkaXZpc29yICE9IG51bGwpIHsKICAgICAgLy8gRm9yIEludGVnZXIgdmFsdWVzIHdlIGNhbiBiZSBwcmVjaXNlIGluIHRoZSB1cHBlciBib3VuZCwgc28gc3BlY2lhbAogICAgICAvLyBjYXNlIHRob3NlLgogICAgICBpZiAobGVmdC5pc0ludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgICAgcmlnaHQuaXNJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICBpZiAoZGl2aXNvci5pc1Bvc2l0aXZlKSB7CiAgICAgICAgICByZXR1cm4gaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UoCiAgICAgICAgICAgICAgaW5mby5pbnRaZXJvLCBkaXZpc29yLnVwcGVyIC0gaW5mby5pbnRPbmUpOwogICAgICAgIH0gZWxzZSBpZiAoZGl2aXNvci5pc05lZ2F0aXZlKSB7CiAgICAgICAgICByZXR1cm4gaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UoCiAgICAgICAgICAgICAgaW5mby5pbnRaZXJvLCBpbmZvLm5ld05lZ2F0ZVZhbHVlKGRpdmlzb3IubG93ZXIpIC0gaW5mby5pbnRPbmUpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChsZWZ0CiAgICAgICAgICAgICAgLmlzTnVtYmVyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICAgIHJpZ2h0LmlzTnVtYmVyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICBpZiAoZGl2aXNvci5pc1Bvc2l0aXZlKSB7CiAgICAgICAgICByZXR1cm4gaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UoaW5mby5pbnRaZXJvLCBkaXZpc29yLnVwcGVyKTsKICAgICAgICB9IGVsc2UgaWYgKGRpdmlzb3IuaXNOZWdhdGl2ZSkgewogICAgICAgICAgcmV0dXJuIGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKAogICAgICAgICAgICAgIGluZm8uaW50WmVybywgaW5mby5uZXdOZWdhdGVWYWx1ZShkaXZpc29yLmxvd2VyKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gaW5mby5uZXdVbmJvdW5kUmFuZ2UoKTsKICB9CgogIEBvdmVycmlkZQogIFJhbmdlIHZpc2l0UmVtYWluZGVyKEhSZW1haW5kZXIgaW5zdHJ1Y3Rpb24pIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzBdOwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdOwogICAgUmFuZ2UgZGl2aWRlbmQgPSByYW5nZXNbbGVmdF07CiAgICAvLyBJZiBib3RoIG9wZXJhbmRzIGFyZSA+PTAsIHRoZSByZXN1bHQgaXMgPj0gMCBhbmQgYm91bmRlZCBieSB0aGUgZGl2aXNvci4KICAgIGlmICgoZGl2aWRlbmQgIT0gbnVsbCAmJiBkaXZpZGVuZC5pc1Bvc2l0aXZlKSB8fAogICAgICAgIGxlZnQKICAgICAgICAgICAgLmlzUG9zaXRpdmVJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIFJhbmdlIGRpdmlzb3IgPSByYW5nZXNbcmlnaHRdOwogICAgICBpZiAoZGl2aXNvciAhPSBudWxsKSB7CiAgICAgICAgaWYgKGRpdmlzb3IuaXNQb3NpdGl2ZSkgewogICAgICAgICAgLy8gRm9yIEludGVnZXIgdmFsdWVzIHdlIGNhbiBiZSBwcmVjaXNlIGluIHRoZSB1cHBlciBib3VuZC4KICAgICAgICAgIGlmIChsZWZ0CiAgICAgICAgICAgICAgICAgIC5pc0ludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICAgICAgICByaWdodAogICAgICAgICAgICAgICAgICAuaXNJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgICAgIHJldHVybiBpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZSgKICAgICAgICAgICAgICAgIGluZm8uaW50WmVybywgZGl2aXNvci51cHBlciAtIGluZm8uaW50T25lKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChsZWZ0LmlzTnVtYmVyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICAgICAgICByaWdodAogICAgICAgICAgICAgICAgICAuaXNOdW1iZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICAgICAgcmV0dXJuIGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKGluZm8uaW50WmVybywgZGl2aXNvci51cHBlcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gaW5mby5uZXdVbmJvdW5kUmFuZ2UoKTsKICB9CgogIEBvdmVycmlkZQogIFJhbmdlIHZpc2l0SW52b2tlRHluYW1pY01ldGhvZChISW52b2tlRHluYW1pY01ldGhvZCBpbnZva2UpIHsKICAgIGlmICgoaW52b2tlLmlucHV0cy5sZW5ndGggPT0gMykgJiYgKGludm9rZS5zZWxlY3Rvci5uYW1lID09ICIlIikpCiAgICAgIHJldHVybiBoYW5kbGVJbnZva2VNb2R1bG8oaW52b2tlKTsKICAgIHJldHVybiBzdXBlci52aXNpdEludm9rZUR5bmFtaWNNZXRob2QoaW52b2tlKTsKICB9CgogIFJhbmdlIGhhbmRsZUJpbmFyeU9wZXJhdGlvbihIQmluYXJ5QXJpdGhtZXRpYyBpbnN0cnVjdGlvbikgewogICAgaWYgKGluc3RydWN0aW9uCiAgICAgICAgLmlzSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgIC5pc1BvdGVudGlhbGx5RmFsc2UpIHsKICAgICAgcmV0dXJuIGluZm8ubmV3VW5ib3VuZFJhbmdlKCk7CiAgICB9CiAgICByZXR1cm4gaW5zdHJ1Y3Rpb24KICAgICAgICAub3BlcmF0aW9uKCkKICAgICAgICAuYXBwbHkocmFuZ2VzW2luc3RydWN0aW9uLmxlZnRdLCByYW5nZXNbaW5zdHJ1Y3Rpb24ucmlnaHRdKTsKICB9CgogIEBvdmVycmlkZQogIFJhbmdlIHZpc2l0QWRkKEhBZGQgYWRkKSB7CiAgICByZXR1cm4gaGFuZGxlQmluYXJ5T3BlcmF0aW9uKGFkZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBSYW5nZSB2aXNpdFN1YnRyYWN0KEhTdWJ0cmFjdCBzdWIpIHsKICAgIHJldHVybiBoYW5kbGVCaW5hcnlPcGVyYXRpb24oc3ViKTsKICB9CgogIEBvdmVycmlkZQogIFJhbmdlIHZpc2l0Qml0QW5kKEhCaXRBbmQgbm9kZSkgewogICAgaWYgKG5vZGUuaXNJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzUG90ZW50aWFsbHlGYWxzZSkgewogICAgICByZXR1cm4gaW5mby5uZXdVbmJvdW5kUmFuZ2UoKTsKICAgIH0KICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IG5vZGUucmlnaHQ7CiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IG5vZGUubGVmdDsKICAgIGlmIChsZWZ0LmlzSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgcmlnaHQuaXNJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIHJhbmdlc1tsZWZ0XSAmIHJhbmdlc1tyaWdodF07CiAgICB9CgogICAgUmFuZ2UgdHJ5Q29tcHV0ZVJhbmdlKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgICBSYW5nZSByYW5nZSA9IHJhbmdlc1tpbnN0cnVjdGlvbl07CiAgICAgIGlmIChyYW5nZS5pc1Bvc2l0aXZlKSB7CiAgICAgICAgcmV0dXJuIGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKGluZm8uaW50WmVybywgcmFuZ2UudXBwZXIpOwogICAgICB9IGVsc2UgaWYgKHJhbmdlLmlzTmVnYXRpdmUpIHsKICAgICAgICByZXR1cm4gaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UocmFuZ2UubG93ZXIsIGluZm8uaW50WmVybyk7CiAgICAgIH0KICAgICAgcmV0dXJuIGluZm8ubmV3VW5ib3VuZFJhbmdlKCk7CiAgICB9CgogICAgaWYgKGxlZnQuaXNJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIHRyeUNvbXB1dGVSYW5nZShsZWZ0KTsKICAgIH0gZWxzZSBpZiAocmlnaHQKICAgICAgICAuaXNJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIHRyeUNvbXB1dGVSYW5nZShyaWdodCk7CiAgICB9CiAgICByZXR1cm4gaW5mby5uZXdVbmJvdW5kUmFuZ2UoKTsKICB9CgogIEBvdmVycmlkZQogIFJhbmdlIHZpc2l0Q2hlY2soSENoZWNrIGluc3RydWN0aW9uKSB7CiAgICBpZiAocmFuZ2VzW2luc3RydWN0aW9uLmNoZWNrZWRJbnB1dF0gPT0gbnVsbCkgewogICAgICByZXR1cm4gdmlzaXRJbnN0cnVjdGlvbihpbnN0cnVjdGlvbik7CiAgICB9CiAgICByZXR1cm4gcmFuZ2VzW2luc3RydWN0aW9uLmNoZWNrZWRJbnB1dF07CiAgfQoKICBISW5zdHJ1Y3Rpb24gY3JlYXRlUmFuZ2VDb252ZXJzaW9uKAogICAgICBISW5zdHJ1Y3Rpb24gY3Vyc29yLCBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIEhSYW5nZUNvbnZlcnNpb24gbmV3SW5zdHJ1Y3Rpb24gPSBuZXcgSFJhbmdlQ29udmVyc2lvbigKICAgICAgICBpbnN0cnVjdGlvbiwgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5pbnRUeXBlKTsKICAgIGNvbnZlcnNpb25zLmFkZChuZXdJbnN0cnVjdGlvbik7CiAgICBjdXJzb3IuYmxvY2suYWRkQmVmb3JlKGN1cnNvciwgbmV3SW5zdHJ1Y3Rpb24pOwogICAgLy8gVXBkYXRlIHRoZSB1c2VycyBvZiB0aGUgaW5zdHJ1Y3Rpb24gZG9taW5hdGVkIGJ5IFtjdXJzb3JdIHRvCiAgICAvLyB1c2UgdGhlIG5ldyBpbnN0cnVjdGlvbiwgdGhhdCBoYXMgYW4gbmFycm93ZXIgcmFuZ2UuCiAgICBpbnN0cnVjdGlvbi5yZXBsYWNlQWxsVXNlcnNEb21pbmF0ZWRCeShjdXJzb3IsIG5ld0luc3RydWN0aW9uKTsKICAgIHJldHVybiBuZXdJbnN0cnVjdGlvbjsKICB9CgogIHN0YXRpYyBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG5lZ2F0ZU9wZXJhdGlvbigKICAgICAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24pIHsKICAgIGlmIChvcGVyYXRpb24gPT0gY29uc3QgY29uc3RhbnRfc3lzdGVtLkxlc3NPcGVyYXRpb24oKSkgewogICAgICByZXR1cm4gY29uc3QgY29uc3RhbnRfc3lzdGVtLkdyZWF0ZXJFcXVhbE9wZXJhdGlvbigpOwogICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT0gY29uc3QgY29uc3RhbnRfc3lzdGVtLkxlc3NFcXVhbE9wZXJhdGlvbigpKSB7CiAgICAgIHJldHVybiBjb25zdCBjb25zdGFudF9zeXN0ZW0uR3JlYXRlck9wZXJhdGlvbigpOwogICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT0gY29uc3QgY29uc3RhbnRfc3lzdGVtLkdyZWF0ZXJPcGVyYXRpb24oKSkgewogICAgICByZXR1cm4gY29uc3QgY29uc3RhbnRfc3lzdGVtLkxlc3NFcXVhbE9wZXJhdGlvbigpOwogICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT0gY29uc3QgY29uc3RhbnRfc3lzdGVtLkdyZWF0ZXJFcXVhbE9wZXJhdGlvbigpKSB7CiAgICAgIHJldHVybiBjb25zdCBjb25zdGFudF9zeXN0ZW0uTGVzc09wZXJhdGlvbigpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICBzdGF0aWMgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBmbGlwT3BlcmF0aW9uKAogICAgICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbikgewogICAgaWYgKG9wZXJhdGlvbiA9PSBjb25zdCBjb25zdGFudF9zeXN0ZW0uTGVzc09wZXJhdGlvbigpKSB7CiAgICAgIHJldHVybiBjb25zdCBjb25zdGFudF9zeXN0ZW0uR3JlYXRlck9wZXJhdGlvbigpOwogICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT0gY29uc3QgY29uc3RhbnRfc3lzdGVtLkxlc3NFcXVhbE9wZXJhdGlvbigpKSB7CiAgICAgIHJldHVybiBjb25zdCBjb25zdGFudF9zeXN0ZW0uR3JlYXRlckVxdWFsT3BlcmF0aW9uKCk7CiAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PSBjb25zdCBjb25zdGFudF9zeXN0ZW0uR3JlYXRlck9wZXJhdGlvbigpKSB7CiAgICAgIHJldHVybiBjb25zdCBjb25zdGFudF9zeXN0ZW0uTGVzc09wZXJhdGlvbigpOwogICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT0gY29uc3QgY29uc3RhbnRfc3lzdGVtLkdyZWF0ZXJFcXVhbE9wZXJhdGlvbigpKSB7CiAgICAgIHJldHVybiBjb25zdCBjb25zdGFudF9zeXN0ZW0uTGVzc0VxdWFsT3BlcmF0aW9uKCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIFJhbmdlIGNvbXB1dGVDb25zdHJhaW5lZFJhbmdlKGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uLAogICAgICBSYW5nZSBsZWZ0UmFuZ2UsIFJhbmdlIHJpZ2h0UmFuZ2UpIHsKICAgIFJhbmdlIHJhbmdlOwogICAgaWYgKG9wZXJhdGlvbiA9PSBjb25zdCBjb25zdGFudF9zeXN0ZW0uTGVzc09wZXJhdGlvbigpKSB7CiAgICAgIHJhbmdlID0gaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UoCiAgICAgICAgICBjb25zdCBNaW5JbnRWYWx1ZSgpLCByaWdodFJhbmdlLnVwcGVyIC0gaW5mby5pbnRPbmUpOwogICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT0gY29uc3QgY29uc3RhbnRfc3lzdGVtLkxlc3NFcXVhbE9wZXJhdGlvbigpKSB7CiAgICAgIHJhbmdlID0gaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UoY29uc3QgTWluSW50VmFsdWUoKSwgcmlnaHRSYW5nZS51cHBlcik7CiAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PSBjb25zdCBjb25zdGFudF9zeXN0ZW0uR3JlYXRlck9wZXJhdGlvbigpKSB7CiAgICAgIHJhbmdlID0gaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UoCiAgICAgICAgICByaWdodFJhbmdlLmxvd2VyICsgaW5mby5pbnRPbmUsIGNvbnN0IE1heEludFZhbHVlKCkpOwogICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT0gY29uc3QgY29uc3RhbnRfc3lzdGVtLkdyZWF0ZXJFcXVhbE9wZXJhdGlvbigpKSB7CiAgICAgIHJhbmdlID0gaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UocmlnaHRSYW5nZS5sb3dlciwgY29uc3QgTWF4SW50VmFsdWUoKSk7CiAgICB9IGVsc2UgewogICAgICByYW5nZSA9IGluZm8ubmV3VW5ib3VuZFJhbmdlKCk7CiAgICB9CiAgICByZXR1cm4gcmFuZ2UuaW50ZXJzZWN0aW9uKGxlZnRSYW5nZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBSYW5nZSB2aXNpdENvbmRpdGlvbmFsQnJhbmNoKEhDb25kaXRpb25hbEJyYW5jaCBicmFuY2gpIHsKICAgIGR5bmFtaWMgY29uZGl0aW9uID0gYnJhbmNoLmNvbmRpdGlvbjsKICAgIC8vIFRPRE8obmdlb2ZmcmF5KTogSGFuZGxlIGNvbXBsZXggY29uZGl0aW9ucy4KICAgIGlmIChjb25kaXRpb24gaXMhIEhSZWxhdGlvbmFsKSByZXR1cm4gaW5mby5uZXdVbmJvdW5kUmFuZ2UoKTsKICAgIGlmIChjb25kaXRpb24gaXMgSElkZW50aXR5KSByZXR1cm4gaW5mby5uZXdVbmJvdW5kUmFuZ2UoKTsKICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IGNvbmRpdGlvbi5yaWdodDsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gY29uZGl0aW9uLmxlZnQ7CiAgICBpZiAobGVmdC5pc0ludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNQb3RlbnRpYWxseUZhbHNlKSB7CiAgICAgIHJldHVybiBpbmZvLm5ld1VuYm91bmRSYW5nZSgpOwogICAgfQogICAgaWYgKHJpZ2h0LmlzSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc1BvdGVudGlhbGx5RmFsc2UpIHsKICAgICAgcmV0dXJuIGluZm8ubmV3VW5ib3VuZFJhbmdlKCk7CiAgICB9CgogICAgUmFuZ2UgcmlnaHRSYW5nZSA9IHJhbmdlc1tyaWdodF07CiAgICBSYW5nZSBsZWZ0UmFuZ2UgPSByYW5nZXNbbGVmdF07CiAgICBjb25zdGFudF9zeXN0ZW0uT3BlcmF0aW9uIG9wZXJhdGlvbiA9IGNvbmRpdGlvbi5vcGVyYXRpb24oKTsKICAgIGNvbnN0YW50X3N5c3RlbS5PcGVyYXRpb24gbWlycm9yT3AgPSBmbGlwT3BlcmF0aW9uKG9wZXJhdGlvbik7CiAgICAvLyBPbmx5IHVwZGF0ZSB0aGUgdHJ1ZSBicmFuY2ggaWYgdGhpcyBibG9jayBpcyB0aGUgb25seQogICAgLy8gcHJlZGVjZXNzb3IuCiAgICBpZiAoYnJhbmNoLnRydWVCcmFuY2gucHJlZGVjZXNzb3JzLmxlbmd0aCA9PSAxKSB7CiAgICAgIGFzc2VydChicmFuY2gudHJ1ZUJyYW5jaC5wcmVkZWNlc3NvcnNbMF0gPT0gYnJhbmNoLmJsb2NrKTsKICAgICAgLy8gVXBkYXRlIHRoZSB0cnVlIGJyYW5jaCB0byB1c2UgbmFycm93ZXIgcmFuZ2VzIGZvciBbbGVmdF0gYW5kCiAgICAgIC8vIFtyaWdodF0uCiAgICAgIFJhbmdlIHJhbmdlID0gY29tcHV0ZUNvbnN0cmFpbmVkUmFuZ2Uob3BlcmF0aW9uLCBsZWZ0UmFuZ2UsIHJpZ2h0UmFuZ2UpOwogICAgICBpZiAobGVmdFJhbmdlICE9IHJhbmdlKSB7CiAgICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0KICAgICAgICAgICAgY3JlYXRlUmFuZ2VDb252ZXJzaW9uKGJyYW5jaC50cnVlQnJhbmNoLmZpcnN0LCBsZWZ0KTsKICAgICAgICByYW5nZXNbaW5zdHJ1Y3Rpb25dID0gcmFuZ2U7CiAgICAgIH0KCiAgICAgIHJhbmdlID0gY29tcHV0ZUNvbnN0cmFpbmVkUmFuZ2UobWlycm9yT3AsIHJpZ2h0UmFuZ2UsIGxlZnRSYW5nZSk7CiAgICAgIGlmIChyaWdodFJhbmdlICE9IHJhbmdlKSB7CiAgICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0KICAgICAgICAgICAgY3JlYXRlUmFuZ2VDb252ZXJzaW9uKGJyYW5jaC50cnVlQnJhbmNoLmZpcnN0LCByaWdodCk7CiAgICAgICAgcmFuZ2VzW2luc3RydWN0aW9uXSA9IHJhbmdlOwogICAgICB9CiAgICB9CgogICAgLy8gT25seSB1cGRhdGUgdGhlIGZhbHNlIGJyYW5jaCBpZiB0aGlzIGJsb2NrIGlzIHRoZSBvbmx5CiAgICAvLyBwcmVkZWNlc3Nvci4KICAgIGlmIChicmFuY2guZmFsc2VCcmFuY2gucHJlZGVjZXNzb3JzLmxlbmd0aCA9PSAxKSB7CiAgICAgIGFzc2VydChicmFuY2guZmFsc2VCcmFuY2gucHJlZGVjZXNzb3JzWzBdID09IGJyYW5jaC5ibG9jayk7CiAgICAgIGNvbnN0YW50X3N5c3RlbS5PcGVyYXRpb24gcmV2ZXJzZSA9IG5lZ2F0ZU9wZXJhdGlvbihvcGVyYXRpb24pOwogICAgICBjb25zdGFudF9zeXN0ZW0uT3BlcmF0aW9uIHJldmVyc2VkTWlycm9yID0gZmxpcE9wZXJhdGlvbihyZXZlcnNlKTsKICAgICAgLy8gVXBkYXRlIHRoZSBmYWxzZSBicmFuY2ggdG8gdXNlIG5hcnJvd2VyIHJhbmdlcyBmb3IgW2xlZnRdIGFuZAogICAgICAvLyBbcmlnaHRdLgogICAgICBSYW5nZSByYW5nZSA9IGNvbXB1dGVDb25zdHJhaW5lZFJhbmdlKHJldmVyc2UsIGxlZnRSYW5nZSwgcmlnaHRSYW5nZSk7CiAgICAgIGlmIChsZWZ0UmFuZ2UgIT0gcmFuZ2UpIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPQogICAgICAgICAgICBjcmVhdGVSYW5nZUNvbnZlcnNpb24oYnJhbmNoLmZhbHNlQnJhbmNoLmZpcnN0LCBsZWZ0KTsKICAgICAgICByYW5nZXNbaW5zdHJ1Y3Rpb25dID0gcmFuZ2U7CiAgICAgIH0KCiAgICAgIHJhbmdlID0gY29tcHV0ZUNvbnN0cmFpbmVkUmFuZ2UocmV2ZXJzZWRNaXJyb3IsIHJpZ2h0UmFuZ2UsIGxlZnRSYW5nZSk7CiAgICAgIGlmIChyaWdodFJhbmdlICE9IHJhbmdlKSB7CiAgICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0KICAgICAgICAgICAgY3JlYXRlUmFuZ2VDb252ZXJzaW9uKGJyYW5jaC5mYWxzZUJyYW5jaC5maXJzdCwgcmlnaHQpOwogICAgICAgIHJhbmdlc1tpbnN0cnVjdGlvbl0gPSByYW5nZTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBpbmZvLm5ld1VuYm91bmRSYW5nZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgUmFuZ2UgdmlzaXRSYW5nZUNvbnZlcnNpb24oSFJhbmdlQ29udmVyc2lvbiBjb252ZXJzaW9uKSB7CiAgICByZXR1cm4gcmFuZ2VzW2NvbnZlcnNpb25dOwogIH0KfQoKLy8vIFRyaWVzIHRvIGZpbmQgYSByYW5nZSBmb3IgdGhlIHVwZGF0ZSBpbnN0cnVjdGlvbiBvZiBhIGxvb3AgcGhpLgpjbGFzcyBMb29wVXBkYXRlUmVjb2duaXplciBleHRlbmRzIEhCYXNlVmlzaXRvciB7CiAgZmluYWwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkOwogIGZpbmFsIE1hcDxISW5zdHJ1Y3Rpb24sIFJhbmdlPiByYW5nZXM7CiAgZmluYWwgVmFsdWVSYW5nZUluZm8gaW5mbzsKICBMb29wVXBkYXRlUmVjb2duaXplcih0aGlzLmNsb3NlZFdvcmxkLCB0aGlzLnJhbmdlcywgdGhpcy5pbmZvKTsKCiAgUmFuZ2UgcnVuKEhQaGkgbG9vcFBoaSkgewogICAgLy8gQ3JlYXRlIGEgbWFya2VyIHJhbmdlIGZvciB0aGUgbG9vcCBwaGksIHNvIHRoYXQgaWYgdGhlIHVwZGF0ZQogICAgLy8gdXNlcyB0aGUgbG9vcCBwaGksIGl0IGhhcyBhIHJhbmdlIHRvIHVzZS4KICAgIHJhbmdlc1tsb29wUGhpXSA9IGluZm8ubmV3TWFya2VyUmFuZ2UoKTsKICAgIFJhbmdlIHVwZGF0ZVJhbmdlID0gdmlzaXQobG9vcFBoaS5pbnB1dHNbMV0pOwogICAgcmFuZ2VzW2xvb3BQaGldID0gbnVsbDsKICAgIGlmICh1cGRhdGVSYW5nZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIFJhbmdlIHN0YXJ0UmFuZ2UgPSByYW5nZXNbbG9vcFBoaS5pbnB1dHNbMF1dOwogICAgLy8gSWYgdGhlIGxvd2VyIChyZXNwZWN0aXZlbHkgdXBwZXIpIHZhbHVlIGlzIHRoZSBtYXJrZXIsIHdlIGtub3cKICAgIC8vIHRoZSBsb29wIGRvZXMgbm90IGNoYW5nZSBpdCwgc28gd2UgY2FuIGp1c3QgdXNlIHRoZQogICAgLy8gW3N0YXJ0UmFuZ2VdJ3MgbG93ZXIgKHVwcGVyKSB2YWx1ZS4gT3RoZXJ3aXNlIHRoZSBsb3dlciAodXBwZXIpIHZhbHVlCiAgICAvLyBpcyB0aGUgbWluaW11bSBvZiB0aGUgW3N0YXJ0UmFuZ2VdJ3MgbG93ZXIgKHVwcGVyKSBhbmQgdGhlCiAgICAvLyBbdXBkYXRlUmFuZ2VdJ3MgbG93ZXIgKHVwcGVyKS4KICAgIFZhbHVlIGxvdyA9IHVwZGF0ZVJhbmdlLmxvd2VyIGlzIE1hcmtlclZhbHVlCiAgICAgICAgPyBzdGFydFJhbmdlLmxvd2VyCiAgICAgICAgOiB1cGRhdGVSYW5nZS5sb3dlci5taW4oc3RhcnRSYW5nZS5sb3dlcik7CiAgICBWYWx1ZSB1cCA9IHVwZGF0ZVJhbmdlLnVwcGVyIGlzIE1hcmtlclZhbHVlCiAgICAgICAgPyBzdGFydFJhbmdlLnVwcGVyCiAgICAgICAgOiB1cGRhdGVSYW5nZS51cHBlci5tYXgoc3RhcnRSYW5nZS51cHBlcik7CiAgICByZXR1cm4gaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UobG93LCB1cCk7CiAgfQoKICBSYW5nZSB2aXNpdChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGlmIChpbnN0cnVjdGlvbgogICAgICAgIC5pc0ludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAuaXNQb3RlbnRpYWxseUZhbHNlKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKHJhbmdlc1tpbnN0cnVjdGlvbl0gIT0gbnVsbCkgcmV0dXJuIHJhbmdlc1tpbnN0cnVjdGlvbl07CiAgICByZXR1cm4gaW5zdHJ1Y3Rpb24uYWNjZXB0KHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgUmFuZ2UgdmlzaXRQaGkoSFBoaSBwaGkpIHsKICAgIC8vIElmIHRoZSB1cGRhdGUgb2YgYSBsb29wIHBoaSBpbnZvbHZlcyBhbm90aGVyIGxvb3AgcGhpLCB3ZSBnaXZlCiAgICAvLyB1cC4KICAgIGlmIChwaGkuYmxvY2suaXNMb29wSGVhZGVyKCkpIHJldHVybiBudWxsOwogICAgUmFuZ2UgcGhpUmFuZ2U7CiAgICBmb3IgKEhJbnN0cnVjdGlvbiBpbnB1dCBpbiBwaGkuaW5wdXRzKSB7CiAgICAgIFJhbmdlIGlucHV0UmFuZ2UgPSB2aXNpdChpbnB1dCk7CiAgICAgIGlmIChpbnB1dFJhbmdlID09IG51bGwpIHJldHVybiBudWxsOwogICAgICBpZiAocGhpUmFuZ2UgPT0gbnVsbCkgewogICAgICAgIHBoaVJhbmdlID0gaW5wdXRSYW5nZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwaGlSYW5nZSA9IHBoaVJhbmdlLnVuaW9uKGlucHV0UmFuZ2UpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcGhpUmFuZ2U7CiAgfQoKICBAb3ZlcnJpZGUKICBSYW5nZSB2aXNpdENoZWNrKEhDaGVjayBpbnN0cnVjdGlvbikgewogICAgcmV0dXJuIHZpc2l0KGluc3RydWN0aW9uLmNoZWNrZWRJbnB1dCk7CiAgfQoKICBAb3ZlcnJpZGUKICBSYW5nZSB2aXNpdEFkZChIQWRkIG9wZXJhdGlvbikgewogICAgcmV0dXJuIGhhbmRsZUJpbmFyeU9wZXJhdGlvbihvcGVyYXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgUmFuZ2UgdmlzaXRTdWJ0cmFjdChIU3VidHJhY3Qgb3BlcmF0aW9uKSB7CiAgICByZXR1cm4gaGFuZGxlQmluYXJ5T3BlcmF0aW9u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QWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi91bml2ZXJzZS9zaWRlX2VmZmVjdHMuZGFydCcgc2hvdyBTaWRlRWZmZWN0czsKaW1wb3J0ICdub2Rlcy5kYXJ0JzsKCmNsYXNzIFZhbHVlU2V0IHsKICBpbnQgc2l6ZSA9IDA7CiAgTGlzdDxISW5zdHJ1Y3Rpb24+IHRhYmxlOwogIFZhbHVlU2V0Tm9kZSBjb2xsaXNpb25zOwogIFZhbHVlU2V0KCkgOiB0YWJsZSA9IG5ldyBMaXN0PEhJbnN0cnVjdGlvbj4oOCk7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gc2l6ZSA9PSAwOwogIGludCBnZXQgbGVuZ3RoID0+IHNpemU7CgogIHZvaWQgYWRkKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgYXNzZXJ0KGxvb2t1cChpbnN0cnVjdGlvbikgPT0gbnVsbCk7CiAgICBpbnQgaGFzaENvZGUgPSBpbnN0cnVjdGlvbi5ndm5IYXNoQ29kZSgpOwogICAgaW50IGNhcGFjaXR5ID0gdGFibGUubGVuZ3RoOwogICAgLy8gUmVzaXplIHdoZW4gaGFsZiBvZiB0aGUgaGFzaCB0YWJsZSBpcyBpbiB1c2UuCiAgICBpZiAoc2l6ZSA+PSBjYXBhY2l0eSA+PiAxKSB7CiAgICAgIGNhcGFjaXR5ID0gY2FwYWNpdHkgPDwgMTsKICAgICAgcmVzaXplKGNhcGFjaXR5KTsKICAgIH0KICAgIC8vIFRyeSB0byBpbnNlcnQgaW4gdGhlIGhhc2ggdGFibGUgZmlyc3QuCiAgICBpbnQgaW5kZXggPSBoYXNoQ29kZSAlIGNhcGFjaXR5OwogICAgaWYgKHRhYmxlW2luZGV4XSA9PSBudWxsKSB7CiAgICAgIHRhYmxlW2luZGV4XSA9IGluc3RydWN0aW9uOwogICAgfSBlbHNlIHsKICAgICAgY29sbGlzaW9ucyA9IG5ldyBWYWx1ZVNldE5vZGUoaW5zdHJ1Y3Rpb24sIGhhc2hDb2RlLCBjb2xsaXNpb25zKTsKICAgIH0KICAgIHNpemUrKzsKICB9CgogIEhJbnN0cnVjdGlvbiBsb29rdXAoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBpbnQgaGFzaENvZGUgPSBpbnN0cnVjdGlvbi5ndm5IYXNoQ29kZSgpOwogICAgaW50IGluZGV4ID0gaGFzaENvZGUgJSB0YWJsZS5sZW5ndGg7CiAgICAvLyBMb29rIGluIHRoZSBoYXNoIHRhYmxlLgogICAgSEluc3RydWN0aW9uIHByb2JlID0gdGFibGVbaW5kZXhdOwogICAgaWYgKHByb2JlICE9IG51bGwgJiYgcHJvYmUuZ3ZuRXF1YWxzKGluc3RydWN0aW9uKSkgcmV0dXJuIHByb2JlOwogICAgLy8gTG9vayBpbiB0aGUgY29sbGlzaW9ucyBsaXN0LgogICAgZm9yIChWYWx1ZVNldE5vZGUgbm9kZSA9IGNvbGxpc2lvbnM7IG5vZGUgIT0gbnVsbDsgbm9kZSA9IG5vZGUubmV4dCkgewogICAgICBpZiAobm9kZS5oYXNoQ29kZSA9PSBoYXNoQ29kZSkgewogICAgICAgIEhJbnN0cnVjdGlvbiBjYWNoZWQgPSBub2RlLnZhbHVlOwogICAgICAgIGlmIChjYWNoZWQuZ3ZuRXF1YWxzKGluc3RydWN0aW9uKSkgcmV0dXJuIGNhY2hlZDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIGtpbGwoaW50IGZsYWdzKSB7CiAgICBpZiAoZmxhZ3MgPT0gMCkgcmV0dXJuOwogICAgaW50IGRlcGVuZHMgPSBTaWRlRWZmZWN0cy5jb21wdXRlRGVwZW5kc09uRmxhZ3MoZmxhZ3MpOwogICAgLy8gS2lsbCBpbiB0aGUgaGFzaCB0YWJsZS4KICAgIGZvciAoaW50IGluZGV4ID0gMCwgbGVuZ3RoID0gdGFibGUubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgewogICAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSB0YWJsZVtpbmRleF07CiAgICAgIGlmIChpbnN0cnVjdGlvbiAhPSBudWxsICYmIGluc3RydWN0aW9uLnNpZGVFZmZlY3RzLmRlcGVuZHNPbihkZXBlbmRzKSkgewogICAgICAgIHRhYmxlW2luZGV4XSA9IG51bGw7CiAgICAgICAgc2l6ZS0tOwogICAgICB9CiAgICB9CiAgICAvLyBLaWxsIGluIHRoZSBjb2xsaXNpb25zIGxpc3QuCiAgICBWYWx1ZVNldE5vZGUgcHJldmlvdXMgPSBudWxsOwogICAgVmFsdWVTZXROb2RlIGN1cnJlbnQgPSBjb2xsaXNpb25zOwogICAgd2hpbGUgKGN1cnJlbnQgIT0gbnVsbCkgewogICAgICBWYWx1ZVNldE5vZGUgbmV4dCA9IGN1cnJlbnQubmV4dDsKICAgICAgSEluc3RydWN0aW9uIGNhY2hlZCA9IGN1cnJlbnQudmFsdWU7CiAgICAgIGlmIChjYWNoZWQuc2lkZUVmZmVjdHMuZGVwZW5kc09uKGRlcGVuZHMpKSB7CiAgICAgICAgaWYgKHByZXZpb3VzID09IG51bGwpIHsKICAgICAgICAgIGNvbGxpc2lvbnMgPSBuZXh0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwcmV2aW91cy5uZXh0ID0gbmV4dDsKICAgICAgICB9CiAgICAgICAgc2l6ZS0tOwogICAgICB9IGVsc2UgewogICAgICAgIHByZXZpb3VzID0gY3VycmVudDsKICAgICAgfQogICAgICBjdXJyZW50ID0gbmV4dDsKICAgIH0KICB9CgogIFZhbHVlU2V0IGNvcHkoKSB7CiAgICByZXR1cm4gY29weVRvKG5ldyBWYWx1ZVNldCgpLCB0YWJsZSwgY29sbGlzaW9ucyk7CiAgfQoKICBMaXN0PEhJbnN0cnVjdGlvbj4gdG9MaXN0KCkgewogICAgcmV0dXJuIGNvcHlUbyg8SEluc3RydWN0aW9uPltdLCB0YWJsZSwgY29sbGlzaW9ucyk7CiAgfQoKICAvLyBDb3B5IHRoZSBpbnN0cnVjdGlvbnMgaW4gdmFsdWUgc2V0IGRlZmluZWQgYnkgW3RhYmxlXSBhbmQKICAvLyBbY29sbGlzaW9uc10gaW50byBbb3RoZXJdIGFuZCByZXR1cm5zIFtvdGhlcl0uIFRoZSBjb3B5IGlzIGRvbmUKICAvLyBieSBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgaGFzaCB0YWJsZSBhbmQgdGhlIGNvbGxpc2lvbnMgbGlzdCBhbmQKICAvLyBjYWxsaW5nIFs6b3RoZXIuYWRkOl0uCiAgc3RhdGljIGNvcHlUbyh2YXIgb3RoZXIsIExpc3Q8SEluc3RydWN0aW9uPiB0YWJsZSwgVmFsdWVTZXROb2RlIGNvbGxpc2lvbnMpIHsKICAgIC8vIENvcHkgZWxlbWVudHMgZnJvbSB0aGUgaGFzaCB0YWJsZS4KICAgIGZvciAoaW50IGluZGV4ID0gMCwgbGVuZ3RoID0gdGFibGUubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgewogICAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSB0YWJsZVtpbmRleF07CiAgICAgIGlmIChpbnN0cnVjdGlvbiAhPSBudWxsKSBvdGhlci5hZGQoaW5zdHJ1Y3Rpb24pOwogICAgfQogICAgLy8gQ29weSBlbGVtZW50cyBmcm9tIHRoZSBjb2xsaXNpb24gbGlzdC4KICAgIFZhbHVlU2V0Tm9kZSBjdXJyZW50ID0gY29sbGlzaW9uczsKICAgIHdoaWxlIChjdXJyZW50ICE9IG51bGwpIHsKICAgICAgLy8gVE9ETyhrYXNwZXJsKTogTWF5YmUgZmluZCBhIHdheSBvZiByZXVzaW5nIHRoZSBoYXNoIGNvZGUKICAgICAgLy8gcmF0aGVyIHRoYW4gcmVjb21wdXRpbmcgaXQgZXZlcnkgdGltZS4KICAgICAgb3RoZXIuYWRkKGN1cnJlbnQudmFsdWUpOwogICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0OwogICAgfQogICAgcmV0dXJuIG90aGVyOwogIH0KCiAgVmFsdWVTZXQgaW50ZXJzZWN0aW9uKFZhbHVlU2V0IG90aGVyKSB7CiAgICBpZiAoc2l6ZSA+IG90aGVyLnNpemUpIHJldHVybiBvdGhlci5pbnRlcnNlY3Rpb24odGhpcyk7CiAgICBWYWx1ZVNldCByZXN1bHQgPSBuZXcgVmFsdWVTZXQoKTsKICAgIC8vIExvb2sgaW4gdGhlIGhhc2ggdGFibGUuCiAgICBmb3IgKGludCBpbmRleCA9IDAsIGxlbmd0aCA9IHRhYmxlLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHsKICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gdGFibGVbaW5kZXhdOwogICAgICBpZiAoaW5zdHJ1Y3Rpb24gIT0gbnVsbCAmJiBvdGhlci5sb29rdXAoaW5zdHJ1Y3Rpb24pICE9IG51bGwpIHsKICAgICAgICByZXN1bHQuYWRkKGluc3RydWN0aW9uKTsKICAgICAgfQogICAgfQogICAgLy8gTG9vayBpbiB0aGUgY29sbGlzaW9uIGxpc3QuCiAgICBWYWx1ZVNldE5vZGUgY3VycmVudCA9IGNvbGxpc2lvbnM7CiAgICB3aGlsZSAoY3VycmVudCAhPSBudWxsKSB7CiAgICAgIEhJbnN0cnVjdGlvbiB2YWx1ZSA9IGN1cnJlbnQudmFsdWU7CiAgICAgIGlmIChvdGhlci5sb29rdXAodmFsdWUpICE9IG51bGwpIHsKICAgICAgICByZXN1bHQuYWRkKHZhbHVlKTsKICAgICAgfQogICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0OwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgcmVzaXplKGludCBjYXBhY2l0eSkgewogICAgdmFyIG9sZFNpemUgPSBzaXplOwogICAgdmFyIG9sZFRhYmxlID0gdGFibGU7CiAgICB2YXIgb2xkQ29sbGlzaW9ucyA9IGNvbGxpc2lvbnM7CiAgICAvLyBSZXNldCB0aGUgdGFibGUgd2l0aCBhIGJpZ2dlciBjYXBhY2l0eS4KICAgIGFzc2VydChjYXBhY2l0eSA+IHRhYmxlLmxlbmd0aCk7CiAgICBzaXplID0gMDsKICAgIHRhYmxlID0gbmV3IExpc3Q8SEluc3RydWN0aW9uPihjYXBhY2l0eSk7CiAgICBjb2xsaXNpb25zID0gbnVsbDsKICAgIC8vIEFkZCB0aGUgb2xkIGluc3RydWN0aW9ucyB0byB0aGUgbmV3IHRhYmxlLgogICAgY29weVRvKHRoaXMsIG9sZFRhYmxlLCBvbGRDb2xsaXNpb25zKTsKICAgIC8vIE1ha2Ugc3VyZSB3ZSBwcmVzZXJ2ZWQgYWxsIGVsZW1lbnRzIGFuZCB0aGF0IG5vIHJlc2l6aW5nCiAgICAvLyBoYXBwZW5lZCBhcyBwYXJ0IG9mIHRoaXMgcmVzaXppbmcuCiAgICBhc3NlcnQoc2l6ZSA9PSBvbGRTaXplKTsKICAgIGFzc2VydCh0YWJsZS5sZW5ndGggPT0gY2FwYWNpdHkpOwogIH0KfQoKY2xhc3MgVmFsdWVTZXROb2RlIHsKICBmaW5hbCBISW5zdHJ1Y3Rpb24gdmFsdWU7CiAgZmluYWwgaW50IGhhc2g7CiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBoYXNoOwogIFZhbHVlU2V0Tm9kZSBuZXh0OwogIFZhbHVlU2V0Tm9kZSh0aGlzLnZhbHVlLCB0aGlzLmhhc2gsIHRoaXMubmV4dCk7Cn0KgKEATk48ATkVAREQHBsyASEaAScpLiE1ISAYBi4lICINSAYMBAEyLikfJ0UkSycqOggGEQQBGRw8H0ovTx0QCAYkIiceKCszIB0RIAoQDxwIFgYEARQ2BAEgOAQBP0VFHFAqSi83Bi4nHkIwIB4GEgQBKjwmH0ovRiEIBiMnHiopGwgeBhMEAR4YGiQvJQ4uFzIrQCodJgQCARUcEgwcFTICASdwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvdmFsdWVfc2V0LmRhcnQrc2Rrcm9vdDovcGtnL2pzX2FzdC9saWIvc3JjL2NoYXJhY3RlcnMuZGFydIpJLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkganNfY2hhcmFjdGVyX2NvZGVzOwoKY29uc3QgaW50ICRFT0YgPSAwOwpjb25zdCBpbnQgJFNUWCA9IDI7CmNvbnN0IGludCAkQlMgPSA4Owpjb25zdCBpbnQgJFRBQiA9IDk7CmNvbnN0IGludCAkTEYgPSAxMDsKY29uc3QgaW50ICRWVEFCID0gMTE7CmNvbnN0IGludCAkRkYgPSAxMjsKY29uc3QgaW50ICRDUiA9IDEzOwpjb25zdCBpbnQgJFNQQUNFID0gMzI7CmNvbnN0IGludCAkQkFORyA9IDMzOwpjb25zdCBpbnQgJERRID0gMzQ7CmNvbnN0IGludCAkSEFTSCA9IDM1Owpjb25zdCBpbnQgJCQgPSAzNjsKY29uc3QgaW50ICRQRVJDRU5UID0gMzc7CmNvbnN0IGludCAkQU1QRVJTQU5EID0gMzg7CmNvbnN0IGludCAkU1EgPSAzOTsKY29uc3QgaW50ICRPUEVOX1BBUkVOID0gNDA7CmNvbnN0IGludCAkQ0xPU0VfUEFSRU4gPSA0MTsKY29uc3QgaW50ICRTVEFSID0gNDI7CmNvbnN0IGludCAkUExVUyA9IDQzOwpjb25zdCBpbnQgJENPTU1BID0gNDQ7CmNvbnN0IGludCAkTUlOVVMgPSA0NTsKY29uc3QgaW50ICRQRVJJT0QgPSA0NjsKY29uc3QgaW50ICRTTEFTSCA9IDQ3Owpjb25zdCBpbnQgJDAgPSA0ODsKY29uc3QgaW50ICQxID0gNDk7CmNvbnN0IGludCAkMiA9IDUwOwpjb25zdCBpbnQgJDMgPSA1MTsKY29uc3QgaW50ICQ0ID0gNTI7CmNvbnN0IGludCAkNSA9IDUzOwpjb25zdCBpbnQgJDYgPSA1NDsKY29uc3QgaW50ICQ3ID0gNTU7CmNvbnN0IGludCAkOCA9IDU2Owpjb25zdCBpbnQgJDkgPSA1NzsKY29uc3QgaW50ICRDT0xPTiA9IDU4Owpjb25zdCBpbnQgJFNFTUlDT0xPTiA9IDU5Owpjb25zdCBpbnQgJExUID0gNjA7CmNvbnN0IGludCAkRVEgPSA2MTsKY29uc3QgaW50ICRHVCA9IDYyOwpjb25zdCBpbnQgJFFVRVNUSU9OID0gNjM7CmNvbnN0IGludCAkQVQgPSA2NDsKY29uc3QgaW50ICRBID0gNjU7CmNvbnN0IGludCAkQiA9IDY2Owpjb25zdCBpbnQgJEMgPSA2NzsKY29uc3QgaW50ICREID0gNjg7CmNvbnN0IGludCAkRSA9IDY5Owpjb25zdCBpbnQgJEYgPSA3MDsKY29uc3QgaW50ICRHID0gNzE7CmNvbnN0IGludCAkSCA9IDcyOwpjb25zdCBpbnQgJEkgPSA3MzsKY29uc3QgaW50ICRKID0gNzQ7CmNvbnN0IGludCAkSyA9IDc1Owpjb25zdCBpbnQgJEwgPSA3NjsKY29uc3QgaW50ICRNID0gNzc7CmNvbnN0IGludCAkTiA9IDc4Owpjb25zdCBpbnQgJE8gPSA3OTsKY29uc3QgaW50ICRQID0gODA7CmNvbnN0IGludCAkUSA9IDgxOwpjb25zdCBpbnQgJFIgPSA4MjsKY29uc3QgaW50ICRTID0gODM7CmNvbnN0IGludCAkVCA9IDg0Owpjb25zdCBpbnQgJFUgPSA4NTsKY29uc3QgaW50ICRWID0gODY7CmNvbnN0IGludCAkVyA9IDg3Owpjb25zdCBpbnQgJFggPSA4ODsKY29uc3QgaW50ICRZID0gODk7CmNvbnN0IGludCAkWiA9IDkwOwpjb25zdCBpbnQgJE9QRU5fU1FVQVJFX0JSQUNLRVQgPSA5MTsKY29uc3QgaW50ICRCQUNLU0xBU0ggPSA5MjsKY29uc3QgaW50ICRDTE9TRV9TUVVBUkVfQlJBQ0tFVCA9IDkzOwpjb25zdCBpbnQgJENBUkVUID0gOTQ7CmNvbnN0IGludCAkXyA9IDk1Owpjb25zdCBpbnQgJEJBQ0tQSU5HID0gOTY7CmNvbnN0IGludCAkYSA9IDk3Owpjb25zdCBpbnQgJGIgPSA5ODsKY29uc3QgaW50ICRjID0gOTk7CmNvbnN0IGludCAkZCA9IDEwMDsKY29uc3QgaW50ICRlID0gMTAxOwpjb25zdCBpbnQgJGYgPSAxMDI7CmNvbnN0IGludCAkZyA9IDEwMzsKY29uc3QgaW50ICRoID0gMTA0Owpjb25zdCBpbnQgJGkgPSAxMDU7CmNvbnN0IGludCAkaiA9IDEwNjsKY29uc3QgaW50ICRrID0gMTA3Owpjb25zdCBpbnQgJGwgPSAxMDg7CmNvbnN0IGludCAkbSA9IDEwOTsKY29uc3QgaW50ICRuID0gMTEwOwpjb25zdCBpbnQgJG8gPSAxMTE7CmNvbnN0IGludCAkcCA9IDExMjsKY29uc3QgaW50ICRxID0gMTEzOwpjb25zdCBpbnQgJHIgPSAxMTQ7CmNvbnN0IGludCAkcyA9IDExNTsKY29uc3QgaW50ICR0ID0gMTE2Owpjb25zdCBpbnQgJHUgPSAxMTc7CmNvbnN0IGludCAkdiA9IDExODsKY29uc3QgaW50ICR3ID0gMTE5Owpjb25zdCBpbnQgJHggPSAxMjA7CmNvbnN0IGludCAkeSA9IDEyMTsKY29uc3QgaW50ICR6ID0gMTIyOwpjb25zdCBpbnQgJE9QRU5fQ1VSTFlfQlJBQ0tFVCA9IDEyMzsKY29uc3QgaW50ICRCQVIgPSAxMjQ7CmNvbnN0IGludCAkQ0xPU0VfQ1VSTFlfQlJBQ0tFVCA9IDEyNTsKY29uc3QgaW50ICRUSUxERSA9IDEyNjsKY29uc3QgaW50ICRERUwgPSAxMjc7CmNvbnN0IGludCAkTkJTUCA9IDE2MDsKY29uc3QgaW50ICRMUyA9IDB4MjAyODsKY29uc3QgaW50ICRQUyA9IDB4MjAyOTsKCmNvbnN0IGludCAkRklSU1RfU1VSUk9HQVRFID0gMHhkODAwOwpjb25zdCBpbnQgJExBU1RfU1VSUk9HQVRFID0gMHhkZmZmOwpjb25zdCBpbnQgJExBU1RfQ09ERV9QT0lOVCA9IDB4MTBmZmZmOwp3AE5OPAEcARQUExQUFhQUFxYUFhMZGxQcHRYWFxcYFxMTExMTExMTExMXGxQUFBoUExMTExMTExMTExMTExMTExMTExMTExMTExMlGyYXExoTExMUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUWJhgWFxgYASUkJwEicGFja2FnZTpqc19hc3Qvc3JjL2NoYXJhY3RlcnMuZGFydDtzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29sbGVjdGlvbi9saWIvc3JjL2FsZ29yaXRobXMuZGFydKYfLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAiZGFydDptYXRoIiBhcyBtYXRoOwoKaW1wb3J0ICJ1dGlscy5kYXJ0IjsKCi8vLyBSZXR1cm5zIGEgcG9zaXRpb24gb2YgdGhlIFt2YWx1ZV0gaW4gW3NvcnRlZExpc3RdLCBpZiBpdCBpcyB0aGVyZS4KLy8vCi8vLyBJZiB0aGUgbGlzdCBpc24ndCBzb3J0ZWQgYWNjb3JkaW5nIHRvIHRoZSBbY29tcGFyZV0gZnVuY3Rpb24sIHRoZSByZXN1bHQKLy8vIGlzIHVucHJlZGljdGFibGUuCi8vLwovLy8gSWYgW2NvbXBhcmVdIGlzIG9taXR0ZWQsIHRoaXMgZGVmYXVsdHMgdG8gY2FsbGluZyBbQ29tcGFyYWJsZS5jb21wYXJlVG9dIG9uCi8vLyB0aGUgb2JqZWN0cy4gSWYgYW55IG9iamVjdCBpcyBub3QgW0NvbXBhcmFibGVdLCB0aGlzIHRocm93cyBhIFtDYXN0RXJyb3JdLgovLy8KLy8vIFJldHVybnMgLTEgaWYgW3ZhbHVlXSBpcyBub3QgaW4gdGhlIGxpc3QgYnkgZGVmYXVsdC4KaW50IGJpbmFyeVNlYXJjaDxUPihMaXN0PFQ+IHNvcnRlZExpc3QsIFQgdmFsdWUsIHtpbnQgY29tcGFyZShUIGEsIFQgYil9KSB7CiAgY29tcGFyZSA/Pz0gZGVmYXVsdENvbXBhcmU8VD4oKTsKICBpbnQgbWluID0gMDsKICBpbnQgbWF4ID0gc29ydGVkTGlzdC5sZW5ndGg7CiAgd2hpbGUgKG1pbiA8IG1heCkgewogICAgaW50IG1pZCA9IG1pbiArICgobWF4IC0gbWluKSA+PiAxKTsKICAgIHZhciBlbGVtZW50ID0gc29ydGVkTGlzdFttaWRdOwogICAgaW50IGNvbXAgPSBjb21wYXJlKGVsZW1lbnQsIHZhbHVlKTsKICAgIGlmIChjb21wID09IDApIHJldHVybiBtaWQ7CiAgICBpZiAoY29tcCA8IDApIHsKICAgICAgbWluID0gbWlkICsgMTsKICAgIH0gZWxzZSB7CiAgICAgIG1heCA9IG1pZDsKICAgIH0KICB9CiAgcmV0dXJuIC0xOwp9CgovLy8gUmV0dXJucyB0aGUgZmlyc3QgcG9zaXRpb24gaW4gW3NvcnRlZExpc3RdIHRoYXQgZG9lcyBub3QgY29tcGFyZSBsZXNzIHRoYW4KLy8vIFt2YWx1ZV0uCi8vLwovLy8gSWYgdGhlIGxpc3QgaXNuJ3Qgc29ydGVkIGFjY29yZGluZyB0byB0aGUgW2NvbXBhcmVdIGZ1bmN0aW9uLCB0aGUgcmVzdWx0Ci8vLyBpcyB1bnByZWRpY3RhYmxlLgovLy8KLy8vIElmIFtjb21wYXJlXSBpcyBvbWl0dGVkLCB0aGlzIGRlZmF1bHRzIHRvIGNhbGxpbmcgW0NvbXBhcmFibGUuY29tcGFyZVRvXSBvbgovLy8gdGhlIG9iamVjdHMuIElmIGFueSBvYmplY3QgaXMgbm90IFtDb21wYXJhYmxlXSwgdGhpcyB0aHJvd3MgYSBbQ2FzdEVycm9yXS4KLy8vCi8vLyBSZXR1cm5zIFtzb3J0ZWRMaXN0Lmxlbmd0aF0gaWYgYWxsIHRoZSBpdGVtcyBpbiBbc29ydGVkTGlzdF0gY29tcGFyZSBsZXNzCi8vLyB0aGFuIFt2YWx1ZV0uCmludCBsb3dlckJvdW5kPFQ+KExpc3Q8VD4gc29ydGVkTGlzdCwgVCB2YWx1ZSwge2ludCBjb21wYXJlKFQgYSwgVCBiKX0pIHsKICBjb21wYXJlID8/PSBkZWZhdWx0Q29tcGFyZTxUPigpOwogIGludCBtaW4gPSAwOwogIGludCBtYXggPSBzb3J0ZWRMaXN0Lmxlbmd0aDsKICB3aGlsZSAobWluIDwgbWF4KSB7CiAgICBpbnQgbWlkID0gbWluICsgKChtYXggLSBtaW4pID4+IDEpOwogICAgdmFyIGVsZW1lbnQgPSBzb3J0ZWRMaXN0W21pZF07CiAgICBpbnQgY29tcCA9IGNvbXBhcmUoZWxlbWVudCwgdmFsdWUpOwogICAgaWYgKGNvbXAgPCAwKSB7CiAgICAgIG1pbiA9IG1pZCArIDE7CiAgICB9IGVsc2UgewogICAgICBtYXggPSBtaWQ7CiAgICB9CiAgfQogIHJldHVybiBtaW47Cn0KCi8vLyBTaHVmZmxlcyBhIGxpc3QgcmFuZG9tbHkuCi8vLwovLy8gQSBzdWItcmFuZ2Ugb2YgYSBsaXN0IGNhbiBiZSBzaHVmZmxlZCBieSBwcm92aWRpbmcgW3N0YXJ0XSBhbmQgW2VuZF0uCnZvaWQgc2h1ZmZsZShMaXN0IGxpc3QsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogIHZhciByYW5kb20gPSBuZXcgbWF0aC5SYW5kb20oKTsKICBpZiAoZW5kID09IG51bGwpIGVuZCA9IGxpc3QubGVuZ3RoOwogIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICB3aGlsZSAobGVuZ3RoID4gMSkgewogICAgaW50IHBvcyA9IHJhbmRvbS5uZXh0SW50KGxlbmd0aCk7CiAgICBsZW5ndGgtLTsKICAgIHZhciB0bXAxID0gbGlzdFtzdGFydCArIHBvc107CiAgICBsaXN0W3N0YXJ0ICsgcG9zXSA9IGxpc3Rbc3RhcnQgKyBsZW5ndGhdOwogICAgbGlzdFtzdGFydCArIGxlbmd0aF0gPSB0bXAxOwogIH0KfQoKLy8vIFJldmVyc2VzIGEgbGlzdCwgb3IgYSBwYXJ0IG9mIGEgbGlzdCwgaW4tcGxhY2UuCnZvaWQgcmV2ZXJzZShMaXN0IGxpc3QsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogIGlmIChlbmQgPT0gbnVsbCkgZW5kID0gbGlzdC5sZW5ndGg7CiAgX3JldmVyc2UobGlzdCwgc3RhcnQsIGVuZCk7Cn0KCi8vLyBJbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gdGhhdCBhc3N1bWVzIHZhbGlkIGFyZ3VtZW50cy4Kdm9pZCBfcmV2ZXJzZShMaXN0IGxpc3QsIGludCBzdGFydCwgaW50IGVuZCkgewogIGZvciAoaW50IGkgPSBzdGFydCwgaiA9IGVuZCAtIDE7IGkgPCBqOyBpKyssIGotLSkgewogICAgdmFyIHRtcCA9IGxpc3RbaV07CiAgICBsaXN0W2ldID0gbGlzdFtqXTsKICAgIGxpc3Rbal0gPSB0bXA7CiAgfQp9CgovLy8gU29ydCBhIGxpc3QgYmV0d2VlbiBbc3RhcnRdIChpbmNsdXNpdmUpIGFuZCBbZW5kXSAoZXhjbHVzaXZlKSB1c2luZwovLy8gaW5zZXJ0aW9uIHNvcnQuCi8vLwovLy8gSWYgW2NvbXBhcmVdIGlzIG9taXR0ZWQsIHRoaXMgZGVmYXVsdHMgdG8gY2FsbGluZyBbQ29tcGFyYWJsZS5jb21wYXJlVG9dIG9uCi8vLyB0aGUgb2JqZWN0cy4gSWYgYW55IG9iamVjdCBpcyBub3QgW0NvbXBhcmFibGVdLCB0aGlzIHRocm93cyBhIFtDYXN0RXJyb3JdLgovLy8KLy8vIEluc2VydGlvbiBzb3J0IGlzIGEgc2ltcGxlIHNvcnRpbmcgYWxnb3JpdGhtLiBGb3IgYG5gIGVsZW1lbnRzIGl0IGRvZXMgb24KLy8vIHRoZSBvcmRlciBvZiBgbiAqIGxvZyhuKWAgY29tcGFyaXNvbnMgYnV0IHVwIHRvIGBuYCBzcXVhcmVkIG1vdmVzLiBUaGUKLy8vIHNvcnRpbmcgaXMgcGVyZm9ybWVkIGluLXBsYWNlLCB3aXRob3V0IHVzaW5nIGV4dHJhIG1lbW9yeS4KLy8vCi8vLyBGb3Igc2hvcnQgbGlzdHMgdGhlIG1hbnkgbW92ZXMgaGF2ZSBsZXNzIGltcGFjdCB0aGFuIHRoZSBzaW1wbGUgYWxnb3JpdGhtLAovLy8gYW5kIGl0IGlzIG9mdGVuIHRoZSBmYXZvcmVkIHNvcnRpbmcgYWxnb3JpdGhtIGZvciBzaG9ydCBsaXN0cy4KLy8vCi8vLyBUaGlzIGluc2VydGlvbiBzb3J0IGlzIHN0YWJsZTogRXF1YWwgZWxlbWVudHMgZW5kIHVwIGluIHRoZSBzYW1lIG9yZGVyCi8vLyBhcyB0aGV5IHN0YXJ0ZWQgaW4uCnZvaWQgaW5zZXJ0aW9uU29ydDxUPihMaXN0PFQ+IGxpc3QsCiAgICB7aW50IGNvbXBhcmUoVCBhLCBUIGIpLCBpbnQgc3RhcnQ6IDAsIGludCBlbmR9KSB7CiAgLy8gSWYgdGhlIHNhbWUgbWV0aG9kIGNvdWxkIGhhdmUgYm90aCBwb3NpdGlvbmFsIGFuZCBuYW1lZCBvcHRpb25hbAogIC8vIHBhcmFtZXRlcnMsIHRoaXMgc2hvdWxkIGJlIChsaXN0LCBbc3RhcnQsIGVuZF0sIHtjb21wYXJlfSkuCiAgY29tcGFyZSA/Pz0gZGVmYXVsdENvbXBhcmU8VD4oKTsKICBlbmQgPz89IGxpc3QubGVuZ3RoOwoKICBmb3IgKGludCBwb3MgPSBzdGFydCArIDE7IHBvcyA8IGVuZDsgcG9zKyspIHsKICAgIGludCBtaW4gPSBzdGFydDsKICAgIGludCBtYXggPSBwb3M7CiAgICB2YXIgZWxlbWVudCA9IGxpc3RbcG9zXTsKICAgIHdoaWxlIChtaW4gPCBtYXgpIHsKICAgICAgaW50IG1pZCA9IG1pbiArICgobWF4IC0gbWluKSA+PiAxKTsKICAgICAgaW50IGNvbXBhcmlzb24gPSBjb21wYXJlKGVsZW1lbnQsIGxpc3RbbWlkXSk7CiAgICAgIGlmIChjb21wYXJpc29uIDwgMCkgewogICAgICAgIG1heCA9IG1pZDsKICAgICAgfSBlbHNlIHsKICAgICAgICBtaW4gPSBtaWQgKyAxOwogICAgICB9CiAgICB9CiAgICBsaXN0LnNldFJhbmdlKG1pbiArIDEsIHBvcyArIDEsIGxpc3QsIG1pbik7CiAgICBsaXN0W21pbl0gPSBlbGVtZW50OwogIH0KfQoKLy8vIExpbWl0IGJlbG93IHdoaWNoIG1lcmdlIHNvcnQgZGVmYXVsdHMgdG8gaW5zZXJ0aW9uIHNvcnQuCmNvbnN0IGludCBfTUVSR0VfU09SVF9MSU1JVCA9IDMyOwoKLy8vIFNvcnRzIGEgbGlzdCBiZXR3ZWVuIFtzdGFydF0gKGluY2x1c2l2ZSkgYW5kIFtlbmRdIChleGNsdXNpdmUpIHVzaW5nIHRoZQovLy8gbWVyZ2Ugc29ydCBhbGdvcml0aG0uCi8vLwovLy8gSWYgW2NvbXBhcmVdIGlzIG9taXR0ZWQsIHRoaXMgZGVmYXVsdHMgdG8gY2FsbGluZyBbQ29tcGFyYWJsZS5jb21wYXJlVG9dIG9uCi8vLyB0aGUgb2JqZWN0cy4gSWYgYW55IG9iamVjdCBpcyBub3QgW0NvbXBhcmFibGVdLCB0aGlzIHRocm93cyBhIFtDYXN0RXJyb3JdLgovLy8KLy8vIE1lcmdlLXNvcnRpbmcgd29ya3MgYnkgc3BsaXR0aW5nIHRoZSBqb2IgaW50byB0d28gcGFydHMsIHNvcnRpbmcgZWFjaAovLy8gcmVjdXJzaXZlbHksIGFuZCB0aGVuIG1lcmdpbmcgdGhlIHR3byBzb3J0ZWQgcGFydHMuCi8vLwovLy8gVGhpcyB0YWtlcyBvbiB0aGUgb3JkZXIgb2YgYG4gKiBsb2cobilgIGNvbXBhcmlzb25zIGFuZCBtb3ZlcyB0byBzb3J0Ci8vLyBgbmAgZWxlbWVudHMsIGJ1dCByZXF1aXJlcyBleHRyYSBzcGFjZSBvZiBhYm91dCB0aGUgc2FtZSBzaXplIGFzIHRoZSBsaXN0Ci8vLyBiZWluZyBzb3J0ZWQuCi8vLwovLy8gVGhpcyBtZXJnZSBzb3J0IGlzIHN0YWJsZTogRXF1YWwgZWxlbWVudHMgZW5kIHVwIGluIHRoZSBzYW1lIG9yZGVyCi8vLyBhcyB0aGV5IHN0YXJ0ZWQgaW4uCnZvaWQgbWVyZ2VTb3J0PFQ+KExpc3Q8VD4gbGlzdCwKICAgIHtpbnQgc3RhcnQ6IDAsIGludCBlbmQsIGludCBjb21wYXJlKFQgYSwgVCBiKX0pIHsKICBlbmQgPz89IGxpc3QubGVuZ3RoOwogIGNvbXBhcmUgPz89IGRlZmF1bHRDb21wYXJlPFQ+KCk7CgogIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICBpZiAobGVuZ3RoIDwgMikgcmV0dXJuOwogIGlmIChsZW5ndGggPCBfTUVSR0VfU09SVF9MSU1JVCkgewogICAgaW5zZXJ0aW9uU29ydChsaXN0LCBjb21wYXJlOiBjb21wYXJlLCBzdGFydDogc3RhcnQsIGVuZDogZW5kKTsKICAgIHJldHVybjsKICB9CiAgLy8gU3BlY2lhbCBjYXNlIHRoZSBmaXJzdCBzcGxpdCBpbnN0ZWFkIG9mIGRpcmVjdGx5IGNhbGxpbmcKICAvLyBfbWVyZ2VTb3J0LCBiZWNhdXNlIHRoZSBfbWVyZ2VTb3J0IHJlcXVpcmVzIGl0cyB0YXJnZXQgdG8KICAvLyBiZSBkaWZmZXJlbnQgZnJvbSBpdHMgc291cmNlLCBhbmQgaXQgcmVxdWlyZXMgZXh0cmEgc3BhY2UKICAvLyBvZiB0aGUgc2FtZSBzaXplIGFzIHRoZSBsaXN0IHRvIHNvcnQuCiAgLy8gVGhpcyBzcGxpdCBhbGxvd3MgdXMgdG8gaGF2ZSBvbmx5IGhhbGYgYXMgbXVjaCBleHRyYSBzcGFjZSwKICAvLyBhbmQgaXQgZW5kcyB1cCBpbiB0aGUgb3JpZ2luYWwgcGxhY2UuCiAgaW50IG1pZGRsZSA9IHN0YXJ0ICsgKChlbmQgLSBzdGFydCkgPj4gMSk7CiAgaW50IGZpcnN0TGVuZ3RoID0gbWlkZGxlIC0gc3RhcnQ7CiAgaW50IHNlY29uZExlbmd0aCA9IGVuZCAtIG1pZGRsZTsKICAvLyBzZWNvbmRMZW5ndGggaXMgYWx3YXlzIHRoZSBzYW1lIGFzIGZpcnN0TGVuZ3RoLCBvciBvbmUgZ3JlYXRlci4KICB2YXIgc2NyYXRjaFNwYWNlID0gbmV3IExpc3Q8VD4oc2Vjb25kTGVuZ3RoKTsKICBfbWVyZ2VTb3J0KGxpc3QsIGNvbXBhcmUsIG1pZGRsZSwgZW5kLCBzY3JhdGNoU3BhY2UsIDApOwogIGludCBmaXJzdFRhcmdldCA9IGVuZCAtIGZpcnN0TGVuZ3RoOwogIF9tZXJnZVNvcnQobGlzdCwgY29tcGFyZSwgc3RhcnQsIG1pZGRsZSwgbGlzdCwgZmlyc3RUYXJnZXQpOwogIF9tZXJnZShjb21wYXJlLCBsaXN0LCBmaXJzdFRhcmdldCwgZW5kLCBzY3JhdGNoU3BhY2UsIDAsIHNlY29uZExlbmd0aCwgbGlzdCwKICAgICAgc3RhcnQpOwp9CgovLy8gUGVyZm9ybXMgYW4gaW5zZXJ0aW9uIHNvcnQgaW50byBhIHBvdGVudGlhbGx5IGRpZmZlcmVudCBsaXN0IHRoYW4gdGhlCi8vLyBvbmUgY29udGFpbmluZyB0aGUgb3JpZ2luYWwgdmFsdWVzLgovLy8KLy8vIEl0IHdpbGwgd29yayBpbi1wbGFjZSBhcyB3ZWxsLgp2b2lkIF9tb3ZpbmdJbnNlcnRpb25Tb3J0PFQ+KExpc3Q8VD4gbGlzdCwgaW50IGNvbXBhcmUoVCBhLCBUIGIpLCBpbnQgc3RhcnQsCiAgICBpbnQgZW5kLCBMaXN0PFQ+IHRhcmdldCwgaW50IHRhcmdldE9mZnNldCkgewogIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICBpZiAobGVuZ3RoID09IDApIHJldHVybjsKICB0YXJnZXRbdGFyZ2V0T2Zmc2V0XSA9IGxpc3Rbc3RhcnRdOwogIGZvciAoaW50IGkgPSAxOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgIHZhciBlbGVtZW50ID0gbGlzdFtzdGFydCArIGldOwogICAgaW50IG1pbiA9IHRhcmdldE9mZnNldDsKICAgIGludCBtYXggPSB0YXJnZXRPZmZzZXQgKyBpOwogICAgd2hpbGUgKG1pbiA8IG1heCkgewogICAgICBpbnQgbWlkID0gbWluICsgKChtYXggLSBtaW4pID4+IDEpOwogICAgICBpZiAoY29tcGFyZShlbGVtZW50LCB0YXJnZXRbbWlkXSkgPCAwKSB7CiAgICAgICAgbWF4ID0gbWlkOwogICAgICB9IGVsc2UgewogICAgICAgIG1pbiA9IG1pZCArIDE7CiAgICAgIH0KICAgIH0KICAgIHRhcmdldC5zZXRSYW5nZShtaW4gKyAxLCB0YXJnZXRPZmZzZXQgKyBpICsgMSwgdGFyZ2V0LCBtaW4pOwogICAgdGFyZ2V0W21pbl0gPSBlbGVtZW50OwogIH0KfQoKLy8vIFNvcnRzIFtsaXN0XSBmcm9tIFtzdGFydF0gdG8gW2VuZF0gaW50byBbdGFyZ2V0XSBhdCBbdGFyZ2V0T2Zmc2V0XS4KLy8vCi8vLyBUaGUgYHRhcmdldGAgbGlzdCBtdXN0IGJlIGFibGUgdG8gY29udGFpbiB0aGUgcmFuZ2UgZnJvbSBgc3RhcnRgIHRvIGBlbmRgCi8vLyBhZnRlciBgdGFyZ2V0T2Zmc2V0YC4KLy8vCi8vLyBBbGxvd3MgdGFyZ2V0IHRvIGJlIHRoZSBzYW1lIGxpc3QgYXMgW2xpc3RdLCBhcyBsb25nIGFzIGl0J3Mgbm90Ci8vLyBvdmVybGFwcGluZyB0aGUgYHN0YXJ0Li5lbmRgIHJhbmdlLgp2b2lkIF9tZXJnZVNvcnQ8VD4oTGlzdDxUPiBsaXN0LCBpbnQgY29tcGFyZShUIGEsIFQgYiksIGludCBzdGFydCwgaW50IGVuZCwKICAgIExpc3Q8VD4gdGFyZ2V0LCBpbnQgdGFyZ2V0T2Zmc2V0KSB7CiAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogIGlmIChsZW5ndGggPCBfTUVSR0VfU09SVF9MSU1JVCkgewogICAgX21vdmluZ0luc2VydGlvblNvcnQobGlzdCwgY29tcGFyZSwgc3RhcnQsIGVuZCwgdGFyZ2V0LCB0YXJnZXRPZmZzZXQpOwogICAgcmV0dXJuOwogIH0KICBpbnQgbWlkZGxlID0gc3RhcnQgKyAobGVuZ3RoID4+IDEpOwogIGludCBmaXJzdExlbmd0aCA9IG1pZGRsZSAtIHN0YXJ0OwogIGludCBzZWNvbmRMZW5ndGggPSBlbmQgLSBtaWRkbGU7CiAgLy8gSGVyZSBzZWNvbmRMZW5ndGggPj0gZmlyc3RMZW5ndGggKGRpZmZlcnMgYnkgYXQgbW9zdCBvbmUpLgogIGludCB0YXJnZXRNaWRkbGUgPSB0YXJnZXRPZmZzZXQgKyBmaXJzdExlbmd0aDsKICAvLyBTb3J0IHRoZSBzZWNvbmQgaGFsZiBpbnRvIHRoZSBlbmQgb2YgdGhlIHRhcmdldCBhcmVhLgogIF9tZXJnZVNvcnQobGlzdCwgY29tcGFyZSwgbWlkZGxlLCBlbmQsIHRhcmdldCwgdGFyZ2V0TWlkZGxlKTsKICAvLyBTb3J0IHRoZSBmaXJzdCBoYWxmIGludG8gdGhlIGVuZCBvZiB0aGUgc291cmNlIGFyZWEuCiAgX21lcmdlU29ydChsaXN0LCBjb21wYXJlLCBzdGFydCwgbWlkZGxlLCBsaXN0LCBtaWRkbGUpOwogIC8vIE1lcmdlIHRoZSB0d28gcGFydHMgaW50byB0aGUgdGFyZ2V0IGFyZWEuCiAgX21lcmdlKGNvbXBhcmUsIGxpc3QsIG1pZGRsZSwgbWlkZGxlICsgZmlyc3RMZW5ndGgsIHRhcmdldCwgdGFyZ2V0TWlkZGxlLAogICAgICB0YXJnZXRNaWRkbGUgKyBzZWNvbmRMZW5ndGgsIHRhcmdldCwgdGFyZ2V0T2Zmc2V0KTsKfQoKLy8vIE1lcmdlcyB0d28gbGlzdHMgaW50byBhIHRhcmdldCBsaXN0LgovLy8KLy8vIE9uZSBvZiB0aGUgaW5wdXQgbGlzdHMgbWF5IGJlIHBvc2l0aW9uZWQgYXQgdGhlIGVuZCBvZiB0aGUgdGFyZ2V0Ci8vLyBsaXN0LgovLy8KLy8vIEZvciBlcXVhbCBvYmplY3QsIGVsZW1lbnRzIGZyb20gW2ZpcnN0TGlzdF0gYXJlIGFsd2F5cyBwcmVmZXJyZWQuCi8vLyBUaGlzIGFsbG93cyB0aGUgbWVyZ2UgdG8gYmUgc3RhYmxlIGlmIHRoZSBmaXJzdCBsaXN0IGNvbnRhaW5zIGVsZW1lbnRzCi8vLyB0aGF0IHN0YXJ0ZWQgb3V0IGVhcmxpZXIgdGhhbiB0aGUgb25lcyBpbiBbc2Vjb25kTGlzdF0Kdm9pZCBfbWVyZ2U8VD4oCiAgICBpbnQgY29tcGFyZShUIGEsIFQgYiksCiAgICBMaXN0PFQ+IGZpcnN0TGlzdCwKICAgIGludCBmaXJzdFN0YXJ0LAogICAgaW50IGZpcnN0RW5kLAogICAgTGlzdDxUPiBzZWNvbmRMaXN0LAogICAgaW50IHNlY29uZFN0YXJ0LAogICAgaW50IHNlY29uZEVuZCwKICAgIExpc3Q8VD4gdGFyZ2V0LAogICAgaW50IHRhcmdldE9mZnNldCkgewogIC8vIE5vIGVtcHR5IGxpc3RzIHJlYWNoZXMgaGVyZS4KICBhc3NlcnQoZmlyc3RTdGFydCA8IGZpcnN0RW5kKTsKICBhc3NlcnQoc2Vjb25kU3RhcnQgPCBzZWNvbmRFbmQpOwogIGludCBjdXJzb3IxID0gZmlyc3RTdGFydDsKICBpbnQgY3Vyc29yMiA9IHNlY29uZFN0YXJ0OwogIHZhciBmaXJzdEVsZW1lbnQgPSBmaXJzdExpc3RbY3Vyc29yMSsrXTsKICB2YXIgc2Vjb25kRWxlbWVudCA9IHNlY29uZExpc3RbY3Vyc29yMisrXTsKICB3aGlsZSAodHJ1ZSkgewogICAgaWYgKGNvbXBhcmUoZmlyc3RFbGVtZW50LCBzZWNvbmRFbGVtZW50KSA8PSAwKSB7CiAgICAgIHRhcmdldFt0YXJnZXRPZmZzZXQrK10gPSBmaXJzdEVsZW1lbnQ7CiAgICAgIGlmIChjdXJzb3IxID09IGZpcnN0RW5kKSBicmVhazsgLy8gRmx1c2hpbmcgc2Vjb25kIGxpc3QgYWZ0ZXIgbG9vcC4KICAgICAgZmlyc3RFbGVtZW50ID0gZmlyc3RMaXN0W2N1cnNvcjErK107CiAgICB9IGVsc2UgewogICAgICB0YXJnZXRbdGFyZ2V0T2Zmc2V0KytdID0gc2Vjb25kRWxlbWVudDsKICAgICAgaWYgKGN1cnNvcjIgIT0gc2Vjb25kRW5kKSB7CiAgICAgICAgc2Vjb25kRWxlbWVudCA9IHNlY29uZExpc3RbY3Vyc29yMisrXTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICAvLyBTZWNvbmQgbGlzdCBlbXB0aWVzIGZpcnN0LiBGbHVzaGluZyBmaXJzdCBsaXN0IGhlcmUuCiAgICAgIHRhcmdldFt0YXJnZXRPZmZzZXQrK10gPSBmaXJzdEVsZW1lbnQ7CiAgICAgIHRhcmdldC5zZXRSYW5nZSh0YXJnZXRPZmZzZXQsIHRhcmdldE9mZnNldCArIChmaXJzdEVuZCAtIGN1cnNvcjEpLAogICAgICAgICAgZmlyc3RMaXN0LCBjdXJzb3IxKTsKICAgICAgcmV0dXJuOwogICAgfQogIH0KICAvLyBGaXJzdCBsaXN0IGVtcHRpZXMgZmlyc3QuIFJlYWNoZWQgYnkgYnJlYWsgYWJvdmUuCiAgdGFyZ2V0W3RhcmdldE9mZnNldCsrXSA9IHNlY29uZEVsZW1lbnQ7CiAgdGFyZ2V0LnNldFJhbmdlKAogICAgICB0YXJnZXRPZmZzZXQsIHRhcmdldE9mZnNldCArIChzZWNvbmRFbmQgLSBjdXJzb3IyKSwgc2Vjb25kTGlzdCwgY3Vyc29yMik7Cn0KgR0ATk48ARwBFQFHBE0WBFBPBDlMIw8fFigjKB8UFQ0RBgQNAgFPDQRNFgRQTwROEkojDx8WKCMoFBUNEQYEDgIBHgRKNCImHBcmDiIuIQQCATQ0Jh4CATsvNhcXEwQCAUgUBFBPBE5LPwRPQwRLGCQ2RkEjFwEwFRMdGCo0HBMPFwgGMBkEAgE9IgFNGgRQTwRKOARKThIERxggNhcjARwaJEMMBD4/PytBKy0kI0UwOyc/Tw4CAUooBCNNMRwbJiUjHCAYKi8TDxcIBkEbBAIBSAROGgRFKEwoHCRLDAQmJCNAMTtAOjovTDoCASkERgoERks7EBsXFBIYFRMUGCIhIxwdKy0RNS1KKw0uIi8SCD4tSR8OBgQ3KhNQAgEmcGFja2FnZTpjb2xsZWN0aW9uL3NyYy9hbGdvcml0aG1zLmRhcnRCc2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbGxlY3Rpb24vbGliL3NyYy9jYW5vbmljYWxpemVkX21hcC5kYXJ0lVkvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nOwoKaW1wb3J0ICd1dGlscy5kYXJ0JzsKCnR5cGVkZWYgQyBfQ2Fub25pY2FsaXplPEMsIEs+KEsga2V5KTsKCnR5cGVkZWYgYm9vbCBfSXNWYWxpZEtleShPYmplY3Qga2V5KTsKCi8vLyBBIG1hcCB3aG9zZSBrZXlzIGFyZSBjb252ZXJ0ZWQgdG8gY2Fub25pY2FsIHZhbHVlcyBvZiB0eXBlIGBDYC4KLy8vCi8vLyBUaGlzIGlzIHVzZWZ1bCBmb3IgdXNpbmcgY2FzZS1pbnNlbnNpdGl2ZSBTdHJpbmcga2V5cywgZm9yIGV4YW1wbGUuIEl0J3MKLy8vIG1vcmUgZWZmaWNpZW50IHRoYW4gYSBbTGlua2VkSGFzaE1hcF0gd2l0aCBhIGN1c3RvbSBlcXVhbGl0eSBvcGVyYXRvcgovLy8gYmVjYXVzZSBpdCBvbmx5IGNhbm9uaWNhbGl6ZXMgZWFjaCBrZXkgb25jZSwgcmF0aGVyIHRoYW4gZG9pbmcgc28gZm9yIGVhY2gKLy8vIGNvbXBhcmlzb24uCi8vLwovLy8gQnkgZGVmYXVsdCwgYG51bGxgIGlzIGFsbG93ZWQgYXMgYSBrZXkuIEl0IGNhbiBiZSBmb3JiaWRkZW4gdmlhIHRoZQovLy8gYGlzVmFsaWRLZXlgIHBhcmFtZXRlci4KY2xhc3MgQ2Fub25pY2FsaXplZE1hcDxDLCBLLCBWPiBpbXBsZW1lbnRzIE1hcDxLLCBWPiB7CiAgZmluYWwgX0Nhbm9uaWNhbGl6ZTxDLCBLPiBfY2Fub25pY2FsaXplOwoKICBmaW5hbCBfSXNWYWxpZEtleSBfaXNWYWxpZEtleUZuOwoKICBmaW5hbCBfYmFzZSA9IG5ldyBNYXA8QywgUGFpcjxLLCBWPj4oKTsKCiAgLy8vIENyZWF0ZXMgYW4gZW1wdHkgY2Fub25pY2FsaXplZCBtYXAuCiAgLy8vCiAgLy8vIFRoZSBbY2Fub25pY2FsaXplXSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHRoZSBjYW5vbmljYWwgdmFsdWUgZm9yIHRoZQogIC8vLyBnaXZlbiBrZXkuIEtleXMgd2l0aCB0aGUgc2FtZSBjYW5vbmljYWwgdmFsdWUgYXJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudC4KICAvLy8KICAvLy8gVGhlIFtpc1ZhbGlkS2V5XSBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgW2Nhbm9uaWNhbGl6ZV0gZm9yCiAgLy8vIG1ldGhvZHMgdGhhdCB0YWtlIGFyYml0cmFyeSBvYmplY3RzLiBJdCBjYW4gYmUgdXNlZCB0byBmaWx0ZXIgb3V0IGtleXMKICAvLy8gdGhhdCBjYW4ndCBiZSBjYW5vbmljYWxpemVkLgogIENhbm9uaWNhbGl6ZWRNYXAoQyBjYW5vbmljYWxpemUoSyBrZXkpLCB7Ym9vbCBpc1ZhbGlkS2V5KE9iamVjdCBrZXkpfSkKICAgICAgOiBfY2Fub25pY2FsaXplID0gY2Fub25pY2FsaXplLAogICAgICAgIF9pc1ZhbGlkS2V5Rm4gPSBpc1ZhbGlkS2V5OwoKICAvLy8gQ3JlYXRlcyBhIGNhbm9uaWNhbGl6ZWQgbWFwIHRoYXQgaXMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUga2V5L3ZhbHVlIHBhaXJzCiAgLy8vIG9mIFtvdGhlcl0uCiAgLy8vCiAgLy8vIFRoZSBbY2Fub25pY2FsaXplXSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHRoZSBjYW5vbmljYWwgdmFsdWUgZm9yIHRoZQogIC8vLyBnaXZlbiBrZXkuIEtleXMgd2l0aCB0aGUgc2FtZSBjYW5vbmljYWwgdmFsdWUgYXJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudC4KICAvLy8KICAvLy8gVGhlIFtpc1ZhbGlkS2V5XSBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgW2Nhbm9uaWNhbGl6ZV0gZm9yCiAgLy8vIG1ldGhvZHMgdGhhdCB0YWtlIGFyYml0cmFyeSBvYmplY3RzLiBJdCBjYW4gYmUgdXNlZCB0byBmaWx0ZXIgb3V0IGtleXMKICAvLy8gdGhhdCBjYW4ndCBiZSBjYW5vbmljYWxpemVkLgogIENhbm9uaWNhbGl6ZWRNYXAuZnJvbShNYXA8SywgVj4gb3RoZXIsIEMgY2Fub25pY2FsaXplKEsga2V5KSwKICAgICAge2Jvb2wgaXNWYWxpZEtleShPYmplY3Qga2V5KX0pCiAgICAgIDogX2Nhbm9uaWNhbGl6ZSA9IGNhbm9uaWNhbGl6ZSwKICAgICAgICBfaXNWYWxpZEtleUZuID0gaXNWYWxpZEtleSB7CiAgICBhZGRBbGwob3RoZXIpOwogIH0KCiAgViBvcGVyYXRvciBbXShPYmplY3Qga2V5KSB7CiAgICBpZiAoIV9pc1ZhbGlkS2V5KGtleSkpIHJldHVybiBudWxsOwogICAgdmFyIHBhaXIgPSBfYmFzZVtfY2Fub25pY2FsaXplKGtleSBhcyBLKV07CiAgICByZXR1cm4gcGFpciA9PSBudWxsID8gbnVsbCA6IHBhaXIubGFzdDsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KEsga2V5LCBWIHZhbHVlKSB7CiAgICBpZiAoIV9pc1ZhbGlkS2V5KGtleSkpIHJldHVybjsKICAgIF9iYXNlW19jYW5vbmljYWxpemUoa2V5KV0gPSBuZXcgUGFpcihrZXksIHZhbHVlKTsKICB9CgogIHZvaWQgYWRkQWxsKE1hcDxLLCBWPiBvdGhlcikgewogICAgb3RoZXIuZm9yRWFjaCgoa2V5LCB2YWx1ZSkgPT4gdGhpc1trZXldID0gdmFsdWUpOwogIH0KCiAgdm9pZCBhZGRFbnRyaWVzKEl0ZXJhYmxlPE1hcEVudHJ5PEssIFY+PiBlbnRyaWVzKSA9PgogICAgICBfYmFzZS5hZGRFbnRyaWVzKGVudHJpZXMubWFwKAogICAgICAgICAgKGUpID0+IG5ldyBNYXBFbnRyeShfY2Fub25pY2FsaXplKGUua2V5KSwgbmV3IFBhaXIoZS5rZXksIGUudmFsdWUpKSkpOwoKICBNYXA8SzIsIFYyPiBjYXN0PEsyLCBWMj4oKSA9PiBfYmFzZS5jYXN0PEsyLCBWMj4oKTsKCiAgdm9pZCBjbGVhcigpIHsKICAgIF9iYXNlLmNsZWFyKCk7CiAgfQoKICBib29sIGNvbnRhaW5zS2V5KE9iamVjdCBrZXkpIHsKICAgIGlmICghX2lzVmFsaWRLZXkoa2V5KSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIF9iYXNlLmNvbnRhaW5zS2V5KF9jYW5vbmljYWxpemUoa2V5IGFzIEspKTsKICB9CgogIGJvb2wgY29udGFpbnNWYWx1ZShPYmplY3QgdmFsdWUpID0+CiAgICAgIF9iYXNlLnZhbHVlcy5hbnkoKHBhaXIpID0+IHBhaXIubGFzdCA9PSB2YWx1ZSk7CgogIEl0ZXJhYmxlPE1hcEVudHJ5PEssIFY+PiBnZXQgZW50cmllcyA9PgogICAgICBfYmFzZS5lbnRyaWVzLm1hcCgoZSkgPT4gbmV3IE1hcEVudHJ5KGUudmFsdWUuZmlyc3QsIGUudmFsdWUubGFzdCkpOwoKICB2b2lkIGZvckVhY2godm9pZCBmKEsga2V5LCBWIHZhbHVlKSkgewogICAgX2Jhc2UuZm9yRWFjaCgoa2V5LCBwYWlyKSA9PiBmKHBhaXIuZmlyc3QsIHBhaXIubGFzdCkpOwogIH0KCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfYmFzZS5pc0VtcHR5OwoKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9iYXNlLmlzTm90RW1wdHk7CgogIEl0ZXJhYmxlPEs+IGdldCBrZXlzID0+IF9iYXNlLnZhbHVlcy5tYXAoKHBhaXIpID0+IHBhaXIuZmlyc3QpOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfYmFzZS5sZW5ndGg7CgogIE1hcDxLMiwgVjI+IG1hcDxLMiwgVjI+KE1hcEVudHJ5PEsyLCBWMj4gdHJhbnNmb3JtKEsga2V5LCBWIHZhbHVlKSkgPT4KICAgICAgX2Jhc2UubWFwKChfLCBwYWlyKSA9PiB0cmFuc2Zvcm0ocGFpci5maXJzdCwgcGFpci5sYXN0KSk7CgogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSkgewogICAgcmV0dXJuIF9iYXNlCiAgICAgICAgLnB1dElmQWJzZW50KF9jYW5vbmljYWxpemUoa2V5KSwgKCkgPT4gbmV3IFBhaXIoa2V5LCBpZkFic2VudCgpKSkKICAgICAgICAubGFzdDsKICB9CgogIFYgcmVtb3ZlKE9iamVjdCBrZXkpIHsKICAgIGlmICghX2lzVmFsaWRLZXkoa2V5KSkgcmV0dXJuIG51bGw7CiAgICB2YXIgcGFpciA9IF9iYXNlLnJlbW92ZShfY2Fub25pY2FsaXplKGtleSBhcyBLKSk7CiAgICByZXR1cm4gcGFpciA9PSBudWxsID8gbnVsbCA6IHBhaXIubGFzdDsKICB9CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEsga2V5LCBWIHZhbHVlKSkgPT4KICAgICAgX2Jhc2UucmVtb3ZlV2hlcmUoKF8sIHBhaXIpID0+IHRlc3QocGFpci5maXJzdCwgcGFpci5sYXN0KSk7CgogIEBkZXByZWNhdGVkCiAgTWFwPEsyLCBWMj4gcmV0eXBlPEsyLCBWMj4oKSA9PiBjYXN0PEsyLCBWMj4oKTsKCiAgViB1cGRhdGUoSyBrZXksIFYgdXBkYXRlKFYgdmFsdWUpLCB7ViBpZkFic2VudCgpfSkgPT4gX2Jhc2UKICAgICAgLnVwZGF0ZShfY2Fub25pY2FsaXplKGtleSksIChwYWlyKSA9PiBuZXcgUGFpcihrZXksIHVwZGF0ZShwYWlyLmxhc3QpKSwKICAgICAgICAgIGlmQWJzZW50OiBpZkFic2VudCA9PSBudWxsID8gbnVsbCA6ICgpID0+IG5ldyBQYWlyKGtleSwgaWZBYnNlbnQoKSkpCiAgICAgIC5sYXN0OwoKICB2b2lkIHVwZGF0ZUFsbChWIHVwZGF0ZShLIGtleSwgViB2YWx1ZSkpID0+IF9iYXNlLnVwZGF0ZUFsbCgKICAgICAgKF8sIHBhaXIpID0+IG5ldyBQYWlyKHBhaXIuZmlyc3QsIHVwZGF0ZShwYWlyLmZpcnN0LCBwYWlyLmxhc3QpKSk7CgogIEl0ZXJhYmxlPFY+IGdldCB2YWx1ZXMgPT4gX2Jhc2UudmFsdWVzLm1hcCgocGFpcikgPT4gcGFpci5sYXN0KTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgLy8gRGV0ZWN0IHRvU3RyaW5nKCkgY3ljbGVzLgogICAgaWYgKF9pc1RvU3RyaW5nVmlzaXRpbmcodGhpcykpIHsKICAgICAgcmV0dXJuICd7Li4ufSc7CiAgICB9CgogICAgdmFyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHRyeSB7CiAgICAgIF90b1N0cmluZ1Zpc2l0aW5nLmFkZCh0aGlzKTsKICAgICAgcmVzdWx0LndyaXRlKCd7Jyk7CiAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgICBmb3JFYWNoKChrLCB2KSB7CiAgICAgICAgaWYgKCFmaXJzdCkgewogICAgICAgICAgcmVzdWx0LndyaXRlKCcsICcpOwogICAgICAgIH0KICAgICAgICBmaXJzdCA9IGZhbHNlOwogICAgICAgIHJlc3VsdC53cml0ZSgnJGs6ICR2Jyk7CiAgICAgIH0pOwogICAgICByZXN1bHQud3JpdGUoJ30nKTsKICAgIH0gZmluYWxseSB7CiAgICAgIGFzc2VydChpZGVudGljYWwoX3RvU3RyaW5nVmlzaXRpbmcubGFzdCwgdGhpcykpOwogICAgICBfdG9TdHJpbmdWaXNpdGluZy5yZW1vdmVMYXN0KCk7CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogIH0KCiAgYm9vbCBfaXNWYWxpZEtleShPYmplY3Qga2V5KSA9PgogICAgICAoa2V5ID09IG51bGwgfHwga2V5IGlzIEspICYmCiAgICAgIChfaXNWYWxpZEtleUZuID09IG51bGwgfHwgX2lzVmFsaWRLZXlGbihrZXkpKTsKfQoKLy8vIEEgY29sbGVjdGlvbiB1c2VkIHRvIGlkZW50aWZ5IGN5Y2xpYyBtYXBzIGR1cmluZyB0b1N0cmluZygpIGNhbGxzLgpmaW5hbCBMaXN0IF90b1N0cmluZ1Zpc2l0aW5nID0gW107CgovLy8gQ2hlY2sgaWYgd2UgYXJlIGN1cnJlbnRseSB2aXNpdGluZyBgb2AgaW4gYSB0b1N0cmluZygpIGNhbGwuCmJvb2wgX2lzVG9TdHJpbmdWaXNpdGluZyhvKSA9PiBfdG9TdHJpbmdWaXNpdGluZy5hbnkoKGUpID0+IGlkZW50aWNhbChvLCBlKSk7CoCuAE5OPAEaARUBJgEmAUQETUpPEARIHDcrASMBKgEqBkxPBkxNI0kmJAFPEgZMTwZMTSNAJSYlEwQBHigvLAQBJiM2BAEhNgQBNyRRATYBERMEASEpNwQBJjYBKksBKTwEASUBKwFCASIBSUABJxFKDwQBGSg2LAQBMUMBDjIBPk5PDQE/SQFDARYhJRYGASUKIxkZFxYeChcgChkQNyYGAR4EASIjNQIBRyMBQU4BLXBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvY2Fub25pY2FsaXplZF9tYXAuZGFydFRzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29sbGVjdGlvbi9saWIvc3JjL2NvbWJpbmVkX3dyYXBwZXJzL2NvbWJpbmVkX2l0ZXJhYmxlLmRhcnSH2S8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbic7CgovLy8gQSB2aWV3IG9mIHNldmVyYWwgaXRlcmFibGVzIGNvbWJpbmVkIHNlcXVlbnRpYWxseSBpbnRvIGEgc2luZ2xlIGl0ZXJhYmxlLgovLy8KLy8vIEFsbCBtZXRob2RzIGFuZCBhY2Nlc3NvcnMgdHJlYXQgdGhlIFtDb21iaW5lZEl0ZXJhYmxlVmlld10gYXMgaWYgaXQgd2VyZSBhCi8vLyBzaW5nbGUgY29uY2F0ZW5hdGVkIGl0ZXJhYmxlLCBidXQgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24KLy8vIGxhemlseSBhY2Nlc3NpbmcgaW5kaXZpZHVhbCBpdGVyYWJsZSBpbnN0YW5jZXMuIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUKLy8vIHVuZGVybHlpbmcgaXRlcmFibGVzIGNoYW5nZSwgdGhlIFtDb21iaW5lZEl0ZXJhYmxlVmlld10gd2lsbCByZWZsZWN0IHRob3NlCi8vLyBjaGFuZ2VzLgpjbGFzcyBDb21iaW5lZEl0ZXJhYmxlVmlldzxUPiBleHRlbmRzIEl0ZXJhYmxlQmFzZTxUPiB7CiAgLy8vIFRoZSBpdGVyYWJsZXMgdGhhdCB0aGlzIGNvbWJpbmVzLgogIGZpbmFsIEl0ZXJhYmxlPEl0ZXJhYmxlPFQ+PiBfaXRlcmFibGVzOwoKICAvLy8gQ3JlYXRlcyBhIGNvbWJpbmVkIHZpZXcgb2YgW2l0ZXJhYmxlc10uCiAgY29uc3QgQ29tYmluZWRJdGVyYWJsZVZpZXcodGhpcy5faXRlcmFibGVzKTsKCiAgSXRlcmF0b3I8VD4gZ2V0IGl0ZXJhdG9yID0+CiAgICAgIG5ldyBfQ29tYmluZWRJdGVyYXRvcjxUPihfaXRlcmFibGVzLm1hcCgoaSkgPT4gaS5pdGVyYXRvcikuaXRlcmF0b3IpOwoKICAvLyBTcGVjaWFsIGNhc2VkIGNvbnRhaW5zL2lzRW1wdHkvbGVuZ3RoIHNpbmNlIG1hbnkgaXRlcmFibGVzIGhhdmUgYW4KICAvLyBlZmZpY2llbnQgaW1wbGVtZW50YXRpb24gaW5zdGVhZCBvZiBydW5uaW5nIHRocm91Z2ggdGhlIGVudGlyZSBpdGVyYXRvci4KCiAgYm9vbCBjb250YWlucyhPYmplY3QgZWxlbWVudCkgPT4gX2l0ZXJhYmxlcy5hbnkoKGkpID0+IGkuY29udGFpbnMoZWxlbWVudCkpOwoKICBib29sIGdldCBpc0VtcHR5ID0+IF9pdGVyYWJsZXMuZXZlcnkoKGkpID0+IGkuaXNFbXB0eSk7CgogIGludCBnZXQgbGVuZ3RoID0+IF9pdGVyYWJsZXMuZm9sZCgwLCAobGVuZ3RoLCBpKSA9PiBsZW5ndGggKyBpLmxlbmd0aCk7Cn0KCi8vLyBUaGUgaXRlcmF0b3IgZm9yIFtDb21iaW5lZEl0ZXJhYmxlVmlld10uCi8vLwovLy8gVGhpcyBtb3ZlcyB0aHJvdWdoIGVhY2ggaXRlcmFibGUncyBpdGVyYXRvcnMgaW4gc2VxdWVuY2UuCmNsYXNzIF9Db21iaW5lZEl0ZXJhdG9yPFQ+IGltcGxlbWVudHMgSXRlcmF0b3I8VD4gewogIC8vLyBUaGUgaXRlcmF0b3JzIHRoYXQgdGhpcyBjb21iaW5lcy4KICAvLy8KICAvLy8gQmVjYXVzZSB0aGlzIGNvbWVzIGZyb20gYSBjYWxsIHRvIFtJdGVyYWJsZS5tYXBdLCBpdCdzIGxhenkgYW5kIHdpbGwKICAvLy8gYXZvaWQgaW5zdGFudGlhdGluZyB1bm5lY2Vzc2FyeSBpdGVyYXRvcnMuCiAgZmluYWwgSXRlcmF0b3I8SXRlcmF0b3I8VD4+IF9pdGVyYXRvcnM7CgogIF9Db21iaW5lZEl0ZXJhdG9yKHRoaXMuX2l0ZXJhdG9ycyk7CgogIFQgZ2V0IGN1cnJlbnQgPT4gX2l0ZXJhdG9ycy5jdXJyZW50Py5jdXJyZW50OwoKICBib29sIG1vdmVOZXh0KCkgewogICAgdmFyIGN1cnJlbnQgPSBfaXRlcmF0b3JzLmN1cnJlbnQ7CiAgICBpZiAoY3VycmVudCAhPSBudWxsICYmIGN1cnJlbnQubW92ZU5leHQoKSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBfaXRlcmF0b3JzLm1vdmVOZXh0KCkgJiYgbW92ZU5leHQoKTsKICB9Cn0KOQBOTjwBGgFOBE9QS08NOCgqAS4vAR5MAUhOAU8BOgFKAgEtBD40KAZLMSoBJgEwARQmMRMGMAQCAT9wYWNrYWdlOmNvbGxlY3Rpb24vc3JjL2NvbWJpbmVkX3dyYXBwZXJzL2NvbWJpbmVkX2l0ZXJhYmxlLmRhcnRQc2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbGxlY3Rpb24vbGliL3NyYy9jb21iaW5lZF93cmFwcGVycy9jb21iaW5lZF9saXN0LmRhcnSHKS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbic7CgovLy8gQSB2aWV3IG9mIHNldmVyYWwgbGlzdHMgY29tYmluZWQgaW50byBhIHNpbmdsZSBsaXN0LgovLy8KLy8vIEFsbCBtZXRob2RzIGFuZCBhY2Nlc3NvcnMgdHJlYXQgdGhlIFtDb21iaW5lZExpc3RWaWV3XSBsaXN0IGFzIGlmIGl0IHdlcmUgYQovLy8gc2luZ2xlIGNvbmNhdGVuYXRlZCBsaXN0LCBidXQgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24KLy8vIGxhemlseSBhY2Nlc3NpbmcgaW5kaXZpZHVhbCBsaXN0IGluc3RhbmNlcy4gVGhpcyBtZWFucyB0aGF0IGlmIHRoZQovLy8gdW5kZXJseWluZyBsaXN0cyBjaGFuZ2UsIHRoZSBbQ29tYmluZWRMaXN0Vmlld10gd2lsbCByZWZsZWN0IHRob3NlIGNoYW5nZXMuCi8vLwovLy8gVGhlIGluZGV4IG9wZXJhdG9yIChgW11gKSBhbmQgW2xlbmd0aF0gcHJvcGVydHkgb2YgYSBbQ29tYmluZWRMaXN0Vmlld10gYXJlCi8vLyBib3RoIGBPKGxpc3RzKWAgcmF0aGVyIHRoYW4gYE8oMSlgLiBBIFtDb21iaW5lZExpc3RWaWV3XSBpcyB1bm1vZGlmaWFibGUuCmNsYXNzIENvbWJpbmVkTGlzdFZpZXc8VD4gZXh0ZW5kcyBMaXN0QmFzZTxUPgogICAgaW1wbGVtZW50cyBVbm1vZGlmaWFibGVMaXN0VmlldzxUPiB7CiAgc3RhdGljIHZvaWQgX3Rocm93KCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ0Nhbm5vdCBtb2RpZnkgYW4gdW5tb2RpZmlhYmxlIExpc3QnKTsKICB9CgogIC8vLyBUaGUgbGlzdHMgdGhhdCB0aGlzIGNvbWJpbmVzLgogIGZpbmFsIExpc3Q8TGlzdDxUPj4gX2xpc3RzOwoKICAvLy8gQ3JlYXRlcyBhIGNvbWJpbmVkIHZpZXcgb2YgW2xpc3RzXS4KICBDb21iaW5lZExpc3RWaWV3KHRoaXMuX2xpc3RzKTsKCiAgc2V0IGxlbmd0aChpbnQgbGVuZ3RoKSB7CiAgICBfdGhyb3coKTsKICB9CgogIGludCBnZXQgbGVuZ3RoID0+IF9saXN0cy5mb2xkKDAsIChsZW5ndGgsIGxpc3QpID0+IGxlbmd0aCArIGxpc3QubGVuZ3RoKTsKCiAgVCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIHZhciBpbml0aWFsSW5kZXggPSBpbmRleDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX2xpc3RzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBsaXN0ID0gX2xpc3RzW2ldOwogICAgICBpZiAoaW5kZXggPCBsaXN0Lmxlbmd0aCkgewogICAgICAgIHJldHVybiBsaXN0W2luZGV4XTsKICAgICAgfQogICAgICBpbmRleCAtPSBsaXN0Lmxlbmd0aDsKICAgIH0KICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluaXRpYWxJbmRleCwgdGhpcywgJ2luZGV4JywgbnVsbCwgbGVuZ3RoKTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgVCB2YWx1ZSkgewogICAgX3Rocm93KCk7CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgX3Rocm93KCk7CiAgfQoKICBib29sIHJlbW92ZShPYmplY3QgZWxlbWVudCkgewogICAgX3Rocm93KCk7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KFQgZWxlbWVudCkpIHsKICAgIF90aHJvdygpOwogIH0KCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoVCBlbGVtZW50KSkgewogICAgX3Rocm93KCk7CiAgfQp9CkQATk48ARoBOQRQTEdQBFBOLikZRgQBJB4BKiEBGw4EAUwBHR4uHCEcCBwGSwQBKg4EAREOBAEgDhEEASsOBAErDgQCATtwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL2NvbWJpbmVkX3dyYXBwZXJzL2NvbWJpbmVkX2xpc3QuZGFydDdvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29sbGVjdGlvbi9jb2xsZWN0aW9ucy5kYXJ0g6gvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvbGxlY3Rpb247CgovLy8gQW4gdW5tb2RpZmlhYmxlIFtMaXN0XSB2aWV3IG9mIGFub3RoZXIgTGlzdC4KLy8vCi8vLyBUaGUgc291cmNlIG9mIHRoZSBlbGVtZW50cyBtYXkgYmUgYSBbTGlzdF0gb3IgYW55IFtJdGVyYWJsZV0gd2l0aAovLy8gZWZmaWNpZW50IFtJdGVyYWJsZS5sZW5ndGhdIGFuZCBbSXRlcmFibGUuZWxlbWVudEF0XS4KY2xhc3MgVW5tb2RpZmlhYmxlTGlzdFZpZXc8RT4gZXh0ZW5kcyBVbm1vZGlmaWFibGVMaXN0QmFzZTxFPiB7CiAgZmluYWwgSXRlcmFibGU8RT4gX3NvdXJjZTsKCiAgLy8vIENyZWF0ZXMgYW4gdW5tb2RpZmlhYmxlIGxpc3QgYmFja2VkIGJ5IFtzb3VyY2VdLgogIC8vLwogIC8vLyBUaGUgW3NvdXJjZV0gb2YgdGhlIGVsZW1lbnRzIG1heSBiZSBhIFtMaXN0XSBvciBhbnkgW0l0ZXJhYmxlXSB3aXRoCiAgLy8vIGVmZmljaWVudCBbSXRlcmFibGUubGVuZ3RoXSBhbmQgW0l0ZXJhYmxlLmVsZW1lbnRBdF0uCiAgVW5tb2RpZmlhYmxlTGlzdFZpZXcoSXRlcmFibGU8RT4gc291cmNlKSA6IF9zb3VyY2UgPSBzb3VyY2U7CgogIExpc3Q8Uj4gY2FzdDxSPigpID0+IFVubW9kaWZpYWJsZUxpc3RWaWV3KF9zb3VyY2UuY2FzdDxSPigpKTsKICBpbnQgZ2V0IGxlbmd0aCA9PiBfc291cmNlLmxlbmd0aDsKCiAgRSBvcGVyYXRvciBbXShpbnQgaW5kZXgpID0+IF9zb3VyY2UuZWxlbWVudEF0KGluZGV4KTsKfQoaAE5OPAEZATEERjpAHQE3Bko8PwFAJAE4AgEgZGFydDpjb2xsZWN0aW9uL2NvbGxlY3Rpb25zLmRhcnRPc2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbGxlY3Rpb24vbGliL3NyYy9jb21iaW5lZF93cmFwcGVycy9jb21iaW5lZF9tYXAuZGFydIf7Ly8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJzsKCmltcG9ydCAnY29tYmluZWRfaXRlcmFibGUuZGFydCc7CgovLy8gUmV0dXJucyBhIG5ldyBtYXAgdGhhdCByZXByZXNlbnRzIG1hcHMgZmxhdHRlbmVkIGludG8gYSBzaW5nbGUgbWFwLgovLy8KLy8vIEFsbCBtZXRob2RzIGFuZCBhY2Nlc3NvcnMgdHJlYXQgdGhlIG5ldyBtYXAgYXMtaWYgaXQgd2VyZSBhIHNpbmdsZQovLy8gY29uY2F0ZW5hdGVkIG1hcCwgYnV0IHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIGxhemlseQovLy8gYWNjZXNzaW5nIGluZGl2aWR1YWwgbWFwIGluc3RhbmNlcy4gSW4gdGhlIG9jY2FzaW9uIHdoZXJlIGEga2V5IG9jY3VycyBpbgovLy8gbXVsdGlwbGUgbWFwcyB0aGUgZmlyc3QgdmFsdWUgaXMgcmV0dXJuZWQuCi8vLwovLy8gVGhlIHJlc3VsdGluZyBtYXAgaGFzIGFuIGluZGV4IG9wZXJhdG9yIChgW11gKSBhbmQgYGxlbmd0aGAgcHJvcGVydHkgdGhhdAovLy8gYXJlIGJvdGggYE8obWFwcylgLCByYXRoZXIgdGhhbiBgTygxKWAsIGFuZCB0aGUgbWFwIGlzIHVubW9kaWZpYWJsZSAtIGJ1dAovLy8gdW5kZXJseWluZyBjaGFuZ2VzIHRvIHRoZXNlIG1hcHMgYXJlIHN0aWxsIGFjY2Vzc2libGUgZnJvbSB0aGUgcmVzdWx0aW5nCi8vLyBtYXAuCmNsYXNzIENvbWJpbmVkTWFwVmlldzxLLCBWPiBleHRlbmRzIFVubW9kaWZpYWJsZU1hcEJhc2U8SywgVj4gewogIGZpbmFsIEl0ZXJhYmxlPE1hcDxLLCBWPj4gX21hcHM7CgogIC8vLyBDcmVhdGUgYSBuZXcgY29tYmluZWQgdmlldyBpbnRvIG11bHRpcGxlIG1hcHMuCiAgLy8vCiAgLy8vIFRoZSBpdGVyYWJsZSBpcyBhY2Nlc3NlZCBsYXppbHkgc28gaXQgc2hvdWxkIGJlIGNvbGxlY3Rpb24gdHlwZSBsaWtlCiAgLy8vIFtMaXN0XSBvciBbU2V0XSByYXRoZXIgdGhhbiBhIGxhenkgaXRlcmFibGUgcHJvZHVjZWQgYnkgYG1hcCgpYCBldCBhbC4KICBDb21iaW5lZE1hcFZpZXcodGhpcy5fbWFwcyk7CgogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgewogICAgZm9yICh2YXIgbWFwIGluIF9tYXBzKSB7CiAgICAgIC8vIEF2b2lkIHR3byBoYXNoIGxvb2t1cHMgb24gYSBwb3NpdGl2ZSBoaXQuCiAgICAgIHZhciB2YWx1ZSA9IG1hcFtrZXldOwogICAgICBpZiAodmFsdWUgIT0gbnVsbCB8fCBtYXAuY29udGFpbnNLZXkodmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vLyBUaGUga2V5cyBvZiBbdGhpc10uCiAgLy8vCiAgLy8vIFRoZSByZXR1cm5lZCBpdGVyYWJsZSBoYXMgZWZmaWNpZW50IGBsZW5ndGhgIGFuZCBgY29udGFpbnNgIG9wZXJhdGlvbnMsCiAgLy8vIGJhc2VkIG9uIFtsZW5ndGhdIGFuZCBbY29udGFpbnNLZXldIG9mIHRoZSBpbmRpdmlkdWFsIG1hcHMuCiAgLy8vCiAgLy8vIFRoZSBvcmRlciBvZiBpdGVyYXRpb24gaXMgZGVmaW5lZCBieSB0aGUgaW5kaXZpZHVhbCBgTWFwYCBpbXBsZW1lbnRhdGlvbnMsCiAgLy8vIGJ1dCBtdXN0IGJlIGNvbnNpc3RlbnQgYmV0d2VlbiBjaGFuZ2VzIHRvIHRoZSBtYXBzLgogIC8vLwogIC8vLyBVbmxpa2UgbW9zdCBbTWFwXSBpbXBsZW1lbnRhdGlvbnMsIG1vZGlmeWluZyBhbiBpbmRpdmlkdWFsIG1hcCB3aGlsZQogIC8vLyBpdGVyYXRpbmcgdGhlIGtleXMgd2lsbCBfc29tZXRpbWVzXyB0aHJvdy4gVGhpcyBiZWhhdmlvciBtYXkgY2hhbmdlIGluCiAgLy8vIHRoZSBmdXR1cmUuCiAgSXRlcmFibGU8Sz4gZ2V0IGtleXMgPT4gbmV3IENvbWJpbmVkSXRlcmFibGVWaWV3PEs+KF9tYXBzLm1hcCgobSkgPT4gbS5rZXlzKSk7Cn0KNgBOTjwBGgEhAUgER0tOLwROTk0JQCMBNQZLTR8BHh0zHDUWCAYRBAEaBk5CBlE6BktNElECATpwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL2NvbWJpbmVkX3dyYXBwZXJzL2NvbWJpbmVkX21hcC5kYXJ0PHNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jb2xsZWN0aW9uL2xpYi9zcmMvY29tcGFyYXRvcnMuZGFydLpxLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUNCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhDQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KDQovLyBDaGFyYWN0ZXIgY29uc3RhbnRzLg0KY29uc3QgaW50IF96ZXJvID0gMHgzMDsNCmNvbnN0IGludCBfdXBwZXJDYXNlQSA9IDB4NDE7DQpjb25zdCBpbnQgX3VwcGVyQ2FzZVogPSAweDVhOw0KY29uc3QgaW50IF9sb3dlckNhc2VBID0gMHg2MTsNCmNvbnN0IGludCBfbG93ZXJDYXNlWiA9IDB4N2E7DQpjb25zdCBpbnQgX2FzY2lpQ2FzZUJpdCA9IDB4MjA7DQoNCi8vLyBDaGVja3MgaWYgc3RyaW5ncyBbYV0gYW5kIFtiXSBkaWZmZXIgb25seSBvbiB0aGUgY2FzZSBvZiBBU0NJSSBsZXR0ZXJzLg0KLy8vDQovLy8gU3RyaW5ncyBhcmUgZXF1YWwgaWYgdGhleSBoYXZlIHRoZSBzYW1lIGxlbmd0aCwgYW5kIHRoZSBjaGFyYWN0ZXJzIGF0DQovLy8gZWFjaCBpbmRleCBhcmUgdGhlIHNhbWUsIG9yIHRoZXkgYXJlIEFTQ0lJIGxldHRlcnMgd2hlcmUgb25lIGlzIHVwcGVyLWNhc2UNCi8vLyBhbmQgdGhlIG90aGVyIGlzIHRoZSBsb3dlci1jYXNlIHZlcnNpb24gb2YgdGhlIHNhbWUgbGV0dGVyLg0KLy8vDQovLy8gVGhlIGNvbXBhcmlzb24gZG9lcyBub3QgaWdub3JlIHRoZSBjYXNlIG9mIG5vbi1BU0NJSSBsZXR0ZXJzLCBzbw0KLy8vIGFuIHVwcGVyLWNhc2UgYWUtbGlnYXR1cmUgKMOGKSBpcyBkaWZmZXJlbnQgZnJvbQ0KLy8vIGEgbG93ZXIgY2FzZSBhZS1saWdhdHVyZSAow6YpLg0KLy8vDQovLy8gSWdub3Jpbmcgbm9uLUFTQ0lJIGxldHRlcnMgaXMgbm90IGdlbmVyYWxseSBhIGdvb2QgaWRlYSwgYnV0IGl0IG1ha2VzIHNlbnNlDQovLy8gZm9yIHNpdHVhdGlvbnMgd2hlcmUgdGhlIHN0cmluZ3MgYXJlIGtub3duIHRvIGJlIEFTQ0lJLiBFeGFtcGxlcyBjb3VsZA0KLy8vIGJlIERhcnQgaWRlbnRpZmllcnMsIGJhc2UtNjQgb3IgaGV4IGVuY29kZWQgc3RyaW5ncywgR1VJRHMgb3Igc2ltaWxhcg0KLy8vIHN0cmluZ3Mgd2l0aCBhIGtub3duIHN0cnVjdHVyZS4NCmJvb2wgZXF1YWxzSWdub3JlQXNjaWlDYXNlKFN0cmluZyBhLCBTdHJpbmcgYikgew0KICBpZiAoYS5sZW5ndGggIT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTsNCiAgZm9yIChpbnQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7DQogICAgdmFyIGFDaGFyID0gYS5jb2RlVW5pdEF0KGkpOw0KICAgIHZhciBiQ2hhciA9IGIuY29kZVVuaXRBdChpKTsNCiAgICBpZiAoYUNoYXIgPT0gYkNoYXIpIGNvbnRpbnVlOw0KICAgIC8vIFF1aWNrLWNoZWNrIGZvciB3aGV0aGVyIHRoaXMgbWF5IGJlIGRpZmZlcmVudCBjYXNlcyBvZiB0aGUgc2FtZSBsZXR0ZXIuDQogICAgaWYgKGFDaGFyIF4gYkNoYXIgIT0gX2FzY2lpQ2FzZUJpdCkgcmV0dXJuIGZhbHNlOw0KICAgIC8vIElmIGl0J3MgcG9zc2libGUsIHRoZW4gY2hlY2sgaWYgZWl0aGVyIGNoYXJhY3RlciBpcyBhY3R1YWxseSBhbiBBU0NJSQ0KICAgIC8vIGxldHRlci4NCiAgICBpbnQgYUNoYXJMb3dlckNhc2UgPSBhQ2hhciB8IF9hc2NpaUNhc2VCaXQ7DQogICAgaWYgKF9sb3dlckNhc2VBIDw9IGFDaGFyTG93ZXJDYXNlICYmIGFDaGFyTG93ZXJDYXNlIDw9IF9sb3dlckNhc2VaKSB7DQogICAgICBjb250aW51ZTsNCiAgICB9DQogICAgcmV0dXJuIGZhbHNlOw0KICB9DQogIHJldHVybiB0cnVlOw0KfQ0KDQovLy8gSGFzaCBjb2RlIGZvciBhIHN0cmluZyB3aGljaCBpcyBjb21wYXRpYmxlIHdpdGggW2VxdWFsc0lnbm9yZUFzY2lpQ2FzZV0uDQovLy8NCi8vLyBUaGUgaGFzaCBjb2RlIGlzIHVuYWZmZWN0ZWQgYnkgY2hhbmdpbmcgdGhlIGNhc2Ugb2YgQVNDSUkgbGV0dGVycywgYnV0DQovLy8gdGhlIGNhc2Ugb2Ygbm9uLUFTQ0lJIGxldHRlcnMgZG8gYWZmZWN0IHRoZSByZXN1bHQuDQppbnQgaGFzaElnbm9yZUFzY2lpQ2FzZShTdHJpbmcgc3RyaW5nKSB7DQogIC8vIEplbmtpbnMgaGFzaCBjb2RlICggaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9KZW5raW5zX2hhc2hfZnVuY3Rpb24pLg0KICAvLyBhZGFwdGVkIHRvIHNtaSB2YWx1ZXMuDQogIC8vIFNhbWUgaGFzaCB1c2VkIGJ5IGRhcnQyanMgZm9yIHN0cmluZ3MsIG1vZGlmaWVkIHRvIGlnbm9yZSBBU0NJSSBsZXR0ZXINCiAgLy8gY2FzZS4NCiAgaW50IGhhc2ggPSAwOw0KICBmb3IgKGludCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykgew0KICAgIGludCBjaGFyID0gc3RyaW5nLmNvZGVVbml0QXQoaSk7DQogICAgLy8gQ29udmVydCBsb3dlci1jYXNlIEFTQ0lJIGxldHRlcnMgdG8gdXBwZXIgY2FzZS51cHBlcg0KICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHN0cmluZ3MgdGhhdCBkaWZmZXIgb25seSBpbiBjYXNlIHdpbGwgaGF2ZSB0aGUNCiAgICAvLyBzYW1lIGhhc2ggY29kZS4NCiAgICBpZiAoX2xvd2VyQ2FzZUEgPD0gY2hhciAmJiBjaGFyIDw9IF9sb3dlckNhc2VaKSBjaGFyIC09IF9hc2NpaUNhc2VCaXQ7DQogICAgaGFzaCA9IDB4MWZmZmZmZmYgJiAoaGFzaCArIGNoYXIpOw0KICAgIGhhc2ggPSAweDFmZmZmZmZmICYgKGhhc2ggKyAoKDB4MDAwN2ZmZmYgJiBoYXNoKSA8PCAxMCkpOw0KICAgIGhhc2ggPj49IDY7DQogIH0NCiAgaGFzaCA9IDB4MWZmZmZmZmYgJiAoaGFzaCArICgoMHgwM2ZmZmZmZiAmIGhhc2gpIDw8IDMpKTsNCiAgaGFzaCA+Pj0gMTE7DQogIHJldHVybiAweDFmZmZmZmZmICYgKGhhc2ggKyAoKDB4MDAwMDNmZmYgJiBoYXNoKSA8PCAxNSkpOw0KfQ0KDQovLy8gQ29tcGFyZXMgW2FdIGFuZCBbYl0gbGV4aWNhbGx5LCBjb252ZXJ0aW5nIEFTQ0lJIGxldHRlcnMgdG8gdXBwZXIgY2FzZS4NCi8vLw0KLy8vIENvbXBhcmlzb24gdHJlYXRzIGFsbCBsb3dlci1jYXNlIEFTQ0lJIGxldHRlcnMgYXMgdXBwZXItY2FzZSBsZXR0ZXJzLA0KLy8vIGJ1dCBkb2VzIG5vIGNhc2UgY29udmVyc2lvbiBmb3Igbm9uLUFTQ0lJIGxldHRlcnMuDQovLy8NCi8vLyBJZiB0d28gc3RyaW5ncyBkaWZmZXIgb25seSBvbiB0aGUgY2FzZSBvZiBBU0NJSSBsZXR0ZXJzLCB0aGUgb25lIHdpdGggdGhlDQovLy8gY2FwaXRhbCBsZXR0ZXIgYXQgdGhlIGZpcnN0IGRpZmZlcmVuY2Ugd2lsbCBjb21wYXJlIGFzIGxlc3MgdGhhbiB0aGUgb3RoZXINCi8vLyBzdHJpbmcuIFRoaXMgdGllLWJyZWFraW5nIGVuc3VyZXMgdGhhdCB0aGUgY29tcGFyaXNvbiBpcyBhIHRvdGFsIG9yZGVyaW5nDQovLy8gb24gc3RyaW5ncyBhbmQgaXMgY29tcGF0aWJsZSB3aXRoIGVxdWFsaXR5Lg0KLy8vDQovLy8gSWdub3Jpbmcgbm9uLUFTQ0lJIGxldHRlcnMgaXMgbm90IGdlbmVyYWxseSBhIGdvb2QgaWRlYSwgYnV0IGl0IG1ha2VzIHNlbnNlDQovLy8gZm9yIHNpdHVhdGlvbnMgd2hlcmUgdGhlIHN0cmluZ3MgYXJlIGtub3duIHRvIGJlIEFTQ0lJLiBFeGFtcGxlcyBjb3VsZA0KLy8vIGJlIERhcnQgaWRlbnRpZmllcnMsIGJhc2UtNjQgb3IgaGV4IGVuY29kZWQgc3RyaW5ncywgR1VJRHMgb3Igc2ltaWxhcg0KLy8vIHN0cmluZ3Mgd2l0aCBhIGtub3duIHN0cnVjdHVyZS4NCmludCBjb21wYXJlQXNjaWlVcHBlckNhc2UoU3RyaW5nIGEsIFN0cmluZyBiKSB7DQogIGludCBkZWZhdWx0UmVzdWx0ID0gMDsgLy8gUmV0dXJuZWQgaWYgbm8gZGlmZmVyZW5jZSBmb3VuZC4NCiAgZm9yIChpbnQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7DQogICAgaWYgKGkgPj0gYi5sZW5ndGgpIHJldHVybiAxOw0KICAgIHZhciBhQ2hhciA9IGEuY29kZVVuaXRBdChpKTsNCiAgICB2YXIgYkNoYXIgPSBiLmNvZGVVbml0QXQoaSk7DQogICAgaWYgKGFDaGFyID09IGJDaGFyKSBjb250aW51ZTsNCiAgICAvLyBVcHBlci1jYXNlIGlmIGxldHRlcnMuDQogICAgaW50IGFVcHBlckNhc2UgPSBhQ2hhcjsNCiAgICBpbnQgYlVwcGVyQ2FzZSA9IGJDaGFyOw0KICAgIGlmIChfbG93ZXJDYXNlQSA8PSBhQ2hhciAmJiBhQ2hhciA8PSBfbG93ZXJDYXNlWikgew0KICAgICAgYVVwcGVyQ2FzZSAtPSBfYXNjaWlDYXNlQml0Ow0KICAgIH0NCiAgICBpZiAoX2xvd2VyQ2FzZUEgPD0gYkNoYXIgJiYgYkNoYXIgPD0gX2xvd2VyQ2FzZVopIHsNCiAgICAgIGJVcHBlckNhc2UgLT0gX2FzY2lpQ2FzZUJpdDsNCiAgICB9DQogICAgaWYgKGFVcHBlckNhc2UgIT0gYlVwcGVyQ2FzZSkgcmV0dXJuIChhVXBwZXJDYXNlIC0gYlVwcGVyQ2FzZSkuc2lnbjsNCiAgICBpZiAoZGVmYXVsdFJlc3VsdCA9PSAwKSBkZWZhdWx0UmVzdWx0ID0gKGFDaGFyIC0gYkNoYXIpOw0KICB9DQogIGlmIChiLmxlbmd0aCA+IGEubGVuZ3RoKSByZXR1cm4gLTE7DQogIHJldHVybiBkZWZhdWx0UmVzdWx0LnNpZ247DQp9DQoNCi8vLyBDb21wYXJlcyBbYV0gYW5kIFtiXSBsZXhpY2FsbHksIGNvbnZlcnRpbmcgQVNDSUkgbGV0dGVycyB0byBsb3dlciBjYXNlLg0KLy8vDQovLy8gQ29tcGFyaXNvbiB0cmVhdHMgYWxsIHVwcGVyLWNhc2UgQVNDSUkgbGV0dGVycyBhcyBsb3dlci1jYXNlIGxldHRlcnMsDQovLy8gYnV0IGRvZXMgbm8gY2FzZSBjb252ZXJzaW9uIGZvciBub24tQVNDSUkgbGV0dGVycy4NCi8vLw0KLy8vIElmIHR3byBzdHJpbmdzIGRpZmZlciBvbmx5IG9uIHRoZSBjYXNlIG9mIEFTQ0lJIGxldHRlcnMsIHRoZSBvbmUgd2l0aCB0aGUNCi8vLyBjYXBpdGFsIGxldHRlciBhdCB0aGUgZmlyc3QgZGlmZmVyZW5jZSB3aWxsIGNvbXBhcmUgYXMgbGVzcyB0aGFuIHRoZSBvdGhlcg0KLy8vIHN0cmluZy4gVGhpcyB0aWUtYnJlYWtpbmcgZW5zdXJlcyB0aGF0IHRoZSBjb21wYXJpc29uIGlzIGEgdG90YWwgb3JkZXJpbmcNCi8vLyBvbiBzdHJpbmdzLg0KLy8vDQovLy8gSWdub3Jpbmcgbm9uLUFTQ0lJIGxldHRlcnMgaXMgbm90IGdlbmVyYWxseSBhIGdvb2QgaWRlYSwgYnV0IGl0IG1ha2VzIHNlbnNlDQovLy8gZm9yIHNpdHVhdGlvbnMgd2hlcmUgdGhlIHN0cmluZ3MgYXJlIGtub3duIHRvIGJlIEFTQ0lJLiBFeGFtcGxlcyBjb3VsZA0KLy8vIGJlIERhcnQgaWRlbnRpZmllcnMsIGJhc2UtNjQgb3IgaGV4IGVuY29kZWQgc3RyaW5ncywgR1VJRHMgb3Igc2ltaWxhcg0KLy8vIHN0cmluZ3Mgd2l0aCBhIGtub3duIHN0cnVjdHVyZS4NCmludCBjb21wYXJlQXNjaWlMb3dlckNhc2UoU3RyaW5nIGEsIFN0cmluZyBiKSB7DQogIGludCBkZWZhdWx0UmVzdWx0ID0gMDsNCiAgZm9yIChpbnQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7DQogICAgaWYgKGkgPj0gYi5sZW5ndGgpIHJldHVybiAxOw0KICAgIHZhciBhQ2hhciA9IGEuY29kZVVuaXRBdChpKTsNCiAgICB2YXIgYkNoYXIgPSBiLmNvZGVVbml0QXQoaSk7DQogICAgaWYgKGFDaGFyID09IGJDaGFyKSBjb250aW51ZTsNCiAgICBpbnQgYUxvd2VyQ2FzZSA9IGFDaGFyOw0KICAgIGludCBiTG93ZXJDYXNlID0gYkNoYXI7DQogICAgLy8gVXBwZXIgY2FzZSBpZiBBU0NJSSBsZXR0ZXJzLg0KICAgIGlmIChfdXBwZXJDYXNlQSA8PSBiQ2hhciAmJiBiQ2hhciA8PSBfdXBwZXJDYXNlWikgew0KICAgICAgYkxvd2VyQ2FzZSArPSBfYXNjaWlDYXNlQml0Ow0KICAgIH0NCiAgICBpZiAoX3VwcGVyQ2FzZUEgPD0gYUNoYXIgJiYgYUNoYXIgPD0gX3VwcGVyQ2FzZVopIHsNCiAgICAgIGFMb3dlckNhc2UgKz0gX2FzY2lpQ2FzZUJpdDsNCiAgICB9DQogICAgaWYgKGFMb3dlckNhc2UgIT0gYkxvd2VyQ2FzZSkgcmV0dXJuIChhTG93ZXJDYXNlIC0gYkxvd2VyQ2FzZSkuc2lnbjsNCiAgICBpZiAoZGVmYXVsdFJlc3VsdCA9PSAwKSBkZWZhdWx0UmVzdWx0ID0gYUNoYXIgLSBiQ2hhcjsNCiAgfQ0KICBpZiAoYi5sZW5ndGggPiBhLmxlbmd0aCkgcmV0dXJuIC0xOw0KICByZXR1cm4gZGVmYXVsdFJlc3VsdC5zaWduOw0KfQ0KDQovLy8gQ29tcGFyZXMgc3RyaW5ncyBbYV0gYW5kIFtiXSBhY2NvcmRpbmcgdG8gW25hdHVyYWwgc29ydCBvcmRlcmluZ11bXS4NCi8vLw0KLy8vIEEgbmF0dXJhbCBzb3J0IG9yZGVyaW5nIGlzIGEgbGV4aWNhbCBvcmRlcmluZyB3aGVyZSBlbWJlZGRlZA0KLy8vIG51bWVyYWxzIChkaWdpdCBzZXF1ZW5jZXMpIGFyZSB0cmVhdGVkIGFzIGEgc2luZ2xlIHVuaXQgYW5kIG9yZGVyZWQgYnkNCi8vLyBudW1lcmljYWwgdmFsdWUuDQovLy8gVGhpcyBtZWFucyB0aGF0IGAiYTEwYiJgIHdpbGwgYmUgb3JkZXJlZCBhZnRlciBgImE3YiJgIGluIG5hdHVyYWwNCi8vLyBvcmRlcmluZywgd2hlcmUgbGV4aWNhbCBvcmRlcmluZyB3b3VsZCBwdXQgdGhlIGAxYCBiZWZvcmUgdGhlIGA3YCwgaWdub3JpbmcNCi8vLyB0aGF0IHRoZSBgMWAgaXMgcGFydCBvZiBhIGxhcmdlciBudW1iZXIuDQovLy8NCi8vLyBFeGFtcGxlOg0KLy8vIFRoZSBmb2xsb3dpbmcgc3RyaW5ncyBhcmUgaW4gdGhlIG9yZGVyIHRoZXkgd291bGQgYmUgc29ydGVkIGJ5IHVzaW5nIHRoaXMNCi8vLyBjb21wYXJpc29uIGZ1bmN0aW9uOg0KLy8vDQovLy8gICAgICJhIiwgImEwIiwgImEwYiIsICJhMSIsICJhMDEiLCAiYTkiLCAiYTEwIiwgImExMDAiLCAiYTEwMGIiLCAiYWEiDQovLy8NCi8vLyBbbmF0dXJhbCBzb3J0IG9yZGVyaW5nXTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTmF0dXJhbF9zb3J0X29yZGVyDQppbnQgY29tcGFyZU5hdHVyYWwoU3RyaW5nIGEsIFN0cmluZyBiKSB7DQogIGZvciAoaW50IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgew0KICAgIGlmIChpID49IGIubGVuZ3RoKSByZXR1cm4gMTsNCiAgICB2YXIgYUNoYXIgPSBhLmNvZGVVbml0QXQoaSk7DQogICAgdmFyIGJDaGFyID0gYi5jb2RlVW5pdEF0KGkpOw0KICAgIGlmIChhQ2hhciAhPSBiQ2hhcikgew0KICAgICAgcmV0dXJuIF9jb21wYXJlTmF0dXJhbGx5KGEsIGIsIGksIGFDaGFyLCBiQ2hhcik7DQogICAgfQ0KICB9DQogIGlmIChiLmxlbmd0aCA+IGEubGVuZ3RoKSByZXR1cm4gLTE7DQogIHJldHVybiAwOw0KfQ0KDQovLy8gQ29tcGFyZXMgc3RyaW5ncyBbYV0gYW5kIFtiXSBhY2NvcmRpbmcgdG8gbG93ZXItY2FzZQ0KLy8vIFtuYXR1cmFsIHNvcnQgb3JkZXJpbmddW10uDQovLy8NCi8vLyBBU0NJSSBsZXR0ZXJzIGFyZSBjb252ZXJ0ZWQgdG8gbG93ZXIgY2FzZSBiZWZvcmUgYmVpbmcgY29tcGFyZWQsIGxpa2UNCi8vLyBmb3IgW2NvbXBhcmVBc2NpaUxvd2VyQ2FzZV0sIHRoZW4gdGhlIHJlc3VsdCBpcyBjb21wYXJlZCBsaWtlIGZvcg0KLy8vIFtjb21wYXJlTmF0dXJhbF0uDQovLy8NCi8vLyBJZiB0d28gc3RyaW5ncyBkaWZmZXIgb25seSBvbiB0aGUgY2FzZSBvZiBBU0NJSSBsZXR0ZXJzLCB0aGUgb25lIHdpdGggdGhlDQovLy8gY2FwaXRhbCBsZXR0ZXIgYXQgdGhlIGZpcnN0IGRpZmZlcmVuY2Ugd2lsbCBjb21wYXJlIGFzIGxlc3MgdGhhbiB0aGUgb3RoZXINCi8vLyBzdHJpbmcuIFRoaXMgdGllLWJyZWFraW5nIGVuc3VyZXMgdGhhdCB0aGUgY29tcGFyaXNvbiBpcyBhIHRvdGFsIG9yZGVyaW5nDQovLy8gb24gc3RyaW5ncy4NCi8vLw0KLy8vIFtuYXR1cmFsIHNvcnQgb3JkZXJpbmddOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9OYXR1cmFsX3NvcnRfb3JkZXINCmludCBjb21wYXJlQXNjaWlMb3dlckNhc2VOYXR1cmFsKFN0cmluZyBhLCBTdHJpbmcgYikgew0KICBpbnQgZGVmYXVsdFJlc3VsdCA9IDA7IC8vIFJldHVybmVkIGlmIG5vIGRpZmZlcmVuY2UgZm91bmQuDQogIGZvciAoaW50IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgew0KICAgIGlmIChpID49IGIubGVuZ3RoKSByZXR1cm4gMTsNCiAgICB2YXIgYUNoYXIgPSBhLmNvZGVVbml0QXQoaSk7DQogICAgdmFyIGJDaGFyID0gYi5jb2RlVW5pdEF0KGkpOw0KICAgIGlmIChhQ2hhciA9PSBiQ2hhcikgY29udGludWU7DQogICAgaW50IGFMb3dlckNhc2UgPSBhQ2hhcjsNCiAgICBpbnQgYkxvd2VyQ2FzZSA9IGJDaGFyOw0KICAgIGlmIChfdXBwZXJDYXNlQSA8PSBhQ2hhciAmJiBhQ2hhciA8PSBfdXBwZXJDYXNlWikgew0KICAgICAgYUxvd2VyQ2FzZSArPSBfYXNjaWlDYXNlQml0Ow0KICAgIH0NCiAgICBpZiAoX3VwcGVyQ2FzZUEgPD0gYkNoYXIgJiYgYkNoYXIgPD0gX3VwcGVyQ2FzZVopIHsNCiAgICAgIGJMb3dlckNhc2UgKz0gX2FzY2lpQ2FzZUJpdDsNCiAgICB9DQogICAgaWYgKGFMb3dlckNhc2UgIT0gYkxvd2VyQ2FzZSkgew0KICAgICAgcmV0dXJuIF9jb21wYXJlTmF0dXJhbGx5KGEsIGIsIGksIGFMb3dlckNhc2UsIGJMb3dlckNhc2UpOw0KICAgIH0NCiAgICBpZiAoZGVmYXVsdFJlc3VsdCA9PSAwKSBkZWZhdWx0UmVzdWx0ID0gYUNoYXIgLSBiQ2hhcjsNCiAgfQ0KICBpZiAoYi5sZW5ndGggPiBhLmxlbmd0aCkgcmV0dXJuIC0xOw0KICByZXR1cm4gZGVmYXVsdFJlc3VsdC5zaWduOw0KfQ0KDQovLy8gQ29tcGFyZXMgc3RyaW5ncyBbYV0gYW5kIFtiXSBhY2NvcmRpbmcgdG8gdXBwZXItY2FzZQ0KLy8vIFtuYXR1cmFsIHNvcnQgb3JkZXJpbmddW10uDQovLy8NCi8vLyBBU0NJSSBsZXR0ZXJzIGFyZSBjb252ZXJ0ZWQgdG8gdXBwZXIgY2FzZSBiZWZvcmUgYmVpbmcgY29tcGFyZWQsIGxpa2UNCi8vLyBmb3IgW2NvbXBhcmVBc2NpaVVwcGVyQ2FzZV0sIHRoZW4gdGhlIHJlc3VsdCBpcyBjb21wYXJlZCBsaWtlIGZvcg0KLy8vIFtjb21wYXJlTmF0dXJhbF0uDQovLy8NCi8vLyBJZiB0d28gc3RyaW5ncyBkaWZmZXIgb25seSBvbiB0aGUgY2FzZSBvZiBBU0NJSSBsZXR0ZXJzLCB0aGUgb25lIHdpdGggdGhlDQovLy8gY2FwaXRhbCBsZXR0ZXIgYXQgdGhlIGZpcnN0IGRpZmZlcmVuY2Ugd2lsbCBjb21wYXJlIGFzIGxlc3MgdGhhbiB0aGUgb3RoZXINCi8vLyBzdHJpbmcuIFRoaXMgdGllLWJyZWFraW5nIGVuc3VyZXMgdGhhdCB0aGUgY29tcGFyaXNvbiBpcyBhIHRvdGFsIG9yZGVyaW5nDQovLy8gb24gc3RyaW5ncw0KLy8vDQovLy8gW25hdHVyYWwgc29ydCBvcmRlcmluZ106IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL05hdHVyYWxfc29ydF9vcmRlcg0KaW50IGNvbXBhcmVBc2NpaVVwcGVyQ2FzZU5hdHVyYWwoU3RyaW5nIGEsIFN0cmluZyBiKSB7DQogIGludCBkZWZhdWx0UmVzdWx0ID0gMDsNCiAgZm9yIChpbnQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7DQogICAgaWYgKGkgPj0gYi5sZW5ndGgpIHJldHVybiAxOw0KICAgIHZhciBhQ2hhciA9IGEuY29kZVVuaXRBdChpKTsNCiAgICB2YXIgYkNoYXIgPSBiLmNvZGVVbml0QXQoaSk7DQogICAgaWYgKGFDaGFyID09IGJDaGFyKSBjb250aW51ZTsNCiAgICBpbnQgYVVwcGVyQ2FzZSA9IGFDaGFyOw0KICAgIGludCBiVXBwZXJDYXNlID0gYkNoYXI7DQogICAgaWYgKF9sb3dlckNhc2VBIDw9IGFDaGFyICYmIGFDaGFyIDw9IF9sb3dlckNhc2VaKSB7DQogICAgICBhVXBwZXJDYXNlIC09IF9hc2NpaUNhc2VCaXQ7DQogICAgfQ0KICAgIGlmIChfbG93ZXJDYXNlQSA8PSBiQ2hhciAmJiBiQ2hhciA8PSBfbG93ZXJDYXNlWikgew0KICAgICAgYlVwcGVyQ2FzZSAtPSBfYXNjaWlDYXNlQml0Ow0KICAgIH0NCiAgICBpZiAoYVVwcGVyQ2FzZSAhPSBiVXBwZXJDYXNlKSB7DQogICAgICByZXR1cm4gX2NvbXBhcmVOYXR1cmFsbHkoYSwgYiwgaSwgYVVwcGVyQ2FzZSwgYlVwcGVyQ2FzZSk7DQogICAgfQ0KICAgIGlmIChkZWZhdWx0UmVzdWx0ID09IDApIGRlZmF1bHRSZXN1bHQgPSBhQ2hhciAtIGJDaGFyOw0KICB9DQogIGlmIChiLmxlbmd0aCA+IGEubGVuZ3RoKSByZXR1cm4gLTE7DQogIHJldHVybiBkZWZhdWx0UmVzdWx0LnNpZ247DQp9DQoNCi8vLyBDaGVjayBmb3IgbnVtYmVycyBvdmVybGFwcGluZyB0aGUgY3VycmVudCBtaXNtYXRjaGVkIGNoYXJhY3RlcnMuDQovLy8NCi8vLyBJZiBib3RoIFthQ2hhcl0gYW5kIFtiQ2hhcl0gYXJlIGRpZ2l0cywgdXNlIG51bWVyaWNhbCBjb21wYXJpc29uLg0KLy8vIENoZWNrIGlmIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXJzIGlzIGEgbm9uLXplcm8gbnVtYmVyLCBhbmQgaWYgbm90LA0KLy8vIHNraXAgLSBidXQgY291bnQgLSBsZWFkaW5nIHplcm9zIGJlZm9yZSBjb21wYXJpbmcgbnVtYmVycy4NCi8vLw0KLy8vIElmIG9uZSBpcyBhIGRpZ2l0IGFuZCB0aGUgb3RoZXIgaXNuJ3QsIGNoZWNrIGlmIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXINCi8vLyBpcyBhIGRpZ2l0LCBhbmQgaWYgc28sIHRoZSB0aGUgb25lIHdpdGggdGhlIGRpZ2l0IGlzIHRoZSBncmVhdGVyIG51bWJlci4NCi8vLw0KLy8vIE90aGVyd2lzZSBqdXN0IHJldHVybnMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBbYUNoYXJdIGFuZCBbYkNoYXJdLg0KaW50IF9jb21wYXJlTmF0dXJhbGx5KFN0cmluZyBhLCBTdHJpbmcgYiwgaW50IGluZGV4LCBpbnQgYUNoYXIsIGludCBiQ2hhcikgew0KICBhc3NlcnQoYUNoYXIgIT0gYkNoYXIpOw0KICB2YXIgYUlzRGlnaXQgPSBfaXNEaWdpdChhQ2hhcik7DQogIHZhciBiSXNEaWdpdCA9IF9pc0RpZ2l0KGJDaGFyKTsNCiAgaWYgKGFJc0RpZ2l0KSB7DQogICAgaWYgKGJJc0RpZ2l0KSB7DQogICAgICByZXR1cm4gX2NvbXBhcmVOdW1lcmljYWxseShhLCBiLCBhQ2hhciwgYkNoYXIsIGluZGV4KTsNCiAgICB9IGVsc2UgaWYgKGluZGV4ID4gMCAmJiBfaXNEaWdpdChhLmNvZGVVbml0QXQoaW5kZXggLSAxKSkpIHsNCiAgICAgIC8vIGFDaGFyIGlzIHRoZSBjb250aW51YXRpb24gb2YgYSBsb25nZXIgbnVtYmVyLg0KICAgICAgcmV0dXJuIDE7DQogICAgfQ0KICB9IGVsc2UgaWYgKGJJc0RpZ2l0ICYmIGluZGV4ID4gMCAmJiBfaXNEaWdpdChiLmNvZGVVbml0QXQoaW5kZXggLSAxKSkpIHsNCiAgICAvLyBiQ2hhciBpcyB0aGUgY29udGludWF0aW9uIG9mIGEgbG9uZ2VyIG51bWJlci4NCiAgICByZXR1cm4gLTE7DQogIH0NCiAgLy8gQ2hhcmFjdGVycyBhcmUgYm90aCBub24tZGlnaXRzLCBvciBub3QgY29udGludWF0aW9uIG9mIGVhcmxpZXIgbnVtYmVyLg0KICByZXR1cm4gKGFDaGFyIC0gYkNoYXIpLnNpZ247DQp9DQoNCi8vLyBDb21wYXJlIG51bWJlcnMgb3ZlcmxhcHBpbmcgW2FDaGFyXSBhbmQgW2JDaGFyXSBudW1lcmljYWxseS4NCi8vLw0KLy8vIElmIHRoZSBudW1iZXJzIGhhdmUgdGhlIHNhbWUgbnVtZXJpY2FsIHZhbHVlLCBidXQgb25lIGhhcyBtb3JlIGxlYWRpbmcNCi8vLyB6ZXJvcywgdGhlIGxvbmdlciBudW1iZXIgaXMgY29uc2lkZXJlZCBncmVhdGVyIHRoYW4gdGhlIHNob3J0ZXIgb25lLg0KLy8vDQovLy8gVGhpcyBlbnN1cmVzIGEgdG90YWwgb3JkZXJpbmcgb24gc3RyaW5ncyBjb21wYXRpYmxlIHdpdGggZXF1YWxpdHkuDQppbnQgX2NvbXBhcmVOdW1lcmljYWxseShTdHJpbmcgYSwgU3RyaW5nIGIsIGludCBhQ2hhciwgaW50IGJDaGFyLCBpbnQgaW5kZXgpIHsNCiAgLy8gQm90aCBhcmUgZGlnaXRzLiBGaW5kIHRoZSBmaXJzdCBzaWduaWZpY2FudCBkaWZmZXJlbnQgZGlnaXQsIHRoZW4gZmluZA0KICAvLyB0aGUgbGVuZ3RoIG9mIHRoZSBudW1iZXJzLg0KICBpZiAoX2lzTm9uWmVyb051bWJlclN1ZmZpeChhLCBpbmRleCkpIHsNCiAgICAvLyBQYXJ0IG9mIGEgbG9uZ2VyIG51bWJlciwgZGlmZmVycyBhdCB0aGlzIGluZGV4LCBqdXN0IGNvdW50IHRoZSBsZW5ndGguDQogICAgaW50IHJlc3VsdCA9IF9jb21wYXJlRGlnaXRDb3VudChhLCBiLCBpbmRleCwgaW5kZXgpOw0KICAgIGlmIChyZXN1bHQgIT0gMCkgcmV0dXJuIHJlc3VsdDsNCiAgICAvLyBJZiBzYW1lIGxlbmd0aCwgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGlzIHRoZSBtb3N0IHNpZ25pZmljYW50IGRpZmZlcmluZw0KICAgIC8vIGRpZ2l0Lg0KICAgIHJldHVybiAoYUNoYXIgLSBiQ2hhcikuc2lnbjsNCiAgfQ0KICAvLyBOb3QgcGFydCBvZiBsYXJnZXIgKG5vbi16ZXJvKSBudW1iZXIsIHNvIHNraXAgbGVhZGluZyB6ZXJvcyBiZWZvcmUNCiAgLy8gY29tcGFyaW5nIG51bWJlcnMuDQogIGludCBhSW5kZXggPSBpbmRleDsNCiAgaW50IGJJbmRleCA9IGluZGV4Ow0KICBpZiAoYUNoYXIgPT0gX3plcm8pIHsNCiAgICBkbyB7DQogICAgICBhSW5kZXgrKzsNCiAgICAgIGlmIChhSW5kZXggPT0gYS5sZW5ndGgpIHJldHVybiAtMTsgLy8gbnVtYmVyIGluIGEgaXMgemVybywgYiBpcyBub3QuDQogICAgICBhQ2hhciA9IGEuY29kZVVuaXRBdChhSW5kZXgpOw0KICAgIH0gd2hpbGUgKGFDaGFyID09IF96ZXJvKTsNCiAgICBpZiAoIV9pc0RpZ2l0KGFDaGFyKSkgcmV0dXJuIC0xOw0KICB9IGVsc2UgaWYgKGJDaGFyID09IF96ZXJvKSB7DQogICAgZG8gew0KICAgICAgYkluZGV4Kys7DQogICAgICBpZiAoYkluZGV4ID09IGIubGVuZ3RoKSByZXR1cm4gMTsgLy8gbnVtYmVyIGluIGIgaXMgemVybywgYSBpcyBub3QuDQogICAgICBiQ2hhciA9IGIuY29kZVVuaXRBdChiSW5kZXgpOw0KICAgIH0gd2hpbGUgKGJDaGFyID09IF96ZXJvKTsNCiAgICBpZiAoIV9pc0RpZ2l0KGJDaGFyKSkgcmV0dXJuIDE7DQogIH0NCiAgaWYgKGFDaGFyICE9IGJDaGFyKSB7DQogICAgaW50IHJlc3VsdCA9IF9jb21wYXJlRGlnaXRDb3VudChhLCBiLCBhSW5kZXgsIGJJbmRleCk7DQogICAgaWYgKHJlc3VsdCAhPSAwKSByZXR1cm4gcmVzdWx0Ow0KICAgIHJldHVybiAoYUNoYXIgLSBiQ2hhcikuc2lnbjsNCiAgfQ0KICAvLyBTYW1lIGxlYWRpbmcgZGlnaXQsIG9uZSBoYWQgbW9yZSBsZWFkaW5nIHplcm9zLg0KICAvLyBDb21wYXJlIGRpZ2l0cyB1bnRpbCByZWFjaGluZyBhIGRpZmZlcmVuY2UuDQogIHdoaWxlICh0cnVlKSB7DQogICAgdmFyIGFJc0RpZ2l0ID0gZmFsc2U7DQogICAgdmFyIGJJc0RpZ2l0ID0gZmFsc2U7DQogICAgYUNoYXIgPSAwOw0KICAgIGJDaGFyID0gMDsNCiAgICBpZiAoKythSW5kZXggPCBhLmxlbmd0aCkgew0KICAgICAgYUNoYXIgPSBhLmNvZGVVbml0QXQoYUluZGV4KTsNCiAgICAgIGFJc0RpZ2l0ID0gX2lzRGlnaXQoYUNoYXIpOw0KICAgIH0NCiAgICBpZiAoKytiSW5kZXggPCBiLmxlbmd0aCkgew0KICAgICAgYkNoYXIgPSBiLmNvZGVVbml0QXQoYkluZGV4KTsNCiAgICAgIGJJc0RpZ2l0ID0gX2lzRGlnaXQoYkNoYXIpOw0KICAgIH0NCiAgICBpZiAoYUlzRGlnaXQpIHsNCiAgICAgIGlmIChiSXNEaWdpdCkgew0KICAgICAgICBpZiAoYUNoYXIgPT0gYkNoYXIpIGNvbnRpbnVlOw0KICAgICAgICAvLyBGaXJzdCBkaWZmZXJlbnQgZGlnaXQgZm91bmQuDQogICAgICAgIGJyZWFrOw0KICAgICAgfQ0KICAgICAgLy8gYkNoYXIgaXMgbm9uLWRpZ2l0LCBzbyBhIGhhcyBsb25nZXIgbnVtYmVyLg0KICAgICAgcmV0dXJuIDE7DQogICAgfSBlbHNlIGlmIChiSXNEaWdpdCkgew0KICAgICAgcmV0dXJuIC0xOyAvLyBiIGhhcyBsb25nZXIgbnVtYmVyLg0KICAgIH0gZWxzZSB7DQogICAgICAvLyBOZWl0aGVyIGlzIGRpZ2l0LCBzbyBudW1iZXJzIGhhZCBzYW1lIG51bWVyaWNhbCB2YWx1ZS4NCiAgICAgIC8vIEZhbGwgYmFjayBvbiBudW1iZXIgb2YgbGVhZGluZyB6ZXJvcw0KICAgICAgLy8gKHJlZmxlY3RlZCBieSBkaWZmZXJlbmNlIGluIGluZGljZXMpLg0KICAgICAgcmV0dXJuIChhSW5kZXggLSBiSW5kZXgpLnNpZ247DQogICAgfQ0KICB9DQogIC8vIEF0IGZpcnN0IGRpZmZlcmluZyBkaWdpdHMuDQogIGludCByZXN1bHQgPSBfY29tcGFyZURpZ2l0Q291bnQoYSwgYiwgYUluZGV4LCBiSW5kZXgpOw0KICBpZiAocmVzdWx0ICE9IDApIHJldHVybiByZXN1bHQ7DQogIHJldHVybiAoYUNoYXIgLSBiQ2hhcikuc2lnbjsNCn0NCg0KLy8vIENoZWNrcyB3aGljaCBvZiBbYV0gYW5kIFtiXSBoYXMgdGhlIGxvbmdlc3Qgc2VxdWVuY2Ugb2YgZGlnaXRzLg0KLy8vDQovLy8gU3RhcnRzIGNvdW50aW5nIGZyb20gYGkgKyAxYCBhbmQgYGogKyAxYCAoYXNzdW1lcyB0aGF0IGBhW2ldYCBhbmQgYGJbal1gIGFyZQ0KLy8vIGJvdGggYWxyZWFkeSBrbm93biB0byBiZSBkaWdpdHMpLg0KaW50IF9jb21wYXJlRGlnaXRDb3VudChTdHJpbmcgYSwgU3RyaW5nIGIsIGludCBpLCBpbnQgaikgew0KICB3aGlsZSAoKytpIDwgYS5sZW5ndGgpIHsNCiAgICBib29sIGFJc0RpZ2l0ID0gX2lzRGlnaXQoYS5jb2RlVW5pdEF0KGkpKTsNCiAgICBpZiAoKytqID09IGIubGVuZ3RoKSByZXR1cm4gYUlzRGlnaXQgPyAxIDogMDsNCiAgICBib29sIGJJc0RpZ2l0ID0gX2lzRGlnaXQoYi5jb2RlVW5pdEF0KGopKTsNCiAgICBpZiAoYUlzRGlnaXQpIHsNCiAgICAgIGlmIChiSXNEaWdpdCkgY29udGludWU7DQogICAgICByZXR1cm4gMTsNCiAgICB9IGVsc2UgaWYgKGJJc0RpZ2l0KSB7DQogICAgICByZXR1cm4gLTE7DQogICAgfSBlbHNlIHsNCiAgICAgIHJldHVybiAwOw0KICAgIH0NCiAgfQ0KICBpZiAoKytqIDwgYi5sZW5ndGggJiYgX2lzRGlnaXQoYi5jb2RlVW5pdEF0KGopKSkgew0KICAgIHJldHVybiAtMTsNCiAgfQ0KICByZXR1cm4gMDsNCn0NCg0KYm9vbCBfaXNEaWdpdChpbnQgY2hhckNvZGUpID0+IChjaGFyQ29kZSBeIF96ZXJvKSA8PSA5Ow0KDQovLy8gQ2hlY2sgaWYgdGhlIGRpZ2l0IGF0IFtpbmRleF0gaXMgY29udGludWluZyBhIG5vbi16ZXJvIG51bWJlci4NCi8vLw0KLy8vIElmIHRoZXJlIGlzIG5vIG5vbi16ZXJvIGRpZ2l0cyBiZWZvcmUsIHRoZW4gbGVhZGluZyB6ZXJvcyBhdCBbaW5kZXhdDQovLy8gYXJlIGFsc28gaWdub3JlZCB3aGVuIGNvbXBhcmluZyBudW1lcmljYWxseS4gSWYgdGhlcmUgaXMgYSBub24temVybyBkaWdpdA0KLy8vIGJlZm9yZSwgdGhlbiB6ZXJvcyBhdCBbaW5kZXhdIGFyZSBzaWduaWZpY2FudC4NCmJvb2wgX2lzTm9uWmVyb051bWJlclN1ZmZpeChTdHJpbmcgc3RyaW5nLCBpbnQgaW5kZXgpIHsNCiAgd2hpbGUgKC0taW5kZXggPj0gMCkgew0KICAgIGludCBjaGFyID0gc3RyaW5nLmNvZGVVbml0QXQoaW5kZXgpOw0KICAgIGlmIChjaGFyICE9IF96ZXJvKSByZXR1cm4gX2lzRGlnaXQoY2hhcik7DQogIH0NCiAgcmV0dXJuIGZhbHNlOw0KfQ0KgYsAT089AhkZHx8fHyECTQVLUEEFRjUjBVFMSyUyKygiIiNQN04QMUsRBxMFEAMCTgVMOSpPHU0MES0mPUkYTCg/EQU8ED0DAk0FSzgFT1BPMQVRTEslMT4oIiIiIx8dHTkkBzkkB0o+BSceAwJNBUs4BU9QTxEFUUxLJTEaKCIiIiMdHSU5JAc5JAdKPAUnHgMCSgVCTBZHUS4FDk8aBUsFTyooIiIiGzgHBScNAwI6IAVLRxcFT1BPEQVPOD4oIiIiIx0dOSQHOSQHJUIHPAUnHgMCOiAFS0cXBU9QTxAFTzgaKCIiIiMdHTkkBzkkByVCBzwFJx4DAkYFR0hABUxOBUhOGyMjExU+QjgRB0w2EAVNIAMCQgVMSgVIUE0hK086JVAPIgVJGRcXGQoRTCUfJiAKEUslHyUFGTwlIgU2MhIbGxAQICUjByAlIwcVFycpEAk2ERwqDkEvMCYHBSE6IyADAkUFUic8HDAzMBUfERwSDhEHBTYQBQ0DAjkCRAVKTzQ5GiovBREDASdwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL2NvbXBhcmF0b3JzLmRhcnQ5c2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbGxlY3Rpb24vbGliL3NyYy9lcXVhbGl0eS5kYXJ0u/MvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICJkYXJ0OmNvbGxlY3Rpb24iOwoKaW1wb3J0ICJjb21wYXJhdG9ycy5kYXJ0IjsKCmNvbnN0IGludCBfSEFTSF9NQVNLID0gMHg3ZmZmZmZmZjsKCi8vLyBBIGdlbmVyaWMgZXF1YWxpdHkgcmVsYXRpb24gb24gb2JqZWN0cy4KYWJzdHJhY3QgY2xhc3MgRXF1YWxpdHk8RT4gewogIGNvbnN0IGZhY3RvcnkgRXF1YWxpdHkoKSA9IERlZmF1bHRFcXVhbGl0eTxFPjsKCiAgLy8vIENvbXBhcmUgdHdvIGVsZW1lbnRzIGZvciBiZWluZyBlcXVhbC4KICAvLy8KICAvLy8gVGhpcyBzaG91bGQgYmUgYSBwcm9wZXIgZXF1YWxpdHkgcmVsYXRpb24uCiAgYm9vbCBlcXVhbHMoRSBlMSwgRSBlMik7CgogIC8vLyBHZXQgYSBoYXNoY29kZSBvZiBhbiBlbGVtZW50LgogIC8vLwogIC8vLyBUaGUgaGFzaGNvZGUgc2hvdWxkIGJlIGNvbXBhdGlibGUgd2l0aCBbZXF1YWxzXSwgc28gdGhhdCBpZgogIC8vLyBgZXF1YWxzKGEsIGIpYCB0aGVuIGBoYXNoKGEpID09IGhhc2goYilgLgogIGludCBoYXNoKEUgZSk7CgogIC8vLyBUZXN0IHdoZXRoZXIgYW4gb2JqZWN0IGlzIGEgdmFsaWQgYXJndW1lbnQgdG8gW2VxdWFsc10gYW5kIFtoYXNoXS4KICAvLy8KICAvLy8gU29tZSBpbXBsZW1lbnRhdGlvbnMgbWF5IGJlIHJlc3RyaWN0ZWQgdG8gb25seSB3b3JrIG9uIHNwZWNpZmljIHR5cGVzCiAgLy8vIG9mIG9iamVjdHMuCiAgYm9vbCBpc1ZhbGlkS2V5KE9iamVjdCBvKTsKfQoKdHlwZWRlZiBGIF9HZXRLZXk8RSwgRj4oRSBvYmplY3QpOwoKLy8vIEVxdWFsaXR5IG9mIG9iamVjdHMgYmFzZWQgb24gZGVyaXZlZCB2YWx1ZXMuCi8vLwovLy8gRm9yIGV4YW1wbGUsIGdpdmVuIHRoZSBjbGFzczoKLy8vIGBgYGRhcnQKLy8vIGFic3RyYWN0IGNsYXNzIEVtcGxveWVlIHsKLy8vICAgaW50IGdldCBlbXBsb3ltZW50SWQ7Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBUaGUgZm9sbG93aW5nIFtFcXVhbGl0eV0gY29uc2lkZXJzIGVtcGxveWVlcyB3aXRoIHRoZSBzYW1lIElEcyB0byBiZSBlcXVhbDoKLy8vIGBgYGRhcnQKLy8vIG5ldyBFcXVhbGl0eUJ5KChFbXBsb3llZSBlKSA9PiBlLmVtcGxveW1lbnRJZCk7Ci8vLyBgYGAKLy8vCi8vLyBJdCdzIGFsc28gcG9zc2libGUgdG8gcGFzcyBhbiBhZGRpdGlvbmFsIGVxdWFsaXR5IGluc3RhbmNlIHRoYXQgc2hvdWxkIGJlCi8vLyB1c2VkIHRvIGNvbXBhcmUgdGhlIHZhbHVlIGl0c2VsZi4KY2xhc3MgRXF1YWxpdHlCeTxFLCBGPiBpbXBsZW1lbnRzIEVxdWFsaXR5PEU+IHsKICAvLyBSZXR1cm5zIGEgZGVyaXZlZCB2YWx1ZSBGIGZyb20gYW4gb2JqZWN0IEUuCiAgZmluYWwgX0dldEtleTxFLCBGPiBfZ2V0S2V5OwoKICAvLyBEZXRlcm1pbmVzIGVxdWFsaXR5IGJldHdlZW4gdHdvIHZhbHVlcyBvZiBGLgogIGZpbmFsIEVxdWFsaXR5PEY+IF9pbm5lcjsKCiAgRXF1YWxpdHlCeShGIGdldEtleShFIG9iamVjdCksIFtFcXVhbGl0eTxGPiBpbm5lciA9IGNvbnN0IERlZmF1bHRFcXVhbGl0eSgpXSkKICAgICAgOiBfZ2V0S2V5ID0gZ2V0S2V5LAogICAgICAgIF9pbm5lciA9IGlubmVyOwoKICBib29sIGVxdWFscyhFIGUxLCBFIGUyKSA9PiBfaW5uZXIuZXF1YWxzKF9nZXRLZXkoZTEpLCBfZ2V0S2V5KGUyKSk7CgogIGludCBoYXNoKEUgZSkgPT4gX2lubmVyLmhhc2goX2dldEtleShlKSk7CgogIGJvb2wgaXNWYWxpZEtleShPYmplY3QgbykgewogICAgaWYgKG8gaXMgRSkgewogICAgICBmaW5hbCB2YWx1ZSA9IF9nZXRLZXkobyk7CiAgICAgIHJldHVybiB2YWx1ZSBpcyBGICYmIF9pbm5lci5pc1ZhbGlkS2V5KHZhbHVlKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9Cn0KCi8vLyBFcXVhbGl0eSBvZiBvYmplY3RzIHRoYXQgY29tcGFyZXMgb25seSB0aGUgbmF0dXJhbCBlcXVhbGl0eSBvZiB0aGUgb2JqZWN0cy4KLy8vCi8vLyBUaGlzIGVxdWFsaXR5IHVzZXMgdGhlIG9iamVjdHMnIG93biBbT2JqZWN0Lj09XSBhbmQgW09iamVjdC5oYXNoQ29kZV0gZm9yCi8vLyB0aGUgZXF1YWxpdHkuCi8vLwovLy8gTm90ZSB0aGF0IFtlcXVhbHNdIGFuZCBbaGFzaF0gdGFrZSBgT2JqZWN0YHMgcmF0aGVyIHRoYW4gYEVgcy4gVGhpcyBhbGxvd3MKLy8vIGBFYCB0byBiZSBpbmZlcnJlZCBhcyBgTnVsbGAgaW4gY29uc3QgY29udGV4dHMgd2hlcmUgYEVgIHdvdWxkbid0IGJlIGEKLy8vIGNvbXBpbGUtdGltZSBjb25zdGFudCwgd2hpbGUgc3RpbGwgYWxsb3dpbmcgdGhlIGNsYXNzIHRvIGJlIHVzZWQgYXQgcnVudGltZS4KY2xhc3MgRGVmYXVsdEVxdWFsaXR5PEU+IGltcGxlbWVudHMgRXF1YWxpdHk8RT4gewogIGNvbnN0IERlZmF1bHRFcXVhbGl0eSgpOwogIGJvb2wgZXF1YWxzKE9iamVjdCBlMSwgT2JqZWN0IGUyKSA9PiBlMSA9PSBlMjsKICBpbnQgaGFzaChPYmplY3QgZSkgPT4gZS5oYXNoQ29kZTsKICBib29sIGlzVmFsaWRLZXkoT2JqZWN0IG8pID0+IHRydWU7Cn0KCi8vLyBFcXVhbGl0eSBvZiBvYmplY3RzIHRoYXQgY29tcGFyZXMgb25seSB0aGUgaWRlbnRpdHkgb2YgdGhlIG9iamVjdHMuCmNsYXNzIElkZW50aXR5RXF1YWxpdHk8RT4gaW1wbGVtZW50cyBFcXVhbGl0eTxFPiB7CiAgY29uc3QgSWRlbnRpdHlFcXVhbGl0eSgpOwogIGJvb2wgZXF1YWxzKEUgZTEsIEUgZTIpID0+IGlkZW50aWNhbChlMSwgZTIpOwogIGludCBoYXNoKEUgZSkgPT4gaWRlbnRpdHlIYXNoQ29kZShlKTsKICBib29sIGlzVmFsaWRLZXkoT2JqZWN0IG8pID0+IHRydWU7Cn0KCi8vLyBFcXVhbGl0eSBvbiBpdGVyYWJsZXMuCi8vLwovLy8gVHdvIGl0ZXJhYmxlcyBhcmUgZXF1YWwgaWYgdGhleSBoYXZlIHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIG9yZGVyLgovLy8KLy8vIFRoZSBbZXF1YWxzXSBhbmQgW2hhc2hdIG1ldGhvZHMgYWNjZXB0cyBgbnVsbGAgdmFsdWVzLAovLy8gZXZlbiBpZiB0aGUgW2lzVmFsaWRLZXldIHJldHVybnMgYGZhbHNlYCBmb3IgYG51bGxgLgovLy8gVGhlIFtoYXNoXSBvZiBgbnVsbGAgaXMgYG51bGwuaGFzaENvZGVgLgpjbGFzcyBJdGVyYWJsZUVxdWFsaXR5PEU+IGltcGxlbWVudHMgRXF1YWxpdHk8SXRlcmFibGU8RT4+IHsKICBmaW5hbCBFcXVhbGl0eTxFPiBfZWxlbWVudEVxdWFsaXR5OwogIGNvbnN0IEl0ZXJhYmxlRXF1YWxpdHkoCiAgICAgIFtFcXVhbGl0eTxFPiBlbGVtZW50RXF1YWxpdHkgPSBjb25zdCBEZWZhdWx0RXF1YWxpdHkoKV0pCiAgICAgIDogX2VsZW1lbnRFcXVhbGl0eSA9IGVsZW1lbnRFcXVhbGl0eTsKCiAgYm9vbCBlcXVhbHMoSXRlcmFibGU8RT4gZWxlbWVudHMxLCBJdGVyYWJsZTxFPiBlbGVtZW50czIpIHsKICAgIGlmIChpZGVudGljYWwoZWxlbWVudHMxLCBlbGVtZW50czIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChlbGVtZW50czEgPT0gbnVsbCB8fCBlbGVtZW50czIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgdmFyIGl0MSA9IGVsZW1lbnRzMS5pdGVyYXRvcjsKICAgIHZhciBpdDIgPSBlbGVtZW50czIuaXRlcmF0b3I7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBib29sIGhhc05leHQgPSBpdDEubW92ZU5leHQoKTsKICAgICAgaWYgKGhhc05leHQgIT0gaXQyLm1vdmVOZXh0KCkpIHJldHVybiBmYWxzZTsKICAgICAgaWYgKCFoYXNOZXh0KSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKCFfZWxlbWVudEVxdWFsaXR5LmVxdWFscyhpdDEuY3VycmVudCwgaXQyLmN1cnJlbnQpKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQoKICBpbnQgaGFzaChJdGVyYWJsZTxFPiBlbGVtZW50cykgewogICAgaWYgKGVsZW1lbnRzID09IG51bGwpIHJldHVybiBudWxsLmhhc2hDb2RlOwogICAgLy8gSmVua2lucydzIG9uZS1hdC1hLXRpbWUgaGFzaCBmdW5jdGlvbi4KICAgIGludCBoYXNoID0gMDsKICAgIGZvciAoRSBlbGVtZW50IGluIGVsZW1lbnRzKSB7CiAgICAgIGludCBjID0gX2VsZW1lbnRFcXVhbGl0eS5oYXNoKGVsZW1lbnQpOwogICAgICBoYXNoID0gKGhhc2ggKyBjKSAmIF9IQVNIX01BU0s7CiAgICAgIGhhc2ggPSAoaGFzaCArIChoYXNoIDw8IDEwKSkgJiBfSEFTSF9NQVNLOwogICAgICBoYXNoIF49IChoYXNoID4+IDYpOwogICAgfQogICAgaGFzaCA9IChoYXNoICsgKGhhc2ggPDwgMykpICYgX0hBU0hfTUFTSzsKICAgIGhhc2ggXj0gKGhhc2ggPj4gMTEpOwogICAgaGFzaCA9IChoYXNoICsgKGhhc2ggPDwgMTUpKSAmIF9IQVNIX01BU0s7CiAgICByZXR1cm4gaGFzaDsKICB9CgogIGJvb2wgaXNWYWxpZEtleShPYmplY3QgbykgPT4gbyBpcyBJdGVyYWJsZTxFPjsKfQoKLy8vIEVxdWFsaXR5IG9uIGxpc3RzLgovLy8KLy8vIFR3byBsaXN0cyBhcmUgZXF1YWwgaWYgdGhleSBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhbmQgdGhlaXIgZWxlbWVudHMKLy8vIGF0IGVhY2ggaW5kZXggYXJlIGVxdWFsLgovLy8KLy8vIFRoaXMgaXMgZWZmZWN0aXZlbHkgdGhlIHNhbWUgYXMgW0l0ZXJhYmxlRXF1YWxpdHldIGV4Y2VwdCB0aGF0IGl0Ci8vLyBhY2Nlc3NlcyBlbGVtZW50cyBieSBpbmRleCBpbnN0ZWFkIG9mIHRocm91Z2ggaXRlcmF0aW9uLgovLy8KLy8vIFRoZSBbZXF1YWxzXSBhbmQgW2hhc2hdIG1ldGhvZHMgYWNjZXB0cyBgbnVsbGAgdmFsdWVzLAovLy8gZXZlbiBpZiB0aGUgW2lzVmFsaWRLZXldIHJldHVybnMgYGZhbHNlYCBmb3IgYG51bGxgLgovLy8gVGhlIFtoYXNoXSBvZiBgbnVsbGAgaXMgYG51bGwuaGFzaENvZGVgLgpjbGFzcyBMaXN0RXF1YWxpdHk8RT4gaW1wbGVtZW50cyBFcXVhbGl0eTxMaXN0PEU+PiB7CiAgZmluYWwgRXF1YWxpdHk8RT4gX2VsZW1lbnRFcXVhbGl0eTsKICBjb25zdCBMaXN0RXF1YWxpdHkoW0VxdWFsaXR5PEU+IGVsZW1lbnRFcXVhbGl0eSA9IGNvbnN0IERlZmF1bHRFcXVhbGl0eSgpXSkKICAgICAgOiBfZWxlbWVudEVxdWFsaXR5ID0gZWxlbWVudEVxdWFsaXR5OwoKICBib29sIGVxdWFscyhMaXN0PEU+IGxpc3QxLCBMaXN0PEU+IGxpc3QyKSB7CiAgICBpZiAoaWRlbnRpY2FsKGxpc3QxLCBsaXN0MikpIHJldHVybiB0cnVlOwogICAgaWYgKGxpc3QxID09IG51bGwgfHwgbGlzdDIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgaW50IGxlbmd0aCA9IGxpc3QxLmxlbmd0aDsKICAgIGlmIChsZW5ndGggIT0gbGlzdDIubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICghX2VsZW1lbnRFcXVhbGl0eS5lcXVhbHMobGlzdDFbaV0sIGxpc3QyW2ldKSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBpbnQgaGFzaChMaXN0PEU+IGxpc3QpIHsKICAgIGlmIChsaXN0ID09IG51bGwpIHJldHVybiBudWxsLmhhc2hDb2RlOwogICAgLy8gSmVua2lucydzIG9uZS1hdC1hLXRpbWUgaGFzaCBmdW5jdGlvbi4KICAgIC8vIFRoaXMgY29kZSBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBvbmUgaW4gSXRlcmFibGVFcXVhbGl0eSwgZXhjZXB0CiAgICAvLyB0aGF0IGl0IHVzZXMgaW5kZXhpbmcgaW5zdGVhZCBvZiBpdGVyYXRpbmcgdG8gZ2V0IHRoZSBlbGVtZW50cy4KICAgIGludCBoYXNoID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgewogICAgICBpbnQgYyA9IF9lbGVtZW50RXF1YWxpdHkuaGFzaChsaXN0W2ldKTsKICAgICAgaGFzaCA9IChoYXNoICsgYykgJiBfSEFTSF9NQVNLOwogICAgICBoYXNoID0gKGhhc2ggKyAoaGFzaCA8PCAxMCkpICYgX0hBU0hfTUFTSzsKICAgICAgaGFzaCBePSAoaGFzaCA+PiA2KTsKICAgIH0KICAgIGhhc2ggPSAoaGFzaCArIChoYXNoIDw8IDMpKSAmIF9IQVNIX01BU0s7CiAgICBoYXNoIF49IChoYXNoID4+IDExKTsKICAgIGhhc2ggPSAoaGFzaCArIChoYXNoIDw8IDE1KSkgJiBfSEFTSF9NQVNLOwogICAgcmV0dXJuIGhhc2g7CiAgfQoKICBib29sIGlzVmFsaWRLZXkoT2JqZWN0IG8pID0+IG8gaXMgTGlzdDxFPjsKfQoKYWJzdHJhY3QgY2xhc3MgX1Vub3JkZXJlZEVxdWFsaXR5PEUsIFQgZXh0ZW5kcyBJdGVyYWJsZTxFPj4KICAgIGltcGxlbWVudHMgRXF1YWxpdHk8VD4gewogIGZpbmFsIEVxdWFsaXR5PEU+IF9lbGVtZW50RXF1YWxpdHk7CgogIGNvbnN0IF9Vbm9yZGVyZWRFcXVhbGl0eSh0aGlzLl9lbGVtZW50RXF1YWxpdHkpOwoKICBib29sIGVxdWFscyhUIGVsZW1lbnRzMSwgVCBlbGVtZW50czIpIHsKICAgIGlmIChpZGVudGljYWwoZWxlbWVudHMxLCBlbGVtZW50czIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChlbGVtZW50czEgPT0gbnVsbCB8fCBlbGVtZW50czIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgSGFzaE1hcDxFLCBpbnQ+IGNvdW50cyA9IG5ldyBIYXNoTWFwKAogICAgICAgIGVxdWFsczogX2VsZW1lbnRFcXVhbGl0eS5lcXVhbHMsCiAgICAgICAgaGFzaENvZGU6IF9lbGVtZW50RXF1YWxpdHkuaGFzaCwKICAgICAgICBpc1ZhbGlkS2V5OiBfZWxlbWVudEVxdWFsaXR5LmlzVmFsaWRLZXkpOwogICAgaW50IGxlbmd0aCA9IDA7CiAgICBmb3IgKHZhciBlIGluIGVsZW1lbnRzMSkgewogICAgICBpbnQgY291bnQgPSBjb3VudHNbZV07CiAgICAgIGlmIChjb3VudCA9PSBudWxsKSBjb3VudCA9IDA7CiAgICAgIGNvdW50c1tlXSA9IGNvdW50ICsgMTsKICAgICAgbGVuZ3RoKys7CiAgICB9CiAgICBmb3IgKHZhciBlIGluIGVsZW1lbnRzMikgewogICAgICBpbnQgY291bnQgPSBjb3VudHNbZV07CiAgICAgIGlmIChjb3VudCA9PSBudWxsIHx8IGNvdW50ID09IDApIHJldHVybiBmYWxzZTsKICAgICAgY291bnRzW2VdID0gY291bnQgLSAxOwogICAgICBsZW5ndGgtLTsKICAgIH0KICAgIHJldHVybiBsZW5ndGggPT0gMDsKICB9CgogIGludCBoYXNoKFQgZWxlbWVudHMpIHsKICAgIGlmIChlbGVtZW50cyA9PSBudWxsKSByZXR1cm4gbnVsbC5oYXNoQ29kZTsKICAgIGludCBoYXNoID0gMDsKICAgIGZvciAoRSBlbGVtZW50IGluIGVsZW1lbnRzKSB7CiAgICAgIGludCBjID0gX2VsZW1lbnRFcXVhbGl0eS5oYXNoKGVsZW1lbnQpOwogICAgICBoYXNoID0gKGhhc2ggKyBjKSAmIF9IQVNIX01BU0s7CiAgICB9CiAgICBoYXNoID0gKGhhc2ggKyAoaGFzaCA8PCAzKSkgJiBfSEFTSF9NQVNLOwogICAgaGFzaCBePSAoaGFzaCA+PiAxMSk7CiAgICBoYXNoID0gKGhhc2ggKyAoaGFzaCA8PCAxNSkpICYgX0hBU0hfTUFTSzsKICAgIHJldHVybiBoYXNoOwogIH0KfQoKLy8vIEVxdWFsaXR5IG9mIHRoZSBlbGVtZW50cyBvZiB0d28gaXRlcmFibGVzIHdpdGhvdXQgY29uc2lkZXJpbmcgb3JkZXIuCi8vLwovLy8gVHdvIGl0ZXJhYmxlcyBhcmUgY29uc2lkZXJlZCBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGVsZW1lbnRzLAovLy8gYW5kIHRoZSBlbGVtZW50cyBvZiBvbmUgc2V0IGNhbiBiZSBwYWlyZWQgd2l0aCB0aGUgZWxlbWVudHMKLy8vIG9mIHRoZSBvdGhlciBpdGVyYWJsZSwgc28gdGhhdCBlYWNoIHBhaXIgYXJlIGVxdWFsLgpjbGFzcyBVbm9yZGVyZWRJdGVyYWJsZUVxdWFsaXR5PEU+IGV4dGVuZHMgX1Vub3JkZXJlZEVxdWFsaXR5PEUsIEl0ZXJhYmxlPEU+PiB7CiAgY29uc3QgVW5vcmRlcmVkSXRlcmFibGVFcXVhbGl0eSgKICAgICAgW0VxdWFsaXR5PEU+IGVsZW1lbnRFcXVhbGl0eSA9IGNvbnN0IERlZmF1bHRFcXVhbGl0eSgpXSkKICAgICAgOiBzdXBlcihlbGVtZW50RXF1YWxpdHkpOwoKICBib29sIGlzVmFsaWRLZXkoT2JqZWN0IG8pID0+IG8gaXMgSXRlcmFibGU8RT47Cn0KCi8vLyBFcXVhbGl0eSBvZiBzZXRzLgovLy8KLy8vIFR3byBzZXRzIGFyZSBjb25zaWRlcmVkIGVxdWFsIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgZWxlbWVudHMsCi8vLyBhbmQgdGhlIGVsZW1lbnRzIG9mIG9uZSBzZXQgY2FuIGJlIHBhaXJlZCB3aXRoIHRoZSBlbGVtZW50cwovLy8gb2YgdGhlIG90aGVyIHNldCwgc28gdGhhdCBlYWNoIHBhaXIgYXJlIGVxdWFsLgovLy8KLy8vIFRoaXMgZXF1YWxpdHkgYmVoYXZlcyB0aGUgc2FtZSBhcyBbVW5vcmRlcmVkSXRlcmFibGVFcXVhbGl0eV0gZXhjZXB0IHRoYXQKLy8vIGl0IGV4cGVjdHMgc2V0cyBpbnN0ZWFkIG9mIGl0ZXJhYmxlcyBhcyBhcmd1bWVudHMuCi8vLwovLy8gVGhlIFtlcXVhbHNdIGFuZCBbaGFzaF0gbWV0aG9kcyBhY2NlcHRzIGBudWxsYCB2YWx1ZXMsCi8vLyBldmVuIGlmIHRoZSBbaXNWYWxpZEtleV0gcmV0dXJucyBgZmFsc2VgIGZvciBgbnVsbGAuCi8vLyBUaGUgW2hhc2hdIG9mIGBudWxsYCBpcyBgbnVsbC5oYXNoQ29kZWAuCmNsYXNzIFNldEVxdWFsaXR5PEU+IGV4dGVuZHMgX1Vub3JkZXJlZEVxdWFsaXR5PEUsIFNldDxFPj4gewogIGNvbnN0IFNldEVxdWFsaXR5KFtFcXVhbGl0eTxFPiBlbGVtZW50RXF1YWxpdHkgPSBjb25zdCBEZWZhdWx0RXF1YWxpdHkoKV0pCiAgICAgIDogc3VwZXIoZWxlbWVudEVxdWFsaXR5KTsKCiAgYm9vbCBpc1ZhbGlkS2V5KE9iamVjdCBvKSA9PiBvIGlzIFNldDxFPjsKfQoKLy8vIEludGVybmFsIGNsYXNzIHVzZWQgYnkgW01hcEVxdWFsaXR5XS4KLy8vCi8vLyBUaGUgY2xhc3MgcmVwcmVzZW50cyBhIG1hcCBlbnRyeSBhcyBhIHNpbmdsZSBvYmplY3QsCi8vLyB1c2luZyBhIGNvbWJpbmVkIGhhc2hDb2RlIGFuZCBlcXVhbGl0eSBvZiB0aGUga2V5IGFuZCB2YWx1ZS4KY2xhc3MgX01hcEVudHJ5IHsKICBmaW5hbCBNYXBFcXVhbGl0eSBlcXVhbGl0eTsKICBmaW5hbCBrZXk7CiAgZmluYWwgdmFsdWU7CiAgX01hcEVudHJ5KHRoaXMuZXF1YWxpdHksIHRoaXMua2V5LCB0aGlzLnZhbHVlKTsKCiAgaW50IGdldCBoYXNoQ29kZSA9PgogICAgICAoMyAqIGVxdWFsaXR5Ll9rZXlFcXVhbGl0eS5oYXNoKGtleSkgKwogICAgICAgICAgNyAqIGVxdWFsaXR5Ll92YWx1ZUVxdWFsaXR5Lmhhc2godmFsdWUpKSAmCiAgICAgIF9IQVNIX01BU0s7CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSA9PgogICAgICBvdGhlciBpcyBfTWFwRW50cnkgJiYKICAgICAgZXF1YWxpdHkuX2tleUVxdWFsaXR5LmVxdWFscyhrZXksIG90aGVyLmtleSkgJiYKICAgICAgZXF1YWxpdHkuX3ZhbHVlRXF1YWxpdHkuZXF1YWxzKHZhbHVlLCBvdGhlci52YWx1ZSk7Cn0KCi8vLyBFcXVhbGl0eSBvbiBtYXBzLgovLy8KLy8vIFR3byBtYXBzIGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGVudHJpZXMsIGFuZCBpZiB0aGUKLy8vIGVudHJpZXMgb2YgdGhlIHR3byBtYXBzIGFyZSBwYWlyd2lzZSBlcXVhbCBvbiBib3RoIGtleSBhbmQgdmFsdWUuCi8vLwovLy8gVGhlIFtlcXVhbHNdIGFuZCBbaGFzaF0gbWV0aG9kcyBhY2NlcHRzIGBudWxsYCB2YWx1ZXMsCi8vLyBldmVuIGlmIHRoZSBbaXNWYWxpZEtleV0gcmV0dXJucyBgZmFsc2VgIGZvciBgbnVsbGAuCi8vLyBUaGUgW2hhc2hdIG9mIGBudWxsYCBpcyBgbnVsbC5oYXNoQ29kZWAuCmNsYXNzIE1hcEVxdWFsaXR5PEssIFY+IGltcGxlbWVudHMgRXF1YWxpdHk8TWFwPEssIFY+PiB7CiAgZmluYWwgRXF1YWxpdHk8Sz4gX2tleUVxdWFsaXR5OwogIGZpbmFsIEVxdWFsaXR5PFY+IF92YWx1ZUVxdWFsaXR5OwogIGNvbnN0IE1hcEVxdWFsaXR5KAogICAgICB7RXF1YWxpdHk8Sz4ga2V5czogY29uc3QgRGVmYXVsdEVxdWFsaXR5KCksCiAgICAgIEVxdWFsaXR5PFY+IHZhbHVlczogY29uc3QgRGVmYXVsdEVxdWFsaXR5KCl9KQogICAgICA6IF9rZXlFcXVhbGl0eSA9IGtleXMsCiAgICAgICAgX3ZhbHVlRXF1YWxpdHkgPSB2YWx1ZXM7CgogIGJvb2wgZXF1YWxzKE1hcDxLLCBWPiBtYXAxLCBNYXA8SywgVj4gbWFwMikgewogICAgaWYgKGlkZW50aWNhbChtYXAxLCBtYXAyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAobWFwMSA9PSBudWxsIHx8IG1hcDIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgaW50IGxlbmd0aCA9IG1hcDEubGVuZ3RoOwogICAgaWYgKGxlbmd0aCAhPSBtYXAyLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgTWFwPF9NYXBFbnRyeSwgaW50PiBlcXVhbEVsZW1lbnRDb3VudHMgPSBuZXcgSGFzaE1hcCgpOwogICAgZm9yIChLIGtleSBpbiBtYXAxLmtleXMpIHsKICAgICAgX01hcEVudHJ5IGVudHJ5ID0gbmV3IF9NYXBFbnRyeSh0aGlzLCBrZXksIG1hcDFba2V5XSk7CiAgICAgIGludCBjb3VudCA9IGVxdWFsRWxlbWVudENvdW50c1tlbnRyeV07CiAgICAgIGlmIChjb3VudCA9PSBudWxsKSBjb3VudCA9IDA7CiAgICAgIGVxdWFsRWxlbWVudENvdW50c1tlbnRyeV0gPSBjb3VudCArIDE7CiAgICB9CiAgICBmb3IgKEsga2V5IGluIG1hcDIua2V5cykgewogICAgICBfTWFwRW50cnkgZW50cnkgPSBuZXcgX01hcEVudHJ5KHRoaXMsIGtleSwgbWFwMltrZXldKTsKICAgICAgaW50IGNvdW50ID0gZXF1YWxFbGVtZW50Q291bnRzW2VudHJ5XTsKICAgICAgaWYgKGNvdW50ID09IG51bGwgfHwgY291bnQgPT0gMCkgcmV0dXJuIGZhbHNlOwogICAgICBlcXVhbEVsZW1lbnRDb3VudHNbZW50cnldID0gY291bnQgLSAxOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBpbnQgaGFzaChNYXA8SywgVj4gbWFwKSB7CiAgICBpZiAobWFwID09IG51bGwpIHJldHVybiBudWxsLmhhc2hDb2RlOwogICAgaW50IGhhc2ggPSAwOwogICAgZm9yIChLIGtleSBpbiBtYXAua2V5cykgewogICAgICBpbnQga2V5SGFzaCA9IF9rZXlFcXVhbGl0eS5oYXNoKGtleSk7CiAgICAgIGludCB2YWx1ZUhhc2ggPSBfdmFsdWVFcXVhbGl0eS5oYXNoKG1hcFtrZXldKTsKICAgICAgaGFzaCA9IChoYXNoICsgMyAqIGtleUhhc2ggKyA3ICogdmFsdWVIYXNoKSAmIF9IQVNIX01BU0s7CiAgICB9CiAgICBoYXNoID0gKGhhc2ggKyAoaGFzaCA8PCAzKSkgJiBfSEFTSF9NQVNLOwogICAgaGFzaCBePSAoaGFzaCA+PiAxMSk7CiAgICBoYXNoID0gKGhhc2ggKyAoaGFzaCA8PCAxNSkpICYgX0hBU0hfTUFTSzsKICAgIHJldHVybiBoYXNoOwogIH0KCiAgYm9vbCBpc1ZhbGlkS2V5KE9iamVjdCBvKSA9PiBvIGlzIE1hcDxLLCBWPjsKfQoKLy8vIENvbWJpbmVzIHNldmVyYWwgZXF1YWxpdGllcyBpbnRvIGEgc2luZ2xlIGVxdWFsaXR5LgovLy8KLy8vIFRyaWVzIGVhY2ggZXF1YWxpdHkgaW4gb3JkZXIsIHVzaW5nIFtFcXVhbGl0eS5pc1ZhbGlkS2V5XSwgYW5kIHJldHVybnMKLy8vIHRoZSByZXN1bHQgb2YgdGhlIGZpcnN0IGVxdWFsaXR5IHRoYXQgYXBwbGllcyB0byB0aGUgYXJndW1lbnQgb3IgYXJndW1lbnRzLgovLy8KLy8vIEZvciBgZXF1YWxzYCwgdGhlIGZpcnN0IGVxdWFsaXR5IHRoYXQgbWF0Y2hlcyB0aGUgZmlyc3QgYXJndW1lbnQgaXMgdXNlZCwKLy8vIGFuZCBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IG9mIGBlcXVhbHNgIGlzIG5vdCB2YWxpZCBmb3IgdGhhdCBlcXVhbGl0eSwKLy8vIGl0IHJldHVybnMgZmFsc2UuCi8vLwovLy8gQmVjYXVzZSB0aGUgZXF1YWxpdGllcyBhcmUgdHJpZWQgaW4gb3JkZXIsIHRoZXkgc2hvdWxkIGdlbmVyYWxseSB3b3JrIG9uCi8vLyBkaXNqb2ludCB0eXBlcy4gT3RoZXJ3aXNlIHRoZSBtdWx0aS1lcXVhbGl0eSBtYXkgZ2l2ZSBpbmNvbnNpc3RlbnQgcmVzdWx0cwovLy8gZm9yIGBlcXVhbHMoZTEsIGUyKWAgYW5kIGBlcXVhbHMoZTIsIGUxKWAuIFRoaXMgY2FuIGhhcHBlbiBpZiBvbmUgZXF1YWxpdHkKLy8vIGNvbnNpZGVycyBvbmx5IGBlMWAgYSB2YWxpZCBrZXksIGFuZCBub3QgYGUyYCwgYnV0IGFuIGVxdWFsaXR5IHdoaWNoIGlzCi8vLyBjaGVja2VkIGxhdGVyLCBhbGxvd3MgYm90aC4KY2xhc3MgTXVsdGlFcXVhbGl0eTxFPiBpbXBsZW1lbnRzIEVxdWFsaXR5PEU+IHsKICBmaW5hbCBJdGVyYWJsZTxFcXVhbGl0eTxFPj4gX2VxdWFsaXRpZXM7CgogIGNvbnN0IE11bHRpRXF1YWxpdHkoSXRlcmFibGU8RXF1YWxpdHk8RT4+IGVxdWFsaXRpZXMpCiAgICAgIDogX2VxdWFsaXRpZXMgPSBlcXVhbGl0aWVzOwoKICBib29sIGVxdWFscyhFIGUxLCBFIGUyKSB7CiAgICBmb3IgKEVxdWFsaXR5PEU+IGVxIGluIF9lcXVhbGl0aWVzKSB7CiAgICAgIGlmIChlcS5pc1ZhbGlkS2V5KGUxKSkgcmV0dXJuIGVxLmlzVmFsaWRLZXkoZTIpICYmIGVxLmVxdWFscyhlMSwgZTIpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgaW50IGhhc2goRSBlKSB7CiAgICBmb3IgKEVxdWFsaXR5PEU+IGVxIGluIF9lcXVhbGl0aWVzKSB7CiAgICAgIGlmIChlcS5pc1ZhbGlkS2V5KGUpKSByZXR1cm4gZXEuaGFzaChlKTsKICAgIH0KICAgIHJldHVybiAwOwogIH0KCiAgYm9vbCBpc1ZhbGlkS2V5KE9iamVjdCBvKSB7CiAgICBmb3IgKEVxdWFsaXR5PEU+IGVxIGluIF9lcXVhbGl0aWVzKSB7CiAgICAgIGlmIChlcS5pc1ZhbGlkS2V5KG8pKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9Cn0KCi8vLyBEZWVwIGVxdWFsaXR5IG9uIGNvbGxlY3Rpb25zLgovLy8KLy8vIFJlY29nbml6ZXMgbGlzdHMsIHNldHMsIGl0ZXJhYmxlcyBhbmQgbWFwcyBhbmQgY29tcGFyZXMgdGhlaXIgZWxlbWVudHMgdXNpbmcKLy8vIGRlZXAgZXF1YWxpdHkgYXMgd2VsbC4KLy8vCi8vLyBOb24taXRlcmFibGUvbWFwIG9iamVjdHMgYXJlIGNvbXBhcmVkIHVzaW5nIGEgY29uZmlndXJhYmxlIGJhc2UgZXF1YWxpdHkuCi8vLwovLy8gV29ya3MgaW4gb25lIG9mIHR3byBtb2Rlczogb3JkZXJlZCBvciB1bm9yZGVyZWQuCi8vLwovLy8gSW4gb3JkZXJlZCBtb2RlLCBsaXN0cyBhbmQgaXRlcmFibGVzIGFyZSByZXF1aXJlZCB0byBoYXZlIGVxdWFsIGVsZW1lbnRzCi8vLyBpbiB0aGUgc2FtZSBvcmRlci4gSW4gdW5vcmRlcmVkIG1vZGUsIHRoZSBvcmRlciBvZiBlbGVtZW50cyBpbiBpdGVyYWJsZXMKLy8vIGFuZCBsaXN0cyBhcmUgbm90IGltcG9ydGFudC4KLy8vCi8vLyBBIGxpc3QgaXMgb25seSBlcXVhbCB0byBhbm90aGVyIGxpc3QsIGxpa2V3aXNlIGZvciBzZXRzIGFuZCBtYXBzLiBBbGwgb3RoZXIKLy8vIGl0ZXJhYmxlcyBhcmUgY29tcGFyZWQgYXMgaXRlcmFibGVzIG9ubHkuCmNsYXNzIERlZXBDb2xsZWN0aW9uRXF1YWxpdHkgaW1wbGVtZW50cyBFcXVhbGl0eSB7CiAgZmluYWwgRXF1YWxpdHkgX2Jhc2U7CiAgZmluYWwgYm9vbCBfdW5vcmRlcmVkOwogIGNvbnN0IERlZXBDb2xsZWN0aW9uRXF1YWxpdHkoW0VxdWFsaXR5IGJhc2UgPSBjb25zdCBEZWZhdWx0RXF1YWxpdHkoKV0pCiAgICAgIDogX2Jhc2UgPSBiYXNlLAogICAgICAgIF91bm9yZGVyZWQgPSBmYWxzZTsKCiAgLy8vIENyZWF0ZXMgYSBkZWVwIGVxdWFsaXR5IG9uIGNvbGxlY3Rpb25zIHdoZXJlIHRoZSBvcmRlciBvZiBsaXN0cyBhbmQKICAvLy8gaXRlcmFibGVzIGFyZSBub3QgY29uc2lkZXJlZCBpbXBvcnRhbnQuIFRoYXQgaXMsIGxpc3RzIGFuZCBpdGVyYWJsZXMgYXJlCiAgLy8vIHRyZWF0ZWQgYXMgdW5vcmRlcmVkIGl0ZXJhYmxlcy4KICBjb25zdCBEZWVwQ29sbGVjdGlvbkVxdWFsaXR5LnVub3JkZXJlZCgKICAgICAgW0VxdWFsaXR5IGJhc2UgPSBjb25zdCBEZWZhdWx0RXF1YWxpdHkoKV0pCiAgICAgIDogX2Jhc2UgPSBiYXNlLAogICAgICAgIF91bm9yZGVyZWQgPSB0cnVlOwoKICBib29sIGVxdWFscyhlMSwgZTIpIHsKICAgIGlmIChlMSBpcyBTZXQpIHsKICAgICAgcmV0dXJuIGUyIGlzIFNldCAmJiBuZXcgU2V0RXF1YWxpdHkodGhpcykuZXF1YWxzKGUxLCBlMik7CiAgICB9CiAgICBpZiAoZTEgaXMgTWFwKSB7CiAgICAgIHJldHVybiBlMiBpcyBNYXAgJiYKICAgICAgICAgIG5ldyBNYXBFcXVhbGl0eShrZXlzOiB0aGlzLCB2YWx1ZXM6IHRoaXMpLmVxdWFscyhlMSwgZTIpOwogICAgfQogICAgaWYgKCFfdW5vcmRlcmVkKSB7CiAgICAgIGlmIChlMSBpcyBMaXN0KSB7CiAgICAgICAgcmV0dXJuIGUyIGlzIExpc3QgJiYgbmV3IExpc3RFcXVhbGl0eSh0aGlzKS5lcXVhbHMoZTEsIGUyKTsKICAgICAgfQogICAgICBpZiAoZTEgaXMgSXRlcmFibGUpIHsKICAgICAgICByZXR1cm4gZTIgaXMgSXRlcmFibGUgJiYgbmV3IEl0ZXJhYmxlRXF1YWxpdHkodGhpcykuZXF1YWxzKGUxLCBlMik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoZTEgaXMgSXRlcmFibGUpIHsKICAgICAgaWYgKGUxIGlzIExpc3QgIT0gZTIgaXMgTGlzdCkgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gZTIgaXMgSXRlcmFibGUgJiYKICAgICAgICAgIG5ldyBVbm9yZGVyZWRJdGVyYWJsZUVxdWFsaXR5KHRoaXMpLmVxdWFscyhlMSwgZTIpOwogICAgfQogICAgcmV0dXJuIF9iYXNlLmVxdWFscyhlMSwgZTIpOwogIH0KCiAgaW50IGhhc2goT2JqZWN0IG8pIHsKICAgIGlmIChvIGlzIFNldCkgcmV0dXJuIG5ldyBTZXRFcXVhbGl0eSh0aGlzKS5oYXNoKG8pOwogICAgaWYgKG8gaXMgTWFwKSByZXR1cm4gbmV3IE1hcEVxdWFsaXR5KGtleXM6IHRoaXMsIHZhbHVlczogdGhpcykuaGFzaChvKTsKICAgIGlmICghX3Vub3JkZXJlZCkgewogICAgICBpZiAobyBpcyBMaXN0KSByZXR1cm4gbmV3IExpc3RFcXVhbGl0eSh0aGlzKS5oYXNoKG8pOwogICAgICBpZiAobyBpcyBJdGVyYWJsZSkgcmV0dXJuIG5ldyBJdGVyYWJsZUVxdWFsaXR5KHRoaXMpLmhhc2gobyk7CiAgICB9IGVsc2UgaWYgKG8gaXMgSXRlcmFibGUpIHsKICAgICAgcmV0dXJuIG5ldyBVbm9yZGVyZWRJdGVyYWJsZUVxdWFsaXR5KHRoaXMpLmhhc2gobyk7CiAgICB9CiAgICByZXR1cm4gX2Jhc2UuaGFzaChvKTsKICB9CgogIGJvb2wgaXNWYWxpZEtleShPYmplY3QgbykgPT4gbyBpcyBJdGVyYWJsZSB8fCBvIGlzIE1hcCB8fCBfYmFzZS5pc1ZhbGlkS2V5KG8pOwp9CgovLy8gU3RyaW5nIGVxdWFsaXR5IHRoYXQncyBpbnNlbnNpdGl2ZSB0byBkaWZmZXJlbmNlcyBpbiBBU0NJSSBjYXNlLgovLy8KLy8vIE5vbi1BU0NJSSBjaGFyYWN0ZXJzIGFyZSBjb21wYXJlZCBhcy1pcywgd2l0aCBubyBjb252ZXJzaW9uLgpjbGFzcyBDYXNlSW5zZW5zaXRpdmVFcXVhbGl0eSBpbXBsZW1lbnRzIEVxdWFsaXR5PFN0cmluZz4gewogIGNvbnN0IENhc2VJbnNlbnNpdGl2ZUVxdWFsaXR5KCk7CgogIGJvb2wgZXF1YWxzKFN0cmluZyBzdHJpbmcxLCBTdHJpbmcgc3RyaW5nMikgPT4KICAgICAgZXF1YWxzSWdub3JlQXNjaWlDYXNlKHN0cmluZzEsIHN0cmluZzIpOwoKICBpbnQgaGFzaChTdHJpbmcgc3RyaW5nKSA9PiBoYXNoSWdub3JlQXNjaWlDYXNlKHN0cmluZyk7CgogIGJvb2wgaXNWYWxpZEtleShPYmplY3Qgb2JqZWN0KSA9PiBvYmplY3QgaXMgU3RyaW5nOwp9CoHSAE5OPAEaARsBIwEsHTEBLAYxGwEkBkIwEQFJBkwSHQIBIwExBCIMHhwGCARQDDQIBE4mMDEfATIcAVAaGAFGASwBHhIgNQYSBAIBUAROEgRPS1EyGzEkJQIBSDMcMCglAgEbBE4EOzktPSYaPywBPjY+IiITJTMhTAYEASMwLhIiLiYxGwYuGi8RBAExAgEXBEgdBEY9BDs5LTUmTiwBLi42Hy4nRgYRBAEbLC5MRxIsLiYxGwYuGi8RBAEtAgE8HSYBMwEqNj4qKSkyFB8dJB0QBh8dNR0QBhgEARkwEiIuJgYuGi8RBAIBSQRRQDhQIz8gATECARYETEAzBE43BDs5LT1NIAEsAgEqBDlBEh4NDzIBFi01EgEkHDY6AgEWBEtGBDs5LTkiJBUyNB0hATAsNB4tPB89LSQtBh89LTUtBhEEARwrEh4sNUAGLhovEQQBLwIBOARLUAROSxYETU9PTCAwKwE4IgEcKkwGEgQBEiovBg4EAR4qKQYSBAIBIgRRGwROBDUETU0hBFAuMxgZShYcAUpPJioxFhsBGBVABhUaRAYXGEQIHEwIITIfPgYhBAEXOEwXPEQgOgYaBAFRAgFFBEE8IwExLwE6ATYCASRwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL2VxdWFsaXR5LmRhcnQ9c2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbGxlY3Rpb24vbGliL3NyYy9lcXVhbGl0eV9tYXAuZGFydISDLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJzsKCmltcG9ydCAnZXF1YWxpdHkuZGFydCc7CmltcG9ydCAnd3JhcHBlcnMuZGFydCc7CgovLy8gQSBbTWFwXSB3aG9zZSBrZXkgZXF1YWxpdHkgaXMgZGV0ZXJtaW5lZCBieSBhbiBbRXF1YWxpdHldIG9iamVjdC4KY2xhc3MgRXF1YWxpdHlNYXA8SywgVj4gZXh0ZW5kcyBEZWxlZ2F0aW5nTWFwPEssIFY+IHsKICAvLy8gQ3JlYXRlcyBhIG1hcCB3aXRoIGVxdWFsaXR5IGJhc2VkIG9uIFtlcXVhbGl0eV0uCiAgRXF1YWxpdHlNYXAoRXF1YWxpdHk8Sz4gZXF1YWxpdHkpCiAgICAgIDogc3VwZXIobmV3IExpbmtlZEhhc2hNYXAoCiAgICAgICAgICAgIGVxdWFsczogZXF1YWxpdHkuZXF1YWxzLAogICAgICAgICAgICBoYXNoQ29kZTogZXF1YWxpdHkuaGFzaCwKICAgICAgICAgICAgaXNWYWxpZEtleTogZXF1YWxpdHkuaXNWYWxpZEtleSkpOwoKICAvLy8gQ3JlYXRlcyBhIG1hcCB3aXRoIGVxdWFsaXR5IGJhc2VkIG9uIFtlcXVhbGl0eV0gdGhhdCBjb250YWlucyBhbGwKICAvLy8ga2V5LXZhbHVlIHBhaXJzIG9mIFtvdGhlcl0uCiAgLy8vCiAgLy8vIElmIFtvdGhlcl0gaGFzIG11bHRpcGxlIGtleXMgdGhhdCBhcmUgZXF1aXZhbGVudCBhY2NvcmRpbmcgdG8gW2VxdWFsaXR5XSwKICAvLy8gdGhlIGxhc3Qgb25lIHJlYWNoZWQgZHVyaW5nIGl0ZXJhdGlvbiB0YWtlcyBwcmVjZWRlbmNlLgogIEVxdWFsaXR5TWFwLmZyb20oRXF1YWxpdHk8Sz4gZXF1YWxpdHksIE1hcDxLLCBWPiBvdGhlcikKICAgICAgOiBzdXBlcihuZXcgTGlua2VkSGFzaE1hcCgKICAgICAgICAgICAgZXF1YWxzOiBlcXVhbGl0eS5lcXVhbHMsCiAgICAgICAgICAgIGhhc2hDb2RlOiBlcXVhbGl0eS5oYXNoLAogICAgICAgICAgICBpc1ZhbGlkS2V5OiBlcXVhbGl0eS5pc1ZhbGlkS2V5KSkgewogICAgYWRkQWxsKG90aGVyKTsKICB9Cn0KIQBOTjwBGgEYGAFGNjckISUlLwFIIgZQPjohJSUwEwQCAShwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL2VxdWFsaXR5X21hcC5kYXJ0PXNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jb2xsZWN0aW9uL2xpYi9zcmMvZXF1YWxpdHlfc2V0LmRhcnSEey8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbic7CgppbXBvcnQgJ2VxdWFsaXR5LmRhcnQnOwppbXBvcnQgJ3dyYXBwZXJzLmRhcnQnOwoKLy8vIEEgW01hcF0gd2hvc2Uga2V5IGVxdWFsaXR5IGlzIGRldGVybWluZWQgYnkgYW4gW0VxdWFsaXR5XSBvYmplY3QuCmNsYXNzIEVxdWFsaXR5U2V0PEU+IGV4dGVuZHMgRGVsZWdhdGluZ1NldDxFPiB7CiAgLy8vIENyZWF0ZXMgYSBzZXQgd2l0aCBlcXVhbGl0eSBiYXNlZCBvbiBbZXF1YWxpdHldLgogIEVxdWFsaXR5U2V0KEVxdWFsaXR5PEU+IGVxdWFsaXR5KQogICAgICA6IHN1cGVyKG5ldyBMaW5rZWRIYXNoU2V0KAogICAgICAgICAgICBlcXVhbHM6IGVxdWFsaXR5LmVxdWFscywKICAgICAgICAgICAgaGFzaENvZGU6IGVxdWFsaXR5Lmhhc2gsCiAgICAgICAgICAgIGlzVmFsaWRLZXk6IGVxdWFsaXR5LmlzVmFsaWRLZXkpKTsKCiAgLy8vIENyZWF0ZXMgYSBzZXQgd2l0aCBlcXVhbGl0eSBiYXNlZCBvbiBbZXF1YWxpdHldIHRoYXQgY29udGFpbnMgYWxsCiAgLy8vIGVsZW1lbnRzIGluIFtvdGhlcl0uCiAgLy8vCiAgLy8vIElmIFtvdGhlcl0gaGFzIG11bHRpcGxlIHZhbHVlcyB0aGF0IGFyZSBlcXVpdmFsZW50IGFjY29yZGluZyB0bwogIC8vLyBbZXF1YWxpdHldLCB0aGUgZmlyc3Qgb25lIHJlYWNoZWQgZHVyaW5nIGl0ZXJhdGlvbiB0YWtlcyBwcmVjZWRlbmNlLgogIEVxdWFsaXR5U2V0LmZyb20oRXF1YWxpdHk8RT4gZXF1YWxpdHksIEl0ZXJhYmxlPEU+IG90aGVyKQogICAgICA6IHN1cGVyKG5ldyBMaW5rZWRIYXNoU2V0KAogICAgICAgICAgICBlcXVhbHM6IGVxdWFsaXR5LmVxdWFscywKICAgICAgICAgICAgaGFzaENvZGU6IGVxdWFsaXR5Lmhhc2gsCiAgICAgICAgICAgIGlzVmFsaWRLZXk6IGVxdWFsaXR5LmlzVmFsaWRLZXkpKSB7CiAgICBhZGRBbGwob3RoZXIpOwogIH0KfQohAE5OPAEaARgYAUYwNyQhJSUvAUgbBkZLPCElJTATBAIBKHBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvZXF1YWxpdHlfc2V0LmRhcnQ6c2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbGxlY3Rpb24vbGliL3NyYy9mdW5jdGlvbnMuZGFydJvHLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJzsKaW1wb3J0ICdkYXJ0Om1hdGgnIGFzIG1hdGg7CgppbXBvcnQgJ3V0aWxzLmRhcnQnOwoKLy8gVE9ETyhud2Vpeik6IFdoZW4gc2RrIzI2NDg4IGlzIGZpeGVkLCB1c2Ugb3ZlcmxvYWRzIHRvIGVuc3VyZSB0aGF0IGlmIFtrZXldCi8vIG9yIFt2YWx1ZV0gaXNuJ3QgcGFzc2VkLCBgSzJgL2BWMmAgZGVmYXVsdHMgdG8gYEsxYC9gVjFgLCByZXNwZWN0aXZlbHkuCi8vLyBDcmVhdGVzIGEgbmV3IG1hcCBmcm9tIFttYXBdIHdpdGggbmV3IGtleXMgYW5kIHZhbHVlcy4KLy8vCi8vLyBUaGUgcmV0dXJuIHZhbHVlcyBvZiBba2V5XSBhcmUgdXNlZCBhcyB0aGUga2V5cyBhbmQgdGhlIHJldHVybiB2YWx1ZXMgb2YKLy8vIFt2YWx1ZV0gYXJlIHVzZWQgYXMgdGhlIHZhbHVlcyBmb3IgdGhlIG5ldyBtYXAuCk1hcDxLMiwgVjI+IG1hcE1hcDxLMSwgVjEsIEsyLCBWMj4oTWFwPEsxLCBWMT4gbWFwLAogICAge0syIGtleShLMSBrZXksIFYxIHZhbHVlKSwgVjIgdmFsdWUoSzEga2V5LCBWMSB2YWx1ZSl9KSB7CiAga2V5ID8/PSAobWFwS2V5LCBfKSA9PiBtYXBLZXkgYXMgSzI7CiAgdmFsdWUgPz89IChfLCBtYXBWYWx1ZSkgPT4gbWFwVmFsdWUgYXMgVjI7CgogIHZhciByZXN1bHQgPSA8SzIsIFYyPnt9OwogIG1hcC5mb3JFYWNoKChtYXBLZXksIG1hcFZhbHVlKSB7CiAgICByZXN1bHRba2V5KG1hcEtleSwgbWFwVmFsdWUpXSA9IHZhbHVlKG1hcEtleSwgbWFwVmFsdWUpOwogIH0pOwogIHJldHVybiByZXN1bHQ7Cn0KCi8vLyBSZXR1cm5zIGEgbmV3IG1hcCB3aXRoIGFsbCBrZXkvdmFsdWUgcGFpcnMgaW4gYm90aCBbbWFwMV0gYW5kIFttYXAyXS4KLy8vCi8vLyBJZiB0aGVyZSBhcmUga2V5cyB0aGF0IG9jY3VyIGluIGJvdGggbWFwcywgdGhlIFt2YWx1ZV0gZnVuY3Rpb24gaXMgdXNlZCB0bwovLy8gc2VsZWN0IHRoZSB2YWx1ZSB0aGF0IGdvZXMgaW50byB0aGUgcmVzdWx0aW5nIG1hcCBiYXNlZCBvbiB0aGUgdHdvIG9yaWdpbmFsCi8vLyB2YWx1ZXMuIElmIFt2YWx1ZV0gaXMgb21pdHRlZCwgdGhlIHZhbHVlIGZyb20gW21hcDJdIGlzIHVzZWQuCk1hcDxLLCBWPiBtZXJnZU1hcHM8SywgVj4oTWFwPEssIFY+IG1hcDEsIE1hcDxLLCBWPiBtYXAyLAogICAge1YgdmFsdWUoViB2YWx1ZTEsIFYgdmFsdWUyKX0pIHsKICB2YXIgcmVzdWx0ID0gbmV3IE1hcDxLLCBWPi5mcm9tKG1hcDEpOwogIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gcmVzdWx0Li5hZGRBbGwobWFwMik7CgogIG1hcDIuZm9yRWFjaCgoa2V5LCBtYXBWYWx1ZSkgewogICAgcmVzdWx0W2tleV0gPQogICAgICAgIHJlc3VsdC5jb250YWluc0tleShrZXkpID8gdmFsdWUocmVzdWx0W2tleV0sIG1hcFZhbHVlKSA6IG1hcFZhbHVlOwogIH0pOwogIHJldHVybiByZXN1bHQ7Cn0KCi8vLyBHcm91cHMgdGhlIGVsZW1lbnRzIGluIFt2YWx1ZXNdIGJ5IHRoZSB2YWx1ZSByZXR1cm5lZCBieSBba2V5XS4KLy8vCi8vLyBSZXR1cm5zIGEgbWFwIGZyb20ga2V5cyBjb21wdXRlZCBieSBba2V5XSB0byBhIGxpc3Qgb2YgYWxsIHZhbHVlcyBmb3Igd2hpY2gKLy8vIFtrZXldIHJldHVybnMgdGhhdCBrZXkuIFRoZSB2YWx1ZXMgYXBwZWFyIGluIHRoZSBsaXN0IGluIHRoZSBzYW1lIHJlbGF0aXZlCi8vLyBvcmRlciBhcyBpbiBbdmFsdWVzXS4KTWFwPFQsIExpc3Q8Uz4+IGdyb3VwQnk8UywgVD4oSXRlcmFibGU8Uz4gdmFsdWVzLCBUIGtleShTIGVsZW1lbnQpKSB7CiAgdmFyIG1hcCA9IDxULCBMaXN0PFM+Pnt9OwogIGZvciAodmFyIGVsZW1lbnQgaW4gdmFsdWVzKSB7CiAgICB2YXIgbGlzdCA9IG1hcC5wdXRJZkFic2VudChrZXkoZWxlbWVudCksICgpID0+IFtdKTsKICAgIGxpc3QuYWRkKGVsZW1lbnQpOwogIH0KICByZXR1cm4gbWFwOwp9CgovLy8gUmV0dXJucyB0aGUgZWxlbWVudCBvZiBbdmFsdWVzXSBmb3Igd2hpY2ggW29yZGVyQnldIHJldHVybnMgdGhlIG1pbmltdW0KLy8vIHZhbHVlLgovLy8KLy8vIFRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgW29yZGVyQnldIGFyZSBjb21wYXJlZCB1c2luZyB0aGUgW2NvbXBhcmVdIGZ1bmN0aW9uLgovLy8gSWYgW2NvbXBhcmVdIGlzIG9taXR0ZWQsIHZhbHVlcyBtdXN0IGltcGxlbWVudCBbQ29tcGFyYWJsZTxUPl0gYW5kIHRoZXkgYXJlCi8vLyBjb21wYXJlZCB1c2luZyB0aGVpciBbQ29tcGFyYWJsZS5jb21wYXJlVG9dLgpTIG1pbkJ5PFMsIFQ+KEl0ZXJhYmxlPFM+IHZhbHVlcywgVCBvcmRlckJ5KFMgZWxlbWVudCksCiAgICB7aW50IGNvbXBhcmUoVCB2YWx1ZTEsIFQgdmFsdWUyKX0pIHsKICBjb21wYXJlID8/PSBkZWZhdWx0Q29tcGFyZTxUPigpOwoKICBTIG1pblZhbHVlOwogIFQgbWluT3JkZXJCeTsKICBmb3IgKHZhciBlbGVtZW50IGluIHZhbHVlcykgewogICAgdmFyIGVsZW1lbnRPcmRlckJ5ID0gb3JkZXJCeShlbGVtZW50KTsKICAgIGlmIChtaW5PcmRlckJ5ID09IG51bGwgfHwgY29tcGFyZShlbGVtZW50T3JkZXJCeSwgbWluT3JkZXJCeSkgPCAwKSB7CiAgICAgIG1pblZhbHVlID0gZWxlbWVudDsKICAgICAgbWluT3JkZXJCeSA9IGVsZW1lbnRPcmRlckJ5OwogICAgfQogIH0KICByZXR1cm4gbWluVmFsdWU7Cn0KCi8vLyBSZXR1cm5zIHRoZSBlbGVtZW50IG9mIFt2YWx1ZXNdIGZvciB3aGljaCBbb3JkZXJCeV0gcmV0dXJucyB0aGUgbWF4aW11bQovLy8gdmFsdWUuCi8vLwovLy8gVGhlIHZhbHVlcyByZXR1cm5lZCBieSBbb3JkZXJCeV0gYXJlIGNvbXBhcmVkIHVzaW5nIHRoZSBbY29tcGFyZV0gZnVuY3Rpb24uCi8vLyBJZiBbY29tcGFyZV0gaXMgb21pdHRlZCwgdmFsdWVzIG11c3QgaW1wbGVtZW50IFtDb21wYXJhYmxlPFQ+XSBhbmQgdGhleSBhcmUKLy8vIGNvbXBhcmVkIHVzaW5nIHRoZWlyIFtDb21wYXJhYmxlLmNvbXBhcmVUb10uClMgbWF4Qnk8UywgVD4oSXRlcmFibGU8Uz4gdmFsdWVzLCBUIG9yZGVyQnkoUyBlbGVtZW50KSwKICAgIHtpbnQgY29tcGFyZShUIHZhbHVlMSwgVCB2YWx1ZTIpfSkgewogIGNvbXBhcmUgPz89IGRlZmF1bHRDb21wYXJlPFQ+KCk7CgogIFMgbWF4VmFsdWU7CiAgVCBtYXhPcmRlckJ5OwogIGZvciAodmFyIGVsZW1lbnQgaW4gdmFsdWVzKSB7CiAgICB2YXIgZWxlbWVudE9yZGVyQnkgPSBvcmRlckJ5KGVsZW1lbnQpOwogICAgaWYgKG1heE9yZGVyQnkgPT0gbnVsbCB8fCBjb21wYXJlKGVsZW1lbnRPcmRlckJ5LCBtYXhPcmRlckJ5KSA+IDApIHsKICAgICAgbWF4VmFsdWUgPSBlbGVtZW50OwogICAgICBtYXhPcmRlckJ5ID0gZWxlbWVudE9yZGVyQnk7CiAgICB9CiAgfQogIHJldHVybiBtYXhWYWx1ZTsKfQoKLy8vIFJldHVybnMgdGhlIFt0cmFuc2l0aXZlIGNsb3N1cmVdW10gb2YgW2dyYXBoXS4KLy8vCi8vLyBbdHJhbnNpdGl2ZSBjbG9zdXJlXTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVHJhbnNpdGl2ZV9jbG9zdXJlCi8vLwovLy8gSW50ZXJwcmV0cyBbZ3JhcGhdIGFzIGEgZGlyZWN0ZWQgZ3JhcGggd2l0aCBhIHZlcnRleCBmb3IgZWFjaCBrZXkgYW5kIGVkZ2VzCi8vLyBmcm9tIGVhY2gga2V5IHRvIHRoZSB2YWx1ZXMgdGhhdCB0aGUga2V5IG1hcHMgdG8uCi8vLwovLy8gQXNzdW1lcyB0aGF0IGV2ZXJ5IHZlcnRleCBpbiB0aGUgZ3JhcGggaGFzIGEga2V5IHRvIHJlcHJlc2VudCBpdCwgZXZlbiBpZgovLy8gdGhhdCB2ZXJ0ZXggaGFzIG5vIG91dGdvaW5nIGVkZ2VzLiBUaGlzIGlzbid0IGNoZWNrZWQsIGJ1dCBpZiBpdCdzIG5vdAovLy8gc2F0aXNmaWVkLCB0aGUgZnVuY3Rpb24gbWF5IGNyYXNoIG9yIHByb3ZpZGUgdW5leHBlY3RlZCBvdXRwdXQuIEZvciBleGFtcGxlLAovLy8gYHsiYSI6IFsiYiJdfWAgaXMgbm90IHZhbGlkLCBidXQgYHsiYSI6IFsiYiJdLCAiYiI6IFtdfWAgaXMuCk1hcDxULCBTZXQ8VD4+IHRyYW5zaXRpdmVDbG9zdXJlPFQ+KE1hcDxULCBJdGVyYWJsZTxUPj4gZ3JhcGgpIHsKICAvLyBUaGlzIHVzZXMgW1dhcnNoYWxsJ3MgYWxnb3JpdGhtXVtdLCBtb2RpZmllZCBub3QgdG8gYWRkIGEgdmVydGV4IGZyb20gZWFjaAogIC8vIG5vZGUgdG8gaXRzZWxmLgogIC8vCiAgLy8gW1dhcnNoYWxsJ3MgYWxnb3JpdGhtXTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmxveWQlRTIlODAlOTNXYXJzaGFsbF9hbGdvcml0aG0jQXBwbGljYXRpb25zX2FuZF9nZW5lcmFsaXphdGlvbnMuCiAgdmFyIHJlc3VsdCA9IDxULCBTZXQ8VD4+e307CiAgZ3JhcGguZm9yRWFjaCgodmVydGV4LCBlZGdlcykgewogICAgcmVzdWx0W3ZlcnRleF0gPSBuZXcgU2V0PFQ+LmZyb20oZWRnZXMpOwogIH0pOwoKICAvLyBMaXN0cyBhcmUgZmFzdGVyIHRvIGl0ZXJhdGUgdGhhbiBtYXBzLCBzbyB3ZSBjcmVhdGUgYSBsaXN0IHNpbmNlIHdlJ3JlCiAgLy8gaXRlcmF0aW5nIHJlcGVhdGVkbHkuCiAgdmFyIGtleXMgPSBncmFwaC5rZXlzLnRvTGlzdCgpOwogIGZvciAodmFyIHZlcnRleDEgaW4ga2V5cykgewogICAgZm9yICh2YXIgdmVydGV4MiBpbiBrZXlzKSB7CiAgICAgIGZvciAodmFyIHZlcnRleDMgaW4ga2V5cykgewogICAgICAgIGlmIChyZXN1bHRbdmVydGV4Ml0uY29udGFpbnModmVydGV4MSkgJiYKICAgICAgICAgICAgcmVzdWx0W3ZlcnRleDFdLmNvbnRhaW5zKHZlcnRleDMpKSB7CiAgICAgICAgICByZXN1bHRbdmVydGV4Ml0uYWRkKHZlcnRleDMpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgcmV0dXJuIHJlc3VsdDsKfQoKLy8vIFJldHVybnMgdGhlIFtzdHJvbmdseSBjb25uZWN0ZWQgY29tcG9uZW50c11bXSBvZiBbZ3JhcGhdLCBpbiB0b3BvbG9naWNhbAovLy8gb3JkZXIuCi8vLwovLy8gW3N0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnRzXTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3Ryb25nbHlfY29ubmVjdGVkX2NvbXBvbmVudAovLy8KLy8vIEludGVycHJldHMgW2dyYXBoXSBhcyBhIGRpcmVjdGVkIGdyYXBoIHdpdGggYSB2ZXJ0ZXggZm9yIGVhY2gga2V5IGFuZCBlZGdlcwovLy8gZnJvbSBlYWNoIGtleSB0byB0aGUgdmFsdWVzIHRoYXQgdGhlIGtleSBtYXBzIHRvLgovLy8KLy8vIEFzc3VtZXMgdGhhdCBldmVyeSB2ZXJ0ZXggaW4gdGhlIGdyYXBoIGhhcyBhIGtleSB0byByZXByZXNlbnQgaXQsIGV2ZW4gaWYKLy8vIHRoYXQgdmVydGV4IGhhcyBubyBvdXRnb2luZyBlZGdlcy4gVGhpcyBpc24ndCBjaGVja2VkLCBidXQgaWYgaXQncyBub3QKLy8vIHNhdGlzZmllZCwgdGhlIGZ1bmN0aW9uIG1heSBjcmFzaCBvciBwcm92aWRlIHVuZXhwZWN0ZWQgb3V0cHV0LiBGb3IgZXhhbXBsZSwKLy8vIGB7ImEiOiBbImIiXX1gIGlzIG5vdCB2YWxpZCwgYnV0IGB7ImEiOiBbImIiXSwgImIiOiBbXX1gIGlzLgpMaXN0PFNldDxUPj4gc3Ryb25nbHlDb25uZWN0ZWRDb21wb25lbnRzPFQ+KE1hcDxULCBJdGVyYWJsZTxUPj4gZ3JhcGgpIHsKICAvLyBUaGlzIHVzZXMgW1RhcmphbidzIGFsZ29yaXRobV1bXS4KICAvLwogIC8vIFtUYXJqYW4ncyBhbGdvcml0aG1dOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9UYXJqYW4lMjdzX3N0cm9uZ2x5X2Nvbm5lY3RlZF9jb21wb25lbnRzX2FsZ29yaXRobQogIHZhciBpbmRleCA9IDA7CiAgdmFyIHN0YWNrID0gPFQ+W107CiAgdmFyIHJlc3VsdCA9IDxTZXQ8VD4+W107CgogIC8vIFRoZSBvcmRlciBvZiB0aGVzZSBkb2Vzbid0IG1hdHRlciwgc28gd2UgdXNlIHVuLWxpbmtlZCBpbXBsZW1lbnRhdGlvbnMgdG8KICAvLyBhdm9pZCB1bm5lY2Vzc2FyeSBvdmVyaGVhZC4KICB2YXIgaW5kaWNlcyA9IG5ldyBIYXNoTWFwPFQsIGludD4oKTsKICB2YXIgbG93TGlua3MgPSBuZXcgSGFzaE1hcDxULCBpbnQ+KCk7CiAgdmFyIG9uU3RhY2sgPSBuZXcgSGFzaFNldDxUPigpOwoKICBzdHJvbmdDb25uZWN0KFQgdmVydGV4KSB7CiAgICBpbmRpY2VzW3ZlcnRleF0gPSBpbmRleDsKICAgIGxvd0xpbmtzW3ZlcnRleF0gPSBpbmRleDsKICAgIGluZGV4Kys7CgogICAgc3RhY2suYWRkKHZlcnRleCk7CiAgICBvblN0YWNrLmFkZCh2ZXJ0ZXgpOwoKICAgIGZvciAodmFyIHN1Y2Nlc3NvciBpbiBncmFwaFt2ZXJ0ZXhdKSB7CiAgICAgIGlmICghaW5kaWNlcy5jb250YWluc0tleShzdWNjZXNzb3IpKSB7CiAgICAgICAgc3Ryb25nQ29ubmVjdChzdWNjZXNzb3IpOwogICAgICAgIGxvd0xpbmtzW3ZlcnRleF0gPSBtYXRoLm1pbihsb3dMaW5rc1t2ZXJ0ZXhdLCBsb3dMaW5rc1tzdWNjZXNzb3JdKTsKICAgICAgfSBlbHNlIGlmIChvblN0YWNrLmNvbnRhaW5zKHN1Y2Nlc3NvcikpIHsKICAgICAgICBsb3dMaW5rc1t2ZXJ0ZXhdID0gbWF0aC5taW4obG93TGlua3NbdmVydGV4XSwgbG93TGlua3Nbc3VjY2Vzc29yXSk7CiAgICAgIH0KICAgIH0KCiAgICBpZiAobG93TGlua3NbdmVydGV4XSA9PSBpbmRpY2VzW3ZlcnRleF0pIHsKICAgICAgdmFyIGNvbXBvbmVudCA9IG5ldyBTZXQ8VD4oKTsKICAgICAgVCBuZWlnaGJvcjsKICAgICAgZG8gewogICAgICAgIG5laWdoYm9yID0gc3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgIG9uU3RhY2sucmVtb3ZlKG5laWdoYm9yKTsKICAgICAgICBjb21wb25lbnQuYWRkKG5laWdoYm9yKTsKICAgICAgfSB3aGlsZSAobmVpZ2hib3IgIT0gdmVydGV4KTsKICAgICAgcmVzdWx0LmFkZChjb21wb25lbnQpOwogICAgfQogIH0KCiAgZm9yICh2YXIgdmVydGV4IGluIGdyYXBoLmtleXMpIHsKICAgIGlmICghaW5kaWNlcy5jb250YWluc0tleSh2ZXJ0ZXgpKSBzdHJvbmdDb25uZWN0KHZlcnRleCk7CiAgfQoKICAvLyBUYXJqYW4ncyBhbGdvcml0aG0gcHJvZHVjZXMgYSByZXZlcnNlLXRvcG9sb2dpY2FsIHNvcnQsIHNvIHdlIHJldmVyc2UgaXQgdG8KICAvLyBnZXQgYSBub3JtYWwgdG9wb2xvZ2ljYWwgc29ydC4KICByZXR1cm4gcmVzdWx0LnJldmVyc2VkLnRvTGlzdCgpOwp9CoDNAE5OPAEaHAEVAU9LOwRNNDQ+Jy0BGyM9BhECAUoET1BCOiUpMgEhEksGEQIBRARQTxpGHCA4FwQOAgFMCwRQUDE4KSMBDhAgK0kaIwYEEwIBTAsEUFAxOCkjAQ4QICtJGiMGBBMCATMESwRQNgROS1FBQVAVBX4eIi0GAUwbIh4gIjExKAoIBgQBEQIBTQsEYARQNgROS1FBSScFbBEVGwFPIScoIgEcHR4NARcZASstIkwwTAgGAS8kEgsnIiEkHQYEASM9BAFRJCMCASVwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL2Z1bmN0aW9ucy5kYXJ0PXNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jb2xsZWN0aW9uL2xpYi9zcmMvaXRlcmFibGVfemlwLmRhcnSHHi8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgImRhcnQ6Y29sbGVjdGlvbiI7CgovLy8gSXRlcmFibGUgdGhhdCBpdGVyYXRlcyBvdmVyIGxpc3RzIG9mIHZhbHVlcyBmcm9tIG90aGVyIGl0ZXJhYmxlcy4KLy8vCi8vLyBXaGVuIFtpdGVyYXRvcl0gaXMgcmVhZCwgYW4gW0l0ZXJhdG9yXSBpcyBjcmVhdGVkIGZvciBlYWNoIFtJdGVyYWJsZV0gaW4KLy8vIHRoZSBbSXRlcmFibGVdIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuCi8vLwovLy8gQXMgbG9uZyBhcyBhbGwgdGhlc2UgaXRlcmF0b3JzIGhhdmUgYSBuZXh0IHZhbHVlLCB0aG9zZSBuZXh0IHZhbHVlcyBhcmUKLy8vIGNvbWJpbmVkIGludG8gYSBzaW5nbGUgbGlzdCwgd2hpY2ggYmVjb21lcyB0aGUgbmV4dCB2YWx1ZSBvZiB0aGlzCi8vLyBbSXRlcmFibGVdJ3MgW0l0ZXJhdG9yXS4gQXMgc29vbiBhcyBhbnkgb2YgdGhlIGl0ZXJhdG9ycyBydW4gb3V0LAovLy8gdGhlIHppcHBlZCBpdGVyYXRvciBhbHNvIHN0b3BzLgpjbGFzcyBJdGVyYWJsZVppcDxUPiBleHRlbmRzIEl0ZXJhYmxlQmFzZTxMaXN0PFQ+PiB7CiAgZmluYWwgSXRlcmFibGU8SXRlcmFibGU8VD4+IF9pdGVyYWJsZXM7CgogIEl0ZXJhYmxlWmlwKEl0ZXJhYmxlPEl0ZXJhYmxlPFQ+PiBpdGVyYWJsZXMpIDogdGhpcy5faXRlcmFibGVzID0gaXRlcmFibGVzOwoKICAvLy8gUmV0dXJucyBhbiBpdGVyYXRvciB0aGF0IGNvbWJpbmVzIHZhbHVlcyBvZiB0aGUgaXRlcmFibGVzJyBpdGVyYXRvcnMKICAvLy8gYXMgbG9uZyBhcyB0aGV5IGFsbCBoYXZlIHZhbHVlcy4KICBJdGVyYXRvcjxMaXN0PFQ+PiBnZXQgaXRlcmF0b3IgewogICAgdmFyIGl0ZXJhdG9ycyA9IF9pdGVyYWJsZXMubWFwKCh4KSA9PiB4Lml0ZXJhdG9yKS50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKICAgIC8vIFRPRE8obHJuKTogUmV0dXJuIGFuIGVtcHR5IGl0ZXJhdG9yIGRpcmVjdGx5IGlmIGl0ZXJhdG9ycyBpcyBlbXB0eT8KICAgIHJldHVybiBuZXcgX0l0ZXJhdG9yWmlwPFQ+KGl0ZXJhdG9ycyk7CiAgfQp9CgpjbGFzcyBfSXRlcmF0b3JaaXA8VD4gaW1wbGVtZW50cyBJdGVyYXRvcjxMaXN0PFQ+PiB7CiAgZmluYWwgTGlzdDxJdGVyYXRvcjxUPj4gX2l0ZXJhdG9yczsKICBMaXN0PFQ+IF9jdXJyZW50OwoKICBfSXRlcmF0b3JaaXAoTGlzdDxJdGVyYXRvcjxUPj4gaXRlcmF0b3JzKSA6IF9pdGVyYXRvcnMgPSBpdGVyYXRvcnM7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoX2l0ZXJhdG9ycy5pc0VtcHR5KSByZXR1cm4gZmFsc2U7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9pdGVyYXRvcnMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKCFfaXRlcmF0b3JzW2ldLm1vdmVOZXh0KCkpIHsKICAgICAgICBfY3VycmVudCA9IG51bGw7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICBfY3VycmVudCA9IG5ldyBMaXN0KF9pdGVyYXRvcnMubGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX2l0ZXJhdG9ycy5sZW5ndGg7IGkrKykgewogICAgICBfY3VycmVudFtpXSA9IF9pdGVyYXRvcnNbaV0uY3VycmVudDsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgTGlzdDxUPiBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKfQo2AE5OPAEaAUYETS4ETEZGJDUqAU4BSycjT0srBAIBNSYUAUYBFCoyJxkWCAYsMisGEQQBIwIBKHBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvaXRlcmFibGVfemlwLmRhcnQ/c2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbGxlY3Rpb24vbGliL3NyYy9wcmlvcml0eV9xdWV1ZS5kYXJ0q6cvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICJkYXJ0OmNvbGxlY3Rpb24iOwoKaW1wb3J0ICJ1dGlscy5kYXJ0IjsKCi8vLyBBIHByaW9yaXR5IHF1ZXVlIGlzIGEgcHJpb3JpdHkgYmFzZWQgd29yay1saXN0IG9mIGVsZW1lbnRzLgovLy8KLy8vIFRoZSBxdWV1ZSBhbGxvd3MgYWRkaW5nIGVsZW1lbnRzLCBhbmQgcmVtb3ZpbmcgdGhlbSBhZ2FpbiBpbiBwcmlvcml0eSBvcmRlci4KYWJzdHJhY3QgY2xhc3MgUHJpb3JpdHlRdWV1ZTxFPiB7CiAgLy8vIENyZWF0ZXMgYW4gZW1wdHkgW1ByaW9yaXR5UXVldWVdLgogIC8vLwogIC8vLyBUaGUgY3JlYXRlZCBbUHJpb3JpdHlRdWV1ZV0gaXMgYSBwbGFpbiBbSGVhcFByaW9yaXR5UXVldWVdLgogIC8vLwogIC8vLyBUaGUgW2NvbXBhcmlzb25dIGlzIGEgW0NvbXBhcmF0b3JdIHVzZWQgdG8gY29tcGFyZSB0aGUgcHJpb3JpdHkgb2YKICAvLy8gZWxlbWVudHMuIEFuIGVsZW1lbnQgdGhhdCBjb21wYXJlcyBhcyBsZXNzIHRoYW4gYW5vdGhlciBlbGVtZW50IGhhcwogIC8vLyBhIGhpZ2hlciBwcmlvcml0eS4KICAvLy8KICAvLy8gSWYgW2NvbXBhcmlzb25dIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIFtDb21wYXJhYmxlLmNvbXBhcmVdLiBJZiB0aGlzCiAgLy8vIGlzIHRoZSBjYXNlLCBgRWAgbXVzdCBpbXBsZW1lbnQgW0NvbXBhcmFibGVdLCBhbmQgdGhpcyBpcyBjaGVja2VkIGF0CiAgLy8vIHJ1bnRpbWUgZm9yIGV2ZXJ5IGNvbXBhcmlzb24uCiAgZmFjdG9yeSBQcmlvcml0eVF1ZXVlKFtpbnQgY29tcGFyaXNvbihFIGUxLCBFIGUyKV0pID0gSGVhcFByaW9yaXR5UXVldWU8RT47CgogIC8vLyBOdW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHF1ZXVlLgogIGludCBnZXQgbGVuZ3RoOwoKICAvLy8gV2hldGhlciB0aGUgcXVldWUgaXMgZW1wdHkuCiAgYm9vbCBnZXQgaXNFbXB0eTsKCiAgLy8vIFdoZXRoZXIgdGhlIHF1ZXVlIGhhcyBhbnkgZWxlbWVudHMuCiAgYm9vbCBnZXQgaXNOb3RFbXB0eTsKCiAgLy8vIENoZWNrcyBpZiBbb2JqZWN0XSBpcyBpbiB0aGUgcXVldWUuCiAgLy8vCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZWxlbWVudCBpcyBmb3VuZC4KICBib29sIGNvbnRhaW5zKEUgb2JqZWN0KTsKCiAgLy8vIEFkZHMgZWxlbWVudCB0byB0aGUgcXVldWUuCiAgLy8vCiAgLy8vIFRoZSBlbGVtZW50IHdpbGwgYmVjb21lIHRoZSBuZXh0IHRvIGJlIHJlbW92ZWQgYnkgW3JlbW92ZUZpcnN0XQogIC8vLyB3aGVuIGFsbCBlbGVtZW50cyB3aXRoIGhpZ2hlciBwcmlvcml0eSBoYXZlIGJlZW4gcmVtb3ZlZC4KICB2b2lkIGFkZChFIGVsZW1lbnQpOwoKICAvLy8gQWRkcyBhbGwgW2VsZW1lbnRzXSB0byB0aGUgcXVldWUuCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gZWxlbWVudHMpOwoKICAvLy8gUmV0dXJucyB0aGUgbmV4dCBlbGVtZW50IHRoYXQgd2lsbCBiZSByZXR1cm5lZCBieSBbcmVtb3ZlRmlyc3RdLgogIC8vLwogIC8vLyBUaGUgZWxlbWVudCBpcyBub3QgcmVtb3ZlZCBmcm9tIHRoZSBxdWV1ZS4KICAvLy8KICAvLy8gVGhlIHF1ZXVlIG11c3Qgbm90IGJlIGVtcHR5IHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLgogIEUgZ2V0IGZpcnN0OwoKICAvLy8gUmVtb3ZlcyBhbmQgcmV0dXJucyB0aGUgZWxlbWVudCB3aXRoIHRoZSBoaWdoZXN0IHByaW9yaXR5LgogIC8vLwogIC8vLyBSZXBlYXRlZGx5IGNhbGxpbmcgdGhpcyBtZXRob2QsIHdpdGhvdXQgYWRkaW5nIGVsZW1lbnQgaW4gYmV0d2VlbiwKICAvLy8gaXMgZ3VhcmFudGVlZCB0byByZXR1cm4gZWxlbWVudHMgaW4gbm9uLWRlY3JlYXNpbmcgb3JkZXIgYXMsIHNwZWNpZmllZCBieQogIC8vLyBbY29tcGFyaXNvbl0uCiAgLy8vCiAgLy8vIFRoZSBxdWV1ZSBtdXN0IG5vdCBiZSBlbXB0eSB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC4KICBFIHJlbW92ZUZpcnN0KCk7CgogIC8vLyBSZW1vdmVzIGFuIGVsZW1lbnQgdGhhdCBjb21wYXJlcyBlcXVhbCB0byBbZWxlbWVudF0gaW4gdGhlIHF1ZXVlLgogIC8vLwogIC8vLyBSZXR1cm5zIHRydWUgaWYgYW4gZWxlbWVudCBpcyBmb3VuZCBhbmQgcmVtb3ZlZCwKICAvLy8gYW5kIGZhbHNlIGlmIG5vIGVxdWFsIGVsZW1lbnQgaXMgZm91bmQuCiAgYm9vbCByZW1vdmUoRSBlbGVtZW50KTsKCiAgLy8vIFJlbW92ZXMgYWxsIHRoZSBlbGVtZW50cyBmcm9tIHRoaXMgcXVldWUgYW5kIHJldHVybnMgdGhlbS4KICAvLy8KICAvLy8gVGhlIHJldHVybmVkIGl0ZXJhYmxlIGhhcyBubyBzcGVjaWZpZWQgb3JkZXIuCiAgSXRlcmFibGU8RT4gcmVtb3ZlQWxsKCk7CgogIC8vLyBSZW1vdmVzIGFsbCB0aGUgZWxlbWVudHMgZnJvbSB0aGlzIHF1ZXVlLgogIHZvaWQgY2xlYXIoKTsKCiAgLy8vIFJldHVybnMgYSBsaXN0IG9mIHRoZSBlbGVtZW50cyBvZiB0aGlzIHF1ZXVlIGluIHByaW9yaXR5IG9yZGVyLgogIC8vLwogIC8vLyBUaGUgcXVldWUgaXMgbm90IG1vZGlmaWVkLgogIC8vLwogIC8vLyBUaGUgb3JkZXIgaXMgdGhlIG9yZGVyIHRoYXQgdGhlIGVsZW1lbnRzIHdvdWxkIGJlIGluIGlmIHRoZXkgd2VyZQogIC8vLyByZW1vdmVkIGZyb20gdGhpcyBxdWV1ZSB1c2luZyBbcmVtb3ZlRmlyc3RdLgogIExpc3Q8RT4gdG9MaXN0KCk7CgogIC8vLyBSZXR1cm4gYSBjb21wYXJhdG9yIGJhc2VkIHNldCB1c2luZyB0aGUgY29tcGFyYXRvciBvZiB0aGlzIHF1ZXVlLgogIC8vLwogIC8vLyBUaGUgcXVldWUgaXMgbm90IG1vZGlmaWVkLgogIC8vLwogIC8vLyBUaGUgcmV0dXJuZWQgW1NldF0gaXMgY3VycmVudGx5IGEgW1NwbGF5VHJlZVNldF0sCiAgLy8vIGJ1dCB0aGlzIG1heSBjaGFuZ2UgYXMgb3RoZXIgb3JkZXJlZCBzZXRzIGFyZSBpbXBsZW1lbnRlZC4KICAvLy8KICAvLy8gVGhlIHNldCBjb250YWlucyBhbGwgdGhlIGVsZW1lbnRzIG9mIHRoaXMgcXVldWUuCiAgLy8vIElmIGFuIGVsZW1lbnQgb2NjdXJzIG1vcmUgdGhhbiBvbmNlIGluIHRoZSBxdWV1ZSwKICAvLy8gdGhlIHNldCB3aWxsIGNvbnRhaW4gaXQgb25seSBvbmNlLgogIFNldDxFPiB0b1NldCgpOwp9CgovLy8gSGVhcCBiYXNlZCBwcmlvcml0eSBxdWV1ZS4KLy8vCi8vLyBUaGUgZWxlbWVudHMgYXJlIGtlcHQgaW4gYSBoZWFwIHN0cnVjdHVyZSwKLy8vIHdoZXJlIHRoZSBlbGVtZW50IHdpdGggdGhlIGhpZ2hlc3QgcHJpb3JpdHkgaXMgaW1tZWRpYXRlbHkgYWNjZXNzaWJsZSwKLy8vIGFuZCBtb2RpZnlpbmcgYSBzaW5nbGUgZWxlbWVudCB0YWtlcwovLy8gbG9nYXJpdGhtaWMgdGltZSBpbiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9uIGF2ZXJhZ2UuCi8vLwovLy8gKiBUaGUgW2FkZF0gYW5kIFtyZW1vdmVGaXJzdF0gb3BlcmF0aW9ucyB0YWtlIGFtb3J0aXplZCBsb2dhcml0aG1pYyB0aW1lLAovLy8gICBPKGxvZyhuKSksIGJ1dCBtYXkgb2NjYXNpb25hbGx5IHRha2UgbGluZWFyIHRpbWUgd2hlbiBncm93aW5nIHRoZSBjYXBhY2l0eQovLy8gICBvZiB0aGUgaGVhcC4KLy8vICogVGhlIFthZGRBbGxdIG9wZXJhdGlvbiB3b3JrcyBhcyBkb2luZyByZXBlYXRlZCBbYWRkXSBvcGVyYXRpb25zLgovLy8gKiBUaGUgW2ZpcnN0XSBnZXR0ZXIgdGFrZXMgY29uc3RhbnQgdGltZSwgTygxKS4KLy8vICogVGhlIFtjbGVhcl0gYW5kIFtyZW1vdmVBbGxdIG1ldGhvZHMgYWxzbyB0YWtlIGNvbnN0YW50IHRpbWUsIE8oMSkuCi8vLyAqIFRoZSBbY29udGFpbnNdIGFuZCBbcmVtb3ZlXSBvcGVyYXRpb25zIG1heSBuZWVkIHRvIHNlYXJjaCB0aGUgZW50aXJlCi8vLyAgIHF1ZXVlIGZvciB0aGUgZWxlbWVudHMsIHRha2luZyBPKG4pIHRpbWUuCi8vLyAqIFRoZSBbdG9MaXN0XSBvcGVyYXRpb24gZWZmZWN0aXZlbHkgc29ydHMgdGhlIGVsZW1lbnRzLCB0YWtpbmcgTyhuKmxvZyhuKSkKLy8vICAgdGltZS4KLy8vICogVGhlIFt0b1NldF0gb3BlcmF0aW9uIGVmZmVjdGl2ZWx5IGFkZHMgZWFjaCBlbGVtZW50IHRvIHRoZSBuZXcgc2V0LCB0YWtpbmcKLy8vICAgYW4gZXhwZWN0ZWQgTyhuKmxvZyhuKSkgdGltZS4KY2xhc3MgSGVhcFByaW9yaXR5UXVldWU8RT4gaW1wbGVtZW50cyBQcmlvcml0eVF1ZXVlPEU+IHsKICAvLy8gSW5pdGlhbCBjYXBhY2l0eSBvZiBhIHF1ZXVlIHdoZW4gY3JlYXRlZCwgb3Igd2hlbiBhZGRlZCB0byBhZnRlciBhCiAgLy8vIFtjbGVhcl0uCiAgLy8vCiAgLy8vIE51bWJlciBjYW4gYmUgYW55IHBvc2l0aXZlIHZhbHVlLiBQaWNraW5nIGEgc2l6ZSB0aGF0IGdpdmVzIGEgd2hvbGUKICAvLy8gbnVtYmVyIG9mICJ0cmVlIGxldmVscyIgaW4gdGhlIGhlYXAgaXMgb25seSBkb25lIGZvciBhZXN0aGV0aWMgcmVhc29ucy4KICBzdGF0aWMgY29uc3QgaW50IF9JTklUSUFMX0NBUEFDSVRZID0gNzsKCiAgLy8vIFRoZSBjb21wYXJpc29uIGJlaW5nIHVzZWQgdG8gY29tcGFyZSB0aGUgcHJpb3JpdHkgb2YgZWxlbWVudHMuCiAgZmluYWwgQ29tcGFyYXRvcjxFPiBjb21wYXJpc29uOwoKICAvLy8gTGlzdCBpbXBsZW1lbnRhdGlvbiBvZiBhIGhlYXAuCiAgTGlzdDxFPiBfcXVldWUgPSBuZXcgTGlzdDxFPihfSU5JVElBTF9DQVBBQ0lUWSk7CgogIC8vLyBOdW1iZXIgb2YgZWxlbWVudHMgaW4gcXVldWUuCiAgLy8vCiAgLy8vIFRoZSBoZWFwIGlzIGltcGxlbWVudGVkIGluIHRoZSBmaXJzdCBbX2xlbmd0aF0gZW50cmllcyBvZiBbX3F1ZXVlXS4KICBpbnQgX2xlbmd0aCA9IDA7CgogIC8vLyBDcmVhdGUgYSBuZXcgcHJpb3JpdHkgcXVldWUuCiAgLy8vCiAgLy8vIFRoZSBbY29tcGFyaXNvbl0gaXMgYSBbQ29tcGFyYXRvcl0gdXNlZCB0byBjb21wYXJlIHRoZSBwcmlvcml0eSBvZgogIC8vLyBlbGVtZW50cy4gQW4gZWxlbWVudCB0aGF0IGNvbXBhcmVzIGFzIGxlc3MgdGhhbiBhbm90aGVyIGVsZW1lbnQgaGFzCiAgLy8vIGEgaGlnaGVyIHByaW9yaXR5LgogIC8vLwogIC8vLyBJZiBbY29tcGFyaXNvbl0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gW0NvbXBhcmFibGUuY29tcGFyZV0uIElmIHRoaXMKICAvLy8gaXMgdGhlIGNhc2UsIGBFYCBtdXN0IGltcGxlbWVudCBbQ29tcGFyYWJsZV0sIGFuZCB0aGlzIGlzIGNoZWNrZWQgYXQKICAvLy8gcnVudGltZSBmb3IgZXZlcnkgY29tcGFyaXNvbi4KICBIZWFwUHJpb3JpdHlRdWV1ZShbaW50IGNvbXBhcmlzb24oRSBlMSwgRSBlMildKQogICAgICA6IGNvbXBhcmlzb24gPSBjb21wYXJpc29uID8/IGRlZmF1bHRDb21wYXJlPEU+KCk7CgogIHZvaWQgYWRkKEUgZWxlbWVudCkgewogICAgX2FkZChlbGVtZW50KTsKICB9CgogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IGVsZW1lbnRzKSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiBlbGVtZW50cykgewogICAgICBfYWRkKGVsZW1lbnQpOwogICAgfQogIH0KCiAgdm9pZCBjbGVhcigpIHsKICAgIF9xdWV1ZSA9IGNvbnN0IFtdOwogICAgX2xlbmd0aCA9IDA7CiAgfQoKICBib29sIGNvbnRhaW5zKEUgb2JqZWN0KSB7CiAgICByZXR1cm4gX2xvY2F0ZShvYmplY3QpID49IDA7CiAgfQoKICBFIGdldCBmaXJzdCB7CiAgICBpZiAoX2xlbmd0aCA9PSAwKSB0aHJvdyBuZXcgU3RhdGVFcnJvcigiTm8gc3VjaCBlbGVtZW50Iik7CiAgICByZXR1cm4gX3F1ZXVlWzBdOwogIH0KCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfbGVuZ3RoID09IDA7CgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX2xlbmd0aCAhPSAwOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfbGVuZ3RoOwoKICBib29sIHJlbW92ZShFIGVsZW1lbnQpIHsKICAgIGludCBpbmRleCA9IF9sb2NhdGUoZWxlbWVudCk7CiAgICBpZiAoaW5kZXggPCAwKSByZXR1cm4gZmFsc2U7CiAgICBFIGxhc3QgPSBfcmVtb3ZlTGFzdCgpOwogICAgaWYgKGluZGV4IDwgX2xlbmd0aCkgewogICAgICBpbnQgY29tcCA9IGNvbXBhcmlzb24obGFzdCwgZWxlbWVudCk7CiAgICAgIGlmIChjb21wIDw9IDApIHsKICAgICAgICBfYnViYmxlVXAobGFzdCwgaW5kZXgpOwogICAgICB9IGVsc2UgewogICAgICAgIF9idWJibGVEb3duKGxhc3QsIGluZGV4KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBJdGVyYWJsZTxFPiByZW1vdmVBbGwoKSB7CiAgICBMaXN0PEU+IHJlc3VsdCA9IF9xdWV1ZTsKICAgIGludCBsZW5ndGggPSBfbGVuZ3RoOwogICAgX3F1ZXVlID0gY29uc3QgW107CiAgICBfbGVuZ3RoID0gMDsKICAgIHJldHVybiByZXN1bHQudGFrZShsZW5ndGgpOwogIH0KCiAgRSByZW1vdmVGaXJzdCgpIHsKICAgIGlmIChfbGVuZ3RoID09IDApIHRocm93IG5ldyBTdGF0ZUVycm9yKCJObyBzdWNoIGVsZW1lbnQiKTsKICAgIEUgcmVzdWx0ID0gX3F1ZXVlWzBdOwogICAgRSBsYXN0ID0gX3JlbW92ZUxhc3QoKTsKICAgIGlmIChfbGVuZ3RoID4gMCkgewogICAgICBfYnViYmxlRG93bihsYXN0LCAwKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBMaXN0PEU+IHRvTGlzdCgpIHsKICAgIExpc3Q8RT4gbGlzdCA9IG5ldyBMaXN0PEU+KCkuLmxlbmd0aCA9IF9sZW5ndGg7CiAgICBsaXN0LnNldFJhbmdlKDAsIF9sZW5ndGgsIF9xdWV1ZSk7CiAgICBsaXN0LnNvcnQoY29tcGFyaXNvbik7CiAgICByZXR1cm4gbGlzdDsKICB9CgogIFNldDxFPiB0b1NldCgpIHsKICAgIFNldDxFPiBzZXQgPSBuZXcgU3BsYXlUcmVlU2V0PEU+KGNvbXBhcmlzb24pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfbGVuZ3RoOyBpKyspIHsKICAgICAgc2V0LmFkZChfcXVldWVbaV0pOwogICAgfQogICAgcmV0dXJuIHNldDsKICB9CgogIC8vLyBSZXR1cm5zIHNvbWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHF1ZXVlLgogIC8vLwogIC8vLyBUaGUgZm9ybWF0IGlzbid0IHNpZ25pZmljYW50LCBhbmQgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiBfcXVldWUudGFrZShfbGVuZ3RoKS50b1N0cmluZygpOwogIH0KCiAgLy8vIEFkZCBlbGVtZW50IHRvIHRoZSBxdWV1ZS4KICAvLy8KICAvLy8gR3Jvd3MgdGhlIGNhcGFjaXR5IGlmIHRoZSBiYWNraW5nIGxpc3QgaXMgZnVsbC4KICB2b2lkIF9hZGQoRSBlbGVtZW50KSB7CiAgICBpZiAoX2xlbmd0aCA9PSBfcXVldWUubGVuZ3RoKSBfZ3JvdygpOwogICAgX2J1YmJsZVVwKGVsZW1lbnQsIF9sZW5ndGgrKyk7CiAgfQoKICAvLy8gRmluZCB0aGUgaW5kZXggb2YgYW4gb2JqZWN0IGluIHRoZSBoZWFwLgogIC8vLwogIC8vLyBSZXR1cm5zIC0xIGlmIHRoZSBvYmplY3QgaXMgbm90IGZvdW5kLgogIGludCBfbG9jYXRlKEUgb2JqZWN0KSB7CiAgICBpZiAoX2xlbmd0aCA9PSAwKSByZXR1cm4gLTE7CiAgICAvLyBDb3VudCBwb3NpdGlvbnMgZnJvbSBvbmUgaW5zdGVhZCBvZiB6ZXJvLiBUaGlzIGdpdmVzIHRoZSBudW1iZXJzCiAgICAvLyBzb21lIG5pY2UgcHJvcGVydGllcy4gRm9yIGV4YW1wbGUsIGFsbCByaWdodCBjaGlsZHJlbiBhcmUgb2RkLAogICAgLy8gdGhlaXIgbGVmdCBzaWJsaW5nIGlzIGV2ZW4sIGFuZCB0aGUgcGFyZW50IGlzIGZvdW5kIGJ5IHNoaWZ0aW5nCiAgICAvLyByaWdodCBieSBvbmUuCiAgICAvLyBWYWxpZCByYW5nZSBmb3IgcG9zaXRpb24gaXMgWzEuLl9sZW5ndGhdLCBpbmNsdXNpdmUuCiAgICBpbnQgcG9zaXRpb24gPSAxOwogICAgLy8gUHJlLW9yZGVyIGRlcHRoIGZpcnN0IHNlYXJjaCwgb21pdCBjaGlsZCBub2RlcyBpZiB0aGUgY3VycmVudAogICAgLy8gbm9kZSBoYXMgbG93ZXIgcHJpb3JpdHkgdGhhbiBbb2JqZWN0XSwgYmVjYXVzZSBhbGwgbm9kZXMgbG93ZXIKICAgIC8vIGluIHRoZSBoZWFwIHdpbGwgYWxzbyBoYXZlIGxvd2VyIHByaW9yaXR5LgogICAgZG8gewogICAgICBpbnQgaW5kZXggPSBwb3NpdGlvbiAtIDE7CiAgICAgIEUgZWxlbWVudCA9IF9xdWV1ZVtpbmRleF07CiAgICAgIGludCBjb21wID0gY29tcGFyaXNvbihlbGVtZW50LCBvYmplY3QpOwogICAgICBpZiAoY29tcCA9PSAwKSByZXR1cm4gaW5kZXg7CiAgICAgIGlmIChjb21wIDwgMCkgewogICAgICAgIC8vIEVsZW1lbnQgbWF5IGJlIGluIHN1YnRyZWUuCiAgICAgICAgLy8gQ29udGludWUgd2l0aCB0aGUgbGVmdCBjaGlsZCwgaWYgaXQgaXMgdGhlcmUuCiAgICAgICAgaW50IGxlZnRDaGlsZFBvc2l0aW9uID0gcG9zaXRpb24gKiAyOwogICAgICAgIGlmIChsZWZ0Q2hpbGRQb3NpdGlvbiA8PSBfbGVuZ3RoKSB7CiAgICAgICAgICBwb3NpdGlvbiA9IGxlZnRDaGlsZFBvc2l0aW9uOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIEZpbmQgdGhlIG5leHQgcmlnaHQgc2libGluZyBvciByaWdodCBhbmNlc3RvciBzaWJsaW5nLgogICAgICBkbyB7CiAgICAgICAgd2hpbGUgKHBvc2l0aW9uLmlzT2RkKSB7CiAgICAgICAgICAvLyBXaGlsZSBwb3NpdGlvbiBpcyBhIHJpZ2h0IGNoaWxkLCBnbyB0byB0aGUgcGFyZW50LgogICAgICAgICAgcG9zaXRpb24gPj49IDE7CiAgICAgICAgfQogICAgICAgIC8vIFRoZW4gZ28gdG8gdGhlIHJpZ2h0IHNpYmxpbmcgb2YgdGhlIGxlZnQtY2hpbGQuCiAgICAgICAgcG9zaXRpb24gKz0gMTsKICAgICAgfSB3aGlsZSAocG9zaXRpb24gPiBfbGVuZ3RoKTsgLy8gSGFwcGVucyBpZiBsYXN0IGVsZW1lbnQgaXMgYSBsZWZ0IGNoaWxkLgogICAgfSB3aGlsZSAocG9zaXRpb24gIT0gMSk7IC8vIEF0IHJvb3QgYWdhaW4uIEhhcHBlbnMgZm9yIHJpZ2h0LW1vc3QgZWxlbWVudC4KICAgIHJldHVybiAtMTsKICB9CgogIEUgX3JlbW92ZUxhc3QoKSB7CiAgICBpbnQgbmV3TGVuZ3RoID0gX2xlbmd0aCAtIDE7CiAgICBFIGxhc3QgPSBfcXVldWVbbmV3TGVuZ3RoXTsKICAgIF9xdWV1ZVtuZXdMZW5ndGhdID0gbnVsbDsKICAgIF9sZW5ndGggPSBuZXdMZW5ndGg7CiAgICByZXR1cm4gbGFzdDsKICB9CgogIC8vLyBQbGFjZSBbZWxlbWVudF0gaW4gaGVhcCBhdCBbaW5kZXhdIG9yIGFib3ZlLgogIC8vLwogIC8vLyBQdXQgZWxlbWVudCBpbnRvIHRoZSBlbXB0eSBjZWxsIGF0IGBpbmRleGAuCiAgLy8vIFdoaWxlIHRoZSBgZWxlbWVudGAgaGFzIGhpZ2hlciBwcmlvcml0eSB0aGFuIHRoZQogIC8vLyBwYXJlbnQsIHN3YXAgaXQgd2l0aCB0aGUgcGFyZW50LgogIHZvaWQgX2J1YmJsZVVwKEUgZWxlbWVudCwgaW50IGluZGV4KSB7CiAgICB3aGlsZSAoaW5kZXggPiAwKSB7CiAgICAgIGludCBwYXJlbnRJbmRleCA9IChpbmRleCAtIDEpIH4vIDI7CiAgICAgIEUgcGFyZW50ID0gX3F1ZXVlW3BhcmVudEluZGV4XTsKICAgICAgaWYgKGNvbXBhcmlzb24oZWxlbWVudCwgcGFyZW50KSA+IDApIGJyZWFrOwogICAgICBfcXVldWVbaW5kZXhdID0gcGFyZW50OwogICAgICBpbmRleCA9IHBhcmVudEluZGV4OwogICAgfQogICAgX3F1ZXVlW2luZGV4XSA9IGVsZW1lbnQ7CiAgfQoKICAvLy8gUGxhY2UgW2VsZW1lbnRdIGluIGhlYXAgYXQgW2luZGV4XSBvciBhYm92ZS4KICAvLy8KICAvLy8gUHV0IGVsZW1lbnQgaW50byB0aGUgZW1wdHkgY2VsbCBhdCBgaW5kZXhgLgogIC8vLyBXaGlsZSB0aGUgYGVsZW1lbnRgIGhhcyBsb3dlciBwcmlvcml0eSB0aGFuIGVpdGhlciBjaGlsZCwKICAvLy8gc3dhcCBpdCB3aXRoIHRoZSBoaWdoZXN0IHByaW9yaXR5IGNoaWxkLgogIHZvaWQgX2J1YmJsZURvd24oRSBlbGVtZW50LCBpbnQgaW5kZXgpIHsKICAgIGludCByaWdodENoaWxkSW5kZXggPSBpbmRleCAqIDIgKyAyOwogICAgd2hpbGUgKHJpZ2h0Q2hpbGRJbmRleCA8IF9sZW5ndGgpIHsKICAgICAgaW50IGxlZnRDaGlsZEluZGV4ID0gcmlnaHRDaGlsZEluZGV4IC0gMTsKICAgICAgRSBsZWZ0Q2hpbGQgPSBfcXVldWVbbGVmdENoaWxkSW5kZXhdOwogICAgICBFIHJpZ2h0Q2hpbGQgPSBfcXVldWVbcmlnaHRDaGlsZEluZGV4XTsKICAgICAgaW50IGNvbXAgPSBjb21wYXJpc29uKGxlZnRDaGlsZCwgcmlnaHRDaGlsZCk7CiAgICAgIGludCBtaW5DaGlsZEluZGV4OwogICAgICBFIG1pbkNoaWxkOwogICAgICBpZiAoY29tcCA8IDApIHsKICAgICAgICBtaW5DaGlsZCA9IGxlZnRDaGlsZDsKICAgICAgICBtaW5DaGlsZEluZGV4ID0gbGVmdENoaWxkSW5kZXg7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWluQ2hpbGQgPSByaWdodENoaWxkOwogICAgICAgIG1pbkNoaWxkSW5kZXggPSByaWdodENoaWxkSW5kZXg7CiAgICAgIH0KICAgICAgY29tcCA9IGNvbXBhcmlzb24oZWxlbWVudCwgbWluQ2hpbGQpOwogICAgICBpZiAoY29tcCA8PSAwKSB7CiAgICAgICAgX3F1ZXVlW2luZGV4XSA9IGVsZW1lbnQ7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9xdWV1ZVtpbmRleF0gPSBtaW5DaGlsZDsKICAgICAgaW5kZXggPSBtaW5DaGlsZEluZGV4OwogICAgICByaWdodENoaWxkSW5kZXggPSBpbmRleCAqIDIgKyAyOwogICAgfQogICAgaW50IGxlZnRDaGlsZEluZGV4ID0gcmlnaHRDaGlsZEluZGV4IC0gMTsKICAgIGlmIChsZWZ0Q2hpbGRJbmRleCA8IF9sZW5ndGgpIHsKICAgICAgRSBjaGlsZCA9IF9xdWV1ZVtsZWZ0Q2hpbGRJbmRleF07CiAgICAgIGludCBjb21wID0gY29tcGFyaXNvbihlbGVtZW50LCBjaGlsZCk7CiAgICAgIGlmIChjb21wID4gMCkgewogICAgICAgIF9xdWV1ZVtpbmRleF0gPSBjaGlsZDsKICAgICAgICBpbmRleCA9IGxlZnRDaGlsZEluZGV4OwogICAgICB9CiAgICB9CiAgICBfcXVldWVbaW5kZXhdID0gZWxlbWVudDsKICB9CgogIC8vLyBHcm93cyB0aGUgY2FwYWNpdHkgb2YgdGhlIGxpc3QgaG9sZGluZyB0aGUgaGVhcC4KICAvLy8KICAvLy8gQ2FsbGVkIHdoZW4gdGhlIGxpc3QgaXMgZnVsbC4KICB2b2lkIF9ncm93KCkgewogICAgaW50IG5ld0NhcGFjaXR5ID0gX3F1ZXVlLmxlbmd0aCAqIDIgKyAxOwogICAgaWYgKG5ld0NhcGFjaXR5IDwgX0lOSVRJQUxfQ0FQQUNJVFkpIG5ld0NhcGFjaXR5ID0gX0lOSVRJQUxfQ0FQQUNJVFk7CiAgICBMaXN0PEU+IG5ld1F1ZXVlID0gbmV3IExpc3Q8RT4obmV3Q2FwYWNpdHkpOwogICAgbmV3UXVldWUuc2V0UmFuZ2UoMCwgX2xlbmd0aCwgX3F1ZXVlKTsKICAgIF9xdWV1ZSA9IG5ld1F1ZXVlOwogIH0KfQqBagBOTjwBGgEVAUAEUSIoBkIGSUoZBk9LJE4BJxIBIhQBKhcBKgYsGwEhBkZAFwEoJQFHBjEGPg8BQQZJUBQGPhMBSAY3LhoBQQY0GwEwEAFGBiEGSDMUAUgGIQY4QQY3OCkSAgEfBC9LKTsETlETRzRJSzBQDFEkOUkPBkpOKgFFIgElMwEjBkoTASMGSUoZBk9LJDI4ARgTBAEmIhUGBAERFxEEARwhBAEQPxYEASQBJwEdARsiIRwbLBcgDyIIBhEEARwdGhcRIAQBFD8aHBccBhMEARU0JxsRBAETMigaBhAEATAGQhYsBAEgBjYZKyMEAS8GLRohSEZHFTwWRUYyCSAhLiMWJjkuLCgUCghACyFAGgo7F1BPDwQBFCEgHhkRBAEzBjI3JykYKiYyHhsGHQQBMwYyQC8rKSgwLC40GRIWHigPHykILBchEAggHScGLiQoLRYfIAgGHQQBNwYkES1KMSsXBAIBKnBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvcHJpb3JpdHlfcXVldWUuZGFydDtzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29sbGVjdGlvbi9saWIvc3JjL3F1ZXVlX2xpc3QuZGFydJ5RLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJzsKCi8vLyBBIGNsYXNzIHRoYXQgZWZmaWNpZW50bHkgaW1wbGVtZW50cyBib3RoIFtRdWV1ZV0gYW5kIFtMaXN0XS4KLy8gVE9ETyhud2Vpeik6IEN1cnJlbnRseSB0aGlzIGNvZGUgaXMgY29waWVkIGFsbW9zdCB2ZXJiYXRpbSBmcm9tCi8vIGRhcnQ6Y29sbGVjdGlvbi4gVGhlIG9ubHkgY2hhbmdlcyBhcmUgdG8gaW1wbGVtZW50IExpc3QgYW5kIHRvIHJlbW92ZSBtZXRob2RzCi8vIHRoYXQgYXJlIHJlZHVuZGFudCB3aXRoIExpc3RNaXhpbi4gUmVtb3ZlIG9yIHNpbXBsaWZ5IGl0IHdoZW4gaXNzdWUgMjEzMzAgaXMKLy8gZml4ZWQuCmNsYXNzIFF1ZXVlTGlzdDxFPiBleHRlbmRzIE9iamVjdCB3aXRoIExpc3RNaXhpbjxFPiBpbXBsZW1lbnRzIFF1ZXVlPEU+IHsKICAvLy8gQWRhcHRzIFtzb3VyY2VdIHRvIGJlIGEgYFF1ZXVlTGlzdDxUPmAuCiAgLy8vCiAgLy8vIEFueSB0aW1lIHRoZSBjbGFzcyB3b3VsZCBwcm9kdWNlIGFuIGVsZW1lbnQgdGhhdCBpcyBub3QgYSBbVF0sIHRoZSBlbGVtZW50CiAgLy8vIGFjY2VzcyB3aWxsIHRocm93LgogIC8vLwogIC8vLyBBbnkgdGltZSBhIFtUXSB2YWx1ZSBpcyBhdHRlbXB0ZWQgc3RvcmVkIGludG8gdGhlIGFkYXB0ZWQgY2xhc3MsIHRoZSBzdG9yZQogIC8vLyB3aWxsIHRocm93IHVubGVzcyB0aGUgdmFsdWUgaXMgYWxzbyBhbiBpbnN0YW5jZSBvZiBbU10uCiAgLy8vCiAgLy8vIElmIGFsbCBhY2Nlc3NlZCBlbGVtZW50cyBvZiBbc291cmNlXSBhcmUgYWN0dWFsbHkgaW5zdGFuY2VzIG9mIFtUXSBhbmQgaWYKICAvLy8gYWxsIGVsZW1lbnRzIHN0b3JlZCBpbiB0aGUgcmV0dXJuZWQgIGFyZSBhY3R1YWxseSBpbnN0YW5jZSBvZiBbU10sCiAgLy8vIHRoZW4gdGhlIHJldHVybmVkIGluc3RhbmNlIGNhbiBiZSB1c2VkIGFzIGEgYFF1ZXVlTGlzdDxUPmAuCiAgc3RhdGljIFF1ZXVlTGlzdDxUPiBfY2FzdEZyb208UywgVD4oUXVldWVMaXN0PFM+IHNvdXJjZSkgewogICAgcmV0dXJuIG5ldyBfQ2FzdFF1ZXVlTGlzdDxTLCBUPihzb3VyY2UpOwogIH0KCiAgc3RhdGljIGNvbnN0IGludCBfSU5JVElBTF9DQVBBQ0lUWSA9IDg7CiAgTGlzdDxFPiBfdGFibGU7CiAgaW50IF9oZWFkOwogIGludCBfdGFpbDsKCiAgLy8vIENyZWF0ZSBhbiBlbXB0eSBxdWV1ZS4KICAvLy8KICAvLy8gSWYgW2luaXRpYWxDYXBhY2l0eV0gaXMgZ2l2ZW4sIHByZXBhcmUgdGhlIHF1ZXVlIGZvciBhdCBsZWFzdCB0aGF0IG1hbnkKICAvLy8gZWxlbWVudHMuCiAgUXVldWVMaXN0KFtpbnQgaW5pdGlhbENhcGFjaXR5XSkKICAgICAgOiBfaGVhZCA9IDAsCiAgICAgICAgX3RhaWwgPSAwIHsKICAgIGlmIChpbml0aWFsQ2FwYWNpdHkgPT0gbnVsbCB8fCBpbml0aWFsQ2FwYWNpdHkgPCBfSU5JVElBTF9DQVBBQ0lUWSkgewogICAgICBpbml0aWFsQ2FwYWNpdHkgPSBfSU5JVElBTF9DQVBBQ0lUWTsKICAgIH0gZWxzZSBpZiAoIV9pc1Bvd2VyT2YyKGluaXRpYWxDYXBhY2l0eSkpIHsKICAgICAgaW5pdGlhbENhcGFjaXR5ID0gX25leHRQb3dlck9mMihpbml0aWFsQ2FwYWNpdHkpOwogICAgfQogICAgYXNzZXJ0KF9pc1Bvd2VyT2YyKGluaXRpYWxDYXBhY2l0eSkpOwogICAgX3RhYmxlID0gbmV3IExpc3Q8RT4oaW5pdGlhbENhcGFjaXR5KTsKICB9CgogIC8vIEFuIGludGVybmFsIGNvbnN0cnVjdG9yIGZvciB1c2UgYnkgX0Nhc3RRdWV1ZUxpc3QuCiAgUXVldWVMaXN0Ll8oKTsKCiAgLy8vIENyZWF0ZSBhIHF1ZXVlIGluaXRpYWxseSBjb250YWluaW5nIHRoZSBlbGVtZW50cyBvZiBbc291cmNlXS4KICBmYWN0b3J5IFF1ZXVlTGlzdC5mcm9tKEl0ZXJhYmxlPEU+IHNvdXJjZSkgewogICAgaWYgKHNvdXJjZSBpcyBMaXN0KSB7CiAgICAgIGludCBsZW5ndGggPSBzb3VyY2UubGVuZ3RoOwogICAgICBRdWV1ZUxpc3Q8RT4gcXVldWUgPSBuZXcgUXVldWVMaXN0KGxlbmd0aCArIDEpOwogICAgICBhc3NlcnQocXVldWUuX3RhYmxlLmxlbmd0aCA+IGxlbmd0aCk7CiAgICAgIHZhciBzb3VyY2VMaXN0ID0gc291cmNlOwogICAgICBxdWV1ZS5fdGFibGUuc2V0UmFuZ2UoMCwgbGVuZ3RoLCBzb3VyY2VMaXN0LCAwKTsKICAgICAgcXVldWUuX3RhaWwgPSBsZW5ndGg7CiAgICAgIHJldHVybiBxdWV1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgUXVldWVMaXN0PEU+KCkuLmFkZEFsbChzb3VyY2UpOwogICAgfQogIH0KCiAgLy8gQ29sbGVjdGlvbiBpbnRlcmZhY2UuCgogIHZvaWQgYWRkKEUgZWxlbWVudCkgewogICAgX2FkZChlbGVtZW50KTsKICB9CgogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKSB7CiAgICBpZiAoaXRlcmFibGUgaXMgTGlzdCkgewogICAgICB2YXIgbGlzdCA9IGl0ZXJhYmxlOwogICAgICBpbnQgYWRkQ291bnQgPSBsaXN0Lmxlbmd0aDsKICAgICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgICBpZiAobGVuZ3RoICsgYWRkQ291bnQgPj0gX3RhYmxlLmxlbmd0aCkgewogICAgICAgIF9wcmVHcm93KGxlbmd0aCArIGFkZENvdW50KTsKICAgICAgICAvLyBBZnRlciBwcmVHcm93LCBhbGwgZWxlbWVudHMgYXJlIGF0IHRoZSBzdGFydCBvZiB0aGUgbGlzdC4KICAgICAgICBfdGFibGUuc2V0UmFuZ2UobGVuZ3RoLCBsZW5ndGggKyBhZGRDb3VudCwgbGlzdCwgMCk7CiAgICAgICAgX3RhaWwgKz0gYWRkQ291bnQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gQWRkaW5nIGFkZENvdW50IGVsZW1lbnRzIHdvbid0IHJlYWNoIF9oZWFkLgogICAgICAgIGludCBlbmRTcGFjZSA9IF90YWJsZS5sZW5ndGggLSBfdGFpbDsKICAgICAgICBpZiAoYWRkQ291bnQgPCBlbmRTcGFjZSkgewogICAgICAgICAgX3RhYmxlLnNldFJhbmdlKF90YWlsLCBfdGFpbCArIGFkZENvdW50LCBsaXN0LCAwKTsKICAgICAgICAgIF90YWlsICs9IGFkZENvdW50OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbnQgcHJlU3BhY2UgPSBhZGRDb3VudCAtIGVuZFNwYWNlOwogICAgICAgICAgX3RhYmxlLnNldFJhbmdlKF90YWlsLCBfdGFpbCArIGVuZFNwYWNlLCBsaXN0LCAwKTsKICAgICAgICAgIF90YWJsZS5zZXRSYW5nZSgwLCBwcmVTcGFjZSwgbGlzdCwgZW5kU3BhY2UpOwogICAgICAgICAgX3RhaWwgPSBwcmVTcGFjZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGZvciAoRSBlbGVtZW50IGluIGl0ZXJhYmxlKSBfYWRkKGVsZW1lbnQpOwogICAgfQogIH0KCiAgUXVldWVMaXN0PFQ+IGNhc3Q8VD4oKSA9PiBRdWV1ZUxpc3QuX2Nhc3RGcm9tPEUsIFQ+KHRoaXMpOwoKICBAZGVwcmVjYXRlZAogIFF1ZXVlTGlzdDxUPiByZXR5cGU8VD4oKSA9PiBjYXN0PFQ+KCk7CgogIFN0cmluZyB0b1N0cmluZygpID0+IEl0ZXJhYmxlQmFzZS5pdGVyYWJsZVRvRnVsbFN0cmluZyh0aGlzLCAieyIsICJ9Iik7CgogIC8vIFF1ZXVlIGludGVyZmFjZS4KCiAgdm9pZCBhZGRMYXN0KEUgZWxlbWVudCkgewogICAgX2FkZChlbGVtZW50KTsKICB9CgogIHZvaWQgYWRkRmlyc3QoRSBlbGVtZW50KSB7CiAgICBfaGVhZCA9IChfaGVhZCAtIDEpICYgKF90YWJsZS5sZW5ndGggLSAxKTsKICAgIF90YWJsZVtfaGVhZF0gPSBlbGVtZW50OwogICAgaWYgKF9oZWFkID09IF90YWlsKSBfZ3JvdygpOwogIH0KCiAgRSByZW1vdmVGaXJzdCgpIHsKICAgIGlmIChfaGVhZCA9PSBfdGFpbCkgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIk5vIGVsZW1lbnQiKTsKICAgIEUgcmVzdWx0ID0gX3RhYmxlW19oZWFkXTsKICAgIF90YWJsZVtfaGVhZF0gPSBudWxsOwogICAgX2hlYWQgPSAoX2hlYWQgKyAxKSAmIChfdGFibGUubGVuZ3RoIC0gMSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRSByZW1vdmVMYXN0KCkgewogICAgaWYgKF9oZWFkID09IF90YWlsKSB0aHJvdyBuZXcgU3RhdGVFcnJvcigiTm8gZWxlbWVudCIpOwogICAgX3RhaWwgPSAoX3RhaWwgLSAxKSAmIChfdGFibGUubGVuZ3RoIC0gMSk7CiAgICBFIHJlc3VsdCA9IF90YWJsZVtfdGFpbF07CiAgICBfdGFibGVbX3RhaWxdID0gbnVsbDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBMaXN0IGludGVyZmFjZS4KCiAgaW50IGdldCBsZW5ndGggPT4gKF90YWlsIC0gX2hlYWQpICYgKF90YWJsZS5sZW5ndGggLSAxKTsKCiAgc2V0IGxlbmd0aChpbnQgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCJMZW5ndGggJHZhbHVlIG1heSBub3QgYmUgbmVnYXRpdmUuIik7CgogICAgaW50IGRlbHRhID0gdmFsdWUgLSBsZW5ndGg7CiAgICBpZiAoZGVsdGEgPj0gMCkgewogICAgICBpZiAoX3RhYmxlLmxlbmd0aCA8PSB2YWx1ZSkgewogICAgICAgIF9wcmVHcm93KHZhbHVlKTsKICAgICAgfQogICAgICBfdGFpbCA9IChfdGFpbCArIGRlbHRhKSAmIChfdGFibGUubGVuZ3RoIC0gMSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpbnQgbmV3VGFpbCA9IF90YWlsICsgZGVsdGE7IC8vIFtkZWx0YV0gaXMgbmVnYXRpdmUuCiAgICBpZiAobmV3VGFpbCA+PSAwKSB7CiAgICAgIF90YWJsZS5maWxsUmFuZ2UobmV3VGFpbCwgX3RhaWwsIG51bGwpOwogICAgfSBlbHNlIHsKICAgICAgbmV3VGFpbCArPSBfdGFibGUubGVuZ3RoOwogICAgICBfdGFibGUuZmlsbFJhbmdlKDAsIF90YWlsLCBudWxsKTsKICAgICAgX3RhYmxlLmZpbGxSYW5nZShuZXdUYWlsLCBfdGFibGUubGVuZ3RoLCBudWxsKTsKICAgIH0KICAgIF90YWlsID0gbmV3VGFpbDsKICB9CgogIEUgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggJGluZGV4IG11c3QgYmUgaW4gdGhlIHJhbmdlIFswLi4kbGVuZ3RoKS4iKTsKICAgIH0KCiAgICByZXR1cm4gX3RhYmxlWyhfaGVhZCArIGluZGV4KSAmIChfdGFibGUubGVuZ3RoIC0gMSldOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBFIHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggJGluZGV4IG11c3QgYmUgaW4gdGhlIHJhbmdlIFswLi4kbGVuZ3RoKS4iKTsKICAgIH0KCiAgICBfdGFibGVbKF9oZWFkICsgaW5kZXgpICYgKF90YWJsZS5sZW5ndGggLSAxKV0gPSB2YWx1ZTsKICB9CgogIC8vIEludGVybmFsIGhlbHBlciBmdW5jdGlvbnMuCgogIC8vLyBXaGV0aGVyIFtudW1iZXJdIGlzIGEgcG93ZXIgb2YgdHdvLgogIC8vLwogIC8vLyBPbmx5IHdvcmtzIGZvciBwb3NpdGl2ZSBudW1iZXJzLgogIHN0YXRpYyBib29sIF9pc1Bvd2VyT2YyKGludCBudW1iZXIpID0+IChudW1iZXIgJiAobnVtYmVyIC0gMSkpID09IDA7CgogIC8vLyBSb3VuZHMgW251bWJlcl0gdXAgdG8gdGhlIG5lYXJlc3QgcG93ZXIgb2YgMi4KICAvLy8KICAvLy8gSWYgW251bWJlcl0gaXMgYSBwb3dlciBvZiAyIGFscmVhZHksIGl0IGlzIHJldHVybmVkLgogIC8vLwogIC8vLyBPbmx5IHdvcmtzIGZvciBwb3NpdGl2ZSBudW1iZXJzLgogIHN0YXRpYyBpbnQgX25leHRQb3dlck9mMihpbnQgbnVtYmVyKSB7CiAgICBhc3NlcnQobnVtYmVyID4gMCk7CiAgICBudW1iZXIgPSAobnVtYmVyIDw8IDEpIC0gMTsKICAgIGZvciAoOzspIHsKICAgICAgaW50IG5leHROdW1iZXIgPSBudW1iZXIgJiAobnVtYmVyIC0gMSk7CiAgICAgIGlmIChuZXh0TnVtYmVyID09IDApIHJldHVybiBudW1iZXI7CiAgICAgIG51bWJlciA9IG5leHROdW1iZXI7CiAgICB9CiAgfQoKICAvLy8gQWRkcyBlbGVtZW50IGF0IGVuZCBvZiBxdWV1ZS4gVXNlZCBieSBib3RoIFthZGRdIGFuZCBbYWRkQWxsXS4KICB2b2lkIF9hZGQoRSBlbGVtZW50KSB7CiAgICBfdGFibGVbX3RhaWxdID0gZWxlbWVudDsKICAgIF90YWlsID0gKF90YWlsICsgMSkgJiAoX3RhYmxlLmxlbmd0aCAtIDEpOwogICAgaWYgKF9oZWFkID09IF90YWlsKSBfZ3JvdygpOwogIH0KCiAgLy8vIEdyb3cgdGhlIHRhYmxlIHdoZW4gZnVsbC4KICB2b2lkIF9ncm93KCkgewogICAgTGlzdDxFPiBuZXdUYWJsZSA9IG5ldyBMaXN0PEU+KF90YWJsZS5sZW5ndGggKiAyKTsKICAgIGludCBzcGxpdCA9IF90YWJsZS5sZW5ndGggLSBfaGVhZDsKICAgIG5ld1RhYmxlLnNldFJhbmdlKDAsIHNwbGl0LCBfdGFibGUsIF9oZWFkKTsKICAgIG5ld1RhYmxlLnNldFJhbmdlKHNwbGl0LCBzcGxpdCArIF9oZWFkLCBfdGFibGUsIDApOwogICAgX2hlYWQgPSAwOwogICAgX3RhaWwgPSBfdGFibGUubGVuZ3RoOwogICAgX3RhYmxlID0gbmV3VGFibGU7CiAgfQoKICBpbnQgX3dyaXRlVG9MaXN0KExpc3Q8RT4gdGFyZ2V0KSB7CiAgICBhc3NlcnQodGFyZ2V0Lmxlbmd0aCA+PSBsZW5ndGgpOwogICAgaWYgKF9oZWFkIDw9IF90YWlsKSB7CiAgICAgIGludCBsZW5ndGggPSBfdGFpbCAtIF9oZWFkOwogICAgICB0YXJnZXQuc2V0UmFuZ2UoMCwgbGVuZ3RoLCBfdGFibGUsIF9oZWFkKTsKICAgICAgcmV0dXJuIGxlbmd0aDsKICAgIH0gZWxzZSB7CiAgICAgIGludCBmaXJzdFBhcnRTaXplID0gX3RhYmxlLmxlbmd0aCAtIF9oZWFkOwogICAgICB0YXJnZXQuc2V0UmFuZ2UoMCwgZmlyc3RQYXJ0U2l6ZSwgX3RhYmxlLCBfaGVhZCk7CiAgICAgIHRhcmdldC5zZXRSYW5nZShmaXJzdFBhcnRTaXplLCBmaXJzdFBhcnRTaXplICsgX3RhaWwsIF90YWJsZSwgMCk7CiAgICAgIHJldHVybiBfdGFpbCArIGZpcnN0UGFydFNpemU7CiAgICB9CiAgfQoKICAvLy8gR3Jvd3MgdGhlIHRhYmxlIGV2ZW4gaWYgaXQgaXMgbm90IGZ1bGwuCiAgdm9pZCBfcHJlR3JvdyhpbnQgbmV3RWxlbWVudENvdW50KSB7CiAgICBhc3NlcnQobmV3RWxlbWVudENvdW50ID49IGxlbmd0aCk7CgogICAgLy8gQWRkIDEuNXggZXh0cmEgcm9vbSB0byBlbnN1cmUgdGhhdCB0aGVyZSdzIHJvb20gZm9yIG1vcmUgZWxlbWVudHMgYWZ0ZXIKICAgIC8vIGV4cGFuc2lvbi4KICAgIG5ld0VsZW1lbnRDb3VudCArPSBuZXdFbGVtZW50Q291bnQgPj4gMTsKICAgIGludCBuZXdDYXBhY2l0eSA9IF9uZXh0UG93ZXJPZjIobmV3RWxlbWVudENvdW50KTsKICAgIExpc3Q8RT4gbmV3VGFibGUgPSBuZXcgTGlzdDxFPihuZXdDYXBhY2l0eSk7CiAgICBfdGFpbCA9IF93cml0ZVRvTGlzdChuZXdUYWJsZSk7CiAgICBfdGFibGUgPSBuZXdUYWJsZTsKICAgIF9oZWFkID0gMDsKICB9Cn0KCmNsYXNzIF9DYXN0UXVldWVMaXN0PFMsIFQ+IGV4dGVuZHMgUXVldWVMaXN0PFQ+IHsKICBmaW5hbCBRdWV1ZUxpc3Q8Uz4gX2RlbGVnYXRlOwoKICBfQ2FzdFF1ZXVlTGlzdCh0aGlzLl9kZWxlZ2F0ZSkgOiBzdXBlci5fKCkgewogICAgX3RhYmxlID0gX2RlbGVnYXRlLl90YWJsZS5jYXN0PFQ+KCk7CiAgfQoKICBpbnQgZ2V0IF9oZWFkID0+IF9kZWxlZ2F0ZS5faGVhZDsKICBzZXQgX2hlYWQoaW50IHZhbHVlKSA9PiBfZGVsZWdhdGUuX2hlYWQgPSB2YWx1ZTsKCiAgaW50IGdldCBfdGFpbCA9PiBfZGVsZWdhdGUuX3RhaWw7CiAgc2V0IF90YWlsKGludCB2YWx1ZSkgPT4gX2RlbGVnYXRlLl90YWlsID0gdmFsdWU7Cn0KgQYATk48ARoBQUNRUApKLgZRGQZRPgZQSUI9LQQBKhINDQEdBk4QIxMUSiswOAYqKwQBOBEBRC8aIjYsHzccFA0xBgQBGwEYEwQBJhwbIiAwJUU9Gw83LiM9HREuPTgcCggNMQYEAT0BDikBSgEWARwTBAEdLx0hBAEUPB4aLxMEARM8Lx4aEwQBFQE7ARpPASAWJBkINQ4GATkYLg0gKDYGFQQBHShPBgE6BAEqKE8GATsEASABKgYnRwE0BjsGJykYIA8uKhsGBAFFGR0vIQQBIBE3JzA4DxsXBAElJRoiMRUNMThIJAYEAS4nJwFPEi02MSQXDwQCATIgAS8pBAEkMwEkMwIBJnBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvcXVldWVfbGlzdC5kYXJ0OnNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jb2xsZWN0aW9uL2xpYi9zcmMvdW5pb25fc2V0LmRhcnSNYC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbic7CgppbXBvcnQgJ3VubW9kaWZpYWJsZV93cmFwcGVycy5kYXJ0JzsKCi8vLyBBIHNpbmdsZSBzZXQgdGhhdCBwcm92aWRlcyBhIHZpZXcgb2YgdGhlIHVuaW9uIG92ZXIgYSBzZXQgb2Ygc2V0cy4KLy8vCi8vLyBTaW5jZSB0aGlzIGlzIGp1c3QgYSB2aWV3LCBpdCByZWZsZWN0cyBhbGwgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZyBzZXRzLgovLy8KLy8vIElmIGFuIGVsZW1lbnQgaXMgaW4gbXVsdGlwbGUgc2V0cyBhbmQgdGhlIG91dGVyIHNldCBpcyBvcmRlcmVkLCB0aGUgdmVyc2lvbgovLy8gaW4gdGhlIGVhcmxpZXN0IGlubmVyIHNldCBpcyBwcmVmZXJyZWQuIENvbXBvbmVudCBzZXRzIGFyZSBhc3N1bWVkIHRvIHVzZQovLy8gYD09YCBhbmQgYGhhc2hDb2RlYCBmb3IgZXF1YWxpdHkuCmNsYXNzIFVuaW9uU2V0PEU+IGV4dGVuZHMgU2V0QmFzZTxFPiB3aXRoIFVubW9kaWZpYWJsZVNldE1peGluPEU+IHsKICAvLy8gVGhlIHNldCBvZiBzZXRzIHRoYXQgdGhpcyBwcm92aWRlcyBhIHZpZXcgb2YuCiAgZmluYWwgU2V0PFNldDxFPj4gX3NldHM7CgogIC8vLyBXaGV0aGVyIHRoZSBzZXRzIGluIFtfc2V0c10gYXJlIGd1YXJhbnRlZWQgdG8gYmUgZGlzam9pbnQuCiAgZmluYWwgYm9vbCBfZGlzam9pbnQ7CgogIC8vLyBDcmVhdGVzIGEgbmV3IHNldCB0aGF0J3MgYSB2aWV3IG9mIHRoZSB1bmlvbiBvZiBhbGwgc2V0cyBpbiBbc2V0c10uCiAgLy8vCiAgLy8vIElmIGFueSBzZXRzIGluIFtzZXRzXSBjaGFuZ2UsIHRoaXMgW1VuaW9uU2V0XSByZWZsZWN0cyB0aGF0IGNoYW5nZS4gSWYgYQogIC8vLyBuZXcgc2V0IGlzIGFkZGVkIHRvIFtzZXRzXSwgdGhpcyBbVW5pb25TZXRdIHJlZmxlY3RzIHRoYXQgYXMgd2VsbC4KICAvLy8KICAvLy8gSWYgW2Rpc2pvaW50XSBpcyBgdHJ1ZWAsIHRoZW4gYWxsIGNvbXBvbmVudCBzZXRzIG11c3QgYmUgZGlzam9pbnQuIFRoYXQKICAvLy8gaXMsIHRoYXQgdGhleSBjb250YWluIG5vIGVsZW1lbnRzIGluIGNvbW1vbi4gVGhpcyBtYWtlcyBtYW55IG9wZXJhdGlvbnMKICAvLy8gaW5jbHVkaW5nIFtsZW5ndGhdIG1vcmUgZWZmaWNpZW50LiBJZiB0aGUgY29tcG9uZW50IHNldHMgdHVybiBvdXQgbm90IHRvCiAgLy8vIGJlIGRpc2pvaW50LCBzb21lIG9wZXJhdGlvbnMgbWF5IGJlaGF2ZSBpbmNvbnNpc3RlbnRseS4KICBVbmlvblNldCh0aGlzLl9zZXRzLCB7Ym9vbCBkaXNqb2ludDogZmFsc2V9KSA6IF9kaXNqb2ludCA9IGRpc2pvaW50OwoKICAvLy8gQ3JlYXRlcyBhIG5ldyBzZXQgdGhhdCdzIGEgdmlldyBvZiB0aGUgdW5pb24gb2YgYWxsIHNldHMgaW4gW3NldHNdLgogIC8vLwogIC8vLyBJZiBhbnkgc2V0cyBpbiBbc2V0c10gY2hhbmdlLCB0aGlzIFtVbmlvblNldF0gcmVmbGVjdHMgdGhhdCBjaGFuZ2UuCiAgLy8vIEhvd2V2ZXIsIHVubGlrZSBbbmV3IFVuaW9uU2V0XSwgdGhpcyBjcmVhdGVzIGEgY29weSBvZiBpdHMgcGFyYW1ldGVyLCBzbwogIC8vLyBjaGFuZ2VzIGluIFtzZXRzXSBhcmVuJ3QgcmVmbGVjdGVkIGluIHRoaXMgW1VuaW9uU2V0XS4KICAvLy8KICAvLy8gSWYgW2Rpc2pvaW50XSBpcyBgdHJ1ZWAsIHRoZW4gYWxsIGNvbXBvbmVudCBzZXRzIG11c3QgYmUgZGlzam9pbnQuIFRoYXQKICAvLy8gaXMsIHRoYXQgdGhleSBjb250YWluIG5vIGVsZW1lbnRzIGluIGNvbW1vbi4gVGhpcyBtYWtlcyBtYW55IG9wZXJhdGlvbnMKICAvLy8gaW5jbHVkaW5nIFtsZW5ndGhdIG1vcmUgZWZmaWNpZW50LiBJZiB0aGUgY29tcG9uZW50IHNldHMgdHVybiBvdXQgbm90IHRvCiAgLy8vIGJlIGRpc2pvaW50LCBzb21lIG9wZXJhdGlvbnMgbWF5IGJlaGF2ZSBpbmNvbnNpc3RlbnRseS4KICBVbmlvblNldC5mcm9tKEl0ZXJhYmxlPFNldDxFPj4gc2V0cywge2Jvb2wgZGlzam9pbnQ6IGZhbHNlfSkKICAgICAgOiB0aGlzKHNldHMudG9TZXQoKSwgZGlzam9pbnQ6IGRpc2pvaW50KTsKCiAgaW50IGdldCBsZW5ndGggPT4gX2Rpc2pvaW50CiAgICAgID8gX3NldHMuZm9sZCgwLCAobGVuZ3RoLCBzZXQpID0+IGxlbmd0aCArIHNldC5sZW5ndGgpCiAgICAgIDogX2l0ZXJhYmxlLmxlbmd0aDsKCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yID0+IF9pdGVyYWJsZS5pdGVyYXRvcjsKCiAgLy8vIFJldHVybnMgYW4gaXRlcmFibGUgb3ZlciB0aGUgY29udGVudHMgb2YgYWxsIHRoZSBzZXRzIGluIFt0aGlzXS4KICBJdGVyYWJsZTxFPiBnZXQgX2l0ZXJhYmxlID0+CiAgICAgIF9kaXNqb2ludCA/IF9zZXRzLmV4cGFuZCgoc2V0KSA9PiBzZXQpIDogX2RlZHVwSXRlcmFibGU7CgogIC8vLyBSZXR1cm5zIGFuIGl0ZXJhYmxlIG92ZXIgdGhlIGNvbnRlbnRzIG9mIGFsbCB0aGUgc2V0cyBpbiBbdGhpc10gdGhhdAogIC8vLyBkZS1kdXBsaWNhdGVzIGVsZW1lbnRzLgogIC8vLwogIC8vLyBJZiB0aGUgc2V0cyBhcmVuJ3QgZ3VhcmFudGVlZCB0byBiZSBkaXNqb2ludCwgdGhpcyBrZWVwcyB0cmFjayBvZiB0aGUKICAvLy8gZWxlbWVudHMgd2UndmUgYWxyZWFkeSBlbWl0dGVkIHNvIHRoYXQgd2UgY2FuIGRlLWR1cGxpY2F0ZSB0aGVtLgogIEl0ZXJhYmxlPEU+IGdldCBfZGVkdXBJdGVyYWJsZSB7CiAgICB2YXIgc2VlbiA9IG5ldyBTZXQ8RT4oKTsKICAgIHJldHVybiBfc2V0cy5leHBhbmQoKHNldCkgPT4gc2V0KS53aGVyZSgoZWxlbWVudCkgewogICAgICBpZiAoc2Vlbi5jb250YWlucyhlbGVtZW50KSkgcmV0dXJuIGZhbHNlOwogICAgICBzZWVuLmFkZChlbGVtZW50KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9KTsKICB9CgogIGJvb2wgY29udGFpbnMoT2JqZWN0IGVsZW1lbnQpID0+IF9zZXRzLmFueSgoc2V0KSA9PiBzZXQuY29udGFpbnMoZWxlbWVudCkpOwoKICBFIGxvb2t1cChPYmplY3QgZWxlbWVudCkgewogICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CgogICAgcmV0dXJuIF9zZXRzCiAgICAgICAgLm1hcCgoc2V0KSA9PiBzZXQubG9va3VwKGVsZW1lbnQpKQogICAgICAgIC5maXJzdFdoZXJlKChyZXN1bHQpID0+IHJlc3VsdCAhPSBudWxsLCBvckVsc2U6ICgpID0+IG51bGwpOwogIH0KCiAgU2V0PEU+IHRvU2V0KCkgewogICAgdmFyIHJlc3VsdCA9IG5ldyBTZXQ8RT4oKTsKICAgIGZvciAodmFyIHNldCBpbiBfc2V0cykgewogICAgICByZXN1bHQuYWRkQWxsKHNldCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQpaAE5OPAEaASUBRwRPBFBOJkQ0GwFBGAFKBk9JBk5OTz5HAUoGSk89Bk5OTz4/MAEePBoBMgFHHz8BSx4GTEcjHTgwGRMIBAFOAR0mARErRQQBEx8dGgYTBAIBJXBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvdW5pb25fc2V0LmRhcnRGc2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbGxlY3Rpb24vbGliL3NyYy91bm1vZGlmaWFibGVfd3JhcHBlcnMuZGFydJjxLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZW1wdHlfdW5tb2RpZmlhYmxlX3NldC5kYXJ0JzsKaW1wb3J0ICd3cmFwcGVycy5kYXJ0JzsKCmV4cG9ydCAiZGFydDpjb2xsZWN0aW9uIiBzaG93IFVubW9kaWZpYWJsZUxpc3RWaWV3LCBVbm1vZGlmaWFibGVNYXBWaWV3OwoKLy8vIEEgZml4ZWQtbGVuZ3RoIGxpc3QuCi8vLwovLy8gQSBgTm9uR3Jvd2FibGVMaXN0Vmlld2AgY29udGFpbnMgYSBbTGlzdF0gb2JqZWN0IGFuZCBlbnN1cmVzIHRoYXQKLy8vIGl0cyBsZW5ndGggZG9lcyBub3QgY2hhbmdlLgovLy8gTWV0aG9kcyB0aGF0IHdvdWxkIGNoYW5nZSB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0LAovLy8gc3VjaCBhcyBbYWRkXSBhbmQgW3JlbW92ZV0sIHRocm93IGFuIFtVbnN1cHBvcnRlZEVycm9yXS4KLy8vIEFsbCBvdGhlciBtZXRob2RzIHdvcmsgZGlyZWN0bHkgb24gdGhlIHVuZGVybHlpbmcgbGlzdC4KLy8vCi8vLyBUaGlzIGNsYXNzIF9kb2VzXyBhbGxvdyBjaGFuZ2VzIHRvIHRoZSBjb250ZW50cyBvZiB0aGUgd3JhcHBlZCBsaXN0LgovLy8gWW91IGNhbiwgZm9yIGV4YW1wbGUsIFtzb3J0XSB0aGUgbGlzdC4KLy8vIFBlcm1pdHRlZCBvcGVyYXRpb25zIGRlZmVyIHRvIHRoZSB3cmFwcGVkIGxpc3QuCmNsYXNzIE5vbkdyb3dhYmxlTGlzdFZpZXc8RT4gZXh0ZW5kcyBEZWxlZ2F0aW5nTGlzdDxFPgogICAgd2l0aCBOb25Hcm93YWJsZUxpc3RNaXhpbjxFPiB7CiAgTm9uR3Jvd2FibGVMaXN0VmlldyhMaXN0PEU+IGxpc3RCYXNlKSA6IHN1cGVyKGxpc3RCYXNlKTsKfQoKLy8vIE1peGluIGNsYXNzIHRoYXQgaW1wbGVtZW50cyBhIHRocm93aW5nIHZlcnNpb24gb2YgYWxsIGxpc3Qgb3BlcmF0aW9ucyB0aGF0Ci8vLyBjaGFuZ2UgdGhlIExpc3QncyBsZW5ndGguCmFic3RyYWN0IGNsYXNzIE5vbkdyb3dhYmxlTGlzdE1peGluPEU+IGltcGxlbWVudHMgTGlzdDxFPiB7CiAgc3RhdGljIFQgX3Rocm93PFQ+KCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIkNhbm5vdCBjaGFuZ2UgdGhlIGxlbmd0aCBvZiBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGFyZSBkaXNhbGxvd2VkLgogIHNldCBsZW5ndGgoaW50IG5ld0xlbmd0aCkgPT4gX3Rocm93KCk7CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QgYXJlIGRpc2FsbG93ZWQuCiAgYm9vbCBhZGQoRSB2YWx1ZSkgPT4gX3Rocm93KCk7CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QgYXJlIGRpc2FsbG93ZWQuCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gaXRlcmFibGUpID0+IF90aHJvdygpOwoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGFyZSBkaXNhbGxvd2VkLgogIHZvaWQgaW5zZXJ0KGludCBpbmRleCwgRSBlbGVtZW50KSA9PiBfdGhyb3coKTsKCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCBhcmUgZGlzYWxsb3dlZC4KICB2b2lkIGluc2VydEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKSA9PiBfdGhyb3coKTsKCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCBhcmUgZGlzYWxsb3dlZC4KICBib29sIHJlbW92ZShPYmplY3QgdmFsdWUpID0+IF90aHJvdygpOwoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGFyZSBkaXNhbGxvd2VkLgogIEUgcmVtb3ZlQXQoaW50IGluZGV4KSA9PiBfdGhyb3coKTsKCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCBhcmUgZGlzYWxsb3dlZC4KICBFIHJlbW92ZUxhc3QoKSA9PiBfdGhyb3coKTsKCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCBhcmUgZGlzYWxsb3dlZC4KICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSA9PiBfdGhyb3coKTsKCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCBhcmUgZGlzYWxsb3dlZC4KICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSA9PiBfdGhyb3coKTsKCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCBhcmUgZGlzYWxsb3dlZC4KICB2b2lkIHJlbW92ZVJhbmdlKGludCBzdGFydCwgaW50IGVuZCkgPT4gX3Rocm93KCk7CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QgYXJlIGRpc2FsbG93ZWQuCiAgdm9pZCByZXBsYWNlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZTxFPiBpdGVyYWJsZSkgPT4gX3Rocm93KCk7CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QgYXJlIGRpc2FsbG93ZWQuCiAgdm9pZCBjbGVhcigpID0+IF90aHJvdygpOwp9CgovLy8gQW4gdW5tb2RpZmlhYmxlIHNldC4KLy8vCi8vLyBBbiBVbm1vZGlmaWFibGVTZXRWaWV3IGNvbnRhaW5zIGEgW1NldF0gb2JqZWN0IGFuZCBlbnN1cmVzCi8vLyB0aGF0IGl0IGRvZXMgbm90IGNoYW5nZS4KLy8vIE1ldGhvZHMgdGhhdCB3b3VsZCBjaGFuZ2UgdGhlIHNldCwKLy8vIHN1Y2ggYXMgW2FkZF0gYW5kIFtyZW1vdmVdLCB0aHJvdyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0uCi8vLyBQZXJtaXR0ZWQgb3BlcmF0aW9ucyBkZWZlciB0byB0aGUgd3JhcHBlZCBzZXQuCmNsYXNzIFVubW9kaWZpYWJsZVNldFZpZXc8RT4gZXh0ZW5kcyBEZWxlZ2F0aW5nU2V0PEU+CiAgICB3aXRoIFVubW9kaWZpYWJsZVNldE1peGluPEU+IHsKICBVbm1vZGlmaWFibGVTZXRWaWV3KFNldDxFPiBzZXRCYXNlKSA6IHN1cGVyKHNldEJhc2UpOwoKICAvLy8gQW4gdW5tb2RpZmlhYmxlIGVtcHR5IHNldC4KICAvLy8KICAvLy8gVGhpcyBpcyB0aGUgc2FtZSBhcyBgbmV3IFVubW9kaWZpYWJsZVNldFZpZXcobmV3IFNldCgpKWAsIGV4Y2VwdCB0aGF0IGl0CiAgLy8vIGNhbiBiZSB1c2VkIGluIGNvbnN0IGNvbnRleHRzLgogIGNvbnN0IGZhY3RvcnkgVW5tb2RpZmlhYmxlU2V0Vmlldy5lbXB0eSgpID0gRW1wdHlVbm1vZGlmaWFibGVTZXQ8RT47Cn0KCi8vLyBNaXhpbiBjbGFzcyB0aGF0IGltcGxlbWVudHMgYSB0aHJvd2luZyB2ZXJzaW9uIG9mIGFsbCBzZXQgb3BlcmF0aW9ucyB0aGF0Ci8vLyBjaGFuZ2UgdGhlIFNldC4KYWJzdHJhY3QgY2xhc3MgVW5tb2RpZmlhYmxlU2V0TWl4aW48RT4gaW1wbGVtZW50cyBTZXQ8RT4gewogIHN0YXRpYyBUIF90aHJvdzxUPigpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBTZXQiKTsKICB9CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBzZXQgYXJlIGRpc2FsbG93ZWQuCiAgYm9vbCBhZGQoRSB2YWx1ZSkgPT4gX3Rocm93KCk7CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBzZXQgYXJlIGRpc2FsbG93ZWQuCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gZWxlbWVudHMpID0+IF90aHJvdygpOwoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgc2V0IGFyZSBkaXNhbGxvd2VkLgogIGJvb2wgcmVtb3ZlKE9iamVjdCB2YWx1ZSkgPT4gX3Rocm93KCk7CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBzZXQgYXJlIGRpc2FsbG93ZWQuCiAgdm9pZCByZW1vdmVBbGwoSXRlcmFibGUgZWxlbWVudHMpID0+IF90aHJvdygpOwoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgc2V0IGFyZSBkaXNhbGxvd2VkLgogIHZvaWQgcmV0YWluQWxsKEl0ZXJhYmxlIGVsZW1lbnRzKSA9PiBfdGhyb3coKTsKCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIHNldCBhcmUgZGlzYWxsb3dlZC4KICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSA9PiBfdGhyb3coKTsKCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIHNldCBhcmUgZGlzYWxsb3dlZC4KICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSA9PiBfdGhyb3coKTsKCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIHNldCBhcmUgZGlzYWxsb3dlZC4KICB2b2lkIGNsZWFyKCkgPT4gX3Rocm93KCk7Cn0KCi8vLyBNaXhpbiBjbGFzcyB0aGF0IGltcGxlbWVudHMgYSB0aHJvd2luZyB2ZXJzaW9uIG9mIGFsbCBtYXAgb3BlcmF0aW9ucyB0aGF0Ci8vLyBjaGFuZ2UgdGhlIE1hcC4KYWJzdHJhY3QgY2xhc3MgVW5tb2RpZmlhYmxlTWFwTWl4aW48SywgVj4gaW1wbGVtZW50cyBNYXA8SywgVj4gewogIHN0YXRpYyBUIF90aHJvdzxUPigpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBNYXAiKTsKICB9CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBtYXAgYXJlIGRpc2FsbG93ZWQuCiAgdm9pZCBvcGVyYXRvciBbXT0oSyBrZXksIFYgdmFsdWUpID0+IF90aHJvdygpOwoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgbWFwIGFyZSBkaXNhbGxvd2VkLgogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSkgPT4gX3Rocm93KCk7CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBtYXAgYXJlIGRpc2FsbG93ZWQuCiAgdm9pZCBhZGRBbGwoTWFwPEssIFY+IG90aGVyKSA9PiBfdGhyb3coKTsKCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIG1hcCBhcmUgZGlzYWxsb3dlZC4KICBWIHJlbW92ZShPYmplY3Qga2V5KSA9PiBfdGhyb3coKTsKCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIG1hcCBhcmUgZGlzYWxsb3dlZC4KICB2b2lkIGNsZWFyKCkgPT4gX3Rocm93KCk7CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBtYXAgYXJlIGRpc2FsbG93ZWQuCiAgc2V0IGZpcnN0KF8pID0+IF90aHJvdygpOwoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgbWFwIGFyZSBkaXNhbGxvd2VkLgogIHNldCBsYXN0KF8pID0+IF90aHJvdygpOwp9CoC1AE5OPAEmGAFJARkERiA2PTwESSs0NyM7AgFPHjwZIDwEASREKQEkRCEBJEQxASREMQEkRD8BJEQpASREJQEkRB4BJEQ2ASRENgEkRDQBJERLASREHAIBGQQ/HSc9MzYjOAEhBk8lRwIBThQ7GUUEASQ1IQEkNTEBJDUpASQ1MQEkNTEBJDU2ASQ1NgEkNRwCAU4UQRlFBAEkNTEBJDUyASQ1LAEkNSQBJDUcASQ1HAEkNRsCATFwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL3VubW9kaWZpYWJsZV93cmFwcGVycy5kYXJ0RXNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jb2xsZWN0aW9uL2xpYi9zcmMvdW5pb25fc2V0X2NvbnRyb2xsZXIuZGFydIdQLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAndW5pb25fc2V0LmRhcnQnOwoKLy8vIEEgY29udHJvbGxlciB0aGF0IGV4cG9zZXMgYSB2aWV3IG9mIHRoZSB1bmlvbiBvZiBhIGNvbGxlY3Rpb24gb2Ygc2V0cy4KLy8vCi8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgY2xhc3MgZm9yIGNyZWF0aW5nIGEgW1VuaW9uU2V0XSB3aG9zZSBjb250ZW50cyBjaGFuZ2UKLy8vIG92ZXIgdGhlIGxpZmV0aW1lIG9mIGEgY2xhc3MuIEZvciBleGFtcGxlOgovLy8KLy8vIGBgYGRhcnQKLy8vIGNsYXNzIEVuZ2luZSB7Ci8vLyAgIFNldDxUZXN0PiBnZXQgYWN0aXZlVGVzdHMgPT4gX2FjdGl2ZVRlc3RzR3JvdXAuc2V0OwovLy8gICBmaW5hbCBfYWN0aXZlVGVzdHNHcm91cCA9IG5ldyBVbmlvblNldENvbnRyb2xsZXI8VGVzdD4oKTsKLy8vCi8vLyAgIHZvaWQgYWRkU3VpdGUoU3VpdGUgc3VpdGUpIHsKLy8vICAgICBfYWN0aXZlVGVzdHNHcm91cC5hZGQoc3VpdGUudGVzdHMpOwovLy8gICAgIF9ydW5TdWl0ZShzdWl0ZSk7Ci8vLyAgICAgX2FjdGl2ZVRlc3RzR3JvdXAucmVtb3ZlKHN1aXRlLnRlc3RzKTsKLy8vICAgfQovLy8gfQovLy8gYGBgCmNsYXNzIFVuaW9uU2V0Q29udHJvbGxlcjxFPiB7CiAgLy8vIFRoZSBbVW5pb25TZXRdIHRoYXQgcHJvdmlkZXMgYSB2aWV3IG9mIHRoZSB1bmlvbiBvZiBzZXRzIGluIFt0aGlzXS4KICBVbmlvblNldDxFPiBnZXQgc2V0ID0+IF9zZXQ7CiAgVW5pb25TZXQ8RT4gX3NldDsKCiAgLy8vIFRoZSBzZXRzIHdob3NlIHVuaW9uIGlzIGV4cG9zZWQgdGhyb3VnaCBbc2V0XS4KICBmaW5hbCBfc2V0cyA9IG5ldyBTZXQ8U2V0PEU+PigpOwoKICAvLy8gQ3JlYXRlcyBhIHNldCBvZiBzZXRzIHRoYXQgcHJvdmlkZXMgYSB2aWV3IG9mIHRoZSB1bmlvbiBvZiB0aG9zZSBzZXRzLgogIC8vLwogIC8vLyBJZiBbZGlzam9pbnRdIGlzIGB0cnVlYCwgdGhpcyBhc3N1bWVzIHRoYXQgYWxsIGNvbXBvbmVudCBzZXRzIGFyZQogIC8vLyBkaXNqb2ludOKAlHRoYXQgaXMsIHRoYXQgdGhleSBjb250YWluIG5vIGVsZW1lbnRzIGluIGNvbW1vbi4gVGhpcyBtYWtlcwogIC8vLyBtYW55IG9wZXJhdGlvbnMgaW5jbHVkaW5nIFtsZW5ndGhdIG1vcmUgZWZmaWNpZW50LgogIFVuaW9uU2V0Q29udHJvbGxlcih7Ym9vbCBkaXNqb2ludDogZmFsc2V9KSB7CiAgICBfc2V0ID0gbmV3IFVuaW9uU2V0PEU+KF9zZXRzLCBkaXNqb2ludDogZGlzam9pbnQpOwogIH0KCiAgLy8vIEFkZHMgdGhlIGNvbnRlbnRzIG9mIFtjb21wb25lbnRdIHRvIFtzZXRdLgogIC8vLwogIC8vLyBJZiB0aGUgY29udGVudHMgb2YgW2NvbXBvbmVudF0gY2hhbmdlIG92ZXIgdGltZSwgW3NldF0gd2lsbCBjaGFuZ2UKICAvLy8gYWNjb3JkaW5nbHkuCiAgdm9pZCBhZGQoU2V0PEU+IGNvbXBvbmVudCkgewogICAgX3NldHMuYWRkKGNvbXBvbmVudCk7CiAgfQoKICAvLy8gUmVtb3ZlcyB0aGUgY29udGVudHMgb2YgW2NvbXBvbmVudF0gdG8gW3NldF0uCiAgLy8vCiAgLy8vIElmIGFub3RoZXIgc2V0IGluIFt0aGlzXSBoYXMgb3ZlcmxhcHBpbmcgZWxlbWVudHMgd2l0aCBbY29tcG9uZW50XSwgdGhvc2UKICAvLy8gZWxlbWVudHMgd2lsbCByZW1haW4gaW4gW3NldF0uCiAgYm9vbCByZW1vdmUoU2V0PEU+IGNvbXBvbmVudCkgPT4gX3NldHMucmVtb3ZlKGNvbXBvbmVudCk7Cn0KOABOTjwBGQFLBFAvBAwTOkAEIywaLwgGCB5KHxQBNSMBTQZITDkvNwQBMQZJEx8aBAE0BlAlPAIBMHBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvdW5pb25fc2V0X2NvbnRyb2xsZXIuZGFydDlzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29sbGVjdGlvbi9saWIvc3JjL3dyYXBwZXJzLmRhcnTAAFOELy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAiZGFydDpjb2xsZWN0aW9uIjsKaW1wb3J0ICJkYXJ0Om1hdGgiIGFzIG1hdGg7CgppbXBvcnQgInVubW9kaWZpYWJsZV93cmFwcGVycy5kYXJ0IjsKCnR5cGVkZWYgSyBfS2V5Rm9yVmFsdWU8SywgVj4oViB2YWx1ZSk7CgovLy8gQSBiYXNlIGNsYXNzIGZvciBkZWxlZ2F0aW5nIGl0ZXJhYmxlcy4KLy8vCi8vLyBTdWJjbGFzc2VzIGNhbiBwcm92aWRlIGEgW19iYXNlXSB0aGF0IHNob3VsZCBiZSBkZWxlZ2F0ZWQgdG8uIFVubGlrZQovLy8gW0RlbGVnYXRpbmdJdGVyYWJsZV0sIHRoaXMgYWxsb3dzIHRoZSBiYXNlIHRvIGJlIGNyZWF0ZWQgb24gZGVtYW5kLgphYnN0cmFjdCBjbGFzcyBfRGVsZWdhdGluZ0l0ZXJhYmxlQmFzZTxFPiBpbXBsZW1lbnRzIEl0ZXJhYmxlPEU+IHsKICBJdGVyYWJsZTxFPiBnZXQgX2Jhc2U7CgogIGNvbnN0IF9EZWxlZ2F0aW5nSXRlcmFibGVCYXNlKCk7CgogIGJvb2wgYW55KGJvb2wgdGVzdChFIGVsZW1lbnQpKSA9PiBfYmFzZS5hbnkodGVzdCk7CgogIEl0ZXJhYmxlPFQ+IGNhc3Q8VD4oKSA9PiBfYmFzZS5jYXN0PFQ+KCk7CgogIGJvb2wgY29udGFpbnMoT2JqZWN0IGVsZW1lbnQpID0+IF9iYXNlLmNvbnRhaW5zKGVsZW1lbnQpOwoKICBFIGVsZW1lbnRBdChpbnQgaW5kZXgpID0+IF9iYXNlLmVsZW1lbnRBdChpbmRleCk7CgogIGJvb2wgZXZlcnkoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IF9iYXNlLmV2ZXJ5KHRlc3QpOwoKICBJdGVyYWJsZTxUPiBleHBhbmQ8VD4oSXRlcmFibGU8VD4gZihFIGVsZW1lbnQpKSA9PiBfYmFzZS5leHBhbmQoZik7CgogIEUgZ2V0IGZpcnN0ID0+IF9iYXNlLmZpcnN0OwoKICBFIGZpcnN0V2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIHtFIG9yRWxzZSgpfSkgPT4KICAgICAgX2Jhc2UuZmlyc3RXaGVyZSh0ZXN0LCBvckVsc2U6IG9yRWxzZSk7CgogIFQgZm9sZDxUPihUIGluaXRpYWxWYWx1ZSwgVCBjb21iaW5lKFQgcHJldmlvdXNWYWx1ZSwgRSBlbGVtZW50KSkgPT4KICAgICAgX2Jhc2UuZm9sZChpbml0aWFsVmFsdWUsIGNvbWJpbmUpOwoKICBJdGVyYWJsZTxFPiBmb2xsb3dlZEJ5KEl0ZXJhYmxlPEU+IG90aGVyKSA9PiBfYmFzZS5mb2xsb3dlZEJ5KG90aGVyKTsKCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihFIGVsZW1lbnQpKSA9PiBfYmFzZS5mb3JFYWNoKGYpOwoKICBib29sIGdldCBpc0VtcHR5ID0+IF9iYXNlLmlzRW1wdHk7CgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX2Jhc2UuaXNOb3RFbXB0eTsKCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yID0+IF9iYXNlLml0ZXJhdG9yOwoKICBTdHJpbmcgam9pbihbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSkgPT4gX2Jhc2Uuam9pbihzZXBhcmF0b3IpOwoKICBFIGdldCBsYXN0ID0+IF9iYXNlLmxhc3Q7CgogIEUgbGFzdFdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCB7RSBvckVsc2UoKX0pID0+CiAgICAgIF9iYXNlLmxhc3RXaGVyZSh0ZXN0LCBvckVsc2U6IG9yRWxzZSk7CgogIGludCBnZXQgbGVuZ3RoID0+IF9iYXNlLmxlbmd0aDsKCiAgSXRlcmFibGU8VD4gbWFwPFQ+KFQgZihFIGVsZW1lbnQpKSA9PiBfYmFzZS5tYXAoZik7CgogIEUgcmVkdWNlKEUgY29tYmluZShFIHZhbHVlLCBFIGVsZW1lbnQpKSA9PiBfYmFzZS5yZWR1Y2UoY29tYmluZSk7CgogIEBkZXByZWNhdGVkCiAgSXRlcmFibGU8VD4gcmV0eXBlPFQ+KCkgPT4gY2FzdDxUPigpOwoKICBFIGdldCBzaW5nbGUgPT4gX2Jhc2Uuc2luZ2xlOwoKICBFIHNpbmdsZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCB7RSBvckVsc2UoKX0pIHsKICAgIHJldHVybiBfYmFzZS5zaW5nbGVXaGVyZSh0ZXN0LCBvckVsc2U6IG9yRWxzZSk7CiAgfQoKICBJdGVyYWJsZTxFPiBza2lwKGludCBuKSA9PiBfYmFzZS5za2lwKG4pOwoKICBJdGVyYWJsZTxFPiBza2lwV2hpbGUoYm9vbCB0ZXN0KEUgdmFsdWUpKSA9PiBfYmFzZS5za2lwV2hpbGUodGVzdCk7CgogIEl0ZXJhYmxlPEU+IHRha2UoaW50IG4pID0+IF9iYXNlLnRha2Uobik7CgogIEl0ZXJhYmxlPEU+IHRha2VXaGlsZShib29sIHRlc3QoRSB2YWx1ZSkpID0+IF9iYXNlLnRha2VXaGlsZSh0ZXN0KTsKCiAgTGlzdDxFPiB0b0xpc3Qoe2Jvb2wgZ3Jvd2FibGU6IHRydWV9KSA9PiBfYmFzZS50b0xpc3QoZ3Jvd2FibGU6IGdyb3dhYmxlKTsKCiAgU2V0PEU+IHRvU2V0KCkgPT4gX2Jhc2UudG9TZXQoKTsKCiAgSXRlcmFibGU8RT4gd2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IF9iYXNlLndoZXJlKHRlc3QpOwoKICBJdGVyYWJsZTxUPiB3aGVyZVR5cGU8VD4oKSA9PiBfYmFzZS53aGVyZVR5cGU8VD4oKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gX2Jhc2UudG9TdHJpbmcoKTsKfQoKLy8vIEFuIFtJdGVyYWJsZV0gdGhhdCBkZWxlZ2F0ZXMgYWxsIG9wZXJhdGlvbnMgdG8gYSBiYXNlIGl0ZXJhYmxlLgovLy8KLy8vIFRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgdG8gaGlkZSBub24tYEl0ZXJhYmxlYCBtZXRob2RzIG9mIGFuIGl0ZXJhYmxlIG9iamVjdCwKLy8vIG9yIGl0IGNhbiBiZSBleHRlbmRlZCB0byBhZGQgZXh0cmEgZnVuY3Rpb25hbGl0eSBvbiB0b3Agb2YgYW4gZXhpc3RpbmcKLy8vIGl0ZXJhYmxlIG9iamVjdC4KY2xhc3MgRGVsZWdhdGluZ0l0ZXJhYmxlPEU+IGV4dGVuZHMgX0RlbGVnYXRpbmdJdGVyYWJsZUJhc2U8RT4gewogIGZpbmFsIEl0ZXJhYmxlPEU+IF9iYXNlOwoKICAvLy8gQ3JlYXRlcyBhIHdyYXBwZXIgdGhhdCBmb3J3YXJkcyBvcGVyYXRpb25zIHRvIFtiYXNlXS4KICBjb25zdCBEZWxlZ2F0aW5nSXRlcmFibGUoSXRlcmFibGU8RT4gYmFzZSkgOiBfYmFzZSA9IGJhc2U7CgogIC8vLyBDcmVhdGVzIGEgd3JhcHBlciB0aGF0IGFzc2VydHMgdGhlIHR5cGVzIG9mIHZhbHVlcyBpbiBbYmFzZV0uCiAgLy8vCiAgLy8vIFRoaXMgc291bmRseSBjb252ZXJ0cyBhbiBbSXRlcmFibGVdIHdpdGhvdXQgYSBnZW5lcmljIHR5cGUgdG8gYW4KICAvLy8gYEl0ZXJhYmxlPEU+YCBieSBhc3NlcnRpbmcgdGhhdCBpdHMgZWxlbWVudHMgYXJlIGluc3RhbmNlcyBvZiBgRWAgd2hlbmV2ZXIKICAvLy8gdGhleSdyZSBhY2Nlc3NlZC4gSWYgdGhleSdyZSBub3QsIGl0IHRocm93cyBhIFtDYXN0RXJyb3JdLgogIC8vLwogIC8vLyBUaGlzIGZvcndhcmRzIGFsbCBvcGVyYXRpb25zIHRvIFtiYXNlXSwgc28gYW55IGNoYW5nZXMgaW4gW2Jhc2VdIHdpbGwgYmUKICAvLy8gcmVmbGVjdGVkIGluIFt0aGlzXS4gSWYgW2Jhc2VdIGlzIGFscmVhZHkgYW4gYEl0ZXJhYmxlPEU+YCwgaXQncyByZXR1cm5lZAogIC8vLyB1bm1vZGlmaWVkLgogIEBEZXByZWNhdGVkKCdVc2UgaXRlcmFibGUuY2FzdDxFPiBpbnN0ZWFkLicpCiAgc3RhdGljIEl0ZXJhYmxlPEU+IHR5cGVkPEU+KEl0ZXJhYmxlIGJhc2UpID0+IGJhc2UuY2FzdDxFPigpOwp9CgovLy8gQSBbTGlzdF0gdGhhdCBkZWxlZ2F0ZXMgYWxsIG9wZXJhdGlvbnMgdG8gYSBiYXNlIGxpc3QuCi8vLwovLy8gVGhpcyBjbGFzcyBjYW4gYmUgdXNlZCB0byBoaWRlIG5vbi1gTGlzdGAgbWV0aG9kcyBvZiBhIGxpc3Qgb2JqZWN0LCBvciBpdAovLy8gY2FuIGJlIGV4dGVuZGVkIHRvIGFkZCBleHRyYSBmdW5jdGlvbmFsaXR5IG9uIHRvcCBvZiBhbiBleGlzdGluZyBsaXN0Ci8vLyBvYmplY3QuCmNsYXNzIERlbGVnYXRpbmdMaXN0PEU+IGV4dGVuZHMgRGVsZWdhdGluZ0l0ZXJhYmxlPEU+IGltcGxlbWVudHMgTGlzdDxFPiB7CiAgY29uc3QgRGVsZWdhdGluZ0xpc3QoTGlzdDxFPiBiYXNlKSA6IHN1cGVyKGJhc2UpOwoKICAvLy8gQ3JlYXRlcyBhIHdyYXBwZXIgdGhhdCBhc3NlcnRzIHRoZSB0eXBlcyBvZiB2YWx1ZXMgaW4gW2Jhc2VdLgogIC8vLwogIC8vLyBUaGlzIHNvdW5kbHkgY29udmVydHMgYSBbTGlzdF0gd2l0aG91dCBhIGdlbmVyaWMgdHlwZSB0byBhIGBMaXN0PEU+YCBieQogIC8vLyBhc3NlcnRpbmcgdGhhdCBpdHMgZWxlbWVudHMgYXJlIGluc3RhbmNlcyBvZiBgRWAgd2hlbmV2ZXIgdGhleSdyZQogIC8vLyBhY2Nlc3NlZC4gSWYgdGhleSdyZSBub3QsIGl0IHRocm93cyBhIFtDYXN0RXJyb3JdLiBOb3RlIHRoYXQgZXZlbiBpZiBhbgogIC8vLyBvcGVyYXRpb24gdGhyb3dzIGEgW0Nhc3RFcnJvcl0sIGl0IG1heSBzdGlsbCBtdXRhdGUgdGhlIHVuZGVybHlpbmcKICAvLy8gY29sbGVjdGlvbi4KICAvLy8KICAvLy8gVGhpcyBmb3J3YXJkcyBhbGwgb3BlcmF0aW9ucyB0byBbYmFzZV0sIHNvIGFueSBjaGFuZ2VzIGluIFtiYXNlXSB3aWxsIGJlCiAgLy8vIHJlZmxlY3RlZCBpbiBbdGhpc10uIElmIFtiYXNlXSBpcyBhbHJlYWR5IGEgYExpc3Q8RT5gLCBpdCdzIHJldHVybmVkCiAgLy8vIHVubW9kaWZpZWQuCiAgQERlcHJlY2F0ZWQoJ1VzZSBsaXN0LmNhc3Q8RT4gaW5zdGVhZC4nKQogIHN0YXRpYyBMaXN0PEU+IHR5cGVkPEU+KExpc3QgYmFzZSkgPT4gYmFzZS5jYXN0PEU+KCk7CgogIExpc3Q8RT4gZ2V0IF9saXN0QmFzZSA9PiBfYmFzZTsKCiAgRSBvcGVyYXRvciBbXShpbnQgaW5kZXgpID0+IF9saXN0QmFzZVtpbmRleF07CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgRSB2YWx1ZSkgewogICAgX2xpc3RCYXNlW2luZGV4XSA9IHZhbHVlOwogIH0KCiAgTGlzdDxFPiBvcGVyYXRvciArKExpc3Q8RT4gb3RoZXIpID0+IF9saXN0QmFzZSArIG90aGVyOwoKICB2b2lkIGFkZChFIHZhbHVlKSB7CiAgICBfbGlzdEJhc2UuYWRkKHZhbHVlKTsKICB9CgogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKSB7CiAgICBfbGlzdEJhc2UuYWRkQWxsKGl0ZXJhYmxlKTsKICB9CgogIE1hcDxpbnQsIEU+IGFzTWFwKCkgPT4gX2xpc3RCYXNlLmFzTWFwKCk7CgogIExpc3Q8VD4gY2FzdDxUPigpID0+IF9saXN0QmFzZS5jYXN0PFQ+KCk7CgogIHZvaWQgY2xlYXIoKSB7CiAgICBfbGlzdEJhc2UuY2xlYXIoKTsKICB9CgogIHZvaWQgZmlsbFJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgW0UgZmlsbFZhbHVlXSkgewogICAgX2xpc3RCYXNlLmZpbGxSYW5nZShzdGFydCwgZW5kLCBmaWxsVmFsdWUpOwogIH0KCiAgc2V0IGZpcnN0KEUgdmFsdWUpIHsKICAgIGlmICh0aGlzLmlzRW1wdHkpIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KDAsIHRoaXMpOwogICAgdGhpc1swXSA9IHZhbHVlOwogIH0KCiAgSXRlcmFibGU8RT4gZ2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSA9PiBfbGlzdEJhc2UuZ2V0UmFuZ2Uoc3RhcnQsIGVuZCk7CgogIGludCBpbmRleE9mKEUgZWxlbWVudCwgW2ludCBzdGFydCA9IDBdKSA9PiBfbGlzdEJhc2UuaW5kZXhPZihlbGVtZW50LCBzdGFydCk7CgogIGludCBpbmRleFdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCBbaW50IHN0YXJ0ID0gMF0pID0+CiAgICAgIF9saXN0QmFzZS5pbmRleFdoZXJlKHRlc3QsIHN0YXJ0KTsKCiAgdm9pZCBpbnNlcnQoaW50IGluZGV4LCBFIGVsZW1lbnQpIHsKICAgIF9saXN0QmFzZS5pbnNlcnQoaW5kZXgsIGVsZW1lbnQpOwogIH0KCiAgaW5zZXJ0QWxsKGludCBpbmRleCwgSXRlcmFibGU8RT4gaXRlcmFibGUpIHsKICAgIF9saXN0QmFzZS5pbnNlcnRBbGwoaW5kZXgsIGl0ZXJhYmxlKTsKICB9CgogIHNldCBsYXN0KEUgdmFsdWUpIHsKICAgIGlmICh0aGlzLmlzRW1wdHkpIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KDAsIHRoaXMpOwogICAgdGhpc1t0aGlzLmxlbmd0aCAtIDFdID0gdmFsdWU7CiAgfQoKICBpbnQgbGFzdEluZGV4T2YoRSBlbGVtZW50LCBbaW50IHN0YXJ0XSkgPT4KICAgICAgX2xpc3RCYXNlLmxhc3RJbmRleE9mKGVsZW1lbnQsIHN0YXJ0KTsKCiAgaW50IGxhc3RJbmRleFdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCBbaW50IHN0YXJ0XSkgPT4KICAgICAgX2xpc3RCYXNlLmxhc3RJbmRleFdoZXJlKHRlc3QsIHN0YXJ0KTsKCiAgc2V0IGxlbmd0aChpbnQgbmV3TGVuZ3RoKSB7CiAgICBfbGlzdEJhc2UubGVuZ3RoID0gbmV3TGVuZ3RoOwogIH0KCiAgYm9vbCByZW1vdmUoT2JqZWN0IHZhbHVlKSA9PiBfbGlzdEJhc2UucmVtb3ZlKHZhbHVlKTsKCiAgRSByZW1vdmVBdChpbnQgaW5kZXgpID0+IF9saXN0QmFzZS5yZW1vdmVBdChpbmRleCk7CgogIEUgcmVtb3ZlTGFzdCgpID0+IF9saXN0QmFzZS5yZW1vdmVMYXN0KCk7CgogIHZvaWQgcmVtb3ZlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBfbGlzdEJhc2UucmVtb3ZlUmFuZ2Uoc3RhcnQsIGVuZCk7CiAgfQoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBfbGlzdEJhc2UucmVtb3ZlV2hlcmUodGVzdCk7CiAgfQoKICB2b2lkIHJlcGxhY2VSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKSB7CiAgICBfbGlzdEJhc2UucmVwbGFjZVJhbmdlKHN0YXJ0LCBlbmQsIGl0ZXJhYmxlKTsKICB9CgogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIF9saXN0QmFzZS5yZXRhaW5XaGVyZSh0ZXN0KTsKICB9CgogIEBkZXByZWNhdGVkCiAgTGlzdDxUPiByZXR5cGU8VD4oKSA9PiBjYXN0PFQ+KCk7CgogIEl0ZXJhYmxlPEU+IGdldCByZXZlcnNlZCA9PiBfbGlzdEJhc2UucmV2ZXJzZWQ7CgogIHZvaWQgc2V0QWxsKGludCBpbmRleCwgSXRlcmFibGU8RT4gaXRlcmFibGUpIHsKICAgIF9saXN0QmFzZS5zZXRBbGwoaW5kZXgsIGl0ZXJhYmxlKTsKICB9CgogIHZvaWQgc2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZTxFPiBpdGVyYWJsZSwgW2ludCBza2lwQ291bnQgPSAwXSkgewogICAgX2xpc3RCYXNlLnNldFJhbmdlKHN0YXJ0LCBlbmQsIGl0ZXJhYmxlLCBza2lwQ291bnQpOwogIH0KCiAgdm9pZCBzaHVmZmxlKFttYXRoLlJhbmRvbSByYW5kb21dKSB7CiAgICBfbGlzdEJhc2Uuc2h1ZmZsZShyYW5kb20pOwogIH0KCiAgdm9pZCBzb3J0KFtpbnQgY29tcGFyZShFIGEsIEUgYildKSB7CiAgICBfbGlzdEJhc2Uuc29ydChjb21wYXJlKTsKICB9CgogIExpc3Q8RT4gc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSkgPT4gX2xpc3RCYXNlLnN1Ymxpc3Qoc3RhcnQsIGVuZCk7Cn0KCi8vLyBBIFtTZXRdIHRoYXQgZGVsZWdhdGVzIGFsbCBvcGVyYXRpb25zIHRvIGEgYmFzZSBzZXQuCi8vLwovLy8gVGhpcyBjbGFzcyBjYW4gYmUgdXNlZCB0byBoaWRlIG5vbi1gU2V0YCBtZXRob2RzIG9mIGEgc2V0IG9iamVjdCwgb3IgaXQgY2FuCi8vLyBiZSBleHRlbmRlZCB0byBhZGQgZXh0cmEgZnVuY3Rpb25hbGl0eSBvbiB0b3Agb2YgYW4gZXhpc3Rpbmcgc2V0IG9iamVjdC4KY2xhc3MgRGVsZWdhdGluZ1NldDxFPiBleHRlbmRzIERlbGVnYXRpbmdJdGVyYWJsZTxFPiBpbXBsZW1lbnRzIFNldDxFPiB7CiAgY29uc3QgRGVsZWdhdGluZ1NldChTZXQ8RT4gYmFzZSkgOiBzdXBlcihiYXNlKTsKCiAgLy8vIENyZWF0ZXMgYSB3cmFwcGVyIHRoYXQgYXNzZXJ0cyB0aGUgdHlwZXMgb2YgdmFsdWVzIGluIFtiYXNlXS4KICAvLy8KICAvLy8gVGhpcyBzb3VuZGx5IGNvbnZlcnRzIGEgW1NldF0gd2l0aG91dCBhIGdlbmVyaWMgdHlwZSB0byBhIGBTZXQ8RT5gIGJ5CiAgLy8vIGFzc2VydGluZyB0aGF0IGl0cyBlbGVtZW50cyBhcmUgaW5zdGFuY2VzIG9mIGBFYCB3aGVuZXZlciB0aGV5J3JlCiAgLy8vIGFjY2Vzc2VkLiBJZiB0aGV5J3JlIG5vdCwgaXQgdGhyb3dzIGEgW0Nhc3RFcnJvcl0uIE5vdGUgdGhhdCBldmVuIGlmIGFuCiAgLy8vIG9wZXJhdGlvbiB0aHJvd3MgYSBbQ2FzdEVycm9yXSwgaXQgbWF5IHN0aWxsIG11dGF0ZSB0aGUgdW5kZXJseWluZwogIC8vLyBjb2xsZWN0aW9uLgogIC8vLwogIC8vLyBUaGlzIGZvcndhcmRzIGFsbCBvcGVyYXRpb25zIHRvIFtiYXNlXSwgc28gYW55IGNoYW5nZXMgaW4gW2Jhc2VdIHdpbGwgYmUKICAvLy8gcmVmbGVjdGVkIGluIFt0aGlzXS4gSWYgW2Jhc2VdIGlzIGFscmVhZHkgYSBgU2V0PEU+YCwgaXQncyByZXR1cm5lZAogIC8vLyB1bm1vZGlmaWVkLgogIEBEZXByZWNhdGVkKCdVc2Ugc2V0LmNhc3Q8RT4gaW5zdGVhZC4nKQogIHN0YXRpYyBTZXQ8RT4gdHlwZWQ8RT4oU2V0IGJhc2UpID0+IGJhc2UuY2FzdDxFPigpOwoKICBTZXQ8RT4gZ2V0IF9zZXRCYXNlID0+IF9iYXNlOwoKICBib29sIGFkZChFIHZhbHVlKSA9PiBfc2V0QmFzZS5hZGQodmFsdWUpOwoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBlbGVtZW50cykgewogICAgX3NldEJhc2UuYWRkQWxsKGVsZW1lbnRzKTsKICB9CgogIFNldDxUPiBjYXN0PFQ+KCkgPT4gX3NldEJhc2UuY2FzdDxUPigpOwoKICB2b2lkIGNsZWFyKCkgewogICAgX3NldEJhc2UuY2xlYXIoKTsKICB9CgogIGJvb2wgY29udGFpbnNBbGwoSXRlcmFibGU8T2JqZWN0PiBvdGhlcikgPT4gX3NldEJhc2UuY29udGFpbnNBbGwob3RoZXIpOwoKICBTZXQ8RT4gZGlmZmVyZW5jZShTZXQ8T2JqZWN0PiBvdGhlcikgPT4gX3NldEJhc2UuZGlmZmVyZW5jZShvdGhlcik7CgogIFNldDxFPiBpbnRlcnNlY3Rpb24oU2V0PE9iamVjdD4gb3RoZXIpID0+IF9zZXRCYXNlLmludGVyc2VjdGlvbihvdGhlcik7CgogIEUgbG9va3VwKE9iamVjdCBlbGVtZW50KSA9PiBfc2V0QmFzZS5sb29rdXAoZWxlbWVudCk7CgogIGJvb2wgcmVtb3ZlKE9iamVjdCB2YWx1ZSkgPT4gX3NldEJhc2UucmVtb3ZlKHZhbHVlKTsKCiAgdm9pZCByZW1vdmVBbGwoSXRlcmFibGU8T2JqZWN0PiBlbGVtZW50cykgewogICAgX3NldEJhc2UucmVtb3ZlQWxsKGVsZW1lbnRzKTsKICB9CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIF9zZXRCYXNlLnJlbW92ZVdoZXJlKHRlc3QpOwogIH0KCiAgdm9pZCByZXRhaW5BbGwoSXRlcmFibGU8T2JqZWN0PiBlbGVtZW50cykgewogICAgX3NldEJhc2UucmV0YWluQWxsKGVsZW1lbnRzKTsKICB9CgogIEBkZXByZWNhdGVkCiAgU2V0PFQ+IHJldHlwZTxUPigpID0+IGNhc3Q8VD4oKTsKCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgX3NldEJhc2UucmV0YWluV2hlcmUodGVzdCk7CiAgfQoKICBTZXQ8RT4gdW5pb24oU2V0PEU+IG90aGVyKSA9PiBfc2V0QmFzZS51bmlvbihvdGhlcik7CgogIFNldDxFPiB0b1NldCgpID0+IG5ldyBEZWxlZ2F0aW5nU2V0PEU+KF9zZXRCYXNlLnRvU2V0KCkpOwp9CgovLy8gQSBbUXVldWVdIHRoYXQgZGVsZWdhdGVzIGFsbCBvcGVyYXRpb25zIHRvIGEgYmFzZSBxdWV1ZS4KLy8vCi8vLyBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIHRvIGhpZGUgbm9uLWBRdWV1ZWAgbWV0aG9kcyBvZiBhIHF1ZXVlIG9iamVjdCwgb3IgaXQKLy8vIGNhbiBiZSBleHRlbmRlZCB0byBhZGQgZXh0cmEgZnVuY3Rpb25hbGl0eSBvbiB0b3Agb2YgYW4gZXhpc3RpbmcgcXVldWUKLy8vIG9iamVjdC4KY2xhc3MgRGVsZWdhdGluZ1F1ZXVlPEU+IGV4dGVuZHMgRGVsZWdhdGluZ0l0ZXJhYmxlPEU+IGltcGxlbWVudHMgUXVldWU8RT4gewogIGNvbnN0IERlbGVnYXRpbmdRdWV1ZShRdWV1ZTxFPiBxdWV1ZSkgOiBzdXBlcihxdWV1ZSk7CgogIC8vLyBDcmVhdGVzIGEgd3JhcHBlciB0aGF0IGFzc2VydHMgdGhlIHR5cGVzIG9mIHZhbHVlcyBpbiBbYmFzZV0uCiAgLy8vCiAgLy8vIFRoaXMgc291bmRseSBjb252ZXJ0cyBhIFtRdWV1ZV0gd2l0aG91dCBhIGdlbmVyaWMgdHlwZSB0byBhIGBRdWV1ZTxFPmAgYnkKICAvLy8gYXNzZXJ0aW5nIHRoYXQgaXRzIGVsZW1lbnRzIGFyZSBpbnN0YW5jZXMgb2YgYEVgIHdoZW5ldmVyIHRoZXkncmUKICAvLy8gYWNjZXNzZWQuIElmIHRoZXkncmUgbm90LCBpdCB0aHJvd3MgYSBbQ2FzdEVycm9yXS4gTm90ZSB0aGF0IGV2ZW4gaWYgYW4KICAvLy8gb3BlcmF0aW9uIHRocm93cyBhIFtDYXN0RXJyb3JdLCBpdCBtYXkgc3RpbGwgbXV0YXRlIHRoZSB1bmRlcmx5aW5nCiAgLy8vIGNvbGxlY3Rpb24uCiAgLy8vCiAgLy8vIFRoaXMgZm9yd2FyZHMgYWxsIG9wZXJhdGlvbnMgdG8gW2Jhc2VdLCBzbyBhbnkgY2hhbmdlcyBpbiBbYmFzZV0gd2lsbCBiZQogIC8vLyByZWZsZWN0ZWQgaW4gW3RoaXNdLiBJZiBbYmFzZV0gaXMgYWxyZWFkeSBhIGBRdWV1ZTxFPmAsIGl0J3MgcmV0dXJuZWQKICAvLy8gdW5tb2RpZmllZC4KICBARGVwcmVjYXRlZCgnVXNlIHF1ZXVlLmNhc3Q8RT4gaW5zdGVhZC4nKQogIHN0YXRpYyBRdWV1ZTxFPiB0eXBlZDxFPihRdWV1ZSBiYXNlKSA9PiBiYXNlLmNhc3Q8RT4oKTsKCiAgUXVldWU8RT4gZ2V0IF9iYXNlUXVldWUgPT4gX2Jhc2U7CgogIHZvaWQgYWRkKEUgdmFsdWUpIHsKICAgIF9iYXNlUXVldWUuYWRkKHZhbHVlKTsKICB9CgogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKSB7CiAgICBfYmFzZVF1ZXVlLmFkZEFsbChpdGVyYWJsZSk7CiAgfQoKICB2b2lkIGFkZEZpcnN0KEUgdmFsdWUpIHsKICAgIF9iYXNlUXVldWUuYWRkRmlyc3QodmFsdWUpOwogIH0KCiAgdm9pZCBhZGRMYXN0KEUgdmFsdWUpIHsKICAgIF9iYXNlUXVldWUuYWRkTGFzdCh2YWx1ZSk7CiAgfQoKICBRdWV1ZTxUPiBjYXN0PFQ+KCkgPT4gX2Jhc2VRdWV1ZS5jYXN0PFQ+KCk7CgogIHZvaWQgY2xlYXIoKSB7CiAgICBfYmFzZVF1ZXVlLmNsZWFyKCk7CiAgfQoKICBib29sIHJlbW92ZShPYmplY3Qgb2JqZWN0KSA9PiBfYmFzZVF1ZXVlLnJlbW92ZShvYmplY3QpOwoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBfYmFzZVF1ZXVlLnJlbW92ZVdoZXJlKHRlc3QpOwogIH0KCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgX2Jhc2VRdWV1ZS5yZXRhaW5XaGVyZSh0ZXN0KTsKICB9CgogIEBkZXByZWNhdGVkCiAgUXVldWU8VD4gcmV0eXBlPFQ+KCkgPT4gY2FzdDxUPigpOwoKICBFIHJlbW92ZUZpcnN0KCkgPT4gX2Jhc2VRdWV1ZS5yZW1vdmVGaXJzdCgpOwoKICBFIHJlbW92ZUxhc3QoKSA9PiBfYmFzZVF1ZXVlLnJlbW92ZUxhc3QoKTsKfQoKLy8vIEEgW01hcF0gdGhhdCBkZWxlZ2F0ZXMgYWxsIG9wZXJhdGlvbnMgdG8gYSBiYXNlIG1hcC4KLy8vCi8vLyBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIHRvIGhpZGUgbm9uLWBNYXBgIG1ldGhvZHMgb2YgYW4gb2JqZWN0IHRoYXQgZXh0ZW5kcwovLy8gYE1hcGAsIG9yIGl0IGNhbiBiZSBleHRlbmRlZCB0byBhZGQgZXh0cmEgZnVuY3Rpb25hbGl0eSBvbiB0b3Agb2YgYW4KLy8vIGV4aXN0aW5nIG1hcCBvYmplY3QuCmNsYXNzIERlbGVnYXRpbmdNYXA8SywgVj4gaW1wbGVtZW50cyBNYXA8SywgVj4gewogIGZpbmFsIE1hcDxLLCBWPiBfYmFzZTsKCiAgY29uc3QgRGVsZWdhdGluZ01hcChNYXA8SywgVj4gYmFzZSkgOiBfYmFzZSA9IGJhc2U7CgogIC8vLyBDcmVhdGVzIGEgd3JhcHBlciB0aGF0IGFzc2VydHMgdGhlIHR5cGVzIG9mIGtleXMgYW5kIHZhbHVlcyBpbiBbYmFzZV0uCiAgLy8vCiAgLy8vIFRoaXMgc291bmRseSBjb252ZXJ0cyBhIFtNYXBdIHdpdGhvdXQgZ2VuZXJpYyB0eXBlcyB0byBhIGBNYXA8SywgVj5gIGJ5CiAgLy8vIGFzc2VydGluZyB0aGF0IGl0cyBrZXlzIGFyZSBpbnN0YW5jZXMgb2YgYEVgIGFuZCBpdHMgdmFsdWVzIGFyZSBpbnN0YW5jZXMKICAvLy8gb2YgYFZgIHdoZW5ldmVyIHRoZXkncmUgYWNjZXNzZWQuIElmIHRoZXkncmUgbm90LCBpdCB0aHJvd3MgYSBbQ2FzdEVycm9yXS4KICAvLy8gTm90ZSB0aGF0IGV2ZW4gaWYgYW4gb3BlcmF0aW9uIHRocm93cyBhIFtDYXN0RXJyb3JdLCBpdCBtYXkgc3RpbGwgbXV0YXRlCiAgLy8vIHRoZSB1bmRlcmx5aW5nIGNvbGxlY3Rpb24uCiAgLy8vCiAgLy8vIFRoaXMgZm9yd2FyZHMgYWxsIG9wZXJhdGlvbnMgdG8gW2Jhc2VdLCBzbyBhbnkgY2hhbmdlcyBpbiBbYmFzZV0gd2lsbCBiZQogIC8vLyByZWZsZWN0ZWQgaW4gW3RoaXNdLiBJZiBbYmFzZV0gaXMgYWxyZWFkeSBhIGBNYXA8SywgVj5gLCBpdCdzIHJldHVybmVkCiAgLy8vIHVubW9kaWZpZWQuCiAgQERlcHJlY2F0ZWQoJ1VzZSBtYXAuY2FzdDxLLCBWPiBpbnN0ZWFkLicpCiAgc3RhdGljIE1hcDxLLCBWPiB0eXBlZDxLLCBWPihNYXAgYmFzZSkgPT4gYmFzZS5jYXN0PEssIFY+KCk7CgogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgPT4gX2Jhc2Vba2V5XTsKCiAgdm9pZCBvcGVyYXRvciBbXT0oSyBrZXksIFYgdmFsdWUpIHsKICAgIF9iYXNlW2tleV0gPSB2YWx1ZTsKICB9CgogIHZvaWQgYWRkQWxsKE1hcDxLLCBWPiBvdGhlcikgewogICAgX2Jhc2UuYWRkQWxsKG90aGVyKTsKICB9CgogIHZvaWQgYWRkRW50cmllcyhJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZW50cmllcykgewogICAgX2Jhc2UuYWRkRW50cmllcyhlbnRyaWVzKTsKICB9CgogIHZvaWQgY2xlYXIoKSB7CiAgICBfYmFzZS5jbGVhcigpOwogIH0KCiAgTWFwPEsyLCBWMj4gY2FzdDxLMiwgVjI+KCkgPT4gX2Jhc2UuY2FzdDxLMiwgVjI+KCk7CgogIGJvb2wgY29udGFpbnNLZXkoT2JqZWN0IGtleSkgPT4gX2Jhc2UuY29udGFpbnNLZXkoa2V5KTsKCiAgYm9vbCBjb250YWluc1ZhbHVlKE9iamVjdCB2YWx1ZSkgPT4gX2Jhc2UuY29udGFpbnNWYWx1ZSh2YWx1ZSk7CgogIEl0ZXJhYmxlPE1hcEVudHJ5PEssIFY+PiBnZXQgZW50cmllcyA9PiBfYmFzZS5lbnRyaWVzOwoKICB2b2lkIGZvckVhY2godm9pZCBmKEsga2V5LCBWIHZhbHVlKSkgewogICAgX2Jhc2UuZm9yRWFjaChmKTsKICB9CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2Jhc2UuaXNFbXB0eTsKCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfYmFzZS5pc05vdEVtcHR5OwoKICBJdGVyYWJsZTxLPiBnZXQga2V5cyA9PiBfYmFzZS5rZXlzOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfYmFzZS5sZW5ndGg7CgogIE1hcDxLMiwgVjI+IG1hcDxLMiwgVjI+KE1hcEVudHJ5PEsyLCBWMj4gdHJhbnNmb3JtKEsga2V5LCBWIHZhbHVlKSkgPT4KICAgICAgX2Jhc2UubWFwKHRyYW5zZm9ybSk7CgogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSkgPT4gX2Jhc2UucHV0SWZBYnNlbnQoa2V5LCBpZkFic2VudCk7CgogIFYgcmVtb3ZlKE9iamVjdCBrZXkpID0+IF9iYXNlLnJlbW92ZShrZXkpOwoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChLIGtleSwgViB2YWx1ZSkpID0+IF9iYXNlLnJlbW92ZVdoZXJlKHRlc3QpOwoKICBAZGVwcmVjYXRlZAogIE1hcDxLMiwgVjI+IHJldHlwZTxLMiwgVjI+KCkgPT4gY2FzdDxLMiwgVjI+KCk7CgogIEl0ZXJhYmxlPFY+IGdldCB2YWx1ZXMgPT4gX2Jhc2UudmFsdWVzOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBfYmFzZS50b1N0cmluZygpOwoKICBWIHVwZGF0ZShLIGtleSwgViB1cGRhdGUoViB2YWx1ZSksIHtWIGlmQWJzZW50KCl9KSA9PgogICAgICBfYmFzZS51cGRhdGUoa2V5LCB1cGRhdGUsIGlmQWJzZW50OiBpZkFic2VudCk7CgogIHZvaWQgdXBkYXRlQWxsKFYgdXBkYXRlKEsga2V5LCBWIHZhbHVlKSkgPT4gX2Jhc2UudXBkYXRlQWxsKHVwZGF0ZSk7Cn0KCi8vLyBBbiB1bm1vZGlmaWFibGUgW1NldF0gdmlldyBvZiB0aGUga2V5cyBvZiBhIFtNYXBdLgovLy8KLy8vIFRoZSBzZXQgZGVsZWdhdGVzIGFsbCBvcGVyYXRpb25zIHRvIHRoZSB1bmRlcmx5aW5nIG1hcC4KLy8vCi8vLyBBIGBNYXBgIGNhbiBvbmx5IGNvbnRhaW4gZWFjaCBrZXkgb25jZSwgc28gaXRzIGtleXMgY2FuIGFsd2F5cwovLy8gYmUgdmlld2VkIGFzIGEgYFNldGAgd2l0aG91dCBhbnkgbG9zcywgZXZlbiBpZiB0aGUgW01hcC5rZXlzXQovLy8gZ2V0dGVyIG9ubHkgc2hvd3MgYW4gW0l0ZXJhYmxlXSB2aWV3IG9mIHRoZSBrZXlzLgovLy8KLy8vIE5vdGUgdGhhdCBbbG9va3VwXSBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIHNldC4KY2xhc3MgTWFwS2V5U2V0PEU+IGV4dGVuZHMgX0RlbGVnYXRpbmdJdGVyYWJsZUJhc2U8RT4KICAgIHdpdGggVW5tb2RpZmlhYmxlU2V0TWl4aW48RT4gewogIGZpbmFsIE1hcDxFLCBkeW5hbWljPiBfYmFzZU1hcDsKCiAgTWFwS2V5U2V0KE1hcDxFLCBkeW5hbWljPiBiYXNlKSA6IF9iYXNlTWFwID0gYmFzZTsKCiAgSXRlcmFibGU8RT4gZ2V0IF9iYXNlID0+IF9iYXNlTWFwLmtleXM7CgogIFNldDxUPiBjYXN0PFQ+KCkgewogICAgaWYgKHRoaXMgaXMgTWFwS2V5U2V0PFQ+KSB7CiAgICAgIHJldHVybiB0aGlzIGFzIE1hcEtleVNldDxUPjsKICAgIH0KICAgIHJldHVybiBTZXQuY2FzdEZyb208RSwgVD4odGhpcyk7CiAgfQoKICBib29sIGNvbnRhaW5zKE9iamVjdCBlbGVtZW50KSA9PiBfYmFzZU1hcC5jb250YWluc0tleShlbGVtZW50KTsKCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfYmFzZU1hcC5pc0VtcHR5OwoKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9iYXNlTWFwLmlzTm90RW1wdHk7CgogIGludCBnZXQgbGVuZ3RoID0+IF9iYXNlTWFwLmxlbmd0aDsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gInske19iYXNlLmpvaW4oJywgJyl9fSI7CgogIGJvb2wgY29udGFpbnNBbGwoSXRlcmFibGU8T2JqZWN0PiBvdGhlcikgPT4gb3RoZXIuZXZlcnkoY29udGFpbnMpOwoKICAvLy8gUmV0dXJucyBhIG5ldyBzZXQgd2l0aCB0aGUgdGhlIGVsZW1lbnRzIG9mIFt0aGlzXSB0aGF0IGFyZSBub3QgaW4gW290aGVyXS4KICAvLy8KICAvLy8gVGhhdCBpcywgdGhlIHJldHVybmVkIHNldCBjb250YWlucyBhbGwgdGhlIGVsZW1lbnRzIG9mIHRoaXMgW1NldF0gdGhhdCBhcmUKICAvLy8gbm90IGVsZW1lbnRzIG9mIFtvdGhlcl0gYWNjb3JkaW5nIHRvIGBvdGhlci5jb250YWluc2AuCiAgLy8vCiAgLy8vIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgc2V0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IGVxdWFsaXR5IG9wZXJhdGlvbiwgd2hpY2gKICAvLy8gbWF5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBlcXVhbGl0eSBvcGVyYXRpb24gW3RoaXNdIHVzZXMuCiAgU2V0PEU+IGRpZmZlcmVuY2UoU2V0PE9iamVjdD4gb3RoZXIpID0+CiAgICAgIHdoZXJlKChlbGVtZW50KSA9PiAhb3RoZXIuY29udGFpbnMoZWxlbWVudCkpLnRvU2V0KCk7CgogIC8vLyBSZXR1cm5zIGEgbmV3IHNldCB3aGljaCBpcyB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gW3RoaXNdIGFuZCBbb3RoZXJdLgogIC8vLwogIC8vLyBUaGF0IGlzLCB0aGUgcmV0dXJuZWQgc2V0IGNvbnRhaW5zIGFsbCB0aGUgZWxlbWVudHMgb2YgdGhpcyBbU2V0XSB0aGF0IGFyZQogIC8vLyBhbHNvIGVsZW1lbnRzIG9mIFtvdGhlcl0gYWNjb3JkaW5nIHRvIGBvdGhlci5jb250YWluc2AuCiAgLy8vCiAgLy8vIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgc2V0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IGVxdWFsaXR5IG9wZXJhdGlvbiwgd2hpY2gKICAvLy8gbWF5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBlcXVhbGl0eSBvcGVyYXRpb24gW3RoaXNdIHVzZXMuCiAgU2V0PEU+IGludGVyc2VjdGlvbihTZXQ8T2JqZWN0PiBvdGhlcikgPT4gd2hlcmUob3RoZXIuY29udGFpbnMpLnRvU2V0KCk7CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdIHNpbmNlIHRoZXJlJ3Mgbm8gY29ycmVzcG9uZGluZyBtZXRob2QgZm9yCiAgLy8vIFtNYXBdcy4KICBFIGxvb2t1cChPYmplY3QgZWxlbWVudCkgPT4KICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIk1hcEtleVNldCBkb2Vzbid0IHN1cHBvcnQgbG9va3VwKCkuIik7CgogIEBkZXByZWNhdGVkCiAgU2V0PFQ+IHJldHlwZTxUPigpID0+IFNldC5jYXN0RnJvbTxFLCBUPih0aGlzKTsKCiAgLy8vIFJldHVybnMgYSBuZXcgc2V0IHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgZWxlbWVudHMgb2YgW3RoaXNdIGFuZCBbb3RoZXJdLgogIC8vLwogIC8vLyBUaGF0IGlzLCB0aGUgcmV0dXJuZWQgc2V0IGNvbnRhaW5zIGFsbCB0aGUgZWxlbWVudHMgb2YgdGhpcyBbU2V0XSBhbmQgYWxsCiAgLy8vIHRoZSBlbGVtZW50cyBvZiBbb3RoZXJdLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgdGhlIHJldHVybmVkIHNldCB3aWxsIHVzZSB0aGUgZGVmYXVsdCBlcXVhbGl0eSBvcGVyYXRpb24sIHdoaWNoCiAgLy8vIG1heSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgZXF1YWxpdHkgb3BlcmF0aW9uIFt0aGlzXSB1c2VzLgogIFNldDxFPiB1bmlvbihTZXQ8RT4gb3RoZXIpID0+IHRvU2V0KCkuLmFkZEFsbChvdGhlcik7Cn0KCi8vLyBDcmVhdGVzIGEgbW9kaWZpYWJsZSBbU2V0XSB2aWV3IG9mIHRoZSB2YWx1ZXMgb2YgYSBbTWFwXS4KLy8vCi8vLyBUaGUgYFNldGAgdmlldyBhc3N1bWVzIHRoYXQgdGhlIGtleXMgb2YgdGhlIGBNYXBgIGNhbiBiZSB1bmlxdWVseSBkZXRlcm1pbmVkCi8vLyBmcm9tIHRoZSB2YWx1ZXMuIFRoZSBga2V5Rm9yVmFsdWVgIGZ1bmN0aW9uIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IgZmluZHMKLy8vIHRoZSBrZXkgZm9yIGEgc2luZ2xlIHZhbHVlLiBUaGUgYGtleUZvclZhbHVlYCBmdW5jdGlvbiBzaG91bGQgYmUgY29uc2lzdGVudAovLy8gd2l0aCBlcXVhbGl0eS4gSWYgYHZhbHVlMSA9PSB2YWx1ZTJgIHRoZW4gYGtleUZvclZhbHVlKHZhbHVlMSlgIGFuZAovLy8gYGtleUZvclZhbHVlKHZhbHVlMilgIHNob3VsZCBiZSBjb25zaWRlcmVkIGVxdWFsIGtleXMgYnkgdGhlIHVuZGVybHlpbmcgbWFwLAovLy8gYW5kIHZpY2UgdmVyc2EuCi8vLwovLy8gTW9kaWZ5aW5nIHRoZSBzZXQgd2lsbCBtb2RpZnkgdGhlIHVuZGVybHlpbmcgbWFwIGJhc2VkIG9uIHRoZSBrZXkgcmV0dXJuZWQKLy8vIGJ5IGBrZXlGb3JWYWx1ZWAuCi8vLwovLy8gSWYgdGhlIGBNYXBgIGNvbnRlbnRzIGFyZSBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBga2V5Rm9yVmFsdWVgIGZ1bmN0aW9uLAovLy8gdGhlIHNldCB3aWxsIG5vdCB3b3JrIGNvbnNpc3RlbnRseSwgYW5kIG1heSBnaXZlIG1lYW5pbmdsZXNzIHJlc3BvbnNlcyBvciBkbwovLy8gaW5jb25zaXN0ZW50IHVwZGF0ZXMuCi8vLwovLy8gVGhpcyBzZXQgY2FuLCBmb3IgZXhhbXBsZSwgYmUgdXNlZCBvbiBhIG1hcCBmcm9tIGRhdGFiYXNlIHJlY29yZCBJRHMgdG8gdGhlCi8vLyByZWNvcmRzLiBJdCBleHBvc2VzIHRoZSByZWNvcmRzIGFzIGEgc2V0LCBhbmQgYWxsb3dzIGZvciB3cml0aW5nIGJvdGgKLy8vIGByZWNvcmRTZXQuYWRkKGRhdGFiYXNlUmVjb3JkKWAgYW5kIGByZWNvcmRNYXBbaWRdYC4KLy8vCi8vLyBFZmZlY3RpdmVseSwgdGhlIG1hcCB3aWxsIGFjdCBhcyBhIGtpbmQgb2YgaW5kZXggZm9yIHRoZSBzZXQuCmNsYXNzIE1hcFZhbHVlU2V0PEssIFY+IGV4dGVuZHMgX0RlbGVnYXRpbmdJdGVyYWJsZUJhc2U8Vj4gaW1wbGVtZW50cyBTZXQ8Vj4gewogIGZpbmFsIE1hcDxLLCBWPiBfYmFzZU1hcDsKICBmaW5hbCBfS2V5Rm9yVmFsdWU8SywgVj4gX2tleUZvclZhbHVlOwoKICAvLy8gQ3JlYXRlcyBhIG5ldyBbTWFwVmFsdWVTZXRdIGJhc2VkIG9uIFtiYXNlXS4KICAvLy8KICAvLy8gW2tleUZvclZhbHVlXSByZXR1cm5zIHRoZSBrZXkgaW4gdGhlIG1hcCB0aGF0IHNob3VsZCBiZSBhc3NvY2lhdGVkIHdpdGgKICAvLy8gdGhlIGdpdmVuIHZhbHVlLiBUaGUgc2V0J3Mgbm90aW9uIG9mIGVxdWFsaXR5IGlzIGlkZW50aWNhbCB0byB0aGUgZXF1YWxpdHkKICAvLy8gb2YgdGhlIHJldHVybiB2YWx1ZXMgb2YgW2tleUZvclZhbHVlXS4KICBNYXBWYWx1ZVNldChNYXA8SywgVj4gYmFzZSwgSyBrZXlGb3JWYWx1ZShWIHZhbHVlKSkKICAgICAgOiBfYmFzZU1hcCA9IGJhc2UsCiAgICAgICAgX2tleUZvclZhbHVlID0ga2V5Rm9yVmFsdWU7CgogIEl0ZXJhYmxlPFY+IGdldCBfYmFzZSA9PiBfYmFzZU1hcC52YWx1ZXM7CgogIFNldDxUPiBjYXN0PFQ+KCkgewogICAgaWYgKHRoaXMgaXMgU2V0PFQ+KSB7CiAgICAgIHJldHVybiB0aGlzIGFzIFNldDxUPjsKICAgIH0KICAgIHJldHVybiBTZXQuY2FzdEZyb208ViwgVD4odGhpcyk7CiAgfQoKICBib29sIGNvbnRhaW5zKE9iamVjdCBlbGVtZW50KSB7CiAgICBpZiAoZWxlbWVudCAhPSBudWxsICYmIGVsZW1lbnQgaXMhIFYpIHJldHVybiBmYWxzZTsKICAgIHZhciBrZXkgPSBfa2V5Rm9yVmFsdWUoZWxlbWVudCBhcyBWKTsKCiAgICByZXR1cm4gX2Jhc2VNYXAuY29udGFpbnNLZXkoa2V5KTsKICB9CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2Jhc2VNYXAuaXNFbXB0eTsKCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfYmFzZU1hcC5pc05vdEVtcHR5OwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfYmFzZU1hcC5sZW5ndGg7CgogIFN0cmluZyB0b1N0cmluZygpID0+IHRvU2V0KCkudG9TdHJpbmcoKTsKCiAgYm9vbCBhZGQoViB2YWx1ZSkgewogICAgSyBrZXkgPSBfa2V5Rm9yVmFsdWUodmFsdWUpOwogICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKICAgIF9iYXNlTWFwLnB1dElmQWJzZW50KGtleSwgKCkgewogICAgICByZXN1bHQgPSB0cnVlOwogICAgICByZXR1cm4gdmFsdWU7CiAgICB9KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxWPiBlbGVtZW50cykgPT4gZWxlbWVudHMuZm9yRWFjaChhZGQpOwoKICB2b2lkIGNsZWFyKCkgPT4gX2Jhc2VNYXAuY2xlYXIoKTsKCiAgYm9vbCBjb250YWluc0FsbChJdGVyYWJsZTxPYmplY3Q+IG90aGVyKSA9PiBvdGhlci5ldmVyeShjb250YWlucyk7CgogIC8vLyBSZXR1cm5zIGEgbmV3IHNldCB3aXRoIHRoZSB0aGUgZWxlbWVudHMgb2YgW3RoaXNdIHRoYXQgYXJlIG5vdCBpbiBbb3RoZXJdLgogIC8vLwogIC8vLyBUaGF0IGlzLCB0aGUgcmV0dXJuZWQgc2V0IGNvbnRhaW5zIGFsbCB0aGUgZWxlbWVudHMgb2YgdGhpcyBbU2V0XSB0aGF0IGFyZQogIC8vLyBub3QgZWxlbWVudHMgb2YgW290aGVyXSBhY2NvcmRpbmcgdG8gYG90aGVyLmNvbnRhaW5zYC4KICAvLy8KICAvLy8gTm90ZSB0aGF0IHRoZSByZXR1cm5lZCBzZXQgd2lsbCB1c2UgdGhlIGRlZmF1bHQgZXF1YWxpdHkgb3BlcmF0aW9uLCB3aGljaAogIC8vLyBtYXkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIGVxdWFsaXR5IG9wZXJhdGlvbiBbdGhpc10gdXNlcy4KICBTZXQ8Vj4gZGlmZmVyZW5jZShTZXQ8T2JqZWN0PiBvdGhlcikgPT4KICAgICAgd2hlcmUoKGVsZW1lbnQpID0+ICFvdGhlci5jb250YWlucyhlbGVtZW50KSkudG9TZXQoKTsKCiAgLy8vIFJldHVybnMgYSBuZXcgc2V0IHdoaWNoIGlzIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiBbdGhpc10gYW5kIFtvdGhlcl0uCiAgLy8vCiAgLy8vIFRoYXQgaXMsIHRoZSByZXR1cm5lZCBzZXQgY29udGFpbnMgYWxsIHRoZSBlbGVtZW50cyBvZiB0aGlzIFtTZXRdIHRoYXQgYXJlCiAgLy8vIGFsc28gZWxlbWVudHMgb2YgW290aGVyXSBhY2NvcmRpbmcgdG8gYG90aGVyLmNvbnRhaW5zYC4KICAvLy8KICAvLy8gTm90ZSB0aGF0IHRoZSByZXR1cm5lZCBzZXQgd2lsbCB1c2UgdGhlIGRlZmF1bHQgZXF1YWxpdHkgb3BlcmF0aW9uLCB3aGljaAogIC8vLyBtYXkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIGVxdWFsaXR5IG9wZXJhdGlvbiBbdGhpc10gdXNlcy4KICBTZXQ8Vj4gaW50ZXJzZWN0aW9uKFNldDxPYmplY3Q+IG90aGVyKSA9PiB3aGVyZShvdGhlci5jb250YWlucykudG9TZXQoKTsKCiAgViBsb29rdXAoT2JqZWN0IGVsZW1lbnQpIHsKICAgIGlmIChlbGVtZW50ICE9IG51bGwgJiYgZWxlbWVudCBpcyEgVikgcmV0dXJuIG51bGw7CiAgICB2YXIga2V5ID0gX2tleUZvclZhbHVlKGVsZW1lbnQgYXMgVik7CgogICAgcmV0dXJuIF9iYXNlTWFwW2tleV07CiAgfQoKICBib29sIHJlbW92ZShPYmplY3QgZWxlbWVudCkgewogICAgaWYgKGVsZW1lbnQgIT0gbnVsbCAmJiBlbGVtZW50IGlzISBWKSByZXR1cm4gZmFsc2U7CiAgICB2YXIga2V5ID0gX2tleUZvclZhbHVlKGVsZW1lbnQgYXMgVik7CgogICAgaWYgKCFfYmFzZU1hcC5jb250YWluc0tleShrZXkpKSByZXR1cm4gZmFsc2U7CiAgICBfYmFzZU1hcC5yZW1vdmUoa2V5KTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgdm9pZCByZW1vdmVBbGwoSXRlcmFibGU8T2JqZWN0PiBlbGVtZW50cykgPT4gZWxlbWVudHMuZm9yRWFjaChyZW1vdmUpOwoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChWIGVsZW1lbnQpKSB7CiAgICB2YXIgdG9SZW1vdmUgPSBbXTsKICAgIF9iYXNlTWFwLmZvckVhY2goKGtleSwgdmFsdWUpIHsKICAgICAgaWYgKHRlc3QodmFsdWUpKSB0b1JlbW92ZS5hZGQoa2V5KTsKICAgIH0pOwogICAgdG9SZW1vdmUuZm9yRWFjaChfYmFzZU1hcC5yZW1vdmUpOwogIH0KCiAgdm9pZCByZXRhaW5BbGwoSXRlcmFibGU8T2JqZWN0PiBlbGVtZW50cykgewogICAgdmFyIHZhbHVlc1RvUmV0YWluID0gbmV3IFNldDxWPi5pZGVudGl0eSgpOwogICAgZm9yICh2YXIgZWxlbWVudCBpbiBlbGVtZW50cykgewogICAgICBpZiAoZWxlbWVudCAhPSBudWxsICYmIGVsZW1lbnQgaXMhIFYpIGNvbnRpbnVlOwogICAgICB2YXIga2V5ID0gX2tleUZvclZhbHVlKGVsZW1lbnQgYXMgVik7CgogICAgICBpZiAoIV9iYXNlTWFwLmNvbnRhaW5zS2V5KGtleSkpIGNvbnRpbnVlOwogICAgICB2YWx1ZXNUb1JldGFpbi5hZGQoX2Jhc2VNYXBba2V5XSk7CiAgICB9CgogICAgdmFyIGtleXNUb1JlbW92ZSA9IFtdOwogICAgX2Jhc2VNYXAuZm9yRWFjaCgoaywgdikgewogICAgICBpZiAoIXZhbHVlc1RvUmV0YWluLmNvbnRhaW5zKHYpKSBrZXlzVG9SZW1vdmUuYWRkKGspOwogICAgfSk7CiAgICBrZXlzVG9SZW1vdmUuZm9yRWFjaChfYmFzZU1hcC5yZW1vdmUpOwogIH0KCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoViBlbGVtZW50KSkgPT4KICAgICAgcmVtb3ZlV2hlcmUoKGVsZW1lbnQpID0+ICF0ZXN0KGVsZW1lbnQpKTsKCiAgQGRlcHJlY2F0ZWQKICBTZXQ8VD4gcmV0eXBlPFQ+KCkgPT4gU2V0LmNhc3RGcm9tPFYsIFQ+KHRoaXMpOwoKICAvLy8gUmV0dXJucyBhIG5ldyBzZXQgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBlbGVtZW50cyBvZiBbdGhpc10gYW5kIFtvdGhlcl0uCiAgLy8vCiAgLy8vIFRoYXQgaXMsIHRoZSByZXR1cm5lZCBzZXQgY29udGFpbnMgYWxsIHRoZSBlbGVtZW50cyBvZiB0aGlzIFtTZXRdIGFuZCBhbGwKICAvLy8gdGhlIGVsZW1lbnRzIG9mIFtvdGhlcl0uCiAgLy8vCiAgLy8vIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgc2V0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IGVxdWFsaXR5IG9wZXJhdGlvbiwgd2hpY2gKICAvLy8gbWF5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBlcXVhbGl0eSBvcGVyYXRpb24gW3RoaXNdIHVzZXMuCiAgU2V0PFY+IHVuaW9uKFNldDxWPiBvdGhlcikgPT4gdG9TZXQoKS4uYWRkQWxsKG90aGVyKTsKfQqCswBOTjwBGhwBJQEnASsESUhDGQEjATUBLAE8ATQBOQFGAR4BNi4BRikBSAE3ASUBKwEuAUEBHAE1LQEiATYBRAEOKAEgATY0BAEsAUYBLAFGAU0BIwFAATYBKQIBRARRSxVBGwE8PQFEBkdRQQZPUBIvQAIBOwROSgxLNAFEBk5ITkkSBk9LEis4ASIBMAEqHgQBOgEWGgQBJiAEASwBLAERFwQBNjAEARc7FQQBTgFQATspASYmBAEvKgQBFjsjBAEtLQE7LQEeIgQBOAE2ASwBKScEASshBAFAMgQBKyEEAQ4kATIBMScEAVE5BAEnHwQBJx0EAUoCATkEUE1JMgFEBkxITkkSBk9KEio2ASABLAEmHwQBKgERFgQBSwFGAUoBOAE3AS4iBAErIAQBLiIEAQ4jASsgBAE3ATwCAT0EUEsMTTgBRAZQSE5JEgZPTBIsOgEkARYbBAEmIQQBGyAEARofBAEuAREYBAE7ASsiBAErIgQBDiUBLwEtAgE5BE9JGTEZATYBTQZOUFFPIQZPTRItPwErASYYBAEhGQQBNh8EARETBAE2AToBQgE5ASkWBAElASsBJgEiAUkcAUoBLQFKAQ4yASoBKQE4NQFHAgE3BDwEQ0I2BDY2IyIBNQEqARUgIwYlBAFCASgBLgElATABRQFRBlE9BlBAKjwBTgZRPgZQQEsBTQ4eSQEOMgFPBlAfBlBAOAIBPgRRUFBIURQETxYETlEaBFBKOQRCTxwpATMGTlEtNhkkASwBFRodBiUEASI4KgEmBAEoAS4BJQErARYhGSMVFAgTBAE+ASQBRQFRBlE9BlBAKjwBTgZRPgZQQEsBHTcqARoEASA4KgEyGhEEAUkBKxckKggnBAEuMCQ2LAEwKQYBGx48CCsEASwwAQ4yAU8GUB8GUEA4AgEkcGFja2FnZTpjb2xsZWN0aW9uL3NyYy93cmFwcGVycy5kYXJ0OHNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9kYXJ0MmpzX2luZm8vbGliL3NyYy9ncmFwaC5kYXJ0qN4vLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIEEgbGlicmFyeSB0byB3b3JrIHdpdGggZ3JhcGhzLiBJdCBjb250YWlucyBhIGNvdXBsZSBhbGdvcml0aG1zLCBpbmNsdWRpbmcKLy8vIFRhcmphbidzIGFsZ29yaXRobSB0byBjb21wdXRlIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnRzIGluIGEgZ3JhcGggYW5kCi8vLyBDb29wZXIgZXQgYWwncyBkb21pbmF0b3IgYWxnb3JpdGhtLgovLy8KLy8vIFBvcnRpb25zIG9mIHRoZSBjb2RlIGluIHRoaXMgbGlicmFyeSB3YXMgYWRhcHRlZCBmcm9tCi8vLyBgcGFja2FnZTphbmFseXplci9zcmMvZ2VuZXJhdGVkL2NvbGxlY3Rpb25fdXRpbGl0aWVzLmRhcnRgLgovLyBUT0RPKHNpZ211bmQpOiBtb3ZlIHRoaXMgaW50byBhIHNoYXJlZCBwbGFjZSwgbGlrZSBxdWl2ZXI/CmxpYnJhcnkgZGFydDJqc19pbmZvLnNyYy5ncmFwaDsKCmltcG9ydCAnZGFydDptYXRoJyBhcyBtYXRoOwoKYWJzdHJhY3QgY2xhc3MgR3JhcGg8Tj4gewogIEl0ZXJhYmxlPE4+IGdldCBub2RlczsKICBib29sIGdldCBpc0VtcHR5OwogIGludCBnZXQgbm9kZUNvdW50OwogIEl0ZXJhYmxlPE4+IHRhcmdldHNPZihOIHNvdXJjZSk7CiAgSXRlcmFibGU8Tj4gc291cmNlc09mKE4gc291cmNlKTsKCiAgLy8vIFJ1biBhIHRvcG9sb2dpY2FsIHNvcnQgb2YgdGhlIGdyYXBoLiBTaW5jZSB0aGUgZ3JhcGggbWF5IGNvbnRhaW4gY3ljbGVzLAogIC8vLyB0aGlzIHJlc3VsdHMgaW4gYSBsaXN0IG9mIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnRzIHJhdGhlciB0aGFuIGEgbGlzdAogIC8vLyBvZiBub2Rlcy4gVGhlIG5vZGVzIGluIGVhY2ggc3Ryb25nbHkgY29ubmVjdGVkIGNvbXBvbmVudHMgb25seSBoYXZlIGVkZ2VzCiAgLy8vIHRoYXQgcG9pbnQgdG8gbm9kZXMgaW4gdGhlIHNhbWUgY29tcG9uZW50IG9yIGVhcmxpZXIgY29tcG9uZW50cy4KICBMaXN0PExpc3Q8Tj4+IGNvbXB1dGVUb3BvbG9naWNhbFNvcnQoKSB7CiAgICBfU2NjRmluZGVyPE4+IGZpbmRlciA9IG5ldyBfU2NjRmluZGVyPE4+KHRoaXMpOwogICAgcmV0dXJuIGZpbmRlci5jb21wdXRlVG9wb2xvZ2ljYWxTb3J0KCk7CiAgfQoKICAvLy8gV2hldGhlciBbc291cmNlXSBjYW4gdHJhbnNpdGl2ZWx5IHJlYWNoIFt0YXJnZXRdLgogIGJvb2wgY29udGFpbnNQYXRoKE4gc291cmNlLCBOIHRhcmdldCkgewogICAgU2V0PE4+IHNlZW4gPSBuZXcgU2V0PE4+KCk7CiAgICBib29sIGhlbHBlcihOIG5vZGUpIHsKICAgICAgaWYgKGlkZW50aWNhbChub2RlLCB0YXJnZXQpKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKCFzZWVuLmFkZChub2RlKSkgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdGFyZ2V0c09mKG5vZGUpLmFueShoZWxwZXIpOwogICAgfQoKICAgIHJldHVybiBoZWxwZXIoc291cmNlKTsKICB9CgogIC8vLyBSZXR1cm5zIGFsbCBub2RlcyByZWFjaGFibGUgZnJvbSBbcm9vdF0gaW4gcG9zdCBvcmRlci4KICBJdGVyYWJsZTxOPiBwb3N0T3JkZXIoTiByb290KSBzeW5jKiB7CiAgICB2YXIgc2VlbiA9IG5ldyBTZXQ8Tj4oKTsKICAgIEl0ZXJhYmxlPE4+IGhlbHBlcihOIG4pIHN5bmMqIHsKICAgICAgaWYgKCFzZWVuLmFkZChuKSkgcmV0dXJuOwogICAgICBmb3IgKHZhciB4IGluIHRhcmdldHNPZihuKSkgewogICAgICAgIHlpZWxkKiBoZWxwZXIoeCk7CiAgICAgIH0KICAgICAgeWllbGQgbjsKICAgIH0KCiAgICB5aWVsZCogaGVscGVyKHJvb3QpOwogIH0KCiAgLy8vIFJldHVybnMgYW4gaXRlcmFibGUgb2YgYWxsIG5vZGVzIHJlYWNoYWJsZSBmcm9tIFtyb290XSBpbiBwcmVvcmRlci4KICBJdGVyYWJsZTxOPiBwcmVPcmRlcihOIHJvb3QpIHN5bmMqIHsKICAgIHZhciBzZWVuID0gbmV3IFNldDxOPigpOwogICAgdmFyIHN0YWNrID0gPE4+W3Jvb3RdOwogICAgd2hpbGUgKHN0YWNrLmlzTm90RW1wdHkpIHsKICAgICAgdmFyIG5leHQgPSBzdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgIGlmICghc2Vlbi5jb250YWlucyhuZXh0KSkgewogICAgICAgIHNlZW4uYWRkKG5leHQpOwogICAgICAgIHlpZWxkIG5leHQ7CiAgICAgICAgc3RhY2suYWRkQWxsKHRhcmdldHNPZihuZXh0KSk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIGEgbGlzdCBvZiBub2RlcyB0aGF0IGZvcm0gYSBjeWNsZSBjb250YWluaW5nIHRoZSBnaXZlbiBub2RlLiBJZgogIC8vLyB0aGUgbm9kZSBpcyBub3QgcGFydCBvZiBhIGN5Y2xlIGluIHRoaXMgZ3JhcGgsIHRoZW4gYSBsaXN0IGNvbnRhaW5pbmcgb25seQogIC8vLyB0aGUgbm9kZSBpdHNlbGYgd2lsbCBiZSByZXR1cm5lZC4KICBMaXN0PE4+IGZpbmRDeWNsZUNvbnRhaW5pbmcoTiBub2RlKSB7CiAgICBhc3NlcnQobm9kZSAhPSBudWxsKTsKICAgIF9TY2NGaW5kZXI8Tj4gZmluZGVyID0gbmV3IF9TY2NGaW5kZXI8Tj4odGhpcyk7CiAgICByZXR1cm4gZmluZGVyLl9jb21wb25lbnRDb250YWluaW5nKG5vZGUpOwogIH0KCiAgLy8vIFJldHVybnMgYSBkb21pbmF0b3IgdHJlZSBzdGFydGluZyBmcm9tIHJvb3QuIFRoaXMgaXMgYSBuZXcgZ3JhcGgsIHdpdGggdGhlCiAgLy8vIHNhbWUgbm9kZXMgYXMgdGhpcyBncmFwaCwgYnV0IHdoZXJlIGVkZ2VzIGV4aXN0IGJldHdlZW4gYSBub2RlIGFuZCB0aGUKICAvLy8gbm9kZXMgaXQgaW1tZWRpYXRlbHkgZG9taW5hdGVzLiBGb3IgZXhhbXBsZSwgdGhpcyBncmFwaDoKICAvLy8KICAvLy8gICAgICAgcm9vdAogIC8vLyAgICAgICAvICAgXAogIC8vLyAgICAgIGEgICAgIGIKICAvLy8gICAgICB8ICAgIC8gXAogIC8vLyAgICAgIGMgICBkICAgZQogIC8vLyAgICAgICBcIC8gXCAvCiAgLy8vICAgICAgICBmICAgZwogIC8vLwogIC8vLyBQcm9kdWNlcyB0aGlzIHRyZWU6CiAgLy8vCiAgLy8vICAgICAgIHJvb3QKICAvLy8gICAgICAgL3wgIFwKICAvLy8gICAgICBhIHwgICBiCiAgLy8vICAgICAgfCB8ICAvfFwKICAvLy8gICAgICBjIHwgZCB8IGUKICAvLy8gICAgICAgIHwgICB8CiAgLy8vICAgICAgICBmICAgZwogIC8vLwogIC8vLyBJbnRlcm5hbGx5IHdlIGNvbXB1dGUgZG9taW5hdG9ycyB1c2luZyAoQ29vcGVyLCBIYXJ2ZXksIGFuZCBLZW5uZWR5J3MKICAvLy8gYWxnb3JpdGhtKVtodHRwOi8vd3d3LmNzLnJpY2UuZWR1L35rZWl0aC9FTUJFRC9kb20ucGRmXS4KICBHcmFwaDxOPiBkb21pbmF0b3JUcmVlKE4gcm9vdCkgewogICAgdmFyIGlEb20gPSAobmV3IF9Eb21pbmF0b3JGaW5kZXIodGhpcykuLnJ1bihyb290KSkuaW1tZWRpYXRlRG9taW5hdG9yczsKICAgIHZhciBncmFwaCA9IG5ldyBFZGdlTGlzdEdyYXBoPE4+KCk7CiAgICBmb3IgKE4gbm9kZSBpbiBpRG9tLmtleXMpIHsKICAgICAgaWYgKG5vZGUgIT0gcm9vdCkgZ3JhcGguYWRkRWRnZShpRG9tW25vZGVdLCBub2RlKTsKICAgIH0KICAgIHJldHVybiBncmFwaDsKICB9Cn0KCmNsYXNzIEVkZ2VMaXN0R3JhcGg8Tj4gZXh0ZW5kcyBHcmFwaDxOPiB7CiAgLy8vIEVkZ2VzIGluIHRoZSBncmFwaC4KICBNYXA8TiwgU2V0PE4+PiBfZWRnZXMgPSBuZXcgTWFwPE4sIFNldDxOPj4oKTsKCiAgLy8vIFRoZSByZXZlcnNlIG9mIF9lZGdlcy4KICBNYXA8TiwgU2V0PE4+PiBfcmV2RWRnZXMgPSBuZXcgTWFwPE4sIFNldDxOPj4oKTsKCiAgSXRlcmFibGU8Tj4gZ2V0IG5vZGVzID0+IF9lZGdlcy5rZXlzOwogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2VkZ2VzLmlzRW1wdHk7CiAgaW50IGdldCBub2RlQ291bnQgPT4gX2VkZ2VzLmxlbmd0aDsKCiAgZmluYWwgX2VtcHR5ID0gbmV3IFNldDxOPigpOwoKICBJdGVyYWJsZTxOPiB0YXJnZXRzT2YoTiBzb3VyY2UpID0+IF9lZGdlc1tzb3VyY2VdID8/IF9lbXB0eTsKICBJdGVyYWJsZTxOPiBzb3VyY2VzT2YoTiBzb3VyY2UpID0+IF9yZXZFZGdlc1tzb3VyY2VdID8/IF9lbXB0eTsKCiAgdm9pZCBhZGRFZGdlKE4gc291cmNlLCBOIHRhcmdldCkgewogICAgYXNzZXJ0KHNvdXJjZSAhPSBudWxsKTsKICAgIGFzc2VydCh0YXJnZXQgIT0gbnVsbCk7CiAgICBhZGROb2RlKHNvdXJjZSk7CiAgICBhZGROb2RlKHRhcmdldCk7CiAgICBfZWRnZXNbc291cmNlXS5hZGQodGFyZ2V0KTsKICAgIF9yZXZFZGdlc1t0YXJnZXRdLmFkZChzb3VyY2UpOwogIH0KCiAgdm9pZCBhZGROb2RlKE4gbm9kZSkgewogICAgYXNzZXJ0KG5vZGUgIT0gbnVsbCk7CiAgICBfZWRnZXMucHV0SWZBYnNlbnQobm9kZSwgKCkgPT4gbmV3IFNldDxOPigpKTsKICAgIF9yZXZFZGdlcy5wdXRJZkFic2VudChub2RlLCAoKSA9PiBuZXcgU2V0PE4+KCkpOwogIH0KCiAgLy8vIFJlbW92ZSB0aGUgZWRnZSBmcm9tIHRoZSBnaXZlbiBbc291cmNlXSBub2RlIHRvIHRoZSBnaXZlbiBbdGFyZ2V0XSBub2RlLgogIC8vLyBJZiB0aGVyZSB3YXMgbm8gc3VjaCBlZGdlIHRoZW4gdGhlIGdyYXBoIHdpbGwgYmUgdW5tb2RpZmllZDogdGhlIG51bWJlciBvZgogIC8vLyBlZGdlcyB3aWxsIGJlIHRoZSBzYW1lIGFuZCB0aGUgc2V0IG9mIG5vZGVzIHdpbGwgYmUgdGhlIHNhbWUgKG5laXRoZXIgbm9kZQogIC8vLyB3aWxsIGVpdGhlciBiZSBhZGRlZCBvciByZW1vdmVkKS4KICB2b2lkIHJlbW92ZUVkZ2UoTiBzb3VyY2UsIE4gdGFyZ2V0KSB7CiAgICBfZWRnZXNbc291cmNlXT8ucmVtb3ZlKHRhcmdldCk7CiAgfQoKICAvLy8gUmVtb3ZlIHRoZSBnaXZlbiBub2RlIGZyb20gdGhpcyBncmFwaC4gQXMgYSBjb25zZXF1ZW5jZSwgYW55IGVkZ2VzIGZvcgogIC8vLyB3aGljaCB0aGF0IG5vZGUgd2FzIGVpdGhlciBhIGhlYWQgb3IgYSB0YWlsIHdpbGwgYWxzbyBiZSByZW1vdmVkLgogIHZvaWQgcmVtb3ZlTm9kZShOIG5vZGUpIHsKICAgIF9lZGdlcy5yZW1vdmUobm9kZSk7CiAgICB2YXIgc291cmNlcyA9IF9yZXZFZGdlc1tub2RlXTsKICAgIGlmIChzb3VyY2VzID09IG51bGwpIHJldHVybjsKICAgIGZvciAodmFyIHNvdXJjZSBpbiBzb3VyY2VzKSB7CiAgICAgIF9lZGdlc1tzb3VyY2VdLnJlbW92ZShub2RlKTsKICAgIH0KICB9CgogIC8vLyBSZW1vdmUgYWxsIG9mIHRoZSBnaXZlbiBub2RlcyBmcm9tIHRoaXMgZ3JhcGguIEFzIGEgY29uc2VxdWVuY2UsIGFueSBlZGdlcwogIC8vLyBmb3Igd2hpY2ggdGhvc2Ugbm9kZXMgd2VyZSBlaXRoZXIgYSBoZWFkIG9yIGEgdGFpbCB3aWxsIGFsc28gYmUgcmVtb3ZlZC4KICB2b2lkIHJlbW92ZUFsbE5vZGVzKExpc3Q8Tj4gbm9kZXMpID0+IG5vZGVzLmZvckVhY2gocmVtb3ZlTm9kZSk7Cn0KCi8vLyBVc2VkIGJ5IHRoZSBbU2NjRmluZGVyXSB0byBtYWludGFpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbm9kZXMgdGhhdCBoYXZlCi8vLyBiZWVuIGV4YW1pbmVkLiBUaGVyZSBpcyBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIHBlciBub2RlIGluIHRoZSBncmFwaC4KY2xhc3MgX05vZGVJbmZvPE4+IHsKICAvLy8gRGVwdGggb2YgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGlzIGluZm8uCiAgaW50IGluZGV4ID0gMDsKCiAgLy8vIERlcHRoIG9mIHRoZSBmaXJzdCBub2RlIGluIGEgY3ljbGUuCiAgaW50IGxvd2xpbmsgPSAwOwoKICAvLy8gV2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBub2RlIGlzIG9uIHRoZSBzdGFjay4gVXNlZCB0byByZW1vdmUgdGhlIG5lZWQKICAvLy8gZm9yIHNlYXJjaGluZyBhIGNvbGxlY3Rpb24gZm9yIHRoZSBub2RlIGVhY2ggdGltZSB0aGUgcXVlc3Rpb24gbmVlZHMgdG8gYmUKICAvLy8gYXNrZWQuCiAgYm9vbCBvblN0YWNrID0gZmFsc2U7CgogIC8vLyBDb21wb25lbnQgdGhhdCBjb250YWlucyB0aGUgY29ycmVzcG9uZGluZyBub2RlLgogIExpc3Q8Tj4gY29tcG9uZW50OwoKICBfTm9kZUluZm8oaW50IGRlcHRoKQogICAgICA6IGluZGV4ID0gZGVwdGgsCiAgICAgICAgbG93bGluayA9IGRlcHRoLAogICAgICAgIG9uU3RhY2sgPSBmYWxzZTsKfQoKLy8vIEltcGxlbWVudHMgVGFyamFuJ3MgQWxnb3JpdGhtIGZvciBmaW5kaW5nIHRoZSBzdHJvbmdseSBjb25uZWN0ZWQgY29tcG9uZW50cwovLy8gaW4gYSBncmFwaC4KY2xhc3MgX1NjY0ZpbmRlcjxOPiB7CiAgLy8vIFRoZSBncmFwaCB0byBwcm9jZXNzLgogIGZpbmFsIEdyYXBoPE4+IF9ncmFwaDsKCiAgLy8vIFRoZSBpbmRleCB1c2VkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBkZXB0aCBvZiBub2Rlcy4KICBpbnQgX2luZGV4ID0gMDsKCiAgLy8vIE5vZGVzIHRoYXQgYXJlIGJlaW5nIHZpc2l0ZWQgaW4gb3JkZXIgdG8gaWRlbnRpZnkgY29tcG9uZW50cy4KICBMaXN0PE4+IF9zdGFjayA9IG5ldyBMaXN0PE4+KCk7CgogIC8vLyBJbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggZWFjaCBub2RlLgogIE1hcDxOLCBfTm9kZUluZm88Tj4+IF9pbmZvID0gPE4sIF9Ob2RlSW5mbzxOPj57fTsKCiAgLy8vIEFsbCBzdHJvbmdseSBjb25uZWN0ZWQgY29tcG9uZW50cyBmb3VuZCwgaW4gdG9wb2xvZ2ljYWwgc29ydCBvcmRlciAoZWFjaAogIC8vLyBub2RlIGluIGEgc3Ryb25nbHkgY29ubmVjdGVkIGNvbXBvbmVudCBvbmx5IGhhcyBlZGdlcyB0aGF0IHBvaW50IHRvIG5vZGVzCiAgLy8vIGluIHRoZSBzYW1lIGNvbXBvbmVudCBvciBlYXJsaWVyIGNvbXBvbmVudHMpLgogIExpc3Q8TGlzdDxOPj4gX2FsbENvbXBvbmVudHMgPSBuZXcgTGlzdDxMaXN0PE4+PigpOwoKICBfU2NjRmluZGVyKHRoaXMuX2dyYXBoKTsKCiAgLy8vIFJldHVybiBhIGxpc3QgY29udGFpbmluZyB0aGUgbm9kZXMgdGhhdCBhcmUgcGFydCBvZiB0aGUgc3Ryb25nbHkgY29ubmVjdGVkCiAgLy8vIGNvbXBvbmVudCB0aGF0IGNvbnRhaW5zIHRoZSBnaXZlbiBub2RlLgogIExpc3Q8Tj4gX2NvbXBvbmVudENvbnRhaW5pbmcoTiBub2RlKSA9PiBfc3Ryb25nQ29ubmVjdChub2RlKS5jb21wb25lbnQ7CgogIC8vLyBSdW4gVGFyamFuJ3MgYWxnb3JpdGhtIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBsaXN0IG9mIHN0cm9uZ2x5IGNvbm5lY3RlZAogIC8vLyBjb21wb25lbnRzLiBUaGUgbGlzdCBpcyBpbiB0b3BvbG9naWNhbCBzb3J0IG9yZGVyIChlYWNoIG5vZGUgaW4gYSBzdHJvbmdseQogIC8vLyBjb25uZWN0ZWQgY29tcG9uZW50IG9ubHkgaGFzIGVkZ2VzIHRoYXQgcG9pbnQgdG8gbm9kZXMgaW4gdGhlIHNhbWUKICAvLy8gY29tcG9uZW50IG9yIGVhcmxpZXIgY29tcG9uZW50cykuCiAgTGlzdDxMaXN0PE4+PiBjb21wdXRlVG9wb2xvZ2ljYWxTb3J0KCkgewogICAgZm9yIChOIG5vZGUgaW4gX2dyYXBoLm5vZGVzKSB7CiAgICAgIHZhciBub2RlSW5mbyA9IF9pbmZvW25vZGVdOwogICAgICBpZiAobm9kZUluZm8gPT0gbnVsbCkgX3N0cm9uZ0Nvbm5lY3Qobm9kZSk7CiAgICB9CiAgICByZXR1cm4gX2FsbENvbXBvbmVudHM7CiAgfQoKICAvLy8gUmVtb3ZlIGFuZCByZXR1cm4gdGhlIHRvcC1tb3N0IGVsZW1lbnQgZnJvbSB0aGUgc3RhY2suCiAgTiBfcG9wKCkgewogICAgTiBub2RlID0gX3N0YWNrLnJlbW92ZUF0KF9zdGFjay5sZW5ndGggLSAxKTsKICAgIF9pbmZvW25vZGVdLm9uU3RhY2sgPSBmYWxzZTsKICAgIHJldHVybiBub2RlOwogIH0KCiAgLy8vIEFkZCB0aGUgZ2l2ZW4gbm9kZSB0byB0aGUgc3RhY2suCiAgdm9pZCBfcHVzaChOIG5vZGUpIHsKICAgIF9pbmZvW25vZGVdLm9uU3RhY2sgPSB0cnVlOwogICAgX3N0YWNrLmFkZChub2RlKTsKICB9CgogIC8vLyBDb21wdXRlIHRoZSBzdHJvbmdseSBjb25uZWN0ZWQgY29tcG9uZW50IHRoYXQgY29udGFpbnMgdGhlIGdpdmVuIG5vZGUgYXMKICAvLy8gd2VsbCBhcyBhbnkgY29tcG9uZW50cyBjb250YWluaW5nIG5vZGVzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHRoZSBnaXZlbgogIC8vLyBjb21wb25lbnQuCiAgX05vZGVJbmZvPE4+IF9zdHJvbmdDb25uZWN0KE4gdikgewogICAgLy8gU2V0IHRoZSBkZXB0aCBpbmRleCBmb3IgdiB0byB0aGUgc21hbGxlc3QgdW51c2VkIGluZGV4CiAgICB2YXIgdkluZm8gPSBuZXcgX05vZGVJbmZvPE4+KF9pbmRleCsrKTsKICAgIF9pbmZvW3ZdID0gdkluZm87CiAgICBfcHVzaCh2KTsKCiAgICBmb3IgKE4gdyBpbiBfZ3JhcGgudGFyZ2V0c09mKHYpKSB7CiAgICAgIHZhciB3SW5mbyA9IF9pbmZvW3ddOwogICAgICBpZiAod0luZm8gPT0gbnVsbCkgewogICAgICAgIC8vIFN1Y2Nlc3NvciB3IGhhcyBub3QgeWV0IGJlZW4gdmlzaXRlZDsgcmVjdXJzZSBvbiBpdAogICAgICAgIHdJbmZvID0gX3N0cm9uZ0Nvbm5lY3Qodyk7CiAgICAgICAgdkluZm8ubG93bGluayA9IG1hdGgubWluKHZJbmZvLmxvd2xpbmssIHdJbmZvLmxvd2xpbmspOwogICAgICB9IGVsc2UgaWYgKHdJbmZvLm9uU3RhY2spIHsKICAgICAgICAvLyBTdWNjZXNzb3IgdyBpcyBpbiBzdGFjayBTIGFuZCBoZW5jZSBpbiB0aGUgY3VycmVudCBTQ0MKICAgICAgICB2SW5mby5sb3dsaW5rID0gbWF0aC5taW4odkluZm8ubG93bGluaywgd0luZm8uaW5kZXgpOwogICAgICB9CiAgICB9CgogICAgLy8gSWYgdiBpcyBhIHJvb3Qgbm9kZSwgcG9wIHRoZSBzdGFjayBhbmQgZ2VuZXJhdGUgYW4gU0NDCiAgICBpZiAodkluZm8ubG93bGluayA9PSB2SW5mby5pbmRleCkgewogICAgICB2YXIgY29tcG9uZW50ID0gbmV3IExpc3Q8Tj4oKTsKICAgICAgTiB3OwogICAgICBkbyB7CiAgICAgICAgdyA9IF9wb3AoKTsKICAgICAgICBjb21wb25lbnQuYWRkKHcpOwogICAgICAgIF9pbmZvW3ddLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKICAgICAgfSB3aGlsZSAoIWlkZW50aWNhbCh3LCB2KSk7CiAgICAgIF9hbGxDb21wb25lbnRzLmFkZChjb21wb25lbnQpOwogICAgfQogICAgcmV0dXJuIHZJbmZvOwogIH0KfQoKLy8vIENvbXB1dGVzIGRvbWluYXRvcnMgdXNpbmcgKENvb3BlciwgSGFydmV5LCBhbmQgS2VubmVkeSdzCi8vLyBhbGdvcml0aG0pW2h0dHA6Ly93d3cuY3MucmljZS5lZHUvfmtlaXRoL0VNQkVEL2RvbS5wZGZdLgpjbGFzcyBfRG9taW5hdG9yRmluZGVyPE4+IHsKICBmaW5hbCBHcmFwaDxOPiBfZ3JhcGg7CiAgTWFwPE4sIE4+IGltbWVkaWF0ZURvbWluYXRvcnMgPSB7fTsKICBNYXA8TiwgaW50PiBwb3N0T3JkZXJJZCA9IHt9OwogIF9Eb21pbmF0b3JGaW5kZXIodGhpcy5fZ3JhcGgpOwoKICBydW4oTiByb290KSB7CiAgICBpbW1lZGlhdGVEb21pbmF0b3JzW3Jvb3RdID0gcm9vdDsKICAgIGJvb2wgY2hhbmdlZCA9IHRydWU7CiAgICBpbnQgaSA9IDA7CiAgICB2YXIgbm9kZXNJblBvc3RPcmRlciA9IF9ncmFwaC5wb3N0T3JkZXIocm9vdCkudG9MaXN0KCk7CiAgICBmb3IgKHZhciBuIGluIG5vZGVzSW5Qb3N0T3JkZXIpIHsKICAgICAgcG9zdE9yZGVySWRbbl0gPSBpKys7CiAgICB9CiAgICB2YXIgbm9kZXNJblJldmVyc2VkUG9zdE9yZGVyID0gbm9kZXNJblBvc3RPcmRlci5yZXZlcnNlZDsKICAgIHdoaWxlIChjaGFuZ2VkKSB7CiAgICAgIGNoYW5nZWQgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgbiBpbiBub2Rlc0luUmV2ZXJzZWRQb3N0T3JkZXIpIHsKICAgICAgICBpZiAobiA9PSByb290KSBjb250aW51ZTsKICAgICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgICAgICBOIGlkb207CiAgICAgICAgZm9yICh2YXIgcCBpbiBfZ3JhcGguc291cmNlc09mKG4pKSB7CiAgICAgICAgICBpZiAoaW1tZWRpYXRlRG9taW5hdG9yc1twXSAhPSBudWxsKSB7CiAgICAgICAgICAgIGlmIChmaXJzdCkgewogICAgICAgICAgICAgIGlkb20gPSBwOwogICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgaWRvbSA9IF9pbnRlcnNlY3QocCwgaWRvbSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGltbWVkaWF0ZURvbWluYXRvcnNbbl0gIT0gaWRvbSkgewogICAgICAgICAgaW1tZWRpYXRlRG9taW5hdG9yc1tuXSA9IGlkb207CiAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIE4gX2ludGVyc2VjdChOIGIxLCBOIGIyKSB7CiAgICB2YXIgZmluZ2VyMSA9IGIxOwogICAgdmFyIGZpbmdlcjIgPSBiMjsKICAgIHdoaWxlIChmaW5nZXIxICE9IGZpbmdlcjIpIHsKICAgICAgd2hpbGUgKHBvc3RPcmRlcklkW2ZpbmdlcjFdIDwgcG9zdE9yZGVySWRbZmluZ2VyMl0pIHsKICAgICAgICBmaW5nZXIxID0gaW1tZWRpYXRlRG9taW5hdG9yc1tmaW5nZXIxXTsKICAgICAgfQogICAgICB3aGlsZSAocG9zdE9yZGVySWRbZmluZ2VyMl0gPCBwb3N0T3JkZXJJZFtmaW5nZXIxXSkgewogICAgICAgIGZpbmdlcjIgPSBpbW1lZGlhdGVEb21pbmF0b3JzW2ZpbmdlcjJdOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmluZ2VyMTsKICB9Cn0KgVAATk48AU5PKAQ6QD4gARwBGhkUFSMjAU9RUEcrNCwEATgqIBowKSoGARsEAT0oHSQgJBoIDwYBGQQBSicdGx8lIhgUJwgGBAFOUSgoGjQuBAFRTT8GERITFBUUEwYaBhESExQVExMGTD8jTCggOQYSBAIBKhowAR0zASgmJgEfAT9CASUcHBUVICMEARkaMjUEAU9RUSgoJAQBTUgcGSMhIiMGBAFRT0MCAU5NFTQRASoTAU5RDRgBNhUBFxcZGQIBUBAWHBkBPhIBRCIBLTQBT1A0NgEbAVEuSgFRUUkoKyMiMgYbBAE9DTEhEQQBJxcgFgQBT1ARJT4sFg4BJxwbPyNAIkI+CAYBPiglCwsUGigiJQYSBAIBPT0cGSYgIQEQJhkPPCYcBj4WFzAhGxAtMBkYHRUqDgwKLikaCggGBAEdFhYhPDAIPDAIBhQEAgEjcGFja2FnZTpkYXJ0MmpzX2luZm8vc3JjL2dyYXBoLmRhcnQ3c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvbm9kZV90cmFjZXIuZGFydMAARjMvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBjb21waWxlci5zcmMuaW5mZXJyZXIubm9kZV90cmFjZXI7CgppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JyBzaG93IElkZW50aWZpZXJzOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL3V0aWwvdXRpbC5kYXJ0JyBzaG93IFNldGxldDsKaW1wb3J0ICdhYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnZGVidWcuZGFydCcgYXMgZGVidWc7CmltcG9ydCAnaW5mZXJyZXJfZW5naW5lLmRhcnQnOwppbXBvcnQgJ3R5cGVfZ3JhcGhfbm9kZXMuZGFydCc7CgovLyBBIHNldCBvZiBzZWxlY3RvcnMgd2Uga25vdyBkbyBub3QgZXNjYXBlIHRoZSBlbGVtZW50cyBpbnNpZGUgdGhlCi8vIGxpc3QuClNldDxTdHJpbmc+IGRvZXNOb3RFc2NhcGVMaXN0U2V0ID0gbmV3IFNldDxTdHJpbmc+LmZyb20oY29uc3QgPFN0cmluZz5bCiAgLy8gRnJvbSBPYmplY3QuCiAgJz09JywKICAnaGFzaENvZGUnLAogICd0b1N0cmluZycsCiAgJ25vU3VjaE1ldGhvZCcsCiAgJ3J1bnRpbWVUeXBlJywKCiAgLy8gRnJvbSBJdGVyYWJsZS4KICAnaXNFbXB0eScsCiAgJ2lzTm90RW1wdHknLAogICdsZW5ndGgnLAogICdjb250YWlucycsCiAgJ2pvaW4nLAoKICAvLyBGcm9tIExpc3QuCiAgJ2FkZCcsCiAgJ2FkZEFsbCcsCiAgJ2NsZWFyJywKICAnZmlsbFJhbmdlJywKICAnaW5kZXhPZicsCiAgJ2luc2VydCcsCiAgJ2luc2VydEFsbCcsCiAgJ2xhc3RJbmRleE9mJywKICAncmVtb3ZlJywKICAncmVtb3ZlUmFuZ2UnLAogICdyZXBsYWNlUmFuZ2UnLAogICdzZXRBbGwnLAogICdzZXRSYW5nZScsCiAgJ3NodWZmbGUnLAogICdbXT0nLAoKICAvLyBGcm9tIEpTQXJyYXkuCiAgJ2NoZWNrTXV0YWJsZScsCiAgJ2NoZWNrR3Jvd2FibGUnLApdKTsKClNldDxTdHJpbmc+IGRvZXNOb3RFc2NhcGVTZXRTZXQgPSBuZXcgU2V0PFN0cmluZz4uZnJvbShjb25zdCA8U3RyaW5nPlsKICAvLyBGcm9tIE9iamVjdC4KICAnPT0nLAogICdoYXNoQ29kZScsCiAgJ3RvU3RyaW5nJywKICAnbm9TdWNoTWV0aG9kJywKICAncnVudGltZVR5cGUnLAoKICAvLyBGcm9tIEl0ZXJhYmxlLgogICdpc0VtcHR5JywKICAnaXNOb3RFbXB0eScsCiAgJ2xlbmd0aCcsCiAgJ2NvbnRhaW5zJywKICAnam9pbicsCgogIC8vIEZyb20gU2V0LgogICdhZGQnLAogICdhZGRBbGwnLAogICdjbGVhcicsCiAgJ2NvbnRhaW5zQWxsJywKICAncmVtb3ZlJywKICAncmVtb3ZlQWxsJywKICAncmV0YWluQWxsJywKXSk7CgpTZXQ8U3RyaW5nPiBkb2VzTm90RXNjYXBlTWFwU2V0ID0gbmV3IFNldDxTdHJpbmc+LmZyb20oY29uc3QgPFN0cmluZz5bCiAgLy8gRnJvbSBPYmplY3QuCiAgJz09JywKICAnaGFzaENvZGUnLAogICd0b1N0cmluZycsCiAgJ25vU3VjaE1ldGhvZCcsCiAgJ3J1bnRpbWVUeXBlJywKICAvLyBmcm9tIE1hcC4KICAnaXNFbXB0eScsCiAgJ2lzTm90RW1wdHknLAogICdsZW5ndGgnLAogICdjbGVhcicsCiAgJ2NvbnRhaW5zS2V5JywKICAnY29udGFpbnNWYWx1ZScsCiAgJ1tdPScsCiAgLy8gW2tleXNdIG9ubHkgYWxsb3dzIGtleSB2YWx1ZXMgdG8gZXNjYXBlLCB3aGljaCB3ZSBkbyBub3QgdHJhY2suCiAgJ2tleXMnCl0pOwoKLy8vIENvbW1vbiBsb2dpYyB0byB0cmFjZSBhIHZhbHVlIHRocm91Z2ggdGhlIHR5cGUgaW5mZXJlbmNlIGdyYXBoIG5vZGVzLgphYnN0cmFjdCBjbGFzcyBUcmFjZXJWaXNpdG9yIGltcGxlbWVudHMgVHlwZUluZm9ybWF0aW9uVmlzaXRvciB7CiAgZmluYWwgVHlwZUluZm9ybWF0aW9uIHRyYWNlZFR5cGU7CiAgZmluYWwgSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXI7CgogIHN0YXRpYyBjb25zdCBpbnQgTUFYX0FOQUxZU0lTX0NPVU5UID0KICAgICAgY29uc3QgaW50LmZyb21FbnZpcm9ubWVudCgnZGFydDJqcy50cmFjaW5nLmxpbWl0JywgZGVmYXVsdFZhbHVlOiAzMik7CiAgZmluYWwgU2V0bGV0PE1lbWJlckVudGl0eT4gYW5hbHl6ZWRFbGVtZW50cyA9IG5ldyBTZXRsZXQ8TWVtYmVyRW50aXR5PigpOwoKICBUcmFjZXJWaXNpdG9yKHRoaXMudHJhY2VkVHlwZSwgdGhpcy5pbmZlcnJlcik7CgogIC8vLyBXb3JrIGxpc3QgdGhhdCBnZXRzIHBvcHVsYXRlZCB3aXRoIFtUeXBlSW5mb3JtYXRpb25dIHRoYXQgY291bGQKICAvLy8gY29udGFpbiB0aGUgY29udGFpbmVyLgogIGZpbmFsIExpc3Q8VHlwZUluZm9ybWF0aW9uPiB3b3JrTGlzdCA9IDxUeXBlSW5mb3JtYXRpb24+W107CgogIC8vLyBXb3JrIGxpc3Qgb2YgbGlzdHMgdG8gYW5hbHl6ZSBhZnRlciBhbmFseXppbmcgdGhlIHVzZXJzIG9mIGEKICAvLy8gW1R5cGVJbmZvcm1hdGlvbl0uIFdlIGtub3cgdGhlIFt0cmFjZWRUeXBlXSBoYXMgYmVlbiBzdG9yZWQgaW4gdGhlc2UKICAvLy8gbGlzdHMgYW5kIHdlIG11c3QgY2hlY2sgaG93IGl0IGVzY2FwZXMgZnJvbSB0aGVzZSBsaXN0cy4KICBmaW5hbCBMaXN0PExpc3RUeXBlSW5mb3JtYXRpb24+IGxpc3RzVG9BbmFseXplID0gPExpc3RUeXBlSW5mb3JtYXRpb24+W107CgogIC8vLyBXb3JrIGxpc3Qgb2Ygc2V0cyB0byBhbmFseXplIGFmdGVyIGFuYWx5emluZyB0aGUgdXNlcnMgb2YgYQogIC8vLyBbVHlwZUluZm9ybWF0aW9uXS4gV2Uga25vdyB0aGUgW3RyYWNlZFR5cGVdIGhhcyBiZWVuIHN0b3JlZCBpbiB0aGVzZSBzZXRzCiAgLy8vIGFuZCB3ZSBtdXN0IGNoZWNrIGhvdyBpdCBlc2NhcGVzIGZyb20gdGhlc2Ugc2V0cy4KICBmaW5hbCBMaXN0PFNldFR5cGVJbmZvcm1hdGlvbj4gc2V0c1RvQW5hbHl6ZSA9IDxTZXRUeXBlSW5mb3JtYXRpb24+W107CgogIC8vLyBXb3JrIGxpc3Qgb2YgbWFwcyB0byBhbmFseXplIGFmdGVyIGFuYWx5emluZyB0aGUgdXNlcnMgb2YgYQogIC8vLyBbVHlwZUluZm9ybWF0aW9uXS4gV2Uga25vdyB0aGUgW3RyYWNlZFR5cGVdIGhhcyBiZWVuIHN0b3JlZCBpbiB0aGVzZQogIC8vLyBtYXBzIGFuZCB3ZSBtdXN0IGNoZWNrIGhvdyBpdCBlc2NhcGVzIGZyb20gdGhlc2UgbWFwcy4KICBmaW5hbCBMaXN0PE1hcFR5cGVJbmZvcm1hdGlvbj4gbWFwc1RvQW5hbHl6ZSA9IDxNYXBUeXBlSW5mb3JtYXRpb24+W107CgogIGZpbmFsIFNldGxldDxUeXBlSW5mb3JtYXRpb24+IGZsb3dzSW50byA9IG5ldyBTZXRsZXQ8VHlwZUluZm9ybWF0aW9uPigpOwoKICAvLyBUaGUgY3VycmVudCBbVHlwZUluZm9ybWF0aW9uXSBpbiB0aGUgYW5hbHlzaXMuCiAgVHlwZUluZm9ybWF0aW9uIGN1cnJlbnRVc2VyOwogIGJvb2wgY29udGludWVBbmFseXppbmcgPSB0cnVlOwoKICB2b2lkIGFkZE5ld0VzY2FwZUluZm9ybWF0aW9uKFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBpZiAoZmxvd3NJbnRvLmNvbnRhaW5zKGluZm8pKSByZXR1cm47CiAgICBmbG93c0ludG8uYWRkKGluZm8pOwogICAgd29ya0xpc3QuYWRkKGluZm8pOwogIH0KCiAgYm9vbCBfd291bGRCZVRvb01hbnlVc2VycyhTZXQgdXNlcnMpIHsKICAgIGludCBzZWVuU29GYXIgPSBhbmFseXplZEVsZW1lbnRzLmxlbmd0aDsKICAgIGlmIChzZWVuU29GYXIgKyB1c2Vycy5sZW5ndGggPD0gTUFYX0FOQUxZU0lTX0NPVU5UKSByZXR1cm4gZmFsc2U7CiAgICBpbnQgYWN0dWFsV29yayA9IDA7CiAgICBmb3IgKFR5cGVJbmZvcm1hdGlvbiB1c2VyIGluIHVzZXJzKSB7CiAgICAgIGlmICghYW5hbHl6ZWRFbGVtZW50cy5jb250YWlucyh1c2VyLm93bmVyKSkgewogICAgICAgIGFjdHVhbFdvcmsrKzsKICAgICAgICBpZiAoYWN0dWFsV29yayA+IE1BWF9BTkFMWVNJU19DT1VOVCAtIHNlZW5Tb0ZhcikgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgYW5hbHl6ZSgpIHsKICAgIC8vIENvbGxlY3QgdGhlIFtUeXBlSW5mb3JtYXRpb25dIHdoZXJlIHRoZSBsaXN0IGNhbiBmbG93IGluLAogICAgLy8gYXMgd2VsbCBhcyB0aGUgb3BlcmF0aW9ucyBkb25lIG9uIGFsbCB0aGVzZSBbVHlwZUluZm9ybWF0aW9uXXMuCiAgICBhZGROZXdFc2NhcGVJbmZvcm1hdGlvbih0cmFjZWRUeXBlKTsKICAgIHdoaWxlICghd29ya0xpc3QuaXNFbXB0eSkgewogICAgICBjdXJyZW50VXNlciA9IHdvcmtMaXN0LnJlbW92ZUxhc3QoKTsKICAgICAgaWYgKF93b3VsZEJlVG9vTWFueVVzZXJzKGN1cnJlbnRVc2VyLnVzZXJzKSkgewogICAgICAgIGJhaWxvdXQoJ1RvbyBtYW55IHVzZXJzJyk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgZm9yIChUeXBlSW5mb3JtYXRpb24gaW5mbyBpbiBjdXJyZW50VXNlci51c2VycykgewogICAgICAgIGFuYWx5emVkRWxlbWVudHMuYWRkKGluZm8ub3duZXIpOwogICAgICAgIGluZm8uYWNjZXB0KHRoaXMpOwogICAgICB9CiAgICAgIHdoaWxlICghbGlzdHNUb0FuYWx5emUuaXNFbXB0eSkgewogICAgICAgIGFuYWx5emVTdG9yZWRJbnRvTGlzdChsaXN0c1RvQW5hbHl6ZS5yZW1vdmVMYXN0KCkpOwogICAgICB9CiAgICAgIHdoaWxlIChzZXRzVG9BbmFseXplLmlzTm90RW1wdHkpIHsKICAgICAgICBhbmFseXplU3RvcmVkSW50b1NldChzZXRzVG9BbmFseXplLnJlbW92ZUxhc3QoKSk7CiAgICAgIH0KICAgICAgd2hpbGUgKCFtYXBzVG9BbmFseXplLmlzRW1wdHkpIHsKICAgICAgICBhbmFseXplU3RvcmVkSW50b01hcChtYXBzVG9BbmFseXplLnJlbW92ZUxhc3QoKSk7CiAgICAgIH0KICAgICAgaWYgKCFjb250aW51ZUFuYWx5emluZykgYnJlYWs7CiAgICB9CiAgfQoKICB2b2lkIGJhaWxvdXQoU3RyaW5nIHJlYXNvbikgewogICAgaWYgKGRlYnVnLlZFUkJPU0UpIHsKICAgICAgcHJpbnQoJ0JhaWxpbmcgb3V0IG9uICR0cmFjZWRUeXBlIGJlY2F1c2U6ICRyZWFzb24nKTsKICAgIH0KICAgIGNvbnRpbnVlQW5hbHl6aW5nID0gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QXdhaXRUeXBlSW5mb3JtYXRpb24oQXdhaXRUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgYmFpbG91dCgiUGFzc2VkIHRocm91Z2ggYXdhaXQiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRZaWVsZFR5cGVJbmZvcm1hdGlvbihZaWVsZFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICAvLyBUT0RPKDI5MzQ0KTogVGhlIGVuY2xvc2luZyBzeW5jKi9hc3luYy9hc3luYyogbWV0aG9kIGNvdWxkIGhhdmUgYQogICAgLy8gdHJhY2FibGUgVHlwZUluZm9ybWF0aW9uIGZvciB0aGUgSXRlcmFibGUgLyBGdXR1cmUgLyBTdHJlYW0gd2l0aCBhbgogICAgLy8gZWxlbWVudCBUeXBlSW5mb3JtYXRpb24uIFRoZW4gWWllbGRUeXBlSW5mb3JtYXRpb24gY291bGQgY29ubmVjdCB0aGUKICAgIC8vIHNvdXJjZSB0eXBlIGluZm9ybWF0aW9uIHRvIHRoZSB0cmFjYWJsZSBlbGVtZW50LgogICAgYmFpbG91dCgiUGFzc2VkIHRocm91Z2ggeWllbGQiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXROYXJyb3dUeXBlSW5mb3JtYXRpb24oTmFycm93VHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGFkZE5ld0VzY2FwZUluZm9ybWF0aW9uKGluZm8pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFBoaUVsZW1lbnRUeXBlSW5mb3JtYXRpb24oUGhpRWxlbWVudFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBhZGROZXdFc2NhcGVJbmZvcm1hdGlvbihpbmZvKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRFbGVtZW50SW5Db250YWluZXJUeXBlSW5mb3JtYXRpb24oCiAgICAgIEVsZW1lbnRJbkNvbnRhaW5lclR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBhZGROZXdFc2NhcGVJbmZvcm1hdGlvbihpbmZvKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRFbGVtZW50SW5TZXRUeXBlSW5mb3JtYXRpb24oRWxlbWVudEluU2V0VHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGFkZE5ld0VzY2FwZUluZm9ybWF0aW9uKGluZm8pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEtleUluTWFwVHlwZUluZm9ybWF0aW9uKEtleUluTWFwVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIC8vIFdlIGRvIG5vdCB0cmFjayB0aGUgdXNlIG9mIGtleXMgZnJvbSBhIG1hcCwgc28gd2UgaGF2ZSB0byBiYWlsLgogICAgYmFpbG91dCgnVXNlZCBhcyBrZXkgaW4gTWFwJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VmFsdWVJbk1hcFR5cGVJbmZvcm1hdGlvbihWYWx1ZUluTWFwVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGFkZE5ld0VzY2FwZUluZm9ybWF0aW9uKGluZm8pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpc3RUeXBlSW5mb3JtYXRpb24oTGlzdFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBsaXN0c1RvQW5hbHl6ZS5hZGQoaW5mbyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U2V0VHlwZUluZm9ybWF0aW9uKFNldFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBzZXRzVG9BbmFseXplLmFkZChpbmZvKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRNYXBUeXBlSW5mb3JtYXRpb24oTWFwVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIG1hcHNUb0FuYWx5emUuYWRkKGluZm8pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbmNyZXRlVHlwZUluZm9ybWF0aW9uKENvbmNyZXRlVHlwZUluZm9ybWF0aW9uIGluZm8pIHt9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdHJpbmdMaXRlcmFsVHlwZUluZm9ybWF0aW9uKFN0cmluZ0xpdGVyYWxUeXBlSW5mb3JtYXRpb24gaW5mbykge30KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJvb2xMaXRlcmFsVHlwZUluZm9ybWF0aW9uKEJvb2xMaXRlcmFsVHlwZUluZm9ybWF0aW9uIGluZm8pIHt9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDbG9zdXJlVHlwZUluZm9ybWF0aW9uKENsb3N1cmVUeXBlSW5mb3JtYXRpb24gaW5mbykge30KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENsb3N1cmVDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbigKICAgICAgQ2xvc3VyZUNhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGluZm8pIHt9CgogIEBvdmVycmlkZQogIHZpc2l0U3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oU3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgTWVtYmVyRW50aXR5IGNhbGxlZCA9IGluZm8uY2FsbGVkRWxlbWVudDsKICAgIFR5cGVJbmZvcm1hdGlvbiBpbmZlcnJlZCA9IGluZmVycmVyLnR5cGVzLmdldEluZmVycmVkVHlwZU9mTWVtYmVyKGNhbGxlZCk7CiAgICBpZiAoaW5mZXJyZWQgPT0gY3VycmVudFVzZXIpIHsKICAgICAgYWRkTmV3RXNjYXBlSW5mb3JtYXRpb24oaW5mbyk7CiAgICB9CiAgfQoKICB2b2lkIGFuYWx5emVTdG9yZWRJbnRvTGlzdChMaXN0VHlwZUluZm9ybWF0aW9uIGxpc3QpIHsKICAgIGluZmVycmVyLmFuYWx5emVMaXN0QW5kRW5xdWV1ZShsaXN0KTsKICAgIGlmIChsaXN0LmJhaWxlZE91dCkgewogICAgICBiYWlsb3V0KCdTdG9yZWQgaW4gYSBsaXN0IHRoYXQgYmFpbGVkIG91dCcpOwogICAgfSBlbHNlIHsKICAgICAgbGlzdC5mbG93c0ludG8uZm9yRWFjaCgoVHlwZUluZm9ybWF0aW9uIGZsb3cpIHsKICAgICAgICBmbG93LnVzZXJzLmZvckVhY2goKFR5cGVJbmZvcm1hdGlvbiB1c2VyKSB7CiAgICAgICAgICBpZiAodXNlciBpcyBEeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24pIHsKICAgICAgICAgICAgaWYgKHVzZXIucmVjZWl2ZXIgIT0gZmxvdykgcmV0dXJuOwogICAgICAgICAgICBpZiAoaW5mZXJyZXIucmV0dXJuc0xpc3RFbGVtZW50VHlwZVNldC5jb250YWlucyh1c2VyLnNlbGVjdG9yKSkgewogICAgICAgICAgICAgIGFkZE5ld0VzY2FwZUluZm9ybWF0aW9uKHVzZXIpOwogICAgICAgICAgICB9IGVsc2UgaWYgKCFkb2VzTm90RXNjYXBlTGlzdFNldC5jb250YWlucyh1c2VyLnNlbGVjdG9yLm5hbWUpKSB7CiAgICAgICAgICAgICAgYmFpbG91dCgnRXNjYXBlIGZyb20gYSBsaXN0IHZpYSBbJHt1c2VyLnNlbGVjdG9yLm5hbWV9XScpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgdm9pZCBhbmFseXplU3RvcmVkSW50b1NldChTZXRUeXBlSW5mb3JtYXRpb24gc2V0KSB7CiAgICBpbmZlcnJlci5hbmFseXplU2V0QW5kRW5xdWV1ZShzZXQpOwogICAgaWYgKHNldC5iYWlsZWRPdXQpIHsKICAgICAgYmFpbG91dCgnU3RvcmVkIGluIGEgc2V0IHRoYXQgYmFpbGVkIG91dCcpOwogICAgfSBlbHNlIHsKICAgICAgc2V0LmZsb3dzSW50by5mb3JFYWNoKChUeXBlSW5mb3JtYXRpb24gZmxvdykgewogICAgICAgIGZsb3cudXNlcnMuZm9yRWFjaCgoVHlwZUluZm9ybWF0aW9uIHVzZXIpIHsKICAgICAgICAgIGlmICh1c2VyIGlzIER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbikgewogICAgICAgICAgICBpZiAodXNlci5yZWNlaXZlciAhPSBmbG93KSByZXR1cm47CiAgICAgICAgICAgIGlmICh1c2VyLnNlbGVjdG9yLmlzSW5kZXgpIHsKICAgICAgICAgICAgICBhZGROZXdFc2NhcGVJbmZvcm1hdGlvbih1c2VyKTsKICAgICAgICAgICAgfSBlbHNlIGlmICghZG9lc05vdEVzY2FwZVNldFNldC5jb250YWlucyh1c2VyLnNlbGVjdG9yLm5hbWUpKSB7CiAgICAgICAgICAgICAgYmFpbG91dCgnRXNjYXBlIGZyb20gYSBzZXQgdmlhIFske3VzZXIuc2VsZWN0b3IubmFtZX1dJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9CiAgfQoKICB2b2lkIGFuYWx5emVTdG9yZWRJbnRvTWFwKE1hcFR5cGVJbmZvcm1hdGlvbiBtYXApIHsKICAgIGluZmVycmVyLmFuYWx5emVNYXBBbmRFbnF1ZXVlKG1hcCk7CiAgICBpZiAobWFwLmJhaWxlZE91dCkgewogICAgICBiYWlsb3V0KCdTdG9yZWQgaW4gYSBtYXAgdGhhdCBiYWlsZWQgb3V0Jyk7CiAgICB9IGVsc2UgewogICAgICBtYXAuZmxvd3NJbnRvLmZvckVhY2goKFR5cGVJbmZvcm1hdGlvbiBmbG93KSB7CiAgICAgICAgZmxvdy51c2Vycy5mb3JFYWNoKChUeXBlSW5mb3JtYXRpb24gdXNlcikgewogICAgICAgICAgaWYgKHVzZXIgaXMgRHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKSB7CiAgICAgICAgICAgIGlmICh1c2VyLnJlY2VpdmVyICE9IGZsb3cpIHJldHVybjsKICAgICAgICAgICAgaWYgKHVzZXIuc2VsZWN0b3IuaXNJbmRleCkgewogICAgICAgICAgICAgIGFkZE5ld0VzY2FwZUluZm9ybWF0aW9uKHVzZXIpOwogICAgICAgICAgICB9IGVsc2UgaWYgKCFkb2VzTm90RXNjYXBlTWFwU2V0LmNvbnRhaW5zKHVzZXIuc2VsZWN0b3IubmFtZSkpIHsKICAgICAgICAgICAgICBiYWlsb3V0KCdFc2NhcGUgZnJvbSBhIG1hcCB2aWEgWyR7dXNlci5zZWxlY3Rvci5uYW1lfV0nKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0KICB9CgogIC8vLyBDaGVja3Mgd2hldGhlciB0aGlzIGlzIGEgY2FsbCB0byBhIGxpc3QgYWRkaW5nIG1ldGhvZC4gVGhlIGRlZmluaXRpb24gb2YKICAvLy8gd2hhdCBsaXN0IGFkZGluZyBtZWFucyBoYXMgdG8gc3RheSBpbiBzeW5jIHdpdGgKICAvLy8gW2lzUGFyYW1ldGVyT2ZMaXN0QWRkaW5nTWV0aG9kXS4KICBib29sIG1pZ2h0QWRkVG9Db250YWluZXIoRHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGlmIChpbmZvLmFyZ3VtZW50cyA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoaW5mby5hcmd1bWVudHMubmFtZWQuaXNOb3RFbXB0eSkgcmV0dXJuIGZhbHNlOwogICAgU3RyaW5nIHNlbGVjdG9yTmFtZSA9IGluZm8uc2VsZWN0b3IubmFtZTsKICAgIExpc3Q8VHlwZUluZm9ybWF0aW9uPiBhcmd1bWVudHMgPSBpbmZvLmFyZ3VtZW50cy5wb3NpdGlvbmFsOwogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewogICAgICByZXR1cm4gKHNlbGVjdG9yTmFtZSA9PSAnYWRkJyAmJiBjdXJyZW50VXNlciA9PSBhcmd1bWVudHNbMF0pOwogICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDIpIHsKICAgICAgcmV0dXJuIChzZWxlY3Rvck5hbWUgPT0gJ2luc2VydCcgJiYgY3VycmVudFVzZXIgPT0gYXJndW1lbnRzWzFdKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgaXNJbmRleFNldEFyZ3VtZW50KER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvLCBpbnQgaW5kZXgpIHsKICAgIFN0cmluZyBzZWxlY3Rvck5hbWUgPSBpbmZvLnNlbGVjdG9yLm5hbWU7CiAgICBpZiAoc2VsZWN0b3JOYW1lICE9ICdbXT0nKSByZXR1cm4gZmFsc2U7CiAgICBhc3NlcnQoaW5mby5hcmd1bWVudHMubGVuZ3RoID09IDIpOwogICAgTGlzdDxUeXBlSW5mb3JtYXRpb24+IGFyZ3VtZW50cyA9IGluZm8uYXJndW1lbnRzLnBvc2l0aW9uYWw7CiAgICByZXR1cm4gY3VycmVudFVzZXIgPT0gYXJndW1lbnRzW2luZGV4XTsKICB9CgogIC8vLyBDaGVja3Mgd2hldGhlciB0aGUgY2FsbCBzaXRlIGZsb3dzIHRoZSBjdXJyZW50VXNlciB0byB0aGUga2V5IGFyZ3VtZW50IG9mCiAgLy8vIGFuIGluZGV4aW5nIHNldHRlci4gVGhpcyBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoCiAgLy8vIFtpc1BhcmFtZXRlck9mTWFwQWRkaW5nTWV0aG9kXS4KICBib29sIGlzSW5kZXhTZXRLZXkoRHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIHJldHVybiBpc0luZGV4U2V0QXJndW1lbnQoaW5mbywgMCk7CiAgfQoKICAvLy8gQ2hlY2tzIHdoZXRoZXIgdGhlIGNhbGwgc2l0ZSBmbG93cyB0aGUgY3VycmVudFVzZXIgdG8gdGhlIHZhbHVlIGFyZ3VtZW50CiAgLy8vIG9mIGFuIGluZGV4aW5nIHNldHRlci4gVGhpcyBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoCiAgLy8vIFtpc1BhcmFtZXRlck9mTGlzdEFkZGluZ01ldGhvZF0gYW5kIFtpc1BhcmFtZXRlck9mTWFwQWRkaW5nTWV0aG9kXS4KICBib29sIGlzSW5kZXhTZXRWYWx1ZShEeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgcmV0dXJuIGlzSW5kZXhTZXRBcmd1bWVudChpbmZvLCAxKTsKICB9CgogIHZvaWQgYmFpbG91dElmUmVhY2hlcyhib29sIHByZWRpY2F0ZShQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24gZSkpIHsKICAgIGZvciAodmFyIHVzZXIgaW4gY3VycmVudFVzZXIudXNlcnMpIHsKICAgICAgaWYgKHVzZXIgaXMgUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uKSB7CiAgICAgICAgaWYgKHByZWRpY2F0ZSh1c2VyKSkgewogICAgICAgICAgYmFpbG91dCgnUmVhY2hlZCBzdXBwcmVzc2VkIHBhcmFtZXRlciB3aXRob3V0IHByZWNpc2UgcmVjZWl2ZXInKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbigKICAgICAgRHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIHZvaWQgYWRkc1RvQ29udGFpbmVyKEFic3RyYWN0VmFsdWUgbWFzaykgewogICAgICBPYmplY3QgYWxsb2NhdGlvbk5vZGUgPQogICAgICAgICAgaW5mZXJyZXIuYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRBbGxvY2F0aW9uTm9kZShtYXNrKTsKICAgICAgaWYgKGFsbG9jYXRpb25Ob2RlICE9IG51bGwpIHsKICAgICAgICBMaXN0VHlwZUluZm9ybWF0aW9uIGxpc3QgPQogICAgICAgICAgICBpbmZlcnJlci50eXBlcy5hbGxvY2F0ZWRMaXN0c1thbGxvY2F0aW9uTm9kZV07CiAgICAgICAgbGlzdHNUb0FuYWx5emUuYWRkKGxpc3QpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRoZSBbbWFza10gaXMgYSB1bmlvbiBvZiB0d28gY29udGFpbmVycywgYW5kIHdlIGxvc2UgdHJhY2sgb2Ygd2hlcmUKICAgICAgICAvLyB0aGVzZSBjb250YWluZXJzIGhhdmUgYmVlbiBhbGxvY2F0ZWQgYXQgdGhpcyBwb2ludC4KICAgICAgICBiYWlsb3V0KCdTdG9yZWQgaW4gdG9vIG1hbnkgY29udGFpbmVycycpOwogICAgICB9CiAgICB9CgogICAgdm9pZCBhZGRzVG9NYXBWYWx1ZShBYnN0cmFjdFZhbHVlIG1hc2spIHsKICAgICAgT2JqZWN0IGFsbG9jYXRpb25Ob2RlID0KICAgICAgICAgIGluZmVycmVyLmFic3RyYWN0VmFsdWVEb21haW4uZ2V0QWxsb2NhdGlvbk5vZGUobWFzayk7CiAgICAgIGlmIChhbGxvY2F0aW9uTm9kZSAhPSBudWxsKSB7CiAgICAgICAgTWFwVHlwZUluZm9ybWF0aW9uIG1hcCA9IGluZmVycmVyLnR5cGVzLmFsbG9jYXRlZE1hcHNbYWxsb2NhdGlvbk5vZGVdOwogICAgICAgIG1hcHNUb0FuYWx5emUuYWRkKG1hcCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gVGhlIFttYXNrXSBpcyBhIHVuaW9uLiBTZWUgY29tbWVudCBmb3IgW21hc2tdIGFib3ZlLgogICAgICAgIGJhaWxvdXQoJ1N0b3JlZCBpbiB0b28gbWFueSBtYXBzJyk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGFkZHNUb01hcEtleShBYnN0cmFjdFZhbHVlIG1hc2spIHsKICAgICAgLy8gV2UgZG8gbm90IHRyYWNrIHRoZSB1c2Ugb2Yga2V5cyBmcm9tIGEgbWFwLCBzbyB3ZSBoYXZlIHRvIGJhaWwuCiAgICAgIGJhaWxvdXQoJ1VzZWQgYXMga2V5IGluIE1hcCcpOwogICAgfQoKICAgIC8vICJhWy4uLl0gPSB4IiBjb3VsZCBiZSBhIGxpc3QgKGNvbnRhaW5lcikgb3IgbWFwIGFzc2lnbmVtbnQuCiAgICBpZiAoaXNJbmRleFNldFZhbHVlKGluZm8pKSB7CiAgICAgIHZhciByZWNlaXZlclR5cGUgPSBpbmZvLnJlY2VpdmVyLnR5cGU7CiAgICAgIGlmIChpbmZlcnJlci5hYnN0cmFjdFZhbHVlRG9tYWluLmlzQ29udGFpbmVyKHJlY2VpdmVyVHlwZSkpIHsKICAgICAgICBhZGRzVG9Db250YWluZXIocmVjZWl2ZXJUeXBlKTsKICAgICAgfSBlbHNlIGlmIChpbmZlcnJlci5hYnN0cmFjdFZhbHVlRG9tYWluLmlzTWFwKHJlY2VpdmVyVHlwZSkpIHsKICAgICAgICBhZGRzVG9NYXBWYWx1ZShyZWNlaXZlclR5cGUpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIE5vdCBhIGNvbnRhaW5lciBvciBtYXAsIHNvIHRoZSB0YXJnZXRzIGNvdWxkIGJlIGFueSBtZXRob2RzLiBUaGVyZQogICAgICAgIC8vIGFyZSBlZGdlcyBmcm9tIHRoZSBbY3VycmVudFVzZXJdIHRvIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSB0YXJnZXRzLCBzbwogICAgICAgIC8vIHRyYWNpbmcgd2lsbCBjb250aW51ZSBpbnRvIHRoZSB0YXJnZXRzLiAgVHJhY2luZyBzdG9wcyBhdCBwYXJhbWV0ZXJzCiAgICAgICAgLy8gdGhhdCBtYXRjaCB0aGUgdGFyZ2V0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSByZWNlaXZlclR5cGVzIGFib3ZlICh0bwogICAgICAgIC8vIHByZXZlbnQgaW1wcmVjaXNlIHJlc3VsdHMgZnJvbSB0cmFjaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiksIHNvIHdlCiAgICAgICAgLy8gbmVlZCBjb21wZW5zYXRlIGlmIG9uZSBvZiB0aGUgdGFyZ2V0cyBpcyBpbiB0aGUgdGFyZ2V0IHNldC4gSWYgdGhlcmUKICAgICAgICAvLyBpcyBhbiBlZGdlIHRvIGEgcGFyYW1ldGVyIG1hdGNoaW5nIFtpc1BhcmFtZXRlck9mTGlzdEFkZGluZ01ldGhvZF0gb3IKICAgICAgICAvLyBbaXNQYXJhbWV0ZXJPZk1hcEFkZGluZ01ldGhvZF0gdGhlbiB0aGUgdHJhY2VkIHZhbHVlIGlzIGJlaW5nIHN0b3JlZAogICAgICAgIC8vIGludG8gYW4gdW50cmFjZWQgbGlzdCBvciBtYXAuCgogICAgICAgIC8vIFRPRE8oc3JhKTogSXQgd291bGQgYmUgbW9yZSBwcmVjaXNlIHRvIHNwZWNpZmljYWxseSBtYXRjaCB0aGUgYHZhbHVlJwogICAgICAgIC8vIHBhcmFtZXRlcnMgb2YgIm9wZXJhdG9yIFtdPSIuCiAgICAgICAgYmFpbG91dElmUmVhY2hlcyhpc1BhcmFtZXRlck9mTGlzdEFkZGluZ01ldGhvZCk7CiAgICAgICAgYmFpbG91dElmUmVhY2hlcyhpc1BhcmFtZXRlck9mTWFwQWRkaW5nTWV0aG9kKTsKICAgICAgfQogICAgfQoKICAgIC8vIENvdWxkIGJlOiAgbVt4XSA9IC4uLjsKICAgIGlmIChpc0luZGV4U2V0S2V5KGluZm8pKSB7CiAgICAgIHZhciByZWNlaXZlclR5cGUgPSBpbmZvLnJlY2VpdmVyLnR5cGU7CiAgICAgIGlmIChpbmZlcnJlci5hYnN0cmFjdFZhbHVlRG9tYWluLmlzTWFwKHJlY2VpdmVyVHlwZSkpIHsKICAgICAgICBhZGRzVG9NYXBLZXkocmVjZWl2ZXJUeXBlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBiYWlsb3V0SWZSZWFjaGVzKGlzUGFyYW1ldGVyT2ZMaXN0QWRkaW5nTWV0aG9kKTsKICAgICAgICBiYWlsb3V0SWZSZWFjaGVzKGlzUGFyYW1ldGVyT2ZNYXBBZGRpbmdNZXRob2QpOwogICAgICB9CiAgICB9CgogICAgaWYgKG1pZ2h0QWRkVG9Db250YWluZXIoaW5mbykpIHsKICAgICAgdmFyIHJlY2VpdmVyVHlwZSA9IGluZm8ucmVjZWl2ZXIudHlwZTsKICAgICAgaWYgKGluZmVycmVyLmFic3RyYWN0VmFsdWVEb21haW4uaXNDb250YWluZXIocmVjZWl2ZXJUeXBlKSkgewogICAgICAgIGFkZHNUb0NvbnRhaW5lcihyZWNlaXZlclR5cGUpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIE5vdCBhIGNvbnRhaW5lciwgc2VlIG5vdGUgYWJvdmUuCiAgICAgICAgYmFpbG91dElmUmVhY2hlcyhpc1BhcmFtZXRlck9mTGlzdEFkZGluZ01ldGhvZCk7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoaW5mby50YXJnZXRzSW5jbHVkZUNvbXBsZXhOb1N1Y2hNZXRob2QoaW5mZXJyZXIpICYmCiAgICAgICAgaW5mby5hcmd1bWVudHMgIT0gbnVsbCAmJgogICAgICAgIGluZm8uYXJndW1lbnRzLmNvbnRhaW5zKGN1cnJlbnRVc2VyKSkgewogICAgICBiYWlsb3V0KCdQYXNzZWQgdG8gbm9TdWNoTWV0aG9kJyk7CiAgICB9CgogICAgSXRlcmFibGU8VHlwZUluZm9ybWF0aW9uPiBpbmZlcnJlZFRhcmdldFR5cGVzID0KICAgICAgICBpbmZvLmNvbmNyZXRlVGFyZ2V0cy5tYXAoKE1lbWJlckVudGl0eSBlbnRpdHkpIHsKICAgICAgcmV0dXJuIGluZmVycmVyLnR5cGVzLmdldEluZmVycmVkVHlwZU9mTWVtYmVyKGVudGl0eSk7CiAgICB9KTsKICAgIGlmIChpbmZlcnJlZFRhcmdldFR5cGVzLmFueSgodXNlcikgPT4gdXNlciA9PSBjdXJyZW50VXNlcikpIHsKICAgICAgYWRkTmV3RXNjYXBlSW5mb3JtYXRpb24oaW5mbyk7CiAgICB9CiAgfQoKICAvLy8gQ2hlY2sgd2hldGhlciBlbGVtZW50IGlzIHRoZSBwYXJhbWV0ZXIgb2YgYSBsaXN0IGFkZGluZyBtZXRob2QuCiAgLy8vIFRoZSBkZWZpbml0aW9uIG9mIHdoYXQgYSBsaXN0IGFkZGluZyBtZXRob2QgaXMgaGFzIHRvIHN0YXkgaW4gc3luYyB3aXRoCiAgLy8vIFttaWdodEFkZFRvQ29udGFpbmVyXS4KICBib29sIGlzUGFyYW1ldGVyT2ZMaXN0QWRkaW5nTWV0aG9kKFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbiBwYXJhbWV0ZXJJbmZvKSB7CiAgICBpZiAoIXBhcmFtZXRlckluZm8uaXNSZWd1bGFyUGFyYW1ldGVyKSByZXR1cm4gZmFsc2U7CiAgICBpZiAocGFyYW1ldGVySW5mby5tZXRob2QuZW5jbG9zaW5nQ2xhc3MgIT0KICAgICAgICBpbmZlcnJlci5jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3MpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgU3RyaW5nIG5hbWUgPSBwYXJhbWV0ZXJJbmZvLm1ldGhvZC5uYW1lOwogICAgcmV0dXJuIChuYW1lID09ICdbXT0nKSB8fCAobmFtZSA9PSAnYWRkJykgfHwgKG5hbWUgPT0gJ2luc2VydCcpOwogIH0KCiAgLy8vIENoZWNrIHdoZXRoZXIgZWxlbWVudCBpcyB0aGUgcGFyYW1ldGVyIG9mIGEgbGlzdCBhZGRpbmcgbWV0aG9kLgogIC8vLyBUaGUgZGVmaW5pdGlvbiBvZiB3aGF0IGEgbGlzdCBhZGRpbmcgbWV0aG9kIGlzIGhhcyB0byBzdGF5IGluIHN5bmMgd2l0aAogIC8vLyBbaXNJbmRleFNldEtleV0gYW5kIFtpc0luZGV4U2V0VmFsdWVdLgogIGJvb2wgaXNQYXJhbWV0ZXJPZk1hcEFkZGluZ01ldGhvZChQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24gcGFyYW1ldGVySW5mbykgewogICAgaWYgKCFwYXJhbWV0ZXJJbmZvLmlzUmVndWxhclBhcmFtZXRlcikgcmV0dXJuIGZhbHNlOwogICAgaWYgKHBhcmFtZXRlckluZm8ubWV0aG9kLmVuY2xvc2luZ0NsYXNzICE9CiAgICAgICAgaW5mZXJyZXIuY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMubWFwTGl0ZXJhbENsYXNzKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIFN0cmluZyBuYW1lID0gcGFyYW1ldGVySW5mby5tZXRob2QubmFtZTsKICAgIHJldHVybiAobmFtZSA9PSAnW109Jyk7CiAgfQoKICBib29sIGlzQ2xvc3VyZShNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgaWYgKCFlbGVtZW50LmlzRnVuY3Rpb24pIHJldHVybiBmYWxzZTsKCiAgICAvLy8gQ3JlYXRpbmcgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMgW0Z1bmN0aW9uXSBhbHNvCiAgICAvLy8gY2xvc3VyaXplcyB0aGUgY29ycmVzcG9uZGluZyBbY2FsbF0gbWVtYmVyLiBXZSBkbyBub3QgY3VycmVudGx5CiAgICAvLy8gdHJhY2sgdGhlc2UsIHRodXMgdGhlIGNoZWNrIGZvciBbaXNDbG9zdXJpemVkXSBvbiBzdWNoIGEgbWV0aG9kIHdpbGwKICAgIC8vLyByZXR1cm4gZmFsc2UuIEluc3RlYWQgd2UgY2F0Y2ggdGhhdCBjYXNlIGhlcmUgZm9yIG5vdy4KICAgIC8vIFRPRE8oaGVyaHV0KTogSGFuZGxlIGNyZWF0aW9uIG9mIGNsb3N1cmVzIGZyb20gaW5zdGFuY2VzIG9mIEZ1bmN0aW9uLgogICAgaWYgKGVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlciAmJiBlbGVtZW50Lm5hbWUgPT0gSWRlbnRpZmllcnMuY2FsbCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIENsYXNzRW50aXR5IGNscyA9IGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3M7CiAgICByZXR1cm4gY2xzICE9IG51bGwgJiYgY2xzLmlzQ2xvc3VyZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRNZW1iZXJUeXBlSW5mb3JtYXRpb24oTWVtYmVyVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGlmIChpbmZvLmlzQ2xvc3VyaXplZCkgewogICAgICBiYWlsb3V0KCdSZXR1cm5lZCBmcm9tIGEgY2xvc3VyaXplZCBtZXRob2QnKTsKICAgIH0KICAgIGlmIChpc0Nsb3N1cmUoaW5mby5tZW1iZXIpKSB7CiAgICAgIGJhaWxvdXQoJ1JldHVybmVkIGZyb20gYSBjbG9zdXJlJyk7CiAgICB9CiAgICBpZiAoaW5mby5tZW1iZXIuaXNGaWVsZCAmJgogICAgICAgICFpbmZlcnJlci5jYW5GaWVsZEJlVXNlZEZvckdsb2JhbE9wdGltaXphdGlvbnMoaW5mby5tZW1iZXIpKSB7CiAgICAgIGJhaWxvdXQoJ0VzY2FwZSB0byBjb2RlIHRoYXQgaGFzIHNwZWNpYWwgYmFja2VuZCB0cmVhdG1lbnQnKTsKICAgIH0KICAgIGFkZE5ld0VzY2FwZUluZm9ybWF0aW9uKGluZm8pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbihQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgaWYgKGluZmVycmVyLmNsb3NlZFdvcmxkLm5hdGl2ZURhdGEuaXNOYXRpdmVNZW1iZXIoaW5mby5tZXRob2QpKSB7CiAgICAgIGJhaWxvdXQoJ1Bhc3NlZCB0byBhIG5hdGl2ZSBtZXRob2QnKTsKICAgIH0KICAgIGlmICghaW5mZXJyZXIKICAgICAgICAuY2FuRnVuY3Rpb25QYXJhbWV0ZXJzQmVVc2VkRm9yR2xvYmFsT3B0aW1pemF0aW9ucyhpbmZvLm1ldGhvZCkpIHsKICAgICAgYmFpbG91dCgnRXNjYXBlIHRvIGNvZGUgdGhhdCBoYXMgc3BlY2lhbCBiYWNrZW5kIHRyZWF0bWVudCcpOwogICAgfQogICAgaWYgKGlzUGFyYW1ldGVyT2ZMaXN0QWRkaW5nTWV0aG9kKGluZm8pIHx8CiAgICAgICAgaXNQYXJhbWV0ZXJPZk1hcEFkZGluZ01ldGhvZChpbmZvKSkgewogICAgICAvLyBUaGVzZSBlbGVtZW50cyBhcmUgYmVpbmcgaGFuZGxlZCBpbgogICAgICAvLyBbdmlzaXREeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb25dLgogICAgICByZXR1cm47CiAgICB9CiAgICBhZGROZXdFc2NhcGVJbmZvcm1hdGlvbihpbmZvKTsKICB9Cn0KgigATk48ASsBMCQoJR4fIAFECUgSCA4OEhEBFA0QDA4KARAJDAsPDQwPEQwREgwODQkBExITBAFHEggODhIRARQNEAwOCgEPCQwLEQwPDwQBRxIIDg4SEQ8NEAwLERMJRQkEAUpBJCEBKExMATEBRh0+AUNLP0wBQlA4SQFCSz1JAUsBNB8hATcqGRgEASktRhgqNBZGCAYSBAETQUcpICs1Iw8IOCobCCg8CCk6CCc6CCUGBAEgGTwGHwQBDD4lBAEMPklLTDglBAEMQCMEAQxIIwQBDC8wIwQBDEwjBAEMREcjBAEMSCMEAQw8HgQBDDodBAEMOh0EAQxFAQxPAQxLAQxDAQwsLgEMSy5PIyUGBAE5KhozDTY0OC9OLU1JDgwMCgYEATYoGTINNTQ4LyktTEgODAwKBgQBNigZMg01NDgvKS1MSA4MDAoGBAFPNidCLjcuQSFFKEgGEgQBTC4tKEEsBAFQOSY8KAQBTzxKPigEAUYqLh9MEQoIBgQBDCwtLx5AJCM7Ig9PPzIIBgEuHkAkTyAPQCwIBgEsSSUGAUMhLUQnRSYPTlFQT01QUVApAVEpOTgIBgEeHy0+JA85OAgGASUtRCcPLDkIBgE8IjApBgE0OT0IQiUGBAFGTh1POS88FAYtRQQBRk4tTjkvPxQGLRwEASkrAUhITT9NSBMGLikEAQxAHTQGIioGH0dEBiMEAQxGRywGEktEBi8uLTAOBiMEAgEucGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvbm9kZV90cmFjZXIuZGFydEFzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19iYWNrZW5kL2pzX2ludGVyb3BfYW5hbHlzaXMuZGFydIijLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBBbmFseXNpcyB0byBkZXRlcm1pbmUgaG93IHRvIGdlbmVyYXRlIGNvZGUgZm9yIHR5cGVkIEphdmFTY3JpcHQgaW50ZXJvcC4KbGlicmFyeSBjb21waWxlci5zcmMuanNfYmFja2VuZC5qc19pbnRlcm9wX2FuYWx5c2lzOwoKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqc0FzdDsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBzaG93IGpzOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CmltcG9ydCAnLi4vdW5pdmVyc2UvY29kZWdlbl93b3JsZF9idWlsZGVyLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3dvcmxkX2J1aWxkZXIuZGFydCcgc2hvdyBTZWxlY3RvckNvbnN0cmFpbnRzOwppbXBvcnQgJ25hbWVyLmRhcnQnOwppbXBvcnQgJ25hdGl2ZV9kYXRhLmRhcnQnOwoKanNBc3QuU3RhdGVtZW50IGJ1aWxkSnNJbnRlcm9wQm9vdHN0cmFwKAogICAgQ29kZWdlbldvcmxkIGNvZGVnZW5Xb3JsZCwgTmF0aXZlQmFzaWNEYXRhIG5hdGl2ZUJhc2ljRGF0YSwgTmFtZXIgbmFtZXIpIHsKICBpZiAoIW5hdGl2ZUJhc2ljRGF0YS5pc0pzSW50ZXJvcFVzZWQpIHJldHVybiBudWxsOwogIExpc3Q8anNBc3QuU3RhdGVtZW50PiBzdGF0ZW1lbnRzID0gPGpzQXN0LlN0YXRlbWVudD5bXTsKICBjb2RlZ2VuV29ybGQuZm9yRWFjaEludm9rZWROYW1lKAogICAgICAoU3RyaW5nIG5hbWUsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4gc2VsZWN0b3JzKSB7CiAgICBzZWxlY3RvcnMuZm9yRWFjaCgoU2VsZWN0b3Igc2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHMgY29uc3RyYWludHMpIHsKICAgICAgaWYgKHNlbGVjdG9yLmlzQ2xvc3VyZUNhbGwpIHsKICAgICAgICAvLyBUT0RPKGphY29icik6IHN1cHBvcnQgbmFtZWQgYXJndW1lbnRzLgogICAgICAgIGlmIChzZWxlY3Rvci5uYW1lZEFyZ3VtZW50Q291bnQgPiAwKSByZXR1cm47CiAgICAgICAgaW50IGFyZ3VtZW50Q291bnQgPSBzZWxlY3Rvci5hcmd1bWVudENvdW50OwogICAgICAgIFN0cmluZyBjYW5kaWRhdGVQYXJhbWV0ZXJOYW1lcyA9CiAgICAgICAgICAgICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJzsKICAgICAgICBMaXN0PFN0cmluZz4gcGFyYW1ldGVycyA9IG5ldyBMaXN0PFN0cmluZz4uZ2VuZXJhdGUoCiAgICAgICAgICAgIGFyZ3VtZW50Q291bnQsIChpKSA9PiBjYW5kaWRhdGVQYXJhbWV0ZXJOYW1lc1tpXSk7CgogICAgICAgIGpzQXN0Lk5hbWUgbmFtZSA9IG5hbWVyLmludm9jYXRpb25OYW1lKHNlbGVjdG9yKTsKICAgICAgICBzdGF0ZW1lbnRzLmFkZChqcy5zdGF0ZW1lbnQoCiAgICAgICAgICAgICdGdW5jdGlvbi5wcm90b3R5cGUuIyA9IGZ1bmN0aW9uKCMpIHsgcmV0dXJuIHRoaXMoIykgfScsCiAgICAgICAgICAgIFtuYW1lLCBwYXJhbWV0ZXJzLCBwYXJhbWV0ZXJzXSkpOwogICAgICB9CiAgICB9KTsKICB9KTsKICByZXR1cm4gbmV3IGpzQXN0LkJsb2NrKHN0YXRlbWVudHMpOwp9CgpGdW5jdGlvblR5cGUgYnVpbGRKc0Z1bmN0aW9uVHlwZSgpIHsKICAvLyBUT0RPKGphY29icik6IGNvbnNpZGVyIHVzaW5nIGNvZGVnZW5Xb3JsZEJ1aWxkZXIuaXNDaGVja3MgdG8gZGV0ZXJtaW5lIHRoZQogIC8vIHJhbmdlIG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzIHRoYXQgbmVlZCB0byBiZSBzdXBwb3J0ZWQgYnkgSmF2YVNjcmlwdAogIC8vIGZ1bmN0aW9uIHR5cGVzLgogIHJldHVybiBuZXcgRnVuY3Rpb25UeXBlKAogICAgICBjb25zdCBEeW5hbWljVHlwZSgpLAogICAgICBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgIG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQoMTYsIGNvbnN0IER5bmFtaWNUeXBlKCkpLAogICAgICBjb25zdCA8U3RyaW5nPltdLAogICAgICBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgIGNvbnN0IDxGdW5jdGlvblR5cGVWYXJpYWJsZT5bXSk7Cn0KOABOTjwBTTUBISEgMjFCFRsBKU81OiNETSQyNTQpRD0/ATolRS4ICAYmAgElUEsVGxsaOhgaJwIBOHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvanNfaW50ZXJvcF9hbmFseXNpcy5kYXJ0NnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3Jlc29sdXRpb24vcmVnaXN0cnkuZGFydJaKLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5yZXNvbHV0aW9uLnJlZ2lzdHJ5OwoKaW1wb3J0ICcuLi9jb21tb24vcmVzb2x1dGlvbi5kYXJ0JyBzaG93IFJlc29sdXRpb25JbXBhY3Q7CmltcG9ydCAnLi4vY29uc3RhbnRzL2V4cHJlc3Npb25zLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnIHNob3cgQ2xhc3NFbnRpdHksIE1lbWJlckVudGl0eTsKaW1wb3J0ICcuLi91bml2ZXJzZS9mZWF0dXJlLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3dvcmxkX2ltcGFjdC5kYXJ0JyBzaG93IFdvcmxkSW1wYWN0LCBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsOwppbXBvcnQgJy4uL3V0aWwvZW51bXNldC5kYXJ0JyBzaG93IEVudW1TZXQ7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnIHNob3cgU2V0bGV0OwoKY2xhc3MgUmVzb2x1dGlvbldvcmxkSW1wYWN0QnVpbGRlciBleHRlbmRzIFdvcmxkSW1wYWN0QnVpbGRlckltcGwKICAgIGltcGxlbWVudHMgUmVzb2x1dGlvbkltcGFjdCB7CiAgQG92ZXJyaWRlCiAgZmluYWwgTWVtYmVyRW50aXR5IG1lbWJlcjsKICBFbnVtU2V0PEZlYXR1cmU+IF9mZWF0dXJlczsKICBTZXRsZXQ8TWFwTGl0ZXJhbFVzZT4gX21hcExpdGVyYWxzOwogIFNldGxldDxTZXRMaXRlcmFsVXNlPiBfc2V0TGl0ZXJhbHM7CiAgU2V0bGV0PExpc3RMaXRlcmFsVXNlPiBfbGlzdExpdGVyYWxzOwogIFNldGxldDxTdHJpbmc+IF9jb25zdFN5bWJvbE5hbWVzOwogIFNldGxldDxDb25zdGFudEV4cHJlc3Npb24+IF9jb25zdGFudExpdGVyYWxzOwogIFNldGxldDxkeW5hbWljPiBfbmF0aXZlRGF0YTsKICBTZXRsZXQ8Q2xhc3NFbnRpdHk+IF9zZWVuQ2xhc3NlczsKICBTZXQ8UnVudGltZVR5cGVVc2U+IF9ydW50aW1lVHlwZVVzZXM7CiAgU2V0PEdlbmVyaWNJbnN0YW50aWF0aW9uPiBfZ2VuZXJpY0luc3RhbnRpYXRpb25zOwoKICBSZXNvbHV0aW9uV29ybGRJbXBhY3RCdWlsZGVyKHRoaXMubWVtYmVyKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBmYWxzZTsKCiAgdm9pZCByZWdpc3Rlck1hcExpdGVyYWwoTWFwTGl0ZXJhbFVzZSBtYXBMaXRlcmFsVXNlKSB7CiAgICBhc3NlcnQobWFwTGl0ZXJhbFVzZSAhPSBudWxsKTsKICAgIF9tYXBMaXRlcmFscyA/Pz0gbmV3IFNldGxldDxNYXBMaXRlcmFsVXNlPigpOwogICAgX21hcExpdGVyYWxzLmFkZChtYXBMaXRlcmFsVXNlKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPE1hcExpdGVyYWxVc2U+IGdldCBtYXBMaXRlcmFscyB7CiAgICByZXR1cm4gX21hcExpdGVyYWxzICE9IG51bGwgPyBfbWFwTGl0ZXJhbHMgOiBjb25zdCA8TWFwTGl0ZXJhbFVzZT5bXTsKICB9CgogIHZvaWQgcmVnaXN0ZXJTZXRMaXRlcmFsKFNldExpdGVyYWxVc2Ugc2V0TGl0ZXJhbFVzZSkgewogICAgYXNzZXJ0KHNldExpdGVyYWxVc2UgIT0gbnVsbCk7CiAgICBfc2V0TGl0ZXJhbHMgPz89IG5ldyBTZXRsZXQ8U2V0TGl0ZXJhbFVzZT4oKTsKICAgIF9zZXRMaXRlcmFscy5hZGQoc2V0TGl0ZXJhbFVzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxTZXRMaXRlcmFsVXNlPiBnZXQgc2V0TGl0ZXJhbHMgPT4KICAgICAgX3NldExpdGVyYWxzID8/IGNvbnN0IDxTZXRMaXRlcmFsVXNlPltdOwoKICB2b2lkIHJlZ2lzdGVyTGlzdExpdGVyYWwoTGlzdExpdGVyYWxVc2UgbGlzdExpdGVyYWxVc2UpIHsKICAgIGFzc2VydChsaXN0TGl0ZXJhbFVzZSAhPSBudWxsKTsKICAgIF9saXN0TGl0ZXJhbHMgPz89IG5ldyBTZXRsZXQ8TGlzdExpdGVyYWxVc2U+KCk7CiAgICBfbGlzdExpdGVyYWxzLmFkZChsaXN0TGl0ZXJhbFVzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxMaXN0TGl0ZXJhbFVzZT4gZ2V0IGxpc3RMaXRlcmFscyB7CiAgICByZXR1cm4gX2xpc3RMaXRlcmFscyAhPSBudWxsID8gX2xpc3RMaXRlcmFscyA6IGNvbnN0IDxMaXN0TGl0ZXJhbFVzZT5bXTsKICB9CgogIHZvaWQgcmVnaXN0ZXJSdW50aW1lVHlwZVVzZShSdW50aW1lVHlwZVVzZSBydW50aW1lVHlwZVVzZSkgewogICAgYXNzZXJ0KHJ1bnRpbWVUeXBlVXNlICE9IG51bGwpOwogICAgX3J1bnRpbWVUeXBlVXNlcyA/Pz0gbmV3IFNldGxldDxSdW50aW1lVHlwZVVzZT4oKTsKICAgIF9ydW50aW1lVHlwZVVzZXMuYWRkKHJ1bnRpbWVUeXBlVXNlKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPFJ1bnRpbWVUeXBlVXNlPiBnZXQgcnVudGltZVR5cGVVc2VzIHsKICAgIHJldHVybiBfcnVudGltZVR5cGVVc2VzICE9IG51bGwKICAgICAgICA/IF9ydW50aW1lVHlwZVVzZXMKICAgICAgICA6IGNvbnN0IDxSdW50aW1lVHlwZVVzZT5bXTsKICB9CgogIHZvaWQgcmVnaXN0ZXJDb25zdFN5bWJvbE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgIF9jb25zdFN5bWJvbE5hbWVzID8/PSBuZXcgU2V0bGV0PFN0cmluZz4oKTsKICAgIF9jb25zdFN5bWJvbE5hbWVzLmFkZChuYW1lKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPFN0cmluZz4gZ2V0IGNvbnN0U3ltYm9sTmFtZXMgewogICAgcmV0dXJuIF9jb25zdFN5bWJvbE5hbWVzICE9IG51bGwgPyBfY29uc3RTeW1ib2xOYW1lcyA6IGNvbnN0IDxTdHJpbmc+W107CiAgfQoKICB2b2lkIHJlZ2lzdGVyRmVhdHVyZShGZWF0dXJlIGZlYXR1cmUpIHsKICAgIF9mZWF0dXJlcyA/Pz0gbmV3IEVudW1TZXQ8RmVhdHVyZT4oKTsKICAgIF9mZWF0dXJlcy5hZGQoZmVhdHVyZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxGZWF0dXJlPiBnZXQgZmVhdHVyZXMgewogICAgcmV0dXJuIF9mZWF0dXJlcyAhPSBudWxsCiAgICAgICAgPyBfZmVhdHVyZXMuaXRlcmFibGUoRmVhdHVyZS52YWx1ZXMpCiAgICAgICAgOiBjb25zdCA8RmVhdHVyZT5bXTsKICB9CgogIHZvaWQgcmVnaXN0ZXJDb25zdGFudExpdGVyYWwoQ29uc3RhbnRFeHByZXNzaW9uIGNvbnN0YW50KSB7CiAgICBfY29uc3RhbnRMaXRlcmFscyA/Pz0gbmV3IFNldGxldDxDb25zdGFudEV4cHJlc3Npb24+KCk7CiAgICBfY29uc3RhbnRMaXRlcmFscy5hZGQoY29uc3RhbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q29uc3RhbnRFeHByZXNzaW9uPiBnZXQgY29uc3RhbnRMaXRlcmFscyB7CiAgICByZXR1cm4gX2NvbnN0YW50TGl0ZXJhbHMgIT0gbnVsbAogICAgICAgID8gX2NvbnN0YW50TGl0ZXJhbHMKICAgICAgICA6IGNvbnN0IDxDb25zdGFudEV4cHJlc3Npb24+W107CiAgfQoKICB2b2lkIHJlZ2lzdGVyTmF0aXZlRGF0YShkeW5hbWljIG5hdGl2ZURhdGEpIHsKICAgIGFzc2VydChuYXRpdmVEYXRhICE9IG51bGwpOwogICAgX25hdGl2ZURhdGEgPz89IG5ldyBTZXRsZXQ8ZHluYW1pYz4oKTsKICAgIF9uYXRpdmVEYXRhLmFkZChuYXRpdmVEYXRhKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPGR5bmFtaWM+IGdldCBuYXRpdmVEYXRhIHsKICAgIHJldHVybiBfbmF0aXZlRGF0YSAhPSBudWxsID8gX25hdGl2ZURhdGEgOiBjb25zdCA8ZHluYW1pYz5bXTsKICB9CgogIHZvaWQgcmVnaXN0ZXJTZWVuQ2xhc3MoQ2xhc3NFbnRpdHkgc2VlbkNsYXNzKSB7CiAgICBfc2VlbkNsYXNzZXMgPz89IG5ldyBTZXRsZXQ8Q2xhc3NFbnRpdHk+KCk7CiAgICBfc2VlbkNsYXNzZXMuYWRkKHNlZW5DbGFzcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gZ2V0IHNlZW5DbGFzc2VzIHsKICAgIHJldHVybiBfc2VlbkNsYXNzZXMgPz8gY29uc3QgPENsYXNzRW50aXR5PltdOwogIH0KCiAgdm9pZCByZWdpc3Rlckluc3RhbnRpYXRpb24oR2VuZXJpY0luc3RhbnRpYXRpb24gaW5zdGFudGlhdGlvbikgewogICAgX2dlbmVyaWNJbnN0YW50aWF0aW9ucyA/Pz0gbmV3IFNldDxHZW5lcmljSW5zdGFudGlhdGlvbj4oKTsKICAgIF9nZW5lcmljSW5zdGFudGlhdGlvbnMuYWRkKGluc3RhbnRpYXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8R2VuZXJpY0luc3RhbnRpYXRpb24+IGdldCBnZW5lcmljSW5zdGFudGlhdGlvbnMgewogICAgcmV0dXJuIF9nZW5lcmljSW5zdGFudGlhdGlvbnMgPz8gY29uc3QgPEdlbmVyaWNJbnN0YW50aWF0aW9uPltdOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoJ1Jlc29sdXRpb25Xb3JsZEltcGFjdEJ1aWxkZXIoJG1lbWJlciknKTsKICAgIFdvcmxkSW1wYWN0LnByaW50T24oc2IsIHRoaXMpOwogICAgaWYgKF9mZWF0dXJlcyAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCdcbiBmZWF0dXJlczonKTsKICAgICAgZm9yIChGZWF0dXJlIGZlYXR1cmUgaW4gX2ZlYXR1cmVzLml0ZXJhYmxlKEZlYXR1cmUudmFsdWVzKSkgewogICAgICAgIHNiLndyaXRlKCdcbiAgJGZlYXR1cmUnKTsKICAgICAgfQogICAgfQogICAgaWYgKF9tYXBMaXRlcmFscyAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCdcbiBtYXAtbGl0ZXJhbHM6Jyk7CiAgICAgIGZvciAoTWFwTGl0ZXJhbFVzZSB1c2UgaW4gX21hcExpdGVyYWxzKSB7CiAgICAgICAgc2Iud3JpdGUoJ1xuICAkdXNlJyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfc2V0TGl0ZXJhbHMgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgnXG4gc2V0LWxpdGVyYWxzOicpOwogICAgICBmb3IgKFNldExpdGVyYWxVc2UgdXNlIGluIF9zZXRMaXRlcmFscykgewogICAgICAgIHNiLndyaXRlKCdcbiAgJHVzZScpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2xpc3RMaXRlcmFscyAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCdcbiBsaXN0LWxpdGVyYWxzOicpOwogICAgICBmb3IgKExpc3RMaXRlcmFsVXNlIHVzZSBpbiBfbGlzdExpdGVyYWxzKSB7CiAgICAgICAgc2Iud3JpdGUoJ1xuICAkdXNlJyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfY29uc3RhbnRMaXRlcmFscyAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCdcbiBjb25zdC1saXRlcmFsczonKTsKICAgICAgZm9yIChDb25zdGFudEV4cHJlc3Npb24gY29uc3RhbnQgaW4gX2NvbnN0YW50TGl0ZXJhbHMpIHsKICAgICAgICBzYi53cml0ZSgnXG4gICR7Y29uc3RhbnQudG9EYXJ0VGV4dCgpfScpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2NvbnN0U3ltYm9sTmFtZXMgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgnXG4gY29uc3Qtc3ltYm9sLW5hbWVzOiAkX2NvbnN0U3ltYm9sTmFtZXMnKTsKICAgIH0KICAgIGlmIChfbmF0aXZlRGF0YSAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCdcbiBuYXRpdmUtZGF0YTonKTsKICAgICAgZm9yICh2YXIgZGF0YSBpbiBfbmF0aXZlRGF0YSkgewogICAgICAgIHNiLndyaXRlKCdcbiAgJGRhdGEnKTsKICAgICAgfQogICAgfQogICAgaWYgKF9nZW5lcmljSW5zdGFudGlhdGlvbnMgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgnXG4gaW5zdGFudGlhdGlvbnM6Jyk7CiAgICAgIGZvciAodmFyIGRhdGEgaW4gX2dlbmVyaWNJbnN0YW50aWF0aW9ucykgewogICAgICAgIHNiLndyaXRlKCdcbiAgJGRhdGEnKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CoDHAE5OPAElATooQyNRLCgBQiIMHR4mJigkMB8kKDQBLQEMHQE5IzIlBAEMLEoEATkjMiUEAQwtLwE8JDQnBAEMLk0EAT8kNyoEAQwxJBskBAEuMCEEAQwqTQQBKiocBAEMIx0tHQQBPjwlBAEMNiUcKAQBMCArIQQBDCVCBAEyMCEEAQwqMgQBQ0AvBAEMPUUEAQwWKjcjHSBEIggGICQwHggGICQwHggGISUyHggGJSY/MggGJT0GHyMmHwgGKiYxHwgGGgQCAS1wYWNrYWdlOmNvbXBpbGVyL3NyYy9yZXNvbHV0aW9uL3JlZ2lzdHJ5LmRhcnQ0c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL3Rlc3RpbmcvZmVhdHVyZXMuZGFydKSaLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnaWRfdGVzdGluZy5kYXJ0JzsKCi8vLyBVdGlsaXR5IGNsYXNzIGZvciBhbm5vdGF0ZWQgdGVzdGluZyByZXByZXNlbnRpbmcgYSBzZXQgb2YgZmVhdHVyZXMuCmNsYXNzIEZlYXR1cmVzIHsKICBNYXA8U3RyaW5nLCBPYmplY3Q+IF9mZWF0dXJlcyA9IHt9OwogIFNldDxTdHJpbmc+IF91bnNvcnRlZCA9IG5ldyBTZXQ8U3RyaW5nPigpOwoKICAvLy8gTWFyayB0aGUgZmVhdHVyZSBba2V5XSBhcyBleGlzdGluZy4gSWYgW3ZhbHVlXSBpcyBwcm92aWRlZCwgdGhlIGZlYXR1cmUKICAvLy8gW2tleV0gaXMgc2V0IHRvIGhhdmUgdGhpcyB2YWx1ZS4KICB2b2lkIGFkZChTdHJpbmcga2V5LCB7dmFyIHZhbHVlOiAnJ30pIHsKICAgIF9mZWF0dXJlc1trZXldID0gdmFsdWUudG9TdHJpbmcoKTsKICB9CgogIC8vLyBBZGQgW3ZhbHVlXSBhcyBhbiBlbGVtZW50IG9mIHRoZSBsaXN0IHZhbHVlcyBvZiBmZWF0dXJlIFtrZXldLgogIHZvaWQgYWRkRWxlbWVudChTdHJpbmcga2V5LCBbdmFyIHZhbHVlXSkgewogICAgTGlzdDxTdHJpbmc+IGxpc3QgPSBfZmVhdHVyZXMucHV0SWZBYnNlbnQoa2V5LCAoKSA9PiA8U3RyaW5nPltdKTsKICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIGxpc3QuYWRkKHZhbHVlLnRvU3RyaW5nKCkpOwogICAgfQogIH0KCiAgLy8vIE1hcmtzIGxpc3QgdmFsdWVzIG9mIFtrZXldIGFzIHVuc29ydGVkLiBUaGlzIHByZXZlbnRzIHRoZSBbZ2V0VGV4dF0KICAvLy8gcmVwcmVzZW50YXRpb24gZnJvbSBhdXRvbWF0aWNhbGx5IHNvcnRpbmcgdGhlIHZhbHVlcy4KICB2b2lkIG1hcmtBc1Vuc29ydGVkKFN0cmluZyBrZXkpIHsKICAgIF91bnNvcnRlZC5hZGQoa2V5KTsKICB9CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBmZWF0dXJlIFtrZXldIGV4aXN0cy4KICBib29sIGNvbnRhaW5zS2V5KFN0cmluZyBrZXkpIHsKICAgIHJldHVybiBfZmVhdHVyZXMuY29udGFpbnNLZXkoa2V5KTsKICB9CgogIC8vLyBTZXQgdGhlIGZlYXR1cmUgW2tleV0gdG8gZXhpc3Qgd2l0aCB0aGUgW3ZhbHVlXS4KICB2b2lkIG9wZXJhdG9yIFtdPShTdHJpbmcga2V5LCBTdHJpbmcgdmFsdWUpIHsKICAgIF9mZWF0dXJlc1trZXldID0gdmFsdWU7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgdmFsdWUgc2V0IGZvciBmZWF0dXJlIFtrZXldLgogIE9iamVjdCBvcGVyYXRvciBbXShTdHJpbmcga2V5KSA9PiBfZmVhdHVyZXNba2V5XTsKCiAgLy8vIFJlbW92ZXMgdGhlIHZhbHVlIHNldCBmb3IgZmVhdHVyZSBba2V5XS4gUmV0dXJucyB0aGUgZXhpc3RpbmcgdmFsdWUuCiAgT2JqZWN0IHJlbW92ZShTdHJpbmcga2V5KSA9PiBfZmVhdHVyZXMucmVtb3ZlKGtleSk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIGZlYXR1cmUgc2V0IGlzIGVtcHR5LgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2ZlYXR1cmVzLmlzRW1wdHk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIGZlYXR1cmUgc2V0IGlzIG5vbi1lbXB0eS4KICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9mZWF0dXJlcy5pc05vdEVtcHR5OwoKICAvLy8gQ2FsbCBbZl0gZm9yIGVhY2ggZmVhdHVyZSBpbiB0aGlzIGZlYXR1cmUgc2V0IHdpdGggaXRzIGNvcnJlc3BvbmRpbmcKICAvLy8gdmFsdWUuCiAgdm9pZCBmb3JFYWNoKHZvaWQgRnVuY3Rpb24oU3RyaW5nLCBPYmplY3QpIGYpIHsKICAgIF9mZWF0dXJlcy5mb3JFYWNoKGYpOwogIH0KCiAgLy8vIFJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyBhbGwgZmVhdHVyZXMgaW4gYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBzb3J0ZWQKICAvLy8gYnkgZmVhdHVyZSBuYW1lcy4KICBTdHJpbmcgZ2V0VGV4dCgpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGJvb2wgbmVlZHNDb21tYSA9IGZhbHNlOwogICAgZm9yIChTdHJpbmcgbmFtZSBpbiBfZmVhdHVyZXMua2V5cy50b0xpc3QoKS4uc29ydCgpKSB7CiAgICAgIGR5bmFtaWMgdmFsdWUgPSBfZmVhdHVyZXNbbmFtZV07CiAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgICAgaWYgKG5lZWRzQ29tbWEpIHsKICAgICAgICAgIHNiLndyaXRlKCcsJyk7CiAgICAgICAgfQogICAgICAgIHNiLndyaXRlKG5hbWUpOwogICAgICAgIGlmICh2YWx1ZSBpcyBMaXN0PFN0cmluZz4pIHsKICAgICAgICAgIGlmIChfdW5zb3J0ZWQuY29udGFpbnMobmFtZSkpIHsKICAgICAgICAgICAgdmFsdWUgPSAnWyR7dmFsdWUuam9pbignLCcpfV0nOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFsdWUgPSAnWyR7KHZhbHVlLi5zb3J0KCkpLmpvaW4oJywnKX1dJzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHZhbHVlICE9ICcnKSB7CiAgICAgICAgICBzYi53cml0ZSgnPScpOwogICAgICAgICAgc2Iud3JpdGUodmFsdWUpOwogICAgICAgIH0KICAgICAgICBuZWVkc0NvbW1hID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnRmVhdHVyZXMoJHtnZXRUZXh0KCl9KSc7CgogIC8vLyBDcmVhdGVzIGEgW0ZlYXR1cmVzXSBvYmplY3QgYnkgcGFyc2UgdGhlIFt0ZXh0XSBlbmNvZGluZy4KICAvLy8KICAvLy8gU2luZ2xlIGZlYXR1cmVzIHdpbGwgYmUgcGFyc2VkIGFzIHN0cmluZ3MgYW5kIGxpc3QgZmVhdHVyZXMgKGZlYXR1cmVzCiAgLy8vIGVuY29kZWQgaW4gYFsuLi5dYCB3aWxsIGJlIHBhcnNlZCBhcyBsaXN0cyBvZiBzdHJpbmdzLgogIHN0YXRpYyBGZWF0dXJlcyBmcm9tVGV4dChTdHJpbmcgdGV4dCkgewogICAgRmVhdHVyZXMgZmVhdHVyZXMgPSBuZXcgRmVhdHVyZXMoKTsKICAgIGlmICh0ZXh0ID09IG51bGwpIHJldHVybiBmZWF0dXJlczsKICAgIGludCBpbmRleCA9IDA7CiAgICB3aGlsZSAoaW5kZXggPCB0ZXh0Lmxlbmd0aCkgewogICAgICBpbnQgZXFQb3MgPSB0ZXh0LmluZGV4T2YoJz0nLCBpbmRleCk7CiAgICAgIGludCBjb21tYVBvcyA9IHRleHQuaW5kZXhPZignLCcsIGluZGV4KTsKICAgICAgU3RyaW5nIG5hbWU7CiAgICAgIGJvb2wgaGFzVmFsdWUgPSBmYWxzZTsKICAgICAgaWYgKGVxUG9zICE9IC0xICYmIGNvbW1hUG9zICE9IC0xKSB7CiAgICAgICAgaWYgKGVxUG9zIDwgY29tbWFQb3MpIHsKICAgICAgICAgIG5hbWUgPSB0ZXh0LnN1YnN0cmluZyhpbmRleCwgZXFQb3MpOwogICAgICAgICAgaGFzVmFsdWUgPSB0cnVlOwogICAgICAgICAgaW5kZXggPSBlcVBvcyArIDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG5hbWUgPSB0ZXh0LnN1YnN0cmluZyhpbmRleCwgY29tbWFQb3MpOwogICAgICAgICAgaW5kZXggPSBjb21tYVBvcyArIDE7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGVxUG9zICE9IC0xKSB7CiAgICAgICAgbmFtZSA9IHRleHQuc3Vic3RyaW5nKGluZGV4LCBlcVBvcyk7CiAgICAgICAgaGFzVmFsdWUgPSB0cnVlOwogICAgICAgIGluZGV4ID0gZXFQb3MgKyAxOwogICAgICB9IGVsc2UgaWYgKGNvbW1hUG9zICE9IC0xKSB7CiAgICAgICAgbmFtZSA9IHRleHQuc3Vic3RyaW5nKGluZGV4LCBjb21tYVBvcyk7CiAgICAgICAgaW5kZXggPSBjb21tYVBvcyArIDE7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbmFtZSA9IHRleHQuc3Vic3RyaW5nKGluZGV4KTsKICAgICAgICBpbmRleCA9IHRleHQubGVuZ3RoOwogICAgICB9CiAgICAgIGlmIChoYXNWYWx1ZSkgewogICAgICAgIGNvbnN0IE1hcDxTdHJpbmcsIFN0cmluZz4gZGVsaW1pdGVycyA9IGNvbnN0IHsKICAgICAgICAgICdbJzogJ10nLAogICAgICAgICAgJ3snOiAnfScsCiAgICAgICAgICAnKCc6ICcpJywKICAgICAgICAgICc8JzogJz4nCiAgICAgICAgfTsKICAgICAgICBMaXN0PFN0cmluZz4gZW5kRGVsaW1pdGVycyA9IDxTdHJpbmc+W107CiAgICAgICAgYm9vbCBpc0xpc3QgPSBpbmRleCA8IHRleHQubGVuZ3RoICYmIHRleHQuc3RhcnRzV2l0aCgnWycsIGluZGV4KTsKICAgICAgICBpZiAoaXNMaXN0KSB7CiAgICAgICAgICBmZWF0dXJlcy5hZGRFbGVtZW50KG5hbWUpOwogICAgICAgICAgZW5kRGVsaW1pdGVycy5hZGQoJ10nKTsKICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgfQogICAgICAgIGludCB2YWx1ZVN0YXJ0ID0gaW5kZXg7CiAgICAgICAgd2hpbGUgKGluZGV4IDwgdGV4dC5sZW5ndGgpIHsKICAgICAgICAgIFN0cmluZyBjaGFyID0gdGV4dC5zdWJzdHJpbmcoaW5kZXgsIGluZGV4ICsgMSk7CiAgICAgICAgICBpZiAoZW5kRGVsaW1pdGVycy5pc05vdEVtcHR5ICYmIGVuZERlbGltaXRlcnMubGFzdCA9PSBjaGFyKSB7CiAgICAgICAgICAgIGVuZERlbGltaXRlcnMucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICBpbmRleCsrOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgU3RyaW5nIGVuZERlbGltaXRlciA9IGRlbGltaXRlcnNbY2hhcl07CiAgICAgICAgICAgIGlmIChlbmREZWxpbWl0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgIGVuZERlbGltaXRlcnMuYWRkKGVuZERlbGltaXRlcik7CiAgICAgICAgICAgICAgaW5kZXgrKzsKICAgICAgICAgICAgfSBlbHNlIGlmIChjaGFyID09ICcsJykgewogICAgICAgICAgICAgIGlmIChlbmREZWxpbWl0ZXJzLmlzRW1wdHkpIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoZW5kRGVsaW1pdGVycy5sZW5ndGggPT0gMSAmJiBpc0xpc3QpIHsKICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHRleHQuc3Vic3RyaW5nKHZhbHVlU3RhcnQsIGluZGV4KTsKICAgICAgICAgICAgICAgIGZlYXR1cmVzLmFkZEVsZW1lbnQobmFtZSwgdmFsdWUpOwogICAgICAgICAgICAgICAgaW5kZXgrKzsKICAgICAgICAgICAgICAgIHZhbHVlU3RhcnQgPSBpbmRleDsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaW5kZXgrKzsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgaW5kZXgrKzsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoaXNMaXN0KSB7CiAgICAgICAgICBTdHJpbmcgdmFsdWUgPSB0ZXh0LnN1YnN0cmluZyh2YWx1ZVN0YXJ0LCBpbmRleCAtIDEpOwogICAgICAgICAgaWYgKHZhbHVlLmlzTm90RW1wdHkpIHsKICAgICAgICAgICAgZmVhdHVyZXMuYWRkRWxlbWVudChuYW1lLCB2YWx1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHRleHQuc3Vic3RyaW5nKHZhbHVlU3RhcnQsIGluZGV4KTsKICAgICAgICAgIGZlYXR1cmVzLmFkZChuYW1lLCB2YWx1ZTogdmFsdWUpOwogICAgICAgIH0KICAgICAgICBpbmRleCsrOwogICAgICB9IGVsc2UgewogICAgICAgIGZlYXR1cmVzLmFkZChuYW1lKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZlYXR1cmVzOwogIH0KfQoKY2xhc3MgRmVhdHVyZXNEYXRhSW50ZXJwcmV0ZXIgaW1wbGVtZW50cyBEYXRhSW50ZXJwcmV0ZXI8RmVhdHVyZXM+IHsKICBjb25zdCBGZWF0dXJlc0RhdGFJbnRlcnByZXRlcigpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgaXNBc0V4cGVjdGVkKEZlYXR1cmVzIGFjdHVhbEZlYXR1cmVzLCBTdHJpbmcgZXhwZWN0ZWREYXRhKSB7CiAgICBpZiAoZXhwZWN0ZWREYXRhID09ICcqJykgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSBpZiAoZXhwZWN0ZWREYXRhID09ICcnKSB7CiAgICAgIHJldHVybiBhY3R1YWxGZWF0dXJlcy5pc05vdEVtcHR5ID8gIkV4cGVjdGVkIGVtcHR5IGRhdGEuIiA6IG51bGw7CiAgICB9IGVsc2UgewogICAgICBMaXN0PFN0cmluZz4gZXJyb3JzRm91bmQgPSBbXTsKICAgICAgRmVhdHVyZXMgZXhwZWN0ZWRGZWF0dXJlcyA9IEZlYXR1cmVzLmZyb21UZXh0KGV4cGVjdGVkRGF0YSk7CiAgICAgIFNldDxTdHJpbmc+IHZhbGlkYXRlZEZlYXR1cmVzID0gbmV3IFNldDxTdHJpbmc+KCk7CiAgICAgIGV4cGVjdGVkRmVhdHVyZXMuZm9yRWFjaCgoU3RyaW5nIGtleSwgT2JqZWN0IGV4cGVjdGVkVmFsdWUpIHsKICAgICAgICBib29sIGV4cGVjdE1hdGNoID0gdHJ1ZTsKICAgICAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoJyEnKSkgewogICAgICAgICAga2V5ID0ga2V5LnN1YnN0cmluZygxKTsKICAgICAgICAgIGV4cGVjdE1hdGNoID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHZhbGlkYXRlZEZlYXR1cmVzLmFkZChrZXkpOwogICAgICAgIE9iamVjdCBhY3R1YWxWYWx1ZSA9IGFjdHVhbEZlYXR1cmVzW2tleV07CiAgICAgICAgaWYgKCFleHBlY3RNYXRjaCkgewogICAgICAgICAgaWYgKGFjdHVhbEZlYXR1cmVzLmNvbnRhaW5zS2V5KGtleSkpIHsKICAgICAgICAgICAgZXJyb3JzRm91bmQuYWRkKCdVbmV4cGVjdGVkIGRhdGEgZm91bmQgZm9yICRrZXk9JGFjdHVhbFZhbHVlJyk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICghYWN0dWFsRmVhdHVyZXMuY29udGFpbnNLZXkoa2V5KSkgewogICAgICAgICAgZXJyb3JzRm91bmQuYWRkKCdObyBkYXRhIGZvdW5kIGZvciAka2V5Jyk7CiAgICAgICAgfSBlbHNlIGlmIChleHBlY3RlZFZhbHVlID09ICcnKSB7CiAgICAgICAgICBpZiAoYWN0dWFsVmFsdWUgIT0gJycpIHsKICAgICAgICAgICAgZXJyb3JzRm91bmQuYWRkKCdOb24tZW1wdHkgZGF0YSBmb3VuZCBmb3IgJGtleScpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoZXhwZWN0ZWRWYWx1ZSA9PSAnKicpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9IGVsc2UgaWYgKGV4cGVjdGVkVmFsdWUgaXMgTGlzdCkgewogICAgICAgICAgaWYgKGFjdHVhbFZhbHVlIGlzIExpc3QpIHsKICAgICAgICAgICAgTGlzdCBhY3R1YWxMaXN0ID0gYWN0dWFsVmFsdWUudG9MaXN0KCk7CiAgICAgICAgICAgIGZvciAoT2JqZWN0IGV4cGVjdGVkT2JqZWN0IGluIGV4cGVjdGVkVmFsdWUpIHsKICAgICAgICAgICAgICBTdHJpbmcgZXhwZWN0ZWRUZXh0ID0gJyRleHBlY3RlZE9iamVjdCc7CiAgICAgICAgICAgICAgYm9vbCBtYXRjaEZvdW5kID0gZmFsc2U7CiAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkVGV4dC5lbmRzV2l0aCgnKicpKSB7CiAgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCBtYXRjaGVyLgogICAgICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9CiAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRUZXh0LnN1YnN0cmluZygwLCBleHBlY3RlZFRleHQuaW5kZXhPZignKicpKTsKICAgICAgICAgICAgICAgIExpc3QgbWF0Y2hlcyA9IFtdOwogICAgICAgICAgICAgICAgZm9yIChPYmplY3QgYWN0dWFsT2JqZWN0IGluIGFjdHVhbExpc3QpIHsKICAgICAgICAgICAgICAgICAgaWYgKCckYWN0dWFsT2JqZWN0Jy5zdGFydHNXaXRoKHByZWZpeCkpIHsKICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLmFkZChhY3R1YWxPYmplY3QpOwogICAgICAgICAgICAgICAgICAgIG1hdGNoRm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3IgKE9iamVjdCBtYXRjaCBpbiBtYXRjaGVzKSB7CiAgICAgICAgICAgICAgICAgIGFjdHVhbExpc3QucmVtb3ZlKG1hdGNoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZm9yIChPYmplY3QgYWN0dWFsT2JqZWN0IGluIGFjdHVhbExpc3QpIHsKICAgICAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkVGV4dCA9PSAnJGFjdHVhbE9iamVjdCcpIHsKICAgICAgICAgICAgICAgICAgICBhY3R1YWxMaXN0LnJlbW92ZShhY3R1YWxPYmplY3QpOwogICAgICAgICAgICAgICAgICAgIG1hdGNoRm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICghbWF0Y2hGb3VuZCkgewogICAgICAgICAgICAgICAgZXJyb3JzRm91bmQuYWRkKCJObyBtYXRjaCBmb3VuZCBmb3IgJGtleT1bJGV4cGVjdGVkVGV4dF0iKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGFjdHVhbExpc3QuaXNOb3RFbXB0eSkgewogICAgICAgICAgICAgIGVycm9yc0ZvdW5kCiAgICAgICAgICAgICAgICAgIC5hZGQoIkV4dHJhIGRhdGEgZm91bmQgJGtleT1bJHthY3R1YWxMaXN0LmpvaW4oJywnKX1dIik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVycm9yc0ZvdW5kLmFkZCgiTGlzdCBkYXRhIGV4cGVjdGVkIGZvciAka2V5OiAiCiAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJyRleHBlY3RlZFZhbHVlJywgZm91bmQgJyR7YWN0dWFsVmFsdWV9JyIpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoZXhwZWN0ZWRWYWx1ZSAhPSBhY3R1YWxWYWx1ZSkgewogICAgICAgICAgZXJyb3JzRm91bmQuYWRkKCJNaXNtYXRjaCBmb3IgJGtleTogZXhwZWN0ZWQgJyRleHBlY3RlZFZhbHVlJywgIgogICAgICAgICAgICAgICJmb3VuZCAnJHthY3R1YWxWYWx1ZX0nIik7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgYWN0dWFsRmVhdHVyZXMuZm9yRWFjaCgoU3RyaW5nIGtleSwgT2JqZWN0IHZhbHVlKSB7CiAgICAgICAgaWYgKCF2YWxpZGF0ZWRGZWF0dXJlcy5jb250YWlucyhrZXkpKSB7CiAgICAgICAgICBpZiAodmFsdWUgPT0gJycpIHsKICAgICAgICAgICAgZXJyb3JzRm91bmQuYWRkKCJFeHRyYSBkYXRhIGZvdW5kICcka2V5JyIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZXJyb3JzRm91bmQuYWRkKCJFeHRyYSBkYXRhIGZvdW5kICRrZXk9JHZhbHVlIik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmV0dXJuIGVycm9yc0ZvdW5kLmlzTm90RW1wdHkgPyBlcnJvcnNGb3VuZC5qb2luKCdcbiAnKSA6IG51bGw7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0VGV4dChGZWF0dXJlcyBhY3R1YWxEYXRhKSB7CiAgICByZXR1cm4gYWN0dWFsRGF0YS5nZXRUZXh0KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRW1wdHkoRmVhdHVyZXMgYWN0dWFsRGF0YSkgewogICAgcmV0dXJuIGFjdHVhbERhdGEgPT0gbnVsbCB8fCBhY3R1YWxEYXRhLmlzRW1wdHk7CiAgfQp9CoEfAE5OPAEaAUgRJi0BTicqJwQBRS1GGSIGBAFKPCQYBAEuIScEATcwHAQBLzQBSzYBMykBNy8BSw0yGgQBUBgVKh07JxsaGQoYJSosEzYMChsZGwobCAYaBAEMMQFABkw9KignEyIsLxMdKyAvGx0RMiAKIC0ZGyMwHg8mHQgWNxQUFBMLMUoWJSITCiAmOkgoFRM0KC8XJisXQEIyGSQXGRAVFw4MChZAIi4METwsChEPHAgGFQQCAUUjAQxGHxMlSA0lQzlEISMiHwokMhwxTAw3NSojPgwrEiwlNDs3JzAlIEojOjwvJxQSMCwSFzo5NScbFBIQIUwQDikaSw4TPEYMM0spCgo6MB04Ez0MCgpGBgQBDCghBAEMJjUEAgErcGFja2FnZTpmcm9udF9lbmQvc3JjL3Rlc3RpbmcvZmVhdHVyZXMuZGFydCxzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9oYXNoL3NoYTEuZGFydIX0Ly8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDpjb252ZXJ0JzsKCmltcG9ydCAncGFja2FnZTpjcnlwdG8vY3J5cHRvLmRhcnQnOwoKaW1wb3J0ICcuLi9pby9jb2RlX291dHB1dC5kYXJ0JyBzaG93IENvZGVPdXRwdXRMaXN0ZW5lcjsKCmNsYXNzIEhhc2hlciBpbXBsZW1lbnRzIENvZGVPdXRwdXRMaXN0ZW5lciB7CiAgZmluYWwgX0RpZ2VzdFNpbmsgX2RpZ2VzdFNpbms7CiAgQnl0ZUNvbnZlcnNpb25TaW5rIF9ieXRlU2luazsKCiAgSGFzaGVyLl8odGhpcy5fZGlnZXN0U2luaykKICAgICAgOiBfYnl0ZVNpbmsgPSBzaGExLnN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oX2RpZ2VzdFNpbmspOwoKICBmYWN0b3J5IEhhc2hlcigpID0+IEhhc2hlci5fKF9EaWdlc3RTaW5rKCkpOwoKICBAb3ZlcnJpZGUKICB2b2lkIG9uRG9uZShpbnQgbGVuZ3RoKSB7CiAgICAvLyBEbyBub3RoaW5nLgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBvblRleHQoU3RyaW5nIHRleHQpIHsKICAgIGlmIChfYnl0ZVNpbmsgIT0gbnVsbCkgewogICAgICBfYnl0ZVNpbmsuYWRkKHV0ZjguZW5jb2RlKHRleHQpKTsKICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIHRoZSBiYXNlNjQtZW5jb2RlZCBTSEEtMSBoYXNoIG9mIHRoZSB1dGYtOCBieXRlcyBvZiB0aGUgb3V0cHV0CiAgLy8vIHRleHQuCiAgU3RyaW5nIGdldEhhc2goKSB7CiAgICBpZiAoX2J5dGVTaW5rICE9IG51bGwpIHsKICAgICAgX2J5dGVTaW5rLmNsb3NlKCk7CiAgICAgIF9ieXRlU2luayA9IG51bGw7CiAgICB9CiAgICByZXR1cm4gYmFzZTY0LmVuY29kZShfZGlnZXN0U2luay52YWx1ZS5ieXRlcyk7CiAgfQp9CgovLy8gQSBzaW5rIHVzZWQgdG8gZ2V0IGEgZGlnZXN0IHZhbHVlIG91dCBvZiBgSGFzaC5zdGFydENodW5rZWRDb252ZXJzaW9uYC4KY2xhc3MgX0RpZ2VzdFNpbmsgZXh0ZW5kcyBTaW5rPERpZ2VzdD4gewogIERpZ2VzdCBfdmFsdWU7CgogIC8vLyBUaGUgdmFsdWUgYWRkZWQgdG8gdGhlIHNpbmssIGlmIGFueS4KICBEaWdlc3QgZ2V0IHZhbHVlIHsKICAgIGFzc2VydChfdmFsdWUgIT0gbnVsbCk7CiAgICByZXR1cm4gX3ZhbHVlOwogIH0KCiAgLy8vIEFkZHMgW3ZhbHVlXSB0byB0aGUgc2luay4KICAvLy8KICAvLy8gVW5saWtlIG1vc3Qgc2lua3MsIHRoaXMgbWF5IG9ubHkgYmUgY2FsbGVkIG9uY2UuCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGQoRGlnZXN0IHZhbHVlKSB7CiAgICBhc3NlcnQoX3ZhbHVlID09IG51bGwpOwogICAgX3ZhbHVlID0gdmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsb3NlKCkgewogICAgYXNzZXJ0KF92YWx1ZSAhPSBudWxsKTsKICB9Cn0KRABOTjwBFwElATkBLSEgAR0+AS8BDBwTBAEMHR0oBgQBTQwVHRkYBjMEAgFMKREBKxUcEwQBIAY3DBscFAQBDBEcBAIBI3BhY2thZ2U6Y29tcGlsZXIvc3JjL2hhc2gvc2hhMS5kYXJ0OHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2lvL3NvdXJjZV9tYXBfYnVpbGRlci5kYXJ0vAMvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLnNvdXJjZV9tYXBfYnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9kYXJ0MmpzLmRhcnQnIGFzIGZlOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IExvY2F0aW9uOwppbXBvcnQgJy4uLy4uL2NvbXBpbGVyX25ldy5kYXJ0JyBzaG93IENvbXBpbGVyT3V0cHV0LCBPdXRwdXRTaW5rLCBPdXRwdXRUeXBlOwppbXBvcnQgJy4uL3V0aWwvdXRpbC5kYXJ0JzsKaW1wb3J0ICdsb2NhdGlvbl9wcm92aWRlci5kYXJ0JzsKaW1wb3J0ICdjb2RlX291dHB1dC5kYXJ0JyBzaG93IFNvdXJjZUxvY2F0aW9uc1Byb3ZpZGVyLCBTb3VyY2VMb2NhdGlvbnM7CmltcG9ydCAnc291cmNlX2luZm9ybWF0aW9uLmRhcnQnIHNob3cgU291cmNlTG9jYXRpb24sIEZyYW1lRW50cnk7CgpjbGFzcyBTb3VyY2VNYXBCdWlsZGVyIHsKICBmaW5hbCBTdHJpbmcgdmVyc2lvbjsKCiAgLy8vIFRoZSBVUkkgb2YgdGhlIHNvdXJjZSBtYXAgZmlsZS4KICBmaW5hbCBVcmkgc291cmNlTWFwVXJpOwoKICAvLy8gVGhlIFVSSSBvZiB0aGUgdGFyZ2V0IGxhbmd1YWdlIGZpbGUuCiAgZmluYWwgVXJpIHRhcmdldEZpbGVVcmk7CgogIGZpbmFsIExvY2F0aW9uUHJvdmlkZXIgbG9jYXRpb25Qcm92aWRlcjsKICBmaW5hbCBMaXN0PFNvdXJjZU1hcEVudHJ5PiBlbnRyaWVzID0gbmV3IExpc3Q8U291cmNlTWFwRW50cnk+KCk7CgogIC8vLyBFeHRlbnNpb24gdXNlZCB0byBkZW9iZnVzY2F0ZSBtaW5pZmllZCBuYW1lcyBpbiBlcnJvciBtZXNzYWdlcy4KICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IG1pbmlmaWVkR2xvYmFsTmFtZXM7CiAgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBtaW5pZmllZEluc3RhbmNlTmFtZXM7CgogIC8vLyBFeHRlbnNpb24gdXNlZCB0byBkZW9iZnVzY2F0ZSBpbmxpbmVkIHN0YWNrIGZyYW1lcy4KICBmaW5hbCBNYXA8aW50LCBMaXN0PEZyYW1lRW50cnk+PiBmcmFtZXM7CgogIFNvdXJjZU1hcEJ1aWxkZXIoCiAgICAgIHRoaXMudmVyc2lvbiwKICAgICAgdGhpcy5zb3VyY2VNYXBVcmksCiAgICAgIHRoaXMudGFyZ2V0RmlsZVVyaSwKICAgICAgdGhpcy5sb2NhdGlvblByb3ZpZGVyLAogICAgICB0aGlzLm1pbmlmaWVkR2xvYmFsTmFtZXMsCiAgICAgIHRoaXMubWluaWZpZWRJbnN0YW5jZU5hbWVzLAogICAgICB0aGlzLmZyYW1lcyk7CgogIHZvaWQgYWRkTWFwcGluZyhpbnQgdGFyZ2V0T2Zmc2V0LCBTb3VyY2VMb2NhdGlvbiBzb3VyY2VMb2NhdGlvbikgewogICAgZW50cmllcy5hZGQobmV3IFNvdXJjZU1hcEVudHJ5KHNvdXJjZUxvY2F0aW9uLCB0YXJnZXRPZmZzZXQpKTsKICB9CgogIHZvaWQgcHJpbnRTdHJpbmdMaXN0T24oSXRlcmFibGU8U3RyaW5nPiBzdHJpbmdzLCBTdHJpbmdCdWZmZXIgYnVmZmVyKSB7CiAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgIGJ1ZmZlci53cml0ZSgnWycpOwogICAgZm9yIChTdHJpbmcgc3RyaW5nIGluIHN0cmluZ3MpIHsKICAgICAgaWYgKCFmaXJzdCkgYnVmZmVyLndyaXRlKCcsJyk7CiAgICAgIGJ1ZmZlci53cml0ZSgnIicpOwogICAgICB3cml0ZUpzb25Fc2NhcGVkQ2hhcnNPbihzdHJpbmcsIGJ1ZmZlcik7CiAgICAgIGJ1ZmZlci53cml0ZSgnIicpOwogICAgICBmaXJzdCA9IGZhbHNlOwogICAgfQogICAgYnVmZmVyLndyaXRlKCddJyk7CiAgfQoKICBTdHJpbmcgYnVpbGQoKSB7CiAgICBMaW5lQ29sdW1uTWFwPFNvdXJjZU1hcEVudHJ5PiBsaW5lQ29sdW1uTWFwID0KICAgICAgICBuZXcgTGluZUNvbHVtbk1hcDxTb3VyY2VNYXBFbnRyeT4oKTsKICAgIE1hcDxVcmksIExpbmVDb2x1bW5NYXA8U291cmNlTWFwRW50cnk+PiBzb3VyY2VMb2NhdGlvbk1hcCA9CiAgICAgICAgPFVyaSwgTGluZUNvbHVtbk1hcDxTb3VyY2VNYXBFbnRyeT4+e307CiAgICBlbnRyaWVzLmZvckVhY2goKFNvdXJjZU1hcEVudHJ5IHNvdXJjZU1hcEVudHJ5KSB7CiAgICAgIExvY2F0aW9uIGtlcm5lbExvY2F0aW9uID0KICAgICAgICAgIGxvY2F0aW9uUHJvdmlkZXIuZ2V0TG9jYXRpb24oc291cmNlTWFwRW50cnkudGFyZ2V0T2Zmc2V0KTsKICAgICAgaW50IGxpbmUgPSBrZXJuZWxMb2NhdGlvbi5saW5lIC0gMTsKICAgICAgaW50IGNvbHVtbiA9IGtlcm5lbExvY2F0aW9uLmNvbHVtbiAtIDE7CiAgICAgIGxpbmVDb2x1bW5NYXAuYWRkKGxpbmUsIGNvbHVtbiwgc291cmNlTWFwRW50cnkpOwoKICAgICAgU291cmNlTG9jYXRpb24gbG9jYXRpb24gPSBzb3VyY2VNYXBFbnRyeS5zb3VyY2VMb2NhdGlvbjsKICAgICAgaWYgKGxvY2F0aW9uICE9IG51bGwpIHsKICAgICAgICBpZiAobG9jYXRpb24uc291cmNlVXJpICE9IG51bGwpIHsKICAgICAgICAgIExpbmVDb2x1bW5NYXA8U291cmNlTWFwRW50cnk+IHNvdXJjZUxpbmVDb2x1bW5NYXAgPQogICAgICAgICAgICAgIHNvdXJjZUxvY2F0aW9uTWFwLnB1dElmQWJzZW50KGxvY2F0aW9uLnNvdXJjZVVyaSwKICAgICAgICAgICAgICAgICAgKCkgPT4gbmV3IExpbmVDb2x1bW5NYXA8U291cmNlTWFwRW50cnk+KCkpOwogICAgICAgICAgc291cmNlTGluZUNvbHVtbk1hcC5hZGQoCiAgICAgICAgICAgICAgbG9jYXRpb24ubGluZSAtIDEsIGxvY2F0aW9uLmNvbHVtbiAtIDEsIHNvdXJjZU1hcEVudHJ5KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwoKICAgIHJldHVybiBfYnVpbGQobGluZUNvbHVtbk1hcCk7CiAgfQoKICBTdHJpbmcgX2J1aWxkKExpbmVDb2x1bW5NYXA8U291cmNlTWFwRW50cnk+IGxpbmVDb2x1bW5NYXApIHsKICAgIEluZGV4TWFwPFVyaT4gdXJpTWFwID0gbmV3IEluZGV4TWFwPFVyaT4oKTsKICAgIEluZGV4TWFwPFN0cmluZz4gbmFtZU1hcCA9IG5ldyBJbmRleE1hcDxTdHJpbmc+KCk7CgogICAgdm9pZCByZWdpc3RlckxvY2F0aW9uKFNvdXJjZUxvY2F0aW9uIHNvdXJjZUxvY2F0aW9uKSB7CiAgICAgIGlmIChzb3VyY2VMb2NhdGlvbiAhPSBudWxsKSB7CiAgICAgICAgaWYgKHNvdXJjZUxvY2F0aW9uLnNvdXJjZVVyaSAhPSBudWxsKSB7CiAgICAgICAgICB1cmlNYXAucmVnaXN0ZXIoc291cmNlTG9jYXRpb24uc291cmNlVXJpKTsKICAgICAgICAgIGlmIChzb3VyY2VMb2NhdGlvbi5zb3VyY2VOYW1lICE9IG51bGwpIHsKICAgICAgICAgICAgbmFtZU1hcC5yZWdpc3Rlcihzb3VyY2VMb2NhdGlvbi5zb3VyY2VOYW1lKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBsaW5lQ29sdW1uTWFwLmZvckVhY2hFbGVtZW50KChTb3VyY2VNYXBFbnRyeSBlbnRyeSkgewogICAgICByZWdpc3RlckxvY2F0aW9uKGVudHJ5LnNvdXJjZUxvY2F0aW9uKTsKICAgIH0pOwoKICAgIG1pbmlmaWVkR2xvYmFsTmFtZXMudmFsdWVzLmZvckVhY2gobmFtZU1hcC5yZWdpc3Rlcik7CiAgICBtaW5pZmllZEluc3RhbmNlTmFtZXMudmFsdWVzLmZvckVhY2gobmFtZU1hcC5yZWdpc3Rlcik7CiAgICBmb3IgKExpc3Q8RnJhbWVFbnRyeT4gZW50cmllcyBpbiBmcmFtZXMudmFsdWVzKSB7CiAgICAgIGZvciAodmFyIGZyYW1lIGluIGVudHJpZXMpIHsKICAgICAgICByZWdpc3RlckxvY2F0aW9uKGZyYW1lLnB1c2hMb2NhdGlvbik7CiAgICAgICAgaWYgKGZyYW1lLmlubGluZWRNZXRob2ROYW1lICE9IG51bGwpIHsKICAgICAgICAgIG5hbWVNYXAucmVnaXN0ZXIoZnJhbWUuaW5saW5lZE1ldGhvZE5hbWUpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIFN0cmluZ0J1ZmZlciBtYXBwaW5nc0J1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHdyaXRlRW50cmllcyhsaW5lQ29sdW1uTWFwLCB1cmlNYXAsIG5hbWVNYXAsIG1hcHBpbmdzQnVmZmVyKTsKCiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgYnVmZmVyLndyaXRlKCd7XG4nKTsKICAgIGJ1ZmZlci53cml0ZSgnICAidmVyc2lvbiI6IDMsXG4nKTsKICAgIGJ1ZmZlci53cml0ZSgnICAiZW5naW5lIjogIiR2ZXJzaW9uIixcbicpOwogICAgaWYgKHNvdXJjZU1hcFVyaSAhPSBudWxsICYmIHRhcmdldEZpbGVVcmkgIT0gbnVsbCkgewogICAgICBidWZmZXIud3JpdGUoJyAgImZpbGUiOiAnCiAgICAgICAgICAnIiR7ZmUucmVsYXRpdml6ZVVyaShzb3VyY2VNYXBVcmksIHRhcmdldEZpbGVVcmksIGZhbHNlKX0iLFxuJyk7CiAgICB9CiAgICBidWZmZXIud3JpdGUoJyAgInNvdXJjZVJvb3QiOiAiIixcbicpOwogICAgYnVmZmVyLndyaXRlKCcgICJzb3VyY2VzIjogJyk7CiAgICBJdGVyYWJsZTxTdHJpbmc+IHJlbGF0aXZlU291cmNlVXJpTGlzdCA9IGNvbnN0IDxTdHJpbmc+W107CiAgICBpZiAoc291cmNlTWFwVXJpICE9IG51bGwpIHsKICAgICAgcmVsYXRpdmVTb3VyY2VVcmlMaXN0ID0KICAgICAgICAgIHVyaU1hcC5lbGVtZW50cy5tYXAoKHUpID0+IGZlLnJlbGF0aXZpemVVcmkoc291cmNlTWFwVXJpLCB1LCBmYWxzZSkpOwogICAgfQogICAgcHJpbnRTdHJpbmdMaXN0T24ocmVsYXRpdmVTb3VyY2VVcmlMaXN0LCBidWZmZXIpOwogICAgYnVmZmVyLndyaXRlKCcsXG4nKTsKICAgIGJ1ZmZlci53cml0ZSgnICAibmFtZXMiOiAnKTsKICAgIHByaW50U3RyaW5nTGlzdE9uKG5hbWVNYXAuZWxlbWVudHMsIGJ1ZmZlcik7CiAgICBidWZmZXIud3JpdGUoJyxcbicpOwogICAgYnVmZmVyLndyaXRlKCcgICJtYXBwaW5ncyI6ICInKTsKICAgIGJ1ZmZlci53cml0ZShtYXBwaW5nc0J1ZmZlcik7CiAgICBidWZmZXIud3JpdGUoJyIsXG4nKTsKICAgIGJ1ZmZlci53cml0ZSgnICAieF9vcmdfZGFydGxhbmdfZGFydDJqcyI6IHtcbicpOwogICAgYnVmZmVyLndyaXRlKCcgICAgIm1pbmlmaWVkX25hbWVzIjoge1xuJyk7CiAgICBidWZmZXIud3JpdGUoJyAgICAgICJnbG9iYWwiOiAnKTsKICAgIHdyaXRlTWluaWZpZWROYW1lcyhtaW5pZmllZEdsb2JhbE5hbWVzLCBuYW1lTWFwLCBidWZmZXIpOwogICAgYnVmZmVyLndyaXRlKCcsXG4nKTsKICAgIGJ1ZmZlci53cml0ZSgnICAgICAgImluc3RhbmNlIjogJyk7CiAgICB3cml0ZU1pbmlmaWVkTmFtZXMobWluaWZpZWRJbnN0YW5jZU5hbWVzLCBuYW1lTWFwLCBidWZmZXIpOwogICAgYnVmZmVyLndyaXRlKCdcbiAgICB9LFxuJyk7CiAgICBidWZmZXIud3JpdGUoJyAgICAiZnJhbWVzIjogJyk7CiAgICB3cml0ZUZyYW1lcyh1cmlNYXAsIG5hbWVNYXAsIGJ1ZmZlcik7CiAgICBidWZmZXIud3JpdGUoJ1xuICB9XG59XG4nKTsKICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIHZvaWQgd3JpdGVFbnRyaWVzKExpbmVDb2x1bW5NYXA8U291cmNlTWFwRW50cnk+IGVudHJpZXMsIEluZGV4TWFwPFVyaT4gdXJpTWFwLAogICAgICBJbmRleE1hcDxTdHJpbmc+IG5hbWVNYXAsIFN0cmluZ0J1ZmZlciBvdXRwdXQpIHsKICAgIFNvdXJjZUxvY2F0aW9uIHByZXZpb3VzU291cmNlTG9jYXRpb247CiAgICBpbnQgcHJldmlvdXNUYXJnZXRMaW5lID0gMDsKICAgIERlbHRhRW5jb2RlciB0YXJnZXRDb2x1bW5FbmNvZGVyID0gbmV3IERlbHRhRW5jb2RlcigpOwogICAgYm9vbCBmaXJzdEVudHJ5SW5MaW5lID0gdHJ1ZTsKICAgIERlbHRhRW5jb2RlciBzb3VyY2VVcmlJbmRleEVuY29kZXIgPSBuZXcgRGVsdGFFbmNvZGVyKCk7CiAgICBEZWx0YUVuY29kZXIgc291cmNlTGluZUVuY29kZXIgPSBuZXcgRGVsdGFFbmNvZGVyKCk7CiAgICBEZWx0YUVuY29kZXIgc291cmNlQ29sdW1uRW5jb2RlciA9IG5ldyBEZWx0YUVuY29kZXIoKTsKICAgIERlbHRhRW5jb2RlciBzb3VyY2VOYW1lSW5kZXhFbmNvZGVyID0gbmV3IERlbHRhRW5jb2RlcigpOwoKICAgIGVudHJpZXMuZm9yRWFjaCgoaW50IHRhcmdldExpbmUsIGludCB0YXJnZXRDb2x1bW4sIFNvdXJjZU1hcEVudHJ5IGVudHJ5KSB7CiAgICAgIFNvdXJjZUxvY2F0aW9uIHNvdXJjZUxvY2F0aW9uID0gZW50cnkuc291cmNlTG9jYXRpb247CiAgICAgIGlmIChzb3VyY2VMb2NhdGlvbiA9PSBwcmV2aW91c1NvdXJjZUxvY2F0aW9uKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBpZiAodGFyZ2V0TGluZSA+IHByZXZpb3VzVGFyZ2V0TGluZSkgewogICAgICAgIGZvciAoaW50IGkgPSBwcmV2aW91c1RhcmdldExpbmU7IGkgPCB0YXJnZXRMaW5lOyArK2kpIHsKICAgICAgICAgIG91dHB1dC53cml0ZSgnOycpOwogICAgICAgIH0KICAgICAgICBwcmV2aW91c1RhcmdldExpbmUgPSB0YXJnZXRMaW5lOwogICAgICAgIHByZXZpb3VzU291cmNlTG9jYXRpb24gPSBudWxsOwogICAgICAgIHRhcmdldENvbHVtbkVuY29kZXIucmVzZXQoKTsKICAgICAgICBmaXJzdEVudHJ5SW5MaW5lID0gdHJ1ZTsKICAgICAgfQoKICAgICAgaWYgKCFmaXJzdEVudHJ5SW5MaW5lKSB7CiAgICAgICAgb3V0cHV0LndyaXRlKCcsJyk7CiAgICAgIH0KICAgICAgZmlyc3RFbnRyeUluTGluZSA9IGZhbHNlOwoKICAgICAgdGFyZ2V0Q29sdW1uRW5jb2Rlci5lbmNvZGUob3V0cHV0LCB0YXJnZXRDb2x1bW4pOwoKICAgICAgaWYgKHNvdXJjZUxvY2F0aW9uID09IG51bGwpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIFVyaSBzb3VyY2VVcmkgPSBzb3VyY2VMb2NhdGlvbi5zb3VyY2VVcmk7CiAgICAgIGlmIChzb3VyY2VVcmkgIT0gbnVsbCkgewogICAgICAgIHNvdXJjZVVyaUluZGV4RW5jb2Rlci5lbmNvZGUob3V0cHV0LCB1cmlNYXBbc291cmNlVXJpXSk7CiAgICAgICAgc291cmNlTGluZUVuY29kZXIuZW5jb2RlKG91dHB1dCwgc291cmNlTG9jYXRpb24ubGluZSAtIDEpOwogICAgICAgIHNvdXJjZUNvbHVtbkVuY29kZXIuZW5jb2RlKG91dHB1dCwgc291cmNlTG9jYXRpb24uY29sdW1uIC0gMSk7CiAgICAgIH0KCiAgICAgIFN0cmluZyBzb3VyY2VOYW1lID0gc291cmNlTG9jYXRpb24uc291cmNlTmFtZTsKICAgICAgaWYgKHNvdXJjZU5hbWUgIT0gbnVsbCkgewogICAgICAgIHNvdXJjZU5hbWVJbmRleEVuY29kZXIuZW5jb2RlKG91dHB1dCwgbmFtZU1hcFtzb3VyY2VOYW1lXSk7CiAgICAgIH0KCiAgICAgIHByZXZpb3VzU291cmNlTG9jYXRpb24gPSBzb3VyY2VMb2NhdGlvbjsKICAgIH0pOwogIH0KCiAgdm9pZCB3cml0ZU1pbmlmaWVkTmFtZXMoTWFwPFN0cmluZywgU3RyaW5nPiBtaW5pZmllZE5hbWVzLAogICAgICBJbmRleE1hcDxTdHJpbmc+IG5hbWVNYXAsIFN0cmluZ0J1ZmZlciBidWZmZXIpIHsKICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgYnVmZmVyLndyaXRlKCciJyk7CiAgICBtaW5pZmllZE5hbWVzLmZvckVhY2goKFN0cmluZyBtaW5pZmllZE5hbWUsIFN0cmluZyBuYW1lKSB7CiAgICAgIGlmICghZmlyc3QpIGJ1ZmZlci53cml0ZSgnLCcpOwogICAgICAvLyBtaW5pZmllZE5hbWVzIGFyZSB2YWxpZCBKUyBpZGVudGlmaWVycyBzbyB0aGV5IGRvbid0IG5lZWQgdG8gYmUgZXNjYXBlZAogICAgICBidWZmZXIud3JpdGUobWluaWZpZWROYW1lKTsKICAgICAgYnVmZmVyLndyaXRlKCcsJyk7CiAgICAgIGJ1ZmZlci53cml0ZShuYW1lTWFwW25hbWVdKTsKICAgICAgZmlyc3QgPSBmYWxzZTsKICAgIH0pOwogICAgYnVmZmVyLndyaXRlKCciJyk7CiAgfQoKICB2b2lkIHdyaXRlRnJhbWVzKAogICAgICBJbmRleE1hcDxVcmk+IHVyaU1hcCwgSW5kZXhNYXA8U3RyaW5nPiBuYW1lTWFwLCBTdHJpbmdCdWZmZXIgYnVmZmVyKSB7CiAgICB2YXIgb2Zmc2V0RW5jb2RlciA9IERlbHRhRW5jb2RlcigpOwogICAgdmFyIHVyaUVuY29kZXIgPSBEZWx0YUVuY29kZXIoKTsKICAgIHZhciBsaW5lRW5jb2RlciA9IERlbHRhRW5jb2RlcigpOwogICAgdmFyIGNvbHVtbkVuY29kZXIgPSBEZWx0YUVuY29kZXIoKTsKICAgIHZhciBuYW1lRW5jb2RlciA9IERlbHRhRW5jb2RlcigpOwogICAgYnVmZmVyLndyaXRlKCciJyk7CiAgICBmcmFtZXMuZm9yRWFjaCgoaW50IG9mZnNldCwgTGlzdDxGcmFtZUVudHJ5PiBlbnRyaWVzKSB7CiAgICAgIGZvciAodmFyIGVudHJ5IGluIGVudHJpZXMpIHsKICAgICAgICBvZmZzZXRFbmNvZGVyLmVuY29kZShidWZmZXIsIG9mZnNldCk7CiAgICAgICAgaWYgKGVudHJ5LmlzUHVzaCkgewogICAgICAgICAgU291cmNlTG9jYXRpb24gbG9jYXRpb24gPSBlbnRyeS5wdXNoTG9jYXRpb247CiAgICAgICAgICB1cmlFbmNvZGVyLmVuY29kZShidWZmZXIsIHVyaU1hcFtsb2NhdGlvbi5zb3VyY2VVcmldKTsKICAgICAgICAgIGxpbmVFbmNvZGVyLmVuY29kZShidWZmZXIsIGxvY2F0aW9uLmxpbmUgLSAxKTsKICAgICAgICAgIGNvbHVtbkVuY29kZXIuZW5jb2RlKGJ1ZmZlciwgbG9jYXRpb24uY29sdW1uIC0gMSk7CiAgICAgICAgICBuYW1lRW5jb2Rlci5lbmNvZGUoYnVmZmVyLCBuYW1lTWFwW2VudHJ5LmlubGluZWRNZXRob2ROYW1lXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIDsgYW5kICwgYXJlIG5vdCB1c2VkIGJ5IFZMUSBzbyB3ZSBjYW4gZGlzdGluZ3Vpc2ggdGhlbSBpbiB0aGUKICAgICAgICAgIC8vIGVuY29kaW5nLCB0aGlzIGlzIHRoZSBzYW1lIHJlYXNvbiB0aGV5IGFyZSB1c2VkIGluIHRoZSBtYXBwaW5ncwogICAgICAgICAgLy8gZmllbGQuCiAgICAgICAgICBidWZmZXIud3JpdGUoZW50cnkuaXNFbXB0eVBvcCA/ICI7IiA6ICIsIik7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIGJ1ZmZlci53cml0ZSgnIicpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIHNvdXJjZSBtYXAgdGFnIHRvIHB1dCBhdCB0aGUgZW5kIGEgLmpzIGZpbGUgaW4gW2ZpbGVVcmldIHRvCiAgLy8vIG1ha2UgaXQgcG9pbnQgdG8gdGhlIHNvdXJjZSBtYXAgZmlsZSBpbiBbc291cmNlTWFwVXJpXS4KICBzdGF0aWMgU3RyaW5nIGdlbmVyYXRlU291cmNlTWFwVGFnKFVyaSBzb3VyY2VNYXBVcmksIFVyaSBmaWxlVXJpKSB7CiAgICBpZiAoc291cmNlTWFwVXJpICE9IG51bGwgJiYgZmlsZVVyaSAhPSBudWxsKSB7CiAgICAgIFN0cmluZyBzb3VyY2VNYXBGaWxlTmFtZSA9IGZlLnJlbGF0aXZpemVVcmkoZmlsZVVyaSwgc291cmNlTWFwVXJpLCBmYWxzZSk7CiAgICAgIHJldHVybiAnJycKCi8vIyBzb3VyY2VNYXBwaW5nVVJMPSRzb3VyY2VNYXBGaWxlTmFtZQonJyc7CiAgICB9CiAgICByZXR1cm4gJyc7CiAgfQoKICAvLy8gR2VuZXJhdGVzIHNvdXJjZSBtYXAgZmlsZXMgZm9yIGFsbCBbU291cmNlTG9jYXRpb25zXSBpbgogIC8vLyBbc291cmNlTG9jYXRpb25zUHJvdmlkZXJdIGZvciB0aGUgLmpzIGNvZGUgaW4gW2xvY2F0aW9uUHJvdmlkZXJdCiAgLy8vIFtzb3VyY2VNYXBVcmldIGlzIHVzZWQgdG8gcmVsYXRpdml6ZXMgdGhlIFVSSXMgb2YgdGhlIHJlZmVyZW5jZWQgc291cmNlCiAgLy8vIGZpbGVzIGFuZCB0aGUgdGFyZ2V0IFtmaWxlVXJpXS4gW25hbWVdIGFuZCBbb3V0cHV0UHJvdmlkZXJdIGFyZSB1c2VkIHRvCiAgLy8vIGNyZWF0ZSB0aGUgW091dHB1dFNpbmtdIGZvciB0aGUgc291cmNlIG1hcCB0ZXh0LgogIHN0YXRpYyB2b2lkIG91dHB1dFNvdXJjZU1hcCgKICAgICAgU291cmNlTG9jYXRpb25zUHJvdmlkZXIgc291cmNlTG9jYXRpb25zUHJvdmlkZXIsCiAgICAgIExvY2F0aW9uUHJvdmlkZXIgbG9jYXRpb25Qcm92aWRlciwKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBtaW5pZmllZEdsb2JhbE5hbWVzLAogICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IG1pbmlmaWVkSW5zdGFuY2VOYW1lcywKICAgICAgU3RyaW5nIG5hbWUsCiAgICAgIFVyaSBzb3VyY2VNYXBVcmksCiAgICAgIFVyaSBmaWxlVXJpLAogICAgICBDb21waWxlck91dHB1dCBjb21waWxlck91dHB1dCkgewogICAgLy8gQ3JlYXRlIGEgc291cmNlIGZpbGUgZm9yIHRoZSBjb21waWxhdGlvbiBvdXRwdXQuIFRoaXMgYWxsb3dzIHVzaW5nCiAgICAvLyBbOmdldExpbmU6XSB0byB0cmFuc2Zvcm0gb2Zmc2V0cyB0byBsaW5lIG51bWJlcnMgaW4gW1NvdXJjZU1hcEJ1aWxkZXJdLgogICAgaW50IGluZGV4ID0gMDsKICAgIHNvdXJjZUxvY2F0aW9uc1Byb3ZpZGVyLnNvdXJjZUxvY2F0aW9ucwogICAgICAgIC5mb3JFYWNoKChTb3VyY2VMb2NhdGlvbnMgc291cmNlTG9jYXRpb25zKSB7CiAgICAgIFNvdXJjZU1hcEJ1aWxkZXIgc291cmNlTWFwQnVpbGRlciA9IG5ldyBTb3VyY2VNYXBCdWlsZGVyKAogICAgICAgICAgc291cmNlTG9jYXRpb25zLm5hbWUsCiAgICAgICAgICBzb3VyY2VNYXBVcmksCiAgICAgICAgICBmaWxlVXJpLAogICAgICAgICAgbG9jYXRpb25Qcm92aWRlciwKICAgICAgICAgIG1pbmlmaWVkR2xvYmFsTmFtZXMsCiAgICAgICAgICBtaW5pZmllZEluc3RhbmNlTmFtZXMsCiAgICAgICAgICBzb3VyY2VMb2NhdGlvbnMuZnJhbWVNYXJrZXJzKTsKICAgICAgc291cmNlTG9jYXRpb25zLmZvckVhY2hTb3VyY2VMb2NhdGlvbihzb3VyY2VNYXBCdWlsZGVyLmFkZE1hcHBpbmcpOwogICAgICBTdHJpbmcgc291cmNlTWFwID0gc291cmNlTWFwQnVpbGRlci5idWlsZCgpOwogICAgICBTdHJpbmcgZXh0ZW5zaW9uID0gJ2pzLm1hcCc7CiAgICAgIGlmIChpbmRleCA+IDApIHsKICAgICAgICBpZiAobmFtZSA9PSAnJykgewogICAgICAgICAgbmFtZSA9IGZpbGVVcmkgIT0gbnVsbCA/IGZpbGVVcmkucGF0aFNlZ21lbnRzLmxhc3QgOiAnb3V0LmpzJzsKICAgICAgICAgIGV4dGVuc2lvbiA9ICdtYXAuJHtzb3VyY2VMb2NhdGlvbnMubmFtZX0nOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBleHRlbnNpb24gPSAnanMubWFwLiR7c291cmNlTG9jYXRpb25zLm5hbWV9JzsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29tcGlsZXJPdXRwdXQuY3JlYXRlT3V0cHV0U2luayhuYW1lLCBleHRlbnNpb24sIE91dHB1dFR5cGUuc291cmNlTWFwKQogICAgICAgIC4uYWRkKHNvdXJjZU1hcCkKICAgICAgICAuLmNsb3NlKCk7CiAgICAgIGluZGV4Kys7CiAgICB9KTsKICB9Cn0KCi8vLyBFbmNvZGVyIGZvciB2YWx1ZSBkZWx0YXMgaW4gVkxRIGZvcm1hdC4KY2xhc3MgRGVsdGFFbmNvZGVyIHsKICAvLy8gVGhlIGxhc3QgZW1pdHRlZCB2YWx1ZSBvZiB0aGUgZW5jb2Rlci4KICBpbnQgX3ZhbHVlID0gMDsKCiAgLy8vIFJlc2V0IHRoZSBlbmNvZGVyIHRvIGl0cyBpbml0aWFsIHN0YXRlLgogIHZvaWQgcmVzZXQoKSB7CiAgICBfdmFsdWUgPSAwOwogIH0KCiAgLy8vIFdyaXRlcyB0aGUgVkxRIG9mIGRlbHRhIGJldHdlZW4gW3ZhbHVlXSBhbmQgdGhlIGxhc3QgZW1pdHRlZCB2YWx1ZSBpbnRvCiAgLy8vIFtvdXRwdXRdIGFuZCB1cGRhdGVzIHRoZSBsYXN0IGVtaXR0ZWQgdmFsdWUgb2YgdGhlIGVuY29kZXIuCiAgdm9pZCBlbmNvZGUoU3RyaW5nQnVmZmVyIG91dHB1dCwgaW50IHZhbHVlKSB7CiAgICBfdmFsdWUgPSBlbmNvZGVWTFEob3V0cHV0LCB2YWx1ZSwgX3ZhbHVlKTsKICB9CgogIHN0YXRpYyBjb25zdCBpbnQgVkxRX0JBU0VfU0hJRlQgPSA1OwogIHN0YXRpYyBjb25zdCBpbnQgVkxRX0JBU0VfTUFTSyA9ICgxIDw8IDUpIC0gMTsKICBzdGF0aWMgY29uc3QgaW50IFZMUV9DT05USU5VQVRJT05fQklUID0gMSA8PCA1OwogIHN0YXRpYyBjb25zdCBpbnQgVkxRX0NPTlRJTlVBVElPTl9NQVNLID0gMSA8PCA1OwogIHN0YXRpYyBjb25zdCBTdHJpbmcgQkFTRTY0X0RJR0lUUyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1uJwogICAgICAnb3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJzsKCiAgLy8vIFdyaXRlcyB0aGUgVkxRIG9mIGRlbHRhIGJldHdlZW4gW3ZhbHVlXSBhbmQgW29mZnNldF0gaW50byBbb3V0cHV0XSBhbmQKICAvLy8gcmV0dXJuIFt2YWx1ZV0uCiAgc3RhdGljIGludCBlbmNvZGVWTFEoU3RyaW5nQnVmZmVyIG91dHB1dCwgaW50IHZhbHVlLCBpbnQgb2Zmc2V0KSB7CiAgICBpbnQgZGVsdGEgPSB2YWx1ZSAtIG9mZnNldDsKICAgIGludCBzaWduQml0ID0gMDsKICAgIGlmIChkZWx0YSA8IDApIHsKICAgICAgc2lnbkJpdCA9IDE7CiAgICAgIGRlbHRhID0gLWRlbHRhOwogICAgfQogICAgZGVsdGEgPSAoZGVsdGEgPDwgMSkgfCBzaWduQml0OwogICAgZG8gewogICAgICBpbnQgZGlnaXQgPSBkZWx0YSAmIFZMUV9CQVNFX01BU0s7CiAgICAgIGRlbHRhID4+PSBWTFFfQkFTRV9TSElGVDsKICAgICAgaWYgKGRlbHRhID4gMCkgewogICAgICAgIGRpZ2l0IHw9IFZMUV9DT05USU5VQVRJT05fQklUOwogICAgICB9CiAgICAgIG91dHB1dC53cml0ZShCQVNFNjRfRElHSVRTW2RpZ2l0XSk7CiAgICB9IHdoaWxlIChkZWx0YSA+IDApOwogICAgcmV0dXJuIHZhbHVlOwogIH0KfQoKY2xhc3MgU291cmNlTWFwRW50cnkgewogIFNvdXJjZUxvY2F0aW9uIHNvdXJjZUxvY2F0aW9uOwogIGludCB0YXJnZXRPZmZzZXQ7CgogIFNvdXJjZU1hcEVudHJ5KHRoaXMuc291cmNlTG9jYXRpb24sIHRoaXMudGFyZ2V0T2Zmc2V0KTsKfQoKLy8vIE1hcCBmcm9tIGxpbmUvY29sdW1uIHBhaXJzIHRvIGxpc3RzIG9mIFtUXSBlbGVtZW50cy4KY2xhc3MgTGluZUNvbHVtbk1hcDxUPiB7CiAgTWFwPGludCwgTWFwPGludCwgTGlzdDxUPj4+IF9tYXAgPSA8aW50LCBNYXA8aW50LCBMaXN0PFQ+Pj57fTsKCiAgLy8vIFJldHVybnMgdGhlIGxpc3Qgb2YgZWxlbWVudHMgYXNzb2NpYXRlZCB3aXRoIChbbGluZV0sW2NvbHVtbl0pLgogIExpc3Q8VD4gX2dldExpc3QoaW50IGxpbmUsIGludCBjb2x1bW4pIHsKICAgIE1hcDxpbnQsIExpc3Q8VD4+IGxpbmVNYXAgPSBfbWFwW2xpbmVdID8/PSA8aW50LCBMaXN0PFQ+Pnt9OwogICAgcmV0dXJuIGxpbmVNYXBbY29sdW1uXSA/Pz0gPFQ+W107CiAgfQoKICAvLy8gQWRkcyBbZWxlbWVudF0gdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCBvZiBlbGVtZW50cyBhc3NvY2lhdGVkIHdpdGgKICAvLy8gKFtsaW5lXSxbY29sdW1uXSkuCiAgdm9pZCBhZGQoaW50IGxpbmUsIGludCBjb2x1bW4sIFQgZWxlbWVudCkgewogICAgX2dldExpc3QobGluZSwgY29sdW1uKS5hZGQoZWxlbWVudCk7CiAgfQoKICAvLy8gQWRkcyBbZWxlbWVudF0gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdCBvZiBlbGVtZW50cyBhc3NvY2lhdGVkIHdpdGgKICAvLy8gKFtsaW5lXSxbY29sdW1uXSkuCiAgdm9pZCBhZGRGaXJzdChpbnQgbGluZSwgaW50IGNvbHVtbiwgVCBlbGVtZW50KSB7CiAgICBfZ2V0TGlzdChsaW5lLCBjb2x1bW4pLmluc2VydCgwLCBlbGVtZW50KTsKICB9CgogIC8vLyBDYWxscyBbZl0gd2l0aCB0aGUgbGluZSBudW1iZXIgZm9yIGVhY2ggbGluZSB3aXRoIGFzc29jaWF0ZWQgZWxlbWVudHMuCiAgLy8vCiAgLy8vIFtmXSBpcyBjYWxsZWQgaW4gaW5jcmVhc2luZyBsaW5lIG9yZGVyLgogIHZvaWQgZm9yRWFjaExpbmUoZihpbnQgbGluZSkpIHsKICAgIExpc3Q8aW50PiBsaW5lcyA9IF9tYXAua2V5cy50b0xpc3QoKS4uc29ydCgpOwogICAgbGluZXMuZm9yRWFjaChmKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBlbGVtZW50cyBmb3IgdGhlIGZpcnN0IHRoZSBjb2x1bW4gaW4gW2xpbmVdIHRoYXQgaGFzCiAgLy8vIGFzc29jaWF0ZWQgZWxlbWVudHMuCiAgTGlzdDxUPiBnZXRGaXJzdEVsZW1lbnRzSW5MaW5lKGludCBsaW5lKSB7CiAgICBNYXA8aW50LCBMaXN0PFQ+PiBsaW5lTWFwID0gX21hcFtsaW5lXTsKICAgIGlmIChsaW5lTWFwID09IG51bGwpIHJldHVybiBudWxsOwogICAgTGlzdDxpbnQ+IGNvbHVtbnMgPSBsaW5lTWFwLmtleXMudG9MaXN0KCkuLnNvcnQoKTsKICAgIHJldHVybiBsaW5lTWFwW2NvbHVtbnMuZmlyc3RdOwogIH0KCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBjb2x1bW4gd2l0aCBhc3NvY2lhdGVkIGVsZW1lbnRzIGluIFtsaW5lXS4KICAvLy8KICAvLy8gW2ZdIGlzIGNhbGxlZCBpbiBpbmNyZWFzaW5nIGNvbHVtbiBvcmRlci4KICB2b2lkIGZvckVhY2hDb2x1bW4oaW50IGxpbmUsIGYoaW50IGNvbHVtbiwgTGlzdDxUPiBlbGVtZW50cykpIHsKICAgIE1hcDxpbnQsIExpc3Q8VD4+IGxpbmVNYXAgPSBfbWFwW2xpbmVdOwogICAgaWYgKGxpbmVNYXAgIT0gbnVsbCkgewogICAgICBMaXN0PGludD4gY29sdW1ucyA9IGxpbmVNYXAua2V5cy50b0xpc3QoKS4uc29ydCgpOwogICAgICBjb2x1bW5zLmZvckVhY2goKGludCBjb2x1bW4pIHsKICAgICAgICBmKGNvbHVtbiwgbGluZU1hcFtjb2x1bW5dKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIGxpbmUvY29sdW1uL2VsZW1lbnQgdHJpcGxldCBpbiB0aGUgbWFwLgogIC8vLwogIC8vLyBbZl0gaXMgY2FsbGVkIGluIGluY3JlYXNpbmcgbGluZSwgY29sdW1uLCBlbGVtZW50IG9yZGVyLgogIHZvaWQgZm9yRWFjaChmKGludCBsaW5lLCBpbnQgY29sdW1uLCBUIGVsZW1lbnQpKSB7CiAgICBMaXN0PGludD4gbGluZXMgPSBfbWFwLmtleXMudG9MaXN0KCkuLnNvcnQoKTsKICAgIGZvciAoaW50IGxpbmUgaW4gbGluZXMpIHsKICAgICAgTWFwPGludCwgTGlzdDxUPj4gbGluZU1hcCA9IF9tYXBbbGluZV07CiAgICAgIExpc3Q8aW50PiBjb2x1bW5zID0gbGluZU1hcC5rZXlzLnRvTGlzdCgpLi5zb3J0KCk7CiAgICAgIGZvciAoaW50IGNvbHVtbiBpbiBjb2x1bW5zKSB7CiAgICAgICAgbGluZU1hcFtjb2x1bW5dLmZvckVhY2goKGUpID0+IGYobGluZSwgY29sdW1uLCBlKSk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBDYWxscyBbZl0gZm9yIGVhY2ggZWxlbWVudCBhc3NvY2lhdGVkIGluIHRoZSBtYXAuCiAgLy8vCiAgLy8vIFtmXSBpcyBjYWxsZWQgaW4gaW5jcmVhc2luZyBsaW5lLCBjb2x1bW4sIGVsZW1lbnQgb3JkZXIuCiAgdm9pZCBmb3JFYWNoRWxlbWVudChmKFQgZWxlbWVudCkpIHsKICAgIGZvckVhY2goKGxpbmUsIGNvbHVtbiwgZWxlbWVudCkgPT4gZihlbGVtZW50KSk7CiAgfQp9CgovLy8gTWFwIGZyb20gW1RdIGVsZW1lbnRzIHRvIGFzc2lnbmVkIGluZGljZXMuCmNsYXNzIEluZGV4TWFwPFQ+IHsKICBNYXA8VCwgaW50PiBtYXAgPSA8VCwgaW50Pnt9OwoKICAvLy8gUmVnaXN0ZXIgW2VsZW1lbnRdIGFuZCByZXR1cm5zIGl0cyBpbmRleC4KICBpbnQgcmVnaXN0ZXIoVCBlbGVtZW50KSB7CiAgICByZXR1cm4gbWFwLnB1dElmQWJzZW50KGVsZW1lbnQsICgpID0+IG1hcC5sZW5ndGgpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGluZGV4IG9mIFtlbGVtZW50XS4KICBpbnQgb3BlcmF0b3IgW10oVCBlbGVtZW50KSA9PiBtYXBbZWxlbWVudF07CgogIC8vLyBSZXR1cm5zIHRoZSBpbmRleGVkIGVsZW1lbnRzLgogIEl0ZXJhYmxlPFQ+IGdldCBlbGVtZW50cyA9PiBtYXAua2V5czsKfQqBxwBOTjwBJAFAME4cIUlCARkYASYaASsbAStDAUYxMwE6KwEUFBkaHSAiFAFFQwQBShcXJSUZLxkVBhcEARMyLUAwNiBFKi43AT8eKj5APiNHCggIASIEAT8wNwE7JDA1MzkMCggGATouCAE6PDYjLi81CggGATZCAS4ZJy85IEsGKyM/IB5QBjYZITEZJSIaNS8mPhkoQCAkKiAeBAFRNysgOyI9OTs+AU88NhAIAS1AHQopJyUhCAEfGwggATgBJBAIATAfQUNHCAE1IEQIAS8IBAE9NxcXPyVRIhkjFQgXBAEUTSglJigmFzwjLhw4QTk9SBFLTRQ2CggIFwQBTj5GM1ERASgFBg8EAT5HTk43HzcpLzETGBMnSk8TLDVAIBgTHB8hKUozIxcaSTUROAoITRkTDwgEAgEsFS0SAS4REAQBTkIwLwQBJzEyM1EiAU0WRSAVFRMWBiQJKSAXJwgqGRIEAgEXIRQBOgIBORlBAUYrQSYEAUgZLikEAU4ZMy8EAU0GLiIyFgQBRxstLCY3IwQBRAYwQiwbOSUkCgYEAUEGPzUyHi45JDwIBgQBOAY/JjQEAgEvFCABMBw3BAEmLgEkKAIBL3BhY2thZ2U6Y29tcGlsZXIvc3JjL2lvL3NvdXJjZV9tYXBfYnVpbGRlci5kYXJ0OHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2JhY2tlbmQvanNfYmFja2VuZC5kYXJ0ga0vLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBqc19iYWNrZW5kOwoKZXhwb3J0ICdiYWNrZW5kLmRhcnQnOwpleHBvcnQgJ2NoZWNrZWRfbW9kZV9oZWxwZXJzLmRhcnQnOwpleHBvcnQgJ2NvbnN0YW50X2VtaXR0ZXIuZGFydCc7CmV4cG9ydCAnY3VzdG9tX2VsZW1lbnRzX2FuYWx5c2lzLmRhcnQnOwpleHBvcnQgJ25hbWVyLmRhcnQnOwpleHBvcnQgJ25vX3N1Y2hfbWV0aG9kX3JlZ2lzdHJ5LmRhcnQnOwoOAE5OPAEUARckICgVJwEvcGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9qc19iYWNrZW5kLmRhcnQ/c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfZW1pdHRlci9jb25zdGFudF9vcmRlcmluZy5kYXJ0o+0vLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmpzX2VtaXR0ZXIuY29uc3RhbnRfb3JkZXJpbmc7CgppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCcKICAgIHNob3cgQ2xhc3NFbnRpdHksIEZpZWxkRW50aXR5LCBNZW1iZXJFbnRpdHksIFR5cGVkZWZFbnRpdHk7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnc29ydGVyLmRhcnQnIHNob3cgU29ydGVyOwoKLy8vIEEgY2Fub25pY2FsIGJ1dCBhcmJpdHJhcnkgb3JkZXJpbmcgb2YgY29uc3RhbnRzLiBUaGUgb3JkZXJpbmcgaXMgJ3N0YWJsZScKLy8vIHVuZGVyIHBlcnR1cmJhdGlvbiBvZiB0aGUgc291cmNlLgphYnN0cmFjdCBjbGFzcyBDb25zdGFudE9yZGVyaW5nIHsKICBmYWN0b3J5IENvbnN0YW50T3JkZXJpbmcoU29ydGVyIHNvcnRlcikgPSBfQ29uc3RhbnRPcmRlcmluZzsKCiAgaW50IGNvbXBhcmUoQ29uc3RhbnRWYWx1ZSBhLCBDb25zdGFudFZhbHVlIGIpOwp9CgpjbGFzcyBfQ29uc3RhbnRPcmRlcmluZwogICAgaW1wbGVtZW50cyBDb25zdGFudE9yZGVyaW5nLCBDb25zdGFudFZhbHVlVmlzaXRvcjxpbnQsIENvbnN0YW50VmFsdWU+IHsKICBmaW5hbCBTb3J0ZXIgX3NvcnRlcjsKICBfRGFydFR5cGVPcmRlcmluZyBfZGFydFR5cGVPcmRlcmluZzsKICBfQ29uc3RhbnRPcmRlcmluZyh0aGlzLl9zb3J0ZXIpIHsKICAgIF9kYXJ0VHlwZU9yZGVyaW5nID0gbmV3IF9EYXJ0VHlwZU9yZGVyaW5nKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGNvbXBhcmUoQ29uc3RhbnRWYWx1ZSBhLCBDb25zdGFudFZhbHVlIGIpID0+IGNvbXBhcmVWYWx1ZXMoYSwgYik7CgogIGludCBjb21wYXJlVmFsdWVzKENvbnN0YW50VmFsdWUgYSwgQ29uc3RhbnRWYWx1ZSBiKSB7CiAgICBpZiAoaWRlbnRpY2FsKGEsIGIpKSByZXR1cm4gMDsKICAgIGludCByID0gYS5raW5kLmluZGV4LmNvbXBhcmVUbyhiLmtpbmQuaW5kZXgpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CiAgICByZXR1cm4gYS5hY2NlcHQodGhpcywgYik7CiAgfQoKICBzdGF0aWMgaW50IGNvbXBhcmVOdWxsYWJsZTxUPihpbnQgY29tcGFyZShUIGEsIFQgYiksIFQgYSwgVCBiKSB7CiAgICBpZiAoYSA9PSBudWxsICYmIGIgPT0gbnVsbCkgcmV0dXJuIDA7CiAgICBpZiAoYSA9PSBudWxsKSByZXR1cm4gLTE7CiAgICBpZiAoYiA9PSBudWxsKSByZXR1cm4gMTsKICAgIHJldHVybiBjb21wYXJlKGEsIGIpOwogIH0KCiAgc3RhdGljIGludCBjb21wYXJlTGlzdHM8UywgVD4oaW50IGNvbXBhcmUoUyBhLCBUIGIpLCBMaXN0PFM+IGEsIExpc3Q8VD4gYikgewogICAgaW50IHIgPSBhLmxlbmd0aC5jb21wYXJlVG8oYi5sZW5ndGgpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsKICAgICAgciA9IGNvbXBhcmUoYVtpXSwgYltpXSk7CiAgICAgIGlmIChyICE9IDApIHJldHVybiByOwogICAgfQogICAgcmV0dXJuIDA7CiAgfQoKICBpbnQgY29tcGFyZUNsYXNzZXMoQ2xhc3NFbnRpdHkgYSwgQ2xhc3NFbnRpdHkgYikgewogICAgaW50IHIgPSBhLm5hbWUuY29tcGFyZVRvKGIubmFtZSk7CiAgICBpZiAociAhPSAwKSByZXR1cm4gcjsKICAgIHJldHVybiBfc29ydGVyLmNvbXBhcmVDbGFzc2VzQnlMb2NhdGlvbihhLCBiKTsKICB9CgogIGludCBjb21wYXJlTWVtYmVycyhNZW1iZXJFbnRpdHkgYSwgTWVtYmVyRW50aXR5IGIpIHsKICAgIGludCByID0gYS5uYW1lLmNvbXBhcmVUbyhiLm5hbWUpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CiAgICByZXR1cm4gX3NvcnRlci5jb21wYXJlTWVtYmVyc0J5TG9jYXRpb24oYSwgYik7CiAgfQoKICBpbnQgY29tcGFyZVR5cGVkZWZzKFR5cGVkZWZFbnRpdHkgYSwgVHlwZWRlZkVudGl0eSBiKSB7CiAgICBpbnQgciA9IGEubmFtZS5jb21wYXJlVG8oYi5uYW1lKTsKICAgIGlmIChyICE9IDApIHJldHVybiByOwogICAgcmV0dXJuIF9zb3J0ZXIuY29tcGFyZVR5cGVkZWZzQnlMb2NhdGlvbihhLCBiKTsKICB9CgogIGludCBjb21wYXJlRGFydFR5cGVzKERhcnRUeXBlIGEsIERhcnRUeXBlIGIpIHsKICAgIHJldHVybiBfZGFydFR5cGVPcmRlcmluZy5jb21wYXJlKGEsIGIpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0RnVuY3Rpb24oRnVuY3Rpb25Db25zdGFudFZhbHVlIGEsIEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZSBiKSB7CiAgICByZXR1cm4gY29tcGFyZU1lbWJlcnMoYS5lbGVtZW50LCBiLmVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0TnVsbChOdWxsQ29uc3RhbnRWYWx1ZSBhLCBOdWxsQ29uc3RhbnRWYWx1ZSBiKSB7CiAgICByZXR1cm4gMDsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdE5vbkNvbnN0YW50KE5vbkNvbnN0YW50VmFsdWUgYSwgTm9uQ29uc3RhbnRWYWx1ZSBiKSB7CiAgICByZXR1cm4gMDsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdEludChJbnRDb25zdGFudFZhbHVlIGEsIEludENvbnN0YW50VmFsdWUgYikgewogICAgcmV0dXJuIGEuaW50VmFsdWUuY29tcGFyZVRvKGIuaW50VmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0RG91YmxlKERvdWJsZUNvbnN0YW50VmFsdWUgYSwgRG91YmxlQ29uc3RhbnRWYWx1ZSBiKSB7CiAgICByZXR1cm4gYS5kb3VibGVWYWx1ZS5jb21wYXJlVG8oYi5kb3VibGVWYWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRCb29sKEJvb2xDb25zdGFudFZhbHVlIGEsIEJvb2xDb25zdGFudFZhbHVlIGIpIHsKICAgIGludCBhSW50ID0gYS5ib29sVmFsdWUgPyAxIDogMDsKICAgIGludCBiSW50ID0gYi5ib29sVmFsdWUgPyAxIDogMDsKICAgIHJldHVybiBhSW50LmNvbXBhcmVUbyhiSW50KTsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdFN0cmluZyhTdHJpbmdDb25zdGFudFZhbHVlIGEsIFN0cmluZ0NvbnN0YW50VmFsdWUgYikgewogICAgU3RyaW5nIGFTdHJpbmcgPSBhLnN0cmluZ1ZhbHVlOwogICAgU3RyaW5nIGJTdHJpbmcgPSBiLnN0cmluZ1ZhbHVlOwogICAgcmV0dXJuIGFTdHJpbmcuY29tcGFyZVRvKGJTdHJpbmcpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0TGlzdChMaXN0Q29uc3RhbnRWYWx1ZSBhLCBMaXN0Q29uc3RhbnRWYWx1ZSBiKSB7CiAgICBpbnQgciA9IGNvbXBhcmVMaXN0cyhjb21wYXJlVmFsdWVzLCBhLmVudHJpZXMsIGIuZW50cmllcyk7CiAgICBpZiAociAhPSAwKSByZXR1cm4gcjsKICAgIHJldHVybiBjb21wYXJlRGFydFR5cGVzKGEudHlwZSwgYi50eXBlKTsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdFNldChTZXRDb25zdGFudFZhbHVlIGEsIFNldENvbnN0YW50VmFsdWUgYikgewogICAgaW50IHIgPSBjb21wYXJlTGlzdHMoY29tcGFyZVZhbHVlcywgYS52YWx1ZXMsIGIudmFsdWVzKTsKICAgIGlmIChyICE9IDApIHJldHVybiByOwogICAgcmV0dXJuIGNvbXBhcmVEYXJ0VHlwZXMoYS50eXBlLCBiLnR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0TWFwKE1hcENvbnN0YW50VmFsdWUgYSwgTWFwQ29uc3RhbnRWYWx1ZSBiKSB7CiAgICBpbnQgciA9IGNvbXBhcmVMaXN0cyhjb21wYXJlVmFsdWVzLCBhLmtleXMsIGIua2V5cyk7CiAgICBpZiAociAhPSAwKSByZXR1cm4gcjsKICAgIHIgPSBjb21wYXJlTGlzdHMoY29tcGFyZVZhbHVlcywgYS52YWx1ZXMsIGIudmFsdWVzKTsKICAgIGlmIChyICE9IDApIHJldHVybiByOwogICAgcmV0dXJuIGNvbXBhcmVEYXJ0VHlwZXMoYS50eXBlLCBiLnR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0Q29uc3RydWN0ZWQoQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlIGEsIENvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZSBiKSB7CiAgICBpbnQgciA9IGNvbXBhcmVEYXJ0VHlwZXMoYS50eXBlLCBiLnR5cGUpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CgogICAgLy8gVE9ETyhzcmEpOiBBdm9pZCBhbGwgdGhlc2UgdGVhci1vZmZzLgogICAgTGlzdDxGaWVsZEVudGl0eT4gYUZpZWxkcyA9IGEuZmllbGRzLmtleXMudG9MaXN0KCkuLnNvcnQoY29tcGFyZU1lbWJlcnMpOwogICAgTGlzdDxGaWVsZEVudGl0eT4gYkZpZWxkcyA9IGIuZmllbGRzLmtleXMudG9MaXN0KCkuLnNvcnQoY29tcGFyZU1lbWJlcnMpOwoKICAgIHIgPSBjb21wYXJlTGlzdHMoY29tcGFyZU1lbWJlcnMsIGFGaWVsZHMsIGJGaWVsZHMpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CgogICAgcmV0dXJuIGNvbXBhcmVMaXN0cygKICAgICAgICBjb21wYXJlVmFsdWVzLAogICAgICAgIGFGaWVsZHMubWFwKChmaWVsZCkgPT4gYS5maWVsZHNbZmllbGRdKS50b0xpc3QoKSwKICAgICAgICBhRmllbGRzLm1hcCgoZmllbGQpID0+IGIuZmllbGRzW2ZpZWxkXSkudG9MaXN0KCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0VHlwZShUeXBlQ29uc3RhbnRWYWx1ZSBhLCBUeXBlQ29uc3RhbnRWYWx1ZSBiKSB7CiAgICBpbnQgciA9IGNvbXBhcmVEYXJ0VHlwZXMoYS5yZXByZXNlbnRlZFR5cGUsIGIucmVwcmVzZW50ZWRUeXBlKTsKICAgIGlmIChyICE9IDApIHJldHVybiByOwogICAgcmV0dXJuIGNvbXBhcmVEYXJ0VHlwZXMoYS50eXBlLCBiLnR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0SW50ZXJjZXB0b3IoSW50ZXJjZXB0b3JDb25zdGFudFZhbHVlIGEsIEludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZSBiKSB7CiAgICByZXR1cm4gY29tcGFyZUNsYXNzZXMoYS5jbHMsIGIuY2xzKTsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdER1bW15SW50ZXJjZXB0b3IoCiAgICAgIER1bW15SW50ZXJjZXB0b3JDb25zdGFudFZhbHVlIGEsIER1bW15SW50ZXJjZXB0b3JDb25zdGFudFZhbHVlIGIpIHsKICAgIC8vIE5ldmVyIGVtaXR0ZWQuCiAgICByZXR1cm4gMDsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdFVucmVhY2hhYmxlKFVucmVhY2hhYmxlQ29uc3RhbnRWYWx1ZSBhLCBVbnJlYWNoYWJsZUNvbnN0YW50VmFsdWUgYikgewogICAgLy8gTmV2ZXIgZW1pdHRlZC4KICAgIHJldHVybiAwOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0SnNOYW1lKEpzTmFtZUNvbnN0YW50VmFsdWUgYSwgSnNOYW1lQ29uc3RhbnRWYWx1ZSBiKSB7CiAgICAvLyBBbiBvcGFxdWUgZGVmZXJyZWQgSlMgQVNUIHJlZmVyZW5jZSB0byBhIG5hbWUuCiAgICByZXR1cm4gMDsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdERlZmVycmVkR2xvYmFsKAogICAgICBEZWZlcnJlZEdsb2JhbENvbnN0YW50VmFsdWUgYSwgRGVmZXJyZWRHbG9iYWxDb25zdGFudFZhbHVlIGIpIHsKICAgIGludCByID0gY29tcGFyZVZhbHVlcyhhLnJlZmVyZW5jZWQsIGIucmVmZXJlbmNlZCk7CiAgICBpZiAociAhPSAwKSByZXR1cm4gcjsKICAgIHJldHVybiBhLnVuaXQuY29tcGFyZVRvKGIudW5pdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRJbnN0YW50aWF0aW9uKAogICAgICBJbnN0YW50aWF0aW9uQ29uc3RhbnRWYWx1ZSBhLCBJbnN0YW50aWF0aW9uQ29uc3RhbnRWYWx1ZSBiKSB7CiAgICBpbnQgciA9IGNvbXBhcmVWYWx1ZXMoYS5mdW5jdGlvbiwgYi5mdW5jdGlvbik7CiAgICBpZiAociAhPSAwKSByZXR1cm4gcjsKICAgIHJldHVybiBjb21wYXJlTGlzdHMoY29tcGFyZURhcnRUeXBlcywgYS50eXBlQXJndW1lbnRzLCBiLnR5cGVBcmd1bWVudHMpOwogIH0KfQoKLy8vIFZpc2l0b3IgZm9yIGRpc3Rpbmd1aXNoaW5nIHR5cGVzIGJ5IGtpbmQuCmNsYXNzIF9EYXJ0VHlwZUtpbmRWaXNpdG9yIGV4dGVuZHMgRGFydFR5cGVWaXNpdG9yPGludCwgTnVsbD4gewogIGNvbnN0IF9EYXJ0VHlwZUtpbmRWaXNpdG9yKCk7CgogIHN0YXRpYyBpbnQga2luZChEYXJ0VHlwZSB0eXBlKSB7CiAgICByZXR1cm4gdHlwZS5hY2NlcHQoY29uc3QgX0RhcnRUeXBlS2luZFZpc2l0b3IoKSwgbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRWb2lkVHlwZShjb3ZhcmlhbnQgVm9pZFR5cGUgdHlwZSwgXykgPT4gNjsKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRUeXBlVmFyaWFibGVUeXBlKGNvdmFyaWFudCBUeXBlVmFyaWFibGVUeXBlIHR5cGUsIF8pID0+IDM7CiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0RnVuY3Rpb25UeXBlKGNvdmFyaWFudCBGdW5jdGlvblR5cGUgdHlwZSwgXykgPT4gMDsKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRJbnRlcmZhY2VUeXBlKGNvdmFyaWFudCBJbnRlcmZhY2VUeXBlIHR5cGUsIF8pID0+IDE7CiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0VHlwZWRlZlR5cGUoY292YXJpYW50IFR5cGVkZWZUeXBlIHR5cGUsIF8pID0+IDI7CiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0RHluYW1pY1R5cGUoY292YXJpYW50IER5bmFtaWNUeXBlIHR5cGUsIF8pID0+IDU7CiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0QW55VHlwZShjb3ZhcmlhbnQgQW55VHlwZSB0eXBlLCBfKSA9PiA3Owp9CgpjbGFzcyBfRGFydFR5cGVPcmRlcmluZyBleHRlbmRzIERhcnRUeXBlVmlzaXRvcjxpbnQsIERhcnRUeXBlPiB7CiAgZmluYWwgX0NvbnN0YW50T3JkZXJpbmcgX2NvbnN0YW50T3JkZXJpbmc7CiAgRGFydFR5cGUgX3Jvb3Q7CiAgX0RhcnRUeXBlT3JkZXJpbmcodGhpcy5fY29uc3RhbnRPcmRlcmluZyk7CgogIGludCBjb21wYXJlKERhcnRUeXBlIGEsIERhcnRUeXBlIGIpIHsKICAgIGlmIChhID09IGIpIHJldHVybiAwOwogICAgaW50IHIgPQogICAgICAgIF9EYXJ0VHlwZUtpbmRWaXNpdG9yLmtpbmQoYSkuY29tcGFyZVRvKF9EYXJ0VHlwZUtpbmRWaXNpdG9yLmtpbmQoYikpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CiAgICBfcm9vdCA9IGE7CiAgICByID0gYS5hY2NlcHQodGhpcywgYik7CiAgICBfcm9vdCA9IG51bGw7CiAgICByZXR1cm4gcjsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdFZvaWRUeXBlKGNvdmFyaWFudCBWb2lkVHlwZSB0eXBlLCBjb3ZhcmlhbnQgVm9pZFR5cGUgb3RoZXIpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdVbnJlYWNoYWJsZScpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0VHlwZVZhcmlhYmxlVHlwZSgKICAgICAgY292YXJpYW50IFR5cGVWYXJpYWJsZVR5cGUgdHlwZSwgY292YXJpYW50IFR5cGVWYXJpYWJsZVR5cGUgb3RoZXIpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJUeXBlIHZhcmlhYmxlcyBhcmUgbm90IGV4cGVjdGVkIGluIGNvbnN0YW50czogJyR0eXBlJyBpbiAnJF9yb290JyIpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0RnVuY3Rpb25UeXBlKAogICAgICBjb3ZhcmlhbnQgRnVuY3Rpb25UeXBlIHR5cGUsIGNvdmFyaWFudCBGdW5jdGlvblR5cGUgb3RoZXIpIHsKICAgIGludCByID0gX2NvbXBhcmVUeXBlQXJndW1lbnRzKHR5cGUucGFyYW1ldGVyVHlwZXMsIG90aGVyLnBhcmFtZXRlclR5cGVzKTsKICAgIGlmIChyICE9IDApIHJldHVybiByOwogICAgciA9IF9jb21wYXJlVHlwZUFyZ3VtZW50cygKICAgICAgICB0eXBlLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMsIG90aGVyLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CiAgICByID0gX0NvbnN0YW50T3JkZXJpbmcuY29tcGFyZUxpc3RzKChTdHJpbmcgYSwgU3RyaW5nIGIpID0+IGEuY29tcGFyZVRvKGIpLAogICAgICAgIHR5cGUubmFtZWRQYXJhbWV0ZXJzLCBvdGhlci5uYW1lZFBhcmFtZXRlcnMpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CiAgICByID0gX2NvbXBhcmVUeXBlQXJndW1lbnRzKAogICAgICAgIHR5cGUubmFtZWRQYXJhbWV0ZXJUeXBlcywgb3RoZXIubmFtZWRQYXJhbWV0ZXJUeXBlcyk7CiAgICBpZiAociAhPSAwKSByZXR1cm4gcjsKICAgIHJldHVybiBjb21wYXJlKHR5cGUucmV0dXJuVHlwZSwgb3RoZXIucmV0dXJuVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRJbnRlcmZhY2VUeXBlKAogICAgICBjb3ZhcmlhbnQgSW50ZXJmYWNlVHlwZSB0eXBlLCBjb3ZhcmlhbnQgSW50ZXJmYWNlVHlwZSBvdGhlcikgewogICAgaW50IHIgPSBfY29uc3RhbnRPcmRlcmluZy5jb21wYXJlQ2xhc3Nlcyh0eXBlLmVsZW1lbnQsIG90aGVyLmVsZW1lbnQpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CiAgICByZXR1cm4gX2NvbXBhcmVUeXBlQXJndW1lbnRzKHR5cGUudHlwZUFyZ3VtZW50cywgb3RoZXIudHlwZUFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRUeXBlZGVmVHlwZSgKICAgICAgY292YXJpYW50IFR5cGVkZWZUeXBlIHR5cGUsIGNvdmFyaWFudCBUeXBlZGVmVHlwZSBvdGhlcikgewogICAgaW50IHIgPSBfY29uc3RhbnRPcmRlcmluZy5jb21wYXJlVHlwZWRlZnModHlwZS5lbGVtZW50LCBvdGhlci5lbGVtZW50KTsKICAgIGlmIChyICE9IDApIHJldHVybiByOwogICAgcmV0dXJuIF9jb21wYXJlVHlwZUFyZ3VtZW50cyh0eXBlLnR5cGVBcmd1bWVudHMsIG90aGVyLnR5cGVBcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0RHluYW1pY1R5cGUoCiAgICAgIGNvdmFyaWFudCBEeW5hbWljVHlwZSB0eXBlLCBjb3ZhcmlhbnQgRHluYW1pY1R5cGUgb3RoZXIpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdVbnJlYWNoYWJsZScpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0QW55VHlwZShjb3ZhcmlhbnQgQW55VHlwZSB0eXBlLCBjb3ZhcmlhbnQgQW55VHlwZSBvdGhlcikgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcignVW5yZWFjaGFibGUnKTsKICB9CgogIGludCBfY29tcGFyZVR5cGVBcmd1bWVudHMoCiAgICAgIExpc3Q8RGFydFR5cGU+IGFBcmd1bWVudHMsIExpc3Q8RGFydFR5cGU+IGJBcmd1bWVudHMpIHsKICAgIHJldHVybiBfQ29uc3RhbnRPcmRlcmluZy5jb21wYXJlTGlzdHMoY29tcGFyZSwgYUFyZ3VtZW50cywgYkFyZ3VtZW50cyk7CiAgfQp9CoE0AE5OPAEuASMjQCEiAU4mIj8BMQIBGEwYJyQ1BAEMSAE4IzIaHgQBQyoeHRoEAU8qGikfHAYOBAE1JhozBAE3JhozBAE6Jho0BAExLAQBDEgxBAEMPA4EAQxBDgQBDDktBAEMQjMEAQw8JCQhBAEMQiQkJwQBDDw/Gi0EAQw5PRotBAEMOTkaORotBAEMUS4aAS1OTgE4GgEZFzo7BAEMPEQaLQQBDFEpBAEMHUoWDgQBDFEWDgQBDEI2DgQBDBtGNxolBAEMGkQzGk0EAgEuQCABIzwEAQw2DEYMPgxADDwMPAw0AgFBLRItASgaDE4aDxsSDgQBDEkvBAEMHUsgTgQBDBlDThofRBpPNhofPho3BAEMGkVLGksEAQwYQUwaSwQBDBhBLwQBDEYrBAEdPkwEAgE2cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9jb25zdGFudF9vcmRlcmluZy5kYXJ0NXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2VtaXR0ZXIvaGVhZGVycy5kYXJ0hhovLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmpzX2VtaXR0ZXIuaGVhZGVyczsKCmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKClN0cmluZyBnZW5lcmF0ZWRCeShDb21waWxlck9wdGlvbnMgb3B0aW9ucywge1N0cmluZyBmbGF2b3I6ICIifSkgewogIFN0cmluZyBzdWZmaXggPSAnJzsKICBpZiAob3B0aW9ucy5oYXNCdWlsZElkKSB7CiAgICBzdWZmaXggPSAnIHZlcnNpb246ICR7b3B0aW9ucy5idWlsZElkfSc7CiAgfQogIGlmIChmbGF2b3IgIT0gIiIpIGZsYXZvciA9ICIgKCRmbGF2b3IpIjsKICByZXR1cm4gJy8vIEdlbmVyYXRlZCBieSBkYXJ0MmpzJGZsYXZvciwgJwogICAgICAndGhlIERhcnQgdG8gSmF2YVNjcmlwdCBjb21waWxlciRzdWZmaXguJzsKfQoKY29uc3QgU3RyaW5nIEhPT0tTX0FQSV9VU0FHRSA9ICIiIgovLyBUaGUgY29kZSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGhvb2tzOgovLyBkYXJ0UHJpbnQobWVzc2FnZSk6Ci8vICAgIGlmIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBpdCBpcyBjYWxsZWQgaW5zdGVhZCBvZiB0aGUgRGFydCBbcHJpbnRdCi8vICAgIG1ldGhvZC4KLy8KLy8gZGFydE1haW5SdW5uZXIobWFpbiwgYXJncyk6Ci8vICAgIGlmIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCwgdGhlIERhcnQgW21haW5dIG1ldGhvZCB3aWxsIG5vdCBiZSBpbnZva2VkCi8vICAgIGRpcmVjdGx5LiBJbnN0ZWFkLCBhIGNsb3N1cmUgdGhhdCB3aWxsIGludm9rZSBbbWFpbl0sIGFuZCBpdHMgYXJndW1lbnRzCi8vICAgIFthcmdzXSBpcyBwYXNzZWQgdG8gW2RhcnRNYWluUnVubmVyXS4KLy8KLy8gZGFydERlZmVycmVkTGlicmFyeUxvYWRlcih1cmksIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk6Ci8vICAgIGlmIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCwgaXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBhIGRlZmVycmVkIGxpYnJhcnkKLy8gICAgaXMgbG9hZGVkLiBJdCBzaG91bGQgbG9hZCBhbmQgZXZhbCB0aGUgamF2YXNjcmlwdCBvZiBgdXJpYCwgYW5kIGNhbGwKLy8gICAgc3VjY2Vzc0NhbGxiYWNrLiBJZiBpdCBmYWlscyB0byBkbyBzbywgaXQgc2hvdWxkIGNhbGwgZXJyb3JDYWxsYmFjayB3aXRoCi8vICAgIGFuIGVycm9yLgovLwovLyBkYXJ0Q2FsbEluc3RydW1lbnRhdGlvbihpZCwgcXVhbGlmaWVkTmFtZSk6Ci8vICAgIGlmIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCwgaXQgd2lsbCBiZSBjYWxsZWQgYXQgZWFjaCBlbnRyeSBvZiBhCi8vICAgIG1ldGhvZCBvciBjb25zdHJ1Y3Rvci4gVXNlZCBvbmx5IHdoZW4gY29tcGlsaW5nIHByb2dyYW1zIHdpdGgKLy8gICAgLS1leHBlcmltZW50LWNhbGwtaW5zdHJ1bWVudGF0aW9uLgoiIiI7CioATk48ASQBGgFDFhwtBCssMQIBIyoXSw4DH05OLANDTUtPEAMvSEQpBQEscGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9oZWFkZXJzLmRhcnQ2c2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbGxlY3Rpb24vbGliL3NyYy91dGlscy5kYXJ0gfAvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIEEgcGFpciBvZiB2YWx1ZXMuCmNsYXNzIFBhaXI8RSwgRj4gewogIEUgZmlyc3Q7CiAgRiBsYXN0OwoKICBQYWlyKHRoaXMuZmlyc3QsIHRoaXMubGFzdCk7Cn0KCi8vLyBSZXR1cm5zIGEgW0NvbXBhcmF0b3JdIHRoYXQgYXNzZXJ0cyB0aGF0IGl0cyBmaXJzdCBhcmd1bWVudCBpcyBjb21wYXJhYmxlLgpDb21wYXJhdG9yPFQ+IGRlZmF1bHRDb21wYXJlPFQ+KCkgPT4KICAgICh2YWx1ZTEsIHZhbHVlMikgPT4gKHZhbHVlMSBhcyBDb21wYXJhYmxlKS5jb21wYXJlVG8odmFsdWUyKTsKEQBOTjwBFhMLCgEfAgFPJUIBIXBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvdXRpbHMuZGFydEdzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29sbGVjdGlvbi9saWIvc3JjL2VtcHR5X3VubW9kaWZpYWJsZV9zZXQuZGFydIctLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJzsKCmltcG9ydCAndW5tb2RpZmlhYmxlX3dyYXBwZXJzLmRhcnQnOwoKLy8gVW5mb3J0dW5hdGVseSwgd2UgY2FuJ3QgdXNlIFVubW9kaWZpYWJsZVNldE1peGluIGhlcmUsIHNpbmNlIGNvbnN0IGNsYXNzZXMKLy8gY2FuJ3QgdXNlIG1peGlucy4KLy8vIEFuIHVubW9kaWZpYWJsZSwgZW1wdHkgc2V0IHRoYXQgY2FuIGhhdmUgYSBjb25zdCBjb25zdHJ1Y3Rvci4KY2xhc3MgRW1wdHlVbm1vZGlmaWFibGVTZXQ8RT4gZXh0ZW5kcyBJdGVyYWJsZUJhc2U8RT4KICAgIGltcGxlbWVudHMgVW5tb2RpZmlhYmxlU2V0VmlldzxFPiB7CiAgc3RhdGljIFQgX3Rocm93PFQ+KCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgYW4gdW5tb2RpZmlhYmxlIFNldCIpOwogIH0KCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yID0+IG5ldyBJdGVyYWJsZTxFPi5lbXB0eSgpLml0ZXJhdG9yOwogIGludCBnZXQgbGVuZ3RoID0+IDA7CgogIGNvbnN0IEVtcHR5VW5tb2RpZmlhYmxlU2V0KCk7CgogIEVtcHR5VW5tb2RpZmlhYmxlU2V0PFQ+IGNhc3Q8VD4oKSA9PiBuZXcgRW1wdHlVbm1vZGlmaWFibGVTZXQ8VD4oKTsKICBib29sIGNvbnRhaW5zKE9iamVjdCBlbGVtZW50KSA9PiBmYWxzZTsKICBib29sIGNvbnRhaW5zQWxsKEl0ZXJhYmxlPE9iamVjdD4gb3RoZXIpID0+IG90aGVyLmlzRW1wdHk7CiAgSXRlcmFibGU8RT4gZm9sbG93ZWRCeShJdGVyYWJsZTxFPiBvdGhlcikgPT4gbmV3IFNldC5mcm9tKG90aGVyKTsKICBFIGxvb2t1cChPYmplY3QgZWxlbWVudCkgPT4gbnVsbDsKICBAZGVwcmVjYXRlZAogIEVtcHR5VW5tb2RpZmlhYmxlU2V0PFQ+IHJldHlwZTxUPigpID0+IG5ldyBFbXB0eVVubW9kaWZpYWJsZVNldDxUPigpOwogIEUgc2luZ2xlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIHtFIG9yRWxzZSgpfSkgPT4gc3VwZXIuc2luZ2xlV2hlcmUodGVzdCk7CiAgSXRlcmFibGU8VD4gd2hlcmVUeXBlPFQ+KCkgPT4gbmV3IEVtcHR5VW5tb2RpZmlhYmxlU2V0PFQ+KCk7CiAgU2V0PEU+IHRvU2V0KCkgPT4gbmV3IFNldCgpOwogIFNldDxFPiB1bmlvbihTZXQ8RT4gb3RoZXIpID0+IG5ldyBTZXQuZnJvbShvdGhlcik7CiAgU2V0PEU+IGludGVyc2VjdGlvbihTZXQ8T2JqZWN0PiBvdGhlcikgPT4gbmV3IFNldCgpOwogIFNldDxFPiBkaWZmZXJlbmNlKFNldDxPYmplY3Q+IG90aGVyKSA9PiBuZXcgU2V0KCk7CgogIGJvb2wgYWRkKEUgdmFsdWUpID0+IF90aHJvdygpOwogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IGVsZW1lbnRzKSA9PiBfdGhyb3coKTsKICB2b2lkIGNsZWFyKCkgPT4gX3Rocm93KCk7CiAgYm9vbCByZW1vdmUoT2JqZWN0IGVsZW1lbnQpID0+IF90aHJvdygpOwogIHZvaWQgcmVtb3ZlQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpID0+IF90aHJvdygpOwogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IF90aHJvdygpOwogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IF90aHJvdygpOwogIHZvaWQgcmV0YWluQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpID0+IF90aHJvdygpOwp9Ci8ATk48ARoBJQFOFUI2KBlFBAFAFwEgAUYqPUQkDkhQPx81NzUBITEcKzk2NjkCATJwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL2VtcHR5X3VubW9kaWZpYWJsZV9zZXQuZGFydDZzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvdGVzdGluZy9pZF90ZXN0aW5nLmRhcnTAAFcELy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDppbyc7CmltcG9ydCAnYW5ub3RhdGVkX2NvZGVfaGVscGVyLmRhcnQnOwppbXBvcnQgJ2lkLmRhcnQnOwppbXBvcnQgJy4uL2Zhc3RhL2NvbG9ycy5kYXJ0JyBhcyBjb2xvcnM7Cgpjb25zdCBTdHJpbmcgY2ZlTWFya2VyID0gJ2NmZSc7CmNvbnN0IFN0cmluZyBkYXJ0MmpzTWFya2VyID0gJ2RhcnQyanMnOwpjb25zdCBTdHJpbmcgYW5hbHl6ZXJNYXJrZXIgPSAnYW5hbHl6ZXInOwoKLy8vIE1hcmtlcnMgdXNlZCBpbiBhbm5vdGF0ZWQgdGVzdHMgc2hhcmQgYnkgQ0ZFLCBhbmFseXplciBhbmQgZGFydDJqcy4KY29uc3QgTGlzdDxTdHJpbmc+IHNoYXJlZE1hcmtlcnMgPSBbCiAgY2ZlTWFya2VyLAogIGRhcnQyanNNYXJrZXIsCiAgYW5hbHl6ZXJNYXJrZXIsCl07CgovLy8gYHRydWVgIGlmIEFOU0kgY29sb3JzIGFyZSBzdXBwb3J0ZWQgYnkgc3Rkb3V0Lgpib29sIHVzZUNvbG9ycyA9IHN0ZG91dC5zdXBwb3J0c0Fuc2lFc2NhcGVzOwoKLy8vIENvbG9yaXplIGEgbWVzc2FnZSBbdGV4dF0sIGlmIEFOU0kgY29sb3JzIGFyZSBzdXBwb3J0ZWQuClN0cmluZyBjb2xvcml6ZU1lc3NhZ2UoU3RyaW5nIHRleHQpIHsKICBpZiAodXNlQ29sb3JzKSB7CiAgICByZXR1cm4gJyR7Y29sb3JzLllFTExPV19DT0xPUn0ke3RleHR9JHtjb2xvcnMuREVGQVVMVF9DT0xPUn0nOwogIH0gZWxzZSB7CiAgICByZXR1cm4gdGV4dDsKICB9Cn0KCi8vLyBDb2xvcml6ZSBhIG1hdGNoaW5nIGFubm90YXRpb24gW3RleHRdLCBpZiBBTlNJIGNvbG9ycyBhcmUgc3VwcG9ydGVkLgpTdHJpbmcgY29sb3JpemVNYXRjaChTdHJpbmcgdGV4dCkgewogIGlmICh1c2VDb2xvcnMpIHsKICAgIHJldHVybiAnJHtjb2xvcnMuQkxVRV9DT0xPUn0ke3RleHR9JHtjb2xvcnMuREVGQVVMVF9DT0xPUn0nOwogIH0gZWxzZSB7CiAgICByZXR1cm4gdGV4dDsKICB9Cn0KCi8vLyBDb2xvcml6ZSBhIHNpbmdsZSBhbm5vdGF0aW9uIFt0ZXh0XSwgaWYgQU5TSSBjb2xvcnMgYXJlIHN1cHBvcnRlZC4KU3RyaW5nIGNvbG9yaXplU2luZ2xlKFN0cmluZyB0ZXh0KSB7CiAgaWYgKHVzZUNvbG9ycykgewogICAgcmV0dXJuICcke2NvbG9ycy5HUkVFTl9DT0xPUn0ke3RleHR9JHtjb2xvcnMuREVGQVVMVF9DT0xPUn0nOwogIH0gZWxzZSB7CiAgICByZXR1cm4gdGV4dDsKICB9Cn0KCi8vLyBDb2xvcml6ZSB0aGUgYWN0dWFsIGFubm90YXRpb24gW3RleHRdLCBpZiBBTlNJIGNvbG9ycyBhcmUgc3VwcG9ydGVkLgpTdHJpbmcgY29sb3JpemVBY3R1YWwoU3RyaW5nIHRleHQpIHsKICBpZiAodXNlQ29sb3JzKSB7CiAgICByZXR1cm4gJyR7Y29sb3JzLlJFRF9DT0xPUn0ke3RleHR9JHtjb2xvcnMuREVGQVVMVF9DT0xPUn0nOwogIH0gZWxzZSB7CiAgICByZXR1cm4gdGV4dDsKICB9Cn0KCi8vLyBDb2xvcml6ZSBhbiBleHBlY3RlZCBhbm5vdGF0aW9uIFt0ZXh0XSwgaWYgQU5TSSBjb2xvcnMgYXJlIHN1cHBvcnRlZC4KU3RyaW5nIGNvbG9yaXplRXhwZWN0ZWQoU3RyaW5nIHRleHQpIHsKICBpZiAodXNlQ29sb3JzKSB7CiAgICByZXR1cm4gJyR7Y29sb3JzLkdSRUVOX0NPTE9SfSR7dGV4dH0ke2NvbG9ycy5ERUZBVUxUX0NPTE9SfSc7CiAgfSBlbHNlIHsKICAgIHJldHVybiB0ZXh0OwogIH0KfQoKLy8vIENvbG9yaXplIGRlbGltaXRlciBbdGV4dF0sIGlmIEFOU0kgY29sb3JzIGFyZSBzdXBwb3J0ZWQuClN0cmluZyBjb2xvcml6ZURlbGltaXRlcihTdHJpbmcgdGV4dCkgewogIGlmICh1c2VDb2xvcnMpIHsKICAgIHJldHVybiAnJHtjb2xvcnMuWUVMTE9XX0NPTE9SfSR7dGV4dH0ke2NvbG9ycy5ERUZBVUxUX0NPTE9SfSc7CiAgfSBlbHNlIHsKICAgIHJldHVybiB0ZXh0OwogIH0KfQoKLy8vIENvbG9yaXplIGRpZmZzIFtleHBlY3RlZF0gYW5kIFthY3R1YWxdIGFuZCBbZGVsaW1pdGVyXSwgaWYgQU5TSSBjb2xvcnMgYXJlCi8vLyBzdXBwb3J0ZWQuClN0cmluZyBjb2xvcml6ZURpZmYoU3RyaW5nIGV4cGVjdGVkLCBTdHJpbmcgZGVsaW1pdGVyLCBTdHJpbmcgYWN0dWFsKSB7CiAgcmV0dXJuICcke2NvbG9yaXplRXhwZWN0ZWQoZXhwZWN0ZWQpfScKICAgICAgJyR7Y29sb3JpemVEZWxpbWl0ZXIoZGVsaW1pdGVyKX0ke2NvbG9yaXplQWN0dWFsKGFjdHVhbCl9JzsKfQoKLy8vIENvbG9yaXplIGFubm90YXRpb24gZGVsaW1pdGVycyBbc3RhcnRdIGFuZCBbZW5kXSBzdXJyb3VuZGluZyBbdGV4dF0sIGlmCi8vLyBBTlNJIGNvbG9ycyBhcmUgc3VwcG9ydGVkLgpTdHJpbmcgY29sb3JpemVBbm5vdGF0aW9uKFN0cmluZyBzdGFydCwgU3RyaW5nIHRleHQsIFN0cmluZyBlbmQpIHsKICByZXR1cm4gJyR7Y29sb3JpemVEZWxpbWl0ZXIoc3RhcnQpfSR0ZXh0JHtjb2xvcml6ZURlbGltaXRlcihlbmQpfSc7Cn0KCi8vLyBFbmNhcHN1bGF0ZXMgdGhlIG1lbWJlciBkYXRhIGNvbXB1dGVkIGZvciBlYWNoIHNvdXJjZSBmaWxlIG9mIGludGVyZXN0LgovLy8gSXQncyBhIGdsb3JpZmllZCB3cmFwcGVyIGFyb3VuZCBhIG1hcCBvZiBtYXBzLCBidXQgd3JpdHRlbiB0aGlzIHdheSB0bwovLy8gcHJvdmlkZSBhIGxpdHRsZSBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgaXQncyBkb2luZy4gW0RhdGFUeXBlXSByZWZlcnMKLy8vIHRvIHRoZSB0eXBlIHRoaXMgbWFwIGlzIGhvbGRpbmcgLS0gaXQgaXMgZWl0aGVyIFtJZFZhbHVlXSBvciBbQWN0dWFsRGF0YV0uCmNsYXNzIE1lbWJlckFubm90YXRpb25zPERhdGFUeXBlPiB7CiAgLy8vIEZvciBlYWNoIFVyaSwgd2UgY3JlYXRlIGEgbWFwIGFzc29jaWF0aW5nIGFuIGVsZW1lbnQgaWQgd2l0aCBpdHMKICAvLy8gY29ycmVzcG9uZGluZyBhbm5vdGF0aW9ucy4KICBmaW5hbCBNYXA8VXJpLCBNYXA8SWQsIERhdGFUeXBlPj4gX2NvbXB1dGVkRGF0YUZvckVhY2hGaWxlID0KICAgICAgbmV3IE1hcDxVcmksIE1hcDxJZCwgRGF0YVR5cGU+PigpOwoKICAvLy8gTWVtYmVyIG9yIGNsYXNzIGFubm90YXRpb25zIHRoYXQgZG9uJ3QgcmVmZXIgdG8gYW55IG9mIHRoZSB1c2VyIGZpbGVzLgogIGZpbmFsIE1hcDxJZCwgRGF0YVR5cGU+IGdsb2JhbERhdGEgPSA8SWQsIERhdGFUeXBlPnt9OwoKICB2b2lkIG9wZXJhdG9yIFtdPShVcmkgZmlsZSwgTWFwPElkLCBEYXRhVHlwZT4gY29tcHV0ZWREYXRhKSB7CiAgICBfY29tcHV0ZWREYXRhRm9yRWFjaEZpbGVbZmlsZV0gPSBjb21wdXRlZERhdGE7CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBmKFVyaSBmaWxlLCBNYXA8SWQsIERhdGFUeXBlPiBjb21wdXRlZERhdGEpKSB7CiAgICBfY29tcHV0ZWREYXRhRm9yRWFjaEZpbGUuZm9yRWFjaChmKTsKICB9CgogIE1hcDxJZCwgRGF0YVR5cGU+IG9wZXJhdG9yIFtdKFVyaSBmaWxlKSB7CiAgICBpZiAoIV9jb21wdXRlZERhdGFGb3JFYWNoRmlsZS5jb250YWluc0tleShmaWxlKSkgewogICAgICBfY29tcHV0ZWREYXRhRm9yRWFjaEZpbGVbZmlsZV0gPSA8SWQsIERhdGFUeXBlPnt9OwogICAgfQogICAgcmV0dXJuIF9jb21wdXRlZERhdGFGb3JFYWNoRmlsZVtmaWxlXTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdNZW1iZXJBbm5vdGF0aW9ucygnKTsKICAgIFN0cmluZyBjb21tYSA9ICcnOwogICAgaWYgKF9jb21wdXRlZERhdGFGb3JFYWNoRmlsZS5pc05vdEVtcHR5ICYmCiAgICAgICAgKF9jb21wdXRlZERhdGFGb3JFYWNoRmlsZS5sZW5ndGggPiAxIHx8CiAgICAgICAgICAgIF9jb21wdXRlZERhdGFGb3JFYWNoRmlsZS52YWx1ZXMuc2luZ2xlLmlzTm90RW1wdHkpKSB7CiAgICAgIHNiLndyaXRlKCdkYXRhOnsnKTsKICAgICAgX2NvbXB1dGVkRGF0YUZvckVhY2hGaWxlLmZvckVhY2goKFVyaSB1cmksIE1hcDxJZCwgRGF0YVR5cGU+IGRhdGEpIHsKICAgICAgICBzYi53cml0ZShjb21tYSk7CiAgICAgICAgc2Iud3JpdGUoJyR1cmk6Jyk7CiAgICAgICAgc2Iud3JpdGUoZGF0YSk7CiAgICAgICAgY29tbWEgPSAnLCc7CiAgICAgIH0pOwogICAgICBzYi53cml0ZSgnfScpOwogICAgfQogICAgaWYgKGdsb2JhbERhdGEuaXNOb3RFbXB0eSkgewogICAgICBzYi53cml0ZShjb21tYSk7CiAgICAgIHNiLndyaXRlKCdnbG9iYWw6Jyk7CiAgICAgIHNiLndyaXRlKGdsb2JhbERhdGEpOwogICAgfQogICAgc2Iud3JpdGUoJyknKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKLy8vIENvbXB1dGUgYSBbTWVtYmVyQW5ub3RhdGlvbnNdIG9iamVjdCBmcm9tIFtjb2RlXSBmb3IgZWFjaCBtYXJrZXIgaW4gW21hcHNdCi8vLyBzcGVjaWZ5aW5nIHRoZSBleHBlY3RlZCBhbm5vdGF0aW9ucy4KLy8vCi8vLyBJZiBhbiBhbm5vdGF0aW9uIHN0YXJ0cyB3aXRoIGEgbWFya2VyLCBpdCBpcyBvbmx5IGV4cGVjdGVkIGZvciB0aGUKLy8vIGNvcnJlc3BvbmRpbmcgdGVzdCBjb25maWd1cmF0aW9uLiBPdGhlcndpc2UgaXQgaXMgZXhwZWN0ZWQgZm9yIGFsbAovLy8gY29uZmlndXJhdGlvbnMuCi8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1cHBvcnQgYW4gZW1wdHkgbWFya2VyIHNldC4Kdm9pZCBjb21wdXRlRXhwZWN0ZWRNYXAoVXJpIHNvdXJjZVVyaSwgU3RyaW5nIGZpbGVuYW1lLCBBbm5vdGF0ZWRDb2RlIGNvZGUsCiAgICBNYXA8U3RyaW5nLCBNZW1iZXJBbm5vdGF0aW9uczxJZFZhbHVlPj4gbWFwcywKICAgIHt2b2lkIG9uRmFpbHVyZShTdHJpbmcgbWVzc2FnZSl9KSB7CiAgTGlzdDxTdHJpbmc+IG1hcEtleXMgPSBtYXBzLmtleXMudG9MaXN0KCk7CiAgTWFwPFN0cmluZywgQW5ub3RhdGVkQ29kZT4gc3BsaXQgPSBzcGxpdEJ5UHJlZml4ZXMoY29kZSwgbWFwS2V5cyk7CgogIHNwbGl0LmZvckVhY2goKFN0cmluZyBtYXJrZXIsIEFubm90YXRlZENvZGUgY29kZSkgewogICAgTWVtYmVyQW5ub3RhdGlvbnM8SWRWYWx1ZT4gZmlsZUFubm90YXRpb25zID0gbWFwc1ttYXJrZXJdOwogICAgYXNzZXJ0KGZpbGVBbm5vdGF0aW9ucyAhPSBudWxsLCAiTm8gYW5ub3RhdGlvbnMgZm9yICRtYXJrZXIgaW4gJG1hcHMiKTsKICAgIE1hcDxJZCwgSWRWYWx1ZT4gZXhwZWN0ZWRWYWx1ZXMgPSBmaWxlQW5ub3RhdGlvbnNbc291cmNlVXJpXTsKICAgIGZvciAoQW5ub3RhdGlvbiBhbm5vdGF0aW9uIGluIGNvZGUuYW5ub3RhdGlvbnMpIHsKICAgICAgU3RyaW5nIHRleHQgPSBhbm5vdGF0aW9uLnRleHQ7CiAgICAgIElkVmFsdWUgaWRWYWx1ZSA9IElkVmFsdWUuZGVjb2RlKHNvdXJjZVVyaSwgYW5ub3RhdGlvbi5vZmZzZXQsIHRleHQpOwogICAgICBpZiAoaWRWYWx1ZS5pZC5pc0dsb2JhbCkgewogICAgICAgIGlmIChmaWxlQW5ub3RhdGlvbnMuZ2xvYmFsRGF0YS5jb250YWluc0tleShpZFZhbHVlLmlkKSkgewogICAgICAgICAgb25GYWlsdXJlKCJFcnJvciBpbiB0ZXN0ICckZmlsZW5hbWUnOiAiCiAgICAgICAgICAgICAgIkR1cGxpY2F0ZSBhbm5vdGF0aW9ucyBmb3IgJHtpZFZhbHVlLmlkfSBpbiAkbWFya2VyOiAiCiAgICAgICAgICAgICAgIiR7aWRWYWx1ZX0gYW5kICR7ZmlsZUFubm90YXRpb25zLmdsb2JhbERhdGFbaWRWYWx1ZS5pZF19LiIpOwogICAgICAgIH0KICAgICAgICBmaWxlQW5ub3RhdGlvbnMuZ2xvYmFsRGF0YVtpZFZhbHVlLmlkXSA9IGlkVmFsdWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGV4cGVjdGVkVmFsdWVzLmNvbnRhaW5zS2V5KGlkVmFsdWUuaWQpKSB7CiAgICAgICAgICBvbkZhaWx1cmUoIkVycm9yIGluIHRlc3QgJyRmaWxlbmFtZSc6ICIKICAgICAgICAgICAgICAiRHVwbGljYXRlIGFubm90YXRpb25zIGZvciAke2lkVmFsdWUuaWR9IGluICRtYXJrZXI6ICIKICAgICAgICAgICAgICAiJHtpZFZhbHVlfSBhbmQgJHtleHBlY3RlZFZhbHVlc1tpZFZhbHVlLmlkXX0uIik7CiAgICAgICAgfQogICAgICAgIGV4cGVjdGVkVmFsdWVzW2lkVmFsdWUuaWRdID0gaWRWYWx1ZTsKICAgICAgfQogICAgfQogIH0pOwp9CgovLy8gQ3JlYXRlcyBhIFtUZXN0RGF0YV0gb2JqZWN0IGZvciB0aGUgYW5ub3RhdGVkIHRlc3QgaW4gW3Rlc3RGaWxlXS4KLy8vCi8vLyBJZiBbdGVzdEZpbGVdIGlzIGEgZmlsZSwgdXNlIHRoYXQgZGlyZWN0bHkuIElmIGl0J3MgYSBkaXJlY3RvcnkgaW5jbHVkZQovLy8gZXZlcnl0aGluZyBpbiB0aGF0IGRpcmVjdG9yeS4KLy8vCi8vLyBJZiBbdGVzdExpYkRpcmVjdG9yeV0gaXMgbm90IGBudWxsYCwgZmlsZXMgaW4gW3Rlc3RMaWJEaXJlY3RvcnldIHdpdGggdGhlCi8vLyBbdGVzdEZpbGVdIG5hbWUgYXMgYSBwcmVmaXggYXJlIGluY2x1ZGVkLgpUZXN0RGF0YSBjb21wdXRlVGVzdERhdGEoRmlsZVN5c3RlbUVudGl0eSB0ZXN0RmlsZSwKICAgIHtJdGVyYWJsZTxTdHJpbmc+IHN1cHBvcnRlZE1hcmtlcnMsCiAgICBVcmkgY3JlYXRlVXJpRm9yRmlsZU5hbWUoU3RyaW5nIGZpbGVOYW1lKSwKICAgIHZvaWQgb25GYWlsdXJlKFN0cmluZyBtZXNzYWdlKX0pIHsKICBVcmkgZW50cnlQb2ludCA9IGNyZWF0ZVVyaUZvckZpbGVOYW1lKCdtYWluLmRhcnQnKTsKCiAgU3RyaW5nIHRlc3ROYW1lOwogIEZpbGUgbWFpblRlc3RGaWxlOwogIFVyaSB0ZXN0RmlsZVVyaSA9IHRlc3RGaWxlLnVyaTsKICBNYXA8U3RyaW5nLCBGaWxlPiBhZGRpdGlvbmFsRmlsZXM7CiAgaWYgKHRlc3RGaWxlIGlzIEZpbGUpIHsKICAgIHRlc3ROYW1lID0gdGVzdEZpbGVVcmkucGF0aFNlZ21lbnRzLmxhc3Q7CiAgICBtYWluVGVzdEZpbGUgPSB0ZXN0RmlsZTsKICB9IGVsc2UgaWYgKHRlc3RGaWxlIGlzIERpcmVjdG9yeSkgewogICAgdGVzdE5hbWUgPSB0ZXN0RmlsZVVyaS5wYXRoU2VnbWVudHNbdGVzdEZpbGVVcmkucGF0aFNlZ21lbnRzLmxlbmd0aCAtIDJdOwogICAgYWRkaXRpb25hbEZpbGVzID0gbmV3IE1hcDxTdHJpbmcsIEZpbGU+KCk7CiAgICBmb3IgKEZpbGVTeXN0ZW1FbnRpdHkgZW50cnkgaW4gdGVzdEZpbGUubGlzdFN5bmMocmVjdXJzaXZlOiB0cnVlKSkgewogICAgICBpZiAoZW50cnkgaXMhIEZpbGUpIGNvbnRpbnVlOwogICAgICBpZiAoZW50cnkudXJpLnBhdGhTZWdtZW50cy5sYXN0ID09ICJtYWluLmRhcnQiKSB7CiAgICAgICAgbWFpblRlc3RGaWxlID0gZW50cnk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYWRkaXRpb25hbEZpbGVzW2VudHJ5LnVyaS5wYXRoLnN1YnN0cmluZyh0ZXN0RmlsZS51cmkucGF0aC5sZW5ndGgpXSA9CiAgICAgICAgICAgIGVudHJ5OwogICAgICB9CiAgICB9CiAgfQoKICBTdHJpbmcgYW5ub3RhdGVkQ29kZSA9IG5ldyBGaWxlLmZyb21VcmkobWFpblRlc3RGaWxlLnVyaSkucmVhZEFzU3RyaW5nU3luYygpOwogIE1hcDxVcmksIEFubm90YXRlZENvZGU+IGNvZGUgPSB7CiAgICBlbnRyeVBvaW50OgogICAgICAgIG5ldyBBbm5vdGF0ZWRDb2RlLmZyb21UZXh0KGFubm90YXRlZENvZGUsIGNvbW1lbnRTdGFydCwgY29tbWVudEVuZCkKICB9OwogIE1hcDxTdHJpbmcsIE1lbWJlckFubm90YXRpb25zPElkVmFsdWU+PiBleHBlY3RlZE1hcHMgPSB7fTsKICBmb3IgKFN0cmluZyB0ZXN0TWFya2VyIGluIHN1cHBvcnRlZE1hcmtlcnMpIHsKICAgIGV4cGVjdGVkTWFwc1t0ZXN0TWFya2VyXSA9IG5ldyBNZW1iZXJBbm5vdGF0aW9uczxJZFZhbHVlPigpOwogIH0KICBjb21wdXRlRXhwZWN0ZWRNYXAoZW50cnlQb2ludCwgdGVzdEZpbGUudXJpLnBhdGhTZWdtZW50cy5sYXN0LAogICAgICBjb2RlW2VudHJ5UG9pbnRdLCBleHBlY3RlZE1hcHMsCiAgICAgIG9uRmFpbHVyZTogb25GYWlsdXJlKTsKICBNYXA8U3RyaW5nLCBTdHJpbmc+IG1lbW9yeVNvdXJjZUZpbGVzID0gewogICAgZW50cnlQb2ludC5wYXRoOiBjb2RlW2VudHJ5UG9pbnRdLnNvdXJjZUNvZGUKICB9OwoKICBpZiAoYWRkaXRpb25hbEZpbGVzICE9IG51bGwpIHsKICAgIGZvciAoTWFwRW50cnk8U3RyaW5nLCBGaWxlPiBhZGRpdGlvbmFsRmlsZURhdGEgaW4gYWRkaXRpb25hbEZpbGVzLmVudHJpZXMpIHsKICAgICAgU3RyaW5nIGxpYkZpbGVOYW1lID0gYWRkaXRpb25hbEZpbGVEYXRhLmtleTsKICAgICAgRmlsZSBsaWJFbnRpdHkgPSBhZGRpdGlvbmFsRmlsZURhdGEudmFsdWU7CiAgICAgIFVyaSBsaWJGaWxlVXJpID0gY3JlYXRlVXJpRm9yRmlsZU5hbWUobGliRmlsZU5hbWUpOwogICAgICBTdHJpbmcgbGliQ29kZSA9IGxpYkVudGl0eS5yZWFkQXNTdHJpbmdTeW5jKCk7CiAgICAgIEFubm90YXRlZENvZGUgYW5ub3RhdGVkTGliQ29kZSA9CiAgICAgICAgICBuZXcgQW5ub3RhdGVkQ29kZS5mcm9tVGV4dChsaWJDb2RlLCBjb21tZW50U3RhcnQsIGNvbW1lbnRFbmQpOwogICAgICBtZW1vcnlTb3VyY2VGaWxlc1tsaWJGaWxlVXJpLnBhdGhdID0gYW5ub3RhdGVkTGliQ29kZS5zb3VyY2VDb2RlOwogICAgICBjb2RlW2xpYkZpbGVVcmldID0gYW5ub3RhdGVkTGliQ29kZTsKICAgICAgY29tcHV0ZUV4cGVjdGVkTWFwKAogICAgICAgICAgbGliRmlsZVVyaSwgbGliRmlsZU5hbWUsIGFubm90YXRlZExpYkNvZGUsIGV4cGVjdGVkTWFwcywKICAgICAgICAgIG9uRmFpbHVyZTogb25GYWlsdXJlKTsKICAgIH0KICB9CgogIHJldHVybiBuZXcgVGVzdERhdGEoCiAgICAgIHRlc3ROYW1lLCB0ZXN0RmlsZVVyaSwgZW50cnlQb2ludCwgbWVtb3J5U291cmNlRmlsZXMsIGNvZGUsIGV4cGVjdGVkTWFwcyk7Cn0KCi8vLyBEYXRhIGZvciBhbiBhbm5vdGF0ZWQgdGVzdC4KY2xhc3MgVGVzdERhdGEgewogIGZpbmFsIFN0cmluZyBuYW1lOwogIGZpbmFsIFVyaSB0ZXN0RmlsZVVyaTsKICBmaW5hbCBVcmkgZW50cnlQb2ludDsKICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IG1lbW9yeVNvdXJjZUZpbGVzOwogIGZpbmFsIE1hcDxVcmksIEFubm90YXRlZENvZGU+IGNvZGU7CiAgZmluYWwgTWFwPFN0cmluZywgTWVtYmVyQW5ub3RhdGlvbnM8SWRWYWx1ZT4+IGV4cGVjdGVkTWFwczsKCiAgVGVzdERhdGEodGhpcy5uYW1lLCB0aGlzLnRlc3RGaWxlVXJpLCB0aGlzLmVudHJ5UG9pbnQsIHRoaXMubWVtb3J5U291cmNlRmlsZXMsCiAgICAgIHRoaXMuY29kZSwgdGhpcy5leHBlY3RlZE1hcHMpOwp9CgovLy8gVGhlIGFjdHVhbCByZXN1bHQgY29tcHV0ZWQgZm9yIGFuIGFubm90YXRlZCB0ZXN0LgphYnN0cmFjdCBjbGFzcyBDb21waWxlZERhdGE8VD4gewogIGZpbmFsIFVyaSBtYWluVXJpOwoKICAvLy8gRm9yIGVhY2ggVXJpLCBhIG1hcCBhc3NvY2lhdGluZyBhbiBlbGVtZW50IGlkIHdpdGggdGhlIGluc3RydW1lbnRhdGlvbgogIC8vLyBkYXRhIHdlJ3ZlIGNvbGxlY3RlZCBmb3IgaXQuCiAgZmluYWwgTWFwPFVyaSwgTWFwPElkLCBBY3R1YWxEYXRhPFQ+Pj4gYWN0dWFsTWFwczsKCiAgLy8vIENvbGxlY3RlZCBpbnN0cnVtZW50YXRpb24gZGF0YSB0aGF0IGRvZXNuJ3QgcmVmZXIgdG8gYW55IG9mIHRoZSB1c2VyCiAgLy8vIGZpbGVzLiAgKEUuZy4gaW5mb3JtYXRpb24gdGhlIHRlc3QgaGFzIGNvbGxlY3RlZCBhYm91dCBmaWxlcyBpbgogIC8vLyBgZGFydDpjb3JlYCkuCiAgZmluYWwgTWFwPElkLCBBY3R1YWxEYXRhPFQ+PiBnbG9iYWxEYXRhOwoKICBDb21waWxlZERhdGEodGhpcy5tYWluVXJpLCB0aGlzLmFjdHVhbE1hcHMsIHRoaXMuZ2xvYmFsRGF0YSk7CgogIE1hcDxpbnQsIExpc3Q8U3RyaW5nPj4gY29tcHV0ZUFubm90YXRpb25zKFVyaSB1cmkpIHsKICAgIE1hcDxJZCwgQWN0dWFsRGF0YTxUPj4gYWN0dWFsTWFwID0gYWN0dWFsTWFwc1t1cmldOwogICAgTWFwPGludCwgTGlzdDxTdHJpbmc+PiBhbm5vdGF0aW9ucyA9IDxpbnQsIExpc3Q8U3RyaW5nPj57fTsKICAgIGFjdHVhbE1hcC5mb3JFYWNoKChJZCBpZCwgQWN0dWFsRGF0YTxUPiBkYXRhKSB7CiAgICAgIFN0cmluZyB2YWx1ZTEgPSAnJHtkYXRhLnZhbHVlfSc7CiAgICAgIGFubm90YXRpb25zCiAgICAgICAgICAucHV0SWZBYnNlbnQoZGF0YS5vZmZzZXQsICgpID0+IFtdKQogICAgICAgICAgLmFkZChjb2xvcml6ZUFjdHVhbCh2YWx1ZTEpKTsKICAgIH0pOwogICAgcmV0dXJuIGFubm90YXRpb25zOwogIH0KCiAgTWFwPGludCwgTGlzdDxTdHJpbmc+PiBjb21wdXRlRGlmZkFubm90YXRpb25zQWdhaW5zdCgKICAgICAgTWFwPElkLCBBY3R1YWxEYXRhPFQ+PiB0aGlzTWFwLCBNYXA8SWQsIEFjdHVhbERhdGE8VD4+IG90aGVyTWFwLCBVcmkgdXJpLAogICAgICB7Ym9vbCBpbmNsdWRlTWF0Y2hlczogZmFsc2V9KSB7CiAgICBNYXA8aW50LCBMaXN0PFN0cmluZz4+IGFubm90YXRpb25zID0gPGludCwgTGlzdDxTdHJpbmc+Pnt9OwogICAgdGhpc01hcC5mb3JFYWNoKChJZCBpZCwgQWN0dWFsRGF0YTxUPiB0aGlzRGF0YSkgewogICAgICBBY3R1YWxEYXRhPFQ+IG90aGVyRGF0YSA9IG90aGVyTWFwW2lkXTsKICAgICAgU3RyaW5nIHRoaXNWYWx1ZSA9ICcke3RoaXNEYXRhLnZhbHVlfSc7CiAgICAgIGlmICh0aGlzRGF0YS52YWx1ZSAhPSBvdGhlckRhdGE/LnZhbHVlKSB7CiAgICAgICAgU3RyaW5nIG90aGVyVmFsdWUgPSAnJHtvdGhlckRhdGE/LnZhbHVlID8/ICctLS0nfSc7CiAgICAgICAgYW5ub3RhdGlvbnMKICAgICAgICAgICAgLnB1dElmQWJzZW50KHRoaXNEYXRhLm9mZnNldCwgKCkgPT4gW10pCiAgICAgICAgICAgIC5hZGQoY29sb3JpemVEaWZmKHRoaXNWYWx1ZSwgJyB8ICcsIG90aGVyVmFsdWUpKTsKICAgICAgfSBlbHNlIGlmIChpbmNsdWRlTWF0Y2hlcykgewogICAgICAgIGFubm90YXRpb25zCiAgICAgICAgICAgIC5wdXRJZkFic2VudCh0aGlzRGF0YS5vZmZzZXQsICgpID0+IFtdKQogICAgICAgICAgICAuYWRkKGNvbG9yaXplTWF0Y2godGhpc1ZhbHVlKSk7CiAgICAgIH0KICAgIH0pOwogICAgb3RoZXJNYXAuZm9yRWFjaCgoSWQgaWQsIEFjdHVhbERhdGE8VD4gb3RoZXJEYXRhKSB7CiAgICAgIGlmICghdGhpc01hcC5jb250YWluc0tleShpZCkpIHsKICAgICAgICBTdHJpbmcgdGhpc1ZhbHVlID0gJy0tLSc7CiAgICAgICAgU3RyaW5nIG90aGVyVmFsdWUgPSAnJHtvdGhlckRhdGEudmFsdWV9JzsKICAgICAgICBhbm5vdGF0aW9ucwogICAgICAgICAgICAucHV0SWZBYnNlbnQob3RoZXJEYXRhLm9mZnNldCwgKCkgPT4gW10pCiAgICAgICAgICAgIC5hZGQoY29sb3JpemVEaWZmKHRoaXNWYWx1ZSwgJyB8ICcsIG90aGVyVmFsdWUpKTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gYW5ub3RhdGlvbnM7CiAgfQoKICBpbnQgZ2V0T2Zmc2V0RnJvbUlkKElkIGlkLCBVcmkgdXJpKTsKCiAgdm9pZCByZXBvcnRFcnJvcihVcmkgdXJpLCBpbnQgb2Zmc2V0LCBTdHJpbmcgbWVzc2FnZSwge2Jvb2wgc3VjY2luY3Q6IGZhbHNlfSk7Cn0KCi8vLyBJbnRlcmZhY2UgdXNlZCBmb3IgaW50ZXJwcmV0aW5nIGFubm90YXRpb25zLgphYnN0cmFjdCBjbGFzcyBEYXRhSW50ZXJwcmV0ZXI8VD4gewogIC8vLyBSZXR1cm5zIGBudWxsYCBpZiBbYWN0dWFsRGF0YV0gc2F0aXNmaWVzIHRoZSBbZXhwZWN0ZWREYXRhXSBhbm5vdGF0aW9uLgogIC8vLyBPdGhlcndpc2UsIGEgbWVzc2FnZSBpcyByZXR1cm5lZCBjb250YWluIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKICAvLy8gcHJvYmxlbXMgZm91bmQuCiAgU3RyaW5nIGlzQXNFeHBlY3RlZChUIGFjdHVhbERhdGEsIFN0cmluZyBleHBlY3RlZERhdGEpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2FjdHVhbERhdGFdIGNvcnJlc3BvbmRzIHRvIGVtcHR5IGRhdGEuCiAgYm9vbCBpc0VtcHR5KFQgYWN0dWFsRGF0YSk7CgogIC8vLyBSZXR1cm5zIGEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiBbYWN0dWFsRGF0YV0uCiAgU3RyaW5nIGdldFRleHQoVCBhY3R1YWxEYXRhKTsKfQoKLy8vIERlZmF1bHQgZGF0YSBpbnRlcnByZXRlciBmb3Igc3RyaW5nIGRhdGEuCmNsYXNzIFN0cmluZ0RhdGFJbnRlcnByZXRlciBpbXBsZW1lbnRzIERhdGFJbnRlcnByZXRlcjxTdHJpbmc+IHsKICBjb25zdCBTdHJpbmdEYXRhSW50ZXJwcmV0ZXIoKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGlzQXNFeHBlY3RlZChTdHJpbmcgYWN0dWFsRGF0YSwgU3RyaW5nIGV4cGVjdGVkRGF0YSkgewogICAgYWN0dWFsRGF0YSA/Pz0gJyc7CiAgICBleHBlY3RlZERhdGEgPz89ICcnOwogICAgaWYgKGFjdHVhbERhdGEgIT0gZXhwZWN0ZWREYXRhKSB7CiAgICAgIHJldHVybiAiRXhwZWN0ZWQgJGV4cGVjdGVkRGF0YSwgZm91bmQgJGFjdHVhbERhdGEiOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRW1wdHkoU3RyaW5nIGFjdHVhbERhdGEpIHsKICAgIHJldHVybiBhY3R1YWxEYXRhID09ICcnOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldFRleHQoU3RyaW5nIGFjdHVhbERhdGEpIHsKICAgIHJldHVybiBhY3R1YWxEYXRhOwogIH0KfQoKU3RyaW5nIHdpdGhBbm5vdGF0aW9ucyhTdHJpbmcgc291cmNlQ29kZSwgTWFwPGludCwgTGlzdDxTdHJpbmc+PiBhbm5vdGF0aW9ucykgewogIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICBpbnQgZW5kID0gMDsKICBmb3IgKGludCBvZmZzZXQgaW4gYW5ub3RhdGlvbnMua2V5cy50b0xpc3QoKS4uc29ydCgpKSB7CiAgICBpZiAob2Zmc2V0ID49IHNvdXJjZUNvZGUubGVuZ3RoKSB7CiAgICAgIHNiLndyaXRlKCcuLi4nKTsKICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgICB9CiAgICBpZiAob2Zmc2V0ID4gZW5kKSB7CiAgICAgIHNiLndyaXRlKHNvdXJjZUNvZGUuc3Vic3RyaW5nKGVuZCwgb2Zmc2V0KSk7CiAgICB9CiAgICBmb3IgKFN0cmluZyBhbm5vdGF0aW9uIGluIGFubm90YXRpb25zW29mZnNldF0pIHsKICAgICAgc2Iud3JpdGUoY29sb3JpemVBbm5vdGF0aW9uKCcvKicsIGFubm90YXRpb24sICcqLycpKTsKICAgIH0KICAgIGVuZCA9IG9mZnNldDsKICB9CiAgaWYgKGVuZCA8IHNvdXJjZUNvZGUubGVuZ3RoKSB7CiAgICBzYi53cml0ZShzb3VyY2VDb2RlLnN1YnN0cmluZyhlbmQpKTsKICB9CiAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Cn0KCi8vLyBDb21wdXRlZCBhbmQgZXhwZWN0ZWQgZGF0YSBmb3IgYW4gYW5ub3RhdGVkIHRlc3QuIFRoaXMgaXMgdXNlZCBmb3IgY2hlY2tpbmcKLy8vIGFuZCBkaXNwbGF5aW5nIHJlc3VsdHMgb2YgYW4gYW5ub3RhdGVkIHRlc3QuCmNsYXNzIElkRGF0YTxUPiB7CiAgZmluYWwgTWFwPFVyaSwgQW5ub3RhdGVkQ29kZT4gY29kZTsKICBmaW5hbCBNZW1iZXJBbm5vdGF0aW9uczxJZFZhbHVlPiBleHBlY3RlZE1hcHM7CiAgZmluYWwgQ29tcGlsZWREYXRhPFQ+IF9jb21waWxlZERhdGE7CiAgZmluYWwgTWVtYmVyQW5ub3RhdGlvbnM8QWN0dWFsRGF0YTxUPj4gX2FjdHVhbE1hcHMgPSBuZXcgTWVtYmVyQW5ub3RhdGlvbnMoKTsKCiAgSWREYXRhKHRoaXMuY29kZSwgdGhpcy5leHBlY3RlZE1hcHMsIHRoaXMuX2NvbXBpbGVkRGF0YSkgewogICAgZm9yIChVcmkgdXJpIGluIGNvZGUua2V5cykgewogICAgICBfYWN0dWFsTWFwc1t1cmldID0gX2NvbXBpbGVkRGF0YS5hY3R1YWxNYXBzW3VyaV0gPz8gPElkLCBBY3R1YWxEYXRhPFQ+Pnt9OwogICAgfQogICAgX2FjdHVhbE1hcHMuZ2xvYmFsRGF0YS5hZGRBbGwoX2NvbXBpbGVkRGF0YS5nbG9iYWxEYXRhKTsKICB9CgogIFVyaSBnZXQgbWFpblVyaSA9PiBfY29tcGlsZWREYXRhLm1haW5Vcmk7CiAgTWVtYmVyQW5ub3RhdGlvbnM8QWN0dWFsRGF0YTxUPj4gZ2V0IGFjdHVhbE1hcHMgPT4gX2FjdHVhbE1hcHM7CgogIFN0cmluZyBhY3R1YWxDb2RlKFVyaSB1cmkpIHsKICAgIE1hcDxpbnQsIExpc3Q8U3RyaW5nPj4gYW5ub3RhdGlvbnMgPSA8aW50LCBMaXN0PFN0cmluZz4+e307CiAgICBhY3R1YWxNYXBzW3VyaV0uZm9yRWFjaCgoSWQgaWQsIEFjdHVhbERhdGE8VD4gZGF0YSkgewogICAgICBhbm5vdGF0aW9ucy5wdXRJZkFic2VudChkYXRhLm9mZnNldCwgKCkgPT4gW10pLmFkZCgnJHtkYXRhLnZhbHVlfScpOwogICAgfSk7CiAgICByZXR1cm4gd2l0aEFubm90YXRpb25zKGNvZGVbdXJpXS5zb3VyY2VDb2RlLCBhbm5vdGF0aW9ucyk7CiAgfQoKICBTdHJpbmcgZGlmZkNvZGUoVXJpIHVyaSwgRGF0YUludGVycHJldGVyPFQ+IGRhdGFWYWxpZGF0b3IpIHsKICAgIE1hcDxpbnQsIExpc3Q8U3RyaW5nPj4gYW5ub3RhdGlvbnMgPSA8aW50LCBMaXN0PFN0cmluZz4+e307CiAgICBhY3R1YWxNYXBzW3VyaV0uZm9yRWFjaCgoSWQgaWQsIEFjdHVhbERhdGE8VD4gZGF0YSkgewogICAgICBJZFZhbHVlIGV4cGVjdGVkVmFsdWUgPSBleHBlY3RlZE1hcHNbdXJpXVtpZF07CiAgICAgIFQgYWN0dWFsVmFsdWUgPSBkYXRhLnZhbHVlOwogICAgICBTdHJpbmcgdW5leHBlY3RlZE1lc3NhZ2UgPQogICAgICAgICAgZGF0YVZhbGlkYXRvci5pc0FzRXhwZWN0ZWQoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWU/LnZhbHVlKTsKICAgICAgaWYgKHVuZXhwZWN0ZWRNZXNzYWdlICE9IG51bGwpIHsKICAgICAgICBTdHJpbmcgZXhwZWN0ZWQgPSBleHBlY3RlZFZhbHVlPy50b1N0cmluZygpID8/ICcnOwogICAgICAgIFN0cmluZyBhY3R1YWwgPSBkYXRhVmFsaWRhdG9yLmdldFRleHQoYWN0dWFsVmFsdWUpOwogICAgICAgIGludCBvZmZzZXQgPSBnZXRPZmZzZXRGcm9tSWQoaWQsIHVyaSk7CiAgICAgICAgaWYgKG9mZnNldCAhPSBudWxsKSB7CiAgICAgICAgICBTdHJpbmcgdmFsdWUxID0gJyR7ZXhwZWN0ZWR9JzsKICAgICAgICAgIFN0cmluZyB2YWx1ZTIgPSBJZFZhbHVlLmlkVG9TdHJpbmcoaWQsICcke2FjdHVhbH0nKTsKICAgICAgICAgIGFubm90YXRpb25zCiAgICAgICAgICAgICAgLnB1dElmQWJzZW50KG9mZnNldCwgKCkgPT4gW10pCiAgICAgICAgICAgICAgLmFkZChjb2xvcml6ZURpZmYodmFsdWUxLCAnIHwgJywgdmFsdWUyKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIGV4cGVjdGVkTWFwc1t1cmldLmZvckVhY2goKElkIGlkLCBJZFZhbHVlIGV4cGVjdGVkKSB7CiAgICAgIGlmICghYWN0dWFsTWFwc1t1cmldLmNvbnRhaW5zS2V5KGlkKSkgewogICAgICAgIGludCBvZmZzZXQgPSBnZXRPZmZzZXRGcm9tSWQoaWQsIHVyaSk7CiAgICAgICAgaWYgKG9mZnNldCAhPSBudWxsKSB7CiAgICAgICAgICBTdHJpbmcgdmFsdWUxID0gJyR7ZXhwZWN0ZWR9JzsKICAgICAgICAgIFN0cmluZyB2YWx1ZTIgPSAnLS0tJzsKICAgICAgICAgIGFubm90YXRpb25zCiAgICAgICAgICAgICAgLnB1dElmQWJzZW50KG9mZnNldCwgKCkgPT4gW10pCiAgICAgICAgICAgICAgLmFkZChjb2xvcml6ZURpZmYodmFsdWUxLCAnIHwgJywgdmFsdWUyKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIHJldHVybiB3aXRoQW5ub3RhdGlvbnMoY29kZVt1cmldLnNvdXJjZUNvZGUsIGFubm90YXRpb25zKTsKICB9CgogIGludCBnZXRPZmZzZXRGcm9tSWQoSWQgaWQsIFVyaSB1cmkpIHsKICAgIHJldHVybiBfY29tcGlsZWREYXRhLmdldE9mZnNldEZyb21JZChpZCwgdXJpKTsKICB9Cn0KCi8vLyBDaGVja3MgW2NvbXBpbGVkRGF0YV0gYWdhaW5zdCB0aGUgZXhwZWN0ZWQgZGF0YSBpbiBbZXhwZWN0ZWRNYXBzXSBkZXJpdmVkCi8vLyBmcm9tIFtjb2RlXS4KRnV0dXJlPGJvb2w+IGNoZWNrQ29kZTxUPigKICAgIFN0cmluZyBtb2RlTmFtZSwKICAgIFVyaSBtYWluRmlsZVVyaSwKICAgIE1hcDxVcmksIEFubm90YXRlZENvZGU+IGNvZGUsCiAgICBNZW1iZXJBbm5vdGF0aW9uczxJZFZhbHVlPiBleHBlY3RlZE1hcHMsCiAgICBDb21waWxlZERhdGE8VD4gY29tcGlsZWREYXRhLAogICAgRGF0YUludGVycHJldGVyPFQ+IGRhdGFWYWxpZGF0b3IsCiAgICB7Ym9vbCBmaWx0ZXJBY3R1YWxEYXRhKElkVmFsdWUgZXhwZWN0ZWQsIEFjdHVhbERhdGE8VD4gYWN0dWFsRGF0YSksCiAgICBib29sIGZhdGFsRXJyb3JzOiB0cnVlLAogICAgYm9vbCBzdWNjaW5jdDogZmFsc2UsCiAgICB2b2lkIG9uRmFpbHVyZShTdHJpbmcgbWVzc2FnZSl9KSBhc3luYyB7CiAgSWREYXRhPFQ+IGRhdGEgPSBuZXcgSWREYXRhPFQ+KGNvZGUsIGV4cGVjdGVkTWFwcywgY29tcGlsZWREYXRhKTsKICBib29sIGhhc0ZhaWx1cmUgPSBmYWxzZTsKICBTZXQ8VXJpPiBuZWVkZWREaWZmcyA9IG5ldyBTZXQ8VXJpPigpOwoKICB2b2lkIGNoZWNrQWN0dWFsTWFwKAogICAgICBNYXA8SWQsIEFjdHVhbERhdGE8VD4+IGFjdHVhbE1hcCwgTWFwPElkLCBJZFZhbHVlPiBleHBlY3RlZE1hcCwKICAgICAgW1VyaSB1cmldKSB7CiAgICBib29sIGhhc0xvY2FsRmFpbHVyZSA9IGZhbHNlOwogICAgYWN0dWFsTWFwLmZvckVhY2goKElkIGlkLCBBY3R1YWxEYXRhPFQ+IGFjdHVhbERhdGEpIHsKICAgICAgVCBhY3R1YWwgPSBhY3R1YWxEYXRhLnZhbHVlOwogICAgICBTdHJpbmcgYWN0dWFsVGV4dCA9IGRhdGFWYWxpZGF0b3IuZ2V0VGV4dChhY3R1YWwpOwoKICAgICAgaWYgKCFleHBlY3RlZE1hcC5jb250YWluc0tleShpZCkpIHsKICAgICAgICBpZiAoIWRhdGFWYWxpZGF0b3IuaXNFbXB0eShhY3R1YWwpKSB7CiAgICAgICAgICBTdHJpbmcgYWN0dWFsVmFsdWVUZXh0ID0gSWRWYWx1ZS5pZFRvU3RyaW5nKGlkLCBhY3R1YWxUZXh0KTsKICAgICAgICAgIGNvbXBpbGVkRGF0YS5yZXBvcnRFcnJvcigKICAgICAgICAgICAgICBhY3R1YWxEYXRhLnVyaSwKICAgICAgICAgICAgICBhY3R1YWxEYXRhLm9mZnNldCwKICAgICAgICAgICAgICBzdWNjaW5jdAogICAgICAgICAgICAgICAgICA/ICdFWFRSQSAkbW9kZU5hbWUgREFUQSBmb3IgJHtpZC5kZXNjcmlwdG9yfScKICAgICAgICAgICAgICAgICAgOiAnRVhUUkEgJG1vZGVOYW1lIERBVEEgZm9yICR7aWQuZGVzY3JpcHRvcn06XG4gJwogICAgICAgICAgICAgICAgICAgICAgJ29iamVjdCAgIDogJHthY3R1YWxEYXRhLm9iamVjdFRleHR9XG4gJwogICAgICAgICAgICAgICAgICAgICAgJ2FjdHVhbCAgIDogJHtjb2xvcml6ZUFjdHVhbChhY3R1YWxWYWx1ZVRleHQpfVxuICcKICAgICAgICAgICAgICAgICAgICAgICdEYXRhIHdhcyBleHBlY3RlZCBmb3IgdGhlc2UgaWRzOiAke2V4cGVjdGVkTWFwLmtleXN9JywKICAgICAgICAgICAgICBzdWNjaW5jdDogc3VjY2luY3QpOwogICAgICAgICAgaWYgKGZpbHRlckFjdHVhbERhdGEgPT0gbnVsbCB8fCBmaWx0ZXJBY3R1YWxEYXRhKG51bGwsIGFjdHVhbERhdGEpKSB7CiAgICAgICAgICAgIGhhc0xvY2FsRmFpbHVyZSA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIElkVmFsdWUgZXhwZWN0ZWQgPSBleHBlY3RlZE1hcFtpZF07CiAgICAgICAgU3RyaW5nIHVuZXhwZWN0ZWRNZXNzYWdlID0KICAgICAgICAgICAgZGF0YVZhbGlkYXRvci5pc0FzRXhwZWN0ZWQoYWN0dWFsLCBleHBlY3RlZC52YWx1ZSk7CiAgICAgICAgaWYgKHVuZXhwZWN0ZWRNZXNzYWdlICE9IG51bGwpIHsKICAgICAgICAgIFN0cmluZyBhY3R1YWxWYWx1ZVRleHQgPSBJZFZhbHVlLmlkVG9TdHJpbmcoaWQsIGFjdHVhbFRleHQpOwogICAgICAgICAgY29tcGlsZWREYXRhLnJlcG9ydEVycm9yKAogICAgICAgICAgICAgIGFjdHVhbERhdGEudXJpLAogICAgICAgICAgICAgIGFjdHVhbERhdGEub2Zmc2V0LAogICAgICAgICAgICAgIHN1Y2NpbmN0CiAgICAgICAgICAgICAgICAgID8gJ1VORVhQRUNURUQgJG1vZGVOYW1lIERBVEEgZm9yICR7aWQuZGVzY3JpcHRvcn0nCiAgICAgICAgICAgICAgICAgIDogJ1VORVhQRUNURUQgJG1vZGVOYW1lIERBVEEgZm9yICR7aWQuZGVzY3JpcHRvcn06XG4gJwogICAgICAgICAgICAgICAgICAgICAgJ2RldGFpbCAgOiAke2NvbG9yaXplTWVzc2FnZSh1bmV4cGVjdGVkTWVzc2FnZSl9XG4gJwogICAgICAgICAgICAgICAgICAgICAgJ29iamVjdCAgOiAke2FjdHVhbERhdGEub2JqZWN0VGV4dH1cbiAnCiAgICAgICAgICAgICAgICAgICAgICAnZXhwZWN0ZWQ6ICR7Y29sb3JpemVFeHBlY3RlZCgnJGV4cGVjdGVkJyl9XG4gJwogICAgICAgICAgICAgICAgICAgICAgJ2FjdHVhbCAgOiAke2NvbG9yaXplQWN0dWFsKGFjdHVhbFZhbHVlVGV4dCl9JywKICAgICAgICAgICAgICBzdWNjaW5jdDogc3VjY2luY3QpOwogICAgICAgICAgaWYgKGZpbHRlckFjdHVhbERhdGEgPT0gbnVsbCB8fAogICAgICAgICAgICAgIGZpbHRlckFjdHVhbERhdGEoZXhwZWN0ZWQsIGFjdHVhbERhdGEpKSB7CiAgICAgICAgICAgIGhhc0xvY2FsRmFpbHVyZSA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIGlmIChoYXNMb2NhbEZhaWx1cmUpIHsKICAgICAgaGFzRmFpbHVyZSA9IHRydWU7CiAgICAgIGlmICh1cmkgIT0gbnVsbCkgewogICAgICAgIG5lZWRlZERpZmZzLmFkZCh1cmkpOwogICAgICB9CiAgICB9CiAgfQoKICBkYXRhLmFjdHVhbE1hcHMuZm9yRWFjaCgoVXJpIHVyaSwgTWFwPElkLCBBY3R1YWxEYXRhPFQ+PiBhY3R1YWxNYXApIHsKICAgIGNoZWNrQWN0dWFsTWFwKGFjdHVhbE1hcCwgZGF0YS5leHBlY3RlZE1hcHNbdXJpXSwgdXJpKTsKICB9KTsKICBjaGVja0FjdHVhbE1hcChkYXRhLmFjdHVhbE1hcHMuZ2xvYmFsRGF0YSwgZGF0YS5leHBlY3RlZE1hcHMuZ2xvYmFsRGF0YSk7CgogIFNldDxJZD4gbWlzc2luZ0lkcyA9IG5ldyBTZXQ8SWQ+KCk7CiAgdm9pZCBjaGVja01pc3NpbmcoCiAgICAgIE1hcDxJZCwgSWRWYWx1ZT4gZXhwZWN0ZWRNYXAsIE1hcDxJZCwgQWN0dWFsRGF0YTxUPj4gYWN0dWFsTWFwLAogICAgICBbVXJpIHVyaV0pIHsKICAgIGV4cGVjdGVkTWFwLmZvckVhY2goKElkIGlkLCBJZFZhbHVlIGV4cGVjdGVkKSB7CiAgICAgIGlmICghYWN0dWFsTWFwLmNvbnRhaW5zS2V5KGlkKSkgewogICAgICAgIG1pc3NpbmdJZHMuYWRkKGlkKTsKICAgICAgICBTdHJpbmcgbWVzc2FnZSA9ICdNSVNTSU5HICRtb2RlTmFtZSBEQVRBIGZvciAke2lkLmRlc2NyaXB0b3J9OiAnCiAgICAgICAgICAgICdFeHBlY3RlZCAke2NvbG9yaXplRXhwZWN0ZWQoJyRleHBlY3RlZCcpfSc7CiAgICAgICAgaWYgKHVyaSAhPSBudWxsKSB7CiAgICAgICAgICBjb21waWxlZERhdGEucmVwb3J0RXJyb3IoCiAgICAgICAgICAgICAgdXJpLCBjb21waWxlZERhdGEuZ2V0T2Zmc2V0RnJvbUlkKGlkLCB1cmkpLCBtZXNzYWdlLAogICAgICAgICAgICAgIHN1Y2NpbmN0OiBzdWNjaW5jdCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHByaW50KG1lc3NhZ2UpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICBpZiAobWlzc2luZ0lkcy5pc05vdEVtcHR5ICYmIHVyaSAhPSBudWxsKSB7CiAgICAgIG5lZWRlZERpZmZzLmFkZCh1cmkpOwogICAgfQogIH0KCiAgZGF0YS5leHBlY3RlZE1hcHMuZm9yRWFjaCgoVXJpIHVyaSwgTWFwPElkLCBJZFZhbHVlPiBleHBlY3RlZE1hcCkgewogICAgY2hlY2tNaXNzaW5nKGV4cGVjdGVkTWFwLCBkYXRhLmFjdHVhbE1hcHNbdXJpXSwgdXJpKTsKICB9KTsKICBjaGVja01pc3NpbmcoZGF0YS5leHBlY3RlZE1hcHMuZ2xvYmFsRGF0YSwgZGF0YS5hY3R1YWxNYXBzLmdsb2JhbERhdGEpOwogIGlmICghc3VjY2luY3QpIHsKICAgIGZvciAoVXJpIHVyaSBpbiBuZWVkZWREaWZmcykgewogICAgICBwcmludCgnLS1hbm5vdGF0aW9ucyBkaWZmIFske3VyaS5wYXRoU2VnbWVudHMubGFzdH1dLS0tLS0tLS0tLS0tLScpOwogICAgICBwcmludChkYXRhLmRpZmZDb2RlKHVyaSwgZGF0YVZhbGlkYXRvcikpOwogICAgICBwcmludCgnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScpOwogICAgfQogIH0KICBpZiAobWlzc2luZ0lkcy5pc05vdEVtcHR5KSB7CiAgICBwcmludCgiTUlTU0lORyBpZHM6ICR7bWlzc2luZ0lkc30uIik7CiAgICBoYXNGYWlsdXJlID0gdHJ1ZTsKICB9CiAgaWYgKGhhc0ZhaWx1cmUgJiYgZmF0YWxFcnJvcnMpIHsKICAgIG9uRmFpbHVyZSgnRXJyb3JzIGZvdW5kLicpOwogIH0KICByZXR1cm4gaGFzRmFpbHVyZTsKfQoKdHlwZWRlZiBGdXR1cmU8Ym9vbD4gUnVuVGVzdEZ1bmN0aW9uKFRlc3REYXRhIHRlc3REYXRhLAogICAge2Jvb2wgdGVzdEFmdGVyRmFpbHVyZXMsIGJvb2wgdmVyYm9zZSwgYm9vbCBzdWNjaW5jdCwgYm9vbCBwcmludENvZGV9KTsKCi8vLyBDaGVjayBjb2RlIGZvciBhbGwgdGVzdHMgaW4gW2RhdGFEaXJdIHVzaW5nIFtydW5UZXN0XS4KRnV0dXJlIHJ1blRlc3RzKERpcmVjdG9yeSBkYXRhRGlyLAogICAge0xpc3Q8U3RyaW5nPiBhcmdzOiBjb25zdCA8U3RyaW5nPltdLAogICAgaW50IHNoYXJkczogMSwKICAgIGludCBzaGFyZEluZGV4OiAwLAogICAgdm9pZCBvblRlc3QoVXJpIHVyaSksCiAgICBJdGVyYWJsZTxTdHJpbmc+IHN1cHBvcnRlZE1hcmtlcnMsCiAgICBVcmkgY3JlYXRlVXJpRm9yRmlsZU5hbWUoU3RyaW5nIGZpbGVOYW1lKSwKICAgIHZvaWQgb25GYWlsdXJlKFN0cmluZyBtZXNzYWdlKSwKICAgIFJ1blRlc3RGdW5jdGlvbiBydW5UZXN0fSkgYXN5bmMgewogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1cHBvcnQgLS1zaG93IHRvIHNob3cgYWN0dWFsIGRhdGEgZm9yIGFuIGlucHV0LgogIGFyZ3MgPSBhcmdzLnRvTGlzdCgpOwogIGJvb2wgdmVyYm9zZSA9IGFyZ3MucmVtb3ZlKCctdicpOwogIGJvb2wgc3VjY2luY3QgPSBhcmdzLnJlbW92ZSgnLXMnKTsKICBib29sIHNob3VsZENvbnRpbnVlID0gYXJncy5yZW1vdmUoJy1jJyk7CiAgYm9vbCB0ZXN0QWZ0ZXJGYWlsdXJlcyA9IGFyZ3MucmVtb3ZlKCctYScpOwogIGJvb2wgcHJpbnRDb2RlID0gYXJncy5yZW1vdmUoJy1wJyk7CiAgYm9vbCBjb250aW51ZWQgPSBmYWxzZTsKICBib29sIGhhc0ZhaWx1cmVzID0gZmFsc2U7CgogIFN0cmluZyByZWxhdGl2ZURpciA9IGRhdGFEaXIudXJpLnBhdGgucmVwbGFjZUFsbChVcmkuYmFzZS5wYXRoLCAnJyk7CiAgcHJpbnQoJ0RhdGEgZGlyOiAke3JlbGF0aXZlRGlyfScpOwogIExpc3Q8RmlsZVN5c3RlbUVudGl0eT4gZW50aXRpZXMgPSBkYXRhRGlyLmxpc3RTeW5jKCk7CiAgaWYgKHNoYXJkcyA+IDEpIHsKICAgIGludCBzdGFydCA9IGVudGl0aWVzLmxlbmd0aCAqIHNoYXJkSW5kZXggfi8gc2hhcmRzOwogICAgaW50IGVuZCA9IGVudGl0aWVzLmxlbmd0aCAqIChzaGFyZEluZGV4ICsgMSkgfi8gc2hhcmRzOwogICAgZW50aXRpZXMgPSBlbnRpdGllcy5zdWJsaXN0KHN0YXJ0LCBlbmQpOwogIH0KICBpbnQgdGVzdENvdW50ID0gMDsKICBmb3IgKEZpbGVTeXN0ZW1FbnRpdHkgZW50aXR5IGluIGVudGl0aWVzKSB7CiAgICBTdHJpbmcgbmFtZSA9IGVudGl0eS51cmkucGF0aFNlZ21lbnRzLmxhc3Q7CiAgICBpZiAoZW50aXR5IGlzIERpcmVjdG9yeSkgewogICAgICBuYW1lID0gZW50aXR5LnVyaS5wYXRoU2VnbWVudHNbZW50aXR5LnVyaS5wYXRoU2VnbWVudHMubGVuZ3RoIC0gMl07CiAgICB9CiAgICBpZiAoYXJncy5pc05vdEVtcHR5ICYmICFhcmdzLmNvbnRhaW5zKG5hbWUpICYmICFjb250aW51ZWQpIGNvbnRpbnVlOwogICAgaWYgKHNob3VsZENvbnRpbnVlKSBjb250aW51ZWQgPSB0cnVlOwogICAgdGVzdENvdW50Kys7CgogICAgaWYgKG9uVGVzdCAhPSBudWxsKSB7CiAgICAgIG9uVGVzdChlbnRpdHkudXJpKTsKICAgIH0KICAgIHByaW50KCctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJyk7CgogICAgVGVzdERhdGEgdGVzdERhdGEgPSBjb21wdXRlVGVzdERhdGEoZW50aXR5LAogICAgICAgIHN1cHBvcnRlZE1hcmtlcnM6IHN1cHBvcnRlZE1hcmtlcnMsCiAgICAgICAgY3JlYXRlVXJpRm9yRmlsZU5hbWU6IGNyZWF0ZVVyaUZvckZpbGVOYW1lLAogICAgICAgIG9uRmFpbHVyZTogb25GYWlsdXJlKTsKICAgIHByaW50KCdUZXN0OiAke3Rlc3REYXRhLnRlc3RGaWxlVXJpfScpOwoKICAgIGlmIChhd2FpdCBydW5UZXN0KHRlc3REYXRhLAogICAgICAgIHRlc3RBZnRlckZhaWx1cmVzOiB0ZXN0QWZ0ZXJGYWlsdXJlcywKICAgICAgICB2ZXJib3NlOiB2ZXJib3NlLAogICAgICAgIHN1Y2NpbmN0OiBzdWNjaW5jdCwKICAgICAgICBwcmludENvZGU6IHByaW50Q29kZSkpIHsKICAgICAgaGFzRmFpbHVyZXMgPSB0cnVlOwogICAgfQogIH0KICBpZiAoaGFzRmFpbHVyZXMpIHsKICAgIG9uRmFpbHVyZSgnRXJyb3JzIGZvdW5kLicpOwogIH0KICBpZiAodGVzdENvdW50ID09IDApIHsKICAgIG9uRmFpbHVyZSgiTm8gZmlsZXMgd2VyZSB0ZXN0ZWQuIik7CiAgfQp9CoKIAE5OPAESJRIpASAoKgFIJQ0REgMBMy0BPSYTQwsRBAIBSSQTQQsRBAIBRyUTQgsRBAIBSSUTQAsRBAIBSicTQgsRBAIBPSgTQwsRBAIBTw9IKUICAUwfQ0YCAUxLT08kRyE/KQFNOQFAMwQBQykEASw3OQYrBAEMFiokFy8wQhpLGRsYFQoVBiEXGxwGExoEAgFPKQRHRxQ1TDIoLUUBNj9MQjYlTCFCMkVMCjoPNjJFQAouCAYGAgFGBEwiBE4uNCgvJzYBExUiJRouHSZOL0kkOB4PThMIBgQBUCMQTAU9MEEEQSYdLDEFASFRMzE6NSdJSCsaQyEGBAEXUQIBIBEVGRgvJj4BUSUCATYhFQFNIzUBS0YUKwFAATc4QDQnEi4oCBgEAThQJkA2Li4wPBQ0PiMUNCwICDgmIjIUNT4ICBgEAScBUQIBMSROSRY6AUAeATggAgEuQSEBDEAXGSY6BhEEAQwkHQQBDCYXBAIBUCgPOicXHAYYMwY1PAYSBCEpBBgCAVAxEiYxJ1ABPSFRBj0EASxCAR9AOksIPwQBP0A6NSIhSSc7PC8eKT8WLTkKCAg6Li8eKSEWLTkKCAg/BAEoMwQCAU4RGxUVIi0iJkgcGi1EGykBF0YTIjojOQEqLkckHiEXQEQ/SU4jUCQMCg8sI0ApRyQeIRdFSUs+RkYjKjgkDAoICBsZGR4IBgQBSDwGTAEmFUYTNCgcSTkbJEMjERoKCAgwHAYEAUY6BkoTI0swSwYEHyoXBCMgBBUCAThMATsjKhMXGicvJCZLGCQlKy4mGhwBRyU4FDg8LQQVLjAfSgZJKhEBGhoGTwEwLDQfLAEgLhocIRoGBBUgBBgoBAIBLXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy90ZXN0aW5nL2lkX3Rlc3RpbmcuZGFydC9zZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY3J5cHRvL2xpYi9jcnlwdG8uZGFydIFsLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmV4cG9ydCAnc3JjL2RpZ2VzdC5kYXJ0JzsKZXhwb3J0ICdzcmMvaGFzaC5kYXJ0JzsKZXhwb3J0ICdzcmMvaG1hYy5kYXJ0JzsKZXhwb3J0ICdzcmMvbWQ1LmRhcnQnOwpleHBvcnQgJ3NyYy9zaGExLmRhcnQnOwpleHBvcnQgJ3NyYy9zaGEyNTYuZGFydCc7CgwATk48ARoYGBcYGgEacGFja2FnZTpjcnlwdG8vY3J5cHRvLmRhcnRBc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL3Rlc3RpbmcvYW5ub3RhdGVkX2NvZGVfaGVscGVyLmRhcnSa6C8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpjb25zdCBpbnQgX0xGID0gMHgwQTsKY29uc3QgaW50IF9DUiA9IDB4MEQ7Cgpjb25zdCBQYXR0ZXJuIGF0QnJhY2VTdGFydCA9ICdAeyc7CmNvbnN0IFBhdHRlcm4gYnJhY2VFbmQgPSAnfSc7CgpmaW5hbCBQYXR0ZXJuIGNvbW1lbnRTdGFydCA9IG5ldyBSZWdFeHAocicvXConKTsKZmluYWwgUGF0dGVybiBjb21tZW50RW5kID0gbmV3IFJlZ0V4cChyJ1wqL1xzKicpOwoKY2xhc3MgQW5ub3RhdGlvbiB7CiAgLy8vIDEtYmFzZWQgbGluZSBudW1iZXIgb2YgdGhlIGFubm90YXRpb24uCiAgZmluYWwgaW50IGxpbmVObzsKCiAgLy8vIDEtYmFzZWQgY29sdW1uIG51bWJlciBvZiB0aGUgYW5ub3RhdGlvbi4KICBmaW5hbCBpbnQgY29sdW1uTm87CgogIC8vLyAwLWJhc2VkIGNoYXJhY3RlciBvZmZzZXQgIG9mIHRoZSBhbm5vdGF0aW9uIHdpdGhpbiB0aGUgc291cmNlIHRleHQuCiAgZmluYWwgaW50IG9mZnNldDsKCiAgLy8vIFRoZSB0ZXh0IGluIHRoZSBhbm5vdGF0aW9uLgogIGZpbmFsIFN0cmluZyB0ZXh0OwoKICBBbm5vdGF0aW9uKHRoaXMubGluZU5vLCB0aGlzLmNvbHVtbk5vLCB0aGlzLm9mZnNldCwgdGhpcy50ZXh0KTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgJ0Fubm90YXRpb24obGluZU5vPSRsaW5lTm8sY29sdW1uTm89JGNvbHVtbk5vLG9mZnNldD0kb2Zmc2V0LHRleHQ9JHRleHQpJzsKfQoKLy8vIEEgc291cmNlIGNvZGUgdGV4dCB3aXRoIGFubm90YXRlZCBwb3NpdGlvbnMuCi8vLwovLy8gQW4gW0Fubm90YXRlZENvZGVdIGNhbiBiZSBjcmVhdGVkIGZyb20gYSBbU3RyaW5nXSBvZiBzb3VyY2UgY29kZSB3aGVyZQovLy8gYW5ub3RhdGVkIHBvc2l0aW9ucyBhcmUgZW1iZWRkZWQsIGJ5IGRlZmF1bHQgdXNpbmcgdGhlIHN5bnRheCBgQHt0ZXh0fWAuCi8vLyBGb3IgaW5zdGFuY2UKLy8vCi8vLyAgICAgbWFpbigpIHsKLy8vICAgICAgIEB7Zm9vLWNhbGx9Zm9vKCk7Ci8vLyAgICAgICBiYXJAe2Jhci1hcmdzfSgpOwovLy8gICAgIH0KLy8vCi8vLyAgdGhlIHBvc2l0aW9uIG9mIGBmb29gIGNhbGwgd2lsbCBob2xkIGFuIGFubm90YXRpb24gd2l0aCB0ZXh0ICdmb28tY2FsbCcgYW5kCi8vLyAgdGhlIHBvc2l0aW9uIG9mIGBiYXJgIGFyZ3VtZW50cyB3aWxsIGhvbGQgYW4gYW5ub3RhdGlvbiB3aXRoIHRleHQKLy8vICAnYmFyLWFyZ3MnLgovLy8KLy8vICBBbm5vdGF0aW9uIHRleHQgY2Fubm90IHNwYW4gbXVsdGlwbGUgbGluZXMgYW5kIGNhbm5vdCBjb250YWluICd9Jy4KY2xhc3MgQW5ub3RhdGVkQ29kZSB7CiAgLy8vIFRoZSBzb3VyY2UgY29kZSB3aXRob3V0IGFubm90YXRpb25zLgogIGZpbmFsIFN0cmluZyBzb3VyY2VDb2RlOwoKICAvLy8gVGhlIGFubm90YXRpb25zIGZvciB0aGUgc291cmNlIGNvZGUuCiAgZmluYWwgTGlzdDxBbm5vdGF0aW9uPiBhbm5vdGF0aW9uczsKCiAgTGlzdDxpbnQ+IF9saW5lU3RhcnRzOwoKICBBbm5vdGF0ZWRDb2RlKHRoaXMuc291cmNlQ29kZSwgdGhpcy5hbm5vdGF0aW9ucyk7CgogIEFubm90YXRlZENvZGUuaW50ZXJuYWwodGhpcy5zb3VyY2VDb2RlLCB0aGlzLmFubm90YXRpb25zLCB0aGlzLl9saW5lU3RhcnRzKTsKCiAgLy8vIENyZWF0ZXMgYW4gW0Fubm90YXRlZENvZGVdIGJ5IHByb2Nlc3NpbmcgW2Fubm90YXRlZENvZGVdLiBBbm5vdGF0aW9uCiAgLy8vIGRlbGltaXRlZCBieSBbc3RhcnRdIGFuZCBbZW5kXSBhcmUgY29udmVydGVkIGludG8gW0Fubm90YXRpb25dcyBhbmQKICAvLy8gcmVtb3ZlZCBmcm9tIHRoZSBbYW5ub3RhdGVkQ29kZV0gdG8gcHJvZHVjZSB0aGUgc291cmNlIGNvZGUuCiAgZmFjdG9yeSBBbm5vdGF0ZWRDb2RlLmZyb21UZXh0KFN0cmluZyBhbm5vdGF0ZWRDb2RlLAogICAgICBbUGF0dGVybiBzdGFydCA9IGF0QnJhY2VTdGFydCwgUGF0dGVybiBlbmQgPSBicmFjZUVuZF0pIHsKICAgIFN0cmluZ0J1ZmZlciBjb2RlQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgTGlzdDxBbm5vdGF0aW9uPiBhbm5vdGF0aW9ucyA9IDxBbm5vdGF0aW9uPltdOwogICAgaW50IGluZGV4ID0gMDsKICAgIGludCBvZmZzZXQgPSAwOwogICAgaW50IGxpbmVObyA9IDE7CiAgICBpbnQgY29sdW1uTm8gPSAxOwogICAgTGlzdDxpbnQ+IGxpbmVTdGFydHMgPSA8aW50PltdOwogICAgbGluZVN0YXJ0cy5hZGQob2Zmc2V0KTsKICAgIHdoaWxlIChpbmRleCA8IGFubm90YXRlZENvZGUubGVuZ3RoKSB7CiAgICAgIE1hdGNoIHN0YXJ0TWF0Y2ggPSBzdGFydC5tYXRjaEFzUHJlZml4KGFubm90YXRlZENvZGUsIGluZGV4KTsKICAgICAgaWYgKHN0YXJ0TWF0Y2ggIT0gbnVsbCkgewogICAgICAgIGludCBzdGFydEluZGV4ID0gc3RhcnRNYXRjaC5lbmQ7CiAgICAgICAgSXRlcmFibGU8TWF0Y2g+IGVuZE1hdGNoZXMgPQogICAgICAgICAgICBlbmQuYWxsTWF0Y2hlcyhhbm5vdGF0ZWRDb2RlLCBzdGFydE1hdGNoLmVuZCk7CiAgICAgICAgaWYgKCFlbmRNYXRjaGVzLmlzRW1wdHkpIHsKICAgICAgICAgIE1hdGNoIGVuZE1hdGNoID0gZW5kTWF0Y2hlcy5maXJzdDsKICAgICAgICAgIGFubm90YXRlZENvZGUuaW5kZXhPZihlbmQsIHN0YXJ0SW5kZXgpOwogICAgICAgICAgU3RyaW5nIHRleHQgPSBhbm5vdGF0ZWRDb2RlLnN1YnN0cmluZyhzdGFydE1hdGNoLmVuZCwgZW5kTWF0Y2guc3RhcnQpOwogICAgICAgICAgYW5ub3RhdGlvbnMuYWRkKG5ldyBBbm5vdGF0aW9uKGxpbmVObywgY29sdW1uTm8sIG9mZnNldCwgdGV4dCkpOwogICAgICAgICAgaW5kZXggPSBlbmRNYXRjaC5lbmQ7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGludCBjaGFyQ29kZSA9IGFubm90YXRlZENvZGUuY29kZVVuaXRBdChpbmRleCk7CiAgICAgIHN3aXRjaCAoY2hhckNvZGUpIHsKICAgICAgICBjYXNlIF9MRjoKICAgICAgICAgIGNvZGVCdWZmZXIud3JpdGUoJ1xuJyk7CiAgICAgICAgICBvZmZzZXQrKzsKICAgICAgICAgIGxpbmVTdGFydHMuYWRkKG9mZnNldCk7CiAgICAgICAgICBsaW5lTm8rKzsKICAgICAgICAgIGNvbHVtbk5vID0gMTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgX0NSOgogICAgICAgICAgaWYgKGluZGV4ICsgMSA8IGFubm90YXRlZENvZGUubGVuZ3RoICYmCiAgICAgICAgICAgICAgYW5ub3RhdGVkQ29kZS5jb2RlVW5pdEF0KGluZGV4ICsgMSkgPT0gX0xGKSB7CiAgICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgICB9CiAgICAgICAgICBjb2RlQnVmZmVyLndyaXRlKCdcbicpOwogICAgICAgICAgb2Zmc2V0Kys7CiAgICAgICAgICBsaW5lU3RhcnRzLmFkZChvZmZzZXQpOwogICAgICAgICAgbGluZU5vKys7CiAgICAgICAgICBjb2x1bW5ObyA9IDE7CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgY29kZUJ1ZmZlci53cml0ZUNoYXJDb2RlKGNoYXJDb2RlKTsKICAgICAgICAgIG9mZnNldCsrOwogICAgICAgICAgY29sdW1uTm8rKzsKICAgICAgfQogICAgICBpbmRleCsrOwogICAgfQogICAgbGluZVN0YXJ0cy5hZGQob2Zmc2V0KTsKICAgIHJldHVybiBuZXcgQW5ub3RhdGVkQ29kZS5pbnRlcm5hbCgKICAgICAgICBjb2RlQnVmZmVyLnRvU3RyaW5nKCksIGFubm90YXRpb25zLCBsaW5lU3RhcnRzKTsKICB9CgogIHZvaWQgX2Vuc3VyZUxpbmVTdGFydHMoKSB7CiAgICBpZiAoX2xpbmVTdGFydHMgPT0gbnVsbCkgewogICAgICBpbnQgaW5kZXggPSAwOwogICAgICBpbnQgb2Zmc2V0ID0gMDsKICAgICAgX2xpbmVTdGFydHMgPSA8aW50PltdOwogICAgICBfbGluZVN0YXJ0cy5hZGQob2Zmc2V0KTsKICAgICAgd2hpbGUgKGluZGV4IDwgc291cmNlQ29kZS5sZW5ndGgpIHsKICAgICAgICBpbnQgY2hhckNvZGUgPSBzb3VyY2VDb2RlLmNvZGVVbml0QXQoaW5kZXgpOwogICAgICAgIHN3aXRjaCAoY2hhckNvZGUpIHsKICAgICAgICAgIGNhc2UgX0xGOgogICAgICAgICAgICBvZmZzZXQrKzsKICAgICAgICAgICAgX2xpbmVTdGFydHMuYWRkKG9mZnNldCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBfQ1I6CiAgICAgICAgICAgIGlmIChpbmRleCArIDEgPCBzb3VyY2VDb2RlLmxlbmd0aCAmJgogICAgICAgICAgICAgICAgc291cmNlQ29kZS5jb2RlVW5pdEF0KGluZGV4ICsgMSkgPT0gX0xGKSB7CiAgICAgICAgICAgICAgaW5kZXgrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBvZmZzZXQrKzsKICAgICAgICAgICAgX2xpbmVTdGFydHMuYWRkKG9mZnNldCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgb2Zmc2V0Kys7CiAgICAgICAgfQogICAgICAgIGluZGV4Kys7CiAgICAgIH0KICAgICAgX2xpbmVTdGFydHMuYWRkKG9mZnNldCk7CiAgICB9CiAgfQoKICB2b2lkIGFkZEFubm90YXRpb24oaW50IGxpbmVObywgaW50IGNvbHVtbk5vLCBTdHJpbmcgdGV4dCkgewogICAgX2Vuc3VyZUxpbmVTdGFydHMoKTsKICAgIGludCBvZmZzZXQgPSBfbGluZVN0YXJ0c1tsaW5lTm8gLSAxXSArIChjb2x1bW5ObyAtIDEpOwogICAgYW5ub3RhdGlvbnMuYWRkKG5ldyBBbm5vdGF0aW9uKGxpbmVObywgY29sdW1uTm8sIG9mZnNldCwgdGV4dCkpOwogIH0KCiAgU3RyaW5nIHRvVGV4dCgpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIExpc3Q8QW5ub3RhdGlvbj4gbGlzdCA9IGFubm90YXRpb25zLnRvTGlzdCgpCiAgICAgIC4uc29ydCgoYSwgYikgPT4gYS5vZmZzZXQuY29tcGFyZVRvKGIub2Zmc2V0KSk7CiAgICBpbnQgb2Zmc2V0ID0gMDsKICAgIGZvciAoQW5ub3RhdGlvbiBhbm5vdGF0aW9uIGluIGxpc3QpIHsKICAgICAgc2Iud3JpdGUoc291cmNlQ29kZS5zdWJzdHJpbmcob2Zmc2V0LCBhbm5vdGF0aW9uLm9mZnNldCkpOwogICAgICBzYi53cml0ZSgnQHske2Fubm90YXRpb24udGV4dH19Jyk7CiAgICAgIG9mZnNldCA9IGFubm90YXRpb24ub2Zmc2V0OwogICAgfQogICAgc2Iud3JpdGUoc291cmNlQ29kZS5zdWJzdHJpbmcob2Zmc2V0KSk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCi8vLyBTcGxpdCB0aGUgYW5ub3RhdGlvbnMgaW4gW2Fubm90YXRlZENvZGVdIGJ5IFtwcmVmaXhlc10uCi8vLwovLy8gUmV0dXJucyBhIG1hcCBjb250YWluaW5nIGFuIFtBbm5vdGF0ZWRDb2RlXSBvYmplY3QgZm9yIGVhY2ggcHJlZml4LAovLy8gY29udGFpbmluZyBvbmx5IHRoZSBhbm5vdGF0aW9ucyB3aG9zZSB0ZXh0IHN0YXJ0ZWQgd2l0aCB0aGUgZ2l2ZW4gcHJlZml4LgovLy8gSWYgbm8gcHJlZml4IG1hdGNoIHRoZSBhbm5vdGF0aW9uIHRleHQsIHRoZSBhbm5vdGF0aW9uIGlzIGFkZGVkIHRvIGFsbAovLy8gW0Fubm90YXRlZENvZGVdIG9iamVjdHMuCi8vLwovLy8gVGhlIHByZWZpeGVzIGFyZSByZW1vdmVkIGZyb20gdGhlIGFubm90YXRpb24gdGV4dHMgaW4gdGhlIHJldHVybmVkCi8vLyBbQW5ub3RhdGVkQ29kZV0gb2JqZWN0cy4KTWFwPFN0cmluZywgQW5ub3RhdGVkQ29kZT4gc3BsaXRCeVByZWZpeGVzKAogICAgQW5ub3RhdGVkQ29kZSBhbm5vdGF0ZWRDb2RlLCBJdGVyYWJsZTxTdHJpbmc+IHByZWZpeGVzKSB7CiAgU2V0PFN0cmluZz4gcHJlZml4U2V0ID0gcHJlZml4ZXMudG9TZXQoKTsKICBNYXA8U3RyaW5nLCBMaXN0PEFubm90YXRpb24+PiBtYXAgPSA8U3RyaW5nLCBMaXN0PEFubm90YXRpb24+Pnt9OwogIGZvciAoU3RyaW5nIHByZWZpeCBpbiBwcmVmaXhTZXQpIHsKICAgIG1hcFtwcmVmaXhdID0gPEFubm90YXRpb24+W107CiAgfQogIG91dGVyOgogIGZvciAoQW5ub3RhdGlvbiBhbm5vdGF0aW9uIGluIGFubm90YXRlZENvZGUuYW5ub3RhdGlvbnMpIHsKICAgIGludCBkb3RQb3MgPSBhbm5vdGF0aW9uLnRleHQuaW5kZXhPZignLicpOwogICAgaWYgKGRvdFBvcyAhPSAtMSkgewogICAgICBTdHJpbmcgYW5ub3RhdGlvblByZWZpeCA9IGFubm90YXRpb24udGV4dC5zdWJzdHJpbmcoMCwgZG90UG9zKTsKICAgICAgU3RyaW5nIGFubm90YXRpb25UZXh0ID0gYW5ub3RhdGlvbi50ZXh0LnN1YnN0cmluZyhkb3RQb3MgKyAxKTsKICAgICAgTGlzdDxTdHJpbmc+IG1hcmtlcnMgPSBhbm5vdGF0aW9uUHJlZml4LnNwbGl0KCd8JykudG9MaXN0KCk7CiAgICAgIGlmIChwcmVmaXhTZXQuY29udGFpbnNBbGwobWFya2VycykpIHsKICAgICAgICBmb3IgKFN0cmluZyBwYXJ0IGluIG1hcmtlcnMpIHsKICAgICAgICAgIG1hcFtwYXJ0XS5hZGQobmV3IEFubm90YXRpb24oYW5ub3RhdGlvbi5saW5lTm8sIGFubm90YXRpb24uY29sdW1uTm8sCiAgICAgICAgICAgICAgYW5ub3RhdGlvbi5vZmZzZXQsIGFubm90YXRpb25UZXh0KSk7CiAgICAgICAgfQogICAgICAgIGNvbnRpbnVlIG91dGVyOwogICAgICB9CiAgICB9CiAgICBmb3IgKFN0cmluZyBwcmVmaXggaW4gcHJlZml4U2V0KSB7CiAgICAgIG1hcFtwcmVmaXhdLmFkZChhbm5vdGF0aW9uKTsKICAgIH0KICB9CiAgTWFwPFN0cmluZywgQW5ub3RhdGVkQ29kZT4gc3BsaXQgPSA8U3RyaW5nLCBBbm5vdGF0ZWRDb2RlPnt9OwogIG1hcC5mb3JFYWNoKChTdHJpbmcgcHJlZml4LCBMaXN0PEFubm90YXRpb24+IGFubm90YXRpb25zKSB7CiAgICBzcGxpdFtwcmVmaXhdID0gbmV3IEFubm90YXRlZENvZGUoYW5ub3RhdGVkQ29kZS5zb3VyY2VDb2RlLCBhbm5vdGF0aW9ucyk7CiAgfSk7CiAgcmV0dXJuIHNwbGl0Owp9CoDYAE5OPAEWFgEjHgExMgETLRQBLxYBShQBIhUBQgEXUQIBMQRLTREEERwcCgRRRxEESBYrGwErJgEZATQBTwFLSkM3QDIzExQUFiQcK0QgKSU7Iy0yUUsgFAoIATYaEiIUIhQYERIyPBUMIhQiFBgRES4UFggPBhwnOQQBHR8VFh0fKjUcFBYlExQxOxcOFiUTExYKEQgfBgQBPhk7RQQBFCoxNhQqQSkiBiwaBAIBPARITksdBEcdLD4sRCUiBAk9LxhGRUMsJ08zChgIBicjBgRAPk4GEAIBOHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy90ZXN0aW5nL2Fubm90YXRlZF9jb2RlX2hlbHBlci5kYXJ0LnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy90ZXN0aW5nL2lkLmRhcnSqpi8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgplbnVtIElkS2luZCB7CiAgLy8vIElkIHVzZWQgZm9yIHRvcCBsZXZlbCBvciBjbGFzcyBtZW1iZXJzLiBUaGlzIGlzIHVzZWQgaW4gW01lbWJlcklkXS4KICBtZW1iZXIsCgogIC8vLyBJZCB1c2VkIGZvciBjbGFzc2VzLiBUaGlzIGlzIHVzZWQgaW4gW0NsYXNzSWRdLgogIGNscywKCiAgLy8vIElkIHVzZWQgZm9yIGxpYnJhcmllcy4gVGhpcyBpcyB1c2VkIGluIFtMaWJyYXJ5SWRdLgogIGxpYnJhcnksCgogIC8vLyBJZCB1c2VkIGZvciBhIGNvZGUgcG9pbnQgYXQgY2VydGFpbiBvZmZzZXQuIFRoZSBpZCByZXByZXNlbnRzIHRoZSBkZWZhdWx0CiAgLy8vIHVzZSBvZiB0aGUgY29kZSBwb2ludCwgb2Z0ZW4gYSByZWFkIGFjY2Vzcy4gVGhpcyBpcyB1c2VkIGluIFtOb2RlSWRdLgogIG5vZGUsCgogIC8vLyBJZCB1c2VkIGZvciBhbiBpbnZvY2F0aW9uIGF0IGNlcnRhaW4gb2Zmc2V0LiBUaGlzIGlzIHVzZWQgaW4gW05vZGVJZF0uCiAgaW52b2tlLAoKICAvLy8gSWQgdXNlZCBmb3IgYW4gYXNzaWdubWVudCBhdCBjZXJ0YWluIG9mZnNldC4gVGhpcyBpcyB1c2VkIGluIFtOb2RlSWRdLgogIHVwZGF0ZSwKCiAgLy8vIElkIHVzZWQgZm9yIHRoZSBpdGVyYXRvciBleHByZXNzaW9uIG9mIGEgZm9yLWluIGF0IGNlcnRhaW4gb2Zmc2V0LiBUaGlzIGlzCiAgLy8vIHVzZWQgaW4gW05vZGVJZF0uCiAgaXRlcmF0b3IsCgogIC8vLyBJZCB1c2VkIGZvciB0aGUgaW1wbGljaXQgY2FsbCB0byBgSXRlcmF0b3IuY3VycmVudGAgaW4gYSBmb3ItaW4gYXQgY2VydGFpbgogIC8vLyBvZmZzZXQuIFRoaXMgaXMgdXNlZCBpbiBbTm9kZUlkXS4KICBjdXJyZW50LAoKICAvLy8gSWQgdXNlZCBmb3IgdGhlIGltcGxpY2l0IGNhbGwgdG8gYEl0ZXJhdG9yLm1vdmVOZXh0YCBpbiBhIGZvci1pbiBhdAogIC8vLyBjZXJ0YWluIG9mZnNldC4gVGhpcyBpcyB1c2VkIGluIFtOb2RlSWRdLgogIG1vdmVOZXh0LAoKICAvLy8gSWQgdXNlZCBmb3IgdGhlIGltcGxpY2l0IGFzIGV4cHJlc3Npb24gaW5zZXJ0ZWQgYnkgdGhlIGNvbXBpbGVyLgogIGltcGxpY2l0QXMsCgogIC8vLyBJZCB1c2VkIGZvciB0aGUgc3RhdGVtZW50IGF0IGNlcnRhaW4gb2Zmc2V0LiBUaGlzIGlzIHVzZWQgaW4gW05vZGVJZF0uCiAgc3RtdCwKCiAgLy8vIElkIHVzZWQgZm9yIHRoZSBlcnJvciByZXBvcnRlZCBhdCBjZXJ0YWluIG9mZnNldC4gVGhpcyBpcyB1c2VkIGluCiAgLy8vIFtOb2RlSWRdLgogIGVycm9yLAp9CgovLy8gSWQgZm9yIGEgY29kZSBwb2ludCBvciBlbGVtZW50LgphYnN0cmFjdCBjbGFzcyBJZCB7CiAgSWRLaW5kIGdldCBraW5kOwoKICAvLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGlkIHJlZmVycyB0byBhbiBlbGVtZW50IGRlZmluZWQgb3V0c2lkZSBvZiB0aGUgdGVzdAogIC8vLyBjYXNlIGl0c2VsZiAoZS5nLiBzb21lIHRlc3RzIG1heSBuZWVkIHRvIHJlZmVyIHRvIHByb3BlcnRpZXMgb2YgZWxlbWVudHMKICAvLy8gaW4gYGRhcnQ6Y29yZWApLgogIGJvb2wgZ2V0IGlzR2xvYmFsOwoKICAvLy8gRGlzcGxheSBuYW1lIGZvciB0aGlzIGlkLgogIFN0cmluZyBnZXQgZGVzY3JpcHRvcjsKfQoKY2xhc3MgSWRWYWx1ZSB7CiAgZmluYWwgSWQgaWQ7CiAgZmluYWwgU3RyaW5nIHZhbHVlOwoKICBjb25zdCBJZFZhbHVlKHRoaXMuaWQsIHRoaXMudmFsdWUpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IGlkLmhhc2hDb2RlICogMTMgKyB2YWx1ZS5oYXNoQ29kZSAqIDE3OwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIElkVmFsdWUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBpZCA9PSBvdGhlci5pZCAmJiB2YWx1ZSA9PSBvdGhlci52YWx1ZTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IGlkVG9TdHJpbmcoaWQsIHZhbHVlKTsKCiAgc3RhdGljIFN0cmluZyBpZFRvU3RyaW5nKElkIGlkLCBTdHJpbmcgdmFsdWUpIHsKICAgIHN3aXRjaCAoaWQua2luZCkgewogICAgICBjYXNlIElkS2luZC5tZW1iZXI6CiAgICAgICAgTWVtYmVySWQgZWxlbWVudElkID0gaWQ7CiAgICAgICAgcmV0dXJuICckbWVtYmVyUHJlZml4JHtlbGVtZW50SWQubmFtZX06JHZhbHVlJzsKICAgICAgY2FzZSBJZEtpbmQuY2xzOgogICAgICAgIENsYXNzSWQgY2xhc3NJZCA9IGlkOwogICAgICAgIHJldHVybiAnJGNsYXNzUHJlZml4JHtjbGFzc0lkLm5hbWV9OiR2YWx1ZSc7CiAgICAgIGNhc2UgSWRLaW5kLmxpYnJhcnk6CiAgICAgICAgcmV0dXJuICckbGlicmFyeVByZWZpeCR2YWx1ZSc7CiAgICAgIGNhc2UgSWRLaW5kLm5vZGU6CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICBjYXNlIElkS2luZC5pbnZva2U6CiAgICAgICAgcmV0dXJuICckaW52b2tlUHJlZml4JHZhbHVlJzsKICAgICAgY2FzZSBJZEtpbmQudXBkYXRlOgogICAgICAgIHJldHVybiAnJHVwZGF0ZVByZWZpeCR2YWx1ZSc7CiAgICAgIGNhc2UgSWRLaW5kLml0ZXJhdG9yOgogICAgICAgIHJldHVybiAnJGl0ZXJhdG9yUHJlZml4JHZhbHVlJzsKICAgICAgY2FzZSBJZEtpbmQuY3VycmVudDoKICAgICAgICByZXR1cm4gJyRjdXJyZW50UHJlZml4JHZhbHVlJzsKICAgICAgY2FzZSBJZEtpbmQubW92ZU5leHQ6CiAgICAgICAgcmV0dXJuICckbW92ZU5leHRQcmVmaXgkdmFsdWUnOwogICAgICBjYXNlIElkS2luZC5pbXBsaWNpdEFzOgogICAgICAgIHJldHVybiAnJGltcGxpY2l0QXNQcmVmaXgkdmFsdWUnOwogICAgICBjYXNlIElkS2luZC5zdG10OgogICAgICAgIHJldHVybiAnJHN0bXRQcmVmaXgkdmFsdWUnOwogICAgICBjYXNlIElkS2luZC5lcnJvcjoKICAgICAgICByZXR1cm4gJyRlcnJvclByZWZpeCR2YWx1ZSc7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBpZCBraW5kOiAke2lkLmtpbmR9Iik7CiAgfQoKICBzdGF0aWMgY29uc3QgU3RyaW5nIGdsb2JhbFByZWZpeCA9ICJnbG9iYWwjIjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIG1lbWJlclByZWZpeCA9ICJtZW1iZXI6ICI7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBjbGFzc1ByZWZpeCA9ICJjbGFzczogIjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGxpYnJhcnlQcmVmaXggPSAibGlicmFyeTogIjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGludm9rZVByZWZpeCA9ICJpbnZva2U6ICI7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB1cGRhdGVQcmVmaXggPSAidXBkYXRlOiAiOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgaXRlcmF0b3JQcmVmaXggPSAiaXRlcmF0b3I6ICI7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBjdXJyZW50UHJlZml4ID0gImN1cnJlbnQ6ICI7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBtb3ZlTmV4dFByZWZpeCA9ICJtb3ZlTmV4dDogIjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGltcGxpY2l0QXNQcmVmaXggPSAiYXM6ICI7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBzdG10UHJlZml4ID0gInN0bXQ6ICI7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBlcnJvclByZWZpeCA9ICJlcnJvcjogIjsKCiAgc3RhdGljIElkVmFsdWUgZGVjb2RlKFVyaSBzb3VyY2VVcmksIGludCBvZmZzZXQsIFN0cmluZyB0ZXh0KSB7CiAgICBJZCBpZDsKICAgIFN0cmluZyBleHBlY3RlZDsKICAgIGlmICh0ZXh0LnN0YXJ0c1dpdGgobWVtYmVyUHJlZml4KSkgewogICAgICB0ZXh0ID0gdGV4dC5zdWJzdHJpbmcobWVtYmVyUHJlZml4Lmxlbmd0aCk7CiAgICAgIGludCBjb2xvblBvcyA9IHRleHQuaW5kZXhPZignOicpOwogICAgICBpZiAoY29sb25Qb3MgPT0gLTEpIHRocm93ICJJbnZhbGlkIG1lbWJlciBpZDogJyR0ZXh0JyI7CiAgICAgIFN0cmluZyBuYW1lID0gdGV4dC5zdWJzdHJpbmcoMCwgY29sb25Qb3MpOwogICAgICBib29sIGlzR2xvYmFsID0gbmFtZS5zdGFydHNXaXRoKGdsb2JhbFByZWZpeCk7CiAgICAgIGlmIChpc0dsb2JhbCkgewogICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cmluZyhnbG9iYWxQcmVmaXgubGVuZ3RoKTsKICAgICAgfQogICAgICBpZCA9IG5ldyBNZW1iZXJJZChuYW1lLCBpc0dsb2JhbDogaXNHbG9iYWwpOwogICAgICBleHBlY3RlZCA9IHRleHQuc3Vic3RyaW5nKGNvbG9uUG9zICsgMSk7CiAgICB9IGVsc2UgaWYgKHRleHQuc3RhcnRzV2l0aChjbGFzc1ByZWZpeCkpIHsKICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKGNsYXNzUHJlZml4Lmxlbmd0aCk7CiAgICAgIGludCBjb2xvblBvcyA9IHRleHQuaW5kZXhPZignOicpOwogICAgICBpZiAoY29sb25Qb3MgPT0gLTEpIHRocm93ICJJbnZhbGlkIGNsYXNzIGlkOiAnJHRleHQnIjsKICAgICAgU3RyaW5nIG5hbWUgPSB0ZXh0LnN1YnN0cmluZygwLCBjb2xvblBvcyk7CiAgICAgIGJvb2wgaXNHbG9iYWwgPSBuYW1lLnN0YXJ0c1dpdGgoZ2xvYmFsUHJlZml4KTsKICAgICAgaWYgKGlzR2xvYmFsKSB7CiAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKGdsb2JhbFByZWZpeC5sZW5ndGgpOwogICAgICB9CiAgICAgIGlkID0gbmV3IENsYXNzSWQobmFtZSwgaXNHbG9iYWw6IGlzR2xvYmFsKTsKICAgICAgZXhwZWN0ZWQgPSB0ZXh0LnN1YnN0cmluZyhjb2xvblBvcyArIDEpOwogICAgfSBlbHNlIGlmICh0ZXh0LnN0YXJ0c1dpdGgobGlicmFyeVByZWZpeCkpIHsKICAgICAgaWQgPSBuZXcgTGlicmFyeUlkKHNvdXJjZVVyaSk7CiAgICAgIGV4cGVjdGVkID0gdGV4dC5zdWJzdHJpbmcobGlicmFyeVByZWZpeC5sZW5ndGgpOwogICAgfSBlbHNlIGlmICh0ZXh0LnN0YXJ0c1dpdGgoaW52b2tlUHJlZml4KSkgewogICAgICBpZCA9IG5ldyBOb2RlSWQob2Zmc2V0LCBJZEtpbmQuaW52b2tlKTsKICAgICAgZXhwZWN0ZWQgPSB0ZXh0LnN1YnN0cmluZyhpbnZva2VQcmVmaXgubGVuZ3RoKTsKICAgIH0gZWxzZSBpZiAodGV4dC5zdGFydHNXaXRoKHVwZGF0ZVByZWZpeCkpIHsKICAgICAgaWQgPSBuZXcgTm9kZUlkKG9mZnNldCwgSWRLaW5kLnVwZGF0ZSk7CiAgICAgIGV4cGVjdGVkID0gdGV4dC5zdWJzdHJpbmcodXBkYXRlUHJlZml4Lmxlbmd0aCk7CiAgICB9IGVsc2UgaWYgKHRleHQuc3RhcnRzV2l0aChpdGVyYXRvclByZWZpeCkpIHsKICAgICAgaWQgPSBuZXcgTm9kZUlkKG9mZnNldCwgSWRLaW5kLml0ZXJhdG9yKTsKICAgICAgZXhwZWN0ZWQgPSB0ZXh0LnN1YnN0cmluZyhpdGVyYXRvclByZWZpeC5sZW5ndGgpOwogICAgfSBlbHNlIGlmICh0ZXh0LnN0YXJ0c1dpdGgoY3VycmVudFByZWZpeCkpIHsKICAgICAgaWQgPSBuZXcgTm9kZUlkKG9mZnNldCwgSWRLaW5kLmN1cnJlbnQpOwogICAgICBleHBlY3RlZCA9IHRleHQuc3Vic3RyaW5nKGN1cnJlbnRQcmVmaXgubGVuZ3RoKTsKICAgIH0gZWxzZSBpZiAodGV4dC5zdGFydHNXaXRoKG1vdmVOZXh0UHJlZml4KSkgewogICAgICBpZCA9IG5ldyBOb2RlSWQob2Zmc2V0LCBJZEtpbmQubW92ZU5leHQpOwogICAgICBleHBlY3RlZCA9IHRleHQuc3Vic3RyaW5nKG1vdmVOZXh0UHJlZml4Lmxlbmd0aCk7CiAgICB9IGVsc2UgaWYgKHRleHQuc3RhcnRzV2l0aChpbXBsaWNpdEFzUHJlZml4KSkgewogICAgICBpZCA9IG5ldyBOb2RlSWQob2Zmc2V0LCBJZEtpbmQuaW1wbGljaXRBcyk7CiAgICAgIGV4cGVjdGVkID0gdGV4dC5zdWJzdHJpbmcoaW1wbGljaXRBc1ByZWZpeC5sZW5ndGgpOwogICAgfSBlbHNlIGlmICh0ZXh0LnN0YXJ0c1dpdGgoc3RtdFByZWZpeCkpIHsKICAgICAgaWQgPSBuZXcgTm9kZUlkKG9mZnNldCwgSWRLaW5kLnN0bXQpOwogICAgICBleHBlY3RlZCA9IHRleHQuc3Vic3RyaW5nKHN0bXRQcmVmaXgubGVuZ3RoKTsKICAgIH0gZWxzZSBpZiAodGV4dC5zdGFydHNXaXRoKGVycm9yUHJlZml4KSkgewogICAgICBpZCA9IG5ldyBOb2RlSWQob2Zmc2V0LCBJZEtpbmQuZXJyb3IpOwogICAgICBleHBlY3RlZCA9IHRleHQuc3Vic3RyaW5nKGVycm9yUHJlZml4Lmxlbmd0aCk7CiAgICB9IGVsc2UgewogICAgICBpZCA9IG5ldyBOb2RlSWQob2Zmc2V0LCBJZEtpbmQubm9kZSk7CiAgICAgIGV4cGVjdGVkID0gdGV4dDsKICAgIH0KICAgIC8vIFJlbW92ZSBuZXdsaW5lcy4KICAgIGV4cGVjdGVkID0gZXhwZWN0ZWQucmVwbGFjZUFsbChuZXcgUmVnRXhwKHInXHMqKFxuXHMqKStccyonKSwgJycpOwogICAgcmV0dXJuIG5ldyBJZFZhbHVlKGlkLCBleHBlY3RlZCk7CiAgfQp9CgovLy8gSWQgZm9yIGFuIG1lbWJlciBlbGVtZW50LgpjbGFzcyBNZW1iZXJJZCBpbXBsZW1lbnRzIElkIHsKICBmaW5hbCBTdHJpbmcgY2xhc3NOYW1lOwogIGZpbmFsIFN0cmluZyBtZW1iZXJOYW1lOwogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgaXNHbG9iYWw7CgogIGZhY3RvcnkgTWVtYmVySWQoU3RyaW5nIHRleHQsIHtib29sIGlzR2xvYmFsOiBmYWxzZX0pIHsKICAgIGludCBkb3RQb3MgPSB0ZXh0LmluZGV4T2YoJy4nKTsKICAgIGlmIChkb3RQb3MgIT0gLTEpIHsKICAgICAgcmV0dXJuIG5ldyBNZW1iZXJJZC5pbnRlcm5hbCh0ZXh0LnN1YnN0cmluZyhkb3RQb3MgKyAxKSwKICAgICAgICAgIGNsYXNzTmFtZTogdGV4dC5zdWJzdHJpbmcoMCwgZG90UG9zKSwgaXNHbG9iYWw6IGlzR2xvYmFsKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgTWVtYmVySWQuaW50ZXJuYWwodGV4dCwgaXNHbG9iYWw6IGlzR2xvYmFsKTsKICAgIH0KICB9CgogIE1lbWJlcklkLmludGVybmFsKHRoaXMubWVtYmVyTmFtZSwge3RoaXMuY2xhc3NOYW1lLCB0aGlzLmlzR2xvYmFsOiBmYWxzZX0pOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IGNsYXNzTmFtZS5oYXNoQ29kZSAqIDEzICsgbWVtYmVyTmFtZS5oYXNoQ29kZSAqIDE3OwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIE1lbWJlcklkKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gY2xhc3NOYW1lID09IG90aGVyLmNsYXNzTmFtZSAmJiBtZW1iZXJOYW1lID09IG90aGVyLm1lbWJlck5hbWU7CiAgfQoKICBAb3ZlcnJpZGUKICBJZEtpbmQgZ2V0IGtpbmQgPT4gSWRLaW5kLm1lbWJlcjsKCiAgU3RyaW5nIGdldCBuYW1lID0+IGNsYXNzTmFtZSAhPSBudWxsID8gJyRjbGFzc05hbWUuJG1lbWJlck5hbWUnIDogbWVtYmVyTmFtZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBkZXNjcmlwdG9yID0+ICdtZW1iZXIgJG5hbWUnOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnbWVtYmVyOiRuYW1lJzsKfQoKLy8vIElkIGZvciBhIGNsYXNzLgpjbGFzcyBDbGFzc0lkIGltcGxlbWVudHMgSWQgewogIGZpbmFsIFN0cmluZyBjbGFzc05hbWU7CiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0dsb2JhbDsKCiAgQ2xhc3NJZCh0aGlzLmNsYXNzTmFtZSwge3RoaXMuaXNHbG9iYWw6IGZhbHNlfSk7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gY2xhc3NOYW1lLmhhc2hDb2RlICogMTM7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgQ2xhc3NJZCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIGNsYXNzTmFtZSA9PSBvdGhlci5jbGFzc05hbWU7CiAgfQoKICBAb3ZlcnJpZGUKICBJZEtpbmQgZ2V0IGtpbmQgPT4gSWRLaW5kLmNsczsKCiAgU3RyaW5nIGdldCBuYW1lID0+IGNsYXNzTmFtZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBkZXNjcmlwdG9yID0+ICdjbGFzcyAkbmFtZSc7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdjbGFzczokbmFtZSc7Cn0KCi8vLyBJZCBmb3IgYSBsaWJyYXJ5LgpjbGFzcyBMaWJyYXJ5SWQgaW1wbGVtZW50cyBJZCB7CiAgZmluYWwgVXJpIHVyaTsKCiAgTGlicmFyeUlkKHRoaXMudXJpKTsKCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3VwcG9ydCBnbG9iYWwgbGlicmFyeSBhbm5vdGF0aW9ucy4KICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0dsb2JhbCA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiB1cmkuaGFzaENvZGUgKiAxMzsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBMaWJyYXJ5SWQpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB1cmkgPT0gb3RoZXIudXJpOwogIH0KCiAgQG92ZXJyaWRlCiAgSWRLaW5kIGdldCBraW5kID0+IElkS2luZC5saWJyYXJ5OwoKICBTdHJpbmcgZ2V0IG5hbWUgPT4gdXJpLnRvU3RyaW5nKCk7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZGVzY3JpcHRvciA9PiAnbGlicmFyeSAkbmFtZSc7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdsaWJyYXJ5OiRuYW1lJzsKfQoKLy8vIElkIGZvciBhIGNvZGUgcG9pbnQgZGVmaW5lZCBieSBhIGtpbmQgYW5kIGEgY29kZSBvZmZzZXQuCmNsYXNzIE5vZGVJZCBpbXBsZW1lbnRzIElkIHsKICBmaW5hbCBpbnQgdmFsdWU7CiAgQG92ZXJyaWRlCiAgZmluYWwgSWRLaW5kIGtpbmQ7CgogIGNvbnN0IE5vZGVJZCh0aGlzLnZhbHVlLCB0aGlzLmtpbmQpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0dsb2JhbCA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiB2YWx1ZS5oYXNoQ29kZSAqIDEzICsga2luZC5oYXNoQ29kZSAqIDE3OwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIE5vZGVJZCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHZhbHVlID09IG90aGVyLnZhbHVlICYmIGtpbmQgPT0gb3RoZXIua2luZDsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZGVzY3JpcHRvciA9PiAnb2Zmc2V0ICR2YWx1ZSAoJGtpbmQpJzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyRraW5kOiR2YWx1ZSc7Cn0KCmNsYXNzIEFjdHVhbERhdGE8VD4gewogIGZpbmFsIElkIGlkOwogIGZpbmFsIFQgdmFsdWU7CiAgZmluYWwgVXJpIHVyaTsKICBmaW5hbCBpbnQgX29mZnNldDsKICBmaW5hbCBPYmplY3Qgb2JqZWN0OwoKICBBY3R1YWxEYXRhKHRoaXMuaWQsIHRoaXMudmFsdWUsIHRoaXMudXJpLCB0aGlzLl9vZmZzZXQsIHRoaXMub2JqZWN0KTsKCiAgaW50IGdldCBvZmZzZXQgewogICAgaWYgKGlkIGlzIE5vZGVJZCkgewogICAgICBOb2RlSWQgbm9kZUlkID0gaWQ7CiAgICAgIHJldHVybiBub2RlSWQudmFsdWU7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX29mZnNldDsKICAgIH0KICB9CgogIFN0cmluZyBnZXQgb2JqZWN0VGV4dCB7CiAgICByZXR1cm4gJ29iamVjdCBgJHsnJG9iamVjdCcucmVwbGFjZUFsbCgnXG4nLCAnJyl9YCAoJHtvYmplY3QucnVudGltZVR5cGV9KSc7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnQWN0dWFsRGF0YShpZD0kaWQsdmFsdWU9JHZhbHVlLHVyaT0kdXJpLCcKICAgICAgJ29mZnNldD0kb2Zmc2V0LG9iamVjdD0kb2JqZWN0VGV4dCknOwp9CgphYnN0cmFjdCBjbGFzcyBEYXRhUmVnaXN0cnk8VD4gewogIE1hcDxJZCwgQWN0dWFsRGF0YTxUPj4gZ2V0IGFjdHVhbE1hcDsKCiAgLy8vIFJlZ2lzdGVycyBbdmFsdWVdIHdpdGggW2lkXSBpbiBbYWN0dWFsTWFwXS4KICAvLy8KICAvLy8gQ2hlY2tzIGZvciBkdXBsaWNhdGUgZGF0YSBmb3IgW2lkXS4KICB2b2lkIHJlZ2lzdGVyVmFsdWUoVXJpIHVyaSwgaW50IG9mZnNldCwgSWQgaWQsIFQgdmFsdWUsIE9iamVjdCBvYmplY3QpIHsKICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIGlmIChhY3R1YWxNYXAuY29udGFpbnNLZXkoaWQpKSB7CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWF5YmUgbGV0IHRoZSB0ZXN0IHN1cHBseSBhIHdheSB0byBtZXJnZQogICAgICAgIC8vIG11bHRpcGxlIGRhdGEgb24gdGhlIHNhbWUgaWQ/CiAgICAgICAgQWN0dWFsRGF0YTxUPiBleGlzdGluZ0RhdGEgPSBhY3R1YWxNYXBbaWRdOwogICAgICAgIHJlcG9ydCh1cmksIG9mZnNldCwgIkR1cGxpY2F0ZSBpZCAke2lkfSwgdmFsdWU9JHZhbHVlLCBvYmplY3Q9JG9iamVjdCIpOwogICAgICAgIHJlcG9ydCgKICAgICAgICAgICAgdXJpLAogICAgICAgICAgICBvZmZzZXQsCiAgICAgICAgICAgICJEdXBsaWNhdGUgaWQgJHtpZH0sIHZhbHVlPSR7ZXhpc3RpbmdEYXRhLnZhbHVlfSwgIgogICAgICAgICAgICAib2JqZWN0PSR7ZXhpc3RpbmdEYXRhLm9iamVjdH0iKTsKICAgICAgICBmYWlsKCJEdXBsaWNhdGUgaWQgJGlkLiIpOwogICAgICB9CiAgICAgIGFjdHVhbE1hcFtpZF0gPSBuZXcgQWN0dWFsRGF0YTxUPihpZCwgdmFsdWUsIHVyaSwgb2Zmc2V0LCBvYmplY3QpOwogICAgfQogIH0KCiAgLy8vIENhbGxlZCB0byByZXBvcnQgZHVwbGljYXRlIGVycm9ycy4KICB2b2lkIHJlcG9ydChVcmkgdXJpLCBpbnQgb2Zmc2V0LCBTdHJpbmcgbWVzc2FnZSk7CgogIC8vLyBDYWxsZWQgdG8gcmFpc2UgYW4gZXhjZXB0aW9uIG9uIGR1cGxpY2F0ZSBlcnJvcnMuCiAgdm9pZCBmYWlsKFN0cmluZyBtZXNzYWdlKTsKfQqBeABOTjwBDkoKATYHAToLAVBMCAFNCgFNCgFRGAwBUSgLAUowDAFHDgFNCAFIEAkCASQUEwFQTxcVASAZAgEQDxYBJgEMPgEMHC0pMwQBDC4BMhcaITgXHjUbJxgWGiYaJhwoGyccKB4qGCQZJQZCBAEwMS8zMTE1MzUxLS8BQgsVKTIoPjE1FjQIMy8vMSg9MTUWNAgyLzElNzAuNjAuNjIwODEvNzIwODQyOi4sNC8tNQ0sFwYYRyYEAgEeHxobDBcBOiQYP0UNPgYEAU4BDEoBDBwtKksEAQwkAVABDCsBDCcCARQeGgwXATMBDC8BDBwtKSkEAQwhASABDCoBDCYCARYgEQEXAT4MHgEMKQEMHC0rHQQBDCUBJQEMLAEMKAIBPR0TDBUBJwEMHgEMQAEMHC0oNwQBDDQBDCcCARYPEREVFwFIARMYGhsNFgYEARpRBAEMQiwCASEoATIGKksZJ0kpNFEQERRALiMISQYEASk0ATgdAgElcGFja2FnZTpmcm9udF9lbmQvc3JjL3Rlc3RpbmcvaWQuZGFydDNzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY3J5cHRvL2xpYi9zcmMvZGlnZXN0LmRhcnSDti8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6Y29sbGVjdGlvbi9jb2xsZWN0aW9uLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6Y29udmVydC9jb252ZXJ0LmRhcnQnOwoKLy8vIEEgbWVzc2FnZSBkaWdlc3QgYXMgY29tcHV0ZWQgYnkgYSBgSGFzaGAgb3IgYEhNQUNgIGZ1bmN0aW9uLgpjbGFzcyBEaWdlc3QgewogIC8vLyBUaGUgbWVzc2FnZSBkaWdlc3QgYXMgYW4gYXJyYXkgb2YgYnl0ZXMuCiAgZmluYWwgTGlzdDxpbnQ+IGJ5dGVzOwoKICBEaWdlc3QodGhpcy5ieXRlcyk7CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgdGhpcyBpcyBlcXVhbCB0byBhbm90aGVyIGRpZ2VzdC4KICAvLy8KICAvLy8gVGhpcyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIG1hbnVhbCBjb21wYXJpc29ucyB0byBhdm9pZCBsZWFraW5nCiAgLy8vIGluZm9ybWF0aW9uIHZpYSB0aW1pbmcuCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpID0+CiAgICAgIG90aGVyIGlzIERpZ2VzdCAmJiBjb25zdCBMaXN0RXF1YWxpdHkoKS5lcXVhbHMoYnl0ZXMsIG90aGVyLmJ5dGVzKTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBjb25zdCBMaXN0RXF1YWxpdHkoKS5oYXNoKGJ5dGVzKTsKCiAgLy8vIFRoZSBtZXNzYWdlIGRpZ2VzdCBhcyBhIHN0cmluZyBvZiBoZXhhZGVjaW1hbCBkaWdpdHMuCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gaGV4LmVuY29kZShieXRlcyk7Cn0KHwBOTjwBLScBQQ8vGQEWATcGSR4MJEoBDDgBPAwqAgEecGFja2FnZTpjcnlwdG8vc3JjL2RpZ2VzdC5kYXJ0MXNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jcnlwdG8vbGliL3NyYy9oYXNoLmRhcnSEQy8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6Y29udmVydCc7CgppbXBvcnQgJ2RpZ2VzdC5kYXJ0JzsKaW1wb3J0ICdkaWdlc3Rfc2luay5kYXJ0JzsKCi8vLyBBbiBpbnRlcmZhY2UgZm9yIGNyeXB0b2dyYXBoaWMgaGFzaCBmdW5jdGlvbnMuCi8vLwovLy8gRXZlcnkgaGFzaCBpcyBhIGNvbnZlcnRlciB0aGF0IHRha2VzIGEgbGlzdCBvZiBpbnRzIGFuZCByZXR1cm5zIGEgc2luZ2xlCi8vLyBkaWdlc3QuIFdoZW4gdXNlZCBpbiBjaHVua2VkIG1vZGUsIGl0IHdpbGwgb25seSBldmVyIGFkZCBvbmUgZGlnZXN0IHRvIHRoZQovLy8gaW5uZXIgW1NpbmtdLgphYnN0cmFjdCBjbGFzcyBIYXNoIGV4dGVuZHMgQ29udmVydGVyPExpc3Q8aW50PiwgRGlnZXN0PiB7CiAgLy8vIFRoZSBpbnRlcm5hbCBibG9jayBzaXplIG9mIHRoZSBoYXNoIGluIGJ5dGVzLgogIC8vLwogIC8vLyBUaGlzIGlzIGV4cG9zZWQgZm9yIHVzZSBieSB0aGUgYEhtYWNgIGNsYXNzLCB3aGljaCBuZWVkcyB0byBrbm93IHRoZSBibG9jawogIC8vLyBzaXplIGZvciB0aGUgW0hhc2hdIGl0IHVzZXMuCiAgaW50IGdldCBibG9ja1NpemU7CgogIGNvbnN0IEhhc2goKTsKCiAgQG92ZXJyaWRlCiAgRGlnZXN0IGNvbnZlcnQoTGlzdDxpbnQ+IGRhdGEpIHsKICAgIHZhciBpbm5lclNpbmsgPSBuZXcgRGlnZXN0U2luaygpOwogICAgdmFyIG91dGVyU2luayA9IHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oaW5uZXJTaW5rKTsKICAgIG91dGVyU2luay5hZGQoZGF0YSk7CiAgICBvdXRlclNpbmsuY2xvc2UoKTsKICAgIHJldHVybiBpbm5lclNpbmsudmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBCeXRlQ29udmVyc2lvblNpbmsgc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPERpZ2VzdD4gc2luayk7Cn0KJQBOTjwBFwEWGwEzBE1PEjs0BlEjFQEQAQwjJjcZFxwEAQxAAgEccGFja2FnZTpjcnlwdG8vc3JjL2hhc2guZGFydDFzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY3J5cHRvL2xpYi9zcmMvaG1hYy5kYXJ0jGUvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwppbXBvcnQgJ2RhcnQ6dHlwZWRfZGF0YSc7CgppbXBvcnQgJ2RpZ2VzdC5kYXJ0JzsKaW1wb3J0ICdkaWdlc3Rfc2luay5kYXJ0JzsKaW1wb3J0ICdoYXNoLmRhcnQnOwoKLy8vIEFuIGltcGxlbWVudGF0aW9uIG9mIFtrZXllZC1oYXNoIG1ldGhvZCBhdXRoZW50aWNhdGlvbiBjb2Rlc11bcmZjXS4KLy8vCi8vLyBbcmZjXTogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzIxMDQKLy8vCi8vLyBITUFDIGFsbG93cyBtZXNzYWdlcyB0byBiZSBjcnlwdG9ncmFwaGljYWxseSBhdXRoZW50aWNhdGVkIHVzaW5nIGFueQovLy8gaXRlcmF0ZWQgY3J5cHRvZ3JhcGhpYyBoYXNoIGZ1bmN0aW9uLgpjbGFzcyBIbWFjIGV4dGVuZHMgQ29udmVydGVyPExpc3Q8aW50PiwgRGlnZXN0PiB7CiAgLy8vIFRoZSBoYXNoIGZ1bmN0aW9uIHVzZWQgdG8gY29tcHV0ZSB0aGUgYXV0aGVudGljYXRpb24gZGlnZXN0LgogIGZpbmFsIEhhc2ggX2hhc2g7CgogIC8vLyBUaGUgc2VjcmV0IGtleSBzaGFyZWQgYnkgdGhlIHNlbmRlciBhbmQgdGhlIHJlY2VpdmVyLgogIGZpbmFsIFVpbnQ4TGlzdCBfa2V5OwoKICAvLy8gQ3JlYXRlIGFuIFtIbWFjXSBvYmplY3QgZnJvbSBhIFtIYXNoXSBhbmQgYSBiaW5hcnkga2V5LgogIC8vLwogIC8vLyBUaGUga2V5IHNob3VsZCBiZSBhIHNlY3JldCBzaGFyZWQgYmV0d2VlbiB0aGUgc2VuZGVyIGFuZCByZWNlaXZlciBvZiB0aGUKICAvLy8gbWVzc2FnZS4KICBIbWFjKEhhc2ggaGFzaCwgTGlzdDxpbnQ+IGtleSkKICAgICAgOiBfaGFzaCA9IGhhc2gsCiAgICAgICAgX2tleSA9IG5ldyBVaW50OExpc3QoaGFzaC5ibG9ja1NpemUpIHsKICAgIC8vIEhhc2ggdGhlIGtleSBpZiBpdCdzIGxvbmdlciB0aGFuIHRoZSBibG9jayBzaXplIG9mIHRoZSBoYXNoLgogICAgaWYgKGtleS5sZW5ndGggPiBfaGFzaC5ibG9ja1NpemUpIGtleSA9IF9oYXNoLmNvbnZlcnQoa2V5KS5ieXRlczsKCiAgICAvLyBJZiBba2V5XSBpcyBzaG9ydGVyIHRoYW4gdGhlIGJsb2NrIHNpemUsIHRoZSByZXN0IG9mIFtfa2V5XSB3aWxsIGJlCiAgICAvLyAwLXBhZGRlZC4KICAgIF9rZXkuc2V0UmFuZ2UoMCwga2V5Lmxlbmd0aCwga2V5KTsKICB9CgogIEBvdmVycmlkZQogIERpZ2VzdCBjb252ZXJ0KExpc3Q8aW50PiBkYXRhKSB7CiAgICB2YXIgaW5uZXJTaW5rID0gbmV3IERpZ2VzdFNpbmsoKTsKICAgIHZhciBvdXRlclNpbmsgPSBzdGFydENodW5rZWRDb252ZXJzaW9uKGlubmVyU2luayk7CiAgICBvdXRlclNpbmsuYWRkKGRhdGEpOwogICAgb3V0ZXJTaW5rLmNsb3NlKCk7CiAgICByZXR1cm4gaW5uZXJTaW5rLnZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgQnl0ZUNvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxEaWdlc3Q+IHNpbmspID0+CiAgICAgIG5ldyBfSG1hY1Npbmsoc2luaywgX2hhc2gsIF9rZXkpOwp9CgovLy8gVGhlIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBITUFDIGFsZ29yaXRobS4KY2xhc3MgX0htYWNTaW5rIGV4dGVuZHMgQnl0ZUNvbnZlcnNpb25TaW5rIHsKICAvLy8gVGhlIHNpbmsgZm9yIHRoZSBvdXRlciBoYXNoIGNvbXB1dGF0aW9uLgogIGZpbmFsIEJ5dGVDb252ZXJzaW9uU2luayBfb3V0ZXJTaW5rOwoKICAvLy8gVGhlIHNpbmsgdGhhdCBbX2lubmVyU2lua10ncyByZXN1bHQgd2lsbCBiZSBhZGRlZCB0byB3aGVuIGl0J3MgYXZhaWxhYmxlLgogIGZpbmFsIF9pbm5lclJlc3VsdFNpbmsgPSBuZXcgRGlnZXN0U2luaygpOwoKICAvLy8gVGhlIHNpbmsgZm9yIHRoZSBpbm5lciBoYXNoIGNvbXB1dGF0aW9uLgogIEJ5dGVDb252ZXJzaW9uU2luayBfaW5uZXJTaW5rOwoKICAvLy8gV2hldGhlciBbY2xvc2VdIGhhcyBiZWVuIGNhbGxlZC4KICBib29sIF9pc0Nsb3NlZCA9IGZhbHNlOwoKICBfSG1hY1NpbmsoU2luazxEaWdlc3Q+IHNpbmssIEhhc2ggaGFzaCwgTGlzdDxpbnQ+IGtleSkKICAgICAgOiBfb3V0ZXJTaW5rID0gaGFzaC5zdGFydENodW5rZWRDb252ZXJzaW9uKHNpbmspIHsKICAgIF9pbm5lclNpbmsgPSBoYXNoLnN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oX2lubmVyUmVzdWx0U2luayk7CgogICAgLy8gQ29tcHV0ZSBvdXRlciBwYWRkaW5nLgogICAgdmFyIHBhZGRpbmcgPSBuZXcgVWludDhMaXN0KGtleS5sZW5ndGgpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWRkaW5nLmxlbmd0aDsgaSsrKSB7CiAgICAgIHBhZGRpbmdbaV0gPSAweDVjIF4ga2V5W2ldOwogICAgfQogICAgX291dGVyU2luay5hZGQocGFkZGluZyk7CgogICAgLy8gQ29tcHV0ZSBpbm5lciBwYWRkaW5nLgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWRkaW5nLmxlbmd0aDsgaSsrKSB7CiAgICAgIHBhZGRpbmdbaV0gPSAweDM2IF4ga2V5W2ldOwogICAgfQogICAgX2lubmVyU2luay5hZGQocGFkZGluZyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZChMaXN0PGludD4gZGF0YSkgewogICAgaWYgKF9pc0Nsb3NlZCkgdGhyb3cgbmV3IFN0YXRlRXJyb3IoJ0hNQUMgaXMgY2xvc2VkJyk7CiAgICBfaW5uZXJTaW5rLmFkZChkYXRhKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkU2xpY2UoTGlzdDxpbnQ+IGRhdGEsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIGlmIChfaXNDbG9zZWQpIHRocm93IG5ldyBTdGF0ZUVycm9yKCdITUFDIGlzIGNsb3NlZCcpOwogICAgX2lubmVyU2luay5hZGRTbGljZShkYXRhLCBzdGFydCwgZW5kLCBpc0xhc3QpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjbG9zZSgpIHsKICAgIGlmIChfaXNDbG9zZWQpIHJldHVybjsKICAgIF9pc0Nsb3NlZCA9IHRydWU7CgogICAgX2lubmVyU2luay5jbG9zZSgpOwogICAgX291dGVyU2luay5hZGQoX2lubmVyUmVzdWx0U2luay52YWx1ZS5ieXRlcyk7CiAgICBfb3V0ZXJTaW5rLmNsb3NlKCk7CiAgfQp9Cm0ATk48ARcaARYbFAFIBC8ESSoyQxQBPBgBPgZPDyEWL0RGAUsRJwQBDCMmNxkXHAQBDEIoAgE3LS8nAVAtAS8hAScaATk5QAEeLS8iBh0BHi8iBh0EAQwdOxoEAQxDOzMEAQwRGxYBGDIYBAIBHHBhY2thZ2U6Y3J5cHRvL3NyYy9obWFjLmRhcnQwc2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NyeXB0by9saWIvc3JjL21kNS5kYXJ0jtovLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwppbXBvcnQgJ2RhcnQ6dHlwZWRfZGF0YSc7CgppbXBvcnQgJ2RpZ2VzdC5kYXJ0JzsKaW1wb3J0ICdoYXNoLmRhcnQnOwppbXBvcnQgJ2hhc2hfc2luay5kYXJ0JzsKaW1wb3J0ICd1dGlscy5kYXJ0JzsKCi8vLyBBbiBpbnN0YW5jZSBvZiBbTUQ1XS4KLy8vCi8vLyBUaGlzIGluc3RhbmNlIHByb3ZpZGVzIGNvbnZlbmllbnQgYWNjZXNzIHRvIHRoZSBbTUQ1XVtyZmNdIGhhc2ggZnVuY3Rpb24uCi8vLwovLy8gW3JmY106IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxMzIxCi8vLwovLy8gKipXYXJuaW5nKio6IE1ENSBoYXMga25vd24gY29sbGlzaW9ucyBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIHJlcXVpcmVkCi8vLyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCmZpbmFsIG1kNSA9IG5ldyBNRDUuXygpOwoKLy8vIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBbTUQ1XVtyZmNdIGhhc2ggZnVuY3Rpb24uCi8vLwovLy8gW3JmY106IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxMzIxCi8vLwovLy8gKipXYXJuaW5nKio6IE1ENSBoYXMga25vd24gY29sbGlzaW9ucyBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIHJlcXVpcmVkCi8vLyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCi8vLwovLy8gTm90ZSB0aGF0IGl0J3MgYWxtb3N0IGFsd2F5cyBlYXNpZXIgdG8gdXNlIFttZDVdIHJhdGhlciB0aGFuIGNyZWF0aW5nIGEgbmV3Ci8vLyBpbnN0YW5jZS4KY2xhc3MgTUQ1IGV4dGVuZHMgSGFzaCB7CiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGJsb2NrU2l6ZSA9IDE2ICogYnl0ZXNQZXJXb3JkOwoKICBNRDUuXygpOwoKICBAb3ZlcnJpZGUKICBCeXRlQ29udmVyc2lvblNpbmsgc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPERpZ2VzdD4gc2luaykgPT4KICAgICAgbmV3IEJ5dGVDb252ZXJzaW9uU2luay5mcm9tKG5ldyBfTUQ1U2luayhzaW5rKSk7Cn0KCi8vLyBEYXRhIGZyb20gYSBub24tbGluZWFyIG1hdGhlbWF0aWNhbCBmdW5jdGlvbiB0aGF0IGZ1bmN0aW9ucyBhcwovLy8gcmVwcm9kdWNpYmxlIG5vaXNlLgpjb25zdCBfbm9pc2UgPSBjb25zdCBbCiAgMHhkNzZhYTQ3OCwgMHhlOGM3Yjc1NiwgMHgyNDIwNzBkYiwgMHhjMWJkY2VlZSwgMHhmNTdjMGZhZiwgMHg0Nzg3YzYyYSwgLy8KICAweGE4MzA0NjEzLCAweGZkNDY5NTAxLCAweDY5ODA5OGQ4LCAweDhiNDRmN2FmLCAweGZmZmY1YmIxLCAweDg5NWNkN2JlLAogIDB4NmI5MDExMjIsIDB4ZmQ5ODcxOTMsIDB4YTY3OTQzOGUsIDB4NDliNDA4MjEsIDB4ZjYxZTI1NjIsIDB4YzA0MGIzNDAsCiAgMHgyNjVlNWE1MSwgMHhlOWI2YzdhYSwgMHhkNjJmMTA1ZCwgMHgwMjQ0MTQ1MywgMHhkOGExZTY4MSwgMHhlN2QzZmJjOCwKICAweDIxZTFjZGU2LCAweGMzMzcwN2Q2LCAweGY0ZDUwZDg3LCAweDQ1NWExNGVkLCAweGE5ZTNlOTA1LCAweGZjZWZhM2Y4LAogIDB4Njc2ZjAyZDksIDB4OGQyYTRjOGEsIDB4ZmZmYTM5NDIsIDB4ODc3MWY2ODEsIDB4NmQ5ZDYxMjIsIDB4ZmRlNTM4MGMsCiAgMHhhNGJlZWE0NCwgMHg0YmRlY2ZhOSwgMHhmNmJiNGI2MCwgMHhiZWJmYmM3MCwgMHgyODliN2VjNiwgMHhlYWExMjdmYSwKICAweGQ0ZWYzMDg1LCAweDA0ODgxZDA1LCAweGQ5ZDRkMDM5LCAweGU2ZGI5OWU1LCAweDFmYTI3Y2Y4LCAweGM0YWM1NjY1LAogIDB4ZjQyOTIyNDQsIDB4NDMyYWZmOTcsIDB4YWI5NDIzYTcsIDB4ZmM5M2EwMzksIDB4NjU1YjU5YzMsIDB4OGYwY2NjOTIsCiAgMHhmZmVmZjQ3ZCwgMHg4NTg0NWRkMSwgMHg2ZmE4N2U0ZiwgMHhmZTJjZTZlMCwgMHhhMzAxNDMxNCwgMHg0ZTA4MTFhMSwKICAweGY3NTM3ZTgyLCAweGJkM2FmMjM1LCAweDJhZDdkMmJiLCAweGViODZkMzkxCl07CgovLy8gUGVyLXJvdW5kIHNoaWZ0IGFtb3VudHMuCmNvbnN0IF9zaGlmdEFtb3VudHMgPSBjb25zdCBbCiAgMDcsIDEyLCAxNywgMjIsIDA3LCAxMiwgMTcsIDIyLCAwNywgMTIsIDE3LCAyMiwgMDcsIDEyLCAxNywgMjIsIDA1LCAwOSwgMTQsIC8vCiAgMjAsIDA1LCAwOSwgMTQsIDIwLCAwNSwgMDksIDE0LCAyMCwgMDUsIDA5LCAxNCwgMjAsIDA0LCAxMSwgMTYsIDIzLCAwNCwgMTEsCiAgMTYsIDIzLCAwNCwgMTEsIDE2LCAyMywgMDQsIDExLCAxNiwgMjMsIDA2LCAxMCwgMTUsIDIxLCAwNiwgMTAsIDE1LCAyMSwgMDYsCiAgMTAsIDE1LCAyMSwgMDYsIDEwLCAxNSwgMjEKXTsKCi8vLyBUaGUgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgW01ENV0uCi8vLwovLy8gVGhpcyBpcyBzZXBhcmF0ZSBzbyB0aGF0IGl0IGNhbiBleHRlbmQgW0hhc2hTaW5rXSB3aXRob3V0IGxlYWtpbmcgYWRkaXRpb25hbAovLy8gcHVibGljIG1lbWJlcnMuCmNsYXNzIF9NRDVTaW5rIGV4dGVuZHMgSGFzaFNpbmsgewogIEBvdmVycmlkZQogIGZpbmFsIGRpZ2VzdCA9IG5ldyBVaW50MzJMaXN0KDQpOwoKICBfTUQ1U2luayhTaW5rPERpZ2VzdD4gc2luaykgOiBzdXBlcihzaW5rLCAxNiwgZW5kaWFuOiBFbmRpYW4ubGl0dGxlKSB7CiAgICBkaWdlc3RbMF0gPSAweDY3NDUyMzAxOwogICAgZGlnZXN0WzFdID0gMHhlZmNkYWI4OTsKICAgIGRpZ2VzdFsyXSA9IDB4OThiYWRjZmU7CiAgICBkaWdlc3RbM10gPSAweDEwMzI1NDc2OwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB1cGRhdGVIYXNoKFVpbnQzMkxpc3QgY2h1bmspIHsKICAgIGFzc2VydChjaHVuay5sZW5ndGggPT0gMTYpOwoKICAgIHZhciBhID0gZGlnZXN0WzBdOwogICAgdmFyIGIgPSBkaWdlc3RbMV07CiAgICB2YXIgYyA9IGRpZ2VzdFsyXTsKICAgIHZhciBkID0gZGlnZXN0WzNdOwoKICAgIGludCBlOwogICAgaW50IGY7CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2NDsgaSsrKSB7CiAgICAgIGlmIChpIDwgMTYpIHsKICAgICAgICBlID0gKGIgJiBjKSB8ICgofmIgJiBtYXNrMzIpICYgZCk7CiAgICAgICAgZiA9IGk7CiAgICAgIH0gZWxzZSBpZiAoaSA8IDMyKSB7CiAgICAgICAgZSA9IChkICYgYikgfCAoKH5kICYgbWFzazMyKSAmIGMpOwogICAgICAgIGYgPSAoKDUgKiBpKSArIDEpICUgMTY7CiAgICAgIH0gZWxzZSBpZiAoaSA8IDQ4KSB7CiAgICAgICAgZSA9IGIgXiBjIF4gZDsKICAgICAgICBmID0gKCgzICogaSkgKyA1KSAlIDE2OwogICAgICB9IGVsc2UgewogICAgICAgIGUgPSBjIF4gKGIgfCAofmQgJiBtYXNrMzIpKTsKICAgICAgICBmID0gKDcgKiBpKSAlIDE2OwogICAgICB9CgogICAgICB2YXIgdGVtcCA9IGQ7CiAgICAgIGQgPSBjOwogICAgICBjID0gYjsKICAgICAgYiA9IGFkZDMyKAogICAgICAgICAgYiwKICAgICAgICAgIHJvdGwzMihhZGQzMihhZGQzMihhLCBlKSwgYWRkMzIoX25vaXNlW2ldLCBjaHVua1tmXSkpLAogICAgICAgICAgICAgIF9zaGlmdEFtb3VudHNbaV0pKTsKICAgICAgYSA9IHRlbXA7CiAgICB9CgogICAgZGlnZXN0WzBdID0gYWRkMzIoYSwgZGlnZXN0WzBdKTsKICAgIGRpZ2VzdFsxXSA9IGFkZDMyKGIsIGRpZ2VzdFsxXSk7CiAgICBkaWdlc3RbMl0gPSBhZGQzMihjLCBkaWdlc3RbMl0pOwogICAgZGlnZXN0WzNdID0gYWRkMzIoZCwgZGlnZXN0WzNdKTsKICB9Cn0KfgBOTjwBFxoBFhQZFQEaBE4ELwRQIRkBNwQvBFAhBFAOGQwrAQsBDEI3AgFDGBdNSkpKSkpKSkpKMQMBHR5RTk4dAwEqBFEUIgwkAUkcHBwcBAEMJiABFxcXFwELCwEjFCsPGysgGxcgDyUaCAEUDQ0RDUEiEAYBJSUlJQQCARtwYWNrYWdlOmNyeXB0by9zcmMvbWQ1LmRhcnQxc2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NyeXB0by9saWIvc3JjL3NoYTEuZGFydIrrLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDpjb252ZXJ0JzsKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwoKaW1wb3J0ICdkaWdlc3QuZGFydCc7CmltcG9ydCAnaGFzaC5kYXJ0JzsKaW1wb3J0ICdoYXNoX3NpbmsuZGFydCc7CmltcG9ydCAndXRpbHMuZGFydCc7CgovLy8gQW4gaW5zdGFuY2Ugb2YgW1NoYTFdLgovLy8KLy8vIFRoaXMgaW5zdGFuY2UgcHJvdmlkZXMgY29udmVuaWVudCBhY2Nlc3MgdG8gdGhlIFtTSEEtMV1bcmZjXSBoYXNoIGZ1bmN0aW9uLgovLy8KLy8vIFtyZmNdOiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzMTc0CmZpbmFsIHNoYTEgPSBuZXcgU2hhMS5fKCk7CgovLy8gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFtTSEEtMV1bcmZjXSBoYXNoIGZ1bmN0aW9uLgovLy8KLy8vIFtyZmNdOiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzMTc0CmNsYXNzIFNoYTEgZXh0ZW5kcyBIYXNoIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgYmxvY2tTaXplID0gMTYgKiBieXRlc1BlcldvcmQ7CgogIFNoYTEuXygpOwoKICBAb3ZlcnJpZGUKICBCeXRlQ29udmVyc2lvblNpbmsgc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPERpZ2VzdD4gc2luaykgPT4KICAgICAgbmV3IEJ5dGVDb252ZXJzaW9uU2luay5mcm9tKG5ldyBfU2hhMVNpbmsoc2luaykpOwp9CgovLy8gVGhlIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIFtTaGExXS4KLy8vCi8vLyBUaGlzIGlzIHNlcGFyYXRlIHNvIHRoYXQgaXQgY2FuIGV4dGVuZCBbSGFzaFNpbmtdIHdpdGhvdXQgbGVha2luZyBhZGRpdGlvbmFsCi8vLyBwdWJsaWMgbWVtZWJlcnMuCmNsYXNzIF9TaGExU2luayBleHRlbmRzIEhhc2hTaW5rIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBkaWdlc3QgPSBuZXcgVWludDMyTGlzdCg1KTsKCiAgLy8vIFRoZSBzaXh0ZWVuIHdvcmRzIGZyb20gdGhlIG9yaWdpbmFsIGNodW5rLCBleHRlbmRlZCB0byA4MCB3b3Jkcy4KICAvLy8KICAvLy8gVGhpcyBpcyBhbiBpbnN0YW5jZSB2YXJpYWJsZSB0byBhdm9pZCByZS1hbGxvY2F0aW5nLCBidXQgaXRzIGRhdGEgaXNuJ3QKICAvLy8gdXNlZCBhY3Jvc3MgaW52b2NhdGlvbnMgb2YgW3VwZGF0ZUhhc2hdLgogIGZpbmFsIFVpbnQzMkxpc3QgX2V4dGVuZGVkOwoKICBfU2hhMVNpbmsoU2luazxEaWdlc3Q+IHNpbmspCiAgICAgIDogX2V4dGVuZGVkID0gbmV3IFVpbnQzMkxpc3QoODApLAogICAgICAgIHN1cGVyKHNpbmssIDE2KSB7CiAgICBkaWdlc3RbMF0gPSAweDY3NDUyMzAxOwogICAgZGlnZXN0WzFdID0gMHhFRkNEQUI4OTsKICAgIGRpZ2VzdFsyXSA9IDB4OThCQURDRkU7CiAgICBkaWdlc3RbM10gPSAweDEwMzI1NDc2OwogICAgZGlnZXN0WzRdID0gMHhDM0QyRTFGMDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdXBkYXRlSGFzaChVaW50MzJMaXN0IGNodW5rKSB7CiAgICBhc3NlcnQoY2h1bmsubGVuZ3RoID09IDE2KTsKCiAgICB2YXIgYSA9IGRpZ2VzdFswXTsKICAgIHZhciBiID0gZGlnZXN0WzFdOwogICAgdmFyIGMgPSBkaWdlc3RbMl07CiAgICB2YXIgZCA9IGRpZ2VzdFszXTsKICAgIHZhciBlID0gZGlnZXN0WzRdOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODA7IGkrKykgewogICAgICBpZiAoaSA8IDE2KSB7CiAgICAgICAgX2V4dGVuZGVkW2ldID0gY2h1bmtbaV07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2V4dGVuZGVkW2ldID0gcm90bDMyKAogICAgICAgICAgICBfZXh0ZW5kZWRbaSAtIDNdIF4KICAgICAgICAgICAgICAgIF9leHRlbmRlZFtpIC0gOF0gXgogICAgICAgICAgICAgICAgX2V4dGVuZGVkW2kgLSAxNF0gXgogICAgICAgICAgICAgICAgX2V4dGVuZGVkW2kgLSAxNl0sCiAgICAgICAgICAgIDEpOwogICAgICB9CgogICAgICB2YXIgbmV3QSA9IGFkZDMyKGFkZDMyKHJvdGwzMihhLCA1KSwgZSksIF9leHRlbmRlZFtpXSk7CiAgICAgIGlmIChpIDwgMjApIHsKICAgICAgICBuZXdBID0gYWRkMzIoYWRkMzIobmV3QSwgKGIgJiBjKSB8ICh+YiAmIGQpKSwgMHg1QTgyNzk5OSk7CiAgICAgIH0gZWxzZSBpZiAoaSA8IDQwKSB7CiAgICAgICAgbmV3QSA9IGFkZDMyKGFkZDMyKG5ld0EsIChiIF4gYyBeIGQpKSwgMHg2RUQ5RUJBMSk7CiAgICAgIH0gZWxzZSBpZiAoaSA8IDYwKSB7CiAgICAgICAgbmV3QSA9IGFkZDMyKGFkZDMyKG5ld0EsIChiICYgYykgfCAoYiAmIGQpIHwgKGMgJiBkKSksIDB4OEYxQkJDREMpOwogICAgICB9IGVsc2UgewogICAgICAgIG5ld0EgPSBhZGQzMihhZGQzMihuZXdBLCBiIF4gYyBeIGQpLCAweENBNjJDMUQ2KTsKICAgICAgfQoKICAgICAgZSA9IGQ7CiAgICAgIGQgPSBjOwogICAgICBjID0gcm90bDMyKGIsIDMwKTsKICAgICAgYiA9IGE7CiAgICAgIGEgPSBuZXdBICYgbWFzazMyOwogICAgfQoKICAgIGRpZ2VzdFswXSA9IGFkZDMyKGEsIGRpZ2VzdFswXSk7CiAgICBkaWdlc3RbMV0gPSBhZGQzMihiLCBkaWdlc3RbMV0pOwogICAgZGlnZXN0WzJdID0gYWRkMzIoYywgZGlnZXN0WzJdKTsKICAgIGRpZ2VzdFszXSA9IGFkZDMyKGQsIGRpZ2VzdFszXSk7CiAgICBkaWdlc3RbNF0gPSBhZGQzMihlLCBkaWdlc3RbNF0pOwogIH0KfQpqAE5OPAEXGgEWFBkVARsEUAQuGwE5BC4aDCsBDAEMQjgCASsEURUjDCQBRwZOLx4BHygaHBwcHBwEAQwmIAEXFxcXFwEjFCEPHx8jJCMQCAE+FEMbPBtMDzoIAQ0NGQ0ZBgElJSUlJQQCARxwYWNrYWdlOmNyeXB0by9zcmMvc2hhMS5kYXJ0M3Nka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jcnlwdG8vbGliL3NyYy9zaGEyNTYuZGFydJJ7Ly8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDpjb252ZXJ0JzsKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwoKaW1wb3J0ICdkaWdlc3QuZGFydCc7CmltcG9ydCAnaGFzaC5kYXJ0JzsKaW1wb3J0ICdoYXNoX3NpbmsuZGFydCc7CmltcG9ydCAndXRpbHMuZGFydCc7CgovLy8gQW4gaW5zdGFuY2Ugb2YgW1NoYTI1Nl0uCi8vLwovLy8gVGhpcyBpbnN0YW5jZSBwcm92aWRlcyBjb252ZW5pZW50IGFjY2VzcyB0byB0aGUgW1NoYTI1Nl1bcmZjXSBoYXNoIGZ1bmN0aW9uLgovLy8KLy8vIFtyZmNdOiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2MjM0CmZpbmFsIHNoYTI1NiA9IG5ldyBTaGEyNTYuXygpOwoKLy8vIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBbU0hBLTI1Nl1bcmZjXSBoYXNoIGZ1bmN0aW9uLgovLy8KLy8vIFtyZmNdOiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2MjM0Ci8vLwovLy8gTm90ZSB0aGF0IGl0J3MgYWxtb3N0IGFsd2F5cyBlYXNpZXIgdG8gdXNlIFtzaGEyNTZdIHJhdGhlciB0aGFuIGNyZWF0aW5nIGEKLy8vIG5ldyBpbnN0YW5jZS4KY2xhc3MgU2hhMjU2IGV4dGVuZHMgSGFzaCB7CiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGJsb2NrU2l6ZSA9IDE2ICogYnl0ZXNQZXJXb3JkOwoKICBTaGEyNTYuXygpOwoKICBTaGEyNTYgbmV3SW5zdGFuY2UoKSA9PiBuZXcgU2hhMjU2Ll8oKTsKCiAgQG92ZXJyaWRlCiAgQnl0ZUNvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxEaWdlc3Q+IHNpbmspID0+CiAgICAgIG5ldyBCeXRlQ29udmVyc2lvblNpbmsuZnJvbShuZXcgX1NoYTI1NlNpbmsoc2luaykpOwp9CgovLy8gRGF0YSBmcm9tIGEgbm9uLWxpbmVhciBmdW5jdGlvbiB0aGF0IGZ1bmN0aW9ucyBhcyByZXByb2R1Y2libGUgbm9pc2UuCmNvbnN0IExpc3Q8aW50PiBfbm9pc2UgPSBjb25zdCBbCiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSwgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgLy8KICAweDkyM2Y4MmE0LCAweGFiMWM1ZWQ1LCAweGQ4MDdhYTk4LCAweDEyODM1YjAxLCAweDI0MzE4NWJlLCAweDU1MGM3ZGMzLAogIDB4NzJiZTVkNzQsIDB4ODBkZWIxZmUsIDB4OWJkYzA2YTcsIDB4YzE5YmYxNzQsIDB4ZTQ5YjY5YzEsIDB4ZWZiZTQ3ODYsCiAgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYywgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSwKICAweDk4M2U1MTUyLCAweGE4MzFjNjZkLCAweGIwMDMyN2M4LCAweGJmNTk3ZmM3LCAweGM2ZTAwYmYzLCAweGQ1YTc5MTQ3LAogIDB4MDZjYTYzNTEsIDB4MTQyOTI5NjcsIDB4MjdiNzBhODUsIDB4MmUxYjIxMzgsIDB4NGQyYzZkZmMsIDB4NTMzODBkMTMsCiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSwgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwKICAweGMyNGI4YjcwLCAweGM3NmM1MWEzLCAweGQxOTJlODE5LCAweGQ2OTkwNjI0LCAweGY0MGUzNTg1LCAweDEwNmFhMDcwLAogIDB4MTlhNGMxMTYsIDB4MWUzNzZjMDgsIDB4Mjc0ODc3NGMsIDB4MzRiMGJjYjUsIDB4MzkxYzBjYjMsIDB4NGVkOGFhNGEsCiAgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMywgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCwKICAweDkwYmVmZmZhLCAweGE0NTA2Y2ViLCAweGJlZjlhM2Y3LCAweGM2NzE3OGYyCl07CgovLy8gVGhlIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIFtTaGEyNTZdLgovLy8KLy8vIFRoaXMgaXMgc2VwYXJhdGUgc28gdGhhdCBpdCBjYW4gZXh0ZW5kIFtIYXNoU2lua10gd2l0aG91dCBsZWFraW5nIGFkZGl0aW9uYWwKLy8vIHB1YmxpYyBtZW1iZXJzLgpjbGFzcyBfU2hhMjU2U2luayBleHRlbmRzIEhhc2hTaW5rIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBkaWdlc3QgPSBuZXcgVWludDMyTGlzdCg4KTsKCiAgLy8vIFRoZSBzaXh0ZWVuIHdvcmRzIGZyb20gdGhlIG9yaWdpbmFsIGNodW5rLCBleHRlbmRlZCB0byA2NCB3b3Jkcy4KICAvLy8KICAvLy8gVGhpcyBpcyBhbiBpbnN0YW5jZSB2YXJpYWJsZSB0byBhdm9pZCByZS1hbGxvY2F0aW5nLCBidXQgaXRzIGRhdGEgaXNuJ3QKICAvLy8gdXNlZCBhY3Jvc3MgaW52b2NhdGlvbnMgb2YgW3VwZGF0ZUhhc2hdLgogIGZpbmFsIFVpbnQzMkxpc3QgX2V4dGVuZGVkOwoKICBfU2hhMjU2U2luayhTaW5rPERpZ2VzdD4gc2luaykKICAgICAgOiBfZXh0ZW5kZWQgPSBuZXcgVWludDMyTGlzdCg2NCksCiAgICAgICAgc3VwZXIoc2luaywgMTYpIHsKICAgIC8vIEluaXRpYWwgdmFsdWUgb2YgdGhlIGhhc2ggcGFydHMuIEZpcnN0IDMyIGJpdHMgb2YgdGhlIGZyYWN0aW9uYWwgcGFydHMKICAgIC8vIG9mIHRoZSBzcXVhcmUgcm9vdHMgb2YgdGhlIGZpcnN0IDggcHJpbWUgbnVtYmVycy4KICAgIGRpZ2VzdFswXSA9IDB4NmEwOWU2Njc7CiAgICBkaWdlc3RbMV0gPSAweGJiNjdhZTg1OwogICAgZGlnZXN0WzJdID0gMHgzYzZlZjM3MjsKICAgIGRpZ2VzdFszXSA9IDB4YTU0ZmY1M2E7CiAgICBkaWdlc3RbNF0gPSAweDUxMGU1MjdmOwogICAgZGlnZXN0WzVdID0gMHg5YjA1Njg4YzsKICAgIGRpZ2VzdFs2XSA9IDB4MWY4M2Q5YWI7CiAgICBkaWdlc3RbN10gPSAweDViZTBjZDE5OwogIH0KCiAgLy8gVGhlIGZvbGxvd2luZyBoZWxwZXIgZnVuY3Rpb25zIGFyZSB0YWtlbiBkaXJlY3RseSBmcm9tCiAgLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjIzNC4KCiAgaW50IF9yb3RyMzIoaW50IG4sIGludCB4KSA9PiAoeCA+PiBuKSB8ICgoeCA8PCAoMzIgLSBuKSkgJiBtYXNrMzIpOwogIGludCBfY2goaW50IHgsIGludCB5LCBpbnQgeikgPT4gKHggJiB5KSBeICgofnggJiBtYXNrMzIpICYgeik7CiAgaW50IF9tYWooaW50IHgsIGludCB5LCBpbnQgeikgPT4gKHggJiB5KSBeICh4ICYgeikgXiAoeSAmIHopOwogIGludCBfYnNpZzAoaW50IHgpID0+IF9yb3RyMzIoMiwgeCkgXiBfcm90cjMyKDEzLCB4KSBeIF9yb3RyMzIoMjIsIHgpOwogIGludCBfYnNpZzEoaW50IHgpID0+IF9yb3RyMzIoNiwgeCkgXiBfcm90cjMyKDExLCB4KSBeIF9yb3RyMzIoMjUsIHgpOwogIGludCBfc3NpZzAoaW50IHgpID0+IF9yb3RyMzIoNywgeCkgXiBfcm90cjMyKDE4LCB4KSBeICh4ID4+IDMpOwogIGludCBfc3NpZzEoaW50IHgpID0+IF9yb3RyMzIoMTcsIHgpIF4gX3JvdHIzMigxOSwgeCkgXiAoeCA+PiAxMCk7CgogIEBvdmVycmlkZQogIHZvaWQgdXBkYXRlSGFzaChVaW50MzJMaXN0IGNodW5rKSB7CiAgICBhc3NlcnQoY2h1bmsubGVuZ3RoID09IDE2KTsKCiAgICAvLyBQcmVwYXJlIG1lc3NhZ2Ugc2NoZWR1bGUuCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspIHsKICAgICAgX2V4dGVuZGVkW2ldID0gY2h1bmtbaV07CiAgICB9CiAgICBmb3IgKHZhciBpID0gMTY7IGkgPCA2NDsgaSsrKSB7CiAgICAgIF9leHRlbmRlZFtpXSA9IGFkZDMyKGFkZDMyKF9zc2lnMShfZXh0ZW5kZWRbaSAtIDJdKSwgX2V4dGVuZGVkW2kgLSA3XSksCiAgICAgICAgICBhZGQzMihfc3NpZzAoX2V4dGVuZGVkW2kgLSAxNV0pLCBfZXh0ZW5kZWRbaSAtIDE2XSkpOwogICAgfQoKICAgIC8vIFNodWZmbGUgYXJvdW5kIHRoZSBiaXRzLgogICAgdmFyIGEgPSBkaWdlc3RbMF07CiAgICB2YXIgYiA9IGRpZ2VzdFsxXTsKICAgIHZhciBjID0gZGlnZXN0WzJdOwogICAgdmFyIGQgPSBkaWdlc3RbM107CiAgICB2YXIgZSA9IGRpZ2VzdFs0XTsKICAgIHZhciBmID0gZGlnZXN0WzVdOwogICAgdmFyIGcgPSBkaWdlc3RbNl07CiAgICB2YXIgaCA9IGRpZ2VzdFs3XTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY0OyBpKyspIHsKICAgICAgdmFyIHRlbXAxID0gYWRkMzIoYWRkMzIoaCwgX2JzaWcxKGUpKSwKICAgICAgICAgIGFkZDMyKF9jaChlLCBmLCBnKSwgYWRkMzIoX25vaXNlW2ldLCBfZXh0ZW5kZWRbaV0pKSk7CiAgICAgIHZhciB0ZW1wMiA9IGFkZDMyKF9ic2lnMChhKSwgX21haihhLCBiLCBjKSk7CiAgICAgIGggPSBnOwogICAgICBnID0gZjsKICAgICAgZiA9IGU7CiAgICAgIGUgPSBhZGQzMihkLCB0ZW1wMSk7CiAgICAgIGQgPSBjOwogICAgICBjID0gYjsKICAgICAgYiA9IGE7CiAgICAgIGEgPSBhZGQzMih0ZW1wMSwgdGVtcDIpOwogICAgfQoKICAgIC8vIFVwZGF0ZSBoYXNoIHZhbHVlcyBhZnRlciBpdGVyYXRpb24uCiAgICBkaWdlc3RbMF0gPSBhZGQzMihhLCBkaWdlc3RbMF0pOwogICAgZGlnZXN0WzFdID0gYWRkMzIoYiwgZGlnZXN0WzFdKTsKICAgIGRpZ2VzdFsyXSA9IGFkZDMyKGMsIGRpZ2VzdFsyXSk7CiAgICBkaWdlc3RbM10gPSBhZGQzMihkLCBkaWdlc3RbM10pOwogICAgZGlnZXN0WzRdID0gYWRkMzIoZSwgZGlnZXN0WzRdKTsKICAgIGRpZ2VzdFs1XSA9IGFkZDMyKGYsIGRpZ2VzdFs1XSk7CiAgICBkaWdlc3RbNl0gPSBhZGQzMihnLCBkaWdlc3RbNl0pOwogICAgZGlnZXN0WzddID0gYWRkMzIoaCwgZGlnZXN0WzddKTsKICB9Cn0KgI8ATk48ARcaARYUGRUBHQRRBC4fATsELgRPEhwMKwEOASoBDEI6AgFKIU1KSkpKSkpKSkoxAwEtBFEUJQwkAUcGTi8eASEoGk45HBwcHBwcHBwEATwpAUZBQEhIQkQBDCYgASEjHwYkTkAGASAXFxcXFxcXFwEjLUAzDQ0NGw0NDR8GASslJSUlJSUlJQQCAR5wYWNrYWdlOmNyeXB0by9zcmMvc2hhMjU2LmRhcnQxc2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbnZlcnQvbGliL2NvbnZlcnQuZGFydIGVLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgY29udmVydDsKCmV4cG9ydCAnc3JjL2FjY3VtdWxhdG9yX3NpbmsuZGFydCc7CmV4cG9ydCAnc3JjL2J5dGVfYWNjdW11bGF0b3Jfc2luay5kYXJ0JzsKZXhwb3J0ICdzcmMvaGV4LmRhcnQnOwpleHBvcnQgJ3NyYy9wZXJjZW50LmRhcnQnOwpleHBvcnQgJ3NyYy9zdHJpbmdfYWNjdW11bGF0b3Jfc2luay5kYXJ0JzsKDQBOTjwBEQEkKRcbKwEccGFja2FnZTpjb252ZXJ0L2NvbnZlcnQuZGFydDhzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY3J5cHRvL2xpYi9zcmMvZGlnZXN0X3NpbmsuZGFydILiLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGlnZXN0LmRhcnQnOwoKLy8vIEEgc2luayB1c2VkIHRvIGdldCBhIGRpZ2VzdCB2YWx1ZSBvdXQgb2YgYEhhc2guc3RhcnRDaHVua2VkQ29udmVyc2lvbmAuCmNsYXNzIERpZ2VzdFNpbmsgZXh0ZW5kcyBTaW5rPERpZ2VzdD4gewogIC8vLyBUaGUgdmFsdWUgYWRkZWQgdG8gdGhlIHNpbmssIGlmIGFueS4KICBEaWdlc3QgZ2V0IHZhbHVlIHsKICAgIGFzc2VydChfdmFsdWUgIT0gbnVsbCk7CiAgICByZXR1cm4gX3ZhbHVlOwogIH0KCiAgRGlnZXN0IF92YWx1ZTsKCiAgLy8vIEFkZHMgW3ZhbHVlXSB0byB0aGUgc2luay4KICAvLy8KICAvLy8gVW5saWtlIG1vc3Qgc2lua3MsIHRoaXMgbWF5IG9ubHkgYmUgY2FsbGVkIG9uY2UuCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGQoRGlnZXN0IHZhbHVlKSB7CiAgICBhc3NlcnQoX3ZhbHVlID09IG51bGwpOwogICAgX3ZhbHVlID0gdmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsb3NlKCkgewogICAgYXNzZXJ0KF92YWx1ZSAhPSBudWxsKTsKICB9Cn0KIABOTjwBFgFMKCsVHBMEAREBIAY3DBscFAQBDBEcBAIBI3BhY2thZ2U6Y3J5cHRvL3NyYy9kaWdlc3Rfc2luay5kYXJ0NnNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jcnlwdG8vbGliL3NyYy9oYXNoX3NpbmsuZGFydJUQLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJzsKCmltcG9ydCAncGFja2FnZTp0eXBlZF9kYXRhL3R5cGVkX2RhdGEuZGFydCc7CgppbXBvcnQgJ2RpZ2VzdC5kYXJ0JzsKaW1wb3J0ICd1dGlscy5kYXJ0JzsKCi8vLyBBIGJhc2UgY2xhc3MgZm9yIFtTaW5rXSBpbXBsZW1lbnRhdGlvbnMgZm9yIGhhc2ggYWxnb3JpdGhtcy4KLy8vCi8vLyBTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBbdXBkYXRlSGFzaF0gYW5kIFtkaWdlc3RdLgphYnN0cmFjdCBjbGFzcyBIYXNoU2luayBpbXBsZW1lbnRzIFNpbms8TGlzdDxpbnQ+PiB7CiAgLy8vIFRoZSBpbm5lciBzaW5rIHRoYXQgdGhpcyBzaG91bGQgZm9yd2FyZCB0by4KICBmaW5hbCBTaW5rPERpZ2VzdD4gX3Npbms7CgogIC8vLyBXaGV0aGVyIHRoZSBoYXNoIGZ1bmN0aW9uIG9wZXJhdGVzIG9uIGJpZy1lbmRpYW4gd29yZHMuCiAgZmluYWwgRW5kaWFuIF9lbmRpYW47CgogIC8vLyBUaGUgd29yZHMgaW4gdGhlIGN1cnJlbnQgY2h1bmsuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYW4gaW5zdGFuY2UgdmFyaWFibGUgdG8gYXZvaWQgcmUtYWxsb2NhdGluZywgYnV0IGl0cyBkYXRhIGlzbid0CiAgLy8vIHVzZWQgYWNyb3NzIGludm9jYXRpb25zIG9mIFtfaXRlcmF0ZV0uCiAgZmluYWwgVWludDMyTGlzdCBfY3VycmVudENodW5rOwoKICAvLy8gTWVzc2FnZXMgd2l0aCBtb3JlIHRoYW4gMl41My0xIGJpdHMgYXJlIG5vdCBzdXBwb3J0ZWQuIChUaGlzIGlzIHRoZQogIC8vLyBsYXJnZXN0IHZhbHVlIHRoYXQgaXMgcmVwcmVzZW50YWJsZSBvbiBib3RoIEpTIGFuZCB0aGUgRGFydCBWTS4pCiAgLy8vIFNvIHRoZSBtYXhpbXVtIGxlbmd0aCBpbiBieXRlcyBpcyAoMl41My0xKS84LgogIHN0YXRpYyBjb25zdCBfbWF4TWVzc2FnZUxlbmd0aEluQnl0ZXMgPSAweDAwMDNmZmZmZmZmZmZmZmY7CgogIC8vLyBUaGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBkYXRhIHNvIGZhciwgaW4gYnl0ZXMuCiAgaW50IF9sZW5ndGhJbkJ5dGVzID0gMDsKCiAgLy8vIERhdGEgdGhhdCBoYXMgeWV0IHRvIGJlIHByb2Nlc3NlZCBieSB0aGUgaGFzaCBmdW5jdGlvbi4KICBmaW5hbCBfcGVuZGluZ0RhdGEgPSBuZXcgVWludDhCdWZmZXIoKTsKCiAgLy8vIFdoZXRoZXIgW2Nsb3NlXSBoYXMgYmVlbiBjYWxsZWQuCiAgYm9vbCBfaXNDbG9zZWQgPSBmYWxzZTsKCiAgLy8vIFRoZSB3b3JkcyBpbiB0aGUgY3VycmVudCBkaWdlc3QuCiAgLy8vCiAgLy8vIFRoaXMgc2hvdWxkIGJlIHVwZGF0ZWQgZWFjaCB0aW1lIFt1cGRhdGVIYXNoXSBpcyBjYWxsZWQuCiAgVWludDMyTGlzdCBnZXQgZGlnZXN0OwoKICAvLy8gQ3JlYXRlcyBhIG5ldyBoYXNoLgogIC8vLwogIC8vLyBbY2h1bmtTaXplSW5Xb3Jkc10gcmVwcmVzZW50cyB0aGUgc2l6ZSBvZiB0aGUgaW5wdXQgY2h1bmtzIHByb2Nlc3NlZCBieQogIC8vLyB0aGUgYWxnb3JpdGhtLCBpbiB0ZXJtcyBvZiAzMi1iaXQgd29yZHMuCiAgSGFzaFNpbmsodGhpcy5fc2luaywgaW50IGNodW5rU2l6ZUluV29yZHMsIHtFbmRpYW4gZW5kaWFuOiBFbmRpYW4uYmlnfSkKICAgICAgOiBfZW5kaWFuID0gZW5kaWFuLAogICAgICAgIF9jdXJyZW50Q2h1bmsgPSBuZXcgVWludDMyTGlzdChjaHVua1NpemVJbldvcmRzKTsKCiAgLy8vIFJ1bnMgYSBzaW5nbGUgaXRlcmF0aW9uIG9mIHRoZSBoYXNoIGNvbXB1dGF0aW9uLCB1cGRhdGluZyBbZGlnZXN0XSB3aXRoCiAgLy8vIHRoZSByZXN1bHQuCiAgLy8vCiAgLy8vIFtjaHVua10gaXMgdGhlIGN1cnJlbnQgY2h1bmssIHdob3NlIHNpemUgaXMgZ2l2ZW4gYnkgdGhlCiAgLy8vIGBjaHVua1NpemVJbldvcmRzYCBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KICB2b2lkIHVwZGF0ZUhhc2goVWludDMyTGlzdCBjaHVuayk7CgogIEBvdmVycmlkZQogIHZvaWQgYWRkKExpc3Q8aW50PiBkYXRhKSB7CiAgICBpZiAoX2lzQ2xvc2VkKSB0aHJvdyBuZXcgU3RhdGVFcnJvcignSGFzaC5hZGQoKSBjYWxsZWQgYWZ0ZXIgY2xvc2UoKS4nKTsKICAgIF9sZW5ndGhJbkJ5dGVzICs9IGRhdGEubGVuZ3RoOwogICAgX3BlbmRpbmdEYXRhLmFkZEFsbChkYXRhKTsKICAgIF9pdGVyYXRlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsb3NlKCkgewogICAgaWYgKF9pc0Nsb3NlZCkgcmV0dXJuOwogICAgX2lzQ2xvc2VkID0gdHJ1ZTsKCiAgICBfZmluYWxpemVEYXRhKCk7CiAgICBfaXRlcmF0ZSgpOwogICAgYXNzZXJ0KF9wZW5kaW5nRGF0YS5pc0VtcHR5KTsKICAgIF9zaW5rLmFkZChuZXcgRGlnZXN0KF9ieXRlRGlnZXN0KCkpKTsKICAgIF9zaW5rLmNsb3NlKCk7CiAgfQoKICBVaW50OExpc3QgX2J5dGVEaWdlc3QoKSB7CiAgICBpZiAoX2VuZGlhbiA9PSBFbmRpYW4uaG9zdCkgcmV0dXJuIGRpZ2VzdC5idWZmZXIuYXNVaW50OExpc3QoKTsKCiAgICB2YXIgYnl0ZURpZ2VzdCA9IG5ldyBVaW50OExpc3QoZGlnZXN0Lmxlbmd0aEluQnl0ZXMpOwogICAgdmFyIGJ5dGVEYXRhID0gYnl0ZURpZ2VzdC5idWZmZXIuYXNCeXRlRGF0YSgpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaWdlc3QubGVuZ3RoOyBpKyspIHsKICAgICAgYnl0ZURhdGEuc2V0VWludDMyKGkgKiBieXRlc1BlcldvcmQsIGRpZ2VzdFtpXSk7CiAgICB9CiAgICByZXR1cm4gYnl0ZURpZ2VzdDsKICB9CgogIC8vLyBJdGVyYXRlcyB0aHJvdWdoIFtfcGVuZGluZ0RhdGFdLCB1cGRhdGluZyB0aGUgaGFzaCBjb21wdXRhdGlvbiBmb3IgZWFjaAogIC8vLyBjaHVuay4KICB2b2lkIF9pdGVyYXRlKCkgewogICAgdmFyIHBlbmRpbmdEYXRhQnl0ZXMgPSBfcGVuZGluZ0RhdGEuYnVmZmVyLmFzQnl0ZURhdGEoKTsKICAgIHZhciBwZW5kaW5nRGF0YUNodW5rcyA9IF9wZW5kaW5nRGF0YS5sZW5ndGggfi8gX2N1cnJlbnRDaHVuay5sZW5ndGhJbkJ5dGVzOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwZW5kaW5nRGF0YUNodW5rczsgaSsrKSB7CiAgICAgIC8vIENvcHkgd29yZHMgZnJvbSB0aGUgcGVuZGluZyBkYXRhIGJ1ZmZlciBpbnRvIHRoZSBjdXJyZW50IGNodW5rIGJ1ZmZlci4KICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBfY3VycmVudENodW5rLmxlbmd0aDsgaisrKSB7CiAgICAgICAgX2N1cnJlbnRDaHVua1tqXSA9IHBlbmRpbmdEYXRhQnl0ZXMuZ2V0VWludDMyKAogICAgICAgICAgICBpICogX2N1cnJlbnRDaHVuay5sZW5ndGhJbkJ5dGVzICsgaiAqIGJ5dGVzUGVyV29yZCwgX2VuZGlhbik7CiAgICAgIH0KCiAgICAgIC8vIFJ1biB0aGUgaGFzaCBmdW5jdGlvbiBvbiB0aGUgY3VycmVudCBjaHVuay4KICAgICAgdXBkYXRlSGFzaChfY3VycmVudENodW5rKTsKICAgIH0KCiAgICAvLyBSZW1vdmUgYWxsIHBlbmRpbmcgZGF0YSB1cCB0byB0aGUgbGFzdCBjbGVhbiBjaHVuayBicmVhay4KICAgIF9wZW5kaW5nRGF0YS5yZW1vdmVSYW5nZSgKICAgICAgICAwLCBwZW5kaW5nRGF0YUNodW5rcyAqIF9jdXJyZW50Q2h1bmsubGVuZ3RoSW5CeXRlcyk7CiAgfQoKICAvLy8gRmluYWxpemVzIFtfcGVuZGluZ0RhdGFdLgogIC8vLwogIC8vLyBUaGlzIGFkZHMgYSAxIGJpdCB0byB0aGUgZW5kIG9mIHRoZSBtZXNzYWdlLCBhbmQgZXhwYW5kcyBpdCB3aXRoIDAgYml0cyB0bwogIC8vLyBwYWQgaXQgb3V0LgogIHZvaWQgX2ZpbmFsaXplRGF0YSgpIHsKICAgIC8vIFBhZCBvdXQgdGhlIGRhdGEgd2l0aCAweDgwLCBlaWdodCAwcywgYW5kIGFzIG1hbnkgbW9yZSAwcyBhcyB3ZSBuZWVkIHRvCiAgICAvLyBsYW5kIGNsZWFubHkgb24gYSBjaHVuayBib3VuZGFyeS4KICAgIF9wZW5kaW5nRGF0YS5hZGQoMHg4MCk7CiAgICB2YXIgY29udGVudHNMZW5ndGggPSBfbGVuZ3RoSW5CeXRlcyArIDk7CiAgICB2YXIgZmluYWxpemVkTGVuZ3RoID0gX3JvdW5kVXAoY29udGVudHNMZW5ndGgsIF9jdXJyZW50Q2h1bmsubGVuZ3RoSW5CeXRlcyk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbmFsaXplZExlbmd0aCAtIGNvbnRlbnRzTGVuZ3RoOyBpKyspIHsKICAgICAgX3BlbmRpbmdEYXRhLmFkZCgwKTsKICAgIH0KCiAgICBpZiAoX2xlbmd0aEluQnl0ZXMgPiBfbWF4TWVzc2FnZUxlbmd0aEluQnl0ZXMpIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAnSGFzaGluZyBpcyB1bnN1cHBvcnRlZCBmb3IgbWVzc2FnZXMgd2l0aCBtb3JlIHRoYW4gMl41MyBiaXRzLicpOwogICAgfQoKICAgIHZhciBsZW5ndGhJbkJpdHMgPSBfbGVuZ3RoSW5CeXRlcyAqIGJpdHNQZXJCeXRlOwoKICAgIC8vIEFkZCB0aGUgZnVsbCBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEgYXMgYSA2NC1iaXQgdmFsdWUgYXQgdGhlIGVuZCBvZiB0aGUKICAgIC8vIGhhc2guCiAgICB2YXIgb2Zmc2V0ID0gX3BlbmRpbmdEYXRhLmxlbmd0aDsKICAgIF9wZW5kaW5nRGF0YS5hZGRBbGwobmV3IFVpbnQ4TGlzdCg4KSk7CiAgICB2YXIgYnl0ZURhdGEgPSBfcGVuZGluZ0RhdGEuYnVmZmVyLmFzQnl0ZURhdGEoKTsKCiAgICAvLyBXZSdyZSBlc3NlbnRpYWxseSBkb2luZyBieXRlRGF0YS5zZXRVaW50NjQob2Zmc2V0LCBsZW5ndGhJbkJpdHMsIF9lbmRpYW4pCiAgICAvLyBoZXJlLCBidXQgdGhhdCBtZXRob2QgaXNuJ3Qgc3VwcG9ydGVkIG9uIGRhcnQyanMgc28gd2UgaW1wbGVtZW50IGl0CiAgICAvLyBtYW51YWxseSBpbnN0ZWFkLgogICAgdmFyIGhpZ2hCaXRzID0gbGVuZ3RoSW5CaXRzID4+IDMyOwogICAgdmFyIGxvd0JpdHMgPSBsZW5ndGhJbkJpdHMgJiBtYXNrMzI7CiAgICBpZiAoX2VuZGlhbiA9PSBFbmRpYW4uYmlnKSB7CiAgICAgIGJ5dGVEYXRhLnNldFVpbnQzMihvZmZzZXQsIGhpZ2hCaXRzLCBfZW5kaWFuKTsKICAgICAgYnl0ZURhdGEuc2V0VWludDMyKG9mZnNldCArIGJ5dGVzUGVyV29yZCwgbG93Qml0cywgX2VuZGlhbik7CiAgICB9IGVsc2UgewogICAgICBieXRlRGF0YS5zZXRVaW50MzIob2Zmc2V0LCBsb3dCaXRzLCBfZW5kaWFuKTsKICAgICAgYnl0ZURhdGEuc2V0VWludDMyKG9mZnNldCArIGJ5dGVzUGVyV29yZCwgaGlnaEJpdHMsIF9lbmRpYW4pOwogICAgfQogIH0KCiAgLy8vIFJvdW5kcyBbdmFsXSB1cCB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiBbbl0sIGFzIGxvbmcgYXMgW25dIGlzIGEgcG93ZXIgb2YKICAvLy8gdHdvLgogIGludCBfcm91bmRVcChpbnQgdmFsLCBpbnQgbikgPT4gKHZhbCArIG4gLSAxKSAmIC1uOwp9CoCgAE5OPAEaAS0BFhUBQQQ6NTIcAT4YASYGTi0iAUpHND4BNRoBPioBJxoBJwY/GQEaBk4vSho6AU4SBj8+JQEMHU0jHxAEAQwRGxYBFRAiKhMEARxEATozLjcGFwQBTg0UPVAyUDc3SggBNSEGAUEePQQBIAZREhlPKRwtUUEbBgE1IkwGATUBUQ0mKzUBUUsZJykhNUMNNEQGBAFQCzYCASFwYWNrYWdlOmNyeXB0by9zcmMvaGFzaF9zaW5rLmRhcnQyc2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NyeXB0by9saWIvc3JjL3V0aWxzLmRhcnSC7C8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gQSBiaXRtYXNrIHRoYXQgbGltaXRzIGFuIGludGVnZXIgdG8gMzIgYml0cy4KY29uc3QgbWFzazMyID0gMHhGRkZGRkZGRjsKCi8vLyBUaGUgbnVtYmVyIG9mIGJpdHMgaW4gYSBieXRlLgpjb25zdCBiaXRzUGVyQnl0ZSA9IDg7CgovLy8gVGhlIG51bWJlciBvZiBieXRlcyBpbiBhIDMyLWJpdCB3b3JkLgpjb25zdCBieXRlc1BlcldvcmQgPSA0OwoKLy8vIEFkZHMgW3hdIGFuZCBbeV0gd2l0aCAzMi1iaXQgb3ZlcmZsb3cgc2VtYW50aWNzLgppbnQgYWRkMzIoaW50IHgsIGludCB5KSA9PiAoeCArIHkpICYgbWFzazMyOwoKLy8vIEJpdHdpc2Ugcm90YXRlcyBbdmFsXSB0byB0aGUgbGVmdCBieSBbc2hpZnRdLCBvYmV5aW5nIDMyLWJpdCBvdmVyZmxvdwovLy8gc2VtYW50aWNzLgppbnQgcm90bDMyKGludCB2YWwsIGludCBzaGlmdCkgewogIHZhciBtb2RTaGlmdCA9IHNoaWZ0ICYgMzE7CiAgcmV0dXJuICgodmFsIDw8IG1vZFNoaWZ0KSAmIG1hc2szMikgfCAoKHZhbCAmIG1hc2szMikgPj4gKDMyIC0gbW9kU2hpZnQpKTsKfQoYAE5OPAExGwEiFwEqGAE1LQFKDyEdTQIBHXBhY2thZ2U6Y3J5cHRvL3NyYy91dGlscy5kYXJ0PnNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jb252ZXJ0L2xpYi9zcmMvYWNjdW11bGF0b3Jfc2luay5kYXJ0g+0vLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nOwoKLy8vIEEgc2luayB0aGF0IHByb3ZpZGVzIGFjY2VzcyB0byBhbGwgdGhlIFtldmVudHNdIHRoYXQgaGF2ZSBiZWVuIHBhc3NlZCB0byBpdC4KLy8vCi8vLyBTZWUgYWxzbyBbQ2h1bmtlZENvbnZlcnNpb25TaW5rLndpdGhDYWxsYmFja10uCmNsYXNzIEFjY3VtdWxhdG9yU2luazxUPiBpbXBsZW1lbnRzIFNpbms8VD4gewogIC8vLyBBbiB1bm1vZGlmaWFibGUgbGlzdCBvZiBldmVudHMgcGFzc2VkIHRvIHRoaXMgc2luayBzbyBmYXIuCiAgTGlzdDxUPiBnZXQgZXZlbnRzID0+IG5ldyBVbm1vZGlmaWFibGVMaXN0VmlldyhfZXZlbnRzKTsKICBmaW5hbCBfZXZlbnRzID0gPFQ+W107CgogIC8vLyBXaGV0aGVyIFtjbG9zZV0gaGFzIGJlZW4gY2FsbGVkLgogIGJvb2wgZ2V0IGlzQ2xvc2VkID0+IF9pc0Nsb3NlZDsKICB2YXIgX2lzQ2xvc2VkID0gZmFsc2U7CgogIC8vLyBSZW1vdmVzIGFsbCBldmVudHMgZnJvbSBbZXZlbnRzXS4KICAvLy8KICAvLy8gVGhpcyBjYW4gYmUgdXNlZCB0byBhdm9pZCBkb3VibGUtcHJvY2Vzc2luZyBldmVudHMuCiAgdm9pZCBjbGVhcigpIHsKICAgIF9ldmVudHMuY2xlYXIoKTsKICB9CgogIHZvaWQgYWRkKFQgZXZlbnQpIHsKICAgIGlmIChfaXNDbG9zZWQpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIkNhbid0IGFkZCB0byBhIGNsb3NlZCBzaW5rLiIpOwogICAgfQoKICAgIF9ldmVudHMuYWRkKGV2ZW50KTsKICB9CgogIHZvaWQgY2xvc2UoKSB7CiAgICBfaXNDbG9zZWQgPSB0cnVlOwogIH0KfQonAE5OPAEaAVEEMy5BOxkBJyIZASgGOhEVBAEWFTsGARgEAREWBAIBKXBhY2thZ2U6Y29udmVydC9zcmMvYWNjdW11bGF0b3Jfc2luay5kYXJ0Q3Nka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jb252ZXJ0L2xpYi9zcmMvYnl0ZV9hY2N1bXVsYXRvcl9zaW5rLmRhcnSFwi8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6Y29udmVydCc7CmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJzsKCmltcG9ydCAncGFja2FnZTp0eXBlZF9kYXRhL3R5cGVkX2RhdGEuZGFydCc7CgovLy8gQSBzaW5rIHRoYXQgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBjb25jYXRlbmF0ZWQgYnl0ZXMgcGFzc2VkIHRvIGl0LgovLy8KLy8vIFNlZSBhbHNvIFtCeXRlQ29udmVyc2lvblNpbmsud2l0aENhbGxiYWNrXS4KY2xhc3MgQnl0ZUFjY3VtdWxhdG9yU2luayBleHRlbmRzIEJ5dGVDb252ZXJzaW9uU2lua0Jhc2UgewogIC8vLyBUaGUgYnl0ZXMgYWNjdW11bGF0ZWQgc28gZmFyLgogIC8vLwogIC8vLyBUaGUgcmV0dXJuZWQgW1VpbnQ4TGlzdF0gaXMgdmlld2luZyBhIHNoYXJlZCBidWZmZXIsIHNvIGl0IHNob3VsZCBub3QgYmUKICAvLy8gY2hhbmdlZCBhbmQgYW55IGJ5dGVzIG91dHNpZGUgdGhlIHZpZXcgc2hvdWxkIG5vdCBiZSBhY2Nlc3NlZC4KICBVaW50OExpc3QgZ2V0IGJ5dGVzID0+IG5ldyBVaW50OExpc3QudmlldyhfYnVmZmVyLmJ1ZmZlciwgMCwgX2J1ZmZlci5sZW5ndGgpOwoKICBmaW5hbCBfYnVmZmVyID0gbmV3IFVpbnQ4QnVmZmVyKCk7CgogIC8vLyBXaGV0aGVyIFtjbG9zZV0gaGFzIGJlZW4gY2FsbGVkLgogIGJvb2wgZ2V0IGlzQ2xvc2VkID0+IF9pc0Nsb3NlZDsKICB2YXIgX2lzQ2xvc2VkID0gZmFsc2U7CgogIC8vLyBSZW1vdmVzIGFsbCBieXRlcyBmcm9tIFtieXRlc10uCiAgLy8vCiAgLy8vIFRoaXMgY2FuIGJlIHVzZWQgdG8gYXZvaWQgZG91YmxlLXByb2Nlc3NpbmcgZGF0YS4KICB2b2lkIGNsZWFyKCkgewogICAgX2J1ZmZlci5jbGVhcigpOwogIH0KCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGJ5dGVzKSB7CiAgICBpZiAoX2lzQ2xvc2VkKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJDYW4ndCBhZGQgdG8gYSBjbG9zZWQgc2luay4iKTsKICAgIH0KCiAgICBfYnVmZmVyLmFkZEFsbChieXRlcyk7CiAgfQoKICB2b2lkIGFkZFNsaWNlKExpc3Q8aW50PiBjaHVuaywgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgaWYgKF9pc0Nsb3NlZCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiQ2FuJ3QgYWRkIHRvIGEgY2xvc2VkIHNpbmsuIik7CiAgICB9CgogICAgX2J1ZmZlci5hZGRBbGwoY2h1bmssIHN0YXJ0LCBlbmQpOwogICAgaWYgKGlzTGFzdCkgX2lzQ2xvc2VkID0gdHJ1ZTsKICB9CgogIHZvaWQgY2xvc2UoKSB7CiAgICBfaXNDbG9zZWQgPSB0cnVlOwogIH0KfQo3AE5OPAEXGgEtAUgEMDskBk9FUAElASciGQEmBjgRFQQBHhU7BgEbBAFEFTsGASciBAERFgQCAS5wYWNrYWdlOmNvbnZlcnQvc3JjL2J5dGVfYWNjdW11bGF0b3Jfc2luay5kYXJ0MXNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jb252ZXJ0L2xpYi9zcmMvaGV4LmRhcnSDVi8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGNvbnZlcnQuaGV4OwoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwoKaW1wb3J0ICdoZXgvZW5jb2Rlci5kYXJ0JzsKaW1wb3J0ICdoZXgvZGVjb2Rlci5kYXJ0JzsKCmV4cG9ydCAnaGV4L2VuY29kZXIuZGFydCcgaGlkZSBoZXhFbmNvZGVyOwpleHBvcnQgJ2hleC9kZWNvZGVyLmRhcnQnIGhpZGUgaGV4RGVjb2RlcjsKCi8vLyBUaGUgY2Fub25pY2FsIGluc3RhbmNlIG9mIFtIZXhDb2RlY10uCmNvbnN0IGhleCA9IGNvbnN0IEhleENvZGVjLl8oKTsKCi8vLyBBIGNvZGVjIHRoYXQgY29udmVydHMgYnl0ZSBhcnJheXMgdG8gYW5kIGZyb20gaGV4YWRlY2ltYWwgc3RyaW5ncywgZm9sbG93aW5nCi8vLyBbdGhlIEJhc2UxNiBzcGVjXVtyZmNdLgovLy8KLy8vIFtyZmNdOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDY0OCNzZWN0aW9uLTgKLy8vCi8vLyBUaGlzIHNob3VsZCBiZSB1c2VkIHZpYSB0aGUgW2hleF0gZmllbGQuCmNsYXNzIEhleENvZGVjIGV4dGVuZHMgQ29kZWM8TGlzdDxpbnQ+LCBTdHJpbmc+IHsKICBIZXhFbmNvZGVyIGdldCBlbmNvZGVyID0+IGhleEVuY29kZXI7CiAgSGV4RGVjb2RlciBnZXQgZGVjb2RlciA9PiBoZXhEZWNvZGVyOwoKICBjb25zdCBIZXhDb2RlYy5fKCk7Cn0KHwBOTjwBFQEXARsbASsrASogAVEcBDkELTIoKAEWAgEccGFja2FnZTpjb252ZXJ0L3NyYy9oZXguZGFydDVzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29udmVydC9saWIvc3JjL3BlcmNlbnQuZGFydIX8Ly8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgY29udmVydC5wZXJjZW50OwoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwoKaW1wb3J0ICdwZXJjZW50L2VuY29kZXIuZGFydCc7CmltcG9ydCAncGVyY2VudC9kZWNvZGVyLmRhcnQnOwoKZXhwb3J0ICdwZXJjZW50L2VuY29kZXIuZGFydCcgaGlkZSBwZXJjZW50RW5jb2RlcjsKZXhwb3J0ICdwZXJjZW50L2RlY29kZXIuZGFydCcgaGlkZSBwZXJjZW50RGVjb2RlcjsKCi8vLyBUaGUgY2Fub25pY2FsIGluc3RhbmNlIG9mIFtQZXJjZW50Q29kZWNdLgpjb25zdCBwZXJjZW50ID0gY29uc3QgUGVyY2VudENvZGVjLl8oKTsKCi8vIFRPRE8obndlaXopOiBBZGQgZmxhZ3MgdG8gc3VwcG9ydCBnZW5lcmF0aW5nIGFuZCBpbnRlcnByZXRpbmcgIisiIGFzIGEgc3BhY2UKLy8gY2hhcmFjdGVyLiBBbHNvIGFkZCBhbiBvcHRpb24gZm9yIGN1c3RvbSBzZXRzIG9mIHVucmVzZXJ2ZWQgY2hhcmFjdGVycy4KLy8vIEEgY29kZWMgdGhhdCBjb252ZXJ0cyBieXRlIGFycmF5cyB0byBhbmQgZnJvbSBwZXJjZW50LWVuY29kZWQgKGFsc28ga25vd24gYXMKLy8vIFVSTC1lbmNvZGVkKSBzdHJpbmdzIGFjY29yZGluZyB0byBbUkZDIDM5ODZdW3JmY10uCi8vLwovLy8gW3JmY106IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMi4xCi8vLwovLy8gW2VuY29kZXJdIGVuY29kZXMgYWxsIGJ5dGVzIG90aGVyIHRoYW4gQVNDSUkgbGV0dGVycywgZGVjaW1hbCBkaWdpdHMsIG9yIG9uZQovLy8gb2YgYC0uX35gLiBUaGlzIG1hdGNoZXMgdGhlIGJlaGF2aW9yIG9mIFtVcmkuZW5jb2RlUXVlcnlDb21wb25lbnRdIGV4Y2VwdAovLy8gdGhhdCBpdCBkb2Vzbid0IGVuY29kZSBgMHgyMGAgYnl0ZXMgdG8gdGhlIGArYCBjaGFyYWN0ZXIuCi8vLwovLy8gVG8gYmUgbWF4aW1hbGx5IGZsZXhpYmxlLCBbZGVjb2Rlcl0gd2lsbCBkZWNvZGUgYW55IHBlcmNlbnQtZW5jb2RlZCBieXRlIGFuZAovLy8gd2lsbCBhbGxvdyBhbnkgbm9uLXBlcmNlbnQtZW5jb2RlZCBieXRlIG90aGVyIHRoYW4gYCVgLiBCeSBkZWZhdWx0LCBpdAovLy8gaW50ZXJwcmV0cyBgK2AgYXMgYDB4MkJgIHJhdGhlciB0aGFuIGAweDIwYCBhcyBlbWl0dGVkIGJ5Ci8vLyBbVXJpLmVuY29kZVF1ZXJ5Q29tcG9uZW50XS4KY2xhc3MgUGVyY2VudENvZGVjIGV4dGVuZHMgQ29kZWM8TGlzdDxpbnQ+LCBTdHJpbmc+IHsKICBQZXJjZW50RW5jb2RlciBnZXQgZW5jb2RlciA9PiBwZXJjZW50RW5jb2RlcjsKICBQZXJjZW50RGVjb2RlciBnZXQgZGVjb2RlciA9PiBwZXJjZW50RGVjb2RlcjsKCiAgY29uc3QgUGVyY2VudENvZGVjLl8oKTsKfQooAE5OPAEZARcBHx8BMzMBLigBUEtRNwQ7BFFOPgRRSz4gNjAwARoCASBwYWNrYWdlOmNvbnZlcnQvc3JjL3BlcmNlbnQuZGFydEVzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29udmVydC9saWIvc3JjL3N0cmluZ19hY2N1bXVsYXRvcl9zaW5rLmRhcnSEuC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6Y29udmVydCc7CgovLy8gQSBzaW5rIHRoYXQgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBjb25jYXRlbmF0ZWQgc3RyaW5ncyBwYXNzZWQgdG8gaXQuCi8vLwovLy8gU2VlIGFsc28gW1N0cmluZ0NvbnZlcnNpb25TaW5rLndpdGhDYWxsYmFja10uCmNsYXNzIFN0cmluZ0FjY3VtdWxhdG9yU2luayBleHRlbmRzIFN0cmluZ0NvbnZlcnNpb25TaW5rQmFzZSB7CiAgLy8vIFRoZSBzdHJpbmcgYWNjdW11bGF0ZWQgc28gZmFyLgogIFN0cmluZyBnZXQgc3RyaW5nID0+IF9idWZmZXIudG9TdHJpbmcoKTsKICBmaW5hbCBfYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwoKICAvLy8gV2hldGhlciBbY2xvc2VdIGhhcyBiZWVuIGNhbGxlZC4KICBib29sIGdldCBpc0Nsb3NlZCA9PiBfaXNDbG9zZWQ7CiAgdmFyIF9pc0Nsb3NlZCA9IGZhbHNlOwoKICAvLy8gRW1wdGllcyBbc3RyaW5nXS4KICAvLy8KICAvLy8gVGhpcyBjYW4gYmUgdXNlZCB0byBhdm9pZCBkb3VibGUtcHJvY2Vzc2luZyBkYXRhLgogIHZvaWQgY2xlYXIoKSB7CiAgICBfYnVmZmVyLmNsZWFyKCk7CiAgfQoKICB2b2lkIGFkZChTdHJpbmcgY2h1bmspIHsKICAgIGlmIChfaXNDbG9zZWQpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIkNhbid0IGFkZCB0byBhIGNsb3NlZCBzaW5rLiIpOwogICAgfQoKICAgIF9idWZmZXIud3JpdGUoY2h1bmspOwogIH0KCiAgdm9pZCBhZGRTbGljZShTdHJpbmcgY2h1bmssIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIGlmIChfaXNDbG9zZWQpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIkNhbid0IGFkZCB0byBhIGNsb3NlZCBzaW5rLiIpOwogICAgfQoKICAgIF9idWZmZXIud3JpdGUoY2h1bmsuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpKTsKICAgIGlmIChpc0xhc3QpIF9pc0Nsb3NlZCA9IHRydWU7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgX2lzQ2xvc2VkID0gdHJ1ZTsKICB9Cn0KMABOTjwBFwFKBDI/JSsmASciGQEYBjgRFQQBGxU7BgEaBAFBFTsGATAiBAERFgQCATBwYWNrYWdlOmNvbnZlcnQvc3JjL3N0cmluZ19hY2N1bXVsYXRvcl9zaW5rLmRhcnQ3c2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL3R5cGVkX2RhdGEvbGliL3R5cGVkX2RhdGEuZGFydIFoLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBVdGlsaXRpZXMgYW5kIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byB0aGUgImRhcnQ6dHlwZWRfZGF0YSIgbGlicmFyeS4KbGlicmFyeSB0eXBlZF9kYXRhOwoKZXhwb3J0ICJwYWNrYWdlOnR5cGVkX2RhdGEvdHlwZWRfYnVmZmVycy5kYXJ0IjsKCgBOTjwBShQBMAEicGFja2FnZTp0eXBlZF9kYXRhL3R5cGVkX2RhdGEuZGFydDlzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29udmVydC9saWIvc3JjL2hleC9lbmNvZGVyLmRhcnSLiS8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGNvbnZlcnQuaGV4LmVuY29kZXI7CgppbXBvcnQgJ2RhcnQ6Y29udmVydCc7CmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJzsKCmltcG9ydCAncGFja2FnZTpjaGFyY29kZS9hc2NpaS5kYXJ0JzsKCi8vLyBUaGUgY2Fub25pY2FsIGluc3RhbmNlIG9mIFtIZXhFbmNvZGVyXS4KY29uc3QgaGV4RW5jb2RlciA9IGNvbnN0IEhleEVuY29kZXIuXygpOwoKLy8vIEEgY29udmVydGVyIHRoYXQgZW5jb2RlcyBieXRlIGFycmF5cyBpbnRvIGhleGFkZWNpbWFsIHN0cmluZ3MuCi8vLwovLy8gVGhpcyB3aWxsIHRocm93IGEgW1JhbmdlRXJyb3JdIGlmIHRoZSBieXRlIGFycmF5IGhhcyBhbnkgZGlnaXRzIHRoYXQgZG9uJ3QKLy8vIGZpdCBpbiB0aGUgZ2FtdXQgb2YgYSBieXRlLgpjbGFzcyBIZXhFbmNvZGVyIGV4dGVuZHMgQ29udmVydGVyPExpc3Q8aW50PiwgU3RyaW5nPiB7CiAgY29uc3QgSGV4RW5jb2Rlci5fKCk7CgogIFN0cmluZyBjb252ZXJ0KExpc3Q8aW50PiBieXRlcykgPT4gX2NvbnZlcnQoYnl0ZXMsIDAsIGJ5dGVzLmxlbmd0aCk7CgogIEJ5dGVDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8U3RyaW5nPiBzaW5rKSA9PgogICAgICBuZXcgX0hleEVuY29kZXJTaW5rKHNpbmspOwp9CgovLy8gQSBjb252ZXJzaW9uIHNpbmsgZm9yIGNodW5rZWQgaGV4YWRlY2ltYWwgZW5jb2RpbmcuCmNsYXNzIF9IZXhFbmNvZGVyU2luayBleHRlbmRzIEJ5dGVDb252ZXJzaW9uU2lua0Jhc2UgewogIC8vLyBUaGUgdW5kZXJseWluZyBzaW5rIHRvIHdoaWNoIGRlY29kZWQgYnl0ZSBhcnJheXMgd2lsbCBiZSBwYXNzZWQuCiAgZmluYWwgU2luazxTdHJpbmc+IF9zaW5rOwoKICBfSGV4RW5jb2RlclNpbmsodGhpcy5fc2luayk7CgogIHZvaWQgYWRkKExpc3Q8aW50PiBjaHVuaykgewogICAgX3NpbmsuYWRkKF9jb252ZXJ0KGNodW5rLCAwLCBjaHVuay5sZW5ndGgpKTsKICB9CgogIHZvaWQgYWRkU2xpY2UoTGlzdDxpbnQ+IGNodW5rLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBjaHVuay5sZW5ndGgpOwogICAgX3NpbmsuYWRkKF9jb252ZXJ0KGNodW5rLCBzdGFydCwgZW5kKSk7CiAgICBpZiAoaXNMYXN0KSBfc2luay5jbG9zZSgpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9zaW5rLmNsb3NlKCk7CiAgfQp9CgpTdHJpbmcgX2NvbnZlcnQoTGlzdDxpbnQ+IGJ5dGVzLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAvLyBBIFVpbnQ4TGlzdCBpcyBtb3JlIGVmZmljaWVudCB0aGFuIGEgU3RyaW5nQnVmZmVyIGdpdmVuIHRoYXQgd2Uga25vdyB0aGF0CiAgLy8gd2UncmUgb25seSBlbWl0dGluZyBBU0NJSS1jb21wYXRpYmxlIGNoYXJhY3RlcnMsIGFuZCB0aGF0IHdlIGtub3cgdGhlCiAgLy8gbGVuZ3RoIGFoZWFkIG9mIHRpbWUuCiAgdmFyIGJ1ZmZlciA9IG5ldyBVaW50OExpc3QoKGVuZCAtIHN0YXJ0KSAqIDIpOwogIHZhciBidWZmZXJJbmRleCA9IDA7CgogIC8vIEEgYml0d2lzZSBPUiBvZiBhbGwgYnl0ZXMgaW4gW2J5dGVzXS4gVGhpcyBhbGxvd3MgdXMgdG8gY2hlY2sgZm9yCiAgLy8gb3V0LW9mLXJhbmdlIGJ5dGVzIHdpdGhvdXQgYWRkaW5nIG1vcmUgYnJhbmNoZXMgdGhhbiBuZWNlc3NhcnkgdG8gdGhlCiAgLy8gY29yZSBsb29wLgogIHZhciBieXRlT3IgPSAwOwogIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICB2YXIgYnl0ZSA9IGJ5dGVzW2ldOwogICAgYnl0ZU9yIHw9IGJ5dGU7CgogICAgLy8gVGhlIGJpdHdpc2UgYXJpdGhtZXRpYyBoZXJlIGlzIGVxdWl2YWxlbnQgdG8gYGJ5dGUgfi8gMTZgIGFuZCBgYnl0ZSAlIDE2YAogICAgLy8gZm9yIHZhbGlkIGJ5dGUgdmFsdWVzLCBidXQgaXMgZWFzaWVyIGZvciBkYXJ0MmpzIHRvIG9wdGltaXplIGdpdmVuIHRoYXQKICAgIC8vIGl0IGNhbid0IHByb3ZlIHRoYXQgW2J5dGVdIHdpbGwgYWx3YXlzIGJlIHBvc2l0aXZlLgogICAgYnVmZmVyW2J1ZmZlckluZGV4KytdID0gX2NvZGVVbml0Rm9yRGlnaXQoKGJ5dGUgJiAweEYwKSA+PiA0KTsKICAgIGJ1ZmZlcltidWZmZXJJbmRleCsrXSA9IF9jb2RlVW5pdEZvckRpZ2l0KGJ5dGUgJiAweDBGKTsKICB9CgogIGlmIChieXRlT3IgPj0gMCAmJiBieXRlT3IgPD0gMjU1KSByZXR1cm4gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGJ1ZmZlcik7CgogIC8vIElmIHRoZXJlIHdhcyBhbiBpbnZhbGlkIGJ5dGUsIGZpbmQgaXQgYW5kIHRocm93IGFuIGV4Y2VwdGlvbi4KICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgdmFyIGJ5dGUgPSBieXRlc1tpXTsKICAgIGlmIChieXRlID49IDAgJiYgYnl0ZSA8PSAweGZmKSBjb250aW51ZTsKICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgIkludmFsaWQgYnl0ZSAke2J5dGUgPCAwID8gIi0iIDogIiJ9MHgke2J5dGUuYWJzKCkudG9SYWRpeFN0cmluZygxNil9LiIsCiAgICAgICAgYnl0ZXMsCiAgICAgICAgaSk7CiAgfQoKICB0aHJvdyAndW5yZWFjaGFibGUnOwp9CgovLy8gUmV0dXJucyB0aGUgQVNDSUkvVW5pY29kZSBjb2RlIHVuaXQgY29ycmVzcG9uZGluZyB0byB0aGUgaGV4YWRlY2ltYWwgZGlnaXQKLy8vIFtkaWdpdF0uCmludCBfY29kZVVuaXRGb3JEaWdpdChpbnQgZGlnaXQpID0+IGRpZ2l0IDwgMTAgPyBkaWdpdCArICQwIDogZGlnaXQgKyAkYSAtIDEwOwpbAE5OPAEdARcaASYBLCkBQwRPIDgYAUcBQiECATg3RxwBHwEeMQQBRDosHwQBERMEAgE3T0sbMRcBR0sQEiYZFAFRTztDPAQBTQFDJhktH1EPDAQBFwIBTw1PASRwYWNrYWdlOmNvbnZlcnQvc3JjL2hleC9lbmNvZGVyLmRhcnQ5c2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbnZlcnQvbGliL3NyYy9oZXgvZGVjb2Rlci5kYXJ0lP0vLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBjb252ZXJ0LmhleC5kZWNvZGVyOwoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwppbXBvcnQgJ2RhcnQ6dHlwZWRfZGF0YSc7CgppbXBvcnQgJy4uL3V0aWxzLmRhcnQnOwoKLy8vIFRoZSBjYW5vbmljYWwgaW5zdGFuY2Ugb2YgW0hleERlY29kZXJdLgpjb25zdCBoZXhEZWNvZGVyID0gY29uc3QgSGV4RGVjb2Rlci5fKCk7CgovLy8gQSBjb252ZXJ0ZXIgdGhhdCBkZWNvZGVzIGhleGFkZWNpbWFsIHN0cmluZ3MgaW50byBieXRlIGFycmF5cy4KLy8vCi8vLyBCZWNhdXNlIHR3byBoZXhhZGVjaW1hbCBkaWdpdHMgY29ycmVzcG9uZCB0byBhIHNpbmdsZSBieXRlLCB0aGlzIHdpbGwgdGhyb3cKLy8vIGEgW0Zvcm1hdEV4Y2VwdGlvbl0gaWYgZ2l2ZW4gYW4gb2RkLWxlbmd0aCBzdHJpbmcuIEl0IHdpbGwgYWxzbyB0aHJvdyBhCi8vLyBbRm9ybWF0RXhjZXB0aW9uXSBpZiBnaXZlbiBhIHN0cmluZyBjb250YWluaW5nIG5vbi1oZXhhZGVjaW1hbCBjb2RlIHVuaXRzLgpjbGFzcyBIZXhEZWNvZGVyIGV4dGVuZHMgQ29udmVydGVyPFN0cmluZywgTGlzdDxpbnQ+PiB7CiAgY29uc3QgSGV4RGVjb2Rlci5fKCk7CgogIExpc3Q8aW50PiBjb252ZXJ0KFN0cmluZyBzdHJpbmcpIHsKICAgIGlmICghc3RyaW5nLmxlbmd0aC5pc0V2ZW4pIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICJJbnZhbGlkIGlucHV0IGxlbmd0aCwgbXVzdCBiZSBldmVuLiIsIHN0cmluZywgc3RyaW5nLmxlbmd0aCk7CiAgICB9CgogICAgdmFyIGJ5dGVzID0gbmV3IFVpbnQ4TGlzdChzdHJpbmcubGVuZ3RoIH4vIDIpOwogICAgX2RlY29kZShzdHJpbmcuY29kZVVuaXRzLCAwLCBzdHJpbmcubGVuZ3RoLCBieXRlcywgMCk7CiAgICByZXR1cm4gYnl0ZXM7CiAgfQoKICBTdHJpbmdDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8TGlzdDxpbnQ+PiBzaW5rKSA9PgogICAgICBuZXcgX0hleERlY29kZXJTaW5rKHNpbmspOwp9CgovLy8gQSBjb252ZXJzaW9uIHNpbmsgZm9yIGNodW5rZWQgaGV4YWRlY2ltYWwgZGVjb2RpbmcuCmNsYXNzIF9IZXhEZWNvZGVyU2luayBleHRlbmRzIFN0cmluZ0NvbnZlcnNpb25TaW5rQmFzZSB7CiAgLy8vIFRoZSB1bmRlcmx5aW5nIHNpbmsgdG8gd2hpY2ggZGVjb2RlZCBieXRlIGFycmF5cyB3aWxsIGJlIHBhc3NlZC4KICBmaW5hbCBTaW5rPExpc3Q8aW50Pj4gX3Npbms7CgogIC8vLyBUaGUgdHJhaWxpbmcgZGlnaXQgZnJvbSB0aGUgcHJldmlvdXMgc3RyaW5nLgogIC8vLwogIC8vLyBUaGlzIHdpbGwgYmUgbm9uLWBudWxsYCBpZiB0aGUgbW9zdCByZWNlbnQgc3RyaW5nIGhhZCBhbiBvZGQgbnVtYmVyIG9mCiAgLy8vIGhleGFkZWNpbWFsIGRpZ2l0cy4gU2luY2UgaXQncyB0aGUgbW9zdCBzaWduaWZpY2FudCBkaWdpdCwgaXQncyBhbHdheXMgYQogIC8vLyBtdWx0aXBsZSBvZiAxNi4KICBpbnQgX2xhc3REaWdpdDsKCiAgX0hleERlY29kZXJTaW5rKHRoaXMuX3NpbmspOwoKICB2b2lkIGFkZFNsaWNlKFN0cmluZyBzdHJpbmcsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHN0cmluZy5sZW5ndGgpOwoKICAgIGlmIChzdGFydCA9PSBlbmQpIHsKICAgICAgaWYgKGlzTGFzdCkgX2Nsb3NlKHN0cmluZywgZW5kKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHZhciBjb2RlVW5pdHMgPSBzdHJpbmcuY29kZVVuaXRzOwogICAgVWludDhMaXN0IGJ5dGVzOwogICAgaW50IGJ5dGVzU3RhcnQ7CiAgICBpZiAoX2xhc3REaWdpdCA9PSBudWxsKSB7CiAgICAgIGJ5dGVzID0gbmV3IFVpbnQ4TGlzdCgoZW5kIC0gc3RhcnQpIH4vIDIpOwogICAgICBieXRlc1N0YXJ0ID0gMDsKICAgIH0gZWxzZSB7CiAgICAgIHZhciBoZXhQYWlycyA9IChlbmQgLSBzdGFydCAtIDEpIH4vIDI7CiAgICAgIGJ5dGVzID0gbmV3IFVpbnQ4TGlzdCgxICsgaGV4UGFpcnMpOwogICAgICBieXRlc1swXSA9IF9sYXN0RGlnaXQgKyBkaWdpdEZvckNvZGVVbml0KGNvZGVVbml0cywgc3RhcnQpOwogICAgICBzdGFydCsrOwogICAgICBieXRlc1N0YXJ0ID0gMTsKICAgIH0KCiAgICBfbGFzdERpZ2l0ID0gX2RlY29kZShjb2RlVW5pdHMsIHN0YXJ0LCBlbmQsIGJ5dGVzLCBieXRlc1N0YXJ0KTsKCiAgICBfc2luay5hZGQoYnl0ZXMpOwogICAgaWYgKGlzTGFzdCkgX2Nsb3NlKHN0cmluZywgZW5kKTsKICB9CgogIEJ5dGVDb252ZXJzaW9uU2luayBhc1V0ZjhTaW5rKGJvb2wgYWxsb3dNYWxmb3JtZWQpID0+CiAgICAgIG5ldyBfSGV4RGVjb2RlckJ5dGVTaW5rKF9zaW5rKTsKCiAgdm9pZCBjbG9zZSgpID0+IF9jbG9zZSgpOwoKICAvLy8gTGlrZSBbY2xvc2VdLCBidXQgaW5jbHVkZXMgW3N0cmluZ10gYW5kIFtpbmRleF0gaW4gdGhlIFtGb3JtYXRFeGNlcHRpb25dCiAgLy8vIGlmIG9uZSBpcyB0aHJvd24uCiAgdm9pZCBfY2xvc2UoW1N0cmluZyBzdHJpbmcsIGludCBpbmRleF0pIHsKICAgIGlmIChfbGFzdERpZ2l0ICE9IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICJJbnB1dCBlbmRlZCB3aXRoIGluY29tcGxldGUgZW5jb2RlZCBieXRlLiIsIHN0cmluZywgaW5kZXgpOwogICAgfQoKICAgIF9zaW5rLmNsb3NlKCk7CiAgfQp9CgovLy8gQSBjb252ZXJzaW9uIHNpbmsgZm9yIGNodW5rZWQgaGV4YWRlY2ltYWwgZGVjb2RpbmcgZnJvbSBVVEYtOCBieXRlcy4KY2xhc3MgX0hleERlY29kZXJCeXRlU2luayBleHRlbmRzIEJ5dGVDb252ZXJzaW9uU2lua0Jhc2UgewogIC8vLyBUaGUgdW5kZXJseWluZyBzaW5rIHRvIHdoaWNoIGRlY29kZWQgYnl0ZSBhcnJheXMgd2lsbCBiZSBwYXNzZWQuCiAgZmluYWwgU2luazxMaXN0PGludD4+IF9zaW5rOwoKICAvLy8gVGhlIHRyYWlsaW5nIGRpZ2l0IGZyb20gdGhlIHByZXZpb3VzIHN0cmluZy4KICAvLy8KICAvLy8gVGhpcyB3aWxsIGJlIG5vbi1gbnVsbGAgaWYgdGhlIG1vc3QgcmVjZW50IHN0cmluZyBoYWQgYW4gb2RkIG51bWJlciBvZgogIC8vLyBoZXhhZGVjaW1hbCBkaWdpdHMuIFNpbmNlIGl0J3MgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgZGlnaXQsIGl0J3MgYWx3YXlzIGEKICAvLy8gbXVsdGlwbGUgb2YgMTYuCiAgaW50IF9sYXN0RGlnaXQ7CgogIF9IZXhEZWNvZGVyQnl0ZVNpbmsodGhpcy5fc2luayk7CgogIHZvaWQgYWRkKExpc3Q8aW50PiBjaHVuaykgPT4gYWRkU2xpY2UoY2h1bmssIDAsIGNodW5rLmxlbmd0aCwgZmFsc2UpOwoKICB2b2lkIGFkZFNsaWNlKExpc3Q8aW50PiBjaHVuaywgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgY2h1bmsubGVuZ3RoKTsKCiAgICBpZiAoc3RhcnQgPT0gZW5kKSB7CiAgICAgIGlmIChpc0xhc3QpIF9jbG9zZShjaHVuaywgZW5kKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIFVpbnQ4TGlzdCBieXRlczsKICAgIGludCBieXRlc1N0YXJ0OwogICAgaWYgKF9sYXN0RGlnaXQgPT0gbnVsbCkgewogICAgICBieXRlcyA9IG5ldyBVaW50OExpc3QoKGVuZCAtIHN0YXJ0KSB+LyAyKTsKICAgICAgYnl0ZXNTdGFydCA9IDA7CiAgICB9IGVsc2UgewogICAgICB2YXIgaGV4UGFpcnMgPSAoZW5kIC0gc3RhcnQgLSAxKSB+LyAyOwogICAgICBieXRlcyA9IG5ldyBVaW50OExpc3QoMSArIGhleFBhaXJzKTsKICAgICAgYnl0ZXNbMF0gPSBfbGFzdERpZ2l0ICsgZGlnaXRGb3JDb2RlVW5pdChjaHVuaywgc3RhcnQpOwogICAgICBzdGFydCsrOwogICAgICBieXRlc1N0YXJ0ID0gMTsKICAgIH0KCiAgICBfbGFzdERpZ2l0ID0gX2RlY29kZShjaHVuaywgc3RhcnQsIGVuZCwgYnl0ZXMsIGJ5dGVzU3RhcnQpOwoKICAgIF9zaW5rLmFkZChieXRlcyk7CiAgICBpZiAoaXNMYXN0KSBfY2xvc2UoY2h1bmssIGVuZCk7CiAgfQoKICB2b2lkIGNsb3NlKCkgPT4gX2Nsb3NlKCk7CgogIC8vLyBMaWtlIFtjbG9zZV0sIGJ1dCBpbmNsdWRlcyBbY2h1bmtdIGFuZCBbaW5kZXhdIGluIHRoZSBbRm9ybWF0RXhjZXB0aW9uXQogIC8vLyBpZiBvbmUgaXMgdGhyb3duLgogIHZvaWQgX2Nsb3NlKFtMaXN0PGludD4gY2h1bmssIGludCBpbmRleF0pIHsKICAgIGlmIChfbGFzdERpZ2l0ICE9IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICJJbnB1dCBlbmRlZCB3aXRoIGluY29tcGxldGUgZW5jb2RlZCBieXRlLiIsIGNodW5rLCBpbmRleCk7CiAgICB9CgogICAgX3NpbmsuY2xvc2UoKTsKICB9Cn0KCi8vLyBEZWNvZGVzIFtjb2RlVW5pdHNdIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCBpbnRvIFtkZXN0aW5hdGlvbl0uCi8vLwovLy8gVGhpcyByZWFkcyBmcm9tIFtjb2RlVW5pdHNdIGJldHdlZW4gW3NvdXJjZVN0YXJ0XSBhbmQgW3NvdXJjZUVuZF0uIEl0IHdyaXRlcwovLy8gdGhlIHJlc3VsdCBpbnRvIFtkZXN0aW5hdGlvbl0gc3RhcnRpbmcgYXQgW2Rlc3RpbmF0aW9uU3RhcnRdLgovLy8KLy8vIElmIHRoZXJlJ3MgYSBsZWZ0b3ZlciBkaWdpdCBhdCB0aGUgZW5kIG9mIHRoZSBkZWNvZGluZywgdGhpcyByZXR1cm5zIHRoYXQKLy8vIGRpZ2l0LiBPdGhlcndpc2UgaXQgcmV0dXJucyBgbnVsbGAuCmludCBfZGVjb2RlKExpc3Q8aW50PiBjb2RlVW5pdHMsIGludCBzb3VyY2VTdGFydCwgaW50IHNvdXJjZUVuZCwKICAgIExpc3Q8aW50PiBkZXN0aW5hdGlvbiwgaW50IGRlc3RpbmF0aW9uU3RhcnQpIHsKICB2YXIgZGVzdGluYXRpb25JbmRleCA9IGRlc3RpbmF0aW9uU3RhcnQ7CiAgZm9yICh2YXIgaSA9IHNvdXJjZVN0YXJ0OyBpIDwgc291cmNlRW5kIC0gMTsgaSArPSAyKSB7CiAgICB2YXIgZmlyc3REaWdpdCA9IGRpZ2l0Rm9yQ29kZVVuaXQoY29kZVVuaXRzLCBpKTsKICAgIHZhciBzZWNvbmREaWdpdCA9IGRpZ2l0Rm9yQ29kZVVuaXQoY29kZVVuaXRzLCBpICsgMSk7CiAgICBkZXN0aW5hdGlvbltkZXN0aW5hdGlvbkluZGV4KytdID0gMTYgKiBmaXJzdERpZ2l0ICsgc2Vjb25kRGlnaXQ7CiAgfQoKICBpZiAoKHNvdXJjZUVuZCAtIHNvdXJjZVN0YXJ0KS5pc0V2ZW4pIHJldHVybiBudWxsOwogIHJldHVybiAxNiAqIGRpZ2l0Rm9yQ29kZVVuaXQoY29kZVVuaXRzLCBzb3VyY2VFbmQgLSAxKTsKfQqArgBOTjwBHQEXGgEYASwpAUMEUExPOBgBJSEhSQYBMzsSBAFHIQIBODlHHwEzBk1PFhIBHwFCOwEYJw4GASYVFB4xFg0tK0IPFgYBRAEWJQQBOCYBHAFPGCweIUcGARMEAgFJO0cfATMGTU8WEgEjAUgBRDoBGCYOBgEVFB4xFg0tKz4PFgYBQAEWJAQBHAFOGC4eIUYGARMEAgFCBFFCBE4oQTMrOTU6RQQBNToCASRwYWNrYWdlOmNvbnZlcnQvc3JjL2hleC9kZWNvZGVyLmRhcnQ9c2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbnZlcnQvbGliL3NyYy9wZXJjZW50L2VuY29kZXIuZGFydI4mLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgY29udmVydC5wZXJjZW50LmVuY29kZXI7CgppbXBvcnQgJ2RhcnQ6Y29udmVydCc7CgppbXBvcnQgJ3BhY2thZ2U6Y2hhcmNvZGUvYXNjaWkuZGFydCc7CgovLy8gVGhlIGNhbm9uaWNhbCBpbnN0YW5jZSBvZiBbUGVyY2VudEVuY29kZXJdLgpjb25zdCBwZXJjZW50RW5jb2RlciA9IGNvbnN0IFBlcmNlbnRFbmNvZGVyLl8oKTsKCi8vLyBBIGNvbnZlcnRlciB0aGF0IGVuY29kZXMgYnl0ZSBhcnJheXMgaW50byBwZXJjZW50LWVuY29kZWQgc3RyaW5ncy4KLy8vCi8vLyBbZW5jb2Rlcl0gZW5jb2RlcyBhbGwgYnl0ZXMgb3RoZXIgdGhhbiBBU0NJSSBsZXR0ZXJzLCBkZWNpbWFsIGRpZ2l0cywgb3Igb25lCi8vLyBvZiBgLS5ffmAuIFRoaXMgbWF0Y2hlcyB0aGUgYmVoYXZpb3Igb2YgW1VyaS5lbmNvZGVRdWVyeUNvbXBvbmVudF0gZXhjZXB0Ci8vLyB0aGF0IGl0IGRvZXNuJ3QgZW5jb2RlIGAweDIwYCBieXRlcyB0byB0aGUgYCtgIGNoYXJhY3Rlci4KLy8vCi8vLyBUaGlzIHdpbGwgdGhyb3cgYSBbUmFuZ2VFcnJvcl0gaWYgdGhlIGJ5dGUgYXJyYXkgaGFzIGFueSBkaWdpdHMgdGhhdCBkb24ndAovLy8gZml0IGluIHRoZSBnYW11dCBvZiBhIGJ5dGUuCmNsYXNzIFBlcmNlbnRFbmNvZGVyIGV4dGVuZHMgQ29udmVydGVyPExpc3Q8aW50PiwgU3RyaW5nPiB7CiAgY29uc3QgUGVyY2VudEVuY29kZXIuXygpOwoKICBTdHJpbmcgY29udmVydChMaXN0PGludD4gYnl0ZXMpID0+IF9jb252ZXJ0KGJ5dGVzLCAwLCBieXRlcy5sZW5ndGgpOwoKICBCeXRlQ29udmVyc2lvblNpbmsgc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPFN0cmluZz4gc2luaykgPT4KICAgICAgbmV3IF9QZXJjZW50RW5jb2RlclNpbmsoc2luayk7Cn0KCi8vLyBBIGNvbnZlcnNpb24gc2luayBmb3IgY2h1bmtlZCBwZXJjZW50YWRlY2ltYWwgZW5jb2RpbmcuCmNsYXNzIF9QZXJjZW50RW5jb2RlclNpbmsgZXh0ZW5kcyBCeXRlQ29udmVyc2lvblNpbmtCYXNlIHsKICAvLy8gVGhlIHVuZGVybHlpbmcgc2luayB0byB3aGljaCBkZWNvZGVkIGJ5dGUgYXJyYXlzIHdpbGwgYmUgcGFzc2VkLgogIGZpbmFsIFNpbms8U3RyaW5nPiBfc2luazsKCiAgX1BlcmNlbnRFbmNvZGVyU2luayh0aGlzLl9zaW5rKTsKCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGNodW5rKSB7CiAgICBfc2luay5hZGQoX2NvbnZlcnQoY2h1bmssIDAsIGNodW5rLmxlbmd0aCkpOwogIH0KCiAgdm9pZCBhZGRTbGljZShMaXN0PGludD4gY2h1bmssIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGNodW5rLmxlbmd0aCk7CiAgICBfc2luay5hZGQoX2NvbnZlcnQoY2h1bmssIHN0YXJ0LCBlbmQpKTsKICAgIGlmIChpc0xhc3QpIF9zaW5rLmNsb3NlKCk7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgX3NpbmsuY2xvc2UoKTsKICB9Cn0KClN0cmluZyBfY29udmVydChMaXN0PGludD4gYnl0ZXMsIGludCBzdGFydCwgaW50IGVuZCkgewogIHZhciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CgogIC8vIEEgYml0d2lzZSBPUiBvZiBhbGwgYnl0ZXMgaW4gW2J5dGVzXS4gVGhpcyBhbGxvd3MgdXMgdG8gY2hlY2sgZm9yCiAgLy8gb3V0LW9mLXJhbmdlIGJ5dGVzIHdpdGhvdXQgYWRkaW5nIG1vcmUgYnJhbmNoZXMgdGhhbiBuZWNlc3NhcnkgdG8gdGhlCiAgLy8gY29yZSBsb29wLgogIHZhciBieXRlT3IgPSAwOwogIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICB2YXIgYnl0ZSA9IGJ5dGVzW2ldOwogICAgYnl0ZU9yIHw9IGJ5dGU7CgogICAgLy8gSWYgdGhlIGJ5dGUgaXMgYW4gdXBwZXJjYXNlIGxldHRlciwgY29udmVydCBpdCB0byBsb3dlcmNhc2UgdG8gY2hlY2sgaWYKICAgIC8vIGl0J3MgdW5yZXNlcnZlZC4gVGhpcyB3b3JrcyBiZWNhdXNlIHVwcGVyY2FzZSBsZXR0ZXJzIGluIEFTQ0lJIGFyZQogICAgLy8gZXhhY3RseSBgMGIxMDAwMDAgPSAweDIwYCBsZXNzIHRoYW4gbG93ZXJjYXNlIGxldHRlcnMsIHNvIGlmIHdlIGVuc3VyZQogICAgLy8gdGhhdCB0aGF0IGJpdCBpcyAxIHdlIGVuc3VyZSB0aGF0IHRoZSBsZXR0ZXIgaXMgbG93ZXJjYXNlLgogICAgdmFyIGxldHRlciA9IDB4MjAgfCBieXRlOwogICAgaWYgKChsZXR0ZXIgPj0gJGEgJiYgbGV0dGVyIDw9ICR6KSB8fAogICAgICAgIChieXRlID49ICQwICYmIGJ5dGUgPD0gJDkpIHx8CiAgICAgICAgYnl0ZSA9PSAkZGFzaCB8fAogICAgICAgIGJ5dGUgPT0gJGRvdCB8fAogICAgICAgIGJ5dGUgPT0gJHVuZGVyc2NvcmUgfHwKICAgICAgICBieXRlID09ICR0aWxkZSkgewogICAgICAvLyBVbnJlc2VydmVkIGNoYXJhY3RlcnMgYXJlIHNhZmUgdG8gd3JpdGUgYXMtaXMuCiAgICAgIGJ1ZmZlci53cml0ZUNoYXJDb2RlKGJ5dGUpOwogICAgICBjb250aW51ZTsKICAgIH0KCiAgICBidWZmZXIud3JpdGVDaGFyQ29kZSgkcGVyY2VudCk7CgogICAgLy8gVGhlIGJpdHdpc2UgYXJpdGhtZXRpYyBoZXJlIGlzIGVxdWl2YWxlbnQgdG8gYGJ5dGUgfi8gMTZgIGFuZCBgYnl0ZSAlIDE2YAogICAgLy8gZm9yIHZhbGlkIGJ5dGUgdmFsdWVzLCBidXQgaXMgZWFzaWVyIGZvciBkYXJ0MmpzIHRvIG9wdGltaXplIGdpdmVuIHRoYXQKICAgIC8vIGl0IGNhbid0IHByb3ZlIHRoYXQgW2J5dGVdIHdpbGwgYWx3YXlzIGJlIHBvc2l0aXZlLgogICAgYnVmZmVyLndyaXRlQ2hhckNvZGUoX2NvZGVVbml0Rm9yRGlnaXQoKGJ5dGUgJiAweEYwKSA+PiA0KSk7CiAgICBidWZmZXIud3JpdGVDaGFyQ29kZShfY29kZVVuaXRGb3JEaWdpdChieXRlICYgMHgwRikpOwogIH0KCiAgaWYgKGJ5dGVPciA+PSAwICYmIGJ5dGVPciA8PSAyNTUpIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKCiAgLy8gSWYgdGhlcmUgd2FzIGFuIGludmFsaWQgYnl0ZSwgZmluZCBpdCBhbmQgdGhyb3cgYW4gZXhjZXB0aW9uLgogIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICB2YXIgYnl0ZSA9IGJ5dGVzW2ldOwogICAgaWYgKGJ5dGUgPj0gMCAmJiBieXRlIDw9IDB4ZmYpIGNvbnRpbnVlOwogICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAiSW52YWxpZCBieXRlICR7Ynl0ZSA8IDAgPyAiLSIgOiAiIn0weCR7Ynl0ZS5hYnMoKS50b1JhZGl4U3RyaW5nKDE2KX0uIiwKICAgICAgICBieXRlcywKICAgICAgICBpKTsKICB9CgogIHRocm93ICd1bnJlYWNoYWJsZSc7Cn0KCi8vLyBSZXR1cm5zIHRoZSBBU0NJSS9Vbmljb2RlIGNvZGUgdW5pdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBoZXhhZGVjaW1hbCBkaWdpdAovLy8gW2RpZ2l0XS4KaW50IF9jb2RlVW5pdEZvckRpZ2l0KGludCBkaWdpdCkgPT4gZGlnaXQgPCAxMCA/IGRpZ2l0ICsgJDAgOiBkaWdpdCArICRBIC0gMTA7CmwATk48ASEBFwEmATAxAUcEUU4+BE8gPBwBRwFCJQIBPDtHHAEjAR4xBAFEOiwfBAEREwQCATcjAUdLEBImGRQBT0pOQh4qJhkYHxo4IhAGASQBUU87QToEAT4BQyYZLR9RDwwEARcCAU8NTwEocGFja2FnZTpjb252ZXJ0L3NyYy9wZXJjZW50L2VuY29kZXIuZGFydD1zZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29udmVydC9saWIvc3JjL3BlcmNlbnQvZGVjb2Rlci5kYXJ0newvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBjb252ZXJ0LnBlcmNlbnQuZGVjb2RlcjsKCmltcG9ydCAnZGFydDpjb252ZXJ0JzsKCmltcG9ydCAncGFja2FnZTpjaGFyY29kZS9hc2NpaS5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOnR5cGVkX2RhdGEvdHlwZWRfZGF0YS5kYXJ0JzsKCmltcG9ydCAnLi4vdXRpbHMuZGFydCc7CgovLy8gVGhlIGNhbm9uaWNhbCBpbnN0YW5jZSBvZiBbUGVyY2VudERlY29kZXJdLgpjb25zdCBwZXJjZW50RGVjb2RlciA9IGNvbnN0IFBlcmNlbnREZWNvZGVyLl8oKTsKCmNvbnN0IF9sYXN0UGVyY2VudCA9IC0xOwoKLy8vIEEgY29udmVydGVyIHRoYXQgZGVjb2RlcyBwZXJjZW50LWVuY29kZWQgc3RyaW5ncyBpbnRvIGJ5dGUgYXJyYXlzLgovLy8KLy8vIFRvIGJlIG1heGltYWxseSBmbGV4aWJsZSwgdGhpcyB3aWxsIGRlY29kZSBhbnkgcGVyY2VudC1lbmNvZGVkIGJ5dGUgYW5kCi8vLyB3aWxsIGFsbG93IGFueSBub24tcGVyY2VudC1lbmNvZGVkIGJ5dGUgb3RoZXIgdGhhbiBgJWAuIEJ5IGRlZmF1bHQsIGl0Ci8vLyBpbnRlcnByZXRzIGArYCBhcyBgMHgyQmAgcmF0aGVyIHRoYW4gYDB4MjBgIGFzIGVtaXR0ZWQgYnkKLy8vIFtVcmkuZW5jb2RlUXVlcnlDb21wb25lbnRdLgovLy8KLy8vIFRoaXMgd2lsbCB0aHJvdyBhIFtGb3JtYXRFeGNlcHRpb25dIGlmIHRoZSBpbnB1dCBzdHJpbmcgaGFzIGFuIGluY29tcGxldGUKLy8vIHBlcmNlbnQtZW5jb2RpbmcsIG9yIGlmIGl0IGNvbnRhaW5zIG5vbi1BU0NJSSBjb2RlIHVuaXRzLgpjbGFzcyBQZXJjZW50RGVjb2RlciBleHRlbmRzIENvbnZlcnRlcjxTdHJpbmcsIExpc3Q8aW50Pj4gewogIGNvbnN0IFBlcmNlbnREZWNvZGVyLl8oKTsKCiAgTGlzdDxpbnQ+IGNvbnZlcnQoU3RyaW5nIHN0cmluZykgewogICAgdmFyIGJ1ZmZlciA9IG5ldyBVaW50OEJ1ZmZlcigpOwogICAgdmFyIGxhc3REaWdpdCA9IF9kZWNvZGUoc3RyaW5nLmNvZGVVbml0cywgMCwgc3RyaW5nLmxlbmd0aCwgYnVmZmVyKTsKCiAgICBpZiAobGFzdERpZ2l0ICE9IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICJJbnB1dCBlbmRlZCB3aXRoIGluY29tcGxldGUgZW5jb2RlZCBieXRlLiIsIHN0cmluZywgc3RyaW5nLmxlbmd0aCk7CiAgICB9CgogICAgcmV0dXJuIGJ1ZmZlci5idWZmZXIuYXNVaW50OExpc3QoMCwgYnVmZmVyLmxlbmd0aCk7CiAgfQoKICBTdHJpbmdDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8TGlzdDxpbnQ+PiBzaW5rKSA9PgogICAgICBuZXcgX1BlcmNlbnREZWNvZGVyU2luayhzaW5rKTsKfQoKLy8vIEEgY29udmVyc2lvbiBzaW5rIGZvciBjaHVua2VkIHBlcmNlbnQtZW5jb2RlZCBkZWNvZGluZy4KY2xhc3MgX1BlcmNlbnREZWNvZGVyU2luayBleHRlbmRzIFN0cmluZ0NvbnZlcnNpb25TaW5rQmFzZSB7CiAgLy8vIFRoZSB1bmRlcmx5aW5nIHNpbmsgdG8gd2hpY2ggZGVjb2RlZCBieXRlIGFycmF5cyB3aWxsIGJlIHBhc3NlZC4KICBmaW5hbCBTaW5rPExpc3Q8aW50Pj4gX3Npbms7CgogIC8vLyBUaGUgdHJhaWxpbmcgZGlnaXQgZnJvbSB0aGUgcHJldmlvdXMgc3RyaW5nLgogIC8vLwogIC8vLyBUaGlzIGlzIGBudWxsYCBpZiB0aGUgcHJldmlvdXMgc3RyaW5nIGVuZGVkIHdpdGggYSBjb21wbGV0ZQogIC8vLyBwZXJjZW50LWVuY29kZWQgYnl0ZSBvciBhIGxpdGVyYWwgY2hhcmFjdGVyLiBJdCdzIFtfbGFzdFBlcmNlbnRdIGlmIHRoZQogIC8vLyBtb3N0IHJlY2VudCBzdHJpbmcgZW5kZWQgd2l0aCBgJWAuIE90aGVyd2lzZSwgdGhlIG1vc3QgcmVjZW50IHN0cmluZyBlbmRlZAogIC8vLyB3aXRoIGEgYCVgIGZvbGxvd2VkIGJ5IGEgaGV4YWRlY2ltYWwgZGlnaXQsIGFuZCB0aGlzIGlzIHRoYXQgZGlnaXQuIFNpbmNlCiAgLy8vIGl0J3MgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgZGlnaXQsIGl0J3MgYWx3YXlzIGEgbXVsdGlwbGUgb2YgMTYuCiAgaW50IF9sYXN0RGlnaXQ7CgogIF9QZXJjZW50RGVjb2RlclNpbmsodGhpcy5fc2luayk7CgogIHZvaWQgYWRkU2xpY2UoU3RyaW5nIHN0cmluZywgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgc3RyaW5nLmxlbmd0aCk7CgogICAgaWYgKHN0YXJ0ID09IGVuZCkgewogICAgICBpZiAoaXNMYXN0KSBfY2xvc2Uoc3RyaW5nLCBlbmQpOwogICAgICByZXR1cm47CiAgICB9CgogICAgdmFyIGJ1ZmZlciA9IG5ldyBVaW50OEJ1ZmZlcigpOwogICAgdmFyIGNvZGVVbml0cyA9IHN0cmluZy5jb2RlVW5pdHM7CiAgICBpZiAoX2xhc3REaWdpdCA9PSBfbGFzdFBlcmNlbnQpIHsKICAgICAgX2xhc3REaWdpdCA9IDE2ICogZGlnaXRGb3JDb2RlVW5pdChjb2RlVW5pdHMsIHN0YXJ0KTsKICAgICAgc3RhcnQrKzsKCiAgICAgIGlmIChzdGFydCA9PSBlbmQpIHsKICAgICAgICBpZiAoaXNMYXN0KSBfY2xvc2Uoc3RyaW5nLCBlbmQpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQoKICAgIGlmIChfbGFzdERpZ2l0ICE9IG51bGwpIHsKICAgICAgYnVmZmVyLmFkZChfbGFzdERpZ2l0ICsgZGlnaXRGb3JDb2RlVW5pdChjb2RlVW5pdHMsIHN0YXJ0KSk7CiAgICAgIHN0YXJ0Kys7CiAgICB9CgogICAgX2xhc3REaWdpdCA9IF9kZWNvZGUoY29kZVVuaXRzLCBzdGFydCwgZW5kLCBidWZmZXIpOwoKICAgIF9zaW5rLmFkZChidWZmZXIuYnVmZmVyLmFzVWludDhMaXN0KDAsIGJ1ZmZlci5sZW5ndGgpKTsKICAgIGlmIChpc0xhc3QpIF9jbG9zZShzdHJpbmcsIGVuZCk7CiAgfQoKICBCeXRlQ29udmVyc2lvblNpbmsgYXNVdGY4U2luayhib29sIGFsbG93TWFsZm9ybWVkKSA9PgogICAgICBuZXcgX1BlcmNlbnREZWNvZGVyQnl0ZVNpbmsoX3NpbmspOwoKICB2b2lkIGNsb3NlKCkgPT4gX2Nsb3NlKCk7CgogIC8vLyBMaWtlIFtjbG9zZV0sIGJ1dCBpbmNsdWRlcyBbc3RyaW5nXSBhbmQgW2luZGV4XSBpbiB0aGUgW0Zvcm1hdEV4Y2VwdGlvbl0KICAvLy8gaWYgb25lIGlzIHRocm93bi4KICB2b2lkIF9jbG9zZShbU3RyaW5nIHN0cmluZywgaW50IGluZGV4XSkgewogICAgaWYgKF9sYXN0RGlnaXQgIT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKAogICAgICAgICAgIklucHV0IGVuZGVkIHdpdGggaW5jb21wbGV0ZSBlbmNvZGVkIGJ5dGUuIiwgc3RyaW5nLCBpbmRleCk7CiAgICB9CgogICAgX3NpbmsuY2xvc2UoKTsKICB9Cn0KCi8vLyBBIGNvbnZlcnNpb24gc2luayBmb3IgY2h1bmtlZCBwZXJjZW50LWVuY29kZWQgZGVjb2RpbmcgZnJvbSBVVEYtOCBieXRlcy4KY2xhc3MgX1BlcmNlbnREZWNvZGVyQnl0ZVNpbmsgZXh0ZW5kcyBCeXRlQ29udmVyc2lvblNpbmtCYXNlIHsKICAvLy8gVGhlIHVuZGVybHlpbmcgc2luayB0byB3aGljaCBkZWNvZGVkIGJ5dGUgYXJyYXlzIHdpbGwgYmUgcGFzc2VkLgogIGZpbmFsIFNpbms8TGlzdDxpbnQ+PiBfc2luazsKCiAgLy8vIFRoZSB0cmFpbGluZyBkaWdpdCBmcm9tIHRoZSBwcmV2aW91cyBzdHJpbmcuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYG51bGxgIGlmIHRoZSBwcmV2aW91cyBzdHJpbmcgZW5kZWQgd2l0aCBhIGNvbXBsZXRlCiAgLy8vIHBlcmNlbnQtZW5jb2RlZCBieXRlIG9yIGEgbGl0ZXJhbCBjaGFyYWN0ZXIuIEl0J3MgW19sYXN0UGVyY2VudF0gaWYgdGhlCiAgLy8vIG1vc3QgcmVjZW50IHN0cmluZyBlbmRlZCB3aXRoIGAlYC4gT3RoZXJ3aXNlLCB0aGUgbW9zdCByZWNlbnQgc3RyaW5nIGVuZGVkCiAgLy8vIHdpdGggYSBgJWAgZm9sbG93ZWQgYnkgYSBoZXhhZGVjaW1hbCBkaWdpdCwgYW5kIHRoaXMgaXMgdGhhdCBkaWdpdC4gU2luY2UKICAvLy8gaXQncyB0aGUgbW9zdCBzaWduaWZpY2FudCBkaWdpdCwgaXQncyBhbHdheXMgYSBtdWx0aXBsZSBvZiAxNi4KICBpbnQgX2xhc3REaWdpdDsKCiAgX1BlcmNlbnREZWNvZGVyQnl0ZVNpbmsodGhpcy5fc2luayk7CgogIHZvaWQgYWRkKExpc3Q8aW50PiBjaHVuaykgPT4gYWRkU2xpY2UoY2h1bmssIDAsIGNodW5rLmxlbmd0aCwgZmFsc2UpOwoKICB2b2lkIGFkZFNsaWNlKExpc3Q8aW50PiBjaHVuaywgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgY2h1bmsubGVuZ3RoKTsKCiAgICBpZiAoc3RhcnQgPT0gZW5kKSB7CiAgICAgIGlmIChpc0xhc3QpIF9jbG9zZShjaHVuaywgZW5kKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHZhciBidWZmZXIgPSBuZXcgVWludDhCdWZmZXIoKTsKICAgIGlmIChfbGFzdERpZ2l0ID09IF9sYXN0UGVyY2VudCkgewogICAgICBfbGFzdERpZ2l0ID0gMTYgKiBkaWdpdEZvckNvZGVVbml0KGNodW5rLCBzdGFydCk7CiAgICAgIHN0YXJ0Kys7CgogICAgICBpZiAoc3RhcnQgPT0gZW5kKSB7CiAgICAgICAgaWYgKGlzTGFzdCkgX2Nsb3NlKGNodW5rLCBlbmQpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQoKICAgIGlmIChfbGFzdERpZ2l0ICE9IG51bGwpIHsKICAgICAgYnVmZmVyLmFkZChfbGFzdERpZ2l0ICsgZGlnaXRGb3JDb2RlVW5pdChjaHVuaywgc3RhcnQpKTsKICAgICAgc3RhcnQrKzsKICAgIH0KCiAgICBfbGFzdERpZ2l0ID0gX2RlY29kZShjaHVuaywgc3RhcnQsIGVuZCwgYnVmZmVyKTsKCiAgICBfc2luay5hZGQoYnVmZmVyLmJ1ZmZlci5hc1VpbnQ4TGlzdCgwLCBidWZmZXIubGVuZ3RoKSk7CiAgICBpZiAoaXNMYXN0KSBfY2xvc2UoY2h1bmssIGVuZCk7CiAgfQoKICB2b2lkIGNsb3NlKCkgPT4gX2Nsb3NlKCk7CgogIC8vLyBMaWtlIFtjbG9zZV0sIGJ1dCBpbmNsdWRlcyBbY2h1bmtdIGFuZCBbaW5kZXhdIGluIHRoZSBbRm9ybWF0RXhjZXB0aW9uXQogIC8vLyBpZiBvbmUgaXMgdGhyb3duLgogIHZvaWQgX2Nsb3NlKFtMaXN0PGludD4gY2h1bmssIGludCBpbmRleF0pIHsKICAgIGlmIChfbGFzdERpZ2l0ICE9IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICJJbnB1dCBlbmRlZCB3aXRoIGluY29tcGxldGUgZW5jb2RlZCBieXRlLiIsIGNodW5rLCBpbmRleCk7CiAgICB9CgogICAgX3NpbmsuY2xvc2UoKTsKICB9Cn0KCi8vLyBEZWNvZGVzIFtjb2RlVW5pdHNdIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCBpbnRvIFtkZXN0aW5hdGlvbl0uCi8vLwovLy8gVGhpcyByZWFkcyBmcm9tIFtjb2RlVW5pdHNdIGJldHdlZW4gW3NvdXJjZVN0YXJ0XSBhbmQgW3NvdXJjZUVuZF0uIEl0IHdyaXRlcwovLy8gdGhlIHJlc3VsdCBpbnRvIFtkZXN0aW5hdGlvbl0gc3RhcnRpbmcgYXQgW2Rlc3RpbmF0aW9uU3RhcnRdLgovLy8KLy8vIElmIHRoZXJlJ3MgYSBsZWZ0b3ZlciBkaWdpdCBhdCB0aGUgZW5kIG9mIHRoZSBkZWNvZGluZywgdGhpcyByZXR1cm5zIHRoYXQKLy8vIGRpZ2l0LiBPdGhlcndpc2UgaXQgcmV0dXJucyBgbnVsbGAuCmludCBfZGVjb2RlKExpc3Q8aW50PiBjb2RlVW5pdHMsIGludCBzdGFydCwgaW50IGVuZCwgVWludDhCdWZmZXIgYnVmZmVyKSB7CiAgLy8gQSBiaXR3aXNlIE9SIG9mIGFsbCBjb2RlIHVuaXRzIGluIFtjb2RlVW5pdHNdLiBUaGlzIGFsbG93cyB1cyB0byBjaGVjayBmb3IKICAvLyBvdXQtb2YtcmFuZ2UgY29kZSB1bml0cyB3aXRob3V0IGFkZGluZyBtb3JlIGJyYW5jaGVzIHRoYW4gbmVjZXNzYXJ5IHRvIHRoZQogIC8vIGNvcmUgbG9vcC4KICB2YXIgY29kZVVuaXRPciA9IDA7CgogIC8vIFRoZSBiZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQgc2xpY2Ugb2YgYWRqYWNlbnQgbm9uLSUgY2hhcmFjdGVycy4gV2UgY2FuIGFkZAogIC8vIGFsbCBvZiB0aGVzZSB0byB0aGUgYnVmZmVyIGF0IG9uY2UuCiAgdmFyIHNsaWNlU3RhcnQgPSBzdGFydDsKICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgLy8gRmlyc3QsIGxvb3AgdGhyb3VnaCBub24tJSBjaGFyYWN0ZXJzLgogICAgdmFyIGNvZGVVbml0ID0gY29kZVVuaXRzW2ldOwogICAgaWYgKGNvZGVVbml0c1tpXSAhPSAkcGVyY2VudCkgewogICAgICBjb2RlVW5pdE9yIHw9IGNvZGVVbml0OwogICAgICBjb250aW51ZTsKICAgIH0KCiAgICAvLyBXZSBmb3VuZCBhICUuIFRoZSBzbGljZSBmcm9tIGBzbGljZVN0YXJ0YCB0byBgaWAgcmVwcmVzZW50cyBjaGFyYWN0ZXJzCiAgICAvLyB0aGFuIGNhbiBiZSBjb3BpZWQgdG8gdGhlIGJ1ZmZlciBhcy1pcy4KICAgIGlmIChpID4gc2xpY2VTdGFydCkgewogICAgICBfY2hlY2tGb3JJbnZhbGlkQ29kZVVuaXQoY29kZVVuaXRPciwgY29kZVVuaXRzLCBzbGljZVN0YXJ0LCBpKTsKICAgICAgYnVmZmVyLmFkZEFsbChjb2RlVW5pdHMsIHNsaWNlU3RhcnQsIGkpOwogICAgfQoKICAgIC8vIE5vdyBkZWNvZGUgdGhlIHBlcmNlbnQtZW5jb2RlZCBieXRlIGFuZCBhZGQgaXQgYXMgd2VsbC4KICAgIGkrKzsKICAgIGlmIChpID49IGVuZCkgcmV0dXJuIF9sYXN0UGVyY2VudDsKCiAgICB2YXIgZmlyc3REaWdpdCA9IGRpZ2l0Rm9yQ29kZVVuaXQoY29kZVVuaXRzLCBpKTsKICAgIGkrKzsKICAgIGlmIChpID49IGVuZCkgcmV0dXJuIDE2ICogZmlyc3REaWdpdDsKCiAgICB2YXIgc2Vjb25kRGlnaXQgPSBkaWdpdEZvckNvZGVVbml0KGNvZGVVbml0cywgaSk7CiAgICBidWZmZXIuYWRkKDE2ICogZmlyc3REaWdpdCArIHNlY29uZERpZ2l0KTsKCiAgICAvLyBUaGUgbmV4dCBpdGVyYXRpb24gd2lsbCBsb29rIGZvciBub24tJSBjaGFyYWN0ZXJzIGFnYWluLgogICAgc2xpY2VTdGFydCA9IGkgKyAxOwogIH0KCiAgaWYgKGVuZCA+IHNsaWNlU3RhcnQpIHsKICAgIF9jaGVja0ZvckludmFsaWRDb2RlVW5pdChjb2RlVW5pdE9yLCBjb2RlVW5pdHMsIHNsaWNlU3RhcnQsIGVuZCk7CiAgICBpZiAoc3RhcnQgPT0gc2xpY2VTdGFydCkgewogICAgICBidWZmZXIuYWRkQWxsKGNvZGVVbml0cyk7CiAgICB9IGVsc2UgewogICAgICBidWZmZXIuYWRkQWxsKGNvZGVVbml0cywgc2xpY2VTdGFydCwgZW5kKTsKICAgIH0KICB9CgogIHJldHVybiBudWxsOwp9Cgp2b2lkIF9jaGVja0ZvckludmFsaWRDb2RlVW5pdCgKICAgIGludCBjb2RlVW5pdE9yLCBMaXN0PGludD4gY29kZVVuaXRzLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICBpZiAoY29kZVVuaXRPciA+PSAwICYmIGNvZGVVbml0T3IgPD0gMHg3ZikgcmV0dXJuOwoKICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgdmFyIGNvZGVVbml0ID0gY29kZVVuaXRzW2ldOwogICAgaWYgKGNvZGVVbml0ID49IDAgJiYgY29kZVVuaXQgPD0gMHg3ZikgY29udGludWU7CiAgICB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKAogICAgICAgICJOb24tQVNDSUkgY29kZSB1bml0ICIKICAgICAgICAiVSske2NvZGVVbml0LnRvUmFkaXhTdHJpbmcoMTYpLnBhZExlZnQoNCwgJzAnKX0iLAogICAgICAgIGNvZGVVbml0cywKICAgICAgICBpKTsKICB9Cn0KgPYATk48ASEBFwEmLQEYATAxARkBRwRMSz4gBE4+PBwBJSRJAR0hTwYBOAQBRyUCATw9Rx8BMwZCTlFQRRIBIwFCOwEYJw4GASQmJjwPARopEAgGAR5DDwYBOQE8JQQBOCoBHAFPGCweIUcGARMEAgFNP0cfATMGQk5RUEUSAScBSAFEOgEYJg4GASQmOA8BGigQCAYBHj8PBgE1ATwkBAEcAU4YLh4hRgYBEwQCAUIEUUIETihLUFAQFgFRKRomLSEkHhAGAU4vGkYvBgE/CScBNQkqATYvAUAYBAEaRh8gDTEGBAEPAgEfPzUBJiE1Hx87EwwEAgEocGFja2FnZTpjb252ZXJ0L3NyYy9wZXJjZW50L2RlY29kZXIuZGFydDpzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvdHlwZWRfZGF0YS9saWIvdHlwZWRfYnVmZmVycy5kYXJ0s88vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIEdyb3dhYmxlIHR5cGVkLWRhdGEgbGlzdHMuCi8vLwovLy8gVGhlc2UgbGlzdHMgd29ya3MganVzdCBhcyBhIHR5cGVkLWRhdGEgbGlzdCwgZXhjZXB0IHRoYXQgdGhleSBhcmUgZ3Jvd2FibGUuCi8vLyBUaGV5IHVzZSBhbiB1bmRlcmx5aW5nIGJ1ZmZlciwgYW5kIHdoZW4gdGhhdCBidWZmZXIgYmVjb21lcyB0b28gc21hbGwsIGl0Ci8vLyBpcyByZXBsYWNlZCBieSBhIG5ldyBidWZmZXIuCi8vLwovLy8gVGhhdCBtZWFucyB0aGF0IHVzaW5nIHRoZSBbVHlwZWREYXRhVmlldy5idWZmZXJdIGdldHRlciBpcyBub3QgZ3VhcmFudGVlZAovLy8gdG8gcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBlYWNoIHRpbWUgaXQgaXMgdXNlZCwgYW5kIHRoYXQgdGhlIGJ1ZmZlciBtYXkKLy8vIGJlIGxhcmdlciB0aGFuIHdoYXQgdGhlIGxpc3QgaXMgdXNpbmcuCmxpYnJhcnkgdHlwZWRfZGF0YS50eXBlZF9idWZmZXJzOwoKaW1wb3J0ICJkYXJ0OmNvbGxlY3Rpb24iIHNob3cgTGlzdEJhc2U7CmltcG9ydCAiZGFydDp0eXBlZF9kYXRhIjsKCmFic3RyYWN0IGNsYXNzIF9UeXBlZERhdGFCdWZmZXI8RT4gZXh0ZW5kcyBMaXN0QmFzZTxFPiB7CiAgc3RhdGljIGNvbnN0IGludCBJTklUSUFMX0xFTkdUSCA9IDg7CgogIC8vLyBUaGUgdW5kZXJseWluZyBkYXRhIGJ1ZmZlci4KICAvLy8KICAvLy8gVGhpcyBpcyBhbHdheXMgYm90aCBhIExpc3Q8RT4gYW5kIGEgVHlwZWREYXRhLCB3aGljaCB3ZSBkb24ndCBoYXZlIGEgdHlwZQogIC8vLyBmb3IgaGVyZS4gRm9yIGV4YW1wbGUsIGZvciBhIGBVaW50OEJ1ZmZlcmAsIHRoaXMgaXMgYSBgVWludDhMaXN0YC4KICBMaXN0PEU+IF9idWZmZXI7CgogIC8vLyBSZXR1cm5zIGEgdmlldyBvZiBbX2J1ZmZlcl0gYXMgYSBbVHlwZWREYXRhXS4KICBUeXBlZERhdGEgZ2V0IF90eXBlZEJ1ZmZlciA9PiBfYnVmZmVyIGFzIFR5cGVkRGF0YTsKCiAgLy8vIFRoZSBsZW5ndGggb2YgdGhlIGxpc3QgYmVpbmcgYnVpbHQuCiAgaW50IF9sZW5ndGg7CgogIF9UeXBlZERhdGFCdWZmZXIoTGlzdDxFPiBidWZmZXIpCiAgICAgIDogdGhpcy5fYnVmZmVyID0gYnVmZmVyLAogICAgICAgIHRoaXMuX2xlbmd0aCA9IGJ1ZmZlci5sZW5ndGg7CgogIGludCBnZXQgbGVuZ3RoID0+IF9sZW5ndGg7CiAgRSBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA+PSBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzKTsKICAgIHJldHVybiBfYnVmZmVyW2luZGV4XTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgRSB2YWx1ZSkgewogICAgaWYgKGluZGV4ID49IGxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMpOwogICAgX2J1ZmZlcltpbmRleF0gPSB2YWx1ZTsKICB9CgogIHZvaWQgc2V0IGxlbmd0aChpbnQgbmV3TGVuZ3RoKSB7CiAgICBpZiAobmV3TGVuZ3RoIDwgX2xlbmd0aCkgewogICAgICBFIGRlZmF1bHRWYWx1ZSA9IF9kZWZhdWx0VmFsdWU7CiAgICAgIGZvciAoaW50IGkgPSBuZXdMZW5ndGg7IGkgPCBfbGVuZ3RoOyBpKyspIHsKICAgICAgICBfYnVmZmVyW2ldID0gZGVmYXVsdFZhbHVlOwogICAgICB9CiAgICB9IGVsc2UgaWYgKG5ld0xlbmd0aCA+IF9idWZmZXIubGVuZ3RoKSB7CiAgICAgIExpc3Q8RT4gbmV3QnVmZmVyOwogICAgICBpZiAoX2J1ZmZlci5sZW5ndGggPT0gMCkgewogICAgICAgIG5ld0J1ZmZlciA9IF9jcmVhdGVCdWZmZXIobmV3TGVuZ3RoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBuZXdCdWZmZXIgPSBfY3JlYXRlQmlnZ2VyQnVmZmVyKG5ld0xlbmd0aCk7CiAgICAgIH0KICAgICAgbmV3QnVmZmVyLnNldFJhbmdlKDAsIF9sZW5ndGgsIF9idWZmZXIpOwogICAgICBfYnVmZmVyID0gbmV3QnVmZmVyOwogICAgfQogICAgX2xlbmd0aCA9IG5ld0xlbmd0aDsKICB9CgogIHZvaWQgX2FkZChFIHZhbHVlKSB7CiAgICBpZiAoX2xlbmd0aCA9PSBfYnVmZmVyLmxlbmd0aCkgX2dyb3coX2xlbmd0aCk7CiAgICBfYnVmZmVyW19sZW5ndGgrK10gPSB2YWx1ZTsKICB9CgogIC8vIFdlIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIGBhZGRgIGJlY2F1c2UgaXQgZ3Jvd3MgdGhlIGxpc3QKICAvLyBieSBzZXR0aW5nIHRoZSBsZW5ndGggaW4gaW5jcmVtZW50cyBvZiBvbmUuIFdlIHdhbnQgdG8gZ3JvdyBieSBkb3VibGluZwogIC8vIGNhcGFjaXR5IGluIG1vc3QgY2FzZXMuCiAgdm9pZCBhZGQoRSB2YWx1ZSkgewogICAgX2FkZCh2YWx1ZSk7CiAgfQoKICAvLy8gQXBwZW5kcyBhbGwgb2JqZWN0cyBvZiBbdmFsdWVzXSB0byB0aGUgZW5kIG9mIHRoaXMgYnVmZmVyLgogIC8vLwogIC8vLyBUaGlzIGFkZHMgdmFsdWVzIGZyb20gW3N0YXJ0XSAoaW5jbHVzaXZlKSB0byBbZW5kXSAoZXhjbHVzaXZlKSBpbgogIC8vLyBbdmFsdWVzXS4gSWYgW2VuZF0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYWRkaW5nIGFsbCBlbGVtZW50cyBvZgogIC8vLyBbdmFsdWVzXSBhZnRlciBbc3RhcnRdLgogIC8vLwogIC8vLyBUaGUgW3N0YXJ0XSB2YWx1ZSBtdXN0IGJlIG5vbi1uZWdhdGl2ZS4gVGhlIFt2YWx1ZXNdIGl0ZXJhYmxlIG11c3QgaGF2ZSBhdAogIC8vLyBsZWFzdCBbc3RhcnRdIGVsZW1lbnRzLCBhbmQgaWYgW2VuZF0gaXMgc3BlY2lmaWVkLCBpdCBtdXN0IGJlIGdyZWF0ZXIgdGhhbgogIC8vLyBvciBlcXVhbCB0byBbc3RhcnRdIGFuZCBbdmFsdWVzXSBtdXN0IGhhdmUgYXQgbGVhc3QgW2VuZF0gZWxlbWVudHMuCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gdmFsdWVzLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tOb3ROZWdhdGl2ZShzdGFydCwgInN0YXJ0Iik7CiAgICBpZiAoZW5kICE9IG51bGwgJiYgc3RhcnQgPiBlbmQpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoZW5kLCBzdGFydCwgbnVsbCwgImVuZCIpOwogICAgfQoKICAgIF9hZGRBbGwodmFsdWVzLCBzdGFydCwgZW5kKTsKICB9CgogIC8vLyBJbnNlcnRzIGFsbCBvYmplY3RzIG9mIFt2YWx1ZXNdIGF0IHBvc2l0aW9uIFtpbmRleF0gaW4gdGhpcyBsaXN0LgogIC8vLwogIC8vLyBUaGlzIGFkZHMgdmFsdWVzIGZyb20gW3N0YXJ0XSAoaW5jbHVzaXZlKSB0byBbZW5kXSAoZXhjbHVzaXZlKSBpbgogIC8vLyBbdmFsdWVzXS4gSWYgW2VuZF0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYWRkaW5nIGFsbCBlbGVtZW50cyBvZgogIC8vLyBbdmFsdWVzXSBhZnRlciBbc3RhcnRdLgogIC8vLwogIC8vLyBUaGUgW3N0YXJ0XSB2YWx1ZSBtdXN0IGJlIG5vbi1uZWdhdGl2ZS4gVGhlIFt2YWx1ZXNdIGl0ZXJhYmxlIG11c3QgaGF2ZSBhdAogIC8vLyBsZWFzdCBbc3RhcnRdIGVsZW1lbnRzLCBhbmQgaWYgW2VuZF0gaXMgc3BlY2lmaWVkLCBpdCBtdXN0IGJlIGdyZWF0ZXIgdGhhbgogIC8vLyBvciBlcXVhbCB0byBbc3RhcnRdIGFuZCBbdmFsdWVzXSBtdXN0IGhhdmUgYXQgbGVhc3QgW2VuZF0gZWxlbWVudHMuCiAgdm9pZCBpbnNlcnRBbGwoaW50IGluZGV4LCBJdGVyYWJsZTxFPiB2YWx1ZXMsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkSW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIsIF9sZW5ndGggKyAxKTsKICAgIFJhbmdlRXJyb3IuY2hlY2tOb3ROZWdhdGl2ZShzdGFydCwgInN0YXJ0Iik7CiAgICBpZiAoZW5kICE9IG51bGwpIHsKICAgICAgaWYgKHN0YXJ0ID4gZW5kKSB7CiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoZW5kLCBzdGFydCwgbnVsbCwgImVuZCIpOwogICAgICB9CiAgICAgIGlmIChzdGFydCA9PSBlbmQpIHJldHVybjsKICAgIH0KCiAgICAvLyBJZiB3ZSdyZSBhZGRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCBhbnl3YXksIHVzZSBbX2FkZEFsbF0uIFRoaXMgbGV0cwogICAgLy8gdXMgYXZvaWQgY29udmVydGluZyBbdmFsdWVzXSBpbnRvIGEgbGlzdCBldmVuIGlmIFtlbmRdIGlzIG51bGwsIHNpbmNlIHdlCiAgICAvLyBjYW4gYWRkIHZhbHVlcyBpdGVyYXRpdmVseSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LiBXZSBjYW4ndCBkbyBzbyBpbiB0aGUKICAgIC8vIGNlbnRlciBiZWNhdXNlIGNvcHlpbmcgdGhlIHRyYWlsaW5nIGVsZW1lbnRzIGV2ZXJ5IHRpbWUgaXMgbm9uLWxpbmVhci4KICAgIGlmIChpbmRleCA9PSBfbGVuZ3RoKSB7CiAgICAgIF9hZGRBbGwodmFsdWVzLCBzdGFydCwgZW5kKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlbmQgPT0gbnVsbCAmJiB2YWx1ZXMgaXMgTGlzdCkgewogICAgICBlbmQgPSB2YWx1ZXMubGVuZ3RoOwogICAgfQogICAgaWYgKGVuZCAhPSBudWxsKSB7CiAgICAgIF9pbnNlcnRLbm93bkxlbmd0aChpbmRleCwgdmFsdWVzLCBzdGFydCwgZW5kKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIEFkZCBlbGVtZW50cyBhdCBlbmQsIGdyb3dpbmcgYXMgYXBwcm9wcmlhdGUsIHRoZW4gcHV0IHRoZW0gYmFjayBhdAogICAgLy8gcG9zaXRpb24gW2luZGV4XSB1c2luZyBmbGlwLWJ5LWRvdWJsZS1yZXZlcnNlLgogICAgdmFyIHdyaXRlSW5kZXggPSBfbGVuZ3RoOwogICAgdmFyIHNraXBDb3VudCA9IHN0YXJ0OwogICAgZm9yICh2YXIgdmFsdWUgaW4gdmFsdWVzKSB7CiAgICAgIGlmIChza2lwQ291bnQgPiAwKSB7CiAgICAgICAgc2tpcENvdW50LS07CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKHdyaXRlSW5kZXggPT0gX2J1ZmZlci5sZW5ndGgpIHsKICAgICAgICBfZ3Jvdyh3cml0ZUluZGV4KTsKICAgICAgfQogICAgICBfYnVmZmVyW3dyaXRlSW5kZXgrK10gPSB2YWx1ZTsKICAgIH0KCiAgICBpZiAoc2tpcENvdW50ID4gMCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiVG9vIGZldyBlbGVtZW50cyIpOwogICAgfQogICAgaWYgKGVuZCAhPSBudWxsICYmIHdyaXRlSW5kZXggPCBlbmQpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoZW5kLCBzdGFydCwgd3JpdGVJbmRleCwgImVuZCIpOwogICAgfQoKICAgIC8vIFN3YXAgW2luZGV4Li5fbGVuZ3RoKSBhbmQgW19sZW5ndGguLndyaXRlSW5kZXgpIGJ5IGRvdWJsZS1yZXZlcnNpbmcuCiAgICBfcmV2ZXJzZShfYnVmZmVyLCBpbmRleCwgX2xlbmd0aCk7CiAgICBfcmV2ZXJzZShfYnVmZmVyLCBfbGVuZ3RoLCB3cml0ZUluZGV4KTsKICAgIF9yZXZlcnNlKF9idWZmZXIsIGluZGV4LCB3cml0ZUluZGV4KTsKICAgIF9sZW5ndGggPSB3cml0ZUluZGV4OwogICAgcmV0dXJuOwogIH0KCiAgLy8gUmV2ZXJzZXMgdGhlIHJhbmdlIFtzdGFydC4uZW5kKSBvZiBidWZmZXIuCiAgc3RhdGljIHZvaWQgX3JldmVyc2UoTGlzdCBidWZmZXIsIGludCBzdGFydCwgaW50IGVuZCkgewogICAgZW5kLS07IC8vIFBvaW50IHRvIGxhc3QgZWxlbWVudCwgbm90IGFmdGVyIGxhc3QgZWxlbWVudC4KICAgIHdoaWxlIChzdGFydCA8IGVuZCkgewogICAgICB2YXIgZmlyc3QgPSBidWZmZXJbc3RhcnRdOwogICAgICB2YXIgbGFzdCA9IGJ1ZmZlcltlbmRdOwogICAgICBidWZmZXJbZW5kXSA9IGZpcnN0OwogICAgICBidWZmZXJbc3RhcnRdID0gbGFzdDsKICAgICAgc3RhcnQrKzsKICAgICAgZW5kLS07CiAgICB9CiAgfQoKICAvLy8gRG9lcyB0aGUgc2FtZSB0aGluZyBhcyBbYWRkQWxsXS4KICAvLy8KICAvLy8gVGhpcyBhbGxvd3MgW2FkZEFsbF0gYW5kIFtpbnNlcnRBbGxdIHRvIHNoYXJlIGltcGxlbWVudGF0aW9uIHdpdGhvdXQgYQogIC8vLyBzdWJjbGFzcyB1bmV4cGVjdGVkbHkgb3ZlcnJpZGluZyBib3RoIHdoZW4gaXQgaW50ZW5kZWQgdG8gb25seSBvdmVycmlkZQogIC8vLyBbYWRkQWxsXS4KICB2b2lkIF9hZGRBbGwoSXRlcmFibGU8RT4gdmFsdWVzLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIGlmICh2YWx1ZXMgaXMgTGlzdCkgZW5kID8/PSB2YWx1ZXMubGVuZ3RoOwoKICAgIC8vIElmIHdlIGtub3cgdGhlIGxlbmd0aCBvZiB0aGUgc2VnbWVudCB0byBhZGQsIGRvIHNvIHdpdGggW2FkZFJhbmdlXS4gVGhpcwogICAgLy8gd2F5IHdlIGtub3cgaG93IG11Y2ggdG8gZ3JvdyB0aGUgYnVmZmVyIGluIGFkdmFuY2UsIGFuZCBpdCBtYXkgYmUgZXZlbgogICAgLy8gbW9yZSBlZmZpY2llbnQgZm9yIHR5cGVkIGRhdGEgaW5wdXQuCiAgICBpZiAoZW5kICE9IG51bGwpIHsKICAgICAgX2luc2VydEtub3duTGVuZ3RoKF9sZW5ndGgsIHZhbHVlcywgc3RhcnQsIGVuZCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyBPdGhlcndpc2UsIGp1c3QgYWRkIHZhbHVlcyBvbmUgYXQgYSB0aW1lLgogICAgdmFyIGkgPSAwOwogICAgZm9yICh2YXIgdmFsdWUgaW4gdmFsdWVzKSB7CiAgICAgIGlmIChpID49IHN0YXJ0KSBhZGQodmFsdWUpOwogICAgICBpKys7CiAgICB9CiAgICBpZiAoaSA8IHN0YXJ0KSB0aHJvdyBuZXcgU3RhdGVFcnJvcigiVG9vIGZldyBlbGVtZW50cyIpOwogIH0KCiAgLy8vIExpa2UgW2luc2VydEFsbF0sIGJ1dCB3aXRoIGEgZ3VhcmFudGVlZCBub24tYG51bGxgIFtzdGFydF0gYW5kIFtlbmRdLgogIHZvaWQgX2luc2VydEtub3duTGVuZ3RoKGludCBpbmRleCwgSXRlcmFibGU8RT4gdmFsdWVzLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIGlmICh2YWx1ZXMgaXMgTGlzdCkgewogICAgICBlbmQgPz89IHZhbHVlcy5sZW5ndGg7CiAgICAgIGlmIChzdGFydCA+IHZhbHVlcy5sZW5ndGggfHwgZW5kID4gdmFsdWVzLmxlbmd0aCkgewogICAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJUb28gZmV3IGVsZW1lbnRzIik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChlbmQgIT0gbnVsbCk7CiAgICB9CgogICAgdmFyIHZhbHVlc0xlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgdmFyIG5ld0xlbmd0aCA9IF9sZW5ndGggKyB2YWx1ZXNMZW5ndGg7CiAgICBfZW5zdXJlQ2FwYWNpdHkobmV3TGVuZ3RoKTsKCiAgICBfYnVmZmVyLnNldFJhbmdlKAogICAgICAgIGluZGV4ICsgdmFsdWVzTGVuZ3RoLCBfbGVuZ3RoICsgdmFsdWVzTGVuZ3RoLCBfYnVmZmVyLCBpbmRleCk7CiAgICBfYnVmZmVyLnNldFJhbmdlKGluZGV4LCBpbmRleCArIHZhbHVlc0xlbmd0aCwgdmFsdWVzLCBzdGFydCk7CiAgICBfbGVuZ3RoID0gbmV3TGVuZ3RoOwogIH0KCiAgdm9pZCBpbnNlcnQoaW50IGluZGV4LCBFIGVsZW1lbnQpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPiBfbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGluZGV4LCAwLCBfbGVuZ3RoKTsKICAgIH0KICAgIGlmIChfbGVuZ3RoIDwgX2J1ZmZlci5sZW5ndGgpIHsKICAgICAgX2J1ZmZlci5zZXRSYW5nZShpbmRleCArIDEsIF9sZW5ndGggKyAxLCBfYnVmZmVyLCBpbmRleCk7CiAgICAgIF9idWZmZXJbaW5kZXhdID0gZWxlbWVudDsKICAgICAgX2xlbmd0aCsrOwogICAgICByZXR1cm47CiAgICB9CiAgICBMaXN0PEU+IG5ld0J1ZmZlciA9IF9jcmVhdGVCaWdnZXJCdWZmZXIobnVsbCk7CiAgICBuZXdCdWZmZXIuc2V0UmFuZ2UoMCwgaW5kZXgsIF9idWZmZXIpOwogICAgbmV3QnVmZmVyLnNldFJhbmdlKGluZGV4ICsgMSwgX2xlbmd0aCArIDEsIF9idWZmZXIsIGluZGV4KTsKICAgIG5ld0J1ZmZlcltpbmRleF0gPSBlbGVtZW50OwogICAgX2xlbmd0aCsrOwogICAgX2J1ZmZlciA9IG5ld0J1ZmZlcjsKICB9CgogIC8vLyBFbnN1cmVzIHRoYXQgW19idWZmZXJdIGlzIGF0IGxlYXN0IFtyZXF1aXJlZENhcGFjaXR5XSBsb25nLAogIC8vLwogIC8vLyBHcm93cyB0aGUgYnVmZmVyIGlmIG5lY2Vzc2FyeSwgcHJlc2VydmluZyBleGlzdGluZyBkYXRhLgogIHZvaWQgX2Vuc3VyZUNhcGFjaXR5KGludCByZXF1aXJlZENhcGFjaXR5KSB7CiAgICBpZiAocmVxdWlyZWRDYXBhY2l0eSA8PSBfYnVmZmVyLmxlbmd0aCkgcmV0dXJuOwogICAgdmFyIG5ld0J1ZmZlciA9IF9jcmVhdGVCaWdnZXJCdWZmZXIocmVxdWlyZWRDYXBhY2l0eSk7CiAgICBuZXdCdWZmZXIuc2V0UmFuZ2UoMCwgX2xlbmd0aCwgX2J1ZmZlcik7CiAgICBfYnVmZmVyID0gbmV3QnVmZmVyOwogIH0KCiAgLy8vIENyZWF0ZSBhIGJpZ2dlciBidWZmZXIuCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIGRldGVybWluZXMgaG93IG11Y2ggYmlnZ2VyIGEgYmlnZ2VyIGJ1ZmZlciBzaG91bGQKICAvLy8gYmUuIElmIFtyZXF1aXJlZENhcGFjaXR5XSBpcyBub3QgbnVsbCwgaXQgd2lsbCBiZSBhdCBsZWFzdCB0aGF0CiAgLy8vIHNpemUuIEl0IHdpbGwgYWx3YXlzIGhhdmUgYXQgbGVhc3QgaGF2ZSBkb3VibGUgdGhlIGNhcGFjaXR5IG9mCiAgLy8vIHRoZSBjdXJyZW50IGJ1ZmZlci4KICBMaXN0PEU+IF9jcmVhdGVCaWdnZXJCdWZmZXIoaW50IHJlcXVpcmVkQ2FwYWNpdHkpIHsKICAgIGludCBuZXdMZW5ndGggPSBfYnVmZmVyLmxlbmd0aCAqIDI7CiAgICBpZiAocmVxdWlyZWRDYXBhY2l0eSAhPSBudWxsICYmIG5ld0xlbmd0aCA8IHJlcXVpcmVkQ2FwYWNpdHkpIHsKICAgICAgbmV3TGVuZ3RoID0gcmVxdWlyZWRDYXBhY2l0eTsKICAgIH0gZWxzZSBpZiAobmV3TGVuZ3RoIDwgSU5JVElBTF9MRU5HVEgpIHsKICAgICAgbmV3TGVuZ3RoID0gSU5JVElBTF9MRU5HVEg7CiAgICB9CiAgICByZXR1cm4gX2NyZWF0ZUJ1ZmZlcihuZXdMZW5ndGgpOwogIH0KCiAgLy8vIEdyb3dzIHRoZSBidWZmZXIuCiAgLy8vCiAgLy8vIFRoaXMgY29waWVzIHRoZSBmaXJzdCBbbGVuZ3RoXSBlbGVtZW50cyBpbnRvIHRoZSBuZXcgYnVmZmVyLgogIHZvaWQgX2dyb3coaW50IGxlbmd0aCkgewogICAgX2J1ZmZlciA9IF9jcmVhdGVCaWdnZXJCdWZmZXIobnVsbCkuLnNldFJhbmdlKDAsIGxlbmd0aCwgX2J1ZmZlcik7CiAgfQoKICB2b2lkIHNldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgSXRlcmFibGU8RT4gc291cmNlLCBbaW50IHNraXBDb3VudCA9IDBdKSB7CiAgICBpZiAoZW5kID4gX2xlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoZW5kLCAwLCBfbGVuZ3RoKTsKICAgIF9zZXRSYW5nZShzdGFydCwgZW5kLCBzb3VyY2UsIHNraXBDb3VudCk7CiAgfQoKICAvLy8gTGlrZSBbc2V0UmFuZ2VdLCBidXQgd2l0aCBubyBib3VuZHMgY2hlY2tpbmcuCiAgdm9pZCBfc2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZTxFPiBzb3VyY2UsIGludCBza2lwQ291bnQpIHsKICAgIGlmIChzb3VyY2UgaXMgX1R5cGVkRGF0YUJ1ZmZlcjxFPikgewogICAgICBfYnVmZmVyLnNldFJhbmdlKHN0YXJ0LCBlbmQsIHNvdXJjZS5fYnVmZmVyLCBza2lwQ291bnQpOwogICAgfSBlbHNlIHsKICAgICAgX2J1ZmZlci5zZXRSYW5nZShzdGFydCwgZW5kLCBzb3VyY2UsIHNraXBDb3VudCk7CiAgICB9CiAgfQoKICAvLyBUeXBlZERhdGEuCgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzID0+IF90eXBlZEJ1ZmZlci5lbGVtZW50U2l6ZUluQnl0ZXM7CgogIGludCBnZXQgbGVuZ3RoSW5CeXRlcyA9PiBfbGVuZ3RoICogX3R5cGVkQnVmZmVyLmVsZW1lbnRTaXplSW5CeXRlczsKCiAgaW50IGdldCBvZmZzZXRJbkJ5dGVzID0+IF90eXBlZEJ1ZmZlci5vZmZzZXRJbkJ5dGVzOwoKICAvLy8gUmV0dXJucyB0aGUgdW5kZXJseWluZyBbQnl0ZUJ1ZmZlcl0uCiAgLy8vCiAgLy8vIFRoZSByZXR1cm5lZCBidWZmZXIgbWF5IGJlIHJlcGxhY2VkIGJ5IG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIFtsZW5ndGhdCiAgLy8vIG9mIHRoaXMgbGlzdC4KICAvLy8KICAvLy8gVGhlIGJ1ZmZlciBtYXkgYmUgbGFyZ2VyIHRoYW4gW2xlbmd0aEluQnl0ZXNdIGJ5dGVzLCBidXQgbmV2ZXIgc21hbGxlci4KICBCeXRlQnVmZmVyIGdldCBidWZmZXIgPT4gX3R5cGVkQnVmZmVyLmJ1ZmZlcjsKCiAgLy8gU3BlY2lhbGl6YXRpb24gZm9yIHRoZSBzcGVjaWZpYyB0eXBlLgoKICAvLyBSZXR1cm4gemVybyBmb3IgaW50ZWdlcnMsIDAuMCBmb3IgZmxvYXRzLCBldGMuCiAgLy8gVXNlZCB0byBmaWxsIGJ1ZmZlciB3aGVuIGNoYW5naW5nIGxlbmd0aC4KICBFIGdldCBfZGVmYXVsdFZhbHVlOwoKICAvLyBDcmVhdGUgYSBuZXcgdHlwZWQgbGlzdCB0byB1c2UgYXMgYnVmZmVyLgogIExpc3Q8RT4gX2NyZWF0ZUJ1ZmZlcihpbnQgc2l6ZSk7Cn0KCmFic3RyYWN0IGNsYXNzIF9JbnRCdWZmZXIgZXh0ZW5kcyBfVHlwZWREYXRhQnVmZmVyPGludD4gewogIF9JbnRCdWZmZXIoTGlzdDxpbnQ+IGJ1ZmZlcikgOiBzdXBlcihidWZmZXIpOwoKICBpbnQgZ2V0IF9kZWZhdWx0VmFsdWUgPT4gMDsKfQoKYWJzdHJhY3QgY2xhc3MgX0Zsb2F0QnVmZmVyIGV4dGVuZHMgX1R5cGVkRGF0YUJ1ZmZlcjxkb3VibGU+IHsKICBfRmxvYXRCdWZmZXIoTGlzdDxkb3VibGU+IGJ1ZmZlcikgOiBzdXBlcihidWZmZXIpOwoKICBkb3VibGUgZ2V0IF9kZWZhdWx0VmFsdWUgPT4gMC4wOwp9CgpjbGFzcyBVaW50OEJ1ZmZlciBleHRlbmRzIF9JbnRCdWZmZXIgewogIFVpbnQ4QnVmZmVyKFtpbnQgaW5pdGlhbExlbmd0aCA9IDBdKSA6IHN1cGVyKG5ldyBVaW50OExpc3QoaW5pdGlhbExlbmd0aCkpOwogIFVpbnQ4TGlzdCBfY3JlYXRlQnVmZmVyKGludCBzaXplKSA9PiBuZXcgVWludDhMaXN0KHNpemUpOwp9CgpjbGFzcyBJbnQ4QnVmZmVyIGV4dGVuZHMgX0ludEJ1ZmZlciB7CiAgSW50OEJ1ZmZlcihbaW50IGluaXRpYWxMZW5ndGggPSAwXSkgOiBzdXBlcihuZXcgSW50OExpc3QoaW5pdGlhbExlbmd0aCkpOwogIEludDhMaXN0IF9jcmVhdGVCdWZmZXIoaW50IHNpemUpID0+IG5ldyBJbnQ4TGlzdChzaXplKTsKfQoKY2xhc3MgVWludDhDbGFtcGVkQnVmZmVyIGV4dGVuZHMgX0ludEJ1ZmZlciB7CiAgVWludDhDbGFtcGVkQnVmZmVyKFtpbnQgaW5pdGlhbExlbmd0aCA9IDBdKQogICAgICA6IHN1cGVyKG5ldyBVaW50OENsYW1wZWRMaXN0KGluaXRpYWxMZW5ndGgpKTsKICBVaW50OENsYW1wZWRMaXN0IF9jcmVhdGVCdWZmZXIoaW50IHNpemUpID0+IG5ldyBVaW50OENsYW1wZWRMaXN0KHNpemUpOwp9CgpjbGFzcyBVaW50MTZCdWZmZXIgZXh0ZW5kcyBfSW50QnVmZmVyIHsKICBVaW50MTZCdWZmZXIoW2ludCBpbml0aWFsTGVuZ3RoID0gMF0pIDogc3VwZXIobmV3IFVpbnQxNkxpc3QoaW5pdGlhbExlbmd0aCkpOwogIFVpbnQxNkxpc3QgX2NyZWF0ZUJ1ZmZlcihpbnQgc2l6ZSkgPT4gbmV3IFVpbnQxNkxpc3Qoc2l6ZSk7Cn0KCmNsYXNzIEludDE2QnVmZmVyIGV4dGVuZHMgX0ludEJ1ZmZlciB7CiAgSW50MTZCdWZmZXIoW2ludCBpbml0aWFsTGVuZ3RoID0gMF0pIDogc3VwZXIobmV3IEludDE2TGlzdChpbml0aWFsTGVuZ3RoKSk7CiAgSW50MTZMaXN0IF9jcmVhdGVCdWZmZXIoaW50IHNpemUpID0+IG5ldyBJbnQxNkxpc3Qoc2l6ZSk7Cn0KCmNsYXNzIFVpbnQzMkJ1ZmZlciBleHRlbmRzIF9JbnRCdWZmZXIgewogIFVpbnQzMkJ1ZmZlcihbaW50IGluaXRpYWxMZW5ndGggPSAwXSkgOiBzdXBlcihuZXcgVWludDMyTGlzdChpbml0aWFsTGVuZ3RoKSk7CiAgVWludDMyTGlzdCBfY3JlYXRlQnVmZmVyKGludCBzaXplKSA9PiBuZXcgVWludDMyTGlzdChzaXplKTsKfQoKY2xhc3MgSW50MzJCdWZmZXIgZXh0ZW5kcyBfSW50QnVmZmVyIHsKICBJbnQzMkJ1ZmZlcihbaW50IGluaXRpYWxMZW5ndGggPSAwXSkgOiBzdXBlcihuZXcgSW50MzJMaXN0KGluaXRpYWxMZW5ndGgpKTsKICBJbnQzMkxpc3QgX2NyZWF0ZUJ1ZmZlcihpbnQgc2l6ZSkgPT4gbmV3IEludDMyTGlzdChzaXplKTsKfQoKY2xhc3MgVWludDY0QnVmZmVyIGV4dGVuZHMgX0ludEJ1ZmZlciB7CiAgVWludDY0QnVmZmVyKFtpbnQgaW5pdGlhbExlbmd0aCA9IDBdKSA6IHN1cGVyKG5ldyBVaW50NjRMaXN0KGluaXRpYWxMZW5ndGgpKTsKICBVaW50NjRMaXN0IF9jcmVhdGVCdWZmZXIoaW50IHNpemUpID0+IG5ldyBVaW50NjRMaXN0KHNpemUpOwp9CgpjbGFzcyBJbnQ2NEJ1ZmZlciBleHRlbmRzIF9JbnRCdWZmZXIgewogIEludDY0QnVmZmVyKFtpbnQgaW5pdGlhbExlbmd0aCA9IDBdKSA6IHN1cGVyKG5ldyBJbnQ2NExpc3QoaW5pdGlhbExlbmd0aCkpOwogIEludDY0TGlzdCBfY3JlYXRlQnVmZmVyKGludCBzaXplKSA9PiBuZXcgSW50NjRMaXN0KHNpemUpOwp9CgpjbGFzcyBGbG9hdDMyQnVmZmVyIGV4dGVuZHMgX0Zsb2F0QnVmZmVyIHsKICBGbG9hdDMyQnVmZmVyKFtpbnQgaW5pdGlhbExlbmd0aCA9IDBdKQogICAgICA6IHN1cGVyKG5ldyBGbG9hdDMyTGlzdChpbml0aWFsTGVuZ3RoKSk7CiAgRmxvYXQzMkxpc3QgX2NyZWF0ZUJ1ZmZlcihpbnQgc2l6ZSkgPT4gbmV3IEZsb2F0MzJMaXN0KHNpemUpOwp9CgpjbGFzcyBGbG9hdDY0QnVmZmVyIGV4dGVuZHMgX0Zsb2F0QnVmZmVyIHsKICBGbG9hdDY0QnVmZmVyKFtpbnQgaW5pdGlhbExlbmd0aCA9IDBdKQogICAgICA6IHN1cGVyKG5ldyBGbG9hdDY0TGlzdChpbml0aWFsTGVuZ3RoKSk7CiAgRmxvYXQ2NExpc3QgX2NyZWF0ZUJ1ZmZlcihpbnQgc2l6ZSkgPT4gbmV3IEZsb2F0NjRMaXN0KHNpemUpOwp9CgpjbGFzcyBJbnQzMng0QnVmZmVyIGV4dGVuZHMgX1R5cGVkRGF0YUJ1ZmZlcjxJbnQzMng0PiB7CiAgc3RhdGljIEludDMyeDQgX3plcm8gPSBuZXcgSW50MzJ4NCgwLCAwLCAwLCAwKTsKICBJbnQzMng0QnVmZmVyKFtpbnQgaW5pdGlhbExlbmd0aCA9IDBdKQogICAgICA6IHN1cGVyKG5ldyBJbnQzMng0TGlzdChpbml0aWFsTGVuZ3RoKSk7CiAgSW50MzJ4NCBnZXQgX2RlZmF1bHRWYWx1ZSA9PiBfemVybzsKICBJbnQzMng0TGlzdCBfY3JlYXRlQnVmZmVyKGludCBzaXplKSA9PiBuZXcgSW50MzJ4NExpc3Qoc2l6ZSk7Cn0KCmNsYXNzIEZsb2F0MzJ4NEJ1ZmZlciBleHRlbmRzIF9UeXBlZERhdGFCdWZmZXI8RmxvYXQzMng0PiB7CiAgRmxvYXQzMng0QnVmZmVyKFtpbnQgaW5pdGlhbExlbmd0aCA9IDBdKQogICAgICA6IHN1cGVyKG5ldyBGbG9hdDMyeDRMaXN0KGluaXRpYWxMZW5ndGgpKTsKICBGbG9hdDMyeDQgZ2V0IF9kZWZhdWx0VmFsdWUgPT4gbmV3IEZsb2F0MzJ4NC56ZXJvKCk7CiAgRmxvYXQzMng0TGlzdCBfY3JlYXRlQnVmZmVyKGludCBzaXplKSA9PiBuZXcgRmxvYXQzMng0TGlzdChzaXplKTsKfQqBjwBOTjwBHwRQTiEETkwrIgEoGgE5JwEiBlBJEwE0NgEqDwEjHyYBHR1CGwQBKkIcBAEjHyYyIwgtGSEuDzQILxsGGQQBFzMgBAFPTR0WEQQBQQZISx4GUVFKPjEmOwYBIQQBSAZISx4GUVFKTEMxFxk9CCAGAU9QUE4cIw4GASkbBhc1DgYBSjYeGyAbFRIIKhsIJQYBGTAGK0EGAUwnLCoaDAQBMDo9GiEeGxwPDQYEAScGTU4QPy8BUE4sFzcOBgExDyAiCwY9BAFMTxodOjIIDRsGASQsIAEWR0IZBAEmKDUGJEAgEQ4GMytAIA8ZBAFCBj8vNDstGQQBHgZERkUaNihEJC0iBiUEARgGQxtHBAFPRC4EATRKKT8NNwYEARABQQFGATcBKwZRFAZOMAErATQvFwEvIwIBOjABHgIBPzUBIwIBJ048AgEmTDoCAS4uNEoCAShQPgIBJ048AgEoUD4CASdOPAIBKFA+AgEnTjwCASspL0ACASspL0ACATgyKS8mQAIBPCsxN0QCASVwYWNrYWdlOnR5cGVkX2RhdGEvdHlwZWRfYnVmZmVycy5kYXJ0M3Nka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jb252ZXJ0L2xpYi9zcmMvdXRpbHMuZGFydIZYLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgY29udmVydC51dGlsczsKCmltcG9ydCAncGFja2FnZTpjaGFyY29kZS9hc2NpaS5kYXJ0JzsKCi8vLyBSZXR1cm5zIHRoZSBkaWdpdCAoMCB0aHJvdWdoIDE1KSBjb3JyZXNwb25kaW5nIHRvIHRoZSBoZXhhZGVjaW1hbCBjb2RlIHVuaXQKLy8vIGF0IGluZGV4IFtpXSBpbiBbY29kZVVuaXRzXS4KLy8vCi8vLyBJZiB0aGUgZ2l2ZW4gY29kZSB1bml0IGlzbid0IHZhbGlkIGhleGFkZWNpbWFsLCB0aHJvd3MgYSBbRm9ybWF0RXhjZXB0aW9uXS4KaW50IGRpZ2l0Rm9yQ29kZVVuaXQoTGlzdDxpbnQ+IGNvZGVVbml0cywgaW50IGluZGV4KSB7CiAgLy8gSWYgdGhlIGNvZGUgdW5pdCBpcyBhIG51bWVyYWwsIGdldCBpdHMgdmFsdWUuIFhPUiB3b3JrcyBiZWNhdXNlIDAgaW4gQVNDSUkKICAvLyBpcyBgMGIxMTAwMDBgIGFuZCB0aGUgb3RoZXIgbnVtZXJhbHMgY29tZSBhZnRlciBpdCBpbiBhc2NlbmRpbmcgb3JkZXIgYW5kCiAgLy8gdGFrZSB1cCBhdCBtb3N0IGZvdXIgYml0cy4KICAvLwogIC8vIFdlIGNoZWNrIGZvciBkaWdpdHMgZmlyc3QgYmVjYXVzZSBpdCBlbnN1cmVzIHRoZXJlJ3Mgb25seSBhIHNpbmdsZSBicmFuY2gKICAvLyBmb3IgMTAgb3V0IG9mIDE2IG9mIHRoZSBleHBlY3RlZCBjYXNlcy4gV2UgZG9uJ3QgY291bnQgdGhlIGBkaWdpdCA+PSAwYAogIC8vIGNoZWNrIGJlY2F1c2UgYnJhbmNoIHByZWRpY3Rpb24gd2lsbCBhbHdheXMgd29yayBvbiBpdCBmb3IgdmFsaWQgZGF0YS4KICB2YXIgY29kZVVuaXQgPSBjb2RlVW5pdHNbaW5kZXhdOwogIHZhciBkaWdpdCA9ICQwIF4gY29kZVVuaXQ7CiAgaWYgKGRpZ2l0IDw9IDkpIHsKICAgIGlmIChkaWdpdCA+PSAwKSByZXR1cm4gZGlnaXQ7CiAgfSBlbHNlIHsKICAgIC8vIElmIHRoZSBjb2RlIHVuaXQgaXMgYW4gdXBwZXJjYXNlIGxldHRlciwgY29udmVydCBpdCB0byBsb3dlcmNhc2UuIFRoaXMKICAgIC8vIHdvcmtzIGJlY2F1c2UgdXBwZXJjYXNlIGxldHRlcnMgaW4gQVNDSUkgYXJlIGV4YWN0bHkgYDBiMTAwMDAwID0gMHgyMGAKICAgIC8vIGxlc3MgdGhhbiBsb3dlcmNhc2UgbGV0dGVycywgc28gaWYgd2UgZW5zdXJlIHRoYXQgdGhhdCBiaXQgaXMgMSB3ZSBlbnN1cmUKICAgIC8vIHRoYXQgdGhlIGxldHRlciBpcyBsb3dlcmNhc2UuCiAgICB2YXIgbGV0dGVyID0gMHgyMCB8IGNvZGVVbml0OwogICAgaWYgKCRhIDw9IGxldHRlciAmJiBsZXR0ZXIgPD0gJGYpIHJldHVybiBsZXR0ZXIgLSAkYSArIDEwOwogIH0KCiAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgIkludmFsaWQgaGV4YWRlY2ltYWwgY29kZSB1bml0ICIKICAgICAgIlUrJHtjb2RlVW5pdC50b1JhZGl4U3RyaW5nKDE2KS5wYWRMZWZ0KDQsICcwJyl9LiIsCiAgICAgIGNvZGVVbml0cywKICAgICAgaW5kZXgpOwp9CikATk48ARcBJgFQIQRQN1BPIAVPTUwjHRQiC05OUSUiPwQBHSc6EQ4CAR5wYWNrYWdlOmNvbnZlcnQvc3JjL3V0aWxzLmRhcnQsb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2FzeW5jL2FzeW5jLmRhcnSRXy8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovKioKICogU3VwcG9ydCBmb3IgYXN5bmNocm9ub3VzIHByb2dyYW1taW5nLAogKiB3aXRoIGNsYXNzZXMgc3VjaCBhcyBGdXR1cmUgYW5kIFN0cmVhbS4KICoKICogVW5kZXJzdGFuZGluZyBbRnV0dXJlXXMgYW5kIFtTdHJlYW1dcyBpcyBhIHByZXJlcXVpc2l0ZSBmb3IKICogd3JpdGluZyBqdXN0IGFib3V0IGFueSBEYXJ0IHByb2dyYW0uCiAqCiAqIFRvIHVzZSB0aGlzIGxpYnJhcnkgaW4geW91ciBjb2RlOgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmFzeW5jJzsKICoKICogIyMgRnV0dXJlCiAqCiAqIEEgRnV0dXJlIG9iamVjdCByZXByZXNlbnRzIGEgY29tcHV0YXRpb24gd2hvc2UgcmV0dXJuIHZhbHVlCiAqIG1pZ2h0IG5vdCB5ZXQgYmUgYXZhaWxhYmxlLgogKiBUaGUgRnV0dXJlIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBjb21wdXRhdGlvbgogKiB3aGVuIGl0IGNvbXBsZXRlcyBhdCBzb21lIHRpbWUgaW4gdGhlIGZ1dHVyZS4KICogRnV0dXJlcyBhcmUgb2Z0ZW4gdXNlZCBmb3IgcG90ZW50aWFsbHkgbGVuZ3RoeSBjb21wdXRhdGlvbnMKICogc3VjaCBhcyBJL08gYW5kIGludGVyYWN0aW9uIHdpdGggdXNlcnMuCiAqCiAqIE1hbnkgbWV0aG9kcyBpbiB0aGUgRGFydCBsaWJyYXJpZXMgcmV0dXJuIEZ1dHVyZXMgd2hlbgogKiBwZXJmb3JtaW5nIHRhc2tzLiBGb3IgZXhhbXBsZSwgd2hlbiBiaW5kaW5nIGFuIEh0dHBTZXJ2ZXIKICogdG8gYSBob3N0IGFuZCBwb3J0LCB0aGUgYGJpbmQoKWAgbWV0aG9kIHJldHVybnMgYSBGdXR1cmUuCiAqCiAqICAgICAgSHR0cFNlcnZlci5iaW5kKCcxMjcuMC4wLjEnLCA0NDQ0KQogKiAgICAgICAgICAudGhlbigoc2VydmVyKSA9PiBwcmludCgnJHtzZXJ2ZXIuaXNCcm9hZGNhc3R9JykpCiAqICAgICAgICAgIC5jYXRjaEVycm9yKHByaW50KTsKICoKICogW0Z1dHVyZS50aGVuXSByZWdpc3RlcnMgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHJ1bnMKICogd2hlbiB0aGUgRnV0dXJlJ3Mgb3BlcmF0aW9uLCBpbiB0aGlzIGNhc2UgdGhlIGBiaW5kKClgIG1ldGhvZCwKICogY29tcGxldGVzIHN1Y2Nlc3NmdWxseS4KICogVGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBvcGVyYXRpb24KICogaXMgcGFzc2VkIGludG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgogKiBJbiB0aGlzIGV4YW1wbGUsIHRoZSBgYmluZCgpYCBtZXRob2QgcmV0dXJucyB0aGUgSHR0cFNlcnZlcgogKiBvYmplY3QuIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBwcmludHMgb25lIG9mIGl0cyBwcm9wZXJ0aWVzLgogKiBbRnV0dXJlLmNhdGNoRXJyb3JdIHJlZ2lzdGVycyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQKICogcnVucyBpZiBhbiBlcnJvciBvY2N1cnMgd2l0aGluIHRoZSBGdXR1cmUuCiAqCiAqICMjIFN0cmVhbQogKgogKiBBIFN0cmVhbSBwcm92aWRlcyBhbiBhc3luY2hyb25vdXMgc2VxdWVuY2Ugb2YgZGF0YS4KICogRXhhbXBsZXMgb2YgZGF0YSBzZXF1ZW5jZXMgaW5jbHVkZSBpbmRpdmlkdWFsIGV2ZW50cywgbGlrZSBtb3VzZSBjbGlja3MsCiAqIG9yIHNlcXVlbnRpYWwgY2h1bmtzIG9mIGxhcmdlciBkYXRhLCBsaWtlIG11bHRpcGxlIGJ5dGUgbGlzdHMgd2l0aCB0aGUKICogY29udGVudHMgb2YgYSBmaWxlCiAqIHN1Y2ggYXMgbW91c2UgY2xpY2tzLCBhbmQgYSBzdHJlYW0gb2YgYnl0ZSBsaXN0cyByZWFkIGZyb20gYSBmaWxlLgogKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgb3BlbnMgYSBmaWxlIGZvciByZWFkaW5nLgogKiBbU3RyZWFtLmxpc3Rlbl0gcmVnaXN0ZXJzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBydW5zCiAqIGVhY2ggdGltZSBtb3JlIGRhdGEgaXMgYXZhaWxhYmxlLgogKgogKiAgICAgU3RyZWFtPExpc3Q8aW50Pj4gc3RyZWFtID0gbmV3IEZpbGUoJ3F1b3Rlcy50eHQnKS5vcGVuUmVhZCgpOwogKiAgICAgc3RyZWFtLnRyYW5zZm9ybSh1dGY4LmRlY29kZXIpLmxpc3RlbihwcmludCk7CiAqCiAqIFRoZSBzdHJlYW0gZW1pdHMgYSBzZXF1ZW5jZSBvZiBhIGxpc3Qgb2YgYnl0ZXMuCiAqIFRoZSBwcm9ncmFtIG11c3QgaW50ZXJwcmV0IHRoZSBieXRlcyBvciBoYW5kbGUgdGhlIHJhdyBieXRlIGRhdGEuCiAqIEhlcmUsIHRoZSBjb2RlIHVzZXMgYSBVVEYtOCBkZWNvZGVyIChwcm92aWRlZCBpbiB0aGUgYGRhcnQ6Y29udmVydGAgbGlicmFyeSkKICogdG8gY29udmVydCB0aGUgc2VxdWVuY2Ugb2YgYnl0ZXMgaW50byBhIHNlcXVlbmNlCiAqIG9mIERhcnQgc3RyaW5ncy4KICoKICogQW5vdGhlciBjb21tb24gdXNlIG9mIHN0cmVhbXMgaXMgZm9yIHVzZXItZ2VuZXJhdGVkIGV2ZW50cwogKiBpbiBhIHdlYiBhcHA6IFRoZSBmb2xsb3dpbmcgY29kZSBsaXN0ZW5zIGZvciBtb3VzZSBjbGlja3Mgb24gYSBidXR0b24uCiAqCiAqICAgICBxdWVyeVNlbGVjdG9yKCcjbXlCdXR0b24nKS5vbkNsaWNrLmxpc3RlbigoXykgPT4gcHJpbnQoJ0NsaWNrLicpKTsKICoKICogIyMgT3RoZXIgcmVzb3VyY2VzCiAqCiAqICogVGhlIFtkYXJ0OmFzeW5jIHNlY3Rpb24gb2YgdGhlIGxpYnJhcnkgdG91cl1bYXN5bmNocm9ub3VzLXByb2dyYW1taW5nXToKICogICBBIGJyaWVmIG92ZXJ2aWV3IG9mIGFzeW5jaHJvbm91cyBwcm9ncmFtbWluZy4KICoKICogKiBbVXNlIEZ1dHVyZS1CYXNlZCBBUElzXVtmdXR1cmVzLXR1dG9yaWFsXTogQSBjbG9zZXIgbG9vayBhdCBGdXR1cmVzIGFuZAogKiAgIGhvdyB0byB1c2UgdGhlbSB0byB3cml0ZSBhc3luY2hyb25vdXMgRGFydCBjb2RlLgogKgogKiAqIFtGdXR1cmVzIGFuZCBFcnJvciBIYW5kbGluZ11bZnV0dXJlcy1lcnJvci1oYW5kbGluZ106IEV2ZXJ5dGhpbmcgeW91CiAqICAgd2FudGVkIHRvIGtub3cgYWJvdXQgaGFuZGxpbmcgZXJyb3JzIGFuZCBleGNlcHRpb25zIHdoZW4gd29ya2luZyB3aXRoCiAqICAgRnV0dXJlcyAoYnV0IHdlcmUgYWZyYWlkIHRvIGFzaykuCiAqCiAqICogW1RoZSBFdmVudCBMb29wIGFuZCBEYXJ0XShodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvYXJ0aWNsZXMvZXZlbnQtbG9vcC8pOgogKiAgIExlYXJuIGhvdyBEYXJ0IGhhbmRsZXMgdGhlIGV2ZW50IHF1ZXVlIGFuZCBtaWNyb3Rhc2sgcXVldWUsIHNvIHlvdSBjYW4KICogICB3cml0ZSBiZXR0ZXIgYXN5bmNocm9ub3VzIGNvZGUgd2l0aCBmZXdlciBzdXJwcmlzZXMuCiAqCiAqICogW3Rlc3QgcGFja2FnZTogQXN5bmNocm9ub3VzIFRlc3RzXVt0ZXN0LXJlYWRtZV06IEhvdyB0byB0ZXN0IGFzeW5jaHJvbm91cwogKiAgIGNvZGUuCiAqCiAqIFthc3luY2hyb25vdXMtcHJvZ3JhbW1pbmddOiBodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvZG9jcy9kYXJ0LXVwLWFuZC1ydW5uaW5nL2NoMDMuaHRtbCNkYXJ0YXN5bmMtLS1hc3luY2hyb25vdXMtcHJvZ3JhbW1pbmcKICogW2Z1dHVyZXMtdHV0b3JpYWxdOiBodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvZG9jcy90dXRvcmlhbHMvZnV0dXJlcy8KICogW2Z1dHVyZXMtZXJyb3ItaGFuZGxpbmddOiBodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvYXJ0aWNsZXMvZnV0dXJlcy1hbmQtZXJyb3ItaGFuZGxpbmcvCiAqIFt0ZXN0LXJlYWRtZV06IGh0dHBzOi8vcHViLmRhcnRsYW5nLm9yZy9wYWNrYWdlcy90ZXN0CiAqCiAqIHtAY2F0ZWdvcnkgQ29yZX0KICovCmxpYnJhcnkgZGFydC5hc3luYzsKCmltcG9ydCAiZGFydDpjb2xsZWN0aW9uIiBzaG93IEhhc2hNYXAsIEl0ZXJhYmxlQmFzZTsKaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIKICAgIHNob3cKICAgICAgICBDYXN0U3RyZWFtLAogICAgICAgIENhc3RTdHJlYW1UcmFuc2Zvcm1lciwKICAgICAgICBFbXB0eUl0ZXJhdG9yLAogICAgICAgIEl0ZXJhYmxlRWxlbWVudEVycm9yLAogICAgICAgIHByaW50VG9ab25lLAogICAgICAgIHByaW50VG9Db25zb2xlLAogICAgICAgIFNpbmNlOwoKcGFydCAnYXN5bmNfZXJyb3IuZGFydCc7CnBhcnQgJ2Jyb2FkY2FzdF9zdHJlYW1fY29udHJvbGxlci5kYXJ0JzsKcGFydCAnZGVmZXJyZWRfbG9hZC5kYXJ0JzsKcGFydCAnZnV0dXJlLmRhcnQnOwpwYXJ0ICdmdXR1cmVfaW1wbC5kYXJ0JzsKcGFydCAnc2NoZWR1bGVfbWljcm90YXNrLmRhcnQnOwpwYXJ0ICdzdHJlYW0uZGFydCc7CnBhcnQgJ3N0cmVhbV9jb250cm9sbGVyLmRhcnQnOwpwYXJ0ICdzdHJlYW1faW1wbC5kYXJ0JzsKcGFydCAnc3RyZWFtX3BpcGUuZGFydCc7CnBhcnQgJ3N0cmVhbV90cmFuc2Zvcm1lcnMuZGFydCc7CnBhcnQgJ3RpbWVyLmRhcnQnOwpwYXJ0ICd6b25lLmRhcnQnOwp5AE5OPAEEKSsDPygDJQMcAw0DPx8zMT8rAzo9PQMrPiADOUIbJyk/PzouAw0DN0xKFkYzOyUDRTUDM0VQNBQDPkoDSgMWA00zA002A0pLJwNPTDoDTwsDgIBIWzkDFAQUATUYCRQfFx4VGA8BGSkbFBkgFB8ZGSETEgEKZGFydDphc3luYzJvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvYXN5bmMvZnV0dXJlX2ltcGwuZGFydMAAbYUvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmFzeW5jOwoKLyoqIFRoZSBvblZhbHVlIGFuZCBvbkVycm9yIGhhbmRsZXJzIHJldHVybiBlaXRoZXIgYSB2YWx1ZSBvciBhIGZ1dHVyZSAqLwp0eXBlZGVmIEZ1dHVyZU9yPFQ+IF9GdXR1cmVPblZhbHVlPFMsIFQ+KFMgdmFsdWUpOwovKiogVGVzdCB1c2VkIGJ5IFtGdXR1cmUuY2F0Y2hFcnJvcl0gdG8gaGFuZGxlIHNraXAgc29tZSBlcnJvcnMuICovCnR5cGVkZWYgYm9vbCBfRnV0dXJlRXJyb3JUZXN0KE9iamVjdCBlcnJvcik7Ci8qKiBVc2VkIGJ5IFtXaGVuRnV0dXJlXS4gKi8KdHlwZWRlZiBkeW5hbWljIF9GdXR1cmVBY3Rpb24oKTsKCmFic3RyYWN0IGNsYXNzIF9Db21wbGV0ZXI8VD4gaW1wbGVtZW50cyBDb21wbGV0ZXI8VD4gewogIGZpbmFsIF9GdXR1cmU8VD4gZnV0dXJlID0gbmV3IF9GdXR1cmU8VD4oKTsKCiAgdm9pZCBjb21wbGV0ZShbRnV0dXJlT3I8VD4gdmFsdWVdKTsKCiAgdm9pZCBjb21wbGV0ZUVycm9yKE9iamVjdCBlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIGVycm9yID0gX25vbk51bGxFcnJvcihlcnJvcik7CiAgICBpZiAoIWZ1dHVyZS5fbWF5Q29tcGxldGUpIHRocm93IG5ldyBTdGF0ZUVycm9yKCJGdXR1cmUgYWxyZWFkeSBjb21wbGV0ZWQiKTsKICAgIEFzeW5jRXJyb3IgcmVwbGFjZW1lbnQgPSBab25lLmN1cnJlbnQuZXJyb3JDYWxsYmFjayhlcnJvciwgc3RhY2tUcmFjZSk7CiAgICBpZiAocmVwbGFjZW1lbnQgIT0gbnVsbCkgewogICAgICBlcnJvciA9IF9ub25OdWxsRXJyb3IocmVwbGFjZW1lbnQuZXJyb3IpOwogICAgICBzdGFja1RyYWNlID0gcmVwbGFjZW1lbnQuc3RhY2tUcmFjZTsKICAgIH0KICAgIF9jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIHZvaWQgX2NvbXBsZXRlRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpOwoKICAvLyBUaGUgZnV0dXJlJ3MgX2lzQ29tcGxldGUgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCBwZW5kaW5nIGNvbXBsZXRpb25zLgogIC8vIFdlIHRoZXJlZm9yZSB1c2UgX21heUNvbXBsZXRlLgogIGJvb2wgZ2V0IGlzQ29tcGxldGVkID0+ICFmdXR1cmUuX21heUNvbXBsZXRlOwp9CgpjbGFzcyBfQXN5bmNDb21wbGV0ZXI8VD4gZXh0ZW5kcyBfQ29tcGxldGVyPFQ+IHsKICB2b2lkIGNvbXBsZXRlKFtGdXR1cmVPcjxUPiB2YWx1ZV0pIHsKICAgIGlmICghZnV0dXJlLl9tYXlDb21wbGV0ZSkgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIkZ1dHVyZSBhbHJlYWR5IGNvbXBsZXRlZCIpOwogICAgZnV0dXJlLl9hc3luY0NvbXBsZXRlKHZhbHVlKTsKICB9CgogIHZvaWQgX2NvbXBsZXRlRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIGZ1dHVyZS5fYXN5bmNDb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9Cn0KCmNsYXNzIF9TeW5jQ29tcGxldGVyPFQ+IGV4dGVuZHMgX0NvbXBsZXRlcjxUPiB7CiAgdm9pZCBjb21wbGV0ZShbRnV0dXJlT3I8VD4gdmFsdWVdKSB7CiAgICBpZiAoIWZ1dHVyZS5fbWF5Q29tcGxldGUpIHRocm93IG5ldyBTdGF0ZUVycm9yKCJGdXR1cmUgYWxyZWFkeSBjb21wbGV0ZWQiKTsKICAgIGZ1dHVyZS5fY29tcGxldGUodmFsdWUpOwogIH0KCiAgdm9pZCBfY29tcGxldGVFcnJvcihPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgZnV0dXJlLl9jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9Cn0KCmNsYXNzIF9GdXR1cmVMaXN0ZW5lcjxTLCBUPiB7CiAgc3RhdGljIGNvbnN0IGludCBtYXNrVmFsdWUgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgbWFza0Vycm9yID0gMjsKICBzdGF0aWMgY29uc3QgaW50IG1hc2tUZXN0RXJyb3IgPSA0OwogIHN0YXRpYyBjb25zdCBpbnQgbWFza1doZW5jb21wbGV0ZSA9IDg7CiAgc3RhdGljIGNvbnN0IGludCBzdGF0ZUNoYWluID0gMDsKICBzdGF0aWMgY29uc3QgaW50IHN0YXRlVGhlbiA9IG1hc2tWYWx1ZTsKICBzdGF0aWMgY29uc3QgaW50IHN0YXRlVGhlbk9uZXJyb3IgPSBtYXNrVmFsdWUgfCBtYXNrRXJyb3I7CiAgc3RhdGljIGNvbnN0IGludCBzdGF0ZUNhdGNoZXJyb3IgPSBtYXNrRXJyb3I7CiAgc3RhdGljIGNvbnN0IGludCBzdGF0ZUNhdGNoZXJyb3JUZXN0ID0gbWFza0Vycm9yIHwgbWFza1Rlc3RFcnJvcjsKICBzdGF0aWMgY29uc3QgaW50IHN0YXRlV2hlbmNvbXBsZXRlID0gbWFza1doZW5jb21wbGV0ZTsKICBzdGF0aWMgY29uc3QgaW50IG1hc2tUeXBlID0KICAgICAgbWFza1ZhbHVlIHwgbWFza0Vycm9yIHwgbWFza1Rlc3RFcnJvciB8IG1hc2tXaGVuY29tcGxldGU7CiAgc3RhdGljIGNvbnN0IGludCBzdGF0ZUlzQXdhaXQgPSAxNjsKICAvLyBMaXN0ZW5lcnMgb24gdGhlIHNhbWUgZnV0dXJlIGFyZSBsaW5rZWQgdGhyb3VnaCB0aGlzIGxpbmsuCiAgX0Z1dHVyZUxpc3RlbmVyIF9uZXh0TGlzdGVuZXI7CiAgLy8gVGhlIGZ1dHVyZSB0byBjb21wbGV0ZSB3aGVuIHRoaXMgbGlzdGVuZXIgaXMgYWN0aXZhdGVkLgogIGZpbmFsIF9GdXR1cmU8VD4gcmVzdWx0OwogIC8vIFdoaWNoIGZpZWxkcyBtZWFucyB3aGF0LgogIGZpbmFsIGludCBzdGF0ZTsKICAvLyBVc2VkIGZvciB0aGVuL3doZW5Eb25lIGNhbGxiYWNrIGFuZCBlcnJvciB0ZXN0CiAgZmluYWwgRnVuY3Rpb24gY2FsbGJhY2s7CiAgLy8gVXNlZCBmb3IgZXJyb3IgY2FsbGJhY2tzLgogIGZpbmFsIEZ1bmN0aW9uIGVycm9yQ2FsbGJhY2s7CgogIF9GdXR1cmVMaXN0ZW5lci50aGVuKAogICAgICB0aGlzLnJlc3VsdCwgX0Z1dHVyZU9uVmFsdWU8UywgVD4gb25WYWx1ZSwgRnVuY3Rpb24gZXJyb3JDYWxsYmFjaykKICAgICAgOiBjYWxsYmFjayA9IG9uVmFsdWUsCiAgICAgICAgZXJyb3JDYWxsYmFjayA9IGVycm9yQ2FsbGJhY2ssCiAgICAgICAgc3RhdGUgPSAoZXJyb3JDYWxsYmFjayA9PSBudWxsKSA/IHN0YXRlVGhlbiA6IHN0YXRlVGhlbk9uZXJyb3I7CgogIF9GdXR1cmVMaXN0ZW5lci50aGVuQXdhaXQoCiAgICAgIHRoaXMucmVzdWx0LCBfRnV0dXJlT25WYWx1ZTxTLCBUPiBvblZhbHVlLCBGdW5jdGlvbiBlcnJvckNhbGxiYWNrKQogICAgICA6IGNhbGxiYWNrID0gb25WYWx1ZSwKICAgICAgICBlcnJvckNhbGxiYWNrID0gZXJyb3JDYWxsYmFjaywKICAgICAgICBzdGF0ZSA9ICgoZXJyb3JDYWxsYmFjayA9PSBudWxsKSA/IHN0YXRlVGhlbiA6IHN0YXRlVGhlbk9uZXJyb3IpCiAgICAgICAgICAgICAgfCBzdGF0ZUlzQXdhaXQgOwoKICBfRnV0dXJlTGlzdGVuZXIuY2F0Y2hFcnJvcih0aGlzLnJlc3VsdCwgdGhpcy5lcnJvckNhbGxiYWNrLCB0aGlzLmNhbGxiYWNrKQogICAgICA6IHN0YXRlID0gKGNhbGxiYWNrID09IG51bGwpID8gc3RhdGVDYXRjaGVycm9yIDogc3RhdGVDYXRjaGVycm9yVGVzdDsKCiAgX0Z1dHVyZUxpc3RlbmVyLndoZW5Db21wbGV0ZSh0aGlzLnJlc3VsdCwgdGhpcy5jYWxsYmFjaykKICAgICAgOiBlcnJvckNhbGxiYWNrID0gbnVsbCwKICAgICAgICBzdGF0ZSA9IHN0YXRlV2hlbmNvbXBsZXRlOwoKICBab25lIGdldCBfem9uZSA9PiByZXN1bHQuX3pvbmU7CgogIGJvb2wgZ2V0IGhhbmRsZXNWYWx1ZSA9PiAoc3RhdGUgJiBtYXNrVmFsdWUgIT0gMCk7CiAgYm9vbCBnZXQgaGFuZGxlc0Vycm9yID0+IChzdGF0ZSAmIG1hc2tFcnJvciAhPSAwKTsKICBib29sIGdldCBoYXNFcnJvclRlc3QgPT4gKHN0YXRlICYgbWFza1R5cGUgPT0gc3RhdGVDYXRjaGVycm9yVGVzdCk7CiAgYm9vbCBnZXQgaGFuZGxlc0NvbXBsZXRlID0+IChzdGF0ZSAmIG1hc2tUeXBlID09IHN0YXRlV2hlbmNvbXBsZXRlKTsKICBib29sIGdldCBpc0F3YWl0ID0+IChzdGF0ZSAmIHN0YXRlSXNBd2FpdCAhPSAwKTsKCiAgX0Z1dHVyZU9uVmFsdWU8UywgVD4gZ2V0IF9vblZhbHVlIHsKICAgIGFzc2VydChoYW5kbGVzVmFsdWUpOwogICAgcmV0dXJuIGNhbGxiYWNrOwogIH0KCiAgRnVuY3Rpb24gZ2V0IF9vbkVycm9yID0+IGVycm9yQ2FsbGJhY2s7CiAgX0Z1dHVyZUVycm9yVGVzdCBnZXQgX2Vycm9yVGVzdCB7CiAgICBhc3NlcnQoaGFzRXJyb3JUZXN0KTsKICAgIHJldHVybiBjYWxsYmFjazsKICB9CgogIF9GdXR1cmVBY3Rpb24gZ2V0IF93aGVuQ29tcGxldGVBY3Rpb24gewogICAgYXNzZXJ0KGhhbmRsZXNDb21wbGV0ZSk7CiAgICByZXR1cm4gY2FsbGJhY2s7CiAgfQoKICAvLy8gV2hldGhlciB0aGlzIGxpc3RlbmVyIGhhcyBhbiBlcnJvciBjYWxsYmFjay4KICAvLy8KICAvLy8gVGhpcyBmdW5jdGlvbiBtdXN0IG9ubHkgYmUgY2FsbGVkIGlmIHRoZSBsaXN0ZW5lciBbaGFuZGxlc0Vycm9yXS4KICBib29sIGdldCBoYXNFcnJvckNhbGxiYWNrIHsKICAgIGFzc2VydChoYW5kbGVzRXJyb3IpOwogICAgcmV0dXJuIF9vbkVycm9yICE9IG51bGw7CiAgfQoKICBGdXR1cmVPcjxUPiBoYW5kbGVWYWx1ZShTIHNvdXJjZVJlc3VsdCkgewogICAgcmV0dXJuIF96b25lLnJ1blVuYXJ5PEZ1dHVyZU9yPFQ+LCBTPihfb25WYWx1ZSwgc291cmNlUmVzdWx0KTsKICB9CgogIGJvb2wgbWF0Y2hlc0Vycm9yVGVzdChBc3luY0Vycm9yIGFzeW5jRXJyb3IpIHsKICAgIGlmICghaGFzRXJyb3JUZXN0KSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBfem9uZS5ydW5VbmFyeTxib29sLCBPYmplY3Q+KF9lcnJvclRlc3QsIGFzeW5jRXJyb3IuZXJyb3IpOwogIH0KCiAgRnV0dXJlT3I8VD4gaGFuZGxlRXJyb3IoQXN5bmNFcnJvciBhc3luY0Vycm9yKSB7CiAgICBhc3NlcnQoaGFuZGxlc0Vycm9yICYmIGhhc0Vycm9yQ2FsbGJhY2spOwogICAgdmFyIGVycm9yQ2FsbGJhY2sgPSB0aGlzLmVycm9yQ2FsbGJhY2s7IC8vIFRvIGVuYWJsZSBwcm9tb3Rpb24uCiAgICAvLyBJZiB0aGUgZXJyb3JDYWxsYmFjayByZXR1cm5zIHNvbWV0aGluZyB3aGljaCBpcyBub3QgYSBGdXR1cmVPcjxUPiwKICAgIC8vIHRoaXMgcmV0dXJuIHN0YXRlbWVudCB0aHJvd3MsIGFuZCB0aGUgY2FsbGVyIGhhbmRsZXMgdGhlIGVycm9yLgogICAgaWYgKGVycm9yQ2FsbGJhY2sgaXMgZHluYW1pYyBGdW5jdGlvbihPYmplY3QsIFN0YWNrVHJhY2UpKSB7CiAgICAgIHJldHVybiBfem9uZS5ydW5CaW5hcnk8ZHluYW1pYywgT2JqZWN0LCBTdGFja1RyYWNlPigKICAgICAgICAgIGVycm9yQ2FsbGJhY2ssIGFzeW5jRXJyb3IuZXJyb3IsIGFzeW5jRXJyb3Iuc3RhY2tUcmFjZSk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoZXJyb3JDYWxsYmFjayBpcyBkeW5hbWljIEZ1bmN0aW9uKE9iamVjdCkpOwogICAgICByZXR1cm4gX3pvbmUucnVuVW5hcnk8ZHluYW1pYywgT2JqZWN0PihlcnJvckNhbGxiYWNrLCBhc3luY0Vycm9yLmVycm9yKTsKICAgIH0KICB9CgogIGR5bmFtaWMgaGFuZGxlV2hlbkNvbXBsZXRlKCkgewogICAgYXNzZXJ0KCFoYW5kbGVzRXJyb3IpOwogICAgcmV0dXJuIF96b25lLnJ1bihfd2hlbkNvbXBsZXRlQWN0aW9uKTsKICB9Cn0KCmNsYXNzIF9GdXR1cmU8VD4gaW1wbGVtZW50cyBGdXR1cmU8VD4gewogIC8vLyBJbml0aWFsIHN0YXRlLCB3YWl0aW5nIGZvciBhIHJlc3VsdC4gSW4gdGhpcyBzdGF0ZSwgdGhlCiAgLy8vIFtyZXN1bHRPckxpc3RlbmVyc10gZmllbGQgaG9sZHMgYSBzaW5nbGUtbGlua2VkIGxpc3Qgb2YKICAvLy8gW19GdXR1cmVMaXN0ZW5lcl0gbGlzdGVuZXJzLgogIHN0YXRpYyBjb25zdCBpbnQgX3N0YXRlSW5jb21wbGV0ZSA9IDA7CgogIC8vLyBQZW5kaW5nIGNvbXBsZXRpb24uIFNldCB3aGVuIGNvbXBsZXRlZCB1c2luZyBbX2FzeW5jQ29tcGxldGVdIG9yCiAgLy8vIFtfYXN5bmNDb21wbGV0ZUVycm9yXS4gSXQgaXMgYW4gZXJyb3IgdG8gdHJ5IHRvIGNvbXBsZXRlIGl0IGFnYWluLgogIC8vLyBbcmVzdWx0T3JMaXN0ZW5lcnNdIGhvbGRzIGxpc3RlbmVycy4KICBzdGF0aWMgY29uc3QgaW50IF9zdGF0ZVBlbmRpbmdDb21wbGV0ZSA9IDE7CgogIC8vLyBUaGUgZnV0dXJlIGhhcyBiZWVuIGNoYWluZWQgdG8gYW5vdGhlciBmdXR1cmUuIFRoZSByZXN1bHQgb2YgdGhhdAogIC8vLyBvdGhlciBmdXR1cmUgYmVjb21lcyB0aGUgcmVzdWx0IG9mIHRoaXMgZnV0dXJlIGFzIHdlbGwuCiAgLy8vIFtyZXN1bHRPckxpc3RlbmVyc10gY29udGFpbnMgdGhlIHNvdXJjZSBmdXR1cmUuCiAgc3RhdGljIGNvbnN0IGludCBfc3RhdGVDaGFpbmVkID0gMjsKCiAgLy8vIFRoZSBmdXR1cmUgaGFzIGJlZW4gY29tcGxldGVkIHdpdGggYSB2YWx1ZSByZXN1bHQuCiAgc3RhdGljIGNvbnN0IGludCBfc3RhdGVWYWx1ZSA9IDQ7CgogIC8vLyBUaGUgZnV0dXJlIGhhcyBiZWVuIGNvbXBsZXRlZCB3aXRoIGFuIGVycm9yIHJlc3VsdC4KICBzdGF0aWMgY29uc3QgaW50IF9zdGF0ZUVycm9yID0gODsKCiAgLyoqIFdoZXRoZXIgdGhlIGZ1dHVyZSBpcyBjb21wbGV0ZSwgYW5kIGFzIHdoYXQuICovCiAgaW50IF9zdGF0ZSA9IF9zdGF0ZUluY29tcGxldGU7CgogIC8qKgogICAqIFpvbmUgdGhhdCB0aGUgZnV0dXJlIHdhcyBjb21wbGV0ZWQgZnJvbS4KICAgKiBUaGlzIGlzIHRoZSB6b25lIHRoYXQgYW4gZXJyb3IgcmVzdWx0IGJlbG9uZ3MgdG8uCiAgICoKICAgKiBVbnRpbCB0aGUgZnV0dXJlIGlzIGNvbXBsZXRlZCwgdGhlIGZpZWxkIG1heSBob2xkIHRoZSB6b25lIHRoYXQKICAgKiBsaXN0ZW5lciBjYWxsYmFja3MgdXNlZCB0byBjcmVhdGUgdGhpcyBmdXR1cmUgc2hvdWxkIGJlIHJ1biBpbi4KICAgKi8KICBmaW5hbCBab25lIF96b25lOwoKICAvKioKICAgKiBFaXRoZXIgdGhlIHJlc3VsdCwgYSBsaXN0IG9mIGxpc3RlbmVycyBvciBhbm90aGVyIGZ1dHVyZS4KICAgKgogICAqIFRoZSByZXN1bHQgb2YgdGhlIGZ1dHVyZSBpcyBlaXRoZXIgYSB2YWx1ZSBvciBhbiBlcnJvci4KICAgKiBBIHJlc3VsdCBpcyBvbmx5IHN0b3JlZCB3aGVuIHRoZSBmdXR1cmUgaGFzIGNvbXBsZXRlZC4KICAgKgogICAqIFRoZSBsaXN0ZW5lcnMgaXMgYW4gaW50ZXJuYWxseSBsaW5rZWQgbGlzdCBvZiBbX0Z1dHVyZUxpc3RlbmVyXXMuCiAgICogTGlzdGVuZXJzIGFyZSBvbmx5IHJlbWVtYmVyZWQgd2hpbGUgdGhlIGZ1dHVyZSBpcyBub3QgeWV0IGNvbXBsZXRlLAogICAqIGFuZCBpdCBpcyBub3QgY2hhaW5lZCB0byBhbm90aGVyIGZ1dHVyZS4KICAgKgogICAqIFRoZSBmdXR1cmUgaXMgYW5vdGhlciBmdXR1cmUgdGhhdCBoaXMgZnV0dXJlIGlzIGNoYWluZWQgdG8uIFRoaXMgZnV0dXJlCiAgICogaXMgd2FpdGluZyBmb3IgdGhlIG90aGVyIGZ1dHVyZSB0byBjb21wbGV0ZSwgYW5kIHdoZW4gaXQgZG9lcywgdGhpcyBmdXR1cmUKICAgKiB3aWxsIGNvbXBsZXRlIHdpdGggdGhlIHNhbWUgcmVzdWx0LgogICAqIEFsbCBsaXN0ZW5lcnMgYXJlIGZvcndhcmRlZCB0byB0aGUgb3RoZXIgZnV0dXJlLgogICAqLwogIHZhciBfcmVzdWx0T3JMaXN0ZW5lcnM7CgogIC8vIFRoaXMgY29uc3RydWN0b3IgaXMgdXNlZCBieSBhc3luYy9hd2FpdC4KICBfRnV0dXJlKCkgOiBfem9uZSA9IFpvbmUuY3VycmVudDsKCiAgX0Z1dHVyZS5pbW1lZGlhdGUoRnV0dXJlT3I8VD4gcmVzdWx0KSA6IF96b25lID0gWm9uZS5jdXJyZW50IHsKICAgIF9hc3luY0NvbXBsZXRlKHJlc3VsdCk7CiAgfQoKICAvKiogQ3JlYXRlcyBhIGZ1dHVyZSB3aXRoIHRoZSB2YWx1ZSBhbmQgdGhlIHNwZWNpZmllZCB6b25lLiAqLwogIF9GdXR1cmUuem9uZVZhbHVlKFQgdmFsdWUsIHRoaXMuX3pvbmUpIHsKICAgIF9zZXRWYWx1ZSh2YWx1ZSk7CiAgfQoKICBfRnV0dXJlLmltbWVkaWF0ZUVycm9yKHZhciBlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pCiAgICAgIDogX3pvbmUgPSBab25lLmN1cnJlbnQgewogICAgX2FzeW5jQ29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICAvKiogQ3JlYXRlcyBhIGZ1dHVyZSB0aGF0IGlzIGFscmVhZHkgY29tcGxldGVkIHdpdGggdGhlIHZhbHVlLiAqLwogIF9GdXR1cmUudmFsdWUoVCB2YWx1ZSkgOiB0aGlzLnpvbmVWYWx1ZSh2YWx1ZSwgWm9uZS5jdXJyZW50KTsKCiAgYm9vbCBnZXQgX21heUNvbXBsZXRlID0+IF9zdGF0ZSA9PSBfc3RhdGVJbmNvbXBsZXRlOwogIGJvb2wgZ2V0IF9pc1BlbmRpbmdDb21wbGV0ZSA9PiBfc3RhdGUgPT0gX3N0YXRlUGVuZGluZ0NvbXBsZXRlOwogIGJvb2wgZ2V0IF9tYXlBZGRMaXN0ZW5lciA9PiBfc3RhdGUgPD0gX3N0YXRlUGVuZGluZ0NvbXBsZXRlOwogIGJvb2wgZ2V0IF9pc0NoYWluZWQgPT4gX3N0YXRlID09IF9zdGF0ZUNoYWluZWQ7CiAgYm9vbCBnZXQgX2lzQ29tcGxldGUgPT4gX3N0YXRlID49IF9zdGF0ZVZhbHVlOwogIGJvb2wgZ2V0IF9oYXNFcnJvciA9PiBfc3RhdGUgPT0gX3N0YXRlRXJyb3I7CgogIHN0YXRpYyBMaXN0PEZ1bmN0aW9uPiBfY29udGludWF0aW9uRnVuY3Rpb25zKF9GdXR1cmU8T2JqZWN0PiBmdXR1cmUpIHsKICAgIExpc3Q8RnVuY3Rpb24+IHJlc3VsdCA9IG51bGw7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBpZiAoZnV0dXJlLl9tYXlBZGRMaXN0ZW5lcikgcmV0dXJuIHJlc3VsdDsKICAgICAgYXNzZXJ0KCFmdXR1cmUuX2lzQ29tcGxldGUpOwogICAgICBhc3NlcnQoIWZ1dHVyZS5faXNDaGFpbmVkKTsKICAgICAgLy8gU28gX3Jlc3VsdE9yTGlzdGVuZXJzIGNvbnRhaW5zIGxpc3RlbmVycy4KICAgICAgX0Z1dHVyZUxpc3RlbmVyPE9iamVjdCwgT2JqZWN0PiBsaXN0ZW5lciA9IGZ1dHVyZS5fcmVzdWx0T3JMaXN0ZW5lcnM7CiAgICAgIGlmIChsaXN0ZW5lciAhPSBudWxsICYmCiAgICAgICAgICBsaXN0ZW5lci5fbmV4dExpc3RlbmVyID09IG51bGwgJiYKICAgICAgICAgIGxpc3RlbmVyLmlzQXdhaXQpIHsKICAgICAgICAocmVzdWx0ID8/PSA8RnVuY3Rpb24+W10pLmFkZChsaXN0ZW5lci5oYW5kbGVWYWx1ZSk7CiAgICAgICAgZnV0dXJlID0gbGlzdGVuZXIucmVzdWx0OwogICAgICAgIGFzc2VydCghZnV0dXJlLl9pc0NvbXBsZXRlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgX3NldENoYWluZWQoX0Z1dHVyZSBzb3VyY2UpIHsKICAgIGFzc2VydChfbWF5QWRkTGlzdGVuZXIpOwogICAgX3N0YXRlID0gX3N0YXRlQ2hhaW5lZDsKICAgIF9yZXN1bHRPckxpc3RlbmVycyA9IHNvdXJjZTsKICB9CgogIEZ1dHVyZTxSPiB0aGVuPFI+KEZ1dHVyZU9yPFI+IGYoVCB2YWx1ZSksIHtGdW5jdGlvbiBvbkVycm9yfSkgewogICAgWm9uZSBjdXJyZW50Wm9uZSA9IFpvbmUuY3VycmVudDsKICAgIGlmICghaWRlbnRpY2FsKGN1cnJlbnRab25lLCBfcm9vdFpvbmUpKSB7CiAgICAgIGYgPSBjdXJyZW50Wm9uZS5yZWdpc3RlclVuYXJ5Q2FsbGJhY2s8RnV0dXJlT3I8Uj4sIFQ+KGYpOwogICAgICBpZiAob25FcnJvciAhPSBudWxsKSB7CiAgICAgICAgLy8gSW4gY2hlY2tlZCBtb2RlLCB0aGlzIGNoZWNrcyB0aGF0IG9uRXJyb3IgaXMgYXNzaWduYWJsZSB0byBvbmUgb2Y6CiAgICAgICAgLy8gICBkeW5hbWljIEZ1bmN0aW9uKE9iamVjdCkKICAgICAgICAvLyAgIGR5bmFtaWMgRnVuY3Rpb24oT2JqZWN0LCBTdGFja1RyYWNlKQogICAgICAgIG9uRXJyb3IgPSBfcmVnaXN0ZXJFcnJvckhhbmRsZXIob25FcnJvciwgY3VycmVudFpvbmUpOwogICAgICB9CiAgICB9CiAgICBfRnV0dXJlPFI+IHJlc3VsdCA9IG5ldyBfRnV0dXJlPFI+KCk7CiAgICBfYWRkTGlzdGVuZXIobmV3IF9GdXR1cmVMaXN0ZW5lcjxULCBSPi50aGVuKHJlc3VsdCwgZiwgb25FcnJvcikpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBSZWdpc3RlcnMgYSBzeXN0ZW0gY3JlYXRlZCByZXN1bHQgYW5kIGVycm9yIGNvbnRpbnVhdGlvbi4KICAvLy8KICAvLy8gVXNlZCBieSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGF3YWl0YCB0byBsaXN0ZW4gdG8gYSBmdXR1cmUuCiAgLy8vIFRoZSBzeXN0ZW0gY3JlYXRlZCBsaXNlbmVycyBhcmUgbm90IHJlZ2lzdGVyZWQgaW4gdGhlIHpvbmUsCiAgLy8vIGFuZCB0aGUgbGlzdGVuZXIgaXMgbWFya2VkIGFzIGJlaW5nIGZyb20gYW4gYGF3YWl0YC4KICAvLy8gVGhpcyBtYXJrZXIgaXMgdXNlZCBpbiBbX2NvbnRpbnVhdGlvbkZ1bmN0aW9uc10uCiAgRnV0dXJlPEU+IF90aGVuQXdhaXQ8RT4oCiAgICAgIEZ1dHVyZU9yPEU+IGYoVCB2YWx1ZSksIEZ1bmN0aW9uIG9uRXJyb3IpIHsKICAgIF9GdXR1cmU8RT4gcmVzdWx0ID0gbmV3IF9GdXR1cmU8RT4oKTsKICAgIF9hZGRMaXN0ZW5lcihuZXcgX0Z1dHVyZUxpc3RlbmVyPFQsIEU+LnRoZW5Bd2FpdChyZXN1bHQsIGYsIG9uRXJyb3IpKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBGdXR1cmU8VD4gY2F0Y2hFcnJvcihGdW5jdGlvbiBvbkVycm9yLCB7Ym9vbCB0ZXN0KGVycm9yKX0pIHsKICAgIF9GdXR1cmU8VD4gcmVzdWx0ID0gbmV3IF9GdXR1cmU8VD4oKTsKICAgIGlmICghaWRlbnRpY2FsKHJlc3VsdC5fem9uZSwgX3Jvb3Rab25lKSkgewogICAgICBvbkVycm9yID0gX3JlZ2lzdGVyRXJyb3JIYW5kbGVyKG9uRXJyb3IsIHJlc3VsdC5fem9uZSk7CiAgICAgIGlmICh0ZXN0ICE9IG51bGwpIHRlc3QgPSByZXN1bHQuX3pvbmUucmVnaXN0ZXJVbmFyeUNhbGxiYWNrKHRlc3QpOwogICAgfQogICAgX2FkZExpc3RlbmVyKG5ldyBfRnV0dXJlTGlzdGVuZXI8VCwgVD4uY2F0Y2hFcnJvcihyZXN1bHQsIG9uRXJyb3IsIHRlc3QpKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBGdXR1cmU8VD4gd2hlbkNvbXBsZXRlKGR5bmFtaWMgYWN0aW9uKCkpIHsKICAgIF9GdXR1cmU8VD4gcmVzdWx0ID0gbmV3IF9GdXR1cmU8VD4oKTsKICAgIGlmICghaWRlbnRpY2FsKHJlc3VsdC5fem9uZSwgX3Jvb3Rab25lKSkgewogICAgICBhY3Rpb24gPSByZXN1bHQuX3pvbmUucmVnaXN0ZXJDYWxsYmFjazxkeW5hbWljPihhY3Rpb24pOwogICAgfQogICAgX2FkZExpc3RlbmVyKG5ldyBfRnV0dXJlTGlzdGVuZXI8VCwgVD4ud2hlbkNvbXBsZXRlKHJlc3VsdCwgYWN0aW9uKSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgU3RyZWFtPFQ+IGFzU3RyZWFtKCkgPT4gbmV3IFN0cmVhbTxUPi5mcm9tRnV0dXJlKHRoaXMpOwoKICB2b2lkIF9zZXRQZW5kaW5nQ29tcGxldGUoKSB7CiAgICBhc3NlcnQoX21heUNvbXBsZXRlKTsKICAgIF9zdGF0ZSA9IF9zdGF0ZVBlbmRpbmdDb21wbGV0ZTsKICB9CgogIHZvaWQgX2NsZWFyUGVuZGluZ0NvbXBsZXRlKCkgewogICAgYXNzZXJ0KF9pc1BlbmRpbmdDb21wbGV0ZSk7CiAgICBfc3RhdGUgPSBfc3RhdGVJbmNvbXBsZXRlOwogIH0KCiAgQXN5bmNFcnJvciBnZXQgX2Vycm9yIHsKICAgIGFzc2VydChfaGFzRXJyb3IpOwogICAgcmV0dXJuIF9yZXN1bHRPckxpc3RlbmVyczsKICB9CgogIF9GdXR1cmUgZ2V0IF9jaGFpblNvdXJjZSB7CiAgICBhc3NlcnQoX2lzQ2hhaW5lZCk7CiAgICByZXR1cm4gX3Jlc3VsdE9yTGlzdGVuZXJzOwogIH0KCiAgLy8gVGhpcyBtZXRob2QgaXMgdXNlZCBieSBhc3luYy9hd2FpdC4KICB2b2lkIF9zZXRWYWx1ZShUIHZhbHVlKSB7CiAgICBhc3NlcnQoIV9pc0NvbXBsZXRlKTsgLy8gQnV0IG1heSBoYXZlIGEgY29tcGxldGlvbiBwZW5kaW5nLgogICAgX3N0YXRlID0gX3N0YXRlVmFsdWU7CiAgICBfcmVzdWx0T3JMaXN0ZW5lcnMgPSB2YWx1ZTsKICB9CgogIHZvaWQgX3NldEVycm9yT2JqZWN0KEFzeW5jRXJyb3IgZXJyb3IpIHsKICAgIGFzc2VydCghX2lzQ29tcGxldGUpOyAvLyBCdXQgbWF5IGhhdmUgYSBjb21wbGV0aW9uIHBlbmRpbmcuCiAgICBfc3RhdGUgPSBfc3RhdGVFcnJvcjsKICAgIF9yZXN1bHRPckxpc3RlbmVycyA9IGVycm9yOwogIH0KCiAgdm9pZCBfc2V0RXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIF9zZXRFcnJvck9iamVjdChuZXcgQXN5bmNFcnJvcihlcnJvciwgc3RhY2tUcmFjZSkpOwogIH0KCiAgLy8vIENvcHkgdGhlIGNvbXBsZXRpb24gcmVzdWx0IG9mIFtzb3VyY2VdIGludG8gdGhpcyBmdXR1cmUuCiAgLy8vCiAgLy8vIFVzZWQgd2hlbiBhIGNoYWluZWQgZnV0dXJlIG5vdGljZXMgdGhhdCBpdHMgc291cmNlIGlzIGNvbXBsZXRlZC4KICB2b2lkIF9jbG9uZVJlc3VsdChfRnV0dXJlIHNvdXJjZSkgewogICAgYXNzZXJ0KCFfaXNDb21wbGV0ZSk7CiAgICBhc3NlcnQoc291cmNlLl9pc0NvbXBsZXRlKTsKICAgIF9zdGF0ZSA9IHNvdXJjZS5fc3RhdGU7CiAgICBfcmVzdWx0T3JMaXN0ZW5lcnMgPSBzb3VyY2UuX3Jlc3VsdE9yTGlzdGVuZXJzOwogIH0KCiAgdm9pZCBfYWRkTGlzdGVuZXIoX0Z1dHVyZUxpc3RlbmVyIGxpc3RlbmVyKSB7CiAgICBhc3NlcnQobGlzdGVuZXIuX25leHRMaXN0ZW5lciA9PSBudWxsKTsKICAgIGlmIChfbWF5QWRkTGlzdGVuZXIpIHsKICAgICAgbGlzdGVuZXIuX25leHRMaXN0ZW5lciA9IF9yZXN1bHRPckxpc3RlbmVyczsKICAgICAgX3Jlc3VsdE9yTGlzdGVuZXJzID0gbGlzdGVuZXI7CiAgICB9IGVsc2UgewogICAgICBpZiAoX2lzQ2hhaW5lZCkgewogICAgICAgIC8vIERlbGVnYXRlIGxpc3RlbmVycyB0byBjaGFpbmVkIHNvdXJjZSBmdXR1cmUuCiAgICAgICAgLy8gSWYgdGhlIHNvdXJjZSBpcyBjb21wbGV0ZSwgaW5zdGVhZCBjb3B5IGl0cyB2YWx1ZXMgYW5kCiAgICAgICAgLy8gZHJvcCB0aGUgY2hhaW5pbmcuCiAgICAgICAgX0Z1dHVyZSBzb3VyY2UgPSBfY2hhaW5Tb3VyY2U7CiAgICAgICAgaWYgKCFzb3VyY2UuX2lzQ29tcGxldGUpIHsKICAgICAgICAgIHNvdXJjZS5fYWRkTGlzdGVuZXIobGlzdGVuZXIpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBfY2xvbmVSZXN1bHQoc291cmNlKTsKICAgICAgfQogICAgICBhc3NlcnQoX2lzQ29tcGxldGUpOwogICAgICAvLyBIYW5kbGUgbGF0ZSBsaXN0ZW5lcnMgYXN5bmNocm9ub3VzbHkuCiAgICAgIF96b25lLnNjaGVkdWxlTWljcm90YXNrKCgpIHsKICAgICAgICBfcHJvcGFnYXRlVG9MaXN0ZW5lcnModGhpcywgbGlzdGVuZXIpOwogICAgICB9KTsKICAgIH0KICB9CgogIHZvaWQgX3ByZXBlbmRMaXN0ZW5lcnMoX0Z1dHVyZUxpc3RlbmVyIGxpc3RlbmVycykgewogICAgaWYgKGxpc3RlbmVycyA9PSBudWxsKSByZXR1cm47CiAgICBpZiAoX21heUFkZExpc3RlbmVyKSB7CiAgICAgIF9GdXR1cmVMaXN0ZW5lciBleGlzdGluZ0xpc3RlbmVycyA9IF9yZXN1bHRPckxpc3RlbmVyczsKICAgICAgX3Jlc3VsdE9yTGlzdGVuZXJzID0gbGlzdGVuZXJzOwogICAgICBpZiAoZXhpc3RpbmdMaXN0ZW5lcnMgIT0gbnVsbCkgewogICAgICAgIF9GdXR1cmVMaXN0ZW5lciBjdXJzb3IgPSBsaXN0ZW5lcnM7CiAgICAgICAgd2hpbGUgKGN1cnNvci5fbmV4dExpc3RlbmVyICE9IG51bGwpIHsKICAgICAgICAgIGN1cnNvciA9IGN1cnNvci5fbmV4dExpc3RlbmVyOwogICAgICAgIH0KICAgICAgICBjdXJzb3IuX25leHRMaXN0ZW5lciA9IGV4aXN0aW5nTGlzdGVuZXJzOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpZiAoX2lzQ2hhaW5lZCkgewogICAgICAgIC8vIERlbGVnYXRlIGxpc3RlbmVycyB0byBjaGFpbmVkIHNvdXJjZSBmdXR1cmUuCiAgICAgICAgLy8gSWYgdGhlIHNvdXJjZSBpcyBjb21wbGV0ZSwgaW5zdGVhZCBjb3B5IGl0cyB2YWx1ZXMgYW5kCiAgICAgICAgLy8gZHJvcCB0aGUgY2hhaW5pbmcuCiAgICAgICAgX0Z1dHVyZSBzb3VyY2UgPSBfY2hhaW5Tb3VyY2U7CiAgICAgICAgaWYgKCFzb3VyY2UuX2lzQ29tcGxldGUpIHsKICAgICAgICAgIHNvdXJjZS5fcHJlcGVuZExpc3RlbmVycyhsaXN0ZW5lcnMpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBfY2xvbmVSZXN1bHQoc291cmNlKTsKICAgICAgfQogICAgICBhc3NlcnQoX2lzQ29tcGxldGUpOwogICAgICBsaXN0ZW5lcnMgPSBfcmV2ZXJzZUxpc3RlbmVycyhsaXN0ZW5lcnMpOwogICAgICBfem9uZS5zY2hlZHVsZU1pY3JvdGFzaygoKSB7CiAgICAgICAgX3Byb3BhZ2F0ZVRvTGlzdGVuZXJzKHRoaXMsIGxpc3RlbmVycyk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgX0Z1dHVyZUxpc3RlbmVyIF9yZW1vdmVMaXN0ZW5lcnMoKSB7CiAgICAvLyBSZXZlcnNlIGxpc3RlbmVycyBiZWZvcmUgcmV0dXJuaW5nIHRoZW0sIHNvIHRoZSByZXN1bHRpbmcgbGlzdCBpcyBpbgogICAgLy8gc3Vic2NyaXB0aW9uIG9yZGVyLgogICAgYXNzZXJ0KCFfaXNDb21wbGV0ZSk7CiAgICBfRnV0dXJlTGlzdGVuZXIgY3VycmVudCA9IF9yZXN1bHRPckxpc3RlbmVyczsKICAgIF9yZXN1bHRPckxpc3RlbmVycyA9IG51bGw7CiAgICByZXR1cm4gX3JldmVyc2VMaXN0ZW5lcnMoY3VycmVudCk7CiAgfQoKICBfRnV0dXJlTGlzdGVuZXIgX3JldmVyc2VMaXN0ZW5lcnMoX0Z1dHVyZUxpc3RlbmVyIGxpc3RlbmVycykgewogICAgX0Z1dHVyZUxpc3RlbmVyIHByZXY7CiAgICBfRnV0dXJlTGlzdGVuZXIgY3VycmVudCA9IGxpc3RlbmVyczsKICAgIHdoaWxlIChjdXJyZW50ICE9IG51bGwpIHsKICAgICAgX0Z1dHVyZUxpc3RlbmVyIG5leHQgPSBjdXJyZW50Ll9uZXh0TGlzdGVuZXI7CiAgICAgIGN1cnJlbnQuX25leHRMaXN0ZW5lciA9IHByZXY7CiAgICAgIHByZXYgPSBjdXJyZW50OwogICAgICBjdXJyZW50ID0gbmV4dDsKICAgIH0KICAgIHJldHVybiBwcmV2OwogIH0KCiAgLy8gVGFrZSB0aGUgdmFsdWUgKHdoZW4gY29tcGxldGVkKSBvZiBzb3VyY2UgYW5kIGNvbXBsZXRlIHRhcmdldCB3aXRoIHRoYXQKICAvLyB2YWx1ZSAob3IgZXJyb3IpLiBUaGlzIGZ1bmN0aW9uIGNvdWxkIGNoYWluIGFsbCBGdXR1cmVzLCBidXQgaXMgc2xvd2VyCiAgLy8gZm9yIF9GdXR1cmUgdGhhbiBfY2hhaW5Db3JlRnV0dXJlLCBzbyB5b3UgbXVzdCB1c2UgX2NoYWluQ29yZUZ1dHVyZQogIC8vIGluIHRoYXQgY2FzZS4KICBzdGF0aWMgdm9pZCBfY2hhaW5Gb3JlaWduRnV0dXJlKEZ1dHVyZSBzb3VyY2UsIF9GdXR1cmUgdGFyZ2V0KSB7CiAgICBhc3NlcnQoIXRhcmdldC5faXNDb21wbGV0ZSk7CiAgICBhc3NlcnQoc291cmNlIGlzISBfRnV0dXJlKTsKCiAgICAvLyBNYXJrIHRoZSB0YXJnZXQgYXMgY2hhaW5lZCAoYW5kIGFzIHN1Y2ggaGFsZi1jb21wbGV0ZWQpLgogICAgdGFyZ2V0Ll9zZXRQZW5kaW5nQ29tcGxldGUoKTsKICAgIHRyeSB7CiAgICAgIHNvdXJjZS50aGVuKCh2YWx1ZSkgewogICAgICAgIGFzc2VydCh0YXJnZXQuX2lzUGVuZGluZ0NvbXBsZXRlKTsKICAgICAgICAvLyBUaGUgInZhbHVlIiBtYXkgYmUgYW5vdGhlciBmdXR1cmUgaWYgdGhlIGZvcmVpZ24gZnV0dXJlCiAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gaXMgbWlzLWJlaGF2aW5nLAogICAgICAgIC8vIHNvIHVzZSBfY29tcGxldGUgaW5zdGVhZCBvZiBfY29tcGxldGVXaXRoVmFsdWUuCiAgICAgICAgdGFyZ2V0Ll9jbGVhclBlbmRpbmdDb21wbGV0ZSgpOyAvLyBDbGVhciB0aGlzIGZpcnN0LCBpdCdzIHNldCBhZ2Fpbi4KICAgICAgICB0YXJnZXQuX2NvbXBsZXRlKHZhbHVlKTsKICAgICAgfSwKICAgICAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiBldmVudHVhbGx5IHdlIHdvdWxkIGxpa2UgdG8gbWFrZSB0aGlzIG5vbi1vcHRpb25hbAogICAgICAgICAgLy8gYW5kIGRlcGVuZGVudCBvbiB0aGUgbGlzdGVuZXJzIG9mIHRoZSB0YXJnZXQgZnV0dXJlLiBJZiBub25lIG9mCiAgICAgICAgICAvLyB0aGUgdGFyZ2V0IGZ1dHVyZSdzIGxpc3RlbmVycyB3YW50IHRvIGhhdmUgdGhlIHN0YWNrIHRyYWNlIHdlIGRvbid0CiAgICAgICAgICAvLyBuZWVkIGEgdHJhY2UuCiAgICAgICAgICBvbkVycm9yOiAoZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICAgICAgYXNzZXJ0KHRhcmdldC5faXNQZW5kaW5nQ29tcGxldGUpOwogICAgICAgIHRhcmdldC5fY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIH0pOwogICAgfSBjYXRjaCAoZSwgcykgewogICAgICAvLyBUaGlzIG9ubHkgaGFwcGVucyBpZiB0aGUgYHRoZW5gIGNhbGwgdGhyZXcgc3luY2hyb25vdXNseSB3aGVuIGdpdmVuCiAgICAgIC8vIHZhbGlkIGFyZ3VtZW50cy4KICAgICAgLy8gVGhhdCByZXF1aXJlcyBhIG5vbi1jb25mb3JtaW5nIGltcGxlbWVudGF0aW9uIG9mIHRoZSBGdXR1cmUgaW50ZXJmYWNlLAogICAgICAvLyB3aGljaCBzaG91bGQsIGhvcGVmdWxseSwgbmV2ZXIgaGFwcGVuLgogICAgICBzY2hlZHVsZU1pY3JvdGFzaygoKSB7CiAgICAgICAgdGFyZ2V0Ll9jb21wbGV0ZUVycm9yKGUsIHMpOwogICAgICB9KTsKICAgIH0KICB9CgogIC8vIFRha2UgdGhlIHZhbHVlICh3aGVuIGNvbXBsZXRlZCkgb2Ygc291cmNlIGFuZCBjb21wbGV0ZSB0YXJnZXQgd2l0aCB0aGF0CiAgLy8gdmFsdWUgKG9yIGVycm9yKS4gVGhpcyBmdW5jdGlvbiBleHBlY3RzIHRoYXQgc291cmNlIGlzIGEgX0Z1dHVyZS4KICBzdGF0aWMgdm9pZCBfY2hhaW5Db3JlRnV0dXJlKF9GdXR1cmUgc291cmNlLCBfRnV0dXJlIHRhcmdldCkgewogICAgYXNzZXJ0KHRhcmdldC5fbWF5QWRkTGlzdGVuZXIpOyAvLyBOb3QgY29tcGxldGVkLCBub3QgYWxyZWFkeSBjaGFpbmVkLgogICAgd2hpbGUgKHNvdXJjZS5faXNDaGFpbmVkKSB7CiAgICAgIHNvdXJjZSA9IHNvdXJjZS5fY2hhaW5Tb3VyY2U7CiAgICB9CiAgICBpZiAoc291cmNlLl9pc0NvbXBsZXRlKSB7CiAgICAgIF9GdXR1cmVMaXN0ZW5lciBsaXN0ZW5lcnMgPSB0YXJnZXQuX3JlbW92ZUxpc3RlbmVycygpOwogICAgICB0YXJnZXQuX2Nsb25lUmVzdWx0KHNvdXJjZSk7CiAgICAgIF9wcm9wYWdhdGVUb0xpc3RlbmVycyh0YXJnZXQsIGxpc3RlbmVycyk7CiAgICB9IGVsc2UgewogICAgICBfRnV0dXJlTGlzdGVuZXIgbGlzdGVuZXJzID0gdGFyZ2V0Ll9yZXN1bHRPckxpc3RlbmVyczsKICAgICAgdGFyZ2V0Ll9zZXRDaGFpbmVkKHNvdXJjZSk7CiAgICAgIHNvdXJjZS5fcHJlcGVuZExpc3RlbmVycyhsaXN0ZW5lcnMpOwogICAgfQogIH0KCiAgdm9pZCBfY29tcGxldGUoRnV0dXJlT3I8VD4gdmFsdWUpIHsKICAgIGFzc2VydCghX2lzQ29tcGxldGUpOwogICAgaWYgKHZhbHVlIGlzIEZ1dHVyZTxUPikgewogICAgICBpZiAodmFsdWUgaXMgX0Z1dHVyZTxUPikgewogICAgICAgIF9jaGFpbkNvcmVGdXR1cmUodmFsdWUsIHRoaXMpOwogICAgICB9IGVsc2UgewogICAgICAgIF9jaGFpbkZvcmVpZ25GdXR1cmUodmFsdWUsIHRoaXMpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBfRnV0dXJlTGlzdGVuZXIgbGlzdGVuZXJzID0gX3JlbW92ZUxpc3RlbmVycygpOwogICAgICBfc2V0VmFsdWUodmFsdWUpOwogICAgICBfcHJvcGFnYXRlVG9MaXN0ZW5lcnModGhpcywgbGlzdGVuZXJzKTsKICAgIH0KICB9CgogIHZvaWQgX2NvbXBsZXRlV2l0aFZhbHVlKFQgdmFsdWUpIHsKICAgIGFzc2VydCghX2lzQ29tcGxldGUpOwogICAgYXNzZXJ0KHZhbHVlIGlzISBGdXR1cmU8VD4pOwoKICAgIF9GdXR1cmVMaXN0ZW5lciBsaXN0ZW5lcnMgPSBfcmVtb3ZlTGlzdGVuZXJzKCk7CiAgICBfc2V0VmFsdWUodmFsdWUpOwogICAgX3Byb3BhZ2F0ZVRvTGlzdGVuZXJzKHRoaXMsIGxpc3RlbmVycyk7CiAgfQoKICB2b2lkIF9jb21wbGV0ZUVycm9yKE9iamVjdCBlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIGFzc2VydCghX2lzQ29tcGxldGUpOwoKICAgIF9GdXR1cmVMaXN0ZW5lciBsaXN0ZW5lcnMgPSBfcmVtb3ZlTGlzdGVuZXJzKCk7CiAgICBfc2V0RXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgX3Byb3BhZ2F0ZVRvTGlzdGVuZXJzKHRoaXMsIGxpc3RlbmVycyk7CiAgfQoKICB2b2lkIF9hc3luY0NvbXBsZXRlKEZ1dHVyZU9yPFQ+IHZhbHVlKSB7CiAgICBhc3NlcnQoIV9pc0NvbXBsZXRlKTsKICAgIC8vIFR3byBjb3JuZXIgY2FzZXMgaWYgdGhlIHZhbHVlIGlzIGEgZnV0dXJlOgogICAgLy8gICAxLiB0aGUgZnV0dXJlIGlzIGFscmVhZHkgY29tcGxldGVkIGFuZCBhbiBlcnJvci4KICAgIC8vICAgMi4gdGhlIGZ1dHVyZSBpcyBub3QgeWV0IGNvbXBsZXRlZCBidXQgbWlnaHQgYmVjb21lIGFuIGVycm9yLgogICAgLy8gVGhlIGZpcnN0IGNhc2UgbWVhbnMgdGhhdCB3ZSBtdXN0IG5vdCBpbW1lZGlhdGVseSBjb21wbGV0ZSB0aGUgRnV0dXJlLAogICAgLy8gYXMgb3VyIGNvZGUgd291bGQgaW1tZWRpYXRlbHkgc3RhcnQgcHJvcGFnYXRpbmcgdGhlIGVycm9yIHdpdGhvdXQKICAgIC8vIGdpdmluZyB0aGUgdGltZSB0byBpbnN0YWxsIGVycm9yLWhhbmRsZXJzLgogICAgLy8gSG93ZXZlciB0aGUgc2Vjb25kIGNhc2UgcmVxdWlyZXMgdXMgdG8gZGVhbCB3aXRoIHRoZSB2YWx1ZSBpbW1lZGlhdGVseS4KICAgIC8vIE90aGVyd2lzZSB0aGUgdmFsdWUgY291bGQgY29tcGxldGUgd2l0aCBhbiBlcnJvciBhbmQgcmVwb3J0IGFuCiAgICAvLyB1bmhhbmRsZWQgZXJyb3IsIGV2ZW4gdGhvdWdoIHdlIGtub3cgd2UgYXJlIGFscmVhZHkgZ29pbmcgdG8gbGlzdGVuIHRvCiAgICAvLyBpdC4KCiAgICBpZiAodmFsdWUgaXMgRnV0dXJlPFQ+KSB7CiAgICAgIF9jaGFpbkZ1dHVyZSh2YWx1ZSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIF9zZXRQZW5kaW5nQ29tcGxldGUoKTsKICAgIF96b25lLnNjaGVkdWxlTWljcm90YXNrKCgpIHsKICAgICAgX2NvbXBsZXRlV2l0aFZhbHVlKHZhbHVlKTsKICAgIH0pOwogIH0KCiAgdm9pZCBfY2hhaW5GdXR1cmUoRnV0dXJlPFQ+IHZhbHVlKSB7CiAgICBpZiAodmFsdWUgaXMgX0Z1dHVyZTxUPikgewogICAgICBpZiAodmFsdWUuX2hhc0Vycm9yKSB7CiAgICAgICAgLy8gRGVsYXkgY29tcGxldGlvbiB0byBhbGxvdyB0aGUgdXNlciB0byByZWdpc3RlciBjYWxsYmFja3MuCiAgICAgICAgX3NldFBlbmRpbmdDb21wbGV0ZSgpOwogICAgICAgIF96b25lLnNjaGVkdWxlTWljcm90YXNrKCgpIHsKICAgICAgICAgIF9jaGFpbkNvcmVGdXR1cmUodmFsdWUsIHRoaXMpOwogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIF9jaGFpbkNvcmVGdXR1cmUodmFsdWUsIHRoaXMpOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIEp1c3QgbGlzdGVuIG9uIHRoZSBmb3JlaWduIGZ1dHVyZS4gVGhpcyBndWFyYW50ZWVzIGFuIGFzeW5jIGRlbGF5LgogICAgX2NoYWluRm9yZWlnbkZ1dHVyZSh2YWx1ZSwgdGhpcyk7CiAgfQoKICB2b2lkIF9hc3luY0NvbXBsZXRlRXJyb3IoZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgYXNzZXJ0KCFfaXNDb21wbGV0ZSk7CgogICAgX3NldFBlbmRpbmdDb21wbGV0ZSgpOwogICAgX3pvbmUuc2NoZWR1bGVNaWNyb3Rhc2soKCkgewogICAgICBfY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICB9KTsKICB9CgogIC8qKgogICAqIFByb3BhZ2F0ZXMgdGhlIHZhbHVlL2Vycm9yIG9mIFtzb3VyY2VdIHRvIGl0cyBbbGlzdGVuZXJzXSwgZXhlY3V0aW5nIHRoZQogICAqIGxpc3RlbmVycycgY2FsbGJhY2tzLgogICAqLwogIHN0YXRpYyB2b2lkIF9wcm9wYWdhdGVUb0xpc3RlbmVycyhfRnV0dXJlIHNvdXJjZSwgX0Z1dHVyZUxpc3RlbmVyIGxpc3RlbmVycykgewogICAgd2hpbGUgKHRydWUpIHsKICAgICAgYXNzZXJ0KHNvdXJjZS5faXNDb21wbGV0ZSk7CiAgICAgIGJvb2wgaGFzRXJyb3IgPSBzb3VyY2UuX2hhc0Vycm9yOwogICAgICBpZiAobGlzdGVuZXJzID09IG51bGwpIHsKICAgICAgICBpZiAoaGFzRXJyb3IpIHsKICAgICAgICAgIEFzeW5jRXJyb3IgYXN5bmNFcnJvciA9IHNvdXJjZS5fZXJyb3I7CiAgICAgICAgICBzb3VyY2UuX3pvbmUKICAgICAgICAgICAgICAuaGFuZGxlVW5jYXVnaHRFcnJvcihhc3luY0Vycm9yLmVycm9yLCBhc3luY0Vycm9yLnN0YWNrVHJhY2UpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgLy8gVXN1YWxseSBmdXR1cmVzIG9ubHkgaGF2ZSBvbmUgbGlzdGVuZXIuIElmIHRoZXkgaGF2ZSBzZXZlcmFsLCB3ZQogICAgICAvLyBjYWxsIGhhbmRsZSB0aGVtIHNlcGFyYXRlbHkgaW4gcmVjdXJzaXZlIGNhbGxzLCBjb250aW51aW5nCiAgICAgIC8vIGhlcmUgb25seSB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIGxpc3RlbmVyIGxlZnQuCiAgICAgIHdoaWxlIChsaXN0ZW5lcnMuX25leHRMaXN0ZW5lciAhPSBudWxsKSB7CiAgICAgICAgX0Z1dHVyZUxpc3RlbmVyIGxpc3RlbmVyID0gbGlzdGVuZXJzOwogICAgICAgIGxpc3RlbmVycyA9IGxpc3RlbmVyLl9uZXh0TGlzdGVuZXI7CiAgICAgICAgbGlzdGVuZXIuX25leHRMaXN0ZW5lciA9IG51bGw7CiAgICAgICAgX3Byb3BhZ2F0ZVRvTGlzdGVuZXJzKHNvdXJjZSwgbGlzdGVuZXIpOwogICAgICB9CiAgICAgIF9GdXR1cmVMaXN0ZW5lciBsaXN0ZW5lciA9IGxpc3RlbmVyczsKICAgICAgZmluYWwgc291cmNlUmVzdWx0ID0gc291cmNlLl9yZXN1bHRPckxpc3RlbmVyczsKICAgICAgLy8gRG8gdGhlIGFjdHVhbCBwcm9wYWdhdGlvbi4KICAgICAgLy8gU2V0IGluaXRpYWwgc3RhdGUgb2YgbGlzdGVuZXJIYXNFcnJvciBhbmQgbGlzdGVuZXJWYWx1ZU9yRXJyb3IuIFRoZXNlCiAgICAgIC8vIHZhcmlhYmxlcyBhcmUgdXBkYXRlZCB3aXRoIHRoZSBvdXRjb21lIG9mIHBvdGVudGlhbCBjYWxsYmFja3MuCiAgICAgIC8vIE5vbi1lcnJvciByZXN1bHRzLCBpbmNsdWRpbmcgZnV0dXJlcywgYXJlIHN0b3JlZCBpbgogICAgICAvLyBsaXN0ZW5lclZhbHVlT3JFcnJvciBhbmQgbGlzdGVuZXJIYXNFcnJvciBpcyBzZXQgdG8gZmFsc2UuIEVycm9ycwogICAgICAvLyBhcmUgc3RvcmVkIGluIGxpc3RlbmVyVmFsdWVPckVycm9yIGFzIGFuIFtBc3luY0Vycm9yXSBhbmQKICAgICAgLy8gbGlzdGVuZXJIYXNFcnJvciBpcyBzZXQgdG8gdHJ1ZS4KICAgICAgYm9vbCBsaXN0ZW5lckhhc0Vycm9yID0gaGFzRXJyb3I7CiAgICAgIHZhciBsaXN0ZW5lclZhbHVlT3JFcnJvciA9IHNvdXJjZVJlc3VsdDsKCiAgICAgIC8vIE9ubHkgaWYgd2UgZWl0aGVyIGhhdmUgYW4gZXJyb3Igb3IgY2FsbGJhY2tzLCBnbyBpbnRvIHRoaXMsIHNvbWV3aGF0CiAgICAgIC8vIGV4cGVuc2l2ZSwgYnJhbmNoLiBIZXJlIHdlJ2xsIGVudGVyL2xlYXZlIHRoZSB6b25lLiBNYW55IGZ1dHVyZXMKICAgICAgLy8gZG9uJ3QgaGF2ZSBjYWxsYmFja3MsIHNvIHRoaXMgaXMgYSBzaWduaWZpY2FudCBvcHRpbWl6YXRpb24uCiAgICAgIGlmIChoYXNFcnJvciB8fCBsaXN0ZW5lci5oYW5kbGVzVmFsdWUgfHwgbGlzdGVuZXIuaGFuZGxlc0NvbXBsZXRlKSB7CiAgICAgICAgWm9uZSB6b25lID0gbGlzdGVuZXIuX3pvbmU7CiAgICAgICAgaWYgKGhhc0Vycm9yICYmICFzb3VyY2UuX3pvbmUuaW5TYW1lRXJyb3Jab25lKHpvbmUpKSB7CiAgICAgICAgICAvLyBEb24ndCBjcm9zcyB6b25lIGJvdW5kYXJpZXMgd2l0aCBlcnJvcnMuCiAgICAgICAgICBBc3luY0Vycm9yIGFzeW5jRXJyb3IgPSBzb3VyY2UuX2Vycm9yOwogICAgICAgICAgc291cmNlLl96b25lCiAgICAgICAgICAgICAgLmhhbmRsZVVuY2F1Z2h0RXJyb3IoYXN5bmNFcnJvci5lcnJvciwgYXN5bmNFcnJvci5zdGFja1RyYWNlKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIFpvbmUgb2xkWm9uZTsKICAgICAgICBpZiAoIWlkZW50aWNhbChab25lLmN1cnJlbnQsIHpvbmUpKSB7CiAgICAgICAgICAvLyBDaGFuZ2Ugem9uZSBpZiBpdCdzIG5vdCBjdXJyZW50LgogICAgICAgICAgb2xkWm9uZSA9IFpvbmUuX2VudGVyKHpvbmUpOwogICAgICAgIH0KCiAgICAgICAgLy8gVGhlc2UgY2FsbGJhY2tzIGFyZSBhYnN0cmFjdGVkIHRvIGlzb2xhdGUgdGhlIHRyeS9jYXRjaCBibG9ja3MKICAgICAgICAvLyBmcm9tIHRoZSByZXN0IG9mIHRoZSBjb2RlIHRvIHdvcmsgYXJvdW5kIGEgVjggZ2xhc3MgamF3LgogICAgICAgIHZvaWQgaGFuZGxlV2hlbkNvbXBsZXRlQ2FsbGJhY2soKSB7CiAgICAgICAgICAvLyBUaGUgd2hlbkNvbXBsZXRlLWhhbmRsZXIgaXMgbm90IGNvbWJpbmVkIHdpdGggbm9ybWFsIHZhbHVlL2Vycm9yCiAgICAgICAgICAvLyBoYW5kbGluZy4gVGhpcyBtZWFucyBhdCBtb3N0IG9uZSBoYW5kbGVYIG1ldGhvZCBpcyBjYWxsZWQgcGVyCiAgICAgICAgICAvLyBsaXN0ZW5lci4KICAgICAgICAgIGFzc2VydCghbGlzdGVuZXIuaGFuZGxlc1ZhbHVlKTsKICAgICAgICAgIGFzc2VydCghbGlzdGVuZXIuaGFuZGxlc0Vycm9yKTsKICAgICAgICAgIHZhciBjb21wbGV0ZVJlc3VsdDsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbXBsZXRlUmVzdWx0ID0gbGlzdGVuZXIuaGFuZGxlV2hlbkNvbXBsZXRlKCk7CiAgICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICAgIGlmIChoYXNFcnJvciAmJiBpZGVudGljYWwoc291cmNlLl9lcnJvci5lcnJvciwgZSkpIHsKICAgICAgICAgICAgICBsaXN0ZW5lclZhbHVlT3JFcnJvciA9IHNvdXJjZS5fZXJyb3I7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgbGlzdGVuZXJWYWx1ZU9yRXJyb3IgPSBuZXcgQXN5bmNFcnJvcihlLCBzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBsaXN0ZW5lckhhc0Vycm9yID0gdHJ1ZTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNvbXBsZXRlUmVzdWx0IGlzIEZ1dHVyZSkgewogICAgICAgICAgICBpZiAoY29tcGxldGVSZXN1bHQgaXMgX0Z1dHVyZSAmJiBjb21wbGV0ZVJlc3VsdC5faXNDb21wbGV0ZSkgewogICAgICAgICAgICAgIGlmIChjb21wbGV0ZVJlc3VsdC5faGFzRXJyb3IpIHsKICAgICAgICAgICAgICAgIGxpc3RlbmVyVmFsdWVPckVycm9yID0gY29tcGxldGVSZXN1bHQuX2Vycm9yOwogICAgICAgICAgICAgICAgbGlzdGVuZXJIYXNFcnJvciA9IHRydWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB1c2UgdGhlIGV4aXN0aW5nIHJlc3VsdCBvZiBzb3VyY2UuCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gd2FpdCBmb3IgdGhlIGNvbXBsZXRlUmVzdWx0IGZ1dHVyZSB0byBjb21wbGV0ZQogICAgICAgICAgICAvLyBiZWZvcmUga25vd2luZyBpZiBpdCdzIGFuIGVycm9yIG9yIHdlIHNob3VsZCB1c2UgdGhlIHJlc3VsdAogICAgICAgICAgICAvLyBvZiBzb3VyY2UuCiAgICAgICAgICAgIHZhciBvcmlnaW5hbFNvdXJjZSA9IHNvdXJjZTsKICAgICAgICAgICAgbGlzdGVuZXJWYWx1ZU9yRXJyb3IgPSBjb21wbGV0ZVJlc3VsdC50aGVuKChfKSA9PiBvcmlnaW5hbFNvdXJjZSk7CiAgICAgICAgICAgIGxpc3RlbmVySGFzRXJyb3IgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZvaWQgaGFuZGxlVmFsdWVDYWxsYmFjaygpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGxpc3RlbmVyVmFsdWVPckVycm9yID0gbGlzdGVuZXIuaGFuZGxlVmFsdWUoc291cmNlUmVzdWx0KTsKICAgICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgICAgbGlzdGVuZXJWYWx1ZU9yRXJyb3IgPSBuZXcgQXN5bmNFcnJvcihlLCBzKTsKICAgICAgICAgICAgbGlzdGVuZXJIYXNFcnJvciA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2b2lkIGhhbmRsZUVycm9yKCkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgQXN5bmNFcnJvciBhc3luY0Vycm9yID0gc291cmNlLl9lcnJvcjsKICAgICAgICAgICAgaWYgKGxpc3RlbmVyLm1hdGNoZXNFcnJvclRlc3QoYXN5bmNFcnJvcikgJiYKICAgICAgICAgICAgICAgIGxpc3RlbmVyLmhhc0Vycm9yQ2FsbGJhY2spIHsKICAgICAgICAgICAgICBsaXN0ZW5lclZhbHVlT3JFcnJvciA9IGxpc3RlbmVyLmhhbmRsZUVycm9yKGFzeW5jRXJyb3IpOwogICAgICAgICAgICAgIGxpc3RlbmVySGFzRXJyb3IgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgICAgICBpZiAoaWRlbnRpY2FsKHNvdXJjZS5fZXJyb3IuZXJyb3IsIGUpKSB7CiAgICAgICAgICAgICAgbGlzdGVuZXJWYWx1ZU9yRXJyb3IgPSBzb3VyY2UuX2Vycm9yOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGxpc3RlbmVyVmFsdWVPckVycm9yID0gbmV3IEFzeW5jRXJyb3IoZSwgcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGlzdGVuZXJIYXNFcnJvciA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAobGlzdGVuZXIuaGFuZGxlc0NvbXBsZXRlKSB7CiAgICAgICAgICBoYW5kbGVXaGVuQ29tcGxldGVDYWxsYmFjaygpOwogICAgICAgIH0gZWxzZSBpZiAoIWhhc0Vycm9yKSB7CiAgICAgICAgICBpZiAobGlzdGVuZXIuaGFuZGxlc1ZhbHVlKSB7CiAgICAgICAgICAgIGhhbmRsZVZhbHVlQ2FsbGJhY2soKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGxpc3RlbmVyLmhhbmRsZXNFcnJvcikgewogICAgICAgICAgICBoYW5kbGVFcnJvcigpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gSWYgd2UgY2hhbmdlZCB6b25lLCBvbGRab25lIHdpbGwgbm90IGJlIG51bGwuCiAgICAgICAgaWYgKG9sZFpvbmUgIT0gbnVsbCkgWm9uZS5fbGVhdmUob2xkWm9uZSk7CgogICAgICAgIC8vIElmIHRoZSBsaXN0ZW5lcidzIHZhbHVlIGlzIGEgZnV0dXJlIHdlIG5lZWQgdG8gY2hhaW4gaXQuIE5vdGUgdGhhdAogICAgICAgIC8vIHRoaXMgY2FuIG9ubHkgaGFwcGVuIGlmIHRoZXJlIGlzIGEgY2FsbGJhY2suCiAgICAgICAgaWYgKGxpc3RlbmVyVmFsdWVPckVycm9yIGlzIEZ1dHVyZSkgewogICAgICAgICAgRnV0dXJlIGNoYWluU291cmNlID0gbGlzdGVuZXJWYWx1ZU9yRXJyb3I7CiAgICAgICAgICAvLyBTaG9ydGN1dCBpZiB0aGUgY2hhaW4tc291cmNlIGlzIGFscmVhZHkgY29tcGxldGVkLiBKdXN0IGNvbnRpbnVlCiAgICAgICAgICAvLyB0aGUgbG9vcC4KICAgICAgICAgIF9GdXR1cmUgcmVzdWx0ID0gbGlzdGVuZXIucmVzdWx0OwogICAgICAgICAgaWYgKGNoYWluU291cmNlIGlzIF9GdXR1cmUpIHsKICAgICAgICAgICAgaWYgKGNoYWluU291cmNlLl9pc0NvbXBsZXRlKSB7CiAgICAgICAgICAgICAgbGlzdGVuZXJzID0gcmVzdWx0Ll9yZW1vdmVMaXN0ZW5lcnMoKTsKICAgICAgICAgICAgICByZXN1bHQuX2Nsb25lUmVzdWx0KGNoYWluU291cmNlKTsKICAgICAgICAgICAgICBzb3VyY2UgPSBjaGFpblNvdXJjZTsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBfY2hhaW5Db3JlRnV0dXJlKGNoYWluU291cmNlLCByZXN1bHQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfY2hhaW5Gb3JlaWduRnV0dXJlKGNoYWluU291cmNlLCByZXN1bHQpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgICBfRnV0dXJlIHJlc3VsdCA9IGxpc3RlbmVyLnJlc3VsdDsKICAgICAgbGlzdGVuZXJzID0gcmVzdWx0Ll9yZW1vdmVMaXN0ZW5lcnMoKTsKICAgICAgaWYgKCFsaXN0ZW5lckhhc0Vycm9yKSB7CiAgICAgICAgcmVzdWx0Ll9zZXRWYWx1ZShsaXN0ZW5lclZhbHVlT3JFcnJvcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgQXN5bmNFcnJvciBhc3luY0Vycm9yID0gbGlzdGVuZXJWYWx1ZU9yRXJyb3I7CiAgICAgICAgcmVzdWx0Ll9zZXRFcnJvck9iamVjdChhc3luY0Vycm9yKTsKICAgICAgfQogICAgICAvLyBQcmVwYXJlIGZvciBuZXh0IHJvdW5kLgogICAgICBzb3VyY2UgPSByZXN1bHQ7CiAgICB9CiAgfQoKICBGdXR1cmU8VD4gdGltZW91dChEdXJhdGlvbiB0aW1lTGltaXQsIHtGdXR1cmVPcjxUPiBvblRpbWVvdXQoKX0pIHsKICAgIGlmIChfaXNDb21wbGV0ZSkgcmV0dXJuIG5ldyBfRnV0dXJlLmltbWVkaWF0ZSh0aGlzKTsKICAgIF9GdXR1cmU8VD4gcmVzdWx0ID0gbmV3IF9GdXR1cmU8VD4oKTsKICAgIFRpbWVyIHRpbWVyOwogICAgaWYgKG9uVGltZW91dCA9PSBudWxsKSB7CiAgICAgIHRpbWVyID0gbmV3IFRpbWVyKHRpbWVMaW1pdCwgKCkgewogICAgICAgIHJlc3VsdC5fY29tcGxldGVFcnJvcigKICAgICAgICAgICAgbmV3IFRpbWVvdXRFeGNlcHRpb24oIkZ1dHVyZSBub3QgY29tcGxldGVkIiwgdGltZUxpbWl0KSk7CiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgWm9uZSB6b25lID0gWm9uZS5jdXJyZW50OwogICAgICBvblRpbWVvdXQgPSB6b25lLnJlZ2lzdGVyQ2FsbGJhY2sob25UaW1lb3V0KTsKICAgICAgdGltZXIgPSBuZXcgVGltZXIodGltZUxpbWl0LCAoKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHJlc3VsdC5fY29tcGxldGUoem9uZS5ydW4ob25UaW1lb3V0KSk7CiAgICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgICAgcmVzdWx0Ll9jb21wbGV0ZUVycm9yKGUsIHMpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICB0aGlzLnRoZW4oKFQgdikgewogICAgICBpZiAodGltZXIuaXNBY3RpdmUpIHsKICAgICAgICB0aW1lci5jYW5jZWwoKTsKICAgICAgICByZXN1bHQuX2NvbXBsZXRlV2l0aFZhbHVlKHYpOwogICAgICB9CiAgICB9LCBvbkVycm9yOiAoZSwgU3RhY2tUcmFjZSBzKSB7CiAgICAgIGlmICh0aW1lci5pc0FjdGl2ZSkgewogICAgICAgIHRpbWVyLmNhbmNlbCgpOwogICAgICAgIHJlc3VsdC5fY29tcGxldGVFcnJvcihlLCBzKTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQoKLy8vIFJlZ2lzdGVycyBlcnJvckhhbmRsZXIgaW4gem9uZSBpZiBpdCBoYXMgdGhlIGNvcnJlY3QgdHlwZS4KLy8vCi8vLyBDaGVja3MgdGhhdCB0aGUgZnVuY3Rpb24gYWNjZXB0cyBlaXRoZXIgYW4gW09iamVjdF0gYW5kIGEgW1N0YWNrVHJhY2VdCi8vLyBvciBqdXN0IG9uZSBbT2JqZWN0XS4gRG9lcyBub3QgY2hlY2sgdGhlIHJldHVybiB0eXBlLgovLy8gVGhlIGFjdHVhbGx5IHJldHVybmVkIHZhbHVlIG11c3QgYmUgYEZ1dHVyZU9yPFI+YCB3aGVyZSBgUmAgaXMgdGhlCi8vLyB2YWx1ZSB0eXBlIG9mIHRoZSBmdXR1cmUgdGhhdCB0aGUgY2FsbCB3aWxsIGNvbXBsZXRlIChlaXRoZXIgcmV0dXJuZWQKLy8vIGJ5IFtGdXR1cmUudGhlbl0gb3IgW0Z1dHVyZS5jYXRjaEVycm9yXSkuIFdlIGNoZWNrIHRoZSByZXR1cm5lZCB2YWx1ZQovLy8gZHluYW1pY2FsbHkgYmVjYXVzZSB0aGUgZnVuY3Rpb25zIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIGluIHBvc2l0aW9ucwovLy8gd2l0aG91dCBpbmZlcmVuY2UsIHNvIGEgZnVuY3Rpb24gZXhwcmVzc2lvbiB3b24ndCBpbmZlciB0aGUgcmV0dXJuIHR5cGUuCi8vLwovLy8gVGhyb3dzIGlmIHRoZSB0eXBlIGlzIG5vdCB2YWxpZC4KRnVuY3Rpb24gX3JlZ2lzdGVyRXJyb3JIYW5kbGVyKEZ1bmN0aW9uIGVycm9ySGFuZGxlciwgWm9uZSB6b25lKSB7CiAgaWYgKGVycm9ySGFuZGxlciBpcyBkeW5hbWljIEZ1bmN0aW9uKE9iamVjdCwgU3RhY2tUcmFjZSkpIHsKICAgIHJldHVybiB6b25lCiAgICAgICAgLnJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2s8ZHluYW1pYywgT2JqZWN0LCBTdGFja1RyYWNlPihlcnJvckhhbmRsZXIpOwogIH0KICBpZiAoZXJyb3JIYW5kbGVyIGlzIGR5bmFtaWMgRnVuY3Rpb24oT2JqZWN0KSkgewogICAgcmV0dXJuIHpvbmUucmVnaXN0ZXJVbmFyeUNhbGxiYWNrPGR5bmFtaWMsIE9iamVjdD4oZXJyb3JIYW5kbGVyKTsKICB9CiAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUoCiAgICAgIGVycm9ySGFuZGxlciwKICAgICAgIm9uRXJyb3IiLAogICAgICAiRXJyb3IgaGFuZGxlciBtdXN0IGFjY2VwdCBvbmUgT2JqZWN0IG9yIG9uZSBPYmplY3QgYW5kIGEgU3RhY2tUcmFjZSIKICAgICAgIiBhcyBhcmd1bWVudHMsIGFuZCByZXR1cm4gYSBhIHZhbGlkIHJlc3VsdCIpOwp9CoMuAE5OPAEUAUozRC0dIQE3LgEmAT4iUEwfMCsGJwQBPAFNJDACATEnUCIEAT0zBAIBMCdQHQQBPS4EAgEeIiImKSMqPTBEOR5AJkAhPRseEzQbHyABGEkcJ0gBHUkcJ0kfAU1MATseIwEiATU1RkczASYaFQQBKiQaFQQBKh0VBAEzBkgeGh0EASxDBAExJEcEATMuREpHQTtDDTlPBgQBIRsrBAIBKD4+IykBR0krLgFIPjYmATkkATokATYhAQYuNwVFRQYUAQY/BT08BUdJLgVNUCk2BhoBLiQBQRwEAUErFgQBPR8sBAFEQAE3Qj8yMS8BSSITMSMiM0weLB49IiUPDwgGEwQBJR0cIQQBQiUuQB1OJjI/CAYqRhMEAUAGQ0I7NxsyKksTBAE/Ki8+SQZPEwQBLSovPwZKEwQBOgEfGiQEASEgHwQBGhcfBAEdGB8EASkcQBogBAErQBogBAE4OAQBPwZHJhogHDQEATAsGzMlDRg4Qh4nIykSCh4IGy8jLwoGBAE2Ixs+JicsLykKMggNGDhCHicjLxIKHggbMCMwCgYEASdMGxoyHycEAUEaKR40JBYWBhEEAU1MSRNDISABQCIKHCtDKztNIQlQTVEbNisyChVNGlAwHSUKBgQBTUdBSyAkBh49IzANPSIrBgQBJhoeIScPKggNNhguBgQBJRohATQWLAQBPxoBNCIsBAErGjI6R05JMk9GTgsBHhsOBhshIQgEAScfHUUfJSkMDycIDgZKJgQBOxoBGyEpCAQBBk4bBlETIigfGDEXTQoQCEpEOTAuLCcxCCw2JE9IPUtDKigvAU5KRkskPzYxF00SCgEWLi4nCgFKRCxOSxcqKh4QPBtBNBU7DiUUDCpLLj4pED4WDklLGilPJgwKASUQRxs5JQwKAR0QMzktRygOGzU0FTsOJQwKASgoICcjDBEnGwwKATkzAU44LjVOFywoKzUwJBgVNQ4TNgwSCggoLR8wDzYsCCEXBgQBRTkqER0oH0YKDSA0KA4xGScKCgYWHBgmCCQcGCUICBMEAgE/BEs6R0pKS00EJUM+EEwEMkYEIRQRTDUCARtkYXJ0OmFzeW5jL2Z1dHVyZV9pbXBsLmRhcnQ5b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2FzeW5jL3NjaGVkdWxlX21pY3JvdGFzay5kYXJ0kw4vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmFzeW5jOwoKdHlwZWRlZiB2b2lkIF9Bc3luY0NhbGxiYWNrKCk7CgpjbGFzcyBfQXN5bmNDYWxsYmFja0VudHJ5IHsKICBmaW5hbCBfQXN5bmNDYWxsYmFjayBjYWxsYmFjazsKICBfQXN5bmNDYWxsYmFja0VudHJ5IG5leHQ7CiAgX0FzeW5jQ2FsbGJhY2tFbnRyeSh0aGlzLmNhbGxiYWNrKTsKfQoKLyoqIEhlYWQgb2Ygc2luZ2xlIGxpbmtlZCBsaXN0IG9mIHBlbmRpbmcgY2FsbGJhY2tzLiAqLwpfQXN5bmNDYWxsYmFja0VudHJ5IF9uZXh0Q2FsbGJhY2s7Ci8qKiBUYWlsIG9mIHNpbmdsZSBsaW5rZWQgbGlzdCBvZiBwZW5kaW5nIGNhbGxiYWNrcy4gKi8KX0FzeW5jQ2FsbGJhY2tFbnRyeSBfbGFzdENhbGxiYWNrOwovKioKICogVGFpbCBvZiBwcmlvcml0eSBjYWxsYmFja3MgYWRkZWQgYnkgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgY2FsbGJhY2suCiAqCiAqIFByaW9yaXR5IGNhbGxiYWNrcyBhcmUgcHV0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCiAqIGNhbGxiYWNrIHF1ZXVlLCBzbyB0aGF0IGlmIG9uZSBjYWxsYmFjayBzY2hlZHVsZXMgbW9yZSB0aGFuIG9uZQogKiBwcmlvcml0eSBjYWxsYmFjaywgdGhleSBhcmUgc3RpbGwgZW5xdWV1ZWQgaW4gc2NoZWR1bGluZyBvcmRlci4KICovCl9Bc3luY0NhbGxiYWNrRW50cnkgX2xhc3RQcmlvcml0eUNhbGxiYWNrOwovKioKICogV2hldGhlciB3ZSBhcmUgY3VycmVudGx5IGluc2lkZSB0aGUgY2FsbGJhY2sgbG9vcC4KICoKICogSWYgd2UgYXJlIGluc2lkZSB0aGUgbG9vcCwgd2UgbmV2ZXIgbmVlZCB0byBzY2hlZHVsZSB0aGUgbG9vcCwKICogZXZlbiBpZiBhZGRpbmcgYSBmaXJzdCBlbGVtZW50LgogKi8KYm9vbCBfaXNJbkNhbGxiYWNrTG9vcCA9IGZhbHNlOwoKdm9pZCBfbWljcm90YXNrTG9vcCgpIHsKICB3aGlsZSAoX25leHRDYWxsYmFjayAhPSBudWxsKSB7CiAgICBfbGFzdFByaW9yaXR5Q2FsbGJhY2sgPSBudWxsOwogICAgX0FzeW5jQ2FsbGJhY2tFbnRyeSBlbnRyeSA9IF9uZXh0Q2FsbGJhY2s7CiAgICBfbmV4dENhbGxiYWNrID0gZW50cnkubmV4dDsKICAgIGlmIChfbmV4dENhbGxiYWNrID09IG51bGwpIF9sYXN0Q2FsbGJhY2sgPSBudWxsOwogICAgKGVudHJ5LmNhbGxiYWNrKSgpOwogIH0KfQoKdm9pZCBfc3RhcnRNaWNyb3Rhc2tMb29wKCkgewogIF9pc0luQ2FsbGJhY2tMb29wID0gdHJ1ZTsKICB0cnkgewogICAgLy8gTW92ZWQgdG8gc2VwYXJhdGUgZnVuY3Rpb24gYmVjYXVzZSB0cnktZmluYWxseSBwcmV2ZW50cwogICAgLy8gZ29vZCBvcHRpbWl6YXRpb24uCiAgICBfbWljcm90YXNrTG9vcCgpOwogIH0gZmluYWxseSB7CiAgICBfbGFzdFByaW9yaXR5Q2FsbGJhY2sgPSBudWxsOwogICAgX2lzSW5DYWxsYmFja0xvb3AgPSBmYWxzZTsKICAgIGlmIChfbmV4dENhbGxiYWNrICE9IG51bGwpIHsKICAgICAgX0FzeW5jUnVuLl9zY2hlZHVsZUltbWVkaWF0ZShfc3RhcnRNaWNyb3Rhc2tMb29wKTsKICAgIH0KICB9Cn0KCi8qKgogKiBTY2hlZHVsZXMgYSBjYWxsYmFjayB0byBiZSBjYWxsZWQgYXMgYSBtaWNyb3Rhc2suCiAqCiAqIFRoZSBtaWNyb3Rhc2sgaXMgY2FsbGVkIGFmdGVyIGFsbCBvdGhlciBjdXJyZW50bHkgc2NoZWR1bGVkCiAqIG1pY3JvdGFza3MsIGJ1dCBhcyBwYXJ0IG9mIHRoZSBjdXJyZW50IHN5c3RlbSBldmVudC4KICovCnZvaWQgX3NjaGVkdWxlQXN5bmNDYWxsYmFjayhfQXN5bmNDYWxsYmFjayBjYWxsYmFjaykgewogIF9Bc3luY0NhbGxiYWNrRW50cnkgbmV3RW50cnkgPSBuZXcgX0FzeW5jQ2FsbGJhY2tFbnRyeShjYWxsYmFjayk7CiAgaWYgKF9uZXh0Q2FsbGJhY2sgPT0gbnVsbCkgewogICAgX25leHRDYWxsYmFjayA9IF9sYXN0Q2FsbGJhY2sgPSBuZXdFbnRyeTsKICAgIGlmICghX2lzSW5DYWxsYmFja0xvb3ApIHsKICAgICAgX0FzeW5jUnVuLl9zY2hlZHVsZUltbWVkaWF0ZShfc3RhcnRNaWNyb3Rhc2tMb29wKTsKICAgIH0KICB9IGVsc2UgewogICAgX2xhc3RDYWxsYmFjay5uZXh0ID0gbmV3RW50cnk7CiAgICBfbGFzdENhbGxiYWNrID0gbmV3RW50cnk7CiAgfQp9CgovKioKICogU2NoZWR1bGVzIGEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIGJlZm9yZSBhbGwgb3RoZXIgY3VycmVudGx5IHNjaGVkdWxlZCBvbmVzLgogKgogKiBUaGlzIGNhbGxiYWNrIHRha2VzIHByaW9yaXR5IG92ZXIgZXhpc3Rpbmcgc2NoZWR1bGVkIGNhbGxiYWNrcy4KICogSXQgaXMgb25seSB1c2VkIGludGVybmFsbHkgdG8gZ2l2ZSBoaWdoZXIgcHJpb3JpdHkgdG8gZXJyb3IgcmVwb3J0aW5nLgogKgogKiBJcyBhbHdheXMgcnVuIGluIHRoZSByb290IHpvbmUuCiAqLwp2b2lkIF9zY2hlZHVsZVByaW9yaXR5QXN5bmNDYWxsYmFjayhfQXN5bmNDYWxsYmFjayBjYWxsYmFjaykgewogIGlmIChfbmV4dENhbGxiYWNrID09IG51bGwpIHsKICAgIF9zY2hlZHVsZUFzeW5jQ2FsbGJhY2soY2FsbGJhY2spOwogICAgX2xhc3RQcmlvcml0eUNhbGxiYWNrID0gX2xhc3RDYWxsYmFjazsKICAgIHJldHVybjsKICB9CiAgX0FzeW5jQ2FsbGJhY2tFbnRyeSBlbnRyeSA9IG5ldyBfQXN5bmNDYWxsYmFja0VudHJ5KGNhbGxiYWNrKTsKICBpZiAoX2xhc3RQcmlvcml0eUNhbGxiYWNrID09IG51bGwpIHsKICAgIGVudHJ5Lm5leHQgPSBfbmV4dENhbGxiYWNrOwogICAgX25leHRDYWxsYmFjayA9IF9sYXN0UHJpb3JpdHlDYWxsYmFjayA9IGVudHJ5OwogIH0gZWxzZSB7CiAgICBlbnRyeS5uZXh0ID0gX2xhc3RQcmlvcml0eUNhbGxiYWNrLm5leHQ7CiAgICBfbGFzdFByaW9yaXR5Q2FsbGJhY2submV4dCA9IGVudHJ5OwogICAgX2xhc3RQcmlvcml0eUNhbGxiYWNrID0gZW50cnk7CiAgICBpZiAoZW50cnkubmV4dCA9PSBudWxsKSB7CiAgICAgIF9sYXN0Q2FsbGJhY2sgPSBlbnRyeTsKICAgIH0KICB9Cn0KCi8qKgogKiBSdW5zIGEgZnVuY3Rpb24gYXN5bmNocm9ub3VzbHkuCiAqCiAqIENhbGxiYWNrcyByZWdpc3RlcmVkIHRocm91Z2ggdGhpcyBmdW5jdGlvbiBhcmUgYWx3YXlzIGV4ZWN1dGVkIGluIG9yZGVyIGFuZAogKiBhcmUgZ3VhcmFudGVlZCB0byBydW4gYmVmb3JlIG90aGVyIGFzeW5jaHJvbm91cyBldmVudHMgKGxpa2UgW1RpbWVyXSBldmVudHMsCiAqIG9yIERPTSBldmVudHMpLgogKgogKiAqKldhcm5pbmc6KiogaXQgaXMgcG9zc2libGUgdG8gc3RhcnZlIHRoZSBET00gYnkgcmVnaXN0ZXJpbmcgYXN5bmNocm9ub3VzCiAqIGNhbGxiYWNrcyB0aHJvdWdoIHRoaXMgbWV0aG9kLiBGb3IgZXhhbXBsZSB0aGUgZm9sbG93aW5nIHByb2dyYW0gcnVucwogKiB0aGUgY2FsbGJhY2tzIHdpdGhvdXQgZXZlciBnaXZpbmcgdGhlIFRpbWVyIGNhbGxiYWNrIGEgY2hhbmNlIHRvIGV4ZWN1dGU6CiAqCiAqICAgICBtYWluKCkgewogKiAgICAgICBUaW1lci5ydW4oKCkgeyBwcmludCgiZXhlY3V0ZWQiKTsgfSk7ICAvLyBXaWxsIG5ldmVyIGJlIGV4ZWN1dGVkLgogKiAgICAgICBmb28oKSB7CiAqICAgICAgICAgc2NoZWR1bGVNaWNyb3Rhc2soZm9vKTsgIC8vIFNjaGVkdWxlcyBbZm9vXSBpbiBmcm9udCBvZiBvdGhlciBldmVudHMuCiAqICAgICAgIH0KICogICAgICAgZm9vKCk7CiAqICAgICB9CiAqCiAqICMjIE90aGVyIHJlc291cmNlcwogKgogKiAqIFtUaGUgRXZlbnQgTG9vcCBhbmQgRGFydF0oaHR0cHM6Ly93d3cuZGFydGxhbmcub3JnL2FydGljbGVzL2V2ZW50LWxvb3AvKToKICogTGVhcm4gaG93IERhcnQgaGFuZGxlcyB0aGUgZXZlbnQgcXVldWUgYW5kIG1pY3JvdGFzayBxdWV1ZSwgc28geW91IGNhbiB3cml0ZQogKiBiZXR0ZXIgYXN5bmNocm9ub3VzIGNvZGUgd2l0aCBmZXdlciBzdXJwcmlzZXMuCiAqLwp2b2lkIHNjaGVkdWxlTWljcm90YXNrKHZvaWQgY2FsbGJhY2soKSkgewogIF9ab25lIGN1cnJlbnRab25lID0gWm9uZS5jdXJyZW50OwogIGlmIChpZGVudGljYWwoX3Jvb3Rab25lLCBjdXJyZW50Wm9uZSkpIHsKICAgIC8vIE5vIG5lZWQgdG8gYmluZCB0aGUgY2FsbGJhY2suIFdlIGtub3cgdGhhdCB0aGUgcm9vdCdzIHNjaGVkdWxlTWljcm90YXNrCiAgICAvLyB3aWxsIGJlIGludm9rZWQgaW4gdGhlIHJvb3Qgem9uZS4KICAgIF9yb290U2NoZWR1bGVNaWNyb3Rhc2sobnVsbCwgbnVsbCwgX3Jvb3Rab25lLCBjYWxsYmFjayk7CiAgICByZXR1cm47CiAgfQogIF9ab25lRnVuY3Rpb24gaW1wbGVtZW50YXRpb24gPSBjdXJyZW50Wm9uZS5fc2NoZWR1bGVNaWNyb3Rhc2s7CiAgaWYgKGlkZW50aWNhbChfcm9vdFpvbmUsIGltcGxlbWVudGF0aW9uLnpvbmUpICYmCiAgICAgIF9yb290Wm9uZS5pblNhbWVFcnJvclpvbmUoY3VycmVudFpvbmUpKSB7CiAgICBfcm9vdFNjaGVkdWxlTWljcm90YXNrKAogICAgICAgIG51bGwsIG51bGwsIGN1cnJlbnRab25lLCBjdXJyZW50Wm9uZS5yZWdpc3RlckNhbGxiYWNrKGNhbGxiYWNrKSk7CiAgICByZXR1cm47CiAgfQogIFpvbmUuY3VycmVudC5zY2hlZHVsZU1pY3JvdGFzayhab25lLmN1cnJlbnQuYmluZENhbGxiYWNrR3VhcmRlZChjYWxsYmFjaykpOwp9CgpjbGFzcyBfQXN5bmNSdW4gewogIC8qKiBTY2hlZHVsZSB0aGUgZ2l2ZW4gY2FsbGJhY2sgYmVmb3JlIGFueSBvdGhlciBldmVudCBpbiB0aGUgZXZlbnQtbG9vcC4gKi8KICBleHRlcm5hbCBzdGF0aWMgdm9pZCBfc2NoZWR1bGVJbW1lZGlhdGUodm9pZCBjYWxsYmFjaygpKTsKfQqAmwBOTjwBFAEfARwhHCYCATgjOCMESQM2Q0MEKwQ2A0IjBCABGCIiLyA1GAQCAR0cCD8aFg4iHyE5BgQCAQQ1Az84BDdEHy4eOQYLIx4EAgEEUANDSgMjBD8fJisMBEEnIDMLLSgjHh0GBAIBBCMDT1ATA01JTQMQSxFRCxAJAxYDT1AyBCokK08pPQwEQTMwHEoMBE4CARJPPAIBImRhcnQ6YXN5bmMvc2NoZWR1bGVfbWljcm90YXNrLmRhcnQtb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2FzeW5jL3N0cmVhbS5kYXJ0wAE/0S8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuYXN5bmM7CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIENvcmUgU3RyZWFtIHR5cGVzCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCnR5cGVkZWYgdm9pZCBfVGltZXJDYWxsYmFjaygpOwoKLyoqCiAqIEEgc291cmNlIG9mIGFzeW5jaHJvbm91cyBkYXRhIGV2ZW50cy4KICoKICogQSBTdHJlYW0gcHJvdmlkZXMgYSB3YXkgdG8gcmVjZWl2ZSBhIHNlcXVlbmNlIG9mIGV2ZW50cy4KICogRWFjaCBldmVudCBpcyBlaXRoZXIgYSBkYXRhIGV2ZW50LCBhbHNvIGNhbGxlZCBhbiAqZWxlbWVudCogb2YgdGhlIHN0cmVhbSwKICogb3IgYW4gZXJyb3IgZXZlbnQsIHdoaWNoIGlzIGEgbm90aWZpY2F0aW9uIHRoYXQgc29tZXRoaW5nIGhhcyBmYWlsZWQuCiAqIFdoZW4gYSBzdHJlYW0gaGFzIGVtaXR0ZWQgYWxsIGl0cyBldmVudCwKICogYSBzaW5nbGUgImRvbmUiIGV2ZW50IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lciB0aGF0IHRoZSBlbmQgaGFzIGJlZW4gcmVhY2hlZC4KICoKICogWW91IFtsaXN0ZW5dIG9uIGEgc3RyZWFtIHRvIG1ha2UgaXQgc3RhcnQgZ2VuZXJhdGluZyBldmVudHMsCiAqIGFuZCB0byBzZXQgdXAgbGlzdGVuZXJzIHRoYXQgcmVjZWl2ZSB0aGUgZXZlbnRzLgogKiBXaGVuIHlvdSBsaXN0ZW4sIHlvdSByZWNlaXZlIGEgW1N0cmVhbVN1YnNjcmlwdGlvbl0gb2JqZWN0CiAqIHdoaWNoIGlzIHRoZSBhY3RpdmUgb2JqZWN0IHByb3ZpZGluZyB0aGUgZXZlbnRzLAogKiBhbmQgd2hpY2ggY2FuIGJlIHVzZWQgdG8gc3RvcCBsaXN0ZW5pbmcgYWdhaW4sCiAqIG9yIHRvIHRlbXBvcmFyaWx5IHBhdXNlIGV2ZW50cyBmcm9tIHRoZSBzdWJzY3JpcHRpb24uCiAqCiAqIFRoZXJlIGFyZSB0d28ga2luZHMgb2Ygc3RyZWFtczogIlNpbmdsZS1zdWJzY3JpcHRpb24iIHN0cmVhbXMgYW5kCiAqICJicm9hZGNhc3QiIHN0cmVhbXMuCiAqCiAqICpBIHNpbmdsZS1zdWJzY3JpcHRpb24gc3RyZWFtKiBhbGxvd3Mgb25seSBhIHNpbmdsZSBsaXN0ZW5lciBkdXJpbmcgdGhlIHdob2xlCiAqIGxpZmV0aW1lIG9mIHRoZSBzdHJlYW0uCiAqIEl0IGRvZXNuJ3Qgc3RhcnQgZ2VuZXJhdGluZyBldmVudHMgdW50aWwgaXQgaGFzIGEgbGlzdGVuZXIsCiAqIGFuZCBpdCBzdG9wcyBzZW5kaW5nIGV2ZW50cyB3aGVuIHRoZSBsaXN0ZW5lciBpcyB1bnN1YnNjcmliZWQsCiAqIGV2ZW4gaWYgdGhlIHNvdXJjZSBvZiBldmVudHMgY291bGQgc3RpbGwgcHJvdmlkZSBtb3JlLgogKgogKiBMaXN0ZW5pbmcgdHdpY2Ugb24gYSBzaW5nbGUtc3Vic2NyaXB0aW9uIHN0cmVhbSBpcyBub3QgYWxsb3dlZCwgZXZlbiBhZnRlcgogKiB0aGUgZmlyc3Qgc3Vic2NyaXB0aW9uIGhhcyBiZWVuIGNhbmNlbGVkLgogKgogKiBTaW5nbGUtc3Vic2NyaXB0aW9uIHN0cmVhbXMgYXJlIGdlbmVyYWxseSB1c2VkIGZvciBzdHJlYW1pbmcgY2h1bmtzIG9mCiAqIGxhcmdlciBjb250aWd1b3VzIGRhdGEgbGlrZSBmaWxlIEkvTy4KICoKICogKkEgYnJvYWRjYXN0IHN0cmVhbSogYWxsb3dzIGFueSBudW1iZXIgb2YgbGlzdGVuZXJzLCBhbmQgaXQgZmlyZXMKICogaXRzIGV2ZW50cyB3aGVuIHRoZXkgYXJlIHJlYWR5LCB3aGV0aGVyIHRoZXJlIGFyZSBsaXN0ZW5lcnMgb3Igbm90LgogKgogKiBCcm9hZGNhc3Qgc3RyZWFtcyBhcmUgdXNlZCBmb3IgaW5kZXBlbmRlbnQgZXZlbnRzL29ic2VydmVycy4KICoKICogSWYgc2V2ZXJhbCBsaXN0ZW5lcnMgd2FudCB0byBsaXN0ZW4gdG8gYSBzaW5nbGUgc3Vic2NyaXB0aW9uIHN0cmVhbSwKICogdXNlIFthc0Jyb2FkY2FzdFN0cmVhbV0gdG8gY3JlYXRlIGEgYnJvYWRjYXN0IHN0cmVhbSBvbiB0b3Agb2YgdGhlCiAqIG5vbi1icm9hZGNhc3Qgc3RyZWFtLgogKgogKiBPbiBlaXRoZXIga2luZCBvZiBzdHJlYW0sIHN0cmVhbSB0cmFuc2Zvcm1hdGlvbnMsIHN1Y2ggYXMgW3doZXJlXSBhbmQKICogW3NraXBdLCByZXR1cm4gdGhlIHNhbWUgdHlwZSBvZiBzdHJlYW0gYXMgdGhlIG9uZSB0aGUgbWV0aG9kIHdhcyBjYWxsZWQgb24sCiAqIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuCiAqCiAqIFdoZW4gYW4gZXZlbnQgaXMgZmlyZWQsIHRoZSBsaXN0ZW5lcihzKSBhdCB0aGF0IHRpbWUgd2lsbCByZWNlaXZlIHRoZSBldmVudC4KICogSWYgYSBsaXN0ZW5lciBpcyBhZGRlZCB0byBhIGJyb2FkY2FzdCBzdHJlYW0gd2hpbGUgYW4gZXZlbnQgaXMgYmVpbmcgZmlyZWQsCiAqIHRoYXQgbGlzdGVuZXIgd2lsbCBub3QgcmVjZWl2ZSB0aGUgZXZlbnQgY3VycmVudGx5IGJlaW5nIGZpcmVkLgogKiBJZiBhIGxpc3RlbmVyIGlzIGNhbmNlbGVkLCBpdCBpbW1lZGlhdGVseSBzdG9wcyByZWNlaXZpbmcgZXZlbnRzLgogKiBMaXN0ZW5pbmcgb24gYSBicm9hZGNhc3Qgc3RyZWFtIGNhbiBiZSB0cmVhdGVkIGFzIGxpc3RlbmluZyBvbiBhIG5ldyBzdHJlYW0KICogY29udGFpbmluZyBvbmx5IHRoZSBldmVudHMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbiBlbWl0dGVkIHdoZW4gdGhlIFtsaXN0ZW5dCiAqIGNhbGwgb2NjdXJzLgogKiBGb3IgZXhhbXBsZSwgdGhlIFtmaXJzdF0gZ2V0dGVyIGxpc3RlbnMgdG8gdGhlIHN0cmVhbSwgdGhlbiByZXR1cm5zIHRoZSBmaXJzdAogKiBldmVudCB0aGF0IGxpc3RlbmVyIHJlY2VpdmVzLgogKiBUaGlzIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgZmlyc3QgZXZlbiBlbWl0dGVkIGJ5IHRoZSBzdHJlYW0sIGJ1dCB0aGUgZmlyc3QKICogb2YgdGhlICpyZW1haW5pbmcqIGV2ZW50cyBvZiB0aGUgYnJvYWRjYXN0IHN0cmVhbS4KICoKICogV2hlbiB0aGUgImRvbmUiIGV2ZW50IGlzIGZpcmVkLCBzdWJzY3JpYmVycyBhcmUgdW5zdWJzY3JpYmVkIGJlZm9yZQogKiByZWNlaXZpbmcgdGhlIGV2ZW50LiBBZnRlciB0aGUgZXZlbnQgaGFzIGJlZW4gc2VudCwgdGhlIHN0cmVhbSBoYXMgbm8KICogc3Vic2NyaWJlcnMuIEFkZGluZyBuZXcgc3Vic2NyaWJlcnMgdG8gYSBicm9hZGNhc3Qgc3RyZWFtIGFmdGVyIHRoaXMgcG9pbnQKICogaXMgYWxsb3dlZCwgYnV0IHRoZXkgd2lsbCBqdXN0IHJlY2VpdmUgYSBuZXcgImRvbmUiIGV2ZW50IGFzIHNvb24KICogYXMgcG9zc2libGUuCiAqCiAqIFN0cmVhbSBzdWJzY3JpcHRpb25zIGFsd2F5cyByZXNwZWN0ICJwYXVzZSIgcmVxdWVzdHMuIElmIG5lY2Vzc2FyeSB0aGV5IG5lZWQKICogdG8gYnVmZmVyIHRoZWlyIGlucHV0LCBidXQgb2Z0ZW4sIGFuZCBwcmVmZXJhYmx5LCB0aGV5IGNhbiBzaW1wbHkgcmVxdWVzdAogKiB0aGVpciBpbnB1dCB0byBwYXVzZSB0b28uCiAqCiAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIFtpc0Jyb2FkY2FzdF0gcmV0dXJucyBmYWxzZS4KICogQSBicm9hZGNhc3Qgc3RyZWFtIGluaGVyaXRpbmcgZnJvbSBbU3RyZWFtXSBtdXN0IG92ZXJyaWRlIFtpc0Jyb2FkY2FzdF0KICogdG8gcmV0dXJuIGB0cnVlYC4KICovCmFic3RyYWN0IGNsYXNzIFN0cmVhbTxUPiB7CiAgU3RyZWFtKCk7CgogIC8qKgogICAqIEludGVybmFsIHVzZSBvbmx5LiBXZSBkbyBub3Qgd2FudCB0byBwcm9taXNlIHRoYXQgU3RyZWFtIHN0YXlzIGNvbnN0LgogICAqCiAgICogSWYgbWl4aW5zIGJlY29tZSBjb21wYXRpYmxlIHdpdGggY29uc3QgY29uc3RydWN0b3JzLCB3ZSBtYXkgdXNlIGEKICAgKiBzdHJlYW0gbWl4aW4gaW5zdGVhZCBvZiBleHRlbmRpbmcgU3RyZWFtIGZyb20gYSBjb25zdCBjbGFzcy4KICAgKi8KICBjb25zdCBTdHJlYW0uX2ludGVybmFsKCk7CgogIC8qKgogICAqIENyZWF0ZXMgYW4gZW1wdHkgYnJvYWRjYXN0IHN0cmVhbS4KICAgKgogICAqIFRoaXMgaXMgYSBzdHJlYW0gd2hpY2ggZG9lcyBub3RoaW5nIGV4Y2VwdCBzZW5kaW5nIGEgZG9uZSBldmVudAogICAqIHdoZW4gaXQncyBsaXN0ZW5lZCB0by4KICAgKi8KICBjb25zdCBmYWN0b3J5IFN0cmVhbS5lbXB0eSgpID0gX0VtcHR5U3RyZWFtPFQ+OwoKICAvKioKICAgKiBDcmVhdGVzIGEgc3RyZWFtIHdoaWNoIGVtaXRzIGEgc2luZ2xlIGRhdGEgZXZlbnQgYmVmb3JlIGNvbXBsZXRpbmcuCiAgICoKICAgKiBUaGlzIHN0cmVhbSBlbWl0cyBhIHNpbmdsZSBkYXRhIGV2ZW50IG9mIFt2YWx1ZV0KICAgKiBhbmQgdGhlbiBjb21wbGV0ZXMgd2l0aCBhIGRvbmUgZXZlbnQuCiAgICoKICAgKiBFeGFtcGxlOgogICAqIGBgYGRhcnQKICAgKiBGdXR1cmU8dm9pZD4gcHJpbnRUaGluZ3MoU3RyZWFtPFN0cmluZz4gZGF0YSkgYXN5bmMgewogICAqICAgYXdhaXQgZm9yICh2YXIgeCBpbiBkYXRhKSB7CiAgICogICAgIHByaW50KHgpOwogICAqICAgfQogICAqIH0KICAgKiBwcmludFRoaW5ncyhTdHJlYW08U3RyaW5nPi52YWx1ZSgib2siKSk7IC8vIHByaW50cyAib2siLgogICAqIGBgYAogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBpcyBlZmZlY3RpdmVseSBlcXVpdmFsZW50IHRvIG9uZSBjcmVhdGVkIGJ5CiAgICogYCgoKSBhc3luYyogeyB5aWVsZCB2YWx1ZTsgfSAoKSlgIG9yIGBGdXR1cmU8VD4udmFsdWUodmFsdWUpLmFzU3RyZWFtKClgLgogICAqLwogIEBTaW5jZSgiMi41IikKICBmYWN0b3J5IFN0cmVhbS52YWx1ZShUIHZhbHVlKSA9PgogICAgICAoX0FzeW5jU3RyZWFtQ29udHJvbGxlcjxUPihudWxsLCBudWxsLCBudWxsLCBudWxsKQogICAgICAgICAgICAuLl9hZGQodmFsdWUpCiAgICAgICAgICAgIC4uX2Nsb3NlVW5jaGVja2VkKCkpCiAgICAgICAgICAuc3RyZWFtOwoKICAvKioKICAgKiBDcmVhdGVzIGEgc3RyZWFtIHdoaWNoIGVtaXRzIGEgc2luZ2xlIGVycm9yIGV2ZW50IGJlZm9yZSBjb21wbGV0aW5nLgogICAqCiAgICogVGhpcyBzdHJlYW0gZW1pdHMgYSBzaW5nbGUgZXJyb3IgZXZlbnQgb2YgW2Vycm9yXSBhbmQgW3N0YWNrVHJhY2VdCiAgICogYW5kIHRoZW4gY29tcGxldGVzIHdpdGggYSBkb25lIGV2ZW50LgogICAqCiAgICogRXhhbXBsZToKICAgKiBgYGBkYXJ0CiAgICogRnV0dXJlPHZvaWQ+IHRyeVRoaW5ncyhTdHJlYW08aW50PiBkYXRhKSBhc3luYyB7CiAgICogICB0cnkgewogICAqICAgICBhd2FpdCBmb3IgKHZhciB4IGluIGRhdGEpIHsKICAgKiAgICAgICBwcmludCgiRGF0YTogJHgiKTsKICAgKiAgICAgfQogICAqICAgfSBjYXRjaCAoZSkgewogICAqICAgICBwcmludChlKTsKICAgKiAgIH0KICAgKiB9CiAgICogdHJ5VGhpbmdzKFN0cmVhbTxpbnQ+LmVycm9yKCJFcnJvciIpKTsgLy8gcHJpbnRzICJFcnJvciIuCiAgICogYGBgCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBpcyBlZmZlY3RpdmVseSBlcXVpdmFsZW50IHRvIG9uZSBjcmVhdGVkIGJ5CiAgICogYEZ1dHVyZTxUPi5lcnJvcihlcnJvciwgc3RhY2tUcmFjZSkuYXNTdHJlYW0oKWAsIGJ5IG9yCiAgICogYCgoKSBhc3luYyogeyB0aHJvdyBlcnJvcjsgfSAoKSlgLCBleGNlcHQgdGhhdCB5b3UgY2FuIGNvbnRyb2wgdGhlCiAgICogc3RhY2sgdHJhY2UgYXMgd2VsbC4KICAgKi8KICBAU2luY2UoIjIuNSIpCiAgZmFjdG9yeSBTdHJlYW0uZXJyb3IoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgPT4KICAgICAgKF9Bc3luY1N0cmVhbUNvbnRyb2xsZXI8VD4obnVsbCwgbnVsbCwgbnVsbCwgbnVsbCkKICAgICAgICAgICAgLi5fYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpCiAgICAgICAgICAgIC4uX2Nsb3NlVW5jaGVja2VkKCkpCiAgICAgICAgICAuc3RyZWFtOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IHNpbmdsZS1zdWJzY3JpcHRpb24gc3RyZWFtIGZyb20gdGhlIGZ1dHVyZS4KICAgKgogICAqIFdoZW4gdGhlIGZ1dHVyZSBjb21wbGV0ZXMsIHRoZSBzdHJlYW0gd2lsbCBmaXJlIG9uZSBldmVudCwgZWl0aGVyCiAgICogZGF0YSBvciBlcnJvciwgYW5kIHRoZW4gY2xvc2Ugd2l0aCBhIGRvbmUtZXZlbnQuCiAgICovCiAgZmFjdG9yeSBTdHJlYW0uZnJvbUZ1dHVyZShGdXR1cmU8VD4gZnV0dXJlKSB7CiAgICAvLyBVc2UgdGhlIGNvbnRyb2xsZXIncyBidWZmZXJpbmcgdG8gZmlsbCBpbiB0aGUgdmFsdWUgZXZlbiBiZWZvcmUKICAgIC8vIHRoZSBzdHJlYW0gaGFzIGEgbGlzdGVuZXIuIEZvciBhIHNpbmdsZSB2YWx1ZSwgaXQncyBub3Qgd29ydGggaXQKICAgIC8vIHRvIHdhaXQgZm9yIGEgbGlzdGVuZXIgYmVmb3JlIGRvaW5nIHRoZSBgdGhlbmAgb24gdGhlIGZ1dHVyZS4KICAgIF9TdHJlYW1Db250cm9sbGVyPFQ+IGNvbnRyb2xsZXIgPQogICAgICAgIG5ldyBfU3luY1N0cmVhbUNvbnRyb2xsZXI8VD4obnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7CiAgICBmdXR1cmUudGhlbigodmFsdWUpIHsKICAgICAgY29udHJvbGxlci5fYWRkKHZhbHVlKTsKICAgICAgY29udHJvbGxlci5fY2xvc2VVbmNoZWNrZWQoKTsKICAgIH0sIG9uRXJyb3I6IChlcnJvciwgc3RhY2tUcmFjZSkgewogICAgICBjb250cm9sbGVyLl9hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIGNvbnRyb2xsZXIuX2Nsb3NlVW5jaGVja2VkKCk7CiAgICB9KTsKICAgIHJldHVybiBjb250cm9sbGVyLnN0cmVhbTsKICB9CgogIC8qKgogICAqIENyZWF0ZSBhIHN0cmVhbSBmcm9tIGEgZ3JvdXAgb2YgZnV0dXJlcy4KICAgKgogICAqIFRoZSBzdHJlYW0gcmVwb3J0cyB0aGUgcmVzdWx0cyBvZiB0aGUgZnV0dXJlcyBvbiB0aGUgc3RyZWFtIGluIHRoZSBvcmRlcgogICAqIGluIHdoaWNoIHRoZSBmdXR1cmVzIGNvbXBsZXRlLgogICAqIEVhY2ggZnV0dXJlIHByb3ZpZGVzIGVpdGhlciBhIGRhdGEgZXZlbnQgb3IgYW4gZXJyb3IgZXZlbnQsCiAgICogZGVwZW5kaW5nIG9uIGhvdyB0aGUgZnV0dXJlIGNvbXBsZXRlcy4KICAgKgogICAqIElmIHNvbWUgZnV0dXJlcyBoYXZlIGFscmVhZHkgY29tcGxldGVkIHdoZW4gYFN0cmVhbS5mcm9tRnV0dXJlc2AgaXMgY2FsbGVkLAogICAqIHRoZWlyIHJlc3VsdHMgd2lsbCBiZSBlbWl0dGVkIGluIHNvbWUgdW5zcGVjaWZpZWQgb3JkZXIuCiAgICoKICAgKiBXaGVuIGFsbCBmdXR1cmVzIGhhdmUgY29tcGxldGVkLCB0aGUgc3RyZWFtIGlzIGNsb3NlZC4KICAgKgogICAqIElmIFtmdXR1cmVzXSBpcyBlbXB0eSwgdGhlIHN0cmVhbSBjbG9zZXMgYXMgc29vbiBhcyBwb3NzaWJsZS4KICAgKi8KICBmYWN0b3J5IFN0cmVhbS5mcm9tRnV0dXJlcyhJdGVyYWJsZTxGdXR1cmU8VD4+IGZ1dHVyZXMpIHsKICAgIF9TdHJlYW1Db250cm9sbGVyPFQ+IGNvbnRyb2xsZXIgPQogICAgICAgIG5ldyBfU3luY1N0cmVhbUNvbnRyb2xsZXI8VD4obnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7CiAgICBpbnQgY291bnQgPSAwOwogICAgLy8gRGVjbGFyZSB0aGVzZSBhcyB2YXJpYWJsZXMgaG9sZGluZyBjbG9zdXJlcyBpbnN0ZWFkIG9mIGFzCiAgICAvLyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCiAgICAvLyBUaGlzIGF2b2lkcyBjcmVhdGluZyBhIG5ldyBjbG9zdXJlIGZyb20gdGhlIGZ1bmN0aW9ucyBmb3IgZWFjaCBmdXR1cmUuCiAgICB2YXIgb25WYWx1ZSA9IChUIHZhbHVlKSB7CiAgICAgIGlmICghY29udHJvbGxlci5pc0Nsb3NlZCkgewogICAgICAgIGNvbnRyb2xsZXIuX2FkZCh2YWx1ZSk7CiAgICAgICAgaWYgKC0tY291bnQgPT0gMCkgY29udHJvbGxlci5fY2xvc2VVbmNoZWNrZWQoKTsKICAgICAgfQogICAgfTsKICAgIHZhciBvbkVycm9yID0gKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrKSB7CiAgICAgIGlmICghY29udHJvbGxlci5pc0Nsb3NlZCkgewogICAgICAgIGNvbnRyb2xsZXIuX2FkZEVycm9yKGVycm9yLCBzdGFjayk7CiAgICAgICAgaWYgKC0tY291bnQgPT0gMCkgY29udHJvbGxlci5fY2xvc2VVbmNoZWNrZWQoKTsKICAgICAgfQogICAgfTsKICAgIC8vIFRoZSBmdXR1cmVzIGFyZSBhbHJlYWR5IHJ1bm5pbmcsIHNvIHN0YXJ0IGxpc3RlbmluZyB0byB0aGVtIGltbWVkaWF0ZWx5CiAgICAvLyAoaW5zdGVhZCBvZiB3YWl0aW5nIGZvciB0aGUgc3RyZWFtIHRvIGJlIGxpc3RlbmVkIG9uKS4KICAgIC8vIElmIHdlIHdhaXQsIHdlIG1pZ2h0IG5vdCBjYXRjaCBlcnJvcnMgaW4gdGhlIGZ1dHVyZXMgaW4gdGltZS4KICAgIGZvciAodmFyIGZ1dHVyZSBpbiBmdXR1cmVzKSB7CiAgICAgIGNvdW50Kys7CiAgICAgIGZ1dHVyZS50aGVuKG9uVmFsdWUsIG9uRXJyb3I6IG9uRXJyb3IpOwogICAgfQogICAgLy8gVXNlIHNjaGVkdWxlIG1pY3JvdGFzayBzaW5jZSBjb250cm9sbGVyIGlzIHN5bmMuCiAgICBpZiAoY291bnQgPT0gMCkgc2NoZWR1bGVNaWNyb3Rhc2soY29udHJvbGxlci5jbG9zZSk7CiAgICByZXR1cm4gY29udHJvbGxlci5zdHJlYW07CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgc2luZ2xlLXN1YnNjcmlwdGlvbiBzdHJlYW0gdGhhdCBnZXRzIGl0cyBkYXRhIGZyb20gW2VsZW1lbnRzXS4KICAgKgogICAqIFRoZSBpdGVyYWJsZSBpcyBpdGVyYXRlZCB3aGVuIHRoZSBzdHJlYW0gcmVjZWl2ZXMgYSBsaXN0ZW5lciwgYW5kIHN0b3BzCiAgICogaXRlcmF0aW5nIGlmIHRoZSBsaXN0ZW5lciBjYW5jZWxzIHRoZSBzdWJzY3JpcHRpb24sIG9yIGlmIHRoZQogICAqIFtJdGVyYXRvci5tb3ZlTmV4dF0gbWV0aG9kIHJldHVybnMgYGZhbHNlYCBvciB0aHJvd3MuCiAgICogSXRlcmF0aW9uIGlzIHN1c3BlbmRlZCB3aGlsZSB0aGUgc3RyZWFtIHN1YnNjcmlwdGlvbiBpcyBwYXVzZWQuCiAgICoKICAgKiBJZiBjYWxsaW5nIFtJdGVyYXRvci5tb3ZlTmV4dF0gb24gYGVsZW1lbnRzLml0ZXJhdG9yYCB0aHJvd3MsCiAgICogdGhlIHN0cmVhbSBlbWl0cyB0aGF0IGVycm9yIGFuZCB0aGVuIGl0IGNsb3Nlcy4KICAgKiBJZiByZWFkaW5nIFtJdGVyYXRvci5jdXJyZW50XSBvbiBgZWxlbWVudHMuaXRlcmF0b3JgIHRocm93cywKICAgKiB0aGUgc3RyZWFtIGVtaXRzIHRoYXQgZXJyb3IsIGJ1dCBrZWVwcyBpdGVyYXRpbmcuCiAgICovCiAgZmFjdG9yeSBTdHJlYW0uZnJvbUl0ZXJhYmxlKEl0ZXJhYmxlPFQ+IGVsZW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IF9HZW5lcmF0ZWRTdHJlYW1JbXBsPFQ+KAogICAgICAgICgpID0+IG5ldyBfSXRlcmFibGVQZW5kaW5nRXZlbnRzPFQ+KGVsZW1lbnRzKSk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgc3RyZWFtIHRoYXQgcmVwZWF0ZWRseSBlbWl0cyBldmVudHMgYXQgW3BlcmlvZF0gaW50ZXJ2YWxzLgogICAqCiAgICogVGhlIGV2ZW50IHZhbHVlcyBhcmUgY29tcHV0ZWQgYnkgaW52b2tpbmcgW2NvbXB1dGF0aW9uXS4gVGhlIGFyZ3VtZW50IHRvCiAgICogdGhpcyBjYWxsYmFjayBpcyBhbiBpbnRlZ2VyIHRoYXQgc3RhcnRzIHdpdGggMCBhbmQgaXMgaW5jcmVtZW50ZWQgZm9yCiAgICogZXZlcnkgZXZlbnQuCiAgICoKICAgKiBJZiBbY29tcHV0YXRpb25dIGlzIG9taXR0ZWQgdGhlIGV2ZW50IHZhbHVlcyB3aWxsIGFsbCBiZSBgbnVsbGAuCiAgICovCiAgZmFjdG9yeSBTdHJlYW0ucGVyaW9kaWMoRHVyYXRpb24gcGVyaW9kLAogICAgICBbVCBjb21wdXRhdGlvbihpbnQgY29tcHV0YXRpb25Db3VudCldKSB7CiAgICBUaW1lciB0aW1lcjsKICAgIGludCBjb21wdXRhdGlvbkNvdW50ID0gMDsKICAgIFN0cmVhbUNvbnRyb2xsZXI8VD4gY29udHJvbGxlcjsKICAgIC8vIENvdW50cyB0aGUgdGltZSB0aGF0IHRoZSBTdHJlYW0gd2FzIHJ1bm5pbmcgKGFuZCBub3QgcGF1c2VkKS4KICAgIFN0b3B3YXRjaCB3YXRjaCA9IG5ldyBTdG9wd2F0Y2goKTsKCiAgICB2b2lkIHNlbmRFdmVudCgpIHsKICAgICAgd2F0Y2gucmVzZXQoKTsKICAgICAgVCBkYXRhOwogICAgICBpZiAoY29tcHV0YXRpb24gIT0gbnVsbCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBkYXRhID0gY29tcHV0YXRpb24oY29tcHV0YXRpb25Db3VudCsrKTsKICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICBjb250cm9sbGVyLmFkZEVycm9yKGUsIHMpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgICBjb250cm9sbGVyLmFkZChkYXRhKTsKICAgIH0KCiAgICB2b2lkIHN0YXJ0UGVyaW9kaWNUaW1lcigpIHsKICAgICAgYXNzZXJ0KHRpbWVyID09IG51bGwpOwogICAgICB0aW1lciA9IG5ldyBUaW1lci5wZXJpb2RpYyhwZXJpb2QsIChUaW1lciB0aW1lcikgewogICAgICAgIHNlbmRFdmVudCgpOwogICAgICB9KTsKICAgIH0KCiAgICBjb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXI8VD4oCiAgICAgICAgc3luYzogdHJ1ZSwKICAgICAgICBvbkxpc3RlbjogKCkgewogICAgICAgICAgd2F0Y2guc3RhcnQoKTsKICAgICAgICAgIHN0YXJ0UGVyaW9kaWNUaW1lcigpOwogICAgICAgIH0sCiAgICAgICAgb25QYXVzZTogKCkgewogICAgICAgICAgdGltZXIuY2FuY2VsKCk7CiAgICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgICB3YXRjaC5zdG9wKCk7CiAgICAgICAgfSwKICAgICAgICBvblJlc3VtZTogKCkgewogICAgICAgICAgYXNzZXJ0KHRpbWVyID09IG51bGwpOwogICAgICAgICAgRHVyYXRpb24gZWxhcHNlZCA9IHdhdGNoLmVsYXBzZWQ7CiAgICAgICAgICB3YXRjaC5zdGFydCgpOwogICAgICAgICAgdGltZXIgPSBuZXcgVGltZXIocGVyaW9kIC0gZWxhcHNlZCwgKCkgewogICAgICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgICAgIHN0YXJ0UGVyaW9kaWNUaW1lcigpOwogICAgICAgICAgICBzZW5kRXZlbnQoKTsKICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgb25DYW5jZWw6ICgpIHsKICAgICAgICAgIGlmICh0aW1lciAhPSBudWxsKSB0aW1lci5jYW5jZWwoKTsKICAgICAgICAgIHRpbWVyID0gbnVsbDsKICAgICAgICAgIHJldHVybiBGdXR1cmUuX251bGxGdXR1cmU7CiAgICAgICAgfSk7CiAgICByZXR1cm4gY29udHJvbGxlci5zdHJlYW07CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgc3RyZWFtIHdoZXJlIGFsbCBldmVudHMgb2YgYW4gZXhpc3Rpbmcgc3RyZWFtIGFyZSBwaXBlZCB0aHJvdWdoCiAgICogYSBzaW5rLXRyYW5zZm9ybWF0aW9uLgogICAqCiAgICogVGhlIGdpdmVuIFttYXBTaW5rXSBjbG9zdXJlIGlzIGludm9rZWQgd2hlbiB0aGUgcmV0dXJuZWQgc3RyZWFtIGlzCiAgICogbGlzdGVuZWQgdG8uIEFsbCBldmVudHMgZnJvbSB0aGUgW3NvdXJjZV0gYXJlIGFkZGVkIGludG8gdGhlIGV2ZW50IHNpbmsKICAgKiB0aGF0IGlzIHJldHVybmVkIGZyb20gdGhlIGludm9jYXRpb24uIFRoZSB0cmFuc2Zvcm1hdGlvbiBwdXRzIGFsbAogICAqIHRyYW5zZm9ybWVkIGV2ZW50cyBpbnRvIHRoZSBzaW5rIHRoZSBbbWFwU2lua10gY2xvc3VyZSByZWNlaXZlZCBkdXJpbmcKICAgKiBpdHMgaW52b2NhdGlvbi4gQ29uY2VwdHVhbGx5IHRoZSBbbWFwU2lua10gY3JlYXRlcyBhIHRyYW5zZm9ybWF0aW9uIHBpcGUKICAgKiB3aXRoIHRoZSBpbnB1dCBzaW5rIGJlaW5nIHRoZSByZXR1cm5lZCBbRXZlbnRTaW5rXSBhbmQgdGhlIG91dHB1dCBzaW5rCiAgICogYmVpbmcgdGhlIHNpbmsgaXQgcmVjZWl2ZWQuCiAgICoKICAgKiBUaGlzIGNvbnN0cnVjdG9yIGlzIGZyZXF1ZW50bHkgdXNlZCB0byBidWlsZCB0cmFuc2Zvcm1lcnMuCiAgICoKICAgKiBFeGFtcGxlIHVzZSBmb3IgYSBkdXBsaWNhdGluZyB0cmFuc2Zvcm1lcjoKICAgKgogICAqICAgICBjbGFzcyBEdXBsaWNhdGlvblNpbmsgaW1wbGVtZW50cyBFdmVudFNpbms8U3RyaW5nPiB7CiAgICogICAgICAgZmluYWwgRXZlbnRTaW5rPFN0cmluZz4gX291dHB1dFNpbms7CiAgICogICAgICAgRHVwbGljYXRpb25TaW5rKHRoaXMuX291dHB1dFNpbmspOwogICAqCiAgICogICAgICAgdm9pZCBhZGQoU3RyaW5nIGRhdGEpIHsKICAgKiAgICAgICAgIF9vdXRwdXRTaW5rLmFkZChkYXRhKTsKICAgKiAgICAgICAgIF9vdXRwdXRTaW5rLmFkZChkYXRhKTsKICAgKiAgICAgICB9CiAgICoKICAgKiAgICAgICB2b2lkIGFkZEVycm9yKGUsIFtzdF0pIHsgX291dHB1dFNpbmsuYWRkRXJyb3IoZSwgc3QpOyB9CiAgICogICAgICAgdm9pZCBjbG9zZSgpIHsgX291dHB1dFNpbmsuY2xvc2UoKTsgfQogICAqICAgICB9CiAgICoKICAgKiAgICAgY2xhc3MgRHVwbGljYXRpb25UcmFuc2Zvcm1lciBleHRlbmRzIFN0cmVhbVRyYW5zZm9ybWVyQmFzZTxTdHJpbmcsIFN0cmluZz4gewogICAqICAgICAgIC8vIFNvbWUgZ2VuZXJpYyB0eXBlcyBvbWl0dGVkIGZvciBicmV2aXR5LgogICAqICAgICAgIFN0cmVhbSBiaW5kKFN0cmVhbSBzdHJlYW0pID0+IG5ldyBTdHJlYW08U3RyaW5nPi5ldmVudFRyYW5zZm9ybWVkKAogICAqICAgICAgICAgICBzdHJlYW0sCiAgICogICAgICAgICAgIChFdmVudFNpbmsgc2luaykgPT4gbmV3IER1cGxpY2F0aW9uU2luayhzaW5rKSk7CiAgICogICAgIH0KICAgKgogICAqICAgICBzdHJpbmdTdHJlYW0udHJhbnNmb3JtKG5ldyBEdXBsaWNhdGlvblRyYW5zZm9ybWVyKCkpOwogICAqCiAgICogVGhlIHJlc3VsdGluZyBzdHJlYW0gaXMgYSBicm9hZGNhc3Qgc3RyZWFtIGlmIFtzb3VyY2VdIGlzLgogICAqLwogIGZhY3RvcnkgU3RyZWFtLmV2ZW50VHJhbnNmb3JtZWQoCiAgICAgIFN0cmVhbSBzb3VyY2UsIEV2ZW50U2luayBtYXBTaW5rKEV2ZW50U2luazxUPiBzaW5rKSkgewogICAgcmV0dXJuIG5ldyBfQm91bmRTaW5rU3RyZWFtKHNvdXJjZSwgbWFwU2luayk7CiAgfQoKICAvKioKICAgKiBBZGFwdHMgW3NvdXJjZV0gdG8gYmUgYSBgU3RyZWFtPFQ+YC4KICAgKgogICAqIFRoaXMgYWxsb3dzIFtzb3VyY2VdIHRvIGJlIHVzZWQgYXQgdGhlIG5ldyB0eXBlLCBidXQgYXQgcnVuLXRpbWUgaXQKICAgKiBtdXN0IHNhdGlzZnkgdGhlIHJlcXVpcmVtZW50cyBvZiBib3RoIHRoZSBuZXcgdHlwZSBhbmQgaXRzIG9yaWdpbmFsIHR5cGUuCiAgICoKICAgKiBEYXRhIGV2ZW50cyBjcmVhdGVkIGJ5IHRoZSBzb3VyY2Ugc3RyZWFtIG11c3QgYWxzbyBiZSBpbnN0YW5jZXMgb2YgW1RdLgogICAqLwogIHN0YXRpYyBTdHJlYW08VD4gY2FzdEZyb208UywgVD4oU3RyZWFtPFM+IHNvdXJjZSkgPT4KICAgICAgbmV3IENhc3RTdHJlYW08UywgVD4oc291cmNlKTsKCiAgLyoqCiAgICogV2hldGhlciB0aGlzIHN0cmVhbSBpcyBhIGJyb2FkY2FzdCBzdHJlYW0uCiAgICovCiAgYm9vbCBnZXQgaXNCcm9hZGNhc3QgPT4gZmFsc2U7CgogIC8qKgogICAqIFJldHVybnMgYSBtdWx0aS1zdWJzY3JpcHRpb24gc3RyZWFtIHRoYXQgcHJvZHVjZXMgdGhlIHNhbWUgZXZlbnRzIGFzIHRoaXMuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgc3RyZWFtIHdpbGwgc3Vic2NyaWJlIHRvIHRoaXMgc3RyZWFtIHdoZW4gaXRzIGZpcnN0CiAgICogc3Vic2NyaWJlciBpcyBhZGRlZCwgYW5kIHdpbGwgc3RheSBzdWJzY3JpYmVkIHVudGlsIHRoaXMgc3RyZWFtIGVuZHMsCiAgICogb3IgYSBjYWxsYmFjayBjYW5jZWxzIHRoZSBzdWJzY3JpcHRpb24uCiAgICoKICAgKiBJZiBbb25MaXN0ZW5dIGlzIHByb3ZpZGVkLCBpdCBpcyBjYWxsZWQgd2l0aCBhIHN1YnNjcmlwdGlvbi1saWtlIG9iamVjdAogICAqIHRoYXQgcmVwcmVzZW50cyB0aGUgdW5kZXJseWluZyBzdWJzY3JpcHRpb24gdG8gdGhpcyBzdHJlYW0uIEl0IGlzCiAgICogcG9zc2libGUgdG8gcGF1c2UsIHJlc3VtZSBvciBjYW5jZWwgdGhlIHN1YnNjcmlwdGlvbiBkdXJpbmcgdGhlIGNhbGwKICAgKiB0byBbb25MaXN0ZW5dLiBJdCBpcyBub3QgcG9zc2libGUgdG8gY2hhbmdlIHRoZSBldmVudCBoYW5kbGVycywgaW5jbHVkaW5nCiAgICogdXNpbmcgW1N0cmVhbVN1YnNjcmlwdGlvbi5hc0Z1dHVyZV0uCiAgICoKICAgKiBJZiBbb25DYW5jZWxdIGlzIHByb3ZpZGVkLCBpdCBpcyBjYWxsZWQgaW4gYSBzaW1pbGFyIHdheSB0byBbb25MaXN0ZW5dCiAgICogd2hlbiB0aGUgcmV0dXJuZWQgc3RyZWFtIHN0b3BzIGhhdmluZyBsaXN0ZW5lci4gSWYgaXQgbGF0ZXIgZ2V0cwogICAqIGEgbmV3IGxpc3RlbmVyLCB0aGUgW29uTGlzdGVuXSBmdW5jdGlvbiBpcyBjYWxsZWQgYWdhaW4uCiAgICoKICAgKiBVc2UgdGhlIGNhbGxiYWNrcywgZm9yIGV4YW1wbGUsIGZvciBwYXVzaW5nIHRoZSB1bmRlcmx5aW5nIHN1YnNjcmlwdGlvbgogICAqIHdoaWxlIGhhdmluZyBubyBzdWJzY3JpYmVycyB0byBwcmV2ZW50IGxvc2luZyBldmVudHMsIG9yIGNhbmNlbGluZyB0aGUKICAgKiBzdWJzY3JpcHRpb24gd2hlbiB0aGVyZSBhcmUgbm8gbGlzdGVuZXJzLgogICAqLwogIFN0cmVhbTxUPiBhc0Jyb2FkY2FzdFN0cmVhbSgKICAgICAge3ZvaWQgb25MaXN0ZW4oU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbiksCiAgICAgIHZvaWQgb25DYW5jZWwoU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbil9KSB7CiAgICByZXR1cm4gbmV3IF9Bc0Jyb2FkY2FzdFN0cmVhbTxUPih0aGlzLCBvbkxpc3Rlbiwgb25DYW5jZWwpOwogIH0KCiAgLyoqCiAgICogQWRkcyBhIHN1YnNjcmlwdGlvbiB0byB0aGlzIHN0cmVhbS4KICAgKgogICAqIFJldHVybnMgYSBbU3RyZWFtU3Vic2NyaXB0aW9uXSB3aGljaCBoYW5kbGVzIGV2ZW50cyBmcm9tIHRoaXMgc3RyZWFtIHVzaW5nCiAgICogdGhlIHByb3ZpZGVkIFtvbkRhdGFdLCBbb25FcnJvcl0gYW5kIFtvbkRvbmVdIGhhbmRsZXJzLgogICAqIFRoZSBoYW5kbGVycyBjYW4gYmUgY2hhbmdlZCBvbiB0aGUgc3Vic2NyaXB0aW9uLCBidXQgdGhleSBzdGFydCBvdXQKICAgKiBhcyB0aGUgcHJvdmlkZWQgZnVuY3Rpb25zLgogICAqCiAgICogT24gZWFjaCBkYXRhIGV2ZW50IGZyb20gdGhpcyBzdHJlYW0sIHRoZSBzdWJzY3JpYmVyJ3MgW29uRGF0YV0gaGFuZGxlcgogICAqIGlzIGNhbGxlZC4gSWYgW29uRGF0YV0gaXMgYG51bGxgLCBub3RoaW5nIGhhcHBlbnMuCiAgICoKICAgKiBPbiBlcnJvcnMgZnJvbSB0aGlzIHN0cmVhbSwgdGhlIFtvbkVycm9yXSBoYW5kbGVyIGlzIGNhbGxlZCB3aXRoIHRoZQogICAqIGVycm9yIG9iamVjdCBhbmQgcG9zc2libHkgYSBzdGFjayB0cmFjZS4KICAgKgogICAqIFRoZSBbb25FcnJvcl0gY2FsbGJhY2sgbXVzdCBiZSBvZiB0eXBlIGB2b2lkIG9uRXJyb3IoZXJyb3IpYCBvcgogICAqIGB2b2lkIG9uRXJyb3IoZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSlgLiBJZiBbb25FcnJvcl0gYWNjZXB0cwogICAqIHR3byBhcmd1bWVudHMgaXQgaXMgY2FsbGVkIHdpdGggdGhlIGVycm9yIG9iamVjdCBhbmQgdGhlIHN0YWNrIHRyYWNlCiAgICogKHdoaWNoIGNvdWxkIGJlIGBudWxsYCBpZiB0aGlzIHN0cmVhbSBpdHNlbGYgcmVjZWl2ZWQgYW4gZXJyb3Igd2l0aG91dAogICAqIHN0YWNrIHRyYWNlKS4KICAgKiBPdGhlcndpc2UgaXQgaXMgY2FsbGVkIHdpdGgganVzdCB0aGUgZXJyb3Igb2JqZWN0LgogICAqIElmIFtvbkVycm9yXSBpcyBvbWl0dGVkLCBhbnkgZXJyb3JzIG9uIHRoaXMgc3RyZWFtIGFyZSBjb25zaWRlcmVkIHVuaGFuZGxlZCwKICAgKiBhbmQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGN1cnJlbnQgW1pvbmVdJ3MgZXJyb3IgaGFuZGxlci4KICAgKiBCeSBkZWZhdWx0IHVuaGFuZGxlZCBhc3luYyBlcnJvcnMgYXJlIHRyZWF0ZWQKICAgKiBhcyBpZiB0aGV5IHdlcmUgdW5jYXVnaHQgdG9wLWxldmVsIGVycm9ycy4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGNsb3NlcyBhbmQgc2VuZHMgYSBkb25lIGV2ZW50LCB0aGUgW29uRG9uZV0gaGFuZGxlciBpcwogICAqIGNhbGxlZC4gSWYgW29uRG9uZV0gaXMgYG51bGxgLCBub3RoaW5nIGhhcHBlbnMuCiAgICoKICAgKiBJZiBbY2FuY2VsT25FcnJvcl0gaXMgdHJ1ZSwgdGhlIHN1YnNjcmlwdGlvbiBpcyBhdXRvbWF0aWNhbGx5IGNhbmNlbGVkCiAgICogd2hlbiB0aGUgZmlyc3QgZXJyb3IgZXZlbnQgaXMgZGVsaXZlcmVkLiBUaGUgZGVmYXVsdCBpcyBgZmFsc2VgLgogICAqCiAgICogV2hpbGUgYSBzdWJzY3JpcHRpb24gaXMgcGF1c2VkLCBvciB3aGVuIGl0IGhhcyBiZWVuIGNhbmNlbGVkLAogICAqIHRoZSBzdWJzY3JpcHRpb24gZG9lc24ndCByZWNlaXZlIGV2ZW50cyBhbmQgbm9uZSBvZiB0aGUKICAgKiBldmVudCBoYW5kbGVyIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLgogICAqLwogIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBsaXN0ZW4odm9pZCBvbkRhdGEoVCBldmVudCksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBzdHJlYW0gZnJvbSB0aGlzIHN0cmVhbSB0aGF0IGRpc2NhcmRzIHNvbWUgZWxlbWVudHMuCiAgICoKICAgKiBUaGUgbmV3IHN0cmVhbSBzZW5kcyB0aGUgc2FtZSBlcnJvciBhbmQgZG9uZSBldmVudHMgYXMgdGhpcyBzdHJlYW0sCiAgICogYnV0IGl0IG9ubHkgc2VuZHMgdGhlIGRhdGEgZXZlbnRzIHRoYXQgc2F0aXNmeSB0aGUgW3Rlc3RdLgogICAqCiAgICogSWYgdGhlIFt0ZXN0XSBmdW5jdGlvbiB0aHJvd3MsIHRoZSBkYXRhIGV2ZW50IGlzIGRyb3BwZWQgYW5kIHRoZQogICAqIGVycm9yIGlzIGVtaXR0ZWQgb24gdGhlIHJldHVybmVkIHN0cmVhbSBpbnN0ZWFkLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBpcyBhIGJyb2FkY2FzdCBzdHJlYW0gaWYgdGhpcyBzdHJlYW0gaXMuCiAgICogSWYgYSBicm9hZGNhc3Qgc3RyZWFtIGlzIGxpc3RlbmVkIHRvIG1vcmUgdGhhbiBvbmNlLCBlYWNoIHN1YnNjcmlwdGlvbgogICAqIHdpbGwgaW5kaXZpZHVhbGx5IHBlcmZvcm0gdGhlIGB0ZXN0YC4KICAgKi8KICBTdHJlYW08VD4gd2hlcmUoYm9vbCB0ZXN0KFQgZXZlbnQpKSB7CiAgICByZXR1cm4gbmV3IF9XaGVyZVN0cmVhbTxUPih0aGlzLCB0ZXN0KTsKICB9CgogIC8qKgogICAqIFRyYW5zZm9ybXMgZWFjaCBlbGVtZW50IG9mIHRoaXMgc3RyZWFtIGludG8gYSBuZXcgc3RyZWFtIGV2ZW50LgogICAqCiAgICogQ3JlYXRlcyBhIG5ldyBzdHJlYW0gdGhhdCBjb252ZXJ0cyBlYWNoIGVsZW1lbnQgb2YgdGhpcyBzdHJlYW0KICAgKiB0byBhIG5ldyB2YWx1ZSB1c2luZyB0aGUgW2NvbnZlcnRdIGZ1bmN0aW9uLCBhbmQgZW1pdHMgdGhlIHJlc3VsdC4KICAgKgogICAqIEZvciBlYWNoIGRhdGEgZXZlbnQsIGBvYCwgaW4gdGhpcyBzdHJlYW0sIHRoZSByZXR1cm5lZCBzdHJlYW0KICAgKiBwcm92aWRlcyBhIGRhdGEgZXZlbnQgd2l0aCB0aGUgdmFsdWUgYGNvbnZlcnQobylgLgogICAqIElmIFtjb252ZXJ0XSB0aHJvd3MsIHRoZSByZXR1cm5lZCBzdHJlYW0gcmVwb3J0cyBpdCBhcyBhbiBlcnJvcgogICAqIGV2ZW50IGluc3RlYWQuCiAgICoKICAgKiBFcnJvciBhbmQgZG9uZSBldmVudHMgYXJlIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZCB0byB0aGUgcmV0dXJuZWQgc3RyZWFtLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBpcyBhIGJyb2FkY2FzdCBzdHJlYW0gaWYgdGhpcyBzdHJlYW0gaXMuCiAgICogVGhlIFtjb252ZXJ0XSBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBwZXIgZGF0YSBldmVudCBwZXIgbGlzdGVuZXIuCiAgICogSWYgYSBicm9hZGNhc3Qgc3RyZWFtIGlzIGxpc3RlbmVkIHRvIG1vcmUgdGhhbiBvbmNlLCBlYWNoIHN1YnNjcmlwdGlvbgogICAqIHdpbGwgaW5kaXZpZHVhbGx5IGNhbGwgW2NvbnZlcnRdIG9uIGVhY2ggZGF0YSBldmVudC4KICAgKgogICAqIFVubGlrZSBbdHJhbnNmb3JtXSwgdGhpcyBtZXRob2QgZG9lcyBub3QgdHJlYXQgdGhlIHN0cmVhbSBhcwogICAqIGNodW5rcyBvZiBhIHNpbmdsZSB2YWx1ZS4gSW5zdGVhZCBlYWNoIGV2ZW50IGlzIGNvbnZlcnRlZCBpbmRlcGVuZGVudGx5CiAgICogb2YgdGhlIHByZXZpb3VzIGFuZCBmb2xsb3dpbmcgZXZlbnRzLCB3aGljaCBtYXkgbm90IGFsd2F5cyBiZSBjb3JyZWN0LgogICAqIEZvciBleGFtcGxlLCBVVEYtOCBlbmNvZGluZywgb3IgZGVjb2RpbmcsIHdpbGwgZ2l2ZSB3cm9uZyByZXN1bHRzCiAgICogaWYgYSBzdXJyb2dhdGUgcGFpciwgb3IgYSBtdWx0aWJ5dGUgVVRGLTggZW5jb2RpbmcsIGlzIHNwbGl0IGludG8KICAgKiBzZXBhcmF0ZSBldmVudHMsIGFuZCB0aG9zZSBldmVudHMgYXJlIGF0dGVtcHRlZCBlbmNvZGVkIG9yIGRlY29kZWQKICAgKiBpbmRlcGVuZGVudGx5LgogICAqLwogIFN0cmVhbTxTPiBtYXA8Uz4oUyBjb252ZXJ0KFQgZXZlbnQpKSB7CiAgICByZXR1cm4gbmV3IF9NYXBTdHJlYW08VCwgUz4odGhpcywgY29udmVydCk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IHN0cmVhbSB3aXRoIGVhY2ggZGF0YSBldmVudCBvZiB0aGlzIHN0cmVhbSBhc3luY2hyb25vdXNseQogICAqIG1hcHBlZCB0byBhIG5ldyBldmVudC4KICAgKgogICAqIFRoaXMgYWN0cyBsaWtlIFttYXBdLCBleGNlcHQgdGhhdCBbY29udmVydF0gbWF5IHJldHVybiBhIFtGdXR1cmVdLAogICAqIGFuZCBpbiB0aGF0IGNhc2UsIHRoaXMgc3RyZWFtIHdhaXRzIGZvciB0aGF0IGZ1dHVyZSB0byBjb21wbGV0ZSBiZWZvcmUKICAgKiBjb250aW51aW5nIHdpdGggaXRzIHJlc3VsdC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaXMgYSBicm9hZGNhc3Qgc3RyZWFtIGlmIHRoaXMgc3RyZWFtIGlzLgogICAqLwogIFN0cmVhbTxFPiBhc3luY01hcDxFPihGdXR1cmVPcjxFPiBjb252ZXJ0KFQgZXZlbnQpKSB7CiAgICBfU3RyZWFtQ29udHJvbGxlckJhc2U8RT4gY29udHJvbGxlcjsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb247CgogICAgdm9pZCBvbkxpc3RlbigpIHsKICAgICAgZmluYWwgYWRkID0gY29udHJvbGxlci5hZGQ7CiAgICAgIGFzc2VydChjb250cm9sbGVyIGlzIF9TdHJlYW1Db250cm9sbGVyPEU+IHx8CiAgICAgICAgICBjb250cm9sbGVyIGlzIF9Ccm9hZGNhc3RTdHJlYW1Db250cm9sbGVyKTsKICAgICAgZmluYWwgYWRkRXJyb3IgPSBjb250cm9sbGVyLl9hZGRFcnJvcjsKICAgICAgc3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW4oKFQgZXZlbnQpIHsKICAgICAgICBGdXR1cmVPcjxFPiBuZXdWYWx1ZTsKICAgICAgICB0cnkgewogICAgICAgICAgbmV3VmFsdWUgPSBjb252ZXJ0KGV2ZW50KTsKICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICBjb250cm9sbGVyLmFkZEVycm9yKGUsIHMpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAobmV3VmFsdWUgaXMgRnV0dXJlPEU+KSB7CiAgICAgICAgICBzdWJzY3JpcHRpb24ucGF1c2UoKTsKICAgICAgICAgIG5ld1ZhbHVlCiAgICAgICAgICAgICAgLnRoZW4oYWRkLCBvbkVycm9yOiBhZGRFcnJvcikKICAgICAgICAgICAgICAud2hlbkNvbXBsZXRlKHN1YnNjcmlwdGlvbi5yZXN1bWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb250cm9sbGVyLmFkZChuZXdWYWx1ZSk7CiAgICAgICAgfQogICAgICB9LCBvbkVycm9yOiBhZGRFcnJvciwgb25Eb25lOiBjb250cm9sbGVyLmNsb3NlKTsKICAgIH0KCiAgICBpZiAodGhpcy5pc0Jyb2FkY2FzdCkgewogICAgICBjb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXI8RT4uYnJvYWRjYXN0KAogICAgICAgICAgb25MaXN0ZW46IG9uTGlzdGVuLAogICAgICAgICAgb25DYW5jZWw6ICgpIHsKICAgICAgICAgICAgc3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogICAgICAgICAgfSwKICAgICAgICAgIHN5bmM6IHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPEU+KAogICAgICAgICAgb25MaXN0ZW46IG9uTGlzdGVuLAogICAgICAgICAgb25QYXVzZTogKCkgewogICAgICAgICAgICBzdWJzY3JpcHRpb24ucGF1c2UoKTsKICAgICAgICAgIH0sCiAgICAgICAgICBvblJlc3VtZTogKCkgewogICAgICAgICAgICBzdWJzY3JpcHRpb24ucmVzdW1lKCk7CiAgICAgICAgICB9LAogICAgICAgICAgb25DYW5jZWw6ICgpID0+IHN1YnNjcmlwdGlvbi5jYW5jZWwoKSwKICAgICAgICAgIHN5bmM6IHRydWUpOwogICAgfQogICAgcmV0dXJuIGNvbnRyb2xsZXIuc3RyZWFtOwogIH0KCiAgLyoqCiAgICogVHJhbnNmb3JtcyBlYWNoIGVsZW1lbnQgaW50byBhIHNlcXVlbmNlIG9mIGFzeW5jaHJvbm91cyBldmVudHMuCiAgICoKICAgKiBSZXR1cm5zIGEgbmV3IHN0cmVhbSBhbmQgZm9yIGVhY2ggZXZlbnQgb2YgdGhpcyBzdHJlYW0sIGRvIHRoZSBmb2xsb3dpbmc6CiAgICoKICAgKiAqIElmIHRoZSBldmVudCBpcyBhbiBlcnJvciBldmVudCBvciBhIGRvbmUgZXZlbnQsIGl0IGlzIGVtaXR0ZWQgZGlyZWN0bHkKICAgKiBieSB0aGUgcmV0dXJuZWQgc3RyZWFtLgogICAqICogT3RoZXJ3aXNlIGl0IGlzIGFuIGVsZW1lbnQuIFRoZW4gdGhlIFtjb252ZXJ0XSBmdW5jdGlvbiBpcyBjYWxsZWQKICAgKiB3aXRoIHRoZSBlbGVtZW50IGFzIGFyZ3VtZW50IHRvIHByb2R1Y2UgYSBjb252ZXJ0LXN0cmVhbSBmb3IgdGhlIGVsZW1lbnQuCiAgICogKiBJZiB0aGF0IGNhbGwgdGhyb3dzLCB0aGUgZXJyb3IgaXMgZW1pdHRlZCBvbiB0aGUgcmV0dXJuZWQgc3RyZWFtLgogICAqICogSWYgdGhlIGNhbGwgcmV0dXJucyBgbnVsbGAsIG5vIGZ1cnRoZXIgYWN0aW9uIGlzIHRha2VuIGZvciB0aGUgZWxlbWVudHMuCiAgICogKiBPdGhlcndpc2UsIHRoaXMgc3RyZWFtIGlzIHBhdXNlZCBhbmQgY29udmVydC1zdHJlYW0gaXMgbGlzdGVuZWQgdG8uCiAgICogRXZlcnkgZGF0YSBhbmQgZXJyb3IgZXZlbnQgb2YgdGhlIGNvbnZlcnQtc3RyZWFtIGlzIGVtaXR0ZWQgb24gdGhlIHJldHVybmVkCiAgICogc3RyZWFtIGluIHRoZSBvcmRlciBpdCBpcyBwcm9kdWNlZC4KICAgKiBXaGVuIHRoZSBjb252ZXJ0LXN0cmVhbSBlbmRzLCB0aGlzIHN0cmVhbSBpcyByZXN1bWVkLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBpcyBhIGJyb2FkY2FzdCBzdHJlYW0gaWYgdGhpcyBzdHJlYW0gaXMuCiAgICovCiAgU3RyZWFtPEU+IGFzeW5jRXhwYW5kPEU+KFN0cmVhbTxFPiBjb252ZXJ0KFQgZXZlbnQpKSB7CiAgICBfU3RyZWFtQ29udHJvbGxlckJhc2U8RT4gY29udHJvbGxlcjsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb247CiAgICB2b2lkIG9uTGlzdGVuKCkgewogICAgICBhc3NlcnQoY29udHJvbGxlciBpcyBfU3RyZWFtQ29udHJvbGxlciB8fAogICAgICAgICAgY29udHJvbGxlciBpcyBfQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcik7CiAgICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMubGlzdGVuKChUIGV2ZW50KSB7CiAgICAgICAgU3RyZWFtPEU+IG5ld1N0cmVhbTsKICAgICAgICB0cnkgewogICAgICAgICAgbmV3U3RyZWFtID0gY29udmVydChldmVudCk7CiAgICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgICAgY29udHJvbGxlci5hZGRFcnJvcihlLCBzKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKG5ld1N0cmVhbSAhPSBudWxsKSB7CiAgICAgICAgICBzdWJzY3JpcHRpb24ucGF1c2UoKTsKICAgICAgICAgIGNvbnRyb2xsZXIuYWRkU3RyZWFtKG5ld1N0cmVhbSkud2hlbkNvbXBsZXRlKHN1YnNjcmlwdGlvbi5yZXN1bWUpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgICAgIG9uRXJyb3I6IGNvbnRyb2xsZXIuX2FkZEVycm9yLCAvLyBBdm9pZCBab25lIGVycm9yIHJlcGxhY2VtZW50LgogICAgICAgICAgb25Eb25lOiBjb250cm9sbGVyLmNsb3NlKTsKICAgIH0KCiAgICBpZiAodGhpcy5pc0Jyb2FkY2FzdCkgewogICAgICBjb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXI8RT4uYnJvYWRjYXN0KAogICAgICAgICAgb25MaXN0ZW46IG9uTGlzdGVuLAogICAgICAgICAgb25DYW5jZWw6ICgpIHsKICAgICAgICAgICAgc3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogICAgICAgICAgfSwKICAgICAgICAgIHN5bmM6IHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPEU+KAogICAgICAgICAgb25MaXN0ZW46IG9uTGlzdGVuLAogICAgICAgICAgb25QYXVzZTogKCkgewogICAgICAgICAgICBzdWJzY3JpcHRpb24ucGF1c2UoKTsKICAgICAgICAgIH0sCiAgICAgICAgICBvblJlc3VtZTogKCkgewogICAgICAgICAgICBzdWJzY3JpcHRpb24ucmVzdW1lKCk7CiAgICAgICAgICB9LAogICAgICAgICAgb25DYW5jZWw6ICgpID0+IHN1YnNjcmlwdGlvbi5jYW5jZWwoKSwKICAgICAgICAgIHN5bmM6IHRydWUpOwogICAgfQogICAgcmV0dXJuIGNvbnRyb2xsZXIuc3RyZWFtOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIHdyYXBwZXIgU3RyZWFtIHRoYXQgaW50ZXJjZXB0cyBzb21lIGVycm9ycyBmcm9tIHRoaXMgc3RyZWFtLgogICAqCiAgICogSWYgdGhpcyBzdHJlYW0gc2VuZHMgYW4gZXJyb3IgdGhhdCBtYXRjaGVzIFt0ZXN0XSwgdGhlbiBpdCBpcyBpbnRlcmNlcHRlZAogICAqIGJ5IHRoZSBbb25FcnJvcl0gZnVuY3Rpb24uCiAgICoKICAgKiBUaGUgW29uRXJyb3JdIGNhbGxiYWNrIG11c3QgYmUgb2YgdHlwZSBgdm9pZCBvbkVycm9yKGVycm9yKWAgb3IKICAgKiBgdm9pZCBvbkVycm9yKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpYC4KICAgKiBUaGUgZnVuY3Rpb24gdHlwZSBkZXRlcm1pbmVzIHdoZXRoZXIgW29uRXJyb3JdIGlzIGludm9rZWQgd2l0aCBhIHN0YWNrCiAgICogdHJhY2UgYXJndW1lbnQuCiAgICogVGhlIHN0YWNrIHRyYWNlIGFyZ3VtZW50IG1heSBiZSBgbnVsbGAgaWYgdGhpcyBzdHJlYW0gcmVjZWl2ZWQgYW4gZXJyb3IKICAgKiB3aXRob3V0IGEgc3RhY2sgdHJhY2UuCiAgICoKICAgKiBBbiBhc3luY2hyb25vdXMgZXJyb3IgYGVycm9yYCBpcyBtYXRjaGVkIGJ5IGEgdGVzdCBmdW5jdGlvbiBpZgogICAqYHRlc3QoZXJyb3IpYCByZXR1cm5zIHRydWUuIElmIFt0ZXN0XSBpcyBvbWl0dGVkLCBldmVyeSBlcnJvciBpcyBjb25zaWRlcmVkCiAgICogbWF0Y2hpbmcuCiAgICoKICAgKiBJZiB0aGUgZXJyb3IgaXMgaW50ZXJjZXB0ZWQsIHRoZSBbb25FcnJvcl0gZnVuY3Rpb24gY2FuIGRlY2lkZSB3aGF0IHRvIGRvCiAgICogd2l0aCBpdC4gSXQgY2FuIHRocm93IGlmIGl0IHdhbnRzIHRvIHJhaXNlIGEgbmV3IChvciB0aGUgc2FtZSkgZXJyb3IsCiAgICogb3Igc2ltcGx5IHJldHVybiB0byBtYWtlIHRoaXMgc3RyZWFtIGZvcmdldCB0aGUgZXJyb3IuCiAgICogSWYgdGhlIHJlY2VpdmVkIGBlcnJvcmAgdmFsdWUgaXMgdGhyb3duIGFnYWluIGJ5IHRoZSBbb25FcnJvcl0gZnVuY3Rpb24sCiAgICogaXQgYWN0cyBsaWtlIGEgYHJldGhyb3dgIGFuZCBpdCBpcyBlbWl0dGVkIGFsb25nIHdpdGggaXRzIG9yaWdpbmFsCiAgICogc3RhY2sgdHJhY2UsIG5vdCB0aGUgc3RhY2sgdHJhY2Ugb2YgdGhlIGB0aHJvd2AgaW5zaWRlIFtvbkVycm9yXS4KICAgKgogICAqIElmIHlvdSBuZWVkIHRvIHRyYW5zZm9ybSBhbiBlcnJvciBpbnRvIGEgZGF0YSBldmVudCwgdXNlIHRoZSBtb3JlIGdlbmVyaWMKICAgKiBbU3RyZWFtLnRyYW5zZm9ybV0gdG8gaGFuZGxlIHRoZSBldmVudCBieSB3cml0aW5nIGEgZGF0YSBldmVudCB0bwogICAqIHRoZSBvdXRwdXQgc2luay4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaXMgYSBicm9hZGNhc3Qgc3RyZWFtIGlmIHRoaXMgc3RyZWFtIGlzLgogICAqIElmIGEgYnJvYWRjYXN0IHN0cmVhbSBpcyBsaXN0ZW5lZCB0byBtb3JlIHRoYW4gb25jZSwgZWFjaCBzdWJzY3JpcHRpb24KICAgKiB3aWxsIGluZGl2aWR1YWxseSBwZXJmb3JtIHRoZSBgdGVzdGAgYW5kIGhhbmRsZSB0aGUgZXJyb3IuCiAgICovCiAgU3RyZWFtPFQ+IGhhbmRsZUVycm9yKEZ1bmN0aW9uIG9uRXJyb3IsIHtib29sIHRlc3QoZXJyb3IpfSkgewogICAgcmV0dXJuIG5ldyBfSGFuZGxlRXJyb3JTdHJlYW08VD4odGhpcywgb25FcnJvciwgdGVzdCk7CiAgfQoKICAvKioKICAgKiBUcmFuc2Zvcm1zIGVhY2ggZWxlbWVudCBvZiB0aGlzIHN0cmVhbSBpbnRvIGEgc2VxdWVuY2Ugb2YgZWxlbWVudHMuCiAgICoKICAgKiBSZXR1cm5zIGEgbmV3IHN0cmVhbSB3aGVyZSBlYWNoIGVsZW1lbnQgb2YgdGhpcyBzdHJlYW0gaXMgcmVwbGFjZWQKICAgKiBieSB6ZXJvIG9yIG1vcmUgZGF0YSBldmVudHMuCiAgICogVGhlIGV2ZW50IHZhbHVlcyBhcmUgcHJvdmlkZWQgYXMgYW4gW0l0ZXJhYmxlXSBieSBhIGNhbGwgdG8gW2NvbnZlcnRdCiAgICogd2l0aCB0aGUgZWxlbWVudCBhcyBhcmd1bWVudCwgYW5kIHRoZSBlbGVtZW50cyBvZiB0aGF0IGl0ZXJhYmxlIGlzCiAgICogZW1pdHRlZCBpbiBpdGVyYXRpb24gb3JkZXIuCiAgICogSWYgY2FsbGluZyBbY29udmVydF0gdGhyb3dzLCBvciBpZiB0aGUgaXRlcmF0aW9uIG9mIHRoZSByZXR1cm5lZCB2YWx1ZXMKICAgKiB0aHJvd3MsIHRoZSBlcnJvciBpcyBlbWl0dGVkIG9uIHRoZSByZXR1cm5lZCBzdHJlYW0gYW5kIGl0ZXJhdGlvbiBlbmRzCiAgICogZm9yIHRoYXQgZWxlbWVudCBvZiB0aGlzIHN0cmVhbS4KICAgKgogICAqIEVycm9yIGV2ZW50cyBhbmQgdGhlIGRvbmUgZXZlbnQgb2YgdGhpcyBzdHJlYW0gYXJlIGZvcndhcmRlZCBkaXJlY3RseQogICAqIHRvIHRoZSByZXR1cm5lZCBzdHJlYW0uCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgc3RyZWFtIGlzIGEgYnJvYWRjYXN0IHN0cmVhbSBpZiB0aGlzIHN0cmVhbSBpcy4KICAgKiBJZiBhIGJyb2FkY2FzdCBzdHJlYW0gaXMgbGlzdGVuZWQgdG8gbW9yZSB0aGFuIG9uY2UsIGVhY2ggc3Vic2NyaXB0aW9uCiAgICogd2lsbCBpbmRpdmlkdWFsbHkgY2FsbCBgY29udmVydGAgYW5kIGV4cGFuZCB0aGUgZXZlbnRzLgogICAqLwogIFN0cmVhbTxTPiBleHBhbmQ8Uz4oSXRlcmFibGU8Uz4gY29udmVydChUIGVsZW1lbnQpKSB7CiAgICByZXR1cm4gbmV3IF9FeHBhbmRTdHJlYW08VCwgUz4odGhpcywgY29udmVydCk7CiAgfQoKICAvKioKICAgKiBQaXBlcyB0aGUgZXZlbnRzIG9mIHRoaXMgc3RyZWFtIGludG8gW3N0cmVhbUNvbnN1bWVyXS4KICAgKgogICAqIEFsbCBldmVudHMgb2YgdGhpcyBzdHJlYW0gYXJlIGFkZGVkIHRvIGBzdHJlYW1Db25zdW1lcmAgdXNpbmcKICAgKiBbU3RyZWFtQ29uc3VtZXIuYWRkU3RyZWFtXS4KICAgKiBUaGUgYHN0cmVhbUNvbnN1bWVyYCBpcyBjbG9zZWQgd2hlbiB0aGlzIHN0cmVhbSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgYWRkZWQKICAgKiB0byBpdCAtIHdoZW4gdGhlIGZ1dHVyZSByZXR1cm5lZCBieSBgYWRkU3RyZWFtYCBjb21wbGV0ZXMgd2l0aG91dCBhbiBlcnJvci4KICAgKgogICAqIFJldHVybnMgYSBmdXR1cmUgd2hpY2ggY29tcGxldGVzIHdoZW4gdGhpcyBzdHJlYW0gaGFzIGJlZW4gY29uc3VtZWQKICAgKiBhbmQgdGhlIGNvbnN1bWVyIGhhcyBiZWVuIGNsb3NlZC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzIHdpdGggdGhlIHNhbWUgcmVzdWx0IGFzIHRoZSBmdXR1cmUgcmV0dXJuZWQKICAgKiBieSBbU3RyZWFtQ29uc3VtZXIuY2xvc2VdLgogICAqIElmIHRoZSBjYWxsIHRvIFtTdHJlYW1Db25zdW1lci5hZGRTdHJlYW1dIGZhaWxzIGluIHNvbWUgd2F5LCB0aGlzCiAgICogbWV0aG9kIGZhaWxzIGluIHRoZSBzYW1lIHdheS4KICAgKi8KICBGdXR1cmUgcGlwZShTdHJlYW1Db25zdW1lcjxUPiBzdHJlYW1Db25zdW1lcikgewogICAgcmV0dXJuIHN0cmVhbUNvbnN1bWVyLmFkZFN0cmVhbSh0aGlzKS50aGVuKChfKSA9PiBzdHJlYW1Db25zdW1lci5jbG9zZSgpKTsKICB9CgogIC8qKgogICAqIEFwcGxpZXMgIFtzdHJlYW1UcmFuc2Zvcm1lcl0gdG8gdGhpcyBzdHJlYW0uCiAgICoKICAgKiBSZXR1cm5zIHRoZSB0cmFuc2Zvcm1lZCBzdHJlYW0sCiAgICogdGhhdCBpcywgdGhlIHJlc3VsdCBvZiBgc3RyZWFtVHJhbnNmb3JtZXIuYmluZCh0aGlzKWAuCiAgICogVGhpcyBtZXRob2Qgc2ltcGx5IGFsbG93cyB3cml0aW5nIHRoZSBjYWxsIHRvIGBzdHJlYW1UcmFuc2Zvcm1lci5iaW5kYAogICAqIGluIGEgY2hhaW5lZCBmYXNoaW9uLCBsaWtlCiAgICogYGBgCiAgICogc3RyZWFtLm1hcChtYXBwaW5nKS50cmFuc2Zvcm0odHJhbnNmb3JtYXRpb24pLnRvTGlzdCgpCiAgICogYGBgCiAgICogd2hpY2ggY2FuIGJlIG1vcmUgY29udmVuaWVudCB0aGFuIGNhbGxpbmcgYGJpbmRgIGRpcmVjdGx5LgogICAqCiAgICogVGhlIFtzdHJlYW1UcmFuc2Zvcm1lcl0gY2FuIHJldHVybiBhbnkgc3RyZWFtLgogICAqIFdoZXRoZXIgdGhlIHJldHVybmVkIHN0cmVhbSBpcyBhIGJyb2FkY2FzdCBzdHJlYW0gb3Igbm90LAogICAqIGFuZCB3aGljaCBlbGVtZW50cyBpdCB3aWxsIGNvbnRhaW4sCiAgICogaXMgZW50aXJlbHkgdXAgdG8gdGhlIHRyYW5zZm9ybWF0aW9uLgogICAqCiAgICogVGhpcyBtZXRob2Qgc2hvdWxkIGFsd2F5cyBiZSB1c2VkIGZvciB0cmFuc2Zvcm1hdGlvbnMgd2hpY2ggdHJlYXQKICAgKiB0aGUgZW50aXJlIHN0cmVhbSBhcyByZXByZXNlbnRpbmcgYSBzaW5nbGUgdmFsdWUKICAgKiB3aGljaCBoYXMgcGVyaGFwcyBiZWVuIHNwbGl0IGludG8gc2V2ZXJhbCBwYXJ0cyBmb3IgdHJhbnNwb3J0LAogICAqIGxpa2UgYSBmaWxlIGJlaW5nIHJlYWQgZnJvbSBkaXNrIG9yIGJlaW5nIGZldGNoZWQgb3ZlciBhIG5ldHdvcmsuCiAgICogVGhlIHRyYW5zZm9ybWF0aW9uIHdpbGwgdGhlbiBwcm9kdWNlIGEgbmV3IHN0cmVhbSB3aGljaAogICAqIHRyYW5zZm9ybXMgdGhlIHN0cmVhbSdzIHZhbHVlIGluY3JlbWVudGFsbHkgKHBlcmhhcHMgdXNpbmcKICAgKiBbQ29udmVydGVyLnN0YXJ0Q2h1bmtlZENvbnZlcnNpb25dKS4gVGhlIHJlc3VsdGluZyBzdHJlYW0KICAgKiBtYXkgYWdhaW4gYmUgY2h1bmtzIG9mIHRoZSByZXN1bHQsIGJ1dCBkb2VzIG5vdCBoYXZlIHRvCiAgICogY29ycmVzcG9uZCB0byBzcGVjaWZpYyBldmVudHMgZnJvbSB0aGUgc291cmNlIHN0cmluZy4KICAgKi8KICBTdHJlYW08Uz4gdHJhbnNmb3JtPFM+KFN0cmVhbVRyYW5zZm9ybWVyPFQsIFM+IHN0cmVhbVRyYW5zZm9ybWVyKSB7CiAgICByZXR1cm4gc3RyZWFtVHJhbnNmb3JtZXIuYmluZCh0aGlzKTsKICB9CgogIC8qKgogICAqIENvbWJpbmVzIGEgc2VxdWVuY2Ugb2YgdmFsdWVzIGJ5IHJlcGVhdGVkbHkgYXBwbHlpbmcgW2NvbWJpbmVdLgogICAqCiAgICogU2ltaWxhciB0byBbSXRlcmFibGUucmVkdWNlXSwgdGhpcyBmdW5jdGlvbiBtYWludGFpbnMgYSB2YWx1ZSwKICAgKiBzdGFydGluZyB3aXRoIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoaXMgc3RyZWFtCiAgICogYW5kIHVwZGF0ZWQgZm9yIGVhY2ggZnVydGhlciBlbGVtZW50IG9mIHRoaXMgc3RyZWFtLgogICAqIEZvciBlYWNoIGVsZW1lbnQgYWZ0ZXIgdGhlIGZpcnN0LAogICAqIHRoZSB2YWx1ZSBpcyB1cGRhdGVkIHRvIHRoZSByZXN1bHQgb2YgY2FsbGluZyBbY29tYmluZV0KICAgKiB3aXRoIHRoZSBwcmV2aW91cyB2YWx1ZSBhbmQgdGhlIGVsZW1lbnQuCiAgICoKICAgKiBXaGVuIHRoaXMgc3RyZWFtIGlzIGRvbmUsIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGgKICAgKiB0aGUgdmFsdWUgYXQgdGhhdCB0aW1lLgogICAqCiAgICogSWYgdGhpcyBzdHJlYW0gaXMgZW1wdHksIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGgKICAgKiBhbiBlcnJvci4KICAgKiBJZiB0aGlzIHN0cmVhbSBlbWl0cyBhbiBlcnJvciwgb3IgdGhlIGNhbGwgdG8gW2NvbWJpbmVdIHRocm93cywKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQgZXJyb3IsCiAgICogYW5kIHByb2Nlc3NpbmcgaXMgc3RvcHBlZC4KICAgKi8KICBGdXR1cmU8VD4gcmVkdWNlKFQgY29tYmluZShUIHByZXZpb3VzLCBUIGVsZW1lbnQpKSB7CiAgICBfRnV0dXJlPFQ+IHJlc3VsdCA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgICBib29sIHNlZW5GaXJzdCA9IGZhbHNlOwogICAgVCB2YWx1ZTsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb247CiAgICBzdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlbigKICAgICAgICAoVCBlbGVtZW50KSB7CiAgICAgICAgICBpZiAoc2VlbkZpcnN0KSB7CiAgICAgICAgICAgIF9ydW5Vc2VyQ29kZSgoKSA9PiBjb21iaW5lKHZhbHVlLCBlbGVtZW50KSwgKFQgbmV3VmFsdWUpIHsKICAgICAgICAgICAgICB2YWx1ZSA9IG5ld1ZhbHVlOwogICAgICAgICAgICB9LCBfY2FuY2VsQW5kRXJyb3JDbG9zdXJlKHN1YnNjcmlwdGlvbiwgcmVzdWx0KSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YWx1ZSA9IGVsZW1lbnQ7CiAgICAgICAgICAgIHNlZW5GaXJzdCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBvbkVycm9yOiByZXN1bHQuX2NvbXBsZXRlRXJyb3IsCiAgICAgICAgb25Eb25lOiAoKSB7CiAgICAgICAgICBpZiAoIXNlZW5GaXJzdCkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIC8vIFRocm93IGFuZCByZWNhdGNoLCBpbnN0ZWFkIG9mIGp1c3QgZG9pbmcKICAgICAgICAgICAgICAvLyAgX2NvbXBsZXRlV2l0aEVycm9yQ2FsbGJhY2ssIGUsIHRoZUVycm9yLCBTdGFja1RyYWNlLmN1cnJlbnQpLAogICAgICAgICAgICAgIC8vIHRvIGVuc3VyZSB0aGF0IHRoZSBzdGFja1RyYWNlIGlzIHNldCBvbiB0aGUgZXJyb3IuCiAgICAgICAgICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgICAgICBfY29tcGxldGVXaXRoRXJyb3JDYWxsYmFjayhyZXN1bHQsIGUsIHMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXN1bHQuX2NvbXBsZXRlKHZhbHVlKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8qKgogICAqIENvbWJpbmVzIGEgc2VxdWVuY2Ugb2YgdmFsdWVzIGJ5IHJlcGVhdGVkbHkgYXBwbHlpbmcgW2NvbWJpbmVdLgogICAqCiAgICogU2ltaWxhciB0byBbSXRlcmFibGUuZm9sZF0sIHRoaXMgZnVuY3Rpb24gbWFpbnRhaW5zIGEgdmFsdWUsCiAgICogc3RhcnRpbmcgd2l0aCBbaW5pdGlhbFZhbHVlXSBhbmQgdXBkYXRlZCBmb3IgZWFjaCBlbGVtZW50IG9mCiAgICogdGhpcyBzdHJlYW0uCiAgICogRm9yIGVhY2ggZWxlbWVudCwgdGhlIHZhbHVlIGlzIHVwZGF0ZWQgdG8gdGhlIHJlc3VsdCBvZiBjYWxsaW5nCiAgICogW2NvbWJpbmVdIHdpdGggdGhlIHByZXZpb3VzIHZhbHVlIGFuZCB0aGUgZWxlbWVudC4KICAgKgogICAqIFdoZW4gdGhpcyBzdHJlYW0gaXMgZG9uZSwgdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aAogICAqIHRoZSB2YWx1ZSBhdCB0aGF0IHRpbWUuCiAgICogRm9yIGFuIGVtcHR5IHN0cmVhbSwgdGhlIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCBbaW5pdGlhbFZhbHVlXS4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGVtaXRzIGFuIGVycm9yLCBvciB0aGUgY2FsbCB0byBbY29tYmluZV0gdGhyb3dzLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhhdCBlcnJvciwKICAgKiBhbmQgcHJvY2Vzc2luZyBpcyBzdG9wcGVkLgogICAqLwogIEZ1dHVyZTxTPiBmb2xkPFM+KFMgaW5pdGlhbFZhbHVlLCBTIGNvbWJpbmUoUyBwcmV2aW91cywgVCBlbGVtZW50KSkgewogICAgX0Z1dHVyZTxTPiByZXN1bHQgPSBuZXcgX0Z1dHVyZTxTPigpOwogICAgUyB2YWx1ZSA9IGluaXRpYWxWYWx1ZTsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb247CiAgICBzdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlbigKICAgICAgICAoVCBlbGVtZW50KSB7CiAgICAgICAgICBfcnVuVXNlckNvZGUoKCkgPT4gY29tYmluZSh2YWx1ZSwgZWxlbWVudCksIChTIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgIHZhbHVlID0gbmV3VmFsdWU7CiAgICAgICAgICB9LCBfY2FuY2VsQW5kRXJyb3JDbG9zdXJlKHN1YnNjcmlwdGlvbiwgcmVzdWx0KSk7CiAgICAgICAgfSwKICAgICAgICBvbkVycm9yOiByZXN1bHQuX2NvbXBsZXRlRXJyb3IsCiAgICAgICAgb25Eb25lOiAoKSB7CiAgICAgICAgICByZXN1bHQuX2NvbXBsZXRlKHZhbHVlKTsKICAgICAgICB9LAogICAgICAgIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8qKgogICAqIENvbWJpbmVzIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgZWxlbWVudHMgaW50byBhIHNpbmdsZSBzdHJpbmcuCiAgICoKICAgKiBFYWNoIGVsZW1lbnQgaXMgY29udmVydGVkIHRvIGEgc3RyaW5nIHVzaW5nIGl0cyBbT2JqZWN0LnRvU3RyaW5nXSBtZXRob2QuCiAgICogSWYgW3NlcGFyYXRvcl0gaXMgcHJvdmlkZWQsIGl0IGlzIGluc2VydGVkIGJldHdlZW4gZWxlbWVudCBzdHJpbmcKICAgKiByZXByZXNlbnRhdGlvbnMuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoZSBjb21iaW5lZCBzdHJpbmcgd2hlbiB0aGlzIHN0cmVhbQogICAqIGlzIGRvbmUuCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBlbWl0cyBhbiBlcnJvciwgb3IgdGhlIGNhbGwgdG8gW09iamVjdC50b1N0cmluZ10gdGhyb3dzLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhhdCBlcnJvciwKICAgKiBhbmQgcHJvY2Vzc2luZyBzdG9wcy4KICAgKi8KICBGdXR1cmU8U3RyaW5nPiBqb2luKFtTdHJpbmcgc2VwYXJhdG9yID0gIiJdKSB7CiAgICBfRnV0dXJlPFN0cmluZz4gcmVzdWx0ID0gbmV3IF9GdXR1cmU8U3RyaW5nPigpOwogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb247CiAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMubGlzdGVuKAogICAgICAgIChUIGVsZW1lbnQpIHsKICAgICAgICAgIGlmICghZmlyc3QpIHsKICAgICAgICAgICAgYnVmZmVyLndyaXRlKHNlcGFyYXRvcik7CiAgICAgICAgICB9CiAgICAgICAgICBmaXJzdCA9IGZhbHNlOwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgYnVmZmVyLndyaXRlKGVsZW1lbnQpOwogICAgICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgICAgICBfY2FuY2VsQW5kRXJyb3JXaXRoUmVwbGFjZW1lbnQoc3Vic2NyaXB0aW9uLCByZXN1bHQsIGUsIHMpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogcmVzdWx0Ll9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgcmVzdWx0Ll9jb21wbGV0ZShidWZmZXIudG9TdHJpbmcoKSk7CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHdoZXRoZXIgW25lZWRsZV0gb2NjdXJzIGluIHRoZSBlbGVtZW50cyBwcm92aWRlZCBieSB0aGlzIHN0cmVhbS4KICAgKgogICAqIENvbXBhcmVzIGVhY2ggZWxlbWVudCBvZiB0aGlzIHN0cmVhbSB0byBbbmVlZGxlXSB1c2luZyBbT2JqZWN0Lj09XS4KICAgKiBJZiBhbiBlcXVhbCBlbGVtZW50IGlzIGZvdW5kLCB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIGB0cnVlYC4KICAgKiBJZiB0aGlzIHN0cmVhbSBlbmRzIHdpdGhvdXQgZmluZGluZyBhIG1hdGNoLCB0aGUgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoCiAgICogYGZhbHNlYC4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGVtaXRzIGFuIGVycm9yLCBvciB0aGUgY2FsbCB0byBbT2JqZWN0Lj09XSB0aHJvd3MsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGF0IGVycm9yLAogICAqIGFuZCBwcm9jZXNzaW5nIHN0b3BzLgogICAqLwogIEZ1dHVyZTxib29sPiBjb250YWlucyhPYmplY3QgbmVlZGxlKSB7CiAgICBfRnV0dXJlPGJvb2w+IGZ1dHVyZSA9IG5ldyBfRnV0dXJlPGJvb2w+KCk7CiAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uOwogICAgc3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW4oCiAgICAgICAgKFQgZWxlbWVudCkgewogICAgICAgICAgX3J1blVzZXJDb2RlKCgpID0+IChlbGVtZW50ID09IG5lZWRsZSksIChib29sIGlzTWF0Y2gpIHsKICAgICAgICAgICAgaWYgKGlzTWF0Y2gpIHsKICAgICAgICAgICAgICBfY2FuY2VsQW5kVmFsdWUoc3Vic2NyaXB0aW9uLCBmdXR1cmUsIHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBfY2FuY2VsQW5kRXJyb3JDbG9zdXJlKHN1YnNjcmlwdGlvbiwgZnV0dXJlKSk7CiAgICAgICAgfSwKICAgICAgICBvbkVycm9yOiBmdXR1cmUuX2NvbXBsZXRlRXJyb3IsCiAgICAgICAgb25Eb25lOiAoKSB7CiAgICAgICAgICBmdXR1cmUuX2NvbXBsZXRlKGZhbHNlKTsKICAgICAgICB9LAogICAgICAgIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9CgogIC8qKgogICAqIEV4ZWN1dGVzIFthY3Rpb25dIG9uIGVhY2ggZWxlbWVudCBvZiB0aGlzIHN0cmVhbS4KICAgKgogICAqIENvbXBsZXRlcyB0aGUgcmV0dXJuZWQgW0Z1dHVyZV0gd2hlbiBhbGwgZWxlbWVudHMgb2YgdGhpcyBzdHJlYW0KICAgKiBoYXZlIGJlZW4gcHJvY2Vzc2VkLgogICAqCiAgICogSWYgdGhpcyBzdHJlYW0gZW1pdHMgYW4gZXJyb3IsIG9yIGlmIHRoZSBjYWxsIHRvIFthY3Rpb25dIHRocm93cywKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIHRoYXQgZXJyb3IsCiAgICogYW5kIHByb2Nlc3Npbmcgc3RvcHMuCiAgICovCiAgRnV0dXJlIGZvckVhY2godm9pZCBhY3Rpb24oVCBlbGVtZW50KSkgewogICAgX0Z1dHVyZSBmdXR1cmUgPSBuZXcgX0Z1dHVyZSgpOwogICAgU3RyZWFtU3Vic2NyaXB0aW9uIHN1YnNjcmlwdGlvbjsKICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMubGlzdGVuKAogICAgICAgIChUIGVsZW1lbnQpIHsKICAgICAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiB0aGUgdHlwZSBzaG91bGQgYmUgJ3ZvaWQnIGFuZCBpbmZlcnJlZC4KICAgICAgICAgIF9ydW5Vc2VyQ29kZTxkeW5hbWljPigoKSA9PiBhY3Rpb24oZWxlbWVudCksIChfKSB7fSwKICAgICAgICAgICAgICBfY2FuY2VsQW5kRXJyb3JDbG9zdXJlKHN1YnNjcmlwdGlvbiwgZnV0dXJlKSk7CiAgICAgICAgfSwKICAgICAgICBvbkVycm9yOiBmdXR1cmUuX2NvbXBsZXRlRXJyb3IsCiAgICAgICAgb25Eb25lOiAoKSB7CiAgICAgICAgICBmdXR1cmUuX2NvbXBsZXRlKG51bGwpOwogICAgICAgIH0sCiAgICAgICAgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICByZXR1cm4gZnV0dXJlOwogIH0KCiAgLyoqCiAgICogQ2hlY2tzIHdoZXRoZXIgW3Rlc3RdIGFjY2VwdHMgYWxsIGVsZW1lbnRzIHByb3ZpZGVkIGJ5IHRoaXMgc3RyZWFtLgogICAqCiAgICogQ2FsbHMgW3Rlc3RdIG9uIGVhY2ggZWxlbWVudCBvZiB0aGlzIHN0cmVhbS4KICAgKiBJZiB0aGUgY2FsbCByZXR1cm5zIGBmYWxzZWAsIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggYGZhbHNlYAogICAqIGFuZCBwcm9jZXNzaW5nIHN0b3BzLgogICAqCiAgICogSWYgdGhpcyBzdHJlYW0gZW5kcyB3aXRob3V0IGZpbmRpbmcgYW4gZWxlbWVudCB0aGF0IFt0ZXN0XSByZWplY3RzLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggYHRydWVgLgogICAqCiAgICogSWYgdGhpcyBzdHJlYW0gZW1pdHMgYW4gZXJyb3IsIG9yIGlmIHRoZSBjYWxsIHRvIFt0ZXN0XSB0aHJvd3MsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGF0IGVycm9yLAogICAqIGFuZCBwcm9jZXNzaW5nIHN0b3BzLgogICAqLwogIEZ1dHVyZTxib29sPiBldmVyeShib29sIHRlc3QoVCBlbGVtZW50KSkgewogICAgX0Z1dHVyZTxib29sPiBmdXR1cmUgPSBuZXcgX0Z1dHVyZTxib29sPigpOwogICAgU3RyZWFtU3Vic2NyaXB0aW9uIHN1YnNjcmlwdGlvbjsKICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMubGlzdGVuKAogICAgICAgIChUIGVsZW1lbnQpIHsKICAgICAgICAgIF9ydW5Vc2VyQ29kZSgoKSA9PiB0ZXN0KGVsZW1lbnQpLCAoYm9vbCBpc01hdGNoKSB7CiAgICAgICAgICAgIGlmICghaXNNYXRjaCkgewogICAgICAgICAgICAgIF9jYW5jZWxBbmRWYWx1ZShzdWJzY3JpcHRpb24sIGZ1dHVyZSwgZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBfY2FuY2VsQW5kRXJyb3JDbG9zdXJlKHN1YnNjcmlwdGlvbiwgZnV0dXJlKSk7CiAgICAgICAgfSwKICAgICAgICBvbkVycm9yOiBmdXR1cmUuX2NvbXBsZXRlRXJyb3IsCiAgICAgICAgb25Eb25lOiAoKSB7CiAgICAgICAgICBmdXR1cmUuX2NvbXBsZXRlKHRydWUpOwogICAgICAgIH0sCiAgICAgICAgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICByZXR1cm4gZnV0dXJlOwogIH0KCiAgLyoqCiAgICogQ2hlY2tzIHdoZXRoZXIgW3Rlc3RdIGFjY2VwdHMgYW55IGVsZW1lbnQgcHJvdmlkZWQgYnkgdGhpcyBzdHJlYW0uCiAgICoKICAgKiBDYWxscyBbdGVzdF0gb24gZWFjaCBlbGVtZW50IG9mIHRoaXMgc3RyZWFtLgogICAqIElmIHRoZSBjYWxsIHJldHVybnMgYHRydWVgLCB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIGB0cnVlYAogICAqIGFuZCBwcm9jZXNzaW5nIHN0b3BzLgogICAqCiAgICogSWYgdGhpcyBzdHJlYW0gZW5kcyB3aXRob3V0IGZpbmRpbmcgYW4gZWxlbWVudCB0aGF0IFt0ZXN0XSBhY2NlcHRzLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggYGZhbHNlYC4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGVtaXRzIGFuIGVycm9yLCBvciBpZiB0aGUgY2FsbCB0byBbdGVzdF0gdGhyb3dzLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhhdCBlcnJvciwKICAgKiBhbmQgcHJvY2Vzc2luZyBzdG9wcy4KICAgKi8KICBGdXR1cmU8Ym9vbD4gYW55KGJvb2wgdGVzdChUIGVsZW1lbnQpKSB7CiAgICBfRnV0dXJlPGJvb2w+IGZ1dHVyZSA9IG5ldyBfRnV0dXJlPGJvb2w+KCk7CiAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uOwogICAgc3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW4oCiAgICAgICAgKFQgZWxlbWVudCkgewogICAgICAgICAgX3J1blVzZXJDb2RlKCgpID0+IHRlc3QoZWxlbWVudCksIChib29sIGlzTWF0Y2gpIHsKICAgICAgICAgICAgaWYgKGlzTWF0Y2gpIHsKICAgICAgICAgICAgICBfY2FuY2VsQW5kVmFsdWUoc3Vic2NyaXB0aW9uLCBmdXR1cmUsIHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBfY2FuY2VsQW5kRXJyb3JDbG9zdXJlKHN1YnNjcmlwdGlvbiwgZnV0dXJlKSk7CiAgICAgICAgfSwKICAgICAgICBvbkVycm9yOiBmdXR1cmUuX2NvbXBsZXRlRXJyb3IsCiAgICAgICAgb25Eb25lOiAoKSB7CiAgICAgICAgICBmdXR1cmUuX2NvbXBsZXRlKGZhbHNlKTsKICAgICAgICB9LAogICAgICAgIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9CgogIC8qKgogICAqIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhpcyBzdHJlYW0uCiAgICoKICAgKiBXYWl0cyBmb3IgYWxsIGVsZW1lbnRzIG9mIHRoaXMgc3RyZWFtLiBXaGVuIHRoaXMgc3RyZWFtIGVuZHMsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLgogICAqCiAgICogSWYgdGhpcyBzdHJlYW0gZW1pdHMgYW4gZXJyb3IsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGF0IGVycm9yLAogICAqIGFuZCBwcm9jZXNzaW5nIHN0b3BzLgogICAqCiAgICogVGhpcyBvcGVyYXRpb24gbGlzdGVucyB0byB0aGlzIHN0cmVhbSwgYW5kIGEgbm9uLWJyb2FkY2FzdCBzdHJlYW0gY2Fubm90CiAgICogYmUgcmV1c2VkIGFmdGVyIGZpbmRpbmcgaXRzIGxlbmd0aC4KICAgKi8KICBGdXR1cmU8aW50PiBnZXQgbGVuZ3RoIHsKICAgIF9GdXR1cmU8aW50PiBmdXR1cmUgPSBuZXcgX0Z1dHVyZTxpbnQ+KCk7CiAgICBpbnQgY291bnQgPSAwOwogICAgdGhpcy5saXN0ZW4oCiAgICAgICAgKF8pIHsKICAgICAgICAgIGNvdW50Kys7CiAgICAgICAgfSwKICAgICAgICBvbkVycm9yOiBmdXR1cmUuX2NvbXBsZXRlRXJyb3IsCiAgICAgICAgb25Eb25lOiAoKSB7CiAgICAgICAgICBmdXR1cmUuX2NvbXBsZXRlKGNvdW50KTsKICAgICAgICB9LAogICAgICAgIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9CgogIC8qKgogICAqIFdoZXRoZXIgdGhpcyBzdHJlYW0gY29udGFpbnMgYW55IGVsZW1lbnRzLgogICAqCiAgICogV2FpdHMgZm9yIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoaXMgc3RyZWFtLCB0aGVuIGNvbXBsZXRlcyB0aGUgcmV0dXJuZWQKICAgKiBmdXR1cmUgd2l0aCBgdHJ1ZWAuCiAgICogSWYgdGhpcyBzdHJlYW0gZW5kcyB3aXRob3V0IGVtaXR0aW5nIGFueSBlbGVtZW50cywgdGhlIHJldHVybmVkIGZ1dHVyZSBpcwogICAqIGNvbXBsZXRlZCB3aXRoIGBmYWxzZWAuCiAgICoKICAgKiBJZiB0aGUgZmlyc3QgZXZlbnQgaXMgYW4gZXJyb3IsIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhhdAogICAqIGVycm9yLgogICAqCiAgICogVGhpcyBvcGVyYXRpb24gbGlzdGVucyB0byB0aGlzIHN0cmVhbSwgYW5kIGEgbm9uLWJyb2FkY2FzdCBzdHJlYW0gY2Fubm90CiAgICogYmUgcmV1c2VkIGFmdGVyIGNoZWNraW5nIHdoZXRoZXIgaXQgaXMgZW1wdHkuCiAgICovCiAgRnV0dXJlPGJvb2w+IGdldCBpc0VtcHR5IHsKICAgIF9GdXR1cmU8Ym9vbD4gZnV0dXJlID0gbmV3IF9GdXR1cmU8Ym9vbD4oKTsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb247CiAgICBzdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlbigKICAgICAgICAoXykgewogICAgICAgICAgX2NhbmNlbEFuZFZhbHVlKHN1YnNjcmlwdGlvbiwgZnV0dXJlLCBmYWxzZSk7CiAgICAgICAgfSwKICAgICAgICBvbkVycm9yOiBmdXR1cmUuX2NvbXBsZXRlRXJyb3IsCiAgICAgICAgb25Eb25lOiAoKSB7CiAgICAgICAgICBmdXR1cmUuX2NvbXBsZXRlKHRydWUpOwogICAgICAgIH0sCiAgICAgICAgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICByZXR1cm4gZnV0dXJlOwogIH0KCiAgLyoqCiAgICogQWRhcHQgdGhpcyBzdHJlYW0gdG8gYmUgYSBgU3RyZWFtPFI+YC4KICAgKgogICAqIFRoaXMgc3RyZWFtIGlzIHdyYXBwZWQgYXMgYSBgU3RyZWFtPFI+YCB3aGljaCBjaGVja3MgYXQgcnVuLXRpbWUgdGhhdAogICAqIGVhY2ggZGF0YSBldmVudCBlbWl0dGVkIGJ5IHRoaXMgc3RyZWFtIGlzIGFsc28gYW4gaW5zdGFuY2Ugb2YgW1JdLgogICAqLwogIFN0cmVhbTxSPiBjYXN0PFI+KCkgPT4gU3RyZWFtLmNhc3RGcm9tPFQsIFI+KHRoaXMpOwogIC8qKgogICAqIENvbGxlY3RzIGFsbCBlbGVtZW50cyBvZiB0aGlzIHN0cmVhbSBpbiBhIFtMaXN0XS4KICAgKgogICAqIENyZWF0ZXMgYSBgTGlzdDxUPmAgYW5kIGFkZHMgYWxsIGVsZW1lbnRzIG9mIHRoaXMgc3RyZWFtIHRvIHRoZSBsaXN0CiAgICogaW4gdGhlIG9yZGVyIHRoZXkgYXJyaXZlLgogICAqIFdoZW4gdGhpcyBzdHJlYW0gZW5kcywgdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGF0IGxpc3QuCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBlbWl0cyBhbiBlcnJvciwKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQgZXJyb3IsCiAgICogYW5kIHByb2Nlc3Npbmcgc3RvcHMuCiAgICovCiAgRnV0dXJlPExpc3Q8VD4+IHRvTGlzdCgpIHsKICAgIExpc3Q8VD4gcmVzdWx0ID0gPFQ+W107CiAgICBfRnV0dXJlPExpc3Q8VD4+IGZ1dHVyZSA9IG5ldyBfRnV0dXJlPExpc3Q8VD4+KCk7CiAgICB0aGlzLmxpc3RlbigKICAgICAgICAoVCBkYXRhKSB7CiAgICAgICAgICByZXN1bHQuYWRkKGRhdGEpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZShyZXN1bHQpOwogICAgICAgIH0sCiAgICAgICAgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICByZXR1cm4gZnV0dXJlOwogIH0KCiAgLyoqCiAgICogQ29sbGVjdHMgdGhlIGRhdGEgb2YgdGhpcyBzdHJlYW0gaW4gYSBbU2V0XS4KICAgKgogICAqIENyZWF0ZXMgYSBgU2V0PFQ+YCBhbmQgYWRkcyBhbGwgZWxlbWVudHMgb2YgdGhpcyBzdHJlYW0gdG8gdGhlIHNldC4KICAgKiBpbiB0aGUgb3JkZXIgdGhleSBhcnJpdmUuCiAgICogV2hlbiB0aGlzIHN0cmVhbSBlbmRzLCB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQgc2V0LgogICAqCiAgICogVGhlIHJldHVybmVkIHNldCBpcyB0aGUgc2FtZSB0eXBlIGFzIHJldHVybmVkIGJ5IGBuZXcgU2V0PFQ+KClgLgogICAqIElmIGFub3RoZXIgdHlwZSBvZiBzZXQgaXMgbmVlZGVkLCBlaXRoZXIgdXNlIFtmb3JFYWNoXSB0byBhZGQgZWFjaAogICAqIGVsZW1lbnQgdG8gdGhlIHNldCwgb3IgdXNlCiAgICogYHRvTGlzdCgpLnRoZW4oKGxpc3QpID0+IG5ldyBTb21lT3RoZXJTZXQuZnJvbShsaXN0KSlgCiAgICogdG8gY3JlYXRlIHRoZSBzZXQuCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBlbWl0cyBhbiBlcnJvciwKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQgZXJyb3IsCiAgICogYW5kIHByb2Nlc3Npbmcgc3RvcHMuCiAgICovCiAgRnV0dXJlPFNldDxUPj4gdG9TZXQoKSB7CiAgICBTZXQ8VD4gcmVzdWx0ID0gbmV3IFNldDxUPigpOwogICAgX0Z1dHVyZTxTZXQ8VD4+IGZ1dHVyZSA9IG5ldyBfRnV0dXJlPFNldDxUPj4oKTsKICAgIHRoaXMubGlzdGVuKAogICAgICAgIChUIGRhdGEpIHsKICAgICAgICAgIHJlc3VsdC5hZGQoZGF0YSk7CiAgICAgICAgfSwKICAgICAgICBvbkVycm9yOiBmdXR1cmUuX2NvbXBsZXRlRXJyb3IsCiAgICAgICAgb25Eb25lOiAoKSB7CiAgICAgICAgICBmdXR1cmUuX2NvbXBsZXRlKHJlc3VsdCk7CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICAvKioKICAgKiBEaXNjYXJkcyBhbGwgZGF0YSBvbiB0aGlzIHN0cmVhbSwgYnV0IHNpZ25hbHMgd2hlbiBpdCBpcyBkb25lIG9yIGFuIGVycm9yCiAgICogb2NjdXJyZWQuCiAgICoKICAgKiBXaGVuIHN1YnNjcmliaW5nIHVzaW5nIFtkcmFpbl0sIGNhbmNlbE9uRXJyb3Igd2lsbCBiZSB0cnVlLiBUaGlzIG1lYW5zCiAgICogdGhhdCB0aGUgZnV0dXJlIHdpbGwgY29tcGxldGUgd2l0aCB0aGUgZmlyc3QgZXJyb3Igb24gdGhpcyBzdHJlYW0gYW5kIHRoZW4KICAgKiBjYW5jZWwgdGhlIHN1YnNjcmlwdGlvbi4KICAgKiBJZiB0aGlzIHN0cmVhbSBlbWl0cyBhbiBlcnJvciwgb3IgdGhlIGNhbGwgdG8gW2NvbWJpbmVdIHRocm93cywKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQgZXJyb3IsCiAgICogYW5kIHByb2Nlc3NpbmcgaXMgc3RvcHBlZC4KICAgKgogICAqIEluIGNhc2Ugb2YgYSBgZG9uZWAgZXZlbnQgdGhlIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCB0aGUgZ2l2ZW4KICAgKiBbZnV0dXJlVmFsdWVdLgogICAqLwogIEZ1dHVyZTxFPiBkcmFpbjxFPihbRSBmdXR1cmVWYWx1ZV0pID0+CiAgICAgIGxpc3RlbihudWxsLCBjYW5jZWxPbkVycm9yOiB0cnVlKS5hc0Z1dHVyZTxFPihmdXR1cmVWYWx1ZSk7CgogIC8qKgogICAqIFByb3ZpZGVzIGF0IG1vc3QgdGhlIGZpcnN0IFtjb3VudF0gZGF0YSBldmVudHMgb2YgdGhpcyBzdHJlYW0uCiAgICoKICAgKiBSZXR1cm5zIGEgc3RyZWFtIHRoYXQgZW1pdHMgdGhlIHNhbWUgZXZlbnRzIHRoYXQgdGhpcyBzdHJlYW0gd291bGQKICAgKiBpZiBsaXN0ZW5lZCB0byBhdCB0aGUgc2FtZSB0aW1lLAogICAqIHVudGlsIGVpdGhlciB0aGlzIHN0cmVhbSBlbmRzIG9yIGl0IGhhcyBlbWl0dGVkIFtjb3VudF0gZGF0YSBldmVudHMsCiAgICogYXQgd2hpY2ggcG9pbnQgdGhlIHJldHVybmVkIHN0cmVhbSBpcyBkb25lLgogICAqCiAgICogSWYgdGhpcyBzdHJlYW0gcHJvZHVjZXMgZmV3ZXIgdGhhbiBbY291bnRdIGRhdGEgZXZlbnRzIGJlZm9yZSBpdCdzIGRvbmUsCiAgICogc28gd2lsbCB0aGUgcmV0dXJuZWQgc3RyZWFtLgogICAqCiAgICogU3RhcnRzIGxpc3RlbmluZyB0byB0aGlzIHN0cmVhbSB3aGVuIHRoZSByZXR1cm5lZCBzdHJlYW0gaXMgbGlzdGVuZWQgdG8KICAgKiBhbmQgc3RvcHMgbGlzdGVuaW5nIHdoZW4gdGhlIGZpcnN0IFtjb3VudF0gZGF0YSBldmVudHMgaGF2ZSBiZWVuIHJlY2VpdmVkLgogICAqCiAgICogVGhpcyBtZWFucyB0aGF0IGlmIHRoaXMgaXMgYSBzaW5nbGUtc3Vic2NyaXB0aW9uIChub24tYnJvYWRjYXN0KSBzdHJlYW1zCiAgICogaXQgY2Fubm90IGJlIHJldXNlZCBhZnRlciB0aGUgcmV0dXJuZWQgc3RyZWFtIGhhcyBiZWVuIGxpc3RlbmVkIHRvLgogICAqCiAgICogSWYgdGhpcyBpcyBhIGJyb2FkY2FzdCBzdHJlYW0sIHRoZSByZXR1cm5lZCBzdHJlYW0gaXMgYSBicm9hZGNhc3Qgc3RyZWFtLgogICAqIEluIHRoYXQgY2FzZSwgdGhlIGV2ZW50cyBhcmUgb25seSBjb3VudGVkIGZyb20gdGhlIHRpbWUKICAgKiB0aGUgcmV0dXJuZWQgc3RyZWFtIGlzIGxpc3RlbmVkIHRvLgogICAqLwogIFN0cmVhbTxUPiB0YWtlKGludCBjb3VudCkgewogICAgcmV0dXJuIG5ldyBfVGFrZVN0cmVhbTxUPih0aGlzLCBjb3VudCk7CiAgfQoKICAvKioKICAgKiBGb3J3YXJkcyBkYXRhIGV2ZW50cyB3aGlsZSBbdGVzdF0gaXMgc3VjY2Vzc2Z1bC4KICAgKgogICAqIFJldHVybnMgYSBzdHJlYW0gdGhhdCBwcm92aWRlcyB0aGUgc2FtZSBldmVudHMgYXMgdGhpcyBzdHJlYW0KICAgKiB1bnRpbCBbdGVzdF0gZmFpbHMgZm9yIGEgZGF0YSBldmVudC4KICAgKiBUaGUgcmV0dXJuZWQgc3RyZWFtIGlzIGRvbmUgd2hlbiBlaXRoZXIgdGhpcyBzdHJlYW0gaXMgZG9uZSwKICAgKiBvciB3aGVuIHRoaXMgc3RyZWFtIGZpcnN0IGVtaXRzIGEgZGF0YSBldmVudCB0aGF0IGZhaWxzIFt0ZXN0XS4KICAgKgogICAqIFRoZSBgdGVzdGAgY2FsbCBpcyBjb25zaWRlcmVkIGZhaWxpbmcgaWYgaXQgcmV0dXJucyBhIG5vbi1gdHJ1ZWAgdmFsdWUKICAgKiBvciBpZiBpdCB0aHJvd3MuIElmIHRoZSBgdGVzdGAgY2FsbCB0aHJvd3MsIHRoZSBlcnJvciBpcyBlbWl0dGVkIGFzIHRoZQogICAqIGxhc3QgZXZlbnQgb24gdGhlIHJldHVybmVkIHN0cmVhbXMuCiAgICoKICAgKiBTdG9wcyBsaXN0ZW5pbmcgdG8gdGhpcyBzdHJlYW0gYWZ0ZXIgdGhlIGFjY2VwdGVkIGVsZW1lbnRzLgogICAqCiAgICogSW50ZXJuYWxseSB0aGUgbWV0aG9kIGNhbmNlbHMgaXRzIHN1YnNjcmlwdGlvbiBhZnRlciB0aGVzZSBlbGVtZW50cy4gVGhpcwogICAqIG1lYW5zIHRoYXQgc2luZ2xlLXN1YnNjcmlwdGlvbiAobm9uLWJyb2FkY2FzdCkgc3RyZWFtcyBhcmUgY2xvc2VkIGFuZAogICAqIGNhbm5vdCBiZSByZXVzZWQgYWZ0ZXIgYSBjYWxsIHRvIHRoaXMgbWV0aG9kLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBpcyBhIGJyb2FkY2FzdCBzdHJlYW0gaWYgdGhpcyBzdHJlYW0gaXMuCiAgICogRm9yIGEgYnJvYWRjYXN0IHN0cmVhbSwgdGhlIGV2ZW50cyBhcmUgb25seSB0ZXN0ZWQgZnJvbSB0aGUgdGltZQogICAqIHRoZSByZXR1cm5lZCBzdHJlYW0gaXMgbGlzdGVuZWQgdG8uCiAgICovCiAgU3RyZWFtPFQ+IHRha2VXaGlsZShib29sIHRlc3QoVCBlbGVtZW50KSkgewogICAgcmV0dXJuIG5ldyBfVGFrZVdoaWxlU3RyZWFtPFQ+KHRoaXMsIHRlc3QpOwogIH0KCiAgLyoqCiAgICogU2tpcHMgdGhlIGZpcnN0IFtjb3VudF0gZGF0YSBldmVudHMgZnJvbSB0aGlzIHN0cmVhbS4KICAgKgogICAqIFJldHVybnMgYSBzdHJlYW0gdGhhdCBlbWl0cyB0aGUgc2FtZSBldmVudHMgYXMgdGhpcyBzdHJlYW0gd291bGQKICAgKiBpZiBsaXN0ZW5lZCB0byBhdCB0aGUgc2FtZSB0aW1lLCBleGNlcHQgdGhhdCB0aGUgZmlyc3QgW2NvdW50XQogICAqIGRhdGEgZXZlbnRzIGFyZSBub3QgZW1pdHRlZC4KICAgKiBUaGUgcmV0dXJuZWQgc3RyZWFtIGlzIGRvbmUgd2hlbiB0aGlzIHN0cmVhbSBpcy4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGVtaXRzIGZld2VyIHRoYW4gW2NvdW50XSBkYXRhIGV2ZW50cwogICAqIGJlZm9yZSBiZWluZyBkb25lLCB0aGUgcmV0dXJuZWQgc3RyZWFtIGVtaXRzIG5vIGRhdGEgZXZlbnRzLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBpcyBhIGJyb2FkY2FzdCBzdHJlYW0gaWYgdGhpcyBzdHJlYW0gaXMuCiAgICogRm9yIGEgYnJvYWRjYXN0IHN0cmVhbSwgdGhlIGV2ZW50cyBhcmUgb25seSBjb3VudGVkIGZyb20gdGhlIHRpbWUKICAgKiB0aGUgcmV0dXJuZWQgc3RyZWFtIGlzIGxpc3RlbmVkIHRvLgogICAqLwogIFN0cmVhbTxUPiBza2lwKGludCBjb3VudCkgewogICAgcmV0dXJuIG5ldyBfU2tpcFN0cmVhbTxUPih0aGlzLCBjb3VudCk7CiAgfQoKICAvKioKICAgKiBTa2lwIGRhdGEgZXZlbnRzIGZyb20gdGhpcyBzdHJlYW0gd2hpbGUgdGhleSBhcmUgbWF0Y2hlZCBieSBbdGVzdF0uCiAgICoKICAgKiBSZXR1cm5zIGEgc3RyZWFtIHRoYXQgZW1pdHMgdGhlIHNhbWUgZXZlbnRzIGFzIHRoaXMgc3RyZWFtLAogICAqIGV4Y2VwdCB0aGF0IGRhdGEgZXZlbnRzIGFyZSBub3QgZW1pdHRlZCB1bnRpbCBhIGRhdGEgZXZlbnQgZmFpbHMgYHRlc3RgLgogICAqIFRoZSB0ZXN0IGZhaWxzIHdoZW4gY2FsbGVkIHdpdGggYSBkYXRhIGV2ZW50CiAgICogaWYgaXQgcmV0dXJucyBhIG5vbi1gdHJ1ZWAgdmFsdWUgb3IgaWYgdGhlIGNhbGwgdG8gYHRlc3RgIHRocm93cy4KICAgKiBJZiB0aGUgY2FsbCB0aHJvd3MsIHRoZSBlcnJvciBpcyBlbWl0dGVkIGFzIGFuIGVycm9yIGV2ZW50CiAgICogb24gdGhlIHJldHVybmVkIHN0cmVhbSBpbnN0ZWFkIG9mIHRoZSBkYXRhIGV2ZW50LAogICAqIG90aGVyd2lzZSB0aGUgZXZlbnQgdGhhdCBtYWRlIGB0ZXN0YCByZXR1cm4gbm9uLXRydWUgaXMgZW1pdHRlZCBhcyB0aGUKICAgKiBmaXJzdCBkYXRhIGV2ZW50LgogICAqCiAgICogRXJyb3IgYW5kIGRvbmUgZXZlbnRzIGFyZSBwcm92aWRlZCBieSB0aGUgcmV0dXJuZWQgc3RyZWFtIHVubW9kaWZpZWQuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgc3RyZWFtIGlzIGEgYnJvYWRjYXN0IHN0cmVhbSBpZiB0aGlzIHN0cmVhbSBpcy4KICAgKiBGb3IgYSBicm9hZGNhc3Qgc3RyZWFtLCB0aGUgZXZlbnRzIGFyZSBvbmx5IHRlc3RlZCBmcm9tIHRoZSB0aW1lCiAgICogdGhlIHJldHVybmVkIHN0cmVhbSBpcyBsaXN0ZW5lZCB0by4KICAgKi8KICBTdHJlYW08VD4gc2tpcFdoaWxlKGJvb2wgdGVzdChUIGVsZW1lbnQpKSB7CiAgICByZXR1cm4gbmV3IF9Ta2lwV2hpbGVTdHJlYW08VD4odGhpcywgdGVzdCk7CiAgfQoKICAvKioKICAgKiBTa2lwcyBkYXRhIGV2ZW50cyBpZiB0aGV5IGFyZSBlcXVhbCB0byB0aGUgcHJldmlvdXMgZGF0YSBldmVudC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gcHJvdmlkZXMgdGhlIHNhbWUgZXZlbnRzIGFzIHRoaXMgc3RyZWFtLCBleGNlcHQKICAgKiB0aGF0IGl0IG5ldmVyIHByb3ZpZGVzIHR3byBjb25zZWN1dGl2ZSBkYXRhIGV2ZW50cyB0aGF0IGFyZSBlcXVhbC4KICAgKiBUaGF0IGlzLCBlcnJvcnMgYXJlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSByZXR1cm5lZCBzdHJlYW0sIGFuZAogICAqIGRhdGEgZXZlbnRzIGFyZSBwYXNzZWQgdGhyb3VnaCBpZiB0aGV5IGFyZSBkaXN0aW5jdCBmcm9tIHRoZSBtb3N0CiAgICogcmVjZW50bHkgZW1pdHRlZCBkYXRhIGV2ZW50LgogICAqCiAgICogRXF1YWxpdHkgaXMgZGV0ZXJtaW5lZCBieSB0aGUgcHJvdmlkZWQgW2VxdWFsc10gbWV0aG9kLiBJZiB0aGF0IGlzCiAgICogb21pdHRlZCwgdGhlICc9PScgb3BlcmF0b3Igb24gdGhlIGxhc3QgcHJvdmlkZWQgZGF0YSBlbGVtZW50IGlzIHVzZWQuCiAgICoKICAgKiBJZiBbZXF1YWxzXSB0aHJvd3MsIHRoZSBkYXRhIGV2ZW50IGlzIHJlcGxhY2VkIGJ5IGFuIGVycm9yIGV2ZW50CiAgICogY29udGFpbmluZyB0aGUgdGhyb3duIGVycm9yLiBUaGUgYmVoYXZpb3IgaXMgZXF1aXZhbGVudCB0byB0aGUKICAgKiBvcmlnaW5hbCBzdHJlYW0gZW1pdHRpbmcgdGhlIGVycm9yIGV2ZW50LCBhbmQgaXQgZG9lc24ndCBjaGFuZ2UKICAgKiB0aGUgd2hhdCB0aGUgbW9zdCByZWNlbnRseSBlbWl0dGVkIGRhdGEgZXZlbnQgaXMuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgc3RyZWFtIGlzIGEgYnJvYWRjYXN0IHN0cmVhbSBpZiB0aGlzIHN0cmVhbSBpcy4KICAgKiBJZiBhIGJyb2FkY2FzdCBzdHJlYW0gaXMgbGlzdGVuZWQgdG8gbW9yZSB0aGFuIG9uY2UsIGVhY2ggc3Vic2NyaXB0aW9uCiAgICogd2lsbCBpbmRpdmlkdWFsbHkgcGVyZm9ybSB0aGUgYGVxdWFsc2AgdGVzdC4KICAgKi8KICBTdHJlYW08VD4gZGlzdGluY3QoW2Jvb2wgZXF1YWxzKFQgcHJldmlvdXMsIFQgbmV4dCldKSB7CiAgICByZXR1cm4gbmV3IF9EaXN0aW5jdFN0cmVhbTxUPih0aGlzLCBlcXVhbHMpOwogIH0KCiAgLyoqCiAgICogVGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhpcyBzdHJlYW0uCiAgICoKICAgKiBTdG9wcyBsaXN0ZW5pbmcgdG8gdGhpcyBzdHJlYW0gYWZ0ZXIgdGhlIGZpcnN0IGVsZW1lbnQgaGFzIGJlZW4gcmVjZWl2ZWQuCiAgICoKICAgKiBJbnRlcm5hbGx5IHRoZSBtZXRob2QgY2FuY2VscyBpdHMgc3Vic2NyaXB0aW9uIGFmdGVyIHRoZSBmaXJzdCBlbGVtZW50LgogICAqIFRoaXMgbWVhbnMgdGhhdCBzaW5nbGUtc3Vic2NyaXB0aW9uIChub24tYnJvYWRjYXN0KSBzdHJlYW1zIGFyZSBjbG9zZWQKICAgKiBhbmQgY2Fubm90IGJlIHJldXNlZCBhZnRlciBhIGNhbGwgdG8gdGhpcyBnZXR0ZXIuCiAgICoKICAgKiBJZiBhbiBlcnJvciBldmVudCBvY2N1cnMgYmVmb3JlIHRoZSBmaXJzdCBkYXRhIGV2ZW50LCB0aGUgcmV0dXJuZWQgZnV0dXJlCiAgICogaXMgY29tcGxldGVkIHdpdGggdGhhdCBlcnJvci4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGlzIGVtcHR5IChhIGRvbmUgZXZlbnQgb2NjdXJzIGJlZm9yZSB0aGUgZmlyc3QgZGF0YSBldmVudCksCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhbiBlcnJvci4KICAgKgogICAqIEV4Y2VwdCBmb3IgdGhlIHR5cGUgb2YgdGhlIGVycm9yLCB0aGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvCiAgICogYHRoaXMuZWxlbWVudEF0KDApYC4KICAgKi8KICBGdXR1cmU8VD4gZ2V0IGZpcnN0IHsKICAgIF9GdXR1cmU8VD4gZnV0dXJlID0gbmV3IF9GdXR1cmU8VD4oKTsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb247CiAgICBzdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlbigKICAgICAgICAoVCB2YWx1ZSkgewogICAgICAgICAgX2NhbmNlbEFuZFZhbHVlKHN1YnNjcmlwdGlvbiwgZnV0dXJlLCB2YWx1ZSk7CiAgICAgICAgfSwKICAgICAgICBvbkVycm9yOiBmdXR1cmUuX2NvbXBsZXRlRXJyb3IsCiAgICAgICAgb25Eb25lOiAoKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgICAgX2NvbXBsZXRlV2l0aEVycm9yQ2FsbGJhY2soZnV0dXJlLCBlLCBzKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9CgogIC8qKgogICAqIFRoZSBsYXN0IGVsZW1lbnQgb2YgdGhpcyBzdHJlYW0uCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBlbWl0cyBhbiBlcnJvciBldmVudCwKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQgZXJyb3IKICAgKiBhbmQgcHJvY2Vzc2luZyBzdG9wcy4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGlzIGVtcHR5ICh0aGUgZG9uZSBldmVudCBpcyB0aGUgZmlyc3QgZXZlbnQpLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzIHdpdGggYW4gZXJyb3IuCiAgICovCiAgRnV0dXJlPFQ+IGdldCBsYXN0IHsKICAgIF9GdXR1cmU8VD4gZnV0dXJlID0gbmV3IF9GdXR1cmU8VD4oKTsKICAgIFQgcmVzdWx0OwogICAgYm9vbCBmb3VuZFJlc3VsdCA9IGZhbHNlOwogICAgbGlzdGVuKAogICAgICAgIChUIHZhbHVlKSB7CiAgICAgICAgICBmb3VuZFJlc3VsdCA9IHRydWU7CiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTsKICAgICAgICB9LAogICAgICAgIG9uRXJyb3I6IGZ1dHVyZS5fY29tcGxldGVFcnJvciwKICAgICAgICBvbkRvbmU6ICgpIHsKICAgICAgICAgIGlmIChmb3VuZFJlc3VsdCkgewogICAgICAgICAgICBmdXR1cmUuX2NvbXBsZXRlKHJlc3VsdCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgICAgICBfY29tcGxldGVXaXRoRXJyb3JDYWxsYmFjayhmdXR1cmUsIGUsIHMpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICByZXR1cm4gZnV0dXJlOwogIH0KCiAgLyoqCiAgICogVGhlIHNpbmdsZSBlbGVtZW50IG9mIHRoaXMgc3RyZWFtLgogICAqCiAgICogSWYgdGhpcyBzdHJlYW0gZW1pdHMgYW4gZXJyb3IgZXZlbnQsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGF0IGVycm9yCiAgICogYW5kIHByb2Nlc3Npbmcgc3RvcHMuCiAgICoKICAgKiBJZiBbdGhpc10gaXMgZW1wdHkgb3IgaGFzIG1vcmUgdGhhbiBvbmUgZWxlbWVudCwKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGVycm9yLgogICAqLwogIEZ1dHVyZTxUPiBnZXQgc2luZ2xlIHsKICAgIF9GdXR1cmU8VD4gZnV0dXJlID0gbmV3IF9GdXR1cmU8VD4oKTsKICAgIFQgcmVzdWx0OwogICAgYm9vbCBmb3VuZFJlc3VsdCA9IGZhbHNlOwogICAgU3RyZWFtU3Vic2NyaXB0aW9uIHN1YnNjcmlwdGlvbjsKICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMubGlzdGVuKAogICAgICAgIChUIHZhbHVlKSB7CiAgICAgICAgICBpZiAoZm91bmRSZXN1bHQpIHsKICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgc2Vjb25kIGVsZW1lbnQgd2UgZ2V0LgogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgICAgICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgICAgICAgIF9jYW5jZWxBbmRFcnJvcldpdGhSZXBsYWNlbWVudChzdWJzY3JpcHRpb24sIGZ1dHVyZSwgZSwgcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgZm91bmRSZXN1bHQgPSB0cnVlOwogICAgICAgICAgcmVzdWx0ID0gdmFsdWU7CiAgICAgICAgfSwKICAgICAgICBvbkVycm9yOiBmdXR1cmUuX2NvbXBsZXRlRXJyb3IsCiAgICAgICAgb25Eb25lOiAoKSB7CiAgICAgICAgICBpZiAoZm91bmRSZXN1bHQpIHsKICAgICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZShyZXN1bHQpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0cnkgewogICAgICAgICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgICAgX2NvbXBsZXRlV2l0aEVycm9yQ2FsbGJhY2soZnV0dXJlLCBlLCBzKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9CgogIC8qKgogICAqIEZpbmRzIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoaXMgc3RyZWFtIG1hdGNoaW5nIFt0ZXN0XS4KICAgKgogICAqIFJldHVybnMgYSBmdXR1cmUgdGhhdCBpcyBjb21wbGV0ZWQgd2l0aCB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGlzIHN0cmVhbQogICAqIHRoYXQgW3Rlc3RdIHJldHVybnMgYHRydWVgIGZvci4KICAgKgogICAqIElmIG5vIHN1Y2ggZWxlbWVudCBpcyBmb3VuZCBiZWZvcmUgdGhpcyBzdHJlYW0gaXMgZG9uZSwgYW5kIGEKICAgKiBbb3JFbHNlXSBmdW5jdGlvbiBpcyBwcm92aWRlZCwgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIFtvckVsc2VdCiAgICogYmVjb21lcyB0aGUgdmFsdWUgb2YgdGhlIGZ1dHVyZS4gSWYgW29yRWxzZV0gdGhyb3dzLCB0aGUgcmV0dXJuZWQKICAgKiBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhhdCBlcnJvci4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGVtaXRzIGFuIGVycm9yIGJlZm9yZSB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQgZXJyb3IsIGFuZCBwcm9jZXNzaW5nIHN0b3BzLgogICAqCiAgICogU3RvcHMgbGlzdGVuaW5nIHRvIHRoaXMgc3RyZWFtIGFmdGVyIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50IG9yIGVycm9yCiAgICogaGFzIGJlZW4gcmVjZWl2ZWQuCiAgICoKICAgKiBJbnRlcm5hbGx5IHRoZSBtZXRob2QgY2FuY2VscyBpdHMgc3Vic2NyaXB0aW9uIGFmdGVyIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQKICAgKiBtYXRjaGVzIHRoZSBwcmVkaWNhdGUuIFRoaXMgbWVhbnMgdGhhdCBzaW5nbGUtc3Vic2NyaXB0aW9uIChub24tYnJvYWRjYXN0KQogICAqIHN0cmVhbXMgYXJlIGNsb3NlZCBhbmQgY2Fubm90IGJlIHJldXNlZCBhZnRlciBhIGNhbGwgdG8gdGhpcyBtZXRob2QuCiAgICoKICAgKiBJZiBhbiBlcnJvciBvY2N1cnMsIG9yIGlmIHRoaXMgc3RyZWFtIGVuZHMgd2l0aG91dCBmaW5kaW5nIGEgbWF0Y2ggYW5kCiAgICogd2l0aCBubyBbb3JFbHNlXSBmdW5jdGlvbiBwcm92aWRlZCwKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIGFuIGVycm9yLgogICAqLwogIEZ1dHVyZTxUPiBmaXJzdFdoZXJlKGJvb2wgdGVzdChUIGVsZW1lbnQpLCB7VCBvckVsc2UoKX0pIHsKICAgIF9GdXR1cmU8VD4gZnV0dXJlID0gbmV3IF9GdXR1cmUoKTsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb247CiAgICBzdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlbigKICAgICAgICAoVCB2YWx1ZSkgewogICAgICAgICAgX3J1blVzZXJDb2RlKCgpID0+IHRlc3QodmFsdWUpLCAoYm9vbCBpc01hdGNoKSB7CiAgICAgICAgICAgIGlmIChpc01hdGNoKSB7CiAgICAgICAgICAgICAgX2NhbmNlbEFuZFZhbHVlKHN1YnNjcmlwdGlvbiwgZnV0dXJlLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIF9jYW5jZWxBbmRFcnJvckNsb3N1cmUoc3Vic2NyaXB0aW9uLCBmdXR1cmUpKTsKICAgICAgICB9LAogICAgICAgIG9uRXJyb3I6IGZ1dHVyZS5fY29tcGxldGVFcnJvciwKICAgICAgICBvbkRvbmU6ICgpIHsKICAgICAgICAgIGlmIChvckVsc2UgIT0gbnVsbCkgewogICAgICAgICAgICBfcnVuVXNlckNvZGUob3JFbHNlLCBmdXR1cmUuX2NvbXBsZXRlLCBmdXR1cmUuX2NvbXBsZXRlRXJyb3IpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0cnkgewogICAgICAgICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgICAgX2NvbXBsZXRlV2l0aEVycm9yQ2FsbGJhY2soZnV0dXJlLCBlLCBzKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9CgogIC8qKgogICAqIEZpbmRzIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhpcyBzdHJlYW0gbWF0Y2hpbmcgW3Rlc3RdLgogICAqCiAgICogSWYgdGhpcyBzdHJlYW0gZW1pdHMgYW4gZXJyb3IsIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhhdAogICAqIGVycm9yLCBhbmQgcHJvY2Vzc2luZyBzdG9wcy4KICAgKgogICAqIE90aGVyd2lzZSBhcyBbZmlyc3RXaGVyZV0sIGV4Y2VwdCB0aGF0IHRoZSBsYXN0IG1hdGNoaW5nIGVsZW1lbnQgaXMgZm91bmQKICAgKiBpbnN0ZWFkIG9mIHRoZSBmaXJzdC4KICAgKiBUaGF0IG1lYW5zIHRoYXQgYSBub24tZXJyb3IgcmVzdWx0IGNhbm5vdCBiZSBwcm92aWRlZCBiZWZvcmUgdGhpcyBzdHJlYW0KICAgKiBpcyBkb25lLgogICAqLwogIEZ1dHVyZTxUPiBsYXN0V2hlcmUoYm9vbCB0ZXN0KFQgZWxlbWVudCksIHtUIG9yRWxzZSgpfSkgewogICAgX0Z1dHVyZTxUPiBmdXR1cmUgPSBuZXcgX0Z1dHVyZSgpOwogICAgVCByZXN1bHQ7CiAgICBib29sIGZvdW5kUmVzdWx0ID0gZmFsc2U7CiAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uOwogICAgc3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW4oCiAgICAgICAgKFQgdmFsdWUpIHsKICAgICAgICAgIF9ydW5Vc2VyQ29kZSgoKSA9PiB0cnVlID09IHRlc3QodmFsdWUpLCAoYm9vbCBpc01hdGNoKSB7CiAgICAgICAgICAgIGlmIChpc01hdGNoKSB7CiAgICAgICAgICAgICAgZm91bmRSZXN1bHQgPSB0cnVlOwogICAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBfY2FuY2VsQW5kRXJyb3JDbG9zdXJlKHN1YnNjcmlwdGlvbiwgZnV0dXJlKSk7CiAgICAgICAgfSwKICAgICAgICBvbkVycm9yOiBmdXR1cmUuX2NvbXBsZXRlRXJyb3IsCiAgICAgICAgb25Eb25lOiAoKSB7CiAgICAgICAgICBpZiAoZm91bmRSZXN1bHQpIHsKICAgICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZShyZXN1bHQpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBpZiAob3JFbHNlICE9IG51bGwpIHsKICAgICAgICAgICAgX3J1blVzZXJDb2RlKG9yRWxzZSwgZnV0dXJlLl9jb21wbGV0ZSwgZnV0dXJlLl9jb21wbGV0ZUVycm9yKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICAgIF9jb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrKGZ1dHVyZSwgZSwgcyk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICAvKioKICAgKiBGaW5kcyB0aGUgc2luZ2xlIGVsZW1lbnQgaW4gdGhpcyBzdHJlYW0gbWF0Y2hpbmcgW3Rlc3RdLgogICAqCiAgICogTGlrZSBbbGFzdFdoZXJlXSwgZXhjZXB0IHRoYXQgaXQgaXMgYW4gZXJyb3IgaWYgbW9yZSB0aGFuIG9uZQogICAqIG1hdGNoaW5nIGVsZW1lbnQgb2NjdXJzIGluIHRoaXMgc3RyZWFtLgogICAqLwogIEZ1dHVyZTxUPiBzaW5nbGVXaGVyZShib29sIHRlc3QoVCBlbGVtZW50KSwge1Qgb3JFbHNlKCl9KSB7CiAgICBfRnV0dXJlPFQ+IGZ1dHVyZSA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgICBUIHJlc3VsdDsKICAgIGJvb2wgZm91bmRSZXN1bHQgPSBmYWxzZTsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb247CiAgICBzdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlbigKICAgICAgICAoVCB2YWx1ZSkgewogICAgICAgICAgX3J1blVzZXJDb2RlKCgpID0+IHRydWUgPT0gdGVzdCh2YWx1ZSksIChib29sIGlzTWF0Y2gpIHsKICAgICAgICAgICAgaWYgKGlzTWF0Y2gpIHsKICAgICAgICAgICAgICBpZiAoZm91bmRSZXN1bHQpIHsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgICAgICAgICAgX2NhbmNlbEFuZEVycm9yV2l0aFJlcGxhY2VtZW50KHN1YnNjcmlwdGlvbiwgZnV0dXJlLCBlLCBzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZm91bmRSZXN1bHQgPSB0cnVlOwogICAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBfY2FuY2VsQW5kRXJyb3JDbG9zdXJlKHN1YnNjcmlwdGlvbiwgZnV0dXJlKSk7CiAgICAgICAgfSwKICAgICAgICBvbkVycm9yOiBmdXR1cmUuX2NvbXBsZXRlRXJyb3IsCiAgICAgICAgb25Eb25lOiAoKSB7CiAgICAgICAgICBpZiAoZm91bmRSZXN1bHQpIHsKICAgICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZShyZXN1bHQpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAob3JFbHNlICE9IG51bGwpIHsKICAgICAgICAgICAgICBfcnVuVXNlckNvZGUob3JFbHNlLCBmdXR1cmUuX2NvbXBsZXRlLCBmdXR1cmUuX2NvbXBsZXRlRXJyb3IpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgICAgX2NvbXBsZXRlV2l0aEVycm9yQ2FsbGJhY2soZnV0dXJlLCBlLCBzKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBbaW5kZXhddGggZGF0YSBldmVudCBvZiB0aGlzIHN0cmVhbS4KICAgKgogICAqIFN0b3BzIGxpc3RlbmluZyB0byB0aGlzIHN0cmVhbSBhZnRlciB0aGUgW2luZGV4XXRoIGRhdGEgZXZlbnQgaGFzIGJlZW4KICAgKiByZWNlaXZlZC4KICAgKgogICAqIEludGVybmFsbHkgdGhlIG1ldGhvZCBjYW5jZWxzIGl0cyBzdWJzY3JpcHRpb24gYWZ0ZXIgdGhlc2UgZWxlbWVudHMuIFRoaXMKICAgKiBtZWFucyB0aGF0IHNpbmdsZS1zdWJzY3JpcHRpb24gKG5vbi1icm9hZGNhc3QpIHN0cmVhbXMgYXJlIGNsb3NlZCBhbmQKICAgKiBjYW5ub3QgYmUgcmV1c2VkIGFmdGVyIGEgY2FsbCB0byB0aGlzIG1ldGhvZC4KICAgKgogICAqIElmIGFuIGVycm9yIGV2ZW50IG9jY3VycyBiZWZvcmUgdGhlIHZhbHVlIGlzIGZvdW5kLCB0aGUgZnV0dXJlIGNvbXBsZXRlcwogICAqIHdpdGggdGhpcyBlcnJvci4KICAgKgogICAqIElmIGEgZG9uZSBldmVudCBvY2N1cnMgYmVmb3JlIHRoZSB2YWx1ZSBpcyBmb3VuZCwgdGhlIGZ1dHVyZSBjb21wbGV0ZXMKICAgKiB3aXRoIGEgW1JhbmdlRXJyb3JdLgogICAqLwogIEZ1dHVyZTxUPiBlbGVtZW50QXQoaW50IGluZGV4KSB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChpbmRleCwgImluZGV4Iik7CiAgICBSYW5nZUVycm9yLmNoZWNrTm90TmVnYXRpdmUoaW5kZXgsICJpbmRleCIpOwogICAgX0Z1dHVyZTxUPiBmdXR1cmUgPSBuZXcgX0Z1dHVyZTxUPigpOwogICAgU3RyZWFtU3Vic2NyaXB0aW9uIHN1YnNjcmlwdGlvbjsKICAgIGludCBlbGVtZW50SW5kZXggPSAwOwogICAgc3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW4oCiAgICAgICAgKFQgdmFsdWUpIHsKICAgICAgICAgIGlmIChpbmRleCA9PSBlbGVtZW50SW5kZXgpIHsKICAgICAgICAgICAgX2NhbmNlbEFuZFZhbHVlKHN1YnNjcmlwdGlvbiwgZnV0dXJlLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGVsZW1lbnRJbmRleCArPSAxOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZUVycm9yKAogICAgICAgICAgICAgIG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiLCBudWxsLCBlbGVtZW50SW5kZXgpKTsKICAgICAgICB9LAogICAgICAgIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgc3RyZWFtIHdpdGggdGhlIHNhbWUgZXZlbnRzIGFzIHRoaXMgc3RyZWFtLgogICAqCiAgICogV2hlbmV2ZXIgbW9yZSB0aGFuIFt0aW1lTGltaXRdIHBhc3NlcyBiZXR3ZWVuIHR3byBldmVudHMgZnJvbSB0aGlzIHN0cmVhbSwKICAgKiB0aGUgW29uVGltZW91dF0gZnVuY3Rpb24gaXMgY2FsbGVkLCB3aGljaCBjYW4gZW1pdCBmdXJ0aGVyIGV2ZW50cyBvbgogICAqIHRoZSByZXR1cm5lZCBzdHJlYW0uCiAgICoKICAgKiBUaGUgY291bnRkb3duIGRvZXNuJ3Qgc3RhcnQgdW50aWwgdGhlIHJldHVybmVkIHN0cmVhbSBpcyBsaXN0ZW5lZCB0by4KICAgKiBUaGUgY291bnRkb3duIGlzIHJlc2V0IGV2ZXJ5IHRpbWUgYW4gZXZlbnQgaXMgZm9yd2FyZGVkIGZyb20gdGhpcyBzdHJlYW0sCiAgICogb3Igd2hlbiB0aGlzIHN0cmVhbSBpcyBwYXVzZWQgYW5kIHJlc3VtZWQuCiAgICoKICAgKiBUaGUgW29uVGltZW91dF0gZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggb25lIGFyZ3VtZW50OiBhbgogICAqIFtFdmVudFNpbmtdIHRoYXQgYWxsb3dzIHB1dHRpbmcgZXZlbnRzIGludG8gdGhlIHJldHVybmVkIHN0cmVhbS4KICAgKiBUaGlzIGBFdmVudFNpbmtgIGlzIG9ubHkgdmFsaWQgZHVyaW5nIHRoZSBjYWxsIHRvIFtvblRpbWVvdXRdLgogICAqIENhbGxpbmcgW0V2ZW50U2luay5jbG9zZV0gb24gdGhlIHNpbmsgcGFzc2VkIHRvIFtvblRpbWVvdXRdIGNsb3NlcyB0aGUKICAgKiByZXR1cm5lZCBzdHJlYW0sIGFuZCBubyBmdXJ0aGVyIGV2ZW50cyBhcmUgcHJvY2Vzc2VkLgogICAqCiAgICogSWYgW29uVGltZW91dF0gaXMgb21pdHRlZCwgYSB0aW1lb3V0IHdpbGwganVzdCBwdXQgYSBbVGltZW91dEV4Y2VwdGlvbl0KICAgKiBpbnRvIHRoZSBlcnJvciBjaGFubmVsIG9mIHRoZSByZXR1cm5lZCBzdHJlYW0uCiAgICogSWYgdGhlIGNhbGwgdG8gW29uVGltZW91dF0gdGhyb3dzLCB0aGUgZXJyb3IgaXMgZW1pdHRlZCBvbiB0aGUgcmV0dXJuZWQKICAgKiBzdHJlYW0uCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgc3RyZWFtIGlzIGEgYnJvYWRjYXN0IHN0cmVhbSBpZiB0aGlzIHN0cmVhbSBpcy4KICAgKiBJZiBhIGJyb2FkY2FzdCBzdHJlYW0gaXMgbGlzdGVuZWQgdG8gbW9yZSB0aGFuIG9uY2UsIGVhY2ggc3Vic2NyaXB0aW9uCiAgICogd2lsbCBoYXZlIGl0cyBpbmRpdmlkdWFsbHkgdGltZXIgdGhhdCBzdGFydHMgY291bnRpbmcgb24gbGlzdGVuLAogICAqIGFuZCB0aGUgc3Vic2NyaXB0aW9ucycgdGltZXJzIGNhbiBiZSBwYXVzZWQgaW5kaXZpZHVhbGx5LgogICAqLwogIFN0cmVhbTxUPiB0aW1lb3V0KER1cmF0aW9uIHRpbWVMaW1pdCwge3ZvaWQgb25UaW1lb3V0KEV2ZW50U2luazxUPiBzaW5rKX0pIHsKICAgIF9TdHJlYW1Db250cm9sbGVyQmFzZTxUPiBjb250cm9sbGVyOwogICAgLy8gVGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgYXJlIHNldCBvbiBsaXN0ZW4uCiAgICBTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uOwogICAgVGltZXIgdGltZXI7CiAgICBab25lIHpvbmU7CiAgICBfVGltZXJDYWxsYmFjayB0aW1lb3V0OwoKICAgIHZvaWQgb25EYXRhKFQgZXZlbnQpIHsKICAgICAgdGltZXIuY2FuY2VsKCk7CiAgICAgIHRpbWVyID0gem9uZS5jcmVhdGVUaW1lcih0aW1lTGltaXQsIHRpbWVvdXQpOwogICAgICAvLyBJdCBtaWdodCBjbG9zZSB0aGUgc3RyZWFtIGFuZCBjYW5jZWwgdGltZXIsIHNvIGNyZWF0ZSByZWN1cmluZyBUaW1lcgogICAgICAvLyBiZWZvcmUgY2FsbGluZyBpbnRvIGFkZCgpOwogICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9zZGsvaXNzdWVzLzM3NTY1CiAgICAgIGNvbnRyb2xsZXIuYWRkKGV2ZW50KTsKICAgIH0KCiAgICB2b2lkIG9uRXJyb3IoZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgICB0aW1lci5jYW5jZWwoKTsKICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIgaXMgX1N0cmVhbUNvbnRyb2xsZXIgfHwKICAgICAgICAgIGNvbnRyb2xsZXIgaXMgX0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXIpOwogICAgICBjb250cm9sbGVyLl9hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7IC8vIEF2b2lkIFpvbmUgZXJyb3IgcmVwbGFjZW1lbnQuCiAgICAgIHRpbWVyID0gem9uZS5jcmVhdGVUaW1lcih0aW1lTGltaXQsIHRpbWVvdXQpOwogICAgfQoKICAgIHZvaWQgb25Eb25lKCkgewogICAgICB0aW1lci5jYW5jZWwoKTsKICAgICAgY29udHJvbGxlci5jbG9zZSgpOwogICAgfQoKICAgIHZvaWQgb25MaXN0ZW4oKSB7CiAgICAgIC8vIFRoaXMgaXMgdGhlIG9uTGlzdGVuIGNhbGxiYWNrIGZvciBvZiBjb250cm9sbGVyLgogICAgICAvLyBJdCBydW5zIGluIHRoZSBzYW1lIHpvbmUgdGhhdCB0aGUgc3Vic2NyaXB0aW9uIHdhcyBjcmVhdGVkIGluLgogICAgICAvLyBVc2UgdGhhdCB6b25lIGZvciBjcmVhdGluZyB0aW1lcnMgYW5kIHJ1bm5pbmcgdGhlIG9uVGltZW91dAogICAgICAvLyBjYWxsYmFjay4KICAgICAgem9uZSA9IFpvbmUuY3VycmVudDsKICAgICAgaWYgKG9uVGltZW91dCA9PSBudWxsKSB7CiAgICAgICAgdGltZW91dCA9ICgpIHsKICAgICAgICAgIGNvbnRyb2xsZXIuYWRkRXJyb3IoCiAgICAgICAgICAgICAgbmV3IFRpbWVvdXRFeGNlcHRpb24oIk5vIHN0cmVhbSBldmVudCIsIHRpbWVMaW1pdCksIG51bGwpOwogICAgICAgIH07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gVE9ETyhmbG9pdHNjaCk6IHRoZSByZXR1cm4gdHlwZSBzaG91bGQgYmUgJ3ZvaWQnLCBhbmQgdGhlIHR5cGUKICAgICAgICAvLyBzaG91bGQgYmUgaW5mZXJyZWQuCiAgICAgICAgdmFyIHJlZ2lzdGVyZWRPblRpbWVvdXQgPQogICAgICAgICAgICB6b25lLnJlZ2lzdGVyVW5hcnlDYWxsYmFjazxkeW5hbWljLCBFdmVudFNpbms8VD4+KG9uVGltZW91dCk7CiAgICAgICAgdmFyIHdyYXBwZXIgPSBuZXcgX0NvbnRyb2xsZXJFdmVudFNpbmtXcmFwcGVyPFQ+KG51bGwpOwogICAgICAgIHRpbWVvdXQgPSAoKSB7CiAgICAgICAgICB3cmFwcGVyLl9zaW5rID0gY29udHJvbGxlcjsgLy8gT25seSB2YWxpZCBkdXJpbmcgY2FsbC4KICAgICAgICAgIHpvbmUucnVuVW5hcnlHdWFyZGVkKHJlZ2lzdGVyZWRPblRpbWVvdXQsIHdyYXBwZXIpOwogICAgICAgICAgd3JhcHBlci5fc2luayA9IG51bGw7CiAgICAgICAgfTsKICAgICAgfQoKICAgICAgc3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW4ob25EYXRhLCBvbkVycm9yOiBvbkVycm9yLCBvbkRvbmU6IG9uRG9uZSk7CiAgICAgIHRpbWVyID0gem9uZS5jcmVhdGVUaW1lcih0aW1lTGltaXQsIHRpbWVvdXQpOwogICAgfQoKICAgIEZ1dHVyZSBvbkNhbmNlbCgpIHsKICAgICAgdGltZXIuY2FuY2VsKCk7CiAgICAgIEZ1dHVyZSByZXN1bHQgPSBzdWJzY3JpcHRpb24uY2FuY2VsKCk7CiAgICAgIHN1YnNjcmlwdGlvbiA9IG51bGw7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgY29udHJvbGxlciA9IGlzQnJvYWRjYXN0CiAgICAgICAgPyBuZXcgX1N5bmNCcm9hZGNhc3RTdHJlYW1Db250cm9sbGVyPFQ+KG9uTGlzdGVuLCBvbkNhbmNlbCkKICAgICAgICA6IG5ldyBfU3luY1N0cmVhbUNvbnRyb2xsZXI8VD4ob25MaXN0ZW4sICgpIHsKICAgICAgICAgICAgLy8gRG9uJ3QgbnVsbCB0aGUgdGltZXIsIG9uQ2FuY2VsIG1heSBjYWxsIGNhbmNlbCBhZ2Fpbi4KICAgICAgICAgICAgdGltZXIuY2FuY2VsKCk7CiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5wYXVzZSgpOwogICAgICAgICAgfSwgKCkgewogICAgICAgICAgICBzdWJzY3JpcHRpb24ucmVzdW1lKCk7CiAgICAgICAgICAgIHRpbWVyID0gem9uZS5jcmVhdGVUaW1lcih0aW1lTGltaXQsIHRpbWVvdXQpOwogICAgICAgICAgfSwgb25DYW5jZWwpOwogICAgcmV0dXJuIGNvbnRyb2xsZXIuc3RyZWFtOwogIH0KfQoKLyoqCiAqIEEgc3Vic2NyaXB0aW9uIG9uIGV2ZW50cyBmcm9tIGEgW1N0cmVhbV0uCiAqCiAqIFdoZW4geW91IGxpc3RlbiBvbiBhIFtTdHJlYW1dIHVzaW5nIFtTdHJlYW0ubGlzdGVuXSwKICogYSBbU3RyZWFtU3Vic2NyaXB0aW9uXSBvYmplY3QgaXMgcmV0dXJuZWQuCiAqCiAqIFRoZSBzdWJzY3JpcHRpb24gcHJvdmlkZXMgZXZlbnRzIHRvIHRoZSBsaXN0ZW5lciwKICogYW5kIGhvbGRzIHRoZSBjYWxsYmFja3MgdXNlZCB0byBoYW5kbGUgdGhlIGV2ZW50cy4KICogVGhlIHN1YnNjcmlwdGlvbiBjYW4gYWxzbyBiZSB1c2VkIHRvIHVuc3Vic2NyaWJlIGZyb20gdGhlIGV2ZW50cywKICogb3IgdG8gdGVtcG9yYXJpbHkgcGF1c2UgdGhlIGV2ZW50cyBmcm9tIHRoZSBzdHJlYW0uCiAqLwphYnN0cmFjdCBjbGFzcyBTdHJlYW1TdWJzY3JpcHRpb248VD4gewogIC8qKgogICAqIENhbmNlbHMgdGhpcyBzdWJzY3JpcHRpb24uCiAgICoKICAgKiBBZnRlciB0aGlzIGNhbGwsIHRoZSBzdWJzY3JpcHRpb24gbm8gbG9uZ2VyIHJlY2VpdmVzIGV2ZW50cy4KICAgKgogICAqIFRoZSBzdHJlYW0gbWF5IG5lZWQgdG8gc2h1dCBkb3duIHRoZSBzb3VyY2Ugb2YgZXZlbnRzIGFuZCBjbGVhbiB1cCBhZnRlcgogICAqIHRoZSBzdWJzY3JpcHRpb24gaXMgY2FuY2VsZWQuCiAgICoKICAgKiBSZXR1cm5zIGEgZnV0dXJlIHRoYXQgaXMgY29tcGxldGVkIG9uY2UgdGhlIHN0cmVhbSBoYXMgZmluaXNoZWQKICAgKiBpdHMgY2xlYW51cC4KICAgKgogICAqIEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIG1heSBhbHNvIHJldHVybiBgbnVsbGAgaWYgbm8gY2xlYW51cCB3YXMgbmVjZXNzYXJ5LgogICAqIFJldHVybmluZyBgbnVsbGAgaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIGJlIGF2b2lkZWQuCiAgICoKICAgKiBUeXBpY2FsbHksIGZ1dHVyZXMgYXJlIHJldHVybmVkIHdoZW4gdGhlIHN0cmVhbSBuZWVkcyB0byByZWxlYXNlIHJlc291cmNlcy4KICAgKiBGb3IgZXhhbXBsZSwgYSBzdHJlYW0gbWlnaHQgbmVlZCB0byBjbG9zZSBhbiBvcGVuIGZpbGUgKGFzIGFuIGFzeW5jaHJvbm91cwogICAqIG9wZXJhdGlvbikuIElmIHRoZSBsaXN0ZW5lciB3YW50cyB0byBkZWxldGUgdGhlIGZpbGUgYWZ0ZXIgaGF2aW5nCiAgICogY2FuY2VsZWQgdGhlIHN1YnNjcmlwdGlvbiwgaXQgbXVzdCB3YWl0IGZvciB0aGUgY2xlYW51cCBmdXR1cmUgdG8gY29tcGxldGUuCiAgICoKICAgKiBBIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhIGBudWxsYCB2YWx1ZS4KICAgKiBJZiB0aGUgY2xlYW51cCB0aHJvd3MsIHdoaWNoIGl0IHJlYWxseSBzaG91bGRuJ3QsIHRoZSByZXR1cm5lZCBmdXR1cmUKICAgKiBjb21wbGV0ZXMgd2l0aCB0aGF0IGVycm9yLgogICAqLwogIEZ1dHVyZSBjYW5jZWwoKTsKCiAgLyoqCiAgICogUmVwbGFjZXMgdGhlIGRhdGEgZXZlbnQgaGFuZGxlciBvZiB0aGlzIHN1YnNjcmlwdGlvbi4KICAgKgogICAqIFRoZSBbaGFuZGxlRGF0YV0gZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBlYWNoIGVsZW1lbnQgb2YgdGhlIHN0cmVhbQogICAqIGFmdGVyIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgogICAqIElmIFtoYW5kbGVEYXRhXSBpcyBgbnVsbGAsIGZ1cnRoZXIgZWxlbWVudHMgYXJlIGlnbm9yZWQuCiAgICoKICAgKiBUaGlzIG1ldGhvZCByZXBsYWNlcyB0aGUgY3VycmVudCBoYW5kbGVyIHNldCBieSB0aGUgaW52b2NhdGlvbiBvZgogICAqIFtTdHJlYW0ubGlzdGVuXSBvciBieSBhIHByZXZpb3VzIGNhbGwgdG8gW29uRGF0YV0uCiAgICovCiAgdm9pZCBvbkRhdGEodm9pZCBoYW5kbGVEYXRhKFQgZGF0YSkpOwoKICAvKioKICAgKiBSZXBsYWNlcyB0aGUgZXJyb3IgZXZlbnQgaGFuZGxlciBvZiB0aGlzIHN1YnNjcmlwdGlvbi4KICAgKgogICAqIFRoZSBbaGFuZGxlRXJyb3JdIGZ1bmN0aW9uIG11c3QgYmUgYWJsZSB0byBiZSBjYWxsZWQgd2l0aCBlaXRoZXIKICAgKiBvbmUgcG9zaXRpb25hbCBhcmd1bWVudCwgb3Igd2l0aCB0d28gcG9zaXRpb25hbCBhcmd1bWVudHMKICAgKiB3aGVyZSB0aGUgc2Vjb25kcyBpcyBhbHdheXMgYSBbU3RhY2tUcmFjZV0uCiAgICoKICAgKiBUaGUgW2hhbmRsZUVycm9yXSBhcmd1bWVudCBtYXkgYmUgYG51bGxgLCBpbiB3aGljaCBjYXNlIGZ1cnRoZXIKICAgKiBlcnJvciBldmVudHMgYXJlIGNvbnNpZGVyZWQgdW5oYW5kbGVkLCBhbmQgd2lsbCBiZSByZXBvcnRlZCB0bwogICAqIFtab25lLmhhbmRsZVVuY2F1Z2h0RXJyb3JdLgogICAqCiAgICogVGhlIHByb3ZpZGVkIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgYWxsIGVycm9yIGV2ZW50cyBmcm9tIHRoZQogICAqIHN0cmVhbSBzdWJzY3JpcHRpb24uCiAgICoKICAgKiBUaGlzIG1ldGhvZCByZXBsYWNlcyB0aGUgY3VycmVudCBoYW5kbGVyIHNldCBieSB0aGUgaW52b2NhdGlvbiBvZgogICAqIFtTdHJlYW0ubGlzdGVuXSwgYnkgY2FsbGluZyBbYXNGdXR1cmVdLCBvciBieSBhIHByZXZpb3VzIGNhbGwgdG8gW29uRXJyb3JdLgogICAqLwogIHZvaWQgb25FcnJvcihGdW5jdGlvbiBoYW5kbGVFcnJvcik7CgogIC8qKgogICAqIFJlcGxhY2VzIHRoZSBkb25lIGV2ZW50IGhhbmRsZXIgb2YgdGhpcyBzdWJzY3JpcHRpb24uCiAgICoKICAgKiBUaGUgW2hhbmRsZURvbmVdIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBzdHJlYW0gY2xvc2VzLgogICAqIFRoZSB2YWx1ZSBtYXkgYmUgYG51bGxgLCBpbiB3aGljaCBjYXNlIG5vIGZ1bmN0aW9uIGlzIGNhbGxlZC4KICAgKgogICAqIFRoaXMgbWV0aG9kIHJlcGxhY2VzIHRoZSBjdXJyZW50IGhhbmRsZXIgc2V0IGJ5IHRoZSBpbnZvY2F0aW9uIG9mCiAgICogW1N0cmVhbS5saXN0ZW5dLCBieSBjYWxsaW5nIFthc0Z1dHVyZV0sIG9yIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBbb25Eb25lXS4KICAgKi8KICB2b2lkIG9uRG9uZSh2b2lkIGhhbmRsZURvbmUoKSk7CgogIC8qKgogICAqIFJlcXVlc3QgdGhhdCB0aGUgc3RyZWFtIHBhdXNlcyBldmVudHMgdW50aWwgZnVydGhlciBub3RpY2UuCiAgICoKICAgKiBXaGlsZSBwYXVzZWQsIHRoZSBzdWJzY3JpcHRpb24gd2lsbCBub3QgZmlyZSBhbnkgZXZlbnRzLgogICAqIElmIGl0IHJlY2VpdmVzIGV2ZW50cyBmcm9tIGl0cyBzb3VyY2UsIHRoZXkgd2lsbCBiZSBidWZmZXJlZCB1bnRpbAogICAqIHRoZSBzdWJzY3JpcHRpb24gaXMgcmVzdW1lZC4KICAgKiBGb3Igbm9uLWJyb2FkY2FzdCBzdHJlYW1zLCB0aGUgdW5kZXJseWluZyBzb3VyY2UgaXMgdXN1YWxseSBpbmZvcm1lZAogICAqIGFib3V0IHRoZSBwYXVzZSwKICAgKiBzbyBpdCBjYW4gc3RvcCBnZW5lcmF0aW5nIGV2ZW50cyB1bnRpbCB0aGUgc3Vic2NyaXB0aW9uIGlzIHJlc3VtZWQuCiAgICoKICAgKiBUbyBhdm9pZCBidWZmZXJpbmcgZXZlbnRzIG9uIGEgYnJvYWRjYXN0IHN0cmVhbSwgaXQgaXMgYmV0dGVyIHRvCiAgICogY2FuY2VsIHRoaXMgc3Vic2NyaXB0aW9uLCBhbmQgc3RhcnQgdG8gbGlzdGVuIGFnYWluIHdoZW4gZXZlbnRzCiAgICogYXJlIG5lZWRlZCwgaWYgdGhlIGludGVybWVkaWF0ZSBldmVudHMgYXJlIG5vdCBpbXBvcnRhbnQuCiAgICoKICAgKiBJZiBbcmVzdW1lU2lnbmFsXSBpcyBwcm92aWRlZCwgdGhlIHN0cmVhbSBzdWJzY3JpcHRpb24gd2lsbCB1bmRvIHRoZSBwYXVzZQogICAqIHdoZW4gdGhlIGZ1dHVyZSBjb21wbGV0ZXMsIGFzIGlmIGJ5IGEgY2FsbCB0byBbcmVzdW1lXS4KICAgKiBJZiB0aGUgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGVycm9yLAogICAqIHRoZSBzdHJlYW0gd2lsbCBzdGlsbCByZXN1bWUsIGJ1dCB0aGUgZXJyb3Igd2lsbCBiZSBjb25zaWRlcmVkIHVuaGFuZGxlZAogICAqIGFuZCBpcyBwYXNzZWQgdG8gW1pvbmUuaGFuZGxlVW5jYXVnaHRFcnJvcl0uCiAgICoKICAgKiBBIGNhbGwgdG8gW3Jlc3VtZV0gd2lsbCBhbHNvIHVuZG8gYSBwYXVzZS4KICAgKgogICAqIElmIHRoZSBzdWJzY3JpcHRpb24gaXMgcGF1c2VkIG1vcmUgdGhhbiBvbmNlLCBhbiBlcXVhbCBudW1iZXIKICAgKiBvZiByZXN1bWVzIG11c3QgYmUgcGVyZm9ybWVkIHRvIHJlc3VtZSB0aGUgc3RyZWFtLgogICAqIENhbGxzIHRvIFtyZXN1bWVdIGFuZCB0aGUgY29tcGxldGlvbiBvZiBhIFtyZXN1bWVTaWduYWxdIGFyZQogICAqIGludGVyY2hhbmdlYWJsZSAtIHRoZSBbcGF1c2VdIHdoaWNoIHdhcyBwYXNzZWQgYSBbcmVzdW1lU2lnbmFsXSBtYXkgYmUKICAgKiBlbmRlZCBieSBhIGNhbGwgdG8gW3Jlc3VtZV0sIGFuZCBjb21wbGV0aW5nIHRoZSBbcmVzdW1lU2lnbmFsXSBtYXkgZW5kIGEKICAgKiBkaWZmZXJlbnQgW3BhdXNlXS4KICAgKgogICAqIEl0IGlzIHNhZmUgdG8gW3Jlc3VtZV0gb3IgY29tcGxldGUgYSBbcmVzdW1lU2lnbmFsXSBldmVuIHdoZW4gdGhlCiAgICogc3Vic2NyaXB0aW9uIGlzIG5vdCBwYXVzZWQsIGFuZCB0aGUgcmVzdW1lIHdpbGwgaGF2ZSBubyBlZmZlY3QuCiAgICoKICAgKiBDdXJyZW50bHkgRE9NIHN0cmVhbXMgc2lsZW50bHkgZHJvcCBldmVudHMgd2hlbiB0aGUgc3RyZWFtIGlzIHBhdXNlZC4gVGhpcwogICAqIGlzIGEgYnVnIGFuZCB3aWxsIGJlIGZpeGVkLgogICAqLwogIHZvaWQgcGF1c2UoW0Z1dHVyZSByZXN1bWVTaWduYWxdKTsKCiAgLyoqCiAgICogUmVzdW1lIGFmdGVyIGEgcGF1c2UuCiAgICoKICAgKiBUaGlzIHVuZG9lcyBvbmUgcHJldmlvdXMgY2FsbCB0byBbcGF1c2VdLgogICAqIFdoZW4gYWxsIHByZXZpb3VzbHkgY2FsbHMgdG8gW3BhdXNlXSBoYXZlIGJlZW4gbWF0Y2hlZCBieSBhIGNhbGxzIHRvCiAgICogW3Jlc3VtZV0sIHBvc3NpYmx5IHRocm91Z2ggYSBgcmVzdW1lU2lnbmFsYCBwYXNzZWQgdG8gW3BhdXNlXSwKICAgKiB0aGUgc3RyZWFtIHN1YnNjcmlwdGlvbiBtYXkgZW1pdCBldmVudHMgYWdhaW4uCiAgICoKICAgKiBJdCBpcyBzYWZlIHRvIFtyZXN1bWVdIGV2ZW4gd2hlbiB0aGUgc3Vic2NyaXB0aW9uIGlzIG5vdCBwYXVzZWQsIGFuZCB0aGUKICAgKiByZXN1bWUgd2lsbCBoYXZlIG5vIGVmZmVjdC4KICAgKi8KICB2b2lkIHJlc3VtZSgpOwoKICAvKioKICAgKiBXaGV0aGVyIHRoZSBbU3RyZWFtU3Vic2NyaXB0aW9uXSBpcyBjdXJyZW50bHkgcGF1c2VkLgogICAqCiAgICogSWYgdGhlcmUgaGF2ZSBiZWVuIG1vcmUgY2FsbHMgdG8gW3BhdXNlXSB0aGFuIHRvIFtyZXN1bWVdIG9uIHRoaXMKICAgKiBzdHJlYW0gc3Vic2NyaXB0aW9uLCB0aGUgc3Vic2NyaXB0aW9uIGlzIHBhdXNlZCwgYW5kIHRoaXMgZ2V0dGVyCiAgICogcmV0dXJucyBgdHJ1ZWAuCiAgICoKICAgKiBSZXR1cm5zIGBmYWxzZWAgaWYgdGhlIHN0cmVhbSBjYW4gY3VycmVudGx5IGVtaXQgZXZlbnRzLCBvciBpZgogICAqIHRoZSBzdWJzY3JpcHRpb24gaGFzIGNvbXBsZXRlZCBvciBiZWVuIGNhbmNlbGxlZC4KICAgKi8KICBib29sIGdldCBpc1BhdXNlZDsKCiAgLyoqCiAgICogUmV0dXJucyBhIGZ1dHVyZSB0aGF0IGhhbmRsZXMgdGhlIFtvbkRvbmVdIGFuZCBbb25FcnJvcl0gY2FsbGJhY2tzLgogICAqCiAgICogVGhpcyBtZXRob2QgKm92ZXJ3cml0ZXMqIHRoZSBleGlzdGluZyBbb25Eb25lXSBhbmQgW29uRXJyb3JdIGNhbGxiYWNrcwogICAqIHdpdGggbmV3IG9uZXMgdGhhdCBjb21wbGV0ZSB0aGUgcmV0dXJuZWQgZnV0dXJlLgogICAqCiAgICogSW4gY2FzZSBvZiBhbiBlcnJvciB0aGUgc3Vic2NyaXB0aW9uIHdpbGwgYXV0b21hdGljYWxseSBjYW5jZWwgKGV2ZW4KICAgKiB3aGVuIGl0IHdhcyBsaXN0ZW5pbmcgd2l0aCBgY2FuY2VsT25FcnJvcmAgc2V0IHRvIGBmYWxzZWApLgogICAqCiAgICogSW4gY2FzZSBvZiBhIGBkb25lYCBldmVudCB0aGUgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIHRoZSBnaXZlbgogICAqIFtmdXR1cmVWYWx1ZV0uCiAgICovCiAgRnV0dXJlPEU+IGFzRnV0dXJlPEU+KFtFIGZ1dHVyZVZhbHVlXSk7Cn0KCi8qKgogKiBBIFtTaW5rXSB0aGF0IHN1cHBvcnRzIGFkZGluZyBlcnJvcnMuCiAqCiAqIFRoaXMgbWFrZXMgaXQgc3VpdGFibGUgZm9yIGNhcHR1cmluZyB0aGUgcmVzdWx0cyBvZiBhc3luY2hyb25vdXMKICogY29tcHV0YXRpb25zLCB3aGljaCBjYW4gY29tcGxldGUgd2l0aCBhIHZhbHVlIG9yIGFuIGVycm9yLgogKgogKiBUaGUgW0V2ZW50U2lua10gaGFzIGJlZW4gZGVzaWduZWQgdG8gaGFuZGxlIGFzeW5jaHJvbm91cyBldmVudHMgZnJvbQogKiBbU3RyZWFtXXMuIFNlZSwgZm9yIGV4YW1wbGUsIFtTdHJlYW0uZXZlbnRUcmFuc2Zvcm1lZF0gd2hpY2ggdXNlcwogKiBgRXZlbnRTaW5rYHMgdG8gdHJhbnNmb3JtIGV2ZW50cy4KICovCmFic3RyYWN0IGNsYXNzIEV2ZW50U2luazxUPiBpbXBsZW1lbnRzIFNpbms8VD4gewogIC8qKgogICAqIEFkZHMgYSBkYXRhIFtldmVudF0gdG8gdGhlIHNpbmsuCiAgICoKICAgKiBNdXN0IG5vdCBiZSBjYWxsZWQgb24gYSBjbG9zZWQgc2luay4KICAgKi8KICB2b2lkIGFkZChUIGV2ZW50KTsKCiAgLyoqCiAgICogQWRkcyBhbiBbZXJyb3JdIHRvIHRoZSBzaW5rLgogICAqCiAgICogTXVzdCBub3QgYmUgY2FsbGVkIG9uIGEgY2xvc2VkIHNpbmsuCiAgICovCiAgdm9pZCBhZGRFcnJvcihPYmplY3QgZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKTsKCiAgLyoqCiAgICogQ2xvc2VzIHRoZSBzaW5rLgogICAqCiAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCBtb3JlIHRoYW4gb25jZSBpcyBhbGxvd2VkLCBidXQgZG9lcyBub3RoaW5nLgogICAqCiAgICogTmVpdGhlciBbYWRkXSBub3IgW2FkZEVycm9yXSBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGlzIG1ldGhvZC4KICAgKi8KICB2b2lkIGNsb3NlKCk7Cn0KCi8qKiBbU3RyZWFtXSB3cmFwcGVyIHRoYXQgb25seSBleHBvc2VzIHRoZSBbU3RyZWFtXSBpbnRlcmZhY2UuICovCmNsYXNzIFN0cmVhbVZpZXc8VD4gZXh0ZW5kcyBTdHJlYW08VD4gewogIGZpbmFsIFN0cmVhbTxUPiBfc3RyZWFtOwoKICBjb25zdCBTdHJlYW1WaWV3KFN0cmVhbTxUPiBzdHJlYW0pCiAgICAgIDogX3N0cmVhbSA9IHN0cmVhbSwKICAgICAgICBzdXBlci5faW50ZXJuYWwoKTsKCiAgYm9vbCBnZXQgaXNCcm9hZGNhc3QgPT4gX3N0cmVhbS5pc0Jyb2FkY2FzdDsKCiAgU3RyZWFtPFQ+IGFzQnJvYWRjYXN0U3RyZWFtKAogICAgICAgICAge3ZvaWQgb25MaXN0ZW4oU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbiksCiAgICAgICAgICB2b2lkIG9uQ2FuY2VsKFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pfSkgPT4KICAgICAgX3N0cmVhbS5hc0Jyb2FkY2FzdFN0cmVhbShvbkxpc3Rlbjogb25MaXN0ZW4sIG9uQ2FuY2VsOiBvbkNhbmNlbCk7CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBsaXN0ZW4odm9pZCBvbkRhdGEoVCB2YWx1ZSksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICByZXR1cm4gX3N0cmVhbS5saXN0ZW4ob25EYXRhLAogICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsIG9uRG9uZTogb25Eb25lLCBjYW5jZWxPbkVycm9yOiBjYW5jZWxPbkVycm9yKTsKICB9Cn0KCi8qKgogKiBBYnN0cmFjdCBpbnRlcmZhY2UgZm9yIGEgInNpbmsiIGFjY2VwdGluZyBtdWx0aXBsZSBlbnRpcmUgc3RyZWFtcy4KICoKICogQSBjb25zdW1lciBjYW4gYWNjZXB0IGEgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHN0cmVhbXMgdXNpbmcgW2FkZFN0cmVhbV0sCiAqIGFuZCB3aGVuIG5vIGZ1cnRoZXIgZGF0YSBuZWVkIHRvIGJlIGFkZGVkLCB0aGUgW2Nsb3NlXSBtZXRob2QgdGVsbHMgdGhlCiAqIGNvbnN1bWVyIHRvIGNvbXBsZXRlIGl0cyB3b3JrIGFuZCBzaHV0IGRvd24uCiAqCiAqIFRoZSBbU3RyZWFtLnBpcGVdIGFjY2VwdHMgYSBgU3RyZWFtQ29uc3VtZXJgIGFuZCB3aWxsIHBhc3MgdGhlIHN0cmVhbQogKiB0byB0aGUgY29uc3VtZXIncyBbYWRkU3RyZWFtXSBtZXRob2QuIFdoZW4gdGhhdCBjb21wbGV0ZXMsIGl0IHdpbGwKICogY2FsbCBbY2xvc2VdIGFuZCB0aGVuIGNvbXBsZXRlIGl0cyBvd24gcmV0dXJuZWQgZnV0dXJlLgogKi8KYWJzdHJhY3QgY2xhc3MgU3RyZWFtQ29uc3VtZXI8Uz4gewogIC8qKgogICAqIENvbnN1bWVzIHRoZSBlbGVtZW50cyBvZiBbc3RyZWFtXS4KICAgKgogICAqIExpc3RlbnMgb24gW3N0cmVhbV0gYW5kIGRvZXMgc29tZXRoaW5nIGZvciBlYWNoIGV2ZW50LgogICAqCiAgICogUmV0dXJucyBhIGZ1dHVyZSB3aGljaCBpcyBjb21wbGV0ZWQgd2hlbiB0aGUgc3RyZWFtIGlzIGRvbmUgYmVpbmcgYWRkZWQsCiAgICogYW5kIHRoZSBjb25zdW1lciBpcyByZWFkeSB0byBhY2NlcHQgYSBuZXcgc3RyZWFtLgogICAqIE5vIGZ1cnRoZXIgY2FsbHMgdG8gW2FkZFN0cmVhbV0gb3IgW2Nsb3NlXSBzaG91bGQgaGFwcGVuIGJlZm9yZSB0aGUKICAgKiByZXR1cm5lZCBmdXR1cmUgaGFzIGNvbXBsZXRlZC4KICAgKgogICAqIFRoZSBjb25zdW1lciBtYXkgc3RvcCBsaXN0ZW5pbmcgdG8gdGhlIHN0cmVhbSBhZnRlciBhbiBlcnJvciwKICAgKiBpdCBtYXkgY29uc3VtZSBhbGwgdGhlIGVycm9ycyBhbmQgb25seSBzdG9wIGF0IGEgZG9uZSBldmVudCwKICAgKiBvciBpdCBtYXkgYmUgY2FuY2VsZWQgZWFybHkgaWYgdGhlIHJlY2VpdmVyIGRvbid0IHdhbnQgYW55IGZ1cnRoZXIgZXZlbnRzLgogICAqCiAgICogSWYgdGhlIGNvbnN1bWVyIHN0b3BzIGxpc3RlbmluZyBiZWNhdXNlIG9mIHNvbWUgZXJyb3IgcHJldmVudGluZyBpdAogICAqIGZyb20gY29udGludWluZywgaXQgbWF5IHJlcG9ydCB0aGlzIGVycm9yIGluIHRoZSByZXR1cm5lZCBmdXR1cmUsCiAgICogb3RoZXJ3aXNlIGl0IHdpbGwganVzdCBjb21wbGV0ZSB0aGUgZnV0dXJlIHdpdGggYG51bGxgLgogICAqLwogIEZ1dHVyZSBhZGRTdHJlYW0oU3RyZWFtPFM+IHN0cmVhbSk7CgogIC8qKgogICAqIFRlbGxzIHRoZSBjb25zdW1lciB0aGF0IG5vIGZ1cnRoZXIgc3RyZWFtcyB3aWxsIGJlIGFkZGVkLgogICAqCiAgICogVGhpcyBhbGxvd3MgdGhlIGNvbnN1bWVyIHRvIGNvbXBsZXRlIGFueSByZW1haW5pbmcgd29yayBhbmQgcmVsZWFzZQogICAqIHJlc291cmNlcyB0aGF0IGFyZSBubyBsb25nZXIgbmVlZGVkCiAgICoKICAgKiBSZXR1cm5zIGEgZnV0dXJlIHdoaWNoIGlzIGNvbXBsZXRlZCB3aGVuIHRoZSBjb25zdW1lciBoYXMgc2h1dCBkb3duLgogICAqIElmIGNsZWFuaW5nIHVwIGNhbiBmYWlsLCB0aGUgZXJyb3IgbWF5IGJlIHJlcG9ydGVkIGluIHRoZSByZXR1cm5lZCBmdXR1cmUsCiAgICogb3RoZXJ3aXNlIGl0IGNvbXBsZXRlcyB3aXRoIGBudWxsYC4KICAgKi8KICBGdXR1cmUgY2xvc2UoKTsKfQoKLyoqCiAqIEEgb2JqZWN0IHRoYXQgYWNjZXB0cyBzdHJlYW0gZXZlbnRzIGJvdGggc3luY2hyb25vdXNseSBhbmQgYXN5bmNocm9ub3VzbHkuCiAqCiAqIEEgW1N0cmVhbVNpbmtdIGNvbWJpbmVzIHRoZSBtZXRob2RzIGZyb20gW1N0cmVhbUNvbnN1bWVyXSBhbmQgW0V2ZW50U2lua10uCiAqCiAqIFRoZSBbRXZlbnRTaW5rXSBtZXRob2RzIGNhbid0IGJlIHVzZWQgd2hpbGUgdGhlIFthZGRTdHJlYW1dIGlzIGNhbGxlZC4KICogQXMgc29vbiBhcyB0aGUgW2FkZFN0cmVhbV0ncyBbRnV0dXJlXSBjb21wbGV0ZXMgd2l0aCBhIHZhbHVlLCB0aGUKICogW0V2ZW50U2lua10gbWV0aG9kcyBjYW4gYmUgdXNlZCBhZ2Fpbi4KICoKICogSWYgW2FkZFN0cmVhbV0gaXMgY2FsbGVkIGFmdGVyIGFueSBvZiB0aGUgW0V2ZW50U2lua10gbWV0aG9kcywgaXQnbGwKICogYmUgZGVsYXllZCB1bnRpbCB0aGUgdW5kZXJseWluZyBzeXN0ZW0gaGFzIGNvbnN1bWVkIHRoZSBkYXRhIGFkZGVkIGJ5IHRoZQogKiBbRXZlbnRTaW5rXSBtZXRob2RzLgogKgogKiBXaGVuIFtFdmVudFNpbmtdIG1ldGhvZHMgYXJlIHVzZWQsIHRoZSBbZG9uZV0gW0Z1dHVyZV0gY2FuIGJlIHVzZWQgdG8KICogY2F0Y2ggYW55IGVycm9ycy4KICoKICogV2hlbiBbY2xvc2VdIGlzIGNhbGxlZCwgaXQgd2lsbCByZXR1cm4gdGhlIFtkb25lXSBbRnV0dXJlXS4KICovCmFic3RyYWN0IGNsYXNzIFN0cmVhbVNpbms8Uz4gaW1wbGVtZW50cyBFdmVudFNpbms8Uz4sIFN0cmVhbUNvbnN1bWVyPFM+IHsKICAvKioKICAgKiBUZWxscyB0aGUgc3RyZWFtIHNpbmsgdGhhdCBubyBmdXJ0aGVyIHN0cmVhbXMgd2lsbCBiZSBhZGRlZC4KICAgKgogICAqIFRoaXMgYWxsb3dzIHRoZSBzdHJlYW0gc2luayB0byBjb21wbGV0ZSBhbnkgcmVtYWluaW5nIHdvcmsgYW5kIHJlbGVhc2UKICAgKiByZXNvdXJjZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIG5lZWRlZAogICAqCiAgICogUmV0dXJucyBhIGZ1dHVyZSB3aGljaCBpcyBjb21wbGV0ZWQgd2hlbiB0aGUgc3RyZWFtIHNpbmsgaGFzIHNodXQgZG93bi4KICAgKiBJZiBjbGVhbmluZyB1cCBjYW4gZmFpbCwgdGhlIGVycm9yIG1heSBiZSByZXBvcnRlZCBpbiB0aGUgcmV0dXJuZWQgZnV0dXJlLAogICAqIG90aGVyd2lzZSBpdCBjb21wbGV0ZXMgd2l0aCBgbnVsbGAuCiAgICoKICAgKiBSZXR1cm5zIHRoZSBzYW1lIGZ1dHVyZSBhcyBbZG9uZV0uCiAgICoKICAgKiBUaGUgc3RyZWFtIHNpbmsgbWF5IGNsb3NlIGJlZm9yZSB0aGUgW2Nsb3NlXSBtZXRob2QgaXMgY2FsbGVkLCBlaXRoZXIgZHVlCiAgICogdG8gYW4gZXJyb3Igb3IgYmVjYXVzZSBpdCBpcyBpdHNlbGYgcHJvdmlkaW5nIGV2ZW50cyB0byBzb21lb25lIHdobyBoYXMKICAgKiBzdG9wcGVkIGxpc3RlbmluZy4gSW4gdGhhdCBjYXNlLCB0aGUgW2RvbmVdIGZ1dHVyZSBpcyBjb21wbGV0ZWQgZmlyc3QsCiAgICogYW5kIHRoZSBgY2xvc2VgIG1ldGhvZCB3aWxsIHJldHVybiB0aGUgYGRvbmVgIGZ1dHVyZSB3aGVuIGNhbGxlZC4KICAgKgogICAqIFVuaWZpZXMgW1N0cmVhbUNvbnN1bWVyLmNsb3NlXSBhbmQgW0V2ZW50U2luay5jbG9zZV0gd2hpY2ggYm90aCBtYXJrIHRoZWlyCiAgICogb2JqZWN0IGFzIG5vdCBleHBlY3RpbmcgYW55IGZ1cnRoZXIgZXZlbnRzLgogICAqLwogIEZ1dHVyZSBjbG9zZSgpOwoKICAvKioKICAgKiBSZXR1cm4gYSBmdXR1cmUgd2hpY2ggaXMgY29tcGxldGVkIHdoZW4gdGhlIFtTdHJlYW1TaW5rXSBpcyBmaW5pc2hlZC4KICAgKgogICAqIElmIHRoZSBgU3RyZWFtU2lua2AgZmFpbHMgd2l0aCBhbiBlcnJvciwKICAgKiBwZXJoYXBzIGluIHJlc3BvbnNlIHRvIGFkZGluZyBldmVudHMgdXNpbmcgW2FkZF0sIFthZGRFcnJvcl0gb3IgW2Nsb3NlXSwKICAgKiB0aGUgW2RvbmVdIGZ1dHVyZSB3aWxsIGNvbXBsZXRlIHdpdGggdGhhdCBlcnJvci4KICAgKgogICAqIE90aGVyd2lzZSwgdGhlIHJldHVybmVkIGZ1dHVyZSB3aWxsIGNvbXBsZXRlIHdoZW4gZWl0aGVyOgogICAqCiAgICogKiBhbGwgZXZlbnRzIGhhdmUgYmVlbiBwcm9jZXNzZWQgYW5kIHRoZSBzaW5rIGhhcyBiZWVuIGNsb3NlZCwgb3IKICAgKiAqIHRoZSBzaW5rIGhhcyBvdGhlcndpc2UgYmVlbiBzdG9wcGVkIGZyb20gaGFuZGxpbmcgbW9yZSBldmVudHMKICAgKiAgIChmb3IgZXhhbXBsZSBieSBjYW5jZWxpbmcgYSBzdHJlYW0gc3Vic2NyaXB0aW9uKS4KICAgKi8KICBGdXR1cmUgZ2V0IGRvbmU7Cn0KCi8qKgogKiBUcmFuc2Zvcm1zIGEgU3RyZWFtLgogKgogKiBXaGVuIGEgc3RyZWFtJ3MgW1N0cmVhbS50cmFuc2Zvcm1dIG1ldGhvZCBpcyBpbnZva2VkIHdpdGggYQogKiBbU3RyZWFtVHJhbnNmb3JtZXJdLCB0aGUgc3RyZWFtIGNhbGxzIHRoZSBbYmluZF0gbWV0aG9kIG9uIHRoZSBwcm92aWRlZAogKiB0cmFuc2Zvcm1lci4gVGhlIHJlc3VsdGluZyBzdHJlYW0gaXMgdGhlbiByZXR1cm5lZCBmcm9tIHRoZQogKiBbU3RyZWFtLnRyYW5zZm9ybV0gbWV0aG9kLgogKgogKiBDb25jZXB0dWFsbHksIGEgdHJhbnNmb3JtZXIgaXMgc2ltcGx5IGEgZnVuY3Rpb24gZnJvbSBbU3RyZWFtXSB0byBbU3RyZWFtXQogKiB0aGF0IGlzIGVuY2Fwc3VsYXRlZCBpbnRvIGEgY2xhc3MuCiAqCiAqIEl0IGlzIGdvb2QgcHJhY3RpY2UgdG8gd3JpdGUgdHJhbnNmb3JtZXJzIHRoYXQgY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMuCiAqCiAqIEFsbCBvdGhlciB0cmFuc2Zvcm1pbmcgbWV0aG9kcyBvbiBbU3RyZWFtXSwgc3VjaCBhcyBbU3RyZWFtLm1hcF0sCiAqIFtTdHJlYW0ud2hlcmVdIG9yIFtTdHJlYW0uZXhwYW5kXSBjYW4gYmUgaW1wbGVtZW50ZWQgdXNpbmcKICogW1N0cmVhbS50cmFuc2Zvcm1dLiBBIFtTdHJlYW1UcmFuc2Zvcm1lcl0gaXMgdGh1cyB2ZXJ5IHBvd2VyZnVsIGJ1dCBvZnRlbgogKiBhbHNvIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQgdG8gdXNlLgogKi8KYWJzdHJhY3QgY2xhc3MgU3RyZWFtVHJhbnNmb3JtZXI8UywgVD4gewogIC8qKgogICAqIENyZWF0ZXMgYSBbU3RyZWFtVHJhbnNmb3JtZXJdIGJhc2VkIG9uIHRoZSBnaXZlbiBbb25MaXN0ZW5dIGNhbGxiYWNrLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSB0cmFuc2Zvcm1lciB1c2VzIHRoZSBwcm92aWRlZCBbb25MaXN0ZW5dIGNhbGxiYWNrCiAgICogd2hlbiBhIHRyYW5zZm9ybWVkIHN0cmVhbSBpcyBsaXN0ZW5lZCB0by4gQXQgdGhhdCB0aW1lLCB0aGUgY2FsbGJhY2sKICAgKiByZWNlaXZlcyB0aGUgaW5wdXQgc3RyZWFtICh0aGUgb25lIHBhc3NlZCB0byBbYmluZF0pIGFuZCBhCiAgICogYm9vbGVhbiBmbGFnIGBjYW5jZWxPbkVycm9yYCB0byBjcmVhdGUgYSBbU3RyZWFtU3Vic2NyaXB0aW9uXS4KICAgKgogICAqIElmIHRoZSB0cmFuc2Zvcm1lZCBzdHJlYW0gaXMgYSBicm9hZGNhc3Qgc3RyZWFtLCBzbyBpcyB0aGUgc3RyZWFtCiAgICogcmV0dXJuZWQgYnkgdGhlIFtTdHJlYW1UcmFuc2Zvcm1lci5iaW5kXSBtZXRob2QgYnkgdGhpcyB0cmFuc2Zvcm1lci4KICAgKgogICAqIElmIHRoZSB0cmFuc2Zvcm1lZCBzdHJlYW0gaXMgbGlzdGVuZWQgdG8gbXVsdGlwbGUgdGltZXMsIHRoZSBbb25MaXN0ZW5dCiAgICogY2FsbGJhY2sgaXMgY2FsbGVkIGFnYWluIGZvciBlYWNoIG5ldyBbU3RyZWFtLmxpc3Rlbl0gY2FsbC4KICAgKiBUaGlzIGhhcHBlbnMgd2hldGhlciB0aGUgc3RyZWFtIGlzIGEgYnJvYWRjYXN0IHN0cmVhbSBvciBub3QsCiAgICogYnV0IHRoZSBjYWxsIHdpbGwgdXN1YWxseSBmYWlsIGZvciBub24tYnJvYWRjYXN0IHN0cmVhbXMuCiAgICoKICAgKiBUaGUgW29uTGlzdGVuXSBjYWxsYmFjayBkb2VzICpub3QqIHJlY2VpdmUgdGhlIGhhbmRsZXJzIHRoYXQgd2VyZSBwYXNzZWQKICAgKiB0byBbU3RyZWFtLmxpc3Rlbl0uIFRoZXNlIGFyZSBhdXRvbWF0aWNhbGx5IHNldCBhZnRlciB0aGUgY2FsbCB0byB0aGUKICAgKiBbb25MaXN0ZW5dIGNhbGxiYWNrICh1c2luZyBbU3RyZWFtU3Vic2NyaXB0aW9uLm9uRGF0YV0sCiAgICogW1N0cmVhbVN1YnNjcmlwdGlvbi5vbkVycm9yXSBhbmQgW1N0cmVhbVN1YnNjcmlwdGlvbi5vbkRvbmVdKS4KICAgKgogICAqIE1vc3QgY29tbW9ubHksIGFuIFtvbkxpc3Rlbl0gY2FsbGJhY2sgd2lsbCBmaXJzdCBjYWxsIFtTdHJlYW0ubGlzdGVuXSBvbgogICAqIHRoZSBwcm92aWRlZCBzdHJlYW0gKHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgYGNhbmNlbE9uRXJyb3JgIGZsYWcpLCBhbmQgdGhlbgogICAqIHJldHVybiBhIG5ldyBbU3RyZWFtU3Vic2NyaXB0aW9uXS4KICAgKgogICAqIFRoZXJlIGFyZSB0d28gY29tbW9uIHdheXMgdG8gY3JlYXRlIGEgU3RyZWFtU3Vic2NyaXB0aW9uOgogICAqCiAgICogMS4gYnkgYWxsb2NhdGluZyBhIFtTdHJlYW1Db250cm9sbGVyXSBhbmQgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2YKICAgKiAgICBsaXN0ZW5pbmcgdG8gaXRzIHN0cmVhbS4gSXQncyBpbXBvcnRhbnQgdG8gZm9yd2FyZCBwYXVzZSwgcmVzdW1lIGFuZAogICAqICAgIGNhbmNlbCBldmVudHMgKHVubGVzcyB0aGUgdHJhbnNmb3JtZXIgaW50ZW50aW9uYWxseSB3YW50cyB0byBjaGFuZ2UKICAgKiAgICB0aGlzIGJlaGF2aW9yKS4KICAgKiAyLiBieSBjcmVhdGluZyBhIG5ldyBjbGFzcyB0aGF0IGltcGxlbWVudHMgW1N0cmVhbVN1YnNjcmlwdGlvbl0uCiAgICogICAgTm90ZSB0aGF0IHRoZSBzdWJzY3JpcHRpb24gc2hvdWxkIHJ1biBjYWxsYmFja3MgaW4gdGhlIFtab25lXSB0aGUKICAgKiAgICBzdHJlYW0gd2FzIGxpc3RlbmVkIHRvIChzZWUgW1pvbmVdIGFuZCBbWm9uZS5iaW5kQ2FsbGJhY2tdKS4KICAgKgogICAqIEV4YW1wbGU6CiAgICoKICAgKiBgYGAKICAgKiAvLy8gU3RhcnRzIGxpc3RlbmluZyB0byBbaW5wdXRdIGFuZCBkdXBsaWNhdGVzIGFsbCBub24tZXJyb3IgZXZlbnRzLgogICAqIFN0cmVhbVN1YnNjcmlwdGlvbjxpbnQ+IF9vbkxpc3RlbihTdHJlYW08aW50PiBpbnB1dCwgYm9vbCBjYW5jZWxPbkVycm9yKSB7CiAgICogICBTdHJlYW1TdWJzY3JpcHRpb248U3RyaW5nPiBzdWJzY3JpcHRpb247CiAgICogICAvLyBDcmVhdGUgY29udHJvbGxlciB0aGF0IGZvcndhcmRzIHBhdXNlLCByZXN1bWUgYW5kIGNhbmNlbCBldmVudHMuCiAgICogICB2YXIgY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPFN0cmluZz4oCiAgICogICAgICAgb25QYXVzZTogKCkgewogICAqICAgICAgICAgc3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgICogICAgICAgfSwKICAgKiAgICAgICBvblJlc3VtZTogKCkgewogICAqICAgICAgICAgc3Vic2NyaXB0aW9uLnJlc3VtZSgpOwogICAqICAgICAgIH0sCiAgICogICAgICAgb25DYW5jZWw6ICgpID0+IHN1YnNjcmlwdGlvbi5jYW5jZWwoKSwKICAgKiAgICAgICBzeW5jOiB0cnVlKTsgLy8gInN5bmMiIGlzIGNvcnJlY3QgaGVyZSwgc2luY2UgZXZlbnRzIGFyZSBmb3J3YXJkZWQuCiAgICoKICAgKiAgIC8vIExpc3RlbiB0byB0aGUgcHJvdmlkZWQgc3RyZWFtIHVzaW5nIGBjYW5jZWxPbkVycm9yYC4KICAgKiAgIHN1YnNjcmlwdGlvbiA9IGlucHV0Lmxpc3RlbigoZGF0YSkgewogICAqICAgICAvLyBEdXBsaWNhdGUgdGhlIGRhdGEuCiAgICogICAgIGNvbnRyb2xsZXIuYWRkKGRhdGEpOwogICAqICAgICBjb250cm9sbGVyLmFkZChkYXRhKTsKICAgKiAgIH0sCiAgICogICAgICAgb25FcnJvcjogY29udHJvbGxlci5hZGRFcnJvciwKICAgKiAgICAgICBvbkRvbmU6IGNvbnRyb2xsZXIuY2xvc2UsCiAgICogICAgICAgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgICoKICAgKiAgIC8vIFJldHVybiBhIG5ldyBbU3RyZWFtU3Vic2NyaXB0aW9uXSBieSBsaXN0ZW5pbmcgdG8gdGhlIGNvbnRyb2xsZXIncwogICAqICAgLy8gc3RyZWFtLgogICAqICAgcmV0dXJuIGNvbnRyb2xsZXIuc3RyZWFtLmxpc3RlbihudWxsKTsKICAgKiB9CiAgICoKICAgKiAvLyBJbnN0YW50aWF0ZSBhIHRyYW5zZm9ybWVyOgogICAqIHZhciBkdXBsaWNhdG9yID0gY29uc3QgU3RyZWFtVHJhbnNmb3JtZXI8aW50LCBpbnQ+KF9vbkxpc3Rlbik7CiAgICoKICAgKiAvLyBVc2UgYXMgZm9sbG93czoKICAgKiBpbnRTdHJlYW0udHJhbnNmb3JtKGR1cGxpY2F0b3IpOwogICAqIGBgYAogICAqLwogIGNvbnN0IGZhY3RvcnkgU3RyZWFtVHJhbnNmb3JtZXIoCiAgICAgICAgICBTdHJlYW1TdWJzY3JpcHRpb248VD4gb25MaXN0ZW4oCiAgICAgICAgICAgICAgU3RyZWFtPFM+IHN0cmVhbSwgYm9vbCBjYW5jZWxPbkVycm9yKSkgPQogICAgICBfU3RyZWFtU3Vic2NyaXB0aW9uVHJhbnNmb3JtZXI8UywgVD47CgogIC8qKgogICAqIENyZWF0ZXMgYSBbU3RyZWFtVHJhbnNmb3JtZXJdIHRoYXQgZGVsZWdhdGVzIGV2ZW50cyB0byB0aGUgZ2l2ZW4gZnVuY3Rpb25zLgogICAqCiAgICogRXhhbXBsZSB1c2Ugb2YgYSBkdXBsaWNhdGluZyB0cmFuc2Zvcm1lcjoKICAgKgogICAqIGBgYAogICAqIHN0cmluZ1N0cmVhbS50cmFuc2Zvcm0obmV3IFN0cmVhbVRyYW5zZm9ybWVyPFN0cmluZywgU3RyaW5nPi5mcm9tSGFuZGxlcnMoCiAgICogICAgIGhhbmRsZURhdGE6IChTdHJpbmcgdmFsdWUsIEV2ZW50U2luazxTdHJpbmc+IHNpbmspIHsKICAgKiAgICAgICBzaW5rLmFkZCh2YWx1ZSk7CiAgICogICAgICAgc2luay5hZGQodmFsdWUpOyAgLy8gRHVwbGljYXRlIHRoZSBpbmNvbWluZyBldmVudHMuCiAgICogICAgIH0pKTsKICAgKiBgYGAKICAgKgogICAqIFRyYW5zZm9ybWVycyB0aGF0IGFyZSBjb25zdHJ1Y3RlZCB0aGlzIHdheSBjYW5ub3QgdXNlIGNhcHR1cmVkIHN0YXRlIGlmCiAgICogdGhleSBhcmUgdXNlZCBpbiBzdHJlYW1zIHRoYXQgY2FuIGJlIGxpc3RlbmVkIHRvIG11bHRpcGxlIHRpbWVzLgogICAqIGBgYAogICAqIFN0cmVhbUNvbnRyb2xsZXI8U3RyaW5nPiBjb250cm9sbGVyOwogICAqIGNvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlci5icm9hZGNhc3Qob25MaXN0ZW46ICgpIHsKICAgKiAgIHNjaGVkdWxlTWljcm90YXNrKCgpIHsKICAgKiAgICAgY29udHJvbGxlci5hZGRFcnJvcigiQmFkIik7CiAgICogICAgIGNvbnRyb2xsZXIuYWRkRXJyb3IoIldvcnNlIik7CiAgICogICAgIGNvbnRyb2xsZXIuYWRkRXJyb3IoIldvcnN0Iik7CiAgICogICB9KTsKICAgKiB9KTsKICAgKiB2YXIgc2hhcmVkU3RhdGUgPSAwOwogICAqIHZhciB0cmFuc2Zvcm1lZFN0cmVhbSA9IGNvbnRyb2xsZXIuc3RyZWFtLnRyYW5zZm9ybSgKICAgKiAgICAgbmV3IFN0cmVhbVRyYW5zZm9ybWVyPFN0cmluZz4uZnJvbUhhbmRsZXJzKAogICAqICAgICAgICAgaGFuZGxlRXJyb3I6IChlcnJvciwgc3RhY2tUcmFjZSwgc2luaykgewogICAqICAgc2hhcmVkU3RhdGUrKzsgLy8gSW5jcmVtZW50IHNoYXJlZCBlcnJvci1jb3VudGVyLgogICAqICAgc2luay5hZGQoIkVycm9yICRzaGFyZWRTdGF0ZTogJGVycm9yIik7CiAgICogfSkpOwogICAqCiAgICogdHJhbnNmb3JtZWRTdHJlYW0ubGlzdGVuKHByaW50KTsKICAgKiB0cmFuc2Zvcm1lZFN0cmVhbS5saXN0ZW4ocHJpbnQpOyAvLyBMaXN0ZW4gdHdpY2UuCiAgICogLy8gTGlzdGVuaW5nIHR3aWNlIHRvIHRoZSBzYW1lIHN0cmVhbSBtYWtlcyB0aGUgdHJhbnNmb3JtZXIgc2hhcmUgdGhlIHNhbWUKICAgKiAvLyBzdGF0ZS4gSW5zdGVhZCBvZiBoYXZpbmcgIkVycm9yIDE6IEJhZCIsICJFcnJvciAyOiBXb3JzZSIsCiAgICogLy8gIkVycm9yIDM6IFdvcnN0IiBhcyBvdXRwdXQgKGVhY2ggdHdpY2UgZm9yIHRoZSBzZXBhcmF0ZSBzdWJzY3JpcHRpb25zKSwKICAgKiAvLyB0aGlzIHByb2dyYW0gZW1pdHM6CiAgICogLy8gRXJyb3IgMTogQmFkCiAgICogLy8gRXJyb3IgMjogQmFkCiAgICogLy8gRXJyb3IgMzogV29yc2UKICAgKiAvLyBFcnJvciA0OiBXb3JzZQogICAqIC8vIEVycm9yIDU6IFdvcnN0CiAgICogLy8gRXJyb3IgNjogV29yc3QKICAgKiBgYGAKICAgKi8KICBmYWN0b3J5IFN0cmVhbVRyYW5zZm9ybWVyLmZyb21IYW5kbGVycygKICAgICAge3ZvaWQgaGFuZGxlRGF0YShTIGRhdGEsIEV2ZW50U2luazxUPiBzaW5rKSwKICAgICAgdm9pZCBoYW5kbGVFcnJvcihPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSwgRXZlbnRTaW5rPFQ+IHNpbmspLAogICAgICB2b2lkIGhhbmRsZURvbmUoRXZlbnRTaW5rPFQ+IHNpbmspfSkgPSBfU3RyZWFtSGFuZGxlclRyYW5zZm9ybWVyPFMsIFQ+OwoKICAvKioKICAgKiBDcmVhdGVzIGEgW1N0cmVhbVRyYW5zZm9ybWVyXSBiYXNlZCBvbiBhIFtiaW5kXSBjYWxsYmFjay4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gdHJhbnNmb3JtZXIgdXNlcyB0aGUgW2JpbmRdIGFyZ3VtZW50IHRvIGltcGxlbWVudCB0aGUKICAgKiBbU3RyZWFtVHJhbnNmb3JtZXIuYmluZF0gQVBJIGFuZCBjYW4gYmUgdXNlZCB3aGVuIHRoZSB0cmFuc2Zvcm1hdGlvbiBpcwogICAqIGF2YWlsYWJsZSBhcyBhIHN0cmVhbS10by1zdHJlYW0gZnVuY3Rpb24uCiAgICoKICAgKiBgYGBkYXJ0CiAgICogZmluYWwgc3BsaXREZWNvZGVkID0gU3RyZWFtVHJhbnNmb3JtZXI8TGlzdDxpbnQ+LCBTdHJpbmc+LmZyb21CaW5kKAogICAqICAgICAoc3RyZWFtKSA9PiBzdHJlYW0udHJhbnNmb3JtKHV0ZjguZGVjb2RlcikudHJhbnNmb3JtKExpbmVTcGxpdHRlcigpKSk7CiAgICogYGBgCiAgICovCiAgQFNpbmNlKCIyLjEiKQogIGZhY3RvcnkgU3RyZWFtVHJhbnNmb3JtZXIuZnJvbUJpbmQoU3RyZWFtPFQ+IEZ1bmN0aW9uKFN0cmVhbTxTPikgYmluZCkgPQogICAgICBfU3RyZWFtQmluZFRyYW5zZm9ybWVyPFMsIFQ+OwoKICAvKioKICAgKiBBZGFwdHMgW3NvdXJjZV0gdG8gYmUgYSBgU3RyZWFtVHJhbnNmb3JtZXI8VFMsIFRUPmAuCiAgICoKICAgKiBUaGlzIGFsbG93cyBbc291cmNlXSB0byBiZSB1c2VkIGF0IHRoZSBuZXcgdHlwZSwgYnV0IGF0IHJ1bi10aW1lIGl0CiAgICogbXVzdCBzYXRpc2Z5IHRoZSByZXF1aXJlbWVudHMgb2YgYm90aCB0aGUgbmV3IHR5cGUgYW5kIGl0cyBvcmlnaW5hbCB0eXBlLgogICAqCiAgICogRGF0YSBldmVudHMgcGFzc2VkIGludG8gdGhlIHJldHVybmVkIHRyYW5zZm9ybWVyIG11c3QgYWxzbyBiZSBpbnN0YW5jZXMKICAgKiBvZiBbU1NdLCBhbmQgZGF0YSBldmVudHMgcHJvZHVjZWQgYnkgW3NvdXJjZV0gZm9yIHRob3NlIGV2ZW50cyBtdXN0CiAgICogYWxzbyBiZSBpbnN0YW5jZXMgb2YgW1RUXS4KICAgKi8KICBzdGF0aWMgU3RyZWFtVHJhbnNmb3JtZXI8VFMsIFRUPiBjYXN0RnJvbTxTUywgU1QsIFRTLCBUVD4oCiAgICAgIFN0cmVhbVRyYW5zZm9ybWVyPFNTLCBTVD4gc291cmNlKSB7CiAgICByZXR1cm4gbmV3IENhc3RTdHJlYW1UcmFuc2Zvcm1lcjxTUywgU1QsIFRTLCBUVD4oc291cmNlKTsKICB9CgogIC8qKgogICAqIFRyYW5zZm9ybXMgdGhlIHByb3ZpZGVkIFtzdHJlYW1dLgogICAqCiAgICogUmV0dXJucyBhIG5ldyBzdHJlYW0gd2l0aCBldmVudHMgdGhhdCBhcmUgY29tcHV0ZWQgZnJvbSBldmVudHMgb2YgdGhlCiAgICogcHJvdmlkZWQgW3N0cmVhbV0uCiAgICoKICAgKiBUaGUgW1N0cmVhbVRyYW5zZm9ybWVyXSBpbnRlcmZhY2UgaXMgY29tcGxldGVseSBnZW5lcmljLAogICAqIHNvIGl0IGNhbm5vdCBzYXkgd2hhdCBzdWJjbGFzc2VzIGRvLgogICAqIEVhY2ggW1N0cmVhbVRyYW5zZm9ybWVyXSBzaG91bGQgZG9jdW1lbnQgY2xlYXJseSBob3cgaXQgdHJhbnNmb3JtcyB0aGUKICAgKiBzdHJlYW0gKG9uIHRoZSBjbGFzcyBvciB2YXJpYWJsZSB1c2VkIHRvIGFjY2VzcyB0aGUgdHJhbnNmb3JtZXIpLAogICAqIGFzIHdlbGwgYXMgYW55IGRpZmZlcmVuY2VzIGZyb20gdGhlIGZvbGxvd2luZyB0eXBpY2FsIGJlaGF2aW9yOgogICAqCiAgICogKiBXaGVuIHRoZSByZXR1cm5lZCBzdHJlYW0gaXMgbGlzdGVuZWQgdG8sIGl0IHN0YXJ0cyBsaXN0ZW5pbmcgdG8gdGhlCiAgICogICBpbnB1dCBbc3RyZWFtXS4KICAgKiAqIFN1YnNjcmlwdGlvbnMgb2YgdGhlIHJldHVybmVkIHN0cmVhbSBmb3J3YXJkIChpbiBhIHJlYXNvbmFibGUgdGltZSkKICAgKiAgIGEgW1N0cmVhbVN1YnNjcmlwdGlvbi5wYXVzZV0gY2FsbCB0byB0aGUgc3Vic2NyaXB0aW9uIG9mIHRoZSBpbnB1dAogICAqICAgW3N0cmVhbV0uCiAgICogKiBTaW1pbGFybHksIGNhbmNlbGluZyBhIHN1YnNjcmlwdGlvbiBvZiB0aGUgcmV0dXJuZWQgc3RyZWFtIGV2ZW50dWFsbHkKICAgKiAgIChpbiByZWFzb25hYmxlIHRpbWUpIGNhbmNlbHMgdGhlIHN1YnNjcmlwdGlvbiBvZiB0aGUgaW5wdXQgW3N0cmVhbV0uCiAgICoKICAgKiAiUmVhc29uYWJsZSB0aW1lIiBkZXBlbmRzIG9uIHRoZSB0cmFuc2Zvcm1lciBhbmQgc3RyZWFtLiBTb21lIHRyYW5zZm9ybWVycywKICAgKiBsaWtlIGEgInRpbWVvdXQiIHRyYW5zZm9ybWVyLCBtaWdodCBtYWtlIHRoZXNlIG9wZXJhdGlvbnMgZGVwZW5kIG9uIGEKICAgKiBkdXJhdGlvbi4gT3RoZXJzIG1pZ2h0IG5vdCBkZWxheSB0aGVtIGF0IGFsbCwgb3IganVzdCBieSBhIG1pY3JvdGFzay4KICAgKgogICAqIFRyYW5zZm9ybWVycyBhcmUgZnJlZSB0byBoYW5kbGUgZXJyb3JzIGluIGFueSB3YXkuCiAgICogQSB0cmFuc2Zvcm1lciBpbXBsZW1lbnRhdGlvbiBtYXkgY2hvb3NlIHRvIHByb3BhZ2F0ZSBlcnJvcnMsCiAgICogb3IgY29udmVydCB0aGVtIHRvIG90aGVyIGV2ZW50cywgb3IgaWdub3JlIHRoZW0gY29tcGxldGVseSwKICAgKiBidXQgaWYgZXJyb3JzIGFyZSBpZ25vcmVkLCBpdCBzaG91bGQgYmUgZG9jdW1lbnRlZCBleHBsaWNpdGx5LgogICAqLwogIFN0cmVhbTxUPiBiaW5kKFN0cmVhbTxTPiBzdHJlYW0pOwoKICAvKioKICAgKiBQcm92aWRlcyBhIGBTdHJlYW1UcmFuc2Zvcm1lcjxSUywgUlQ+YCB2aWV3IG9mIHRoaXMgc3RyZWFtIHRyYW5zZm9ybWVyLgogICAqCiAgICogVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lciB3aWxsIGNoZWNrIGF0IHJ1bi10aW1lIHRoYXQgYWxsIGRhdGEgZXZlbnRzCiAgICogb2YgdGhlIHN0cmVhbSBpdCB0cmFuc2Zvcm1zIGFyZSBhY3R1YWxseSBpbnN0YW5jZXMgb2YgW1NdLAogICAqIGFuZCBpdCB3aWxsIGNoZWNrIHRoYXQgYWxsIGRhdGEgZXZlbnRzIHByb2R1Y2VkIGJ5IHRoaXMgdHJhbnNmb3JtZXIKICAgKiBhcmUgYWN0dWFsbHkgaW5zdGFuY2VzIG9mIFtSVF0uCiAgICovCiAgU3RyZWFtVHJhbnNmb3JtZXI8UlMsIFJUPiBjYXN0PFJTLCBSVD4oKTsKfQoKLyoqCiAqIEJhc2UgY2xhc3MgZm9yIGltcGxlbWVudGluZyBbU3RyZWFtVHJhbnNmb3JtZXJdLgogKgogKiBDb250YWlucyBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyBvZiBldmVyeSBtZXRob2QgZXhjZXB0IFtiaW5kXS4KICovCmFic3RyYWN0IGNsYXNzIFN0cmVhbVRyYW5zZm9ybWVyQmFzZTxTLCBUPiBpbXBsZW1lbnRzIFN0cmVhbVRyYW5zZm9ybWVyPFMsIFQ+IHsKICBjb25zdCBTdHJlYW1UcmFuc2Zvcm1lckJhc2UoKTsKCiAgU3RyZWFtVHJhbnNmb3JtZXI8UlMsIFJUPiBjYXN0PFJTLCBSVD4oKSA9PgogICAgICBTdHJlYW1UcmFuc2Zvcm1lci5jYXN0RnJvbTxTLCBULCBSUywgUlQ+KHRoaXMpOwp9CgovKioKICogQW4gW0l0ZXJhdG9yXSBsaWtlIGludGVyZmFjZSBmb3IgdGhlIHZhbHVlcyBvZiBhIFtTdHJlYW1dLgogKgogKiBUaGlzIHdyYXBzIGEgW1N0cmVhbV0gYW5kIGEgc3Vic2NyaXB0aW9uIG9uIHRoZSBzdHJlYW0uIEl0IGxpc3RlbnMKICogb24gdGhlIHN0cmVhbSwgYW5kIGNvbXBsZXRlcyB0aGUgZnV0dXJlIHJldHVybmVkIGJ5IFttb3ZlTmV4dF0gd2hlbiB0aGUKICogbmV4dCB2YWx1ZSBiZWNvbWVzIGF2YWlsYWJsZS4KICoKICogVGhlIHN0cmVhbSBtYXkgYmUgcGF1c2VkIGJldHdlZW4gY2FsbHMgdG8gW21vdmVOZXh0XS4KICovCmFic3RyYWN0IGNsYXNzIFN0cmVhbUl0ZXJhdG9yPFQ+IHsKICAvKiogQ3JlYXRlIGEgW1N0cmVhbUl0ZXJhdG9yXSBvbiBbc3RyZWFtXS4gKi8KICBmYWN0b3J5IFN0cmVhbUl0ZXJhdG9yKFN0cmVhbTxUPiBzdHJlYW0pCiAgICAgIC8vIFRPRE8obHJuKTogdXNlIHJlZGlyZWN0aW5nIGZhY3RvcnkgY29uc3RydWN0b3Igd2hlbiB0eXBlCiAgICAgIC8vIGFyZ3VtZW50cyBhcmUgc3VwcG9ydGVkLgogICAgICA9PgogICAgICBuZXcgX1N0cmVhbUl0ZXJhdG9yPFQ+KHN0cmVhbSk7CgogIC8qKgogICAqIFdhaXQgZm9yIHRoZSBuZXh0IHN0cmVhbSB2YWx1ZSB0byBiZSBhdmFpbGFibGUuCiAgICoKICAgKiBSZXR1cm5zIGEgZnV0dXJlIHdoaWNoIHdpbGwgY29tcGxldGUgd2l0aCBlaXRoZXIgYHRydWVgIG9yIGBmYWxzZWAuCiAgICogQ29tcGxldGluZyB3aXRoIGB0cnVlYCBtZWFucyB0aGF0IGFub3RoZXIgZXZlbnQgaGFzIGJlZW4gcmVjZWl2ZWQgYW5kCiAgICogY2FuIGJlIHJlYWQgYXMgW2N1cnJlbnRdLgogICAqIENvbXBsZXRpbmcgd2l0aCBgZmFsc2VgIG1lYW5zIHRoYXQgdGhlIHN0cmVhbSBpdGVyYXRpb24gaXMgZG9uZSBhbmQKICAgKiBubyBmdXJ0aGVyIGV2ZW50cyB3aWxsIGV2ZXIgYmUgYXZhaWxhYmxlLgogICAqIFRoZSBmdXR1cmUgbWF5IGNvbXBsZXRlIHdpdGggYW4gZXJyb3IsIGlmIHRoZSBzdHJlYW0gcHJvZHVjZXMgYW4gZXJyb3IsCiAgICogd2hpY2ggYWxzbyBlbmRzIGl0ZXJhdGlvbi4KICAgKgogICAqIFRoZSBmdW5jdGlvbiBtdXN0IG5vdCBiZSBjYWxsZWQgYWdhaW4gdW50aWwgdGhlIGZ1dHVyZSByZXR1cm5lZCBieSBhCiAgICogcHJldmlvdXMgY2FsbCBpcyBjb21wbGV0ZWQuCiAgICovCiAgRnV0dXJlPGJvb2w+IG1vdmVOZXh0KCk7CgogIC8qKgogICAqIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBzdHJlYW0uCiAgICoKICAgKiBJcyBgbnVsbGAgYmVmb3JlIHRoZSBmaXJzdCBjYWxsIHRvIFttb3ZlTmV4dF0gYW5kIGFmdGVyIGEgY2FsbCB0bwogICAqIGBtb3ZlTmV4dGAgY29tcGxldGVzIHdpdGggYSBgZmFsc2VgIHJlc3VsdCBvciBhbiBlcnJvci4KICAgKgogICAqIFdoZW4gYSBgbW92ZU5leHRgIGNhbGwgY29tcGxldGVzIHdpdGggYHRydWVgLCB0aGUgYGN1cnJlbnRgIGZpZWxkIGhvbGRzCiAgICogdGhlIG1vc3QgcmVjZW50IGV2ZW50IG9mIHRoZSBzdHJlYW0sIGFuZCBpdCBzdGF5cyBsaWtlIHRoYXQgdW50aWwgdGhlIG5leHQKICAgKiBjYWxsIHRvIGBtb3ZlTmV4dGAuCiAgICogQmV0d2VlbiBhIGNhbGwgdG8gYG1vdmVOZXh0YCBhbmQgd2hlbiBpdHMgcmV0dXJuZWQgZnV0dXJlIGNvbXBsZXRlcywKICAgKiB0aGUgdmFsdWUgaXMgdW5zcGVjaWZpZWQuCiAgICovCiAgVCBnZXQgY3VycmVudDsKCiAgLyoqCiAgICogQ2FuY2VscyB0aGUgc3RyZWFtIGl0ZXJhdG9yIChhbmQgdGhlIHVuZGVybHlpbmcgc3RyZWFtIHN1YnNjcmlwdGlvbikgZWFybHkuCiAgICoKICAgKiBUaGUgc3RyZWFtIGl0ZXJhdG9yIGlzIGF1dG9tYXRpY2FsbHkgY2FuY2VsZWQgaWYgdGhlIFttb3ZlTmV4dF0gZnV0dXJlCiAgICogY29tcGxldGVzIHdpdGggZWl0aGVyIGBmYWxzZWAgb3IgYW4gZXJyb3IuCiAgICoKICAgKiBJZiB5b3UgbmVlZCB0byBzdG9wIGxpc3RlbmluZyBmb3IgdmFsdWVzIGJlZm9yZSB0aGUgc3RyZWFtIGl0ZXJhdG9yIGlzCiAgICogYXV0b21hdGljYWxseSBjbG9zZWQsIHlvdSBtdXN0IGNhbGwgW2NhbmNlbF0gdG8gZW5zdXJlIHRoYXQgdGhlIHN0cmVhbQogICAqIGlzIHByb3Blcmx5IGNsb3NlZC4KICAgKgogICAqIElmIFttb3ZlTmV4dF0gaGFzIGJlZW4gY2FsbGVkIHdoZW4gdGhlIGl0ZXJhdG9yIGlzIGNhbmNlbGVkLAogICAqIGl0cyByZXR1cm5lZCBmdXR1cmUgd2lsbCBjb21wbGV0ZSB3aXRoIGBmYWxzZWAgYXMgdmFsdWUsCiAgICogYXMgd2lsbCBhbGwgZnVydGhlciBjYWxscyB0byBbbW92ZU5leHRdLgogICAqCiAgICogUmV0dXJucyBhIGZ1dHVyZSBpZiB0aGUgY2FuY2VsLW9wZXJhdGlvbiBpcyBub3QgY29tcGxldGVkIHN5bmNocm9ub3VzbHkuCiAgICogT3RoZXJ3aXNlIHJldHVybnMgYG51bGxgLgogICAqLwogIEZ1dHVyZSBjYW5jZWwoKTsKfQoKLyoqCiAqIFdyYXBz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c3luYy9zdHJlYW1fY29udHJvbGxlci5kYXJ0wAB/ry8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuYXN5bmM7CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIENvbnRyb2xsZXIgZm9yIGNyZWF0aW5nIGFuZCBhZGRpbmcgZXZlbnRzIHRvIGEgc3RyZWFtLgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovKioKICogVHlwZSBvZiBhIHN0cmVhbSBjb250cm9sbGVyJ3MgYG9uTGlzdGVuYCwgYG9uUGF1c2VgIGFuZCBgb25SZXN1bWVgIGNhbGxiYWNrcy4KICovCnR5cGVkZWYgdm9pZCBDb250cm9sbGVyQ2FsbGJhY2soKTsKCi8qKgogKiBUeXBlIG9mIHN0cmVhbSBjb250cm9sbGVyIGBvbkNhbmNlbGAgY2FsbGJhY2tzLgogKgogKiBUaGUgY2FsbGJhY2sgbWF5IHJldHVybiBlaXRoZXIgYHZvaWRgIG9yIGEgZnV0dXJlLgogKi8KdHlwZWRlZiBDb250cm9sbGVyQ2FuY2VsQ2FsbGJhY2soKTsKCi8qKgogKiBBIGNvbnRyb2xsZXIgd2l0aCB0aGUgc3RyZWFtIGl0IGNvbnRyb2xzLgogKgogKiBUaGlzIGNvbnRyb2xsZXIgYWxsb3dzIHNlbmRpbmcgZGF0YSwgZXJyb3IgYW5kIGRvbmUgZXZlbnRzIG9uCiAqIGl0cyBbc3RyZWFtXS4KICogVGhpcyBjbGFzcyBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSBzaW1wbGUgc3RyZWFtIHRoYXQgb3RoZXJzCiAqIGNhbiBsaXN0ZW4gb24sIGFuZCB0byBwdXNoIGV2ZW50cyB0byB0aGF0IHN0cmVhbS4KICoKICogSXQncyBwb3NzaWJsZSB0byBjaGVjayB3aGV0aGVyIHRoZSBzdHJlYW0gaXMgcGF1c2VkIG9yIG5vdCwgYW5kIHdoZXRoZXIKICogaXQgaGFzIHN1YnNjcmliZXJzIG9yIG5vdCwgYXMgd2VsbCBhcyBnZXR0aW5nIGEgY2FsbGJhY2sgd2hlbiBlaXRoZXIgb2YKICogdGhlc2UgY2hhbmdlLgogKi8KYWJzdHJhY3QgY2xhc3MgU3RyZWFtQ29udHJvbGxlcjxUPiBpbXBsZW1lbnRzIFN0cmVhbVNpbms8VD4gewogIC8qKiBUaGUgc3RyZWFtIHRoYXQgdGhpcyBjb250cm9sbGVyIGlzIGNvbnRyb2xsaW5nLiAqLwogIFN0cmVhbTxUPiBnZXQgc3RyZWFtOwoKICAvKioKICAgKiBBIGNvbnRyb2xsZXIgd2l0aCBhIFtzdHJlYW1dIHRoYXQgc3VwcG9ydHMgb25seSBvbmUgc2luZ2xlIHN1YnNjcmliZXIuCiAgICoKICAgKiBJZiBbc3luY10gaXMgdHJ1ZSwgdGhlIHJldHVybmVkIHN0cmVhbSBjb250cm9sbGVyIGlzIGEKICAgKiBbU3luY2hyb25vdXNTdHJlYW1Db250cm9sbGVyXSwgYW5kIG11c3QgYmUgdXNlZCB3aXRoIHRoZSBjYXJlCiAgICogYW5kIGF0dGVudGlvbiBuZWNlc3NhcnkgdG8gbm90IGJyZWFrIHRoZSBbU3RyZWFtXSBjb250cmFjdC4gSWYgaW4gZG91YnQsCiAgICogdXNlIHRoZSBub24tc3luYyB2ZXJzaW9uLgogICAqCiAgICogVXNpbmcgYW4gYXN5bmNocm9ub3VzIGNvbnRyb2xsZXIgd2lsbCBuZXZlciBnaXZlIHRoZSB3cm9uZwogICAqIGJlaGF2aW9yLCBidXQgdXNpbmcgYSBzeW5jaHJvbm91cyBjb250cm9sbGVyIGluY29ycmVjdGx5IGNhbiBjYXVzZQogICAqIG90aGVyd2lzZSBjb3JyZWN0IHByb2dyYW1zIHRvIGJyZWFrLgogICAqCiAgICogQSBzeW5jaHJvbm91cyBjb250cm9sbGVyIGlzIG9ubHkgaW50ZW5kZWQgZm9yIG9wdGltaXppbmcgZXZlbnQKICAgKiBwcm9wYWdhdGlvbiB3aGVuIG9uZSBhc3luY2hyb25vdXMgZXZlbnQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYW5vdGhlci4KICAgKiBJdCBzaG91bGQgbm90IGJlIHVzZWQgdW5sZXNzIHRoZSBjYWxscyB0byBbYWRkXSBvciBbYWRkRXJyb3JdCiAgICogYXJlIGd1YXJhbnRlZWQgdG8gb2NjdXIgaW4gcGxhY2VzIHdoZXJlIGl0IHdvbid0IGJyZWFrIGBTdHJlYW1gIGludmFyaWFudHMuCiAgICoKICAgKiBVc2Ugc3luY2hyb25vdXMgY29udHJvbGxlcnMgb25seSB0byBmb3J3YXJkIChwb3RlbnRpYWxseSB0cmFuc2Zvcm1lZCkKICAgKiBldmVudHMgZnJvbSBhbm90aGVyIHN0cmVhbSBvciBhIGZ1dHVyZS4KICAgKgogICAqIEEgU3RyZWFtIHNob3VsZCBiZSBpbmVydCB1bnRpbCBhIHN1YnNjcmliZXIgc3RhcnRzIGxpc3RlbmluZyBvbiBpdCAodXNpbmcKICAgKiB0aGUgW29uTGlzdGVuXSBjYWxsYmFjayB0byBzdGFydCBwcm9kdWNpbmcgZXZlbnRzKS4gU3RyZWFtcyBzaG91bGQgbm90CiAgICogbGVhayByZXNvdXJjZXMgKGxpa2Ugd2Vic29ja2V0cykgd2hlbiBubyB1c2VyIGV2ZXIgbGlzdGVucyBvbiB0aGUgc3RyZWFtLgogICAqCiAgICogVGhlIGNvbnRyb2xsZXIgYnVmZmVycyBhbGwgaW5jb21pbmcgZXZlbnRzIHVudGlsIGEgc3Vic2NyaWJlciBpcwogICAqIHJlZ2lzdGVyZWQsIGJ1dCB0aGlzIGZlYXR1cmUgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiByYXJlIGNpcmN1bXN0YW5jZXMuCiAgICoKICAgKiBUaGUgW29uUGF1c2VdIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBzdHJlYW0gYmVjb21lcwogICAqIHBhdXNlZC4gW29uUmVzdW1lXSBpcyBjYWxsZWQgd2hlbiB0aGUgc3RyZWFtIHJlc3VtZWQuCiAgICoKICAgKiBUaGUgW29uTGlzdGVuXSBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgc3RyZWFtCiAgICogcmVjZWl2ZXMgaXRzIGxpc3RlbmVyIGFuZCBbb25DYW5jZWxdIHdoZW4gdGhlIGxpc3RlbmVyIGVuZHMKICAgKiBpdHMgc3Vic2NyaXB0aW9uLiBJZiBbb25DYW5jZWxdIG5lZWRzIHRvIHBlcmZvcm0gYW4gYXN5bmNocm9ub3VzIG9wZXJhdGlvbiwKICAgKiBbb25DYW5jZWxdIHNob3VsZCByZXR1cm4gYSBmdXR1cmUgdGhhdCBjb21wbGV0ZXMgd2hlbiB0aGUgY2FuY2VsIG9wZXJhdGlvbgogICAqIGlzIGRvbmUuCiAgICoKICAgKiBJZiB0aGUgc3RyZWFtIGlzIGNhbmNlbGVkIGJlZm9yZSB0aGUgY29udHJvbGxlciBuZWVkcyBuZXcgZGF0YSB0aGUKICAgKiBbb25SZXN1bWVdIGNhbGwgbWlnaHQgbm90IGJlIGV4ZWN1dGVkLgogICAqLwogIGZhY3RvcnkgU3RyZWFtQ29udHJvbGxlcigKICAgICAge3ZvaWQgb25MaXN0ZW4oKSwKICAgICAgdm9pZCBvblBhdXNlKCksCiAgICAgIHZvaWQgb25SZXN1bWUoKSwKICAgICAgb25DYW5jZWwoKSwKICAgICAgYm9vbCBzeW5jOiBmYWxzZX0pIHsKICAgIHJldHVybiBzeW5jCiAgICAgICAgPyBuZXcgX1N5bmNTdHJlYW1Db250cm9sbGVyPFQ+KG9uTGlzdGVuLCBvblBhdXNlLCBvblJlc3VtZSwgb25DYW5jZWwpCiAgICAgICAgOiBuZXcgX0FzeW5jU3RyZWFtQ29udHJvbGxlcjxUPihvbkxpc3Rlbiwgb25QYXVzZSwgb25SZXN1bWUsIG9uQ2FuY2VsKTsKICB9CgogIC8qKgogICAqIEEgY29udHJvbGxlciB3aGVyZSBbc3RyZWFtXSBjYW4gYmUgbGlzdGVuZWQgdG8gbW9yZSB0aGFuIG9uY2UuCiAgICoKICAgKiBUaGUgW1N0cmVhbV0gcmV0dXJuZWQgYnkgW3N0cmVhbV0gaXMgYSBicm9hZGNhc3Qgc3RyZWFtLgogICAqIEl0IGNhbiBiZSBsaXN0ZW5lZCB0byBtb3JlIHRoYW4gb25jZS4KICAgKgogICAqIEEgU3RyZWFtIHNob3VsZCBiZSBpbmVydCB1bnRpbCBhIHN1YnNjcmliZXIgc3RhcnRzIGxpc3RlbmluZyBvbiBpdCAodXNpbmcKICAgKiB0aGUgW29uTGlzdGVuXSBjYWxsYmFjayB0byBzdGFydCBwcm9kdWNpbmcgZXZlbnRzKS4gU3RyZWFtcyBzaG91bGQgbm90CiAgICogbGVhayByZXNvdXJjZXMgKGxpa2Ugd2Vic29ja2V0cykgd2hlbiBubyB1c2VyIGV2ZXIgbGlzdGVucyBvbiB0aGUgc3RyZWFtLgogICAqCiAgICogQnJvYWRjYXN0IHN0cmVhbXMgZG8gbm90IGJ1ZmZlciBldmVudHMgd2hlbiB0aGVyZSBpcyBubyBsaXN0ZW5lci4KICAgKgogICAqIFRoZSBjb250cm9sbGVyIGRpc3RyaWJ1dGVzIGFueSBldmVudHMgdG8gYWxsIGN1cnJlbnRseSBzdWJzY3JpYmVkCiAgICogbGlzdGVuZXJzIGF0IHRoZSB0aW1lIHdoZW4gW2FkZF0sIFthZGRFcnJvcl0gb3IgW2Nsb3NlXSBpcyBjYWxsZWQuCiAgICogSXQgaXMgbm90IGFsbG93ZWQgdG8gY2FsbCBgYWRkYCwgYGFkZEVycm9yYCwgb3IgYGNsb3NlYCBiZWZvcmUgYSBwcmV2aW91cwogICAqIGNhbGwgaGFzIHJldHVybmVkLiBUaGUgY29udHJvbGxlciBkb2VzIG5vdCBoYXZlIGFueSBpbnRlcm5hbCBxdWV1ZSBvZgogICAqIGV2ZW50cywgYW5kIGlmIHRoZXJlIGFyZSBubyBsaXN0ZW5lcnMgYXQgdGhlIHRpbWUgdGhlIGV2ZW50IGlzIGFkZGVkLAogICAqIGl0IHdpbGwganVzdCBiZSBkcm9wcGVkLCBvciwgaWYgaXQgaXMgYW4gZXJyb3IsIGJlIHJlcG9ydGVkIGFzIHVuY2F1Z2h0LgogICAqCiAgICogRWFjaCBsaXN0ZW5lciBzdWJzY3JpcHRpb24gaXMgaGFuZGxlZCBpbmRlcGVuZGVudGx5LAogICAqIGFuZCBpZiBvbmUgcGF1c2VzLCBvbmx5IHRoZSBwYXVzaW5nIGxpc3RlbmVyIGlzIGFmZmVjdGVkLgogICAqIEEgcGF1c2VkIGxpc3RlbmVyIHdpbGwgYnVmZmVyIGV2ZW50cyBpbnRlcm5hbGx5IHVudGlsIHVucGF1c2VkIG9yIGNhbmNlbGVkLgogICAqCiAgICogSWYgW3N5bmNdIGlzIHRydWUsIGV2ZW50cyBtYXkgYmUgZmlyZWQgZGlyZWN0bHkgYnkgdGhlIHN0cmVhbSdzCiAgICogc3Vic2NyaXB0aW9ucyBkdXJpbmcgYW4gW2FkZF0sIFthZGRFcnJvcl0gb3IgW2Nsb3NlXSBjYWxsLgogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gY29udHJvbGxlciBpcyBhIFtTeW5jaHJvbm91c1N0cmVhbUNvbnRyb2xsZXJdLAogICAqIGFuZCBtdXN0IGJlIHVzZWQgd2l0aCB0aGUgY2FyZSBhbmQgYXR0ZW50aW9uIG5lY2Vzc2FyeSB0byBub3QgYnJlYWsKICAgKiB0aGUgW1N0cmVhbV0gY29udHJhY3QuCiAgICogU2VlIFtDb21wbGV0ZXIuc3luY10gZm9yIHNvbWUgZXhwbGFuYXRpb25zIG9uIHdoZW4gYSBzeW5jaHJvbm91cwogICAqIGRpc3BhdGNoaW5nIGNhbiBiZSB1c2VkLgogICAqIElmIGluIGRvdWJ0LCBrZWVwIHRoZSBjb250cm9sbGVyIG5vbi1zeW5jLgogICAqCiAgICogSWYgW3N5bmNdIGlzIGZhbHNlLCB0aGUgZXZlbnQgd2lsbCBhbHdheXMgYmUgZmlyZWQgYXQgYSBsYXRlciB0aW1lLAogICAqIGFmdGVyIHRoZSBjb2RlIGFkZGluZyB0aGUgZXZlbnQgaGFzIGNvbXBsZXRlZC4KICAgKiBJbiB0aGF0IGNhc2UsIG5vIGd1YXJhbnRlZXMgYXJlIGdpdmVuIHdpdGggcmVnYXJkIHRvIHdoZW4KICAgKiBtdWx0aXBsZSBsaXN0ZW5lcnMgZ2V0IHRoZSBldmVudHMsIGV4Y2VwdCB0aGF0IGVhY2ggbGlzdGVuZXIgd2lsbCBnZXQKICAgKiBhbGwgZXZlbnRzIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBFYWNoIHN1YnNjcmlwdGlvbiBoYW5kbGVzIHRoZSBldmVudHMKICAgKiBpbmRpdmlkdWFsbHkuCiAgICogSWYgdHdvIGV2ZW50cyBhcmUgc2VudCBvbiBhbiBhc3luYyBjb250cm9sbGVyIHdpdGggdHdvIGxpc3RlbmVycywKICAgKiBvbmUgb2YgdGhlIGxpc3RlbmVycyBtYXkgZ2V0IGJvdGggZXZlbnRzCiAgICogYmVmb3JlIHRoZSBvdGhlciBsaXN0ZW5lciBnZXRzIGFueS4KICAgKiBBIGxpc3RlbmVyIG11c3QgYmUgc3Vic2NyaWJlZCBib3RoIHdoZW4gdGhlIGV2ZW50IGlzIGluaXRpYXRlZAogICAqICh0aGF0IGlzLCB3aGVuIFthZGRdIGlzIGNhbGxlZCkKICAgKiBhbmQgd2hlbiB0aGUgZXZlbnQgaXMgbGF0ZXIgZGVsaXZlcmVkLAogICAqIGluIG9yZGVyIHRvIHJlY2VpdmUgdGhlIGV2ZW50LgogICAqCiAgICogVGhlIFtvbkxpc3Rlbl0gY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIGZpcnN0IGxpc3RlbmVyIGlzIHN1YnNjcmliZWQsCiAgICogYW5kIHRoZSBbb25DYW5jZWxdIGlzIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBsb25nZXIgYW55IGFjdGl2ZSBsaXN0ZW5lcnMuCiAgICogSWYgYSBsaXN0ZW5lciBpcyBhZGRlZCBhZ2FpbiBsYXRlciwgYWZ0ZXIgdGhlIFtvbkNhbmNlbF0gd2FzIGNhbGxlZCwKICAgKiB0aGUgW29uTGlzdGVuXSB3aWxsIGJlIGNhbGxlZCBhZ2Fpbi4KICAgKi8KICBmYWN0b3J5IFN0cmVhbUNvbnRyb2xsZXIuYnJvYWRjYXN0KAogICAgICB7dm9pZCBvbkxpc3RlbigpLCB2b2lkIG9uQ2FuY2VsKCksIGJvb2wgc3luYzogZmFsc2V9KSB7CiAgICByZXR1cm4gc3luYwogICAgICAgID8gbmV3IF9TeW5jQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcjxUPihvbkxpc3Rlbiwgb25DYW5jZWwpCiAgICAgICAgOiBuZXcgX0FzeW5jQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcjxUPihvbkxpc3Rlbiwgb25DYW5jZWwpOwogIH0KCiAgLyoqCiAgICogVGhlIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHRoZSBzdHJlYW0gaXMgbGlzdGVuZWQgdG8uCiAgICoKICAgKiBNYXkgYmUgc2V0IHRvIGBudWxsYCwgaW4gd2hpY2ggY2FzZSBubyBjYWxsYmFjayB3aWxsIGhhcHBlbi4KICAgKi8KICBDb250cm9sbGVyQ2FsbGJhY2sgZ2V0IG9uTGlzdGVuOwoKICB2b2lkIHNldCBvbkxpc3Rlbih2b2lkIG9uTGlzdGVuSGFuZGxlcigpKTsKCiAgLyoqCiAgICogVGhlIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHRoZSBzdHJlYW0gaXMgcGF1c2VkLgogICAqCiAgICogTWF5IGJlIHNldCB0byBgbnVsbGAsIGluIHdoaWNoIGNhc2Ugbm8gY2FsbGJhY2sgd2lsbCBoYXBwZW4uCiAgICoKICAgKiBQYXVzZSByZWxhdGVkIGNhbGxiYWNrcyBhcmUgbm90IHN1cHBvcnRlZCBvbiBicm9hZGNhc3Qgc3RyZWFtIGNvbnRyb2xsZXJzLgogICAqLwogIENvbnRyb2xsZXJDYWxsYmFjayBnZXQgb25QYXVzZTsKCiAgdm9pZCBzZXQgb25QYXVzZSh2b2lkIG9uUGF1c2VIYW5kbGVyKCkpOwoKICAvKioKICAgKiBUaGUgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gdGhlIHN0cmVhbSBpcyByZXN1bWVkLgogICAqCiAgICogTWF5IGJlIHNldCB0byBgbnVsbGAsIGluIHdoaWNoIGNhc2Ugbm8gY2FsbGJhY2sgd2lsbCBoYXBwZW4uCiAgICoKICAgKiBQYXVzZSByZWxhdGVkIGNhbGxiYWNrcyBhcmUgbm90IHN1cHBvcnRlZCBvbiBicm9hZGNhc3Qgc3RyZWFtIGNvbnRyb2xsZXJzLgogICAqLwogIENvbnRyb2xsZXJDYWxsYmFjayBnZXQgb25SZXN1bWU7CgogIHZvaWQgc2V0IG9uUmVzdW1lKHZvaWQgb25SZXN1bWVIYW5kbGVyKCkpOwoKICAvKioKICAgKiBUaGUgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gdGhlIHN0cmVhbSBpcyBjYW5jZWxlZC4KICAgKgogICAqIE1heSBiZSBzZXQgdG8gYG51bGxgLCBpbiB3aGljaCBjYXNlIG5vIGNhbGxiYWNrIHdpbGwgaGFwcGVuLgogICAqLwogIENvbnRyb2xsZXJDYW5jZWxDYWxsYmFjayBnZXQgb25DYW5jZWw7CgogIHZvaWQgc2V0IG9uQ2FuY2VsKG9uQ2FuY2VsSGFuZGxlcigpKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIHZpZXcgb2YgdGhpcyBvYmplY3QgdGhhdCBvbmx5IGV4cG9zZXMgdGhlIFtTdHJlYW1TaW5rXSBpbnRlcmZhY2UuCiAgICovCiAgU3RyZWFtU2luazxUPiBnZXQgc2luazsKCiAgLyoqCiAgICogV2hldGhlciB0aGUgc3RyZWFtIGNvbnRyb2xsZXIgaXMgY2xvc2VkIGZvciBhZGRpbmcgbW9yZSBldmVudHMuCiAgICoKICAgKiBUaGUgY29udHJvbGxlciBiZWNvbWVzIGNsb3NlZCBieSBjYWxsaW5nIHRoZSBbY2xvc2VdIG1ldGhvZC4KICAgKiBOZXcgZXZlbnRzIGNhbm5vdCBiZSBhZGRlZCwgYnkgY2FsbGluZyBbYWRkXSBvciBbYWRkRXJyb3JdLAogICAqIHRvIGEgY2xvc2VkIGNvbnRyb2xsZXIuCiAgICoKICAgKiBJZiB0aGUgY29udHJvbGxlciBpcyBjbG9zZWQsCiAgICogdGhlICJkb25lIiBldmVudCBtaWdodCBub3QgaGF2ZSBiZWVuIGRlbGl2ZXJlZCB5ZXQsCiAgICogYnV0IGl0IGhhcyBiZWVuIHNjaGVkdWxlZCwgYW5kIGl0IGlzIHRvbyBsYXRlIHRvIGFkZCBtb3JlIGV2ZW50cy4KICAgKi8KICBib29sIGdldCBpc0Nsb3NlZDsKCiAgLyoqCiAgICogV2hldGhlciB0aGUgc3Vic2NyaXB0aW9uIHdvdWxkIG5lZWQgdG8gYnVmZmVyIGV2ZW50cy4KICAgKgogICAqIFRoaXMgaXMgdGhlIGNhc2UgaWYgdGhlIGNvbnRyb2xsZXIncyBzdHJlYW0gaGFzIGEgbGlzdGVuZXIgYW5kIGl0IGlzCiAgICogcGF1c2VkLCBvciBpZiBpdCBoYXMgbm90IHJlY2VpdmVkIGEgbGlzdGVuZXIgeWV0LiBJbiB0aGF0IGNhc2UsIHRoZQogICAqIGNvbnRyb2xsZXIgaXMgY29uc2lkZXJlZCBwYXVzZWQgYXMgd2VsbC4KICAgKgogICAqIEEgYnJvYWRjYXN0IHN0cmVhbSBjb250cm9sbGVyIGlzIG5ldmVyIGNvbnNpZGVyZWQgcGF1c2VkLiBJdCBhbHdheXMKICAgKiBmb3J3YXJkcyBpdHMgZXZlbnRzIHRvIGFsbCB1bmNhbmNlbGVkIHN1YnNjcmlwdGlvbnMsIGlmIGFueSwKICAgKiBhbmQgbGV0IHRoZSBzdWJzY3JpcHRpb25zIGhhbmRsZSB0aGVpciBvd24gcGF1c2luZyBhbmQgYnVmZmVyaW5nLgogICAqLwogIGJvb2wgZ2V0IGlzUGF1c2VkOwoKICAvKiogV2hldGhlciB0aGVyZSBpcyBhIHN1YnNjcmliZXIgb24gdGhlIFtTdHJlYW1dLiAqLwogIGJvb2wgZ2V0IGhhc0xpc3RlbmVyOwoKICAvKioKICAgKiBTZW5kcyBhIGRhdGEgW2V2ZW50XS4KICAgKgogICAqIExpc3RlbmVycyByZWNlaXZlIHRoaXMgZXZlbnQgaW4gYSBsYXRlciBtaWNyb3Rhc2suCiAgICoKICAgKiBOb3RlIHRoYXQgYSBzeW5jaHJvbm91cyBjb250cm9sbGVyIChjcmVhdGVkIGJ5IHBhc3NpbmcgdHJ1ZSB0byB0aGUgYHN5bmNgCiAgICogcGFyYW1ldGVyIG9mIHRoZSBgU3RyZWFtQ29udHJvbGxlcmAgY29uc3RydWN0b3IpIGRlbGl2ZXJzIGV2ZW50cwogICAqIGltbWVkaWF0ZWx5LiBTaW5jZSB0aGlzIGJlaGF2aW9yIHZpb2xhdGVzIHRoZSBjb250cmFjdCBtZW50aW9uZWQgaGVyZSwKICAgKiBzeW5jaHJvbm91cyBjb250cm9sbGVycyBzaG91bGQgb25seSBiZSB1c2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUKICAgKiBkb2N1bWVudGF0aW9uIHRvIGVuc3VyZSB0aGF0IHRoZSBkZWxpdmVyZWQgZXZlbnRzIGFsd2F5cyAqYXBwZWFyKiBhcyBpZgogICAqIHRoZXkgd2VyZSBkZWxpdmVyZWQgaW4gYSBzZXBhcmF0ZSBtaWNyb3Rhc2suCiAgICovCiAgdm9pZCBhZGQoVCBldmVudCk7CgogIC8qKgogICAqIFNlbmRzIG9yIGVucXVldWVzIGFuIGVycm9yIGV2ZW50LgogICAqCiAgICogSWYgW2Vycm9yXSBpcyBgbnVsbGAsIGl0IGlzIHJlcGxhY2VkIGJ5IGEgW051bGxUaHJvd25FcnJvcl0uCiAgICoKICAgKiBMaXN0ZW5lcnMgcmVjZWl2ZSB0aGlzIGV2ZW50IGF0IGEgbGF0ZXIgbWljcm90YXNrLiBUaGlzIGJlaGF2aW9yIGNhbiBiZQogICAqIG92ZXJyaWRkZW4gYnkgdXNpbmcgYHN5bmNgIGNvbnRyb2xsZXJzLiBOb3RlLCBob3dldmVyLCB0aGF0IHN5bmMKICAgKiBjb250cm9sbGVycyBoYXZlIHRvIHNhdGlzZnkgdGhlIHByZWNvbmRpdGlvbnMgbWVudGlvbmVkIGluIHRoZQogICAqIGRvY3VtZW50YXRpb24gb2YgdGhlIGNvbnN0cnVjdG9ycy4KICAgKi8KICB2b2lkIGFkZEVycm9yKE9iamVjdCBlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pOwoKICAvKioKICAgKiBDbG9zZXMgdGhlIHN0cmVhbS4KICAgKgogICAqIExpc3RlbmVycyByZWNlaXZlIHRoZSBkb25lIGV2ZW50IGF0IGEgbGF0ZXIgbWljcm90YXNrLiBUaGlzIGJlaGF2aW9yIGNhbiBiZQogICAqIG92ZXJyaWRkZW4gYnkgdXNpbmcgYHN5bmNgIGNvbnRyb2xsZXJzLiBOb3RlLCBob3dldmVyLCB0aGF0IHN5bmMKICAgKiBjb250cm9sbGVycyBoYXZlIHRvIHNhdGlzZnkgdGhlIHByZWNvbmRpdGlvbnMgbWVudGlvbmVkIGluIHRoZQogICAqIGRvY3VtZW50YXRpb24gb2YgdGhlIGNvbnN0cnVjdG9ycy4KICAgKi8KICBGdXR1cmUgY2xvc2UoKTsKCiAgLyoqCiAgICogUmVjZWl2ZXMgZXZlbnRzIGZyb20gW3NvdXJjZV0gYW5kIHB1dHMgdGhlbSBpbnRvIHRoaXMgY29udHJvbGxlcidzIHN0cmVhbS4KICAgKgogICAqIFJldHVybnMgYSBmdXR1cmUgd2hpY2ggY29tcGxldGVzIHdoZW4gdGhlIHNvdXJjZSBzdHJlYW0gaXMgZG9uZS4KICAgKgogICAqIEV2ZW50cyBtdXN0IG5vdCBiZSBhZGRlZCBkaXJlY3RseSB0byB0aGlzIGNvbnRyb2xsZXIgdXNpbmcgW2FkZF0sCiAgICogW2FkZEVycm9yXSwgW2Nsb3NlXSBvciBbYWRkU3RyZWFtXSwgdW50aWwgdGhlIHJldHVybmVkIGZ1dHVyZQogICAqIGlzIGNvbXBsZXRlLgogICAqCiAgICogRGF0YSBhbmQgZXJyb3IgZXZlbnRzIGFyZSBmb3J3YXJkZWQgdG8gdGhpcyBjb250cm9sbGVyJ3Mgc3RyZWFtLiBBIGRvbmUKICAgKiBldmVudCBvbiB0aGUgc291cmNlIHdpbGwgZW5kIHRoZSBgYWRkU3RyZWFtYCBvcGVyYXRpb24gYW5kIGNvbXBsZXRlIHRoZQogICAqIHJldHVybmVkIGZ1dHVyZS4KICAgKgogICAqIElmIFtjYW5jZWxPbkVycm9yXSBpcyB0cnVlLCBvbmx5IHRoZSBmaXJzdCBlcnJvciBvbiBbc291cmNlXSBpcwogICAqIGZvcndhcmRlZCB0byB0aGUgY29udHJvbGxlcidzIHN0cmVhbSwgYW5kIHRoZSBgYWRkU3RyZWFtYCBlbmRzCiAgICogYWZ0ZXIgdGhpcy4gSWYgW2NhbmNlbE9uRXJyb3JdIGlzIGZhbHNlLCBhbGwgZXJyb3JzIGFyZSBmb3J3YXJkZWQKICAgKiBhbmQgb25seSBhIGRvbmUgZXZlbnQgd2lsbCBlbmQgdGhlIGBhZGRTdHJlYW1gLgogICAqIElmIFtjYW5jZWxPbkVycm9yXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBmYWxzZS4KICAgKi8KICBGdXR1cmUgYWRkU3RyZWFtKFN0cmVhbTxUPiBzb3VyY2UsIHtib29sIGNhbmNlbE9uRXJyb3J9KTsKfQoKLyoqCiAqIEEgc3RyZWFtIGNvbnRyb2xsZXIgdGhhdCBkZWxpdmVycyBpdHMgZXZlbnRzIHN5bmNocm9ub3VzbHkuCiAqCiAqIEEgc3luY2hyb25vdXMgc3RyZWFtIGNvbnRyb2xsZXIgaXMgaW50ZW5kZWQgZm9yIGNhc2VzIHdoZXJlCiAqIGFuIGFscmVhZHkgYXN5bmNocm9ub3VzIGV2ZW50IHRyaWdnZXJzIGFuIGV2ZW50IG9uIGEgc3RyZWFtLgogKgogKiBJbnN0ZWFkIG9mIGFkZGluZyB0aGUgZXZlbnQgdG8gdGhlIHN0cmVhbSBpbiBhIGxhdGVyIG1pY3JvdGFzaywKICogY2F1c2luZyBleHRyYSBsYXRlbmN5LCB0aGUgZXZlbnQgaXMgaW5zdGVhZCBmaXJlZCBpbW1lZGlhdGVseSBieSB0aGUKICogc3luY2hyb25vdXMgc3RyZWFtIGNvbnRyb2xsZXIsIGFzIGlmIHRoZSBzdHJlYW0gZXZlbnQgd2FzCiAqIHRoZSBjdXJyZW50IGV2ZW50IG9yIG1pY3JvdGFzay4KICoKICogVGhlIHN5bmNocm9ub3VzIHN0cmVhbSBjb250cm9sbGVyIGNhbiBiZSB1c2VkIHRvIGJyZWFrIHRoZSBjb250cmFjdAogKiBvbiBbU3RyZWFtXSwgYW5kIGl0IG11c3QgYmUgdXNlZCBjYXJlZnVsbHkgdG8gYXZvaWQgZG9pbmcgc28uCiAqCiAqIFRoZSBvbmx5IGFkdmFudGFnZSB0byB1c2luZyBhIFtTeW5jaHJvbm91c1N0cmVhbUNvbnRyb2xsZXJdIG92ZXIgYQogKiBub3JtYWwgW1N0cmVhbUNvbnRyb2xsZXJdIGlzIHRoZSBpbXByb3ZlZCBsYXRlbmN5LgogKiBPbmx5IHVzZSB0aGUgc3luY2hyb25vdXMgdmVyc2lvbiBpZiB0aGUgaW1wcm92ZW1lbnQgaXMgc2lnbmlmaWNhbnQsCiAqIGFuZCBpZiBpdHMgdXNlIGlzIHNhZmUuIE90aGVyd2lzZSBqdXN0IHVzZSBhIG5vcm1hbCBzdHJlYW0gY29udHJvbGxlciwKICogd2hpY2ggd2lsbCBhbHdheXMgaGF2ZSB0aGUgY29ycmVjdCBiZWhhdmlvciBmb3IgYSBbU3RyZWFtXSwgYW5kIHdvbid0CiAqIGFjY2lkZW50YWxseSBicmVhayBvdGhlciBjb2RlLgogKgogKiBBZGRpbmcgZXZlbnRzIHRvIGEgc3luY2hyb25vdXMgY29udHJvbGxlciBzaG91bGQgb25seSBoYXBwZW4gYXMgdGhlCiAqIHZlcnkgbGFzdCBwYXJ0IG9mIHRoZSBoYW5kbGluZyBvZiB0aGUgb3JpZ2luYWwgZXZlbnQuCiAqIEF0IHRoYXQgcG9pbnQsIGFkZGluZyBhbiBldmVudCB0byB0aGUgc3RyZWFtIGlzIGVxdWl2YWxlbnQgdG8KICogcmV0dXJuaW5nIHRvIHRoZSBldmVudCBsb29wIGFuZCBhZGRpbmcgdGhlIGV2ZW50IGluIHRoZSBuZXh0IG1pY3JvdGFzay4KICoKICogRWFjaCBsaXN0ZW5lciBjYWxsYmFjayB3aWxsIGJlIHJ1biBhcyBpZiBpdCB3YXMgYSB0b3AtbGV2ZWwgZXZlbnQKICogb3IgbWljcm90YXNrLiBUaGlzIG1lYW5zIHRoYXQgaWYgaXQgdGhyb3dzLCB0aGUgZXJyb3Igd2lsbCBiZSByZXBvcnRlZCBhcwogKiB1bmNhdWdodCBhcyBzb29uIGFzIHBvc3NpYmxlLgogKiBUaGlzIGlzIG9uZSByZWFzb24gdG8gYWRkIHRoZSBldmVudCBhcyB0aGUgbGFzdCB0aGluZyBpbiB0aGUgb3JpZ2luYWwgZXZlbnQKICogaGFuZGxlciAtIGFueSBhY3Rpb24gZG9uZSBhZnRlciBhZGRpbmcgdGhlIGV2ZW50IHdpbGwgZGVsYXkgdGhlIHJlcG9ydCBvZgogKiBlcnJvcnMgaW4gdGhlIGV2ZW50IGxpc3RlbmVyIGNhbGxiYWNrcy4KICoKICogSWYgYW4gZXZlbnQgaXMgYWRkZWQgaW4gYSBzZXR0aW5nIHRoYXQgaXNuJ3Qga25vd24gdG8gYmUgYW5vdGhlciBldmVudCwKICogaXQgbWF5IGNhdXNlIHRoZSBzdHJlYW0ncyBsaXN0ZW5lciB0byBnZXQgdGhhdCBldmVudCBiZWZvcmUgdGhlIGxpc3RlbmVyCiAqIGlzIHJlYWR5IHRvIGhhbmRsZSBpdC4gV2UgcHJvbWlzZSB0aGF0IGFmdGVyIGNhbGxpbmcgW1N0cmVhbS5saXN0ZW5dLAogKiB5b3Ugd29uJ3QgZ2V0IGFueSBldmVudHMgdW50aWwgdGhlIGNvZGUgZG9pbmcgdGhlIGxpc3RlbiBoYXMgY29tcGxldGVkLgogKiBDYWxsaW5nIFthZGRdIGluIHJlc3BvbnNlIHRvIGEgZnVuY3Rpb24gY2FsbCBvZiB1bmtub3duIG9yaWdpbiBtYXkgYnJlYWsKICogdGhhdCBwcm9taXNlLgogKgogKiBBbiBbb25MaXN0ZW5dIGNhbGxiYWNrIGZyb20gdGhlIGNvbnRyb2xsZXIgaXMgKm5vdCogYW4gYXN5bmNocm9ub3VzIGV2ZW50LAogKiBhbmQgYWRkaW5nIGV2ZW50cyB0byB0aGUgY29udHJvbGxlciBpbiB0aGUgYG9uTGlzdGVuYCBjYWxsYmFjayBpcyBhbHdheXMKICogd3JvbmcuIFRoZSBldmVudHMgd2lsbCBiZSBkZWxpdmVyZWQgYmVmb3JlIHRoZSBsaXN0ZW5lciBoYXMgZXZlbiByZWNlaXZlZAogKiB0aGUgc3Vic2NyaXB0aW9uIHlldC4KICoKICogVGhlIHN5bmNocm9ub3VzIGJyb2FkY2FzdCBzdHJlYW0gY29udHJvbGxlciBhbHNvIGhhcyBhIHJlc3RyaWN0aW9ucyB0aGF0IGEKICogbm9ybWFsIHN0cmVhbSBjb250cm9sbGVyIGRvZXMgbm90OgogKiBUaGUgW2FkZF0sIFthZGRFcnJvcl0sIFtjbG9zZV0gYW5kIFthZGRTdHJlYW1dIG1ldGhvZHMgKm11c3Qgbm90KiBiZQogKiBjYWxsZWQgd2hpbGUgYW4gZXZlbnQgaXMgYmVpbmcgZGVsaXZlcmVkLgogKiBUaGF0IGlzLCBpZiBhIGNhbGxiYWNrIG9uIGEgc3Vic2NyaXB0aW9uIG9uIHRoZSBjb250cm9sbGVyJ3Mgc3RyZWFtIGNhdXNlcwogKiBhIGNhbGwgdG8gYW55IG9mIHRoZSBmdW5jdGlvbnMgYWJvdmUsIHRoZSBjYWxsIHdpbGwgZmFpbC4KICogQSBicm9hZGNhc3Qgc3RyZWFtIG1heSBoYXZlIG1vcmUgdGhhbiBvbmUgbGlzdGVuZXIsIGFuZCBpZiBhbgogKiBldmVudCBpcyBhZGRlZCBzeW5jaHJvbm91c2x5IHdoaWxlIGFub3RoZXIgaXMgYmVpbmcgYWxzbyBpbiB0aGUgcHJvY2VzcwogKiBvZiBiZWluZyBhZGRlZCwgdGhlIGxhdHRlciBldmVudCBtaWdodCByZWFjaCBzb21lIGxpc3RlbmVycyBiZWZvcmUKICogdGhlIGZvcm1lci4gVG8gcHJldmVudCB0aGF0LCBhbiBldmVudCBjYW5ub3QgYmUgYWRkZWQgd2hpbGUgYSBwcmV2aW91cwogKiBldmVudCBpcyBiZWluZyBmaXJlZC4KICogVGhpcyBndWFyYW50ZWVzIHRoYXQgYW4gZXZlbnQgaXMgZnVsbHkgZGVsaXZlcmVkIHdoZW4gdGhlCiAqIGZpcnN0IFthZGRdLCBbYWRkRXJyb3JdIG9yIFtjbG9zZV0gcmV0dXJucywKICogYW5kIGZ1cnRoZXIgZXZlbnRzIHdpbGwgYmUgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLgogKgogKiBUaGlzIHN0aWxsIG9ubHkgZ3VhcmFudGVlcyB0aGF0IHRoZSBldmVudCBpcyBkZWxpdmVyZWQgdG8gdGhlIHN1YnNjcmlwdGlvbi4KICogSWYgdGhlIHN1YnNjcmlwdGlvbiBpcyBwYXVzZWQsIHRoZSBhY3R1YWwgY2FsbGJhY2sgbWF5IHN0aWxsIGhhcHBlbiBsYXRlciwKICogYW5kIHRoZSBldmVudCB3aWxsIGluc3RlYWQgYmUgYnVmZmVyZWQgYnkgdGhlIHN1YnNjcmlwdGlvbi4KICogQmFycmluZyBwYXVzaW5nLCBhbmQgdGhlIGZvbGxvd2luZyBidWZmZXJlZCBldmVudHMgdGhhdCBoYXZlbid0IGJlZW4KICogZGVsaXZlcmVkIHlldCwgY2FsbGJhY2tzIHdpbGwgYmUgY2FsbGVkIHN5bmNocm9ub3VzbHkgd2hlbiBhbiBldmVudCBpcyBhZGRlZC4KICoKICogQWRkaW5nIGFuIGV2ZW50IHRvIGEgc3luY2hyb25vdXMgbm9uLWJyb2FkY2FzdCBzdHJlYW0gY29udHJvbGxlciB3aGlsZQogKiBhbm90aGVyIGV2ZW50IGlzIGluIHByb2dyZXNzIG1heSBjYXVzZSB0aGUgc2Vjb25kIGV2ZW50IHRvIGJlIGRlbGF5ZWQKICogYW5kIG5vdCBiZSBkZWxpdmVyZWQgc3luY2hyb25vdXNseSwgYW5kIHVudGlsIHRoYXQgZXZlbnQgaXMgZGVsaXZlcmVkLAogKiB0aGUgY29udHJvbGxlciB3aWxsIG5vdCBhY3Qgc3luY2hyb25vdXNseS4KICovCmFic3RyYWN0IGNsYXNzIFN5bmNocm9ub3VzU3RyZWFtQ29udHJvbGxlcjxUPiBpbXBsZW1lbnRzIFN0cmVhbUNvbnRyb2xsZXI8VD4gewogIC8qKgogICAqIEFkZHMgZXZlbnQgdG8gdGhlIGNvbnRyb2xsZXIncyBzdHJlYW0uCiAgICoKICAgKiBBcyBbU3RyZWFtQ29udHJvbGxlci5hZGRdLCBidXQgbXVzdCBub3QgYmUgY2FsbGVkIHdoaWxlIGFuIGV2ZW50IGlzCiAgICogYmVpbmcgYWRkZWQgYnkgW2FkZF0sIFthZGRFcnJvcl0gb3IgW2Nsb3NlXS4KICAgKi8KICB2b2lkIGFkZChUIGRhdGEpOwoKICAvKioKICAgKiBBZGRzIGVycm9yIHRvIHRoZSBjb250cm9sbGVyJ3Mgc3RyZWFtLgogICAqCiAgICogQXMgW1N0cmVhbUNvbnRyb2xsZXIuYWRkRXJyb3JdLCBidXQgbXVzdCBub3QgYmUgY2FsbGVkIHdoaWxlIGFuIGV2ZW50IGlzCiAgICogYmVpbmcgYWRkZWQgYnkgW2FkZF0sIFthZGRFcnJvcl0gb3IgW2Nsb3NlXS4KICAgKi8KICB2b2lkIGFkZEVycm9yKE9iamVjdCBlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pOwoKICAvKioKICAgKiBDbG9zZXMgdGhlIGNvbnRyb2xsZXIncyBzdHJlYW0uCiAgICoKICAgKiBBcyBbU3RyZWFtQ29udHJvbGxlci5jbG9zZV0sIGJ1dCBtdXN0IG5vdCBiZSBjYWxsZWQgd2hpbGUgYW4gZXZlbnQgaXMKICAgKiBiZWluZyBhZGRlZCBieSBbYWRkXSwgW2FkZEVycm9yXSBvciBbY2xvc2VdLgogICAqLwogIEZ1dHVyZSBjbG9zZSgpOwp9CgphYnN0cmFjdCBjbGFzcyBfU3RyZWFtQ29udHJvbGxlckxpZmVjeWNsZTxUPiB7CiAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IF9zdWJzY3JpYmUoCiAgICAgIHZvaWQgb25EYXRhKFQgZGF0YSksIEZ1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcik7CiAgdm9pZCBfcmVjb3JkUGF1c2UoU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbikge30KICB2b2lkIF9yZWNvcmRSZXN1bWUoU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbikge30KICBGdXR1cmUgX3JlY29yZENhbmNlbChTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uKSA9PiBudWxsOwp9CgovLyBCYXNlIHR5cGUgZm9yIGltcGxlbWVudGF0aW9ucyBvZiBzdHJlYW0gY29udHJvbGxlcnMuCmFic3RyYWN0IGNsYXNzIF9TdHJlYW1Db250cm9sbGVyQmFzZTxUPgogICAgaW1wbGVtZW50cwogICAgICAgIFN0cmVhbUNvbnRyb2xsZXI8VD4sCiAgICAgICAgX1N0cmVhbUNvbnRyb2xsZXJMaWZlY3ljbGU8VD4sCiAgICAgICAgX0V2ZW50U2luazxUPiwKICAgICAgICBfRXZlbnREaXNwYXRjaDxUPiB7fQoKLyoqCiAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgW1N0cmVhbUNvbnRyb2xsZXJdLgogKgogKiBDb250cm9scyBhIHN0cmVhbSB0aGF0IG9ubHkgc3VwcG9ydHMgYSBzaW5nbGUgY29udHJvbGxlci4KICovCmFic3RyYWN0IGNsYXNzIF9TdHJlYW1Db250cm9sbGVyPFQ+IGltcGxlbWVudHMgX1N0cmVhbUNvbnRyb2xsZXJCYXNlPFQ+IHsKICAvLyBUaGUgc3RhdGVzIGFyZSBiaXQtZmxhZ3MuIE1vcmUgdGhhbiBvbmUgY2FuIGJlIHNldCBhdCBhIHRpbWUuCiAgLy8KICAvLyBUaGUgInN1YnNjcmlwdGlvbiBzdGF0ZSIgZ29lcyB0aHJvdWdoIHRoZSBzdGF0ZXM6CiAgLy8gICBpbml0aWFsIC0+IHN1YnNjcmliZWQgLT4gY2FuY2VsZWQuCiAgLy8gVGhlc2UgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KICAvLyBUaGUgImNsb3NlZCIgc3RhdGUgcmVjb3JkcyB3aGV0aGVyIHRoZSBbY2xvc2VdIG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQKICAvLyBvbiB0aGUgY29udHJvbGxlci4gVGhpcyBjYW4gYmUgZG9uZSBhdCBhbnkgdGltZS4gSWYgZG9uZSBiZWZvcmUKICAvLyBzdWJzY3JpcHRpb24sIHRoZSBkb25lIGV2ZW50IGlzIHF1ZXVlZC4gSWYgZG9uZSBhZnRlciBjYW5jZWwsIHRoZSBkb25lCiAgLy8gZXZlbnQgaXMgaWdub3JlZCAoanVzdCBhcyBhbnkgb3RoZXIgZXZlbnQgYWZ0ZXIgYSBjYW5jZWwpLgoKICAvKiogVGhlIGNvbnRyb2xsZXIgaXMgaW4gaXRzIGluaXRpYWwgc3RhdGUgd2l0aCBubyBzdWJzY3JpcHRpb24uICovCiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfSU5JVElBTCA9IDA7CiAgLyoqIFRoZSBjb250cm9sbGVyIGhhcyBhIHN1YnNjcmlwdGlvbiwgYnV0IGhhc24ndCBiZWVuIGNsb3NlZCBvciBjYW5jZWxlZC4gKi8KICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9TVUJTQ1JJQkVEID0gMTsKICAvKiogVGhlIHN1YnNjcmlwdGlvbiBpcyBjYW5jZWxlZC4gKi8KICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9DQU5DRUxFRCA9IDI7CiAgLyoqIE1hc2sgZm9yIHRoZSBzdWJzY3JpcHRpb24gc3RhdGUuICovCiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfU1VCU0NSSVBUSU9OX01BU0sgPSAzOwoKICAvLyBUaGUgZm9sbG93aW5nIHN0YXRlIHJlbGF0ZSB0byB0aGUgY29udHJvbGxlciwgbm90IHRoZSBzdWJzY3JpcHRpb24uCiAgLy8gSWYgY2xvc2VkLCBhZGRpbmcgbW9yZSBldmVudHMgaXMgbm90IGFsbG93ZWQuCiAgLy8gSWYgZXhlY3V0aW5nIGFuIFthZGRTdHJlYW1dLCBuZXcgZXZlbnRzIGFyZSBub3QgYWxsb3dlZCBlaXRoZXIsIGJ1dCB3aWxsCiAgLy8gYmUgYWRkZWQgYnkgdGhlIHN0cmVhbS4KCiAgLyoqCiAgICogVGhlIGNvbnRyb2xsZXIgaXMgY2xvc2VkIGR1ZSB0byBjYWxsaW5nIFtjbG9zZV0uCiAgICoKICAgKiBXaGVuIHRoZSBzdHJlYW0gaXMgY2xvc2VkLCB5b3UgY2FuIG5laXRoZXIgYWRkIG5ldyBldmVudHMgbm9yIGFkZCBuZXcKICAgKiBsaXN0ZW5lcnMuCiAgICovCiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfQ0xPU0VEID0gNDsKICAvKioKICAgKiBUaGUgY29udHJvbGxlciBpcyBpbiB0aGUgbWlkZGxlIG9mIGFuIFthZGRTdHJlYW1dIG9wZXJhdGlvbi4KICAgKgogICAqIFdoaWxlIGFkZGluZyBldmVudHMgZnJvbSBhIHN0cmVhbSwgbm8gbmV3IGV2ZW50cyBjYW4gYmUgYWRkZWQgZGlyZWN0bHkKICAgKiBvbiB0aGUgY29udHJvbGxlci4KICAgKi8KICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9BRERTVFJFQU0gPSA4OwoKICAvKioKICAgKiBGaWVsZCBjb250YWluaW5nIGRpZmZlcmVudCBkYXRhIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBzdWJzY3JpcHRpb24KICAgKiBzdGF0ZS4KICAgKgogICAqIElmIFtfc3RhdGVdIGlzIFtfU1RBVEVfSU5JVElBTF0sIHRoZSBmaWVsZCBtYXkgY29udGFpbiBhIFtfUGVuZGluZ0V2ZW50c10KICAgKiBmb3IgZXZlbnRzIGFkZGVkIHRvIHRoZSBjb250cm9sbGVyIGJlZm9yZSBhIHN1YnNjcmlwdGlvbi4KICAgKgogICAqIFdoaWxlIFtfc3RhdGVdIGlzIFtfU1RBVEVfU1VCU0NSSUJFRF0sIHRoZSBmaWVsZCBjb250YWlucyB0aGUgc3Vic2NyaXB0aW9uLgogICAqCiAgICogV2hlbiBbX3N0YXRlXSBpcyBbX1NUQVRFX0NBTkNFTEVEXSB0aGUgZmllbGQgaXMgY3VycmVudGx5IG5vdCB1c2VkLgogICAqLwogIHZhciBfdmFyRGF0YTsKCiAgLyoqIEN1cnJlbnQgc3RhdGUgb2YgdGhlIGNvbnRyb2xsZXIuICovCiAgaW50IF9zdGF0ZSA9IF9TVEFURV9JTklUSUFMOwoKICAvKioKICAgKiBGdXR1cmUgY29tcGxldGVkIHdoZW4gdGhlIHN0cmVhbSBzZW5kcyBpdHMgbGFzdCBldmVudC4KICAgKgogICAqIFRoaXMgaXMgYWxzbyB0aGUgZnV0dXJlIHJldHVybmVkIGJ5IFtjbG9zZV0uCiAgICovCiAgLy8gVE9ETyhscm4pOiBDb3VsZCB0aGlzIGJlIHN0b3JlZCBpbiB0aGUgdmFyRGF0YSBmaWVsZCB0b28sIGlmIGl0J3Mgbm90CiAgLy8gYWNjZXNzZWQgdW50aWwgdGhlIGNhbGwgdG8gImNsb3NlIj8gVGhlbiB3ZSBuZWVkIHRvIHNwZWNpYWwgY2FzZSBpZiBpdCdzCiAgLy8gYWNjZXNzZWQgZWFybGllciwgb3IgaWYgY2xvc2UgaXMgY2FsbGVkIGJlZm9yZSBzdWJzY3JpYmluZy4KICBfRnV0dXJlIF9kb25lRnV0dXJlOwoKICBDb250cm9sbGVyQ2FsbGJhY2sgb25MaXN0ZW47CiAgQ29udHJvbGxlckNhbGxiYWNrIG9uUGF1c2U7CiAgQ29udHJvbGxlckNhbGxiYWNrIG9uUmVzdW1lOwogIENvbnRyb2xsZXJDYW5jZWxDYWxsYmFjayBvbkNhbmNlbDsKCiAgX1N0cmVhbUNvbnRyb2xsZXIodGhpcy5vbkxpc3RlbiwgdGhpcy5vblBhdXNlLCB0aGlzLm9uUmVzdW1lLCB0aGlzLm9uQ2FuY2VsKTsKCiAgLy8gUmV0dXJuIGEgbmV3IHN0cmVhbSBldmVyeSB0aW1lLiBUaGUgc3RyZWFtcyBhcmUgZXF1YWwsIGJ1dCBub3QgaWRlbnRpY2FsLgogIFN0cmVhbTxUPiBnZXQgc3RyZWFtID0+IG5ldyBfQ29udHJvbGxlclN0cmVhbTxUPih0aGlzKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIHZpZXcgb2YgdGhpcyBvYmplY3QgdGhhdCBvbmx5IGV4cG9zZXMgdGhlIFtTdHJlYW1TaW5rXSBpbnRlcmZhY2UuCiAgICovCiAgU3RyZWFtU2luazxUPiBnZXQgc2luayA9PiBuZXcgX1N0cmVhbVNpbmtXcmFwcGVyPFQ+KHRoaXMpOwoKICAvKioKICAgKiBXaGV0aGVyIGEgbGlzdGVuZXIgaGFzIGV4aXN0ZWQgYW5kIGJlZW4gY2FuY2VsZWQuCiAgICoKICAgKiBBZnRlciB0aGlzLCBhZGRpbmcgbW9yZSBldmVudHMgd2lsbCBiZSBpZ25vcmVkLgogICAqLwogIGJvb2wgZ2V0IF9pc0NhbmNlbGVkID0+IChfc3RhdGUgJiBfU1RBVEVfQ0FOQ0VMRUQpICE9IDA7CgogIC8qKiBXaGV0aGVyIHRoZXJlIGlzIGFuIGFjdGl2ZSBsaXN0ZW5lci4gKi8KICBib29sIGdldCBoYXNMaXN0ZW5lciA9PiAoX3N0YXRlICYgX1NUQVRFX1NVQlNDUklCRUQpICE9IDA7CgogIC8qKiBXaGV0aGVyIHRoZXJlIGhhcyBub3QgYmVlbiBhIGxpc3RlbmVyIHlldC4gKi8KICBib29sIGdldCBfaXNJbml0aWFsU3RhdGUgPT4KICAgICAgKF9zdGF0ZSAmIF9TVEFURV9TVUJTQ1JJUFRJT05fTUFTSykgPT0gX1NUQVRFX0lOSVRJQUw7CgogIGJvb2wgZ2V0IGlzQ2xvc2VkID0+IChfc3RhdGUgJiBfU1RBVEVfQ0xPU0VEKSAhPSAwOwoKICBib29sIGdldCBpc1BhdXNlZCA9PgogICAgICBoYXNMaXN0ZW5lciA/IF9zdWJzY3JpcHRpb24uX2lzSW5wdXRQYXVzZWQgOiAhX2lzQ2FuY2VsZWQ7CgogIGJvb2wgZ2V0IF9pc0FkZGluZ1N0cmVhbSA9PiAoX3N0YXRlICYgX1NUQVRFX0FERFNUUkVBTSkgIT0gMDsKCiAgLyoqIE5ldyBldmVudHMgbWF5IG5vdCBiZSBhZGRlZCBhZnRlciBjbG9zZSwgb3IgZHVyaW5nIGFkZFN0cmVhbS4gKi8KICBib29sIGdldCBfbWF5QWRkRXZlbnQgPT4gKF9zdGF0ZSA8IF9TVEFURV9DTE9TRUQpOwoKICAvLyBSZXR1cm5zIHRoZSBwZW5kaW5nIGV2ZW50cy4KICAvLyBQZW5kaW5nIGV2ZW50cyBhcmUgZXZlbnRzIGFkZGVkIGJlZm9yZSBhIHN1YnNjcmlwdGlvbiBleGlzdHMuCiAgLy8gVGhleSBhcmUgYWRkZWQgdG8gdGhlIHN1YnNjcmlwdGlvbiB3aGVuIGl0IGlzIGNyZWF0ZWQuCiAgLy8gUGVuZGluZyBldmVudHMsIGlmIGFueSwgYXJlIGtlcHQgaW4gdGhlIF92YXJEYXRhIGZpZWxkIHVudGlsIHRoZQogIC8vIHN0cmVhbSBpcyBsaXN0ZW5lZCB0by4KICAvLyBXaGlsZSBhZGRpbmcgYSBzdHJlYW0sIHBlbmRpbmcgZXZlbnRzIGFyZSBtb3ZlZCBpbnRvIHRoZQogIC8vIHN0YXRlIG9iamVjdCB0byBhbGxvdyB0aGUgc3RhdGUgb2JqZWN0IHRvIHVzZSB0aGUgX3ZhckRhdGEgZmllbGQuCiAgX1BlbmRpbmdFdmVudHM8VD4gZ2V0IF9wZW5kaW5nRXZlbnRzIHsKICAgIGFzc2VydChfaXNJbml0aWFsU3RhdGUpOwogICAgaWYgKCFfaXNBZGRpbmdTdHJlYW0pIHsKICAgICAgcmV0dXJuIF92YXJEYXRhOwogICAgfQogICAgX1N0cmVhbUNvbnRyb2xsZXJBZGRTdHJlYW1TdGF0ZTxUPiBzdGF0ZSA9IF92YXJEYXRhOwogICAgcmV0dXJuIHN0YXRlLnZhckRhdGE7CiAgfQoKICAvLyBSZXR1cm5zIHRoZSBwZW5kaW5nIGV2ZW50cywgYW5kIGNyZWF0ZXMgdGhlIG9iamVjdCBpZiBuZWNlc3NhcnkuCiAgX1N0cmVhbUltcGxFdmVudHM8VD4gX2Vuc3VyZVBlbmRpbmdFdmVudHMoKSB7CiAgICBhc3NlcnQoX2lzSW5pdGlhbFN0YXRlKTsKICAgIGlmICghX2lzQWRkaW5nU3RyZWFtKSB7CiAgICAgIF92YXJEYXRhID8/PSBuZXcgX1N0cmVhbUltcGxFdmVudHM8VD4oKTsKICAgICAgcmV0dXJuIF92YXJEYXRhOwogICAgfQogICAgX1N0cmVhbUNvbnRyb2xsZXJBZGRTdHJlYW1TdGF0ZTxUPiBzdGF0ZSA9IF92YXJEYXRhOwogICAgaWYgKHN0YXRlLnZhckRhdGEgPT0gbnVsbCkgc3RhdGUudmFyRGF0YSA9IG5ldyBfU3RyZWFtSW1wbEV2ZW50czxUPigpOwogICAgcmV0dXJuIHN0YXRlLnZhckRhdGE7CiAgfQoKICAvLyBHZXQgdGhlIGN1cnJlbnQgc3Vic2NyaXB0aW9uLgogIC8vIElmIHdlIGFyZSBhZGRpbmcgYSBzdHJlYW0sIHRoZSBzdWJzY3JpcHRpb24gaXMgbW92ZWQgaW50byB0aGUgc3RhdGUKICAvLyBvYmplY3QgdG8gYWxsb3cgdGhlIHN0YXRlIG9iamVjdCB0byB1c2UgdGhlIF92YXJEYXRhIGZpZWxkLgogIF9Db250cm9sbGVyU3Vic2NyaXB0aW9uPFQ+IGdldCBfc3Vic2NyaXB0aW9uIHsKICAgIGFzc2VydChoYXNMaXN0ZW5lcik7CiAgICBpZiAoX2lzQWRkaW5nU3RyZWFtKSB7CiAgICAgIF9TdHJlYW1Db250cm9sbGVyQWRkU3RyZWFtU3RhdGU8VD4gYWRkU3RhdGUgPSBfdmFyRGF0YTsKICAgICAgcmV0dXJuIGFkZFN0YXRlLnZhckRhdGE7CiAgICB9CiAgICByZXR1cm4gX3ZhckRhdGE7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGFuIGVycm9yIGRlc2NyaWJpbmcgd2h5IGFuIGV2ZW50IGNhbm5vdCBiZSBhZGRlZC4KICAgKgogICAqIFRoZSByZWFzb24sIGFuZCB0aGVyZWZvcmUgdGhlIGVycm9yIG1lc3NhZ2UsIGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgc3RhdGUuCiAgICovCiAgRXJyb3IgX2JhZEV2ZW50U3RhdGUoKSB7CiAgICBpZiAoaXNDbG9zZWQpIHsKICAgICAgcmV0dXJuIG5ldyBTdGF0ZUVycm9yKCJDYW5ub3QgYWRkIGV2ZW50IGFmdGVyIGNsb3NpbmciKTsKICAgIH0KICAgIGFzc2VydChfaXNBZGRpbmdTdHJlYW0pOwogICAgcmV0dXJuIG5ldyBTdGF0ZUVycm9yKCJDYW5ub3QgYWRkIGV2ZW50IHdoaWxlIGFkZGluZyBhIHN0cmVhbSIpOwogIH0KCiAgLy8gU3RyZWFtU2luayBpbnRlcmZhY2UuCiAgRnV0dXJlIGFkZFN0cmVhbShTdHJlYW08VD4gc291cmNlLCB7Ym9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgaWYgKCFfbWF5QWRkRXZlbnQpIHRocm93IF9iYWRFdmVudFN0YXRlKCk7CiAgICBpZiAoX2lzQ2FuY2VsZWQpIHJldHVybiBuZXcgX0Z1dHVyZS5pbW1lZGlhdGUobnVsbCk7CiAgICBfU3RyZWFtQ29udHJvbGxlckFkZFN0cmVhbVN0YXRlPFQ+IGFkZFN0YXRlID0KICAgICAgICBuZXcgX1N0cmVhbUNvbnRyb2xsZXJBZGRTdHJlYW1TdGF0ZTxUPigKICAgICAgICAgICAgdGhpcywgX3ZhckRhdGEsIHNvdXJjZSwgY2FuY2VsT25FcnJvciA/PyBmYWxzZSk7CiAgICBfdmFyRGF0YSA9IGFkZFN0YXRlOwogICAgX3N0YXRlIHw9IF9TVEFURV9BRERTVFJFQU07CiAgICByZXR1cm4gYWRkU3RhdGUuYWRkU3RyZWFtRnV0dXJlOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIGZ1dHVyZSB0aGF0IGlzIGNvbXBsZXRlZCB3aGVuIHRoZSBzdHJlYW0gaXMgZG9uZQogICAqIHByb2Nlc3NpbmcgZXZlbnRzLgogICAqCiAgICogVGhpcyBoYXBwZW5zIGVpdGhlciB3aGVuIHRoZSBkb25lIGV2ZW50IGhhcyBiZWVuIHNlbnQsIG9yIGlmIHRoZQogICAqIHN1YnNjcmliZXIgb2YgYSBzaW5nbGUtc3Vic2NyaXB0aW9uIHN0cmVhbSBpcyBjYW5jZWxsZWQuCiAgICovCiAgRnV0dXJlIGdldCBkb25lID0+IF9lbnN1cmVEb25lRnV0dXJlKCk7CgogIEZ1dHVyZSBfZW5zdXJlRG9uZUZ1dHVyZSgpIHsKICAgIF9kb25lRnV0dXJlID8/PSBfaXNDYW5jZWxlZCA/IEZ1dHVyZS5fbnVsbEZ1dHVyZSA6IG5ldyBfRnV0dXJlKCk7CiAgICByZXR1cm4gX2RvbmVGdXR1cmU7CiAgfQoKICAvKioKICAgKiBTZW5kIG9yIGVucXVldWUgYSBkYXRhIGV2ZW50LgogICAqLwogIHZvaWQgYWRkKFQgdmFsdWUpIHsKICAgIGlmICghX21heUFkZEV2ZW50KSB0aHJvdyBfYmFkRXZlbnRTdGF0ZSgpOwogICAgX2FkZCh2YWx1ZSk7CiAgfQoKICAvKioKICAgKiBTZW5kIG9yIGVucXVldWUgYW4gZXJyb3IgZXZlbnQuCiAgICovCiAgdm9pZCBhZGRFcnJvcihPYmplY3QgZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICBpZiAoIV9tYXlBZGRFdmVudCkgdGhyb3cgX2JhZEV2ZW50U3RhdGUoKTsKICAgIGVycm9yID0gX25vbk51bGxFcnJvcihlcnJvcik7CiAgICBBc3luY0Vycm9yIHJlcGxhY2VtZW50ID0gWm9uZS5jdXJyZW50LmVycm9yQ2FsbGJhY2soZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgaWYgKHJlcGxhY2VtZW50ICE9IG51bGwpIHsKICAgICAgZXJyb3IgPSBfbm9uTnVsbEVycm9yKHJlcGxhY2VtZW50LmVycm9yKTsKICAgICAgc3RhY2tUcmFjZSA9IHJlcGxhY2VtZW50LnN0YWNrVHJhY2U7CiAgICB9CiAgICBfYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgLyoqCiAgICogQ2xvc2VzIHRoaXMgY29udHJvbGxlciBhbmQgc2VuZHMgYSBkb25lIGV2ZW50IG9uIHRoZSBzdHJlYW0uCiAgICoKICAgKiBUaGUgZmlyc3QgdGltZSBhIGNvbnRyb2xsZXIgaXMgY2xvc2VkLCBhICJkb25lIiBldmVudCBpcyBhZGRlZCB0byBpdHMKICAgKiBzdHJlYW0uCiAgICoKICAgKiBZb3UgYXJlIGFsbG93ZWQgdG8gY2xvc2UgdGhlIGNvbnRyb2xsZXIgbW9yZSB0aGFuIG9uY2UsIGJ1dCBvbmx5IHRoZSBmaXJzdAogICAqIGNhbGwgaGFzIGFueSBlZmZlY3QuCiAgICoKICAgKiBBZnRlciBjbG9zaW5nLCBubyBmdXJ0aGVyIGV2ZW50cyBtYXkgYmUgYWRkZWQgdXNpbmcgW2FkZF0sIFthZGRFcnJvcl0KICAgKiBvciBbYWRkU3RyZWFtXS4KICAgKgogICAqIFRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdoZW4gdGhlIGRvbmUgZXZlbnQgaGFzIGJlZW4gZGVsaXZlcmVkLgogICAqLwogIEZ1dHVyZSBjbG9zZSgpIHsKICAgIGlmIChpc0Nsb3NlZCkgewogICAgICByZXR1cm4gX2Vuc3VyZURvbmVGdXR1cmUoKTsKICAgIH0KICAgIGlmICghX21heUFkZEV2ZW50KSB0aHJvdyBfYmFkRXZlbnRTdGF0ZSgpOwogICAgX2Nsb3NlVW5jaGVja2VkKCk7CiAgICByZXR1cm4gX2Vuc3VyZURvbmVGdXR1cmUoKTsKICB9CgogIHZvaWQgX2Nsb3NlVW5jaGVja2VkKCkgewogICAgX3N0YXRlIHw9IF9TVEFURV9DTE9TRUQ7CiAgICBpZiAoaGFzTGlzdGVuZXIpIHsKICAgICAgX3NlbmREb25lKCk7CiAgICB9IGVsc2UgaWYgKF9pc0luaXRpYWxTdGF0ZSkgewogICAgICBfZW5zdXJlUGVuZGluZ0V2ZW50cygpLmFkZChjb25zdCBfRGVsYXllZERvbmUoKSk7CiAgICB9CiAgfQoKICAvLyBFdmVudFNpbmsgaW50ZXJmYWNlLiBVc2VkIGJ5IHRoZSBbYWRkU3RyZWFtXSBldmVudHMuCgogIC8vIEFkZCBkYXRhIGV2ZW50LCB1c2VkIGJvdGggYnkgdGhlIFthZGRTdHJlYW1dIGV2ZW50cyBhbmQgYnkgW2FkZF0uCiAgdm9pZCBfYWRkKFQgdmFsdWUpIHsKICAgIGlmIChoYXNMaXN0ZW5lcikgewogICAgICBfc2VuZERhdGEodmFsdWUpOwogICAgfSBlbHNlIGlmIChfaXNJbml0aWFsU3RhdGUpIHsKICAgICAgX2Vuc3VyZVBlbmRpbmdFdmVudHMoKS5hZGQobmV3IF9EZWxheWVkRGF0YTxUPih2YWx1ZSkpOwogICAgfQogIH0KCiAgdm9pZCBfYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIGlmIChoYXNMaXN0ZW5lcikgewogICAgICBfc2VuZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgIH0gZWxzZSBpZiAoX2lzSW5pdGlhbFN0YXRlKSB7CiAgICAgIF9lbnN1cmVQZW5kaW5nRXZlbnRzKCkuYWRkKG5ldyBfRGVsYXllZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKSk7CiAgICB9CiAgfQoKICB2b2lkIF9jbG9zZSgpIHsKICAgIC8vIEVuZCBvZiBhZGRTdHJlYW0gc3RyZWFtLgogICAgYXNzZXJ0KF9pc0FkZGluZ1N0cmVhbSk7CiAgICBfU3RyZWFtQ29udHJvbGxlckFkZFN0cmVhbVN0YXRlPFQ+IGFkZFN0YXRlID0gX3ZhckRhdGE7CiAgICBfdmFyRGF0YSA9IGFkZFN0YXRlLnZhckRhdGE7CiAgICBfc3RhdGUgJj0gfl9TVEFURV9BRERTVFJFQU07CiAgICBhZGRTdGF0ZS5jb21wbGV0ZSgpOwogIH0KCiAgLy8gX1N0cmVhbUNvbnRyb2xsZXJMaWZlQ3ljbGUgaW50ZXJmYWNlCgogIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBfc3Vic2NyaWJlKHZvaWQgb25EYXRhKFQgZGF0YSksIEZ1bmN0aW9uIG9uRXJyb3IsCiAgICAgIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcikgewogICAgaWYgKCFfaXNJbml0aWFsU3RhdGUpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIlN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIGxpc3RlbmVkIHRvLiIpOwogICAgfQogICAgX0NvbnRyb2xsZXJTdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uID0gbmV3IF9Db250cm9sbGVyU3Vic2NyaXB0aW9uPFQ+KAogICAgICAgIHRoaXMsIG9uRGF0YSwgb25FcnJvciwgb25Eb25lLCBjYW5jZWxPbkVycm9yKTsKCiAgICBfUGVuZGluZ0V2ZW50czxUPiBwZW5kaW5nRXZlbnRzID0gX3BlbmRpbmdFdmVudHM7CiAgICBfc3RhdGUgfD0gX1NUQVRFX1NVQlNDUklCRUQ7CiAgICBpZiAoX2lzQWRkaW5nU3RyZWFtKSB7CiAgICAgIF9TdHJlYW1Db250cm9sbGVyQWRkU3RyZWFtU3RhdGU8VD4gYWRkU3RhdGUgPSBfdmFyRGF0YTsKICAgICAgYWRkU3RhdGUudmFyRGF0YSA9IHN1YnNjcmlwdGlvbjsKICAgICAgYWRkU3RhdGUucmVzdW1lKCk7CiAgICB9IGVsc2UgewogICAgICBfdmFyRGF0YSA9IHN1YnNjcmlwdGlvbjsKICAgIH0KICAgIHN1YnNjcmlwdGlvbi5fc2V0UGVuZGluZ0V2ZW50cyhwZW5kaW5nRXZlbnRzKTsKICAgIHN1YnNjcmlwdGlvbi5fZ3VhcmRDYWxsYmFjaygoKSB7CiAgICAgIF9ydW5HdWFyZGVkKG9uTGlzdGVuKTsKICAgIH0pOwoKICAgIHJldHVybiBzdWJzY3JpcHRpb247CiAgfQoKICBGdXR1cmUgX3JlY29yZENhbmNlbChTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uKSB7CiAgICAvLyBXaGVuIHdlIGNhbmNlbCwgd2UgZmlyc3QgY2FuY2VsIGFueSBzdHJlYW0gYmVpbmcgYWRkZWQsCiAgICAvLyBUaGVuIHdlIGNhbGwgYG9uQ2FuY2VsYCwgYW5kIGZpbmFsbHkgdGhlIF9kb25lRnV0dXJlIGlzIGNvbXBsZXRlZC4KICAgIC8vIElmIGVpdGhlciBvZiBhZGRTdHJlYW0ncyBjYW5jZWwgb3IgYG9uQ2FuY2VsYCByZXR1cm5zIGEgZnV0dXJlLAogICAgLy8gd2Ugd2FpdCBmb3IgaXQgYmVmb3JlIGNvbnRpbnVpbmcuCiAgICAvLyBBbnkgZXJyb3IgZHVyaW5nIHRoaXMgcHJvY2VzcyBlbmRzIHVwIGluIHRoZSByZXR1cm5lZCBmdXR1cmUuCiAgICAvLyBJZiBtb3JlIGVycm9ycyBoYXBwZW4sIHdlIGFjdCBhcyBpZiBpdCBoYXBwZW5zIGluc2lkZSBuZXN0ZWQgdHJ5L2ZpbmFsbHlzCiAgICAvLyBvciB3aGVuQ29tcGxldGUgY2FsbHMsIGFuZCBvbmx5IHRoZSBsYXN0IGVycm9yIGVuZHMgdXAgaW4gdGhlCiAgICAvLyByZXR1cm5lZCBmdXR1cmUuCiAgICBGdXR1cmUgcmVzdWx0OwogICAgaWYgKF9pc0FkZGluZ1N0cmVhbSkgewogICAgICBfU3RyZWFtQ29udHJvbGxlckFkZFN0cmVhbVN0YXRlPFQ+IGFkZFN0YXRlID0gX3ZhckRhdGE7CiAgICAgIHJlc3VsdCA9IGFkZFN0YXRlLmNhbmNlbCgpOwogICAgfQogICAgX3ZhckRhdGEgPSBudWxsOwogICAgX3N0YXRlID0KICAgICAgICAoX3N0YXRlICYgfihfU1RBVEVfU1VCU0NSSUJFRCB8IF9TVEFURV9BRERTVFJFQU0pKSB8IF9TVEFURV9DQU5DRUxFRDsKCiAgICBpZiAob25DYW5jZWwgIT0gbnVsbCkgewogICAgICBpZiAocmVzdWx0ID09IG51bGwpIHsKICAgICAgICAvLyBPbmx5IGludHJvZHVjZSBhIGZ1dHVyZSBpZiBvbmUgaXMgbmVlZGVkLgogICAgICAgIC8vIElmIF9vbkNhbmNlbCByZXR1cm5zIG51bGwsIG5vIGZ1dHVyZSBpcyBuZWVkZWQuCiAgICAgICAgdHJ5IHsKICAgICAgICAgIHJlc3VsdCA9IG9uQ2FuY2VsKCk7CiAgICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgICAgLy8gUmV0dXJuIHRoZSBlcnJvciBpbiB0aGUgcmV0dXJuZWQgZnV0dXJlLgogICAgICAgICAgLy8gQ29tcGxldGUgaXQgYXN5bmNocm9ub3VzbHksIHNvIHRoZXJlIGlzIHRpbWUgZm9yIGEgbGlzdGVuZXIKICAgICAgICAgIC8vIHRvIGhhbmRsZSB0aGUgZXJyb3IuCiAgICAgICAgICByZXN1bHQgPSBuZXcgX0Z1dHVyZSgpLi5fYXN5bmNDb21wbGV0ZUVycm9yKGUsIHMpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBTaW1wbGVyIGNhc2Ugd2hlbiB3ZSBhbHJlYWR5IGtub3cgdGhhdCB3ZSB3aWxsIHJldHVybiBhIGZ1dHVyZS4KICAgICAgICByZXN1bHQgPSByZXN1bHQud2hlbkNvbXBsZXRlKG9uQ2FuY2VsKTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgY29tcGxldGUoKSB7CiAgICAgIGlmIChfZG9uZUZ1dHVyZSAhPSBudWxsICYmIF9kb25lRnV0dXJlLl9tYXlDb21wbGV0ZSkgewogICAgICAgIF9kb25lRnV0dXJlLl9hc3luY0NvbXBsZXRlKG51bGwpOwogICAgICB9CiAgICB9CgogICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7CiAgICAgIHJlc3VsdCA9IHJlc3VsdC53aGVuQ29tcGxldGUoY29tcGxldGUpOwogICAgfSBlbHNlIHsKICAgICAgY29tcGxldGUoKTsKICAgIH0KCiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgdm9pZCBfcmVjb3JkUGF1c2UoU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbikgewogICAgaWYgKF9pc0FkZGluZ1N0cmVhbSkgewogICAgICBfU3RyZWFtQ29udHJvbGxlckFkZFN0cmVhbVN0YXRlPFQ+IGFkZFN0YXRlID0gX3ZhckRhdGE7CiAgICAgIGFkZFN0YXRlLnBhdXNlKCk7CiAgICB9CiAgICBfcnVuR3VhcmRlZChvblBhdXNlKTsKICB9CgogIHZvaWQgX3JlY29yZFJlc3VtZShTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uKSB7CiAgICBpZiAoX2lzQWRkaW5nU3RyZWFtKSB7CiAgICAgIF9TdHJlYW1Db250cm9sbGVyQWRkU3RyZWFtU3RhdGU8VD4gYWRkU3RhdGUgPSBfdmFyRGF0YTsKICAgICAgYWRkU3RhdGUucmVzdW1lKCk7CiAgICB9CiAgICBfcnVuR3VhcmRlZChvblJlc3VtZSk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBfU3luY1N0cmVhbUNvbnRyb2xsZXJEaXNwYXRjaDxUPgogICAgaW1wbGVtZW50cyBfU3RyZWFtQ29udHJvbGxlcjxUPiwgU3luY2hyb25vdXNTdHJlYW1Db250cm9sbGVyPFQ+IHsKICBpbnQgZ2V0IF9zdGF0ZTsKICB2b2lkIHNldCBfc3RhdGUoaW50IHN0YXRlKTsKCiAgdm9pZCBfc2VuZERhdGEoVCBkYXRhKSB7CiAgICBfc3Vic2NyaXB0aW9uLl9hZGQoZGF0YSk7CiAgfQoKICB2b2lkIF9zZW5kRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIF9zdWJzY3JpcHRpb24uX2FkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIHZvaWQgX3NlbmREb25lKCkgewogICAgX3N1YnNjcmlwdGlvbi5fY2xvc2UoKTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9Bc3luY1N0cmVhbUNvbnRyb2xsZXJEaXNwYXRjaDxUPgogICAgaW1wbGVtZW50cyBfU3RyZWFtQ29udHJvbGxlcjxUPiB7CiAgdm9pZCBfc2VuZERhdGEoVCBkYXRhKSB7CiAgICBfc3Vic2NyaXB0aW9uLl9hZGRQZW5kaW5nKG5ldyBfRGVsYXllZERhdGE8VD4oZGF0YSkpOwogIH0KCiAgdm9pZCBfc2VuZEVycm9yKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICBfc3Vic2NyaXB0aW9uLl9hZGRQZW5kaW5nKG5ldyBfRGVsYXllZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKSk7CiAgfQoKICB2b2lkIF9zZW5kRG9uZSgpIHsKICAgIF9zdWJzY3JpcHRpb24uX2FkZFBlbmRpbmcoY29uc3QgX0RlbGF5ZWREb25lKCkpOwogIH0KfQoKLy8gVE9ETyhscm4pOiBVc2UgY29tbW9uIHN1cGVyY2xhc3MgZm9yIGNhbGxiYWNrLWNvbnRyb2xsZXJzIHdoZW4gVk0gc3VwcG9ydHMKLy8gY29uc3RydWN0b3JzIGluIG1peGluIHN1cGVyY2xhc3Nlcy4KCmNsYXNzIF9Bc3luY1N0cmVhbUNvbnRyb2xsZXI8VD4gPSBfU3RyZWFtQ29udHJvbGxlcjxUPgogICAgd2l0aCBfQXN5bmNTdHJlYW1Db250cm9sbGVyRGlzcGF0Y2g8VD47CgpjbGFzcyBfU3luY1N0cmVhbUNvbnRyb2xsZXI8VD4gPSBfU3RyZWFtQ29udHJvbGxlcjxUPgogICAgd2l0aCBfU3luY1N0cmVhbUNvbnRyb2xsZXJEaXNwYXRjaDxUPjsKCnR5cGVkZWYgX05vdGlmaWNhdGlvbkhhbmRsZXIoKTsKCnZvaWQgX3J1bkd1YXJkZWQoX05vdGlmaWNhdGlvbkhhbmRsZXIgbm90aWZpY2F0aW9uSGFuZGxlcikgewogIGlmIChub3RpZmljYXRpb25IYW5kbGVyID09IG51bGwpIHJldHVybjsKICB0cnkgewogICAgbm90aWZpY2F0aW9uSGFuZGxlcigpOwogIH0gY2F0Y2ggKGUsIHMpIHsKICAgIFpvbmUuY3VycmVudC5oYW5kbGVVbmNhdWdodEVycm9yKGUsIHMpOwogIH0KfQoKY2xhc3MgX0NvbnRyb2xsZXJTdHJlYW08VD4gZXh0ZW5kcyBfU3RyZWFtSW1wbDxUPiB7CiAgX1N0cmVhbUNvbnRyb2xsZXJMaWZlY3ljbGU8VD4gX2NvbnRyb2xsZXI7CgogIF9Db250cm9sbGVyU3RyZWFtKHRoaXMuX2NvbnRyb2xsZXIpOwoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gX2NyZWF0ZVN1YnNjcmlwdGlvbih2b2lkIG9uRGF0YShUIGRhdGEpLAogICAgICAgICAgRnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yKSA9PgogICAgICBfY29udHJvbGxlci5fc3Vic2NyaWJlKG9uRGF0YSwgb25FcnJvciwgb25Eb25lLCBjYW5jZWxPbkVycm9yKTsKCiAgLy8gT3ZlcnJpZGUgPT0gYW5kIGhhc2hDb2RlIHNvIHRoYXQgbmV3IHN0cmVhbXMgcmV0dXJuZWQgYnkgdGhlIHNhbWUKICAvLyBjb250cm9sbGVyIGFyZSBjb25zaWRlcmVkIGVxdWFsLiBUaGUgY29udHJvbGxlciByZXR1cm5zIGEgbmV3IHN0cmVhbQogIC8vIGVhY2ggdGltZSBpdCdzIHF1ZXJpZWQsIGJ1dCBkb2Vzbid0IGhhdmUgdG8gY2FjaGUgdGhlIHJlc3VsdC4KCiAgaW50IGdldCBoYXNoQ29kZSA9PiBfY29udHJvbGxlci5oYXNoQ29kZSBeIDB4MzUzMjM1MzI7CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gb3RoZXIgaXMgX0NvbnRyb2xsZXJTdHJlYW0gJiYKICAgICAgICBpZGVudGljYWwob3RoZXIuX2NvbnRyb2xsZXIsIHRoaXMuX2NvbnRyb2xsZXIpOwogIH0KfQoKY2xhc3MgX0NvbnRyb2xsZXJTdWJzY3JpcHRpb248VD4gZXh0ZW5kcyBfQnVmZmVyaW5nU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHsKICBmaW5hbCBfU3RyZWFtQ29udHJvbGxlckxpZmVjeWNsZTxUPiBfY29udHJvbGxlcjsKCiAgX0NvbnRyb2xsZXJTdWJzY3JpcHRpb24odGhpcy5fY29udHJvbGxlciwgdm9pZCBvbkRhdGEoVCBkYXRhKSwKICAgICAgRnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yKQogICAgICA6IHN1cGVyKG9uRGF0YSwgb25FcnJvciwgb25Eb25lLCBjYW5jZWxPbkVycm9yKTsKCiAgRnV0dXJlIF9vbkNhbmNlbCgpIHsKICAgIHJldHVybiBfY29udHJvbGxlci5fcmVjb3JkQ2FuY2VsKHRoaXMpOwogIH0KCiAgdm9pZCBfb25QYXVzZSgpIHsKICAgIF9jb250cm9sbGVyLl9yZWNvcmRQYXVzZSh0aGlzKTsKICB9CgogIHZvaWQgX29uUmVzdW1lKCkgewogICAgX2NvbnRyb2xsZXIuX3JlY29yZFJlc3VtZSh0aGlzKTsKICB9Cn0KCi8qKiBBIGNsYXNzIHRoYXQgZXhwb3NlcyBvbmx5IHRoZSBbU3RyZWFtU2lua10gaW50ZXJmYWNlIG9mIGFuIG9iamVjdC4gKi8KY2xhc3MgX1N0cmVhbVNpbmtXcmFwcGVyPFQ+IGltcGxlbWVudHMgU3RyZWFtU2luazxUPiB7CiAgZmluYWwgU3RyZWFtQ29udHJvbGxlciBfdGFyZ2V0OwogIF9TdHJlYW1TaW5rV3JhcHBlcih0aGlzLl90YXJnZXQpOwogIHZvaWQgYWRkKFQgZGF0YSkgewogICAgX3RhcmdldC5hZGQoZGF0YSk7CiAgfQoKICB2b2lkIGFkZEVycm9yKE9iamVjdCBlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIF90YXJnZXQuYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgRnV0dXJlIGNsb3NlKCkgPT4gX3RhcmdldC5jbG9zZSgpOwoKICBGdXR1cmUgYWRkU3RyZWFtKFN0cmVhbTxUPiBzb3VyY2UpID0+IF90YXJnZXQuYWRkU3RyZWFtKHNvdXJjZSk7CgogIEZ1dHVyZSBnZXQgZG9uZSA9PiBfdGFyZ2V0LmRvbmU7Cn0KCi8qKgogKiBPYmplY3QgY29udGFpbmluZyB0aGUgc3RhdGUgdXNlZCB0byBoYW5kbGUgW1N0cmVhbUNvbnRyb2xsZXIuYWRkU3RyZWFtXS4KICovCmNsYXNzIF9BZGRTdHJlYW1TdGF0ZTxUPiB7CiAgLy8gW19GdXR1cmVdIHJldHVybmVkIGJ5IGNhbGwgdG8gYWRkU3RyZWFtLgogIGZpbmFsIF9GdXR1cmUgYWRkU3RyZWFtRnV0dXJlOwoKICAvLyBTdWJzY3JpcHRpb24gb24gc3RyZWFtIGFyZ3VtZW50IHRvIGFkZFN0cmVhbS4KICBmaW5hbCBTdHJlYW1TdWJzY3JpcHRpb24gYWRkU3Vic2NyaXB0aW9uOwoKICBfQWRkU3RyZWFtU3RhdGUoCiAgICAgIF9FdmVudFNpbms8VD4gY29udHJvbGxlciwgU3RyZWFtPFQ+IHNvdXJjZSwgYm9vbCBjYW5jZWxPbkVycm9yKQogICAgICA6IGFkZFN0cmVhbUZ1dHVyZSA9IG5ldyBfRnV0dXJlKCksCiAgICAgICAgYWRkU3Vic2NyaXB0aW9uID0gc291cmNlLmxpc3Rlbihjb250cm9sbGVyLl9hZGQsCiAgICAgICAgICAgIG9uRXJyb3I6IGNhbmNlbE9uRXJyb3IKICAgICAgICAgICAgICAgID8gbWFrZUVycm9ySGFuZGxlcihjb250cm9sbGVyKQogICAgICAgICAgICAgICAgOiBjb250cm9sbGVyLl9hZGRFcnJvciwKICAgICAgICAgICAgb25Eb25lOiBjb250cm9sbGVyLl9jbG9zZSwKICAgICAgICAgICAgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CgogIHN0YXRpYyBtYWtlRXJyb3JIYW5kbGVyKF9FdmVudFNpbmsgY29udHJvbGxlcikgPT4gKGUsIFN0YWNrVHJhY2UgcykgewogICAgICAgIGNvbnRyb2xsZXIuX2FkZEVycm9yKGUsIHMpOwogICAgICAgIGNvbnRyb2xsZXIuX2Nsb3NlKCk7CiAgICAgIH07CgogIHZvaWQgcGF1c2UoKSB7CiAgICBhZGRTdWJzY3JpcHRpb24ucGF1c2UoKTsKICB9CgogIHZvaWQgcmVzdW1lKCkgewogICAgYWRkU3Vic2NyaXB0aW9uLnJlc3VtZSgpOwogIH0KCiAgLyoqCiAgICogU3RvcCBhZGRpbmcgdGhlIHN0cmVhbS4KICAgKgogICAqIENvbXBsZXRlIHRoZSBmdXR1cmUgcmV0dXJuZWQgYnkgYFN0cmVhbUNvbnRyb2xsZXIuYWRkU3RyZWFtYCB3aGVuCiAgICogdGhlIGNhbmNlbCBpcyBjb21wbGV0ZS4KICAgKgogICAqIFJldHVybiBhIGZ1dHVyZSBpZiB0aGUgY2FuY2VsIHRha2VzIHRpbWUsIG90aGVyd2lzZSByZXR1cm4gYG51bGxgLgogICAqLwogIEZ1dHVyZSBjYW5jZWwoKSB7CiAgICB2YXIgY2FuY2VsID0gYWRkU3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogICAgaWYgKGNhbmNlbCA9PSBudWxsKSB7CiAgICAgIGFkZFN0cmVhbUZ1dHVyZS5fYXN5bmNDb21wbGV0ZShudWxsKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gY2FuY2VsLndoZW5Db21wbGV0ZSgoKSB7CiAgICAgIGFkZFN0cmVhbUZ1dHVyZS5fYXN5bmNDb21wbGV0ZShudWxsKTsKICAgIH0pOwogIH0KCiAgdm9pZCBjb21wbGV0ZSgpIHsKICAgIGFkZFN0cmVhbUZ1dHVyZS5fYXN5bmNDb21wbGV0ZShudWxsKTsKICB9Cn0KCmNsYXNzIF9TdHJlYW1Db250cm9sbGVyQWRkU3RyZWFtU3RhdGU8VD4gZXh0ZW5kcyBfQWRkU3RyZWFtU3RhdGU8VD4gewogIC8vIFRoZSBzdWJzY3JpcHRpb24gb3IgcGVuZGluZyBkYXRhIG9mIGEgX1N0cmVhbUNvbnRyb2xsZXIuCiAgLy8gU3RvcmVkIGhlcmUgYmVjYXVzZSB3ZSByZXVzZSB0aGUgYF92YXJEYXRhYCBmaWVsZCAgaW4gdGhlIF9TdHJlYW1Db250cm9sbGVyCiAgLy8gdG8gc3RvcmUgdGhpcyBzdGF0ZSBvYmplY3QuCiAgdmFyIHZhckRhdGE7CgogIF9TdHJlYW1Db250cm9sbGVyQWRkU3RyZWFtU3RhdGUoX1N0cmVhbUNvbnRyb2xsZXI8VD4gY29udHJvbGxlciwgdGhpcy52YXJEYXRhLAogICAgICBTdHJlYW08VD4gc291cmNlLCBib29sIGNhbmNlbE9uRXJyb3IpCiAgICAgIDogc3VwZXIoY29udHJvbGxlciwgc291cmNlLCBjYW5jZWxPbkVycm9yKSB7CiAgICBpZiAoY29udHJvbGxlci5pc1BhdXNlZCkgewogICAgICBhZGRTdWJzY3JpcHRpb24ucGF1c2UoKTsKICAgIH0KICB9Cn0Kg7AATk48ARQBRzpHAQRRBCMBBDMDNgQkAQQtA0ERQDUDS0sRBD45GAEGTAU8Q04fBUBIKgVES0NRBUstBU9MTwVGTQU+OwU3QVFQDgVILAYcGBYXEhsQTlAEAQZEBT4rBU9MTwVHBUdIT0tLTgU6P1EFRUBISRxGHjAFSTQ/S0sTRy4pRCUsJAVOUUoqBiY+EERGBAEGQgVCBiMBLQEGPQVCBVAGIgErAQY+BUIFUAYjAS0BBj8FQgYpASgBBlEGGgEGRQVCQR0FIjlHBhUBBjsFSkkuBUlCRwYVATgYAQYbBTgFT0ZMRU0yBhUBBicFQgVNRkQoBjgBBhgFUUZEKAYSAQZQBUYFR0MSBU1NFgVFREc1OgY8AgEEPwM/QANDSD0jA0dBA0Y2R0pJIgNHOUFLA0VNIU9NKwNLTElLTBEDTkxNGQNOJkgtTj1BS0ZKGT0vPgNPTj9IUQNKSUouBE8GLAVJMgYUAQYsBU4yBjgBBiUFSzIGEgIBLyRROzxEAgE4KA8dJxcdAQQxAz0ESkMFNyojS0VMQAFGJ1AqJygqMQFJM04dAQY2BUsQBiYGQgVMGAYpAQZLDAVPPwVRBUkGEAEqHwEGPAUyBktOQRcBHx4fJQFQAU86AQZRBj0BBjcFNQY7AS49ATQePQE2ARdBAUABRzUBIUM8Rhw+RykdHBcGORoEAUYwHRwvFwY5SxoEASNJQTEZGz4fBhUEAQY/BVAGGxQ/Bh1FBAEbPS85MjA9GSAlBAEGQBgFRj4GKgEfRhgEAQYjBhYvEQQBBiUGOS8iTB8wKwYiBAEGQgVLDQVQGgVLFQVOBhMUIgYvFyAEARsdFxMiOAYEAToBRxcXGCI+BgQBOBclIkgGBAESIB08ISEZBAEqAUorHEQGTjcBNiEbPicZDR8GMyUdCAEZBAE9P0pHKUVRRRgTGz4iBhUNTgEcHDU7Dh8ZNkkiPQoPSzAIBgEWPSoIBgEaLg0SBgETBAE6Gz4YBhoEATsbPhkGGwQCATBGEh4BGx4EATkwBAEVHAQCATEmGzoEATlFBAEVNQQCAU4nATcsATYrASABPSsIGxMsBAIBNC0BJwFBQkYBR0pDATkBIy0pOAQCAUszAUE7NwEXLAQBFCQEARUlBAIBSjciJBUXBAE5KQQBJQFDASMCAQRMBBsuIQEzLAETRik5Iy8oJysBSCQdCQERHQQBEh4EAQYdBUcdBUgGFCsaLBMGJCwIBAEUKgQCAUY+USEPAVEsMx8fBgQCASFkYXJ0OmFzeW5jL3N0cmVhbV9jb250cm9sbGVyLmRhcnQyb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2FzeW5jL3N0cmVhbV9pbXBsLmRhcnTAAH4ILy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5hc3luYzsKCi8qKiBBYnN0cmFjdCBhbmQgcHJpdmF0ZSBpbnRlcmZhY2UgZm9yIGEgcGxhY2UgdG8gcHV0IGV2ZW50cy4gKi8KYWJzdHJhY3QgY2xhc3MgX0V2ZW50U2luazxUPiB7CiAgdm9pZCBfYWRkKFQgZGF0YSk7CiAgdm9pZCBfYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpOwogIHZvaWQgX2Nsb3NlKCk7Cn0KCi8qKgogKiBBYnN0cmFjdCBhbmQgcHJpdmF0ZSBpbnRlcmZhY2UgZm9yIGEgcGxhY2UgdG8gc2VuZCBldmVudHMuCiAqCiAqIFVzZWQgYnkgZXZlbnQgYnVmZmVyaW5nIHRvIGZpbmFsbHkgZGlzcGF0Y2ggdGhlIHBlbmRpbmcgZXZlbnQsIHdoZXJlCiAqIFtfRXZlbnRTaW5rXSBpcyB3aGVyZSB0aGUgZXZlbnQgZmlyc3QgZW50ZXJzIHRoZSBzdHJlYW0gc3Vic2NyaXB0aW9uLAogKiBhbmQgbWF5IHlldCBiZSBidWZmZXJlZC4KICovCmFic3RyYWN0IGNsYXNzIF9FdmVudERpc3BhdGNoPFQ+IHsKICB2b2lkIF9zZW5kRGF0YShUIGRhdGEpOwogIHZvaWQgX3NlbmRFcnJvcihPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSk7CiAgdm9pZCBfc2VuZERvbmUoKTsKfQoKLyoqCiAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2Ygc3RyZWFtIHN1YnNjcmlwdGlvbiBvZiBidWZmZXJpbmcgZXZlbnRzLgogKgogKiBUaGUgb25seSBwdWJsaWMgbWV0aG9kcyBhcmUgdGhvc2Ugb2YgW1N0cmVhbVN1YnNjcmlwdGlvbl0sIHNvIGluc3RhbmNlcyBvZgogKiBbX0J1ZmZlcmluZ1N0cmVhbVN1YnNjcmlwdGlvbl0gY2FuIGJlIHJldHVybmVkIGRpcmVjdGx5IGFzIGEKICogW1N0cmVhbVN1YnNjcmlwdGlvbl0gd2l0aG91dCBleHBvc2luZyBpbnRlcm5hbCBmdW5jdGlvbmFsaXR5LgogKgogKiBUaGUgW1N0cmVhbUNvbnRyb2xsZXJdIGlzIGEgcHVibGljIGZhY2luZyB2ZXJzaW9uIG9mIFtTdHJlYW1dIGFuZCB0aGlzIGNsYXNzLAogKiB3aXRoIHNvbWUgbWV0aG9kcyBtYWRlIHB1YmxpYy4KICoKICogVGhlIHVzZXIgaW50ZXJmYWNlIG9mIFtfQnVmZmVyaW5nU3RyZWFtU3Vic2NyaXB0aW9uXSBhcmUgdGhlIGZvbGxvd2luZwogKiBtZXRob2RzOgogKgogKiAqIFtfYWRkXTogQWRkIGEgZGF0YSBldmVudCB0byB0aGUgc3RyZWFtLgogKiAqIFtfYWRkRXJyb3JdOiBBZGQgYW4gZXJyb3IgZXZlbnQgdG8gdGhlIHN0cmVhbS4KICogKiBbX2Nsb3NlXTogUmVxdWVzdCB0byBjbG9zZSB0aGUgc3RyZWFtLgogKiAqIFtfb25DYW5jZWxdOiBDYWxsZWQgd2hlbiB0aGUgc3Vic2NyaXB0aW9uIHdpbGwgcHJvdmlkZSBubyBtb3JlIGV2ZW50cywKICogICAgIGVpdGhlciBkdWUgdG8gYmVpbmcgYWN0aXZlbHkgY2FuY2VsZWQsIG9yIGFmdGVyIHNlbmRpbmcgYSBkb25lIGV2ZW50LgogKiAqIFtfb25QYXVzZV06IENhbGxlZCB3aGVuIHRoZSBzdWJzY3JpcHRpb24gd2FudHMgdGhlIGV2ZW50IHNvdXJjZSB0byBwYXVzZS4KICogKiBbX29uUmVzdW1lXTogQ2FsbGVkIHdoZW4gYWxsb3dpbmcgbmV3IGV2ZW50cyBhZnRlciBhIHBhdXNlLgogKgogKiBUaGUgdXNlciBzaG91bGQgbm90IGFkZCBuZXcgZXZlbnRzIHdoZW4gdGhlIHN1YnNjcmlwdGlvbiByZXF1ZXN0cyBhIHBhdXNlZCwKICogYnV0IGlmIGl0IGhhcHBlbnMgYW55d2F5LCB0aGUgc3Vic2NyaXB0aW9uIHdpbGwgZW5xdWV1ZSB0aGUgZXZlbnRzIGp1c3QgYXMKICogd2hlbiBuZXcgZXZlbnRzIGFycml2ZSB3aGlsZSBzdGlsbCBmaXJpbmcgYW4gb2xkIGV2ZW50LgogKi8KY2xhc3MgX0J1ZmZlcmluZ1N0cmVhbVN1YnNjcmlwdGlvbjxUPgogICAgaW1wbGVtZW50cyBTdHJlYW1TdWJzY3JpcHRpb248VD4sIF9FdmVudFNpbms8VD4sIF9FdmVudERpc3BhdGNoPFQ+IHsKICAvKiogVGhlIGBjYW5jZWxPbkVycm9yYCBmbGFnIGZyb20gdGhlIGBsaXN0ZW5gIGNhbGwuICovCiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfQ0FOQ0VMX09OX0VSUk9SID0gMTsKICAvKioKICAgKiBXaGV0aGVyIHRoZSAiZG9uZSIgZXZlbnQgaGFzIGJlZW4gcmVjZWl2ZWQuCiAgICogTm8gZnVydGhlciBldmVudHMgYXJlIGFjY2VwdGVkIGFmdGVyIHRoaXMuCiAgICovCiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfQ0xPU0VEID0gMjsKICAvKioKICAgKiBTZXQgaWYgdGhlIGlucHV0IGhhcyBiZWVuIGFza2VkIG5vdCB0byBzZW5kIGV2ZW50cy4KICAgKgogICAqIFRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIGJlaW5nIHBhdXNlZCwgc2luY2UgdGhlIGlucHV0IHdpbGwgcmVtYWluIHBhdXNlZAogICAqIGFmdGVyIGEgY2FsbCB0byBbcmVzdW1lXSBpZiB0aGVyZSBhcmUgcGVuZGluZyBldmVudHMuCiAgICovCiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfSU5QVVRfUEFVU0VEID0gNDsKICAvKioKICAgKiBXaGV0aGVyIHRoZSBzdWJzY3JpcHRpb24gaGFzIGJlZW4gY2FuY2VsZWQuCiAgICoKICAgKiBTZXQgYnkgY2FsbGluZyBbY2FuY2VsXSwgb3IgYnkgaGFuZGxpbmcgYSAiZG9uZSIgZXZlbnQsIG9yIGFuICJlcnJvciIgZXZlbnQKICAgKiB3aGVuIGBjYW5jZWxPbkVycm9yYCBpcyB0cnVlLgogICAqLwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0NBTkNFTEVEID0gODsKICAvKioKICAgKiBTZXQgd2hlbiBlaXRoZXI6CiAgICoKICAgKiAgICogYW4gZXJyb3IgaXMgc2VudCwgYW5kIFtjYW5jZWxPbkVycm9yXSBpcyB0cnVlLCBvcgogICAqICAgKiBhIGRvbmUgZXZlbnQgaXMgc2VudC4KICAgKgogICAqIElmIHRoZSBzdWJzY3JpcHRpb24gaXMgY2FuY2VsZWQgd2hpbGUgX1NUQVRFX1dBSVRfRk9SX0NBTkNFTCBpcyBzZXQsIHRoZQogICAqIHN0YXRlIGlzIHVuc2V0LCBhbmQgbm8gZnVydGhlciBldmVudHMgbXVzdCBiZSBkZWxpdmVyZWQuCiAgICovCiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfV0FJVF9GT1JfQ0FOQ0VMID0gMTY7CiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfSU5fQ0FMTEJBQ0sgPSAzMjsKICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9IQVNfUEVORElORyA9IDY0OwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX1BBVVNFX0NPVU5UID0gMTI4OwoKICAvKiBFdmVudCBoYW5kbGVycyBwcm92aWRlZCBpbiBjb25zdHJ1Y3Rvci4gKi8KICBfRGF0YUhhbmRsZXI8VD4gX29uRGF0YTsKICBGdW5jdGlvbiBfb25FcnJvcjsKICBfRG9uZUhhbmRsZXIgX29uRG9uZTsKICBmaW5hbCBab25lIF96b25lID0gWm9uZS5jdXJyZW50OwoKICAvKiogQml0IHZlY3RvciBiYXNlZCBvbiBzdGF0ZS1jb25zdGFudHMgYWJvdmUuICovCiAgaW50IF9zdGF0ZTsKCiAgLy8gVE9ETyhmbG9pdHNjaCk6IHJldXNlIGFub3RoZXIgZmllbGQKICAvKiogVGhlIGZ1dHVyZSBbX29uQ2FuY2VsXSBtYXkgcmV0dXJuLiAqLwogIEZ1dHVyZSBfY2FuY2VsRnV0dXJlOwoKICAvKioKICAgKiBRdWV1ZSBvZiBwZW5kaW5nIGV2ZW50cy4KICAgKgogICAqIElzIGNyZWF0ZWQgd2hlbiBuZWNlc3NhcnksIG9yIHNldCBpbiBjb25zdHJ1Y3RvciBmb3IgcHJlY29uZmlndXJlZCBldmVudHMuCiAgICovCiAgX1BlbmRpbmdFdmVudHM8VD4gX3BlbmRpbmc7CgogIF9CdWZmZXJpbmdTdHJlYW1TdWJzY3JpcHRpb24oCiAgICAgIHZvaWQgb25EYXRhKFQgZGF0YSksIEZ1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcikKICAgICAgOiBfc3RhdGUgPSAoY2FuY2VsT25FcnJvciA/IF9TVEFURV9DQU5DRUxfT05fRVJST1IgOiAwKSB7CiAgICB0aGlzLm9uRGF0YShvbkRhdGEpOwogICAgdGhpcy5vbkVycm9yKG9uRXJyb3IpOwogICAgdGhpcy5vbkRvbmUob25Eb25lKTsKICB9CgogIC8qKgogICAqIFNldHMgdGhlIHN1YnNjcmlwdGlvbidzIHBlbmRpbmcgZXZlbnRzIG9iamVjdC4KICAgKgogICAqIFRoaXMgY2FuIG9ubHkgYmUgZG9uZSBvbmNlLiBUaGUgcGVuZGluZyBldmVudHMgb2JqZWN0IGlzIHVzZWQgZm9yIHRoZQogICAqIHJlc3Qgb2YgdGhlIHN1YnNjcmlwdGlvbidzIGxpZmUgY3ljbGUuCiAgICovCiAgdm9pZCBfc2V0UGVuZGluZ0V2ZW50cyhfUGVuZGluZ0V2ZW50czxUPiBwZW5kaW5nRXZlbnRzKSB7CiAgICBhc3NlcnQoX3BlbmRpbmcgPT0gbnVsbCk7CiAgICBpZiAocGVuZGluZ0V2ZW50cyA9PSBudWxsKSByZXR1cm47CiAgICBfcGVuZGluZyA9IHBlbmRpbmdFdmVudHM7CiAgICBpZiAoIXBlbmRpbmdFdmVudHMuaXNFbXB0eSkgewogICAgICBfc3RhdGUgfD0gX1NUQVRFX0hBU19QRU5ESU5HOwogICAgICBfcGVuZGluZy5zY2hlZHVsZSh0aGlzKTsKICAgIH0KICB9CgogIC8vIFN0cmVhbVN1YnNjcmlwdGlvbiBpbnRlcmZhY2UuCgogIHZvaWQgb25EYXRhKHZvaWQgaGFuZGxlRGF0YShUIGV2ZW50KSkgewogICAgaGFuZGxlRGF0YSA/Pz0gX251bGxEYXRhSGFuZGxlcjsKICAgIC8vIFRPRE8oZmxvaXRzY2gpOiB0aGUgcmV0dXJuIHR5cGUgc2hvdWxkIGJlICd2b2lkJywgYW5kIHRoZSB0eXBlCiAgICAvLyBzaG91bGQgYmUgaW5mZXJyZWQuCiAgICBfb25EYXRhID0gX3pvbmUucmVnaXN0ZXJVbmFyeUNhbGxiYWNrPGR5bmFtaWMsIFQ+KGhhbmRsZURhdGEpOwogIH0KCiAgdm9pZCBvbkVycm9yKEZ1bmN0aW9uIGhhbmRsZUVycm9yKSB7CiAgICBoYW5kbGVFcnJvciA/Pz0gX251bGxFcnJvckhhbmRsZXI7CiAgICBpZiAoaGFuZGxlRXJyb3IgaXMgdm9pZCBGdW5jdGlvbihPYmplY3QsIFN0YWNrVHJhY2UpKSB7CiAgICAgIF9vbkVycm9yID0gX3pvbmUKICAgICAgICAgIC5yZWdpc3RlckJpbmFyeUNhbGxiYWNrPGR5bmFtaWMsIE9iamVjdCwgU3RhY2tUcmFjZT4oaGFuZGxlRXJyb3IpOwogICAgfSBlbHNlIGlmIChoYW5kbGVFcnJvciBpcyB2b2lkIEZ1bmN0aW9uKE9iamVjdCkpIHsKICAgICAgX29uRXJyb3IgPSBfem9uZS5yZWdpc3RlclVuYXJ5Q2FsbGJhY2s8ZHluYW1pYywgT2JqZWN0PihoYW5kbGVFcnJvcik7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiaGFuZGxlRXJyb3IgY2FsbGJhY2sgbXVzdCB0YWtlIGVpdGhlciBhbiBPYmplY3QgIgogICAgICAgICAgIih0aGUgZXJyb3IpLCBvciBib3RoIGFuIE9iamVjdCAodGhlIGVycm9yKSBhbmQgYSBTdGFja1RyYWNlLiIpOwogICAgfQogIH0KCiAgdm9pZCBvbkRvbmUodm9pZCBoYW5kbGVEb25lKCkpIHsKICAgIGhhbmRsZURvbmUgPz89IF9udWxsRG9uZUhhbmRsZXI7CiAgICBfb25Eb25lID0gX3pvbmUucmVnaXN0ZXJDYWxsYmFjayhoYW5kbGVEb25lKTsKICB9CgogIHZvaWQgcGF1c2UoW0Z1dHVyZSByZXN1bWVTaWduYWxdKSB7CiAgICBpZiAoX2lzQ2FuY2VsZWQpIHJldHVybjsKICAgIGJvb2wgd2FzUGF1c2VkID0gX2lzUGF1c2VkOwogICAgYm9vbCB3YXNJbnB1dFBhdXNlZCA9IF9pc0lucHV0UGF1c2VkOwogICAgLy8gSW5jcmVtZW50IHBhdXNlIGNvdW50IGFuZCBtYXJrIGlucHV0IHBhdXNlZCAoaWYgaXQgaXNuJ3QgYWxyZWFkeSkuCiAgICBfc3RhdGUgPSAoX3N0YXRlICsgX1NUQVRFX1BBVVNFX0NPVU5UKSB8IF9TVEFURV9JTlBVVF9QQVVTRUQ7CiAgICBpZiAocmVzdW1lU2lnbmFsICE9IG51bGwpIHJlc3VtZVNpZ25hbC53aGVuQ29tcGxldGUocmVzdW1lKTsKICAgIGlmICghd2FzUGF1c2VkICYmIF9wZW5kaW5nICE9IG51bGwpIF9wZW5kaW5nLmNhbmNlbFNjaGVkdWxlKCk7CiAgICBpZiAoIXdhc0lucHV0UGF1c2VkICYmICFfaW5DYWxsYmFjaykgX2d1YXJkQ2FsbGJhY2soX29uUGF1c2UpOwogIH0KCiAgdm9pZCByZXN1bWUoKSB7CiAgICBpZiAoX2lzQ2FuY2VsZWQpIHJldHVybjsKICAgIGlmIChfaXNQYXVzZWQpIHsKICAgICAgX2RlY3JlbWVudFBhdXNlQ291bnQoKTsKICAgICAgaWYgKCFfaXNQYXVzZWQpIHsKICAgICAgICBpZiAoX2hhc1BlbmRpbmcgJiYgIV9wZW5kaW5nLmlzRW1wdHkpIHsKICAgICAgICAgIC8vIElucHV0IGlzIHN0aWxsIHBhdXNlZC4KICAgICAgICAgIF9wZW5kaW5nLnNjaGVkdWxlKHRoaXMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhc3NlcnQoX21heVJlc3VtZUlucHV0KTsKICAgICAgICAgIF9zdGF0ZSAmPSB+X1NUQVRFX0lOUFVUX1BBVVNFRDsKICAgICAgICAgIGlmICghX2luQ2FsbGJhY2spIF9ndWFyZENhbGxiYWNrKF9vblJlc3VtZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBGdXR1cmUgY2FuY2VsKCkgewogICAgLy8gVGhlIHVzZXIgZG9lc24ndCB3YW50IHRvIHJlY2VpdmUgYW55IGZ1cnRoZXIgZXZlbnRzLiBJZiB0aGVyZSBpcyBhbgogICAgLy8gZXJyb3Igb3IgZG9uZSBldmVudCBwZW5kaW5nICh3YWl0aW5nIGZvciB0aGUgY2FuY2VsIHRvIGJlIGRvbmUpIGRpc2NhcmQKICAgIC8vIHRoYXQgZXZlbnQuCiAgICBfc3RhdGUgJj0gfl9TVEFURV9XQUlUX0ZPUl9DQU5DRUw7CiAgICBpZiAoIV9pc0NhbmNlbGVkKSB7CiAgICAgIF9jYW5jZWwoKTsKICAgIH0KICAgIHJldHVybiBfY2FuY2VsRnV0dXJlID8/IEZ1dHVyZS5fbnVsbEZ1dHVyZTsKICB9CgogIEZ1dHVyZTxFPiBhc0Z1dHVyZTxFPihbRSBmdXR1cmVWYWx1ZV0pIHsKICAgIF9GdXR1cmU8RT4gcmVzdWx0ID0gbmV3IF9GdXR1cmU8RT4oKTsKCiAgICAvLyBPdmVyd3JpdGUgdGhlIG9uRG9uZSBhbmQgb25FcnJvciBoYW5kbGVycy4KICAgIF9vbkRvbmUgPSAoKSB7CiAgICAgIHJlc3VsdC5fY29tcGxldGUoZnV0dXJlVmFsdWUpOwogICAgfTsKICAgIF9vbkVycm9yID0gKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgICAgRnV0dXJlIGNhbmNlbEZ1dHVyZSA9IGNhbmNlbCgpOwogICAgICBpZiAoIWlkZW50aWNhbChjYW5jZWxGdXR1cmUsIEZ1dHVyZS5fbnVsbEZ1dHVyZSkpIHsKICAgICAgICBjYW5jZWxGdXR1cmUud2hlbkNvbXBsZXRlKCgpIHsKICAgICAgICAgIHJlc3VsdC5fY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzdWx0Ll9jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgfQogICAgfTsKCiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8gU3RhdGUgbWFuYWdlbWVudC4KCiAgYm9vbCBnZXQgX2lzSW5wdXRQYXVzZWQgPT4gKF9zdGF0ZSAmIF9TVEFURV9JTlBVVF9QQVVTRUQpICE9IDA7CiAgYm9vbCBnZXQgX2lzQ2xvc2VkID0+IChfc3RhdGUgJiBfU1RBVEVfQ0xPU0VEKSAhPSAwOwogIGJvb2wgZ2V0IF9pc0NhbmNlbGVkID0+IChfc3RhdGUgJiBfU1RBVEVfQ0FOQ0VMRUQpICE9IDA7CiAgYm9vbCBnZXQgX3dhaXRzRm9yQ2FuY2VsID0+IChfc3RhdGUgJiBfU1RBVEVfV0FJVF9GT1JfQ0FOQ0VMKSAhPSAwOwogIGJvb2wgZ2V0IF9pbkNhbGxiYWNrID0+IChfc3RhdGUgJiBfU1RBVEVfSU5fQ0FMTEJBQ0spICE9IDA7CiAgYm9vbCBnZXQgX2hhc1BlbmRpbmcgPT4gKF9zdGF0ZSAmIF9TVEFURV9IQVNfUEVORElORykgIT0gMDsKICBib29sIGdldCBfaXNQYXVzZWQgPT4gX3N0YXRlID49IF9TVEFURV9QQVVTRV9DT1VOVDsKICBib29sIGdldCBfY2FuRmlyZSA9PiBfc3RhdGUgPCBfU1RBVEVfSU5fQ0FMTEJBQ0s7CiAgYm9vbCBnZXQgX21heVJlc3VtZUlucHV0ID0+CiAgICAgICFfaXNQYXVzZWQgJiYgKF9wZW5kaW5nID09IG51bGwgfHwgX3BlbmRpbmcuaXNFbXB0eSk7CiAgYm9vbCBnZXQgX2NhbmNlbE9uRXJyb3IgPT4gKF9zdGF0ZSAmIF9TVEFURV9DQU5DRUxfT05fRVJST1IpICE9IDA7CgogIGJvb2wgZ2V0IGlzUGF1c2VkID0+IF9pc1BhdXNlZDsKCiAgdm9pZCBfY2FuY2VsKCkgewogICAgX3N0YXRlIHw9IF9TVEFURV9DQU5DRUxFRDsKICAgIGlmIChfaGFzUGVuZGluZykgewogICAgICBfcGVuZGluZy5jYW5jZWxTY2hlZHVsZSgpOwogICAgfQogICAgaWYgKCFfaW5DYWxsYmFjaykgX3BlbmRpbmcgPSBudWxsOwogICAgX2NhbmNlbEZ1dHVyZSA9IF9vbkNhbmNlbCgpOwogIH0KCiAgLyoqCiAgICogRGVjcmVtZW50cyB0aGUgcGF1c2UgY291bnQuCiAgICoKICAgKiBEb2VzIG5vdCBhdXRvbWF0aWNhbGx5IHVucGF1c2UgdGhlIGlucHV0IChjYWxsIFtfb25SZXN1bWVdKSB3aGVuCiAgICogdGhlIHBhdXNlIGNvdW50IHJlYWNoZXMgemVyby4gVGhpcyBpcyBoYW5kbGVkIGVsc2V3aGVyZSwgYW5kIG9ubHkKICAgKiBpZiB0aGVyZSBhcmUgbm8gcGVuZGluZyBldmVudHMgYnVmZmVyZWQuCiAgICovCiAgdm9pZCBfZGVjcmVtZW50UGF1c2VDb3VudCgpIHsKICAgIGFzc2VydChfaXNQYXVzZWQpOwogICAgX3N0YXRlIC09IF9TVEFURV9QQVVTRV9DT1VOVDsKICB9CgogIC8vIF9FdmVudFNpbmsgaW50ZXJmYWNlLgoKICB2b2lkIF9hZGQoVCBkYXRhKSB7CiAgICBhc3NlcnQoIV9pc0Nsb3NlZCk7CiAgICBpZiAoX2lzQ2FuY2VsZWQpIHJldHVybjsKICAgIGlmIChfY2FuRmlyZSkgewogICAgICBfc2VuZERhdGEoZGF0YSk7CiAgICB9IGVsc2UgewogICAgICBfYWRkUGVuZGluZyhuZXcgX0RlbGF5ZWREYXRhPFQ+KGRhdGEpKTsKICAgIH0KICB9CgogIHZvaWQgX2FkZEVycm9yKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICBpZiAoX2lzQ2FuY2VsZWQpIHJldHVybjsKICAgIGlmIChfY2FuRmlyZSkgewogICAgICBfc2VuZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsgLy8gUmVwb3J0cyBjYW5jZWwgYWZ0ZXIgc2VuZGluZy4KICAgIH0gZWxzZSB7CiAgICAgIF9hZGRQZW5kaW5nKG5ldyBfRGVsYXllZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKSk7CiAgICB9CiAgfQoKICB2b2lkIF9jbG9zZSgpIHsKICAgIGFzc2VydCghX2lzQ2xvc2VkKTsKICAgIGlmIChfaXNDYW5jZWxlZCkgcmV0dXJuOwogICAgX3N0YXRlIHw9IF9TVEFURV9DTE9TRUQ7CiAgICBpZiAoX2NhbkZpcmUpIHsKICAgICAgX3NlbmREb25lKCk7CiAgICB9IGVsc2UgewogICAgICBfYWRkUGVuZGluZyhjb25zdCBfRGVsYXllZERvbmUoKSk7CiAgICB9CiAgfQoKICAvLyBIb29rcyBjYWxsZWQgd2hlbiB0aGUgaW5wdXQgaXMgcGF1c2VkLCB1bnBhdXNlZCBvciBjYW5jZWxlZC4KICAvLyBUaGVzZSBtdXN0IG5vdCB0aHJvdy4gSWYgb3ZlcndyaXR0ZW4gdG8gY2FsbCB1c2VyIGNvZGUsIGluY2x1ZGUgc3VpdGFibGUKICAvLyB0cnkvY2F0Y2ggd3JhcHBpbmcgYW5kIHNlbmQgYW55IGVycm9ycyB0bwogIC8vIFtfWm9uZS5jdXJyZW50LmhhbmRsZVVuY2F1Z2h0RXJyb3JdLgogIHZvaWQgX29uUGF1c2UoKSB7CiAgICBhc3NlcnQoX2lzSW5wdXRQYXVzZWQpOwogIH0KCiAgdm9pZCBfb25SZXN1bWUoKSB7CiAgICBhc3NlcnQoIV9pc0lucHV0UGF1c2VkKTsKICB9CgogIEZ1dHVyZSBfb25DYW5jZWwoKSB7CiAgICBhc3NlcnQoX2lzQ2FuY2VsZWQpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvLyBIYW5kbGUgcGVuZGluZyBldmVudHMuCgogIC8qKgogICAqIEFkZCBhIHBlbmRpbmcgZXZlbnQuCiAgICoKICAgKiBJZiB0aGUgc3Vic2NyaXB0aW9uIGlzIG5vdCBwYXVzZWQsIHRoaXMgYWxzbyBzY2hlZHVsZXMgYSBmaXJpbmcKICAgKiBvZiBwZW5kaW5nIGV2ZW50cyBsYXRlciAoaWYgbmVjZXNzYXJ5KS4KICAgKi8KICB2b2lkIF9hZGRQZW5kaW5nKF9EZWxheWVkRXZlbnQgZXZlbnQpIHsKICAgIF9TdHJlYW1JbXBsRXZlbnRzPFQ+IHBlbmRpbmcgPSBfcGVuZGluZzsKICAgIGlmIChfcGVuZGluZyA9PSBudWxsKSB7CiAgICAgIHBlbmRpbmcgPSBfcGVuZGluZyA9IG5ldyBfU3RyZWFtSW1wbEV2ZW50czxUPigpOwogICAgfQogICAgcGVuZGluZy5hZGQoZXZlbnQpOwogICAgaWYgKCFfaGFzUGVuZGluZykgewogICAgICBfc3RhdGUgfD0gX1NUQVRFX0hBU19QRU5ESU5HOwogICAgICBpZiAoIV9pc1BhdXNlZCkgewogICAgICAgIF9wZW5kaW5nLnNjaGVkdWxlKHRoaXMpOwogICAgICB9CiAgICB9CiAgfQoKICAvKiBfRXZlbnREaXNwYXRjaCBpbnRlcmZhY2UuICovCgogIHZvaWQgX3NlbmREYXRhKFQgZGF0YSkgewogICAgYXNzZXJ0KCFfaXNDYW5jZWxlZCk7CiAgICBhc3NlcnQoIV9pc1BhdXNlZCk7CiAgICBhc3NlcnQoIV9pbkNhbGxiYWNrKTsKICAgIGJvb2wgd2FzSW5wdXRQYXVzZWQgPSBfaXNJbnB1dFBhdXNlZDsKICAgIF9zdGF0ZSB8PSBfU1RBVEVfSU5fQ0FMTEJBQ0s7CiAgICBfem9uZS5ydW5VbmFyeUd1YXJkZWQoX29uRGF0YSwgZGF0YSk7CiAgICBfc3RhdGUgJj0gfl9TVEFURV9JTl9DQUxMQkFDSzsKICAgIF9jaGVja1N0YXRlKHdhc0lucHV0UGF1c2VkKTsKICB9CgogIHZvaWQgX3NlbmRFcnJvcihPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgYXNzZXJ0KCFfaXNDYW5jZWxlZCk7CiAgICBhc3NlcnQoIV9pc1BhdXNlZCk7CiAgICBhc3NlcnQoIV9pbkNhbGxiYWNrKTsKICAgIGJvb2wgd2FzSW5wdXRQYXVzZWQgPSBfaXNJbnB1dFBhdXNlZDsKCiAgICB2b2lkIHNlbmRFcnJvcigpIHsKICAgICAgLy8gSWYgdGhlIHN1YnNjcmlwdGlvbiBoYXMgYmVlbiBjYW5jZWxlZCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgY2FuY2VsCiAgICAgIC8vIGZ1dHVyZSB0byBmaW5pc2ggd2UgbXVzdCBub3QgcmVwb3J0IHRoZSBlcnJvci4KICAgICAgaWYgKF9pc0NhbmNlbGVkICYmICFfd2FpdHNGb3JDYW5jZWwpIHJldHVybjsKICAgICAgX3N0YXRlIHw9IF9TVEFURV9JTl9DQUxMQkFDSzsKICAgICAgLy8gVE9ETyhmbG9pdHNjaCk6IHRoaXMgZHluYW1pYyBzaG91bGQgYmUgJ3ZvaWQnLgogICAgICB2YXIgb25FcnJvciA9IF9vbkVycm9yOwogICAgICBpZiAob25FcnJvciBpcyB2b2lkIEZ1bmN0aW9uKE9iamVjdCwgU3RhY2tUcmFjZSkpIHsKICAgICAgICBfem9uZS5ydW5CaW5hcnlHdWFyZGVkPE9iamVjdCwgU3RhY2tUcmFjZT4ob25FcnJvciwgZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICB9IGVsc2UgewogICAgICAgIGFzc2VydChfb25FcnJvciBpcyB2b2lkIEZ1bmN0aW9uKE9iamVjdCkpOwogICAgICAgIF96b25lLnJ1blVuYXJ5R3VhcmRlZDxPYmplY3Q+KF9vbkVycm9yLCBlcnJvcik7CiAgICAgIH0KICAgICAgX3N0YXRlICY9IH5fU1RBVEVfSU5fQ0FMTEJBQ0s7CiAgICB9CgogICAgaWYgKF9jYW5jZWxPbkVycm9yKSB7CiAgICAgIF9zdGF0ZSB8PSBfU1RBVEVfV0FJVF9GT1JfQ0FOQ0VMOwogICAgICBfY2FuY2VsKCk7CiAgICAgIGlmIChfY2FuY2VsRnV0dXJlICE9IG51bGwgJiYKICAgICAgICAgICFpZGVudGljYWwoX2NhbmNlbEZ1dHVyZSwgRnV0dXJlLl9udWxsRnV0dXJlKSkgewogICAgICAgIF9jYW5jZWxGdXR1cmUud2hlbkNvbXBsZXRlKHNlbmRFcnJvcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2VuZEVycm9yKCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHNlbmRFcnJvcigpOwogICAgICAvLyBPbmx5IGNoZWNrIHN0YXRlIGlmIG5vdCBjYW5jZWxPbkVycm9yLgogICAgICBfY2hlY2tTdGF0ZSh3YXNJbnB1dFBhdXNlZCk7CiAgICB9CiAgfQoKICB2b2lkIF9zZW5kRG9uZSgpIHsKICAgIGFzc2VydCghX2lzQ2FuY2VsZWQpOwogICAgYXNzZXJ0KCFfaXNQYXVzZWQpOwogICAgYXNzZXJ0KCFfaW5DYWxsYmFjayk7CgogICAgdm9pZCBzZW5kRG9uZSgpIHsKICAgICAgLy8gSWYgdGhlIHN1YnNjcmlwdGlvbiBoYXMgYmVlbiBjYW5jZWxlZCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgY2FuY2VsCiAgICAgIC8vIGZ1dHVyZSB0byBmaW5pc2ggd2UgbXVzdCBub3QgcmVwb3J0IHRoZSBkb25lIGV2ZW50LgogICAgICBpZiAoIV93YWl0c0ZvckNhbmNlbCkgcmV0dXJuOwogICAgICBfc3RhdGUgfD0gKF9TVEFURV9DQU5DRUxFRCB8IF9TVEFURV9DTE9TRUQgfCBfU1RBVEVfSU5fQ0FMTEJBQ0spOwogICAgICBfem9uZS5ydW5HdWFyZGVkKF9vbkRvbmUpOwogICAgICBfc3RhdGUgJj0gfl9TVEFURV9JTl9DQUxMQkFDSzsKICAgIH0KCiAgICBfY2FuY2VsKCk7CiAgICBfc3RhdGUgfD0gX1NUQVRFX1dBSVRfRk9SX0NBTkNFTDsKICAgIGlmIChfY2FuY2VsRnV0dXJlICE9IG51bGwgJiYKICAgICAgICAhaWRlbnRpY2FsKF9jYW5jZWxGdXR1cmUsIEZ1dHVyZS5fbnVsbEZ1dHVyZSkpIHsKICAgICAgX2NhbmNlbEZ1dHVyZS53aGVuQ29tcGxldGUoc2VuZERvbmUpOwogICAgfSBlbHNlIHsKICAgICAgc2VuZERvbmUoKTsKICAgIH0KICB9CgogIC8qKgogICAqIENhbGwgYSBob29rIGZ1bmN0aW9uLgogICAqCiAgICogVGhlIGNhbGwgaXMgcHJvcGVybHkgd3JhcHBlZCBpbiBjb2RlIHRvIGF2b2lkIG90aGVyIGNhbGxiYWNrcwogICAqIGR1cmluZyB0aGUgY2FsbCwgYW5kIGl0IGNoZWNrcyBmb3Igc3RhdGUgY2hhbmdlcyBhZnRlciB0aGUgY2FsbAogICAqIHRoYXQgc2hvdWxkIGNhdXNlIGZ1cnRoZXIgY2FsbGJhY2tzLgogICAqLwogIHZvaWQgX2d1YXJkQ2FsbGJhY2sodm9pZCBjYWxsYmFjaygpKSB7CiAgICBhc3NlcnQoIV9pbkNhbGxiYWNrKTsKICAgIGJvb2wgd2FzSW5wdXRQYXVzZWQgPSBfaXNJbnB1dFBhdXNlZDsKICAgIF9zdGF0ZSB8PSBfU1RBVEVfSU5fQ0FMTEJBQ0s7CiAgICBjYWxsYmFjaygpOwogICAgX3N0YXRlICY9IH5fU1RBVEVfSU5fQ0FMTEJBQ0s7CiAgICBfY2hlY2tTdGF0ZSh3YXNJbnB1dFBhdXNlZCk7CiAgfQoKICAvKioKICAgKiBDaGVjayBpZiB0aGUgaW5wdXQgbmVlZHMgdG8gYmUgaW5mb3JtZWQgb2Ygc3RhdGUgY2hhbmdlcy4KICAgKgogICAqIFN0YXRlIGNoYW5nZXMgYXJlIHBhdXNpbmcsIHJlc3VtaW5nIGFuZCBjYW5jZWxpbmcuCiAgICoKICAgKiBBZnRlciBjYW5jZWxpbmcsIG5vIGZ1cnRoZXIgY2FsbGJhY2tzIHdpbGwgaGFwcGVuLgogICAqCiAgICogVGhlIGNhbmNlbCBjYWxsYmFjayBpcyBjYWxsZWQgYWZ0ZXIgYSB1c2VyIGNhbmNlbCwgb3IgYWZ0ZXIKICAgKiB0aGUgZmluYWwgZG9uZSBldmVudCBpcyBzZW50LgogICAqLwogIHZvaWQgX2NoZWNrU3RhdGUoYm9vbCB3YXNJbnB1dFBhdXNlZCkgewogICAgYXNzZXJ0KCFfaW5DYWxsYmFjayk7CiAgICBpZiAoX2hhc1BlbmRpbmcgJiYgX3BlbmRpbmcuaXNFbXB0eSkgewogICAgICBfc3RhdGUgJj0gfl9TVEFURV9IQVNfUEVORElORzsKICAgICAgaWYgKF9pc0lucHV0UGF1c2VkICYmIF9tYXlSZXN1bWVJbnB1dCkgewogICAgICAgIF9zdGF0ZSAmPSB+X1NUQVRFX0lOUFVUX1BBVVNFRDsKICAgICAgfQogICAgfQogICAgLy8gSWYgdGhlIHN0YXRlIGNoYW5nZXMgZHVyaW5nIGEgY2FsbGJhY2ssIHdlIGltbWVkaWF0ZWx5CiAgICAvLyBtYWtlIGEgbmV3IHN0YXRlLWNoYW5nZSBjYWxsYmFjay4gTG9vcCB1bnRpbCB0aGUgc3RhdGUgZGlkbid0IGNoYW5nZS4KICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGlmIChfaXNDYW5jZWxlZCkgewogICAgICAgIF9wZW5kaW5nID0gbnVsbDsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgYm9vbCBpc0lucHV0UGF1c2VkID0gX2lzSW5wdXRQYXVzZWQ7CiAgICAgIGlmICh3YXNJbnB1dFBhdXNlZCA9PSBpc0lucHV0UGF1c2VkKSBicmVhazsKICAgICAgX3N0YXRlIF49IF9TVEFURV9JTl9DQUxMQkFDSzsKICAgICAgaWYgKGlzSW5wdXRQYXVzZWQpIHsKICAgICAgICBfb25QYXVzZSgpOwogICAgICB9IGVsc2UgewogICAgICAgIF9vblJlc3VtZSgpOwogICAgICB9CiAgICAgIF9zdGF0ZSAmPSB+X1NUQVRFX0lOX0NBTExCQUNLOwogICAgICB3YXNJbnB1dFBhdXNlZCA9IGlzSW5wdXRQYXVzZWQ7CiAgICB9CiAgICBpZiAoX2hhc1BlbmRpbmcgJiYgIV9pc1BhdXNlZCkgewogICAgICBfcGVuZGluZy5zY2hlZHVsZSh0aGlzKTsKICAgIH0KICB9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gQ29tbW9uIGJhc2UgY2xhc3MgZm9yIHNpbmdsZSBhbmQgbXVsdGktc3Vic2NyaXB0aW9uIHN0cmVhbXMuCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KYWJzdHJhY3QgY2xhc3MgX1N0cmVhbUltcGw8VD4gZXh0ZW5kcyBTdHJlYW08VD4gewogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIC8vIFN0cmVhbSBpbnRlcmZhY2UuCgogIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBsaXN0ZW4odm9pZCBvbkRhdGEoVCBkYXRhKSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIGNhbmNlbE9uRXJyb3IgPSBpZGVudGljYWwodHJ1ZSwgY2FuY2VsT25FcnJvcik7CiAgICBTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uID0KICAgICAgICBfY3JlYXRlU3Vic2NyaXB0aW9uKG9uRGF0YSwgb25FcnJvciwgb25Eb25lLCBjYW5jZWxPbkVycm9yKTsKICAgIF9vbkxpc3RlbihzdWJzY3JpcHRpb24pOwogICAgcmV0dXJuIHN1YnNjcmlwdGlvbjsKICB9CgogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAvKiogQ3JlYXRlIGEgc3Vic2NyaXB0aW9uIG9iamVjdC4gQ2FsbGVkIGJ5IFtzdWJjcmliZV0uICovCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IF9jcmVhdGVTdWJzY3JpcHRpb24odm9pZCBvbkRhdGEoVCBkYXRhKSwKICAgICAgRnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yKSB7CiAgICByZXR1cm4gbmV3IF9CdWZmZXJpbmdTdHJlYW1TdWJzY3JpcHRpb248VD4oCiAgICAgICAgb25EYXRhLCBvbkVycm9yLCBvbkRvbmUsIGNhbmNlbE9uRXJyb3IpOwogIH0KCiAgLyoqIEhvb2sgY2FsbGVkIHdoZW4gdGhlIHN1YnNjcmlwdGlvbiBoYXMgYmVlbiBjcmVhdGVkLiAqLwogIHZvaWQgX29uTGlzdGVuKFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb24pIHt9Cn0KCnR5cGVkZWYgX1BlbmRpbmdFdmVudHM8VD4gX0V2ZW50R2VuZXJhdG9yPFQ+KCk7CgovKiogU3RyZWFtIHRoYXQgZ2VuZXJhdGVzIGl0cyBvd24gZXZlbnRzLiAqLwpjbGFzcyBfR2VuZXJhdGVkU3RyZWFtSW1wbDxUPiBleHRlbmRzIF9TdHJlYW1JbXBsPFQ+IHsKICBmaW5hbCBfRXZlbnRHZW5lcmF0b3I8VD4gX3BlbmRpbmc7CiAgYm9vbCBfaXNVc2VkID0gZmFsc2U7CiAgLyoqCiAgICogSW5pdGlhbGl6ZXMgdGhlIHN0cmVhbSB0byBoYXZlIG9ubHkgdGhlIGV2ZW50cyBwcm92aWRlZCBieSBhCiAgICogW19QZW5kaW5nRXZlbnRzXS4KICAgKgogICAqIEEgbmV3IFtfUGVuZGluZ0V2ZW50c10gbXVzdCBiZSBnZW5lcmF0ZWQgZm9yIGVhY2ggbGlzdGVuLgogICAqLwogIF9HZW5lcmF0ZWRTdHJlYW1JbXBsKHRoaXMuX3BlbmRpbmcpOwoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gX2NyZWF0ZVN1YnNjcmlwdGlvbih2b2lkIG9uRGF0YShUIGRhdGEpLAogICAgICBGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3IpIHsKICAgIGlmIChfaXNVc2VkKSB0aHJvdyBuZXcgU3RhdGVFcnJvcigiU3RyZWFtIGhhcyBhbHJlYWR5IGJlZW4gbGlzdGVuZWQgdG8uIik7CiAgICBfaXNVc2VkID0gdHJ1ZTsKICAgIHJldHVybiBuZXcgX0J1ZmZlcmluZ1N0cmVhbVN1YnNjcmlwdGlvbjxUPigKICAgICAgICBvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvcikKICAgICAgLi5fc2V0UGVuZGluZ0V2ZW50cyhfcGVuZGluZygpKTsKICB9Cn0KCi8qKiBQZW5kaW5nIGV2ZW50cyBvYmplY3QgdGhhdCBnZXRzIGl0cyBldmVudHMgZnJvbSBhbiBbSXRlcmFibGVdLiAqLwpjbGFzcyBfSXRlcmFibGVQZW5kaW5nRXZlbnRzPFQ+IGV4dGVuZHMgX1BlbmRpbmdFdmVudHM8VD4gewogIC8vIFRoZSBpdGVyYXRvciBwcm92aWRpbmcgZGF0YSBmb3IgZGF0YSBldmVudHMuCiAgLy8gU2V0IHRvIG51bGwgd2hlbiBpdGVyYXRpb24gaGFzIGNvbXBsZXRlZC4KICBJdGVyYXRvcjxUPiBfaXRlcmF0b3I7CgogIF9JdGVyYWJsZVBlbmRpbmdFdmVudHMoSXRlcmFibGU8VD4gZGF0YSkgOiBfaXRlcmF0b3IgPSBkYXRhLml0ZXJhdG9yOwoKICBib29sIGdldCBpc0VtcHR5ID0+IF9pdGVyYXRvciA9PSBudWxsOwoKICB2b2lkIGhhbmRsZU5leHQoX0V2ZW50RGlzcGF0Y2g8VD4gZGlzcGF0Y2gpIHsKICAgIGlmIChfaXRlcmF0b3IgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiTm8gZXZlbnRzIHBlbmRpbmcuIik7CiAgICB9CiAgICAvLyBTZW5kIG9uZSBldmVudCBwZXIgY2FsbCB0byBtb3ZlTmV4dC4KICAgIC8vIElmIG1vdmVOZXh0IHJldHVybnMgdHJ1ZSwgc2VuZCB0aGUgY3VycmVudCBlbGVtZW50IGFzIGRhdGEuCiAgICAvLyBJZiBjdXJyZW50IHRocm93cywgc2VuZCB0aGF0IGVycm9yLCBidXQga2VlcCBpdGVyYXRpbmcuCiAgICAvLyBJZiBtb3ZlTmV4dCByZXR1cm5zIGZhbHNlLCBzZW5kIGEgZG9uZSBldmVudCBhbmQgY2xlYXIgdGhlIF9pdGVyYXRvci4KICAgIC8vIElmIG1vdmVOZXh0IHRocm93cyBhbiBlcnJvciwgc2VuZCBhbiBlcnJvciBhbmQgcHJlcGFyZSB0byBzZW5kIGEgZG9uZQogICAgLy8gZXZlbnQgYWZ0ZXJ3YXJkcy4KICAgIGJvb2wgaGFzTW9yZTsKICAgIHRyeSB7CiAgICAgIGhhc01vcmUgPSBfaXRlcmF0b3IubW92ZU5leHQoKTsKICAgICAgaWYgKGhhc01vcmUpIHsKICAgICAgICBkaXNwYXRjaC5fc2VuZERhdGEoX2l0ZXJhdG9yLmN1cnJlbnQpOwogICAgICB9IGVsc2UgewogICAgICAgIF9pdGVyYXRvciA9IG51bGw7CiAgICAgICAgZGlzcGF0Y2guX3NlbmREb25lKCk7CiAgICAgIH0KICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgaWYgKGhhc01vcmUgPT0gbnVsbCkgewogICAgICAgIC8vIFRocmV3IGluIC5tb3ZlTmV4dCgpLgogICAgICAgIC8vIEVuc3VyZSB0aGF0IHdlIHNlbmQgYSBkb25lIGFmdGVyd2FyZHMuCiAgICAgICAgX2l0ZXJhdG9yID0gY29uc3QgRW1wdHlJdGVyYXRvcjxOdWxsPigpOwogICAgICAgIGRpc3BhdGNoLl9zZW5kRXJyb3IoZSwgcyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gVGhyZXcgaW4gLmN1cnJlbnQuCiAgICAgICAgZGlzcGF0Y2guX3NlbmRFcnJvcihlLCBzKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBjbGVhcigpIHsKICAgIGlmIChpc1NjaGVkdWxlZCkgY2FuY2VsU2NoZWR1bGUoKTsKICAgIF9pdGVyYXRvciA9IG51bGw7CiAgfQp9CgovLyBJbnRlcm5hbCBoZWxwZXJzLgoKLy8gVHlwZXMgb2YgdGhlIGRpZmZlcmVudCBoYW5kbGVycyBvbiBhIHN0cmVhbS4gVHlwZXMgdXNlZCB0byB0eXBlIGZpZWxkcy4KdHlwZWRlZiB2b2lkIF9EYXRhSGFuZGxlcjxUPihUIHZhbHVlKTsKdHlwZWRlZiB2b2lkIF9Eb25lSGFuZGxlcigpOwoKLyoqIERlZmF1bHQgZGF0YSBoYW5kbGVyLCBkb2VzIG5vdGhpbmcuICovCnZvaWQgX251bGxEYXRhSGFuZGxlcihPYmplY3QgdmFsdWUpIHt9CgovKiogRGVmYXVsdCBlcnJvciBoYW5kbGVyLCByZXBvcnRzIHRoZSBlcnJvciB0byB0aGUgY3VycmVudCB6b25lJ3MgaGFuZGxlci4gKi8Kdm9pZCBfbnVsbEVycm9ySGFuZGxlcihPYmplY3QgZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgWm9uZS5jdXJyZW50LmhhbmRsZVVuY2F1Z2h0RXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwp9CgovKiogRGVmYXVsdCBkb25lIGhhbmRsZXIsIGRvZXMgbm90aGluZy4gKi8Kdm9pZCBfbnVsbERvbmVIYW5kbGVyKCkge30KCi8qKiBBIGRlbGF5ZWQgZXZlbnQgb24gYSBidWZmZXJpbmcgc3RyZWFtIHN1YnNjcmlwdGlvbi4gKi8KYWJzdHJhY3QgY2xhc3MgX0RlbGF5ZWRFdmVudDxUPiB7CiAgLyoqIEFkZGVkIGFzIGEgbGlua2VkIGxpc3Qgb24gdGhlIFtTdHJlYW1Db250cm9sbGVyXS4gKi8KICBfRGVsYXllZEV2ZW50IG5leHQ7CiAgLyoqIEV4ZWN1dGUgdGhlIGRlbGF5ZWQgZXZlbnQgb24gdGhlIFtTdHJlYW1Db250cm9sbGVyXS4gKi8KICB2b2lkIHBlcmZvcm0oX0V2ZW50RGlzcGF0Y2g8VD4gZGlzcGF0Y2gpOwp9CgovKiogQSBkZWxheWVkIGRhdGEgZXZlbnQuICovCmNsYXNzIF9EZWxheWVkRGF0YTxUPiBleHRlbmRzIF9EZWxheWVkRXZlbnQ8VD4gewogIGZpbmFsIFQgdmFsdWU7CiAgX0RlbGF5ZWREYXRhKHRoaXMudmFsdWUpOwogIHZvaWQgcGVyZm9ybShfRXZlbnREaXNwYXRjaDxUPiBkaXNwYXRjaCkgewogICAgZGlzcGF0Y2guX3NlbmREYXRhKHZhbHVlKTsKICB9Cn0KCi8qKiBBIGRlbGF5ZWQgZXJyb3IgZXZlbnQuICovCmNsYXNzIF9EZWxheWVkRXJyb3IgZXh0ZW5kcyBfRGVsYXllZEV2ZW50IHsKICBmaW5hbCBlcnJvcjsKICBmaW5hbCBTdGFja1RyYWNlIHN0YWNrVHJhY2U7CgogIF9EZWxheWVkRXJyb3IodGhpcy5lcnJvciwgdGhpcy5zdGFja1RyYWNlKTsKICB2b2lkIHBlcmZvcm0oX0V2ZW50RGlzcGF0Y2ggZGlzcGF0Y2gpIHsKICAgIGRpc3BhdGNoLl9zZW5kRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KfQoKLyoqIEEgZGVsYXllZCBkb25lIGV2ZW50LiAqLwpjbGFzcyBfRGVsYXllZERvbmUgaW1wbGVtZW50cyBfRGVsYXllZEV2ZW50IHsKICBjb25zdCBfRGVsYXllZERvbmUoKTsKICB2b2lkIHBlcmZvcm0oX0V2ZW50RGlzcGF0Y2ggZGlzcGF0Y2gpIHsKICAgIGRpc3BhdGNoLl9zZW5kRG9uZSgpOwogIH0KCiAgX0RlbGF5ZWRFdmVudCBnZXQgbmV4dCA9PiBudWxsOwoKICB2b2lkIHNldCBuZXh0KF9EZWxheWVkRXZlbnQgXykgewogICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIk5vIGV2ZW50cyBhZnRlciBhIGRvbmUuIik7CiAgfQp9CgovKiogU3VwZXJjbGFzcyBmb3IgcHJvdmlkZXIgb2YgcGVuZGluZyBldmVudHMuICovCmFic3RyYWN0IGNsYXNzIF9QZW5kaW5nRXZlbnRzPFQ+IHsKICAvLyBObyBhc3luYyBldmVudCBoYXMgYmVlbiBzY2hlZHVsZWQuCiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfVU5TQ0hFRFVMRUQgPSAwOwogIC8vIEFuIGFzeW5jIGV2ZW50IGhhcyBiZWVuIHNjaGVkdWxlZCB0byBydW4gYSBmdW5jdGlvbi4KICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9TQ0hFRFVMRUQgPSAxOwogIC8vIEFuIGFzeW5jIGV2ZW50IGhhcyBiZWVuIHNjaGVkdWxlZCwgYnV0IGl0IHdpbGwgZG8gbm90aGluZyB3aGVuIGl0IHJ1bnMuCiAgLy8gQXN5bmMgZXZlbnRzIGNhbid0IGJlIHByZWVtcHRlZC4KICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9DQU5DRUxFRCA9IDM7CgogIC8qKgogICAqIFN0YXRlIG9mIGJlaW5nIHNjaGVkdWxlZC4KICAgKgogICAqIFNldCB0byBbX1NUQVRFX1NDSEVEVUxFRF0gd2hlbiBwZW5kaW5nIGV2ZW50cyBhcmUgc2NoZWR1bGVkIGZvcgogICAqIGFzeW5jIGRpc3BhdGNoLiBTaW5jZSB3ZSBjYW4ndCBjYW5jZWwgYSBbc2NoZWR1bGVNaWNyb3Rhc2tdIGNhbGwsIGlmCiAgICogc2NoZWR1bGluZyBpcyAiY2FuY2VsZWQiLCB0aGUgX3N0YXRlIGlzIHNpbXBseSBzZXQgdG8gW19TVEFURV9DQU5DRUxFRF0KICAgKiB3aGljaCB3aWxsIG1ha2UgdGhlIGFzeW5jIGNvZGUgZG8gbm90aGluZyBleGNlcHQgcmVzZXR0aW5nIFtfc3RhdGVdLgogICAqCiAgICogSWYgZXZlbnRzIGFyZSBzY2hlZHVsZWQgd2hpbGUgdGhlIHN0YXRlIGlzIFtfU1RBVEVfQ0FOQ0VMRURdLCBpdCBpcwogICAqIG1lcmVseSBzd2l0Y2hlZCBiYWNrIHRvIFtfU1RBVEVfU0NIRURVTEVEXSwgYnV0IG5vIG5ldyBjYWxsIHRvCiAgICogW3NjaGVkdWxlTWljcm90YXNrXSBpcyBwZXJmb3JtZWQuCiAgICovCiAgaW50IF9zdGF0ZSA9IF9TVEFURV9VTlNDSEVEVUxFRDsKCiAgYm9vbCBnZXQgaXNFbXB0eTsKCiAgYm9vbCBnZXQgaXNTY2hlZHVsZWQgPT4gX3N0YXRlID09IF9TVEFURV9TQ0hFRFVMRUQ7CiAgYm9vbCBnZXQgX2V2ZW50U2NoZWR1bGVkID0+IF9zdGF0ZSA+PSBfU1RBVEVfU0NIRURVTEVEOwoKICAvKioKICAgKiBTY2hlZHVsZSBhbiBldmVudCB0byBydW4gbGF0ZXIuCiAgICoKICAgKiBJZiBjYWxsZWQgbW9yZSB0aGFuIG9uY2UsIGl0IHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUgc2FtZSBkaXNwYXRjaCBhcwogICAqIGFyZ3VtZW50IGVhY2ggdGltZS4gSXQgbWF5IHJldXNlIGFuIGVhcmxpZXIgYXJndW1lbnQgaW4gc29tZSBjYXNlcy4KICAgKi8KICB2b2lkIHNjaGVkdWxlKF9FdmVudERpc3BhdGNoPFQ+IGRpc3BhdGNoKSB7CiAgICBpZiAoaXNTY2hlZHVsZWQpIHJldHVybjsKICAgIGFzc2VydCghaXNFbXB0eSk7CiAgICBpZiAoX2V2ZW50U2NoZWR1bGVkKSB7CiAgICAgIGFzc2VydChfc3RhdGUgPT0gX1NUQVRFX0NBTkNFTEVEKTsKICAgICAgX3N0YXRlID0gX1NUQVRFX1NDSEVEVUxFRDsKICAgICAgcmV0dXJuOwogICAgfQogICAgc2NoZWR1bGVNaWNyb3Rhc2soKCkgewogICAgICBpbnQgb2xkU3RhdGUgPSBfc3RhdGU7CiAgICAgIF9zdGF0ZSA9IF9TVEFURV9VTlNDSEVEVUxFRDsKICAgICAgaWYgKG9sZFN0YXRlID09IF9TVEFURV9DQU5DRUxFRCkgcmV0dXJuOwogICAgICBoYW5kbGVOZXh0KGRpc3BhdGNoKTsKICAgIH0pOwogICAgX3N0YXRlID0gX1NUQVRFX1NDSEVEVUxFRDsKICB9CgogIHZvaWQgY2FuY2VsU2NoZWR1bGUoKSB7CiAgICBpZiAoaXNTY2hlZHVsZWQpIF9zdGF0ZSA9IF9TVEFURV9DQU5DRUxFRDsKICB9CgogIHZvaWQgaGFuZGxlTmV4dChfRXZlbnREaXNwYXRjaDxUPiBkaXNwYXRjaCk7CgogIC8qKiBUaHJvdyBhd2F5IGFueSBwZW5kaW5nIGV2ZW50cyBhbmQgY2FuY2VsIHNjaGVkdWxlZCBldmVudHMuICovCiAgdm9pZCBjbGVhcigpOwp9CgovKiogQ2xhc3MgaG9sZGluZyBwZW5kaW5nIGV2ZW50cyBmb3IgYSBbX1N0cmVhbUltcGxdLiAqLwpjbGFzcyBfU3RyZWFtSW1wbEV2ZW50czxUPiBleHRlbmRzIF9QZW5kaW5nRXZlbnRzPFQ+IHsKICAvLy8gU2luZ2xlIGxpbmtlZCBsaXN0IG9mIFtfRGVsYXllZEV2ZW50XSBvYmplY3RzLgogIF9EZWxheWVkRXZlbnQgZmlyc3RQZW5kaW5nRXZlbnQ7CgogIC8vLyBMYXN0IGVsZW1lbnQgaW4gdGhlIGxpc3Qgb2YgcGVuZGluZyBldmVudHMuIE5ldyBldmVudHMgYXJlIGFkZGVkIGFmdGVyIGl0LgogIF9EZWxheWVkRXZlbnQgbGFzdFBlbmRpbmdFdmVudDsKCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBsYXN0UGVuZGluZ0V2ZW50ID09IG51bGw7CgogIHZvaWQgYWRkKF9EZWxheWVkRXZlbnQgZXZlbnQpIHsKICAgIGlmIChsYXN0UGVuZGluZ0V2ZW50ID09IG51bGwpIHsKICAgICAgZmlyc3RQZW5kaW5nRXZlbnQgPSBsYXN0UGVuZGluZ0V2ZW50ID0gZXZlbnQ7CiAgICB9IGVsc2UgewogICAgICBsYXN0UGVuZGluZ0V2ZW50ID0gbGFzdFBlbmRpbmdFdmVudC5uZXh0ID0gZXZlbnQ7CiAgICB9CiAgfQoKICB2b2lkIGhhbmRsZU5leHQoX0V2ZW50RGlzcGF0Y2g8VD4gZGlzcGF0Y2gpIHsKICAgIGFzc2VydCghaXNTY2hlZHVsZWQpOwogICAgX0RlbGF5ZWRFdmVudCBldmVudCA9IGZpcnN0UGVuZGluZ0V2ZW50OwogICAgZmlyc3RQZW5kaW5nRXZlbnQgPSBldmVudC5uZXh0OwogICAgaWYgKGZpcnN0UGVuZGluZ0V2ZW50ID09IG51bGwpIHsKICAgICAgbGFzdFBlbmRpbmdFdmVudCA9IG51bGw7CiAgICB9CiAgICBldmVudC5wZXJmb3JtKGRpc3BhdGNoKTsKICB9CgogIHZvaWQgY2xlYXIoKSB7CiAgICBpZiAoaXNTY2hlZHVsZWQpIGNhbmNlbFNjaGVkdWxlKCk7CiAgICBmaXJzdFBlbmRpbmdFdmVudCA9IGxhc3RQZW5kaW5nRXZlbnQgPSBudWxsOwogIH0KfQoKdHlwZWRlZiB2b2lkIF9Ccm9hZGNhc3RDYWxsYmFjazxUPihTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uKTsKCi8qKgogKiBEb25lIHN1YnNjcmlwdGlvbiB0aGF0IHdpbGwgc2VuZCBvbmUgZG9uZSBldmVudCBhcyBzb29uIGFzIHBvc3NpYmxlLgogKi8KY2xhc3MgX0RvbmVTdHJlYW1TdWJzY3JpcHRpb248VD4gaW1wbGVtZW50cyBTdHJlYW1TdWJzY3JpcHRpb248VD4gewogIHN0YXRpYyBjb25zdCBpbnQgX0RPTkVfU0VOVCA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBfU0NIRURVTEVEID0gMjsKICBzdGF0aWMgY29uc3QgaW50IF9QQVVTRUQgPSA0OwoKICBmaW5hbCBab25lIF96b25lOwogIGludCBfc3RhdGUgPSAwOwogIF9Eb25lSGFuZGxlciBfb25Eb25lOwoKICBfRG9uZVN0cmVhbVN1YnNjcmlwdGlvbih0aGlzLl9vbkRvbmUpIDogX3pvbmUgPSBab25lLmN1cnJlbnQgewogICAgX3NjaGVkdWxlKCk7CiAgfQoKICBib29sIGdldCBfaXNTZW50ID0+IChfc3RhdGUgJiBfRE9ORV9TRU5UKSAhPSAwOwogIGJvb2wgZ2V0IF9pc1NjaGVkdWxlZCA9PiAoX3N0YXRlICYgX1NDSEVEVUxFRCkgIT0gMDsKICBib29sIGdldCBpc1BhdXNlZCA9PiBfc3RhdGUgPj0gX1BBVVNFRDsKCiAgdm9pZCBfc2NoZWR1bGUoKSB7CiAgICBpZiAoX2lzU2NoZWR1bGVkKSByZXR1cm47CiAgICBfem9uZS5zY2hlZHVsZU1pY3JvdGFzayhfc2VuZERvbmUpOwogICAgX3N0YXRlIHw9IF9TQ0hFRFVMRUQ7CiAgfQoKICB2b2lkIG9uRGF0YSh2b2lkIGhhbmRsZURhdGEoVCBkYXRhKSkge30KICB2b2lkIG9uRXJyb3IoRnVuY3Rpb24gaGFuZGxlRXJyb3IpIHt9CiAgdm9pZCBvbkRvbmUodm9pZCBoYW5kbGVEb25lKCkpIHsKICAgIF9vbkRvbmUgPSBoYW5kbGVEb25lOwogIH0KCiAgdm9pZCBwYXVzZShbRnV0dXJlIHJlc3VtZVNpZ25hbF0pIHsKICAgIF9zdGF0ZSArPSBfUEFVU0VEOwogICAgaWYgKHJlc3VtZVNpZ25hbCAhPSBudWxsKSByZXN1bWVTaWduYWwud2hlbkNvbXBsZXRlKHJlc3VtZSk7CiAgfQoKICB2b2lkIHJlc3VtZSgpIHsKICAgIGlmIChpc1BhdXNlZCkgewogICAgICBfc3RhdGUgLT0gX1BBVVNFRDsKICAgICAgaWYgKCFpc1BhdXNlZCAmJiAhX2lzU2VudCkgewogICAgICAgIF9zY2hlZHVsZSgpOwogICAgICB9CiAgICB9CiAgfQoKICBGdXR1cmUgY2FuY2VsKCkgPT4gRnV0dXJlLl9udWxsRnV0dXJlOwoKICBGdXR1cmU8RT4gYXNGdXR1cmU8RT4oW0UgZnV0dXJlVmFsdWVdKSB7CiAgICBfRnV0dXJlPEU+IHJlc3VsdCA9IG5ldyBfRnV0dXJlPEU+KCk7CiAgICBfb25Eb25lID0gKCkgewogICAgICByZXN1bHQuX2NvbXBsZXRlV2l0aFZhbHVlKGZ1dHVyZVZhbHVlKTsKICAgIH07CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgdm9pZCBfc2VuZERvbmUoKSB7CiAgICBfc3RhdGUgJj0gfl9TQ0hFRFVMRUQ7CiAgICBpZiAoaXNQYXVzZWQpIHJldHVybjsKICAgIF9zdGF0ZSB8PSBfRE9ORV9TRU5UOwogICAgaWYgKF9vbkRvbmUgIT0gbnVsbCkgX3pvbmUucnVuR3VhcmRlZChfb25Eb25lKTsKICB9Cn0KCmNsYXNzIF9Bc0Jyb2FkY2FzdFN0cmVhbTxUPiBleHRlbmRzIFN0cmVhbTxUPiB7CiAgZmluYWwgU3RyZWFtPFQ+IF9zb3VyY2U7CiAgZmluYWwgX0Jyb2FkY2FzdENhbGxiYWNrPFQ+IF9vbkxpc3RlbkhhbmRsZXI7CiAgZmluYWwgX0Jyb2FkY2FzdENhbGxiYWNrPFQ+IF9vbkNhbmNlbEhhbmRsZXI7CiAgZmluYWwgWm9uZSBfem9uZTsKCiAgX0FzQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcjxUPiBfY29udHJvbGxlcjsKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gX3N1YnNjcmlwdGlvbjsKCiAgX0FzQnJvYWRjYXN0U3RyZWFtKAogICAgICB0aGlzLl9zb3VyY2UsCiAgICAgIHZvaWQgb25MaXN0ZW5IYW5kbGVyKFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pLAogICAgICB2b2lkIG9uQ2FuY2VsSGFuZGxlcihTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uKSkKICAgICAgLy8gVE9ETyhmbG9pdHNjaCk6IHRoZSByZXR1cm4gdHlwZSBzaG91bGQgYmUgdm9pZCBhbmQgc2hvdWxkIGJlCiAgICAgIC8vIGluZmVycmVkLgogICAgICA6IF9vbkxpc3RlbkhhbmRsZXIgPSBab25lLmN1cnJlbnQKICAgICAgICAgICAgLnJlZ2lzdGVyVW5hcnlDYWxsYmFjazxkeW5hbWljLCBTdHJlYW1TdWJzY3JpcHRpb248VD4+KAogICAgICAgICAgICAgICAgb25MaXN0ZW5IYW5kbGVyKSwKICAgICAgICBfb25DYW5jZWxIYW5kbGVyID0gWm9uZS5jdXJyZW50CiAgICAgICAgICAgIC5yZWdpc3RlclVuYXJ5Q2FsbGJhY2s8ZHluYW1pYywgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+PigKICAgICAgICAgICAgICAgIG9uQ2FuY2VsSGFuZGxlciksCiAgICAgICAgX3pvbmUgPSBab25lLmN1cnJlbnQgewogICAgX2NvbnRyb2xsZXIgPSBuZXcgX0FzQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcjxUPihfb25MaXN0ZW4sIF9vbkNhbmNlbCk7CiAgfQoKICBib29sIGdldCBpc0Jyb2FkY2FzdCA9PiB0cnVlOwoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gbGlzdGVuKHZvaWQgb25EYXRhKFQgZGF0YSksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICBpZiAoX2NvbnRyb2xsZXIgPT0gbnVsbCB8fCBfY29udHJvbGxlci5pc0Nsb3NlZCkgewogICAgICAvLyBSZXR1cm4gYSBkdW1teSBzdWJzY3JpcHRpb24gYmFja2VkIGJ5IG5vdGhpbmcsIHNpbmNlCiAgICAgIC8vIGl0IHdpbGwgb25seSBldmVyIHNlbmQgb25lIGRvbmUgZXZlbnQuCiAgICAgIHJldHVybiBuZXcgX0RvbmVTdHJlYW1TdWJzY3JpcHRpb248VD4ob25Eb25lKTsKICAgIH0KICAgIF9zdWJzY3JpcHRpb24gPz89IF9zb3VyY2UubGlzdGVuKF9jb250cm9sbGVyLmFkZCwKICAgICAgICBvbkVycm9yOiBfY29udHJvbGxlci5hZGRFcnJvciwgb25Eb25lOiBfY29udHJvbGxlci5jbG9zZSk7CiAgICBjYW5jZWxPbkVycm9yID0gaWRlbnRpY2FsKHRydWUsIGNhbmNlbE9uRXJyb3IpOwogICAgcmV0dXJuIF9jb250cm9sbGVyLl9zdWJzY3JpYmUob25EYXRhLCBvbkVycm9yLCBvbkRvbmUsIGNhbmNlbE9uRXJyb3IpOwogIH0KCiAgdm9pZCBfb25DYW5jZWwoKSB7CiAgICBib29sIHNodXRkb3duID0gKF9jb250cm9sbGVyID09IG51bGwpIHx8IF9jb250cm9sbGVyLmlzQ2xvc2VkOwogICAgaWYgKF9vbkNhbmNlbEhhbmRsZXIgIT0gbnVsbCkgewogICAgICBfem9uZS5ydW5VbmFyeSgKICAgICAgICAgIF9vbkNhbmNlbEhhbmRsZXIsIG5ldyBfQnJvYWRjYXN0U3Vic2NyaXB0aW9uV3JhcHBlcjxUPih0aGlzKSk7CiAgICB9CiAgICBpZiAoc2h1dGRvd24pIHsKICAgICAgaWYgKF9zdWJzY3JpcHRpb24gIT0gbnVsbCkgewogICAgICAgIF9zdWJzY3JpcHRpb24uY2FuY2VsKCk7CiAgICAgICAgX3N1YnNjcmlwdGlvbiA9IG51bGw7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgX29uTGlzdGVuKCkgewogICAgaWYgKF9vbkxpc3RlbkhhbmRsZXIgIT0gbnVsbCkgewogICAgICBfem9uZS5ydW5VbmFyeSgKICAgICAgICAgIF9vbkxpc3RlbkhhbmRsZXIsIG5ldyBfQnJvYWRjYXN0U3Vic2NyaXB0aW9uV3JhcHBlcjxUPih0aGlzKSk7CiAgICB9CiAgfQoKICAvLyBNZXRob2RzIGNhbGxlZCBmcm9tIF9Ccm9hZGNhc3RTdWJzY3JpcHRpb25XcmFwcGVyLgogIHZvaWQgX2NhbmNlbFN1YnNjcmlwdGlvbigpIHsKICAgIGlmIChfc3Vic2NyaXB0aW9uID09IG51bGwpIHJldHVybjsKICAgIC8vIENhbGxlZCBieSBbX2NvbnRyb2xsZXJdIHdoZW4gaXQgaGFzIG5vIHN1YnNjcmliZXJzIGxlZnQuCiAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uID0gX3N1YnNjcmlwdGlvbjsKICAgIF9zdWJzY3JpcHRpb24gPSBudWxsOwogICAgX2NvbnRyb2xsZXIgPSBudWxsOyAvLyBNYXJrcyB0aGUgc3RyZWFtIGFzIG5vIGxvbmdlciBsaXN0ZW5hYmxlLgogICAgc3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogIH0KCiAgdm9pZCBfcGF1c2VTdWJzY3JpcHRpb24oRnV0dXJlIHJlc3VtZVNpZ25hbCkgewogICAgaWYgKF9zdWJzY3JpcHRpb24gPT0gbnVsbCkgcmV0dXJuOwogICAgX3N1YnNjcmlwdGlvbi5wYXVzZShyZXN1bWVTaWduYWwpOwogIH0KCiAgdm9pZCBfcmVzdW1lU3Vic2NyaXB0aW9uKCkgewogICAgaWYgKF9zdWJzY3JpcHRpb24gPT0gbnVsbCkgcmV0dXJuOwogICAgX3N1YnNjcmlwdGlvbi5yZXN1bWUoKTsKICB9CgogIGJvb2wgZ2V0IF9pc1N1YnNjcmlwdGlvblBhdXNlZCB7CiAgICBpZiAoX3N1YnNjcmlwdGlvbiA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX3N1YnNjcmlwdGlvbi5pc1BhdXNlZDsKICB9Cn0KCi8qKgogKiBXcmFwcGVyIGZvciBzdWJzY3JpcHRpb24gdGhhdCBkaXNhbGxvd3MgY2hhbmdpbmcgaGFuZGxlcnMuCiAqLwpjbGFzcyBfQnJvYWRjYXN0U3Vic2NyaXB0aW9uV3JhcHBlcjxUPiBpbXBsZW1lbnRzIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiB7CiAgZmluYWwgX0FzQnJvYWRjYXN0U3RyZWFtIF9zdHJlYW07CgogIF9Ccm9hZGNhc3RTdWJzY3JpcHRpb25XcmFwcGVyKHRoaXMuX3N0cmVhbSk7CgogIHZvaWQgb25EYXRhKHZvaWQgaGFuZGxlRGF0YShUIGRhdGEpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiQ2Fubm90IGNoYW5nZSBoYW5kbGVycyBvZiBhc0Jyb2FkY2FzdFN0cmVhbSBzb3VyY2Ugc3Vic2NyaXB0aW9uLiIpOwogIH0KCiAgdm9pZCBvbkVycm9yKEZ1bmN0aW9uIGhhbmRsZUVycm9yKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiQ2Fubm90IGNoYW5nZSBoYW5kbGVycyBvZiBhc0Jyb2FkY2FzdFN0cmVhbSBzb3VyY2Ugc3Vic2NyaXB0aW9uLiIpOwogIH0KCiAgdm9pZCBvbkRvbmUodm9pZCBoYW5kbGVEb25lKCkpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJDYW5ub3QgY2hhbmdlIGhhbmRsZXJzIG9mIGFzQnJvYWRjYXN0U3RyZWFtIHNvdXJjZSBzdWJzY3JpcHRpb24uIik7CiAgfQoKICB2b2lkIHBhdXNlKFtGdXR1cmUgcmVzdW1lU2lnbmFsXSkgewogICAgX3N0cmVhbS5fcGF1c2VTdWJzY3JpcHRpb24ocmVzdW1lU2lnbmFsKTsKICB9CgogIHZvaWQgcmVzdW1lKCkgewogICAgX3N0cmVhbS5fcmVzdW1lU3Vic2NyaXB0aW9uKCk7CiAgfQoKICBGdXR1cmUgY2FuY2VsKCkgewogICAgX3N0cmVhbS5fY2FuY2VsU3Vic2NyaXB0aW9uKCk7CiAgICByZXR1cm4gRnV0dXJlLl9udWxsRnV0dXJlOwogIH0KCiAgYm9vbCBnZXQgaXNQYXVzZWQgewogICAgcmV0dXJuIF9zdHJlYW0uX2lzU3Vic2NyaXB0aW9uUGF1c2VkOwogIH0KCiAgRnV0dXJlPEU+IGFzRnV0dXJlPEU+KFtFIGZ1dHVyZVZhbHVlXSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIkNhbm5vdCBjaGFuZ2UgaGFuZGxlcnMgb2YgYXNCcm9hZGNhc3RTdHJlYW0gc291cmNlIHN1YnNjcmlwdGlvbi4iKTsKICB9Cn0KCi8qKgogKiBTaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgW1N0cmVhbUl0ZXJhdG9yXS4KICoKICogUGF1c2VzIHRoZSBzdHJlYW0gYmV0d2VlbiBjYWxscyB0byBbbW92ZU5leHRdLgogKi8KY2xhc3MgX1N0cmVhbUl0ZXJhdG9yPFQ+IGltcGxlbWVudHMgU3RyZWFtSXRlcmF0b3I8VD4gewogIC8vIFRoZSBzdHJlYW0gaXRlcmF0b3IgaXMgYWx3YXlzIGluIG9uZSBvZiBmb3VyIHN0YXRlcy4KICAvLyBUaGUgdmFsdWUgb2YgdGhlIFtfc3RhdGVEYXRhXSBmaWVsZCBkZXBlbmRzIG9uIHRoZSBzdGF0ZS4KICAvLwogIC8vIFdoZW4gYF9zdWJzY3JpcHRpb24gPT0gbnVsbGAgYW5kIGBfc3RhdGVEYXRhICE9IG51bGxgOgogIC8vIFRoZSBzdHJlYW0gaXRlcmF0b3IgaGFzIGJlZW4gY3JlYXRlZCwgYnV0IFttb3ZlTmV4dF0gaGFzIG5vdCBiZWVuIGNhbGxlZAogIC8vIHlldC4gVGhlIFtfc3RhdGVEYXRhXSBmaWVsZCBjb250YWlucyB0aGUgc3RyZWFtIHRvIGxpc3RlbiB0byBvbiB0aGUgZmlyc3QKICAvLyBjYWxsIHRvIFttb3ZlTmV4dF0gYW5kIFtjdXJyZW50XSByZXR1cm5zIGBudWxsYC4KICAvLwogIC8vIFdoZW4gYF9zdWJzY3JpcHRpb24gIT0gbnVsbGAgYW5kIGAhX2lzUGF1c2VkYDoKICAvLyBUaGUgdXNlciBoYXMgY2FsbGVkIFttb3ZlTmV4dF0gYW5kIHRoZSBpdGVyYXRvciBpcyB3YWl0aW5nIGZvciB0aGUgbmV4dAogIC8vIGV2ZW50LiBUaGUgW19zdGF0ZURhdGFdIGZpZWxkIGNvbnRhaW5zIHRoZSBbX0Z1dHVyZV0gcmV0dXJuZWQgYnkgdGhlCiAgLy8gW19tb3ZlTmV4dF0gY2FsbCBhbmQgW2N1cnJlbnRdIHJldHVybnMgYG51bGwuYAogIC8vCiAgLy8gV2hlbiBgX3N1YnNjcmlwdGlvbiAhPSBudWxsYCBhbmQgYF9pc1BhdXNlZGA6CiAgLy8gVGhlIG1vc3QgcmVjZW50IGNhbGwgdG8gW21vdmVOZXh0XSBoYXMgY29tcGxldGVkIHdpdGggYSBgdHJ1ZWAgdmFsdWUKICAvLyBhbmQgW2N1cnJlbnRdIHByb3ZpZGVzIHRoZSB2YWx1ZSBvZiB0aGUgZGF0YSBldmVudC4KICAvLyBUaGUgW19zdGF0ZURhdGFdIGZpZWxkIGNvbnRhaW5zIHRoZSBbY3VycmVudF0gdmFsdWUuCiAgLy8KICAvLyBXaGVuIGBfc3Vic2NyaXB0aW9uID09IG51bGxgIGFuZCBgX3N0YXRlRGF0YSA9PSBudWxsYDoKICAvLyBUaGUgc3RyZWFtIGhhcyBjb21wbGV0ZWQgb3IgYmVlbiBjYW5jZWxlZCB1c2luZyBbY2FuY2VsXS4KICAvLyBUaGUgc3RyZWFtIGNvbXBsZXRlcyBvbiBlaXRoZXIgYSBkb25lIGV2ZW50IG9yIGFuIGVycm9yIGV2ZW50LgogIC8vIFRoZSBsYXN0IGNhbGwgdG8gW21vdmVOZXh0XSBoYXMgY29tcGxldGVkIHdpdGggYGZhbHNlYCBhbmQgW2N1cnJlbnRdCiAgLy8gcmV0dXJucyBgbnVsbGAuCgogIC8vLyBTdWJzY3JpcHRpb24gYmVpbmcgbGlzdGVuZWQgdG8uCiAgLy8vCiAgLy8vIFNldCB0byBgbnVsbGAgd2hlbiB0aGUgc3RyZWFtIHN1YnNjcmlwdGlvbiBpcyBkb25lIG9yIGNhbmNlbGVkLgogIFN0cmVhbVN1YnNjcmlwdGlvbiBfc3Vic2NyaXB0aW9uOwoKICAvLy8gRGF0YSB2YWx1ZSBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgc3RhdGUuCiAgLy8vCiAgLy8vIEJlZm9yZSBmaXJzdCBjYWxsIHRvIFttb3ZlTmV4dF06IFRoZSBzdHJlYW0gdG8gbGlzdGVuIHRvLgogIC8vLwogIC8vLyBBZnRlciBjYWxsaW5nIFttb3ZlTmV4dF0gYnV0IGJlZm9yZSB0aGUgcmV0dXJuZWQgZnV0dXJlIGNvbXBsZXRlczoKICAvLy8gVGhlIHJldHVybmVkIGZ1dHVyZS4KICAvLy8KICAvLy8gQWZ0ZXIgY2FsbGluZyBbbW92ZU5leHRdIGFuZCB0aGUgcmV0dXJuZWQgZnV0dXJlIGhhcyBjb21wbGV0ZWQKICAvLy8gd2l0aCBgdHJ1ZWA6IFRoZSB2YWx1ZSBvZiBbY3VycmVudF0uCiAgLy8vCiAgLy8vIEFmdGVyIGNhbGxpbmcgW21vdmVOZXh0XSBhbmQgdGhlIHJldHVybmVkIGZ1dHVyZSBoYXMgY29tcGxldGVkCiAgLy8vIHdpdGggYGZhbHNlYCwgb3IgYWZ0ZXIgY2FsbGluZyBbY2FuY2VsXTogYG51bGxgLgogIE9iamVjdCBfc3RhdGVEYXRhOwoKICAvLy8gV2hldGhlciB0aGUgaXRlcmF0b3IgaXMgYmV0d2VlbiBjYWxscyB0byBgbW92ZU5leHRgLgogIC8vLyBUaGlzIHdpbGwgdXN1YWxseSBjYXVzZSB0aGUgW19zdWJzY3JpcHRpb25dIHRvIGJlIHBhdXNlZCwgYnV0IGFzIGFuCiAgLy8vIG9wdGltaXphdGlvbiwgd2Ugb25seSBwYXVzZSBhZnRlciB0aGUgW21vdmVOZXh0XSBmdXR1cmUgaGFzIGJlZW4KICAvLy8gY29tcGxldGVkLgogIGJvb2wgX2lzUGF1c2VkID0gZmFsc2U7CgogIF9TdHJlYW1JdGVyYXRvcihmaW5hbCBTdHJlYW08VD4gc3RyZWFtKQogICAgICA6IF9zdGF0ZURhdGEgPSBzdHJlYW0gPz8gKHRocm93IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgic3RyZWFtIikpOwoKICBUIGdldCBjdXJyZW50IHsKICAgIGlmIChfc3Vic2NyaXB0aW9uICE9IG51bGwgJiYgX2lzUGF1c2VkKSB7CiAgICAgIHJldHVybiBfc3RhdGVEYXRhOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBGdXR1cmU8Ym9vbD4gbW92ZU5leHQoKSB7CiAgICBpZiAoX3N1YnNjcmlwdGlvbiAhPSBudWxsKSB7CiAgICAgIGlmIChfaXNQYXVzZWQpIHsKICAgICAgICB2YXIgZnV0dXJlID0gbmV3IF9GdXR1cmU8Ym9vbD4oKTsKICAgICAgICBfc3RhdGVEYXRhID0gZnV0dXJlOwogICAgICAgIF9pc1BhdXNlZCA9IGZhbHNlOwogICAgICAgIF9zdWJzY3JpcHRpb24ucmVzdW1lKCk7CiAgICAgICAgcmV0dXJuIGZ1dHVyZTsKICAgICAgfQogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiQWxyZWFkeSB3YWl0aW5nIGZvciBuZXh0LiIpOwogICAgfQogICAgcmV0dXJuIF9pbml0aWFsaXplT3JEb25lKCk7CiAgfQoKICAvLy8gQ2FsbGVkIGlmIHRoZXJlIGlzIG5vIGFjdGl2ZSBzdWJzY3JpcHRpb24gd2hlbiBbbW92ZU5leHRdIGlzIGNhbGxlZC4KICAvLy8KICAvLy8gRWl0aGVyIHN0YXJ0cyBsaXN0ZW5pbmcgb24gdGhlIHN0cmVhbSBpZiB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsIHRvCiAgLy8vIFttb3ZlTmV4dF0sIG9yIHJldHVybnMgYSBgZmFsc2VgIGZ1dHVyZSBiZWNhdXNlIHRoZSBzdHJlYW0gaGFzIGFscmVhZHkKICAvLy8gZW5kZWQuCiAgRnV0dXJlPGJvb2w+IF9pbml0aWFsaXplT3JEb25lKCkgewogICAgYXNzZXJ0KF9zdWJzY3JpcHRpb24gPT0gbnVsbCk7CiAgICB2YXIgc3RhdGVEYXRhID0gX3N0YXRlRGF0YTsKICAgIGlmIChzdGF0ZURhdGEgIT0gbnVsbCkgewogICAgICBTdHJlYW08VD4gc3RyZWFtID0gc3RhdGVEYXRhOwogICAgICBfc3Vic2NyaXB0aW9uID0gc3RyZWFtLmxpc3Rlbihfb25EYXRhLAogICAgICAgICAgb25FcnJvcjogX29uRXJyb3IsIG9uRG9uZTogX29uRG9uZSwgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICAgIHZhciBmdXR1cmUgPSBuZXcgX0Z1dHVyZTxib29sPigpOwogICAgICBfc3RhdGVEYXRhID0gZnV0dXJlOwogICAgICByZXR1cm4gZnV0dXJlOwogICAgfQogICAgcmV0dXJuIEZ1dHVyZS5fZmFsc2VGdXR1cmU7CiAgfQoKICBGdXR1cmUgY2FuY2VsKCkgewogICAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbiA9IF9zdWJzY3JpcHRpb247CiAgICBPYmplY3Qgc3RhdGVEYXRhID0gX3N0YXRlRGF0YTsKICAgIF9zdGF0ZURhdGEgPSBudWxsOwogICAgaWYgKHN1YnNjcmlwdGlvbiAhPSBudWxsKSB7CiAgICAgIF9zdWJzY3JpcHRpb24gPSBudWxsOwogICAgICBpZiAoIV9pc1BhdXNlZCkgewogICAgICAgIF9GdXR1cmU8Ym9vbD4gZnV0dXJlID0gc3RhdGVEYXRhOwogICAgICAgIGZ1dHVyZS5fYXN5bmNDb21wbGV0ZShmYWxzZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgIH0KICAgIHJldHVybiBGdXR1cmUuX251bGxGdXR1cmU7CiAgfQoKICB2b2lkIF9vbkRhdGEoVCBkYXRhKSB7CiAgICBhc3NlcnQoX3N1YnNjcmlwdGlvbiAhPSBudWxsICYmICFfaXNQYXVzZWQpOwogICAgX0Z1dHVyZTxib29sPiBtb3ZlTmV4dEZ1dHVyZSA9IF9zdGF0ZURhdGE7CiAgICBfc3RhdGVEYXRhID0gZGF0YTsKICAgIF9pc1BhdXNlZCA9IHRydWU7CiAgICBtb3ZlTmV4dEZ1dHVyZS5fY29tcGxldGUodHJ1ZSk7CiAgICBpZiAoX3N1YnNjcmlwdGlvbiAhPSBudWxsICYmIF9pc1BhdXNlZCkgX3N1YnNjcmlwdGlvbi5wYXVzZSgpOwogIH0KCiAgdm9pZCBfb25FcnJvcihPYmplY3QgZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICBhc3NlcnQoX3N1YnNjcmlwdGlvbiAhPSBudWxsICYmICFfaXNQYXVzZWQpOwogICAgX0Z1dHVyZTxib29sPiBtb3ZlTmV4dEZ1dHVyZSA9IF9zdGF0ZURhdGE7CiAgICBfc3Vic2NyaXB0aW9uID0gbnVsbDsKICAgIF9zdGF0ZURhdGEgPSBudWxsOwogICAgbW92ZU5leHRGdXR1cmUuX2NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgdm9pZCBfb25Eb25lKCkgewogICAgYXNzZXJ0KF9zdWJzY3JpcHRpb24gIT0gbnVsbCAmJiAhX2lzUGF1c2VkKTsKICAgIF9GdXR1cmU8Ym9vbD4gbW92ZU5leHRGdXR1cmUgPSBfc3RhdGVEYXRhOwogICAgX3N1YnNjcmlwdGlvbiA9IG51bGw7CiAgICBfc3RhdGVEYXRhID0gbnVsbDsKICAgIG1vdmVOZXh0RnV0dXJlLl9jb21wbGV0ZShmYWxzZSk7CiAgfQp9CgovKiogQW4gZW1wdHkgYnJvYWRjYXN0IHN0cmVhbSwgc2VuZGluZyBhIGRvbmUgZXZl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ZXJDb2RlKCksIG9uU3VjY2VzcyhUIHZhbHVlKSwgb25FcnJvcihlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSkgewogIHRyeSB7CiAgICBvblN1Y2Nlc3ModXNlckNvZGUoKSk7CiAgfSBjYXRjaCAoZSwgcykgewogICAgQXN5bmNFcnJvciByZXBsYWNlbWVudCA9IFpvbmUuY3VycmVudC5lcnJvckNhbGxiYWNrKGUsIHMpOwogICAgaWYgKHJlcGxhY2VtZW50ID09IG51bGwpIHsKICAgICAgb25FcnJvcihlLCBzKTsKICAgIH0gZWxzZSB7CiAgICAgIHZhciBlcnJvciA9IF9ub25OdWxsRXJyb3IocmVwbGFjZW1lbnQuZXJyb3IpOwogICAgICB2YXIgc3RhY2tUcmFjZSA9IHJlcGxhY2VtZW50LnN0YWNrVHJhY2U7CiAgICAgIG9uRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgfQogIH0KfQoKLyoqIEhlbHBlciBmdW5jdGlvbiB0byBjYW5jZWwgYSBzdWJzY3JpcHRpb24gYW5kIHdhaXQgZm9yIHRoZSBwb3RlbnRpYWwgZnV0dXJlLAogIGJlZm9yZSBjb21wbGV0aW5nIHdpdGggYW4gZXJyb3IuICovCnZvaWQgX2NhbmNlbEFuZEVycm9yKFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb24sIF9GdXR1cmUgZnV0dXJlLCBlcnJvciwKICAgIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogIHZhciBjYW5jZWxGdXR1cmUgPSBzdWJzY3JpcHRpb24uY2FuY2VsKCk7CiAgaWYgKGNhbmNlbEZ1dHVyZSAhPSBudWxsICYmICFpZGVudGljYWwoY2FuY2VsRnV0dXJlLCBGdXR1cmUuX251bGxGdXR1cmUpKSB7CiAgICBjYW5jZWxGdXR1cmUud2hlbkNvbXBsZXRlKCgpID0+IGZ1dHVyZS5fY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSkpOwogIH0gZWxzZSB7CiAgICBmdXR1cmUuX2NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KfQoKdm9pZCBfY2FuY2VsQW5kRXJyb3JXaXRoUmVwbGFjZW1lbnQoU3RyZWFtU3Vic2NyaXB0aW9uIHN1YnNjcmlwdGlvbiwKICAgIF9GdXR1cmUgZnV0dXJlLCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgQXN5bmNFcnJvciByZXBsYWNlbWVudCA9IFpvbmUuY3VycmVudC5lcnJvckNhbGxiYWNrKGVycm9yLCBzdGFja1RyYWNlKTsKICBpZiAocmVwbGFjZW1lbnQgIT0gbnVsbCkgewogICAgZXJyb3IgPSBfbm9uTnVsbEVycm9yKHJlcGxhY2VtZW50LmVycm9yKTsKICAgIHN0YWNrVHJhY2UgPSByZXBsYWNlbWVudC5zdGFja1RyYWNlOwogIH0KICBfY2FuY2VsQW5kRXJyb3Ioc3Vic2NyaXB0aW9uLCBmdXR1cmUsIGVycm9yLCBzdGFja1RyYWNlKTsKfQoKdHlwZWRlZiB2b2lkIF9FcnJvckNhbGxiYWNrKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpOwoKLyoqIEhlbHBlciBmdW5jdGlvbiB0byBtYWtlIGFuIG9uRXJyb3IgYXJndW1lbnQgdG8gW19ydW5Vc2VyQ29kZV0uICovCl9FcnJvckNhbGxiYWNrIF9jYW5jZWxBbmRFcnJvckNsb3N1cmUoCiAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uLCBfRnV0dXJlIGZ1dHVyZSkgewogIHJldHVybiAoZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgX2NhbmNlbEFuZEVycm9yKHN1YnNjcmlwdGlvbiwgZnV0dXJlLCBlcnJvciwgc3RhY2tUcmFjZSk7CiAgfTsKfQoKLyoqIEhlbHBlciBmdW5jdGlvbiB0byBjYW5jZWwgYSBzdWJzY3JpcHRpb24gYW5kIHdhaXQgZm9yIHRoZSBwb3RlbnRpYWwgZnV0dXJlLAogIGJlZm9yZSBjb21wbGV0aW5nIHdpdGggYSB2YWx1ZS4gKi8Kdm9pZCBfY2FuY2VsQW5kVmFsdWUoU3RyZWFtU3Vic2NyaXB0aW9uIHN1YnNjcmlwdGlvbiwgX0Z1dHVyZSBmdXR1cmUsIHZhbHVlKSB7CiAgdmFyIGNhbmNlbEZ1dHVyZSA9IHN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICBpZiAoY2FuY2VsRnV0dXJlICE9IG51bGwgJiYgIWlkZW50aWNhbChjYW5jZWxGdXR1cmUsIEZ1dHVyZS5fbnVsbEZ1dHVyZSkpIHsKICAgIGNhbmNlbEZ1dHVyZS53aGVuQ29tcGxldGUoKCkgPT4gZnV0dXJlLl9jb21wbGV0ZSh2YWx1ZSkpOwogIH0gZWxzZSB7CiAgICBmdXR1cmUuX2NvbXBsZXRlKHZhbHVlKTsKICB9Cn0KCi8qKgogKiBBIFtTdHJlYW1dIHRoYXQgZm9yd2FyZHMgc3Vic2NyaXB0aW9ucyB0byBhbm90aGVyIHN0cmVhbS4KICoKICogVGhpcyBzdHJlYW0gaW1wbGVtZW50cyBbU3RyZWFtXSwgYnV0IGZvcndhcmRzIGFsbCBzdWJzY3JpcHRpb25zCiAqIHRvIGFuIHVuZGVybHlpbmcgc3RyZWFtLCBhbmQgd3JhcHMgdGhlIHJldHVybmVkIHN1YnNjcmlwdGlvbiB0bwogKiBtb2RpZnkgdGhlIGV2ZW50cyBvbiB0aGUgd2F5LgogKgogKiBUaGlzIGNsYXNzIGlzIGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2Ugb25seS4KICovCmFic3RyYWN0IGNsYXNzIF9Gb3J3YXJkaW5nU3RyZWFtPFMsIFQ+IGV4dGVuZHMgU3RyZWFtPFQ+IHsKICBmaW5hbCBTdHJlYW08Uz4gX3NvdXJjZTsKCiAgX0ZvcndhcmRpbmdTdHJlYW0odGhpcy5fc291cmNlKTsKCiAgYm9vbCBnZXQgaXNCcm9hZGNhc3QgPT4gX3NvdXJjZS5pc0Jyb2FkY2FzdDsKCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IGxpc3Rlbih2b2lkIG9uRGF0YShUIHZhbHVlKSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIGNhbmNlbE9uRXJyb3IgPSBpZGVudGljYWwodHJ1ZSwgY2FuY2VsT25FcnJvcik7CiAgICByZXR1cm4gX2NyZWF0ZVN1YnNjcmlwdGlvbihvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvcik7CiAgfQoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gX2NyZWF0ZVN1YnNjcmlwdGlvbih2b2lkIG9uRGF0YShUIGRhdGEpLAogICAgICBGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3IpIHsKICAgIHJldHVybiBuZXcgX0ZvcndhcmRpbmdTdHJlYW1TdWJzY3JpcHRpb248UywgVD4oCiAgICAgICAgdGhpcywgb25EYXRhLCBvbkVycm9yLCBvbkRvbmUsIGNhbmNlbE9uRXJyb3IpOwogIH0KCiAgLy8gT3ZlcnJpZGUgdGhlIGZvbGxvd2luZyBtZXRob2RzIGluIHN1YmNsYXNzZXMgdG8gY2hhbmdlIHRoZSBiZWhhdmlvci4KCiAgdm9pZCBfaGFuZGxlRGF0YShTIGRhdGEsIF9FdmVudFNpbms8VD4gc2luaykgewogICAgc2luay5fYWRkKGRhdGEgYXMgT2JqZWN0KTsKICB9CgogIHZvaWQgX2hhbmRsZUVycm9yKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UsIF9FdmVudFNpbms8VD4gc2luaykgewogICAgc2luay5fYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgdm9pZCBfaGFuZGxlRG9uZShfRXZlbnRTaW5rPFQ+IHNpbmspIHsKICAgIHNpbmsuX2Nsb3NlKCk7CiAgfQp9CgovKioKICogQWJzdHJhY3Qgc3VwZXJjbGFzcyBmb3Igc3Vic2NyaXB0aW9ucyB0aGF0IGZvcndhcmQgdG8gb3RoZXIgc3Vic2NyaXB0aW9ucy4KICovCmNsYXNzIF9Gb3J3YXJkaW5nU3RyZWFtU3Vic2NyaXB0aW9uPFMsIFQ+CiAgICBleHRlbmRzIF9CdWZmZXJpbmdTdHJlYW1TdWJzY3JpcHRpb248VD4gewogIGZpbmFsIF9Gb3J3YXJkaW5nU3RyZWFtPFMsIFQ+IF9zdHJlYW07CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxTPiBfc3Vic2NyaXB0aW9uOwoKICBfRm9yd2FyZGluZ1N0cmVhbVN1YnNjcmlwdGlvbih0aGlzLl9zdHJlYW0sIHZvaWQgb25EYXRhKFQgZGF0YSksCiAgICAgIEZ1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcikKICAgICAgOiBzdXBlcihvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvcikgewogICAgX3N1YnNjcmlwdGlvbiA9IF9zdHJlYW0uX3NvdXJjZQogICAgICAgIC5saXN0ZW4oX2hhbmRsZURhdGEsIG9uRXJyb3I6IF9oYW5kbGVFcnJvciwgb25Eb25lOiBfaGFuZGxlRG9uZSk7CiAgfQoKICAvLyBfU3RyZWFtU2luayBpbnRlcmZhY2UuCiAgLy8gVHJhbnNmb3JtZXJzIHNlbmRpbmcgbW9yZSB0aGFuIG9uZSBldmVudCBoYXZlIG5vIHdheSB0byBrbm93IGlmIHRoZSBzdHJlYW0KICAvLyBpcyBjYW5jZWxlZCBvciBjbG9zZWQgYWZ0ZXIgdGhlIGZpcnN0LCBzbyB3ZSBqdXN0IGlnbm9yZSByZW1haW5pbmcgZXZlbnRzLgoKICB2b2lkIF9hZGQoVCBkYXRhKSB7CiAgICBpZiAoX2lzQ2xvc2VkKSByZXR1cm47CiAgICBzdXBlci5fYWRkKGRhdGEpOwogIH0KCiAgdm9pZCBfYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIGlmIChfaXNDbG9zZWQpIHJldHVybjsKICAgIHN1cGVyLl9hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICAvLyBTdHJlYW1TdWJzY3JpcHRpb24gY2FsbGJhY2tzLgoKICB2b2lkIF9vblBhdXNlKCkgewogICAgaWYgKF9zdWJzY3JpcHRpb24gPT0gbnVsbCkgcmV0dXJuOwogICAgX3N1YnNjcmlwdGlvbi5wYXVzZSgpOwogIH0KCiAgdm9pZCBfb25SZXN1bWUoKSB7CiAgICBpZiAoX3N1YnNjcmlwdGlvbiA9PSBudWxsKSByZXR1cm47CiAgICBfc3Vic2NyaXB0aW9uLnJlc3VtZSgpOwogIH0KCiAgRnV0dXJlIF9vbkNhbmNlbCgpIHsKICAgIGlmIChfc3Vic2NyaXB0aW9uICE9IG51bGwpIHsKICAgICAgU3RyZWFtU3Vic2NyaXB0aW9uIHN1YnNjcmlwdGlvbiA9IF9zdWJzY3JpcHRpb247CiAgICAgIF9zdWJzY3JpcHRpb24gPSBudWxsOwogICAgICByZXR1cm4gc3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvLyBNZXRob2RzIHVzZWQgYXMgbGlzdGVuZXIgb24gc291cmNlIHN1YnNjcmlwdGlvbi4KCiAgdm9pZCBfaGFuZGxlRGF0YShTIGRhdGEpIHsKICAgIF9zdHJlYW0uX2hhbmRsZURhdGEoZGF0YSwgdGhpcyk7CiAgfQoKICB2b2lkIF9oYW5kbGVFcnJvcihlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICBfc3RyZWFtLl9oYW5kbGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSwgdGhpcyk7CiAgfQoKICB2b2lkIF9oYW5kbGVEb25lKCkgewogICAgX3N0cmVhbS5faGFuZGxlRG9uZSh0aGlzKTsKICB9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gU3RyZWFtIHRyYW5zZm9ybWVycyB1c2VkIGJ5IHRoZSBkZWZhdWx0IFN0cmVhbSBpbXBsZW1lbnRhdGlvbi4KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKdHlwZWRlZiBib29sIF9QcmVkaWNhdGU8VD4oVCB2YWx1ZSk7Cgp2b2lkIF9hZGRFcnJvcldpdGhSZXBsYWNlbWVudChfRXZlbnRTaW5rIHNpbmssIGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICBBc3luY0Vycm9yIHJlcGxhY2VtZW50ID0gWm9uZS5jdXJyZW50LmVycm9yQ2FsbGJhY2soZXJyb3IsIHN0YWNrVHJhY2UpOwogIGlmIChyZXBsYWNlbWVudCAhPSBudWxsKSB7CiAgICBlcnJvciA9IF9ub25OdWxsRXJyb3IocmVwbGFjZW1lbnQuZXJyb3IpOwogICAgc3RhY2tUcmFjZSA9IHJlcGxhY2VtZW50LnN0YWNrVHJhY2U7CiAgfQogIHNpbmsuX2FkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKfQoKY2xhc3MgX1doZXJlU3RyZWFtPFQ+IGV4dGVuZHMgX0ZvcndhcmRpbmdTdHJlYW08VCwgVD4gewogIGZpbmFsIF9QcmVkaWNhdGU8VD4gX3Rlc3Q7CgogIF9XaGVyZVN0cmVhbShTdHJlYW08VD4gc291cmNlLCBib29sIHRlc3QoVCB2YWx1ZSkpCiAgICAgIDogX3Rlc3QgPSB0ZXN0LAogICAgICAgIHN1cGVyKHNvdXJjZSk7CgogIHZvaWQgX2hhbmRsZURhdGEoVCBpbnB1dEV2ZW50LCBfRXZlbnRTaW5rPFQ+IHNpbmspIHsKICAgIGJvb2wgc2F0aXNmaWVzOwogICAgdHJ5IHsKICAgICAgc2F0aXNmaWVzID0gX3Rlc3QoaW5wdXRFdmVudCk7CiAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgIF9hZGRFcnJvcldpdGhSZXBsYWNlbWVudChzaW5rLCBlLCBzKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHNhdGlzZmllcykgewogICAgICBzaW5rLl9hZGQoaW5wdXRFdmVudCk7CiAgICB9CiAgfQp9Cgp0eXBlZGVmIFQgX1RyYW5zZm9ybWF0aW9uPFMsIFQ+KFMgdmFsdWUpOwoKLyoqCiAqIEEgc3RyZWFtIHBpcGUgdGhhdCBjb252ZXJ0cyBkYXRhIGV2ZW50cyBiZWZvcmUgcGFzc2luZyB0aGVtIG9uLgogKi8KY2xhc3MgX01hcFN0cmVhbTxTLCBUPiBleHRlbmRzIF9Gb3J3YXJkaW5nU3RyZWFtPFMsIFQ+IHsKICBmaW5hbCBfVHJhbnNmb3JtYXRpb248UywgVD4gX3RyYW5zZm9ybTsKCiAgX01hcFN0cmVhbShTdHJlYW08Uz4gc291cmNlLCBUIHRyYW5zZm9ybShTIGV2ZW50KSkKICAgICAgOiB0aGlzLl90cmFuc2Zvcm0gPSB0cmFuc2Zvcm0sCiAgICAgICAgc3VwZXIoc291cmNlKTsKCiAgdm9pZCBfaGFuZGxlRGF0YShTIGlucHV0RXZlbnQsIF9FdmVudFNpbms8VD4gc2luaykgewogICAgVCBvdXRwdXRFdmVudDsKICAgIHRyeSB7CiAgICAgIG91dHB1dEV2ZW50ID0gX3RyYW5zZm9ybShpbnB1dEV2ZW50KTsKICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgX2FkZEVycm9yV2l0aFJlcGxhY2VtZW50KHNpbmssIGUsIHMpOwogICAgICByZXR1cm47CiAgICB9CiAgICBzaW5rLl9hZGQob3V0cHV0RXZlbnQpOwogIH0KfQoKLyoqCiAqIEEgc3RyZWFtIHBpcGUgdGhhdCBjb252ZXJ0cyBkYXRhIGV2ZW50cyBiZWZvcmUgcGFzc2luZyB0aGVtIG9uLgogKi8KY2xhc3MgX0V4cGFuZFN0cmVhbTxTLCBUPiBleHRlbmRzIF9Gb3J3YXJkaW5nU3RyZWFtPFMsIFQ+IHsKICBmaW5hbCBfVHJhbnNmb3JtYXRpb248UywgSXRlcmFibGU8VD4+IF9leHBhbmQ7CgogIF9FeHBhbmRTdHJlYW0oU3RyZWFtPFM+IHNvdXJjZSwgSXRlcmFibGU8VD4gZXhwYW5kKFMgZXZlbnQpKQogICAgICA6IHRoaXMuX2V4cGFuZCA9IGV4cGFuZCwKICAgICAgICBzdXBlcihzb3VyY2UpOwoKICB2b2lkIF9oYW5kbGVEYXRhKFMgaW5wdXRFdmVudCwgX0V2ZW50U2luazxUPiBzaW5rKSB7CiAgICB0cnkgewogICAgICBmb3IgKFQgdmFsdWUgaW4gX2V4cGFuZChpbnB1dEV2ZW50KSkgewogICAgICAgIHNpbmsuX2FkZCh2YWx1ZSk7CiAgICAgIH0KICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgLy8gSWYgZWl0aGVyIF9leHBhbmQgb3IgaXRlcmF0aW5nIHRoZSBnZW5lcmF0ZWQgaXRlcmF0b3IgdGhyb3dzLAogICAgICAvLyB3ZSBhYm9ydCB0aGUgaXRlcmF0aW9uLgogICAgICBfYWRkRXJyb3JXaXRoUmVwbGFjZW1lbnQoc2luaywgZSwgcyk7CiAgICB9CiAgfQp9Cgp0eXBlZGVmIGJvb2wgX0Vycm9yVGVzdChlcnJvcik7CgovKioKICogQSBzdHJlYW0gcGlwZSB0aGF0IGNvbnZlcnRzIG9yIGRpc3Bvc2VzIGVycm9yIGV2ZW50cwogKiBiZWZvcmUgcGFzc2luZyB0aGVtIG9uLgogKi8KY2xhc3MgX0hhbmRsZUVycm9yU3RyZWFtPFQ+IGV4dGVuZHMgX0ZvcndhcmRpbmdTdHJlYW08VCwgVD4gewogIGZpbmFsIEZ1bmN0aW9uIF90cmFuc2Zvcm07CiAgZmluYWwgX0Vycm9yVGVzdCBfdGVzdDsKCiAgX0hhbmRsZUVycm9yU3RyZWFtKFN0cmVhbTxUPiBzb3VyY2UsIEZ1bmN0aW9uIG9uRXJyb3IsIGJvb2wgdGVzdChlcnJvcikpCiAgICAgIDogdGhpcy5fdHJhbnNmb3JtID0gb25FcnJvciwKICAgICAgICB0aGlzLl90ZXN0ID0gdGVzdCwKICAgICAgICBzdXBlcihzb3VyY2UpOwoKICB2b2lkIF9oYW5kbGVFcnJvcihPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSwgX0V2ZW50U2luazxUPiBzaW5rKSB7CiAgICBib29sIG1hdGNoZXMgPSB0cnVlOwogICAgaWYgKF90ZXN0ICE9IG51bGwpIHsKICAgICAgdHJ5IHsKICAgICAgICBtYXRjaGVzID0gX3Rlc3QoZXJyb3IpOwogICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgX2FkZEVycm9yV2l0aFJlcGxhY2VtZW50KHNpbmssIGUsIHMpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgaWYgKG1hdGNoZXMpIHsKICAgICAgdHJ5IHsKICAgICAgICBfaW52b2tlRXJyb3JIYW5kbGVyKF90cmFuc2Zvcm0sIGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgIGlmIChpZGVudGljYWwoZSwgZXJyb3IpKSB7CiAgICAgICAgICBzaW5rLl9hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF9hZGRFcnJvcldpdGhSZXBsYWNlbWVudChzaW5rLCBlLCBzKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBzaW5rLl9hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICB9CiAgfQp9CgpjbGFzcyBfVGFrZVN0cmVhbTxUPiBleHRlbmRzIF9Gb3J3YXJkaW5nU3RyZWFtPFQsIFQ+IHsKICBmaW5hbCBpbnQgX2NvdW50OwoKICBfVGFrZVN0cmVhbShTdHJlYW08VD4gc291cmNlLCBpbnQgY291bnQpCiAgICAgIDogdGhpcy5fY291bnQgPSBjb3VudCwKICAgICAgICBzdXBlcihzb3VyY2UpIHsKICAgIC8vIFRoaXMgdGVzdCBpcyBkb25lIGVhcmx5IHRvIGF2b2lkIGhhbmRsaW5nIGFuIGFzeW5jIGVycm9yCiAgICAvLyBpbiB0aGUgX2hhbmRsZURhdGEgbWV0aG9kLgogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwoY291bnQsICJjb3VudCIpOwogIH0KCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IF9jcmVhdGVTdWJzY3JpcHRpb24odm9pZCBvbkRhdGEoVCBkYXRhKSwKICAgICAgRnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yKSB7CiAgICBpZiAoX2NvdW50ID09IDApIHsKICAgICAgX3NvdXJjZS5saXN0ZW4obnVsbCkuY2FuY2VsKCk7CiAgICAgIHJldHVybiBuZXcgX0RvbmVTdHJlYW1TdWJzY3JpcHRpb248VD4ob25Eb25lKTsKICAgIH0KICAgIHJldHVybiBuZXcgX1N0YXRlU3RyZWFtU3Vic2NyaXB0aW9uPFQ+KAogICAgICAgIHRoaXMsIG9uRGF0YSwgb25FcnJvciwgb25Eb25lLCBjYW5jZWxPbkVycm9yLCBfY291bnQpOwogIH0KCiAgdm9pZCBfaGFuZGxlRGF0YShUIGlucHV0RXZlbnQsIF9FdmVudFNpbms8VD4gc2luaykgewogICAgX1N0YXRlU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbiA9IHNpbms7CiAgICBpbnQgY291bnQgPSBzdWJzY3JpcHRpb24uX2NvdW50OwogICAgaWYgKGNvdW50ID4gMCkgewogICAgICBzaW5rLl9hZGQoaW5wdXRFdmVudCk7CiAgICAgIGNvdW50IC09IDE7CiAgICAgIHN1YnNjcmlwdGlvbi5fY291bnQgPSBjb3VudDsKICAgICAgaWYgKGNvdW50ID09IDApIHsKICAgICAgICAvLyBDbG9zaW5nIGFsc28gdW5zdWJzY3JpYmVzIGFsbCBzdWJzY3JpYmVycywgd2hpY2ggdW5zdWJzY3JpYmVzCiAgICAgICAgLy8gdGhpcyBmcm9tIHNvdXJjZS4KICAgICAgICBzaW5rLl9jbG9zZSgpOwogICAgICB9CiAgICB9CiAgfQp9CgovKioKICogQSBbX0ZvcndhcmRpbmdTdHJlYW1TdWJzY3JpcHRpb25dIHdpdGggb25lIGV4dHJhIHN0YXRlIGZpZWxkLgogKgogKiBVc2UgYnkgc2V2ZXJhbCBkaWZmZXJlbnQgY2xhc3Nlcywgc3RvcmluZyBhbiBpbnRlZ2VyLCBib29sIG9yIGdlbmVyYWwuCiAqLwpjbGFzcyBfU3RhdGVTdHJlYW1TdWJzY3JpcHRpb248VD4gZXh0ZW5kcyBfRm9yd2FyZGluZ1N0cmVhbVN1YnNjcmlwdGlvbjxULCBUPiB7CiAgLy8gUmF3IHN0YXRlIGZpZWxkLiBUeXBlZCBhY2Nlc3MgcHJvdmlkZWQgYnkgZ2V0dGVycyBhbmQgc2V0dGVycyBiZWxvdy4KICB2YXIgX3NoYXJlZFN0YXRlOwoKICBfU3RhdGVTdHJlYW1TdWJzY3JpcHRpb24oX0ZvcndhcmRpbmdTdHJlYW08VCwgVD4gc3RyZWFtLCB2b2lkIG9uRGF0YShUIGRhdGEpLAogICAgICBGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3IsIHRoaXMuX3NoYXJlZFN0YXRlKQogICAgICA6IHN1cGVyKHN0cmVhbSwgb25EYXRhLCBvbkVycm9yLCBvbkRvbmUsIGNhbmNlbE9uRXJyb3IpOwoKICBib29sIGdldCBfZmxhZyA9PiBfc2hhcmVkU3RhdGU7CiAgdm9pZCBzZXQgX2ZsYWcoYm9vbCBmbGFnKSB7CiAgICBfc2hhcmVkU3RhdGUgPSBmbGFnOwogIH0KCiAgaW50IGdldCBfY291bnQgPT4gX3NoYXJlZFN0YXRlOwogIHZvaWQgc2V0IF9jb3VudChpbnQgY291bnQpIHsKICAgIF9zaGFyZWRTdGF0ZSA9IGNvdW50OwogIH0KCiAgT2JqZWN0IGdldCBfdmFsdWUgPT4gX3NoYXJlZFN0YXRlOwogIHZvaWQgc2V0IF92YWx1ZShPYmplY3QgdmFsdWUpIHsKICAgIF9zaGFyZWRTdGF0ZSA9IHZhbHVlOwogIH0KfQoKY2xhc3MgX1Rha2VXaGlsZVN0cmVhbTxUPiBleHRlbmRzIF9Gb3J3YXJkaW5nU3RyZWFtPFQsIFQ+IHsKICBmaW5hbCBfUHJlZGljYXRlPFQ+IF90ZXN0OwoKICBfVGFrZVdoaWxlU3RyZWFtKFN0cmVhbTxUPiBzb3VyY2UsIGJvb2wgdGVzdChUIHZhbHVlKSkKICAgICAgOiB0aGlzLl90ZXN0ID0gdGVzdCwKICAgICAgICBzdXBlcihzb3VyY2UpOwoKICB2b2lkIF9oYW5kbGVEYXRhKFQgaW5wdXRFdmVudCwgX0V2ZW50U2luazxUPiBzaW5rKSB7CiAgICBib29sIHNhdGlzZmllczsKICAgIHRyeSB7CiAgICAgIHNhdGlzZmllcyA9IF90ZXN0KGlucHV0RXZlbnQpOwogICAgfSBjYXRjaCAoZSwgcykgewogICAgICBfYWRkRXJyb3JXaXRoUmVwbGFjZW1lbnQoc2luaywgZSwgcyk7CiAgICAgIC8vIFRoZSB0ZXN0IGRpZG4ndCBzYXkgdHJ1ZS4gRGlkbid0IHNheSBmYWxzZSBlaXRoZXIsIGJ1dCB3ZSBzdG9wIGFueXdheS4KICAgICAgc2luay5fY2xvc2UoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHNhdGlzZmllcykgewogICAgICBzaW5rLl9hZGQoaW5wdXRFdmVudCk7CiAgICB9IGVsc2UgewogICAgICBzaW5rLl9jbG9zZSgpOwogICAgfQogIH0KfQoKY2xhc3MgX1NraXBTdHJlYW08VD4gZXh0ZW5kcyBfRm9yd2FyZGluZ1N0cmVhbTxULCBUPiB7CiAgZmluYWwgaW50IF9jb3VudDsKCiAgX1NraXBTdHJlYW0oU3RyZWFtPFQ+IHNvdXJjZSwgaW50IGNvdW50KQogICAgICA6IHRoaXMuX2NvdW50ID0gY291bnQsCiAgICAgICAgc3VwZXIoc291cmNlKSB7CiAgICAvLyBUaGlzIHRlc3QgaXMgZG9uZSBlYXJseSB0byBhdm9pZCBoYW5kbGluZyBhbiBhc3luYyBlcnJvcgogICAgLy8gaW4gdGhlIF9oYW5kbGVEYXRhIG1ldGhvZC4KICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGNvdW50LCAiY291bnQiKTsKICAgIFJhbmdlRXJyb3IuY2hlY2tOb3ROZWdhdGl2ZShjb3VudCwgImNvdW50Iik7CiAgfQoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gX2NyZWF0ZVN1YnNjcmlwdGlvbih2b2lkIG9uRGF0YShUIGRhdGEpLAogICAgICBGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3IpIHsKICAgIHJldHVybiBuZXcgX1N0YXRlU3RyZWFtU3Vic2NyaXB0aW9uPFQ+KAogICAgICAgIHRoaXMsIG9uRGF0YSwgb25FcnJvciwgb25Eb25lLCBjYW5jZWxPbkVycm9yLCBfY291bnQpOwogIH0KCiAgdm9pZCBfaGFuZGxlRGF0YShUIGlucHV0RXZlbnQsIF9FdmVudFNpbms8VD4gc2luaykgewogICAgX1N0YXRlU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbiA9IHNpbms7CiAgICBpbnQgY291bnQgPSBzdWJzY3JpcHRpb24uX2NvdW50OwogICAgaWYgKGNvdW50ID4gMCkgewogICAgICBzdWJzY3JpcHRpb24uX2NvdW50ID0gY291bnQgLSAxOwogICAgICByZXR1cm47CiAgICB9CiAgICBzaW5rLl9hZGQoaW5wdXRFdmVudCk7CiAgfQp9CgpjbGFzcyBfU2tpcFdoaWxlU3RyZWFtPFQ+IGV4dGVuZHMgX0ZvcndhcmRpbmdTdHJlYW08VCwgVD4gewogIGZpbmFsIF9QcmVkaWNhdGU8VD4gX3Rlc3Q7CgogIF9Ta2lwV2hpbGVTdHJlYW0oU3RyZWFtPFQ+IHNvdXJjZSwgYm9vbCB0ZXN0KFQgdmFsdWUpKQogICAgICA6IHRoaXMuX3Rlc3QgPSB0ZXN0LAogICAgICAgIHN1cGVyKHNvdXJjZSk7CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBfY3JlYXRlU3Vic2NyaXB0aW9uKHZvaWQgb25EYXRhKFQgZGF0YSksCiAgICAgIEZ1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcikgewogICAgcmV0dXJuIG5ldyBfU3RhdGVTdHJlYW1TdWJzY3JpcHRpb248VD4oCiAgICAgICAgdGhpcywgb25EYXRhLCBvbkVycm9yLCBvbkRvbmUsIGNhbmNlbE9uRXJyb3IsIGZhbHNlKTsKICB9CgogIHZvaWQgX2hhbmRsZURhdGEoVCBpbnB1dEV2ZW50LCBfRXZlbnRTaW5rPFQ+IHNpbmspIHsKICAgIF9TdGF0ZVN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24gPSBzaW5rOwogICAgYm9vbCBoYXNGYWlsZWQgPSBzdWJzY3JpcHRpb24uX2ZsYWc7CiAgICBpZiAoaGFzRmFpbGVkKSB7CiAgICAgIHNpbmsuX2FkZChpbnB1dEV2ZW50KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgYm9vbCBzYXRpc2ZpZXM7CiAgICB0cnkgewogICAgICBzYXRpc2ZpZXMgPSBfdGVzdChpbnB1dEV2ZW50KTsKICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgX2FkZEVycm9yV2l0aFJlcGxhY2VtZW50KHNpbmssIGUsIHMpOwogICAgICAvLyBBIGZhaWx1cmUgdG8gcmV0dXJuIGEgYm9vbGVhbiBpcyBjb25zaWRlcmVkICJub3QgbWF0Y2hpbmciLgogICAgICBzdWJzY3JpcHRpb24uX2ZsYWcgPSB0cnVlOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoIXNhdGlzZmllcykgewogICAgICBzdWJzY3JpcHRpb24uX2ZsYWcgPSB0cnVlOwogICAgICBzaW5rLl9hZGQoaW5wdXRFdmVudCk7CiAgICB9CiAgfQp9Cgp0eXBlZGVmIGJvb2wgX0VxdWFsaXR5PFQ+KFQgYSwgVCBiKTsKCmNsYXNzIF9EaXN0aW5jdFN0cmVhbTxUPiBleHRlbmRzIF9Gb3J3YXJkaW5nU3RyZWFtPFQsIFQ+IHsKICBzdGF0aWMgZmluYWwgX1NFTlRJTkVMID0gbmV3IE9iamVjdCgpOwoKICBmaW5hbCBfRXF1YWxpdHk8VD4gX2VxdWFsczsKCiAgX0Rpc3RpbmN0U3RyZWFtKFN0cmVhbTxUPiBzb3VyY2UsIGJvb2wgZXF1YWxzKFQgYSwgVCBiKSkKICAgICAgOiBfZXF1YWxzID0gZXF1YWxzLAogICAgICAgIHN1cGVyKHNvdXJjZSk7CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBfY3JlYXRlU3Vic2NyaXB0aW9uKHZvaWQgb25EYXRhKFQgZGF0YSksCiAgICAgIEZ1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcikgewogICAgcmV0dXJuIG5ldyBfU3RhdGVTdHJlYW1TdWJzY3JpcHRpb248VD4oCiAgICAgICAgdGhpcywgb25EYXRhLCBvbkVycm9yLCBvbkRvbmUsIGNhbmNlbE9uRXJyb3IsIF9TRU5USU5FTCk7CiAgfQoKICB2b2lkIF9oYW5kbGVEYXRhKFQgaW5wdXRFdmVudCwgX0V2ZW50U2luazxUPiBzaW5rKSB7CiAgICBfU3RhdGVTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uID0gc2luazsKICAgIHZhciBwcmV2aW91cyA9IHN1YnNjcmlwdGlvbi5fdmFsdWU7CiAgICBpZiAoaWRlbnRpY2FsKHByZXZpb3VzLCBfU0VOVElORUwpKSB7CiAgICAgIC8vIEZpcnN0IGV2ZW50LgogICAgICBzdWJzY3JpcHRpb24uX3ZhbHVlID0gaW5wdXRFdmVudDsKICAgICAgc2luay5fYWRkKGlucHV0RXZlbnQpOwogICAgfSBlbHNlIHsKICAgICAgVCBwcmV2aW91c0V2ZW50ID0gcHJldmlvdXM7CiAgICAgIGJvb2wgaXNFcXVhbDsKICAgICAgdHJ5IHsKICAgICAgICBpZiAoX2VxdWFscyA9PSBudWxsKSB7CiAgICAgICAgICBpc0VxdWFsID0gKHByZXZpb3VzRXZlbnQgPT0gaW5wdXRFdmVudCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlzRXF1YWwgPSBfZXF1YWxzKHByZXZpb3VzRXZlbnQsIGlucHV0RXZlbnQpOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgIF9hZGRFcnJvcldpdGhSZXBsYWNlbWVudChzaW5rLCBlLCBzKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKCFpc0VxdWFsKSB7CiAgICAgICAgc2luay5fYWRkKGlucHV0RXZlbnQpOwogICAgICAgIHN1YnNjcmlwdGlvbi5fdmFsdWUgPSBpbnB1dEV2ZW50OwogICAgICB9CiAgICB9CiAgfQp9CoH2AE5OPAEUAUkRTwgbEz8fFQ00LyIGBAIBUCZNHSxOTwsuBAIBRTRKHS4pBDwCATsBRic3Kj4FAgFQJU8sTj4LHQQCAQQ9A0NDIQMxBDsbASMBLwE1PzRIBAFBPTQ3BAFKATEfBAFIJwQBKRMEAgEETgQqLikBJwFDOzgkSgQBHFBQARYbFgQBOBsoBAEjARQnGwQBFSccBAEXITccJAYRBAE2AR0lBAE0MwQBFx8EAgFHQkcBJQFPSh0uKQQlAgE4HQE1FhcBNxQKJRUsDgYVHQYEAgEqAQRDBDkqATUlFwE3EwosFSwOBhwEAgEEQwQ8MQE/HxcBNwotGggVRyEsBgQCASABBDgbBD4dGgFLIxsXAU8ZGQwgFy4QCAYTDDwXIy0RMAoQCA0pBgQCATcUASsdGEAiMAQBQT0XJTUGLD8EATc1JRUdEiMYSR0XCAYEAgEEQQNKBFBKFAFQTj8BIh4ZBAEiHxoEASUiGgQCATwdATkbFwE3FAolFSxQFQ4GFR0NFQYEAgE3FAErHRhAIjAxBAFBPSw/BAE3NSUVJw4GGwQCATwdATkbFwFBPSw+BAE3NSkVHQ4GFAolFSxFIQ4GFiEdBgQCASUBOykBHgE7GhcBQT0sQgQBNzUoKhYoHQ0iFAwfMxE4ChcuEAgWHyoIBgQCARtkYXJ0OmFzeW5jL3N0cmVhbV9waXBlLmRhcnQ6b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2FzeW5jL3N0cmVhbV90cmFuc2Zvcm1lcnMuZGFydKY4Ly8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5hc3luYzsKCi8qKgogKiBXcmFwcyBhbiBbX0V2ZW50U2lua10gc28gaXQgZXhwb3NlcyBvbmx5IHRoZSBbRXZlbnRTaW5rXSBpbnRlcmZhY2UuCiAqLwpjbGFzcyBfRXZlbnRTaW5rV3JhcHBlcjxUPiBpbXBsZW1lbnRzIEV2ZW50U2luazxUPiB7CiAgX0V2ZW50U2luayBfc2luazsKICBfRXZlbnRTaW5rV3JhcHBlcih0aGlzLl9zaW5rKTsKCiAgdm9pZCBhZGQoVCBkYXRhKSB7CiAgICBfc2luay5fYWRkKGRhdGEpOwogIH0KCiAgdm9pZCBhZGRFcnJvcihlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIF9zaW5rLl9hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgX3NpbmsuX2Nsb3NlKCk7CiAgfQp9CgovKioKICogQSBTdHJlYW1TdWJzY3JpcHRpb24gdGhhdCBwaXBlcyBkYXRhIHRocm91Z2ggYSBzaW5rLgogKgogKiBUaGUgY29uc3RydWN0b3Igb2YgdGhpcyBjbGFzcyB0YWtlcyBhIFtfU2lua01hcHBlcl0gd2hpY2ggbWFwcyBmcm9tCiAqIFtFdmVudFNpbmtdIHRvIFtFdmVudFNpbmtdLiBUaGUgaW5wdXQgdG8gdGhlIG1hcHBlciBpcyB0aGUgb3V0cHV0IG9mCiAqIHRoZSB0cmFuc2Zvcm1hdGlvbi4gVGhlIHJldHVybmVkIHNpbmsgaXMgdGhlIHRyYW5zZm9ybWF0aW9uJ3MgaW5wdXQuCiAqLwpjbGFzcyBfU2lua1RyYW5zZm9ybWVyU3RyZWFtU3Vic2NyaXB0aW9uPFMsIFQ+CiAgICBleHRlbmRzIF9CdWZmZXJpbmdTdHJlYW1TdWJzY3JpcHRpb248VD4gewogIC8vLyBUaGUgdHJhbnNmb3JtZXIncyBpbnB1dCBzaW5rLgogIEV2ZW50U2luazxTPiBfdHJhbnNmb3JtZXJTaW5rOwoKICAvLy8gVGhlIHN1YnNjcmlwdGlvbiB0byB0aGUgaW5wdXQgc3RyZWFtLgogIFN0cmVhbVN1YnNjcmlwdGlvbjxTPiBfc3Vic2NyaXB0aW9uOwoKICBfU2lua1RyYW5zZm9ybWVyU3RyZWFtU3Vic2NyaXB0aW9uKFN0cmVhbTxTPiBzb3VyY2UsIF9TaW5rTWFwcGVyPFMsIFQ+IG1hcHBlciwKICAgICAgdm9pZCBvbkRhdGEoVCBkYXRhKSwgRnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yKQogICAgICAvLyBXZSBzZXQgdGhlIGFkYXB0ZXIncyB0YXJnZXQgb25seSB3aGVuIHRoZSB1c2VyIGlzIGFsbG93ZWQgdG8gc2VuZCBkYXRhLgogICAgICA6IHN1cGVyKG9uRGF0YSwgb25FcnJvciwgb25Eb25lLCBjYW5jZWxPbkVycm9yKSB7CiAgICBfRXZlbnRTaW5rV3JhcHBlcjxUPiBldmVudFNpbmsgPSBuZXcgX0V2ZW50U2lua1dyYXBwZXI8VD4odGhpcyk7CiAgICBfdHJhbnNmb3JtZXJTaW5rID0gbWFwcGVyKGV2ZW50U2luayk7CiAgICBfc3Vic2NyaXB0aW9uID0KICAgICAgICBzb3VyY2UubGlzdGVuKF9oYW5kbGVEYXRhLCBvbkVycm9yOiBfaGFuZGxlRXJyb3IsIG9uRG9uZTogX2hhbmRsZURvbmUpOwogIH0KCiAgLyoqIFdoZXRoZXIgdGhpcyBzdWJzY3JpcHRpb24gaXMgc3RpbGwgc3Vic2NyaWJlZCB0byBpdHMgc291cmNlLiAqLwogIGJvb2wgZ2V0IF9pc1N1YnNjcmliZWQgPT4gX3N1YnNjcmlwdGlvbiAhPSBudWxsOwoKICAvLyBfRXZlbnRTaW5rIGludGVyZmFjZS4KCiAgLyoqCiAgICogQWRkcyBhbiBldmVudCB0byB0aGlzIHN1YnNjcmlwdGlvbnMuCiAgICoKICAgKiBDb250cmFyeSB0byBub3JtYWwgW19CdWZmZXJpbmdTdHJlYW1TdWJzY3JpcHRpb25dcyB3ZSBtYXkgcmVjZWl2ZQogICAqIGV2ZW50cyB3aGVuIHRoZSBzdHJlYW0gaXMgYWxyZWFkeSBjbG9zZWQuIFJlcG9ydCB0aGVtIGFzIHN0YXRlCiAgICogZXJyb3IuCiAgICovCiAgdm9pZCBfYWRkKFQgZGF0YSkgewogICAgaWYgKF9pc0Nsb3NlZCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiU3RyZWFtIGlzIGFscmVhZHkgY2xvc2VkIik7CiAgICB9CiAgICBzdXBlci5fYWRkKGRhdGEpOwogIH0KCiAgLyoqCiAgICogQWRkcyBhbiBlcnJvciBldmVudCB0byB0aGlzIHN1YnNjcmlwdGlvbnMuCiAgICoKICAgKiBDb250cmFyeSB0byBub3JtYWwgW19CdWZmZXJpbmdTdHJlYW1TdWJzY3JpcHRpb25dcyB3ZSBtYXkgcmVjZWl2ZQogICAqIGV2ZW50cyB3aGVuIHRoZSBzdHJlYW0gaXMgYWxyZWFkeSBjbG9zZWQuIFJlcG9ydCB0aGVtIGFzIHN0YXRlCiAgICogZXJyb3IuCiAgICovCiAgdm9pZCBfYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIGlmIChfaXNDbG9zZWQpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIlN0cmVhbSBpcyBhbHJlYWR5IGNsb3NlZCIpOwogICAgfQogICAgc3VwZXIuX2FkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIC8qKgogICAqIEFkZHMgYSBjbG9zZSBldmVudCB0byB0aGlzIHN1YnNjcmlwdGlvbnMuCiAgICoKICAgKiBDb250cmFyeSB0byBub3JtYWwgW19CdWZmZXJpbmdTdHJlYW1TdWJzY3JpcHRpb25dcyB3ZSBtYXkgcmVjZWl2ZQogICAqIGV2ZW50cyB3aGVuIHRoZSBzdHJlYW0gaXMgYWxyZWFkeSBjbG9zZWQuIFJlcG9ydCB0aGVtIGFzIHN0YXRlCiAgICogZXJyb3IuCiAgICovCiAgdm9pZCBfY2xvc2UoKSB7CiAgICBpZiAoX2lzQ2xvc2VkKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJTdHJlYW0gaXMgYWxyZWFkeSBjbG9zZWQiKTsKICAgIH0KICAgIHN1cGVyLl9jbG9zZSgpOwogIH0KCiAgLy8gX0J1ZmZlcmluZ1N0cmVhbVN1YnNjcmlwdGlvbiBob29rcy4KCiAgdm9pZCBfb25QYXVzZSgpIHsKICAgIGlmIChfaXNTdWJzY3JpYmVkKSBfc3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgfQoKICB2b2lkIF9vblJlc3VtZSgpIHsKICAgIGlmIChfaXNTdWJzY3JpYmVkKSBfc3Vic2NyaXB0aW9uLnJlc3VtZSgpOwogIH0KCiAgRnV0dXJlIF9vbkNhbmNlbCgpIHsKICAgIGlmIChfaXNTdWJzY3JpYmVkKSB7CiAgICAgIFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb24gPSBfc3Vic2NyaXB0aW9uOwogICAgICBfc3Vic2NyaXB0aW9uID0gbnVsbDsKICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCBfaGFuZGxlRGF0YShTIGRhdGEpIHsKICAgIHRyeSB7CiAgICAgIF90cmFuc2Zvcm1lclNpbmsuYWRkKGRhdGEpOwogICAgfSBjYXRjaCAoZSwgcykgewogICAgICBfYWRkRXJyb3IoZSwgcyk7CiAgICB9CiAgfQoKICB2b2lkIF9oYW5kbGVFcnJvcihlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIHRyeSB7CiAgICAgIF90cmFuc2Zvcm1lclNpbmsuYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgfSBjYXRjaCAoZSwgcykgewogICAgICBpZiAoaWRlbnRpY2FsKGUsIGVycm9yKSkgewogICAgICAgIF9hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2FkZEVycm9yKGUsIHMpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIF9oYW5kbGVEb25lKCkgewogICAgdHJ5IHsKICAgICAgX3N1YnNjcmlwdGlvbiA9IG51bGw7CiAgICAgIF90cmFuc2Zvcm1lclNpbmsuY2xvc2UoKTsKICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgX2FkZEVycm9yKGUsIHMpOwogICAgfQogIH0KfQoKdHlwZWRlZiBFdmVudFNpbms8Uz4gX1NpbmtNYXBwZXI8UywgVD4oRXZlbnRTaW5rPFQ+IG91dHB1dCk7CgovKioKICogQSBTdHJlYW1UcmFuc2Zvcm1lciBmb3IgU2luay1tYXBwZXJzLgogKgogKiBBIFNpbmstbWFwcGVyIHRha2VzIGFuIFtFdmVudFNpbmtdIChpdHMgb3V0cHV0KSBhbmQgcmV0dXJucyBhbm90aGVyCiAqIEV2ZW50U2luayAoaXRzIGlucHV0KS4KICoKICogTm90ZSB0aGF0IHRoaXMgY2xhc3MgY2FuIGJlIGBjb25zdGAuCiAqLwpjbGFzcyBfU3RyZWFtU2lua1RyYW5zZm9ybWVyPFMsIFQ+IGV4dGVuZHMgU3RyZWFtVHJhbnNmb3JtZXJCYXNlPFMsIFQ+IHsKICBmaW5hbCBfU2lua01hcHBlcjxTLCBUPiBfc2lua01hcHBlcjsKICBjb25zdCBfU3RyZWFtU2lua1RyYW5zZm9ybWVyKHRoaXMuX3NpbmtNYXBwZXIpOwoKICBTdHJlYW08VD4gYmluZChTdHJlYW08Uz4gc3RyZWFtKSA9PgogICAgICBuZXcgX0JvdW5kU2lua1N0cmVhbTxTLCBUPihzdHJlYW0sIF9zaW5rTWFwcGVyKTsKfQoKLyoqCiAqIFRoZSByZXN1bHQgb2YgYmluZGluZyBhIFN0cmVhbVRyYW5zZm9ybWVyIGZvciBTaW5rLW1hcHBlcnMuCiAqCiAqIEl0IGNvbnRhaW5zIHRoZSBib3VuZCBTdHJlYW0gYW5kIHRoZSBzaW5rLW1hcHBlci4gT25seSB3aGVuIHRoZSB1c2VyIHN0YXJ0cwogKiBsaXN0ZW5pbmcgdG8gdGhpcyBzdHJlYW0gaXMgdGhlIHNpbmstbWFwcGVyIGludm9rZWQuIFRoZSByZXN1bHQgaXMgdXNlZAogKiB0byBjcmVhdGUgYSBTdHJlYW1TdWJzY3JpcHRpb24gdGhhdCB0cmFuc2Zvcm1zIGV2ZW50cy4KICovCmNsYXNzIF9Cb3VuZFNpbmtTdHJlYW08UywgVD4gZXh0ZW5kcyBTdHJlYW08VD4gewogIGZpbmFsIF9TaW5rTWFwcGVyPFMsIFQ+IF9zaW5rTWFwcGVyOwogIGZpbmFsIFN0cmVhbTxTPiBfc3RyZWFtOwoKICBib29sIGdldCBpc0Jyb2FkY2FzdCA9PiBfc3RyZWFtLmlzQnJvYWRjYXN0OwoKICBfQm91bmRTaW5rU3RyZWFtKHRoaXMuX3N0cmVhbSwgdGhpcy5fc2lua01hcHBlcik7CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBsaXN0ZW4odm9pZCBvbkRhdGEoVCBldmVudCksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICBjYW5jZWxPbkVycm9yID0gaWRlbnRpY2FsKHRydWUsIGNhbmNlbE9uRXJyb3IpOwogICAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbiA9CiAgICAgICAgbmV3IF9TaW5rVHJhbnNmb3JtZXJTdHJlYW1TdWJzY3JpcHRpb248UywgVD4oCiAgICAgICAgICAgIF9zdHJlYW0sIF9zaW5rTWFwcGVyLCBvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvcik7CiAgICByZXR1cm4gc3Vic2NyaXB0aW9uOwogIH0KfQoKLy8vIERhdGEtaGFuZGxlciBjb21pbmcgZnJvbSBbU3RyZWFtVHJhbnNmb3JtZXIuZnJvbUhhbmRsZXJzXS4KdHlwZWRlZiB2b2lkIF9UcmFuc2Zvcm1EYXRhSGFuZGxlcjxTLCBUPihTIGRhdGEsIEV2ZW50U2luazxUPiBzaW5rKTsKCi8vLyBFcnJvci1oYW5kbGVyIGNvbWluZyBmcm9tIFtTdHJlYW1UcmFuc2Zvcm1lci5mcm9tSGFuZGxlcnNdLgp0eXBlZGVmIHZvaWQgX1RyYW5zZm9ybUVycm9ySGFuZGxlcjxUPigKICAgIE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlLCBFdmVudFNpbms8VD4gc2luayk7CgovLy8gRG9uZS1oYW5kbGVyIGNvbWluZyBmcm9tIFtTdHJlYW1UcmFuc2Zvcm1lci5mcm9tSGFuZGxlcnNdLgp0eXBlZGVmIHZvaWQgX1RyYW5zZm9ybURvbmVIYW5kbGVyPFQ+KEV2ZW50U2luazxUPiBzaW5rKTsKCi8qKgogKiBXcmFwcyBoYW5kbGVycyAoZnJvbSBbU3RyZWFtVHJhbnNmb3JtZXIuZnJvbUhhbmRsZXJzXSkgaW50byBhbiBgRXZlbnRTaW5rYC4KICoKICogVGhpcyB3YXkgd2UgY2FuIHJldXNlIHRoZSBjb2RlIGZyb20gW19TdHJlYW1TaW5rVHJhbnNmb3JtZXJdLgogKi8KY2xhc3MgX0hhbmRsZXJFdmVudFNpbms8UywgVD4gaW1wbGVtZW50cyBFdmVudFNpbms8Uz4gewogIGZpbmFsIF9UcmFuc2Zvcm1EYXRhSGFuZGxlcjxTLCBUPiBfaGFuZGxlRGF0YTsKICBmaW5hbCBfVHJhbnNmb3JtRXJyb3JIYW5kbGVyPFQ+IF9oYW5kbGVFcnJvcjsKICBmaW5hbCBfVHJhbnNmb3JtRG9uZUhhbmRsZXI8VD4gX2hhbmRsZURvbmU7CgogIC8vLyBUaGUgb3V0cHV0IHNpbmsgd2hlcmUgdGhlIGhhbmRsZXJzIHNob3VsZCBzZW5kIHRoZWlyIGRhdGEgaW50by4KICBFdmVudFNpbms8VD4gX3Npbms7CgogIF9IYW5kbGVyRXZlbnRTaW5rKAogICAgICB0aGlzLl9oYW5kbGVEYXRhLCB0aGlzLl9oYW5kbGVFcnJvciwgdGhpcy5faGFuZGxlRG9uZSwgdGhpcy5fc2luaykgewogICAgaWYgKF9zaW5rID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIlRoZSBwcm92aWRlZCBzaW5rIG11c3Qgbm90IGJlIG51bGwuIik7CiAgICB9CiAgfQoKICBib29sIGdldCBfaXNDbG9zZWQgPT4gX3NpbmsgPT0gbnVsbDsKCiAgdm9pZCBhZGQoUyBkYXRhKSB7CiAgICBpZiAoX2lzQ2xvc2VkKSB7CiAgICAgIHRocm93IFN0YXRlRXJyb3IoIlNpbmsgaXMgY2xvc2VkIik7CiAgICB9CiAgICBpZiAoX2hhbmRsZURhdGEgIT0gbnVsbCkgewogICAgICBfaGFuZGxlRGF0YShkYXRhLCBfc2luayk7CiAgICB9IGVsc2UgewogICAgICBfc2luay5hZGQoZGF0YSBhcyBUKTsKICAgIH0KICB9CgogIHZvaWQgYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgaWYgKF9pc0Nsb3NlZCkgewogICAgICB0aHJvdyBTdGF0ZUVycm9yKCJTaW5rIGlzIGNsb3NlZCIpOwogICAgfQogICAgaWYgKF9oYW5kbGVFcnJvciAhPSBudWxsKSB7CiAgICAgIF9oYW5kbGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSwgX3NpbmspOwogICAgfSBlbHNlIHsKICAgICAgX3NpbmsuYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgfQogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIGlmIChfaXNDbG9zZWQpIHJldHVybjsKICAgIHZhciBzaW5rID0gX3Npbms7CiAgICBfc2luayA9IG51bGw7CiAgICBpZiAoX2hhbmRsZURvbmUgIT0gbnVsbCkgewogICAgICBfaGFuZGxlRG9uZShzaW5rKTsKICAgIH0gZWxzZSB7CiAgICAgIHNpbmsuY2xvc2UoKTsKICAgIH0KICB9Cn0KCi8qKgogKiBBIFN0cmVhbVRyYW5zZm9ybWVyIHRoYXQgdHJhbnNmb3JtZXJzIGV2ZW50cyB3aXRoIHRoZSBnaXZlbiBoYW5kbGVycy4KICoKICogTm90ZSB0aGF0IHRoaXMgdHJhbnNmb3JtZXIgY2FuIG9ubHkgYmUgdXNlZCBvbmNlLgogKi8KY2xhc3MgX1N0cmVhbUhhbmRsZXJUcmFuc2Zvcm1lcjxTLCBUPiBleHRlbmRzIF9TdHJlYW1TaW5rVHJhbnNmb3JtZXI8UywgVD4gewogIF9TdHJlYW1IYW5kbGVyVHJhbnNmb3JtZXIoCiAgICAgIHt2b2lkIGhhbmRsZURhdGEoUyBkYXRhLCBFdmVudFNpbms8VD4gc2luayksCiAgICAgIHZvaWQgaGFuZGxlRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UsIEV2ZW50U2luazxUPiBzaW5rKSwKICAgICAgdm9pZCBoYW5kbGVEb25lKEV2ZW50U2luazxUPiBzaW5rKX0pCiAgICAgIDogc3VwZXIoKEV2ZW50U2luazxUPiBvdXRwdXRTaW5rKSB7CiAgICAgICAgICByZXR1cm4gbmV3IF9IYW5kbGVyRXZlbnRTaW5rPFMsIFQ+KAogICAgICAgICAgICAgIGhhbmRsZURhdGEsIGhhbmRsZUVycm9yLCBoYW5kbGVEb25lLCBvdXRwdXRTaW5rKTsKICAgICAgICB9KTsKCiAgU3RyZWFtPFQ+IGJpbmQoU3RyZWFtPFM+IHN0cmVhbSkgewogICAgcmV0dXJuIHN1cGVyLmJpbmQoc3RyZWFtKTsKICB9Cn0KCi8qKgogKiBBIFN0cmVhbVRyYW5zZm9ybWVyIHRoYXQgb3ZlcnJpZGVzIFtTdHJlYW1UcmFuc2Zvcm1lci5iaW5kXSB3aXRoIGEgY2FsbGJhY2suCiAqLwpjbGFzcyBfU3RyZWFtQmluZFRyYW5zZm9ybWVyPFMsIFQ+IGV4dGVuZHMgU3RyZWFtVHJhbnNmb3JtZXJCYXNlPFMsIFQ+IHsKICBmaW5hbCBTdHJlYW08VD4gRnVuY3Rpb24oU3RyZWFtPFM+KSBfYmluZDsKICBfU3RyZWFtQmluZFRyYW5zZm9ybWVyKHRoaXMuX2JpbmQpOwoKICBTdHJlYW08VD4gYmluZChTdHJlYW08Uz4gc3RyZWFtKSA9PiBfYmluZChzdHJlYW0pOwp9CgovLy8gQSBjbG9zdXJlIG1hcHBpbmcgYSBzdHJlYW0gYW5kIGNhbmNlbE9uRXJyb3IgdG8gYSBTdHJlYW1TdWJzY3JpcHRpb24uCnR5cGVkZWYgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IF9TdWJzY3JpcHRpb25UcmFuc2Zvcm1lcjxTLCBUPigKICAgIFN0cmVhbTxTPiBzdHJlYW0sIGJvb2wgY2FuY2VsT25FcnJvcik7CgovKioKICogQSBbU3RyZWFtVHJhbnNmb3JtZXJdIHRoYXQgbWluaW1pemVzIHRoZSBudW1iZXIgb2YgYWRkaXRpb25hbCBjbGFzc2VzLgogKgogKiBJbnN0ZWFkIG9mIGltcGxlbWVudGluZyB0aHJlZSBjbGFzc2VzOiBhIFtTdHJlYW1UcmFuc2Zvcm1lcl0sIGEgW1N0cmVhbV0KICogKGFzIHRoZSByZXN1bHQgb2YgYSBgYmluZGAgY2FsbCkgYW5kIGEgW1N0cmVhbVN1YnNjcmlwdGlvbl0gKHdoaWNoIGRvZXMgdGhlCiAqIGFjdHVhbCB3b3JrKSwgdGhpcyBjbGFzcyBvbmx5IHJlcXVpcmVzIGEgZnVuY3Rpb24gdGhhdCBpcyBpbnZva2VkIHdoZW4gdGhlCiAqIGxhc3QgYml0ICh0aGUgc3Vic2NyaXB0aW9uKSBvZiB0aGUgdHJhbnNmb3JtZXItd29ya2Zsb3cgaXMgbmVlZGVkLgogKgogKiBUaGUgZ2l2ZW4gdHJhbnNmb3JtZXIgZnVuY3Rpb24gbWFwcyBmcm9tIFN0cmVhbSBhbmQgY2FuY2VsT25FcnJvciB0byBhCiAqIGBTdHJlYW1TdWJzY3JpcHRpb25gLiBBcyBzdWNoIGl0IGNhbiBhbHNvIGFjdCBvbiBgY2FuY2VsYCBldmVudHMsIG1ha2luZyBpdAogKiBmdWxseSBnZW5lcmFsLgogKi8KY2xhc3MgX1N0cmVhbVN1YnNjcmlwdGlvblRyYW5zZm9ybWVyPFMsIFQ+IGV4dGVuZHMgU3RyZWFtVHJhbnNmb3JtZXJCYXNlPFMsIFQ+IHsKICBmaW5hbCBfU3Vic2NyaXB0aW9uVHJhbnNmb3JtZXI8UywgVD4gX29uTGlzdGVuOwoKICBjb25zdCBfU3RyZWFtU3Vic2NyaXB0aW9uVHJhbnNmb3JtZXIodGhpcy5fb25MaXN0ZW4pOwoKICBTdHJlYW08VD4gYmluZChTdHJlYW08Uz4gc3RyZWFtKSA9PgogICAgICBuZXcgX0JvdW5kU3Vic2NyaXB0aW9uU3RyZWFtPFMsIFQ+KHN0cmVhbSwgX29uTGlzdGVuKTsKfQoKLyoqCiAqIEEgc3RyZWFtIHRyYW5zZm9ybWVkIGJ5IGEgW19TdHJlYW1TdWJzY3JpcHRpb25UcmFuc2Zvcm1lcl0uCiAqCiAqIFdoZW4gdGhpcyBzdHJlYW0gaXMgbGlzdGVuZWQgdG8gaXQgaW52b2tlcyB0aGUgW19vbkxpc3Rlbl0gZnVuY3Rpb24gd2l0aAogKiB0aGUgc3RvcmVkIFtfc3RyZWFtXS4gVXN1YWxseSB0aGUgdHJhbnNmb3JtZXIgc3RhcnRzIGxpc3RlbmluZyBhdCB0aGlzCiAqIG1vbWVudC4KICovCmNsYXNzIF9Cb3VuZFN1YnNjcmlwdGlvblN0cmVhbTxTLCBUPiBleHRlbmRzIFN0cmVhbTxUPiB7CiAgZmluYWwgX1N1YnNjcmlwdGlvblRyYW5zZm9ybWVyPFMsIFQ+IF9vbkxpc3RlbjsKICBmaW5hbCBTdHJlYW08Uz4gX3N0cmVhbTsKCiAgYm9vbCBnZXQgaXNCcm9hZGNhc3QgPT4gX3N0cmVhbS5pc0Jyb2FkY2FzdDsKCiAgX0JvdW5kU3Vic2NyaXB0aW9uU3RyZWFtKHRoaXMuX3N0cmVhbSwgdGhpcy5fb25MaXN0ZW4pOwoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gbGlzdGVuKHZvaWQgb25EYXRhKFQgZXZlbnQpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgY2FuY2VsT25FcnJvciA9IGlkZW50aWNhbCh0cnVlLCBjYW5jZWxPbkVycm9yKTsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiByZXN1bHQgPSBfb25MaXN0ZW4oX3N0cmVhbSwgY2FuY2VsT25FcnJvcik7CiAgICByZXN1bHQub25EYXRhKG9uRGF0YSk7CiAgICByZXN1bHQub25FcnJvcihvbkVycm9yKTsKICAgIHJlc3VsdC5vbkRvbmUob25Eb25lKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CoFSAE5OPAEUAQRHBDUUIQEVFgQBMigEAREUBAIBBDgDR0hIBC8uJCEBLCcBUVBROEUqFFAEAUYzARsBBioFR0QMBhYVOAYWBAEGMAVHRAwGOBU4BigEAQYvBUdEDAYSFTgGFAQBKQEULgQBFS8EARcZNxwkBhEEAR0KIhUXBgQBNgo0FSEmDxkIBgQBFwocIBUXBgQCAT0BBCkDRxoDKARJJzIBJjcCAQQ/A09LOgQxJxsBLwE0ATU/NCk2SxkEAgE/RQFAKD0BPzoBBE8DQQQ4MTAuAUYWARVLGUYGBAEnARUVKgYfIA0cBgQBORUqBiAuDSkGBAERGxYSHxkNFAYEAgEESQM1BE0dM1ArKi5ADAElHwQCAQRQBEktJgE1AgFKPisBBEoDTE9ORgNKTxIEUTIBOAEmPQIBBD8DTEoLBDkyGwEvAToBNT80RhsdGxMEAgEjZGFydDphc3luYy9zdHJlYW1fdHJhbnNmb3JtZXJzLmRhcnQrb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2FzeW5jL3pvbmUuZGFydMAA1p4vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmFzeW5jOwoKdHlwZWRlZiBSIFpvbmVDYWxsYmFjazxSPigpOwp0eXBlZGVmIFIgWm9uZVVuYXJ5Q2FsbGJhY2s8UiwgVD4oVCBhcmcpOwp0eXBlZGVmIFIgWm9uZUJpbmFyeUNhbGxiYWNrPFIsIFQxLCBUMj4oVDEgYXJnMSwgVDIgYXJnMik7Cgp0eXBlZGVmIEhhbmRsZVVuY2F1Z2h0RXJyb3JIYW5kbGVyID0gdm9pZCBGdW5jdGlvbihab25lIHNlbGYsCiAgICBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsIE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKTsKdHlwZWRlZiBSdW5IYW5kbGVyID0gUiBGdW5jdGlvbjxSPigKICAgIFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCBSIEZ1bmN0aW9uKCkgZik7CnR5cGVkZWYgUnVuVW5hcnlIYW5kbGVyID0gUiBGdW5jdGlvbjxSLCBUPigKICAgIFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCBSIEZ1bmN0aW9uKFQgYXJnKSBmLCBUIGFyZyk7CnR5cGVkZWYgUnVuQmluYXJ5SGFuZGxlciA9IFIgRnVuY3Rpb248UiwgVDEsIFQyPihab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsCiAgICBab25lIHpvbmUsIFIgRnVuY3Rpb24oVDEgYXJnMSwgVDIgYXJnMikgZiwgVDEgYXJnMSwgVDIgYXJnMik7CnR5cGVkZWYgUmVnaXN0ZXJDYWxsYmFja0hhbmRsZXIgPSBab25lQ2FsbGJhY2s8Uj4gRnVuY3Rpb248Uj4oCiAgICBab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgUiBGdW5jdGlvbigpIGYpOwp0eXBlZGVmIFJlZ2lzdGVyVW5hcnlDYWxsYmFja0hhbmRsZXIgPSBab25lVW5hcnlDYWxsYmFjazxSLCBUPiBGdW5jdGlvbjxSLCBUPigKICAgIFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCBSIEZ1bmN0aW9uKFQgYXJnKSBmKTsKdHlwZWRlZiBSZWdpc3RlckJpbmFyeUNhbGxiYWNrSGFuZGxlcgogICAgPSBab25lQmluYXJ5Q2FsbGJhY2s8UiwgVDEsIFQyPiBGdW5jdGlvbjxSLCBUMSwgVDI+KFpvbmUgc2VsZiwKICAgICAgICBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsIFIgRnVuY3Rpb24oVDEgYXJnMSwgVDIgYXJnMikgZik7CnR5cGVkZWYgQXN5bmNFcnJvciBFcnJvckNhbGxiYWNrSGFuZGxlcihab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsCiAgICBab25lIHpvbmUsIE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKTsKdHlwZWRlZiB2b2lkIFNjaGVkdWxlTWljcm90YXNrSGFuZGxlcigKICAgIFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCB2b2lkIGYoKSk7CnR5cGVkZWYgVGltZXIgQ3JlYXRlVGltZXJIYW5kbGVyKAogICAgWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsIER1cmF0aW9uIGR1cmF0aW9uLCB2b2lkIGYoKSk7CnR5cGVkZWYgVGltZXIgQ3JlYXRlUGVyaW9kaWNUaW1lckhhbmRsZXIoWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LAogICAgWm9uZSB6b25lLCBEdXJhdGlvbiBwZXJpb2QsIHZvaWQgZihUaW1lciB0aW1lcikpOwp0eXBlZGVmIHZvaWQgUHJpbnRIYW5kbGVyKAogICAgWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsIFN0cmluZyBsaW5lKTsKdHlwZWRlZiBab25lIEZvcmtIYW5kbGVyKFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLAogICAgWm9uZVNwZWNpZmljYXRpb24gc3BlY2lmaWNhdGlvbiwgTWFwIHpvbmVWYWx1ZXMpOwoKLyoqIFBhaXIgb2YgZXJyb3IgYW5kIHN0YWNrIHRyYWNlLiBSZXR1cm5lZCBieSBbWm9uZS5lcnJvckNhbGxiYWNrXS4gKi8KY2xhc3MgQXN5bmNFcnJvciBpbXBsZW1lbnRzIEVycm9yIHsKICBmaW5hbCBPYmplY3QgZXJyb3I7CiAgZmluYWwgU3RhY2tUcmFjZSBzdGFja1RyYWNlOwoKICBBc3luY0Vycm9yKHRoaXMuZXJyb3IsIHRoaXMuc3RhY2tUcmFjZSk7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICckZXJyb3InOwp9CgpjbGFzcyBfWm9uZUZ1bmN0aW9uPFQgZXh0ZW5kcyBGdW5jdGlvbj4gewogIGZpbmFsIF9ab25lIHpvbmU7CiAgZmluYWwgVCBmdW5jdGlvbjsKICBjb25zdCBfWm9uZUZ1bmN0aW9uKHRoaXMuem9uZSwgdGhpcy5mdW5jdGlvbik7Cn0KCi8qKgogKiBUaGlzIGNsYXNzIHByb3ZpZGVzIHRoZSBzcGVjaWZpY2F0aW9uIGZvciBhIGZvcmtlZCB6b25lLgogKgogKiBXaGVuIGZvcmtpbmcgYSBuZXcgem9uZSAoc2VlIFtab25lLmZvcmtdKSBvbmUgY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0CiAqIGJlaGF2aW9yIG9mIHRoZSB6b25lIGJ5IHByb3ZpZGluZyBjYWxsYmFja3MuIFRoZXNlIGNhbGxiYWNrcyBtdXN0IGJlCiAqIGdpdmVuIGluIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuCiAqCiAqIEhhbmRsZXJzIGhhdmUgdGhlIHNhbWUgc2lnbmF0dXJlIGFzIHRoZSBzYW1lLW5hbWVkIG1ldGhvZHMgb24gW1pvbmVdIGJ1dAogKiByZWNlaXZlIHRocmVlIGFkZGl0aW9uYWwgYXJndW1lbnRzOgogKgogKiAgIDEuIHRoZSB6b25lIHRoZSBoYW5kbGVycyBhcmUgYXR0YWNoZWQgdG8gKHRoZSAic2VsZiIgem9uZSkuCiAqICAgMi4gYSBbWm9uZURlbGVnYXRlXSB0byB0aGUgcGFyZW50IHpvbmUuCiAqICAgMy4gdGhlIHpvbmUgdGhhdCBmaXJzdCByZWNlaXZlZCB0aGUgcmVxdWVzdCAoYmVmb3JlIHRoZSByZXF1ZXN0IHdhcwogKiAgICAgYnViYmxlZCB1cCkuCiAqCiAqIEhhbmRsZXJzIGNhbiBlaXRoZXIgc3RvcCBwcm9wYWdhdGlvbiB0aGUgcmVxdWVzdCAoYnkgc2ltcGx5IG5vdCBjYWxsaW5nIHRoZQogKiBwYXJlbnQgaGFuZGxlciksIG9yIGZvcndhcmQgdG8gdGhlIHBhcmVudCB6b25lLCBwb3RlbnRpYWxseSBtb2RpZnlpbmcgdGhlCiAqIGFyZ3VtZW50cyBvbiB0aGUgd2F5LgogKi8KYWJzdHJhY3QgY2xhc3MgWm9uZVNwZWNpZmljYXRpb24gewogIC8qKgogICAqIENyZWF0ZXMgYSBzcGVjaWZpY2F0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGhhbmRsZXJzLgogICAqLwogIGNvbnN0IGZhY3RvcnkgWm9uZVNwZWNpZmljYXRpb24oCiAgICAgIHtIYW5kbGVVbmNhdWdodEVycm9ySGFuZGxlciBoYW5kbGVVbmNhdWdodEVycm9yLAogICAgICBSdW5IYW5kbGVyIHJ1biwKICAgICAgUnVuVW5hcnlIYW5kbGVyIHJ1blVuYXJ5LAogICAgICBSdW5CaW5hcnlIYW5kbGVyIHJ1bkJpbmFyeSwKICAgICAgUmVnaXN0ZXJDYWxsYmFja0hhbmRsZXIgcmVnaXN0ZXJDYWxsYmFjaywKICAgICAgUmVnaXN0ZXJVbmFyeUNhbGxiYWNrSGFuZGxlciByZWdpc3RlclVuYXJ5Q2FsbGJhY2ssCiAgICAgIFJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2tIYW5kbGVyIHJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2ssCiAgICAgIEVycm9yQ2FsbGJhY2tIYW5kbGVyIGVycm9yQ2FsbGJhY2ssCiAgICAgIFNjaGVkdWxlTWljcm90YXNrSGFuZGxlciBzY2hlZHVsZU1pY3JvdGFzaywKICAgICAgQ3JlYXRlVGltZXJIYW5kbGVyIGNyZWF0ZVRpbWVyLAogICAgICBDcmVhdGVQZXJpb2RpY1RpbWVySGFuZGxlciBjcmVhdGVQZXJpb2RpY1RpbWVyLAogICAgICBQcmludEhhbmRsZXIgcHJpbnQsCiAgICAgIEZvcmtIYW5kbGVyIGZvcmt9KSA9IF9ab25lU3BlY2lmaWNhdGlvbjsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIHNwZWNpZmljYXRpb24gZnJvbSBbb3RoZXJdIHdpdGggdGhlIHByb3ZpZGVkIGhhbmRsZXJzIG92ZXJyaWRpbmcKICAgKiB0aGUgb25lcyBpbiBbb3RoZXJdLgogICAqLwogIGZhY3RvcnkgWm9uZVNwZWNpZmljYXRpb24uZnJvbShab25lU3BlY2lmaWNhdGlvbiBvdGhlciwKICAgICAge0hhbmRsZVVuY2F1Z2h0RXJyb3JIYW5kbGVyIGhhbmRsZVVuY2F1Z2h0RXJyb3IsCiAgICAgIFJ1bkhhbmRsZXIgcnVuLAogICAgICBSdW5VbmFyeUhhbmRsZXIgcnVuVW5hcnksCiAgICAgIFJ1bkJpbmFyeUhhbmRsZXIgcnVuQmluYXJ5LAogICAgICBSZWdpc3RlckNhbGxiYWNrSGFuZGxlciByZWdpc3RlckNhbGxiYWNrLAogICAgICBSZWdpc3RlclVuYXJ5Q2FsbGJhY2tIYW5kbGVyIHJlZ2lzdGVyVW5hcnlDYWxsYmFjaywKICAgICAgUmVnaXN0ZXJCaW5hcnlDYWxsYmFja0hhbmRsZXIgcmVnaXN0ZXJCaW5hcnlDYWxsYmFjaywKICAgICAgRXJyb3JDYWxsYmFja0hhbmRsZXIgZXJyb3JDYWxsYmFjaywKICAgICAgU2NoZWR1bGVNaWNyb3Rhc2tIYW5kbGVyIHNjaGVkdWxlTWljcm90YXNrLAogICAgICBDcmVhdGVUaW1lckhhbmRsZXIgY3JlYXRlVGltZXIsCiAgICAgIENyZWF0ZVBlcmlvZGljVGltZXJIYW5kbGVyIGNyZWF0ZVBlcmlvZGljVGltZXIsCiAgICAgIFByaW50SGFuZGxlciBwcmludCwKICAgICAgRm9ya0hhbmRsZXIgZm9ya30pIHsKICAgIHJldHVybiBuZXcgWm9uZVNwZWNpZmljYXRpb24oCiAgICAgICAgaGFuZGxlVW5jYXVnaHRFcnJvcjogaGFuZGxlVW5jYXVnaHRFcnJvciA/PyBvdGhlci5oYW5kbGVVbmNhdWdodEVycm9yLAogICAgICAgIHJ1bjogcnVuID8/IG90aGVyLnJ1biwKICAgICAgICBydW5VbmFyeTogcnVuVW5hcnkgPz8gb3RoZXIucnVuVW5hcnksCiAgICAgICAgcnVuQmluYXJ5OiBydW5CaW5hcnkgPz8gb3RoZXIucnVuQmluYXJ5LAogICAgICAgIHJlZ2lzdGVyQ2FsbGJhY2s6IHJlZ2lzdGVyQ2FsbGJhY2sgPz8gb3RoZXIucmVnaXN0ZXJDYWxsYmFjaywKICAgICAgICByZWdpc3RlclVuYXJ5Q2FsbGJhY2s6CiAgICAgICAgICAgIHJlZ2lzdGVyVW5hcnlDYWxsYmFjayA/PyBvdGhlci5yZWdpc3RlclVuYXJ5Q2FsbGJhY2ssCiAgICAgICAgcmVnaXN0ZXJCaW5hcnlDYWxsYmFjazoKICAgICAgICAgICAgcmVnaXN0ZXJCaW5hcnlDYWxsYmFjayA/PyBvdGhlci5yZWdpc3RlckJpbmFyeUNhbGxiYWNrLAogICAgICAgIGVycm9yQ2FsbGJhY2s6IGVycm9yQ2FsbGJhY2sgPz8gb3RoZXIuZXJyb3JDYWxsYmFjaywKICAgICAgICBzY2hlZHVsZU1pY3JvdGFzazogc2NoZWR1bGVNaWNyb3Rhc2sgPz8gb3RoZXIuc2NoZWR1bGVNaWNyb3Rhc2ssCiAgICAgICAgY3JlYXRlVGltZXI6IGNyZWF0ZVRpbWVyID8/IG90aGVyLmNyZWF0ZVRpbWVyLAogICAgICAgIGNyZWF0ZVBlcmlvZGljVGltZXI6IGNyZWF0ZVBlcmlvZGljVGltZXIgPz8gb3RoZXIuY3JlYXRlUGVyaW9kaWNUaW1lciwKICAgICAgICBwcmludDogcHJpbnQgPz8gb3RoZXIucHJpbnQsCiAgICAgICAgZm9yazogZm9yayA/PyBvdGhlci5mb3JrKTsKICB9CgogIEhhbmRsZVVuY2F1Z2h0RXJyb3JIYW5kbGVyIGdldCBoYW5kbGVVbmNhdWdodEVycm9yOwogIFJ1bkhhbmRsZXIgZ2V0IHJ1bjsKICBSdW5VbmFyeUhhbmRsZXIgZ2V0IHJ1blVuYXJ5OwogIFJ1bkJpbmFyeUhhbmRsZXIgZ2V0IHJ1bkJpbmFyeTsKICBSZWdpc3RlckNhbGxiYWNrSGFuZGxlciBnZXQgcmVnaXN0ZXJDYWxsYmFjazsKICBSZWdpc3RlclVuYXJ5Q2FsbGJhY2tIYW5kbGVyIGdldCByZWdpc3RlclVuYXJ5Q2FsbGJhY2s7CiAgUmVnaXN0ZXJCaW5hcnlDYWxsYmFja0hhbmRsZXIgZ2V0IHJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2s7CiAgRXJyb3JDYWxsYmFja0hhbmRsZXIgZ2V0IGVycm9yQ2FsbGJhY2s7CiAgU2NoZWR1bGVNaWNyb3Rhc2tIYW5kbGVyIGdldCBzY2hlZHVsZU1pY3JvdGFzazsKICBDcmVhdGVUaW1lckhhbmRsZXIgZ2V0IGNyZWF0ZVRpbWVyOwogIENyZWF0ZVBlcmlvZGljVGltZXJIYW5kbGVyIGdldCBjcmVhdGVQZXJpb2RpY1RpbWVyOwogIFByaW50SGFuZGxlciBnZXQgcHJpbnQ7CiAgRm9ya0hhbmRsZXIgZ2V0IGZvcms7Cn0KCi8qKgogKiBJbnRlcm5hbCBbWm9uZVNwZWNpZmljYXRpb25dIGNsYXNzLgogKgogKiBUaGUgaW1wbGVtZW50YXRpb24gd2FudHMgdG8gcmVseSBvbiB0aGUgZmFjdCB0aGF0IHRoZSBnZXR0ZXJzIGNhbm5vdCBjaGFuZ2UKICogZHluYW1pY2FsbHkuIFdlIHRodXMgcmVxdWlyZSB1c2VycyB0byBnbyB0aHJvdWdoIHRoZSByZWRpcmVjdGluZwogKiBbWm9uZVNwZWNpZmljYXRpb25dIGNvbnN0cnVjdG9yIHdoaWNoIGluc3RhbnRpYXRlcyB0aGlzIGNsYXNzLgogKi8KY2xhc3MgX1pvbmVTcGVjaWZpY2F0aW9uIGltcGxlbWVudHMgWm9uZVNwZWNpZmljYXRpb24gewogIGNvbnN0IF9ab25lU3BlY2lmaWNhdGlvbigKICAgICAge3RoaXMuaGFuZGxlVW5jYXVnaHRFcnJvciwKICAgICAgdGhpcy5ydW4sCiAgICAgIHRoaXMucnVuVW5hcnksCiAgICAgIHRoaXMucnVuQmluYXJ5LAogICAgICB0aGlzLnJlZ2lzdGVyQ2FsbGJhY2ssCiAgICAgIHRoaXMucmVnaXN0ZXJVbmFyeUNhbGxiYWNrLAogICAgICB0aGlzLnJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2ssCiAgICAgIHRoaXMuZXJyb3JDYWxsYmFjaywKICAgICAgdGhpcy5zY2hlZHVsZU1pY3JvdGFzaywKICAgICAgdGhpcy5jcmVhdGVUaW1lciwKICAgICAgdGhpcy5jcmVhdGVQZXJpb2RpY1RpbWVyLAogICAgICB0aGlzLnByaW50LAogICAgICB0aGlzLmZvcmt9KTsKCiAgZmluYWwgSGFuZGxlVW5jYXVnaHRFcnJvckhhbmRsZXIgaGFuZGxlVW5jYXVnaHRFcnJvcjsKICBmaW5hbCBSdW5IYW5kbGVyIHJ1bjsKICBmaW5hbCBSdW5VbmFyeUhhbmRsZXIgcnVuVW5hcnk7CiAgZmluYWwgUnVuQmluYXJ5SGFuZGxlciBydW5CaW5hcnk7CiAgZmluYWwgUmVnaXN0ZXJDYWxsYmFja0hhbmRsZXIgcmVnaXN0ZXJDYWxsYmFjazsKICBmaW5hbCBSZWdpc3RlclVuYXJ5Q2FsbGJhY2tIYW5kbGVyIHJlZ2lzdGVyVW5hcnlDYWxsYmFjazsKICBmaW5hbCBSZWdpc3RlckJpbmFyeUNhbGxiYWNrSGFuZGxlciByZWdpc3RlckJpbmFyeUNhbGxiYWNrOwogIGZpbmFsIEVycm9yQ2FsbGJhY2tIYW5kbGVyIGVycm9yQ2FsbGJhY2s7CiAgZmluYWwgU2NoZWR1bGVNaWNyb3Rhc2tIYW5kbGVyIHNjaGVkdWxlTWljcm90YXNrOwogIGZpbmFsIENyZWF0ZVRpbWVySGFuZGxlciBjcmVhdGVUaW1lcjsKICBmaW5hbCBDcmVhdGVQZXJpb2RpY1RpbWVySGFuZGxlciBjcmVhdGVQZXJpb2RpY1RpbWVyOwogIGZpbmFsIFByaW50SGFuZGxlciBwcmludDsKICBmaW5hbCBGb3JrSGFuZGxlciBmb3JrOwp9CgovKioKICogQW4gYWRhcHRlZCB2aWV3IG9mIHRoZSBwYXJlbnQgem9uZS4KICoKICogVGhpcyBjbGFzcyBhbGxvd3MgdGhlIGltcGxlbWVudGF0aW9uIG9mIGEgem9uZSBtZXRob2QgdG8gaW52b2tlIG1ldGhvZHMgb24KICogdGhlIHBhcmVudCB6b25lIHdoaWxlIHJldGFpbmluZyBrbm93bGVkZ2Ugb2YgdGhlIG9yaWdpbmF0aW5nIHpvbmUuCiAqCiAqIEN1c3RvbSB6b25lcyAoY3JlYXRlZCB0aHJvdWdoIFtab25lLmZvcmtdIG9yIFtydW5ab25lZF0pIGNhbiBwcm92aWRlCiAqIGltcGxlbWVudGF0aW9ucyBvZiBtb3N0IG1ldGhvZHMgb2Ygem9uZXMuIFRoaXMgaXMgc2ltaWxhciB0byBvdmVycmlkaW5nCiAqIG1ldGhvZHMgb24gW1pvbmVdLCBleGNlcHQgdGhhdCB0aGlzIG1lY2hhbmlzbSBkb2Vzbid0IHJlcXVpcmUgc3ViY2xhc3NpbmcuCiAqCiAqIEEgY3VzdG9tIHpvbmUgZnVuY3Rpb24gKHByb3ZpZGVkIHRocm91Z2ggYSBbWm9uZVNwZWNpZmljYXRpb25dKSB0eXBpY2FsbHkKICogcmVjb3JkcyBvciB3cmFwcyBpdHMgcGFyYW1ldGVycyBhbmQgdGhlbiBkZWxlZ2F0ZXMgdGhlIG9wZXJhdGlvbiB0byBpdHMKICogcGFyZW50IHpvbmUgdXNpbmcgdGhlIHByb3ZpZGVkIFtab25lRGVsZWdhdGVdLgogKgogKiBXaGlsZSB6b25lcyBoYXZlIGFjY2VzcyB0byB0aGVpciBwYXJlbnQgem9uZSAodGhyb3VnaCBbWm9uZS5wYXJlbnRdKSBpdCBpcwogKiByZWNvbW1lbmRlZCB0byBjYWxsIHRoZSBtZXRob2RzIG9uIHRoZSBwcm92aWRlZCBwYXJlbnQgZGVsZWdhdGUgZm9yIHR3bwogKiByZWFzb25zOgogKiAxLiB0aGUgZGVsZWdhdGUgbWV0aG9kcyB0YWtlIGFuIGFkZGl0aW9uYWwgYHpvbmVgIGFyZ3VtZW50IHdoaWNoIGlzIHRoZQogKiAgIHpvbmUgdGhlIGFjdGlvbiBoYXMgYmVlbiBpbml0aWF0ZWQgaW4uCiAqIDIuIGRlbGVnYXRlIGNhbGxzIGFyZSBtb3JlIGVmZmljaWVudCwgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uIGtub3dzIGhvdwogKiAgIHRvIHNraXAgem9uZXMgdGhhdCB3b3VsZCBqdXN0IGRlbGVnYXRlIHRvIHRoZWlyIHBhcmVudHMuCiAqLwphYnN0cmFjdCBjbGFzcyBab25lRGVsZWdhdGUgewogIHZvaWQgaGFuZGxlVW5jYXVnaHRFcnJvcihab25lIHpvbmUsIGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpOwogIFIgcnVuPFI+KFpvbmUgem9uZSwgUiBmKCkpOwogIFIgcnVuVW5hcnk8UiwgVD4oWm9uZSB6b25lLCBSIGYoVCBhcmcpLCBUIGFyZyk7CiAgUiBydW5CaW5hcnk8UiwgVDEsIFQyPihab25lIHpvbmUsIFIgZihUMSBhcmcxLCBUMiBhcmcyKSwgVDEgYXJnMSwgVDIgYXJnMik7CiAgWm9uZUNhbGxiYWNrPFI+IHJlZ2lzdGVyQ2FsbGJhY2s8Uj4oWm9uZSB6b25lLCBSIGYoKSk7CiAgWm9uZVVuYXJ5Q2FsbGJhY2s8UiwgVD4gcmVnaXN0ZXJVbmFyeUNhbGxiYWNrPFIsIFQ+KFpvbmUgem9uZSwgUiBmKFQgYXJnKSk7CiAgWm9uZUJpbmFyeUNhbGxiYWNrPFIsIFQxLCBUMj4gcmVnaXN0ZXJCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+KAogICAgICBab25lIHpvbmUsIFIgZihUMSBhcmcxLCBUMiBhcmcyKSk7CiAgQXN5bmNFcnJvciBlcnJvckNhbGxiYWNrKFpvbmUgem9uZSwgT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpOwogIHZvaWQgc2NoZWR1bGVNaWNyb3Rhc2soWm9uZSB6b25lLCB2b2lkIGYoKSk7CiAgVGltZXIgY3JlYXRlVGltZXIoWm9uZSB6b25lLCBEdXJhdGlvbiBkdXJhdGlvbiwgdm9pZCBmKCkpOwogIFRpbWVyIGNyZWF0ZVBlcmlvZGljVGltZXIoWm9uZSB6b25lLCBEdXJhdGlvbiBwZXJpb2QsIHZvaWQgZihUaW1lciB0aW1lcikpOwogIHZvaWQgcHJpbnQoWm9uZSB6b25lLCBTdHJpbmcgbGluZSk7CiAgWm9uZSBmb3JrKFpvbmUgem9uZSwgWm9uZVNwZWNpZmljYXRpb24gc3BlY2lmaWNhdGlvbiwgTWFwIHpvbmVWYWx1ZXMpOwp9CgovKioKICogQSB6b25lIHJlcHJlc2VudHMgYW4gZW52aXJvbm1lbnQgdGhhdCByZW1haW5zIHN0YWJsZSBhY3Jvc3MgYXN5bmNocm9ub3VzCiAqIGNhbGxzLgogKgogKiBDb2RlIGlzIGFsd2F5cyBleGVjdXRlZCBpbiB0aGUgY29udGV4dCBvZiBhIHpvbmUsIGF2YWlsYWJsZSBhcwogKiBbWm9uZS5jdXJyZW50XS4gVGhlIGluaXRpYWwgYG1haW5gIGZ1bmN0aW9uIHJ1bnMgaW4gdGhlIGNvbnRleHQgb2YgdGhlCiAqIGRlZmF1bHQgem9uZSAoW1pvbmUucm9vdF0pLiBDb2RlIGNhbiBiZSBydW4gaW4gYSBkaWZmZXJlbnQgem9uZSB1c2luZyBlaXRoZXIKICogW3J1blpvbmVkXSwgdG8gY3JlYXRlIGEgbmV3IHpvbmUsIG9yIFtab25lLnJ1bl0gdG8gcnVuIGNvZGUgaW4gdGhlIGNvbnRleHQgb2YKICogYW4gZXhpc3Rpbmcgem9uZSBsaWtlbHkgY3JlYXRlZCB1c2luZyBbWm9uZS5mb3JrXS4KICoKICogRGV2ZWxvcGVycyBjYW4gY3JlYXRlIGEgbmV3IHpvbmUgdGhhdCBvdmVycmlkZXMgc29tZSBvZiB0aGUgZnVuY3Rpb25hbGl0eSBvZgogKiBhbiBleGlzdGluZyB6b25lLiBGb3IgZXhhbXBsZSwgY3VzdG9tIHpvbmVzIGNhbiByZXBsYWNlIG9mIG1vZGlmeSB0aGUKICogYmVoYXZpb3Igb2YgYHByaW50YCwgdGltZXJzLCBtaWNyb3Rhc2tzIG9yIGhvdyB1bmNhdWdodCBlcnJvcnMgYXJlIGhhbmRsZWQuCiAqCiAqIFRoZSBbWm9uZV0gY2xhc3MgaXMgbm90IHN1YmNsYXNzYWJsZSwgYnV0IHVzZXJzIGNhbiBwcm92aWRlIGN1c3RvbSB6b25lcyBieQogKiBmb3JraW5nIGFuIGV4aXN0aW5nIHpvbmUgKHVzdWFsbHkgW1pvbmUuY3VycmVudF0pIHdpdGggYSBbWm9uZVNwZWNpZmljYXRpb25dLgogKiBUaGlzIGlzIHNpbWlsYXIgdG8gY3JlYXRpbmcgYSBuZXcgY2xhc3MgdGhhdCBleHRlbmRzIHRoZSBiYXNlIGBab25lYCBjbGFzcwogKiBhbmQgdGhhdCBvdmVycmlkZXMgc29tZSBtZXRob2RzLCBleGNlcHQgd2l0aG91dCBhY3R1YWxseSBjcmVhdGluZyBhIG5ldwogKiBjbGFzcy4gSW5zdGVhZCB0aGUgb3ZlcnJpZGluZyBtZXRob2RzIGFyZSBwcm92aWRlZCBhcyBmdW5jdGlvbnMgdGhhdAogKiBleHBsaWNpdGx5IHRha2UgdGhlIGVxdWl2YWxlbnQgb2YgdGhlaXIgb3duIGNsYXNzLCB0aGUgInN1cGVyIiBjbGFzcyBhbmQgdGhlCiAqIGB0aGlzYCBvYmplY3QgYXMgcGFyYW1ldGVycy4KICoKICogQXN5bmNocm9ub3VzIGNhbGxiYWNrcyBhbHdheXMgcnVuIGluIHRoZSBjb250ZXh0IG9mIHRoZSB6b25lIHdoZXJlIHRoZXkgd2VyZQogKiBzY2hlZHVsZWQuIFRoaXMgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdHdvIHN0ZXBzOgogKiAxLiB0aGUgY2FsbGJhY2sgaXMgZmlyc3QgcmVnaXN0ZXJlZCB1c2luZyBvbmUgb2YgW3JlZ2lzdGVyQ2FsbGJhY2tdLAogKiAgIFtyZWdpc3RlclVuYXJ5Q2FsbGJhY2tdLCBvciBbcmVnaXN0ZXJCaW5hcnlDYWxsYmFja10uIFRoaXMgYWxsb3dzIHRoZSB6b25lCiAqICAgdG8gcmVjb3JkIHRoYXQgYSBjYWxsYmFjayBleGlzdHMgYW5kIHBvdGVudGlhbGx5IG1vZGlmeSBpdCAoYnkgcmV0dXJuaW5nIGEKICogICBkaWZmZXJlbnQgY2FsbGJhY2spLiBUaGUgY29kZSBkb2luZyB0aGUgcmVnaXN0cmF0aW9uIChlLmcuLCBgRnV0dXJlLnRoZW5gKQogKiAgIGFsc28gcmVtZW1iZXJzIHRoZSBjdXJyZW50IHpvbmUgc28gdGhhdCBpdCBjYW4gbGF0ZXIgcnVuIHRoZSBjYWxsYmFjayBpbgogKiAgIHRoYXQgem9uZS4KICogMi4gQXQgYSBsYXRlciBwb2ludCB0aGUgcmVnaXN0ZXJlZCBjYWxsYmFjayBpcyBydW4gaW4gdGhlIHJlbWVtYmVyZWQgem9uZS4KICoKICogVGhpcyBpcyBhbGwgaGFuZGxlZCBpbnRlcm5hbGx5IGJ5IHRoZSBwbGF0Zm9ybSBjb2RlIGFuZCBtb3N0IHVzZXJzIGRvbid0IG5lZWQKICogdG8gd29ycnkgYWJvdXQgaXQuIEhvd2V2ZXIsIGRldmVsb3BlcnMgb2YgbmV3IGFzeW5jaHJvbm91cyBvcGVyYXRpb25zLAogKiBwcm92aWRlZCBieSB0aGUgdW5kZXJseWluZyBzeXN0ZW0gb3IgdGhyb3VnaCBuYXRpdmUgZXh0ZW5zaW9ucywgbXVzdCBmb2xsb3cKICogdGhlIHByb3RvY29sIHRvIGJlIHpvbmUgY29tcGF0aWJsZS4KICoKICogRm9yIGNvbnZlbmllbmNlLCB6b25lcyBwcm92aWRlIFtiaW5kQ2FsbGJhY2tdIChhbmQgdGhlIGNvcnJlc3BvbmRpbmcKICogW2JpbmRVbmFyeUNhbGxiYWNrXSBhbmQgW2JpbmRCaW5hcnlDYWxsYmFja10pIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJlc3BlY3QKICogdGhlIHpvbmUgY29udHJhY3Q6IHRoZXNlIGZ1bmN0aW9ucyBmaXJzdCBpbnZva2UgdGhlIGNvcnJlc3BvbmRpbmcgYHJlZ2lzdGVyYAogKiBmdW5jdGlvbnMgYW5kIHRoZW4gd3JhcCB0aGUgcmV0dXJuZWQgZnVuY3Rpb24gc28gdGhhdCBpdCBydW5zIGluIHRoZSBjdXJyZW50CiAqIHpvbmUgd2hlbiBpdCBpcyBsYXRlciBhc3luY2hyb25vdXNseSBpbnZva2VkLgogKgogKiBTaW1pbGFybHksIHpvbmVzIHByb3ZpZGUgW2JpbmRDYWxsYmFja0d1YXJkZWRdIChhbmQgdGhlIGNvcnJlc3BvbmRpbmcKICogW2JpbmRVbmFyeUNhbGxiYWNrR3VhcmRlZF0gYW5kIFtiaW5kQmluYXJ5Q2FsbGJhY2tHdWFyZGVkXSksIHdoZW4gdGhlCiAqIGNhbGxiYWNrIHNob3VsZCBiZSBpbnZva2VkIHRocm91Z2ggW1pvbmUucnVuR3VhcmRlZF0uCiAqLwphYnN0cmFjdCBjbGFzcyBab25lIHsKICAvLyBQcml2YXRlIGNvbnN0cnVjdG9yIHNvIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIGluc3RhbnRpYXRlIGEgWm9uZSBjbGFzcy4KICBab25lLl8oKTsKCiAgLyoqCiAgICogVGhlIHJvb3Qgem9uZS4KICAgKgogICAqIEFsbCBpc29sYXRlIGVudHJ5IGZ1bmN0aW9ucyAoYG1haW5gIG9yIHNwYXduZWQgZnVuY3Rpb25zKSBzdGFydCBydW5uaW5nIGluCiAgICogdGhlIHJvb3Qgem9uZSAodGhhdCBpcywgW1pvbmUuY3VycmVudF0gaXMgaWRlbnRpY2FsIHRvIFtab25lLnJvb3RdIHdoZW4gdGhlCiAgICogZW50cnkgZnVuY3Rpb24gaXMgY2FsbGVkKS4gSWYgbm8gY3VzdG9tIHpvbmUgaXMgY3JlYXRlZCwgdGhlIHJlc3Qgb2YgdGhlCiAgICogcHJvZ3JhbSBhbHdheXMgcnVucyBpbiB0aGUgcm9vdCB6b25lLgogICAqCiAgICogVGhlIHJvb3Qgem9uZSBpbXBsZW1lbnRzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIGFsbCB6b25lIG9wZXJhdGlvbnMuCiAgICogTWFueSBtZXRob2RzLCBsaWtlIFtyZWdpc3RlckNhbGxiYWNrXSBkbyB0aGUgYmFyZSBtaW5pbXVtIHJlcXVpcmVkIG9mIHRoZQogICAqIGZ1bmN0aW9uLCBhbmQgYXJlIG9ubHkgcHJvdmlkZWQgYXMgYSBob29rIGZvciBjdXN0b20gem9uZXMuIE90aGVycywgbGlrZQogICAqIFtzY2hlZHVsZU1pY3JvdGFza10sIGludGVyYWN0IHdpdGggdGhlIHVuZGVybHlpbmcgc3lzdGVtIHRvIGltcGxlbWVudCB0aGUKICAgKiBkZXNpcmVkIGJlaGF2aW9yLgogICAqLwogIHN0YXRpYyBjb25zdCBab25lIHJvb3QgPSBfcm9vdFpvbmU7CgogIC8qKiBUaGUgY3VycmVudGx5IHJ1bm5pbmcgem9uZS4gKi8KICBzdGF0aWMgWm9uZSBfY3VycmVudCA9IF9yb290Wm9uZTsKCiAgLyoqIFRoZSB6b25lIHRoYXQgaXMgY3VycmVudGx5IGFjdGl2ZS4gKi8KICBzdGF0aWMgWm9uZSBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKCiAgLyoqCiAgICogSGFuZGxlcyB1bmNhdWdodCBhc3luY2hyb25vdXMgZXJyb3JzLgogICAqCiAgICogVGhlcmUgYXJlIHR3byBraW5kIG9mIGFzeW5jaHJvbm91cyBlcnJvcnMgdGhhdCBhcmUgaGFuZGxlZCBieSB0aGlzCiAgICogZnVuY3Rpb246CiAgICogMS4gVW5jYXVnaHQgZXJyb3JzIHRoYXQgd2VyZSB0aHJvd24gaW4gYXN5bmNocm9ub3VzIGNhbGxiYWNrcywgZm9yIGV4YW1wbGUsCiAgICogICBhIGB0aHJvd2AgaW4gdGhlIGZ1bmN0aW9uIHBhc3NlZCB0byBbVGltZXIucnVuXS4KICAgKiAyLiBBc3luY2hyb25vdXMgZXJyb3JzIHRoYXQgYXJlIHB1c2hlZCB0aHJvdWdoIFtGdXR1cmVdIGFuZCBbU3RyZWFtXQogICAqICAgY2hhaW5zLCBidXQgZm9yIHdoaWNoIG5vIGNoaWxkIHJlZ2lzdGVyZWQgYW4gZXJyb3IgaGFuZGxlci4KICAgKiAgIE1vc3QgYXN5bmNocm9ub3VzIGNsYXNzZXMsIGxpa2UgW0Z1dHVyZV0gb3IgW1N0cmVhbV0gcHVzaCBlcnJvcnMgdG8gdGhlaXIKICAgKiAgIGxpc3RlbmVycy4gRXJyb3JzIGFyZSBwcm9wYWdhdGVkIHRoaXMgd2F5IHVudGlsIGVpdGhlciBhIGxpc3RlbmVyIGhhbmRsZXMKICAgKiAgIHRoZSBlcnJvciAoZm9yIGV4YW1wbGUgd2l0aCBbRnV0dXJlLmNhdGNoRXJyb3JdKSwgb3Igbm8gbGlzdGVuZXIgaXMKICAgKiAgIGF2YWlsYWJsZSBhbnltb3JlLiBJbiB0aGUgbGF0dGVyIGNhc2UsIGZ1dHVyZXMgYW5kIHN0cmVhbXMgaW52b2tlIHRoZQogICAqICAgem9uZSdzIFtoYW5kbGVVbmNhdWdodEVycm9yXS4KICAgKgogICAqIEJ5IGRlZmF1bHQsIHdoZW4gaGFuZGxlZCBieSB0aGUgcm9vdCB6b25lLCB1bmNhdWdodCBhc3luY2hyb25vdXMgZXJyb3JzIGFyZQogICAqIHRyZWF0ZWQgbGlrZSB1bmNhdWdodCBzeW5jaHJvbm91cyBleGNlcHRpb25zLgogICAqLwogIHZvaWQgaGFuZGxlVW5jYXVnaHRFcnJvcihlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKTsKCiAgLyoqCiAgICogVGhlIHBhcmVudCB6b25lIG9mIHRoZSB0aGlzIHpvbmUuCiAgICoKICAgKiBJcyBgbnVsbGAgaWYgYHRoaXNgIGlzIHRoZSBbcm9vdF0gem9uZS4KICAgKgogICAqIFpvbmVzIGFyZSBjcmVhdGVkIGJ5IFtmb3JrXSBvbiBhbiBleGlzdGluZyB6b25lLCBvciBieSBbcnVuWm9uZWRdIHdoaWNoCiAgICogZm9ya3MgdGhlIFtjdXJyZW50XSB6b25lLiBUaGUgbmV3IHpvbmUncyBwYXJlbnQgem9uZSBpcyB0aGUgem9uZSBpdCB3YXMKICAgKiBmb3JrZWQgZnJvbS4KICAgKi8KICBab25lIGdldCBwYXJlbnQ7CgogIC8qKgogICAqIFRoZSBlcnJvciB6b25lIGlzIHRoZSBvbmUgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgZGVhbGluZyB3aXRoIHVuY2F1Z2h0CiAgICogZXJyb3JzLgogICAqCiAgICogVGhpcyBpcyB0aGUgY2xvc2VzdCBwYXJlbnQgem9uZSBvZiB0aGlzIHpvbmUgdGhhdCBwcm92aWRlcyBhCiAgICogW2hhbmRsZVVuY2F1Z2h0RXJyb3JdIG1ldGhvZC4KICAgKgogICAqIEFzeW5jaHJvbm91cyBlcnJvcnMgbmV2ZXIgY3Jvc3Mgem9uZSBib3VuZGFyaWVzIGJldHdlZW4gem9uZXMgd2l0aAogICAqIGRpZmZlcmVudCBlcnJvciBoYW5kbGVycy4KICAgKgogICAqIEV4YW1wbGU6CiAgICogYGBgCiAgICogaW1wb3J0ICdkYXJ0OmFzeW5jJzsKICAgKgogICAqIG1haW4oKSB7CiAgICogICB2YXIgZnV0dXJlOwogICAqICAgcnVuWm9uZWQoKCkgewogICAqICAgICAvLyBUaGUgYXN5bmNocm9ub3VzIGVycm9yIGlzIGNhdWdodCBieSB0aGUgY3VzdG9tIHpvbmUgd2hpY2ggcHJpbnRzCiAgICogICAgIC8vICdhc3luY2hyb25vdXMgZXJyb3InLgogICAqICAgICBmdXR1cmUgPSBuZXcgRnV0dXJlLmVycm9yKCJhc3luY2hyb25vdXMgZXJyb3IiKTsKICAgKiAgIH0sIG9uRXJyb3I6IChlKSB7IHByaW50KGUpOyB9KTsgIC8vIENyZWF0ZXMgYSB6b25lIHdpdGggYW4gZXJyb3IgaGFuZGxlci4KICAgKiAgIC8vIFRoZSBmb2xsb3dpbmcgYGNhdGNoRXJyb3JgIGhhbmRsZXIgaXMgbmV2ZXIgaW52b2tlZCwgYmVjYXVzZSB0aGUKICAgKiAgIC8vIGN1c3RvbSB6b25lIGNyZWF0ZWQgYnkgdGhlIGNhbGwgdG8gYHJ1blpvbmVkYCBwcm92aWRlcyBhbgogICAqICAgLy8gZXJyb3IgaGFuZGxlci4KICAgKiAgIGZ1dHVyZS5jYXRjaEVycm9yKChlKSB7IHRocm93ICJpcyBuZXZlciByZWFjaGVkIjsgfSk7CiAgICogfQogICAqIGBgYAogICAqCiAgICogTm90ZSB0aGF0IGVycm9ycyBjYW5ub3QgZW50ZXIgYSBjaGlsZCB6b25lIHdpdGggYSBkaWZmZXJlbnQgZXJyb3IgaGFuZGxlcgogICAqIGVpdGhlcjoKICAgKiBgYGAKICAgKiBpbXBvcnQgJ2RhcnQ6YXN5bmMnOwogICAqCiAgICogbWFpbigpIHsKICAgKiAgIHJ1blpvbmVkKCgpIHsKICAgKiAgICAgLy8gVGhlIGZvbGxvd2luZyBhc3luY2hyb25vdXMgZXJyb3IgaXMgKm5vdCogY2F1Z2h0IGJ5IHRoZSBgY2F0Y2hFcnJvcmAKICAgKiAgICAgLy8gaW4gdGhlIG5lc3RlZCB6b25lLCBzaW5jZSBlcnJvcnMgYXJlIG5vdCB0byBjcm9zcyB6b25lIGJvdW5kYXJpZXMKICAgKiAgICAgLy8gd2l0aCBkaWZmZXJlbnQgZXJyb3IgaGFuZGxlcnMuCiAgICogICAgIC8vIEluc3RlYWQgdGhlIGVycm9yIGlzIGhhbmRsZWQgYnkgdGhlIGN1cnJlbnQgZXJyb3IgaGFuZGxlciwKICAgKiAgICAgLy8gcHJpbnRpbmcgIkNhdWdodCBieSBvdXRlciB6b25lOiBhc3luY2hyb25vdXMgZXJyb3IiLgogICAqICAgICB2YXIgZnV0dXJlID0gbmV3IEZ1dHVyZS5lcnJvcigiYXN5bmNocm9ub3VzIGVycm9yIik7CiAgICogICAgIHJ1blpvbmVkKCgpIHsKICAgKiAgICAgICBmdXR1cmUuY2F0Y2hFcnJvcigoZSkgeyB0aHJvdyAiaXMgbmV2ZXIgcmVhY2hlZCI7IH0pOwogICAqICAgICB9LCBvbkVycm9yOiAoZSkgeyB0aHJvdyAiaXMgbmV2ZXIgcmVhY2hlZCI7IH0pOwogICAqICAgfSwgb25FcnJvcjogKGUpIHsgcHJpbnQoIkNhdWdodCBieSBvdXRlciB6b25lOiAkZSIpOyB9KTsKICAgKiB9CiAgICogYGBgCiAgICovCiAgWm9uZSBnZXQgZXJyb3Jab25lOwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgYHRoaXNgIGFuZCBbb3RoZXJab25lXSBhcmUgaW4gdGhlIHNhbWUgZXJyb3Igem9uZS4KICAgKgogICAqIFR3byB6b25lcyBhcmUgaW4gdGhlIHNhbWUgZXJyb3Igem9uZSBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgW2Vycm9yWm9uZV0uCiAgICovCiAgYm9vbCBpblNhbWVFcnJvclpvbmUoWm9uZSBvdGhlclpvbmUpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IHpvbmUgYXMgYSBjaGlsZCBvZiBgdGhpc2AuCiAgICoKICAgKiBUaGUgbmV3IHpvbmUgdXNlcyB0aGUgY2xvc3VyZXMgaW4gdGhlIGdpdmVuIFtzcGVjaWZpY2F0aW9uXSB0byBvdmVycmlkZQogICAqIHRoZSBjdXJyZW50J3Mgem9uZSBiZWhhdmlvci4gQWxsIHNwZWNpZmljYXRpb24gZW50cmllcyB0aGF0IGFyZSBgbnVsbGAKICAgKiBpbmhlcml0IHRoZSBiZWhhdmlvciBmcm9tIHRoZSBwYXJlbnQgem9uZSAoYHRoaXNgKS4KICAgKgogICAqIFRoZSBuZXcgem9uZSBpbmhlcml0cyB0aGUgc3RvcmVkIHZhbHVlcyAoYWNjZXNzZWQgdGhyb3VnaCBbb3BlcmF0b3IgW11dKQogICAqIG9mIHRoaXMgem9uZSBhbmQgdXBkYXRlcyB0aGVtIHdpdGggdmFsdWVzIGZyb20gW3pvbmVWYWx1ZXNdLCB3aGljaCBlaXRoZXIKICAgKiBhZGRzIG5ldyB2YWx1ZXMgb3Igb3ZlcnJpZGVzIGV4aXN0aW5nIG9uZXMuCiAgICoKICAgKiBOb3RlIHRoYXQgdGhlIGZvcmsgb3BlcmF0aW9uIGlzIGludGVyY2VwdGlibGUuIEEgem9uZSBjYW4gdGh1cyBjaGFuZ2UKICAgKiB0aGUgem9uZSBzcGVjaWZpY2F0aW9uIChvciB6b25lIHZhbHVlcyksIGdpdmluZyB0aGUgZm9ya2luZyB6b25lIGZ1bGwKICAgKiBjb250cm9sIG92ZXIgdGhlIGNoaWxkIHpvbmUuCiAgICovCiAgWm9uZSBmb3JrKHtab25lU3BlY2lmaWNhdGlvbiBzcGVjaWZpY2F0aW9uLCBNYXAgem9uZVZhbHVlc30pOwoKICAvKioKICAgKiBFeGVjdXRlcyBbYWN0aW9uXSBpbiB0aGlzIHpvbmUuCiAgICoKICAgKiBCeSBkZWZhdWx0IChhcyBpbXBsZW1lbnRlZCBpbiB0aGUgW3Jvb3RdIHpvbmUpLCBydW5zIFthY3Rpb25dCiAgICogd2l0aCBbY3VycmVudF0gc2V0IHRvIHRoaXMgem9uZS4KICAgKgogICAqIElmIFthY3Rpb25dIHRocm93cywgdGhlIHN5bmNocm9ub3VzIGV4Y2VwdGlvbiBpcyBub3QgY2F1Z2h0IGJ5IHRoZSB6b25lJ3MKICAgKiBlcnJvciBoYW5kbGVyLiBVc2UgW3J1bkd1YXJkZWRdIHRvIGFjaGlldmUgdGhhdC4KICAgKgogICAqIFNpbmNlIHRoZSByb290IHpvbmUgaXMgdGhlIG9ubHkgem9uZSB0aGF0IGNhbiBtb2RpZnkgdGhlIHZhbHVlIG9mCiAgICogW2N1cnJlbnRdLCBjdXN0b20gem9uZXMgaW50ZXJjZXB0aW5nIHJ1biBzaG91bGQgYWx3YXlzIGRlbGVnYXRlIHRvIHRoZWlyCiAgICogcGFyZW50IHpvbmUuIFRoZXkgbWF5IHRha2UgYWN0aW9ucyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBjYWxsLgogICAqLwogIFIgcnVuPFI+KFIgYWN0aW9uKCkpOwoKICAvKioKICAgKiBFeGVjdXRlcyB0aGUgZ2l2ZW4gW2FjdGlvbl0gd2l0aCBbYXJndW1lbnRdIGluIHRoaXMgem9uZS4KICAgKgogICAqIEFzIFtydW5dIGV4Y2VwdCB0aGF0IFthY3Rpb25dIGlzIGNhbGxlZCB3aXRoIG9uZSBbYXJndW1lbnRdIGluc3RlYWQgb2YKICAgKiBub25lLgogICAqLwogIFIgcnVuVW5hcnk8UiwgVD4oUiBhY3Rpb24oVCBhcmd1bWVudCksIFQgYXJndW1lbnQpOwoKICAvKioKICAgKiBFeGVjdXRlcyB0aGUgZ2l2ZW4gW2FjdGlvbl0gd2l0aCBbYXJndW1lbnQxXSBhbmQgW2FyZ3VtZW50Ml0gaW4gdGhpcwogICAqIHpvbmUuCiAgICoKICAgKiBBcyBbcnVuXSBleGNlcHQgdGhhdCBbYWN0aW9uXSBpcyBjYWxsZWQgd2l0aCB0d28gYXJndW1lbnRzIGluc3RlYWQgb2Ygbm9uZS4KICAgKi8KICBSIHJ1bkJpbmFyeTxSLCBUMSwgVDI+KAogICAgICBSIGFjdGlvbihUMSBhcmd1bWVudDEsIFQyIGFyZ3VtZW50MiksIFQxIGFyZ3VtZW50MSwgVDIgYXJndW1lbnQyKTsKCiAgLyoqCiAgICogRXhlY3V0ZXMgdGhlIGdpdmVuIFthY3Rpb25dIGluIHRoaXMgem9uZSBhbmQgY2F0Y2hlcyBzeW5jaHJvbm91cwogICAqIGVycm9ycy4KICAgKgogICAqIFRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0bzoKICAgKiBgYGAKICAgKiB0cnkgewogICAqICAgdGhpcy5ydW4oYWN0aW9uKTsKICAgKiB9IGNhdGNoIChlLCBzKSB7CiAgICogICB0aGlzLmhhbmRsZVVuY2F1Z2h0RXJyb3IoZSwgcyk7CiAgICogfQogICAqIGBgYAogICAqCiAgICogU2VlIFtydW5dLgogICAqLwogIHZvaWQgcnVuR3VhcmRlZCh2b2lkIGFjdGlvbigpKTsKCiAgLyoqCiAgICogRXhlY3V0ZXMgdGhlIGdpdmVuIFthY3Rpb25dIHdpdGggW2FyZ3VtZW50XSBpbiB0aGlzIHpvbmUgYW5kCiAgICogY2F0Y2hlcyBzeW5jaHJvbm91cyBlcnJvcnMuCiAgICoKICAgKiBTZWUgW3J1bkd1YXJkZWRdLgogICAqLwogIHZvaWQgcnVuVW5hcnlHdWFyZGVkPFQ+KHZvaWQgYWN0aW9uKFQgYXJndW1lbnQpLCBUIGFyZ3VtZW50KTsKCiAgLyoqCiAgICogRXhlY3V0ZXMgdGhlIGdpdmVuIFthY3Rpb25dIHdpdGggW2FyZ3VtZW50MV0gYW5kIFthcmd1bWVudDJdIGluIHRoaXMKICAgKiB6b25lIGFuZCBjYXRjaGVzIHN5bmNocm9ub3VzIGVycm9ycy4KICAgKgogICAqIFNlZSBbcnVuR3VhcmRlZF0uCiAgICovCiAgdm9pZCBydW5CaW5hcnlHdWFyZGVkPFQxLCBUMj4oCiAgICAgIHZvaWQgYWN0aW9uKFQxIGFyZ3VtZW50MSwgVDIgYXJndW1lbnQyKSwgVDEgYXJndW1lbnQxLCBUMiBhcmd1bWVudDIpOwoKICAvKioKICAgKiBSZWdpc3RlcnMgdGhlIGdpdmVuIGNhbGxiYWNrIGluIHRoaXMgem9uZS4KICAgKgogICAqIFdoZW4gaW1wbGVtZW50aW5nIGFuIGFzeW5jaHJvbm91cyBwcmltaXRpdmUgdGhhdCB1c2VzIGNhbGxiYWNrcywgdGhlCiAgICogY2FsbGJhY2sgbXVzdCBiZSByZWdpc3RlcmVkIHVzaW5nIFtyZWdpc3RlckNhbGxiYWNrXSBhdCB0aGUgcG9pbnQgd2hlcmUgdGhlCiAgICogdXNlciBwcm92aWRlcyB0aGUgY2FsbGJhY2suIFRoaXMgYWxsb3dzIHpvbmVzIHRvIHJlY29yZCBvdGhlciBpbmZvcm1hdGlvbgogICAqIHRoYXQgdGhleSBuZWVkIGF0IHRoZSBzYW1lIHRpbWUsIHBlcmhhcHMgZXZlbiB3cmFwcGluZyB0aGUgY2FsbGJhY2ssIHNvCiAgICogdGhhdCB0aGUgY2FsbGJhY2sgaXMgcHJlcGFyZWQgd2hlbiBpdCBpcyBsYXRlciBydW4gaW4gdGhlIHNhbWUgem9uZXMKICAgKiAodXNpbmcgW3J1bl0pLiBGb3IgZXhhbXBsZSwgYSB6b25lIG1heSBkZWNpZGUKICAgKiB0byBzdG9yZSB0aGUgc3RhY2sgdHJhY2UgKGF0IHRoZSB0aW1lIG9mIHRoZSByZWdpc3RyYXRpb24pIHdpdGggdGhlCiAgICogY2FsbGJhY2suCiAgICoKICAgKiBSZXR1cm5zIHRoZSBjYWxsYmFjayB0aGF0IHNob3VsZCBiZSB1c2VkIGluIHBsYWNlIG9mIHRoZSBwcm92aWRlZAogICAqIFtjYWxsYmFja10uIEZyZXF1ZW50bHkgem9uZXMgc2ltcGx5IHJldHVybiB0aGUgb3JpZ2luYWwgY2FsbGJhY2suCiAgICoKICAgKiBDdXN0b20gem9uZXMgbWF5IGludGVyY2VwdCB0aGlzIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaW4KICAgKiBbWm9uZS5yb290XSByZXR1cm5zIHRoZSBvcmlnaW5hbCBjYWxsYmFjayB1bmNoYW5nZWQuCiAgICovCiAgWm9uZUNhbGxiYWNrPFI+IHJlZ2lzdGVyQ2FsbGJhY2s8Uj4oUiBjYWxsYmFjaygpKTsKCiAgLyoqCiAgICogUmVnaXN0ZXJzIHRoZSBnaXZlbiBjYWxsYmFjayBpbiB0aGlzIHpvbmUuCiAgICoKICAgKiBTaW1pbGFyIHRvIFtyZWdpc3RlckNhbGxiYWNrXSBidXQgd2l0aCBhIHVuYXJ5IGNhbGxiYWNrLgogICAqLwogIFpvbmVVbmFyeUNhbGxiYWNrPFIsIFQ+IHJlZ2lzdGVyVW5hcnlDYWxsYmFjazxSLCBUPihSIGNhbGxiYWNrKFQgYXJnKSk7CgogIC8qKgogICAqIFJlZ2lzdGVycyB0aGUgZ2l2ZW4gY2FsbGJhY2sgaW4gdGhpcyB6b25lLgogICAqCiAgICogU2ltaWxhciB0byBbcmVnaXN0ZXJDYWxsYmFja10gYnV0IHdpdGggYSB1bmFyeSBjYWxsYmFjay4KICAgKi8KICBab25lQmluYXJ5Q2FsbGJhY2s8UiwgVDEsIFQyPiByZWdpc3RlckJpbmFyeUNhbGxiYWNrPFIsIFQxLCBUMj4oCiAgICAgIFIgY2FsbGJhY2soVDEgYXJnMSwgVDIgYXJnMikpOwoKICAvKioKICAgKiAgUmVnaXN0ZXJzIHRoZSBwcm92aWRlZCBbY2FsbGJhY2tdIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsCiAgICogIGV4ZWN1dGUgaW4gdGhpcyB6b25lLgogICAqCiAgICogIEVxdWl2YWxlbnQgdG86CiAgICoKICAgKiAgICAgIFpvbmVDYWxsYmFjayByZWdpc3RlcmVkID0gdGhpcy5yZWdpc3RlckNhbGxiYWNrKGNhbGxiYWNrKTsKICAgKiAgICAgIHJldHVybiAoKSA9PiB0aGlzLnJ1bihyZWdpc3RlcmVkKTsKICAgKgogICAqLwogIFpvbmVDYWxsYmFjazxSPiBiaW5kQ2FsbGJhY2s8Uj4oUiBjYWxsYmFjaygpKTsKCiAgLyoqCiAgICogIFJlZ2lzdGVycyB0aGUgcHJvdmlkZWQgW2NhbGxiYWNrXSBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbAogICAqICBleGVjdXRlIGluIHRoaXMgem9uZS4KICAgKgogICAqICBFcXVpdmFsZW50IHRvOgogICAqCiAgICogICAgICBab25lQ2FsbGJhY2sgcmVnaXN0ZXJlZCA9IHRoaXMucmVnaXN0ZXJVbmFyeUNhbGxiYWNrKGNhbGxiYWNrKTsKICAgKiAgICAgIHJldHVybiAoYXJnKSA9PiB0aGluLnJ1blVuYXJ5KHJlZ2lzdGVyZWQsIGFyZyk7CiAgICovCiAgWm9uZVVuYXJ5Q2FsbGJhY2s8UiwgVD4gYmluZFVuYXJ5Q2FsbGJhY2s8UiwgVD4oUiBjYWxsYmFjayhUIGFyZ3VtZW50KSk7CgogIC8qKgogICAqICBSZWdpc3RlcnMgdGhlIHByb3ZpZGVkIFtjYWxsYmFja10gYW5kIHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwKICAgKiAgZXhlY3V0ZSBpbiB0aGlzIHpvbmUuCiAgICoKICAgKiAgRXF1aXZhbGVudCB0bzoKICAgKgogICAqICAgICAgWm9uZUNhbGxiYWNrIHJlZ2lzdGVyZWQgPSByZWdpc3RlckJpbmFyeUNhbGxiYWNrKGNhbGxiYWNrKTsKICAgKiAgICAgIHJldHVybiAoYXJnMSwgYXJnMikgPT4gdGhpbi5ydW5CaW5hcnkocmVnaXN0ZXJlZCwgYXJnMSwgYXJnMik7CiAgICovCiAgWm9uZUJpbmFyeUNhbGxiYWNrPFIsIFQxLCBUMj4gYmluZEJpbmFyeUNhbGxiYWNrPFIsIFQxLCBUMj4oCiAgICAgIFIgY2FsbGJhY2soVDEgYXJndW1lbnQxLCBUMiBhcmd1bWVudDIpKTsKCiAgLyoqCiAgICogUmVnaXN0ZXJzIHRoZSBwcm92aWRlZCBbY2FsbGJhY2tdIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsCiAgICogZXhlY3V0ZSBpbiB0aGlzIHpvbmUuCiAgICoKICAgKiBXaGVuIHRoZSBmdW5jdGlvbiBleGVjdXRlcywgZXJyb3JzIGFyZSBjYXVnaHQgYW5kIHRyZWF0ZWQgYXMgdW5jYXVnaHQKICAgKiBlcnJvcnMuCiAgICoKICAgKiBFcXVpdmFsZW50IHRvOgogICAqCiAgICogICAgIFpvbmVDYWxsYmFjayByZWdpc3RlcmVkID0gdGhpcy5yZWdpc3RlckNhbGxiYWNrKGNhbGxiYWNrKTsKICAgKiAgICAgcmV0dXJuICgpID0+IHRoaXMucnVuR3VhcmRlZChyZWdpc3RlcmVkKTsKICAgKgogICAqLwogIHZvaWQgRnVuY3Rpb24oKSBiaW5kQ2FsbGJhY2tHdWFyZGVkKHZvaWQgY2FsbGJhY2soKSk7CgogIC8qKgogICAqIFJlZ2lzdGVycyB0aGUgcHJvdmlkZWQgW2NhbGxiYWNrXSBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbAogICAqIGV4ZWN1dGUgaW4gdGhpcyB6b25lLgogICAqCiAgICogV2hlbiB0aGUgZnVuY3Rpb24gZXhlY3V0ZXMsIGVycm9ycyBhcmUgY2F1Z2h0IGFuZCB0cmVhdGVkIGFzIHVuY2F1Z2h0CiAgICogZXJyb3JzLgogICAqCiAgICogRXF1aXZhbGVudCB0bzoKICAgKgogICAqICAgICBab25lQ2FsbGJhY2sgcmVnaXN0ZXJlZCA9IHRoaXMucmVnaXN0ZXJVbmFyeUNhbGxiYWNrKGNhbGxiYWNrKTsKICAgKiAgICAgcmV0dXJuIChhcmcpID0+IHRoaXMucnVuVW5hcnlHdWFyZGVkKHJlZ2lzdGVyZWQsIGFyZyk7CiAgICovCiAgdm9pZCBGdW5jdGlvbihUKSBiaW5kVW5hcnlDYWxsYmFja0d1YXJkZWQ8VD4odm9pZCBjYWxsYmFjayhUIGFyZ3VtZW50KSk7CgogIC8qKgogICAqICBSZWdpc3RlcnMgdGhlIHByb3ZpZGVkIFtjYWxsYmFja10gYW5kIHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwKICAgKiAgZXhlY3V0ZSBpbiB0aGlzIHpvbmUuCiAgICoKICAgKiAgRXF1aXZhbGVudCB0bzoKICAgKgogICAqICAgICAgWm9uZUNhbGxiYWNrIHJlZ2lzdGVyZWQgPSByZWdpc3RlckJpbmFyeUNhbGxiYWNrKGNhbGxiYWNrKTsKICAgKiAgICAgIHJldHVybiAoYXJnMSwgYXJnMikgPT4gdGhpcy5ydW5CaW5hcnlHdWFyZGVkKHJlZ2lzdGVyZWQsIGFyZzEsIGFyZzIpOwogICAqLwogIHZvaWQgRnVuY3Rpb24oVDEsIFQyKSBiaW5kQmluYXJ5Q2FsbGJhY2tHdWFyZGVkPFQxLCBUMj4oCiAgICAgIHZvaWQgY2FsbGJhY2soVDEgYXJndW1lbnQxLCBUMiBhcmd1bWVudDIpKTsKCiAgLyoqCiAgICogSW50ZXJjZXB0cyBlcnJvcnMgd2hlbiBhZGRlZCBwcm9ncmFtbWF0aWNhbGx5IHRvIGEgYEZ1dHVyZWAgb3IgYFN0cmVhbWAuCiAgICoKICAgKiBXaGVuIGNhbGxpbmcgW0NvbXBsZXRlci5jb21wbGV0ZUVycm9yXSwgW1N0cmVhbUNvbnRyb2xsZXIuYWRkRXJyb3JdLAogICAqIG9yIHNvbWUgW0Z1dHVyZV0gY29uc3RydWN0b3JzLCB0aGUgY3VycmVudCB6b25lIGlzIGFsbG93ZWQgdG8gaW50ZXJjZXB0CiAgICogYW5kIHJlcGxhY2UgdGhlIGVycm9yLgogICAqCiAgICogRnV0dXJlIGNvbnN0cnVjdG9ycyBpbnZva2UgdGhpcyBmdW5jdGlvbiB3aGVuIHRoZSBlcnJvciBpcyByZWNlaXZlZAogICAqIGRpcmVjdGx5LCBmb3IgZXhhbXBsZSB3aXRoIFtGdXR1cmUuZXJyb3JdLCBvciB3aGVuIHRoZSBlcnJvciBpcyBjYXVnaHQKICAgKiBzeW5jaHJvbm91c2x5LCBmb3IgZXhhbXBsZSB3aXRoIFtGdXR1cmUuc3luY10uCiAgICoKICAgKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBhbiBlcnJvciBpcyBvbmx5IHNlbnQgdGhyb3VnaCBbZXJyb3JDYWxsYmFja10KICAgKiBvbmNlLiBMaWJyYXJpZXMgdGhhdCB1c2UgaW50ZXJtZWRpYXRlIGNvbnRyb2xsZXJzIG9yIGNvbXBsZXRlcnMgbWlnaHQKICAgKiBlbmQgdXAgaW52b2tpbmcgW2Vycm9yQ2FsbGJhY2tdIG11bHRpcGxlIHRpbWVzLgogICAqCiAgICogUmV0dXJucyBgbnVsbGAgaWYgbm8gcmVwbGFjZW1lbnQgaXMgZGVzaXJlZC4gT3RoZXJ3aXNlIHJldHVybnMgYW4gaW5zdGFuY2UKICAgKiBvZiBbQXN5bmNFcnJvcl0gaG9sZGluZyB0aGUgbmV3IHBhaXIgb2YgZXJyb3IgYW5kIHN0YWNrIHRyYWNlLgogICAqCiAgICogQWx0aG91Z2ggbm90IHJlY29tbWVuZGVkLCB0aGUgcmV0dXJuZWQgaW5zdGFuY2UgbWF5IGhhdmUgaXRzIGBlcnJvcmAgbWVtYmVyCiAgICogKFtBc3luY0Vycm9yLmVycm9yXSkgYmUgZXF1YWwgdG8gYG51bGxgIGluIHdoaWNoIGNhc2UgdGhlIGVycm9yIHNob3VsZCBiZQogICAqIHJlcGxhY2VkIGJ5IGEgW051bGxUaHJvd25FcnJvcl0uCiAgICoKICAgKiBDdXN0b20gem9uZXMgbWF5IGludGVyY2VwdCB0aGlzIG9wZXJhdGlvbi4KICAgKgogICAqIEltcGxlbWVudGF0aW9ucyBvZiBhIG5ldyBhc3luY2hyb25vdXMgcHJpbWl0aXZlIHRoYXQgY29udmVydHMgc3luY2hyb25vdXMKICAgKiBlcnJvcnMgdG8gYXN5bmNocm9ub3VzIGVycm9ycyByYXJlbHkgbmVlZCB0byBpbnZva2UgW2Vycm9yQ2FsbGJhY2tdLCBzaW5jZQogICAqIGVycm9ycyBhcmUgdXN1YWxseSByZXBvcnRlZCB0aHJvdWdoIGZ1dHVyZSBjb21wbGV0ZXJzIG9yIHN0cmVhbQogICAqIGNvbnRyb2xsZXJzLgogICAqLwogIEFzeW5jRXJyb3IgZXJyb3JDYWxsYmFjayhPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSk7CgogIC8qKgogICAqIFJ1bnMgW2NhbGxiYWNrXSBhc3luY2hyb25vdXNseSBpbiB0aGlzIHpvbmUuCiAgICoKICAgKiBUaGUgZ2xvYmFsIGBzY2hlZHVsZU1pY3JvdGFza2AgZGVsZWdhdGVzIHRvIHRoZSBjdXJyZW50IHpvbmUncwogICAqIFtzY2hlZHVsZU1pY3JvdGFza10uIFRoZSByb290IHpvbmUncyBpbXBsZW1lbnRhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUKICAgKiB1bmRlcmx5aW5nIHN5c3RlbSB0byBzY2hlZHVsZSB0aGUgZ2l2ZW4gY2FsbGJhY2sgYXMgYSBtaWNyb3Rhc2suCiAgICoKICAgKiBDdXN0b20gem9uZXMgbWF5IGludGVyY2VwdCB0aGlzIG9wZXJhdGlvbiAoZm9yIGV4YW1wbGUgdG8gd3JhcCB0aGUgZ2l2ZW4KICAgKiBbY2FsbGJhY2tdKS4KICAgKi8KICB2b2lkIHNjaGVkdWxlTWljcm90YXNrKHZvaWQgY2FsbGJhY2soKSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBUaW1lciB3aGVyZSB0aGUgY2FsbGJhY2sgaXMgZXhlY3V0ZWQgaW4gdGhpcyB6b25lLgogICAqLwogIFRpbWVyIGNyZWF0ZVRpbWVyKER1cmF0aW9uIGR1cmF0aW9uLCB2b2lkIGNhbGxiYWNrKCkpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgcGVyaW9kaWMgVGltZXIgd2hlcmUgdGhlIGNhbGxiYWNrIGlzIGV4ZWN1dGVkIGluIHRoaXMgem9uZS4KICAgKi8KICBUaW1lciBjcmVhdGVQZXJpb2RpY1RpbWVyKER1cmF0aW9uIHBlcmlvZCwgdm9pZCBjYWxsYmFjayhUaW1lciB0aW1lcikpOwoKICAvKioKICAgKiBQcmludHMgdGhlIGdpdmVuIFtsaW5lXS4KICAgKgogICAqIFRoZSBnbG9iYWwgYHByaW50YCBmdW5jdGlvbiBkZWxlZ2F0ZXMgdG8gdGhlIGN1cnJlbnQgem9uZSdzIFtwcmludF0KICAgKiBmdW5jdGlvbiB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSB0byBpbnRlcmNlcHQgcHJpbnRpbmcuCiAgICoKICAgKiBFeGFtcGxlOgogICAqIGBgYAogICAqIGltcG9ydCAnZGFydDphc3luYyc7CiAgICoKICAgKiBtYWluKCkgewogICAqICAgcnVuWm9uZWQoKCkgewogICAqICAgICAvLyBFbmRzIHVwIHByaW50aW5nOiAiSW50ZXJjZXB0ZWQ6IGluIHpvbmUiLgogICAqICAgICBwcmludCgiaW4gem9uZSIpOwogICAqICAgfSwgem9uZVNwZWNpZmljYXRpb246IG5ldyBab25lU3BlY2lmaWNhdGlvbigKICAgKiAgICAgICBwcmludDogKFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCBTdHJpbmcgbGluZSkgewogICAqICAgICBwYXJlbnQucHJpbnQoem9uZSwgIkludGVyY2VwdGVkOiAkbGluZSIpOwogICAqICAgfSkpOwogICAqIH0KICAgKiBgYGAKICAgKi8KICB2b2lkIHByaW50KFN0cmluZyBsaW5lKTsKCiAgLyoqCiAgICogQ2FsbCB0byBlbnRlciB0aGUgWm9uZS4KICAgKgogICAqIFRoZSBwcmV2aW91cyBjdXJyZW50IHpvbmUgaXMgcmV0dXJuZWQuCiAgICovCiAgc3RhdGljIFpvbmUgX2VudGVyKFpvbmUgem9uZSkgewogICAgYXNzZXJ0KHpvbmUgIT0gbnVsbCk7CiAgICBhc3NlcnQoIWlkZW50aWNhbCh6b25lLCBfY3VycmVudCkpOwogICAgWm9uZSBwcmV2aW91cyA9IF9jdXJyZW50OwogICAgX2N1cnJlbnQgPSB6b25lOwogICAgcmV0dXJuIHByZXZpb3VzOwogIH0KCiAgLyoqCiAgICogQ2FsbCB0byBsZWF2ZSB0aGUgWm9uZS4KICAgKgogICAqIFRoZSBwcmV2aW91cyBab25lIG11c3QgYmUgcHJvdmlkZWQgYXMgYHByZXZpb3VzYC4KICAgKi8KICBzdGF0aWMgdm9pZCBfbGVhdmUoWm9uZSBwcmV2aW91cykgewogICAgYXNzZXJ0KHByZXZpb3VzICE9IG51bGwpOwogICAgWm9uZS5fY3VycmVudCA9IHByZXZpb3VzOwogIH0KCiAgLyoqCiAgICogUmV0cmlldmVzIHRoZSB6b25lLXZhbHVlIGFzc29jaWF0ZWQgd2l0aCBba2V5XS4KICAgKgogICAqIElmIHRoaXMgem9uZSBkb2VzIG5vdCBjb250YWluIHRoZSB2YWx1ZSBsb29rcyB1cCB0aGUgc2FtZSBrZXkgaW4gdGhlCiAgICogcGFyZW50IHpvbmUuIElmIHRoZSBba2V5XSBpcyBub3QgZm91bmQgcmV0dXJucyBgbnVsbGAuCiAgICoKICAgKiBBbnkgb2JqZWN0IGNhbiBiZSB1c2VkIGFzIGtleSwgYXMgbG9uZyBhcyBpdCBoYXMgY29tcGF0aWJsZSBgb3BlcmF0b3IgPT1gCiAgICogYW5kIGBoYXNoQ29kZWAgaW1wbGVtZW50YXRpb25zLgogICAqIEJ5IGNvbnRyb2xsaW5nIGFjY2VzcyB0byB0aGUga2V5LCBhIHpvbmUgY2FuIGdyYW50IG9yIGRlbnkgYWNjZXNzIHRvIHRoZQogICAqIHpvbmUgdmFsdWUuCiAgICovCiAgb3BlcmF0b3IgW10oT2JqZWN0IGtleSk7Cn0KClpvbmVEZWxlZ2F0ZSBfcGFyZW50RGVsZWdhdGUoX1pvbmUgem9uZSkgewogIGlmICh6b25lLnBhcmVudCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICByZXR1cm4gem9uZS5wYXJlbnQuX2RlbGVnYXRlOwp9CgpjbGFzcyBfWm9uZURlbGVnYXRlIGltcGxlbWVudHMgWm9uZURlbGVnYXRlIHsKICBmaW5hbCBfWm9uZSBfZGVsZWdhdGlvblRhcmdldDsKCiAgX1pvbmVEZWxlZ2F0ZSh0aGlzLl9kZWxlZ2F0aW9uVGFyZ2V0KTsKCiAgdm9pZCBoYW5kbGVVbmNhdWdodEVycm9yKFpvbmUgem9uZSwgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gX2RlbGVnYXRpb25UYXJnZXQuX2hhbmRsZVVuY2F1Z2h0RXJyb3I7CiAgICBfWm9uZSBpbXBsWm9uZSA9IGltcGxlbWVudGF0aW9uLnpvbmU7CiAgICBIYW5kbGVVbmNhdWdodEVycm9ySGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcigKICAgICAgICBpbXBsWm9uZSwgX3BhcmVudERlbGVnYXRlKGltcGxab25lKSwgem9uZSwgZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgUiBydW48Uj4oWm9uZSB6b25lLCBSIGYoKSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gX2RlbGVnYXRpb25UYXJnZXQuX3J1bjsKICAgIF9ab25lIGltcGxab25lID0gaW1wbGVtZW50YXRpb24uem9uZTsKICAgIFJ1bkhhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoaW1wbFpvbmUsIF9wYXJlbnREZWxlZ2F0ZShpbXBsWm9uZSksIHpvbmUsIGYpOwogIH0KCiAgUiBydW5VbmFyeTxSLCBUPihab25lIHpvbmUsIFIgZihUIGFyZyksIFQgYXJnKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSBfZGVsZWdhdGlvblRhcmdldC5fcnVuVW5hcnk7CiAgICBfWm9uZSBpbXBsWm9uZSA9IGltcGxlbWVudGF0aW9uLnpvbmU7CiAgICBSdW5VbmFyeUhhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoaW1wbFpvbmUsIF9wYXJlbnREZWxlZ2F0ZShpbXBsWm9uZSksIHpvbmUsIGYsIGFyZyk7CiAgfQoKICBSIHJ1bkJpbmFyeTxSLCBUMSwgVDI+KFpvbmUgem9uZSwgUiBmKFQxIGFyZzEsIFQyIGFyZzIpLCBUMSBhcmcxLCBUMiBhcmcyKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSBfZGVsZWdhdGlvblRhcmdldC5fcnVuQmluYXJ5OwogICAgX1pvbmUgaW1wbFpvbmUgPSBpbXBsZW1lbnRhdGlvbi56b25lOwogICAgUnVuQmluYXJ5SGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcihpbXBsWm9uZSwgX3BhcmVudERlbGVnYXRlKGltcGxab25lKSwgem9uZSwgZiwgYXJnMSwgYXJnMik7CiAgfQoKICBab25lQ2FsbGJhY2s8Uj4gcmVnaXN0ZXJDYWxsYmFjazxSPihab25lIHpvbmUsIFIgZigpKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSBfZGVsZWdhdGlvblRhcmdldC5fcmVnaXN0ZXJDYWxsYmFjazsKICAgIF9ab25lIGltcGxab25lID0gaW1wbGVtZW50YXRpb24uem9uZTsKICAgIFJlZ2lzdGVyQ2FsbGJhY2tIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKGltcGxab25lLCBfcGFyZW50RGVsZWdhdGUoaW1wbFpvbmUpLCB6b25lLCBmKTsKICB9CgogIFpvbmVVbmFyeUNhbGxiYWNrPFIsIFQ+IHJlZ2lzdGVyVW5hcnlDYWxsYmFjazxSLCBUPihab25lIHpvbmUsIFIgZihUIGFyZykpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IF9kZWxlZ2F0aW9uVGFyZ2V0Ll9yZWdpc3RlclVuYXJ5Q2FsbGJhY2s7CiAgICBfWm9uZSBpbXBsWm9uZSA9IGltcGxlbWVudGF0aW9uLnpvbmU7CiAgICBSZWdpc3RlclVuYXJ5Q2FsbGJhY2tIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKGltcGxab25lLCBfcGFyZW50RGVsZWdhdGUoaW1wbFpvbmUpLCB6b25lLCBmKTsKICB9CgogIFpvbmVCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+IHJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2s8UiwgVDEsIFQyPigKICAgICAgWm9uZSB6b25lLCBSIGYoVDEgYXJnMSwgVDIgYXJnMikpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IF9kZWxlZ2F0aW9uVGFyZ2V0Ll9yZWdpc3RlckJpbmFyeUNhbGxiYWNrOwogICAgX1pvbmUgaW1wbFpvbmUgPSBpbXBsZW1lbnRhdGlvbi56b25lOwogICAgUmVnaXN0ZXJCaW5hcnlDYWxsYmFja0hhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoaW1wbFpvbmUsIF9wYXJlbnREZWxlZ2F0ZShpbXBsWm9uZSksIHpvbmUsIGYpOwogIH0KCiAgQXN5bmNFcnJvciBlcnJvckNhbGxiYWNrKFpvbmUgem9uZSwgT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IF9kZWxlZ2F0aW9uVGFyZ2V0Ll9lcnJvckNhbGxiYWNrOwogICAgX1pvbmUgaW1wbFpvbmUgPSBpbXBsZW1lbnRhdGlvbi56b25lOwogICAgaWYgKGlkZW50aWNhbChpbXBsWm9uZSwgX3Jvb3Rab25lKSkgcmV0dXJuIG51bGw7CiAgICBFcnJvckNhbGxiYWNrSGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcigKICAgICAgICBpbXBsWm9uZSwgX3BhcmVudERlbGVnYXRlKGltcGxab25lKSwgem9uZSwgZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgdm9pZCBzY2hlZHVsZU1pY3JvdGFzayhab25lIHpvbmUsIGYoKSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gX2RlbGVnYXRpb25UYXJnZXQuX3NjaGVkdWxlTWljcm90YXNrOwogICAgX1pvbmUgaW1wbFpvbmUgPSBpbXBsZW1lbnRhdGlvbi56b25lOwogICAgU2NoZWR1bGVNaWNyb3Rhc2tIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIGhhbmRsZXIoaW1wbFpvbmUsIF9wYXJlbnREZWxlZ2F0ZShpbXBsWm9uZSksIHpvbmUsIGYpOwogIH0KCiAgVGltZXIgY3JlYXRlVGltZXIoWm9uZSB6b25lLCBEdXJhdGlvbiBkdXJhdGlvbiwgdm9pZCBmKCkpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IF9kZWxlZ2F0aW9uVGFyZ2V0Ll9jcmVhdGVUaW1lcjsKICAgIF9ab25lIGltcGxab25lID0gaW1wbGVtZW50YXRpb24uem9uZTsKICAgIENyZWF0ZVRpbWVySGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcihpbXBsWm9uZSwgX3BhcmVudERlbGVnYXRlKGltcGxab25lKSwgem9uZSwgZHVyYXRpb24sIGYpOwogIH0KCiAgVGltZXIgY3JlYXRlUGVyaW9kaWNUaW1lcihab25lIHpvbmUsIER1cmF0aW9uIHBlcmlvZCwgdm9pZCBmKFRpbWVyIHRpbWVyKSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gX2RlbGVnYXRpb25UYXJnZXQuX2NyZWF0ZVBlcmlvZGljVGltZXI7CiAgICBfWm9uZSBpbXBsWm9uZSA9IGltcGxlbWVudGF0aW9uLnpvbmU7CiAgICBDcmVhdGVQZXJpb2RpY1RpbWVySGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcihpbXBsWm9uZSwgX3BhcmVudERlbGVnYXRlKGltcGxab25lKSwgem9uZSwgcGVyaW9kLCBmKTsKICB9CgogIHZvaWQgcHJpbnQoWm9uZSB6b25lLCBTdHJpbmcgbGluZSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gX2RlbGVnYXRpb25UYXJnZXQuX3ByaW50OwogICAgX1pvbmUgaW1wbFpvbmUgPSBpbXBsZW1lbnRhdGlvbi56b25lOwogICAgUHJpbnRIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIGhhbmRsZXIoaW1wbFpvbmUsIF9wYXJlbnREZWxlZ2F0ZShpbXBsWm9uZSksIHpvbmUsIGxpbmUpOwogIH0KCiAgWm9uZSBmb3JrKFpvbmUgem9uZSwgWm9uZVNwZWNpZmljYXRpb24gc3BlY2lmaWNhdGlvbiwgTWFwIHpvbmVWYWx1ZXMpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IF9kZWxlZ2F0aW9uVGFyZ2V0Ll9mb3JrOwogICAgX1pvbmUgaW1wbFpvbmUgPSBpbXBsZW1lbnRhdGlvbi56b25lOwogICAgRm9ya0hhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoCiAgICAgICAgaW1wbFpvbmUsIF9wYXJlbnREZWxlZ2F0ZShpbXBsWm9uZSksIHpvbmUsIHNwZWNpZmljYXRpb24sIHpvbmVWYWx1ZXMpOwogIH0KfQoKLyoqCiAqIEJhc2UgY2xhc3MgZm9yIFpvbmUgaW1wbGVtZW50YXRpb25zLgogKi8KYWJzdHJhY3QgY2xhc3MgX1pvbmUgaW1wbGVtZW50cyBab25lIHsKICBjb25zdCBfWm9uZSgpOwoKICAvLyBUT0RPKGZsb2l0c2NoKTogdGhlIHR5cGVzIG9mIHRoZSBgX1pvbmVGdW5jdGlvbmBzIHNob3VsZCBoYXZlIGEgdHlwZSBmb3IKICAvLyBhbGwgZmllbGRzLgogIF9ab25lRnVuY3Rpb248RnVuY3Rpb24+IGdldCBfcnVuOwogIF9ab25lRnVuY3Rpb248RnVuY3Rpb24+IGdldCBfcnVuVW5hcnk7CiAgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4gZ2V0IF9ydW5CaW5hcnk7CiAgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4gZ2V0IF9yZWdpc3RlckNhbGxiYWNrOwogIF9ab25lRnVuY3Rpb248RnVuY3Rpb24+IGdldCBfcmVnaXN0ZXJVbmFyeUNhbGxiYWNrOwogIF9ab25lRnVuY3Rpb248RnVuY3Rpb24+IGdldCBfcmVnaXN0ZXJCaW5hcnlDYWxsYmFjazsKICBfWm9uZUZ1bmN0aW9uPEVycm9yQ2FsbGJhY2tIYW5kbGVyPiBnZXQgX2Vycm9yQ2FsbGJhY2s7CiAgX1pvbmVGdW5jdGlvbjxTY2hlZHVsZU1pY3JvdGFza0hhbmRsZXI+IGdldCBfc2NoZWR1bGVNaWNyb3Rhc2s7CiAgX1pvbmVGdW5jdGlvbjxDcmVhdGVUaW1lckhhbmRsZXI+IGdldCBfY3JlYXRlVGltZXI7CiAgX1pvbmVGdW5jdGlvbjxDcmVhdGVQZXJpb2RpY1RpbWVySGFuZGxlcj4gZ2V0IF9jcmVhdGVQZXJpb2RpY1RpbWVyOwogIF9ab25lRnVuY3Rpb248UHJpbnRIYW5kbGVyPiBnZXQgX3ByaW50OwogIF9ab25lRnVuY3Rpb248Rm9ya0hhbmRsZXI+IGdldCBfZm9yazsKICBfWm9uZUZ1bmN0aW9uPEhhbmRsZVVuY2F1Z2h0RXJyb3JIYW5kbGVyPiBnZXQgX2hhbmRsZVVuY2F1Z2h0RXJyb3I7CiAgX1pvbmUgZ2V0IHBhcmVudDsKICBab25lRGVsZWdhdGUgZ2V0IF9kZWxlZ2F0ZTsKICBNYXAgZ2V0IF9tYXA7CgogIGJvb2wgaW5TYW1lRXJyb3Jab25lKFpvbmUgb3RoZXJab25lKSB7CiAgICByZXR1cm4gaWRlbnRpY2FsKHRoaXMsIG90aGVyWm9uZSkgfHwKICAgICAgICBpZGVudGljYWwoZXJyb3Jab25lLCBvdGhlclpvbmUuZXJyb3Jab25lKTsKICB9Cn0KCmNsYXNzIF9DdXN0b21ab25lIGV4dGVuZHMgX1pvbmUgewogIC8vIFRoZSBhY3R1YWwgem9uZSBhbmQgaW1wbGVtZW50YXRpb24gb2YgZWFjaCBvZiB0aGVzZQogIC8vIGluaGVyaXRhYmxlIHpvbmUgZnVuY3Rpb25zLgogIC8vIFRPRE8oZmxvaXRzY2gpOiB0aGUgdHlwZXMgb2YgdGhlIGBfWm9uZUZ1bmN0aW9uYHMgc2hvdWxkIGhhdmUgYSB0eXBlIGZvcgogIC8vIGFsbCBmaWVsZHMuCiAgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4gX3J1bjsKICBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPiBfcnVuVW5hcnk7CiAgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4gX3J1bkJpbmFyeTsKICBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPiBfcmVnaXN0ZXJDYWxsYmFjazsKICBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPiBfcmVnaXN0ZXJVbmFyeUNhbGxiYWNrOwogIF9ab25lRnVuY3Rpb248RnVuY3Rpb24+IF9yZWdpc3RlckJpbmFyeUNhbGxiYWNrOwogIF9ab25lRnVuY3Rpb248RXJyb3JDYWxsYmFja0hhbmRsZXI+IF9lcnJvckNhbGxiYWNrOwogIF9ab25lRnVuY3Rpb248U2NoZWR1bGVNaWNyb3Rhc2tIYW5kbGVyPiBfc2NoZWR1bGVNaWNyb3Rhc2s7CiAgX1pvbmVGdW5jdGlvbjxDcmVhdGVUaW1lckhhbmRsZXI+IF9jcmVhdGVUaW1lcjsKICBfWm9uZUZ1bmN0aW9uPENyZWF0ZVBlcmlvZGljVGltZXJIYW5kbGVyPiBfY3JlYXRlUGVyaW9kaWNUaW1lcjsKICBfWm9uZUZ1bmN0aW9uPFByaW50SGFuZGxlcj4gX3ByaW50OwogIF9ab25lRnVuY3Rpb248Rm9ya0hhbmRsZXI+IF9mb3JrOwogIF9ab25lRnVuY3Rpb248SGFuZGxlVW5jYXVnaHRFcnJvckhhbmRsZXI+IF9oYW5kbGVVbmNhdWdodEVycm9yOwoKICAvLyBBIGNhY2hlZCBkZWxlZ2F0ZSB0byB0aGlzIHpvbmUuCiAgWm9uZURlbGVnYXRlIF9kZWxlZ2F0ZUNhY2hlOwoKICAvLy8gVGhlIHBhcmVudCB6b25lLgogIGZpbmFsIF9ab25lIHBhcmVudDsKCiAgLy8vIFRoZSB6b25lJ3Mgc2NvcGVkIHZhbHVlIGRlY2xhcmF0aW9uIG1hcC4KICAvLy8KICAvLy8gVGhpcyBpcyBhbHdheXMgYSBbSGFzaE1hcF0uCiAgZmluYWwgTWFwIF9tYXA7CgogIFpvbmVEZWxlZ2F0ZSBnZXQgX2RlbGVnYXRlIHsKICAgIGlmIChfZGVsZWdhdGVDYWNoZSAhPSBudWxsKSByZXR1cm4gX2RlbGVnYXRlQ2FjaGU7CiAgICBfZGVsZWdhdGVDYWNoZSA9IG5ldyBfWm9uZURlbGVnYXRlKHRoaXMpOwogICAgcmV0dXJuIF9kZWxlZ2F0ZUNhY2hlOwogIH0KCiAgX0N1c3RvbVpvbmUodGhpcy5wYXJlbnQsIFpvbmVTcGVjaWZpY2F0aW9uIHNwZWNpZmljYXRpb24sIHRoaXMuX21hcCkgewogICAgLy8gVGhlIHJvb3Qgem9uZSB3aWxsIGhhdmUgaW1wbGVtZW50YXRpb25zIG9mIGFsbCBwYXJ0cyBvZiB0aGUKICAgIC8vIHNwZWNpZmljYXRpb24sIHNvIGl0IHdpbGwgbmV2ZXIgdHJ5IHRvIGFjY2VzcyB0aGUgKG51bGwpIHBhcmVudC4KICAgIC8vIEFsbCBvdGhlciB6b25lcyBoYXZlIGEgbm9uLW51bGwgcGFyZW50LgogICAgX3J1biA9IChzcGVjaWZpY2F0aW9uLnJ1biAhPSBudWxsKQogICAgICAgID8gbmV3IF9ab25lRnVuY3Rpb248RnVuY3Rpb24+KHRoaXMsIHNwZWNpZmljYXRpb24ucnVuKQogICAgICAgIDogcGFyZW50Ll9ydW47CiAgICBfcnVuVW5hcnkgPSAoc3BlY2lmaWNhdGlvbi5ydW5VbmFyeSAhPSBudWxsKQogICAgICAgID8gbmV3IF9ab25lRnVuY3Rpb248RnVuY3Rpb24+KHRoaXMsIHNwZWNpZmljYXRpb24ucnVuVW5hcnkpCiAgICAgICAgOiBwYXJlbnQuX3J1blVuYXJ5OwogICAgX3J1bkJpbmFyeSA9IChzcGVjaWZpY2F0aW9uLnJ1bkJpbmFyeSAhPSBudWxsKQogICAgICAgID8gbmV3IF9ab25lRnVuY3Rpb248RnVuY3Rpb24+KHRoaXMsIHNwZWNpZmljYXRpb24ucnVuQmluYXJ5KQogICAgICAgIDogcGFyZW50Ll9ydW5CaW5hcnk7CiAgICBfcmVnaXN0ZXJDYWxsYmFjayA9IChzcGVjaWZpY2F0aW9uLnJlZ2lzdGVyQ2FsbGJhY2sgIT0gbnVsbCkKICAgICAgICA/IG5ldyBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPih0aGlzLCBzcGVjaWZpY2F0aW9uLnJlZ2lzdGVyQ2FsbGJhY2spCiAgICAgICAgOiBwYXJlbnQuX3JlZ2lzdGVyQ2FsbGJhY2s7CiAgICBfcmVnaXN0ZXJVbmFyeUNhbGxiYWNrID0gKHNwZWNpZmljYXRpb24ucmVnaXN0ZXJVbmFyeUNhbGxiYWNrICE9IG51bGwpCiAgICAgICAgPyBuZXcgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4odGhpcywgc3BlY2lmaWNhdGlvbi5yZWdpc3RlclVuYXJ5Q2FsbGJhY2spCiAgICAgICAgOiBwYXJlbnQuX3JlZ2lzdGVyVW5hcnlDYWxsYmFjazsKICAgIF9yZWdpc3RlckJpbmFyeUNhbGxiYWNrID0gKHNwZWNpZmljYXRpb24ucmVnaXN0ZXJCaW5hcnlDYWxsYmFjayAhPSBudWxsKQogICAgICAgID8gbmV3IF9ab25lRnVuY3Rpb248RnVuY3Rpb24+KAogICAgICAgICAgICB0aGlzLCBzcGVjaWZpY2F0aW9uLnJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2spCiAgICAgICAgOiBwYXJlbnQuX3JlZ2lzdGVyQmluYXJ5Q2FsbGJhY2s7CiAgICBfZXJyb3JDYWxsYmFjayA9IChzcGVjaWZpY2F0aW9uLmVycm9yQ2FsbGJhY2sgIT0gbnVsbCkKICAgICAgICA/IG5ldyBfWm9uZUZ1bmN0aW9uPEVycm9yQ2FsbGJhY2tIYW5kbGVyPigKICAgICAgICAgICAgdGhpcywgc3BlY2lmaWNhdGlvbi5lcnJvckNhbGxiYWNrKQogICAgICAgIDogcGFyZW50Ll9lcnJvckNhbGxiYWNrOwogICAgX3NjaGVkdWxlTWljcm90YXNrID0gKHNwZWNpZmljYXRpb24uc2NoZWR1bGVNaWNyb3Rhc2sgIT0gbnVsbCkKICAgICAgICA/IG5ldyBfWm9uZUZ1bmN0aW9uPFNjaGVkdWxlTWljcm90YXNrSGFuZGxlcj4oCiAgICAgICAgICAgIHRoaXMsIHNwZWNpZmljYXRpb24uc2NoZWR1bGVNaWNyb3Rhc2spCiAgICAgICAgOiBwYXJlbnQuX3NjaGVkdWxlTWljcm90YXNrOwogICAgX2NyZWF0ZVRpbWVyID0gKHNwZWNpZmljYXRpb24uY3JlYXRlVGltZXIgIT0gbnVsbCkKICAgICAgICA/IG5ldyBfWm9uZUZ1bmN0aW9uPENyZWF0ZVRpbWVySGFuZGxlcj4odGhpcywgc3BlY2lmaWNhdGlvbi5jcmVhdGVUaW1lcikKICAgICAgICA6IHBhcmVudC5fY3JlYXRlVGltZXI7CiAgICBfY3JlYXRlUGVyaW9kaWNUaW1lciA9IChzcGVjaWZpY2F0aW9uLmNyZWF0ZVBlcmlvZGljVGltZXIgIT0gbnVsbCkKICAgICAgICA/IG5ldyBfWm9uZUZ1bmN0aW9uPENyZWF0ZVBlcmlvZGljVGltZXJIYW5kbGVyPigKICAgICAgICAgICAgdGhpcywgc3BlY2lmaWNhdGlvbi5jcmVhdGVQZXJpb2RpY1RpbWVyKQogICAgICAgIDogcGFyZW50Ll9jcmVhdGVQZXJpb2RpY1RpbWVyOwogICAgX3ByaW50ID0gKHNwZWNpZmljYXRpb24ucHJpbnQgIT0gbnVsbCkKICAgICAgICA/IG5ldyBfWm9uZUZ1bmN0aW9uPFByaW50SGFuZGxlcj4odGhpcywgc3BlY2lmaWNhdGlvbi5wcmludCkKICAgICAgICA6IHBhcmVudC5fcHJpbnQ7CiAgICBfZm9yayA9IChzcGVjaWZpY2F0aW9uLmZvcmsgIT0gbnVsbCkKICAgICAgICA/IG5ldyBfWm9uZUZ1bmN0aW9uPEZvcmtIYW5kbGVyPih0aGlzLCBzcGVjaWZpY2F0aW9uLmZvcmspCiAgICAgICAgOiBwYXJlbnQuX2Zvcms7CiAgICBfaGFuZGxlVW5jYXVnaHRFcnJvciA9IChzcGVjaWZpY2F0aW9uLmhhbmRsZVVuY2F1Z2h0RXJyb3IgIT0gbnVsbCkKICAgICAgICA/IG5ldyBfWm9uZUZ1bmN0aW9uPEhhbmRsZVVuY2F1Z2h0RXJyb3JIYW5kbGVyPigKICAgICAgICAgICAgdGhpcywgc3BlY2lmaWNhdGlvbi5oYW5kbGVVbmNhdWdodEVycm9yKQogICAgICAgIDogcGFyZW50Ll9oYW5kbGVVbmNhdWdodEVycm9yOwogIH0KCiAgLyoqCiAgICogVGhlIGNsb3Nlc3QgZXJyb3ItaGFuZGxpbmcgem9uZS4KICAgKgogICAqIFJldHVybnMgYHRoaXNgIGlmIGB0aGlzYCBoYXMgYW4gZXJyb3ItaGFuZGxlci4gT3RoZXJ3aXNlIHJldHVybnMgdGhlCiAgICogcGFyZW50J3MgZXJyb3Item9uZS4KICAgKi8KICBab25lIGdldCBlcnJvclpvbmUgPT4gX2hhbmRsZVVuY2F1Z2h0RXJyb3Iuem9uZTsKCiAgdm9pZCBydW5HdWFyZGVkKHZvaWQgZigpKSB7CiAgICB0cnkgewogICAgICBydW4oZik7CiAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgIGhhbmRsZVVuY2F1Z2h0RXJyb3IoZSwgcyk7CiAgICB9CiAgfQoKICB2b2lkIHJ1blVuYXJ5R3VhcmRlZDxUPih2b2lkIGYoVCBhcmcpLCBUIGFyZykgewogICAgdHJ5IHsKICAgICAgcnVuVW5hcnkoZiwgYXJnKTsKICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgaGFuZGxlVW5jYXVnaHRFcnJvcihlLCBzKTsKICAgIH0KICB9CgogIHZvaWQgcnVuQmluYXJ5R3VhcmRlZDxUMSwgVDI+KHZvaWQgZihUMSBhcmcxLCBUMiBhcmcyKSwgVDEgYXJnMSwgVDIgYXJnMikgewogICAgdHJ5IHsKICAgICAgcnVuQmluYXJ5KGYsIGFyZzEsIGFyZzIpOwogICAgfSBjYXRjaCAoZSwgcykgewogICAgICBoYW5kbGVVbmNhdWdodEVycm9yKGUsIHMpOwogICAgfQogIH0KCiAgWm9uZUNhbGxiYWNrPFI+IGJpbmRDYWxsYmFjazxSPihSIGYoKSkgewogICAgdmFyIHJlZ2lzdGVyZWQgPSByZWdpc3RlckNhbGxiYWNrKGYpOwogICAgcmV0dXJuICgpID0+IHRoaXMucnVuKHJlZ2lzdGVyZWQpOwogIH0KCiAgWm9uZVVuYXJ5Q2FsbGJhY2s8UiwgVD4gYmluZFVuYXJ5Q2FsbGJhY2s8UiwgVD4oUiBmKFQgYXJnKSkgewogICAgdmFyIHJlZ2lzdGVyZWQgPSByZWdpc3RlclVuYXJ5Q2FsbGJhY2soZik7CiAgICByZXR1cm4gKGFyZykgPT4gdGhpcy5ydW5VbmFyeShyZWdpc3RlcmVkLCBhcmcpOwogIH0KCiAgWm9uZUJpbmFyeUNhbGxiYWNrPFIsIFQxLCBUMj4gYmluZEJpbmFyeUNhbGxiYWNrPFIsIFQxLCBUMj4oCiAgICAgIFIgZihUMSBhcmcxLCBUMiBhcmcyKSkgewogICAgdmFyIHJlZ2lzdGVyZWQgPSByZWdpc3RlckJpbmFyeUNhbGxiYWNrKGYpOwogICAgcmV0dXJuIChhcmcxLCBhcmcyKSA9PiB0aGlzLnJ1bkJpbmFyeShyZWdpc3RlcmVkLCBhcmcxLCBhcmcyKTsKICB9CgogIHZvaWQgRnVuY3Rpb24oKSBiaW5kQ2FsbGJhY2tHdWFyZGVkKHZvaWQgZigpKSB7CiAgICB2YXIgcmVnaXN0ZXJlZCA9IHJlZ2lzdGVyQ2FsbGJhY2soZik7CiAgICByZXR1cm4gKCkgPT4gdGhpcy5ydW5HdWFyZGVkKHJlZ2lzdGVyZWQpOwogIH0KCiAgdm9pZCBGdW5jdGlvbihUKSBiaW5kVW5hcnlDYWxsYmFja0d1YXJkZWQ8VD4odm9pZCBmKFQgYXJnKSkgewogICAgdmFyIHJlZ2lzdGVyZWQgPSByZWdpc3RlclVuYXJ5Q2FsbGJhY2soZik7CiAgICByZXR1cm4gKGFyZykgPT4gdGhpcy5ydW5VbmFyeUd1YXJkZWQocmVnaXN0ZXJlZCwgYXJnKTsKICB9CgogIHZvaWQgRnVuY3Rpb24oVDEsIFQyKSBiaW5kQmluYXJ5Q2FsbGJhY2tHdWFyZGVkPFQxLCBUMj4oCiAgICAgIHZvaWQgZihUMSBhcmcxLCBUMiBhcmcyKSkgewogICAgdmFyIHJlZ2lzdGVyZWQgPSByZWdpc3RlckJpbmFyeUNhbGxiYWNrKGYpOwogICAgcmV0dXJuIChhcmcxLCBhcmcyKSA9PiB0aGlzLnJ1bkJpbmFyeUd1YXJkZWQocmVnaXN0ZXJlZCwgYXJnMSwgYXJnMik7CiAgfQoKICBvcGVyYXRvciBbXShPYmplY3Qga2V5KSB7CiAgICB2YXIgcmVzdWx0ID0gX21hcFtrZXldOwogICAgaWYgKHJlc3VsdCAhPSBudWxsIHx8IF9tYXAuY29udGFpbnNLZXkoa2V5KSkgcmV0dXJuIHJlc3VsdDsKICAgIC8vIElmIHdlIGFyZSBub3QgdGhlIHJvb3Qgem9uZSwgbG9vayB1cCBpbiB0aGUgcGFyZW50IHpvbmUuCiAgICBpZiAocGFyZW50ICE9IG51bGwpIHsKICAgICAgLy8gV2UgZG8gbm90IG9wdGltaXplIGZvciByZXBlYXRlZGx5IGxvb2tpbmcgdXAgYSBrZXkgd2hpY2ggaXNuJ3QKICAgICAgLy8gdGhlcmUuIFRoYXQgd291bGQgcmVxdWlyZSBzdG9yaW5nIHRoZSBrZXkgYW5kIGtlZXBpbmcgaXQgYWxpdmUuCiAgICAgIC8vIENvcHlpbmcgdGhlIGtleS92YWx1ZSBmcm9tIHRoZSBwYXJlbnQgZG9lcyBub3Qga2VlcCBhbnkgbmV3IHZhbHVlcwogICAgICAvLyBhbGl2ZS4KICAgICAgdmFyIHZhbHVlID0gcGFyZW50W2tleV07CiAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgICAgX21hcFtrZXldID0gdmFsdWU7CiAgICAgIH0KICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQogICAgYXNzZXJ0KHRoaXMgPT0gX3Jvb3Rab25lKTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8gTWV0aG9kcyB0aGF0IGNhbiBiZSBjdXN0b21pemVkIGJ5IHRoZSB6b25lIHNwZWNpZmljYXRpb24uCgogIHZvaWQgaGFuZGxlVW5jYXVnaHRFcnJvcihlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSB0aGlzLl9oYW5kbGVVbmNhdWdodEVycm9yOwogICAgYXNzZXJ0KGltcGxlbWVudGF0aW9uICE9IG51bGwpOwogICAgWm9uZURlbGVnYXRlIHBhcmVudERlbGVnYXRlID0gX3BhcmVudERlbGVnYXRlKGltcGxlbWVudGF0aW9uLnpvbmUpOwogICAgSGFuZGxlVW5jYXVnaHRFcnJvckhhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoCiAgICAgICAgaW1wbGVtZW50YXRpb24uem9uZSwgcGFyZW50RGVsZWdhdGUsIHRoaXMsIGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIFpvbmUgZm9yayh7Wm9uZVNwZWNpZmljYXRpb24gc3BlY2lmaWNhdGlvbiwgTWFwIHpvbmVWYWx1ZXN9KSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSB0aGlzLl9mb3JrOwogICAgYXNzZXJ0KGltcGxlbWVudGF0aW9uICE9IG51bGwpOwogICAgWm9uZURlbGVnYXRlIHBhcmVudERlbGVnYXRlID0gX3BhcmVudERlbGVnYXRlKGltcGxlbWVudGF0aW9uLnpvbmUpOwogICAgRm9ya0hhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoCiAgICAgICAgaW1wbGVtZW50YXRpb24uem9uZSwgcGFyZW50RGVsZWdhdGUsIHRoaXMsIHNwZWNpZmljYXRpb24sIHpvbmVWYWx1ZXMpOwogIH0KCiAgUiBydW48Uj4oUiBmKCkpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IHRoaXMuX3J1bjsKICAgIGFzc2VydChpbXBsZW1lbnRhdGlvbiAhPSBudWxsKTsKICAgIFpvbmVEZWxlZ2F0ZSBwYXJlbnREZWxlZ2F0ZSA9IF9wYXJlbnREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbi56b25lKTsKICAgIFJ1bkhhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoaW1wbGVtZW50YXRpb24uem9uZSwgcGFyZW50RGVsZWdhdGUsIHRoaXMsIGYpOwogIH0KCiAgUiBydW5VbmFyeTxSLCBUPihSIGYoVCBhcmcpLCBUIGFyZykgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gdGhpcy5fcnVuVW5hcnk7CiAgICBhc3NlcnQoaW1wbGVtZW50YXRpb24gIT0gbnVsbCk7CiAgICBab25lRGVsZWdhdGUgcGFyZW50RGVsZWdhdGUgPSBfcGFyZW50RGVsZWdhdGUoaW1wbGVtZW50YXRpb24uem9uZSk7CiAgICBSdW5VbmFyeUhhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoaW1wbGVtZW50YXRpb24uem9uZSwgcGFyZW50RGVsZWdhdGUsIHRoaXMsIGYsIGFyZyk7CiAgfQoKICBSIHJ1bkJpbmFyeTxSLCBUMSwgVDI+KFIgZihUMSBhcmcxLCBUMiBhcmcyKSwgVDEgYXJnMSwgVDIgYXJnMikgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gdGhpcy5fcnVuQmluYXJ5OwogICAgYXNzZXJ0KGltcGxlbWVudGF0aW9uICE9IG51bGwpOwogICAgWm9uZURlbGVnYXRlIHBhcmVudERlbGVnYXRlID0gX3BhcmVudERlbGVnYXRlKGltcGxlbWVudGF0aW9uLnpvbmUpOwogICAgUnVuQmluYXJ5SGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcihpbXBsZW1lbnRhdGlvbi56b25lLCBwYXJlbnREZWxlZ2F0ZSwgdGhpcywgZiwgYXJnMSwgYXJnMik7CiAgfQoKICBab25lQ2FsbGJhY2s8Uj4gcmVnaXN0ZXJDYWxsYmFjazxSPihSIGNhbGxiYWNrKCkpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IHRoaXMuX3JlZ2lzdGVyQ2FsbGJhY2s7CiAgICBhc3NlcnQoaW1wbGVtZW50YXRpb24gIT0gbnVsbCk7CiAgICBab25lRGVsZWdhdGUgcGFyZW50RGVsZWdhdGUgPSBfcGFyZW50RGVsZWdhdGUoaW1wbGVtZW50YXRpb24uem9uZSk7CiAgICBSZWdpc3RlckNhbGxiYWNrSGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcihpbXBsZW1lbnRhdGlvbi56b25lLCBwYXJlbnREZWxlZ2F0ZSwgdGhpcywgY2FsbGJhY2spOwogIH0KCiAgWm9uZVVuYXJ5Q2FsbGJhY2s8UiwgVD4gcmVnaXN0ZXJVbmFyeUNhbGxiYWNrPFIsIFQ+KFIgY2FsbGJhY2soVCBhcmcpKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSB0aGlzLl9yZWdpc3RlclVuYXJ5Q2FsbGJhY2s7CiAgICBhc3NlcnQoaW1wbGVtZW50YXRpb24gIT0gbnVsbCk7CiAgICBab25lRGVsZWdhdGUgcGFyZW50RGVsZWdhdGUgPSBfcGFyZW50RGVsZWdhdGUoaW1wbGVtZW50YXRpb24uem9uZSk7CiAgICBSZWdpc3RlclVuYXJ5Q2FsbGJhY2tIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKGltcGxlbWVudGF0aW9uLnpvbmUsIHBhcmVudERlbGVnYXRlLCB0aGlzLCBjYWxsYmFjayk7CiAgfQoKICBab25lQmluYXJ5Q2FsbGJhY2s8UiwgVDEsIFQyPiByZWdpc3RlckJpbmFyeUNhbGxiYWNrPFIsIFQxLCBUMj4oCiAgICAgIFIgY2FsbGJhY2soVDEgYXJnMSwgVDIgYXJnMikpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IHRoaXMuX3JlZ2lzdGVyQmluYXJ5Q2FsbGJhY2s7CiAgICBhc3NlcnQoaW1wbGVtZW50YXRpb24gIT0gbnVsbCk7CiAgICBab25lRGVsZWdhdGUgcGFyZW50RGVsZWdhdGUgPSBfcGFyZW50RGVsZWdhdGUoaW1wbGVtZW50YXRpb24uem9uZSk7CiAgICBSZWdpc3RlckJpbmFyeUNhbGxiYWNrSGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcihpbXBsZW1lbnRhdGlvbi56b25lLCBwYXJlbnREZWxlZ2F0ZSwgdGhpcywgY2FsbGJhY2spOwogIH0KCiAgQXN5bmNFcnJvciBlcnJvckNhbGxiYWNrKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSB0aGlzLl9lcnJvckNhbGxiYWNrOwogICAgYXNzZXJ0KGltcGxlbWVudGF0aW9uICE9IG51bGwpOwogICAgZmluYWwgWm9uZSBpbXBsZW1lbnRhdGlvblpvbmUgPSBpbXBsZW1lbnRhdGlvbi56b25lOwogICAgaWYgKGlkZW50aWNhbChpbXBsZW1lbnRhdGlvblpvbmUsIF9yb290Wm9uZSkpIHJldHVybiBudWxsOwogICAgZmluYWwgWm9uZURlbGVnYXRlIHBhcmVudERlbGVnYXRlID0gX3BhcmVudERlbGVnYXRlKGltcGxlbWVudGF0aW9uWm9uZSk7CiAgICBFcnJvckNhbGxiYWNrSGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcihpbXBsZW1lbnRhdGlvblpvbmUsIHBhcmVudERlbGVnYXRlLCB0aGlzLCBlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICB2b2lkIHNjaGVkdWxlTWljcm90YXNrKHZvaWQgZigpKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSB0aGlzLl9zY2hlZHVsZU1pY3JvdGFzazsKICAgIGFzc2VydChpbXBsZW1lbnRhdGlvbiAhPSBudWxsKTsKICAgIFpvbmVEZWxlZ2F0ZSBwYXJlbnREZWxlZ2F0ZSA9IF9wYXJlbnREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbi56b25lKTsKICAgIFNjaGVkdWxlTWljcm90YXNrSGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcihpbXBsZW1lbnRhdGlvbi56b25lLCBwYXJlbnREZWxlZ2F0ZSwgdGhpcywgZik7CiAgfQoKICBUaW1lciBjcmVhdGVUaW1lcihEdXJhdGlvbiBkdXJhdGlvbiwgdm9pZCBmKCkpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IHRoaXMuX2NyZWF0ZVRpbWVyOwogICAgYXNzZXJ0KGltcGxlbWVudGF0aW9uICE9IG51bGwpOwogICAgWm9uZURlbGVnYXRlIHBhcmVudERlbGVnYXRlID0gX3BhcmVudERlbGVnYXRlKGltcGxlbWVudGF0aW9uLnpvbmUpOwogICAgQ3JlYXRlVGltZXJIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKGltcGxlbWVudGF0aW9uLnpvbmUsIHBhcmVudERlbGVnYXRlLCB0aGlzLCBkdXJhdGlvbiwgZik7CiAgfQoKICBUaW1lciBjcmVhdGVQZXJpb2RpY1RpbWVyKER1cmF0aW9uIGR1cmF0aW9uLCB2b2lkIGYoVGltZXIgdGltZXIpKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSB0aGlzLl9jcmVhdGVQZXJpb2RpY1RpbWVyOwogICAgYXNzZXJ0KGltcGxlbWVudGF0aW9uICE9IG51bGwpOwogICAgWm9uZURlbGVnYXRlIHBhcmVudERlbGVnYXRlID0gX3BhcmVudERlbGVnYXRlKGltcGxlbWVudGF0aW9uLnpvbmUpOwogICAgQ3JlYXRlUGVyaW9kaWNUaW1lckhhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoaW1wbGVtZW50YXRpb24uem9uZSwgcGFyZW50RGVsZWdhdGUsIHRoaXMsIGR1cmF0aW9uLCBmKTsKICB9CgogIHZvaWQgcHJpbnQoU3RyaW5nIGxpbmUpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IHRoaXMuX3ByaW50OwogICAgYXNzZXJ0KGltcGxlbWVudGF0aW9uICE9IG51bGwpOwogICAgWm9uZURlbGVnYXRlIHBhcmVudERlbGVnYXRlID0gX3BhcmVudERlbGVnYXRlKGltcGxlbWVudGF0aW9uLnpvbmUpOwogICAgUHJpbnRIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKGltcGxlbWVudGF0aW9uLnpvbmUsIHBhcmVudERlbGVnYXRlLCB0aGlzLCBsaW5lKTsKICB9Cn0KCnZvaWQgX3Jvb3RIYW5kbGVVbmNhdWdodEVycm9yKAogICAgWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsIGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICBfc2NoZWR1bGVQcmlvcml0eUFzeW5jQ2FsbGJhY2soKCkgewogICAgZXJyb3IgPz89IG5ldyBOdWxsVGhyb3duRXJyb3IoKTsKICAgIGlmIChzdGFja1RyYWNlID09IG51bGwpIHRocm93IGVycm9yOwogICAgX3JldGhyb3coZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0pOwp9CgpleHRlcm5hbCB2b2lkIF9yZXRocm93KE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKTsKClIgX3Jvb3RSdW48Uj4oWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsIFIgZigpKSB7CiAgaWYgKFpvbmUuX2N1cnJlbnQgPT0gem9uZSkgcmV0dXJuIGYoKTsKCiAgWm9uZSBvbGQgPSBab25lLl9lbnRlcih6b25lKTsKICB0cnkgewogICAgcmV0dXJuIGYoKTsKICB9IGZpbmFsbHkgewogICAgWm9uZS5fbGVhdmUob2xkKTsKICB9Cn0KClIgX3Jvb3RSdW5VbmFyeTxSLCBUPigKICAgIFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCBSIGYoVCBhcmcpLCBUIGFyZykgewogIGlmIChab25lLl9jdXJyZW50ID09IHpvbmUpIHJldHVybiBmKGFyZyk7CgogIFpvbmUgb2xkID0gWm9uZS5fZW50ZXIoem9uZSk7CiAgdHJ5IHsKICAgIHJldHVybiBmKGFyZyk7CiAgfSBmaW5hbGx5IHsKICAgIFpvbmUuX2xlYXZlKG9sZCk7CiAgfQp9CgpSIF9yb290UnVuQmluYXJ5PFIsIFQxLCBUMj4oWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsCiAgICBSIGYoVDEgYXJnMSwgVDIgYXJnMiksIFQxIGFyZzEsIFQyIGFyZzIpIHsKICBpZiAoWm9uZS5fY3VycmVudCA9PSB6b25lKSByZXR1cm4gZihhcmcxLCBhcmcyKTsKCiAgWm9uZSBvbGQgPSBab25lLl9lbnRlcih6b25lKTsKICB0cnkgewogICAgcmV0dXJuIGYoYXJnMSwgYXJnMik7CiAgfSBmaW5hbGx5IHsKICAgIFpvbmUuX2xlYXZlKG9sZCk7CiAgfQp9Cgpab25lQ2FsbGJhY2s8Uj4gX3Jvb3RSZWdpc3RlckNhbGxiYWNrPFI+KAogICAgWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsIFIgZigpKSB7CiAgcmV0dXJuIGY7Cn0KClpvbmVVbmFyeUNhbGxiYWNrPFIsIFQ+IF9yb290UmVnaXN0ZXJVbmFyeUNhbGxiYWNrPFIsIFQ+KAogICAgWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsIFIgZihUIGFyZykpIHsKICByZXR1cm4gZjsKfQoKWm9uZUJpbmFyeUNhbGxiYWNrPFIsIFQxLCBUMj4gX3Jvb3RSZWdpc3RlckJpbmFyeUNhbGxiYWNrPFIsIFQxLCBUMj4oCiAgICBab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgUiBmKFQxIGFyZzEsIFQyIGFyZzIpKSB7CiAgcmV0dXJuIGY7Cn0KCkFzeW5jRXJyb3IgX3Jvb3RFcnJvckNhbGxiYWNrKFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLAogICAgICAgIE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSA9PgogICAgbnVsbDsKCnZvaWQgX3Jvb3RTY2hlZHVsZU1pY3JvdGFzaygKICAgIFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCB2b2lkIGYoKSkgewogIGlmICghaWRlbnRpY2FsKF9yb290Wm9uZSwgem9uZSkpIHsKICAgIGJvb2wgaGFzRXJyb3JIYW5kbGVyID0gIV9yb290Wm9uZS5pblNhbWVFcnJvclpvbmUoem9uZSk7CiAgICBpZiAoaGFzRXJyb3JIYW5kbGVyKSB7CiAgICAgIGYgPSB6b25lLmJpbmRDYWxsYmFja0d1YXJkZWQoZik7CiAgICB9IGVsc2UgewogICAgICBmID0gem9uZS5iaW5kQ2FsbGJhY2soZik7CiAgICB9CiAgICAvLyBVc2Ugcm9vdCB6b25lIGFzIGV2ZW50IHpvbmUgaWYgdGhlIGZ1bmN0aW9uIGlzIGFscmVhZHkgYm91bmQuCiAgICB6b25lID0gX3Jvb3Rab25lOwogIH0KICBfc2NoZWR1bGVBc3luY0NhbGxiYWNrKGYpOwp9CgpUaW1lciBfcm9vdENyZWF0ZVRpbWVyKFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLAogICAgRHVyYXRpb24gZHVyYXRpb24sIHZvaWQgY2FsbGJhY2soKSkgewogIGlmICghaWRlbnRpY2FsKF9yb290Wm9uZSwgem9uZSkpIHsKICAgIGNhbGxiYWNrID0gem9uZS5iaW5kQ2FsbGJhY2soY2FsbGJhY2spOwogIH0KICByZXR1cm4gVGltZXIuX2NyZWF0ZVRpbWVyKGR1cmF0aW9uLCBjYWxsYmFjayk7Cn0KClRpbWVyIF9yb290Q3JlYXRlUGVyaW9kaWNUaW1lcihab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwKICAgIER1cmF0aW9uIGR1cmF0aW9uLCB2b2lkIGNhbGxiYWNrKFRpbWVyIHRpbWVyKSkgewogIGlmICghaWRlbnRpY2FsKF9yb290Wm9uZSwgem9uZSkpIHsKICAgIC8vIFRPRE8oZmxvaXRzY2gpOiB0aGUgcmV0dXJuIHR5cGUgc2hvdWxkIGJlICd2b2lkJy4KICAgIGNhbGxiYWNrID0gem9uZS5iaW5kVW5hcnlDYWxsYmFjazxkeW5hbWljLCBUaW1lcj4oY2FsbGJhY2spOwogIH0KICByZXR1cm4gVGltZXIuX2NyZWF0ZVBlcmlvZGljVGltZXIoZHVyYXRpb24sIGNhbGxiYWNrKTsKfQoKdm9pZCBfcm9vdFByaW50KFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCBTdHJpbmcgbGluZSkgewogIHByaW50VG9Db25zb2xlKGxpbmUpOwp9Cgp2b2lkIF9wcmludFRvWm9uZShTdHJpbmcgbGluZSkgewogIFpvbmUuY3VycmVudC5wcmludChsaW5lKTsKfQoKWm9uZSBfcm9vdEZvcmsoWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsCiAgICBab25lU3BlY2lmaWNhdGlvbiBzcGVjaWZpY2F0aW9uLCBNYXAgem9uZVZhbHVlcykgewogIC8vIFRPRE8oZmxvaXRzY2gpOiBpdCB3b3VsZCBiZSBuaWNlIGlmIHdlIGNvdWxkIGdldCByaWQgb2YgdGhpcyBoYWNrLgogIC8vIENoYW5nZSB0aGUgc3RhdGljIHpvbmVPckRpcmVjdFByaW50IGZ1bmN0aW9uIHRvIGdvIHRocm91Z2ggem9uZXMKICAvLyBmcm9tIG5vdyBvbi4KICBwcmludFRvWm9uZSA9IF9wcmludFRvWm9uZTsKCiAgaWYgKHNwZWNpZmljYXRpb24gPT0gbnVsbCkgewogICAgc3BlY2lmaWNhdGlvbiA9IGNvbnN0IFpvbmVTcGVjaWZpY2F0aW9uKCk7CiAgfSBlbHNlIGlmIChzcGVjaWZpY2F0aW9uIGlzISBfWm9uZVNwZWNpZmljYXRpb24pIHsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJab25lU3BlY2lmaWNhdGlvbnMgbXVzdCBiZSBpbnN0YW50aWF0ZWQiCiAgICAgICAgIiB3aXRoIHRoZSBwcm92aWRlZCBjb25zdHJ1Y3Rvci4iKTsKICB9CiAgTWFwIHZhbHVlTWFwOwogIGlmICh6b25lVmFsdWVzID09IG51bGwpIHsKICAgIGlmICh6b25lIGlzIF9ab25lKSB7CiAgICAgIHZhbHVlTWFwID0gem9uZS5fbWFwOwogICAgfSBlbHNlIHsKICAgICAgdmFsdWVNYXAgPSBuZXcgSGFzaE1hcCgpOwogICAgfQogIH0gZWxzZSB7CiAgICB2YWx1ZU1hcCA9IG5ldyBIYXNoTWFwLmZyb20oem9uZVZhbHVlcyk7CiAgfQogIHJldHVybiBuZXcgX0N1c3RvbVpvbmUoem9uZSwgc3BlY2lmaWNhdGlvbiwgdmFsdWVNYXApOwp9CgpjbGFzcyBfUm9vdFpvbmUgZXh0ZW5kcyBfWm9uZSB7CiAgY29uc3QgX1Jvb3Rab25lKCk7CgogIF9ab25lRnVuY3Rpb248RnVuY3Rpb24+IGdldCBfcnVuID0+CiAgICAgIGNvbnN0IF9ab25lRnVuY3Rpb248RnVuY3Rpb24+KF9yb290Wm9uZSwgX3Jvb3RSdW4pOwogIF9ab25lRnVuY3Rpb248RnVuY3Rpb24+IGdldCBfcnVuVW5hcnkgPT4KICAgICAgY29uc3QgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4oX3Jvb3Rab25lLCBfcm9vdFJ1blVuYXJ5KTsKICBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPiBnZXQgX3J1bkJpbmFyeSA9PgogICAgICBjb25zdCBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPihfcm9vdFpvbmUsIF9yb290UnVuQmluYXJ5KTsKICBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPiBnZXQgX3JlZ2lzdGVyQ2FsbGJhY2sgPT4KICAgICAgY29uc3QgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4oX3Jvb3Rab25lLCBfcm9vdFJlZ2lzdGVyQ2FsbGJhY2spOwogIF9ab25lRnVuY3Rpb248RnVuY3Rpb24+IGdldCBfcmVnaXN0ZXJVbmFyeUNhbGxiYWNrID0+CiAgICAgIGNvbnN0IF9ab25lRnVuY3Rpb248RnVuY3Rpb24+KF9yb290Wm9uZSwgX3Jvb3RSZWdpc3RlclVuYXJ5Q2FsbGJhY2spOwogIF9ab25lRnVuY3Rpb248RnVuY3Rpb24+IGdldCBfcmVnaXN0ZXJCaW5hcnlDYWxsYmFjayA9PgogICAgICBjb25zdCBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPihfcm9vdFpvbmUsIF9yb290UmVnaXN0ZXJCaW5hcnlDYWxsYmFjayk7CiAgX1pvbmVGdW5jdGlvbjxFcnJvckNhbGxiYWNrSGFuZGxlcj4gZ2V0IF9lcnJvckNhbGxiYWNrID0+CiAgICAgIGNvbnN0IF9ab25lRnVuY3Rpb248RXJyb3JDYWxsYmFja0hhbmRsZXI+KF9yb290Wm9uZSwgX3Jvb3RFcnJvckNhbGxiYWNrKTsKICBfWm9uZUZ1bmN0aW9uPFNjaGVkdWxlTWljcm90YXNrSGFuZGxlcj4gZ2V0IF9zY2hlZHVsZU1pY3JvdGFzayA9PgogICAgICBjb25zdCBfWm9uZUZ1bmN0aW9uPFNjaGVkdWxlTWljcm90YXNrSGFuZGxlcj4oCiAgICAgICAgICBfcm9vdFpvbmUsIF9yb290U2NoZWR1bGVNaWNyb3Rhc2spOwogIF9ab25lRnVuY3Rpb248Q3JlYXRlVGltZXJIYW5kbGVyPiBnZXQgX2NyZWF0ZVRpbWVyID0+CiAgICAgIGNvbnN0IF9ab25lRnVuY3Rpb248Q3JlYXRlVGltZXJIYW5kbGVyPihfcm9vdFpvbmUsIF9yb290Q3JlYXRlVGltZXIpOwogIF9ab25lRnVuY3Rpb248Q3JlYXRlUGVyaW9kaWNUaW1lckhhbmRsZXI+IGdldCBfY3JlYXRlUGVyaW9kaWNUaW1lciA9PgogICAgICBjb25zdCBfWm9uZUZ1bmN0aW9uPENyZWF0ZVBlcmlvZGljVGltZXJIYW5kbGVyPigKICAgICAgICAgIF9yb290Wm9uZSwgX3Jvb3RDcmVhdGVQZXJpb2RpY1RpbWVyKTsKICBfWm9uZUZ1bmN0aW9uPFByaW50SGFuZGxlcj4gZ2V0IF9wcmludCA9PgogICAgICBjb25zdCBfWm9uZUZ1bmN0aW9uPFByaW50SGFuZGxlcj4oX3Jvb3Rab25lLCBfcm9vdFByaW50KTsKICBfWm9uZUZ1bmN0aW9uPEZvcmtIYW5kbGVyPiBnZXQgX2ZvcmsgPT4KICAgICAgY29uc3QgX1pvbmVGdW5jdGlvbjxGb3JrSGFuZGxlcj4oX3Jvb3Rab25lLCBfcm9vdEZvcmspOwogIF9ab25lRnVuY3Rpb248SGFuZGxlVW5jYXVnaHRFcnJvckhhbmRsZXI+IGdldCBfaGFuZGxlVW5jYXVnaHRFcnJvciA9PgogICAgICBjb25zdCBfWm9uZUZ1bmN0aW9uPEhhbmRsZVVuY2F1Z2h0RXJyb3JIYW5kbGVyPigKICAgICAgICAgIF9yb290Wm9uZSwgX3Jvb3RIYW5kbGVVbmNhdWdodEVycm9yKTsKCiAgLy8gVGhlIHBhcmVudCB6b25lLgogIF9ab25lIGdldCBwYXJlbnQgPT4gbnVsbDsKCiAgLy8vIFRoZSB6b25lJ3Mgc2NvcGVkIHZhbHVlIGRlY2xhcmF0aW9uIG1hcC4KICAvLy8KICAvLy8gVGhpcyBpcyBhbHdheXMgYSBbSGFzaE1hcF0uCiAgTWFwIGdldCBfbWFwID0+IF9yb290TWFwOwoKICBzdGF0aWMgZmluYWwgX3Jvb3RNYXAgPSBuZXcgSGFzaE1hcCgpOwoKICBzdGF0aWMgWm9uZURlbGVnYXRlIF9yb290RGVsZWdhdGU7CgogIFpvbmVEZWxlZ2F0ZSBnZXQgX2RlbGVnYXRlIHsKICAgIGlmIChfcm9vdERlbGVnYXRlICE9IG51bGwpIHJldHVybiBfcm9vdERlbGVnYXRlOwogICAgcmV0dXJuIF9yb290RGVsZWdhdGUgPSBuZXcgX1pvbmVEZWxlZ2F0ZSh0aGlzKTsKICB9CgogIC8qKgogICAqIFRoZSBjbG9zZXN0IGVycm9yLWhhbmRsaW5nIHpvbmUuCiAgICoKICAgKiBSZXR1cm5zIGB0aGlzYCBpZiBgdGhpc2AgaGFzIGFuIGVycm9yLWhhbmRsZXIuIE90aGVyd2lzZSByZXR1cm5zIHRoZQogICAqIHBhcmVudCdzIGVycm9yLXpvbmUuCiAgICovCiAgWm9uZSBnZXQgZXJyb3Jab25lID0+IHRoaXM7CgogIC8vIFpvbmUgaW50ZXJmYWNlLgoKICB2b2lkIHJ1bkd1YXJkZWQodm9pZCBmKCkpIHsKICAgIHRyeSB7CiAgICAgIGlmIChpZGVudGljYWwoX3Jvb3Rab25lLCBab25lLl9jdXJyZW50KSkgewogICAgICAgIGYoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgX3Jvb3RSdW4obnVsbCwgbnVsbCwgdGhpcywgZik7CiAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgIGhhbmRsZVVuY2F1Z2h0RXJyb3IoZSwgcyk7CiAgICB9CiAgfQoKICB2b2lkIHJ1blVuYXJ5R3VhcmRlZDxUPih2b2lkIGYoVCBhcmcpLCBUIGFyZykgewogICAgdHJ5IHsKICAgICAgaWYgKGlkZW50aWNhbChfcm9vdFpvbmUsIFpvbmUuX2N1cnJlbnQpKSB7CiAgICAgICAgZihhcmcpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfcm9vdFJ1blVuYXJ5KG51bGwsIG51bGwsIHRoaXMsIGYsIGFyZyk7CiAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgIGhhbmRsZVVuY2F1Z2h0RXJyb3IoZSwgcyk7CiAgICB9CiAgfQoKICB2b2lkIHJ1bkJpbmFyeUd1YXJkZWQ8VDEsIFQyPih2b2lkIGYoVDEgYXJnMSwgVDIgYXJnMiksIFQxIGFyZzEsIFQyIGFyZzIpIHsKICAgIHRyeSB7CiAgICAgIGlmIChpZGVudGljYWwoX3Jvb3Rab25lLCBab25lLl9jdXJyZW50KSkgewogICAgICAgIGYoYXJnMSwgYXJnMik7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9yb290UnVuQmluYXJ5KG51bGwsIG51bGwsIHRoaXMsIGYsIGFyZzEsIGFyZzIpOwogICAgfSBjYXRjaCAoZSwgcykgewogICAgICBoYW5kbGVVbmNhdWdodEVycm9yKGUsIHMpOwogICAgfQogIH0KCiAgWm9uZUNhbGxiYWNrPFI+IGJpbmRDYWxsYmFjazxSPihSIGYoKSkgewogICAgcmV0dXJuICgpID0+IHRoaXMucnVuPFI+KGYpOwogIH0KCiAgWm9uZVVuYXJ5Q2FsbGJhY2s8UiwgVD4gYmluZFVuYXJ5Q2FsbGJhY2s8UiwgVD4oUiBmKFQgYXJnKSkgewogICAgcmV0dXJuIChhcmcpID0+IHRoaXMucnVuVW5hcnk8UiwgVD4oZiwgYXJnKTsKICB9CgogIFpvbmVCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+IGJpbmRCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+KAogICAgICBSIGYoVDEgYXJnMSwgVDIgYXJnMikpIHsKICAgIHJldHVybiAoYXJnMSwgYXJnMikgPT4gdGhpcy5ydW5CaW5hcnk8UiwgVDEsIFQyPihmLCBhcmcxLCBhcmcyKTsKICB9CgogIHZvaWQgRnVuY3Rpb24oKSBiaW5kQ2FsbGJhY2tHdWFyZGVkKHZvaWQgZigpKSB7CiAgICByZXR1cm4gKCkgPT4gdGhpcy5ydW5HdWFyZGVkKGYpOwogIH0KCiAgdm9pZCBGdW5jdGlvbihUKSBiaW5kVW5hcnlDYWxsYmFja0d1YXJkZWQ8VD4odm9pZCBmKFQgYXJnKSkgewogICAgcmV0dXJuIChhcmcpID0+IHRoaXMucnVuVW5hcnlHdWFyZGVkKGYsIGFyZyk7CiAgfQoKICB2b2lkIEZ1bmN0aW9uKFQxLCBUMikgYmluZEJpbmFyeUNhbGxiYWNrR3VhcmRlZDxUMSwgVDI+KAogICAgICB2b2lkIGYoVDEgYXJnMSwgVDIgYXJnMikpIHsKICAgIHJldHVybiAoYXJnMSwgYXJnMikgPT4gdGhpcy5ydW5CaW5hcnlHdWFyZGVkKGYsIGFyZzEsIGFyZzIpOwogIH0KCiAgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgPT4gbnVsbDsKCiAgLy8gTWV0aG9kcyB0aGF0IGNhbiBiZSBjdXN0b21pemVkIGJ5IHRoZSB6b25lIHNwZWNpZmljYXRpb24uCgogIHZvaWQgaGFuZGxlVW5jYXVnaHRFcnJvcihlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICBfcm9vdEhhbmRsZVVuY2F1Z2h0RXJyb3IobnVsbCwgbnVsbCwgdGhpcywgZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgWm9uZSBmb3JrKHtab25lU3BlY2lmaWNhdGlvbiBzcGVjaWZpY2F0aW9uLCBNYXAgem9uZVZhbHVlc30pIHsKICAgIHJldHVybiBfcm9vdEZvcmsobnVsbCwgbnVsbCwgdGhpcywgc3BlY2lmaWNhdGlvbiwgem9uZVZhbHVlcyk7CiAgfQoKICBSIHJ1bjxSPihSIGYoKSkgewogICAgaWYgKGlkZW50aWNhbChab25lLl9jdXJyZW50LCBfcm9vdFpvbmUpKSByZXR1cm4gZigpOwogICAgcmV0dXJuIF9yb290UnVuKG51bGwsIG51bGwsIHRoaXMsIGYpOwogIH0KCiAgUiBydW5VbmFyeTxSLCBUPihSIGYoVCBhcmcpLCBUIGFyZykgewogICAgaWYgKGlkZW50aWNhbChab25lLl9jdXJyZW50LCBfcm9vdFpvbmUpKSByZXR1cm4gZihhcmcpOwogICAgcmV0dXJuIF9yb290UnVuVW5hcnkobnVsbCwgbnVsbCwgdGhpcywgZiwgYXJnKTsKICB9CgogIFIgcnVuQmluYXJ5PFIsIFQxLCBUMj4oUiBmKFQxIGFyZzEsIFQyIGFyZzIpLCBUMSBhcmcxLCBUMiBhcmcyKSB7CiAgICBpZiAoaWRlbnRpY2FsKFpvbmUuX2N1cnJlbnQsIF9yb290Wm9uZSkpIHJldHVybiBmKGFyZzEsIGFyZzIpOwogICAgcmV0dXJuIF9yb290UnVuQmluYXJ5KG51bGwsIG51bGwsIHRoaXMsIGYsIGFyZzEsIGFyZzIpOwogIH0KCiAgWm9uZUNhbGxiYWNrPFI+IHJlZ2lzdGVyQ2FsbGJhY2s8Uj4oUiBmKCkpID0+IGY7CgogIFpvbmVVbmFyeUNhbGxiYWNrPFIsIFQ+IHJlZ2lzdGVyVW5hcnlDYWxsYmFjazxSLCBUPihSIGYoVCBhcmcpKSA9PiBmOwoKICBab25lQmluYXJ5Q2FsbGJhY2s8UiwgVDEsIFQyPiByZWdpc3RlckJpbmFyeUNhbGxiYWNrPFIsIFQxLCBUMj4oCiAgICAgICAgICBSIGYoVDEgYXJnMSwgVDIgYXJnMikpID0+CiAgICAgIGY7CgogIEFzeW5jRXJyb3IgZXJyb3JDYWxsYmFjayhPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgPT4gbnVsbDsKCiAgdm9pZCBzY2hlZHVsZU1pY3JvdGFzayh2b2lkIGYoKSkgewogICAgX3Jvb3RTY2hlZHVsZU1pY3JvdGFzayhudWxsLCBudWxsLCB0aGlzLCBmKTsKICB9CgogIFRpbWVyIGNyZWF0ZVRpbWVyKER1cmF0aW9uIGR1cmF0aW9uLCB2b2lkIGYoKSkgewogICAgcmV0dXJuIFRpbWVyLl9jcmVhdGVUaW1lcihkdXJhdGlvbiwgZik7CiAgfQoKICBUaW1lciBjcmVhdGVQZXJpb2RpY1RpbWVyKER1cmF0aW9uIGR1cmF0aW9uLCB2b2lkIGYoVGltZXIgdGltZXIpKSB7CiAgICByZXR1cm4gVGltZXIuX2NyZWF0ZVBlcmlvZGljVGltZXIoZHVyYXRpb24sIGYpOwogIH0KCiAgdm9pZCBwcmludChTdHJpbmcgbGluZSkgewogICAgcHJpbnRUb0NvbnNvbGUobGluZSk7CiAgfQp9Cgpjb25zdCBfcm9vdFpvbmUgPSBjb25zdCBfUm9vdFpvbmUoKTsKCi8qKgogKiBSdW5zIFtib2R5XSBpbiBpdHMgb3duIHpvbmUuCiAqCiAqIENyZWF0ZXMgYSBuZXcgem9uZSB1c2luZyBbWm9uZS5mb3JrXSBiYXNlZCBvbiBbem9uZVNwZWNpZmljYXRpb25dIGFuZAogKiBbem9uZVZhbHVlc10sIHRoZW4gcnVucyBbYm9keV0gaW4gdGhhdCB6b25lIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuCiAqCiAqIElmIFtvbkVycm9yXSBpcyBwcm92aWRlZCwgaXQgbXVzdCBoYXZlIG9uZSBvZiB0aGUgdHlwZXMKICogKiBgdm9pZCBGdW5jdGlvbihPYmplY3QpYAogKiAqIGB2b2lkIEZ1bmN0aW9uKE9iamVjdCwgU3RhY2tUcmFjZSlgCiAqIGFuZCB0aGUgW29uRXJyb3JdIGhhbmRsZXIgaXMgdXNlZCAqYm90aCogdG8gaGFuZGxlIGFzeW5jaHJvbm91cyBlcnJvcnMKICogYnkgb3ZlcnJpZGluZyBbWm9uZVNwZWNpZmljYXRpb24uaGFuZGxlVW5jYXVnaHRFcnJvcl0gaW4gW3pvbmVTcGVjaWZpY2F0aW9uXSwKICogaWYgYW55LCAqYW5kKiB0byBoYW5kbGUgZXJyb3JzIHRocm93biBzeW5jaHJvbm91c2x5IGJ5IHRoZSBjYWxsIHRvIFtib2R5XS4KICoKICogSWYgYW4gZXJyb3Igb2NjdXJzIHN5bmNocm9ub3VzbHkgaW4gW2JvZHldLAogKiB0aGVuIHRocm93aW5nIGluIHRoZSBbb25FcnJvcl0gaGFuZGxlcgogKiBtYWtlcyB0aGUgY2FsbCB0byBgcnVuWm9uZWAgdGhyb3cgdGhhdCBlcnJvciwKICogYW5kIG90aGVyd2lzZSB0aGUgY2FsbCB0byBgcnVuWm9uZWRgIHJldHVybnMgYG51bGxgLgogKgogKiBJZiB0aGUgem9uZSBzcGVjaWZpY2F0aW9uIGhhcyBhIGBoYW5kbGVVbmNhdWdodEVycm9yYCB2YWx1ZSBvciB0aGUgW29uRXJyb3JdCiAqIHBhcmFtZXRlciBpcyBwcm92aWRlZCwgdGhlIHpvbmUgYmVjb21lcyBhbiBlcnJvci16b25lLgogKgogKiBFcnJvcnMgd2lsbCBuZXZlciBjcm9zcyBlcnJvci16b25lIGJvdW5kYXJpZXMgYnkgdGhlbXNlbHZlcy4KICogRXJyb3JzIHRoYXQgdHJ5IHRvIGNyb3NzIGVycm9yLXpvbmUgYm91bmRhcmllcyBhcmUgY29uc2lkZXJlZCB1bmNhdWdodCBpbgogKiB0aGVpciBvcmlnaW5hdGluZyBlcnJvciB6b25lLgogKgogKiAgICAgdmFyIGZ1dHVyZSA9IG5ldyBGdXR1cmUudmFsdWUoNDk5KTsKICogICAgIHJ1blpvbmVkKCgpIHsKICogICAgICAgdmFyIGZ1dHVyZTIgPSBmdXR1cmUudGhlbigoXykgeyB0aHJvdyAiZXJyb3IgaW4gZmlyc3QgZXJyb3Item9uZSI7IH0pOwogKiAgICAgICBydW5ab25lZCgoKSB7CiAqICAgICAgICAgdmFyIGZ1dHVyZTMgPSBmdXR1cmUyLmNhdGNoRXJyb3IoKGUpIHsgcHJpbnQoIk5ldmVyIHJlYWNoZWQhIik7IH0pOwogKiAgICAgICB9LCBvbkVycm9yOiAoZSkgeyBwcmludCgidW51c2VkIGVycm9yIGhhbmRsZXIiKTsgfSk7CiAqICAgICB9LCBvbkVycm9yOiAoZSkgeyBwcmludCgiY2F0Y2hlcyBlcnJvciBvZiBmaXJzdCBlcnJvci16b25lLiIpOyB9KTsKICoKICogRXhhbXBsZToKICoKICogICAgIHJ1blpvbmVkKCgpIHsKICogICAgICAgbmV3IEZ1dHVyZSgoKSB7IHRocm93ICJhc3luY2hyb25vdXMgZXJyb3IiOyB9KTsKICogICAgIH0sIG9uRXJyb3I6IHByaW50KTsgIC8vIFdpbGwgcHJpbnQgImFzeW5jaHJvbm91cyBlcnJvciIuCiAqCiAqIEl0IGlzIHBvc3NpYmxlIHRvIG1hbnVhbGx5IHBhc3MgYW4gZXJyb3IgZnJvbSBvbmUgZXJyb3Igem9uZSB0byBhbm90aGVyCiAqIGJ5IHJlLXRocm93aW5nIGl0IGluIHRoZSBuZXcgem9uZS4gSWYgW29uRXJyb3JdIHRocm93cywgdGhhdCBlcnJvciB3aWxsCiAqIG9jY3VyIGluIHRoZSBvcmlnaW5hbCB6b25lIHdoZXJlIFtydW5ab25lZF0gd2FzIGNhbGxlZC4KICovClIgcnVuWm9uZWQ8Uj4oUiBib2R5KCksCiAgICB7TWFwIHpvbmVWYWx1ZXMsIFpvbmVTcGVjaWZpY2F0aW9uIHpvbmVTcGVjaWZpY2F0aW9uLCBGdW5jdGlvbiBvbkVycm9yfSkgewogIGlmIChvbkVycm9yID09IG51bGwpIHsKICAgIHJldHVybiBfcnVuWm9uZWQ8Uj4oYm9keSwgem9uZVZhbHVlcywgem9uZVNwZWNpZmljYXRpb24pOwogIH0KICB2b2lkIEZ1bmN0aW9uKE9iamVjdCkgdW5hcnlPbkVycm9yOwogIHZvaWQgRnVuY3Rpb24oT2JqZWN0LCBTdGFja1RyYWNlKSBiaW5hcnlPbkVycm9yOwogIGlmIChvbkVycm9yIGlzIHZvaWQgRnVuY3Rpb24oT2JqZWN0LCBTdGFja1RyYWNlKSkgewogICAgYmluYXJ5T25FcnJvciA9IG9uRXJyb3I7CiAgfSBlbHNlIGlmIChvbkVycm9yIGlzIHZvaWQgRnVuY3Rpb24oT2JqZWN0KSkgewogICAgdW5hcnlPbkVycm9yID0gb25FcnJvcjsKICB9IGVsc2UgewogICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIm9uRXJyb3IgY2FsbGJhY2sgbXVzdCB0YWtlIGVpdGhlciBhbiBPYmplY3QgIgogICAgICAgICIodGhlIGVycm9yKSwgb3IgYm90aCBhbiBPYmplY3QgKHRoZSBlcnJvcikgYW5kIGEgU3RhY2tUcmFjZS4iKTsKICB9CiAgSGFuZGxlVW5jYXVnaHRFcnJvckhhbmRsZXIgZXJyb3JIYW5kbGVyID0gKFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwKICAgICAgWm9uZSB6b25lLCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICB0cnkgewogICAgICBpZiAoYmluYXJ5T25FcnJvciAhPSBudWxsKSB7CiAgICAgICAgc2VsZi5wYXJlbnQucnVuQmluYXJ5KGJpbmFyeU9uRXJyb3IsIGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQodW5hcnlPbkVycm9yICE9IG51bGwpOwogICAgICAgIHNlbGYucGFyZW50LnJ1blVuYXJ5KHVuYXJ5T25FcnJvciwgZXJyb3IpOwogICAgICB9CiAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgIGlmIChpZGVudGljYWwoZSwgZXJyb3IpKSB7CiAgICAgICAgcGFyZW50LmhhbmRsZVVuY2F1Z2h0RXJyb3Ioem9uZSwgZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICB9IGVsc2UgewogICAgICAgIHBhcmVudC5oYW5kbGVVbmNhdWdodEVycm9yKHpvbmUsIGUsIHMpOwogICAgICB9CiAgICB9CiAgfTsKICBpZiAoem9uZVNwZWNpZmljYXRpb24gPT0gbnVsbCkgewogICAgem9uZVNwZWNpZmljYXRpb24gPQogICAgICAgIG5ldyBab25lU3BlY2lmaWNhdGlvbihoYW5kbGVVbmNhdWdodEVycm9yOiBlcnJvckhhbmRsZXIpOwogIH0gZWxzZSB7CiAgICB6b25lU3BlY2lmaWNhdGlvbiA9IG5ldyBab25lU3BlY2lmaWNhdGlvbi5mcm9tKHpvbmVTcGVjaWZpY2F0aW9uLAogICAgICAgIGhhbmRsZVVuY2F1Z2h0RXJyb3I6IGVycm9ySGFuZGxlcik7CiAgfQogIHRyeSB7CiAgICByZXR1cm4gX3J1blpvbmVkPFI+KGJvZHksIHpvbmVWYWx1ZXMsIHpvbmVTcGVjaWZpY2F0aW9uKTsKICB9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BAEyJQQBQDIEATsiQQQBIwE/ATtDBAFBQwQBFDkqBAEoPDQEAURDPAQBMwFIAUMkCQFJASUxBAEzLAQBRjQEARwaBAIBJQEEIANJRwM7HSlKUU4DLyoxOANQOgNATSEDKxVQF08+SgMMAxU5QANLSzsEGE8ZPgQmMzYdMRwLS0kETTEKI0EPJjMIFSE9DzAIBgUjGEILRiwECD4cISQNJBcGBA8CAUlNEUQXARRkYXJ0OmFzeW5jL3pvbmUuZGFydDBvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL2FzeW5jX3BhdGNoLmRhcnSoUi8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gTm90ZTogdGhlIFZNIGNvbmNhdGVuYXRlcyBhbGwgcGF0Y2ggZmlsZXMgaW50byBhIHNpbmdsZSBwYXRjaCBmaWxlLiBUaGlzCi8vLyBmaWxlIGlzIHRoZSBmaXJzdCBwYXRjaCBpbiAiZGFydDphc3luYyIgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBpbXBvcnRzIHVzZWQKLy8vIGJ5IHBhdGNoZXMgb2YgdGhhdCBsaWJyYXJ5LiBXZSBwbGFuIHRvIGNoYW5nZSB0aGlzIHdoZW4gd2UgaGF2ZSBhIHNoYXJlZAovLy8gZnJvbnQgZW5kIGFuZCBzaW1wbHkgdXNlIHBhcnRzLgoKaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIgc2hvdyBWTUxpYnJhcnlIb29rcywgcGF0Y2g7CgovLy8gVGhlc2UgYXJlIHRoZSBhZGRpdGlvbmFsIHBhcnRzIG9mIHRoaXMgcGF0Y2ggbGlicmFyeToKLy8gcGFydCAiZGVmZXJyZWRfbG9hZF9wYXRjaC5kYXJ0IjsKLy8gcGFydCAic2NoZWR1bGVfbWljcm90YXNrX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJ0aW1lcl9wYXRjaC5kYXJ0IjsKCi8vIEVxdWl2YWxlbnQgb2YgY2FsbGluZyBGQVRBTCBmcm9tIEMrKyBjb2RlLgpfZmF0YWwobXNnKSBuYXRpdmUgIkRhcnRBc3luY19mYXRhbCI7CgpjbGFzcyBfQXN5bmNBd2FpdENvbXBsZXRlcjxUPiBpbXBsZW1lbnRzIENvbXBsZXRlcjxUPiB7CiAgZmluYWwgX2Z1dHVyZSA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgYm9vbCBpc1N5bmM7CgogIF9Bc3luY0F3YWl0Q29tcGxldGVyKCkgOiBpc1N5bmMgPSBmYWxzZTsKCiAgdm9pZCBjb21wbGV0ZShbRnV0dXJlT3I8VD4gdmFsdWVdKSB7CiAgICBpZiAoIWlzU3luYyB8fCB2YWx1ZSBpcyBGdXR1cmU8VD4pIHsKICAgICAgX2Z1dHVyZS5fYXN5bmNDb21wbGV0ZSh2YWx1ZSk7CiAgICB9IGVsc2UgewogICAgICBfZnV0dXJlLl9jb21wbGV0ZVdpdGhWYWx1ZSh2YWx1ZSk7CiAgICB9CiAgfQoKICB2b2lkIGNvbXBsZXRlRXJyb3IoZSwgW3N0XSkgewogICAgaWYgKGlzU3luYykgewogICAgICBfZnV0dXJlLl9jb21wbGV0ZUVycm9yKGUsIHN0KTsKICAgIH0gZWxzZSB7CiAgICAgIF9mdXR1cmUuX2FzeW5jQ29tcGxldGVFcnJvcihlLCBzdCk7CiAgICB9CiAgfQoKICB2b2lkIHN0YXJ0KGYpIHsKICAgIGYoKTsKICAgIGlzU3luYyA9IHRydWU7CiAgfQoKICBGdXR1cmU8VD4gZ2V0IGZ1dHVyZSA9PiBfZnV0dXJlOwogIGJvb2wgZ2V0IGlzQ29tcGxldGVkID0+ICFfZnV0dXJlLl9tYXlDb21wbGV0ZTsKfQoKLy8gV2UgbmVlZCB0byBwYXNzIHRoZSB2YWx1ZSBhcyBmaXJzdCBhcmd1bWVudCBhbmQgbGVhdmUgdGhlIHNlY29uZCBhbmQgdGhpcmQKLy8gYXJndW1lbnRzIGVtcHR5ICh1c2VkIGZvciBlcnJvciBoYW5kbGluZykuCi8vIFNlZSB2bS9hc3RfdHJhbnNmb3JtZXIuY2MgZm9yIHVzYWdlLgpGdW5jdGlvbiBfYXN5bmNUaGVuV3JhcHBlckhlbHBlcihjb250aW51YXRpb24pIHsKICAvLyBBbnkgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIGFzIGFuIGFzeW5jaHJvbm91cyBjYWxsYmFjayBtdXN0IGJlIHJlZ2lzdGVyZWQKICAvLyBpbiB0aGUgY3VycmVudCBab25lLiBOb3JtYWxseSwgdGhpcyBpcyBkb25lIGJ5IHRoZSBmdXR1cmUgd2hlbiBhCiAgLy8gY2FsbGJhY2sgaXMgcmVnaXN0ZXJlZCAoZm9yIGV4YW1wbGUgd2l0aCBgLnRoZW5gIG9yIGAuY2F0Y2hFcnJvcmApLiBJbiBvdXIKICAvLyBjYXNlIHdlIHdhbnQgdG8gcmV1c2UgdGhlIHNhbWUgY2FsbGJhY2sgbXVsdGlwbGUgdGltZXMgYW5kIHRoZXJlZm9yZSBhdm9pZAogIC8vIHRoZSBtdWx0aXBsZSByZWdpc3RyYXRpb25zLiBGb3Igb3VyIGludGVybmFsIGZ1dHVyZXMgKGBfRnV0dXJlYCkgd2UgY2FuCiAgLy8gdXNlIHRoZSBzaG9ydGN1dC12ZXJzaW9uIG9mIGAudGhlbmAsIGFuZCBza2lwIHRoZSByZWdpc3RyYXRpb24uIEhvd2V2ZXIsCiAgLy8gdGhhdCBtZWFucyB0aGF0IHRoZSBjb250aW51YXRpb24gbXVzdCBiZSByZWdpc3RlcmVkIGJ5IHVzLgogIC8vCiAgLy8gRnVydGhlcm1vcmUsIHdlIGtub3cgdGhhdCB0aGUgcm9vdC16b25lIGRvZXNuJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgYW5kCiAgLy8gd2UgY2FuIHRoZXJlZm9yZSBza2lwIHRoZSByZWdpc3RyYXRpb24gY2FsbCBmb3IgaXQuCiAgLy8KICAvLyBOb3RlLCB0aGF0IHRoZSBjb250aW51YXRpb24gYWNjZXB0cyB1cCB0byB0aHJlZSBhcmd1bWVudHMuIElmIHRoZSBjdXJyZW50CiAgLy8gem9uZSBpcyB0aGUgcm9vdCB6b25lLCB3ZSBkb24ndCB3cmFwIHRoZSBjb250aW51YXRpb24sIGFuZCBhIGJhZAogIC8vIGBGdXR1cmVgIGltcGxlbWVudGF0aW9uIGNvdWxkIHBvdGVudGlhbGx5IGludm9rZSB0aGUgY2FsbGJhY2sgd2l0aCB0aGUKICAvLyB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLgogIGlmIChab25lLmN1cnJlbnQgPT0gWm9uZS5yb290KSByZXR1cm4gY29udGludWF0aW9uOwogIHJldHVybiBab25lLmN1cnJlbnQucmVnaXN0ZXJVbmFyeUNhbGxiYWNrKCh4KSA9PiBjb250aW51YXRpb24oeCwgbnVsbCwgbnVsbCkpOwp9CgovLyBXZSBuZWVkIHRvIHBhc3MgdGhlIGV4Y2VwdGlvbiBhbmQgc3RhY2sgdHJhY2Ugb2JqZWN0cyBhcyBzZWNvbmQgYW5kIHRoaXJkCi8vIHBhcmFtZXRlciB0byB0aGUgY29udGludWF0aW9uLiAgU2VlIHZtL2FzdF90cmFuc2Zvcm1lci5jYyBmb3IgdXNhZ2UuCkZ1bmN0aW9uIF9hc3luY0Vycm9yV3JhcHBlckhlbHBlcihjb250aW51YXRpb24pIHsKICAvLyBTZWUgY29tbWVudHMgb2YgYF9hc3luY1RoZW5XcmFwcGVySGVscGVyYC4KICB2YXIgZXJyb3JDYWxsYmFjayA9IChlLCBzKSA9PiBjb250aW51YXRpb24obnVsbCwgZSwgcyk7CiAgaWYgKFpvbmUuY3VycmVudCA9PSBab25lLnJvb3QpIHJldHVybiBlcnJvckNhbGxiYWNrOwogIHJldHVybiBab25lLmN1cnJlbnQucmVnaXN0ZXJCaW5hcnlDYWxsYmFjayhlcnJvckNhbGxiYWNrKTsKfQoKLy8vIFJlZ2lzdGVycyB0aGUgW3RoZW5DYWxsYmFja10gYW5kIFtlcnJvckNhbGxiYWNrXSBvbiB0aGUgZ2l2ZW4gW29iamVjdF0uCi8vLwovLy8gSWYgW29iamVjdF0gaXMgbm90IGEgZnV0dXJlLCB0aGVuIGl0IGlzIHdyYXBwZWQgaW50byBvbmUuCi8vLwovLy8gUmV0dXJucyB0aGUgcmVzdWx0IG9mIHJlZ2lzdGVyaW5nIHdpdGggYC50aGVuYC4KRnV0dXJlIF9hd2FpdEhlbHBlcigKICAgIHZhciBvYmplY3QsIEZ1bmN0aW9uIHRoZW5DYWxsYmFjaywgRnVuY3Rpb24gZXJyb3JDYWxsYmFjaywgdmFyIGF3YWl0ZXIpIHsKICBpZiAob2JqZWN0IGlzISBGdXR1cmUpIHsKICAgIG9iamVjdCA9IG5ldyBfRnV0dXJlKCkuLl9zZXRWYWx1ZShvYmplY3QpOwogIH0gZWxzZSBpZiAob2JqZWN0IGlzISBfRnV0dXJlKSB7CiAgICByZXR1cm4gb2JqZWN0LnRoZW4odGhlbkNhbGxiYWNrLCBvbkVycm9yOiBlcnJvckNhbGxiYWNrKTsKICB9CiAgLy8gYG9iamVjdGAgaXMgYSBgX0Z1dHVyZWAuCiAgLy8KICAvLyBTaW5jZSB0aGUgY2FsbGJhY2tzIGhhdmUgYmVlbiByZWdpc3RlcmVkIGluIHRoZSBjdXJyZW50IHpvbmUgKHNlZQogIC8vIFtfYXN5bmNUaGVuV3JhcHBlckhlbHBlcl0gYW5kIFtfYXN5bmNFcnJvcldyYXBwZXJIZWxwZXJdKSwgd2UgY2FuIGF2b2lkCiAgLy8gYW5vdGhlciByZWdpc3RyYXRpb24gYW5kIGRpcmVjdGx5IGludm9rZSB0aGUgbm8tem9uZS1yZWdpc3RyYXRpb24gYC50aGVuYC4KICAvLwogIC8vIFdlIGNhbiBvbmx5IGRvIHRoaXMgZm9yIG91ciBpbnRlcm5hbCBmdXR1cmVzICh0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZgogIC8vIGFsbCBmdXR1cmVzIHRoYXQgYXJlIGNvbnN0cnVjdGVkIGJ5IHRoZSBgZGFydDphc3luY2AgbGlicmFyeSkuCiAgb2JqZWN0Ll9hd2FpdGVyID0gYXdhaXRlcjsKICByZXR1cm4gb2JqZWN0Ll90aGVuQXdhaXQodGhlbkNhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTsKfQoKLy8gQ2FsbGVkIGFzIHBhcnQgb2YgdGhlICdhd2FpdCBmb3IgKC4uLiknIGNvbnN0cnVjdC4gUmVnaXN0ZXJzIHRoZQovLyBhd2FpdGVyIG9uIHRoZSBzdHJlYW0uCnZvaWQgX2FzeW5jU3Rhckxpc3RlbkhlbHBlcih2YXIgb2JqZWN0LCB2YXIgYXdhaXRlcikgewogIGlmIChvYmplY3QgaXMhIF9TdHJlYW1JbXBsKSB7CiAgICByZXR1cm47CiAgfQogIC8vIGBvYmplY3RgIGlzIGEgYF9TdHJlYW1JbXBsYC4KICBvYmplY3QuX2F3YWl0ZXIgPSBhd2FpdGVyOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKdm9pZCBfYXN5bmNTdGFyTW92ZU5leHRIZWxwZXIodmFyIHN0cmVhbSkgewogIGlmIChzdHJlYW0gaXMhIF9TdHJlYW1JbXBsKSB7CiAgICByZXR1cm47CiAgfQogIC8vIHN0cmVhbSBpcyBhIF9TdHJlYW1JbXBsLgogIGlmIChzdHJlYW0uX2dlbmVyYXRvciA9PSBudWxsKSB7CiAgICAvLyBObyBnZW5lcmF0b3IgcmVnaXN0ZXJlZCwgdGhpcyBpc24ndCBhbiBhc3luYyogU3RyZWFtLgogICAgcmV0dXJuOwogIH0KICBfbW92ZU5leHREZWJ1Z2dlclN0ZXBDaGVjayhzdHJlYW0uX2dlbmVyYXRvcik7Cn0KCi8vIF9Bc3luY1N0YXJTdHJlYW1Db250cm9sbGVyIGlzIHVzZWQgYnkgdGhlIGNvbXBpbGVyIHRvIGltcGxlbWVudAovLyBhc3luYyogZ2VuZXJhdG9yIGZ1bmN0aW9ucy4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfQXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlcjxUPiB7CiAgU3RyZWFtQ29udHJvbGxlcjxUPiBjb250cm9sbGVyOwogIEZ1bmN0aW9uIGFzeW5jU3RhckJvZHk7CiAgYm9vbCBpc0FkZGluZyA9IGZhbHNlOwogIGJvb2wgb25MaXN0ZW5SZWNlaXZlZCA9IGZhbHNlOwogIGJvb2wgaXNTY2hlZHVsZWQgPSBmYWxzZTsKICBib29sIGlzU3VzcGVuZGVkQXRZaWVsZCA9IGZhbHNlOwogIF9GdXR1cmUgY2FuY2VsbGF0aW9uRnV0dXJlID0gbnVsbDsKCiAgU3RyZWFtPFQ+IGdldCBzdHJlYW0gewogICAgZmluYWwgU3RyZWFtPFQ+IGxvY2FsID0gY29udHJvbGxlci5zdHJlYW07CiAgICBpZiAobG9jYWwgaXMgX1N0cmVhbUltcGw8VD4pIHsKICAgICAgbG9jYWwuX2dlbmVyYXRvciA9IGFzeW5jU3RhckJvZHk7CiAgICB9CiAgICByZXR1cm4gbG9jYWw7CiAgfQoKICB2b2lkIHJ1bkJvZHkoKSB7CiAgICBpc1NjaGVkdWxlZCA9IGZhbHNlOwogICAgaXNTdXNwZW5kZWRBdFlpZWxkID0gZmFsc2U7CiAgICBhc3luY1N0YXJCb2R5KCk7CiAgfQoKICB2b2lkIHNjaGVkdWxlR2VuZXJhdG9yKCkgewogICAgaWYgKGlzU2NoZWR1bGVkIHx8IGNvbnRyb2xsZXIuaXNQYXVzZWQgfHwgaXNBZGRpbmcpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaXNTY2hlZHVsZWQgPSB0cnVlOwogICAgc2NoZWR1bGVNaWNyb3Rhc2socnVuQm9keSk7CiAgfQoKICAvLyBBZGRzIGVsZW1lbnQgdG8gc3RyZWFtLCByZXR1cm5zIHRydWUgaWYgdGhlIGNhbGxlciBzaG91bGQgdGVybWluYXRlCiAgLy8gZXhlY3V0aW9uIG9mIHRoZSBnZW5lcmF0b3IuCiAgLy8KICAvLyBUT0RPKGhhdXNuZXIpOiBQZXIgc3BlYywgdGhlIGdlbmVyYXRvciBzaG91bGQgYmUgc3VzcGVuZGVkIGJlZm9yZQogIC8vIGV4aXRpbmcgd2hlbiB0aGUgc3RyZWFtIGlzIGNsb3NlZC4gV2UgY291bGQgYWRkIGEgZ2V0dGVyIGxpa2UgdGhpczoKICAvLyBnZXQgaXNDYW5jZWxsZWQgPT4gY29udHJvbGxlci5oYXNMaXN0ZW5lcjsKICAvLyBUaGUgZ2VuZXJhdG9yIHdvdWxkIHRyYW5zbGF0ZSBhICd5aWVsZCBlJyBzdGF0ZW1lbnQgdG8KICAvLyBjb250cm9sbGVyLmFkZChlKTsKICAvLyBzdXNwZW5kOwogIC8vIGlmIChjb250cm9sbGVyLmlzQ2FuY2VsbGVkKSByZXR1cm47CiAgYm9vbCBhZGQoVCBldmVudCkgewogICAgaWYgKCFvbkxpc3RlblJlY2VpdmVkKSBfZmF0YWwoInlpZWxkIGJlZm9yZSBzdHJlYW0gaXMgbGlzdGVuZWQgdG8iKTsKICAgIGlmIChpc1N1c3BlbmRlZEF0WWllbGQpIF9mYXRhbCgidW5leHBlY3RlZCB5aWVsZCIpOwogICAgLy8gSWYgc3RyZWFtIGlzIGNhbmNlbGxlZCwgdGVsbCBjYWxsZXIgdG8gZXhpdCB0aGUgYXN5bmMgZ2VuZXJhdG9yLgogICAgaWYgKCFjb250cm9sbGVyLmhhc0xpc3RlbmVyKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgY29udHJvbGxlci5hZGQoZXZlbnQpOwogICAgc2NoZWR1bGVHZW5lcmF0b3IoKTsKICAgIGlzU3VzcGVuZGVkQXRZaWVsZCA9IHRydWU7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLyBBZGRzIHRoZSBlbGVtZW50cyBvZiBzdHJlYW0gaW50byB0aGlzIGNvbnRyb2xsZXIncyBzdHJlYW0uCiAgLy8gVGhlIGdlbmVyYXRvciB3aWxsIGJlIHNjaGVkdWxlZCBhZ2FpbiB3aGVuIGFsbCBvZiB0aGUKICAvLyBlbGVtZW50cyBvZiB0aGUgYWRkZWQgc3RyZWFtIGhhdmUgYmVlbiBjb25zdW1lZC4KICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNhbGxlciBzaG91bGQgdGVybWluYXRlCiAgLy8gZXhlY3V0aW9uIG9mIHRoZSBnZW5lcmF0b3IuCiAgYm9vbCBhZGRTdHJlYW0oU3RyZWFtPFQ+IHN0cmVhbSkgewogICAgaWYgKCFvbkxpc3RlblJlY2VpdmVkKSBfZmF0YWwoInlpZWxkIGJlZm9yZSBzdHJlYW0gaXMgbGlzdGVuZWQgdG8iKTsKICAgIC8vIElmIHN0cmVhbSBpcyBjYW5jZWxsZWQsIHRlbGwgY2FsbGVyIHRvIGV4aXQgdGhlIGFzeW5jIGdlbmVyYXRvci4KICAgIGlmICghY29udHJvbGxlci5oYXNMaXN0ZW5lcikgcmV0dXJuIHRydWU7CiAgICBpc0FkZGluZyA9IHRydWU7CiAgICB2YXIgd2hlbkRvbmVBZGRpbmcgPSBjb250cm9sbGVyLmFkZFN0cmVhbShzdHJlYW0sIGNhbmNlbE9uRXJyb3I6IGZhbHNlKTsKICAgIHdoZW5Eb25lQWRkaW5nLnRoZW4oKF8pIHsKICAgICAgaXNBZGRpbmcgPSBmYWxzZTsKICAgICAgc2NoZWR1bGVHZW5lcmF0b3IoKTsKICAgICAgaWYgKCFpc1NjaGVkdWxlZCkgaXNTdXNwZW5kZWRBdFlpZWxkID0gdHJ1ZTsKICAgIH0pOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdm9pZCBhZGRFcnJvcihPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgaWYgKChjYW5jZWxsYXRpb25GdXR1cmUgIT0gbnVsbCkgJiYgY2FuY2VsbGF0aW9uRnV0dXJlLl9tYXlDb21wbGV0ZSkgewogICAgICAvLyBJZiB0aGUgc3RyZWFtIGhhcyBiZWVuIGNhbmNlbGxlZCwgY29tcGxldGUgdGhlIGNhbmNlbGxhdGlvbiBmdXR1cmUKICAgICAgLy8gd2l0aCB0aGUgZXJyb3IuCiAgICAgIGNhbmNlbGxhdGlvbkZ1dHVyZS5fY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIElmIHN0cmVhbSBpcyBjYW5jZWxsZWQsIHRlbGwgY2FsbGVyIHRvIGV4aXQgdGhlIGFzeW5jIGdlbmVyYXRvci4KICAgIGlmICghY29udHJvbGxlci5oYXNMaXN0ZW5lcikgcmV0dXJuOwogICAgY29udHJvbGxlci5hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAvLyBObyBuZWVkIHRvIHNjaGVkdWxlIHRoZSBnZW5lcmF0b3IgYm9keSBoZXJlLiBUaGlzIGNvZGUgaXMgb25seQogICAgLy8gY2FsbGVkIGZyb20gdGhlIGNhdGNoIGNsYXVzZSBvZiB0aGUgaW1wbGljaXQgdHJ5LWNhdGNoLWZpbmFsbHkKICAgIC8vIGFyb3VuZCB0aGUgZ2VuZXJhdG9yIGJvZHkuIFRoYXQgaXMsIHdlIGFyZSBvbiB0aGUgZXJyb3IgcGF0aCBvdXQKICAgIC8vIG9mIHRoZSBnZW5lcmF0b3IgYW5kIGRvIG5vdCBuZWVkIHRvIHJ1biB0aGUgZ2VuZXJhdG9yIGFnYWluLgogIH0KCiAgY2xvc2UoKSB7CiAgICBpZiAoKGNhbmNlbGxhdGlvbkZ1dHVyZSAhPSBudWxsKSAmJiBjYW5jZWxsYXRpb25GdXR1cmUuX21heUNvbXBsZXRlKSB7CiAgICAgIC8vIElmIHRoZSBzdHJlYW0gaGFzIGJlZW4gY2FuY2VsbGVkLCBjb21wbGV0ZSB0aGUgY2FuY2VsbGF0aW9uIGZ1dHVyZQogICAgICAvLyB3aXRoIHRoZSBlcnJvci4KICAgICAgY2FuY2VsbGF0aW9uRnV0dXJlLl9jb21wbGV0ZVdpdGhWYWx1ZShudWxsKTsKICAgIH0KICAgIGNvbnRyb2xsZXIuY2xvc2UoKTsKICB9CgogIF9Bc3luY1N0YXJTdHJlYW1Db250cm9sbGVyKHRoaXMuYXN5bmNTdGFyQm9keSkgewogICAgY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyKAogICAgICAgIG9uTGlzdGVuOiB0aGlzLm9uTGlzdGVuLAogICAgICAgIG9uUmVzdW1lOiB0aGlzLm9uUmVzdW1lLAogICAgICAgIG9uQ2FuY2VsOiB0aGlzLm9uQ2FuY2VsKTsKICB9CgogIG9uTGlzdGVuKCkgewogICAgYXNzZXJ0KCFvbkxpc3RlblJlY2VpdmVkKTsKICAgIG9uTGlzdGVuUmVjZWl2ZWQgPSB0cnVlOwogICAgc2NoZWR1bGVHZW5lcmF0b3IoKTsKICB9CgogIG9uUmVzdW1lKCkgewogICAgaWYgKGlzU3VzcGVuZGVkQXRZaWVsZCkgewogICAgICBzY2hlZHVsZUdlbmVyYXRvcigpOwogICAgfQogIH0KCiAgb25DYW5jZWwoKSB7CiAgICBpZiAoY29udHJvbGxlci5pc0Nsb3NlZCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmIChjYW5jZWxsYXRpb25GdXR1cmUgPT0gbnVsbCkgewogICAgICBjYW5jZWxsYXRpb25GdXR1cmUgPSBuZXcgX0Z1dHVyZSgpOwogICAgICAvLyBPbmx5IHJlc3VtZSB0aGUgZ2VuZXJhdG9yIGlmIGl0IGlzIHN1c3BlbmRlZCBhdCBhIHlpZWxkLgogICAgICAvLyBDYW5jZWxsYXRpb24gZG9lcyBub3QgYWZmZWN0IGFuIGFzeW5jIGdlbmVyYXRvciB0aGF0IGlzCiAgICAgIC8vIHN1c3BlbmRlZCBhdCBhbiBhd2FpdC4KICAgICAgaWYgKGlzU3VzcGVuZGVkQXRZaWVsZCkgewogICAgICAgIHNjaGVkdWxlR2VuZXJhdG9yKCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBjYW5jZWxsYXRpb25GdXR1cmU7CiAgfQp9CgpAcGF0Y2gKdm9pZCBfcmV0aHJvdyhPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgbmF0aXZlICJBc3luY19yZXRocm93IjsKCkBwYXRjaApjbGFzcyBfRnV0dXJlPFQ+IHsKICAvLy8gVGhlIGNsb3N1cmUgaW1wbGVtZW50aW5nIHRoZSBhc3luY1sqXS1ib2R5IHRoYXQgaXMgYGF3YWl0YGluZyB0aGlzIGZ1dHVyZS4KICBGdW5jdGlvbiBfYXdhaXRlcjsKfQoKQHBhdGNoCmNsYXNzIF9TdHJlYW1JbXBsPFQ+IHsKICAvLy8gVGhlIGNsb3N1cmUgaW1wbGVtZW50aW5nIHRoZSBhc3luY1sqXS1ib2R5IHRoYXQgaXMgYGF3YWl0YGluZyB0aGlzIGZ1dHVyZS4KICBGdW5jdGlvbiBfYXdhaXRlcjsKCiAgLy8vIFRoZSBjbG9zdXJlIGltcGxlbWVudGluZyB0aGUgYXN5bmMtZ2VuZXJhdG9yIGJvZHkgdGhhdCBpcyBjcmVhdGluZyBldmVudHMKICAvLy8gZm9yIHRoaXMgc3RyZWFtLgogIEZ1bmN0aW9uIF9nZW5lcmF0b3I7Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQp2b2lkIF9jb21wbGV0ZU9uQXN5bmNSZXR1cm4oQ29tcGxldGVyIGNvbXBsZXRlciwgT2JqZWN0IHZhbHVlKSB7CiAgY29tcGxldGVyLmNvbXBsZXRlKHZhbHVlKTsKfQoKLy8vIFJldHVybnMgYSBbU3RhY2tUcmFjZV0gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHN5bmNocm9ub3VzIHByZWZpeCBmb3IgdGhpcwovLy8gYXN5bmNocm9ub3VzIG1ldGhvZC4KLy8KLy8gVGhpcyBtZXRob2QgaXMgcmVjb2duaXplZC4gSXQgcGVyZm9ybXMgYSBydW50aW1lIGNhbGwgaWYKLy8gRkxBR19jYXVzYWxfYXN5bmNfc3RhY2tzIGlzIGVuYWJsZWQgb3IgcmV0dXJucyBgbnVsbGAgb3RoZXJ3aXNlLgpAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKT2JqZWN0IF9hc3luY1N0YWNrVHJhY2VIZWxwZXIoRnVuY3Rpb24gYXN5bmNfb3ApCiAgICBuYXRpdmUgIlN0YWNrVHJhY2VfYXN5bmNTdGFja1RyYWNlSGVscGVyIjsKCi8vIFRoaXMgbWV0aG9kIGlzIGFzbSBpbnRyaW5zaWZpZWQuCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQp2b2lkIF9jbGVhckFzeW5jVGhyZWFkU3RhY2tUcmFjZSgpCiAgICBuYXRpdmUgIlN0YWNrVHJhY2VfY2xlYXJBc3luY1RocmVhZFN0YWNrVHJhY2UiOwoKLy8gVGhpcyBtZXRob2QgaXMgYXNtIGludHJpbnNpZmllZC4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCnZvaWQgX3NldEFzeW5jVGhyZWFkU3RhY2tUcmFjZShTdGFja1RyYWNlIHN0YWNrVHJhY2UpCiAgICBuYXRpdmUgIlN0YWNrVHJhY2Vfc2V0QXN5bmNUaHJlYWRTdGFja1RyYWNlIjsKCnZvaWQgX21vdmVOZXh0RGVidWdnZXJTdGVwQ2hlY2soRnVuY3Rpb24gYXN5bmNfb3ApCiAgICBuYXRpdmUgIkFzeW5jU3Rhck1vdmVOZXh0X2RlYnVnZ2VyU3RlcENoZWNrIjsKgTkATk48AU1QTSQBNAE6JCkcAS4mATgkDwErAScpJQ0pBgQBIBIlDSoGBAESCRMEASMxAgFOLigxTkZQUE1OQAVOOQVPRkwgNlECAU1IMjA6Nz0CAUwEPgQ0FU4bLyM+BB4FR01QBVFEHTkCAUQaNyAMBCIdAgEiLCAMBB4jPQwEMQIBQx8aJiIaGSEcIyUBGS8jKAYSBAETGSAVBAEdOg4GGCAEAUkhBUdJMDwYDikWSThIIxMGGxkfEgQBQDs2MSElSUguFU0eGBszCBIEATdLTBk8DgZIKSxGRkhEBAEMS0wZMwYYBAEzJyEhIgQBDx8dGQQBDx4bBgQBDx8TBiYqQkEgIB0IBh8EAgEHSwEHE1EVAgEHF1EVAVAXFwIBIkEdAgFNGQM8RBwxLwEkIiM0ASQiNjIBMzIBIWRhcnQ6YXN5bmMtcGF0Y2gvYXN5bmNfcGF0Y2guZGFydD1vcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL3NjaGVkdWxlX21pY3JvdGFza19wYXRjaC5kYXJ0g40vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiYXN5bmNfcGF0Y2guZGFydCI7CgpAcGF0Y2gKY2xhc3MgX0FzeW5jUnVuIHsKICBAcGF0Y2gKICBzdGF0aWMgdm9pZCBfc2NoZWR1bGVJbW1lZGlhdGUodm9pZCBjYWxsYmFjaygpKSB7CiAgICBpZiAoX1NjaGVkdWxlSW1tZWRpYXRlLl9jbG9zdXJlID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIk1pY3JvdGFza3MgYXJlIG5vdCBzdXBwb3J0ZWQiKTsKICAgIH0KICAgIF9TY2hlZHVsZUltbWVkaWF0ZS5fY2xvc3VyZShjYWxsYmFjayk7CiAgfQp9Cgp0eXBlZGVmIHZvaWQgX1NjaGVkdWxlSW1tZWRpYXRlQ2xvc3VyZSh2b2lkIGNhbGxiYWNrKCkpOwoKY2xhc3MgX1NjaGVkdWxlSW1tZWRpYXRlIHsKICBzdGF0aWMgX1NjaGVkdWxlSW1tZWRpYXRlQ2xvc3VyZSBfY2xvc3VyZTsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCnZvaWQgX3NldFNjaGVkdWxlSW1tZWRpYXRlQ2xvc3VyZShfU2NoZWR1bGVJbW1lZGlhdGVDbG9zdXJlIGNsb3N1cmUpIHsKICBfU2NoZWR1bGVJbW1lZGlhdGUuX2Nsb3N1cmUgPSBjbG9zdXJlOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKdm9pZCBfZW5zdXJlU2NoZWR1bGVJbW1lZGlhdGUoKSB7CiAgX0FzeW5jUnVuLl9zY2hlZHVsZUltbWVkaWF0ZShfc3RhcnRNaWNyb3Rhc2tMb29wKTsKfQoiAE5OPAEfAQcSCTQvQgYrBAIBOQEbLQIBIkcpAgEiIjUCAS5kYXJ0OmFzeW5jLXBhdGNoL3NjaGVkdWxlX21pY3JvdGFza19wYXRjaC5kYXJ0MG9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvdGltZXJfcGF0Y2guZGFydIXuLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImFzeW5jX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIFRpbWVyIHsKICBAcGF0Y2gKICBzdGF0aWMgVGltZXIgX2NyZWF0ZVRpbWVyKER1cmF0aW9uIGR1cmF0aW9uLCB2b2lkIGNhbGxiYWNrKCkpIHsKICAgIC8vIFRPRE8oaXBvc3ZhKTogUmVtb3ZlIF9UaW1lckZhY3RvcnkgYW5kIHVzZSBWTUxpYnJhcnlIb29rcyBleGNsdXNpdmVseS4KICAgIGlmIChfVGltZXJGYWN0b3J5Ll9mYWN0b3J5ID09IG51bGwpIHsKICAgICAgX1RpbWVyRmFjdG9yeS5fZmFjdG9yeSA9IFZNTGlicmFyeUhvb2tzLnRpbWVyRmFjdG9yeTsKICAgIH0KICAgIGlmIChfVGltZXJGYWN0b3J5Ll9mYWN0b3J5ID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlRpbWVyIGludGVyZmFjZSBub3Qgc3VwcG9ydGVkLiIpOwogICAgfQogICAgaW50IG1pbGxpc2Vjb25kcyA9IGR1cmF0aW9uLmluTWlsbGlzZWNvbmRzOwogICAgaWYgKG1pbGxpc2Vjb25kcyA8IDApIG1pbGxpc2Vjb25kcyA9IDA7CiAgICByZXR1cm4gX1RpbWVyRmFjdG9yeS5fZmFjdG9yeShtaWxsaXNlY29uZHMsIChfKSB7CiAgICAgIGNhbGxiYWNrKCk7CiAgICB9LCBmYWxzZSk7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgVGltZXIgX2NyZWF0ZVBlcmlvZGljVGltZXIoCiAgICAgIER1cmF0aW9uIGR1cmF0aW9uLCB2b2lkIGNhbGxiYWNrKFRpbWVyIHRpbWVyKSkgewogICAgLy8gVE9ETyhpcG9zdmEpOiBSZW1vdmUgX1RpbWVyRmFjdG9yeSBhbmQgdXNlIFZNTGlicmFyeUhvb2tzIGV4Y2x1c2l2ZWx5LgogICAgX1RpbWVyRmFjdG9yeS5fZmFjdG9yeSA/Pz0gVk1MaWJyYXJ5SG9va3MudGltZXJGYWN0b3J5OwogICAgaWYgKF9UaW1lckZhY3RvcnkuX2ZhY3RvcnkgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVGltZXIgaW50ZXJmYWNlIG5vdCBzdXBwb3J0ZWQuIik7CiAgICB9CiAgICBpbnQgbWlsbGlzZWNvbmRzID0gZHVyYXRpb24uaW5NaWxsaXNlY29uZHM7CiAgICBpZiAobWlsbGlzZWNvbmRzIDwgMCkgbWlsbGlzZWNvbmRzID0gMDsKICAgIHJldHVybiBfVGltZXJGYWN0b3J5Ll9mYWN0b3J5KG1pbGxpc2Vjb25kcywgY2FsbGJhY2ssIHRydWUpOwogIH0KfQoKdHlwZWRlZiBUaW1lciBfVGltZXJGYWN0b3J5Q2xvc3VyZSgKICAgIGludCBtaWxsaXNlY29uZHMsIHZvaWQgY2FsbGJhY2soVGltZXIgdGltZXIpLCBib29sIHJlcGVhdGluZyk7CgpjbGFzcyBfVGltZXJGYWN0b3J5IHsKICBzdGF0aWMgX1RpbWVyRmFjdG9yeUNsb3N1cmUgX2ZhY3Rvcnk7Cn0KLgBOTjwBHwEHDglCTio8BipEBjAsNhIPBAEJJTdOPCpEBjAsQQQCASRDARYoAgEhZGFydDphc3luYy1wYXRjaC90aW1lcl9wYXRjaC5kYXJ0Qm9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9hc3luYy9icm9hZGNhc3Rfc3RyZWFtX2NvbnRyb2xsZXIuZGFydLyOLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5hc3luYzsKCmNsYXNzIF9Ccm9hZGNhc3RTdHJlYW08VD4gZXh0ZW5kcyBfQ29udHJvbGxlclN0cmVhbTxUPiB7CiAgX0Jyb2FkY2FzdFN0cmVhbShfU3RyZWFtQ29udHJvbGxlckxpZmVjeWNsZTxUPiBjb250cm9sbGVyKQogICAgICA6IHN1cGVyKGNvbnRyb2xsZXIpOwoKICBib29sIGdldCBpc0Jyb2FkY2FzdCA9PiB0cnVlOwp9CgpjbGFzcyBfQnJvYWRjYXN0U3Vic2NyaXB0aW9uPFQ+IGV4dGVuZHMgX0NvbnRyb2xsZXJTdWJzY3JpcHRpb248VD4gewogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0VWRU5UX0lEID0gMTsKICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9GSVJJTkcgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX1JFTU9WRV9BRlRFUl9GSVJJTkcgPSA0OwogIC8vIFRPRE8obHJuKTogVXNlIHRoZSBfc3RhdGUgZmllbGQgb24gX0NvbnRyb2xsZXJTdWJzY3JpcHRpb24gdG8KICAvLyBhbHNvIHN0b3JlIHRoaXMgc3RhdGUuIFJlcXVpcmVzIHRoYXQgdGhlIHN1YnNjcmlwdGlvbiBpbXBsZW1lbnRhdGlvbgogIC8vIGRvZXMgbm90IGFzc3VtZSB0aGF0IGl0J3MgdXNlIG9mIHRoZSBzdGF0ZSBpbnRlZ2VyIGlzIHRoZSBvbmx5IHVzZS4KICBpbnQgX2V2ZW50U3RhdGUgPSAwOyAvLyBJbml0aWFsaXplZCB0byBoZWxwIGRhcnQyanMgdHlwZSBpbmZlcmVuY2UuCgogIF9Ccm9hZGNhc3RTdWJzY3JpcHRpb248VD4gX25leHQ7CiAgX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPiBfcHJldmlvdXM7CgogIF9Ccm9hZGNhc3RTdWJzY3JpcHRpb24oX1N0cmVhbUNvbnRyb2xsZXJMaWZlY3ljbGU8VD4gY29udHJvbGxlciwKICAgICAgdm9pZCBvbkRhdGEoVCBkYXRhKSwgRnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yKQogICAgICA6IHN1cGVyKGNvbnRyb2xsZXIsIG9uRGF0YSwgb25FcnJvciwgb25Eb25lLCBjYW5jZWxPbkVycm9yKSB7CiAgICBfbmV4dCA9IF9wcmV2aW91cyA9IHRoaXM7CiAgfQoKICBib29sIF9leHBlY3RzRXZlbnQoaW50IGV2ZW50SWQpID0+IChfZXZlbnRTdGF0ZSAmIF9TVEFURV9FVkVOVF9JRCkgPT0gZXZlbnRJZDsKCiAgdm9pZCBfdG9nZ2xlRXZlbnRJZCgpIHsKICAgIF9ldmVudFN0YXRlIF49IF9TVEFURV9FVkVOVF9JRDsKICB9CgogIGJvb2wgZ2V0IF9pc0ZpcmluZyA9PiAoX2V2ZW50U3RhdGUgJiBfU1RBVEVfRklSSU5HKSAhPSAwOwoKICB2b2lkIF9zZXRSZW1vdmVBZnRlckZpcmluZygpIHsKICAgIGFzc2VydChfaXNGaXJpbmcpOwogICAgX2V2ZW50U3RhdGUgfD0gX1NUQVRFX1JFTU9WRV9BRlRFUl9GSVJJTkc7CiAgfQoKICBib29sIGdldCBfcmVtb3ZlQWZ0ZXJGaXJpbmcgPT4KICAgICAgKF9ldmVudFN0YXRlICYgX1NUQVRFX1JFTU9WRV9BRlRFUl9GSVJJTkcpICE9IDA7CgogIC8vIFRoZSBjb250cm9sbGVyLl9yZWNvcmRQYXVzZSBkb2Vzbid0IGRvIGFueXRoaW5nIGZvciBhIGJyb2FkY2FzdCBjb250cm9sbGVyLAogIC8vIHNvIHdlIGRvbid0IGJvdGhlciBjYWxsaW5nIGl0LgogIHZvaWQgX29uUGF1c2UoKSB7fQoKICAvLyBUaGUgY29udHJvbGxlci5fcmVjb3JkUmVzdW1lIGRvZXNuJ3QgZG8gYW55dGhpbmcgZm9yIGEgYnJvYWRjYXN0CiAgLy8gY29udHJvbGxlciwgc28gd2UgZG9uJ3QgYm90aGVyIGNhbGxpbmcgaXQuCiAgdm9pZCBfb25SZXN1bWUoKSB7fQoKICAvLyBfb25DYW5jZWwgaXMgaW5oZXJpdGVkLgp9CgphYnN0cmFjdCBjbGFzcyBfQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcjxUPgogICAgaW1wbGVtZW50cyBfU3RyZWFtQ29udHJvbGxlckJhc2U8VD4gewogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0lOSVRJQUwgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0VWRU5UX0lEID0gMTsKICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9GSVJJTkcgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0NMT1NFRCA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfQUREU1RSRUFNID0gODsKCiAgQ29udHJvbGxlckNhbGxiYWNrIG9uTGlzdGVuOwogIENvbnRyb2xsZXJDYW5jZWxDYWxsYmFjayBvbkNhbmNlbDsKCiAgLy8gU3RhdGUgb2YgdGhlIGNvbnRyb2xsZXIuCiAgaW50IF9zdGF0ZTsKCiAgLy8gRG91YmxlLWxpbmtlZCBsaXN0IG9mIGFjdGl2ZSBsaXN0ZW5lcnMuCiAgX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPiBfZmlyc3RTdWJzY3JpcHRpb247CiAgX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPiBfbGFzdFN1YnNjcmlwdGlvbjsKCiAgLy8gRXh0cmEgc3RhdGUgdXNlZCBkdXJpbmcgYW4gW2FkZFN0cmVhbV0gY2FsbC4KICBfQWRkU3RyZWFtU3RhdGU8VD4gX2FkZFN0cmVhbVN0YXRlOwoKICAvKioKICAgKiBGdXR1cmUgcmV0dXJuZWQgYnkgW2Nsb3NlXSBhbmQgW2RvbmVdLgogICAqCiAgICogVGhlIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2hlbmV2ZXIgdGhlIGRvbmUgZXZlbnQgaGFzIGJlZW4gc2VudCB0byBhbGwKICAgKiByZWxldmFudCBsaXN0ZW5lcnMuCiAgICogVGhlIHJlbGV2YW50IGxpc3RlbmVycyBhcmUgdGhlIG9uZXMgdGhhdCB3ZXJlIGxpc3RlbmluZyB3aGVuIFtjbG9zZV0gd2FzCiAgICogY2FsbGVkLiBXaGVuIGFsbCBvZiB0aGVzZSBoYXZlIGJlZW4gY2FuY2VsZWQgKHNlbmRpbmcgdGhlIGRvbmUgZXZlbnQgbWFrZXMKICAgKiB0aGVtIGNhbmNlbCwgYnV0IHRoZXkgY2FuIGFsc28gYmUgY2FuY2VsZWQgYmVmb3JlIHNlbmRpbmcgdGhlIGV2ZW50KSwKICAgKiB0aGlzIGZ1dHVyZSBjb21wbGV0ZXMuCiAgICoKICAgKiBBbnkgYXR0ZW1wdCB0byBsaXN0ZW4gYWZ0ZXIgY2FsbGluZyBbY2xvc2VdIHdpbGwgdGhyb3csIHNvIHRoZXJlIHdvbid0CiAgICogYmUgYW55IGZ1cnRoZXIgbGlzdGVuZXJzLgogICAqLwogIF9GdXR1cmUgX2RvbmVGdXR1cmU7CgogIF9Ccm9hZGNhc3RTdHJlYW1Db250cm9sbGVyKHRoaXMub25MaXN0ZW4sIHRoaXMub25DYW5jZWwpCiAgICAgIDogX3N0YXRlID0gX1NUQVRFX0lOSVRJQUw7CgogIENvbnRyb2xsZXJDYWxsYmFjayBnZXQgb25QYXVzZSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiQnJvYWRjYXN0IHN0cmVhbSBjb250cm9sbGVycyBkbyBub3Qgc3VwcG9ydCBwYXVzZSBjYWxsYmFja3MiKTsKICB9CgogIHZvaWQgc2V0IG9uUGF1c2Uodm9pZCBvblBhdXNlSGFuZGxlcigpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiQnJvYWRjYXN0IHN0cmVhbSBjb250cm9sbGVycyBkbyBub3Qgc3VwcG9ydCBwYXVzZSBjYWxsYmFja3MiKTsKICB9CgogIENvbnRyb2xsZXJDYWxsYmFjayBnZXQgb25SZXN1bWUgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIkJyb2FkY2FzdCBzdHJlYW0gY29udHJvbGxlcnMgZG8gbm90IHN1cHBvcnQgcGF1c2UgY2FsbGJhY2tzIik7CiAgfQoKICB2b2lkIHNldCBvblJlc3VtZSh2b2lkIG9uUmVzdW1lSGFuZGxlcigpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiQnJvYWRjYXN0IHN0cmVhbSBjb250cm9sbGVycyBkbyBub3Qgc3VwcG9ydCBwYXVzZSBjYWxsYmFja3MiKTsKICB9CgogIC8vIFN0cmVhbUNvbnRyb2xsZXIgaW50ZXJmYWNlLgoKICBTdHJlYW08VD4gZ2V0IHN0cmVhbSA9PiBuZXcgX0Jyb2FkY2FzdFN0cmVhbTxUPih0aGlzKTsKCiAgU3RyZWFtU2luazxUPiBnZXQgc2luayA9PiBuZXcgX1N0cmVhbVNpbmtXcmFwcGVyPFQ+KHRoaXMpOwoKICBib29sIGdldCBpc0Nsb3NlZCA9PiAoX3N0YXRlICYgX1NUQVRFX0NMT1NFRCkgIT0gMDsKCiAgLyoqCiAgICogQSBicm9hZGNhc3QgY29udHJvbGxlciBpcyBuZXZlciBwYXVzZWQuCiAgICoKICAgKiBFYWNoIHJlY2VpdmluZyBzdHJlYW0gbWF5IGJlIHBhdXNlZCBpbmRpdmlkdWFsbHksIGFuZCB0aGV5IGhhbmRsZSB0aGVpcgogICAqIG93biBidWZmZXJpbmcuCiAgICovCiAgYm9vbCBnZXQgaXNQYXVzZWQgPT4gZmFsc2U7CgogIC8qKiBXaGV0aGVyIHRoZXJlIGFyZSBjdXJyZW50bHkgb25lIG9yIG1vcmUgc3Vic2NyaWJlcnMuICovCiAgYm9vbCBnZXQgaGFzTGlzdGVuZXIgPT4gIV9pc0VtcHR5OwoKICAvKioKICAgKiBUZXN0IHdoZXRoZXIgdGhlIHN0cmVhbSBoYXMgZXhhY3RseSBvbmUgbGlzdGVuZXIuCiAgICoKICAgKiBBc3N1bWVzIHRoYXQgdGhlIHN0cmVhbSBoYXMgYSBsaXN0ZW5lciAobm90IFtfaXNFbXB0eV0pLgogICAqLwogIGJvb2wgZ2V0IF9oYXNPbmVMaXN0ZW5lciB7CiAgICBhc3NlcnQoIV9pc0VtcHR5KTsKICAgIHJldHVybiBpZGVudGljYWwoX2ZpcnN0U3Vic2NyaXB0aW9uLCBfbGFzdFN1YnNjcmlwdGlvbik7CiAgfQoKICAvKiogV2hldGhlciBhbiBldmVudCBpcyBiZWluZyBmaXJlZCAoc2VudCB0byBzb21lLCBidXQgbm90IGFsbCwgbGlzdGVuZXJzKS4gKi8KICBib29sIGdldCBfaXNGaXJpbmcgPT4gKF9zdGF0ZSAmIF9TVEFURV9GSVJJTkcpICE9IDA7CgogIGJvb2wgZ2V0IF9pc0FkZGluZ1N0cmVhbSA9PiAoX3N0YXRlICYgX1NUQVRFX0FERFNUUkVBTSkgIT0gMDsKCiAgYm9vbCBnZXQgX21heUFkZEV2ZW50ID0+IChfc3RhdGUgPCBfU1RBVEVfQ0xPU0VEKTsKCiAgX0Z1dHVyZSBfZW5zdXJlRG9uZUZ1dHVyZSgpIHsKICAgIGlmIChfZG9uZUZ1dHVyZSAhPSBudWxsKSByZXR1cm4gX2RvbmVGdXR1cmU7CiAgICByZXR1cm4gX2RvbmVGdXR1cmUgPSBuZXcgX0Z1dHVyZSgpOwogIH0KCiAgLy8gTGlua2VkIGxpc3QgaGVscGVycwoKICBib29sIGdldCBfaXNFbXB0eSA9PiBfZmlyc3RTdWJzY3JpcHRpb24gPT0gbnVsbDsKCiAgLyoqIEFkZHMgc3Vic2NyaXB0aW9uIHRvIGxpbmtlZCBsaXN0IG9mIGFjdGl2ZSBsaXN0ZW5lcnMuICovCiAgdm9pZCBfYWRkTGlzdGVuZXIoX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pIHsKICAgIGFzc2VydChpZGVudGljYWwoc3Vic2NyaXB0aW9uLl9uZXh0LCBzdWJzY3JpcHRpb24pKTsKICAgIHN1YnNjcmlwdGlvbi5fZXZlbnRTdGF0ZSA9IChfc3RhdGUgJiBfU1RBVEVfRVZFTlRfSUQpOwogICAgLy8gSW5zZXJ0IGluIGxpbmtlZCBsaXN0IGFzIGxhc3Qgc3Vic2NyaXB0aW9uLgogICAgX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPiBvbGRMYXN0ID0gX2xhc3RTdWJzY3JpcHRpb247CiAgICBfbGFzdFN1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbjsKICAgIHN1YnNjcmlwdGlvbi5fbmV4dCA9IG51bGw7CiAgICBzdWJzY3JpcHRpb24uX3ByZXZpb3VzID0gb2xkTGFzdDsKICAgIGlmIChvbGRMYXN0ID09IG51bGwpIHsKICAgICAgX2ZpcnN0U3Vic2NyaXB0aW9uID0gc3Vic2NyaXB0aW9uOwogICAgfSBlbHNlIHsKICAgICAgb2xkTGFzdC5fbmV4dCA9IHN1YnNjcmlwdGlvbjsKICAgIH0KICB9CgogIHZvaWQgX3JlbW92ZUxpc3RlbmVyKF9Ccm9hZGNhc3RTdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uKSB7CiAgICBhc3NlcnQoaWRlbnRpY2FsKHN1YnNjcmlwdGlvbi5fY29udHJvbGxlciwgdGhpcykpOwogICAgYXNzZXJ0KCFpZGVudGljYWwoc3Vic2NyaXB0aW9uLl9uZXh0LCBzdWJzY3JpcHRpb24pKTsKICAgIF9Ccm9hZGNhc3RTdWJzY3JpcHRpb248VD4gcHJldmlvdXMgPSBzdWJzY3JpcHRpb24uX3ByZXZpb3VzOwogICAgX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPiBuZXh0ID0gc3Vic2NyaXB0aW9uLl9uZXh0OwogICAgaWYgKHByZXZpb3VzID09IG51bGwpIHsKICAgICAgLy8gVGhpcyB3YXMgdGhlIGZpcnN0IHN1YnNjcmlwdGlvbi4KICAgICAgX2ZpcnN0U3Vic2NyaXB0aW9uID0gbmV4dDsKICAgIH0gZWxzZSB7CiAgICAgIHByZXZpb3VzLl9uZXh0ID0gbmV4dDsKICAgIH0KICAgIGlmIChuZXh0ID09IG51bGwpIHsKICAgICAgLy8gVGhpcyB3YXMgdGhlIGxhc3Qgc3Vic2NyaXB0aW9uLgogICAgICBfbGFzdFN1YnNjcmlwdGlvbiA9IHByZXZpb3VzOwogICAgfSBlbHNlIHsKICAgICAgbmV4dC5fcHJldmlvdXMgPSBwcmV2aW91czsKICAgIH0KCiAgICBzdWJzY3JpcHRpb24uX25leHQgPSBzdWJzY3JpcHRpb24uX3ByZXZpb3VzID0gc3Vic2NyaXB0aW9uOwogIH0KCiAgLy8gX1N0cmVhbUNvbnRyb2xsZXJMaWZlY3ljbGUgaW50ZXJmYWNlLgoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gX3N1YnNjcmliZSh2b2lkIG9uRGF0YShUIGRhdGEpLCBGdW5jdGlvbiBvbkVycm9yLAogICAgICB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3IpIHsKICAgIGlmIChpc0Nsb3NlZCkgewogICAgICBvbkRvbmUgPz89IF9udWxsRG9uZUhhbmRsZXI7CiAgICAgIHJldHVybiBuZXcgX0RvbmVTdHJlYW1TdWJzY3JpcHRpb248VD4ob25Eb25lKTsKICAgIH0KICAgIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24gPSBuZXcgX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPigKICAgICAgICB0aGlzLCBvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvcik7CiAgICBfYWRkTGlzdGVuZXIoc3Vic2NyaXB0aW9uKTsKICAgIGlmIChpZGVudGljYWwoX2ZpcnN0U3Vic2NyaXB0aW9uLCBfbGFzdFN1YnNjcmlwdGlvbikpIHsKICAgICAgLy8gT25seSBvbmUgbGlzdGVuZXIsIHNvIGl0IG11c3QgYmUgdGhlIGZpcnN0IGxpc3RlbmVyLgogICAgICBfcnVuR3VhcmRlZChvbkxpc3Rlbik7CiAgICB9CiAgICByZXR1cm4gc3Vic2NyaXB0aW9uOwogIH0KCiAgRnV0dXJlIF9yZWNvcmRDYW5jZWwoU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YikgewogICAgX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24gPSBzdWI7CiAgICAvLyBJZiBhbHJlYWR5IHJlbW92ZWQgYnkgdGhlIHN0cmVhbSwgZG9uJ3QgcmVtb3ZlIGl0IGFnYWluLgogICAgaWYgKGlkZW50aWNhbChzdWJzY3JpcHRpb24uX25leHQsIHN1YnNjcmlwdGlvbikpIHJldHVybiBudWxsOwogICAgaWYgKHN1YnNjcmlwdGlvbi5faXNGaXJpbmcpIHsKICAgICAgc3Vic2NyaXB0aW9uLl9zZXRSZW1vdmVBZnRlckZpcmluZygpOwogICAgfSBlbHNlIHsKICAgICAgX3JlbW92ZUxpc3RlbmVyKHN1YnNjcmlwdGlvbik7CiAgICAgIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgZmlyaW5nIGFuIGV2ZW50LCB0aGUgZW1wdHktY2hlY2sgaXMgcGVyZm9ybWVkIGF0CiAgICAgIC8vIHRoZSBlbmQgb2YgdGhlIGxpc3RlbmVyIGxvb3AgaW5zdGVhZCBvZiBoZXJlLgogICAgICBpZiAoIV9pc0ZpcmluZyAmJiBfaXNFbXB0eSkgewogICAgICAgIF9jYWxsT25DYW5jZWwoKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIF9yZWNvcmRQYXVzZShTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uKSB7fQogIHZvaWQgX3JlY29yZFJlc3VtZShTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uKSB7fQoKICAvLyBFdmVudFNpbmsgaW50ZXJmYWNlLgoKICBFcnJvciBfYWRkRXZlbnRFcnJvcigpIHsKICAgIGlmIChpc0Nsb3NlZCkgewogICAgICByZXR1cm4gbmV3IFN0YXRlRXJyb3IoIkNhbm5vdCBhZGQgbmV3IGV2ZW50cyBhZnRlciBjYWxsaW5nIGNsb3NlIik7CiAgICB9CiAgICBhc3NlcnQoX2lzQWRkaW5nU3RyZWFtKTsKICAgIHJldHVybiBuZXcgU3RhdGVFcnJvcigiQ2Fubm90IGFkZCBuZXcgZXZlbnRzIHdoaWxlIGRvaW5nIGFuIGFkZFN0cmVhbSIpOwogIH0KCiAgdm9pZCBhZGQoVCBkYXRhKSB7CiAgICBpZiAoIV9tYXlBZGRFdmVudCkgdGhyb3cgX2FkZEV2ZW50RXJyb3IoKTsKICAgIF9zZW5kRGF0YShkYXRhKTsKICB9CgogIHZvaWQgYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgZXJyb3IgPSBfbm9uTnVsbEVycm9yKGVycm9yKTsKICAgIGlmICghX21heUFkZEV2ZW50KSB0aHJvdyBfYWRkRXZlbnRFcnJvcigpOwogICAgQXN5bmNFcnJvciByZXBsYWNlbWVudCA9IFpvbmUuY3VycmVudC5lcnJvckNhbGxiYWNrKGVycm9yLCBzdGFja1RyYWNlKTsKICAgIGlmIChyZXBsYWNlbWVudCAhPSBudWxsKSB7CiAgICAgIGVycm9yID0gX25vbk51bGxFcnJvcihyZXBsYWNlbWVudC5lcnJvcik7CiAgICAgIHN0YWNrVHJhY2UgPSByZXBsYWNlbWVudC5zdGFja1RyYWNlOwogICAgfQogICAgX3NlbmRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICBGdXR1cmUgY2xvc2UoKSB7CiAgICBpZiAoaXNDbG9zZWQpIHsKICAgICAgYXNzZXJ0KF9kb25lRnV0dXJlICE9IG51bGwpOwogICAgICByZXR1cm4gX2RvbmVGdXR1cmU7CiAgICB9CiAgICBpZiAoIV9tYXlBZGRFdmVudCkgdGhyb3cgX2FkZEV2ZW50RXJyb3IoKTsKICAgIF9zdGF0ZSB8PSBfU1RBVEVfQ0xPU0VEOwogICAgRnV0dXJlIGRvbmVGdXR1cmUgPSBfZW5zdXJlRG9uZUZ1dHVyZSgpOwogICAgX3NlbmREb25lKCk7CiAgICByZXR1cm4gZG9uZUZ1dHVyZTsKICB9CgogIEZ1dHVyZSBnZXQgZG9uZSA9PiBfZW5zdXJlRG9uZUZ1dHVyZSgpOwoKICBGdXR1cmUgYWRkU3RyZWFtKFN0cmVhbTxUPiBzdHJlYW0sIHtib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICBpZiAoIV9tYXlBZGRFdmVudCkgdGhyb3cgX2FkZEV2ZW50RXJyb3IoKTsKICAgIF9zdGF0ZSB8PSBfU1RBVEVfQUREU1RSRUFNOwogICAgX2FkZFN0cmVhbVN0YXRlID0gbmV3IF9BZGRTdHJlYW1TdGF0ZSh0aGlzLCBzdHJlYW0sIGNhbmNlbE9uRXJyb3IgPz8gZmFsc2UpOwogICAgcmV0dXJuIF9hZGRTdHJlYW1TdGF0ZS5hZGRTdHJlYW1GdXR1cmU7CiAgfQoKICAvLyBfRXZlbnRTaW5rIGludGVyZmFjZSwgY2FsbGVkIGZyb20gQWRkU3RyZWFtU3RhdGUuCiAgdm9pZCBfYWRkKFQgZGF0YSkgewogICAgX3NlbmREYXRhKGRhdGEpOwogIH0KCiAgdm9pZCBfYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIF9zZW5kRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgdm9pZCBfY2xvc2UoKSB7CiAgICBhc3NlcnQoX2lzQWRkaW5nU3RyZWFtKTsKICAgIF9BZGRTdHJlYW1TdGF0ZSBhZGRTdGF0ZSA9IF9hZGRTdHJlYW1TdGF0ZTsKICAgIF9hZGRTdHJlYW1TdGF0ZSA9IG51bGw7CiAgICBfc3RhdGUgJj0gfl9TVEFURV9BRERTVFJFQU07CiAgICBhZGRTdGF0ZS5jb21wbGV0ZSgpOwogIH0KCiAgLy8gRXZlbnQgaGFuZGxpbmcuCiAgdm9pZCBfZm9yRWFjaExpc3RlbmVyKAogICAgICB2b2lkIGFjdGlvbihfQnVmZmVyaW5nU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbikpIHsKICAgIGlmIChfaXNGaXJpbmcpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoCiAgICAgICAgICAiQ2Fubm90IGZpcmUgbmV3IGV2ZW50LiBDb250cm9sbGVyIGlzIGFscmVhZHkgZmlyaW5nIGFuIGV2ZW50Iik7CiAgICB9CiAgICBpZiAoX2lzRW1wdHkpIHJldHVybjsKCiAgICAvLyBHZXQgZXZlbnQgaWQgb2YgdGhpcyBldmVudC4KICAgIGludCBpZCA9IChfc3RhdGUgJiBfU1RBVEVfRVZFTlRfSUQpOwogICAgLy8gU3RhcnQgZmlyaW5nIChzZXQgdGhlIF9TVEFURV9GSVJJTkcgYml0KS4gV2UgZG9uJ3QgZG8gW29uQ2FuY2VsXQogICAgLy8gY2FsbGJhY2tzIHdoaWxlIGZpcmluZywgYW5kIHdlIHByZXZlbnQgcmVlbnRyYW5jeSBvZiB0aGlzIGZ1bmN0aW9uLgogICAgLy8KICAgIC8vIFNldCBbX3N0YXRlXSdzIGV2ZW50IGlkIHRvIHRoZSBuZXh0IGV2ZW50J3MgaWQuCiAgICAvLyBBbnkgbGlzdGVuZXJzIGFkZGVkIHdoaWxlIGZpcmluZyB0aGlzIGV2ZW50IHdpbGwgZXhwZWN0IHRoZSBuZXh0IGV2ZW50LAogICAgLy8gbm90IHRoaXMgb25lLCBhbmQgd29uJ3QgZ2V0IG5vdGlmaWVkLgogICAgX3N0YXRlIF49IF9TVEFURV9FVkVOVF9JRCB8IF9TVEFURV9GSVJJTkc7CiAgICBfQnJvYWRjYXN0U3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbiA9IF9maXJzdFN1YnNjcmlwdGlvbjsKICAgIHdoaWxlIChzdWJzY3JpcHRpb24gIT0gbnVsbCkgewogICAgICBpZiAoc3Vic2NyaXB0aW9uLl9leHBlY3RzRXZlbnQoaWQpKSB7CiAgICAgICAgc3Vic2NyaXB0aW9uLl9ldmVudFN0YXRlIHw9IF9Ccm9hZGNhc3RTdWJzY3JpcHRpb24uX1NUQVRFX0ZJUklORzsKICAgICAgICBhY3Rpb24oc3Vic2NyaXB0aW9uKTsKICAgICAgICBzdWJzY3JpcHRpb24uX3RvZ2dsZUV2ZW50SWQoKTsKICAgICAgICBfQnJvYWRjYXN0U3Vic2NyaXB0aW9uPFQ+IG5leHQgPSBzdWJzY3JpcHRpb24uX25leHQ7CiAgICAgICAgaWYgKHN1YnNjcmlwdGlvbi5fcmVtb3ZlQWZ0ZXJGaXJpbmcpIHsKICAgICAgICAgIF9yZW1vdmVMaXN0ZW5lcihzdWJzY3JpcHRpb24pOwogICAgICAgIH0KICAgICAgICBzdWJzY3JpcHRpb24uX2V2ZW50U3RhdGUgJj0gfl9Ccm9hZGNhc3RTdWJzY3JpcHRpb24uX1NUQVRFX0ZJUklORzsKICAgICAgICBzdWJzY3JpcHRpb24gPSBuZXh0OwogICAgICB9IGVsc2UgewogICAgICAgIHN1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbi5fbmV4dDsKICAgICAgfQogICAgfQogICAgX3N0YXRlICY9IH5fU1RBVEVfRklSSU5HOwoKICAgIGlmIChfaXNFbXB0eSkgewogICAgICBfY2FsbE9uQ2FuY2VsKCk7CiAgICB9CiAgfQoKICB2b2lkIF9jYWxsT25DYW5jZWwoKSB7CiAgICBhc3NlcnQoX2lzRW1wdHkpOwogICAgaWYgKGlzQ2xvc2VkICYmIF9kb25lRnV0dXJlLl9tYXlDb21wbGV0ZSkgewogICAgICAvLyBXaGVuIGNsb3NlZCwgX2RvbmVGdXR1cmUgaXMgbm90IG51bGwuCiAgICAgIF9kb25lRnV0dXJlLl9hc3luY0NvbXBsZXRlKG51bGwpOwogICAgfQogICAgX3J1bkd1YXJkZWQob25DYW5jZWwpOwogIH0KfQoKY2xhc3MgX1N5bmNCcm9hZGNhc3RTdHJlYW1Db250cm9sbGVyPFQ+IGV4dGVuZHMgX0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXI8VD4KICAgIGltcGxlbWVudHMgU3luY2hyb25vdXNTdHJlYW1Db250cm9sbGVyPFQ+IHsKICBfU3luY0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXIodm9pZCBvbkxpc3RlbigpLCB2b2lkIG9uQ2FuY2VsKCkpCiAgICAgIDogc3VwZXIob25MaXN0ZW4sIG9uQ2FuY2VsKTsKCiAgLy8gRXZlbnREaXNwYXRjaCBpbnRlcmZhY2UuCgogIGJvb2wgZ2V0IF9tYXlBZGRFdmVudCA9PiBzdXBlci5fbWF5QWRkRXZlbnQgJiYgIV9pc0ZpcmluZzsKCiAgX2FkZEV2ZW50RXJyb3IoKSB7CiAgICBpZiAoX2lzRmlyaW5nKSB7CiAgICAgIHJldHVybiBuZXcgU3RhdGVFcnJvcigKICAgICAgICAgICJDYW5ub3QgZmlyZSBuZXcgZXZlbnQuIENvbnRyb2xsZXIgaXMgYWxyZWFkeSBmaXJpbmcgYW4gZXZlbnQiKTsKICAgIH0KICAgIHJldHVybiBzdXBlci5fYWRkRXZlbnRFcnJvcigpOwogIH0KCiAgdm9pZCBfc2VuZERhdGEoVCBkYXRhKSB7CiAgICBpZiAoX2lzRW1wdHkpIHJldHVybjsKICAgIGlmIChfaGFzT25lTGlzdGVuZXIpIHsKICAgICAgX3N0YXRlIHw9IF9Ccm9hZGNhc3RTdHJlYW1Db250cm9sbGVyLl9TVEFURV9GSVJJTkc7CiAgICAgIF9Ccm9hZGNhc3RTdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uID0gX2ZpcnN0U3Vic2NyaXB0aW9uOwogICAgICBzdWJzY3JpcHRpb24uX2FkZChkYXRhKTsKICAgICAgX3N0YXRlICY9IH5fQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlci5fU1RBVEVfRklSSU5HOwogICAgICBpZiAoX2lzRW1wdHkpIHsKICAgICAgICBfY2FsbE9uQ2FuY2VsKCk7CiAgICAgIH0KICAgICAgcmV0dXJuOwogICAgfQogICAgX2ZvckVhY2hMaXN0ZW5lcigoX0J1ZmZlcmluZ1N0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pIHsKICAgICAgc3Vic2NyaXB0aW9uLl9hZGQoZGF0YSk7CiAgICB9KTsKICB9CgogIHZvaWQgX3NlbmRFcnJvcihPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgaWYgKF9pc0VtcHR5KSByZXR1cm47CiAgICBfZm9yRWFjaExpc3RlbmVyKChfQnVmZmVyaW5nU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbikgewogICAgICBzdWJzY3JpcHRpb24uX2FkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgIH0pOwogIH0KCiAgdm9pZCBfc2VuZERvbmUoKSB7CiAgICBpZiAoIV9pc0VtcHR5KSB7CiAgICAgIF9mb3JFYWNoTGlzdGVuZXIoKF9CdWZmZXJpbmdTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uKSB7CiAgICAgICAgc3Vic2NyaXB0aW9uLl9jbG9zZSgpOwogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChfZG9uZUZ1dHVyZSAhPSBudWxsKTsKICAgICAgYXNzZXJ0KF9kb25lRnV0dXJlLl9tYXlDb21wbGV0ZSk7CiAgICAgIF9kb25lRnV0dXJlLl9hc3luY0NvbXBsZXRlKG51bGwpOwogICAgfQogIH0KfQoKY2xhc3MgX0FzeW5jQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcjxUPiBleHRlbmRzIF9Ccm9hZGNhc3RTdHJlYW1Db250cm9sbGVyPFQ+IHsKICBfQXN5bmNCcm9hZGNhc3RTdHJlYW1Db250cm9sbGVyKHZvaWQgb25MaXN0ZW4oKSwgdm9pZCBvbkNhbmNlbCgpKQogICAgICA6IHN1cGVyKG9uTGlzdGVuLCBvbkNhbmNlbCk7CgogIC8vIEV2ZW50RGlzcGF0Y2ggaW50ZXJmYWNlLgoKICB2b2lkIF9zZW5kRGF0YShUIGRhdGEpIHsKICAgIGZvciAoX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24gPSBfZmlyc3RTdWJzY3JpcHRpb247CiAgICAgICAgc3Vic2NyaXB0aW9uICE9IG51bGw7CiAgICAgICAgc3Vic2NyaXB0aW9uID0gc3Vic2NyaXB0aW9uLl9uZXh0KSB7CiAgICAgIHN1YnNjcmlwdGlvbi5fYWRkUGVuZGluZyhuZXcgX0RlbGF5ZWREYXRhPFQ+KGRhdGEpKTsKICAgIH0KICB9CgogIHZvaWQgX3NlbmRFcnJvcihPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgZm9yIChfQnJvYWRjYXN0U3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbiA9IF9maXJzdFN1YnNjcmlwdGlvbjsKICAgICAgICBzdWJzY3JpcHRpb24gIT0gbnVsbDsKICAgICAgICBzdWJzY3JpcHRpb24gPSBzdWJzY3JpcHRpb24uX25leHQpIHsKICAgICAgc3Vic2NyaXB0aW9uLl9hZGRQZW5kaW5nKG5ldyBfRGVsYXllZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKSk7CiAgICB9CiAgfQoKICB2b2lkIF9zZW5kRG9uZSgpIHsKICAgIGlmICghX2lzRW1wdHkpIHsKICAgICAgZm9yIChfQnJvYWRjYXN0U3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbiA9IF9maXJzdFN1YnNjcmlwdGlvbjsKICAgICAgICAgIHN1YnNjcmlwdGlvbiAhPSBudWxsOwogICAgICAgICAgc3Vic2NyaXB0aW9uID0gc3Vic2NyaXB0aW9uLl9uZXh0KSB7CiAgICAgICAgc3Vic2NyaXB0aW9uLl9hZGRQZW5kaW5nKGNvbnN0IF9EZWxheWVkRG9uZSgpKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KF9kb25lRnV0dXJlICE9IG51bGwpOwogICAgICBhc3NlcnQoX2RvbmVGdXR1cmUuX21heUNvbXBsZXRlKTsKICAgICAgX2RvbmVGdXR1cmUuX2FzeW5jQ29tcGxldGUobnVsbCk7CiAgICB9CiAgfQp9CgovKioKICogU3RyZWFtIGNvbnRyb2xsZXIgdGhhdCBpcyB1c2VkIGJ5IFtTdHJlYW0uYXNCcm9hZGNhc3RTdHJlYW1dLgogKgogKiBUaGlzIHN0cmVhbSBjb250cm9sbGVyIGFsbG93cyBpbmNvbWluZyBldmVudHMgd2hpbGUgaXQgaXMgZmlyaW5nCiAqIG90aGVyIGV2ZW50cy4gVGhpcyBpcyBoYW5kbGVkIGJ5IGRlbGF5aW5nIHRoZSBldmVudHMgdW50aWwgdGhlCiAqIGN1cnJlbnQgZXZlbnQgaXMgZG9uZSBmaXJpbmcsIGFuZCB0aGVuIGZpcmUgdGhlIHBlbmRpbmcgZXZlbnRzLgogKgogKiBUaGlzIGNsYXNzIGV4dGVuZHMgW19TeW5jQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcl0uIEV2ZW50cyBvZgogKiBhbiAiYXNCcm9hZGNhc3RTdHJlYW0iIHN0cmVhbSBhcmUgYWx3YXlzIGluaXRpYXRlZCBieSBldmVudHMKICogb24gYW5vdGhlciBzdHJlYW0sIGFuZCBpdCBpcyBmaW5lIHRvIGZvcndhcmQgdGhlbSBzeW5jaHJvbm91c2x5LgogKi8KY2xhc3MgX0FzQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcjxUPiBleHRlbmRzIF9TeW5jQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcjxUPgogICAgaW1wbGVtZW50cyBfRXZlbnREaXNwYXRjaDxUPiB7CiAgX1N0cmVhbUltcGxFdmVudHM8VD4gX3BlbmRpbmc7CgogIF9Bc0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXIodm9pZCBvbkxpc3RlbigpLCB2b2lkIG9uQ2FuY2VsKCkpCiAgICAgIDogc3VwZXIob25MaXN0ZW4sIG9uQ2FuY2VsKTsKCiAgYm9vbCBnZXQgX2hhc1BlbmRpbmcgPT4gX3BlbmRpbmcgIT0gbnVsbCAmJiAhX3BlbmRpbmcuaXNFbXB0eTsKCiAgdm9pZCBfYWRkUGVuZGluZ0V2ZW50KF9EZWxheWVkRXZlbnQgZXZlbnQpIHsKICAgIF9wZW5kaW5nID8/PSBuZXcgX1N0cmVhbUltcGxFdmVudHM8VD4oKTsKICAgIF9wZW5kaW5nLmFkZChldmVudCk7CiAgfQoKICB2b2lkIGFkZChUIGRhdGEpIHsKICAgIGlmICghaXNDbG9zZWQgJiYgX2lzRmlyaW5nKSB7CiAgICAgIF9hZGRQZW5kaW5nRXZlbnQobmV3IF9EZWxheWVkRGF0YTxUPihkYXRhKSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHN1cGVyLmFkZChkYXRhKTsKICAgIHdoaWxlIChfaGFzUGVuZGluZykgewogICAgICBfcGVuZGluZy5oYW5kbGVOZXh0KHRoaXMpOwogICAgfQogIH0KCiAgdm9pZCBhZGRFcnJvcihPYmplY3QgZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICBpZiAoIWlzQ2xvc2VkICYmIF9pc0ZpcmluZykgewogICAgICBfYWRkUGVuZGluZ0V2ZW50KG5ldyBfRGVsYXllZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghX21heUFkZEV2ZW50KSB0aHJvdyBfYWRkRXZlbnRFcnJvcigpOwogICAgX3NlbmRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICB3aGlsZSAoX2hhc1BlbmRpbmcpIHsKICAgICAgX3BlbmRpbmcuaGFuZGxlTmV4dCh0aGlzKTsKICAgIH0KICB9CgogIEZ1dHVyZSBjbG9zZSgpIHsKICAgIGlmICghaXNDbG9zZWQgJiYgX2lzRmlyaW5nKSB7CiAgICAgIF9hZGRQZW5kaW5nRXZlbnQoY29uc3QgX0RlbGF5ZWREb25lKCkpOwogICAgICBfc3RhdGUgfD0gX0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXIuX1NUQVRFX0NMT1NFRDsKICAgICAgcmV0dXJuIHN1cGVyLmRvbmU7CiAgICB9CiAgICBGdXR1cmUgcmVzdWx0ID0gc3VwZXIuY2xvc2UoKTsKICAgIGFzc2VydCghX2hhc1BlbmRpbmcpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgX2NhbGxPbkNhbmNlbCgpIHsKICAgIGlmIChfaGFzUGVuZGluZykgewogICAgICBfcGVuZGluZy5jbGVhcigpOwogICAgICBfcGVuZGluZyA9IG51bGw7CiAgICB9CiAgICBzdXBlci5fY2FsbE9uQ2FuY2VsKCk7CiAgfQp9CoIAAE5OPAEUATk9GwEgAgFFKCYzQ0pJRgEjJwFDUEQeBAFRARokBAE8ASEXLwQBITcBUSQVAUYwFgEdAgEtKicoJiYpAR8lAR4OAS0wLwEyJgEGLAVKGU5QSxwFTB8GFwE7IQEjIEgEASwgSAQBJCBIBAEuIEgEASEBOQE9ATYBBi0FTRQGHgE+JQEGNwU+Bh0XPQQBUTcBQAE1ASAxKAQBGQEzAT8+OTszOyYfJhspDSQGBAFBNzpBORwqIQ0dBhgpJA0hBgFABAErAUorFCM1Bkg3IDw+HQYZBAE0MkBCIiwNJU43JBkIBhEEATs8ARoBGxRKBh1NBAEVLxUEATkiL0wfMCsGIwQBExQjGgYvHS0RFwQBKgE9LyBRLAQBNxYVBAE4IwQBEh0wHCEZBAEVGUMVHEsGGgEjKUhLBzdPLS9BIyxKHic9LykKSx0PKwgGHgEUFwYEARkWMC8oBhsEAgFOMEMjAR4BPQEVFR1LBiMEARsaGzpDHzsWGQgOBkYfCAQBORpGMQgEARUVSB8KDSMoKAYEAgFRRCMBHgEbRh4tOwYEATlGHi1GBgQBFRVIIC84CA0jKCgGBAIBBEEDREJDA0JARARQIyEBQSMBQQEvLRkEARUiMw4GFRohBgQBOSI+DgYvIxohBgQBEyIuOhkGIxoTBAEZFxgXBhsEAgErZGFydDphc3luYy9icm9hZGNhc3Rfc3RyZWFtX2NvbnRyb2xsZXIuZGFydDRvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvYXN5bmMvZGVmZXJyZWRfbG9hZC5kYXJ0g84vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmFzeW5jOwoKLyoqCiAqIEluZGljYXRlcyB0aGF0IGxvYWRpbmcgb2YgW2xpYnJhcnlOYW1lXSBpcyBkZWZlcnJlZC4KICoKICogVGhpcyBjbGFzcyBpcyBvYnNvbGV0ZS4gSW5zdGVhZCB1c2UgdGhlIHN5bnRheDoKICogaW1wb3J0ICJsaWJyYXJ5LmRhcnQiIGRlZmVycmVkIGFzIHByZWZpeDsKICovCkBEZXByZWNhdGVkKCJEYXJ0IHNkayB2LiAxLjgiKQpjbGFzcyBEZWZlcnJlZExpYnJhcnkgewogIGZpbmFsIFN0cmluZyBsaWJyYXJ5TmFtZTsKICBmaW5hbCBTdHJpbmcgdXJpOwoKICBjb25zdCBEZWZlcnJlZExpYnJhcnkodGhpcy5saWJyYXJ5TmFtZSwge3RoaXMudXJpfSk7CgogIC8qKgogICAqIEVuc3VyZSB0aGF0IFtsaWJyYXJ5TmFtZV0gaGFzIGJlZW4gbG9hZGVkLgogICAqCiAgICogSWYgdGhlIGxpYnJhcnkgZmFpbHMgdG8gbG9hZCwgdGhlIEZ1dHVyZSB3aWxsIGNvbXBsZXRlIHdpdGggYQogICAqIERlZmVycmVkTG9hZEV4Y2VwdGlvbi4KICAgKi8KICBleHRlcm5hbCBGdXR1cmU8TnVsbD4gbG9hZCgpOwp9CgovKioKICogVGhyb3duIHdoZW4gYSBkZWZlcnJlZCBsaWJyYXJ5IGZhaWxzIHRvIGxvYWQuCiAqLwpjbGFzcyBEZWZlcnJlZExvYWRFeGNlcHRpb24gaW1wbGVtZW50cyBFeGNlcHRpb24gewogIERlZmVycmVkTG9hZEV4Y2VwdGlvbih0aGlzLl9zKTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiRGVmZXJyZWRMb2FkRXhjZXB0aW9uOiAnJF9zJyI7CiAgZmluYWwgU3RyaW5nIF9zOwp9CiYATk48ARQBBDgDMy0EHxgcFAE3AQYwBUMcBiACAQQxBDMiNxMCAR1kYXJ0OmFzeW5jL2RlZmVycmVkX2xvYWQuZGFydDhvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL2RlZmVycmVkX2xvYWRfcGF0Y2guZGFydIJCLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImFzeW5jX3BhdGNoLmRhcnQiOwoKZmluYWwgU2V0PFN0cmluZz4gX2xvYWRlZExpYnJhcmllcyA9IG5ldyBTZXQ8U3RyaW5nPigpOwoKQHBhdGNoCmNsYXNzIERlZmVycmVkTGlicmFyeSB7CiAgQHBhdGNoCiAgRnV0dXJlPE51bGw+IGxvYWQoKSB7CiAgICAvLyBEdW1teSBpbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBldmVudHVhbGx5IGJlIHJlcGxhY2VkIGJ5IHJlYWwKICAgIC8vIGltcGxlbWVudGF0aW9uLgogICAgRnV0dXJlIGZ1dHVyZSA9IG5ldyBGdXR1cmU8TnVsbD4udmFsdWUobnVsbCk7CiAgICBfbG9hZGVkTGlicmFyaWVzLmFkZChsaWJyYXJ5TmFtZSk7CiAgICByZXR1cm4gZnV0dXJlOwogIH0KfQoVAE5OPAEfATgBBxgJGEcXMicTBAIBKWRhcnQ6YXN5bmMtcGF0Y2gvZGVmZXJyZWRfbG9hZF9wYXRjaC5kYXJ0LW9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9hc3luYy9mdXR1cmUuZGFydMAAiOcvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmFzeW5jOwoKLy8vIEEgdHlwZSByZXByZXNlbnRpbmcgdmFsdWVzIHRoYXQgYXJlIGVpdGhlciBgRnV0dXJlPFQ+YCBvciBgVGAuCi8vLwovLy8gVGhpcyBjbGFzcyBkZWNsYXJhdGlvbiBpcyBhIHB1YmxpYyBzdGFuZC1pbiBmb3IgYW4gaW50ZXJuYWwKLy8vIGZ1dHVyZS1vci12YWx1ZSBnZW5lcmljIHR5cGUuIFJlZmVyZW5jZXMgdG8gdGhpcyBjbGFzcyBhcmUgcmVzb2x2ZWQgdG8gdGhlCi8vLyBpbnRlcm5hbCB0eXBlLgovLy8KLy8vIEl0IGlzIGEgY29tcGlsZS10aW1lIGVycm9yIGZvciBhbnkgY2xhc3MgdG8gZXh0ZW5kLCBtaXggaW4gb3IgaW1wbGVtZW50Ci8vLyBgRnV0dXJlT3JgLgovLy8KLy8vIE5vdGU6IHRoZSBgRnV0dXJlT3I8VD5gIHR5cGUgaXMgaW50ZXJwcmV0ZWQgYXMgYGR5bmFtaWNgIGluIG5vbiBzdHJvbmctbW9kZS4KLy8vCi8vLyAjIEV4YW1wbGVzCi8vLyBgYGAgZGFydAovLy8gLy8gVGhlIGBGdXR1cmU8VD4udGhlbmAgZnVuY3Rpb24gdGFrZXMgYSBjYWxsYmFjayBbZl0gdGhhdCByZXR1cm5zIGVpdGhlcgovLy8gLy8gYW4gYFNgIG9yIGEgYEZ1dHVyZTxTPmAuCi8vLyBGdXR1cmU8Uz4gdGhlbjxTPihGdXR1cmVPcjxTPiBmKFQgeCksIC4uLik7Ci8vLwovLy8gLy8gYENvbXBsZXRlcjxUPi5jb21wbGV0ZWAgdGFrZXMgZWl0aGVyIGEgYFRgIG9yIGBGdXR1cmU8VD5gLgovLy8gdm9pZCBjb21wbGV0ZShGdXR1cmVPcjxUPiB2YWx1ZSk7Ci8vLyBgYGAKLy8vCi8vLyAjIEFkdmFuY2VkCi8vLyBUaGUgYEZ1dHVyZU9yPGludD5gIHR5cGUgaXMgYWN0dWFsbHkgdGhlICJ0eXBlIHVuaW9uIiBvZiB0aGUgdHlwZXMgYGludGAgYW5kCi8vLyBgRnV0dXJlPGludD5gLiBUaGlzIHR5cGUgdW5pb24gaXMgZGVmaW5lZCBpbiBzdWNoIGEgd2F5IHRoYXQKLy8vIGBGdXR1cmVPcjxPYmplY3Q+YCBpcyBib3RoIGEgc3VwZXItIGFuZCBzdWItdHlwZSBvZiBgT2JqZWN0YCAoc3ViLXR5cGUKLy8vIGJlY2F1c2UgYE9iamVjdGAgaXMgb25lIG9mIHRoZSB0eXBlcyBvZiB0aGUgdW5pb24sIHN1cGVyLXR5cGUgYmVjYXVzZQovLy8gYE9iamVjdGAgaXMgYSBzdXBlci10eXBlIG9mIGJvdGggb2YgdGhlIHR5cGVzIG9mIHRoZSB1bmlvbikuIFRvZ2V0aGVyIGl0Ci8vLyBtZWFucyB0aGF0IGBGdXR1cmVPcjxPYmplY3Q+YCBpcyBlcXVpdmFsZW50IHRvIGBPYmplY3RgLgovLy8KLy8vIEFzIGEgY29yb2xsYXJ5LCBgRnV0dXJlT3I8T2JqZWN0PmAgaXMgZXF1aXZhbGVudCB0bwovLy8gYEZ1dHVyZU9yPEZ1dHVyZU9yPE9iamVjdD4+YCwgYEZ1dHVyZU9yPEZ1dHVyZTxPYmplY3Q+PmAgaXMgZXF1aXZhbGVudCB0bwovLy8gYEZ1dHVyZTxPYmplY3Q+YC4KYWJzdHJhY3QgY2xhc3MgRnV0dXJlT3I8VD4gewogIC8vIFByaXZhdGUgZ2VuZXJhdGl2ZSBjb25zdHJ1Y3Rvciwgc28gdGhhdCBpdCBpcyBub3Qgc3ViY2xhc3NhYmxlLCBtaXhhYmxlLCBvcgogIC8vIGluc3RhbnRpYWJsZS4KICBGdXR1cmVPci5fKCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkZ1dHVyZU9yIGNhbid0IGJlIGluc3RhbnRpYXRlZCIpOwogIH0KfQoKLyoqCiAqIEFuIG9iamVjdCByZXByZXNlbnRpbmcgYSBkZWxheWVkIGNvbXB1dGF0aW9uLgogKgogKiBBIFtGdXR1cmVdIGlzIHVzZWQgdG8gcmVwcmVzZW50IGEgcG90ZW50aWFsIHZhbHVlLCBvciBlcnJvciwKICogdGhhdCB3aWxsIGJlIGF2YWlsYWJsZSBhdCBzb21lIHRpbWUgaW4gdGhlIGZ1dHVyZS4KICogUmVjZWl2ZXJzIG9mIGEgW0Z1dHVyZV0gY2FuIHJlZ2lzdGVyIGNhbGxiYWNrcwogKiB0aGF0IGhhbmRsZSB0aGUgdmFsdWUgb3IgZXJyb3Igb25jZSBpdCBpcyBhdmFpbGFibGUuCiAqIEZvciBleGFtcGxlOgogKgogKiAgICAgRnV0dXJlPGludD4gZnV0dXJlID0gZ2V0RnV0dXJlKCk7CiAqICAgICBmdXR1cmUudGhlbigodmFsdWUpID0+IGhhbmRsZVZhbHVlKHZhbHVlKSkKICogICAgICAgICAgIC5jYXRjaEVycm9yKChlcnJvcikgPT4gaGFuZGxlRXJyb3IoZXJyb3IpKTsKICoKICogQSBbRnV0dXJlXSBjYW4gYmUgY29tcGxldGVkIGluIHR3byB3YXlzOgogKiB3aXRoIGEgdmFsdWUgKCJ0aGUgZnV0dXJlIHN1Y2NlZWRzIikKICogb3Igd2l0aCBhbiBlcnJvciAoInRoZSBmdXR1cmUgZmFpbHMiKS4KICogVXNlcnMgY2FuIGluc3RhbGwgY2FsbGJhY2tzIGZvciBlYWNoIGNhc2UuCiAqCiAqIEluIHNvbWUgY2FzZXMgd2Ugc2F5IHRoYXQgYSBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggYW5vdGhlciBmdXR1cmUuCiAqIFRoaXMgaXMgYSBzaG9ydCB3YXkgb2Ygc3RhdGluZyB0aGF0IHRoZSBmdXR1cmUgaXMgY29tcGxldGVkIGluIHRoZSBzYW1lIHdheSwKICogd2l0aCB0aGUgc2FtZSB2YWx1ZSBvciBlcnJvciwKICogYXMgdGhlIG90aGVyIGZ1dHVyZSBvbmNlIHRoYXQgY29tcGxldGVzLgogKiBXaGVuZXZlciBhIGZ1bmN0aW9uIGluIHRoZSBjb3JlIGxpYnJhcnkgbWF5IGNvbXBsZXRlIGEgZnV0dXJlCiAqIChmb3IgZXhhbXBsZSBbQ29tcGxldGVyLmNvbXBsZXRlXSBvciBbbmV3IEZ1dHVyZS52YWx1ZV0pLAogKiB0aGVuIGl0IGFsc28gYWNjZXB0cyBhbm90aGVyIGZ1dHVyZSBhbmQgZG9lcyB0aGlzIHdvcmsgZm9yIHRoZSBkZXZlbG9wZXIuCiAqCiAqIFRoZSByZXN1bHQgb2YgcmVnaXN0ZXJpbmcgYSBwYWlyIG9mIGNhbGxiYWNrcyBpcyBhIG5ldyBGdXR1cmUgKHRoZQogKiAic3VjY2Vzc29yIikgd2hpY2ggaW4gdHVybiBpcyBjb21wbGV0ZWQgd2l0aCB0aGUgcmVzdWx0IG9mIGludm9raW5nIHRoZQogKiBjb3JyZXNwb25kaW5nIGNhbGxiYWNrLgogKiBUaGUgc3VjY2Vzc29yIGlzIGNvbXBsZXRlZCB3aXRoIGFuIGVycm9yIGlmIHRoZSBpbnZva2VkIGNhbGxiYWNrIHRocm93cy4KICogRm9yIGV4YW1wbGU6CiAqIGBgYAogKiBGdXR1cmU8aW50PiBzdWNjZXNzb3IgPSBmdXR1cmUudGhlbigoaW50IHZhbHVlKSB7CiAqICAgICAvLyBJbnZva2VkIHdoZW4gdGhlIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCBhIHZhbHVlLgogKiAgICAgcmV0dXJuIDQyOyAgLy8gVGhlIHN1Y2Nlc3NvciBpcyBjb21wbGV0ZWQgd2l0aCB0aGUgdmFsdWUgNDIuCiAqICAgfSwKICogICBvbkVycm9yOiAoZSkgewogKiAgICAgLy8gSW52b2tlZCB3aGVuIHRoZSBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggYW4gZXJyb3IuCiAqICAgICBpZiAoY2FuSGFuZGxlKGUpKSB7CiAqICAgICAgIHJldHVybiA0OTk7ICAvLyBUaGUgc3VjY2Vzc29yIGlzIGNvbXBsZXRlZCB3aXRoIHRoZSB2YWx1ZSA0OTkuCiAqICAgICB9IGVsc2UgewogKiAgICAgICB0aHJvdyBlOyAgLy8gVGhlIHN1Y2Nlc3NvciBpcyBjb21wbGV0ZWQgd2l0aCB0aGUgZXJyb3IgZS4KICogICAgIH0KICogICB9KTsKICogYGBgCiAqCiAqIElmIGEgZnV0dXJlIGRvZXMgbm90IGhhdmUgYSBzdWNjZXNzb3Igd2hlbiBpdCBjb21wbGV0ZXMgd2l0aCBhbiBlcnJvciwKICogaXQgZm9yd2FyZHMgdGhlIGVycm9yIG1lc3NhZ2UgdG8gdGhlIGdsb2JhbCBlcnJvci1oYW5kbGVyLgogKiBUaGlzIGJlaGF2aW9yIG1ha2VzIHN1cmUgdGhhdCBubyBlcnJvciBpcyBzaWxlbnRseSBkcm9wcGVkLgogKiBIb3dldmVyLCBpdCBhbHNvIG1lYW5zIHRoYXQgZXJyb3IgaGFuZGxlcnMgc2hvdWxkIGJlIGluc3RhbGxlZCBlYXJseSwKICogc28gdGhhdCB0aGV5IGFyZSBwcmVzZW50IGFzIHNvb24gYXMgYSBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggYW4gZXJyb3IuCiAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgdGhpcyBwb3RlbnRpYWwgYnVnOgogKiBgYGAKICogdmFyIGZ1dHVyZSA9IGdldEZ1dHVyZSgpOwogKiBuZXcgVGltZXIobmV3IER1cmF0aW9uKG1pbGxpc2Vjb25kczogNSksICgpIHsKICogICAvLyBUaGUgZXJyb3ItaGFuZGxlciBpcyBub3QgYXR0YWNoZWQgdW50aWwgNSBtcyBhZnRlciB0aGUgZnV0dXJlIGhhcwogKiAgIC8vIGJlZW4gcmVjZWl2ZWQuIElmIHRoZSBmdXR1cmUgZmFpbHMgYmVmb3JlIHRoYXQsIHRoZSBlcnJvciBpcwogKiAgIC8vIGZvcndhcmRlZCB0byB0aGUgZ2xvYmFsIGVycm9yLWhhbmRsZXIsIGV2ZW4gdGhvdWdoIHRoZXJlIGlzIGNvZGUKICogICAvLyAoanVzdCBiZWxvdykgdG8gZXZlbnR1YWxseSBoYW5kbGUgdGhlIGVycm9yLgogKiAgIGZ1dHVyZS50aGVuKCh2YWx1ZSkgeyB1c2VWYWx1ZSh2YWx1ZSk7IH0sCiAqICAgICAgICAgICAgICAgb25FcnJvcjogKGUpIHsgaGFuZGxlRXJyb3IoZSk7IH0pOwogKiB9KTsKICogYGBgCiAqCiAqIFdoZW4gcmVnaXN0ZXJpbmcgY2FsbGJhY2tzLCBpdCdzIG9mdGVuIG1vcmUgcmVhZGFibGUgdG8gcmVnaXN0ZXIgdGhlIHR3bwogKiBjYWxsYmFja3Mgc2VwYXJhdGVseSwgYnkgZmlyc3QgdXNpbmcgW3RoZW5dIHdpdGggb25lIGFyZ3VtZW50CiAqICh0aGUgdmFsdWUgaGFuZGxlcikgYW5kIHVzaW5nIGEgc2Vjb25kIFtjYXRjaEVycm9yXSBmb3IgaGFuZGxpbmcgZXJyb3JzLgogKiBFYWNoIG9mIHRoZXNlIHdpbGwgZm9yd2FyZCB0aGUgcmVzdWx0IHRoYXQgdGhleSBkb24ndCBoYW5kbGUKICogdG8gdGhlaXIgc3VjY2Vzc29ycywgYW5kIHRvZ2V0aGVyIHRoZXkgaGFuZGxlIGJvdGggdmFsdWUgYW5kIGVycm9yIHJlc3VsdC4KICogSXQgYWxzbyBoYXMgdGhlIGFkZGl0aW9uYWwgYmVuZWZpdCBvZiB0aGUgW2NhdGNoRXJyb3JdIGhhbmRsaW5nIGVycm9ycyBpbiB0aGUKICogW3RoZW5dIHZhbHVlIGNhbGxiYWNrIHRvby4KICogVXNpbmcgc2VxdWVudGlhbCBoYW5kbGVycyBpbnN0ZWFkIG9mIHBhcmFsbGVsIG9uZXMgb2Z0ZW4gbGVhZHMgdG8gY29kZSB0aGF0CiAqIGlzIGVhc2llciB0byByZWFzb24gYWJvdXQuCiAqIEl0IGFsc28gbWFrZXMgYXN5bmNocm9ub3VzIGNvZGUgdmVyeSBzaW1pbGFyIHRvIHN5bmNocm9ub3VzIGNvZGU6CiAqIGBgYAogKiAvLyBTeW5jaHJvbm91cyBjb2RlLgogKiB0cnkgewogKiAgIGludCB2YWx1ZSA9IGZvbygpOwogKiAgIHJldHVybiBiYXIodmFsdWUpOwogKiB9IGNhdGNoIChlKSB7CiAqICAgcmV0dXJuIDQ5OTsKICogfQogKiBgYGAKICoKICogRXF1aXZhbGVudCBhc3luY2hyb25vdXMgY29kZSwgYmFzZWQgb24gZnV0dXJlczoKICogYGBgCiAqIEZ1dHVyZTxpbnQ+IGZ1dHVyZSA9IG5ldyBGdXR1cmUoZm9vKTsgIC8vIFJlc3VsdCBvZiBmb28oKSBhcyBhIGZ1dHVyZS4KICogZnV0dXJlLnRoZW4oKGludCB2YWx1ZSkgPT4gYmFyKHZhbHVlKSkKICogICAgICAgLmNhdGNoRXJyb3IoKGUpID0+IDQ5OSk7CiAqIGBgYAogKgogKiBTaW1pbGFyIHRvIHRoZSBzeW5jaHJvbm91cyBjb2RlLCB0aGUgZXJyb3IgaGFuZGxlciAocmVnaXN0ZXJlZCB3aXRoCiAqIFtjYXRjaEVycm9yXSkgaXMgaGFuZGxpbmcgYW55IGVycm9ycyB0aHJvd24gYnkgZWl0aGVyIGBmb29gIG9yIGBiYXJgLgogKiBJZiB0aGUgZXJyb3ItaGFuZGxlciBoYWQgYmVlbiByZWdpc3RlcmVkIGFzIHRoZSBgb25FcnJvcmAgcGFyYW1ldGVyIG9mCiAqIHRoZSBgdGhlbmAgY2FsbCwgaXQgd291bGQgbm90IGNhdGNoIGVycm9ycyBmcm9tIHRoZSBgYmFyYCBjYWxsLgogKgogKiBGdXR1cmVzIGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgY2FsbGJhY2stcGFpciByZWdpc3RlcmVkLiBFYWNoIHN1Y2Nlc3NvciBpcwogKiB0cmVhdGVkIGluZGVwZW5kZW50bHkgYW5kIGlzIGhhbmRsZWQgYXMgaWYgaXQgd2FzIHRoZSBvbmx5IHN1Y2Nlc3Nvci4KICoKICogQSBmdXR1cmUgbWF5IGFsc28gZmFpbCB0byBldmVyIGNvbXBsZXRlLiBJbiB0aGF0IGNhc2UsIG5vIGNhbGxiYWNrcyBhcmUKICogY2FsbGVkLgogKi8KYWJzdHJhY3QgY2xhc3MgRnV0dXJlPFQ+IHsKICAvLy8gQSBgRnV0dXJlPE51bGw+YCBjb21wbGV0ZWQgd2l0aCBgbnVsbGAuCiAgc3RhdGljIGZpbmFsIF9GdXR1cmU8TnVsbD4gX251bGxGdXR1cmUgPQogICAgICBuZXcgX0Z1dHVyZTxOdWxsPi56b25lVmFsdWUobnVsbCwgWm9uZS5yb290KTsKCiAgLy8vIEEgYEZ1dHVyZTxib29sPmAgY29tcGxldGVkIHdpdGggYGZhbHNlYC4KICBzdGF0aWMgZmluYWwgX0Z1dHVyZTxib29sPiBfZmFsc2VGdXR1cmUgPQogICAgICBuZXcgX0Z1dHVyZTxib29sPi56b25lVmFsdWUoZmFsc2UsIFpvbmUucm9vdCk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBmdXR1cmUgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgW2NvbXB1dGF0aW9uXQogICAqIGFzeW5jaHJvbm91c2x5IHdpdGggW1RpbWVyLnJ1bl0uCiAgICoKICAgKiBJZiB0aGUgcmVzdWx0IG9mIGV4ZWN1dGluZyBbY29tcHV0YXRpb25dIHRocm93cywgdGhlIHJldHVybmVkIGZ1dHVyZSBpcwogICAqIGNvbXBsZXRlZCB3aXRoIHRoZSBlcnJvci4KICAgKgogICAqIElmIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBpdHNlbGYgYSBbRnV0dXJlXSwgY29tcGxldGlvbiBvZgogICAqIHRoZSBjcmVhdGVkIGZ1dHVyZSB3aWxsIHdhaXQgdW50aWwgdGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMsCiAgICogYW5kIHdpbGwgdGhlbiBjb21wbGV0ZSB3aXRoIHRoZSBzYW1lIHJlc3VsdC4KICAgKgogICAqIElmIGEgbm9uLWZ1dHVyZSB2YWx1ZSBpcyByZXR1cm5lZCwgdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQKICAgKiB3aXRoIHRoYXQgdmFsdWUuCiAgICovCiAgZmFjdG9yeSBGdXR1cmUoRnV0dXJlT3I8VD4gY29tcHV0YXRpb24oKSkgewogICAgX0Z1dHVyZTxUPiByZXN1bHQgPSBuZXcgX0Z1dHVyZTxUPigpOwogICAgVGltZXIucnVuKCgpIHsKICAgICAgdHJ5IHsKICAgICAgICByZXN1bHQuX2NvbXBsZXRlKGNvbXB1dGF0aW9uKCkpOwogICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgX2NvbXBsZXRlV2l0aEVycm9yQ2FsbGJhY2socmVzdWx0LCBlLCBzKTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIGZ1dHVyZSBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgY2FsbGluZyBbY29tcHV0YXRpb25dCiAgICogYXN5bmNocm9ub3VzbHkgd2l0aCBbc2NoZWR1bGVNaWNyb3Rhc2tdLgogICAqCiAgICogSWYgZXhlY3V0aW5nIFtjb21wdXRhdGlvbl0gdGhyb3dzLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhlIHRocm93biBlcnJvci4KICAgKgogICAqIElmIGNhbGxpbmcgW2NvbXB1dGF0aW9uXSByZXR1cm5zIGEgW0Z1dHVyZV0sIGNvbXBsZXRpb24gb2YKICAgKiB0aGUgY3JlYXRlZCBmdXR1cmUgd2lsbCB3YWl0IHVudGlsIHRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzLAogICAqIGFuZCB3aWxsIHRoZW4gY29tcGxldGUgd2l0aCB0aGUgc2FtZSByZXN1bHQuCiAgICoKICAgKiBJZiBjYWxsaW5nIFtjb21wdXRhdGlvbl0gcmV0dXJucyBhIG5vbi1mdXR1cmUgdmFsdWUsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGF0IHZhbHVlLgogICAqLwogIGZhY3RvcnkgRnV0dXJlLm1pY3JvdGFzayhGdXR1cmVPcjxUPiBjb21wdXRhdGlvbigpKSB7CiAgICBfRnV0dXJlPFQ+IHJlc3VsdCA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgICBzY2hlZHVsZU1pY3JvdGFzaygoKSB7CiAgICAgIHRyeSB7CiAgICAgICAgcmVzdWx0Ll9jb21wbGV0ZShjb21wdXRhdGlvbigpKTsKICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgIF9jb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrKHJlc3VsdCwgZSwgcyk7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBmdXR1cmUgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIGltbWVkaWF0ZWx5IGNhbGxpbmcKICAgKiBbY29tcHV0YXRpb25dLgogICAqCiAgICogSWYgY2FsbGluZyBbY29tcHV0YXRpb25dIHRocm93cywgdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGUKICAgKiBlcnJvci4KICAgKgogICAqIElmIGNhbGxpbmcgW2NvbXB1dGF0aW9uXSByZXR1cm5zIGEgYEZ1dHVyZTxUPmAsIHRoYXQgZnV0dXJlIGlzIHJldHVybmVkLgogICAqCiAgICogSWYgY2FsbGluZyBbY29tcHV0YXRpb25dIHJldHVybnMgYSBub24tZnV0dXJlIHZhbHVlLAogICAqIGEgZnV0dXJlIGlzIHJldHVybmVkIHdoaWNoIGhhcyBiZWVuIGNvbXBsZXRlZCB3aXRoIHRoYXQgdmFsdWUuCiAgICovCiAgZmFjdG9yeSBGdXR1cmUuc3luYyhGdXR1cmVPcjxUPiBjb21wdXRhdGlvbigpKSB7CiAgICB0cnkgewogICAgICB2YXIgcmVzdWx0ID0gY29tcHV0YXRpb24oKTsKICAgICAgaWYgKHJlc3VsdCBpcyBGdXR1cmU8VD4pIHsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBuZXcgX0Z1dHVyZTxUPi52YWx1ZShyZXN1bHQpOwogICAgICB9CiAgICB9IGNhdGNoIChlcnJvciwgc3RhY2tUcmFjZSkgewogICAgICB2YXIgZnV0dXJlID0gbmV3IF9GdXR1cmU8VD4oKTsKICAgICAgQXN5bmNFcnJvciByZXBsYWNlbWVudCA9IFpvbmUuY3VycmVudC5lcnJvckNhbGxiYWNrKGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgaWYgKHJlcGxhY2VtZW50ICE9IG51bGwpIHsKICAgICAgICBmdXR1cmUuX2FzeW5jQ29tcGxldGVFcnJvcigKICAgICAgICAgICAgX25vbk51bGxFcnJvcihyZXBsYWNlbWVudC5lcnJvciksIHJlcGxhY2VtZW50LnN0YWNrVHJhY2UpOwogICAgICB9IGVsc2UgewogICAgICAgIGZ1dHVyZS5fYXN5bmNDb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgfQogICAgICByZXR1cm4gZnV0dXJlOwogICAgfQogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIGZ1dHVyZSBjb21wbGV0ZWQgd2l0aCBbdmFsdWVdLgogICAqCiAgICogSWYgW3ZhbHVlXSBpcyBhIGZ1dHVyZSwgdGhlIGNyZWF0ZWQgZnV0dXJlIHdhaXRzIGZvciB0aGUKICAgKiBbdmFsdWVdIGZ1dHVyZSB0byBjb21wbGV0ZSwgYW5kIHRoZW4gY29tcGxldGVzIHdpdGggdGhlIHNhbWUgcmVzdWx0LgogICAqIFNpbmNlIGEgW3ZhbHVlXSBmdXR1cmUgY2FuIGNvbXBsZXRlIHdpdGggYW4gZXJyb3IsIHNvIGNhbiB0aGUgZnV0dXJlCiAgICogY3JlYXRlZCBieSBbRnV0dXJlLnZhbHVlXSwgZXZlbiBpZiB0aGUgbmFtZSBzdWdnZXN0cyBvdGhlcndpc2UuCiAgICoKICAgKiBJZiBbdmFsdWVdIGlzIG5vdCBhIFtGdXR1cmVdLCB0aGUgY3JlYXRlZCBmdXR1cmUgaXMgY29tcGxldGVkCiAgICogd2l0aCB0aGUgW3ZhbHVlXSB2YWx1ZSwKICAgKiBlcXVpdmFsZW50bHkgdG8gYG5ldyBGdXR1cmU8VD4uc3luYygoKSA9PiB2YWx1ZSlgLgogICAqCiAgICogVXNlIFtDb21wbGV0ZXJdIHRvIGNyZWF0ZSBhIGZ1dHVyZSBhbmQgY29tcGxldGUgaXQgbGF0ZXIuCiAgICovCiAgZmFjdG9yeSBGdXR1cmUudmFsdWUoW0Z1dHVyZU9yPFQ+IHZhbHVlXSkgewogICAgcmV0dXJuIG5ldyBfRnV0dXJlPFQ+LmltbWVkaWF0ZSh2YWx1ZSk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgZnV0dXJlIHRoYXQgY29tcGxldGVzIHdpdGggYW4gZXJyb3IuCiAgICoKICAgKiBUaGUgY3JlYXRlZCBmdXR1cmUgd2lsbCBiZSBjb21wbGV0ZWQgd2l0aCBhbiBlcnJvciBpbiBhIGZ1dHVyZSBtaWNyb3Rhc2suCiAgICogVGhpcyBhbGxvd3MgZW5vdWdoIHRpbWUgZm9yIHNvbWVvbmUgdG8gYWRkIGFuIGVycm9yIGhhbmRsZXIgb24gdGhlIGZ1dHVyZS4KICAgKiBJZiBhbiBlcnJvciBoYW5kbGVyIGlzbid0IGFkZGVkIGJlZm9yZSB0aGUgZnV0dXJlIGNvbXBsZXRlcywgdGhlIGVycm9yCiAgICogd2lsbCBiZSBjb25zaWRlcmVkIHVuaGFuZGxlZC4KICAgKgogICAqIElmIFtlcnJvcl0gaXMgYG51bGxgLCBpdCBpcyByZXBsYWNlZCBieSBhIFtOdWxsVGhyb3duRXJyb3JdLgogICAqCiAgICogVXNlIFtDb21wbGV0ZXJdIHRvIGNyZWF0ZSBhIGZ1dHVyZSBhbmQgY29tcGxldGUgaXQgbGF0ZXIuCiAgICovCiAgZmFjdG9yeSBGdXR1cmUuZXJyb3IoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgZXJyb3IgPSBfbm9uTnVsbEVycm9yKGVycm9yKTsKICAgIGlmICghaWRlbnRpY2FsKFpvbmUuY3VycmVudCwgX3Jvb3Rab25lKSkgewogICAgICBBc3luY0Vycm9yIHJlcGxhY2VtZW50ID0gWm9uZS5jdXJyZW50LmVycm9yQ2FsbGJhY2soZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICBpZiAocmVwbGFjZW1lbnQgIT0gbnVsbCkgewogICAgICAgIGVycm9yID0gX25vbk51bGxFcnJvcihyZXBsYWNlbWVudC5lcnJvcik7CiAgICAgICAgc3RhY2tUcmFjZSA9IHJlcGxhY2VtZW50LnN0YWNrVHJhY2U7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgX0Z1dHVyZTxUPi5pbW1lZGlhdGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgZnV0dXJlIHRoYXQgcnVucyBpdHMgY29tcHV0YXRpb24gYWZ0ZXIgYSBkZWxheS4KICAgKgogICAqIFRoZSBbY29tcHV0YXRpb25dIHdpbGwgYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIGdpdmVuIFtkdXJhdGlvbl0gaGFzIHBhc3NlZCwKICAgKiBhbmQgdGhlIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBjb21wdXRhdGlvbi4KICAgKgogICAqIElmIFtjb21wdXRhdGlvbl0gcmV0dXJucyBhIGZ1dHVyZSwKICAgKiB0aGUgZnV0dXJlIHJldHVybmVkIGJ5IHRoaXMgY29uc3RydWN0b3Igd2lsbCBjb21wbGV0ZSB3aXRoIHRoZSB2YWx1ZSBvcgogICAqIGVycm9yIG9mIHRoYXQgZnV0dXJlLgogICAqCiAgICogSWYgdGhlIGR1cmF0aW9uIGlzIDAgb3IgbGVzcywKICAgKiBpdCBjb21wbGV0ZXMgbm8gc29vbmVyIHRoYW4gaW4gdGhlIG5leHQgZXZlbnQtbG9vcCBpdGVyYXRpb24sCiAgICogYWZ0ZXIgYWxsIG1pY3JvdGFza3MgaGF2ZSBydW4uCiAgICoKICAgKiBJZiBbY29tcHV0YXRpb25dIGlzIG9taXR0ZWQsCiAgICogaXQgd2lsbCBiZSB0cmVhdGVkIGFzIGlmIFtjb21wdXRhdGlvbl0gd2FzIGAoKSA9PiBudWxsYCwKICAgKiBhbmQgdGhlIGZ1dHVyZSB3aWxsIGV2ZW50dWFsbHkgY29tcGxldGUgd2l0aCB0aGUgYG51bGxgIHZhbHVlLgogICAqCiAgICogSWYgY2FsbGluZyBbY29tcHV0YXRpb25dIHRocm93cywgdGhlIGNyZWF0ZWQgZnV0dXJlIHdpbGwgY29tcGxldGUgd2l0aCB0aGUKICAgKiBlcnJvci4KICAgKgogICAqIFNlZSBhbHNvIFtDb21wbGV0ZXJdIGZvciBhIHdheSB0byBjcmVhdGUgYW5kIGNvbXBsZXRlIGEgZnV0dXJlIGF0IGEKICAgKiBsYXRlciB0aW1lIHRoYXQgaXNuJ3QgbmVjZXNzYXJpbHkgYWZ0ZXIgYSBrbm93biBmaXhlZCBkdXJhdGlvbi4KICAgKi8KICBmYWN0b3J5IEZ1dHVyZS5kZWxheWVkKER1cmF0aW9uIGR1cmF0aW9uLCBbRnV0dXJlT3I8VD4gY29tcHV0YXRpb24oKV0pIHsKICAgIF9GdXR1cmU8VD4gcmVzdWx0ID0gbmV3IF9GdXR1cmU8VD4oKTsKICAgIG5ldyBUaW1lcihkdXJhdGlvbiwgKCkgewogICAgICBpZiAoY29tcHV0YXRpb24gPT0gbnVsbCkgewogICAgICAgIHJlc3VsdC5fY29tcGxldGUobnVsbCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHJlc3VsdC5fY29tcGxldGUoY29tcHV0YXRpb24oKSk7CiAgICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgICAgX2NvbXBsZXRlV2l0aEVycm9yQ2FsbGJhY2socmVzdWx0LCBlLCBzKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8qKgogICAqIFdhaXRzIGZvciBtdWx0aXBsZSBmdXR1cmVzIHRvIGNvbXBsZXRlIGFuZCBjb2xsZWN0cyB0aGVpciByZXN1bHRzLgogICAqCiAgICogUmV0dXJucyBhIGZ1dHVyZSB3aGljaCB3aWxsIGNvbXBsZXRlIG9uY2UgYWxsIHRoZSBwcm92aWRlZCBmdXR1cmVzCiAgICogaGF2ZSBjb21wbGV0ZWQsIGVpdGhlciB3aXRoIHRoZWlyIHJlc3VsdHMsIG9yIHdpdGggYW4gZXJyb3IgaWYgYW55CiAgICogb2YgdGhlIHByb3ZpZGVkIGZ1dHVyZXMgZmFpbC4KICAgKgogICAqIFRoZSB2YWx1ZSBvZiB0aGUgcmV0dXJuZWQgZnV0dXJlIHdpbGwgYmUgYSBsaXN0IG9mIGFsbCB0aGUgdmFsdWVzIHRoYXQKICAgKiB3ZXJlIHByb2R1Y2VkIGluIHRoZSBvcmRlciB0aGF0IHRoZSBmdXR1cmVzIGFyZSBwcm92aWRlZCBieSBpdGVyYXRpbmcKICAgKiBbZnV0dXJlc10uCiAgICoKICAgKiBJZiBhbnkgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGVycm9yLAogICAqIHRoZW4gdGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCB0aGF0IGVycm9yLgogICAqIElmIGZ1cnRoZXIgZnV0dXJlcyBhbHNvIGNvbXBsZXRlIHdpdGggZXJyb3JzLCB0aG9zZSBlcnJvcnMgYXJlIGRpc2NhcmRlZC4KICAgKgogICAqIElmIGBlYWdlckVycm9yYCBpcyB0cnVlLCB0aGUgcmV0dXJuZWQgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGVycm9yCiAgICogaW1tZWRpYXRlbHkgb24gdGhlIGZpcnN0IGVycm9yIGZyb20gb25lIG9mIHRoZSBmdXR1cmVzLiBPdGhlcndpc2UgYWxsCiAgICogZnV0dXJlcyBtdXN0IGNvbXBsZXRlIGJlZm9yZSB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCAoc3RpbGwgd2l0aAogICAqIHRoZSBmaXJzdCBlcnJvcjsgdGhlIHJlbWFpbmluZyBlcnJvcnMgYXJlIHNpbGVudGx5IGRyb3BwZWQpLgogICAqCiAgICogSW4gdGhlIGNhc2Ugb2YgYW4gZXJyb3IsIFtjbGVhblVwXSAoaWYgcHJvdmlkZWQpLCBpcyBpbnZva2VkIG9uIGFueQogICAqIG5vbi1udWxsIHJlc3VsdCBvZiBzdWNjZXNzZnVsIGZ1dHVyZXMuCiAgICogVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBgY2xlYW5VcGAgcmVzb3VyY2VzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGJlCiAgICogbG9zdCAoc2luY2UgdGhlIHJldHVybmVkIGZ1dHVyZSBkb2VzIG5vdCBwcm92aWRlIGFjY2VzcyB0byB0aGVzZSB2YWx1ZXMpLgogICAqIFRoZSBbY2xlYW5VcF0gZnVuY3Rpb24gaXMgdW51c2VkIGlmIHRoZXJlIGlzIG5vIGVycm9yLgogICAqCiAgICogVGhlIGNhbGwgdG8gW2NsZWFuVXBdIHNob3VsZCBub3QgdGhyb3cuIElmIGl0IGRvZXMsIHRoZSBlcnJvciB3aWxsIGJlIGFuCiAgICogdW5jYXVnaHQgYXN5bmNocm9ub3VzIGVycm9yLgogICAqLwogIHN0YXRpYyBGdXR1cmU8TGlzdDxUPj4gd2FpdDxUPihJdGVyYWJsZTxGdXR1cmU8VD4+IGZ1dHVyZXMsCiAgICAgIHtib29sIGVhZ2VyRXJyb3I6IGZhbHNlLCB2b2lkIGNsZWFuVXAoVCBzdWNjZXNzVmFsdWUpfSkgewogICAgZmluYWwgX0Z1dHVyZTxMaXN0PFQ+PiByZXN1bHQgPSBuZXcgX0Z1dHVyZTxMaXN0PFQ+PigpOwogICAgTGlzdDxUPiB2YWx1ZXM7IC8vIENvbGxlY3RzIHRoZSB2YWx1ZXMuIFNldCB0byBudWxsIG9uIGVycm9yLgogICAgaW50IHJlbWFpbmluZyA9IDA7IC8vIEhvdyBtYW55IGZ1dHVyZXMgYXJlIHdlIHdhaXRpbmcgZm9yLgogICAgdmFyIGVycm9yOyAvLyBUaGUgZmlyc3QgZXJyb3IgZnJvbSBhIGZ1dHVyZS4KICAgIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZTsgLy8gVGhlIHN0YWNrVHJhY2UgdGhhdCBjYW1lIHdpdGggdGhlIGVycm9yLgoKICAgIC8vIEhhbmRsZSBhbiBlcnJvciBmcm9tIGFueSBvZiB0aGUgZnV0dXJlcy4KICAgIC8vIFRPRE8oam1lc3Nlcmx5KTogdXNlIGB2b2lkYCByZXR1cm4gdHlwZSBvbmNlIGl0IGNhbiBiZSBpbmZlcnJlZCBmb3IgdGhlCiAgICAvLyBgdGhlbmAgY2FsbCBiZWxvdy4KICAgIGhhbmRsZUVycm9yKHRoZUVycm9yLCBTdGFja1RyYWNlIHRoZVN0YWNrVHJhY2UpIHsKICAgICAgcmVtYWluaW5nLS07CiAgICAgIGlmICh2YWx1ZXMgIT0gbnVsbCkgewogICAgICAgIGlmIChjbGVhblVwICE9IG51bGwpIHsKICAgICAgICAgIGZvciAodmFyIHZhbHVlIGluIHZhbHVlcykgewogICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICAgICAgICAgIC8vIEVuc3VyZSBlcnJvcnMgZnJvbSBjbGVhblVwIGFyZSB1bmNhdWdodC4KICAgICAgICAgICAgICBuZXcgRnV0dXJlLnN5bmMoKCkgewogICAgICAgICAgICAgICAgY2xlYW5VcCh2YWx1ZSk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFsdWVzID0gbnVsbDsKICAgICAgICBpZiAocmVtYWluaW5nID09IDAgfHwgZWFnZXJFcnJvcikgewogICAgICAgICAgcmVzdWx0Ll9jb21wbGV0ZUVycm9yKHRoZUVycm9yLCB0aGVTdGFja1RyYWNlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZXJyb3IgPSB0aGVFcnJvcjsKICAgICAgICAgIHN0YWNrVHJhY2UgPSB0aGVTdGFja1RyYWNlOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChyZW1haW5pbmcgPT0gMCAmJiAhZWFnZXJFcnJvcikgewogICAgICAgIHJlc3VsdC5fY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIH0KICAgIH0KCiAgICB0cnkgewogICAgICAvLyBBcyBlYWNoIGZ1dHVyZSBjb21wbGV0ZXMsIHB1dCBpdHMgdmFsdWUgaW50byB0aGUgY29ycmVzcG9uZGluZwogICAgICAvLyBwb3NpdGlvbiBpbiB0aGUgbGlzdCBvZiB2YWx1ZXMuCiAgICAgIGZvciAodmFyIGZ1dHVyZSBpbiBmdXR1cmVzKSB7CiAgICAgICAgaW50IHBvcyA9IHJlbWFpbmluZzsKICAgICAgICBmdXR1cmUudGhlbigoVCB2YWx1ZSkgewogICAgICAgICAgcmVtYWluaW5nLS07CiAgICAgICAgICBpZiAodmFsdWVzICE9IG51bGwpIHsKICAgICAgICAgICAgdmFsdWVzW3Bvc10gPSB2YWx1ZTsKICAgICAgICAgICAgaWYgKHJlbWFpbmluZyA9PSAwKSB7CiAgICAgICAgICAgICAgcmVzdWx0Ll9jb21wbGV0ZVdpdGhWYWx1ZSh2YWx1ZXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoY2xlYW5VcCAhPSBudWxsICYmIHZhbHVlICE9IG51bGwpIHsKICAgICAgICAgICAgICAvLyBFbnN1cmUgZXJyb3JzIGZyb20gY2xlYW5VcCBhcmUgdW5jYXVnaHQuCiAgICAgICAgICAgICAgbmV3IEZ1dHVyZS5zeW5jKCgpIHsKICAgICAgICAgICAgICAgIGNsZWFuVXAodmFsdWUpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChyZW1haW5pbmcgPT0gMCAmJiAhZWFnZXJFcnJvcikgewogICAgICAgICAgICAgIHJlc3VsdC5fY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LCBvbkVycm9yOiBoYW5kbGVFcnJvcik7CiAgICAgICAgLy8gSW5jcmVtZW50IHRoZSAncmVtYWluaW5nJyBhZnRlciB0aGUgY2FsbCB0byAndGhlbicuCiAgICAgICAgLy8gSWYgdGhhdCBjYWxsIHRocm93cywgd2UgZG9uJ3QgZXhwZWN0IGFueSBmdXR1cmUgY2FsbGJhY2sgZnJvbQogICAgICAgIC8vIHRoZSBmdXR1cmUsIGFuZCB3ZSBhbHNvIGRvbid0IGluY3JlbWVudCByZW1haW5pbmcuCiAgICAgICAgcmVtYWluaW5nKys7CiAgICAgIH0KICAgICAgaWYgKHJlbWFpbmluZyA9PSAwKSB7CiAgICAgICAgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUoY29uc3QgW10pOwogICAgICB9CiAgICAgIHZhbHVlcyA9IG5ldyBMaXN0PFQ+KHJlbWFpbmluZyk7CiAgICB9IGNhdGNoIChlLCBzdCkgewogICAgICAvLyBUaGUgZXJyb3IgbXVzdCBoYXZlIGJlZW4gdGhyb3duIHdoaWxlIGl0ZXJhdGluZyBvdmVyIHRoZSBmdXR1cmVzCiAgICAgIC8vIGxpc3QsIG9yIHdoaWxlIGluc3RhbGxpbmcgYSBjYWxsYmFjayBoYW5kbGVyIG9uIHRoZSBmdXR1cmUuCiAgICAgIGlmIChyZW1haW5pbmcgPT0gMCB8fCBlYWdlckVycm9yKSB7CiAgICAgICAgLy8gVGhyb3cgYSBuZXcgRnV0dXJlLmVycm9yLgogICAgICAgIC8vIERvbid0IGp1c3QgY2FsbCBgcmVzdWx0Ll9jb21wbGV0ZUVycm9yYCBzaW5jZSB0aGF0IHdvdWxkIHByb3BhZ2F0ZQogICAgICAgIC8vIHRoZSBlcnJvciB0b28gZWFnZXJseSwgbm90IGdpdmluZyB0aGUgY2FsbGVycyB0aW1lIHRvIGluc3RhbGwKICAgICAgICAvLyBlcnJvciBoYW5kbGVycy4KICAgICAgICAvLyBBbHNvLCBkb24ndCB1c2UgYF9hc3luY0NvbXBsZXRlRXJyb3JgIHNpbmNlIHRoYXQgb25lIGRvZXNuJ3QgZ2l2ZQogICAgICAgIC8vIHpvbmVzIHRoZSBjaGFuY2UgdG8gaW50ZXJjZXB0IHRoZSBlcnJvci4KICAgICAgICByZXR1cm4gbmV3IEZ1dHVyZS5lcnJvcihlLCBzdCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gRG9uJ3QgYWxsb2NhdGUgYSBsaXN0IGZvciB2YWx1ZXMsIHRodXMgaW5kaWNhdGluZyB0aGF0IHRoZXJlIHdhcyBhbgogICAgICAgIC8vIGVycm9yLgogICAgICAgIC8vIFNldCBlcnJvciB0byB0aGUgY2F1Z2h0IGV4Y2VwdGlvbi4KICAgICAgICBlcnJvciA9IGU7CiAgICAgICAgc3RhY2tUcmFjZSA9IHN0OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBmaXJzdCBmdXR1cmUgaW4gW2Z1dHVyZXNdIHRvIGNvbXBsZXRlLgogICAqCiAgICogVGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBmaXJzdAogICAqIGZ1dHVyZSBpbiBbZnV0dXJlc10gdG8gcmVwb3J0IHRoYXQgaXQgaXMgY29tcGxldGUsCiAgICogd2hldGhlciBpdCdzIHdpdGggYSB2YWx1ZSBvciBhbiBlcnJvci4KICAgKiBUaGUgcmVzdWx0cyBvZiBhbGwgdGhlIG90aGVyIGZ1dHVyZXMgYXJlIGRpc2NhcmRlZC4KICAgKgogICAqIElmIFtmdXR1cmVzXSBpcyBlbXB0eSwgb3IgaWYgbm9uZSBvZiBpdHMgZnV0dXJlcyBjb21wbGV0ZSwKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIG5ldmVyIGNvbXBsZXRlcy4KICAgKi8KICBzdGF0aWMgRnV0dXJlPFQ+IGFueTxUPihJdGVyYWJsZTxGdXR1cmU8VD4+IGZ1dHVyZXMpIHsKICAgIHZhciBjb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPFQ+LnN5bmMoKTsKICAgIHZhciBvblZhbHVlID0gKFQgdmFsdWUpIHsKICAgICAgaWYgKCFjb21wbGV0ZXIuaXNDb21wbGV0ZWQpIGNvbXBsZXRlci5jb21wbGV0ZSh2YWx1ZSk7CiAgICB9OwogICAgdmFyIG9uRXJyb3IgPSAoZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2spIHsKICAgICAgaWYgKCFjb21wbGV0ZXIuaXNDb21wbGV0ZWQpIGNvbXBsZXRlci5jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFjayk7CiAgICB9OwogICAgZm9yICh2YXIgZnV0dXJlIGluIGZ1dHVyZXMpIHsKICAgICAgZnV0dXJlLnRoZW4ob25WYWx1ZSwgb25FcnJvcjogb25FcnJvcik7CiAgICB9CiAgICByZXR1cm4gY29tcGxldGVyLmZ1dHVyZTsKICB9CgogIC8qKgogICAqIFBlcmZvcm1zIGFuIGFjdGlvbiBmb3IgZWFjaCBlbGVtZW50IG9mIHRoZSBpdGVyYWJsZSwgaW4gdHVybi4KICAgKgogICAqIFRoZSBbYWN0aW9uXSBtYXkgYmUgZWl0aGVyIHN5bmNocm9ub3VzIG9yIGFzeW5jaHJvbm91cy4KICAgKgogICAqIENhbGxzIFthY3Rpb25dIHdpdGggZWFjaCBlbGVtZW50IGluIFtlbGVtZW50c10gaW4gb3JkZXIuCiAgICogSWYgdGhlIGNhbGwgdG8gW2FjdGlvbl0gcmV0dXJucyBhIGBGdXR1cmU8VD5gLCB0aGUgaXRlcmF0aW9uIHdhaXRzCiAgICogdW50aWwgdGhlIGZ1dHVyZSBpcyBjb21wbGV0ZWQgYmVmb3JlIGNvbnRpbnVpbmcgd2l0aCB0aGUgbmV4dCBlbGVtZW50LgogICAqCiAgICogUmV0dXJucyBhIFtGdXR1cmVdIHRoYXQgY29tcGxldGVzIHdpdGggYG51bGxgIHdoZW4gYWxsIGVsZW1lbnRzIGhhdmUgYmVlbgogICAqIHByb2Nlc3NlZC4KICAgKgogICAqIE5vbi1bRnV0dXJlXSByZXR1cm4gdmFsdWVzLCBhbmQgY29tcGxldGlvbi12YWx1ZXMgb2YgcmV0dXJuZWQgW0Z1dHVyZV1zLAogICAqIGFyZSBkaXNjYXJkZWQuCiAgICoKICAgKiBBbnkgZXJyb3IgZnJvbSBbYWN0aW9uXSwgc3luY2hyb25vdXMgb3IgYXN5bmNocm9ub3VzLAogICAqIHdpbGwgc3RvcCB0aGUgaXRlcmF0aW9uIGFuZCBiZSByZXBvcnRlZCBpbiB0aGUgcmV0dXJuZWQgW0Z1dHVyZV0uCiAgICovCiAgc3RhdGljIEZ1dHVyZSBmb3JFYWNoPFQ+KEl0ZXJhYmxlPFQ+IGVsZW1lbnRzLCBGdXR1cmVPciBhY3Rpb24oVCBlbGVtZW50KSkgewogICAgdmFyIGl0ZXJhdG9yID0gZWxlbWVudHMuaXRlcmF0b3I7CiAgICByZXR1cm4gZG9XaGlsZSgoKSB7CiAgICAgIGlmICghaXRlcmF0b3IubW92ZU5leHQoKSkgcmV0dXJuIGZhbHNlOwogICAgICB2YXIgcmVzdWx0ID0gYWN0aW9uKGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgICBpZiAocmVzdWx0IGlzIEZ1dHVyZSkgcmV0dXJuIHJlc3VsdC50aGVuKF9rVHJ1ZSk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSk7CiAgfQoKICAvLyBDb25zdGFudCBgdHJ1ZWAgZnVuY3Rpb24sIHVzZWQgYXMgY2FsbGJhY2sgYnkgW2ZvckVhY2hdLgogIHN0YXRpYyBib29sIF9rVHJ1ZShfKSA9PiB0cnVlOwoKICAvKioKICAgKiBQZXJmb3JtcyBhbiBvcGVyYXRpb24gcmVwZWF0ZWRseSB1bnRpbCBpdCByZXR1cm5zIGBmYWxzZWAuCiAgICoKICAgKiBUaGUgb3BlcmF0aW9uLCBbYWN0aW9uXSwgbWF5IGJlIGVpdGhlciBzeW5jaHJvbm91cyBvciBhc3luY2hyb25vdXMuCiAgICoKICAgKiBUaGUgb3BlcmF0aW9uIGlzIGNhbGxlZCByZXBlYXRlZGx5IGFzIGxvbmcgYXMgaXQgcmV0dXJucyBlaXRoZXIgdGhlIFtib29sXQogICAqIHZhbHVlIGB0cnVlYCBvciBhIGBGdXR1cmU8Ym9vbD5gIHdoaWNoIGNvbXBsZXRlcyB3aXRoIHRoZSB2YWx1ZSBgdHJ1ZWAuCiAgICoKICAgKiBJZiBhIGNhbGwgdG8gW2FjdGlvbl0gcmV0dXJucyBgZmFsc2VgIG9yIGEgW0Z1dHVyZV0gdGhhdCBjb21wbGV0ZXMgdG8KICAgKiBgZmFsc2VgLCBpdGVyYXRpb24gZW5kcyBhbmQgdGhlIGZ1dHVyZSByZXR1cm5lZCBieSBbZG9XaGlsZV0gaXMgY29tcGxldGVkCiAgICogd2l0aCBhIGBudWxsYCB2YWx1ZS4KICAgKgogICAqIElmIGEgY2FsbCB0byBbYWN0aW9uXSB0aHJvd3Mgb3IgYSBmdXR1cmUgcmV0dXJuZWQgYnkgW2FjdGlvbl0gY29tcGxldGVzCiAgICogd2l0aCBhbiBlcnJvciwgaXRlcmF0aW9uIGVuZHMgYW5kIHRoZSBmdXR1cmUgcmV0dXJuZWQgYnkgW2RvV2hpbGVdCiAgICogY29tcGxldGVzIHdpdGggdGhlIHNhbWUgZXJyb3IuCiAgICoKICAgKiBDYWxscyB0byBbYWN0aW9uXSBtYXkgaGFwcGVuIGF0IGFueSB0aW1lLAogICAqIGluY2x1ZGluZyBpbW1lZGlhdGVseSBhZnRlciBjYWxsaW5nIGBkb1doaWxlYC4KICAgKiBUaGUgb25seSByZXN0cmljdGlvbiBpcyBhIG5ldyBjYWxsIHRvIFthY3Rpb25dIHdvbid0IGhhcHBlbiBiZWZvcmUKICAgKiB0aGUgcHJldmlvdXMgY2FsbCBoYXMgcmV0dXJuZWQsIGFuZCBpZiBpdCByZXR1cm5lZCBhIGBGdXR1cmU8Ym9vbD5gLCBub3QKICAgKiB1bnRpbCB0aGF0IGZ1dHVyZSBoYXMgY29tcGxldGVkLgogICAqLwogIHN0YXRpYyBGdXR1cmUgZG9XaGlsZShGdXR1cmVPcjxib29sPiBhY3Rpb24oKSkgewogICAgX0Z1dHVyZSBkb25lU2lnbmFsID0gbmV3IF9GdXR1cmUoKTsKICAgIHZvaWQgRnVuY3Rpb24oYm9vbCkgbmV4dEl0ZXJhdGlvbjsKICAgIC8vIEJpbmQgdGhpcyBjYWxsYmFjayBleHBsaWNpdGx5IHNvIHRoYXQgZWFjaCBpdGVyYXRpb24gaXNuJ3QgYm91bmQgaW4gdGhlCiAgICAvLyBjb250ZXh0IG9mIGFsbCB0aGUgcHJldmlvdXMgaXRlcmF0aW9ucycgY2FsbGJhY2tzLgogICAgLy8gVGhpcyBhdm9pZHMsIGUuZy4sIGRlZXBseSBuZXN0ZWQgc3RhY2sgdHJhY2VzIGZyb20gdGhlIHN0YWNrIHRyYWNlCiAgICAvLyBwYWNrYWdlLgogICAgbmV4dEl0ZXJhdGlvbiA9IFpvbmUuY3VycmVudC5iaW5kVW5hcnlDYWxsYmFja0d1YXJkZWQoKGJvb2wga2VlcEdvaW5nKSB7CiAgICAgIHdoaWxlIChrZWVwR29pbmcpIHsKICAgICAgICBGdXR1cmVPcjxib29sPiByZXN1bHQ7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHJlc3VsdCA9IGFjdGlvbigpOwogICAgICAgIH0gY2F0Y2ggKGVycm9yLCBzdGFja1RyYWNlKSB7CiAgICAgICAgICAvLyBDYW5ub3QgdXNlIF9jb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrIGJlY2F1c2UgaXQgY29tcGxldGVzCiAgICAgICAgICAvLyB0aGUgZnV0dXJlIHN5bmNocm9ub3VzbHkuCiAgICAgICAgICBfYXN5bmNDb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrKGRvbmVTaWduYWwsIGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKHJlc3VsdCBpcyBGdXR1cmU8Ym9vbD4pIHsKICAgICAgICAgIHJlc3VsdC50aGVuKG5leHRJdGVyYXRpb24sIG9uRXJyb3I6IGRvbmVTaWduYWwuX2NvbXBsZXRlRXJyb3IpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBrZWVwR29pbmcgPSByZXN1bHQ7CiAgICAgIH0KICAgICAgZG9uZVNpZ25hbC5fY29tcGxldGUobnVsbCk7CiAgICB9KTsKICAgIG5leHRJdGVyYXRpb24odHJ1ZSk7CiAgICByZXR1cm4gZG9uZVNpZ25hbDsKICB9CgogIC8qKgogICAqIFJlZ2lzdGVyIGNhbGxiYWNrcyB0byBiZSBjYWxsZWQgd2hlbiB0aGlzIGZ1dHVyZSBjb21wbGV0ZXMuCiAgICoKICAgKiBXaGVuIHRoaXMgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGEgdmFsdWUsCiAgICogdGhlIFtvblZhbHVlXSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoYXQgdmFsdWUuCiAgICogSWYgdGhpcyBmdXR1cmUgaXMgYWxyZWFkeSBjb21wbGV0ZWQsIHRoZSBjYWxsYmFjayB3aWxsIG5vdCBiZSBjYWxsZWQKICAgKiBpbW1lZGlhdGVseSwgYnV0IHdpbGwgYmUgc2NoZWR1bGVkIGluIGEgbGF0ZXIgbWljcm90YXNrLgogICAqCiAgICogSWYgW29uRXJyb3JdIGlzIHByb3ZpZGVkLCBhbmQgdGhpcyBmdXR1cmUgY29tcGxldGVzIHdpdGggYW4gZXJyb3IsCiAgICogdGhlIGBvbkVycm9yYCBjYWxsYmFjayBpcyBjYWxsZWQgd2l0aCB0aGF0IGVycm9yIGFuZCBpdHMgc3RhY2sgdHJhY2UuCiAgICogVGhlIGBvbkVycm9yYCBjYWxsYmFjayBtdXN0IGFjY2VwdCBlaXRoZXIgb25lIGFyZ3VtZW50IG9yIHR3byBhcmd1bWVudHMKICAgKiB3aGVyZSB0aGUgbGF0dGVyIGlzIGEgW1N0YWNrVHJhY2VdLgogICAqIElmIGBvbkVycm9yYCBhY2NlcHRzIHR3byBhcmd1bWVudHMsCiAgICogaXQgaXMgY2FsbGVkIHdpdGggYm90aCB0aGUgZXJyb3IgYW5kIHRoZSBzdGFjayB0cmFjZSwKICAgKiBvdGhlcndpc2UgaXQgaXMgY2FsbGVkIHdpdGgganVzdCB0aGUgZXJyb3Igb2JqZWN0LgogICAqIFRoZSBgb25FcnJvcmAgY2FsbGJhY2sgbXVzdCByZXR1cm4gYSB2YWx1ZSBvciBmdXR1cmUgdGhhdCBjYW4gYmUgdXNlZAogICAqIHRvIGNvbXBsZXRlIHRoZSByZXR1cm5lZCBmdXR1cmUsIHNvIGl0IG11c3QgYmUgc29tZXRoaW5nIGFzc2lnbmFibGUgdG8KICAgKiBgRnV0dXJlT3I8Uj5gLgogICAqCiAgICogUmV0dXJucyBhIG5ldyBbRnV0dXJlXQogICAqIHdoaWNoIGlzIGNvbXBsZXRlZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGNhbGwgdG8gYG9uVmFsdWVgCiAgICogKGlmIHRoaXMgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGEgdmFsdWUpCiAgICogb3IgdG8gYG9uRXJyb3JgIChpZiB0aGlzIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhbiBlcnJvcikuCiAgICoKICAgKiBJZiB0aGUgaW52b2tlZCBjYWxsYmFjayB0aHJvd3MsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGUgdGhyb3duIGVycm9yCiAgICogYW5kIGEgc3RhY2sgdHJhY2UgZm9yIHRoZSBlcnJvci4KICAgKiBJbiB0aGUgY2FzZSBvZiBgb25FcnJvcmAsCiAgICogaWYgdGhlIGV4Y2VwdGlvbiB0aHJvd24gaXMgYGlkZW50aWNhbGAgdG8gdGhlIGVycm9yIGFyZ3VtZW50IHRvIGBvbkVycm9yYCwKICAgKiB0aGUgdGhyb3cgaXMgY29uc2lkZXJlZCBhIHJldGhyb3csCiAgICogYW5kIHRoZSBvcmlnaW5hbCBzdGFjayB0cmFjZSBpcyB1c2VkIGluc3RlYWQuCiAgICoKICAgKiBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyBhIFtGdXR1cmVdLAogICAqIHRoZSBmdXR1cmUgcmV0dXJuZWQgYnkgYHRoZW5gIHdpbGwgYmUgY29tcGxldGVkIHdpdGgKICAgKiB0aGUgc2FtZSByZXN1bHQgYXMgdGhlIGZ1dHVyZSByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2suCiAgICoKICAgKiBJZiBbb25FcnJvcl0gaXMgbm90IGdpdmVuLCBhbmQgdGhpcyBmdXR1cmUgY29tcGxldGVzIHdpdGggYW4gZXJyb3IsCiAgICogdGhlIGVycm9yIGlzIGZvcndhcmRlZCBkaXJlY3RseSB0byB0aGUgcmV0dXJuZWQgZnV0dXJlLgogICAqCiAgICogSW4gbW9zdCBjYXNlcywgaXQgaXMgbW9yZSByZWFkYWJsZSB0byB1c2UgW2NhdGNoRXJyb3JdIHNlcGFyYXRlbHksIHBvc3NpYmx5CiAgICogd2l0aCBhIGB0ZXN0YCBwYXJhbWV0ZXIsIGluc3RlYWQgb2YgaGFuZGxpbmcgYm90aCB2YWx1ZSBhbmQgZXJyb3IgaW4gYQogICAqIHNpbmdsZSBbdGhlbl0gY2FsbC4KICAgKgogICAqIE5vdGUgdGhhdCBmdXR1cmVzIGRvbid0IGRlbGF5IHJlcG9ydGluZyBvZiBlcnJvcnMgdW50aWwgbGlzdGVuZXJzIGFyZQogICAqIGFkZGVkLiBJZiB0aGUgZmlyc3QgYHRoZW5gIG9yIGBjYXRjaEVycm9yYCBjYWxsIGhhcHBlbnMgYWZ0ZXIgdGhpcyBmdXR1cmUKICAgKiBoYXMgY29tcGxldGVkIHdpdGggYW4gZXJyb3IgdGhlbiB0aGUgZXJyb3IgaXMgcmVwb3J0ZWQgYXMgdW5oYW5kbGVkIGVycm9yLgogICAqIFNlZSB0aGUgZGVzY3JpcHRpb24gb24gW0Z1dHVyZV0uCiAgICovCiAgRnV0dXJlPFI+IHRoZW48Uj4oRnV0dXJlT3I8Uj4gb25WYWx1ZShUIHZhbHVlKSwge0Z1bmN0aW9uIG9uRXJyb3J9KTsKCiAgLyoqCiAgICogSGFuZGxlcyBlcnJvcnMgZW1pdHRlZCBieSB0aGlzIFtGdXR1cmVdLgogICAqCiAgICogVGhpcyBpcyB0aGUgYXN5bmNocm9ub3VzIGVxdWl2YWxlbnQgb2YgYSAiY2F0Y2giIGJsb2NrLgogICAqCiAgICogUmV0dXJucyBhIG5ldyBbRnV0dXJlXSB0aGF0IHdpbGwgYmUgY29tcGxldGVkIHdpdGggZWl0aGVyIHRoZSByZXN1bHQgb2YKICAgKiB0aGlzIGZ1dHVyZSBvciB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIGBvbkVycm9yYCBjYWxsYmFjay4KICAgKgogICAqIElmIHRoaXMgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGEgdmFsdWUsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCB0aGUgc2FtZSB2YWx1ZS4KICAgKgogICAqIElmIHRoaXMgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGVycm9yLAogICAqIHRoZW4gW3Rlc3RdIGlzIGZpcnN0IGNhbGxlZCB3aXRoIHRoZSBlcnJvciB2YWx1ZS4KICAgKgogICAqIElmIGB0ZXN0YCByZXR1cm5zIGZhbHNlLCB0aGUgZXhjZXB0aW9uIGlzIG5vdCBoYW5kbGVkIGJ5IHRoaXMgYGNhdGNoRXJyb3JgLAogICAqIGFuZCB0aGUgcmV0dXJuZWQgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIHRoZSBzYW1lIGVycm9yIGFuZCBzdGFjayB0cmFjZQogICAqIGFzIHRoaXMgZnV0dXJlLgogICAqCiAgICogSWYgYHRlc3RgIHJldHVybnMgYHRydWVgLAogICAqIFtvbkVycm9yXSBpcyBjYWxsZWQgd2l0aCB0aGUgZXJyb3IgYW5kIHBvc3NpYmx5IHN0YWNrIHRyYWNlLAogICAqIGFuZCB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhpcyBjYWxsCiAgICogaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgZm9yIFt0aGVuXSdzIGBvbkVycm9yYC4KICAgKgogICAqIElmIGB0ZXN0YCBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBhIGZ1bmN0aW9uIHRoYXQgYWx3YXlzIHJldHVybnMgdHJ1ZS4KICAgKiBUaGUgYHRlc3RgIGZ1bmN0aW9uIHNob3VsZCBub3QgdGhyb3csIGJ1dCBpZiBpdCBkb2VzLCBpdCBpcyBoYW5kbGVkIGFzCiAgICogaWYgdGhlIGBvbkVycm9yYCBmdW5jdGlvbiBoYWQgdGhyb3duLgogICAqCiAgICogTm90ZSB0aGF0IGZ1dHVyZXMgZG9uJ3QgZGVsYXkgcmVwb3J0aW5nIG9mIGVycm9ycyB1bnRpbCBsaXN0ZW5lcnMgYXJlCiAgICogYWRkZWQuIElmIHRoZSBmaXJzdCBgY2F0Y2hFcnJvcmAgKG9yIGB0aGVuYCkgY2FsbCBoYXBwZW5zIGFmdGVyIHRoaXMgZnV0dXJlCiAgICogaGFzIGNvbXBsZXRlZCB3aXRoIGFuIGVycm9yIHRoZW4gdGhlIGVycm9yIGlzIHJlcG9ydGVkIGFzIHVuaGFuZGxlZCBlcnJvci4KICAgKiBTZWUgdGhlIGRlc2NyaXB0aW9uIG9uIFtGdXR1cmVdLgogICAqLwogIC8vIFRoZSBgRnVuY3Rpb25gIGJlbG93IHN0YW5kcyBmb3Igb25lIG9mIHR3byB0eXBlczoKICAvLyAtIChkeW5hbWljKSAtPiBGdXR1cmVPcjxUPgogIC8vIC0gKGR5bmFtaWMsIFN0YWNrVHJhY2UpIC0+IEZ1dHVyZU9yPFQ+CiAgLy8gR2l2ZW4gdGhhdCB0aGVyZSBpcyBhIGB0ZXN0YCBmdW5jdGlvbiB0aGF0IGlzIHVzdWFsbHkgdXNlZCB0byBkbyBhbgogIC8vIGBpc0NoZWNrYCB3ZSBzaG91bGQgYWxzbyBleHBlY3QgZnVuY3Rpb25zIHRoYXQgdGFrZSBhIHNwZWNpZmljIGFyZ3VtZW50LgogIC8vIE5vdGU6IG1ha2luZyBgY2F0Y2hFcnJvcmAgcmV0dXJuIGEgYEZ1dHVyZTxUPmAgaW4gbm9uLXN0cm9uZyBtb2RlIGNvdWxkIGJlCiAgLy8gYSBicmVha2luZyBjaGFuZ2UuCiAgRnV0dXJlPFQ+IGNhdGNoRXJyb3IoRnVuY3Rpb24gb25FcnJvciwge2Jvb2wgdGVzdChPYmplY3QgZXJyb3IpfSk7CgogIC8qKgogICAqIFJlZ2lzdGVycyBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoaXMgZnV0dXJlIGNvbXBsZXRlcy4KICAgKgogICAqIFRoZSBbYWN0aW9uXSBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGlzIGZ1dHVyZSBjb21wbGV0ZXMsIHdoZXRoZXIgaXQKICAgKiBkb2VzIHNvIHdpdGggYSB2YWx1ZSBvciB3aXRoIGFuIGVycm9yLgogICAqCiAgICogVGhpcyBpcyB0aGUgYXN5bmNocm9ub3VzIGVxdWl2YWxlbnQgb2YgYSAiZmluYWxseSIgYmxvY2suCiAgICoKICAgKiBUaGUgZnV0dXJlIHJldHVybmVkIGJ5IHRoaXMgY2FsbCwgYGZgLCB3aWxsIGNvbXBsZXRlIHRoZSBzYW1lIHdheQogICAqIGFzIHRoaXMgZnV0dXJlIHVubGVzcyBhbiBlcnJvciBvY2N1cnMgaW4gdGhlIFthY3Rpb25dIGNhbGwsIG9yIGluCiAgICogYSBbRnV0dXJlXSByZXR1cm5lZCBieSB0aGUgW2FjdGlvbl0gY2FsbC4gSWYgdGhlIGNhbGwgdG8gW2FjdGlvbl0KICAgKiBkb2VzIG5vdCByZXR1cm4gYSBmdXR1cmUsIGl0cyByZXR1cm4gdmFsdWUgaXMgaWdub3JlZC4KICAgKgogICAqIElmIHRoZSBjYWxsIHRvIFthY3Rpb25dIHRocm93cywgdGhlbiBgZmAgaXMgY29tcGxldGVkIHdpdGggdGhlCiAgICogdGhyb3duIGVycm9yLgogICAqCiAgICogSWYgdGhlIGNhbGwgdG8gW2FjdGlvbl0gcmV0dXJucyBhIFtGdXR1cmVdLCBgZjJgLCB0aGVuIGNvbXBsZXRpb24gb2YKICAgKiBgZmAgaXMgZGVsYXllZCB1bnRpbCBgZjJgIGNvbXBsZXRlcy4gSWYgYGYyYCBjb21wbGV0ZXMgd2l0aAogICAqIGFuIGVycm9yLCB0aGF0IHdpbGwgYmUgdGhlIHJlc3VsdCBvZiBgZmAgdG9vLiBUaGUgdmFsdWUgb2YgYGYyYCBpcyBhbHdheXMKICAgKiBpZ25vcmVkLgogICAqCiAgICogVGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0bzoKICAgKgogICAqICAgICBGdXR1cmU8VD4gd2hlbkNvbXBsZXRlKGFjdGlvbigpKSB7CiAgICogICAgICAgcmV0dXJuIHRoaXMudGhlbigodikgewogICAqICAgICAgICAgdmFyIGYyID0gYWN0aW9uKCk7CiAgICogICAgICAgICBpZiAoZjIgaXMgRnV0dXJlKSByZXR1cm4gZjIudGhlbigoXykgPT4gdik7CiAgICogICAgICAgICByZXR1cm4gdgogICAqICAgICAgIH0sIG9uRXJyb3I6IChlKSB7CiAgICogICAgICAgICB2YXIgZjIgPSBhY3Rpb24oKTsKICAgKiAgICAgICAgIGlmIChmMiBpcyBGdXR1cmUpIHJldHVybiBmMi50aGVuKChfKSB7IHRocm93IGU7IH0pOwogICAqICAgICAgICAgdGhyb3cgZTsKICAgKiAgICAgICB9KTsKICAgKiAgICAgfQogICAqLwogIEZ1dHVyZTxUPiB3aGVuQ29tcGxldGUoRnV0dXJlT3IgYWN0aW9uKCkpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW1N0cmVhbV0gY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIHRoaXMgZnV0dXJlLgogICAqCiAgICogVGhlIHN0cmVhbSB3aWxsIHByb2R1Y2Ugc2luZ2xlIGRhdGEgb3IgZXJyb3IgZXZlbnQgY29udGFpbmluZyB0aGUKICAgKiBjb21wbGV0aW9uIHJlc3VsdCBvZiB0aGlzIGZ1dHVyZSwgYW5kIHRoZW4gaXQgd2lsbCBjbG9zZSB3aXRoIGEKICAgKiBkb25lIGV2ZW50LgogICAqCiAgICogSWYgdGhlIGZ1dHVyZSBuZXZlciBjb21wbGV0ZXMsIHRoZSBzdHJlYW0gd2lsbCBub3QgcHJvZHVjZSBhbnkgZXZlbnRzLgogICAqLwogIFN0cmVhbTxUPiBhc1N0cmVhbSgpOwoKICAvKioKICAgKiBUaW1lLW91dCB0aGUgZnV0dXJlIGNvbXB1dGF0aW9uIGFmdGVyIFt0aW1lTGltaXRdIGhhcyBwYXNzZWQuCiAgICoKICAgKiBSZXR1cm5zIGEgbmV3IGZ1dHVyZSB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoZSBzYW1lIHZhbHVlIGFzIHRoaXMgZnV0dXJlLAogICAqIGlmIHRoaXMgZnV0dXJlIGNvbXBsZXRlcyBpbiB0aW1lLgogICAqCiAgICogSWYgdGhpcyBmdXR1cmUgZG9lcyBub3QgY29tcGxldGUgYmVmb3JlIGB0aW1lTGltaXRgIGhhcyBwYXNzZWQsCiAgICogdGhlIFtvblRpbWVvdXRdIGFjdGlvbiBpcyBleGVjdXRlZCBpbnN0ZWFkLCBhbmQgaXRzIHJlc3VsdCAod2hldGhlciBpdAogICAqIHJldHVybnMgb3IgdGhyb3dzKSBpcyB1c2VkIGFzIHRoZSByZXN1bHQgb2YgdGhlIHJldHVybmVkIGZ1dHVyZS4KICAgKiBUaGUgW29uVGltZW91dF0gZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBbVF0gb3IgYSBgRnV0dXJlPFQ+YC4KICAgKgogICAqIElmIGBvblRpbWVvdXRgIGlzIG9taXR0ZWQsIGEgdGltZW91dCB3aWxsIGNhdXNlIHRoZSByZXR1cm5lZCBmdXR1cmUgdG8KICAgKiBjb21wbGV0ZSB3aXRoIGEgW1RpbWVvdXRFeGNlcHRpb25dLgogICAqLwogIEZ1dHVyZTxUPiB0aW1lb3V0KER1cmF0aW9uIHRpbWVMaW1pdCwge0Z1dHVyZU9yPFQ+IG9uVGltZW91dCgpfSk7Cn0KCi8qKgogKiBUaHJvd24gd2hlbiBhIHNjaGVkdWxlZCB0aW1lb3V0IGhhcHBlbnMgd2hpbGUgd2FpdGluZyBmb3IgYW4gYXN5bmMgcmVzdWx0LgogKi8KY2xhc3MgVGltZW91dEV4Y2VwdGlvbiBpbXBsZW1lbnRzIEV4Y2VwdGlvbiB7CiAgLyoqIERlc2NyaXB0aW9uIG9mIHRoZSBjYXVzZSBvZiB0aGUgdGltZW91dC4gKi8KICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKICAvKiogVGhlIGR1cmF0aW9uIHRoYXQgd2FzIGV4Y2VlZGVkLiAqLwogIGZpbmFsIER1cmF0aW9uIGR1cmF0aW9uOwoKICBUaW1lb3V0RXhjZXB0aW9uKHRoaXMubWVzc2FnZSwgW3RoaXMuZHVyYXRpb25dKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nIHJlc3VsdCA9ICJUaW1lb3V0RXhjZXB0aW9uIjsKICAgIGlmIChkdXJhdGlvbiAhPSBudWxsKSByZXN1bHQgPSAiVGltZW91dEV4Y2VwdGlvbiBhZnRlciAkZHVyYXRpb24iOwogICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCkgcmVzdWx0ID0gIiRyZXN1bHQ6ICRtZXNzYWdlIjsKICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CgovKioKICogQSB3YXkgdG8gcHJvZHVjZSBGdXR1cmUgb2JqZWN0cyBhbmQgdG8gY29tcGxldGUgdGhlbSBsYXRlcgogKiB3aXRoIGEgdmFsdWUgb3IgZXJyb3IuCiAqCiAqIE1vc3Qgb2YgdGhlIHRpbWUsIHRoZSBzaW1wbGVzdCB3YXkgdG8gY3JlYXRlIGEgZnV0dXJlIGlzIHRvIGp1c3QgdXNlCiAqIG9uZSBvZiB0aGUgW0Z1dHVyZV0gY29uc3RydWN0b3JzIHRvIGNhcHR1cmUgdGhlIHJlc3VsdCBvZiBhIHNpbmdsZQogKiBhc3luY2hyb25vdXMgY29tcHV0YXRpb246CiAqIGBgYAogKiBuZXcgRnV0dXJlKCgpIHsgZG9Tb21ldGhpbmcoKTsgcmV0dXJuIHJlc3VsdDsgfSk7CiAqIGBgYAogKiBvciwgaWYgdGhlIGZ1dHVyZSByZXByZXNlbnRzIHRoZSByZXN1bHQgb2YgYSBzZXF1ZW5jZSBvZiBhc3luY2hyb25vdXMKICogY29tcHV0YXRpb25zLCB0aGV5IGNhbiBiZSBjaGFpbmVkIHVzaW5nIFtGdXR1cmUudGhlbl0gb3Igc2ltaWxhciBmdW5jdGlvbnMKICogb24gW0Z1dHVyZV06CiAqIGBgYAogKiBGdXR1cmUgZG9TdHVmZigpewogKiAgIHJldHVybiBzb21lQXN5bmNPcGVyYXRpb24oKS50aGVuKChyZXN1bHQpIHsKICogICAgIHJldHVybiBzb21lT3RoZXJBc3luY09wZXJhdGlvbihyZXN1bHQpOwogKiAgIH0pOwogKiB9CiAqIGBgYAogKiBJZiB5b3UgZG8gbmVlZCB0byBjcmVhdGUgYSBGdXR1cmUgZnJvbSBzY3JhdGNoIOKAlCBmb3IgZXhhbXBsZSwKICogd2hlbiB5b3UncmUgY29udmVydGluZyBhIGNhbGxiYWNrLWJhc2VkIEFQSSBpbnRvIGEgRnV0dXJlLWJhc2VkCiAqIG9uZSDigJQgeW91IGNhbiB1c2UgYSBDb21wbGV0ZXIgYXMgZm9sbG93czoKICogYGBgCiAqIGNsYXNzIEFzeW5jT3BlcmF0aW9uIHsKICogICBDb21wbGV0ZXIgX2NvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXIoKTsKICoKICogICBGdXR1cmU8VD4gZG9PcGVyYXRpb24oKSB7CiAqICAgICBfc3RhcnRPcGVyYXRpb24oKTsKICogICAgIHJldHVybiBfY29tcGxldGVyLmZ1dHVyZTsgLy8gU2VuZCBmdXR1cmUgb2JqZWN0IGJhY2sgdG8gY2xpZW50LgogKiAgIH0KICoKICogICAvLyBTb21ldGhpbmcgY2FsbHMgdGhpcyB3aGVuIHRoZSB2YWx1ZSBpcyByZWFkeS4KICogICB2b2lkIF9maW5pc2hPcGVyYXRpb24oVCByZXN1bHQpIHsKICogICAgIF9jb21wbGV0ZXIuY29tcGxldGUocmVzdWx0KTsKICogICB9CiAqCiAqICAgLy8gSWYgc29tZXRoaW5nIGdvZXMgd3JvbmcsIGNhbGwgdGhpcy4KICogICB2b2lkIF9lcnJvckhhcHBlbmVkKGVycm9yKSB7CiAqICAgICBfY29tcGxldGVyLmNvbXBsZXRlRXJyb3IoZXJyb3IpOwogKiAgIH0KICogfQogKiBgYGAKICovCmFic3RyYWN0IGNsYXNzIENvbXBsZXRlcjxUPiB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBjb21wbGV0ZXIuCiAgICoKICAgKiBUaGUgZ2VuZXJhbCB3b3JrZmxvdyBmb3IgY3JlYXRpbmcgYSBuZXcgZnV0dXJlIGlzIHRvIDEpIGNyZWF0ZSBhCiAgICogbmV3IGNvbXBsZXRlciwgMikgaGFuZCBvdXQgaXRzIGZ1dHVyZSwgYW5kLCBhdCBhIGxhdGVyIHBvaW50LCAzKSBpbnZva2UKICAgKiBlaXRoZXIgW2NvbXBsZXRlXSBvciBbY29tcGxldGVFcnJvcl0uCiAgICoKICAgKiBUaGUgY29tcGxldGVyIGNvbXBsZXRlcyB0aGUgZnV0dXJlIGFzeW5jaHJvbm91c2x5LiBUaGF0IG1lYW5zIHRoYXQKICAgKiBjYWxsYmFja3MgcmVnaXN0ZXJlZCBvbiB0aGUgZnV0dXJlIGFyZSBub3QgY2FsbGVkIGltbWVkaWF0ZWx5IHdoZW4KICAgKiBbY29tcGxldGVdIG9yIFtjb21wbGV0ZUVycm9yXSBpcyBjYWxsZWQuIEluc3RlYWQgdGhlIGNhbGxiYWNrcyBhcmUKICAgKiBkZWxheWVkIHVudGlsIGEgbGF0ZXIgbWljcm90YXNrLgogICAqCiAgICogRXhhbXBsZToKICAgKiBgYGAKICAgKiB2YXIgY29tcGxldGVyID0gbmV3IENvbXBsZXRlcigpOwogICAqIGhhbmRPdXQoY29tcGxldGVyLmZ1dHVyZSk7CiAgICogbGF0ZXI6IHsKICAgKiAgIGNvbXBsZXRlci5jb21wbGV0ZSgnY29tcGxldGlvbiB2YWx1ZScpOwogICAqIH0KICAgKiBgYGAKICAgKi8KICBmYWN0b3J5IENvbXBsZXRlcigpID0+IG5ldyBfQXN5bmNDb21wbGV0ZXI8VD4oKTsKCiAgLyoqCiAgICogQ29tcGxldGVzIHRoZSBmdXR1cmUgc3luY2hyb25vdXNseS4KICAgKgogICAqIFRoaXMgY29uc3RydWN0b3Igc2hvdWxkIGJlIGF2b2lkZWQgdW5sZXNzIHRoZSBjb21wbGV0aW9uIG9mIHRoZSBmdXR1cmUgaXMKICAgKiBrbm93biB0byBiZSB0aGUgZmluYWwgcmVzdWx0IG9mIGFub3RoZXIgYXN5bmNocm9ub3VzIG9wZXJhdGlvbi4gSWYgaW4gZG91YnQKICAgKiB1c2UgdGhlIGRlZmF1bHQgW0NvbXBsZXRlcl0gY29uc3RydWN0b3IuCiAgICoKICAgKiBVc2luZyBhbiBub3JtYWwsIGFzeW5jaHJvbm91cywgY29tcGxldGVyIHdpbGwgbmV2ZXIgZ2l2ZSB0aGUgd3JvbmcKICAgKiBiZWhhdmlvciwgYnV0IHVzaW5nIGEgc3luY2hyb25vdXMgY29tcGxldGVyIGluY29ycmVjdGx5IGNhbiBjYXVzZQogICAqIG90aGVyd2lzZSBjb3JyZWN0IHByb2dyYW1zIHRvIGJyZWFrLgogICAqCiAgICogQSBzeW5jaHJvbm91cyBjb21wbGV0ZXIgaXMgb25seSBpbnRlbmRlZCBmb3Igb3B0aW1pemluZyBldmVudAogICAqIHByb3BhZ2F0aW9uIHdoZW4gb25lIGFzeW5jaHJvbm91cyBldmVudCBpbW1lZGlhdGVseSB0cmlnZ2VycyBhbm90aGVyLgogICAqIEl0IHNob3VsZCBub3QgYmUgdXNlZCB1bmxlc3MgdGhlIGNhbGxzIHRvIFtjb21wbGV0ZV0gYW5kIFtjb21wbGV0ZUVycm9yXQogICAqIGFyZSBndWFyYW50ZWVkIHRvIG9jY3VyIGluIHBsYWNlcyB3aGVyZSBpdCB3b24ndCBicmVhayBgRnV0dXJlYCBpbnZhcmlhbnRzLgogICAqCiAgICogQ29tcGxldGluZyBzeW5jaHJvbm91c2x5IG1lYW5zIHRoYXQgdGhlIGNvbXBsZXRlcidzIGZ1dHVyZSB3aWxsIGJlCiAgICogY29tcGxldGVkIGltbWVkaWF0ZWx5IHdoZW4gY2FsbGluZyB0aGUgW2NvbXBsZXRlXSBvciBbY29tcGxldGVFcnJvcl0KICAgKiBtZXRob2Qgb24gYSBzeW5jaHJvbm91cyBjb21wbGV0ZXIsIHdoaWNoIGFsc28gY2FsbHMgYW55IGNhbGxiYWNrcwogICAqIHJlZ2lzdGVyZWQgb24gdGhhdCBmdXR1cmUuCiAgICoKICAgKiBDb21wbGV0aW5nIHN5bmNocm9ub3VzbHkgbXVzdCBub3QgYnJlYWsgdGhlIHJ1bGUgdGhhdCB3aGVuIHlvdSBhZGQgYQogICAqIGNhbGxiYWNrIG9uIGEgZnV0dXJlLCB0aGF0IGNhbGxiYWNrIG11c3Qgbm90IGJlIGNhbGxlZCB1bnRpbCB0aGUgY29kZQogICAqIHRoYXQgYWRkZWQgdGhlIGNhbGxiYWNrIGhhcyBjb21wbGV0ZWQuCiAgICogRm9yIHRoYXQgcmVhc29uLCBhIHN5bmNocm9ub3VzIGNvbXBsZXRpb24gbXVzdCBvbmx5IG9jY3VyIGF0IHRoZSB2ZXJ5IGVuZAogICAqIChpbiAidGFpbCBwb3NpdGlvbiIpIG9mIGFub3RoZXIgc3luY2hyb25vdXMgZXZlbnQsCiAgICogYmVjYXVzZSBhdCB0aGF0IHBvaW50LCBjb21wbGV0aW5nIHRoZSBmdXR1cmUgaW1tZWRpYXRlbHkgaXMgYmUgZXF1aXZhbGVudAogICAqIHRvIHJldHVybmluZyB0byB0aGUgZXZlbnQgbG9vcCBhbmQgY29tcGxldGluZyB0aGUgZnV0dXJlIGluIHRoZSBuZXh0CiAgICogbWljcm90YXNrLgogICAqCiAgICogRXhhbXBsZToKICAgKgogICAqICAgICB2YXIgY29tcGxldGVyID0gbmV3IENvbXBsZXRlci5zeW5jKCk7CiAgICogICAgIC8vIFRoZSBjb21wbGV0aW9uIGlzIHRoZSByZXN1bHQgb2YgdGhlIGFzeW5jaHJvbm91cyBvbkRvbmUgZXZlbnQuCiAgICogICAgIC8vIE5vIG90aGVyIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgYWZ0ZXIgdGhlIGNvbXBsZXRpb24uIEl0IGlzIHNhZmUKICAgKiAgICAgLy8gdG8gdXNlIHRoZSBDb21wbGV0ZXIuc3luYyBjb25zdHJ1Y3Rvci4KICAgKiAgICAgc3RyZWFtLmxpc3RlbihwcmludCwgb25Eb25lOiAoKSB7IGNvbXBsZXRlci5jb21wbGV0ZSgiZG9uZSIpOyB9KTsKICAgKgogICAqIEJhZCBleGFtcGxlLiBEbyBub3QgdXNlIHRoaXMgY29kZS4gT25seSBmb3IgaWxsdXN0cmF0aXZlIHB1cnBvc2VzOgogICAqCiAgICogICAgIHZhciBjb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyLnN5bmMoKTsKICAgKiAgICAgY29tcGxldGVyLmZ1dHVyZS50aGVuKChfKSB7IGJhcigpOyB9KTsKICAgKiAgICAgLy8gVGhlIGNvbXBsZXRpb24gaXMgdGhlIHJlc3VsdCBvZiB0aGUgYXN5bmNocm9ub3VzIG9uRG9uZSBldmVudC4KICAgKiAgICAgLy8gSG93ZXZlciwgdGhlcmUgaXMgc3RpbGwgY29kZSBleGVjdXRlZCBhZnRlciB0aGUgY29tcGxldGlvbi4gVGhpcwogICAqICAgICAvLyBvcGVyYXRpb24gaXMgKm5vdCogc2FmZS4KICAgKiAgICAgc3RyZWFtLmxpc3RlbihwcmludCwgb25Eb25lOiAoKSB7CiAgICogICAgICAgY29tcGxldGVyLmNvbXBsZXRlKCJkb25lIik7CiAgICogICAgICAgZm9vKCk7ICAvLyBJbiB0aGlzIGNhc2UsIGZvbygpIHJ1bnMgYWZ0ZXIgYmFyKCkuCiAgICogICAgIH0pOwogICAqLwogIGZhY3RvcnkgQ29tcGxldGVyLnN5bmMoKSA9PiBuZXcgX1N5bmNDb21wbGV0ZXI8VD4oKTsKCiAgLyoqCiAgICogVGhlIGZ1dHVyZSB0aGF0IGlzIGNvbXBsZXRlZCBieSB0aGlzIGNvbXBsZXRlci4KICAgKgogICAqIFRoZSBmdXR1cmUgdGhhdCBpcyBjb21wbGV0ZWQgd2hlbiBbY29tcGxldGVdIG9yIFtjb21wbGV0ZUVycm9yXSBpcyBjYWxsZWQuCiAgICovCiAgRnV0dXJlPFQ+IGdldCBmdXR1cmU7CgogIC8qKgogICAqIENvbXBsZXRlcyBbZnV0dXJlXSB3aXRoIHRoZSBzdXBwbGllZCB2YWx1ZXMuCiAgICoKICAgKiBUaGUgdmFsdWUgbXVzdCBiZSBlaXRoZXIgYSB2YWx1ZSBvZiB0eXBlIFtUXQogICAqIG9yIGEgZnV0dXJlIG9mIHR5cGUgYEZ1dHVyZTxUPmAuCiAgICoKICAgKiBJZiB0aGUgdmFsdWUgaXMgaXRzZWxmIGEgZnV0dXJlLCB0aGUgY29tcGxldGVyIHdpbGwgd2FpdCBmb3IgdGhhdCBmdXR1cmUKICAgKiB0byBjb21wbGV0ZSwgYW5kIGNvbXBsZXRlIHdpdGggdGhlIHNhbWUgcmVzdWx0LCB3aGV0aGVyIGl0IGlzIGEgc3VjY2VzcwogICAqIG9yIGFuIGVycm9yLgogICAqCiAgICogQ2FsbGluZyBbY29tcGxldGVdIG9yIFtjb21wbGV0ZUVycm9yXSBtdXN0IGJlIGRvbmUgYXQgbW9zdCBvbmNlLgogICAqCiAgICogQWxsIGxpc3RlbmVycyBvbiB0aGUgZnV0dXJlIGFyZSBpbmZvcm1lZCBhYm91dCB0aGUgdmFsdWUuCiAgICovCiAgdm9pZCBjb21wbGV0ZShbRnV0dXJlT3I8VD4gdmFsdWVdKTsKCiAgLyoqCiAgICogQ29tcGxldGUgW2Z1dHVyZV0gd2l0aCBhbiBlcnJvci4KICAgKgogICAqIENhbGxpbmcgW2NvbXBsZXRlXSBvciBbY29tcGxldGVFcnJvcl0gbXVzdCBiZSBkb25lIGF0IG1vc3Qgb25jZS4KICAgKgogICAqIENvbXBsZXRpbmcgYSBmdXR1cmUgd2l0aCBhbiBlcnJvciBpbmRpY2F0ZXMgdGhhdCBhbiBleGNlcHRpb24gd2FzIHRocm93bgogICAqIHdoaWxlIHRyeWluZyB0byBwcm9kdWNlIGEgdmFsdWUuCiAgICoKICAgKiBJZiBbZXJyb3JdIGlzIGBudWxsYCwgaXQgaXMgcmVwbGFjZWQgYnkgYSBbTnVsbFRocm93bkVycm9yXS4KICAgKgogICAqIElmIGBlcnJvcmAgaXMgYSBgRnV0dXJlYCwgdGhlIGZ1dHVyZSBpdHNlbGYgaXMgdXNlZCBhcyB0aGUgZXJyb3IgdmFsdWUuCiAgICogSWYgeW91IHdhbnQgdG8gY29tcGxldGUgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBmdXR1cmUsIHlvdSBjYW4gdXNlOgogICAqIGBgYAogICAqIHRoaXNDb21wbGV0ZXIuY29tcGxldGUodGhlRnV0dXJlKQogICAqIGBgYAogICAqIG9yIGlmIHlvdSBvbmx5IHdhbnQgdG8gaGFuZGxlIGFuIGVycm9yIGZyb20gdGhlIGZ1dHVyZToKICAgKiBgYGAKICAgKiB0aGVGdXR1cmUuY2F0Y2hFcnJvcih0aGlzQ29tcGxldGVyLmNvbXBsZXRlRXJyb3IpOwogICAqIGBgYAogICAqLwogIHZvaWQgY29tcGxldGVFcnJvcihPYmplY3QgZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKTsKCiAgLyoqCiAgICogV2hldGhlciB0aGUgW2Z1dHVyZV0gaGFzIGJlZW4gY29tcGxldGVkLgogICAqCiAgICogUmVmbGVjdHMgd2hldGhlciBbY29tcGxldGVdIG9yIFtjb21wbGV0ZUVycm9yXSBoYXMgYmVlbiBjYWxsZWQuCiAgICogQSBgdHJ1ZWAgdmFsdWUgZG9lc24ndCBuZWNlc3NhcmlseSBtZWFuIHRoYXQgbGlzdGVuZXJzIG9mIHRoaXMgZnV0dXJlCiAgICogaGF2ZSBiZWVuIGludm9rZWQgeWV0LCBlaXRoZXIgYmVjYXVzZSB0aGUgY29tcGxldGVyIHVzdWFsbHkgd2FpdHMgdW50aWwKICAgKiBhIGxhdGVyIG1pY3JvdGFzayB0byBwcm9wYWdhdGUgdGhlIHJlc3VsdCwgb3IgYmVjYXVzZSBbY29tcGxldGVdCiAgICogd2FzIGNhbGxlZCB3aXRoIGEgZnV0dXJlIHRoYXQgaGFzbid0IGNvbXBsZXRlZCB5ZXQuCiAgICoKICAgKiBXaGVuIHRoaXMgdmFsdWUgaXMgYHRydWVgLCBbY29tcGxldGVdIGFuZCBbY29tcGxldGVFcnJvcl0gbXVzdCBub3QgYmUKICAgKiBjYWxsZWQgYWdhaW4uCiAgICovCiAgYm9vbCBnZXQgaXNDb21wbGV0ZWQ7Cn0KCi8vIEhlbHBlciBmdW5jdGlvbiBjb21wbGV0aW5nIGEgX0Z1dHVyZSB3aXRoIGVycm9yLCBidXQgY2hlY2tpbmcgdGhlIHpvbmUKLy8gZm9yIGVycm9yIHJlcGxhY2VtZW50IGZpcnN0Lgp2b2lkIF9jb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrKF9GdXR1cmUgcmVzdWx0LCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgQXN5bmNFcnJvciByZXBsYWNlbWVudCA9IFpvbmUuY3VycmVudC5lcnJvckNhbGxiYWNrKGVycm9yLCBzdGFja1RyYWNlKTsKICBpZiAocmVwbGFjZW1lbnQgIT0gbnVsbCkgewogICAgZXJyb3IgPSBfbm9uTnVsbEVycm9yKHJlcGxhY2VtZW50LmVycm9yKTsKICAgIHN0YWNrVHJhY2UgPSByZXBsYWNlbWVudC5zdGFja1RyYWNlOwogIH0KICByZXN1bHQuX2NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwp9CgovLyBMaWtlIFtfY29tcGxldGVXaXRoRXJyb3JDYWxsYmFja10gYnV0IGNvbXBsZXRlcyBhc3luY2hyb25vdXNseS4Kdm9pZCBfYXN5bmNDb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrKAogICAgX0Z1dHVyZSByZXN1bHQsIGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICBBc3luY0Vycm9yIHJlcGxhY2VtZW50ID0gWm9uZS5jdXJyZW50LmVycm9yQ2FsbGJhY2soZXJyb3IsIHN0YWNrVHJhY2UpOwogIGlmIChyZXBsYWNlbWVudCAhPSBudWxsKSB7CiAgICBlcnJvciA9IF9ub25OdWxsRXJyb3IocmVwbGFjZW1lbnQuZXJyb3IpOwogICAgc3RhY2tUcmFjZSA9IHJlcGxhY2VtZW50LnN0YWNrVHJhY2U7CiAgfQogIHJlc3VsdC5fYXN5bmNDb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKfQoKLyoqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzIGBudWxsYCB0byBhIFtOdWxsVGhyb3duRXJyb3JdLiAqLwpPYmplY3QgX25vbk51bGxFcnJvcihPYmplY3QgZXJyb3IpID0+IGVycm9yID8/IG5ldyBOdWxsVGhyb3duRXJyb3IoKTsKg6UATk48ARQBQwRATxMETBAEUQQPDU4gMARCJggED1FBS0pNPQQ4ThYdURMRQgQCAQQxA0A2MjgQAykyOQMsKCouA0hQISxBPU0DRksbTBAHNT1ECBQ+G0gQQwkJBwNKPj9JTDoHHTFKRUk1LzQHBwNMQUxATlEeTx5FBxgJGBgREQUHAzMHSioiBwNHSUpDA05JA0sLBBsuKzQBLyw1AQZFJgVNHwU/RzIFSRYGLioTDCkXMggIEwQBBkUuBSg9BUBHMgU6NwY4KhsMKRcyCAgTBAEGQxQFUAwFTgU6RAYzCiIhFw8tCCIlTiEkRw83CBUGBAEGLgU+SkpFBUMdOAU/Bi4sBAEGNAVPUEwjBUIFPwZAIi9OITItCAY9BAEGPwVPRQUoTRsFI0MkBSI+RAVQDAVJRQZLKh0hIA8OKxk0CggIEwQBBkgFSEgjBUxLEAUsOU8FSktPQgVJLEtPPAVOIgY+QDxCPzFHATBPGjYTHB8mITojIBIODAoXLDoRHCYKMjIIBgEKSCkkHSAXICEiMQ4TNDojIBIOMTgODCI/ST4VCBwrCCcWSkUqJU5JG000KA9PEi4TGQgGEwQBBkYFQzgsOQVAKgY5LR49By5JByIuBh0EAQZDBT0FPkhMBU8QBU4UBTtHBk8mGC4tOBMIBAE+IQEGQAVJBVBNBUtPGgVNSCQFLzRITiYGMygnTzpKEE0aHw4dJkgnShIKJkoSChwIIggZFwQBBkEFLjxKPgVIS00pKTs4S0wUBRxBLT8FJTwmH1AoMwUpOj0FST0FUUwZBUtPUCYGRwEGLgU9BU1CBSw4BS03BVFLFQUfQkc4BU9MKwVLUVAmBjcgLElOUBhFAQZDBUwsBT8FR0dHPAVEEwVKQU8OBSMFLCIgORYdIEEWDwsGLQEGPgVHRREFTAYYAQZDBU0nBUVMRkIFTCkGRAIBBE4ELjIYKRsBMwEWKEc3EwQCAQQ+GgNIRh0HNQdJThAHFTEvCQUHQUMtBxotAx8aRwcDNickBwMsIigHBQcEHgYeBUZNKwVISEgmBQ4JJiAOLwcJBjMBBikFT1EuBUhHKgVDS05RBUhKRyAFSkssTzhPShAFDgUvS00zSwVIBS8wS00lKyc8DQY3AQY1BVAGGAEGMgUyJgVOTRIFRgU/BiYBBiYFRgVOJgVCBU1JCScJPQk4CQY9AQYuBUVLTUY5BUsTBhgCAUogUEodLikELAIBQyY0Sh0uKQQxAgFERgEWZGFydDphc3luYy9mdXR1cmUuZGFydCxvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvYXN5bmMvdGltZXIuZGFydJHqLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5hc3luYzsKCi8qKgogKiBBIGNvdW50LWRvd24gdGltZXIgdGhhdCBjYW4gYmUgY29uZmlndXJlZCB0byBmaXJlIG9uY2Ugb3IgcmVwZWF0ZWRseS4KICoKICogVGhlIHRpbWVyIGNvdW50cyBkb3duIGZyb20gdGhlIHNwZWNpZmllZCBkdXJhdGlvbiB0byAwLgogKiBXaGVuIHRoZSB0aW1lciByZWFjaGVzIDAsIHRoZSB0aW1lciBpbnZva2VzIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgZnVuY3Rpb24uCiAqIFVzZSBhIHBlcmlvZGljIHRpbWVyIHRvIHJlcGVhdGVkbHkgY291bnQgZG93biB0aGUgc2FtZSBpbnRlcnZhbC4KICoKICogQSBuZWdhdGl2ZSBkdXJhdGlvbiBpcyB0cmVhdGVkIHRoZSBzYW1lIGFzIGEgZHVyYXRpb24gb2YgMC4KICogSWYgdGhlIGR1cmF0aW9uIGlzIHN0YXRpY2FsbHkga25vd24gdG8gYmUgMCwgY29uc2lkZXIgdXNpbmcgW3J1bl0uCiAqCiAqIEZyZXF1ZW50bHkgdGhlIGR1cmF0aW9uIGlzIGVpdGhlciBhIGNvbnN0YW50IG9yIGNvbXB1dGVkIGFzIGluIHRoZQogKiBmb2xsb3dpbmcgZXhhbXBsZSAodGFraW5nIGFkdmFudGFnZSBvZiB0aGUgbXVsdGlwbGljYXRpb24gb3BlcmF0b3Igb2YKICogdGhlIFtEdXJhdGlvbl0gY2xhc3MpOgogKiBgYGBkYXJ0CiAqIGNvbnN0IHRpbWVvdXQgPSBjb25zdCBEdXJhdGlvbihzZWNvbmRzOiAzKTsKICogY29uc3QgbXMgPSBjb25zdCBEdXJhdGlvbihtaWxsaXNlY29uZHM6IDEpOwogKgogKiBzdGFydFRpbWVvdXQoW2ludCBtaWxsaXNlY29uZHNdKSB7CiAqICAgdmFyIGR1cmF0aW9uID0gbWlsbGlzZWNvbmRzID09IG51bGwgPyB0aW1lb3V0IDogbXMgKiBtaWxsaXNlY29uZHM7CiAqICAgcmV0dXJuIG5ldyBUaW1lcihkdXJhdGlvbiwgaGFuZGxlVGltZW91dCk7CiAqIH0KICogLi4uCiAqIHZvaWQgaGFuZGxlVGltZW91dCgpIHsgIC8vIGNhbGxiYWNrIGZ1bmN0aW9uCiAqICAgLi4uCiAqIH0KICogYGBgCiAqIE5vdGU6IElmIERhcnQgY29kZSB1c2luZyBUaW1lciBpcyBjb21waWxlZCB0byBKYXZhU2NyaXB0LCB0aGUgZmluZXN0CiAqIGdyYW51bGFyaXR5IGF2YWlsYWJsZSBpbiB0aGUgYnJvd3NlciBpcyA0IG1pbGxpc2Vjb25kcy4KICoKICogU2VlIFtTdG9wd2F0Y2hdIGZvciBtZWFzdXJpbmcgZWxhcHNlZCB0aW1lLgogKi8KYWJzdHJhY3QgY2xhc3MgVGltZXIgewogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgdGltZXIuCiAgICoKICAgKiBUaGUgW2NhbGxiYWNrXSBmdW5jdGlvbiBpcyBpbnZva2VkIGFmdGVyIHRoZSBnaXZlbiBbZHVyYXRpb25dLgogICAqCiAgICovCiAgZmFjdG9yeSBUaW1lcihEdXJhdGlvbiBkdXJhdGlvbiwgdm9pZCBjYWxsYmFjaygpKSB7CiAgICBpZiAoWm9uZS5jdXJyZW50ID09IFpvbmUucm9vdCkgewogICAgICAvLyBObyBuZWVkIHRvIGJpbmQgdGhlIGNhbGxiYWNrLiBXZSBrbm93IHRoYXQgdGhlIHJvb3QncyB0aW1lciB3aWxsCiAgICAgIC8vIGJlIGludm9rZWQgaW4gdGhlIHJvb3Qgem9uZS4KICAgICAgcmV0dXJuIFpvbmUuY3VycmVudC5jcmVhdGVUaW1lcihkdXJhdGlvbiwgY2FsbGJhY2spOwogICAgfQogICAgcmV0dXJuIFpvbmUuY3VycmVudAogICAgICAgIC5jcmVhdGVUaW1lcihkdXJhdGlvbiwgWm9uZS5jdXJyZW50LmJpbmRDYWxsYmFja0d1YXJkZWQoY2FsbGJhY2spKTsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgcmVwZWF0aW5nIHRpbWVyLgogICAqCiAgICogVGhlIFtjYWxsYmFja10gaXMgaW52b2tlZCByZXBlYXRlZGx5IHdpdGggW2R1cmF0aW9uXSBpbnRlcnZhbHMgdW50aWwKICAgKiBjYW5jZWxlZCB3aXRoIHRoZSBbY2FuY2VsXSBmdW5jdGlvbi4KICAgKgogICAqIFRoZSBleGFjdCB0aW1pbmcgZGVwZW5kcyBvbiB0aGUgdW5kZXJseWluZyB0aW1lciBpbXBsZW1lbnRhdGlvbi4KICAgKiBObyBtb3JlIHRoYW4gYG5gIGNhbGxiYWNrcyB3aWxsIGJlIG1hZGUgaW4gYGR1cmF0aW9uICogbmAgdGltZSwKICAgKiBidXQgdGhlIHRpbWUgYmV0d2VlbiB0d28gY29uc2VjdXRpdmUgY2FsbGJhY2tzCiAgICogY2FuIGJlIHNob3J0ZXIgYW5kIGxvbmdlciB0aGFuIGBkdXJhdGlvbmAuCiAgICoKICAgKiBJbiBwYXJ0aWN1bGFyLCBhbiBpbXBsZW1lbnRhdGlvbiBtYXkgc2NoZWR1bGUgdGhlIG5leHQgY2FsbGJhY2ssIGUuZy4sCiAgICogYSBgZHVyYXRpb25gIGFmdGVyIGVpdGhlciB3aGVuIHRoZSBwcmV2aW91cyBjYWxsYmFjayBlbmRlZCwKICAgKiB3aGVuIHRoZSBwcmV2aW91cyBjYWxsYmFjayBzdGFydGVkLCBvciB3aGVuIHRoZSBwcmV2aW91cyBjYWxsYmFjayB3YXMKICAgKiBzY2hlZHVsZWQgZm9yIC0gZXZlbiBpZiB0aGUgYWN0dWFsIGNhbGxiYWNrIHdhcyBkZWxheWVkLgogICAqLwogIGZhY3RvcnkgVGltZXIucGVyaW9kaWMoRHVyYXRpb24gZHVyYXRpb24sIHZvaWQgY2FsbGJhY2soVGltZXIgdGltZXIpKSB7CiAgICBpZiAoWm9uZS5jdXJyZW50ID09IFpvbmUucm9vdCkgewogICAgICAvLyBObyBuZWVkIHRvIGJpbmQgdGhlIGNhbGxiYWNrLiBXZSBrbm93IHRoYXQgdGhlIHJvb3QncyB0aW1lciB3aWxsCiAgICAgIC8vIGJlIGludm9rZWQgaW4gdGhlIHJvb3Qgem9uZS4KICAgICAgcmV0dXJuIFpvbmUuY3VycmVudC5jcmVhdGVQZXJpb2RpY1RpbWVyKGR1cmF0aW9uLCBjYWxsYmFjayk7CiAgICB9CiAgICB2YXIgYm91bmRDYWxsYmFjayA9IFpvbmUuY3VycmVudC5iaW5kVW5hcnlDYWxsYmFja0d1YXJkZWQ8VGltZXI+KGNhbGxiYWNrKTsKICAgIHJldHVybiBab25lLmN1cnJlbnQuY3JlYXRlUGVyaW9kaWNUaW1lcihkdXJhdGlvbiwgYm91bmRDYWxsYmFjayk7CiAgfQoKICAvKioKICAgKiBSdW5zIHRoZSBnaXZlbiBbY2FsbGJhY2tdIGFzeW5jaHJvbm91c2x5IGFzIHNvb24gYXMgcG9zc2libGUuCiAgICoKICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gYG5ldyBUaW1lcihEdXJhdGlvbi56ZXJvLCBjYWxsYmFjaylgLgogICAqLwogIHN0YXRpYyB2b2lkIHJ1bih2b2lkIGNhbGxiYWNrKCkpIHsKICAgIG5ldyBUaW1lcihEdXJhdGlvbi56ZXJvLCBjYWxsYmFjayk7CiAgfQoKICAvKioKICAgKiBDYW5jZWxzIHRoZSB0aW1lci4KICAgKgogICAqIE9uY2UgYSBbVGltZXJdIGhhcyBiZWVuIGNhbmNlbGVkLCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBub3QgYmUgY2FsbGVkCiAgICogYnkgdGhlIHRpbWVyLiBDYWxsaW5nIFtjYW5jZWxdIG1vcmUgdGhhbiBvbmNlIG9uIGEgW1RpbWVyXSBpcyBhbGxvd2VkLCBhbmQKICAgKiB3aWxsIGhhdmUgbm8gZnVydGhlciBlZmZlY3QuCiAgICovCiAgdm9pZCBjYW5jZWwoKTsKCiAgLyoqCiAgICogVGhlIG51bWJlciBvZiBkdXJhdGlvbnMgcHJlY2VkaW5nIHRoZSBtb3N0IHJlY2VudCB0aW1lciBldmVudC4KICAgKgogICAqIFRoZSB2YWx1ZSBzdGFydHMgYXQgemVybyBhbmQgaXMgaW5jcmVtZW50ZWQgZWFjaCB0aW1lIGEgdGltZXIgZXZlbnQKICAgKiBvY2N1cnMsIHNvIGVhY2ggY2FsbGJhY2sgd2lsbCBzZWUgYSBsYXJnZXIgdmFsdWUgdGhhbiB0aGUgcHJldmlvdXMgb25lLgogICAqCiAgICogSWYgYSBwZXJpb2RpYyB0aW1lciB3aXRoIGEgbm9uLXplcm8gZHVyYXRpb24gaXMgZGVsYXllZCB0b28gbXVjaCwKICAgKiBzbyBtb3JlIHRoYW4gb25lIHRpY2sgc2hvdWxkIGhhdmUgaGFwcGVuZWQsCiAgICogYWxsIGJ1dCB0aGUgbGFzdCB0aWNrIGluIHRoZSBwYXN0IGFyZSBjb25zaWRlcmVkICJtaXNzZWQiLAogICAqIGFuZCBubyBjYWxsYmFjayBpcyBpbnZva2VkIGZvciB0aGVtLgogICAqIFRoZSBbdGlja10gY291bnQgcmVmbGVjdHMgdGhlIG51bWJlciBvZiBkdXJhdGlvbnMgdGhhdCBoYXZlIHBhc3NlZCBhbmQKICAgKiBub3QgdGhlIG51bWJlciBvZiBjYWxsYmFjayBpbnZvY2F0aW9ucyB0aGF0IGhhdmUgaGFwcGVuZWQuCiAgICovCiAgaW50IGdldCB0aWNrOwoKICAvKioKICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHRpbWVyIGlzIHN0aWxsIGFjdGl2ZS4KICAgKgogICAqIEEgbm9uLXBlcmlvZGljIHRpbWVyIGlzIGFjdGl2ZSBpZiB0aGUgY2FsbGJhY2sgaGFzIG5vdCBiZWVuIGV4ZWN1dGVkLAogICAqIGFuZCB0aGUgdGltZXIgaGFzIG5vdCBiZWVuIGNhbmNlbGVkLgogICAqCiAgICogQSBwZXJpb2RpYyB0aW1lciBpcyBhY3RpdmUgaWYgaXQgaGFzIG5vdCBiZWVuIGNhbmNlbGVkLgogICAqLwogIGJvb2wgZ2V0IGlzQWN0aXZlOwoKICBleHRlcm5hbCBzdGF0aWMgVGltZXIgX2NyZWF0ZVRpbWVyKER1cmF0aW9uIGR1cmF0aW9uLCB2b2lkIGNhbGxiYWNrKCkpOwogIGV4dGVybmFsIHN0YXRpYyBUaW1lciBfY3JlYXRlUGVyaW9kaWNUaW1lcigKICAgICAgRHVyYXRpb24gZHVyYXRpb24sIHZvaWQgY2FsbGJhY2soVGltZXIgdGltZXIpKTsKfQqAgQBOTjwBFAEESQM7UEQDP0YDRkkaCy8vAyZIMAUHMAkFB0g7Ay8EFwYaBUQFBjYlSiY7BhhMBAEGJAVKKgVGRTQwBUxBSz4GSiVKJkMGUEYEAQZDBUoGJSgEAQYYBVBQIgYRAQZEBUlNBUcxQCpMQAYQAQYwBUsqBT0GFQFKLjYCARVkYXJ0OmFzeW5jL3RpbWVyLmRhcnQxb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9lcnJvcnNfcGF0Y2guZGFydMAATIEvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBFcnJvciB7CiAgQHBhdGNoCiAgc3RhdGljIFN0cmluZyBfb2JqZWN0VG9TdHJpbmcoT2JqZWN0IG9iamVjdCkgewogICAgcmV0dXJuIE9iamVjdC5fdG9TdHJpbmcob2JqZWN0KTsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBTdHJpbmcgX3N0cmluZ1RvU2FmZVN0cmluZyhTdHJpbmcgc3RyaW5nKSB7CiAgICByZXR1cm4ganNvbi5lbmNvZGUoc3RyaW5nKTsKICB9CgogIEBwYXRjaAogIFN0YWNrVHJhY2UgZ2V0IHN0YWNrVHJhY2UgPT4gX3N0YWNrVHJhY2U7CgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBTdGFja1RyYWNlIF9zdGFja1RyYWNlOwp9CgpjbGFzcyBfQXNzZXJ0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciBpbXBsZW1lbnRzIEFzc2VydGlvbkVycm9yIHsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgX0Fzc2VydGlvbkVycm9yLl9jcmVhdGUoCiAgICAgIHRoaXMuX2ZhaWxlZEFzc2VydGlvbiwgdGhpcy5fdXJsLCB0aGlzLl9saW5lLCB0aGlzLl9jb2x1bW4sIHRoaXMubWVzc2FnZSk7CgogIC8vIEFzc2VydGlvbkVycm9yX3Rocm93TmV3IGluIGVycm9ycy5jYyBmaXNoZXMgdGhlIGFzc2VydGlvbiBzb3VyY2UgY29kZQogIC8vIG91dCBvZiB0aGUgc2NyaXB0LiBJdCBleHBlY3RzIGEgRGFydCBzdGFjayBmcmFtZSBmcm9tIGNsYXNzCiAgLy8gX0Fzc2VydGlvbkVycm9yLiBUaHVzIHdlIG5lZWQgYSBEYXJ0IHN0dWIgdGhhdCBjYWxscyB0aGUgbmF0aXZlIGNvZGUuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgc3RhdGljIF90aHJvd05ldyhpbnQgYXNzZXJ0aW9uU3RhcnQsIGludCBhc3NlcnRpb25FbmQsIE9iamVjdCBtZXNzYWdlKSB7CiAgICBfZG9UaHJvd05ldyhhc3NlcnRpb25TdGFydCwgYXNzZXJ0aW9uRW5kLCBtZXNzYWdlKTsKICB9CgogIHN0YXRpYyBfZG9UaHJvd05ldyhpbnQgYXNzZXJ0aW9uU3RhcnQsIGludCBhc3NlcnRpb25FbmQsIE9iamVjdCBtZXNzYWdlKQogICAgICBuYXRpdmUgIkFzc2VydGlvbkVycm9yX3Rocm93TmV3IjsKCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgc3RhdGljIF9ldmFsdWF0ZUFzc2VydGlvbihjb25kaXRpb24pIHsKICAgIGlmIChpZGVudGljYWwoY29uZGl0aW9uLCB0cnVlKSB8fCBpZGVudGljYWwoY29uZGl0aW9uLCBmYWxzZSkpIHsKICAgICAgcmV0dXJuIGNvbmRpdGlvbjsKICAgIH0KICAgIGlmIChjb25kaXRpb24gaXMgX0Nsb3N1cmUpIHsKICAgICAgcmV0dXJuIChjb25kaXRpb24gYXMgZHluYW1pYykoKTsKICAgIH0KICAgIGlmIChjb25kaXRpb24gaXMgRnVuY3Rpb24pIHsKICAgICAgY29uZGl0aW9uID0gY29uZGl0aW9uKCk7CiAgICB9CiAgICByZXR1cm4gY29uZGl0aW9uOwogIH0KCiAgU3RyaW5nIGdldCBfbWVzc2FnZVN0cmluZyB7CiAgICBpZiAobWVzc2FnZSA9PSBudWxsKSByZXR1cm4gImlzIG5vdCB0cnVlLiI7CiAgICBpZiAobWVzc2FnZSBpcyBTdHJpbmcpIHJldHVybiBtZXNzYWdlOwogICAgcmV0dXJuIEVycm9yLnNhZmVUb1N0cmluZyhtZXNzYWdlKTsKICB9CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGlmIChfdXJsID09IG51bGwpIHsKICAgICAgaWYgKG1lc3NhZ2UgPT0gbnVsbCkgcmV0dXJuIF9mYWlsZWRBc3NlcnRpb24/LnRyaW0oKTsKICAgICAgcmV0dXJuICInJHtfZmFpbGVkQXNzZXJ0aW9uPy50cmltKCl9JzogJF9tZXNzYWdlU3RyaW5nIjsKICAgIH0KICAgIHZhciBjb2x1bW5JbmZvID0gIiI7CiAgICBpZiAoX2NvbHVtbiA+IDApIHsKICAgICAgLy8gT25seSBhZGQgY29sdW1uIGluZm9ybWF0aW9uIGlmIGl0IGlzIHZhbGlkLgogICAgICBjb2x1bW5JbmZvID0gIiBwb3MgJF9jb2x1bW4iOwogICAgfQogICAgcmV0dXJuICInJF91cmwnOiBGYWlsZWQgYXNzZXJ0aW9uOiBsaW5lICRfbGluZSRjb2x1bW5JbmZvOiAiCiAgICAgICAgIickX2ZhaWxlZEFzc2VydGlvbic6ICRfbWVzc2FnZVN0cmluZyI7CiAgfQoKICBmaW5hbCBTdHJpbmcgX2ZhaWxlZEFzc2VydGlvbjsKICBmaW5hbCBTdHJpbmcgX3VybDsKICBmaW5hbCBpbnQgX2xpbmU7CiAgZmluYWwgaW50IF9jb2x1bW47CiAgZmluYWwgT2JqZWN0IG1lc3NhZ2U7Cn0KCmNsYXNzIF9UeXBlRXJyb3IgZXh0ZW5kcyBfQXNzZXJ0aW9uRXJyb3IgaW1wbGVtZW50cyBUeXBlRXJyb3IgewogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBfVHlwZUVycm9yLl9jcmVhdGUoU3RyaW5nIHVybCwgaW50IGxpbmUsIGludCBjb2x1bW4sIFN0cmluZyBlcnJvck1zZykKICAgICAgOiBzdXBlci5fY3JlYXRlKCJpcyBhc3NpZ25hYmxlIiwgdXJsLCBsaW5lLCBjb2x1bW4sIGVycm9yTXNnKTsKCiAgc3RhdGljIF90aHJvd05ldyhpbnQgbG9jYXRpb24sIE9iamVjdCBzcmNfdmFsdWUsIF9UeXBlIGRzdF90eXBlLAogICAgICBTdHJpbmcgZHN0X25hbWUpIG5hdGl2ZSAiVHlwZUVycm9yX3Rocm93TmV3IjsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gc3VwZXIubWVzc2FnZTsKfQoKY2xhc3MgX0Nhc3RFcnJvciBleHRlbmRzIEVycm9yIGltcGxlbWVudHMgQ2FzdEVycm9yIHsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgX0Nhc3RFcnJvci5fY3JlYXRlKHRoaXMuX3VybCwgdGhpcy5fbGluZSwgdGhpcy5fY29sdW1uLCB0aGlzLl9lcnJvck1zZyk7CgogIC8vIEEgQ2FzdEVycm9yIGlzIGFsbG9jYXRlZCBieSBUeXBlRXJyb3IuX3Rocm93TmV3KCkgd2hlbiBkc3RfbmFtZSBlcXVhbHMKICAvLyBTeW1ib2xzOjpJblR5cGVDYXN0KCkuCgogIFN0cmluZyB0b1N0cmluZygpID0+IF9lcnJvck1zZzsKCiAgLy8gRmllbGRzIF91cmwsIF9saW5lLCBhbmQgX2NvbHVtbiBhcmUgb25seSB1c2VkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCiAgZmluYWwgU3RyaW5nIF91cmw7CiAgZmluYWwgaW50IF9saW5lOwogIGZpbmFsIGludCBfY29sdW1uOwogIGZpbmFsIFN0cmluZyBfZXJyb3JNc2c7Cn0KCkBwYXRjaApjbGFzcyBGYWxsVGhyb3VnaEVycm9yIHsKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgRmFsbFRocm91Z2hFcnJvci5fY3JlYXRlKFN0cmluZyB1cmwsIGludCBsaW5lKQogICAgICA6IF91cmwgPSB1cmwsCiAgICAgICAgX2xpbmUgPSBsaW5lOwoKICBzdGF0aWMgX3Rocm93TmV3KGludCBjYXNlX2NsYXVzZV9wb3MpIG5hdGl2ZSAiRmFsbFRocm91Z2hFcnJvcl90aHJvd05ldyI7CgogIEBwYXRjaAogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAiJyRfdXJsJzogU3dpdGNoIGNhc2UgZmFsbC10aHJvdWdoIGF0IGxpbmUgJF9saW5lLiI7CiAgfQoKICAvLyBUaGVzZSBuZXcgZmllbGRzIGNhbm5vdCBiZSBkZWNsYXJlZCBmaW5hbCwgYmVjYXVzZSBhIGNvbnN0cnVjdG9yIGV4aXN0cwogIC8vIGluIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoaXMgcGF0Y2hlZCBjbGFzcy4KICBTdHJpbmcgX3VybDsKICBpbnQgX2xpbmU7Cn0KCmNsYXNzIF9JbnRlcm5hbEVycm9yIHsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgY29uc3QgX0ludGVybmFsRXJyb3IodGhpcy5fbXNnKTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiSW50ZXJuYWxFcnJvcjogJyR7X21zZ30nIjsKICBmaW5hbCBTdHJpbmcgX21zZzsKfQoKQHBhdGNoCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgVW5zdXBwb3J0ZWRFcnJvciB7CiAgc3RhdGljIF90aHJvd05ldyhTdHJpbmcgbXNnKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcihtc2cpOwogIH0KfQoKQHBhdGNoCmNsYXNzIEN5Y2xpY0luaXRpYWxpemF0aW9uRXJyb3IgewogIHN0YXRpYyBfdGhyb3dOZXcoU3RyaW5nIHZhcmlhYmxlTmFtZSkgewogICAgdGhyb3cgbmV3IEN5Y2xpY0luaXRpYWxpemF0aW9uRXJyb3IodmFyaWFibGVOYW1lKTsKICB9Cn0KCkBwYXRjaApjbGFzcyBBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkVycm9yIHsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvci5fY3JlYXRlKAogICAgICB0aGlzLl9jbGFzc05hbWUsIHRoaXMuX3VybCwgdGhpcy5fbGluZSk7CgogIHN0YXRpYyBfdGhyb3dOZXcoaW50IGNhc2VfY2xhdXNlX3BvcywgU3RyaW5nIGNsYXNzTmFtZSkKICAgICAgbmF0aXZlICJBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkVycm9yX3Rocm93TmV3IjsKCiAgQHBhdGNoCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICJDYW5ub3QgaW5zdGFudGlhdGUgYWJzdHJhY3QgY2xhc3MgJF9jbGFzc05hbWU6ICIKICAgICAgICAiX3VybCAnJF91cmwnIGxpbmUgJF9saW5lIjsKICB9CgogIC8vIFRoZXNlIG5ldyBmaWVsZHMgY2Fubm90IGJlIGRlY2xhcmVkIGZpbmFsLCBiZWNhdXNlIGEgY29uc3RydWN0b3IgZXhpc3RzCiAgLy8gaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhpcyBwYXRjaGVkIGNsYXNzLgogIFN0cmluZyBfdXJsOwogIGludCBfbGluZTsKfQoKQHBhdGNoCmNsYXNzIE5vU3VjaE1ldGhvZEVycm9yIHsKICAvLyBEZXByZWNhdGVkIG1lbWJlcnMgdG8gYmUgcmVtb3ZlZC4KICBTeW1ib2wgX21lbWJlck5hbWU7CiAgTGlzdCBfYXJndW1lbnRzOwogIE1hcDxTeW1ib2wsIGR5bmFtaWM+IF9uYW1lZEFyZ3VtZW50czsKICBMaXN0IF9leGlzdGluZ0FyZ3VtZW50TmFtZXM7CgogIGZpbmFsIE9iamVjdCBfcmVjZWl2ZXI7CiAgZmluYWwgX0ludm9jYXRpb25NaXJyb3IgX2ludm9jYXRpb247CgogIEBwYXRjaAogIE5vU3VjaE1ldGhvZEVycm9yLndpdGhJbnZvY2F0aW9uKE9iamVjdCByZWNlaXZlciwgSW52b2NhdGlvbiBpbnZvY2F0aW9uKQogICAgICA6IF9yZWNlaXZlciA9IHJlY2VpdmVyLAogICAgICAgIF9pbnZvY2F0aW9uID0gaW52b2NhdGlvbiBhcyBfSW52b2NhdGlvbk1pcnJvcjsKCiAgc3RhdGljIHZvaWQgX3Rocm93TmV3SW52b2NhdGlvbihPYmplY3QgcmVjZWl2ZXIsIEludm9jYXRpb24gaW52b2NhdGlvbikgewogICAgdGhyb3cgbmV3IE5vU3VjaE1ldGhvZEVycm9yLndpdGhJbnZvY2F0aW9uKHJlY2VpdmVyLCBpbnZvY2F0aW9uKTsKICB9CgogIC8vIFRoZSBjb21waWxlciBlbWl0cyBhIGNhbGwgdG8gX3Rocm93TmV3IHdoZW4gaXQgY2Fubm90IHJlc29sdmUgYSBzdGF0aWMKICAvLyBtZXRob2QgYXQgY29tcGlsZSB0aW1lLiBUaGUgcmVjZWl2ZXIgaXMgYWN0dWFsbHkgdGhlIGxpdGVyYWwgY2xhc3Mgb2YgdGhlCiAgLy8gdW5yZXNvbHZlZCBtZXRob2QuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgc3RhdGljIHZvaWQgX3Rocm93TmV3KE9iamVjdCByZWNlaXZlciwgU3RyaW5nIG1lbWJlck5hbWUsIGludCBpbnZvY2F0aW9uX3R5cGUsCiAgICAgIE9iamVjdCB0eXBlQXJndW1lbnRzLCBMaXN0IGFyZ3VtZW50cywgTGlzdCBhcmd1bWVudE5hbWVzKSB7CiAgICB0aHJvdyBuZXcgTm9TdWNoTWV0aG9kRXJyb3IuX3dpdGhUeXBlKHJlY2VpdmVyLCBtZW1iZXJOYW1lLCBpbnZvY2F0aW9uX3R5cGUsCiAgICAgICAgdHlwZUFyZ3VtZW50cywgYXJndW1lbnRzLCBhcmd1bWVudE5hbWVzKTsKICB9CgogIHN0YXRpYyB2b2lkIF90aHJvd05ld0lmTm90TG9hZGVkKAogICAgICBfTGlicmFyeVByZWZpeCBwcmVmaXgsCiAgICAgIE9iamVjdCByZWNlaXZlciwKICAgICAgU3RyaW5nIG1lbWJlck5hbWUsCiAgICAgIGludCBpbnZvY2F0aW9uX3R5cGUsCiAgICAgIE9iamVjdCB0eXBlQXJndW1lbnRzLAogICAgICBMaXN0IGFyZ3VtZW50cywKICAgICAgTGlzdCBhcmd1bWVudE5hbWVzKSB7CiAgICBpZiAoIXByZWZpeC5pc0xvYWRlZCgpKSB7CiAgICAgIF90aHJvd05ldyhyZWNlaXZlciwgbWVtYmVyTmFtZSwgaW52b2NhdGlvbl90eXBlLCB0eXBlQXJndW1lbnRzLCBhcmd1bWVudHMsCiAgICAgICAgICBhcmd1bWVudE5hbWVzKTsKICAgIH0KICB9CgogIC8vIFRPRE8ocmVnaXMpOiBEZXByZWNhdGVkIG1lbWJlciBzdGlsbCB1c2VkIGJ5IGRhcnQyanMgdG8gYmUgcmVtb3ZlZC4KICAvLyBSZW1lbWJlciB0aGUgdHlwZSBmcm9tIHRoZSBpbnZvY2F0aW9uIG1pcnJvciBvciBzdGF0aWMgY29tcGlsYXRpb24KICAvLyBhbmFseXNpcyB3aGVuIHRocm93biBkaXJlY3RseSB3aXRoIF90aHJvd05ldy4gQSBuZWdhdGl2ZSB2YWx1ZSBtZWFucwogIC8vIHRoYXQgbm8gaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLgogIGludCBfaW52b2NhdGlvbl90eXBlOwoKICAvLyBUT0RPKHJlZ2lzKTogRGVwcmVjYXRlZCBjb25zdHJ1Y3RvciBzdGlsbCB1c2VkIGJ5IGRhcnQyanMgdG8gYmUgcmVtb3ZlZC4KICBAcGF0Y2gKICBOb1N1Y2hNZXRob2RFcnJvcihPYmplY3QgcmVjZWl2ZXIsIFN5bWJvbCBtZW1iZXJOYW1lLAogICAgICBMaXN0IHBvc2l0aW9uYWxBcmd1bWVudHMsIE1hcDxTeW1ib2wsIGR5bmFtaWM+IG5hbWVkQXJndW1lbnRzLAogICAgICBbTGlzdCBleGlzdGluZ0FyZ3VtZW50TmFtZXMgPSBudWxsXSkKICAgICAgOiBfcmVjZWl2ZXIgPSByZWNlaXZlciwKICAgICAgICBfaW52b2NhdGlvbiA9IG51bGwsCiAgICAgICAgX21lbWJlck5hbWUgPSBtZW1iZXJOYW1lLAogICAgICAgIF9hcmd1bWVudHMgPSBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICAgIF9uYW1lZEFyZ3VtZW50cyA9IG5hbWVkQXJndW1lbnRzLAogICAgICAgIF9leGlzdGluZ0FyZ3VtZW50TmFtZXMgPSBleGlzdGluZ0FyZ3VtZW50TmFtZXMsCiAgICAgICAgX2ludm9jYXRpb25fdHlwZSA9IC0xOwoKICAvLyBIZWxwZXIgdG8gYnVpbGQgYSBtYXAgb2YgbmFtZWQgYXJndW1lbnRzLgogIHN0YXRpYyBNYXA8U3ltYm9sLCBkeW5hbWljPiBfTmFtZWRBcmd1bWVudHNNYXAoCiAgICAgIExpc3QgYXJndW1lbnRzLCBMaXN0IGFyZ3VtZW50TmFtZXMpIHsKICAgIE1hcDxTeW1ib2wsIGR5bmFtaWM+IG5hbWVkQXJndW1lbnRzID0gbmV3IE1hcDxTeW1ib2wsIGR5bmFtaWM+KCk7CiAgICBpbnQgbnVtUG9zaXRpb25hbEFyZ3VtZW50cyA9IGFyZ3VtZW50cy5sZW5ndGggLSBhcmd1bWVudE5hbWVzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJndW1lbnROYW1lcy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgYXJnX3ZhbHVlID0gYXJndW1lbnRzW251bVBvc2l0aW9uYWxBcmd1bWVudHMgKyBpXTsKICAgICAgbmFtZWRBcmd1bWVudHNbbmV3IFN5bWJvbChhcmd1bWVudE5hbWVzW2ldKV0gPSBhcmdfdmFsdWU7CiAgICB9CiAgICByZXR1cm4gbmFtZWRBcmd1bWVudHM7CiAgfQoKICAvLyBDb25zdHJ1Y3RvciBjYWxsZWQgZnJvbSBFeGNlcHRpb25zOjpUaHJvd0J5VHlwZShrTm9TdWNoTWV0aG9kKSBhbmQgZnJvbQogIC8vIF90aHJvd05ldyBhYm92ZSwgdGFraW5nIGEgVHlwZUFyZ3VtZW50cyBvYmplY3QgcmF0aGVyIHRoYW4gYW4gdW5wYWNrZWQgbGlzdAogIC8vIG9mIHR5cGVzLCBhcyB3ZWxsIGFzIGEgbGlzdCBvZiBhbGwgYXJndW1lbnRzIGFuZCBhIGxpc3Qgb2YgbmFtZXMsIHJhdGhlcgogIC8vIHRoYW4gYSBzZXBhcmF0ZSBsaXN0IG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzIGFuZCBhIG1hcCBvZiBuYW1lZCBhcmd1bWVudHMuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIE5vU3VjaE1ldGhvZEVycm9yLl93aXRoVHlwZSgKICAgICAgdGhpcy5fcmVjZWl2ZXIsCiAgICAgIFN0cmluZyBtZW1iZXJOYW1lLAogICAgICBpbnQgaW52b2NhdGlvbl90eXBlLAogICAgICBPYmplY3QgdHlwZUFyZ3VtZW50cywKICAgICAgTGlzdCBhcmd1bWVudHMsCiAgICAgIExpc3QgYXJndW1lbnROYW1lcykKICAgICAgOiB0aGlzLl9pbnZvY2F0aW9uID0gbmV3IF9JbnZvY2F0aW9uTWlycm9yLl93aXRoVHlwZSgKICAgICAgICAgICAgbmV3IFN5bWJvbChtZW1iZXJOYW1lKSwKICAgICAgICAgICAgaW52b2NhdGlvbl90eXBlLAogICAgICAgICAgICB0eXBlQXJndW1lbnRzICE9IG51bGwKICAgICAgICAgICAgICAgIC8vIFRPRE8oMzMwNzMpOiBVc2UgYWN0dWFsIGNvdW50IG9mIHR5cGUgYXJndW1lbnRzIGluIHBsYWNlIG9mIDAuCiAgICAgICAgICAgICAgICA/IF9JbnZvY2F0aW9uTWlycm9yLl91bnBhY2tUeXBlQXJndW1lbnRzKHR5cGVBcmd1bWVudHMsIDApCiAgICAgICAgICAgICAgICA6IG51bGwsCiAgICAgICAgICAgIGFyZ3VtZW50TmFtZXMgIT0gbnVsbAogICAgICAgICAgICAgICAgPyBhcmd1bWVudHMuc3VibGlzdCgwLCBhcmd1bWVudHMubGVuZ3RoIC0gYXJndW1lbnROYW1lcy5sZW5ndGgpCiAgICAgICAgICAgICAgICA6IGFyZ3VtZW50cywKICAgICAgICAgICAgYXJndW1lbnROYW1lcyAhPSBudWxsCiAgICAgICAgICAgICAgICA/IF9OYW1lZEFyZ3VtZW50c01hcChhcmd1bWVudHMsIGFyZ3VtZW50TmFtZXMpCiAgICAgICAgICAgICAgICA6IG51bGwpOwoKICBzdGF0aWMgU3RyaW5nIF9leGlzdGluZ01ldGhvZFNpZ25hdHVyZShPYmplY3QgcmVjZWl2ZXIsIFN0cmluZyBtZXRob2ROYW1lLAogICAgICBpbnQgaW52b2NhdGlvblR5cGUpIG5hdGl2ZSAiTm9TdWNoTWV0aG9kRXJyb3JfZXhpc3RpbmdNZXRob2RTaWduYXR1cmUiOwoKICBAcGF0Y2gKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAvLyBUT0RPKHJlZ2lzKTogUmVtb3ZlIHRoaXMgbnVsbCBjaGVjayBvbmNlIGRhcnQyanMgaXMgdXBkYXRlZC4KICAgIGlmIChfaW52b2NhdGlvbiA9PSBudWxsKSB7CiAgICAgIC8vIFVzZSBkZXByZWNhdGVkIHZlcnNpb24gb2YgdG9TdHJpbmcuCiAgICAgIHJldHVybiBfdG9TdHJpbmdEZXByZWNhdGVkKCk7CiAgICB9CiAgICBTdHJpbmcgbWVtYmVyTmFtZSA9CiAgICAgICAgaW50ZXJuYWwuU3ltYm9sLmNvbXB1dGVVbm1hbmdsZWROYW1lKF9pbnZvY2F0aW9uLm1lbWJlck5hbWUpOwogICAgdmFyIGxldmVsID0gKF9pbnZvY2F0aW9uLl90eXBlID4+IF9JbnZvY2F0aW9uTWlycm9yLl9MRVZFTF9TSElGVCkgJgogICAgICAgIF9JbnZvY2F0aW9uTWlycm9yLl9MRVZFTF9NQVNLOwogICAgdmFyIGtpbmQgPSBfaW52b2NhdGlvbi5fdHlwZSAmIF9JbnZvY2F0aW9uTWlycm9yLl9LSU5EX01BU0s7CiAgICBpZiAoa2luZCA9PSBfSW52b2NhdGlvbk1pcnJvci5fTE9DQUxfVkFSKSB7CiAgICAgIHJldHVybiAiTm9TdWNoTWV0aG9kRXJyb3I6IENhbm5vdCBhc3NpZ24gdG8gZmluYWwgdmFyaWFibGUgJyRtZW1iZXJOYW1lJyI7CiAgICB9CgogICAgU3RyaW5nQnVmZmVyIHR5cGVBcmd1bWVudHNCdWYgPSBudWxsOwogICAgdmFyIHR5cGVBcmd1bWVudHMgPSBfaW52b2NhdGlvbi50eXBlQXJndW1lbnRzOwogICAgaWYgKCh0eXBlQXJndW1lbnRzICE9IG51bGwpICYmICh0eXBlQXJndW1lbnRzLmxlbmd0aCA+IDApKSB7CiAgICAgIHR5cGVBcmd1bWVudHNCdWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgIHR5cGVBcmd1bWVudHNCdWYud3JpdGUoIjwiKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlQXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGkgPiAwKSB7CiAgICAgICAgICB0eXBlQXJndW1lbnRzQnVmLndyaXRlKCIsICIpOwogICAgICAgIH0KICAgICAgICB0eXBlQXJndW1lbnRzQnVmLndyaXRlKEVycm9yLnNhZmVUb1N0cmluZyh0eXBlQXJndW1lbnRzW2ldKSk7CiAgICAgIH0KICAgICAgdHlwZUFyZ3VtZW50c0J1Zi53cml0ZSgiPiIpOwogICAgfQogICAgU3RyaW5nQnVmZmVyIGFyZ3VtZW50c0J1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHZhciBwb3NpdGlvbmFsQXJndW1lbnRzID0gX2ludm9jYXRpb24ucG9zaXRpb25hbEFyZ3VtZW50czsKICAgIGludCBhcmd1bWVudENvdW50ID0gMDsKICAgIGlmIChwb3NpdGlvbmFsQXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgZm9yICg7IGFyZ3VtZW50Q291bnQgPCBwb3NpdGlvbmFsQXJndW1lbnRzLmxlbmd0aDsgYXJndW1lbnRDb3VudCsrKSB7CiAgICAgICAgaWYgKGFyZ3VtZW50Q291bnQgPiAwKSB7CiAgICAgICAgICBhcmd1bWVudHNCdWYud3JpdGUoIiwgIik7CiAgICAgICAgfQogICAgICAgIGFyZ3VtZW50c0J1ZgogICAgICAgICAgICAud3JpdGUoRXJyb3Iuc2FmZVRvU3RyaW5nKHBvc2l0aW9uYWxBcmd1bWVudHNbYXJndW1lbnRDb3VudF0pKTsKICAgICAgfQogICAgfQogICAgdmFyIG5hbWVkQXJndW1lbnRzID0gX2ludm9jYXRpb24ubmFtZWRBcmd1bWVudHM7CiAgICBpZiAobmFtZWRBcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBuYW1lZEFyZ3VtZW50cy5mb3JFYWNoKChTeW1ib2wga2V5LCB2YXIgdmFsdWUpIHsKICAgICAgICBpZiAoYXJndW1lbnRDb3VudCA+IDApIHsKICAgICAgICAgIGFyZ3VtZW50c0J1Zi53cml0ZSgiLCAiKTsKICAgICAgICB9CiAgICAgICAgYXJndW1lbnRzQnVmLndyaXRlKGludGVybmFsLlN5bWJvbC5jb21wdXRlVW5tYW5nbGVkTmFtZShrZXkpKTsKICAgICAgICBhcmd1bWVudHNCdWYud3JpdGUoIjogIik7CiAgICAgICAgYXJndW1lbnRzQnVmLndyaXRlKEVycm9yLnNhZmVUb1N0cmluZyh2YWx1ZSkpOwogICAgICAgIGFyZ3VtZW50Q291bnQrKzsKICAgICAgfSk7CiAgICB9CiAgICBTdHJpbmcgZXhpc3RpbmdTaWcgPQogICAgICAgIF9leGlzdGluZ01ldGhvZFNpZ25hdHVyZShfcmVjZWl2ZXIsIG1lbWJlck5hbWUsIF9pbnZvY2F0aW9uLl90eXBlKTsKICAgIFN0cmluZyBhcmdzTXNnID0gZXhpc3RpbmdTaWcgIT0gbnVsbCA/ICIgd2l0aCBtYXRjaGluZyBhcmd1bWVudHMiIDogIiI7CgogICAgU3RyaW5nIGtpbmRCdWY7CiAgICBpZiAoa2luZCA+PSAwICYmIGtpbmQgPCA1KSB7CiAgICAgIGtpbmRCdWYgPSAoY29uc3QgWwogICAgICAgICJtZXRob2QiLAogICAgICAgICJnZXR0ZXIiLAogICAgICAgICJzZXR0ZXIiLAogICAgICAgICJnZXR0ZXIgb3Igc2V0dGVyIiwKICAgICAgICAidmFyaWFibGUiCiAgICAgIF0pW2tpbmRdOwogICAgfQoKICAgIFN0cmluZ0J1ZmZlciBtc2dCdWYgPSBuZXcgU3RyaW5nQnVmZmVyKCJOb1N1Y2hNZXRob2RFcnJvcjogIik7CiAgICBib29sIGlzX3R5cGVfY2FsbCA9IGZhbHNlOwogICAgc3dpdGNoIChsZXZlbCkgewogICAgICBjYXNlIF9JbnZvY2F0aW9uTWlycm9yLl9EWU5BTUlDOgogICAgICAgIHsKICAgICAgICAgIGlmIChfcmVjZWl2ZXIgPT0gbnVsbCkgewogICAgICAgICAgICBpZiAoZXhpc3RpbmdTaWcgIT0gbnVsbCkgewogICAgICAgICAgICAgIG1zZ0J1Zi53cml0ZWxuKCJUaGUgbnVsbCBvYmplY3QgZG9lcyBub3QgaGF2ZSBhICRraW5kQnVmICIKICAgICAgICAgICAgICAgICAgIickbWVtYmVyTmFtZSckYXJnc01zZy4iKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBtc2dCdWYud3JpdGVsbigiVGhlICRraW5kQnVmICckbWVtYmVyTmFtZScgd2FzIGNhbGxlZCBvbiBudWxsLiIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoX3JlY2VpdmVyIGlzIF9DbG9zdXJlKSB7CiAgICAgICAgICAgICAgbXNnQnVmLndyaXRlbG4oIkNsb3N1cmUgY2FsbCB3aXRoIG1pc21hdGNoZWQgYXJndW1lbnRzOiAiCiAgICAgICAgICAgICAgICAgICJmdW5jdGlvbiAnJG1lbWJlck5hbWUnIik7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoX3JlY2VpdmVyIGlzIF9UeXBlICYmIG1lbWJlck5hbWUgPT0gImNhbGwiKSB7CiAgICAgICAgICAgICAgaXNfdHlwZV9jYWxsID0gdHJ1ZTsKICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IF9yZWNlaXZlci50b1N0cmluZygpOwogICAgICAgICAgICAgIG1zZ0J1Zi53cml0ZWxuKCJBdHRlbXB0ZWQgdG8gdXNlIHR5cGUgJyRuYW1lJyBhcyBhIGZ1bmN0aW9uLiAiCiAgICAgICAgICAgICAgICAgICJTaW5jZSB0eXBlcyBkbyBub3QgZGVmaW5lIGEgbWV0aG9kICdjYWxsJywgdGhpcyBpcyBub3QgIgogICAgICAgICAgICAgICAgICAicG9zc2libGUuIERpZCB5b3UgaW50ZW5kIHRvIGNhbGwgdGhlICRuYW1lIGNvbnN0cnVjdG9yIGFuZCAiCiAgICAgICAgICAgICAgICAgICJmb3JnZXQgdGhlICduZXcnIG9wZXJhdG9yPyIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIG1zZ0J1Zi53cml0ZWxuKCJDbGFzcyAnJHtfcmVjZWl2ZXIucnVudGltZVR5cGV9JyBoYXMgbm8gaW5zdGFuY2UgIgogICAgICAgICAgICAgICAgICAiJGtpbmRCdWYgJyRtZW1iZXJOYW1lJyRhcmdzTXNnLiIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIGNhc2UgX0ludm9jYXRpb25NaXJyb3IuX1NVUEVSOgogICAgICAgIHsKICAgICAgICAgIG1zZ0J1Zi53cml0ZWxuKCJTdXBlciBjbGFzcyBvZiBjbGFzcyAnJHtfcmVjZWl2ZXIucnVudGltZVR5cGV9JyBoYXMgIgogICAgICAgICAgICAgICJubyBpbnN0YW5jZSAka2luZEJ1ZiAnJG1lbWJlck5hbWUnJGFyZ3NNc2cuIik7CiAgICAgICAgICBtZW1iZXJOYW1lID0gInN1cGVyLiRtZW1iZXJOYW1lIjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgY2FzZSBfSW52b2NhdGlvbk1pcnJvci5fU1RBVElDOgogICAgICAgIHsKICAgICAgICAgIG1zZ0J1Zi53cml0ZWxuKCJObyBzdGF0aWMgJGtpbmRCdWYgJyRtZW1iZXJOYW1lJyRhcmdzTXNnICIKICAgICAgICAgICAgICAiZGVjbGFyZWQgaW4gY2xhc3MgJyRfcmVjZWl2ZXInLiIpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICBjYXNlIF9JbnZvY2F0aW9uTWlycm9yLl9DT05TVFJVQ1RPUjoKICAgICAgICB7CiAgICAgICAgICBtc2dCdWYud3JpdGVsbigiTm8gY29uc3RydWN0b3IgJyRtZW1iZXJOYW1lJyRhcmdzTXNnIGRlY2xhcmVkICIKICAgICAgICAgICAgICAiaW4gY2xhc3MgJyRfcmVjZWl2ZXInLiIpOwogICAgICAgICAgbWVtYmVyTmFtZSA9ICJuZXcgJG1lbWJlck5hbWUiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICBjYXNlIF9JbnZvY2F0aW9uTWlycm9yLl9UT1BfTEVWRUw6CiAgICAgICAgewogICAgICAgICAgbXNnQnVmLndyaXRlbG4oIk5vIHRvcC1sZXZlbCAka2luZEJ1ZiAnJG1lbWJlck5hbWUnJGFyZ3NNc2cgIgogICAgICAgICAgICAgICJkZWNsYXJlZC4iKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAobGV2ZWwgPT0gX0ludm9jYXRpb25NaXJyb3IuX1RPUF9MRVZFTCkgewogICAgICBtc2dCdWYud3JpdGVsbigiUmVjZWl2ZXI6IHRvcC1sZXZlbCIpOwogICAgfSBlbHNlIHsKICAgICAgbXNnQnVmLndyaXRlbG4oIlJlY2VpdmVyOiAke0Vycm9yLnNhZmVUb1N0cmluZyhfcmVjZWl2ZXIpfSIpOwogICAgfQoKICAgIGlmIChraW5kID09IF9JbnZvY2F0aW9uTWlycm9yLl9NRVRIT0QpIHsKICAgICAgU3RyaW5nIG0gPSBpc190eXBlX2NhbGwgPyAiJF9yZWNlaXZlciIgOiAiJG1lbWJlck5hbWUiOwogICAgICBtc2dCdWYud3JpdGUoIlRyaWVkIGNhbGxpbmc6ICRtIik7CiAgICAgIGlmICh0eXBlQXJndW1lbnRzQnVmICE9IG51bGwpIHsKICAgICAgICBtc2dCdWYud3JpdGUodHlwZUFyZ3VtZW50c0J1Zik7CiAgICAgIH0KICAgICAgbXNnQnVmLndyaXRlKCIoJGFyZ3VtZW50c0J1ZikiKTsKICAgIH0gZWxzZSBpZiAoYXJndW1lbnRDb3VudCA9PSAwKSB7CiAgICAgIG1zZ0J1Zi53cml0ZSgiVHJpZWQgY2FsbGluZzogJG1lbWJlck5hbWUiKTsKICAgIH0gZWxzZSBpZiAoa2luZCA9PSBfSW52b2NhdGlvbk1pcnJvci5fU0VUVEVSKSB7CiAgICAgIG1zZ0J1Zi53cml0ZSgiVHJpZWQgY2FsbGluZzogJG1lbWJlck5hbWUkYXJndW1lbnRzQnVmIik7CiAgICB9IGVsc2UgewogICAgICBtc2dCdWYud3JpdGUoIlRyaWVkIGNhbGxpbmc6ICRtZW1iZXJOYW1lID0gJGFyZ3VtZW50c0J1ZiIpOwogICAgfQoKICAgIGlmIChleGlzdGluZ1NpZyAhPSBudWxsKSB7CiAgICAgIG1zZ0J1Zi53cml0ZSgiXG5Gb3VuZDogJG1lbWJlck5hbWUkZXhpc3RpbmdTaWciKTsKICAgIH0KCiAgICByZXR1cm4gbXNnQnVmLnRvU3RyaW5nKCk7CiAgfQoKICAvLyBUT0RPKHJlZ2lzKTogUmVtb3ZlIHRoaXMgZnVuY3Rpb24gb25jZSBkYXJ0MmpzIGlzIHVwZGF0ZWQuCiAgU3RyaW5nIF90b1N0cmluZ0RlcHJlY2F0ZWQoKSB7CiAgICB2YXIgbGV2ZWwgPSAoX2ludm9jYXRpb25fdHlwZSA+PiBfSW52b2NhdGlvbk1pcnJvci5fTEVWRUxfU0hJRlQpICYKICAgICAgICBfSW52b2NhdGlvbk1pcnJvci5fTEVWRUxfTUFTSzsKICAgIHZhciB0eXBlID0gX2ludm9jYXRpb25fdHlwZSAmIF9JbnZvY2F0aW9uTWlycm9yLl9LSU5EX01BU0s7CiAgICBTdHJpbmcgbWVtYmVyTmFtZSA9IChfbWVtYmVyTmFtZSA9PSBudWxsKQogICAgICAgID8gIiIKICAgICAgICA6IGludGVybmFsLlN5bWJvbC5jb21wdXRlVW5tYW5nbGVkTmFtZShfbWVtYmVyTmFtZSk7CgogICAgaWYgKHR5cGUgPT0gX0ludm9jYXRpb25NaXJyb3IuX0xPQ0FMX1ZBUikgewogICAgICByZXR1cm4gIk5vU3VjaE1ldGhvZEVycm9yOiBDYW5ub3QgYXNzaWduIHRvIGZpbmFsIHZhcmlhYmxlICckbWVtYmVyTmFtZSciOwogICAgfQoKICAgIFN0cmluZ0J1ZmZlciBhcmd1bWVudHMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBpbnQgYXJndW1lbnRDb3VudCA9IDA7CiAgICBpZiAoX2FyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGZvciAoOyBhcmd1bWVudENvdW50IDwgX2FyZ3VtZW50cy5sZW5ndGg7IGFyZ3VtZW50Q291bnQrKykgewogICAgICAgIGlmIChhcmd1bWVudENvdW50ID4gMCkgewogICAgICAgICAgYXJndW1lbnRzLndyaXRlKCIsICIpOwogICAgICAgIH0KICAgICAgICBhcmd1bWVudHMud3JpdGUoRXJyb3Iuc2FmZVRvU3RyaW5nKF9hcmd1bWVudHNbYXJndW1lbnRDb3VudF0pKTsKICAgICAgfQogICAgfQogICAgaWYgKF9uYW1lZEFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIF9uYW1lZEFyZ3VtZW50cy5mb3JFYWNoKChTeW1ib2wga2V5LCB2YXIgdmFsdWUpIHsKICAgICAgICBpZiAoYXJndW1lbnRDb3VudCA+IDApIHsKICAgICAgICAgIGFyZ3VtZW50cy53cml0ZSgiLCAiKTsKICAgICAgICB9CiAgICAgICAgYXJndW1lbnRzLndyaXRlKGludGVybmFsLlN5bWJvbC5jb21wdXRlVW5tYW5nbGVkTmFtZShrZXkpKTsKICAgICAgICBhcmd1bWVudHMud3JpdGUoIjogIik7CiAgICAgICAgYXJndW1lbnRzLndyaXRlKEVycm9yLnNhZmVUb1N0cmluZyh2YWx1ZSkpOwogICAgICAgIGFyZ3VtZW50Q291bnQrKzsKICAgICAgfSk7CiAgICB9CiAgICBib29sIGFyZ3NfbWlzbWF0Y2ggPSBfZXhpc3RpbmdBcmd1bWVudE5hbWVzICE9IG51bGw7CiAgICBTdHJpbmcgYXJnc19tZXNzYWdlID0gYXJnc19taXNtYXRjaCA/ICIgd2l0aCBtYXRjaGluZyBhcmd1bWVudHMiIDogIiI7CgogICAgU3RyaW5nIHR5cGVfc3RyOwogICAgaWYgKHR5cGUgPj0gMCAmJiB0eXBlIDwgNSkgewogICAgICB0eXBlX3N0ciA9IChjb25zdCBbCiAgICAgICAgIm1ldGhvZCIsCiAgICAgICAgImdldHRlciIsCiAgICAgICAgInNldHRlciIsCiAgICAgICAgImdldHRlciBvciBzZXR0ZXIiLAogICAgICAgICJ2YXJpYWJsZSIKICAgICAgXSlbdHlwZV07CiAgICB9CgogICAgU3RyaW5nQnVmZmVyIG1zZ19idWYgPSBuZXcgU3RyaW5nQnVmZmVyKCJOb1N1Y2hNZXRob2RFcnJvcjogIik7CiAgICBib29sIGlzX3R5cGVfY2FsbCA9IGZhbHNlOwogICAgc3dpdGNoIChsZXZlbCkgewogICAgICBjYXNlIF9JbnZvY2F0aW9uTWlycm9yLl9EWU5BTUlDOgogICAgICAgIHsKICAgICAgICAgIGlmIChfcmVjZWl2ZXIgPT0gbnVsbCkgewogICAgICAgICAgICBpZiAoYXJnc19taXNtYXRjaCkgewogICAgICAgICAgICAgIG1zZ19idWYud3JpdGVsbigiVGhlIG51bGwgb2JqZWN0IGRvZXMgbm90IGhhdmUgYSAkdHlwZV9zdHIgIgogICAgICAgICAgICAgICAgICAiJyRtZW1iZXJOYW1lJyRhcmdzX21lc3NhZ2UuIik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgbXNnX2J1ZgogICAgICAgICAgICAgICAgICAud3JpdGVsbigiVGhlICR0eXBlX3N0ciAnJG1lbWJlck5hbWUnIHdhcyBjYWxsZWQgb24gbnVsbC4iKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKF9yZWNlaXZlciBpcyBfQ2xvc3VyZSkgewogICAgICAgICAgICAgIG1zZ19idWYud3JpdGVsbigiQ2xvc3VyZSBjYWxsIHdpdGggbWlzbWF0Y2hlZCBhcmd1bWVudHM6ICIKICAgICAgICAgICAgICAgICAgImZ1bmN0aW9uICckbWVtYmVyTmFtZSciKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChfcmVjZWl2ZXIgaXMgX1R5cGUgJiYgbWVtYmVyTmFtZSA9PSAiY2FsbCIpIHsKICAgICAgICAgICAgICBpc190eXBlX2NhbGwgPSB0cnVlOwogICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gX3JlY2VpdmVyLnRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgbXNnX2J1Zi53cml0ZWxuKCJBdHRlbXB0ZWQgdG8gdXNlIHR5cGUgJyRuYW1lJyBhcyBhIGZ1bmN0aW9uLiAiCiAgICAgICAgICAgICAgICAgICJTaW5jZSB0eXBlcyBkbyBub3QgZGVmaW5lIGEgbWV0aG9kICdjYWxsJywgdGhpcyBpcyBub3QgIgogICAgICAgICAgICAgICAgICAicG9zc2libGUuIERpZCB5b3UgaW50ZW5kIHRvIGNhbGwgdGhlICRuYW1lIGNvbnN0cnVjdG9yIGFuZCAiCiAgICAgICAgICAgICAgICAgICJmb3JnZXQgdGhlICduZXcnIG9wZXJhdG9yPyIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIG1zZ19idWYKICAgICAgICAgICAgICAgICAgLndyaXRlbG4oIkNsYXNzICcke19yZWNlaXZlci5ydW50aW1lVHlwZX0nIGhhcyBubyBpbnN0YW5jZSAiCiAgICAgICAgICAgICAgICAgICAgICAiJHR5cGVfc3RyICckbWVtYmVyTmFtZSckYXJnc19tZXNzYWdlLiIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIGNhc2UgX0ludm9jYXRpb25NaXJyb3IuX1NVUEVSOgogICAgICAgIHsKICAgICAgICAgIG1zZ19idWYud3JpdGVsbigiU3VwZXIgY2xhc3Mgb2YgY2xhc3MgJyR7X3JlY2VpdmVyLnJ1bnRpbWVUeXBlfScgaGFzICIKICAgICAgICAgICAgICAibm8gaW5zdGFuY2UgJHR5cGVfc3RyICckbWVtYmVyTmFtZSckYXJnc19tZXNzYWdlLiIpOwogICAgICAgICAgbWVtYmVyTmFtZSA9ICJzdXBlci4kbWVtYmVyTmFtZSI7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIGNhc2UgX0ludm9jYXRpb25NaXJyb3IuX1NUQVRJQzoKICAgICAgICB7CiAgICAgICAgICBtc2dfYnVmLndyaXRlbG4oIk5vIHN0YXRpYyAkdHlwZV9zdHIgJyRtZW1iZXJOYW1lJyRhcmdzX21lc3NhZ2UgIgogICAgICAgICAgICAgICJkZWNsYXJlZCBpbiBjbGFzcyAnJF9yZWNlaXZlcicuIik7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIGNhc2UgX0ludm9jYXRpb25NaXJyb3IuX0NPTlNUUlVDVE9SOgogICAgICAgIHsKICAgICAgICAgIG1zZ19idWYud3JpdGVsbigiTm8gY29uc3RydWN0b3IgJyRtZW1iZXJOYW1lJyRhcmdzX21lc3NhZ2UgZGVjbGFyZWQgIgogICAgICAgICAgICAgICJpbiBjbGFzcyAnJF9yZWNlaXZlcicuIik7CiAgICAgICAgICBtZW1iZXJOYW1lID0gIm5ldyAkbWVtYmVyTmFtZSI7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIGNhc2UgX0ludm9jYXRpb25NaXJyb3IuX1RPUF9MRVZFTDoKICAgICAgICB7CiAgICAgICAgICBtc2dfYnVmLndyaXRlbG4oIk5vIHRvcC1sZXZlbCAkdHlwZV9zdHIgJyRtZW1iZXJOYW1lJyRhcmdzX21lc3NhZ2UgIgogICAgICAgICAgICAgICJkZWNsYXJlZC4iKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAobGV2ZWwgPT0gX0ludm9jYXRpb25NaXJyb3IuX1RPUF9MRVZFTCkgewogICAgICBtc2dfYnVmLndyaXRlbG4oIlJlY2VpdmVyOiB0b3AtbGV2ZWwiKTsKICAgIH0gZWxzZSB7CiAgICAgIG1zZ19idWYud3JpdGVsbigiUmVjZWl2ZXI6ICR7RXJyb3Iuc2FmZVRvU3RyaW5nKF9yZWNlaXZlcil9Iik7CiAgICB9CgogICAgaWYgKHR5cGUgPT0gX0ludm9jYXRpb25NaXJyb3IuX01FVEhPRCkgewogICAgICBTdHJpbmcgbSA9IGlzX3R5cGVfY2FsbCA/ICIkX3JlY2VpdmVyIiA6ICIkbWVtYmVyTmFtZSI7CiAgICAgIG1zZ19idWYud3JpdGUoIlRyaWVkIGNhbGxpbmc6ICRtKCRhcmd1bWVudHMpIik7CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50Q291bnQgPT0gMCkgewogICAgICBtc2dfYnVmLndyaXRlKCJUcmllZCBjYWxsaW5nOiAkbWVtYmVyTmFtZSIpOwogICAgfSBlbHNlIGlmICh0eXBlID09IF9JbnZvY2F0aW9uTWlycm9yLl9TRVRURVIpIHsKICAgICAgbXNnX2J1Zi53cml0ZSgiVHJpZWQgY2FsbGluZzogJG1lbWJlck5hbWUkYXJndW1lbnRzIik7CiAgICB9IGVsc2UgewogICAgICBtc2dfYnVmLndyaXRlKCJUcmllZCBjYWxsaW5nOiAkbWVtYmVyTmFtZSA9ICRhcmd1bWVudHMiKTsKICAgIH0KCiAgICBpZiAoYXJnc19taXNtYXRjaCkgewogICAgICBTdHJpbmdCdWZmZXIgZm9ybWFsUGFyYW1ldGVycyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfZXhpc3RpbmdBcmd1bWVudE5hbWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGkgPiAwKSB7CiAgICAgICAgICBmb3JtYWxQYXJhbWV0ZXJzLndyaXRlKCIsICIpOwogICAgICAgIH0KICAgICAgICBmb3JtYWxQYXJhbWV0ZXJzLndyaXRlKF9leGlzdGluZ0FyZ3VtZW50TmFtZXNbaV0pOwogICAgICB9CiAgICAgIG1zZ19idWYud3JpdGUoIlxuRm91bmQ6ICRtZW1iZXJOYW1lKCRmb3JtYWxQYXJhbWV0ZXJzKSIpOwogICAgfQoKICAgIHJldHVybiBtc2dfYnVmLnRvU3RyaW5nKCk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9Db21waWxlVGltZUVycm9yIGV4dGVuZHMgRXJyb3IgewogIGZpbmFsIFN0cmluZyBfZXJyb3JNc2c7CiAgX0NvbXBpbGVUaW1lRXJyb3IodGhpcy5fZXJyb3JNc2cpOwogIFN0cmluZyB0b1N0cmluZygpID0+IF9lcnJvck1zZzsKfQoKLy8vIFVzZWQgYnkgRmFzdGEgdG8gcmVwb3J0IGEgcnVudGltZSBlcnJvciB3aGVuIGEgZmluYWwgZmllbGQgd2l0aCBhbgovLy8gaW5pdGlhbGl6ZXIgaXMgYWxzbyBpbml0aWFsaXplZCBpbiBhIGdlbmVyYXRpdmUgY29uc3RydWN0b3IuCi8vLwovLy8gTm90ZTogaW4gc3Ryb25nIG1vZGUsIHRoaXMgaXMgYSBjb21waWxlLXRpbWUgZXJyb3IgYW5kIHRoaXMgY2xhc3MgYmVjb21lcwovLy8gb2Jzb2xldGUuCmNsYXNzIF9EdXBsaWNhdGVkRmllbGRJbml0aWFsaXplckVycm9yIGV4dGVuZHMgRXJyb3IgewogIGZpbmFsIFN0cmluZyBfbmFtZTsKCiAgX0R1cGxpY2F0ZWRGaWVsZEluaXRpYWxpemVyRXJyb3IodGhpcy5fbmFtZSk7CgogIHRvU3RyaW5nKCkgPT4gIkVycm9yOiBmaWVsZCAnJF9uYW1lJyBpcyBhbHJlYWR5IGluaXRpYWxpemVkLiI7Cn0KglAATk48AR4BBw4JMSUEAQk1IAQBCSwBHBoCAUAcG1EBS0FLJEs4BAFLKAEkKUUYBiEnBiEfBhYEAR4wKygEARYYPD8GGRc1JAZBMAQBIRUTFRgCAUAcSEUBQzQBJgIBNhxLAUwcASIBSxUTFRoCAQcZCRwxFBYBTAEJFkAEAU00Dw0CARccIzMVAgEHGhkhJQQCAQciKjcEAgEHKBwrLwE6OQEJFj0kBAFNNA8NAgEHGicWEygfARonAQlLHjcBTEYEAUxPGCRRQlEyBAEkHRcZGxwWHB5RGgYEAUlISicYAU4JOEUrHhwiKio4HwEvMixGSjU9QAYbBAFNUU5QHB8WGRscFho8JB0iUksYIlAdIj8ZAU1OAQkWRB8tJAYYRkgnQTBRBgEqM0EtIzcVKApGCCMGND8bJ0whJAoVTAgGNSI3ISQKRyI3GQoGGUxMARQhGRISEhwTEAYBQx8VJwojJ0ktFVAOEylILUUjMk1MUDEVUTYODBEKJQpQPiwRCiYKRTIRCisKSikqEQopCkgcEQoGATEtDUQGAS0+KSYoCCclMjQ/DUIGAR84BgEeBAFAIUcnQC4NPQEwUQYBMRseQyEhCkgIBiM4ISEKRB80GQoGOUsBFSEaEhISHBMQBgFEHxUnCiMhSzIVFk8OEylJLUUjMk5MUDEVFk9ADgwRCiUKUUQsEQomCkwyEQorClApKhEKKQpPHBEKBgExLg1FBgEtPjYlMzQ9DUAGARk6QBUoCjsIQAYBHwQCARooGiUiAgFHQQRODjcWATABQQIBIWRhcnQ6Y29yZS1wYXRjaC9lcnJvcnNfcGF0Y2guZGFydDJvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvYXN5bmMvYXN5bmNfZXJyb3IuZGFydIMsLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5hc3luYzsKCl9pbnZva2VFcnJvckhhbmRsZXIoCiAgICBGdW5jdGlvbiBlcnJvckhhbmRsZXIsIE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgaWYgKGVycm9ySGFuZGxlciBpcyBab25lQmluYXJ5Q2FsbGJhY2s8ZHluYW1pYywgTnVsbCwgTnVsbD4pIHsKICAgIC8vIER5bmFtaWMgaW52b2NhdGlvbiBiZWNhdXNlIHdlIGRvbid0IGtub3cgdGhlIGFjdHVhbCB0eXBlIG9mIHRoZQogICAgLy8gZmlyc3QgYXJndW1lbnQgb3IgdGhlIGVycm9yIG9iamVjdCwgYnV0IHdlIHNob3VsZCBzdWNjZXNzZnVsbHkgY2FsbAogICAgLy8gdGhlIGhhbmRsZXIgaWYgdGhleSBtYXRjaCB1cC4KICAgIC8vIFRPRE8obHJuKTogU2hvdWxkIHdlPyBXaHkgbm90IHRoZSBzYW1lIGJlbG93IGZvciB0aGUgdW5hcnkgY2FzZT8KICAgIHJldHVybiAoZXJyb3JIYW5kbGVyIGFzIGR5bmFtaWMpKGVycm9yLCBzdGFja1RyYWNlKTsKICB9IGVsc2UgewogICAgWm9uZVVuYXJ5Q2FsbGJhY2sgdW5hcnlFcnJvckhhbmRsZXIgPSBlcnJvckhhbmRsZXI7CiAgICByZXR1cm4gdW5hcnlFcnJvckhhbmRsZXIoZXJyb3IpOwogIH0KfQoVAE5OPAEUARVCQUdLJUg5CzglBAIBG2RhcnQ6YXN5bmMvYXN5bmNfZXJyb3IuZGFydDZvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29sbGVjdGlvbi9jb2xsZWN0aW9uLmRhcnSDMy8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gQ2xhc3NlcyBhbmQgdXRpbGl0aWVzIHRoYXQgc3VwcGxlbWVudCB0aGUgY29sbGVjdGlvbiBzdXBwb3J0IGluIGRhcnQ6Y29yZS4KLy8vCi8vLyBUbyB1c2UgdGhpcyBsaWJyYXJ5IGluIHlvdXIgY29kZToKLy8vCi8vLyAgICAgaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nOwovLy8KLy8vIHtAY2F0ZWdvcnkgQ29yZX0KbGlicmFyeSBkYXJ0LmNvbGxlY3Rpb247CgppbXBvcnQgJ2RhcnQ6X2ludGVybmFsJyBoaWRlIFN5bWJvbDsKaW1wb3J0ICdkYXJ0Om1hdGgnIHNob3cgUmFuZG9tOyAvLyBVc2VkIGJ5IExpc3RNaXhpbi5zaHVmZmxlLgoKcGFydCAnY29sbGVjdGlvbnMuZGFydCc7CnBhcnQgJ2hhc2hfbWFwLmRhcnQnOwpwYXJ0ICdoYXNoX3NldC5kYXJ0JzsKcGFydCAnaXRlcmFibGUuZGFydCc7CnBhcnQgJ2l0ZXJhdG9yLmRhcnQnOwpwYXJ0ICdsaW5rZWRfaGFzaF9tYXAuZGFydCc7CnBhcnQgJ2xpbmtlZF9oYXNoX3NldC5kYXJ0JzsKcGFydCAnbGlua2VkX2xpc3QuZGFydCc7CnBhcnQgJ2xpc3QuZGFydCc7CnBhcnQgJ21hcHMuZGFydCc7CnBhcnQgJ3F1ZXVlLmRhcnQnOwpwYXJ0ICdzZXQuZGFydCc7CnBhcnQgJ3NwbGF5X3RyZWUuZGFydCc7Ch8ATk48AU8EJgQiBBUZASU+ARkWFhYWHR0ZEhITERgBD2RhcnQ6Y29sbGVjdGlvbjRvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29sbGVjdGlvbi9oYXNoX21hcC5kYXJ0mTMvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvbGxlY3Rpb247CgovLy8gRGVmYXVsdCBmdW5jdGlvbiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbiBpbiBjdXN0b21pemVkIEhhc2hNYXBzCmJvb2wgX2RlZmF1bHRFcXVhbHMoYSwgYikgPT4gYSA9PSBiOwoKLy8vIERlZmF1bHQgZnVuY3Rpb24gZm9yIGhhc2gtY29kZSBjb21wdXRhdGlvbiBpbiBjdXN0b21pemVkIEhhc2hNYXBzCmludCBfZGVmYXVsdEhhc2hDb2RlKGEpID0+IGEuaGFzaENvZGU7CgovLy8gVHlwZSBvZiBjdXN0b20gZXF1YWxpdHkgZnVuY3Rpb24KdHlwZWRlZiBfRXF1YWxpdHk8Sz4gPSBib29sIEZ1bmN0aW9uKEsgYSwgSyBiKTsKCi8vLyBUeXBlIG9mIGN1c3RvbSBoYXNoIGNvZGUgZnVuY3Rpb24uCnR5cGVkZWYgX0hhc2hlcjxLPiA9IGludCBGdW5jdGlvbihLIG9iamVjdCk7CgovLy8gQSBoYXNoLXRhYmxlIGJhc2VkIGltcGxlbWVudGF0aW9uIG9mIFtNYXBdLgovLy8KLy8vIFRoZSBrZXlzIG9mIGEgYEhhc2hNYXBgIG11c3QgaGF2ZSBjb25zaXN0ZW50IFtPYmplY3QuPT1dCi8vLyBhbmQgW09iamVjdC5oYXNoQ29kZV0gaW1wbGVtZW50YXRpb25zLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGA9PWAgb3BlcmF0b3IKLy8vIG11c3QgZGVmaW5lIGEgc3RhYmxlIGVxdWl2YWxlbmNlIHJlbGF0aW9uIG9uIHRoZSBrZXlzIChyZWZsZXhpdmUsCi8vLyBzeW1tZXRyaWMsIHRyYW5zaXRpdmUsIGFuZCBjb25zaXN0ZW50IG92ZXIgdGltZSksIGFuZCB0aGF0IGBoYXNoQ29kZWAKLy8vIG11c3QgYmUgdGhlIHNhbWUgZm9yIG9iamVjdHMgdGhhdCBhcmUgY29uc2lkZXJlZCBlcXVhbCBieSBgPT1gLgovLy8KLy8vIFRoZSBtYXAgYWxsb3dzIGBudWxsYCBhcyBhIGtleS4KLy8vCi8vLyBJdGVyYXRpbmcgdGhlIG1hcCdzIGtleXMsIHZhbHVlcyBvciBlbnRyaWVzICh0aHJvdWdoIFtmb3JFYWNoXSkKLy8vIG1heSBoYXBwZW4gaW4gYW55IG9yZGVyLgovLy8gVGhlIGl0ZXJhdGlvbiBvcmRlciBvbmx5IGNoYW5nZXMgd2hlbiB0aGUgbWFwIGlzIG1vZGlmaWVkLgovLy8gVmFsdWVzIGFyZSBpdGVyYXRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGVpciBhc3NvY2lhdGVkIGtleXMsCi8vLyBzbyBpdGVyYXRpbmcgdGhlIFtrZXlzXSBhbmQgW3ZhbHVlc10gaW4gcGFyYWxsZWwKLy8vIHdpbGwgZ2l2ZSBtYXRjaGluZyBrZXkgYW5kIHZhbHVlIHBhaXJzLgphYnN0cmFjdCBjbGFzcyBIYXNoTWFwPEssIFY+IGltcGxlbWVudHMgTWFwPEssIFY+IHsKICAvLy8gQ3JlYXRlcyBhbiB1bm9yZGVyZWQgaGFzaC10YWJsZSBiYXNlZCBbTWFwXS4KICAvLy8KICAvLy8gVGhlIGNyZWF0ZWQgbWFwIGlzIG5vdCBvcmRlcmVkIGluIGFueSB3YXkuIFdoZW4gaXRlcmF0aW5nIHRoZSBrZXlzIG9yCiAgLy8vIHZhbHVlcywgdGhlIGl0ZXJhdGlvbiBvcmRlciBpcyB1bnNwZWNpZmllZCBleGNlcHQgdGhhdCBpdCB3aWxsIHN0YXkgdGhlCiAgLy8vIHNhbWUgYXMgbG9uZyBhcyB0aGUgbWFwIGlzbid0IGNoYW5nZWQuCiAgLy8vCiAgLy8vIElmIFtlcXVhbHNdIGlzIHByb3ZpZGVkLCBpdCBpcyB1c2VkIHRvIGNvbXBhcmUgdGhlIGtleXMgaW4gdGhlIHRhYmxlIHdpdGgKICAvLy8gbmV3IGtleXMuIElmIFtlcXVhbHNdIGlzIG9taXR0ZWQsIHRoZSBrZXkncyBvd24gW09iamVjdC49PV0gaXMgdXNlZAogIC8vLyBpbnN0ZWFkLgogIC8vLwogIC8vLyBTaW1pbGFyLCBpZiBbaGFzaENvZGVdIGlzIHByb3ZpZGVkLCBpdCBpcyB1c2VkIHRvIHByb2R1Y2UgYSBoYXNoIHZhbHVlCiAgLy8vIGZvciBrZXlzIGluIG9yZGVyIHRvIHBsYWNlIHRoZW0gaW4gdGhlIGhhc2ggdGFibGUuIElmIGl0IGlzIG9taXR0ZWQsIHRoZQogIC8vLyBrZXkncyBvd24gW09iamVjdC5oYXNoQ29kZV0gaXMgdXNlZC4KICAvLy8KICAvLy8gSWYgdXNpbmcgbWV0aG9kcyBsaWtlIFtvcGVyYXRvciBbXV0sIFtyZW1vdmVdIGFuZCBbY29udGFpbnNLZXldIHRvZ2V0aGVyCiAgLy8vIHdpdGggYSBjdXN0b20gZXF1YWxpdHkgYW5kIGhhc2hjb2RlLCBhbiBleHRyYSBgaXNWYWxpZEtleWAgZnVuY3Rpb24KICAvLy8gY2FuIGJlIHN1cHBsaWVkLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBbZXF1YWxzXSBvcgogIC8vLyBbaGFzaENvZGVdIHdpdGggYW4gYXJndW1lbnQgdGhhdCBtYXkgbm90IGJlIGEgW0tdIGluc3RhbmNlLCBhbmQgaWYgdGhlCiAgLy8vIGNhbGwgcmV0dXJucyBmYWxzZSwgdGhlIGtleSBpcyBhc3N1bWVkIHRvIG5vdCBiZSBpbiB0aGUgc2V0LgogIC8vLyBUaGUgW2lzVmFsaWRLZXldIGZ1bmN0aW9uIGRlZmF1bHRzIHRvIGp1c3QgdGVzdGluZyBpZiB0aGUgb2JqZWN0IGlzIGEKICAvLy8gW0tdIGluc3RhbmNlLgogIC8vLwogIC8vLyBFeGFtcGxlOgogIC8vLwogIC8vLyAgICAgbmV3IEhhc2hNYXA8aW50LGludD4oZXF1YWxzOiAoaW50IGEsIGludCBiKSA9PiAoYiAtIGEpICUgNSA9PSAwLAogIC8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaENvZGU6IChpbnQgZSkgPT4gZSAlIDUpCiAgLy8vCiAgLy8vIFRoaXMgZXhhbXBsZSBtYXAgZG9lcyBub3QgbmVlZCBhbiBgaXNWYWxpZEtleWAgZnVuY3Rpb24gdG8gYmUgcGFzc2VkLgogIC8vLyBUaGUgZGVmYXVsdCBmdW5jdGlvbiBhY2NlcHRzIG9ubHkgYGludGAgdmFsdWVzLCB3aGljaCBjYW4gc2FmZWx5IGJlCiAgLy8vIHBhc3NlZCB0byBib3RoIHRoZSBgZXF1YWxzYCBhbmQgYGhhc2hDb2RlYCBmdW5jdGlvbnMuCiAgLy8vCiAgLy8vIElmIG5laXRoZXIgYGVxdWFsc2AsIGBoYXNoQ29kZWAsIG5vciBgaXNWYWxpZEtleWAgaXMgcHJvdmlkZWQsCiAgLy8vIHRoZSBkZWZhdWx0IGBpc1ZhbGlkS2V5YCBpbnN0ZWFkIGFjY2VwdHMgYWxsIGtleXMuCiAgLy8vIFRoZSBkZWZhdWx0IGVxdWFsaXR5IGFuZCBoYXNoY29kZSBvcGVyYXRpb25zIGFyZSBhc3N1bWVkIHRvIHdvcmsgb24gYWxsCiAgLy8vIG9iamVjdHMuCiAgLy8vCiAgLy8vIExpa2V3aXNlLCBpZiBgZXF1YWxzYCBpcyBbaWRlbnRpY2FsXSwgYGhhc2hDb2RlYCBpcyBbaWRlbnRpdHlIYXNoQ29kZV0KICAvLy8gYW5kIGBpc1ZhbGlkS2V5YCBpcyBvbWl0dGVkLCB0aGUgcmVzdWx0aW5nIG1hcCBpcyBpZGVudGl0eSBiYXNlZCwKICAvLy8gYW5kIHRoZSBgaXNWYWxpZEtleWAgZGVmYXVsdHMgdG8gYWNjZXB0aW5nIGFsbCBrZXlzLgogIC8vLyBTdWNoIGEgbWFwIGNhbiBiZSBjcmVhdGVkIGRpcmVjdGx5IHVzaW5nIFtIYXNoTWFwLmlkZW50aXR5XS4KICAvLy8KICAvLy8gVGhlIHVzZWQgYGVxdWFsc2AgYW5kIGBoYXNoQ29kZWAgbWV0aG9kIHNob3VsZCBhbHdheXMgYmUgY29uc2lzdGVudCwKICAvLy8gc28gdGhhdCBpZiBgZXF1YWxzKGEsIGIpYCB0aGVuIGBoYXNoQ29kZShhKSA9PSBoYXNoQ29kZShiKWAuIFRoZSBoYXNoCiAgLy8vIG9mIGFuIG9iamVjdCwgb3Igd2hhdCBpdCBjb21wYXJlcyBlcXVhbCB0bywgc2hvdWxkIG5vdCBjaGFuZ2Ugd2hpbGUgdGhlCiAgLy8vIG9iamVjdCBpcyBhIGtleSBpbiB0aGUgbWFwLiBJZiBpdCBkb2VzIGNoYW5nZSwgdGhlIHJlc3VsdCBpcwogIC8vLyB1bnByZWRpY3RhYmxlLgogIC8vLwogIC8vLyBJZiB5b3Ugc3VwcGx5IG9uZSBvZiBbZXF1YWxzXSBhbmQgW2hhc2hDb2RlXSwKICAvLy8geW91IHNob3VsZCBnZW5lcmFsbHkgYWxzbyB0byBzdXBwbHkgdGhlIG90aGVyLgogIGV4dGVybmFsIGZhY3RvcnkgSGFzaE1hcCgKICAgICAge2Jvb2wgZXF1YWxzKEsga2V5MSwgSyBrZXkyKSwKICAgICAgaW50IGhhc2hDb2RlKEsga2V5KSwKICAgICAgYm9vbCBpc1ZhbGlkS2V5KHBvdGVudGlhbEtleSl9KTsKCiAgLy8vIENyZWF0ZXMgYW4gdW5vcmRlcmVkIGlkZW50aXR5LWJhc2VkIG1hcC4KICAvLy8KICAvLy8gRWZmZWN0aXZlbHkgYSBzaG9ydGhhbmQgZm9yOgogIC8vLwogIC8vLyAgICAgbmV3IEhhc2hNYXA8SywgVj4oZXF1YWxzOiBpZGVudGljYWwsCiAgLy8vICAgICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogaWRlbnRpdHlIYXNoQ29kZSkKICBleHRlcm5hbCBmYWN0b3J5IEhhc2hNYXAuaWRlbnRpdHkoKTsKCiAgLy8vIENyZWF0ZXMgYSBbSGFzaE1hcF0gdGhhdCBjb250YWlucyBhbGwga2V5L3ZhbHVlIHBhaXJzIG9mIFtvdGhlcl0uCiAgLy8vCiAgLy8vIFRoZSBrZXlzIG11c3QgYWxsIGJlIGluc3RhbmNlcyBvZiBbS10gYW5kIHRoZSB2YWx1ZXMgb2YgW1ZdLgogIC8vLyBUaGUgW290aGVyXSBtYXAgaXRzZWxmIGNhbiBoYXZlIGFueSB0eXBlLgogIGZhY3RvcnkgSGFzaE1hcC5mcm9tKE1hcCBvdGhlcikgewogICAgTWFwPEssIFY+IHJlc3VsdCA9IEhhc2hNYXA8SywgVj4oKTsKICAgIG90aGVyLmZvckVhY2goKGssIHYpIHsKICAgICAgcmVzdWx0W2tdID0gdjsKICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBDcmVhdGVzIGEgW0hhc2hNYXBdIHRoYXQgY29udGFpbnMgYWxsIGtleS92YWx1ZSBwYWlycyBvZiBbb3RoZXJdLgogIGZhY3RvcnkgSGFzaE1hcC5vZihNYXA8SywgVj4gb3RoZXIpID0+IEhhc2hNYXA8SywgVj4oKS4uYWRkQWxsKG90aGVyKTsKCiAgLy8vIENyZWF0ZXMgYSBbSGFzaE1hcF0gd2hlcmUgdGhlIGtleXMgYW5kIHZhbHVlcyBhcmUgY29tcHV0ZWQgZnJvbSB0aGUKICAvLy8gW2l0ZXJhYmxlXS4KICAvLy8KICAvLy8gRm9yIGVhY2ggZWxlbWVudCBvZiB0aGUgW2l0ZXJhYmxlXSB0aGlzIGNvbnN0cnVjdG9yIGNvbXB1dGVzIGEga2V5L3ZhbHVlCiAgLy8vIHBhaXIsIGJ5IGFwcGx5aW5nIFtrZXldIGFuZCBbdmFsdWVdIHJlc3BlY3RpdmVseS4KICAvLy8KICAvLy8gVGhlIGtleXMgb2YgdGhlIGtleS92YWx1ZSBwYWlycyBkbyBub3QgbmVlZCB0byBiZSB1bmlxdWUuIFRoZSBsYXN0CiAgLy8vIG9jY3VycmVuY2Ugb2YgYSBrZXkgd2lsbCBzaW1wbHkgb3ZlcndyaXRlIGFueSBwcmV2aW91cyB2YWx1ZS4KICAvLy8KICAvLy8gSWYgbm8gdmFsdWVzIGFyZSBzcGVjaWZpZWQgZm9yIFtrZXldIGFuZCBbdmFsdWVdIHRoZSBkZWZhdWx0IGlzIHRoZQogIC8vLyBpZGVudGl0eSBmdW5jdGlvbi4KICBmYWN0b3J5IEhhc2hNYXAuZnJvbUl0ZXJhYmxlKEl0ZXJhYmxlIGl0ZXJhYmxlLAogICAgICB7SyBrZXkoZWxlbWVudCksIFYgdmFsdWUoZWxlbWVudCl9KSB7CiAgICBNYXA8SywgVj4gbWFwID0gSGFzaE1hcDxLLCBWPigpOwogICAgTWFwQmFzZS5fZmlsbE1hcFdpdGhNYXBwZWRJdGVyYWJsZShtYXAsIGl0ZXJhYmxlLCBrZXksIHZhbHVlKTsKICAgIHJldHVybiBtYXA7CiAgfQoKICAvLy8gQ3JlYXRlcyBhIFtIYXNoTWFwXSBhc3NvY2lhdGluZyB0aGUgZ2l2ZW4gW2tleXNdIHRvIFt2YWx1ZXNdLgogIC8vLwogIC8vLyBUaGlzIGNvbnN0cnVjdG9yIGl0ZXJhdGVzIG92ZXIgW2tleXNdIGFuZCBbdmFsdWVzXSBhbmQgbWFwcyBlYWNoIGVsZW1lbnQKICAvLy8gb2YgW2tleXNdIHRvIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgW3ZhbHVlc10uCiAgLy8vCiAgLy8vIElmIFtrZXlzXSBjb250YWlucyB0aGUgc2FtZSBvYmplY3QgbXVsdGlwbGUgdGltZXMsIHRoZSBsYXN0IG9jY3VycmVuY2UKICAvLy8gb3ZlcndyaXRlcyB0aGUgcHJldmlvdXMgdmFsdWUuCiAgLy8vCiAgLy8vIEl0IGlzIGFuIGVycm9yIGlmIHRoZSB0d28gW0l0ZXJhYmxlXXMgZG9uJ3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGguCiAgZmFjdG9yeSBIYXNoTWFwLmZyb21JdGVyYWJsZXMoSXRlcmFibGU8Sz4ga2V5cywgSXRlcmFibGU8Vj4gdmFsdWVzKSB7CiAgICBNYXA8SywgVj4gbWFwID0gSGFzaE1hcDxLLCBWPigpOwogICAgTWFwQmFzZS5fZmlsbE1hcFdpdGhJdGVyYWJsZXMobWFwLCBrZXlzLCB2YWx1ZXMpOwogICAgcmV0dXJuIG1hcDsKICB9CgogIC8vLyBDcmVhdGVzIGEgW0hhc2hNYXBdIGNvbnRhaW5pbmcgdGhlIGVudHJpZXMgb2YgW2VudHJpZXNdLgogIC8vLwogIC8vLyBSZXR1cm5zIGEgbmV3IGBIYXNoTWFwPEssIFY+YCB3aGVyZSBhbGwgZW50cmllcyBvZiBbZW50cmllc10KICAvLy8gaGF2ZSBiZWVuIGFkZGVkIGluIGl0ZXJhdGlvbiBvcmRlci4KICAvLy8KICAvLy8gSWYgbXVsdGlwbGUgW2VudHJpZXNdIGhhdmUgdGhlIHNhbWUga2V5LAogIC8vLyBsYXRlciBvY2N1cnJlbmNlcyBvdmVyd3JpdGUgdGhlIGVhcmxpZXIgb25lcy4KICBAU2luY2UoIjIuMSIpCiAgZmFjdG9yeSBIYXNoTWFwLmZyb21FbnRyaWVzKEl0ZXJhYmxlPE1hcEVudHJ5PEssIFY+PiBlbnRyaWVzKSA9PgogICAgICBIYXNoTWFwPEssIFY+KCkuLmFkZEVudHJpZXMoZW50cmllcyk7Cn0KgJ4ATk48ARkBRCUBRicBJTABJy0BMAQ9TUZKRAQkBEQdP0Q1LDQzBkxOLQZQSg8GTU8rBk9KSk1DTBQGDwZLOwZMSjwGRTlODwZNSDtDBktMTkMVBjQ1HCQbJwEvBiMGLzgnAUgGQzAkKBsVCBMEAUhJAUoSBk84BklEBkoZMiwlQxAEAUQGTzoGTSUGSEglNhAEAT8GQyoGLzQQQywCAR1kYXJ0OmNvbGxlY3Rpb24vaGFzaF9tYXAuZGFydDZvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29sbGVjdGlvbi9zcGxheV90cmVlLmRhcnTAAGdkLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb2xsZWN0aW9uOwoKdHlwZWRlZiBfUHJlZGljYXRlPFQ+ID0gYm9vbCBGdW5jdGlvbihUIHZhbHVlKTsKCi8vLyBBIG5vZGUgaW4gYSBzcGxheSB0cmVlLiBJdCBob2xkcyB0aGUgc29ydGluZyBrZXkgYW5kIHRoZSBsZWZ0Ci8vLyBhbmQgcmlnaHQgY2hpbGRyZW4gaW4gdGhlIHRyZWUuCmNsYXNzIF9TcGxheVRyZWVOb2RlPEs+IHsKICBmaW5hbCBLIGtleTsKICBfU3BsYXlUcmVlTm9kZTxLPiBsZWZ0OwogIF9TcGxheVRyZWVOb2RlPEs+IHJpZ2h0OwoKICBfU3BsYXlUcmVlTm9kZSh0aGlzLmtleSk7Cn0KCi8vLyBBIG5vZGUgaW4gYSBzcGxheSB0cmVlIGJhc2VkIG1hcC4KLy8vCi8vLyBBIFtfU3BsYXlUcmVlTm9kZV0gdGhhdCBhbHNvIGNvbnRhaW5zIGEgdmFsdWUKY2xhc3MgX1NwbGF5VHJlZU1hcE5vZGU8SywgVj4gZXh0ZW5kcyBfU3BsYXlUcmVlTm9kZTxLPiB7CiAgViB2YWx1ZTsKICBfU3BsYXlUcmVlTWFwTm9kZShLIGtleSwgdGhpcy52YWx1ZSkgOiBzdXBlcihrZXkpOwp9CgovLy8gQSBzcGxheSB0cmVlIGlzIGEgc2VsZi1iYWxhbmNpbmcgYmluYXJ5IHNlYXJjaCB0cmVlLgovLy8KLy8vIEl0IGhhcyB0aGUgYWRkaXRpb25hbCBwcm9wZXJ0eSB0aGF0IHJlY2VudGx5IGFjY2Vzc2VkIGVsZW1lbnRzCi8vLyBhcmUgcXVpY2sgdG8gYWNjZXNzIGFnYWluLgovLy8gSXQgcGVyZm9ybXMgYmFzaWMgb3BlcmF0aW9ucyBzdWNoIGFzIGluc2VydGlvbiwgbG9vay11cCBhbmQKLy8vIHJlbW92YWwsIGluIE8obG9nKG4pKSBhbW9ydGl6ZWQgdGltZS4KYWJzdHJhY3QgY2xhc3MgX1NwbGF5VHJlZTxLLCBOb2RlIGV4dGVuZHMgX1NwbGF5VHJlZU5vZGU8Sz4+IHsKICAvLyBUaGUgcm9vdCBub2RlIG9mIHRoZSBzcGxheSB0cmVlLiBJdCB3aWxsIGNvbnRhaW4gZWl0aGVyIHRoZSBsYXN0CiAgLy8gZWxlbWVudCBpbnNlcnRlZCBvciB0aGUgbGFzdCBlbGVtZW50IGxvb2tlZCB1cC4KICBOb2RlIGdldCBfcm9vdDsKICBzZXQgX3Jvb3QoTm9kZSBuZXdWYWx1ZSk7CgogIC8vIFRoZSBkdW1teSBub2RlIHVzZWQgd2hlbiBwZXJmb3JtaW5nIGEgc3BsYXkgb24gdGhlIHRyZWUuIFJldXNpbmcgaXQKICAvLyBhdm9pZHMgYWxsb2NhdGluZyBhIG5vZGUgZWFjaCB0aW1lIGEgc3BsYXkgaXMgcGVyZm9ybWVkLgogIE5vZGUgZ2V0IF9kdW1teTsKCiAgLy8gTnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBzcGxheSB0cmVlLgogIGludCBfY291bnQgPSAwOwoKICAvLy8gQ291bnRlciBpbmNyZW1lbnRlZCB3aGVuZXZlciB0aGUga2V5cyBpbiB0aGUgbWFwIGNoYW5nZXMuCiAgLy8vCiAgLy8vIFVzZWQgdG8gZGV0ZWN0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucy4KICBpbnQgX21vZGlmaWNhdGlvbkNvdW50ID0gMDsKCiAgLy8vIENvdW50ZXIgaW5jcmVtZW50ZWQgd2hlbmV2ZXIgdGhlIHRyZWUgc3RydWN0dXJlIGNoYW5nZXMuCiAgLy8vCiAgLy8vIFVzZWQgdG8gZGV0ZWN0IHRoYXQgYW4gaW4tcGxhY2UgdHJhdmVyc2FsIGNhbm5vdCB1c2UKICAvLy8gY2FjaGVkIGluZm9ybWF0aW9uIHRoYXQgcmVsaWVzIG9uIHRoZSB0cmVlIHN0cnVjdHVyZS4KICBpbnQgX3NwbGF5Q291bnQgPSAwOwoKICAvLy8gVGhlIGNvbXBhcmF0b3IgdGhhdCBpcyB1c2VkIGZvciB0aGlzIHNwbGF5IHRyZWUuCiAgQ29tcGFyYXRvcjxLPiBnZXQgX2NvbXBhcmF0b3I7CgogIC8vLyBUaGUgcHJlZGljYXRlIHRvIGRldGVybWluZSB0aGF0IGEgZ2l2ZW4gb2JqZWN0IGlzIGEgdmFsaWQga2V5LgogIF9QcmVkaWNhdGUgZ2V0IF92YWxpZEtleTsKCiAgLy8vIENvbXBhcmlzb24gdXNlZCB0byBjb21wYXJlIGtleXMuCiAgaW50IF9jb21wYXJlKEsga2V5MSwgSyBrZXkyKTsKCiAgLy8vIFBlcmZvcm0gdGhlIHNwbGF5IG9wZXJhdGlvbiBmb3IgdGhlIGdpdmVuIGtleS4gTW92ZXMgdGhlIG5vZGUgd2l0aAogIC8vLyB0aGUgZ2l2ZW4ga2V5IHRvIHRoZSB0b3Agb2YgdGhlIHRyZWUuICBJZiBubyBub2RlIGhhcyB0aGUgZ2l2ZW4KICAvLy8ga2V5LCB0aGUgbGFzdCBub2RlIG9uIHRoZSBzZWFyY2ggcGF0aCBpcyBtb3ZlZCB0byB0aGUgdG9wIG9mIHRoZQogIC8vLyB0cmVlLiBUaGlzIGlzIHRoZSBzaW1wbGlmaWVkIHRvcC1kb3duIHNwbGF5aW5nIGFsZ29yaXRobSBmcm9tOgogIC8vLyAiU2VsZi1hZGp1c3RpbmcgQmluYXJ5IFNlYXJjaCBUcmVlcyIgYnkgU2xlYXRvciBhbmQgVGFyamFuLgogIC8vLwogIC8vLyBSZXR1cm5zIHRoZSByZXN1bHQgb2YgY29tcGFyaW5nIHRoZSBuZXcgcm9vdCBvZiB0aGUgdHJlZSB0byBba2V5XS4KICAvLy8gUmV0dXJucyAtMSBpZiB0aGUgdGFibGUgaXMgZW1wdHkuCiAgaW50IF9zcGxheShLIGtleSkgewogICAgaWYgKF9yb290ID09IG51bGwpIHJldHVybiAtMTsKCiAgICAvLyBUaGUgcmlnaHQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUgd2lsbCBob2xkCiAgICAvLyB0aGUgTCB0cmVlIG9mIHRoZSBhbGdvcml0aG0uICBUaGUgbGVmdCBjaGlsZCBvZiB0aGUgZHVtbXkgbm9kZQogICAgLy8gd2lsbCBob2xkIHRoZSBSIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFVzaW5nIGEgZHVtbXkgbm9kZSwgbGVmdAogICAgLy8gYW5kIHJpZ2h0IHdpbGwgYWx3YXlzIGJlIG5vZGVzIGFuZCB3ZSBhdm9pZCBzcGVjaWFsIGNhc2VzLgogICAgTm9kZSBsZWZ0ID0gX2R1bW15OwogICAgTm9kZSByaWdodCA9IF9kdW1teTsKICAgIE5vZGUgY3VycmVudCA9IF9yb290OwogICAgaW50IGNvbXA7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBjb21wID0gX2NvbXBhcmUoY3VycmVudC5rZXksIGtleSk7CiAgICAgIGlmIChjb21wID4gMCkgewogICAgICAgIGlmIChjdXJyZW50LmxlZnQgPT0gbnVsbCkgYnJlYWs7CiAgICAgICAgY29tcCA9IF9jb21wYXJlKGN1cnJlbnQubGVmdC5rZXksIGtleSk7CiAgICAgICAgaWYgKGNvbXAgPiAwKSB7CiAgICAgICAgICAvLyBSb3RhdGUgcmlnaHQuCiAgICAgICAgICBfU3BsYXlUcmVlTm9kZTxLPiB0bXAgPSBjdXJyZW50LmxlZnQ7CiAgICAgICAgICBjdXJyZW50LmxlZnQgPSB0bXAucmlnaHQ7CiAgICAgICAgICB0bXAucmlnaHQgPSBjdXJyZW50OwogICAgICAgICAgY3VycmVudCA9IHRtcDsKICAgICAgICAgIGlmIChjdXJyZW50LmxlZnQgPT0gbnVsbCkgYnJlYWs7CiAgICAgICAgfQogICAgICAgIC8vIExpbmsgcmlnaHQuCiAgICAgICAgcmlnaHQubGVmdCA9IGN1cnJlbnQ7CiAgICAgICAgcmlnaHQgPSBjdXJyZW50OwogICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmxlZnQ7CiAgICAgIH0gZWxzZSBpZiAoY29tcCA8IDApIHsKICAgICAgICBpZiAoY3VycmVudC5yaWdodCA9PSBudWxsKSBicmVhazsKICAgICAgICBjb21wID0gX2NvbXBhcmUoY3VycmVudC5yaWdodC5rZXksIGtleSk7CiAgICAgICAgaWYgKGNvbXAgPCAwKSB7CiAgICAgICAgICAvLyBSb3RhdGUgbGVmdC4KICAgICAgICAgIE5vZGUgdG1wID0gY3VycmVudC5yaWdodDsKICAgICAgICAgIGN1cnJlbnQucmlnaHQgPSB0bXAubGVmdDsKICAgICAgICAgIHRtcC5sZWZ0ID0gY3VycmVudDsKICAgICAgICAgIGN1cnJlbnQgPSB0bXA7CiAgICAgICAgICBpZiAoY3VycmVudC5yaWdodCA9PSBudWxsKSBicmVhazsKICAgICAgICB9CiAgICAgICAgLy8gTGluayBsZWZ0LgogICAgICAgIGxlZnQucmlnaHQgPSBjdXJyZW50OwogICAgICAgIGxlZnQgPSBjdXJyZW50OwogICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnJpZ2h0OwogICAgICB9IGVsc2UgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICAvLyBBc3NlbWJsZS4KICAgIGxlZnQucmlnaHQgPSBjdXJyZW50LmxlZnQ7CiAgICByaWdodC5sZWZ0ID0gY3VycmVudC5yaWdodDsKICAgIGN1cnJlbnQubGVmdCA9IF9kdW1teS5yaWdodDsKICAgIGN1cnJlbnQucmlnaHQgPSBfZHVtbXkubGVmdDsKICAgIF9yb290ID0gY3VycmVudDsKCiAgICBfZHVtbXkucmlnaHQgPSBudWxsOwogICAgX2R1bW15LmxlZnQgPSBudWxsOwogICAgX3NwbGF5Q291bnQrKzsKICAgIHJldHVybiBjb21wOwogIH0KCiAgLy8gRW11bGF0ZXMgc3BsYXlpbmcgd2l0aCBhIGtleSB0aGF0IGlzIHNtYWxsZXIgdGhhbiBhbnkgaW4gdGhlIHN1YnRyZWUKICAvLyBhbmNob3JlZCBhdCBbbm9kZV0uCiAgLy8gYW5kIHRoYXQgbm9kZSBpcyByZXR1cm5lZC4gSXQgc2hvdWxkIHJlcGxhY2UgdGhlIHJlZmVyZW5jZSB0byBbbm9kZV0KICAvLyBpbiBhbnkgcGFyZW50IHRyZWUgb3Igcm9vdCBwb2ludGVyLgogIGV4dGVybmFsIE5vZGUgX3NwbGF5TWluKE5vZGUgbm9kZSk7CgogIC8vIEVtdWxhdGVzIHNwbGF5aW5nIHdpdGggYSBrZXkgdGhhdCBpcyBncmVhdGVyIHRoYW4gYW55IGluIHRoZSBzdWJ0cmVlCiAgLy8gYW5jaG9yZWQgYXQgW25vZGVdLgogIC8vIEFmdGVyIHRoaXMsIHRoZSBsYXJnZXN0IGVsZW1lbnQgaW4gdGhlIHRyZWUgaXMgdGhlIHJvb3Qgb2YgdGhlIHN1YnRyZWUsCiAgLy8gYW5kIHRoYXQgbm9kZSBpcyByZXR1cm5lZC4gSXQgc2hvdWxkIHJlcGxhY2UgdGhlIHJlZmVyZW5jZSB0byBbbm9kZV0KICAvLyBpbiBhbnkgcGFyZW50IHRyZWUgb3Igcm9vdCBwb2ludGVyLgogIGV4dGVybmFsIE5vZGUgX3NwbGF5TWF4KE5vZGUgbm9kZSk7CgogIE5vZGUgX3JlbW92ZShLIGtleSkgewogICAgaWYgKF9yb290ID09IG51bGwpIHJldHVybiBudWxsOwogICAgaW50IGNvbXAgPSBfc3BsYXkoa2V5KTsKICAgIGlmIChjb21wICE9IDApIHJldHVybiBudWxsOwogICAgTm9kZSByZXN1bHQgPSBfcm9vdDsKICAgIF9jb3VudC0tOwogICAgLy8gYXNzZXJ0KF9jb3VudCA+PSAwKTsKICAgIGlmIChfcm9vdC5sZWZ0ID09IG51bGwpIHsKICAgICAgX3Jvb3QgPSBfcm9vdC5yaWdodDsKICAgIH0gZWxzZSB7CiAgICAgIE5vZGUgcmlnaHQgPSBfcm9vdC5yaWdodDsKICAgICAgLy8gU3BsYXkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG5ldyByb290IGhhcyBhbiBlbXB0eSByaWdodCBjaGlsZC4KICAgICAgX3Jvb3QgPSBfc3BsYXlNYXgoX3Jvb3QubGVmdCk7CiAgICAgIC8vIEluc2VydCB0aGUgb3JpZ2luYWwgcmlnaHQgY2hpbGQgYXMgdGhlIHJpZ2h0IGNoaWxkIG9mIHRoZSBuZXcKICAgICAgLy8gcm9vdC4KICAgICAgX3Jvb3QucmlnaHQgPSByaWdodDsKICAgIH0KICAgIF9tb2RpZmljYXRpb25Db3VudCsrOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBBZGRzIGEgbmV3IHJvb3Qgbm9kZSB3aXRoIHRoZSBnaXZlbiBba2V5XSBvciBbdmFsdWVdLgogIC8vLwogIC8vLyBUaGUgW2NvbXBdIHZhbHVlIGlzIHRoZSByZXN1bHQgb2YgY29tcGFyaW5nIHRoZSBleGlzdGluZyByb290J3Mga2V5CiAgLy8vIHdpdGgga2V5LgogIHZvaWQgX2FkZE5ld1Jvb3QoTm9kZSBub2RlLCBpbnQgY29tcCkgewogICAgX2NvdW50Kys7CiAgICBfbW9kaWZpY2F0aW9uQ291bnQrKzsKICAgIGlmIChfcm9vdCA9PSBudWxsKSB7CiAgICAgIF9yb290ID0gbm9kZTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gYXNzZXJ0KF9jb3VudCA+PSAwKTsKICAgIGlmIChjb21wIDwgMCkgewogICAgICBub2RlLmxlZnQgPSBfcm9vdDsKICAgICAgbm9kZS5yaWdodCA9IF9yb290LnJpZ2h0OwogICAgICBfcm9vdC5yaWdodCA9IG51bGw7CiAgICB9IGVsc2UgewogICAgICBub2RlLnJpZ2h0ID0gX3Jvb3Q7CiAgICAgIG5vZGUubGVmdCA9IF9yb290LmxlZnQ7CiAgICAgIF9yb290LmxlZnQgPSBudWxsOwogICAgfQogICAgX3Jvb3QgPSBub2RlOwogIH0KCiAgTm9kZSBnZXQgX2ZpcnN0IHsKICAgIGlmIChfcm9vdCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIF9yb290ID0gX3NwbGF5TWluKF9yb290KTsKICAgIHJldHVybiBfcm9vdDsKICB9CgogIE5vZGUgZ2V0IF9sYXN0IHsKICAgIGlmIChfcm9vdCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIF9yb290ID0gX3NwbGF5TWF4KF9yb290KTsKICAgIHJldHVybiBfcm9vdDsKICB9CgogIHZvaWQgX2NsZWFyKCkgewogICAgX3Jvb3QgPSBudWxsOwogICAgX2NvdW50ID0gMDsKICAgIF9tb2RpZmljYXRpb25Db3VudCsrOwogIH0KfQoKY2xhc3MgX1R5cGVUZXN0PFQ+IHsKICBib29sIHRlc3QodikgPT4gdiBpcyBUOwp9CgppbnQgX2R5bmFtaWNDb21wYXJlKGR5bmFtaWMgYSwgZHluYW1pYyBiKSA9PiBDb21wYXJhYmxlLmNvbXBhcmUoYSwgYik7CgpDb21wYXJhdG9yPEs+IF9kZWZhdWx0Q29tcGFyZTxLPigpIHsKICAvLyBJZiBLIDw6IENvbXBhcmFibGUsIHRoZW4gd2UgY2FuIGp1c3QgdXNlIENvbXBhcmFibGUuY29tcGFyZQogIC8vIHdpdGggbm8gY2FzdHMuCiAgT2JqZWN0IGNvbXBhcmUgPSBDb21wYXJhYmxlLmNvbXBhcmU7CiAgaWYgKGNvbXBhcmUgaXMgQ29tcGFyYXRvcjxLPikgewogICAgcmV0dXJuIGNvbXBhcmU7CiAgfQogIC8vIE90aGVyd2lzZSB3cmFwIGFuZCBjYXN0IHRoZSBhcmd1bWVudHMgb24gZWFjaCBjYWxsLgogIHJldHVybiBfZHluYW1pY0NvbXBhcmU7Cn0KCi8vLyBBIFtNYXBdIG9mIG9iamVjdHMgdGhhdCBjYW4gYmUgb3JkZXJlZCByZWxhdGl2ZSB0byBlYWNoIG90aGVyLgovLy8KLy8vIFRoZSBtYXAgaXMgYmFzZWQgb24gYSBzZWxmLWJhbGFuY2luZyBiaW5hcnkgdHJlZS4gSXQgYWxsb3dzIG1vc3Qgb3BlcmF0aW9ucwovLy8gaW4gYW1vcnRpemVkIGxvZ2FyaXRobWljIHRpbWUuCi8vLwovLy8gS2V5cyBvZiB0aGUgbWFwIGFyZSBjb21wYXJlZCB1c2luZyB0aGUgYGNvbXBhcmVgIGZ1bmN0aW9uIHBhc3NlZCBpbgovLy8gdGhlIGNvbnN0cnVjdG9yLCBib3RoIGZvciBvcmRlcmluZyBhbmQgZm9yIGVxdWFsaXR5LgovLy8gSWYgdGhlIG1hcCBjb250YWlucyBvbmx5IHRoZSBrZXkgYGFgLCB0aGVuIGBtYXAuY29udGFpbnNLZXkoYilgCi8vLyB3aWxsIHJldHVybiBgdHJ1ZWAgaWYgYW5kIG9ubHkgaWYgYGNvbXBhcmUoYSwgYikgPT0gMGAsCi8vLyBhbmQgdGhlIHZhbHVlIG9mIGBhID09IGJgIGlzIG5vdCBldmVuIGNoZWNrZWQuCi8vLyBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBpcyBvbWl0dGVkLCB0aGUgb2JqZWN0cyBhcmUgYXNzdW1lZCB0byBiZQovLy8gW0NvbXBhcmFibGVdLCBhbmQgYXJlIGNvbXBhcmVkIHVzaW5nIHRoZWlyIFtDb21wYXJhYmxlLmNvbXBhcmVUb10gbWV0aG9kLgovLy8gTm9uLWNvbXBhcmFibGUgb2JqZWN0cyAoaW5jbHVkaW5nIGBudWxsYCkgd2lsbCBub3Qgd29yayBhcyBrZXlzCi8vLyBpbiB0aGF0IGNhc2UuCi8vLwovLy8gVG8gYWxsb3cgY2FsbGluZyBbb3BlcmF0b3IgW11dLCBbcmVtb3ZlXSBvciBbY29udGFpbnNLZXldIHdpdGggb2JqZWN0cwovLy8gdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgYGNvbXBhcmVgIGZ1bmN0aW9uLCBhbiBleHRyYSBgaXNWYWxpZEtleWAKLy8vIHByZWRpY2F0ZSBmdW5jdGlvbiBjYW4gYmUgc3VwcGxpZWQuIFRoaXMgZnVuY3Rpb24gaXMgdGVzdGVkIGJlZm9yZQovLy8gdXNpbmcgdGhlIGBjb21wYXJlYCBmdW5jdGlvbiBvbiBhbiBhcmd1bWVudCB2YWx1ZSB0aGF0IG1heSBub3QgYmUgYSBbS10KLy8vIHZhbHVlLiBJZiBvbWl0dGVkLCB0aGUgYGlzVmFsaWRLZXlgIGZ1bmN0aW9uIGRlZmF1bHRzIHRvIHRlc3RpbmcgaWYgdGhlCi8vLyB2YWx1ZSBpcyBhIFtLXS4KY2xhc3MgU3BsYXlUcmVlTWFwPEssIFY+IGV4dGVuZHMgX1NwbGF5VHJlZTxLLCBfU3BsYXlUcmVlTWFwTm9kZTxLLCBWPj4KICAgIHdpdGggTWFwTWl4aW48SywgVj4gewogIF9TcGxheVRyZWVNYXBOb2RlPEssIFY+IF9yb290OwogIGZpbmFsIF9TcGxheVRyZWVNYXBOb2RlPEssIFY+IF9kdW1teSA9IF9TcGxheVRyZWVNYXBOb2RlPEssIFY+KG51bGwsIG51bGwpOwoKICBDb21wYXJhdG9yPEs+IF9jb21wYXJhdG9yOwogIF9QcmVkaWNhdGUgX3ZhbGlkS2V5OwoKICBTcGxheVRyZWVNYXAoW2ludCBjb21wYXJlKEsga2V5MSwgSyBrZXkyKSwgYm9vbCBpc1ZhbGlkS2V5KHBvdGVudGlhbEtleSldKQogICAgICA6IF9jb21wYXJhdG9yID0gY29tcGFyZSA/PyBfZGVmYXVsdENvbXBhcmU8Sz4oKSwKICAgICAgICBfdmFsaWRLZXkgPSBpc1ZhbGlkS2V5ID8/ICgodikgPT4gdiBpcyBLKTsKCiAgLy8vIENyZWF0ZXMgYSBbU3BsYXlUcmVlTWFwXSB0aGF0IGNvbnRhaW5zIGFsbCBrZXkvdmFsdWUgcGFpcnMgb2YgW290aGVyXS4KICAvLy8KICAvLy8gVGhlIGtleXMgbXVzdCBhbGwgYmUgaW5zdGFuY2VzIG9mIFtLXSBhbmQgdGhlIHZhbHVlcyBvZiBbVl0uCiAgLy8vIFRoZSBbb3RoZXJdIG1hcCBpdHNlbGYgY2FuIGhhdmUgYW55IHR5cGUuCiAgZmFjdG9yeSBTcGxheVRyZWVNYXAuZnJvbShNYXAgb3RoZXIsCiAgICAgIFtpbnQgY29tcGFyZShLIGtleTEsIEsga2V5MiksIGJvb2wgaXNWYWxpZEtleShwb3RlbnRpYWxLZXkpXSkgewogICAgU3BsYXlUcmVlTWFwPEssIFY+IHJlc3VsdCA9IFNwbGF5VHJlZU1hcDxLLCBWPihjb21wYXJlLCBpc1ZhbGlkS2V5KTsKICAgIG90aGVyLmZvckVhY2goKGssIHYpIHsKICAgICAgcmVzdWx0W2tdID0gdjsKICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBDcmVhdGVzIGEgW1NwbGF5VHJlZU1hcF0gdGhhdCBjb250YWlucyBhbGwga2V5L3ZhbHVlIHBhaXJzIG9mIFtvdGhlcl0uCiAgZmFjdG9yeSBTcGxheVRyZWVNYXAub2YoTWFwPEssIFY+IG90aGVyLAogICAgICAgICAgW2ludCBjb21wYXJlKEsga2V5MSwgSyBrZXkyKSwgYm9vbCBpc1ZhbGlkS2V5KHBvdGVudGlhbEtleSldKSA9PgogICAgICBTcGxheVRyZWVNYXA8SywgVj4oY29tcGFyZSwgaXNWYWxpZEtleSkuLmFkZEFsbChvdGhlcik7CgogIC8vLyBDcmVhdGVzIGEgW1NwbGF5VHJlZU1hcF0gd2hlcmUgdGhlIGtleXMgYW5kIHZhbHVlcyBhcmUgY29tcHV0ZWQgZnJvbSB0aGUKICAvLy8gW2l0ZXJhYmxlXS4KICAvLy8KICAvLy8gRm9yIGVhY2ggZWxlbWVudCBvZiB0aGUgW2l0ZXJhYmxlXSB0aGlzIGNvbnN0cnVjdG9yIGNvbXB1dGVzIGEga2V5L3ZhbHVlCiAgLy8vIHBhaXIsIGJ5IGFwcGx5aW5nIFtrZXldIGFuZCBbdmFsdWVdIHJlc3BlY3RpdmVseS4KICAvLy8KICAvLy8gVGhlIGtleXMgb2YgdGhlIGtleS92YWx1ZSBwYWlycyBkbyBub3QgbmVlZCB0byBiZSB1bmlxdWUuIFRoZSBsYXN0CiAgLy8vIG9jY3VycmVuY2Ugb2YgYSBrZXkgd2lsbCBzaW1wbHkgb3ZlcndyaXRlIGFueSBwcmV2aW91cyB2YWx1ZS4KICAvLy8KICAvLy8gSWYgbm8gZnVuY3Rpb25zIGFyZSBzcGVjaWZpZWQgZm9yIFtrZXldIGFuZCBbdmFsdWVdIHRoZSBkZWZhdWx0IGlzIHRvCiAgLy8vIHVzZSB0aGUgaXRlcmFibGUgdmFsdWUgaXRzZWxmLgogIGZhY3RvcnkgU3BsYXlUcmVlTWFwLmZyb21JdGVyYWJsZShJdGVyYWJsZSBpdGVyYWJsZSwKICAgICAge0sga2V5KGVsZW1lbnQpLAogICAgICBWIHZhbHVlKGVsZW1lbnQpLAogICAgICBpbnQgY29tcGFyZShLIGtleTEsIEsga2V5MiksCiAgICAgIGJvb2wgaXNWYWxpZEtleShwb3RlbnRpYWxLZXkpfSkgewogICAgU3BsYXlUcmVlTWFwPEssIFY+IG1hcCA9IFNwbGF5VHJlZU1hcDxLLCBWPihjb21wYXJlLCBpc1ZhbGlkS2V5KTsKICAgIE1hcEJhc2UuX2ZpbGxNYXBXaXRoTWFwcGVkSXRlcmFibGUobWFwLCBpdGVyYWJsZSwga2V5LCB2YWx1ZSk7CiAgICByZXR1cm4gbWFwOwogIH0KCiAgLy8vIENyZWF0ZXMgYSBbU3BsYXlUcmVlTWFwXSBhc3NvY2lhdGluZyB0aGUgZ2l2ZW4gW2tleXNdIHRvIFt2YWx1ZXNdLgogIC8vLwogIC8vLyBUaGlzIGNvbnN0cnVjdG9yIGl0ZXJhdGVzIG92ZXIgW2tleXNdIGFuZCBbdmFsdWVzXSBhbmQgbWFwcyBlYWNoIGVsZW1lbnQKICAvLy8gb2YgW2tleXNdIHRvIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgW3ZhbHVlc10uCiAgLy8vCiAgLy8vIElmIFtrZXlzXSBjb250YWlucyB0aGUgc2FtZSBvYmplY3QgbXVsdGlwbGUgdGltZXMsIHRoZSBsYXN0IG9jY3VycmVuY2UKICAvLy8gb3ZlcndyaXRlcyB0aGUgcHJldmlvdXMgdmFsdWUuCiAgLy8vCiAgLy8vIEl0IGlzIGFuIGVycm9yIGlmIHRoZSB0d28gW0l0ZXJhYmxlXXMgZG9uJ3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGguCiAgZmFjdG9yeSBTcGxheVRyZWVNYXAuZnJvbUl0ZXJhYmxlcyhJdGVyYWJsZTxLPiBrZXlzLCBJdGVyYWJsZTxWPiB2YWx1ZXMsCiAgICAgIFtpbnQgY29tcGFyZShLIGtleTEsIEsga2V5MiksIGJvb2wgaXNWYWxpZEtleShwb3RlbnRpYWxLZXkpXSkgewogICAgU3BsYXlUcmVlTWFwPEssIFY+IG1hcCA9IFNwbGF5VHJlZU1hcDxLLCBWPihjb21wYXJlLCBpc1ZhbGlkS2V5KTsKICAgIE1hcEJhc2UuX2ZpbGxNYXBXaXRoSXRlcmFibGVzKG1hcCwga2V5cywgdmFsdWVzKTsKICAgIHJldHVybiBtYXA7CiAgfQoKICBpbnQgX2NvbXBhcmUoSyBrZXkxLCBLIGtleTIpID0+IF9jb21wYXJhdG9yKGtleTEsIGtleTIpOwoKICBTcGxheVRyZWVNYXAuX2ludGVybmFsKCk7CgogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgewogICAgaWYgKCFfdmFsaWRLZXkoa2V5KSkgcmV0dXJuIG51bGw7CiAgICBpZiAoX3Jvb3QgIT0gbnVsbCkgewogICAgICBpbnQgY29tcCA9IF9zcGxheShrZXkpOwogICAgICBpZiAoY29tcCA9PSAwKSB7CiAgICAgICAgcmV0dXJuIF9yb290LnZhbHVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIFYgcmVtb3ZlKE9iamVjdCBrZXkpIHsKICAgIGlmICghX3ZhbGlkS2V5KGtleSkpIHJldHVybiBudWxsOwogICAgX1NwbGF5VHJlZU1hcE5vZGU8SywgVj4gbWFwUm9vdCA9IF9yZW1vdmUoa2V5KTsKICAgIGlmIChtYXBSb290ICE9IG51bGwpIHJldHVybiBtYXBSb290LnZhbHVlOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShLIGtleSwgViB2YWx1ZSkgewogICAgaWYgKGtleSA9PSBudWxsKSB0aHJvdyBBcmd1bWVudEVycm9yKGtleSk7CiAgICAvLyBTcGxheSBvbiB0aGUga2V5IHRvIG1vdmUgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggZm9yCiAgICAvLyB0aGUga2V5IHRvIHRoZSByb290IG9mIHRoZSB0cmVlLgogICAgaW50IGNvbXAgPSBfc3BsYXkoa2V5KTsKICAgIGlmIChjb21wID09IDApIHsKICAgICAgX3Jvb3QudmFsdWUgPSB2YWx1ZTsKICAgICAgcmV0dXJuOwogICAgfQogICAgX2FkZE5ld1Jvb3QoX1NwbGF5VHJlZU1hcE5vZGUoa2V5LCB2YWx1ZSksIGNvbXApOwogIH0KCiAgViBwdXRJZkFic2VudChLIGtleSwgViBpZkFic2VudCgpKSB7CiAgICBpZiAoa2V5ID09IG51bGwpIHRocm93IEFyZ3VtZW50RXJyb3Ioa2V5KTsKICAgIGludCBjb21wID0gX3NwbGF5KGtleSk7CiAgICBpZiAoY29tcCA9PSAwKSB7CiAgICAgIHJldHVybiBfcm9vdC52YWx1ZTsKICAgIH0KICAgIGludCBtb2RpZmljYXRpb25Db3VudCA9IF9tb2RpZmljYXRpb25Db3VudDsKICAgIGludCBzcGxheUNvdW50ID0gX3NwbGF5Q291bnQ7CiAgICBWIHZhbHVlID0gaWZBYnNlbnQoKTsKICAgIGlmIChtb2RpZmljYXRpb25Db3VudCAhPSBfbW9kaWZpY2F0aW9uQ291bnQpIHsKICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgfQogICAgaWYgKHNwbGF5Q291bnQgIT0gX3NwbGF5Q291bnQpIHsKICAgICAgY29tcCA9IF9zcGxheShrZXkpOwogICAgICAvLyBLZXkgaXMgc3RpbGwgbm90IHRoZXJlLCBvdGhlcndpc2UgX21vZGlmaWNhdGlvbkNvdW50IHdvdWxkIGJlIGNoYW5nZWQuCiAgICAgIGFzc2VydChjb21wICE9IDApOwogICAgfQogICAgX2FkZE5ld1Jvb3QoX1NwbGF5VHJlZU1hcE5vZGUoa2V5LCB2YWx1ZSksIGNvbXApOwogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgdm9pZCBhZGRBbGwoTWFwPEssIFY+IG90aGVyKSB7CiAgICBvdGhlci5mb3JFYWNoKChLIGtleSwgViB2YWx1ZSkgewogICAgICB0aGlzW2tleV0gPSB2YWx1ZTsKICAgIH0pOwogIH0KCiAgYm9vbCBnZXQgaXNFbXB0eSB7CiAgICByZXR1cm4gKF9yb290ID09IG51bGwpOwogIH0KCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiAhaXNFbXB0eTsKCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihLIGtleSwgViB2YWx1ZSkpIHsKICAgIEl0ZXJhdG9yPF9TcGxheVRyZWVOb2RlPEs+PiBub2RlcyA9IF9TcGxheVRyZWVOb2RlSXRlcmF0b3I8Sz4odGhpcyk7CiAgICB3aGlsZSAobm9kZXMubW92ZU5leHQoKSkgewogICAgICBfU3BsYXlUcmVlTWFwTm9kZTxLLCBWPiBub2RlID0gbm9kZXMuY3VycmVudDsKICAgICAgZihub2RlLmtleSwgbm9kZS52YWx1ZSk7CiAgICB9CiAgfQoKICBpbnQgZ2V0IGxlbmd0aCB7CiAgICByZXR1cm4gX2NvdW50OwogIH0KCiAgdm9pZCBjbGVhcigpIHsKICAgIF9jbGVhcigpOwogIH0KCiAgYm9vbCBjb250YWluc0tleShPYmplY3Qga2V5KSB7CiAgICByZXR1cm4gX3ZhbGlkS2V5KGtleSkgJiYgX3NwbGF5KGtleSkgPT0gMDsKICB9CgogIGJvb2wgY29udGFpbnNWYWx1ZShPYmplY3QgdmFsdWUpIHsKICAgIGludCBpbml0aWFsU3BsYXlDb3VudCA9IF9zcGxheUNvdW50OwogICAgYm9vbCB2aXNpdChfU3BsYXlUcmVlTWFwTm9kZSBub2RlKSB7CiAgICAgIHdoaWxlIChub2RlICE9IG51bGwpIHsKICAgICAgICBpZiAobm9kZS52YWx1ZSA9PSB2YWx1ZSkgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKGluaXRpYWxTcGxheUNvdW50ICE9IF9zcGxheUNvdW50KSB7CiAgICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgICAgfQogICAgICAgIGlmIChub2RlLnJpZ2h0ICE9IG51bGwgJiYgdmlzaXQobm9kZS5yaWdodCkpIHJldHVybiB0cnVlOwogICAgICAgIG5vZGUgPSBub2RlLmxlZnQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHJldHVybiB2aXNpdChfcm9vdCk7CiAgfQoKICBJdGVyYWJsZTxLPiBnZXQga2V5cyA9PiBfU3BsYXlUcmVlS2V5SXRlcmFibGU8Sz4odGhpcyk7CgogIEl0ZXJhYmxlPFY+IGdldCB2YWx1ZXMgPT4gX1NwbGF5VHJlZVZhbHVlSXRlcmFibGU8SywgVj4odGhpcyk7CgogIC8vLyBHZXQgdGhlIGZpcnN0IGtleSBpbiB0aGUgbWFwLiBSZXR1cm5zIFs6bnVsbDpdIGlmIHRoZSBtYXAgaXMgZW1wdHkuCiAgSyBmaXJzdEtleSgpIHsKICAgIGlmIChfcm9vdCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfZmlyc3Qua2V5OwogIH0KCiAgLy8vIEdldCB0aGUgbGFzdCBrZXkgaW4gdGhlIG1hcC4gUmV0dXJucyBbOm51bGw6XSBpZiB0aGUgbWFwIGlzIGVtcHR5LgogIEsgbGFzdEtleSgpIHsKICAgIGlmIChfcm9vdCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfbGFzdC5rZXk7CiAgfQoKICAvLy8gR2V0IHRoZSBsYXN0IGtleSBpbiB0aGUgbWFwIHRoYXQgaXMgc3RyaWN0bHkgc21hbGxlciB0aGFuIFtrZXldLiBSZXR1cm5zCiAgLy8vIFs6bnVsbDpdIGlmIG5vIGtleSB3YXMgbm90IGZvdW5kLgogIEsgbGFzdEtleUJlZm9yZShLIGtleSkgewogICAgaWYgKGtleSA9PSBudWxsKSB0aHJvdyBBcmd1bWVudEVycm9yKGtleSk7CiAgICBpZiAoX3Jvb3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpbnQgY29tcCA9IF9zcGxheShrZXkpOwogICAgaWYgKGNvbXAgPCAwKSByZXR1cm4gX3Jvb3Qua2V5OwogICAgX1NwbGF5VHJlZU5vZGU8Sz4gbm9kZSA9IF9yb290LmxlZnQ7CiAgICBpZiAobm9kZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHdoaWxlIChub2RlLnJpZ2h0ICE9IG51bGwpIHsKICAgICAgbm9kZSA9IG5vZGUucmlnaHQ7CiAgICB9CiAgICByZXR1cm4gbm9kZS5rZXk7CiAgfQoKICAvLy8gR2V0IHRoZSBmaXJzdCBrZXkgaW4gdGhlIG1hcCB0aGF0IGlzIHN0cmljdGx5IGxhcmdlciB0aGFuIFtrZXldLiBSZXR1cm5zCiAgLy8vIFs6bnVsbDpdIGlmIG5vIGtleSB3YXMgbm90IGZvdW5kLgogIEsgZmlyc3RLZXlBZnRlcihLIGtleSkgewogICAgaWYgKGtleSA9PSBudWxsKSB0aHJvdyBBcmd1bWVudEVycm9yKGtleSk7CiAgICBpZiAoX3Jvb3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpbnQgY29tcCA9IF9zcGxheShrZXkpOwogICAgaWYgKGNvbXAgPiAwKSByZXR1cm4gX3Jvb3Qua2V5OwogICAgX1NwbGF5VHJlZU5vZGU8Sz4gbm9kZSA9IF9yb290LnJpZ2h0OwogICAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICB3aGlsZSAobm9kZS5sZWZ0ICE9IG51bGwpIHsKICAgICAgbm9kZSA9IG5vZGUubGVmdDsKICAgIH0KICAgIHJldHVybiBub2RlLmtleTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9TcGxheVRyZWVJdGVyYXRvcjxLLCBUPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPFQ+IHsKICBmaW5hbCBfU3BsYXlUcmVlPEssIF9TcGxheVRyZWVOb2RlPEs+PiBfdHJlZTsKCiAgLy8vIFdvcmtsaXN0IG9mIG5vZGVzIHRvIHZpc2l0LgogIC8vLwogIC8vLyBUaGVzZSBub2RlcyBoYXZlIGJlZW4gcGFzc2VkIG92ZXIgb24gdGhlIHdheSBkb3duIGluIGEKICAvLy8gZGVwdGgtZmlyc3QgbGVmdC10by1yaWdodCB0cmF2ZXJzYWwuIFZpc2l0aW5nIGVhY2ggbm9kZSwKICAvLy8gYW5kIHRoZWlyIHJpZ2h0IHN1YnRyZWVzIHdpbGwgdmlzaXQgdGhlIHJlbWFpbmRlciBvZgogIC8vLyB0aGUgbm9kZXMgb2YgYSBmdWxsIHRyYXZlcnNhbC4KICAvLy8KICAvLy8gT25seSB2YWxpZCBhcyBsb25nIGFzIHRoZSBvcmlnaW5hbCB0cmVlIGlzbid0IHJlb3JkZXJlZC4KICBmaW5hbCBMaXN0PF9TcGxheVRyZWVOb2RlPEs+PiBfd29ya0xpc3QgPSA8X1NwbGF5VHJlZU5vZGU8Sz4+W107CgogIC8vLyBPcmlnaW5hbCBtb2RpZmljYXRpb24gY291bnRlciBvZiBbX3RyZWVdLgogIC8vLwogIC8vLyBJbmNyZW1lbnRlZCBvbiBbX3RyZWVdIHdoZW4gYSBrZXkgaXMgYWRkZWQgb3IgcmVtb3ZlZC4KICAvLy8gSWYgaXQgY2hhbmdlcywgaXRlcmF0aW9uIGlzIGFib3J0ZWQuCiAgLy8vCiAgLy8vIE5vdCBmaW5hbCBiZWNhdXNlIHNvbWUgaXRlcmF0b3JzIG1heSBtb2RpZnkgdGhlIHRyZWUga25vd2luZ2x5LAogIC8vLyBhbmQgdGhleSB1cGRhdGUgdGhlIG1vZGlmaWNhdGlvbiBjb3VudCBpbiB0aGF0IGNhc2UuCiAgaW50IF9tb2RpZmljYXRpb25Db3VudDsKCiAgLy8vIENvdW50IG9mIHNwbGF5IG9wZXJhdGlvbnMgb24gW190cmVlXSB3aGVuIFtfd29ya0xpc3RdIHdhcyBidWlsdC4KICAvLy8KICAvLy8gSWYgdGhlIHNwbGF5IGNvdW50IG9uIFtfdHJlZV0gaW5jcmVhc2VzLCBbX3dvcmtMaXN0XSBiZWNvbWVzIGludmFsaWQuCiAgaW50IF9zcGxheUNvdW50OwoKICAvLy8gQ3VycmVudCBub2RlLgogIF9TcGxheVRyZWVOb2RlPEs+IF9jdXJyZW50Tm9kZTsKCiAgX1NwbGF5VHJlZUl0ZXJhdG9yKF9TcGxheVRyZWU8SywgX1NwbGF5VHJlZU5vZGU8Sz4+IHRyZWUpCiAgICAgIDogX3RyZWUgPSB0cmVlLAogICAgICAgIF9tb2RpZmljYXRpb25Db3VudCA9IHRyZWUuX21vZGlmaWNhdGlvbkNvdW50LAogICAgICAgIF9zcGxheUNvdW50ID0gdHJlZS5fc3BsYXlDb3VudCB7CiAgICBfZmluZExlZnRNb3N0RGVzY2VuZGVudCh0cmVlLl9yb290KTsKICB9CgogIF9TcGxheVRyZWVJdGVyYXRvci5zdGFydEF0KF9TcGxheVRyZWU8SywgX1NwbGF5VHJlZU5vZGU8Sz4+IHRyZWUsIEsgc3RhcnRLZXkpCiAgICAgIDogX3RyZWUgPSB0cmVlLAogICAgICAgIF9tb2RpZmljYXRpb25Db3VudCA9IHRyZWUuX21vZGlmaWNhdGlvbkNvdW50IHsKICAgIGlmICh0cmVlLl9yb290ID09IG51bGwpIHJldHVybjsKICAgIGludCBjb21wYXJlID0gdHJlZS5fc3BsYXkoc3RhcnRLZXkpOwogICAgX3NwbGF5Q291bnQgPSB0cmVlLl9zcGxheUNvdW50OwogICAgaWYgKGNvbXBhcmUgPCAwKSB7CiAgICAgIC8vIERvbid0IGluY2x1ZGUgdGhlIHJvb3QsIHN0YXJ0IGF0IHRoZSBuZXh0IGVsZW1lbnQgYWZ0ZXIgdGhlIHJvb3QuCiAgICAgIF9maW5kTGVmdE1vc3REZXNjZW5kZW50KHRyZWUuX3Jvb3QucmlnaHQpOwogICAgfSBlbHNlIHsKICAgICAgX3dvcmtMaXN0LmFkZCh0cmVlLl9yb290KTsKICAgIH0KICB9CgogIFQgZ2V0IGN1cnJlbnQgewogICAgaWYgKF9jdXJyZW50Tm9kZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfZ2V0VmFsdWUoX2N1cnJlbnROb2RlKTsKICB9CgogIHZvaWQgX2ZpbmRMZWZ0TW9zdERlc2NlbmRlbnQoX1NwbGF5VHJlZU5vZGU8Sz4gbm9kZSkgewogICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkgewogICAgICBfd29ya0xpc3QuYWRkKG5vZGUpOwogICAgICBub2RlID0gbm9kZS5sZWZ0OwogICAgfQogIH0KCiAgLy8vIENhbGxlZCB3aGVuIHRoZSB0cmVlIHN0cnVjdHVyZSBvZiB0aGUgdHJlZSBoYXMgY2hhbmdlZC4KICAvLy8KICAvLy8gVGhpcyBjYW4gYmUgY2F1c2VkIGJ5IGEgc3BsYXkgb3BlcmF0aW9uLgogIC8vLyBJZiB0aGUga2V5LXNldCBjaGFuZ2VzLCBpdGVyYXRpb24gaXMgYWJvcnRlZCBiZWZvcmUgZ2V0dGluZwogIC8vLyBoZXJlLCBzbyB3ZSBrbm93IHRoYXQgdGhlIGtleXMgYXJlIHRoZSBzYW1lIGFzIGJlZm9yZSwgaXQncwogIC8vLyBvbmx5IHRoZSB0cmVlIHRoYXQgaGFzIGJlZW4gcmVvcmRlcmVkLgogIHZvaWQgX3JlYnVpbGRXb3JrTGlzdChfU3BsYXlUcmVlTm9kZTxLPiBjdXJyZW50Tm9kZSkgewogICAgYXNzZXJ0KF93b3JrTGlzdC5pc05vdEVtcHR5KTsKICAgIF93b3JrTGlzdC5jbGVhcigpOwogICAgaWYgKGN1cnJlbnROb2RlID09IG51bGwpIHsKICAgICAgX2ZpbmRMZWZ0TW9zdERlc2NlbmRlbnQoX3RyZWUuX3Jvb3QpOwogICAgfSBlbHNlIHsKICAgICAgX3RyZWUuX3NwbGF5KGN1cnJlbnROb2RlLmtleSk7CiAgICAgIF9maW5kTGVmdE1vc3REZXNjZW5kZW50KF90cmVlLl9yb290LnJpZ2h0KTsKICAgICAgYXNzZXJ0KF93b3JrTGlzdC5pc05vdEVtcHR5KTsKICAgIH0KICB9CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoX21vZGlmaWNhdGlvbkNvdW50ICE9IF90cmVlLl9tb2RpZmljYXRpb25Db3VudCkgewogICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IoX3RyZWUpOwogICAgfQogICAgLy8gUGlja3MgdGhlIG5leHQgZWxlbWVudCBpbiB0aGUgd29ya2xpc3QgYXMgY3VycmVudC4KICAgIC8vIFVwZGF0ZXMgdGhlIHdvcmtsaXN0IHdpdGggdGhlIGxlZnQtbW9zdCBwYXRoIG9mIHRoZSBjdXJyZW50IG5vZGUncwogICAgLy8gcmlnaHQtaGFuZCBjaGlsZC4KICAgIC8vIElmIHRoZSB3b3JrbGlzdCBpcyBubyBsb25nZXIgdmFsaWQgKGFmdGVyIGEgc3BsYXkpLCBpdCBpcyByZWJ1aWxkCiAgICAvLyBmcm9tIHNjcmF0Y2guCiAgICBpZiAoX3dvcmtMaXN0LmlzRW1wdHkpIHsKICAgICAgX2N1cnJlbnROb2RlID0gbnVsbDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKF90cmVlLl9zcGxheUNvdW50ICE9IF9zcGxheUNvdW50ICYmIF9jdXJyZW50Tm9kZSAhPSBudWxsKSB7CiAgICAgIF9yZWJ1aWxkV29ya0xpc3QoX2N1cnJlbnROb2RlKTsKICAgIH0KICAgIF9jdXJyZW50Tm9kZSA9IF93b3JrTGlzdC5yZW1vdmVMYXN0KCk7CiAgICBfZmluZExlZnRNb3N0RGVzY2VuZGVudChfY3VycmVudE5vZGUucmlnaHQpOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBUIF9nZXRWYWx1ZShfU3BsYXlUcmVlTm9kZTxLPiBub2RlKTsKfQoKY2xhc3MgX1NwbGF5VHJlZUtleUl0ZXJhYmxlPEs+IGV4dGVuZHMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8Sz4gewogIF9TcGxheVRyZWU8SywgX1NwbGF5VHJlZU5vZGU8Sz4+IF90cmVlOwogIF9TcGxheVRyZWVLZXlJdGVyYWJsZSh0aGlzLl90cmVlKTsKICBpbnQgZ2V0IGxlbmd0aCA9PiBfdHJlZS5fY291bnQ7CiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfdHJlZS5fY291bnQgPT0gMDsKICBJdGVyYXRvcjxLPiBnZXQgaXRlcmF0b3IgPT4gX1NwbGF5VHJlZUtleUl0ZXJhdG9yPEs+KF90cmVlKTsKCiAgU2V0PEs+IHRvU2V0KCkgewogICAgU3BsYXlUcmVlU2V0PEs+IHNldCA9IFNwbGF5VHJlZVNldDxLPihfdHJlZS5fY29tcGFyYXRvciwgX3RyZWUuX3ZhbGlkS2V5KTsKICAgIHNldC5fY291bnQgPSBfdHJlZS5fY291bnQ7CiAgICBzZXQuX3Jvb3QgPSBzZXQuX2NvcHlOb2RlKF90cmVlLl9yb290KTsKICAgIHJldHVybiBzZXQ7CiAgfQp9CgpjbGFzcyBfU3BsYXlUcmVlVmFsdWVJdGVyYWJsZTxLLCBWPiBleHRlbmRzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPFY+IHsKICBTcGxheVRyZWVNYXA8SywgVj4gX21hcDsKICBfU3BsYXlUcmVlVmFsdWVJdGVyYWJsZSh0aGlzLl9tYXApOwogIGludCBnZXQgbGVuZ3RoID0+IF9tYXAuX2NvdW50OwogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX21hcC5fY291bnQgPT0gMDsKICBJdGVyYXRvcjxWPiBnZXQgaXRlcmF0b3IgPT4gX1NwbGF5VHJlZVZhbHVlSXRlcmF0b3I8SywgVj4oX21hcCk7Cn0KCmNsYXNzIF9TcGxheVRyZWVLZXlJdGVyYXRvcjxLPiBleHRlbmRzIF9TcGxheVRyZWVJdGVyYXRvcjxLLCBLPiB7CiAgX1NwbGF5VHJlZUtleUl0ZXJhdG9yKF9TcGxheVRyZWU8SywgX1NwbGF5VHJlZU5vZGU8Sz4+IG1hcCkgOiBzdXBlcihtYXApOwogIEsgX2dldFZhbHVlKF9TcGxheVRyZWVOb2RlPEs+IG5vZGUpID0+IG5vZGUua2V5Owp9CgpjbGFzcyBfU3BsYXlUcmVlVmFsdWVJdGVyYXRvcjxLLCBWPiBleHRlbmRzIF9TcGxheVRyZWVJdGVyYXRvcjxLLCBWPiB7CiAgX1NwbGF5VHJlZVZhbHVlSXRlcmF0b3IoU3BsYXlUcmVlTWFwPEssIFY+IG1hcCkgOiBzdXBlcihtYXApOwogIFYgX2dldFZhbHVlKF9TcGxheVRyZWVOb2RlPEs+IG5vZGUpIHsKICAgIF9TcGxheVRyZWVNYXBOb2RlPEssIFY+IG1hcE5vZGUgPSBub2RlOwogICAgcmV0dXJuIG1hcE5vZGUudmFsdWU7CiAgfQp9CgpjbGFzcyBfU3BsYXlUcmVlTm9kZUl0ZXJhdG9yPEs+CiAgICBleHRlbmRzIF9TcGxheVRyZWVJdGVyYXRvcjxLLCBfU3BsYXlUcmVlTm9kZTxLPj4gewogIF9TcGxheVRyZWVOb2RlSXRlcmF0b3IoX1NwbGF5VHJlZTxLLCBfU3BsYXlUcmVlTm9kZTxLPj4gdHJlZSkgOiBzdXBlcih0cmVlKTsKICBfU3BsYXlUcmVlTm9kZUl0ZXJhdG9yLnN0YXJ0QXQoCiAgICAgIF9TcGxheVRyZWU8SywgX1NwbGF5VHJlZU5vZGU8Sz4+IHRyZWUsIEsgc3RhcnRLZXkpCiAgICAgIDogc3VwZXIuc3RhcnRBdCh0cmVlLCBzdGFydEtleSk7CiAgX1NwbGF5VHJlZU5vZGU8Sz4gX2dldFZhbHVlKF9TcGxheVRyZWVOb2RlPEs+IG5vZGUpID0+IG5vZGU7Cn0KCi8vLyBBIFtTZXRdIG9mIG9iamVjdHMgdGhhdCBjYW4gYmUgb3JkZXJlZCByZWxhdGl2ZSB0byBlYWNoIG90aGVyLgovLy8KLy8vIFRoZSBzZXQgaXMgYmFzZWQgb24gYSBzZWxmLWJhbGFuY2luZyBiaW5hcnkgdHJlZS4gSXQgYWxsb3dzIG1vc3Qgb3BlcmF0aW9ucwovLy8gaW4gYW1vcnRpemVkIGxvZ2FyaXRobWljIHRpbWUuCi8vLwovLy8gRWxlbWVudHMgb2YgdGhlIHNldCBhcmUgY29tcGFyZWQgdXNpbmcgdGhlIGBjb21wYXJlYCBmdW5jdGlvbiBwYXNzZWQgaW4KLy8vIHRoZSBjb25zdHJ1Y3RvciwgYm90aCBmb3Igb3JkZXJpbmcgYW5kIGZvciBlcXVhbGl0eS4KLy8vIElmIHRoZSBzZXQgY29udGFpbnMgb25seSBhbiBvYmplY3QgYGFgLCB0aGVuIGBzZXQuY29udGFpbnMoYilgCi8vLyB3aWxsIHJldHVybiBgdHJ1ZWAgaWYgYW5kIG9ubHkgaWYgYGNvbXBhcmUoYSwgYikgPT0gMGAsCi8vLyBhbmQgdGhlIHZhbHVlIG9mIGBhID09IGJgIGlzIG5vdCBldmVuIGNoZWNrZWQuCi8vLyBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBpcyBvbWl0dGVkLCB0aGUgb2JqZWN0cyBhcmUgYXNzdW1lZCB0byBiZQovLy8gW0NvbXBhcmFibGVdLCBhbmQgYXJlIGNvbXBhcmVkIHVzaW5nIHRoZWlyIFtDb21wYXJhYmxlLmNvbXBhcmVUb10gbWV0aG9kLgovLy8gTm9uLWNvbXBhcmFibGUgb2JqZWN0cyAoaW5jbHVkaW5nIGBudWxsYCkgd2lsbCBub3Qgd29yayBhcyBhbiBlbGVtZW50Ci8vLyBpbiB0aGF0IGNhc2UuCmNsYXNzIFNwbGF5VHJlZVNldDxFPiBleHRlbmRzIF9TcGxheVRyZWU8RSwgX1NwbGF5VHJlZU5vZGU8RT4+CiAgICB3aXRoIEl0ZXJhYmxlTWl4aW48RT4sIFNldE1peGluPEU+IHsKICBfU3BsYXlUcmVlTm9kZTxFPiBfcm9vdDsKICBmaW5hbCBfU3BsYXlUcmVlTm9kZTxFPiBfZHVtbXkgPSBfU3BsYXlUcmVlTm9kZTxFPihudWxsKTsKCiAgQ29tcGFyYXRvcjxFPiBfY29tcGFyYXRvcjsKICBfUHJlZGljYXRlIF92YWxpZEtleTsKCiAgLy8vIENyZWF0ZSBhIG5ldyBbU3BsYXlUcmVlU2V0XSB3aXRoIHRoZSBnaXZlbiBjb21wYXJlIGZ1bmN0aW9uLgogIC8vLwogIC8vLyBJZiB0aGUgW2NvbXBhcmVdIGZ1bmN0aW9uIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIFtDb21wYXJhYmxlLmNvbXBhcmVdLAogIC8vLyBhbmQgdGhlIGVsZW1lbnRzIG11c3QgYmUgY29tcGFyYWJsZS4KICAvLy8KICAvLy8gQSBwcm92aWRlZCBgY29tcGFyZWAgZnVuY3Rpb24gbWF5IG5vdCB3b3JrIG9uIGFsbCBvYmplY3RzLiBJdCBtYXkgbm90IGV2ZW4KICAvLy8gd29yayBvbiBhbGwgYEVgIGluc3RhbmNlcy4KICAvLy8KICAvLy8gRm9yIG9wZXJhdGlvbnMgdGhhdCBhZGQgZWxlbWVudHMgdG8gdGhlIHNldCwgdGhlIHVzZXIgaXMgc3VwcG9zZWQgdG8gbm90CiAgLy8vIHBhc3MgaW4gb2JqZWN0cyB0aGF0IGRvZXNuJ3Qgd29yayB3aXRoIHRoZSBjb21wYXJlIGZ1bmN0aW9uLgogIC8vLwogIC8vLyBUaGUgbWV0aG9kcyBbY29udGFpbnNdLCBbcmVtb3ZlXSwgW2xvb2t1cF0sIFtyZW1vdmVBbGxdIG9yIFtyZXRhaW5BbGxdCiAgLy8vIGFyZSB0eXBlZCB0byBhY2NlcHQgYW55IG9iamVjdChzKSwgYW5kIHRoZSBbaXNWYWxpZEtleV0gdGVzdCBjYW4gdXNlZCB0bwogIC8vLyBmaWx0ZXIgdGhvc2Ugb2JqZWN0cyBiZWZvcmUgaGFuZGluZyB0aGVtIHRvIHRoZSBgY29tcGFyZWAgZnVuY3Rpb24uCiAgLy8vCiAgLy8vIElmIFtpc1ZhbGlkS2V5XSBpcyBwcm92aWRlZCwgb25seSB2YWx1ZXMgc2F0aXNmeWluZyBgaXNWYWxpZEtleShvdGhlcilgCiAgLy8vIGFyZSBjb21wYXJlZCB1c2luZyB0aGUgYGNvbXBhcmVgIG1ldGhvZCBpbiB0aGUgbWV0aG9kcyBtZW50aW9uZWQgYWJvdmUuCiAgLy8vIElmIHRoZSBgaXNWYWxpZEtleWAgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSBmb3IgYW4gb2JqZWN0LCBpdCBpcyBhc3N1bWVkIHRvCiAgLy8vIG5vdCBiZSBpbiB0aGUgc2V0LgogIC8vLwogIC8vLyBJZiBvbWl0dGVkLCB0aGUgYGlzVmFsaWRLZXlgIGZ1bmN0aW9uIGRlZmF1bHRzIHRvIGNoZWNraW5nIGFnYWluc3QgdGhlCiAgLy8vIHR5cGUgcGFyYW1ldGVyOiBgb3RoZXIgaXMgRWAuCiAgU3BsYXlUcmVlU2V0KFtpbnQgY29tcGFyZShFIGtleTEsIEUga2V5MiksIGJvb2wgaXNWYWxpZEtleShwb3RlbnRpYWxLZXkpXSkKICAgICAgOiBfY29tcGFyYXRvciA9IGNvbXBhcmUgPz8gX2RlZmF1bHRDb21wYXJlPEU+KCksCiAgICAgICAgX3ZhbGlkS2V5ID0gaXNWYWxpZEtleSA/PyAoKHYpID0+IHYgaXMgRSk7CgogIC8vLyBDcmVhdGVzIGEgW1NwbGF5VHJlZVNldF0gdGhhdCBjb250YWlucyBhbGwgW2VsZW1lbnRzXS4KICAvLy8KICAvLy8gVGhlIHNldCB3b3JrcyBhcyBpZiBjcmVhdGVkIGJ5IGBuZXcgU3BsYXlUcmVlU2V0PEU+KGNvbXBhcmUsIGlzVmFsaWRLZXkpYC4KICAvLy8KICAvLy8gQWxsIHRoZSBbZWxlbWVudHNdIHNob3VsZCBiZSBpbnN0YW5jZXMgb2YgW0VdIGFuZCB2YWxpZCBhcmd1bWVudHMgdG8KICAvLy8gW2NvbXBhcmVdLgogIC8vLyBUaGUgYGVsZW1lbnRzYCBpdGVyYWJsZSBpdHNlbGYgbWF5IGhhdmUgYW55IGVsZW1lbnQgdHlwZSwgc28gdGhpcwogIC8vLyBjb25zdHJ1Y3RvciBjYW4gYmUgdXNlZCB0byBkb3duLWNhc3QgYSBgU2V0YCwgZm9yIGV4YW1wbGUgYXM6CiAgLy8vIGBgYGRhcnQKICAvLy8gU2V0PFN1cGVyVHlwZT4gc3VwZXJTZXQgPSAuLi47CiAgLy8vIFNldDxTdWJUeXBlPiBzdWJTZXQgPQogIC8vLyAgICAgbmV3IFNwbGF5VHJlZVNldDxTdWJUeXBlPi5mcm9tKHN1cGVyU2V0LndoZXJlVHlwZTxTdWJUeXBlPigpKTsKICAvLy8gYGBgCiAgZmFjdG9yeSBTcGxheVRyZWVTZXQuZnJvbShJdGVyYWJsZSBlbGVtZW50cywKICAgICAgW2ludCBjb21wYXJlKEUga2V5MSwgRSBrZXkyKSwgYm9vbCBpc1ZhbGlkS2V5KHBvdGVudGlhbEtleSldKSB7CiAgICBTcGxheVRyZWVTZXQ8RT4gcmVzdWx0ID0gU3BsYXlUcmVlU2V0PEU+KGNvbXBhcmUsIGlzVmFsaWRLZXkpOwogICAgZm9yIChmaW5hbCBlbGVtZW50IGluIGVsZW1lbnRzKSB7CiAgICAgIEUgZSA9IGVsZW1lbnQ7CiAgICAgIHJlc3VsdC5hZGQoZSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIENyZWF0ZXMgYSBbU3BsYXlUcmVlU2V0XSBmcm9tIFtlbGVtZW50c10uCiAgLy8vCiAgLy8vIFRoZSBzZXQgd29ya3MgYXMgaWYgY3JlYXRlZCBieSBgbmV3IFNwbGF5VHJlZVNldDxFPihjb21wYXJlLCBpc1ZhbGlkS2V5KWAuCiAgLy8vCiAgLy8vIEFsbCB0aGUgW2VsZW1lbnRzXSBzaG91bGQgYmUgdmFsaWQgYXMgYXJndW1lbnRzIHRvIHRoZSBbY29tcGFyZV0gZnVuY3Rpb24uCiAgZmFjdG9yeSBTcGxheVRyZWVTZXQub2YoSXRlcmFibGU8RT4gZWxlbWVudHMsCiAgICAgICAgICBbaW50IGNvbXBhcmUoRSBrZXkxLCBFIGtleTIpLCBib29sIGlzVmFsaWRLZXkocG90ZW50aWFsS2V5KV0pID0+CiAgICAgIFNwbGF5VHJlZVNldChjb21wYXJlLCBpc1ZhbGlkS2V5KS4uYWRkQWxsKGVsZW1lbnRzKTsKCiAgU2V0PFQ+IF9uZXdTZXQ8VD4oKSA9PgogICAgICBTcGxheVRyZWVTZXQ8VD4oKFQgYSwgVCBiKSA9PiBfY29tcGFyYXRvcihhIGFzIEUsIGIgYXMgRSksIF92YWxpZEtleSk7CgogIFNldDxSPiBjYXN0PFI+KCkgPT4gU2V0LmNhc3RGcm9tPEUsIFI+KHRoaXMsIG5ld1NldDogX25ld1NldCk7CiAgaW50IF9jb21wYXJlKEUgZTEsIEUgZTIpID0+IF9jb21wYXJhdG9yKGUxLCBlMik7CgogIC8vIEZyb20gSXRlcmFibGUuCgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciA9PiBfU3BsYXlUcmVlS2V5SXRlcmF0b3I8RT4odGhpcyk7CgogIGludCBnZXQgbGVuZ3RoID0+IF9jb3VudDsKICBib29sIGdldCBpc0VtcHR5ID0+IF9yb290ID09IG51bGw7CiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfcm9vdCAhPSBudWxsOwoKICBFIGdldCBmaXJzdCB7CiAgICBpZiAoX2NvdW50ID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgcmV0dXJuIF9maXJzdC5rZXk7CiAgfQoKICBFIGdldCBsYXN0IHsKICAgIGlmIChfY291bnQgPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICByZXR1cm4gX2xhc3Qua2V5OwogIH0KCiAgRSBnZXQgc2luZ2xlIHsKICAgIGlmIChfY291bnQgPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICBpZiAoX2NvdW50ID4gMSkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vTWFueSgpOwogICAgcmV0dXJuIF9yb290LmtleTsKICB9CgogIC8vIEZyb20gU2V0LgogIGJvb2wgY29udGFpbnMoT2JqZWN0IGVsZW1lbnQpIHsKICAgIHJldHVybiBfdmFsaWRLZXkoZWxlbWVudCkgJiYgX3NwbGF5KGVsZW1lbnQpID09IDA7CiAgfQoKICBib29sIGFkZChFIGVsZW1lbnQpIHsKICAgIGludCBjb21wYXJlID0gX3NwbGF5KGVsZW1lbnQpOwogICAgaWYgKGNvbXBhcmUgPT0gMCkgcmV0dXJuIGZhbHNlOwogICAgX2FkZE5ld1Jvb3QoX1NwbGF5VHJlZU5vZGUoZWxlbWVudCksIGNvbXBhcmUpOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBib29sIHJlbW92ZShPYmplY3Qgb2JqZWN0KSB7CiAgICBpZiAoIV92YWxpZEtleShvYmplY3QpKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX3JlbW92ZShvYmplY3QpICE9IG51bGw7CiAgfQoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBlbGVtZW50cykgewogICAgZm9yIChFIGVsZW1lbnQgaW4gZWxlbWVudHMpIHsKICAgICAgaW50IGNvbXBhcmUgPSBfc3BsYXkoZWxlbWVudCk7CiAgICAgIGlmIChjb21wYXJlICE9IDApIHsKICAgICAgICBfYWRkTmV3Um9vdChfU3BsYXlUcmVlTm9kZShlbGVtZW50KSwgY29tcGFyZSk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgcmVtb3ZlQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpIHsKICAgIGZvciAoT2JqZWN0IGVsZW1lbnQgaW4gZWxlbWVudHMpIHsKICAgICAgaWYgKF92YWxpZEtleShlbGVtZW50KSkgX3JlbW92ZShlbGVtZW50KTsKICAgIH0KICB9CgogIHZvaWQgcmV0YWluQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpIHsKICAgIC8vIEJ1aWxkIGEgc2V0IHdpdGggdGhlIHNhbWUgc2Vuc2Ugb2YgZXF1YWxpdHkgYXMgdGhpcyBzZXQuCiAgICBTcGxheVRyZWVTZXQ8RT4gcmV0YWluU2V0ID0gU3BsYXlUcmVlU2V0PEU+KF9jb21wYXJhdG9yLCBfdmFsaWRLZXkpOwogICAgaW50IG1vZGlmaWNhdGlvbkNvdW50ID0gX21vZGlmaWNhdGlvbkNvdW50OwogICAgZm9yIChPYmplY3Qgb2JqZWN0IGluIGVsZW1lbnRzKSB7CiAgICAgIGlmIChtb2RpZmljYXRpb25Db3VudCAhPSBfbW9kaWZpY2F0aW9uQ291bnQpIHsKICAgICAgICAvLyBUaGUgaXRlcmF0b3Igc2hvdWxkIG5vdCBoYXZlIHNpZGUgZWZmZWN0cy4KICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgICAgLy8gRXF1aXZhbGVudCB0byB0aGlzLmNvbnRhaW5zKG9iamVjdCkuCiAgICAgIGlmIChfdmFsaWRLZXkob2JqZWN0KSAmJiBfc3BsYXkob2JqZWN0KSA9PSAwKSB7CiAgICAgICAgcmV0YWluU2V0LmFkZChfcm9vdC5rZXkpOwogICAgICB9CiAgICB9CiAgICAvLyBUYWtlIG92ZXIgdGhlIGVsZW1lbnRzIGZyb20gdGhlIHJldGFpbmVkIHNldCwgaWYgaXQgZGlmZmVycy4KICAgIGlmIChyZXRhaW5TZXQuX2NvdW50ICE9IF9jb3VudCkgewogICAgICBfcm9vdCA9IHJldGFpblNldC5fcm9vdDsKICAgICAgX2NvdW50ID0gcmV0YWluU2V0Ll9jb3VudDsKICAgICAgX21vZGlmaWNhdGlvbkNvdW50Kys7CiAgICB9CiAgfQoKICBFIGxvb2t1cChPYmplY3Qgb2JqZWN0KSB7CiAgICBpZiAoIV92YWxpZEtleShvYmplY3QpKSByZXR1cm4gbnVsbDsKICAgIGludCBjb21wID0gX3NwbGF5KG9iamVjdCk7CiAgICBpZiAoY29tcCAhPSAwKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfcm9vdC5rZXk7CiAgfQoKICBTZXQ8RT4gaW50ZXJzZWN0aW9uKFNldDxPYmplY3Q+IG90aGVyKSB7CiAgICBTZXQ8RT4gcmVzdWx0ID0gU3BsYXlUcmVlU2V0PEU+KF9jb21wYXJhdG9yLCBfdmFsaWRLZXkpOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAob3RoZXIuY29udGFpbnMoZWxlbWVudCkpIHJlc3VsdC5hZGQoZWxlbWVudCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgU2V0PEU+IGRpZmZlcmVuY2UoU2V0PE9iamVjdD4gb3RoZXIpIHsKICAgIFNldDxFPiByZXN1bHQgPSBTcGxheVRyZWVTZXQ8RT4oX2NvbXBhcmF0b3IsIF92YWxpZEtleSk7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICghb3RoZXIuY29udGFpbnMoZWxlbWVudCkpIHJlc3VsdC5hZGQoZWxlbWVudCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgU2V0PEU+IHVuaW9uKFNldDxFPiBvdGhlcikgewogICAgcmV0dXJuIF9jbG9uZSgpLi5hZGRBbGwob3RoZXIpOwogIH0KCiAgU3BsYXlUcmVlU2V0PEU+IF9jbG9uZSgpIHsKICAgIHZhciBzZXQgPSBTcGxheVRyZWVTZXQ8RT4oX2NvbXBhcmF0b3IsIF92YWxpZEtleSk7CiAgICBzZXQuX2NvdW50ID0gX2NvdW50OwogICAgc2V0Ll9yb290ID0gX2NvcHlOb2RlKF9yb290KTsKICAgIHJldHVybiBzZXQ7CiAgfQoKICAvLyBDb3BpZXMgdGhlIHN0cnVjdHVyZSBvZiBhIFNwbGF5VHJlZSBpbnRvIGEgbmV3IHNpbWlsYXIgc3RydWN0dXJlLgogIC8vIFdvcmtzIG9uIF9TcGxheVRyZWVNYXBOb2RlIGFzIHdlbGwsIGJ1dCBvbmx5IGNvcGllcyB0aGUga2V5cywKICBfU3BsYXlUcmVlTm9kZTxFPiBfY29weU5vZGUoX1NwbGF5VHJlZU5vZGU8RT4gbm9kZSkgewogICAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX1NwbGF5VHJlZU5vZGU8RT4obm9kZS5rZXkpCiAgICAgIC4ubGVmdCA9IF9jb3B5Tm9kZShub2RlLmxlZnQpCiAgICAgIC4ucmlnaHQgPSBfY29weU5vZGUobm9kZS5yaWdodCk7CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgX2NsZWFyKCk7CiAgfQoKICBTZXQ8RT4gdG9TZXQoKSA9PiBfY2xvbmUoKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gSXRlcmFibGVCYXNlLml0ZXJhYmxlVG9GdWxsU3RyaW5nKHRoaXMsICd7JywgJ30nKTsKfQqDQQBOTjwBGQEwAUIkGg8aGwEcAgEmBDI6CzUCATkEQx9AKj9GNRIcAUk+EwErEgFABi8eAT8GOzwXATchAUUcAScgAUlGR0VCBkkoFiIBM0ZIQhgZGg4TKRYpMBgbMCQfGSsKFx4ZIB0qMRgaJCQeGSwKFh4YIQ8PCAYRHyAhIRUBGRgTEQQBShlKKSYBShlNSikmARgkHCAZDhweGw0gSCVHDxsGGhMEATwGShAqDhoZFA4GHBQZIBoNGh4ZBhIEARQkHhIEARMkHhIEARISEBoEAgEVGgIBRwElQRQnIhQEORoCAUMEUCMESDlEPDNGTkQSBEtMR0xMFEgaIU4BHRgBTTczAU0GQzAnRkkbFQgTBAFNK0s+AU8SBk84BklEBkwlNxcYIyhGQxAEAUkGTzoGTSUGSEtGRjYQBAE7ARwBHiYZHhccCAYRBAEZJjQvEQQBJi9FKBwVGw4GNgQBJy8cFRoGMCIaMy8GJRpQGQY2EgQBISUZCAQBFRwEASMBKUkfNB8GBAETEwQBEQ4EASEvBAElKSkdLjAzCkIaCBQGARkEAToBQQFKESQXBAFJECQWBAFPKBsvJBwkKSMhGQYVBAFPKBsvJBwkKiMgGAYVBAIBQTABIgY9PzslBj9DATAGPSsGRjsaAUcGTBMBFCIBPBY2KSkEAVAWNyQpJBdLMQ0hBgQBEiskBAE5GxsYBgQBPgYvQkItOSIXHywNJTIkBgQBFDowBjpKGUkVHRsUBkQmBisxEQQBJwIBRColIik/ARNPHywQBAIBSRsmIShDAgFCTDMCAUdAKCwaBAIBIDdPIjknPwIBQwRQIwRMOUM8M0ZOShI/KRs8AR0YAUMGUSsGUSEGT0MGTU9KBk5OURkGTSRNNzMBPQZRBksRSEQOJRxJCi9GQyYVFQYTBAEwBlEGUTBLOwEZTQFBMwEUAT4BHCUoARA9FwQBDz0WBAERPToWBAEPIjcEARgjJDMRBAEfKiQEASYiJRo3CAYEAS4nMAYEAS5ASTAmNTYxCC42IggGRCYfIRwGBAEcKR8gFgQBKz0eOAYTBAEpPR45BhMEAR8kBAEdNxkiEAQBR0M4IyckJwQBEQ4EAR4BSgIBH2RhcnQ6Y29sbGVjdGlvbi9zcGxheV90cmVlLmRhcnQ1b3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9jb2xsZWN0aW9uX3BhdGNoLmRhcnTAAGYULy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBOb3RlOiB0aGUgVk0gY29uY2F0ZW5hdGVzIGFsbCBwYXRjaCBmaWxlcyBpbnRvIGEgc2luZ2xlIHBhdGNoIGZpbGUuIFRoaXMKLy8vIGZpbGUgaXMgdGhlIGZpcnN0IHBhdGNoIGluICJkYXJ0OmNvbGxlY3Rpb24iIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgaW1wb3J0cwovLy8gdXNlZCBieSBwYXRjaGVzIG9mIHRoYXQgbGlicmFyeS4gV2UgcGxhbiB0byBjaGFuZ2UgdGhpcyB3aGVuIHdlIGhhdmUgYQovLy8gc2hhcmVkIGZyb250IGVuZCBhbmQgc2ltcGx5IHVzZSBwYXJ0cy4KCmltcG9ydCAiZGFydDpfaW50ZXJuYWwiIGFzIGludGVybmFsOwoKaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIgc2hvdyBwYXRjaCwgSXRlcmFibGVFbGVtZW50RXJyb3I7CgppbXBvcnQgImRhcnQ6dHlwZWRfZGF0YSIgc2hvdyBVaW50MzJMaXN0OwoKLy8vIFRoZXNlIGFyZSB0aGUgYWRkaXRpb25hbCBwYXJ0cyBvZiB0aGlzIHBhdGNoIGxpYnJhcnk6Ci8vIHBhcnQgImNvbXBhY3RfaGFzaC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBIYXNoTWFwPEssIFY+IHsKICBAcGF0Y2gKICBmYWN0b3J5IEhhc2hNYXAoCiAgICAgIHtib29sIGVxdWFscyhLIGtleTEsIEsga2V5MiksCiAgICAgIGludCBoYXNoQ29kZShLIGtleSksCiAgICAgIGJvb2wgaXNWYWxpZEtleShwb3RlbnRpYWxLZXkpfSkgewogICAgaWYgKGlzVmFsaWRLZXkgPT0gbnVsbCkgewogICAgICBpZiAoaGFzaENvZGUgPT0gbnVsbCkgewogICAgICAgIGlmIChlcXVhbHMgPT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIG5ldyBfSGFzaE1hcDxLLCBWPigpOwogICAgICAgIH0KICAgICAgICBoYXNoQ29kZSA9IF9kZWZhdWx0SGFzaENvZGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGlkZW50aWNhbChpZGVudGl0eUhhc2hDb2RlLCBoYXNoQ29kZSkgJiYKICAgICAgICAgICAgaWRlbnRpY2FsKGlkZW50aWNhbCwgZXF1YWxzKSkgewogICAgICAgICAgcmV0dXJuIG5ldyBfSWRlbnRpdHlIYXNoTWFwPEssIFY+KCk7CiAgICAgICAgfQogICAgICAgIGVxdWFscyA/Pz0gX2RlZmF1bHRFcXVhbHM7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGhhc2hDb2RlID8/PSBfZGVmYXVsdEhhc2hDb2RlOwogICAgICBlcXVhbHMgPz89IF9kZWZhdWx0RXF1YWxzOwogICAgfQogICAgcmV0dXJuIG5ldyBfQ3VzdG9tSGFzaE1hcDxLLCBWPihlcXVhbHMsIGhhc2hDb2RlLCBpc1ZhbGlkS2V5KTsKICB9CgogIEBwYXRjaAogIGZhY3RvcnkgSGFzaE1hcC5pZGVudGl0eSgpID0+IG5ldyBfSWRlbnRpdHlIYXNoTWFwPEssIFY+KCk7CgogIFNldDxLPiBfbmV3S2V5U2V0KCk7Cn0KCmNvbnN0IGludCBfTU9ESUZJQ0FUSU9OX0NPVU5UX01BU0sgPSAweDNmZmZmZmZmOwoKY2xhc3MgX0hhc2hNYXA8SywgVj4gZXh0ZW5kcyBNYXBCYXNlPEssIFY+IGltcGxlbWVudHMgSGFzaE1hcDxLLCBWPiB7CiAgc3RhdGljIGNvbnN0IGludCBfSU5JVElBTF9DQVBBQ0lUWSA9IDg7CgogIGludCBfZWxlbWVudENvdW50ID0gMDsKICBMaXN0PF9IYXNoTWFwRW50cnk8SywgVj4+IF9idWNrZXRzID0KICAgICAgbmV3IExpc3Q8X0hhc2hNYXBFbnRyeTxLLCBWPj4oX0lOSVRJQUxfQ0FQQUNJVFkpOwogIGludCBfbW9kaWZpY2F0aW9uQ291bnQgPSAwOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfZWxlbWVudENvdW50OwogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2VsZW1lbnRDb3VudCA9PSAwOwogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX2VsZW1lbnRDb3VudCAhPSAwOwoKICBJdGVyYWJsZTxLPiBnZXQga2V5cyA9PiBuZXcgX0hhc2hNYXBLZXlJdGVyYWJsZTxLLCBWPih0aGlzKTsKICBJdGVyYWJsZTxWPiBnZXQgdmFsdWVzID0+IG5ldyBfSGFzaE1hcFZhbHVlSXRlcmFibGU8SywgVj4odGhpcyk7CgogIGJvb2wgY29udGFpbnNLZXkoT2JqZWN0IGtleSkgewogICAgZmluYWwgaGFzaENvZGUgPSBrZXkuaGFzaENvZGU7CiAgICBmaW5hbCBidWNrZXRzID0gX2J1Y2tldHM7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKGJ1Y2tldHMubGVuZ3RoIC0gMSk7CiAgICB2YXIgZW50cnkgPSBidWNrZXRzW2luZGV4XTsKICAgIHdoaWxlIChlbnRyeSAhPSBudWxsKSB7CiAgICAgIGlmIChoYXNoQ29kZSA9PSBlbnRyeS5oYXNoQ29kZSAmJiBlbnRyeS5rZXkgPT0ga2V5KSByZXR1cm4gdHJ1ZTsKICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgYm9vbCBjb250YWluc1ZhbHVlKE9iamVjdCB2YWx1ZSkgewogICAgZmluYWwgYnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgbGVuZ3RoID0gYnVja2V0cy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBlbnRyeSA9IGJ1Y2tldHNbaV07CiAgICAgIHdoaWxlIChlbnRyeSAhPSBudWxsKSB7CiAgICAgICAgaWYgKGVudHJ5LnZhbHVlID09IHZhbHVlKSByZXR1cm4gdHJ1ZTsKICAgICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgewogICAgZmluYWwgaGFzaENvZGUgPSBrZXkuaGFzaENvZGU7CiAgICBmaW5hbCBidWNrZXRzID0gX2J1Y2tldHM7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKGJ1Y2tldHMubGVuZ3RoIC0gMSk7CiAgICB2YXIgZW50cnkgPSBidWNrZXRzW2luZGV4XTsKICAgIHdoaWxlIChlbnRyeSAhPSBudWxsKSB7CiAgICAgIGlmIChoYXNoQ29kZSA9PSBlbnRyeS5oYXNoQ29kZSAmJiBlbnRyeS5rZXkgPT0ga2V5KSB7CiAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlOwogICAgICB9CiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oSyBrZXksIFYgdmFsdWUpIHsKICAgIGZpbmFsIGhhc2hDb2RlID0ga2V5Lmhhc2hDb2RlOwogICAgZmluYWwgYnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgbGVuZ3RoID0gYnVja2V0cy5sZW5ndGg7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKGxlbmd0aCAtIDEpOwogICAgdmFyIGVudHJ5ID0gYnVja2V0c1tpbmRleF07CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBpZiAoaGFzaENvZGUgPT0gZW50cnkuaGFzaENvZGUgJiYgZW50cnkua2V5ID09IGtleSkgewogICAgICAgIGVudHJ5LnZhbHVlID0gdmFsdWU7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDsKICAgIH0KICAgIF9hZGRFbnRyeShidWNrZXRzLCBpbmRleCwgbGVuZ3RoLCBrZXksIHZhbHVlLCBoYXNoQ29kZSk7CiAgfQoKICBWIHB1dElmQWJzZW50KEsga2V5LCBWIGlmQWJzZW50KCkpIHsKICAgIGZpbmFsIGhhc2hDb2RlID0ga2V5Lmhhc2hDb2RlOwogICAgZmluYWwgYnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgbGVuZ3RoID0gYnVja2V0cy5sZW5ndGg7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKGxlbmd0aCAtIDEpOwogICAgdmFyIGVudHJ5ID0gYnVja2V0c1tpbmRleF07CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBpZiAoaGFzaENvZGUgPT0gZW50cnkuaGFzaENvZGUgJiYgZW50cnkua2V5ID09IGtleSkgewogICAgICAgIHJldHVybiBlbnRyeS52YWx1ZTsKICAgICAgfQogICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7CiAgICB9CiAgICBmaW5hbCBzdGFtcCA9IF9tb2RpZmljYXRpb25Db3VudDsKICAgIGZpbmFsIFYgdmFsdWUgPSBpZkFic2VudCgpOwogICAgaWYgKHN0YW1wID09IF9tb2RpZmljYXRpb25Db3VudCkgewogICAgICBfYWRkRW50cnkoYnVja2V0cywgaW5kZXgsIGxlbmd0aCwga2V5LCB2YWx1ZSwgaGFzaENvZGUpOwogICAgfSBlbHNlIHsKICAgICAgdGhpc1trZXldID0gdmFsdWU7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICB2b2lkIGFkZEFsbChNYXA8SywgVj4gb3RoZXIpIHsKICAgIG90aGVyLmZvckVhY2goKEsga2V5LCBWIHZhbHVlKSB7CiAgICAgIHRoaXNba2V5XSA9IHZhbHVlOwogICAgfSk7CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBhY3Rpb24oSyBrZXksIFYgdmFsdWUpKSB7CiAgICBmaW5hbCBzdGFtcCA9IF9tb2RpZmljYXRpb25Db3VudDsKICAgIGZpbmFsIGJ1Y2tldHMgPSBfYnVja2V0czsKICAgIGZpbmFsIGxlbmd0aCA9IGJ1Y2tldHMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICB2YXIgZW50cnkgPSBidWNrZXRzW2ldOwogICAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICAgIGFjdGlvbihlbnRyeS5rZXksIGVudHJ5LnZhbHVlKTsKICAgICAgICBpZiAoc3RhbXAgIT0gX21vZGlmaWNhdGlvbkNvdW50KSB7CiAgICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICAgIH0KICAgICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7CiAgICAgIH0KICAgIH0KICB9CgogIFYgcmVtb3ZlKE9iamVjdCBrZXkpIHsKICAgIGZpbmFsIGhhc2hDb2RlID0ga2V5Lmhhc2hDb2RlOwogICAgZmluYWwgYnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgaW5kZXggPSBoYXNoQ29kZSAmIChidWNrZXRzLmxlbmd0aCAtIDEpOwogICAgdmFyIGVudHJ5ID0gYnVja2V0c1tpbmRleF07CiAgICBfSGFzaE1hcEVudHJ5PEssIFY+IHByZXZpb3VzID0gbnVsbDsKICAgIHdoaWxlIChlbnRyeSAhPSBudWxsKSB7CiAgICAgIGZpbmFsIG5leHQgPSBlbnRyeS5uZXh0OwogICAgICBpZiAoaGFzaENvZGUgPT0gZW50cnkuaGFzaENvZGUgJiYgZW50cnkua2V5ID09IGtleSkgewogICAgICAgIF9yZW1vdmVFbnRyeShlbnRyeSwgcHJldmlvdXMsIGluZGV4KTsKICAgICAgICBfZWxlbWVudENvdW50LS07CiAgICAgICAgX21vZGlmaWNhdGlvbkNvdW50ID0KICAgICAgICAgICAgKF9tb2RpZmljYXRpb25Db3VudCArIDEpICYgX01PRElGSUNBVElPTl9DT1VOVF9NQVNLOwogICAgICAgIHJldHVybiBlbnRyeS52YWx1ZTsKICAgICAgfQogICAgICBwcmV2aW91cyA9IGVudHJ5OwogICAgICBlbnRyeSA9IG5leHQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgY2xlYXIoKSB7CiAgICBfYnVja2V0cyA9IG5ldyBMaXN0KF9JTklUSUFMX0NBUEFDSVRZKTsKICAgIGlmIChfZWxlbWVudENvdW50ID4gMCkgewogICAgICBfZWxlbWVudENvdW50ID0gMDsKICAgICAgX21vZGlmaWNhdGlvbkNvdW50ID0gKF9tb2RpZmljYXRpb25Db3VudCArIDEpICYgX01PRElGSUNBVElPTl9DT1VOVF9NQVNLOwogICAgfQogIH0KCiAgdm9pZCBfcmVtb3ZlRW50cnkoX0hhc2hNYXBFbnRyeTxLLCBWPiBlbnRyeSwKICAgICAgX0hhc2hNYXBFbnRyeTxLLCBWPiBwcmV2aW91c0luQnVja2V0LCBpbnQgYnVja2V0SW5kZXgpIHsKICAgIGlmIChwcmV2aW91c0luQnVja2V0ID09IG51bGwpIHsKICAgICAgX2J1Y2tldHNbYnVja2V0SW5kZXhdID0gZW50cnkubmV4dDsKICAgIH0gZWxzZSB7CiAgICAgIHByZXZpb3VzSW5CdWNrZXQubmV4dCA9IGVudHJ5Lm5leHQ7CiAgICB9CiAgfQoKICB2b2lkIF9hZGRFbnRyeShMaXN0PF9IYXNoTWFwRW50cnk8SywgVj4+IGJ1Y2tldHMsIGludCBpbmRleCwgaW50IGxlbmd0aCwKICAgICAgSyBrZXksIFYgdmFsdWUsIGludCBoYXNoQ29kZSkgewogICAgZmluYWwgZW50cnkgPSBuZXcgX0hhc2hNYXBFbnRyeTxLLCBWPihrZXksIHZhbHVlLCBoYXNoQ29kZSwgYnVja2V0c1tpbmRleF0pOwogICAgYnVja2V0c1tpbmRleF0gPSBlbnRyeTsKICAgIGZpbmFsIG5ld0VsZW1lbnRzID0gX2VsZW1lbnRDb3VudCArIDE7CiAgICBfZWxlbWVudENvdW50ID0gbmV3RWxlbWVudHM7CiAgICAvLyBJZiB3ZSBlbmQgdXAgd2l0aCBtb3JlIHRoYW4gNzUlIG5vbi1lbXB0eSBlbnRyaWVzLCB3ZQogICAgLy8gcmVzaXplIHRoZSBiYWNraW5nIHN0b3JlLgogICAgaWYgKChuZXdFbGVtZW50cyA8PCAyKSA+ICgobGVuZ3RoIDw8IDEpICsgbGVuZ3RoKSkgX3Jlc2l6ZSgpOwogICAgX21vZGlmaWNhdGlvbkNvdW50ID0gKF9tb2RpZmljYXRpb25Db3VudCArIDEpICYgX01PRElGSUNBVElPTl9DT1VOVF9NQVNLOwogIH0KCiAgdm9pZCBfcmVzaXplKCkgewogICAgZmluYWwgb2xkQnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgb2xkTGVuZ3RoID0gb2xkQnVja2V0cy5sZW5ndGg7CiAgICBmaW5hbCBuZXdMZW5ndGggPSBvbGRMZW5ndGggPDwgMTsKICAgIGZpbmFsIG5ld0J1Y2tldHMgPSBuZXcgTGlzdDxfSGFzaE1hcEVudHJ5PEssIFY+PihuZXdMZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvbGRMZW5ndGg7IGkrKykgewogICAgICB2YXIgZW50cnkgPSBvbGRCdWNrZXRzW2ldOwogICAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICAgIGZpbmFsIG5leHQgPSBlbnRyeS5uZXh0OwogICAgICAgIGZpbmFsIGhhc2hDb2RlID0gZW50cnkuaGFzaENvZGU7CiAgICAgICAgZmluYWwgaW5kZXggPSBoYXNoQ29kZSAmIChuZXdMZW5ndGggLSAxKTsKICAgICAgICBlbnRyeS5uZXh0ID0gbmV3QnVja2V0c1tpbmRleF07CiAgICAgICAgbmV3QnVja2V0c1tpbmRleF0gPSBlbnRyeTsKICAgICAgICBlbnRyeSA9IG5leHQ7CiAgICAgIH0KICAgIH0KICAgIF9idWNrZXRzID0gbmV3QnVja2V0czsKICB9CgogIFNldDxLPiBfbmV3S2V5U2V0KCkgPT4gbmV3IF9IYXNoU2V0PEs+KCk7Cn0KCmNsYXNzIF9DdXN0b21IYXNoTWFwPEssIFY+IGV4dGVuZHMgX0hhc2hNYXA8SywgVj4gewogIGZpbmFsIF9FcXVhbGl0eTxLPiBfZXF1YWxzOwogIGZpbmFsIF9IYXNoZXI8Sz4gX2hhc2hDb2RlOwogIGZpbmFsIF9QcmVkaWNhdGUgX3ZhbGlkS2V5OwogIF9DdXN0b21IYXNoTWFwKHRoaXMuX2VxdWFscywgdGhpcy5faGFzaENvZGUsIHZhbGlkS2V5KQogICAgICA6IF92YWxpZEtleSA9ICh2YWxpZEtleSAhPSBudWxsKSA/IHZhbGlkS2V5IDogbmV3IF9UeXBlVGVzdDxLPigpLnRlc3Q7CgogIGJvb2wgY29udGFpbnNLZXkoT2JqZWN0IGtleSkgewogICAgaWYgKCFfdmFsaWRLZXkoa2V5KSkgcmV0dXJuIGZhbHNlOwogICAgZmluYWwgaGFzaENvZGUgPSBfaGFzaENvZGUoa2V5KTsKICAgIGZpbmFsIGJ1Y2tldHMgPSBfYnVja2V0czsKICAgIGZpbmFsIGluZGV4ID0gaGFzaENvZGUgJiAoYnVja2V0cy5sZW5ndGggLSAxKTsKICAgIHZhciBlbnRyeSA9IGJ1Y2tldHNbaW5kZXhdOwogICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgaWYgKGhhc2hDb2RlID09IGVudHJ5Lmhhc2hDb2RlICYmIF9lcXVhbHMoZW50cnkua2V5LCBrZXkpKSByZXR1cm4gdHJ1ZTsKICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgViBvcGVyYXRvciBbXShPYmplY3Qga2V5KSB7CiAgICBpZiAoIV92YWxpZEtleShrZXkpKSByZXR1cm4gbnVsbDsKICAgIGZpbmFsIGhhc2hDb2RlID0gX2hhc2hDb2RlKGtleSk7CiAgICBmaW5hbCBidWNrZXRzID0gX2J1Y2tldHM7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKGJ1Y2tldHMubGVuZ3RoIC0gMSk7CiAgICB2YXIgZW50cnkgPSBidWNrZXRzW2luZGV4XTsKICAgIHdoaWxlIChlbnRyeSAhPSBudWxsKSB7CiAgICAgIGlmIChoYXNoQ29kZSA9PSBlbnRyeS5oYXNoQ29kZSAmJiBfZXF1YWxzKGVudHJ5LmtleSwga2V5KSkgewogICAgICAgIHJldHVybiBlbnRyeS52YWx1ZTsKICAgICAgfQogICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KEsga2V5LCBWIHZhbHVlKSB7CiAgICBmaW5hbCBoYXNoQ29kZSA9IF9oYXNoQ29kZShrZXkpOwogICAgZmluYWwgYnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgbGVuZ3RoID0gYnVja2V0cy5sZW5ndGg7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKGxlbmd0aCAtIDEpOwogICAgdmFyIGVudHJ5ID0gYnVja2V0c1tpbmRleF07CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBpZiAoaGFzaENvZGUgPT0gZW50cnkuaGFzaENvZGUgJiYgX2VxdWFscyhlbnRyeS5rZXksIGtleSkpIHsKICAgICAgICBlbnRyeS52YWx1ZSA9IHZhbHVlOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7CiAgICB9CiAgICBfYWRkRW50cnkoYnVja2V0cywgaW5kZXgsIGxlbmd0aCwga2V5LCB2YWx1ZSwgaGFzaENvZGUpOwogIH0KCiAgViBwdXRJZkFic2VudChLIGtleSwgViBpZkFic2VudCgpKSB7CiAgICBmaW5hbCBoYXNoQ29kZSA9IF9oYXNoQ29kZShrZXkpOwogICAgZmluYWwgYnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgbGVuZ3RoID0gYnVja2V0cy5sZW5ndGg7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKGxlbmd0aCAtIDEpOwogICAgdmFyIGVudHJ5ID0gYnVja2V0c1tpbmRleF07CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBpZiAoaGFzaENvZGUgPT0gZW50cnkuaGFzaENvZGUgJiYgX2VxdWFscyhlbnRyeS5rZXksIGtleSkpIHsKICAgICAgICByZXR1cm4gZW50cnkudmFsdWU7CiAgICAgIH0KICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgfQogICAgaW50IHN0YW1wID0gX21vZGlmaWNhdGlvbkNvdW50OwogICAgViB2YWx1ZSA9IGlmQWJzZW50KCk7CiAgICBpZiAoc3RhbXAgPT0gX21vZGlmaWNhdGlvbkNvdW50KSB7CiAgICAgIF9hZGRFbnRyeShidWNrZXRzLCBpbmRleCwgbGVuZ3RoLCBrZXksIHZhbHVlLCBoYXNoQ29kZSk7CiAgICB9IGVsc2UgewogICAgICB0aGlzW2tleV0gPSB2YWx1ZTsKICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CgogIFYgcmVtb3ZlKE9iamVjdCBrZXkpIHsKICAgIGlmICghX3ZhbGlkS2V5KGtleSkpIHJldHVybiBudWxsOwogICAgZmluYWwgaGFzaENvZGUgPSBfaGFzaENvZGUoa2V5KTsKICAgIGZpbmFsIGJ1Y2tldHMgPSBfYnVja2V0czsKICAgIGZpbmFsIGluZGV4ID0gaGFzaENvZGUgJiAoYnVja2V0cy5sZW5ndGggLSAxKTsKICAgIHZhciBlbnRyeSA9IGJ1Y2tldHNbaW5kZXhdOwogICAgX0hhc2hNYXBFbnRyeTxLLCBWPiBwcmV2aW91cyA9IG51bGw7CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBmaW5hbCBuZXh0ID0gZW50cnkubmV4dDsKICAgICAgaWYgKGhhc2hDb2RlID09IGVudHJ5Lmhhc2hDb2RlICYmIF9lcXVhbHMoZW50cnkua2V5LCBrZXkpKSB7CiAgICAgICAgX3JlbW92ZUVudHJ5KGVudHJ5LCBwcmV2aW91cywgaW5kZXgpOwogICAgICAgIF9lbGVtZW50Q291bnQtLTsKICAgICAgICBfbW9kaWZpY2F0aW9uQ291bnQgPQogICAgICAgICAgICAoX21vZGlmaWNhdGlvbkNvdW50ICsgMSkgJiBfTU9ESUZJQ0FUSU9OX0NPVU5UX01BU0s7CiAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlOwogICAgICB9CiAgICAgIHByZXZpb3VzID0gZW50cnk7CiAgICAgIGVudHJ5ID0gbmV4dDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgU2V0PEs+IF9uZXdLZXlTZXQoKSA9PiBuZXcgX0N1c3RvbUhhc2hTZXQ8Sz4oX2VxdWFscywgX2hhc2hDb2RlLCBfdmFsaWRLZXkpOwp9CgpjbGFzcyBfSWRlbnRpdHlIYXNoTWFwPEssIFY+IGV4dGVuZHMgX0hhc2hNYXA8SywgVj4gewogIGJvb2wgY29udGFpbnNLZXkoT2JqZWN0IGtleSkgewogICAgZmluYWwgaGFzaENvZGUgPSBpZGVudGl0eUhhc2hDb2RlKGtleSk7CiAgICBmaW5hbCBidWNrZXRzID0gX2J1Y2tldHM7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKGJ1Y2tldHMubGVuZ3RoIC0gMSk7CiAgICB2YXIgZW50cnkgPSBidWNrZXRzW2luZGV4XTsKICAgIHdoaWxlIChlbnRyeSAhPSBudWxsKSB7CiAgICAgIGlmIChoYXNoQ29kZSA9PSBlbnRyeS5oYXNoQ29kZSAmJiBpZGVudGljYWwoZW50cnkua2V5LCBrZXkpKSByZXR1cm4gdHJ1ZTsKICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgViBvcGVyYXRvciBbXShPYmplY3Qga2V5KSB7CiAgICBmaW5hbCBoYXNoQ29kZSA9IGlkZW50aXR5SGFzaENvZGUoa2V5KTsKICAgIGZpbmFsIGJ1Y2tldHMgPSBfYnVja2V0czsKICAgIGZpbmFsIGluZGV4ID0gaGFzaENvZGUgJiAoYnVja2V0cy5sZW5ndGggLSAxKTsKICAgIHZhciBlbnRyeSA9IGJ1Y2tldHNbaW5kZXhdOwogICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgaWYgKGhhc2hDb2RlID09IGVudHJ5Lmhhc2hDb2RlICYmIGlkZW50aWNhbChlbnRyeS5rZXksIGtleSkpIHsKICAgICAgICByZXR1cm4gZW50cnkudmFsdWU7CiAgICAgIH0KICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShLIGtleSwgViB2YWx1ZSkgewogICAgZmluYWwgaGFzaENvZGUgPSBpZGVudGl0eUhhc2hDb2RlKGtleSk7CiAgICBmaW5hbCBidWNrZXRzID0gX2J1Y2tldHM7CiAgICBmaW5hbCBsZW5ndGggPSBidWNrZXRzLmxlbmd0aDsKICAgIGZpbmFsIGluZGV4ID0gaGFzaENvZGUgJiAobGVuZ3RoIC0gMSk7CiAgICB2YXIgZW50cnkgPSBidWNrZXRzW2luZGV4XTsKICAgIHdoaWxlIChlbnRyeSAhPSBudWxsKSB7CiAgICAgIGlmIChoYXNoQ29kZSA9PSBlbnRyeS5oYXNoQ29kZSAmJiBpZGVudGljYWwoZW50cnkua2V5LCBrZXkpKSB7CiAgICAgICAgZW50cnkudmFsdWUgPSB2YWx1ZTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgfQogICAgX2FkZEVudHJ5KGJ1Y2tldHMsIGluZGV4LCBsZW5ndGgsIGtleSwgdmFsdWUsIGhhc2hDb2RlKTsKICB9CgogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSkgewogICAgZmluYWwgaGFzaENvZGUgPSBpZGVudGl0eUhhc2hDb2RlKGtleSk7CiAgICBmaW5hbCBidWNrZXRzID0gX2J1Y2tldHM7CiAgICBmaW5hbCBsZW5ndGggPSBidWNrZXRzLmxlbmd0aDsKICAgIGZpbmFsIGluZGV4ID0gaGFzaENvZGUgJiAobGVuZ3RoIC0gMSk7CiAgICB2YXIgZW50cnkgPSBidWNrZXRzW2luZGV4XTsKICAgIHdoaWxlIChlbnRyeSAhPSBudWxsKSB7CiAgICAgIGlmIChoYXNoQ29kZSA9PSBlbnRyeS5oYXNoQ29kZSAmJiBpZGVudGljYWwoZW50cnkua2V5LCBrZXkpKSB7CiAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlOwogICAgICB9CiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDsKICAgIH0KICAgIGZpbmFsIHN0YW1wID0gX21vZGlmaWNhdGlvbkNvdW50OwogICAgViB2YWx1ZSA9IGlmQWJzZW50KCk7CiAgICBpZiAoc3RhbXAgPT0gX21vZGlmaWNhdGlvbkNvdW50KSB7CiAgICAgIF9hZGRFbnRyeShidWNrZXRzLCBpbmRleCwgbGVuZ3RoLCBrZXksIHZhbHVlLCBoYXNoQ29kZSk7CiAgICB9IGVsc2UgewogICAgICB0aGlzW2tleV0gPSB2YWx1ZTsKICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CgogIFYgcmVtb3ZlKE9iamVjdCBrZXkpIHsKICAgIGZpbmFsIGhhc2hDb2RlID0gaWRlbnRpdHlIYXNoQ29kZShrZXkpOwogICAgZmluYWwgYnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgaW5kZXggPSBoYXNoQ29kZSAmIChidWNrZXRzLmxlbmd0aCAtIDEpOwogICAgdmFyIGVudHJ5ID0gYnVja2V0c1tpbmRleF07CiAgICBfSGFzaE1hcEVudHJ5PEssIFY+IHByZXZpb3VzID0gbnVsbDsKICAgIHdoaWxlIChlbnRyeSAhPSBudWxsKSB7CiAgICAgIGZpbmFsIG5leHQgPSBlbnRyeS5uZXh0OwogICAgICBpZiAoaGFzaENvZGUgPT0gZW50cnkuaGFzaENvZGUgJiYgaWRlbnRpY2FsKGVudHJ5LmtleSwga2V5KSkgewogICAgICAgIF9yZW1vdmVFbnRyeShlbnRyeSwgcHJldmlvdXMsIGluZGV4KTsKICAgICAgICBfZWxlbWVudENvdW50LS07CiAgICAgICAgX21vZGlmaWNhdGlvbkNvdW50ID0KICAgICAgICAgICAgKF9tb2RpZmljYXRpb25Db3VudCArIDEpICYgX01PRElGSUNBVElPTl9DT1VOVF9NQVNLOwogICAgICAgIHJldHVybiBlbnRyeS52YWx1ZTsKICAgICAgfQogICAgICBwcmV2aW91cyA9IGVudHJ5OwogICAgICBlbnRyeSA9IG5leHQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIFNldDxLPiBfbmV3S2V5U2V0KCkgPT4gbmV3IF9JZGVudGl0eUhhc2hTZXQ8Sz4oKTsKfQoKY2xhc3MgX0hhc2hNYXBFbnRyeTxLLCBWPiB7CiAgZmluYWwgSyBrZXk7CiAgViB2YWx1ZTsKICBmaW5hbCBpbnQgaGFzaENvZGU7CiAgX0hhc2hNYXBFbnRyeTxLLCBWPiBuZXh0OwogIF9IYXNoTWFwRW50cnkodGhpcy5rZXksIHRoaXMudmFsdWUsIHRoaXMuaGFzaENvZGUsIHRoaXMubmV4dCk7Cn0KCmFic3RyYWN0IGNsYXNzIF9IYXNoTWFwSXRlcmFibGU8SywgViwgRT4KICAgIGV4dGVuZHMgaW50ZXJuYWwuRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4gewogIGZpbmFsIF9IYXNoTWFwPEssIFY+IF9tYXA7CiAgX0hhc2hNYXBJdGVyYWJsZSh0aGlzLl9tYXApOwogIGludCBnZXQgbGVuZ3RoID0+IF9tYXAubGVuZ3RoOwogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX21hcC5pc0VtcHR5OwogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX21hcC5pc05vdEVtcHR5Owp9CgpjbGFzcyBfSGFzaE1hcEtleUl0ZXJhYmxlPEssIFY+IGV4dGVuZHMgX0hhc2hNYXBJdGVyYWJsZTxLLCBWLCBLPiB7CiAgX0hhc2hNYXBLZXlJdGVyYWJsZShfSGFzaE1hcDxLLCBWPiBtYXApIDogc3VwZXIobWFwKTsKICBJdGVyYXRvcjxLPiBnZXQgaXRlcmF0b3IgPT4gbmV3IF9IYXNoTWFwS2V5SXRlcmF0b3I8SywgVj4oX21hcCk7CiAgYm9vbCBjb250YWlucyhPYmplY3Qga2V5KSA9PiBfbWFwLmNvbnRhaW5zS2V5KGtleSk7CiAgdm9pZCBmb3JFYWNoKHZvaWQgYWN0aW9uKEsga2V5KSkgewogICAgX21hcC5mb3JFYWNoKChLIGtleSwgXykgewogICAgICBhY3Rpb24oa2V5KTsKICAgIH0pOwogIH0KCiAgU2V0PEs+IHRvU2V0KCkgPT4gX21hcC5fbmV3S2V5U2V0KCkuLmFkZEFsbCh0aGlzKTsKfQoKY2xhc3MgX0hhc2hNYXBWYWx1ZUl0ZXJhYmxlPEssIFY+IGV4dGVuZHMgX0hhc2hNYXBJdGVyYWJsZTxLLCBWLCBWPiB7CiAgX0hhc2hNYXBWYWx1ZUl0ZXJhYmxlKF9IYXNoTWFwPEssIFY+IG1hcCkgOiBzdXBlcihtYXApOwogIEl0ZXJhdG9yPFY+IGdldCBpdGVyYXRvciA9PiBuZXcgX0hhc2hNYXBWYWx1ZUl0ZXJhdG9yPEssIFY+KF9tYXApOwogIGJvb2wgY29udGFpbnMoT2JqZWN0IHZhbHVlKSA9PiBfbWFwLmNvbnRhaW5zVmFsdWUodmFsdWUpOwogIHZvaWQgZm9yRWFjaCh2b2lkIGFjdGlvbihWIHZhbHVlKSkgewogICAgX21hcC5mb3JFYWNoKChfLCBWIHZhbHVlKSB7CiAgICAgIGFjdGlvbih2YWx1ZSk7CiAgICB9KTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9IYXNoTWFwSXRlcmF0b3I8SywgViwgRT4gaW1wbGVtZW50cyBJdGVyYXRvcjxFPiB7CiAgZmluYWwgX0hhc2hNYXA8SywgVj4gX21hcDsKICBmaW5hbCBpbnQgX3N0YW1wOwoKICBpbnQgX2luZGV4ID0gMDsKICBfSGFzaE1hcEVudHJ5PEssIFY+IF9lbnRyeTsKCiAgX0hhc2hNYXBJdGVyYXRvcih0aGlzLl9tYXApIDogX3N0YW1wID0gX21hcC5fbW9kaWZpY2F0aW9uQ291bnQ7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoX3N0YW1wICE9IF9tYXAuX21vZGlmaWNhdGlvbkNvdW50KSB7CiAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IoX21hcCk7CiAgICB9CiAgICB2YXIgZW50cnkgPSBfZW50cnk7CiAgICBpZiAoZW50cnkgIT0gbnVsbCkgewogICAgICBmaW5hbCBuZXh0ID0gZW50cnkubmV4dDsKICAgICAgaWYgKG5leHQgIT0gbnVsbCkgewogICAgICAgIF9lbnRyeSA9IG5leHQ7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgX2VudHJ5ID0gbnVsbDsKICAgIH0KICAgIGZpbmFsIGJ1Y2tldHMgPSBfbWFwLl9idWNrZXRzOwogICAgZmluYWwgbGVuZ3RoID0gYnVja2V0cy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gX2luZGV4OyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgZW50cnkgPSBidWNrZXRzW2ldOwogICAgICBpZiAoZW50cnkgIT0gbnVsbCkgewogICAgICAgIF9pbmRleCA9IGkgKyAxOwogICAgICAgIF9lbnRyeSA9IGVudHJ5OwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICBfaW5kZXggPSBsZW5ndGg7CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CgpjbGFzcyBfSGFzaE1hcEtleUl0ZXJhdG9yPEssIFY+IGV4dGVuZHMgX0hhc2hNYXBJdGVyYXRvcjxLLCBWLCBLPiB7CiAgX0hhc2hNYXBLZXlJdGVyYXRvcihfSGFzaE1hcDxLLCBWPiBtYXApIDogc3VwZXIobWFwKTsKICBLIGdldCBjdXJyZW50ID0+IF9lbnRyeT8ua2V5Owp9CgpjbGFzcyBfSGFzaE1hcFZhbHVlSXRlcmF0b3I8SywgVj4gZXh0ZW5kcyBfSGFzaE1hcEl0ZXJhdG9yPEssIFYsIFY+IHsKICBfSGFzaE1hcFZhbHVlSXRlcmF0b3IoX0hhc2hNYXA8SywgVj4gbWFwKSA6IHN1cGVyKG1hcCk7CiAgViBnZXQgY3VycmVudCA9PiBfZW50cnk/LnZhbHVlOwp9CgpAcGF0Y2gKY2xhc3MgSGFzaFNldDxFPiB7CiAgQHBhdGNoCiAgZmFjdG9yeSBIYXNoU2V0KAogICAgICB7Ym9vbCBlcXVhbHMoRSBlMSwgRSBlMiksCiAgICAgIGludCBoYXNoQ29kZShFIGUpLAogICAgICBib29sIGlzVmFsaWRLZXkocG90ZW50aWFsS2V5KX0pIHsKICAgIGlmIChpc1ZhbGlkS2V5ID09IG51bGwpIHsKICAgICAgaWYgKGhhc2hDb2RlID09IG51bGwpIHsKICAgICAgICBpZiAoZXF1YWxzID09IG51bGwpIHsKICAgICAgICAgIHJldHVybiBuZXcgX0hhc2hTZXQ8RT4oKTsKICAgICAgICB9CiAgICAgICAgaGFzaENvZGUgPSBfZGVmYXVsdEhhc2hDb2RlOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChpZGVudGljYWwoaWRlbnRpdHlIYXNoQ29kZSwgaGFzaENvZGUpICYmCiAgICAgICAgICAgIGlkZW50aWNhbChpZGVudGljYWwsIGVxdWFscykpIHsKICAgICAgICAgIHJldHVybiBuZXcgX0lkZW50aXR5SGFzaFNldDxFPigpOwogICAgICAgIH0KICAgICAgICBlcXVhbHMgPz89IF9kZWZhdWx0RXF1YWxzOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBoYXNoQ29kZSA/Pz0gX2RlZmF1bHRIYXNoQ29kZTsKICAgICAgZXF1YWxzID8/PSBfZGVmYXVsdEVxdWFsczsKICAgIH0KICAgIHJldHVybiBuZXcgX0N1c3RvbUhhc2hTZXQ8RT4oZXF1YWxzLCBoYXNoQ29kZSwgaXNWYWxpZEtleSk7CiAgfQoKICBAcGF0Y2gKICBmYWN0b3J5IEhhc2hTZXQuaWRlbnRpdHkoKSA9PiBuZXcgX0lkZW50aXR5SGFzaFNldDxFPigpOwp9CgpjbGFzcyBfSGFzaFNldDxFPiBleHRlbmRzIF9TZXRCYXNlPEU+IGltcGxlbWVudHMgSGFzaFNldDxFPiB7CiAgc3RhdGljIGNvbnN0IGludCBfSU5JVElBTF9DQVBBQ0lUWSA9IDg7CgogIExpc3Q8X0hhc2hTZXRFbnRyeTxFPj4gX2J1Y2tldHMgPQogICAgICBuZXcgTGlzdDxfSGFzaFNldEVudHJ5PEU+PihfSU5JVElBTF9DQVBBQ0lUWSk7CiAgaW50IF9lbGVtZW50Q291bnQgPSAwOwogIGludCBfbW9kaWZpY2F0aW9uQ291bnQgPSAwOwoKICBib29sIF9lcXVhbHMoZTEsIGUyKSA9PiBlMSA9PSBlMjsKICBpbnQgX2hhc2hDb2RlKGUpID0+IGUuaGFzaENvZGU7CgogIHN0YXRpYyBTZXQ8Uj4gX25ld0VtcHR5PFI+KCkgPT4gbmV3IF9IYXNoU2V0PFI+KCk7CgogIC8vIEl0ZXJhYmxlLgoKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgPT4gbmV3IF9IYXNoU2V0SXRlcmF0b3I8RT4odGhpcyk7CgogIGludCBnZXQgbGVuZ3RoID0+IF9lbGVtZW50Q291bnQ7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2VsZW1lbnRDb3VudCA9PSAwOwoKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9lbGVtZW50Q291bnQgIT0gMDsKCiAgYm9vbCBjb250YWlucyhPYmplY3Qgb2JqZWN0KSB7CiAgICBpbnQgaW5kZXggPSBfaGFzaENvZGUob2JqZWN0KSAmIChfYnVja2V0cy5sZW5ndGggLSAxKTsKICAgIF9IYXNoU2V0RW50cnk8RT4gZW50cnkgPSBfYnVja2V0c1tpbmRleF07CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBpZiAoX2VxdWFscyhlbnRyeS5rZXksIG9iamVjdCkpIHJldHVybiB0cnVlOwogICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBFIGxvb2t1cChPYmplY3Qgb2JqZWN0KSB7CiAgICBpbnQgaW5kZXggPSBfaGFzaENvZGUob2JqZWN0KSAmIChfYnVja2V0cy5sZW5ndGggLSAxKTsKICAgIF9IYXNoU2V0RW50cnk8RT4gZW50cnkgPSBfYnVja2V0c1tpbmRleF07CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICB2YXIga2V5ID0gZW50cnkua2V5OwogICAgICBpZiAoX2VxdWFscyhrZXksIG9iamVjdCkpIHJldHVybiBrZXk7CiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgRSBnZXQgZmlyc3QgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfYnVja2V0cy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgZW50cnkgPSBfYnVja2V0c1tpXTsKICAgICAgaWYgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgICByZXR1cm4gZW50cnkua2V5OwogICAgICB9CiAgICB9CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgZ2V0IGxhc3QgewogICAgZm9yIChpbnQgaSA9IF9idWNrZXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIHZhciBlbnRyeSA9IF9idWNrZXRzW2ldOwogICAgICBpZiAoZW50cnkgIT0gbnVsbCkgewogICAgICAgIHdoaWxlIChlbnRyeS5uZXh0ICE9IG51bGwpIHsKICAgICAgICAgIGVudHJ5ID0gZW50cnkubmV4dDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGVudHJ5LmtleTsKICAgICAgfQogICAgfQogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICAvLyBTZXQuCgogIGJvb2wgYWRkKEUgZWxlbWVudCkgewogICAgZmluYWwgaGFzaENvZGUgPSBfaGFzaENvZGUoZWxlbWVudCk7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKF9idWNrZXRzLmxlbmd0aCAtIDEpOwogICAgX0hhc2hTZXRFbnRyeTxFPiBlbnRyeSA9IF9idWNrZXRzW2luZGV4XTsKICAgIHdoaWxlIChlbnRyeSAhPSBudWxsKSB7CiAgICAgIGlmIChfZXF1YWxzKGVudHJ5LmtleSwgZWxlbWVudCkpIHJldHVybiBmYWxzZTsKICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgfQogICAgX2FkZEVudHJ5KGVsZW1lbnQsIGhhc2hDb2RlLCBpbmRleCk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IG9iamVjdHMpIHsKICAgIGZvciAoRSBvYmplY3QgaW4gb2JqZWN0cykgewogICAgICBhZGQob2JqZWN0KTsKICAgIH0KICB9CgogIGJvb2wgX3JlbW92ZShPYmplY3Qgb2JqZWN0LCBpbnQgaGFzaENvZGUpIHsKICAgIGZpbmFsIGluZGV4ID0gaGFzaENvZGUgJiAoX2J1Y2tldHMubGVuZ3RoIC0gMSk7CiAgICBfSGFzaFNldEVudHJ5PEU+IGVudHJ5ID0gX2J1Y2tldHNbaW5kZXhdOwogICAgX0hhc2hTZXRFbnRyeTxFPiBwcmV2aW91cyA9IG51bGw7CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBpZiAoX2VxdWFscyhlbnRyeS5rZXksIG9iamVjdCkpIHsKICAgICAgICBfSGFzaFNldEVudHJ5PEU+IG5leHQgPSBlbnRyeS5yZW1vdmUoKTsKICAgICAgICBpZiAocHJldmlvdXMgPT0gbnVsbCkgewogICAgICAgICAgX2J1Y2tldHNbaW5kZXhdID0gbmV4dDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcHJldmlvdXMubmV4dCA9IG5leHQ7CiAgICAgICAgfQogICAgICAgIF9lbGVtZW50Q291bnQtLTsKICAgICAgICBfbW9kaWZpY2F0aW9uQ291bnQgPQogICAgICAgICAgICAoX21vZGlmaWNhdGlvbkNvdW50ICsgMSkgJiBfTU9ESUZJQ0FUSU9OX0NPVU5UX01BU0s7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgcHJldmlvdXMgPSBlbnRyeTsKICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgYm9vbCByZW1vdmUoT2JqZWN0IG9iamVjdCkgPT4gX3JlbW92ZShvYmplY3QsIF9oYXNoQ29kZShvYmplY3QpKTsKCiAgdm9pZCByZW1vdmVBbGwoSXRlcmFibGU8T2JqZWN0PiBvYmplY3RzVG9SZW1vdmUpIHsKICAgIGZvciAoT2JqZWN0IG9iamVjdCBpbiBvYmplY3RzVG9SZW1vdmUpIHsKICAgICAgX3JlbW92ZShvYmplY3QsIF9oYXNoQ29kZShvYmplY3QpKTsKICAgIH0KICB9CgogIHZvaWQgX2ZpbHRlcldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCBib29sIHJlbW92ZU1hdGNoaW5nKSB7CiAgICBpbnQgbGVuZ3RoID0gX2J1Y2tldHMubGVuZ3RoOwogICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgewogICAgICBfSGFzaFNldEVudHJ5PEU+IGVudHJ5ID0gX2J1Y2tldHNbaW5kZXhdOwogICAgICBfSGFzaFNldEVudHJ5PEU+IHByZXZpb3VzID0gbnVsbDsKICAgICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgICBpbnQgbW9kaWZpY2F0aW9uQ291bnQgPSBfbW9kaWZpY2F0aW9uQ291bnQ7CiAgICAgICAgYm9vbCB0ZXN0UmVzdWx0ID0gdGVzdChlbnRyeS5rZXkpOwogICAgICAgIGlmIChtb2RpZmljYXRpb25Db3VudCAhPSBfbW9kaWZpY2F0aW9uQ291bnQpIHsKICAgICAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgICAgfQogICAgICAgIGlmICh0ZXN0UmVzdWx0ID09IHJlbW92ZU1hdGNoaW5nKSB7CiAgICAgICAgICBfSGFzaFNldEVudHJ5PEU+IG5leHQgPSBlbnRyeS5yZW1vdmUoKTsKICAgICAgICAgIGlmIChwcmV2aW91cyA9PSBudWxsKSB7CiAgICAgICAgICAgIF9idWNrZXRzW2luZGV4XSA9IG5leHQ7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwcmV2aW91cy5uZXh0ID0gbmV4dDsKICAgICAgICAgIH0KICAgICAgICAgIF9lbGVtZW50Q291bnQtLTsKICAgICAgICAgIF9tb2RpZmljYXRpb25Db3VudCA9CiAgICAgICAgICAgICAgKF9tb2RpZmljYXRpb25Db3VudCArIDEpICYgX01PRElGSUNBVElPTl9DT1VOVF9NQVNLOwogICAgICAgICAgZW50cnkgPSBuZXh0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwcmV2aW91cyA9IGVudHJ5OwogICAgICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgX2ZpbHRlcldoZXJlKHRlc3QsIHRydWUpOwogIH0KCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgX2ZpbHRlcldoZXJlKHRlc3QsIGZhbHNlKTsKICB9CgogIHZvaWQgY2xlYXIoKSB7CiAgICBfYnVja2V0cyA9IG5ldyBMaXN0KF9JTklUSUFMX0NBUEFDSVRZKTsKICAgIGlmIChfZWxlbWVudENvdW50ID4gMCkgewogICAgICBfZWxlbWVudENvdW50ID0gMDsKICAgICAgX21vZGlmaWNhdGlvbkNvdW50ID0gKF9tb2RpZmljYXRpb25Db3VudCArIDEpICYgX01PRElGSUNBVElPTl9DT1VOVF9NQVNLOwogICAgfQogIH0KCiAgdm9pZCBfYWRkRW50cnkoRSBrZXksIGludCBoYXNoQ29kZSwgaW50IGluZGV4KSB7CiAgICBfYnVja2V0c1tpbmRleF0gPSBuZXcgX0hhc2hTZXRFbnRyeTxFPihrZXksIGhhc2hDb2RlLCBfYnVja2V0c1tpbmRleF0pOwogICAgaW50IG5ld0VsZW1lbnRzID0gX2VsZW1lbnRDb3VudCArIDE7CiAgICBfZWxlbWVudENvdW50ID0gbmV3RWxlbWVudHM7CiAgICBpbnQgbGVuZ3RoID0gX2J1Y2tldHMubGVuZ3RoOwogICAgLy8gSWYgd2UgZW5kIHVwIHdpdGggbW9yZSB0aGFuIDc1JSBub24tZW1wdHkgZW50cmllcywgd2UKICAgIC8vIHJlc2l6ZSB0aGUgYmFja2luZyBzdG9yZS4KICAgIGlmICgobmV3RWxlbWVudHMgPDwgMikgPiAoKGxlbmd0aCA8PCAxKSArIGxlbmd0aCkpIF9yZXNpemUoKTsKICAgIF9tb2RpZmljYXRpb25Db3VudCA9IChfbW9kaWZpY2F0aW9uQ291bnQgKyAxKSAmIF9NT0RJRklDQVRJT05fQ09VTlRfTUFTSzsKICB9CgogIHZvaWQgX3Jlc2l6ZSgpIHsKICAgIGludCBvbGRMZW5ndGggPSBfYnVja2V0cy5sZW5ndGg7CiAgICBpbnQgbmV3TGVuZ3RoID0gb2xkTGVuZ3RoIDw8IDE7CiAgICBMaXN0IG9sZEJ1Y2tldHMgPSBfYnVja2V0czsKICAgIExpc3QgbmV3QnVja2V0cyA9IG5ldyBMaXN0PF9IYXNoU2V0RW50cnk8RT4+KG5ld0xlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG9sZExlbmd0aDsgaSsrKSB7CiAgICAgIF9IYXNoU2V0RW50cnk8RT4gZW50cnkgPSBvbGRCdWNrZXRzW2ldOwogICAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICAgIF9IYXNoU2V0RW50cnk8RT4gbmV4dCA9IGVudHJ5Lm5leHQ7CiAgICAgICAgaW50IG5ld0luZGV4ID0gZW50cnkuaGFzaENvZGUgJiAobmV3TGVuZ3RoIC0gMSk7CiAgICAgICAgZW50cnkubmV4dCA9IG5ld0J1Y2tldHNbbmV3SW5kZXhdOwogICAgICAgIG5ld0J1Y2tldHNbbmV3SW5kZXhdID0gZW50cnk7CiAgICAgICAgZW50cnkgPSBuZXh0OwogICAgICB9CiAgICB9CiAgICBfYnVja2V0cyA9IG5ld0J1Y2tldHM7CiAgfQoKICBIYXNoU2V0PEU+IF9uZXdTZXQoKSA9PiBuZXcgX0hhc2hTZXQ8RT4oKTsKICBIYXNoU2V0PFI+IF9uZXdTaW1pbGFyU2V0PFI+KCkgPT4gbmV3IF9IYXNoU2V0PFI+KCk7Cn0KCmNsYXNzIF9JZGVudGl0eUhhc2hTZXQ8RT4gZXh0ZW5kcyBfSGFzaFNldDxFPiB7CiAgaW50IF9oYXNoQ29kZShlKSA9PiBpZGVudGl0eUhhc2hDb2RlKGUpOwogIGJvb2wgX2VxdWFscyhlMSwgZTIpID0+IGlkZW50aWNhbChlMSwgZTIpOwoKICBIYXNoU2V0PEU+IF9uZXdTZXQoKSA9PiBuZXcgX0lkZW50aXR5SGFzaFNldDxFPigpOwogIEhhc2hTZXQ8Uj4gX25ld1NpbWlsYXJTZXQ8Uj4oKSA9PiBuZXcgX0lkZW50aXR5SGFzaFNldDxSPigpOwp9CgpjbGFzcyBfQ3VzdG9tSGFzaFNldDxFPiBleHRlbmRzIF9IYXNoU2V0PEU+IHsKICBmaW5hbCBfRXF1YWxpdHk8RT4gX2VxdWFsaXR5OwogIGZpbmFsIF9IYXNoZXI8RT4gX2hhc2hlcjsKICBmaW5hbCBfUHJlZGljYXRlIF92YWxpZEtleTsKICBfQ3VzdG9tSGFzaFNldCh0aGlzLl9lcXVhbGl0eSwgdGhpcy5faGFzaGVyLCBib29sIHZhbGlkS2V5KE9iamVjdCBvKSkKICAgICAgOiBfdmFsaWRLZXkgPSAodmFsaWRLZXkgIT0gbnVsbCkgPyB2YWxpZEtleSA6IG5ldyBfVHlwZVRlc3Q8RT4oKS50ZXN0OwoKICBib29sIHJlbW92ZShPYmplY3QgZWxlbWVudCkgewogICAgaWYgKCFfdmFsaWRLZXkoZWxlbWVudCkpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBzdXBlci5yZW1vdmUoZWxlbWVudCk7CiAgfQoKICBib29sIGNvbnRhaW5zKE9iamVjdCBlbGVtZW50KSB7CiAgICBpZiAoIV92YWxpZEtleShlbGVtZW50KSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHN1cGVyLmNvbnRhaW5zKGVsZW1lbnQpOwogIH0KCiAgRSBsb29rdXAoT2JqZWN0IGVsZW1lbnQpIHsKICAgIGlmICghX3ZhbGlkS2V5KGVsZW1lbnQpKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBzdXBlci5sb29rdXAoZWxlbWVudCk7CiAgfQoKICBib29sIGNvbnRhaW5zQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpIHsKICAgIGZvciAoT2JqZWN0IGVsZW1lbnQgaW4gZWxlbWVudHMpIHsKICAgICAgaWYgKCFfdmFsaWRLZXkoZWxlbWVudCkgfHwgIXRoaXMuY29udGFpbnMoZWxlbWVudCkpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgdm9pZCByZW1vdmVBbGwoSXRlcmFibGU8T2JqZWN0PiBlbGVtZW50cykgewogICAgZm9yIChPYmplY3QgZWxlbWVudCBpbiBlbGVtZW50cykgewogICAgICBpZiAoX3ZhbGlkS2V5KGVsZW1lbnQpKSB7CiAgICAgICAgc3VwZXIuX3JlbW92ZShlbGVtZW50LCBfaGFzaGVyKGVsZW1lbnQpKTsKICAgICAgfQogICAgfQogIH0KCiAgYm9vbCBfZXF1YWxzKGUxLCBlMikgPT4gX2VxdWFsaXR5KGUxLCBlMik7CiAgaW50IF9oYXNoQ29kZShlKSA9PiBfaGFzaGVyKGUpOwoKICBIYXNoU2V0PEU+IF9uZXdTZXQoKSA9PiBuZXcgX0N1c3RvbUhhc2hTZXQ8RT4oX2VxdWFsaXR5LCBfaGFzaGVyLCBfdmFsaWRLZXkpOwogIEhhc2hTZXQ8Uj4gX25ld1NpbWlsYXJTZXQ8Uj4oKSA9PiBuZXcgX0hhc2hTZXQ8Uj4oKTsKfQoKY2xhc3MgX0hhc2hTZXRFbnRyeTxFPiB7CiAgZmluYWwgRSBrZXk7CiAgZmluYWwgaW50IGhhc2hDb2RlOwogIF9IYXNoU2V0RW50cnk8RT4gbmV4dDsKICBfSGFzaFNldEVudHJ5KHRoaXMua2V5LCB0aGlzLmhhc2hDb2RlLCB0aGlzLm5leHQpOwoKICBfSGFzaFNldEVudHJ5PEU+IHJlbW92ZSgpIHsKICAgIGZpbmFsIHJlc3VsdCA9IG5leHQ7CiAgICBuZXh0ID0gbnVsbDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CgpjbGFzcyBfSGFzaFNldEl0ZXJhdG9yPEU+IGltcGxlbWVudHMgSXRlcmF0b3I8RT4gewogIGZpbmFsIF9IYXNoU2V0PEU+IF9zZXQ7CiAgZmluYWwgaW50IF9tb2RpZmljYXRpb25Db3VudDsKICBpbnQgX2luZGV4ID0gMDsKICBfSGFzaFNldEVudHJ5PEU+IF9uZXh0OwogIEUgX2N1cnJlbnQ7CgogIF9IYXNoU2V0SXRlcmF0b3IodGhpcy5fc2V0KSA6IF9tb2RpZmljYXRpb25Db3VudCA9IF9zZXQuX21vZGlmaWNhdGlvbkNvdW50OwoKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKF9tb2RpZmljYXRpb25Db3VudCAhPSBfc2V0Ll9tb2RpZmljYXRpb25Db3VudCkgewogICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKF9zZXQpOwogICAgfQogICAgaWYgKF9uZXh0ICE9IG51bGwpIHsKICAgICAgX2N1cnJlbnQgPSBfbmV4dC5rZXk7CiAgICAgIF9uZXh0ID0gX25leHQubmV4dDsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBMaXN0PF9IYXNoU2V0RW50cnk8RT4+IGJ1Y2tldHMgPSBfc2V0Ll9idWNrZXRzOwogICAgd2hpbGUgKF9pbmRleCA8IGJ1Y2tldHMubGVuZ3RoKSB7CiAgICAgIF9uZXh0ID0gYnVja2V0c1tfaW5kZXhdOwogICAgICBfaW5kZXggPSBfaW5kZXggKyAxOwogICAgICBpZiAoX25leHQgIT0gbnVsbCkgewogICAgICAgIF9jdXJyZW50ID0gX25leHQua2V5OwogICAgICAgIF9uZXh0ID0gX25leHQubmV4dDsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgX2N1cnJlbnQgPSBudWxsOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgRSBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKfQoKLyoqCiAqIEEgaGFzaC1iYXNlZCBtYXAgdGhhdCBpdGVyYXRlcyBrZXlzIGFuZCB2YWx1ZXMgaW4ga2V5IGluc2VydGlvbiBvcmRlci4KICogVGhpcyBpcyBuZXZlciBhY3R1YWxseSBpbnN0YW50aWF0ZWQgYW55IG1vcmUgLSB0aGUgY29uc3RydWN0b3IgYWx3YXlzCiAqIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgX0NvbXBhY3RMaW5rZWRIYXNoTWFwIG9yIF9JbnRlcm5hbExpbmtlZEhhc2hNYXAsCiAqIHdoaWNoIGRlc3BpdGUgdGhlIG5hbWVzIGRvIG5vdCB1c2UgbGlua3MgKGJ1dCBhcmUgaW5zZXJ0aW9uLW9yZGVyZWQgYXMgaWYKICogdGhleSBkaWQpLgogKi8KQHBhdGNoCmNsYXNzIExpbmtlZEhhc2hNYXA8SywgVj4gewogIEBwYXRjaAogIGZhY3RvcnkgTGlua2VkSGFzaE1hcCgKICAgICAge2Jvb2wgZXF1YWxzKEsga2V5MSwgSyBrZXkyKSwKICAgICAgaW50IGhhc2hDb2RlKEsga2V5KSwKICAgICAgYm9vbCBpc1ZhbGlkS2V5KHBvdGVudGlhbEtleSl9KSB7CiAgICBpZiAoaXNWYWxpZEtleSA9PSBudWxsKSB7CiAgICAgIGlmIChoYXNoQ29kZSA9PSBudWxsKSB7CiAgICAgICAgaWYgKGVxdWFscyA9PSBudWxsKSB7CiAgICAgICAgICByZXR1cm4gbmV3IF9JbnRlcm5hbExpbmtlZEhhc2hNYXA8SywgVj4oKTsKICAgICAgICB9CiAgICAgICAgaGFzaENvZGUgPSBfZGVmYXVsdEhhc2hDb2RlOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChpZGVudGljYWwoaWRlbnRpdHlIYXNoQ29kZSwgaGFzaENvZGUpICYmCiAgICAgICAgICAgIGlkZW50aWNhbChpZGVudGljYWwsIGVxdWFscykpIHsKICAgICAgICAgIHJldHVybiBuZXcgX0NvbXBhY3RMaW5rZWRJZGVudGl0eUhhc2hNYXA8SywgVj4oKTsKICAgICAgICB9CiAgICAgICAgZXF1YWxzID8/PSBfZGVmYXVsdEVxdWFsczsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaGFzaENvZGUgPz89IF9kZWZhdWx0SGFzaENvZGU7CiAgICAgIGVxdWFscyA/Pz0gX2RlZmF1bHRFcXVhbHM7CiAgICB9CiAgICByZXR1cm4gbmV3IF9Db21wYWN0TGlua2VkQ3VzdG9tSGFzaE1hcDxLLCBWPihlcXVhbHMsIGhhc2hDb2RlLCBpc1ZhbGlkS2V5KTsKICB9CgogIEBwYXRjaAogIGZhY3RvcnkgTGlua2VkSGFzaE1hcC5pZGVudGl0eSgpID0+IG5ldyBfQ29tcGFjdExpbmtlZElkZW50aXR5SGFzaE1hcDxLLCBWPigpOwp9CgpAcGF0Y2gKY2xhc3MgTGlua2VkSGFzaFNldDxFPiB7CiAgQHBhdGNoCiAgZmFjdG9yeSBMaW5rZWRIYXNoU2V0KAogICAgICB7Ym9vbCBlcXVhbHMoRSBlMSwgRSBlMiksCiAgICAgIGludCBoYXNoQ29kZShFIGUpLAogICAgICBib29sIGlzVmFsaWRLZXkocG90ZW50aWFsS2V5KX0pIHsKICAgIGlmIChpc1ZhbGlkS2V5ID09IG51bGwpIHsKICAgICAgaWYgKGhhc2hDb2RlID09IG51bGwpIHsKICAgICAgICBpZiAoZXF1YWxzID09IG51bGwpIHsKICAgICAgICAgIHJldHVybiBuZXcgX0NvbXBhY3RMaW5rZWRIYXNoU2V0PEU+KCk7CiAgICAgICAgfQogICAgICAgIGhhc2hDb2RlID0gX2RlZmF1bHRIYXNoQ29kZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoaWRlbnRpY2FsKGlkZW50aXR5SGFzaENvZGUsIGhhc2hDb2RlKSAmJgogICAgICAgICAgICBpZGVudGljYWwoaWRlbnRpY2FsLCBlcXVhbHMpKSB7CiAgICAgICAgICByZXR1cm4gbmV3IF9Db21wYWN0TGlua2VkSWRlbnRpdHlIYXNoU2V0PEU+KCk7CiAgICAgICAgfQogICAgICAgIGVxdWFscyA/Pz0gX2RlZmF1bHRFcXVhbHM7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGhhc2hDb2RlID8/PSBfZGVmYXVsdEhhc2hDb2RlOwogICAgICBlcXVhbHMgPz89IF9kZWZhdWx0RXF1YWxzOwogICAgfQogICAgcmV0dXJuIG5ldyBfQ29tcGFjdExpbmtlZEN1c3RvbUhhc2hTZXQ8RT4oZXF1YWxzLCBoYXNoQ29kZSwgaXNWYWxpZEtleSk7CiAgfQoKICBAcGF0Y2gKICBmYWN0b3J5IExpbmtlZEhhc2hTZXQuaWRlbnRpdHkoKSA9PiBuZXcgX0NvbXBhY3RMaW5rZWRJZGVudGl0eUhhc2hTZXQ8RT4oKTsKfQoKQHBhdGNoCmFic3RyYWN0IGNsYXNzIF9TcGxheVRyZWU8SywgTm9kZSBleHRlbmRzIF9TcGxheVRyZWVOb2RlPEs+PiB7CiAgLy8gV2Ugb3ZlcnJpZGUgX3NwbGF5TWluIGFuZCBfc3BsYXlNYXggdG8gb3B0aW1pemUgdHlwZS1jaGVja3MuCiAgQHBhdGNoCiAgTm9kZSBfc3BsYXlNaW4oTm9kZSBub2RlKSB7CiAgICBOb2RlIGN1cnJlbnQgPSBub2RlOwogICAgd2hpbGUgKGN1cnJlbnQubGVmdCAhPSBudWxsKSB7CiAgICAgIE5vZGUgbGVmdCA9IGludGVybmFsLnVuc2FmZUNhc3Q8Tm9kZT4oY3VycmVudC5sZWZ0KTsKICAgICAgY3VycmVudC5sZWZ0ID0gbGVmdC5yaWdodDsKICAgICAgbGVmdC5yaWdodCA9IGN1cnJlbnQ7CiAgICAgIGN1cnJlbnQgPSBsZWZ0OwogICAgfQogICAgcmV0dXJuIGN1cnJlbnQ7CiAgfQoKICBAcGF0Y2gKICBOb2RlIF9zcGxheU1heChOb2RlIG5vZGUpIHsKICAgIE5vZGUgY3VycmVudCA9IG5vZGU7CiAgICB3aGlsZSAoY3VycmVudC5yaWdodCAhPSBudWxsKSB7CiAgICAgIE5vZGUgcmlnaHQgPSBpbnRlcm5hbC51bnNhZmVDYXN0PE5vZGU+KGN1cnJlbnQucmlnaHQpOwogICAgICBjdXJyZW50LnJpZ2h0ID0gcmlnaHQubGVmdDsKICAgICAgcmlnaHQubGVmdCA9IGN1cnJlbnQ7CiAgICAgIGN1cnJlbnQgPSByaWdodDsKICAgIH0KICAgIHJldHVybiBjdXJyZW50OwogIH0KfQqDrABOTjwBTVBLKwElAToBKgE6HQEHFgkTJBsoHh4eJwolDzUsLwojCA0lIQZDBAEJPgEXAgExAUYqARknOB4BIyotAT9DASEjHjMgHEcaBhIEASUeIyceHi8cCAYSBAEeIx4zIBw8HAgaBhEEASYjHiMrIBw8HRAIGgY9BAEnIx4jKyAcPBwIGgYmICc/DRkGEgQBISUZCAQBLiYeIyceHigrNwocCAYEARkjHjMgKRwfPC4ZHUEcCBgUBhEEAREsHRlQBgQBLz8kKg0qBgQBSyZRHCshPSFCTgQBEyEpJkEqIR4hKTIoIxYIBhsEASwCATQeHh45TQEhJyUeMyAcThoGEgQBHiYlHjMgHEMcCBoGEQQBJiUeIysgHEMdEAgaBj0EASclHiMrIBxDHAgaBiQaJz8NGQYSBAEZJiUeMyApHB9DLhkdQRwIGBQGEQQBTwIBNiEsHjMgHFAaBhIEAR4sHjMgHEUcCBoGEQQBJiweIysgHEUdEAgaBj0EAScsHiMrIBxFHAgaBiYaJz8NGQYSBAEZLB4zICkcH0UuGR1BHAgYFAYRBAE0AgEcDwsWHEECASkyHR8hJCoCAUQ4QzYlHhMIBAE1AgFGOkU8JyAVCAQCAUIdFAESHgFCARQtMwYYGR8aFxUIFQYjIywaGxgYFQgGFRIEAgFEOCACAUY6IgIBBxMJEyAZKB4eHiQKJQ81LCwKIwgNJSEGQAQBCTsCAT4qASQ1GR4BJCIBNQEPAT0BIwEqAS0BITsuHDMaBhIEARw7LhwbLBoGEQQBEDAfGxoIBiwEAQ81HxslHgoaCAYsBAEKARgpNC4cNRoGKREEASUgEwYEAS40LiYcKDAgIhEgChkdQRUIGBoGEgQBRAE1LSoGBAFBIjMwKB40Kzc3CiwyIiQTIgwbH0MYERweCggGBAErHgQBKx8EAREsHRlQBgQBM0wpISI9IUJOBAETJSQgPSouHiw5KyYWCAYbBAEtNwIBMCstATU/AgEuIBweSE0BICsiBAEiKyQEAR0qIgQBMCdIBhEEAS4nIDIIBgQBLSIBUDcCARkPFhk1AR4ZERMEAgEzGiASGg4BTgEUOTMGGRwaEwY0Jh8bGx4cFQgGFRIEAR0CAQRKSUtNDgQHHAkZJBsoHh4eNQolDzUsPAojCA0lIQZQBAEJUQIBBxkJGSAZKB4eHjEKJQ81LDkKIwgNJSEGTQQBCU4CAQc/QgkeGSM7IRwWBhQEAQkeGSQ9IhwXBhQEAgErZGFydDpjb2xsZWN0aW9uLXBhdGNoL2NvbGxlY3Rpb25fcGF0Y2guZGFydDFvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL2NvbXBhY3RfaGFzaC5kYXJ0wABUdC8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb2xsZWN0aW9uX3BhdGNoLmRhcnQiOwoKLy8gSGFzaCB0YWJsZSB3aXRoIG9wZW4gYWRkcmVzc2luZyB0aGF0IHNlcGFyYXRlcyB0aGUgaW5kZXggZnJvbSBrZXlzL3ZhbHVlcy4KCi8vIFRoaXMgZnVuY3Rpb24gdGFrZXMgY2FyZSBvZiByZWhhc2hpbmcgb2YgdGhlIGxpbmtlZCBoYXNobWFwcyBpbiBbb2JqZWN0c10uIFdlCi8vIGRvIHRoaXMgZWFnZXJseSBhZnRlciBzbmFwc2hvdCBkZXNlcmlhbGl6YXRpb24uCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQp2b2lkIF9yZWhhc2hPYmplY3RzKExpc3Qgb2JqZWN0cykgewogIGZpbmFsIGludCBsZW5ndGggPSBvYmplY3RzLmxlbmd0aDsKICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICBvYmplY3RzW2ldLl9yZWdlbmVyYXRlSW5kZXgoKTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9IYXNoRmllbGRCYXNlIHsKICAvLyBFYWNoIG9jY3VwaWVkIGVudHJ5IGluIF9pbmRleCBpcyBhIGZpeGVkLXNpemUgaW50ZWdlciB0aGF0IGVuY29kZXMgYSBwYWlyOgogIC8vICAgWyBoYXNoIHBhdHRlcm4gZm9yIGtleSB8IGluZGV4IG9mIGVudHJ5IGluIF9kYXRhIF0KICAvLyBUaGUgaGFzaCBwYXR0ZXJuIGlzIGJhc2VkIG9uIGhhc2hDb2RlLCBidXQgaXMgZ3VhcmFudGVlZCB0byBiZSBub24temVyby4KICAvLyBUaGUgbGVuZ3RoIG9mIF9pbmRleCBpcyBhbHdheXMgYSBwb3dlciBvZiB0d28sIGFuZCB0aGVyZSBpcyBhbHdheXMgYXQKICAvLyBsZWFzdCBvbmUgdW5vY2N1cGllZCBlbnRyeS4KICAvLyBOT1RFOiBXaGVuIG1hcHMgYXJlIGRlc2VyaWFsaXplZCwgdGhlaXIgX2luZGV4IGFuZCBfaGFzaE1hc2sgaXMgcmVnZW5lcmF0ZWQKICAvLyBlYWdlcmx5IGJ5IF9yZWdlbmVyYXRlSW5kZXguCiAgVWludDMyTGlzdCBfaW5kZXggPSBuZXcgVWludDMyTGlzdChfSGFzaEJhc2UuX0lOSVRJQUxfSU5ERVhfU0laRSk7CgogIC8vIENhY2hlZCBpbi1wbGFjZSBtYXNrIGZvciB0aGUgaGFzaCBwYXR0ZXJuIGNvbXBvbmVudC4KICBpbnQgX2hhc2hNYXNrID0gX0hhc2hCYXNlLl9pbmRleFNpemVUb0hhc2hNYXNrKF9IYXNoQmFzZS5fSU5JVElBTF9JTkRFWF9TSVpFKTsKCiAgLy8gRml4ZWQtbGVuZ3RoIGxpc3Qgb2Yga2V5cyAoc2V0KSBvciBrZXkvdmFsdWUgYXQgZXZlbi9vZGQgaW5kaWNlcyAobWFwKS4KICBMaXN0IF9kYXRhOwoKICAvLyBMZW5ndGggb2YgX2RhdGEgdGhhdCBpcyB1c2VkIChpLmUuLCBrZXlzICsgdmFsdWVzIGZvciBhIG1hcCkuCiAgaW50IF91c2VkRGF0YSA9IDA7CgogIC8vIE51bWJlciBvZiBkZWxldGVkIGtleXMuCiAgaW50IF9kZWxldGVkS2V5cyA9IDA7CgogIC8vIE5vdGU6IEFsbCBmaWVsZHMgYXJlIGluaXRpYWxpemVkIGluIGEgc2luZ2xlIGNvbnN0cnVjdG9yIHNvIHRoYXQgdGhlIFZNCiAgLy8gcmVjb2duaXplcyB0aGV5IGNhbm5vdCBob2xkIG51bGwgdmFsdWVzLiBUaGlzIG1ha2VzIGEgYmlnICgyMCUpIHBlcmZvcm1hbmNlCiAgLy8gZGlmZmVyZW5jZSBvbiBzb21lIG9wZXJhdGlvbnMuCiAgX0hhc2hGaWVsZEJhc2UoaW50IGRhdGFTaXplKSA6IHRoaXMuX2RhdGEgPSBuZXcgTGlzdChkYXRhU2l6ZSk7Cn0KCi8vIEJhc2UgY2xhc3MgZm9yIFZNLWludGVybmFsIGNsYXNzZXM7IGtlZXAgaW4gc3luYyB3aXRoIF9IYXNoRmllbGRCYXNlLgphYnN0cmFjdCBjbGFzcyBfSGFzaFZNQmFzZSB7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDp0eXBlZF9kYXRhI19VaW50MzJMaXN0IikKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBVaW50MzJMaXN0IGdldCBfaW5kZXggbmF0aXZlICJMaW5rZWRIYXNoTWFwX2dldEluZGV4IjsKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIHNldCBfaW5kZXgoVWludDMyTGlzdCB2YWx1ZSkgbmF0aXZlICJMaW5rZWRIYXNoTWFwX3NldEluZGV4IjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBnZXQgX2hhc2hNYXNrIG5hdGl2ZSAiTGlua2VkSGFzaE1hcF9nZXRIYXNoTWFzayI7CiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBzZXQgX2hhc2hNYXNrKGludCB2YWx1ZSkgbmF0aXZlICJMaW5rZWRIYXNoTWFwX3NldEhhc2hNYXNrIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19MaXN0IikKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBMaXN0IGdldCBfZGF0YSBuYXRpdmUgIkxpbmtlZEhhc2hNYXBfZ2V0RGF0YSI7CiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBzZXQgX2RhdGEoTGlzdCB2YWx1ZSkgbmF0aXZlICJMaW5rZWRIYXNoTWFwX3NldERhdGEiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IGdldCBfdXNlZERhdGEgbmF0aXZlICJMaW5rZWRIYXNoTWFwX2dldFVzZWREYXRhIjsKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIHNldCBfdXNlZERhdGEoaW50IHZhbHVlKSBuYXRpdmUgIkxpbmtlZEhhc2hNYXBfc2V0VXNlZERhdGEiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IGdldCBfZGVsZXRlZEtleXMgbmF0aXZlICJMaW5rZWRIYXNoTWFwX2dldERlbGV0ZWRLZXlzIjsKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIHNldCBfZGVsZXRlZEtleXMoaW50IHZhbHVlKSBuYXRpdmUgIkxpbmtlZEhhc2hNYXBfc2V0RGVsZXRlZEtleXMiOwp9CgovLyBUaGlzIG1peGluIGNhbiBiZSBhcHBsaWVkIHRvIF9IYXNoRmllbGRCYXNlIG9yIF9IYXNoVk1CYXNlIChmb3IKLy8gbm9ybWFsIGFuZCBWTS1pbnRlcm5hbGl6ZWQgY2xhc3NlcywgcmVzcGVjdGl2ZWxleSksIHdoaWNoIHByb3ZpZGUgdGhlCi8vIGFjdHVhbCBmaWVsZHMvYWNjZXNzb3JzIHRoYXQgdGhpcyBtaXhpbiBhc3N1bWVzLgovLyBUT0RPKGtvZGEpOiBDb25zaWRlciBtb3ZpbmcgZmllbGQgY29tbWVudHMgdG8gX0hhc2hGaWVsZEJhc2UuCmFic3RyYWN0IGNsYXNzIF9IYXNoQmFzZSBpbXBsZW1lbnRzIF9IYXNoVk1CYXNlIHsKICAvLyBUaGUgbnVtYmVyIG9mIGJpdHMgdXNlZCBmb3IgZWFjaCBjb21wb25lbnQgaXMgZGV0ZXJtaW5lZCBieSB0YWJsZSBzaXplLgogIC8vIFRoZSBsZW5ndGggb2YgX2luZGV4IGlzIHR3aWNlIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBfZGF0YSwgYW5kIGJvdGgKICAvLyBhcmUgZG91YmxlZCB3aGVuIF9kYXRhIGlzIGZ1bGwuIFRodXMsIF9pbmRleCB3aWxsIGhhdmUgYSBtYXggbG9hZCBmYWN0b3IKICAvLyBvZiAxLzIsIHdoaWNoIGVuYWJsZXMgb25lIG1vcmUgYml0IHRvIGJlIHVzZWQgZm9yIHRoZSBoYXNoLgogIC8vIFRPRE8oa29kYSk6IENvbnNpZGVyIGdyb3dpbmcgX2RhdGEgYnkgZmFjdG9yIHNxcnQoMiksIHR3aWNlIGFzIG9mdGVuLgogIHN0YXRpYyBjb25zdCBpbnQgX0lOSVRJQUxfSU5ERVhfQklUUyA9IDM7CiAgc3RhdGljIGNvbnN0IGludCBfSU5JVElBTF9JTkRFWF9TSVpFID0gMSA8PCAoX0lOSVRJQUxfSU5ERVhfQklUUyArIDEpOwoKICAvLyBVbnVzZWQgYW5kIGRlbGV0ZWQgZW50cmllcyBhcmUgbWFya2VkIGJ5IDAgYW5kIDEsIHJlc3BlY3RpdmVseS4KICBzdGF0aWMgY29uc3QgaW50IF9VTlVTRURfUEFJUiA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBfREVMRVRFRF9QQUlSID0gMTsKCiAgLy8gT24gMzItYml0LCB0aGUgdG9wIGJpdHMgYXJlIHdhc3RlZCB0byBhdm9pZCBNaW50IGFsbG9jYXRpb24uCiAgLy8gVE9ETyhrb2RhKTogUmVjbGFpbSB0aGUgYml0cyBieSBtYWtpbmcgdGhlIGNvbXBpbGVyIHRyZWF0IGhhc2ggcGF0dGVybnMKICAvLyBhcyB1bnNpZ25lZCB3b3Jkcy4KICBzdGF0aWMgaW50IF9pbmRleFNpemVUb0hhc2hNYXNrKGludCBpbmRleFNpemUpIHsKICAgIGludCBpbmRleEJpdHMgPSBpbmRleFNpemUuYml0TGVuZ3RoIC0gMjsKICAgIHJldHVybiBpbnRlcm5hbC5pczY0Qml0CiAgICAgICAgPyAoMSA8PCAoMzIgLSBpbmRleEJpdHMpKSAtIDEKICAgICAgICA6ICgxIDw8ICgzMCAtIGluZGV4Qml0cykpIC0gMTsKICB9CgogIHN0YXRpYyBpbnQgX2hhc2hQYXR0ZXJuKGludCBmdWxsSGFzaCwgaW50IGhhc2hNYXNrLCBpbnQgc2l6ZSkgewogICAgZmluYWwgaW50IG1hc2tlZEhhc2ggPSBmdWxsSGFzaCAmIGhhc2hNYXNrOwogICAgLy8gVE9ETyhrb2RhKTogQ29uc2lkZXIga2VlcGluZyBiaXQgbGVuZ3RoIGFuZCB1c2UgbGVmdCBzaGlmdC4KICAgIHJldHVybiAobWFza2VkSGFzaCA9PSAwKSA/IChzaXplID4+IDEpIDogbWFza2VkSGFzaCAqIChzaXplID4+IDEpOwogIH0KCiAgLy8gTGluZWFyIHByb2JpbmcuCiAgc3RhdGljIGludCBfZmlyc3RQcm9iZShpbnQgZnVsbEhhc2gsIGludCBzaXplTWFzaykgewogICAgZmluYWwgaW50IGkgPSBmdWxsSGFzaCAmIHNpemVNYXNrOwogICAgLy8gTGlnaHQsIGZhc3Qgc2h1ZmZsZSB0byBtaXRpZ2F0ZSBiYWQgaGFzaENvZGUgKGUuZy4sIHNlcXVlbnRpYWwpLgogICAgcmV0dXJuICgoaSA8PCAxKSArIGkpICYgc2l6ZU1hc2s7CiAgfQoKICBzdGF0aWMgaW50IF9uZXh0UHJvYmUoaW50IGksIGludCBzaXplTWFzaykgPT4gKGkgKyAxKSAmIHNpemVNYXNrOwoKICAvLyBBIHNlbGYtbG9vcCBpcyB1c2VkIHRvIG1hcmsgYSBkZWxldGVkIGtleSBvciB2YWx1ZS4KICBzdGF0aWMgYm9vbCBfaXNEZWxldGVkKExpc3QgZGF0YSwgT2JqZWN0IGtleU9yVmFsdWUpID0+CiAgICAgIGlkZW50aWNhbChrZXlPclZhbHVlLCBkYXRhKTsKICBzdGF0aWMgdm9pZCBfc2V0RGVsZXRlZEF0KExpc3QgZGF0YSwgaW50IGQpIHsKICAgIGRhdGFbZF0gPSBkYXRhOwogIH0KCiAgLy8gQ29uY3VycmVudCBtb2RpZmljYXRpb24gZGV0ZWN0aW9uIHJlbGllcyBvbiB0aGlzIGNoZWNrc3VtIG1vbm90b25pY2FsbHkKICAvLyBpbmNyZWFzaW5nIGJldHdlZW4gcmVhbGxvY2F0aW9ucyBvZiBfZGF0YS4KICBpbnQgZ2V0IF9jaGVja1N1bSA9PiBfdXNlZERhdGEgKyBfZGVsZXRlZEtleXM7CiAgYm9vbCBfaXNNb2RpZmllZFNpbmNlKExpc3Qgb2xkRGF0YSwgaW50IG9sZENoZWNrU3VtKSA9PgogICAgICAhaWRlbnRpY2FsKF9kYXRhLCBvbGREYXRhKSB8fCAoX2NoZWNrU3VtICE9IG9sZENoZWNrU3VtKTsKCiAgaW50IGdldCBsZW5ndGg7Cn0KCmNsYXNzIF9PcGVyYXRvckVxdWFsc0FuZEhhc2hDb2RlIHsKICBpbnQgX2hhc2hDb2RlKGUpID0+IGUuaGFzaENvZGU7CiAgYm9vbCBfZXF1YWxzKGUxLCBlMikgPT4gZTEgPT0gZTI7Cn0KCmNsYXNzIF9JZGVudGljYWxBbmRJZGVudGl0eUhhc2hDb2RlIHsKICBpbnQgX2hhc2hDb2RlKGUpID0+IGlkZW50aXR5SGFzaENvZGUoZSk7CiAgYm9vbCBfZXF1YWxzKGUxLCBlMikgPT4gaWRlbnRpY2FsKGUxLCBlMik7Cn0KCi8vIFZNLWludGVybmFsaXplZCBpbXBsZW1lbnRhdGlvbiBvZiBhIGRlZmF1bHQtY29uc3RydWN0ZWQgTGlua2VkSGFzaE1hcC4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfSW50ZXJuYWxMaW5rZWRIYXNoTWFwPEssIFY+IGV4dGVuZHMgX0hhc2hWTUJhc2UKICAgIHdpdGgKICAgICAgICBNYXBNaXhpbjxLLCBWPiwKICAgICAgICBfTGlua2VkSGFzaE1hcE1peGluPEssIFY+LAogICAgICAgIF9IYXNoQmFzZSwKICAgICAgICBfT3BlcmF0b3JFcXVhbHNBbmRIYXNoQ29kZQogICAgaW1wbGVtZW50cyBMaW5rZWRIYXNoTWFwPEssIFY+IHsKICBfSW50ZXJuYWxMaW5rZWRIYXNoTWFwKCkgewogICAgX2luZGV4ID0gbmV3IFVpbnQzMkxpc3QoX0hhc2hCYXNlLl9JTklUSUFMX0lOREVYX1NJWkUpOwogICAgX2hhc2hNYXNrID0gX0hhc2hCYXNlLl9pbmRleFNpemVUb0hhc2hNYXNrKF9IYXNoQmFzZS5fSU5JVElBTF9JTkRFWF9TSVpFKTsKICAgIF9kYXRhID0gbmV3IExpc3QoX0hhc2hCYXNlLl9JTklUSUFMX0lOREVYX1NJWkUpOwogICAgX3VzZWREYXRhID0gMDsKICAgIF9kZWxldGVkS2V5cyA9IDA7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBfTGlua2VkSGFzaE1hcE1peGluPEssIFY+IGltcGxlbWVudHMgX0hhc2hCYXNlIHsKICBpbnQgX2hhc2hDb2RlKGUpOwogIGJvb2wgX2VxdWFscyhlMSwgZTIpOwogIGludCBnZXQgX2NoZWNrU3VtOwogIGJvb2wgX2lzTW9kaWZpZWRTaW5jZShMaXN0IG9sZERhdGEsIGludCBvbGRDaGVja1N1bSk7CgogIGludCBnZXQgbGVuZ3RoID0+IChfdXNlZERhdGEgPj4gMSkgLSBfZGVsZXRlZEtleXM7CiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBsZW5ndGggPT0gMDsKICBib29sIGdldCBpc05vdEVtcHR5ID0+ICFpc0VtcHR5OwoKICB2b2lkIF9yZWhhc2goKSB7CiAgICBpZiAoKF9kZWxldGVkS2V5cyA8PCAyKSA+IF91c2VkRGF0YSkgewogICAgICAvLyBUT0RPKGtvZGEpOiBDb25zaWRlciBzaHJpbmtpbmcuCiAgICAgIC8vIFRPRE8oa29kYSk6IENvbnNpZGVyIGluLXBsYWNlIGNvbXBhY3Rpb24gYW5kIG1vcmUgY29zdGx5IENNRSBjaGVjay4KICAgICAgX2luaXQoX2luZGV4Lmxlbmd0aCwgX2hhc2hNYXNrLCBfZGF0YSwgX3VzZWREYXRhKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRPRE8oa29kYSk6IFN1cHBvcnQgMzItPjY0IGJpdCB0cmFuc2l0aW9uIChhbmQgYWRqdXN0IF9oYXNoTWFzaykuCiAgICAgIF9pbml0KF9pbmRleC5sZW5ndGggPDwgMSwgX2hhc2hNYXNrID4+IDEsIF9kYXRhLCBfdXNlZERhdGEpOwogICAgfQogIH0KCiAgdm9pZCBjbGVhcigpIHsKICAgIGlmICghaXNFbXB0eSkgewogICAgICBfaW5pdChfSGFzaEJhc2UuX0lOSVRJQUxfSU5ERVhfU0laRSwgX2hhc2hNYXNrLCBudWxsLCAwKTsKICAgIH0KICB9CgogIC8vIEFsbG9jYXRlIG5ldyBfaW5kZXggYW5kIF9kYXRhLCBhbmQgb3B0aW9uYWxseSBjb3B5IGV4aXN0aW5nIGNvbnRlbnRzLgogIHZvaWQgX2luaXQoaW50IHNpemUsIGludCBoYXNoTWFzaywgTGlzdCBvbGREYXRhLCBpbnQgb2xkVXNlZCkgewogICAgYXNzZXJ0KHNpemUgJiAoc2l6ZSAtIDEpID09IDApOwogICAgYXNzZXJ0KF9IYXNoQmFzZS5fVU5VU0VEX1BBSVIgPT0gMCk7CiAgICBfaW5kZXggPSBuZXcgVWludDMyTGlzdChzaXplKTsKICAgIF9oYXNoTWFzayA9IGhhc2hNYXNrOwogICAgX2RhdGEgPSBuZXcgTGlzdChzaXplKTsKICAgIF91c2VkRGF0YSA9IDA7CiAgICBfZGVsZXRlZEtleXMgPSAwOwogICAgaWYgKG9sZERhdGEgIT0gbnVsbCkgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9sZFVzZWQ7IGkgKz0gMikgewogICAgICAgIHZhciBrZXkgPSBvbGREYXRhW2ldOwogICAgICAgIGlmICghX0hhc2hCYXNlLl9pc0RlbGV0ZWQob2xkRGF0YSwga2V5KSkgewogICAgICAgICAgLy8gVE9ETyhrb2RhKTogV2hpbGUgdGhlcmUgYXJlIGVub3VnaCBoYXNoIGJpdHMsIGF2b2lkIGhhc2hDb2RlIGNhbGxzLgogICAgICAgICAgdGhpc1trZXldID0gb2xkRGF0YVtpICsgMV07CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgW19yZWhhc2hPYmplY3RzXSAoc2VlIGFib3ZlKS4KICB2b2lkIF9yZWdlbmVyYXRlSW5kZXgoKSB7CiAgICBfaW5kZXggPSBuZXcgVWludDMyTGlzdChfZGF0YS5sZW5ndGgpOwogICAgYXNzZXJ0KF9oYXNoTWFzayA9PSAwKTsKICAgIF9oYXNoTWFzayA9IF9IYXNoQmFzZS5faW5kZXhTaXplVG9IYXNoTWFzayhfaW5kZXgubGVuZ3RoKTsKICAgIGZpbmFsIGludCB0bXBVc2VkID0gX3VzZWREYXRhOwogICAgX3VzZWREYXRhID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG1wVXNlZDsgaSArPSAyKSB7CiAgICAgIHRoaXNbX2RhdGFbaV1dID0gX2RhdGFbaSArIDFdOwogICAgfQogIH0KCiAgdm9pZCBfaW5zZXJ0KEsga2V5LCBWIHZhbHVlLCBpbnQgaGFzaFBhdHRlcm4sIGludCBpKSB7CiAgICBpZiAoX3VzZWREYXRhID09IF9kYXRhLmxlbmd0aCkgewogICAgICBfcmVoYXNoKCk7CiAgICAgIHRoaXNba2V5XSA9IHZhbHVlOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KDEgPD0gaGFzaFBhdHRlcm4gJiYgaGFzaFBhdHRlcm4gPCAoMSA8PCAzMikpOwogICAgICBmaW5hbCBpbnQgaW5kZXggPSBfdXNlZERhdGEgPj4gMTsKICAgICAgYXNzZXJ0KChpbmRleCAmIGhhc2hQYXR0ZXJuKSA9PSAwKTsKICAgICAgX2luZGV4W2ldID0gaGFzaFBhdHRlcm4gfCBpbmRleDsKICAgICAgX2RhdGFbX3VzZWREYXRhKytdID0ga2V5OwogICAgICBfZGF0YVtfdXNlZERhdGErK10gPSB2YWx1ZTsKICAgIH0KICB9CgogIC8vIElmIGtleSBpcyBwcmVzZW50LCByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgdmFsdWUgaW4gX2RhdGEsIGVsc2UgcmV0dXJucwogIC8vIHRoZSBuZWdhdGVkIGluc2VydGlvbiBwb2ludCBpbiBfaW5kZXguCiAgaW50IF9maW5kVmFsdWVPckluc2VydFBvaW50KEsga2V5LCBpbnQgZnVsbEhhc2gsIGludCBoYXNoUGF0dGVybiwgaW50IHNpemUpIHsKICAgIGZpbmFsIGludCBzaXplTWFzayA9IHNpemUgLSAxOwogICAgZmluYWwgaW50IG1heEVudHJpZXMgPSBzaXplID4+IDE7CiAgICBpbnQgaSA9IF9IYXNoQmFzZS5fZmlyc3RQcm9iZShmdWxsSGFzaCwgc2l6ZU1hc2spOwogICAgaW50IGZpcnN0RGVsZXRlZCA9IC0xOwogICAgaW50IHBhaXIgPSBfaW5kZXhbaV07CiAgICB3aGlsZSAocGFpciAhPSBfSGFzaEJhc2UuX1VOVVNFRF9QQUlSKSB7CiAgICAgIGlmIChwYWlyID09IF9IYXNoQmFzZS5fREVMRVRFRF9QQUlSKSB7CiAgICAgICAgaWYgKGZpcnN0RGVsZXRlZCA8IDApIHsKICAgICAgICAgIGZpcnN0RGVsZXRlZCA9IGk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGZpbmFsIGludCBlbnRyeSA9IGhhc2hQYXR0ZXJuIF4gcGFpcjsKICAgICAgICBpZiAoZW50cnkgPCBtYXhFbnRyaWVzKSB7CiAgICAgICAgICBmaW5hbCBpbnQgZCA9IGVudHJ5IDw8IDE7CiAgICAgICAgICBpZiAoX2VxdWFscyhrZXksIF9kYXRhW2RdKSkgewogICAgICAgICAgICByZXR1cm4gZCArIDE7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGkgPSBfSGFzaEJhc2UuX25leHRQcm9iZShpLCBzaXplTWFzayk7CiAgICAgIHBhaXIgPSBfaW5kZXhbaV07CiAgICB9CiAgICByZXR1cm4gZmlyc3REZWxldGVkID49IDAgPyAtZmlyc3REZWxldGVkIDogLWk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShLIGtleSwgViB2YWx1ZSkgewogICAgZmluYWwgaW50IHNpemUgPSBfaW5kZXgubGVuZ3RoOwogICAgZmluYWwgaW50IGZ1bGxIYXNoID0gX2hhc2hDb2RlKGtleSk7CiAgICBmaW5hbCBpbnQgaGFzaFBhdHRlcm4gPSBfSGFzaEJhc2UuX2hhc2hQYXR0ZXJuKGZ1bGxIYXNoLCBfaGFzaE1hc2ssIHNpemUpOwogICAgZmluYWwgaW50IGQgPSBfZmluZFZhbHVlT3JJbnNlcnRQb2ludChrZXksIGZ1bGxIYXNoLCBoYXNoUGF0dGVybiwgc2l6ZSk7CiAgICBpZiAoZCA+IDApIHsKICAgICAgX2RhdGFbZF0gPSB2YWx1ZTsKICAgIH0gZWxzZSB7CiAgICAgIGZpbmFsIGludCBpID0gLWQ7CiAgICAgIF9pbnNlcnQoa2V5LCB2YWx1ZSwgaGFzaFBhdHRlcm4sIGkpOwogICAgfQogIH0KCiAgViBwdXRJZkFic2VudChLIGtleSwgViBpZkFic2VudCgpKSB7CiAgICBmaW5hbCBpbnQgc2l6ZSA9IF9pbmRleC5sZW5ndGg7CiAgICBmaW5hbCBpbnQgZnVsbEhhc2ggPSBfaGFzaENvZGUoa2V5KTsKICAgIGZpbmFsIGludCBoYXNoUGF0dGVybiA9IF9IYXNoQmFzZS5faGFzaFBhdHRlcm4oZnVsbEhhc2gsIF9oYXNoTWFzaywgc2l6ZSk7CiAgICBmaW5hbCBpbnQgZCA9IF9maW5kVmFsdWVPckluc2VydFBvaW50KGtleSwgZnVsbEhhc2gsIGhhc2hQYXR0ZXJuLCBzaXplKTsKICAgIGlmIChkID4gMCkgewogICAgICByZXR1cm4gX2RhdGFbZF07CiAgICB9CiAgICAvLyAnaWZBYnNlbnQnIGlzIGFsbG93ZWQgdG8gbW9kaWZ5IHRoZSBtYXAuCiAgICBMaXN0IG9sZERhdGEgPSBfZGF0YTsKICAgIGludCBvbGRDaGVja1N1bSA9IF9jaGVja1N1bTsKICAgIFYgdmFsdWUgPSBpZkFic2VudCgpOwogICAgaWYgKF9pc01vZGlmaWVkU2luY2Uob2xkRGF0YSwgb2xkQ2hlY2tTdW0pKSB7CiAgICAgIHRoaXNba2V5XSA9IHZhbHVlOwogICAgfSBlbHNlIHsKICAgICAgZmluYWwgaW50IGkgPSAtZDsKICAgICAgX2luc2VydChrZXksIHZhbHVlLCBoYXNoUGF0dGVybiwgaSk7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBWIHJlbW92ZShPYmplY3Qga2V5KSB7CiAgICBmaW5hbCBpbnQgc2l6ZSA9IF9pbmRleC5sZW5ndGg7CiAgICBmaW5hbCBpbnQgc2l6ZU1hc2sgPSBzaXplIC0gMTsKICAgIGZpbmFsIGludCBtYXhFbnRyaWVzID0gc2l6ZSA+PiAxOwogICAgZmluYWwgaW50IGZ1bGxIYXNoID0gX2hhc2hDb2RlKGtleSk7CiAgICBmaW5hbCBpbnQgaGFzaFBhdHRlcm4gPSBfSGFzaEJhc2UuX2hhc2hQYXR0ZXJuKGZ1bGxIYXNoLCBfaGFzaE1hc2ssIHNpemUpOwogICAgaW50IGkgPSBfSGFzaEJhc2UuX2ZpcnN0UHJvYmUoZnVsbEhhc2gsIHNpemVNYXNrKTsKICAgIGludCBwYWlyID0gX2luZGV4W2ldOwogICAgd2hpbGUgKHBhaXIgIT0gX0hhc2hCYXNlLl9VTlVTRURfUEFJUikgewogICAgICBpZiAocGFpciAhPSBfSGFzaEJhc2UuX0RFTEVURURfUEFJUikgewogICAgICAgIGZpbmFsIGludCBlbnRyeSA9IGhhc2hQYXR0ZXJuIF4gcGFpcjsKICAgICAgICBpZiAoZW50cnkgPCBtYXhFbnRyaWVzKSB7CiAgICAgICAgICBmaW5hbCBpbnQgZCA9IGVudHJ5IDw8IDE7CiAgICAgICAgICBpZiAoX2VxdWFscyhrZXksIF9kYXRhW2RdKSkgewogICAgICAgICAgICBfaW5kZXhbaV0gPSBfSGFzaEJhc2UuX0RFTEVURURfUEFJUjsKICAgICAgICAgICAgX0hhc2hCYXNlLl9zZXREZWxldGVkQXQoX2RhdGEsIGQpOwogICAgICAgICAgICBWIHZhbHVlID0gX2RhdGFbZCArIDFdOwogICAgICAgICAgICBfSGFzaEJhc2UuX3NldERlbGV0ZWRBdChfZGF0YSwgZCArIDEpOwogICAgICAgICAgICArK19kZWxldGVkS2V5czsKICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpID0gX0hhc2hCYXNlLl9uZXh0UHJvYmUoaSwgc2l6ZU1hc2spOwogICAgICBwYWlyID0gX2luZGV4W2ldOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvLyBJZiBrZXkgaXMgYWJzZW50LCByZXR1cm4gX2RhdGEgKHdoaWNoIGlzIG5ldmVyIGEgdmFsdWUpLgogIE9iamVjdCBfZ2V0VmFsdWVPckRhdGEoT2JqZWN0IGtleSkgewogICAgZmluYWwgaW50IHNpemUgPSBfaW5kZXgubGVuZ3RoOwogICAgZmluYWwgaW50IHNpemVNYXNrID0gc2l6ZSAtIDE7CiAgICBmaW5hbCBpbnQgbWF4RW50cmllcyA9IHNpemUgPj4gMTsKICAgIGZpbmFsIGludCBmdWxsSGFzaCA9IF9oYXNoQ29kZShrZXkpOwogICAgZmluYWwgaW50IGhhc2hQYXR0ZXJuID0gX0hhc2hCYXNlLl9oYXNoUGF0dGVybihmdWxsSGFzaCwgX2hhc2hNYXNrLCBzaXplKTsKICAgIGludCBpID0gX0hhc2hCYXNlLl9maXJzdFByb2JlKGZ1bGxIYXNoLCBzaXplTWFzayk7CiAgICBpbnQgcGFpciA9IF9pbmRleFtpXTsKICAgIHdoaWxlIChwYWlyICE9IF9IYXNoQmFzZS5fVU5VU0VEX1BBSVIpIHsKICAgICAgaWYgKHBhaXIgIT0gX0hhc2hCYXNlLl9ERUxFVEVEX1BBSVIpIHsKICAgICAgICBmaW5hbCBpbnQgZW50cnkgPSBoYXNoUGF0dGVybiBeIHBhaXI7CiAgICAgICAgaWYgKGVudHJ5IDwgbWF4RW50cmllcykgewogICAgICAgICAgZmluYWwgaW50IGQgPSBlbnRyeSA8PCAxOwogICAgICAgICAgaWYgKF9lcXVhbHMoa2V5LCBfZGF0YVtkXSkpIHsKICAgICAgICAgICAgcmV0dXJuIF9kYXRhW2QgKyAxXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaSA9IF9IYXNoQmFzZS5fbmV4dFByb2JlKGksIHNpemVNYXNrKTsKICAgICAgcGFpciA9IF9pbmRleFtpXTsKICAgIH0KICAgIHJldHVybiBfZGF0YTsKICB9CgogIGJvb2wgY29udGFpbnNLZXkoT2JqZWN0IGtleSkgPT4gIWlkZW50aWNhbChfZGF0YSwgX2dldFZhbHVlT3JEYXRhKGtleSkpOwoKICBWIG9wZXJhdG9yIFtdKE9iamVjdCBrZXkpIHsKICAgIHZhciB2ID0gX2dldFZhbHVlT3JEYXRhKGtleSk7CiAgICByZXR1cm4gaWRlbnRpY2FsKF9kYXRhLCB2KSA/IG51bGwgOiBpbnRlcm5hbC51bnNhZmVDYXN0PFY+KHYpOwogIH0KCiAgYm9vbCBjb250YWluc1ZhbHVlKE9iamVjdCB2YWx1ZSkgewogICAgZm9yICh2YXIgdiBpbiB2YWx1ZXMpIHsKICAgICAgLy8gU3BlYy4gc2F5cyB0aGlzIHNob3VsZCBhbHdheXMgdXNlICI9PSIsIGFsc28gZm9yIGlkZW50aXR5IG1hcHMsIGV0Yy4KICAgICAgaWYgKHYgPT0gdmFsdWUpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihLIGtleSwgViB2YWx1ZSkpIHsKICAgIHZhciBraSA9IGtleXMuaXRlcmF0b3I7CiAgICB2YXIgdmkgPSB2YWx1ZXMuaXRlcmF0b3I7CiAgICB3aGlsZSAoa2kubW92ZU5leHQoKSkgewogICAgICB2aS5tb3ZlTmV4dCgpOwogICAgICBmKGtpLmN1cnJlbnQsIHZpLmN1cnJlbnQpOwogICAgfQogIH0KCiAgSXRlcmFibGU8Sz4gZ2V0IGtleXMgPT4KICAgICAgbmV3IF9Db21wYWN0SXRlcmFibGU8Sz4odGhpcywgX2RhdGEsIF91c2VkRGF0YSwgLTIsIDIpOwogIEl0ZXJhYmxlPFY+IGdldCB2YWx1ZXMgPT4KICAgICAgbmV3IF9Db21wYWN0SXRlcmFibGU8Vj4odGhpcywgX2RhdGEsIF91c2VkRGF0YSwgLTEsIDIpOwp9CgpjbGFzcyBfQ29tcGFjdExpbmtlZElkZW50aXR5SGFzaE1hcDxLLCBWPiBleHRlbmRzIF9IYXNoRmllbGRCYXNlCiAgICB3aXRoCiAgICAgICAgTWFwTWl4aW48SywgVj4sCiAgICAgICAgX0xpbmtlZEhhc2hNYXBNaXhpbjxLLCBWPiwKICAgICAgICBfSGFzaEJhc2UsCiAgICAgICAgX0lkZW50aWNhbEFuZElkZW50aXR5SGFzaENvZGUKICAgIGltcGxlbWVudHMgTGlua2VkSGFzaE1hcDxLLCBWPiB7CiAgX0NvbXBhY3RMaW5rZWRJZGVudGl0eUhhc2hNYXAoKSA6IHN1cGVyKF9IYXNoQmFzZS5fSU5JVElBTF9JTkRFWF9TSVpFKTsKfQoKY2xhc3MgX0NvbXBhY3RMaW5rZWRDdXN0b21IYXNoTWFwPEssIFY+IGV4dGVuZHMgX0hhc2hGaWVsZEJhc2UKICAgIHdpdGggTWFwTWl4aW48SywgVj4sIF9MaW5rZWRIYXNoTWFwTWl4aW48SywgVj4sIF9IYXNoQmFzZQogICAgaW1wbGVtZW50cyBMaW5rZWRIYXNoTWFwPEssIFY+IHsKICBmaW5hbCBfZXF1YWxpdHk7CiAgZmluYWwgX2hhc2hlcjsKICBmaW5hbCBfdmFsaWRLZXk7CgogIC8vIFRPRE8oa29kYSk6IEFzayBnYnJhY2hhIHdoeSBJIGNhbm5vdCBoYXZlIGZpZWxkcyBfZXF1YWxzL19oYXNoQ29kZS4KICBpbnQgX2hhc2hDb2RlKGUpID0+IF9oYXNoZXIoZSk7CiAgYm9vbCBfZXF1YWxzKGUxLCBlMikgPT4gX2VxdWFsaXR5KGUxLCBlMik7CgogIGJvb2wgY29udGFpbnNLZXkoT2JqZWN0IG8pID0+IF92YWxpZEtleShvKSA/IHN1cGVyLmNvbnRhaW5zS2V5KG8pIDogZmFsc2U7CiAgViBvcGVyYXRvciBbXShPYmplY3QgbykgPT4gX3ZhbGlkS2V5KG8pID8gc3VwZXJbb10gOiBudWxsOwogIFYgcmVtb3ZlKE9iamVjdCBvKSA9PiBfdmFsaWRLZXkobykgPyBzdXBlci5yZW1vdmUobykgOiBudWxsOwoKICBfQ29tcGFjdExpbmtlZEN1c3RvbUhhc2hNYXAodGhpcy5fZXF1YWxpdHksIHRoaXMuX2hhc2hlciwgdmFsaWRLZXkpCiAgICAgIDogX3ZhbGlkS2V5ID0gKHZhbGlkS2V5ICE9IG51bGwpID8gdmFsaWRLZXkgOiBuZXcgX1R5cGVUZXN0PEs+KCkudGVzdCwKICAgICAgICBzdXBlcihfSGFzaEJhc2UuX0lOSVRJQUxfSU5ERVhfU0laRSk7Cn0KCi8vIEl0ZXJhdGVzIHRocm91Z2ggX2RhdGFbX29mZnNldCArIF9zdGVwXSwgX2RhdGFbX29mZnNldCArIDIqX3N0ZXBdLCAuLi4KLy8gYW5kIGNoZWNrcyBmb3IgY29uY3VycmVudCBtb2RpZmljYXRpb24uCmNsYXNzIF9Db21wYWN0SXRlcmFibGU8RT4gZXh0ZW5kcyBJdGVyYWJsZTxFPiB7CiAgZmluYWwgX0hhc2hCYXNlIF90YWJsZTsKICBmaW5hbCBMaXN0IF9kYXRhOwogIGZpbmFsIGludCBfbGVuOwogIGZpbmFsIGludCBfb2Zmc2V0OwogIGZpbmFsIGludCBfc3RlcDsKCiAgX0NvbXBhY3RJdGVyYWJsZSgKICAgICAgdGhpcy5fdGFibGUsIHRoaXMuX2RhdGEsIHRoaXMuX2xlbiwgdGhpcy5fb2Zmc2V0LCB0aGlzLl9zdGVwKTsKCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yID0+CiAgICAgIG5ldyBfQ29tcGFjdEl0ZXJhdG9yPEU+KF90YWJsZSwgX2RhdGEsIF9sZW4sIF9vZmZzZXQsIF9zdGVwKTsKCiAgaW50IGdldCBsZW5ndGggPT4gX3RhYmxlLmxlbmd0aDsKICBib29sIGdldCBpc0VtcHR5ID0+IGxlbmd0aCA9PSAwOwogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gIWlzRW1wdHk7Cn0KCmNsYXNzIF9Db21wYWN0SXRlcmF0b3I8RT4gaW1wbGVtZW50cyBJdGVyYXRvcjxFPiB7CiAgZmluYWwgX0hhc2hCYXNlIF90YWJsZTsKICBmaW5hbCBMaXN0IF9kYXRhOwogIGZpbmFsIGludCBfbGVuOwogIGludCBfb2Zmc2V0OwogIGZpbmFsIGludCBfc3RlcDsKICBmaW5hbCBpbnQgX2NoZWNrU3VtOwogIEUgY3VycmVudDsKCiAgX0NvbXBhY3RJdGVyYXRvcigKICAgICAgX0hhc2hCYXNlIHRhYmxlLCB0aGlzLl9kYXRhLCB0aGlzLl9sZW4sIHRoaXMuX29mZnNldCwgdGhpcy5fc3RlcCkKICAgICAgOiBfdGFibGUgPSB0YWJsZSwKICAgICAgICBfY2hlY2tTdW0gPSB0YWJsZS5fY2hlY2tTdW07CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoX3RhYmxlLl9pc01vZGlmaWVkU2luY2UoX2RhdGEsIF9jaGVja1N1bSkpIHsKICAgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcihfdGFibGUpOwogICAgfQogICAgZG8gewogICAgICBfb2Zmc2V0ICs9IF9zdGVwOwogICAgfSB3aGlsZSAoX29mZnNldCA8IF9sZW4gJiYgX0hhc2hCYXNlLl9pc0RlbGV0ZWQoX2RhdGEsIF9kYXRhW19vZmZzZXRdKSk7CiAgICBpZiAoX29mZnNldCA8IF9sZW4pIHsKICAgICAgY3VycmVudCA9IGludGVybmFsLnVuc2FmZUNhc3Q8RT4oX2RhdGFbX29mZnNldF0pOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIGN1cnJlbnQgPSBudWxsOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9CgovLyBTZXQgaW1wbGVtZW50YXRpb24sIGFuYWxvZ291cyB0byBfQ29tcGFjdExpbmtlZEhhc2hNYXAuCmNsYXNzIF9Db21wYWN0TGlua2VkSGFzaFNldDxFPiBleHRlbmRzIF9IYXNoRmllbGRCYXNlCiAgICB3aXRoIF9IYXNoQmFzZSwgX09wZXJhdG9yRXF1YWxzQW5kSGFzaENvZGUsIFNldE1peGluPEU+CiAgICBpbXBsZW1lbnRzIExpbmtlZEhhc2hTZXQ8RT4gewogIF9Db21wYWN0TGlua2VkSGFzaFNldCgpIDogc3VwZXIoX0hhc2hCYXNlLl9JTklUSUFMX0lOREVYX1NJWkUgPj4gMSkgewogICAgYXNzZXJ0KF9IYXNoQmFzZS5fVU5VU0VEX1BBSVIgPT0gMCk7CiAgfQoKICBzdGF0aWMgU2V0PFI+IF9uZXdFbXB0eTxSPigpID0+IG5ldyBfQ29tcGFjdExpbmtlZEhhc2hTZXQ8Uj4oKTsKCiAgU2V0PFI+IGNhc3Q8Uj4oKSA9PiBTZXQuY2FzdEZyb208RSwgUj4odGhpcywgbmV3U2V0OiBfbmV3RW1wdHkpOwogIGludCBnZXQgbGVuZ3RoID0+IF91c2VkRGF0YSAtIF9kZWxldGVkS2V5czsKCiAgRSBnZXQgZmlyc3QgewogICAgZm9yIChpbnQgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgX3VzZWREYXRhOyBvZmZzZXQrKykgewogICAgICBPYmplY3QgY3VycmVudCA9IF9kYXRhW29mZnNldF07CiAgICAgIGlmICghX0hhc2hCYXNlLl9pc0RlbGV0ZWQoX2RhdGEsIGN1cnJlbnQpKSB7CiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7CiAgICAgIH0KICAgIH0KICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBnZXQgbGFzdCB7CiAgICBmb3IgKGludCBvZmZzZXQgPSBfdXNlZERhdGEgLSAxOyBvZmZzZXQgPj0gMDsgb2Zmc2V0LS0pIHsKICAgICAgT2JqZWN0IGN1cnJlbnQgPSBfZGF0YVtvZmZzZXRdOwogICAgICBpZiAoIV9IYXNoQmFzZS5faXNEZWxldGVkKF9kYXRhLCBjdXJyZW50KSkgewogICAgICAgIHJldHVybiBjdXJyZW50OwogICAgICB9CiAgICB9CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIHZvaWQgX3JlaGFzaCgpIHsKICAgIGlmICgoX2RlbGV0ZWRLZXlzIDw8IDEpID4gX3VzZWREYXRhKSB7CiAgICAgIF9pbml0KF9pbmRleC5sZW5ndGgsIF9oYXNoTWFzaywgX2RhdGEsIF91c2VkRGF0YSk7CiAgICB9IGVsc2UgewogICAgICBfaW5pdChfaW5kZXgubGVuZ3RoIDw8IDEsIF9oYXNoTWFzayA+PiAxLCBfZGF0YSwgX3VzZWREYXRhKTsKICAgIH0KICB9CgogIHZvaWQgY2xlYXIoKSB7CiAgICBpZiAoIWlzRW1wdHkpIHsKICAgICAgX2luaXQoX0hhc2hCYXNlLl9JTklUSUFMX0lOREVYX1NJWkUsIF9oYXNoTWFzaywgbnVsbCwgMCk7CiAgICB9CiAgfQoKICB2b2lkIF9pbml0KGludCBzaXplLCBpbnQgaGFzaE1hc2ssIExpc3Qgb2xkRGF0YSwgaW50IG9sZFVzZWQpIHsKICAgIF9pbmRleCA9IG5ldyBVaW50MzJMaXN0KHNpemUpOwogICAgX2hhc2hNYXNrID0gaGFzaE1hc2s7CiAgICBfZGF0YSA9IG5ldyBMaXN0KHNpemUgPj4gMSk7CiAgICBfdXNlZERhdGEgPSAwOwogICAgX2RlbGV0ZWRLZXlzID0gMDsKICAgIGlmIChvbGREYXRhICE9IG51bGwpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvbGRVc2VkOyBpICs9IDEpIHsKICAgICAgICB2YXIga2V5ID0gb2xkRGF0YVtpXTsKICAgICAgICBpZiAoIV9IYXNoQmFzZS5faXNEZWxldGVkKG9sZERhdGEsIGtleSkpIHsKICAgICAgICAgIGFkZChrZXkpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgYm9vbCBhZGQoRSBrZXkpIHsKICAgIGZpbmFsIGludCBzaXplID0gX2luZGV4Lmxlbmd0aDsKICAgIGZpbmFsIGludCBzaXplTWFzayA9IHNpemUgLSAxOwogICAgZmluYWwgaW50IG1heEVudHJpZXMgPSBzaXplID4+IDE7CiAgICBmaW5hbCBpbnQgZnVsbEhhc2ggPSBfaGFzaENvZGUoa2V5KTsKICAgIGZpbmFsIGludCBoYXNoUGF0dGVybiA9IF9IYXNoQmFzZS5faGFzaFBhdHRlcm4oZnVsbEhhc2gsIF9oYXNoTWFzaywgc2l6ZSk7CiAgICBpbnQgaSA9IF9IYXNoQmFzZS5fZmlyc3RQcm9iZShmdWxsSGFzaCwgc2l6ZU1hc2spOwogICAgaW50IGZpcnN0RGVsZXRlZCA9IC0xOwogICAgaW50IHBhaXIgPSBfaW5kZXhbaV07CiAgICB3aGlsZSAocGFpciAhPSBfSGFzaEJhc2UuX1VOVVNFRF9QQUlSKSB7CiAgICAgIGlmIChwYWlyID09IF9IYXNoQmFzZS5fREVMRVRFRF9QQUlSKSB7CiAgICAgICAgaWYgKGZpcnN0RGVsZXRlZCA8IDApIHsKICAgICAgICAgIGZpcnN0RGVsZXRlZCA9IGk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGZpbmFsIGludCBkID0gaGFzaFBhdHRlcm4gXiBwYWlyOwogICAgICAgIGlmIChkIDwgbWF4RW50cmllcyAmJiBfZXF1YWxzKGtleSwgX2RhdGFbZF0pKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIGkgPSBfSGFzaEJhc2UuX25leHRQcm9iZShpLCBzaXplTWFzayk7CiAgICAgIHBhaXIgPSBfaW5kZXhbaV07CiAgICB9CiAgICBpZiAoX3VzZWREYXRhID09IF9kYXRhLmxlbmd0aCkgewogICAgICBfcmVoYXNoKCk7CiAgICAgIGFkZChrZXkpOwogICAgfSBlbHNlIHsKICAgICAgZmluYWwgaW50IGluc2VydGlvblBvaW50ID0gKGZpcnN0RGVsZXRlZCA+PSAwKSA/IGZpcnN0RGVsZXRlZCA6IGk7CiAgICAgIGFzc2VydCgxIDw9IGhhc2hQYXR0ZXJuICYmIGhhc2hQYXR0ZXJuIDwgKDEgPDwgMzIpKTsKICAgICAgYXNzZXJ0KChoYXNoUGF0dGVybiAmIF91c2VkRGF0YSkgPT0gMCk7CiAgICAgIF9pbmRleFtpbnNlcnRpb25Qb2ludF0gPSBoYXNoUGF0dGVybiB8IF91c2VkRGF0YTsKICAgICAgX2RhdGFbX3VzZWREYXRhKytdID0ga2V5OwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLyBJZiBrZXkgaXMgYWJzZW50LCByZXR1cm4gX2RhdGEgKHdoaWNoIGlzIG5ldmVyIGEgdmFsdWUpLgogIE9iamVjdCBfZ2V0S2V5T3JEYXRhKE9iamVjdCBrZXkpIHsKICAgIGZpbmFsIGludCBzaXplID0gX2luZGV4Lmxlbmd0aDsKICAgIGZpbmFsIGludCBzaXplTWFzayA9IHNpemUgLSAxOwogICAgZmluYWwgaW50IG1heEVudHJpZXMgPSBzaXplID4+IDE7CiAgICBmaW5hbCBpbnQgZnVsbEhhc2ggPSBfaGFzaENvZGUoa2V5KTsKICAgIGZpbmFsIGludCBoYXNoUGF0dGVybiA9IF9IYXNoQmFzZS5faGFzaFBhdHRlcm4oZnVsbEhhc2gsIF9oYXNoTWFzaywgc2l6ZSk7CiAgICBpbnQgaSA9IF9IYXNoQmFzZS5fZmlyc3RQcm9iZShmdWxsSGFzaCwgc2l6ZU1hc2spOwogICAgaW50IHBhaXIgPSBfaW5kZXhbaV07CiAgICB3aGlsZSAocGFpciAhPSBfSGFzaEJhc2UuX1VOVVNFRF9QQUlSKSB7CiAgICAgIGlmIChwYWlyICE9IF9IYXNoQmFzZS5fREVMRVRFRF9QQUlSKSB7CiAgICAgICAgZmluYWwgaW50IGQgPSBoYXNoUGF0dGVybiBeIHBhaXI7CiAgICAgICAgaWYgKGQgPCBtYXhFbnRyaWVzICYmIF9lcXVhbHMoa2V5LCBfZGF0YVtkXSkpIHsKICAgICAgICAgIHJldHVybiBfZGF0YVtkXTsgLy8gTm90ZTogTXVzdCByZXR1cm4gdGhlIGV4aXN0aW5nIGtleS4KICAgICAgICB9CiAgICAgIH0KICAgICAgaSA9IF9IYXNoQmFzZS5fbmV4dFByb2JlKGksIHNpemVNYXNrKTsKICAgICAgcGFpciA9IF9pbmRleFtpXTsKICAgIH0KICAgIHJldHVybiBfZGF0YTsKICB9CgogIEUgbG9va3VwKE9iamVjdCBrZXkpIHsKICAgIHZhciBrID0gX2dldEtleU9yRGF0YShrZXkpOwogICAgcmV0dXJuIGlkZW50aWNhbChfZGF0YSwgaykgPyBudWxsIDogazsKICB9CgogIGJvb2wgY29udGFpbnMoT2JqZWN0IGtleSkgPT4gIWlkZW50aWNhbChfZGF0YSwgX2dldEtleU9yRGF0YShrZXkpKTsKCiAgYm9vbCByZW1vdmUoT2JqZWN0IGtleSkgewogICAgZmluYWwgaW50IHNpemUgPSBfaW5kZXgubGVuZ3RoOwogICAgZmluYWwgaW50IHNpemVNYXNrID0gc2l6ZSAtIDE7CiAgICBmaW5hbCBpbnQgbWF4RW50cmllcyA9IHNpemUgPj4gMTsKICAgIGZpbmFsIGludCBmdWxsSGFzaCA9IF9oYXNoQ29kZShrZXkpOwogICAgZmluYWwgaW50IGhhc2hQYXR0ZXJuID0gX0hhc2hCYXNlLl9oYXNoUGF0dGVybihmdWxsSGFzaCwgX2hhc2hNYXNrLCBzaXplKTsKICAgIGludCBpID0gX0hhc2hCYXNlLl9maXJzdFByb2JlKGZ1bGxIYXNoLCBzaXplTWFzayk7CiAgICBpbnQgcGFpciA9IF9pbmRleFtpXTsKICAgIHdoaWxlIChwYWlyICE9IF9IYXNoQmFzZS5fVU5VU0VEX1BBSVIpIHsKICAgICAgaWYgKHBhaXIgIT0gX0hhc2hCYXNlLl9ERUxFVEVEX1BBSVIpIHsKICAgICAgICBmaW5hbCBpbnQgZCA9IGhhc2hQYXR0ZXJuIF4gcGFpcjsKICAgICAgICBpZiAoZCA8IG1heEVudHJpZXMgJiYgX2VxdWFscyhrZXksIF9kYXRhW2RdKSkgewogICAgICAgICAgX2luZGV4W2ldID0gX0hhc2hCYXNlLl9ERUxFVEVEX1BBSVI7CiAgICAgICAgICBfSGFzaEJhc2UuX3NldERlbGV0ZWRBdChfZGF0YSwgZCk7CiAgICAgICAgICArK19kZWxldGVkS2V5czsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBpID0gX0hhc2hCYXNlLl9uZXh0UHJvYmUoaSwgc2l6ZU1hc2spOwogICAgICBwYWlyID0gX2luZGV4W2ldOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yID0+CiAgICAgIG5ldyBfQ29tcGFjdEl0ZXJhdG9yPEU+KHRoaXMsIF9kYXRhLCBfdXNlZERhdGEsIC0xLCAxKTsKCiAgLy8gUmV0dXJucyBhIHNldCBvZiB0aGUgc2FtZSB0eXBlLCBhbHRob3VnaCB0aGlzCiAgLy8gaXMgbm90IHJlcXVpcmVkIGJ5IHRoZSBzcGVjLiAoRm9yIGluc3RhbmNlLCBhbHdheXMgdXNpbmcgYW4gaWRlbnRpdHkgc2V0CiAgLy8gd291bGQgYmUgdGVjaG5pY2FsbHkgY29ycmVjdCwgYWxiZWl0IHN1cnByaXNpbmcuKQogIFNldDxFPiB0b1NldCgpID0+IG5ldyBfQ29tcGFjdExpbmtlZEhhc2hTZXQ8RT4oKS4uYWRkQWxsKHRoaXMpOwoKICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgW19yZWhhc2hPYmplY3RzXSAoc2VlIGFib3ZlKS4KICB2b2lkIF9yZWdlbmVyYXRlSW5kZXgoKSB7CiAgICBfcmVoYXNoKCk7CiAgfQp9CgpjbGFzcyBfQ29tcGFjdExpbmtlZElkZW50aXR5SGFzaFNldDxFPiBleHRlbmRzIF9Db21wYWN0TGlua2VkSGFzaFNldDxFPgogICAgd2l0aCBfSWRlbnRpY2FsQW5kSWRlbnRpdHlIYXNoQ29kZSB7CiAgU2V0PEU+IHRvU2V0KCkgPT4gbmV3IF9Db21wYWN0TGlua2VkSWRlbnRpdHlIYXNoU2V0PEU+KCkuLmFkZEFsbCh0aGlzKTsKCiAgc3RhdGljIFNldDxSPiBfbmV3RW1wdHk8Uj4oKSA9PiBuZXcgX0NvbXBhY3RMaW5rZWRJZGVudGl0eUhhc2hTZXQ8Uj4oKTsKCiAgU2V0PFI+IGNhc3Q8Uj4oKSA9PiBTZXQuY2FzdEZyb208RSwgUj4odGhpcywgbmV3U2V0OiBfbmV3RW1wdHkpOwp9CgpjbGFzcyBfQ29tcGFjdExpbmtlZEN1c3RvbUhhc2hTZXQ8RT4gZXh0ZW5kcyBfQ29tcGFjdExpbmtlZEhhc2hTZXQ8RT4gewogIGZpbmFsIF9lcXVhbGl0eTsKICBmaW5hbCBfaGFzaGVyOwogIGZpbmFsIF92YWxpZEtleTsKCiAgaW50IF9oYXNoQ29kZShlKSA9PiBfaGFzaGVyKGUpOwogIGJvb2wgX2VxdWFscyhlMSwgZTIpID0+IF9lcXVhbGl0eShlMSwgZTIpOwoKICBib29sIGNvbnRhaW5zKE9iamVjdCBvKSA9PiBfdmFsaWRLZXkobykgPyBzdXBlci5jb250YWlucyhvKSA6IGZhbHNlOwogIEUgbG9va3VwKE9iamVjdCBvKSA9PiBfdmFsaWRLZXkobykgPyBzdXBlci5sb29rdXAobykgOiBudWxsOwogIGJvb2wgcmVtb3ZlKE9iamVjdCBvKSA9PiBfdmFsaWRLZXkobykgPyBzdXBlci5yZW1vdmUobykgOiBmYWxzZTsKCiAgX0NvbXBhY3RMaW5rZWRDdXN0b21IYXNoU2V0KHRoaXMuX2VxdWFsaXR5LCB0aGlzLl9oYXNoZXIsIHZhbGlkS2V5KQogICAgICA6IF92YWxpZEtleSA9ICh2YWxpZEtleSAhPSBudWxsKSA/IHZhbGlkS2V5IDogbmV3IF9UeXBlVGVzdDxFPigpLnRlc3Q7CgogIFNldDxSPiBjYXN0PFI+KCkgPT4gU2V0LmNhc3RGcm9tPEUsIFI+KHRoaXMpOwogIFNldDxFPiB0b1NldCgpID0+CiAgICAgIG5ldyBfQ29tcGFjdExpbmtlZEN1c3RvbUhhc2hTZXQ8RT4oX2VxdWFsaXR5LCBfaGFzaGVyLCBfdmFsaWRLZXkpCiAgICAgICAgLi5hZGRBbGwodGhpcyk7Cn0KgpgATk48ASQBTgFRMyIkJSUjBAIBIFA6TkshUSJFATpRAU0OAUMVAR0YAU1RJEICAUkdQR45HkUBNB44HkQBNR4xHj0BNB44HkQBNB4+HkoCAUNJNEEyTUxOQUssSQFFJSYBQk0YMy0cJicEAUIwQ0cEARU3J0gmBAFEATk6IzAUBAFNMDE6QAESAgEjIiQCASYrLQIBSho3CRgjEyMlHTxPNRMWBAIBQBQYFTgBNSMjARMrKU05DUtDBgQBERRABgQBS0IkKSMaHBMWGy0eM1EmCggGBAE8HCscPyMTKyUGBAE5JREZDTsoKicgIgYEAU4sUCMmNxsaLS0gHAoPLiIkKBoMCggtGAYzBAEmJClPTREYDRgrBgQBJyQpT00RFwYwGiEaMhkNGCsGEgQBGSQjJilPNxotLS4iJCgxLyQzHBoMCggtGAYRBAE+JyQjJilPNxotLS4iJCghDAoILRgGEgQBSwEeIkMEASUcThgVCAYSBAEpHB4cFSEGBAEaPhw+AgFBCRgjEyYlSgIBPz4lExETAUkiLQFNPT8BRk0uAgFKKzAaFBIVEwEURQEeRAEjIyMCATMaFBIPExcNARRIGCUBFDU1BgkYTRo4Ew0WFAYEAgE7NjwiSCkEAUIBQy4BEDkmMxgIBiwEAQ8+JjMYCAYsBAETKzkNQwYEAREUQAYEAUIjGiETFhstHjMUCggGBAEUJCMmKU83GxotLSAcCg8qOBgKCC0YBiUREA1JOy44IAYRBAE+JSQjJilPNxotLSo4QgoILRgGEgQBGSArBAFGARwkIyYpTzcaLS0qOC8tGhcKCC0YBhIEAR4+ATNON0IBPBwPBAIBSClKAUoBQwIBSBMREwEiLQFHP0MBRk0BMBRIGAIBJ2RhcnQ6Y29sbGVjdGlvbi1wYXRjaC9jb21wYWN0X2hhc2guZGFydDBvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29sbGVjdGlvbi9tYXBzLmRhcnStYC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29sbGVjdGlvbjsKCi8vLyBCYXNlIGNsYXNzIGZvciBpbXBsZW1lbnRpbmcgYSBbTWFwXS4KLy8vCi8vLyBUaGlzIGNsYXNzIGhhcyBhIGJhc2ljIGltcGxlbWVudGF0aW9uIG9mIGFsbCBidXQgZml2ZSBvZiB0aGUgbWVtYmVycyBvZgovLy8gW01hcF0uCi8vLyBBIGJhc2ljIGBNYXBgIGNsYXNzIGNhbiBiZSBpbXBsZW1lbnRlZCBieSBleHRlbmRpbmcgdGhpcyBjbGFzcyBhbmQKLy8vIGltcGxlbWVudGluZyBga2V5c2AsIGBvcGVyYXRvcltdYCwgYG9wZXJhdG9yW109YCwgYHJlbW92ZWAgYW5kIGBjbGVhcmAuCi8vLyBUaGUgcmVtYWluaW5nIG9wZXJhdGlvbnMgYXJlIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIHRoZXNlIGZpdmUuCi8vLwovLy8gVGhlIGBrZXlzYCBpdGVyYWJsZSBzaG91bGQgaGF2ZSBlZmZpY2llbnQgW0l0ZXJhYmxlLmxlbmd0aF0gYW5kCi8vLyBbSXRlcmFibGUuY29udGFpbnNdIG9wZXJhdGlvbnMsIGFuZCBpdCBzaG91bGQgY2F0Y2ggY29uY3VycmVudCBtb2RpZmljYXRpb25zCi8vLyBvZiB0aGUga2V5cyB3aGlsZSBpdGVyYXRpbmcuCi8vLwovLy8gQSBtb3JlIGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbiBpcyB1c3VhbGx5IHBvc3NpYmxlIGJ5IG92ZXJyaWRpbmcKLy8vIHNvbWUgb2YgdGhlIG90aGVyIG1lbWJlcnMgYXMgd2VsbC4KYWJzdHJhY3QgY2xhc3MgTWFwQmFzZTxLLCBWPiBleHRlbmRzIE1hcE1peGluPEssIFY+IHsKICBzdGF0aWMgU3RyaW5nIG1hcFRvU3RyaW5nKE1hcCBtKSB7CiAgICAvLyBSZXVzZXMgdGhlIGxpc3QgaW4gSXRlcmFibGVCYXNlIGZvciBkZXRlY3RpbmcgdG9TdHJpbmcgY3ljbGVzLgogICAgaWYgKF9pc1RvU3RyaW5nVmlzaXRpbmcobSkpIHsKICAgICAgcmV0dXJuICd7Li4ufSc7CiAgICB9CgogICAgdmFyIHJlc3VsdCA9IFN0cmluZ0J1ZmZlcigpOwogICAgdHJ5IHsKICAgICAgX3RvU3RyaW5nVmlzaXRpbmcuYWRkKG0pOwogICAgICByZXN1bHQud3JpdGUoJ3snKTsKICAgICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICAgIG0uZm9yRWFjaCgoaywgdikgewogICAgICAgIGlmICghZmlyc3QpIHsKICAgICAgICAgIHJlc3VsdC53cml0ZSgnLCAnKTsKICAgICAgICB9CiAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgICByZXN1bHQud3JpdGUoayk7CiAgICAgICAgcmVzdWx0LndyaXRlKCc6ICcpOwogICAgICAgIHJlc3VsdC53cml0ZSh2KTsKICAgICAgfSk7CiAgICAgIHJlc3VsdC53cml0ZSgnfScpOwogICAgfSBmaW5hbGx5IHsKICAgICAgYXNzZXJ0KGlkZW50aWNhbChfdG9TdHJpbmdWaXNpdGluZy5sYXN0LCBtKSk7CiAgICAgIF90b1N0cmluZ1Zpc2l0aW5nLnJlbW92ZUxhc3QoKTsKICAgIH0KCiAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiAgfQoKICBzdGF0aWMgX2lkKHgpID0+IHg7CgogIC8vLyBGaWxscyBhIFtNYXBdIHdpdGgga2V5L3ZhbHVlIHBhaXJzIGNvbXB1dGVkIGZyb20gW2l0ZXJhYmxlXS4KICAvLy8KICAvLy8gVGhpcyBtZXRob2QgaXMgdXNlZCBieSBbTWFwXSBjbGFzc2VzIGluIHRoZSBuYW1lZCBjb25zdHJ1Y3RvcgogIC8vLyBgZnJvbUl0ZXJhYmxlYC4KICBzdGF0aWMgdm9pZCBfZmlsbE1hcFdpdGhNYXBwZWRJdGVyYWJsZSgKICAgICAgTWFwIG1hcCwgSXRlcmFibGUgaXRlcmFibGUsIGtleShlbGVtZW50KSwgdmFsdWUoZWxlbWVudCkpIHsKICAgIGtleSA/Pz0gX2lkOwogICAgdmFsdWUgPz89IF9pZDsKCiAgICBmb3IgKHZhciBlbGVtZW50IGluIGl0ZXJhYmxlKSB7CiAgICAgIG1hcFtrZXkoZWxlbWVudCldID0gdmFsdWUoZWxlbWVudCk7CiAgICB9CiAgfQoKICAvLy8gRmlsbHMgYSBtYXAgYnkgYXNzb2NpYXRpbmcgdGhlIFtrZXlzXSB0byBbdmFsdWVzXS4KICAvLy8KICAvLy8gVGhpcyBtZXRob2QgaXMgdXNlZCBieSBbTWFwXSBjbGFzc2VzIGluIHRoZSBuYW1lZCBjb25zdHJ1Y3RvcgogIC8vLyBgZnJvbUl0ZXJhYmxlc2AuCiAgc3RhdGljIHZvaWQgX2ZpbGxNYXBXaXRoSXRlcmFibGVzKE1hcCBtYXAsIEl0ZXJhYmxlIGtleXMsIEl0ZXJhYmxlIHZhbHVlcykgewogICAgSXRlcmF0b3Iga2V5SXRlcmF0b3IgPSBrZXlzLml0ZXJhdG9yOwogICAgSXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IHZhbHVlcy5pdGVyYXRvcjsKCiAgICBib29sIGhhc05leHRLZXkgPSBrZXlJdGVyYXRvci5tb3ZlTmV4dCgpOwogICAgYm9vbCBoYXNOZXh0VmFsdWUgPSB2YWx1ZUl0ZXJhdG9yLm1vdmVOZXh0KCk7CgogICAgd2hpbGUgKGhhc05leHRLZXkgJiYgaGFzTmV4dFZhbHVlKSB7CiAgICAgIG1hcFtrZXlJdGVyYXRvci5jdXJyZW50XSA9IHZhbHVlSXRlcmF0b3IuY3VycmVudDsKICAgICAgaGFzTmV4dEtleSA9IGtleUl0ZXJhdG9yLm1vdmVOZXh0KCk7CiAgICAgIGhhc05leHRWYWx1ZSA9IHZhbHVlSXRlcmF0b3IubW92ZU5leHQoKTsKICAgIH0KCiAgICBpZiAoaGFzTmV4dEtleSB8fCBoYXNOZXh0VmFsdWUpIHsKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcigiSXRlcmFibGVzIGRvIG5vdCBoYXZlIHNhbWUgbGVuZ3RoLiIpOwogICAgfQogIH0KfQoKLy8vIE1peGluIGltcGxlbWVudGluZyBhIFtNYXBdLgovLy8KLy8vIFRoaXMgbWl4aW4gaGFzIGEgYmFzaWMgaW1wbGVtZW50YXRpb24gb2YgYWxsIGJ1dCBmaXZlIG9mIHRoZSBtZW1iZXJzIG9mCi8vLyBbTWFwXS4KLy8vIEEgYmFzaWMgYE1hcGAgY2xhc3MgY2FuIGJlIGltcGxlbWVudGVkIGJ5IG1peGluIGluIHRoaXMgY2xhc3MgYW5kCi8vLyBpbXBsZW1lbnRpbmcgYGtleXNgLCBgb3BlcmF0b3JbXWAsIGBvcGVyYXRvcltdPWAsIGByZW1vdmVgIGFuZCBgY2xlYXJgLgovLy8gVGhlIHJlbWFpbmluZyBvcGVyYXRpb25zIGFyZSBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiB0aGVzZSBmaXZlLgovLy8KLy8vIFRoZSBga2V5c2AgaXRlcmFibGUgc2hvdWxkIGhhdmUgZWZmaWNpZW50IFtJdGVyYWJsZS5sZW5ndGhdIGFuZAovLy8gW0l0ZXJhYmxlLmNvbnRhaW5zXSBvcGVyYXRpb25zLCBhbmQgaXQgc2hvdWxkIGNhdGNoIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucwovLy8gb2YgdGhlIGtleXMgd2hpbGUgaXRlcmF0aW5nLgovLy8KLy8vIEEgbW9yZSBlZmZpY2llbnQgaW1wbGVtZW50YXRpb24gaXMgdXN1YWxseSBwb3NzaWJsZSBieSBvdmVycmlkaW5nCi8vLyBzb21lIG9mIHRoZSBvdGhlciBtZW1iZXJzIGFzIHdlbGwuCmFic3RyYWN0IGNsYXNzIE1hcE1peGluPEssIFY+IGltcGxlbWVudHMgTWFwPEssIFY+IHsKICBJdGVyYWJsZTxLPiBnZXQga2V5czsKICBWIG9wZXJhdG9yIFtdKE9iamVjdCBrZXkpOwogIG9wZXJhdG9yIFtdPShLIGtleSwgViB2YWx1ZSk7CiAgViByZW1vdmUoT2JqZWN0IGtleSk7CiAgLy8gVGhlIGBjbGVhcmAgb3BlcmF0aW9uIHNob3VsZCBub3QgYmUgYmFzZWQgb24gYHJlbW92ZWAuCiAgLy8gSXQgc2hvdWxkIGNsZWFyIHRoZSBtYXAgZXZlbiBpZiBzb21lIGtleXMgYXJlIG5vdCBlcXVhbCB0byB0aGVtc2VsdmVzLgogIHZvaWQgY2xlYXIoKTsKCiAgTWFwPFJLLCBSVj4gY2FzdDxSSywgUlY+KCkgPT4gTWFwLmNhc3RGcm9tPEssIFYsIFJLLCBSVj4odGhpcyk7CiAgdm9pZCBmb3JFYWNoKHZvaWQgYWN0aW9uKEsga2V5LCBWIHZhbHVlKSkgewogICAgZm9yIChLIGtleSBpbiBrZXlzKSB7CiAgICAgIGFjdGlvbihrZXksIHRoaXNba2V5XSk7CiAgICB9CiAgfQoKICB2b2lkIGFkZEFsbChNYXA8SywgVj4gb3RoZXIpIHsKICAgIGZvciAoSyBrZXkgaW4gb3RoZXIua2V5cykgewogICAgICB0aGlzW2tleV0gPSBvdGhlcltrZXldOwogICAgfQogIH0KCiAgYm9vbCBjb250YWluc1ZhbHVlKE9iamVjdCB2YWx1ZSkgewogICAgZm9yIChLIGtleSBpbiBrZXlzKSB7CiAgICAgIGlmICh0aGlzW2tleV0gPT0gdmFsdWUpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgViBwdXRJZkFic2VudChLIGtleSwgViBpZkFic2VudCgpKSB7CiAgICBpZiAoY29udGFpbnNLZXkoa2V5KSkgewogICAgICByZXR1cm4gdGhpc1trZXldOwogICAgfQogICAgcmV0dXJuIHRoaXNba2V5XSA9IGlmQWJzZW50KCk7CiAgfQoKICBWIHVwZGF0ZShLIGtleSwgViB1cGRhdGUoViB2YWx1ZSksIHtWIGlmQWJzZW50KCl9KSB7CiAgICBpZiAodGhpcy5jb250YWluc0tleShrZXkpKSB7CiAgICAgIHJldHVybiB0aGlzW2tleV0gPSB1cGRhdGUodGhpc1trZXldKTsKICAgIH0KICAgIGlmIChpZkFic2VudCAhPSBudWxsKSB7CiAgICAgIHJldHVybiB0aGlzW2tleV0gPSBpZkFic2VudCgpOwogICAgfQogICAgdGhyb3cgQXJndW1lbnRFcnJvci52YWx1ZShrZXksICJrZXkiLCAiS2V5IG5vdCBpbiBtYXAuIik7CiAgfQoKICB2b2lkIHVwZGF0ZUFsbChWIHVwZGF0ZShLIGtleSwgViB2YWx1ZSkpIHsKICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmtleXMpIHsKICAgICAgdGhpc1trZXldID0gdXBkYXRlKGtleSwgdGhpc1trZXldKTsKICAgIH0KICB9CgogIEl0ZXJhYmxlPE1hcEVudHJ5PEssIFY+PiBnZXQgZW50cmllcyB7CiAgICByZXR1cm4ga2V5cy5tYXAoKEsga2V5KSA9PiBNYXBFbnRyeTxLLCBWPihrZXksIHRoaXNba2V5XSkpOwogIH0KCiAgTWFwPEsyLCBWMj4gbWFwPEsyLCBWMj4oTWFwRW50cnk8SzIsIFYyPiB0cmFuc2Zvcm0oSyBrZXksIFYgdmFsdWUpKSB7CiAgICB2YXIgcmVzdWx0ID0gPEsyLCBWMj57fTsKICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmtleXMpIHsKICAgICAgdmFyIGVudHJ5ID0gdHJhbnNmb3JtKGtleSwgdGhpc1trZXldKTsKICAgICAgcmVzdWx0W2VudHJ5LmtleV0gPSBlbnRyeS52YWx1ZTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIGFkZEVudHJpZXMoSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IG5ld0VudHJpZXMpIHsKICAgIGZvciAodmFyIGVudHJ5IGluIG5ld0VudHJpZXMpIHsKICAgICAgdGhpc1tlbnRyeS5rZXldID0gZW50cnkudmFsdWU7CiAgICB9CiAgfQoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChLIGtleSwgViB2YWx1ZSkpIHsKICAgIHZhciBrZXlzVG9SZW1vdmUgPSA8Sz5bXTsKICAgIGZvciAodmFyIGtleSBpbiBrZXlzKSB7CiAgICAgIGlmICh0ZXN0KGtleSwgdGhpc1trZXldKSkga2V5c1RvUmVtb3ZlLmFkZChrZXkpOwogICAgfQogICAgZm9yICh2YXIga2V5IGluIGtleXNUb1JlbW92ZSkgewogICAgICB0aGlzLnJlbW92ZShrZXkpOwogICAgfQogIH0KCiAgYm9vbCBjb250YWluc0tleShPYmplY3Qga2V5KSA9PiBrZXlzLmNvbnRhaW5zKGtleSk7CiAgaW50IGdldCBsZW5ndGggPT4ga2V5cy5sZW5ndGg7CiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBrZXlzLmlzRW1wdHk7CiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBrZXlzLmlzTm90RW1wdHk7CiAgSXRlcmFibGU8Vj4gZ2V0IHZhbHVlcyA9PiBfTWFwQmFzZVZhbHVlSXRlcmFibGU8SywgVj4odGhpcyk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gTWFwQmFzZS5tYXBUb1N0cmluZyh0aGlzKTsKfQoKLy8vIEJhc2ljIGltcGxlbWVudGF0aW9uIG9mIGFuIHVubW9kaWZpYWJsZSBbTWFwXS4KLy8vCi8vLyBUaGlzIGNsYXNzIGhhcyBhIGJhc2ljIGltcGxlbWVudGF0aW9uIG9mIGFsbCBidXQgdHdvIG9mIHRoZSBtZW1iZXJzIG9mCi8vLyBhbiB1bW9kaWZpYWJsZSBbTWFwXS4KLy8vIEEgc2ltcGxlIHVubW9kaWZpYWJsZSBgTWFwYCBjbGFzcyBjYW4gYmUgaW1wbGVtZW50ZWQgYnkgZXh0ZW5kaW5nIHRoaXMKLy8vIGNsYXNzIGFuZCBpbXBsZW1lbnRpbmcgYGtleXNgIGFuZCBgb3BlcmF0b3JbXWAuCi8vLwovLy8gTW9kaWZ5aW5nIG9wZXJhdGlvbnMgdGhyb3cgd2hlbiB1c2VkLgovLy8gVGhlIHJlbWFpbmluZyBub24tbW9kaWZ5aW5nIG9wZXJhdGlvbnMgYXJlIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIGBrZXlzYAovLy8gYW5kIGBvcGVyYXRvcltdYC4KLy8vCi8vLyBUaGUgYGtleXNgIGl0ZXJhYmxlIHNob3VsZCBoYXZlIGVmZmljaWVudCBbSXRlcmFibGUubGVuZ3RoXSBhbmQKLy8vIFtJdGVyYWJsZS5jb250YWluc10gb3BlcmF0aW9ucywgYW5kIGl0IHNob3VsZCBjYXRjaCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMKLy8vIG9mIHRoZSBrZXlzIHdoaWxlIGl0ZXJhdGluZy4KLy8vCi8vLyBBIG1vcmUgZWZmaWNpZW50IGltcGxlbWVudGF0aW9uIGlzIHVzdWFsbHkgcG9zc2libGUgYnkgb3ZlcnJpZGluZwovLy8gc29tZSBvZiB0aGUgb3RoZXIgbWVtYmVycyBhcyB3ZWxsLgphYnN0cmFjdCBjbGFzcyBVbm1vZGlmaWFibGVNYXBCYXNlPEssIFY+ID0gTWFwQmFzZTxLLCBWPgogICAgd2l0aCBfVW5tb2RpZmlhYmxlTWFwTWl4aW48SywgVj47CgovLy8gSW1wbGVtZW50YXRpb24gb2YgW01hcC52YWx1ZXNdIGJhc2VkIG9uIHRoZSBtYXAgYW5kIGl0cyBbTWFwLmtleXNdIGl0ZXJhYmxlLgovLy8KLy8vIEl0ZXJhYmxlIHRoYXQgaXRlcmF0ZXMgb3ZlciB0aGUgdmFsdWVzIG9mIGEgYE1hcGAuCi8vLyBJdCBhY2Nlc3NlcyB0aGUgdmFsdWVzIGJ5IGl0ZXJhdGluZyBvdmVyIHRoZSBrZXlzIG9mIHRoZSBtYXAsIGFuZCB1c2luZyB0aGUKLy8vIG1hcCdzIGBvcGVyYXRvcltdYCB0byBsb29rdXAgdGhlIGtleXMuCmNsYXNzIF9NYXBCYXNlVmFsdWVJdGVyYWJsZTxLLCBWPiBleHRlbmRzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPFY+IHsKICBmaW5hbCBNYXA8SywgVj4gX21hcDsKICBfTWFwQmFzZVZhbHVlSXRlcmFibGUodGhpcy5fbWFwKTsKCiAgaW50IGdldCBsZW5ndGggPT4gX21hcC5sZW5ndGg7CiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfbWFwLmlzRW1wdHk7CiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfbWFwLmlzTm90RW1wdHk7CiAgViBnZXQgZmlyc3QgPT4gX21hcFtfbWFwLmtleXMuZmlyc3RdOwogIFYgZ2V0IHNpbmdsZSA9PiBfbWFwW19tYXAua2V5cy5zaW5nbGVdOwogIFYgZ2V0IGxhc3QgPT4gX21hcFtfbWFwLmtleXMubGFzdF07CgogIEl0ZXJhdG9yPFY+IGdldCBpdGVyYXRvciA9PiBfTWFwQmFzZVZhbHVlSXRlcmF0b3I8SywgVj4oX21hcCk7Cn0KCi8vLyBJdGVyYXRvciBjcmVhdGVkIGJ5IFtfTWFwQmFzZVZhbHVlSXRlcmFibGVdLgovLy8KLy8vIEl0ZXJhdGVzIG92ZXIgdGhlIHZhbHVlcyBvZiBhIG1hcCBieSBpdGVyYXRpbmcgaXRzIGtleXMgYW5kIGxvb2t1cCB1cCB0aGUKLy8vIHZhbHVlcy4KY2xhc3MgX01hcEJhc2VWYWx1ZUl0ZXJhdG9yPEssIFY+IGltcGxlbWVudHMgSXRlcmF0b3I8Vj4gewogIGZpbmFsIEl0ZXJhdG9yPEs+IF9rZXlzOwogIGZpbmFsIE1hcDxLLCBWPiBfbWFwOwogIFYgX2N1cnJlbnQ7CgogIF9NYXBCYXNlVmFsdWVJdGVyYXRvcihNYXA8SywgVj4gbWFwKQogICAgICA6IF9tYXAgPSBtYXAsCiAgICAgICAgX2tleXMgPSBtYXAua2V5cy5pdGVyYXRvcjsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChfa2V5cy5tb3ZlTmV4dCgpKSB7CiAgICAgIF9jdXJyZW50ID0gX21hcFtfa2V5cy5jdXJyZW50XTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBfY3VycmVudCA9IG51bGw7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBWIGdldCBjdXJyZW50ID0+IF9jdXJyZW50Owp9CgovLy8gTWl4aW4gdGhhdCBvdmVycmlkZXMgbXV0YXRpbmcgbWFwIG9wZXJhdGlvbnMgd2l0aCBpbXBsZW1lbnRhdGlvbnMgdGhhdAovLy8gdGhyb3cuCmFic3RyYWN0IGNsYXNzIF9Vbm1vZGlmaWFibGVNYXBNaXhpbjxLLCBWPiBpbXBsZW1lbnRzIE1hcDxLLCBWPiB7CiAgLy8vIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIG1hcC4KICB2b2lkIG9wZXJhdG9yIFtdPShLIGtleSwgViB2YWx1ZSkgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IG1vZGlmeSB1bm1vZGlmaWFibGUgbWFwIik7CiAgfQoKICAvLy8gVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbWFwLgogIHZvaWQgYWRkQWxsKE1hcDxLLCBWPiBvdGhlcikgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IG1vZGlmeSB1bm1vZGlmaWFibGUgbWFwIik7CiAgfQoKICAvLy8gVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbWFwLgogIHZvaWQgYWRkRW50cmllcyhJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZW50cmllcykgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IG1vZGlmeSB1bm1vZGlmaWFibGUgbWFwIik7CiAgfQoKICAvLy8gVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbWFwLgogIHZvaWQgY2xlYXIoKSB7CiAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IHVubW9kaWZpYWJsZSBtYXAiKTsKICB9CgogIC8vLyBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBtYXAuCiAgViByZW1vdmUoT2JqZWN0IGtleSkgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IG1vZGlmeSB1bm1vZGlmaWFibGUgbWFwIik7CiAgfQoKICAvLy8gVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbWFwLgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEsga2V5LCBWIHZhbHVlKSkgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IG1vZGlmeSB1bm1vZGlmaWFibGUgbWFwIik7CiAgfQoKICAvLy8gVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbWFwLgogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSkgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IG1vZGlmeSB1bm1vZGlmaWFibGUgbWFwIik7CiAgfQoKICAvLy8gVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbWFwLgogIFYgdXBkYXRlKEsga2V5LCBWIHVwZGF0ZShWIHZhbHVlKSwge1YgaWZBYnNlbnQoKX0pIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgdW5tb2RpZmlhYmxlIG1hcCIpOwogIH0KCiAgLy8vIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIG1hcC4KICB2b2lkIHVwZGF0ZUFsbChWIHVwZGF0ZShLIGtleSwgViB2YWx1ZSkpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgdW5tb2RpZmlhYmxlIG1hcCIpOwogIH0KfQoKLy8vIFdyYXBwZXIgYXJvdW5kIGEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIFtNYXBdIHRoYXQgb25seSBleHBvc2VzIGBNYXBgCi8vLyBtZW1iZXJzLgovLy8KLy8vIEEgc2ltcGxlIHdyYXBwZXIgdGhhdCBkZWxlZ2F0ZXMgYWxsIGBNYXBgIG1lbWJlcnMgdG8gdGhlIG1hcCBwcm92aWRlZCBpbiB0aGUKLy8vIGNvbnN0cnVjdG9yLgovLy8KLy8vIEJhc2UgZm9yIGRlbGVnYXRpbmcgbWFwIGltcGxlbWVudGF0aW9ucyBsaWtlIFtVbm1vZGlmaWFibGVNYXBWaWV3XS4KY2xhc3MgTWFwVmlldzxLLCBWPiBpbXBsZW1lbnRzIE1hcDxLLCBWPiB7CiAgZmluYWwgTWFwPEssIFY+IF9tYXA7CiAgY29uc3QgTWFwVmlldyhNYXA8SywgVj4gbWFwKSA6IF9tYXAgPSBtYXA7CgogIE1hcDxSSywgUlY+IGNhc3Q8UkssIFJWPigpID0+IF9tYXAuY2FzdDxSSywgUlY+KCk7CiAgViBvcGVyYXRvciBbXShPYmplY3Qga2V5KSA9PiBfbWFwW2tleV07CiAgdm9pZCBvcGVyYXRvciBbXT0oSyBrZXksIFYgdmFsdWUpIHsKICAgIF9tYXBba2V5XSA9IHZhbHVlOwogIH0KCiAgdm9pZCBhZGRBbGwoTWFwPEssIFY+IG90aGVyKSB7CiAgICBfbWFwLmFkZEFsbChvdGhlcik7CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgX21hcC5jbGVhcigpOwogIH0KCiAgViBwdXRJZkFic2VudChLIGtleSwgViBpZkFic2VudCgpKSA9PiBfbWFwLnB1dElmQWJzZW50KGtleSwgaWZBYnNlbnQpOwogIGJvb2wgY29udGFpbnNLZXkoT2JqZWN0IGtleSkgPT4gX21hcC5jb250YWluc0tleShrZXkpOwogIGJvb2wgY29udGFpbnNWYWx1ZShPYmplY3QgdmFsdWUpID0+IF9tYXAuY29udGFpbnNWYWx1ZSh2YWx1ZSk7CiAgdm9pZCBmb3JFYWNoKHZvaWQgYWN0aW9uKEsga2V5LCBWIHZhbHVlKSkgewogICAgX21hcC5mb3JFYWNoKGFjdGlvbik7CiAgfQoKICBib29sIGdldCBpc0VtcHR5ID0+IF9tYXAuaXNFbXB0eTsKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9tYXAuaXNOb3RFbXB0eTsKICBpbnQgZ2V0IGxlbmd0aCA9PiBfbWFwLmxlbmd0aDsKICBJdGVyYWJsZTxLPiBnZXQga2V5cyA9PiBfbWFwLmtleXM7CiAgViByZW1vdmUoT2JqZWN0IGtleSkgPT4gX21hcC5yZW1vdmUoa2V5KTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBfbWFwLnRvU3RyaW5nKCk7CiAgSXRlcmFibGU8Vj4gZ2V0IHZhbHVlcyA9PiBfbWFwLnZhbHVlczsKCiAgSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IGdldCBlbnRyaWVzID0+IF9tYXAuZW50cmllczsKCiAgdm9pZCBhZGRFbnRyaWVzKEl0ZXJhYmxlPE1hcEVudHJ5PEssIFY+PiBlbnRyaWVzKSB7CiAgICBfbWFwLmFkZEVudHJpZXMoZW50cmllcyk7CiAgfQoKICBNYXA8SzIsIFYyPiBtYXA8SzIsIFYyPihNYXBFbnRyeTxLMiwgVjI+IHRy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IHRoYXQgYHRvU2V0YCBjcmVhdGVzIGEgbW9kaWZpYWJsZSBzZXQuCi8vLyBJZiB1c2luZyB0aGlzIG1peGluIGZvciBhbiB1bm1vZGlmaWFibGUgc2V0LAovLy8gd2hlcmUgYHRvU2V0YCBzaG91bGQgcmV0dXJuIGFuIHVubW9kaWZpYWJsZSBzZXQsCi8vLyBpdCdzIG5lY2Vzc2FyeSB0byByZWltcGxlbWVudAovLy8gW3JldGFpbkFsbF0sIFt1bmlvbl0sIFtpbnRlcnNlY3Rpb25dIGFuZCBbZGlmZmVyZW5jZV0uCi8vLwovLy8gSW1wbGVtZW50YXRpb25zIG9mIGBTZXRgIHVzaW5nIHRoaXMgbWl4aW4gc2hvdWxkIGNvbnNpZGVyIGFsc28gaW1wbGVtZW50aW5nCi8vLyBgY2xlYXJgIGluIGNvbnN0YW50IHRpbWUuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdvcmtzIGJ5IHJlbW92aW5nIGV2ZXJ5Ci8vLyBlbGVtZW50LgphYnN0cmFjdCBjbGFzcyBTZXRNaXhpbjxFPiBpbXBsZW1lbnRzIFNldDxFPiB7CiAgLy8gVGhpcyBjbGFzcyByZWltcGxlbWVudHMgYWxsIG9mIFtJdGVyYWJsZU1peGluXS4KICAvLyBJZi93aGVuIERhcnQgbWl4aW5zIGdldCBtb3JlIHBvd2VyZnVsLCB3ZSBzaG91bGQganVzdCBjcmVhdGUgYSBzaW5nbGUKICAvLyBNaXhpbiBjbGFzcyBmcm9tIEl0ZXJhYmxlTWl4aW4gYW5kIHRoZSBuZXcgbWV0aG9kcyBvZiB0aGlzIGNsYXNzLgoKICBib29sIGFkZChFIHZhbHVlKTsKCiAgYm9vbCBjb250YWlucyhPYmplY3QgZWxlbWVudCk7CgogIEUgbG9va3VwKE9iamVjdCBlbGVtZW50KTsKCiAgYm9vbCByZW1vdmUoT2JqZWN0IHZhbHVlKTsKCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yOwoKICBTZXQ8RT4gdG9TZXQoKTsKCiAgaW50IGdldCBsZW5ndGg7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gbGVuZ3RoID09IDA7CgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gbGVuZ3RoICE9IDA7CgogIFNldDxSPiBjYXN0PFI+KCkgPT4gU2V0LmNhc3RGcm9tPEUsIFI+KHRoaXMpOwogIEl0ZXJhYmxlPEU+IGZvbGxvd2VkQnkoSXRlcmFibGU8RT4gb3RoZXIpID0+CiAgICAgIEZvbGxvd2VkQnlJdGVyYWJsZTxFPi5maXJzdEVmZmljaWVudCh0aGlzLCBvdGhlcik7CgogIEl0ZXJhYmxlPFQ+IHdoZXJlVHlwZTxUPigpID0+IFdoZXJlVHlwZUl0ZXJhYmxlPFQ+KHRoaXMpOwoKICB2b2lkIGNsZWFyKCkgewogICAgcmVtb3ZlQWxsKHRvTGlzdCgpKTsKICB9CgogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IGVsZW1lbnRzKSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiBlbGVtZW50cykgYWRkKGVsZW1lbnQpOwogIH0KCiAgdm9pZCByZW1vdmVBbGwoSXRlcmFibGU8T2JqZWN0PiBlbGVtZW50cykgewogICAgZm9yIChPYmplY3QgZWxlbWVudCBpbiBlbGVtZW50cykgcmVtb3ZlKGVsZW1lbnQpOwogIH0KCiAgdm9pZCByZXRhaW5BbGwoSXRlcmFibGU8T2JqZWN0PiBlbGVtZW50cykgewogICAgLy8gQ3JlYXRlIGEgY29weSBvZiB0aGUgc2V0LCByZW1vdmUgYWxsIG9mIGVsZW1lbnRzIGZyb20gdGhlIGNvcHksCiAgICAvLyB0aGVuIHJlbW92ZSBhbGwgcmVtYWluaW5nIGVsZW1lbnRzIGluIGNvcHkgZnJvbSB0aGlzLgogICAgU2V0PEU+IHRvUmVtb3ZlID0gdG9TZXQoKTsKICAgIGZvciAoT2JqZWN0IG8gaW4gZWxlbWVudHMpIHsKICAgICAgdG9SZW1vdmUucmVtb3ZlKG8pOwogICAgfQogICAgcmVtb3ZlQWxsKHRvUmVtb3ZlKTsKICB9CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIExpc3QgdG9SZW1vdmUgPSBbXTsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHRvUmVtb3ZlLmFkZChlbGVtZW50KTsKICAgIH0KICAgIHJlbW92ZUFsbCh0b1JlbW92ZSk7CiAgfQoKICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBMaXN0IHRvUmVtb3ZlID0gW107CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICghdGVzdChlbGVtZW50KSkgdG9SZW1vdmUuYWRkKGVsZW1lbnQpOwogICAgfQogICAgcmVtb3ZlQWxsKHRvUmVtb3ZlKTsKICB9CgogIGJvb2wgY29udGFpbnNBbGwoSXRlcmFibGU8T2JqZWN0PiBvdGhlcikgewogICAgZm9yIChPYmplY3QgbyBpbiBvdGhlcikgewogICAgICBpZiAoIWNvbnRhaW5zKG8pKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIFNldDxFPiB1bmlvbihTZXQ8RT4gb3RoZXIpIHsKICAgIHJldHVybiB0b1NldCgpLi5hZGRBbGwob3RoZXIpOwogIH0KCiAgU2V0PEU+IGludGVyc2VjdGlvbihTZXQ8T2JqZWN0PiBvdGhlcikgewogICAgU2V0PEU+IHJlc3VsdCA9IHRvU2V0KCk7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICghb3RoZXIuY29udGFpbnMoZWxlbWVudCkpIHJlc3VsdC5yZW1vdmUoZWxlbWVudCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgU2V0PEU+IGRpZmZlcmVuY2UoU2V0PE9iamVjdD4gb3RoZXIpIHsKICAgIFNldDxFPiByZXN1bHQgPSB0b1NldCgpOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAob3RoZXIuY29udGFpbnMoZWxlbWVudCkpIHJlc3VsdC5yZW1vdmUoZWxlbWVudCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgTGlzdDxFPiB0b0xpc3Qoe2Jvb2wgZ3Jvd2FibGUgPSB0cnVlfSkgewogICAgTGlzdDxFPiByZXN1bHQgPSBncm93YWJsZSA/ICg8RT5bXS4ubGVuZ3RoID0gbGVuZ3RoKSA6IExpc3Q8RT4obGVuZ3RoKTsKICAgIGludCBpID0gMDsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHJlc3VsdFtpKytdID0gZWxlbWVudDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBJdGVyYWJsZTxUPiBtYXA8VD4oVCBmKEUgZWxlbWVudCkpID0+CiAgICAgIEVmZmljaWVudExlbmd0aE1hcHBlZEl0ZXJhYmxlPEUsIFQ+KHRoaXMsIGYpOwoKICBFIGdldCBzaW5nbGUgewogICAgaWYgKGxlbmd0aCA+IDEpIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgIEl0ZXJhdG9yPEU+IGl0ID0gaXRlcmF0b3I7CiAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgRSByZXN1bHQgPSBpdC5jdXJyZW50OwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+IEl0ZXJhYmxlQmFzZS5pdGVyYWJsZVRvRnVsbFN0cmluZyh0aGlzLCAneycsICd9Jyk7CgogIC8vIENvcGllZCBmcm9tIEl0ZXJhYmxlTWl4aW4uCiAgLy8gU2hvdWxkIGJlIGluaGVyaXRlZCBpZiB3ZSBoYWQgbXVsdGktbGV2ZWwgbWl4aW5zLgoKICBJdGVyYWJsZTxFPiB3aGVyZShib29sIGYoRSBlbGVtZW50KSkgPT4gV2hlcmVJdGVyYWJsZTxFPih0aGlzLCBmKTsKCiAgSXRlcmFibGU8VD4gZXhwYW5kPFQ+KEl0ZXJhYmxlPFQ+IGYoRSBlbGVtZW50KSkgPT4KICAgICAgRXhwYW5kSXRlcmFibGU8RSwgVD4odGhpcywgZik7CgogIHZvaWQgZm9yRWFjaCh2b2lkIGYoRSBlbGVtZW50KSkgewogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgZihlbGVtZW50KTsKICB9CgogIEUgcmVkdWNlKEUgY29tYmluZShFIHZhbHVlLCBFIGVsZW1lbnQpKSB7CiAgICBJdGVyYXRvcjxFPiBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3I7CiAgICBpZiAoIWl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB9CiAgICBFIHZhbHVlID0gaXRlcmF0b3IuY3VycmVudDsKICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgaXRlcmF0b3IuY3VycmVudCk7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBUIGZvbGQ8VD4oVCBpbml0aWFsVmFsdWUsIFQgY29tYmluZShUIHByZXZpb3VzVmFsdWUsIEUgZWxlbWVudCkpIHsKICAgIHZhciB2YWx1ZSA9IGluaXRpYWxWYWx1ZTsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgZWxlbWVudCk7CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBib29sIGV2ZXJ5KGJvb2wgZihFIGVsZW1lbnQpKSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICghZihlbGVtZW50KSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBTdHJpbmcgam9pbihbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSkgewogICAgSXRlcmF0b3I8RT4gaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yOwogICAgaWYgKCFpdGVyYXRvci5tb3ZlTmV4dCgpKSByZXR1cm4gIiI7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gU3RyaW5nQnVmZmVyKCk7CiAgICBpZiAoc2VwYXJhdG9yID09IG51bGwgfHwgc2VwYXJhdG9yID09ICIiKSB7CiAgICAgIGRvIHsKICAgICAgICBidWZmZXIud3JpdGUoaXRlcmF0b3IuY3VycmVudCk7CiAgICAgIH0gd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpOwogICAgfSBlbHNlIHsKICAgICAgYnVmZmVyLndyaXRlKGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICAgIGJ1ZmZlci53cml0ZShzZXBhcmF0b3IpOwogICAgICAgIGJ1ZmZlci53cml0ZShpdGVyYXRvci5jdXJyZW50KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgYm9vbCBhbnkoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgSXRlcmFibGU8RT4gdGFrZShpbnQgbikgewogICAgcmV0dXJuIFRha2VJdGVyYWJsZTxFPih0aGlzLCBuKTsKICB9CgogIEl0ZXJhYmxlPEU+IHRha2VXaGlsZShib29sIHRlc3QoRSB2YWx1ZSkpIHsKICAgIHJldHVybiBUYWtlV2hpbGVJdGVyYWJsZTxFPih0aGlzLCB0ZXN0KTsKICB9CgogIEl0ZXJhYmxlPEU+IHNraXAoaW50IG4pIHsKICAgIHJldHVybiBTa2lwSXRlcmFibGU8RT4odGhpcywgbik7CiAgfQoKICBJdGVyYWJsZTxFPiBza2lwV2hpbGUoYm9vbCB0ZXN0KEUgdmFsdWUpKSB7CiAgICByZXR1cm4gU2tpcFdoaWxlSXRlcmFibGU8RT4odGhpcywgdGVzdCk7CiAgfQoKICBFIGdldCBmaXJzdCB7CiAgICBJdGVyYXRvcjxFPiBpdCA9IGl0ZXJhdG9yOwogICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgfQogICAgcmV0dXJuIGl0LmN1cnJlbnQ7CiAgfQoKICBFIGdldCBsYXN0IHsKICAgIEl0ZXJhdG9yPEU+IGl0ID0gaXRlcmF0b3I7CiAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB9CiAgICBFIHJlc3VsdDsKICAgIGRvIHsKICAgICAgcmVzdWx0ID0gaXQuY3VycmVudDsKICAgIH0gd2hpbGUgKGl0Lm1vdmVOZXh0KCkpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEUgZmlyc3RXaGVyZShib29sIHRlc3QoRSB2YWx1ZSksIHtFIG9yRWxzZSgpfSkgewogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAodGVzdChlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBsYXN0V2hlcmUoYm9vbCB0ZXN0KEUgdmFsdWUpLCB7RSBvckVsc2UoKX0pIHsKICAgIEUgcmVzdWx0OwogICAgYm9vbCBmb3VuZE1hdGNoaW5nID0gZmFsc2U7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgcmVzdWx0ID0gZWxlbWVudDsKICAgICAgICBmb3VuZE1hdGNoaW5nID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHJldHVybiByZXN1bHQ7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBzaW5nbGVXaGVyZShib29sIHRlc3QoRSB2YWx1ZSksIHtFIG9yRWxzZSgpfSkgewogICAgRSByZXN1bHQ7CiAgICBib29sIGZvdW5kTWF0Y2hpbmcgPSBmYWxzZTsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHsKICAgICAgICBpZiAoZm91bmRNYXRjaGluZykgewogICAgICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vTWFueSgpOwogICAgICAgIH0KICAgICAgICByZXN1bHQgPSBlbGVtZW50OwogICAgICAgIGZvdW5kTWF0Y2hpbmcgPSB0cnVlOwogICAgICB9CiAgICB9CiAgICBpZiAoZm91bmRNYXRjaGluZykgcmV0dXJuIHJlc3VsdDsKICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIGVsZW1lbnRBdChpbnQgaW5kZXgpIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGluZGV4LCAiaW5kZXgiKTsKICAgIFJhbmdlRXJyb3IuY2hlY2tOb3ROZWdhdGl2ZShpbmRleCwgImluZGV4Iik7CiAgICBpbnQgZWxlbWVudEluZGV4ID0gMDsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKGluZGV4ID09IGVsZW1lbnRJbmRleCkgcmV0dXJuIGVsZW1lbnQ7CiAgICAgIGVsZW1lbnRJbmRleCsrOwogICAgfQogICAgdGhyb3cgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4IiwgbnVsbCwgZWxlbWVudEluZGV4KTsKICB9Cn0KCi8vLyBCYXNlIGltcGxlbWVudGF0aW9uIG9mIFtTZXRdLgovLy8KLy8vIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGEgYFNldGAgdGhhdCBkZXBlbmRzIG9ubHkKLy8vIG9uIHRoZSBhYnN0cmFjdCBtZW1iZXJzOiBbYWRkXSwgW2NvbnRhaW5zXSwgW2xvb2t1cF0sIFtyZW1vdmVdLAovLy8gW2l0ZXJhdG9yXSwgW2xlbmd0aF0gYW5kIFt0b1NldF0uCi8vLwovLy8gU29tZSBvZiB0aGUgbWV0aG9kcyBhc3N1bWUgdGhhdCBgdG9TZXRgIGNyZWF0ZXMgYSBtb2RpZmlhYmxlIHNldC4KLy8vIElmIHVzaW5nIHRoaXMgYmFzZSBjbGFzcyBmb3IgYW4gdW5tb2RpZmlhYmxlIHNldCwKLy8vIHdoZXJlIGB0b1NldGAgc2hvdWxkIHJldHVybiBhbiB1bm1vZGlmaWFibGUgc2V0LAovLy8gaXQncyBuZWNlc3NhcnkgdG8gcmVpbXBsZW1lbnQKLy8vIFtyZXRhaW5BbGxdLCBbdW5pb25dLCBbaW50ZXJzZWN0aW9uXSBhbmQgW2RpZmZlcmVuY2VdLgovLy8KLy8vIEltcGxlbWVudGF0aW9ucyBvZiBgU2V0YCB1c2luZyB0aGlzIGJhc2Ugc2hvdWxkIGNvbnNpZGVyIGFsc28gaW1wbGVtZW50aW5nCi8vLyBgY2xlYXJgIGluIGNvbnN0YW50IHRpbWUuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdvcmtzIGJ5IHJlbW92aW5nIGV2ZXJ5Ci8vLyBlbGVtZW50LgphYnN0cmFjdCBjbGFzcyBTZXRCYXNlPEU+IGV4dGVuZHMgT2JqZWN0IHdpdGggU2V0TWl4aW48RT4gewogIC8vLyBDb252ZXJ0IGEgYFNldGAgdG8gYSBzdHJpbmcgYXMgYHtlYWNoLCBlbGVtZW50LCBhcywgc3RyaW5nfWAuCiAgLy8vCiAgLy8vIEhhbmRsZXMgY2lyY3VsYXIgcmVmZXJlbmNlcyB3aGVyZSBjb252ZXJ0aW5nIG9uZSBvZiB0aGUgZWxlbWVudHMKICAvLy8gdG8gYSBzdHJpbmcgZW5kcyB1cCBjb252ZXJ0aW5nIFtzZXRdIHRvIGEgc3RyaW5nIGFnYWluLgogIHN0YXRpYyBTdHJpbmcgc2V0VG9TdHJpbmcoU2V0IHNldCkgPT4KICAgICAgSXRlcmFibGVCYXNlLml0ZXJhYmxlVG9GdWxsU3RyaW5nKHNldCwgJ3snLCAnfScpOwp9CgovLy8gQ29tbW9uIGludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIHNvbWUgW1NldF0gbWV0aG9kcy4KLy8gVE9ETygzNTU0OCk6IE1ha2UgdGhpcyBtaXgtaW4gU2V0TWl4aW4sIGJ5IGFkZGluZyBgd2l0aCBTZXRNaXhpbjxFPmAKLy8gYW5kIHJlbW92aW5nIHRoZSBjb3BpZWQgbWVtYmVycyBiZWxvdywKLy8gd2hlbiBhbmFseXplciBzdXBwb3J0cyBjb25zdCBjb25zdHJ1Y3RvcnMgZm9yIG1peGluIGFwcGxpY2F0aW9ucy4KYWJzdHJhY3QgY2xhc3MgX1NldEJhc2U8RT4gaW1wbGVtZW50cyBTZXQ8RT4gewogIC8vIFRoZSBmb2xsb3dpbmcgdHdvIG1ldGhvZHMgb3ZlcnJpZGUgdGhlIG9uZXMgaW4gU2V0QmFzZS4KICAvLyBJdCdzIHBvc3NpYmxlIHRvIGJlIG1vcmUgZWZmaWNpZW50IGlmIHdlIGhhdmUgYSB3YXkgdG8gY3JlYXRlIGFuIGVtcHR5CiAgLy8gc2V0IG9mIHRoZSBjb3JyZWN0IHR5cGUuCiAgY29uc3QgX1NldEJhc2UoKTsKCiAgU2V0PEU+IF9uZXdTZXQoKTsKCiAgU2V0PFI+IF9uZXdTaW1pbGFyU2V0PFI+KCk7CgogIFNldDxSPiBjYXN0PFI+KCkgPT4gU2V0LmNhc3RGcm9tPEUsIFI+KHRoaXMsIG5ld1NldDogX25ld1NpbWlsYXJTZXQpOwoKICBTZXQ8RT4gZGlmZmVyZW5jZShTZXQ8T2JqZWN0PiBvdGhlcikgewogICAgU2V0PEU+IHJlc3VsdCA9IF9uZXdTZXQoKTsKICAgIGZvciAodmFyIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAoIW90aGVyLmNvbnRhaW5zKGVsZW1lbnQpKSByZXN1bHQuYWRkKGVsZW1lbnQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFNldDxFPiBpbnRlcnNlY3Rpb24oU2V0PE9iamVjdD4gb3RoZXIpIHsKICAgIFNldDxFPiByZXN1bHQgPSBfbmV3U2V0KCk7CiAgICBmb3IgKHZhciBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKG90aGVyLmNvbnRhaW5zKGVsZW1lbnQpKSByZXN1bHQuYWRkKGVsZW1lbnQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIFN1YmNsYXNzZXMgY2FuIG9wdGltaXplIHRoaXMgZnVydGhlci4KICBTZXQ8RT4gdG9TZXQoKSA9PiBfbmV3U2V0KCkuLmFkZEFsbCh0aGlzKTsKCiAgLy8vIFRPRE8oMzU1NDgpOiBSZW1vdmUgdGhlIGZvbGxvd2luZyBkZWNsYXJhdGlvbnMgYWdhaW4gd2hlbiB0aGUgYW5hbHl6ZXIKICAvLy8gc3VwcG9ydHMgbWl4aW5zIHdpdGggY29uc3QgY29uc3RydWN0b3JzLCBhbmQgbWl4IGluIGBTZXRNaXhpbmAgaW5zdGVhZC4KCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBsZW5ndGggPT0gMDsKCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBsZW5ndGggIT0gMDsKCiAgSXRlcmFibGU8RT4gZm9sbG93ZWRCeShJdGVyYWJsZTxFPiBvdGhlcikgPT4KICAgICAgRm9sbG93ZWRCeUl0ZXJhYmxlPEU+LmZpcnN0RWZmaWNpZW50KHRoaXMsIG90aGVyKTsKCiAgSXRlcmFibGU8VD4gd2hlcmVUeXBlPFQ+KCkgPT4gV2hlcmVUeXBlSXRlcmFibGU8VD4odGhpcyk7CgogIHZvaWQgY2xlYXIoKSB7CiAgICByZW1vdmVBbGwodG9MaXN0KCkpOwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gZWxlbWVudHMpIHsKICAgIGZvciAoRSBlbGVtZW50IGluIGVsZW1lbnRzKSBhZGQoZWxlbWVudCk7CiAgfQoKICB2b2lkIHJlbW92ZUFsbChJdGVyYWJsZTxPYmplY3Q+IGVsZW1lbnRzKSB7CiAgICBmb3IgKE9iamVjdCBlbGVtZW50IGluIGVsZW1lbnRzKSByZW1vdmUoZWxlbWVudCk7CiAgfQoKICB2b2lkIHJldGFpbkFsbChJdGVyYWJsZTxPYmplY3Q+IGVsZW1lbnRzKSB7CiAgICAvLyBDcmVhdGUgYSBjb3B5IG9mIHRoZSBzZXQsIHJlbW92ZSBhbGwgb2YgZWxlbWVudHMgZnJvbSB0aGUgY29weSwKICAgIC8vIHRoZW4gcmVtb3ZlIGFsbCByZW1haW5pbmcgZWxlbWVudHMgaW4gY29weSBmcm9tIHRoaXMuCiAgICBTZXQ8RT4gdG9SZW1vdmUgPSB0b1NldCgpOwogICAgZm9yIChPYmplY3QgbyBpbiBlbGVtZW50cykgewogICAgICB0b1JlbW92ZS5yZW1vdmUobyk7CiAgICB9CiAgICByZW1vdmVBbGwodG9SZW1vdmUpOwogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgTGlzdCB0b1JlbW92ZSA9IFtdOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAodGVzdChlbGVtZW50KSkgdG9SZW1vdmUuYWRkKGVsZW1lbnQpOwogICAgfQogICAgcmVtb3ZlQWxsKHRvUmVtb3ZlKTsKICB9CgogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIExpc3QgdG9SZW1vdmUgPSBbXTsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKCF0ZXN0KGVsZW1lbnQpKSB0b1JlbW92ZS5hZGQoZWxlbWVudCk7CiAgICB9CiAgICByZW1vdmVBbGwodG9SZW1vdmUpOwogIH0KCiAgYm9vbCBjb250YWluc0FsbChJdGVyYWJsZTxPYmplY3Q+IG90aGVyKSB7CiAgICBmb3IgKE9iamVjdCBvIGluIG90aGVyKSB7CiAgICAgIGlmICghY29udGFpbnMobykpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgU2V0PEU+IHVuaW9uKFNldDxFPiBvdGhlcikgewogICAgcmV0dXJuIHRvU2V0KCkuLmFkZEFsbChvdGhlcik7CiAgfQoKICBMaXN0PEU+IHRvTGlzdCh7Ym9vbCBncm93YWJsZSA9IHRydWV9KSB7CiAgICBMaXN0PEU+IHJlc3VsdCA9IGdyb3dhYmxlID8gKDxFPltdLi5sZW5ndGggPSBsZW5ndGgpIDogTGlzdDxFPihsZW5ndGgpOwogICAgaW50IGkgPSAwOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgcmVzdWx0W2krK10gPSBlbGVtZW50OwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEl0ZXJhYmxlPFQ+IG1hcDxUPihUIGYoRSBlbGVtZW50KSkgPT4KICAgICAgRWZmaWNpZW50TGVuZ3RoTWFwcGVkSXRlcmFibGU8RSwgVD4odGhpcywgZik7CgogIEUgZ2V0IHNpbmdsZSB7CiAgICBpZiAobGVuZ3RoID4gMSkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vTWFueSgpOwogICAgSXRlcmF0b3I8RT4gaXQgPSBpdGVyYXRvcjsKICAgIGlmICghaXQubW92ZU5leHQoKSkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICBFIHJlc3VsdCA9IGl0LmN1cnJlbnQ7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gSXRlcmFibGVCYXNlLml0ZXJhYmxlVG9GdWxsU3RyaW5nKHRoaXMsICd7JywgJ30nKTsKCiAgSXRlcmFibGU8RT4gd2hlcmUoYm9vbCBmKEUgZWxlbWVudCkpID0+IFdoZXJlSXRlcmFibGU8RT4odGhpcywgZik7CgogIEl0ZXJhYmxlPFQ+IGV4cGFuZDxUPihJdGVyYWJsZTxUPiBmKEUgZWxlbWVudCkpID0+CiAgICAgIEV4cGFuZEl0ZXJhYmxlPEUsIFQ+KHRoaXMsIGYpOwoKICB2b2lkIGZvckVhY2godm9pZCBmKEUgZWxlbWVudCkpIHsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIGYoZWxlbWVudCk7CiAgfQoKICBFIHJlZHVjZShFIGNvbWJpbmUoRSB2YWx1ZSwgRSBlbGVtZW50KSkgewogICAgSXRlcmF0b3I8RT4gaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yOwogICAgaWYgKCFpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgfQogICAgRSB2YWx1ZSA9IGl0ZXJhdG9yLmN1cnJlbnQ7CiAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICB2YWx1ZSA9IGNvbWJpbmUodmFsdWUsIGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgVCBmb2xkPFQ+KFQgaW5pdGlhbFZhbHVlLCBUIGNvbWJpbmUoVCBwcmV2aW91c1ZhbHVlLCBFIGVsZW1lbnQpKSB7CiAgICB2YXIgdmFsdWUgPSBpbml0aWFsVmFsdWU7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB2YWx1ZSA9IGNvbWJpbmUodmFsdWUsIGVsZW1lbnQpOwogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgYm9vbCBldmVyeShib29sIGYoRSBlbGVtZW50KSkgewogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAoIWYoZWxlbWVudCkpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgU3RyaW5nIGpvaW4oW1N0cmluZyBzZXBhcmF0b3IgPSAiIl0pIHsKICAgIEl0ZXJhdG9yPEU+IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcjsKICAgIGlmICghaXRlcmF0b3IubW92ZU5leHQoKSkgcmV0dXJuICIiOwogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IFN0cmluZ0J1ZmZlcigpOwogICAgaWYgKHNlcGFyYXRvciA9PSBudWxsIHx8IHNlcGFyYXRvciA9PSAiIikgewogICAgICBkbyB7CiAgICAgICAgYnVmZmVyLndyaXRlKGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgICB9IHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKTsKICAgIH0gZWxzZSB7CiAgICAgIGJ1ZmZlci53cml0ZShpdGVyYXRvci5jdXJyZW50KTsKICAgICAgd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgICBidWZmZXIud3JpdGUoc2VwYXJhdG9yKTsKICAgICAgICBidWZmZXIud3JpdGUoaXRlcmF0b3IuY3VycmVudCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIGJvb2wgYW55KGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEl0ZXJhYmxlPEU+IHRha2UoaW50IG4pIHsKICAgIHJldHVybiBUYWtlSXRlcmFibGU8RT4odGhpcywgbik7CiAgfQoKICBJdGVyYWJsZTxFPiB0YWtlV2hpbGUoYm9vbCB0ZXN0KEUgdmFsdWUpKSB7CiAgICByZXR1cm4gVGFrZVdoaWxlSXRlcmFibGU8RT4odGhpcywgdGVzdCk7CiAgfQoKICBJdGVyYWJsZTxFPiBza2lwKGludCBuKSB7CiAgICByZXR1cm4gU2tpcEl0ZXJhYmxlPEU+KHRoaXMsIG4pOwogIH0KCiAgSXRlcmFibGU8RT4gc2tpcFdoaWxlKGJvb2wgdGVzdChFIHZhbHVlKSkgewogICAgcmV0dXJuIFNraXBXaGlsZUl0ZXJhYmxlPEU+KHRoaXMsIHRlc3QpOwogIH0KCiAgRSBnZXQgZmlyc3QgewogICAgSXRlcmF0b3I8RT4gaXQgPSBpdGVyYXRvcjsKICAgIGlmICghaXQubW92ZU5leHQoKSkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIH0KICAgIHJldHVybiBpdC5jdXJyZW50OwogIH0KCiAgRSBnZXQgbGFzdCB7CiAgICBJdGVyYXRvcjxFPiBpdCA9IGl0ZXJhdG9yOwogICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgfQogICAgRSByZXN1bHQ7CiAgICBkbyB7CiAgICAgIHJlc3VsdCA9IGl0LmN1cnJlbnQ7CiAgICB9IHdoaWxlIChpdC5tb3ZlTmV4dCgpKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBFIGZpcnN0V2hlcmUoYm9vbCB0ZXN0KEUgdmFsdWUpLCB7RSBvckVsc2UoKX0pIHsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHJldHVybiBlbGVtZW50OwogICAgfQogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgbGFzdFdoZXJlKGJvb2wgdGVzdChFIHZhbHVlKSwge0Ugb3JFbHNlKCl9KSB7CiAgICBFIHJlc3VsdDsKICAgIGJvb2wgZm91bmRNYXRjaGluZyA9IGZhbHNlOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAodGVzdChlbGVtZW50KSkgewogICAgICAgIHJlc3VsdCA9IGVsZW1lbnQ7CiAgICAgICAgZm91bmRNYXRjaGluZyA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIGlmIChmb3VuZE1hdGNoaW5nKSByZXR1cm4gcmVzdWx0OwogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgc2luZ2xlV2hlcmUoYm9vbCB0ZXN0KEUgdmFsdWUpLCB7RSBvckVsc2UoKX0pIHsKICAgIEUgcmVzdWx0OwogICAgYm9vbCBmb3VuZE1hdGNoaW5nID0gZmFsc2U7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHsKICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgICAgICB9CiAgICAgICAgcmVzdWx0ID0gZWxlbWVudDsKICAgICAgICBmb3VuZE1hdGNoaW5nID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHJldHVybiByZXN1bHQ7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBlbGVtZW50QXQoaW50IGluZGV4KSB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChpbmRleCwgImluZGV4Iik7CiAgICBSYW5nZUVycm9yLmNoZWNrTm90TmVnYXRpdmUoaW5kZXgsICJpbmRleCIpOwogICAgaW50IGVsZW1lbnRJbmRleCA9IDA7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmIChpbmRleCA9PSBlbGVtZW50SW5kZXgpIHJldHVybiBlbGVtZW50OwogICAgICBlbGVtZW50SW5kZXgrKzsKICAgIH0KICAgIHRocm93IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIsIG51bGwsIGVsZW1lbnRJbmRleCk7CiAgfQp9CgovLy8gQ2xhc3MgdXNlZCB0byBpbXBsZW1lbnQgY29uc3Qgc2V0cy4KY2xhc3MgX1VubW9kaWZpYWJsZVNldDxFPiBleHRlbmRzIF9TZXRCYXNlPEU+IHsKICBmaW5hbCBNYXA8RSwgTnVsbD4gX21hcDsKCiAgY29uc3QgX1VubW9kaWZpYWJsZVNldCh0aGlzLl9tYXApOwoKICBTZXQ8RT4gX25ld1NldCgpID0+IExpbmtlZEhhc2hTZXQ8RT4oKTsKCiAgU2V0PFI+IF9uZXdTaW1pbGFyU2V0PFI+KCkgPT4gTGlua2VkSGFzaFNldDxSPigpOwoKICAvLyBMb29rdXBzIHVzZSBtYXAgbWV0aG9kcy4KCiAgYm9vbCBjb250YWlucyhPYmplY3QgZWxlbWVudCkgPT4gX21hcC5jb250YWluc0tleShlbGVtZW50KTsKCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yID0+IF9tYXAua2V5cy5pdGVyYXRvcjsKCiAgaW50IGdldCBsZW5ndGggPT4gX21hcC5sZW5ndGg7CgogIEUgbG9va3VwKE9iamVjdCBlbGVtZW50KSB7CiAgICBmb3IgKHZhciBrZXkgaW4gX21hcC5rZXlzKSB7CiAgICAgIGlmIChrZXkgPT0gZWxlbWVudCkgcmV0dXJuIGtleTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8gTXV0YXRpbmcgbWV0aG9kcyB0aHJvdy4KCiAgYm9vbCBhZGQoRSB2YWx1ZSkgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGNoYW5nZSB1bm1vZGlmaWFibGUgc2V0Iik7CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGNoYW5nZSB1bm1vZGlmaWFibGUgc2V0Iik7CiAgfQoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBlbGVtZW50cykgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGNoYW5nZSB1bm1vZGlmaWFibGUgc2V0Iik7CiAgfQoKICB2b2lkIHJlbW92ZUFsbChJdGVyYWJsZTxPYmplY3Q+IGVsZW1lbnRzKSB7CiAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgY2hhbmdlIHVubW9kaWZpYWJsZSBzZXQiKTsKICB9CgogIHZvaWQgcmV0YWluQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBjaGFuZ2UgdW5tb2RpZmlhYmxlIHNldCIpOwogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGNoYW5nZSB1bm1vZGlmaWFibGUgc2V0Iik7CiAgfQoKICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgY2hhbmdlIHVubW9kaWZpYWJsZSBzZXQiKTsKICB9CgogIGJvb2wgcmVtb3ZlKE9iamVjdCB2YWx1ZSkgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGNoYW5nZSB1bm1vZGlmaWFibGUgc2V0Iik7CiAgfQp9CoJ4AE5OPAEjGQEjBEtEJgRGMTUiOwRQUQ0vNUtHARUBIQEcAR0BHAESARIBIwEmATAvOQE8AREZBAEmLgQBLjYEAS5HPR8hGgYZBAErGB4wBhkEASsYHjEGGQQBLR4mBhEEAR8jBAErHR48BhMEASkdHjsGEwQBK0wPMxMEASg0ARE6H0AbEwQBSgEgNwFFATUlASQoBAEsKiAuBiAiMAYSBAFFHj0SBAEiHiUGEQQBKSopKjALKCUNJiQhKAgGHgQBIx4mBhIEARwlBAEuLQQBHCUEAS4tBAEQHxouBhcEAQ8fGi4GDgkbHRMEATMeKQYpLAQBMg4gHhsaHggGJiksBAE0DiAeGx0wChoeCAYmKSwEARswMRoeMRYGRgQCASIES0QmBEY2NSI7BE9RDTxEBkc+KDgCATpIKkUvPUweFAEUAR4BSAEpHyA5BhMEASsfIDgGEwQBKy0BTU4BIwEmAS85ATwBERkEASYuBAEuNgQBLkc9HyEaBhkEASsYHjAGGQQBKxgeMQYZBAEtHiYGEQQBHyMEAStMDzMTBAEoNAEROh9AGxMEAUoBRQE1JQEkKAQBLCogLgYgIjAGEgQBRR49EgQBIh4lBhEEASkqKSowCyglDSYkISgIBh4EASMeJgYSBAEcJQQBLi0EARwlBAEuLQQBEB8aLgYXBAEPHxouBg4JGx0TBAEzHikGKSwEATIOIB4bGh4IBiYpLAQBNA4gHhsdMAoaHggGJiksBAEbMDEaHjEWBkYEAgEoMBsBJQEqATQBHgE+ATIBIQEdISYGEQQBHQEWPgQBET4EASY+BAEuPgQBLj4EASs+BAErPgQBHj4EAgEYZGFydDpjb2xsZWN0aW9uL3NldC5kYXJ0NG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb2xsZWN0aW9uL2hhc2hfc2V0LmRhcnSTey8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29sbGVjdGlvbjsKCi8vLyBBbiB1bm9yZGVyZWQgaGFzaC10YWJsZSBiYXNlZCBbU2V0XSBpbXBsZW1lbnRhdGlvbi4KLy8vCi8vLyBUaGUgZWxlbWVudHMgb2YgYSBgSGFzaFNldGAgbXVzdCBoYXZlIGNvbnNpc3RlbnQgZXF1YWxpdHkKLy8vIGFuZCBoYXNoQ29kZSBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgbWVhbnMgdGhhdCB0aGUgZXF1YWxzIG9wZXJhdGlvbgovLy8gbXVzdCBkZWZpbmUgYSBzdGFibGUgZXF1aXZhbGVuY2UgcmVsYXRpb24gb24gdGhlIGVsZW1lbnRzIChyZWZsZXhpdmUsCi8vLyBzeW1tZXRyaWMsIHRyYW5zaXRpdmUsIGFuZCBjb25zaXN0ZW50IG92ZXIgdGltZSksIGFuZCB0aGF0IHRoZSBoYXNoQ29kZQovLy8gbXVzdCBjb25zaXN0ZW50IHdpdGggZXF1YWxpdHksIHNvIHRoYXQgdGhlIHNhbWUgZm9yIG9iamVjdHMgdGhhdCBhcmUKLy8vIGNvbnNpZGVyZWQgZXF1YWwuCi8vLwovLy8gVGhlIHNldCBhbGxvd3MgYG51bGxgIGFzIGFuIGVsZW1lbnQuCi8vLwovLy8gTW9zdCBzaW1wbGUgb3BlcmF0aW9ucyBvbiBgSGFzaFNldGAgYXJlIGRvbmUgaW4gKHBvdGVudGlhbGx5IGFtb3J0aXplZCkKLy8vIGNvbnN0YW50IHRpbWU6IFthZGRdLCBbY29udGFpbnNdLCBbcmVtb3ZlXSwgYW5kIFtsZW5ndGhdLCBwcm92aWRlZCB0aGUgaGFzaAovLy8gY29kZXMgb2Ygb2JqZWN0cyBhcmUgd2VsbCBkaXN0cmlidXRlZC4KLy8vCi8vLyBUaGUgaXRlcmF0aW9uIG9yZGVyIG9mIHRoZSBzZXQgaXMgbm90IHNwZWNpZmllZCBhbmQgZGVwZW5kcyBvbgovLy8gdGhlIGhhc2hjb2RlcyBvZiB0aGUgcHJvdmlkZWQgZWxlbWVudHMuIEhvd2V2ZXIsIHRoZSBvcmRlciBpcyBzdGFibGU6Ci8vLyBtdWx0aXBsZSBpdGVyYXRpb25zIG92ZXIgdGhlIHNhbWUgc2V0IHByb2R1Y2UgdGhlIHNhbWUgb3JkZXIsIGFzIGxvbmcgYXMKLy8vIHRoZSBzZXQgaXMgbm90IG1vZGlmaWVkLgphYnN0cmFjdCBjbGFzcyBIYXNoU2V0PEU+IGltcGxlbWVudHMgU2V0PEU+IHsKICAvLy8gQ3JlYXRlIGEgaGFzaCBzZXQgdXNpbmcgdGhlIHByb3ZpZGVkIFtlcXVhbHNdIGFzIGVxdWFsaXR5LgogIC8vLwogIC8vLyBUaGUgcHJvdmlkZWQgW2VxdWFsc10gbXVzdCBkZWZpbmUgYSBzdGFibGUgZXF1aXZhbGVuY2UgcmVsYXRpb24sIGFuZAogIC8vLyBbaGFzaENvZGVdIG11c3QgYmUgY29uc2lzdGVudCB3aXRoIFtlcXVhbHNdLiBJZiB0aGUgW2VxdWFsc10gb3IgW2hhc2hDb2RlXQogIC8vLyBtZXRob2RzIHdvbid0IHdvcmsgb24gYWxsIG9iamVjdHMsIGJ1dCBvbmx5IG9uIHNvbWUgaW5zdGFuY2VzIG9mIEUsIHRoZQogIC8vLyBbaXNWYWxpZEtleV0gcHJlZGljYXRlIGNhbiBiZSB1c2VkIHRvIHJlc3RyaWN0IHRoZSBrZXlzIHRoYXQgdGhlIGZ1bmN0aW9ucwogIC8vLyBhcmUgYXBwbGllZCB0by4KICAvLy8gQW55IGtleSBmb3Igd2hpY2ggW2lzVmFsaWRLZXldIHJldHVybnMgZmFsc2UgaXMgYXV0b21hdGljYWxseSBhc3N1bWVkCiAgLy8vIHRvIG5vdCBiZSBpbiB0aGUgc2V0IHdoZW4gYXNraW5nIGBjb250YWluc2AuCiAgLy8vCiAgLy8vIElmIFtlcXVhbHNdIG9yIFtoYXNoQ29kZV0gYXJlIG9taXR0ZWQsIHRoZSBzZXQgdXNlcwogIC8vLyB0aGUgZWxlbWVudHMnIGludHJpbnNpYyBbT2JqZWN0Lj09XSBhbmQgW09iamVjdC5oYXNoQ29kZV0uCiAgLy8vCiAgLy8vIElmIHlvdSBzdXBwbHkgb25lIG9mIFtlcXVhbHNdIGFuZCBbaGFzaENvZGVdLAogIC8vLyB5b3Ugc2hvdWxkIGdlbmVyYWxseSBhbHNvIHRvIHN1cHBseSB0aGUgb3RoZXIuCiAgLy8vCiAgLy8vIElmIHRoZSBzdXBwbGllZCBgZXF1YWxzYCBvciBgaGFzaENvZGVgIGZ1bmN0aW9ucyB3b24ndCB3b3JrIG9uIGFsbCBbRV0KICAvLy8gb2JqZWN0cywgYW5kIHRoZSBtYXAgd2lsbCBiZSB1c2VkIGluIGEgc2V0dGluZyB3aGVyZSBhIG5vbi1gRWAgb2JqZWN0CiAgLy8vIGlzIHBhc3NlZCB0bywgZS5nLiwgYGNvbnRhaW5zYCwgdGhlbiB0aGUgW2lzVmFsaWRLZXldIGZ1bmN0aW9uIHNob3VsZAogIC8vLyBhbHNvIGJlIHN1cHBsaWVkLgogIC8vLwogIC8vLyBJZiBbaXNWYWxpZEtleV0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGVzdGluZyBpZiB0aGUgb2JqZWN0IGlzIGFuCiAgLy8vIFtFXSBpbnN0YW5jZS4gVGhhdCBtZWFucyB0aGF0OgogIC8vLwogIC8vLyAgICAgbmV3IEhhc2hTZXQ8aW50PihlcXVhbHM6IChpbnQgZTEsIGludCBlMikgPT4gKGUxIC0gZTIpICUgNSA9PSAwLAogIC8vLyAgICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogKGludCBlKSA9PiBlICUgNSkKICAvLy8KICAvLy8gZG9lcyBub3QgbmVlZCBhbiBgaXNWYWxpZEtleWAgYXJndW1lbnQsIGJlY2F1c2UgaXQgZGVmYXVsdHMgdG8gb25seQogIC8vLyBhY2NlcHRpbmcgYGludGAgdmFsdWVzIHdoaWNoIGFyZSBhY2NlcHRlZCBieSBib3RoIGBlcXVhbHNgIGFuZCBgaGFzaENvZGVgLgogIC8vLwogIC8vLyBJZiBuZWl0aGVyIGBlcXVhbHNgLCBgaGFzaENvZGVgLCBub3IgYGlzVmFsaWRLZXlgIGlzIHByb3ZpZGVkLAogIC8vLyB0aGUgZGVmYXVsdCBgaXNWYWxpZEtleWAgaW5zdGVhZCBhY2NlcHRzIGFsbCB2YWx1ZXMuCiAgLy8vIFRoZSBkZWZhdWx0IGVxdWFsaXR5IGFuZCBoYXNoY29kZSBvcGVyYXRpb25zIGFyZSBhc3N1bWVkIHRvIHdvcmsgb24gYWxsCiAgLy8vIG9iamVjdHMuCiAgLy8vCiAgLy8vIExpa2V3aXNlLCBpZiBgZXF1YWxzYCBpcyBbaWRlbnRpY2FsXSwgYGhhc2hDb2RlYCBpcyBbaWRlbnRpdHlIYXNoQ29kZV0KICAvLy8gYW5kIGBpc1ZhbGlkS2V5YCBpcyBvbWl0dGVkLCB0aGUgcmVzdWx0aW5nIHNldCBpcyBpZGVudGl0eSBiYXNlZCwKICAvLy8gYW5kIHRoZSBgaXNWYWxpZEtleWAgZGVmYXVsdHMgdG8gYWNjZXB0aW5nIGFsbCBrZXlzLgogIC8vLyBTdWNoIGEgbWFwIGNhbiBiZSBjcmVhdGVkIGRpcmVjdGx5IHVzaW5nIFtIYXNoU2V0LmlkZW50aXR5XS4KICBleHRlcm5hbCBmYWN0b3J5IEhhc2hTZXQoCiAgICAgIHtib29sIGVxdWFscyhFIGUxLCBFIGUyKSwKICAgICAgaW50IGhhc2hDb2RlKEUgZSksCiAgICAgIGJvb2wgaXNWYWxpZEtleShwb3RlbnRpYWxLZXkpfSk7CgogIC8vLyBDcmVhdGVzIGFuIHVub3JkZXJlZCBpZGVudGl0eS1iYXNlZCBzZXQuCiAgLy8vCiAgLy8vIEVmZmVjdGl2ZWx5IGEgc2hvcnRoYW5kIGZvcjoKICAvLy8KICAvLy8gICAgIG5ldyBIYXNoU2V0PEU+KGVxdWFsczogaWRlbnRpY2FsLAogIC8vLyAgICAgICAgICAgICAgICAgICAgaGFzaENvZGU6IGlkZW50aXR5SGFzaENvZGUpCiAgZXh0ZXJuYWwgZmFjdG9yeSBIYXNoU2V0LmlkZW50aXR5KCk7CgogIC8vLyBDcmVhdGUgYSBoYXNoIHNldCBjb250YWluaW5nIGFsbCBbZWxlbWVudHNdLgogIC8vLwogIC8vLyBDcmVhdGVzIGEgaGFzaCBzZXQgYXMgYnkgYG5ldyBIYXNoU2V0PEU+KClgIGFuZCBhZGRzIGFsbCBnaXZlbiBbZWxlbWVudHNdCiAgLy8vIHRvIHRoZSBzZXQuIFRoZSBlbGVtZW50cyBhcmUgYWRkZWQgaW4gb3JkZXIuIElmIFtlbGVtZW50c10gY29udGFpbnMKICAvLy8gdHdvIGVudHJpZXMgdGhhdCBhcmUgZXF1YWwsIGJ1dCBub3QgaWRlbnRpY2FsLCB0aGVuIHRoZSBmaXJzdCBvbmUgaXMKICAvLy8gdGhlIG9uZSBpbiB0aGUgcmVzdWx0aW5nIHNldC4KICAvLy8KICAvLy8gQWxsIHRoZSBbZWxlbWVudHNdIHNob3VsZCBiZSBpbnN0YW5jZXMgb2YgW0VdLgogIC8vLyBUaGUgYGVsZW1lbnRzYCBpdGVyYWJsZSBpdHNlbGYgbWF5IGhhdmUgYW55IGVsZW1lbnQgdHlwZSwgc28gdGhpcwogIC8vLyBjb25zdHJ1Y3RvciBjYW4gYmUgdXNlZCB0byBkb3duLWNhc3QgYSBgU2V0YCwgZm9yIGV4YW1wbGUgYXM6CiAgLy8vIGBgYGRhcnQKICAvLy8gU2V0PFN1cGVyVHlwZT4gc3VwZXJTZXQgPSAuLi47CiAgLy8vIFNldDxTdWJUeXBlPiBzdWJTZXQgPQogIC8vLyAgICAgbmV3IEhhc2hTZXQ8U3ViVHlwZT4uZnJvbShzdXBlclNldC53aGVyZVR5cGU8U3ViVHlwZT4oKSk7CiAgLy8vIGBgYAogIGZhY3RvcnkgSGFzaFNldC5mcm9tKEl0ZXJhYmxlIGVsZW1lbnRzKSB7CiAgICBIYXNoU2V0PEU+IHJlc3VsdCA9IEhhc2hTZXQ8RT4oKTsKICAgIGZvciAoZmluYWwgZSBpbiBlbGVtZW50cykgewogICAgICByZXN1bHQuYWRkKGUpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBDcmVhdGUgYSBoYXNoIHNldCBjb250YWluaW5nIGFsbCBbZWxlbWVudHNdLgogIC8vLwogIC8vLyBDcmVhdGVzIGEgaGFzaCBzZXQgYXMgYnkgYG5ldyBIYXNoU2V0PEU+KClgIGFuZCBhZGRzIGFsbCBnaXZlbiBbZWxlbWVudHNdCiAgLy8vIHRvIHRoZSBzZXQuIFRoZSBlbGVtZW50cyBhcmUgYWRkZWQgaW4gb3JkZXIuIElmIFtlbGVtZW50c10gY29udGFpbnMKICAvLy8gdHdvIGVudHJpZXMgdGhhdCBhcmUgZXF1YWwsIGJ1dCBub3QgaWRlbnRpY2FsLCB0aGVuIHRoZSBmaXJzdCBvbmUgaXMKICAvLy8gdGhlIG9uZSBpbiB0aGUgcmVzdWx0aW5nIHNldC4KICBmYWN0b3J5IEhhc2hTZXQub2YoSXRlcmFibGU8RT4gZWxlbWVudHMpID0+IEhhc2hTZXQ8RT4oKS4uYWRkQWxsKGVsZW1lbnRzKTsKCiAgLy8vIFByb3ZpZGVzIGFuIGl0ZXJhdG9yIHRoYXQgaXRlcmF0ZXMgb3ZlciB0aGUgZWxlbWVudHMgb2YgdGhpcyBzZXQuCiAgLy8vCiAgLy8vIFRoZSBvcmRlciBvZiBpdGVyYXRpb24gaXMgdW5zcGVjaWZpZWQsCiAgLy8vIGJ1dCBjb25zaXN0ZW50IGJldHdlZW4gY2hhbmdlcyB0byB0aGUgc2V0LgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvcjsKfQp1AE5OPAEZATgEPkdKTEkWBCkETFArBENKTR0uQQZLUU5RFkwzBjpBBjQ1Bk1MTBgGTSUGSzcGSlEGRTtODwZNSDtDHCAZJwEvBiMGLDUnATMGUEpLJAY1SEQOJRxECiwmIBUGEwQBMwZQSkskTgFIBi0xHAIBHWRhcnQ6Y29sbGVjdGlvbi9oYXNoX3NldC5kYXJ0NG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb2xsZWN0aW9uL2l0ZXJhYmxlLmRhcnSuzC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29sbGVjdGlvbjsKCi8vLyBUaGlzIFtJdGVyYWJsZV0gbWl4aW4gaW1wbGVtZW50cyBhbGwgW0l0ZXJhYmxlXSBtZW1iZXJzIGV4Y2VwdCBgaXRlcmF0b3JgLgovLy8KLy8vIEFsbCBvdGhlciBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBgaXRlcmF0b3JgLgphYnN0cmFjdCBjbGFzcyBJdGVyYWJsZU1peGluPEU+IGltcGxlbWVudHMgSXRlcmFibGU8RT4gewogIC8vIFRoaXMgY2xhc3MgaGFzIG1ldGhvZHMgY29waWVkIHZlcmJhdGltIGludG86CiAgLy8gLSBJdGVyYWJsZUJhc2UKICAvLyAtIFNldE1peGluCiAgLy8gSWYgY2hhbmdpbmcgYSBtZXRob2QgaGVyZSwgYWxzbyBjaGFuZ2UgdGhlIG90aGVyIGNvcGllcy4KCiAgSXRlcmFibGU8Uj4gY2FzdDxSPigpID0+IEl0ZXJhYmxlLmNhc3RGcm9tPEUsIFI+KHRoaXMpOwogIEl0ZXJhYmxlPFQ+IG1hcDxUPihUIGYoRSBlbGVtZW50KSkgPT4gTWFwcGVkSXRlcmFibGU8RSwgVD4odGhpcywgZik7CgogIEl0ZXJhYmxlPEU+IHdoZXJlKGJvb2wgZihFIGVsZW1lbnQpKSA9PiBXaGVyZUl0ZXJhYmxlPEU+KHRoaXMsIGYpOwoKICBJdGVyYWJsZTxUPiB3aGVyZVR5cGU8VD4oKSA9PiBXaGVyZVR5cGVJdGVyYWJsZTxUPih0aGlzKTsKCiAgSXRlcmFibGU8VD4gZXhwYW5kPFQ+KEl0ZXJhYmxlPFQ+IGYoRSBlbGVtZW50KSkgPT4KICAgICAgRXhwYW5kSXRlcmFibGU8RSwgVD4odGhpcywgZik7CgogIEl0ZXJhYmxlPEU+IGZvbGxvd2VkQnkoSXRlcmFibGU8RT4gb3RoZXIpIHsKICAgIC8vIFR5cGUgd29ya2Fyb3VuZCBiZWNhdXNlIEl0ZXJhYmxlTWl4aW48RT4gZG9lc24ndCBwcm9tb3RlCiAgICAvLyB0byBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxFPi4KICAgIEl0ZXJhYmxlPEU+IHNlbGYgPSB0aGlzOwogICAgaWYgKHNlbGYgaXMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4pIHsKICAgICAgcmV0dXJuIEZvbGxvd2VkQnlJdGVyYWJsZTxFPi5maXJzdEVmZmljaWVudChzZWxmLCBvdGhlcik7CiAgICB9CiAgICByZXR1cm4gRm9sbG93ZWRCeUl0ZXJhYmxlPEU+KHRoaXMsIG90aGVyKTsKICB9CgogIGJvb2wgY29udGFpbnMoT2JqZWN0IGVsZW1lbnQpIHsKICAgIGZvciAoRSBlIGluIHRoaXMpIHsKICAgICAgaWYgKGUgPT0gZWxlbWVudCkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBmKEUgZWxlbWVudCkpIHsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIGYoZWxlbWVudCk7CiAgfQoKICBFIHJlZHVjZShFIGNvbWJpbmUoRSB2YWx1ZSwgRSBlbGVtZW50KSkgewogICAgSXRlcmF0b3I8RT4gaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yOwogICAgaWYgKCFpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgfQogICAgRSB2YWx1ZSA9IGl0ZXJhdG9yLmN1cnJlbnQ7CiAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICB2YWx1ZSA9IGNvbWJpbmUodmFsdWUsIGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgVCBmb2xkPFQ+KFQgaW5pdGlhbFZhbHVlLCBUIGNvbWJpbmUoVCBwcmV2aW91c1ZhbHVlLCBFIGVsZW1lbnQpKSB7CiAgICB2YXIgdmFsdWUgPSBpbml0aWFsVmFsdWU7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB2YWx1ZSA9IGNvbWJpbmUodmFsdWUsIGVsZW1lbnQpOwogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgYm9vbCBldmVyeShib29sIGYoRSBlbGVtZW50KSkgewogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAoIWYoZWxlbWVudCkpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgU3RyaW5nIGpvaW4oW1N0cmluZyBzZXBhcmF0b3IgPSAiIl0pIHsKICAgIEl0ZXJhdG9yPEU+IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcjsKICAgIGlmICghaXRlcmF0b3IubW92ZU5leHQoKSkgcmV0dXJuICIiOwogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IFN0cmluZ0J1ZmZlcigpOwogICAgaWYgKHNlcGFyYXRvciA9PSBudWxsIHx8IHNlcGFyYXRvciA9PSAiIikgewogICAgICBkbyB7CiAgICAgICAgYnVmZmVyLndyaXRlKCIke2l0ZXJhdG9yLmN1cnJlbnR9Iik7CiAgICAgIH0gd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpOwogICAgfSBlbHNlIHsKICAgICAgYnVmZmVyLndyaXRlKCIke2l0ZXJhdG9yLmN1cnJlbnR9Iik7CiAgICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgICAgYnVmZmVyLndyaXRlKHNlcGFyYXRvcik7CiAgICAgICAgYnVmZmVyLndyaXRlKCIke2l0ZXJhdG9yLmN1cnJlbnR9Iik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIGJvb2wgYW55KGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIExpc3Q8RT4gdG9MaXN0KHtib29sIGdyb3dhYmxlID0gdHJ1ZX0pID0+CiAgICAgIExpc3Q8RT4uZnJvbSh0aGlzLCBncm93YWJsZTogZ3Jvd2FibGUpOwoKICBTZXQ8RT4gdG9TZXQoKSA9PiBTZXQ8RT4uZnJvbSh0aGlzKTsKCiAgaW50IGdldCBsZW5ndGggewogICAgYXNzZXJ0KHRoaXMgaXMhIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlKTsKICAgIGludCBjb3VudCA9IDA7CiAgICBJdGVyYXRvciBpdCA9IGl0ZXJhdG9yOwogICAgd2hpbGUgKGl0Lm1vdmVOZXh0KCkpIHsKICAgICAgY291bnQrKzsKICAgIH0KICAgIHJldHVybiBjb3VudDsKICB9CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gIWl0ZXJhdG9yLm1vdmVOZXh0KCk7CgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gIWlzRW1wdHk7CgogIEl0ZXJhYmxlPEU+IHRha2UoaW50IGNvdW50KSB7CiAgICByZXR1cm4gVGFrZUl0ZXJhYmxlPEU+KHRoaXMsIGNvdW50KTsKICB9CgogIEl0ZXJhYmxlPEU+IHRha2VXaGlsZShib29sIHRlc3QoRSB2YWx1ZSkpIHsKICAgIHJldHVybiBUYWtlV2hpbGVJdGVyYWJsZTxFPih0aGlzLCB0ZXN0KTsKICB9CgogIEl0ZXJhYmxlPEU+IHNraXAoaW50IGNvdW50KSB7CiAgICByZXR1cm4gU2tpcEl0ZXJhYmxlPEU+KHRoaXMsIGNvdW50KTsKICB9CgogIEl0ZXJhYmxlPEU+IHNraXBXaGlsZShib29sIHRlc3QoRSB2YWx1ZSkpIHsKICAgIHJldHVybiBTa2lwV2hpbGVJdGVyYWJsZTxFPih0aGlzLCB0ZXN0KTsKICB9CgogIEUgZ2V0IGZpcnN0IHsKICAgIEl0ZXJhdG9yPEU+IGl0ID0gaXRlcmF0b3I7CiAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB9CiAgICByZXR1cm4gaXQuY3VycmVudDsKICB9CgogIEUgZ2V0IGxhc3QgewogICAgSXRlcmF0b3I8RT4gaXQgPSBpdGVyYXRvcjsKICAgIGlmICghaXQubW92ZU5leHQoKSkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIH0KICAgIEUgcmVzdWx0OwogICAgZG8gewogICAgICByZXN1bHQgPSBpdC5jdXJyZW50OwogICAgfSB3aGlsZSAoaXQubW92ZU5leHQoKSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRSBnZXQgc2luZ2xlIHsKICAgIEl0ZXJhdG9yPEU+IGl0ID0gaXRlcmF0b3I7CiAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgRSByZXN1bHQgPSBpdC5jdXJyZW50OwogICAgaWYgKGl0Lm1vdmVOZXh0KCkpIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBFIGZpcnN0V2hlcmUoYm9vbCB0ZXN0KEUgdmFsdWUpLCB7RSBvckVsc2UoKX0pIHsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHJldHVybiBlbGVtZW50OwogICAgfQogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgbGFzdFdoZXJlKGJvb2wgdGVzdChFIHZhbHVlKSwge0Ugb3JFbHNlKCl9KSB7CiAgICBFIHJlc3VsdDsKICAgIGJvb2wgZm91bmRNYXRjaGluZyA9IGZhbHNlOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAodGVzdChlbGVtZW50KSkgewogICAgICAgIHJlc3VsdCA9IGVsZW1lbnQ7CiAgICAgICAgZm91bmRNYXRjaGluZyA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIGlmIChmb3VuZE1hdGNoaW5nKSByZXR1cm4gcmVzdWx0OwogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgc2luZ2xlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIHtFIG9yRWxzZSgpfSkgewogICAgRSByZXN1bHQ7CiAgICBib29sIGZvdW5kTWF0Y2hpbmcgPSBmYWxzZTsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHsKICAgICAgICBpZiAoZm91bmRNYXRjaGluZykgewogICAgICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vTWFueSgpOwogICAgICAgIH0KICAgICAgICByZXN1bHQgPSBlbGVtZW50OwogICAgICAgIGZvdW5kTWF0Y2hpbmcgPSB0cnVlOwogICAgICB9CiAgICB9CiAgICBpZiAoZm91bmRNYXRjaGluZykgcmV0dXJuIHJlc3VsdDsKICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIGVsZW1lbnRBdChpbnQgaW5kZXgpIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGluZGV4LCAiaW5kZXgiKTsKICAgIFJhbmdlRXJyb3IuY2hlY2tOb3ROZWdhdGl2ZShpbmRleCwgImluZGV4Iik7CiAgICBpbnQgZWxlbWVudEluZGV4ID0gMDsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKGluZGV4ID09IGVsZW1lbnRJbmRleCkgcmV0dXJuIGVsZW1lbnQ7CiAgICAgIGVsZW1lbnRJbmRleCsrOwogICAgfQogICAgdGhyb3cgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4IiwgbnVsbCwgZWxlbWVudEluZGV4KTsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+IEl0ZXJhYmxlQmFzZS5pdGVyYWJsZVRvU2hvcnRTdHJpbmcodGhpcywgJygnLCAnKScpOwp9CgovLy8gQmFzZSBjbGFzcyBmb3IgaW1wbGVtZW50aW5nIFtJdGVyYWJsZV0uCi8vLwovLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGFsbCBtZXRob2RzIG9mIFtJdGVyYWJsZV0sIGV4Y2VwdCBbSXRlcmFibGUuaXRlcmF0b3JdLAovLy8gaW4gdGVybXMgb2YgYGl0ZXJhdG9yYC4KYWJzdHJhY3QgY2xhc3MgSXRlcmFibGVCYXNlPEU+IGV4dGVuZHMgSXRlcmFibGU8RT4gewogIGNvbnN0IEl0ZXJhYmxlQmFzZSgpOwoKICAvLy8gQ29udmVydCBhbiBgSXRlcmFibGVgIHRvIGEgc3RyaW5nIGxpa2UgW0l0ZXJhYmxlQmFzZS50b1N0cmluZ10uCiAgLy8vCiAgLy8vIEFsbG93cyB1c2luZyBvdGhlciBkZWxpbWl0ZXJzIHRoYW4gJygnIGFuZCAnKScuCiAgLy8vCiAgLy8vIEhhbmRsZXMgY2lyY3VsYXIgcmVmZXJlbmNlcyB3aGVyZSBjb252ZXJ0aW5nIG9uZSBvZiB0aGUgZWxlbWVudHMKICAvLy8gdG8gYSBzdHJpbmcgZW5kcyB1cCBjb252ZXJ0aW5nIFtpdGVyYWJsZV0gdG8gYSBzdHJpbmcgYWdhaW4uCiAgc3RhdGljIFN0cmluZyBpdGVyYWJsZVRvU2hvcnRTdHJpbmcoSXRlcmFibGUgaXRlcmFibGUsCiAgICAgIFtTdHJpbmcgbGVmdERlbGltaXRlciA9ICcoJywgU3RyaW5nIHJpZ2h0RGVsaW1pdGVyID0gJyknXSkgewogICAgaWYgKF9pc1RvU3RyaW5nVmlzaXRpbmcoaXRlcmFibGUpKSB7CiAgICAgIGlmIChsZWZ0RGVsaW1pdGVyID09ICIoIiAmJiByaWdodERlbGltaXRlciA9PSAiKSIpIHsKICAgICAgICAvLyBBdm9pZCBjcmVhdGluZyBhIG5ldyBzdHJpbmcgaW4gdGhlICJjb21tb24iIGNhc2UuCiAgICAgICAgcmV0dXJuICIoLi4uKSI7CiAgICAgIH0KICAgICAgcmV0dXJuICIkbGVmdERlbGltaXRlci4uLiRyaWdodERlbGltaXRlciI7CiAgICB9CiAgICBMaXN0PFN0cmluZz4gcGFydHMgPSA8U3RyaW5nPltdOwogICAgX3RvU3RyaW5nVmlzaXRpbmcuYWRkKGl0ZXJhYmxlKTsKICAgIHRyeSB7CiAgICAgIF9pdGVyYWJsZVBhcnRzVG9TdHJpbmdzKGl0ZXJhYmxlLCBwYXJ0cyk7CiAgICB9IGZpbmFsbHkgewogICAgICBhc3NlcnQoaWRlbnRpY2FsKF90b1N0cmluZ1Zpc2l0aW5nLmxhc3QsIGl0ZXJhYmxlKSk7CiAgICAgIF90b1N0cmluZ1Zpc2l0aW5nLnJlbW92ZUxhc3QoKTsKICAgIH0KICAgIHJldHVybiAoU3RyaW5nQnVmZmVyKGxlZnREZWxpbWl0ZXIpCiAgICAgICAgICAuLndyaXRlQWxsKHBhcnRzLCAiLCAiKQogICAgICAgICAgLi53cml0ZShyaWdodERlbGltaXRlcikpCiAgICAgICAgLnRvU3RyaW5nKCk7CiAgfQoKICAvLy8gQ29udmVydHMgYW4gYEl0ZXJhYmxlYCB0byBhIHN0cmluZy4KICAvLy8KICAvLy8gQ29udmVydHMgZWFjaCBlbGVtZW50cyB0byBhIHN0cmluZywgYW5kIHNlcGFyYXRlcyB0aGUgcmVzdWx0cyBieSAiLCAiLgogIC8vLyBUaGVuIHdyYXBzIHRoZSByZXN1bHQgaW4gW2xlZnREZWxpbWl0ZXJdIGFuZCBbcmlnaHREZWxpbWl0ZXJdLgogIC8vLwogIC8vLyBVbmxpa2UgW2l0ZXJhYmxlVG9TaG9ydFN0cmluZ10sIHRoaXMgY29udmVyc2lvbiBkb2Vzbid0IG9taXQgYW55CiAgLy8vIGVsZW1lbnRzIG9yIHB1dHMgYW55IGxpbWl0IG9uIHRoZSBzaXplIG9mIHRoZSByZXN1bHQuCiAgLy8vCiAgLy8vIEhhbmRsZXMgY2lyY3VsYXIgcmVmZXJlbmNlcyB3aGVyZSBjb252ZXJ0aW5nIG9uZSBvZiB0aGUgZWxlbWVudHMKICAvLy8gdG8gYSBzdHJpbmcgZW5kcyB1cCBjb252ZXJ0aW5nIFtpdGVyYWJsZV0gdG8gYSBzdHJpbmcgYWdhaW4uCiAgc3RhdGljIFN0cmluZyBpdGVyYWJsZVRvRnVsbFN0cmluZyhJdGVyYWJsZSBpdGVyYWJsZSwKICAgICAgW1N0cmluZyBsZWZ0RGVsaW1pdGVyID0gJygnLCBTdHJpbmcgcmlnaHREZWxpbWl0ZXIgPSAnKSddKSB7CiAgICBpZiAoX2lzVG9TdHJpbmdWaXNpdGluZyhpdGVyYWJsZSkpIHsKICAgICAgcmV0dXJuICIkbGVmdERlbGltaXRlci4uLiRyaWdodERlbGltaXRlciI7CiAgICB9CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gU3RyaW5nQnVmZmVyKGxlZnREZWxpbWl0ZXIpOwogICAgX3RvU3RyaW5nVmlzaXRpbmcuYWRkKGl0ZXJhYmxlKTsKICAgIHRyeSB7CiAgICAgIGJ1ZmZlci53cml0ZUFsbChpdGVyYWJsZSwgIiwgIik7CiAgICB9IGZpbmFsbHkgewogICAgICBhc3NlcnQoaWRlbnRpY2FsKF90b1N0cmluZ1Zpc2l0aW5nLmxhc3QsIGl0ZXJhYmxlKSk7CiAgICAgIF90b1N0cmluZ1Zpc2l0aW5nLnJlbW92ZUxhc3QoKTsKICAgIH0KICAgIGJ1ZmZlci53cml0ZShyaWdodERlbGltaXRlcik7CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQp9CgovLy8gQSBjb2xsZWN0aW9uIHVzZWQgdG8gaWRlbnRpZnkgY3ljbGljIGxpc3RzIGR1cmluZyB0b1N0cmluZygpIGNhbGxzLgpmaW5hbCBMaXN0IF90b1N0cmluZ1Zpc2l0aW5nID0gW107CgovLy8gQ2hlY2sgaWYgd2UgYXJlIGN1cnJlbnRseSB2aXNpdGluZyBgb2AgaW4gYSB0b1N0cmluZyBjYWxsLgpib29sIF9pc1RvU3RyaW5nVmlzaXRpbmcoT2JqZWN0IG8pIHsKICBmb3IgKGludCBpID0gMDsgaSA8IF90b1N0cmluZ1Zpc2l0aW5nLmxlbmd0aDsgaSsrKSB7CiAgICBpZiAoaWRlbnRpY2FsKG8sIF90b1N0cmluZ1Zpc2l0aW5nW2ldKSkgcmV0dXJuIHRydWU7CiAgfQogIHJldHVybiBmYWxzZTsKfQoKLy8vIENvbnZlcnQgZWxlbWVudHMgb2YgW2l0ZXJhYmxlXSB0byBzdHJpbmdzIGFuZCBzdG9yZSB0aGVtIGluIFtwYXJ0c10uCnZvaWQgX2l0ZXJhYmxlUGFydHNUb1N0cmluZ3MoSXRlcmFibGUgaXRlcmFibGUsIExpc3Q8U3RyaW5nPiBwYXJ0cykgewogIC8qCiAgICogVGhpcyBpcyB0aGUgY29tcGxpY2F0ZWQgcGFydCBvZiBbaXRlcmFibGVUb1Nob3J0U3RyaW5nXS4KICAgKiBJdCBpcyBleHRyYWN0ZWQgYXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0byBhdm9pZCBoYXZpbmcgdG9vIG11Y2ggY29kZQogICAqIGluc2lkZSB0aGUgdHJ5L2ZpbmFsbHkuCiAgICovCiAgLy8vIFRyeSB0byBzdGF5IGJlbG93IHRoaXMgbWFueSBjaGFyYWN0ZXJzLgogIGNvbnN0IGludCBsZW5ndGhMaW1pdCA9IDgwOwoKICAvLy8gQWx3YXlzIGF0IGxlYXN0IHRoaXMgbWFueSBlbGVtZW50cyBhdCB0aGUgc3RhcnQuCiAgY29uc3QgaW50IGhlYWRDb3VudCA9IDM7CgogIC8vLyBBbHdheXMgYXQgbGVhc3QgdGhpcyBtYW55IGVsZW1lbnRzIGF0IHRoZSBlbmQuCiAgY29uc3QgaW50IHRhaWxDb3VudCA9IDI7CgogIC8vLyBTdG9wIGl0ZXJhdGluZyBhZnRlciB0aGlzIG1hbnkgZWxlbWVudHMuIEl0ZXJhYmxlcyBjYW4gYmUgaW5maW5pdGUuCiAgY29uc3QgaW50IG1heENvdW50ID0gMTAwOwogIC8vIFBlciBlbnRyeSBsZW5ndGggb3ZlcmhlYWQuIEl0J3MgZm9yICIsICIgZm9yIGFsbCBhZnRlciB0aGUgZmlyc3QgZW50cnksCiAgLy8gYW5kIGZvciAiKCIgYW5kICIpIiBmb3IgdGhlIGluaXRpYWwgZW50cnkuIEJ5IHB1cmUgbHVjaywgdGhhdCdzIHRoZSBzYW1lCiAgLy8gbnVtYmVyLgogIGNvbnN0IGludCBvdmVyaGVhZCA9IDI7CiAgY29uc3QgaW50IGVsbGlwc2lzU2l6ZSA9IDM7IC8vICIuLi4iLmxlbmd0aC4KCiAgaW50IGxlbmd0aCA9IDA7CiAgaW50IGNvdW50ID0gMDsKICBJdGVyYXRvciBpdCA9IGl0ZXJhYmxlLml0ZXJhdG9yOwogIC8vIEluaXRpYWwgcnVuIG9mIGVsZW1lbnRzLCBhdCBsZWFzdCBoZWFkQ291bnQsIGFuZCB0aGVuIGNvbnRpbnVlIHVudGlsCiAgLy8gcGFzc2luZyBhdCBtb3N0IGxlbmd0aExpbWl0IGNoYXJhY3RlcnMuCiAgd2hpbGUgKGxlbmd0aCA8IGxlbmd0aExpbWl0IHx8IGNvdW50IDwgaGVhZENvdW50KSB7CiAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHJldHVybjsKICAgIFN0cmluZyBuZXh0ID0gIiR7aXQuY3VycmVudH0iOwogICAgcGFydHMuYWRkKG5leHQpOwogICAgbGVuZ3RoICs9IG5leHQubGVuZ3RoICsgb3ZlcmhlYWQ7CiAgICBjb3VudCsrOwogIH0KCiAgU3RyaW5nIHBlbnVsdGltYXRlU3RyaW5nOwogIFN0cmluZyB1bHRpbWF0ZVN0cmluZzsKCiAgLy8gRmluZCBsYXN0IHR3byBlbGVtZW50cy4gT25lIG9yIG1vcmUgb2YgdGhlbSBtYXkgYWxyZWFkeSBiZSBpbiB0aGUKICAvLyBwYXJ0cyBhcnJheS4gSW5jbHVkZSB0aGVpciBsZW5ndGggaW4gYGxlbmd0aGAuCiAgT2JqZWN0IHBlbnVsdGltYXRlOwogIE9iamVjdCB1bHRpbWF0ZTsKICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHsKICAgIGlmIChjb3VudCA8PSBoZWFkQ291bnQgKyB0YWlsQ291bnQpIHJldHVybjsKICAgIHVsdGltYXRlU3RyaW5nID0gcGFydHMucmVtb3ZlTGFzdCgpOwogICAgcGVudWx0aW1hdGVTdHJpbmcgPSBwYXJ0cy5yZW1vdmVMYXN0KCk7CiAgfSBlbHNlIHsKICAgIHBlbnVsdGltYXRlID0gaXQuY3VycmVudDsKICAgIGNvdW50Kys7CiAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHsKICAgICAgaWYgKGNvdW50IDw9IGhlYWRDb3VudCArIDEpIHsKICAgICAgICBwYXJ0cy5hZGQoIiRwZW51bHRpbWF0ZSIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB1bHRpbWF0ZVN0cmluZyA9ICIkcGVudWx0aW1hdGUiOwogICAgICBwZW51bHRpbWF0ZVN0cmluZyA9IHBhcnRzLnJlbW92ZUxhc3QoKTsKICAgICAgbGVuZ3RoICs9IHVsdGltYXRlU3RyaW5nLmxlbmd0aCArIG92ZXJoZWFkOwogICAgfSBlbHNlIHsKICAgICAgdWx0aW1hdGUgPSBpdC5jdXJyZW50OwogICAgICBjb3VudCsrOwogICAgICAvLyBUaGVuIGtlZXAgbG9vcGluZywga2VlcGluZyB0aGUgbGFzdCB0d28gZWxlbWVudHMgaW4gdmFyaWFibGVzLgogICAgICBhc3NlcnQoY291bnQgPCBtYXhDb3VudCk7CiAgICAgIHdoaWxlIChpdC5tb3ZlTmV4dCgpKSB7CiAgICAgICAgcGVudWx0aW1hdGUgPSB1bHRpbWF0ZTsKICAgICAgICB1bHRpbWF0ZSA9IGl0LmN1cnJlbnQ7CiAgICAgICAgY291bnQrKzsKICAgICAgICBpZiAoY291bnQgPiBtYXhDb3VudCkgewogICAgICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBmb3VuZCB0aGUgZW5kIGJlZm9yZSBtYXhDb3VudCwgZ2l2ZSB1cC4KICAgICAgICAgIC8vIFRoaXMgY2Fubm90IGhhcHBlbiBpbiB0aGUgY29kZSBhYm92ZSBiZWNhdXNlIGVhY2ggZW50cnkKICAgICAgICAgIC8vIGluY3JlYXNlcyBsZW5ndGggYnkgYXQgbGVhc3QgdHdvLCBzbyB0aGVyZSBpcyBubyB3YXkgdG8KICAgICAgICAgIC8vIHZpc2l0IG1vcmUgdGhhbiB+NDAgZWxlbWVudHMgYmVmb3JlIHRoaXMgbG9vcC4KCiAgICAgICAgICAvLyBSZW1vdmUgYW55IHN1cnBsdXMgZWxlbWVudHMgdW50aWwgbGVuZ3RoLCBpbmNsdWRpbmcgIiwgLi4uKSIsCiAgICAgICAgICAvLyBpcyBhdCBtb3N0IGxlbmd0aExpbWl0LgogICAgICAgICAgd2hpbGUgKGxlbmd0aCA+IGxlbmd0aExpbWl0IC0gZWxsaXBzaXNTaXplIC0gb3ZlcmhlYWQgJiYKICAgICAgICAgICAgICBjb3VudCA+IGhlYWRDb3VudCkgewogICAgICAgICAgICBsZW5ndGggLT0gcGFydHMucmVtb3ZlTGFzdCgpLmxlbmd0aCArIG92ZXJoZWFkOwogICAgICAgICAgICBjb3VudC0tOwogICAgICAgICAgfQogICAgICAgICAgcGFydHMuYWRkKCIuLi4iKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgcGVudWx0aW1hdGVTdHJpbmcgPSAiJHBlbnVsdGltYXRlIjsKICAgICAgdWx0aW1hdGVTdHJpbmcgPSAiJHVsdGltYXRlIjsKICAgICAgbGVuZ3RoICs9IHVsdGltYXRlU3RyaW5nLmxlbmd0aCArIHBlbnVsdGltYXRlU3RyaW5nLmxlbmd0aCArIDIgKiBvdmVyaGVhZDsKICAgIH0KICB9CgogIC8vIElmIHRoZXJlIGlzIGEgZ2FwIGJldHdlZW4gdGhlIGluaXRpYWwgcnVuIGFuZCB0aGUgbGFzdCB0d28sCiAgLy8gcHJlcGFyZSB0byBhZGQgYW4gZWxsaXBzaXMuCiAgU3RyaW5nIGVsaXNpb247CiAgaWYgKGNvdW50ID4gcGFydHMubGVuZ3RoICsgdGFpbENvdW50KSB7CiAgICBlbGlzaW9uID0gIi4uLiI7CiAgICBsZW5ndGggKz0gZWxsaXBzaXNTaXplICsgb3ZlcmhlYWQ7CiAgfQoKICAvLyBJZiB0aGUgbGFzdCB0d28gZWxlbWVudHMgd2VyZSB2ZXJ5IGxvbmcsIGFuZCB3ZSBoYXZlIG1vcmUgdGhhbgogIC8vIGhlYWRDb3VudCBlbGVtZW50cyBpbiB0aGUgaW5pdGlhbCBydW4sIGRyb3Agc29tZSB0byBtYWtlIHJvb20gZm9yCiAgLy8gdGhlIGxhc3QgdHdvLgogIHdoaWxlIChsZW5ndGggPiBsZW5ndGhMaW1pdCAmJiBwYXJ0cy5sZW5ndGggPiBoZWFkQ291bnQpIHsKICAgIGxlbmd0aCAtPSBwYXJ0cy5yZW1vdmVMYXN0KCkubGVuZ3RoICsgb3ZlcmhlYWQ7CiAgICBpZiAoZWxpc2lvbiA9PSBudWxsKSB7CiAgICAgIGVsaXNpb24gPSAiLi4uIjsKICAgICAgbGVuZ3RoICs9IGVsbGlwc2lzU2l6ZSArIG92ZXJoZWFkOwogICAgfQogIH0KICBpZiAoZWxpc2lvbiAhPSBudWxsKSB7CiAgICBwYXJ0cy5hZGQoZWxpc2lvbik7CiAgfQogIHBhcnRzLmFkZChwZW51bHRpbWF0ZVN0cmluZyk7CiAgcGFydHMuYWRkKHVsdGltYXRlU3RyaW5nKTsKfQqBlABOTjwBGQFPBD45MhQQPgE6RwFFATwBNSUBLkAmHS5ABi8EASIYJQYSBAEkKAQBLCogLgYgIjAGEgQBRR49EgQBIh4lBhEEASkqKSowCy0lDSskIS0IBh4EASMeJgYSBAEsLgEnARMuExwcDwYSBAEsASMBICkEAS4tBAEgKQQBLi0EARAfGi4GFwQBDx8aLgYOCRsdEwQBER9AGz0TBAEzHikGKSwEATIOIB4bGh4IBiYpLAQBNg4gHhsdMAoaHggGJiksBAEbMDEaHjEWBkYEAUsCASwEURw1GAFGBjYGR0M5Qyk7PRgIMQYlJQowEDsmBigiIxUEASoGTUUGRzwGR0M4QykxBjclCicQOyYGIh4EAgFIIwE/JTc5BBACAUlGBT5KHQYuHgE3GwE1GwFKHE1ODRovARIRI0otNiAjFSYNBAEcGQFHNBYTGDApLAseDRokIxAIJy4yDR0PSCAeIB8RIENFRTwBSyVDIzwVDBwSCggqJFEGBAFBIRIqFScEAURHEz00GxcpBgQZGAQgHQIBHWRhcnQ6Y29sbGVjdGlvbi9pdGVyYWJsZS5kYXJ0NG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb2xsZWN0aW9uL2l0ZXJhdG9yLmRhcnSE+i8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29sbGVjdGlvbjsKCi8vLyBUaGUgW0hhc05leHRJdGVyYXRvcl0gY2xhc3Mgd3JhcHMgYW4gW0l0ZXJhdG9yXSBhbmQgcHJvdmlkZXMgbWV0aG9kcyB0bwovLy8gaXRlcmF0ZSBvdmVyIGFuIG9iamVjdCB1c2luZyBgaGFzTmV4dGAgYW5kIGBuZXh0YC4KLy8vCi8vLyBBbiBbSGFzTmV4dEl0ZXJhdG9yXSBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIFtJdGVyYXRvcl0gaW50ZXJmYWNlLgpjbGFzcyBIYXNOZXh0SXRlcmF0b3I8RT4gewogIHN0YXRpYyBjb25zdCBpbnQgX0hBU19ORVhUX0FORF9ORVhUX0lOX0NVUlJFTlQgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgX05PX05FWFQgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgX05PVF9NT1ZFRF9ZRVQgPSAyOwoKICBJdGVyYXRvcjxFPiBfaXRlcmF0b3I7CiAgaW50IF9zdGF0ZSA9IF9OT1RfTU9WRURfWUVUOwoKICBIYXNOZXh0SXRlcmF0b3IodGhpcy5faXRlcmF0b3IpOwoKICBib29sIGdldCBoYXNOZXh0IHsKICAgIGlmIChfc3RhdGUgPT0gX05PVF9NT1ZFRF9ZRVQpIF9tb3ZlKCk7CiAgICByZXR1cm4gX3N0YXRlID09IF9IQVNfTkVYVF9BTkRfTkVYVF9JTl9DVVJSRU5UOwogIH0KCiAgRSBuZXh0KCkgewogICAgLy8gQ2FsbCB0byBoYXNOZXh0IGlzIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgd2UgYXJlIHBvc2l0aW9uZWQgYXQgdGhlIGZpcnN0CiAgICAvLyBlbGVtZW50IHdoZW4gd2Ugc3RhcnQgaXRlcmF0aW5nLgogICAgaWYgKCFoYXNOZXh0KSB0aHJvdyBTdGF0ZUVycm9yKCJObyBtb3JlIGVsZW1lbnRzIik7CiAgICBhc3NlcnQoX3N0YXRlID09IF9IQVNfTkVYVF9BTkRfTkVYVF9JTl9DVVJSRU5UKTsKICAgIEUgcmVzdWx0ID0gX2l0ZXJhdG9yLmN1cnJlbnQ7CiAgICBfbW92ZSgpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgX21vdmUoKSB7CiAgICBpZiAoX2l0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgX3N0YXRlID0gX0hBU19ORVhUX0FORF9ORVhUX0lOX0NVUlJFTlQ7CiAgICB9IGVsc2UgewogICAgICBfc3RhdGUgPSBfTk9fTkVYVDsKICAgIH0KICB9Cn0KLQBOTjwBGQFMNwRGGzYhJwEZHwEjARUrNAQBDVAoODUiDRMEAREgLg0ZBgQCAR1kYXJ0OmNvbGxlY3Rpb24vaXRlcmF0b3IuZGFydDtvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29sbGVjdGlvbi9saW5rZWRfaGFzaF9tYXAuZGFydJfLLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb2xsZWN0aW9uOwoKLy8vIEEgaGFzaC10YWJsZSBiYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBbTWFwXS4KLy8vCi8vLyBUaGUgaW5zZXJ0aW9uIG9yZGVyIG9mIGtleXMgaXMgcmVtZW1iZXJlZCwKLy8vIGFuZCBrZXlzIGFyZSBpdGVyYXRlZCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGluc2VydGVkIGludG8gdGhlIG1hcC4KLy8vIFZhbHVlcyBhcmUgaXRlcmF0ZWQgaW4gdGhlaXIgY29ycmVzcG9uZGluZyBrZXkncyBvcmRlci4KLy8vIENoYW5naW5nIGEga2V5J3MgdmFsdWUsIHdoZW4gdGhlIGtleSBpcyBhbHJlYWR5IGluIHRoZSBtYXAsCi8vLyBkb2VzIG5vdCBjaGFuZ2UgdGhlIGl0ZXJhdGlvbiBvcmRlciwKLy8vIGJ1dCByZW1vdmluZyB0aGUga2V5IGFuZCBhZGRpbmcgaXQgYWdhaW4KLy8vIHdpbGwgbWFrZSBpdCBiZSBsYXN0IGluIHRoZSBpdGVyYXRpb24gb3JkZXIuCi8vLwovLy8gVGhlIGtleXMgb2YgYSBgTGlua2VkSGFzaE1hcGAgbXVzdCBoYXZlIGNvbnNpc3RlbnQgW09iamVjdC49PV0KLy8vIGFuZCBbT2JqZWN0Lmhhc2hDb2RlXSBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgbWVhbnMgdGhhdCB0aGUgYD09YCBvcGVyYXRvcgovLy8gbXVzdCBkZWZpbmUgYSBzdGFibGUgZXF1aXZhbGVuY2UgcmVsYXRpb24gb24gdGhlIGtleXMgKHJlZmxleGl2ZSwKLy8vIHN5bW1ldHJpYywgdHJhbnNpdGl2ZSwgYW5kIGNvbnNpc3RlbnQgb3ZlciB0aW1lKSwgYW5kIHRoYXQgYGhhc2hDb2RlYAovLy8gbXVzdCBiZSB0aGUgc2FtZSBmb3Igb2JqZWN0cyB0aGF0IGFyZSBjb25zaWRlcmVkIGVxdWFsIGJ5IGA9PWAuCi8vLwovLy8gVGhlIG1hcCBhbGxvd3MgYG51bGxgIGFzIGEga2V5LgphYnN0cmFjdCBjbGFzcyBMaW5rZWRIYXNoTWFwPEssIFY+IGltcGxlbWVudHMgTWFwPEssIFY+IHsKICAvLy8gQ3JlYXRlcyBhbiBpbnNlcnRpb24tb3JkZXJlZCBoYXNoLXRhYmxlIGJhc2VkIFtNYXBdLgogIC8vLwogIC8vLyBJZiBbZXF1YWxzXSBpcyBwcm92aWRlZCwgaXQgaXMgdXNlZCB0byBjb21wYXJlIHRoZSBrZXlzIGluIHRoZSB0YWJsZSB3aXRoCiAgLy8vIG5ldyBrZXlzLiBJZiBbZXF1YWxzXSBpcyBvbWl0dGVkLCB0aGUga2V5J3Mgb3duIFtPYmplY3QuPT1dIGlzIHVzZWQKICAvLy8gaW5zdGVhZC4KICAvLy8KICAvLy8gU2ltaWxhciwgaWYgW2hhc2hDb2RlXSBpcyBwcm92aWRlZCwgaXQgaXMgdXNlZCB0byBwcm9kdWNlIGEgaGFzaCB2YWx1ZQogIC8vLyBmb3Iga2V5cyBpbiBvcmRlciB0byBwbGFjZSB0aGVtIGluIHRoZSBoYXNoIHRhYmxlLiBJZiBpdCBpcyBvbWl0dGVkLCB0aGUKICAvLy8ga2V5J3Mgb3duIFtPYmplY3QuaGFzaENvZGVdIGlzIHVzZWQuCiAgLy8vCiAgLy8vIElmIHVzaW5nIG1ldGhvZHMgbGlrZSBbb3BlcmF0b3IgW11dLCBbcmVtb3ZlXSBhbmQgW2NvbnRhaW5zS2V5XSB0b2dldGhlcgogIC8vLyB3aXRoIGEgY3VzdG9tIGVxdWFsaXR5IGFuZCBoYXNoY29kZSwgYW4gZXh0cmEgYGlzVmFsaWRLZXlgIGZ1bmN0aW9uCiAgLy8vIGNhbiBiZSBzdXBwbGllZC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgW2VxdWFsc10gb3IKICAvLy8gW2hhc2hDb2RlXSB3aXRoIGFuIGFyZ3VtZW50IHRoYXQgbWF5IG5vdCBiZSBhIFtLXSBpbnN0YW5jZSwgYW5kIGlmIHRoZQogIC8vLyBjYWxsIHJldHVybnMgZmFsc2UsIHRoZSBrZXkgaXMgYXNzdW1lZCB0byBub3QgYmUgaW4gdGhlIHNldC4KICAvLy8gVGhlIFtpc1ZhbGlkS2V5XSBmdW5jdGlvbiBkZWZhdWx0cyB0byBqdXN0IHRlc3RpbmcgaWYgdGhlIG9iamVjdCBpcyBhCiAgLy8vIFtLXSBpbnN0YW5jZS4KICAvLy8KICAvLy8gRXhhbXBsZToKICAvLy8KICAvLy8gICAgIG5ldyBMaW5rZWRIYXNoTWFwPGludCxpbnQ+KGVxdWFsczogKGludCBhLCBpbnQgYikgPT4gKGIgLSBhKSAlIDUgPT0gMCwKICAvLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hDb2RlOiAoaW50IGUpID0+IGUgJSA1KQogIC8vLwogIC8vLyBUaGlzIGV4YW1wbGUgbWFwIGRvZXMgbm90IG5lZWQgYW4gYGlzVmFsaWRLZXlgIGZ1bmN0aW9uIHRvIGJlIHBhc3NlZC4KICAvLy8gVGhlIGRlZmF1bHQgZnVuY3Rpb24gYWNjZXB0cyBvbmx5IGBpbnRgIHZhbHVlcywgd2hpY2ggY2FuIHNhZmVseSBiZQogIC8vLyBwYXNzZWQgdG8gYm90aCB0aGUgYGVxdWFsc2AgYW5kIGBoYXNoQ29kZWAgZnVuY3Rpb25zLgogIC8vLwogIC8vLyBJZiBuZWl0aGVyIGBlcXVhbHNgLCBgaGFzaENvZGVgLCBub3IgYGlzVmFsaWRLZXlgIGlzIHByb3ZpZGVkLAogIC8vLyB0aGUgZGVmYXVsdCBgaXNWYWxpZEtleWAgaW5zdGVhZCBhY2NlcHRzIGFsbCBrZXlzLgogIC8vLyBUaGUgZGVmYXVsdCBlcXVhbGl0eSBhbmQgaGFzaGNvZGUgb3BlcmF0aW9ucyBhcmUgYXNzdW1lZCB0byB3b3JrIG9uIGFsbAogIC8vLyBvYmplY3RzLgogIC8vLwogIC8vLyBMaWtld2lzZSwgaWYgYGVxdWFsc2AgaXMgW2lkZW50aWNhbF0sIGBoYXNoQ29kZWAgaXMgW2lkZW50aXR5SGFzaENvZGVdCiAgLy8vIGFuZCBgaXNWYWxpZEtleWAgaXMgb21pdHRlZCwgdGhlIHJlc3VsdGluZyBtYXAgaXMgaWRlbnRpdHkgYmFzZWQsCiAgLy8vIGFuZCB0aGUgYGlzVmFsaWRLZXlgIGRlZmF1bHRzIHRvIGFjY2VwdGluZyBhbGwga2V5cy4KICAvLy8gU3VjaCBhIG1hcCBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSB1c2luZyBbTGlua2VkSGFzaE1hcC5pZGVudGl0eV0uCiAgLy8vCiAgLy8vIFRoZSB1c2VkIGBlcXVhbHNgIGFuZCBgaGFzaENvZGVgIG1ldGhvZCBzaG91bGQgYWx3YXlzIGJlIGNvbnNpc3RlbnQsCiAgLy8vIHNvIHRoYXQgaWYgYGVxdWFscyhhLCBiKWAgdGhlbiBgaGFzaENvZGUoYSkgPT0gaGFzaENvZGUoYilgLiBUaGUgaGFzaAogIC8vLyBvZiBhbiBvYmplY3QsIG9yIHdoYXQgaXQgY29tcGFyZXMgZXF1YWwgdG8sIHNob3VsZCBub3QgY2hhbmdlIHdoaWxlIHRoZQogIC8vLyBvYmplY3QgaXMgaW4gdGhlIHRhYmxlLiBJZiBpdCBkb2VzIGNoYW5nZSwgdGhlIHJlc3VsdCBpcyB1bnByZWRpY3RhYmxlLgogIC8vLwogIC8vLyBJZiB5b3Ugc3VwcGx5IG9uZSBvZiBbZXF1YWxzXSBhbmQgW2hhc2hDb2RlXSwKICAvLy8geW91IHNob3VsZCBnZW5lcmFsbHkgYWxzbyB0byBzdXBwbHkgdGhlIG90aGVyLgogIGV4dGVybmFsIGZhY3RvcnkgTGlua2VkSGFzaE1hcCgKICAgICAge2Jvb2wgZXF1YWxzKEsga2V5MSwgSyBrZXkyKSwKICAgICAgaW50IGhhc2hDb2RlKEsga2V5KSwKICAgICAgYm9vbCBpc1ZhbGlkS2V5KHBvdGVudGlhbEtleSl9KTsKCiAgLy8vIENyZWF0ZXMgYW4gaW5zZXJ0aW9uLW9yZGVyZWQgaWRlbnRpdHktYmFzZWQgbWFwLgogIC8vLwogIC8vLyBFZmZlY3RpdmVseSBhIHNob3J0aGFuZCBmb3I6CiAgLy8vCiAgLy8vICAgICBuZXcgTGlua2VkSGFzaE1hcDxLLCBWPihlcXVhbHM6IGlkZW50aWNhbCwKICAvLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hDb2RlOiBpZGVudGl0eUhhc2hDb2RlKQogIGV4dGVybmFsIGZhY3RvcnkgTGlua2VkSGFzaE1hcC5pZGVudGl0eSgpOwoKICAvLy8gQ3JlYXRlcyBhIFtMaW5rZWRIYXNoTWFwXSB0aGF0IGNvbnRhaW5zIGFsbCBrZXkgdmFsdWUgcGFpcnMgb2YgW290aGVyXS4KICAvLy8KICAvLy8gVGhlIGtleXMgbXVzdCBhbGwgYmUgaW5zdGFuY2VzIG9mIFtLXSBhbmQgdGhlIHZhbHVlcyB0byBbVl0uCiAgLy8vIFRoZSBbb3RoZXJdIG1hcCBpdHNlbGYgY2FuIGhhdmUgYW55IHR5cGUuCiAgZmFjdG9yeSBMaW5rZWRIYXNoTWFwLmZyb20oTWFwIG90aGVyKSB7CiAgICBMaW5rZWRIYXNoTWFwPEssIFY+IHJlc3VsdCA9IExpbmtlZEhhc2hNYXA8SywgVj4oKTsKICAgIG90aGVyLmZvckVhY2goKGssIHYpIHsKICAgICAgcmVzdWx0W2tdID0gdjsKICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBDcmVhdGVzIGEgW0xpbmtlZEhhc2hNYXBdIHRoYXQgY29udGFpbnMgYWxsIGtleSB2YWx1ZSBwYWlycyBvZiBbb3RoZXJdLgogIGZhY3RvcnkgTGlua2VkSGFzaE1hcC5vZihNYXA8SywgVj4gb3RoZXIpID0+CiAgICAgIExpbmtlZEhhc2hNYXA8SywgVj4oKS4uYWRkQWxsKG90aGVyKTsKCiAgLy8vIENyZWF0ZXMgYSBbTGlua2VkSGFzaE1hcF0gd2hlcmUgdGhlIGtleXMgYW5kIHZhbHVlcyBhcmUgY29tcHV0ZWQgZnJvbSB0aGUKICAvLy8gW2l0ZXJhYmxlXS4KICAvLy8KICAvLy8gRm9yIGVhY2ggZWxlbWVudCBvZiB0aGUgW2l0ZXJhYmxlXSB0aGlzIGNvbnN0cnVjdG9yIGNvbXB1dGVzIGEga2V5L3ZhbHVlCiAgLy8vIHBhaXIsIGJ5IGFwcGx5aW5nIFtrZXldIGFuZCBbdmFsdWVdIHJlc3BlY3RpdmVseS4KICAvLy8KICAvLy8gVGhlIGtleXMgb2YgdGhlIGtleS92YWx1ZSBwYWlycyBkbyBub3QgbmVlZCB0byBiZSB1bmlxdWUuIFRoZSBsYXN0CiAgLy8vIG9jY3VycmVuY2Ugb2YgYSBrZXkgd2lsbCBzaW1wbHkgb3ZlcndyaXRlIGFueSBwcmV2aW91cyB2YWx1ZS4KICAvLy8KICAvLy8gSWYgbm8gdmFsdWVzIGFyZSBzcGVjaWZpZWQgZm9yIFtrZXldIGFuZCBbdmFsdWVdIHRoZSBkZWZhdWx0IGlzIHRoZQogIC8vLyBpZGVudGl0eSBmdW5jdGlvbi4KICBmYWN0b3J5IExpbmtlZEhhc2hNYXAuZnJvbUl0ZXJhYmxlKEl0ZXJhYmxlIGl0ZXJhYmxlLAogICAgICB7SyBrZXkoZWxlbWVudCksIFYgdmFsdWUoZWxlbWVudCl9KSB7CiAgICBMaW5rZWRIYXNoTWFwPEssIFY+IG1hcCA9IExpbmtlZEhhc2hNYXA8SywgVj4oKTsKICAgIE1hcEJhc2UuX2ZpbGxNYXBXaXRoTWFwcGVkSXRlcmFibGUobWFwLCBpdGVyYWJsZSwga2V5LCB2YWx1ZSk7CiAgICByZXR1cm4gbWFwOwogIH0KCiAgLy8vIENyZWF0ZXMgYSBbTGlua2VkSGFzaE1hcF0gYXNzb2NpYXRpbmcgdGhlIGdpdmVuIFtrZXlzXSB0byBbdmFsdWVzXS4KICAvLy8KICAvLy8gVGhpcyBjb25zdHJ1Y3RvciBpdGVyYXRlcyBvdmVyIFtrZXlzXSBhbmQgW3ZhbHVlc10gYW5kIG1hcHMgZWFjaCBlbGVtZW50IG9mCiAgLy8vIFtrZXlzXSB0byB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIFt2YWx1ZXNdLgogIC8vLwogIC8vLyBJZiBba2V5c10gY29udGFpbnMgdGhlIHNhbWUgb2JqZWN0IG11bHRpcGxlIHRpbWVzLCB0aGUgbGFzdCBvY2N1cnJlbmNlCiAgLy8vIG92ZXJ3cml0ZXMgdGhlIHByZXZpb3VzIHZhbHVlLgogIC8vLwogIC8vLyBJdCBpcyBhbiBlcnJvciBpZiB0aGUgdHdvIFtJdGVyYWJsZV1zIGRvbid0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoLgogIGZhY3RvcnkgTGlua2VkSGFzaE1hcC5mcm9tSXRlcmFibGVzKEl0ZXJhYmxlPEs+IGtleXMsIEl0ZXJhYmxlPFY+IHZhbHVlcykgewogICAgTGlua2VkSGFzaE1hcDxLLCBWPiBtYXAgPSBMaW5rZWRIYXNoTWFwPEssIFY+KCk7CiAgICBNYXBCYXNlLl9maWxsTWFwV2l0aEl0ZXJhYmxlcyhtYXAsIGtleXMsIHZhbHVlcyk7CiAgICByZXR1cm4gbWFwOwogIH0KCiAgLy8vIENyZWF0ZXMgYSBbTGlua2VkSGFzaE1hcF0gY29udGFpbmluZyB0aGUgZW50cmllcyBvZiBbZW50cmllc10uCiAgLy8vCiAgLy8vIFJldHVybnMgYSBuZXcgYExpbmtlZEhhc2hNYXA8SywgVj5gIHdoZXJlIGFsbCBlbnRyaWVzIG9mIFtlbnRyaWVzXQogIC8vLyBoYXZlIGJlZW4gYWRkZWQgaW4gaXRlcmF0aW9uIG9yZGVyLgogIC8vLwogIC8vLyBJZiBtdWx0aXBsZSBbZW50cmllc10gaGF2ZSB0aGUgc2FtZSBrZXksCiAgLy8vIGxhdGVyIG9jY3VycmVuY2VzIG92ZXJ3cml0ZSB0aGUgZWFybGllciBvbmVzLgogIEBTaW5jZSgiMi4xIikKICBmYWN0b3J5IExpbmtlZEhhc2hNYXAuZnJvbUVudHJpZXMoSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IGVudHJpZXMpID0+CiAgICAgIDxLLCBWPnt9Li5hZGRFbnRyaWVzKGVudHJpZXMpOwp9CoCPAE5OPAEZATAEL0g8QCktMQRDTUZKRAQkOjsGUEoPBk1PKwZPSkpNQ0wUBg8GUUEGTEo8BkU5Tg8GTUg7SQZLTE5OBjQ1IiQbJwE3BiMGNT4tAU4GQzAqOBsVCBMEAU4vLAFQEgZPOAZJRAZKGTgsNUMQBAFKBlI3Bk0lBkhONTYQBAFFBkkqBi80EEklAgEkZGFydDpjb2xsZWN0aW9uL2xpbmtlZF9oYXNoX21hcC5kYXJ0O29yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb2xsZWN0aW9uL2xpbmtlZF9oYXNoX3NldC5kYXJ0lNEvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvbGxlY3Rpb247CgovLy8gQSBbTGlua2VkSGFzaFNldF0gaXMgYSBoYXNoLXRhYmxlIGJhc2VkIFtTZXRdIGltcGxlbWVudGF0aW9uLgovLy8KLy8vIFRoZSBgTGlua2VkSGFzaFNldGAgYWxzbyBrZWVwIHRyYWNrIG9mIHRoZSBvcmRlciB0aGF0IGVsZW1lbnRzIHdlcmUgaW5zZXJ0ZWQKLy8vIGluLCBhbmQgaXRlcmF0aW9uIGhhcHBlbnMgaW4gZmlyc3QtdG8tbGFzdCBpbnNlcnRpb24gb3JkZXIuCi8vLwovLy8gVGhlIGVsZW1lbnRzIG9mIGEgYExpbmtlZEhhc2hTZXRgIG11c3QgaGF2ZSBjb25zaXN0ZW50IFtPYmplY3QuPT1dCi8vLyBhbmQgW09iamVjdC5oYXNoQ29kZV0gaW1wbGVtZW50YXRpb25zLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGA9PWAgb3BlcmF0b3IKLy8vIG11c3QgZGVmaW5lIGEgc3RhYmxlIGVxdWl2YWxlbmNlIHJlbGF0aW9uIG9uIHRoZSBlbGVtZW50cyAocmVmbGV4aXZlLAovLy8gc3ltbWV0cmljLCB0cmFuc2l0aXZlLCBhbmQgY29uc2lzdGVudCBvdmVyIHRpbWUpLCBhbmQgdGhhdCBgaGFzaENvZGVgCi8vLyBtdXN0IGJlIHRoZSBzYW1lIGZvciBvYmplY3RzIHRoYXQgYXJlIGNvbnNpZGVyZWQgZXF1YWwgYnkgYD09YC4KLy8vCi8vLyBUaGUgc2V0IGFsbG93cyBgbnVsbGAgYXMgYW4gZWxlbWVudC4KLy8vCi8vLyBJdGVyYXRpb24gb2YgZWxlbWVudHMgaXMgZG9uZSBpbiBlbGVtZW50IGluc2VydGlvbiBvcmRlci4KLy8vIEFuIGVsZW1lbnQgdGhhdCB3YXMgYWRkZWQgYWZ0ZXIgYW5vdGhlciB3aWxsIG9jY3VyIGxhdGVyIGluIHRoZSBpdGVyYXRpb24uCi8vLyBBZGRpbmcgYW4gZWxlbWVudCB0aGF0IGlzIGFscmVhZHkgaW4gdGhlIHNldAovLy8gZG9lcyBub3QgY2hhbmdlIGl0cyBwb3NpdGlvbiBpbiB0aGUgaXRlcmF0aW9uIG9yZGVyLAovLy8gYnV0IHJlbW92aW5nIGFuIGVsZW1lbnQgYW5kIGFkZGluZyBpdCBhZ2FpbiwKLy8vIHdpbGwgbWFrZSBpdCB0aGUgbGFzdCBlbGVtZW50IG9mIGFuIGl0ZXJhdGlvbi4KLy8vCi8vLyBNb3N0IHNpbXBsZSBvcGVyYXRpb25zIG9uIGBIYXNoU2V0YCBhcmUgZG9uZSBpbiAocG90ZW50aWFsbHkgYW1vcnRpemVkKQovLy8gY29uc3RhbnQgdGltZTogW2FkZF0sIFtjb250YWluc10sIFtyZW1vdmVdLCBhbmQgW2xlbmd0aF0sIHByb3ZpZGVkIHRoZSBoYXNoCi8vLyBjb2RlcyBvZiBvYmplY3RzIGFyZSB3ZWxsIGRpc3RyaWJ1dGVkLi4KYWJzdHJhY3QgY2xhc3MgTGlua2VkSGFzaFNldDxFPiBpbXBsZW1lbnRzIFNldDxFPiB7CiAgLy8vIENyZWF0ZSBhbiBpbnNlcnRpb24tb3JkZXJlZCBoYXNoIHNldCB1c2luZyB0aGUgcHJvdmlkZWQKICAvLy8gW2VxdWFsc10gYW5kIFtoYXNoQ29kZV0uCiAgLy8vCiAgLy8vIFRoZSBwcm92aWRlZCBbZXF1YWxzXSBtdXN0IGRlZmluZSBhIHN0YWJsZSBlcXVpdmFsZW5jZSByZWxhdGlvbiwgYW5kCiAgLy8vIFtoYXNoQ29kZV0gbXVzdCBiZSBjb25zaXN0ZW50IHdpdGggW2VxdWFsc10uIElmIHRoZSBbZXF1YWxzXSBvciBbaGFzaENvZGVdCiAgLy8vIG1ldGhvZHMgd29uJ3Qgd29yayBvbiBhbGwgb2JqZWN0cywgYnV0IG9ubHkgb24gc29tZSBpbnN0YW5jZXMgb2YgRSwgdGhlCiAgLy8vIFtpc1ZhbGlkS2V5XSBwcmVkaWNhdGUgY2FuIGJlIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGtleXMgdGhhdCB0aGUgZnVuY3Rpb25zCiAgLy8vIGFyZSBhcHBsaWVkIHRvLgogIC8vLyBBbnkga2V5IGZvciB3aGljaCBbaXNWYWxpZEtleV0gcmV0dXJucyBmYWxzZSBpcyBhdXRvbWF0aWNhbGx5IGFzc3VtZWQKICAvLy8gdG8gbm90IGJlIGluIHRoZSBzZXQgd2hlbiBhc2tpbmcgYGNvbnRhaW5zYC4KICAvLy8KICAvLy8gSWYgW2VxdWFsc10gb3IgW2hhc2hDb2RlXSBhcmUgb21pdHRlZCwgdGhlIHNldCB1c2VzCiAgLy8vIHRoZSBlbGVtZW50cycgaW50cmluc2ljIFtPYmplY3QuPT1dIGFuZCBbT2JqZWN0Lmhhc2hDb2RlXSwKICAvLy8gYW5kIFtpc1ZhbGlkS2V5XSBpcyBpZ25vcmVkIHNpbmNlIHRoZXNlIG9wZXJhdGlvbnMgYXJlIGFzc3VtZWQKICAvLy8gdG8gd29yayBvbiBhbGwgb2JqZWN0cy4KICAvLy8KICAvLy8gSWYgeW91IHN1cHBseSBvbmUgb2YgW2VxdWFsc10gYW5kIFtoYXNoQ29kZV0sCiAgLy8vIHlvdSBzaG91bGQgZ2VuZXJhbGx5IGFsc28gdG8gc3VwcGx5IHRoZSBvdGhlci4KICAvLy8KICAvLy8gSWYgdGhlIHN1cHBsaWVkIGBlcXVhbHNgIG9yIGBoYXNoQ29kZWAgZnVuY3Rpb25zIHdvbid0IHdvcmsgb24gYWxsIFtFXQogIC8vLyBvYmplY3RzLCBhbmQgdGhlIG1hcCB3aWxsIGJlIHVzZWQgaW4gYSBzZXR0aW5nIHdoZXJlIGEgbm9uLWBFYCBvYmplY3QKICAvLy8gaXMgcGFzc2VkIHRvLCBlLmcuLCBgY29udGFpbnNgLCB0aGVuIHRoZSBbaXNWYWxpZEtleV0gZnVuY3Rpb24gc2hvdWxkCiAgLy8vIGFsc28gYmUgc3VwcGxpZWQuCiAgLy8vCiAgLy8vIElmIFtpc1ZhbGlkS2V5XSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byB0ZXN0aW5nIGlmIHRoZSBvYmplY3QgaXMgYW4KICAvLy8gW0VdIGluc3RhbmNlLiBUaGF0IG1lYW5zIHRoYXQ6CiAgLy8vCiAgLy8vICAgICBuZXcgTGlua2VkSGFzaFNldDxpbnQ+KGVxdWFsczogKGludCBlMSwgaW50IGUyKSA9PiAoZTEgLSBlMikgJSA1ID09IDAsCiAgLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hDb2RlOiAoaW50IGUpID0+IGUgJSA1KQogIC8vLwogIC8vLyBkb2VzIG5vdCBuZWVkIGFuIGBpc1ZhbGlkS2V5YCBhcmd1bWVudCwgYmVjYXVzZSBpdCBkZWZhdWx0cyB0byBvbmx5CiAgLy8vIGFjY2VwdGluZyBgaW50YCB2YWx1ZXMgd2hpY2ggYXJlIGFjY2VwdGVkIGJ5IGJvdGggYGVxdWFsc2AgYW5kIGBoYXNoQ29kZWAuCiAgLy8vCiAgLy8vIElmIG5laXRoZXIgYGVxdWFsc2AsIGBoYXNoQ29kZWAsIG5vciBgaXNWYWxpZEtleWAgaXMgcHJvdmlkZWQsCiAgLy8vIHRoZSBkZWZhdWx0IGBpc1ZhbGlkS2V5YCBpbnN0ZWFkIGFjY2VwdHMgYWxsIHZhbHVlcy4KICAvLy8gVGhlIGRlZmF1bHQgZXF1YWxpdHkgYW5kIGhhc2hjb2RlIG9wZXJhdGlvbnMgYXJlIGFzc3VtZWQgdG8gd29yayBvbiBhbGwKICAvLy8gb2JqZWN0cy4KICAvLy8KICAvLy8gTGlrZXdpc2UsIGlmIGBlcXVhbHNgIGlzIFtpZGVudGljYWxdLCBgaGFzaENvZGVgIGlzIFtpZGVudGl0eUhhc2hDb2RlXQogIC8vLyBhbmQgYGlzVmFsaWRLZXlgIGlzIG9taXR0ZWQsIHRoZSByZXN1bHRpbmcgc2V0IGlzIGlkZW50aXR5IGJhc2VkLAogIC8vLyBhbmQgdGhlIGBpc1ZhbGlkS2V5YCBkZWZhdWx0cyB0byBhY2NlcHRpbmcgYWxsIGtleXMuCiAgLy8vIFN1Y2ggYSBtYXAgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgdXNpbmcgW0xpbmtlZEhhc2hTZXQuaWRlbnRpdHldLgogIGV4dGVybmFsIGZhY3RvcnkgTGlua2VkSGFzaFNldCgKICAgICAge2Jvb2wgZXF1YWxzKEUgZTEsIEUgZTIpLAogICAgICBpbnQgaGFzaENvZGUoRSBlKSwKICAgICAgYm9vbCBpc1ZhbGlkS2V5KHBvdGVudGlhbEtleSl9KTsKCiAgLy8vIENyZWF0ZXMgYW4gaW5zZXJ0aW9uLW9yZGVyZWQgaWRlbnRpdHktYmFzZWQgc2V0LgogIC8vLwogIC8vLyBFZmZlY3RpdmVseSBhIHNob3J0aGFuZCBmb3I6CiAgLy8vCiAgLy8vICAgICBuZXcgTGlua2VkSGFzaFNldDxFPihlcXVhbHM6IGlkZW50aWNhbCwKICAvLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hDb2RlOiBpZGVudGl0eUhhc2hDb2RlKQogIGV4dGVybmFsIGZhY3RvcnkgTGlua2VkSGFzaFNldC5pZGVudGl0eSgpOwoKICAvLy8gQ3JlYXRlIGEgbGlua2VkIGhhc2ggc2V0IGNvbnRhaW5pbmcgYWxsIFtlbGVtZW50c10uCiAgLy8vCiAgLy8vIENyZWF0ZXMgYSBsaW5rZWQgaGFzaCBzZXQgYXMgYnkgYG5ldyBMaW5rZWRIYXNoU2V0PEU+KClgIGFuZCBhZGRzIGVhY2gKICAvLy8gZWxlbWVudCBvZiBgZWxlbWVudHNgIHRvIHRoaXMgc2V0IGluIHRoZSBvcmRlciB0aGV5IGFyZSBpdGVyYXRlZC4KICAvLy8KICAvLy8gQWxsIHRoZSBbZWxlbWVudHNdIHNob3VsZCBiZSBpbnN0YW5jZXMgb2YgW0VdLgogIC8vLyBUaGUgYGVsZW1lbnRzYCBpdGVyYWJsZSBpdHNlbGYgbWF5IGhhdmUgYW55IGVsZW1lbnQgdHlwZSwKICAvLy8gc28gdGhpcyBjb25zdHJ1Y3RvciBjYW4gYmUgdXNlZCB0byBkb3duLWNhc3QgYSBgU2V0YCwgZm9yIGV4YW1wbGUgYXM6CiAgLy8vCiAgLy8vICAgICBTZXQ8U3VwZXJUeXBlPiBzdXBlclNldCA9IC4uLjsKICAvLy8gICAgIEl0ZXJhYmxlPFN1cGVyVHlwZT4gdG1wID0gc3VwZXJTZXQud2hlcmUoKGUpID0+IGUgaXMgU3ViVHlwZSk7CiAgLy8vICAgICBTZXQ8U3ViVHlwZT4gc3ViU2V0ID0gbmV3IExpbmtlZEhhc2hTZXQ8U3ViVHlwZT4uZnJvbSh0bXApOwogIGZhY3RvcnkgTGlua2VkSGFzaFNldC5mcm9tKEl0ZXJhYmxlIGVsZW1lbnRzKSB7CiAgICBMaW5rZWRIYXNoU2V0PEU+IHJlc3VsdCA9IExpbmtlZEhhc2hTZXQ8RT4oKTsKICAgIGZvciAoZmluYWwgZWxlbWVudCBpbiBlbGVtZW50cykgewogICAgICByZXN1bHQuYWRkKGVsZW1lbnQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBDcmVhdGUgYSBsaW5rZWQgaGFzaCBzZXQgZnJvbSBbZWxlbWVudHNdLgogIC8vLwogIC8vLyBDcmVhdGVzIGEgbGlua2VkIGhhc2ggc2V0IGFzIGJ5IGBuZXcgTGlua2VkSGFzaFNldDxFPigpYCBhbmQgYWRkcyBlYWNoCiAgLy8vIGVsZW1lbnQgb2YgYGVsZW1lbnRzYCB0byB0aGlzIHNldCBpbiB0aGUgb3JkZXIgdGhleSBhcmUgaXRlcmF0ZWQuCiAgZmFjdG9yeSBMaW5rZWRIYXNoU2V0Lm9mKEl0ZXJhYmxlPEU+IGVsZW1lbnRzKSA9PgogICAgICBMaW5rZWRIYXNoU2V0PEU+KCkuLmFkZEFsbChlbGVtZW50cyk7CgogIC8vLyBFeGVjdXRlcyBhIGZ1bmN0aW9uIG9uIGVhY2ggZWxlbWVudCBvZiB0aGUgc2V0LgogIC8vLwogIC8vLyBUaGUgZWxlbWVudHMgYXJlIGl0ZXJhdGVkIGluIGluc2VydGlvbiBvcmRlci4KICB2b2lkIGZvckVhY2godm9pZCBhY3Rpb24oRSBlbGVtZW50KSk7CgogIC8vLyBQcm92aWRlcyBhbiBpdGVyYXRvciB0aGF0IGl0ZXJhdGVzIG92ZXIgdGhlIGVsZW1lbnRzIGluIGluc2VydGlvbiBvcmRlci4KICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3I7Cn0KegBOTjwBGQFCBFFABEdNSkpEBCkEPk8xOTEzBExQLDQ+HwZLUU5RFkwzBjpBRR4GNDUGTUxMGAZNJQZRPQZKUQZFO04PBk1IO0kiIBknATcGIwYyOy0BOgZNSAY1QEwGKUlGMjImGwYTBAEwBk1INCwBNgY0KAFPHAIBJGRhcnQ6Y29sbGVjdGlvbi9saW5rZWRfaGFzaF9zZXQuZGFydDdvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29sbGVjdGlvbi9saW5rZWRfbGlzdC5kYXJ0nr0vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvbGxlY3Rpb247CgovLy8gQSBzcGVjaWFsaXplZCBkb3VibGUtbGlua2VkIGxpc3Qgb2YgZWxlbWVudHMgdGhhdCBleHRlbmRzIFtMaW5rZWRMaXN0RW50cnldLgovLy8KLy8vIFRoaXMgaXMgbm90IGEgZ2VuZXJpYyBkYXRhIHN0cnVjdHVyZS4gSXQgb25seSBhY2NlcHRzIGVsZW1lbnRzIHRoYXQgZXh0ZW5kCi8vLyB0aGUgW0xpbmtlZExpc3RFbnRyeV0gY2xhc3MuIFNlZSB0aGUgW1F1ZXVlXSBpbXBsZW1lbnRhdGlvbnMgZm9yIGdlbmVyaWMKLy8vIGNvbGxlY3Rpb25zIHRoYXQgYWxsb3cgY29uc3RhbnQgdGltZSBhZGRpbmcgYW5kIHJlbW92aW5nIGF0IHRoZSBlbmRzLgovLy8KLy8vIFRoaXMgaXMgbm90IGEgW0xpc3RdIGltcGxlbWVudGF0aW9uLiBEZXNwaXRlIGl0cyBuYW1lLCB0aGlzIGNsYXNzIGRvZXMgbm90Ci8vLyBpbXBsZW1lbnQgdGhlIFtMaXN0XSBpbnRlcmZhY2UuIEl0IGRvZXMgbm90IGFsbG93IGNvbnN0YW50IHRpbWUgbG9va3VwIGJ5Ci8vLyBpbmRleC4KLy8vCi8vLyBCZWNhdXNlIHRoZSBlbGVtZW50cyB0aGVtc2VsdmVzIGNvbnRhaW4gdGhlIGxpbmtzIG9mIHRoaXMgbGlua2VkIGxpc3QsCi8vLyBlYWNoIGVsZW1lbnQgY2FuIGJlIGluIG9ubHkgb25lIGxpc3QgYXQgYSB0aW1lLiBUbyBhZGQgYW4gZWxlbWVudCB0byBhbm90aGVyCi8vLyBsaXN0LCBpdCBtdXN0IGZpcnN0IGJlIHJlbW92ZWQgZnJvbSBpdHMgY3VycmVudCBsaXN0IChpZiBhbnkpLgovLy8KLy8vIEluIHJldHVybiwgZWFjaCBlbGVtZW50IGtub3dzIGl0cyBvd24gcGxhY2UgaW4gdGhlIGxpbmtlZCBsaXN0LCBhcyB3ZWxsIGFzCi8vLyB3aGljaCBsaXN0IGl0IGlzIGluLiBUaGlzIGFsbG93cyBjb25zdGFudCB0aW1lCi8vLyBbTGlua2VkTGlzdEVudHJ5Lmluc2VydEFmdGVyXSwgW0xpbmtlZExpc3RFbnRyeS5pbnNlcnRCZWZvcmVdIGFuZAovLy8gW0xpbmtlZExpc3RFbnRyeS51bmxpbmtdIG9wZXJhdGlvbnMgd2hlbiBhbGwgeW91IGhhdmUgaXMgdGhlIGVsZW1lbnQuCi8vLwovLy8gQSBgTGlua2VkTGlzdGAgYWxzbyBhbGxvd3MgY29uc3RhbnQgdGltZSBhZGRpbmcgYW5kIHJlbW92aW5nIGF0IGVpdGhlciBlbmQsCi8vLyBhbmQgYSBjb25zdGFudCB0aW1lIGxlbmd0aCBnZXR0ZXIuCmNsYXNzIExpbmtlZExpc3Q8RSBleHRlbmRzIExpbmtlZExpc3RFbnRyeTxFPj4gZXh0ZW5kcyBJdGVyYWJsZTxFPiB7CiAgaW50IF9tb2RpZmljYXRpb25Db3VudCA9IDA7CiAgaW50IF9sZW5ndGggPSAwOwogIEUgX2ZpcnN0OwoKICAvLy8gQ29uc3RydWN0IGEgbmV3IGVtcHR5IGxpbmtlZCBsaXN0LgogIExpbmtlZExpc3QoKTsKCiAgLy8vIEFkZCBbZW50cnldIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmtlZCBsaXN0LgogIHZvaWQgYWRkRmlyc3QoRSBlbnRyeSkgewogICAgX2luc2VydEJlZm9yZShfZmlyc3QsIGVudHJ5LCB1cGRhdGVGaXJzdDogdHJ1ZSk7CiAgICBfZmlyc3QgPSBlbnRyeTsKICB9CgogIC8vLyBBZGQgW2VudHJ5XSB0byB0aGUgZW5kIG9mIHRoZSBsaW5rZWQgbGlzdC4KICB2b2lkIGFkZChFIGVudHJ5KSB7CiAgICBfaW5zZXJ0QmVmb3JlKF9maXJzdCwgZW50cnksIHVwZGF0ZUZpcnN0OiBmYWxzZSk7CiAgfQoKICAvLy8gQWRkIFtlbnRyaWVzXSB0byB0aGUgZW5kIG9mIHRoZSBsaW5rZWQgbGlzdC4KICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBlbnRyaWVzKSB7CiAgICBlbnRyaWVzLmZvckVhY2goYWRkKTsKICB9CgogIC8vLyBSZW1vdmUgW2VudHJ5XSBmcm9tIHRoZSBsaW5rZWQgbGlzdC4KICAvLy8KICAvLy8gUmV0dXJucyBmYWxzZSBhbmQgZG9lcyBub3RoaW5nIGlmIFtlbnRyeV0gaXMgbm90IGluIHRoaXMgbGlua2VkIGxpc3QuCiAgLy8vCiAgLy8vIFRoaXMgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nIGBlbnRyeS51bmxpbmsoKWAgaWYgdGhlIGVudHJ5IGlzIGluIHRoaXMKICAvLy8gbGlzdC4KICBib29sIHJlbW92ZShFIGVudHJ5KSB7CiAgICBpZiAoZW50cnkuX2xpc3QgIT0gdGhpcykgcmV0dXJuIGZhbHNlOwogICAgX3VubGluayhlbnRyeSk7IC8vIFVubGluayB3aWxsIGRlY3JlbWVudCBsZW5ndGguCiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciA9PiBfTGlua2VkTGlzdEl0ZXJhdG9yPEU+KHRoaXMpOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfbGVuZ3RoOwoKICAvLy8gUmVtb3ZlIGFsbCBlbGVtZW50cyBmcm9tIHRoaXMgbGlua2VkIGxpc3QuCiAgdm9pZCBjbGVhcigpIHsKICAgIF9tb2RpZmljYXRpb25Db3VudCsrOwogICAgaWYgKGlzRW1wdHkpIHJldHVybjsKCiAgICBFIG5leHQgPSBfZmlyc3Q7CiAgICBkbyB7CiAgICAgIEUgZW50cnkgPSBuZXh0OwogICAgICBuZXh0ID0gZW50cnkuX25leHQ7CiAgICAgIGVudHJ5Ll9uZXh0ID0gZW50cnkuX3ByZXZpb3VzID0gZW50cnkuX2xpc3QgPSBudWxsOwogICAgfSB3aGlsZSAoIWlkZW50aWNhbChuZXh0LCBfZmlyc3QpKTsKCiAgICBfZmlyc3QgPSBudWxsOwogICAgX2xlbmd0aCA9IDA7CiAgfQoKICBFIGdldCBmaXJzdCB7CiAgICBpZiAoaXNFbXB0eSkgewogICAgICB0aHJvdyBTdGF0ZUVycm9yKCdObyBzdWNoIGVsZW1lbnQnKTsKICAgIH0KICAgIHJldHVybiBfZmlyc3Q7CiAgfQoKICBFIGdldCBsYXN0IHsKICAgIGlmIChpc0VtcHR5KSB7CiAgICAgIHRocm93IFN0YXRlRXJyb3IoJ05vIHN1Y2ggZWxlbWVudCcpOwogICAgfQogICAgcmV0dXJuIF9maXJzdC5fcHJldmlvdXM7CiAgfQoKICBFIGdldCBzaW5nbGUgewogICAgaWYgKGlzRW1wdHkpIHsKICAgICAgdGhyb3cgU3RhdGVFcnJvcignTm8gc3VjaCBlbGVtZW50Jyk7CiAgICB9CiAgICBpZiAoX2xlbmd0aCA+IDEpIHsKICAgICAgdGhyb3cgU3RhdGVFcnJvcignVG9vIG1hbnkgZWxlbWVudHMnKTsKICAgIH0KICAgIHJldHVybiBfZmlyc3Q7CiAgfQoKICAvLy8gQ2FsbCBbYWN0aW9uXSB3aXRoIGVhY2ggZW50cnkgaW4gdGhpcyBsaW5rZWQgbGlzdC4KICAvLy8KICAvLy8gSXQncyBhbiBlcnJvciBpZiBbYWN0aW9uXSBtb2RpZnkgdGhlIGxpbmtlZCBsaXN0LgogIHZvaWQgZm9yRWFjaCh2b2lkIGFjdGlvbihFIGVudHJ5KSkgewogICAgaW50IG1vZGlmaWNhdGlvbkNvdW50ID0gX21vZGlmaWNhdGlvbkNvdW50OwogICAgaWYgKGlzRW1wdHkpIHJldHVybjsKCiAgICBFIGN1cnJlbnQgPSBfZmlyc3Q7CiAgICBkbyB7CiAgICAgIGFjdGlvbihjdXJyZW50KTsKICAgICAgaWYgKG1vZGlmaWNhdGlvbkNvdW50ICE9IF9tb2RpZmljYXRpb25Db3VudCkgewogICAgICAgIHRocm93IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgfQogICAgICBjdXJyZW50ID0gY3VycmVudC5fbmV4dDsKICAgIH0gd2hpbGUgKCFpZGVudGljYWwoY3VycmVudCwgX2ZpcnN0KSk7CiAgfQoKICBib29sIGdldCBpc0VtcHR5ID0+IF9sZW5ndGggPT0gMDsKCiAgLy8vIEluc2VydHMgW25ld0VudHJ5XSBhcyBsYXN0IGVudHJ5IG9mIHRoZSBsaXN0LgogIC8vLwogIC8vLyBJZiBbdXBkYXRlRmlyc3RdIGlzIHRydWUgYW5kIFtlbnRyeV0gaXMgdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBsaXN0LAogIC8vLyB1cGRhdGVzIHRoZSBbX2ZpcnN0XSBmaWVsZCB0byBwb2ludCB0byB0aGUgW25ld0VudHJ5XSBhcyBmaXJzdCBlbnRyeS4KICB2b2lkIF9pbnNlcnRCZWZvcmUoRSBlbnRyeSwgRSBuZXdFbnRyeSwge2Jvb2wgdXBkYXRlRmlyc3R9KSB7CiAgICBpZiAobmV3RW50cnkubGlzdCAhPSBudWxsKSB7CiAgICAgIHRocm93IFN0YXRlRXJyb3IoJ0xpbmtlZExpc3RFbnRyeSBpcyBhbHJlYWR5IGluIGEgTGlua2VkTGlzdCcpOwogICAgfQogICAgX21vZGlmaWNhdGlvbkNvdW50Kys7CgogICAgbmV3RW50cnkuX2xpc3QgPSB0aGlzOwogICAgaWYgKGlzRW1wdHkpIHsKICAgICAgYXNzZXJ0KGVudHJ5ID09IG51bGwpOwogICAgICBuZXdFbnRyeS5fcHJldmlvdXMgPSBuZXdFbnRyeS5fbmV4dCA9IG5ld0VudHJ5OwogICAgICBfZmlyc3QgPSBuZXdFbnRyeTsKICAgICAgX2xlbmd0aCsrOwogICAgICByZXR1cm47CiAgICB9CiAgICBFIHByZWRlY2Vzc29yID0gZW50cnkuX3ByZXZpb3VzOwogICAgRSBzdWNjZXNzb3IgPSBlbnRyeTsKICAgIG5ld0VudHJ5Ll9wcmV2aW91cyA9IHByZWRlY2Vzc29yOwogICAgbmV3RW50cnkuX25leHQgPSBzdWNjZXNzb3I7CiAgICBwcmVkZWNlc3Nvci5fbmV4dCA9IG5ld0VudHJ5OwogICAgc3VjY2Vzc29yLl9wcmV2aW91cyA9IG5ld0VudHJ5OwogICAgaWYgKHVwZGF0ZUZpcnN0ICYmIGlkZW50aWNhbChlbnRyeSwgX2ZpcnN0KSkgewogICAgICBfZmlyc3QgPSBuZXdFbnRyeTsKICAgIH0KICAgIF9sZW5ndGgrKzsKICB9CgogIHZvaWQgX3VubGluayhFIGVudHJ5KSB7CiAgICBfbW9kaWZpY2F0aW9uQ291bnQrKzsKICAgIGVudHJ5Ll9uZXh0Ll9wcmV2aW91cyA9IGVudHJ5Ll9wcmV2aW91czsKICAgIEUgbmV4dCA9IGVudHJ5Ll9wcmV2aW91cy5fbmV4dCA9IGVudHJ5Ll9uZXh0OwogICAgX2xlbmd0aC0tOwogICAgZW50cnkuX2xpc3QgPSBlbnRyeS5fbmV4dCA9IGVudHJ5Ll9wcmV2aW91cyA9IG51bGw7CiAgICBpZiAoaXNFbXB0eSkgewogICAgICBfZmlyc3QgPSBudWxsOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwoZW50cnksIF9maXJzdCkpIHsKICAgICAgX2ZpcnN0ID0gbmV4dDsKICAgIH0KICB9Cn0KCmNsYXNzIF9MaW5rZWRMaXN0SXRlcmF0b3I8RSBleHRlbmRzIExpbmtlZExpc3RFbnRyeTxFPj4gaW1wbGVtZW50cyBJdGVyYXRvcjxFPiB7CiAgZmluYWwgTGlua2VkTGlzdDxFPiBfbGlzdDsKICBmaW5hbCBpbnQgX21vZGlmaWNhdGlvbkNvdW50OwogIEUgX2N1cnJlbnQ7CiAgTGlua2VkTGlzdEVudHJ5PEU+IF9uZXh0OwogIGJvb2wgX3Zpc2l0ZWRGaXJzdDsKCiAgX0xpbmtlZExpc3RJdGVyYXRvcihMaW5rZWRMaXN0PEU+IGxpc3QpCiAgICAgIDogX2xpc3QgPSBsaXN0LAogICAgICAgIF9tb2RpZmljYXRpb25Db3VudCA9IGxpc3QuX21vZGlmaWNhdGlvbkNvdW50LAogICAgICAgIF9uZXh0ID0gbGlzdC5fZmlyc3QsCiAgICAgICAgX3Zpc2l0ZWRGaXJzdCA9IGZhbHNlOwoKICBFIGdldCBjdXJyZW50ID0+IF9jdXJyZW50OwoKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKF9tb2RpZmljYXRpb25Db3VudCAhPSBfbGlzdC5fbW9kaWZpY2F0aW9uQ291bnQpIHsKICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgfQogICAgaWYgKF9saXN0LmlzRW1wdHkgfHwgKF92aXNpdGVkRmlyc3QgJiYgaWRlbnRpY2FsKF9uZXh0LCBfbGlzdC5maXJzdCkpKSB7CiAgICAgIF9jdXJyZW50ID0gbnVsbDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgX3Zpc2l0ZWRGaXJzdCA9IHRydWU7CiAgICBfY3VycmVudCA9IF9uZXh0OwogICAgX25leHQgPSBfbmV4dC5fbmV4dDsKICAgIHJldHVybiB0cnVlOwogIH0KfQoKLy8vIEFuIG9iamVjdCB0aGF0IGNhbiBiZSBhbiBlbGVtZW50IGluIGEgW0xpbmtlZExpc3RdLgovLy8KLy8vIEFsbCBlbGVtZW50cyBvZiBhIGBMaW5rZWRMaXN0YCBtdXN0IGV4dGVuZCB0aGlzIGNsYXNzLgovLy8gVGhlIGNsYXNzIHByb3ZpZGVzIHRoZSBpbnRlcm5hbCBsaW5rcyB0aGF0IGxpbmsgZWxlbWVudHMgdG9nZXRoZXIKLy8vIGluIHRoZSBgTGlua2VkTGlzdGAsIGFuZCBhIHJlZmVyZW5jZSB0byB0aGUgbGlua2VkIGxpc3QgaXRzZWxmCi8vLyB0aGF0IGFuIGVsZW1lbnQgaXMgY3VycmVudGx5IHBhcnQgb2YuCi8vLwovLy8gQW4gZW50cnkgY2FuIGJlIGluIGF0IG1vc3Qgb25lIGxpbmtlZCBsaXN0IGF0IGEgdGltZS4KLy8vIFdoaWxlIGFuIGVudHJ5IGlzIGluIGEgbGlua2VkIGxpc3QsIHRoZSBbbGlzdF0gcHJvcGVydHkgcG9pbnRzIHRvIHRoYXQKLy8vIGxpbmtlZCBsaXN0LCBhbmQgb3RoZXJ3aXNlIHRoZSBgbGlzdGAgcHJvcGVydHkgaXMgYG51bGxgLgovLy8KLy8vIFdoZW4gY3JlYXRlZCwgYW4gZW50cnkgaXMgbm90IGluIGFueSBsaW5rZWQgbGlzdC4KYWJzdHJhY3QgY2xhc3MgTGlua2VkTGlzdEVudHJ5PEUgZXh0ZW5kcyBMaW5rZWRMaXN0RW50cnk8RT4+IHsKICBMaW5rZWRMaXN0PEU+IF9saXN0OwogIEUgX25leHQ7CiAgRSBfcHJldmlvdXM7CgogIC8vLyBHZXQgdGhlIGxpbmtlZCBsaXN0IGNvbnRhaW5pbmcgdGhpcyBlbGVtZW50LgogIC8vLwogIC8vLyBSZXR1cm5zIGBudWxsYCBpZiB0aGlzIGVudHJ5IGlzIG5vdCBjdXJyZW50bHkgaW4gYW55IGxpc3QuCiAgTGlua2VkTGlzdDxFPiBnZXQgbGlzdCA9PiBfbGlzdDsKCiAgLy8vIFVubGluayB0aGUgZWxlbWVudCBmcm9tIGl0cyBsaW5rZWQgbGlzdC4KICAvLy8KICAvLy8gVGhlIGVudHJ5IG11c3QgY3VycmVudGx5IGJlIGluIGEgbGlua2VkIGxpc3Qgd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuCiAgdm9pZCB1bmxpbmsoKSB7CiAgICBfbGlzdC5fdW5saW5rKHRoaXMpOwogIH0KCiAgLy8vIFJldHVybiB0aGUgc3VjY2Vzc29yIG9mIHRoaXMgZWxlbWVudCBpbiBpdHMgbGlua2VkIGxpc3QuCiAgLy8vCiAgLy8vIFJldHVybnMgYG51bGxgIGlmIHRoZXJlIGlzIG5vIHN1Y2Nlc3NvciBpbiB0aGUgbGlua2VkIGxpc3QsIG9yIGlmIHRoaXMKICAvLy8gZW50cnkgaXMgbm90IGN1cnJlbnRseSBpbiBhbnkgbGlzdC4KICBFIGdldCBuZXh0IHsKICAgIGlmIChfbGlzdCA9PSBudWxsIHx8IGlkZW50aWNhbChfbGlzdC5maXJzdCwgX25leHQpKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfbmV4dDsKICB9CgogIC8vLyBSZXR1cm4gdGhlIHByZWRlY2Vzc29yIG9mIHRoaXMgZWxlbWVudCBpbiBpdHMgbGlua2VkIGxpc3QuCiAgLy8vCiAgLy8vIFJldHVybnMgYG51bGxgIGlmIHRoZXJlIGlzIG5vIHByZWRlY2Vzc29yIGluIHRoZSBsaW5rZWQgbGlzdCwgb3IgaWYgdGhpcwogIC8vLyBlbnRyeSBpcyBub3QgY3VycmVudGx5IGluIGFueSBsaXN0LgogIEUgZ2V0IHByZXZpb3VzIHsKICAgIGlmIChfbGlzdCA9PSBudWxsIHx8IGlkZW50aWNhbCh0aGlzLCBfbGlzdC5maXJzdCkpIHJldHVybiBudWxsOwogICAgcmV0dXJuIF9wcmV2aW91czsKICB9CgogIC8vLyBJbnNlcnQgYW4gZWxlbWVudCBhZnRlciB0aGlzIGVsZW1lbnQgaW4gdGhpcyBlbGVtZW50J3MgbGlua2VkIGxpc3QuCiAgLy8vCiAgLy8vIFRoaXMgZW50cnkgbXVzdCBiZSBpbiBhIGxpbmtlZCBsaXN0IHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLgogIC8vLyBUaGUgW2VudHJ5XSBtdXN0IG5vdCBiZSBpbiBhIGxpbmtlZCBsaXN0LgogIHZvaWQgaW5zZXJ0QWZ0ZXIoRSBlbnRyeSkgewogICAgX2xpc3QuX2luc2VydEJlZm9yZShfbmV4dCwgZW50cnksIHVwZGF0ZUZpcnN0OiBmYWxzZSk7CiAgfQoKICAvLy8gSW5zZXJ0IGFuIGVsZW1lbnQgYmVmb3JlIHRoaXMgZWxlbWVudCBpbiB0aGlzIGVsZW1lbnQncyBsaW5rZWQgbGlzdC4KICAvLy8KICAvLy8gVGhpcyBlbnRyeSBtdXN0IGJlIGluIGEgbGlua2VkIGxpc3Qgd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuCiAgLy8vIFRoZSBbZW50cnldIG11c3Qgbm90IGJlIGluIGEgbGlua2VkIGxpc3QuCiAgdm9pZCBpbnNlcnRCZWZvcmUoRSBlbnRyeSkgewogICAgX2xpc3QuX2luc2VydEJlZm9yZSh0aGlzLCBlbnRyeSwgdXBkYXRlRmlyc3Q6IHRydWUpOwogIH0KfQqBCQBOTjwBGQFRBE9NSgRPTgsES1FDBE8zRkoEUCdFHhMMASkQATcbNRQEATEWNgQBMyUaBAErBkwGTQwZKzURBAE8AR0BMREaGQEVCRYaOigBExEEARATKwYTBAEPEysGHQQBERMrBhctBhMEATkGOCcwGQEYCRc1MQgfKwQBJAE0BktMQCFGBhoBGxMdNhkRDgYlGSYgIiQzGQYPBAEaGi0yDzgTFSsVBgQCAVEdIA4cFgEqFjYdHwEdARQ6LwZNFxQGGhYZEQQCATgEO0ZDKgQ6Sz4ENj8XCw8BMwZBIwEvBk8SGQQBPwZNKg9FEgQBQQZPKhNEFgQBSgZGMB47BAFLBkYwHzkEAgEgZGFydDpjb2xsZWN0aW9uL2xpbmtlZF9saXN0LmRhcnQxb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvbGxlY3Rpb24vcXVldWUuZGFydMAAaoUvLyBDb3B5cmlnaHQgKGMpIDIwMTEsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvbGxlY3Rpb247CgovLy8gQSBbUXVldWVdIGlzIGEgY29sbGVjdGlvbiB0aGF0IGNhbiBiZSBtYW5pcHVsYXRlZCBhdCBib3RoIGVuZHMuIE9uZQovLy8gY2FuIGl0ZXJhdGUgb3ZlciB0aGUgZWxlbWVudHMgb2YgYSBxdWV1ZSB0aHJvdWdoIFtmb3JFYWNoXSBvciB3aXRoCi8vLyBhbiBbSXRlcmF0b3JdLgovLy8KLy8vIEl0IGlzIGdlbmVyYWxseSBub3QgYWxsb3dlZCB0byBtb2RpZnkgdGhlIHF1ZXVlIChhZGQgb3IgcmVtb3ZlIGVudHJpZXMpCi8vLyB3aGlsZSBhbiBvcGVyYXRpb24gb24gdGhlIHF1ZXVlIGlzIGJlaW5nIHBlcmZvcm1lZCwgZm9yIGV4YW1wbGUgZHVyaW5nIGEKLy8vIGNhbGwgdG8gW2ZvckVhY2hdLgovLy8gTW9kaWZ5aW5nIHRoZSBxdWV1ZSB3aGlsZSBpdCBpcyBiZWluZyBpdGVyYXRlZCB3aWxsIG1vc3QgbGlrZWx5IGJyZWFrIHRoZQovLy8gaXRlcmF0aW9uLgovLy8gVGhpcyBnb2VzIGJvdGggZm9yIHVzaW5nIHRoZSBbaXRlcmF0b3JdIGRpcmVjdGx5LCBvciBmb3IgaXRlcmF0aW5nIGFuCi8vLyBgSXRlcmFibGVgIHJldHVybmVkIGJ5IGEgbWV0aG9kIGxpa2UgW21hcF0gb3IgW3doZXJlXS4KYWJzdHJhY3QgY2xhc3MgUXVldWU8RT4gaW1wbGVtZW50cyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxFPiB7CiAgLy8vIENyZWF0ZXMgYSBxdWV1ZS4KICBmYWN0b3J5IFF1ZXVlKCkgPSBMaXN0UXVldWU8RT47CgogIC8vLyBDcmVhdGVzIGEgcXVldWUgY29udGFpbmluZyBhbGwgW2VsZW1lbnRzXS4KICAvLy8KICAvLy8gVGhlIGVsZW1lbnQgb3JkZXIgaW4gdGhlIHF1ZXVlIGlzIGFzIGlmIHRoZSBlbGVtZW50cyB3ZXJlIGFkZGVkIHVzaW5nCiAgLy8vIFthZGRMYXN0XSBpbiB0aGUgb3JkZXIgcHJvdmlkZWQgYnkgW2VsZW1lbnRzLml0ZXJhdG9yXS4KICAvLy8KICAvLy8gQWxsIHRoZSBbZWxlbWVudHNdIHNob3VsZCBiZSBpbnN0YW5jZXMgb2YgW0VdLgogIC8vLyBUaGUgYGVsZW1lbnRzYCBpdGVyYWJsZSBpdHNlbGYgbWF5IGhhdmUgYW55IGVsZW1lbnQgdHlwZSwgc28gdGhpcwogIC8vLyBjb25zdHJ1Y3RvciBjYW4gYmUgdXNlZCB0byBkb3duLWNhc3QgYSBgUXVldWVgLCBmb3IgZXhhbXBsZSBhczoKICAvLy8gYGBgZGFydAogIC8vLyBRdWV1ZTxTdXBlclR5cGU+IHN1cGVyUXVldWUgPSAuLi47CiAgLy8vIFF1ZXVlPFN1YlR5cGU+IHN1YlF1ZXVlID0KICAvLy8gICAgIG5ldyBRdWV1ZTxTdWJUeXBlPi5mcm9tKHN1cGVyU2V0LndoZXJlVHlwZTxTdWJUeXBlPigpKTsKICAvLy8gYGBgCiAgZmFjdG9yeSBRdWV1ZS5mcm9tKEl0ZXJhYmxlIGVsZW1lbnRzKSA9IExpc3RRdWV1ZTxFPi5mcm9tOwoKICAvLy8gQ3JlYXRlcyBhIHF1ZXVlIGZyb20gW2VsZW1lbnRzXS4KICAvLy8KICAvLy8gVGhlIGVsZW1lbnQgb3JkZXIgaW4gdGhlIHF1ZXVlIGlzIGFzIGlmIHRoZSBlbGVtZW50cyB3ZXJlIGFkZGVkIHVzaW5nCiAgLy8vIFthZGRMYXN0XSBpbiB0aGUgb3JkZXIgcHJvdmlkZWQgYnkgW2VsZW1lbnRzLml0ZXJhdG9yXS4KICBmYWN0b3J5IFF1ZXVlLm9mKEl0ZXJhYmxlPEU+IGVsZW1lbnRzKSA9IExpc3RRdWV1ZTxFPi5vZjsKCiAgLy8vIEFkYXB0cyBbc291cmNlXSB0byBiZSBhIGBRdWV1ZTxUPmAuCiAgLy8vCiAgLy8vIEFueSB0aW1lIHRoZSBxdWV1ZSB3b3VsZCBwcm9kdWNlIGFuIGVsZW1lbnQgdGhhdCBpcyBub3QgYSBbVF0sCiAgLy8vIHRoZSBlbGVtZW50IGFjY2VzcyB3aWxsIHRocm93LgogIC8vLwogIC8vLyBBbnkgdGltZSBhIFtUXSB2YWx1ZSBpcyBhdHRlbXB0ZWQgc3RvcmVkIGludG8gdGhlIGFkYXB0ZWQgcXVldWUsCiAgLy8vIHRoZSBzdG9yZSB3aWxsIHRocm93IHVubGVzcyB0aGUgdmFsdWUgaXMgYWxzbyBhbiBpbnN0YW5jZSBvZiBbU10uCiAgLy8vCiAgLy8vIElmIGFsbCBhY2Nlc3NlZCBlbGVtZW50cyBvZiBbc291cmNlXSBhcmUgYWN0dWFsbHkgaW5zdGFuY2VzIG9mIFtUXSwKICAvLy8gYW5kIGlmIGFsbCBlbGVtZW50cyBzdG9yZWQgaW50byB0aGUgcmV0dXJuZWQgcXVldWUgYXJlIGFjdHVhbGx5IGluc3RhbmNlCiAgLy8vIG9mIFtTXSwKICAvLy8gdGhlbiB0aGUgcmV0dXJuZWQgcXVldWUgY2FuIGJlIHVzZWQgYXMgYSBgUXVldWU8VD5gLgogIHN0YXRpYyBRdWV1ZTxUPiBjYXN0RnJvbTxTLCBUPihRdWV1ZTxTPiBzb3VyY2UpID0+IENhc3RRdWV1ZTxTLCBUPihzb3VyY2UpOwoKICAvLy8gUHJvdmlkZXMgYSB2aWV3IG9mIHRoaXMgcXVldWUgYXMgYSBxdWV1ZSBvZiBbUl0gaW5zdGFuY2VzLCBpZiBuZWNlc3NhcnkuCiAgLy8vCiAgLy8vIElmIHRoaXMgcXVldWUgY29udGFpbnMgb25seSBpbnN0YW5jZXMgb2YgW1JdLCBhbGwgcmVhZCBvcGVyYXRpb25zCiAgLy8vIHdpbGwgd29yayBjb3JyZWN0bHkuIElmIGFueSBvcGVyYXRpb24gdHJpZXMgdG8gYWNjZXNzIGFuIGVsZW1lbnQKICAvLy8gdGhhdCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgW1JdLCB0aGUgYWNjZXNzIHdpbGwgdGhyb3cgaW5zdGVhZC4KICAvLy8KICAvLy8gRWxlbWVudHMgYWRkZWQgdG8gdGhlIHF1ZXVlIChlLmcuLCBieSB1c2luZyBbYWRkRmlyc3RdIG9yIFthZGRBbGxdKQogIC8vLyBtdXN0IGJlIGluc3RhbmNlIG9mIFtSXSB0byBiZSB2YWxpZCBhcmd1bWVudHMgdG8gdGhlIGFkZGluZyBmdW5jdGlvbiwKICAvLy8gYW5kIHRoZXkgbXVzdCBiZSBpbnN0YW5jZXMgb2YgW0VdIGFzIHdlbGwgdG8gYmUgYWNjZXB0ZWQgYnkKICAvLy8gdGhpcyBxdWV1ZSBhcyB3ZWxsLgogIFF1ZXVlPFI+IGNhc3Q8Uj4oKTsKCiAgLy8vIFJlbW92ZXMgYW5kIHJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhpcyBxdWV1ZS4KICAvLy8KICAvLy8gVGhlIHF1ZXVlIG11c3Qgbm90IGJlIGVtcHR5IHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLgogIEUgcmVtb3ZlRmlyc3QoKTsKCiAgLy8vIFJlbW92ZXMgYW5kIHJldHVybnMgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcXVldWUuCiAgLy8vCiAgLy8vIFRoZSBxdWV1ZSBtdXN0IG5vdCBiZSBlbXB0eSB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC4KICBFIHJlbW92ZUxhc3QoKTsKCiAgLy8vIEFkZHMgW3ZhbHVlXSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBxdWV1ZS4KICB2b2lkIGFkZEZpcnN0KEUgdmFsdWUpOwoKICAvLy8gQWRkcyBbdmFsdWVdIGF0IHRoZSBlbmQgb2YgdGhlIHF1ZXVlLgogIHZvaWQgYWRkTGFzdChFIHZhbHVlKTsKCiAgLy8vIEFkZHMgW3ZhbHVlXSBhdCB0aGUgZW5kIG9mIHRoZSBxdWV1ZS4KICB2b2lkIGFkZChFIHZhbHVlKTsKCiAgLy8vIFJlbW92ZSBhIHNpbmdsZSBpbnN0YW5jZSBvZiBbdmFsdWVdIGZyb20gdGhlIHF1ZXVlLgogIC8vLwogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBhIHZhbHVlIHdhcyByZW1vdmVkLCBvciBgZmFsc2VgIGlmIHRoZSBxdWV1ZQogIC8vLyBjb250YWluZWQgbm8gZWxlbWVudCBlcXVhbCB0byBbdmFsdWVdLgogIGJvb2wgcmVtb3ZlKE9iamVjdCB2YWx1ZSk7CgogIC8vLyBBZGRzIGFsbCBlbGVtZW50cyBvZiBbaXRlcmFibGVdIGF0IHRoZSBlbmQgb2YgdGhlIHF1ZXVlLiBUaGUKICAvLy8gbGVuZ3RoIG9mIHRoZSBxdWV1ZSBpcyBleHRlbmRlZCBieSB0aGUgbGVuZ3RoIG9mIFtpdGVyYWJsZV0uCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gaXRlcmFibGUpOwoKICAvLy8gUmVtb3ZlcyBhbGwgZWxlbWVudHMgbWF0Y2hlZCBieSBbdGVzdF0gZnJvbSB0aGUgcXVldWUuCiAgLy8vCiAgLy8vIFRoZSBgdGVzdGAgZnVuY3Rpb24gbXVzdCBub3QgdGhyb3cgb3IgbW9kaWZ5IHRoZSBxdWV1ZS4KICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKTsKCiAgLy8vIFJlbW92ZXMgYWxsIGVsZW1lbnRzIG5vdCBtYXRjaGVkIGJ5IFt0ZXN0XSBmcm9tIHRoZSBxdWV1ZS4KICAvLy8KICAvLy8gVGhlIGB0ZXN0YCBmdW5jdGlvbiBtdXN0IG5vdCB0aHJvdyBvciBtb2RpZnkgdGhlIHF1ZXVlLgogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpOwoKICAvLy8gUmVtb3ZlcyBhbGwgZWxlbWVudHMgaW4gdGhlIHF1ZXVlLiBUaGUgc2l6ZSBvZiB0aGUgcXVldWUgYmVjb21lcyB6ZXJvLgogIHZvaWQgY2xlYXIoKTsKfQoKY2xhc3MgX0RvdWJsZUxpbms8TGluayBleHRlbmRzIF9Eb3VibGVMaW5rPExpbms+PiB7CiAgTGluayBfcHJldmlvdXNMaW5rOwogIExpbmsgX25leHRMaW5rOwoKICB2b2lkIF9saW5rKExpbmsgcHJldmlvdXMsIExpbmsgbmV4dCkgewogICAgX25leHRMaW5rID0gbmV4dDsKICAgIF9wcmV2aW91c0xpbmsgPSBwcmV2aW91czsKICAgIGlmIChwcmV2aW91cyAhPSBudWxsKSBwcmV2aW91cy5fbmV4dExpbmsgPSB0aGlzOwogICAgaWYgKG5leHQgIT0gbnVsbCkgbmV4dC5fcHJldmlvdXNMaW5rID0gdGhpczsKICB9CgogIHZvaWQgX3VubGluaygpIHsKICAgIGlmIChfcHJldmlvdXNMaW5rICE9IG51bGwpIF9wcmV2aW91c0xpbmsuX25leHRMaW5rID0gX25leHRMaW5rOwogICAgaWYgKF9uZXh0TGluayAhPSBudWxsKSBfbmV4dExpbmsuX3ByZXZpb3VzTGluayA9IF9wcmV2aW91c0xpbms7CiAgICBfbmV4dExpbmsgPSBudWxsOwogICAgX3ByZXZpb3VzTGluayA9IG51bGw7CiAgfQp9CgovLy8gQW4gZW50cnkgaW4gYSBkb3VibHkgbGlua2VkIGxpc3QuIEl0IGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGUgbmV4dAovLy8gZW50cnksIHRoZSBwcmV2aW91cyBlbnRyeSwgYW5kIHRoZSBib3hlZCBlbGVtZW50LgpjbGFzcyBEb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IGV4dGVuZHMgX0RvdWJsZUxpbms8RG91YmxlTGlua2VkUXVldWVFbnRyeTxFPj4gewogIC8vLyBUaGUgZWxlbWVudCBpbiB0aGUgcXVldWUuCiAgRSBlbGVtZW50OwoKICBEb3VibGVMaW5rZWRRdWV1ZUVudHJ5KHRoaXMuZWxlbWVudCk7CgogIC8vLyBBcHBlbmRzIHRoZSBnaXZlbiBbZV0gYXMgZW50cnkganVzdCBhZnRlciB0aGlzIGVudHJ5LgogIHZvaWQgYXBwZW5kKEUgZSkgewogICAgRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPihlKS5fbGluayh0aGlzLCBfbmV4dExpbmspOwogIH0KCiAgLy8vIFByZXBlbmRzIHRoZSBnaXZlbiBbZV0gYXMgZW50cnkganVzdCBiZWZvcmUgdGhpcyBlbnRyeS4KICB2b2lkIHByZXBlbmQoRSBlKSB7CiAgICBEb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+KGUpLl9saW5rKF9wcmV2aW91c0xpbmssIHRoaXMpOwogIH0KCiAgRSByZW1vdmUoKSB7CiAgICBfdW5saW5rKCk7CiAgICByZXR1cm4gZWxlbWVudDsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBwcmV2aW91cyBlbnRyeSBvciBgbnVsbGAgaWYgdGhlcmUgaXMgbm9uZS4KICBEb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IHByZXZpb3VzRW50cnkoKSA9PiBfcHJldmlvdXNMaW5rOwoKICAvLy8gUmV0dXJucyB0aGUgbmV4dCBlbnRyeSBvciBgbnVsbGAgaWYgdGhlcmUgaXMgbm9uZS4KICBEb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IG5leHRFbnRyeSgpID0+IF9uZXh0TGluazsKfQoKLy8vIEludGVyZmFjZSBmb3IgdGhlIGxpbmsgY2xhc3NlcyB1c2VkIGJ5IFtEb3VibGVMaW5rZWRRdWV1ZV0uCi8vLwovLy8gQm90aCB0aGUgW19Eb3VibGVMaW5rZWRRdWV1ZUVsZW1lbnRdIGFuZCBbX0RvdWJsZUxpbmtlZFF1ZXVlU2VudGluZWxdCi8vLyBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UuCi8vLyBUaGUgZW50cnkgY29udGFpbnMgYSBsaW5rIGJhY2sgdG8gdGhlIHF1ZXVlLCBzbyBjYWxsaW5nIGBhcHBlbmRgCi8vLyBvciBgcHJlcGVuZGAgY2FuIGNvcnJlY3RseSB1cGRhdGUgdGhlIGVsZW1lbnQgY291bnQuCmFic3RyYWN0IGNsYXNzIF9Eb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IGV4dGVuZHMgRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiB7CiAgRG91YmxlTGlua2VkUXVldWU8RT4gX3F1ZXVlOwogIF9Eb3VibGVMaW5rZWRRdWV1ZUVudHJ5KEUgZWxlbWVudCwgdGhpcy5fcXVldWUpIDogc3VwZXIoZWxlbWVudCk7CgogIERvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gX2FzTm9uU2VudGluZWxFbnRyeSgpOwoKICB2b2lkIF9hcHBlbmQoRSBlKSB7CiAgICBfRG91YmxlTGlua2VkUXVldWVFbGVtZW50PEU+KGUsIF9xdWV1ZSkuX2xpbmsodGhpcywgX25leHRMaW5rKTsKICB9CgogIHZvaWQgX3ByZXBlbmQoRSBlKSB7CiAgICBfRG91YmxlTGlua2VkUXVldWVFbGVtZW50PEU+KGUsIF9xdWV1ZSkuX2xpbmsoX3ByZXZpb3VzTGluaywgdGhpcyk7CiAgfQoKICBFIF9yZW1vdmUoKTsKCiAgRSBnZXQgX2VsZW1lbnQgPT4gZWxlbWVudDsKCiAgRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBuZXh0RW50cnkoKSB7CiAgICBfRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBlbnRyeSA9IF9uZXh0TGluazsKICAgIHJldHVybiBlbnRyeS5fYXNOb25TZW50aW5lbEVudHJ5KCk7CiAgfQoKICBEb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IHByZXZpb3VzRW50cnkoKSB7CiAgICBfRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBlbnRyeSA9IF9wcmV2aW91c0xpbms7CiAgICByZXR1cm4gZW50cnkuX2FzTm9uU2VudGluZWxFbnRyeSgpOwogIH0KfQoKLy8vIFRoZSBhY3R1YWwgZW50cnkgdHlwZSB1c2VkIGJ5IHRoZSBbRG91YmxlTGlua2VkUXVldWVdLgovLy8KLy8vIFRoZSBlbnRyeSBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgcXVldWUsIGFsbG93aW5nCi8vLyBbYXBwZW5kXS9bcHJlcGVuZF0gdG8gdXBkYXRlIHRoZSBsaXN0IGxlbmd0aC4KY2xhc3MgX0RvdWJsZUxpbmtlZFF1ZXVlRWxlbWVudDxFPiBleHRlbmRzIF9Eb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IHsKICBfRG91YmxlTGlua2VkUXVldWVFbGVtZW50KEUgZWxlbWVudCwgRG91YmxlTGlua2VkUXVldWU8RT4gcXVldWUpCiAgICAgIDogc3VwZXIoZWxlbWVudCwgcXVldWUpOwoKICB2b2lkIGFwcGVuZChFIGUpIHsKICAgIF9hcHBlbmQoZSk7CiAgICBpZiAoX3F1ZXVlICE9IG51bGwpIF9xdWV1ZS5fZWxlbWVudENvdW50Kys7CiAgfQoKICB2b2lkIHByZXBlbmQoRSBlKSB7CiAgICBfcHJlcGVuZChlKTsKICAgIGlmIChfcXVldWUgIT0gbnVsbCkgX3F1ZXVlLl9lbGVtZW50Q291bnQrKzsKICB9CgogIEUgX3JlbW92ZSgpIHsKICAgIF9xdWV1ZSA9IG51bGw7CiAgICBfdW5saW5rKCk7CiAgICByZXR1cm4gZWxlbWVudDsKICB9CgogIEUgcmVtb3ZlKCkgewogICAgaWYgKF9xdWV1ZSAhPSBudWxsKSBfcXVldWUuX2VsZW1lbnRDb3VudC0tOwogICAgcmV0dXJuIF9yZW1vdmUoKTsKICB9CgogIF9Eb3VibGVMaW5rZWRRdWV1ZUVsZW1lbnQ8RT4gX2FzTm9uU2VudGluZWxFbnRyeSgpIHsKICAgIHJldHVybiB0aGlzOwogIH0KfQoKLy8vIEEgc2VudGluZWwgaW4gYSBkb3VibGUgbGlua2VkIGxpc3QgaXMgdXNlZCB0byBtYW5pcHVsYXRlIHRoZSBsaXN0Ci8vLyBhdCBib3RoIGVuZHMuCi8vLyBBIGRvdWJsZSBsaW5rZWQgbGlzdCBoYXMgZXhhY3RseSBvbmUgc2VudGluZWwsCi8vLyB3aGljaCBpcyB0aGUgb25seSBlbnRyeSB3aGVuIHRoZSBsaXN0IGlzIGNvbnN0cnVjdGVkLgovLy8gSW5pdGlhbGx5LCBhIHNlbnRpbmVsIGhhcyBpdHMgbmV4dCBhbmQgcHJldmlvdXMgZW50cnkgcG9pbnQgdG8gaXRzZWxmLgovLy8gQSBzZW50aW5lbCBkb2VzIG5vdCBib3ggYW55IHVzZXIgZWxlbWVudC4KY2xhc3MgX0RvdWJsZUxpbmtlZFF1ZXVlU2VudGluZWw8RT4gZXh0ZW5kcyBfRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiB7CiAgX0RvdWJsZUxpbmtlZFF1ZXVlU2VudGluZWwoRG91YmxlTGlua2VkUXVldWU8RT4gcXVldWUpIDogc3VwZXIobnVsbCwgcXVldWUpIHsKICAgIF9wcmV2aW91c0xpbmsgPSB0aGlzOwogICAgX25leHRMaW5rID0gdGhpczsKICB9CgogIERvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gX2FzTm9uU2VudGluZWxFbnRyeSgpIHsKICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8vIEhpdCBieSwgZS5nLiwgW0RvdWJsZUxpbmtlZFF1ZXVlLnJlbW92ZUZpcnN0XSBpZiB0aGUgcXVldWUgaXMgZW1wdHkuCiAgRSBfcmVtb3ZlKCkgewogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICAvLy8gSGl0IGJ5LCBlLmcuLCBbRG91YmxlTGlua2VkUXVldWUuZmlyc3RdIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eS4KICBFIGdldCBfZWxlbWVudCB7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9Cn0KCi8vLyBBIFtRdWV1ZV0gaW1wbGVtZW50YXRpb24gYmFzZWQgb24gYSBkb3VibGUtbGlua2VkIGxpc3QuCi8vLwovLy8gQWxsb3dzIGNvbnN0YW50IHRpbWUgYWRkLCByZW1vdmUtYXQtZW5kcyBhbmQgcGVlayBvcGVyYXRpb25zLgpjbGFzcyBEb3VibGVMaW5rZWRRdWV1ZTxFPiBleHRlbmRzIEl0ZXJhYmxlPEU+IGltcGxlbWVudHMgUXVldWU8RT4gewogIF9Eb3VibGVMaW5rZWRRdWV1ZVNlbnRpbmVsPEU+IF9zZW50aW5lbDsKICBpbnQgX2VsZW1lbnRDb3VudCA9IDA7CgogIERvdWJsZUxpbmtlZFF1ZXVlKCkgewogICAgX3NlbnRpbmVsID0gX0RvdWJsZUxpbmtlZFF1ZXVlU2VudGluZWw8RT4odGhpcyk7CiAgfQoKICAvLy8gQ3JlYXRlcyBhIGRvdWJsZS1saW5rZWQgcXVldWUgY29udGFpbmluZyBhbGwgW2VsZW1lbnRzXS4KICAvLy8KICAvLy8gVGhlIGVsZW1lbnQgb3JkZXIgaW4gdGhlIHF1ZXVlIGlzIGFzIGlmIHRoZSBlbGVtZW50cyB3ZXJlIGFkZGVkIHVzaW5nCiAgLy8vIFthZGRMYXN0XSBpbiB0aGUgb3JkZXIgcHJvdmlkZWQgYnkgW2VsZW1lbnRzLml0ZXJhdG9yXS4KICAvLy8KICAvLy8gQWxsIHRoZSBbZWxlbWVudHNdIHNob3VsZCBiZSBpbnN0YW5jZXMgb2YgW0VdLgogIC8vLyBUaGUgYGVsZW1lbnRzYCBpdGVyYWJsZSBpdHNlbGYgbWF5IGhhdmUgYW55IGVsZW1lbnQgdHlwZSwgc28gdGhpcwogIC8vLyBjb25zdHJ1Y3RvciBjYW4gYmUgdXNlZCB0byBkb3duLWNhc3QgYSBgUXVldWVgLCBmb3IgZXhhbXBsZSBhczoKICAvLy8gYGBgZGFydAogIC8vLyBRdWV1ZTxTdXBlclR5cGU+IHN1cGVyUXVldWUgPSAuLi47CiAgLy8vIFF1ZXVlPFN1YlR5cGU+IHN1YlF1ZXVlID0KICAvLy8gICAgIG5ldyBEb3VibGVMaW5rZWRRdWV1ZTxTdWJUeXBlPi5mcm9tKHN1cGVyUXVldWUud2hlcmVUeXBlPFN1YlR5cGU+KCkpOwogIC8vLyBgYGAKICBmYWN0b3J5IERvdWJsZUxpbmtlZFF1ZXVlLmZyb20oSXRlcmFibGUgZWxlbWVudHMpIHsKICAgIFF1ZXVlPEU+IGxpc3QgPSBEb3VibGVMaW5rZWRRdWV1ZTxFPigpOwogICAgZm9yIChmaW5hbCBlIGluIGVsZW1lbnRzKSB7CiAgICAgIGxpc3QuYWRkTGFzdChlKTsKICAgIH0KICAgIHJldHVybiBsaXN0OwogIH0KCiAgLy8vIENyZWF0ZXMgYSBkb3VibGUtbGlua2VkIHF1ZXVlIGZyb20gW2VsZW1lbnRzXS4KICAvLy8KICAvLy8gVGhlIGVsZW1lbnQgb3JkZXIgaW4gdGhlIHF1ZXVlIGlzIGFzIGlmIHRoZSBlbGVtZW50cyB3ZXJlIGFkZGVkIHVzaW5nCiAgLy8vIFthZGRMYXN0XSBpbiB0aGUgb3JkZXIgcHJvdmlkZWQgYnkgW2VsZW1lbnRzLml0ZXJhdG9yXS4KICBmYWN0b3J5IERvdWJsZUxpbmtlZFF1ZXVlLm9mKEl0ZXJhYmxlPEU+IGVsZW1lbnRzKSA9PgogICAgICBEb3VibGVMaW5rZWRRdWV1ZTxFPigpLi5hZGRBbGwoZWxlbWVudHMpOwoKICBRdWV1ZTxSPiBjYXN0PFI+KCkgPT4gUXVldWUuY2FzdEZyb208RSwgUj4odGhpcyk7CiAgaW50IGdldCBsZW5ndGggPT4gX2VsZW1lbnRDb3VudDsKCiAgdm9pZCBhZGRMYXN0KEUgdmFsdWUpIHsKICAgIF9zZW50aW5lbC5fcHJlcGVuZCh2YWx1ZSk7CiAgICBfZWxlbWVudENvdW50Kys7CiAgfQoKICB2b2lkIGFkZEZpcnN0KEUgdmFsdWUpIHsKICAgIF9zZW50aW5lbC5fYXBwZW5kKHZhbHVlKTsKICAgIF9lbGVtZW50Q291bnQrKzsKICB9CgogIHZvaWQgYWRkKEUgdmFsdWUpIHsKICAgIF9zZW50aW5lbC5fcHJlcGVuZCh2YWx1ZSk7CiAgICBfZWxlbWVudENvdW50Kys7CiAgfQoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgZm9yIChmaW5hbCBFIHZhbHVlIGluIGl0ZXJhYmxlKSB7CiAgICAgIF9zZW50aW5lbC5fcHJlcGVuZCh2YWx1ZSk7CiAgICAgIF9lbGVtZW50Q291bnQrKzsKICAgIH0KICB9CgogIEUgcmVtb3ZlTGFzdCgpIHsKICAgIF9Eb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IGxhc3RFbnRyeSA9IF9zZW50aW5lbC5fcHJldmlvdXNMaW5rOwogICAgRSByZXN1bHQgPSBsYXN0RW50cnkuX3JlbW92ZSgpOwogICAgX2VsZW1lbnRDb3VudC0tOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEUgcmVtb3ZlRmlyc3QoKSB7CiAgICBfRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBmaXJzdEVudHJ5ID0gX3NlbnRpbmVsLl9uZXh0TGluazsKICAgIEUgcmVzdWx0ID0gZmlyc3RFbnRyeS5fcmVtb3ZlKCk7CiAgICBfZWxlbWVudENvdW50LS07CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgYm9vbCByZW1vdmUoT2JqZWN0IG8pIHsKICAgIF9Eb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IGVudHJ5ID0gX3NlbnRpbmVsLl9uZXh0TGluazsKICAgIHdoaWxlICghaWRlbnRpY2FsKGVudHJ5LCBfc2VudGluZWwpKSB7CiAgICAgIGJvb2wgZXF1YWxzID0gKGVudHJ5Ll9lbGVtZW50ID09IG8pOwogICAgICBpZiAoIWlkZW50aWNhbCh0aGlzLCBlbnRyeS5fcXVldWUpKSB7CiAgICAgICAgLy8gRW50cnkgbXVzdCBzdGlsbCBiZSBpbiB0aGUgcXVldWUuCiAgICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICAgIGlmIChlcXVhbHMpIHsKICAgICAgICBlbnRyeS5fcmVtb3ZlKCk7CiAgICAgICAgX2VsZW1lbnRDb3VudC0tOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGVudHJ5ID0gZW50cnkuX25leHRMaW5rOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdm9pZCBfZmlsdGVyKGJvb2wgdGVzdChFIGVsZW1lbnQpLCBib29sIHJlbW92ZU1hdGNoaW5nKSB7CiAgICBfRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBlbnRyeSA9IF9zZW50aW5lbC5fbmV4dExpbms7CiAgICB3aGlsZSAoIWlkZW50aWNhbChlbnRyeSwgX3NlbnRpbmVsKSkgewogICAgICBib29sIG1hdGNoZXMgPSB0ZXN0KGVudHJ5Ll9lbGVtZW50KTsKICAgICAgaWYgKCFpZGVudGljYWwodGhpcywgZW50cnkuX3F1ZXVlKSkgewogICAgICAgIC8vIEVudHJ5IG11c3Qgc3RpbGwgYmUgaW4gdGhlIHF1ZXVlLgogICAgICAgIHRocm93IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgfQogICAgICBfRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBuZXh0ID0gZW50cnkuX25leHRMaW5rOyAvLyBDYW5ub3QgYmUgbnVsbC4KICAgICAgaWYgKGlkZW50aWNhbChyZW1vdmVNYXRjaGluZywgbWF0Y2hlcykpIHsKICAgICAgICBlbnRyeS5fcmVtb3ZlKCk7CiAgICAgICAgX2VsZW1lbnRDb3VudC0tOwogICAgICB9CiAgICAgIGVudHJ5ID0gbmV4dDsKICAgIH0KICB9CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIF9maWx0ZXIodGVzdCwgdHJ1ZSk7CiAgfQoKICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBfZmlsdGVyKHRlc3QsIGZhbHNlKTsKICB9CgogIEUgZ2V0IGZpcnN0IHsKICAgIF9Eb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IGZpcnN0RW50cnkgPSBfc2VudGluZWwuX25leHRMaW5rOwogICAgcmV0dXJuIGZpcnN0RW50cnkuX2VsZW1lbnQ7CiAgfQoKICBFIGdldCBsYXN0IHsKICAgIF9Eb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IGxhc3RFbnRyeSA9IF9zZW50aW5lbC5fcHJldmlvdXNMaW5rOwogICAgcmV0dXJuIGxhc3RFbnRyeS5fZWxlbWVudDsKICB9CgogIEUgZ2V0IHNpbmdsZSB7CiAgICAvLyBOb3RlIHRoYXQgdGhpcyB0aHJvd3MgY29ycmVjdGx5IGlmIHRoZSBxdWV1ZSBpcyBlbXB0eQogICAgLy8gYmVjYXVzZSByZWFkaW5nIHRoZSBlbGVtZW50IG9mIHRoZSBzZW50aW5lbCB0aHJvd3MuCiAgICBpZiAoaWRlbnRpY2FsKF9zZW50aW5lbC5fbmV4dExpbmssIF9zZW50aW5lbC5fcHJldmlvdXNMaW5rKSkgewogICAgICBfRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBlbnRyeSA9IF9zZW50aW5lbC5fbmV4dExpbms7CiAgICAgIHJldHVybiBlbnRyeS5fZWxlbWVudDsKICAgIH0KICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICB9CgogIC8vLyBUaGUgZW50cnkgb2JqZWN0IG9mIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBxdWV1ZS4KICAvLy8KICAvLy8gRWFjaCBlbGVtZW50IG9mIHRoZSBxdWV1ZSBoYXMgYW4gYXNzb2NpYXRlZCBbRG91YmxlTGlua2VkUXVldWVFbnRyeV0uCiAgLy8vIFJldHVybnMgdGhlIGVudHJ5IG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBxdWV1ZS4KICAvLy8KICAvLy8gVGhlIGVudHJ5IG9iamVjdHMgY2FuIGFsc28gYmUgYWNjZXNzZWQgdXNpbmcgW2xhc3RFbnRyeV0sCiAgLy8vIGFuZCB0aGV5IGNhbiBiZSBpdGVyYXRlZCB1c2luZyBbRG91YmxlTGlua2VkUXVldWVFbnRyeS5uZXh0RW50cnkoKV0gYW5kCiAgLy8vIFtEb3VibGVMaW5rZWRRdWV1ZUVudHJ5LnByZXZpb3VzRW50cnkoKV0uCiAgRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBmaXJzdEVudHJ5KCkgewogICAgcmV0dXJuIF9zZW50aW5lbC5uZXh0RW50cnkoKTsKICB9CgogIC8vLyBUaGUgZW50cnkgb2JqZWN0IG9mIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlIHF1ZXVlLgogIC8vLwogIC8vLyBFYWNoIGVsZW1lbnQgb2YgdGhlIHF1ZXVlIGhhcyBhbiBhc3NvY2lhdGVkIFtEb3VibGVMaW5rZWRRdWV1ZUVudHJ5XS4KICAvLy8gUmV0dXJucyB0aGUgZW50cnkgb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcXVldWUuCiAgLy8vCiAgLy8vIFRoZSBlbnRyeSBvYmplY3RzIGNhbiBhbHNvIGJlIGFjY2Vzc2VkIHVzaW5nIFtmaXJzdEVudHJ5XSwKICAvLy8gYW5kIHRoZXkgY2FuIGJlIGl0ZXJhdGVkIHVzaW5nIFtEb3VibGVMaW5rZWRRdWV1ZUVudHJ5Lm5leHRFbnRyeSgpXSBhbmQKICAvLy8gW0RvdWJsZUxpbmtlZFF1ZXVlRW50cnkucHJldmlvdXNFbnRyeSgpXS4KICBEb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IGxhc3RFbnRyeSgpIHsKICAgIHJldHVybiBfc2VudGluZWwucHJldmlvdXNFbnRyeSgpOwogIH0KCiAgYm9vbCBnZXQgaXNFbXB0eSB7CiAgICByZXR1cm4gKGlkZW50aWNhbChfc2VudGluZWwuX25leHRMaW5rLCBfc2VudGluZWwpKTsKICB9CgogIHZvaWQgY2xlYXIoKSB7CiAgICBfc2VudGluZWwuX25leHRMaW5rID0gX3NlbnRpbmVsOwogICAgX3NlbnRpbmVsLl9wcmV2aW91c0xpbmsgPSBfc2VudGluZWw7CiAgICBfZWxlbWVudENvdW50ID0gMDsKICB9CgogIC8vLyBDYWxscyBbYWN0aW9uXSBmb3IgZWFjaCBlbnRyeSBvYmplY3Qgb2YgdGhpcyBkb3VibGUtbGlua2VkIHF1ZXVlLgogIC8vLwogIC8vLyBFYWNoIGVsZW1lbnQgb2YgdGhlIHF1ZXVlIGhhcyBhbiBhc3NvY2lhdGVkIFtEb3VibGVMaW5rZWRRdWV1ZUVudHJ5XS4KICAvLy8gVGhpcyBtZXRob2QgaXRlcmF0ZXMgdGhlIGVudHJ5IG9iamVjdHMgZnJvbSBmaXJzdCB0byBsYXN0IGFuZCBjYWxscwogIC8vLyBbYWN0aW9uXSB3aXRoIGVhY2ggb2JqZWN0IGluIHR1cm4uCiAgLy8vCiAgLy8vIFRoZSBlbnRyeSBvYmplY3RzIGNhbiBhbHNvIGJlIGFjY2Vzc2VkIHVzaW5nIFtmaXJzdEVudHJ5XSBhbmQgW2xhc3RFbnRyeV0sCiAgLy8vIGFuZCBpdGVyYXRlZCB1c2luZyBbRG91YmxlTGlua2VkUXVldWVFbnRyeS5uZXh0RW50cnkoKV0gYW5kCiAgLy8vIFtEb3VibGVMaW5rZWRRdWV1ZUVudHJ5LnByZXZpb3VzRW50cnkoKV0uCiAgLy8vCiAgLy8vIFRoZSBbYWN0aW9uXSBmdW5jdGlvbiBjYW4gdXNlIG1ldGhvZHMgb24gW0RvdWJsZUxpbmtlZFF1ZXVlRW50cnldIHRvCiAgLy8vIHJlbW92ZSB0aGUgZW50cnkgb3IgaXQgY2FuIGluc2VydCBlbGVtZW50cyBiZWZvcmUgb3IgYWZ0ZXIgdGhlbiBlbnRyeS4KICAvLy8gSWYgdGhlIGN1cnJlbnQgZW50cnkgaXMgcmVtb3ZlZCwgaXRlcmF0aW9uIGNvbnRpbnVlcyB3aXRoIHRoZSBlbnRyeSB0aGF0CiAgLy8vIHdhcyBmb2xsb3dpbmcgdGhlIGN1cnJlbnQgZW50cnkgd2hlbiBbYWN0aW9uXSB3YXMgY2FsbGVkLiBBbnkgZWxlbWVudHMKICAvLy8gaW5zZXJ0ZWQgYWZ0ZXIgdGhlIGN1cnJlbnQgZWxlbWVudCBiZWZvcmUgaXQgaXMgcmVtb3ZlZCB3aWxsIG5vdCBiZQogIC8vLyB2aXNpdGVkIGJ5IHRoZSBpdGVyYXRpb24uCiAgdm9pZCBmb3JFYWNoRW50cnkodm9pZCBhY3Rpb24oRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBlbGVtZW50KSkgewogICAgX0RvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gZW50cnkgPSBfc2VudGluZWwuX25leHRMaW5rOwogICAgd2hpbGUgKCFpZGVudGljYWwoZW50cnksIF9zZW50aW5lbCkpIHsKICAgICAgX0RvdWJsZUxpbmtlZFF1ZXVlRWxlbWVudDxFPiBlbGVtZW50ID0gZW50cnk7CiAgICAgIF9Eb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IG5leHQgPSBlbGVtZW50Ll9uZXh0TGluazsKICAgICAgLy8gUmVtZW1iZXIgYm90aCBlbnRyeSBhbmQgZW50cnkuX25leHRMaW5rLgogICAgICAvLyBJZiBzb21lb25lIGNhbGxzIGBlbGVtZW50LnJlbW92ZSgpYCB3ZSBjb250aW51ZSBmcm9tIGBuZXh0YC4KICAgICAgLy8gT3RoZXJ3aXNlIHdlIHVzZSB0aGUgdmFsdWUgb2YgZW50cnkuX25leHRMaW5rIHdoaWNoIG1heSBoYXZlIGJlZW4KICAgICAgLy8gdXBkYXRlZC4KICAgICAgYWN0aW9uKGVsZW1lbnQpOwogICAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIGVudHJ5Ll9xdWV1ZSkpIHsKICAgICAgICBuZXh0ID0gZW50cnkuX25leHRMaW5rOwogICAgICB9IGVsc2UgaWYgKCFpZGVudGljYWwodGhpcywgbmV4dC5fcXVldWUpKSB7CiAgICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICAgIGVudHJ5ID0gbmV4dDsKICAgIH0KICB9CgogIF9Eb3VibGVMaW5rZWRRdWV1ZUl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciB7CiAgICByZXR1cm4gX0RvdWJsZUxpbmtlZFF1ZXVlSXRlcmF0b3I8RT4oX3NlbnRpbmVsKTsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+IEl0ZXJhYmxlQmFzZS5pdGVyYWJsZVRvRnVsbFN0cmluZyh0aGlzLCAneycsICd9Jyk7Cn0KCmNsYXNzIF9Eb3VibGVMaW5rZWRRdWV1ZUl0ZXJhdG9yPEU+IGltcGxlbWVudHMgSXRlcmF0b3I8RT4gewogIF9Eb3VibGVMaW5rZWRRdWV1ZVNlbnRpbmVsPEU+IF9zZW50aW5lbDsKICBfRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBfbmV4dEVudHJ5OwogIEUgX2N1cnJlbnQ7CgogIF9Eb3VibGVMaW5rZWRRdWV1ZUl0ZXJhdG9yKF9Eb3VibGVMaW5rZWRRdWV1ZVNlbnRpbmVsPEU+IHNlbnRpbmVsKQogICAgICA6IF9zZW50aW5lbCA9IHNlbnRpbmVsLAogICAgICAgIF9uZXh0RW50cnkgPSBzZW50aW5lbC5fbmV4dExpbms7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoaWRlbnRpY2FsKF9uZXh0RW50cnksIF9zZW50aW5lbCkpIHsKICAgICAgX2N1cnJlbnQgPSBudWxsOwogICAgICBfbmV4dEVudHJ5ID0gbnVsbDsKICAgICAgX3NlbnRpbmVsID0gbnVsbDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgX0RvdWJsZUxpbmtlZFF1ZXVlRWxlbWVudDxFPiBlbGVtZW50RW50cnkgPSBfbmV4dEVudHJ5OwogICAgaWYgKCFpZGVudGljYWwoX3NlbnRpbmVsLl9xdWV1ZSwgZWxlbWVudEVudHJ5Ll9xdWV1ZSkpIHsKICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKF9zZW50aW5lbC5fcXVldWUpOwogICAgfQogICAgX2N1cnJlbnQgPSBlbGVtZW50RW50cnkuX2VsZW1lbnQ7CiAgICBfbmV4dEVudHJ5ID0gZWxlbWVudEVudHJ5Ll9uZXh0TGluazsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgRSBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKfQoKLy8vIExpc3QgYmFzZWQgW1F1ZXVlXS4KLy8vCi8vLyBLZWVwcyBhIGN5Y2xpYyBidWZmZXIgb2YgZWxlbWVudHMsIGFuZCBncm93cyB0byBhIGxhcmdlciBidWZmZXIgd2hlbgovLy8gaXQgZmlsbHMgdXAuIFRoaXMgZ3VhcmFudGVlcyBjb25zdGFudCB0aW1lIHBlZWsgYW5kIHJlbW92ZSBvcGVyYXRpb25zLCBhbmQKLy8vIGFtb3J0aXplZCBjb25zdGFudCB0aW1lIGFkZCBvcGVyYXRpb25zLgovLy8KLy8vIFRoZSBzdHJ1Y3R1cmUgaXMgZWZmaWNpZW50IGZvciBhbnkgcXVldWUgb3Igc3RhY2sgdXNhZ2UuCmNsYXNzIExpc3RRdWV1ZTxFPiBleHRlbmRzIExpc3RJdGVyYWJsZTxFPiBpbXBsZW1lbnRzIFF1ZXVlPEU+IHsKICBzdGF0aWMgY29uc3QgaW50IF9JTklUSUFMX0NBUEFDSVRZID0gODsKICBMaXN0PEU+IF90YWJsZTsKICBpbnQgX2hlYWQ7CiAgaW50IF90YWlsOwogIGludCBfbW9kaWZpY2F0aW9uQ291bnQgPSAwOwoKICAvLy8gQ3JlYXRlIGFuIGVtcHR5IHF1ZXVlLgogIC8vLwogIC8vLyBJZiBbaW5pdGlhbENhcGFjaXR5XSBpcyBnaXZlbiwgcHJlcGFyZSB0aGUgcXVldWUgZm9yIGF0IGxlYXN0IHRoYXQgbWFueQogIC8vLyBlbGVtZW50cy4KICBMaXN0UXVldWUoW2ludCBpbml0aWFsQ2FwYWNpdHldKQogICAgICA6IF9oZWFkID0gMCwKICAgICAgICBfdGFpbCA9IDAgewogICAgaWYgKGluaXRpYWxDYXBhY2l0eSA9PSBudWxsIHx8IGluaXRpYWxDYXBhY2l0eSA8IF9JTklUSUFMX0NBUEFDSVRZKSB7CiAgICAgIGluaXRpYWxDYXBhY2l0eSA9IF9JTklUSUFMX0NBUEFDSVRZOwogICAgfSBlbHNlIGlmICghX2lzUG93ZXJPZjIoaW5pdGlhbENhcGFjaXR5KSkgewogICAgICBpbml0aWFsQ2FwYWNpdHkgPSBfbmV4dFBvd2VyT2YyKGluaXRpYWxDYXBhY2l0eSk7CiAgICB9CiAgICBhc3NlcnQoX2lzUG93ZXJPZjIoaW5pdGlhbENhcGFjaXR5KSk7CiAgICBfdGFibGUgPSBMaXN0PEU+KGluaXRpYWxDYXBhY2l0eSk7CiAgfQoKICAvLy8gQ3JlYXRlIGEgYExpc3RRdWV1ZWAgY29udGFpbmluZyBhbGwgW2VsZW1lbnRzXS4KICAvLy8KICAvLy8gVGhlIGVsZW1lbnRzIGFyZSBhZGRlZCB0byB0aGUgcXVldWUsIGFzIGJ5IFthZGRMYXN0XSwgaW4gdGhlIG9yZGVyIGdpdmVuCiAgLy8vIGJ5IGBlbGVtZW50cy5pdGVyYXRvcmAuCiAgLy8vCiAgLy8vIEFsbCB0aGUgW2VsZW1lbnRzXSBzaG91bGQgYmUgaW5zdGFuY2VzIG9mIFtFXS4KICAvLy8gVGhlIGBlbGVtZW50c2AgaXRlcmFibGUgaXRzZWxmIG1heSBoYXZlIGFueSBlbGVtZW50IHR5cGUsIHNvIHRoaXMKICAvLy8gY29uc3RydWN0b3IgY2FuIGJlIHVzZWQgdG8gZG93bi1jYXN0IGEgYFF1ZXVlYCwgZm9yIGV4YW1wbGUgYXM6CiAgLy8vIGBgYGRhcnQKICAvLy8gUXVldWU8U3VwZXJUeXBlPiBzdXBlclF1ZXVlID0gLi4uOwogIC8vLyBRdWV1ZTxTdWJUeXBlPiBzdWJRdWV1ZSA9CiAgLy8vICAgICBuZXcgTGlzdFF1ZXVlPFN1YlR5cGU+LmZyb20oc3VwZXJRdWV1ZS53aGVyZVR5cGU8U3ViVHlwZT4oKSk7CiAgLy8vIGBgYAogIGZhY3RvcnkgTGlzdFF1ZXVlLmZyb20oSXRlcmFibGUgZWxlbWVudHMpIHsKICAgIGlmIChlbGVtZW50cyBpcyBMaXN0KSB7CiAgICAgIGludCBsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7CiAgICAgIExpc3RRdWV1ZTxFPiBxdWV1ZSA9IExpc3RRdWV1ZTxFPihsZW5ndGggKyAxKTsKICAgICAgYXNzZXJ0KHF1ZXVlLl90YWJsZS5sZW5ndGggPiBsZW5ndGgpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgcXVldWUuX3RhYmxlW2ldID0gZWxlbWVudHNbaV07CiAgICAgIH0KICAgICAgcXVldWUuX3RhaWwgPSBsZW5ndGg7CiAgICAgIHJldHVybiBxdWV1ZTsKICAgIH0gZWxzZSB7CiAgICAgIGludCBjYXBhY2l0eSA9IF9JTklUSUFMX0NBUEFDSVRZOwogICAgICBpZiAoZWxlbWVudHMgaXMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGUpIHsKICAgICAgICBjYXBhY2l0eSA9IGVsZW1lbnRzLmxlbmd0aDsKICAgICAgfQogICAgICBMaXN0UXVldWU8RT4gcmVzdWx0ID0gTGlzdFF1ZXVlPEU+KGNhcGFjaXR5KTsKICAgICAgZm9yIChmaW5hbCBlbGVtZW50IGluIGVsZW1lbnRzKSB7CiAgICAgICAgcmVzdWx0LmFkZExhc3QoZWxlbWVudCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICB9CgogIC8vLyBDcmVhdGUgYSBgTGlzdFF1ZXVlYCBmcm9tIFtlbGVtZW50c10uCiAgLy8vCiAgLy8vIFRoZSBlbGVtZW50cyBhcmUgYWRkZWQgdG8gdGhlIHF1ZXVlLCBhcyBieSBbYWRkTGFzdF0sIGluIHRoZSBvcmRlciBnaXZlbgogIC8vLyBieSBgZWxlbWVudHMuaXRlcmF0b3JgLgogIGZhY3RvcnkgTGlzdFF1ZXVlLm9mKEl0ZXJhYmxlPEU+IGVsZW1lbnRzKSA9PgogICAgICBMaXN0UXVldWU8RT4oKS4uYWRkQWxsKGVsZW1lbnRzKTsKCiAgLy8gSXRlcmFibGUgaW50ZXJmYWNlLgoKICBRdWV1ZTxSPiBjYXN0PFI+KCkgPT4gUXVldWUuY2FzdEZyb208RSwgUj4odGhpcyk7CiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yID0+IF9MaXN0UXVldWVJdGVyYXRvcjxFPih0aGlzKTsKCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihFIGVsZW1lbnQpKSB7CiAgICBpbnQgbW9kaWZpY2F0aW9uQ291bnQgPSBfbW9kaWZpY2F0aW9uQ291bnQ7CiAgICBmb3IgKGludCBpID0gX2hlYWQ7IGkgIT0gX3RhaWw7IGkgPSAoaSArIDEpICYgKF90YWJsZS5sZW5ndGggLSAxKSkgewogICAgICBmKF90YWJsZVtpXSk7CiAgICAgIF9jaGVja01vZGlmaWNhdGlvbihtb2RpZmljYXRpb25Db3VudCk7CiAgICB9CiAgfQoKICBib29sIGdldCBpc0VtcHR5ID0+IF9oZWFkID09IF90YWlsOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiAoX3RhaWwgLSBfaGVhZCkgJiAoX3RhYmxlLmxlbmd0aCAtIDEpOwoKICBFIGdldCBmaXJzdCB7CiAgICBpZiAoX2hlYWQgPT0gX3RhaWwpIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgcmV0dXJuIF90YWJsZVtfaGVhZF07CiAgfQoKICBFIGdldCBsYXN0IHsKICAgIGlmIChfaGVhZCA9PSBfdGFpbCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICByZXR1cm4gX3RhYmxlWyhfdGFpbCAtIDEpICYgKF90YWJsZS5sZW5ndGggLSAxKV07CiAgfQoKICBFIGdldCBzaW5nbGUgewogICAgaWYgKF9oZWFkID09IF90YWlsKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIGlmIChsZW5ndGggPiAxKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICByZXR1cm4gX3RhYmxlW19oZWFkXTsKICB9CgogIEUgZWxlbWVudEF0KGludCBpbmRleCkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkSW5kZXgoaW5kZXgsIHRoaXMpOwogICAgcmV0dXJuIF90YWJsZVsoX2hlYWQgKyBpbmRleCkgJiAoX3RhYmxlLmxlbmd0aCAtIDEpXTsKICB9CgogIExpc3Q8RT4gdG9MaXN0KHtib29sIGdyb3dhYmxlID0gdHJ1ZX0pIHsKICAgIExpc3Q8RT4gbGlzdDsKICAgIGlmIChncm93YWJsZSkgewogICAgICBsaXN0ID0gPEU+W10uLmxlbmd0aCA9IGxlbmd0aDsKICAgIH0gZWxzZSB7CiAgICAgIGxpc3QgPSBMaXN0PEU+KGxlbmd0aCk7CiAgICB9CiAgICBfd3JpdGVUb0xpc3QobGlzdCk7CiAgICByZXR1cm4gbGlzdDsKICB9CgogIC8vIENvbGxlY3Rpb24gaW50ZXJmYWNlLgoKICB2b2lkIGFkZChFIHZhbHVlKSB7CiAgICBfYWRkKHZhbHVlKTsKICB9CgogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IGVsZW1lbnRzKSB7CiAgICBpZiAoZWxlbWVudHMgaXMgTGlzdDxFPikgewogICAgICBMaXN0PEU+IGxpc3QgPSBlbGVtZW50czsKICAgICAgaW50IGFkZENvdW50ID0gbGlzdC5sZW5ndGg7CiAgICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgICAgaWYgKGxlbmd0aCArIGFkZENvdW50ID49IF90YWJsZS5sZW5ndGgpIHsKICAgICAgICBfcHJlR3JvdyhsZW5ndGggKyBhZGRDb3VudCk7CiAgICAgICAgLy8gQWZ0ZXIgcHJlR3JvdywgYWxsIGVsZW1lbnRzIGFyZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpc3QuCiAgICAgICAgX3RhYmxlLnNldFJhbmdlKGxlbmd0aCwgbGVuZ3RoICsgYWRkQ291bnQsIGxpc3QsIDApOwogICAgICAgIF90YWlsICs9IGFkZENvdW50OwogICAgICB9IGVsc2UgewogICAgICAgIC8vIEFkZGluZyBhZGRDb3VudCBlbGVtZW50cyB3b24ndCByZWFjaCBfaGVhZC4KICAgICAgICBpbnQgZW5kU3BhY2UgPSBfdGFibGUubGVuZ3RoIC0gX3RhaWw7CiAgICAgICAgaWYgKGFkZENvdW50IDwgZW5kU3BhY2UpIHsKICAgICAgICAgIF90YWJsZS5zZXRSYW5nZShfdGFpbCwgX3RhaWwgKyBhZGRDb3VudCwgbGlzdCwgMCk7CiAgICAgICAgICBfdGFpbCArPSBhZGRDb3VudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaW50IHByZVNwYWNlID0gYWRkQ291bnQgLSBlbmRTcGFjZTsKICAgICAgICAgIF90YWJsZS5zZXRSYW5nZShfdGFpbCwgX3RhaWwgKyBlbmRTcGFjZSwgbGlzdCwgMCk7CiAgICAgICAgICBfdGFibGUuc2V0UmFuZ2UoMCwgcHJlU3BhY2UsIGxpc3QsIGVuZFNwYWNlKTsKICAgICAgICAgIF90YWlsID0gcHJlU3BhY2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIF9tb2RpZmljYXRpb25Db3VudCsrOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChFIGVsZW1lbnQgaW4gZWxlbWVudHMpIF9hZGQoZWxlbWVudCk7CiAgICB9CiAgfQoKICBib29sIHJlbW92ZShPYmplY3QgdmFsdWUpIHsKICAgIGZvciAoaW50IGkgPSBfaGVhZDsgaSAhPSBfdGFpbDsgaSA9IChpICsgMSkgJiAoX3RhYmxlLmxlbmd0aCAtIDEpKSB7CiAgICAgIEUgZWxlbWVudCA9IF90YWJsZVtpXTsKICAgICAgaWYgKGVsZW1lbnQgPT0gdmFsdWUpIHsKICAgICAgICBfcmVtb3ZlKGkpOwogICAgICAgIF9tb2RpZmljYXRpb25Db3VudCsrOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB2b2lkIF9maWx0ZXJXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwgYm9vbCByZW1vdmVNYXRjaGluZykgewogICAgaW50IG1vZGlmaWNhdGlvbkNvdW50ID0gX21vZGlmaWNhdGlvbkNvdW50OwogICAgaW50IGkgPSBfaGVhZDsKICAgIHdoaWxlIChpICE9IF90YWlsKSB7CiAgICAgIEUgZWxlbWVudCA9IF90YWJsZVtpXTsKICAgICAgYm9vbCByZW1vdmUgPSBpZGVudGljYWwocmVtb3ZlTWF0Y2hpbmcsIHRlc3QoZWxlbWVudCkpOwogICAgICBfY2hlY2tNb2RpZmljYXRpb24obW9kaWZpY2F0aW9uQ291bnQpOwogICAgICBpZiAocmVtb3ZlKSB7CiAgICAgICAgaSA9IF9yZW1vdmUoaSk7CiAgICAgICAgbW9kaWZpY2F0aW9uQ291bnQgPSArK19tb2RpZmljYXRpb25Db3VudDsKICAgICAgfSBlbHNlIHsKICAgICAgICBpID0gKGkgKyAxKSAmIChfdGFibGUubGVuZ3RoIC0gMSk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBSZW1vdmUgYWxsIGVsZW1lbnRzIG1hdGNoZWQgYnkgW3Rlc3RdLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBpcyBpbmVmZmljaWVudCBzaW5jZSBpdCB3b3JrcyBieSByZXBlYXRlZGx5IHJlbW92aW5nIHNpbmdsZQogIC8vLyBlbGVtZW50cywgZWFjaCBvZiB3aGljaCBjYW4gdGFrZSBsaW5lYXIgdGltZS4KICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBfZmlsdGVyV2hlcmUodGVzdCwgdHJ1ZSk7CiAgfQoKICAvLy8gUmVtb3ZlIGFsbCBlbGVtZW50cyBub3QgbWF0Y2hlZCBieSBbdGVzdF0uCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIGlzIGluZWZmaWNpZW50IHNpbmNlIGl0IHdvcmtzIGJ5IHJlcGVhdGVkbHkgcmVtb3Zpbmcgc2luZ2xlCiAgLy8vIGVsZW1lbnRzLCBlYWNoIG9mIHdoaWNoIGNhbiB0YWtlIGxpbmVhciB0aW1lLgogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIF9maWx0ZXJXaGVyZSh0ZXN0LCBmYWxzZSk7CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgaWYgKF9oZWFkICE9IF90YWlsKSB7CiAgICAgIGZvciAoaW50IGkgPSBfaGVhZDsgaSAhPSBfdGFpbDsgaSA9IChpICsgMSkgJiAoX3RhYmxlLmxlbmd0aCAtIDEpKSB7CiAgICAgICAgX3RhYmxlW2ldID0gbnVsbDsKICAgICAgfQogICAgICBfaGVhZCA9IF90YWlsID0gMDsKICAgICAgX21vZGlmaWNhdGlvbkNvdW50Kys7CiAgICB9CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBJdGVyYWJsZUJhc2UuaXRlcmFibGVUb0Z1bGxTdHJpbmcodGhpcywgInsiLCAifSIpOwoKICAvLyBRdWV1ZSBpbnRlcmZhY2UuCgogIHZvaWQgYWRkTGFzdChFIHZhbHVlKSB7CiAgICBfYWRkKHZhbHVlKTsKICB9CgogIHZvaWQgYWRkRmlyc3QoRSB2YWx1ZSkgewogICAgX2hlYWQgPSAoX2hlYWQgLSAxKSAmIChfdGFibGUubGVuZ3RoIC0gMSk7CiAgICBfdGFibGVbX2hlYWRdID0gdmFsdWU7CiAgICBpZiAoX2hlYWQgPT0gX3RhaWwpIF9ncm93KCk7CiAgICBfbW9kaWZpY2F0aW9uQ291bnQrKzsKICB9CgogIEUgcmVtb3ZlRmlyc3QoKSB7CiAgICBpZiAoX2hlYWQgPT0gX3RhaWwpIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgX21vZGlmaWNhdGlvbkNvdW50Kys7CiAgICBFIHJlc3VsdCA9IF90YWJsZVtfaGVhZF07CiAgICBfdGFibGVbX2hlYWRdID0gbnVsbDsKICAgIF9oZWFkID0gKF9oZWFkICsgMSkgJiAoX3RhYmxlLmxlbmd0aCAtIDEpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEUgcmVtb3ZlTGFzdCgpIHsKICAgIGlmIChfaGVhZCA9PSBfdGFpbCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICBfbW9kaWZpY2F0aW9uQ291bnQrKzsKICAgIF90YWlsID0gKF90YWlsIC0gMSkgJiAoX3RhYmxlLmxlbmd0aCAtIDEpOwogICAgRSByZXN1bHQgPSBfdGFibGVbX3RhaWxdOwogICAgX3RhYmxlW190YWlsXSA9IG51bGw7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8gSW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucy4KCiAgLy8vIFdoZXRoZXIgW251bWJlcl0gaXMgYSBwb3dlciBvZiB0d28uCiAgLy8vCiAgLy8vIE9ubHkgd29ya3MgZm9yIHBvc2l0aXZlIG51bWJlcnMuCiAgc3RhdGljIGJvb2wgX2lzUG93ZXJPZjIoaW50IG51bWJlcikgPT4gKG51bWJlciAmIChudW1iZXIgLSAxKSkgPT0gMDsKCiAgLy8vIFJvdW5kcyBbbnVtYmVyXSB1cCB0byB0aGUgbmVhcmVzdCBwb3dlciBvZiAyLgogIC8vLwogIC8vLyBJZiBbbnVtYmVyXSBpcyBhIHBvd2VyIG9mIDIgYWxyZWFkeSwgaXQgaXMgcmV0dXJuZWQuCiAgLy8vCiAgLy8vIE9ubHkgd29ya3MgZm9yIHBvc2l0aXZlIG51bWJlcnMuCiAgc3RhdGljIGludCBfbmV4dFBvd2VyT2YyKGludCBudW1iZXIpIHsKICAgIGFzc2VydChudW1iZXIgPiAwKTsKICAgIG51bWJlciA9IChudW1iZXIgPDwgMSkgLSAxOwogICAgZm9yICg7OykgewogICAgICBpbnQgbmV4dE51bWJlciA9IG51bWJlciAmIChudW1iZXIgLSAxKTsKICAgICAgaWYgKG5leHROdW1iZXIgPT0gMCkgcmV0dXJuIG51bWJlcjsKICAgICAgbnVtYmVyID0gbmV4dE51bWJlcjsKICAgIH0KICB9CgogIC8vLyBDaGVjayBpZiB0aGUgcXVldWUgaGFzIGJlZW4gbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbi4KICB2b2lkIF9jaGVja01vZGlmaWNhdGlvbihpbnQgZXhwZWN0ZWRNb2RpZmljYXRpb25Db3VudCkgewogICAgaWYgKGV4cGVjdGVkTW9kaWZpY2F0aW9uQ291bnQgIT0gX21vZGlmaWNhdGlvbkNvdW50KSB7CiAgICAgIHRocm93IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgIH0KICB9CgogIC8vLyBBZGRzIGVsZW1lbnQgYXQgZW5kIG9mIHF1ZXVlLiBVc2VkIGJ5IGJvdGggW2FkZF0gYW5kIFthZGRBbGxdLgogIHZvaWQgX2FkZChFIGVsZW1lbnQpIHsKICAgIF90YWJsZVtfdGFpbF0gPSBlbGVtZW50OwogICAgX3RhaWwgPSAoX3RhaWwgKyAxKSAmIChfdGFibGUubGVuZ3RoIC0gMSk7CiAgICBpZiAoX2hlYWQgPT0gX3RhaWwpIF9ncm93KCk7CiAgICBfbW9kaWZpY2F0aW9uQ291bnQrKzsKICB9CgogIC8vLyBSZW1vdmVzIHRoZSBlbGVtZW50IGF0IFtvZmZzZXRdIGludG8gW190YWJsZV0uCiAgLy8vCiAgLy8vIFJlbW92YWwgaXMgcGVyZm9ybWVkIGJ5IGxpbmVhcmx5IG1vdmluZyBlbGVtZW50cyBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyCiAgLy8vIFtvZmZzZXRdIGJ5IG9uZSBwb3NpdGlvbi4KICAvLy8KICAvLy8gUmV0dXJucyB0aGUgbmV3IG9mZnNldCBvZiB0aGUgZm9sbG93aW5nIGVsZW1lbnQuIFRoaXMgbWF5IGJlIHRoZSBzYW1lCiAgLy8vIG9mZnNldCBvciB0aGUgZm9sbG93aW5nIG9mZnNldCBkZXBlbmRpbmcgb24gaG93IGVsZW1lbnRzIGFyZSBtb3ZlZAogIC8vLyB0byBmaWxsIHRoZSBob2xlLgogIGludCBfcmVtb3ZlKGludCBvZmZzZXQpIHsKICAgIGludCBtYXNrID0gX3RhYmxlLmxlbmd0aCAtIDE7CiAgICBpbnQgc3RhcnREaXN0YW5jZSA9IChvZmZzZXQgLSBfaGVhZCkgJiBtYXNrOwogICAgaW50IGVuZERpc3RhbmNlID0gKF90YWlsIC0gb2Zmc2V0KSAmIG1hc2s7CiAgICBpZiAoc3RhcnREaXN0YW5jZSA8IGVuZERpc3RhbmNlKSB7CiAgICAgIC8vIENsb3Nlc3QgdG8gc3RhcnQuCiAgICAgIGludCBpID0gb2Zmc2V0OwogICAgICB3aGlsZSAoaSAhPSBfaGVhZCkgewogICAgICAgIGludCBwcmV2T2Zmc2V0ID0gKGkgLSAxKSAmIG1hc2s7CiAgICAgICAgX3RhYmxlW2ldID0gX3RhYmxlW3ByZXZPZmZzZXRdOwogICAgICAgIGkgPSBwcmV2T2Zmc2V0OwogICAgICB9CiAgICAgIF90YWJsZVtfaGVhZF0gPSBudWxsOwogICAgICBfaGVhZCA9IChfaGVhZCArIDEpICYgbWFzazsKICAgICAgcmV0dXJuIChvZmZzZXQgKyAxKSAmIG1hc2s7CiAgICB9IGVsc2UgewogICAgICBfdGFpbCA9IChfdGFpbCAtIDEpICYgbWFzazsKICAgICAgaW50IGkgPSBvZmZzZXQ7CiAgICAgIHdoaWxlIChpICE9IF90YWlsKSB7CiAgICAgICAgaW50IG5leHRPZmZzZXQgPSAoaSArIDEpICYgbWFzazsKICAgICAgICBfdGFibGVbaV0gPSBfdGFibGVbbmV4dE9mZnNldF07CiAgICAgICAgaSA9IG5leHRPZmZzZXQ7CiAgICAgIH0KICAgICAgX3RhYmxlW190YWlsXSA9IG51bGw7CiAgICAgIHJldHVybiBvZmZzZXQ7CiAgICB9CiAgfQoKICAvLy8gR3JvdyB0aGUgdGFibGUgd2hlbiBmdWxsLgogIHZvaWQgX2dyb3coKSB7CiAgICBMaXN0PEU+IG5ld1RhYmxlID0gTGlzdDxFPihfdGFibGUubGVuZ3RoICogMik7CiAgICBpbnQgc3BsaXQgPSBfdGFibGUubGVuZ3RoIC0gX2hlYWQ7CiAgICBuZXdUYWJsZS5zZXRSYW5nZSgwLCBzcGxpdCwgX3RhYmxlLCBfaGVhZCk7CiAgICBuZXdUYWJsZS5zZXRSYW5nZShzcGxpdCwgc3BsaXQgKyBfaGVhZCwgX3RhYmxlLCAwKTsKICAgIF9oZWFkID0gMDsKICAgIF90YWlsID0gX3RhYmxlLmxlbmd0aDsKICAgIF90YWJsZSA9IG5ld1RhYmxlOwogIH0KCiAgaW50IF93cml0ZVRvTGlzdChMaXN0PEU+IHRhcmdldCkgewogICAgYXNzZXJ0KHRhcmdldC5sZW5ndGggPj0gbGVuZ3RoKTsKICAgIGlmIChfaGVhZCA8PSBfdGFpbCkgewogICAgICBpbnQgbGVuZ3RoID0gX3RhaWwgLSBfaGVhZDsKICAgICAgdGFyZ2V0LnNldFJhbmdlKDAsIGxlbmd0aCwgX3RhYmxlLCBfaGVhZCk7CiAgICAgIHJldHVybiBsZW5ndGg7CiAgICB9IGVsc2UgewogICAgICBpbnQgZmlyc3RQYXJ0U2l6ZSA9IF90YWJsZS5sZW5ndGggLSBfaGVhZDsKICAgICAgdGFyZ2V0LnNldFJhbmdlKDAsIGZpcnN0UGFydFNpemUsIF90YWJsZSwgX2hlYWQpOwogICAgICB0YXJnZXQuc2V0UmFuZ2UoZmlyc3RQYXJ0U2l6ZSwgZmlyc3RQYXJ0U2l6ZSArIF90YWlsLCBfdGFibGUsIDApOwogICAgICByZXR1cm4gX3RhaWwgKyBmaXJzdFBhcnRTaXplOwogICAgfQogIH0KCiAgLy8vIEdyb3dzIHRoZSB0YWJsZSBldmVuIGlmIGl0IGlzIG5vdCBmdWxsLgogIHZvaWQgX3ByZUdyb3coaW50IG5ld0VsZW1lbnRDb3VudCkgewogICAgYXNzZXJ0KG5ld0VsZW1lbnRDb3VudCA+PSBsZW5ndGgpOwoKICAgIC8vIEFkZCBzb21lIGV4dHJhIHJvb20gdG8gZW5zdXJlIHRoYXQgdGhlcmUncyByb29tIGZvciBtb3JlIGVsZW1lbnRzIGFmdGVyCiAgICAvLyBleHBhbnNpb24uCiAgICBuZXdFbGVtZW50Q291bnQgKz0gbmV3RWxlbWVudENvdW50ID4+IDE7CiAgICBpbnQgbmV3Q2FwYWNpdHkgPSBfbmV4dFBvd2VyT2YyKG5ld0VsZW1lbnRDb3VudCk7CiAgICBMaXN0PEU+IG5ld1RhYmxlID0gTGlzdDxFPihuZXdDYXBhY2l0eSk7CiAgICBfdGFpbCA9IF93cml0ZVRvTGlzdChuZXdUYWJsZSk7CiAgICBfdGFibGUgPSBuZXdUYWJsZTsKICAgIF9oZWFkID0gMDsKICB9Cn0KCi8vLyBJdGVyYXRvciBmb3IgYSBbTGlzdFF1ZXVlXS4KLy8vCi8vLyBDb25zaWRlcnMgYW55IGFkZCBvciByZW1vdmUgb3BlcmF0aW9uIGEgY29uY3VycmVudCBtb2RpZmljYXRpb24uCmNsYXNzIF9MaXN0UXVldWVJdGVyYXRvcjxFPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPEU+IHsKICBmaW5hbCBMaXN0UXVldWU8RT4gX3F1ZXVlOwogIGZpbmFsIGludCBfZW5kOwogIGZpbmFsIGludCBfbW9kaWZpY2F0aW9uQ291bnQ7CiAgaW50IF9wb3NpdGlvbjsKICBFIF9jdXJyZW50OwoKICBfTGlzdFF1ZXVlSXRlcmF0b3IoTGlzdFF1ZXVlPEU+IHF1ZXVlKQogICAg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bnRhdGlvbnMsIHRoaXMgbGlicmFyeQovLy8gcHJvdmlkZXMgc3VwcG9ydCBmb3IgaW1wbGVtZW50aW5nIGNvbnZlcnRlcnMgaW4gYSB3YXkgd2hpY2ggbWFrZXMgdGhlbSBlYXN5IHRvCi8vLyBjaGFpbiBhbmQgdG8gdXNlIHdpdGggc3RyZWFtcy4KLy8vCi8vLyBUbyB1c2UgdGhpcyBsaWJyYXJ5IGluIHlvdXIgY29kZToKLy8vCi8vLyAgICAgaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwovLy8KLy8vIFR3byBjb21tb25seSB1c2VkIGNvbnZlcnRlcnMgYXJlIHRoZSB0b3AtbGV2ZWwgaW5zdGFuY2VzIG9mCi8vLyBbSnNvbkNvZGVjXSBhbmQgW1V0ZjhDb2RlY10sIG5hbWVkIFtqc29uXSBhbmQgW3V0ZjhdLCByZXNwZWN0aXZlbHkuCi8vLwovLy8gSlNPTiBpcyBhIHNpbXBsZSB0ZXh0IGZvcm1hdCBmb3IgcmVwcmVzZW50aW5nCi8vLyBzdHJ1Y3R1cmVkIG9iamVjdHMgYW5kIGNvbGxlY3Rpb25zLgovLy8gVGhlIEpTT04gZW5jb2Rlci9kZWNvZGVyIHRyYW5zZm9ybXMgYmV0d2VlbiBzdHJpbmdzIGFuZAovLy8gb2JqZWN0IHN0cnVjdHVyZXMsIHN1Y2ggYXMgbGlzdHMgYW5kIG1hcHMsIHVzaW5nIHRoZSBKU09OIGZvcm1hdC4KLy8vCi8vLyBVVEYtOCBpcyBhIGNvbW1vbiB2YXJpYWJsZS13aWR0aCBlbmNvZGluZyB0aGF0IGNhbiByZXByZXNlbnQKLy8vIGV2ZXJ5IGNoYXJhY3RlciBpbiB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgc2V0LgovLy8gVGhlIFVURi04IGVuY29kZXIvZGVjb2RlciB0cmFuc2Zvcm1zIGJldHdlZW4gU3RyaW5ncyBhbmQgYnl0ZXMuCi8vLwovLy8gQ29udmVydGVycyBhcmUgb2Z0ZW4gdXNlZCB3aXRoIHN0cmVhbXMKLy8vIHRvIHRyYW5zZm9ybSB0aGUgZGF0YSB0aGF0IGNvbWVzIHRocm91Z2ggdGhlIHN0cmVhbQovLy8gYXMgaXQgYmVjb21lcyBhdmFpbGFibGUuCi8vLyBUaGUgZm9sbG93aW5nIGNvZGUgdXNlcyB0d28gY29udmVydGVycy4KLy8vIFRoZSBmaXJzdCBpcyBhIFVURi04IGRlY29kZXIsIHdoaWNoIGNvbnZlcnRzIHRoZSBkYXRhIGZyb20gYnl0ZXMgdG8gVVRGLTgKLy8vIGFzIGl0J3MgcmVhZCBmcm9tIGEgZmlsZSwKLy8vIFRoZSBzZWNvbmQgaXMgYW4gaW5zdGFuY2Ugb2YgW0xpbmVTcGxpdHRlcl0sCi8vLyB3aGljaCBzcGxpdHMgdGhlIGRhdGEgb24gbmV3bGluZSBib3VuZGFyaWVzLgovLy8KLy8vICAgICB2YXIgbGluZU51bWJlciA9IDE7Ci8vLyAgICAgdmFyIHN0cmVhbSA9IEZpbGUoJ3F1b3Rlcy50eHQnKS5vcGVuUmVhZCgpOwovLy8KLy8vICAgICBzdHJlYW0udHJhbnNmb3JtKHV0ZjguZGVjb2RlcikKLy8vICAgICAgICAgICAudHJhbnNmb3JtKGNvbnN0IExpbmVTcGxpdHRlcigpKQovLy8gICAgICAgICAgIC5saXN0ZW4oKGxpbmUpIHsKLy8vICAgICAgICAgICAgIGlmIChzaG93TGluZU51bWJlcnMpIHsKLy8vICAgICAgICAgICAgICAgc3Rkb3V0LndyaXRlKCcke2xpbmVOdW1iZXIrK30gJyk7Ci8vLyAgICAgICAgICAgICB9Ci8vLyAgICAgICAgICAgICBzdGRvdXQud3JpdGVsbihsaW5lKTsKLy8vICAgICAgICAgICB9KTsKLy8vCi8vLyBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBbQ29kZWNdIGFuZCBbQ29udmVydGVyXSBjbGFzc2VzCi8vLyBmb3IgaW5mb3JtYXRpb24gYWJvdXQgY3JlYXRpbmcgeW91ciBvd24gY29udmVydGVycy4KLy8vCi8vLyB7QGNhdGVnb3J5IENvcmV9CmxpYnJhcnkgZGFydC5jb252ZXJ0OwoKaW1wb3J0ICdkYXJ0OmFzeW5jJzsKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwppbXBvcnQgJ2RhcnQ6X2ludGVybmFsJyBzaG93IENhc3RDb252ZXJ0ZXIsIHBhcnNlSGV4Qnl0ZTsKCnBhcnQgJ2FzY2lpLmRhcnQnOwpwYXJ0ICdiYXNlNjQuZGFydCc7CnBhcnQgJ2J5dGVfY29udmVyc2lvbi5kYXJ0JzsKcGFydCAnY2h1bmtlZF9jb252ZXJzaW9uLmRhcnQnOwpwYXJ0ICdjb2RlYy5kYXJ0JzsKcGFydCAnY29udmVydGVyLmRhcnQnOwpwYXJ0ICdlbmNvZGluZy5kYXJ0JzsKcGFydCAnaHRtbF9lc2NhcGUuZGFydCc7CnBhcnQgJ2pzb24uZGFydCc7CnBhcnQgJ2xhdGluMS5kYXJ0JzsKcGFydCAnbGluZV9zcGxpdHRlci5kYXJ0JzsKcGFydCAnc3RyaW5nX2NvbnZlcnNpb24uZGFydCc7CnBhcnQgJ3V0Zi5kYXJ0JzsKSgBOTjwBBFEeBExTIwQmBB8EQEgEMig8RgRBMkQEKzgdLE4eMTEEHDQEJy8fJzQSJhIEQjgEFRYBFRo6ARMUHSATFxYZEhQbHxEBDGRhcnQ6Y29udmVydDJvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL2NvbnZlcnRfcGF0Y2guZGFydMAA57IvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIE5vdGU6IHRoZSBWTSBjb25jYXRlbmF0ZXMgYWxsIHBhdGNoIGZpbGVzIGludG8gYSBzaW5nbGUgcGF0Y2ggZmlsZS4gVGhpcwovLy8gZmlsZSBpcyB0aGUgZmlyc3QgcGF0Y2ggaW4gImRhcnQ6Y29udmVydCIgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBpbXBvcnRzCi8vLyB1c2VkIGJ5IHBhdGNoZXMgb2YgdGhhdCBsaWJyYXJ5LiBXZSBwbGFuIHRvIGNoYW5nZSB0aGlzIHdoZW4gd2UgaGF2ZSBhCi8vLyBzaGFyZWQgZnJvbnQgZW5kIGFuZCBzaW1wbHkgdXNlIHBhcnRzLgoKaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIgc2hvdyBQT1dFUlNfT0ZfVEVOLCBwYXRjaCwgQ2xhc3NJRDsKCmltcG9ydCAiZGFydDp0eXBlZF9kYXRhIiBzaG93IFVpbnQ4TGlzdCwgVWludDE2TGlzdDsKCi8vLyBUaGlzIHBhdGNoIGxpYnJhcnkgaGFzIG5vIGFkZGl0aW9uYWwgcGFydHMuCgovLyBKU09OIGNvbnZlcnNpb24uCgpAcGF0Y2gKX3BhcnNlSnNvbihTdHJpbmcgc291cmNlLCByZXZpdmVyKGtleSwgdmFsdWUpKSB7CiAgX0J1aWxkSnNvbkxpc3RlbmVyIGxpc3RlbmVyOwogIGlmIChyZXZpdmVyID09IG51bGwpIHsKICAgIGxpc3RlbmVyID0gbmV3IF9CdWlsZEpzb25MaXN0ZW5lcigpOwogIH0gZWxzZSB7CiAgICBsaXN0ZW5lciA9IG5ldyBfUmV2aXZlckpzb25MaXN0ZW5lcihyZXZpdmVyKTsKICB9CiAgdmFyIHBhcnNlciA9IG5ldyBfSnNvblN0cmluZ1BhcnNlcihsaXN0ZW5lcik7CiAgcGFyc2VyLmNodW5rID0gc291cmNlOwogIHBhcnNlci5jaHVua0VuZCA9IHNvdXJjZS5sZW5ndGg7CiAgcGFyc2VyLnBhcnNlKDApOwogIHBhcnNlci5jbG9zZSgpOwogIHJldHVybiBsaXN0ZW5lci5yZXN1bHQ7Cn0KCkBwYXRjaApjbGFzcyBVdGY4RGVjb2RlciB7CiAgQHBhdGNoCiAgQ29udmVydGVyPExpc3Q8aW50PiwgVD4gZnVzZTxUPihDb252ZXJ0ZXI8U3RyaW5nLCBUPiBuZXh0KSB7CiAgICBpZiAobmV4dCBpcyBKc29uRGVjb2RlcikgewogICAgICByZXR1cm4gbmV3IF9Kc29uVXRmOERlY29kZXIoCiAgICAgICAgICAgICAgKG5leHQgYXMgSnNvbkRlY29kZXIpLl9yZXZpdmVyLCB0aGlzLl9hbGxvd01hbGZvcm1lZCkKICAgICAgICAgIGFzIGR5bmFtaWMvKj1Db252ZXJ0ZXI8TGlzdDxpbnQ+LCBUPiovOwogICAgfQogICAgLy8gVE9ETyhscm4pOiBSZWNvZ25pemUgYSBmdXNlZCBkZWNvZGVyIHdoZXJlIHRoZSBuZXh0IHN0ZXAgaXMgSnNvbkRlY29kZXIuCiAgICByZXR1cm4gc3VwZXIuZnVzZTxUPihuZXh0KTsKICB9CgogIC8vIEFsbG93IGludGVyY2VwdGluZyBvZiBVVEYtOCBkZWNvZGluZyB3aGVuIGJ1aWx0LWluIGxpc3RzIGFyZSBwYXNzZWQuCiAgQHBhdGNoCiAgc3RhdGljIFN0cmluZyBfY29udmVydEludGVyY2VwdGVkKAogICAgICBib29sIGFsbG93TWFsZm9ybWVkLCBMaXN0PGludD4gY29kZVVuaXRzLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIHJldHVybiBudWxsOyAvLyBUaGlzIGNhbGwgd2FzIG5vdCBpbnRlcmNlcHRlZC4KICB9Cn0KCmNsYXNzIF9Kc29uVXRmOERlY29kZXIgZXh0ZW5kcyBDb252ZXJ0ZXI8TGlzdDxpbnQ+LCBPYmplY3Q+IHsKICBmaW5hbCBGdW5jdGlvbihPYmplY3Qga2V5LCBPYmplY3QgdmFsdWUpIF9yZXZpdmVyOwogIGZpbmFsIGJvb2wgX2FsbG93TWFsZm9ybWVkOwoKICBfSnNvblV0ZjhEZWNvZGVyKHRoaXMuX3Jldml2ZXIsIHRoaXMuX2FsbG93TWFsZm9ybWVkKTsKCiAgT2JqZWN0IGNvbnZlcnQoTGlzdDxpbnQ+IGlucHV0KSB7CiAgICB2YXIgcGFyc2VyID0gX0pzb25VdGY4RGVjb2RlclNpbmsuX2NyZWF0ZVBhcnNlcihfcmV2aXZlciwgX2FsbG93TWFsZm9ybWVkKTsKICAgIHBhcnNlci5jaHVuayA9IGlucHV0OwogICAgcGFyc2VyLmNodW5rRW5kID0gaW5wdXQubGVuZ3RoOwogICAgcGFyc2VyLnBhcnNlKDApOwogICAgcGFyc2VyLmNsb3NlKCk7CiAgICByZXR1cm4gcGFyc2VyLnJlc3VsdDsKICB9CgogIEJ5dGVDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8T2JqZWN0PiBzaW5rKSB7CiAgICByZXR1cm4gbmV3IF9Kc29uVXRmOERlY29kZXJTaW5rKF9yZXZpdmVyLCBzaW5rLCBfYWxsb3dNYWxmb3JtZWQpOwogIH0KfQoKLy8vLyBJbXBsZW1lbnRhdGlvbiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKLy8gU2ltcGxlIEFQSSBmb3IgSlNPTiBwYXJzaW5nLgoKLyoqCiAqIExpc3RlbmVyIGZvciBwYXJzaW5nIGV2ZW50cyBmcm9tIFtfQ2h1bmtlZEpzb25QYXJzZXJdLgogKi8KYWJzdHJhY3QgY2xhc3MgX0pzb25MaXN0ZW5lciB7CiAgdm9pZCBoYW5kbGVTdHJpbmcoU3RyaW5nIHZhbHVlKSB7fQogIHZvaWQgaGFuZGxlTnVtYmVyKG51bSB2YWx1ZSkge30KICB2b2lkIGhhbmRsZUJvb2woYm9vbCB2YWx1ZSkge30KICB2b2lkIGhhbmRsZU51bGwoKSB7fQogIHZvaWQgYmVnaW5PYmplY3QoKSB7fQogIHZvaWQgcHJvcGVydHlOYW1lKCkge30KICB2b2lkIHByb3BlcnR5VmFsdWUoKSB7fQogIHZvaWQgZW5kT2JqZWN0KCkge30KICB2b2lkIGJlZ2luQXJyYXkoKSB7fQogIHZvaWQgYXJyYXlFbGVtZW50KCkge30KICB2b2lkIGVuZEFycmF5KCkge30KCiAgLyoqCiAgICogUmVhZCBvdXQgdGhlIGZpbmFsIHJlc3VsdCBvZiBwYXJzaW5nIGEgSlNPTiBzdHJpbmcuCiAgICoKICAgKiBNdXN0IG9ubHkgYmUgY2FsbGVkIHdoZW4gdGhlIGVudGlyZSBpbnB1dCBoYXMgYmVlbiBwYXJzZWQuCiAgICovCiAgZ2V0IHJlc3VsdDsKfQoKLyoqCiAqIEEgW19Kc29uTGlzdGVuZXJdIHRoYXQgYnVpbGRzIGRhdGEgb2JqZWN0cyBmcm9tIHRoZSBwYXJzZXIgZXZlbnRzLgogKgogKiBUaGlzIGlzIGEgc2ltcGxlIHN0YWNrLWJhc2VkIG9iamVjdCBidWlsZGVyLiBJdCBrZWVwcyB0aGUgbW9zdCByZWNlbnRseQogKiBzZWVuIHZhbHVlIGluIGEgdmFyaWFibGUsIGFuZCB1c2VzIGl0IGRlcGVuZGluZyBvbiB0aGUgZm9sbG93aW5nIGV2ZW50LgogKi8KY2xhc3MgX0J1aWxkSnNvbkxpc3RlbmVyIGV4dGVuZHMgX0pzb25MaXN0ZW5lciB7CiAgLyoqCiAgICogU3RhY2sgdXNlZCB0byBoYW5kbGUgbmVzdGVkIGNvbnRhaW5lcnMuCiAgICoKICAgKiBUaGUgY3VycmVudCBjb250YWluZXIgaXMgcHVzaGVkIG9uIHRoZSBzdGFjayB3aGVuIGEgbmV3IG9uZSBpcwogICAqIHN0YXJ0ZWQuIElmIHRoZSBjb250YWluZXIgaXMgYSBbTWFwXSwgdGhlcmUgaXMgYWxzbyBhIGN1cnJlbnQgW2tleV0KICAgKiB3aGljaCBpcyBhbHNvIHN0b3JlZCBvbiB0aGUgc3RhY2suCiAgICovCiAgTGlzdCBzdGFjayA9IFtdOwogIC8qKiBUaGUgY3VycmVudCBbTWFwXSBvciBbTGlzdF0gYmVpbmcgYnVpbHQuICovCiAgdmFyIGN1cnJlbnRDb250YWluZXI7CiAgLyoqIFRoZSBtb3N0IHJlY2VudGx5IHJlYWQgcHJvcGVydHkga2V5LiAqLwogIFN0cmluZyBrZXk7CiAgLyoqIFRoZSBtb3N0IHJlY2VudGx5IHJlYWQgdmFsdWUuICovCiAgdmFyIHZhbHVlOwoKICAvKiogUHVzaGVzIHRoZSBjdXJyZW50bHkgYWN0aXZlIGNvbnRhaW5lciAoYW5kIGtleSwgaWYgYSBbTWFwXSkuICovCiAgdm9pZCBwdXNoQ29udGFpbmVyKCkgewogICAgaWYgKGN1cnJlbnRDb250YWluZXIgaXMgTWFwKSBzdGFjay5hZGQoa2V5KTsKICAgIHN0YWNrLmFkZChjdXJyZW50Q29udGFpbmVyKTsKICB9CgogIC8qKiBQb3BzIHRoZSB0b3AgY29udGFpbmVyIGZyb20gdGhlIFtzdGFja10sIGluY2x1ZGluZyBhIGtleSBpZiBhcHBsaWNhYmxlLiAqLwogIHZvaWQgcG9wQ29udGFpbmVyKCkgewogICAgdmFsdWUgPSBjdXJyZW50Q29udGFpbmVyOwogICAgY3VycmVudENvbnRhaW5lciA9IHN0YWNrLnJlbW92ZUxhc3QoKTsKICAgIGlmIChjdXJyZW50Q29udGFpbmVyIGlzIE1hcCkga2V5ID0gc3RhY2sucmVtb3ZlTGFzdCgpOwogIH0KCiAgdm9pZCBoYW5kbGVTdHJpbmcoU3RyaW5nIHZhbHVlKSB7CiAgICB0aGlzLnZhbHVlID0gdmFsdWU7CiAgfQoKICB2b2lkIGhhbmRsZU51bWJlcihudW0gdmFsdWUpIHsKICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKICB9CgogIHZvaWQgaGFuZGxlQm9vbChib29sIHZhbHVlKSB7CiAgICB0aGlzLnZhbHVlID0gdmFsdWU7CiAgfQoKICB2b2lkIGhhbmRsZU51bGwoKSB7CiAgICB0aGlzLnZhbHVlID0gbnVsbDsKICB9CgogIHZvaWQgYmVnaW5PYmplY3QoKSB7CiAgICBwdXNoQ29udGFpbmVyKCk7CiAgICBjdXJyZW50Q29udGFpbmVyID0gPFN0cmluZywgZHluYW1pYz57fTsKICB9CgogIHZvaWQgcHJvcGVydHlOYW1lKCkgewogICAga2V5ID0gdmFsdWU7CiAgICB2YWx1ZSA9IG51bGw7CiAgfQoKICB2b2lkIHByb3BlcnR5VmFsdWUoKSB7CiAgICBNYXAgbWFwID0gY3VycmVudENvbnRhaW5lcjsKICAgIG1hcFtrZXldID0gdmFsdWU7CiAgICBrZXkgPSB2YWx1ZSA9IG51bGw7CiAgfQoKICB2b2lkIGVuZE9iamVjdCgpIHsKICAgIHBvcENvbnRhaW5lcigpOwogIH0KCiAgdm9pZCBiZWdpbkFycmF5KCkgewogICAgcHVzaENvbnRhaW5lcigpOwogICAgY3VycmVudENvbnRhaW5lciA9IFtdOwogIH0KCiAgdm9pZCBhcnJheUVsZW1lbnQoKSB7CiAgICBjdXJyZW50Q29udGFpbmVyLmFkZCh2YWx1ZSk7CiAgICB2YWx1ZSA9IG51bGw7CiAgfQoKICB2b2lkIGVuZEFycmF5KCkgewogICAgcG9wQ29udGFpbmVyKCk7CiAgfQoKICAvKiogUmVhZCBvdXQgdGhlIGZpbmFsIHJlc3VsdCBvZiBwYXJzaW5nIGEgSlNPTiBzdHJpbmcuICovCiAgZ2V0IHJlc3VsdCB7CiAgICBhc3NlcnQoY3VycmVudENvbnRhaW5lciA9PSBudWxsKTsKICAgIHJldHVybiB2YWx1ZTsKICB9Cn0KCmNsYXNzIF9SZXZpdmVySnNvbkxpc3RlbmVyIGV4dGVuZHMgX0J1aWxkSnNvbkxpc3RlbmVyIHsKICBmaW5hbCBGdW5jdGlvbihPYmplY3Qga2V5LCBPYmplY3QgdmFsdWUpIHJldml2ZXI7CiAgX1Jldml2ZXJKc29uTGlzdGVuZXIodGhpcy5yZXZpdmVyKTsKCiAgdm9pZCBhcnJheUVsZW1lbnQoKSB7CiAgICBMaXN0IGxpc3QgPSBjdXJyZW50Q29udGFpbmVyOwogICAgdmFsdWUgPSByZXZpdmVyKGxpc3QubGVuZ3RoLCB2YWx1ZSk7CiAgICBzdXBlci5hcnJheUVsZW1lbnQoKTsKICB9CgogIHZvaWQgcHJvcGVydHlWYWx1ZSgpIHsKICAgIHZhbHVlID0gcmV2aXZlcihrZXksIHZhbHVlKTsKICAgIHN1cGVyLnByb3BlcnR5VmFsdWUoKTsKICB9CgogIGdldCByZXN1bHQgewogICAgcmV0dXJuIHJldml2ZXIobnVsbCwgdmFsdWUpOwogIH0KfQoKLyoqCiAqIEJ1ZmZlciBob2xkaW5nIHBhcnRzIG9mIGEgbnVtZXJhbC4KICoKICogVGhlIGJ1ZmZlciBjb250YWlucyB0aGUgY2hhcmFjdGVycyBvZiBhIEpTT04gbnVtYmVyLgogKiBUaGVzZSBhcmUgYWxsIEFTQ0lJLCBzbyBhbiBbVWludDhMaXN0XSBpcyB1c2VkIGFzIGJhY2tpbmcgc3RvcmUuCiAqCiAqIFRoaXMgYnVmZmVyIGlzIHVzZWQgd2hlbiBhIEpTT04gbnVtYmVyIGlzIHNwbGl0IGJldHdlZW4gc2VwYXJhdGUgY2h1bmtzLgogKgogKi8KY2xhc3MgX051bWJlckJ1ZmZlciB7CiAgc3RhdGljIGNvbnN0IGludCBtaW5DYXBhY2l0eSA9IDE2OwogIHN0YXRpYyBjb25zdCBpbnQga0RlZmF1bHRPdmVyaGVhZCA9IDU7CiAgVWludDhMaXN0IGxpc3Q7CiAgaW50IGxlbmd0aCA9IDA7CiAgX051bWJlckJ1ZmZlcihpbnQgaW5pdGlhbENhcGFjaXR5KQogICAgICA6IGxpc3QgPSBuZXcgVWludDhMaXN0KF9pbml0aWFsQ2FwYWNpdHkoaW5pdGlhbENhcGFjaXR5KSk7CgogIGludCBnZXQgY2FwYWNpdHkgPT4gbGlzdC5sZW5ndGg7CgogIC8vIFBpY2sgYW4gaW5pdGlhbCBjYXBhY2l0eSBncmVhdGVyIHRoYW4gdGhlIGZpcnN0IHBhcnQncyBzaXplLgogIC8vIFRoZSB0eXBpY2FsIHVzZSBjYXNlIGhhcyB0d28gcGFydHMsIHRoaXMgaXMgdGhlIGF0dGVtcHQgYXQKICAvLyBndWVzc2luZyB0aGUgc2l6ZSBvZiB0aGUgc2Vjb25kIHBhcnQgd2l0aG91dCBvdmVyZG9pbmcgaXQuCiAgLy8gVGhlIGRlZmF1bHQgZXN0aW1hdGUgb2YgdGhlIHNlY29uZCBwYXJ0IGlzIFtrRGVmYXVsdE92ZXJoZWFkXSwKICAvLyB0aGVuIHJvdW5kIHRvIG11bHRpcGx1bSBvZiBmb3VyLCBhbmQgcmV0dXJuIHRoZSByZXN1bHQsCiAgLy8gb3IgW21pbkNhcGFjaXR5XSBpZiB0aGF0IGlzIGdyZWF0ZXIuCiAgc3RhdGljIGludCBfaW5pdGlhbENhcGFjaXR5KGludCBtaW5DYXBhY2l0eSkgewogICAgbWluQ2FwYWNpdHkgKz0ga0RlZmF1bHRPdmVyaGVhZDsKICAgIGlmIChtaW5DYXBhY2l0eSA8IG1pbkNhcGFjaXR5KSByZXR1cm4gbWluQ2FwYWNpdHk7CiAgICBtaW5DYXBhY2l0eSA9IChtaW5DYXBhY2l0eSArIDMpICYgfjM7IC8vIFJvdW5kIHRvIG11bHRpcGxlIG9mIGZvdXIuCiAgICByZXR1cm4gbWluQ2FwYWNpdHk7CiAgfQoKICAvLyBHcm93cyB0byB0aGUgZXhhY3Qgc2l6ZSBhc2tlZCBmb3IuCiAgdm9pZCBlbnN1cmVDYXBhY2l0eShpbnQgbmV3Q2FwYWNpdHkpIHsKICAgIFVpbnQ4TGlzdCBsaXN0ID0gdGhpcy5saXN0OwogICAgaWYgKG5ld0NhcGFjaXR5IDw9IGxpc3QubGVuZ3RoKSByZXR1cm47CiAgICBVaW50OExpc3QgbmV3TGlzdCA9IG5ldyBVaW50OExpc3QobmV3Q2FwYWNpdHkpOwogICAgbmV3TGlzdC5zZXRSYW5nZSgwLCBsaXN0Lmxlbmd0aCwgbGlzdCwgMCk7CiAgICB0aGlzLmxpc3QgPSBuZXdMaXN0OwogIH0KCiAgU3RyaW5nIGdldFN0cmluZygpIHsKICAgIFN0cmluZyByZXN1bHQgPSBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMobGlzdCwgMCwgbGVuZ3RoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBUT0RPKGxybik6IFNlZSBpZiBwYXJzaW5nIG9mIG51bWJlcnMgY2FuIGJlIGFic3RyYWN0ZWQgdG8gc29tZXRoaW5nCiAgLy8gbm90IG9ubHkgd29ya2luZyBvbiBzdHJpbmdzLCBidXQgYWxzbyBvbiBjaGFyLWNvZGUgbGlzdHMsIHdpdGhvdXQgbG9zc2luZwogIC8vIHBlcmZvcm1hbmNlLgogIG51bSBwYXJzZU51bSgpID0+IG51bS5wYXJzZShnZXRTdHJpbmcoKSk7CiAgZG91YmxlIHBhcnNlRG91YmxlKCkgPT4gZG91YmxlLnBhcnNlKGdldFN0cmluZygpKTsKfQoKLyoqCiAqIENodW5rZWQgSlNPTiBwYXJzZXIuCiAqCiAqIFJlY2VpdmVzIGlucHV0cyBpbiBjaHVua3MsIGdpdmVzIGFjY2VzcyB0byBpbmRpdmlkdWFsIHBhcnRzIG9mIHRoZSBpbnB1dCwKICogYW5kIHN0b3JlcyBpbnB1dCBzdGF0ZSBiZXR3ZWVuIGNodW5rcy4KICoKICogSW1wbGVtZW50YXRpb25zIGluY2x1ZGUgW1N0cmluZ10gYW5kIFVURi04IHBhcnNlcnMuCiAqLwphYnN0cmFjdCBjbGFzcyBfQ2h1bmtlZEpzb25QYXJzZXI8VD4gewogIC8vIEEgc2ltcGxlIG5vbi1yZWN1cnNpdmUgc3RhdGUtYmFzZWQgcGFyc2VyIGZvciBKU09OLgogIC8vCiAgLy8gTGl0ZXJhbCB2YWx1ZXMgYWNjZXB0ZWQgaW4gc3RhdGVzIEFSUkFZX0VNUFRZLCBBUlJBWV9DT01NQSwgT0JKRUNUX0NPTE9OCiAgLy8gYW5kIHN0cmluZ3MgYWxzbyBpbiBPQkpFQ1RfRU1QVFksIE9CSkVDVF9DT01NQS4KICAvLyAgICAgICAgICAgICAgIFZBTFVFICBTVFJJTkcgIDogICwgIH0gIF0gICAgICAgIFRyYW5zaXRpb25zIHRvCiAgLy8gRU1QVFkgICAgICAgICAgICBYICAgICAgWCAgICAgICAgICAgICAgICAgICAtPiBFTkQKICAvLyBBUlJBWV9FTVBUWSAgICAgIFggICAgICBYICAgICAgICAgICAgIEAgICAgIC0+IEFSUkFZX1ZBTFVFIC8gcG9wCiAgLy8gQVJSQVlfVkFMVUUgICAgICAgICAgICAgICAgICAgICBAICAgICBAICAgICAtPiBBUlJBWV9DT01NQSAvIHBvcAogIC8vIEFSUkFZX0NPTU1BICAgICAgWCAgICAgIFggICAgICAgICAgICAgICAgICAgLT4gQVJSQVlfVkFMVUUKICAvLyBPQkpFQ1RfRU1QVFkgICAgICAgICAgICBYICAgICAgICAgIEAgICAgICAgIC0+IE9CSkVDVF9LRVkgLyBwb3AKICAvLyBPQkpFQ1RfS0VZICAgICAgICAgICAgICAgICAgIEAgICAgICAgICAgICAgIC0+IE9CSkVDVF9DT0xPTgogIC8vIE9CSkVDVF9DT0xPTiAgICAgWCAgICAgIFggICAgICAgICAgICAgICAgICAgLT4gT0JKRUNUX1ZBTFVFCiAgLy8gT0JKRUNUX1ZBTFVFICAgICAgICAgICAgICAgICAgICBAICBAICAgICAgICAtPiBPQkpFQ1RfQ09NTUEgLyBwb3AKICAvLyBPQkpFQ1RfQ09NTUEgICAgICAgICAgICBYICAgICAgICAgICAgICAgICAgIC0+IE9CSkVDVF9LRVkKICAvLyBFTkQKICAvLyBTdGFydGluZyBhIG5ldyBhcnJheSBvciBvYmplY3Qgd2lsbCBwdXNoIHRoZSBjdXJyZW50IHN0YXRlLiBUaGUgInBvcCIKICAvLyBhYm92ZSBtZWFucyByZXN0b3JpbmcgdGhpcyBzdGF0ZSBhbmQgdGhlbiBtYXJraW5nIGl0IGFzIGFuIGVuZGVkIHZhbHVlLgogIC8vIFggbWVhbnMgZ2VuZXJpYyBoYW5kbGluZywgQCBtZWFucyBzcGVjaWFsIGhhbmRsaW5nIGZvciBqdXN0IHRoYXQKICAvLyBzdGF0ZSAtIHRoYXQgaXMsIHZhbHVlcyBhcmUgaGFuZGxlZCBnZW5lcmljYWxseSwgb25seSBwdW5jdHVhdGlvbgogIC8vIGNhcmVzIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlLgogIC8vIFZhbHVlcyBmb3Igc3RhdGVzIGFyZSBjaG9zZW4gc28gYml0cyAwIGFuZCAxIHRlbGwgd2hldGhlcgogIC8vIGEgc3RyaW5nL3ZhbHVlIGlzIGFsbG93ZWQsIGFuZCBzZXR0aW5nIGJpdHMgMCB0aHJvdWdoIDIgYWZ0ZXIgYSB2YWx1ZQogIC8vIGdldHMgdG8gdGhlIG5leHQgc3RhdGUgKG5vdCBlbXB0eSwgZG9lc24ndCBhbGxvdyBhIHZhbHVlKS4KCiAgLy8gU3RhdGUgYnVpbGRpbmctYmxvY2sgY29uc3RhbnRzLgogIHN0YXRpYyBjb25zdCBpbnQgVE9QX0xFVkVMID0gMDsKICBzdGF0aWMgY29uc3QgaW50IElOU0lERV9BUlJBWSA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBJTlNJREVfT0JKRUNUID0gMjsKICBzdGF0aWMgY29uc3QgaW50IEFGVEVSX0NPTE9OID0gMzsgLy8gQWx3YXlzIGluc2lkZSBvYmplY3QuCgogIHN0YXRpYyBjb25zdCBpbnQgQUxMT1dfU1RSSU5HX01BU0sgPSA4OyAvLyBBbGxvd2VkIGlmIHplcm8uCiAgc3RhdGljIGNvbnN0IGludCBBTExPV19WQUxVRV9NQVNLID0gNDsgLy8gQWxsb3dlZCBpZiB6ZXJvLgogIHN0YXRpYyBjb25zdCBpbnQgQUxMT1dfVkFMVUUgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgU1RSSU5HX09OTFkgPSA0OwogIHN0YXRpYyBjb25zdCBpbnQgTk9fVkFMVUVTID0gMTI7CgogIC8vIE9iamVjdHMgYW5kIGFycmF5cyBhcmUgImVtcHR5IiB1bnRpbCB0aGVpciBmaXJzdCBwcm9wZXJ0eS9lbGVtZW50LgogIC8vIEF0IHRoaXMgcG9zaXRpb24sIHRoZXkgbWF5IGVpdGhlciBoYXZlIGFuIGVudHJ5IG9yIGEgY2xvc2UtYnJhY2tldC4KICBzdGF0aWMgY29uc3QgaW50IEVNUFRZID0gMDsKICBzdGF0aWMgY29uc3QgaW50IE5PTl9FTVBUWSA9IDE2OwogIHN0YXRpYyBjb25zdCBpbnQgRU1QVFlfTUFTSyA9IDE2OyAvLyBFbXB0eSBpZiB6ZXJvLgoKICAvLyBBY3R1YWwgc3RhdGVzICAgICAgICAgICAgICAgOiBDb250ZXh0IHwgSXMgZW1wdHk/IHwgTmV4dD8KICBzdGF0aWMgY29uc3QgaW50IFNUQVRFX0lOSVRJQUwgPSBUT1BfTEVWRUwgfCBFTVBUWSB8IEFMTE9XX1ZBTFVFOwogIHN0YXRpYyBjb25zdCBpbnQgU1RBVEVfRU5EID0gVE9QX0xFVkVMIHwgTk9OX0VNUFRZIHwgTk9fVkFMVUVTOwoKICBzdGF0aWMgY29uc3QgaW50IFNUQVRFX0FSUkFZX0VNUFRZID0gSU5TSURFX0FSUkFZIHwgRU1QVFkgfCBBTExPV19WQUxVRTsKICBzdGF0aWMgY29uc3QgaW50IFNUQVRFX0FSUkFZX1ZBTFVFID0gSU5TSURFX0FSUkFZIHwgTk9OX0VNUFRZIHwgTk9fVkFMVUVTOwogIHN0YXRpYyBjb25zdCBpbnQgU1RBVEVfQVJSQVlfQ09NTUEgPSBJTlNJREVfQVJSQVkgfCBOT05fRU1QVFkgfCBBTExPV19WQUxVRTsKCiAgc3RhdGljIGNvbnN0IGludCBTVEFURV9PQkpFQ1RfRU1QVFkgPSBJTlNJREVfT0JKRUNUIHwgRU1QVFkgfCBTVFJJTkdfT05MWTsKICBzdGF0aWMgY29uc3QgaW50IFNUQVRFX09CSkVDVF9LRVkgPSBJTlNJREVfT0JKRUNUIHwgTk9OX0VNUFRZIHwgTk9fVkFMVUVTOwogIHN0YXRpYyBjb25zdCBpbnQgU1RBVEVfT0JKRUNUX0NPTE9OID0gQUZURVJfQ09MT04gfCBOT05fRU1QVFkgfCBBTExPV19WQUxVRTsKICBzdGF0aWMgY29uc3QgaW50IFNUQVRFX09CSkVDVF9WQUxVRSA9IEFGVEVSX0NPTE9OIHwgTk9OX0VNUFRZIHwgTk9fVkFMVUVTOwogIHN0YXRpYyBjb25zdCBpbnQgU1RBVEVfT0JKRUNUX0NPTU1BID0gSU5TSURFX09CSkVDVCB8IE5PTl9FTVBUWSB8IFNUUklOR19PTkxZOwoKICAvLyBCaXRzIHNldCBpbiBzdGF0ZSBhZnRlciBzdWNjZXNzZnVsbHkgcmVhZGluZyBhIHZhbHVlLgogIC8vIFRoaXMgdHJhbnNpdGlvbnMgdGhlIHN0YXRlIHRvIGV4cGVjdCB0aGUgbmV4dCBwdW5jdHVhdGlvbi4KICBzdGF0aWMgY29uc3QgaW50IFZBTFVFX1JFQURfQklUUyA9IE5PTl9FTVBUWSB8IE5PX1ZBTFVFUzsKCiAgLy8gQ2hhcmFjdGVyIGNvZGUgY29uc3RhbnRzLgogIHN0YXRpYyBjb25zdCBpbnQgQkFDS1NQQUNFID0gMHgwODsKICBzdGF0aWMgY29uc3QgaW50IFRBQiA9IDB4MDk7CiAgc3RhdGljIGNvbnN0IGludCBORVdMSU5FID0gMHgwYTsKICBzdGF0aWMgY29uc3QgaW50IENBUlJJQUdFX1JFVFVSTiA9IDB4MGQ7CiAgc3RhdGljIGNvbnN0IGludCBGT1JNX0ZFRUQgPSAweDBjOwogIHN0YXRpYyBjb25zdCBpbnQgU1BBQ0UgPSAweDIwOwogIHN0YXRpYyBjb25zdCBpbnQgUVVPVEUgPSAweDIyOwogIHN0YXRpYyBjb25zdCBpbnQgUExVUyA9IDB4MmI7CiAgc3RhdGljIGNvbnN0IGludCBDT01NQSA9IDB4MmM7CiAgc3RhdGljIGNvbnN0IGludCBNSU5VUyA9IDB4MmQ7CiAgc3RhdGljIGNvbnN0IGludCBERUNJTUFMUE9JTlQgPSAweDJlOwogIHN0YXRpYyBjb25zdCBpbnQgU0xBU0ggPSAweDJmOwogIHN0YXRpYyBjb25zdCBpbnQgQ0hBUl8wID0gMHgzMDsKICBzdGF0aWMgY29uc3QgaW50IENIQVJfOSA9IDB4Mzk7CiAgc3RhdGljIGNvbnN0IGludCBDT0xPTiA9IDB4M2E7CiAgc3RhdGljIGNvbnN0IGludCBDSEFSX0UgPSAweDQ1OwogIHN0YXRpYyBjb25zdCBpbnQgTEJSQUNLRVQgPSAweDViOwogIHN0YXRpYyBjb25zdCBpbnQgQkFDS1NMQVNIID0gMHg1YzsKICBzdGF0aWMgY29uc3QgaW50IFJCUkFDS0VUID0gMHg1ZDsKICBzdGF0aWMgY29uc3QgaW50IENIQVJfYSA9IDB4NjE7CiAgc3RhdGljIGNvbnN0IGludCBDSEFSX2IgPSAweDYyOwogIHN0YXRpYyBjb25zdCBpbnQgQ0hBUl9lID0gMHg2NTsKICBzdGF0aWMgY29uc3QgaW50IENIQVJfZiA9IDB4NjY7CiAgc3RhdGljIGNvbnN0IGludCBDSEFSX2wgPSAweDZjOwogIHN0YXRpYyBjb25zdCBpbnQgQ0hBUl9uID0gMHg2ZTsKICBzdGF0aWMgY29uc3QgaW50IENIQVJfciA9IDB4NzI7CiAgc3RhdGljIGNvbnN0IGludCBDSEFSX3MgPSAweDczOwogIHN0YXRpYyBjb25zdCBpbnQgQ0hBUl90ID0gMHg3NDsKICBzdGF0aWMgY29uc3QgaW50IENIQVJfdSA9IDB4NzU7CiAgc3RhdGljIGNvbnN0IGludCBMQlJBQ0UgPSAweDdiOwogIHN0YXRpYyBjb25zdCBpbnQgUkJSQUNFID0gMHg3ZDsKCiAgLy8gU3RhdGUgb2YgcGFydGlhbCB2YWx1ZSBhdCBjaHVuayBzcGxpdC4KICBzdGF0aWMgY29uc3QgaW50IE5PX1BBUlRJQUwgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgUEFSVElBTF9TVFJJTkcgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgUEFSVElBTF9OVU1FUkFMID0gMjsKICBzdGF0aWMgY29uc3QgaW50IFBBUlRJQUxfS0VZV09SRCA9IDM7CiAgc3RhdGljIGNvbnN0IGludCBNQVNLX1BBUlRJQUwgPSAzOwoKICAvLyBQYXJ0aWFsIHN0YXRlcyBmb3IgbnVtZXJhbHMuIFZhbHVlcyBjYW4gYmUgfCdlZCB3aXRoIFBBUlRJQUxfTlVNRVJBTC4KICBzdGF0aWMgY29uc3QgaW50IE5VTV9TSUdOID0gMDsgLy8gQWZ0ZXIgaW5pdGlhbCAnLScuCiAgc3RhdGljIGNvbnN0IGludCBOVU1fWkVSTyA9IDQ7IC8vIEFmdGVyICcwJyBhcyBmaXJzdCBkaWdpdC4KICBzdGF0aWMgY29uc3QgaW50IE5VTV9ESUdJVCA9IDg7IC8vIEFmdGVyIGRpZ2l0LCBubyAnLicgb3IgJ2UnIHNlZW4uCiAgc3RhdGljIGNvbnN0IGludCBOVU1fRE9UID0gMTI7IC8vIEFmdGVyICcuJy4KICBzdGF0aWMgY29uc3QgaW50IE5VTV9ET1RfRElHSVQgPSAxNjsgLy8gQWZ0ZXIgYSBkZWNpbWFsIGRpZ2l0IChhZnRlciAnLicpLgogIHN0YXRpYyBjb25zdCBpbnQgTlVNX0UgPSAyMDsgLy8gQWZ0ZXIgJ2UnIG9yICdFJy4KICBzdGF0aWMgY29uc3QgaW50IE5VTV9FX1NJR04gPSAyNDsgLy8gQWZ0ZXIgJy0nIG9yICcrJyBhZnRlciAnZScgb3IgJ0UnLgogIHN0YXRpYyBjb25zdCBpbnQgTlVNX0VfRElHSVQgPSAyODsgLy8gQWZ0ZXIgZXhwb25lbnQgZGlnaXQuCiAgc3RhdGljIGNvbnN0IGludCBOVU1fU1VDQ0VTUyA9IDMyOyAvLyBOZXZlciBzdG9yZWQgYXMgcGFydGlhbCBzdGF0ZS4KCiAgLy8gUGFydGlhbCBzdGF0ZXMgZm9yIHN0cmluZ3MuCiAgc3RhdGljIGNvbnN0IGludCBTVFJfUExBSU4gPSAwOyAvLyBJbnNpZGUgc3RyaW5nLCBidXQgbm90IGVzY2FwZS4KICBzdGF0aWMgY29uc3QgaW50IFNUUl9FU0NBUEUgPSA0OyAvLyBBZnRlciAnXCcuCiAgc3RhdGljIGNvbnN0IGludCBTVFJfVSA9IDE2OyAvLyBBZnRlciAnXHUnIGFuZCAwLTMgaGV4IGRpZ2l0cy4KICBzdGF0aWMgY29uc3QgaW50IFNUUl9VX0NPVU5UX1NISUZUID0gMjsgLy8gSGV4IGRpZ2l0IGNvdW50IGluIGJpdHMgMi0zLgogIHN0YXRpYyBjb25zdCBpbnQgU1RSX1VfVkFMVUVfU0hJRlQgPSA1OyAvLyBIZXggZGlnaXQgdmFsdWUgaW4gYml0cyA1Ky4KCiAgLy8gUGFydGlhbCBzdGF0ZXMgZm9yIGtleXdvcmRzLgogIHN0YXRpYyBjb25zdCBpbnQgS1dEX1RZUEVfTUFTSyA9IDEyOwogIHN0YXRpYyBjb25zdCBpbnQgS1dEX1RZUEVfU0hJRlQgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgS1dEX05VTEwgPSAwOyAvLyBQcmVmaXggb2YgIm51bGwiIHNlZW4uCiAgc3RhdGljIGNvbnN0IGludCBLV0RfVFJVRSA9IDQ7IC8vIFByZWZpeCBvZiAidHJ1ZSIgc2Vlbi4KICBzdGF0aWMgY29uc3QgaW50IEtXRF9GQUxTRSA9IDg7IC8vIFByZWZpeCBvZiAiZmFsc2UiIHNlZW4uCiAgc3RhdGljIGNvbnN0IGludCBLV0RfQk9NID0gMTI7IC8vIFByZWZpeCBvZiBCT00gc2Vlbi4KICBzdGF0aWMgY29uc3QgaW50IEtXRF9DT1VOVF9TSElGVCA9IDQ7IC8vIFByZWZpeCBsZW5ndGggaW4gYml0cyA0Ky4KCiAgLy8gTWFzayB1c2VkIHRvIG1hc2sgb2ZmIHR3byBsb3dlciBiaXRzLgogIHN0YXRpYyBjb25zdCBpbnQgVFdPX0JJVF9NQVNLID0gMzsKCiAgZmluYWwgX0pzb25MaXN0ZW5lciBsaXN0ZW5lcjsKCiAgLy8gVGhlIGN1cnJlbnQgcGFyc2luZyBzdGF0ZS4KICBpbnQgc3RhdGUgPSBTVEFURV9JTklUSUFMOwogIExpc3Q8aW50PiBzdGF0ZXMgPSA8aW50PltdOwoKICAvKioKICAgKiBTdG9yZXMgdG9rZW5pemVyIHN0YXRlIGJldHdlZW4gY2h1bmtzLgogICAqCiAgICogVGhpcyBzdGF0ZSBpcyBzdG9yZWQgd2hlbiBhIGNodW5rIHN0b3BzIGluIHRoZSBtaWRkbGUgb2YgYQogICAqIHRva2VuIChzdHJpbmcsIG51bWVyYWwsIGJvb2xlYW4gb3IgbnVsbCkuCiAgICoKICAgKiBUaGUgcGFydGlhbCBzdGF0ZSBpcyB1c2VkIHRvIGNvbnRpbnVlIHBhcnNpbmcgb24gdGhlIG5leHQgY2h1bmsuCiAgICogVGhlIHByZXZpb3VzIGNodW5rIGlzIG5vdCByZXRhaW5lZCwgYW55IGRhdGEgbmVlZGVkIGFyZSBzdG9yZWQgaW4KICAgKiB0aGlzIGludGVnZXIsIG9yIGluIHRoZSBbYnVmZmVyXSBmaWVsZCBhcyBhIHN0cmluZy1idWlsZGluZyBidWZmZXIKICAgKiBvciBhIFtfTnVtYmVyQnVmZmVyXS4KICAgKgogICAqIFByZWZpeCBzdGF0ZSBzdG9yZWQgaW4gW3ByZWZpeFN0YXRlXSBhcyBiaXRzLgogICAqCiAgICogICAgICAgICAgICAuLjAwIDogTm8gcGFydGlhbCB2YWx1ZSAoTk9fUEFSVElBTCkuCiAgICoKICAgKiAgICAgICAgIC4uMDAwMDEgOiBQYXJ0aWFsIHN0cmluZywgbm90IGluc2lkZSBlc2NhcGUuCiAgICogICAgICAgICAuLjAwMTAxIDogUGFydGlhbCBzdHJpbmcsIGFmdGVyICdcJy4KICAgKiAgICAgLi52dnZ2MWRkMDEgOiBQYXJ0aWFsIFx1IGVzY2FwZS4KICAgKiAgICAgICAgICAgICAgICAgICBUaGUgJ2RkJyBiaXRzICgyLTMpIGVuY29kZSB0aGUgbnVtYmVyIG9mIGhleCBkaWdpdHMgc2Vlbi4KICAgKiAgICAgICAgICAgICAgICAgICBCaXRzIDUtMTYgZW5jb2RlIHRoZSB2YWx1ZSBvZiB0aGUgaGV4IGRpZ2l0cyBzZWVuIHNvIGZhci4KICAgKgogICAqICAgICAgICAuLjBkZGQxMCA6IFBhcnRpYWwgbnVtZXJhbC4KICAgKiAgICAgICAgICAgICAgICAgICBUaGUgYGRkZGAgYml0cyBzdG9yZSB0aGUgcGFydHMgb2YgaW4gdGhlIG51bWVyYWwgc2VlbiBzbwogICAqICAgICAgICAgICAgICAgICAgIGZhciwgYXMgdGhlIGNvbnN0YW50cyBgTlVNXypgIGRlZmluZWQgYWJvdmUuCiAgICogICAgICAgICAgICAgICAgICAgVGhlIGNoYXJhY3RlcnMgb2YgdGhlIG51bWVyYWwgYXJlIHN0b3JlZCBpbiBbYnVmZmVyXQogICAqICAgICAgICAgICAgICAgICAgIGFzIGEgW19OdW1iZXJCdWZmZXJdLgogICAqCiAgICogICAgICAuLjBkZGQwMDExIDogUGFydGlhbCAnbnVsbCcga2V5d29yZC4KICAgKiAgICAgIC4uMGRkZDAxMTEgOiBQYXJ0aWFsICd0cnVlJyBrZXl3b3JkLgogICAqICAgICAgLi4wZGRkMTAxMSA6IFBhcnRpYWwgJ2ZhbHNlJyBrZXl3b3JkLgogICAqICAgICAgLi4wZGRkMTExMSA6IFBhcnRpYWwgVVRGLTggQk9NIGJ5dGUgc2VxZXVlbmNlICgiXHhFRlx4QkJceEJGIikuCiAgICogICAgICAgICAgICAgICAgICAgRm9yIGFsbCBrZXl3b3JkcywgdGhlIGBkZGRgIGJpdHMgZW5jb2RlIHRoZSBudW1iZXIKICAgKiAgICAgICAgICAgICAgICAgICBvZiBsZXR0ZXJzIHNlZW4uCiAgICogICAgICAgICAgICAgICAgICAgVGhlIEJPTSBieXRlIHNlcXVlbmNlIGlzIG9ubHkgdXNlZCBieSBbX0pzb25VdGY4UGFyc2VyXSwKICAgKiAgICAgICAgICAgICAgICAgICBhbmQgb25seSBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgaW5wdXQuCiAgICovCiAgaW50IHBhcnRpYWxTdGF0ZSA9IE5PX1BBUlRJQUw7CgogIC8qKgogICAqIEV4dHJhIGRhdGEgc3RvcmVkIHdoaWxlIHBhcnNpbmcgYSBwcmltaXRpdmUgdmFsdWUuCiAgICogTWF5IGJlIHNldCBkdXJpbmcgcGFyc2luZywgYWx3YXlzIHNldCBhdCBjaHVuayBlbmQgaWYgYSB2YWx1ZSBpcyBwYXJ0aWFsLgogICAqCiAgICogTWF5IGNvbnRhaW4gYSBzdHJpbmcgYnVmZmVyIHdoaWxlIHBhcnNpbmcgc3RyaW5ncy4KICAgKi8KICB2YXIgYnVmZmVyID0gbnVsbDsKCiAgX0NodW5rZWRKc29uUGFyc2VyKHRoaXMubGlzdGVuZXIpOwoKICAvKioKICAgKiBQdXNoIHRoZSBjdXJyZW50IHBhcnNlIFtzdGF0ZV0gb24gYSBzdGFjay4KICAgKgogICAqIFN0YXRlIGlzIHB1c2hlZCB3aGVuIGEgbmV3IGFycmF5IG9yIG9iamVjdCBsaXRlcmFsIHN0YXJ0cywKICAgKiBzbyB0aGUgcGFyc2VyIGNhbiBnbyBiYWNrIHRvIHRoZSBjb3JyZWN0IHZhbHVlIHdoZW4gdGhlIGxpdGVyYWwgZW5kcy4KICAgKi8KICB2b2lkIHNhdmVTdGF0ZShpbnQgc3RhdGUpIHsKICAgIHN0YXRlcy5hZGQoc3RhdGUpOwogIH0KCiAgLyoqCiAgICogUmVzdG9yZSBhIHN0YXRlIHB1c2hlZCB3aXRoIFtzYXZlU3RhdGVdLgogICAqLwogIGludCByZXN0b3JlU3RhdGUoKSB7CiAgICByZXR1cm4gc3RhdGVzLnJlbW92ZUxhc3QoKTsgLy8gVGhyb3dzIGlmIGVtcHR5LgogIH0KCiAgLyoqCiAgICogRmluYWxpemVzIHRoZSBwYXJzaW5nLgogICAqCiAgICogVGhyb3dzIGlmIHRoZSBzb3VyY2UgcmVhZCBzbyBmYXIgZG9lc24ndCBlbmQgdXAgd2l0aCBhIGNvbXBsZXRlCiAgICogcGFyc2VkIHZhbHVlLiBUaGF0IG1lYW5zIGl0IG11c3Qgbm90IGJlIGluc2lkZSBhIGxpc3Qgb3Igb2JqZWN0CiAgICogbGl0ZXJhbCwgYW5kIGFueSBwYXJ0aWFsIHZhbHVlIHJlYWQgc2hvdWxkIGFsc28gYmUgYSB2YWxpZCBjb21wbGV0ZQogICAqIHZhbHVlLgogICAqCiAgICogVGhlIG9ubHkgdmFsaWQgcGFydGlhbCBzdGF0ZSBpcyBhIG51bWJlciB0aGF0IGVuZHMgaW4gYSBkaWdpdCwgYW5kCiAgICogb25seSBpZiB0aGUgbnVtYmVyIGlzIHRoZSBlbnRpcmUgSlNPTiB2YWx1ZSBiZWluZyBwYXJzZWQKICAgKiAob3RoZXJ3aXNlIGl0IHdvdWxkIGJlIGluc2lkZSBhIGxpc3Qgb3Igb2JqZWN0KS4KICAgKiBTdWNoIGEgbnVtYmVyIHdpbGwgYmUgY29tcGxldGVkLiBBbnkgb3RoZXIgcGFydGlhbCBzdGF0ZSBpcyBhbiBlcnJvci4KICAgKi8KICB2b2lkIGNsb3NlKCkgewogICAgaWYgKHBhcnRpYWxTdGF0ZSAhPSBOT19QQVJUSUFMKSB7CiAgICAgIGludCBwYXJ0aWFsVHlwZSA9IHBhcnRpYWxTdGF0ZSAmIE1BU0tfUEFSVElBTDsKICAgICAgaWYgKHBhcnRpYWxUeXBlID09IFBBUlRJQUxfTlVNRVJBTCkgewogICAgICAgIGludCBudW1TdGF0ZSA9IHBhcnRpYWxTdGF0ZSAmIH5NQVNLX1BBUlRJQUw7CiAgICAgICAgLy8gQSBwYXJ0aWFsIG51bWJlciBtaWdodCBiZSBhIHZhbGlkIG51bWJlciBpZiB3ZSBrbm93IGl0J3MgZG9uZS4KICAgICAgICAvLyBUaGVyZSBpcyBhbiB1bm5lY2Vzc2FyeSBvdmVyaGVhZCBpZiBpbnB1dCBpcyBhIHNpbmdsZSBudW1iZXIsCiAgICAgICAgLy8gYnV0IHRoaXMgaXMgYXNzdW1lZCB0byBiZSByYXJlLgogICAgICAgIF9OdW1iZXJCdWZmZXIgYnVmZmVyID0gdGhpcy5idWZmZXI7CiAgICAgICAgdGhpcy5idWZmZXIgPSBudWxsOwogICAgICAgIGZpbmlzaENodW5rTnVtYmVyKG51bVN0YXRlLCAwLCAwLCBidWZmZXIpOwogICAgICB9IGVsc2UgaWYgKHBhcnRpYWxUeXBlID09IFBBUlRJQUxfU1RSSU5HKSB7CiAgICAgICAgZmFpbChjaHVua0VuZCwgIlVudGVybWluYXRlZCBzdHJpbmciKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQocGFydGlhbFR5cGUgPT0gUEFSVElBTF9LRVlXT1JEKTsKICAgICAgICBmYWlsKGNodW5rRW5kKTsgLy8gSW5jb21wbGV0ZSBsaXRlcmFsLgogICAgICB9CiAgICB9CiAgICBpZiAoc3RhdGUgIT0gU1RBVEVfRU5EKSB7CiAgICAgIGZhaWwoY2h1bmtFbmQpOwogICAgfQogIH0KCiAgLyoqCiAgICogUmVhZCBvdXQgdGhlIHJlc3VsdCBhZnRlciBzdWNjZXNzZnVsbHkgY2xvc2luZyB0aGUgcGFyc2VyLgogICAqCiAgICogVGhlIHBhcnNlciBpcyBjbG9zZWQgYnkgY2FsbGluZyBbY2xvc2VdIG9yIGNhbGxpbmcgW2FkZFNvdXJjZUNodW5rXSB3aXRoCiAgICogYHRydWVgIGFzIHNlY29uZCAoYGlzTGFzdGApIGFyZ3VtZW50LgogICAqLwogIE9iamVjdCBnZXQgcmVzdWx0IHsKICAgIHJldHVybiBsaXN0ZW5lci5yZXN1bHQ7CiAgfQoKICAvKiogU2V0cyB0aGUgY3VycmVudCBzb3VyY2UgY2h1bmsuICovCiAgdm9pZCBzZXQgY2h1bmsoVCBzb3VyY2UpOwoKICAvKioKICAgKiBMZW5ndGggb2YgY3VycmVudCBjaHVuay4KICAgKgogICAqIFRoZSB2YWxpZCBhcmd1bWVudHMgdG8gW2dldENoYXJdIGFyZSAwIC4uIGBjaHVua0VuZCAtIDFgLgogICAqLwogIGludCBnZXQgY2h1bmtFbmQ7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGNodW5rIGl0c2VsZi4KICAgKgogICAqIE9ubHkgdXNlZCBieSBbZmFpbF0gdG8gaW5jbHVkZSB0aGUgY2h1bmsgaW4gdGhlIHRocm93biBbRm9ybWF0RXhjZXB0aW9uXS4KICAgKi8KICBUIGdldCBjaHVuazsKCiAgLyoqCiAgICogR2V0IGNoYXJjYWN0ZXIvY29kZSB1bml0IG9mIGN1cnJlbnQgY2h1bmsuCiAgICoKICAgKiBUaGUgW2luZGV4XSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBhbmQgbGVzcyB0aGFuIGBjaHVua0VuZGAuCiAgICogSW4gcHJhY3RpdmUsIFtpbmRleF0gd2lsbCBiZSBubyBzbWFsbGVyIHRoYW4gdGhlIGBzdGFydGAgYXJndW1lbnQgcGFzc2VkCiAgICogdG8gW3BhcnNlXS4KICAgKi8KICBpbnQgZ2V0Q2hhcihpbnQgaW5kZXgpOwoKICAvKioKICAgKiBDb3B5IEFTQ0lJIGNoYXJhY3RlcnMgZnJvbSBzdGFydCB0byBlbmQgb2YgY2h1bmsgaW50byBhIGxpc3QuCiAgICoKICAgKiBVc2VkIGZvciBudW1iZXIgYnVmZmVyIChhbHdheXMgY29waWVzIEFTQ0lJLCBzbyBlbmNvZGluZyBpcyBub3QgaW1wb3J0YW50KS4KICAgKi8KICB2b2lkIGNvcHlDaGFyc1RvTGlzdChpbnQgc3RhcnQsIGludCBlbmQsIExpc3Q8aW50PiB0YXJnZXQsIGludCBvZmZzZXQpOwoKICAvKioKICAgKiBCdWlsZCBhIHN0cmluZyB1c2luZyBpbnB1dCBjb2RlIHVuaXRzLgogICAqCiAgICogQ3JlYXRlcyBhIHN0cmluZyBidWZmZXIgYW5kIGVuYWJsZXMgYWRkaW5nIGNoYXJhY3RlcnMgYW5kIHNsaWNlcwogICAqIHRvIHRoYXQgYnVmZmVyLgogICAqIFRoZSBidWZmZXIgaXMgc3RvcmVkIGluIHRoZSBbYnVmZmVyXSBmaWVsZC4gSWYgdGhlIHN0cmluZyBpcyB1bnRlcm1pbmF0ZWQsCiAgICogdGhlIHNhbWUgYnVmZmVyIGlzIHVzZWQgdG8gY29udGludWUgcGFyc2luZyBpbiB0aGUgbmV4dCBjaHVuay4KICAgKi8KICB2b2lkIGJlZ2luU3RyaW5nKCk7CiAgLyoqCiAgICogQWRkIHNpbmdsZSBjaGFyYWN0ZXIgY29kZSB0byBzdHJpbmcgYmVpbmcgYnVpbHQuCiAgICoKICAgKiBVc2VkIGZvciB1bnBhcnNlZCBlc2NhcGUgc2VxdWVuY2VzLgogICAqLwogIHZvaWQgYWRkQ2hhclRvU3RyaW5nKGludCBjaGFyQ29kZSk7CgogIC8qKgogICAqIEFkZHMgc2xpY2Ugb2YgY3VycmVudCBjaHVuayB0byBzdHJpbmcgYmVpbmcgYnVpbHQuCiAgICoKICAgKiBUaGUgW3N0YXJ0XSBwb3NpdGlvbnMgaXMgaW5jbHVzaXZlLCBbZW5kXSBpcyBleGNsdXNpdmUuCiAgICovCiAgdm9pZCBhZGRTbGljZVRvU3RyaW5nKGludCBzdGFydCwgaW50IGVuZCk7CgogIC8qKiBGaW5hbGl6ZXMgdGhlIHN0cmluZyBiZWluZyBidWlsdCBhbmQgcmV0dXJucyBpdCBhcyBhIFN0cmluZy4gKi8KICBTdHJpbmcgZW5kU3RyaW5nKCk7CgogIC8qKgogICAqIEV4dHJhY3RzIGEgbGl0ZXJhbCBzdHJpbmcgZnJvbSBhIHNsaWNlIG9mIHRoZSBjdXJyZW50IGNodW5rLgogICAqCiAgICogTm8gaW50ZXJwcmV0YXRpb24gb2YgdGhlIGNvbnRlbnQgaXMgcGVyZm9ybWVkLCBleGNlcHQgZm9yIGNvbnZlcnRpbmcKICAgKiB0aGUgc291cmNlIGZvcm1hdCB0byBzdHJpbmcuCiAgICogVGhpcyBjYW4gYmUgaW1wbGVtZW50ZWQgbW9yZSBvciBsZXNzIGVmZmljaWVudGx5IGRlcGVuZGluZyBvbiB0aGUKICAgKiB1bmRlcmx5aW5nIHNvdXJjZS4KICAgKgogICAqIFRoaXMgaXMgdXNlZCBmb3Igc3RyaW5nIGxpdGVyYWxzIHRoYXQgY29udGFpbiBubyBlc2NhcGVzLgogICAqCiAgICogVGhlIFtiaXRzXSBpbnRlZ2VyIGlzIGFuIHVwcGVyIGJvdW5kIG9uIHRoZSBjb2RlIHBvaW50IGluIHRoZSByYW5nZQogICAqIGZyb20gYHN0YXJ0YCB0byBgZW5kYC4KICAgKiBVc3VhbGx5IGZvdW5kIGJ5IGRvaW5nIGJpdHdpc2Ugb3Igb2YgYWxsIHRoZSB2YWx1ZXMuCiAgICogVGhlIGZ1bmN0aW9uIG1heSBjaG9vc2UgdG8gb3B0aW1pemUgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZS4KICAgKi8KICBTdHJpbmcgZ2V0U3RyaW5nKGludCBzdGFydCwgaW50IGVuZCwgaW50IGJpdHMpOwoKICAvKioKICAgKiBQYXJzZSBhIHNsaWNlIG9mIHRoZSBjdXJyZW50IGNodW5rIGFzIGEgbnVtYmVyLgogICAqCiAgICogU2luY2UgaW50ZWdlcnMgaGF2ZSBhIG1heGltYWwgdmFsdWUsIGFuZCB3ZSBkb24ndCB0cmFjayB0aGUgdmFsdWUKICAgKiBpbiB0aGUgYnVmZmVyLCBhIHNlcXVlbmNlIG9mIGRpZ2l0cyBjYW4gYmUgZWl0aGVyIGFuIGludCBvciBhIGRvdWJsZS4KICAgKiBUaGUgYG51bS5wYXJzZWAgZnVuY3Rpb24gZG9lcyB0aGUgcmlnaHQgdGhpbmcuCiAgICoKICAgKiBUaGUgZm9ybWF0IGlzIGV4cGVjdGVkIHRvIGJlIGNvcnJlY3QuCiAgICovCiAgbnVtIHBhcnNlTnVtKGludCBzdGFydCwgaW50IGVuZCkgewogICAgY29uc3QgaW50IGFzY2lpQml0cyA9IDB4N2Y7IC8vIE51bWJlciBsaXRlcmFscyBhcmUgQVNDSUkgb25seS4KICAgIHJldHVybiBudW0ucGFyc2UoZ2V0U3RyaW5nKHN0YXJ0LCBlbmQsIGFzY2lpQml0cykpOwogIH0KCiAgLyoqCiAgICogUGFyc2UgYSBzbGljZSBvZiB0aGUgY3VycmVudCBjaHVuayBhcyBhIGRvdWJsZS4KICAgKgogICAqIFRoZSBmb3JtYXQgaXMgZXhwZWN0ZWQgdG8gYmUgY29ycmVjdC4KICAgKiBUaGlzIGlzIHVzZWQgYnkgW3BhcnNlTnVtYmVyXSB3aGVuIHRoZSBkb3VibGUgdmFsdWUgY2Fubm90IGJlCiAgICogYnVpbHQgZXhhY3RseSBkdXJpbmcgcGFyc2luZy4KICAgKi8KICBkb3VibGUgcGFyc2VEb3VibGUoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBjb25zdCBpbnQgYXNjaWlCaXRzID0gMHg3ZjsgLy8gRG91YmxlIGxpdGVyYWxzIGFyZSBBU0NJSSBvbmx5LgogICAgcmV0dXJuIGRvdWJsZS5wYXJzZShnZXRTdHJpbmcoc3RhcnQsIGVuZCwgYXNjaWlCaXRzKSk7CiAgfQoKICAvKioKICAgKiBDb250aW51ZXMgcGFyc2luZyBhIHBhcnRpYWwgdmFsdWUuCiAgICovCiAgaW50IHBhcnNlUGFydGlhbChpbnQgcG9zaXRpb24pIHsKICAgIGlmIChwb3NpdGlvbiA9PSBjaHVua0VuZCkgcmV0dXJuIHBvc2l0aW9uOwogICAgaW50IHBhcnRpYWxTdGF0ZSA9IHRoaXMucGFydGlhbFN0YXRlOwogICAgYXNzZXJ0KHBhcnRpYWxTdGF0ZSAhPSBOT19QQVJUSUFMKTsKICAgIGludCBwYXJ0aWFsVHlwZSA9IHBhcnRpYWxTdGF0ZSAmIE1BU0tfUEFSVElBTDsKICAgIHRoaXMucGFydGlhbFN0YXRlID0gTk9fUEFSVElBTDsKICAgIHBhcnRpYWxTdGF0ZSA9IHBhcnRpYWxTdGF0ZSAmIH5NQVNLX1BBUlRJQUw7CiAgICBhc3NlcnQocGFydGlhbFR5cGUgIT0gMCk7CiAgICBpZiAocGFydGlhbFR5cGUgPT0gUEFSVElBTF9TVFJJTkcpIHsKICAgICAgcG9zaXRpb24gPSBwYXJzZVBhcnRpYWxTdHJpbmcocG9zaXRpb24sIHBhcnRpYWxTdGF0ZSk7CiAgICB9IGVsc2UgaWYgKHBhcnRpYWxUeXBlID09IFBBUlRJQUxfTlVNRVJBTCkgewogICAgICBwb3NpdGlvbiA9IHBhcnNlUGFydGlhbE51bWJlcihwb3NpdGlvbiwgcGFydGlhbFN0YXRlKTsKICAgIH0gZWxzZSBpZiAocGFydGlhbFR5cGUgPT0gUEFSVElBTF9LRVlXT1JEKSB7CiAgICAgIHBvc2l0aW9uID0gcGFyc2VQYXJ0aWFsS2V5d29yZChwb3NpdGlvbiwgcGFydGlhbFN0YXRlKTsKICAgIH0KICAgIHJldHVybiBwb3NpdGlvbjsKICB9CgogIC8qKgogICAqIFBhcnNlcyB0aGUgcmVtYWluZGVyIG9mIGEgbnVtYmVyIGludG8gdGhlIG51bWJlciBidWZmZXIuCiAgICoKICAgKiBTeW50YXggaXMgY2hlY2tlZCB3aGlsZSBwYXNpbmcuCiAgICogU3RhcnRzIGF0IHBvc2l0aW9uLCB3aGljaCBpcyBleHBlY3RlZCB0byBiZSB0aGUgc3RhcnQgb2YgdGhlIGNodW5rLAogICAqIGFuZCByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgbm9uLW51bWJlci1saXRlcmFsIGNoYXJhY3RlciBmb3VuZCwKICAgKiBvciBjaHVua0VuZCBpZiB0aGUgZW50aXJlIGNodW5rIGlzIGEgdmFsaWQgbnVtYmVyIGNvbnRpbnVhdGlvbi4KICAgKiBUaHJvd3MgaWYgYSBzeW50YXggZXJyb3IgaXMgZGV0ZWN0ZWQuCiAgICovCiAgaW50IHBhcnNlUGFydGlhbE51bWJlcihpbnQgcG9zaXRpb24sIGludCBzdGF0ZSkgewogICAgaW50IHN0YXJ0ID0gcG9zaXRpb247CiAgICAvLyBQcmltaXRpdmUgaW1wbGVtZW50YXRpb24sIGNhbiBiZSBvcHRpbWl6ZWQuCiAgICBfTnVtYmVyQnVmZmVyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyOwogICAgdGhpcy5idWZmZXIgPSBudWxsOwogICAgaW50IGVuZCA9IGNodW5rRW5kOwogICAgdG9CYWlsb3V0OgogICAgewogICAgICBpZiAocG9zaXRpb24gPT0gZW5kKSBicmVhayB0b0JhaWxvdXQ7CiAgICAgIGludCBjaGFyID0gZ2V0Q2hhcihwb3NpdGlvbik7CiAgICAgIGludCBkaWdpdCA9IGNoYXIgXiBDSEFSXzA7CiAgICAgIGlmIChzdGF0ZSA9PSBOVU1fU0lHTikgewogICAgICAgIGlmIChkaWdpdCA8PSA5KSB7CiAgICAgICAgICBpZiAoZGlnaXQgPT0gMCkgewogICAgICAgICAgICBzdGF0ZSA9IE5VTV9aRVJPOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RhdGUgPSBOVU1fRElHSVQ7CiAgICAgICAgICB9CiAgICAgICAgICBwb3NpdGlvbisrOwogICAgICAgICAgaWYgKHBvc2l0aW9uID09IGVuZCkgYnJlYWsgdG9CYWlsb3V0OwogICAgICAgICAgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICAgICAgZGlnaXQgPSBjaGFyIF4gQ0hBUl8wOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gZmFpbChwb3NpdGlvbik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzdGF0ZSA9PSBOVU1fWkVSTykgewogICAgICAgIC8vIEpTT04gZG9lcyBub3QgYWxsb3cgaW5zaWduaWZpY2FudCBsZWFkaW5nIHplcm9zIChlLmcuLCAiMDkiKS4KICAgICAgICBpZiAoZGlnaXQgPD0gOSkgcmV0dXJuIGZhaWwocG9zaXRpb24pOwogICAgICAgIHN0YXRlID0gTlVNX0RJR0lUOwogICAgICB9CiAgICAgIHdoaWxlIChzdGF0ZSA9PSBOVU1fRElHSVQpIHsKICAgICAgICBpZiAoZGlnaXQgPiA5KSB7CiAgICAgICAgICBpZiAoY2hhciA9PSBERUNJTUFMUE9JTlQpIHsKICAgICAgICAgICAgc3RhdGUgPSBOVU1fRE9UOwogICAgICAgICAgfSBlbHNlIGlmICgoY2hhciB8IDB4MjApID09IENIQVJfZSkgewogICAgICAgICAgICBzdGF0ZSA9IE5VTV9FOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZmluaXNoQ2h1bmtOdW1iZXIoc3RhdGUsIHN0YXJ0LCBwb3NpdGlvbiwgYnVmZmVyKTsKICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBwb3NpdGlvbisrOwogICAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpIGJyZWFrIHRvQmFpbG91dDsKICAgICAgICBjaGFyID0gZ2V0Q2hhcihwb3NpdGlvbik7CiAgICAgICAgZGlnaXQgPSBjaGFyIF4gQ0hBUl8wOwogICAgICB9CiAgICAgIGlmIChzdGF0ZSA9PSBOVU1fRE9UKSB7CiAgICAgICAgaWYgKGRpZ2l0ID4gOSkgcmV0dXJuIGZhaWwocG9zaXRpb24pOwogICAgICAgIHN0YXRlID0gTlVNX0RPVF9ESUdJVDsKICAgICAgfQogICAgICB3aGlsZSAoc3RhdGUgPT0gTlVNX0RPVF9ESUdJVCkgewogICAgICAgIGlmIChkaWdpdCA+IDkpIHsKICAgICAgICAgIGlmICgoY2hhciB8IDB4MjApID09IENIQVJfZSkgewogICAgICAgICAgICBzdGF0ZSA9IE5VTV9FOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZmluaXNoQ2h1bmtOdW1iZXIoc3RhdGUsIHN0YXJ0LCBwb3NpdGlvbiwgYnVmZmVyKTsKICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBwb3NpdGlvbisrOwogICAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpIGJyZWFrIHRvQmFpbG91dDsKICAgICAgICBjaGFyID0gZ2V0Q2hhcihwb3NpdGlvbik7CiAgICAgICAgZGlnaXQgPSBjaGFyIF4gQ0hBUl8wOwogICAgICB9CiAgICAgIGlmIChzdGF0ZSA9PSBOVU1fRSkgewogICAgICAgIGlmIChjaGFyID09IFBMVVMgfHwgY2hhciA9PSBNSU5VUykgewogICAgICAgICAgc3RhdGUgPSBOVU1fRV9TSUdOOwogICAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpIGJyZWFrIHRvQmFpbG91dDsKICAgICAgICAgIGNoYXIgPSBnZXRDaGFyKHBvc2l0aW9uKTsKICAgICAgICAgIGRpZ2l0ID0gY2hhciBeIENIQVJfMDsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXNzZXJ0KHN0YXRlID49IE5VTV9FKTsKICAgICAgd2hpbGUgKGRpZ2l0IDw9IDkpIHsKICAgICAgICBzdGF0ZSA9IE5VTV9FX0RJR0lUOwogICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgaWYgKHBvc2l0aW9uID09IGVuZCkgYnJlYWsgdG9CYWlsb3V0OwogICAgICAgIGNoYXIgPSBnZXRDaGFyKHBvc2l0aW9uKTsKICAgICAgICBkaWdpdCA9IGNoYXIgXiBDSEFSXzA7CiAgICAgIH0KICAgICAgZmluaXNoQ2h1bmtOdW1iZXIoc3RhdGUsIHN0YXJ0LCBwb3NpdGlvbiwgYnVmZmVyKTsKICAgICAgcmV0dXJuIHBvc2l0aW9uOwogICAgfQogICAgLy8gQmFpbG91dCBjb2RlIGluIGNhc2UgdGhlIGN1cnJlbnQgY2h1bmsgZW5kcyB3aGlsZSBwYXJzaW5nIHRoZSBudW1lcmFsLgogICAgYXNzZXJ0KHBvc2l0aW9uID09IGVuZCk7CiAgICBjb250aW51ZUNodW5rTnVtYmVyKHN0YXRlLCBzdGFydCwgYnVmZmVyKTsKICAgIHJldHVybiBjaHVua0VuZDsKICB9CgogIC8qKgogICAqIENvbnRpbnVlcyBwYXJzaW5nIGEgcGFydGlhbCBzdHJpbmcgbGl0ZXJhbC4KICAgKgogICAqIEhhbmRsZXMgcGFydGlhbCBlc2NhcGVzIGFuZCB0aGVuIGhhbmRzIHRoZSBwYXJzaW5nIG9mZiB0bwogICAqIFtwYXJzZVN0cmluZ1RvQnVmZmVyXS4KICAgKi8KICBpbnQgcGFyc2VQYXJ0aWFsU3RyaW5nKGludCBwb3NpdGlvbiwgaW50IHBhcnRpYWxTdGF0ZSkgewogICAgaWYgKHBhcnRpYWxTdGF0ZSA9PSBTVFJfUExBSU4pIHsKICAgICAgcmV0dXJuIHBhcnNlU3RyaW5nVG9CdWZmZXIocG9zaXRpb24pOwogICAgfQogICAgaWYgKHBhcnRpYWxTdGF0ZSA9PSBTVFJfRVNDQVBFKSB7CiAgICAgIHBvc2l0aW9uID0gcGFyc2VTdHJpbmdFc2NhcGUocG9zaXRpb24pOwogICAgICAvLyBwYXJzZVN0cmluZ0VzY2FwZSBzZXRzIHBhcnRpYWxTdGF0ZSBpZiBpdCBzZWVzIHRoZSBlbmQuCiAgICAgIGlmIChwb3NpdGlvbiA9PSBjaHVua0VuZCkgcmV0dXJuIHBvc2l0aW9uOwogICAgICByZXR1cm4gcGFyc2VTdHJpbmdUb0J1ZmZlcihwb3NpdGlvbik7CiAgICB9CiAgICBhc3NlcnQoKHBhcnRpYWxTdGF0ZSAmIFNUUl9VKSAhPSAwKTsKICAgIGludCB2YWx1ZSA9IHBhcnRpYWxTdGF0ZSA+PiBTVFJfVV9WQUxVRV9TSElGVDsKICAgIGludCBjb3VudCA9IChwYXJ0aWFsU3RhdGUgPj4gU1RSX1VfQ09VTlRfU0hJRlQpICYgVFdPX0JJVF9NQVNLOwogICAgZm9yIChpbnQgaSA9IGNvdW50OyBpIDwgNDsgaSsrLCBwb3NpdGlvbisrKSB7CiAgICAgIGlmIChwb3NpdGlvbiA9PSBjaHVua0VuZCkgcmV0dXJuIGNodW5rU3RyaW5nRXNjYXBlVShpLCB2YWx1ZSk7CiAgICAgIGludCBjaGFyID0gZ2V0Q2hhcihwb3NpdGlvbik7CiAgICAgIGludCBkaWdpdCA9IHBhcnNlSGV4RGlnaXQoY2hhcik7CiAgICAgIGlmIChkaWdpdCA8IDApIGZhaWwocG9zaXRpb24sICJJbnZhbGlkIGhleCBkaWdpdCIpOwogICAgICB2YWx1ZSA9IDE2ICogdmFsdWUgKyBkaWdpdDsKICAgIH0KICAgIGFkZENoYXJUb1N0cmluZyh2YWx1ZSk7CiAgICByZXR1cm4gcGFyc2VTdHJpbmdUb0J1ZmZlcihwb3NpdGlvbik7CiAgfQoKICAvKioKICAgKiBDb250aW51ZXMgcGFyc2luZyBhIHBhcnRpYWwga2V5d29yZC4KICAgKi8KICBpbnQgcGFyc2VQYXJ0aWFsS2V5d29yZChpbnQgcG9zaXRpb24sIGludCBwYXJ0aWFsU3RhdGUpIHsKICAgIGludCBrZXl3b3JkVHlwZSA9IHBhcnRpYWxTdGF0ZSAmIEtXRF9UWVBFX01BU0s7CiAgICBpbnQgY291bnQgPSBwYXJ0aWFsU3RhdGUgPj4gS1dEX0NPVU5UX1NISUZUOwogICAgaW50IGtleXdvcmRUeXBlSW5kZXggPSBrZXl3b3JkVHlwZSA+PiBLV0RfVFlQRV9TSElGVDsKICAgIFN0cmluZyBrZXl3b3JkID0KICAgICAgICBjb25zdCBbIm51bGwiLCAidHJ1ZSIsICJmYWxzZSIsICJceEVGXHhCQlx4QkYiXVtrZXl3b3JkVHlwZUluZGV4XTsKICAgIGFzc2VydChjb3VudCA8IGtleXdvcmQubGVuZ3RoKTsKICAgIGRvIHsKICAgICAgaWYgKHBvc2l0aW9uID09IGNodW5rRW5kKSB7CiAgICAgICAgdGhpcy5wYXJ0aWFsU3RhdGUgPQogICAgICAgICAgICBQQVJUSUFMX0tFWVdPUkQgfCBrZXl3b3JkVHlwZSB8IChjb3VudCA8PCBLV0RfQ09VTlRfU0hJRlQpOwogICAgICAgIHJldHVybiBjaHVua0VuZDsKICAgICAgfQogICAgICBpbnQgZXhwZWN0ZWRDaGFyID0ga2V5d29yZC5jb2RlVW5pdEF0KGNvdW50KTsKICAgICAgaWYgKGdldENoYXIocG9zaXRpb24pICE9IGV4cGVjdGVkQ2hhcikgewogICAgICAgIGlmIChjb3VudCA9PSAwKSB7CiAgICAgICAgICBhc3NlcnQoa2V5d29yZFR5cGUgPT0gS1dEX0JPTSk7CiAgICAgICAgICByZXR1cm4gcG9zaXRpb247CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWlsKHBvc2l0aW9uKTsKICAgICAgfQogICAgICBwb3NpdGlvbisrOwogICAgICBjb3VudCsrOwogICAgfSB3aGlsZSAoY291bnQgPCBrZXl3b3JkLmxlbmd0aCk7CiAgICBpZiAoa2V5d29yZFR5cGUgPT0gS1dEX05VTEwpIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlTnVsbCgpOwogICAgfSBlbHNlIGlmIChrZXl3b3JkVHlwZSAhPSBLV0RfQk9NKSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZUJvb2woa2V5d29yZFR5cGUgPT0gS1dEX1RSVUUpOwogICAgfQogICAgcmV0dXJuIHBvc2l0aW9uOwogIH0KCiAgLyoqIENvbnZlcnQgaGV4LWRpZ2l0IHRvIGl0cyB2YWx1ZS4gUmV0dXJucyAtMSBpZiBjaGFyIGlzIG5vdCBhIGhleCBkaWdpdC4gKi8KICBpbnQgcGFyc2VIZXhEaWdpdChpbnQgY2hhcikgewogICAgaW50IGRpZ2l0ID0gY2hhciBeIDB4MzA7CiAgICBpZiAoZGlnaXQgPD0gOSkgcmV0dXJuIGRpZ2l0OwogICAgaW50IGxldHRlciA9IChjaGFyIHwgMHgyMCkgXiAweDYwOwogICAgLy8gdmFsdWVzIDEgLi4gNiBhcmUgJ2EnIHRocm91Z2ggJ2YnCiAgICBpZiAobGV0dGVyIDw9IDYgJiYgbGV0dGVyID4gMCkgcmV0dXJuIGxldHRlciArIDk7CiAgICByZXR1cm4gLTE7CiAgfQoKICAvKioKICAgKiBQYXJzZXMgdGhlIGN1cnJlbnQgY2h1bmsgYXMgYSBjaHVuayBvZiBKU09OLgogICAqCiAgICogU3RhcnRzIHBhcnNpbmcgYXQgW3Bvc2l0aW9uXSBhbmQgY29udGludWVzIHVudGlsIFtjaHVua0VuZF0uCiAgICogQ29udGludWVzIHBhcnNpbmcgd2hlcmUgdGhlIHByZXZpb3VzIGNodW5rIChpZiBhbnkpIGVuZGVkLgogICAqLwogIHZvaWQgcGFyc2UoaW50IHBvc2l0aW9uKSB7CiAgICBpbnQgbGVuZ3RoID0gY2h1bmtFbmQ7CiAgICBpZiAocGFydGlhbFN0YXRlICE9IE5PX1BBUlRJQUwpIHsKICAgICAgcG9zaXRpb24gPSBwYXJzZVBhcnRpYWwocG9zaXRpb24pOwogICAgICBpZiAocG9zaXRpb24gPT0gbGVuZ3RoKSByZXR1cm47CiAgICB9CiAgICBpbnQgc3RhdGUgPSB0aGlzLnN0YXRlOwogICAgd2hpbGUgKHBvc2l0aW9uIDwgbGVuZ3RoKSB7CiAgICAgIGludCBjaGFyID0gZ2V0Q2hhcihwb3NpdGlvbik7CiAgICAgIHN3aXRjaCAoY2hhcikgewogICAgICAgIGNhc2UgU1BBQ0U6CiAgICAgICAgY2FzZSBDQVJSSUFHRV9SRVRVUk46CiAgICAgICAgY2FzZSBORVdMSU5FOgogICAgICAgIGNhc2UgVEFCOgogICAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgUVVPVEU6CiAgICAgICAgICBpZiAoKHN0YXRlICYgQUxMT1dfU1RSSU5HX01BU0spICE9IDApIHJldHVybiBmYWlsKHBvc2l0aW9uKTsKICAgICAgICAgIHN0YXRlIHw9IFZBTFVFX1JFQURfQklUUzsKICAgICAgICAgIHBvc2l0aW9uID0gcGFyc2VTdHJpbmcocG9zaXRpb24gKyAxKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTEJSQUNLRVQ6CiAgICAgICAgICBpZiAoKHN0YXRlICYgQUxMT1dfVkFMVUVfTUFTSykgIT0gMCkgcmV0dXJuIGZhaWwocG9zaXRpb24pOwogICAgICAgICAgbGlzdGVuZXIuYmVnaW5BcnJheSgpOwogICAgICAgICAgc2F2ZVN0YXRlKHN0YXRlKTsKICAgICAgICAgIHN0YXRlID0gU1RBVEVfQVJSQVlfRU1QVFk7CiAgICAgICAgICBwb3NpdGlvbisrOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBMQlJBQ0U6CiAgICAgICAgICBpZiAoKHN0YXRlICYgQUxMT1dfVkFMVUVfTUFTSykgIT0gMCkgcmV0dXJuIGZhaWwocG9zaXRpb24pOwogICAgICAgICAgbGlzdGVuZXIuYmVnaW5PYmplY3QoKTsKICAgICAgICAgIHNhdmVTdGF0ZShzdGF0ZSk7CiAgICAgICAgICBzdGF0ZSA9IFNUQVRFX09CSkVDVF9FTVBUWTsKICAgICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIENIQVJfbjoKICAgICAgICAgIGlmICgoc3RhdGUgJiBBTExPV19WQUxVRV9NQVNLKSAhPSAwKSByZXR1cm4gZmFpbChwb3NpdGlvbik7CiAgICAgICAgICBzdGF0ZSB8PSBWQUxVRV9SRUFEX0JJVFM7CiAgICAgICAgICBwb3NpdGlvbiA9IHBhcnNlTnVsbChwb3NpdGlvbik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIENIQVJfZjoKICAgICAgICAgIGlmICgoc3RhdGUgJiBBTExPV19WQUxVRV9NQVNLKSAhPSAwKSByZXR1cm4gZmFpbChwb3NpdGlvbik7CiAgICAgICAgICBzdGF0ZSB8PSBWQUxVRV9SRUFEX0JJVFM7CiAgICAgICAgICBwb3NpdGlvbiA9IHBhcnNlRmFsc2UocG9zaXRpb24pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBDSEFSX3Q6CiAgICAgICAgICBpZiAoKHN0YXRlICYgQUxMT1dfVkFMVUVfTUFTSykgIT0gMCkgcmV0dXJuIGZhaWwocG9zaXRpb24pOwogICAgICAgICAgc3RhdGUgfD0gVkFMVUVfUkVBRF9CSVRTOwogICAgICAgICAgcG9zaXRpb24gPSBwYXJzZVRydWUocG9zaXRpb24pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBDT0xPTjoKICAgICAgICAgIGlmIChzdGF0ZSAhPSBTVEFURV9PQkpFQ1RfS0VZKSByZXR1cm4gZmFpbChwb3NpdGlvbik7CiAgICAgICAgICBsaXN0ZW5lci5wcm9wZXJ0eU5hbWUoKTsKICAgICAgICAgIHN0YXRlID0gU1RBVEVfT0JKRUNUX0NPTE9OOwogICAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQ09NTUE6CiAgICAgICAgICBpZiAoc3RhdGUgPT0gU1RBVEVfT0JKRUNUX1ZBTFVFKSB7CiAgICAgICAgICAgIGxpc3RlbmVyLnByb3BlcnR5VmFsdWUoKTsKICAgICAgICAgICAgc3RhdGUgPSBTVEFURV9PQkpFQ1RfQ09NTUE7CiAgICAgICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09IFNUQVRFX0FSUkFZX1ZBTFVFKSB7CiAgICAgICAgICAgIGxpc3RlbmVyLmFycmF5RWxlbWVudCgpOwogICAgICAgICAgICBzdGF0ZSA9IFNUQVRFX0FSUkFZX0NPTU1BOwogICAgICAgICAgICBwb3NpdGlvbisrOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGZhaWwocG9zaXRpb24pOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBSQlJBQ0tFVDoKICAgICAgICAgIGlmIChzdGF0ZSA9PSBTVEFURV9BUlJBWV9FTVBUWSkgewogICAgICAgICAgICBsaXN0ZW5lci5lbmRBcnJheSgpOwogICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBTVEFURV9BUlJBWV9WQUxVRSkgewogICAgICAgICAgICBsaXN0ZW5lci5hcnJheUVsZW1lbnQoKTsKICAgICAgICAgICAgbGlzdGVuZXIuZW5kQXJyYXkoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBmYWlsKHBvc2l0aW9uKTsKICAgICAgICAgIH0KICAgICAgICAgIHN0YXRlID0gcmVzdG9yZVN0YXRlKCkgfCBWQUxVRV9SRUFEX0JJVFM7CiAgICAgICAgICBwb3NpdGlvbisrOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBSQlJBQ0U6CiAgICAgICAgICBpZiAoc3RhdGUgPT0gU1RBVEVfT0JKRUNUX0VNUFRZKSB7CiAgICAgICAgICAgIGxpc3RlbmVyLmVuZE9iamVjdCgpOwogICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBTVEFURV9PQkpFQ1RfVkFMVUUpIHsKICAgICAgICAgICAgbGlzdGVuZXIucHJvcGVydHlWYWx1ZSgpOwogICAgICAgICAgICBsaXN0ZW5lci5lbmRPYmplY3QoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBmYWlsKHBvc2l0aW9uKTsKICAgICAgICAgIH0KICAgICAgICAgIHN0YXRlID0gcmVzdG9yZVN0YXRlKCkgfCBWQUxVRV9SRUFEX0JJVFM7CiAgICAgICAgICBwb3NpdGlvbisrOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGlmICgoc3RhdGUgJiBBTExPV19WQUxVRV9NQVNLKSAhPSAwKSBmYWlsKHBvc2l0aW9uKTsKICAgICAgICAgIHN0YXRlIHw9IFZBTFVFX1JFQURfQklUUzsKICAgICAgICAgIHBvc2l0aW9uID0gcGFyc2VOdW1iZXIoY2hhciwgcG9zaXRpb24pOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTsKICB9CgogIC8qKgogICAqIFBhcnNlcyBhICJ0cnVlIiBsaXRlcmFsIHN0YXJ0aW5nIGF0IFtwb3NpdGlvbl0uCiAgICoKICAgKiBUaGUgY2hhcmFjdGVyIGBzb3VyY2VbcG9zaXRpb25dYCBtdXN0IGJlICJ0Ii4KICAgKi8KICBpbnQgcGFyc2VUcnVlKGludCBwb3NpdGlvbikgewogICAgYXNzZXJ0KGdldENoYXIocG9zaXRpb24pID09IENIQVJfdCk7CiAgICBpZiAoY2h1bmtFbmQgPCBwb3NpdGlvbiArIDQpIHsKICAgICAgcmV0dXJuIHBhcnNlS2V5d29yZFByZWZpeChwb3NpdGlvbiwgInRydWUiLCBLV0RfVFJVRSk7CiAgICB9CiAgICBpZiAoZ2V0Q2hhcihwb3NpdGlvbiArIDEpICE9IENIQVJfciB8fAogICAgICAgIGdldENoYXIocG9zaXRpb24gKyAyKSAhPSBDSEFSX3UgfHwKICAgICAgICBnZXRDaGFyKHBvc2l0aW9uICsgMykgIT0gQ0hBUl9lKSB7CiAgICAgIHJldHVybiBmYWlsKHBvc2l0aW9uKTsKICAgIH0KICAgIGxpc3RlbmVyLmhhbmRsZUJvb2wodHJ1ZSk7CiAgICByZXR1cm4gcG9zaXRpb24gKyA0OwogIH0KCiAgLyoqCiAgICogUGFyc2VzIGEgImZhbHNlIiBsaXRlcmFsIHN0YXJ0aW5nIGF0IFtwb3NpdGlvbl0uCiAgICoKICAgKiBUaGUgY2hhcmFjdGVyIGBzb3VyY2VbcG9zaXRpb25dYCBtdXN0IGJlICJmIi4KICAgKi8KICBpbnQgcGFyc2VGYWxzZShpbnQgcG9zaXRpb24pIHsKICAgIGFzc2VydChnZXRDaGFyKHBvc2l0aW9uKSA9PSBDSEFSX2YpOwogICAgaWYgKGNodW5rRW5kIDwgcG9zaXRpb24gKyA1KSB7CiAgICAgIHJldHVybiBwYXJzZUtleXdvcmRQcmVmaXgocG9zaXRpb24sICJmYWxzZSIsIEtXRF9GQUxTRSk7CiAgICB9CiAgICBpZiAoZ2V0Q2hhcihwb3NpdGlvbiArIDEpICE9IENIQVJfYSB8fAogICAgICAgIGdldENoYXIocG9zaXRpb24gKyAyKSAhPSBDSEFSX2wgfHwKICAgICAgICBnZXRDaGFyKHBvc2l0aW9uICsgMykgIT0gQ0hBUl9zIHx8CiAgICAgICAgZ2V0Q2hhcihwb3NpdGlvbiArIDQpICE9IENIQVJfZSkgewogICAgICByZXR1cm4gZmFpbChwb3NpdGlvbik7CiAgICB9CiAgICBsaXN0ZW5lci5oYW5kbGVCb29sKGZhbHNlKTsKICAgIHJldHVybiBwb3NpdGlvbiArIDU7CiAgfQoKICAvKioKICAgKiBQYXJzZXMgYSAibnVsbCIgbGl0ZXJhbCBzdGFydGluZyBhdCBbcG9zaXRpb25dLgogICAqCiAgICogVGhlIGNoYXJhY3RlciBgc291cmNlW3Bvc2l0aW9uXWAgbXVzdCBiZSAibiIuCiAgICovCiAgaW50IHBhcnNlTnVsbChpbnQgcG9zaXRpb24pIHsKICAgIGFzc2VydChnZXRDaGFyKHBvc2l0aW9uKSA9PSBDSEFSX24pOwogICAgaWYgKGNodW5rRW5kIDwgcG9zaXRpb24gKyA0KSB7CiAgICAgIHJldHVybiBwYXJzZUtleXdvcmRQcmVmaXgocG9zaXRpb24sICJudWxsIiwgS1dEX05VTEwpOwogICAgfQogICAgaWYgKGdldENoYXIocG9zaXRpb24gKyAxKSAhPSBDSEFSX3UgfHwKICAgICAgICBnZXRDaGFyKHBvc2l0aW9uICsgMikgIT0gQ0hBUl9sIHx8CiAgICAgICAgZ2V0Q2hhcihwb3NpdGlvbiArIDMpICE9IENIQVJfbCkgewogICAgICByZXR1cm4gZmFpbChwb3NpdGlvbik7CiAgICB9CiAgICBsaXN0ZW5lci5oYW5kbGVOdWxsKCk7CiAgICByZXR1cm4gcG9zaXRpb24gKyA0OwogIH0KCiAgaW50IHBhcnNlS2V5d29yZFByZWZpeChpbnQgcG9zaXRpb24sIFN0cmluZyBjaGFycywgaW50IHR5cGUpIHsKICAgIGFzc2VydChnZXRDaGFyKHBvc2l0aW9uKSA9PSBjaGFycy5jb2RlVW5pdEF0KDApKTsKICAgIGludCBsZW5ndGggPSBjaHVua0VuZDsKICAgIGludCBzdGFydCA9IHBvc2l0aW9uOwogICAgaW50IGNvdW50ID0gMTsKICAgIHdoaWxlICgrK3Bvc2l0aW9uIDwgbGVuZ3RoKSB7CiAgICAgIGludCBjaGFyID0gZ2V0Q2hhcihwb3NpdGlvbik7CiAgICAgIGlmIChjaGFyICE9IGNoYXJzLmNvZGVVbml0QXQoY291bnQpKSByZXR1cm4gZmFpbChzdGFydCk7CiAgICAgIGNvdW50Kys7CiAgICB9CiAgICB0aGlzLnBhcnRpYWxTdGF0ZSA9IFBBUlRJQUxfS0VZV09SRCB8IHR5cGUgfCAoY291bnQgPDwgS1dEX0NPVU5UX1NISUZUKTsKICAgIHJldHVybiBsZW5ndGg7CiAgfQoKICAvKioKICAgKiBQYXJzZXMgYSBzdHJpbmcgdmFsdWUuCiAgICoKICAgKiBJbml0aWFsIFtwb3NpdGlvbl0gaXMgcmlnaHQgYWZ0ZXIgdGhlIGluaXRpYWwgcXVvdGUuCiAgICogUmV0dXJuZWQgcG9zaXRpb24gcmlnaHQgYWZ0ZXIgdGhlIGZpbmFsIHF1b3RlLgogICAqLwogIGludCBwYXJzZVN0cmluZyhpbnQgcG9zaXRpb24pIHsKICAgIC8vIEZvcm1hdDogJyInKFteXHgwMC1ceDFmXFxcIl18J1xcJ1tiZm5ydC9cXCJdKSonIicKICAgIC8vIEluaXRpYWwgcG9zaXRpb24gaXMgcmlnaHQgYWZ0ZXIgZmlyc3QgJyInLgogICAgaW50IHN0YXJ0ID0gcG9zaXRpb247CiAgICBpbnQgZW5kID0gY2h1bmtFbmQ7CiAgICBpbnQgYml0cyA9IDA7CiAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKICAgICAgaW50IGNoYXIgPSBnZXRDaGFyKHBvc2l0aW9uKyspOwogICAgICBiaXRzIHw9IGNoYXI7IC8vIEluY2x1ZGVzIGZpbmFsICciJywgYnV0IHRoYXQgbmV2ZXIgbWF0dGVycy4KICAgICAgLy8gQkFDS1NMQVNIIGlzIGxhcmdlciB0aGFuIFFVT1RFIGFuZCBTUEFDRS4KICAgICAgaWYgKGNoYXIgPiBCQUNLU0xBU0gpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoY2hhciA9PSBCQUNLU0xBU0gpIHsKICAgICAgICBiZWdpblN0cmluZygpOwogICAgICAgIGludCBzbGljZUVuZCA9IHBvc2l0aW9uIC0gMTsKICAgICAgICBpZiAoc3RhcnQgPCBzbGljZUVuZCkgYWRkU2xpY2VUb1N0cmluZyhzdGFydCwgc2xpY2VFbmQpOwogICAgICAgIHJldHVybiBwYXJzZVN0cmluZ1RvQnVmZmVyKHNsaWNlRW5kKTsKICAgICAgfQogICAgICBpZiAoY2hhciA9PSBRVU9URSkgewogICAgICAgIGxpc3RlbmVyLmhhbmRsZVN0cmluZyhnZXRTdHJpbmcoc3RhcnQsIHBvc2l0aW9uIC0gMSwgYml0cykpOwogICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgICAgfQogICAgICBpZiAoY2hhciA8IFNQQUNFKSB7CiAgICAgICAgcmV0dXJuIGZhaWwocG9zaXRpb24gLSAxLCAiQ29udHJvbCBjaGFyYWN0ZXIgaW4gc3RyaW5nIik7CiAgICAgIH0KICAgIH0KICAgIGJlZ2luU3RyaW5nKCk7CiAgICBpZiAoc3RhcnQgPCBlbmQpIGFkZFNsaWNlVG9TdHJpbmcoc3RhcnQsIGVuZCk7CiAgICByZXR1cm4gY2h1bmtTdHJpbmcoU1RSX1BMQUlOKTsKICB9CgogIC8qKgogICAqIFNldHMgdXAgYSBwYXJ0aWFsIHN0cmluZyBzdGF0ZS4KICAgKgogICAqIFRoZSBzdGF0ZSBpcyBlaXRoZXIgbm90IGluc2lkZSBhbiBlc2NhcGUsIG9yIHJpZ2h0IGFmdGVyIGEgYmFja3NsYXNoLgogICAqIEZvciBwYXJ0aWFsIHN0cmluZ3MgZW5kaW5nIGluc2lkZSBhIFVuaWNvZGUgZXNjYXBlLCB1c2UKICAgKiBbY2h1bmtTdHJpbmdFc2NhcGVVXS4KICAgKi8KICBpbnQgY2h1bmtTdHJpbmcoaW50IHN0cmluZ1N0YXRlKSB7CiAgICBwYXJ0aWFsU3RhdGUgPSBQQVJUSUFMX1NUUklORyB8IHN0cmluZ1N0YXRlOwogICAgcmV0dXJuIGNodW5rRW5kOwogIH0KCiAgLyoqCiAgICogU2V0cyB1cCBhIHBhcnRpYWwgc3RyaW5nIHN0YXRlIGZvciBhIHBhcnRpYWxseSBwYXJzZWQgVW5pY29kZSBlc2NhcGUuCiAgICoKICAgKiBUaGUgcGFydGlhbCBzdHJpbmcgc3RhdGUgaW5jbHVkZXMgdGhlIGN1cnJlbnQgW2J1ZmZlcl0gYW5kIHRoZQogICAqIG51bWJlciBvZiBoZXggZGlnaXRzIG9mIHRoZSBVbmljb2RlIHNlZW4gc28gZmFyIChlLmcuLCBmb3IgYCJcdTMwJykKICAgKiB0aGUgc3RhdGUga25vd3MgdGhhdCB0d28gZGlnaXRzIGhhdmUgYmVlbiBzZWVuLCBhbmQgd2hhdCB0aGVpciB2YWx1ZSBpcy4KICAgKgogICAqIFJldHVybnMgW2NodW5rRW5kXSBzbyBpdCBjYW4gYmUgdXNlZCBhcyBwYXJ0IG9mIGEgcmV0dXJuIHN0YXRlbWVudC4KICAgKi8KICBpbnQgY2h1bmtTdHJpbmdFc2NhcGVVKGludCBjb3VudCwgaW50IHZhbHVlKSB7CiAgICBwYXJ0aWFsU3RhdGUgPSBQQVJUSUFMX1NUUklORyB8CiAgICAgICAgU1RSX1UgfAogICAgICAgIChjb3VudCA8PCBTVFJfVV9DT1VOVF9TSElGVCkgfAogICAgICAgICh2YWx1ZSA8PCBTVFJfVV9WQUxVRV9TSElGVCk7CiAgICByZXR1cm4gY2h1bmtFbmQ7CiAgfQoKICAvKioKICAgKiBQYXJzZXMgdGhlIHJlbWFpbmRlciBvZiBhIHN0cmluZyBsaXRlcmFsIGludG8gYSBidWZmZXIuCiAgICoKICAgKiBUaGUgYnVmZmVyIGlzIHN0b3JlZCBpbiBbYnVmZmVyXSBhbmQgaXRzIHVuZGVybHlpbmcgZm9ybWF0IGRlcGVuZHMgb24KICAgKiB0aGUgaW5wdXQgY2h1bmsgdHlwZS4gRm9yIGV4YW1wbGUgVVRGLTggZGVjb2RpbmcgaGFwcGVucyBpbiB0aGUKICAgKiBidWZmZXIsIG5vdCBpbiB0aGUgcGFyc2VyLCBzaW5jZSBhbGwgc2lnbmlmaWNhbnQgSlNPTiBjaGFyYWN0ZXJzIGFyZSBBU0NJSS4KICAgKgogICAqIFRoaXMgZnVuY3Rpb24gc2NhbnMgdGhyb3VnaCB0aGUgc3RyaW5nIGxpdGVyYWwgZm9yIGVzY2FwZXMsIGFuZCBjb3BpZXMKICAgKiBzbGljZXMgb2Ygbm9uLWVzY2FwZSBjaGFyYWN0ZXJzIHVzaW5nIFthZGRTbGljZVRvU3RyaW5nXS4KICAgKi8KICBpbnQgcGFyc2VTdHJpbmdUb0J1ZmZlcihpbnQgcG9zaXRpb24pIHsKICAgIGludCBlbmQgPSBjaHVua0VuZDsKICAgIGludCBzdGFydCA9IHBvc2l0aW9uOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgaWYgKHBvc2l0aW9uID09IGVuZCkgewogICAgICAgIGlmIChwb3NpdGlvbiA+IHN0YXJ0KSB7CiAgICAgICAgICBhZGRTbGljZVRvU3RyaW5nKHN0YXJ0LCBwb3NpdGlvbik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBjaHVua1N0cmluZyhTVFJfUExBSU4pOwogICAgICB9CiAgICAgIGludCBjaGFyID0gZ2V0Q2hhcihwb3NpdGlvbisrKTsKICAgICAgaWYgKGNoYXIgPiBCQUNLU0xBU0gpIGNvbnRpbnVlOwogICAgICBpZiAoY2hhciA8IFNQQUNFKSB7CiAgICAgICAgcmV0dXJuIGZhaWwocG9zaXRpb24gLSAxKTsgLy8gQ29udHJvbCBjaGFyYWN0ZXIgaW4gc3RyaW5nLgogICAgICB9CiAgICAgIGlmIChjaGFyID09IFFVT1RFKSB7CiAgICAgICAgaW50IHF1b3RlUG9zaXRpb24gPSBwb3NpdGlvbiAtIDE7CiAgICAgICAgaWYgKHF1b3RlUG9zaXRpb24gPiBzdGFydCkgewogICAgICAgICAgYWRkU2xpY2VUb1N0cmluZyhzdGFydCwgcXVvdGVQb3NpdGlvbik7CiAgICAgICAgfQogICAgICAgIGxpc3RlbmVyLmhhbmRsZVN0cmluZyhlbmRTdHJpbmcoKSk7CiAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwogICAgICB9CiAgICAgIGlmIChjaGFyICE9IEJBQ0tTTEFTSCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIC8vIEhhbmRsZSBlc2NhcGUuCiAgICAgIGlmIChwb3NpdGlvbiAtIDEgPiBzdGFydCkgewogICAgICAgIGFkZFNsaWNlVG9TdHJpbmcoc3RhcnQsIHBvc2l0aW9uIC0gMSk7CiAgICAgIH0KICAgICAgaWYgKHBvc2l0aW9uID09IGVuZCkgcmV0dXJuIGNodW5rU3RyaW5nKFNUUl9FU0NBUEUpOwogICAgICBwb3NpdGlvbiA9IHBhcnNlU3RyaW5nRXNjYXBlKHBvc2l0aW9uKTsKICAgICAgaWYgKHBvc2l0aW9uID09IGVuZCkgcmV0dXJuIHBvc2l0aW9uOwogICAgICBzdGFydCA9IHBvc2l0aW9uOwogICAgfQogICAgcmV0dXJuIC0xOyAvLyBVTlJFQUNIQUJMRS4KICB9CgogIC8qKgogICAqIFBhcnNlIGEgc3RyaW5nIGVzY2FwZS4KICAgKgogICAqIFBvc2l0aW9uIGlzIHJpZ2h0IGFmdGVyIHRoZSBpbml0aWFsIGJhY2tzbGFzaC4KICAgKiBUaGUgZm9sbG93aW5nIGVzY2FwZSBpcyBwYXJzZWQgaW50byBhIGNoYXJhY3RlciBjb2RlIHdoaWNoIGlzIGFkZGVkIHRvCiAgICogdGhlIGN1cnJlbnQgc3RyaW5nIGJ1ZmZlciB1c2luZyBbYWRkQ2hhclRvU3RyaW5nXS4KICAgKgogICAqIFJldHVybnMgcG9zaXRpb24gYWZ0ZXIgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIHRoZSBlc2NhcGUuCiAgICovCiAgaW50IHBhcnNlU3RyaW5nRXNjYXBlKGludCBwb3NpdGlvbikgewogICAgaW50IGNoYXIgPSBnZXRDaGFyKHBvc2l0aW9uKyspOwogICAgaW50IGxlbmd0aCA9IGNodW5rRW5kOwogICAgc3dpdGNoIChjaGFyKSB7CiAgICAgIGNhc2UgQ0hBUl9iOgogICAgICAgIGNoYXIgPSBCQUNLU1BBQ0U7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ0hBUl9mOgogICAgICAgIGNoYXIgPSBGT1JNX0ZFRUQ7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ0hBUl9uOgogICAgICAgIGNoYXIgPSBORVdMSU5FOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENIQVJfcjoKICAgICAgICBjaGFyID0gQ0FSUklBR0VfUkVUVVJOOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENIQVJfdDoKICAgICAgICBjaGFyID0gVEFCOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFNMQVNIOgogICAgICBjYXNlIEJBQ0tTTEFTSDoKICAgICAgY2FzZSBRVU9URToKICAgICAgICBicmVhazsKICAgICAgY2FzZSBDSEFSX3U6CiAgICAgICAgaW50IGhleFN0YXJ0ID0gcG9zaXRpb24gLSAxOwogICAgICAgIGludCB2YWx1ZSA9IDA7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKICAgICAgICAgIGlmIChwb3NpdGlvbiA9PSBsZW5ndGgpIHJldHVybiBjaHVua1N0cmluZ0VzY2FwZVUoaSwgdmFsdWUpOwogICAgICAgICAgY2hhciA9IGdldENoYXIocG9zaXRpb24rKyk7CiAgICAgICAgICBpbnQgZGlnaXQgPSBjaGFyIF4gMHgzMDsKICAgICAgICAgIHZhbHVlICo9IDE2OwogICAgICAgICAgaWYgKGRpZ2l0IDw9IDkpIHsKICAgICAgICAgICAgdmFsdWUgKz0gZGlnaXQ7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkaWdpdCA9IChjaGFyIHwgMHgyMCkgLSBDSEFSX2E7CiAgICAgICAgICAgIGlmIChkaWdpdCA8IDAgfHwgZGlnaXQgPiA1KSB7CiAgICAgICAgICAgICAgcmV0dXJuIGZhaWwoaGV4U3RhcnQsICJJbnZhbGlkIHVuaWNvZGUgZXNjYXBlIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFsdWUgKz0gZGlnaXQgKyAxMDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2hhciA9IHZhbHVlOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGlmIChjaGFyIDwgU1BBQ0UpIHJldHVybiBmYWlsKHBvc2l0aW9uLCAiQ29udHJvbCBjaGFyYWN0ZXIgaW4gc3RyaW5nIik7CiAgICAgICAgcmV0dXJuIGZhaWwocG9zaXRpb24sICJVbnJlY29nbml6ZWQgc3RyaW5nIGVzY2FwZSIpOwogICAgfQogICAgYWRkQ2hhclRvU3RyaW5nKGNoYXIpOwogICAgaWYgKHBvc2l0aW9uID09IGxlbmd0aCkgcmV0dXJuIGNodW5rU3RyaW5nKFNUUl9QTEFJTik7CiAgICByZXR1cm4gcG9zaXRpb247CiAgfQoKICAvLy8gU2V0cyB1cCBhIHBhcnRpYWwgbnVtZXJhbCBzdGF0ZS4KICAvLy8gUmV0dXJucyBjaHVua0VuZCB0byBhbGxvdyBlYXN5IG9uZS1saW5lIGJhaWxvdXQgdGVzdHMuCiAgaW50IGJlZ2luQ2h1bmtOdW1iZXIoaW50IHN0YXRlLCBpbnQgc3RhcnQpIHsKICAgIGludCBlbmQgPSBjaHVua0VuZDsKICAgIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIHZhciBidWZmZXIgPSBuZXcgX051bWJlckJ1ZmZlcihsZW5ndGgpOwogICAgY29weUNoYXJzVG9MaXN0KHN0YXJ0LCBlbmQsIGJ1ZmZlci5saXN0LCAwKTsKICAgIGJ1ZmZlci5sZW5ndGggPSBsZW5ndGg7CiAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjsKICAgIHRoaXMucGFydGlhbFN0YXRlID0gUEFSVElBTF9OVU1FUkFMIHwgc3RhdGU7CiAgICByZXR1cm4gZW5kOwogIH0KCiAgdm9pZCBhZGROdW1iZXJDaHVuayhfTnVtYmVyQnVmZmVyIGJ1ZmZlciwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgb3ZlcmhlYWQpIHsKICAgIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIGludCBjb3VudCA9IGJ1ZmZlci5sZW5ndGg7CiAgICBpbnQgbmV3Q291bnQgPSBjb3VudCArIGxlbmd0aDsKICAgIGludCBuZXdDYXBhY2l0eSA9IG5ld0NvdW50ICsgb3ZlcmhlYWQ7CiAgICBidWZmZXIuZW5zdXJlQ2FwYWNpdHkobmV3Q2FwYWNpdHkpOwogICAgY29weUNoYXJzVG9MaXN0KHN0YXJ0LCBlbmQsIGJ1ZmZlci5saXN0LCBjb3VudCk7CiAgICBidWZmZXIubGVuZ3RoID0gbmV3Q291bnQ7CiAgfQoKICAvLyBDb250aW51ZXMgYW4gYWxyZWFkeSBjaHVua2VkIG51bWJlciBhY3Jvc3MgYW4gZW50aXJlIGNodW5rLgogIGludCBjb250aW51ZUNodW5rTnVtYmVyKGludCBzdGF0ZSwgaW50IHN0YXJ0LCBfTnVtYmVyQnVmZmVyIGJ1ZmZlcikgewogICAgaW50IGVuZCA9IGNodW5rRW5kOwogICAgYWRkTnVtYmVyQ2h1bmsoYnVmZmVyLCBzdGFydCwgZW5kLCBfTnVtYmVyQnVmZmVyLmtEZWZhdWx0T3ZlcmhlYWQpOwogICAgdGhpcy5idWZmZXIgPSBidWZmZXI7CiAgICB0aGlzLnBhcnRpYWxTdGF0ZSA9IFBBUlRJQUxfTlVNRVJBTCB8IHN0YXRlOwogICAgcmV0dXJuIGVuZDsKICB9CgogIGludCBmaW5pc2hDaHVua051bWJlcihpbnQgc3RhdGUsIGludCBzdGFydCwgaW50IGVuZCwgX051bWJlckJ1ZmZlciBidWZmZXIpIHsKICAgIGlmIChzdGF0ZSA9PSBOVU1fWkVSTykgewogICAgICBsaXN0ZW5lci5oYW5kbGVOdW1iZXIoMCk7CiAgICAgIHJldHVybiBlbmQ7CiAgICB9CiAgICBpZiAoZW5kID4gc3RhcnQpIHsKICAgICAgYWRkTnVtYmVyQ2h1bmsoYnVmZmVyLCBzdGFydCwgZW5kLCAwKTsKICAgIH0KICAgIGlmIChzdGF0ZSA9PSBOVU1fRElHSVQpIHsKICAgICAgbnVtIHZhbHVlID0gYnVmZmVyLnBhcnNlTnVtKCk7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU51bWJlcih2YWx1ZSk7CiAgICB9IGVsc2UgaWYgKHN0YXRlID09IE5VTV9ET1RfRElHSVQgfHwgc3RhdGUgPT0gTlVNX0VfRElHSVQpIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlTnVtYmVyKGJ1ZmZlci5wYXJzZURvdWJsZSgpKTsKICAgIH0gZWxzZSB7CiAgICAgIGZhaWwoY2h1bmtFbmQsICJVbnRlcm1pbmF0ZWQgbnVtYmVyIGxpdGVyYWwiKTsKICAgIH0KICAgIHJldHVybiBlbmQ7CiAgfQoKICBpbnQgcGFyc2VOdW1iZXIoaW50IGNoYXIsIGludCBwb3NpdGlvbikgewogICAgLy8gQWxzbyBjYWxsZWQgb24gYW55IHVuZXhwZWN0ZWQgY2hhcmFjdGVyLgogICAgLy8gRm9ybWF0OgogICAgLy8gICctJz8oJzAnfFsxLTldWzAtOV0qKSgnLidbMC05XSspPyhbZUVdWystXT9bMC05XSspPwogICAgaW50IHN0YXJ0ID0gcG9zaXRpb247CiAgICBpbnQgbGVuZ3RoID0gY2h1bmtFbmQ7CiAgICAvLyBDb2xsZWN0cyBhbiBpbnQgdmFsdWUgd2hpbGUgcGFyc2luZy4gVXNlZCBmb3IgYm90aCBhbiBpbnRlZ2VyIGxpdGVyYWwsCiAgICAvLyBhbmQgdGhlIGV4cG9uZW50IHBhcnQgb2YgYSBkb3VibGUgbGl0ZXJhbC4KICAgIC8vIFN0b3JlZCBhcyBuZWdhdGl2ZSB0byBlbnN1cmUgd2UgY2FuIHJlcHJlc2VudCAtMl42My4KICAgIGludCBpbnRWYWx1ZSA9IDA7CiAgICBkb3VibGUgZG91YmxlVmFsdWUgPSAwLjA7IC8vIENvbGxlY3QgZG91YmxlIHZhbHVlIHdoaWxlIHBhcnNpbmcuCiAgICAvLyAxIGlmIHRoZXJlIGlzIG5vIGxlYWRpbmcgLSwgLTEgaWYgdGhlcmUgaXMuCiAgICBpbnQgc2lnbiA9IDE7CiAgICBib29sIGlzRG91YmxlID0gZmFsc2U7CiAgICAvLyBCcmVhayB0aGlzIGJsb2NrIHdoZW4gdGhlIGVuZCBvZiB0aGUgbnVtYmVyIGxpdGVyYWwgaXMgcmVhY2hlZC4KICAgIC8vIEF0IHRoYXQgdGltZSwgcG9zaXRpb24gcG9pbnRzIHRvIHRoZSBuZXh0IGNoYXJhY3RlciwgYW5kIGlzRG91YmxlCiAgICAvLyBpcyBzZXQgaWYgdGhlIGxpdGVyYWwgY29udGFpbnMgYSBkZWNpbWFsIHBvaW50IG9yIGFuIGV4cG9uZW50aWFsLgogICAgaWYgKGNoYXIgPT0gTUlOVVMpIHsKICAgICAgc2lnbiA9IC0xOwogICAgICBwb3NpdGlvbisrOwogICAgICBpZiAocG9zaXRpb24gPT0gbGVuZ3RoKSByZXR1cm4gYmVnaW5DaHVua051bWJlcihOVU1fU0lHTiwgc3RhcnQpOwogICAgICBjaGFyID0gZ2V0Q2hhcihwb3NpdGlvbik7CiAgICB9CiAgICBpbnQgZGlnaXQgPSBjaGFyIF4gQ0hBUl8wOwogICAgaWYgKGRpZ2l0ID4gOSkgewogICAgICBpZiAoc2lnbiA8IDApIHsKICAgICAgICBmYWlsKHBvc2l0aW9uLCAiTWlzc2luZyBleHBlY3RlZCBkaWdpdCIpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIElmIGl0IGRvZXNuJ3QgZXZlbiBzdGFydCBvdXQgYXMgYSBudW1lcmFsLgogICAgICAgIGZhaWwocG9zaXRpb24pOwogICAgICB9CiAgICB9CiAgICBpZiAoZGlnaXQgPT0gMCkgewogICAgICBwb3NpdGlvbisrOwogICAgICBpZiAocG9zaXRpb24gPT0gbGVuZ3RoKSByZXR1cm4gYmVnaW5DaHVua051bWJlcihOVU1fWkVSTywgc3RhcnQpOwogICAgICBjaGFyID0gZ2V0Q2hhcihwb3NpdGlvbik7CiAgICAgIGRpZ2l0ID0gY2hhciBeIENIQVJfMDsKICAgICAgLy8gSWYgc3RhcnRpbmcgd2l0aCB6ZXJvLCBuZXh0IGNoYXJhY3RlciBtdXN0IG5vdCBiZSBkaWdpdC4KICAgICAgaWYgKGRpZ2l0IDw9IDkpIGZhaWwocG9zaXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgaW50IGRpZ2l0Q291bnQgPSAwOwogICAgICBkbyB7CiAgICAgICAgaWYgKGRpZ2l0Q291bnQgPj0gMTgpIHsKICAgICAgICAgIC8vIENoZWNrIGZvciBvdmVyZmxvdy4KICAgICAgICAgIC8vIElzIDEgaWYgZGlnaXQgaXMgOCBvciA5IGFuZCBzaWduID09IDAsIG9yIGRpZ2l0IGlzIDkgYW5kIHNpZ24gPCAwOwogICAgICAgICAgaW50IGhpZ2hEaWdpdCA9IGRpZ2l0ID4+IDM7CiAgICAgICAgICBpZiAoc2lnbiA8IDApIGhpZ2hEaWdpdCAmPSBkaWdpdDsKICAgICAgICAgIGlmIChkaWdpdENvdW50ID09IDE5IHx8IGludFZhbHVlIC0gaGlnaERpZ2l0IDwgLTkyMjMzNzIwMzY4NTQ3NzU4MCkgewogICAgICAgICAgICBpc0RvdWJsZSA9IHRydWU7CiAgICAgICAgICAgIC8vIEJpZyB2YWx1ZSB0aGF0IHdlIGtub3cgaXMgbm90IHRydXN0ZWQgdG8gYmUgZXhhY3QgbGF0ZXIsCiAgICAgICAgICAgIC8vIGZvcmNpbmcgcmVwYXJzaW5nIHVzaW5nIGBkb3VibGUucGFyc2VgLgogICAgICAgICAgICBkb3VibGVWYWx1ZSA9IDkyMjMzNzIwMzY4NTQ3NzU4MDguMDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaW50VmFsdWUgPSAxMCAqIGludFZhbHVlIC0gZGlnaXQ7CiAgICAgICAgZGlnaXRDb3VudCsrOwogICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgaWYgKHBvc2l0aW9uID09IGxlbmd0aCkgcmV0dXJuIGJlZ2luQ2h1bmtOdW1iZXIoTlVNX0RJR0lULCBzdGFydCk7CiAgICAgICAgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICAgIGRpZ2l0ID0gY2hhciBeIENIQVJfMDsKICAgICAgfSB3aGlsZSAoZGlnaXQgPD0gOSk7CiAgICB9CiAgICBpZiAoY2hhciA9PSBERUNJTUFMUE9JTlQpIHsKICAgICAgaWYgKCFpc0RvdWJsZSkgewogICAgICAgIGlzRG91YmxlID0gdHJ1ZTsKICAgICAgICBkb3VibGVWYWx1ZSA9IChpbnRWYWx1ZSA9PSAwKSA/IDAuMCA6IC1pbnRWYWx1ZS50b0RvdWJsZSgpOwogICAgICB9CiAgICAgIGludFZhbHVlID0gMDsKICAgICAgcG9zaXRpb24rKzsKICAgICAgaWYgKHBvc2l0aW9uID09IGxlbmd0aCkgcmV0dXJuIGJlZ2luQ2h1bmtOdW1iZXIoTlVNX0RPVCwgc3RhcnQpOwogICAgICBjaGFyID0gZ2V0Q2hhcihwb3NpdGlvbik7CiAgICAgIGRpZ2l0ID0gY2hhciBeIENIQVJfMDsKICAgICAgaWYgKGRpZ2l0ID4gOSkgZmFpbChwb3NpdGlvbik7CiAgICAgIGRvIHsKICAgICAgICBkb3VibGVWYWx1ZSA9IDEwLjAgKiBkb3VibGVWYWx1ZSArIGRpZ2l0OwogICAgICAgIGludFZhbHVlIC09IDE7CiAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICBpZiAocG9zaXRpb24gPT0gbGVuZ3RoKSByZXR1cm4gYmVnaW5DaHVua051bWJlcihOVU1fRE9UX0RJR0lULCBzdGFydCk7CiAgICAgICAgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICAgIGRpZ2l0ID0gY2hhciBeIENIQVJfMDsKICAgICAgfSB3aGlsZSAoZGlnaXQgPD0gOSk7CiAgICB9CiAgICBpZiAoKGNoYXIgfCAweDIwKSA9PSBDSEFSX2UpIHsKICAgICAgaWYgKCFpc0RvdWJsZSkgewogICAgICAgIGlzRG91YmxlID0gdHJ1ZTsKICAgICAgICBkb3VibGVWYWx1ZSA9IChpbnRWYWx1ZSA9PSAwKSA/IDAuMCA6IC1pbnRWYWx1ZS50b0RvdWJsZSgpOwogICAgICAgIGludFZhbHVlID0gMDsKICAgICAgfQogICAgICBwb3NpdGlvbisrOwogICAgICBpZiAocG9zaXRpb24gPT0gbGVuZ3RoKSByZXR1cm4gYmVnaW5DaHVua051bWJlcihOVU1fRSwgc3RhcnQpOwogICAgICBjaGFyID0gZ2V0Q2hhcihwb3NpdGlvbik7CiAgICAgIGludCBleHBTaWduID0gMTsKICAgICAgaW50IGV4cG9uZW50ID0gMDsKICAgICAgaWYgKCgoY2hhciArIDEpIHwgMikgPT0gMHgyZSAvKisgb3IgLSovKSB7CiAgICAgICAgZXhwU2lnbiA9IDB4MkMgLSBjaGFyOyAvLyAtMSBmb3IgTUlOVVMsICsxIGZvciBQTFVTCiAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICBpZiAocG9zaXRpb24gPT0gbGVuZ3RoKSByZXR1cm4gYmVnaW5DaHVua051bWJlcihOVU1fRV9TSUdOLCBzdGFydCk7CiAgICAgICAgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICB9CiAgICAgIGRpZ2l0ID0gY2hhciBeIENIQVJfMDsKICAgICAgaWYgKGRpZ2l0ID4gOSkgewogICAgICAgIGZhaWwocG9zaXRpb24sICJNaXNzaW5nIGV4cGVjdGVkIGRpZ2l0Iik7CiAgICAgIH0KICAgICAgYm9vbCBleHBvbmVudE92ZXJmbG93ID0gZmFsc2U7CiAgICAgIGRvIHsKICAgICAgICBleHBvbmVudCA9IDEwICogZXhwb25lbnQgKyBkaWdpdDsKICAgICAgICBpZiAoZXhwb25lbnQgPiA0MDApIGV4cG9uZW50T3ZlcmZsb3cgPSB0cnVlOwogICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgaWYgKHBvc2l0aW9uID09IGxlbmd0aCkgcmV0dXJuIGJlZ2luQ2h1bmtOdW1iZXIoTlVNX0VfRElHSVQsIHN0YXJ0KTsKICAgICAgICBjaGFyID0gZ2V0Q2hhcihwb3NpdGlvbik7CiAgICAgICAgZGlnaXQgPSBjaGFyIF4gQ0hBUl8wOwogICAgICB9IHdoaWxlIChkaWdpdCA8PSA5KTsKICAgICAgaWYgKGV4cG9uZW50T3ZlcmZsb3cpIHsKICAgICAgICBpZiAoZG91YmxlVmFsdWUgPT0gMC4wIHx8IGV4cFNpZ24gPCAwKSB7CiAgICAgICAgICBsaXN0ZW5lci5oYW5kbGVOdW1iZXIoc2lnbiA8IDAgPyAtMC4wIDogMC4wKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbGlzdGVuZXIuaGFuZGxlTnVtYmVyKAogICAgICAgICAgICAgIHNpZ24gPCAwID8gZG91YmxlLm5lZ2F0aXZlSW5maW5pdHkgOiBkb3VibGUuaW5maW5pdHkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcG9zaXRpb247CiAgICAgIH0KICAgICAgaW50VmFsdWUgKz0gZXhwU2lnbiAqIGV4cG9uZW50OwogICAgfQogICAgaWYgKCFpc0RvdWJsZSkgewogICAgICBpbnQgYml0RmxhZyA9IC0oc2lnbiArIDEpID4+IDE7IC8vIDAgaWYgc2lnbiA9PSAtMSwgLTEgaWYgc2lnbiA9PSAxCiAgICAgIC8vIE5lZ2F0ZSBpZiBiaXRGbGFnIGlzIC0xIGJ5IGRvaW5nIH5pbnRWYWx1ZSArIDEKICAgICAgbGlzdGVuZXIuaGFuZGxlTnVtYmVyKChpbnRWYWx1ZSBeIGJpdEZsYWcpIC0gYml0RmxhZyk7CiAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgIH0KICAgIC8vIERvdWJsZSB2YWx1ZXMgYXQgb3IgYWJvdmUgdGhpcyB2YWx1ZSAoMiAqKiA1MykgbWF5IGhhdmUgbG9zdCBwcmVjaXNpb24uCiAgICAvLyBPbmx5IHRydXN0IHJlc3VsdHMgdGhhdCBhcmUgYmVsb3cgdGhpcyB2YWx1ZS4KICAgIGNvbnN0IGRvdWJsZSBtYXhFeGFjdERvdWJsZSA9IDkwMDcxOTkyNTQ3NDA5OTIuMDsKICAgIGlmIChkb3VibGVWYWx1ZSA8IG1heEV4YWN0RG91YmxlKSB7CiAgICAgIGludCBleHBvbmVudCA9IGludFZhbHVlOwogICAgICBkb3VibGUgc2lnbmVkTWFudGlzc2EgPSBkb3VibGVWYWx1ZSAqIHNpZ247CiAgICAgIGlmIChleHBvbmVudCA+PSAtMjIpIHsKICAgICAgICBpZiAoZXhwb25lbnQgPCAwKSB7CiAgICAgICAgICBsaXN0ZW5lci5oYW5kbGVOdW1iZXIoc2lnbmVkTWFudGlzc2EgLyBQT1dFUlNfT0ZfVEVOWy1leHBvbmVudF0pOwogICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwogICAgICAgIH0KICAgICAgICBpZiAoZXhwb25lbnQgPT0gMCkgewogICAgICAgICAgbGlzdGVuZXIuaGFuZGxlTnVtYmVyKHNpZ25lZE1hbnRpc3NhKTsKICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgICAgICB9CiAgICAgICAgaWYgKGV4cG9uZW50IDw9IDIyKSB7CiAgICAgICAgICBsaXN0ZW5lci5oYW5kbGVOdW1iZXIoc2lnbmVkTWFudGlzc2EgKiBQT1dFUlNfT0ZfVEVOW2V4cG9uZW50XSk7CiAgICAgICAgICByZXR1cm4gcG9zaXRpb247CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAvLyBJZiB0aGUgdmFsdWUgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgKy8tbWF4RXhhY3REb3VibGUgb3IKICAgIC8vIGV4cG9uZW50IGlzIG91dHNpZGUgdGhlIHJhbmdlICsvLTIyLCB0aGVuIHdlIGNhbid0IHRydXN0IHNpbXBsZSBkb3VibGUKICAgIC8vIGFyaXRobWV0aWMgdG8gZ2V0IHRoZSBleGFjdCByZXN1bHQsIHNvIHdlIHVzZSB0aGUgc3lzdGVtIGRvdWJsZSBwYXJzaW5nLgogICAgbGlzdGVuZXIuaGFuZGxlTnVtYmVyKHBhcnNlRG91YmxlKHN0YXJ0LCBwb3NpdGlvbikpOwogICAgcmV0dXJuIHBvc2l0aW9uOwogIH0KCiAgZmFpbChpbnQgcG9zaXRpb24sIFtTdHJpbmcgbWVzc2FnZV0pIHsKICAgIGlmIChtZXNzYWdlID09IG51bGwpIHsKICAgICAgbWVzc2FnZSA9ICJVbmV4cGVjdGVkIGNoYXJhY3RlciI7CiAgICAgIGlmIChwb3NpdGlvbiA9PSBjaHVua0VuZCkgbWVzc2FnZSA9ICJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dCI7CiAgICB9CiAgICB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKG1lc3NhZ2UsIGNodW5rLCBwb3NpdGlvbik7CiAgfQp9CgovKioKICogQ2h1bmtlZCBKU09OIHBhcnNlciB0aGF0IHBhcnNlcyBbU3RyaW5nXSBjaHVua3MuCiAqLwpjbGFzcyBfSnNvblN0cmluZ1BhcnNlciBleHRlbmRzIF9DaHVua2VkSnNvblBhcnNlcjxTdHJpbmc+IHsKICBTdHJpbmcgY2h1bms7CiAgaW50IGNodW5rRW5kOwoKICBfSnNvblN0cmluZ1BhcnNlcihfSnNvbkxpc3RlbmVyIGxpc3RlbmVyKSA6IHN1cGVyKGxpc3RlbmVyKTsKCiAgaW50IGdldENoYXIoaW50IHBvc2l0aW9uKSA9PiBjaHVuay5jb2RlVW5pdEF0KHBvc2l0aW9uKTsKCiAgU3RyaW5nIGdldFN0cmluZyhpbnQgc3RhcnQsIGludCBlbmQsIGludCBiaXRzKSB7CiAgICByZXR1cm4gY2h1bmsuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpOwogIH0KCiAgdm9pZCBiZWdpblN0cmluZygpIHsKICAgIHRoaXMuYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogIH0KCiAgdm9pZCBhZGRTbGljZVRvU3RyaW5nKGludCBzdGFydCwgaW50IGVuZCkgewogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyOwogICAgYnVmZmVyLndyaXRlKGNodW5rLnN1YnN0cmluZyhzdGFydCwgZW5kKSk7CiAgfQoKICB2b2lkIGFkZENoYXJUb1N0cmluZyhpbnQgY2hhckNvZGUpIHsKICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSB0aGlzLmJ1ZmZlcjsKICAgIGJ1ZmZlci53cml0ZUNoYXJDb2RlKGNoYXJDb2RlKTsKICB9CgogIFN0cmluZyBlbmRTdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gdGhpcy5idWZmZXI7CiAgICB0aGlzLmJ1ZmZlciA9IG51bGw7CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICB2b2lkIGNvcHlDaGFyc1RvTGlzdChpbnQgc3RhcnQsIGludCBlbmQsIExpc3QgdGFyZ2V0LCBpbnQgb2Zmc2V0KSB7CiAgICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHRhcmdldFtvZmZzZXQgKyBpXSA9IGNodW5rLmNvZGVVbml0QXQoc3RhcnQgKyBpKTsKICAgIH0KICB9CgogIGRvdWJsZSBwYXJzZURvdWJsZShpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIHJldHVybiBfcGFyc2VEb3VibGUoY2h1bmssIHN0YXJ0LCBlbmQpOwogIH0KfQoKQHBhdGNoCmNsYXNzIEpzb25EZWNvZGVyIHsKICBAcGF0Y2gKICBTdHJpbmdDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8T2JqZWN0PiBzaW5rKSB7CiAgICByZXR1cm4gbmV3IF9Kc29uU3RyaW5nRGVjb2RlclNpbmsodGhpcy5fcmV2aXZlciwgc2luayk7CiAgfQp9CgovKioKICogSW1wbGVtZW50cyB0aGUgY2h1bmtlZCBjb252ZXJzaW9uIGZyb20gYSBKU09OIHN0cmluZyB0byBpdHMgY29ycmVzcG9uZGluZwogKiBvYmplY3QuCiAqCiAqIFRoZSBzaW5rIG9ubHkgY3JlYXRlcyBvbmUgb2JqZWN0LCBidXQgaXRzIGlucHV0IGNhbiBiZSBjaHVua2VkLgogKi8KY2xhc3MgX0pzb25TdHJpbmdEZWNvZGVyU2luayBleHRlbmRzIFN0cmluZ0NvbnZlcnNpb25TaW5rQmFzZSB7CiAgX0pzb25TdHJpbmdQYXJzZXIgX3BhcnNlcjsKICBmaW5hbCBGdW5jdGlvbihPYmplY3Qga2V5LCBPYmplY3QgdmFsdWUpIF9yZXZpdmVyOwogIGZpbmFsIFNpbms8T2JqZWN0PiBfc2luazsKCiAgX0pzb25TdHJpbmdEZWNvZGVyU2luayh0aGlzLl9yZXZpdmVyLCB0aGlzLl9zaW5rKQogICAgICA6IF9wYXJzZXIgPSBfY3JlYXRlUGFyc2VyKF9yZXZpdmVyKTsKCiAgc3RhdGljIF9Kc29uU3RyaW5nUGFyc2VyIF9jcmVhdGVQYXJzZXIocmV2aXZlcikgewogICAgX0J1aWxkSnNvbkxpc3RlbmVyIGxpc3RlbmVyOwogICAgaWYgKHJldml2ZXIgPT0gbnVsbCkgewogICAgICBsaXN0ZW5lciA9IG5ldyBfQnVpbGRKc29uTGlzdGVuZXIoKTsKICAgIH0gZWxzZSB7CiAgICAgIGxpc3RlbmVyID0gbmV3IF9SZXZpdmVySnNvbkxpc3RlbmVyKHJldml2ZXIpOwogICAgfQogICAgcmV0dXJuIG5ldyBfSnNvblN0cmluZ1BhcnNlcihsaXN0ZW5lcik7CiAgfQoKICB2b2lkIGFkZFNsaWNlKFN0cmluZyBjaHVuaywgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgX3BhcnNlci5jaHVuayA9IGNodW5rOwogICAgX3BhcnNlci5jaHVua0VuZCA9IGVuZDsKICAgIF9wYXJzZXIucGFyc2Uoc3RhcnQpOwogICAgaWYgKGlzTGFzdCkgX3BhcnNlci5jbG9zZSgpOwogIH0KCiAgdm9pZCBhZGQoU3RyaW5nIGNodW5rKSB7CiAgICBhZGRTbGljZShjaHVuaywgMCwgY2h1bmsubGVuZ3RoLCBmYWxzZSk7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgX3BhcnNlci5jbG9zZSgpOwogICAgdmFyIGRlY29kZWQgPSBfcGFyc2VyLnJlc3VsdDsKICAgIF9zaW5rLmFkZChkZWNvZGVkKTsKICAgIF9zaW5rLmNsb3NlKCk7CiAgfQoKICBCeXRlQ29udmVyc2lvblNpbmsgYXNVdGY4U2luayhib29sIGFsbG93TWFsZm9ybWVkKSB7CiAgICBfcGFyc2VyID0gbnVsbDsKICAgIHJldHVybiBuZXcgX0pzb25VdGY4RGVjb2RlclNpbmsoX3Jldml2ZXIsIF9zaW5rLCBhbGxvd01hbGZvcm1lZCk7CiAgfQp9CgpjbGFzcyBfVXRmOFN0cmluZ0J1ZmZlciB7CiAgc3RhdGljIGNvbnN0IGludCBJTklUSUFMX0NBUEFDSVRZID0gMzI7CiAgLy8gUGFydGlhbCBzdGF0ZSBlbmNvZGluZy4KICBzdGF0aWMgY29uc3QgaW50IE1BU0tfVFdPX0JJVCA9IDB4MDM7CiAgc3RhdGljIGNvbnN0IGludCBNQVNLX1NJWkUgPSBNQVNLX1RXT19CSVQ7CiAgc3RhdGljIGNvbnN0IGludCBTSElGVF9NSVNTSU5HID0gMjsKICBzdGF0aWMgY29uc3QgaW50IFNISUZUX1ZBTFVFID0gNDsKICBzdGF0aWMgY29uc3QgaW50IE5PX1BBUlRJQUwgPSAwOwoKICAvLyBVVEYtOCBlbmNvZGluZyBhbmQgbGltaXRzLgogIHN0YXRpYyBjb25zdCBpbnQgTUFYX0FTQ0lJID0gMTI3OwogIHN0YXRpYyBjb25zdCBpbnQgTUFYX1RXT19CWVRFID0gMHg3ZmY7CiAgc3RhdGljIGNvbnN0IGludCBNQVhfVEhSRUVfQllURSA9IDB4ZmZmZjsKICBzdGF0aWMgY29uc3QgaW50IE1BWF9VTklDT0RFID0gMFgxMGZmZmY7CiAgc3RhdGljIGNvbnN0IGludCBNQVNLX1RXT19CWVRFID0gMHgxZjsKICBzdGF0aWMgY29uc3QgaW50IE1BU0tfVEhSRUVfQllURSA9IDB4MGY7CiAgc3RhdGljIGNvbnN0IGludCBNQVNLX0ZPVVJfQllURSA9IDB4MDc7CiAgc3RhdGljIGNvbnN0IGludCBNQVNLX0NPTlRJTlVFX1RBRyA9IDB4QzA7CiAgc3RhdGljIGNvbnN0IGludCBNQVNLX0NPTlRJTlVFX1ZBTFVFID0gMHgzZjsKICBzdGF0aWMgY29uc3QgaW50IENPTlRJTlVFX1RBRyA9IDB4ODA7CgogIC8vIFVURi0xNiBzdXJyb2dhdGUgZW5jb2RpbmcuCiAgc3RhdGljIGNvbnN0IGludCBMRUFEX1NVUlJPR0FURSA9IDB4RDgwMDsKICBzdGF0aWMgY29uc3QgaW50IFRBSUxfU1VSUk9HQVRFID0gMHhEQzAwOwogIHN0YXRpYyBjb25zdCBpbnQgU0hJRlRfSElHSF9TVVJST0dBVEUgPSAxMDsKICBzdGF0aWMgY29uc3QgaW50IE1BU0tfTE9XX1NVUlJPR0FURSA9IDB4M2ZmOwoKICAvLyBUaGUgaW50ZXJuYWwgYnVmZmVyIHN0YXJ0cyBhcyBVaW50OExpc3QsIGJ1dCBtYXkgY2hhbmdlIHRvIFVpbnQxNkxpc3QKICAvLyBpZiB0aGUgc3RyaW5nIGNvbnRhaW5zIG5vbi1MYXRpbi0xIGNoYXJhY3RlcnMuCiAgTGlzdDxpbnQ+IGJ1ZmZlciA9IG5ldyBVaW50OExpc3QoSU5JVElBTF9DQVBBQ0lUWSk7CiAgLy8gTnVtYmVyIG9mIGVsZW1lbnRzIGluIGJ1ZmZlci4KICBpbnQgbGVuZ3RoID0gMDsKICAvLyBQYXJ0aWFsIGRlY29kaW5nIHN0YXRlLCBmb3IgY2FzZXMgd2hlcmUgYW4gVVRGLTggc2VxdWVuY2VzIGlzIHNwbGl0CiAgLy8gYmV0d2VlbiBjaHVua3MuCiAgaW50IHBhcnRpYWxTdGF0ZSA9IE5PX1BBUlRJQUw7CiAgLy8gV2hldGhlciBhbGwgY2hhcmFjdGVycyBzbyBmYXIgaGF2ZSBiZWVuIExhdGluLTEgKGFuZCB0aGUgYnVmZmVyIGlzCiAgLy8gc3RpbGwgYSBVaW50OExpc3QpLiBTZXQgdG8gZmFsc2Ugd2hlbiB0aGUgZmlyc3Qgbm9uLUxhdGluLTEgY2hhcmFjdGVyCiAgLy8gaXMgZW5jb3VudGVyZWQsIGFuZCB0aGUgYnVmZmVyIGlzIHRoZW4gYWxzbyBjb252ZXJ0ZWQgdG8gYSBVaW50MTZMaXN0LgogIGJvb2wgaXNMYXRpbjEgPSB0cnVlOwogIC8vIElmIGFsbG93aW5nIG1hbGZvcm1lZCwgaW52YWxpZCBVVEYtOCBzZXF1ZW5jZXMgYXJlIGNvbnZlcnRlZCB0bwogIC8vIFUrRkZGRC4KICBib29sIGFsbG93TWFsZm9ybWVkOwoKICBfVXRmOFN0cmluZ0J1ZmZlcih0aGlzLmFsbG93TWFsZm9ybWVkKTsKCiAgLyoqCiAgICogUGFyc2UgdGhlIGNvbnRpbnVhdGlvbiBvZiBhIG11bHRpLWJ5dGUgVVRGLTggc2VxdWVuY2UuCiAgICoKICAgKiBQYXJzZSBbdXRmOF0gZnJvbSBbcG9zaXRpb25dIHRvIFtlbmRdLiBJZiB0aGUgc2VxdWVuY2UgZXh0ZW5kcyBiZXlvbmQKICAgKiBgZW5kYCwgc3RvcmUgdGhlIHBhcnRpYWwgc3RhdGUgaW4gW3BhcnRpYWxTdGF0ZV0sIGFuZCBjb250aW51ZSBmcm9tIHRoZXJlCiAgICogb24gdGhlIG5leHQgYWRkZWQgc2xpY2UuCiAgICoKICAgKiBUaGUgW3NpemVdIGlzIHRoZSBudW1iZXIgb2YgZXhwZWN0ZWQgY29udGludWF0aW9uIGJ5dGVzIHRvdGFsLAogICAqIGFuZCBbbWlzc2luZ10gaXMgdGhlIG51bWJlciBvZiByZW1haW5pbmcgY29udGludWF0aW9uIGJ5dGVzLgogICAqIFRoZSBbc2l6ZV0gaXMgdXNlZCB0byBkZXRlY3Qgb3ZlcmxvbmcgZW5jb2RpbmdzLgogICAqIFRoZSBbdmFsdWVdIGlzIHRoZSB2YWx1ZSBjb2xsZWN0ZWQgc28gZmFyLgogICAqCiAgICogV2hlbiBjYWxsZWQgYWZ0ZXIgc2VlaW5nIHRoZSBmaXJzdCBtdWx0aS1ieXRlIG1hcmtlciwgdGhlIFtzaXplXSBhbmQKICAgKiBbbWlzc2luZ10gdmFsdWVzIGFyZSBhbHdheXMgdGhlIHNhbWUsIGJ1dCB0aGV5IG1heSBkaWZmZXIgaWYgY29udGludWluZwogICAqIGFmdGVyIGEgcGFydGlhbCBzZXF1ZW5jZS4KICAgKi8KICBpbnQgYWRkQ29udGludWF0aW9uKAogICAgICBMaXN0PGludD4gdXRmOCwgaW50IHBvc2l0aW9uLCBpbnQgZW5kLCBpbnQgc2l6ZSwgaW50IG1pc3NpbmcsIGludCB2YWx1ZSkgewogICAgaW50IGNvZGVFbmQgPSBwb3NpdGlvbiArIG1pc3Npbmc7CiAgICBkbyB7CiAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpIHsKICAgICAgICBtaXNzaW5nID0gY29kZUVuZCAtIHBvc2l0aW9uOwogICAgICAgIHBhcnRpYWxTdGF0ZSA9CiAgICAgICAgICAgIHNpemUgfCAobWlzc2luZyA8PCBTSElGVF9NSVNTSU5HKSB8ICh2YWx1ZSA8PCBTSElGVF9WQUxVRSk7CiAgICAgICAgcmV0dXJuIGVuZDsKICAgICAgfQogICAgICBpbnQgY2hhciA9IHV0ZjhbcG9zaXRpb25dOwogICAgICBpZiAoKGNoYXIgJiBNQVNLX0NPTlRJTlVFX1RBRykgIT0gQ09OVElOVUVfVEFHKSB7CiAgICAgICAgaWYgKGFsbG93TWFsZm9ybWVkKSB7CiAgICAgICAgICBhZGRDaGFyQ29kZSgweEZGRkQpOwogICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwogICAgICAgIH0KICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKAogICAgICAgICAgICAiRXhwZWN0ZWQgVVRGLTggY29udGludWF0aW9uIGJ5dGUsICIKICAgICAgICAgICAgImZvdW5kICRjaGFyIiwKICAgICAgICAgICAgdXRmOCwKICAgICAgICAgICAgcG9zaXRpb24pOwogICAgICB9CiAgICAgIHZhbHVlID0gNjQgKiB2YWx1ZSArIChjaGFyICYgTUFTS19DT05USU5VRV9WQUxVRSk7CiAgICAgIHBvc2l0aW9uKys7CiAgICB9IHdoaWxlIChwb3NpdGlvbiA8IGNvZGVFbmQpOwogICAgaWYgKHZhbHVlIDw9IGNvbnN0IFswLCBNQVhfQVNDSUksIE1BWF9UV09fQllURSwgTUFYX1RIUkVFX0JZVEVdW3NpemVdKSB7CiAgICAgIC8vIE92ZXItbG9uZyBlbmNvZGluZy4KICAgICAgaWYgKGFsbG93TWFsZm9ybWVkKSB7CiAgICAgICAgdmFsdWUgPSAweEZGRkQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICAgIkludmFsaWQgZW5jb2Rpbmc6IFUrJHt2YWx1ZS50b1JhZGl4U3RyaW5nKDE2KS5wYWRMZWZ0KDQsICcwJyl9IgogICAgICAgICAgICAiIGVuY29kZWQgaW4gJHtzaXplICsgMX0gYnl0ZXMuIiwKICAgICAgICAgICAgdXRmOCwKICAgICAgICAgICAgcG9zaXRpb24gLSAxKTsKICAgICAgfQogICAgfQogICAgYWRkQ2hhckNvZGUodmFsdWUpOwogICAgcmV0dXJuIHBvc2l0aW9uOwogIH0KCiAgdm9pZCBhZGRDaGFyQ29kZShpbnQgY2hhcikgewogICAgYXNzZXJ0KGNoYXIgPj0gMCk7CiAgICBhc3NlcnQoY2hhciA8PSBNQVhfVU5JQ09ERSk7CiAgICBpZiAocGFydGlhbFN0YXRlICE9IE5PX1BBUlRJQUwpIHsKICAgICAgaWYgKGFsbG93TWFsZm9ybWVkKSB7CiAgICAgICAgcGFydGlhbFN0YXRlID0gTk9fUEFSVElBTDsKICAgICAgICBhZGRDaGFyQ29kZSgweEZGRkQpOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oIkluY29tcGxldGUgVVRGLTggc2VxdWVuY2UiKTsKICAgICAgfQogICAgfQogICAgaWYgKGlzTGF0aW4xICYmIGNoYXIgPiAweGZmKSB7CiAgICAgIF90bzE2Qml0KCk7IC8vIEFsc28gZ3Jvd3MgYSBsaXR0bGUgaWYgY2xvc2UgdG8gZnVsbC4KICAgIH0KICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGlmIChjaGFyIDw9IE1BWF9USFJFRV9CWVRFKSB7CiAgICAgIGlmIChsZW5ndGggPT0gYnVmZmVyLmxlbmd0aCkgX2dyb3coKTsKICAgICAgYnVmZmVyW2xlbmd0aF0gPSBjaGFyOwogICAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aCArIDE7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChsZW5ndGggKyAyID4gYnVmZmVyLmxlbmd0aCkgX2dyb3coKTsKICAgIGludCBiaXRzID0gY2hhciAtIDB4MTAwMDA7CiAgICBidWZmZXJbbGVuZ3RoXSA9IExFQURfU1VSUk9HQVRFIHwgKGJpdHMgPj4gU0hJRlRfSElHSF9TVVJST0dBVEUpOwogICAgYnVmZmVyW2xlbmd0aCArIDFdID0gVEFJTF9TVVJST0dBVEUgfCAoYml0cyAmIE1BU0tfTE9XX1NVUlJPR0FURSk7CiAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aCArIDI7CiAgfQoKICB2b2lkIF90bzE2Qml0KCkgewogICAgYXNzZXJ0KGlzTGF0aW4xKTsKICAgIFVpbnQxNkxpc3QgbmV3QnVmZmVyOwogICAgaWYgKChsZW5ndGggKyBJTklUSUFMX0NBUEFDSVRZKSAqIDIgPD0gYnVmZmVyLmxlbmd0aCkgewogICAgICAvLyBSZXVzZSBleGlzdGluZyBidWZmZXIgaWYgaXQncyBiaWcgZW5vdWdoLgogICAgICBuZXdCdWZmZXIgPSBuZXcgVWludDE2TGlzdC52aWV3KChidWZmZXIgYXMgVWludDhMaXN0KS5idWZmZXIpOwogICAgfSBlbHNlIHsKICAgICAgaW50IG5ld0NhcGFjaXR5ID0gYnVmZmVyLmxlbmd0aDsKICAgICAgaWYgKG5ld0NhcGFjaXR5IC0gbGVuZ3RoIDwgSU5JVElBTF9DQVBBQ0lUWSkgewogICAgICAgIG5ld0NhcGFjaXR5ID0gbGVuZ3RoICsgSU5JVElBTF9DQVBBQ0lUWTsKICAgICAgfQogICAgICBuZXdCdWZmZXIgPSBuZXcgVWludDE2TGlzdChuZXdDYXBhY2l0eSk7CiAgICB9CiAgICBuZXdCdWZmZXIuc2V0UmFuZ2UoMCwgbGVuZ3RoLCBidWZmZXIpOwogICAgYnVmZmVyID0gbmV3QnVmZmVyOwogICAgaXNMYXRpbjEgPSBmYWxzZTsKICB9CgogIHZvaWQgX2dyb3coKSB7CiAgICBpbnQgbmV3Q2FwYWNpdHkgPSBidWZmZXIubGVuZ3RoICogMjsKICAgIExpc3QgbmV3QnVmZmVyOwogICAgaWYgKGlzTGF0aW4xKSB7CiAgICAgIG5ld0J1ZmZlciA9IG5ldyBVaW50OExpc3QobmV3Q2FwYWNpdHkpOwogICAgfSBlbHNlIHsKICAgICAgbmV3QnVmZmVyID0gbmV3IFVpbnQxNkxpc3QobmV3Q2FwYWNpdHkpOwogICAgfQogICAgbmV3QnVmZmVyLnNldFJhbmdlKDAsIGxlbmd0aCwgYnVmZmVyKTsKICAgIGJ1ZmZlciA9IG5ld0J1ZmZlcjsKICB9CgogIHZvaWQgYWRkU2xpY2UoTGlzdDxpbnQ+IHV0ZjgsIGludCBwb3NpdGlvbiwgaW50IGVuZCkgewogICAgYXNzZXJ0KHBvc2l0aW9uIDwgZW5kKTsKICAgIGlmIChwYXJ0aWFsU3RhdGUgPiAwKSB7CiAgICAgIGludCBjb250aW51ZUJ5dGVDb3VudCA9IChwYXJ0aWFsU3RhdGUgJiBNQVNLX1RXT19CSVQpOwogICAgICBpbnQgbWlzc2luZyA9IChwYXJ0aWFsU3RhdGUgPj4gU0hJRlRfTUlTU0lORykgJiBNQVNLX1RXT19CSVQ7CiAgICAgIGludCB2YWx1ZSA9IHBhcnRpYWxTdGF0ZSA+PiBTSElGVF9WQUxVRTsKICAgICAgcGFydGlhbFN0YXRlID0gTk9fUEFSVElBTDsKICAgICAgcG9zaXRpb24gPSBhZGRDb250aW51YXRpb24oCiAgICAgICAgICB1dGY4LCBwb3NpdGlvbiwgZW5kLCBjb250aW51ZUJ5dGVDb3VudCwgbWlzc2luZywgdmFsdWUpOwogICAgICBpZiAocG9zaXRpb24gPT0gZW5kKSByZXR1cm47CiAgICB9CiAgICAvLyBLZWVwIGluZGV4IGFuZCBjYXBhY2l0eSBpbiBsb2NhbCB2YXJpYWJsZXMgd2hpbGUgbG9vcGluZyBvdmVyCiAgICAvLyBBU0NJSSBjaGFyYWN0ZXJzLgogICAgaW50IGluZGV4ID0gbGVuZ3RoOwogICAgaW50IGNhcGFjaXR5ID0gYnVmZmVyLmxlbmd0aDsKICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewogICAgICBpbnQgY2hhciA9IHV0ZjhbcG9zaXRpb25dOwogICAgICBpZiAoY2hhciA8PSBNQVhfQVNDSUkpIHsKICAgICAgICBpZiAoaW5kZXggPT0gY2FwYWNpdHkpIHsKICAgICAgICAgIGxlbmd0aCA9IGluZGV4OwogICAgICAgICAgX2dyb3coKTsKICAgICAgICAgIGNhcGFjaXR5ID0gYnVmZmVyLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgYnVmZmVyW2luZGV4KytdID0gY2hhcjsKICAgICAgICBwb3NpdGlvbisrOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGxlbmd0aCA9IGluZGV4OwogICAgICBpZiAoKGNoYXIgJiBNQVNLX0NPTlRJTlVFX1RBRykgPT0gQ09OVElOVUVfVEFHKSB7CiAgICAgICAgaWYgKGFsbG93TWFsZm9ybWVkKSB7CiAgICAgICAgICBhZGRDaGFyQ29kZSgweEZGRkQpOwogICAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICAgICAiVW5leHBlY3RlZCBVVEYtOCBjb250aW51YXRpb24gYnl0ZSIsIHV0ZjgsIHBvc2l0aW9uKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoY2hhciA8IDB4RTApIHsKICAgICAgICAvLyBDMC1ERgogICAgICAgIC8vIFR3by1ieXRlLgogICAgICAgIHBvc2l0aW9uID0gYWRkQ29udGludWF0aW9uKAogICAgICAgICAgICB1dGY4LCBwb3NpdGlvbiArIDEsIGVuZCwgMSwgMSwgY2hhciAmIE1BU0tfVFdPX0JZVEUpOwogICAgICB9IGVsc2UgaWYgKGNoYXIgPCAweEYwKSB7CiAgICAgICAgLy8gRTAtRUYKICAgICAgICAvLyBUaHJlZS1ieXRlLgogICAgICAgIHBvc2l0aW9uID0gYWRkQ29udGludWF0aW9uKAogICAgICAgICAgICB1dGY4LCBwb3NpdGlvbiArIDEsIGVuZCwgMiwgMiwgY2hhciAmIE1BU0tfVEhSRUVfQllURSk7CiAgICAgIH0gZWxzZSBpZiAoY2hhciA8IDB4RjgpIHsKICAgICAgICAvLyBGMC1GNwogICAgICAgIC8vIEZvdXItYnl0ZS4KICAgICAgICBwb3NpdGlvbiA9IGFkZENvbnRpbnVhdGlvbigKICAgICAgICAgICAgdXRmOCwgcG9zaXRpb24gKyAxLCBlbmQsIDMsIDMsIGNoYXIgJiBNQVNLX0ZPVVJfQllURSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGFsbG93TWFsZm9ybWVkKSB7CiAgICAgICAgICBhZGRDaGFyQ29kZSgweEZGRkQpOwogICAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICAgICAiSW52YWxpZCBVVEYtOCBieXRlOiAkY2hhciIsIHV0ZjgsIHBvc2l0aW9uKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaW5kZXggPSBsZW5ndGg7CiAgICAgIGNhcGFjaXR5ID0gYnVmZmVyLmxlbmd0aDsKICAgIH0KICAgIGxlbmd0aCA9IGluZGV4OwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgaWYgKHBhcnRpYWxTdGF0ZSAhPSBOT19QQVJUSUFMKSB7CiAgICAgIGlmIChhbGxvd01hbGZvcm1lZCkgewogICAgICAgIHBhcnRpYWxTdGF0ZSA9IE5PX1BBUlRJQUw7CiAgICAgICAgYWRkQ2hhckNvZGUoMHhGRkZEKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbnQgY29udGludWVCeXRlQ291bnQgPSAocGFydGlhbFN0YXRlICYgTUFTS19UV09fQklUKTsKICAgICAgICBpbnQgbWlzc2luZyA9IChwYXJ0aWFsU3RhdGUgPj4gU0hJRlRfTUlTU0lORykgJiBNQVNLX1RXT19CSVQ7CiAgICAgICAgaW50IHZhbHVlID0gcGFydGlhbFN0YXRlID4+IFNISUZUX1ZBTFVFOwogICAgICAgIGludCBzZWVuQnl0ZUNvdW50ID0gY29udGludWVCeXRlQ291bnQgLSBtaXNzaW5nICsgMTsKICAgICAgICBMaXN0IHNvdXJjZSA9IG5ldyBVaW50OExpc3Qoc2VlbkJ5dGVDb3VudCk7CiAgICAgICAgd2hpbGUgKHNlZW5CeXRlQ291bnQgPiAxKSB7CiAgICAgICAgICBzZWVuQnl0ZUNvdW50LS07CiAgICAgICAgICBzb3VyY2Vbc2VlbkJ5dGVDb3VudF0gPSBDT05USU5VRV9UQUcgfCAodmFsdWUgJiBNQVNLX0NPTlRJTlVFX1ZBTFVFKTsKICAgICAgICAgIHZhbHVlID4+PSA2OwogICAgICAgIH0KICAgICAgICBzb3VyY2VbMF0gPSB2YWx1ZSB8ICgweDNjMCA+PiAoY29udGludWVCeXRlQ291bnQgLSAxKSk7CiAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICAgIkluY29tcGxldGUgVVRGLTggc2VxdWVuY2UiLCBzb3VyY2UsIHNvdXJjZS5sZW5ndGgpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKICB9Cn0KCi8qKgogKiBDaHVua2VkIEpTT04gcGFyc2VyIHRoYXQgcGFyc2VzIFVURi04IGNodW5rcy4KICovCmNsYXNzIF9Kc29uVXRmOFBhcnNlciBleHRlbmRzIF9DaHVua2VkSnNvblBhcnNlcjxMaXN0PGludD4+IHsKICBmaW5hbCBib29sIGFsbG93TWFsZm9ybWVkOwogIExpc3Q8aW50PiBjaHVuazsKICBpbnQgY2h1bmtFbmQ7CgogIF9Kc29uVXRmOFBhcnNlcihfSnNvbkxpc3RlbmVyIGxpc3RlbmVyLCB0aGlzLmFsbG93TWFsZm9ybWVkKQogICAgICA6IHN1cGVyKGxpc3RlbmVyKSB7CiAgICAvLyBTdGFydHMgb3V0IGNoZWNraW5nIGZvciBhbiBvcHRpb25hbCBCT00gKEtXRF9CT00sIGNvdW50ID0gMCkuCiAgICBwYXJ0aWFsU3RhdGUgPQogICAgICAgIF9DaHVua2VkSnNvblBhcnNlci5QQVJUSUFMX0tFWVdPUkQgfCBfQ2h1bmtlZEpzb25QYXJzZXIuS1dEX0JPTTsKICB9CgogIGludCBnZXRDaGFyKGludCBwb3NpdGlvbikgPT4gY2h1bmtbcG9zaXRpb25dOwoKICBTdHJpbmcgZ2V0U3RyaW5nKGludCBzdGFydCwgaW50IGVuZCwgaW50IGJpdHMpIHsKICAgIGNvbnN0IGludCBtYXhBc2NpaUNoYXIgPSAweDdmOwogICAgaWYgKGJpdHMgPD0gbWF4QXNjaWlDaGFyKSB7CiAgICAgIHJldHVybiBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoY2h1bmssIHN0YXJ0LCBlbmQpOwogICAgfQogICAgYmVnaW5TdHJpbmcoKTsKICAgIGlmIChzdGFydCA8IGVuZCkgYWRkU2xpY2VUb1N0cmluZyhzdGFydCwgZW5kKTsKICAgIFN0cmluZyByZXN1bHQgPSBlbmRTdHJpbmcoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIGJlZ2luU3RyaW5nKCkgewogICAgdGhpcy5idWZmZXIgPSBuZXcgX1V0ZjhTdHJpbmdCdWZmZXIoYWxsb3dNYWxmb3JtZWQpOwogIH0KCiAgdm9pZCBhZGRTbGljZVRvU3RyaW5nKGludCBzdGFydCwgaW50IGVuZCkgewogICAgX1V0ZjhTdHJpbmdCdWZmZXIgYnVmZmVyID0gdGhpcy5idWZmZXI7CiAgICBidWZmZXIuYWRkU2xpY2UoY2h1bmssIHN0YXJ0LCBlbmQpOwogIH0KCiAgdm9pZCBhZGRDaGFyVG9TdHJpbmcoaW50IGNoYXJDb2RlKSB7CiAgICBfVXRmOFN0cmluZ0J1ZmZlciBidWZmZXIgPSB0aGlzLmJ1ZmZlcjsKICAgIGJ1ZmZlci5hZGRDaGFyQ29kZShjaGFyQ29kZSk7CiAgfQoKICBTdHJpbmcgZW5kU3RyaW5nKCkgewogICAgX1V0ZjhTdHJpbmdCdWZmZXIgYnVmZmVyID0gdGhpcy5idWZmZXI7CiAgICB0aGlzLmJ1ZmZlciA9IG51bGw7CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICB2b2lkIGNvcHlDaGFyc1RvTGlzdChpbnQgc3RhcnQsIGludCBlbmQsIExpc3QgdGFyZ2V0LCBpbnQgb2Zmc2V0KSB7CiAgICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICB0YXJnZXQuc2V0UmFuZ2Uob2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgsIGNodW5rLCBzdGFydCk7CiAgfQoKICBkb3VibGUgcGFyc2VEb3VibGUoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBTdHJpbmcgc3RyaW5nID0gZ2V0U3RyaW5nKHN0YXJ0LCBlbmQsIDB4N2YpOwogICAgcmV0dXJuIF9wYXJzZURvdWJsZShzdHJpbmcsIDAsIHN0cmluZy5sZW5ndGgpOwogIH0KfQoKZG91YmxlIF9wYXJzZURvdWJsZShTdHJpbmcgc291cmNlLCBpbnQgc3RhcnQsIGludCBlbmQpIG5hdGl2ZSAiRG91YmxlX3BhcnNlIjsKCi8qKgogKiBJbXBsZW1lbnRzIHRoZSBjaHVua2VkIGNvbnZlcnNpb24gZnJvbSBhIFVURi04IGVuY29kaW5nIG9mIEpTT04KICogdG8gaXRzIGNvcnJlc3BvbmRpbmcgb2JqZWN0LgogKi8KY2xhc3MgX0pzb25VdGY4RGVjb2RlclNpbmsgZXh0ZW5kcyBCeXRlQ29udmVyc2lvblNpbmtCYXNlIHsKICBmaW5hbCBfSnNvblV0ZjhQYXJzZXIgX3BhcnNlcjsKICBmaW5hbCBTaW5rPE9iamVjdD4gX3Npbms7CgogIF9Kc29uVXRmOERlY29kZXJTaW5rKHJldml2ZXIsIHRoaXMuX3NpbmssIGJvb2wgYWxsb3dNYWxmb3JtZWQpCiAgICAgIDogX3BhcnNlciA9IF9jcmVhdGVQYXJzZXIocmV2aXZlciwgYWxsb3dNYWxmb3JtZWQpOwoKICBzdGF0aWMgX0pzb25VdGY4UGFyc2VyIF9jcmVhdGVQYXJzZXIocmV2aXZlciwgYm9vbCBhbGxvd01hbGZvcm1lZCkgewogICAgX0J1aWxkSnNvbkxpc3RlbmVyIGxpc3RlbmVyOwogICAgaWYgKHJldml2ZXIgPT0gbnVsbCkgewogICAgICBsaXN0ZW5lciA9IG5ldyBfQnVpbGRKc29uTGlzdGVuZXIoKTsKICAgIH0gZWxzZSB7CiAgICAgIGxpc3RlbmVyID0gbmV3IF9SZXZpdmVySnNvbkxpc3RlbmVyKHJldml2ZXIpOwogICAgfQogICAgcmV0dXJuIG5ldyBfSnNvblV0ZjhQYXJzZXIobGlzdGVuZXIsIGFsbG93TWFsZm9ybWVkKTsKICB9CgogIHZvaWQgYWRkU2xpY2UoTGlzdDxpbnQ+IGNodW5rLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBfYWRkQ2h1bmsoY2h1bmssIHN0YXJ0LCBlbmQpOwogICAgaWYgKGlzTGFzdCkgY2xvc2UoKTsKICB9CgogIHZvaWQgYWRkKExpc3Q8aW50PiBjaHVuaykgewogICAgX2FkZENodW5rKGNodW5rLCAwLCBjaHVuay5sZW5ndGgpOwogIH0KCiAgdm9pZCBfYWRkQ2h1bmsoTGlzdDxpbnQ+IGNodW5rLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIF9wYXJzZXIuY2h1bmsgPSBjaHVuazsKICAgIF9wYXJzZXIuY2h1bmtFbmQgPSBlbmQ7CiAgICBfcGFyc2VyLnBhcnNlKHN0YXJ0KTsKICB9CgogIHZvaWQgY2xvc2UoKSB7CiAgICBfcGFyc2VyLmNsb3NlKCk7CiAgICB2YXIgZGVjb2RlZCA9IF9wYXJzZXIucmVzdWx0OwogICAgX3NpbmsuYWRkKGRlY29kZWQpOwogICAgX3NpbmsuY2xvc2UoKTsKICB9Cn0KCkBwYXRjaAppbnQgX3NjYW5PbmVCeXRlQ2hhcmFjdGVycyhMaXN0PGludD4gdW5pdHMsIGludCBmcm9tLCBpbnQgZW5kSW5kZXgpIHsKICBmaW5hbCB0byA9IGVuZEluZGV4OwoKICAvLyBTcGVjaWFsIGNhc2UgZm9yIF9VaW50OEFycmF5Vmlldy4KICBpZiAodW5pdHMgaXMgVWludDhMaXN0KSB7CiAgICBpZiAoZnJvbSA+PSAwICYmIHRvID49IDAgJiYgdG8gPD0gdW5pdHMubGVuZ3RoKSB7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bW9uIEFTQ0lJCi8vLyB1c2UgY2FzZXMuCi8vLwovLy8gRXhhbXBsZXM6Ci8vLyBgYGBkYXJ0Ci8vLyB2YXIgZW5jb2RlZCA9IGFzY2lpLmVuY29kZSgiVGhpcyBpcyBBU0NJSSEiKTsKLy8vIHZhciBkZWNvZGVkID0gYXNjaWkuZGVjb2RlKFsweDU0LCAweDY4LCAweDY5LCAweDczLCAweDIwLCAweDY5LCAweDczLAovLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAsIDB4NDEsIDB4NTMsIDB4NDMsIDB4NDksIDB4NDksIDB4MjFdKTsKLy8vIGBgYApjb25zdCBBc2NpaUNvZGVjIGFzY2lpID0gQXNjaWlDb2RlYygpOwoKY29uc3QgaW50IF9hc2NpaU1hc2sgPSAweDdGOwoKLy8vIEFuIFtBc2NpaUNvZGVjXSBhbGxvd3MgZW5jb2Rpbmcgc3RyaW5ncyBhcyBBU0NJSSBieXRlcwovLy8gYW5kIGRlY29kaW5nIEFTQ0lJIGJ5dGVzIHRvIHN0cmluZ3MuCmNsYXNzIEFzY2lpQ29kZWMgZXh0ZW5kcyBFbmNvZGluZyB7CiAgZmluYWwgYm9vbCBfYWxsb3dJbnZhbGlkOwoKICAvLy8gSW5zdGFudGlhdGVzIGEgbmV3IFtBc2NpaUNvZGVjXS4KICAvLy8KICAvLy8gSWYgW2FsbG93SW52YWxpZF0gaXMgdHJ1ZSwgdGhlIFtkZWNvZGVdIG1ldGhvZCBhbmQgdGhlIGNvbnZlcnRlcgogIC8vLyByZXR1cm5lZCBieSBbZGVjb2Rlcl0gd2lsbCBkZWZhdWx0IHRvIGFsbG93aW5nIGludmFsaWQgdmFsdWVzLgogIC8vLyBJZiBhbGxvd2luZyBpbnZhbGlkIHZhbHVlcywgdGhlIHZhbHVlcyB3aWxsIGJlIGRlY29kZWQgaW50byB0aGUgVW5pY29kZQogIC8vLyBSZXBsYWNlbWVudCBjaGFyYWN0ZXIgKFUrRkZGRCkuIElmIG5vdCwgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLgogIC8vLyBDYWxscyB0byB0aGUgW2RlY29kZV0gbWV0aG9kIGNhbiBjaG9vc2UgdG8gb3ZlcnJpZGUgdGhpcyBkZWZhdWx0LgogIC8vLwogIC8vLyBFbmNvZGVycyB3aWxsIG5vdCBhY2NlcHQgaW52YWxpZCAobm9uIEFTQ0lJKSBjaGFyYWN0ZXJzLgogIGNvbnN0IEFzY2lpQ29kZWMoe2Jvb2wgYWxsb3dJbnZhbGlkID0gZmFsc2V9KSA6IF9hbGxvd0ludmFsaWQgPSBhbGxvd0ludmFsaWQ7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGlzIGNvZGVjLCAidXMtYXNjaWkiLgogIFN0cmluZyBnZXQgbmFtZSA9PiAidXMtYXNjaWkiOwoKICBVaW50OExpc3QgZW5jb2RlKFN0cmluZyBzb3VyY2UpID0+IGVuY29kZXIuY29udmVydChzb3VyY2UpOwoKICAvLy8gRGVjb2RlcyB0aGUgQVNDSUkgW2J5dGVzXSAoYSBsaXN0IG9mIHVuc2lnbmVkIDctYml0IGludGVnZXJzKSB0byB0aGUKICAvLy8gY29ycmVzcG9uZGluZyBzdHJpbmcuCiAgLy8vCiAgLy8vIElmIFtieXRlc10gY29udGFpbnMgdmFsdWVzIHRoYXQgYXJlIG5vdCBpbiB0aGUgcmFuZ2UgMCAuLiAxMjcsIHRoZSBkZWNvZGVyCiAgLy8vIHdpbGwgZXZlbnR1YWxseSB0aHJvdyBhIFtGb3JtYXRFeGNlcHRpb25dLgogIC8vLwogIC8vLyBJZiBbYWxsb3dJbnZhbGlkXSBpcyBub3QgcHJvdmlkZWQsIGl0IGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSB1c2VkIHRvIGNyZWF0ZQogIC8vLyB0aGlzIFtBc2NpaUNvZGVjXS4KICBTdHJpbmcgZGVjb2RlKExpc3Q8aW50PiBieXRlcywge2Jvb2wgYWxsb3dJbnZhbGlkfSkgewogICAgYWxsb3dJbnZhbGlkID8/PSBfYWxsb3dJbnZhbGlkOwogICAgaWYgKGFsbG93SW52YWxpZCkgewogICAgICByZXR1cm4gY29uc3QgQXNjaWlEZWNvZGVyKGFsbG93SW52YWxpZDogdHJ1ZSkuY29udmVydChieXRlcyk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gY29uc3QgQXNjaWlEZWNvZGVyKGFsbG93SW52YWxpZDogZmFsc2UpLmNvbnZlcnQoYnl0ZXMpOwogICAgfQogIH0KCiAgQXNjaWlFbmNvZGVyIGdldCBlbmNvZGVyID0+IGNvbnN0IEFzY2lpRW5jb2RlcigpOwoKICBBc2NpaURlY29kZXIgZ2V0IGRlY29kZXIgPT4gX2FsbG93SW52YWxpZAogICAgICA/IGNvbnN0IEFzY2lpRGVjb2RlcihhbGxvd0ludmFsaWQ6IHRydWUpCiAgICAgIDogY29uc3QgQXNjaWlEZWNvZGVyKGFsbG93SW52YWxpZDogZmFsc2UpOwp9CgovLyBTdXBlcmNsYXNzIGZvciBbQXNjaWlFbmNvZGVyXSBhbmQgW0xhdGluMUVuY29kZXJdLgovLyBHZW5lcmFsaXplcyBjb21tb24gb3BlcmF0aW9ucyB0aGF0IG9ubHkgZGlmZmVyIGJ5IGEgbWFzazsKY2xhc3MgX1VuaWNvZGVTdWJzZXRFbmNvZGVyIGV4dGVuZHMgQ29udmVydGVyPFN0cmluZywgTGlzdDxpbnQ+PiB7CiAgZmluYWwgaW50IF9zdWJzZXRNYXNrOwoKICBjb25zdCBfVW5pY29kZVN1YnNldEVuY29kZXIodGhpcy5fc3Vic2V0TWFzayk7CgogIC8vLyBDb252ZXJ0cyB0aGUgW1N0cmluZ10gaW50byBhIGxpc3Qgb2YgaXRzIGNvZGUgdW5pdHMuCiAgLy8vCiAgLy8vIElmIFtzdGFydF0gYW5kIFtlbmRdIGFyZSBwcm92aWRlZCwgb25seSB0aGUgc3Vic3RyaW5nCiAgLy8vIGBzdHJpbmcuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpYCBpcyB1c2VkIGFzIGlucHV0IHRvIHRoZSBjb252ZXJzaW9uLgogIFVpbnQ4TGlzdCBjb252ZXJ0KFN0cmluZyBzdHJpbmcsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgdmFyIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGg7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBzdHJpbmdMZW5ndGgpOwogICAgdmFyIGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgdmFyIHJlc3VsdCA9IFVpbnQ4TGlzdChsZW5ndGgpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICB2YXIgY29kZVVuaXQgPSBzdHJpbmcuY29kZVVuaXRBdChzdGFydCArIGkpOwogICAgICBpZiAoKGNvZGVVbml0ICYgfl9zdWJzZXRNYXNrKSAhPSAwKSB7CiAgICAgICAgdGhyb3cgQXJndW1lbnRFcnJvci52YWx1ZSgKICAgICAgICAgICAgc3RyaW5nLCAic3RyaW5nIiwgIkNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycy4iKTsKICAgICAgfQogICAgICByZXN1bHRbaV0gPSBjb2RlVW5pdDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gU3RhcnRzIGEgY2h1bmtlZCBjb252ZXJzaW9uLgogIC8vLwogIC8vLyBUaGUgY29udmVydGVyIHdvcmtzIG1vcmUgZWZmaWNpZW50bHkgaWYgdGhlIGdpdmVuIFtzaW5rXSBpcyBhCiAgLy8vIFtCeXRlQ29udmVyc2lvblNpbmtdLgogIFN0cmluZ0NvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxMaXN0PGludD4+IHNpbmspIHsKICAgIHJldHVybiBfVW5pY29kZVN1YnNldEVuY29kZXJTaW5rKF9zdWJzZXRNYXNrLAogICAgICAgIHNpbmsgaXMgQnl0ZUNvbnZlcnNpb25TaW5rID8gc2luayA6IEJ5dGVDb252ZXJzaW9uU2luay5mcm9tKHNpbmspKTsKICB9CgogIC8vIE92ZXJyaWRlIHRoZSBiYXNlLWNsYXNzJyBiaW5kLCB0byBwcm92aWRlIGEgYmV0dGVyIHR5cGUuCiAgU3RyZWFtPExpc3Q8aW50Pj4gYmluZChTdHJlYW08U3RyaW5nPiBzdHJlYW0pID0+IHN1cGVyLmJpbmQoc3RyZWFtKTsKfQoKLy8vIFRoaXMgY2xhc3MgY29udmVydHMgc3RyaW5ncyBvZiBvbmx5IEFTQ0lJIGNoYXJhY3RlcnMgdG8gYnl0ZXMuCmNsYXNzIEFzY2lpRW5jb2RlciBleHRlbmRzIF9Vbmljb2RlU3Vic2V0RW5jb2RlciB7CiAgY29uc3QgQXNjaWlFbmNvZGVyKCkgOiBzdXBlcihfYXNjaWlNYXNrKTsKfQoKLy8vIFRoaXMgY2xhc3MgZW5jb2RlcyBjaHVua2VkIHN0cmluZ3MgdG8gYnl0ZXMgKHVuc2lnbmVkIDgtYml0Ci8vLyBpbnRlZ2VycykuCmNsYXNzIF9Vbmljb2RlU3Vic2V0RW5jb2RlclNpbmsgZXh0ZW5kcyBTdHJpbmdDb252ZXJzaW9uU2lua0Jhc2UgewogIGZpbmFsIEJ5dGVDb252ZXJzaW9uU2luayBfc2luazsKICBmaW5hbCBpbnQgX3N1YnNldE1hc2s7CgogIF9Vbmljb2RlU3Vic2V0RW5jb2RlclNpbmsodGhpcy5fc3Vic2V0TWFzaywgdGhpcy5fc2luayk7CgogIHZvaWQgY2xvc2UoKSB7CiAgICBfc2luay5jbG9zZSgpOwogIH0KCiAgdm9pZCBhZGRTbGljZShTdHJpbmcgc291cmNlLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBzb3VyY2UubGVuZ3RoKTsKICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIHZhciBjb2RlVW5pdCA9IHNvdXJjZS5jb2RlVW5pdEF0KGkpOwogICAgICBpZiAoKGNvZGVVbml0ICYgfl9zdWJzZXRNYXNrKSAhPSAwKSB7CiAgICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcigKICAgICAgICAgICAgIlNvdXJjZSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlciB3aXRoIGNvZGUgcG9pbnQ6ICRjb2RlVW5pdC4iKTsKICAgICAgfQogICAgfQogICAgX3NpbmsuYWRkKHNvdXJjZS5jb2RlVW5pdHMuc3VibGlzdChzdGFydCwgZW5kKSk7CiAgICBpZiAoaXNMYXN0KSB7CiAgICAgIGNsb3NlKCk7CiAgICB9CiAgfQp9CgovLy8gVGhpcyBjbGFzcyBjb252ZXJ0cyBMYXRpbi0xIGJ5dGVzIChsaXN0cyBvZiB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VycykKLy8vIHRvIGEgc3RyaW5nLgphYnN0cmFjdCBjbGFzcyBfVW5pY29kZVN1YnNldERlY29kZXIgZXh0ZW5kcyBDb252ZXJ0ZXI8TGlzdDxpbnQ+LCBTdHJpbmc+IHsKICBmaW5hbCBib29sIF9hbGxvd0ludmFsaWQ7CiAgZmluYWwgaW50IF9zdWJzZXRNYXNrOwoKICAvLy8gSW5zdGFudGlhdGVzIGEgbmV3IGRlY29kZXIuCiAgLy8vCiAgLy8vIFRoZSBbX2FsbG93SW52YWxpZF0gYXJndW1lbnQgZGVmaW5lcyBob3cgW2NvbnZlcnRdIGRlYWxzCiAgLy8vIHdpdGggaW52YWxpZCBieXRlcy4KICAvLy8KICAvLy8gVGhlIFtfc3Vic2V0TWFza10gYXJndW1lbnQgaXMgYSBiaXQgbWFzayB1c2VkIHRvIGRlZmluZSB0aGUgc3Vic2V0CiAgLy8vIG9mIFVuaWNvZGUgYmVpbmcgZGVjb2RlZC4gVXNlIFtfTEFUSU4xX01BU0tdIGZvciBMYXRpbi0xICg4LWJpdCkgb3IKICAvLy8gW19hc2NpaU1hc2tdIGZvciBBU0NJSSAoNy1iaXQpLgogIC8vLwogIC8vLyBJZiBbX2FsbG93SW52YWxpZF0gaXMgYHRydWVgLCBbY29udmVydF0gcmVwbGFjZXMgaW52YWxpZCBieXRlcyB3aXRoIHRoZQogIC8vLyBVbmljb2RlIFJlcGxhY2VtZW50IGNoYXJhY3RlciBgVStGRkZEYCAo77+9KS4KICAvLy8gT3RoZXJ3aXNlIGl0IHRocm93cyBhIFtGb3JtYXRFeGNlcHRpb25dLgogIGNvbnN0IF9Vbmljb2RlU3Vic2V0RGVjb2Rlcih0aGlzLl9hbGxvd0ludmFsaWQsIHRoaXMuX3N1YnNldE1hc2spOwoKICAvLy8gQ29udmVydHMgdGhlIFtieXRlc10gKGEgbGlzdCBvZiB1bnNpZ25lZCA3LSBvciA4LWJpdCBpbnRlZ2VycykgdG8gdGhlCiAgLy8vIGNvcnJlc3BvbmRpbmcgc3RyaW5nLgogIC8vLwogIC8vLyBJZiBbc3RhcnRdIGFuZCBbZW5kXSBhcmUgcHJvdmlkZWQsIG9ubHkgdGhlIHN1Yi1saXN0IG9mIGJ5dGVzIGZyb20KICAvLy8gYHN0YXJ0YCB0byBgZW5kYCAoYGVuZGAgbm90IGluY2x1c2l2ZSkgaXMgdXNlZCBhcyBpbnB1dCB0byB0aGUgY29udmVyc2lvbi4KICBTdHJpbmcgY29udmVydChMaXN0PGludD4gYnl0ZXMsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgdmFyIGJ5dGVDb3VudCA9IGJ5dGVzLmxlbmd0aDsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGJ5dGVDb3VudCk7CiAgICBlbmQgPz89IGJ5dGVDb3VudDsKCiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICB2YXIgYnl0ZSA9IGJ5dGVzW2ldOwogICAgICBpZiAoKGJ5dGUgJiB+X3N1YnNldE1hc2spICE9IDApIHsKICAgICAgICBpZiAoIV9hbGxvd0ludmFsaWQpIHsKICAgICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCB2YWx1ZSBpbiBpbnB1dDogJGJ5dGUiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9jb252ZXJ0SW52YWxpZChieXRlcywgc3RhcnQsIGVuZCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlcyhieXRlcywgc3RhcnQsIGVuZCk7CiAgfQoKICBTdHJpbmcgX2NvbnZlcnRJbnZhbGlkKExpc3Q8aW50PiBieXRlcywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICB2YXIgYnVmZmVyID0gU3RyaW5nQnVmZmVyKCk7CiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICB2YXIgdmFsdWUgPSBieXRlc1tpXTsKICAgICAgaWYgKCh2YWx1ZSAmIH5fc3Vic2V0TWFzaykgIT0gMCkgdmFsdWUgPSAweEZGRkQ7CiAgICAgIGJ1ZmZlci53cml0ZUNoYXJDb2RlKHZhbHVlKTsKICAgIH0KICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIC8vLyBTdGFydHMgYSBjaHVua2VkIGNvbnZlcnNpb24uCiAgLy8vCiAgLy8vIFRoZSBjb252ZXJ0ZXIgd29ya3MgbW9yZSBlZmZpY2llbnRseSBpZiB0aGUgZ2l2ZW4gW3NpbmtdIGlzIGEKICAvLy8gW1N0cmluZ0NvbnZlcnNpb25TaW5rXS4KICBCeXRlQ29udmVyc2lvblNpbmsgc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPFN0cmluZz4gc2luayk7CgogIC8vIE92ZXJyaWRlIHRoZSBiYXNlLWNsYXNzJ3MgYmluZCwgdG8gcHJvdmlkZSBhIGJldHRlciB0eXBlLgogIFN0cmVhbTxTdHJpbmc+IGJpbmQoU3RyZWFtPExpc3Q8aW50Pj4gc3RyZWFtKSA9PiBzdXBlci5iaW5kKHN0cmVhbSk7Cn0KCmNsYXNzIEFzY2lpRGVjb2RlciBleHRlbmRzIF9Vbmljb2RlU3Vic2V0RGVjb2RlciB7CiAgY29uc3QgQXNjaWlEZWNvZGVyKHtib29sIGFsbG93SW52YWxpZCA9IGZhbHNlfSkKICAgICAgOiBzdXBlcihhbGxvd0ludmFsaWQsIF9hc2NpaU1hc2spOwoKICAvLy8gU3RhcnRzIGEgY2h1bmtlZCBjb252ZXJzaW9uLgogIC8vLwogIC8vLyBUaGUgY29udmVydGVyIHdvcmtzIG1vcmUgZWZmaWNpZW50bHkgaWYgdGhlIGdpdmVuIFtzaW5rXSBpcyBhCiAgLy8vIFtTdHJpbmdDb252ZXJzaW9uU2lua10uCiAgQnl0ZUNvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxTdHJpbmc+IHNpbmspIHsKICAgIFN0cmluZ0NvbnZlcnNpb25TaW5rIHN0cmluZ1Npbms7CiAgICBpZiAoc2luayBpcyBTdHJpbmdDb252ZXJzaW9uU2luaykgewogICAgICBzdHJpbmdTaW5rID0gc2luazsKICAgIH0gZWxzZSB7CiAgICAgIHN0cmluZ1NpbmsgPSBTdHJpbmdDb252ZXJzaW9uU2luay5mcm9tKHNpbmspOwogICAgfQogICAgLy8gVE9ETyhscm4pOiBVc2UgYXNVdGYxNlNpbmsgd2hlbiBpdCBiZWNvbWVzIGF2YWlsYWJsZS4gSXQKICAgIC8vIHdvcmtzIGp1c3QgYXMgd2VsbCwgaXMgbGlrZWx5IHRvIGhhdmUgbGVzcyBkZWNvZGluZyBvdmVyaGVhZCwKICAgIC8vIGFuZCBtYWtlIGFkZGluZyBVK0ZGRkQgZWFzaWVyLgogICAgLy8gQXQgdGhhdCB0aW1lLCBtZXJnZSB0aGlzIHdpdGggX0xhdGluMURlY29kZXJTaW5rOwogICAgaWYgKF9hbGxvd0ludmFsaWQpIHsKICAgICAgcmV0dXJuIF9FcnJvckhhbmRsaW5nQXNjaWlEZWNvZGVyU2luayhzdHJpbmdTaW5rLmFzVXRmOFNpbmsoZmFsc2UpKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfU2ltcGxlQXNjaWlEZWNvZGVyU2luayhzdHJpbmdTaW5rKTsKICAgIH0KICB9Cn0KCmNsYXNzIF9FcnJvckhhbmRsaW5nQXNjaWlEZWNvZGVyU2luayBleHRlbmRzIEJ5dGVDb252ZXJzaW9uU2lua0Jhc2UgewogIEJ5dGVDb252ZXJzaW9uU2luayBfdXRmOFNpbms7CiAgX0Vycm9ySGFuZGxpbmdBc2NpaURlY29kZXJTaW5rKHRoaXMuX3V0ZjhTaW5rKTsKCiAgdm9pZCBjbG9zZSgpIHsKICAgIF91dGY4U2luay5jbG9zZSgpOwogIH0KCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IHNvdXJjZSkgewogICAgYWRkU2xpY2Uoc291cmNlLCAwLCBzb3VyY2UubGVuZ3RoLCBmYWxzZSk7CiAgfQoKICB2b2lkIGFkZFNsaWNlKExpc3Q8aW50PiBzb3VyY2UsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHNvdXJjZS5sZW5ndGgpOwogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgaWYgKChzb3VyY2VbaV0gJiB+X2FzY2lpTWFzaykgIT0gMCkgewogICAgICAgIGlmIChpID4gc3RhcnQpIF91dGY4U2luay5hZGRTbGljZShzb3VyY2UsIHN0YXJ0LCBpLCBmYWxzZSk7CiAgICAgICAgLy8gQWRkIFVURi04IGVuY29kaW5nIG9mIFUrRkZGRC4KICAgICAgICBfdXRmOFNpbmsuYWRkKGNvbnN0IDxpbnQ+WzB4RUYsIDB4QkYsIDB4QkRdKTsKICAgICAgICBzdGFydCA9IGkgKyAxOwogICAgICB9CiAgICB9CiAgICBpZiAoc3RhcnQgPCBlbmQpIHsKICAgICAgX3V0ZjhTaW5rLmFkZFNsaWNlKHNvdXJjZSwgc3RhcnQsIGVuZCwgaXNMYXN0KTsKICAgIH0gZWxzZSBpZiAoaXNMYXN0KSB7CiAgICAgIGNsb3NlKCk7CiAgICB9CiAgfQp9CgpjbGFzcyBfU2ltcGxlQXNjaWlEZWNvZGVyU2luayBleHRlbmRzIEJ5dGVDb252ZXJzaW9uU2lua0Jhc2UgewogIFNpbmsgX3Npbms7CiAgX1NpbXBsZUFzY2lpRGVjb2RlclNpbmsodGhpcy5fc2luayk7CgogIHZvaWQgY2xvc2UoKSB7CiAgICBfc2luay5jbG9zZSgpOwogIH0KCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IHNvdXJjZSkgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKChzb3VyY2VbaV0gJiB+X2FzY2lpTWFzaykgIT0gMCkgewogICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiU291cmNlIGNvbnRhaW5zIG5vbi1BU0NJSSBieXRlcy4iKTsKICAgICAgfQogICAgfQogICAgX3NpbmsuYWRkKFN0cmluZy5mcm9tQ2hhckNvZGVzKHNvdXJjZSkpOwogIH0KCiAgdm9pZCBhZGRTbGljZShMaXN0PGludD4gc291cmNlLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBmaW5hbCBsZW5ndGggPSBzb3VyY2UubGVuZ3RoOwogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgbGVuZ3RoKTsKICAgIGlmIChzdGFydCA8IGVuZCkgewogICAgICBpZiAoc3RhcnQgIT0gMCB8fCBlbmQgIT0gbGVuZ3RoKSB7CiAgICAgICAgc291cmNlID0gc291cmNlLnN1Ymxpc3Qoc3RhcnQsIGVuZCk7CiAgICAgIH0KICAgICAgYWRkKHNvdXJjZSk7CiAgICB9CiAgICBpZiAoaXNMYXN0KSBjbG9zZSgpOwogIH0KfQqBIQBOTjwBFgFDBEgPBA4MMkpMCCcBHQE7KSQcAScGR0VOS0gGP1ABKiEBPgFLHAZRMQZRGTgkGEQNRQYEATQBLC8xAgE2PUMZATEBOwY8ST8mQB4kJzMsIz8IHAYTBAEjBkQcRjJMBAE+RwIBQzMsAgFAD0MiGQE7ARETBAFCOygrLB1OCAY1Eg8GBAIBSRFMHBkBIgY/GgZJSiYGTjIvRQFMHAZJUT4iNxcBKBsoHkIKMwgGNAQBQCEoHDcjBh4EASMGRB5AAT9HAgEzMikBIwZEHkElKBkNNAZARSY5GUsNMgYEAgFGIDIBERcEAR8vBAFFOygsRCk2FwgGFzYZDwYEAgE/DicBERMEAR8uLEMIBi0EAUUiNBcpLQgTBhkEAgEXZGFydDpjb252ZXJ0L2FzY2lpLmRhcnQvb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvbnZlcnQvYmFzZTY0LmRhcnTAAHrdLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb252ZXJ0OwoKLy8vIEEgW2Jhc2U2NF0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ2NDgpIGVuY29kZXIgYW5kIGRlY29kZXIuCi8vLwovLy8gSXQgZW5jb2RlcyB1c2luZyB0aGUgZGVmYXVsdCBiYXNlNjQgYWxwaGFiZXQsCi8vLyBkZWNvZGVzIHVzaW5nIGJvdGggdGhlIGJhc2U2NCBhbmQgYmFzZTY0dXJsIGFscGhhYmV0cywKLy8vIGRvZXMgbm90IGFsbG93IGludmFsaWQgY2hhcmFjdGVycyBhbmQgcmVxdWlyZXMgcGFkZGluZy4KLy8vCi8vLyBFeGFtcGxlczoKLy8vCi8vLyAgICAgdmFyIGVuY29kZWQgPSBiYXNlNjQuZW5jb2RlKFsweDYyLCAweDZjLCAweGMzLCAweGE1LCAweDYyLCAweGMzLCAweGE2LAovLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MiwgMHg2NywgMHg3MiwgMHhjMywgMHhiOCwgMHg2NF0pOwovLy8gICAgIHZhciBkZWNvZGVkID0gYmFzZTY0LmRlY29kZSgiWW16RHBXTERwbkpuY3NPNFpBbz0iKTsKLy8vCi8vLyBUaGUgdG9wLWxldmVsIFtiYXNlNjRFbmNvZGVdIGFuZCBbYmFzZTY0RGVjb2RlXSBmdW5jdGlvbnMgbWF5IGJlIHVzZWQKLy8vIGluc3RlYWQgaWYgYSBsb2NhbCB2YXJpYWJsZSBzaGFkb3dzIHRoZSBbYmFzZTY0XSBjb25zdGFudC4KY29uc3QgQmFzZTY0Q29kZWMgYmFzZTY0ID0gQmFzZTY0Q29kZWMoKTsKCi8vLyBBIFtiYXNlNjR1cmxdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0NjQ4KSBlbmNvZGVyIGFuZCBkZWNvZGVyLgovLy8KLy8vIEl0IGVuY29kZXMgYW5kIGRlY29kZXMgdXNpbmcgdGhlIGJhc2U2NHVybCBhbHBoYWJldCwKLy8vIGRlY29kZXMgdXNpbmcgYm90aCB0aGUgYmFzZTY0IGFuZCBiYXNlNjR1cmwgYWxwaGFiZXRzLAovLy8gZG9lcyBub3QgYWxsb3cgaW52YWxpZCBjaGFyYWN0ZXJzIGFuZCByZXF1aXJlcyBwYWRkaW5nLgovLy8KLy8vIEV4YW1wbGVzOgovLy8KLy8vICAgICB2YXIgZW5jb2RlZCA9IGJhc2U2NFVybC5lbmNvZGUoWzB4NjIsIDB4NmMsIDB4YzMsIDB4YTUsIDB4NjIsIDB4YzMsIDB4YTYsCi8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcyLCAweDY3LCAweDcyLCAweGMzLCAweGI4LCAweDY0XSk7Ci8vLyAgICAgdmFyIGRlY29kZWQgPSBiYXNlNjRVcmwuZGVjb2RlKCJZbXpEcFdMRHBuSm5jc080WkFvPSIpOwpjb25zdCBCYXNlNjRDb2RlYyBiYXNlNjRVcmwgPSBCYXNlNjRDb2RlYy51cmxTYWZlKCk7CgovLy8gRW5jb2RlcyBbYnl0ZXNdIHVzaW5nIFtiYXNlNjRdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0NjQ4KSBlbmNvZGluZy4KLy8vCi8vLyBTaG9ydGhhbmQgZm9yIFtiYXNlNjQuZW5jb2RlXS4gVXNlZnVsIGlmIGEgbG9jYWwgdmFyaWFibGUgc2hhZG93cyB0aGUgZ2xvYmFsCi8vLyBbYmFzZTY0XSBjb25zdGFudC4KU3RyaW5nIGJhc2U2NEVuY29kZShMaXN0PGludD4gYnl0ZXMpID0+IGJhc2U2NC5lbmNvZGUoYnl0ZXMpOwoKLy8vIEVuY29kZXMgW2J5dGVzXSB1c2luZyBbYmFzZTY0dXJsXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDY0OCkgZW5jb2RpbmcuCi8vLwovLy8gU2hvcnRoYW5kIGZvciBbYmFzZTY0dXJsLmVuY29kZV0uClN0cmluZyBiYXNlNjRVcmxFbmNvZGUoTGlzdDxpbnQ+IGJ5dGVzKSA9PiBiYXNlNjRVcmwuZW5jb2RlKGJ5dGVzKTsKCi8vLyBEZWNvZGVzIFtiYXNlNjRdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0NjQ4KSBvciBbYmFzZTY0dXJsXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDY0OCkgZW5jb2RlZCBieXRlcy4KLy8vCi8vLyBTaG9ydGhhbmQgZm9yIFtiYXNlNjQuZGVjb2RlXS4gVXNlZnVsIGlmIGEgbG9jYWwgdmFyaWFibGUgc2hhZG93cyB0aGUKLy8vIGdsb2JhbCBbYmFzZTY0XSBjb25zdGFudC4KVWludDhMaXN0IGJhc2U2NERlY29kZShTdHJpbmcgc291cmNlKSA9PiBiYXNlNjQuZGVjb2RlKHNvdXJjZSk7CgovLyBDb25zdGFudHMgdXNlZCBpbiBtb3JlIHRoYW4gb25lIGNsYXNzLgpjb25zdCBpbnQgX3BhZGRpbmdDaGFyID0gMHgzZDsgLy8gJz0nLgoKLy8vIEEgW2Jhc2U2NF0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ2NDgpIGVuY29kZXIgYW5kIGRlY29kZXIuCi8vLwovLy8gQSBbQmFzZTY0Q29kZWNdIGFsbG93cyBiYXNlNjQgZW5jb2RpbmcgYnl0ZXMgaW50byBBU0NJSSBzdHJpbmdzIGFuZAovLy8gZGVjb2RpbmcgdmFsaWQgZW5jb2RpbmdzIGJhY2sgdG8gYnl0ZXMuCi8vLwovLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBvbmx5IGhhbmRsZXMgdGhlIHNpbXBsZXN0IFJGQyA0NjQ4IGJhc2U2NCBhbmQgYmFzZTY0dXJsCi8vLyBlbmNvZGluZ3MuCi8vLyBJdCBkb2VzIG5vdCBhbGxvdyBpbnZhbGlkIGNoYXJhY3RlcnMgd2hlbiBkZWNvZGluZyBhbmQgaXQgcmVxdWlyZXMsCi8vLyBhbmQgZ2VuZXJhdGVzLCBwYWRkaW5nIHNvIHRoYXQgdGhlIGlucHV0IGlzIGFsd2F5cyBhIG11bHRpcGxlIG9mIGZvdXIKLy8vIGNoYXJhY3RlcnMuCmNsYXNzIEJhc2U2NENvZGVjIGV4dGVuZHMgQ29kZWM8TGlzdDxpbnQ+LCBTdHJpbmc+IHsKICBmaW5hbCBCYXNlNjRFbmNvZGVyIF9lbmNvZGVyOwogIGNvbnN0IEJhc2U2NENvZGVjKCkgOiBfZW5jb2RlciA9IGNvbnN0IEJhc2U2NEVuY29kZXIoKTsKICBjb25zdCBCYXNlNjRDb2RlYy51cmxTYWZlKCkgOiBfZW5jb2RlciA9IGNvbnN0IEJhc2U2NEVuY29kZXIudXJsU2FmZSgpOwoKICBCYXNlNjRFbmNvZGVyIGdldCBlbmNvZGVyID0+IF9lbmNvZGVyOwoKICBCYXNlNjREZWNvZGVyIGdldCBkZWNvZGVyID0+IGNvbnN0IEJhc2U2NERlY29kZXIoKTsKCiAgLy8vIERlY29kZXMgW2VuY29kZWRdLgogIC8vLwogIC8vLyBUaGUgaW5wdXQgaXMgZGVjb2RlZCBhcyBpZiBieSBgZGVjb2Rlci5jb252ZXJ0YC4KICAvLy8KICAvLy8gVGhlIHJldHVybmVkIFtVaW50OExpc3RdIGNvbnRhaW5zIGV4YWN0bHkgdGhlIGRlY29kZWQgYnl0ZXMsCiAgLy8vIHNvIHRoZSBbVWludDhMaXN0Lmxlbmd0aF0gaXMgcHJlY2lzZWx5IHRoZSBudW1iZXIgb2YgZGVjb2RlZCBieXRlcy4KICAvLy8gVGhlIFtVaW50OExpc3QuYnVmZmVyXSBtYXkgYmUgbGFyZ2VyIHRoYW4gdGhlIGRlY29kZWQgYnl0ZXMuCiAgVWludDhMaXN0IGRlY29kZShTdHJpbmcgZW5jb2RlZCkgPT4gZGVjb2Rlci5jb252ZXJ0KGVuY29kZWQpOwoKICAvLy8gVmFsaWRhdGVzIGFuZCBub3JtYWxpemVzIHRoZSBiYXNlNjQgZW5jb2RlZCBkYXRhIGluIFtzb3VyY2VdLgogIC8vLwogIC8vLyBPbmx5IGFjdHMgb24gdGhlIHN1YnN0cmluZyBmcm9tIFtzdGFydF0gdG8gW2VuZF0sIHdpdGggW2VuZF0KICAvLy8gZGVmYXVsdGluZyB0byB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuCiAgLy8vCiAgLy8vIE5vcm1hbGl6YXRpb24gd2lsbDoKICAvLy8gKiBVbmVzY2FwZSBhbnkgYCVgLWVzY2FwZXMuCiAgLy8vICogT25seSBhbGxvdyB2YWxpZCBjaGFyYWN0ZXJzIChgQWAtYFpgLCBgYWAtYHpgLCBgMGAtYDlgLCBgL2AgYW5kIGArYCkuCiAgLy8vICogTm9ybWFsaXplIGEgYF9gIG9yIGAtYCBjaGFyYWN0ZXIgdG8gYC9gIG9yIGArYC4KICAvLy8gKiBWYWxpZGF0ZSB0aGF0IGV4aXN0aW5nIHBhZGRpbmcgKHRyYWlsaW5nIGA9YCBjaGFyYWN0ZXJzKSBpcyBjb3JyZWN0LgogIC8vLyAqIElmIG5vIHBhZGRpbmcgZXhpc3RzLCBhZGQgY29ycmVjdCBwYWRkaW5nIGlmIG5lY2Vzc2FyeSBhbmQgcG9zc2libGUuCiAgLy8vICogVmFsaWRhdGUgdGhhdCB0aGUgbGVuZ3RoIGlzIGNvcnJlY3QgKGEgbXVsdGlwbGUgb2YgZm91cikuCiAgU3RyaW5nIG5vcm1hbGl6ZShTdHJpbmcgc291cmNlLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHNvdXJjZS5sZW5ndGgpOwogICAgY29uc3QgcGVyY2VudCA9IDB4MjU7CiAgICBjb25zdCBlcXVhbHMgPSAweDNkOwogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKICAgIHZhciBzbGljZVN0YXJ0ID0gc3RhcnQ7CiAgICB2YXIgYWxwaGFiZXQgPSBfQmFzZTY0RW5jb2Rlci5fYmFzZTY0QWxwaGFiZXQ7CiAgICB2YXIgaW52ZXJzZUFscGhhYmV0ID0gX0Jhc2U2NERlY29kZXIuX2ludmVyc2VBbHBoYWJldDsKICAgIHZhciBmaXJzdFBhZGRpbmcgPSAtMTsKICAgIHZhciBmaXJzdFBhZGRpbmdTb3VyY2VJbmRleCA9IC0xOwogICAgdmFyIHBhZGRpbmdDb3VudCA9IDA7CiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7KSB7CiAgICAgIHZhciBzbGljZUVuZCA9IGk7CiAgICAgIHZhciBjaGFyID0gc291cmNlLmNvZGVVbml0QXQoaSsrKTsKICAgICAgdmFyIG9yaWdpbmFsQ2hhciA9IGNoYXI7CiAgICAgIC8vIE5vcm1hbGl6ZSBjaGFyLCBrZWVwIG9yaWdpbmFsQ2hhciB0byBzZWUgaWYgaXQgbWF0Y2hlcyB0aGUgc291cmNlLgogICAgICBpZiAoY2hhciA9PSBwZXJjZW50KSB7CiAgICAgICAgaWYgKGkgKyAyIDw9IGVuZCkgewogICAgICAgICAgY2hhciA9IHBhcnNlSGV4Qnl0ZShzb3VyY2UsIGkpOyAvLyBNYXkgYmUgbmVnYXRpdmUuCiAgICAgICAgICBpICs9IDI7CiAgICAgICAgICAvLyBXZSBrbm93IHRoYXQgJTI1IGlzbid0IHZhbGlkLCBidXQgb3VyIHRhYmxlIGNvbnNpZGVycyBpdAogICAgICAgICAgLy8gYSBwb3RlbnRpYWwgcGFkZGluZyBzdGFydCwgc28gc2tpcCB0aGUgY2hlY2tzLgogICAgICAgICAgaWYgKGNoYXIgPT0gcGVyY2VudCkgY2hhciA9IC0xOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBBbiBpbnZhbGlkIEhFWCBlc2NhcGUgKHRvbyBzaG9ydCkuCiAgICAgICAgICAvLyBKdXN0IHNraXAgcGFzdCB0aGUgaGFuZGxpbmcgYW5kIHJlYWNoIHRoZSB0aHJvdyBiZWxvdy4KICAgICAgICAgIGNoYXIgPSAtMTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gSWYgY2hhciBpcyBuZWdhdGl2ZSBoZXJlLCBoZXgtZGVjb2RpbmcgZmFpbGVkIGluIHNvbWUgd2F5LgogICAgICBpZiAoMCA8PSBjaGFyICYmIGNoYXIgPD0gMTI3KSB7CiAgICAgICAgdmFyIHZhbHVlID0gaW52ZXJzZUFscGhhYmV0W2NoYXJdOwogICAgICAgIGlmICh2YWx1ZSA+PSAwKSB7CiAgICAgICAgICBjaGFyID0gYWxwaGFiZXQuY29kZVVuaXRBdCh2YWx1ZSk7CiAgICAgICAgICBpZiAoY2hhciA9PSBvcmlnaW5hbENoYXIpIGNvbnRpbnVlOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gX0Jhc2U2NERlY29kZXIuX3BhZGRpbmcpIHsKICAgICAgICAgIC8vIFdlIGhhdmUgcnVsZWQgb3V0IHBlcmNlbnQsIHNvIGNoYXIgaXMgJz0nLgogICAgICAgICAgaWYgKGZpcnN0UGFkZGluZyA8IDApIHsKICAgICAgICAgICAgLy8gTWFyayBwb3NpdGlvbiBpbiBub3JtYWxpemVkIG91dHB1dCB3aGVyZSBwYWRkaW5nIG9jY3Vycy4KICAgICAgICAgICAgZmlyc3RQYWRkaW5nID0gKGJ1ZmZlcj8ubGVuZ3RoID8/IDApICsgKHNsaWNlRW5kIC0gc2xpY2VTdGFydCk7CiAgICAgICAgICAgIGZpcnN0UGFkZGluZ1NvdXJjZUluZGV4ID0gc2xpY2VFbmQ7CiAgICAgICAgICB9CiAgICAgICAgICBwYWRkaW5nQ291bnQrKzsKICAgICAgICAgIC8vIEl0IGNvdWxkIGhhdmUgYmVlbiBhbiBlc2NhcGVkIGVxdWFscyAoJTNEKS4KICAgICAgICAgIGlmIChvcmlnaW5hbENoYXIgPT0gZXF1YWxzKSBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHZhbHVlICE9IF9CYXNlNjREZWNvZGVyLl9pbnZhbGlkKSB7CiAgICAgICAgICBidWZmZXIgPz89IFN0cmluZ0J1ZmZlcigpOwogICAgICAgICAgYnVmZmVyLndyaXRlKHNvdXJjZS5zdWJzdHJpbmcoc2xpY2VTdGFydCwgc2xpY2VFbmQpKTsKICAgICAgICAgIGJ1ZmZlci53cml0ZUNoYXJDb2RlKGNoYXIpOwogICAgICAgICAgc2xpY2VTdGFydCA9IGk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKCJJbnZhbGlkIGJhc2U2NCBkYXRhIiwgc291cmNlLCBzbGljZUVuZCk7CiAgICB9CiAgICBpZiAoYnVmZmVyICE9IG51bGwpIHsKICAgICAgYnVmZmVyLndyaXRlKHNvdXJjZS5zdWJzdHJpbmcoc2xpY2VTdGFydCwgZW5kKSk7CiAgICAgIGlmIChmaXJzdFBhZGRpbmcgPj0gMCkgewogICAgICAgIC8vIFRoZXJlIHdhcyBwYWRkaW5nIGluIHRoZSBzb3VyY2UuIENoZWNrIHRoYXQgaXQgaXMgdmFsaWQ6CiAgICAgICAgLy8gKiByZXN1bHQgbGVuZ3RoIGEgbXVsdGlwbGUgb2YgZm91cgogICAgICAgIC8vICogb25lIG9yIHR3byBwYWRkaW5nIGNoYXJhY3RlcnMgYXQgdGhlIGVuZC4KICAgICAgICBfY2hlY2tQYWRkaW5nKHNvdXJjZSwgZmlyc3RQYWRkaW5nU291cmNlSW5kZXgsIGVuZCwgZmlyc3RQYWRkaW5nLAogICAgICAgICAgICBwYWRkaW5nQ291bnQsIGJ1ZmZlci5sZW5ndGgpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIExlbmd0aCBvZiBsYXN0IGNodW5rICgxLTQgY2hhcnMpIGluIHRoZSBlbmNvZGluZy4KICAgICAgICB2YXIgZW5kTGVuZ3RoID0gKChidWZmZXIubGVuZ3RoIC0gMSkgJSA0KSArIDE7CiAgICAgICAgaWYgKGVuZExlbmd0aCA9PSAxKSB7CiAgICAgICAgICAvLyBUaGUgZGF0YSBtdXN0IGhhdmUgbGVuZ3RoIDAsIDIgb3IgMyBtb2R1bG8gNC4KICAgICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBiYXNlNjQgZW5jb2RpbmcgbGVuZ3RoICIsIHNvdXJjZSwgZW5kKTsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKGVuZExlbmd0aCA8IDQpIHsKICAgICAgICAgIGJ1ZmZlci53cml0ZSgiPSIpOwogICAgICAgICAgZW5kTGVuZ3RoKys7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBzb3VyY2UucmVwbGFjZVJhbmdlKHN0YXJ0LCBlbmQsIGJ1ZmZlci50b1N0cmluZygpKTsKICAgIH0KICAgIC8vIE9yaWdpbmFsIHdhcyBhbHJlYWR5IG5vcm1hbGl6ZWQsIG9ubHkgY2hlY2sgcGFkZGluZy4KICAgIHZhciBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIGlmIChmaXJzdFBhZGRpbmcgPj0gMCkgewogICAgICBfY2hlY2tQYWRkaW5nKHNvdXJjZSwgZmlyc3RQYWRkaW5nU291cmNlSW5kZXgsIGVuZCwgZmlyc3RQYWRkaW5nLAogICAgICAgICAgcGFkZGluZ0NvdW50LCBsZW5ndGgpOwogICAgfSBlbHNlIHsKICAgICAgLy8gTm8gcGFkZGluZyBnaXZlbiwgc28gYWRkIHNvbWUgaWYgbmVlZGVkIGl0LgogICAgICB2YXIgZW5kTGVuZ3RoID0gbGVuZ3RoICUgNDsKICAgICAgaWYgKGVuZExlbmd0aCA9PSAxKSB7CiAgICAgICAgLy8gVGhlIGRhdGEgbXVzdCBoYXZlIGxlbmd0aCAwLCAyIG9yIDMgbW9kdWxvIDQuCiAgICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKCJJbnZhbGlkIGJhc2U2NCBlbmNvZGluZyBsZW5ndGggIiwgc291cmNlLCBlbmQpOwogICAgICB9CiAgICAgIGlmIChlbmRMZW5ndGggPiAxKSB7CiAgICAgICAgLy8gVGhlcmUgaXMgbm8gImluc2VydEF0IiBvbiBTdHJpbmcsIGJ1dCB0aGlzIHdvcmtzIGFzIHdlbGwuCiAgICAgICAgc291cmNlID0gc291cmNlLnJlcGxhY2VSYW5nZShlbmQsIGVuZCwgKGVuZExlbmd0aCA9PSAyKSA/ICI9PSIgOiAiPSIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc291cmNlOwogIH0KCiAgc3RhdGljIHZvaWQgX2NoZWNrUGFkZGluZyhTdHJpbmcgc291cmNlLCBpbnQgc291cmNlSW5kZXgsIGludCBzb3VyY2VFbmQsCiAgICAgIGludCBmaXJzdFBhZGRpbmcsIGludCBwYWRkaW5nQ291bnQsIGludCBsZW5ndGgpIHsKICAgIGlmIChsZW5ndGggJSA0ICE9IDApIHsKICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKAogICAgICAgICAgIkludmFsaWQgYmFzZTY0IHBhZGRpbmcsIHBhZGRlZCBsZW5ndGggbXVzdCBiZSBtdWx0aXBsZSBvZiBmb3VyLCAiCiAgICAgICAgICAiaXMgJGxlbmd0aCIsCiAgICAgICAgICBzb3VyY2UsCiAgICAgICAgICBzb3VyY2VFbmQpOwogICAgfQogICAgaWYgKGZpcnN0UGFkZGluZyArIHBhZGRpbmdDb3VudCAhPSBsZW5ndGgpIHsKICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKAogICAgICAgICAgIkludmFsaWQgYmFzZTY0IHBhZGRpbmcsICc9JyBub3QgYXQgdGhlIGVuZCIsIHNvdXJjZSwgc291cmNlSW5kZXgpOwogICAgfQogICAgaWYgKHBhZGRpbmdDb3VudCA+IDIpIHsKICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKAogICAgICAgICAgIkludmFsaWQgYmFzZTY0IHBhZGRpbmcsIG1vcmUgdGhhbiB0d28gJz0nIGNoYXJhY3RlcnMiLAogICAgICAgICAgc291cmNlLAogICAgICAgICAgc291cmNlSW5kZXgpOwogICAgfQogIH0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIEVuY29kZXIKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLy8gQmFzZTY0IGFuZCBiYXNlNjR1cmwgZW5jb2RpbmcgY29udmVydGVyLgovLy8KLy8vIEVuY29kZXMgbGlzdHMgb2YgYnl0ZXMgdXNpbmcgYmFzZTY0IG9yIGJhc2U2NHVybCBlbmNvZGluZy4KLy8vCi8vLyBUaGUgcmVzdWx0cyBhcmUgQVNDSUkgc3RyaW5ncyB1c2luZyBhIHJlc3RyaWN0ZWQgYWxwaGFiZXQuCmNsYXNzIEJhc2U2NEVuY29kZXIgZXh0ZW5kcyBDb252ZXJ0ZXI8TGlzdDxpbnQ+LCBTdHJpbmc+IHsKICBmaW5hbCBib29sIF91cmxTYWZlOwoKICBjb25zdCBCYXNlNjRFbmNvZGVyKCkgOiBfdXJsU2FmZSA9IGZhbHNlOwogIGNvbnN0IEJhc2U2NEVuY29kZXIudXJsU2FmZSgpIDogX3VybFNhZmUgPSB0cnVlOwoKICBTdHJpbmcgY29udmVydChMaXN0PGludD4gaW5wdXQpIHsKICAgIGlmIChpbnB1dC5pc0VtcHR5KSByZXR1cm4gIiI7CiAgICB2YXIgZW5jb2RlciA9IF9CYXNlNjRFbmNvZGVyKF91cmxTYWZlKTsKICAgIHZhciBidWZmZXIgPSBlbmNvZGVyLmVuY29kZShpbnB1dCwgMCwgaW5wdXQubGVuZ3RoLCB0cnVlKTsKICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlcyhidWZmZXIpOwogIH0KCiAgQnl0ZUNvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxTdHJpbmc+IHNpbmspIHsKICAgIGlmIChzaW5rIGlzIFN0cmluZ0NvbnZlcnNpb25TaW5rKSB7CiAgICAgIHJldHVybiBfVXRmOEJhc2U2NEVuY29kZXJTaW5rKHNpbmsuYXNVdGY4U2luayhmYWxzZSksIF91cmxTYWZlKTsKICAgIH0KICAgIHJldHVybiBfQXNjaWlCYXNlNjRFbmNvZGVyU2luayhzaW5rLCBfdXJsU2FmZSk7CiAgfQp9CgovLy8gSGVscGVyIGNsYXNzIGZvciBlbmNvZGluZyBieXRlcyB0byBiYXNlNjQuCmNsYXNzIF9CYXNlNjRFbmNvZGVyIHsKICAvLy8gVGhlIFJGQyA0NjQ4IGJhc2U2NCBlbmNvZGluZyBhbHBoYWJldC4KICBzdGF0aWMgY29uc3QgU3RyaW5nIF9iYXNlNjRBbHBoYWJldCA9CiAgICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIjsKCiAgLy8vIFRoZSBSRkMgNDY0OCBiYXNlNjR1cmwgZW5jb2RpbmcgYWxwaGFiZXQuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBfYmFzZTY0VXJsQWxwaGFiZXQgPQogICAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODktXyI7CgogIC8vLyBTaGlmdC1jb3VudCB0byBleHRyYWN0IHRoZSB2YWx1ZXMgc3RvcmVkIGluIFtfc3RhdGVdLgogIHN0YXRpYyBjb25zdCBpbnQgX3ZhbHVlU2hpZnQgPSAyOwoKICAvLy8gTWFzayB0byBleHRyYWN0IHRoZSBjb3VudCB2YWx1ZSBzdG9yZWQgaW4gW19zdGF0ZV0uCiAgc3RhdGljIGNvbnN0IGludCBfY291bnRNYXNrID0gMzsKCiAgc3RhdGljIGNvbnN0IGludCBfc2l4Qml0TWFzayA9IDB4M0Y7CgogIC8vLyBJbnRlcm1lZGlhdGUgc3RhdGUgYmV0d2VlbiBjaHVua3MuCiAgLy8vCiAgLy8vIEVuY29kaW5nIGhhbmRsZXMgdGhyZWUgYnl0ZXMgYXQgYSB0aW1lLgogIC8vLyBJZiBmZXdlciB0aGFuIHRocmVlIGJ5dGVzIGhhcyBiZWVuIHNlZW4sIHRoaXMgdmFsdWUgZW5jb2RlcwogIC8vLyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlZW4gKDAsIDEgb3IgMikgYW5kIHRoZWlyIHZhbHVlcy4KICBpbnQgX3N0YXRlID0gMDsKCiAgLy8vIEFscGhhYmV0IHVzZWQgZm9yIGVuY29kaW5nLgogIGZpbmFsIFN0cmluZyBfYWxwaGFiZXQ7CgogIF9CYXNlNjRFbmNvZGVyKGJvb2wgdXJsU2FmZSkKICAgICAgOiBfYWxwaGFiZXQgPSB1cmxTYWZlID8gX2Jhc2U2NFVybEFscGhhYmV0IDogX2Jhc2U2NEFscGhhYmV0OwoKICAvLy8gRW5jb2RlIGNvdW50IGFuZCBiaXRzIGludG8gYSB2YWx1ZSB0byBiZSBzdG9yZWQgaW4gW19zdGF0ZV0uCiAgc3RhdGljIGludCBfZW5jb2RlU3RhdGUoaW50IGNvdW50LCBpbnQgYml0cykgewogICAgYXNzZXJ0KGNvdW50IDw9IF9jb3VudE1hc2spOwogICAgcmV0dXJuIGJpdHMgPDwgX3ZhbHVlU2hpZnQgfCBjb3VudDsKICB9CgogIC8vLyBFeHRyYWN0IGJpdHMgZnJvbSBlbmNvZGVkIHN0YXRlLgogIHN0YXRpYyBpbnQgX3N0YXRlQml0cyhpbnQgc3RhdGUpID0+IHN0YXRlID4+IF92YWx1ZVNoaWZ0OwoKICAvLy8gRXh0cmFjdCBjb3VudCBmcm9tIGVuY29kZWQgc3RhdGUuCiAgc3RhdGljIGludCBfc3RhdGVDb3VudChpbnQgc3RhdGUpID0+IHN0YXRlICYgX2NvdW50TWFzazsKCiAgLy8vIENyZWF0ZSBhIFtVaW50OExpc3RdIHdpdGggdGhlIHByb3ZpZGVkIGxlbmd0aC4KICBVaW50OExpc3QgY3JlYXRlQnVmZmVyKGludCBidWZmZXJMZW5ndGgpID0+IFVpbnQ4TGlzdChidWZmZXJMZW5ndGgpOwoKICAvLy8gRW5jb2RlIFtieXRlc10gZnJvbSBbc3RhcnRdIHRvIFtlbmRdIGFuZCB0aGUgYml0cyBpbiBbX3N0YXRlXS4KICAvLy8KICAvLy8gUmV0dXJucyBhIFtVaW50OExpc3RdIG9mIHRoZSBBU0NJSSBjb2RlcyBvZiB0aGUgZW5jb2RlZCBkYXRhLgogIC8vLwogIC8vLyBJZiB0aGUgaW5wdXQsIGluY2x1ZGluZyBsZWZ0IG92ZXIgW19zdGF0ZV0gZnJvbSBlYXJsaWVyIGVuY29kaW5ncywKICAvLy8gYXJlIG5vdCBhIG11bHRpcGxlIG9mIHRocmVlIGJ5dGVzLCB0aGVuIHRoZSBwYXJ0aWFsIHN0YXRlIGlzIHN0b3JlZAogIC8vLyBiYWNrIGludG8gW19zdGF0ZV0uCiAgLy8vIElmIFtpc0xhc3RdIGlzIHRydWUsIHBhcnRpYWwgc3RhdGUgaXMgZW5jb2RlZCBpbiB0aGUgb3V0cHV0IGluc3RlYWQsCiAgLy8vIHdpdGggdGhlIG5lY2Vzc2FyeSBwYWRkaW5nLgogIC8vLwogIC8vLyBSZXR1cm5zIGBudWxsYCBpZiB0aGVyZSBpcyBubyBvdXRwdXQuCiAgVWludDhMaXN0IGVuY29kZShMaXN0PGludD4gYnl0ZXMsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIGFzc2VydCgwIDw9IHN0YXJ0KTsKICAgIGFzc2VydChzdGFydCA8PSBlbmQpOwogICAgYXNzZXJ0KGJ5dGVzID09IG51bGwgfHwgZW5kIDw9IGJ5dGVzLmxlbmd0aCk7CiAgICB2YXIgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CgogICAgdmFyIGNvdW50ID0gX3N0YXRlQ291bnQoX3N0YXRlKTsKICAgIHZhciBieXRlQ291bnQgPSAoY291bnQgKyBsZW5ndGgpOwogICAgdmFyIGZ1bGxDaHVua3MgPSBieXRlQ291bnQgfi8gMzsKICAgIHZhciBwYXJ0aWFsQ2h1bmtMZW5ndGggPSBieXRlQ291bnQgLSBmdWxsQ2h1bmtzICogMzsKICAgIHZhciBidWZmZXJMZW5ndGggPSBmdWxsQ2h1bmtzICogNDsKICAgIGlmIChpc0xhc3QgJiYgcGFydGlhbENodW5rTGVuZ3RoID4gMCkgewogICAgICBidWZmZXJMZW5ndGggKz0gNDsgLy8gUm9vbSBmb3IgcGFkZGluZy4KICAgIH0KICAgIHZhciBvdXRwdXQgPSBjcmVhdGVCdWZmZXIoYnVmZmVyTGVuZ3RoKTsKICAgIF9zdGF0ZSA9CiAgICAgICAgZW5jb2RlQ2h1bmsoX2FscGhhYmV0LCBieXRlcywgc3RhcnQsIGVuZCwgaXNMYXN0LCBvdXRwdXQsIDAsIF9zdGF0ZSk7CiAgICBpZiAoYnVmZmVyTGVuZ3RoID4gMCkgcmV0dXJuIG91dHB1dDsKICAgIC8vIElmIHRoZSBpbnB1dCBwbHVzIHRoZSBkYXRhIGluIHN0YXRlIGlzIHN0aWxsIGxlc3MgdGhhbiB0aHJlZSBieXRlcywKICAgIC8vIHRoZXJlIG1heSBub3QgYmUgYW55IG91dHB1dC4KICAgIHJldHVybiBudWxsOwogIH0KCiAgc3RhdGljIGludCBlbmNvZGVDaHVuayhTdHJpbmcgYWxwaGFiZXQsIExpc3Q8aW50PiBieXRlcywgaW50IHN0YXJ0LCBpbnQgZW5kLAogICAgICBib29sIGlzTGFzdCwgVWludDhMaXN0IG91dHB1dCwgaW50IG91dHB1dEluZGV4LCBpbnQgc3RhdGUpIHsKICAgIHZhciBiaXRzID0gX3N0YXRlQml0cyhzdGF0ZSk7CiAgICAvLyBDb3VudCBudW1iZXIgb2YgbWlzc2luZyBieXRlcyBpbiB0aHJlZS1ieXRlIGNodW5rLgogICAgdmFyIGV4cGVjdGVkQ2hhcnMgPSAzIC0gX3N0YXRlQ291bnQoc3RhdGUpOwoKICAgIC8vIFRoZSBpbnB1dCBtdXN0IGJlIGEgbGlzdCBvZiBieXRlcyAoaW50ZWdlcnMgaW4gdGhlIHJhbmdlIDAuLjI1NSkuCiAgICAvLyBUaGUgdmFsdWUgb2YgYGJ5dGVPcmAgd2lsbCBiZSB0aGUgYml0d2lzZSBvciBvZiBhbGwgdGhlIHZhbHVlcyBpbgogICAgLy8gYGJ5dGVzYCBhbmQgYSBsYXRlciBjaGVjayB3aWxsIHZhbGlkYXRlIHRoYXQgdGhleSB3ZXJlIGFsbCB2YWxpZCBieXRlcy4KICAgIHZhciBieXRlT3IgPSAwOwogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgdmFyIGJ5dGUgPSBieXRlc1tpXTsKICAgICAgYnl0ZU9yIHw9IGJ5dGU7CiAgICAgIGJpdHMgPSAoKGJpdHMgPDwgOCkgfCBieXRlKSAmIDB4RkZGRkZGOyAvLyBOZXZlciBzdG9yZSBtb3JlIHRoYW4gMjQgYml0cy4KICAgICAgZXhwZWN0ZWRDaGFycy0tOwogICAgICBpZiAoZXhwZWN0ZWRDaGFycyA9PSAwKSB7CiAgICAgICAgb3V0cHV0W291dHB1dEluZGV4KytdID0gYWxwaGFiZXQuY29kZVVuaXRBdCgoYml0cyA+PiAxOCkgJiBfc2l4Qml0TWFzayk7CiAgICAgICAgb3V0cHV0W291dHB1dEluZGV4KytdID0gYWxwaGFiZXQuY29kZVVuaXRBdCgoYml0cyA+PiAxMikgJiBfc2l4Qml0TWFzayk7CiAgICAgICAgb3V0cHV0W291dHB1dEluZGV4KytdID0gYWxwaGFiZXQuY29kZVVuaXRBdCgoYml0cyA+PiA2KSAmIF9zaXhCaXRNYXNrKTsKICAgICAgICBvdXRwdXRbb3V0cHV0SW5kZXgrK10gPSBhbHBoYWJldC5jb2RlVW5pdEF0KGJpdHMgJiBfc2l4Qml0TWFzayk7CiAgICAgICAgZXhwZWN0ZWRDaGFycyA9IDM7CiAgICAgICAgYml0cyA9IDA7CiAgICAgIH0KICAgIH0KICAgIGlmIChieXRlT3IgPj0gMCAmJiBieXRlT3IgPD0gMjU1KSB7CiAgICAgIGlmIChpc0xhc3QgJiYgZXhwZWN0ZWRDaGFycyA8IDMpIHsKICAgICAgICB3cml0ZUZpbmFsQ2h1bmsoYWxwaGFiZXQsIG91dHB1dCwgb3V0cHV0SW5kZXgsIDMgLSBleHBlY3RlZENoYXJzLCBiaXRzKTsKICAgICAgICByZXR1cm4gMDsKICAgICAgfQogICAgICByZXR1cm4gX2VuY29kZVN0YXRlKDMgLSBleHBlY3RlZENoYXJzLCBiaXRzKTsKICAgIH0KCiAgICAvLyBUaGVyZSB3YXMgYW4gaW52YWxpZCBieXRlIHZhbHVlIHNvbWV3aGVyZSBpbiB0aGUgaW5wdXQgLSBmaW5kIGl0IQogICAgdmFyIGkgPSBzdGFydDsKICAgIHdoaWxlIChpIDwgZW5kKSB7CiAgICAgIHZhciBieXRlID0gYnl0ZXNbaV07CiAgICAgIGlmIChieXRlIDwgMCB8fCBieXRlID4gMjU1KSBicmVhazsKICAgICAgaSsrOwogICAgfQogICAgdGhyb3cgQXJndW1lbnRFcnJvci52YWx1ZSgKICAgICAgICBieXRlcywgIk5vdCBhIGJ5dGUgdmFsdWUgYXQgaW5kZXggJGk6IDB4JHtieXRlc1tpXS50b1JhZGl4U3RyaW5nKDE2KX0iKTsKICB9CgogIC8vLyBXcml0ZXMgYSBmaW5hbCBlbmNvZGVkIGZvdXItY2hhcmFjdGVyIGNodW5rLgogIC8vLwogIC8vLyBPbmx5IHVzZWQgd2hlbiB0aGUgW19zdGF0ZV0gY29udGFpbnMgYSBwYXJ0aWFsICgxIG9yIDIgYnl0ZSkKICAvLy8gaW5wdXQuCiAgc3RhdGljIHZvaWQgd3JpdGVGaW5hbENodW5rKAogICAgICBTdHJpbmcgYWxwaGFiZXQsIFVpbnQ4TGlzdCBvdXRwdXQsIGludCBvdXRwdXRJbmRleCwgaW50IGNvdW50LCBpbnQgYml0cykgewogICAgYXNzZXJ0KGNvdW50ID4gMCk7CiAgICBpZiAoY291bnQgPT0gMSkgewogICAgICBvdXRwdXRbb3V0cHV0SW5kZXgrK10gPSBhbHBoYWJldC5jb2RlVW5pdEF0KChiaXRzID4+IDIpICYgX3NpeEJpdE1hc2spOwogICAgICBvdXRwdXRbb3V0cHV0SW5kZXgrK10gPSBhbHBoYWJldC5jb2RlVW5pdEF0KChiaXRzIDw8IDQpICYgX3NpeEJpdE1hc2spOwogICAgICBvdXRwdXRbb3V0cHV0SW5kZXgrK10gPSBfcGFkZGluZ0NoYXI7CiAgICAgIG91dHB1dFtvdXRwdXRJbmRleCsrXSA9IF9wYWRkaW5nQ2hhcjsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChjb3VudCA9PSAyKTsKICAgICAgb3V0cHV0W291dHB1dEluZGV4KytdID0gYWxwaGFiZXQuY29kZVVuaXRBdCgoYml0cyA+PiAxMCkgJiBfc2l4Qml0TWFzayk7CiAgICAgIG91dHB1dFtvdXRwdXRJbmRleCsrXSA9IGFscGhhYmV0LmNvZGVVbml0QXQoKGJpdHMgPj4gNCkgJiBfc2l4Qml0TWFzayk7CiAgICAgIG91dHB1dFtvdXRwdXRJbmRleCsrXSA9IGFscGhhYmV0LmNvZGVVbml0QXQoKGJpdHMgPDwgMikgJiBfc2l4Qml0TWFzayk7CiAgICAgIG91dHB1dFtvdXRwdXRJbmRleCsrXSA9IF9wYWRkaW5nQ2hhcjsKICAgIH0KICB9Cn0KCmNsYXNzIF9CdWZmZXJDYWNoaW5nQmFzZTY0RW5jb2RlciBleHRlbmRzIF9CYXNlNjRFbmNvZGVyIHsKICAvLy8gUmV1c2VkIGJ1ZmZlci4KICAvLy8KICAvLy8gV2hlbiB0aGUgYnVmZmVyIGlzbid0IHJlbGVhc2VkIHRvIHRoZSBzaW5rLCBvbmx5IHVzZWQgdG8gY3JlYXRlIGFub3RoZXIKICAvLy8gdmFsdWUgKGEgc3RyaW5nKSwgdGhlIGJ1ZmZlciBjYW4gYmUgcmV1c2VkIGJldHdlZW4gY2h1bmtzLgogIFVpbnQ4TGlzdCBidWZmZXJDYWNoZTsKCiAgX0J1ZmZlckNhY2hpbmdCYXNlNjRFbmNvZGVyKGJvb2wgdXJsU2FmZSkgOiBzdXBlcih1cmxTYWZlKTsKCiAgVWludDhMaXN0IGNyZWF0ZUJ1ZmZlcihpbnQgYnVmZmVyTGVuZ3RoKSB7CiAgICBpZiAoYnVmZmVyQ2FjaGUgPT0gbnVsbCB8fCBidWZmZXJDYWNoZS5sZW5ndGggPCBidWZmZXJMZW5ndGgpIHsKICAgICAgYnVmZmVyQ2FjaGUgPSBVaW50OExpc3QoYnVmZmVyTGVuZ3RoKTsKICAgIH0KICAgIC8vIFJldHVybiBhIHZpZXcgb2YgdGhlIGJ1ZmZlciwgc28gaXQgaGFzIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoLgogICAgcmV0dXJuIFVpbnQ4TGlzdC52aWV3KGJ1ZmZlckNhY2hlLmJ1ZmZlciwgMCwgYnVmZmVyTGVuZ3RoKTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9CYXNlNjRFbmNvZGVyU2luayBleHRlbmRzIEJ5dGVDb252ZXJzaW9uU2lua0Jhc2UgewogIHZvaWQgYWRkKExpc3Q8aW50PiBzb3VyY2UpIHsKICAgIF9hZGQoc291cmNlLCAwLCBzb3VyY2UubGVuZ3RoLCBmYWxzZSk7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgX2FkZChudWxsLCAwLCAwLCB0cnVlKTsKICB9CgogIHZvaWQgYWRkU2xpY2UoTGlzdDxpbnQ+IHNvdXJjZSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgaWYgKGVuZCA9PSBudWxsKSB0aHJvdyBBcmd1bWVudEVycm9yLm5vdE51bGwoImVuZCIpOwogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgc291cmNlLmxlbmd0aCk7CiAgICBfYWRkKHNvdXJjZSwgc3RhcnQsIGVuZCwgaXNMYXN0KTsKICB9CgogIHZvaWQgX2FkZChMaXN0PGludD4gc291cmNlLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KTsKfQoKY2xhc3MgX0FzY2lpQmFzZTY0RW5jb2RlclNpbmsgZXh0ZW5kcyBfQmFzZTY0RW5jb2RlclNpbmsgewogIGZpbmFsIFNpbms8U3RyaW5nPiBfc2luazsKICBmaW5hbCBfQmFzZTY0RW5jb2RlciBfZW5jb2RlcjsKCiAgX0FzY2lpQmFzZTY0RW5jb2RlclNpbmsodGhpcy5fc2luaywgYm9vbCB1cmxTYWZlKQogICAgICA6IF9lbmNvZGVyID0gX0J1ZmZlckNhY2hpbmdCYXNlNjRFbmNvZGVyKHVybFNhZmUpOwoKICB2b2lkIF9hZGQoTGlzdDxpbnQ+IHNvdXJjZSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgdmFyIGJ1ZmZlciA9IF9lbmNvZGVyLmVuY29kZShzb3VyY2UsIHN0YXJ0LCBlbmQsIGlzTGFzdCk7CiAgICBpZiAoYnVmZmVyICE9IG51bGwpIHsKICAgICAgdmFyIHN0cmluZyA9IFN0cmluZy5mcm9tQ2hhckNvZGVzKGJ1ZmZlcik7CiAgICAgIF9zaW5rLmFkZChzdHJpbmcpOwogICAgfQogICAgaWYgKGlzTGFzdCkgewogICAgICBfc2luay5jbG9zZSgpOwogICAgfQogIH0KfQoKY2xhc3MgX1V0ZjhCYXNlNjRFbmNvZGVyU2luayBleHRlbmRzIF9CYXNlNjRFbmNvZGVyU2luayB7CiAgZmluYWwgQnl0ZUNvbnZlcnNpb25TaW5rIF9zaW5rOwogIGZpbmFsIF9CYXNlNjRFbmNvZGVyIF9lbmNvZGVyOwoKICBfVXRmOEJhc2U2NEVuY29kZXJTaW5rKHRoaXMuX3NpbmssIGJvb2wgdXJsU2FmZSkKICAgICAgOiBfZW5jb2RlciA9IF9CYXNlNjRFbmNvZGVyKHVybFNhZmUpOwoKICB2b2lkIF9hZGQoTGlzdDxpbnQ+IHNvdXJjZSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgdmFyIGJ1ZmZlciA9IF9lbmNvZGVyLmVuY29kZShzb3VyY2UsIHN0YXJ0LCBlbmQsIGlzTGFzdCk7CiAgICBpZiAoYnVmZmVyICE9IG51bGwpIHsKICAgICAgX3NpbmsuYWRkU2xpY2UoYnVmZmVyLCAwLCBidWZmZXIubGVuZ3RoLCBpc0xhc3QpOwogICAgfQogIH0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIERlY29kZXIKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLy8gRGVjb2RlciBmb3IgYmFzZTY0IGVuY29kZWQgZGF0YS4KLy8vCi8vLyBUaGlzIGRlY29kZXIgYWNjZXB0cyBib3RoIGJhc2U2NCBhbmQgYmFzZTY0dXJsICgidXJsLXNhZmUiKSBlbmNvZGluZ3MuCi8vLwovLy8gVGhlIGVuY29kaW5nIGlzIHJlcXVpcmVkIHRvIGJlIHByb3Blcmx5IHBhZGRlZC4KY2xhc3MgQmFzZTY0RGVjb2RlciBleHRlbmRzIENvbnZlcnRlcjxTdHJpbmcsIExpc3Q8aW50Pj4gewogIGNvbnN0IEJhc2U2NERlY29kZXIoKTsKCiAgLy8vIERlY29kZXMgdGhlIGNoYXJhY3RlcnMgb2YgW2lucHV0XSBmcm9tIFtzdGFydF0gdG8gW2VuZF0gYXMgYmFzZTY0LgogIC8vLwogIC8vLyBJZiBbc3RhcnRdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHRoZSBzdGFydCBvZiBbaW5wdXRdLgogIC8vLyBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byB0aGUgZW5kIG9mIFtpbnB1dF0uCiAgLy8vCiAgLy8vIFRoZSByZXR1cm5lZCBbVWludDhMaXN0XSBjb250YWlucyBleGFjdGx5IHRoZSBkZWNvZGVkIGJ5dGVzLAogIC8vLyBzbyB0aGUgW1VpbnQ4TGlzdC5sZW5ndGhdIGlzIHByZWNpc2VseSB0aGUgbnVtYmVyIG9mIGRlY29kZWQgYnl0ZXMuCiAgLy8vIFRoZSBbVWludDhMaXN0LmJ1ZmZlcl0gbWF5IGJlIGxhcmdlciB0aGFuIHRoZSBkZWNvZGVkIGJ5dGVzLgogIFVpbnQ4TGlzdCBjb252ZXJ0KFN0cmluZyBpbnB1dCwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSB7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBpbnB1dC5sZW5ndGgpOwogICAgaWYgKHN0YXJ0ID09IGVuZCkgcmV0dXJuIFVpbnQ4TGlzdCgwKTsKICAgIHZhciBkZWNvZGVyID0gX0Jhc2U2NERlY29kZXIoKTsKICAgIHZhciBidWZmZXIgPSBkZWNvZGVyLmRlY29kZShpbnB1dCwgc3RhcnQsIGVuZCk7CiAgICBkZWNvZGVyLmNsb3NlKGlucHV0LCBlbmQpOwogICAgcmV0dXJuIGJ1ZmZlcjsKICB9CgogIFN0cmluZ0NvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxMaXN0PGludD4+IHNpbmspIHsKICAgIHJldHVybiBfQmFzZTY0RGVjb2RlclNpbmsoc2luayk7CiAgfQp9CgovLy8gSGVscGVyIGNsYXNzIGltcGxlbWVudGluZyBiYXNlNjQgZGVjb2Rpbmcgd2l0aCBpbnRlcm1lZGlhdGUgc3RhdGUuCmNsYXNzIF9CYXNlNjREZWNvZGVyIHsKICAvLy8gU2hpZnQtY291bnQgdG8gZXh0cmFjdCB0aGUgdmFsdWVzIHN0b3JlZCBpbiBbX3N0YXRlXS4KICBzdGF0aWMgY29uc3QgaW50IF92YWx1ZVNoaWZ0ID0gMjsKCiAgLy8vIE1hc2sgdG8gZXh0cmFjdCB0aGUgY291bnQgdmFsdWUgc3RvcmVkIGluIFtfc3RhdGVdLgogIHN0YXRpYyBjb25zdCBpbnQgX2NvdW50TWFzayA9IDM7CgogIC8vLyBJbnZhbGlkIGNoYXJhY3RlciBpbiBkZWNvZGluZyB0YWJsZS4KICBzdGF0aWMgY29uc3QgaW50IF9pbnZhbGlkID0gLTI7CgogIC8vLyBQYWRkaW5nIGNoYXJhY3RlciBpbiBkZWNvZGluZyB0YWJsZS4KICBzdGF0aWMgY29uc3QgaW50IF9wYWRkaW5nID0gLTE7CgogIC8vIFNob3J0aGFuZHMgdG8gbWFrZSB0aGUgdGFibGUgbW9yZSByZWFkYWJsZS4KICBzdGF0aWMgY29uc3QgaW50IF9fID0gX2ludmFsaWQ7CiAgc3RhdGljIGNvbnN0IGludCBfcCA9IF9wYWRkaW5nOwoKICAvLy8gTWFwcGluZyBmcm9tIEFTQ0lJIGNoYXJhY3RlcnMgdG8gdGhlaXIgaW5kZXggaW4gdGhlIGJhc2U2NCBhbHBoYWJldC4KICAvLy8KICAvLy8gVXNlcyBbX2ludmFsaWRdIGZvciBpbnZhbGlkIGluZGljZXMgYW5kIFtfcGFkZGluZ10gZm9yIHRoZSBwYWRkaW5nCiAgLy8vIGNoYXJhY3Rlci4KICAvLy8KICAvLy8gQWNjZXB0cyB0aGUgIlVSTC1zYWZlIiBhbHBoYWJldCBhcyB3ZWxsIChgLWAgYW5kIGBfYCBhcmUgdGhlCiAgLy8vIDYybmQgYW5kIDYzcmQgYWxwaGFiZXQgY2hhcmFjdGVycyksIGFuZCBjb25zaWRlcnMgYCVgIGEgcGFkZGluZwogIC8vLyBjaGFyYWN0ZXIsIHdoaWNoIG11c3QgdGhlbiBiZSBmb2xsb3dlZCBieSBgM0RgLCB0aGUgcGVyY2VudC1lc2NhcGUKICAvLy8gZm9yIGA9YC4KICBzdGF0aWMgZmluYWwgTGlzdDxpbnQ+IF9pbnZlcnNlQWxwaGFiZXQgPSBJbnQ4TGlzdC5mcm9tTGlzdChbCiAgICBfXywgX18sIF9fLCBfXywgX18sIF9fLCBfXywgX18sIF9fLCBfXywgX18sIF9fLCBfXywgX18sIF9fLCBfXywgLy8KICAgIF9fLCBfXywgX18sIF9fLCBfXywgX18sIF9fLCBfXywgX18sIF9fLCBfXywgX18sIF9fLCBfXywgX18sIF9fLCAvLwogICAgX18sIF9fLCBfXywgX18sIF9fLCBfcCwgX18sIF9fLCBfXywgX18sIF9fLCA2MiwgX18sIDYyLCBfXywgNjMsIC8vCiAgICA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgX18sIF9fLCBfXywgX3AsIF9fLCBfXywgLy8KICAgIF9fLCAwMCwgMDEsIDAyLCAwMywgMDQsIDA1LCAwNiwgMDcsIDA4LCAwOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAvLwogICAgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCBfXywgX18sIF9fLCBfXywgNjMsIC8vCiAgICBfXywgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgMzgsIDM5LCA0MCwgLy8KICAgIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgX18sIF9fLCBfXywgX18sIF9fLCAvLwogIF0pOwoKICAvLyBDaGFyYWN0ZXIgY29uc3RhbnRzLgogIHN0YXRpYyBjb25zdCBpbnQgX2NoYXJfcGVyY2VudCA9IDB4MjU7IC8vICclJy4KICBzdGF0aWMgY29uc3QgaW50IF9jaGFyXzMgPSAweDMzOyAvLyAnMycuCiAgc3RhdGljIGNvbnN0IGludCBfY2hhcl9kID0gMHg2NDsgLy8gJ2QnLgoKICAvLy8gTWFpbnRhaW5zIHRoZSBpbnRlcm1lZGlhdGUgc3RhdGUgb2YgYSBwYXJ0bHktZGVjb2RlZCBpbnB1dC4KICAvLy8KICAvLy8gQmFzZTY0IGlzIGRlY29kZWQgaW4gY2h1bmtzIG9mIGZvdXIgY2hhcmFjdGVycy4gSWYgYSBjaHVuayBkb2VzIG5vdAogIC8vLyBjb250YWluIGEgZnVsbCBibG9jaywgdGhlIGRlY29kZWQgYml0cyAoc2l4IHBlciBjaGFyYWN0ZXIpIG9mIHRoZQogIC8vLyBhdmFpbGFibGUgY2hhcmFjdGVycyBhcmUgc3RvcmVkIGluIFtfc3RhdGVdIHVudGlsIHRoZSBuZXh0IGNhbGwgdG8KICAvLy8gW19kZWNvZGVdIG9yIFtfY2xvc2VdLgogIC8vLwogIC8vLyBJZiBubyBwYWRkaW5nIGhhcyBiZWVuIHNlZW4sIHRoZSB2YWx1ZSBpcwogIC8vLyAgIGBudW1iZXJPZkNoYXJhY3RlcnNTZWVuIHwgKGRlY29kZWRCaXRzIDw8IDIpYAogIC8vLyB3aGVyZSBgbnVtYmVyT2ZDaGFyYWN0ZXJzU2VlbmAgaXMgYmV0d2VlbiAwIGFuZCAzIGFuZCBkZWNvZGVkIGJpdHMKICAvLy8gY29udGFpbnMgc2l4IGJpdHMgcGVyIHNlZW4gY2hhcmFjdGVyLgogIC8vLwogIC8vLyBJZiBwYWRkaW5nIGhhcyBiZWVuIHNlZW4gdGhlIHZhbHVlIGlzIG5lZ2F0aXZlLiBJdCdzIHRoZSBiaXR3aXNlIG5lZ2F0aW9uCiAgLy8vIG9mIHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIGFsbG93ZWQgcGFkZGluZyBjaGFyYWN0ZXJzIChhbHdheXMgfjAgb3IgfjEpLgogIC8vLwogIC8vLyBBIHN0YXRlIG9mIGAwYCBvciBgfjBgIGFyZSB2YWxpZCBwbGFjZXMgdG8gZW5kIGRlY29kaW5nLCBhbGwgb3RoZXIgdmFsdWVzCiAgLy8vIG1lYW4gdGhhdCBhIGZvdXItY2hhcmFjdGVyIGJsb2NrIGhhcyBub3QgYmVlbiBjb21wbGV0ZWQuCiAgaW50IF9zdGF0ZSA9IDA7CgogIC8vLyBFbmNvZGVzIFtjb3VudF0gYW5kIFtiaXRzXSBhcyBhIHZhbHVlIHRvIGJlIHN0b3JlZCBpbiBbX3N0YXRlXS4KICBzdGF0aWMgaW50IF9lbmNvZGVDaGFyYWN0ZXJTdGF0ZShpbnQgY291bnQsIGludCBiaXRzKSB7CiAgICBhc3NlcnQoY291bnQgPT0gKGNvdW50ICYgX2NvdW50TWFzaykpOwogICAgcmV0dXJuIChiaXRzIDw8IF92YWx1ZVNoaWZ0IHwgY291bnQpOwogIH0KCiAgLy8vIEV4dHJhY3RzIGNvdW50IGZyb20gYSBbX3N0YXRlXSB2YWx1ZS4KICBzdGF0aWMgaW50IF9zdGF0ZUNvdW50KGludCBzdGF0ZSkgewogICAgYXNzZXJ0KHN0YXRlID49IDApOwogICAgcmV0dXJuIHN0YXRlICYgX2NvdW50TWFzazsKICB9CgogIC8vLyBFeHRyYWN0cyB2YWx1ZSBiaXRzIGZyb20gYSBbX3N0YXRlXSB2YWx1ZS4KICBzdGF0aWMgaW50IF9zdGF0ZUJpdHMoaW50IHN0YXRlKSB7CiAgICBhc3NlcnQoc3RhdGUgPj0gMCk7CiAgICByZXR1cm4gc3RhdGUgPj4gX3ZhbHVlU2hpZnQ7CiAgfQoKICAvLy8gRW5jb2RlcyBhIG51bWJlciBvZiBleHBlY3RlZCBwYWRkaW5nIGNoYXJhY3RlcnMgdG8gYmUgc3RvcmVkIGluIFtfc3RhdGVdLgogIHN0YXRpYyBpbnQgX2VuY29kZVBhZGRpbmdTdGF0ZShpbnQgZXhwZWN0ZWRQYWRkaW5nKSB7CiAgICBhc3NlcnQoZXhwZWN0ZWRQYWRkaW5nID49IDApOwogICAgYXNzZXJ0KGV4cGVjdGVkUGFkZGluZyA8PSA1KTsKICAgIHJldHVybiAtZXhwZWN0ZWRQYWRkaW5nIC0gMTsgLy8gfmV4cGVjdGVkUGFkZGluZyBhZGFwdGVkIHRvIGRhcnQyanMuCiAgfQoKICAvLy8gRXh0cmFjdHMgZXhwZWN0ZWQgcGFkZGluZyBjaGFyYWN0ZXIgY291bnQgZnJvbSBhIFtfc3RhdGVdIHZhbHVlLgogIHN0YXRpYyBpbnQgX3N0YXRlUGFkZGluZyhpbnQgc3RhdGUpIHsKICAgIGFzc2VydChzdGF0ZSA8IDApOwogICAgcmV0dXJuIC1zdGF0ZSAtIDE7IC8vIH5zdGF0ZSBhZGFwdGVkIHRvIGRhcnQyanMuCiAgfQoKICBzdGF0aWMgYm9vbCBfaGFzU2VlblBhZGRpbmcoaW50IHN0YXRlKSA9PiBzdGF0ZSA8IDA7CgogIC8vLyBEZWNvZGVzIFtpbnB1dF0gZnJvbSBbc3RhcnRdIHRvIFtlbmRdLgogIC8vLwogIC8vLyBSZXR1cm5zIGEgW1VpbnQ4TGlzdF0gd2l0aCB0aGUgZGVjb2RlZCBieXRlcy4KICAvLy8gSWYgYSBwcmV2aW91cyBjYWxsIGhhZCBhbiBpbmNvbXBsZXRlIGZvdXItY2hhcmFjdGVyIGJsb2NrLCB0aGUgYml0cyBmcm9tCiAgLy8vIHRob3NlIGFyZSBpbmNsdWRlZCBpbiBkZWNvZGluZwogIFVpbnQ4TGlzdCBkZWNvZGUoU3RyaW5nIGlucHV0LCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIGFzc2VydCgwIDw9IHN0YXJ0KTsKICAgIGFzc2VydChzdGFydCA8PSBlbmQpOwogICAgYXNzZXJ0KGVuZCA8PSBpbnB1dC5sZW5ndGgpOwogICAgaWYgKF9oYXNTZWVuUGFkZGluZyhfc3RhdGUpKSB7CiAgICAgIF9zdGF0ZSA9IF9jaGVja1BhZGRpbmcoaW5wdXQsIHN0YXJ0LCBlbmQsIF9zdGF0ZSk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKHN0YXJ0ID09IGVuZCkgcmV0dXJuIFVpbnQ4TGlzdCgwKTsKICAgIHZhciBidWZmZXIgPSBfYWxsb2NhdGVCdWZmZXIoaW5wdXQsIHN0YXJ0LCBlbmQsIF9zdGF0ZSk7CiAgICBfc3RhdGUgPSBkZWNvZGVDaHVuayhpbnB1dCwgc3RhcnQsIGVuZCwgYnVmZmVyLCAwLCBfc3RhdGUpOwogICAgcmV0dXJuIGJ1ZmZlcjsKICB9CgogIC8vLyBDaGVja3MgdGhhdCBbX3N0YXRlXSByZXByZXNlbnRzIGEgdmFsaWQgZGVjb2RpbmcuCiAgdm9pZCBjbG9zZShTdHJpbmcgaW5wdXQsIGludCBlbmQpIHsKICAgIGlmIChfc3RhdGUgPCBfZW5jb2RlUGFkZGluZ1N0YXRlKDApKSB7CiAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiTWlzc2luZyBwYWRkaW5nIGNoYXJhY3RlciIsIGlucHV0LCBlbmQpOwogICAgfQogICAgaWYgKF9zdGF0ZSA+IDApIHsKICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKAogICAgICAgICAgIkludmFsaWQgbGVuZ3RoLCBtdXN0IGJlIG11bHRpcGxlIG9mIGZvdXIiLCBpbnB1dCwgZW5kKTsKICAgIH0KICAgIF9zdGF0ZSA9IF9lbmNvZGVQYWRkaW5nU3RhdGUoMCk7CiAgfQoKICAvLy8gRGVjb2RlcyBbaW5wdXRdIGZyb20gW3N0YXJ0XSB0byBbZW5kXS4KICAvLy8KICAvLy8gSW5jbHVkZXMgdGhlIHN0YXRlIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCBpbiB0aGUgZGVjb2RpbmcuCiAgLy8vIFdyaXRlcyB0aGUgZGVjb2RpbmcgdG8gW291dHB1dF0gYXQgW291dEluZGV4XSwgYW5kIHRoZXJlIG11c3QKICAvLy8gYmUgcm9vbSBpbiB0aGUgb3V0cHV0LgogIHN0YXRpYyBpbnQgZGVjb2RlQ2h1bmsoU3RyaW5nIGlucHV0LCBpbnQgc3RhcnQsIGludCBlbmQsIFVpbnQ4TGlzdCBvdXRwdXQsCiAgICAgIGludCBvdXRJbmRleCwgaW50IHN0YXRlKSB7CiAgICBhc3NlcnQoIV9oYXNTZWVuUGFkZGluZyhzdGF0ZSkpOwogICAgY29uc3QgYXNjaWlNYXNrID0gMTI3OwogICAgY29uc3QgYXNjaWlNYXggPSAxMjc7CiAgICBjb25zdCBlaWdodEJpdE1hc2sgPSAweEZGOwogICAgY29uc3QgYml0c1BlckNoYXJhY3RlciA9IDY7CgogICAgdmFyIGJpdHMgPSBfc3RhdGVCaXRzKHN0YXRlKTsKICAgIHZhciBjb3VudCA9IF9zdGF0ZUNvdW50KHN0YXRlKTsKICAgIC8vIFN0cmluZyBjb250ZW50cyBzaG91bGQgYmUgYWxsIEFTQ0lJLgogICAgLy8gSW5zdGVhZCBvZiBjaGVja2luZyBmb3IgZWFjaCBjaGFyYWN0ZXIsIHdlIGNvbGxlY3QgdGhlIGJpdHdpc2Utb3Igb2YKICAgIC8vIGFsbCB0aGUgY2hhcmFjdGVycyBpbiBgY2hhck9yYCBhbmQgbGF0ZXIgdmFsaWRhdGUgdGhhdCBhbGwgY2hhcmFjdGVycwogICAgLy8gd2VyZSBBU0NJSS4KICAgIHZhciBjaGFyT3IgPSAwOwogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgdmFyIGNoYXIgPSBpbnB1dC5jb2RlVW5pdEF0KGkpOwogICAgICBjaGFyT3IgfD0gY2hhcjsKICAgICAgdmFyIGNvZGUgPSBfaW52ZXJzZUFscGhhYmV0W2NoYXIgJiBhc2NpaU1hc2tdOwogICAgICBpZiAoY29kZSA+PSAwKSB7CiAgICAgICAgYml0cyA9ICgoYml0cyA8PCBiaXRzUGVyQ2hhcmFjdGVyKSB8IGNvZGUpICYgMHhGRkZGRkY7CiAgICAgICAgY291bnQgPSAoY291bnQgKyAxKSAmIDM7CiAgICAgICAgaWYgKGNvdW50ID09IDApIHsKICAgICAgICAgIGFzc2VydChvdXRJbmRleCArIDMgPD0gb3V0cHV0Lmxlbmd0aCk7CiAgICAgICAgICBvdXRwdXRbb3V0SW5kZXgrK10gPSAoYml0cyA+PiAxNikgJiBlaWdodEJpdE1hc2s7CiAgICAgICAgICBvdXRwdXRbb3V0SW5kZXgrK10gPSAoYml0cyA+PiA4KSAmIGVpZ2h0Qml0TWFzazsKICAgICAgICAgIG91dHB1dFtvdXRJbmRleCsrXSA9IGJpdHMgJiBlaWdodEJpdE1hc2s7CiAgICAgICAgICBiaXRzID0gMDsKICAgICAgICB9CiAgICAgICAgY29udGludWU7CiAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSBfcGFkZGluZyAmJiBjb3VudCA+IDEpIHsKICAgICAgICBpZiAoY2hhck9yIDwgMCB8fCBjaGFyT3IgPiBhc2NpaU1heCkgYnJlYWs7CiAgICAgICAgaWYgKGNvdW50ID09IDMpIHsKICAgICAgICAgIGlmICgoYml0cyAmIDB4MDMpICE9IDApIHsKICAgICAgICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKCJJbnZhbGlkIGVuY29kaW5nIGJlZm9yZSBwYWRkaW5nIiwgaW5wdXQsIGkpOwogICAgICAgICAgfQogICAgICAgICAgb3V0cHV0W291dEluZGV4KytdID0gYml0cyA+PiAxMDsKICAgICAgICAgIG91dHB1dFtvdXRJbmRleCsrXSA9IGJpdHMgPj4gMjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKChiaXRzICYgMHgwRikgIT0gMCkgewogICAgICAgICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oIkludmFsaWQgZW5jb2RpbmcgYmVmb3JlIHBhZGRpbmciLCBpbnB1dCwgaSk7CiAgICAgICAgICB9CiAgICAgICAgICBvdXRwdXRbb3V0SW5kZXgrK10gPSBiaXRzID4+IDQ7CiAgICAgICAgfQogICAgICAgIC8vIEV4cGVjdGVkIHBhZGRpbmcgaXMgdGhlIG51bWJlciBvZiBleHBlY3RlZCBwYWRkaW5nIGNoYXJhY3RlcnMsCiAgICAgICAgLy8gd2hlcmUgYD1gIGNvdW50cyBhcyB0aHJlZSBhbmQgYCUzRGAgY291bnRzIGFzIG9uZSBwZXIgY2hhcmFjdGVyLgogICAgICAgIC8vCiAgICAgICAgLy8gRXhwZWN0IGVpdGhlciB6ZXJvIG9yIG9uZSBwYWRkaW5nIGRlcGVuZGluZyBvbiBjb3VudCAoMiBvciAzKSwKICAgICAgICAvLyBwbHVzIHR3byBtb3JlIGNoYXJhY3RlcnMgaWYgdGhlIGNvZGUgd2FzIGAlYCAoYSBwYXJ0aWFsIHBhZGRpbmcpLgogICAgICAgIHZhciBleHBlY3RlZFBhZGRpbmcgPSAoMyAtIGNvdW50KSAqIDM7CiAgICAgICAgaWYgKGNoYXIgPT0gX2NoYXJfcGVyY2VudCkgZXhwZWN0ZWRQYWRkaW5nICs9IDI7CiAgICAgICAgc3RhdGUgPSBfZW5jb2RlUGFkZGluZ1N0YXRlKGV4cGVjdGVkUGFkZGluZyk7CiAgICAgICAgcmV0dXJuIF9jaGVja1BhZGRpbmcoaW5wdXQsIGkgKyAxLCBlbmQsIHN0YXRlKTsKICAgICAgfQogICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oIkludmFsaWQgY2hhcmFjdGVyIiwgaW5wdXQsIGkpOwogICAgfQogICAgaWYgKGNoYXJPciA+PSAwICYmIGNoYXJPciA8PSBhc2NpaU1heCkgewogICAgICByZXR1cm4gX2VuY29kZUNoYXJhY3RlclN0YXRlKGNvdW50LCBiaXRzKTsKICAgIH0KICAgIC8vIFRoZXJlIGlzIGFuIGludmFsaWQgKG5vbi1BU0NJSSkgY2hhcmFjdGVyIGluIHRoZSBpbnB1dC4KICAgIGludCBpOwogICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICB2YXIgY2hhciA9IGlucHV0LmNvZGVVbml0QXQoaSk7CiAgICAgIGlmIChjaGFyIDwgMCB8fCBjaGFyID4gYXNjaWlNYXgpIGJyZWFrOwogICAgfQogICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKCJJbnZhbGlkIGNoYXJhY3RlciIsIGlucHV0LCBpKTsKICB9CgogIC8vLyBBbGxvY2F0ZXMgYSBidWZmZXIgd2l0aCByb29tIGZvciB0aGUgZGVjb2Rpbmcgb2YgYSBzdWJzdHJpbmcgb2YgW2lucHV0XS4KICAvLy8KICAvLy8gSW5jbHVkZXMgcm9vbSBmb3IgdGhlIGNoYXJhY3RlcnMgaW4gW3N0YXRlXSwgYW5kIGhhbmRsZXMgcGFkZGluZyBjb3JyZWN0bHkuCiAgc3RhdGljIFVpbnQ4TGlzdCBfYWxsb2NhdGVCdWZmZXIoCiAgICAgIFN0cmluZyBpbnB1dCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgc3RhdGUpIHsKICAgIGFzc2VydChzdGF0ZSA+PSAwKTsKICAgIHZhciBwYWRkaW5nU3RhcnQgPSBfdHJpbVBhZGRpbmdDaGFycyhpbnB1dCwgc3RhcnQsIGVuZCk7CiAgICB2YXIgbGVuZ3RoID0gX3N0YXRlQ291bnQoc3RhdGUpICsgKHBhZGRpbmdTdGFydCAtIHN0YXJ0KTsKICAgIC8vIFRocmVlIGJ5dGVzIHBlciBmdWxsIGZvdXIgYnl0ZXMgaW4gdGhlIGlucHV0LgogICAgdmFyIGJ1ZmZlckxlbmd0aCA9IChsZW5ndGggPj4gMikgKiAzOwogICAgLy8gSWYgcGFkZGluZyB3YXMgc2VlbiwgdGhlbiB0aGlzIGlzIHRoZSBsYXN0IGNodW5rLCBhbmQgdGhlIGZpbmFsIHBhcnRpYWwKICAgIC8vIGNodW5rIHNob3VsZCBiZSBkZWNvZGVkIHRvby4KICAgIHZhciByZW1haW5kZXJMZW5ndGggPSBsZW5ndGggJiAzOwogICAgaWYgKHJlbWFpbmRlckxlbmd0aCAhPSAwICYmIHBhZGRpbmdTdGFydCA8IGVuZCkgewogICAgICBidWZmZXJMZW5ndGggKz0gcmVtYWluZGVyTGVuZ3RoIC0gMTsKICAgIH0KICAgIGlmIChidWZmZXJMZW5ndGggPiAwKSByZXR1cm4gVWludDhMaXN0KGJ1ZmZlckxlbmd0aCk7CiAgICAvLyBJZiB0aGUgaW5wdXQgcGx1cyBzdGF0ZSBpcyBsZXNzIHRoYW4gZm91ciBjaGFyYWN0ZXJzLCBhbmQgaXQncyBub3QKICAgIC8vIGF0IHRoZSBlbmQgb2YgaW5wdXQsIG5vIGJ1ZmZlciBpcyBuZWVkZWQuCiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgc3RhcnQgb2YgcGFkZGluZyBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dC4KICAvLy8KICAvLy8gUmV0dXJucyB0aGUgZW5kIG9mIGlucHV0IGlmIHRoZXJlIGlzIG5vIHBhZGRpbmcuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgdGhhdCB0aGUgZGVjb2RpbmcgYnVmZmVyIGhhcyB0aGUgZXhhY3Qgc2l6ZQogIC8vLyBpdCBuZWVkcyB3aGVuIGlucHV0IGlzIHZhbGlkLCBhbmQgYXQgbGVhc3QgZW5vdWdoIGJ5dGVzIHRvIHJlYWNoIHRoZSBlcnJvcgogIC8vLyB3aGVuIGlucHV0IGlzIGludmFsaWQuCiAgLy8vCiAgLy8vIE5ldmVyIGNvdW50IG1vcmUgdGhhbiB0d28gcGFkZGluZyBzZXF1ZW5jZXMgc2luY2UgYW55IG1vcmUgdGhhbiB0aGF0CiAgLy8vIHdpbGwgcmFpc2UgYW4gZXJyb3IgYW55d2F5LCBhbmQgd2Ugb25seSBjYXJlIGFib3V0IGJlaW5nIHByZWNpc2UgZm9yCiAgLy8vIHN1Y2Nlc3NmdWwgY29udmVyc2lvbnMuCiAgc3RhdGljIGludCBfdHJpbVBhZGRpbmdDaGFycyhTdHJpbmcgaW5wdXQsIGludCBzdGFydCwgaW50IGVuZCkgewogICAgLy8gVGhpcyBtYXkgY291bnQgJyU9JyBhcyB0d28gcGFkZGluZ3MuIFRoYXQncyBvaywgaXQgd2lsbCBlcnIgbGF0ZXIsCiAgICAvLyBidXQgdGhlIGJ1ZmZlciB3aWxsIGJlIGxhcmdlIGVub3VnaCB0byByZWFjaCB0aGUgZXJyb3IuCiAgICB2YXIgcGFkZGluZyA9IDA7CiAgICB2YXIgaW5kZXggPSBlbmQ7CiAgICB2YXIgbmV3RW5kID0gZW5kOwogICAgd2hpbGUgKGluZGV4ID4gc3RhcnQgJiYgcGFkZGluZyA8IDIpIHsKICAgICAgaW5kZXgtLTsKICAgICAgdmFyIGNoYXIgPSBpbnB1dC5jb2RlVW5pdEF0KGluZGV4KTsKICAgICAgaWYgKGNoYXIgPT0gX3BhZGRpbmdDaGFyKSB7CiAgICAgICAgcGFkZGluZysrOwogICAgICAgIG5ld0VuZCA9IGluZGV4OwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmICgoY2hhciB8IDB4MjApID09IF9jaGFyX2QpIHsKICAgICAgICBpZiAoaW5kZXggPT0gc3RhcnQpIGJyZWFrOwogICAgICAgIGluZGV4LS07CiAgICAgICAgY2hhciA9IGlucHV0LmNvZGVVbml0QXQoaW5kZXgpOwogICAgICB9CiAgICAgIGlmIChjaGFyID09IF9jaGFyXzMpIHsKICAgICAgICBpZiAoaW5kZXggPT0gc3RhcnQpIGJyZWFrOwogICAgICAgIGluZGV4LS07CiAgICAgICAgY2hhciA9IGlucHV0LmNvZGVVbml0QXQoaW5kZXgpOwogICAgICB9CiAgICAgIGlmIChjaGFyID09IF9jaGFyX3BlcmNlbnQpIHsKICAgICAgICBwYWRkaW5nKys7CiAgICAgICAgbmV3RW5kID0gaW5kZXg7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICB9CiAgICByZXR1cm4gbmV3RW5kOwogIH0KCiAgLy8vIENoZWNrIHRoYXQgdGhlIHJlbWFpbmRlciBvZiB0aGUgc3RyaW5nIGlzIHZhbGlkIHBhZGRpbmcuCiAgLy8vCiAgLy8vIFZhbGlkIHBhZGRpbmcgaXMgYSBjb3JyZWN0IG51bWJlciAoMCwgMSBvciAyKSBvZiBgPWAgY2hhcmFjdGVycwogIC8vLyBvciBgJTNEYCBzZXF1ZW5jZXMgZGVwZW5kaW5nIG9uIHRoZSBudW1iZXIgb2YgcHJlY2VkaW5nIGJhc2U2NCBjaGFyYWN0ZXJzLgogIC8vLyBUaGUgW3N0YXRlXSBwYXJhbWV0ZXIgZW5jb2RlcyB3aGljaCBwYWRkaW5nIGNvbnRpbnVhdGlvbnMgYXJlIGFsbG93ZWQKICAvLy8gYXMgdGhlIG51bWJlciBvZiBleHBlY3RlZCBjaGFyYWN0ZXJzLiBUaGF0IG51bWJlciBpcyB0aGUgbnVtYmVyIG9mCiAgLy8vIGV4cGVjdGVkIHBhZGRpbmcgY2hhcmFjdGVycyB0aW1lcyAzIG1pbnVzIHRoZSBudW1iZXIgb2YgcGFkZGluZyBjaGFyYWN0ZXJzCiAgLy8vIHNlZW4gc28gZmFyLCB3aGVyZSBgPWAgY291bnRzIGFzIDMgY291bnRzIGFzIHRocmVlIGNoYXJhY3RlcnMsCiAgLy8vIGFuZCB0aGUgcGFkZGluZyBzZXF1ZW5jZSBgJTNEYCBjb3VudHMgYXMgb25lIGNoYXJhY3RlciBwZXIgY2hhcmFjdGVyLgogIC8vLwogIC8vLyBUaGUgbnVtYmVyIG9mIG1pc3NpbmcgY2hhcmFjdGVycyBpcyBhbHdheXMgYmV0d2VlbiAwIGFuZCA1IGJlY2F1c2Ugd2UKICAvLy8gb25seSBjYWxsIHRoaXMgZnVuY3Rpb24gYWZ0ZXIgaGF2aW5nIHNlZW4gYXQgbGVhc3Qgb25lIGA9YCBvciBgJWAKICAvLy8gY2hhcmFjdGVyLgogIC8vLyBJZiB0aGUgbnVtYmVyIG9mIG1pc3NpbmcgY2hhcmFjdGVycyBpcyBub3QgMyBvciAwLCB3ZSBoYXZlIHNlZW4gKGF0IGxlYXN0KQogIC8vLyBhIGAlYCBjaGFyYWN0ZXIgYW5kIGV4cGVjdHMgdGhlIHJlc3Qgb2YgdGhlIGAlM0RgIHNlcXVlbmNlLCBhbmQgYSBgPWAgaXMKICAvLy8gbm90IGFsbG93ZWQuIFdoZW4gbWlzc2luZyAzIGNoYXJhY3RlcnMsIGVpdGhlciBgPWAgb3IgYCVgIGlzIGFsbG93ZWQuCiAgLy8vCiAgLy8vIFdoZW4gdGhlIHZhbHVlIGlzIDAsIG5vIG1vcmUgcGFkZGluZyAob3IgYW55IG90aGVyIGNoYXJhY3RlcikgaXMgYWxsb3dlZC4KICBzdGF0aWMgaW50IF9jaGVja1BhZGRpbmcoU3RyaW5nIGlucHV0LCBpbnQgc3RhcnQsIGludCBlbmQsIGludCBzdGF0ZSkgewogICAgYXNzZXJ0KF9oYXNTZWVuUGFkZGluZyhzdGF0ZSkpOwogICAgaWYgKHN0YXJ0ID09IGVuZCkgcmV0dXJuIHN0YXRlOwogICAgdmFyIGV4cGVjdGVkUGFkZGluZyA9IF9zdGF0ZVBhZGRpbmcoc3RhdGUpOwogICAgYXNzZXJ0KGV4cGVjdGVkUGFkZGluZyA+PSAwKTsKICAgIGFzc2VydChleHBlY3RlZFBhZGRpbmcgPCA2KTsKICAgIHdoaWxlIChleHBlY3RlZFBhZGRpbmcgPiAwKSB7CiAgICAgIHZhciBjaGFyID0gaW5wdXQuY29kZVVuaXRBdChzdGFydCk7CiAgICAgIGlmIChleHBlY3RlZFBhZGRpbmcgPT0gMykgewogICAgICAgIGlmIChjaGFyID09IF9wYWRkaW5nQ2hhcikgewogICAgICAgICAgZXhwZWN0ZWRQYWRkaW5nIC09IDM7CiAgICAgICAgICBzdGFydCsrOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChjaGFyID09IF9jaGFyX3BlcmNlbnQpIHsKICAgICAgICAgIGV4cGVjdGVkUGFkZGluZy0tOwogICAgICAgICAgc3RhcnQrKzsKICAgICAgICAgIGlmIChzdGFydCA9PSBlbmQpIGJyZWFrOwogICAgICAgICAgY2hhciA9IGlucHV0LmNvZGVVbml0QXQoc3RhcnQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gUGFydGlhbCBwYWRkaW5nIG1lYW5zIHdlIGhhdmUgc2VlbiBwYXJ0IG9mIGEgIiUzRCIgZXNjYXBlLgogICAgICB2YXIgZXhwZWN0ZWRQYXJ0aWFsUGFkZGluZyA9IGV4cGVjdGVkUGFkZGluZzsKICAgICAgaWYgKGV4cGVjdGVkUGFydGlhbFBhZGRpbmcgPiAzKSBleHBlY3RlZFBhcnRpYWxQYWRkaW5nIC09IDM7CiAgICAgIGlmIChleHBlY3RlZFBhcnRpYWxQYWRkaW5nID09IDIpIHsKICAgICAgICAvLyBFeHBlY3RzICczJwogICAgICAgIGlmIChjaGFyICE9IF9jaGFyXzMpIGJyZWFrOwogICAgICAgIHN0YXJ0Kys7CiAgICAgICAgZXhwZWN0ZWRQYWRkaW5nLS07CiAgICAgICAgaWYgKHN0YXJ0ID09IGVuZCkgYnJlYWs7CiAgICAgICAgY2hhciA9IGlucHV0LmNvZGVVbml0QXQoc3RhcnQpOwogICAgICB9CiAgICAgIC8vIEV4cGVjdHMgJ0QnIG9yICdkJy4KICAgICAgaWYgKChjaGFyIHwgMHgyMCkgIT0gX2NoYXJfZCkgYnJlYWs7CiAgICAgIHN0YXJ0Kys7CiAgICAgIGV4cGVjdGVkUGFkZGluZy0tOwogICAgICBpZiAoc3RhcnQgPT0gZW5kKSBicmVhazsKICAgIH0KICAgIGlmIChzdGFydCAhPSBlbmQpIHsKICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKCJJbnZhbGlkIHBhZGRpbmcgY2hhcmFjdGVyIiwgaW5wdXQsIHN0YXJ0KTsKICAgIH0KICAgIHJldHVybiBfZW5jb2RlUGFkZGluZ1N0YXRlKGV4cGVjdGVkUGFkZGluZyk7CiAgfQp9CgpjbGFzcyBfQmFzZTY0RGVjb2RlclNpbmsgZXh0ZW5kcyBTdHJpbmdDb252ZXJzaW9uU2lua0Jhc2UgewogIC8vLyBPdXRwdXQgc2luawogIGZpbmFsIFNpbms8TGlzdDxpbnQ+PiBfc2luazsKICBmaW5hbCBfQmFzZTY0RGVjb2RlciBfZGVjb2RlciA9IF9CYXNlNjREZWNvZGVyKCk7CgogIF9CYXNlNjREZWNvZGVyU2luayh0aGlzLl9zaW5rKTsKCiAgdm9pZCBhZGQoU3RyaW5nIHN0cmluZykgewogICAgaWYgKHN0cmluZy5pc0VtcHR5KSByZXR1cm47CiAgICB2YXIgYnVmZmVyID0gX2RlY29kZXIuZGVjb2RlKHN0cmluZywgMCwgc3RyaW5nLmxlbmd0aCk7CiAgICBpZiAoYnVmZmVyICE9IG51bGwpIF9zaW5rLmFk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LyBhY2NlcHRzIGl0cyBpbnB1dCBpbiBjaHVua3MgKHRoZW1zZWx2ZXMgYmVpbmcgbGlzdHMgb2YgYnl0ZXMpLgovLy8KLy8vIFRoaXMgYWJzdHJhY3QgY2xhc3Mgd2lsbCBsaWtlbHkgZ2V0IG1vcmUgbWV0aG9kcyBvdmVyIHRpbWUuIEltcGxlbWVudGVycyBhcmUKLy8vIHVyZ2VkIHRvIGV4dGVuZCBvciBtaXggaW4gW0J5dGVDb252ZXJzaW9uU2lua0Jhc2VdIHRvIGVuc3VyZSB0aGF0IHRoZWlyCi8vLyBjbGFzcyBjb3ZlcnMgdGhlIG5ld2x5IGFkZGVkIG1ldGhvZHMuCmFic3RyYWN0IGNsYXNzIEJ5dGVDb252ZXJzaW9uU2luayBleHRlbmRzIENodW5rZWRDb252ZXJzaW9uU2luazxMaXN0PGludD4+IHsKICBCeXRlQ29udmVyc2lvblNpbmsoKTsKICBmYWN0b3J5IEJ5dGVDb252ZXJzaW9uU2luay53aXRoQ2FsbGJhY2soCiAgICAgIHZvaWQgY2FsbGJhY2soTGlzdDxpbnQ+IGFjY3VtdWxhdGVkKSkgPSBfQnl0ZUNhbGxiYWNrU2luazsKICBmYWN0b3J5IEJ5dGVDb252ZXJzaW9uU2luay5mcm9tKFNpbms8TGlzdDxpbnQ+PiBzaW5rKSA9IF9CeXRlQWRhcHRlclNpbms7CgogIC8vLyBBZGRzIHRoZSBuZXh0IFtjaHVua10gdG8gYHRoaXNgLgogIC8vLwogIC8vLyBBZGRzIHRoZSBieXRlcyBkZWZpbmVkIGJ5IFtzdGFydF0gYW5kIFtlbmRdLWV4Y2x1c2l2ZSB0byBgdGhpc2AuCiAgLy8vCiAgLy8vIElmIFtpc0xhc3RdIGlzIGB0cnVlYCBjbG9zZXMgYHRoaXNgLgogIC8vLwogIC8vLyBDb250cmFyeSB0byBgYWRkYCB0aGUgZ2l2ZW4gW2NodW5rXSBtdXN0IG5vdCBiZSBoZWxkIG9udG8uIE9uY2UgdGhlIG1ldGhvZAogIC8vLyByZXR1cm5zLCBpdCBpcyBzYWZlIHRvIG92ZXJ3cml0ZSB0aGUgZGF0YSBpbiBpdC4KICB2b2lkIGFkZFNsaWNlKExpc3Q8aW50PiBjaHVuaywgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCk7CgogIC8vIFRPRE8oZmxvaXRzY2gpOiBhZGQgbW9yZSBtZXRob2RzOgogIC8vIC0gaXRlcmF0ZUJ5dGVzLgp9CgovLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhIGJhc2UtY2xhc3MgZm9yIGNvbnZlcnRlcnMgdGhhdCBuZWVkIHRvIGFjY2VwdCBieXRlCi8vLyBpbnB1dHMuCmFic3RyYWN0IGNsYXNzIEJ5dGVDb252ZXJzaW9uU2lua0Jhc2UgZXh0ZW5kcyBCeXRlQ29udmVyc2lvblNpbmsgewogIHZvaWQgYWRkKExpc3Q8aW50PiBjaHVuayk7CiAgdm9pZCBjbG9zZSgpOwoKICB2b2lkIGFkZFNsaWNlKExpc3Q8aW50PiBjaHVuaywgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgYWRkKGNodW5rLnN1Ymxpc3Qoc3RhcnQsIGVuZCkpOwogICAgaWYgKGlzTGFzdCkgY2xvc2UoKTsKICB9Cn0KCi8vLyBUaGlzIGNsYXNzIGFkYXB0cyBhIHNpbXBsZSBbU2lua10gdG8gYSBbQnl0ZUNvbnZlcnNpb25TaW5rXS4KLy8vCi8vLyBBbGwgYWRkaXRpb25hbCBtZXRob2RzIG9mIHRoZSBbQnl0ZUNvbnZlcnNpb25TaW5rXSAoY29tcGFyZWQgdG8gdGhlCi8vLyBDaHVua2VkQ29udmVyc2lvblNpbmspIGFyZSByZWRpcmVjdGVkIHRvIHRoZSBgYWRkYCBtZXRob2QuCmNsYXNzIF9CeXRlQWRhcHRlclNpbmsgZXh0ZW5kcyBCeXRlQ29udmVyc2lvblNpbmtCYXNlIHsKICBmaW5hbCBTaW5rPExpc3Q8aW50Pj4gX3Npbms7CgogIF9CeXRlQWRhcHRlclNpbmsodGhpcy5fc2luayk7CgogIHZvaWQgYWRkKExpc3Q8aW50PiBjaHVuaykgewogICAgX3NpbmsuYWRkKGNodW5rKTsKICB9CgogIHZvaWQgY2xvc2UoKSB7CiAgICBfc2luay5jbG9zZSgpOwogIH0KfQoKLy8vIFRoaXMgY2xhc3MgYWNjdW11bGF0ZXMgYWxsIGNodW5rcyBpbnRvIG9uZSBsaXN0IG9mIGJ5dGVzCi8vLyBhbmQgaW52b2tlcyBhIGNhbGxiYWNrIHdoZW4gdGhlIHNpbmsgaXMgY2xvc2VkLgovLy8KLy8vIFRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgdG8gdGVybWluYXRlIGEgY2h1bmtlZCBjb252ZXJzaW9uLgpjbGFzcyBfQnl0ZUNhbGxiYWNrU2luayBleHRlbmRzIEJ5dGVDb252ZXJzaW9uU2lua0Jhc2UgewogIHN0YXRpYyBjb25zdCBfSU5JVElBTF9CVUZGRVJfU0laRSA9IDEwMjQ7CgogIGZpbmFsIHZvaWQgRnVuY3Rpb24oTGlzdDxpbnQ+KSBfY2FsbGJhY2s7CiAgTGlzdDxpbnQ+IF9idWZmZXIgPSBVaW50OExpc3QoX0lOSVRJQUxfQlVGRkVSX1NJWkUpOwogIGludCBfYnVmZmVySW5kZXggPSAwOwoKICBfQnl0ZUNhbGxiYWNrU2luayh2b2lkIGNhbGxiYWNrKExpc3Q8aW50PiBhY2N1bXVsYXRlZCkpCiAgICAgIDogX2NhbGxiYWNrID0gY2FsbGJhY2s7CgogIHZvaWQgYWRkKEl0ZXJhYmxlPGludD4gY2h1bmspIHsKICAgIHZhciBmcmVlQ291bnQgPSBfYnVmZmVyLmxlbmd0aCAtIF9idWZmZXJJbmRleDsKICAgIGlmIChjaHVuay5sZW5ndGggPiBmcmVlQ291bnQpIHsKICAgICAgLy8gR3JvdyB0aGUgYnVmZmVyLgogICAgICB2YXIgb2xkTGVuZ3RoID0gX2J1ZmZlci5sZW5ndGg7CiAgICAgIHZhciBuZXdMZW5ndGggPSBfcm91bmRUb1Bvd2VyT2YyKGNodW5rLmxlbmd0aCArIG9sZExlbmd0aCkgKiAyOwogICAgICB2YXIgZ3Jvd24gPSBVaW50OExpc3QobmV3TGVuZ3RoKTsKICAgICAgZ3Jvd24uc2V0UmFuZ2UoMCwgX2J1ZmZlci5sZW5ndGgsIF9idWZmZXIpOwogICAgICBfYnVmZmVyID0gZ3Jvd247CiAgICB9CiAgICBfYnVmZmVyLnNldFJhbmdlKF9idWZmZXJJbmRleCwgX2J1ZmZlckluZGV4ICsgY2h1bmsubGVuZ3RoLCBjaHVuayk7CiAgICBfYnVmZmVySW5kZXggKz0gY2h1bmsubGVuZ3RoOwogIH0KCiAgc3RhdGljIGludCBfcm91bmRUb1Bvd2VyT2YyKGludCB2KSB7CiAgICBhc3NlcnQodiA+IDApOwogICAgdi0tOwogICAgdiB8PSB2ID4+IDE7CiAgICB2IHw9IHYgPj4gMjsKICAgIHYgfD0gdiA+PiA0OwogICAgdiB8PSB2ID4+IDg7CiAgICB2IHw9IHYgPj4gMTY7CiAgICB2Kys7CiAgICByZXR1cm4gdjsKICB9CgogIHZvaWQgY2xvc2UoKSB7CiAgICBfY2FsbGJhY2soX2J1ZmZlci5zdWJsaXN0KDAsIF9idWZmZXJJbmRleCkpOwogIH0KfQpvAE5OPAEWAUUkBEpDBFFMKk0YK0FMAScGRwYrBlE3QwEnFQIBTQxDHRABRCQZBAIBQQRIPzgfASABHhYEARETBAIBPTQEPjksASw3GAE6HgEiMyQaJkYoMhcGSCIEAScTCRERERESCQ4EARExBAIBIWRhcnQ6Y29udmVydC9ieXRlX2NvbnZlcnNpb24uZGFydDtvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29udmVydC9jaHVua2VkX2NvbnZlcnNpb24uZGFydIpvLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb252ZXJ0OwoKLy8vIEEgW0NodW5rZWRDb252ZXJzaW9uU2lua10gaXMgdXNlZCB0byB0cmFuc21pdCBkYXRhIG1vcmUgZWZmaWNpZW50bHkgYmV0d2VlbgovLy8gdHdvIGNvbnZlcnRlcnMgZHVyaW5nIGNodW5rZWQgY29udmVyc2lvbnMuCi8vLwovLy8gVGhlIGJhc2ljIGBDaHVua2VkQ29udmVyc2lvblNpbmtgIGlzIGp1c3QgYSBbU2lua10sIGFuZCBjb252ZXJ0ZXJzIHNob3VsZAovLy8gd29yayB3aXRoIGEgcGxhaW4gYFNpbmtgLCBidXQgbWF5IHdvcmsgbW9yZSBlZmZpY2llbnRseSB3aXRoIGNlcnRhaW4KLy8vIHNwZWNpYWxpemVkIHR5cGVzIG9mIGBDaHVua2VkQ29udmVyc2lvblNpbmtgLgovLy8KLy8vIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgaW1wbGVtZW50YXRpb25zIG9mIGBDaHVua2VkQ29udmVyc2lvblNpbmtgIGV4dGVuZAovLy8gdGhpcyBjbGFzcywgdG8gaW5oZXJpdCBhbnkgZnVydGhlciBtZXRob2RzIHRoYXQgbWF5IGJlIGFkZGVkIHRvIHRoZSBjbGFzcy4KYWJzdHJhY3QgY2xhc3MgQ2h1bmtlZENvbnZlcnNpb25TaW5rPFQ+IGltcGxlbWVudHMgU2luazxUPiB7CiAgQ2h1bmtlZENvbnZlcnNpb25TaW5rKCk7CiAgZmFjdG9yeSBDaHVua2VkQ29udmVyc2lvblNpbmsud2l0aENhbGxiYWNrKAogICAgICB2b2lkIGNhbGxiYWNrKExpc3Q8VD4gYWNjdW11bGF0ZWQpKSA9IF9TaW1wbGVDYWxsYmFja1Npbms8VD47CgogIC8vLyBBZGRzIGNodW5rZWQgZGF0YSB0byB0aGlzIHNpbmsuCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIGlzIGFsc28gdXNlZCB3aGVuIGNvbnZlcnRlcnMgYXJlIHVzZWQgYXMgW1N0cmVhbVRyYW5zZm9ybWVyXXMuCiAgdm9pZCBhZGQoVCBjaHVuayk7CgogIC8vLyBDbG9zZXMgdGhlIHNpbmsuCiAgLy8vCiAgLy8vIFRoaXMgc2lnbmFscyB0aGUgZW5kIG9mIHRoZSBjaHVua2VkIGNvbnZlcnNpb24uIFRoaXMgbWV0aG9kIGlzIGNhbGxlZAogIC8vLyB3aGVuIGNvbnZlcnRlcnMgYXJlIHVzZWQgYXMgW1N0cmVhbVRyYW5zZm9ybWVyXSdzLgogIHZvaWQgY2xvc2UoKTsKfQoKLy8vIFRoaXMgY2xhc3MgYWNjdW11bGF0ZXMgYWxsIGNodW5rcyBhbmQgaW52b2tlcyBhIGNhbGxiYWNrIHdpdGggYSBsaXN0IG9mCi8vLyB0aGUgY2h1bmtzIHdoZW4gdGhlIHNpbmsgaXMgY2xvc2VkLgovLy8KLy8vIFRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgdG8gdGVybWluYXRlIGEgY2h1bmtlZCBjb252ZXJzaW9uLgpjbGFzcyBfU2ltcGxlQ2FsbGJhY2tTaW5rPFQ+IGV4dGVuZHMgQ2h1bmtlZENvbnZlcnNpb25TaW5rPFQ+IHsKICBmaW5hbCB2b2lkIEZ1bmN0aW9uKExpc3Q8VD4pIF9jYWxsYmFjazsKICBmaW5hbCBMaXN0PFQ+IF9hY2N1bXVsYXRlZCA9IDxUPltdOwoKICBfU2ltcGxlQ2FsbGJhY2tTaW5rKHRoaXMuX2NhbGxiYWNrKTsKCiAgdm9pZCBhZGQoVCBjaHVuaykgewogICAgX2FjY3VtdWxhdGVkLmFkZChjaHVuayk7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgX2NhbGxiYWNrKF9hY2N1bXVsYXRlZCk7CiAgfQp9CgovLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBsb2dpYyBmb3IgYSBjaHVua2VkIGNvbnZlcnNpb24gYXMgYQovLy8gc3RyZWFtIHRyYW5zZm9ybWVyLgovLy8KLy8vIEl0IGlzIHVzZWQgYXMgc3RyYXRlZ3kgaW4gdGhlIFtFdmVudFRyYW5zZm9ybVN0cmVhbV0uCi8vLwovLy8gSXQgYWxzbyBpbXBsZW1lbnRzIHRoZSBbQ2h1bmtlZENvbnZlcnNpb25TaW5rXSBpbnRlcmZhY2Ugc28gdGhhdCBpdAovLy8gY2FuIGJlIHVzZWQgYXMgb3V0cHV0IHNpbmsgaW4gYSBjaHVua2VkIGNvbnZlcnNpb24uCmNsYXNzIF9Db252ZXJ0ZXJTdHJlYW1FdmVudFNpbms8UywgVD4gaW1wbGVtZW50cyBFdmVudFNpbms8Uz4gewogIC8vLyBUaGUgb3V0cHV0IHNpbmsgZm9yIHRoZSBjb252ZXJ0ZXIuCiAgZmluYWwgRXZlbnRTaW5rPFQ+IF9ldmVudFNpbms7CgogIC8vLyBUaGUgaW5wdXQgc2luayBmb3IgbmV3IGRhdGEuIEFsbCBkYXRhIHRoYXQgaXMgcmVjZWl2ZWQgd2l0aAogIC8vLyBbaGFuZGxlRGF0YV0gaXMgYWRkZWQgaW50byB0aGlzIHNpbmsuCiAgZmluYWwgU2luazxTPiBfY2h1bmtlZFNpbms7CgogIF9Db252ZXJ0ZXJTdHJlYW1FdmVudFNpbmsoQ29udmVydGVyPFMsIFQ+IGNvbnZlcnRlciwgRXZlbnRTaW5rPFQ+IHNpbmspCiAgICAgIDogX2V2ZW50U2luayA9IHNpbmssCiAgICAgICAgX2NodW5rZWRTaW5rID0gY29udmVydGVyLnN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oc2luayk7CgogIHZvaWQgYWRkKFMgbykgewogICAgX2NodW5rZWRTaW5rLmFkZChvKTsKICB9CgogIHZvaWQgYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgX2V2ZW50U2luay5hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgX2NodW5rZWRTaW5rLmNsb3NlKCk7CiAgfQp9ClQATk48ARYBUC8ETkkyBE1PPRsuRAEmBlEVARcGTDkQAgFMKAQ+QComAScBFh0EAREdBAIBQhgEOgRIOEApIQFCLB4BShs/ARIZBAE5LAQBERoEAgEkZGFydDpjb252ZXJ0L2NodW5rZWRfY29udmVyc2lvbi5kYXJ0Lm9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb252ZXJ0L2NvZGVjLmRhcnSMii8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29udmVydDsKCi8vLyBBIFtDb2RlY10gZW5jb2RlcyBhbmQgKGlmIHN1cHBvcnRlZCkgZGVjb2RlcyBkYXRhLgovLy8KLy8vIENvZGVjcyBjYW4gYmUgZnVzZWQuIEZvciBleGFtcGxlIGZ1c2luZyBbanNvbl0gYW5kIFt1dGY4XSBwcm9kdWNlcwovLy8gYW4gZW5jb2RlciB0aGF0IGNhbiBjb252ZXJ0IEpzb24gb2JqZWN0cyBkaXJlY3RseSB0byBieXRlcywgb3IgY2FuIGRlY29kZQovLy8gYnl0ZXMgZGlyZWN0bHkgdG8ganNvbiBvYmplY3RzLgovLy8KLy8vIEZ1c2VkIGNvZGVjcyBnZW5lcmFsbHkgYXR0ZW1wdCB0byBvcHRpbWl6ZSB0aGUgb3BlcmF0aW9ucyBhbmQgY2FuIGJlIGZhc3RlcgovLy8gdGhhbiBleGVjdXRpbmcgZWFjaCBzdGVwIG9mIGFuIGVuY29kaW5nIHNlcGFyYXRlbHkuCmFic3RyYWN0IGNsYXNzIENvZGVjPFMsIFQ+IHsKICBjb25zdCBDb2RlYygpOwoKICAvLy8gRW5jb2RlcyBbaW5wdXRdLgogIC8vLwogIC8vLyBUaGUgaW5wdXQgaXMgZW5jb2RlZCBhcyBpZiBieSBgZW5jb2Rlci5jb252ZXJ0YC4KICBUIGVuY29kZShTIGlucHV0KSA9PiBlbmNvZGVyLmNvbnZlcnQoaW5wdXQpOwoKICAvLy8gRGVjb2RlcyBbZW5jb2RlZF0gZGF0YS4KICAvLy8KICAvLy8gVGhlIGlucHV0IGlzIGRlY29kZWQgYXMgaWYgYnkgYGRlY29kZXIuY29udmVydGAuCiAgUyBkZWNvZGUoVCBlbmNvZGVkKSA9PiBkZWNvZGVyLmNvbnZlcnQoZW5jb2RlZCk7CgogIC8vLyBSZXR1cm5zIHRoZSBlbmNvZGVyIGZyb20gW1NdIHRvIFtUXS4KICAvLy8KICAvLy8gSXQgbWF5IGJlIHN0YXRlZnVsIGFuZCBzaG91bGQgbm90IGJlIHJldXNlZC4KICBDb252ZXJ0ZXI8UywgVD4gZ2V0IGVuY29kZXI7CgogIC8vLyBSZXR1cm5zIHRoZSBkZWNvZGVyIG9mIGB0aGlzYCwgY29udmVydGluZyBmcm9tIFtUXSB0byBbU10uCiAgLy8vCiAgLy8vIEl0IG1heSBiZSBzdGF0ZWZ1bCBhbmQgc2hvdWxkIG5vdCBiZSByZXVzZWQuCiAgQ29udmVydGVyPFQsIFM+IGdldCBkZWNvZGVyOwoKICAvLy8gRnVzZXMgYHRoaXNgIHdpdGggYG90aGVyYC4KICAvLy8KICAvLy8gV2hlbiBlbmNvZGluZywgdGhlIHJlc3VsdGluZyBjb2RlYyBlbmNvZGVzIHdpdGggYHRoaXNgIGJlZm9yZQogIC8vLyBlbmNvZGluZyB3aXRoIFtvdGhlcl0uCiAgLy8vCiAgLy8vIFdoZW4gZGVjb2RpbmcsIHRoZSByZXN1bHRpbmcgY29kZWMgZGVjb2RlcyB3aXRoIFtvdGhlcl0gYmVmb3JlIGRlY29kaW5nCiAgLy8vIHdpdGggYHRoaXNgLgogIC8vLwogIC8vLyBJbiBzb21lIGNhc2VzIG9uZSBuZWVkcyB0byB1c2UgdGhlIFtpbnZlcnRlZF0gY29kZWNzIHRvIGJlIGFibGUgdG8gZnVzZQogIC8vLyB0aGVtIGNvcnJlY3RseS4gVGhhdCBpcywgdGhlIG91dHB1dCB0eXBlIG9mIGB0aGlzYCAoW1RdKSBtdXN0IG1hdGNoIHRoZQogIC8vLyBpbnB1dCB0eXBlIG9mIHRoZSBzZWNvbmQgY29kZWMgW290aGVyXS4KICAvLy8KICAvLy8gRXhhbXBsZXM6CiAgLy8vIGBgYGRhcnQKICAvLy8gZmluYWwganNvblRvQnl0ZXMgPSBqc29uLmZ1c2UodXRmOCk7CiAgLy8vIExpc3Q8aW50PiBieXRlcyA9IGpzb25Ub0J5dGVzLmVuY29kZShbImpzb24tb2JqZWN0Il0pOwogIC8vLyB2YXIgZGVjb2RlZCA9IGpzb25Ub0J5dGVzLmRlY29kZShieXRlcyk7CiAgLy8vIGFzc2VydChkZWNvZGVkIGlzIExpc3QgJiYgZGVjb2RlZFswXSA9PSAianNvbi1vYmplY3QiKTsKICAvLy8KICAvLy8gdmFyIGludmVydGVkID0ganNvbi5pbnZlcnRlZDsKICAvLy8gdmFyIGpzb25JZGVudGl0eSA9IGpzb24uZnVzZShpbnZlcnRlZCk7CiAgLy8vIHZhciBqc29uT2JqZWN0ID0ganNvbklkZW50aXR5LmVuY29kZShbIjEiLCAyXSk7CiAgLy8vIGFzc2VydChqc29uT2JqZWN0IGlzIExpc3QgJiYganNvbk9iamVjdFswXSA9PSAiMSIgJiYganNvbk9iamVjdFsxXSA9PSAyKTsKICAvLy8gYGBgCiAgLy8gVE9ETyhmbG9pdHNjaCk6IHVzZSBiZXR0ZXIgZXhhbXBsZSB3aXRoIGxpbmUtc3BsaXR0ZXIgb25jZSB0aGF0IG9uZSBpcwogIC8vIGluIHRoaXMgbGlicmFyeS4KICBDb2RlYzxTLCBSPiBmdXNlPFI+KENvZGVjPFQsIFI+IG90aGVyKSB7CiAgICByZXR1cm4gX0Z1c2VkQ29kZWM8UywgVCwgUj4odGhpcywgb3RoZXIpOwogIH0KCiAgLy8vIEludmVydHMgYHRoaXNgLgogIC8vLwogIC8vLyBUaGUgW2VuY29kZXJdIGFuZCBbZGVjb2Rlcl0gb2YgdGhlIHJlc3VsdGluZyBjb2RlYyBhcmUgc3dhcHBlZC4KICBDb2RlYzxULCBTPiBnZXQgaW52ZXJ0ZWQgPT4gX0ludmVydGVkQ29kZWM8VCwgUz4odGhpcyk7Cn0KCi8vLyBGdXNlcyB0aGUgZ2l2ZW4gY29kZWNzLgovLy8KLy8vIEluIHRoZSBub24tY2h1bmtlZCBjb252ZXJzaW9uIHNpbXBseSBpbnZva2VzIHRoZSBub24tY2h1bmtlZCBjb252ZXJzaW9ucyBpbgovLy8gc2VxdWVuY2UuCmNsYXNzIF9GdXNlZENvZGVjPFMsIE0sIFQ+IGV4dGVuZHMgQ29kZWM8UywgVD4gewogIGZpbmFsIENvZGVjPFMsIE0+IF9maXJzdDsKICBmaW5hbCBDb2RlYzxNLCBUPiBfc2Vjb25kOwoKICBDb252ZXJ0ZXI8UywgVD4gZ2V0IGVuY29kZXIgPT4gX2ZpcnN0LmVuY29kZXIuZnVzZTxUPihfc2Vjb25kLmVuY29kZXIpOwogIENvbnZlcnRlcjxULCBTPiBnZXQgZGVjb2RlciA9PiBfc2Vjb25kLmRlY29kZXIuZnVzZTxTPihfZmlyc3QuZGVjb2Rlcik7CgogIF9GdXNlZENvZGVjKHRoaXMuX2ZpcnN0LCB0aGlzLl9zZWNvbmQpOwp9CgpjbGFzcyBfSW52ZXJ0ZWRDb2RlYzxULCBTPiBleHRlbmRzIENvZGVjPFQsIFM+IHsKICBmaW5hbCBDb2RlYzxTLCBUPiBfY29kZWM7CgogIF9JbnZlcnRlZENvZGVjKENvZGVjPFMsIFQ+IGNvZGVjKSA6IF9jb2RlYyA9IGNvZGVjOwoKICBDb252ZXJ0ZXI8VCwgUz4gZ2V0IGVuY29kZXIgPT4gX2NvZGVjLmRlY29kZXI7CiAgQ29udmVydGVyPFMsIFQ+IGdldCBkZWNvZGVyID0+IF9jb2RlYy5lbmNvZGVyOwoKICBDb2RlYzxTLCBUPiBnZXQgaW52ZXJ0ZWQgPT4gX2NvZGVjOwp9CmMATk48ARYBNwRHTiQEUDgdEQEXBjcvAR4GNzMBKwYzHwFBBjMfASEGRB0GThMGTk4uBhAOKz0vPgYkLjZQCkwWKy4EARYGRjoCARwEUA4xHB0BSkoBKgIBMRwBNgExMQEmAgEXZGFydDpjb252ZXJ0L2NvZGVjLmRhcnQyb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvbnZlcnQvY29udmVydGVyLmRhcnSKlS8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29udmVydDsKCi8vLyBBIFtDb252ZXJ0ZXJdIGNvbnZlcnRzIGRhdGEgZnJvbSBvbmUgcmVwcmVzZW50YXRpb24gaW50byBhbm90aGVyLgovLy8KLy8vIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgaW1wbGVtZW50YXRpb25zIG9mIGBDb252ZXJ0ZXJgIGV4dGVuZCB0aGlzIGNsYXNzLAovLy8gdG8gaW5oZXJpdCBhbnkgZnVydGhlciBtZXRob2RzIHRoYXQgbWF5IGJlIGFkZGVkIHRvIHRoZSBjbGFzcy4KYWJzdHJhY3QgY2xhc3MgQ29udmVydGVyPFMsIFQ+IGV4dGVuZHMgU3RyZWFtVHJhbnNmb3JtZXJCYXNlPFMsIFQ+IHsKICBjb25zdCBDb252ZXJ0ZXIoKTsKCiAgLy8vIEFkYXB0cyBbc291cmNlXSB0byBiZSBhIGBDb252ZXJ0ZXI8VFMsIFRUPmAuCiAgLy8vCiAgLy8vIFRoaXMgYWxsb3dzIFtzb3VyY2VdIHRvIGJlIHVzZWQgYXQgdGhlIG5ldyB0eXBlLCBidXQgYXQgcnVuLXRpbWUgaXQKICAvLy8gbXVzdCBzYXRpc2Z5IHRoZSByZXF1aXJlbWVudHMgb2YgYm90aCB0aGUgbmV3IHR5cGUgYW5kIGl0cyBvcmlnaW5hbCB0eXBlLgogIC8vLwogIC8vLyBDb252ZXJzaW9uIGlucHV0IG11c3QgYmUgYm90aCBbU1NdIGFuZCBbVFNdIGFuZCB0aGUgb3V0cHV0IGNyZWF0ZWQgYnkKICAvLy8gW3NvdXJjZV0gZm9yIHRob3NlIGlucHV0IG11c3QgYmUgYm90aCBbU1RdIGFuZCBbVFRdLgogIHN0YXRpYyBDb252ZXJ0ZXI8VFMsIFRUPiBjYXN0RnJvbTxTUywgU1QsIFRTLCBUVD4oQ29udmVydGVyPFNTLCBTVD4gc291cmNlKSA9PgogICAgICBDYXN0Q29udmVydGVyPFNTLCBTVCwgVFMsIFRUPihzb3VyY2UpOwoKICAvLy8gQ29udmVydHMgW2lucHV0XSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBjb252ZXJzaW9uLgogIFQgY29udmVydChTIGlucHV0KTsKCiAgLy8vIEZ1c2VzIGB0aGlzYCB3aXRoIFtvdGhlcl0uCiAgLy8vCiAgLy8vIEVuY29kaW5nIHdpdGggdGhlIHJlc3VsdGluZyBjb252ZXJ0ZXIgaXMgZXF1aXZhbGVudCB0byBjb252ZXJ0aW5nIHdpdGgKICAvLy8gYHRoaXNgIGJlZm9yZSBjb252ZXJ0aW5nIHdpdGggYG90aGVyYC4KICBDb252ZXJ0ZXI8UywgVFQ+IGZ1c2U8VFQ+KENvbnZlcnRlcjxULCBUVD4gb3RoZXIpIHsKICAgIHJldHVybiBfRnVzZWRDb252ZXJ0ZXI8UywgVCwgVFQ+KHRoaXMsIG90aGVyKTsKICB9CgogIC8vLyBTdGFydHMgYSBjaHVua2VkIGNvbnZlcnNpb24uCiAgLy8vCiAgLy8vIFRoZSByZXR1cm5lZCBzaW5rIHNlcnZlcyBhcyBpbnB1dCBmb3IgdGhlIGxvbmctcnVubmluZyBjb252ZXJzaW9uLiBUaGUKICAvLy8gZ2l2ZW4gW3NpbmtdIHNlcnZlcyBhcyBvdXRwdXQuCiAgU2luazxTPiBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8VD4gc2luaykgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiVGhpcyBjb252ZXJ0ZXIgZG9lcyBub3Qgc3VwcG9ydCBjaHVua2VkIGNvbnZlcnNpb25zOiAkdGhpcyIpOwogIH0KCiAgU3RyZWFtPFQ+IGJpbmQoU3RyZWFtPFM+IHN0cmVhbSkgewogICAgcmV0dXJuIFN0cmVhbTxUPi5ldmVudFRyYW5zZm9ybWVkKAogICAgICAgIHN0cmVhbSwgKEV2ZW50U2luayBzaW5rKSA9PiBfQ29udmVydGVyU3RyZWFtRXZlbnRTaW5rKHRoaXMsIHNpbmspKTsKICB9CgogIC8vLyBQcm92aWRlcyBhIGBDb252ZXJ0ZXI8UlMsIFJUPmAgdmlldyBvZiB0aGlzIHN0cmVhbSB0cmFuc2Zvcm1lci4KICAvLy8KICAvLy8gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lciB3aWxsIGNoZWNrIGF0IHJ1bi10aW1lIHRoYXQgYWxsIGNvbnZlcnNpb24KICAvLy8gaW5wdXRzIGFyZSBhY3R1YWxseSBpbnN0YW5jZXMgb2YgW1NdLAogIC8vLyBhbmQgaXQgd2lsbCBjaGVjayB0aGF0IGFsbCBjb252ZXJzaW9uIG91dHB1dCBwcm9kdWNlZCBieSB0aGlzIGNvbnZlcnRlcgogIC8vLyBhcmUgYWN0dWFsbHkgaW5zdGFuY2VzIG9mIFtSVF0uCiAgQ29udmVydGVyPFJTLCBSVD4gY2FzdDxSUywgUlQ+KCkgPT4gQ29udmVydGVyLmNhc3RGcm9tPFMsIFQsIFJTLCBSVD4odGhpcyk7Cn0KCi8vLyBGdXNlcyB0d28gY29udmVydGVycy4KLy8vCi8vLyBGb3IgYSBub24tY2h1bmtlZCBjb252ZXJzaW9uIGNvbnZlcnRzIHRoZSBpbnB1dCBpbiBzZXF1ZW5jZS4KY2xhc3MgX0Z1c2VkQ29udmVydGVyPFMsIE0sIFQ+IGV4dGVuZHMgQ29udmVydGVyPFMsIFQ+IHsKICBmaW5hbCBDb252ZXJ0ZXI8UywgTT4gX2ZpcnN0OwogIGZpbmFsIENvbnZlcnRlcjxNLCBUPiBfc2Vjb25kOwoKICBfRnVzZWRDb252ZXJ0ZXIodGhpcy5fZmlyc3QsIHRoaXMuX3NlY29uZCk7CgogIFQgY29udmVydChTIGlucHV0KSA9PiBfc2Vjb25kLmNvbnZlcnQoX2ZpcnN0LmNvbnZlcnQoaW5wdXQpKTsKCiAgU2luazxTPiBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8VD4gc2luaykgewogICAgcmV0dXJuIF9maXJzdC5zdGFydENodW5rZWRDb252ZXJzaW9uKF9zZWNvbmQuc3RhcnRDaHVua2VkQ29udmVyc2lvbihzaW5rKSk7CiAgfQp9CkoATk48ARYBRgRNQ0UVATMGSlAGTDtRLQFBFgEhBk0tNjMEASMGTSUxHEcEASUnTAQBRgZLLE4mTgIBGgRBOSAhAS4BQAExUAQCARtkYXJ0OmNvbnZlcnQvY29udmVydGVyLmRhcnQxb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvbnZlcnQvZW5jb2RpbmcuZGFydIn5Ly8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb252ZXJ0OwoKLy8vIE9wZW4tZW5kZWQgRW5jb2RpbmcgZW51bS4KYWJzdHJhY3QgY2xhc3MgRW5jb2RpbmcgZXh0ZW5kcyBDb2RlYzxTdHJpbmcsIExpc3Q8aW50Pj4gewogIGNvbnN0IEVuY29kaW5nKCk7CgogIC8vLyBSZXR1cm5zIHRoZSBlbmNvZGVyIGZyb20gYFN0cmluZ2AgdG8gYExpc3Q8aW50PmAuCiAgLy8vCiAgLy8vIEl0IG1heSBiZSBzdGF0ZWZ1bCBhbmQgc2hvdWxkIG5vdCBiZSByZXVzZWQuCiAgQ29udmVydGVyPFN0cmluZywgTGlzdDxpbnQ+PiBnZXQgZW5jb2RlcjsKCiAgLy8vIFJldHVybnMgdGhlIGRlY29kZXIgb2YgYHRoaXNgLCBjb252ZXJ0aW5nIGZyb20gYExpc3Q8aW50PmAgdG8gYFN0cmluZ2AuCiAgLy8vCiAgLy8vIEl0IG1heSBiZSBzdGF0ZWZ1bCBhbmQgc2hvdWxkIG5vdCBiZSByZXVzZWQuCiAgQ29udmVydGVyPExpc3Q8aW50PiwgU3RyaW5nPiBnZXQgZGVjb2RlcjsKCiAgRnV0dXJlPFN0cmluZz4gZGVjb2RlU3RyZWFtKFN0cmVhbTxMaXN0PGludD4+IGJ5dGVTdHJlYW0pIHsKICAgIHJldHVybiBkZWNvZGVyCiAgICAgICAgLmJpbmQoYnl0ZVN0cmVhbSkKICAgICAgICAuZm9sZChTdHJpbmdCdWZmZXIoKSwKICAgICAgICAgICAgKFN0cmluZ0J1ZmZlciBidWZmZXIsIFN0cmluZyBzdHJpbmcpID0+IGJ1ZmZlci4ud3JpdGUoc3RyaW5nKSkKICAgICAgICAudGhlbigoU3RyaW5nQnVmZmVyIGJ1ZmZlcikgPT4gYnVmZmVyLnRvU3RyaW5nKCkpOwogIH0KCiAgLy8vIE5hbWUgb2YgdGhlIGVuY29kaW5nLgogIC8vLwogIC8vLyBJZiB0aGUgZW5jb2RpbmcgaXMgc3RhbmRhcmRpemVkLCB0aGlzIGlzIHRoZSBsb3dlci1jYXNlIHZlcnNpb24gb2Ygb25lIG9mCiAgLy8vIHRoZSBJQU5BIG9mZmljaWFsIG5hbWVzIGZvciB0aGUgY2hhcmFjdGVyIHNldCAoc2VlCiAgLy8vIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvY2hhcmFjdGVyLXNldHMvY2hhcmFjdGVyLXNldHMueG1sKQogIFN0cmluZyBnZXQgbmFtZTsKCiAgLy8gQWxsIGFsaWFzZXMgKGluIGxvd2VyY2FzZSkgb2Ygc3VwcG9ydGVkIGVuY29kaW5nIGZyb20KICAvLyBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2NoYXJhY3Rlci1zZXRzL2NoYXJhY3Rlci1zZXRzLnhtbC4KICBzdGF0aWMgZmluYWwgTWFwPFN0cmluZywgRW5jb2Rpbmc+IF9uYW1lVG9FbmNvZGluZyA9IDxTdHJpbmcsIEVuY29kaW5nPnsKICAgIC8vIElTT184ODU5LTE6MTk4Ny4KICAgICJpc29fODg1OS0xOjE5ODciOiBsYXRpbjEsCiAgICAiaXNvLWlyLTEwMCI6IGxhdGluMSwKICAgICJpc29fODg1OS0xIjogbGF0aW4xLAogICAgImlzby04ODU5LTEiOiBsYXRpbjEsCiAgICAibGF0aW4xIjogbGF0aW4xLAogICAgImwxIjogbGF0aW4xLAogICAgImlibTgxOSI6IGxhdGluMSwKICAgICJjcDgxOSI6IGxhdGluMSwKICAgICJjc2lzb2xhdGluMSI6IGxhdGluMSwKCiAgICAvLyBVUy1BU0NJSS4KICAgICJpc28taXItNiI6IGFzY2lpLAogICAgImFuc2lfeDMuNC0xOTY4IjogYXNjaWksCiAgICAiYW5zaV94My40LTE5ODYiOiBhc2NpaSwKICAgICJpc29fNjQ2LmlydjoxOTkxIjogYXNjaWksCiAgICAiaXNvNjQ2LXVzIjogYXNjaWksCiAgICAidXMtYXNjaWkiOiBhc2NpaSwKICAgICJ1cyI6IGFzY2lpLAogICAgImlibTM2NyI6IGFzY2lpLAogICAgImNwMzY3IjogYXNjaWksCiAgICAiY3Nhc2NpaSI6IGFzY2lpLAogICAgImFzY2lpIjogYXNjaWksIC8vIFRoaXMgaXMgbm90IGluIHRoZSBJQU5BIG9mZmljaWFsIG5hbWVzLgoKICAgIC8vIFVURi04LgogICAgImNzdXRmOCI6IHV0ZjgsCiAgICAidXRmLTgiOiB1dGY4CiAgfTsKCiAgLy8vIEdldHMgYW4gW0VuY29kaW5nXSBvYmplY3QgZnJvbSB0aGUgbmFtZSBvZiB0aGUgY2hhcmFjdGVyIHNldAogIC8vLyBuYW1lLiBUaGUgbmFtZXMgdXNlZCBhcmUgdGhlIElBTkEgb2ZmaWNpYWwgbmFtZXMgZm9yIHRoZQogIC8vLyBjaGFyYWN0ZXIgc2V0IChzZWUKICAvLy8gaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9jaGFyYWN0ZXItc2V0cy9jaGFyYWN0ZXItc2V0cy54bWwpLgogIC8vLwogIC8vLyBUaGUgW25hbWVdIHBhc3NlZCBpcyBjYXNlIGluc2Vuc2l0aXZlLgogIC8vLwogIC8vLyBJZiBjaGFyYWN0ZXIgc2V0IGlzIG5vdCBzdXBwb3J0ZWQgWzpudWxsOl0gaXMgcmV0dXJuZWQuCiAgc3RhdGljIEVuY29kaW5nIGdldEJ5TmFtZShTdHJpbmcgbmFtZSkgewogICAgaWYgKG5hbWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOwogICAgcmV0dXJuIF9uYW1lVG9FbmNvZGluZ1tuYW1lXTsKICB9Cn0KUwBOTjwBFgEeOxQBOAYzLAFOBjMsAT4TGh5LOwQBHAZQOUkTATtISxgfGhoaFhIWFRsBERcdHR8YFxEVFBY/AQ4UEgUBQz8ZSgYtBj4rIx8iBAIBGmRhcnQ6Y29udmVydC9lbmNvZGluZy5kYXJ0NG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb252ZXJ0L2h0bWxfZXNjYXBlLmRhcnSfxy8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29udmVydDsKCi8vLyBBIGBTdHJpbmdgIGNvbnZlcnRlciB0aGF0IGNvbnZlcnRzIGNoYXJhY3RlcnMgdG8gSFRNTCBlbnRpdGllcy4KLy8vCi8vLyBUaGlzIGlzIGludGVuZGVkIHRvIHNhbml0aXplIHRleHQgYmVmb3JlIGluc2VydGluZyB0aGUgdGV4dCBpbnRvIGFuIEhUTUwKLy8vIGRvY3VtZW50LiBDaGFyYWN0ZXJzIHRoYXQgYXJlIG1lYW5pbmdmdWwgaW4gSFRNTCBhcmUgY29udmVydGVkIHRvCi8vLyBIVE1MIGVudGl0aWVzIChsaWtlIGAmYW1wO2AgZm9yIGAmYCkuCi8vLwovLy8gVGhlIGdlbmVyYWwgY29udmVydGVyIGVzY2FwZXMgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbWVhbmluZ2Z1bCBpbiBIVE1MCi8vLyBhdHRyaWJ1dGVzIG9yIG5vcm1hbCBlbGVtZW50IGNvbnRleHQuIEVsZW1lbnRzIHdpdGggc3BlY2lhbCBjb250ZW50IHR5cGVzCi8vLyAobGlrZSBDU1Mgb3IgSmF2YVNjcmlwdCkgbWF5IG5lZWQgYSBtb3JlIHNwZWNpYWxpemVkIGVzY2FwaW5nIHRoYXQKLy8vIHVuZGVyc3RhbmRzIHRoYXQgY29udGVudCB0eXBlLgovLy8KLy8vIElmIHRoZSBjb250ZXh0IHdoZXJlIHRoZSB0ZXh0IHdpbGwgYmUgaW5zZXJ0ZWQgaXMga25vd24gaW4gbW9yZSBkZXRhaWwsCi8vLyBpdCdzIHBvc3NpYmxlIHRvIG9taXQgZXNjYXBpbmcgc29tZSBjaGFyYWN0ZXJzIChsaWtlIHF1b3RlcyB3aGVuIG5vdAovLy8gaW5zaWRlIGFuIGF0dHJpYnV0ZSB2YWx1ZSkuCi8vLwovLy8gVGhlIGVzY2FwZWQgdGV4dCBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBxdW90ZWQgSFRNTCBhdHRyaWJ1dGVzIHZhbHVlcwovLy8gb3IgYXMgdGV4dCBjb250ZW50IG9mIGEgbm9ybWFsIGVsZW1lbnQuIFVzaW5nIHRoZSBlc2NhcGVkIHRleHQgaW5zaWRlIGEKLy8vIHRhZywgYnV0IG5vdCBpbnNpZGUgYSBxdW90ZWQgYXR0cmlidXRlIHZhbHVlLCBpcyBzdGlsbCBkYW5nZXJvdXMuCmNvbnN0IEh0bWxFc2NhcGUgaHRtbEVzY2FwZSA9IEh0bWxFc2NhcGUoKTsKCi8vLyBIVE1MIGVzY2FwZSBtb2Rlcy4KLy8vCi8vLyBBbGxvd3Mgc3BlY2lmeWluZyBhIG1vZGUgZm9yIEhUTUwgZXNjYXBpbmcgdGhhdCBkZXBlbmQgb24gdGhlIGNvbnRleHQKLy8vIHdoZXJlIHRoZSBlc2NhcGVkIHJlc3VsdCBpcyBnb2luZyB0byBiZSB1c2VkLgovLy8gVGhlIHJlbGV2YW50IGNvbnRleHRzIGFyZToKLy8vCi8vLyAqIGFzIHRleHQgY29udGVudCBvZiBhbiBIVE1MIGVsZW1lbnQuCi8vLyAqIGFzIHZhbHVlIG9mIGEgKHNpbmdsZS0gb3IgZG91YmxlLSkgcXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZS4KLy8vCi8vLyBBbGwgbW9kZXMgcmVxdWlyZSBlc2NhcGluZyBvZiBgJmAgKGFtcGVyc2FuZCkgY2hhcmFjdGVycywgYW5kIG1heQovLy8gZW5hYmxlIGVzY2FwaW5nIG9mIG1vcmUgY2hhcmFjdGVycy4KLy8vCi8vLyBDdXN0b20gZXNjYXBlIG1vZGVzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHRoZSBbSHRtbEVzY2FwZU1vZGUuSHRtbEVzY2FwZU1vZGVdCi8vLyBjb25zdHJ1Y3Rvci4KY2xhc3MgSHRtbEVzY2FwZU1vZGUgewogIGZpbmFsIFN0cmluZyBfbmFtZTsKCiAgLy8vIFdoZXRoZXIgdG8gZXNjYXBlICc8JyBhbmQgJz4nLgogIGZpbmFsIGJvb2wgZXNjYXBlTHRHdDsKCiAgLy8vIFdoZXRoZXIgdG8gZXNjYXBlICciJyAocXVvdGUpLgogIGZpbmFsIGJvb2wgZXNjYXBlUXVvdDsKCiAgLy8vIFdoZXRoZXIgdG8gZXNjYXBlICInIiAoYXBvc3Ryb3BoZSkuCiAgZmluYWwgYm9vbCBlc2NhcGVBcG9zOwoKICAvLy8gV2hldGhlciB0byBlc2NhcGUgIi8iIChmb3J3YXJkIHNsYXNoLCBzb2xpZHVzKS4KICAvLy8KICAvLy8gRXNjYXBpbmcgYSBzbGFzaCBpcyByZWNvbW1lbmRlZCB0byBhdm9pZCBjcm9zcy1zaXRlIHNjcmlwdGluZyBhdHRhY2tzIGJ5CiAgLy8vIFt0aGUgT3BlbiBXZWIgQXBwbGljYXRpb24gU2VjdXJpdHkgUHJvamVjdF0oaHR0cHM6Ly93d3cub3dhc3Aub3JnL2luZGV4LnBocC9YU1NfKENyb3NzX1NpdGVfU2NyaXB0aW5nKV9QcmV2ZW50aW9uX0NoZWF0X1NoZWV0I1JVTEVfLjIzMV8tX0hUTUxfRXNjYXBlX0JlZm9yZV9JbnNlcnRpbmdfVW50cnVzdGVkX0RhdGFfaW50b19IVE1MX0VsZW1lbnRfQ29udGVudCkKICBmaW5hbCBib29sIGVzY2FwZVNsYXNoOwoKICAvLy8gRGVmYXVsdCBlc2NhcGluZyBtb2RlIHdoaWNoIGVzY2FwZSBhbGwgY2hhcmFjdGVycy4KICAvLy8KICAvLy8gVGhlIHJlc3VsdCBvZiBzdWNoIGFuIGVzY2FwaW5nIGlzIHVzYWJsZSBib3RoIGluIGVsZW1lbnQgY29udGVudCBhbmQKICAvLy8gaW4gYW55IGF0dHJpYnV0ZSB2YWx1ZS4KICAvLy8KICAvLy8gVGhlIGVzY2FwaW5nIG9ubHkgd29ya3MgZm9yIGVsZW1lbnRzIHdpdGggbm9ybWFsIEhUTUwgY29udGVudCwKICAvLy8gYW5kIG5vdCBmb3IsIGZvciBleGFtcGxlLCBzY3JpcHQgb3Igc3R5bGUgZWxlbWVudCBjb250ZW50LAogIC8vLyB3aGljaCByZXF1aXJlIGVzY2FwZXMgbWF0Y2hpbmcgdGhlaXIgcGFydGljdWxhciBjb250ZW50IHN5bnRheC4KICBzdGF0aWMgY29uc3QgSHRtbEVzY2FwZU1vZGUgdW5rbm93biA9CiAgICAgIEh0bWxFc2NhcGVNb2RlLl8oJ3Vua25vd24nLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKCiAgLy8vIEVzY2FwaW5nIG1vZGUgZm9yIHRleHQgZ29pbmcgaW50byBkb3VibGUtcXVvdGVkIEhUTUwgYXR0cmlidXRlIHZhbHVlcy4KICAvLy8KICAvLy8gVGhlIHJlc3VsdCBzaG91bGQgbm90IGJlIHVzZWQgYXMgdGhlIGNvbnRlbnQgb2YgYW4gdW5xdW90ZWQKICAvLy8gb3Igc2luZ2xlLXF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuCiAgLy8vCiAgLy8vIEVzY2FwZXMgZG91YmxlIHF1b3RlcyAoYCJgKSBidXQgbm90IHNpbmdsZSBxdW90ZXMgKGAnYCksCiAgLy8vIGFuZCBlc2NhcGVzIGA8YCBhbmQgYD5gIGNoYXJhY3RlcnMgYmVjYXVzZSB0aGV5IGFyZSBub3QgYWxsb3dlZAogIC8vLyBpbiBzdHJpY3QgWEhUTUwgYXR0cmlidXRlcwogIHN0YXRpYyBjb25zdCBIdG1sRXNjYXBlTW9kZSBhdHRyaWJ1dGUgPQogICAgICBIdG1sRXNjYXBlTW9kZS5fKCdhdHRyaWJ1dGUnLCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UpOwoKICAvLy8gRXNjYXBpbmcgbW9kZSBmb3IgdGV4dCBnb2luZyBpbnRvIHNpbmdsZS1xdW90ZWQgSFRNTCBhdHRyaWJ1dGUgdmFsdWVzLgogIC8vLwogIC8vLyBUaGUgcmVzdWx0IHNob3VsZCBub3QgYmUgdXNlZCBhcyB0aGUgY29udGVudCBvZiBhbiB1bnF1b3RlZAogIC8vLyBvciBkb3VibGUtcXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZS4KICAvLy8KICAvLy8gRXNjYXBlcyBzaW5nbGUgcXVvdGVzIChgJ2ApIGJ1dCBub3QgZG91YmxlIHF1b3RlcyAoYCJgKSwKICAvLy8gYW5kIGVzY2FwZXMgYDxgIGFuZCBgPmAgY2hhcmFjdGVycyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBhbGxvd2VkCiAgLy8vIGluIHN0cmljdCBYSFRNTCBhdHRyaWJ1dGVzCiAgc3RhdGljIGNvbnN0IEh0bWxFc2NhcGVNb2RlIHNxQXR0cmlidXRlID0KICAgICAgSHRtbEVzY2FwZU1vZGUuXygnYXR0cmlidXRlJywgdHJ1ZSwgZmFsc2UsIHRydWUsIGZhbHNlKTsKCiAgLy8vIEVzY2FwaW5nIG1vZGUgZm9yIHRleHQgZ29pbmcgaW50byBIVE1MIGVsZW1lbnQgY29udGVudC4KICAvLy8KICAvLy8gVGhlIGVzY2FwaW5nIG9ubHkgd29ya3MgZm9yIGVsZW1lbnRzIHdpdGggbm9ybWFsIEhUTUwgY29udGVudCwKICAvLy8gYW5kIG5vdCBmb3IsIGZvciBleGFtcGxlLCBzY3JpcHQgb3Igc3R5bGUgZWxlbWVudCBjb250ZW50LAogIC8vLyB3aGljaCByZXF1aXJlIGVzY2FwZXMgbWF0Y2hpbmcgdGhlaXIgcGFydGljdWxhciBjb250ZW50IHN5bnRheC4KICAvLy8KICAvLy8gRXNjYXBlcyBgPGAgYW5kIGA+YCBjaGFyYWN0ZXJzLgogIHN0YXRpYyBjb25zdCBIdG1sRXNjYXBlTW9kZSBlbGVtZW50ID0KICAgICAgSHRtbEVzY2FwZU1vZGUuXygnZWxlbWVudCcsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwoKICBjb25zdCBIdG1sRXNjYXBlTW9kZS5fKHRoaXMuX25hbWUsIHRoaXMuZXNjYXBlTHRHdCwgdGhpcy5lc2NhcGVRdW90LAogICAgICB0aGlzLmVzY2FwZUFwb3MsIHRoaXMuZXNjYXBlU2xhc2gpOwoKICAvLy8gQ3JlYXRlIGEgY3VzdG9tIGVzY2FwaW5nIG1vZGUuCiAgLy8vCiAgLy8vIEFsbCBtb2RlcyBlc2NhcGUgYCZgLgogIC8vLyBUaGUgbW9kZSBjYW4gZnVydGhlciBiZSBzZXQgdG8gZXNjYXBlIGA8YCBhbmQgYD5gIChbZXNjYXBlTHRHdF0pLAogIC8vLyBgImAgKFtlc2NhcGVRdW90XSksIGAnYCAoW2VzY2FwZUFwb3NdKSwgYW5kL29yIGAvYCAoW2VzY2FwZVNsYXNoXSkuCiAgY29uc3QgSHRtbEVzY2FwZU1vZGUoCiAgICAgIHtTdHJpbmcgbmFtZSA9ICJjdXN0b20iLAogICAgICB0aGlzLmVzY2FwZUx0R3QgPSBmYWxzZSwKICAgICAgdGhpcy5lc2NhcGVRdW90ID0gZmFsc2UsCiAgICAgIHRoaXMuZXNjYXBlQXBvcyA9IGZhbHNlLAogICAgICB0aGlzLmVzY2FwZVNsYXNoID0gZmFsc2V9KQogICAgICA6IF9uYW1lID0gbmFtZTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gX25hbWU7Cn0KCi8vLyBDb252ZXJ0ZXIgd2hpY2ggZXNjYXBlcyBjaGFyYWN0ZXJzIHdpdGggc3BlY2lhbCBtZWFuaW5nIGluIEhUTUwuCi8vLwovLy8gVGhlIGNvbnZlcnRlciBmaW5kcyBjaGFyYWN0ZXJzIHRoYXQgYXJlIHNpZ25pZmljYW50IGluIEhUTUwgc291cmNlIGFuZAovLy8gcmVwbGFjZXMgdGhlbSB3aXRoIGNvcnJlc3BvbmRpbmcgSFRNTCBlbnRpdGllcy4KLy8vCi8vLyBUaGUgY2hhcmFjdGVycyB0aGF0IG5lZWQgZXNjYXBpbmcgaW4gSFRNTCBhcmU6Ci8vLwovLy8gKiBgJmAgKGFtcGVyc2FuZCkgYWx3YXlzIG5lZWQgdG8gYmUgZXNjYXBlZC4KLy8vICogYDxgIChsZXNzIHRoYW4pIGFuZCAnPicgKGdyZWF0ZXIgdGhhbikgd2hlbiBpbnNpZGUgYW4gZWxlbWVudC4KLy8vICogYCJgIChxdW90ZSkgd2hlbiBpbnNpZGUgYSBkb3VibGUtcXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZS4KLy8vICogYCdgIChhcG9zdHJvcGhlKSB3aGVuIGluc2lkZSBhIHNpbmdsZS1xdW90ZWQgYXR0cmlidXRlIHZhbHVlLgovLy8gICAgICAgQXBvc3Ryb3BoZSBpcyBlc2NhcGVkIGFzIGAmIzM5O2AgaW5zdGVhZCBvZiBgJmFwb3M7YCBzaW5jZQovLy8gICAgICAgbm90IGFsbCBicm93c2VycyB1bmRlcnN0YW5kIGAmYXBvcztgLgovLy8gKiBgL2AgKHNsYXNoKSBpcyByZWNvbW1lbmRlZCB0byBiZSBlc2NhcGVkIGJlY2F1c2UgaXQgbWF5IGJlIHVzZWQKLy8vICAgICAgIHRvIHRlcm1pbmF0ZSBhbiBlbGVtZW50IGluIHNvbWUgSFRNTCBkaWFsZWN0cy4KLy8vCi8vLyBFc2NhcGluZyBgPmAgKGdyZWF0ZXIgdGhhbikgaXNuJ3QgbmVjZXNzYXJ5LCBidXQgdGhlIHJlc3VsdCBpcyBvZnRlbgovLy8gZm91bmQgdG8gYmUgZWFzaWVyIHRvIHJlYWQgaWYgZ3JlYXRlci10aGFuIGlzIGFsc28gZXNjYXBlZCB3aGVuZXZlcgovLy8gbGVzcy10aGFuIGlzLgpjbGFzcyBIdG1sRXNjYXBlIGV4dGVuZHMgQ29udmVydGVyPFN0cmluZywgU3RyaW5nPiB7CiAgLy8vIFRoZSBbSHRtbEVzY2FwZU1vZGVdIHVzZWQgYnkgdGhlIGNvbnZlcnRlci4KICBmaW5hbCBIdG1sRXNjYXBlTW9kZSBtb2RlOwoKICAvLy8gQ3JlYXRlIGNvbnZlcnRlciB0aGF0IGVzY2FwZXMgSFRNTCBjaGFyYWN0ZXJzLgogIC8vLwogIC8vLyBJZiBbbW9kZV0gaXMgcHJvdmlkZWQgYXMgZWl0aGVyIFtIdG1sRXNjYXBlTW9kZS5hdHRyaWJ1dGVdIG9yCiAgLy8vIFtIdG1sRXNjYXBlTW9kZS5lbGVtZW50XSwgb25seSB0aGUgY29ycmVzcG9uZGluZyBzdWJzZXQgb2YgSFRNTAogIC8vLyBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkLgogIC8vLyBUaGUgZGVmYXVsdCBpcyB0byBlc2NhcGUgYWxsIEhUTUwgY2hhcmFjdGVycy4KICBjb25zdCBIdG1sRXNjYXBlKFt0aGlzLm1vZGUgPSBIdG1sRXNjYXBlTW9kZS51bmtub3duXSk7CgogIFN0cmluZyBjb252ZXJ0KFN0cmluZyB0ZXh0KSB7CiAgICB2YXIgdmFsID0gX2NvbnZlcnQodGV4dCwgMCwgdGV4dC5sZW5ndGgpOwogICAgcmV0dXJuIHZhbCA9PSBudWxsID8gdGV4dCA6IHZhbDsKICB9CgogIC8vLyBDb252ZXJ0cyB0aGUgc3Vic3RyaW5nIG9mIHRleHQgZnJvbSBzdGFydCB0byBlbmQuCiAgLy8vCiAgLy8vIFJldHVybnMgYG51bGxgIGlmIG5vIGNoYW5nZXMgd2VyZSBuZWNlc3NhcnksIG90aGVyd2lzZSByZXR1cm5zCiAgLy8vIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLgogIFN0cmluZyBfY29udmVydChTdHJpbmcgdGV4dCwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBTdHJpbmdCdWZmZXIgcmVzdWx0OwogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgdmFyIGNoID0gdGV4dFtpXTsKICAgICAgU3RyaW5nIHJlcGxhY2VtZW50OwogICAgICBzd2l0Y2ggKGNoKSB7CiAgICAgICAgY2FzZSAnJic6CiAgICAgICAgICByZXBsYWNlbWVudCA9ICcmYW1wOyc7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICciJzoKICAgICAgICAgIGlmIChtb2RlLmVzY2FwZVF1b3QpIHJlcGxhY2VtZW50ID0gJyZxdW90Oyc7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICInIjoKICAgICAgICAgIGlmIChtb2RlLmVzY2FwZUFwb3MpIHJlcGxhY2VtZW50ID0gJyYjMzk7JzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJzwnOgogICAgICAgICAgaWYgKG1vZGUuZXNjYXBlTHRHdCkgcmVwbGFjZW1lbnQgPSAnJmx0Oyc7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICc+JzoKICAgICAgICAgIGlmIChtb2RlLmVzY2FwZUx0R3QpIHJlcGxhY2VtZW50ID0gJyZndDsnOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnLyc6CiAgICAgICAgICBpZiAobW9kZS5lc2NhcGVTbGFzaCkgcmVwbGFjZW1lbnQgPSAnJiM0NzsnOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgaWYgKHJlcGxhY2VtZW50ICE9IG51bGwpIHsKICAgICAgICByZXN1bHQgPz89IFN0cmluZ0J1ZmZlcigpOwogICAgICAgIGlmIChpID4gc3RhcnQpIHJlc3VsdC53cml0ZSh0ZXh0LnN1YnN0cmluZyhzdGFydCwgaSkpOwogICAgICAgIHJlc3VsdC53cml0ZShyZXBsYWNlbWVudCk7CiAgICAgICAgc3RhcnQgPSBpICsgMTsKICAgICAgfQogICAgfQogICAgaWYgKHJlc3VsdCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGlmIChlbmQgPiBzdGFydCkgcmVzdWx0LndyaXRlKHRleHQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpKTsKICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKICB9CgogIFN0cmluZ0NvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxTdHJpbmc+IHNpbmspIHsKICAgIHJldHVybiBfSHRtbEVzY2FwZVNpbmsodGhpcywKICAgICAgICBzaW5rIGlzIFN0cmluZ0NvbnZlcnNpb25TaW5rID8gc2luayA6IFN0cmluZ0NvbnZlcnNpb25TaW5rLmZyb20oc2luaykpOwogIH0KfQoKY2xhc3MgX0h0bWxFc2NhcGVTaW5rIGV4dGVuZHMgU3RyaW5nQ29udmVyc2lvblNpbmtCYXNlIHsKICBmaW5hbCBIdG1sRXNjYXBlIF9lc2NhcGU7CiAgZmluYWwgU3RyaW5nQ29udmVyc2lvblNpbmsgX3Npbms7CgogIF9IdG1sRXNjYXBlU2luayh0aGlzLl9lc2NhcGUsIHRoaXMuX3NpbmspOwoKICB2b2lkIGFkZFNsaWNlKFN0cmluZyBjaHVuaywgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgdmFyIHZhbCA9IF9lc2NhcGUuX2NvbnZlcnQoY2h1bmssIHN0YXJ0LCBlbmQpOwogICAgaWYgKHZhbCA9PSBudWxsKSB7CiAgICAgIF9zaW5rLmFkZFNsaWNlKGNodW5rLCBzdGFydCwgZW5kLCBpc0xhc3QpOwogICAgfSBlbHNlIHsKICAgICAgX3NpbmsuYWRkKHZhbCk7CiAgICAgIGlmIChpc0xhc3QpIF9zaW5rLmNsb3NlKCk7CiAgICB9CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgX3NpbmsuY2xvc2UoKTsKICB9Cn0KgOEATk48ARYBRARNRioETU5HIwRMSSAETkxGLAEXBEoyHwQqQQRGKARRERcWASUZASUZASoZATYGT4DXGgE5BkseBkVBRig7AU0GQigGP0YhKj8BTQZCKAY/RiEsPwE+BkVBRgYmKD4BRyoBJQYcSEoYHx8fHyEWAR4CAUUESzQEMwQxRT9ERTBGOQRJSBI1Mh0BNQZERh40OgEgLiUEATgGRRw1GSgYGhQSIRESNxESNhESNRESNRESNxEIISM/IxcIBiU/HgQBQyFQBAIBORwkAS0BQTMXMQ0WIQYEARETBAIBHWRhcnQ6Y29udmVydC9odG1sX2VzY2FwZS5kYXJ0LW9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb252ZXJ0L2pzb24uZGFydMAAiowvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvbnZlcnQ7CgovLy8gRXJyb3IgdGhyb3duIGJ5IEpTT04gc2VyaWFsaXphdGlvbiBpZiBhbiBvYmplY3QgY2Fubm90IGJlIHNlcmlhbGl6ZWQuCi8vLwovLy8gVGhlIFt1bnN1cHBvcnRlZE9iamVjdF0gZmllbGQgaG9sZHMgdGhhdCBvYmplY3QgdGhhdCBmYWlsZWQgdG8gYmUgc2VyaWFsaXplZC4KLy8vCi8vLyBJZiBhbiBvYmplY3QgaXNuJ3QgZGlyZWN0bHkgc2VyaWFsaXphYmxlLCB0aGUgc2VyaWFsaXplciBjYWxscyB0aGUgYHRvSnNvbmAKLy8vIG1ldGhvZCBvbiB0aGUgb2JqZWN0LiBJZiB0aGF0IGNhbGwgZmFpbHMsIHRoZSBlcnJvciB3aWxsIGJlIHN0b3JlZCBpbiB0aGUKLy8vIFtjYXVzZV0gZmllbGQuIElmIHRoZSBjYWxsIHJldHVybnMgYW4gb2JqZWN0IHRoYXQgaXNuJ3QgZGlyZWN0bHkKLy8vIHNlcmlhbGl6YWJsZSwgdGhlIFtjYXVzZV0gaXMgbnVsbC4KY2xhc3MgSnNvblVuc3VwcG9ydGVkT2JqZWN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgLy8vIFRoZSBvYmplY3QgdGhhdCBjb3VsZCBub3QgYmUgc2VyaWFsaXplZC4KICBmaW5hbCBPYmplY3QgdW5zdXBwb3J0ZWRPYmplY3Q7CgogIC8vLyBUaGUgZXhjZXB0aW9uIHRocm93biB3aGVuIHRyeWluZyB0byBjb252ZXJ0IHRoZSBvYmplY3QuCiAgZmluYWwgT2JqZWN0IGNhdXNlOwoKICAvLy8gVGhlIHBhcnRpYWwgcmVzdWx0IG9mIHRoZSBjb252ZXJzaW9uLCB1cCB1bnRpbCB0aGUgZXJyb3IgaGFwcGVuZWQuCiAgLy8vCiAgLy8vIE1heSBiZSBudWxsLgogIGZpbmFsIFN0cmluZyBwYXJ0aWFsUmVzdWx0OwoKICBKc29uVW5zdXBwb3J0ZWRPYmplY3RFcnJvcih0aGlzLnVuc3VwcG9ydGVkT2JqZWN0LAogICAgICB7dGhpcy5jYXVzZSwgdGhpcy5wYXJ0aWFsUmVzdWx0fSk7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHZhciBzYWZlU3RyaW5nID0gRXJyb3Iuc2FmZVRvU3RyaW5nKHVuc3VwcG9ydGVkT2JqZWN0KTsKICAgIFN0cmluZyBwcmVmaXg7CiAgICBpZiAoY2F1c2UgIT0gbnVsbCkgewogICAgICBwcmVmaXggPSAiQ29udmVydGluZyBvYmplY3QgdG8gYW4gZW5jb2RhYmxlIG9iamVjdCBmYWlsZWQ6IjsKICAgIH0gZWxzZSB7CiAgICAgIHByZWZpeCA9ICJDb252ZXJ0aW5nIG9iamVjdCBkaWQgbm90IHJldHVybiBhbiBlbmNvZGFibGUgb2JqZWN0OiI7CiAgICB9CiAgICByZXR1cm4gIiRwcmVmaXggJHNhZmVTdHJpbmciOwogIH0KfQoKLy8vIFJlcG9ydHMgdGhhdCBhbiBvYmplY3QgY291bGQgbm90IGJlIHN0cmluZ2lmaWVkIGR1ZSB0byBjeWNsaWMgcmVmZXJlbmNlcy4KLy8vCi8vLyBBbiBvYmplY3QgdGhhdCByZWZlcmVuY2VzIGl0c2VsZiBjYW5ub3QgYmUgc2VyaWFsaXplZCBieQovLy8gW0pzb25Db2RlYy5lbmNvZGVdL1tKc29uRW5jb2Rlci5jb252ZXJ0XS4KLy8vIFdoZW4gdGhlIGN5Y2xlIGlzIGRldGVjdGVkLCBhIFtKc29uQ3ljbGljRXJyb3JdIGlzIHRocm93bi4KY2xhc3MgSnNvbkN5Y2xpY0Vycm9yIGV4dGVuZHMgSnNvblVuc3VwcG9ydGVkT2JqZWN0RXJyb3IgewogIC8vLyBUaGUgZmlyc3Qgb2JqZWN0IHRoYXQgd2FzIGRldGVjdGVkIGFzIHBhcnQgb2YgYSBjeWNsZS4KICBKc29uQ3ljbGljRXJyb3IoT2JqZWN0IG9iamVjdCkgOiBzdXBlcihvYmplY3QpOwogIFN0cmluZyB0b1N0cmluZygpID0+ICJDeWNsaWMgZXJyb3IgaW4gSlNPTiBzdHJpbmdpZnkiOwp9CgovLy8gQW4gaW5zdGFuY2Ugb2YgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFtKc29uQ29kZWNdLgovLy8KLy8vIFRoaXMgaW5zdGFuY2UgcHJvdmlkZXMgYSBjb252ZW5pZW50IGFjY2VzcyB0byB0aGUgbW9zdCBjb21tb24gSlNPTgovLy8gdXNlIGNhc2VzLgovLy8KLy8vIEV4YW1wbGVzOgovLy8KLy8vICAgICB2YXIgZW5jb2RlZCA9IGpzb24uZW5jb2RlKFsxLCAyLCB7ICJhIjogbnVsbCB9XSk7Ci8vLyAgICAgdmFyIGRlY29kZWQgPSBqc29uLmRlY29kZSgnWyJmb28iLCB7ICJiYXIiOiA0OTkgfV0nKTsKLy8vCi8vLyBUaGUgdG9wLWxldmVsIFtqc29uRW5jb2RlXSBhbmQgW2pzb25EZWNvZGVdIGZ1bmN0aW9ucyBtYXkgYmUgdXNlZCBpbnN0ZWFkIGlmCi8vLyBhIGxvY2FsIHZhcmlhYmxlIHNoYWRvd3MgdGhlIFtqc29uXSBjb25zdGFudC4KY29uc3QgSnNvbkNvZGVjIGpzb24gPSBKc29uQ29kZWMoKTsKCi8vLyBDb252ZXJ0cyBbdmFsdWVdIHRvIGEgSlNPTiBzdHJpbmcuCi8vLwovLy8gSWYgdmFsdWUgY29udGFpbnMgb2JqZWN0cyB0aGF0IGFyZSBub3QgZGlyZWN0bHkgZW5jb2RhYmxlIHRvIGEgSlNPTgovLy8gc3RyaW5nIChhIHZhbHVlIHRoYXQgaXMgbm90IGEgbnVtYmVyLCBib29sZWFuLCBzdHJpbmcsIG51bGwsIGxpc3Qgb3IgYSBtYXAKLy8vIHdpdGggc3RyaW5nIGtleXMpLCB0aGUgW3RvRW5jb2RhYmxlXSBmdW5jdGlvbiBpcyB1c2VkIHRvIGNvbnZlcnQgaXQgdG8gYW4KLy8vIG9iamVjdCB0aGF0IG11c3QgYmUgZGlyZWN0bHkgZW5jb2RhYmxlLgovLy8KLy8vIElmIFt0b0VuY29kYWJsZV0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlCi8vLyByZXN1bHQgb2YgY2FsbGluZyBgLnRvSnNvbigpYCBvbiB0aGUgdW5lbmNvZGFibGUgb2JqZWN0LgovLy8KLy8vIFNob3J0aGFuZCBmb3IgW2pzb24uZW5jb2RlXS4gVXNlZnVsIGlmIGEgbG9jYWwgdmFyaWFibGUgc2hhZG93cyB0aGUgZ2xvYmFsCi8vLyBbanNvbl0gY29uc3RhbnQuClN0cmluZyBqc29uRW5jb2RlKE9iamVjdCBvYmplY3QsIHtPYmplY3QgdG9FbmNvZGFibGUoT2JqZWN0IG5vbkVuY29kYWJsZSl9KSA9PgogICAganNvbi5lbmNvZGUob2JqZWN0LCB0b0VuY29kYWJsZTogdG9FbmNvZGFibGUpOwoKLy8vIFBhcnNlcyB0aGUgc3RyaW5nIGFuZCByZXR1cm5zIHRoZSByZXN1bHRpbmcgSnNvbiBvYmplY3QuCi8vLwovLy8gVGhlIG9wdGlvbmFsIFtyZXZpdmVyXSBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCBvYmplY3Qgb3IgbGlzdAovLy8gcHJvcGVydHkgdGhhdCBoYXMgYmVlbiBwYXJzZWQgZHVyaW5nIGRlY29kaW5nLiBUaGUgYGtleWAgYXJndW1lbnQgaXMgZWl0aGVyCi8vLyB0aGUgaW50ZWdlciBsaXN0IGluZGV4IGZvciBhIGxpc3QgcHJvcGVydHksIHRoZSBzdHJpbmcgbWFwIGtleSBmb3Igb2JqZWN0Ci8vLyBwcm9wZXJ0aWVzLCBvciBgbnVsbGAgZm9yIHRoZSBmaW5hbCByZXN1bHQuCi8vLwovLy8gVGhlIGRlZmF1bHQgW3Jldml2ZXJdICh3aGVuIG5vdCBwcm92aWRlZCkgaXMgdGhlIGlkZW50aXR5IGZ1bmN0aW9uLgovLy8KLy8vIFNob3J0aGFuZCBmb3IgW2pzb24uZGVjb2RlXS4gVXNlZnVsIGlmIGEgbG9jYWwgdmFyaWFibGUgc2hhZG93cyB0aGUgZ2xvYmFsCi8vLyBbanNvbl0gY29uc3RhbnQuCmR5bmFtaWMganNvbkRlY29kZShTdHJpbmcgc291cmNlLCB7T2JqZWN0IHJldml2ZXIoT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKX0pID0+CiAgICBqc29uLmRlY29kZShzb3VyY2UsIHJldml2ZXI6IHJldml2ZXIpOwoKLy8vIEEgW0pzb25Db2RlY10gZW5jb2RlcyBKU09OIG9iamVjdHMgdG8gc3RyaW5ncyBhbmQgZGVjb2RlcyBzdHJpbmdzIHRvCi8vLyBKU09OIG9iamVjdHMuCi8vLwovLy8gRXhhbXBsZXM6Ci8vLwovLy8gICAgIHZhciBlbmNvZGVkID0ganNvbi5lbmNvZGUoWzEsIDIsIHsgImEiOiBudWxsIH1dKTsKLy8vICAgICB2YXIgZGVjb2RlZCA9IGpzb24uZGVjb2RlKCdbImZvbyIsIHsgImJhciI6IDQ5OSB9XScpOwpjbGFzcyBKc29uQ29kZWMgZXh0ZW5kcyBDb2RlYzxPYmplY3QsIFN0cmluZz4gewogIGZpbmFsIEZ1bmN0aW9uKE9iamVjdCBrZXksIE9iamVjdCB2YWx1ZSkgX3Jldml2ZXI7CiAgZmluYWwgRnVuY3Rpb24oZHluYW1pYykgX3RvRW5jb2RhYmxlOwoKICAvLy8gQ3JlYXRlcyBhIGBKc29uQ29kZWNgIHdpdGggdGhlIGdpdmVuIHJldml2ZXIgYW5kIGVuY29kaW5nIGZ1bmN0aW9uLgogIC8vLwogIC8vLyBUaGUgW3Jldml2ZXJdIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgZGVjb2RpbmcuIEl0IGlzIGludm9rZWQgb25jZSBmb3IKICAvLy8gZWFjaCBvYmplY3Qgb3IgbGlzdCBwcm9wZXJ0eSB0aGF0IGhhcyBiZWVuIHBhcnNlZC4KICAvLy8gVGhlIGBrZXlgIGFyZ3VtZW50IGlzIGVpdGhlciB0aGUgaW50ZWdlciBsaXN0IGluZGV4IGZvciBhIGxpc3QgcHJvcGVydHksCiAgLy8vIHRoZSBzdHJpbmcgbWFwIGtleSBmb3Igb2JqZWN0IHByb3BlcnRpZXMsIG9yIGBudWxsYCBmb3IgdGhlIGZpbmFsIHJlc3VsdC4KICAvLy8KICAvLy8gSWYgW3Jldml2ZXJdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgdmFsdWUgYXJndW1lbnQuCiAgLy8vCiAgLy8vIFRoZSBbdG9FbmNvZGFibGVdIGZ1bmN0aW9uIGlzIHVzZWQgZHVyaW5nIGVuY29kaW5nLiBJdCBpcyBpbnZva2VkIGZvcgogIC8vLyB2YWx1ZXMgdGhhdCBhcmUgbm90IGRpcmVjdGx5IGVuY29kYWJsZSB0byBhIHN0cmluZyAoYSB2YWx1ZSB0aGF0IGlzIG5vdCBhCiAgLy8vIG51bWJlciwgYm9vbGVhbiwgc3RyaW5nLCBudWxsLCBsaXN0IG9yIGEgbWFwIHdpdGggc3RyaW5nIGtleXMpLiBUaGUKICAvLy8gZnVuY3Rpb24gbXVzdCByZXR1cm4gYW4gb2JqZWN0IHRoYXQgaXMgZGlyZWN0bHkgZW5jb2RhYmxlLiBUaGUgZWxlbWVudHMgb2YKICAvLy8gYSByZXR1cm5lZCBsaXN0IGFuZCB2YWx1ZXMgb2YgYSByZXR1cm5lZCBtYXAgZG8gbm90IG5lZWQgdG8gYmUgZGlyZWN0bHkKICAvLy8gZW5jb2RhYmxlLCBhbmQgaWYgdGhleSBhcmVuJ3QsIGB0b0VuY29kYWJsZWAgd2lsbCBiZSB1c2VkIG9uIHRoZW0gYXMgd2VsbC4KICAvLy8gUGxlYXNlIG5vdGljZSB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGNhdXNlIGFuIGluZmluaXRlIHJlY3Vyc2l2ZSByZWdyZXNzCiAgLy8vIGluIHRoaXMgd2F5LCBieSBlZmZlY3RpdmVseSBjcmVhdGluZyBhbiBpbmZpbml0ZSBkYXRhIHN0cnVjdHVyZSB0aHJvdWdoCiAgLy8vIHJlcGVhdGVkIGNhbGwgdG8gYHRvRW5jb2RhYmxlYC4KICAvLy8KICAvLy8gSWYgW3RvRW5jb2RhYmxlXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUKICAvLy8gcmVzdWx0IG9mIGNhbGxpbmcgYC50b0pzb24oKWAgb24gdGhlIHVuZW5jb2RhYmxlIG9iamVjdC4KICBjb25zdCBKc29uQ29kZWMoe3Jldml2ZXIoT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKSwgdG9FbmNvZGFibGUodmFyIG9iamVjdCl9KQogICAgICA6IF9yZXZpdmVyID0gcmV2aXZlciwKICAgICAgICBfdG9FbmNvZGFibGUgPSB0b0VuY29kYWJsZTsKCiAgLy8vIENyZWF0ZXMgYSBgSnNvbkNvZGVjYCB3aXRoIHRoZSBnaXZlbiByZXZpdmVyLgogIC8vLwogIC8vLyBUaGUgW3Jldml2ZXJdIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIGZvciBlYWNoIG9iamVjdCBvciBsaXN0IHByb3BlcnR5CiAgLy8vIHRoYXQgaGFzIGJlZW4gcGFyc2VkIGR1cmluZyBkZWNvZGluZy4gVGhlIGBrZXlgIGFyZ3VtZW50IGlzIGVpdGhlciB0aGUKICAvLy8gaW50ZWdlciBsaXN0IGluZGV4IGZvciBhIGxpc3QgcHJvcGVydHksIHRoZSBzdHJpbmcgbWFwIGtleSBmb3Igb2JqZWN0CiAgLy8vIHByb3BlcnRpZXMsIG9yIGBudWxsYCBmb3IgdGhlIGZpbmFsIHJlc3VsdC4KICBKc29uQ29kZWMud2l0aFJldml2ZXIocmV2aXZlcihPYmplY3Qga2V5LCBPYmplY3QgdmFsdWUpKQogICAgICA6IHRoaXMocmV2aXZlcjogcmV2aXZlcik7CgogIC8vLyBQYXJzZXMgdGhlIHN0cmluZyBhbmQgcmV0dXJucyB0aGUgcmVzdWx0aW5nIEpzb24gb2JqZWN0LgogIC8vLwogIC8vLyBUaGUgb3B0aW9uYWwgW3Jldml2ZXJdIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIGZvciBlYWNoIG9iamVjdCBvciBsaXN0CiAgLy8vIHByb3BlcnR5IHRoYXQgaGFzIGJlZW4gcGFyc2VkIGR1cmluZyBkZWNvZGluZy4gVGhlIGBrZXlgIGFyZ3VtZW50IGlzIGVpdGhlcgogIC8vLyB0aGUgaW50ZWdlciBsaXN0IGluZGV4IGZvciBhIGxpc3QgcHJvcGVydHksIHRoZSBzdHJpbmcgbWFwIGtleSBmb3Igb2JqZWN0CiAgLy8vIHByb3BlcnRpZXMsIG9yIGBudWxsYCBmb3IgdGhlIGZpbmFsIHJlc3VsdC4KICAvLy8KICAvLy8gVGhlIGRlZmF1bHQgW3Jldml2ZXJdICh3aGVuIG5vdCBwcm92aWRlZCkgaXMgdGhlIGlkZW50aXR5IGZ1bmN0aW9uLgogIGR5bmFtaWMgZGVjb2RlKFN0cmluZyBzb3VyY2UsIHtyZXZpdmVyKE9iamVjdCBrZXksIE9iamVjdCB2YWx1ZSl9KSB7CiAgICByZXZpdmVyID8/PSBfcmV2aXZlcjsKICAgIGlmIChyZXZpdmVyID09IG51bGwpIHJldHVybiBkZWNvZGVyLmNvbnZlcnQoc291cmNlKTsKICAgIHJldHVybiBKc29uRGVjb2RlcihyZXZpdmVyKS5jb252ZXJ0KHNvdXJjZSk7CiAgfQoKICAvLy8gQ29udmVydHMgW3ZhbHVlXSB0byBhIEpTT04gc3RyaW5nLgogIC8vLwogIC8vLyBJZiB2YWx1ZSBjb250YWlucyBvYmplY3RzIHRoYXQgYXJlIG5vdCBkaXJlY3RseSBlbmNvZGFibGUgdG8gYSBKU09OCiAgLy8vIHN0cmluZyAoYSB2YWx1ZSB0aGF0IGlzIG5vdCBhIG51bWJlciwgYm9vbGVhbiwgc3RyaW5nLCBudWxsLCBsaXN0IG9yIGEgbWFwCiAgLy8vIHdpdGggc3RyaW5nIGtleXMpLCB0aGUgW3RvRW5jb2RhYmxlXSBmdW5jdGlvbiBpcyB1c2VkIHRvIGNvbnZlcnQgaXQgdG8gYW4KICAvLy8gb2JqZWN0IHRoYXQgbXVzdCBiZSBkaXJlY3RseSBlbmNvZGFibGUuCiAgLy8vCiAgLy8vIElmIFt0b0VuY29kYWJsZV0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlCiAgLy8vIHJlc3VsdCBvZiBjYWxsaW5nIGAudG9Kc29uKClgIG9uIHRoZSB1bmVuY29kYWJsZSBvYmplY3QuCiAgU3RyaW5nIGVuY29kZShPYmplY3QgdmFsdWUsIHt0b0VuY29kYWJsZShvYmplY3QpfSkgewogICAgdG9FbmNvZGFibGUgPz89IF90b0VuY29kYWJsZTsKICAgIGlmICh0b0VuY29kYWJsZSA9PSBudWxsKSByZXR1cm4gZW5jb2Rlci5jb252ZXJ0KHZhbHVlKTsKICAgIHJldHVybiBKc29uRW5jb2Rlcih0b0VuY29kYWJsZSkuY29udmVydCh2YWx1ZSk7CiAgfQoKICBKc29uRW5jb2RlciBnZXQgZW5jb2RlciB7CiAgICBpZiAoX3RvRW5jb2RhYmxlID09IG51bGwpIHJldHVybiBjb25zdCBKc29uRW5jb2RlcigpOwogICAgcmV0dXJuIEpzb25FbmNvZGVyKF90b0VuY29kYWJsZSk7CiAgfQoKICBKc29uRGVjb2RlciBnZXQgZGVjb2RlciB7CiAgICBpZiAoX3Jldml2ZXIgPT0gbnVsbCkgcmV0dXJuIGNvbnN0IEpzb25EZWNvZGVyKCk7CiAgICByZXR1cm4gSnNvbkRlY29kZXIoX3Jldml2ZXIpOwogIH0KfQoKLy8vIFRoaXMgY2xhc3MgY29udmVydHMgSlNPTiBvYmplY3RzIHRvIHN0cmluZ3MuCmNsYXNzIEpzb25FbmNvZGVyIGV4dGVuZHMgQ29udmVydGVyPE9iamVjdCwgU3RyaW5nPiB7CiAgLy8vIFRoZSBzdHJpbmcgdXNlZCBmb3IgaW5kZW50aW9uLgogIC8vLwogIC8vLyBXaGVuIGdlbmVyYXRpbmcgbXVsdGktbGluZSBvdXRwdXQsIHRoaXMgc3RyaW5nIGlzIGluc2VydGVkIG9uY2UgYXQgdGhlCiAgLy8vIGJlZ2lubmluZyBvZiBlYWNoIGluZGVudGVkIGxpbmUgZm9yIGVhY2ggbGV2ZWwgb2YgaW5kZW50YXRpb24uCiAgLy8vCiAgLy8vIElmIGBudWxsYCwgdGhlIG91dHB1dCBpcyBlbmNvZGVkIGFzIGEgc2luZ2xlIGxpbmUuCiAgZmluYWwgU3RyaW5nIGluZGVudDsKCiAgLy8vIEZ1bmN0aW9uIGNhbGxlZCBvbiBub24tZW5jb2RhYmxlIG9iamVjdHMgdG8gcmV0dXJuIGEgcmVwbGFjZW1lbnQKICAvLy8gZW5jb2RhYmxlIG9iamVjdCB0aGF0IHdpbGwgYmUgZW5jb2RlZCBpbiB0aGUgb3JpZ25hbCdzIHBsYWNlLgogIGZpbmFsIEZ1bmN0aW9uKGR5bmFtaWMpIF90b0VuY29kYWJsZTsKCiAgLy8vIENyZWF0ZXMgYSBKU09OIGVuY29kZXIuCiAgLy8vCiAgLy8vIFRoZSBKU09OIGVuY29kZXIgaGFuZGxlcyBudW1iZXJzLCBzdHJpbmdzLCBib29sZWFucywgbnVsbCwgbGlzdHMgYW5kCiAgLy8vIG1hcHMgd2l0aCBzdHJpbmcga2V5cyBkaXJlY3RseS4KICAvLy8KICAvLy8gQW55IG90aGVyIG9iamVjdCBpcyBhdHRlbXB0ZWQgY29udmVydGVkIGJ5IFt0b0VuY29kYWJsZV0gdG8gYW4KICAvLy8gb2JqZWN0IHRoYXQgaXMgb2Ygb25lIG9mIHRoZSBjb252ZXJ0aWJsZSB0eXBlcy4KICAvLy8KICAvLy8gSWYgW3RvRW5jb2RhYmxlXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBjYWxsaW5nIGAudG9Kc29uKClgIG9uCiAgLy8vIHRoZSBvYmplY3QuCiAgY29uc3QgSnNvbkVuY29kZXIoW3RvRW5jb2RhYmxlKG9iamVjdCldKQogICAgICA6IGluZGVudCA9IG51bGwsCiAgICAgICAgX3RvRW5jb2RhYmxlID0gdG9FbmNvZGFibGU7CgogIC8vLyBDcmVhdGVzIGEgSlNPTiBlbmNvZGVyIHRoYXQgY3JlYXRlcyBtdWx0aS1saW5lIEpTT04uCiAgLy8vCiAgLy8vIFRoZSBlbmNvZGluZyBvZiBlbGVtZW50cyBvZiBsaXN0cyBhbmQgbWFwcyBhcmUgaW5kZW50ZWQgYW5kIHB1dCBvbiBzZXBhcmF0ZQogIC8vLyBsaW5lcy4gVGhlIFtpbmRlbnRdIHN0cmluZyBpcyBwcmVwZW5kZWQgdG8gdGhlc2UgZWxlbWVudHMsIG9uY2UgZm9yIGVhY2gKICAvLy8gbGV2ZWwgb2YgaW5kZW50YXRpb24uCiAgLy8vCiAgLy8vIElmIFtpbmRlbnRdIGlzIGBudWxsYCwgdGhlIG91dHB1dCBpcyBlbmNvZGVkIGFzIGEgc2luZ2xlIGxpbmUuCiAgLy8vCiAgLy8vIFRoZSBKU09OIGVuY29kZXIgaGFuZGxlcyBudW1iZXJzLCBzdHJpbmdzLCBib29sZWFucywgbnVsbCwgbGlzdHMgYW5kCiAgLy8vIG1hcHMgd2l0aCBzdHJpbmcga2V5cyBkaXJlY3RseS4KICAvLy8KICAvLy8gQW55IG90aGVyIG9iamVjdCBpcyBhdHRlbXB0ZWQgY29udmVydGVkIGJ5IFt0b0VuY29kYWJsZV0gdG8gYW4KICAvLy8gb2JqZWN0IHRoYXQgaXMgb2Ygb25lIG9mIHRoZSBjb252ZXJ0aWJsZSB0eXBlcy4KICAvLy8KICAvLy8gSWYgW3RvRW5jb2RhYmxlXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBjYWxsaW5nIGAudG9Kc29uKClgIG9uCiAgLy8vIHRoZSBvYmplY3QuCiAgY29uc3QgSnNvbkVuY29kZXIud2l0aEluZGVudCh0aGlzLmluZGVudCwgW3RvRW5jb2RhYmxlKG9iamVjdCldKQogICAgICA6IF90b0VuY29kYWJsZSA9IHRvRW5jb2RhYmxlOwoKICAvLy8gQ29udmVydHMgW29iamVjdF0gdG8gYSBKU09OIFtTdHJpbmddLgogIC8vLwogIC8vLyBEaXJlY3RseSBzZXJpYWxpemFibGUgdmFsdWVzIGFyZSBbbnVtXSwgW1N0cmluZ10sIFtib29sXSwgYW5kIFtOdWxsXSwgYXMKICAvLy8gd2VsbCBhcyBzb21lIFtMaXN0XSBhbmQgW01hcF0gdmFsdWVzLiBGb3IgW0xpc3RdLCB0aGUgZWxlbWVudHMgbXVzdCBhbGwgYmUKICAvLy8gc2VyaWFsaXphYmxlLiBGb3IgW01hcF0sIHRoZSBrZXlzIG11c3QgYmUgW1N0cmluZ10gYW5kIHRoZSB2YWx1ZXMgbXVzdCBiZQogIC8vLyBzZXJpYWxpemFibGUuCiAgLy8vCiAgLy8vIElmIGEgdmFsdWUgb2YgYW55IG90aGVyIHR5cGUgaXMgYXR0ZW1wdGVkIHRvIGJlIHNlcmlhbGl6ZWQsIHRoZQogIC8vLyBgdG9FbmNvZGFibGVgIGZ1bmN0aW9uIHByb3ZpZGVkIGluIHRoZSBjb25zdHJ1Y3RvciBpcyBjYWxsZWQgd2l0aCB0aGUgdmFsdWUKICAvLy8gYXMgYXJndW1lbnQuIFRoZSByZXN1bHQsIHdoaWNoIG11c3QgYmUgYSBkaXJlY3RseSBzZXJpYWxpemFibGUgdmFsdWUsIGlzCiAgLy8vIHNlcmlhbGl6ZWQgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgdmFsdWUuCiAgLy8vCiAgLy8vIElmIHRoZSBjb252ZXJzaW9uIHRocm93cywgb3IgcmV0dXJucyBhIHZhbHVlIHRoYXQgaXMgbm90IGRpcmVjdGx5CiAgLy8vIHNlcmlhbGl6YWJsZSwgYSBbSnNvblVuc3VwcG9ydGVkT2JqZWN0RXJyb3JdIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgLy8vIElmIHRoZSBjYWxsIHRocm93cywgdGhlIGVycm9yIGlzIGNhdWdodCBhbmQgc3RvcmVkIGluIHRoZQogIC8vLyBbSnNvblVuc3VwcG9ydGVkT2JqZWN0RXJyb3JdJ3MgWzpjYXVzZTpdIGZpZWxkLgogIC8vLwogIC8vLyBJZiBhIFtMaXN0XSBvciBbTWFwXSBjb250YWlucyBhIHJlZmVyZW5jZSB0byBpdHNlbGYsIGRpcmVjdGx5IG9yIHRocm91Z2gKICAvLy8gb3RoZXIgbGlzdHMgb3IgbWFwcywgaXQgY2Fubm90IGJlIHNlcmlhbGl6ZWQgYW5kIGEgW0pzb25DeWNsaWNFcnJvcl0gaXMKICAvLy8gdGhyb3duLgogIC8vLwogIC8vLyBbb2JqZWN0XSBzaG91bGQgbm90IGNoYW5nZSBkdXJpbmcgc2VyaWFsaXphdGlvbi4KICAvLy8KICAvLy8gSWYgYW4gb2JqZWN0IGlzIHNlcmlhbGl6ZWQgbW9yZSB0aGFuIG9uY2UsIFtjb252ZXJ0XSBtYXkgY2FjaGUgdGhlIHRleHQKICAvLy8gZm9yIGl0LiBJbiBvdGhlciB3b3JkcywgaWYgdGhlIGNvbnRlbnQgb2YgYW4gb2JqZWN0IGNoYW5nZXMgYWZ0ZXIgaXQgaXMKICAvLy8gZmlyc3Qgc2VyaWFsaXplZCwgdGhlIG5ldyB2YWx1ZXMgbWF5IG5vdCBiZSByZWZsZWN0ZWQgaW4gdGhlIHJlc3VsdC4KICBTdHJpbmcgY29udmVydChPYmplY3Qgb2JqZWN0KSA9PgogICAgICBfSnNvblN0cmluZ1N0cmluZ2lmaWVyLnN0cmluZ2lmeShvYmplY3QsIF90b0VuY29kYWJsZSwgaW5kZW50KTsKCiAgLy8vIFN0YXJ0cyBhIGNodW5rZWQgY29udmVyc2lvbi4KICAvLy8KICAvLy8gVGhlIGNvbnZlcnRlciB3b3JrcyBtb3JlIGVmZmljaWVudGx5IGlmIHRoZSBnaXZlbiBbc2lua10gaXMgYQogIC8vLyBbU3RyaW5nQ29udmVyc2lvblNpbmtdLgogIC8vLwogIC8vLyBSZXR1cm5zIGEgY2h1bmtlZC1jb252ZXJzaW9uIHNpbmsgdGhhdCBhY2NlcHRzIGF0IG1vc3Qgb25lIG9iamVjdC4gSXQgaXMKICAvLy8gYW4gZXJyb3IgdG8gaW52b2tlIGBhZGRgIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSByZXR1cm5lZCBzaW5rLgogIENodW5rZWRDb252ZXJzaW9uU2luazxPYmplY3Q+IHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxTdHJpbmc+IHNpbmspIHsKICAgIGlmIChzaW5rIGlzIF9VdGY4RW5jb2RlclNpbmspIHsKICAgICAgcmV0dXJuIF9Kc29uVXRmOEVuY29kZXJTaW5rKAogICAgICAgICAgc2luay5fc2luaywKICAgICAgICAgIF90b0VuY29kYWJsZSwKICAgICAgICAgIEpzb25VdGY4RW5jb2Rlci5fdXRmOEVuY29kZShpbmRlbnQpLAogICAgICAgICAgSnNvblV0ZjhFbmNvZGVyLl9kZWZhdWx0QnVmZmVyU2l6ZSk7CiAgICB9CiAgICByZXR1cm4gX0pzb25FbmNvZGVyU2luaygKICAgICAgICBzaW5rIGlzIFN0cmluZ0NvbnZlcnNpb25TaW5rID8gc2luayA6IFN0cmluZ0NvbnZlcnNpb25TaW5rLmZyb20oc2luayksCiAgICAgICAgX3RvRW5jb2RhYmxlLAogICAgICAgIGluZGVudCk7CiAgfQoKICAvLyBPdmVycmlkZSB0aGUgYmFzZSBjbGFzcydzIGJpbmQsIHRvIHByb3ZpZGUgYSBiZXR0ZXIgdHlwZS4KICBTdHJlYW08U3RyaW5nPiBiaW5kKFN0cmVhbTxPYmplY3Q+IHN0cmVhbSkgPT4gc3VwZXIuYmluZChzdHJlYW0pOwoKICBDb252ZXJ0ZXI8T2JqZWN0LCBUPiBmdXNlPFQ+KENvbnZlcnRlcjxTdHJpbmcsIFQ+IG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMgVXRmOEVuY29kZXIgJiYgVCBpcyBMaXN0PGludD4pIHsKICAgICAgLy8gVGhlIGluc3RhbmNlIGNoZWNrIGd1YXJhbnRlZXMgdGhhdCBgVGAgaXMgKGEgc3VidHlwZSBvZikgTGlzdDxpbnQ+LAogICAgICAvLyBidXQgdGhlIHN0YXRpYyB0eXBlIHN5c3RlbSBkb2Vzbid0IGtub3cgdGhhdCwgYW5kIHNvIHdlIGNhc3QuCiAgICAgIC8vIENhc3QgdGhyb3VnaCBkeW5hbWljIHRvIGtlZXAgdGhlIGNhc3QgaW1wbGljaXQgZm9yIGJ1aWxkcyB1c2luZwogICAgICAvLyB1bmNoZWNrZWQgaW1wbGljaXQgY2FzdHMuCiAgICAgIHJldHVybiBKc29uVXRmOEVuY29kZXIoaW5kZW50LCBfdG9FbmNvZGFibGUpIGFzIGR5bmFtaWM7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuZnVzZTxUPihvdGhlcik7CiAgfQp9CgovLy8gRW5jb2RlciB0aGF0IGVuY29kZXMgYSBzaW5nbGUgb2JqZWN0IGFzIGEgVVRGLTggZW5jb2RlZCBKU09OIHN0cmluZy4KLy8vCi8vLyBUaGlzIGVuY29kZXIgd29ya3MgZXF1aXZhbGVudGx5IHRvIGZpcnN0IGNvbnZlcnRpbmcgdGhlIG9iamVjdCB0bwovLy8gYSBKU09OIHN0cmluZywgYW5kIHRoZW4gVVRGLTggZW5jb2RpbmcgdGhlIHN0cmluZywgYnV0IHdpdGhvdXQKLy8vIGNyZWF0aW5nIGFuIGludGVybWVkaWF0ZSBzdHJpbmcuCmNsYXNzIEpzb25VdGY4RW5jb2RlciBleHRlbmRzIENvbnZlcnRlcjxPYmplY3QsIExpc3Q8aW50Pj4gewogIC8vLyBEZWZhdWx0IGJ1ZmZlciBzaXplIHVzZWQgYnkgdGhlIEpTT04tdG8tVVRGLTggZW5jb2Rlci4KICBzdGF0aWMgY29uc3QgaW50IF9kZWZhdWx0QnVmZmVyU2l6ZSA9IDI1NjsKICBAZGVwcmVjYXRlZAogIHN0YXRpYyBjb25zdCBpbnQgREVGQVVMVF9CVUZGRVJfU0laRSA9IF9kZWZhdWx0QnVmZmVyU2l6ZTsKCiAgLy8vIEluZGVudGF0aW9uIHVzZWQgaW4gcHJldHR5LXByaW50IG1vZGUsIGBudWxsYCBpZiBub3QgcHJldHR5LgogIGZpbmFsIExpc3Q8aW50PiBfaW5kZW50OwoKICAvLy8gRnVuY3Rpb24gY2FsbGVkIHdpdGggZWFjaCB1bi1lbmNvZGFibGUgb2JqZWN0IGVuY291bnRlcmVkLgogIGZpbmFsIEZ1bmN0aW9uKGR5bmFtaWMpIF90b0VuY29kYWJsZTsKCiAgLy8vIFVURi04IGJ1ZmZlciBzaXplLgogIGZpbmFsIGludCBfYnVmZmVyU2l6ZTsKCiAgLy8vIENyZWF0ZSBjb252ZXJ0ZXIuCiAgLy8vCiAgLy8vIElmIFtpbmRlbnRdIGlzIG5vbi1gbnVsbGAsIHRoZSBjb252ZXJ0ZXIgYXR0ZW1wdHMgdG8gInByZXR0eS1wcmludCIgdGhlCiAgLy8vIEpTT04sIGFuZCB1c2VzIGBpbmRlbnRgIGFzIHRoZSBpbmRlbnRhdGlvbi4gT3RoZXJ3aXNlIHRoZSByZXN1bHQgaGFzIG5vCiAgLy8vIHdoaXRlc3BhY2Ugb3V0c2lkZSBvZiBzdHJpbmcgbGl0ZXJhbHMuCiAgLy8vIElmIGBpbmRlbnRgIGNvbnRhaW5zIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IHZhbGlkIEpTT04gd2hpdGVzcGFjZQogIC8vLyBjaGFyYWN0ZXJzLCB0aGUgcmVzdWx0IHdpbGwgbm90IGJlIHZhbGlkIEpTT04uIEpTT04gd2hpdGVzcGFjZSBjaGFyYWN0ZXJzCiAgLy8vIGFyZSBzcGFjZSAoVSswMDIwKSwgdGFiIChVKzAwMDkpLCBsaW5lIGZlZWQgKFUrMDAwYSkgYW5kIGNhcnJpYWdlIHJldHVybgogIC8vLyAoVSswMDBkKSAoW0VDTUEKICAvLy8gNDA0XShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvcHVibGljYXRpb25zL3N0YW5kYXJkcy9FY21hLTQwNC5odG0pKS4KICAvLy8KICAvLy8gVGhlIFtidWZmZXJTaXplXSBpcyB0aGUgc2l6ZSBvZiB0aGUgaW50ZXJuYWwgYnVmZmVycyB1c2VkIHRvIGNvbGxlY3QKICAvLy8gVVRGLTggY29kZSB1bml0cy4KICAvLy8gSWYgdXNpbmcgW3N0YXJ0Q2h1bmtlZENvbnZlcnNpb25dLCBpdCB3aWxsIGJlIHRoZSBzaXplIG9mIHRoZSBjaHVua3MuCiAgLy8vCiAgLy8vIFRoZSBKU09OIGVuY29kZXIgaGFuZGxlcyBudW1iZXJzLCBzdHJpbmdzLCBib29sZWFucywgbnVsbCwgbGlzdHMgYW5kIG1hcHMKICAvLy8gZGlyZWN0bHkuCiAgLy8vCiAgLy8vIEFueSBvdGhlciBvYmplY3QgaXMgYXR0ZW1wdGVkIGNvbnZlcnRlZCBieSBbdG9FbmNvZGFibGVdIHRvIGFuIG9iamVjdCB0aGF0CiAgLy8vIGlzIG9mIG9uZSBvZiB0aGUgY29udmVydGlibGUgdHlwZXMuCiAgLy8vCiAgLy8vIElmIFt0b0VuY29kYWJsZV0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gY2FsbGluZyBgLnRvSnNvbigpYCBvbiB0aGUKICAvLy8gb2JqZWN0LgogIEpzb25VdGY4RW5jb2RlcigKICAgICAgW1N0cmluZyBpbmRlbnQsIHRvRW5jb2RhYmxlKG9iamVjdCksIGludCBidWZmZXJTaXplID0gX2RlZmF1bHRCdWZmZXJTaXplXSkKICAgICAgOiBfaW5kZW50ID0gX3V0ZjhFbmNvZGUoaW5kZW50KSwKICAgICAgICBfdG9FbmNvZGFibGUgPSB0b0VuY29kYWJsZSwKICAgICAgICBfYnVmZmVyU2l6ZSA9IGJ1ZmZlclNpemU7CgogIHN0YXRpYyBMaXN0PGludD4gX3V0ZjhFbmNvZGUoU3RyaW5nIHN0cmluZykgewogICAgaWYgKHN0cmluZyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGlmIChzdHJpbmcuaXNFbXB0eSkgcmV0dXJuIFVpbnQ4TGlzdCgwKTsKICAgIGNoZWNrQXNjaWk6CiAgICB7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKHN0cmluZy5jb2RlVW5pdEF0KGkpID49IDB4ODApIGJyZWFrIGNoZWNrQXNjaWk7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0cmluZy5jb2RlVW5pdHM7CiAgICB9CiAgICByZXR1cm4gdXRmOC5lbmNvZGUoc3RyaW5nKTsKICB9CgogIC8vLyBDb252ZXJ0IFtvYmplY3RdIGludG8gVVRGLTggZW5jb2RlZCBKU09OLgogIExpc3Q8aW50PiBjb252ZXJ0KE9iamVjdCBvYmplY3QpIHsKICAgIHZhciBieXRlcyA9IDxMaXN0PGludD4+W107CiAgICAvLyBUaGUgYHN0cmluZ2lmeWAgZnVuY3Rpb24gYWx3YXlzIGNvbnZlcnRzIGludG8gY2h1bmtzLgogICAgLy8gQ29sbGVjdCB0aGUgY2h1bmtzIGludG8gdGhlIGBieXRlc2AgbGlzdCwgdGhlbiBjb21iaW5lIHRoZW0gYWZ0ZXJ3YXJkcy4KICAgIHZvaWQgYWRkQ2h1bmsoVWludDhMaXN0IGNodW5rLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgICAgaWYgKHN0YXJ0ID4gMCB8fCBlbmQgPCBjaHVuay5sZW5ndGgpIHsKICAgICAgICB2YXIgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICAgICAgY2h1bmsgPQogICAgICAgICAgICBVaW50OExpc3QudmlldyhjaHVuay5idWZmZXIsIGNodW5rLm9mZnNldEluQnl0ZXMgKyBzdGFydCwgbGVuZ3RoKTsKICAgICAgfQogICAgICBieXRlcy5hZGQoY2h1bmspOwogICAgfQoKICAgIF9Kc29uVXRmOFN0cmluZ2lmaWVyLnN0cmluZ2lmeSgKICAgICAgICBvYmplY3QsIF9pbmRlbnQsIF90b0VuY29kYWJsZSwgX2J1ZmZlclNpemUsIGFkZENodW5rKTsKICAgIGlmIChieXRlcy5sZW5ndGggPT0gMSkgcmV0dXJuIGJ5dGVzWzBdOwogICAgdmFyIGxlbmd0aCA9IDA7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGxlbmd0aCArPSBieXRlc1tpXS5sZW5ndGg7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gVWludDhMaXN0KGxlbmd0aCk7CiAgICBmb3IgKHZhciBpID0gMCwgb2Zmc2V0ID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBieXRlTGlzdCA9IGJ5dGVzW2ldOwogICAgICBpbnQgZW5kID0gb2Zmc2V0ICsgYnl0ZUxpc3QubGVuZ3RoOwogICAgICByZXN1bHQuc2V0UmFuZ2Uob2Zmc2V0LCBlbmQsIGJ5dGVMaXN0KTsKICAgICAgb2Zmc2V0ID0gZW5kOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBTdGFydCBhIGNodW5rZWQgY29udmVyc2lvbi4KICAvLy8KICAvLy8gT25seSBvbmUgb2JqZWN0IGNhbiBiZSBwYXNzZWQgaW50byB0aGUgcmV0dXJuZWQgc2luay4KICAvLy8KICAvLy8gVGhlIGFyZ3VtZW50IFtzaW5rXSB3aWxsIHJlY2VpdmUgYnl0ZSBsaXN0cyBpbiBzaXplcyBkZXBlbmRpbmcgb24gdGhlCiAgLy8vIGBidWZmZXJTaXplYCBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yIHdoZW4gY3JlYXRpbmcgdGhpcyBlbmNvZGVyLgogIENodW5rZWRDb252ZXJzaW9uU2luazxPYmplY3Q+IHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxMaXN0PGludD4+IHNpbmspIHsKICAgIEJ5dGVDb252ZXJzaW9uU2luayBieXRlU2luazsKICAgIGlmIChzaW5rIGlzIEJ5dGVDb252ZXJzaW9uU2luaykgewogICAgICBieXRlU2luayA9IHNpbms7CiAgICB9IGVsc2UgewogICAgICBieXRlU2luayA9IEJ5dGVDb252ZXJzaW9uU2luay5mcm9tKHNpbmspOwogICAgfQogICAgcmV0dXJuIF9Kc29uVXRmOEVuY29kZXJTaW5rKGJ5dGVTaW5rLCBfdG9FbmNvZGFibGUsIF9pbmRlbnQsIF9idWZmZXJTaXplKTsKICB9CgogIC8vIE92ZXJyaWRlIHRoZSBiYXNlIGNsYXNzJ3MgYmluZCwgdG8gcHJvdmlkZSBhIGJldHRlciB0eXBlLgogIFN0cmVhbTxMaXN0PGludD4+IGJpbmQoU3RyZWFtPE9iamVjdD4gc3RyZWFtKSB7CiAgICByZXR1cm4gc3VwZXIuYmluZChzdHJlYW0pOwogIH0KfQoKLy8vIEltcGxlbWVudHMgdGhlIGNodW5rZWQgY29udmVyc2lvbiBmcm9tIG9iamVjdCB0byBpdHMgSlNPTiByZXByZXNlbnRhdGlvbi4KLy8vCi8vLyBUaGUgc2luayBvbmx5IGFjY2VwdHMgb25lIHZhbHVlLCBidXQgd2lsbCBwcm9kdWNlIG91dHB1dCBpbiBhIGNodW5rZWQgd2F5LgpjbGFzcyBfSnNvbkVuY29kZXJTaW5rIGV4dGVuZHMgQ2h1bmtlZENvbnZlcnNpb25TaW5rPE9iamVjdD4gewogIGZpbmFsIFN0cmluZyBfaW5kZW50OwogIGZpbmFsIEZ1bmN0aW9uKGR5bmFtaWMpIF90b0VuY29kYWJsZTsKICBmaW5hbCBTdHJpbmdDb252ZXJzaW9uU2luayBfc2luazsKICBib29sIF9pc0RvbmUgPSBmYWxzZTsKCiAgX0pzb25FbmNvZGVyU2luayh0aGlzLl9zaW5rLCB0aGlzLl90b0VuY29kYWJsZSwgdGhpcy5faW5kZW50KTsKCiAgLy8vIEVuY29kZXMgdGhlIGdpdmVuIG9iamVjdCBbb10uCiAgLy8vCiAgLy8vIEl0IGlzIGFuIGVycm9yIHRvIGludm9rZSB0aGlzIG1ldGhvZCBtb3JlIHRoYW4gb25jZSBvbiBhbnkgaW5zdGFuY2UuIFdoaWxlCiAgLy8vIHRoaXMgbWFrZXMgdGhlIGlucHV0IGVmZmVjdGl2ZWx5IG5vbi1jaHVua2VkIHRoZSBvdXRwdXQgd2lsbCBiZSBnZW5lcmF0ZWQKICAvLy8gaW4gYSBjaHVua2VkIHdheS4KICB2b2lkIGFkZChPYmplY3QgbykgewogICAgaWYgKF9pc0RvbmUpIHsKICAgICAgdGhyb3cgU3RhdGVFcnJvcigiT25seSBvbmUgY2FsbCB0byBhZGQgYWxsb3dlZCIpOwogICAgfQogICAgX2lzRG9uZSA9IHRydWU7CiAgICB2YXIgc3RyaW5nU2luayA9IF9zaW5rLmFzU3RyaW5nU2luaygpOwogICAgX0pzb25TdHJpbmdTdHJpbmdpZmllci5wcmludE9uKG8sIHN0cmluZ1NpbmssIF90b0VuY29kYWJsZSwgX2luZGVudCk7CiAgICBzdHJpbmdTaW5rLmNsb3NlKCk7CiAgfQoKICB2b2lkIGNsb3NlKCkgey8qIGRvIG5vdGhpbmcgKi99Cn0KCi8vLyBTaW5rIHJldHVybmVkIHdoZW4gc3RhcnRpbmcgYSBjaHVua2VkIGNvbnZlcnNpb24gZnJvbSBvYmplY3QgdG8gYnl0ZXMuCmNsYXNzIF9Kc29uVXRmOEVuY29kZXJTaW5rIGV4dGVuZHMgQ2h1bmtlZENvbnZlcnNpb25TaW5rPE9iamVjdD4gewogIC8vLyBUaGUgYnl0ZSBzaW5rIHJlY2VpdmVpbmcgdGhlIGVuY29kZWQgY2h1bmtzLgogIGZpbmFsIEJ5dGVDb252ZXJzaW9uU2luayBfc2luazsKICBmaW5hbCBMaXN0PGludD4gX2luZGVudDsKICBmaW5hbCBGdW5jdGlvbihkeW5hbWljKSBfdG9FbmNvZGFibGU7CiAgZmluYWwgaW50IF9idWZmZXJTaXplOwogIGJvb2wgX2lzRG9uZSA9IGZhbHNlOwogIF9Kc29uVXRmOEVuY29kZXJTaW5rKAogICAgICB0aGlzLl9zaW5rLCB0aGlzLl90b0VuY29kYWJsZSwgdGhpcy5faW5kZW50LCB0aGlzLl9idWZmZXJTaXplKTsKCiAgLy8vIENhbGxiYWNrIGNhbGxlZCBmb3IgZWFjaCBzbGljZSBvZiByZXN1bHQgYnl0ZXMuCiAgdm9pZCBfYWRkQ2h1bmsoVWludDhMaXN0IGNodW5rLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIF9zaW5rLmFkZFNsaWNlKGNodW5rLCBzdGFydCwgZW5kLCBmYWxzZSk7CiAgfQoKICB2b2lkIGFkZChPYmplY3Qgb2JqZWN0KSB7CiAgICBpZiAoX2lzRG9uZSkgewogICAgICB0aHJvdyBTdGF0ZUVycm9yKCJPbmx5IG9uZSBjYWxsIHRvIGFkZCBhbGxvd2VkIik7CiAgICB9CiAgICBfaXNEb25lID0gdHJ1ZTsKICAgIF9Kc29uVXRmOFN0cmluZ2lmaWVyLnN0cmluZ2lmeSgKICAgICAgICBvYmplY3QsIF9pbmRlbnQsIF90b0VuY29kYWJsZSwgX2J1ZmZlclNpemUsIF9hZGRDaHVuayk7CiAgICBfc2luay5jbG9zZSgpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIGlmICghX2lzRG9uZSkgewogICAgICBfaXNEb25lID0gdHJ1ZTsKICAgICAgX3NpbmsuY2xvc2UoKTsKICAgIH0KICB9Cn0KCi8vLyBUaGlzIGNsYXNzIHBhcnNlcyBKU09OIHN0cmluZ3MgYW5kIGJ1aWxkcyB0aGUgY29ycmVzcG9uZGluZyBvYmplY3RzLgpjbGFzcyBKc29uRGVjb2RlciBleHRlbmRzIENvbnZlcnRlcjxTdHJpbmcsIE9iamVjdD4gewogIGZpbmFsIEZ1bmN0aW9uKE9iamVjdCBrZXksIE9iamVjdCB2YWx1ZSkgX3Jldml2ZXI7CgogIC8vLyBDb25zdHJ1Y3RzIGEgbmV3IEpzb25EZWNvZGVyLgogIC8vLwogIC8vLyBUaGUgW3Jldml2ZXJdIG1heSBiZSBgbnVsbGAuCiAgY29uc3QgSnNvbkRlY29kZXIoW3Jldml2ZXIoT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKV0pIDogX3Jldml2ZXIgPSByZXZpdmVyOwoKICAvLy8gQ29udmVydHMgdGhlIGdpdmVuIEpTT04tc3RyaW5nIFtpbnB1dF0gdG8gaXRzIGNvcnJlc3BvbmRpbmcgb2JqZWN0LgogIC8vLwogIC8vLyBQYXJzZWQgSlNPTiB2YWx1ZXMgYXJlIG9mIHRoZSB0eXBlcyBbbnVtXSwgW1N0cmluZ10sIFtib29sXSwgW051bGxdLAogIC8vLyBbTGlzdF1zIG9mIHBhcnNlZCBKU09OIHZhbHVlcyBvciBbTWFwXXMgZnJvbSBbU3RyaW5nXSB0byBwYXJzZWQgSlNPTgogIC8vLyB2YWx1ZXMuCiAgLy8vCiAgLy8vIElmIGB0aGlzYCB3YXMgaW5pdGlhbGl6ZWQgd2l0aCBhIHJldml2ZXIsIHRoZW4gdGhlIHBhcnNpbmcgb3BlcmF0aW9uCiAgLy8vIGludm9rZXMgdGhlIHJldml2ZXIgb24gZXZlcnkgb2JqZWN0IG9yIGxpc3QgcHJvcGVydHkgdGhhdCBoYXMgYmVlbiBwYXJzZWQuCiAgLy8vIFRoZSBhcmd1bWVudHMgYXJlIHRoZSBwcm9wZXJ0eSBuYW1lIChbU3RyaW5nXSkgb3IgbGlzdCBpbmRleCAoW2ludF0pLCBhbmQKICAvLy8gdGhlIHZhbHVlIGlzIHRoZSBwYXJzZWQgdmFsdWUuIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHJldml2ZXIgaXMgdXNlZCBhcwogIC8vLyB0aGUgdmFsdWUgb2YgdGhhdCBwcm9wZXJ0eSBpbnN0ZWFkIHRoZSBwYXJzZWQgdmFsdWUuCiAgLy8vCiAgLy8vIFRocm93cyBbRm9ybWF0RXhjZXB0aW9uXSBpZiB0aGUgaW5wdXQgaXMgbm90IHZhbGlkIEpTT04gdGV4dC4KICBkeW5hbWljIGNvbnZlcnQoU3RyaW5nIGlucHV0KSA9PiBfcGFyc2VKc29uKGlucHV0LCBfcmV2aXZlcik7CgogIC8vLyBTdGFydHMgYSBjb252ZXJzaW9uIGZyb20gYSBjaHVua2VkIEpTT04gc3RyaW5nIHRvIGl0cyBjb3JyZXNwb25kaW5nIG9iamVjdC4KICAvLy8KICAvLy8gVGhlIG91dHB1dCBbc2lua10gcmVjZWl2ZXMgZXhhY3RseSBvbmUgZGVjb2RlZCBlbGVtZW50IHRocm91Z2ggYGFkZGAuCiAgZXh0ZXJuYWwgU3RyaW5nQ29udmVyc2lvblNpbmsgc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPE9iamVjdD4gc2luayk7CgogIC8vIE92ZXJyaWRlIHRoZSBiYXNlIGNsYXNzJ3MgYmluZCwgdG8gcHJvdmlkZSBhIGJldHRlciB0eXBlLgogIFN0cmVhbTxPYmplY3Q+IGJpbmQoU3RyZWFtPFN0cmluZz4gc3RyZWFtKSA9PiBzdXBlci5iaW5kKHN0cmVhbSk7Cn0KCi8vIEludGVybmFsIG9wdGltaXplZCBKU09OIHBhcnNpbmcgaW1wbGVtZW50YXRpb24uCmV4dGVybmFsIF9wYXJzZUpzb24oU3RyaW5nIHNvdXJjZSwgcmV2aXZlcihrZXksIHZhbHVlKSk7CgovLyBJbXBsZW1lbnRhdGlvbiBvZiBlbmNvZGVyL3N0cmluZ2lmaWVyLgoKZHluYW1pYyBfZGVmYXVsdFRvRW5jb2RhYmxlKGR5bmFtaWMgb2JqZWN0KSA9PiBvYmplY3QudG9Kc29uKCk7CgovLy8gSlNPTiBlbmNvZGVyIHRoYXQgdHJhdmVyc2VzIGFuIG9iamVjdCBzdHJ1Y3R1cmUgYW5kIHdyaXRlcyBKU09OIHNvdXJjZS4KLy8vCi8vLyBUaGlzIGlzIGFuIGFic3RyYWN0IGltcGxlbWVudGF0aW9uIHRoYXQgZG9lc24ndCBkZWNpZGUgb24gdGhlIG91dHB1dAovLy8gZm9ybWF0LCBidXQgd3JpdGVzIHRoZSBKU09OIHRocm91Z2ggYWJzdHJhY3QgbWV0aG9kcyBsaWtlIFt3cml0ZVN0cmluZ10uCmFic3RyYWN0IGNsYXNzIF9Kc29uU3RyaW5naWZpZXIgewogIC8vIENoYXJhY3RlciBjb2RlIGNvbnN0YW50cy4KICBzdGF0aWMgY29uc3QgaW50IGJhY2tzcGFjZSA9IDB4MDg7CiAgc3RhdGljIGNvbnN0IGludCB0YWIgPSAweDA5OwogIHN0YXRpYyBjb25zdCBpbnQgbmV3bGluZSA9IDB4MGE7CiAgc3RhdGljIGNvbnN0IGludCBjYXJyaWFnZVJldHVybiA9IDB4MGQ7CiAgc3RhdGljIGNvbnN0IGludCBmb3JtRmVlZCA9IDB4MGM7CiAgc3RhdGljIGNvbnN0IGludCBxdW90ZSA9IDB4MjI7CiAgc3RhdGljIGNvbnN0IGludCBjaGFyXzAgPSAweDMwOwogIHN0YXRpYyBjb25zdCBpbnQgYmFja3NsYXNoID0gMHg1YzsKICBzdGF0aWMgY29uc3QgaW50IGNoYXJfYiA9IDB4NjI7CiAgc3RhdGljIGNvbnN0IGludCBjaGFyX2YgPSAweDY2OwogIHN0YXRpYyBjb25zdCBpbnQgY2hhcl9uID0gMHg2ZTsKICBzdGF0aWMgY29uc3QgaW50IGNoYXJfciA9IDB4NzI7CiAgc3RhdGljIGNvbnN0IGludCBjaGFyX3QgPSAweDc0OwogIHN0YXRpYyBjb25zdCBpbnQgY2hhcl91ID0gMHg3NTsKCiAgLy8vIExpc3Qgb2Ygb2JqZWN0cyBjdXJyZW50bHkgYmVpbmcgdHJhdmVyc2VkLiBVc2VkIHRvIGRldGVjdCBjeWNsZXMuCiAgZmluYWwgTGlzdCBfc2VlbiA9IFtdOwoKICAvLy8gRnVuY3Rpb24gY2FsbGVkIGZvciBlYWNoIHVuLWVuY29kYWJsZSBvYmplY3QgZW5jb3VudGVyZWQuCiAgZmluYWwgRnVuY3Rpb24oZHluYW1pYykgX3RvRW5jb2RhYmxlOwoKICBfSnNvblN0cmluZ2lmaWVyKHRvRW5jb2RhYmxlKG8pKQogICAgICA6IF90b0VuY29kYWJsZSA9IHRvRW5jb2RhYmxlID8/IF9kZWZhdWx0VG9FbmNvZGFibGU7CgogIFN0cmluZyBnZXQgX3BhcnRpYWxSZXN1bHQ7CgogIC8vLyBBcHBlbmQgYSBzdHJpbmcgdG8gdGhlIEpTT04gb3V0cHV0LgogIHZvaWQgd3JpdGVTdHJpbmcoU3RyaW5nIGNoYXJhY3RlcnMpOwoKICAvLy8gQXBwZW5kIHBhcnQgb2YgYSBzdHJpbmcgdG8gdGhlIEpTT04gb3V0cHV0LgogIHZvaWQgd3JpdGVTdHJpbmdTbGljZShTdHJpbmcgY2hhcmFjdGVycywgaW50IHN0YXJ0LCBpbnQgZW5kKTsKCiAgLy8vIEFwcGVuZCBhIHNpbmdsZSBjaGFyYWN0ZXIsIGdpdmVuIGJ5IGl0cyBjb2RlIHBvaW50LCB0byB0aGUgSlNPTiBvdXRwdXQuCiAgdm9pZCB3cml0ZUNoYXJDb2RlKGludCBjaGFyQ29kZSk7CgogIC8vLyBXcml0ZSBhIG51bWJlciB0byB0aGUgSlNPTiBvdXRwdXQuCiAgdm9pZCB3cml0ZU51bWJlcihudW0gbnVtYmVyKTsKCiAgLy8gKCcwJyArIHgpIG9yICgnYScgKyB4IC0gMTApCiAgc3RhdGljIGludCBoZXhEaWdpdChpbnQgeCkgPT4geCA8IDEwID8gNDggKyB4IDogODcgKyB4OwoKICAvLy8gV3JpdGUsIGFuZCBzdWl0YWJseSBlc2NhcGUsIGEgc3RyaW5nJ3MgY29udGVudCBhcyBhIEpTT04gc3RyaW5nIGxpdGVyYWwuCiAgdm9pZCB3cml0ZVN0cmluZ0NvbnRlbnQoU3RyaW5nIHMpIHsKICAgIHZhciBvZmZzZXQgPSAwOwogICAgZmluYWwgbGVuZ3RoID0gcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBjaGFyQ29kZSA9IHMuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGNoYXJDb2RlID4gYmFja3NsYXNoKSBjb250aW51ZTsKICAgICAgaWYgKGNoYXJDb2RlIDwgMzIpIHsKICAgICAgICBpZiAoaSA+IG9mZnNldCkgd3JpdGVTdHJpbmdTbGljZShzLCBvZmZzZXQsIGkpOwogICAgICAgIG9mZnNldCA9IGkgKyAxOwogICAgICAgIHdyaXRlQ2hhckNvZGUoYmFja3NsYXNoKTsKICAgICAgICBzd2l0Y2ggKGNoYXJDb2RlKSB7CiAgICAgICAgICBjYXNlIGJhY2tzcGFjZToKICAgICAgICAgICAgd3JpdGVDaGFyQ29kZShjaGFyX2IpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgdGFiOgogICAgICAgICAgICB3cml0ZUNoYXJDb2RlKGNoYXJfdCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBuZXdsaW5lOgogICAgICAgICAgICB3cml0ZUNoYXJDb2RlKGNoYXJfbik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBmb3JtRmVlZDoKICAgICAgICAgICAgd3JpdGVDaGFyQ29kZShjaGFyX2YpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgY2FycmlhZ2VSZXR1cm46CiAgICAgICAgICAgIHdyaXRlQ2hhckNvZGUoY2hhcl9yKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB3cml0ZUNoYXJDb2RlKGNoYXJfdSk7CiAgICAgICAgICAgIHdyaXRlQ2hhckNvZGUoY2hhcl8wKTsKICAgICAgICAgICAgd3JpdGVDaGFyQ29kZShjaGFyXzApOwogICAgICAgICAgICB3cml0ZUNoYXJDb2RlKGhleERpZ2l0KChjaGFyQ29kZSA+PiA0KSAmIDB4ZikpOwogICAgICAgICAgICB3cml0ZUNoYXJDb2RlKGhleERpZ2l0KGNoYXJDb2RlICYgMHhmKSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChjaGFyQ29kZSA9PSBxdW90ZSB8fCBjaGFyQ29kZSA9PSBiYWNrc2xhc2gpIHsKICAgICAgICBpZiAoaSA+IG9mZnNldCkgd3JpdGVTdHJpbmdTbGljZShzLCBvZmZzZXQsIGkpOwogICAgICAgIG9mZnNldCA9IGkgKyAxOwogICAgICAgIHdyaXRlQ2hhckNvZGUoYmFja3NsYXNoKTsKICAgICAgICB3cml0ZUNoYXJDb2RlKGNoYXJDb2RlKTsKICAgICAgfQogICAgfQogICAgaWYgKG9mZnNldCA9PSAwKSB7CiAgICAgIHdyaXRlU3RyaW5nKHMpOwogICAgfSBlbHNlIGlmIChvZmZzZXQgPCBsZW5ndGgpIHsKICAgICAgd3JpdGVTdHJpbmdTbGljZShzLCBvZmZzZXQsIGxlbmd0aCk7CiAgICB9CiAgfQoKICAvLy8gQ2hlY2sgaWYgYW4gZW5jb3VudGVyZWQgb2JqZWN0IGlzIGFscmVhZHkgYmVpbmcgdHJhdmVyc2VkLgogIC8vLwogIC8vLyBSZWNvcmRzIHRoZSBvYmplY3QgaWYgaXQgaXNuJ3QgYWxyZWFkeSBzZWVuLiBTaG91bGQgaGF2ZSBhIG1hdGNoaW5nIGNhbGwgdG8KICAvLy8gW19yZW1vdmVTZWVuXSB3aGVuIHRoZSBvYmplY3QgaXMgbm8gbG9uZ2VyIGJlaW5nIHRyYXZlcnNlZC4KICB2b2lkIF9jaGVja0N5Y2xlKG9iamVjdCkgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfc2Vlbi5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaWRlbnRpY2FsKG9iamVjdCwgX3NlZW5baV0pKSB7CiAgICAgICAgdGhyb3cgSnNvbkN5Y2xpY0Vycm9yKG9iamVjdCk7CiAgICAgIH0KICAgIH0KICAgIF9zZWVuLmFkZChvYmplY3QpOwogIH0KCiAgLy8vIFJlbW92ZSBbb2JqZWN0XSBmcm9tIHRoZSBsaXN0IG9mIGN1cnJlbnRseSB0cmF2ZXJzZWQgb2JqZWN0cy4KICAvLy8KICAvLy8gU2hvdWxkIGJlIGNhbGxlZCBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIgb2YgdGhlIG1hdGNoaW5nIFtfY2hlY2tDeWNsZV0KICAvLy8gY2FsbHMuCiAgdm9pZCBfcmVtb3ZlU2VlbihvYmplY3QpIHsKICAgIGFzc2VydChfc2Vlbi5pc05vdEVtcHR5KTsKICAgIGFzc2VydChpZGVudGljYWwoX3NlZW4ubGFzdCwgb2JqZWN0KSk7CiAgICBfc2Vlbi5yZW1vdmVMYXN0KCk7CiAgfQoKICAvLy8gV3JpdGUgYW4gb2JqZWN0LgogIC8vLwogIC8vLyBJZiBbb2JqZWN0XSBpc24ndCBkaXJlY3RseSBlbmNvZGFibGUsIHRoZSBbX3RvRW5jb2RhYmxlXSBmdW5jdGlvbiBnZXRzIG9uZQogIC8vLyBjaGFuY2UgdG8gcmV0dXJuIGEgcmVwbGFjZW1lbnQgd2hpY2ggaXMgZW5jb2RhYmxlLgogIHZvaWQgd3JpdGVPYmplY3Qob2JqZWN0KSB7CiAgICAvLyBUcmllcyBzdHJpbmdpZnlpbmcgb2JqZWN0IGRpcmVjdGx5LiBJZiBpdCdzIG5vdCBhIHNpbXBsZSB2YWx1ZSwgTGlzdCBvcgogICAgLy8gTWFwLCBjYWxsIHRvSnNvbigpIHRvIGdldCBhIGN1c3RvbSByZXByZXNlbnRhdGlvbiBhbmQgdHJ5IHNlcmlhbGl6aW5nCiAgICAvLyB0aGF0LgogICAgaWYgKHdyaXRlSnNvblZhbHVlKG9iamVjdCkpIHJldHVybjsKICAgIF9jaGVja0N5Y2xlKG9iamVjdCk7CiAgICB0cnkgewogICAgICB2YXIgY3VzdG9tSnNvbiA9IF90b0VuY29kYWJsZShvYmplY3QpOwogICAgICBpZiAoIXdyaXRlSnNvblZhbHVlKGN1c3RvbUpzb24pKSB7CiAgICAgICAgdGhyb3cgSnNvblVuc3VwcG9ydGVkT2JqZWN0RXJyb3Iob2JqZWN0LCBwYXJ0aWFsUmVzdWx0OiBfcGFydGlhbFJlc3VsdCk7CiAgICAgIH0KICAgICAgX3JlbW92ZVNlZW4ob2JqZWN0KTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgdGhyb3cgSnNvblVuc3VwcG9ydGVkT2JqZWN0RXJyb3Iob2JqZWN0LAogICAgICAgICAgY2F1c2U6IGUsIHBhcnRpYWxSZXN1bHQ6IF9wYXJ0aWFsUmVzdWx0KTsKICAgIH0KICB9CgogIC8vLyBTZXJpYWxpemUgYSBbbnVtXSwgW1N0cmluZ10sIFtib29sXSwgW051bGxdLCBbTGlzdF0gb3IgW01hcF0gdmFsdWUuCiAgLy8vCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgb25lIG9mIHRoZXNlIHR5cGVzLCBhbmQgZmFsc2UgaWYgbm90LgogIC8vLyBJZiBhIHZhbHVlIGlzIGJvdGggYSBbTGlzdF0gYW5kIGEgW01hcF0sIGl0J3Mgc2VyaWFsaXplZCBhcyBhIFtMaXN0XS4KICBib29sIHdyaXRlSnNvblZhbHVlKG9iamVjdCkgewogICAgaWYgKG9iamVjdCBpcyBudW0pIHsKICAgICAgaWYgKCFvYmplY3QuaXNGaW5pdGUpIHJldHVybiBmYWxzZTsKICAgICAgd3JpdGVOdW1iZXIob2JqZWN0KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbChvYmplY3QsIHRydWUpKSB7CiAgICAgIHdyaXRlU3RyaW5nKCd0cnVlJyk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwob2JqZWN0LCBmYWxzZSkpIHsKICAgICAgd3JpdGVTdHJpbmcoJ2ZhbHNlJyk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIGlmIChvYmplY3QgPT0gbnVsbCkgewogICAgICB3cml0ZVN0cmluZygnbnVsbCcpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSBpZiAob2JqZWN0IGlzIFN0cmluZykgewogICAgICB3cml0ZVN0cmluZygnIicpOwogICAgICB3cml0ZVN0cmluZ0NvbnRlbnQob2JqZWN0KTsKICAgICAgd3JpdGVTdHJpbmcoJyInKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgaWYgKG9iamVjdCBpcyBMaXN0KSB7CiAgICAgIF9jaGVja0N5Y2xlKG9iamVjdCk7CiAgICAgIHdyaXRlTGlzdChvYmplY3QpOwogICAgICBfcmVtb3ZlU2VlbihvYmplY3QpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSBpZiAob2JqZWN0IGlzIE1hcCkgewogICAgICBfY2hlY2tDeWNsZShvYmplY3QpOwogICAgICAvLyB3cml0ZU1hcCBjYW4gZmFpbCBpZiBrZXlzIGFyZSBub3QgYWxsIHN0cmluZ3MuCiAgICAgIHZhciBzdWNjZXNzID0gd3JpdGVNYXAob2JqZWN0KTsKICAgICAgX3JlbW92ZVNlZW4ob2JqZWN0KTsKICAgICAgcmV0dXJuIHN1Y2Nlc3M7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQoKICAvLy8gU2VyaWFsaXplIGEgW0xpc3RdLgogIHZvaWQgd3JpdGVMaXN0KExpc3QgbGlzdCkgewogICAgd3JpdGVTdHJpbmcoJ1snKTsKICAgIGlmIChsaXN0LmlzTm90RW1wdHkpIHsKICAgICAgd3JpdGVPYmplY3QobGlzdFswXSk7CiAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgewogICAgICAgIHdyaXRlU3RyaW5nKCcsJyk7CiAgICAgICAgd3JpdGVPYmplY3QobGlzdFtpXSk7CiAgICAgIH0KICAgIH0KICAgIHdyaXRlU3RyaW5nKCddJyk7CiAgfQoKICAvLy8gU2VyaWFsaXplIGEgW01hcF0uCiAgYm9vbCB3cml0ZU1hcChNYXAgbWFwKSB7CiAgICBpZiAobWFwLmlzRW1wdHkpIHsKICAgICAgd3JpdGVTdHJpbmcoInt9Iik7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgdmFyIGtleVZhbHVlTGlzdCA9IExpc3QobWFwLmxlbmd0aCAqIDIpOwogICAgdmFyIGkgPSAwOwogICAgdmFyIGFsbFN0cmluZ0tleXMgPSB0cnVlOwogICAgbWFwLmZvckVhY2goKGtleSwgdmFsdWUpIHsKICAgICAgaWYgKGtleSBpcyEgU3RyaW5nKSB7CiAgICAgICAgYWxsU3RyaW5nS2V5cyA9IGZhbHNlOwogICAgICB9CiAgICAgIGtleVZhbHVlTGlzdFtpKytdID0ga2V5OwogICAgICBrZXlWYWx1ZUxpc3RbaSsrXSA9IHZhbHVlOwogICAgfSk7CiAgICBpZiAoIWFsbFN0cmluZ0tleXMpIHJldHVybiBmYWxzZTsKICAgIHdyaXRlU3RyaW5nKCd7Jyk7CiAgICB2YXIgc2VwYXJhdG9yID0gJyInOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlWYWx1ZUxpc3QubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgd3JpdGVTdHJpbmcoc2VwYXJhdG9yKTsKICAgICAgc2VwYXJhdG9yID0gJywiJzsKICAgICAgd3JpdGVTdHJpbmdDb250ZW50KGtleVZhbHVlTGlzdFtpXSk7CiAgICAgIHdyaXRlU3RyaW5nKCciOicpOwogICAgICB3cml0ZU9iamVjdChrZXlWYWx1ZUxpc3RbaSArIDFdKTsKICAgIH0KICAgIHdyaXRlU3RyaW5nKCd9Jyk7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCi8vLyBBIG1vZGlmaWNhdGlvbiBvZiBbX0pzb25TdHJpbmdpZmllcl0gd2hpY2ggaW5kZW50cyB0aGUgY29udGVudHMgb2YgW0xpc3RdIGFuZAovLy8gW01hcF0gb2JqZWN0cyB1c2luZyB0aGUgc3BlY2lmaWVkIGluZGVudCB2YWx1ZS4KLy8vCi8vLyBTdWJjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQgW3dyaXRlSW5kZW50YXRpb25dLgphYnN0cmFjdCBjbGFzcyBfSnNvblByZXR0eVByaW50TWl4aW4gaW1wbGVtZW50cyBfSnNvblN0cmluZ2lmaWVyIHsKICBpbnQgX2luZGVudExldmVsID0gMDsKCiAgLy8vIEFkZCBbaW5kZW50TGV2ZWxdIGluZGVudGF0aW9ucyB0byB0aGUgSlNPTiBvdXRwdXQuCiAgdm9pZCB3cml0ZUluZGVudGF0aW9uKGludCBpbmRlbnRMZXZlbCk7CgogIHZvaWQgd3JpdGVMaXN0KExpc3QgbGlzdCkgewogICAgaWYgKGxpc3QuaXNFbXB0eSkgewogICAgICB3cml0ZVN0cmluZygnW10nKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlU3RyaW5nKCdbXG4nKTsKICAgICAgX2luZGVudExldmVsKys7CiAgICAgIHdyaXRlSW5kZW50YXRpb24oX2luZGVudExldmVsKTsKICAgICAgd3JpdGVPYmplY3QobGlzdFswXSk7CiAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgewogICAgICAgIHdyaXRlU3RyaW5nKCcsXG4nKTsKICAgICAgICB3cml0ZUluZGVudGF0aW9uKF9pbmRlbnRMZXZlbCk7CiAgICAgICAgd3JpdGVPYmplY3QobGlzdFtpXSk7CiAgICAgIH0KICAgICAgd3JpdGVTdHJpbmcoJ1xuJyk7CiAgICAgIF9pbmRlbnRMZXZlbC0tOwogICAgICB3cml0ZUluZGVudGF0aW9uKF9pbmRlbnRMZXZlbCk7CiAgICAgIHdyaXRlU3RyaW5nKCddJyk7CiAgICB9CiAgfQoKICBib29sIHdyaXRlTWFwKE1hcCBtYXApIHsKICAgIGlmIChtYXAuaXNFbXB0eSkgewogICAgICB3cml0ZVN0cmluZygie30iKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICB2YXIga2V5VmFsdWVMaXN0ID0gTGlzdChtYXAubGVuZ3RoICogMik7CiAgICB2YXIgaSA9IDA7CiAgICB2YXIgYWxsU3RyaW5nS2V5cyA9IHRydWU7CiAgICBtYXAuZm9yRWFjaCgoa2V5LCB2YWx1ZSkgewogICAgICBpZiAoa2V5IGlzISBTdHJpbmcpIHsKICAgICAgICBhbGxTdHJpbmdLZXlzID0gZmFsc2U7CiAgICAgIH0KICAgICAga2V5VmFsdWVMaXN0W2krK10gPSBrZXk7CiAgICAgIGtleVZhbHVlTGlzdFtpKytdID0gdmFsdWU7CiAgICB9KTsKICAgIGlmICghYWxsU3RyaW5nS2V5cykgcmV0dXJuIGZhbHNlOwogICAgd3JpdGVTdHJpbmcoJ3tcbicpOwogICAgX2luZGVudExldmVsKys7CiAgICB2YXIgc2VwYXJhdG9yID0gIiI7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleVZhbHVlTGlzdC5sZW5ndGg7IGkgKz0gMikgewogICAgICB3cml0ZVN0cmluZyhzZXBhcmF0b3IpOwogICAgICBzZXBhcmF0b3IgPSAiLFxuIjsKICAgICAgd3JpdGVJbmRlbnRhdGlvbihfaW5kZW50TGV2ZWwpOwogICAgICB3cml0ZVN0cmluZygnIicpOwogICAgICB3cml0ZVN0cmluZ0NvbnRlbnQoa2V5VmFsdWVMaXN0W2ldKTsKICAgICAgd3JpdGVTdHJpbmcoJyI6ICcpOwogICAgICB3cml0ZU9iamVjdChrZXlWYWx1ZUxpc3RbaSArIDFdKTsKICAgIH0KICAgIHdyaXRlU3RyaW5nKCdcbicpOwogICAgX2luZGVudExldmVsLS07CiAgICB3cml0ZUluZGVudGF0aW9uKF9pbmRlbnRMZXZlbCk7CiAgICB3cml0ZVN0cmluZygnfScpOwogICAgcmV0dXJuIHRydWU7CiAgfQp9CgovLy8gQSBzcGVjaWFsaXphdGlvbiBvZiBbX0pzb25TdHJpbmdpZmllcl0gdGhhdCB3cml0ZXMgaXRzIEpTT04gdG8gYSBzdHJpbmcuCmNsYXNzIF9Kc29uU3RyaW5nU3RyaW5naWZpZXIgZXh0ZW5kcyBfSnNvblN0cmluZ2lmaWVyIHsKICBmaW5hbCBTdHJpbmdTaW5rIF9zaW5rOwoKICBfSnNvblN0cmluZ1N0cmluZ2lmaWVyKHRoaXMuX3NpbmssIGR5bmFtaWMgRnVuY3Rpb24oZHluYW1pYykgX3RvRW5jb2RhYmxlKQogICAgICA6IHN1cGVyKF90b0VuY29kYWJsZSk7CgogIC8vLyBDb252ZXJ0IG9iamVjdCB0byBhIHN0cmluZy4KICAvLy8KICAvLy8gVGhlIFt0b0VuY29kYWJsZV0gZnVuY3Rpb24gaXMgdXNlZCB0byBjb252ZXJ0IG5vbi1lbmNvZGFibGUgb2JqZWN0cwogIC8vLyB0byBlbmNvZGFibGUgb25lcy4KICAvLy8KICAvLy8gSWYgW2luZGVudF0gaXMgbm90IGBudWxsYCwgdGhlIHJlc3VsdGluZyBKU09OIHdpbGwgYmUgInByZXR0eS1wcmludGVkIgogIC8vLyB3aXRoIG5ld2xpbmVzIGFuZCBpbmRlbnRhdGlvbi4gVGhlIGBpbmRlbnRgIHN0cmluZyBpcyBhZGRlZCBhcyBpbmRlbnRhdGlvbgogIC8vLyBmb3IgZWFjaCBpbmRlbnRhdGlvbiBsZXZlbC4gSXQgc2hvdWxkIG9ubHkgY29udGFpbiB2YWxpZCBKU09OIHdoaXRlc3BhY2UKICAvLy8gY2hhcmFjdGVycyAoc3BhY2UsIHRhYiwgY2FycmlhZ2UgcmV0dXJuIG9yIGxpbmUgZmVlZCkuCiAgc3RhdGljIFN0cmluZyBzdHJpbmdpZnkob2JqZWN0LCB0b0VuY29kYWJsZShvKSwgU3RyaW5nIGluZGVudCkgewogICAgdmFyIG91dHB1dCA9IFN0cmluZ0J1ZmZlcigpOwogICAgcHJpbnRPbihvYmplY3QsIG91dHB1dCwgdG9FbmNvZGFibGUsIGluZGVudCk7CiAgICByZXR1cm4gb3V0cHV0LnRvU3RyaW5nKCk7CiAgfQoKICAvLy8gQ29udmVydCBvYmplY3QgdG8gYSBzdHJpbmcsIGFuZCB3cml0ZSB0aGUgcmVzdWx0IHRvIHRoZSBbb3V0cHV0XSBzaW5rLgogIC8vLwogIC8vLyBUaGUgcmVzdWx0IGlzIHdyaXR0ZW4gcGllY2VtYWxseSB0byB0aGUgc2luay4KICBzdGF0aWMgdm9pZCBwcmludE9uKAogICAgICBvYmplY3QsIFN0cmluZ1Npbmsgb3V0cHV0LCB0b0VuY29kYWJsZShvKSwgU3RyaW5nIGluZGVudCkgewogICAgX0pzb25TdHJpbmdpZmllciBzdHJpbmdpZmllcjsKICAgIGlmIChpbmRlbnQgPT0gbnVsbCkgewogICAgICBzdHJpbmdpZmllciA9IF9Kc29uU3RyaW5nU3RyaW5naWZpZXIob3V0cHV0LCB0b0VuY29kYWJsZSk7CiAgICB9IGVsc2UgewogICAgICBzdHJpbmdpZmllciA9IF9Kc29uU3RyaW5nU3RyaW5naWZpZXJQcmV0dHkob3V0cHV0LCB0b0VuY29kYWJsZSwgaW5kZW50KTsKICAgIH0KICAgIHN0cmluZ2lmaWVyLndyaXRlT2JqZWN0KG9iamVjdCk7CiAgfQoKICBTdHJpbmcgZ2V0IF9wYXJ0aWFsUmVzdWx0ID0+IF9zaW5rIGlzIFN0cmluZ0J1ZmZlciA/IF9zaW5rLnRvU3RyaW5nKCkgOiBudWxsOwoKICB2b2lkIHdyaXRlTnVtYmVyKG51bSBudW1iZXIpIHsKICAgIF9zaW5rLndyaXRlKG51bWJlci50b1N0cmluZygpKTsKICB9CgogIHZvaWQgd3JpdGVTdHJpbmcoU3RyaW5nIHN0cmluZykgewogICAgX3Npbmsud3JpdGUoc3RyaW5nKTsKICB9CgogIHZvaWQgd3JpdGVTdHJpbmdTbGljZShTdHJpbmcgc3RyaW5nLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIF9zaW5rLndyaXRlKHN0cmluZy5zdWJzdHJpbmcoc3RhcnQsIGVuZCkpOwogIH0KCiAgdm9pZCB3cml0ZUNoYXJDb2RlKGludCBjaGFyQ29kZSkgewogICAgX3Npbmsud3JpdGVDaGFyQ29kZShjaGFyQ29kZSk7CiAgfQp9CgpjbGFzcyBfSnNvblN0cmluZ1N0cmluZ2lmaWVyUHJldHR5IGV4dGVuZHMgX0pzb25TdHJpbmdTdHJpbmdpZmllcgogICAgd2l0aCBfSnNvblByZXR0eVByaW50TWl4aW4gewogIGZpbmFsIFN0cmluZyBfaW5kZW50OwoKICBfSnNvblN0cmluZ1N0cmluZ2lmaWVyUHJldHR5KFN0cmluZ1Npbmsgc2luaywgdG9FbmNvZGFibGUobyksIHRoaXMuX2luZGVudCkKICAgICAgOiBzdXBlcihzaW5rLCB0b0VuY29kYWJsZSk7CgogIHZvaWQgd3JpdGVJbmRlbnRhdGlvbihpbnQgY291bnQpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykgd3JpdGVTdHJpbmcoX2luZGVudCk7CiAgfQp9CgovLy8gU3BlY2lhbGl6YXRpb24gb2YgW19Kc29uU3RyaW5naWZpZXJdIHRoYXQgd3JpdGVzIHRoZSBKU09OIGFzIFVURi04LgovLy8KLy8vIFRoZSBKU09OIHRleHQgaXMgVVRGLTggZW5jb2RlZCBhbmQgd3JpdHRlbiB0byBbVWludDhMaXN0XSBidWZmZXJzLgovLy8gVGhlIGJ1ZmZlcnMgYXJlIHRoZW4gcGFzc2VkIGJhY2sgdG8gYSB1c2VyIHByb3ZpZGVkIGNhbGxiYWNrIG1ldGhvZC4KY2xhc3MgX0pzb25VdGY4U3RyaW5naWZpZXIgZXh0ZW5kcyBfSnNvblN0cmluZ2lmaWVyIHsKICBmaW5hbCBpbnQgYnVmZmVyU2l6ZTsKICBmaW5hbCB2b2lkIEZ1bmN0aW9uKFVpbnQ4TGlzdCBsaXN0LCBpbnQgc3RhcnQsIGludCBlbmQpIGFkZENodW5rOwogIFVpbnQ4TGlzdCBidWZmZXI7CiAgaW50IGluZGV4ID0gMDsKCiAgX0pzb25VdGY4U3RyaW5naWZpZXIodG9FbmNvZGFibGUobyksIHRoaXMuYnVmZmVyU2l6ZSwgdGhpcy5hZGRDaHVuaykKICAgICAgOiBidWZmZXIgPSBVaW50OExpc3QoYnVmZmVyU2l6ZSksCiAgICAgICAgc3VwZXIodG9FbmNvZGFibGUpOwoKICAvLy8gQ29udmVydCBbb2JqZWN0XSB0byBVVEYtOCBlbmNvZGVkIEpTT04uCiAgLy8vCiAgLy8vIENhbGxzIFthZGRDaHVua10gd2l0aCBzbGljZXMgb2YgVVRGLTggY29kZSB1bml0cy4KICAvLy8gVGhlc2Ugd2lsbCB0eXBpY2FsbHkgaGF2ZSBzaXplIFtidWZmZXJTaXplXSwgYnV0IG1heSBiZSBzaG9ydGVyLgogIC8vLyBUaGUgYnVmZmVycyBhcmUgbm90IHJldXNlZCwgc28gdGhlIFthZGRDaHVua10gY2FsbCBtYXkga2VlcCBhbmQgcmV1c2UgdGhlCiAgLy8vIGNodW5rcy4KICAvLy8KICAvLy8gSWYgW2luZGVudF0gaXMgbm9uLWBudWxsYCwgdGhlIHJlc3VsdCB3aWxsIGJlICJwcmV0dHktcHJpbnRlZCIgd2l0aCBleHRyYQogIC8vLyBuZXdsaW5lcyBhbmQgaW5kZW50YXRpb24sIHVzaW5nIFtpbmRlbnRdIGFzIHRoZSBpbmRlbnRhdGlvbi4KICBzdGF0aWMgdm9pZCBzdHJpbmdpZnkoT2JqZWN0IG9iamVjdCwgTGlzdDxpbnQ+IGluZGVudCwgdG9FbmNvZGFibGUobyksCiAgICAgIGludCBidWZmZXJTaXplLCB2b2lkIGFkZENodW5rKFVpbnQ4TGlzdCBjaHVuaywgaW50IHN0YXJ0LCBpbnQgZW5kKSkgewogICAgX0pzb25VdGY4U3RyaW5naWZpZXIgc3RyaW5naWZpZXI7CiAgICBpZiAoaW5kZW50ICE9IG51bGwpIHsKICAgICAgc3RyaW5naWZpZXIgPQogICAgICAgICAgX0pzb25VdGY4U3RyaW5naWZpZXJQcmV0dHkodG9FbmNvZGFibGUsIGluZGVudCwgYnVmZmVyU2l6ZSwgYWRkQ2h1bmspOwogICAgfSBlbHNlIHsKICAgICAgc3RyaW5naWZpZXIgPSBfSnNvblV0ZjhTdHJpbmdpZmllcih0b0VuY29kYWJsZSwgYnVmZmVyU2l6ZSwgYWRkQ2h1bmspOwogICAgfQogICAgc3RyaW5naWZpZXIud3JpdGVPYmplY3Qob2JqZWN0KTsKICAgIHN0cmluZ2lmaWVyLmZsdXNoKCk7CiAgfQoKICAvLy8gTXVzdCBiZSBjYWxsZWQgYXQgdGhlIGVuZCB0byBwdXNoIHRoZSBsYXN0IGNodW5rIHRvIHRoZSBbYWRkQ2h1bmtdCiAgLy8vIGNhbGxiYWNrLgogIHZvaWQgZmx1c2goKSB7CiAgICBpZiAoaW5kZXggPiAwKSB7CiAgICAgIGFkZENodW5rKGJ1ZmZlciwgMCwgaW5kZXgpOwogICAgfQogICAgYnVmZmVyID0gbnVsbDsKICAgIGluZGV4ID0gMDsKICB9CgogIFN0cmluZyBnZXQgX3BhcnRpYWxSZXN1bHQgPT4gbnVsbDsKCiAgdm9pZCB3cml0ZU51bWJlcihudW0gbnVtYmVyKSB7CiAgICB3cml0ZUFzY2lpU3RyaW5nKG51bWJlci50b1N0cmluZygpKTsKICB9CgogIC8vLyBXcml0ZSBhIHN0cmluZyB0aGF0IGlzIGtub3duIHRvIG5vdCBoYXZlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgogIHZvaWQgd3JpdGVBc2NpaVN0cmluZyhTdHJpbmcgc3RyaW5nKSB7CiAgICAvLyBUT0RPKGxybik6IE9wdGltaXplIGJ5IGNvcHlpbmcgZGlyZWN0bHkgaW50byBidWZmZXIgaW5zdGVhZCBvZiBnb2luZwogICAgLy8gdGhyb3VnaCB3cml0ZUNoYXJDb2RlOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGNoYXIgPSBzdHJpbmcuY29kZVVuaXRBdChpKTsKICAgICAgYXNzZXJ0KGNoYXIgPD0gMHg3Zik7CiAgICAgIHdyaXRlQnl0ZShjaGFyKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVTdHJpbmcoU3RyaW5nIHN0cmluZykgewogICAgd3JpdGVTdHJpbmdTbGljZShzdHJpbmcsIDAsIHN0cmluZy5sZW5ndGgpOwogIH0KCiAgdm9pZCB3cml0ZVN0cmluZ1NsaWNlKFN0cmluZyBzdHJpbmcsIGludCBzdGFydCwgaW50IGVuZCkgewogICAgLy8gVE9ETyhscm4pOiBPcHRpbWl6ZSBieSBjb3B5aW5nIGRpcmVjdGx5IGludG8gYnVmZmVyIGluc3RlYWQgb2YgZ29pbmcKICAgIC8vIHRocm91Z2ggd3JpdGVDaGFyQ29kZS93cml0ZUJ5dGUuIEFzc3VtcHRpb24gaXMgdGhlIG1vc3QgY2hhcmFjdGVycwogICAgLy8gaW4gc3RhcmluZ3MgYXJlIHBsYWluIEFTQ0lJLgogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgdmFyIGNoYXIgPSBzdHJpbmcuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGNoYXIgPD0gMHg3ZikgewogICAgICAgIHdyaXRlQnl0ZShjaGFyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoKGNoYXIgJiAweEZDMDApID09IDB4RDgwMCAmJiBpICsgMSA8IGVuZCkgewogICAgICAgICAgLy8gTGVhZCBzdXJyb2dhdGUuCiAgICAgICAgICB2YXIgbmV4dENoYXIgPSBzdHJpbmcuY29kZVVuaXRBdChpICsgMSk7CiAgICAgICAgICBpZiAoKG5leHRDaGFyICYgMHhGQzAwKSA9PSAweERDMDApIHsKICAgICAgICAgICAgLy8gVGFpbCBzdXJyb2dhdGUuCiAgICAgICAgICAgIGNoYXIgPSAweDEwMDAwICsgKChjaGFyICYgMHgzZmYpIDw8IDEwKSArIChuZXh0Q2hhciAmIDB4M2ZmKTsKICAgICAgICAgICAgd3JpdGVGb3VyQnl0ZUNoYXJDb2RlKGNoYXIpOwogICAgICAgICAgICBpKys7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB3cml0ZU11bHRpQnl0ZUNoYXJDb2RlKGNoYXIpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlQ2hhckNvZGUoaW50IGNoYXJDb2RlKSB7CiAgICBpZiAoY2hhckNvZGUgPD0gMHg3ZikgewogICAgICB3cml0ZUJ5dGUoY2hhckNvZGUpOwogICAgICByZXR1cm47CiAgICB9CiAgICB3cml0ZU11bHRpQnl0ZUNoYXJDb2RlKGNoYXJDb2RlKTsKICB9CgogIHZvaWQgd3JpdGVNdWx0aUJ5dGVDaGFyQ29kZShpbnQgY2hhckNvZGUpIHsKICAgIGlmIChjaGFyQ29kZSA8PSAweDdmZikgewogICAgICB3cml0ZUJ5dGUoMHhDMCB8IChjaGFyQ29kZSA+PiA2KSk7CiAgICAgIHdyaXRlQnl0ZSgweDgwIHwgKGNoYXJDb2RlICYgMHgzZikpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoY2hhckNvZGUgPD0gMHhmZmZmKSB7CiAgICAgIHdyaXRlQnl0ZSgweEUwIHwgKGNoYXJDb2RlID4+IDEyKSk7CiAgICAgIHdyaXRlQnl0ZSgweDgwIHwgKChjaGFyQ29kZSA+PiA2KSAmIDB4M2YpKTsKICAgICAgd3JpdGVCeXRlKDB4ODAgfCAoY2hhckNvZGUgJiAweDNmKSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHdyaXRlRm91ckJ5dGVDaGFyQ29kZShjaGFyQ29kZSk7CiAgfQoKICB2b2lkIHdyaXRlRm91ckJ5dGVDaGFyQ29kZShpbnQgY2hhckNvZGUpIHsKICAgIGFzc2VydChjaGFyQ29kZSA8PSAweDEwZmZmZik7CiAgICB3cml0ZUJ5dGUoMHhGMCB8IChjaGFyQ29kZSA+PiAxOCkpOwogICAgd3JpdGVCeXRlKDB4ODAgfCAoKGNoYXJDb2RlID4+IDEyKSAmIDB4M2YpKTsKICAgIHdyaXRlQnl0ZSgweDgwIHwgKChjaGFyQ29kZSA+PiA2KSAmIDB4M2YpKTsKICAgIHdyaXRlQnl0ZSgweDgwIHwgKGNoYXJDb2RlICYgMHgzZikpOwogIH0KCiAgdm9pZCB3cml0ZUJ5dGUoaW50IGJ5dGUpIHsKICAgIGFzc2VydChieXRlIDw9IDB4ZmYpOwogICAgaWYgKGluZGV4ID09IGJ1ZmZlci5sZW5ndGgpIHsKICAgICAgYWRkQ2h1bmsoYnVmZmVyLCAwLCBpbmRleCk7CiAgICAgIGJ1ZmZlciA9IFVpbnQ4TGlzdChidWZmZXJTaXplKTsKICAgICAgaW5kZXggPSAwOwogICAgfQogICAgYnVmZmVyW2luZGV4KytdID0gYnl0ZTsKICB9Cn0KCi8vLyBQcmV0dHktcHJpbnRpbmcgdmVyc2lvbiBvZiBbX0pzb25VdGY4U3RyaW5naWZpZXJdLgpjbGFzcyBfSnNvblV0ZjhTdHJpbmdpZmllclByZXR0eSBleHRlbmRzIF9Kc29uVXRmOFN0cmluZ2lmaWVyCiAgICB3aXRoIF9Kc29uUHJldHR5UHJpbnRNaXhpbiB7CiAgZmluYWwgTGlzdDxpbnQ+IGluZGVudDsKICBfSnNvblV0ZjhTdHJpbmdpZmllclByZXR0eSh0b0VuY29kYWJsZShvKSwgdGhpcy5pbmRlbnQsIGludCBidWZmZXJTaXplLAogICAgICB2b2lkIGFkZENodW5rKFVpbnQ4TGlzdCBidWZmZXIsIGludCBzdGFydCwgaW50IGVuZCkpCiAgICAgIDogc3VwZXIodG9FbmNvZGFibGUsIGJ1ZmZlclNpemUsIGFkZENodW5rKTsKCiAgdm9pZCB3cml0ZUluZGVudGF0aW9uKGludCBjb3VudCkgewogICAgdmFyIGluZGVudCA9IHRoaXMuaW5kZW50OwogICAgdmFyIGluZGVudExlbmd0aCA9IGluZGVudC5sZW5ndGg7CiAgICBpZiAoaW5kZW50TGVuZ3RoID09IDEpIHsKICAgICAgdmFyIGNoYXIgPSBpbmRlbnRbMF07CiAgICAgIHdoaWxlIChjb3VudCA+IDApIHsKICAgICAgICB3cml0ZUJ5dGUoY2hhcik7CiAgICAgICAgY291bnQgLT0gMTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgICB3aGlsZSAoY291bnQgPiAwKSB7CiAgICAgIGNvdW50LS07CiAgICAgIHZhciBlbmQgPSBpbmRleCArIGluZGVudExlbmd0aDsKICAgICAgaWYgKGVuZCA8PSBidWZmZXIubGVuZ3RoKSB7CiAgICAgICAgYnVmZmVyLnNldFJhbmdlKGluZGV4LCBlbmQsIGluZGVudCk7CiAgICAgICAgaW5kZXggPSBlbmQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRlbnRMZW5ndGg7IGkrKykgewogICAgICAgICAgd3JpdGVCeXRlKGluZGVudFtpXSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9CoQMAE5OPAEWAUoEUgRQTkUnMS8iAT4WAUkGEx4BNSkBFjwTGUMNSAYiBAIBTgQ9Lj87PTI5AgFCBEcPBA4EOj4EUTIkAScESE9OLARMPQRPFU8zAT0ES1BOMARIBE8VUSsBSRIEDgQ6PjA1KAFKBk85T1AGTAZMUEpRTlFPTiYGTj9QHCQBNAZNTUwyOyABPwZNUlAyBkpHGjkxBAEpBkpRUC4GTj83Ijw0BAEcOiYEARw2IgQCATE2JQZNRQY5FwFHRCgBHgZLJgZFNgZJEisXJAE7BlJPHAZFBksmBkU2BkkSQyQBLAZPUVAUBkZSTzAGSEhANgZPTg4GNwZOTksjRgEjBkQeBk9ETCQjFhgvLwYdTxYRBAE/RAE9Mk1HSSM/BiEEAgFJBEZDJT09LQ49AUMbAUEoARkZARgGTk4tSVBPFlQGSxhMBlAQBlEqBk0OE1EnJCIBMCUtEAYwPAgfBiAEATAlHz1POS0iEE8IGAYBJD8sFC0hBiQ5HyouFAYTBAEiBjwGTElPISYXDTAGTwQBPzIfBAIBTgRPPxgoJBgBQQEkBlFQGBcTOAYUK0oYBAEiAgFLQzMiGygZGBhGATY4LgQBHBM4BhQkQBMEAREUFhUGBAIBSTY1ASQGI08BSgZLSw4GS1FQUDsGREABUgZMSwE/RAIBMzkBKgFAAUwESU0iHyUfIyokISIlIiIiIiIiAUgZAUAoASM7AR0BKicBMkABTiQBKSABIToBTyYUHScmKhs4GCIcGiMTFCMTGCMTGSMTHyMTEyMjIzw1Ewo/OBgiIQgGFxYiKwYEAUEGUkIdLSknCAYXBAFEBksNHR4rGAQBFwZROR1PTQ0oGQotKVEIGxIvNAYEAUoGSUwgGSobEyobEyscEyEbEyMYIhgTIRsZGxMgGzgmGxYNFAYEARoeFhscLhoeCAYWBAEZGxcZEwYtDx4fHB8IHyEIJhYZNx4YKxkoBhYRBAIBUjQENEMYATkqAR4YGQ0aFiYcLhwoHggZFiYYBgQBGxcZEwYtDx4fHB8IHyEIJhgUGDceGSYYKxooBhcUJBYRBAIBTTgaAU0dASIGShkGTVFPPUMhMh4EAU0GNBdCIhpBDU8GJQQBUAEhJAQBJBkEAT0vBAElIwQCAUIhGAFOIgElOgQCAUgER0k2GEQUEQFHKBwBLgY4R1AOBlBDSUwmGhRRDU0GJRkEAUkQERUiBhMPBAElASEpBAFFKUweLiccFwYEASQwBAE9TEokKCcaGQ84HTMvH0opERYMCiYIBgQBJRwbDgYmBAEuHSkrDgYeKjIrDgYlBAEtIigxMCkEAR0aIiImEQYcBAIBNz4hGko7MgElHiYdHBoZFAgOBhgPJiItFQ8xIAoIBgQCARZkYXJ0OmNvbnZlcnQvanNvbi5kYXJ0L29yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb252ZXJ0L2xhdGluMS5kYXJ0mFkvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvbnZlcnQ7CgovLy8gQW4gaW5zdGFuY2Ugb2YgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFtMYXRpbjFDb2RlY10uCi8vLwovLy8gVGhpcyBpbnN0YW5jZSBwcm92aWRlcyBhIGNvbnZlbmllbnQgYWNjZXNzIHRvIHRoZSBtb3N0IGNvbW1vbiBJU08gTGF0aW4gMQovLy8gdXNlIGNhc2VzLgovLy8KLy8vIEV4YW1wbGVzOgovLy8gYGBgZGFydAovLy8gdmFyIGVuY29kZWQgPSBsYXRpbjEuZW5jb2RlKCJibMOlYsOmcmdyw7hkIik7Ci8vLyB2YXIgZGVjb2RlZCA9IGxhdGluMS5kZWNvZGUoWzB4NjIsIDB4NmMsIDB4ZTUsIDB4NjIsIDB4ZTYsCi8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzIsIDB4NjcsIDB4NzIsIDB4ZjgsIDB4NjRdKTsKLy8vIGBgYApjb25zdCBMYXRpbjFDb2RlYyBsYXRpbjEgPSBMYXRpbjFDb2RlYygpOwoKY29uc3QgaW50IF9sYXRpbjFNYXNrID0gMHhGRjsKCi8vLyBBIFtMYXRpbjFDb2RlY10gZW5jb2RlcyBzdHJpbmdzIHRvIElTTyBMYXRpbi0xIChha2EgSVNPLTg4NTktMSkgYnl0ZXMKLy8vIGFuZCBkZWNvZGVzIExhdGluLTEgYnl0ZXMgdG8gc3RyaW5ncy4KY2xhc3MgTGF0aW4xQ29kZWMgZXh0ZW5kcyBFbmNvZGluZyB7CiAgZmluYWwgYm9vbCBfYWxsb3dJbnZhbGlkOwoKICAvLy8gSW5zdGFudGlhdGVzIGEgbmV3IFtMYXRpbjFDb2RlY10uCiAgLy8vCiAgLy8vIElmIFthbGxvd0ludmFsaWRdIGlzIHRydWUsIHRoZSBbZGVjb2RlXSBtZXRob2QgYW5kIHRoZSBjb252ZXJ0ZXIKICAvLy8gcmV0dXJuZWQgYnkgW2RlY29kZXJdIHdpbGwgZGVmYXVsdCB0byBhbGxvd2luZyBpbnZhbGlkIHZhbHVlcy4gSW52YWxpZAogIC8vLyB2YWx1ZXMgYXJlIGRlY29kZWQgaW50byB0aGUgVW5pY29kZSBSZXBsYWNlbWVudCBjaGFyYWN0ZXIgKFUrRkZGRCkuCiAgLy8vIENhbGxzIHRvIHRoZSBbZGVjb2RlXSBtZXRob2QgY2FuIG92ZXJyaWRlIHRoaXMgZGVmYXVsdC4KICAvLy8KICAvLy8gRW5jb2RlcnMgd2lsbCBub3QgYWNjZXB0IGludmFsaWQgKG5vbiBMYXRpbi0xKSBjaGFyYWN0ZXJzLgogIGNvbnN0IExhdGluMUNvZGVjKHtib29sIGFsbG93SW52YWxpZCA9IGZhbHNlfSkgOiBfYWxsb3dJbnZhbGlkID0gYWxsb3dJbnZhbGlkOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhpcyBjb2RlYywgImlzby04ODU5LTEiLgogIFN0cmluZyBnZXQgbmFtZSA9PiAiaXNvLTg4NTktMSI7CgogIFVpbnQ4TGlzdCBlbmNvZGUoU3RyaW5nIHNvdXJjZSkgPT4gZW5jb2Rlci5jb252ZXJ0KHNvdXJjZSk7CgogIC8vLyBEZWNvZGVzIHRoZSBMYXRpbi0xIFtieXRlc10gKGEgbGlzdCBvZiB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VycykgdG8gdGhlCiAgLy8vIGNvcnJlc3BvbmRpbmcgc3RyaW5nLgogIC8vLwogIC8vLyBJZiBbYnl0ZXNdIGNvbnRhaW5zIHZhbHVlcyB0aGF0IGFyZSBub3QgaW4gdGhlIHJhbmdlIDAgLi4gMjU1LCB0aGUgZGVjb2RlcgogIC8vLyB3aWxsIGV2ZW50dWFsbHkgdGhyb3cgYSBbRm9ybWF0RXhjZXB0aW9uXS4KICAvLy8KICAvLy8gSWYgW2FsbG93SW52YWxpZF0gaXMgbm90IHByb3ZpZGVkLCBpdCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgdXNlZCB0byBjcmVhdGUKICAvLy8gdGhpcyBbTGF0aW4xQ29kZWNdLgogIFN0cmluZyBkZWNvZGUoTGlzdDxpbnQ+IGJ5dGVzLCB7Ym9vbCBhbGxvd0ludmFsaWR9KSB7CiAgICBhbGxvd0ludmFsaWQgPz89IF9hbGxvd0ludmFsaWQ7CiAgICBpZiAoYWxsb3dJbnZhbGlkKSB7CiAgICAgIHJldHVybiBjb25zdCBMYXRpbjFEZWNvZGVyKGFsbG93SW52YWxpZDogdHJ1ZSkuY29udmVydChieXRlcyk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gY29uc3QgTGF0aW4xRGVjb2RlcihhbGxvd0ludmFsaWQ6IGZhbHNlKS5jb252ZXJ0KGJ5dGVzKTsKICAgIH0KICB9CgogIExhdGluMUVuY29kZXIgZ2V0IGVuY29kZXIgPT4gY29uc3QgTGF0aW4xRW5jb2RlcigpOwoKICBMYXRpbjFEZWNvZGVyIGdldCBkZWNvZGVyID0+IF9hbGxvd0ludmFsaWQKICAgICAgPyBjb25zdCBMYXRpbjFEZWNvZGVyKGFsbG93SW52YWxpZDogdHJ1ZSkKICAgICAgOiBjb25zdCBMYXRpbjFEZWNvZGVyKGFsbG93SW52YWxpZDogZmFsc2UpOwp9CgovLy8gVGhpcyBjbGFzcyBjb252ZXJ0cyBzdHJpbmdzIG9mIG9ubHkgSVNPIExhdGluLTEgY2hhcmFjdGVycyB0byBieXRlcy4KY2xhc3MgTGF0aW4xRW5jb2RlciBleHRlbmRzIF9Vbmljb2RlU3Vic2V0RW5jb2RlciB7CiAgY29uc3QgTGF0aW4xRW5jb2RlcigpIDogc3VwZXIoX2xhdGluMU1hc2spOwp9CgovLy8gVGhpcyBjbGFzcyBjb252ZXJ0cyBMYXRpbi0xIGJ5dGVzIChsaXN0cyBvZiB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VycykKLy8vIHRvIGEgc3RyaW5nLgpjbGFzcyBMYXRpbjFEZWNvZGVyIGV4dGVuZHMgX1VuaWNvZGVTdWJzZXREZWNvZGVyIHsKICAvLy8gSW5zdGFudGlhdGVzIGEgbmV3IFtMYXRpbjFEZWNvZGVyXS4KICAvLy8KICAvLy8gVGhlIG9wdGlvbmFsIFthbGxvd0ludmFsaWRdIGFyZ3VtZW50IGRlZmluZXMgaG93IFtjb252ZXJ0XSBkZWFscwogIC8vLyB3aXRoIGludmFsaWQgYnl0ZXMuCiAgLy8vCiAgLy8vIElmIGl0IGlzIGB0cnVlYCwgW2NvbnZlcnRdIHJlcGxhY2VzIGludmFsaWQgYnl0ZXMgd2l0aCB0aGUgVW5pY29kZQogIC8vLyBSZXBsYWNlbWVudCBjaGFyYWN0ZXIgYFUrRkZGRGAgKO+/vSkuCiAgLy8vIE90aGVyd2lzZSBpdCB0aHJvd3MgYSBbRm9ybWF0RXhjZXB0aW9uXS4KICBjb25zdCBMYXRpbjFEZWNvZGVyKHtib29sIGFsbG93SW52YWxpZCA9IGZhbHNlfSkKICAgICAgOiBzdXBlcihhbGxvd0ludmFsaWQsIF9sYXRpbjFNYXNrKTsKCiAgLy8vIFN0YXJ0cyBhIGNodW5rZWQgY29udmVyc2lvbi4KICAvLy8KICAvLy8gVGhlIGNvbnZlcnRlciB3b3JrcyBtb3JlIGVmZmljaWVudGx5IGlmIHRoZSBnaXZlbiBbc2lua10gaXMgYQogIC8vLyBbU3RyaW5nQ29udmVyc2lvblNpbmtdLgogIEJ5dGVDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8U3RyaW5nPiBzaW5rKSB7CiAgICBTdHJpbmdDb252ZXJzaW9uU2luayBzdHJpbmdTaW5rOwogICAgaWYgKHNpbmsgaXMgU3RyaW5nQ29udmVyc2lvblNpbmspIHsKICAgICAgc3RyaW5nU2luayA9IHNpbms7CiAgICB9IGVsc2UgewogICAgICBzdHJpbmdTaW5rID0gU3RyaW5nQ29udmVyc2lvblNpbmsuZnJvbShzaW5rKTsKICAgIH0KICAgIC8vIFRPRE8obHJuKTogVXNlIHN0cmluZ1NpbmsuYXNVdGYxNlNpbmsoKSBpZiBpdCBiZWNvbWVzIGF2YWlsYWJsZS4KICAgIGlmICghX2FsbG93SW52YWxpZCkgcmV0dXJuIF9MYXRpbjFEZWNvZGVyU2luayhzdHJpbmdTaW5rKTsKICAgIHJldHVybiBfTGF0aW4xQWxsb3dJbnZhbGlkRGVjb2RlclNpbmsoc3RyaW5nU2luayk7CiAgfQp9CgpjbGFzcyBfTGF0aW4xRGVjb2RlclNpbmsgZXh0ZW5kcyBCeXRlQ29udmVyc2lvblNpbmtCYXNlIHsKICBTdHJpbmdDb252ZXJzaW9uU2luayBfc2luazsKICBfTGF0aW4xRGVjb2RlclNpbmsodGhpcy5fc2luayk7CgogIHZvaWQgY2xvc2UoKSB7CiAgICBfc2luay5jbG9zZSgpOwogICAgX3NpbmsgPSBudWxsOwogIH0KCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IHNvdXJjZSkgewogICAgYWRkU2xpY2Uoc291cmNlLCAwLCBzb3VyY2UubGVuZ3RoLCBmYWxzZSk7CiAgfQoKICB2b2lkIF9hZGRTbGljZVRvU2luayhMaXN0PGludD4gc291cmNlLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICAvLyBJZiBfc2luayB3YXMgYSBVVEYtMTYgY29udmVyc2lvbiBzaW5rLCBqdXN0IGFkZCB0aGUgc2xpY2UgZGlyZWN0bHkgd2l0aAogICAgLy8gX3NpbmsuYWRkU2xpY2Uoc291cmNlLCBzdGFydCwgZW5kLCBpc0xhc3QpLgogICAgLy8gVGhlIGNvZGUgYmVsb3cgaXMgYW4gbW9kZXJhdGVseSBzdHVwaWQgd29ya2Fyb3VuZCB1bnRpbCBhIHJlYWwKICAgIC8vIHNvbHV0aW9uIGNhbiBiZSBtYWRlLgogICAgX3NpbmsuYWRkKFN0cmluZy5mcm9tQ2hhckNvZGVzKHNvdXJjZSwgc3RhcnQsIGVuZCkpOwogICAgaWYgKGlzTGFzdCkgY2xvc2UoKTsKICB9CgogIHZvaWQgYWRkU2xpY2UoTGlzdDxpbnQ+IHNvdXJjZSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgc291cmNlLmxlbmd0aCk7CiAgICBpZiAoc3RhcnQgPT0gZW5kKSByZXR1cm47CiAgICBpZiAoc291cmNlIGlzISBVaW50OExpc3QpIHsKICAgICAgLy8gTGlzdCBtYXkgY29udGFpbiB2YWx1ZSBvdXRzaWRlIG9mIHRoZSAwLi4yNTUgcmFuZ2UuIElmIHNvLCB0aHJvdy4KICAgICAgLy8gVGVjaG5pY2FsbHksIHdlIGNvdWxkIGV4Y3VzZSBVaW50OENsYW1wZWRMaXN0IGFzIHdlbGwsIGJ1dCBpdCB1bmxpa2VseQogICAgICAvLyB0byBiZSByZWxldmFudC4KICAgICAgX2NoZWNrVmFsaWRMYXRpbjEoc291cmNlLCBzdGFydCwgZW5kKTsKICAgIH0KICAgIF9hZGRTbGljZVRvU2luayhzb3VyY2UsIHN0YXJ0LCBlbmQsIGlzTGFzdCk7CiAgfQoKICBzdGF0aWMgdm9pZCBfY2hlY2tWYWxpZExhdGluMShMaXN0PGludD4gc291cmNlLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIHZhciBtYXNrID0gMDsKICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIG1hc2sgfD0gc291cmNlW2ldOwogICAgfQogICAgaWYgKG1hc2sgPj0gMCAmJiBtYXNrIDw9IF9sYXRpbjFNYXNrKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIF9yZXBvcnRJbnZhbGlkTGF0aW4xKHNvdXJjZSwgc3RhcnQsIGVuZCk7IC8vIEFsd2F5cyB0aHJvd3MuCiAgfQoKICBzdGF0aWMgdm9pZCBfcmVwb3J0SW52YWxpZExhdGluMShMaXN0PGludD4gc291cmNlLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIC8vIEZpbmQgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBub24tTGF0aW4tMSBjaGFyYWN0ZXIgY29kZS4KICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIHZhciBjaGFyID0gc291cmNlW2ldOwogICAgICBpZiAoY2hhciA8IDAgfHwgY2hhciA+IF9sYXRpbjFNYXNrKSB7CiAgICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKAogICAgICAgICAgICAiU291cmNlIGNvbnRhaW5zIG5vbi1MYXRpbi0xIGNoYXJhY3RlcnMuIiwgc291cmNlLCBpKTsKICAgICAgfQogICAgfQogICAgLy8gVW5yZWFjaGFibGUgLSB3ZSBvbmx5IGNhbGwgdGhlIGZ1bmN0aW9uIGlmIHRoZSBsb29wIGFib3ZlIHRocm93cy4KICAgIGFzc2VydChmYWxzZSk7CiAgfQp9CgpjbGFzcyBfTGF0aW4xQWxsb3dJbnZhbGlkRGVjb2RlclNpbmsgZXh0ZW5kcyBfTGF0aW4xRGVjb2RlclNpbmsgewogIF9MYXRpbjFBbGxvd0ludmFsaWREZWNvZGVyU2luayhTdHJpbmdDb252ZXJzaW9uU2luayBzaW5rKSA6IHN1cGVyKHNpbmspOwoKICB2b2lkIGFkZFNsaWNlKExpc3Q8aW50PiBzb3VyY2UsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHNvdXJjZS5sZW5ndGgpOwogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgdmFyIGNoYXIgPSBzb3VyY2VbaV07CiAgICAgIGlmIChjaGFyID4gX2xhdGluMU1hc2sgfHwgY2hhciA8IDApIHsKICAgICAgICBpZiAoaSA+IHN0YXJ0KSBfYWRkU2xpY2VUb1Npbmsoc291cmNlLCBzdGFydCwgaSwgZmFsc2UpOwogICAgICAgIC8vIEFkZCBVVEYtOCBlbmNvZGluZyBvZiBVK0ZGRkQuCiAgICAgICAgX2FkZFNsaWNlVG9TaW5rKGNvbnN0IFsweEZGRkRdLCAwLCAxLCBmYWxzZSk7CiAgICAgICAgc3RhcnQgPSBpICsgMTsKICAgICAgfQogICAgfQogICAgaWYgKHN0YXJ0IDwgZW5kKSB7CiAgICAgIF9hZGRTbGljZVRvU2luayhzb3VyY2UsIHN0YXJ0LCBlbmQsIGlzTGFzdCk7CiAgICB9CiAgICBpZiAoaXNMYXN0KSB7CiAgICAgIGNsb3NlKCk7CiAgICB9CiAgfQp9CoC4AE5OPAEWAUQETg8EDgwvP0EIKgEeAUoqJRwBKAZHTUo+BkFRASwjAT4BTRwGUTEGURo4JBhFDUYGBAE2AS0wMgIBSTQuAgFJETQqBkcaBkkqLzMqASMGRB5BJSgZDTQGSD83BAIBOh4iARETEgQBHy8EAUxPM0YdORkEAUVBHiBLUBktBjEEAUgSKBkGLA4GQAQBSz8oHCwfQwgGSRMEAgFCSwFFOygcLEEpNhcIBhczBhIPBgQCARhkYXJ0OmNvbnZlcnQvbGF0aW4xLmRhcnQ2b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvbnZlcnQvbGluZV9zcGxpdHRlci5kYXJ0k3wvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvbnZlcnQ7CgovLyBDaGFyYWN0ZXIgY29uc3RhbnRzLgpjb25zdCBpbnQgX0xGID0gMTA7CmNvbnN0IGludCBfQ1IgPSAxMzsKCi8vLyBBIFtTdHJlYW1UcmFuc2Zvcm1lcl0gdGhhdCBzcGxpdHMgYSBbU3RyaW5nXSBpbnRvIGluZGl2aWR1YWwgbGluZXMuCi8vLwovLy8gQSBsaW5lIGlzIHRlcm1pbmF0ZWQgYnkgZWl0aGVyIGEgQ1IgKFUrMDAwRCksIGEgTEYgKFUrMDAwQSksIGEKLy8vIENSK0xGIHNlcXVlbmNlIChET1MgbGluZSBlbmRpbmcpLAovLy8gYW5kIGEgZmluYWwgbm9uLWVtcHR5IGxpbmUgY2FuIGJlIGVuZGVkIGJ5IHRoZSBlbmQgb2YgdGhlIHN0cmluZy4KLy8vCi8vLyBUaGUgcmV0dXJuZWQgbGluZXMgZG8gbm90IGNvbnRhaW4gdGhlIGxpbmUgdGVybWluYXRvcnMuCgpjbGFzcyBMaW5lU3BsaXR0ZXIgZXh0ZW5kcyBTdHJlYW1UcmFuc2Zvcm1lckJhc2U8U3RyaW5nLCBTdHJpbmc+IHsKICBjb25zdCBMaW5lU3BsaXR0ZXIoKTsKCiAgLy8vIFNwbGl0IFtsaW5lc10gaW50byBpbmRpdmlkdWFsIGxpbmVzLgogIC8vLwogIC8vLyBJZiBbc3RhcnRdIGFuZCBbZW5kXSBhcmUgcHJvdmlkZWQsIG9ubHkgc3BsaXQgdGhlIGNvbnRlbnRzIG9mCiAgLy8vIGBsaW5lcy5zdWJzdHJpbmcoc3RhcnQsIGVuZClgLiBUaGUgW3N0YXJ0XSBhbmQgW2VuZF0gdmFsdWVzIG11c3QKICAvLy8gc3BlY2lmeSBhIHZhbGlkIHN1Yi1yYW5nZSBvZiBbbGluZXNdCiAgLy8vIChgMCA8PSBzdGFydCA8PSBlbmQgPD0gbGluZXMubGVuZ3RoYCkuCiAgc3RhdGljIEl0ZXJhYmxlPFN0cmluZz4gc3BsaXQoU3RyaW5nIGxpbmVzLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHN5bmMqIHsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGxpbmVzLmxlbmd0aCk7CiAgICB2YXIgc2xpY2VTdGFydCA9IHN0YXJ0OwogICAgdmFyIGNoYXIgPSAwOwogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgdmFyIHByZXZpb3VzQ2hhciA9IGNoYXI7CiAgICAgIGNoYXIgPSBsaW5lcy5jb2RlVW5pdEF0KGkpOwogICAgICBpZiAoY2hhciAhPSBfQ1IpIHsKICAgICAgICBpZiAoY2hhciAhPSBfTEYpIGNvbnRpbnVlOwogICAgICAgIGlmIChwcmV2aW91c0NoYXIgPT0gX0NSKSB7CiAgICAgICAgICBzbGljZVN0YXJ0ID0gaSArIDE7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgeWllbGQgbGluZXMuc3Vic3RyaW5nKHNsaWNlU3RhcnQsIGkpOwogICAgICBzbGljZVN0YXJ0ID0gaSArIDE7CiAgICB9CiAgICBpZiAoc2xpY2VTdGFydCA8IGVuZCkgewogICAgICB5aWVsZCBsaW5lcy5zdWJzdHJpbmcoc2xpY2VTdGFydCwgZW5kKTsKICAgIH0KICB9CgogIExpc3Q8U3RyaW5nPiBjb252ZXJ0KFN0cmluZyBkYXRhKSB7CiAgICB2YXIgbGluZXMgPSA8U3RyaW5nPltdOwogICAgdmFyIGVuZCA9IGRhdGEubGVuZ3RoOwogICAgdmFyIHNsaWNlU3RhcnQgPSAwOwogICAgdmFyIGNoYXIgPSAwOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmQ7IGkrKykgewogICAgICB2YXIgcHJldmlvdXNDaGFyID0gY2hhcjsKICAgICAgY2hhciA9IGRhdGEuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGNoYXIgIT0gX0NSKSB7CiAgICAgICAgaWYgKGNoYXIgIT0gX0xGKSBjb250aW51ZTsKICAgICAgICBpZiAocHJldmlvdXNDaGFyID09IF9DUikgewogICAgICAgICAgc2xpY2VTdGFydCA9IGkgKyAxOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGxpbmVzLmFkZChkYXRhLnN1YnN0cmluZyhzbGljZVN0YXJ0LCBpKSk7CiAgICAgIHNsaWNlU3RhcnQgPSBpICsgMTsKICAgIH0KICAgIGlmIChzbGljZVN0YXJ0IDwgZW5kKSB7CiAgICAgIGxpbmVzLmFkZChkYXRhLnN1YnN0cmluZyhzbGljZVN0YXJ0LCBlbmQpKTsKICAgIH0KICAgIHJldHVybiBsaW5lczsKICB9CgogIFN0cmluZ0NvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxTdHJpbmc+IHNpbmspIHsKICAgIHJldHVybiBfTGluZVNwbGl0dGVyU2luaygKICAgICAgICBzaW5rIGlzIFN0cmluZ0NvbnZlcnNpb25TaW5rID8gc2luayA6IFN0cmluZ0NvbnZlcnNpb25TaW5rLmZyb20oc2luaykpOwogIH0KCiAgU3RyZWFtPFN0cmluZz4gYmluZChTdHJlYW08U3RyaW5nPiBzdHJlYW0pIHsKICAgIHJldHVybiBTdHJlYW08U3RyaW5nPi5ldmVudFRyYW5zZm9ybWVkKAogICAgICAgIHN0cmVhbSwgKEV2ZW50U2luazxTdHJpbmc+IHNpbmspID0+IF9MaW5lU3BsaXR0ZXJFdmVudFNpbmsoc2luaykpOwogIH0KfQoKLy8gVE9ETyhmbG9pdHNjaCk6IGRlYWwgd2l0aCB1dGY4LgpjbGFzcyBfTGluZVNwbGl0dGVyU2luayBleHRlbmRzIFN0cmluZ0NvbnZlcnNpb25TaW5rQmFzZSB7CiAgZmluYWwgU3RyaW5nQ29udmVyc2lvblNpbmsgX3Npbms7CgogIC8vLyBUaGUgY2Fycnktb3ZlciBmcm9tIHRoZSBwcmV2aW91cyBjaHVuay4KICAvLy8KICAvLy8gSWYgdGhlIHByZXZpb3VzIHNsaWNlIGVuZGVkIGluIGEgbGluZSB3aXRob3V0IGEgbGluZSB0ZXJtaW5hdG9yLAogIC8vLyB0aGVuIHRoZSBuZXh0IHNsaWNlIG1heSBjb250aW51ZSB0aGUgbGluZS4KICBTdHJpbmcgX2NhcnJ5OwoKICAvLy8gV2hldGhlciB0byBza2lwIGEgbGVhZGluZyBMRiBjaGFyYWN0ZXIgZnJvbSB0aGUgbmV4dCBzbGljZS4KICAvLy8KICAvLy8gSWYgdGhlIHByZXZpb3VzIHNsaWNlIGVuZGVkIG9uIGEgQ1IgY2hhcmFjdGVyLCBhIGZvbGxvd2luZyBMRgogIC8vLyB3b3VsZCBiZSBwYXJ0IG9mIHRoZSBzYW1lIGxpbmUgdGVybWluYXRpb24sIGFuZCBzaG91bGQgYmUgaWdub3JlZC4KICAvLy8KICAvLy8gT25seSBgdHJ1ZWAgd2hlbiBbX2NhcnJ5XSBpcyBgbnVsbGAuCiAgYm9vbCBfc2tpcExlYWRpbmdMRiA9IGZhbHNlOwoKICBfTGluZVNwbGl0dGVyU2luayh0aGlzLl9zaW5rKTsKCiAgdm9pZCBhZGRTbGljZShTdHJpbmcgY2h1bmssIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGNodW5rLmxlbmd0aCk7CiAgICAvLyBJZiB0aGUgY2h1bmsgaXMgZW1wdHksIGl0J3MgcHJvYmFibHkgYmVjYXVzZSBpdCdzIHRoZSBsYXN0IG9uZS4KICAgIC8vIEhhbmRsZSB0aGF0IGhlcmUsIHNvIHdlIGtub3cgdGhlIHJhbmdlIGlzIG5vbi1lbXB0eSBiZWxvdy4KICAgIGlmIChzdGFydCA+PSBlbmQpIHsKICAgICAgaWYgKGlzTGFzdCkgY2xvc2UoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKF9jYXJyeSAhPSBudWxsKSB7CiAgICAgIGFzc2VydCghX3NraXBMZWFkaW5nTEYpOwogICAgICBjaHVuayA9IF9jYXJyeSArIGNodW5rLnN1YnN0cmluZyhzdGFydCwgZW5kKTsKICAgICAgc3RhcnQgPSAwOwogICAgICBlbmQgPSBjaHVuay5sZW5ndGg7CiAgICAgIF9jYXJyeSA9IG51bGw7CiAgICB9IGVsc2UgaWYgKF9za2lwTGVhZGluZ0xGKSB7CiAgICAgIGlmIChjaHVuay5jb2RlVW5pdEF0KHN0YXJ0KSA9PSBfTEYpIHsKICAgICAgICBzdGFydCArPSAxOwogICAgICB9CiAgICAgIF9za2lwTGVhZGluZ0xGID0gZmFsc2U7CiAgICB9CiAgICBfYWRkTGluZXMoY2h1bmssIHN0YXJ0LCBlbmQpOwogICAgaWYgKGlzTGFzdCkgY2xvc2UoKTsKICB9CgogIHZvaWQgY2xvc2UoKSB7CiAgICBpZiAoX2NhcnJ5ICE9IG51bGwpIHsKICAgICAgX3NpbmsuYWRkKF9jYXJyeSk7CiAgICAgIF9jYXJyeSA9IG51bGw7CiAgICB9CiAgICBfc2luay5jbG9zZSgpOwogIH0KCiAgdm9pZCBfYWRkTGluZXMoU3RyaW5nIGxpbmVzLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIHZhciBzbGljZVN0YXJ0ID0gc3RhcnQ7CiAgICB2YXIgY2hhciA9IDA7CiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICB2YXIgcHJldmlvdXNDaGFyID0gY2hhcjsKICAgICAgY2hhciA9IGxpbmVzLmNvZGVVbml0QXQoaSk7CiAgICAgIGlmIChjaGFyICE9IF9DUikgewogICAgICAgIGlmIChjaGFyICE9IF9MRikgY29udGludWU7CiAgICAgICAgaWYgKHByZXZpb3VzQ2hhciA9PSBfQ1IpIHsKICAgICAgICAgIHNsaWNlU3RhcnQgPSBpICsgMTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBfc2luay5hZGQobGluZXMuc3Vic3RyaW5nKHNsaWNlU3RhcnQsIGkpKTsKICAgICAgc2xpY2VTdGFydCA9IGkgKyAxOwogICAgfQogICAgaWYgKHNsaWNlU3RhcnQgPCBlbmQpIHsKICAgICAgX2NhcnJ5ID0gbGluZXMuc3Vic3RyaW5nKHNsaWNlU3RhcnQsIGVuZCk7CiAgICB9IGVsc2UgewogICAgICBfc2tpcExlYWRpbmdMRiA9IChjaGFyID09IF9DUik7CiAgICB9CiAgfQp9CgpjbGFzcyBfTGluZVNwbGl0dGVyRXZlbnRTaW5rIGV4dGVuZHMgX0xpbmVTcGxpdHRlclNpbmsKICAgIGltcGxlbWVudHMgRXZlbnRTaW5rPFN0cmluZz4gewogIGZpbmFsIEV2ZW50U2luazxTdHJpbmc+IF9ldmVudFNpbms7CgogIF9MaW5lU3BsaXR0ZXJFdmVudFNpbmsoRXZlbnRTaW5rPFN0cmluZz4gZXZlbnRTaW5rKQogICAgICA6IF9ldmVudFNpbmsgPSBldmVudFNpbmssCiAgICAgICAgc3VwZXIoU3RyaW5nQ29udmVyc2lvblNpbmsuZnJvbShldmVudFNpbmspKTsKCiAgdm9pZCBhZGRFcnJvcihPYmplY3QgbywgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIF9ldmVudFNpbmsuYWRkRXJyb3Iobywgc3RhY2tUcmFjZSk7CiAgfQp9CoCuAE5OPAEWARgUFAFIBEMmRgQ8AUMYASsGREcrLVBAHBIoHyIZIyMeFAoILBoGHC4GBAEmHBsYEiQfIRkjIx4UCggwGgYcMgYSBAFDHlAEAS8sSwQCASM7JAEuBkcxEQFCBkRJBisfASEBQUBHQhgbDgYaHzQRGhUhLBQIHgYiGQQBERoZFQYTBAE1HBIoHyIZIyMeFAoIMRoGHDENJgYEAgE3IyYBNiA1ATUoBAIBH2RhcnQ6Y29udmVydC9saW5lX3NwbGl0dGVyLmRhcnQ6b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvbnZlcnQvc3RyaW5nX2NvbnZlcnNpb24uZGFydKWCLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb252ZXJ0OwoKLy8vIFRoaXMgY2xhc3MgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGZvciBjb252ZXJ0ZXJzIHRvCi8vLyBlZmZpY2llbnRseSB0cmFuc21pdCBTdHJpbmcgZGF0YS4KLy8vCi8vLyBJbnN0ZWFkIG9mIGxpbWl0aW5nIHRoZSBpbnRlcmZhY2UgdG8gb25lIG5vbi1jaHVua2VkIFN0cmluZyBpdCBhY2NlcHRzCi8vLyBwYXJ0aWFsIHN0cmluZ3Mgb3IgY2FuIGJlIHRyYW5zZm9ybWVkIGludG8gYSBieXRlIHNpbmsgdGhhdAovLy8gYWNjZXB0cyBVVEYtOCBjb2RlIHVuaXRzLgovLy8KLy8vIFRoaXMgYWJzdHJhY3QgY2xhc3Mgd2lsbCBsaWtlbHkgZ2V0IG1vcmUgbWV0aG9kcyBvdmVyIHRpbWUuIEltcGxlbWVudGVycyBhcmUKLy8vIHVyZ2VkIHRvIGV4dGVuZCBbU3RyaW5nQ29udmVyc2lvblNpbmtCYXNlXSBvciB0byBtaXggaW4KLy8vIFtTdHJpbmdDb252ZXJzaW9uU2lua01peGluXSwgdG8gZW5zdXJlIHRoYXQgdGhlaXIgY2xhc3MgY292ZXJzIHRoZSBuZXdseQovLy8gYWRkZWQgbWV0aG9kcy4KYWJzdHJhY3QgY2xhc3MgU3RyaW5nQ29udmVyc2lvblNpbmsgZXh0ZW5kcyBDaHVua2VkQ29udmVyc2lvblNpbms8U3RyaW5nPiB7CiAgU3RyaW5nQ29udmVyc2lvblNpbmsoKTsKICBmYWN0b3J5IFN0cmluZ0NvbnZlcnNpb25TaW5rLndpdGhDYWxsYmFjayh2b2lkIGNhbGxiYWNrKFN0cmluZyBhY2N1bXVsYXRlZCkpID0KICAgICAgX1N0cmluZ0NhbGxiYWNrU2luazsKICBmYWN0b3J5IFN0cmluZ0NvbnZlcnNpb25TaW5rLmZyb20oU2luazxTdHJpbmc+IHNpbmspID0gX1N0cmluZ0FkYXB0ZXJTaW5rOwoKICAvLy8gQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSB3cmFwcGluZyB0aGUgZ2l2ZW4gW3NpbmtdLgogIC8vLwogIC8vLyBFdmVyeSBzdHJpbmcgdGhhdCBpcyBhZGRlZCB0byB0aGUgcmV0dXJuZWQgaW5zdGFuY2UgaXMgZm9yd2FyZGVkIHRvCiAgLy8vIHRoZSBbc2lua10uIFRoZSBpbnN0YW5jZSBpcyBhbGxvd2VkIHRvIGJ1ZmZlciBhbmQgaXMgbm90IHJlcXVpcmVkIHRvCiAgLy8vIGZvcndhcmQgaW1tZWRpYXRlbHkuCiAgZmFjdG9yeSBTdHJpbmdDb252ZXJzaW9uU2luay5mcm9tU3RyaW5nU2luayhTdHJpbmdTaW5rIHNpbmspID0KICAgICAgX1N0cmluZ1NpbmtDb252ZXJzaW9uU2luazxTdHJpbmdTaW5rPjsKCiAgLy8vIEFkZHMgdGhlIG5leHQgW2NodW5rXSB0byBgdGhpc2AuCiAgLy8vCiAgLy8vIEFkZHMgdGhlIHN1YnN0cmluZyBkZWZpbmVkIGJ5IFtzdGFydF0gYW5kIFtlbmRdLWV4Y2x1c2l2ZSB0byBgdGhpc2AuCiAgLy8vCiAgLy8vIElmIFtpc0xhc3RdIGlzIGB0cnVlYCBjbG9zZXMgYHRoaXNgLgogIHZvaWQgYWRkU2xpY2UoU3RyaW5nIGNodW5rLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KTsKCiAgLy8vIFJldHVybnMgYHRoaXNgIGFzIGEgc2luayB0aGF0IGFjY2VwdHMgVVRGLTggaW5wdXQuCiAgLy8vCiAgLy8vIElmIHVzZWQsIHRoaXMgbWV0aG9kIG11c3QgYmUgdGhlIGZpcnN0IGFuZCBvbmx5IGNhbGwgdG8gYHRoaXNgLiBJdAogIC8vLyBpbnZhbGlkYXRlcyBgdGhpc2AuIEFsbCBmdXJ0aGVyIG9wZXJhdGlvbnMgbXVzdCBiZSBwZXJmb3JtZWQgb24gdGhlIHJlc3VsdC4KICBCeXRlQ29udmVyc2lvblNpbmsgYXNVdGY4U2luayhib29sIGFsbG93TWFsZm9ybWVkKTsKICAvLyAtIGFzUnVuZVNpbmsKICAvLyAtIGFzQ29kZVVuaXRzU2luawoKICAvLy8gUmV0dXJucyBgdGhpc2AgYXMgYSBbQ2xvc2FibGVTdHJpbmdTaW5rXS4KICAvLy8KICAvLy8gSWYgdXNlZCwgdGhpcyBtZXRob2QgbXVzdCBiZSB0aGUgZmlyc3QgYW5kIG9ubHkgY2FsbCB0byBgdGhpc2AuIEl0CiAgLy8vIGludmFsaWRhdGVzIGB0aGlzYC4gQWxsIGZ1cnRoZXIgb3BlcmF0aW9ucyBtdXN0IGJlIHBlcmZvcm1lZCBvbiB0aGUgcmVzdWx0LgogIENsb3NhYmxlU3RyaW5nU2luayBhc1N0cmluZ1NpbmsoKTsKfQoKLy8vIEEgW0Nsb3NhYmxlU3RyaW5nU2lua10gZXh0ZW5kcyB0aGUgW1N0cmluZ1NpbmtdIGludGVyZmFjZSBieSBhZGRpbmcgYQovLy8gYGNsb3NlYCBtZXRob2QuCmFic3RyYWN0IGNsYXNzIENsb3NhYmxlU3RyaW5nU2luayBleHRlbmRzIFN0cmluZ1NpbmsgewogIC8vLyBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIGNvbWJpbmluZyBhIFtTdHJpbmdTaW5rXSBbc2lua10gYW5kIGEgY2FsbGJhY2sKICAvLy8gW29uQ2xvc2VdIHdoaWNoIGlzIGludm9rZWQgd2hlbiB0aGUgcmV0dXJuZWQgaW5zdGFuY2UgaXMgY2xvc2VkLgogIGZhY3RvcnkgQ2xvc2FibGVTdHJpbmdTaW5rLmZyb21TdHJpbmdTaW5rKFN0cmluZ1Npbmsgc2luaywgdm9pZCBvbkNsb3NlKCkpID0KICAgICAgX0Nsb3NhYmxlU3RyaW5nU2luazsKCiAgLy8vIENsb3NlcyBgdGhpc2AgYW5kIGZsdXNoZXMgYW55IG91dHN0YW5kaW5nIGRhdGEuCiAgdm9pZCBjbG9zZSgpOwp9CgovLy8gVGhpcyBjbGFzcyB3cmFwcyBhbiBleGlzdGluZyBbU3RyaW5nU2lua10gYW5kIGludm9rZXMgYQovLy8gY2xvc3VyZSB3aGVuIFtjbG9zZV0gaXMgaW52b2tlZC4KY2xhc3MgX0Nsb3NhYmxlU3RyaW5nU2luayBpbXBsZW1lbnRzIENsb3NhYmxlU3RyaW5nU2luayB7CiAgZmluYWwgdm9pZCBGdW5jdGlvbigpIF9jYWxsYmFjazsKICBmaW5hbCBTdHJpbmdTaW5rIF9zaW5rOwoKICBfQ2xvc2FibGVTdHJpbmdTaW5rKHRoaXMuX3NpbmssIHRoaXMuX2NhbGxiYWNrKTsKCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9jYWxsYmFjaygpOwogIH0KCiAgdm9pZCB3cml0ZUNoYXJDb2RlKGludCBjaGFyQ29kZSkgewogICAgX3Npbmsud3JpdGVDaGFyQ29kZShjaGFyQ29kZSk7CiAgfQoKICB2b2lkIHdyaXRlKE9iamVjdCBvKSB7CiAgICBfc2luay53cml0ZShvKTsKICB9CgogIHZvaWQgd3JpdGVsbihbT2JqZWN0IG8gPSAiIl0pIHsKICAgIF9zaW5rLndyaXRlbG4obyk7CiAgfQoKICB2b2lkIHdyaXRlQWxsKEl0ZXJhYmxlIG9iamVjdHMsIFtTdHJpbmcgc2VwYXJhdG9yID0gIiJdKSB7CiAgICBfc2luay53cml0ZUFsbChvYmplY3RzLCBzZXBhcmF0b3IpOwogIH0KfQoKLy8vIFRoaXMgY2xhc3Mgd3JhcHMgYW4gZXhpc3RpbmcgW1N0cmluZ0NvbnZlcnNpb25TaW5rXSBhbmQgZXhwb3NlcyBhCi8vLyBbQ2xvc2FibGVTdHJpbmdTaW5rXSBpbnRlcmZhY2UuIFRoZSB3cmFwcGVkIHNpbmsgb25seSBuZWVkcyB0byBpbXBsZW1lbnQKLy8vIGBhZGRgIGFuZCBgY2xvc2VgLgovLyBUT0RPKGZsb2l0c2NoKTogbWFrZSB0aGlzIGNsYXNzIHB1YmxpYz8KY2xhc3MgX1N0cmluZ0NvbnZlcnNpb25TaW5rQXNTdHJpbmdTaW5rQWRhcHRlciBpbXBsZW1lbnRzIENsb3NhYmxlU3RyaW5nU2luayB7CiAgc3RhdGljIGNvbnN0IF9NSU5fU1RSSU5HX1NJWkUgPSAxNjsKCiAgU3RyaW5nQnVmZmVyIF9idWZmZXI7CiAgU3RyaW5nQ29udmVyc2lvblNpbmsgX2NodW5rZWRTaW5rOwoKICBfU3RyaW5nQ29udmVyc2lvblNpbmtBc1N0cmluZ1NpbmtBZGFwdGVyKHRoaXMuX2NodW5rZWRTaW5rKQogICAgICA6IF9idWZmZXIgPSBTdHJpbmdCdWZmZXIoKTsKCiAgdm9pZCBjbG9zZSgpIHsKICAgIGlmIChfYnVmZmVyLmlzTm90RW1wdHkpIF9mbHVzaCgpOwogICAgX2NodW5rZWRTaW5rLmNsb3NlKCk7CiAgfQoKICB2b2lkIHdyaXRlQ2hhckNvZGUoaW50IGNoYXJDb2RlKSB7CiAgICBfYnVmZmVyLndyaXRlQ2hhckNvZGUoY2hhckNvZGUpOwogICAgaWYgKF9idWZmZXIubGVuZ3RoID4gX01JTl9TVFJJTkdfU0laRSkgX2ZsdXNoKCk7CiAgfQoKICB2b2lkIHdyaXRlKE9iamVjdCBvKSB7CiAgICBpZiAoX2J1ZmZlci5pc05vdEVtcHR5KSBfZmx1c2goKTsKICAgIF9jaHVua2VkU2luay5hZGQoby50b1N0cmluZygpKTsKICB9CgogIHZvaWQgd3JpdGVsbihbT2JqZWN0IG8gPSAiIl0pIHsKICAgIF9idWZmZXIud3JpdGVsbihvKTsKICAgIGlmIChfYnVmZmVyLmxlbmd0aCA+IF9NSU5fU1RSSU5HX1NJWkUpIF9mbHVzaCgpOwogIH0KCiAgdm9pZCB3cml0ZUFsbChJdGVyYWJsZSBvYmplY3RzLCBbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSkgewogICAgaWYgKF9idWZmZXIuaXNOb3RFbXB0eSkgX2ZsdXNoKCk7CiAgICB2YXIgaXRlcmF0b3IgPSBvYmplY3RzLml0ZXJhdG9yOwogICAgaWYgKCFpdGVyYXRvci5tb3ZlTmV4dCgpKSByZXR1cm47CiAgICBpZiAoc2VwYXJhdG9yLmlzRW1wdHkpIHsKICAgICAgZG8gewogICAgICAgIF9jaHVua2VkU2luay5hZGQoaXRlcmF0b3IuY3VycmVudC50b1N0cmluZygpKTsKICAgICAgfSB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSk7CiAgICB9IGVsc2UgewogICAgICBfY2h1bmtlZFNpbmsuYWRkKGl0ZXJhdG9yLmN1cnJlbnQudG9TdHJpbmcoKSk7CiAgICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgICAgd3JpdGUoc2VwYXJhdG9yKTsKICAgICAgICBfY2h1bmtlZFNpbmsuYWRkKGl0ZXJhdG9yLmN1cnJlbnQudG9TdHJpbmcoKSk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgX2ZsdXNoKCkgewogICAgdmFyIGFjY3VtdWxhdGVkID0gX2J1ZmZlci50b1N0cmluZygpOwogICAgX2J1ZmZlci5jbGVhcigpOwogICAgX2NodW5rZWRTaW5rLmFkZChhY2N1bXVsYXRlZCk7CiAgfQp9CgovLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhIGJhc2UtY2xhc3MgZm9yIGNvbnZlcnRlcnMgdGhhdCBuZWVkIHRvIGFjY2VwdCBTdHJpbmcKLy8vIGlucHV0cy4KYWJzdHJhY3QgY2xhc3MgU3RyaW5nQ29udmVyc2lvblNpbmtCYXNlIGV4dGVuZHMgU3RyaW5nQ29udmVyc2lvblNpbmtNaXhpbiB7fQoKLy8vIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBtaXhpbiBmb3IgY29udmVydGVycyB0aGF0IG5lZWQgdG8gYWNjZXB0IFN0cmluZwovLy8gaW5wdXRzLgphYnN0cmFjdCBjbGFzcyBTdHJpbmdDb252ZXJzaW9uU2lua01peGluIGltcGxlbWVudHMgU3RyaW5nQ29udmVyc2lvblNpbmsgewogIHZvaWQgYWRkU2xpY2UoU3RyaW5nIHN0ciwgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCk7CiAgdm9pZCBjbG9zZSgpOwoKICB2b2lkIGFkZChTdHJpbmcgc3RyKSB7CiAgICBhZGRTbGljZShzdHIsIDAsIHN0ci5sZW5ndGgsIGZhbHNlKTsKICB9CgogIEJ5dGVDb252ZXJzaW9uU2luayBhc1V0ZjhTaW5rKGJvb2wgYWxsb3dNYWxmb3JtZWQpIHsKICAgIHJldHVybiBfVXRmOENvbnZlcnNpb25TaW5rKHRoaXMsIGFsbG93TWFsZm9ybWVkKTsKICB9CgogIENsb3NhYmxlU3RyaW5nU2luayBhc1N0cmluZ1NpbmsoKSB7CiAgICByZXR1cm4gX1N0cmluZ0NvbnZlcnNpb25TaW5rQXNTdHJpbmdTaW5rQWRhcHRlcih0aGlzKTsKICB9Cn0KCi8vLyBUaGlzIGNsYXNzIGlzIGEgW1N0cmluZ0NvbnZlcnNpb25TaW5rXSB0aGF0IHdyYXBzIGEgW1N0cmluZ1NpbmtdLgpjbGFzcyBfU3RyaW5nU2lua0NvbnZlcnNpb25TaW5rPFRTdHJpbmdTaW5rIGV4dGVuZHMgU3RyaW5nU2luaz4KICAgIGV4dGVuZHMgU3RyaW5nQ29udmVyc2lvblNpbmtCYXNlIHsKICBUU3RyaW5nU2luayBfc3RyaW5nU2luazsKICBfU3RyaW5nU2lua0NvbnZlcnNpb25TaW5rKHRoaXMuX3N0cmluZ1NpbmspOwoKICB2b2lkIGNsb3NlKCkge30KICB2b2lkIGFkZFNsaWNlKFN0cmluZyBzdHIsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIGlmIChzdGFydCAhPSAwIHx8IGVuZCAhPSBzdHIubGVuZ3RoKSB7CiAgICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgICAgX3N0cmluZ1Npbmsud3JpdGVDaGFyQ29kZShzdHIuY29kZVVuaXRBdChpKSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIF9zdHJpbmdTaW5rLndyaXRlKHN0cik7CiAgICB9CiAgICBpZiAoaXNMYXN0KSBjbG9zZSgpOwogIH0KCiAgdm9pZCBhZGQoU3RyaW5nIHN0cikgewogICAgX3N0cmluZ1Npbmsud3JpdGUoc3RyKTsKICB9CgogIEJ5dGVDb252ZXJzaW9uU2luayBhc1V0ZjhTaW5rKGJvb2wgYWxsb3dNYWxmb3JtZWQpIHsKICAgIHJldHVybiBfVXRmOFN0cmluZ1NpbmtBZGFwdGVyKHRoaXMsIF9zdHJpbmdTaW5rLCBhbGxvd01hbGZvcm1lZCk7CiAgfQoKICBDbG9zYWJsZVN0cmluZ1NpbmsgYXNTdHJpbmdTaW5rKCkgewogICAgcmV0dXJuIENsb3NhYmxlU3RyaW5nU2luay5mcm9tU3RyaW5nU2luayhfc3RyaW5nU2luaywgY2xvc2UpOwogIH0KfQoKLy8vIFRoaXMgY2xhc3MgYWNjdW11bGF0ZXMgYWxsIGNodW5rcyBpbnRvIG9uZSBzdHJpbmcKLy8vIGFuZCBpbnZva2VzIGEgY2FsbGJhY2sgd2hlbiB0aGUgc2luayBpcyBjbG9zZWQuCi8vLwovLy8gVGhpcyBjbGFzcyBjYW4gYmUgdXNlZCB0byB0ZXJtaW5hdGUgYSBjaHVua2VkIGNvbnZlcnNpb24uCmNsYXNzIF9TdHJpbmdDYWxsYmFja1NpbmsgZXh0ZW5kcyBfU3RyaW5nU2lua0NvbnZlcnNpb25TaW5rPFN0cmluZ0J1ZmZlcj4gewogIGZpbmFsIHZvaWQgRnVuY3Rpb24oU3RyaW5nKSBfY2FsbGJhY2s7CiAgX1N0cmluZ0NhbGxiYWNrU2luayh0aGlzLl9jYWxsYmFjaykgOiBzdXBlcihTdHJpbmdCdWZmZXIoKSk7CgogIHZvaWQgY2xvc2UoKSB7CiAgICB2YXIgYWNjdW11bGF0ZWQgPSBfc3RyaW5nU2luay50b1N0cmluZygpOwogICAgX3N0cmluZ1NpbmsuY2xlYXIoKTsKICAgIF9jYWxsYmFjayhhY2N1bXVsYXRlZCk7CiAgfQoKICBCeXRlQ29udmVyc2lvblNpbmsgYXNVdGY4U2luayhib29sIGFsbG93TWFsZm9ybWVkKSB7CiAgICByZXR1cm4gX1V0ZjhTdHJpbmdTaW5rQWRhcHRlcih0aGlzLCBfc3RyaW5nU2luaywgYWxsb3dNYWxmb3JtZWQpOwogIH0KfQoKLy8vIFRoaXMgY2xhc3MgYWRhcHRzIGEgc2ltcGxlIFtDaHVua2VkQ29udmVyc2lvblNpbmtdIHRvIGEKLy8vIFtTdHJpbmdDb252ZXJzaW9uU2lua10uCi8vLwovLy8gQWxsIGFkZGl0aW9uYWwgbWV0aG9kcyBvZiB0aGUgW1N0cmluZ0NvbnZlcnNpb25TaW5rXSAoY29tcGFyZWQgdG8gdGhlCi8vLyBDaHVua2VkQ29udmVyc2lvblNpbmspIGFyZSByZWRpcmVjdGVkIHRvIHRoZSBgYWRkYCBtZXRob2QuCmNsYXNzIF9TdHJpbmdBZGFwdGVyU2luayBleHRlbmRzIFN0cmluZ0NvbnZlcnNpb25TaW5rQmFzZSB7CiAgZmluYWwgU2luazxTdHJpbmc+IF9zaW5rOwoKICBfU3RyaW5nQWRhcHRlclNpbmsodGhpcy5fc2luayk7CgogIHZvaWQgYWRkKFN0cmluZyBzdHIpIHsKICAgIF9zaW5rLmFkZChzdHIpOwogIH0KCiAgdm9pZCBhZGRTbGljZShTdHJpbmcgc3RyLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBpZiAoc3RhcnQgPT0gMCAmJiBlbmQgPT0gc3RyLmxlbmd0aCkgewogICAgICBhZGQoc3RyKTsKICAgIH0gZWxzZSB7CiAgICAgIGFkZChzdHIuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpKTsKICAgIH0KICAgIGlmIChpc0xhc3QpIGNsb3NlKCk7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgX3NpbmsuY2xvc2UoKTsKICB9Cn0KCi8vLyBEZWNvZGVzIFVURi04IGNvZGUgdW5pdHMgYW5kIHN0b3JlcyB0aGVtIGluIGEgW1N0cmluZ1NpbmtdLgpjbGFzcyBfVXRmOFN0cmluZ1NpbmtBZGFwdGVyIGV4dGVuZHMgQnl0ZUNvbnZlcnNpb25TaW5rIHsKICBmaW5hbCBfVXRmOERlY29kZXIgX2RlY29kZXI7CiAgZmluYWwgU2luayBfc2luazsKCiAgX1V0ZjhTdHJpbmdTaW5rQWRhcHRlcih0aGlzLl9zaW5rLCBTdHJpbmdTaW5rIHN0cmluZ1NpbmssIGJvb2wgYWxsb3dNYWxmb3JtZWQpCiAgICAgIDogX2RlY29kZXIgPSBfVXRmOERlY29kZXIoc3RyaW5nU2luaywgYWxsb3dNYWxmb3JtZWQpOwoKICB2b2lkIGNsb3NlKCkgewogICAgX2RlY29kZXIuY2xvc2UoKTsKICAgIGlmIChfc2luayAhPSBudWxsKSBfc2luay5jbG9zZSgpOwogIH0KCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGNodW5rKSB7CiAgICBhZGRTbGljZShjaHVuaywgMCwgY2h1bmsubGVuZ3RoLCBmYWxzZSk7CiAgfQoKICB2b2lkIGFkZFNsaWNlKAogICAgICBMaXN0PGludD4gY29kZVVuaXRzLCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGlzTGFzdCkgewogICAgX2RlY29kZXIuY29udmVydChjb2RlVW5pdHMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTsKICAgIGlmIChpc0xhc3QpIGNsb3NlKCk7CiAgfQp9CgovLy8gRGVjb2RlcyBVVEYtOCBjb2RlIHVuaXRzLgovLy8KLy8vIEZvcndhcmRzIHRoZSBkZWNvZGVkIHN0cmluZ3MgdG8gdGhlIGdpdmVuIFtTdHJpbmdDb252ZXJzaW9uU2lua10uCi8vIFRPRE8oZmxvaXRzY2gpOiBtYWtlIHRoaXMgY2xhc3MgcHVibGljPwpjbGFzcyBfVXRmOENvbnZlcnNpb25TaW5rIGV4dGVuZHMgQnl0ZUNvbnZlcnNpb25TaW5rIHsKICBmaW5hbCBfVXRmOERlY29kZXIgX2RlY29kZXI7CiAgZmluYWwgU3RyaW5nQ29udmVyc2lvblNpbmsgX2NodW5rZWRTaW5rOwogIGZpbmFsIFN0cmluZ0J1ZmZlciBfYnVmZmVyOwogIF9VdGY4Q29udmVyc2lvblNpbmsoU3RyaW5nQ29udmVyc2lvblNpbmsgc2luaywgYm9vbCBhbGxvd01hbGZvcm1lZCkKICAgICAgOiB0aGlzLl8oc2luaywgU3RyaW5nQnVmZmVyKCksIGFsbG93TWFsZm9ybWVkKTsKCiAgX1V0ZjhDb252ZXJzaW9uU2luay5fKAogICAgICB0aGlzLl9jaHVua2VkU2luaywgU3RyaW5nQnVmZmVyIHN0cmluZ0J1ZmZlciwgYm9vbCBhbGxvd01hbGZvcm1lZCkKICAgICAgOiBfZGVjb2RlciA9IF9VdGY4RGVjb2RlcihzdHJpbmdCdWZmZXIsIGFsbG93TWFsZm9ybWVkKSwKICAgICAgICBfYnVmZmVyID0gc3RyaW5nQnVmZmVyOwoKICB2b2lkIGNsb3NlKCkgewogICAgX2RlY29kZXIuY2xvc2UoKTsKICAgIGlmIChfYnVmZmVyLmlzTm90RW1wdHkpIHsKICAgICAgdmFyIGFjY3VtdWxhdGVkID0gX2J1ZmZlci50b1N0cmluZygpOwogICAgICBfYnVmZmVyLmNsZWFyKCk7CiAgICAgIF9jaHVua2VkU2luay5hZGRTbGljZShhY2N1bXVsYXRlZCwgMCwgYWNjdW11bGF0ZWQubGVuZ3RoLCB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIF9jaHVua2VkU2luay5jbG9zZSgpOwogICAgfQogIH0KCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGNodW5rKSB7CiAgICBhZGRTbGljZShjaHVuaywgMCwgY2h1bmsubGVuZ3RoLCBmYWxzZSk7CiAgfQoKICB2b2lkIGFkZFNsaWNlKExpc3Q8aW50PiBjaHVuaywgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCBpc0xhc3QpIHsKICAgIF9kZWNvZGVyLmNvbnZlcnQoY2h1bmssIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTsKICAgIGlmIChfYnVmZmVyLmlzTm90RW1wdHkpIHsKICAgICAgdmFyIGFjY3VtdWxhdGVkID0gX2J1ZmZlci50b1N0cmluZygpOwogICAgICBfY2h1bmtlZFNpbmsuYWRkU2xpY2UoYWNjdW11bGF0ZWQsIDAsIGFjY3VtdWxhdGVkLmxlbmd0aCwgaXNMYXN0KTsKICAgICAgX2J1ZmZlci5jbGVhcigpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoaXNMYXN0KSBjbG9zZSgpOwogIH0KfQqBQABOTjwBFgE3JgRLQB4EUTxNE0waURtNATgGSksbQS0BJwZLBitAATkGSVI2EhcBMAZJUiUCAUoUN0xHTxsBNhACATwlOiMaATMBEREEASUjBAEZFAQBIhYEAT0oBAIBRk0XK08mARglAT4iAREmGgQBJSU1BAEZJiQEASIYNQQBPSYlJh0LNyUNNSQaNwgGBAESKhUjBAIBTwxNAUoMSz4QARkpBAE3NgQBJjsEAgFGQCcbLwESPysqNggNHgYZBAEZHAQBN0YEASZCBAIBNjQEPkwpPwERLhkcBAE3RgQCATwcBEo/PBwBIgEZFAQBPysQDSYGGQQBERMEAgFAOh8UAVE9AREWJgQBHi0EARFINxkEAgEeBEYrNx8rHkY2ARlJPyABERYeLBdHDRwGBAEeLQQBTjMeLEkXDgYZBAIBI2RhcnQ6Y29udmVydC9zdHJpbmdfY29udmVyc2lvbi5kYXJ0LG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb252ZXJ0L3V0Zi5kYXJ0wABOhy8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29udmVydDsKCi8vLyBUaGUgVW5pY29kZSBSZXBsYWNlbWVudCBjaGFyYWN0ZXIgYFUrRkZGRGAgKO+/vSkuCmNvbnN0IGludCB1bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXJSdW5lID0gMHhGRkZEOwoKLy8vIFRoZSBVbmljb2RlIEJ5dGUgT3JkZXIgTWFya2VyIChCT00pIGNoYXJhY3RlciBgVStGRUZGYC4KY29uc3QgaW50IHVuaWNvZGVCb21DaGFyYWN0ZXJSdW5lID0gMHhGRUZGOwoKLy8vIEFuIGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBbVXRmOENvZGVjXS4KLy8vCi8vLyBUaGlzIGluc3RhbmNlIHByb3ZpZGVzIGEgY29udmVuaWVudCBhY2Nlc3MgdG8gdGhlIG1vc3QgY29tbW9uIFVURi04Ci8vLyB1c2UgY2FzZXMuCi8vLwovLy8gRXhhbXBsZXM6Ci8vLwovLy8gICAgIHZhciBlbmNvZGVkID0gdXRmOC5lbmNvZGUoIsOOw7HFo8OpcsOxw6XFo8Ouw7bDscOlxLzDrsW+w6XFo8Ou4budw7EiKTsKLy8vICAgICB2YXIgZGVjb2RlZCA9IHV0ZjguZGVjb2RlKFsweDYyLCAweDZjLCAweGMzLCAweGE1LCAweDYyLCAweGMzLCAweGE2LAovLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzIsIDB4NjcsIDB4NzIsIDB4YzMsIDB4YjgsIDB4NjRdKTsKY29uc3QgVXRmOENvZGVjIHV0ZjggPSBVdGY4Q29kZWMoKTsKCi8vLyBBIFtVdGY4Q29kZWNdIGVuY29kZXMgc3RyaW5ncyB0byB1dGYtOCBjb2RlIHVuaXRzIChieXRlcykgYW5kIGRlY29kZXMKLy8vIFVURi04IGNvZGUgdW5pdHMgdG8gc3RyaW5ncy4KY2xhc3MgVXRmOENvZGVjIGV4dGVuZHMgRW5jb2RpbmcgewogIGZpbmFsIGJvb2wgX2FsbG93TWFsZm9ybWVkOwoKICAvLy8gSW5zdGFudGlhdGVzIGEgbmV3IFtVdGY4Q29kZWNdLgogIC8vLwogIC8vLyBUaGUgb3B0aW9uYWwgW2FsbG93TWFsZm9ybWVkXSBhcmd1bWVudCBkZWZpbmVzIGhvdyBbZGVjb2Rlcl0gKGFuZCBbZGVjb2RlXSkKICAvLy8gZGVhbCB3aXRoIGludmFsaWQgb3IgdW50ZXJtaW5hdGVkIGNoYXJhY3RlciBzZXF1ZW5jZXMuCiAgLy8vCiAgLy8vIElmIGl0IGlzIGB0cnVlYCAoYW5kIG5vdCBvdmVycmlkZGVuIGF0IHRoZSBtZXRob2QgaW52b2NhdGlvbikgW2RlY29kZV0gYW5kCiAgLy8vIHRoZSBbZGVjb2Rlcl0gcmVwbGFjZSBpbnZhbGlkIChvciB1bnRlcm1pbmF0ZWQpIG9jdGV0CiAgLy8vIHNlcXVlbmNlcyB3aXRoIHRoZSBVbmljb2RlIFJlcGxhY2VtZW50IGNoYXJhY3RlciBgVStGRkZEYCAo77+9KS4gT3RoZXJ3aXNlCiAgLy8vIHRoZXkgdGhyb3cgYSBbRm9ybWF0RXhjZXB0aW9uXS4KICBjb25zdCBVdGY4Q29kZWMoe2Jvb2wgYWxsb3dNYWxmb3JtZWQgPSBmYWxzZX0pCiAgICAgIDogX2FsbG93TWFsZm9ybWVkID0gYWxsb3dNYWxmb3JtZWQ7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGlzIGNvZGVjLCAidXRmLTgiLgogIFN0cmluZyBnZXQgbmFtZSA9PiAidXRmLTgiOwoKICAvLy8gRGVjb2RlcyB0aGUgVVRGLTggW2NvZGVVbml0c10gKGEgbGlzdCBvZiB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VycykgdG8gdGhlCiAgLy8vIGNvcnJlc3BvbmRpbmcgc3RyaW5nLgogIC8vLwogIC8vLyBJZiB0aGUgW2NvZGVVbml0c10gc3RhcnQgd2l0aCB0aGUgZW5jb2Rpbmcgb2YgYQogIC8vLyBbdW5pY29kZUJvbUNoYXJhY3RlclJ1bmVdLCB0aGF0IGNoYXJhY3RlciBpcyBkaXNjYXJkZWQuCiAgLy8vCiAgLy8vIElmIFthbGxvd01hbGZvcm1lZF0gaXMgYHRydWVgIHRoZSBkZWNvZGVyIHJlcGxhY2VzIGludmFsaWQgKG9yCiAgLy8vIHVudGVybWluYXRlZCkgY2hhcmFjdGVyIHNlcXVlbmNlcyB3aXRoIHRoZSBVbmljb2RlIFJlcGxhY2VtZW50IGNoYXJhY3RlcgogIC8vLyBgVStGRkZEYCAo77+9KS4gT3RoZXJ3aXNlIGl0IHRocm93cyBhIFtGb3JtYXRFeGNlcHRpb25dLgogIC8vLwogIC8vLyBJZiBbYWxsb3dNYWxmb3JtZWRdIGlzIG5vdCBnaXZlbiwgaXQgZGVmYXVsdHMgdG8gdGhlIGBhbGxvd01hbGZvcm1lZGAgdGhhdAogIC8vLyB3YXMgdXNlZCB0byBpbnN0YW50aWF0ZSBgdGhpc2AuCiAgU3RyaW5nIGRlY29kZShMaXN0PGludD4gY29kZVVuaXRzLCB7Ym9vbCBhbGxvd01hbGZvcm1lZH0pIHsKICAgIGFsbG93TWFsZm9ybWVkID8/PSBfYWxsb3dNYWxmb3JtZWQ7CiAgICByZXR1cm4gVXRmOERlY29kZXIoYWxsb3dNYWxmb3JtZWQ6IGFsbG93TWFsZm9ybWVkKS5jb252ZXJ0KGNvZGVVbml0cyk7CiAgfQoKICBVdGY4RW5jb2RlciBnZXQgZW5jb2RlciA9PiBjb25zdCBVdGY4RW5jb2RlcigpOwogIFV0ZjhEZWNvZGVyIGdldCBkZWNvZGVyIHsKICAgIHJldHVybiBVdGY4RGVjb2RlcihhbGxvd01hbGZvcm1lZDogX2FsbG93TWFsZm9ybWVkKTsKICB9Cn0KCi8vLyBUaGlzIGNsYXNzIGNvbnZlcnRzIHN0cmluZ3MgdG8gdGhlaXIgVVRGLTggY29kZSB1bml0cyAoYSBsaXN0IG9mCi8vLyB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VycykuCmNsYXNzIFV0ZjhFbmNvZGVyIGV4dGVuZHMgQ29udmVydGVyPFN0cmluZywgTGlzdDxpbnQ+PiB7CiAgY29uc3QgVXRmOEVuY29kZXIoKTsKCiAgLy8vIENvbnZlcnRzIFtzdHJpbmddIHRvIGl0cyBVVEYtOCBjb2RlIHVuaXRzIChhIGxpc3Qgb2YKICAvLy8gdW5zaWduZWQgOC1iaXQgaW50ZWdlcnMpLgogIC8vLwogIC8vLyBJZiBbc3RhcnRdIGFuZCBbZW5kXSBhcmUgcHJvdmlkZWQsIG9ubHkgdGhlIHN1YnN0cmluZwogIC8vLyBgc3RyaW5nLnN1YnN0cmluZyhzdGFydCwgZW5kKWAgaXMgY29udmVydGVkLgogIFVpbnQ4TGlzdCBjb252ZXJ0KFN0cmluZyBzdHJpbmcsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgdmFyIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGg7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBzdHJpbmdMZW5ndGgpOwogICAgdmFyIGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgaWYgKGxlbmd0aCA9PSAwKSByZXR1cm4gVWludDhMaXN0KDApOwogICAgLy8gQ3JlYXRlIGEgbmV3IGVuY29kZXIgd2l0aCBhIGxlbmd0aCB0aGF0IGlzIGd1YXJhbnRlZWQgdG8gYmUgYmlnIGVub3VnaC4KICAgIC8vIEEgc2luZ2xlIGNvZGUgdW5pdCB1c2VzIGF0IG1vc3QgMyBieXRlcywgYSBzdXJyb2dhdGUgcGFpciBhdCBtb3N0IDQuCiAgICB2YXIgZW5jb2RlciA9IF9VdGY4RW5jb2Rlci53aXRoQnVmZmVyU2l6ZShsZW5ndGggKiAzKTsKICAgIHZhciBlbmRQb3NpdGlvbiA9IGVuY29kZXIuX2ZpbGxCdWZmZXIoc3RyaW5nLCBzdGFydCwgZW5kKTsKICAgIGFzc2VydChlbmRQb3NpdGlvbiA+PSBlbmQgLSAxKTsKICAgIGlmIChlbmRQb3NpdGlvbiAhPSBlbmQpIHsKICAgICAgLy8gRW5jb2Rpbmcgc2tpcHBlZCB0aGUgbGFzdCBjb2RlIHVuaXQuCiAgICAgIC8vIFRoYXQgY2FuIG9ubHkgaGFwcGVuIGlmIHRoZSBsYXN0IGNvZGUgdW5pdCBpcyBhIGxlYWRzdXJyb2dhdGUuCiAgICAgIC8vIEZvcmNlIGVuY29kaW5nIG9mIHRoZSBsZWFkIHN1cnJvZ2F0ZSBieSBpdHNlbGYuCiAgICAgIHZhciBsYXN0Q29kZVVuaXQgPSBzdHJpbmcuY29kZVVuaXRBdChlbmQgLSAxKTsKICAgICAgYXNzZXJ0KF9pc0xlYWRTdXJyb2dhdGUobGFzdENvZGVVbml0KSk7CiAgICAgIC8vIFdlIHVzZSBhIG5vbi1zdXJyb2dhdGUgYXMgYG5leHRVbml0YCBzbyB0aGF0IF93cml0ZVN1cnJvZ2F0ZSBqdXN0CiAgICAgIC8vIHdyaXRlcyB0aGUgbGVhZC1zdXJyb2dhdGUuCiAgICAgIHZhciB3YXNDb21iaW5lZCA9IGVuY29kZXIuX3dyaXRlU3Vycm9nYXRlKGxhc3RDb2RlVW5pdCwgMCk7CiAgICAgIGFzc2VydCghd2FzQ29tYmluZWQpOwogICAgfQogICAgcmV0dXJuIGVuY29kZXIuX2J1ZmZlci5zdWJsaXN0KDAsIGVuY29kZXIuX2J1ZmZlckluZGV4KTsKICB9CgogIC8vLyBTdGFydHMgYSBjaHVua2VkIGNvbnZlcnNpb24uCiAgLy8vCiAgLy8vIFRoZSBjb252ZXJ0ZXIgd29ya3MgbW9yZSBlZmZpY2llbnRseSBpZiB0aGUgZ2l2ZW4gW3NpbmtdIGlzIGEKICAvLy8gW0J5dGVDb252ZXJzaW9uU2lua10uCiAgU3RyaW5nQ29udmVyc2lvblNpbmsgc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPExpc3Q8aW50Pj4gc2luaykgewogICAgcmV0dXJuIF9VdGY4RW5jb2RlclNpbmsoCiAgICAgICAgc2luayBpcyBCeXRlQ29udmVyc2lvblNpbmsgPyBzaW5rIDogQnl0ZUNvbnZlcnNpb25TaW5rLmZyb20oc2luaykpOwogIH0KCiAgLy8gT3ZlcnJpZGUgdGhlIGJhc2UtY2xhc3NlcyBiaW5kLCB0byBwcm92aWRlIGEgYmV0dGVyIHR5cGUuCiAgU3RyZWFtPExpc3Q8aW50Pj4gYmluZChTdHJlYW08U3RyaW5nPiBzdHJlYW0pID0+IHN1cGVyLmJpbmQoc3RyZWFtKTsKfQoKLy8vIFRoaXMgY2xhc3MgZW5jb2RlcyBTdHJpbmdzIHRvIFVURi04IGNvZGUgdW5pdHMgKHVuc2lnbmVkIDggYml0IGludGVnZXJzKS4KLy8gVE9ETyhmbG9pdHNjaCk6IG1ha2UgdGhpcyBjbGFzcyBwdWJsaWMuCmNsYXNzIF9VdGY4RW5jb2RlciB7CiAgaW50IF9jYXJyeSA9IDA7CiAgaW50IF9idWZmZXJJbmRleCA9IDA7CiAgZmluYWwgVWludDhMaXN0IF9idWZmZXI7CgogIHN0YXRpYyBjb25zdCBfREVGQVVMVF9CWVRFX0JVRkZFUl9TSVpFID0gMTAyNDsKCiAgX1V0ZjhFbmNvZGVyKCkgOiB0aGlzLndpdGhCdWZmZXJTaXplKF9ERUZBVUxUX0JZVEVfQlVGRkVSX1NJWkUpOwoKICBfVXRmOEVuY29kZXIud2l0aEJ1ZmZlclNpemUoaW50IGJ1ZmZlclNpemUpCiAgICAgIDogX2J1ZmZlciA9IF9jcmVhdGVCdWZmZXIoYnVmZmVyU2l6ZSk7CgogIC8vLyBBbGxvdyBhbiBpbXBsZW1lbnRhdGlvbiB0byBwaWNrIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgb2Ygc3RvcmluZyBieXRlcy4KICBzdGF0aWMgVWludDhMaXN0IF9jcmVhdGVCdWZmZXIoaW50IHNpemUpID0+IFVpbnQ4TGlzdChzaXplKTsKCiAgLy8vIFRyaWVzIHRvIGNvbWJpbmUgdGhlIGdpdmVuIFtsZWFkaW5nU3Vycm9nYXRlXSB3aXRoIHRoZSBbbmV4dENvZGVVbml0XSBhbmQKICAvLy8gd3JpdGVzIGl0IHRvIFtfYnVmZmVyXS4KICAvLy8KICAvLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBbbmV4dENvZGVVbml0XSB3YXMgY29tYmluZWQgd2l0aCB0aGUKICAvLy8gW2xlYWRpbmdTdXJyb2dhdGVdLiBJZiBpdCB3YXNuJ3QgdGhlbiBuZXh0Q29kZVVuaXQgd2FzIG5vdCBhIHRyYWlsaW5nCiAgLy8vIHN1cnJvZ2F0ZSBhbmQgaGFzIG5vdCBiZWVuIHdyaXR0ZW4geWV0LgogIC8vLwogIC8vLyBJdCBpcyBzYWZlIHRvIHBhc3MgMCBmb3IgW25leHRDb2RlVW5pdF0gaW4gd2hpY2ggY2FzZSBvbmx5IHRoZSBsZWFkaW5nCiAgLy8vIHN1cnJvZ2F0ZSBpcyB3cml0dGVuLgogIGJvb2wgX3dyaXRlU3Vycm9nYXRlKGludCBsZWFkaW5nU3Vycm9nYXRlLCBpbnQgbmV4dENvZGVVbml0KSB7CiAgICBpZiAoX2lzVGFpbFN1cnJvZ2F0ZShuZXh0Q29kZVVuaXQpKSB7CiAgICAgIHZhciBydW5lID0gX2NvbWJpbmVTdXJyb2dhdGVQYWlyKGxlYWRpbmdTdXJyb2dhdGUsIG5leHRDb2RlVW5pdCk7CiAgICAgIC8vIElmIHRoZSBydW5lIGlzIGVuY29kZWQgd2l0aCAyIGNvZGUtdW5pdHMgdGhlbiBpdCBtdXN0IGJlIGVuY29kZWQKICAgICAgLy8gd2l0aCA0IGJ5dGVzIGluIFVURi04LgogICAgICBhc3NlcnQocnVuZSA+IF9USFJFRV9CWVRFX0xJTUlUKTsKICAgICAgYXNzZXJ0KHJ1bmUgPD0gX0ZPVVJfQllURV9MSU1JVCk7CiAgICAgIF9idWZmZXJbX2J1ZmZlckluZGV4KytdID0gMHhGMCB8IChydW5lID4+IDE4KTsKICAgICAgX2J1ZmZlcltfYnVmZmVySW5kZXgrK10gPSAweDgwIHwgKChydW5lID4+IDEyKSAmIDB4M2YpOwogICAgICBfYnVmZmVyW19idWZmZXJJbmRleCsrXSA9IDB4ODAgfCAoKHJ1bmUgPj4gNikgJiAweDNmKTsKICAgICAgX2J1ZmZlcltfYnVmZmVySW5kZXgrK10gPSAweDgwIHwgKHJ1bmUgJiAweDNmKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgewogICAgICAvLyBUT0RPKGZsb2l0c2NoKTogYWxsb3cgdG8gdGhyb3cgb24gbWFsZm9ybWVkIHN0cmluZ3MuCiAgICAgIC8vIEVuY29kZSB0aGUgaGFsZi1zdXJyb2dhdGUgZGlyZWN0bHkgaW50byBVVEYtOC4gVGhpcyB5aWVsZHMKICAgICAgLy8gaW52YWxpZCBVVEYtOCwgYnV0IHdlIHN0YXJ0ZWQgb3V0IHdpdGggaW52YWxpZCBVVEYtMTYuCgogICAgICAvLyBTdXJyb2dhdGVzIGFyZSBhbHdheXMgZW5jb2RlZCBpbiAzIGJ5dGVzIGluIFVURi04LgogICAgICBfYnVmZmVyW19idWZmZXJJbmRleCsrXSA9IDB4RTAgfCAobGVhZGluZ1N1cnJvZ2F0ZSA+PiAxMik7CiAgICAgIF9idWZmZXJbX2J1ZmZlckluZGV4KytdID0gMHg4MCB8ICgobGVhZGluZ1N1cnJvZ2F0ZSA+PiA2KSAmIDB4M2YpOwogICAgICBfYnVmZmVyW19idWZmZXJJbmRleCsrXSA9IDB4ODAgfCAobGVhZGluZ1N1cnJvZ2F0ZSAmIDB4M2YpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQoKICAvLy8gRmlsbHMgdGhlIFtfYnVmZmVyXSB3aXRoIGFzIG1hbnkgY2hhcmFjdGVycyBhcyBwb3NzaWJsZS4KICAvLy8KICAvLy8gRG9lcyBub3QgZW5jb2RlIGFueSB0cmFpbGluZyBsZWFkLXN1cnJvZ2F0ZS4gVGhpcyBtdXN0IGJlIGRvbmUgYnkgdGhlCiAgLy8vIGNhbGxlci4KICAvLy8KICAvLy8gUmV0dXJucyB0aGUgcG9zaXRpb24gaW4gdGhlIHN0cmluZy4gVGhlIHJldHVybmVkIGluZGV4IHBvaW50cyB0byB0aGUKICAvLy8gZmlyc3QgY29kZSB1bml0IHRoYXQgaGFzbid0IGJlZW4gZW5jb2RlZC4KICBpbnQgX2ZpbGxCdWZmZXIoU3RyaW5nIHN0ciwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBpZiAoc3RhcnQgIT0gZW5kICYmIF9pc0xlYWRTdXJyb2dhdGUoc3RyLmNvZGVVbml0QXQoZW5kIC0gMSkpKSB7CiAgICAgIC8vIERvbid0IGhhbmRsZSBhIHRyYWlsaW5nIGxlYWQtc3Vycm9nYXRlIGluIHRoaXMgbG9vcC4gVGhlIGNhbGxlciBoYXMKICAgICAgLy8gdG8gZGVhbCB3aXRoIHRob3NlLgogICAgICBlbmQtLTsKICAgIH0KICAgIGludCBzdHJpbmdJbmRleDsKICAgIGZvciAoc3RyaW5nSW5kZXggPSBzdGFydDsgc3RyaW5nSW5kZXggPCBlbmQ7IHN0cmluZ0luZGV4KyspIHsKICAgICAgdmFyIGNvZGVVbml0ID0gc3RyLmNvZGVVbml0QXQoc3RyaW5nSW5kZXgpOwogICAgICAvLyBBU0NJSSBoYXMgdGhlIHNhbWUgcmVwcmVzZW50YXRpb24gaW4gVVRGLTggYW5kIFVURi0xNi4KICAgICAgaWYgKGNvZGVVbml0IDw9IF9PTkVfQllURV9MSU1JVCkgewogICAgICAgIGlmIChfYnVmZmVySW5kZXggPj0gX2J1ZmZlci5sZW5ndGgpIGJyZWFrOwogICAgICAgIF9idWZmZXJbX2J1ZmZlckluZGV4KytdID0gY29kZVVuaXQ7CiAgICAgIH0gZWxzZSBpZiAoX2lzTGVhZFN1cnJvZ2F0ZShjb2RlVW5pdCkpIHsKICAgICAgICBpZiAoX2J1ZmZlckluZGV4ICsgMyA+PSBfYnVmZmVyLmxlbmd0aCkgYnJlYWs7CiAgICAgICAgLy8gTm90ZSB0aGF0IGl0IGlzIHNhZmUgdG8gcmVhZCB0aGUgbmV4dCBjb2RlIHVuaXQuIFdlIGRlY3JlbWVudGVkCiAgICAgICAgLy8gW2VuZF0gYWJvdmUgd2hlbiB0aGUgbGFzdCB2YWxpZCBjb2RlIHVuaXQgd2FzIGEgbGVhZGluZyBzdXJyb2dhdGUuCiAgICAgICAgdmFyIG5leHRDb2RlVW5pdCA9IHN0ci5jb2RlVW5pdEF0KHN0cmluZ0luZGV4ICsgMSk7CiAgICAgICAgdmFyIHdhc0NvbWJpbmVkID0gX3dyaXRlU3Vycm9nYXRlKGNvZGVVbml0LCBuZXh0Q29kZVVuaXQpOwogICAgICAgIGlmICh3YXNDb21iaW5lZCkgc3RyaW5nSW5kZXgrKzsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgcnVuZSA9IGNvZGVVbml0OwogICAgICAgIGlmIChydW5lIDw9IF9UV09fQllURV9MSU1JVCkgewogICAgICAgICAgaWYgKF9idWZmZXJJbmRleCArIDEgPj0gX2J1ZmZlci5sZW5ndGgpIGJyZWFrOwogICAgICAgICAgX2J1ZmZlcltfYnVmZmVySW5kZXgrK10gPSAweEMwIHwgKHJ1bmUgPj4gNik7CiAgICAgICAgICBfYnVmZmVyW19idWZmZXJJbmRleCsrXSA9IDB4ODAgfCAocnVuZSAmIDB4M2YpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhc3NlcnQocnVuZSA8PSBfVEhSRUVfQllURV9MSU1JVCk7CiAgICAgICAgICBpZiAoX2J1ZmZlckluZGV4ICsgMiA+PSBfYnVmZmVyLmxlbmd0aCkgYnJlYWs7CiAgICAgICAgICBfYnVmZmVyW19idWZmZXJJbmRleCsrXSA9IDB4RTAgfCAocnVuZSA+PiAxMik7CiAgICAgICAgICBfYnVmZmVyW19idWZmZXJJbmRleCsrXSA9IDB4ODAgfCAoKHJ1bmUgPj4gNikgJiAweDNmKTsKICAgICAgICAgIF9idWZmZXJbX2J1ZmZlckluZGV4KytdID0gMHg4MCB8IChydW5lICYgMHgzZik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3RyaW5nSW5kZXg7CiAgfQp9CgovLy8gVGhpcyBjbGFzcyBlbmNvZGVzIGNodW5rZWQgc3RyaW5ncyB0byBVVEYtOCBjb2RlIHVuaXRzICh1bnNpZ25lZCA4LWJpdAovLy8gaW50ZWdlcnMpLgpjbGFzcyBfVXRmOEVuY29kZXJTaW5rIGV4dGVuZHMgX1V0ZjhFbmNvZGVyIHdpdGggU3RyaW5nQ29udmVyc2lvblNpbmtNaXhpbiB7CiAgZmluYWwgQnl0ZUNvbnZlcnNpb25TaW5rIF9zaW5rOwoKICBfVXRmOEVuY29kZXJTaW5rKHRoaXMuX3NpbmspOwoKICB2b2lkIGNsb3NlKCkgewogICAgaWYgKF9jYXJyeSAhPSAwKSB7CiAgICAgIC8vIGFkZFNsaWNlIHdpbGwgY2FsbCBjbG9zZSBhZ2FpbiwgYnV0IHRoZW4gdGhlIGNhcnJ5IG11c3QgYmUgZXF1YWwgdG8gMC4KICAgICAgYWRkU2xpY2UoIiIsIDAsIDAsIHRydWUpOwogICAgICByZXR1cm47CiAgICB9CiAgICBfc2luay5jbG9zZSgpOwogIH0KCiAgdm9pZCBhZGRTbGljZShTdHJpbmcgc3RyLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBfYnVmZmVySW5kZXggPSAwOwoKICAgIGlmIChzdGFydCA9PSBlbmQgJiYgIWlzTGFzdCkgewogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKF9jYXJyeSAhPSAwKSB7CiAgICAgIHZhciBuZXh0Q29kZVVuaXQgPSAwOwogICAgICBpZiAoc3RhcnQgIT0gZW5kKSB7CiAgICAgICAgbmV4dENvZGVVbml0ID0gc3RyLmNvZGVVbml0QXQoc3RhcnQpOwogICAgICB9IGVsc2UgewogICAgICAgIGFzc2VydChpc0xhc3QpOwogICAgICB9CiAgICAgIHZhciB3YXNDb21iaW5lZCA9IF93cml0ZVN1cnJvZ2F0ZShfY2FycnksIG5leHRDb2RlVW5pdCk7CiAgICAgIC8vIEVpdGhlciB3ZSBnb3QgYSBub24tZW1wdHkgc3RyaW5nLCBvciB3ZSBtdXN0IG5vdCBoYXZlIGJlZW4gY29tYmluZWQuCiAgICAgIGFzc2VydCghd2FzQ29tYmluZWQgfHwgc3RhcnQgIT0gZW5kKTsKICAgICAgaWYgKHdhc0NvbWJpbmVkKSBzdGFydCsrOwogICAgICBfY2FycnkgPSAwOwogICAgfQogICAgZG8gewogICAgICBzdGFydCA9IF9maWxsQnVmZmVyKHN0ciwgc3RhcnQsIGVuZCk7CiAgICAgIHZhciBpc0xhc3RTbGljZSA9IGlzTGFzdCAmJiAoc3RhcnQgPT0gZW5kKTsKICAgICAgaWYgKHN0YXJ0ID09IGVuZCAtIDEgJiYgX2lzTGVhZFN1cnJvZ2F0ZShzdHIuY29kZVVuaXRBdChzdGFydCkpKSB7CiAgICAgICAgaWYgKGlzTGFzdCAmJiBfYnVmZmVySW5kZXggPCBfYnVmZmVyLmxlbmd0aCAtIDMpIHsKICAgICAgICAgIC8vIFRoZXJlIGlzIHN0aWxsIHNwYWNlIGZvciB0aGUgbGFzdCBpbmNvbXBsZXRlIHN1cnJvZ2F0ZS4KICAgICAgICAgIC8vIFdlIHVzZSBhIG5vbi1zdXJyb2dhdGUgYXMgc2Vjb25kIGFyZ3VtZW50LiBUaGlzIHdheSB0aGUKICAgICAgICAgIC8vIGZ1bmN0aW9uIHdpbGwganVzdCBhZGQgdGhlIHN1cnJvZ2F0ZS1oYWxmIHRvIHRoZSBidWZmZXIuCiAgICAgICAgICB2YXIgaGFzQmVlbkNvbWJpbmVkID0gX3dyaXRlU3Vycm9nYXRlKHN0ci5jb2RlVW5pdEF0KHN0YXJ0KSwgMCk7CiAgICAgICAgICBhc3NlcnQoIWhhc0JlZW5Db21iaW5lZCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIE90aGVyd2lzZSBzdG9yZSBpdCBpbiB0aGUgY2FycnkuIElmIGlzTGFzdCBpcyB0cnVlLCB0aGVuCiAgICAgICAgICAvLyBjbG9zZSB3aWxsIGZsdXNoIHRoZSBsYXN0IGNhcnJ5LgogICAgICAgICAgX2NhcnJ5ID0gc3RyLmNvZGVVbml0QXQoc3RhcnQpOwogICAgICAgIH0KICAgICAgICBzdGFydCsrOwogICAgICB9CiAgICAgIF9zaW5rLmFkZFNsaWNlKF9idWZmZXIsIDAsIF9idWZmZXJJbmRleCwgaXNMYXN0U2xpY2UpOwogICAgICBfYnVmZmVySW5kZXggPSAwOwogICAgfSB3aGlsZSAoc3RhcnQgPCBlbmQpOwogICAgaWYgKGlzTGFzdCkgY2xvc2UoKTsKICB9CgogIC8vIFRPRE8oZmxvaXRzY2gpOiBpbXBsZW1lbnQgYXNVdGY4U2luay4gU2xpZ3RobHkgY29tcGxpY2F0ZWQgYmVjYXVzZSBpdAogIC8vIG5lZWRzIHRvIGRlYWwgd2l0aCBtYWxmb3JtZWQgaW5wdXQuCn0KCi8vLyBUaGlzIGNsYXNzIGNvbnZlcnRzIFVURi04IGNvZGUgdW5pdHMgKGxpc3RzIG9mIHVuc2lnbmVkIDgtYml0IGludGVnZXJzKQovLy8gdG8gYSBzdHJpbmcuCmNsYXNzIFV0ZjhEZWNvZGVyIGV4dGVuZHMgQ29udmVydGVyPExpc3Q8aW50PiwgU3RyaW5nPiB7CiAgZmluYWwgYm9vbCBfYWxsb3dNYWxmb3JtZWQ7CgogIC8vLyBJbnN0YW50aWF0ZXMgYSBuZXcgW1V0ZjhEZWNvZGVyXS4KICAvLy8KICAvLy8gVGhlIG9wdGlvbmFsIFthbGxvd01hbGZvcm1lZF0gYXJndW1lbnQgZGVmaW5lcyBob3cgW2NvbnZlcnRdIGRlYWxzCiAgLy8vIHdpdGggaW52YWxpZCBvciB1bnRlcm1pbmF0ZWQgY2hhcmFjdGVyIHNlcXVlbmNlcy4KICAvLy8KICAvLy8gSWYgaXQgaXMgYHRydWVgIFtjb252ZXJ0XSByZXBsYWNlcyBpbnZhbGlkIChvciB1bnRlcm1pbmF0ZWQpIGNoYXJhY3RlcgogIC8vLyBzZXF1ZW5jZXMgd2l0aCB0aGUgVW5pY29kZSBSZXBsYWNlbWVudCBjaGFyYWN0ZXIgYFUrRkZGRGAgKO+/vSkuIE90aGVyd2lzZQogIC8vLyBpdCB0aHJvd3MgYSBbRm9ybWF0RXhjZXB0aW9uXS4KICBjb25zdCBVdGY4RGVjb2Rlcih7Ym9vbCBhbGxvd01hbGZvcm1lZCA9IGZhbHNlfSkKICAgICAgOiBfYWxsb3dNYWxmb3JtZWQgPSBhbGxvd01hbGZvcm1lZDsKCiAgLy8vIENvbnZlcnRzIHRoZSBVVEYtOCBbY29kZVVuaXRzXSAoYSBsaXN0IG9mIHVuc2lnbmVkIDgtYml0IGludGVnZXJzKSB0byB0aGUKICAvLy8gY29ycmVzcG9uZGluZyBzdHJpbmcuCiAgLy8vCiAgLy8vIFVzZXMgdGhlIGNvZGUgdW5pdHMgZnJvbSBbc3RhcnRdIHRvLCBidXQgbm8gaW5jbHVkaW5nLCBbZW5kXS4KICAvLy8gSWYgW2VuZF0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYGNvZGVVbml0cy5sZW5ndGhgLgogIC8vLwogIC8vLyBJZiB0aGUgW2NvZGVVbml0c10gc3RhcnQgd2l0aCB0aGUgZW5jb2Rpbmcgb2YgYQogIC8vLyBbdW5pY29kZUJvbUNoYXJhY3RlclJ1bmVdLCB0aGF0IGNoYXJhY3RlciBpcyBkaXNjYXJkZWQuCiAgU3RyaW5nIGNvbnZlcnQoTGlzdDxpbnQ+IGNvZGVVbml0cywgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSB7CiAgICAvLyBBbGxvdyB0aGUgaW1wbGVtZW50YXRpb24gdG8gaW50ZXJjZXB0IGFuZCBzcGVjaWFsaXplIGJhc2VkIG9uIHRoZSB0eXBlCiAgICAvLyBvZiBjb2RlVW5pdHMuCiAgICB2YXIgcmVzdWx0ID0gX2NvbnZlcnRJbnRlcmNlcHRlZChfYWxsb3dNYWxmb3JtZWQsIGNvZGVVbml0cywgc3RhcnQsIGVuZCk7CiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICB2YXIgbGVuZ3RoID0gY29kZVVuaXRzLmxlbmd0aDsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGxlbmd0aCk7CgogICAgLy8gRmFzdCBjYXNlIGZvciBBU0NJSSBzdHJpbmdzIGF2b2lkcyBTdHJpbmdCdWZmZXIvX1V0ZjhEZWNvZGVyLgogICAgaW50IG9uZUJ5dGVzID0gX3NjYW5PbmVCeXRlQ2hhcmFjdGVycyhjb2RlVW5pdHMsIHN0YXJ0LCBlbmQpOwogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKICAgIGJvb2wgaXNGaXJzdENoYXJhY3RlciA9IHRydWU7CiAgICBpZiAob25lQnl0ZXMgPiAwKSB7CiAgICAgIHZhciBmaXJzdFBhcnQgPSBTdHJpbmcuZnJvbUNoYXJDb2Rlcyhjb2RlVW5pdHMsIHN0YXJ0LCBzdGFydCArIG9uZUJ5dGVzKTsKICAgICAgc3RhcnQgKz0gb25lQnl0ZXM7CiAgICAgIGlmIChzdGFydCA9PSBlbmQpIHsKICAgICAgICByZXR1cm4gZmlyc3RQYXJ0OwogICAgICB9CiAgICAgIGJ1ZmZlciA9IFN0cmluZ0J1ZmZlcihmaXJzdFBhcnQpOwogICAgICBpc0ZpcnN0Q2hhcmFjdGVyID0gZmFsc2U7CiAgICB9CgogICAgYnVmZmVyID8/PSBTdHJpbmdCdWZmZXIoKTsKICAgIHZhciBkZWNvZGVyID0gX1V0ZjhEZWNvZGVyKGJ1ZmZlciwgX2FsbG93TWFsZm9ybWVkKTsKICAgIGRlY29kZXIuX2lzRmlyc3RDaGFyYWN0ZXIgPSBpc0ZpcnN0Q2hhcmFjdGVyOwogICAgZGVjb2Rlci5jb252ZXJ0KGNvZGVVbml0cywgc3RhcnQsIGVuZCk7CiAgICBkZWNvZGVyLmZsdXNoKGNvZGVVbml0cywgZW5kKTsKICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIC8vLyBTdGFydHMgYSBjaHVua2VkIGNvbnZlcnNpb24uCiAgLy8vCiAgLy8vIFRoZSBjb252ZXJ0ZXIgd29ya3MgbW9yZSBlZmZpY2llbnRseSBpZiB0aGUgZ2l2ZW4gW3NpbmtdIGlzIGEKICAvLy8gW1N0cmluZ0NvbnZlcnNpb25TaW5rXS4KICBCeXRlQ29udmVyc2lvblNpbmsgc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPFN0cmluZz4gc2luaykgewogICAgU3RyaW5nQ29udmVyc2lvblNpbmsgc3RyaW5nU2luazsKICAgIGlmIChzaW5rIGlzIFN0cmluZ0NvbnZlcnNpb25TaW5rKSB7CiAgICAgIHN0cmluZ1NpbmsgPSBzaW5rOwogICAgfSBlbHNlIHsKICAgICAgc3RyaW5nU2luayA9IFN0cmluZ0NvbnZlcnNpb25TaW5rLmZyb20oc2luayk7CiAgICB9CiAgICByZXR1cm4gc3RyaW5nU2luay5hc1V0ZjhTaW5rKF9hbGxvd01hbGZvcm1lZCk7CiAgfQoKICAvLyBPdmVycmlkZSB0aGUgYmFzZS1jbGFzc2VzIGJpbmQsIHRvIHByb3ZpZGUgYSBiZXR0ZXIgdHlwZS4KICBTdHJlYW08U3RyaW5nPiBiaW5kKFN0cmVhbTxMaXN0PGludD4+IHN0cmVhbSkgPT4gc3VwZXIuYmluZChzdHJlYW0pOwoKICBleHRlcm5hbCBDb252ZXJ0ZXI8TGlzdDxpbnQ+LCBUPiBmdXNlPFQ+KENvbnZlcnRlcjxTdHJpbmcsIFQ+IG5leHQpOwoKICBleHRlcm5hbCBzdGF0aWMgU3RyaW5nIF9jb252ZXJ0SW50ZXJjZXB0ZWQoCiAgICAgIGJvb2wgYWxsb3dNYWxmb3JtZWQsIExpc3Q8aW50PiBjb2RlVW5pdHMsIGludCBzdGFydCwgaW50IGVuZCk7Cn0KCi8vIFVURi04IGNvbnN0YW50cy4KY29uc3QgaW50IF9PTkVfQllURV9MSU1JVCA9IDB4N2Y7IC8vIDcgYml0cwpjb25zdCBpbnQgX1RXT19CWVRFX0xJTUlUID0gMHg3ZmY7IC8vIDExIGJpdHMKY29uc3QgaW50IF9USFJFRV9CWVRFX0xJTUlUID0gMHhmZmZmOyAvLyAxNiBiaXRzCmNvbnN0IGludCBfRk9VUl9CWVRFX0xJTUlUID0gMHgxMGZmZmY7IC8vIDIxIGJpdHMsIHRydW5jYXRlZCB0byBVbmljb2RlIG1heC4KCi8vIFVURi0xNiBjb25zdGFudHMuCmNvbnN0IGludCBfU1VSUk9HQVRFX1RBR19NQVNLID0gMHhGQzAwOwpjb25zdCBpbnQgX1NVUlJPR0FURV9WQUxVRV9NQVNLID0gMHgzRkY7CmNvbnN0IGludCBfTEVBRF9TVVJST0dBVEVfTUlOID0gMHhEODAwOwpjb25zdCBpbnQgX1RBSUxfU1VSUk9HQVRFX01JTiA9IDB4REMwMDsKCmJvb2wgX2lzTGVhZFN1cnJvZ2F0ZShpbnQgY29kZVVuaXQpID0+CiAgICAoY29kZVVuaXQgJiBfU1VSUk9HQVRFX1RBR19NQVNLKSA9PSBfTEVBRF9TVVJST0dBVEVfTUlOOwpib29sIF9pc1RhaWxTdXJyb2dhdGUoaW50IGNvZGVVbml0KSA9PgogICAgKGNvZGVVbml0ICYgX1NVUlJPR0FURV9UQUdfTUFTSykgPT0gX1RBSUxfU1VSUk9HQVRFX01JTjsKaW50IF9jb21iaW5lU3Vycm9nYXRlUGFpcihpbnQgbGVhZCwgaW50IHRhaWwpID0+CiAgICAweDEwMDAwICsgKChsZWFkICYgX1NVUlJPR0FURV9WQUxVRV9NQVNLKSA8PCAxMCkgfAogICAgKHRhaWwgJiBfU1VSUk9HQVRFX1ZBTFVFX01BU0spOwoKLy8vIERlY29kZXMgVVRGLTguCi8vLwovLy8gVGhlIGRlY29kZXIgaGFuZGxlcyBjaHVua2VkIGlucHV0LgovLyBUT0RPKGZsb2l0c2NoKTogbWFrZSB0aGlzIGNsYXNzIHB1YmxpYy4KY2xhc3MgX1V0ZjhEZWNvZGVyIHsKICBmaW5hbCBib29sIF9hbGxvd01hbGZvcm1lZDsKICBmaW5hbCBTdHJpbmdTaW5rIF9zdHJpbmdTaW5rOwogIGJvb2wgX2lzRmlyc3RDaGFyYWN0ZXIgPSB0cnVlOwogIGludCBfdmFsdWUgPSAwOwogIGludCBfZXhwZWN0ZWRVbml0cyA9IDA7CiAgaW50IF9leHRyYVVuaXRzID0gMDsKCiAgX1V0ZjhEZWNvZGVyKHRoaXMuX3N0cmluZ1NpbmssIHRoaXMuX2FsbG93TWFsZm9ybWVkKTsKCiAgYm9vbCBnZXQgaGFzUGFydGlhbElucHV0ID0+IF9leHBlY3RlZFVuaXRzID4gMDsKCiAgLy8gTGltaXRzIG9mIG9uZSB0aHJvdWdoIGZvdXIgYnl0ZSBlbmNvZGluZ3MuCiAgc3RhdGljIGNvbnN0IExpc3Q8aW50PiBfTElNSVRTID0gPGludD5bCiAgICBfT05FX0JZVEVfTElNSVQsCiAgICBfVFdPX0JZVEVfTElNSVQsCiAgICBfVEhSRUVfQllURV9MSU1JVCwKICAgIF9GT1VSX0JZVEVfTElNSVQKICBdOwoKICB2b2lkIGNsb3NlKCkgewogICAgZmx1c2goKTsKICB9CgogIC8vLyBGbHVzaGVzIHRoaXMgZGVjb2RlciBhcyBpZiBjbG9zZWQuCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIHRocm93cyBpZiB0aGUgaW5wdXQgd2FzIHBhcnRpYWwgYW5kIHRoZSBkZWNvZGVyIHdhcwogIC8vLyBjb25zdHJ1Y3RlZCB3aXRoIGBhbGxvd01hbGZvcm1lZGAgc2V0IHRvIGBmYWxzZWAuCiAgLy8vCiAgLy8vIFRoZSBbc291cmNlXSBhbmQgW29mZnNldF0gb2YgdGhlIGN1cnJlbnQgcG9zaXRpb24gbWF5IGJlIHByb3ZpZGVkLAogIC8vLyBhbmQgYXJlIGluY2x1ZGVkIGluIHRoZSBleGNlcHRpb24gaWYgb25lIGlzIHRocm93bi4KICB2b2lkIGZsdXNoKFtMaXN0PGludD4gc291cmNlLCBpbnQgb2Zmc2V0XSkgewogICAgaWYgKGhhc1BhcnRpYWxJbnB1dCkgewogICAgICBpZiAoIV9hbGxvd01hbGZvcm1lZCkgewogICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICAgIlVuZmluaXNoZWQgVVRGLTggb2N0ZXQgc2VxdWVuY2UiLCBzb3VyY2UsIG9mZnNldCk7CiAgICAgIH0KICAgICAgX3N0cmluZ1Npbmsud3JpdGVDaGFyQ29kZSh1bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXJSdW5lKTsKICAgICAgX3ZhbHVlID0gMDsKICAgICAgX2V4cGVjdGVkVW5pdHMgPSAwOwogICAgICBfZXh0cmFVbml0cyA9IDA7CiAgICB9CiAgfQoKICB2b2lkIGNvbnZlcnQoTGlzdDxpbnQ+IGNvZGVVbml0cywgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCkgewogICAgdmFyIHZhbHVlID0gX3ZhbHVlOwogICAgdmFyIGV4cGVjdGVkVW5pdHMgPSBfZXhwZWN0ZWRVbml0czsKICAgIHZhciBleHRyYVVuaXRzID0gX2V4dHJhVW5pdHM7CiAgICBfdmFsdWUgPSAwOwogICAgX2V4cGVjdGVkVW5pdHMgPSAwOwogICAgX2V4dHJhVW5pdHMgPSAwOwoKICAgIHZhciBpID0gc3RhcnRJbmRleDsKICAgIGxvb3A6CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBtdWx0aWJ5dGU6CiAgICAgIGlmIChleHBlY3RlZFVuaXRzID4gMCkgewogICAgICAgIGRvIHsKICAgICAgICAgIGlmIChpID09IGVuZEluZGV4KSB7CiAgICAgICAgICAgIGJyZWFrIGxvb3A7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgdW5pdCA9IGNvZGVVbml0c1tpXTsKICAgICAgICAgIGlmICgodW5pdCAmIDB4QzApICE9IDB4ODApIHsKICAgICAgICAgICAgZXhwZWN0ZWRVbml0cyA9IDA7CiAgICAgICAgICAgIGlmICghX2FsbG93TWFsZm9ybWVkKSB7CiAgICAgICAgICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAiQmFkIFVURi04IGVuY29kaW5nIDB4JHt1bml0LnRvUmFkaXhTdHJpbmcoMTYpfSIsCiAgICAgICAgICAgICAgICAgIGNvZGVVbml0cywKICAgICAgICAgICAgICAgICAgaSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX2lzRmlyc3RDaGFyYWN0ZXIgPSBmYWxzZTsKICAgICAgICAgICAgX3N0cmluZ1Npbmsud3JpdGVDaGFyQ29kZSh1bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXJSdW5lKTsKICAgICAgICAgICAgYnJlYWsgbXVsdGlieXRlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFsdWUgPSAodmFsdWUgPDwgNikgfCAodW5pdCAmIDB4M2YpOwogICAgICAgICAgICBleHBlY3RlZFVuaXRzLS07CiAgICAgICAgICAgIGkrKzsKICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlIChleHBlY3RlZFVuaXRzID4gMCk7CiAgICAgICAgaWYgKHZhbHVlIDw9IF9MSU1JVFNbZXh0cmFVbml0cyAtIDFdKSB7CiAgICAgICAgICAvLyBPdmVybHkgbG9uZyBlbmNvZGluZy4gVGhlIHZhbHVlIGNvdWxkIGJlIGVuY29kZWQgd2l0aCBhIHNob3J0ZXIKICAgICAgICAgIC8vIGVuY29kaW5nLgogICAgICAgICAgaWYgKCFfYWxsb3dNYWxmb3JtZWQpIHsKICAgICAgICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgIk92ZXJsb25nIGVuY29kaW5nIG9mIDB4JHt2YWx1ZS50b1JhZGl4U3RyaW5nKDE2KX0iLAogICAgICAgICAgICAgICAgY29kZVVuaXRzLAogICAgICAgICAgICAgICAgaSAtIGV4dHJhVW5pdHMgLSAxKTsKICAgICAgICAgIH0KICAgICAgICAgIGV4cGVjdGVkVW5pdHMgPSBleHRyYVVuaXRzID0gMDsKICAgICAgICAgIHZhbHVlID0gdW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyUnVuZTsKICAgICAgICB9CiAgICAgICAgaWYgKHZhbHVlID4gX0ZPVVJfQllURV9MSU1JVCkgewogICAgICAgICAgaWYgKCFfYWxsb3dNYWxmb3JtZWQpIHsKICAgICAgICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgIkNoYXJhY3RlciBvdXRzaWRlIHZhbGlkIFVuaWNvZGUgcmFuZ2U6ICIKICAgICAgICAgICAgICAgICIweCR7dmFsdWUudG9SYWRpeFN0cmluZygxNil9IiwKICAgICAgICAgICAgICAgIGNvZGVVbml0cywKICAgICAgICAgICAgICAgIGkgLSBleHRyYVVuaXRzIC0gMSk7CiAgICAgICAgICB9CiAgICAgICAgICB2YWx1ZSA9IHVuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlclJ1bmU7CiAgICAgICAgfQogICAgICAgIGlmICghX2lzRmlyc3RDaGFyYWN0ZXIgfHwgdmFsdWUgIT0gdW5pY29kZUJvbUNoYXJhY3RlclJ1bmUpIHsKICAgICAgICAgIF9zdHJpbmdTaW5rLndyaXRlQ2hhckNvZGUodmFsdWUpOwogICAgICAgIH0KICAgICAgICBfaXNGaXJzdENoYXJhY3RlciA9IGZhbHNlOwogICAgICB9CgogICAgICB3aGlsZSAoaSA8IGVuZEluZGV4KSB7CiAgICAgICAgdmFyIG9uZUJ5dGVzID0gX3NjYW5PbmVCeXRlQ2hhcmFjdGVycyhjb2RlVW5pdHMsIGksIGVuZEluZGV4KTsKICAgICAgICBpZiAob25lQnl0ZXMgPiAwKSB7CiAgICAgICAgICBfaXNGaXJzdENoYXJhY3RlciA9IGZhbHNlOwogICAgICAgICAgYXNzZXJ0KGkgKyBvbmVCeXRlcyA8PSBlbmRJbmRleCk7CiAgICAgICAgICBfc3RyaW5nU2luay53cml0ZShTdHJpbmcuZnJvbUNoYXJDb2Rlcyhjb2RlVW5pdHMsIGksIGkgKyBvbmVCeXRlcykpOwoKICAgICAgICAgIGkgKz0gb25lQnl0ZXM7CiAgICAgICAgICBpZiAoaSA9PSBlbmRJbmRleCkgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHZhciB1bml0ID0gY29kZVVuaXRzW2krK107CiAgICAgICAgLy8gVE9ETyhmbG9pdHNjaCk6IHRoZSB3YXkgd2UgdGVzdCB3ZSBjb3VsZCBwb3RlbnRpYWxseSBhbGxvdwogICAgICAgIC8vIHVuaXRzIHRoYXQgYXJlIHRvbyBsYXJnZSwgaWYgdGhleSBoYXBwZW4gdG8gaGF2ZSB0aGUKICAgICAgICAvLyByaWdodCBiaXQtcGF0dGVybi4gKFNhbWUgaXMgdHJ1ZSBmb3IgdGhlIG11bHRpYnl0ZSBsb29wIGFib3ZlKS4KICAgICAgICAvLyBUT0RPKGZsb2l0c2NoKTogb3B0aW1pemUgdGhpcyBsb29wLiBTZWU6CiAgICAgICAgLy8gaHR0cHM6Ly9jb2RlcmV2aWV3LmNocm9taXVtLm9yZy8yMjkyOTAyMi9kaWZmLzEvc2RrL2xpYi9jb252ZXJ0L3V0Zi5kYXJ0P2NvbHVtbl93aWR0aD04MAogICAgICAgIGlmICh1bml0IDwgMCkgewogICAgICAgICAgLy8gVE9ETyhmbG9pdHNjaCk6IHNob3VsZCB0aGlzIGJlIHVuaXQgPD0gMCA/CiAgICAgICAgICBpZiAoIV9hbGxvd01hbGZvcm1lZCkgewogICAgICAgICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAiTmVnYXRpdmUgVVRGLTggY29kZSB1bml0OiAtMHgkeygtdW5pdCkudG9SYWRpeFN0cmluZygxNil9IiwKICAgICAgICAgICAgICAgIGNvZGVVbml0cywKICAgICAgICAgICAgICAgIGkgLSAxKTsKICAgICAgICAgIH0KICAgICAgICAgIF9zdHJpbmdTaW5rLndyaXRlQ2hhckNvZGUodW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyUnVuZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFzc2VydCh1bml0ID4gX09ORV9CWVRFX0xJTUlUKTsKICAgICAgICAgIGlmICgodW5pdCAmIDB4RTApID09IDB4QzApIHsKICAgICAgICAgICAgdmFsdWUgPSB1bml0ICYgMHgxRjsKICAgICAgICAgICAgZXhwZWN0ZWRVbml0cyA9IGV4dHJhVW5pdHMgPSAxOwogICAgICAgICAgICBjb250aW51ZSBsb29wOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCh1bml0ICYgMHhGMCkgPT0gMHhFMCkgewogICAgICAgICAgICB2YWx1ZSA9IHVuaXQgJiAweDBGOwogICAgICAgICAgICBleHBlY3RlZFVuaXRzID0gZXh0cmFVbml0cyA9IDI7CiAgICAgICAgICAgIGNvbnRpbnVlIGxvb3A7CiAgICAgICAgICB9CiAgICAgICAgICAvLyAweEY1LCAweEY2IC4uLiAweEZGIG5ldmVyIGFwcGVhciBpbiB2YWxpZCBVVEYtOCBzZXF1ZW5jZXMuCiAgICAgICAgICBpZiAoKHVuaXQgJiAweEY4KSA9PSAweEYwICYmIHVuaXQgPCAweEY1KSB7CiAgICAgICAgICAgIHZhbHVlID0gdW5pdCAmIDB4MDc7CiAgICAgICAgICAgIGV4cGVjdGVkVW5pdHMgPSBleHRyYVVuaXRzID0gMzsKICAgICAgICAgICAgY29udGludWUgbG9vcDsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghX2FsbG93TWFsZm9ybWVkKSB7CiAgICAgICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICJCYWQgVVRGLTggZW5jb2RpbmcgMHgke3VuaXQudG9SYWRpeFN0cmluZygxNil9IiwKICAgICAgICAgICAgICAgIGNvZGVVbml0cywKICAgICAgICAgICAgICAgIGkgLSAxKTsKICAgICAgICAgIH0KICAgICAgICAgIHZhbHVlID0gdW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyUnVuZTsKICAgICAgICAgIGV4cGVjdGVkVW5pdHMgPSBleHRyYVVuaXRzID0gMDsKICAgICAgICAgIF9pc0ZpcnN0Q2hhcmFjdGVyID0gZmFsc2U7CiAgICAgICAgICBfc3RyaW5nU2luay53cml0ZUNoYXJDb2RlKHZhbHVlKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYnJlYWsgbG9vcDsKICAgIH0KICAgIGlmIChleHBlY3RlZFVuaXRzID4gMCkgewogICAgICBfdmFsdWUgPSB2YWx1ZTsKICAgICAgX2V4cGVjdGVkVW5pdHMgPSBleHBlY3RlZFVuaXRzOwogICAgICBfZXh0cmFVbml0cyA9IGV4dHJhVW5pdHM7CiAgICB9CiAgfQp9CgovLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gW3VuaXRzXSBzdGFydGluZyBhdCBvZmZzZXQgW2Zyb21dIHdoaWNoIGhhdmUKLy8gdGhlIGxlZnRtb3N0IGJpdCBzZXQgdG8gMC4KLy8KLy8gVG8gaW5jcmVhc2UgcGVyZm9ybWFuY2Ugb2YgdGhpcyBjcml0aWNhbCBtZXRob2Qgd2UgaGF2ZSBhIHNwZWNpYWwgdmFyaWFudCBvZgovLyBpdCBpbXBsZW1lbnRlZCBpbiB0aGUgVk0ncyBwYXRjaCBmaWxlcywgd2hpY2ggaXMgd2h5IHdlIG1ha2UgaXQgZXh0ZXJuYWwuCmV4dGVybmFsIGludCBfc2Nhbk9uZUJ5dGVDaGFyYWN0ZXJzKExpc3Q8aW50PiB1bml0cywgaW50IGZyb20sIGludCBlbmRJbmRleCk7CoIuAE5OPAEWATQ0ATwsAUIESA8EDgQ7TUkkAUohIx4BJgZSPQZRPE8mMSoBJx4BTxwGNj4GRU89BlEmPihLBAEyHDkEAgFFHjkXATsgBjwzPyZAHipPTDs/JB4uSDk1LkskQhwGPQQBIwZEHEYdTAQBP0cCAU4rFRIYGwExAUMBLi0BTz8BUB4GP0wuBk0cQSpISiAoKDU+PTYTDT5EQAE8QUlCFAYEAT8GTA4GSzA0RU0dDQYVQjJAKTMsLzdLTjxDKA8dJzk4OhEtOTlBOgoIBhgEAgFLD00iASABERdQIA4GEwQBPxYBIw4GARccGi4PGAg/TiwgEgYJLDJJO0VFRkskEUYuKgoRCD0YGxkEAUspAgFMETkeASgGSTgGTU8lMyoBUBwGRD4GNj5CThVOGhUGASM6AUVCGSIYUBkaGggoIAYBHzkyLCMeBAEjBkQeQSUoGQ00BjMEAT9HAUcBLkUCARQsLjFNARUoKSgoASc9Jz0xNyQBEwQnKxUeICESGhcBOAEyATAqFRUXFQUBEQ0EASkGRjgGSTovGx4fQAhCEhoXBgQBRBgoIhAYFQEYChMRHw0fGAwjJx8kJUQdFg4nSB0TMh0RDCUwTRciI0UbJQwqMwooIiM6MBslDDMKRiwKIwgBHUccJSxPARkkCiNGQEs0ZBg4IiNNGxgMRhEqJyEsGwwnISwbDEg2ISwbDCIjQhsYDDMqJSwKCBIGHRYmIAYEAgFPHgNQTU4BFWRhcnQ6Y29udmVydC91dGYuZGFydDRvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvZGV2ZWxvcGVyL2RldmVsb3Blci5kYXJ0iWwvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIEludGVyYWN0IHdpdGggZGV2ZWxvcGVyIHRvb2xzIHN1Y2ggYXMgdGhlIGRlYnVnZ2VyIGFuZCBpbnNwZWN0b3IuCi8vLwovLy8gVGhpcyBsaWJyYXJ5IGlzIHBsYXRmb3JtIGRlcGVuZGVudCBhbmQgaGFzIHNlcGFyYXRlIGltcGxlbWVudGF0aW9ucyBmb3IKLy8vIGJvdGggd2ViIGFuZCB0aGUgRGFydCBWTS4gQSBzcGVjaWZpYyBwbGF0Zm9ybSBtYXkgbm90IHN1cHBvcnQgYWxsCi8vLyBvcGVyYXRpb25zLgovLy8KLy8vIFRvIHVzZSB0aGlzIGxpYnJhcnkgaW4geW91ciBjb2RlOgovLy8KLy8vICAgICBpbXBvcnQgJ2RhcnQ6ZGV2ZWxvcGVyJzsKLy8vCi8vLyB7QGNhdGVnb3J5IENvcmV9CmxpYnJhcnkgZGFydC5kZXZlbG9wZXI7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnOwppbXBvcnQgJ2RhcnQ6Y29udmVydCc7CmltcG9ydCAnZGFydDppc29sYXRlJyBzaG93IElzb2xhdGUsIFJhd1JlY2VpdmVQb3J0LCBTZW5kUG9ydDsKCnBhcnQgJ2V4dGVuc2lvbi5kYXJ0JzsKcGFydCAncHJvZmlsZXIuZGFydCc7CnBhcnQgJ3NlcnZpY2UuZGFydCc7CnBhcnQgJ3RpbWVsaW5lLmRhcnQnOwoKLy8vIElmIFt3aGVuXSBpcyB0cnVlLCBzdG9wIHRoZSBwcm9ncmFtIGFzIGlmIGEgYnJlYWtwb2ludCB3ZXJlIGhpdCBhdCB0aGUKLy8vIGZvbGxvd2luZyBzdGF0ZW1lbnQuCi8vLwovLy8gUmV0dXJucyB0aGUgdmFsdWUgb2YgW3doZW5dLiBTb21lIGRlYnVnZ2VycyBtYXkgZGlzcGxheSBbbWVzc2FnZV0uCi8vLwovLy8gTk9URTogV2hlbiBpbnZva2VkLCB0aGUgaXNvbGF0ZSB3aWxsIG5vdCByZXR1cm4gdW50aWwgYSBkZWJ1Z2dlcgovLy8gY29udGludWVzIGV4ZWN1dGlvbi4gV2hlbiBydW5uaW5nIGluIHRoZSBEYXJ0IFZNLCB0aGUgYmVoYXZpb3VyIGlzIHRoZSBzYW1lCi8vLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90IGEgZGVidWdnZXIgaXMgY29ubmVjdGVkLiBXaGVuIGNvbXBpbGVkIHRvCi8vLyBKYXZhU2NyaXB0LCB0aGlzIHVzZXMgdGhlICJkZWJ1Z2dlciIgc3RhdGVtZW50LCBhbmQgYmVoYXZlcyBleGFjdGx5IGFzCi8vLyB0aGF0IGRvZXMuCmV4dGVybmFsIGJvb2wgZGVidWdnZXIoe2Jvb2wgd2hlbjogdHJ1ZSwgU3RyaW5nIG1lc3NhZ2V9KTsKCi8vLyBTZW5kIGEgcmVmZXJlbmNlIHRvIFtvYmplY3RdIHRvIGFueSBhdHRhY2hlZCBkZWJ1Z2dlcnMuCi8vLwovLy8gRGVidWdnZXJzIG1heSBvcGVuIGFuIGluc3BlY3RvciBvbiB0aGUgb2JqZWN0LiBSZXR1cm5zIHRoZSBhcmd1bWVudC4KZXh0ZXJuYWwgT2JqZWN0IGluc3BlY3QoT2JqZWN0IG9iamVjdCk7CgovLy8gRW1pdCBhIGxvZyBldmVudC4KLy8vCi8vLyBUaGlzIGZ1bmN0aW9uIHdhcyBkZXNpZ25lZCB0byBtYXAgY2xvc2VseSB0byB0aGUgbG9nZ2luZyBpbmZvcm1hdGlvbgovLy8gY29sbGVjdGVkIGJ5IGBwYWNrYWdlOmxvZ2dpbmdgLgovLy8KLy8vIC0gW21lc3NhZ2VdIGlzIHRoZSBsb2cgbWVzc2FnZQovLy8gLSBbdGltZV0gKG9wdGlvbmFsKSBpcyB0aGUgdGltZXN0YW1wCi8vLyAtIFtzZXF1ZW5jZU51bWJlcl0gKG9wdGlvbmFsKSBpcyBhIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBzZXF1ZW5jZSBudW1iZXIKLy8vIC0gW2xldmVsXSAob3B0aW9uYWwpIGlzIHRoZSBzZXZlcml0eSBsZXZlbCAoYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDIwMDApOyBzZWUKLy8vICAgdGhlIGBwYWNrYWdlOmxvZ2dpbmdgIGBMZXZlbGAgY2xhc3MgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBwb3NzaWJsZSB2YWx1ZXMKLy8vIC0gW25hbWVdIChvcHRpb25hbCkgaXMgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBvZiB0aGUgbG9nIG1lc3NhZ2UKLy8vIC0gW3pvbmVdIChvcHRpb25hbCkgdGhlIHpvbmUgd2hlcmUgdGhlIGxvZyB3YXMgZW1pdHRlZAovLy8gLSBbZXJyb3JdIChvcHRpb25hbCkgYW4gZXJyb3Igb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGxvZyBldmVudAovLy8gLSBbc3RhY2tUcmFjZV0gKG9wdGlvbmFsKSBhIHN0YWNrIHRyYWNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGxvZyBldmVudApleHRlcm5hbCB2b2lkIGxvZygKICBTdHJpbmcgbWVzc2FnZSwgewogIERhdGVUaW1lIHRpbWUsCiAgaW50IHNlcXVlbmNlTnVtYmVyLAogIGludCBsZXZlbDogMCwKICBTdHJpbmcgbmFtZTogJycsCiAgWm9uZSB6b25lLAogIE9iamVjdCBlcnJvciwKICBTdGFja1RyYWNlIHN0YWNrVHJhY2UsCn0pOwpFAE5OPAFGBExGEAQmBCEEFRgBFRc+ARcWFRYBSxkERwRFUEtLDzsBPARJKAEWBEkkBCMpUFFRRTtISxMUERYQEw0QGQQBDmRhcnQ6ZGV2ZWxvcGVyNG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9kZXZlbG9wZXIvZXh0ZW5zaW9uLmRhcnSXqS8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuZGV2ZWxvcGVyOwoKLy8vIEEgcmVzcG9uc2UgdG8gYSBzZXJ2aWNlIHByb3RvY29sIGV4dGVuc2lvbiBSUEMuCi8vLwovLy8gSWYgdGhlIFJQQyB3YXMgc3VjY2Vzc2Z1bCwgdXNlIFtTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2UucmVzdWx0XSwgb3RoZXJ3aXNlCi8vLyB1c2UgW1NlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5lcnJvcl0uCmNsYXNzIFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZSB7CiAgLy8vIFRoZSByZXN1bHQgb2YgYSBzdWNjZXNzZnVsIHNlcnZpY2UgcHJvdG9jb2wgZXh0ZW5zaW9uIFJQQy4KICBmaW5hbCBTdHJpbmcgcmVzdWx0OwoKICAvLy8gVGhlIGVycm9yIGNvZGUgYXNzb2NpYXRlZCB3aXRoIGEgZmFpbGVkIHNlcnZpY2UgcHJvdG9jb2wgZXh0ZW5zaW9uIFJQQy4KICBmaW5hbCBpbnQgZXJyb3JDb2RlOwoKICAvLy8gVGhlIGRldGFpbHMgb2YgYSBmYWlsZWQgc2VydmljZSBwcm90b2NvbCBleHRlbnNpb24gUlBDLgogIGZpbmFsIFN0cmluZyBlcnJvckRldGFpbDsKCiAgLy8vIENyZWF0ZXMgYSBzdWNjZXNzZnVsIHJlc3BvbnNlIHRvIGEgc2VydmljZSBwcm90b2NvbCBleHRlbnNpb24gUlBDLgogIC8vLwogIC8vLyBSZXF1aXJlcyBbcmVzdWx0XSB0byBiZSBhIEpTT04gb2JqZWN0IGVuY29kZWQgYXMgYSBzdHJpbmcuIFdoZW4gZm9ybWluZwogIC8vLyB0aGUgSlNPTi1SUEMgbWVzc2FnZSBbcmVzdWx0XSB3aWxsIGJlIGlubGluZWQgZGlyZWN0bHkuCiAgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlLnJlc3VsdChTdHJpbmcgcmVzdWx0KQogICAgICA6IHJlc3VsdCA9IHJlc3VsdCwKICAgICAgICBlcnJvckNvZGUgPSBudWxsLAogICAgICAgIGVycm9yRGV0YWlsID0gbnVsbCB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChyZXN1bHQsICJyZXN1bHQiKTsKICB9CgogIC8vLyBDcmVhdGVzIGFuIGVycm9yIHJlc3BvbnNlIHRvIGEgc2VydmljZSBwcm90b2NvbCBleHRlbnNpb24gUlBDLgogIC8vLwogIC8vLyBSZXF1aXJlcyBbZXJyb3JDb2RlXSB0byBiZSBbaW52YWxpZFBhcmFtc10gb3IgYmV0d2VlbiBbZXh0ZW5zaW9uRXJyb3JNaW5dCiAgLy8vIGFuZCBbZXh0ZW5zaW9uRXJyb3JNYXhdLiBSZXF1aXJlcyBbZXJyb3JEZXRhaWxdIHRvIGJlIGEgSlNPTiBvYmplY3QKICAvLy8gZW5jb2RlZCBhcyBhIHN0cmluZy4gV2hlbiBmb3JtaW5nIHRoZSBKU09OLVJQQyBtZXNzYWdlIFtlcnJvckRldGFpbF0gd2lsbAogIC8vLyBiZSBpbmxpbmVkIGRpcmVjdGx5LgogIFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5lcnJvcihpbnQgZXJyb3JDb2RlLCBTdHJpbmcgZXJyb3JEZXRhaWwpCiAgICAgIDogcmVzdWx0ID0gbnVsbCwKICAgICAgICBlcnJvckNvZGUgPSBlcnJvckNvZGUsCiAgICAgICAgZXJyb3JEZXRhaWwgPSBlcnJvckRldGFpbCB7CiAgICBfdmFsaWRhdGVFcnJvckNvZGUoZXJyb3JDb2RlKTsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGVycm9yRGV0YWlsLCAiZXJyb3JEZXRhaWwiKTsKICB9CgogIC8vLyBJbnZhbGlkIG1ldGhvZCBwYXJhbWV0ZXIocykgZXJyb3IgY29kZS4KICBAZGVwcmVjYXRlZAogIHN0YXRpYyBjb25zdCBrSW52YWxpZFBhcmFtcyA9IGludmFsaWRQYXJhbXM7CgogIC8vLyBHZW5lcmljIGV4dGVuc2lvbiBlcnJvciBjb2RlLgogIEBkZXByZWNhdGVkCiAgc3RhdGljIGNvbnN0IGtFeHRlbnNpb25FcnJvciA9IGV4dGVuc2lvbkVycm9yOwoKICAvLy8gTWF4aW11bSBleHRlbnNpb24gcHJvdmlkZWQgZXJyb3IgY29kZS4KICBAZGVwcmVjYXRlZAogIHN0YXRpYyBjb25zdCBrRXh0ZW5zaW9uRXJyb3JNYXggPSBleHRlbnNpb25FcnJvck1heDsKCiAgLy8vIE1pbmltdW0gZXh0ZW5zaW9uIHByb3ZpZGVkIGVycm9yIGNvZGUuCiAgQGRlcHJlY2F0ZWQKICBzdGF0aWMgY29uc3Qga0V4dGVuc2lvbkVycm9yTWluID0gZXh0ZW5zaW9uRXJyb3JNaW47CgogIC8vLyBJbnZhbGlkIG1ldGhvZCBwYXJhbWV0ZXIocykgZXJyb3IgY29kZS4KICBzdGF0aWMgY29uc3QgaW52YWxpZFBhcmFtcyA9IC0zMjYwMjsKCiAgLy8vIEdlbmVyaWMgZXh0ZW5zaW9uIGVycm9yIGNvZGUuCiAgc3RhdGljIGNvbnN0IGV4dGVuc2lvbkVycm9yID0gLTMyMDAwOwoKICAvLy8gTWF4aW11bSBleHRlbnNpb24gcHJvdmlkZWQgZXJyb3IgY29kZS4KICBzdGF0aWMgY29uc3QgZXh0ZW5zaW9uRXJyb3JNYXggPSAtMzIwMDA7CgogIC8vLyBNaW5pbXVtIGV4dGVuc2lvbiBwcm92aWRlZCBlcnJvciBjb2RlLgogIHN0YXRpYyBjb25zdCBleHRlbnNpb25FcnJvck1pbiA9IC0zMjAxNjsKCiAgc3RhdGljIFN0cmluZyBfZXJyb3JDb2RlTWVzc2FnZShpbnQgZXJyb3JDb2RlKSB7CiAgICBfdmFsaWRhdGVFcnJvckNvZGUoZXJyb3JDb2RlKTsKICAgIGlmIChlcnJvckNvZGUgPT0gaW52YWxpZFBhcmFtcykgewogICAgICByZXR1cm4gIkludmFsaWQgcGFyYW1zIjsKICAgIH0KICAgIHJldHVybiAiU2VydmVyIGVycm9yIjsKICB9CgogIHN0YXRpYyBfdmFsaWRhdGVFcnJvckNvZGUoaW50IGVycm9yQ29kZSkgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwoZXJyb3JDb2RlLCAiZXJyb3JDb2RlIik7CiAgICBpZiAoZXJyb3JDb2RlID09IGludmFsaWRQYXJhbXMpIHJldHVybjsKICAgIGlmICgoZXJyb3JDb2RlID49IGV4dGVuc2lvbkVycm9yTWluKSAmJiAoZXJyb3JDb2RlIDw9IGV4dGVuc2lvbkVycm9yTWF4KSkgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZShlcnJvckNvZGUsICJlcnJvckNvZGUiLCAiT3V0IG9mIHJhbmdlIik7CiAgfQoKICAvLy8gRGV0ZXJtaW5lcyBpZiB0aGlzIHJlc3BvbnNlIHJlcHJlc2VudHMgYW4gZXJyb3IuCiAgYm9vbCBpc0Vycm9yKCkgPT4gKGVycm9yQ29kZSAhPSBudWxsKSAmJiAoZXJyb3JEZXRhaWwgIT0gbnVsbCk7CgogIC8vIGlnbm9yZTogdW51c2VkX2VsZW1lbnQsIGNhbGxlZCBmcm9tIHJ1bnRpbWUvbGliL2RldmVsb3Blci5kYXJ0CiAgU3RyaW5nIF90b1N0cmluZygpIHsKICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgewogICAgICByZXR1cm4gcmVzdWx0OwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KGVycm9yQ29kZSAhPSBudWxsKTsKICAgICAgYXNzZXJ0KGVycm9yRGV0YWlsICE9IG51bGwpOwogICAgICByZXR1cm4ganNvbi5lbmNvZGUoewogICAgICAgICdjb2RlJzogZXJyb3JDb2RlLAogICAgICAgICdtZXNzYWdlJzogX2Vycm9yQ29kZU1lc3NhZ2UoZXJyb3JDb2RlKSwKICAgICAgICAnZGF0YSc6IHsnZGV0YWlscyc6IGVycm9yRGV0YWlsfQogICAgICB9KTsKICAgIH0KICB9Cn0KCi8vLyBBIHNlcnZpY2UgcHJvdG9jb2wgZXh0ZW5zaW9uIGhhbmRsZXIuIFJlZ2lzdGVyZWQgd2l0aCBbcmVnaXN0ZXJFeHRlbnNpb25dLgovLy8KLy8vIE11c3QgY29tcGxldGUgdG8gYSBbU2VydmljZUV4dGVuc2lvblJlc3BvbnNlXS4gW21ldGhvZF0gaXMgdGhlIG1ldGhvZCBuYW1lCi8vLyBvZiB0aGUgc2VydmljZSBwcm90b2NvbCByZXF1ZXN0LCBhbmQgW3BhcmFtZXRlcnNdIGlzIGEgbWFwIGhvbGRpbmcgdGhlCi8vLyBwYXJhbWV0ZXJzIHRvIHRoZSBzZXJ2aWNlIHByb3RvY29sIHJlcXVlc3QuCi8vLwovLy8gKk5PVEUqOiBhbGwgcGFyYW1ldGVyIG5hbWVzIGFuZCB2YWx1ZXMgYXJlIGVuY29kZWQgYXMgc3RyaW5ncy4KdHlwZWRlZiBGdXR1cmU8U2VydmljZUV4dGVuc2lvblJlc3BvbnNlPiBTZXJ2aWNlRXh0ZW5zaW9uSGFuZGxlcigKICAgIFN0cmluZyBtZXRob2QsIE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1ldGVycyk7CgovLy8gUmVnaXN0ZXIgYSBbU2VydmljZUV4dGVuc2lvbkhhbmRsZXJdIHRoYXQgd2lsbCBiZSBpbnZva2VkIGluIHRoaXMgaXNvbGF0ZQovLy8gZm9yIFttZXRob2RdLiAqTk9URSo6IFNlcnZpY2UgcHJvdG9jb2wgZXh0ZW5zaW9ucyBtdXN0IGJlIHJlZ2lzdGVyZWQKLy8vIGluIGVhY2ggaXNvbGF0ZS4KLy8vCi8vLyAqTk9URSo6IFttZXRob2RdIG11c3QgYmVnaW4gd2l0aCAnZXh0LicgYW5kIHlvdSBzaG91bGQgdXNlIHRoZSBmb2xsb3dpbmcKLy8vIHN0cnVjdHVyZSB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBvdGhlciBwYWNrYWdlczogJ2V4dC5wYWNrYWdlLmNvbW1hbmQnLgovLy8gVGhhdCBpcywgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSAnZXh0LicgcHJlZml4LCBzaG91bGQgYmUgdGhlIHJlZ2lzdGVyaW5nCi8vLyBwYWNrYWdlIG5hbWUgZm9sbG93ZWQgYnkgYW5vdGhlciBwZXJpb2QgKCcuJykgYW5kIHRoZW4gdGhlIGNvbW1hbmQgbmFtZS4KLy8vIEZvciBleGFtcGxlOiAnZXh0LmRhcnQuaW8uZ2V0T3BlbkZpbGVzJy4KLy8vCi8vLyBCZWNhdXNlIHNlcnZpY2UgZXh0ZW5zaW9ucyBhcmUgaXNvbGF0ZSBzcGVjaWZpYywgY2xpZW50cyB1c2luZyBleHRlbnNpb25zCi8vLyBtdXN0IGFsd2F5cyBpbmNsdWRlIGFuICdpc29sYXRlSWQnIHBhcmFtZXRlciB3aXRoIGVhY2ggUlBDLgp2b2lkIHJlZ2lzdGVyRXh0ZW5zaW9uKFN0cmluZyBtZXRob2QsIFNlcnZpY2VFeHRlbnNpb25IYW5kbGVyIGhhbmRsZXIpIHsKICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChtZXRob2QsICdtZXRob2QnKTsKICBpZiAoIW1ldGhvZC5zdGFydHNXaXRoKCdleHQuJykpIHsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKG1ldGhvZCwgJ21ldGhvZCcsICdNdXN0IGJlZ2luIHdpdGggZXh0LicpOwogIH0KICBpZiAoX2xvb2t1cEV4dGVuc2lvbihtZXRob2QpICE9IG51bGwpIHsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCdFeHRlbnNpb24gYWxyZWFkeSByZWdpc3RlcmVkOiAkbWV0aG9kJyk7CiAgfQogIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGhhbmRsZXIsICdoYW5kbGVyJyk7CiAgX3JlZ2lzdGVyRXh0ZW5zaW9uKG1ldGhvZCwgaGFuZGxlcik7Cn0KCi8vLyBQb3N0IGFuIGV2ZW50IG9mIFtldmVudEtpbmRdIHdpdGggcGF5bG9hZCBvZiBbZXZlbnREYXRhXSB0byB0aGUgYEV4dGVuc2lvbmAKLy8vIGV2ZW50IHN0cmVhbS4Kdm9pZCBwb3N0RXZlbnQoU3RyaW5nIGV2ZW50S2luZCwgTWFwIGV2ZW50RGF0YSkgewogIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGV2ZW50S2luZCwgJ2V2ZW50S2luZCcpOwogIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGV2ZW50RGF0YSwgJ2V2ZW50RGF0YScpOwogIFN0cmluZyBldmVudERhdGFBc1N0cmluZyA9IGpzb24uZW5jb2RlKGV2ZW50RGF0YSk7CiAgX3Bvc3RFdmVudChldmVudEtpbmQsIGV2ZW50RGF0YUFzU3RyaW5nKTsKfQoKZXh0ZXJuYWwgdm9pZCBfcG9zdEV2ZW50KFN0cmluZyBldmVudEtpbmQsIFN0cmluZyBldmVudERhdGEpOwoKLy8gQm90aCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHdyaXR0ZW4gaW5zaWRlIEMrKyB0byBhdm9pZCB1cGRhdGluZyB0aGUgZGF0YQovLyBzdHJ1Y3R1cmVzIGluIERhcnQsIGdldHRpbmcgYW4gT09CLCBhbmQgb2JzZXJ2aW5nIHN0YWxlIHN0YXRlLiBEbyBub3QgbW92ZQovLyB0aGVzZSBpbnRvIERhcnQgY29kZSB1bmxlc3MgeW91IGNhbiBlbnN1cmUgdGhhdCB0aGUgb3BlcmF0aW9ucyB3aWxsIGNhbiBiZQovLyBkb25lIGF0b21pY2FsbHkuIE5hdGl2ZSBjb2RlIGxpdmVzIGluIHZtL2lzb2xhdGUuY2MtCi8vIExvb2t1cFNlcnZpY2VFeHRlbnNpb25IYW5kbGVyIGFuZCBSZWdpc3RlclNlcnZpY2VFeHRlbnNpb25IYW5kbGVyLgpleHRlcm5hbCBTZXJ2aWNlRXh0ZW5zaW9uSGFuZGxlciBfbG9va3VwRXh0ZW5zaW9uKFN0cmluZyBtZXRob2QpOwpleHRlcm5hbCBfcmVnaXN0ZXJFeHRlbnNpb24oU3RyaW5nIG1ldGhvZCwgU2VydmljZUV4dGVuc2lvbkhhbmRsZXIgaGFuZGxlcik7CoCjAE5OPAEYATQEUCohQRcBThcBPhwBSQZOPjEZGh0yBAFFBlBKUBtEFx8kIzwEAS4OLwEkDjEBLQ43AS0ONwEuJwEkKAEtKwEtKwEzIyYfBhsEAS04LFAOBksEATdCAUQXGhUNISMbGzEpCgYEAgFPBE9LMARDQjQBTkkVBE1NUE0tBE5ASTAkTQQqRgQyJwIBUBIyNjY1LAIBPgFNTk44RkJNAR1kYXJ0OmRldmVsb3Blci9leHRlbnNpb24uZGFydDNvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvZGV2ZWxvcGVyL3RpbWVsaW5lLmRhcnSqgS8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuZGV2ZWxvcGVyOwoKY29uc3QgYm9vbCBfaGFzVGltZWxpbmUgPQogICAgY29uc3QgYm9vbC5mcm9tRW52aXJvbm1lbnQoImRhcnQuZGV2ZWxvcGVyLnRpbWVsaW5lIiwgZGVmYXVsdFZhbHVlOiB0cnVlKTsKCi8vLyBBIHR5cGVkZWYgZm9yIHRoZSBmdW5jdGlvbiBhcmd1bWVudCB0byBbVGltZWxpbmUudGltZVN5bmNdLgp0eXBlZGVmIFRpbWVsaW5lU3luY0Z1bmN0aW9uPFQ+ID0gVCBGdW5jdGlvbigpOwoKLy8gVE9ETzogVGhpcyB0eXBlZGVmIGlzIG5vdCB1c2VkLgp0eXBlZGVmIEZ1dHVyZSBUaW1lbGluZUFzeW5jRnVuY3Rpb24oKTsKCi8vLyBBIGNsYXNzIHRvIHJlcHJlc2VudCBGbG93IGV2ZW50cy4KLy8vCi8vLyBbRmxvd10gb2JqZWN0cyBhcmUgdXNlZCB0byB0aHJlYWQgZmxvdyBldmVudHMgYmV0d2VlbiB0aW1lbGluZSBzbGljZXMsCi8vLyBmb3IgZXhhbXBsZSwgdGhvc2UgY3JlYXRlZCB3aXRoIHRoZSBbVGltZWxpbmVdIGNsYXNzIGJlbG93LiBBZGRpbmcKLy8vIFtGbG93XSBvYmplY3RzIGNhdXNlIGFycm93cyB0byBiZSBkcmF3biBiZXR3ZWVuIHNsaWNlcyBpbiBDaHJvbWUncyB0cmFjZQovLy8gdmlld2VyLiBUaGUgYXJyb3dzIHN0YXJ0IGF0IGUuZyBbVGltZWxpbmVdIGV2ZW50cyB0aGF0IGFyZSBwYXNzZWQgYQovLy8gW0Zsb3cuYmVnaW5dIG9iamVjdCwgZ28gdGhyb3VnaCBbVGltZWxpbmVdIGV2ZW50cyB0aGF0IGFyZSBwYXNzZWQgYQovLy8gW0Zsb3cuc3RlcF0gb2JqZWN0LCBhbmQgZW5kIGF0IFtUaW1lbGluZV0gZXZlbnRzIHRoYXQgYXJlIHBhc3NlZCBhCi8vLyBbRmxvdy5lbmRdIG9iamVjdCwgYWxsIGhhdmluZyB0aGUgc2FtZSBbRmxvdy5pZF0uIEZvciBleGFtcGxlOgovLy8KLy8vIGBgYGRhcnQKLy8vIHZhciBmbG93ID0gRmxvdy5iZWdpbigpOwovLy8gVGltZWxpbmUudGltZVN5bmMoJ2Zsb3dfdGVzdCcsICgpIHsKLy8vICAgZG9Tb21ldGhpbmcoKTsKLy8vIH0sIGZsb3c6IGZsb3cpOwovLy8KLy8vIFRpbWVsaW5lLnRpbWVTeW5jKCdmbG93X3Rlc3QnLCAoKSB7Ci8vLyAgIGRvU29tZXRoaW5nKCk7Ci8vLyB9LCBmbG93OiBGbG93LnN0ZXAoZmxvdy5pZCkpOwovLy8KLy8vIFRpbWVsaW5lLnRpbWVTeW5jKCdmbG93X3Rlc3QnLCAoKSB7Ci8vLyAgIGRvU29tZXRoaW5nKCk7Ci8vLyB9LCBmbG93OiBGbG93LmVuZChmbG93LmlkKSk7Ci8vLyBgYGAKY2xhc3MgRmxvdyB7CiAgLy8gVGhlc2UgdmFsdWVzIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIGVudW0gIkV2ZW50VHlwZSIgaW4KICAvLyBydW50aW1lL3ZtL3RpbWVsaW5lLmguCiAgc3RhdGljIGNvbnN0IGludCBfYmVnaW4gPSA5OwogIHN0YXRpYyBjb25zdCBpbnQgX3N0ZXAgPSAxMDsKICBzdGF0aWMgY29uc3QgaW50IF9lbmQgPSAxMTsKCiAgZmluYWwgaW50IF90eXBlOwoKICAvLy8gVGhlIGZsb3cgaWQgb2YgdGhlIGZsb3cgZXZlbnQuCiAgZmluYWwgaW50IGlkOwoKICBGbG93Ll8odGhpcy5fdHlwZSwgdGhpcy5pZCk7CgogIC8vLyBBICJiZWdpbiIgRmxvdyBldmVudC4KICAvLy8KICAvLy8gV2hlbiBwYXNzZWQgdG8gYSBbVGltZWxpbmVdIG1ldGhvZCwgZ2VuZXJhdGVzIGEgImJlZ2luIiBGbG93IGV2ZW50LgogIC8vLyBJZiBbaWRdIGlzIG5vdCBwcm92aWRlZCwgYW4gaWQgdGhhdCBjb25mbGljdHMgd2l0aCBubyBvdGhlciBEYXJ0LWdlbmVyYXRlZAogIC8vLyBmbG93IGlkJ3Mgd2lsbCBiZSBnZW5lcmF0ZWQuCiAgc3RhdGljIEZsb3cgYmVnaW4oe2ludCBpZH0pIHsKICAgIHJldHVybiBuZXcgRmxvdy5fKF9iZWdpbiwgaWQgPz8gX2dldE5leHRBc3luY0lkKCkpOwogIH0KCiAgLy8vIEEgInN0ZXAiIEZsb3cgZXZlbnQuCiAgLy8vCiAgLy8vIFdoZW4gcGFzc2VkIHRvIGEgW1RpbWVsaW5lXSBtZXRob2QsIGdlbmVyYXRlcyBhICJzdGVwIiBGbG93IGV2ZW50LgogIC8vLyBUaGUgW2lkXSBhcmd1bWVudCBpcyByZXF1aXJlZC4gSXQgY2FuIGNvbWUgZWl0aGVyIGZyb20gYW5vdGhlciBbRmxvd10KICAvLy8gZXZlbnQsIG9yIHNvbWUgaWQgdGhhdCBjb21lcyBmcm9tIHRoZSBlbnZpcm9ubWVudC4KICBzdGF0aWMgRmxvdyBzdGVwKGludCBpZCkgPT4gbmV3IEZsb3cuXyhfc3RlcCwgaWQpOwoKICAvLy8gQW4gImVuZCIgRmxvdyBldmVudC4KICAvLy8KICAvLy8gV2hlbiBwYXNzZWQgdG8gYSBbVGltZWxpbmVdIG1ldGhvZCwgZ2VuZXJhdGVzIGEgImVuZCIgRmxvdyBldmVudC4KICAvLy8gVGhlIFtpZF0gYXJndW1lbnQgaXMgcmVxdWlyZWQuIEl0IGNhbiBjb21lIGVpdGhlciBmcm9tIGFub3RoZXIgW0Zsb3ddCiAgLy8vIGV2ZW50LCBvciBzb21lIGlkIHRoYXQgY29tZXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuCiAgc3RhdGljIEZsb3cgZW5kKGludCBpZCkgPT4gbmV3IEZsb3cuXyhfZW5kLCBpZCk7Cn0KCi8vLyBBZGQgdG8gdGhlIHRpbWVsaW5lLgovLy8KLy8vIFtUaW1lbGluZV0ncyBtZXRob2RzIGFkZCBzeW5jaHJvbm91cyBldmVudHMgdG8gdGhlIHRpbWVsaW5lLiBXaGVuCi8vLyBnZW5lcmF0aW5nIGEgdGltZWxpbmUgaW4gQ2hyb21lJ3MgdHJhY2luZyBmb3JtYXQsIHVzaW5nIFtUaW1lbGluZV0gZ2VuZXJhdGVzCi8vLyAiQ29tcGxldGUiIGV2ZW50cy4gW1RpbWVsaW5lXSdzIFtzdGFydFN5bmNdIGFuZCBbZmluaXNoU3luY10gY2FuIGJlIHVzZWQKLy8vIGV4cGxpY2l0bHksIG9yIGltcGxpY2l0bHkgYnkgd3JhcHBpbmcgYSBjbG9zdXJlIGluIFt0aW1lU3luY10uIEZvciBleGFtcGxlOgovLy8KLy8vIGBgYGRhcnQKLy8vIFRpbWVsaW5lLnN0YXJ0U3luYygiRG9pbmcgU29tZXRoaW5nIik7Ci8vLyBkb1NvbWV0aGluZygpOwovLy8gVGltZWxpbmUuZmluaXNoU3luYygpOwovLy8gYGBgCi8vLwovLy8gT3I6Ci8vLwovLy8gYGBgZGFydAovLy8gVGltZWxpbmUudGltZVN5bmMoIkRvaW5nIFNvbWV0aGluZyIsICgpIHsKLy8vICAgZG9Tb21ldGhpbmcoKTsKLy8vIH0pOwovLy8gYGBgCmNsYXNzIFRpbWVsaW5lIHsKICAvLy8gU3RhcnQgYSBzeW5jaHJvbm91cyBvcGVyYXRpb24gbGFiZWxlZCBbbmFtZV0uIE9wdGlvbmFsbHkgdGFrZXMKICAvLy8gYSBbTWFwXSBvZiBbYXJndW1lbnRzXS4gVGhpcyBzbGljZSBtYXkgYWxzbyBvcHRpb25hbGx5IGJlIGFzc29jaWF0ZWQgd2l0aAogIC8vLyBhIFtGbG93XSBldmVudC4gVGhpcyBvcGVyYXRpb24gbXVzdCBiZSBmaW5pc2hlZCBiZWZvcmUKICAvLy8gcmV0dXJuaW5nIHRvIHRoZSBldmVudCBxdWV1ZS4KICBzdGF0aWMgdm9pZCBzdGFydFN5bmMoU3RyaW5nIG5hbWUsIHtNYXAgYXJndW1lbnRzLCBGbG93IGZsb3d9KSB7CiAgICBpZiAoIV9oYXNUaW1lbGluZSkgcmV0dXJuOwogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwobmFtZSwgJ25hbWUnKTsKICAgIGlmICghX2lzRGFydFN0cmVhbUVuYWJsZWQoKSkgewogICAgICAvLyBQdXNoIGEgbnVsbCBvbnRvIHRoZSBzdGFjayBhbmQgcmV0dXJuLgogICAgICBfc3RhY2suYWRkKG51bGwpOwogICAgICByZXR1cm47CiAgICB9CiAgICB2YXIgYmxvY2sgPSBuZXcgX1N5bmNCbG9jay5fKG5hbWUsIF9nZXRUcmFjZUNsb2NrKCksIF9nZXRUaHJlYWRDcHVDbG9jaygpKTsKICAgIGlmIChhcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBibG9jay5fYXJndW1lbnRzID0gYXJndW1lbnRzOwogICAgfQogICAgaWYgKGZsb3cgIT0gbnVsbCkgewogICAgICBibG9jay5mbG93ID0gZmxvdzsKICAgIH0KICAgIF9zdGFjay5hZGQoYmxvY2spOwogIH0KCiAgLy8vIEZpbmlzaCB0aGUgbGFzdCBzeW5jaHJvbm91cyBvcGVyYXRpb24gdGhhdCB3YXMgc3RhcnRlZC4KICBzdGF0aWMgdm9pZCBmaW5pc2hTeW5jKCkgewogICAgaWYgKCFfaGFzVGltZWxpbmUpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKF9zdGFjay5sZW5ndGggPT0gMCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcignVW5ldmVuIGNhbGxzIHRvIHN0YXJ0U3luYyBhbmQgZmluaXNoU3luYycpOwogICAgfQogICAgLy8gUG9wIHRvcCBpdGVtIG9mZiBvZiBzdGFjay4KICAgIHZhciBibG9jayA9IF9zdGFjay5yZW1vdmVMYXN0KCk7CiAgICBpZiAoYmxvY2sgPT0gbnVsbCkgewogICAgICAvLyBEYXJ0IHN0cmVhbSB3YXMgZGlzYWJsZWQgd2hlbiBzdGFydFN5bmMgd2FzIGNhbGxlZC4KICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gRmluaXNoIGl0LgogICAgYmxvY2suZmluaXNoKCk7CiAgfQoKICAvLy8gRW1pdCBhbiBpbnN0YW50IGV2ZW50LgogIHN0YXRpYyB2b2lkIGluc3RhbnRTeW5jKFN0cmluZyBuYW1lLCB7TWFwIGFyZ3VtZW50c30pIHsKICAgIGlmICghX2hhc1RpbWVsaW5lKSByZXR1cm47CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChuYW1lLCAnbmFtZScpOwogICAgaWYgKCFfaXNEYXJ0U3RyZWFtRW5hYmxlZCgpKSB7CiAgICAgIC8vIFN0cmVhbSBpcyBkaXNhYmxlZC4KICAgICAgcmV0dXJuOwogICAgfQogICAgTWFwIGluc3RhbnRBcmd1bWVudHM7CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgaW5zdGFudEFyZ3VtZW50cyA9IG5ldyBNYXAuZnJvbShhcmd1bWVudHMpOwogICAgfQogICAgX3JlcG9ydEluc3RhbnRFdmVudCgKICAgICAgICBfZ2V0VHJhY2VDbG9jaygpLCAnRGFydCcsIG5hbWUsIF9hcmd1bWVudHNBc0pzb24oaW5zdGFudEFyZ3VtZW50cykpOwogIH0KCiAgLy8vIEEgdXRpbGl0eSBtZXRob2QgdG8gdGltZSBhIHN5bmNocm9ub3VzIFtmdW5jdGlvbl0uIEludGVybmFsbHkgY2FsbHMKICAvLy8gW2Z1bmN0aW9uXSBicmFja2V0ZWQgYnkgY2FsbHMgdG8gW3N0YXJ0U3luY10gYW5kIFtmaW5pc2hTeW5jXS4KICBzdGF0aWMgVCB0aW1lU3luYzxUPihTdHJpbmcgbmFtZSwgVGltZWxpbmVTeW5jRnVuY3Rpb248VD4gZnVuY3Rpb24sCiAgICAgIHtNYXAgYXJndW1lbnRzLCBGbG93IGZsb3d9KSB7CiAgICBzdGFydFN5bmMobmFtZSwgYXJndW1lbnRzOiBhcmd1bWVudHMsIGZsb3c6IGZsb3cpOwogICAgdHJ5IHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKCk7CiAgICB9IGZpbmFsbHkgewogICAgICBmaW5pc2hTeW5jKCk7CiAgICB9CiAgfQoKICAvLy8gVGhlIGN1cnJlbnQgdGltZSBzdGFtcCBmcm9tIHRoZSBjbG9jayB1c2VkIGJ5IHRoZSB0aW1lbGluZS4gVW5pdHMgYXJlCiAgLy8vIG1pY3Jvc2Vjb25kcy4KICAvLy8KICAvLy8gV2hlbiBydW4gb24gdGhlIERhcnQgVk0sIHVzZXMgdGhlIHNhbWUgbW9ub3RvbmljIGNsb2NrIGFzIHRoZSBlbWJlZGRpbmcKICAvLy8gQVBJJ3MgYERhcnRfVGltZWxpbmVHZXRNaWNyb3NgLgogIHN0YXRpYyBpbnQgZ2V0IG5vdyA9PiBfZ2V0VHJhY2VDbG9jaygpOwogIHN0YXRpYyBmaW5hbCBMaXN0PF9TeW5jQmxvY2s+IF9zdGFjayA9IG5ldyBMaXN0PF9TeW5jQmxvY2s+KCk7Cn0KCi8vLyBBbiBhc3luY2hyb25vdXMgdGFzayBvbiB0aGUgdGltZWxpbmUuIEFuIGFzeW5jaHJvbm91cyB0YXNrIGNhbiBoYXZlIG1hbnkKLy8vIChuZXN0ZWQpIHN5bmNocm9ub3VzIG9wZXJhdGlvbnMuIFN5bmNocm9ub3VzIG9wZXJhdGlvbnMgY2FuIGxpdmUgbG9uZ2VyIHRoYW4KLy8vIHRoZSBjdXJyZW50IGlzb2xhdGUgZXZlbnQuIFRvIHBhc3MgYSBbVGltZWxpbmVUYXNrXSB0byBhbm90aGVyIGlzb2xhdGUsCi8vLyB5b3UgbXVzdCBmaXJzdCBjYWxsIFtwYXNzXSB0byBnZXQgdGhlIHRhc2sgaWQgYW5kIHRoZW4gY29uc3RydWN0IGEgbmV3Ci8vLyBbVGltZWxpbmVUYXNrXSBpbiB0aGUgb3RoZXIgaXNvbGF0ZS4KY2xhc3MgVGltZWxpbmVUYXNrIHsKICAvLy8gQ3JlYXRlIGEgdGFzay4gVGhlIHRhc2sgSUQgd2lsbCBiZSBzZXQgYnkgdGhlIHN5c3RlbS4KICBUaW1lbGluZVRhc2soKSA6IF90YXNrSWQgPSBfZ2V0TmV4dEFzeW5jSWQoKSB7fQoKICAvLy8gQ3JlYXRlIGEgdGFzayB3aXRoIGFuIGV4cGxpY2l0IFt0YXNrSWRdLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgYXJlCiAgLy8vIHBhc3NpbmcgYSB0YXNrIGZyb20gb25lIGlzb2xhdGUgdG8gYW5vdGhlci4KICBUaW1lbGluZVRhc2sud2l0aFRhc2tJZChpbnQgdGFza0lkKSA6IF90YXNrSWQgPSB0YXNrSWQgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwodGFza0lkLCAndGFza0lkJyk7CiAgfQoKICAvLy8gU3RhcnQgYSBzeW5jaHJvbm91cyBvcGVyYXRpb24gd2l0aGluIHRoaXMgdGFzayBuYW1lZCBbbmFtZV0uCiAgLy8vIE9wdGlvbmFsbHkgdGFrZXMgYSBbTWFwXSBvZiBbYXJndW1lbnRzXS4KICB2b2lkIHN0YXJ0KFN0cmluZyBuYW1lLCB7TWFwIGFyZ3VtZW50c30pIHsKICAgIGlmICghX2hhc1RpbWVsaW5lKSByZXR1cm47CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChuYW1lLCAnbmFtZScpOwogICAgdmFyIGJsb2NrID0gbmV3IF9Bc3luY0Jsb2NrLl8obmFtZSwgX3Rhc2tJZCk7CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgYmxvY2suX2FyZ3VtZW50cyA9IGFyZ3VtZW50czsKICAgIH0KICAgIF9zdGFjay5hZGQoYmxvY2spOwogICAgYmxvY2suX3N0YXJ0KCk7CiAgfQoKICAvLy8gRW1pdCBhbiBpbnN0YW50IGV2ZW50IGZvciB0aGlzIHRhc2suCiAgdm9pZCBpbnN0YW50KFN0cmluZyBuYW1lLCB7TWFwIGFyZ3VtZW50c30pIHsKICAgIGlmICghX2hhc1RpbWVsaW5lKSByZXR1cm47CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChuYW1lLCAnbmFtZScpOwogICAgTWFwIGluc3RhbnRBcmd1bWVudHM7CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgaW5zdGFudEFyZ3VtZW50cyA9IG5ldyBNYXAuZnJvbShhcmd1bWVudHMpOwogICAgfQogICAgX3JlcG9ydFRhc2tFdmVudChfZ2V0VHJhY2VDbG9jaygpLCBfdGFza0lkLCAnbicsICdEYXJ0JywgbmFtZSwKICAgICAgICBfYXJndW1lbnRzQXNKc29uKGluc3RhbnRBcmd1bWVudHMpKTsKICB9CgogIC8vLyBGaW5pc2ggdGhlIGxhc3Qgc3luY2hyb25vdXMgb3BlcmF0aW9uIHRoYXQgd2FzIHN0YXJ0ZWQuCiAgdm9pZCBmaW5pc2goKSB7CiAgICBpZiAoIV9oYXNUaW1lbGluZSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoX3N0YWNrLmxlbmd0aCA9PSAwKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCdVbmV2ZW4gY2FsbHMgdG8gc3RhcnQgYW5kIGZpbmlzaCcpOwogICAgfQogICAgLy8gUG9wIHRvcCBpdGVtIG9mZiBvZiBzdGFjay4KICAgIHZhciBibG9jayA9IF9zdGFjay5yZW1vdmVMYXN0KCk7CiAgICBibG9jay5fZmluaXNoKCk7CiAgfQoKICAvLy8gUmV0cmlldmUgdGhlIFtUaW1lbGluZVRhc2tdJ3MgdGFzayBpZC4gV2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgdGhlCiAgLy8vIHN0YWNrIGlzIG5vdCBlbXB0eS4KICBpbnQgcGFzcygpIHsKICAgIGlmIChfc3RhY2subGVuZ3RoID4gMCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigKICAgICAgICAgICdZb3UgY2Fubm90IHBhc3MgYSBUaW1lbGluZVRhc2sgd2l0aG91dCBmaW5pc2hpbmcgYWxsIHN0YXJ0ZWQgJwogICAgICAgICAgJ29wZXJhdGlvbnMnKTsKICAgIH0KICAgIGludCByID0gX3Rhc2tJZDsKICAgIHJldHVybiByOwogIH0KCiAgZmluYWwgaW50IF90YXNrSWQ7CiAgZmluYWwgTGlzdDxfQXN5bmNCbG9jaz4gX3N0YWNrID0gW107Cn0KCi8vLyBBbiBhc3luY2hyb25vdXMgYmxvY2sgb2YgdGltZSBvbiB0aGUgdGltZWxpbmUuIFRoaXMgYmxvY2sgY2FuIGJlIGtlcHQKLy8vIG9wZW4gYWNyb3NzIGlzb2xhdGUgbWVzc2FnZXMuCmNsYXNzIF9Bc3luY0Jsb2NrIHsKICAvLy8gVGhlIGNhdGVnb3J5IHRoaXMgYmxvY2sgYmVsb25ncyB0by4KICBmaW5hbCBTdHJpbmcgY2F0ZWdvcnkgPSAnRGFydCc7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGlzIGJsb2NrLgogIGZpbmFsIFN0cmluZyBuYW1lOwoKICAvLy8gVGhlIGFzeW5jaHJvbm91cyB0YXNrIGlkLgogIGZpbmFsIGludCBfdGFza0lkOwoKICAvLy8gQW4gKG9wdGlvbmFsKSBzZXQgb2YgYXJndW1lbnRzIHdoaWNoIHdpbGwgYmUgc2VyaWFsaXplZCB0byBKU09OIGFuZAogIC8vLyBhc3NvY2lhdGVkIHdpdGggdGhpcyBibG9jay4KICBNYXAgX2FyZ3VtZW50czsKCiAgX0FzeW5jQmxvY2suXyh0aGlzLm5hbWUsIHRoaXMuX3Rhc2tJZCk7CgogIC8vIEVtaXQgdGhlIHN0YXJ0IGV2ZW50LgogIHZvaWQgX3N0YXJ0KCkgewogICAgX3JlcG9ydFRhc2tFdmVudChfZ2V0VHJhY2VDbG9jaygpLCBfdGFza0lkLCAnYicsIGNhdGVnb3J5LCBuYW1lLAogICAgICAgIF9hcmd1bWVudHNBc0pzb24oX2FyZ3VtZW50cykpOwogIH0KCiAgLy8gRW1pdCB0aGUgZmluaXNoIGV2ZW50LgogIHZvaWQgX2ZpbmlzaCgpIHsKICAgIF9yZXBvcnRUYXNrRXZlbnQoCiAgICAgICAgX2dldFRyYWNlQ2xvY2soKSwgX3Rhc2tJZCwgJ2UnLCBjYXRlZ29yeSwgbmFtZSwgX2FyZ3VtZW50c0FzSnNvbihudWxsKSk7CiAgfQp9CgovLy8gQSBzeW5jaHJvbm91cyBibG9jayBvZiB0aW1lIG9uIHRoZSB0aW1lbGluZS4gVGhpcyBibG9jayBzaG91bGQgbm90IGJlCi8vLyBrZXB0IG9wZW4gYWNyb3NzIGlzb2xhdGUgbWVzc2FnZXMuCmNsYXNzIF9TeW5jQmxvY2sgewogIC8vLyBUaGUgY2F0ZWdvcnkgdGhpcyBibG9jayBiZWxvbmdzIHRvLgogIGZpbmFsIFN0cmluZyBjYXRlZ29yeSA9ICdEYXJ0JzsKCiAgLy8vIFRoZSBuYW1lIG9mIHRoaXMgYmxvY2suCiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIC8vLyBBbiAob3B0aW9uYWwpIHNldCBvZiBhcmd1bWVudHMgd2hpY2ggd2lsbCBiZSBzZXJpYWxpemVkIHRvIEpTT04gYW5kCiAgLy8vIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGJsb2NrLgogIE1hcCBfYXJndW1lbnRzOwogIC8vIFRoZSBzdGFydCB0aW1lIHN0YW1wLgogIGZpbmFsIGludCBfc3RhcnQ7CiAgLy8gVGhlIHN0YXJ0IHRpbWUgc3RhbXAgb2YgdGhlIHRocmVhZCBjcHUgY2xvY2suCiAgZmluYWwgaW50IF9zdGFydENwdTsKCiAgLy8vIEFuIChvcHRpb25hbCkgZmxvdyBldmVudCBhc3NvY2lhdGVkIHdpdGggdGhpcyBibG9jay4KICBGbG93IF9mbG93OwoKICBfU3luY0Jsb2NrLl8odGhpcy5uYW1lLCB0aGlzLl9zdGFydCwgdGhpcy5fc3RhcnRDcHUpOwoKICAvLy8gRmluaXNoIHRoaXMgYmxvY2sgb2YgdGltZS4gQXQgdGhpcyBwb2ludCwgdGhpcyBibG9jayBjYW4gbm8gbG9uZ2VyIGJlCiAgLy8vIHVzZWQuCiAgdm9pZCBmaW5pc2goKSB7CiAgICAvLyBSZXBvcnQgZXZlbnQgdG8gcnVudGltZS4KICAgIF9yZXBvcnRDb21wbGV0ZUV2ZW50KAogICAgICAgIF9zdGFydCwgX3N0YXJ0Q3B1LCBjYXRlZ29yeSwgbmFtZSwgX2FyZ3VtZW50c0FzSnNvbihfYXJndW1lbnRzKSk7CiAgICBpZiAoX2Zsb3cgIT0gbnVsbCkgewogICAgICBfcmVwb3J0Rmxvd0V2ZW50KF9zdGFydCwgX3N0YXJ0Q3B1LCBjYXRlZ29yeSwgIiR7X2Zsb3cuaWR9IiwgX2Zsb3cuX3R5cGUsCiAgICAgICAgICBfZmxvdy5pZCwgX2FyZ3VtZW50c0FzSnNvbihudWxsKSk7CiAgICB9CiAgfQoKICB2b2lkIHNldCBmbG93KEZsb3cgZikgewogICAgX2Zsb3cgPSBmOwogIH0KfQoKU3RyaW5nIF9hcmd1bWVudHNBc0pzb24oTWFwIGFyZ3VtZW50cykgewogIGlmICgoYXJndW1lbnRzID09IG51bGwpIHx8IChhcmd1bWVudHMubGVuZ3RoID09IDApKSB7CiAgICAvLyBGYXN0IHBhdGggbm8gYXJndW1lbnRzLiBBdm9pZCBjYWxsaW5nIGpzb25FbmNvZGUuCiAgICByZXR1cm4gJ3t9JzsKICB9CiAgcmV0dXJuIGpzb24uZW5jb2RlKGFyZ3VtZW50cyk7Cn0KCi8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIERhcnQgVGltZWxpbmUgc3RyZWFtIGlzIGVuYWJsZWQuCmV4dGVybmFsIGJvb2wgX2lzRGFydFN0cmVhbUVuYWJsZWQoKTsKCi8vLyBSZXR1cm5zIHRoZSBuZXh0IGFzeW5jIHRhc2sgaWQuCmV4dGVybmFsIGludCBfZ2V0TmV4dEFzeW5jSWQoKTsKCi8vLyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIGZyb20gdGhlIHRyYWNlIGNsb2NrLgpleHRlcm5hbCBpbnQgX2dldFRyYWNlQ2xvY2soKTsKCi8vLyBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIGZyb20gdGhlIHRocmVhZCBDUFUgdXNhZ2UgY2xvY2suCmV4dGVybmFsIGludCBfZ2V0VGhyZWFkQ3B1Q2xvY2soKTsKCi8vLyBSZXBvcnRzIGFuIGV2ZW50IGZvciBhIHRhc2suCmV4dGVybmFsIHZvaWQgX3JlcG9ydFRhc2tFdmVudChpbnQgc3RhcnQsIGludCB0YXNrSWQsIFN0cmluZyBwaGFzZSwKICAgIFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG5hbWUsIFN0cmluZyBhcmd1bWVudHNBc0pzb24pOwoKLy8vIFJlcG9ydHMgYSBjb21wbGV0ZSBzeW5jaHJvbm91cyBldmVudC4KZXh0ZXJuYWwgdm9pZCBfcmVwb3J0Q29tcGxldGVFdmVudChpbnQgc3RhcnQsIGludCBzdGFydENwdSwgU3RyaW5nIGNhdGVnb3J5LAogICAgU3RyaW5nIG5hbWUsIFN0cmluZyBhcmd1bWVudHNBc0pzb24pOwoKLy8vIFJlcG9ydHMgYSBmbG93IGV2ZW50LgpleHRlcm5hbCB2b2lkIF9yZXBvcnRGbG93RXZlbnQoaW50IHN0YXJ0LCBpbnQgc3RhcnRDcHUsIFN0cmluZyBjYXRlZ29yeSwKICAgIFN0cmluZyBuYW1lLCBpbnQgdHlwZSwgaW50IGlkLCBTdHJpbmcgYXJndW1lbnRzQXNKc29uKTsKCi8vLyBSZXBvcnRzIGFuIGluc3RhbnQgZXZlbnQuCmV4dGVybmFsIHZvaWQgX3JlcG9ydEluc3RhbnRFdmVudCgKICAgIGludCBzdGFydCwgU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbmFtZSwgU3RyaW5nIGFyZ3VtZW50c0FzSnNvbik7CoFfAE5OPAEYARpPAUAwASMoASYES0dNSEhHQwQMHSgVFAQoFSIEKBUhCA1EHB8fHgETASUQAR8BHAZKUSMgOAQBGwZJTDk1ARsGSEw5MwIBGQRGUU1QBAwrExsIBAgEDC4VCAgRRVA9JEMfLiMwGA4GUB0kBhgZBhcEAT4dGQ4GHkgGIiUZPQ4GEhQEAR06Hy4jHQ4GGh0yBhlNBAFKRUYkNwoZEBQGBAFMFAZOJipBAgFNUUxLKRU8MgFJMjsyBAFDLy0fLjIdJAYXFAQBKy8fLhodMgZDLQQBPhIZDgYeQAYiJRUEAUwaDx0cShkGFQ4EARUnAgFKIhQqIgEeFQEgFQFKIhIBKgEbEkUnBAEcExZRBAIBSicTKiIBHhUBSiISGxQzFwE7DgE4AUwMEiAaShlQLQYEARoPBAIBKTg5EQQhAgE5JgEkIAE0HwE/IwEhRDsBKk0qARpJPAEeI0YBHGRhcnQ6ZGV2ZWxvcGVyL3RpbWVsaW5lLmRhcnQtb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9wcm9maWxlci5kYXJ0gxwvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiZGV2ZWxvcGVyLmRhcnQiOwoKQHBhdGNoCmNsYXNzIFVzZXJUYWcgewogIEBwYXRjaAogIGZhY3RvcnkgVXNlclRhZyhTdHJpbmcgbGFiZWwpIHsKICAgIHJldHVybiBuZXcgX1VzZXJUYWcobGFiZWwpOwogIH0KICBAcGF0Y2gKICBzdGF0aWMgVXNlclRhZyBnZXQgZGVmYXVsdFRhZyA9PiBfZ2V0RGVmYXVsdFRhZygpOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9Vc2VyVGFnIGltcGxlbWVudHMgVXNlclRhZyB7CiAgZmFjdG9yeSBfVXNlclRhZyhTdHJpbmcgbGFiZWwpIG5hdGl2ZSAiVXNlclRhZ19uZXciOwogIFN0cmluZyBnZXQgbGFiZWwgbmF0aXZlICJVc2VyVGFnX2xhYmVsIjsKICBVc2VyVGFnIG1ha2VDdXJyZW50KCkgbmF0aXZlICJVc2VyVGFnX21ha2VDdXJyZW50IjsKfQoKQHBhdGNoClVzZXJUYWcgZ2V0Q3VycmVudFRhZygpID0+IF9nZXRDdXJyZW50VGFnKCk7ClVzZXJUYWcgX2dldEN1cnJlbnRUYWcoKSBuYXRpdmUgIlByb2ZpbGVyX2dldEN1cnJlbnRUYWciOwoKVXNlclRhZyBfZ2V0RGVmYXVsdFRhZygpIG5hdGl2ZSAiVXNlclRhZ19kZWZhdWx0VGFnIjsKHgBOTjwBHQEHEAkiIAQJNQIBGiQ3KzYCAQctOgE2ASJkYXJ0OmRldmVsb3Blci1wYXRjaC9wcm9maWxlci5kYXJ0M29yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9kZXZlbG9wZXIvcHJvZmlsZXIuZGFydI9hLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5kZXZlbG9wZXI7CgovLy8gQSBVc2VyVGFnIGNhbiBiZSB1c2VkIHRvIGdyb3VwIHNhbXBsZXMgaW4gdGhlIE9ic2VydmF0b3J5IHByb2ZpbGVyLgphYnN0cmFjdCBjbGFzcyBVc2VyVGFnIHsKICAvLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIFVzZXJUYWcgaW5zdGFuY2VzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYnkgYSBwcm9ncmFtLgogIHN0YXRpYyBjb25zdCBNQVhfVVNFUl9UQUdTID0gNjQ7CgogIGV4dGVybmFsIGZhY3RvcnkgVXNlclRhZyhTdHJpbmcgbGFiZWwpOwoKICAvLy8gTGFiZWwgb2YgW3RoaXNdLgogIFN0cmluZyBnZXQgbGFiZWw7CgogIC8vLyBNYWtlIFt0aGlzXSB0aGUgY3VycmVudCB0YWcgZm9yIHRoZSBpc29sYXRlLiBSZXR1cm5zIHRoZSBjdXJyZW50IHRhZwogIC8vLyBiZWZvcmUgc2V0dGluZy4KICBVc2VyVGFnIG1ha2VDdXJyZW50KCk7CgogIC8vLyBUaGUgZGVmYXVsdCBbVXNlclRhZ10gd2l0aCBsYWJlbCAnRGVmYXVsdCcuCiAgZXh0ZXJuYWwgc3RhdGljIFVzZXJUYWcgZ2V0IGRlZmF1bHRUYWc7Cn0KCi8vLyBSZXR1cm5zIHRoZSBjdXJyZW50IFtVc2VyVGFnXSBmb3IgdGhlIGlzb2xhdGUuCmV4dGVybmFsIFVzZXJUYWcgZ2V0Q3VycmVudFRhZygpOwoKLy8vIEFic3RyYWN0IFtNZXRyaWNdIGNsYXNzLiBNZXRyaWMgbmFtZXMgbXVzdCBiZSB1bmlxdWUsIGFyZSBoaWVyYXJjaGljYWwsCi8vLyBhbmQgdXNlIHBlcmlvZHMgYXMgc2VwYXJhdG9ycy4gRm9yIGV4YW1wbGUsICdhLmIuYycuIFVuaXF1ZW5lc3MgaXMgb25seQovLy8gZW5mb3JjZWQgd2hlbiBhIE1ldHJpYyBpcyByZWdpc3RlcmVkLiBUaGUgbmFtZSBvZiBhIG1ldHJpYyBjYW5ub3QgY29udGFpbgovLy8gdGhlIHNsYXNoICgnLycpIGNoYXJhY3Rlci4KYWJzdHJhY3QgY2xhc3MgTWV0cmljIHsKICAvLy8gW25hbWVdIG9mIHRoaXMgbWV0cmljLgogIGZpbmFsIFN0cmluZyBuYW1lOwoKICAvLy8gW2Rlc2NyaXB0aW9uXSBvZiB0aGlzIG1ldHJpYy4KICBmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb247CgogIE1ldHJpYyh0aGlzLm5hbWUsIHRoaXMuZGVzY3JpcHRpb24pIHsKICAgIGlmICgobmFtZSA9PSAndm0nKSB8fCBuYW1lLmNvbnRhaW5zKCcvJykpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgTWV0cmljIG5hbWUuJyk7CiAgICB9CiAgfQoKICBNYXAgX3RvSlNPTigpOwp9CgovLy8gQSBtZWFzdXJlZCB2YWx1ZSB3aXRoIGEgbWluIGFuZCBtYXguIEluaXRpYWwgdmFsdWUgaXMgbWluLiBWYWx1ZSB3aWxsCi8vLyBiZSBjbGFtcGVkIHRvIHRoZSBpbnRlcnZhbCBbbWluLCBtYXhdLgpjbGFzcyBHYXVnZSBleHRlbmRzIE1ldHJpYyB7CiAgZmluYWwgZG91YmxlIG1pbjsKICBmaW5hbCBkb3VibGUgbWF4OwoKICBkb3VibGUgX3ZhbHVlOwogIGRvdWJsZSBnZXQgdmFsdWUgPT4gX3ZhbHVlOwogIHNldCB2YWx1ZShkb3VibGUgdikgewogICAgaWYgKHYgPCBtaW4pIHsKICAgICAgdiA9IG1pbjsKICAgIH0gZWxzZSBpZiAodiA+IG1heCkgewogICAgICB2ID0gbWF4OwogICAgfQogICAgX3ZhbHVlID0gdjsKICB9CgogIEdhdWdlKFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzY3JpcHRpb24sIHRoaXMubWluLCB0aGlzLm1heCkKICAgICAgOiBzdXBlcihuYW1lLCBkZXNjcmlwdGlvbikgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwobWluLCAnbWluJyk7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChtYXgsICdtYXgnKTsKICAgIGlmICghKG1pbiA8IG1heCkpIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCdtaW4gbXVzdCBiZSBsZXNzIHRoYW4gbWF4Jyk7CiAgICBfdmFsdWUgPSBtaW47CiAgfQoKICBNYXAgX3RvSlNPTigpIHsKICAgIHZhciBtYXAgPSB7CiAgICAgICd0eXBlJzogJ0dhdWdlJywKICAgICAgJ2lkJzogJ21ldHJpY3MvJG5hbWUnLAogICAgICAnbmFtZSc6IG5hbWUsCiAgICAgICdkZXNjcmlwdGlvbic6IGRlc2NyaXB0aW9uLAogICAgICAndmFsdWUnOiB2YWx1ZSwKICAgICAgJ21pbic6IG1pbiwKICAgICAgJ21heCc6IG1heCwKICAgIH07CiAgICByZXR1cm4gbWFwOwogIH0KfQoKLy8vIEEgY2hhbmdpbmcgdmFsdWUuIEluaXRpYWwgdmFsdWUgaXMgMC4wLgpjbGFzcyBDb3VudGVyIGV4dGVuZHMgTWV0cmljIHsKICBDb3VudGVyKFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzY3JpcHRpb24pIDogc3VwZXIobmFtZSwgZGVzY3JpcHRpb24pOwoKICBkb3VibGUgX3ZhbHVlID0gMC4wOwogIGRvdWJsZSBnZXQgdmFsdWUgPT4gX3ZhbHVlOwogIHNldCB2YWx1ZShkb3VibGUgdikgewogICAgX3ZhbHVlID0gdjsKICB9CgogIE1hcCBfdG9KU09OKCkgewogICAgdmFyIG1hcCA9IHsKICAgICAgJ3R5cGUnOiAnQ291bnRlcicsCiAgICAgICdpZCc6ICdtZXRyaWNzLyRuYW1lJywKICAgICAgJ25hbWUnOiBuYW1lLAogICAgICAnZGVzY3JpcHRpb24nOiBkZXNjcmlwdGlvbiwKICAgICAgJ3ZhbHVlJzogdmFsdWUsCiAgICB9OwogICAgcmV0dXJuIG1hcDsKICB9Cn0KCmNsYXNzIE1ldHJpY3MgewogIHN0YXRpYyBmaW5hbCBNYXA8U3RyaW5nLCBNZXRyaWM+IF9tZXRyaWNzID0gbmV3IE1hcDxTdHJpbmcsIE1ldHJpYz4oKTsKCiAgLy8vIFJlZ2lzdGVyIFtNZXRyaWNdcyB0byBtYWtlIHRoZW0gdmlzaWJsZSB0byBPYnNlcnZhdG9yeS4KICBzdGF0aWMgdm9pZCByZWdpc3RlcihNZXRyaWMgbWV0cmljKSB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChtZXRyaWMsICdtZXRyaWMnKTsKICAgIGlmIChfbWV0cmljc1ttZXRyaWMubmFtZV0gIT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignUmVnaXN0ZXJlZCBtZXRyaWNzIGhhdmUgdW5pcXVlIG5hbWVzJyk7CiAgICB9CiAgICBfbWV0cmljc1ttZXRyaWMubmFtZV0gPSBtZXRyaWM7CiAgfQoKICAvLy8gRGVyZWdpc3RlciBbTWV0cmljXXMgdG8gbWFrZSB0aGVtIG5vdCB2aXNpYmxlIHRvIE9ic2VydmF0b3J5LgogIHN0YXRpYyB2b2lkIGRlcmVnaXN0ZXIoTWV0cmljIG1ldHJpYykgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwobWV0cmljLCAnbWV0cmljJyk7CiAgICBfbWV0cmljcy5yZW1vdmUobWV0cmljLm5hbWUpOwogIH0KCiAgLy8gaWdub3JlOiB1bnVzZWRfZWxlbWVudCwgY2FsbGVkIGZyb20gbmF0aXZlIGNvZGUKICBzdGF0aWMgU3RyaW5nIF9wcmludE1ldHJpYyhTdHJpbmcgaWQpIHsKICAgIHZhciBtZXRyaWMgPSBfbWV0cmljc1tpZF07CiAgICBpZiAobWV0cmljID09IG51bGwpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4ganNvbi5lbmNvZGUobWV0cmljLl90b0pTT04oKSk7CiAgfQoKICAvLyBpZ25vcmU6IHVudXNlZF9lbGVtZW50LCBjYWxsZWQgZnJvbSBuYXRpdmUgY29kZQogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgIWNvbnN0IGJvb2wuZnJvbUVudmlyb25tZW50KCJkYXJ0LnZtLnByb2R1Y3QiKSkKICBzdGF0aWMgU3RyaW5nIF9wcmludE1ldHJpY3MoKSB7CiAgICB2YXIgbWV0cmljcyA9IFtdOwogICAgZm9yICh2YXIgbWV0cmljIGluIF9tZXRyaWNzLnZhbHVlcykgewogICAgICBtZXRyaWNzLmFkZChtZXRyaWMuX3RvSlNPTigpKTsKICAgIH0KICAgIHZhciBtYXAgPSB7CiAgICAgICd0eXBlJzogJ01ldHJpY0xpc3QnLAogICAgICAnbWV0cmljcyc6IG1ldHJpY3MsCiAgICB9OwogICAgcmV0dXJuIGpzb24uZW5jb2RlKG1hcCk7CiAgfQp9CoCXAE5OPAEYAUgZUCMBKgEXFAFLFhkBMioCATMiAUxMTh8YHRUBJBwBKDA3BgQBEQIBSisdFBQBER4YEw8aDwYQBAE9IywsTBIEARIQFx0UIhYSEgcQBAIBLB9HARceGBAEARIQGR0UIhYHEAQCARBJAT4oMilHBiQEAUQqMiIEATUqHxoTBioEATVMIhYqJQYQHBoHHQQCARxkYXJ0OmRldmVsb3Blci9wcm9maWxlci5kYXJ0Mm9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9kZXZlbG9wZXIvc2VydmljZS5kYXJ0j4EvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmRldmVsb3BlcjsKCi8vLyBTZXJ2aWNlIHByb3RvY29sIGlzIHRoZSBwcm90b2NvbCB0aGF0IGEgY2xpZW50IGxpa2UgdGhlIE9ic2VydmF0b3J5Ci8vLyBjb3VsZCB1c2UgdG8gYWNjZXNzIHRoZSBzZXJ2aWNlcyBwcm92aWRlZCBieSB0aGUgRGFydCBWTSBmb3IKLy8vIGRlYnVnZ2luZyBhbmQgaW5zcGVjdGluZyBEYXJ0IHByb2dyYW1zLiBUaGlzIGNsYXNzIGVuY2Fwc3VsYXRlcyB0aGUKLy8vIHZlcnNpb24gbnVtYmVyIGFuZCBVcmkgZm9yIGFjY2Vzc2luZyB0aGlzIHNlcnZpY2UuCmNsYXNzIFNlcnZpY2VQcm90b2NvbEluZm8gewogIC8vLyBUaGUgbWFqb3IgdmVyc2lvbiBvZiB0aGUgcHJvdG9jb2wuIElmIHRoZSBydW5uaW5nIERhcnQgZW52aXJvbm1lbnQgZG9lcwogIC8vLyBub3Qgc3VwcG9ydCB0aGUgc2VydmljZSBwcm90b2NvbCwgdGhpcyBpcyAwLgogIGZpbmFsIGludCBtYWpvclZlcnNpb24gPSBfZ2V0U2VydmljZU1ham9yVmVyc2lvbigpOwoKICAvLy8gVGhlIG1pbm9yIHZlcnNpb24gb2YgdGhlIHByb3RvY29sLiBJZiB0aGUgcnVubmluZyBEYXJ0IGVudmlyb25tZW50IGRvZXMKICAvLy8gbm90IHN1cHBvcnQgdGhlIHNlcnZpY2UgcHJvdG9jb2wsIHRoaXMgaXMgMC4KICBmaW5hbCBpbnQgbWlub3JWZXJzaW9uID0gX2dldFNlcnZpY2VNaW5vclZlcnNpb24oKTsKCiAgLy8vIFRoZSBVcmkgdG8gYWNjZXNzIHRoZSBzZXJ2aWNlLiBJZiB0aGUgd2ViIHNlcnZlciBpcyBub3QgcnVubmluZywgdGhpcwogIC8vLyB3aWxsIGJlIG51bGwuCiAgZmluYWwgVXJpIHNlcnZlclVyaTsKCiAgU2VydmljZVByb3RvY29sSW5mbyh0aGlzLnNlcnZlclVyaSk7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGlmIChzZXJ2ZXJVcmkgIT0gbnVsbCkgewogICAgICByZXR1cm4gJ0RhcnQgVk0gU2VydmljZSBQcm90b2NvbCB2JG1ham9yVmVyc2lvbi4kbWlub3JWZXJzaW9uICcKICAgICAgICAgICdsaXN0ZW5pbmcgb24gJHNlcnZlclVyaSc7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gJ0RhcnQgVk0gU2VydmljZSBQcm90b2NvbCB2JG1ham9yVmVyc2lvbi4kbWlub3JWZXJzaW9uJzsKICAgIH0KICB9Cn0KCi8vLyBBY2Nlc3MgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlcnZpY2UgcHJvdG9jb2wgYW5kIGNvbnRyb2wgdGhlIHdlYiBzZXJ2ZXIKLy8vIHRoYXQgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBzZXJ2aWNlcyBwcm92aWRlZCBieSB0aGUgRGFydCBWTSBmb3IKLy8vIGRlYnVnZ2luZyBhbmQgaW5zcGVjdGluZyBEYXJ0IHByb2dyYW1zLgpjbGFzcyBTZXJ2aWNlIHsKICAvLy8gR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZXJ2aWNlIHByb3RvY29sICh2ZXJzaW9uIG51bWJlciBhbmQKICAvLy8gVXJpIHRvIGFjY2VzcyB0aGUgc2VydmljZSkuCiAgc3RhdGljIEZ1dHVyZTxTZXJ2aWNlUHJvdG9jb2xJbmZvPiBnZXRJbmZvKCkgYXN5bmMgewogICAgLy8gUG9ydCB0byByZWNlaXZlIHJlc3BvbnNlIGZyb20gc2VydmljZSBpc29sYXRlLgogICAgZmluYWwgUmF3UmVjZWl2ZVBvcnQgcmVjZWl2ZVBvcnQgPSBuZXcgUmF3UmVjZWl2ZVBvcnQoKTsKICAgIGZpbmFsIENvbXBsZXRlcjxVcmk+IHVyaUNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXI8VXJpPigpOwogICAgcmVjZWl2ZVBvcnQuaGFuZGxlciA9IChVcmkgdXJpKSA9PiB1cmlDb21wbGV0ZXIuY29tcGxldGUodXJpKTsKICAgIC8vIFJlcXVlc3QgdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlIHNlcnZpY2UgaXNvbGF0ZS4KICAgIF9nZXRTZXJ2ZXJJbmZvKHJlY2VpdmVQb3J0LnNlbmRQb3J0KTsKICAgIC8vIEF3YWl0IHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2aWNlIGlzb2xhdGUuCiAgICBVcmkgdXJpID0gYXdhaXQgdXJpQ29tcGxldGVyLmZ1dHVyZTsKICAgIC8vIENsb3NlIHRoZSBwb3J0LgogICAgcmVjZWl2ZVBvcnQuY2xvc2UoKTsKICAgIHJldHVybiBuZXcgU2VydmljZVByb3RvY29sSW5mbyh1cmkpOwogIH0KCiAgLy8vIENvbnRyb2wgdGhlIHdlYiBzZXJ2ZXIgdGhhdCB0aGUgc2VydmljZSBwcm90b2NvbCBpcyBhY2Nlc3NlZCB0aHJvdWdoLgogIC8vLyBUaGUgW2VuYWJsZV0gYXJndW1lbnQgbXVzdCBiZSBhIGJvb2xlYW4gYW5kIGlzIHVzZWQgYXMgYSB0b2dnbGUgdG8KICAvLy8gZW5hYmxlICh0cnVlKSBvciBkaXNhYmxlIChmYWxzZSkgdGhlIHdlYiBzZXJ2ZXIgc2VydmljaW5nIHJlcXVlc3RzLgogIHN0YXRpYyBGdXR1cmU8U2VydmljZVByb3RvY29sSW5mbz4gY29udHJvbFdlYlNlcnZlcigKICAgICAge2Jvb2wgZW5hYmxlOiBmYWxzZX0pIGFzeW5jIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGVuYWJsZSwgJ2VuYWJsZScpOwogICAgLy8gUG9ydCB0byByZWNlaXZlIHJlc3BvbnNlIGZyb20gc2VydmljZSBpc29sYXRlLgogICAgZmluYWwgUmF3UmVjZWl2ZVBvcnQgcmVjZWl2ZVBvcnQgPSBuZXcgUmF3UmVjZWl2ZVBvcnQoKTsKICAgIGZpbmFsIENvbXBsZXRlcjxVcmk+IHVyaUNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXI8VXJpPigpOwogICAgcmVjZWl2ZVBvcnQuaGFuZGxlciA9IChVcmkgdXJpKSA9PiB1cmlDb21wbGV0ZXIuY29tcGxldGUodXJpKTsKICAgIC8vIFJlcXVlc3QgdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlIHNlcnZpY2UgaXNvbGF0ZS4KICAgIF93ZWJTZXJ2ZXJDb250cm9sKHJlY2VpdmVQb3J0LnNlbmRQb3J0LCBlbmFibGUpOwogICAgLy8gQXdhaXQgdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZpY2UgaXNvbGF0ZS4KICAgIFVyaSB1cmkgPSBhd2FpdCB1cmlDb21wbGV0ZXIuZnV0dXJlOwogICAgLy8gQ2xvc2UgdGhlIHBvcnQuCiAgICByZWNlaXZlUG9ydC5jbG9zZSgpOwogICAgcmV0dXJuIG5ldyBTZXJ2aWNlUHJvdG9jb2xJbmZvKHVyaSk7CiAgfQoKICAvLy8gUmV0dXJucyBhIFtTdHJpbmddIHRva2VuIHJlcHJlc2VudGluZyB0aGUgSUQgb2YgW2lzb2xhdGVdLgogIC8vLwogIC8vLyBSZXR1cm5zIG51bGwgaWYgdGhlIHJ1bm5pbmcgRGFydCBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBzZXJ2aWNlCiAgLy8vIHByb3RvY29sLgogIHN0YXRpYyBTdHJpbmcgZ2V0SXNvbGF0ZUlEKElzb2xhdGUgaXNvbGF0ZSkgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwoaXNvbGF0ZSwgJ2lzb2xhdGUnKTsKICAgIHJldHVybiBfZ2V0SXNvbGF0ZUlERnJvbVNlbmRQb3J0KGlzb2xhdGUuY29udHJvbFBvcnQpOwogIH0KfQoKLy8vIFtzZW5kUG9ydF0gd2lsbCByZWNlaXZlIGEgVXJpIG9yIG51bGwuCmV4dGVybmFsIHZvaWQgX2dldFNlcnZlckluZm8oU2VuZFBvcnQgc2VuZFBvcnQpOwoKLy8vIFtzZW5kUG9ydF0gd2lsbCByZWNlaXZlIGEgVXJpIG9yIG51bGwuCmV4dGVybmFsIHZvaWQgX3dlYlNlcnZlckNvbnRyb2woU2VuZFBvcnQgc2VuZFBvcnQsIGJvb2wgZW5hYmxlKTsKCi8vLyBSZXR1cm5zIHRoZSBtYWpvciB2ZXJzaW9uIG9mIHRoZSBzZXJ2aWNlIHByb3RvY29sLgpleHRlcm5hbCBpbnQgX2dldFNlcnZpY2VNYWpvclZlcnNpb24oKTsKCi8vLyBSZXR1cm5zIHRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoZSBzZXJ2aWNlIHByb3RvY29sLgpleHRlcm5hbCBpbnQgX2dldFNlcnZpY2VNaW5vclZlcnNpb24oKTsKCi8vLyBSZXR1cm5zIHRoZSBzZXJ2aWNlIGlkIGZvciB0aGUgaXNvbGF0ZSB0aGF0IG93bnMgW3NlbmRQb3J0XS4KZXh0ZXJuYWwgU3RyaW5nIF9nZXRJc29sYXRlSURGcm9tU2VuZFBvcnQoU2VuZFBvcnQgc2VuZFBvcnQpOwpkAE5OPAEYAUhBSDccTjM2AU4zNgFMFBcBJwEWHUYlDUYGBAIBTUUsEEUiNzY9PkM5KjQpFxkpBAFMSUo3JDI2PT5DOTU0KRcZKQQBQQZQEDA0OwQCASsxAStBATcoATcoAUE+ARtkYXJ0OmRldmVsb3Blci9zZXJ2aWNlLmRhcnQub3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9kZXZlbG9wZXIuZGFydJT2Ly8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBOb3RlOiB0aGUgVk0gY29uY2F0ZW5hdGVzIGFsbCBwYXRjaCBmaWxlcyBpbnRvIGEgc2luZ2xlIHBhdGNoIGZpbGUuIFRoaXMKLy8vIGZpbGUgaXMgdGhlIGZpcnN0IHBhdGNoIGluICJkYXJ0OmRldmVsb3BlciIgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBpbXBvcnRzCi8vLyB1c2VkIGJ5IHBhdGNoZXMgb2YgdGhhdCBsaWJyYXJ5LiBXZSBwbGFuIHRvIGNoYW5nZSB0aGlzIHdoZW4gd2UgaGF2ZSBhCi8vLyBzaGFyZWQgZnJvbnQgZW5kIGFuZCBzaW1wbHkgdXNlIHBhcnRzLgoKaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIgc2hvdyBwYXRjaDsKCmltcG9ydCAiZGFydDphc3luYyIgc2hvdyBGdXR1cmUsIFpvbmU7CgppbXBvcnQgImRhcnQ6aXNvbGF0ZSIgc2hvdyBTZW5kUG9ydDsKCi8vLyBUaGVzZSBhcmUgdGhlIGFkZGl0aW9uYWwgcGFydHMgb2YgdGhpcyBwYXRjaCBsaWJyYXJ5OgovLyBwYXJ0ICJwcm9maWxlci5kYXJ0IgovLyBwYXJ0ICJ0aW1lbGluZS5kYXJ0IgoKQHBhdGNoCmJvb2wgZGVidWdnZXIoe2Jvb2wgd2hlbjogdHJ1ZSwgU3RyaW5nIG1lc3NhZ2V9KSBuYXRpdmUgIkRldmVsb3Blcl9kZWJ1Z2dlciI7CgpAcGF0Y2gKT2JqZWN0IGluc3BlY3QoT2JqZWN0IG9iamVjdCkgbmF0aXZlICJEZXZlbG9wZXJfaW5zcGVjdCI7CgpAcGF0Y2gKdm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UsCiAgICB7RGF0ZVRpbWUgdGltZSwKICAgIGludCBzZXF1ZW5jZU51bWJlciwKICAgIGludCBsZXZlbDogMCwKICAgIFN0cmluZyBuYW1lOiAnJywKICAgIFpvbmUgem9uZSwKICAgIE9iamVjdCBlcnJvciwKICAgIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZX0pIHsKICBpZiAobWVzc2FnZSBpcyEgU3RyaW5nKSB7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZShtZXNzYWdlLCAibWVzc2FnZSIsICJNdXN0IGJlIGEgU3RyaW5nIik7CiAgfQogIHRpbWUgPz89IG5ldyBEYXRlVGltZS5ub3coKTsKICBpZiAodGltZSBpcyEgRGF0ZVRpbWUpIHsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKHRpbWUsICJ0aW1lIiwgIk11c3QgYmUgYSBEYXRlVGltZSIpOwogIH0KICBpZiAoc2VxdWVuY2VOdW1iZXIgPT0gbnVsbCkgewogICAgc2VxdWVuY2VOdW1iZXIgPSBfbmV4dFNlcXVlbmNlTnVtYmVyKys7CiAgfSBlbHNlIHsKICAgIF9uZXh0U2VxdWVuY2VOdW1iZXIgPSBzZXF1ZW5jZU51bWJlciArIDE7CiAgfQogIF9sb2cobWVzc2FnZSwgdGltZS5taWxsaXNlY29uZHNTaW5jZUVwb2NoLCBzZXF1ZW5jZU51bWJlciwgbGV2ZWwsIG5hbWUsIHpvbmUsCiAgICAgIGVycm9yLCBzdGFja1RyYWNlKTsKfQoKaW50IF9uZXh0U2VxdWVuY2VOdW1iZXIgPSAwOwoKX2xvZyhTdHJpbmcgbWVzc2FnZSwgaW50IHRpbWVzdGFtcCwgaW50IHNlcXVlbmNlTnVtYmVyLCBpbnQgbGV2ZWwsIFN0cmluZyBuYW1lLAogICAgWm9uZSB6b25lLCBPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgbmF0aXZlICJEZXZlbG9wZXJfbG9nIjsKCkBwYXRjaAp2b2lkIF9wb3N0RXZlbnQoU3RyaW5nIGV2ZW50S2luZCwgU3RyaW5nIGV2ZW50RGF0YSkKICAgIG5hdGl2ZSAiRGV2ZWxvcGVyX3Bvc3RFdmVudCI7CgpAcGF0Y2gKU2VydmljZUV4dGVuc2lvbkhhbmRsZXIgX2xvb2t1cEV4dGVuc2lvbihTdHJpbmcgbWV0aG9kKQogICAgbmF0aXZlICJEZXZlbG9wZXJfbG9va3VwRXh0ZW5zaW9uIjsKCkBwYXRjaApfcmVnaXN0ZXJFeHRlbnNpb24oU3RyaW5nIG1ldGhvZCwgU2VydmljZUV4dGVuc2lvbkhhbmRsZXIgaGFuZGxlcikKICAgIG5hdGl2ZSAiRGV2ZWxvcGVyX3JlZ2lzdGVyRXh0ZW5zaW9uIjsKCi8vIFRoaXMgY29kZSBpcyBvbmx5IGludm9rZWQgd2hlbiB0aGVyZSBpcyBubyBvdGhlciBEYXJ0IGNvZGUgb24gdGhlIHN0YWNrLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICFjb25zdCBib29sLmZyb21FbnZpcm9ubWVudCgiZGFydC52bS5wcm9kdWN0IikpCl9ydW5FeHRlbnNpb24oCiAgICBTZXJ2aWNlRXh0ZW5zaW9uSGFuZGxlciBoYW5kbGVyLAogICAgU3RyaW5nIG1ldGhvZCwKICAgIExpc3Q8U3RyaW5nPiBwYXJhbWV0ZXJLZXlzLAogICAgTGlzdDxTdHJpbmc+IHBhcmFtZXRlclZhbHVlcywKICAgIFNlbmRQb3J0IHJlcGx5UG9ydCwKICAgIE9iamVjdCBpZCwKICAgIGJvb2wgdHJhY2Vfc2VydmljZSkgewogIHZhciBwYXJhbWV0ZXJzID0gPFN0cmluZywgU3RyaW5nPnt9OwogIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1ldGVyS2V5cy5sZW5ndGg7IGkrKykgewogICAgcGFyYW1ldGVyc1twYXJhbWV0ZXJLZXlzW2ldXSA9IHBhcmFtZXRlclZhbHVlc1tpXTsKICB9CiAgdmFyIHJlc3BvbnNlOwogIHRyeSB7CiAgICByZXNwb25zZSA9IGhhbmRsZXIobWV0aG9kLCBwYXJhbWV0ZXJzKTsKICB9IGNhdGNoIChlLCBzdCkgewogICAgdmFyIGVycm9yRGV0YWlscyA9IChzdCA9PSBudWxsKSA/ICckZScgOiAnJGVcbiRzdCc7CiAgICByZXNwb25zZSA9IG5ldyBTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2UuZXJyb3IoCiAgICAgICAgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlLmtFeHRlbnNpb25FcnJvciwgZXJyb3JEZXRhaWxzKTsKICAgIF9wb3N0UmVzcG9uc2UocmVwbHlQb3J0LCBpZCwgcmVzcG9uc2UsIHRyYWNlX3NlcnZpY2UpOwogICAgcmV0dXJuOwogIH0KICBpZiAocmVzcG9uc2UgaXMhIEZ1dHVyZSkgewogICAgcmVzcG9uc2UgPSBuZXcgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlLmVycm9yKAogICAgICAgIFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5rRXh0ZW5zaW9uRXJyb3IsCiAgICAgICAgIkV4dGVuc2lvbiBoYW5kbGVyIG11c3QgcmV0dXJuIGEgRnV0dXJlIik7CiAgICBfcG9zdFJlc3BvbnNlKHJlcGx5UG9ydCwgaWQsIHJlc3BvbnNlLCB0cmFjZV9zZXJ2aWNlKTsKICAgIHJldHVybjsKICB9CiAgcmVzcG9uc2UuY2F0Y2hFcnJvcigoZSwgc3QpIHsKICAgIC8vIENhdGNoIGFueSBlcnJvcnMgZWFnZXJseSBhbmQgd3JhcCB0aGVtIGluIGEgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlLgogICAgdmFyIGVycm9yRGV0YWlscyA9IChzdCA9PSBudWxsKSA/ICckZScgOiAnJGVcbiRzdCc7CiAgICByZXR1cm4gbmV3IFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5lcnJvcigKICAgICAgICBTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2Uua0V4dGVuc2lvbkVycm9yLCBlcnJvckRldGFpbHMpOwogIH0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAvLyBQb3N0IHRoZSB2YWxpZCByZXNwb25zZSBvciB0aGUgd3JhcHBlZCBlcnJvciBhZnRlciB2ZXJpZnlpbmcgdGhhdAogICAgLy8gdGhlIHJlc3BvbnNlIGlzIGEgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlLgogICAgaWYgKHJlc3BvbnNlIGlzISBTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2UpIHsKICAgICAgcmVzcG9uc2UgPSBuZXcgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlLmVycm9yKAogICAgICAgICAgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlLmtFeHRlbnNpb25FcnJvciwKICAgICAgICAgICJFeHRlbnNpb24gaGFuZGxlciBtdXN0IGNvbXBsZXRlIHRvIGEgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlIik7CiAgICB9CiAgICBfcG9zdFJlc3BvbnNlKHJlcGx5UG9ydCwgaWQsIHJlc3BvbnNlLCB0cmFjZV9zZXJ2aWNlKTsKICB9KS5jYXRjaEVycm9yKChlLCBzdCkgewogICAgLy8gV2UgZG8gbm90IGV4cGVjdCBhbnkgZXJyb3JzIHRvIG9jY3VyIGluIHRoZSAudGhlbiBvciAuY2F0Y2hFcnJvciBibG9ja3MKICAgIC8vIGJ1dCwgc3VwcHJlc3MgdGhlbSBqdXN0IGluIGNhc2UuCiAgfSk7Cn0KCi8vIFRoaXMgY29kZSBpcyBvbmx5IGludm9rZWQgYnkgX3J1bkV4dGVuc2lvbi4KX3Bvc3RSZXNwb25zZShTZW5kUG9ydCByZXBseVBvcnQsIE9iamVjdCBpZCwgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlIHJlc3BvbnNlLAogICAgYm9vbCB0cmFjZV9zZXJ2aWNlKSB7CiAgYXNzZXJ0KHJlcGx5UG9ydCAhPSBudWxsKTsKICBpZiAoaWQgPT0gbnVsbCkgewogICAgaWYgKHRyYWNlX3NlcnZpY2UpIHsKICAgICAgcHJpbnQoInZtLXNlcnZpY2U6IHBvc3Rpbmcgbm8gcmVzcG9uc2UgZm9yIHJlcXVlc3QiKTsKICAgIH0KICAgIC8vIE5vIGlkIC0+IG5vIHJlc3BvbnNlLgogICAgcmVwbHlQb3J0LnNlbmQobnVsbCk7CiAgICByZXR1cm47CiAgfQogIGFzc2VydChpZCAhPSBudWxsKTsKICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgc2Iud3JpdGUoJ3sianNvbnJwYyI6IjIuMCIsJyk7CiAgaWYgKHJlc3BvbnNlLmlzRXJyb3IoKSkgewogICAgaWYgKHRyYWNlX3NlcnZpY2UpIHsKICAgICAgcHJpbnQoInZtLXNlcnZpY2U6IHBvc3RpbmcgZXJyb3IgcmVzcG9uc2UgZm9yIHJlcXVlc3QgJGlkIik7CiAgICB9CiAgICBzYi53cml0ZSgnImVycm9yIjonKTsKICB9IGVsc2UgewogICAgaWYgKHRyYWNlX3NlcnZpY2UpIHsKICAgICAgcHJpbnQoInZtLXNlcnZpY2U6IHBvc3RpbmcgcmVzcG9uc2UgZm9yIHJlcXVlc3QgJGlkIik7CiAgICB9CiAgICBzYi53cml0ZSgnInJlc3VsdCI6Jyk7CiAgfQogIHNiLndyaXRlKCcke3Jlc3BvbnNlLl90b1N0cmluZygpfSwnKTsKICBpZiAoaWQgaXMgU3RyaW5nKSB7CiAgICBzYi53cml0ZSgnImlkIjoiJGlkIn0nKTsKICB9IGVsc2UgewogICAgc2Iud3JpdGUoJyJpZCI6JGlkfScpOwogIH0KICByZXBseVBvcnQuc2VuZChzYi50b1N0cmluZygpKTsKfQoKQHBhdGNoCmludCBfZ2V0U2VydmljZU1ham9yVmVyc2lvbigpIG5hdGl2ZSAiRGV2ZWxvcGVyX2dldFNlcnZpY2VNYWpvclZlcnNpb24iOwoKQHBhdGNoCmludCBfZ2V0U2VydmljZU1pbm9yVmVyc2lvbigpIG5hdGl2ZSAiRGV2ZWxvcGVyX2dldFNlcnZpY2VNaW5vclZlcnNpb24iOwoKQHBhdGNoCnZvaWQgX2dldFNlcnZlckluZm8oU2VuZFBvcnQgc2VuZFBvcnQpIG5hdGl2ZSAiRGV2ZWxvcGVyX2dldFNlcnZlckluZm8iOwoKQHBhdGNoCnZvaWQgX3dlYlNlcnZlckNvbnRyb2woU2VuZFBvcnQgc2VuZFBvcnQsIGJvb2wgZW5hYmxlKQogICAgbmF0aXZlICJEZXZlbG9wZXJfd2ViU2VydmVyQ29udHJvbCI7CgpAcGF0Y2gKU3RyaW5nIF9nZXRJc29sYXRlSURGcm9tU2VuZFBvcnQoU2VuZFBvcnQgc2VuZFBvcnQpCiAgICBuYXRpdmUgIkRldmVsb3Blcl9nZXRJc29sYXRlSURGcm9tU2VuZFBvcnQiOwqAqwBOTjwBTU9LKwEkAScBJQE6GBgBB04BBzoBBxkUGBIVDxIeHEsEHxtHBCAsCy4EUBoCAR0BUEwBBzQiAQc4KAEHQyoBTEoPJRMgIhgPGiczNwQQCCwUODNBOwwEHTMyMzsMBCBNOC9BF0kzMTU0TAY7Gk8oBgIBL1AaHRQZPAYdGgwEFighHBlDBhoLGT0GGwQoFh0LGwQhAgEHSQEHSQEHSQEHNykBBzQxASNkYXJ0OmRldmVsb3Blci1wYXRjaC9kZXZlbG9wZXIuZGFydC1vcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL3RpbWVsaW5lLmRhcnSEcy8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJkZXZlbG9wZXIuZGFydCI7CgpAcGF0Y2gKYm9vbCBfaXNEYXJ0U3RyZWFtRW5hYmxlZCgpIG5hdGl2ZSAiVGltZWxpbmVfaXNEYXJ0U3RyZWFtRW5hYmxlZCI7CgpAcGF0Y2gKaW50IF9nZXRUcmFjZUNsb2NrKCkgbmF0aXZlICJUaW1lbGluZV9nZXRUcmFjZUNsb2NrIjsKCkBwYXRjaAppbnQgX2dldFRocmVhZENwdUNsb2NrKCkgbmF0aXZlICJUaW1lbGluZV9nZXRUaHJlYWRDcHVDbG9jayI7CgpAcGF0Y2gKaW50IF9nZXROZXh0QXN5bmNJZCgpIG5hdGl2ZSAiVGltZWxpbmVfZ2V0TmV4dEFzeW5jSWQiOwoKQHBhdGNoCnZvaWQgX3JlcG9ydFRhc2tFdmVudChpbnQgc3RhcnQsIGludCB0YXNrSWQsIFN0cmluZyBwaGFzZSwgU3RyaW5nIGNhdGVnb3J5LAogICAgU3RyaW5nIG5hbWUsIFN0cmluZyBhcmd1bWVudHNBc0pzb24pIG5hdGl2ZSAiVGltZWxpbmVfcmVwb3J0VGFza0V2ZW50IjsKCkBwYXRjaAp2b2lkIF9yZXBvcnRDb21wbGV0ZUV2ZW50KGludCBzdGFydCwgaW50IHN0YXJ0Q3B1LCBTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBuYW1lLAogICAgU3RyaW5nIGFyZ3VtZW50c0FzSnNvbikgbmF0aXZlICJUaW1lbGluZV9yZXBvcnRDb21wbGV0ZUV2ZW50IjsKCkBwYXRjaAp2b2lkIF9yZXBvcnRGbG93RXZlbnQoaW50IHN0YXJ0LCBpbnQgc3RhcnRDcHUsIFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG5hbWUsCiAgICBpbnQgdHlwZSwgaW50IGlkLCBTdHJpbmcgYXJndW1lbnRzQXNKc29uKSBuYXRpdmUgIlRpbWVsaW5lX3JlcG9ydEZsb3dFdmVudCI7CgpAcGF0Y2gKdm9pZCBfcmVwb3J0SW5zdGFudEV2ZW50KGludCBzdGFydCwgU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbmFtZSwKICAgIFN0cmluZyBhcmd1bWVudHNBc0pzb24pIG5hdGl2ZSAiVGltZWxpbmVfcmVwb3J0SW5zdGFudEV2ZW50IjsKIwBOTjwBHQEHQwEHNgEHPgEHOAEHTEwBB1FDAQdNUQEHQkIBImRhcnQ6ZGV2ZWxvcGVyLXBhdGNoL3RpbWVsaW5lLmRhcnQob3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2ZmaS9mZmkuZGFydJTGLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQoKLy8vIHtAY2F0ZWdvcnkgVk19Ci8vLyB7QG5vZG9jfQpsaWJyYXJ5IGRhcnQuZmZpOwoKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnIHNob3cgVHlwZWREYXRhOwoKcGFydCAibmF0aXZlX3R5cGUuZGFydCI7CnBhcnQgImFubm90YXRpb25zLmRhcnQiOwpwYXJ0ICJkeW5hbWljX2xpYnJhcnkuZGFydCI7CnBhcnQgInN0cnVjdC5kYXJ0IjsKCi8vLyBOdW1iZXIgb2YgYnl0ZXMgdXNlZCBieSBuYXRpdmUgdHlwZSBULgovLy8KLy8vIEluY2x1ZGVzIHBhZGRpbmcgYW5kIGFsaWdubWVudCBvZiBzdHJ1Y3RzLgpleHRlcm5hbCBpbnQgc2l6ZU9mPFQgZXh0ZW5kcyBOYXRpdmVUeXBlPigpOwoKLy8vIFJlcHJlc2VudHMgYSBwb2ludGVyIGludG8gdGhlIG5hdGl2ZSBDIG1lbW9yeS4KZmluYWwgUG9pbnRlcjxWb2lkPiBudWxscHRyID0gUG9pbnRlci5mcm9tQWRkcmVzcygwKTsKCi8vLyBSZXByZXNlbnRzIGEgcG9pbnRlciBpbnRvIHRoZSBuYXRpdmUgQyBtZW1vcnkuIENhbm5vdCBiZSBleHRlbmRlZC4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBQb2ludGVyPFQgZXh0ZW5kcyBOYXRpdmVUeXBlPiBleHRlbmRzIE5hdGl2ZVR5cGUgewogIC8vLyBBbGxvY2F0ZSBbY291bnRdIGVsZW1lbnRzIG9mIHR5cGUgW1RdIG9uIHRoZSBuYXRpdmUgaGVhcCB2aWEgbWFsbG9jKCkgYW5kCiAgLy8vIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkuCiAgLy8vCiAgLy8vIE5vdGUgdGhhdCB0aGUgbWVtb3J5IGlzIHVuaW5pdGlhbGl6ZWQuCiAgZXh0ZXJuYWwgZmFjdG9yeSBQb2ludGVyLmFsbG9jYXRlKHtpbnQgY291bnQ6IDF9KTsKCiAgLy8vIENvbnN0cnVjdGlvbiBmcm9tIHJhdyBpbnRlZ2VyLgogIGV4dGVybmFsIGZhY3RvcnkgUG9pbnRlci5mcm9tQWRkcmVzcyhpbnQgcHRyKTsKCiAgLy8vIENvbnZlcnQgRGFydCBmdW5jdGlvbiB0byBhIEMgZnVuY3Rpb24gcG9pbnRlciwgYXV0b21hdGljYWxseSBtYXJzaGFsbGluZwogIC8vLyB0aGUgYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWUKICAvLy8KICAvLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biB3aGlsZSBjYWxsaW5nIGBmKClgLCB0aGUgbmF0aXZlIGZ1bmN0aW9uIHdpbGwKICAvLy8gcmV0dXJuIGBleGNlcHRpb25hbFJldHVybmAsIHdoaWNoIG11c3QgYmUgYXNzaWduYWJsZSB0byByZXR1cm4gdHlwZSBvZiBgZmAuCiAgLy8vCiAgLy8vIFRoZSByZXR1cm5lZCBmdW5jdGlvbiBhZGRyZXNzIGNhbiBvbmx5IGJlIGludm9rZWQgb24gdGhlIG11dGF0b3IgKG1haW4pCiAgLy8vIHRocmVhZCBvZiB0aGUgY3VycmVudCBpc29sYXRlLiBJdCB3aWxsIGFib3J0IHRoZSBwcm9jZXNzIGlmIGludm9rZWQgb24gYW55CiAgLy8vIG90aGVyIHRocmVhZC4KICAvLy8KICAvLy8gVGhlIHBvaW50ZXIgcmV0dXJuZWQgd2lsbCByZW1haW4gYWxpdmUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgY3VycmVudAogIC8vLyBpc29sYXRlJ3MgbGlmZXRpbWUuIEFmdGVyIHRoZSBpc29sYXRlIGl0IHdhcyBjcmVhdGVkIGluIGlzIHRlcm1pbmF0ZWQsCiAgLy8vIGludm9raW5nIGl0IGZyb20gbmF0aXZlIGNvZGUgd2lsbCBjYXVzZSB1bmRlZmluZWQgYmVoYXZpb3IuCiAgLy8vCiAgLy8vIERvZXMgbm90IGFjY2VwdCBkeW5hbWljIGludm9jYXRpb25zIC0tIHdoZXJlIHRoZSB0eXBlIG9mIHRoZSByZWNlaXZlciBpcwogIC8vLyBbZHluYW1pY10uCiAgZXh0ZXJuYWwgc3RhdGljIFBvaW50ZXI8TmF0aXZlRnVuY3Rpb248VD4+IGZyb21GdW5jdGlvbjxUIGV4dGVuZHMgRnVuY3Rpb24+KAogICAgICBARGFydFJlcHJlc2VudGF0aW9uT2YoIlQiKSBGdW5jdGlvbiBmLCBPYmplY3QgZXhjZXB0aW9uYWxSZXR1cm4pOwoKICAvLy8gU3RvcmUgYSBEYXJ0IHZhbHVlIGludG8gdGhpcyBsb2NhdGlvbi4KICAvLy8KICAvLy8gVGhlIFt2YWx1ZV0gaXMgYXV0b21hdGljYWxseSBtYXJzaGFsbGVkIGludG8gaXRzIG5hdGl2ZSByZXByZXNlbnRhdGlvbi4KICAvLy8gTm90ZSB0aGF0IGludHMgd2hpY2ggZG8gbm90IGZpdCBpbiBbVF0gYXJlIHRydW5jYXRlZCBhbmQgc2lnbiBleHRlbmRlZCwKICAvLy8gYW5kIGRvdWJsZXMgc3RvcmVkIGludG8gUG9pbnRlcjxbRmxvYXRdPiBsb3NlIHByZWNpc2lvbi4KICBleHRlcm5hbCB2b2lkIHN0b3JlKEBEYXJ0UmVwcmVzZW50YXRpb25PZigiVCIpIE9iamVjdCB2YWx1ZSk7CgogIC8vLyBMb2FkIGEgRGFydCB2YWx1ZSBmcm9tIHRoaXMgbG9jYXRpb24uCiAgLy8vCiAgLy8vIFRoZSB2YWx1ZSBpcyBhdXRvbWF0aWNhbGx5IHVubWFyc2hhbGxlZCBmcm9tIGl0cyBuYXRpdmUgcmVwcmVzZW50YXRpb24uCiAgLy8vIExvYWRpbmcgYSBbU3RydWN0XSByZWZlcmVuY2UgcmV0dXJucyBhIHJlZmVyZW5jZSBiYWNrZWQgYnkgbmF0aXZlIG1lbW9yeQogIC8vLyAodGhlIHNhbWUgcG9pbnRlciBhcyBpdCdzIGxvYWRlZCBmcm9tKS4KICBleHRlcm5hbCBSIGxvYWQ8QERhcnRSZXByZXNlbnRhdGlvbk9mKCJUIikgUj4oKTsKCiAgLy8vIEFjY2VzcyB0byB0aGUgcmF3IHBvaW50ZXIgdmFsdWUuCiAgLy8vIE9uIDMyLWJpdCBzeXN0ZW1zLCB0aGUgdXBwZXIgMzItYml0cyBvZiB0aGUgcmVzdWx0IGFyZSAwLgogIGV4dGVybmFsIGludCBnZXQgYWRkcmVzczsKCiAgLy8vIFBvaW50ZXIgYXJpdGhtZXRpYyAodGFrZXMgZWxlbWVudCBzaXplIGludG8gYWNjb3VudCkuCiAgZXh0ZXJuYWwgUG9pbnRlcjxUPiBlbGVtZW50QXQoaW50IGluZGV4KTsKCiAgLy8vIFBvaW50ZXIgYXJpdGhtZXRpYyAoYnl0ZSBvZmZzZXQpLgogIC8vIFRPRE8oZGFjb2hhcmtlcyk6IHJlbW92ZSB0aGlzPwogIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvc2RrL2lzc3Vlcy8zNTg4MwogIGV4dGVybmFsIFBvaW50ZXI8VD4gb2Zmc2V0QnkoaW50IG9mZnNldEluQnl0ZXMpOwoKICAvLy8gQ2FzdCBQb2ludGVyPFQ+IHRvIGEgUG9pbnRlcjxWPi4KICBleHRlcm5hbCBQb2ludGVyPFU+IGNhc3Q8VSBleHRlbmRzIE5hdGl2ZVR5cGU+KCk7CgogIC8vLyBDb252ZXJ0IHRvIERhcnQgZnVuY3Rpb24sIGF1dG9tYXRpY2FsbHkgbWFyc2hhbGxpbmcgdGhlIGFyZ3VtZW50cwogIC8vLyBhbmQgcmV0dXJuIHZhbHVlLgogIC8vLwogIC8vLyBDYW4gb25seSBiZSBjYWxsZWQgb24gW1BvaW50ZXJdPFtOYXRpdmVGdW5jdGlvbl0+LiBEb2VzIG5vdCBhY2NlcHQgZHluYW1pYwogIC8vLyBpbnZvY2F0aW9ucyAtLSB3aGVyZSB0aGUgdHlwZSBvZiB0aGUgcmVjZWl2ZXIgaXMgW2R5bmFtaWNdLgogIGV4dGVybmFsIFIgYXNGdW5jdGlvbjxARGFydFJlcHJlc2VudGF0aW9uT2YoIlQiKSBSIGV4dGVuZHMgRnVuY3Rpb24+KCk7CgogIC8vLyBGcmVlIG1lbW9yeSBvbiB0aGUgQyBoZWFwIHBvaW50ZWQgdG8gYnkgdGhpcyBwb2ludGVyIHdpdGggZnJlZSgpLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgdGhpcyB6ZXJvcyBvdXQgdGhlIGFkZHJlc3MuCiAgZXh0ZXJuYWwgdm9pZCBmcmVlKCk7CgogIC8vLyBDcmVhdGVzIGFuICpleHRlcm5hbCogdHlwZWQgZGF0YSBhcnJheSBiYWNrZWQgYnkgdGhpcyBwb2ludGVyLgogIC8vLwogIC8vLyBUaGUgdHlwZWQgZGF0YSBhcnJheSByZXR1cm5lZCBpcyBvbmx5IHZhbGlkIGZvciBhcyBsb25nIGFzIHRoZSBiYWNraW5nCiAgLy8vIFtQb2ludGVyXS4gQWNjZXNzaW5nIGFueSBlbGVtZW50IG9mIHRoZSB0eXBlIGRhdGEgYXJyYXkgYWZ0ZXIgdGhpcwogIC8vLyBbUG9pbnRlcl0gaGFzIGJlZW4gW1BvaW50ZXIuZnJlZSgpXWQgd2lsbCBjYXVzZSB1bmRlZmluZWQgYmVoYXZpb3IuCiAgLy8vCiAgLy8vIFNpbmNlIFtQb2ludGVyXXMgZG8gbm90IGtub3cgdGhlaXIgbGVuZ3RoLCB0aGUgc2l6ZSBvZiB0aGUgdHlwZWQgZGF0YSBpcwogIC8vLyBjb250cm9sbGVkIGJ5IGBjb3VudGAsIGluIHVuaXRzIG9mIHRoZSBzaXplIG9mIHRoZSBuYXRpdmUgdHlwZSBmb3IgdGhpcwogIC8vLyBbUG9pbnRlcl0gKHNpbWlsYXJseSB0byBbUG9pbnRlci5hbGxvY2F0ZV0pLgogIC8vLwogIC8vLyBUaGUga2luZCBvZiBUeXBlZERhdGEgcHJvZHVjZWQgZGVwZW5kcyBvbiB0aGUgbmF0aXZlIHR5cGU6CiAgLy8vCiAgLy8vICAgUG9pbnRlcjxJbnQ4PiAtPiBJbnQ4TGlzdAogIC8vLyAgIFBvaW50ZXI8VWludDg+IC0+IFVpbnQ4TGlzdAogIC8vLyAgIGV0Yy4gdXAgdG8gSW50NjQvVWludDY0CiAgLy8vICAgUG9pbnRlcjxJbnRQdHI+IC0+IEludDMyTGlzdC9JbnQ2NExpc3QgZGVwZW5kaW5nIG9uIHBsYXRmb3JtIHdvcmQgc2l6ZQogIC8vLyAgIFBvaW50ZXI8RmxvYXQ+IC0+IEZsb2F0MzJMaXN0CiAgLy8vICAgUG9pbnRlcjxEb3VibGU+IC0+IEZsb2F0NjRMaXN0CiAgLy8vCiAgLy8vIENyZWF0aW9uIG9mIGEgW1VpbnQ4Q2xhbXBlZExpc3RdIGlzIG5vdCBzdXBwb3J0ZWQuIENyZWF0aW9uIG9mIGEgdHlwZWQKICAvLy8gZGF0YSBmcm9tIGEgW1BvaW50ZXJdIHRvIGFueSBvdGhlciBuYXRpdmUgdHlwZSBpcyBub3Qgc3VwcG9ydGVkLgogIC8vLwogIC8vLyBUaGUgcG9pbnRlciBtdXN0IGJlIGFsaWduZWQgdG8gYSBtdWx0aXBsZSBvZiB0aGUgbmF0aXZlIHR5cGUncyBzaXplLgogIC8vCiAgLy8gVE9ETygzNzc3Myk6IFVzZSBleHRlbnNpb24gbWV0aG9kcyB0byBhcnRpY3VsYXRlIG1vcmUgcHJlY2lzZSByZXR1cm4gdHlwZXMuCiAgLy8gV2Ugc2hvdWxkIHN0aWxsIGtlZXAgdGhpcyBtZW1iZXIgdGhvdWdoIGFzIGEgZ2VuZXJpYyB3YXkgdG8gYWNjZXNzIGEKICAvLyBQb2ludGVyIG9mIHVua25vd24gdHlwZS4KICBleHRlcm5hbCBUeXBlZERhdGEgYXNFeHRlcm5hbFR5cGVkRGF0YSh7aW50IGNvdW50OiAxfSk7CgogIC8vLyBFcXVhbGl0eSBmb3IgUG9pbnRlcnMgb25seSBkZXBlbmRzIG9uIHRoZWlyIGFkZHJlc3MuCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKG90aGVyID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBhZGRyZXNzID09IG90aGVyLmFkZHJlc3M7CiAgfQoKICAvLy8gVGhlIGhhc2ggY29kZSBmb3IgYSBQb2ludGVyIG9ubHkgZGVwZW5kcyBvbiBpdHMgYWRkcmVzcy4KICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiBhZGRyZXNzLmhhc2hDb2RlOwogIH0KfQqAiQBOTjsBEw0SASkBGRkdFAErBC8tATM2AUcaOVA2Bi01ASUxAU8lBk5SBk5RFAZNTUIGTxFPSAEtBk5OP0ABLAZOTy4zASdAHAE8LAEoJDMzASc0AUgYBlFCSgFIBiwYAUUGTUlKBk9OMwZBBiIkIE8mJwZNRwZLBVFKHjoBOxwlJQQBPxUdBAIBCGRhcnQ6ZmZpLm9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvZmZpX3BhdGNoLmRhcnSLiS8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBBbGwgaW1wb3J0cyBtdXN0IGJlIGluIGFsbCBGRkkgcGF0Y2ggZmlsZXMgdG8gbm90IGRlcGVuZCBvbiB0aGUgb3JkZXIKLy8gdGhlIHBhdGNoZXMgYXJlIGFwcGxpZWQuCmltcG9ydCAiZGFydDpfaW50ZXJuYWwiIHNob3cgcGF0Y2g7CmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJyBzaG93IFR5cGVkRGF0YTsKCkBwYXRjaAppbnQgc2l6ZU9mPFQgZXh0ZW5kcyBOYXRpdmVUeXBlPigpIG5hdGl2ZSAiRmZpX3NpemVPZiI7CgpQb2ludGVyPFQ+IF9hbGxvY2F0ZTxUIGV4dGVuZHMgTmF0aXZlVHlwZT4oaW50IGNvdW50KSBuYXRpdmUgIkZmaV9hbGxvY2F0ZSI7CgpQb2ludGVyPFQ+IF9mcm9tQWRkcmVzczxUIGV4dGVuZHMgTmF0aXZlVHlwZT4oaW50IHB0cikgbmF0aXZlICJGZmlfZnJvbUFkZHJlc3MiOwoKLy8gVGhlIHJlYWwgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiAoZm9yIGludGVyZmFjZSBjYWxscykgbGl2ZXMgaW4KLy8gQnVpbGRGZmlBc0Z1bmN0aW9uQ2FsbCBpbiB0aGUgS2VybmVsIGZyb250ZW5kLiBObyBjYWxscyBjYW4gYWN0dWFsbHkgcmVhY2gKLy8gdGhpcyBmdW5jdGlvbi4KRFMgX2FzRnVuY3Rpb25JbnRlcm5hbDxEUyBleHRlbmRzIEZ1bmN0aW9uLCBOUyBleHRlbmRzIEZ1bmN0aW9uPigKICAgIFBvaW50ZXI8TmF0aXZlRnVuY3Rpb248TlM+PiBwdHIpIG5hdGl2ZSAiRmZpX2FzRnVuY3Rpb25JbnRlcm5hbCI7CgpkeW5hbWljIF9hc0V4dGVybmFsVHlwZWREYXRhKFBvaW50ZXIgcHRyLCBpbnQgY291bnQpCiAgICBuYXRpdmUgIkZmaV9hc0V4dGVybmFsVHlwZWREYXRhIjsKCkBwYXRjaApAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIFBvaW50ZXI8VCBleHRlbmRzIE5hdGl2ZVR5cGU+IHsKICBAcGF0Y2gKICBmYWN0b3J5IFBvaW50ZXIuYWxsb2NhdGUoe2ludCBjb3VudDogMX0pID0+IF9hbGxvY2F0ZTxUPihjb3VudCk7CgogIEBwYXRjaAogIGZhY3RvcnkgUG9pbnRlci5mcm9tQWRkcmVzcyhpbnQgcHRyKSA9PiBfZnJvbUFkZHJlc3MocHRyKTsKCiAgQHBhdGNoCiAgc3RhdGljIFBvaW50ZXI8TmF0aXZlRnVuY3Rpb248VD4+IGZyb21GdW5jdGlvbjxUIGV4dGVuZHMgRnVuY3Rpb24+KAogICAgICBARGFydFJlcHJlc2VudGF0aW9uT2YoIlQiKSBGdW5jdGlvbiBmLAogICAgICBPYmplY3QgZXhjZXB0aW9uYWxSZXR1cm4pIG5hdGl2ZSAiRmZpX2Zyb21GdW5jdGlvbiI7CgogIC8vIFRPRE8oc2ppbmRlbCk6IFdoZW4gTk5CRCBpcyBhdmFpbGFibGUsIHdlIHNob3VsZCBjaGFuZ2UgYHZhbHVlYCB0byBiZQogIC8vIG5vbi1udWxsLgogIEBwYXRjaAogIHZvaWQgc3RvcmUoT2JqZWN0IHZhbHVlKSBuYXRpdmUgIkZmaV9zdG9yZSI7CgogIEBwYXRjaAogIFIgbG9hZDxSPigpIG5hdGl2ZSAiRmZpX2xvYWQiOwoKICBAcGF0Y2gKICBpbnQgZ2V0IGFkZHJlc3MgbmF0aXZlICJGZmlfYWRkcmVzcyI7CgogIC8vIE5vdGUgdGhpcyBjb3VsZCBhbHNvIGJlIGltcGxtZW50ZWQgd2l0aG91dCBhbiBleHRyYSBuYXRpdmUgYXMgb2Zmc2V0QnkKICAvLyAoZWxlbWVudFNpemUoKSppbmRleCkuIFRoaXMgd291bGQgYmUgMiBuYXRpdmUgY2FsbHMgcmF0aGVyIHRoYW4gb25lLiBXaGF0CiAgLy8gd291bGQgYmUgYmV0dGVyPwogIEBwYXRjaAogIFBvaW50ZXI8VD4gZWxlbWVudEF0KGludCBpbmRleCkgbmF0aXZlICJGZmlfZWxlbWVudEF0IjsKCiAgLy8gTm90ZSB0aGlzIGNvdWxkIGFsc28gYmUgaW1wbG1lbnRlZCB3aXRob3V0IGFuIGV4dHJhICBuYXRpdmUgYXMKICAvLyBmcm9tQWRkcmVzcyhhZGRyZXNzKS4gVGhpcyB3b3VsZCBiZSAyIG5hdGl2ZSBjYWxscyByYXRoZXIgdGhhbiBvbmUuCiAgLy8gV2hhdCB3b3VsZCBiZSBiZXR0ZXI/CiAgQHBhdGNoCiAgUG9pbnRlcjxUPiBvZmZzZXRCeShpbnQgb2Zmc2V0SW5CeXRlcykgbmF0aXZlICJGZmlfb2Zmc2V0QnkiOwoKICAvLyBOb3RlIHRoaXMgY291bGQgYWxzbyBiZSBpbXBsZW1lbnRlZCB3aXRob3V0IGFuIGV4dHJhIG5hdGl2ZSBhcwogIC8vIGZyb21BZGRyZXNzKGFkZHJlc3MpLiBUaGlzIHdvdWxkIGJlIDIgbmF0aXZlIGNhbGxzIHJhdGhlciB0aGFuIG9uZS4KICAvLyBXaGF0IHdvdWxkIGJlIGJldHRlcj8KICBAcGF0Y2gKICBQb2ludGVyPFU+IGNhc3Q8VSBleHRlbmRzIE5hdGl2ZVR5cGU+KCkgbmF0aXZlICJGZmlfY2FzdCI7CgogIEBwYXRjaAogIFIgYXNGdW5jdGlvbjxSIGV4dGVuZHMgRnVuY3Rpb24+KCkgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiUG9pbnRlci5hc0Z1bmN0aW9uIGNhbm5vdCBiZSBjYWxsZWQgZHluYW1pY2FsbHkuIik7CiAgfQoKICBAcGF0Y2gKICB2b2lkIGZyZWUoKSBuYXRpdmUgIkZmaV9mcmVlIjsKCiAgQHBhdGNoCiAgVHlwZWREYXRhIGFzRXh0ZXJuYWxUeXBlZERhdGEoe2ludCBjb3VudDogMX0pID0+CiAgICAgIF9hc0V4dGVybmFsVHlwZWREYXRhKHRoaXMsIGNvdW50KTsKfQoKLy8gUmV0dXJucyB0aGUgQUJJIHVzZWQgZm9yIHNpemUgYW5kIGFsaWdubWVudCBjYWxjdWxhdGlvbnMuCi8vIFNlZSBwa2cvdm0vbGliL3RyYW5zZm9ybWF0aW9ucy9mZmkuZGFydC4KQHByYWdtYSgndm06cHJlZmVyLWlubGluZScpCmludCBfYWJpKCkKICAgIG5hdGl2ZSAiUmVjb2duaXplZCBtZXRob2Q6IG1ldGhvZCBpcyBkaXJlY3RseSBpbnRlcnByZXRlZCBieSB0aGUgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgb3IgSVIgZ3JhcGggaXMgYnVpbHQgaW4gdGhlIGZsb3cgZ3JhcGggYnVpbGRlci4iOwpYAE5OPAFJHCQpAQc4AU0BUQFLThJCRgE1JgEHGiYJQwEJPQEJRi07AUsPCS8BCSEBCSgBTE8WCToBREkbCUABREkbCT0BCSdQBAEJIQEJMykCAT0sHAuAjAEdZGFydDpmZmktcGF0Y2gvZmZpX3BhdGNoLmRhcnQwb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2ZmaS9uYXRpdmVfdHlwZS5kYXJ0jssvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmZmaTsKCi8vLyBbTmF0aXZlVHlwZV0ncyBzdWJ0eXBlcyByZXByZXNlbnQgYSBuYXRpdmUgdHlwZSBpbiBDLgovLy8KLy8vIFtOYXRpdmVUeXBlXSdzIHN1YnR5cGVzIGFyZSBub3QgY29uc3RydWN0aWJsZSBpbiB0aGUgRGFydCBjb2RlIGFuZCBzZXJ2ZQovLy8gcHVyZWx5IGFzIG1hcmtlcnMgaW4gdHlwZSBzaWduYXR1cmVzLgphYnN0cmFjdCBjbGFzcyBOYXRpdmVUeXBlIHsKICBjb25zdCBOYXRpdmVUeXBlKCk7Cn0KCi8vLyBbX05hdGl2ZUludGVnZXJdJ3Mgc3VidHlwZXMgcmVwcmVzZW50IGEgbmF0aXZlIGludGVnZXIgaW4gQy4KLy8vCi8vLyBbX05hdGl2ZUludGVnZXJdJ3Mgc3VidHlwZXMgYXJlIG5vdCBjb25zdHJ1Y3RpYmxlIGluIHRoZSBEYXJ0IGNvZGUgYW5kIHNlcnZlCi8vLyBwdXJlbHkgYXMgbWFya2VycyBpbiB0eXBlIHNpZ25hdHVyZXMuCmNsYXNzIF9OYXRpdmVJbnRlZ2VyIGV4dGVuZHMgTmF0aXZlVHlwZSB7CiAgY29uc3QgX05hdGl2ZUludGVnZXIoKTsKfQoKLy8vIFtfTmF0aXZlRG91YmxlXSdzIHN1YnR5cGVzIHJlcHJlc2VudCBhIG5hdGl2ZSBmbG9hdCBvciBkb3VibGUgaW4gQy4KLy8vCi8vLyBbX05hdGl2ZURvdWJsZV0ncyBzdWJ0eXBlcyBhcmUgbm90IGNvbnN0cnVjdGlibGUgaW4gdGhlIERhcnQgY29kZSBhbmQgc2VydmUKLy8vIHB1cmVseSBhcyBtYXJrZXJzIGluIHR5cGUgc2lnbmF0dXJlcy4KY2xhc3MgX05hdGl2ZURvdWJsZSBleHRlbmRzIE5hdGl2ZVR5cGUgewogIGNvbnN0IF9OYXRpdmVEb3VibGUoKTsKfQoKLy8vIFJlcHJlc2VudHMgYSBuYXRpdmUgc2lnbmVkIDggYml0IGludGVnZXIgaW4gQy4KLy8vCi8vLyBbSW50OF0gaXMgbm90IGNvbnN0cnVjdGlibGUgaW4gdGhlIERhcnQgY29kZSBhbmQgc2VydmVzIHB1cmVseSBhcyBtYXJrZXIgaW4KLy8vIHR5cGUgc2lnbmF0dXJlcy4KY2xhc3MgSW50OCBleHRlbmRzIF9OYXRpdmVJbnRlZ2VyIHsKICBjb25zdCBJbnQ4KCk7Cn0KCi8vLyBSZXByZXNlbnRzIGEgbmF0aXZlIHNpZ25lZCAxNiBiaXQgaW50ZWdlciBpbiBDLgovLy8KLy8vIFtJbnQxNl0gaXMgbm90IGNvbnN0cnVjdGlibGUgaW4gdGhlIERhcnQgY29kZSBhbmQgc2VydmVzIHB1cmVseSBhcyBtYXJrZXIgaW4KLy8vIHR5cGUgc2lnbmF0dXJlcy4KY2xhc3MgSW50MTYgZXh0ZW5kcyBfTmF0aXZlSW50ZWdlciB7CiAgY29uc3QgSW50MTYoKTsKfQoKLy8vIFJlcHJlc2VudHMgYSBuYXRpdmUgc2lnbmVkIDMyIGJpdCBpbnRlZ2VyIGluIEMuCi8vLwovLy8gW0ludDMyXSBpcyBub3QgY29uc3RydWN0aWJsZSBpbiB0aGUgRGFydCBjb2RlIGFuZCBzZXJ2ZXMgcHVyZWx5IGFzIG1hcmtlciBpbgovLy8gdHlwZSBzaWduYXR1cmVzLgpjbGFzcyBJbnQzMiBleHRlbmRzIF9OYXRpdmVJbnRlZ2VyIHsKICBjb25zdCBJbnQzMigpOwp9CgovLy8gUmVwcmVzZW50cyBhIG5hdGl2ZSBzaWduZWQgNjQgYml0IGludGVnZXIgaW4gQy4KLy8vCi8vLyBbSW50NjRdIGlzIG5vdCBjb25zdHJ1Y3RpYmxlIGluIHRoZSBEYXJ0IGNvZGUgYW5kIHNlcnZlcyBwdXJlbHkgYXMgbWFya2VyIGluCi8vLyB0eXBlIHNpZ25hdHVyZXMuCmNsYXNzIEludDY0IGV4dGVuZHMgX05hdGl2ZUludGVnZXIgewogIGNvbnN0IEludDY0KCk7Cn0KCi8vLyBSZXByZXNlbnRzIGEgbmF0aXZlIHVuc2lnbmVkIDggYml0IGludGVnZXIgaW4gQy4KLy8vCi8vLyBbVWludDhdIGlzIG5vdCBjb25zdHJ1Y3RpYmxlIGluIHRoZSBEYXJ0IGNvZGUgYW5kIHNlcnZlcyBwdXJlbHkgYXMgbWFya2VyIGluCi8vLyB0eXBlIHNpZ25hdHVyZXMuCmNsYXNzIFVpbnQ4IGV4dGVuZHMgX05hdGl2ZUludGVnZXIgewogIGNvbnN0IFVpbnQ4KCk7Cn0KCi8vLyBSZXByZXNlbnRzIGEgbmF0aXZlIHVuc2lnbmVkIDE2IGJpdCBpbnRlZ2VyIGluIEMuCi8vLwovLy8gW1VpbnQxNl0gaXMgbm90IGNvbnN0cnVjdGlibGUgaW4gdGhlIERhcnQgY29kZSBhbmQgc2VydmVzIHB1cmVseSBhcyBtYXJrZXIKLy8vIGluIHR5cGUgc2lnbmF0dXJlcy4KY2xhc3MgVWludDE2IGV4dGVuZHMgX05hdGl2ZUludGVnZXIgewogIGNvbnN0IFVpbnQxNigpOwp9CgovLy8gUmVwcmVzZW50cyBhIG5hdGl2ZSB1bnNpZ25lZCAzMiBiaXQgaW50ZWdlciBpbiBDLgovLy8KLy8vIFtVaW50MzJdIGlzIG5vdCBjb25zdHJ1Y3RpYmxlIGluIHRoZSBEYXJ0IGNvZGUgYW5kIHNlcnZlcyBwdXJlbHkgYXMgbWFya2VyCi8vLyBpbiB0eXBlIHNpZ25hdHVyZXMuCmNsYXNzIFVpbnQzMiBleHRlbmRzIF9OYXRpdmVJbnRlZ2VyIHsKICBjb25zdCBVaW50MzIoKTsKfQoKLy8vIFJlcHJlc2VudHMgYSBuYXRpdmUgdW5zaWduZWQgNjQgYml0IGludGVnZXIgaW4gQy4KLy8vCi8vLyBbVWludDY0XSBpcyBub3QgY29uc3RydWN0aWJsZSBpbiB0aGUgRGFydCBjb2RlIGFuZCBzZXJ2ZXMgcHVyZWx5IGFzIG1hcmtlcgovLy8gaW4gdHlwZSBzaWduYXR1cmVzLgpjbGFzcyBVaW50NjQgZXh0ZW5kcyBfTmF0aXZlSW50ZWdlciB7CiAgY29uc3QgVWludDY0KCk7Cn0KCi8vLyBSZXByZXNlbnRzIGEgbmF0aXZlIHBvaW50ZXItc2l6ZWQgaW50ZWdlciBpbiBDLgovLy8KLy8vIFtJbnRQdHJdIGlzIG5vdCBjb25zdHJ1Y3RpYmxlIGluIHRoZSBEYXJ0IGNvZGUgYW5kIHNlcnZlcyBwdXJlbHkgYXMgbWFya2VyCi8vLyBpbiB0eXBlIHNpZ25hdHVyZXMuCmNsYXNzIEludFB0ciBleHRlbmRzIF9OYXRpdmVJbnRlZ2VyIHsKICBjb25zdCBJbnRQdHIoKTsKfQoKLy8vIFJlcHJlc2VudHMgYSBuYXRpdmUgMzIgYml0IGZsb2F0IGluIEMuCi8vLwovLy8gW0Zsb2F0XSBpcyBub3QgY29uc3RydWN0aWJsZSBpbiB0aGUgRGFydCBjb2RlIGFuZCBzZXJ2ZXMgcHVyZWx5IGFzIG1hcmtlcgovLy8gaW4gdHlwZSBzaWduYXR1cmVzLgpjbGFzcyBGbG9hdCBleHRlbmRzIF9OYXRpdmVEb3VibGUgewogIGNvbnN0IEZsb2F0KCk7Cn0KCi8vLyBSZXByZXNlbnRzIGEgbmF0aXZlIDY0IGJpdCBkb3VibGUgaW4gQy4KLy8vCi8vLyBbRG91YmxlXSBpcyBub3QgY29uc3RydWN0aWJsZSBpbiB0aGUgRGFydCBjb2RlIGFuZCBzZXJ2ZXMgcHVyZWx5IGFzIG1hcmtlcgovLy8gaW4gdHlwZSBzaWduYXR1cmVzLgpjbGFzcyBEb3VibGUgZXh0ZW5kcyBfTmF0aXZlRG91YmxlIHsKICBjb25zdCBEb3VibGUoKTsKfQoKLy8vIFJlcHJlc2VudHMgYSB2b2lkIHR5cGUgaW4gQy4KLy8vCi8vLyBbVm9pZF0gaXMgbm90IGNvbnN0cnVjdGlibGUgaW4gdGhlIERhcnQgY29kZSBhbmQgc2VydmVzIHB1cmVseSBhcyBtYXJrZXIgaW4KLy8vIHR5cGUgc2lnbmF0dXJlcy4KQHVuc2l6ZWQKYWJzdHJhY3QgY2xhc3MgVm9pZCBleHRlbmRzIE5hdGl2ZVR5cGUge30KCi8vLyBSZXByZXNlbnRzIGEgZnVuY3Rpb24gdHlwZSBpbiBDLgovLy8KLy8vIFtOYXRpdmVGdW5jdGlvbl0gaXMgbm90IGNvbnN0cnVjdGlibGUgaW4gdGhlIERhcnQgY29kZSBhbmQgc2VydmVzIHB1cmVseSBhcwovLy8gbWFya2VyIGluIHR5cGUgc2lnbmF0dXJlcy4KQHVuc2l6ZWQKYWJzdHJhY3QgY2xhc3MgTmF0aXZlRnVuY3Rpb248VCBleHRlbmRzIEZ1bmN0aW9uPiBleHRlbmRzIE5hdGl2ZVR5cGUge30KgIUATk48ARIBOgRNKhwWAgFBBFEqKhoCAUgEUCopGQIBMwRQFSQQAgE0BFEVJRECATQEURUlEQIBNARRFSURAgE1BFEVJRECATYETxgmEgIBNgRPGCYSAgE2BE8YJhICATQETxgmEgIBKwROGCQRAgEsBE8YJRICASEEUBUJKgElBFAfCUgBGWRhcnQ6ZmZpL25hdGl2ZV90eXBlLmRhcnQwb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2ZmaS9hbm5vdGF0aW9ucy5kYXJ0hd0vLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmZmaTsKCmNsYXNzIERhcnRSZXByZXNlbnRhdGlvbk9mIHsKICAvLy8gUmVwcmVzZW50cyB0aGUgRGFydCB0eXBlIGNvcnJlc3BvbmRpbmcgdG8gYSBbTmF0aXZlVHlwZV0uCiAgLy8vCiAgLy8vIFtJbnQ4XSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiBbaW50XQogIC8vLyBbSW50MTZdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gW2ludF0KICAvLy8gW0ludDMyXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IFtpbnRdCiAgLy8vIFtJbnQ2NF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiBbaW50XQogIC8vLyBbVWludDhdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gW2ludF0KICAvLy8gW1VpbnQxNl0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IFtpbnRdCiAgLy8vIFtVaW50MzJdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiBbaW50XQogIC8vLyBbVWludDY0XSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gW2ludF0KICAvLy8gW0ludFB0cl0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IFtpbnRdCiAgLy8vIFtEb3VibGVdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiBbZG91YmxlXQogIC8vLyBbRmxvYXRdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gW2RvdWJsZV0KICAvLy8gW1BvaW50ZXJdPFQ+ICAgICAgICAgICAgICAgICAgICAgICAgIC0+IFtQb2ludGVyXTxUPgogIC8vLyBbTmF0aXZlRnVuY3Rpb25dPFQxIEZ1bmN0aW9uKFQyLCBUMykgLT4gUzEgRnVuY3Rpb24oUzIsIFMzKQogIC8vLyAgICB3aGVyZSBEYXJ0UmVwcmVzZW50YXRpb25PZihUbikgLT4gU24KICAvLy8gVCBleHRlbmRzIFN0cnVjdDxUPiAgICAgICAgICAgICAgICAgIC0+IFQKICBjb25zdCBEYXJ0UmVwcmVzZW50YXRpb25PZihTdHJpbmcgbmF0aXZlVHlwZSk7Cn0KCmNsYXNzIFVuc2l6ZWQgewogIGNvbnN0IFVuc2l6ZWQoKTsKfQoKLy8vIFRoaXMgW05hdGl2ZVR5cGVdIGRvZXMgbm90IGhhdmUgcHJlZGVmaW5lZCBzaXplLgovLy8KLy8vIFVuc2l6ZWQgTmF0aXZlVHlwZXMgZG8gbm90IHN1cHBvcnQgW3NpemVPZl0gYmVjYXVzZSB0aGVpciBzaXplIGlzIHVua25vd24uCi8vLyBDb25zZXF1ZW50bHksIFthbGxvY2F0ZV0sIFtQb2ludGVyLmxvYWRdLCBbUG9pbnRlci5zdG9yZV0sIGFuZAovLy8gW1BvaW50ZXIuZWxlbWVudEF0XSBhcmUgbm90IGF2YWlsYWJsZS4KY29uc3QgdW5zaXplZCA9IGNvbnN0IFVuc2l6ZWQoKTsKJwBOTjwBEgEdQAY0NDQ0NDQ0NDQ3NztCLjAxAgEQEwIBNQRPQyshARlkYXJ0OmZmaS9hbm5vdGF0aW9ucy5kYXJ0NG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9mZmkvZHluYW1pY19saWJyYXJ5LmRhcnSGdi8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuZmZpOwoKLy8vIFJlcHJlc2VudHMgYSBkeW5hbWljYWxseSBsb2FkZWQgQyBsaWJyYXJ5LgpjbGFzcyBEeW5hbWljTGlicmFyeSB7CiAgLy8vIENyZWF0ZXMgYSBkeW5hbWljIGxpYnJhcnkgaG9sZGluZyBhbGwgZ2xvYmFsIHN5bWJvbHMuCiAgLy8vCiAgLy8vIEFueSBzeW1ib2wgaW4gYSBsaWJyYXJ5IGN1cnJlbnRseSBsb2FkZWQgd2l0aCBnbG9iYWwgdmlzaWJpbGl0eSAoaW5jbHVkaW5nCiAgLy8vIHRoZSBleGVjdXRhYmxlIGl0c2VsZikgbWF5IGJlIHJlc29sdmVkIGluIHRoaXMgbGlicmFyeS4KICAvLy8KICAvLy8gVGhpcyBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUgb24gV2luZG93cywgaW5zdGVhZCBhbiBleGNlcHRpb24gaXMgdGhyb3duLgogIGV4dGVybmFsIGZhY3RvcnkgRHluYW1pY0xpYnJhcnkucHJvY2VzcygpOwoKICAvLy8gQ3JlYXRlcyBhIGR5bmFtaWMgbGlicmFyeSByZXByZXNlbnRpbmcgdGhlIHJ1bm5pbmcgZXhlY3V0YWJsZS4KICBleHRlcm5hbCBmYWN0b3J5IER5bmFtaWNMaWJyYXJ5LmV4ZWN1dGFibGUoKTsKCiAgLy8vIExvYWRzIGEgZHluYW1pYyBsaWJyYXJ5IGZpbGUgd2l0aCBsb2NhbCB2aXNpYmlsaXR5LgogIC8vLwogIC8vLyBUaHJvd3MgYW4gW0FyZ3VtZW50RXJyb3JdIGlmIGxvYWRpbmcgdGhlIGR5bmFtaWMgbGlicmFyeSBmYWlscy4KICBleHRlcm5hbCBmYWN0b3J5IER5bmFtaWNMaWJyYXJ5Lm9wZW4oU3RyaW5nIG5hbWUpOwoKICAvLy8gTG9va3MgdXAgYSBzeW1ib2wgaW4gdGhlIFtEeW5hbWljTGlicmFyeV0gYW5kIHJldHVybnMgaXRzIGFkZHJlc3MgaW4KICAvLy8gbWVtb3J5LiBFcXVpdmFsZW50IG9mIGRsc3ltLgogIC8vLwogIC8vLyBUaHJvd3MgYW4gW0FyZ3VtZW50RXJyb3JdIGlmIGl0IGZhaWxzIHRvIGxvb2t1cCB0aGUgc3ltYm9sLgogIGV4dGVybmFsIFBvaW50ZXI8VD4gbG9va3VwPFQgZXh0ZW5kcyBOYXRpdmVUeXBlPihTdHJpbmcgc3ltYm9sTmFtZSk7CgogIC8vLyBIZWxwZXIgdGhhdCBjb21iaW5lcyBsb29rdXAgYW5kIGNhc3QgdG8gYSBEYXJ0IGZ1bmN0aW9uLgogIGV4dGVybmFsIEYgbG9va3VwRnVuY3Rpb248VCBleHRlbmRzIEZ1bmN0aW9uLCBGIGV4dGVuZHMgRnVuY3Rpb24+KAogICAgICBTdHJpbmcgc3ltYm9sTmFtZSk7CgogIC8vLyBEeW5hbWljIGxpYnJhcmllcyBhcmUgZXF1YWwgaWYgdGhleSBsb2FkIHRoZSBzYW1lIGxpYnJhcnkuCiAgZXh0ZXJuYWwgYm9vbCBvcGVyYXRvciA9PShvdGhlcik7CgogIC8vLyBUaGUgaGFzaCBjb2RlIGZvciBhIER5bmFtaWNMaWJyYXJ5IG9ubHkgZGVwZW5kcyBvbiB0aGUgbG9hZGVkIGxpYnJhcnkKICBleHRlcm5hbCBpbnQgZ2V0IGhhc2hDb2RlOwoKICAvLy8gVGhlIGhhbmRsZSB0byB0aGUgZHluYW1pYyBsaWJyYXJ5LgogIGV4dGVybmFsIFBvaW50ZXI8Vm9pZD4gZ2V0IGhhbmRsZTsKfQotAE5OPAESAS8XPAZRPgZQLQFFMAE6BkY1AUsjBkJHAT9FGgFBJAFMHQEpJQIBHWRhcnQ6ZmZpL2R5bmFtaWNfbGlicmFyeS5kYXJ0Pm9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvZmZpX2R5bmFtaWNfbGlicmFyeV9wYXRjaC5kYXJ0huAvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gQWxsIGltcG9ydHMgbXVzdCBiZSBpbiBhbGwgRkZJIHBhdGNoIGZpbGVzIHRvIG5vdCBkZXBlbmQgb24gdGhlIG9yZGVyCi8vIHRoZSBwYXRjaGVzIGFyZSBhcHBsaWVkLgppbXBvcnQgImRhcnQ6X2ludGVybmFsIiBzaG93IHBhdGNoOwppbXBvcnQgJ2RhcnQ6dHlwZWRfZGF0YScgc2hvdyBUeXBlZERhdGE7CgpEeW5hbWljTGlicmFyeSBfb3BlbihTdHJpbmcgbmFtZSkgbmF0aXZlICJGZmlfZGxfb3BlbiI7CkR5bmFtaWNMaWJyYXJ5IF9wcm9jZXNzTGlicmFyeSgpIG5hdGl2ZSAiRmZpX2RsX3Byb2Nlc3NMaWJyYXJ5IjsKRHluYW1pY0xpYnJhcnkgX2V4ZWN1dGFibGVMaWJyYXJ5KCkgbmF0aXZlICJGZmlfZGxfZXhlY3V0YWJsZUxpYnJhcnkiOwoKQHBhdGNoCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgRHluYW1pY0xpYnJhcnkgewogIEBwYXRjaAogIGZhY3RvcnkgRHluYW1pY0xpYnJhcnkub3BlbihTdHJpbmcgbmFtZSkgewogICAgcmV0dXJuIF9vcGVuKG5hbWUpOwogIH0KCiAgQHBhdGNoCiAgZmFjdG9yeSBEeW5hbWljTGlicmFyeS5wcm9jZXNzKCkgPT4gX3Byb2Nlc3NMaWJyYXJ5KCk7CgogIEBwYXRjaAogIGZhY3RvcnkgRHluYW1pY0xpYnJhcnkuZXhlY3V0YWJsZSgpID0+IF9leGVjdXRhYmxlTGlicmFyeSgpOwoKICBAcGF0Y2gKICBQb2ludGVyPFQ+IGxvb2t1cDxUIGV4dGVuZHMgTmF0aXZlVHlwZT4oU3RyaW5nIHN5bWJvbE5hbWUpCiAgICAgIG5hdGl2ZSAiRmZpX2RsX2xvb2t1cCI7CgogIC8vIFRoZSByZWFsIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gbGl2ZXMgaW4gRmZpVXNlU2l0ZVRyYW5zZm9ybWVyCiAgLy8gZm9yIGludGVyZmFjZSBjYWxscy4gT25seSBkeW5hbWljIGNhbGxzICh3aGljaCBhcmUgaWxsZWdhbCkgcmVhY2ggdGhpcwogIC8vIGltcGxlbWVudGF0aW9uLgogIEBwYXRjaAogIEYgbG9va3VwRnVuY3Rpb248VCBleHRlbmRzIEZ1bmN0aW9uLCBGIGV4dGVuZHMgRnVuY3Rpb24+KFN0cmluZyBzeW1ib2xOYW1lKSB7CiAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJEeW5hbWljIGludm9jYXRpb24gb2YgbG9va3VwRnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZC4iKTsKICB9CgogIC8vIFRPRE8oZGFjb2hhcmtlcyk6IEV4cG9zZSB0aGlzIHRvIHVzZXJzLCBvciBleHRlbmQgUG9pbnRlcj8KICAvLyBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMzU4ODEKICBpbnQgZ2V0SGFuZGxlKCkgbmF0aXZlICJGZmlfZGxfZ2V0SGFuZGxlIjsKCiAgQHBhdGNoCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKG90aGVyID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBnZXRIYW5kbGUoKSA9PSBvdGhlci5nZXRIYW5kbGUoKTsKICB9CgogIEBwYXRjaAogIGludCBnZXQgaGFzaENvZGUgewogICAgcmV0dXJuIGdldEhhbmRsZSgpLmhhc2hDb2RlOwogIH0KCiAgQHBhdGNoCiAgUG9pbnRlcjxWb2lkPiBnZXQgaGFuZGxlID0+IFBvaW50ZXIuZnJvbUFkZHJlc3MoZ2V0SGFuZGxlKCkpOwp9CjwATk48AUkcJCkBOEFHAQcaFwktGAQBCTkBCT8BCT0eAU1MFQlQHEMEAUAzLQEJHCUtBAEJFSEEAQlAAgEtZGFydDpmZmktcGF0Y2gvZmZpX2R5bmFtaWNfbGlicmFyeV9wYXRjaC5kYXJ0K29yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9mZmkvc3RydWN0LmRhcnSENC8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuZmZpOwoKLy8vIFRoaXMgY2xhc3MgaXMgZXh0ZW5kZWQgdG8gZGVmaW5lIHN0cnVjdHMuCi8vLwovLy8gRmllbGRzIGluIGEgc3RydWN0LCBhbm5vdGF0ZWQgd2l0aCBhIHN1YnR5cGUgb2YgW05hdGl2ZVR5cGVdLCBhcmUKLy8vIGF1dG9tYXRpY2FsbHkgdHJhbnNmb3JtZWQgaW50byB3cmFwcGVycyB0byBhY2Nlc3MgdGhlIGZpZWxkcyBvZiB0aGUgc3RydWN0Ci8vLyBpbiBuYXRpdmUgbWVtb3J5LgovLy8KLy8vIEFsbCBmaWVsZHMgaW4gYSBzdHJ1Y3QgbXVzdCBlaXRoZXIgaGF2ZSBhIHR5cGUgd2hpY2ggZXh0ZW5kcyBbTmF0aXZlVHlwZV0gb3IKLy8vIGVsc2UgaGF2ZSBhbiBhbm5vdGF0aW9uIGluZGljYXRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgbmF0aXZlIHR5cGUgKGUuZy4KLy8vICJASW50MzIoKSIgZm9yICJpbnQiKS4KLy8vCi8vLyBJbnN0YW5jZXMgb2YgYSBzdWJjbGFzcyBvZiBbU3RydWN0XSBoYXZlIHJlZmVyZW5jZSBzZW1hbnRpY3MgYW5kIGFyZSBiYWNrZWQKLy8vIGJ5IG5hdGl2ZSBtZW1vcnkuIFRoZSBtYXkgYWxsb2NhdGVkIHZpYSBbUG9pbnRlci5hbGxvY2F0ZV0gb3IgbG9hZGVkIGZyb20gYQovLy8gW1BvaW50ZXJdLCBidXQgbm90IGJ5IGEgZ2VuZXJhdGl2ZSBjb25zdHJ1Y3Rvci4KYWJzdHJhY3QgY2xhc3MgU3RydWN0PFMgZXh0ZW5kcyBOYXRpdmVUeXBlPiBleHRlbmRzIE5hdGl2ZVR5cGUgewogIC8vLyBSZXR1cm5zIHRoZSBhZGRyZXNzIGJhY2tpbmcgdGhlIHJlZmVyZW5jZS4KICBmaW5hbCBQb2ludGVyPFM+IGFkZHJlc3NPZjsKCiAgU3RydWN0KCkgOiBhZGRyZXNzT2YgPSBudWxsOwogIFN0cnVjdC5mcm9tUG9pbnRlcih0aGlzLmFkZHJlc3NPZik7Cn0KHABOTjwBEgEuBEZPFgRRSxsEUFA0QTEeAR8mAgEUZGFydDpmZmkvc3RydWN0LmRhcnQyb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2ludGVybmFsL2ludGVybmFsLmRhcnS1ji8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQuX2ludGVybmFsOwoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nOwoKaW1wb3J0ICdkYXJ0OmFzeW5jJwogICAgc2hvdwogICAgICAgIEZ1dHVyZSwKICAgICAgICBTdHJlYW0sCiAgICAgICAgU3RyZWFtU3Vic2NyaXB0aW9uLAogICAgICAgIFN0cmVhbVRyYW5zZm9ybWVyLAogICAgICAgIFN0cmVhbVRyYW5zZm9ybWVyQmFzZSwKICAgICAgICBab25lOwppbXBvcnQgJ2RhcnQ6Y29udmVydCcgc2hvdyBDb252ZXJ0ZXI7CmltcG9ydCAnZGFydDpjb3JlJyBoaWRlIFN5bWJvbDsKaW1wb3J0ICdkYXJ0OmNvcmUnIGFzIGNvcmU7CmltcG9ydCAnZGFydDptYXRoJyBzaG93IFJhbmRvbTsKCnBhcnQgJ2FzeW5jX2Nhc3QuZGFydCc7CnBhcnQgJ2Nhc3QuZGFydCc7CnBhcnQgJ2l0ZXJhYmxlLmRhcnQnOwpwYXJ0ICdsaXN0LmRhcnQnOwpwYXJ0ICdwcmludC5kYXJ0JzsKcGFydCAnc29ydC5kYXJ0JzsKcGFydCAnc3ltYm9sLmRhcnQnOwpwYXJ0ICdsaW5rZWRfbGlzdC5kYXJ0JzsKCi8vIFBvd2VycyBvZiAxMCB1cCB0byAxMF4yMiBhcmUgcmVwcmVzZW50YWJsZSBhcyBkb3VibGVzLgovLyBQb3dlcnMgb2YgMTAgYWJvdmUgdGhhdCBhcmUgb25seSBhcHByb3hpbWF0ZSBkdWUgdG8gbGFjayBvZiBwcmVjaXNzaW9uLgovLyBVc2VkIGJ5IGRvdWJsZS1wYXJzaW5nLgpjb25zdCBQT1dFUlNfT0ZfVEVOID0gY29uc3QgWwogIDEuMCwgLy8gMAogIDEwLjAsCiAgMTAwLjAsCiAgMTAwMC4wLAogIDEwMDAwLjAsCiAgMTAwMDAwLjAsIC8vIDUKICAxMDAwMDAwLjAsCiAgMTAwMDAwMDAuMCwKICAxMDAwMDAwMDAuMCwKICAxMDAwMDAwMDAwLjAsCiAgMTAwMDAwMDAwMDAuMCwgLy8gMTAKICAxMDAwMDAwMDAwMDAuMCwKICAxMDAwMDAwMDAwMDAwLjAsCiAgMTAwMDAwMDAwMDAwMDAuMCwKICAxMDAwMDAwMDAwMDAwMDAuMCwKICAxMDAwMDAwMDAwMDAwMDAwLjAsIC8vIDE1CiAgMTAwMDAwMDAwMDAwMDAwMDAuMCwKICAxMDAwMDAwMDAwMDAwMDAwMDAuMCwKICAxMDAwMDAwMDAwMDAwMDAwMDAwLjAsCiAgMTAwMDAwMDAwMDAwMDAwMDAwMDAuMCwKICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAuMCwgLy8gMjAKICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAsCiAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuMCwKXTsKCi8qKgogKiBBbiBbSXRlcmFibGVdIG9mIHRoZSBVVEYtMTYgY29kZSB1bml0cyBvZiBhIFtTdHJpbmddIGluIGluZGV4IG9yZGVyLgogKi8KY2xhc3MgQ29kZVVuaXRzIGV4dGVuZHMgVW5tb2RpZmlhYmxlTGlzdEJhc2U8aW50PiB7CiAgLyoqIFRoZSBzdHJpbmcgdGhhdCB0aGlzIGlzIHRoZSBjb2RlIHVuaXRzIG9mLiAqLwogIGZpbmFsIFN0cmluZyBfc3RyaW5nOwoKICBDb2RlVW5pdHModGhpcy5fc3RyaW5nKTsKCiAgaW50IGdldCBsZW5ndGggPT4gX3N0cmluZy5sZW5ndGg7CiAgaW50IG9wZXJhdG9yIFtdKGludCBpKSA9PiBfc3RyaW5nLmNvZGVVbml0QXQoaSk7CgogIHN0YXRpYyBTdHJpbmcgc3RyaW5nT2YoQ29kZVVuaXRzIHUpID0+IHUuX3N0cmluZzsKfQoKLy8vIE1hcmtzIGEgZnVuY3Rpb24gb3IgbGlicmFyeSBhcyBoYXZpbmcgYW4gZXh0ZXJuYWwgaW1wbGVtZW50YXRpb24gKCJuYXRpdmUiCi8vLyBpbiB0aGUgRGFydCBWTSkuCi8vLwovLy8gT24gYSBmdW5jdGlvbiwgdGhpcyBwcm92aWRlcyBhIGJhY2tlbmQtc3BlY2lmaWMgU3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQgdG8KLy8vIGlkZW50aWZ5IHRoZSBmdW5jdGlvbidzIGltcGxlbWVudGF0aW9uLgovLy8KLy8vIE9uIGEgbGlicmFyeSwgaXQgcHJvdmlkZXMgYSBVcmkgdGhhdCBjYW4gYmUgdXNlZCB0byBsb2NhdGUgdGhlIG5hdGl2ZQovLy8gbGlicmFyeSdzIGltcGxlbWVudGF0aW9uLgpjbGFzcyBFeHRlcm5hbE5hbWUgewogIGZpbmFsIFN0cmluZyBuYW1lOwogIGNvbnN0IEV4dGVybmFsTmFtZSh0aGlzLm5hbWUpOwp9CgovLyBTaGFyZWQgaGV4LXBhcnNpbmcgdXRpbGl0aWVzLgoKLy8vIFBhcnNlcyBhIHNpbmdsZSBoZXgtZGlnaXQgYXMgY29kZSB1bml0LgovLy8KLy8vIFJldHVybnMgYSBuZWdhdGl2ZSB2YWx1ZSBpZiB0aGUgY2hhcmFjdGVyIGlzIG5vdCBhIHZhbGlkIGhleC1kaWdpdC4KaW50IGhleERpZ2l0VmFsdWUoaW50IGNoYXIpIHsKICBhc3NlcnQoY2hhciA+PSAwICYmIGNoYXIgPD0gMHhGRkZGKTsKICBjb25zdCBpbnQgZGlnaXQwID0gMHgzMDsKICBjb25zdCBpbnQgYSA9IDB4NjE7CiAgY29uc3QgaW50IGYgPSAweDY2OwogIGludCBkaWdpdCA9IGNoYXIgXiBkaWdpdDA7CiAgaWYgKGRpZ2l0IDw9IDkpIHJldHVybiBkaWdpdDsKICBpbnQgbGV0dGVyID0gKGNoYXIgfCAweDIwKTsKICBpZiAoYSA8PSBsZXR0ZXIgJiYgbGV0dGVyIDw9IGYpIHJldHVybiBsZXR0ZXIgLSAoYSAtIDEwKTsKICByZXR1cm4gLTE7Cn0KCi8vLyBQYXJzZXMgdHdvIGhleCBkaWdpdHMgaW4gYSBzdHJpbmcuCi8vLwovLy8gUmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlIGlmIGVpdGhlciBkaWdpdCBpc24ndCB2YWxpZC4KaW50IHBhcnNlSGV4Qnl0ZShTdHJpbmcgc291cmNlLCBpbnQgaW5kZXgpIHsKICBhc3NlcnQoaW5kZXggKyAyIDw9IHNvdXJjZS5sZW5ndGgpOwogIGludCBkaWdpdDEgPSBoZXhEaWdpdFZhbHVlKHNvdXJjZS5jb2RlVW5pdEF0KGluZGV4KSk7CiAgaW50IGRpZ2l0MiA9IGhleERpZ2l0VmFsdWUoc291cmNlLmNvZGVVbml0QXQoaW5kZXggKyAxKSk7CiAgcmV0dXJuIGRpZ2l0MSAqIDE2ICsgZGlnaXQyIC0gKGRpZ2l0MiAmIDI1Nik7Cn0KCi8vLyBHaXZlbiBhbiBbaW5zdGFuY2VdIG9mIHNvbWUgZ2VuZXJpYyB0eXBlIFtUXSwgYW5kIFtleHRyYWN0XSwgYSBmaXJzdC1jbGFzcwovLy8gZ2VuZXJpYyBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSBzYW1lIG51bWJlciBvZiB0eXBlIHBhcmFtZXRlcnMgYXMgW1RdLAovLy8gaW52b2tlcyB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSB0eXBlIGFyZ3VtZW50cyB0aGF0IHdlcmUgcGFzc2VkIHRvIFQKLy8vIHdoZW4gW2luc3RhbmNlXSB3YXMgY29uc3RydWN0ZWQuCi8vLwovLy8gRXhhbXBsZToKLy8vCi8vLyBgYGBkYXJ0Ci8vLyBjbGFzcyBUd288QSwgQj4ge30KLy8vCi8vLyBwcmludChleHRyYWN0VHlwZUFyZ3VtZW50czxMaXN0Pig8aW50PltdLCA8VD4oKSA9PiBuZXcgU2V0PFQ+KCkpKTsKLy8vIC8vIFByaW50czogSW5zdGFuY2Ugb2YgJ1NldDxpbnQ+Jy4KLy8vCi8vLyBwcmludChleHRyYWN0VHlwZUFyZ3VtZW50czxNYXA+KDxTdHJpbmcsIGJvb2w+e30sCi8vLyAgICAgPFQsIFM+KCkgPT4gbmV3IFR3bzxULCBTPikpOwovLy8gLy8gUHJpbnRzOiBJbnN0YW5jZSBvZiAnVHdvPFN0cmluZywgYm9vbD4nLgovLy8gYGBgCi8vLwovLy8gVGhlIHR5cGUgYXJndW1lbnQgVCBpcyBpbXBvcnRhbnQgdG8gY2hvb3NlIHdoaWNoIHNwZWNpZmljIHR5cGUgcGFyYW1ldGVyCi8vLyBsaXN0IGluIFtpbnN0YW5jZV0ncyB0eXBlIGhpZXJhcmNoeSBpcyBiZWluZyBleHRyYWN0ZWQuIENvbnNpZGVyOgovLy8KLy8vIGBgYGRhcnQKLy8vIGNsYXNzIEE8VD4ge30KLy8vIGNsYXNzIEI8VD4ge30KLy8vCi8vLyBjbGFzcyBDIGltcGxlbWVudHMgQTxpbnQ+LCBCPFN0cmluZz4ge30KLy8vCi8vLyBtYWluKCkgewovLy8gICB2YXIgYyA9IG5ldyBDKCk7Ci8vLyAgIHByaW50KGV4dHJhY3RUeXBlQXJndW1lbnRzPEE+KGMsIDxUPigpID0+IDxUPltdKSk7Ci8vLyAgIC8vIFByaW50czogSW5zdGFuY2Ugb2YgJ0xpc3Q8aW50PicuCi8vLwovLy8gICBwcmludChleHRyYWN0VHlwZUFyZ3VtZW50czxCPihjLCA8VD4oKSA9PiA8VD5bXSkpOwovLy8gICAvLyBQcmludHM6IEluc3RhbmNlIG9mICdMaXN0PFN0cmluZz4nLgovLy8gfQovLy8gYGBgCi8vLwovLy8gQSBjYWxsZXIgbXVzdCBub3Q6Ci8vLwovLy8gKiAgIFBhc3MgYG51bGxgIGZvciBbaW5zdGFuY2VdLgovLy8gKiAgIFVzZSBhIG5vbi1jbGFzcyB0eXBlIChpLmUuIGEgZnVuY3Rpb24gdHlwZSkgZm9yIFtUXS4KLy8vICogICBVc2UgYSBub24tZ2VuZXJpYyB0eXBlIGZvciBbVF0uCi8vLyAqICAgUGFzcyBhbiBpbnN0YW5jZSBvZiBhIGdlbmVyaWMgdHlwZSBhbmQgYSBmdW5jdGlvbiB0aGF0IGRvbid0IGJvdGggdGFrZQovLy8gICAgIHRoZSBzYW1lIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50czoKLy8vCi8vLyAgICAgYGBgZGFydAovLy8gICAgIGV4dHJhY3RUeXBlQXJndW1lbnRzPExpc3Q+KDxpbnQ+W10sIDxULCBTPigpID0+IG51bGwpOwovLy8gICAgIGBgYAovLy8KLy8vIFNlZSB0aGlzIGlzc3VlIGZvciBtb3JlIGNvbnRleHQ6Ci8vLyBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMzEzNzEKZXh0ZXJuYWwgT2JqZWN0IGV4dHJhY3RUeXBlQXJndW1lbnRzPFQ+KFQgaW5zdGFuY2UsIEZ1bmN0aW9uIGV4dHJhY3QpOwoKLy8vIEFubm90YXRpb24gY2xhc3MgbWFya2luZyB0aGUgdmVyc2lvbiB3aGVyZSBTREsgQVBJIHdhcyBhZGRlZC4KLy8vCi8vLyBBIGBTaW5jZWAgYW5ub3RhdGlvbiBjYW4gYmUgYXBwbGllZCB0byBhIGxpYnJhcnkgZGVjbGFyYXRpb24sCi8vLyBhbnkgcHVibGljIGRlY2xhcmF0aW9uIGluIGEgbGlicmFyeSwgb3IgaW4gYSBjbGFzcywgb3IgdG8KLy8vIGFuIG9wdGlvbmFsIHBhcmFtZXRlci4KLy8vCi8vLyBJdCBzaWduaWZpZXMgdGhhdCB0aGUgZXhwb3J0LCBtZW1iZXIgb3IgcGFyYW1ldGVyIHdhcyAqYWRkZWQqIGluCi8vLyB0aGF0IHZlcnNpb24uCi8vLwovLy8gV2hlbiBhcHBsaWVkIHRvIGEgbGlicmFyeSBkZWNsYXJhdGlvbiwgaXQgYWxzbyBhIGFwcGxpZXMgdG8KLy8vIGFsbCBtZW1iZXJzIGRlY2xhcmVkIG9yIGV4cG9ydGVkIGJ5IHRoYXQgbGlicmFyeS4KLy8vIElmIGFwcGxpZWQgdG8gYSBjbGFzcywgaXQgYWxzbyBhcHBsaWVzIHRvIGFsbCBtZW1iZXJzIGFuZCBjb25zdHJ1Y3RvcnMKLy8vIG9mIHRoYXQgY2xhc3MuCi8vLyBJZiBhcHBsaWVkIHRvIGEgY2xhc3MgbWV0aG9kLCBvciBwYXJhbWV0ZXIgb2Ygc3VjaCwKLy8vIGFueSBtZXRob2QgaW1wbGVtZW50aW5nIHRoYXQgaW50ZXJmYWNlIG1ldGhvZCBpcyBhbHNvIGFubm90YXRlZC4KLy8vIEkgbXVsdGlwbGUgYFNpbmNlYCBhbm5vdGF0aW9ucyBhcHBseSB0byB0aGUgc2FtZSBkZWNsYXJhdGlvbiBvcgovLy8gcGFyYW1ldGVyLCB0aGUgbGF0ZXN0IHZlcnNpb24gdGFrZXMgcHJlY2VuZGVuY2UuCi8vLwovLy8gQW55IHVzZSBvZiBhIG1hcmtlZCBBUEkgbWF5IHRyaWdnZXIgYSB3YXJuaW5nIGlmIHRoZSB1c2luZyBjb2RlCi8vLyBkb2VzIG5vdCByZXF1aXJlIGFuIFNESyB2ZXJzaW9uIGd1YXJhbnRlZWluZyB0aGF0IHRoZSBBUEkgaXMgYXZhaWxhYmxlLAovLy8gdW5sZXNzIHRoZSBBUEkgZmVhdHVyZSBpcyBhbHNvIHByb3ZpZGVkIGJ5IHNvbWV0aGluZyBlbHNlLgovLy8gSXQgaXMgb25seSBhIHByb2JsZW0gaWYgYW4gYW5ub3RhdGVkIGZlYXR1cmUgaXMgdXNlZCwgYW5kIHRoZSBhbm5vdGF0ZWQKLy8vIEFQSSBpcyB0aGUgKm9ubHkqIHRoaW5nIHByb3ZpZGluZyB0aGUgZnVuY3Rpb25hbGl0eS4KLy8vIEZvciBleGFtcGxlLCB1c2luZyBgRnV0dXJlYCBleHBvcnRlZCBieSBgZGFydDpjb3JlYCBpcyBub3QgYSBwcm9ibGVtCi8vLyBpZiB0aGUgc2FtZSBsaWJyYXJ5IGFsc28gaW1wb3J0cyBgZGFydDphc3luY2AsIGFuZCB1c2luZyBhbiBvcHRpb25hbAovLy8gcGFyYW1ldGVyIG9uIGFuIGludGVyZmFjZSBpcyBub3QgYSBwcm9ibGVtIGlmIHRoZSBzYW1lIHR5cGUgYWxzbwovLy8gaW1wbGVtZW50cyBhbm90aGVyIGludGVyZmFjZSBwcm92aWRpbmcgdGhlIHNhbWUgcGFyYW1ldGVyLgovLy8KLy8vIFRoZSB2ZXJzaW9uIG11c3QgYmUgYSBzZW1hbnRpYyB2ZXJzaW9uIChsaWtlIGAxLjQuMmAgb3IgYDAuOS40LXJlYy40YCksCi8vLyBvciB0aGUgZmlyc3QgdHdvIG51bWJlcnMgb2YgYSBzZW1hbnRpYyB2ZXJzaW9uIChsaWtlIGAxLjBgIG9yIGAyLjJgKSwKLy8vIHJlcHJlc2VudGluZyBhIHN0YWJsZSByZWxlYXNlLCBhbmQgZXF1aXZhbGVudCB0byB0aGUgc2VtYW50aWMgdmVyc2lvbgovLy8geW91IGdldCBieSBhcHBlbmRpbmcgYSBgLjBgLgpAU2luY2UoIjIuMiIpCmNsYXNzIFNpbmNlIHsKICBmaW5hbCBTdHJpbmcgdmVyc2lvbjsKICBjb25zdCBTaW5jZSh0aGlzLnZlcnNpb24pOwp9CgovKioKICogSFRUUCBzdGF0dXMgY29kZXMuICBFeHBvcnRlZCBpbiBkYXJ0OmlvIGFuZCBkYXJ0Omh0bWwuCiAqLwphYnN0cmFjdCBjbGFzcyBIdHRwU3RhdHVzIHsKICBzdGF0aWMgY29uc3QgaW50IGNvbnRpbnVlXyA9IDEwMDsKICBzdGF0aWMgY29uc3QgaW50IHN3aXRjaGluZ1Byb3RvY29scyA9IDEwMTsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCBwcm9jZXNzaW5nID0gMTAyOwogIHN0YXRpYyBjb25zdCBpbnQgb2sgPSAyMDA7CiAgc3RhdGljIGNvbnN0IGludCBjcmVhdGVkID0gMjAxOwogIHN0YXRpYyBjb25zdCBpbnQgYWNjZXB0ZWQgPSAyMDI7CiAgc3RhdGljIGNvbnN0IGludCBub25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb24gPSAyMDM7CiAgc3RhdGljIGNvbnN0IGludCBub0NvbnRlbnQgPSAyMDQ7CiAgc3RhdGljIGNvbnN0IGludCByZXNldENvbnRlbnQgPSAyMDU7CiAgc3RhdGljIGNvbnN0IGludCBwYXJ0aWFsQ29udGVudCA9IDIwNjsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCBtdWx0aVN0YXR1cyA9IDIwNzsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCBhbHJlYWR5UmVwb3J0ZWQgPSAyMDg7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgaW1Vc2VkID0gMjI2OwogIHN0YXRpYyBjb25zdCBpbnQgbXVsdGlwbGVDaG9pY2VzID0gMzAwOwogIHN0YXRpYyBjb25zdCBpbnQgbW92ZWRQZXJtYW5lbnRseSA9IDMwMTsKICBzdGF0aWMgY29uc3QgaW50IGZvdW5kID0gMzAyOwogIHN0YXRpYyBjb25zdCBpbnQgbW92ZWRUZW1wb3JhcmlseSA9IDMwMjsgLy8gQ29tbW9uIGFsaWFzIGZvciBmb3VuZC4KICBzdGF0aWMgY29uc3QgaW50IHNlZU90aGVyID0gMzAzOwogIHN0YXRpYyBjb25zdCBpbnQgbm90TW9kaWZpZWQgPSAzMDQ7CiAgc3RhdGljIGNvbnN0IGludCB1c2VQcm94eSA9IDMwNTsKICBzdGF0aWMgY29uc3QgaW50IHRlbXBvcmFyeVJlZGlyZWN0ID0gMzA3OwogIEBTaW5jZSgiMi4xIikKICBzdGF0aWMgY29uc3QgaW50IHBlcm1hbmVudFJlZGlyZWN0ID0gMzA4OwogIHN0YXRpYyBjb25zdCBpbnQgYmFkUmVxdWVzdCA9IDQwMDsKICBzdGF0aWMgY29uc3QgaW50IHVuYXV0aG9yaXplZCA9IDQwMTsKICBzdGF0aWMgY29uc3QgaW50IHBheW1lbnRSZXF1aXJlZCA9IDQwMjsKICBzdGF0aWMgY29uc3QgaW50IGZvcmJpZGRlbiA9IDQwMzsKICBzdGF0aWMgY29uc3QgaW50IG5vdEZvdW5kID0gNDA0OwogIHN0YXRpYyBjb25zdCBpbnQgbWV0aG9kTm90QWxsb3dlZCA9IDQwNTsKICBzdGF0aWMgY29uc3QgaW50IG5vdEFjY2VwdGFibGUgPSA0MDY7CiAgc3RhdGljIGNvbnN0IGludCBwcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQgPSA0MDc7CiAgc3RhdGljIGNvbnN0IGludCByZXF1ZXN0VGltZW91dCA9IDQwODsKICBzdGF0aWMgY29uc3QgaW50IGNvbmZsaWN0ID0gNDA5OwogIHN0YXRpYyBjb25zdCBpbnQgZ29uZSA9IDQxMDsKICBzdGF0aWMgY29uc3QgaW50IGxlbmd0aFJlcXVpcmVkID0gNDExOwogIHN0YXRpYyBjb25zdCBpbnQgcHJlY29uZGl0aW9uRmFpbGVkID0gNDEyOwogIHN0YXRpYyBjb25zdCBpbnQgcmVxdWVzdEVudGl0eVRvb0xhcmdlID0gNDEzOwogIHN0YXRpYyBjb25zdCBpbnQgcmVxdWVzdFVyaVRvb0xvbmcgPSA0MTQ7CiAgc3RhdGljIGNvbnN0IGludCB1bnN1cHBvcnRlZE1lZGlhVHlwZSA9IDQxNTsKICBzdGF0aWMgY29uc3QgaW50IHJlcXVlc3RlZFJhbmdlTm90U2F0aXNmaWFibGUgPSA0MTY7CiAgc3RhdGljIGNvbnN0IGludCBleHBlY3RhdGlvbkZhaWxlZCA9IDQxNzsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCBtaXNkaXJlY3RlZFJlcXVlc3QgPSA0MjE7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgdW5wcm9jZXNzYWJsZUVudGl0eSA9IDQyMjsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCBsb2NrZWQgPSA0MjM7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgZmFpbGVkRGVwZW5kZW5jeSA9IDQyNDsKICBzdGF0aWMgY29uc3QgaW50IHVwZ3JhZGVSZXF1aXJlZCA9IDQyNjsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCBwcmVjb25kaXRpb25SZXF1aXJlZCA9IDQyODsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCB0b29NYW55UmVxdWVzdHMgPSA0Mjk7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgcmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlID0gNDMxOwogIEBTaW5jZSgiMi4xIikKICBzdGF0aWMgY29uc3QgaW50IGNvbm5lY3Rpb25DbG9zZWRXaXRob3V0UmVzcG9uc2UgPSA0NDQ7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgdW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnMgPSA0NTE7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgY2xpZW50Q2xvc2VkUmVxdWVzdCA9IDQ5OTsKICBzdGF0aWMgY29uc3QgaW50IGludGVybmFsU2VydmVyRXJyb3IgPSA1MDA7CiAgc3RhdGljIGNvbnN0IGludCBub3RJbXBsZW1lbnRlZCA9IDUwMTsKICBzdGF0aWMgY29uc3QgaW50IGJhZEdhdGV3YXkgPSA1MDI7CiAgc3RhdGljIGNvbnN0IGludCBzZXJ2aWNlVW5hdmFpbGFibGUgPSA1MDM7CiAgc3RhdGljIGNvbnN0IGludCBnYXRld2F5VGltZW91dCA9IDUwNDsKICBzdGF0aWMgY29uc3QgaW50IGh0dHBWZXJzaW9uTm90U3VwcG9ydGVkID0gNTA1OwogIEBTaW5jZSgiMi4xIikKICBzdGF0aWMgY29uc3QgaW50IHZhcmlhbnRBbHNvTmVnb3RpYXRlcyA9IDUwNjsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCBpbnN1ZmZpY2llbnRTdG9yYWdlID0gNTA3OwogIEBTaW5jZSgiMi4xIikKICBzdGF0aWMgY29uc3QgaW50IGxvb3BEZXRlY3RlZCA9IDUwODsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCBub3RFeHRlbmRlZCA9IDUxMDsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCBuZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZCA9IDUxMTsKICAvLyBDbGllbnQgZ2VuZXJhdGVkIHN0YXR1cyBjb2RlLgogIHN0YXRpYyBjb25zdCBpbnQgbmV0d29ya0Nvbm5lY3RUaW1lb3V0RXJyb3IgPSA1OTk7CgogIEBEZXByZWNhdGVkKCJVc2UgY29udGludWVfIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgQ09OVElOVUUgPSBjb250aW51ZV87CiAgQERlcHJlY2F0ZWQoIlVzZSBzd2l0Y2hpbmdQcm90b2NvbHMgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBTV0lUQ0hJTkdfUFJPVE9DT0xTID0gc3dpdGNoaW5nUHJvdG9jb2xzOwogIEBEZXByZWNhdGVkKCJVc2Ugb2sgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBPSyA9IG9rOwogIEBEZXByZWNhdGVkKCJVc2UgY3JlYXRlZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IENSRUFURUQgPSBjcmVhdGVkOwogIEBEZXByZWNhdGVkKCJVc2UgYWNjZXB0ZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBBQ0NFUFRFRCA9IGFjY2VwdGVkOwogIEBEZXByZWNhdGVkKCJVc2Ugbm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04gPSBub25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb247CiAgQERlcHJlY2F0ZWQoIlVzZSBub0NvbnRlbnQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBOT19DT05URU5UID0gbm9Db250ZW50OwogIEBEZXByZWNhdGVkKCJVc2UgcmVzZXRDb250ZW50IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgUkVTRVRfQ09OVEVOVCA9IHJlc2V0Q29udGVudDsKICBARGVwcmVjYXRlZCgiVXNlIHBhcnRpYWxDb250ZW50IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgUEFSVElBTF9DT05URU5UID0gcGFydGlhbENvbnRlbnQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBtdWx0aXBsZUNob2ljZXMgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBNVUxUSVBMRV9DSE9JQ0VTID0gbXVsdGlwbGVDaG9pY2VzOwogIEBEZXByZWNhdGVkKCJVc2UgbW92ZWRQZXJtYW5lbnRseSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE1PVkVEX1BFUk1BTkVOVExZID0gbW92ZWRQZXJtYW5lbnRseTsKICBARGVwcmVjYXRlZCgiVXNlIGZvdW5kIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgRk9VTkQgPSBmb3VuZDsKICBARGVwcmVjYXRlZCgiVXNlIG1vdmVkVGVtcG9yYXJpbHkgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBNT1ZFRF9URU1QT1JBUklMWSA9IG1vdmVkVGVtcG9yYXJpbHk7CiAgQERlcHJlY2F0ZWQoIlVzZSBzZWVPdGhlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFNFRV9PVEhFUiA9IHNlZU90aGVyOwogIEBEZXByZWNhdGVkKCJVc2Ugbm90TW9kaWZpZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBOT1RfTU9ESUZJRUQgPSBub3RNb2RpZmllZDsKICBARGVwcmVjYXRlZCgiVXNlIHVzZVByb3h5IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgVVNFX1BST1hZID0gdXNlUHJveHk7CiAgQERlcHJlY2F0ZWQoIlVzZSB0ZW1wb3JhcnlSZWRpcmVjdCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFRFTVBPUkFSWV9SRURJUkVDVCA9IHRlbXBvcmFyeVJlZGlyZWN0OwogIEBEZXByZWNhdGVkKCJVc2UgYmFkUmVxdWVzdCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IEJBRF9SRVFVRVNUID0gYmFkUmVxdWVzdDsKICBARGVwcmVjYXRlZCgiVXNlIHVuYXV0aG9yaXplZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFVOQVVUSE9SSVpFRCA9IHVuYXV0aG9yaXplZDsKICBARGVwcmVjYXRlZCgiVXNlIHBheW1lbnRSZXF1aXJlZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFBBWU1FTlRfUkVRVUlSRUQgPSBwYXltZW50UmVxdWlyZWQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBmb3JiaWRkZW4gaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBGT1JCSURERU4gPSBmb3JiaWRkZW47CiAgQERlcHJlY2F0ZWQoIlVzZSBub3RGb3VuZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE5PVF9GT1VORCA9IG5vdEZvdW5kOwogIEBEZXByZWNhdGVkKCJVc2UgbWV0aG9kTm90QWxsb3dlZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE1FVEhPRF9OT1RfQUxMT1dFRCA9IG1ldGhvZE5vdEFsbG93ZWQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBub3RBY2NlcHRhYmxlIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTk9UX0FDQ0VQVEFCTEUgPSBub3RBY2NlcHRhYmxlOwogIEBEZXByZWNhdGVkKCJVc2UgcHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQgPSBwcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ7CiAgQERlcHJlY2F0ZWQoIlVzZSByZXF1ZXN0VGltZW91dCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFJFUVVFU1RfVElNRU9VVCA9IHJlcXVlc3RUaW1lb3V0OwogIEBEZXByZWNhdGVkKCJVc2UgY29uZmxpY3QgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBDT05GTElDVCA9IGNvbmZsaWN0OwogIEBEZXByZWNhdGVkKCJVc2UgZ29uZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IEdPTkUgPSBnb25lOwogIEBEZXByZWNhdGVkKCJVc2UgbGVuZ3RoUmVxdWlyZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBMRU5HVEhfUkVRVUlSRUQgPSBsZW5ndGhSZXF1aXJlZDsKICBARGVwcmVjYXRlZCgiVXNlIHByZWNvbmRpdGlvbkZhaWxlZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFBSRUNPTkRJVElPTl9GQUlMRUQgPSBwcmVjb25kaXRpb25GYWlsZWQ7CiAgQERlcHJlY2F0ZWQoIlVzZSByZXF1ZXN0RW50aXR5VG9vTGFyZ2UgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBSRVFVRVNUX0VOVElUWV9UT09fTEFSR0UgPSByZXF1ZXN0RW50aXR5VG9vTGFyZ2U7CiAgQERlcHJlY2F0ZWQoIlVzZSByZXF1ZXN0VXJpVG9vTG9uZyBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFJFUVVFU1RfVVJJX1RPT19MT05HID0gcmVxdWVzdFVyaVRvb0xvbmc7CiAgQERlcHJlY2F0ZWQoIlVzZSB1bnN1cHBvcnRlZE1lZGlhVHlwZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFVOU1VQUE9SVEVEX01FRElBX1RZUEUgPSB1bnN1cHBvcnRlZE1lZGlhVHlwZTsKICBARGVwcmVjYXRlZCgiVXNlIHJlcXVlc3RlZFJhbmdlTm90U2F0aXNmaWFibGUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBSRVFVRVNURURfUkFOR0VfTk9UX1NBVElTRklBQkxFID0KICAgICAgcmVxdWVzdGVkUmFuZ2VOb3RTYXRpc2ZpYWJsZTsKICBARGVwcmVjYXRlZCgiVXNlIGV4cGVjdGF0aW9uRmFpbGVkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgRVhQRUNUQVRJT05fRkFJTEVEID0gZXhwZWN0YXRpb25GYWlsZWQ7CiAgQERlcHJlY2F0ZWQoIlVzZSB1cGdyYWRlUmVxdWlyZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBVUEdSQURFX1JFUVVJUkVEID0gdXBncmFkZVJlcXVpcmVkOwogIEBEZXByZWNhdGVkKCJVc2UgaW50ZXJuYWxTZXJ2ZXJFcnJvciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IElOVEVSTkFMX1NFUlZFUl9FUlJPUiA9IGludGVybmFsU2VydmVyRXJyb3I7CiAgQERlcHJlY2F0ZWQoIlVzZSBub3RJbXBsZW1lbnRlZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE5PVF9JTVBMRU1FTlRFRCA9IG5vdEltcGxlbWVudGVkOwogIEBEZXByZWNhdGVkKCJVc2UgYmFkR2F0ZXdheSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IEJBRF9HQVRFV0FZID0gYmFkR2F0ZXdheTsKICBARGVwcmVjYXRlZCgiVXNlIHNlcnZpY2VVbmF2YWlsYWJsZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFNFUlZJQ0VfVU5BVkFJTEFCTEUgPSBzZXJ2aWNlVW5hdmFpbGFibGU7CiAgQERlcHJlY2F0ZWQoIlVzZSBnYXRld2F5VGltZW91dCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IEdBVEVXQVlfVElNRU9VVCA9IGdhdGV3YXlUaW1lb3V0OwogIEBEZXByZWNhdGVkKCJVc2UgaHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRCA9IGh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOwogIEBEZXByZWNhdGVkKCJVc2UgbmV0d29ya0Nvbm5lY3RUaW1lb3V0RXJyb3IgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBORVRXT1JLX0NPTk5FQ1RfVElNRU9VVF9FUlJPUiA9IG5ldHdvcmtDb25uZWN0VGltZW91dEVycm9yOwp9CoGAAE5OPAEYARoBFAkQEBwbHw4mIBwgARgSFhITEhQZATpLGx4MCAkKCxENDg8QFxITFBUcFxgZGiEcHQMBBEgENDQYARsBJDMBNAIBTxUETywESh4VFSECASEBLARIHicbFhYdIB48DQIBJwQ6LSY4PDACAU9LTCUEDQQMFwRHJwQ2JTAIBE1GBAwSEgQsBA0XOSoEOS0GCAQXBCQ9KE8rBBA/DAQlMkcBQgRCPhsERRIEQDZLEzhFRDUEREw/TDlJSUU/BExKSiEODhgdAgEEOgQcJC0QJR0iIzYkJykQJhAqECEqKyBGIyYjLBAsJScqJCMrKDYpIx8pLTAsLzcsEC0QLhAhECsqEC8QKhA2EDoQNRAuLiklLSkyEDAQLhAnECYQOCM1AScpMD0gHCUmJig5UCcrKjEsNS03LjkjIi45JikpLyYpLzsoLSowLTcnKiYpLjorMzlQLDUmKCIgLDUwPTNFLz0yQjo1JC87LTcxQCw1KC0wPSw1NUk4TwIBDmRhcnQ6X2ludGVybmFsMm9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pbnRlcm5hbC9pdGVyYWJsZS5kYXJ0wABecy8vIENvcHlyaWdodCAoYykgMjAxMSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuX2ludGVybmFsOwoKLyoqCiAqIE1hcmtlciBpbnRlcmZhY2UgZm9yIFtJdGVyYWJsZV0gc3ViY2xhc3NlcyB0aGF0IGhhdmUgYW4gZWZmaWNpZW50CiAqIFtsZW5ndGhdIGltcGxlbWVudGF0aW9uLgogKi8KYWJzdHJhY3QgY2xhc3MgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8VD4gZXh0ZW5kcyBJdGVyYWJsZTxUPiB7CiAgY29uc3QgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGUoKTsKICAvKioKICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGl0ZXJhYmxlLgogICAqCiAgICogVGhpcyBpcyBhbiBlZmZpY2llbnQgb3BlcmF0aW9uIHRoYXQgZG9lc24ndCByZXF1aXJlIGl0ZXJhdGluZyB0aHJvdWdoCiAgICogdGhlIGVsZW1lbnRzLgogICAqLwogIGludCBnZXQgbGVuZ3RoOwp9CgovKioKICogQW4gW0l0ZXJhYmxlXSBmb3IgY2xhc3NlcyB0aGF0IGhhdmUgZWZmaWNpZW50IFtsZW5ndGhdIGFuZCBbZWxlbWVudEF0XS4KICoKICogQWxsIG90aGVyIG1ldGhvZHMgYXJlIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIFtsZW5ndGhdIGFuZCBbZWxlbWVudEF0XSwKICogaW5jbHVkaW5nIFtpdGVyYXRvcl0uCiAqLwphYnN0cmFjdCBjbGFzcyBMaXN0SXRlcmFibGU8RT4gZXh0ZW5kcyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxFPiB7CiAgaW50IGdldCBsZW5ndGg7CiAgRSBlbGVtZW50QXQoaW50IGkpOwoKICBjb25zdCBMaXN0SXRlcmFibGUoKTsKCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yID0+IG5ldyBMaXN0SXRlcmF0b3I8RT4odGhpcyk7CgogIHZvaWQgZm9yRWFjaCh2b2lkIGFjdGlvbihFIGVsZW1lbnQpKSB7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGFjdGlvbihlbGVtZW50QXQoaSkpOwogICAgICBpZiAobGVuZ3RoICE9IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgfQogICAgfQogIH0KCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBsZW5ndGggPT0gMDsKCiAgRSBnZXQgZmlyc3QgewogICAgaWYgKGxlbmd0aCA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIHJldHVybiBlbGVtZW50QXQoMCk7CiAgfQoKICBFIGdldCBsYXN0IHsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICByZXR1cm4gZWxlbWVudEF0KGxlbmd0aCAtIDEpOwogIH0KCiAgRSBnZXQgc2luZ2xlIHsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICBpZiAobGVuZ3RoID4gMSkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vTWFueSgpOwogICAgcmV0dXJuIGVsZW1lbnRBdCgwKTsKICB9CgogIGJvb2wgY29udGFpbnMoT2JqZWN0IGVsZW1lbnQpIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGVsZW1lbnRBdChpKSA9PSBlbGVtZW50KSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGxlbmd0aCAhPSB0aGlzLmxlbmd0aCkgewogICAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgZXZlcnkoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKCF0ZXN0KGVsZW1lbnRBdChpKSkpIHJldHVybiBmYWxzZTsKICAgICAgaWYgKGxlbmd0aCAhPSB0aGlzLmxlbmd0aCkgewogICAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgYm9vbCBhbnkoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRlc3QoZWxlbWVudEF0KGkpKSkgcmV0dXJuIHRydWU7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBFIGZpcnN0V2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIHtFIG9yRWxzZSgpfSkgewogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBFIGVsZW1lbnQgPSBlbGVtZW50QXQoaSk7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDsKICAgICAgaWYgKGxlbmd0aCAhPSB0aGlzLmxlbmd0aCkgewogICAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIGxhc3RXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwge0Ugb3JFbHNlKCl9KSB7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gbGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgRSBlbGVtZW50ID0gZWxlbWVudEF0KGkpOwogICAgICBpZiAodGVzdChlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBzaW5nbGVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwge0Ugb3JFbHNlKCl9KSB7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBFIG1hdGNoID0gbnVsbDsKICAgIGJvb2wgbWF0Y2hGb3VuZCA9IGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBFIGVsZW1lbnQgPSBlbGVtZW50QXQoaSk7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgaWYgKG1hdGNoRm91bmQpIHsKICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgICAgICB9CiAgICAgICAgbWF0Y2hGb3VuZCA9IHRydWU7CiAgICAgICAgbWF0Y2ggPSBlbGVtZW50OwogICAgICB9CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgICBpZiAobWF0Y2hGb3VuZCkgcmV0dXJuIG1hdGNoOwogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIFN0cmluZyBqb2luKFtTdHJpbmcgc2VwYXJhdG9yID0gIiJdKSB7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBpZiAoIXNlcGFyYXRvci5pc0VtcHR5KSB7CiAgICAgIGlmIChsZW5ndGggPT0gMCkgcmV0dXJuICIiOwogICAgICBTdHJpbmcgZmlyc3QgPSAiJHtlbGVtZW50QXQoMCl9IjsKICAgICAgaWYgKGxlbmd0aCAhPSB0aGlzLmxlbmd0aCkgewogICAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoZmlyc3QpOwogICAgICBmb3IgKGludCBpID0gMTsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgYnVmZmVyLndyaXRlKHNlcGFyYXRvcik7CiAgICAgICAgYnVmZmVyLndyaXRlKGVsZW1lbnRBdChpKSk7CiAgICAgICAgaWYgKGxlbmd0aCAhPSB0aGlzLmxlbmd0aCkgewogICAgICAgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogICAgfSBlbHNlIHsKICAgICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIGJ1ZmZlci53cml0ZShlbGVtZW50QXQoaSkpOwogICAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICAgIH0KICB9CgogIEl0ZXJhYmxlPEU+IHdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSA9PiBzdXBlci53aGVyZSh0ZXN0KTsKCiAgSXRlcmFibGU8VD4gbWFwPFQ+KFQgZihFIGVsZW1lbnQpKSA9PiBuZXcgTWFwcGVkTGlzdEl0ZXJhYmxlPEUsIFQ+KHRoaXMsIGYpOwoKICBFIHJlZHVjZShFIGNvbWJpbmUoRSB2YWx1ZSwgRSBlbGVtZW50KSkgewogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgaWYgKGxlbmd0aCA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIEUgdmFsdWUgPSBlbGVtZW50QXQoMCk7CiAgICBmb3IgKGludCBpID0gMTsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgZWxlbWVudEF0KGkpKTsKICAgICAgaWYgKGxlbmd0aCAhPSB0aGlzLmxlbmd0aCkgewogICAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CgogIFQgZm9sZDxUPihUIGluaXRpYWxWYWx1ZSwgVCBjb21iaW5lKFQgcHJldmlvdXNWYWx1ZSwgRSBlbGVtZW50KSkgewogICAgdmFyIHZhbHVlID0gaW5pdGlhbFZhbHVlOwogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICB2YWx1ZSA9IGNvbWJpbmUodmFsdWUsIGVsZW1lbnRBdChpKSk7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBJdGVyYWJsZTxFPiBza2lwKGludCBjb3VudCkgPT4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxFPih0aGlzLCBjb3VudCwgbnVsbCk7CgogIEl0ZXJhYmxlPEU+IHNraXBXaGlsZShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gc3VwZXIuc2tpcFdoaWxlKHRlc3QpOwoKICBJdGVyYWJsZTxFPiB0YWtlKGludCBjb3VudCkgPT4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxFPih0aGlzLCAwLCBjb3VudCk7CgogIEl0ZXJhYmxlPEU+IHRha2VXaGlsZShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gc3VwZXIudGFrZVdoaWxlKHRlc3QpOwoKICBMaXN0PEU+IHRvTGlzdCh7Ym9vbCBncm93YWJsZTogdHJ1ZX0pIHsKICAgIExpc3Q8RT4gcmVzdWx0OwogICAgaWYgKGdyb3dhYmxlKSB7CiAgICAgIHJlc3VsdCA9IDxFPltdLi5sZW5ndGggPSBsZW5ndGg7CiAgICB9IGVsc2UgewogICAgICByZXN1bHQgPSBuZXcgTGlzdDxFPihsZW5ndGgpOwogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICByZXN1bHRbaV0gPSBlbGVtZW50QXQoaSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgU2V0PEU+IHRvU2V0KCkgewogICAgU2V0PEU+IHJlc3VsdCA9IG5ldyBTZXQ8RT4oKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgcmVzdWx0LmFkZChlbGVtZW50QXQoaSkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KCmNsYXNzIFN1Ykxpc3RJdGVyYWJsZTxFPiBleHRlbmRzIExpc3RJdGVyYWJsZTxFPiB7CiAgZmluYWwgSXRlcmFibGU8RT4gX2l0ZXJhYmxlOyAvLyBIYXMgZWZmaWNpZW50IGxlbmd0aCBhbmQgZWxlbWVudEF0LgogIGZpbmFsIGludCBfc3RhcnQ7CiAgLyoqIElmIG51bGwsIHJlcHJlc2VudHMgdGhlIGxlbmd0aCBvZiB0aGUgaXRlcmFibGUuICovCiAgZmluYWwgaW50IF9lbmRPckxlbmd0aDsKCiAgU3ViTGlzdEl0ZXJhYmxlKHRoaXMuX2l0ZXJhYmxlLCB0aGlzLl9zdGFydCwgdGhpcy5fZW5kT3JMZW5ndGgpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tOb3ROZWdhdGl2ZShfc3RhcnQsICJzdGFydCIpOwogICAgaWYgKF9lbmRPckxlbmd0aCAhPSBudWxsKSB7CiAgICAgIFJhbmdlRXJyb3IuY2hlY2tOb3ROZWdhdGl2ZShfZW5kT3JMZW5ndGgsICJlbmQiKTsKICAgICAgaWYgKF9zdGFydCA+IF9lbmRPckxlbmd0aCkgewogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKF9zdGFydCwgMCwgX2VuZE9yTGVuZ3RoLCAic3RhcnQiKTsKICAgICAgfQogICAgfQogIH0KCiAgaW50IGdldCBfZW5kSW5kZXggewogICAgaW50IGxlbmd0aCA9IF9pdGVyYWJsZS5sZW5ndGg7CiAgICBpZiAoX2VuZE9yTGVuZ3RoID09IG51bGwgfHwgX2VuZE9yTGVuZ3RoID4gbGVuZ3RoKSByZXR1cm4gbGVuZ3RoOwogICAgcmV0dXJuIF9lbmRPckxlbmd0aDsKICB9CgogIGludCBnZXQgX3N0YXJ0SW5kZXggewogICAgaW50IGxlbmd0aCA9IF9pdGVyYWJsZS5sZW5ndGg7CiAgICBpZiAoX3N0YXJ0ID4gbGVuZ3RoKSByZXR1cm4gbGVuZ3RoOwogICAgcmV0dXJuIF9zdGFydDsKICB9CgogIGludCBnZXQgbGVuZ3RoIHsKICAgIGludCBsZW5ndGggPSBfaXRlcmFibGUubGVuZ3RoOwogICAgaWYgKF9zdGFydCA+PSBsZW5ndGgpIHJldHVybiAwOwogICAgaWYgKF9lbmRPckxlbmd0aCA9PSBudWxsIHx8IF9lbmRPckxlbmd0aCA+PSBsZW5ndGgpIHsKICAgICAgcmV0dXJuIGxlbmd0aCAtIF9zdGFydDsKICAgIH0KICAgIHJldHVybiBfZW5kT3JMZW5ndGggLSBfc3RhcnQ7CiAgfQoKICBFIGVsZW1lbnRBdChpbnQgaW5kZXgpIHsKICAgIGludCByZWFsSW5kZXggPSBfc3RhcnRJbmRleCArIGluZGV4OwogICAgaWYgKGluZGV4IDwgMCB8fCByZWFsSW5kZXggPj0gX2VuZEluZGV4KSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfaXRlcmFibGUuZWxlbWVudEF0KHJlYWxJbmRleCk7CiAgfQoKICBJdGVyYWJsZTxFPiBza2lwKGludCBjb3VudCkgewogICAgUmFuZ2VFcnJvci5jaGVja05vdE5lZ2F0aXZlKGNvdW50LCAiY291bnQiKTsKICAgIGludCBuZXdTdGFydCA9IF9zdGFydCArIGNvdW50OwogICAgaWYgKF9lbmRPckxlbmd0aCAhPSBudWxsICYmIG5ld1N0YXJ0ID49IF9lbmRPckxlbmd0aCkgewogICAgICByZXR1cm4gbmV3IEVtcHR5SXRlcmFibGU8RT4oKTsKICAgIH0KICAgIHJldHVybiBuZXcgU3ViTGlzdEl0ZXJhYmxlPEU+KF9pdGVyYWJsZSwgbmV3U3RhcnQsIF9lbmRPckxlbmd0aCk7CiAgfQoKICBJdGVyYWJsZTxFPiB0YWtlKGludCBjb3VudCkgewogICAgUmFuZ2VFcnJvci5jaGVja05vdE5lZ2F0aXZlKGNvdW50LCAiY291bnQiKTsKICAgIGlmIChfZW5kT3JMZW5ndGggPT0gbnVsbCkgewogICAgICByZXR1cm4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxFPihfaXRlcmFibGUsIF9zdGFydCwgX3N0YXJ0ICsgY291bnQpOwogICAgfSBlbHNlIHsKICAgICAgaW50IG5ld0VuZCA9IF9zdGFydCArIGNvdW50OwogICAgICBpZiAoX2VuZE9yTGVuZ3RoIDwgbmV3RW5kKSByZXR1cm4gdGhpczsKICAgICAgcmV0dXJuIG5ldyBTdWJMaXN0SXRlcmFibGU8RT4oX2l0ZXJhYmxlLCBfc3RhcnQsIG5ld0VuZCk7CiAgICB9CiAgfQoKICBMaXN0PEU+IHRvTGlzdCh7Ym9vbCBncm93YWJsZTogdHJ1ZX0pIHsKICAgIGludCBzdGFydCA9IF9zdGFydDsKICAgIGludCBlbmQgPSBfaXRlcmFibGUubGVuZ3RoOwogICAgaWYgKF9lbmRPckxlbmd0aCAhPSBudWxsICYmIF9lbmRPckxlbmd0aCA8IGVuZCkgZW5kID0gX2VuZE9yTGVuZ3RoOwogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgaWYgKGxlbmd0aCA8IDApIGxlbmd0aCA9IDA7CiAgICBMaXN0PEU+IHJlc3VsdCA9CiAgICAgICAgZ3Jvd2FibGUgPyAobmV3IExpc3Q8RT4oKS4ubGVuZ3RoID0gbGVuZ3RoKSA6IG5ldyBMaXN0PEU+KGxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHJlc3VsdFtpXSA9IF9pdGVyYWJsZS5lbGVtZW50QXQoc3RhcnQgKyBpKTsKICAgICAgaWYgKF9pdGVyYWJsZS5sZW5ndGggPCBlbmQpIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQoKLyoqCiAqIEFuIFtJdGVyYXRvcl0gdGhhdCBpdGVyYXRlcyBhIGxpc3QtbGlrZSBbSXRlcmFibGVdLgogKgogKiBBbGwgaXRlcmF0aW9ucyBpcyBkb25lIGluIHRlcm1zIG9mIFtJdGVyYWJsZS5sZW5ndGhdIGFuZAogKiBbSXRlcmFibGUuZWxlbWVudEF0XS4gVGhlc2Ugb3BlcmF0aW9ucyBhcmUgZmFzdCBmb3IgbGlzdC1saWtlCiAqIGl0ZXJhYmxlcy4KICovCmNsYXNzIExpc3RJdGVyYXRvcjxFPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPEU+IHsKICBmaW5hbCBJdGVyYWJsZTxFPiBfaXRlcmFibGU7CiAgZmluYWwgaW50IF9sZW5ndGg7CiAgaW50IF9pbmRleDsKICBFIF9jdXJyZW50OwoKICBMaXN0SXRlcmF0b3IoSXRlcmFibGU8RT4gaXRlcmFibGUpCiAgICAgIDogX2l0ZXJhYmxlID0gaXRlcmFibGUsCiAgICAgICAgX2xlbmd0aCA9IGl0ZXJhYmxlLmxlbmd0aCwKICAgICAgICBfaW5kZXggPSAwOwoKICBFIGdldCBjdXJyZW50ID0+IF9jdXJyZW50OwoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBib29sIG1vdmVOZXh0KCkgewogICAgaW50IGxlbmd0aCA9IF9pdGVyYWJsZS5sZW5ndGg7CiAgICBpZiAoX2xlbmd0aCAhPSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcihfaXRlcmFibGUpOwogICAgfQogICAgaWYgKF9pbmRleCA+PSBsZW5ndGgpIHsKICAgICAgX2N1cnJlbnQgPSBudWxsOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBfY3VycmVudCA9IF9pdGVyYWJsZS5lbGVtZW50QXQoX2luZGV4KTsKICAgIF9pbmRleCsrOwogICAgcmV0dXJuIHRydWU7CiAgfQp9Cgp0eXBlZGVmIFQgX1RyYW5zZm9ybWF0aW9uPFMsIFQ+KFMgdmFsdWUpOwoKY2xhc3MgTWFwcGVkSXRlcmFibGU8UywgVD4gZXh0ZW5kcyBJdGVyYWJsZTxUPiB7CiAgZmluYWwgSXRlcmFibGU8Uz4gX2l0ZXJhYmxlOwogIGZpbmFsIF9UcmFuc2Zvcm1hdGlvbjxTLCBUPiBfZjsKCiAgZmFjdG9yeSBNYXBwZWRJdGVyYWJsZShJdGVyYWJsZTxTPiBpdGVyYWJsZSwgVCBmdW5jdGlvbihTIHZhbHVlKSkgewogICAgaWYgKGl0ZXJhYmxlIGlzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlKSB7CiAgICAgIHJldHVybiBuZXcgRWZmaWNpZW50TGVuZ3RoTWFwcGVkSXRlcmFibGU8UywgVD4oaXRlcmFibGUsIGZ1bmN0aW9uKTsKICAgIH0KICAgIHJldHVybiBuZXcgTWFwcGVkSXRlcmFibGU8UywgVD4uXyhpdGVyYWJsZSwgZnVuY3Rpb24pOwogIH0KCiAgTWFwcGVkSXRlcmFibGUuXyh0aGlzLl9pdGVyYWJsZSwgdGhpcy5fZik7CgogIEl0ZXJhdG9yPFQ+IGdldCBpdGVyYXRvciA9PiBuZXcgTWFwcGVkSXRlcmF0b3I8UywgVD4oX2l0ZXJhYmxlLml0ZXJhdG9yLCBfZik7CgogIC8vIExlbmd0aCByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgaW5kZXBlbmRlbnQgb2YgdGhlIG1hcHBpbmcuCiAgaW50IGdldCBsZW5ndGggPT4gX2l0ZXJhYmxlLmxlbmd0aDsKICBib29sIGdldCBpc0VtcHR5ID0+IF9pdGVyYWJsZS5pc0VtcHR5OwoKICAvLyBJbmRleCBiYXNlZCBsb29rdXAgY2FuIGJlIGRvbmUgYmVmb3JlIHRyYW5zZm9ybWluZy4KICBUIGdldCBmaXJzdCA9PiBfZihfaXRlcmFibGUuZmlyc3QpOwogIFQgZ2V0IGxhc3QgPT4gX2YoX2l0ZXJhYmxlLmxhc3QpOwogIFQgZ2V0IHNpbmdsZSA9PiBfZihfaXRlcmFibGUuc2luZ2xlKTsKICBUIGVsZW1lbnRBdChpbnQgaW5kZXgpID0+IF9mKF9pdGVyYWJsZS5lbGVtZW50QXQoaW5kZXgpKTsKfQoKY2xhc3MgRWZmaWNpZW50TGVuZ3RoTWFwcGVkSXRlcmFibGU8UywgVD4gZXh0ZW5kcyBNYXBwZWRJdGVyYWJsZTxTLCBUPgogICAgaW1wbGVtZW50cyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxUPiB7CiAgRWZmaWNpZW50TGVuZ3RoTWFwcGVkSXRlcmFibGUoSXRlcmFibGU8Uz4gaXRlcmFibGUsIFQgZnVuY3Rpb24oUyB2YWx1ZSkpCiAgICAgIDogc3VwZXIuXyhpdGVyYWJsZSwgZnVuY3Rpb24pOwp9CgpjbGFzcyBNYXBwZWRJdGVyYXRvcjxTLCBUPiBleHRlbmRzIEl0ZXJhdG9yPFQ+IHsKICBUIF9jdXJyZW50OwogIGZpbmFsIEl0ZXJhdG9yPFM+IF9pdGVyYXRvcjsKICBmaW5hbCBfVHJhbnNmb3JtYXRpb248UywgVD4gX2Y7CgogIE1hcHBlZEl0ZXJhdG9yKHRoaXMuX2l0ZXJhdG9yLCB0aGlzLl9mKTsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChfaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICBfY3VycmVudCA9IF9mKF9pdGVyYXRvci5jdXJyZW50KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBfY3VycmVudCA9IG51bGw7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBUIGdldCBjdXJyZW50ID0+IF9jdXJyZW50Owp9CgovKioKICogU3BlY2lhbGl6ZWQgYWx0ZXJuYXRpdmUgdG8gW01hcHBlZEl0ZXJhYmxlXSBmb3IgbWFwcGVkIFtMaXN0XXMuCiAqCiAqIEV4cGVjdHMgZWZmaWNpZW50IGBsZW5ndGhgIGFuZCBgZWxlbWVudEF0YCBvbiB0aGUgc291cmNlIGl0ZXJhYmxlLgogKi8KY2xhc3MgTWFwcGVkTGlzdEl0ZXJhYmxlPFMsIFQ+IGV4dGVuZHMgTGlzdEl0ZXJhYmxlPFQ+IHsKICBmaW5hbCBJdGVyYWJsZTxTPiBfc291cmNlOwogIGZpbmFsIF9UcmFuc2Zvcm1hdGlvbjxTLCBUPiBfZjsKCiAgTWFwcGVkTGlzdEl0ZXJhYmxlKHRoaXMuX3NvdXJjZSwgdGhpcy5fZik7CgogIGludCBnZXQgbGVuZ3RoID0+IF9zb3VyY2UubGVuZ3RoOwogIFQgZWxlbWVudEF0KGludCBpbmRleCkgPT4gX2YoX3NvdXJjZS5lbGVtZW50QXQoaW5kZXgpKTsKfQoKdHlwZWRlZiBib29sIF9FbGVtZW50UHJlZGljYXRlPEU+KEUgZWxlbWVudCk7CgpjbGFzcyBXaGVyZUl0ZXJhYmxlPEU+IGV4dGVuZHMgSXRlcmFibGU8RT4gewogIGZpbmFsIEl0ZXJhYmxlPEU+IF9pdGVyYWJsZTsKICBmaW5hbCBfRWxlbWVudFByZWRpY2F0ZTxFPiBfZjsKCiAgV2hlcmVJdGVyYWJsZSh0aGlzLl9pdGVyYWJsZSwgdGhpcy5fZik7CgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciA9PiBuZXcgV2hlcmVJdGVyYXRvcjxFPihfaXRlcmFibGUuaXRlcmF0b3IsIF9mKTsKCiAgLy8gU3BlY2lhbGl6YXRpb24gb2YgW0l0ZXJhYmxlLm1hcF0gdG8gbm9uLUVmZmljaWVudExlbmd0aEl0ZXJhYmxlLgogIEl0ZXJhYmxlPFQ+IG1hcDxUPihUIGYoRSBlbGVtZW50KSkgPT4gbmV3IE1hcHBlZEl0ZXJhYmxlPEUsIFQ+Ll8odGhpcywgZik7Cn0KCmNsYXNzIFdoZXJlSXRlcmF0b3I8RT4gZXh0ZW5kcyBJdGVyYXRvcjxFPiB7CiAgZmluYWwgSXRlcmF0b3I8RT4gX2l0ZXJhdG9yOwogIGZpbmFsIF9FbGVtZW50UHJlZGljYXRlPEU+IF9mOwoKICBXaGVyZUl0ZXJhdG9yKHRoaXMuX2l0ZXJhdG9yLCB0aGlzLl9mKTsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIHdoaWxlIChfaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICBpZiAoX2YoX2l0ZXJhdG9yLmN1cnJlbnQpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEUgZ2V0IGN1cnJlbnQgPT4gX2l0ZXJhdG9yLmN1cnJlbnQ7Cn0KCnR5cGVkZWYgSXRlcmFibGU8VD4gX0V4cGFuZEZ1bmN0aW9uPFMsIFQ+KFMgc291cmNlRWxlbWVudCk7CgpjbGFzcyBFeHBhbmRJdGVyYWJsZTxTLCBUPiBleHRlbmRzIEl0ZXJhYmxlPFQ+IHsKICBmaW5hbCBJdGVyYWJsZTxTPiBfaXRlcmFibGU7CiAgZmluYWwgX0V4cGFuZEZ1bmN0aW9uPFMsIFQ+IF9mOwoKICBFeHBhbmRJdGVyYWJsZSh0aGlzLl9pdGVyYWJsZSwgdGhpcy5fZik7CgogIEl0ZXJhdG9yPFQ+IGdldCBpdGVyYXRvciA9PiBuZXcgRXhwYW5kSXRlcmF0b3I8UywgVD4oX2l0ZXJhYmxlLml0ZXJhdG9yLCBfZik7Cn0KCmNsYXNzIEV4cGFuZEl0ZXJhdG9yPFMsIFQ+IGltcGxlbWVudHMgSXRlcmF0b3I8VD4gewogIGZpbmFsIEl0ZXJhdG9yPFM+IF9pdGVyYXRvcjsKICBmaW5hbCBfRXhwYW5kRnVuY3Rpb248UywgVD4gX2Y7CiAgLy8gSW5pdGlhbGl6ZSBfY3VycmVudEV4cGFuc2lvbiB0byBhbiBlbXB0eSBpdGVyYWJsZS4gQSBudWxsIHZhbHVlCiAgLy8gbWFya3MgdGhlIGVuZCBvZiBpdGVyYXRpb24sIGFuZCB3ZSBkb24ndCB3YW50IHRvIGNhbGwgX2YgYmVmb3JlCiAgLy8gdGhlIGZpcnN0IG1vdmVOZXh0IGNhbGwuCiAgSXRlcmF0b3I8VD4gX2N1cnJlbnRFeHBhbnNpb24gPSBjb25zdCBFbXB0eUl0ZXJhdG9yKCk7CiAgVCBfY3VycmVudDsKCiAgRXhwYW5kSXRlcmF0b3IodGhpcy5faXRlcmF0b3IsIHRoaXMuX2YpOwoKICBUIGdldCBjdXJyZW50ID0+IF9jdXJyZW50OwoKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKF9jdXJyZW50RXhwYW5zaW9uID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIHdoaWxlICghX2N1cnJlbnRFeHBhbnNpb24ubW92ZU5leHQoKSkgewogICAgICBfY3VycmVudCA9IG51bGw7CiAgICAgIGlmIChfaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICAgIC8vIElmIF9mIHRocm93cywgdGhpcyBlbmRzIGl0ZXJhdGlvbi4gT3RoZXJ3aXNlIF9jdXJyZW50RXhwYW5zaW9uIGFuZAogICAgICAgIC8vIF9jdXJyZW50IHdpbGwgYmUgc2V0IGFnYWluIGJlbG93LgogICAgICAgIF9jdXJyZW50RXhwYW5zaW9uID0gbnVsbDsKICAgICAgICBfY3VycmVudEV4cGFuc2lvbiA9IF9mKF9pdGVyYXRvci5jdXJyZW50KS5pdGVyYXRvcjsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIF9jdXJyZW50ID0gX2N1cnJlbnRFeHBhbnNpb24uY3VycmVudDsKICAgIHJldHVybiB0cnVlOwogIH0KfQoKY2xhc3MgVGFrZUl0ZXJhYmxlPEU+IGV4dGVuZHMgSXRlcmFibGU8RT4gewogIGZpbmFsIEl0ZXJhYmxlPEU+IF9pdGVyYWJsZTsKICBmaW5hbCBpbnQgX3Rha2VDb3VudDsKCiAgZmFjdG9yeSBUYWtlSXRlcmFibGUoSXRlcmFibGU8RT4gaXRlcmFibGUsIGludCB0YWtlQ291bnQpIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKHRha2VDb3VudCwgInRha2VDb3VudCIpOwogICAgUmFuZ2VFcnJvci5jaGVja05vdE5lZ2F0aXZlKHRha2VDb3VudCwgInRha2VDb3VudCIpOwogICAgaWYgKGl0ZXJhYmxlIGlzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlKSB7CiAgICAgIHJldHVybiBuZXcgRWZmaWNpZW50TGVuZ3RoVGFrZUl0ZXJhYmxlPEU+KGl0ZXJhYmxlLCB0YWtlQ291bnQpOwogICAgfQogICAgcmV0dXJuIG5ldyBUYWtlSXRlcmFibGU8RT4uXyhpdGVyYWJsZSwgdGFrZUNvdW50KTsKICB9CgogIFRha2VJdGVyYWJsZS5fKHRoaXMuX2l0ZXJhYmxlLCB0aGlzLl90YWtlQ291bnQpOwoKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgewogICAgcmV0dXJuIG5ldyBUYWtlSXRlcmF0b3I8RT4oX2l0ZXJhYmxlLml0ZXJhdG9yLCBfdGFrZUNvdW50KTsKICB9Cn0KCmNsYXNzIEVmZmljaWVudExlbmd0aFRha2VJdGVyYWJsZTxFPiBleHRlbmRzIFRha2VJdGVyYWJsZTxFPgogICAgaW1wbGVtZW50cyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxFPiB7CiAgRWZmaWNpZW50TGVuZ3RoVGFrZUl0ZXJhYmxlKEl0ZXJhYmxlPEU+IGl0ZXJhYmxlLCBpbnQgdGFrZUNvdW50KQogICAgICA6IHN1cGVyLl8oaXRlcmFibGUsIHRha2VDb3VudCk7CgogIGludCBnZXQgbGVuZ3RoIHsKICAgIGludCBpdGVyYWJsZUxlbmd0aCA9IF9pdGVyYWJsZS5sZW5ndGg7CiAgICBpZiAoaXRlcmFibGVMZW5ndGggPiBfdGFrZUNvdW50KSByZXR1cm4gX3Rha2VDb3VudDsKICAgIHJldHVybiBpdGVyYWJsZUxlbmd0aDsKICB9Cn0KCmNsYXNzIFRha2VJdGVyYXRvcjxFPiBleHRlbmRzIEl0ZXJhdG9yPEU+IHsKICBmaW5hbCBJdGVyYXRvcjxFPiBfaXRlcmF0b3I7CiAgaW50IF9yZW1haW5pbmc7CgogIFRha2VJdGVyYXRvcih0aGlzLl9pdGVyYXRvciwgdGhpcy5fcmVtYWluaW5nKSB7CiAgICBhc3NlcnQoX3JlbWFpbmluZyA+PSAwKTsKICB9CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBfcmVtYWluaW5nLS07CiAgICBpZiAoX3JlbWFpbmluZyA+PSAwKSB7CiAgICAgIHJldHVybiBfaXRlcmF0b3IubW92ZU5leHQoKTsKICAgIH0KICAgIF9yZW1haW5pbmcgPSAtMTsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEUgZ2V0IGN1cnJlbnQgewogICAgaWYgKF9yZW1haW5pbmcgPCAwKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfaXRlcmF0b3IuY3VycmVudDsKICB9Cn0KCmNsYXNzIFRha2VXaGlsZUl0ZXJhYmxlPEU+IGV4dGVuZHMgSXRlcmFibGU8RT4gewogIGZpbmFsIEl0ZXJhYmxlPEU+IF9pdGVyYWJsZTsKICBmaW5hbCBfRWxlbWVudFByZWRpY2F0ZTxFPiBfZjsKCiAgVGFrZVdoaWxlSXRlcmFibGUodGhpcy5faXRlcmFibGUsIHRoaXMuX2YpOwoKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgewogICAgcmV0dXJuIG5ldyBUYWtlV2hpbGVJdGVyYXRvcjxFPihfaXRlcmFibGUuaXRlcmF0b3IsIF9mKTsKICB9Cn0KCmNsYXNzIFRha2VXaGlsZUl0ZXJhdG9yPEU+IGV4dGVuZHMgSXRlcmF0b3I8RT4gewogIGZpbmFsIEl0ZXJhdG9yPEU+IF9pdGVyYXRvcjsKICBmaW5hbCBfRWxlbWVudFByZWRpY2F0ZTxFPiBfZjsKICBib29sIF9pc0ZpbmlzaGVkID0gZmFsc2U7CgogIFRha2VXaGlsZUl0ZXJhdG9yKHRoaXMuX2l0ZXJhdG9yLCB0aGlzLl9mKTsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChfaXNGaW5pc2hlZCkgcmV0dXJuIGZhbHNlOwogICAgaWYgKCFfaXRlcmF0b3IubW92ZU5leHQoKSB8fCAhX2YoX2l0ZXJhdG9yLmN1cnJlbnQpKSB7CiAgICAgIF9pc0ZpbmlzaGVkID0gdHJ1ZTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBFIGdldCBjdXJyZW50IHsKICAgIGlmIChfaXNGaW5pc2hlZCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX2l0ZXJhdG9yLmN1cnJlbnQ7CiAgfQp9CgpjbGFzcyBTa2lwSXRlcmFibGU8RT4gZXh0ZW5kcyBJdGVyYWJsZTxFPiB7CiAgZmluYWwgSXRlcmFibGU8RT4gX2l0ZXJhYmxlOwogIGZpbmFsIGludCBfc2tpcENvdW50OwoKICBmYWN0b3J5IFNraXBJdGVyYWJsZShJdGVyYWJsZTxFPiBpdGVyYWJsZSwgaW50IGNvdW50KSB7CiAgICBpZiAoaXRlcmFibGUgaXMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGUpIHsKICAgICAgcmV0dXJuIG5ldyBFZmZpY2llbnRMZW5ndGhTa2lwSXRlcmFibGU8RT4oaXRlcmFibGUsIGNvdW50KTsKICAgIH0KICAgIHJldHVybiBuZXcgU2tpcEl0ZXJhYmxlPEU+Ll8oaXRlcmFibGUsIF9jaGVja0NvdW50KGNvdW50KSk7CiAgfQoKICBTa2lwSXRlcmFibGUuXyh0aGlzLl9pdGVyYWJsZSwgdGhpcy5fc2tpcENvdW50KTsKCiAgSXRlcmFibGU8RT4gc2tpcChpbnQgY291bnQpIHsKICAgIHJldHVybiBuZXcgU2tpcEl0ZXJhYmxlPEU+Ll8oX2l0ZXJhYmxlLCBfc2tpcENvdW50ICsgX2NoZWNrQ291bnQoY291bnQpKTsKICB9CgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciB7CiAgICByZXR1cm4gbmV3IFNraXBJdGVyYXRvcjxFPihfaXRlcmFibGUuaXRlcmF0b3IsIF9za2lwQ291bnQpOwogIH0KfQoKY2xhc3MgRWZmaWNpZW50TGVuZ3RoU2tpcEl0ZXJhYmxlPEU+IGV4dGVuZHMgU2tpcEl0ZXJhYmxlPEU+CiAgICBpbXBsZW1lbnRzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEU+IHsKICBmYWN0b3J5IEVmZmljaWVudExlbmd0aFNraXBJdGVyYWJsZShJdGVyYWJsZTxFPiBpdGVyYWJsZSwgaW50IGNvdW50KSB7CiAgICByZXR1cm4gbmV3IEVmZmljaWVudExlbmd0aFNraXBJdGVyYWJsZTxFPi5fKGl0ZXJhYmxlLCBfY2hlY2tDb3VudChjb3VudCkpOwogIH0KCiAgRWZmaWNpZW50TGVuZ3RoU2tpcEl0ZXJhYmxlLl8oSXRlcmFibGU8RT4gaXRlcmFibGUsIGludCBjb3VudCkKICAgICAgOiBzdXBlci5fKGl0ZXJhYmxlLCBjb3VudCk7CgogIGludCBnZXQgbGVuZ3RoIHsKICAgIGludCBsZW5ndGggPSBfaXRlcmFibGUubGVuZ3RoIC0gX3NraXBDb3VudDsKICAgIGlmIChsZW5ndGggPj0gMCkgcmV0dXJuIGxlbmd0aDsKICAgIHJldHVybiAwOwogIH0KCiAgSXRlcmFibGU8RT4gc2tpcChpbnQgY291bnQpIHsKICAgIHJldHVybiBuZXcgRWZmaWNpZW50TGVuZ3RoU2tpcEl0ZXJhYmxlPEU+Ll8oCiAgICAgICAgX2l0ZXJhYmxlLCBfc2tpcENvdW50ICsgX2NoZWNrQ291bnQoY291bnQpKTsKICB9Cn0KCmludCBfY2hlY2tDb3VudChpbnQgY291bnQpIHsKICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChjb3VudCwgImNvdW50Iik7CiAgUmFuZ2VFcnJvci5jaGVja05vdE5lZ2F0aXZlKGNvdW50LCAiY291bnQiKTsKICByZXR1cm4gY291bnQ7Cn0KCmNsYXNzIFNraXBJdGVyYXRvcjxFPiBleHRlbmRzIEl0ZXJhdG9yPEU+IHsKICBmaW5hbCBJdGVyYXRvcjxFPiBfaXRlcmF0b3I7CiAgaW50IF9za2lwQ291bnQ7CgogIFNraXBJdGVyYXRvcih0aGlzLl9pdGVyYXRvciwgdGhpcy5fc2tpcENvdW50KSB7CiAgICBhc3NlcnQoX3NraXBDb3VudCA+PSAwKTsKICB9CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9za2lwQ291bnQ7IGkrKykgX2l0ZXJhdG9yLm1vdmVOZXh0KCk7CiAgICBfc2tpcENvdW50ID0gMDsKICAgIHJldHVybiBfaXRlcmF0b3IubW92ZU5leHQoKTsKICB9CgogIEUgZ2V0IGN1cnJlbnQgPT4gX2l0ZXJhdG9yLmN1cnJlbnQ7Cn0KCmNsYXNzIFNraXBXaGlsZUl0ZXJhYmxlPEU+IGV4dGVuZHMgSXRlcmFibGU8RT4gewogIGZpbmFsIEl0ZXJhYmxlPEU+IF9pdGVyYWJsZTsKICBmaW5hbCBfRWxlbWVudFByZWRpY2F0ZTxFPiBfZjsKCiAgU2tpcFdoaWxlSXRlcmFibGUodGhpcy5faXRlcmFibGUsIHRoaXMuX2YpOwoKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgewogICAgcmV0dXJuIG5ldyBTa2lwV2hpbGVJdGVyYXRvcjxFPihfaXRlcmFibGUuaXRlcmF0b3IsIF9mKTsKICB9Cn0KCmNsYXNzIFNraXBXaGlsZUl0ZXJhdG9yPEU+IGV4dGVuZHMgSXRlcmF0b3I8RT4gewogIGZpbmFsIEl0ZXJhdG9yPEU+IF9pdGVyYXRvcjsKICBmaW5hbCBfRWxlbWVudFByZWRpY2F0ZTxFPiBfZjsKICBib29sIF9oYXNTa2lwcGVkID0gZmFsc2U7CgogIFNraXBXaGlsZUl0ZXJhdG9yKHRoaXMuX2l0ZXJhdG9yLCB0aGlzLl9mKTsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmICghX2hhc1NraXBwZWQpIHsKICAgICAgX2hhc1NraXBwZWQgPSB0cnVlOwogICAgICB3aGlsZSAoX2l0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgICBpZiAoIV9mKF9pdGVyYXRvci5jdXJyZW50KSkgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfaXRlcmF0b3IubW92ZU5leHQoKTsKICB9CgogIEUgZ2V0IGN1cnJlbnQgPT4gX2l0ZXJhdG9yLmN1cnJlbnQ7Cn0KCi8qKgogKiBUaGUgYWx3YXlzIGVtcHR5IFtJdGVyYWJsZV0uCiAqLwpjbGFzcyBFbXB0eUl0ZXJhYmxlPEU+IGV4dGVuZHMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4gewogIGNvbnN0IEVtcHR5SXRlcmFibGUoKTsKCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yID0+IGNvbnN0IEVtcHR5SXRlcmF0b3IoKTsKCiAgdm9pZCBmb3JFYWNoKHZvaWQgYWN0aW9uKEUgZWxlbWVudCkpIHt9CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gdHJ1ZTsKCiAgaW50IGdldCBsZW5ndGggPT4gMDsKCiAgRSBnZXQgZmlyc3QgewogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIGdldCBsYXN0IHsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBnZXQgc2luZ2xlIHsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBlbGVtZW50QXQoaW50IGluZGV4KSB7CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShpbmRleCwgMCwgMCwgImluZGV4Iik7CiAgfQoKICBib29sIGNvbnRhaW5zKE9iamVjdCBlbGVtZW50KSA9PiBmYWxzZTsKCiAgYm9vbCBldmVyeShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gdHJ1ZTsKCiAgYm9vbCBhbnkoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IGZhbHNlOwoKICBFIGZpcnN0V2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIHtFIG9yRWxzZSgpfSkgewogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgbGFzdFdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCB7RSBvckVsc2UoKX0pIHsKICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIHNpbmdsZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCB7RSBvckVsc2UoKX0pIHsKICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBTdHJpbmcgam9pbihbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSkgPT4gIiI7CgogIEl0ZXJhYmxlPEU+IHdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSA9PiB0aGlzOwoKICBJdGVyYWJsZTxUPiBtYXA8VD4oVCBmKEUgZWxlbWVudCkpID0+IG5ldyBFbXB0eUl0ZXJhYmxlPFQ+KCk7CgogIEUgcmVkdWNlKEUgY29tYmluZShFIHZhbHVlLCBFIGVsZW1lbnQpKSB7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIFQgZm9sZDxUPihUIGluaXRpYWxWYWx1ZSwgVCBjb21iaW5lKFQgcHJldmlvdXNWYWx1ZSwgRSBlbGVtZW50KSkgewogICAgcmV0dXJuIGluaXRpYWxWYWx1ZTsKICB9CgogIEl0ZXJhYmxlPEU+IHNraXAoaW50IGNvdW50KSB7CiAgICBSYW5nZUVycm9yLmNoZWNrTm90TmVnYXRpdmUoY291bnQsICJjb3VudCIpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICBJdGVyYWJsZTxFPiBza2lwV2hpbGUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IHRoaXM7CgogIEl0ZXJhYmxlPEU+IHRha2UoaW50IGNvdW50KSB7CiAgICBSYW5nZUVycm9yLmNoZWNrTm90TmVnYXRpdmUoY291bnQsICJjb3VudCIpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICBJdGVyYWJsZTxFPiB0YWtlV2hpbGUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IHRoaXM7CgogIExpc3Q8RT4gdG9MaXN0KHtib29sIGdyb3dhYmxlOiB0cnVlfSkgPT4gZ3Jvd2FibGUgPyA8RT5bXSA6IG5ldyBMaXN0PEU+KDApOwoKICBTZXQ8RT4gdG9TZXQoKSA9PiBuZXcgU2V0PEU+KCk7Cn0KCi8qKiBUaGUgYWx3YXlzIGVtcHR5IGl0ZXJhdG9yLiAqLwpjbGFzcyBFbXB0eUl0ZXJhdG9yPEU+IGltcGxlbWVudHMgSXRlcmF0b3I8RT4gewogIGNvbnN0IEVtcHR5SXRlcmF0b3IoKTsKICBib29sIG1vdmVOZXh0KCkgPT4gZmFsc2U7CiAgRSBnZXQgY3VycmVudCA9PiBudWxsOwp9CgpjbGFzcyBGb2xsb3dlZEJ5SXRlcmFibGU8RT4gZXh0ZW5kcyBJdGVyYWJsZTxFPiB7CiAgZmluYWwgSXRlcmFibGU8RT4gX2ZpcnN0OwogIGZpbmFsIEl0ZXJhYmxlPEU+IF9zZWNvbmQ7CiAgRm9sbG93ZWRCeUl0ZXJhYmxlKHRoaXMuX2ZpcnN0LCB0aGlzLl9zZWNvbmQpOwoKICBmYWN0b3J5IEZvbGxvd2VkQnlJdGVyYWJsZS5maXJzdEVmZmljaWVudCgKICAgICAgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4gZmlyc3QsIEl0ZXJhYmxlPEU+IHNlY29uZCkgewogICAgaWYgKHNlY29uZCBpcyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxFPikgewogICAgICByZXR1cm4gbmV3IEVmZmljaWVudExlbmd0aEZvbGxvd2VkQnlJdGVyYWJsZTxFPihmaXJzdCwgc2Vjb25kKTsKICAgIH0KICAgIHJldHVybiBuZXcgRm9sbG93ZWRCeUl0ZXJhYmxlPEU+KGZpcnN0LCBzZWNvbmQpOwogIH0KCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yID0+IG5ldyBGb2xsb3dlZEJ5SXRlcmF0b3IoX2ZpcnN0LCBfc2Vjb25kKTsKCiAgaW50IGdldCBsZW5ndGggPT4gX2ZpcnN0Lmxlbmd0aCArIF9zZWNvbmQubGVuZ3RoOwogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2ZpcnN0LmlzRW1wdHkgJiYgX3NlY29uZC5pc0VtcHR5OwogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX2ZpcnN0LmlzTm90RW1wdHkgfHwgX3NlY29uZC5pc05vdEVtcHR5OwoKICAvLyBNYXkgYmUgbW9yZSBlZmZpY2llbnQgaWYgZWl0aGVyIGl0ZXJhYmxlIGlzIGEgU2V0LgogIGJvb2wgY29udGFpbnMoT2JqZWN0IHZhbHVlKSA9PgogICAgICBfZmlyc3QuY29udGFpbnModmFsdWUpIHx8IF9zZWNvbmQuY29udGFpbnModmFsdWUpOwoKICBFIGdldCBmaXJzdCB7CiAgICB2YXIgaXRlcmF0b3IgPSBfZmlyc3QuaXRlcmF0b3I7CiAgICBpZiAoaXRlcmF0b3IubW92ZU5leHQoKSkgcmV0dXJuIGl0ZXJhdG9yLmN1cnJlbnQ7CiAgICByZXR1cm4gX3NlY29uZC5maXJzdDsKICB9CgogIEUgZ2V0IGxhc3QgewogICAgdmFyIGl0ZXJhdG9yID0gX3NlY29uZC5pdGVyYXRvcjsKICAgIGlmIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgIEUgbGFzdCA9IGl0ZXJhdG9yLmN1cnJlbnQ7CiAgICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSBsYXN0ID0gaXRlcmF0b3IuY3VycmVudDsKICAgICAgcmV0dXJuIGxhc3Q7CiAgICB9CiAgICByZXR1cm4gX2ZpcnN0Lmxhc3Q7CiAgfQoKICAvLyBJZiBsaW5lYXIgc2VxdWVuY2VzIG9mIGBmb2xsb3dlZEJ5YCBiZWNvbWVzIGFuIGlzc3VlLCB3ZSBjYW4gZmxhdHRlbgogIC8vIGludG8gYSBsaXN0IG9mIGl0ZXJhYmxlcyBpbnN0ZWFkIG9mIGEgdHJlZSBvciBzcGluZS4KfQoKY2xhc3MgRWZmaWNpZW50TGVuZ3RoRm9sbG93ZWRCeUl0ZXJhYmxlPEU+IGV4dGVuZHMgRm9sbG93ZWRCeUl0ZXJhYmxlPEU+CiAgICBpbXBsZW1lbnRzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEU+IHsKICBFZmZpY2llbnRMZW5ndGhGb2xsb3dlZEJ5SXRlcmFibGUoCiAgICAgIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEU+IGZpcnN0LCBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxFPiBzZWNvbmQpCiAgICAgIDogc3VwZXIoZmlyc3QsIHNlY29uZCk7CgogIEl0ZXJhYmxlPEU+IHNraXAoaW50IGNvdW50KSB7CiAgICBpbnQgZmlyc3RMZW5ndGggPSBfZmlyc3QubGVuZ3RoOwogICAgaWYgKGNvdW50ID49IGZpcnN0TGVuZ3RoKSByZXR1cm4gX3NlY29uZC5za2lwKGNvdW50IC0gZmlyc3RMZW5ndGgpOwogICAgcmV0dXJuIG5ldyBFZmZpY2llbnRMZW5ndGhGb2xsb3dlZEJ5SXRlcmFibGU8RT4oCiAgICAgICAgX2ZpcnN0LnNraXAoY291bnQpLCBfc2Vjb25kKTsKICB9CgogIEl0ZXJhYmxlPEU+IHRha2UoaW50IGNvdW50KSB7CiAgICBpbnQgZmlyc3RMZW5ndGggPSBfZmlyc3QubGVuZ3RoOwogICAgaWYgKGNvdW50IDw9IGZpcnN0TGVuZ3RoKSByZXR1cm4gX2ZpcnN0LnRha2UoY291bnQpOwogICAgcmV0dXJuIG5ldyBFZmZpY2llbnRMZW5ndGhGb2xsb3dlZEJ5SXRlcmFibGU8RT4oCiAgICAgICAgX2ZpcnN0LCBfc2Vjb25kLnRha2UoY291bnQgLSBmaXJzdExlbmd0aCkpOwogIH0KCiAgRSBlbGVtZW50QXQoaW50IGluZGV4KSB7CiAgICBpbnQgZmlyc3RMZW5ndGggPSBfZmlyc3QubGVuZ3RoOwogICAgaWYgKGluZGV4IDwgZmlyc3RMZW5ndGgpIHJldHVybiBfZmlyc3QuZWxlbWVudEF0KGluZGV4KTsKICAgIHJldHVybiBfc2Vjb25kLmVsZW1lbnRBdChpbmRleCAtIGZpcnN0TGVuZ3RoKTsKICB9CgogIEUgZ2V0IGZpcnN0IHsKICAgIGlmIChfZmlyc3QuaXNOb3RFbXB0eSkgcmV0dXJuIF9maXJzdC5maXJzdDsKICAgIHJldHVybiBfc2Vjb25kLmZpcnN0OwogIH0KCiAgRSBnZXQgbGFzdCB7CiAgICBpZiAoX3NlY29uZC5pc05vdEVtcHR5KSByZXR1cm4gX3NlY29uZC5sYXN0OwogICAgcmV0dXJuIF9maXJzdC5sYXN0OwogIH0KfQoKY2xhc3MgRm9sbG93ZWRCeUl0ZXJhdG9yPEU+IGltcGxlbWVudHMgSXRlcmF0b3I8RT4gewogIEl0ZXJhdG9yPEU+IF9jdXJyZW50SXRlcmF0b3I7CiAgSXRlcmFibGU8RT4gX25leHRJdGVyYWJsZTsKCiAgRm9sbG93ZWRCeUl0ZXJhdG9yKEl0ZXJhYmxlPEU+IGZpcnN0LCB0aGlzLl9uZXh0SXRlcmFibGUpCiAgICAgIDogX2N1cnJlbnRJdGVyYXRvciA9IGZpcnN0Lml0ZXJhdG9yOwoKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKF9jdXJyZW50SXRlcmF0b3IubW92ZU5leHQoKSkgcmV0dXJuIHRydWU7CiAgICBpZiAoX25leHRJdGVyYWJsZSAhPSBudWxsKSB7CiAgICAgIF9jdXJyZW50SXRlcmF0b3IgPSBfbmV4dEl0ZXJhYmxlLml0ZXJhdG9yOwogICAgICBfbmV4dEl0ZXJhYmxlID0gbnVsbDsKICAgICAgcmV0dXJuIF9jdXJyZW50SXRlcmF0b3IubW92ZU5leHQoKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEUgZ2V0IGN1cnJlbnQgPT4gX2N1cnJlbnRJdGVyYXRvci5jdXJyZW50Owp9CgpjbGFzcyBXaGVyZVR5cGVJdGVyYWJsZTxUPiBleHRlbmRzIEl0ZXJhYmxlPFQ+IHsKICBmaW5hbCBJdGVyYWJsZTxPYmplY3Q+IF9zb3VyY2U7CiAgV2hlcmVUeXBlSXRlcmFibGUodGhpcy5fc291cmNlKTsKICBJdGVyYXRvcjxUPiBnZXQgaXRlcmF0b3IgPT4gbmV3IFdoZXJlVHlwZUl0ZXJhdG9yPFQ+KF9zb3VyY2UuaXRlcmF0b3IpOwp9CgpjbGFzcyBXaGVyZVR5cGVJdGVyYXRvcjxUPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPFQ+IHsKICBmaW5hbCBJdGVyYXRvcjxPYmplY3Q+IF9zb3VyY2U7CiAgV2hlcmVUeXBlSXRlcmF0b3IodGhpcy5fc291cmNlKTsKICBib29sIG1vdmVOZXh0KCkgewogICAgd2hpbGUgKF9zb3VyY2UubW92ZU5leHQoKSkgewogICAgICBpZiAoX3NvdXJjZS5jdXJyZW50IGlzIFQpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgVCBnZXQgY3VycmVudCA9PiBfc291cmNlLmN1cnJlbnQ7Cn0KCi8qKgogKiBDcmVhdGVzIGVycm9ycyB0aHJvdyBieSBbSXRlcmFibGVdIHdoZW4gdGhlIGVsZW1lbnQgY291bnQgaXMgd3JvbmcuCiAqLwphYnN0cmFjdCBjbGFzcyBJdGVyYWJsZUVsZW1lbnRFcnJvciB7CiAgLyoqIEVycm9yIHRocm93biB0aHJvd24gYnksIGUuZy4sIFtJdGVyYWJsZS5maXJzdF0gd2hlbiB0aGVyZSBpcyBubyByZXN1bHQuICovCiAgc3RhdGljIFN0YXRlRXJyb3Igbm9FbGVtZW50KCkgPT4gbmV3IFN0YXRlRXJyb3IoIk5vIGVsZW1lbnQiKTsKICAvKiogRXJyb3IgdGhyb3duIGJ5LCBlLmcuLCBbSXRlcmFibGUuc2luZ2xlXSBpZiB0aGVyZSBhcmUgdG9vIG1hbnkgcmVzdWx0cy4gKi8KICBzdGF0aWMgU3RhdGVFcnJvciB0b29NYW55KCkgPT4gbmV3IFN0YXRlRXJyb3IoIlRvbyBtYW55IGVsZW1lbnRzIik7CiAgLyoqIEVycm9yIHRocm93biBieSwgZS5nLiwgW0xpc3Quc2V0UmFuZ2VdIGlmIHRoZXJlIGFyZSB0b28gZmV3IGVsZW1lbnRzLiAqLwogIHN0YXRpYyBTdGF0ZUVycm9yIHRvb0ZldygpID0+IG5ldyBTdGF0ZUVycm9yKCJUb28gZmV3IGVsZW1lbnRzIik7Cn0Kg4MATk48ARgBBEUcBEAjBjUFSxMGEgIBBEsDSxkERBIWARgBOQEpHiccIzUIBgQBIwEQPRkEAQ89IgQBET06GQQBIh4nMCM1CAYSBAElHictIzUIBhEEASMeJysjNQgGEgQBNR4nICkjNQgGKSwEATQeLCApIzUIBiksBAE2HhQdJyAbGjAKGxkIIzUIBiIpLAQBKR4eIigjNQg1KSEkJTcKCCANMCkkJTcKCCAGBAFAAU8BLB49HCcsIzUIBhIEAUUeHicsIzUIBhIEAUwBSAFJAUgBKhQUJw0kBicgBhMEARMiJyAGEwQCATNGFDkaAUQyIDgjRggGBAEWI0YZBAEYIygTBAETIyQ6HgYiBAEbKS84BisEASAxIzwlBkYEASAxIEgNIy5ABgQBKhggSB4gFUsnMk8GEwQCAQQ3AzxBDgQvHxUODgElHiMUAR0BHhQjHTgGHBcUBiwOEQQCASoBMR8iAUYvSgY7BAEtAVABPiYpATkmJCg8AgFHLEslAgExDh8iASsBFCAoEwYVEgQBHQIBBEMDRgQ5HSIBLQEkOgIBLgEtHyEBKgFMAUZNAgEtHyEBKgEUIyMVCAYSBAEmAgE8ATEfIgErAVACATQfIkVFHjkOASsBHQEUMSwXIk4tIjwPFggGKhEEAgEsHxgBPjg5L0YGNwQBMwEdQAQCAT0sQyYBEys4GwQCASwfEgEyHQQBFBIbIwYVEgQBEiUeBAIBMR8hAS4BHT0EAgExHyEcAS4BFCM7GhQGEQQBEiIeBAIBLB8YATovQgZABAEzASBOBAEdQAQCAT0sSU8EAUEiARMwJA4EASAxNQQCAR0uLxACASwfEgEyHQQBFD8UIQQBJgIBMR8hAS4BHT0EAgExHyEcAS4BFBgaJTEIBiEEASYCAQQgBDwZATUBKgEcARcBECwEAQ8sBAERLAQBGzYEASoBLAErATUpLAQBNCksBAE2KSwEAS4BMwFAASwsBAFFGQQBIDERBAE3ASAxEQQBNwFOASICASIwGRwZAgEyHB0xAS0+MEYGNQQBRwE0OUIBOCE5ARAkNhoEAQ8lHyE7EwYYBAFKOgIBSSwlSx4BICVINSYEASAlOTU0BAEbJT0zBAEQMBoEAQ8xGAQCATUgHQE8KwEUMiExHCoGEgQBLQIBMSIjSgIBNCIjFCEtBhIEASQCAQRHBCZRQVFGT0QCARxkYXJ0Ol9pbnRlcm5hbC9pdGVyYWJsZS5kYXJ0M29yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvaW50ZXJuYWxfcGF0Y2guZGFydI++Ly8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBOb3RlOiB0aGUgVk0gY29uY2F0ZW5hdGVzIGFsbCBwYXRjaCBmaWxlcyBpbnRvIGEgc2luZ2xlIHBhdGNoIGZpbGUuIFRoaXMKLy8vIGZpbGUgaXMgdGhlIGZpcnN0IHBhdGNoIGluICJkYXJ0Ol9pbnRlcm5hbCIgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBpbXBvcnRzCi8vLyB1c2VkIGJ5IHBhdGNoZXMgb2YgdGhhdCBsaWJyYXJ5LiBXZSBwbGFuIHRvIGNoYW5nZSB0aGlzIHdoZW4gd2UgaGF2ZSBhCi8vLyBzaGFyZWQgZnJvbnQgZW5kIGFuZCBzaW1wbHkgdXNlIHBhcnRzLgoKaW1wb3J0ICJkYXJ0OmNvcmUiIGhpZGUgU3ltYm9sOwoKaW1wb3J0ICJkYXJ0OnR5cGVkX2RhdGEiIHNob3cgSW50MzJMaXN0OwoKLy8vIFRoZXNlIGFyZSB0aGUgYWRkaXRpb25hbCBwYXJ0cyBvZiB0aGlzIHBhdGNoIGxpYnJhcnk6Ci8vIHBhcnQgImNsYXNzX2lkX2Zhc3RhLmRhcnQiOwovLyBwYXJ0ICJwcmludF9wYXRjaC5kYXJ0IjsKLy8gcGFydCAic3ltYm9sX3BhdGNoLmRhcnQiOwoKQHBhdGNoCkxpc3Q8VD4gbWFrZUxpc3RGaXhlZExlbmd0aDxUPihMaXN0PFQ+IGdyb3dhYmxlTGlzdCkKICAgIG5hdGl2ZSAiSW50ZXJuYWxfbWFrZUxpc3RGaXhlZExlbmd0aCI7CgpAcGF0Y2gKTGlzdDxUPiBtYWtlRml4ZWRMaXN0VW5tb2RpZmlhYmxlPFQ+KExpc3Q8VD4gZml4ZWRMZW5ndGhMaXN0KQogICAgbmF0aXZlICJJbnRlcm5hbF9tYWtlRml4ZWRMaXN0VW5tb2RpZmlhYmxlIjsKCkBwYXRjaApPYmplY3QgZXh0cmFjdFR5cGVBcmd1bWVudHM8VD4oVCBpbnN0YW5jZSwgRnVuY3Rpb24gZXh0cmFjdCkKICAgIG5hdGl2ZSAiSW50ZXJuYWxfZXh0cmFjdFR5cGVBcmd1bWVudHMiOwoKY2xhc3MgVk1MaWJyYXJ5SG9va3MgewogIC8vIEV4YW1wbGU6ICJkYXJ0Omlzb2xhdGUgX1RpbWVyLl9mYWN0b3J5IgogIHN0YXRpYyB2YXIgdGltZXJGYWN0b3J5OwoKICAvLyBFeGFtcGxlOiAiZGFydDppbyBfRXZlbnRIYW5kbGVyLl9zZW5kRGF0YSIKICBzdGF0aWMgdmFyIGV2ZW50SGFuZGxlclNlbmREYXRhOwoKICAvLyBBIG51bGxhcnkgY2xvc3VyZSB0aGF0IGFuc3dlcnMgdGhlIGN1cnJlbnQgY2xvY2sgdmFsdWUgaW4gbWlsbGlzZWNvbmRzLgogIC8vIEV4YW1wbGU6ICJkYXJ0OmlvIF9FdmVudEhhbmRsZXIuX3RpbWVyTWlsbGlzZWNvbmRDbG9jayIKICBzdGF0aWMgdmFyIHRpbWVyTWlsbGlzZWNvbmRDbG9jazsKCiAgLy8gSW1wbGVtZW50YXRpb24gb2YgUmVzb3VyY2UucmVhZEFzQnl0ZXMuCiAgc3RhdGljIHZhciByZXNvdXJjZVJlYWRBc0J5dGVzOwoKICAvLyBJbXBsZW1lbnRhdGlvbiBvZiBwYWNrYWdlIHJvb3QvbWFwIHByb3Zpc2lvbi4KICBzdGF0aWMgdmFyIHBhY2thZ2VSb290U3RyaW5nOwogIHN0YXRpYyB2YXIgcGFja2FnZUNvbmZpZ1N0cmluZzsKICBzdGF0aWMgdmFyIHBhY2thZ2VSb290VXJpRnV0dXJlOwogIHN0YXRpYyB2YXIgcGFja2FnZUNvbmZpZ1VyaUZ1dHVyZTsKICBzdGF0aWMgdmFyIHJlc29sdmVQYWNrYWdlVXJpRnV0dXJlOwoKICBzdGF0aWMgdmFyIF9jb21wdXRlU2NyaXB0VXJpOwogIHN0YXRpYyB2YXIgX2NhY2hlZFNjcmlwdDsKICBzdGF0aWMgc2V0IHBsYXRmb3JtU2NyaXB0KHZhciBmKSB7CiAgICBfY29tcHV0ZVNjcmlwdFVyaSA9IGY7CiAgICBfY2FjaGVkU2NyaXB0ID0gbnVsbDsKICB9CgogIHN0YXRpYyBnZXQgcGxhdGZvcm1TY3JpcHQgewogICAgaWYgKF9jYWNoZWRTY3JpcHQgPT0gbnVsbCAmJiBfY29tcHV0ZVNjcmlwdFVyaSAhPSBudWxsKSB7CiAgICAgIF9jYWNoZWRTY3JpcHQgPSBfY29tcHV0ZVNjcmlwdFVyaSgpOwogICAgfQogICAgcmV0dXJuIF9jYWNoZWRTY3JpcHQ7CiAgfQp9CgpmaW5hbCBib29sIGlzNjRCaXQgPSBfaW5xdWlyZUlzNjRCaXQoKTsKCmJvb2wgX2lucXVpcmVJczY0Qml0KCkgbmF0aXZlICJJbnRlcm5hbF9pbnF1aXJlSXM2NEJpdCI7CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQpAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKYm9vbCBfY2xhc3NSYW5nZUNoZWNrKGludCBjaWQsIGludCBsb3dlckxpbWl0LCBpbnQgdXBwZXJMaW1pdCkgewogIHJldHVybiBjaWQgPj0gbG93ZXJMaW1pdCAmJiBjaWQgPD0gdXBwZXJMaW1pdDsKfQoKLy8gVXRpbGl0eSBjbGFzcyBub3cgb25seSB1c2VkIGJ5IHRoZSBWTS4KY2xhc3MgTGlzdHMgewogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHN0YXRpYyB2b2lkIGNvcHkoTGlzdCBzcmMsIGludCBzcmNTdGFydCwgTGlzdCBkc3QsIGludCBkc3RTdGFydCwgaW50IGNvdW50KSB7CiAgICBpZiAoc3JjU3RhcnQgPCBkc3RTdGFydCkgewogICAgICBmb3IgKGludCBpID0gc3JjU3RhcnQgKyBjb3VudCAtIDEsIGogPSBkc3RTdGFydCArIGNvdW50IC0gMTsKICAgICAgICAgIGkgPj0gc3JjU3RhcnQ7CiAgICAgICAgICBpLS0sIGotLSkgewogICAgICAgIGRzdFtqXSA9IHNyY1tpXTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZm9yIChpbnQgaSA9IHNyY1N0YXJ0LCBqID0gZHN0U3RhcnQ7IGkgPCBzcmNTdGFydCArIGNvdW50OyBpKyssIGorKykgewogICAgICAgIGRzdFtqXSA9IHNyY1tpXTsKICAgICAgfQogICAgfQogIH0KfQoKLy8gUHJlcGVuZCB0aGUgcGFyZW50IHR5cGUgYXJndW1lbnRzIChtYXliZSBudWxsKSBvZiBsZW5ndGggJ3BhcmVudExlbicgdG8gdGhlCi8vIGZ1bmN0aW9uIHR5cGUgYXJndW1lbnRzIChtYXkgYmUgbnVsbCkuIFRoZSByZXN1bHQgaXMgbnVsbCBpZiBib3RoIGlucHV0Ci8vIHZlY3RvcnMgYXJlIG51bGwgb3IgaXMgYSBuZXdseSBhbGxvY2F0ZWQgYW5kIGNhbm9uaWNhbGl6ZWQgdmVjdG9yIG9mIGxlbmd0aAovLyAndG90YWxMZW4nLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKX3ByZXBlbmRUeXBlQXJndW1lbnRzKGZ1bmN0aW9uVHlwZUFyZ3VtZW50cywgcGFyZW50VHlwZUFyZ3VtZW50cywgcGFyZW50TGVuLAogICAgdG90YWxMZW4pIG5hdGl2ZSAiSW50ZXJuYWxfcHJlcGVuZFR5cGVBcmd1bWVudHMiOwoKLy8gQ2hlY2sgdGhhdCBhIHNldCBvZiB0eXBlIGFyZ3VtZW50cyBzYXRpc2Z5IHRoZSB0eXBlIHBhcmFtZXRlciBib3VuZHMgb24gYQovLyBjbG9zdXJlLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKX2JvdW5kc0NoZWNrRm9yUGFydGlhbEluc3RhbnRpYXRpb24oY2xvc3VyZSwgdHlwZUFyZ3MpCiAgICBuYXRpdmUgIkludGVybmFsX2JvdW5kc0NoZWNrRm9yUGFydGlhbEluc3RhbnRpYXRpb24iOwoKLy8gQ2FsbGVkIGJ5IElSUmVnRXhwTWFjcm9Bc3NlbWJsZXI6Okdyb3dTdGFjay4KSW50MzJMaXN0IF9ncm93UmVnRXhwU3RhY2soSW50MzJMaXN0IHN0YWNrKSB7CiAgZmluYWwgbmV3U3RhY2sgPSBuZXcgSW50MzJMaXN0KHN0YWNrLmxlbmd0aCAqIDIpOwogIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhY2subGVuZ3RoOyBpKyspIHsKICAgIG5ld1N0YWNrW2ldID0gc3RhY2tbaV07CiAgfQogIHJldHVybiBuZXdTdGFjazsKfQoKLy8gVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBza2lwIGltcGxpY2l0IG9yIGV4cGxpY2l0IGNoZWNrZWQgZG93biBjYXN0cyBpbgovLyB0aGUgcGFydHMgb2YgdGhlIGNvcmUgbGlicmFyeSBpbXBsZW1lbnRhdGlvbiB3aGVyZSB3ZSBrbm93IGJ5IGNvbnN0cnVjdGlvbiB0aGUKLy8gdHlwZSBvZiBhIHZhbHVlLgovLwovLyBJbXBvcnRhbnQ6IHRoaXMgaXMgdW5zYWZlIGFuZCBtdXN0IGJlIHVzZWQgd2l0aCBjYXJlLgpUIHVuc2FmZUNhc3Q8VD4oT2JqZWN0IHYpIG5hdGl2ZSAiSW50ZXJuYWxfdW5zYWZlQ2FzdCI7Cn4ATk48AU1PSysBIAEpATofHB0BBzUrAQc+MQEHPSwBFy0bATAjAU09JAEtIgEzICIjJSYBIBwlGxoEAR4+KwYaBAIBKAE5ASImHEExAgEqDh5QH0MZFhkIDU0ZCAYEAgFPS08PIk02AU0MIjc6ATAuNCscBBMCAVBSFAM5OAEoZGFydDpfaW50ZXJuYWwtcGF0Y2gvaW50ZXJuYWxfcGF0Y2guZGFydDNvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL2NsYXNzX2lkX2Zhc3RhLmRhcnSDpS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJpbnRlcm5hbF9wYXRjaC5kYXJ0IjsKCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgQ2xhc3NJRCB7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIHN0YXRpYyBpbnQgZ2V0SUQoT2JqZWN0IHZhbHVlKSBuYXRpdmUgIkNsYXNzSURfZ2V0SUQiOwoKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgc3RhdGljIGZpbmFsIGludCBjaWRBcnJheSA9IDA7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHN0YXRpYyBmaW5hbCBpbnQgY2lkRXh0ZXJuYWxPbmVCeXRlU3RyaW5nID0gMDsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgc3RhdGljIGZpbmFsIGludCBjaWRHcm93YWJsZU9iamVjdEFycmF5ID0gMDsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgc3RhdGljIGZpbmFsIGludCBjaWRJbW11dGFibGVBcnJheSA9IDA7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHN0YXRpYyBmaW5hbCBpbnQgY2lkT25lQnl0ZVN0cmluZyA9IDA7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHN0YXRpYyBmaW5hbCBpbnQgY2lkVHdvQnl0ZVN0cmluZyA9IDA7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHN0YXRpYyBmaW5hbCBpbnQgY2lkVWludDhBcnJheVZpZXcgPSAwOwp9Ch0ATk48ASIBGhAkNDkBHCEcMRwvHCocKRwpHCoCAShkYXJ0Ol9pbnRlcm5hbC1wYXRjaC9jbGFzc19pZF9mYXN0YS5kYXJ0L29yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pbnRlcm5hbC9wYXRjaC5kYXJ0gT0vLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiAiZGFydDpfaW50ZXJuYWwiOwoKY2xhc3MgX1BhdGNoIHsKICBjb25zdCBfUGF0Y2goKTsKfQoKY29uc3QgX1BhdGNoIHBhdGNoID0gY29uc3QgX1BhdGNoKCk7Cg0ATk48ARoBDxICASUBH2RhcnQ6X2ludGVybmFsLXBhdGNoL3BhdGNoLmRhcnQ0b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2ludGVybmFsL2FzeW5jX2Nhc3QuZGFydI1gLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5faW50ZXJuYWw7CgovLyBDYXN0aW5nIHdyYXBwZXJzIGZvciBhc3luY2hyb25vdXMgY2xhc3Nlcy4KCmNsYXNzIENhc3RTdHJlYW08UywgVD4gZXh0ZW5kcyBTdHJlYW08VD4gewogIGZpbmFsIFN0cmVhbTxTPiBfc291cmNlOwogIENhc3RTdHJlYW0odGhpcy5fc291cmNlKTsKICBib29sIGdldCBpc0Jyb2FkY2FzdCA9PiBfc291cmNlLmlzQnJvYWRjYXN0OwoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gbGlzdGVuKHZvaWQgb25EYXRhKFQgZGF0YSksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICByZXR1cm4gbmV3IENhc3RTdHJlYW1TdWJzY3JpcHRpb248UywgVD4oCiAgICAgICAgX3NvdXJjZS5saXN0ZW4obnVsbCwgb25Eb25lOiBvbkRvbmUsIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpKQogICAgICAuLm9uRGF0YShvbkRhdGEpCiAgICAgIC4ub25FcnJvcihvbkVycm9yKTsKICB9CgogIFN0cmVhbTxSPiBjYXN0PFI+KCkgPT4gbmV3IENhc3RTdHJlYW08UywgUj4oX3NvdXJjZSk7Cn0KCmNsYXNzIENhc3RTdHJlYW1TdWJzY3JpcHRpb248UywgVD4gaW1wbGVtZW50cyBTdHJlYW1TdWJzY3JpcHRpb248VD4gewogIGZpbmFsIFN0cmVhbVN1YnNjcmlwdGlvbjxTPiBfc291cmNlOwoKICAvLy8gWm9uZSB3aGVyZSBsaXN0ZW4gd2FzIGNhbGxlZC4KICBmaW5hbCBab25lIF96b25lID0gWm9uZS5jdXJyZW50OwoKICAvLy8gVXNlcidzIGRhdGEgaGFuZGxlci4gTWF5IGJlIG51bGwuCiAgdm9pZCBGdW5jdGlvbihUKSBfaGFuZGxlRGF0YTsKCiAgLy8vIENvcHkgb2YgX3NvdXJjZSdzIGhhbmRsZUVycm9yIHNvIHdlIGNhbiByZXBvcnQgZXJyb3JzIGluIG9uRGF0YS4KICAvLy8gTWF5IGJlIG51bGwuCiAgRnVuY3Rpb24gX2hhbmRsZUVycm9yOwoKICBDYXN0U3RyZWFtU3Vic2NyaXB0aW9uKHRoaXMuX3NvdXJjZSkgewogICAgX3NvdXJjZS5vbkRhdGEoX29uRGF0YSk7CiAgfQoKICBGdXR1cmUgY2FuY2VsKCkgPT4gX3NvdXJjZS5jYW5jZWwoKTsKCiAgdm9pZCBvbkRhdGEodm9pZCBoYW5kbGVEYXRhKFQgZGF0YSkpIHsKICAgIF9oYW5kbGVEYXRhID0gaGFuZGxlRGF0YSA9PSBudWxsCiAgICAgICAgPyBudWxsCiAgICAgICAgOiBfem9uZS5yZWdpc3RlclVuYXJ5Q2FsbGJhY2s8ZHluYW1pYywgVD4oaGFuZGxlRGF0YSk7CiAgfQoKICB2b2lkIG9uRXJyb3IoRnVuY3Rpb24gaGFuZGxlRXJyb3IpIHsKICAgIF9zb3VyY2Uub25FcnJvcihoYW5kbGVFcnJvcik7CiAgICBpZiAoaGFuZGxlRXJyb3IgPT0gbnVsbCkgewogICAgICBfaGFuZGxlRXJyb3IgPSBudWxsOwogICAgfSBlbHNlIGlmIChoYW5kbGVFcnJvciBpcyBGdW5jdGlvbihOdWxsLCBOdWxsKSkgewogICAgICBfaGFuZGxlRXJyb3IgPSBfem9uZQogICAgICAgICAgLnJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2s8ZHluYW1pYywgT2JqZWN0LCBTdGFja1RyYWNlPihoYW5kbGVFcnJvcik7CiAgICB9IGVsc2UgewogICAgICBfaGFuZGxlRXJyb3IgPSBfem9uZS5yZWdpc3RlclVuYXJ5Q2FsbGJhY2s8ZHluYW1pYywgT2JqZWN0PihoYW5kbGVFcnJvcik7CiAgICB9CiAgfQoKICB2b2lkIG9uRG9uZSh2b2lkIGhhbmRsZURvbmUoKSkgewogICAgX3NvdXJjZS5vbkRvbmUoaGFuZGxlRG9uZSk7CiAgfQoKICB2b2lkIF9vbkRhdGEoUyBkYXRhKSB7CiAgICBpZiAoX2hhbmRsZURhdGEgPT0gbnVsbCkgcmV0dXJuOwogICAgVCB0YXJnZXREYXRhOwogICAgdHJ5IHsKICAgICAgdGFyZ2V0RGF0YSA9IGRhdGEgYXMgVDsKICAgIH0gY2F0Y2ggKGVycm9yLCBzdGFjaykgewogICAgICBpZiAoX2hhbmRsZUVycm9yID09IG51bGwpIHsKICAgICAgICBfem9uZS5oYW5kbGVVbmNhdWdodEVycm9yKGVycm9yLCBzdGFjayk7CiAgICAgIH0gZWxzZSBpZiAoX2hhbmRsZUVycm9yIGlzIEZ1bmN0aW9uKE51bGwsIE51bGwpKSB7CiAgICAgICAgX3pvbmUucnVuQmluYXJ5R3VhcmRlZChfaGFuZGxlRXJyb3IsIGVycm9yLCBzdGFjayk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX3pvbmUucnVuVW5hcnlHdWFyZGVkKF9oYW5kbGVFcnJvciwgZXJyb3IpOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIF96b25lLnJ1blVuYXJ5R3VhcmRlZChfaGFuZGxlRGF0YSwgdGFyZ2V0RGF0YSk7CiAgfQoKICB2b2lkIHBhdXNlKFtGdXR1cmUgcmVzdW1lU2lnbmFsXSkgewogICAgX3NvdXJjZS5wYXVzZShyZXN1bWVTaWduYWwpOwogIH0KCiAgdm9pZCByZXN1bWUoKSB7CiAgICBfc291cmNlLnJlc3VtZSgpOwogIH0KCiAgYm9vbCBnZXQgaXNQYXVzZWQgPT4gX3NvdXJjZS5pc1BhdXNlZDsKCiAgRnV0dXJlPEU+IGFzRnV0dXJlPEU+KFtFIGZ1dHVyZVZhbHVlXSkgPT4gX3NvdXJjZS5hc0Z1dHVyZTxFPihmdXR1cmVWYWx1ZSk7Cn0KCmNsYXNzIENhc3RTdHJlYW1UcmFuc2Zvcm1lcjxTUywgU1QsIFRTLCBUVD4KICAgIGV4dGVuZHMgU3RyZWFtVHJhbnNmb3JtZXJCYXNlPFRTLCBUVD4gewogIGZpbmFsIFN0cmVhbVRyYW5zZm9ybWVyPFNTLCBTVD4gX3NvdXJjZTsKICBDYXN0U3RyZWFtVHJhbnNmb3JtZXIodGhpcy5fc291cmNlKTsKCiAgU3RyZWFtVHJhbnNmb3JtZXI8UlMsIFJUPiBjYXN0PFJTLCBSVD4oKSA9PgogICAgICBuZXcgQ2FzdFN0cmVhbVRyYW5zZm9ybWVyPFNTLCBTVCwgUlMsIFJUPihfc291cmNlKTsKICBTdHJlYW08VFQ+IGJpbmQoU3RyZWFtPFRTPiBzdHJlYW0pID0+CiAgICAgIF9zb3VyY2UuYmluZChzdHJlYW0uY2FzdDxTUz4oKSkuY2FzdDxUVD4oKTsKfQoKY2xhc3MgQ2FzdENvbnZlcnRlcjxTUywgU1QsIFRTLCBUVD4gZXh0ZW5kcyBDb252ZXJ0ZXI8VFMsIFRUPiB7CiAgZmluYWwgQ29udmVydGVyPFNTLCBTVD4gX3NvdXJjZTsKICBDYXN0Q29udmVydGVyKHRoaXMuX3NvdXJjZSk7CgogIFRUIGNvbnZlcnQoVFMgaW5wdXQpID0+IF9zb3VyY2UuY29udmVydChpbnB1dCBhcyBTUykgYXMgVFQ7CgogIC8vIGNhc3QgaXMgaW5oZXJpdGVkIGZyb20gQ29udmVydGVyLgoKICBTdHJlYW08VFQ+IGJpbmQoU3RyZWFtPFRTPiBzdHJlYW0pID0+CiAgICAgIF9zb3VyY2UuYmluZChzdHJlYW0uY2FzdDxTUz4oKSkuY2FzdDxUVD4oKTsKCiAgQ29udmVydGVyPFJTLCBSVD4gY2FzdDxSUywgUlQ+KCkgPT4KICAgICAgbmV3IENhc3RDb252ZXJ0ZXI8U1MsIFNULCBSUywgUlQ+KF9zb3VyY2UpOwp9CnsATk48ARgBLgErGxwvATQ/LUwXGgQBOAIBRicBJCMBKCABRxMZASkdBAEnASklDz8EASciHxs2G00NUAYEASMgBAEZJRIKHh0iMTk8DzQIDgY0BAEmIQQBEhYEASkBTgIBLCwrJwEuOigyAgFAIx8BPgEnASgyASYyAgEeZGFydDpfaW50ZXJuYWwvYXN5bmNfY2FzdC5kYXJ0Lm9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pbnRlcm5hbC9jYXN0LmRhcnSmSi8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuX2ludGVybmFsOwoKLy8gQ2FzdGluZyB3cmFwcGVycyBmb3IgY29sbGVjdGlvbiBjbGFzc2VzLgoKYWJzdHJhY3QgY2xhc3MgX0Nhc3RJdGVyYWJsZUJhc2U8UywgVD4gZXh0ZW5kcyBJdGVyYWJsZTxUPiB7CiAgSXRlcmFibGU8Uz4gZ2V0IF9zb3VyY2U7CgogIEl0ZXJhdG9yPFQ+IGdldCBpdGVyYXRvciA9PiBuZXcgQ2FzdEl0ZXJhdG9yPFMsIFQ+KF9zb3VyY2UuaXRlcmF0b3IpOwoKICAvLyBUaGUgZm9sbG93aW5nIG1lbWJlcnMgdXNlIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9uIHRoZQogIC8vIHRocm93aW5nIGl0ZXJhdG9yLiBUaGVzZSBhcmUgYWxsIG9wZXJhdGlvbnMgdGhhdCBoYXZlIG5vIG1vcmUgZWZmaWNpZW50CiAgLy8gaW1wbGVtZW50YXRpb24gdGhhbiB2aXNpdGluZyBldmVyeSBlbGVtZW50IGluIG9yZGVyLAogIC8vIG9yIHRoYXQgaGFzIG5vIG1vcmUgZWZmaWNpZW50IHdheSB0byBnZXQgdGhlIGNvcnJlY3QgdHlwZSAodG9MaXN0LCB0b1NldCkuCiAgLy8KICAvLyAqIG1hcAogIC8vICogd2hlcmUKICAvLyAqIGV4cGFuZAogIC8vICogZm9yRWFjaAogIC8vICogcmVkdWNlCiAgLy8gKiBmb2xkCiAgLy8gKiBldmVyeQogIC8vICogYW55CiAgLy8gKiBqb2luCiAgLy8gKiB0b0xpc3QKICAvLyAqIHRvU2V0CiAgLy8gKiBza2lwV2hpbGUKICAvLyAqIHRha2VXaGlsZQogIC8vICogZmlyc3RXaGVyZQogIC8vICogc2luZ2xlV2hlcmUKCiAgaW50IGdldCBsZW5ndGggPT4gX3NvdXJjZS5sZW5ndGg7CiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfc291cmNlLmlzRW1wdHk7CiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfc291cmNlLmlzTm90RW1wdHk7CgogIEl0ZXJhYmxlPFQ+IHNraXAoaW50IGNvdW50KSA9PiBuZXcgQ2FzdEl0ZXJhYmxlPFMsIFQ+KF9zb3VyY2Uuc2tpcChjb3VudCkpOwogIEl0ZXJhYmxlPFQ+IHRha2UoaW50IGNvdW50KSA9PiBuZXcgQ2FzdEl0ZXJhYmxlPFMsIFQ+KF9zb3VyY2UudGFrZShjb3VudCkpOwoKICBUIGVsZW1lbnRBdChpbnQgaW5kZXgpID0+IF9zb3VyY2UuZWxlbWVudEF0KGluZGV4KSBhcyBUOwogIFQgZ2V0IGZpcnN0ID0+IF9zb3VyY2UuZmlyc3QgYXMgVDsKICBUIGdldCBsYXN0ID0+IF9zb3VyY2UubGFzdCBhcyBUOwogIFQgZ2V0IHNpbmdsZSA9PiBfc291cmNlLnNpbmdsZSBhcyBUOwoKICBib29sIGNvbnRhaW5zKE9iamVjdCBvdGhlcikgPT4gX3NvdXJjZS5jb250YWlucyhvdGhlcik7CgogIC8vIE1pZ2h0IGJlIGltcGxlbWVudGVkIGJ5IHRlc3RpbmcgYmFja3dhcmRzIGZyb20gdGhlIGVuZCwKICAvLyBzbyB1c2UgdGhlIF9zb3VyY2UncyBpbXBsZW1lbnRhdGlvbi4KICBUIGxhc3RXaGVyZShib29sIHRlc3QoVCBlbGVtZW50KSwge1Qgb3JFbHNlKCl9KSA9PgogICAgICBfc291cmNlLmxhc3RXaGVyZSgoUyBlbGVtZW50KSA9PiB0ZXN0KGVsZW1lbnQgYXMgVCksCiAgICAgICAgICBvckVsc2U6IChvckVsc2UgPT0gbnVsbCkgPyBudWxsIDogKCkgPT4gb3JFbHNlKCkgYXMgUykgYXMgVDsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gX3NvdXJjZS50b1N0cmluZygpOwp9CgpjbGFzcyBDYXN0SXRlcmF0b3I8UywgVD4gaW1wbGVtZW50cyBJdGVyYXRvcjxUPiB7CiAgSXRlcmF0b3I8Uz4gX3NvdXJjZTsKICBDYXN0SXRlcmF0b3IodGhpcy5fc291cmNlKTsKICBib29sIG1vdmVOZXh0KCkgPT4gX3NvdXJjZS5tb3ZlTmV4dCgpOwogIFQgZ2V0IGN1cnJlbnQgPT4gX3NvdXJjZS5jdXJyZW50IGFzIFQ7Cn0KCmNsYXNzIENhc3RJdGVyYWJsZTxTLCBUPiBleHRlbmRzIF9DYXN0SXRlcmFibGVCYXNlPFMsIFQ+IHsKICBmaW5hbCBJdGVyYWJsZTxTPiBfc291cmNlOwoKICBDYXN0SXRlcmFibGUuXyh0aGlzLl9zb3VyY2UpOwoKICBmYWN0b3J5IENhc3RJdGVyYWJsZShJdGVyYWJsZTxTPiBzb3VyY2UpIHsKICAgIGlmIChzb3VyY2UgaXMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8Uz4pIHsKICAgICAgcmV0dXJuIG5ldyBfRWZmaWNpZW50TGVuZ3RoQ2FzdEl0ZXJhYmxlPFMsIFQ+KHNvdXJjZSk7CiAgICB9CiAgICByZXR1cm4gbmV3IENhc3RJdGVyYWJsZTxTLCBUPi5fKHNvdXJjZSk7CiAgfQoKICBJdGVyYWJsZTxSPiBjYXN0PFI+KCkgPT4gbmV3IENhc3RJdGVyYWJsZTxTLCBSPihfc291cmNlKTsKfQoKY2xhc3MgX0VmZmljaWVudExlbmd0aENhc3RJdGVyYWJsZTxTLCBUPiBleHRlbmRzIENhc3RJdGVyYWJsZTxTLCBUPgogICAgaW1wbGVtZW50cyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxUPiB7CiAgX0VmZmljaWVudExlbmd0aENhc3RJdGVyYWJsZShFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxTPiBzb3VyY2UpCiAgICAgIDogc3VwZXIuXyhzb3VyY2UpOwp9CgphYnN0cmFjdCBjbGFzcyBfQ2FzdExpc3RCYXNlPFMsIFQ+IGV4dGVuZHMgX0Nhc3RJdGVyYWJsZUJhc2U8UywgVD4KICAgIHdpdGggTGlzdE1peGluPFQ+IHsKICBMaXN0PFM+IGdldCBfc291cmNlOwoKICAvLyBVc2luZyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmcm9tIExpc3RNaXhpbjoKICAvLyAqIHJldmVyc2VkCiAgLy8gKiBzaHVmZmxlCiAgLy8gKiBpbmRleE9mCiAgLy8gKiBsYXN0SW5kZXhPZgogIC8vICogY2xlYXIKICAvLyAqIHN1Ymxpc3QKICAvLyAqIGFzTWFwCgogIFQgb3BlcmF0b3IgW10oaW50IGluZGV4KSA9PiBfc291cmNlW2luZGV4XSBhcyBUOwoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIFQgdmFsdWUpIHsKICAgIF9zb3VyY2VbaW5kZXhdID0gdmFsdWUgYXMgUzsKICB9CgogIHZvaWQgc2V0IGxlbmd0aChpbnQgbGVuZ3RoKSB7CiAgICBfc291cmNlLmxlbmd0aCA9IGxlbmd0aDsKICB9CgogIHZvaWQgYWRkKFQgdmFsdWUpIHsKICAgIF9zb3VyY2UuYWRkKHZhbHVlIGFzIFMpOwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8VD4gdmFsdWVzKSB7CiAgICBfc291cmNlLmFkZEFsbChuZXcgQ2FzdEl0ZXJhYmxlPFQsIFM+KHZhbHVlcykpOwogIH0KCiAgdm9pZCBzb3J0KFtpbnQgY29tcGFyZShUIHYxLCBUIHYyKV0pIHsKICAgIF9zb3VyY2Uuc29ydCgKICAgICAgICBjb21wYXJlID09IG51bGwgPyBudWxsIDogKFMgdjEsIFMgdjIpID0+IGNvbXBhcmUodjEgYXMgVCwgdjIgYXMgVCkpOwogIH0KCiAgdm9pZCBzaHVmZmxlKFtSYW5kb20gcmFuZG9tXSkgewogICAgX3NvdXJjZS5zaHVmZmxlKHJhbmRvbSk7CiAgfQoKICB2b2lkIGluc2VydChpbnQgaW5kZXgsIFQgZWxlbWVudCkgewogICAgX3NvdXJjZS5pbnNlcnQoaW5kZXgsIGVsZW1lbnQgYXMgUyk7CiAgfQoKICB2b2lkIGluc2VydEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPFQ+IGVsZW1lbnRzKSB7CiAgICBfc291cmNlLmluc2VydEFsbChpbmRleCwgbmV3IENhc3RJdGVyYWJsZTxULCBTPihlbGVtZW50cykpOwogIH0KCiAgdm9pZCBzZXRBbGwoaW50IGluZGV4LCBJdGVyYWJsZTxUPiBlbGVtZW50cykgewogICAgX3NvdXJjZS5zZXRBbGwoaW5kZXgsIG5ldyBDYXN0SXRlcmFibGU8VCwgUz4oZWxlbWVudHMpKTsKICB9CgogIGJvb2wgcmVtb3ZlKE9iamVjdCB2YWx1ZSkgPT4gX3NvdXJjZS5yZW1vdmUodmFsdWUpOwoKICBUIHJlbW92ZUF0KGludCBpbmRleCkgPT4gX3NvdXJjZS5yZW1vdmVBdChpbmRleCkgYXMgVDsKCiAgVCByZW1vdmVMYXN0KCkgPT4gX3NvdXJjZS5yZW1vdmVMYXN0KCkgYXMgVDsKCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoVCBlbGVtZW50KSkgewogICAgX3NvdXJjZS5yZW1vdmVXaGVyZSgoUyBlbGVtZW50KSA9PiB0ZXN0KGVsZW1lbnQgYXMgVCkpOwogIH0KCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoVCBlbGVtZW50KSkgewogICAgX3NvdXJjZS5yZXRhaW5XaGVyZSgoUyBlbGVtZW50KSA9PiB0ZXN0KGVsZW1lbnQgYXMgVCkpOwogIH0KCiAgSXRlcmFibGU8VD4gZ2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSA9PgogICAgICBuZXcgQ2FzdEl0ZXJhYmxlPFMsIFQ+KF9zb3VyY2UuZ2V0UmFuZ2Uoc3RhcnQsIGVuZCkpOwoKICB2b2lkIHNldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgSXRlcmFibGU8VD4gaXRlcmFibGUsIFtpbnQgc2tpcENvdW50ID0gMF0pIHsKICAgIF9zb3VyY2Uuc2V0UmFuZ2Uoc3RhcnQsIGVuZCwgbmV3IENhc3RJdGVyYWJsZTxULCBTPihpdGVyYWJsZSksIHNraXBDb3VudCk7CiAgfQoKICB2b2lkIHJlbW92ZVJhbmdlKGludCBzdGFydCwgaW50IGVuZCkgewogICAgX3NvdXJjZS5yZW1vdmVSYW5nZShzdGFydCwgZW5kKTsKICB9CgogIHZvaWQgZmlsbFJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgW1QgZmlsbFZhbHVlXSkgewogICAgX3NvdXJjZS5maWxsUmFuZ2Uoc3RhcnQsIGVuZCwgZmlsbFZhbHVlIGFzIFMpOwogIH0KCiAgdm9pZCByZXBsYWNlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZTxUPiByZXBsYWNlbWVudCkgewogICAgX3NvdXJjZS5yZXBsYWNlUmFuZ2Uoc3RhcnQsIGVuZCwgbmV3IENhc3RJdGVyYWJsZTxULCBTPihyZXBsYWNlbWVudCkpOwogIH0KfQoKY2xhc3MgQ2FzdExpc3Q8UywgVD4gZXh0ZW5kcyBfQ2FzdExpc3RCYXNlPFMsIFQ+IHsKICBmaW5hbCBMaXN0PFM+IF9zb3VyY2U7CiAgQ2FzdExpc3QodGhpcy5fc291cmNlKTsKCiAgTGlzdDxSPiBjYXN0PFI+KCkgPT4gbmV3IENhc3RMaXN0PFMsIFI+KF9zb3VyY2UpOwp9CgpjbGFzcyBDYXN0U2V0PFMsIFQ+IGV4dGVuZHMgX0Nhc3RJdGVyYWJsZUJhc2U8UywgVD4gaW1wbGVtZW50cyBTZXQ8VD4gewogIGZpbmFsIFNldDxTPiBfc291cmNlOwoKICAvLy8gQ3JlYXRlcyBhIG5ldyBlbXB0eSBzZXQgb2YgdGhlIHNhbWUgKmtpbmQqIGFzIFtfc291cmNlXSwKICAvLy8gYnV0IHdpdGggYDxSPmAgYXMgdHlwZSBhcmd1bWVudC4KICAvLy8gVXNlZCBieSBbdG9TZXRdIGFuZCBbdW5pb25dLgogIGZpbmFsIFNldDxSPiBGdW5jdGlvbjxSPigpIF9lbXB0eVNldDsKCiAgQ2FzdFNldCh0aGlzLl9zb3VyY2UsIHRoaXMuX2VtcHR5U2V0KTsKCiAgc3RhdGljIFNldDxSPiBfZGVmYXVsdEVtcHR5U2V0PFI+KCkgPT4gbmV3IFNldDxSPigpOwoKICBTZXQ8Uj4gY2FzdDxSPigpID0+IG5ldyBDYXN0U2V0PFMsIFI+KF9zb3VyY2UsIF9lbXB0eVNldCk7CiAgYm9vbCBhZGQoVCB2YWx1ZSkgPT4gX3NvdXJjZS5hZGQodmFsdWUgYXMgUyk7CgogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPFQ+IGVsZW1lbnRzKSB7CiAgICBfc291cmNlLmFkZEFsbChuZXcgQ2FzdEl0ZXJhYmxlPFQsIFM+KGVsZW1lbnRzKSk7CiAgfQoKICBib29sIHJlbW92ZShPYmplY3Qgb2JqZWN0KSA9PiBfc291cmNlLnJlbW92ZShvYmplY3QpOwoKICB2b2lkIHJlbW92ZUFsbChJdGVyYWJsZTxPYmplY3Q+IG9iamVjdHMpIHsKICAgIF9zb3VyY2UucmVtb3ZlQWxsKG9iamVjdHMpOwogIH0KCiAgdm9pZCByZXRhaW5BbGwoSXRlcmFibGU8T2JqZWN0PiBvYmplY3RzKSB7CiAgICBfc291cmNlLnJldGFpbkFsbChvYmplY3RzKTsKICB9CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KFQgZWxlbWVudCkpIHsKICAgIF9zb3VyY2UucmVtb3ZlV2hlcmUoKFMgZWxlbWVudCkgPT4gdGVzdChlbGVtZW50IGFzIFQpKTsKICB9CgogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KFQgZWxlbWVudCkpIHsKICAgIF9zb3VyY2UucmV0YWluV2hlcmUoKFMgZWxlbWVudCkgPT4gdGVzdChlbGVtZW50IGFzIFQpKTsKICB9CgogIGJvb2wgY29udGFpbnNBbGwoSXRlcmFibGU8T2JqZWN0PiBvYmplY3RzKSA9PiBfc291cmNlLmNvbnRhaW5zQWxsKG9iamVjdHMpOwoKICBTZXQ8VD4gaW50ZXJzZWN0aW9uKFNldDxPYmplY3Q+IG90aGVyKSB7CiAgICBpZiAoX2VtcHR5U2V0ICE9IG51bGwpIHJldHVybiBfY29uZGl0aW9uYWxBZGQob3RoZXIsIHRydWUpOwogICAgcmV0dXJuIG5ldyBDYXN0U2V0PFMsIFQ+KF9zb3VyY2UuaW50ZXJzZWN0aW9uKG90aGVyKSwgbnVsbCk7CiAgfQoKICBTZXQ8VD4gZGlmZmVyZW5jZShTZXQ8T2JqZWN0PiBvdGhlcikgewogICAgaWYgKF9lbXB0eVNldCAhPSBudWxsKSByZXR1cm4gX2NvbmRpdGlvbmFsQWRkKG90aGVyLCBmYWxzZSk7CiAgICByZXR1cm4gbmV3IENhc3RTZXQ8UywgVD4oX3NvdXJjZS5kaWZmZXJlbmNlKG90aGVyKSwgbnVsbCk7CiAgfQoKICBTZXQ8VD4gX2NvbmRpdGlvbmFsQWRkKFNldDxPYmplY3Q+IG90aGVyLCBib29sIG90aGVyQ29udGFpbnMpIHsKICAgIFNldDxUPiByZXN1bHQgPSAoX2VtcHR5U2V0ID09IG51bGwpID8gbmV3IFNldDxUPigpIDogX2VtcHR5U2V0PFQ+KCk7CiAgICBmb3IgKHZhciBlbGVtZW50IGluIF9zb3VyY2UpIHsKICAgICAgVCBjYXN0RWxlbWVudCA9IGVsZW1lbnQgYXMgVDsKICAgICAgaWYgKG90aGVyQ29udGFpbnMgPT0gb3RoZXIuY29udGFpbnMoY2FzdEVsZW1lbnQpKSByZXN1bHQuYWRkKGNhc3RFbGVtZW50KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBTZXQ8VD4gdW5pb24oU2V0PFQ+IG90aGVyKSA9PiBfY2xvbmUoKS4uYWRkQWxsKG90aGVyKTsKCiAgdm9pZCBjbGVhcigpIHsKICAgIF9zb3VyY2UuY2xlYXIoKTsKICB9CgogIFNldDxUPiBfY2xvbmUoKSB7CiAgICBTZXQ8VD4gcmVzdWx0ID0gKF9lbXB0eVNldCA9PSBudWxsKSA/IG5ldyBTZXQ8VD4oKSA6IF9lbXB0eVNldDxUPigpOwogICAgcmVzdWx0LmFkZEFsbCh0aGlzKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBTZXQ8VD4gdG9TZXQoKSA9PiBfY2xvbmUoKTsKCiAgVCBsb29rdXAoT2JqZWN0IGtleSkgPT4gX3NvdXJjZS5sb29rdXAoa2V5KSBhcyBUOwp9CgpjbGFzcyBDYXN0TWFwPFNLLCBTViwgSywgVj4gZXh0ZW5kcyBNYXBCYXNlPEssIFY+IHsKICBmaW5hbCBNYXA8U0ssIFNWPiBfc291cmNlOwoKICBDYXN0TWFwKHRoaXMuX3NvdXJjZSk7CgogIE1hcDxSSywgUlY+IGNhc3Q8UkssIFJWPigpID0+IG5ldyBDYXN0TWFwPFNLLCBTViwgUkssIFJWPihfc291cmNlKTsKCiAgYm9vbCBjb250YWluc1ZhbHVlKE9iamVjdCB2YWx1ZSkgPT4gX3NvdXJjZS5jb250YWluc1ZhbHVlKHZhbHVlKTsKCiAgYm9vbCBjb250YWluc0tleShPYmplY3Qga2V5KSA9PiBfc291cmNlLmNvbnRhaW5zS2V5KGtleSk7CgogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgPT4gX3NvdXJjZVtrZXldIGFzIFY7CgogIHZvaWQgb3BlcmF0b3IgW109KEsga2V5LCBWIHZhbHVlKSB7CiAgICBfc291cmNlW2tleSBhcyBTS10gPSB2YWx1ZSBhcyBTVjsKICB9CgogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSkgPT4gX3NvdXJjZS5wdXRJZkFic2VudCgKICAgICAga2V5IGFzIFNLLCAoaWZBYnNlbnQgPT0gbnVsbCkgPyBudWxsIDogKCkgPT4gaWZBYnNlbnQoKSBhcyBTVikgYXMgVjsKCiAgdm9pZCBhZGRBbGwoTWFwPEssIFY+IG90aGVyKSB7CiAgICBfc291cmNlLmFkZEFsbChuZXcgQ2FzdE1hcDxLLCBWLCBTSywgU1Y+KG90aGVyKSk7CiAgfQoKICBWIHJlbW92ZShPYmplY3Qga2V5KSA9PiBfc291cmNlLnJlbW92ZShrZXkpIGFzIFY7CgogIHZvaWQgY2xlYXIoKSB7CiAgICBfc291cmNlLmNsZWFyKCk7CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBmKEsga2V5LCBWIHZhbHVlKSkgewogICAgX3NvdXJjZS5mb3JFYWNoKChTSyBrZXksIFNWIHZhbHVlKSB7CiAgICAgIGYoa2V5IGFzIEssIHZhbHVlIGFzIFYpOwogICAgfSk7CiAgfQoKICBJdGVyYWJsZTxLPiBnZXQga2V5cyA9PiBuZXcgQ2FzdEl0ZXJhYmxlPFNLLCBLPihfc291cmNlLmtleXMpOwoKICBJdGVyYWJsZTxWPiBnZXQgdmFsdWVzID0+IG5ldyBDYXN0SXRlcmFibGU8U1YsIFY+KF9zb3VyY2UudmFsdWVzKTsKCiAgaW50IGdldCBsZW5ndGggPT4gX3NvdXJjZS5sZW5ndGg7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX3NvdXJjZS5pc0VtcHR5OwoKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9zb3VyY2UuaXNOb3RFbXB0eTsKCiAgViB1cGRhdGUoSyBrZXksIFYgdXBkYXRlKFYgdmFsdWUpLCB7ViBpZkFic2VudCgpfSkgewogICAgcmV0dXJuIF9zb3VyY2UudXBkYXRlKGtleSBhcyBTSywgKFNWIHZhbHVlKSA9PiB1cGRhdGUodmFsdWUgYXMgVikgYXMgU1YsCiAgICAgICAgaWZBYnNlbnQ6IChpZkFic2VudCA9PSBudWxsKSA/IG51bGwgOiAoKSA9PiBpZkFic2VudCgpIGFzIFNWKSBhcyBWOwogIH0KCiAgdm9pZCB1cGRhdGVBbGwoViB1cGRhdGUoSyBrZXksIFYgdmFsdWUpKSB7CiAgICBfc291cmNlLnVwZGF0ZUFsbCgoU0sga2V5LCBTViB2YWx1ZSkgPT4gdXBkYXRlKGtleSBhcyBLLCB2YWx1ZSBhcyBWKSBhcyBTVik7CiAgfQoKICBJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZ2V0IGVudHJpZXMgewogICAgcmV0dXJuIF9zb3VyY2UuZW50cmllcy5tYXA8TWFwRW50cnk8SywgVj4+KAogICAgICAgIChNYXBFbnRyeTxTSywgU1Y+IGUpID0+IG5ldyBNYXBFbnRyeTxLLCBWPihlLmtleSBhcyBLLCBlLnZhbHVlIGFzIFYpKTsKICB9CgogIHZvaWQgYWRkRW50cmllcyhJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZW50cmllcykgewogICAgZm9yICh2YXIgZW50cnkgaW4gZW50cmllcykgewogICAgICBfc291cmNlW2VudHJ5LmtleSBhcyBTS10gPSBlbnRyeS52YWx1ZSBhcyBTVjsKICAgIH0KICB9CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEsga2V5LCBWIHZhbHVlKSkgewogICAgX3NvdXJjZS5yZW1vdmVXaGVyZSgoU0sga2V5LCBTViB2YWx1ZSkgPT4gdGVzdChrZXkgYXMgSywgdmFsdWUgYXMgVikpOwogIH0KfQoKY2xhc3MgQ2FzdFF1ZXVlPFMsIFQ+IGV4dGVuZHMgX0Nhc3RJdGVyYWJsZUJhc2U8UywgVD4gaW1wbGVtZW50cyBRdWV1ZTxUPiB7CiAgZmluYWwgUXVldWU8Uz4gX3NvdXJjZTsKICBDYXN0UXVldWUodGhpcy5fc291cmNlKTsKICBRdWV1ZTxSPiBjYXN0PFI+KCkgPT4gbmV3IENhc3RRdWV1ZTxTLCBSPihfc291cmNlKTsKCiAgVCByZW1vdmVGaXJzdCgpID0+IF9zb3VyY2UucmVtb3ZlRmlyc3QoKSBhcyBUOwogIFQgcmVtb3ZlTGFzdCgpID0+IF9zb3VyY2UucmVtb3ZlTGFzdCgpIGFzIFQ7CgogIHZvaWQgYWRkKFQgdmFsdWUpIHsKICAgIF9zb3VyY2UuYWRkKHZhbHVlIGFzIFMpOwogIH0KCiAgdm9pZCBhZGRGaXJzdChUIHZhbHVlKSB7CiAgICBfc291cmNlLmFkZEZpcnN0KHZhbHVlIGFzIFMpOwogIH0KCiAgdm9pZCBhZGRMYXN0KFQgdmFsdWUpIHsKICAgIF9zb3VyY2UuYWRkTGFzdCh2YWx1ZSBhcyBTKTsKICB9CgogIGJvb2wgcmVtb3ZlKE9iamVjdCBvdGhlcikgPT4gX3NvdXJjZS5yZW1vdmUob3RoZXIpOwogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPFQ+IGVsZW1lbnRzKSB7CiAgICBfc291cmNlLmFkZEFsbChuZXcgQ2FzdEl0ZXJhYmxlPFQsIFM+KGVsZW1lbnRzKSk7CiAgfQoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChUIGVsZW1lbnQpKSB7CiAgICBfc291cmNlLnJlbW92ZVdoZXJlKChTIGVsZW1lbnQpID0+IHRlc3QoZWxlbWVudCBhcyBUKSk7CiAgfQoKICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChUIGVsZW1lbnQpKSB7CiAgICBfc291cmNlLnJldGFpbldoZXJlKChTIGVsZW1lbnQpID0+IHRlc3QoZWxlbWVudCBhcyBUKSk7CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgX3NvdXJjZS5jbGVhcigpOwogIH0KfQqBawBOTjwBGAEsAT0bAUgBQU06UAULDQ4PDgwNCwwODREREhMBJCctAU5OATslIycBOgE9KjU7RwErAgEyFx4pKQIBOx0BIAEtMD0GLQQBPAIBRCxCGQIBQxgXATYQDw8TDQ8NATMBKiEEASAdBAEWHQQBJDQEASkSTQQBIh0EASYpBAE0QAQBMT0EATYBOQEvASs8BAErPAQBLjwBUU8EASklBAE2MwQBQ0sEAgEzGRoBNAIBSBgBPycjKAEpATcBPTABJjYEATgBLSAEAS0gBAErPAQBKzwEAU4BK0BBBAEpQT8EAUJJIyRRBhMEATkBERUEARRJGRMEAR4BNAIBNB0BGQFGAUQBPAEyASYmBAE9SwEhNgQBNAERFQQBKSkfCAQBQQFFASQBJwEtATdNTAQBLVEEASkwTwQBNiE0BgQBMEsEAgFMGhs2ATEvARYdBAEbIgQBGiEEATYmNgQBKzwEASs8BAERFQQCARhkYXJ0Ol9pbnRlcm5hbC9jYXN0LmRhcnQub3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2ludGVybmFsL2xpc3QuZGFydK7RLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5faW50ZXJuYWw7CgovKioKICogTWl4aW4gdGhhdCB0aHJvd3Mgb24gdGhlIGxlbmd0aCBjaGFuZ2luZyBvcGVyYXRpb25zIG9mIFtMaXN0XS4KICoKICogSW50ZW5kZWQgdG8gbWl4LWluIG9uIHRvcCBvZiBbTGlzdE1peGluXSBmb3IgZml4ZWQtbGVuZ3RoIGxpc3RzLgogKi8KYWJzdHJhY3QgY2xhc3MgRml4ZWRMZW5ndGhMaXN0TWl4aW48RT4gewogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGEgZml4ZWQgbGVuZ3RoIGxpc3QuICovCiAgc2V0IGxlbmd0aChpbnQgbmV3TGVuZ3RoKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiQ2Fubm90IGNoYW5nZSB0aGUgbGVuZ3RoIG9mIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGEgZml4ZWQgbGVuZ3RoIGxpc3QuICovCiAgdm9pZCBhZGQoRSB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYSBmaXhlZCBsZW5ndGggbGlzdC4gKi8KICB2b2lkIGluc2VydChpbnQgaW5kZXgsIEUgdmFsdWUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgYWRkIHRvIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGEgZml4ZWQgbGVuZ3RoIGxpc3QuICovCiAgdm9pZCBpbnNlcnRBbGwoaW50IGF0LCBJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYSBmaXhlZCBsZW5ndGggbGlzdC4gKi8KICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYSBmaXhlZCBsZW5ndGggbGlzdC4gKi8KICBib29sIHJlbW92ZShPYmplY3QgZWxlbWVudCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhIGZpeGVkIGxlbmd0aCBsaXN0LiAqLwogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYSBmaXhlZCBsZW5ndGggbGlzdC4gKi8KICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGEgZml4ZWQgbGVuZ3RoIGxpc3QuICovCiAgdm9pZCBjbGVhcigpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgY2xlYXIgYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYSBmaXhlZCBsZW5ndGggbGlzdC4gKi8KICBFIHJlbW92ZUF0KGludCBpbmRleCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhIGZpeGVkIGxlbmd0aCBsaXN0LiAqLwogIEUgcmVtb3ZlTGFzdCgpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYSBmaXhlZCBsZW5ndGggbGlzdC4gKi8KICB2b2lkIHJlbW92ZVJhbmdlKGludCBzdGFydCwgaW50IGVuZCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhIGZpeGVkIGxlbmd0aCBsaXN0LiAqLwogIHZvaWQgcmVwbGFjZVJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgSXRlcmFibGU8RT4gaXRlcmFibGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KfQoKLyoqCiAqIE1peGluIGZvciBhbiB1bm1vZGlmaWFibGUgW0xpc3RdIGNsYXNzLgogKgogKiBUaGlzIG92ZXJyaWRlcyBhbGwgbXV0YXRpbmcgbWV0aG9kcyB3aXRoIG1ldGhvZHMgdGhhdCB0aHJvdy4KICogVGhpcyBtaXhpbiBpcyBpbnRlbmRlZCB0byBiZSBtaXhlZCBpbiBvbiB0b3Agb2YgW0xpc3RNaXhpbl0gb24KICogdW5tb2RpZmlhYmxlIGxpc3RzLgogKi8KYWJzdHJhY3QgY2xhc3MgVW5tb2RpZmlhYmxlTGlzdE1peGluPEU+IGltcGxlbWVudHMgTGlzdDxFPiB7CiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBFIHZhbHVlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IG1vZGlmeSBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgc2V0IGxlbmd0aChpbnQgbmV3TGVuZ3RoKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiQ2Fubm90IGNoYW5nZSB0aGUgbGVuZ3RoIG9mIGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICBzZXQgZmlyc3QoRSBlbGVtZW50KSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IG1vZGlmeSBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KCiAgc2V0IGxhc3QoRSBlbGVtZW50KSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IG1vZGlmeSBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgdm9pZCBzZXRBbGwoaW50IGF0LCBJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBsaXN0LiAqLwogIHZvaWQgYWRkKEUgdmFsdWUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgYWRkIHRvIGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICB2b2lkIGluc2VydChpbnQgaW5kZXgsIEUgZWxlbWVudCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYW4gdW5tb2RpZmlhYmxlIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBsaXN0LiAqLwogIHZvaWQgaW5zZXJ0QWxsKGludCBhdCwgSXRlcmFibGU8RT4gaXRlcmFibGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgYWRkIHRvIGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYW4gdW5tb2RpZmlhYmxlIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBsaXN0LiAqLwogIGJvb2wgcmVtb3ZlKE9iamVjdCBlbGVtZW50KSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICB2b2lkIHNvcnQoW0NvbXBhcmF0b3I8RT4gY29tcGFyZV0pIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICB2b2lkIHNodWZmbGUoW1JhbmRvbSByYW5kb21dKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IG1vZGlmeSBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgdm9pZCBjbGVhcigpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgY2xlYXIgYW4gdW5tb2RpZmlhYmxlIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBsaXN0LiAqLwogIEUgcmVtb3ZlQXQoaW50IGluZGV4KSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICBFIHJlbW92ZUxhc3QoKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICB2b2lkIHNldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgSXRlcmFibGU8RT4gaXRlcmFibGUsIFtpbnQgc2tpcENvdW50ID0gMF0pIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICB2b2lkIHJlbW92ZVJhbmdlKGludCBzdGFydCwgaW50IGVuZCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgdm9pZCByZXBsYWNlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgdm9pZCBmaWxsUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBbRSBmaWxsVmFsdWVdKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IG1vZGlmeSBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KfQoKLyoqCiAqIEFic3RyYWN0IGltcGxlbWVudGF0aW9uIG9mIGEgZml4ZWQtbGVuZ3RoIGxpc3QuCiAqCiAqIEFsbCBvcGVyYXRpb25zIGFyZSBkZWZpbmVkIGluIHRlcm1zIG9mIGBsZW5ndGhgLCBgb3BlcmF0b3JbXWAgYW5kCiAqIGBvcGVyYXRvcltdPWAsIHdoaWNoIG5lZWQgdG8gYmUgaW1wbGVtZW50ZWQuCiAqLwphYnN0cmFjdCBjbGFzcyBGaXhlZExlbmd0aExpc3RCYXNlPEU+ID0gTGlzdEJhc2U8RT4KICAgIHdpdGggRml4ZWRMZW5ndGhMaXN0TWl4aW48RT47CgovKioKICogQWJzdHJhY3QgaW1wbGVtZW50YXRpb24gb2YgYW4gdW5tb2RpZmlhYmxlIGxpc3QuCiAqCiAqIEFsbCBvcGVyYXRpb25zIGFyZSBkZWZpbmVkIGluIHRlcm1zIG9mIGBsZW5ndGhgIGFuZCBgb3BlcmF0b3JbXWAsCiAqIHdoaWNoIG5lZWQgdG8gYmUgaW1wbGVtZW50ZWQuCiAqLwphYnN0cmFjdCBjbGFzcyBVbm1vZGlmaWFibGVMaXN0QmFzZTxFPiA9IExpc3RCYXNlPEU+CiAgICB3aXRoIFVubW9kaWZpYWJsZUxpc3RNaXhpbjxFPjsKCmNsYXNzIF9MaXN0SW5kaWNlc0l0ZXJhYmxlIGV4dGVuZHMgTGlzdEl0ZXJhYmxlPGludD4gewogIExpc3QgX2JhY2tlZExpc3Q7CgogIF9MaXN0SW5kaWNlc0l0ZXJhYmxlKHRoaXMuX2JhY2tlZExpc3QpOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfYmFja2VkTGlzdC5sZW5ndGg7CiAgaW50IGVsZW1lbnRBdChpbnQgaW5kZXgpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZEluZGV4KGluZGV4LCB0aGlzKTsKICAgIHJldHVybiBpbmRleDsKICB9Cn0KCmNsYXNzIExpc3RNYXBWaWV3PEU+IGV4dGVuZHMgVW5tb2RpZmlhYmxlTWFwQmFzZTxpbnQsIEU+IHsKICBMaXN0PEU+IF92YWx1ZXM7CgogIExpc3RNYXBWaWV3KHRoaXMuX3ZhbHVlcyk7CgogIEUgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgPT4gY29udGFpbnNLZXkoa2V5KSA/IF92YWx1ZXNba2V5XSA6IG51bGw7CiAgaW50IGdldCBsZW5ndGggPT4gX3ZhbHVlcy5sZW5ndGg7CgogIEl0ZXJhYmxlPEU+IGdldCB2YWx1ZXMgPT4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxFPihfdmFsdWVzLCAwLCBudWxsKTsKICBJdGVyYWJsZTxpbnQ+IGdldCBrZXlzID0+IG5ldyBfTGlzdEluZGljZXNJdGVyYWJsZShfdmFsdWVzKTsKCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfdmFsdWVzLmlzRW1wdHk7CiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfdmFsdWVzLmlzTm90RW1wdHk7CiAgYm9vbCBjb250YWluc1ZhbHVlKE9iamVjdCB2YWx1ZSkgPT4gX3ZhbHVlcy5jb250YWlucyh2YWx1ZSk7CiAgYm9vbCBjb250YWluc0tleShPYmplY3Qga2V5KSA9PiBrZXkgaXMgaW50ICYmIGtleSA+PSAwICYmIGtleSA8IGxlbmd0aDsKCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihpbnQga2V5LCBFIHZhbHVlKSkgewogICAgaW50IGxlbmd0aCA9IF92YWx1ZXMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBmKGksIF92YWx1ZXNbaV0pOwogICAgICBpZiAobGVuZ3RoICE9IF92YWx1ZXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcihfdmFsdWVzKTsKICAgICAgfQogICAgfQogIH0KfQoKY2xhc3MgUmV2ZXJzZWRMaXN0SXRlcmFibGU8RT4gZXh0ZW5kcyBMaXN0SXRlcmFibGU8RT4gewogIEl0ZXJhYmxlPEU+IF9zb3VyY2U7CiAgUmV2ZXJzZWRMaXN0SXRlcmFibGUodGhpcy5fc291cmNlKTsKCiAgaW50IGdldCBsZW5ndGggPT4gX3NvdXJjZS5sZW5ndGg7CgogIEUgZWxlbWVudEF0KGludCBpbmRleCkgPT4gX3NvdXJjZS5lbGVtZW50QXQoX3NvdXJjZS5sZW5ndGggLSAxIC0gaW5kZXgpOwp9CgovKioKICogQ3JlYXRlcyBlcnJvcnMgdGhyb3duIGJ5IHVubW9kaWZpYWJsZSBsaXN0cyB3aGVuIHRoZXkgYXJlIGF0dGVtcHRlZCBtb2RpZmllZC4KICoKICogVGhpcyBjbGFzcyBjcmVhdGVzIFtVbnN1cHBvcnRlZEVycm9yXXMgd2l0aCBzcGVjaWFsaXplZCBtZXNzYWdlcy4KICovCmFic3RyYWN0IGNsYXNzIFVubW9kaWZpYWJsZUxpc3RFcnJvciB7CiAgLyoqIEVycm9yIHRocm93biB3aGVuIHRyeWluZyB0byBhZGQgZWxlbWVudHMgdG8gYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgc3RhdGljIFVuc3VwcG9ydGVkRXJyb3IgYWRkKCkgPT4KICAgICAgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gdW5tb2RpZmlhYmxlIExpc3QiKTsKCiAgLyoqIEVycm9yIHRocm93biB3aGVuIHRyeWluZyB0byBhZGQgZWxlbWVudHMgdG8gYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgc3RhdGljIFVuc3VwcG9ydGVkRXJyb3IgY2hhbmdlKCkgPT4KICAgICAgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBjaGFuZ2UgdGhlIGNvbnRlbnQgb2YgYW4gdW5tb2RpZmlhYmxlIExpc3QiKTsKCiAgLyoqIEVycm9yIHRocm93biB3aGVuIHRyeWluZyB0byBjaGFuZ2UgdGhlIGxlbmd0aCBvZiBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICBzdGF0aWMgVW5zdXBwb3J0ZWRFcnJvciBsZW5ndGgoKSA9PgogICAgICBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGNoYW5nZSBsZW5ndGggb2YgdW5tb2RpZmlhYmxlIExpc3QiKTsKCiAgLyoqIEVycm9yIHRocm93biB3aGVuIHRyeWluZyB0byByZW1vdmUgZWxlbWVudHMgZnJvbSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICBzdGF0aWMgVW5zdXBwb3J0ZWRFcnJvciByZW1vdmUoKSA9PgogICAgICBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIHVubW9kaWZpYWJsZSBMaXN0Iik7Cn0KCi8qKgogKiBDcmVhdGVzIGVycm9ycyB0aHJvd24gYnkgbm9uLWdyb3dhYmxlIGxpc3RzIHdoZW4gdGhleSBhcmUgYXR0ZW1wdGVkIG1vZGlmaWVkLgogKgogKiBUaGlzIGNsYXNzIGNyZWF0ZXMgW1Vuc3VwcG9ydGVkRXJyb3JdcyB3aXRoIHNwZWNpYWxpemVkIG1lc3NhZ2VzLgogKi8KYWJzdHJhY3QgY2xhc3MgTm9uR3Jvd2FibGVMaXN0RXJyb3IgewogIC8qKiBFcnJvciB0aHJvd24gd2hlbiB0cnlpbmcgdG8gYWRkIGVsZW1lbnRzIHRvIGFuIG5vbi1ncm93YWJsZSBsaXN0LiAqLwogIHN0YXRpYyBVbnN1cHBvcnRlZEVycm9yIGFkZCgpID0+CiAgICAgIG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgYWRkIHRvIG5vbi1ncm93YWJsZSBMaXN0Iik7CgogIC8qKiBFcnJvciB0aHJvd24gd2hlbiB0cnlpbmcgdG8gY2hhbmdlIHRoZSBsZW5ndGggb2YgYW4gbm9uLWdyb3dhYmxlIGxpc3QuICovCiAgc3RhdGljIFVuc3VwcG9ydGVkRXJyb3IgbGVuZ3RoKCkgPT4KICAgICAgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBjaGFuZ2UgbGVuZ3RoIG9mIG5vbi1ncm93YWJsZSBMaXN0Iik7CgogIC8qKiBFcnJvciB0aHJvd24gd2hlbiB0cnlpbmcgdG8gcmVtb3ZlIGVsZW1lbnRzIGZyb20gYW4gbm9uLWdyb3dhYmxlIGxpc3QuICovCiAgc3RhdGljIFVuc3VwcG9ydGVkRXJyb3IgcmVtb3ZlKCkgPT4KICAgICAgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBub24tZ3Jvd2FibGUgTGlzdCIpOwp9CgovKioKICogQ29udmVydHMgYSBncm93YWJsZSBsaXN0IHRvIGEgZml4ZWQgbGVuZ3RoIGxpc3Qgd2l0aCB0aGUgc2FtZSBlbGVtZW50cy4KICoKICogRm9yIGludGVybmFsIHVzZSBvbmx5LgogKiBPbmx5IHdvcmtzIG9uIGdyb3dhYmxlIGxpc3RzIGFzIGNyZWF0ZWQgYnkgYFtdYCBvciBgbmV3IExpc3QoKWAuCiAqIE1heSB0aHJvdyBvbiBhbnkgb3RoZXIgbGlzdC4KICoKICogVGhlIG9wZXJhdGlvbiBpcyBlZmZpY2llbnQuIEl0IGRvZXNuJ3QgY29weSB0aGUgZWxlbWVudHMsIGJ1dCBjb252ZXJ0cwogKiB0aGUgZXhpc3RpbmcgbGlzdCBkaXJlY3RseSB0byBhIGZpeGVkIGxlbmd0aCBsaXN0LgogKiBUaGF0IG1lYW5zIHRoYXQgaXQgaXMgYSBkZXN0cnVjdGl2ZSBjb252ZXJzaW9uLgogKiBUaGUgb3JpZ2luYWwgbGlzdCBzaG91bGQgbm90IGJlIHVzZWQgYWZ0ZXJ3YXJkcy4KICoKICogVGhlIHJldHVybmVkIGxpc3QgbWF5IGJlIHRoZSBzYW1lIGxpc3QgYXMgdGhlIG9yaWdpbmFsLAogKiBvciBpdCBtYXkgYmUgYSBkaWZmZXJlbnQgbGlzdCAoYWNjb3JkaW5nIHRvIFtpZGVudGljYWxdKS4KICogVGhlIG9yaWdpbmFsIGxpc3QgbWF5IGhhdmUgY2hhbmdlZCB0eXBlIHRvIGJlIGEgZml4ZWQgbGlzdCwKICogb3IgYmVjb21lIGVtcHR5IG9yIGJlZW4gb3RoZXJ3aXNlIG1vZGlmaWVkLgogKiBJdCB3aWxsIHN0aWxsIGJlIGEgdmFsaWQgb2JqZWN0LCBzbyByZWZlcmVuY2VzIHRvIGl0IHdpbGwgbm90LCBlLmcuLCBjcmFzaAogKiB0aGUgcnVudGltZSBpZiBhY2Nlc3NlZCwgYnV0IG5vIHByb21pc2VzIGFyZSBtYWRlIHdydC4gaXRzIGNvbnRlbnRzLgogKgogKiBUaGlzIHVuc3BlY2lmaWVkIGJlaGF2aW9yIGlzIHRoZSByZWFzb24gdGhlIGZ1bmN0aW9uIGlzIG5vdCBleHBvc2VkIHRvCiAqIHVzZXJzLiBXZSBhbGxvdyB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiB0byBtYWtlIHRoZSBtb3N0IGVmZmljaWVudAogKiBjb252ZXJzaW9uLCBhdCB0aGUgY29zdCBvZiBsZWF2aW5nIHRoZSBvcmlnaW5hbCBsaXN0IGluIGFuIHVuc3BlY2lmaWVkCiAqIHN0YXRlLgogKi8KZXh0ZXJuYWwgTGlzdDxUPiBtYWtlTGlzdEZpeGVkTGVuZ3RoPFQ+KExpc3Q8VD4gZ3Jvd2FibGVMaXN0KTsKCi8qKgogKiBDb252ZXJ0cyBhIGZpeGVkLWxlbmd0aCBsaXN0IHRvIGFuIHVubW9kaWZpYWJsZSBsaXN0LgogKgogKiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCiAqIE9ubHkgd29ya3MgZm9yIGNvcmUgZml4ZWQtbGVuZ3RoIGxpc3RzIGFzIGNyZWF0ZWQgYnkgYG5ldyBMaXN0KGxlbmd0aClgLAogKiBvciBhcyByZXR1cm5lZCBieSBbbWFrZUxpc3RGaXhlZExlbmd0aF0uCiAqCiAqIFRoZSBvcGVyYXRpb24gaXMgZWZmaWNpZW50LiBJdCBkb2Vzbid0IGNvcHkgdGhlIGVsZW1lbnRzLCBidXQgY29udmVydHMKICogdGhlIGV4aXN0aW5nIGxpc3QgZGlyZWN0bHkgdG8gYSBmaXhlZCBsZW5ndGggbGlzdC4KICogVGhhdCBtZWFucyB0aGF0IGl0IGlzIGEgZGVzdHJ1Y3RpdmUgY29udmVyc2lvbi4KICogVGhlIG9yaWdpbmFsIGxpc3Qgc2hvdWxkIG5vdCBiZSB1c2VkIGFmdGVyd2FyZHMuCiAqCiAqIFRoZSB1bm1vZGlmaWFibGUgbGlzdCB0eXBlIGlzIHNpbWlsYXIgdG8gdGhlIG9uZSB1c2VkIGJ5IGNvbnN0IGxpc3RzLgogKi8KZXh0ZXJuYWwgTGlzdDxUPiBtYWtlRml4ZWRMaXN0VW5tb2RpZmlhYmxlPFQ+KExpc3Q8VD4gZml4ZWRMZW5ndGhMaXN0KTsKgVcATk48ARgBBEIDRAQpQR4gPAQBQRZFBAFBJEUEAUExRQQBQSZFBAFBIEoEAUErSgQBQStKBAFBEUQEAUEaSgQBQRNKBAFBKUoEAUFASgQCAQQrA0BCFwQ9QipGBAFCHiA9BAEZRgQBGEYEAUIuRgQBQhZGBAFCJkYEAUIxRgQBQiZGBAFCIEsEAUIrSwQBQitLBAFCJ0YEAUIiRgQBQhFFBAFCGksEAUITSwQBQlFGBAFCKUsEAUJASwQBQjZGBAIBBDMDRTAENCIBBDQDRSEENSMBNxQBKgEoHS0SBAIBOxMBHQFHJAFGPwEnLT9KASshJxgmOAgGBAIBOBcmASQBSwIBBFEDRQQnSyM/AUsmUQFQJkkBUCZEAgEEUQNFBCZLIz8BUCZJAVAmRAIBBEsDGkQgA0o2MzQDOz0/L05IA0pMSgoEPwEEOQMaTCwDSjYzNANJBEgBGGRhcnQ6X2ludGVybmFsL2xpc3QuZGFydC5vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW50ZXJuYWwvc29ydC5kYXJ0r8UvLyBDb3B5cmlnaHQgKGMpIDIwMTEsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0Ll9pbnRlcm5hbDsKCi8qKgogKiBEdWFsLVBpdm90IFF1aWNrc29ydCBhbGdvcml0aG0uCiAqCiAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgZHVhbC1waXZvdCBxdWlja3NvcnQgYWxnb3JpdGhtIGFzIHByZXNlbnRlZCBpbgogKiBWbGFkaW1pciBZYXJvc2xhdnNraXkncyBwYXBlci4KICoKICogU29tZSBpbXByb3ZlbWVudHMgaGF2ZSBiZWVuIGNvcGllZCBmcm9tIEFuZHJvaWQncyBpbXBsZW1lbnRhdGlvbi4KICovCmNsYXNzIFNvcnQgewogIC8vIFdoZW4gYSBsaXN0IGhhcyBsZXNzIHRoZW4gWzpfSU5TRVJUSU9OX1NPUlRfVEhSRVNIT0xEOl0gZWxlbWVudHMgaXQgd2lsbAogIC8vIGJlIHNvcnRlZCBieSBhbiBpbnNlcnRpb24gc29ydC4KICBzdGF0aWMgY29uc3QgaW50IF9JTlNFUlRJT05fU09SVF9USFJFU0hPTEQgPSAzMjsKCiAgLyoqCiAgICogU29ydHMgYWxsIGVsZW1lbnRzIG9mIHRoZSBnaXZlbiBsaXN0IFs6YTpdIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4KICAgKiBbOmNvbXBhcmU6XSBmdW5jdGlvbi4KICAgKgogICAqIFRoZSBbOmNvbXBhcmU6XSBmdW5jdGlvbiB0YWtlcyB0d28gYXJndW1lbnRzIFs6eDpdIGFuZCBbOnk6XSBhbmQgcmV0dXJucwogICAqICAtMSBpZiBbOnggPCB5Ol0sCiAgICogICAwIGlmIFs6eCA9PSB5Ol0sIGFuZAogICAqICAgMSBpZiBbOnggPiB5Ol0uCiAgICoKICAgKiBUaGUgZnVuY3Rpb24ncyBiZWhhdmlvciBtdXN0IGJlIGNvbnNpc3RlbnQuIEl0IG11c3Qgbm90IHJldHVybiBkaWZmZXJlbnQKICAgKiByZXN1bHRzIGZvciB0aGUgc2FtZSB2YWx1ZXMuCiAgICovCiAgc3RhdGljIHZvaWQgc29ydDxFPihMaXN0PEU+IGEsIGludCBjb21wYXJlKEUgYSwgRSBiKSkgewogICAgX2RvU29ydChhLCAwLCBhLmxlbmd0aCAtIDEsIGNvbXBhcmUpOwogIH0KCiAgLyoqCiAgICogU29ydHMgYWxsIGVsZW1lbnRzIGluIHRoZSByYW5nZSBbOmZyb206XSAoaW5jbHVzaXZlKSB0byBbOnRvOl0gKGV4Y2x1c2l2ZSkKICAgKiBvZiB0aGUgZ2l2ZW4gbGlzdCBbOmE6XS4KICAgKgogICAqIElmIHRoZSBnaXZlbiByYW5nZSBpcyBpbnZhbGlkIGFuICJPdXRPZlJhbmdlIiBlcnJvciBpcyByYWlzZWQuCiAgICogVE9ETyhmbG9pdHNjaCk6IGRvIHdlIHdhbnQgYW4gZXJyb3I/CiAgICoKICAgKiBTZWUgWzpzb3J0Ol0gZm9yIHJlcXVpcmVtZW50cyBvZiB0aGUgWzpjb21wYXJlOl0gZnVuY3Rpb24uCiAgICovCiAgc3RhdGljIHZvaWQgc29ydFJhbmdlPEU+KExpc3Q8RT4gYSwgaW50IGZyb20sIGludCB0bywgaW50IGNvbXBhcmUoRSBhLCBFIGIpKSB7CiAgICBpZiAoKGZyb20gPCAwKSB8fCAodG8gPiBhLmxlbmd0aCkgfHwgKHRvIDwgZnJvbSkpIHsKICAgICAgdGhyb3cgIk91dE9mUmFuZ2UiOwogICAgfQogICAgX2RvU29ydChhLCBmcm9tLCB0byAtIDEsIGNvbXBhcmUpOwogIH0KCiAgLyoqCiAgICogU29ydHMgdGhlIGxpc3QgaW4gdGhlIGludGVydmFsIFs6bGVmdDpdIHRvIFs6cmlnaHQ6XSAoYm90aCBpbmNsdXNpdmUpLgogICAqLwogIHN0YXRpYyB2b2lkIF9kb1NvcnQ8RT4oCiAgICAgIExpc3Q8RT4gYSwgaW50IGxlZnQsIGludCByaWdodCwgaW50IGNvbXBhcmUoRSBhLCBFIGIpKSB7CiAgICBpZiAoKHJpZ2h0IC0gbGVmdCkgPD0gX0lOU0VSVElPTl9TT1JUX1RIUkVTSE9MRCkgewogICAgICBfaW5zZXJ0aW9uU29ydChhLCBsZWZ0LCByaWdodCwgY29tcGFyZSk7CiAgICB9IGVsc2UgewogICAgICBfZHVhbFBpdm90UXVpY2tzb3J0KGEsIGxlZnQsIHJpZ2h0LCBjb21wYXJlKTsKICAgIH0KICB9CgogIHN0YXRpYyB2b2lkIF9pbnNlcnRpb25Tb3J0PEU+KAogICAgICBMaXN0PEU+IGEsIGludCBsZWZ0LCBpbnQgcmlnaHQsIGludCBjb21wYXJlKEUgYSwgRSBiKSkgewogICAgZm9yIChpbnQgaSA9IGxlZnQgKyAxOyBpIDw9IHJpZ2h0OyBpKyspIHsKICAgICAgdmFyIGVsID0gYVtpXTsKICAgICAgaW50IGogPSBpOwogICAgICB3aGlsZSAoKGogPiBsZWZ0KSAmJiAoY29tcGFyZShhW2ogLSAxXSwgZWwpID4gMCkpIHsKICAgICAgICBhW2pdID0gYVtqIC0gMV07CiAgICAgICAgai0tOwogICAgICB9CiAgICAgIGFbal0gPSBlbDsKICAgIH0KICB9CgogIHN0YXRpYyB2b2lkIF9kdWFsUGl2b3RRdWlja3NvcnQ8RT4oCiAgICAgIExpc3Q8RT4gYSwgaW50IGxlZnQsIGludCByaWdodCwgaW50IGNvbXBhcmUoRSBhLCBFIGIpKSB7CiAgICBhc3NlcnQocmlnaHQgLSBsZWZ0ID4gX0lOU0VSVElPTl9TT1JUX1RIUkVTSE9MRCk7CgogICAgLy8gQ29tcHV0ZSB0aGUgdHdvIHBpdm90cyBieSBsb29raW5nIGF0IDUgZWxlbWVudHMuCiAgICBpbnQgc2l4dGggPSAocmlnaHQgLSBsZWZ0ICsgMSkgfi8gNjsKICAgIGludCBpbmRleDEgPSBsZWZ0ICsgc2l4dGg7CiAgICBpbnQgaW5kZXg1ID0gcmlnaHQgLSBzaXh0aDsKICAgIGludCBpbmRleDMgPSAobGVmdCArIHJpZ2h0KSB+LyAyOyAvLyBUaGUgbWlkcG9pbnQuCiAgICBpbnQgaW5kZXgyID0gaW5kZXgzIC0gc2l4dGg7CiAgICBpbnQgaW5kZXg0ID0gaW5kZXgzICsgc2l4dGg7CgogICAgdmFyIGVsMSA9IGFbaW5kZXgxXTsKICAgIHZhciBlbDIgPSBhW2luZGV4Ml07CiAgICB2YXIgZWwzID0gYVtpbmRleDNdOwogICAgdmFyIGVsNCA9IGFbaW5kZXg0XTsKICAgIHZhciBlbDUgPSBhW2luZGV4NV07CgogICAgLy8gU29ydCB0aGUgc2VsZWN0ZWQgNSBlbGVtZW50cyB1c2luZyBhIHNvcnRpbmcgbmV0d29yay4KICAgIGlmIChjb21wYXJlKGVsMSwgZWwyKSA+IDApIHsKICAgICAgdmFyIHQgPSBlbDE7CiAgICAgIGVsMSA9IGVsMjsKICAgICAgZWwyID0gdDsKICAgIH0KICAgIGlmIChjb21wYXJlKGVsNCwgZWw1KSA+IDApIHsKICAgICAgdmFyIHQgPSBlbDQ7CiAgICAgIGVsNCA9IGVsNTsKICAgICAgZWw1ID0gdDsKICAgIH0KICAgIGlmIChjb21wYXJlKGVsMSwgZWwzKSA+IDApIHsKICAgICAgdmFyIHQgPSBlbDE7CiAgICAgIGVsMSA9IGVsMzsKICAgICAgZWwzID0gdDsKICAgIH0KICAgIGlmIChjb21wYXJlKGVsMiwgZWwzKSA+IDApIHsKICAgICAgdmFyIHQgPSBlbDI7CiAgICAgIGVsMiA9IGVsMzsKICAgICAgZWwzID0gdDsKICAgIH0KICAgIGlmIChjb21wYXJlKGVsMSwgZWw0KSA+IDApIHsKICAgICAgdmFyIHQgPSBlbDE7CiAgICAgIGVsMSA9IGVsNDsKICAgICAgZWw0ID0gdDsKICAgIH0KICAgIGlmIChjb21wYXJlKGVsMywgZWw0KSA+IDApIHsKICAgICAgdmFyIHQgPSBlbDM7CiAgICAgIGVsMyA9IGVsNDsKICAgICAgZWw0ID0gdDsKICAgIH0KICAgIGlmIChjb21wYXJlKGVsMiwgZWw1KSA+IDApIHsKICAgICAgdmFyIHQgPSBlbDI7CiAgICAgIGVsMiA9IGVsNTsKICAgICAgZWw1ID0gdDsKICAgIH0KICAgIGlmIChjb21wYXJlKGVsMiwgZWwzKSA+IDApIHsKICAgICAgdmFyIHQgPSBlbDI7CiAgICAgIGVsMiA9IGVsMzsKICAgICAgZWwzID0gdDsKICAgIH0KICAgIGlmIChjb21wYXJlKGVsNCwgZWw1KSA+IDApIHsKICAgICAgdmFyIHQgPSBlbDQ7CiAgICAgIGVsNCA9IGVsNTsKICAgICAgZWw1ID0gdDsKICAgIH0KCiAgICB2YXIgcGl2b3QxID0gZWwyOwogICAgdmFyIHBpdm90MiA9IGVsNDsKCiAgICAvLyBlbDIgYW5kIGVsNCBoYXZlIGJlZW4gc2F2ZWQgaW4gdGhlIHBpdm90IHZhcmlhYmxlcy4gVGhleSB3aWxsIGJlIHdyaXR0ZW4KICAgIC8vIGJhY2ssIG9uY2UgdGhlIHBhcnRpdGlvbmluZyBpcyBmaW5pc2hlZC4KICAgIGFbaW5kZXgxXSA9IGVsMTsKICAgIGFbaW5kZXgzXSA9IGVsMzsKICAgIGFbaW5kZXg1XSA9IGVsNTsKCiAgICBhW2luZGV4Ml0gPSBhW2xlZnRdOwogICAgYVtpbmRleDRdID0gYVtyaWdodF07CgogICAgaW50IGxlc3MgPSBsZWZ0ICsgMTsgLy8gRmlyc3QgZWxlbWVudCBpbiB0aGUgbWlkZGxlIHBhcnRpdGlvbi4KICAgIGludCBncmVhdCA9IHJpZ2h0IC0gMTsgLy8gTGFzdCBlbGVtZW50IGluIHRoZSBtaWRkbGUgcGFydGl0aW9uLgoKICAgIGJvb2wgcGl2b3RzX2FyZV9lcXVhbCA9IChjb21wYXJlKHBpdm90MSwgcGl2b3QyKSA9PSAwKTsKICAgIGlmIChwaXZvdHNfYXJlX2VxdWFsKSB7CiAgICAgIHZhciBwaXZvdCA9IHBpdm90MTsKICAgICAgLy8gRGVnZW5lcmF0ZWQgY2FzZSB3aGVyZSB0aGUgcGFydGl0aW9uaW5nIGJlY29tZXMgYSBEdXRjaCBuYXRpb25hbCBmbGFnCiAgICAgIC8vIHByb2JsZW0uCiAgICAgIC8vCiAgICAgIC8vIFsgfCAgPCBwaXZvdCAgfCA9PSBwaXZvdCB8IHVucGFydGl0aW9uZWQgfCA+IHBpdm90ICB8IF0KICAgICAgLy8gIF4gICAgICAgICAgICAgXiAgICAgICAgICBeICAgICAgICAgICAgIF4gICAgICAgICAgICBeCiAgICAgIC8vIGxlZnQgICAgICAgICBsZXNzICAgICAgICAgayAgICAgICAgICAgZ3JlYXQgICAgICAgICByaWdodAogICAgICAvLwogICAgICAvLyBhW2xlZnRdIGFuZCBhW3JpZ2h0XSBhcmUgdW5kZWZpbmVkIGFuZCBhcmUgZmlsbGVkIGFmdGVyIHRoZQogICAgICAvLyBwYXJ0aXRpb25pbmcuCiAgICAgIC8vCiAgICAgIC8vIEludmFyaWFudHM6CiAgICAgIC8vICAgMSkgZm9yIHggaW4gXWxlZnQsIGxlc3NbIDogeCA8IHBpdm90LgogICAgICAvLyAgIDIpIGZvciB4IGluIFtsZXNzLCBrWyA6IHggPT0gcGl2b3QuCiAgICAgIC8vICAgMykgZm9yIHggaW4gXWdyZWF0LCByaWdodFsgOiB4ID4gcGl2b3QuCiAgICAgIGZvciAoaW50IGsgPSBsZXNzOyBrIDw9IGdyZWF0OyBrKyspIHsKICAgICAgICB2YXIgYWsgPSBhW2tdOwogICAgICAgIGludCBjb21wID0gY29tcGFyZShhaywgcGl2b3QpOwogICAgICAgIGlmIChjb21wID09IDApIGNvbnRpbnVlOwogICAgICAgIGlmIChjb21wIDwgMCkgewogICAgICAgICAgaWYgKGsgIT0gbGVzcykgewogICAgICAgICAgICBhW2tdID0gYVtsZXNzXTsKICAgICAgICAgICAgYVtsZXNzXSA9IGFrOwogICAgICAgICAgfQogICAgICAgICAgbGVzcysrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBjb21wID4gMC4KICAgICAgICAgIC8vCiAgICAgICAgICAvLyBGaW5kIHRoZSBmaXJzdCBlbGVtZW50IDw9IHBpdm90IGluIHRoZSByYW5nZSBbayAtIDEsIGdyZWF0XSBhbmQKICAgICAgICAgIC8vIHB1dCBbOmFrOl0gdGhlcmUuIFdlIGtub3cgdGhhdCBzdWNoIGFuIGVsZW1lbnQgbXVzdCBleGlzdDoKICAgICAgICAgIC8vIFdoZW4gayA9PSBsZXNzLCB0aGVuIGVsMyAod2hpY2ggaXMgZXF1YWwgdG8gcGl2b3QpIGxpZXMgaW4gdGhlCiAgICAgICAgICAvLyBpbnRlcnZhbC4gT3RoZXJ3aXNlIGFbayAtIDFdID09IHBpdm90IGFuZCB0aGUgc2VhcmNoIHN0b3BzIGF0IGstMS4KICAgICAgICAgIC8vIE5vdGUgdGhhdCBpbiB0aGUgbGF0dGVyIGNhc2UgaW52YXJpYW50IDIgd2lsbCBiZSB2aW9sYXRlZCBmb3IgYQogICAgICAgICAgLy8gc2hvcnQgYW1vdW50IG9mIHRpbWUuIFRoZSBpbnZhcmlhbnQgd2lsbCBiZSByZXN0b3JlZCB3aGVuIHRoZQogICAgICAgICAgLy8gcGl2b3RzIGFyZSBwdXQgaW50byB0aGVpciBmaW5hbCBwb3NpdGlvbnMuCiAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICBjb21wID0gY29tcGFyZShhW2dyZWF0XSwgcGl2b3QpOwogICAgICAgICAgICBpZiAoY29tcCA+IDApIHsKICAgICAgICAgICAgICBncmVhdC0tOwogICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIG9ubHkgbG9jYXRpb24gaW4gdGhlIHdoaWxlLWxvb3Agd2hlcmUgYSBuZXcKICAgICAgICAgICAgICAvLyBpdGVyYXRpb24gaXMgc3RhcnRlZC4KICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfSBlbHNlIGlmIChjb21wIDwgMCkgewogICAgICAgICAgICAgIC8vIFRyaXBsZSBleGNoYW5nZS4KICAgICAgICAgICAgICBhW2tdID0gYVtsZXNzXTsKICAgICAgICAgICAgICBhW2xlc3MrK10gPSBhW2dyZWF0XTsKICAgICAgICAgICAgICBhW2dyZWF0LS1dID0gYWs7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgLy8gY29tcCA9PSAwOwogICAgICAgICAgICAgIGFba10gPSBhW2dyZWF0XTsKICAgICAgICAgICAgICBhW2dyZWF0LS1dID0gYWs7CiAgICAgICAgICAgICAgLy8gTm90ZTogaWYgZ3JlYXQgPCBrIHRoZW4gd2Ugd2lsbCBleGl0IHRoZSBvdXRlciBsb29wIGFuZCBmaXgKICAgICAgICAgICAgICAvLyBpbnZhcmlhbnQgMiAod2hpY2ggd2UganVzdCB2aW9sYXRlZCkuCiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIFdlIHBhcnRpdGlvbiB0aGUgbGlzdCBpbnRvIHRocmVlIHBhcnRzOgogICAgICAvLyAgMS4gPCBwaXZvdDEKICAgICAgLy8gIDIuID49IHBpdm90MSAmJiA8PSBwaXZvdDIKICAgICAgLy8gIDMuID4gcGl2b3QyCiAgICAgIC8vCiAgICAgIC8vIER1cmluZyB0aGUgbG9vcCB3ZSBoYXZlOgogICAgICAvLyBbIHwgPCBwaXZvdDEgfCA+PSBwaXZvdDEgJiYgPD0gcGl2b3QyIHwgdW5wYXJ0aXRpb25lZCAgfCA+IHBpdm90MiAgfCBdCiAgICAgIC8vICBeICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgIF4gICAgICAgICAgICAgXgogICAgICAvLyBsZWZ0ICAgICAgICAgbGVzcyAgICAgICAgICAgICAgICAgICAgIGsgICAgICAgICAgICAgIGdyZWF0ICAgICAgICByaWdodAogICAgICAvLwogICAgICAvLyBhW2xlZnRdIGFuZCBhW3JpZ2h0XSBhcmUgdW5kZWZpbmVkIGFuZCBhcmUgZmlsbGVkIGFmdGVyIHRoZQogICAgICAvLyBwYXJ0aXRpb25pbmcuCiAgICAgIC8vCiAgICAgIC8vIEludmFyaWFudHM6CiAgICAgIC8vICAgMS4gZm9yIHggaW4gXWxlZnQsIGxlc3NbIDogeCA8IHBpdm90MQogICAgICAvLyAgIDIuIGZvciB4IGluIFtsZXNzLCBrWyA6IHBpdm90MSA8PSB4ICYmIHggPD0gcGl2b3QyCiAgICAgIC8vICAgMy4gZm9yIHggaW4gXWdyZWF0LCByaWdodFsgOiB4ID4gcGl2b3QyCiAgICAgIGZvciAoaW50IGsgPSBsZXNzOyBrIDw9IGdyZWF0OyBrKyspIHsKICAgICAgICB2YXIgYWsgPSBhW2tdOwogICAgICAgIGludCBjb21wX3Bpdm90MSA9IGNvbXBhcmUoYWssIHBpdm90MSk7CiAgICAgICAgaWYgKGNvbXBfcGl2b3QxIDwgMCkgewogICAgICAgICAgaWYgKGsgIT0gbGVzcykgewogICAgICAgICAgICBhW2tdID0gYVtsZXNzXTsKICAgICAgICAgICAgYVtsZXNzXSA9IGFrOwogICAgICAgICAgfQogICAgICAgICAgbGVzcysrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbnQgY29tcF9waXZvdDIgPSBjb21wYXJlKGFrLCBwaXZvdDIpOwogICAgICAgICAgaWYgKGNvbXBfcGl2b3QyID4gMCkgewogICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgIGludCBjb21wID0gY29tcGFyZShhW2dyZWF0XSwgcGl2b3QyKTsKICAgICAgICAgICAgICBpZiAoY29tcCA+IDApIHsKICAgICAgICAgICAgICAgIGdyZWF0LS07CiAgICAgICAgICAgICAgICBpZiAoZ3JlYXQgPCBrKSBicmVhazsKICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIG9ubHkgbG9jYXRpb24gaW5zaWRlIHRoZSBsb29wIHdoZXJlIGEgbmV3CiAgICAgICAgICAgICAgICAvLyBpdGVyYXRpb24gaXMgc3RhcnRlZC4KICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBhW2dyZWF0XSA8PSBwaXZvdDIuCiAgICAgICAgICAgICAgICBjb21wID0gY29tcGFyZShhW2dyZWF0XSwgcGl2b3QxKTsKICAgICAgICAgICAgICAgIGlmIChjb21wIDwgMCkgewogICAgICAgICAgICAgICAgICAvLyBUcmlwbGUgZXhjaGFuZ2UuCiAgICAgICAgICAgICAgICAgIGFba10gPSBhW2xlc3NdOwogICAgICAgICAgICAgICAgICBhW2xlc3MrK10gPSBhW2dyZWF0XTsKICAgICAgICAgICAgICAgICAgYVtncmVhdC0tXSA9IGFrOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgLy8gYVtncmVhdF0gPj0gcGl2b3QxLgogICAgICAgICAgICAgICAgICBhW2tdID0gYVtncmVhdF07CiAgICAgICAgICAgICAgICAgIGFbZ3JlYXQtLV0gPSBhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIE1vdmUgcGl2b3RzIGludG8gdGhlaXIgZmluYWwgcG9zaXRpb25zLgogICAgLy8gV2Ugc2hydW5rIHRoZSBsaXN0IGZyb20gYm90aCBzaWRlcyAoYVtsZWZ0XSBhbmQgYVtyaWdodF0gaGF2ZQogICAgLy8gbWVhbmluZ2xlc3MgdmFsdWVzIGluIHRoZW0pIGFuZCBub3cgd2UgbW92ZSBlbGVtZW50cyBmcm9tIHRoZSBmaXJzdAogICAgLy8gYW5kIHRoaXJkIHBhcnRpdGlvbiBpbnRvIHRoZXNlIGxvY2F0aW9ucyBzbyB0aGF0IHdlIGNhbiBzdG9yZSB0aGUKICAgIC8vIHBpdm90cy4KICAgIGFbbGVmdF0gPSBhW2xlc3MgLSAxXTsKICAgIGFbbGVzcyAtIDFdID0gcGl2b3QxOwogICAgYVtyaWdodF0gPSBhW2dyZWF0ICsgMV07CiAgICBhW2dyZWF0ICsgMV0gPSBwaXZvdDI7CgogICAgLy8gVGhlIGxpc3QgaXMgbm93IHBhcnRpdGlvbmVkIGludG8gdGhyZWUgcGFydGl0aW9uczoKICAgIC8vIFsgPCBwaXZvdDEgICB8ID49IHBpdm90MSAmJiA8PSBwaXZvdDIgICB8ICA+IHBpdm90MiAgIF0KICAgIC8vICBeICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgXgogICAgLy8gbGVmdCAgICAgICAgIGxlc3MgICAgICAgICAgICAgICAgICAgICBncmVhdCAgICAgICAgcmlnaHQKCiAgICAvLyBSZWN1cnNpdmUgZGVzY2VudC4gKERvbid0IGluY2x1ZGUgdGhlIHBpdm90IHZhbHVlcy4pCiAgICBfZG9Tb3J0KGEsIGxlZnQsIGxlc3MgLSAyLCBjb21wYXJlKTsKICAgIF9kb1NvcnQoYSwgZ3JlYXQgKyAyLCByaWdodCwgY29tcGFyZSk7CgogICAgaWYgKHBpdm90c19hcmVfZXF1YWwpIHsKICAgICAgLy8gQWxsIGVsZW1lbnRzIGluIHRoZSBzZWNvbmQgcGFydGl0aW9uIGFyZSBlcXVhbCB0byB0aGUgcGl2b3QuIE5vCiAgICAgIC8vIG5lZWQgdG8gc29ydCB0aGVtLgogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gSW4gdGhlb3J5IGl0IHNob3VsZCBiZSBlbm91Z2ggdG8gY2FsbCBfZG9Tb3J0IHJlY3Vyc2l2ZWx5IG9uIHRoZSBzZWNvbmQKICAgIC8vIHBhcnRpdGlvbi4KICAgIC8vIFRoZSBBbmRyb2lkIHNvdXJjZSBob3dldmVyIHJlbW92ZXMgdGhlIHBpdm90IGVsZW1lbnRzIGZyb20gdGhlIHJlY3Vyc2l2ZQogICAgLy8gY2FsbCBpZiB0aGUgc2Vjb25kIHBhcnRpdGlvbiBpcyB0b28gbGFyZ2UgKG1vcmUgdGhhbiAyLzMgb2YgdGhlIGxpc3QpLgogICAgaWYgKGxlc3MgPCBpbmRleDEgJiYgZ3JlYXQgPiBpbmRleDUpIHsKICAgICAgd2hpbGUgKGNvbXBhcmUoYVtsZXNzXSwgcGl2b3QxKSA9PSAwKSB7CiAgICAgICAgbGVzcysrOwogICAgICB9CiAgICAgIHdoaWxlIChjb21wYXJlKGFbZ3JlYXRdLCBwaXZvdDIpID09IDApIHsKICAgICAgICBncmVhdC0tOwogICAgICB9CgogICAgICAvLyBDb3B5IHBhc3RlIG9mIHRoZSBwcmV2aW91cyAzLXdheSBwYXJ0aXRpb25pbmcgd2l0aCBhZGFwdGlvbnMuCiAgICAgIC8vCiAgICAgIC8vIFdlIHBhcnRpdGlvbiB0aGUgbGlzdCBpbnRvIHRocmVlIHBhcnRzOgogICAgICAvLyAgMS4gPT0gcGl2b3QxCiAgICAgIC8vICAyLiA+IHBpdm90MSAmJiA8IHBpdm90MgogICAgICAvLyAgMy4gPT0gcGl2b3QyCiAgICAgIC8vCiAgICAgIC8vIER1cmluZyB0aGUgbG9vcCB3ZSBoYXZlOgogICAgICAvLyBbID09IHBpdm90MSB8ID4gcGl2b3QxICYmIDwgcGl2b3QyIHwgdW5wYXJ0aXRpb25lZCAgfCA9PSBwaXZvdDIgXQogICAgICAvLyAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICBeCiAgICAgIC8vICAgICAgICAgICAgbGVzcyAgICAgICAgICAgICAgICAgICAgIGsgICAgICAgICAgICAgIGdyZWF0CiAgICAgIC8vCiAgICAgIC8vIEludmFyaWFudHM6CiAgICAgIC8vICAgMS4gZm9yIHggaW4gWyAqLCBsZXNzWyA6IHggPT0gcGl2b3QxCiAgICAgIC8vICAgMi4gZm9yIHggaW4gW2xlc3MsIGtbIDogcGl2b3QxIDwgeCAmJiB4IDwgcGl2b3QyCiAgICAgIC8vICAgMy4gZm9yIHggaW4gXWdyZWF0LCAqIF0gOiB4ID09IHBpdm90MgogICAgICBmb3IgKGludCBrID0gbGVzczsgayA8PSBncmVhdDsgaysrKSB7CiAgICAgICAgdmFyIGFrID0gYVtrXTsKICAgICAgICBpbnQgY29tcF9waXZvdDEgPSBjb21wYXJlKGFrLCBwaXZvdDEpOwogICAgICAgIGlmIChjb21wX3Bpdm90MSA9PSAwKSB7CiAgICAgICAgICBpZiAoayAhPSBsZXNzKSB7CiAgICAgICAgICAgIGFba10gPSBhW2xlc3NdOwogICAgICAgICAgICBhW2xlc3NdID0gYWs7CiAgICAgICAgICB9CiAgICAgICAgICBsZXNzKys7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGludCBjb21wX3Bpdm90MiA9IGNvbXBhcmUoYWssIHBpdm90Mik7CiAgICAgICAgICBpZiAoY29tcF9waXZvdDIgPT0gMCkgewogICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgIGludCBjb21wID0gY29tcGFyZShhW2dyZWF0XSwgcGl2b3QyKTsKICAgICAgICAgICAgICBpZiAoY29tcCA9PSAwKSB7CiAgICAgICAgICAgICAgICBncmVhdC0tOwogICAgICAgICAgICAgICAgaWYgKGdyZWF0IDwgaykgYnJlYWs7CiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBvbmx5IGxvY2F0aW9uIGluc2lkZSB0aGUgbG9vcCB3aGVyZSBhIG5ldwogICAgICAgICAgICAgICAgLy8gaXRlcmF0aW9uIGlzIHN0YXJ0ZWQuCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gYVtncmVhdF0gPCBwaXZvdDIuCiAgICAgICAgICAgICAgICBjb21wID0gY29tcGFyZShhW2dyZWF0XSwgcGl2b3QxKTsKICAgICAgICAgICAgICAgIGlmIChjb21wIDwgMCkgewogICAgICAgICAgICAgICAgICAvLyBUcmlwbGUgZXhjaGFuZ2UuCiAgICAgICAgICAgICAgICAgIGFba10gPSBhW2xlc3NdOwogICAgICAgICAgICAgICAgICBhW2xlc3MrK10gPSBhW2dyZWF0XTsKICAgICAgICAgICAgICAgICAgYVtncmVhdC0tXSA9IGFrOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgLy8gYVtncmVhdF0gPT0gcGl2b3QxLgogICAgICAgICAgICAgICAgICBhW2tdID0gYVtncmVhdF07CiAgICAgICAgICAgICAgICAgIGFbZ3JlYXQtLV0gPSBhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICAvLyBUaGUgc2Vjb25kIHBhcnRpdGlvbiBoYXMgbm93IGJlZW4gY2xlYXJlZCBvZiBwaXZvdCBlbGVtZW50cyBhbmQgbG9va3MKICAgICAgLy8gYXMgZm9sbG93czoKICAgICAgLy8gWyAgKiAgfCAgPiBwaXZvdDEgJiYgPCBwaXZvdDIgIHwgKiBdCiAgICAgIC8vICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgIF4KICAgICAgLy8gICAgICAgbGVzcyAgICAgICAgICAgICAgICAgIGdyZWF0CiAgICAgIC8vIFNvcnQgdGhlIHNlY29uZCBwYXJ0aXRpb24gdXNpbmcgcmVjdXJzaXZlIGRlc2NlbnQuCiAgICAgIF9kb1NvcnQoYSwgbGVzcywgZ3JlYXQsIGNvbXBhcmUpOwogICAgfSBlbHNlIHsKICAgICAgLy8gVGhlIHNlY29uZCBwYXJ0aXRpb24gbG9va3MgYXMgZm9sbG93czoKICAgICAgLy8gWyAgKiAgfCAgPj0gcGl2b3QxICYmIDw9IHBpdm90MiAgfCAqIF0KICAgICAgLy8gICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICBeCiAgICAgIC8vICAgICAgIGxlc3MgICAgICAgICAgICAgICAgICAgIGdyZWF0CiAgICAgIC8vIFNpbXBseSBzb3J0IGl0IGJ5IHJlY3Vyc2l2ZSBkZXNjZW50LgogICAgICBfZG9Tb3J0KGEsIGxlc3MsIGdyZWF0LCBjb21wYXJlKTsKICAgIH0KICB9Cn0KgYMATk48ARgBBCMDTCIDRQQNTiUzAQZHGwVOFxwXBU4iBjoqBAEGUB4FRCoFQAZROBoGJwQBBkwGGj83Lw00BgQBIT8uFRE6GQ0IEQYEASY/NgE4KR8gNyEhARkZGRkZAT0hExEPBiETEQ8GIRMRDwYhExEPBiETEQ8GIRMRDwYhExEPBiETEQ8GIRMRDwYBFhYBUDAVFRUBGRoBQ0QBPBwaTxIJQUBDCUUXCRUxLzMsFychGBscGgwSERcNTUhMUE1LOBktHBdJJxgjIh4kHxUVHB8fTTcVDgwKCA0xFiQWCSJQT1EJRRcJFTE+MywXLx8bHBoMEhExIRs0HhkmSSkaFycyICYiKCMZKSMjEhcQDgwKCAYBL0VLSQ8bGh0bATo/PkABPCkrARxJHA4GAU8SUE4rLhAILxEIAUcJMRciFwkiSz5CCRUwPDEsFy8gGxwaDBIRMSIbNB8ZJkkpGhcmMiAmIigjGSkjIxIXEA4MCghPFS4pKzwoDTAwKy0uKAYEAgEYZGFydDpfaW50ZXJuYWwvc29ydC5kYXJ0MG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pbnRlcm5hbC9zeW1ib2wuZGFydJK3Ly8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5faW50ZXJuYWw7CgovKioKICogSW1wbGVtZW50YXRpb24gb2YgW2NvcmUuU3ltYm9sXS4gIFRoaXMgY2xhc3MgdXNlcyB0aGUgc2FtZSBuYW1lIGFzCiAqIGEgY29yZSBjbGFzcyBzbyBhIHVzZXIgY2FuJ3QgdGVsbCB0aGUgZGlmZmVyZW5jZS4KICoKICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBjbGFzcyBpcyB0byBoaWRlIFtfbmFtZV0gZnJvbSB1c2VyIGNvZGUsIGJ1dAogKiBtYWtlIGl0IGFjY2Vzc2libGUgdG8gRGFydCBwbGF0Zm9ybSBjb2RlIHZpYSB0aGUgc3RhdGljIG1ldGhvZAogKiBbZ2V0TmFtZV0uCiAqLwpjbGFzcyBTeW1ib2wgaW1wbGVtZW50cyBjb3JlLlN5bWJvbCB7CiAgZmluYWwgU3RyaW5nIF9uYW1lOwoKICAvKioKICAgKiBTb3VyY2Ugb2YgUmVnRXhwIG1hdGNoaW5nIERhcnQgcmVzZXJ2ZWQgd29yZHMuCiAgICoKICAgKiBSZXNlcnZlZCB3b3JkcyBhcmUgbm90IGFsbG93ZWQgYXMgaWRlbnRpZmllcnMuCiAgICovCiAgc3RhdGljIGNvbnN0IFN0cmluZyByZXNlcnZlZFdvcmRSRSA9CiAgICAgIHInKD86YXNzZXJ0fGJyZWFrfGMoPzphKD86c2V8dGNoKXxsYXNzfG9uKD86c3R8dGludWUpKXxkKD86ZWZhdWx0fG8pfCcKICAgICAgcidlKD86bHNlfG51bXx4dGVuZHMpfGYoPzphbHNlfGluYWwoPzpseSk/fG9yKXxpW2Zuc118big/OmV3fHVsbCl8JwogICAgICByJ3JldCg/Omhyb3d8dXJuKXxzKD86dXBlcnx3aXRjaCl8dCg/OmgoPzppc3xyb3cpfHIoPzp1ZXx5KSl8JwogICAgICByJ3YoPzphcnxvaWQpfHcoPzpoaWxlfGl0aCkpJzsKICAvKioKICAgKiBTb3VyY2Ugb2YgUmVnRXhwIG1hdGNoaW5nIGFueSBwdWJsaWMgaWRlbnRpZmllci4KICAgKgogICAqIEEgcHVibGljIGlkZW50aWZpZXIgaXMgYSB2YWxpZCBpZGVudGlmaWVyIChub3QgYSByZXNlcnZlZCB3b3JkKQogICAqIHRoYXQgZG9lc24ndCBzdGFydCB3aXRoICdfJy4KICAgKi8KICBzdGF0aWMgY29uc3QgU3RyaW5nIHB1YmxpY0lkZW50aWZpZXJSRSA9CiAgICAgIHInKD8hJyAnJHJlc2VydmVkV29yZFJFJyByJ1xiKD8hXCQpKVthLXpBLVokXVtcdyRdKic7CiAgLyoqCiAgICogU291cmNlIG9mIFJlZ0V4cCBtYXRjaGluZyBhbnkgaWRlbnRpZmllci4KICAgKgogICAqIEl0IG1hdGNoZXMgaWRlbnRpZmllcnMgYnV0IG5vdCByZXNlcnZlZCB3b3Jkcy4gVGhlIGlkZW50aWZpZXJzCiAgICogbWF5IHN0YXJ0IHdpdGggJ18nLgogICAqLwogIHN0YXRpYyBjb25zdCBTdHJpbmcgaWRlbnRpZmllclJFID0KICAgICAgcicoPyEnICckcmVzZXJ2ZWRXb3JkUkUnIHInXGIoPyFcJCkpW2EtekEtWiRfXVtcdyRdKic7CiAgLyoqCiAgICogU291cmNlIG9mIFJlZ0V4cCBtYXRjaGluZyBhIGRlY2xhcmFibGUgb3BlcmF0b3IgbmFtZXMuCiAgICoKICAgKiBUaGUgb3BlcmF0b3JzIHRoYXQgY2FuIGJlIGRlY2xhcmVkIHVzaW5nIGBvcGVyYXRvcmAgZGVjbGFyYXRpb25zIGFyZQogICAqIGFsc28gdGhlIG9ubHkgb25lcyBhbGxvd2VkIGFzIHN5bWJvbHMuIFRoZSBuYW1lIG9mIHRoZSBvcGVyYXRvcnMgaXMKICAgKiB0aGUgc2FtZSBhcyB0aGUgb3BlcmF0b3IgaXRzZWxmIGV4Y2VwdCBmb3IgdW5hcnkgbWludXMsIHdoZXJlIHRoZSBuYW1lCiAgICogaXMgInVuYXJ5LSIuCiAgICovCiAgc3RhdGljIGNvbnN0IFN0cmluZyBvcGVyYXRvclJFID0KICAgICAgcicoPzpbXC0rKi8lJnxeXXxcW1xdPT98PT18fi8/fDxbPD1dP3w+Wz49XT98dW5hcnktKSc7CgogIC8vIEdyYW1tYXIgaWYgc3ltYm9sczoKICAvLyAgICBzeW1ib2wgOjo9IHF1YWxpZmllZE5hbWUgfCA8ZW1wdHk+CiAgLy8gICAgcXVhbGlmaWVkTmFtZSA6Oj0gcHVibGljSWRlbnRpZmllciAnLicgcXVhbGlmaWVkTmFtZSB8IG5hbWUKICAvLyAgICBuYW1lIDo6PSBwdWJsaWNJZGVudGlmaWVyCiAgLy8gICAgICAgICAgIHwgcHVibGljSWRlbnRpZmllciAnPScKICAvLyAgICAgICAgICAgfCBvcGVyYXRvcgogIC8vIHdoZXJlIHB1YmxpY0lkZW50aWZpZXIgaXMgYW55IHZhbGlkIGlkZW50aWZpZXIgKG5vdCBhIHJlc2VydmVkIHdvcmQpCiAgLy8gdGhhdCBpc24ndCBwcml2YXRlIChkb2Vzbid0IHN0YXJ0IHdpdGggJ18nKS4KICAvLwogIC8vIFJhaWxyb2FkIGRpYWdyYW0gb2YgdGhlIGFjY2VwdGVkIGdyYW1tYXI6CiAgLy8KICAvLyAgICAvLS0tLS0tLS0tLS0tLS0tLVwKICAvLyAgICB8ICAgICAgICAgICAgICAgIHwKICAvLyAgICB8ICAgICAgICAgIC8tWy5dLS8gICAgIC8tWz1dLVwKICAvLyAgICBcICAgICAgICAgLyAgICAgICAgICAgLyAgICAgICBcCiAgLy8gIC0tLS0tLS1baWRdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4KICAvLyAgICAgICBcICAgICAgICAgICAgICAgICAgICAgLwogIC8vICAgICAgICBcLS0tLS0tW29wZXJhdG9yXS0tLS8KICAvLyAgICAgICAgICAgIFwgICAgICAgICAgICAgIC8KICAvLyAgICAgICAgICAgICBcLS0tLS0tLS0tLS0tLwogIC8vCgogIC8qKgogICAqIFJlZ0V4cCB0aGF0IHZhbGlkYXRlcyBhIG5vbi1lbXB0eSBub24tcHJpdmF0ZSBzeW1ib2wuCiAgICoKICAgKiBUaGUgZW1wdHkgc3ltYm9sIGlzIGhhbmRsZWQgYmVmb3JlIHRoaXMgcmVnZXhwIGlzIHVzZWQsIGFuZCBpcyBub3QKICAgKiBhY2NlcHRlZC4KICAgKi8KICBzdGF0aWMgZmluYWwgUmVnRXhwIHB1YmxpY1N5bWJvbFBhdHRlcm4gPSBuZXcgUmVnRXhwKAogICAgICAnXig/OiRvcGVyYXRvclJFXCR8JHB1YmxpY0lkZW50aWZpZXJSRSg/Oj0/XCR8Wy5dKD8hXCQpKSkrP1wkJyk7CgogIC8vIFRoZSBncmFtbWFyIG9mIHN5bWJvbHMgdGhhdCBtYXkgYmUgcHJpdmF0ZSBpcyB0aGUgc2FtZSBhcyBmb3IgcHVibGljCiAgLy8gc3ltYm9scywgZXhjZXB0IHRoYXQgInB1YmxpY0lkZW50aWZpZXIiIGlzIHJlcGxhY2VkIGJ5ICJpZGVudGlmaWVyIiwKICAvLyB3aGljaCBtYXRjaGVzIGFueSBpZGVudGlmaWVyLgoKICAvKioKICAgKiBSZWdFeHAgdGhhdCB2YWxpZGF0ZXMgYSBub24tZW1wdHkgc3ltYm9sLgogICAqCiAgICogUHJpdmF0ZSBzeW1ib2xzIGFyZSBhY2NlcHRlZC4KICAgKgogICAqIFRoZSBlbXB0eSBzeW1ib2wgaXMgaGFuZGxlZCBiZWZvcmUgdGhpcyByZWdleHAgaXMgdXNlZCwgYW5kIGlzIG5vdAogICAqIGFjY2VwdGVkLgogICAqLwogIHN0YXRpYyBmaW5hbCBSZWdFeHAgc3ltYm9sUGF0dGVybiA9CiAgICAgIG5ldyBSZWdFeHAoJ14oPzokb3BlcmF0b3JSRVwkfCRpZGVudGlmaWVyUkUoPzo9P1wkfFsuXSg/IVwkKSkpKz9cJCcpOwoKICBleHRlcm5hbCBjb25zdCBTeW1ib2woU3RyaW5nIG5hbWUpOwoKICAvKioKICAgKiBQbGF0Zm9ybS1wcml2YXRlIG1ldGhvZCB1c2VkIGJ5IHRoZSBtaXJyb3Igc3lzdGVtIHRvIGNyZWF0ZQogICAqIG90aGVyd2lzZSBpbnZhbGlkIG5hbWVzLgogICAqLwogIGNvbnN0IFN5bWJvbC51bnZhbGlkYXRlZCh0aGlzLl9uYW1lKTsKCiAgLy8gVGhpcyBpcyBjYWxsZWQgYnkgZGFydDJqcy4KICBTeW1ib2wudmFsaWRhdGVkKFN0cmluZyBuYW1lKSA6IHRoaXMuX25hbWUgPSB2YWxpZGF0ZVB1YmxpY1N5bWJvbChuYW1lKTsKCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgPT4gb3RoZXIgaXMgU3ltYm9sICYmIF9uYW1lID09IG90aGVyLl9uYW1lOwoKICBleHRlcm5hbCBpbnQgZ2V0IGhhc2hDb2RlOwoKICBleHRlcm5hbCB0b1N0cmluZygpOwoKICAvLy8gUGxhdGZvcm0tcHJpdmF0ZSBhY2Nlc3NvciB3aGljaCBjYW5ub3QgYmUgY2FsbGVkIGZyb20gdXNlciBsaWJyYXJpZXMuCiAgc3RhdGljIFN0cmluZyBnZXROYW1lKFN5bWJvbCBzeW1ib2wpID0+IHN5bWJvbC5fbmFtZTsKCiAgc3RhdGljIFN0cmluZyB2YWxpZGF0ZVB1YmxpY1N5bWJvbChTdHJpbmcgbmFtZSkgewogICAgaWYgKG5hbWUuaXNFbXB0eSB8fCBwdWJsaWNTeW1ib2xQYXR0ZXJuLmhhc01hdGNoKG5hbWUpKSByZXR1cm4gbmFtZTsKICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoJ18nKSkgewogICAgICAvLyBUaGVyZSBtYXkgYmUgb3RoZXIgcHJpdmF0ZSBwYXJ0cyBpbiBhIHF1YWxpZmllZCBuYW1lIHRoYW4gdGhlIGZpcnN0CiAgICAgIC8vIG9uZSwgYnV0IHRoaXMgaXMgYSBjb21tb24gY2FzZSB0aGF0IGRlc2VydmVzIGEgc3BlY2lmaWMgZXJyb3IKICAgICAgLy8gbWVzc2FnZS4KICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJyIkbmFtZSIgaXMgYSBwcml2YXRlIGlkZW50aWZpZXInKTsKICAgIH0KICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCciJG5hbWUiIGlzIG5vdCBhIHZhbGlkIChxdWFsaWZpZWQpIHN5bWJvbCBuYW1lJyk7CiAgfQoKICAvKioKICAgKiBDaGVja3Mgd2hldGhlciBuYW1lIGlzIGEgdmFsaWQgc3ltYm9sIG5hbWUuCiAgICoKICAgKiBUaGlzIHRlc3QgYWxsb3dzIGJvdGggcHJpdmF0ZSBhbmQgbm9uLXByaXZhdGUgc3ltYm9scy4KICAgKi8KICBzdGF0aWMgYm9vbCBpc1ZhbGlkU3ltYm9sKFN0cmluZyBuYW1lKSB7CiAgICByZXR1cm4gKG5hbWUuaXNFbXB0eSB8fCBzeW1ib2xQYXR0ZXJuLmhhc01hdGNoKG5hbWUpKTsKICB9CgogIGV4dGVybmFsIHN0YXRpYyBTdHJpbmcgY29tcHV0ZVVubWFuZ2xlZE5hbWUoU3ltYm9sIHN5bWJvbCk7Cn0KgJAATk48ARgBBEY1A0RCDgQmFgEGNAU0BidNSkUlBjYFRSIGKzwGLwVEGQYlPQY8BUpJTBIGIz0BGStEIiYaSjIFLwUbGycoLCMiISAFAQY7BUgPBjhHAUpKIwEGLwUjBUgPBiZMASYBBkEeBigBIEsBRgEdARcBTDgBNEkgTUcSQgZPBAEGMQU8Bis7BAE+AgEaZGFydDpfaW50ZXJuYWwvc3ltYm9sLmRhcnQxb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9zeW1ib2xfcGF0Y2guZGFydIaDLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImludGVybmFsX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIFN5bWJvbCB7CiAgQHBhdGNoCiAgY29uc3QgU3ltYm9sKFN0cmluZyBuYW1lKSA6IHRoaXMuX25hbWUgPSBuYW1lOwoKICBAcGF0Y2gKICB0b1N0cmluZygpID0+ICdTeW1ib2woIiR7Y29tcHV0ZVVubWFuZ2xlZE5hbWUodGhpcyl9IiknOwoKICBAcGF0Y2gKICBzdGF0aWMgU3RyaW5nIGNvbXB1dGVVbm1hbmdsZWROYW1lKFN5bWJvbCBzeW1ib2wpIHsKICAgIFN0cmluZyBzdHJpbmcgPSBTeW1ib2wuZ2V0TmFtZShzeW1ib2wpOwoKICAgIC8vIGdldDpmb28gLT4gZm9vCiAgICAvLyBzZXQ6Zm9vIC0+IGZvbz0KICAgIC8vIGdldDpfZm9vQHh4eCAtPiBfZm9vCiAgICAvLyBzZXQ6X2Zvb0B4eHggLT4gX2Zvbz0KICAgIC8vIENsYXNzLl9jb25zdHJ1Y3RvckB4eHggLT4gQ2xhc3MuX2NvbnN0cnVjdG9yCiAgICAvLyBfQ2xhc3NAeHh4Ll9jb25zdHJ1Y3RvckB4eHggLT4gX0NsYXNzLl9jb25zdHJ1Y3RvcgogICAgLy8gbGliLl9TQHh4eCB3aXRoIGxpYi5fTTFAeHh4LCBsaWIuX00yQHh4eCAtPiBsaWIuX1Mgd2l0aCBsaWIuX00xLCBsaWIuX00yCiAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgYm9vbCBhZGRfc2V0dGVyX3N1ZmZpeCA9IGZhbHNlOwogICAgdmFyIHBvcyA9IDA7CiAgICBpZiAoc3RyaW5nLmxlbmd0aCA+PSA0ICYmIHN0cmluZ1szXSA9PSAnOicpIHsKICAgICAgLy8gRHJvcCAnZ2V0Oicgb3IgJ3NldDonIHByZWZpeC4KICAgICAgcG9zID0gNDsKICAgICAgaWYgKHN0cmluZ1swXSA9PSAncycpIHsKICAgICAgICBhZGRfc2V0dGVyX3N1ZmZpeCA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIC8vIFNraXAgZXZlcnl0aGluZyBiZXR3ZWVuIEFUIGFuZCBQRVJJT0QsIFNQQUNFLCBDT01NQSBvciBFTkQKICAgIGJvb2wgc2tpcCA9IGZhbHNlOwogICAgZm9yICg7IHBvcyA8IHN0cmluZy5sZW5ndGg7IHBvcysrKSB7CiAgICAgIHZhciBjaGFyID0gc3RyaW5nW3Bvc107CiAgICAgIGlmIChjaGFyID09ICdAJykgewogICAgICAgIHNraXAgPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKGNoYXIgPT0gJy4nIHx8IGNoYXIgPT0gJyAnIHx8IGNoYXIgPT0gJywnKSB7CiAgICAgICAgc2tpcCA9IGZhbHNlOwogICAgICB9CiAgICAgIGlmICghc2tpcCkgewogICAgICAgIHJlc3VsdC53cml0ZShjaGFyKTsKICAgICAgfQogICAgfQogICAgaWYgKGFkZF9zZXR0ZXJfc3VmZml4KSB7CiAgICAgIHJlc3VsdC53cml0ZSgnPScpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogIH0KCiAgQHBhdGNoCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICBjb25zdCBhcmJpdHJhcnlQcmltZSA9IDY2NDU5NzsKICAgIHJldHVybiAweDFmZmZmZmZmICYgKGFyYml0cmFyeVByaW1lICogX25hbWUuaGFzaENvZGUpOwogIH0KfQo+AE5OPAEiAQcPCTEBCTsBCTYsARYXHB00OlAuJBEyJw8eIggGQhcpHhkVPhYIExwIBh0ZBh4EAQkVIzsEAgEmZGFydDpfaW50ZXJuYWwtcGF0Y2gvc3ltYm9sX3BhdGNoLmRhcnQ1b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2ludGVybmFsL2xpbmtlZF9saXN0LmRhcnSMxS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuX2ludGVybmFsOwoKLy8vIEEgcnVkaW1lbnRhcnkgbGlua2VkIGxpc3QuCmNsYXNzIExpbmtlZExpc3Q8VCBleHRlbmRzIExpbmtlZExpc3RFbnRyeTxUPj4gZXh0ZW5kcyBJdGVyYWJsZUJhc2U8VD4gewogIFQgZmlyc3Q7CiAgVCBsYXN0OwogIGludCBsZW5ndGggPSAwOwoKICBib29sIGdldCBpc0VtcHR5ID0+IGxlbmd0aCA9PSAwOwoKICAvKioKICAgKiBBZGRzIFtuZXdMYXN0XSB0byB0aGUgZW5kIG9mIHRoaXMgbGlua2VkIGxpc3QuCiAgICovCiAgdm9pZCBhZGQoVCBuZXdMYXN0KSB7CiAgICBhc3NlcnQobmV3TGFzdC5fbmV4dCA9PSBudWxsICYmIG5ld0xhc3QuX3ByZXZpb3VzID09IG51bGwpOwogICAgaWYgKGxhc3QgIT0gbnVsbCkgewogICAgICBhc3NlcnQobGFzdC5fbmV4dCA9PSBudWxsKTsKICAgICAgbGFzdC5fbmV4dCA9IG5ld0xhc3Q7CiAgICB9IGVsc2UgewogICAgICBmaXJzdCA9IG5ld0xhc3Q7CiAgICB9CiAgICBuZXdMYXN0Ll9wcmV2aW91cyA9IGxhc3Q7CiAgICBsYXN0ID0gbmV3TGFzdDsKICAgIGxhc3QuX2xpc3QgPSB0aGlzOwogICAgbGVuZ3RoKys7CiAgfQoKICAvKioKICAgKiBBZGRzIFtuZXdGaXJzdF0gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGlzIGxpbmtlZCBsaXN0LgogICAqLwogIHZvaWQgYWRkRmlyc3QoVCBuZXdGaXJzdCkgewogICAgaWYgKGZpcnN0ICE9IG51bGwpIHsKICAgICAgYXNzZXJ0KGZpcnN0Ll9wcmV2aW91cyA9PSBudWxsKTsKICAgICAgZmlyc3QuX3ByZXZpb3VzID0gbmV3Rmlyc3Q7CiAgICB9IGVsc2UgewogICAgICBsYXN0ID0gbmV3Rmlyc3Q7CiAgICB9CiAgICBuZXdGaXJzdC5fbmV4dCA9IGZpcnN0OwogICAgZmlyc3QgPSBuZXdGaXJzdDsKICAgIGZpcnN0Ll9saXN0ID0gdGhpczsKICAgIGxlbmd0aCsrOwogIH0KCiAgLyoqCiAgICogUmVtb3ZlcyB0aGUgZ2l2ZW4gW25vZGVdIGZyb20gdGhpcyBsaXN0LgogICAqCiAgICogSWYgdGhlIGVudHJ5IGlzIG5vdCBpbiB0aGlzIGxpbmtlZCBsaXN0IG5vdGhpbmcgaGFwcGVucy4KICAgKgogICAqIEFsc28gc2VlIFtMaW5rZWRMaXN0RW50cnkudW5saW5rXS4KICAgKi8KICB2b2lkIHJlbW92ZShUIG5vZGUpIHsKICAgIGlmIChub2RlLl9saXN0ICE9IHRoaXMpIHJldHVybjsKICAgIGxlbmd0aC0tOwogICAgaWYgKG5vZGUuX3ByZXZpb3VzID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGlkZW50aWNhbChub2RlLCBmaXJzdCkpOwogICAgICBmaXJzdCA9IG5vZGUuX25leHQ7CiAgICB9IGVsc2UgewogICAgICBub2RlLl9wcmV2aW91cy5fbmV4dCA9IG5vZGUuX25leHQ7CiAgICB9CiAgICBpZiAobm9kZS5fbmV4dCA9PSBudWxsKSB7CiAgICAgIGFzc2VydChpZGVudGljYWwobm9kZSwgbGFzdCkpOwogICAgICBsYXN0ID0gbm9kZS5fcHJldmlvdXM7CiAgICB9IGVsc2UgewogICAgICBub2RlLl9uZXh0Ll9wcmV2aW91cyA9IG5vZGUuX3ByZXZpb3VzOwogICAgfQogICAgbm9kZS5fbmV4dCA9IG5vZGUuX3ByZXZpb3VzID0gbnVsbDsKICAgIG5vZGUuX2xpc3QgPSBudWxsOwogIH0KCiAgSXRlcmF0b3I8VD4gZ2V0IGl0ZXJhdG9yID0+IG5ldyBfTGlua2VkTGlzdEl0ZXJhdG9yPFQ+KHRoaXMpOwp9CgpjbGFzcyBMaW5rZWRMaXN0RW50cnk8VCBleHRlbmRzIExpbmtlZExpc3RFbnRyeTxUPj4gewogIFQgX25leHQ7CiAgVCBfcHJldmlvdXM7CiAgTGlua2VkTGlzdDxUPiBfbGlzdDsKCiAgLyoqCiAgICogVW5saW5rcyB0aGUgZWxlbWVudCBmcm9tIGl0cyBsaW5rZWQgbGlzdC4KICAgKgogICAqIElmIHRoZSBlbnRyeSBpcyBub3QgaW4gYSBsaW5rZWQgbGlzdCwgZG9lcyBub3RoaW5nLiBPdGhlcndpc2UsIHRoaXMKICAgKiBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcgW0xpbmtlZExpc3QucmVtb3ZlXSBvbiB0aGUgbGlzdCB0aGlzIGVudHJ5CiAgICogaXMgY3VycmVudGx5IGluLgogICAqLwogIHZvaWQgdW5saW5rKCkgewogICAgaWYgKF9saXN0ID09IG51bGwpIHJldHVybjsKICAgIF9saXN0LnJlbW92ZSh0aGlzKTsKICB9Cn0KCmNsYXNzIF9MaW5rZWRMaXN0SXRlcmF0b3I8VCBleHRlbmRzIExpbmtlZExpc3RFbnRyeTxUPj4gaW1wbGVtZW50cyBJdGVyYXRvcjxUPiB7CiAgLy8vIFRoZSBjdXJyZW50IGVsZW1lbnQgb2YgdGhlIGl0ZXJhdG9yLgogIC8vIFRoaXMgZmllbGQgaXMgd3JpdGVhYmxlLCBidXQgc2hvdWxkIG9ubHkgcmVhZCBieSB1c2VycyBvZiB0aGlzIGNsYXNzLgogIFQgY3VycmVudDsKCiAgLy8vIFRoZSBsaXN0IHRoZSBpdGVyYXRvciBpdGVyYXRlcyBvdmVyLgogIC8vLwogIC8vLyBTZXQgdG8gW251bGxdIGlmIHRoZSBwcm92aWRlZCBsaXN0IHdhcyBlbXB0eSAoaW5kaWNhdGluZyB0aGF0IHRoZXJlIHdlcmUKICAvLy8gbm8gZW50cmllcyB0byBpdGVyYXRlIG92ZXIpLgogIC8vLwogIC8vLyBTZXQgdG8gW251bGxdIGFzIHNvb24gYXMgW21vdmVOZXh0XSB3YXMgaW52b2tlZCAoaW5kaWNhdGluZyB0aGF0IHRoZQogIC8vLyBpdGVyYXRvciBoYXMgdG8gd29yayB3aXRoIFtjdXJyZW50XSBmcm9tIG5vdyBvbi4KICBMaW5rZWRMaXN0PFQ+IF9saXN0OwoKICBfTGlua2VkTGlzdEl0ZXJhdG9yKHRoaXMuX2xpc3QpIHsKICAgIGlmIChfbGlzdC5sZW5ndGggPT0gMCkgX2xpc3QgPSBudWxsOwogIH0KCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIC8vIGN1cnJlbnQgaXMgbnVsbCBpZiB0aGUgaXRlcmF0b3IgaGFzbid0IHN0YXJ0ZWQgaXRlcmF0aW5nLCBvciBpZiB0aGUKICAgIC8vIGl0ZXJhdGlvbiBpcyBmaW5pc2hlZC4gSW4gdGhlIGZpcnN0IGNhc2UsIHRoZSBbX2xpc3RdIGZpZWxkIGlzIG5vdCBudWxsLgogICAgaWYgKGN1cnJlbnQgPT0gbnVsbCkgewogICAgICBpZiAoX2xpc3QgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICBhc3NlcnQoX2xpc3QubGVuZ3RoID4gMCk7CiAgICAgIGN1cnJlbnQgPSBfbGlzdC5maXJzdDsKICAgICAgX2xpc3QgPSBudWxsOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGN1cnJlbnQgPSBjdXJyZW50Ll9uZXh0OwogICAgcmV0dXJuIGN1cnJlbnQgIT0gbnVsbDsKICB9Cn0KgIAATk48ARgBH0kLChIBIwEGNAYYQBgiHA0XBh4UFw4EAQY7Bh4ZJyINFwYcFhgOBAEGLgU+BSgGGCQOIiYaDSkGHiUdDS0GKBcEAUACATYLDxcBBi8FSUkWBhIfGAQCAVErSw0BKwZPIwZLNxcBJCkEARRLUBsnIB0UEwYdHAQCAR9kYXJ0Ol9pbnRlcm5hbC9saW5rZWRfbGlzdC5kYXJ0MG9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvcHJpbnRfcGF0Y2guZGFydIL8Ly8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImludGVybmFsX3BhdGNoLmRhcnQiOwoKLy8gQSBwcmludC1jbG9zdXJlIGdldHMgYSBTdHJpbmcgdGhhdCBzaG91bGQgYmUgcHJpbnRlZC4gSW4gZ2VuZXJhbCB0aGUKLy8gc3RyaW5nIGlzIGEgbGluZSwgYnV0IGl0IG1heSBjb250YWluICJcbiIgY2hhcmFjdGVycy4KdHlwZWRlZiB2b2lkIF9QcmludENsb3N1cmUoU3RyaW5nIGxpbmUpOwoKQHBhdGNoCnZvaWQgcHJpbnRUb0NvbnNvbGUoU3RyaW5nIGxpbmUpIHsKICBfcHJpbnRDbG9zdXJlKGxpbmUpOwp9Cgp2b2lkIF91bnN1cHBvcnRlZFByaW50KFN0cmluZyBsaW5lKSB7CiAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIidwcmludCcgaXMgbm90IHN1cHBvcnRlZCIpOwp9CgovLyBfcHJpbnRDbG9zdXJlIGNhbiBiZSBvdmVyd3JpdHRlbiBieSB0aGUgZW1iZWRkZXIgdG8gc3VwcGx5IGEgZGlmZmVyZW50Ci8vIHByaW50IGltcGxlbWVudGF0aW9uLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCl9QcmludENsb3N1cmUgX3ByaW50Q2xvc3VyZSA9IF91bnN1cHBvcnRlZFByaW50OwoZAE5OPAEiAUg5KQEHIxcCASY6AgFKGRoxASVkYXJ0Ol9pbnRlcm5hbC1wYXRjaC9wcmludF9wYXRjaC5kYXJ0L29yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pbnRlcm5hbC9wcmludC5kYXJ0gjUvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0Ll9pbnRlcm5hbDsKCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGlzIHNldCBieSB0aGUgZmlyc3QgYWxsb2NhdGlvbiBvZiBhIFpvbmUuCiAqCiAqIE9uY2UgdGhlIGZ1bmN0aW9uIGlzIHNldCB0aGUgY29yZSBgcHJpbnRgIGZ1bmN0aW9uIGNhbGxzIHRoaXMgY2xvc3VyZSBpbnN0ZWFkCiAqIG9mIFtwcmludFRvQ29uc29sZV0uCiAqCiAqIFRoaXMgZGVjb3VwbGVzIHRoZSBjb3JlIGxpYnJhcnkgZnJvbSB0aGUgYXN5bmMgbGlicmFyeS4KICovCnZvaWQgRnVuY3Rpb24oU3RyaW5nKSBwcmludFRvWm9uZSA9IG51bGw7CgpleHRlcm5hbCB2b2lkIHByaW50VG9Db25zb2xlKFN0cmluZyBsaW5lKTsKEwBOTjwBGAEEOwNRGAM7BCoBKwEZZGFydDpfaW50ZXJuYWwvcHJpbnQuZGFydDBvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaXNvbGF0ZS9pc29sYXRlLmRhcnTAAHd2Ly8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8qKgogKiBDb25jdXJyZW50IHByb2dyYW1taW5nIHVzaW5nIF9pc29sYXRlc186CiAqIGluZGVwZW5kZW50IHdvcmtlcnMgdGhhdCBhcmUgc2ltaWxhciB0byB0aHJlYWRzCiAqIGJ1dCBkb24ndCBzaGFyZSBtZW1vcnksCiAqIGNvbW11bmljYXRpbmcgb25seSB2aWEgbWVzc2FnZXMuCiAqCiAqIFRvIHVzZSB0aGlzIGxpYnJhcnkgaW4geW91ciBjb2RlOgogKgogKiAgICAgaW1wb3J0ICdkYXJ0Omlzb2xhdGUnOwogKgogKiB7QGNhdGVnb3J5IFZNfQogKi8KbGlicmFyeSBkYXJ0Lmlzb2xhdGU7CgppbXBvcnQgImRhcnQ6YXN5bmMiOwppbXBvcnQgImRhcnQ6X2ludGVybmFsIiBzaG93IFNpbmNlOwppbXBvcnQgImRhcnQ6dHlwZWRfZGF0YSIgc2hvdyBCeXRlQnVmZmVyLCBUeXBlZERhdGEsIFVpbnQ4TGlzdDsKCnBhcnQgImNhcGFiaWxpdHkuZGFydCI7CgovKioKICogVGhyb3duIHdoZW4gYW4gaXNvbGF0ZSBjYW5ub3QgYmUgY3JlYXRlZC4KICovCmNsYXNzIElzb2xhdGVTcGF3bkV4Y2VwdGlvbiBpbXBsZW1lbnRzIEV4Y2VwdGlvbiB7CiAgLyoqIEVycm9yIG1lc3NhZ2UgcmVwb3J0ZWQgYnkgdGhlIHNwYXduIG9wZXJhdGlvbi4gKi8KICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgSXNvbGF0ZVNwYXduRXhjZXB0aW9uKHRoaXMubWVzc2FnZSk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIklzb2xhdGVTcGF3bkV4Y2VwdGlvbjogJG1lc3NhZ2UiOwp9CgovKioKICogQW4gaXNvbGF0ZWQgRGFydCBleGVjdXRpb24gY29udGV4dC4KICoKICogQWxsIERhcnQgY29kZSBydW5zIGluIGFuIGlzb2xhdGUsIGFuZCBjb2RlIGNhbiBhY2Nlc3MgY2xhc3NlcyBhbmQgdmFsdWVzCiAqIG9ubHkgZnJvbSB0aGUgc2FtZSBpc29sYXRlLiBEaWZmZXJlbnQgaXNvbGF0ZXMgY2FuIGNvbW11bmljYXRlIGJ5IHNlbmRpbmcKICogdmFsdWVzIHRocm91Z2ggcG9ydHMgKHNlZSBbUmVjZWl2ZVBvcnRdLCBbU2VuZFBvcnRdKS4KICoKICogQW4gYElzb2xhdGVgIG9iamVjdCBpcyBhIHJlZmVyZW5jZSB0byBhbiBpc29sYXRlLCB1c3VhbGx5IGRpZmZlcmVudCBmcm9tCiAqIHRoZSBjdXJyZW50IGlzb2xhdGUuCiAqIEl0IHJlcHJlc2VudHMsIGFuZCBjYW4gYmUgdXNlZCB0byBjb250cm9sLCB0aGUgb3RoZXIgaXNvbGF0ZS4KICoKICogV2hlbiBzcGF3bmluZyBhIG5ldyBpc29sYXRlLCB0aGUgc3Bhd25pbmcgaXNvbGF0ZSByZWNlaXZlcyBhbiBgSXNvbGF0ZWAKICogb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbmV3IGlzb2xhdGUgd2hlbiB0aGUgc3Bhd24gb3BlcmF0aW9uIHN1Y2NlZWRzLgogKgogKiBJc29sYXRlcyBydW4gY29kZSBpbiBpdHMgb3duIGV2ZW50IGxvb3AsIGFuZCBlYWNoIGV2ZW50IG1heSBydW4gc21hbGxlciB0YXNrcwogKiBpbiBhIG5lc3RlZCBtaWNyb3Rhc2sgcXVldWUuCiAqCiAqIEFuIGBJc29sYXRlYCBvYmplY3QgYWxsb3dzIG90aGVyIGlzb2xhdGVzIHRvIGNvbnRyb2wgdGhlIGV2ZW50IGxvb3AKICogb2YgdGhlIGlzb2xhdGUgdGhhdCBpdCByZXByZXNlbnRzLCBhbmQgdG8gaW5zcGVjdCB0aGUgaXNvbGF0ZSwKICogZm9yIGV4YW1wbGUgYnkgcGF1c2luZyB0aGUgaXNvbGF0ZSBvciBieSBnZXR0aW5nIGV2ZW50cyB3aGVuIHRoZSBpc29sYXRlCiAqIGhhcyBhbiB1bmNhdWdodCBlcnJvci4KICoKICogVGhlIFtjb250cm9sUG9ydF0gaWRlbnRpZmllcyBhbmQgZ2l2ZXMgYWNjZXNzIHRvIGNvbnRyb2xsaW5nIHRoZSBpc29sYXRlLAogKiBhbmQgdGhlIFtwYXVzZUNhcGFiaWxpdHldIGFuZCBbdGVybWluYXRlQ2FwYWJpbGl0eV0gZ3VhcmQgYWNjZXNzCiAqIHRvIHNvbWUgY29udHJvbCBvcGVyYXRpb25zLgogKiBGb3IgZXhhbXBsZSwgY2FsbGluZyBbcGF1c2VdIG9uIGFuIGBJc29sYXRlYCBvYmplY3QgY3JlYXRlZCB3aXRob3V0IGEKICogW3BhdXNlQ2FwYWJpbGl0eV0sIGhhcyBubyBlZmZlY3QuCiAqCiAqIFRoZSBgSXNvbGF0ZWAgb2JqZWN0IHByb3ZpZGVkIGJ5IGEgc3Bhd24gb3BlcmF0aW9uIHdpbGwgaGF2ZSB0aGUKICogY29udHJvbCBwb3J0IGFuZCBjYXBhYmlsaXRpZXMgbmVlZGVkIHRvIGNvbnRyb2wgdGhlIGlzb2xhdGUuCiAqIE5ldyBpc29sYXRlIG9iamVjdHMgY2FuIGJlIGNyZWF0ZWQgd2l0aG91dCBzb21lIG9mIHRoZXNlIGNhcGFiaWxpdGllcwogKiBpZiBuZWNlc3NhcnksIHVzaW5nIHRoZSBbSXNvbGF0ZS5Jc29sYXRlXSBjb25zdHJ1Y3Rvci4KICoKICogQW4gYElzb2xhdGVgIG9iamVjdCBjYW5ub3QgYmUgc2VudCBvdmVyIGEgYFNlbmRQb3J0YCwgYnV0IHRoZSBjb250cm9sIHBvcnQKICogYW5kIGNhcGFiaWxpdGllcyBjYW4gYmUgc2VudCwgYW5kIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbmluZwogKiBgSXNvbGF0ZWAgb2JqZWN0IGluIHRoZSByZWNlaXZpbmcgcG9ydCdzIGlzb2xhdGUuCiAqLwpjbGFzcyBJc29sYXRlIHsKICAvKiogQXJndW1lbnQgdG8gYHBpbmdgIGFuZCBga2lsbGA6IEFzayBmb3IgaW1tZWRpYXRlIGFjdGlvbi4gKi8KICBzdGF0aWMgY29uc3QgaW50IGltbWVkaWF0ZSA9IDA7CiAgLyoqIEFyZ3VtZW50IHRvIGBwaW5nYCBhbmQgYGtpbGxgOiBBc2sgZm9yIGFjdGlvbiBiZWZvcmUgdGhlIG5leHQgZXZlbnQuICovCiAgc3RhdGljIGNvbnN0IGludCBiZWZvcmVOZXh0RXZlbnQgPSAxOwoKICAvKioKICAgKiBDb250cm9sIHBvcnQgdXNlZCB0byBzZW5kIGNvbnRyb2wgbWVzc2FnZXMgdG8gdGhlIGlzb2xhdGUuCiAgICoKICAgKiBUaGUgY29udHJvbCBwb3J0IGlkZW50aWZpZXMgdGhlIGlzb2xhdGUuCiAgICoKICAgKiBBbiBgSXNvbGF0ZWAgb2JqZWN0IGFsbG93cyBzZW5kaW5nIGNvbnRyb2wgbWVzc2FnZXMKICAgKiB0aHJvdWdoIHRoZSBjb250cm9sIHBvcnQuCiAgICoKICAgKiBTb21lIGNvbnRyb2wgbWVzc2FnZXMgcmVxdWlyZSBhIHNwZWNpZmljIGNhcGFiaWxpdHkgdG8gYmUgcGFzc2VkIGFsb25nCiAgICogd2l0aCB0aGUgbWVzc2FnZSAoc2VlIFtwYXVzZUNhcGFiaWxpdHldIGFuZCBbdGVybWluYXRlQ2FwYWJpbGl0eV0pLAogICAqIG90aGVyd2lzZSB0aGUgbWVzc2FnZSBpcyBpZ25vcmVkIGJ5IHRoZSBpc29sYXRlLgogICAqLwogIGZpbmFsIFNlbmRQb3J0IGNvbnRyb2xQb3J0OwoKICAvKioKICAgKiBDYXBhYmlsaXR5IGdyYW50aW5nIHRoZSBhYmlsaXR5IHRvIHBhdXNlIHRoZSBpc29sYXRlLgogICAqCiAgICogVGhpcyBjYXBhYmlsaXR5IGlzIHJlcXVpcmVkIGJ5IFtwYXVzZV0uCiAgICogSWYgdGhlIGNhcGFiaWxpdHkgaXMgYG51bGxgLCBvciBpZiBpdCBpcyBub3QgdGhlIGNvcnJlY3QgcGF1c2UgY2FwYWJpbGl0eQogICAqIG9mIHRoZSBpc29sYXRlIGlkZW50aWZpZWQgYnkgW2NvbnRyb2xQb3J0XSwKICAgKiB0aGVuIGNhbGxzIHRvIFtwYXVzZV0gd2lsbCBoYXZlIG5vIGVmZmVjdC4KICAgKgogICAqIElmIHRoZSBpc29sYXRlIGlzIHNwYXduZWQgaW4gYSBwYXVzZWQgc3RhdGUsIHVzZSB0aGlzIGNhcGFiaWxpdHkgYXMKICAgKiBhcmd1bWVudCB0byB0aGUgW3Jlc3VtZV0gbWV0aG9kIGluIG9yZGVyIHRvIHJlc3VtZSB0aGUgcGF1c2VkIGlzb2xhdGUuCiAgICovCiAgZmluYWwgQ2FwYWJpbGl0eSBwYXVzZUNhcGFiaWxpdHk7CgogIC8qKgogICAqIENhcGFiaWxpdHkgZ3JhbnRpbmcgdGhlIGFiaWxpdHkgdG8gdGVybWluYXRlIHRoZSBpc29sYXRlLgogICAqCiAgICogVGhpcyBjYXBhYmlsaXR5IGlzIHJlcXVpcmVkIGJ5IFtraWxsXSBhbmQgW3NldEVycm9yc0ZhdGFsXS4KICAgKiBJZiB0aGUgY2FwYWJpbGl0eSBpcyBgbnVsbGAsIG9yIGlmIGl0IGlzIG5vdCB0aGUgY29ycmVjdCB0ZXJtaW5hdGlvbgogICAqIGNhcGFiaWxpdHkgb2YgdGhlIGlzb2xhdGUgaWRlbnRpZmllZCBieSBbY29udHJvbFBvcnRdLAogICAqIHRoZW4gY2FsbHMgdG8gdGhvc2UgbWV0aG9kcyB3aWxsIGhhdmUgbm8gZWZmZWN0LgogICAqLwogIGZpbmFsIENhcGFiaWxpdHkgdGVybWluYXRlQ2FwYWJpbGl0eTsKCiAgLyoqCiAgICogVGhlIG5hbWUgb2YgdGhlIFtJc29sYXRlXSBkaXNwbGF5ZWQgZm9yIGRlYnVnIHB1cnBvc2VzLgogICAqCiAgICogVGhpcyBjYW4gYmUgc2V0IHVzaW5nIHRoZSBgZGVidWdOYW1lYCBwYXJhbWV0ZXIgaW4gW3NwYXduXSBhbmQgW3NwYXduVXJpXS4KICAgKgogICAqIFRoaXMgbmFtZSBkb2VzIG5vdCB1bmlxdWVseSBpZGVudGlmeSBhbiBpc29sYXRlLiBNdWx0aXBsZSBpc29sYXRlcyBpbiB0aGUKICAgKiBzYW1lIHByb2Nlc3MgbWF5IGhhdmUgdGhlIHNhbWUgYGRlYnVnTmFtZWAuCiAgICoKICAgKiBGb3IgYSBnaXZlbiBpc29sYXRlLCB0aGlzIHZhbHVlIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIHZhbHVlcyByZXR1cm5lZCBieQogICAqIGBEYXJ0X0RlYnVnTmFtZWAgaW4gdGhlIEMgZW1iZWRkaW5nIEFQSSBhbmQgdGhlIGBkZWJ1Z05hbWVgIHByb3BlcnR5IGluCiAgICogW0lzb2xhdGVNaXJyb3JdLgogICAqLwogIEBTaW5jZSgiMi4zIikKICBleHRlcm5hbCBTdHJpbmcgZ2V0IGRlYnVnTmFtZTsKCiAgLyoqCiAgICogQ3JlYXRlIGEgbmV3IFtJc29sYXRlXSBvYmplY3Qgd2l0aCBhIHJlc3RyaWN0ZWQgc2V0IG9mIGNhcGFiaWxpdGllcy4KICAgKgogICAqIFRoZSBwb3J0IHNob3VsZCBiZSBhIGNvbnRyb2wgcG9ydCBmb3IgYW4gaXNvbGF0ZSwgYXMgdGFrZW4gZnJvbQogICAqIGFub3RoZXIgYElzb2xhdGVgIG9iamVjdC4KICAgKgogICAqIFRoZSBjYXBhYmlsaXRpZXMgc2hvdWxkIGJlIHRoZSBzdWJzZXQgb2YgdGhlIGNhcGFiaWxpdGllcyB0aGF0IGFyZQogICAqIGF2YWlsYWJsZSB0byB0aGUgb3JpZ2luYWwgaXNvbGF0ZS4KICAgKiBDYXBhYmlsaXRpZXMgb2YgYW4gaXNvbGF0ZSBhcmUgbG9ja2VkIHRvIHRoYXQgaXNvbGF0ZSwgYW5kIGhhdmUgbm8gZWZmZWN0CiAgICogYW55d2hlcmUgZWxzZSwgc28gdGhlIGNhcGFiaWxpdGllcyBzaG91bGQgY29tZSBmcm9tIHRoZSBzYW1lIGlzb2xhdGUgYXMKICAgKiB0aGUgY29udHJvbCBwb3J0LgogICAqCiAgICogQ2FuIGFsc28gYmUgdXNlZCB0byBjcmVhdGUgYW4gW0lzb2xhdGVdIG9iamVjdCBmcm9tIGEgY29udHJvbCBwb3J0LCBhbmQKICAgKiBhbnkgYXZhaWxhYmxlIGNhcGFiaWxpdGllcywgdGhhdCBoYXZlIGJlZW4gc2VudCB0aHJvdWdoIGEgW1NlbmRQb3J0XS4KICAgKgogICAqIEV4YW1wbGU6CiAgICogYGBgZGFydAogICAqIElzb2xhdGUgaXNvbGF0ZSA9IGZpbmRTb21lSXNvbGF0ZSgpOwogICAqIElzb2xhdGUgcmVzdHJpY3RlZElzb2xhdGUgPSBuZXcgSXNvbGF0ZShpc29sYXRlLmNvbnRyb2xQb3J0KTsKICAgKiB1bnRydXN0ZWRDb2RlKHJlc3RyaWN0ZWRJc29sYXRlKTsKICAgKiBgYGAKICAgKiBUaGlzIGV4YW1wbGUgY3JlYXRlcyBhIG5ldyBgSXNvbGF0ZWAgb2JqZWN0IHRoYXQgY2Fubm90IGJlIHVzZWQgdG8KICAgKiBwYXVzZSBvciB0ZXJtaW5hdGUgdGhlIGlzb2xhdGUuIEFsbCB0aGUgdW50cnVzdGVkIGNvZGUgY2FuIGRvIGlzIHRvCiAgICogaW5zcGVjdCB0aGUgaXNvbGF0ZSBhbmQgc2VlIHVuY2F1Z2h0IGVycm9ycyBvciB3aGVuIGl0IHRlcm1pbmF0ZXMuCiAgICovCiAgSXNvbGF0ZSh0aGlzLmNvbnRyb2xQb3J0LCB7dGhpcy5wYXVzZUNhcGFiaWxpdHksIHRoaXMudGVybWluYXRlQ2FwYWJpbGl0eX0pOwoKICAvKioKICAgKiBSZXR1cm4gYW4gW0lzb2xhdGVdIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgaXNvbGF0ZS4KICAgKgogICAqIFRoZSBjdXJyZW50IGlzb2xhdGUgZm9yIGNvZGUgdXNpbmcgW2N1cnJlbnRdCiAgICogaXMgdGhlIGlzb2xhdGUgcnVubmluZyB0aGUgY29kZS4KICAgKgogICAqIFRoZSBpc29sYXRlIG9iamVjdCBwcm92aWRlcyB0aGUgY2FwYWJpbGl0aWVzIHJlcXVpcmVkIHRvIGluc3BlY3QsCiAgICogcGF1c2Ugb3Iga2lsbCB0aGUgaXNvbGF0ZSwgYW5kIGFsbG93cyBncmFudGluZyB0aGVzZSBjYXBhYmlsaXRpZXMKICAgKiB0byBvdGhlcnMuCiAgICoKICAgKiBJdCBpcyBwb3NzaWJsZSB0byBwYXVzZSB0aGUgY3VycmVudCBpc29sYXRlLCBidXQgZG9pbmcgc28gKndpdGhvdXQqCiAgICogZmlyc3QgcGFzc2luZyB0aGUgYWJpbGl0eSB0byByZXN1bWUgaXQgYWdhaW4gdG8gYW5vdGhlciBpc29sYXRlLAogICAqIGlzIGEgc3VyZSB3YXkgdG8gaGFuZyB5b3VyIHByb2dyYW0uCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIElzb2xhdGUgZ2V0IGN1cnJlbnQ7CgogIC8qKgogICAqIFRoZSBsb2NhdGlvbiBvZiB0aGUgcGFja2FnZSBjb25maWd1cmF0aW9uIG9mIHRoZSBjdXJyZW50IGlzb2xhdGUsIGlmIGFueS4KICAgKgogICAqIFRoaXMgZ2V0dGVyIHJldHVybnMgYG51bGxgLCBhcyB0aGUgYHBhY2thZ2VzL2AgZGlyZWN0b3J5IGlzIG5vdCBzdXBwb3J0ZWQKICAgKiBpbiBEYXJ0IDIuCiAgICovCiAgQERlcHJlY2F0ZWQoJ3BhY2thZ2VzLyBkaXJlY3RvcnkgcmVzb2x1dGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluIERhcnQgMi4nKQogIGV4dGVybmFsIHN0YXRpYyBGdXR1cmU8VXJpPiBnZXQgcGFja2FnZVJvb3Q7CgogIC8qKgogICAqIFRoZSBwYWNrYWdlIHJvb3Qgb2YgdGhlIGN1cnJlbnQgaXNvbGF0ZSwgaWYgYW55LgogICAqCiAgICogSWYgdGhlIGlzb2xhdGUgaXMgdXNpbmcgYSBbcGFja2FnZVJvb3RdIG9yIHRoZSBpc29sYXRlIGhhcyBub3QgYmVlbgogICAqIHNldHVwIGZvciBwYWNrYWdlIHJlc29sdXRpb24sIHRoaXMgZ2V0dGVyIHJldHVybnMgYG51bGxgLCBvdGhlcndpc2UgaXQKICAgKiByZXR1cm5zIHRoZSBwYWNrYWdlIGNvbmZpZyBVUkkuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxVcmk+IGdldCBwYWNrYWdlQ29uZmlnOwoKICAvKioKICAgKiBNYXBzIGEgcGFja2FnZTogVVJJIHRvIGEgbm9uLXBhY2thZ2UgVXJpLgogICAqCiAgICogSWYgdGhlcmUgaXMgbm8gdmFsaWQgbWFwcGluZyBmcm9tIHRoZSBwYWNrYWdlOiBVUkkgaW4gdGhlIGN1cnJlbnQKICAgKiBpc29sYXRlLCB0aGVuIHRoaXMgY2FsbCByZXR1cm5zIGBudWxsYC4gTm9uLXBhY2thZ2U6IFVSSXMgYXJlCiAgICogcmV0dXJuZWQgdW5tb2RpZmllZC4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgRnV0dXJlPFVyaT4gcmVzb2x2ZVBhY2thZ2VVcmkoVXJpIHBhY2thZ2VVcmkpOwoKICAvKioKICAgKiBDcmVhdGVzIGFuZCBzcGF3bnMgYW4gaXNvbGF0ZSB0aGF0IHNoYXJlcyB0aGUgc2FtZSBjb2RlIGFzIHRoZSBjdXJyZW50CiAgICogaXNvbGF0ZS4KICAgKgogICAqIFRoZSBhcmd1bWVudCBbZW50cnlQb2ludF0gc3BlY2lmaWVzIHRoZSBpbml0aWFsIGZ1bmN0aW9uIHRvIGNhbGwKICAgKiBpbiB0aGUgc3Bhd25lZCBpc29sYXRlLgogICAqIFRoZSBlbnRyeS1wb2ludCBmdW5jdGlvbiBpcyBpbnZva2VkIGluIHRoZSBuZXcgaXNvbGF0ZSB3aXRoIFttZXNzYWdlXQogICAqIGFzIHRoZSBvbmx5IGFyZ3VtZW50LgogICAqCiAgICogVGhlIGZ1bmN0aW9uIG11c3QgYmUgYSB0b3AtbGV2ZWwgZnVuY3Rpb24gb3IgYSBzdGF0aWMgbWV0aG9kCiAgICogdGhhdCBjYW4gYmUgY2FsbGVkIHdpdGggYSBzaW5nbGUgYXJndW1lbnQsCiAgICogdGhhdCBpcywgYSBjb21waWxlLXRpbWUgY29uc3RhbnQgZnVuY3Rpb24gdmFsdWUKICAgKiB3aGljaCBhY2NlcHRzIGF0IGxlYXN0IG9uZSBwb3NpdGlvbmFsIHBhcmFtZXRlcgogICAqIGFuZCBoYXMgYXQgbW9zdCBvbmUgcmVxdWlyZWQgcG9zaXRpb25hbCBwYXJhbWV0ZXIuCiAgICogVGhlIGZ1bmN0aW9uIG1heSBhY2NlcHQgYW55IG51bWJlciBvZiBvcHRpb25hbCBwYXJhbWV0ZXJzLAogICAqIGFzIGxvbmcgYXMgaXQgKmNhbiogYmUgY2FsbGVkIHdpdGgganVzdCBhIHNpbmdsZSBhcmd1bWVudC4KICAgKiBUaGUgZnVuY3Rpb24gbXVzdCBub3QgYmUgdGhlIHZhbHVlIG9mIGEgZnVuY3Rpb24gZXhwcmVzc2lvbgogICAqIG9yIGFuIGluc3RhbmNlIG1ldGhvZCB0ZWFyLW9mZi4KICAgKgogICAqIFVzdWFsbHkgdGhlIGluaXRpYWwgW21lc3NhZ2VdIGNvbnRhaW5zIGEgW1NlbmRQb3J0XSBzbwogICAqIHRoYXQgdGhlIHNwYXduZXIgYW5kIHNwYXduZWUgY2FuIGNvbW11bmljYXRlIHdpdGggZWFjaCBvdGhlci4KICAgKgogICAqIElmIHRoZSBbcGF1c2VkXSBwYXJhbWV0ZXIgaXMgc2V0IHRvIGB0cnVlYCwKICAgKiB0aGUgaXNvbGF0ZSB3aWxsIHN0YXJ0IHVwIGluIGEgcGF1c2VkIHN0YXRlLAogICAqIGp1c3QgYmVmb3JlIGNhbGxpbmcgdGhlIFtlbnRyeVBvaW50XSBmdW5jdGlvbiB3aXRoIHRoZSBbbWVzc2FnZV0sCiAgICogYXMgaWYgYnkgYW4gaW5pdGlhbCBjYWxsIG9mIGBpc29sYXRlLnBhdXNlKGlzb2xhdGUucGF1c2VDYXBhYmlsaXR5KWAuCiAgICogVG8gcmVzdW1lIHRoZSBpc29sYXRlLCBjYWxsIGBpc29sYXRlLnJlc3VtZShpc29sYXRlLnBhdXNlQ2FwYWJpbGl0eSlgLgogICAqCiAgICogSWYgdGhlIFtlcnJvcnNBcmVGYXRhbF0sIFtvbkV4aXRdIGFuZC9vciBbb25FcnJvcl0gcGFyYW1ldGVycyBhcmUgcHJvdmlkZWQsCiAgICogdGhlIGlzb2xhdGUgd2lsbCBhY3QgYXMgaWYsIHJlc3BlY3RpdmVseSwgW3NldEVycm9yc0ZhdGFsXSwKICAgKiBbYWRkT25FeGl0TGlzdGVuZXJdIGFuZCBbYWRkRXJyb3JMaXN0ZW5lcl0gd2VyZSBjYWxsZWQgd2l0aCB0aGUKICAgKiBjb3JyZXNwb25kaW5nIHBhcmFtZXRlciBhbmQgd2FzIHByb2Nlc3NlZCBiZWZvcmUgdGhlIGlzb2xhdGUgc3RhcnRzCiAgICogcnVubmluZy4KICAgKgogICAqIElmIFtkZWJ1Z05hbWVdIGlzIHByb3ZpZGVkLCB0aGUgc3Bhd25lZCBbSXNvbGF0ZV0gd2lsbCBiZSBpZGVudGlmaWFibGUgYnkKICAgKiB0aGlzIG5hbWUgaW4gZGVidWdnZXJzIGFuZCBsb2dnaW5nLgogICAqCiAgICogSWYgW2Vycm9yc0FyZUZhdGFsXSBpcyBvbWl0dGVkLCB0aGUgcGxhdGZvcm0gbWF5IGNob29zZSBhIGRlZmF1bHQgYmVoYXZpb3IKICAgKiBvciBpbmhlcml0IHRoZSBjdXJyZW50IGlzb2xhdGUncyBiZWhhdmlvci4KICAgKgogICAqIFlvdSBjYW4gYWxzbyBjYWxsIHRoZSBbc2V0RXJyb3JzRmF0YWxdLCBbYWRkT25FeGl0TGlzdGVuZXJdIGFuZAogICAqIFthZGRFcnJvckxpc3RlbmVyXSBtZXRob2RzIG9uIHRoZSByZXR1cm5lZCBpc29sYXRlLCBidXQgdW5sZXNzIHRoZQogICAqIGlzb2xhdGUgd2FzIHN0YXJ0ZWQgYXMgW3BhdXNlZF0sIGl0IG1heSBhbHJlYWR5IGhhdmUgdGVybWluYXRlZAogICAqIGJlZm9yZSB0aG9zZSBtZXRob2RzIGNhbiBjb21wbGV0ZS4KICAgKgogICAqIFJldHVybnMgYSBmdXR1cmUgd2hpY2ggd2lsbCBjb21wbGV0ZSB3aXRoIGFuIFtJc29sYXRlXSBpbnN0YW5jZSBpZiB0aGUKICAgKiBzcGF3bmluZyBzdWNjZWVkZWQuIEl0IHdpbGwgY29tcGxldGUgd2l0aCBhbiBlcnJvciBvdGhlcndpc2UuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxJc29sYXRlPiBzcGF3bjxUPigKICAgICAgdm9pZCBlbnRyeVBvaW50KFQgbWVzc2FnZSksIFQgbWVzc2FnZSwKICAgICAge2Jvb2wgcGF1c2VkOiBmYWxzZSwKICAgICAgYm9vbCBlcnJvcnNBcmVGYXRhbCwKICAgICAgU2VuZFBvcnQgb25FeGl0LAogICAgICBTZW5kUG9ydCBvbkVycm9yLAogICAgICBAU2luY2UoIjIuMyIpIFN0cmluZyBkZWJ1Z05hbWV9KTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhbmQgc3Bhd25zIGFuIGlzb2xhdGUgdGhhdCBydW5zIHRoZSBjb2RlIGZyb20gdGhlIGxpYnJhcnkgd2l0aAogICAqIHRoZSBzcGVjaWZpZWQgVVJJLgogICAqCiAgICogVGhlIGlzb2xhdGUgc3RhcnRzIGV4ZWN1dGluZyB0aGUgdG9wLWxldmVsIGBtYWluYCBmdW5jdGlvbiBvZiB0aGUgbGlicmFyeQogICAqIHdpdGggdGhlIGdpdmVuIFVSSS4KICAgKgogICAqIFRoZSB0YXJnZXQgYG1haW5gIG11c3QgYmUgY2FsbGFibGUgd2l0aCB6ZXJvLCBvbmUgb3IgdHdvIGFyZ3VtZW50cy4KICAgKiBFeGFtcGxlczoKICAgKgogICAqICogYG1haW4oKWAKICAgKiAqIGBtYWluKGFyZ3MpYAogICAqICogYG1haW4oYXJncywgbWVzc2FnZSlgCiAgICoKICAgKiBXaGVuIHByZXNlbnQsIHRoZSBwYXJhbWV0ZXIgYGFyZ3NgIGlzIHNldCB0byB0aGUgcHJvdmlkZWQgW2FyZ3NdIGxpc3QuCiAgICogV2hlbiBwcmVzZW50LCB0aGUgcGFyYW1ldGVyIGBtZXNzYWdlYCBpcyBzZXQgdG8gdGhlIGluaXRpYWwgW21lc3NhZ2VdLgogICAqCiAgICogSWYgdGhlIFtwYXVzZWRdIHBhcmFtZXRlciBpcyBzZXQgdG8gYHRydWVgLAogICAqIHRoZSBpc29sYXRlIHdpbGwgc3RhcnQgdXAgaW4gYSBwYXVzZWQgc3RhdGUsCiAgICogYXMgaWYgYnkgYW4gaW5pdGlhbCBjYWxsIG9mIGBpc29sYXRlLnBhdXNlKGlzb2xhdGUucGF1c2VDYXBhYmlsaXR5KWAuCiAgICogVG8gcmVzdW1lIHRoZSBpc29sYXRlLCBjYWxsIGBpc29sYXRlLnJlc3VtZShpc29sYXRlLnBhdXNlQ2FwYWJpbGl0eSlgLgogICAqCiAgICogSWYgdGhlIFtlcnJvcnNBcmVGYXRhbF0sIFtvbkV4aXRdIGFuZC9vciBbb25FcnJvcl0gcGFyYW1ldGVycyBhcmUgcHJvdmlkZWQsCiAgICogdGhlIGlzb2xhdGUgd2lsbCBhY3QgYXMgaWYsIHJlc3BlY3RpdmVseSwgW3NldEVycm9yc0ZhdGFsXSwKICAgKiBbYWRkT25FeGl0TGlzdGVuZXJdIGFuZCBbYWRkRXJyb3JMaXN0ZW5lcl0gd2VyZSBjYWxsZWQgd2l0aCB0aGUKICAgKiBjb3JyZXNwb25kaW5nIHBhcmFtZXRlciBhbmQgd2FzIHByb2Nlc3NlZCBiZWZvcmUgdGhlIGlzb2xhdGUgc3RhcnRzCiAgICogcnVubmluZy4KICAgKgogICAqIFlvdSBjYW4gYWxzbyBjYWxsIHRoZSBbc2V0RXJyb3JzRmF0YWxdLCBbYWRkT25FeGl0TGlzdGVuZXJdIGFuZAogICAqIFthZGRFcnJvckxpc3RlbmVyXSBtZXRob2RzIG9uIHRoZSByZXR1cm5lZCBpc29sYXRlLCBidXQgdW5sZXNzIHRoZQogICAqIGlzb2xhdGUgd2FzIHN0YXJ0ZWQgYXMgW3BhdXNlZF0sIGl0IG1heSBhbHJlYWR5IGhhdmUgdGVybWluYXRlZAogICAqIGJlZm9yZSB0aG9zZSBtZXRob2RzIGNhbiBjb21wbGV0ZS4KICAgKgogICAqIElmIHRoZSBbY2hlY2tlZF0gcGFyYW1ldGVyIGlzIHNldCB0byBgdHJ1ZWAgb3IgYGZhbHNlYCwKICAgKiB0aGUgbmV3IGlzb2xhdGUgd2lsbCBydW4gY29kZSBpbiBjaGVja2VkIG1vZGUgKGVuYWJsaW5nIGFzc2VydHMgYW5kIHR5cGUKICAgKiBjaGVja3MpLCByZXNwZWN0aXZlbHkgaW4gcHJvZHVjdGlvbiBtb2RlIChkaXNhYmxpbmcgYXNzZXJ0cyBhbmQgdHlwZQogICAqIGNoZWNrcyksIGlmIHBvc3NpYmxlLiBJZiB0aGUgcGFyYW1ldGVyIGlzIG9taXR0ZWQsIHRoZSBuZXcgaXNvbGF0ZSB3aWxsCiAgICogaW5oZXJpdCB0aGUgdmFsdWUgZnJvbSB0aGUgY3VycmVudCBpc29sYXRlLgogICAqCiAgICogSW4gRGFydDIgc3Ryb25nIG1vZGUsIHRoZSBgY2hlY2tlZGAgcGFyYW1ldGVyIG9ubHkgY29udHJvbHMgYXNzZXJ0cywgYnV0CiAgICogbm90IHR5cGUgY2hlY2tzLgogICAqCiAgICogSXQgbWF5IG5vdCBhbHdheXMgYmUgcG9zc2libGUgdG8gaG9ub3IgdGhlIGBjaGVja2VkYCBwYXJhbWV0ZXIuCiAgICogSWYgdGhlIGlzb2xhdGUgY29kZSB3YXMgcHJlLWNvbXBpbGVkLCBpdCBtYXkgbm90IGJlIHBvc3NpYmxlIHRvIGNoYW5nZQogICAqIHRoZSBjaGVja2VkIG1vZGUgc2V0dGluZyBkeW5hbWljYWxseS4KICAgKiBJbiB0aGF0IGNhc2UsIHRoZSBgY2hlY2tlZGAgcGFyYW1ldGVyIGlzIGlnbm9yZWQuCiAgICoKICAgKiBXQVJOSU5HOiBUaGUgW2NoZWNrZWRdIHBhcmFtZXRlciBpcyBub3QgaW1wbGVtZW50ZWQgb24gYWxsIHBsYXRmb3JtcyB5ZXQuCiAgICoKICAgKiBJZiB0aGUgW3BhY2thZ2VDb25maWddIHBhcmFtZXRlciBpcyBwcm92aWRlZCwgdGhlbiBpdCBpcyB1c2VkIHRvIGZpbmQgdGhlCiAgICogbG9jYXRpb24gb2YgYSBwYWNrYWdlIHJlc29sdXRpb24gY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgc3Bhd25lZAogICAqIGlzb2xhdGUuCiAgICoKICAgKiBJZiB0aGUgW2F1dG9tYXRpY1BhY2thZ2VSZXNvbHV0aW9uXSBwYXJhbWV0ZXIgaXMgcHJvdmlkZWQsIHRoZW4gdGhlCiAgICogbG9jYXRpb24gb2YgdGhlIHBhY2thZ2Ugc291cmNlcyBpbiB0aGUgc3Bhd25lZCBpc29sYXRlIGlzIGF1dG9tYXRpY2FsbHkKICAgKiBkZXRlcm1pbmVkLgogICAqCiAgICogVGhlIFtlbnZpcm9ubWVudF0gaXMgYSBtYXBwaW5nIGZyb20gc3RyaW5ncyB0byBzdHJpbmdzIHdoaWNoIHRoZQogICAqIHNwYXduZWQgaXNvbGF0ZSB1c2VzIHdoZW4gbG9va2luZyB1cCBbU3RyaW5nLmZyb21FbnZpcm9ubWVudF0gdmFsdWVzLgogICAqIFRoZSBzeXN0ZW0gbWF5IGFkZCBpdHMgb3duIGVudHJpZXMgdG8gZW52aXJvbm1lbnQgYXMgd2VsbC4KICAgKiBJZiBgZW52aXJvbm1lbnRgIGlzIG9taXR0ZWQsIHRoZSBzcGF3bmVkIGlzb2xhdGUgaGFzIHRoZSBzYW1lIGVudmlyb25tZW50CiAgICogZGVjbGFyYXRpb25zIGFzIHRoZSBzcGF3bmluZyBpc29sYXRlLgogICAqCiAgICogV0FSTklORzogVGhlIFtlbnZpcm9ubWVudF0gcGFyYW1ldGVyIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBhbGwKICAgKiBwbGF0Zm9ybXMgeWV0LgogICAqCiAgICogSWYgW2RlYnVnTmFtZV0gaXMgcHJvdmlkZWQsIHRoZSBzcGF3bmVkIFtJc29sYXRlXSB3aWxsIGJlIGlkZW50aWZpYWJsZSBieQogICAqIHRoaXMgbmFtZSBpbiBkZWJ1Z2dlcnMgYW5kIGxvZ2dpbmcuCiAgICoKICAgKiBSZXR1cm5zIGEgZnV0dXJlIHRoYXQgd2lsbCBjb21wbGV0ZSB3aXRoIGFuIFtJc29sYXRlXSBpbnN0YW5jZSBpZiB0aGUKICAgKiBzcGF3bmluZyBzdWNjZWVkZWQuIEl0IHdpbGwgY29tcGxldGUgd2l0aCBhbiBlcnJvciBvdGhlcndpc2UuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxJc29sYXRlPiBzcGF3blVyaSgKICAgICAgVXJpIHVyaSwKICAgICAgTGlzdDxTdHJpbmc+IGFyZ3MsCiAgICAgIHZhciBtZXNzYWdlLAogICAgICB7Ym9vbCBwYXVzZWQ6IGZhbHNlLAogICAgICBTZW5kUG9ydCBvbkV4aXQsCiAgICAgIFNlbmRQb3J0IG9uRXJyb3IsCiAgICAgIGJvb2wgZXJyb3JzQXJlRmF0YWwsCiAgICAgIGJvb2wgY2hlY2tlZCwKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudCwKICAgICAgQERlcHJlY2F0ZWQoJ1RoZSBwYWNrYWdlcy8gZGlyIGlzIG5vdCBzdXBwb3J0ZWQgaW4gRGFydCAyJykKICAgICAgICAgIFVyaSBwYWNrYWdlUm9vdCwKICAgICAgVXJpIHBhY2thZ2VDb25maWcsCiAgICAgIGJvb2wgYXV0b21hdGljUGFja2FnZVJlc29sdXRpb246IGZhbHNlLAogICAgICBAU2luY2UoIjIuMyIpCiAgICAgICAgICBTdHJpbmcgZGVidWdOYW1lfSk7CgogIC8qKgogICAqIFJlcXVlc3RzIHRoZSBpc29sYXRlIHRvIHBhdXNlLgogICAqCiAgICogV2hlbiB0aGUgaXNvbGF0ZSByZWNlaXZlcyB0aGUgcGF1c2UgY29tbWFuZCwgaXQgc3RvcHMKICAgKiBwcm9jZXNzaW5nIGV2ZW50cyBmcm9tIHRoZSBldmVudCBsb29wIHF1ZXVlLgogICAqIEl0IG1heSBzdGlsbCBhZGQgbmV3IGV2ZW50cyB0byB0aGUgcXVldWUgaW4gcmVzcG9uc2UgdG8sIGUuZy4sIHRpbWVycwogICAqIG9yIHJlY2VpdmUtcG9ydCBtZXNzYWdlcy4gV2hlbiB0aGUgaXNvbGF0ZSBpcyByZXN1bWVkLAogICAqIGl0IHN0YXJ0cyBoYW5kbGluZyB0aGUgYWxyZWFkeSBlbnF1ZXVlZCBldmVudHMuCiAgICoKICAgKiBUaGUgcGF1c2UgcmVxdWVzdCBpcyBzZW50IHRocm91Z2ggdGhlIGlzb2xhdGUncyBjb21tYW5kIHBvcnQsCiAgICogd2hpY2ggYnlwYXNzZXMgdGhlIHJlY2VpdmluZyBpc29sYXRlJ3MgZXZlbnQgbG9vcC4KICAgKiBUaGUgcGF1c2UgdGFrZXMgZWZmZWN0IHdoZW4gaXQgaXMgcmVjZWl2ZWQsIHBhdXNpbmcgdGhlIGV2ZW50IGxvb3AKICAgKiBhcyBpdCBpcyBhdCB0aGF0IHRpbWUuCiAgICoKICAgKiBUaGUgW3Jlc3VtZUNhcGFiaWxpdHldIGlzIHVzZWQgdG8gaWRlbnRpdHkgdGhlIHBhdXNlLAogICAqIGFuZCBtdXN0IGJlIHVzZWQgYWdhaW4gdG8gZW5kIHRoZSBwYXVzZSB1c2luZyBbcmVzdW1lXS4KICAgKiBJZiBbcmVzdW1lQ2FwYWJpbGl0eV0gaXMgb21pdHRlZCwgYSBuZXcgY2FwYWJpbGl0eSBvYmplY3QgaXMgY3JlYXRlZAogICAqIGFuZCB1c2VkIGluc3RlYWQuCiAgICoKICAgKiBJZiBhbiBpc29sYXRlIGlzIHBhdXNlZCBtb3JlIHRoYW4gb25jZSB1c2luZyB0aGUgc2FtZSBjYXBhYmlsaXR5LAogICAqIG9ubHkgb25lIHJlc3VtZSB3aXRoIHRoYXQgY2FwYWJpbGl0eSBpcyBuZWVkZWQgdG8gZW5kIHRoZSBwYXVzZS4KICAgKgogICAqIElmIGFuIGlzb2xhdGUgaXMgcGF1c2VkIHVzaW5nIG1vcmUgdGhhbiBvbmUgY2FwYWJpbGl0eSwKICAgKiBlYWNoIHBhdXNlIG11c3QgYmUgaW5kaXZpZHVhbGx5IGVuZGVkIGJlZm9yZSB0aGUgaXNvbGF0ZSByZXN1bWVzLgogICAqCiAgICogUmV0dXJucyB0aGUgY2FwYWJpbGl0eSB0aGF0IG11c3QgYmUgdXNlZCB0byBlbmQgdGhlIHBhdXNlLgogICAqIFRoaXMgaXMgZWl0aGVyIFtyZXN1bWVDYXBhYmlsaXR5XSwgb3IgYSBuZXcgY2FwYWJpbGl0eSB3aGVuCiAgICogW3Jlc3VtZUNhcGFiaWxpdHldIGlzIG9taXR0ZWQuCiAgICoKICAgKiBJZiBbcGF1c2VDYXBhYmlsaXR5XSBpcyBgbnVsbGAsIG9yIGl0J3Mgbm90IHRoZSBwYXVzZSBjYXBhYmlsaXR5CiAgICogb2YgdGhlIGlzb2xhdGUgaWRlbnRpZmllZCBieSBbY29udHJvbFBvcnRdLAogICAqIHRoZSBwYXVzZSByZXF1ZXN0IGlzIGlnbm9yZWQgYnkgdGhlIHJlY2VpdmluZyBpc29sYXRlLgogICAqLwogIENhcGFiaWxpdHkgcGF1c2UoW0NhcGFiaWxpdHkgcmVzdW1lQ2FwYWJpbGl0eV0pIHsKICAgIHJlc3VtZUNhcGFiaWxpdHkgPz89IG5ldyBDYXBhYmlsaXR5KCk7CiAgICBfcGF1c2UocmVzdW1lQ2FwYWJpbGl0eSk7CiAgICByZXR1cm4gcmVzdW1lQ2FwYWJpbGl0eTsKICB9CgogIC8qKiBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBbcGF1c2VdLiAqLwogIGV4dGVybmFsIHZvaWQgX3BhdXNlKENhcGFiaWxpdHkgcmVzdW1lQ2FwYWJpbGl0eSk7CgogIC8qKgogICAqIFJlc3VtZXMgYSBwYXVzZWQgaXNvbGF0ZS4KICAgKgogICAqIFNlbmRzIGEgbWVzc2FnZSB0byBhbiBpc29sYXRlIHJlcXVlc3RpbmcgdGhhdCBpdCBlbmRzIGEgcGF1c2UKICAgKiB0aGF0IHdhcyBwcmV2aW91c2x5IHJlcXVlc3RlZC4KICAgKgogICAqIFdoZW4gYWxsIGFjdGl2ZSBwYXVzZSByZXF1ZXN0cyBoYXZlIGJlZW4gY2FuY2VsbGVkLCB0aGUgaXNvbGF0ZQogICAqIHdpbGwgY29udGludWUgcHJvY2Vzc2luZyBldmVudHMgYW5kIGhhbmRsaW5nIG5vcm1hbCBtZXNzYWdlcy4KICAgKgogICAqIElmIHRoZSBbcmVzdW1lQ2FwYWJpbGl0eV0gaXMgbm90IG9uZSB0aGF0IGhhcyBwcmV2aW91c2x5IGJlZW4gdXNlZAogICAqIHRvIHBhdXNlIHRoZSBpc29sYXRlLCBvciBpdCBoYXMgYWxyZWFkeSBiZWVuIHVzZWQgdG8gcmVzdW1lIGZyb20KICAgKiB0aGF0IHBhdXNlLCB0aGUgcmVzdW1lIGNhbGwgaGFzIG5vIGVmZmVjdC4KICAgKi8KICBleHRlcm5hbCB2b2lkIHJlc3VtZShDYXBhYmlsaXR5IHJlc3VtZUNhcGFiaWxpdHkpOwoKICAvKioKICAgKiBSZXF1ZXN0cyBhbiBleGl0IG1lc3NhZ2Ugb24gW3Jlc3BvbnNlUG9ydF0gd2hlbiB0aGUgaXNvbGF0ZSB0ZXJtaW5hdGVzLgogICAqCiAgICogVGhlIGlzb2xhdGUgd2lsbCBzZW5kIFtyZXNwb25zZV0gYXMgYSBtZXNzYWdlIG9uIFtyZXNwb25zZVBvcnRdIGFzIHRoZSBsYXN0CiAgICogdGhpbmcgYmVmb3JlIGl0IHRlcm1pbmF0ZXMuIEl0IHdpbGwgcnVuIG5vIGZ1cnRoZXIgY29kZSBhZnRlciB0aGUgbWVzc2FnZQogICAqIGhhcyBiZWVuIHNlbnQuCiAgICoKICAgKiBBZGRpbmcgdGhlIHNhbWUgcG9ydCBtb3JlIHRoYW4gb25jZSB3aWxsIG9ubHkgY2F1c2UgaXQgdG8gcmVjZWl2ZSBvbmUgZXhpdAogICAqIG1lc3NhZ2UsIHVzaW5nIHRoZSBsYXN0IHJlc3BvbnNlIHZhbHVlIHRoYXQgd2FzIGFkZGVkLAogICAqIGFuZCBpdCBvbmx5IG5lZWRzIHRvIGJlIHJlbW92ZWQgb25jZSB1c2luZyBbcmVtb3ZlT25FeGl0TGlzdGVuZXJdLgogICAqCiAgICogSWYgdGhlIGlzb2xhdGUgaGFzIHRlcm1pbmF0ZWQgYmVmb3JlIGl0IGNhbiByZWNlaXZlIHRoaXMgcmVxdWVzdCwKICAgKiBubyBleGl0IG1lc3NhZ2Ugd2lsbCBiZSBzZW50LgogICAqCiAgICogVGhlIFtyZXNwb25zZV0gb2JqZWN0IG11c3QgZm9sbG93IHRoZSBzYW1lIHJlc3RyaWN0aW9ucyBhcyBlbmZvcmNlZCBieQogICAqIFtTZW5kUG9ydC5zZW5kXS4KICAgKiBJdCBpcyByZWNvbW1lbmRlZCB0byBvbmx5IHVzZSBzaW1wbGUgdmFsdWVzIHRoYXQgY2FuIGJlIHNlbnQgdG8gYWxsCiAgICogaXNvbGF0ZXMsIGxpa2UgYG51bGxgLCBib29sZWFucywgbnVtYmVycyBvciBzdHJpbmdzLgogICAqCiAgICogU2luY2UgaXNvbGF0ZXMgcnVuIGNvbmN1cnJlbnRseSwgaXQncyBwb3NzaWJsZSBmb3IgaXQgdG8gZXhpdCBiZWZvcmUgdGhlCiAgICogZXhpdCBsaXN0ZW5lciBpcyBlc3RhYmxpc2hlZCwgYW5kIGluIHRoYXQgY2FzZSBubyByZXNwb25zZSB3aWxsIGJlCiAgICogc2VudCBvbiBbcmVzcG9uc2VQb3J0XS4KICAgKiBUbyBhdm9pZCB0aGlzLCBlaXRoZXIgdXNlIHRoZSBjb3JyZXNwb25kaW5nIHBhcmFtZXRlciB0byB0aGUgc3Bhd24KICAgKiBmdW5jdGlvbiwgb3Igc3RhcnQgdGhlIGlzb2xhdGUgcGF1c2VkLCBhZGQgdGhlIGxpc3RlbmVyIGFuZAogICAqIHRoZW4gcmVzdW1lIHRoZSBpc29sYXRlLgogICAqLwogIC8qIFRPRE8obHJuKTogQ2FuIHdlIGRvIGJldHRlcj8gQ2FuIHRoZSBzeXN0ZW0gcmVjb2duaXplIHRoaXMgbWVzc2FnZSBhbmQKICAgKiBzZW5kIGEgcmVwbHkgaWYgdGhlIHJlY2VpdmluZyBpc29sYXRlIGlzIGRlYWQ/CiAgICovCiAgZXh0ZXJuYWwgdm9pZCBhZGRPbkV4aXRMaXN0ZW5lcihTZW5kUG9ydCByZXNwb25zZVBvcnQsIHtPYmplY3QgcmVzcG9uc2V9KTsKCiAgLyoqCiAgICogU3RvcHMgbGlzdGVuaW5nIGZvciBleGl0IG1lc3NhZ2VzIGZyb20gdGhlIGlzb2xhdGUuCiAgICoKICAgKiBSZXF1ZXN0cyBmb3IgdGhlIGlzb2xhdGUgdG8gbm90IHNlbmQgZXhpdCBtZXNzYWdlcyBvbiBbcmVzcG9uc2VQb3J0XS4KICAgKiBJZiB0aGUgaXNvbGF0ZSBpc24ndCBleHBlY3RpbmcgdG8gc2VuZCBleGl0IG1lc3NhZ2VzIG9uIFtyZXNwb25zZVBvcnRdLAogICAqIGJlY2F1c2UgdGhlIHBvcnQgaGFzbid0IGJlZW4gYWRkZWQgdXNpbmcgW2FkZE9uRXhpdExpc3RlbmVyXSwKICAgKiBvciBiZWNhdXNlIGl0IGhhcyBhbHJlYWR5IGJlZW4gcmVtb3ZlZCwgdGhlIHJlcXVlc3QgaXMgaWdub3JlZC4KICAgKgogICAqIElmIHRoZSBzYW1lIHBvcnQgaGFzIGJlZW4gcGFzc2VkIHZpYSBbYWRkT25FeGl0TGlzdGVuZXJdIG1vcmUgdGhhbiBvbmNlLAogICAqIG9ubHkgb25lIGNhbGwgdG8gYHJlbW92ZU9uRXhpdExpc3RlbmVyYCBpcyBuZWVkZWQgdG8gc3RvcCBpdCBmcm9tIHJlY2VpdmluZwogICAqIGV4aXQgbWVzc2FnZXMuCiAgICoKICAgKiBDbG9zaW5nIHRoZSByZWNlaXZlIHBvcnQgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIFtyZXNwb25zZVBvcnRdIGRvZXMKICAgKiBub3Qgc3RvcCB0aGUgaXNvbGF0ZSBmcm9tIHNlbmRpbmcgdW5jYXVnaHQgZXJyb3JzLCB0aGV5IGFyZSBqdXN0IGdvaW5nIHRvCiAgICogYmUgbG9zdC4KICAgKgogICAqIEFuIGV4aXQgbWVzc2FnZSBtYXkgc3RpbGwgYmUgc2VudCBpZiB0aGUgaXNvbGF0ZSB0ZXJtaW5hdGVzCiAgICogYmVmb3JlIHRoaXMgcmVxdWVzdCBpcyByZWNlaXZlZCBhbmQgcHJvY2Vzc2VkLgogICAqLwogIGV4dGVybmFsIHZvaWQgcmVtb3ZlT25FeGl0TGlzdGVuZXIoU2VuZFBvcnQgcmVzcG9uc2VQb3J0KTsKCiAgLyoqCiAgICogU2V0cyB3aGV0aGVyIHVuY2F1Z2h0IGVycm9ycyB3aWxsIHRlcm1pbmF0ZSB0aGUgaXNvbGF0ZS4KICAgKgogICAqIElmIGVycm9ycyBhcmUgZmF0YWwsIGFueSB1bmNhdWdodCBlcnJvciB3aWxsIHRlcm1pbmF0ZSB0aGUgaXNvbGF0ZQogICAqIGV2ZW50IGxvb3AgYW5kIHNodXQgZG93biB0aGUgaXNvbGF0ZS4KICAgKgogICAqIFRoaXMgY2FsbCByZXF1aXJlcyB0aGUgW3Rlcm1pbmF0ZUNhcGFiaWxpdHldIGZvciB0aGUgaXNvbGF0ZS4KICAgKiBJZiB0aGUgY2FwYWJpbGl0eSBpcyBhYnNlbnQgb3IgaW5jb3JyZWN0LCBubyBjaGFuZ2UgaXMgbWFkZS4KICAgKgogICAqIFNpbmNlIGlzb2xhdGVzIHJ1biBjb25jdXJyZW50bHksIGl0J3MgcG9zc2libGUgZm9yIHRoZSByZWNlaXZpbmcgaXNvbGF0ZQogICAqIHRvIGV4aXQgZHVlIHRvIGFuIGVycm9yLCBiZWZvcmUgYSByZXF1ZXN0LCB1c2luZyB0aGlzIG1ldGhvZCwgaGFzIGJlZW4KICAgKiByZWNlaXZlZCBhbmQgcHJvY2Vzc2VkLgogICAqIFRvIGF2b2lkIHRoaXMsIGVpdGhlciB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgcGFyYW1ldGVyIHRvIHRoZSBzcGF3bgogICAqIGZ1bmN0aW9uLCBvciBzdGFydCB0aGUgaXNvbGF0ZSBwYXVzZWQsIHNldCBlcnJvcnMgbm9uLWZhdGFsIGFuZAogICAqIHRoZW4gcmVzdW1lIHRoZSBpc29sYXRlLgogICAqLwogIGV4dGVybmFsIHZvaWQgc2V0RXJyb3JzRmF0YWwoYm9vbCBlcnJvcnNBcmVGYXRhbCk7CgogIC8qKgogICAqIFJlcXVlc3RzIHRoZSBpc29sYXRlIHRvIHNodXQgZG93bi4KICAgKgogICAqIFRoZSBpc29sYXRlIGlzIHJlcXVlc3RlZCB0byB0ZXJtaW5hdGUgaXRzZWxmLgogICAqIFRoZSBbcHJpb3JpdHldIGFyZ3VtZW50IHNwZWNpZmllcyB3aGVuIHRoaXMgbXVzdCBoYXBwZW4uCiAgICoKICAgKiBUaGUgW3ByaW9yaXR5XSwgd2hlbiBwcm92aWRlZCwgbXVzdCBiZSBvbmUgb2YgW2ltbWVkaWF0ZV0gb3IKICAgKiBbYmVmb3JlTmV4dEV2ZW50XSAodGhlIGRlZmF1bHQpLgogICAqIFRoZSBzaHV0ZG93biBpcyBwZXJmb3JtZWQgYXQgZGlmZmVyZW50IHRpbWVzIGRlcGVuZGluZyBvbiB0aGUgcHJpb3JpdHk6CiAgICoKICAgKiAqIGBpbW1lZGlhdGVgOiBUaGUgaXNvbGF0ZSBzaHV0cyBkb3duIGFzIHNvb24gYXMgcG9zc2libGUuCiAgICogICAgIENvbnRyb2wgbWVzc2FnZXMgYXJlIGhhbmRsZWQgaW4gb3JkZXIsIHNvIGFsbCBwcmV2aW91c2x5IHNlbnQgY29udHJvbAogICAqICAgICBldmVudHMgZnJvbSB0aGlzIGlzb2xhdGUgd2lsbCBhbGwgaGF2ZSBiZWVuIHByb2Nlc3NlZC4KICAgKiAgICAgVGhlIHNodXRkb3duIHNob3VsZCBoYXBwZW4gbm8gbGF0ZXIgdGhhbiBpZiBzZW50IHdpdGgKICAgKiAgICAgYGJlZm9yZU5leHRFdmVudGAuCiAgICogICAgIEl0IG1heSBoYXBwZW4gZWFybGllciBpZiB0aGUgc3lzdGVtIGhhcyBhIHdheSB0byBzaHV0IGRvd24gY2xlYW5seQogICAqICAgICBhdCBhbiBlYXJsaWVyIHRpbWUsIGV2ZW4gZHVyaW5nIHRoZSBleGVjdXRpb24gb2YgYW5vdGhlciBldmVudC4KICAgKiAqIGBiZWZvcmVOZXh0RXZlbnRgOiBUaGUgc2h1dGRvd24gaXMgc2NoZWR1bGVkIGZvciB0aGUgbmV4dCB0aW1lCiAgICogICAgIGNvbnRyb2wgcmV0dXJucyB0byB0aGUgZXZlbnQgbG9vcCBvZiB0aGUgcmVjZWl2aW5nIGlzb2xhdGUsCiAgICogICAgIGFmdGVyIHRoZSBjdXJyZW50IGV2ZW50LCBhbmQgYW55IGFscmVhZHkgc2NoZWR1bGVkIGNvbnRyb2wgZXZlbnRzLAogICAqICAgICBhcmUgY29tcGxldGVkLgogICAqCiAgICogSWYgW3Rlcm1pbmF0ZUNhcGFiaWxpdHldIGlzIGBudWxsYCwgb3IgaXQncyBub3QgdGhlIHRlcm1pbmF0ZSBjYXBhYmlsaXR5CiAgICogb2YgdGhlIGlzb2xhdGUgaWRlbnRpZmllZCBieSBbY29udHJvbFBvcnRdLAogICAqIHRoZSBraWxsIHJlcXVlc3QgaXMgaWdub3JlZCBieSB0aGUgcmVjZWl2aW5nIGlzb2xhdGUuCiAgICovCiAgZXh0ZXJuYWwgdm9pZCBraWxsKHtpbnQgcHJpb3JpdHk6IGJlZm9yZU5leHRFdmVudH0pOwoKICAvKioKICAgKiBSZXF1ZXN0cyB0aGF0IHRoZSBpc29sYXRlIHNlbmQgW3Jlc3BvbnNlXSBvbiB0aGUgW3Jlc3BvbnNlUG9ydF0uCiAgICoKICAgKiBUaGUgW3Jlc3BvbnNlXSBvYmplY3QgbXVzdCBmb2xsb3cgdGhlIHNhbWUgcmVzdHJpY3Rpb25zIGFzIGVuZm9yY2VkIGJ5CiAgICogW1NlbmRQb3J0LnNlbmRdLgogICAqIEl0IGlzIHJlY29tbWVuZGVkIHRvIG9ubHkgdXNlIHNpbXBsZSB2YWx1ZXMgdGhhdCBjYW4gYmUgc2VudCB0byBhbGwKICAgKiBpc29sYXRlcywgbGlrZSBgbnVsbGAsIGJvb2xlYW5zLCBudW1iZXJzIG9yIHN0cmluZ3MuCiAgICoKICAgKiBJZiB0aGUgaXNvbGF0ZSBpcyBhbGl2ZSwgaXQgd2lsbCBldmVudHVhbGx5IHNlbmQgYHJlc3BvbnNlYAogICAqIChkZWZhdWx0aW5nIHRvIGBudWxsYCkgb24gdGhlIHJlc3BvbnNlIHBvcnQuCiAgICoKICAgKiBUaGUgW3ByaW9yaXR5XSBtdXN0IGJlIG9uZSBvZiBbaW1tZWRpYXRlXSBvciBbYmVmb3JlTmV4dEV2ZW50XS4KICAgKiBUaGUgcmVzcG9uc2UgaXMgc2VudCBhdCBkaWZmZXJlbnQgdGltZXMgZGVwZW5kaW5nIG9uIHRoZSBwaW5nIHR5cGU6CiAgICoKICAgKiAqIGBpbW1lZGlhdGVgOiBUaGUgaXNvbGF0ZSByZXNwb25kcyBhcyBzb29uIGFzIGl0IHJlY2VpdmVzIHRoZQogICAqICAgICBjb250cm9sIG1lc3NhZ2UuIFRoaXMgaXMgYWZ0ZXIgYW55IHByZXZpb3VzIGNvbnRyb2wgbWVzc2FnZQogICAqICAgICBmcm9tIHRoZSBzYW1lIGlzb2xhdGUgaGFzIGJlZW4gcmVjZWl2ZWQgYW5kIHByb2Nlc3NlZCwKICAgKiAgICAgYnV0IG1heSBiZSBkdXJpbmcgZXhlY3V0aW9uIG9mIGFub3RoZXIgZXZlbnQuCiAgICogKiBgYmVmb3JlTmV4dEV2ZW50YDogVGhlIHJlc3BvbnNlIGlzIHNjaGVkdWxlZCBmb3IgdGhlIG5leHQgdGltZQogICAqICAgICBjb250cm9sIHJldHVybnMgdG8gdGhlIGV2ZW50IGxvb3Agb2YgdGhlIHJlY2VpdmluZyBpc29sYXRlLAogICAqICAgICBhZnRlciB0aGUgY3VycmVudCBldmVudCwgYW5kIGFueSBhbHJlYWR5IHNjaGVkdWxlZCBjb250cm9sIGV2ZW50cywKICAgKiAgICAgYXJlIGNvbXBsZXRlZC4KICAgKi8KICBleHRlcm5hbCB2b2lkIHBpbmcoU2VuZFBvcnQgcmVzcG9uc2VQb3J0LAogICAgICB7T2JqZWN0IHJlc3BvbnNlLCBpbnQgcHJpb3JpdHk6IGltbWVkaWF0ZX0pOwoKICAvKioKICAgKiBSZXF1ZXN0cyB0aGF0IHVuY2F1Z2h0IGVycm9ycyBvZiB0aGUgaXNvbGF0ZSBhcmUgc2VudCBiYWNrIHRvIFtwb3J0XS4KICAgKgogICAqIFRoZSBlcnJvcnMgYXJlIHNlbnQgYmFjayBhcyB0d28gZWxlbWVudHMgbGlzdHMuCiAgICogVGhlIGZpcnN0IGVsZW1lbnQgaXMgYSBgU3RyaW5nYCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXJyb3IsIHVzdWFsbHkKICAgKiBjcmVhdGVkIGJ5IGNhbGxpbmcgYHRvU3RyaW5nYCBvbiB0aGUgZXJyb3IuCiAgICogVGhlIHNlY29uZCBlbGVtZW50IGlzIGEgYFN0cmluZ2AgcmVwcmVzZW50YXRpb24gb2YgYW4gYWNjb21wYW55aW5nCiAgICogc3RhY2sgdHJhY2UsIG9yIGBudWxsYCBpZiBubyBzdGFjayB0cmFjZSB3YXMgcHJvdmlkZWQuCiAgICogVG8gY29udmVydCB0aGlzIGJhY2sgdG8gYSBbU3RhY2tUcmFjZV0gb2JqZWN0LCB1c2UgW1N0YWNrVHJhY2UuZnJvbVN0cmluZ10uCiAgICoKICAgKiBMaXN0ZW5pbmcgdXNpbmcgdGhlIHNhbWUgcG9ydCBtb3JlIHRoYW4gb25jZSBkb2VzIG5vdGhpbmcuCiAgICogQSBwb3J0IHdpbGwgb25seSByZWNlaXZlIGVhY2ggZXJyb3Igb25jZSwKICAgKiBhbmQgd2lsbCBvbmx5IG5lZWQgdG8gYmUgcmVtb3ZlZCBvbmNlIHVzaW5nIFtyZW1vdmVFcnJvckxpc3RlbmVyXS4KCiAgICogQ2xvc2luZyB0aGUgcmVjZWl2ZSBwb3J0IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBwb3J0IGRvZXMgbm90IHN0b3AKICAgKiB0aGUgaXNvbGF0ZSBmcm9tIHNlbmRpbmcgdW5jYXVnaHQgZXJyb3JzLCB0aGV5IGFyZSBqdXN0IGdvaW5nIHRvIGJlIGxvc3QuCiAgICogSW5zdGVhZCB1c2UgW3JlbW92ZUVycm9yTGlzdGVuZXJdIHRvIHN0b3AgcmVjZWl2aW5nIGVycm9ycyBvbiBbcG9ydF0uCiAgICoKICAgKiBTaW5jZSBpc29sYXRlcyBydW4gY29uY3VycmVudGx5LCBpdCdzIHBvc3NpYmxlIGZvciBpdCB0byBleGl0IGJlZm9yZSB0aGUKICAgKiBlcnJvciBsaXN0ZW5lciBpcyBlc3RhYmxpc2hlZC4gVG8gYXZvaWQgdGhpcywgc3RhcnQgdGhlIGlzb2xhdGUgcGF1c2VkLAogICAqIGFkZCB0aGUgbGlzdGVuZXIgYW5kIHRoZW4gcmVzdW1lIHRoZSBpc29sYXRlLgogICAqLwogIGV4dGVybmFsIHZvaWQgYWRkRXJyb3JMaXN0ZW5lcihTZW5kUG9ydCBwb3J0KTsKCiAgLyoqCiAgICogU3RvcHMgbGlzdGVuaW5nIGZvciB1bmNhdWdodCBlcnJvcnMgZnJvbSB0aGUgaXNvbGF0ZS4KICAgKgogICAqIFJlcXVlc3RzIGZvciB0aGUgaXNvbGF0ZSB0byBub3Qgc2VuZCB1bmNhdWdodCBlcnJvcnMgb24gW3BvcnRdLgogICAqIElmIHRoZSBpc29sYXRlIGlzbid0IGV4cGVjdGluZyB0byBzZW5kIHVuY2F1Z2h0IGVycm9ycyBvbiBbcG9ydF0sCiAgICogYmVjYXVzZSB0aGUgcG9ydCBoYXNuJ3QgYmVlbiBhZGRlZCB1c2luZyBbYWRkRXJyb3JMaXN0ZW5lcl0sCiAgICogb3IgYmVjYXVzZSBpdCBoYXMgYWxyZWFkeSBiZWVuIHJlbW92ZWQsIHRoZSByZXF1ZXN0IGlzIGlnbm9yZWQuCiAgICoKICAgKiBJZiB0aGUgc2FtZSBwb3J0IGhhcyBiZWVuIHBhc3NlZCB2aWEgW2FkZEVycm9yTGlzdGVuZXJdIG1vcmUgdGhhbiBvbmNlLAogICAqIG9ubHkgb25lIGNhbGwgdG8gYHJlbW92ZUVycm9yTGlzdGVuZXJgIGlzIG5lZWRlZCB0byBzdG9wIGl0IGZyb20gcmVjZWl2aW5nCiAgICogdW5jYXVnaHQgZXJyb3JzLgogICAqCiAgICogVW5jYXVnaHQgZXJyb3JzIG1lc3NhZ2UgbWF5IHN0aWxsIGJlIHNlbnQgYnkgdGhlIGlzb2xhdGUKICAgKiB1bnRpbCB0aGlzIHJlcXVlc3QgaXMgcmVjZWl2ZWQgYW5kIHByb2Nlc3NlZC4KICAgKi8KICBleHRlcm5hbCB2b2lkIHJlbW92ZUVycm9yTGlzdGVuZXIoU2VuZFBvcnQgcG9ydCk7CgogIC8qKgogICAqIFJldHVybnMgYSBicm9hZGNhc3Qgc3RyZWFtIG9mIHVuY2F1Z2h0IGVycm9ycyBmcm9tIHRoZSBpc29sYXRlLgogICAqCiAgICogRWFjaCBlcnJvciBpcyBwcm92aWRlZCBhcyBhbiBlcnJvciBldmVudCBvbiB0aGUgc3RyZWFtLgogICAqCiAgICogVGhlIGFjdHVhbCBlcnJvciBvYmplY3QgYW5kIHN0YWNrVHJhY2VzIHdpbGwgbm90IG5lY2Vzc2FyaWx5CiAgICogYmUgdGhlIHNhbWUgb2JqZWN0IHR5cGVzIGFzIGluIHRoZSBhY3R1YWwgaXNvbGF0ZSwgYnV0IHRoZXkgd2lsbAogICAqIGFsd2F5cyBoYXZlIHRoZSBzYW1lIFtPYmplY3QudG9TdHJpbmddIHJlc3VsdC4KICAgKgogICAqIFRoaXMgc3RyZWFtIGlzIGJhc2VkIG9uIFthZGRFcnJvckxpc3RlbmVyXSBhbmQgW3JlbW92ZUVycm9yTGlzdGVuZXJdLgogICAqLwogIFN0cmVhbSBnZXQgZXJyb3JzIHsKICAgIFN0cmVhbUNvbnRyb2xsZXIgY29udHJvbGxlcjsKICAgIFJhd1JlY2VpdmVQb3J0IHBvcnQ7CiAgICB2b2lkIGhhbmRsZUVycm9yKG1lc3NhZ2UpIHsKICAgICAgTGlzdCBsaXN0TWVzc2FnZSA9IG1lc3NhZ2U7CiAgICAgIFN0cmluZyBlcnJvckRlc2NyaXB0aW9uID0gbGlzdE1lc3NhZ2VbMF07CiAgICAgIFN0cmluZyBzdGFja0Rlc2NyaXB0aW9uID0gbGlzdE1lc3NhZ2VbMV07CiAgICAgIHZhciBlcnJvciA9IG5ldyBSZW1vdGVFcnJvcihlcnJvckRlc2NyaXB0aW9uLCBzdGFja0Rlc2NyaXB0aW9uKTsKICAgICAgY29udHJvbGxlci5hZGRFcnJvcihlcnJvciwgZXJyb3Iuc3RhY2tUcmFjZSk7CiAgICB9CgogICAgY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyLmJyb2FkY2FzdCgKICAgICAgICBzeW5jOiB0cnVlLAogICAgICAgIG9uTGlzdGVuOiAoKSB7CiAgICAgICAgICBwb3J0ID0gbmV3IFJhd1JlY2VpdmVQb3J0KGhhbmRsZUVycm9yKTsKICAgICAgICAgIHRoaXMuYWRkRXJyb3JMaXN0ZW5lcihwb3J0LnNlbmRQb3J0KTsKICAgICAgICB9LAogICAgICAgIG9uQ2FuY2VsOiAoKSB7CiAgICAgICAgICB0aGlzLnJlbW92ZUVycm9yTGlzdGVuZXIocG9ydC5zZW5kUG9ydCk7CiAgICAgICAgICBwb3J0LmNsb3NlKCk7CiAgICAgICAgICBwb3J0ID0gbnVsbDsKICAgICAgICB9KTsKICAgIHJldHVybiBjb250cm9sbGVyLnN0cmVhbTsKICB9Cn0KCi8qKgogKiBTZW5kcyBtZXNzYWdlcyB0byBpdHMgW1JlY2VpdmVQb3J0XXMuCiAqCiAqIFtTZW5kUG9ydF1zIGFyZSBjcmVhdGVkIGZyb20gW1JlY2VpdmVQb3J0XXMuIEFueSBtZXNzYWdlIHNlbnQgdGhyb3VnaAogKiBhIFtTZW5kUG9ydF0gaXMgZGVsaXZlcmVkIHRvIGl0cyBjb3JyZXNwb25kaW5nIFtSZWNlaXZlUG9ydF0uIFRoZXJlIG1pZ2h0IGJlCiAqIG1hbnkgW1NlbmRQb3J0XXMgZm9yIHRoZSBzYW1lIFtSZWNlaXZlUG9ydF0uCiAqCiAqIFtTZW5kUG9ydF1zIGNhbiBiZSB0cmFuc21pdHRlZCB0byBvdGhlciBpc29sYXRlcywgYW5kIHRoZXkgcHJlc2VydmUgZXF1YWxpdHkKICogd2hlbiBzZW50LgogKi8KYWJzdHJhY3QgY2xhc3MgU2VuZFBvcnQgaW1wbGVtZW50cyBDYXBhYmlsaXR5IHsKICAvKioKICAgKiBTZW5kcyBhbiBhc3luY2hyb25vdXMgW21lc3NhZ2VdIHRocm91Z2ggdGhpcyBzZW5kIHBvcnQsIHRvIGl0cwogICAqIGNvcnJlc3BvbmRpbmcgYFJlY2VpdmVQb3J0YC4KICAgKgogICAqIFRoZSBjb250ZW50IG9mIFttZXNzYWdlXSBjYW4gYmU6IHByaW1pdGl2ZSB2YWx1ZXMgKG51bGwsIG51bSwgYm9vbCwgZG91YmxlLAogICAqIFN0cmluZyksIGluc3RhbmNlcyBvZiBbU2VuZFBvcnRdLCBhbmQgbGlzdHMgYW5kIG1hcHMgd2hvc2UgZWxlbWVudHMgYXJlIGFueQogICAqIG9mIHRoZXNlLiBMaXN0IGFuZCBtYXBzIGFyZSBhbHNvIGFsbG93ZWQgdG8gYmUgY3ljbGljLgogICAqCiAgICogSW4gdGhlIHNwZWNpYWwgY2lyY3Vtc3RhbmNlcyB3aGVuIHR3byBpc29sYXRlcyBzaGFyZSB0aGUgc2FtZSBjb2RlIGFuZCBhcmUKICAgKiBydW5uaW5nIGluIHRoZSBzYW1lIHByb2Nlc3MgKGUuZy4gaXNvbGF0ZXMgY3JlYXRlZCB2aWEgW0lzb2xhdGUuc3Bhd25dKSwgaXQKICAgKiBpcyBhbHNvIHBvc3NpYmxlIHRvIHNlbmQgb2JqZWN0IGluc3RhbmNlcyAod2hpY2ggd291bGQgYmUgY29waWVkIGluIHRoZQogICAqIHByb2Nlc3MpLiBUaGlzIGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCBieSB0aGUgZGFydHZtLiAgRm9yIG5vdywgdGhlCiAgICogZGFydDJqcyBjb21waWxlciBvbmx5IHN1cHBvcnRzIHRoZSByZXN0cmljdGVkIG1lc3NhZ2VzIGRlc2NyaWJlZCBhYm92ZS4KICAgKgogICAqIFRoZSBzZW5kIGhhcHBlbnMgaW1tZWRpYXRlbHkgYW5kIGRvZXNuJ3QgYmxvY2suICBUaGUgY29ycmVzcG9uZGluZyByZWNlaXZlCiAgICogcG9ydCBjYW4gcmVjZWl2ZSB0aGUgbWVzc2FnZSBhcyBzb29uIGFzIGl0cyBpc29sYXRlJ3MgZXZlbnQgbG9vcCBpcyByZWFkeQogICAqIHRvIGRlbGl2ZXIgaXQsIGluZGVwZW5kZW50bHkgb2Ygd2hhdCB0aGUgc2VuZGluZyBpc29sYXRlIGlzIGRvaW5nLgogICAqLwogIHZvaWQgc2VuZCh2YXIgbWVzc2FnZSk7CgogIC8qKgogICAqIFRlc3RzIHdoZXRoZXIgW290aGVyXSBpcyBhIFtTZW5kUG9ydF0gcG9pbnRpbmcgdG8gdGhlIHNhbWUKICAgKiBbUmVjZWl2ZVBvcnRdIGFzIHRoaXMgb25lLgogICAqLwogIGJvb2wgb3BlcmF0b3IgPT0odmFyIG90aGVyKTsKCiAgLyoqCiAgICogUmV0dXJucyBhbiBpbW11dGFibGUgaGFzaCBjb2RlIGZvciB0aGlzIHNlbmQgcG9ydCB0aGF0IGlzCiAgICogY29uc2lzdGVudCB3aXRoIHRoZSA9PSBvcGVyYXRvci4KICAgKi8KICBpbnQgZ2V0IGhhc2hDb2RlOwp9CgovKioKICogVG9nZXRoZXIgd2l0aCBbU2VuZFBvcnRdLCB0aGUgb25seSBtZWFucyBvZiBjb21tdW5pY2F0aW9uIGJldHdlZW4gaXNvbGF0ZXMuCiAqCiAqIFtSZWNlaXZlUG9ydF1zIGhhdmUgYSBgc2VuZFBvcnRgIGdldHRlciB3aGljaCByZXR1cm5zIGEgW1NlbmRQb3J0XS4KICogQW55IG1lc3NhZ2UgdGhhdCBpcyBzZW50IHRocm91Z2ggdGhpcyBbU2VuZFBvcnRdCiAqIGlzIGRlbGl2ZXJlZCB0byB0aGUgW1JlY2VpdmVQb3J0XSBpdCBoYXMgYmVlbiBjcmVhdGVkIGZyb20uIFRoZXJlLCB0aGUKICogbWVzc2FnZSBpcyBkaXNwYXRjaGVkIHRvIHRoZSBgUmVjZWl2ZVBvcnRgJ3MgbGlzdGVuZXIuCiAqCiAqIEEgW1JlY2VpdmVQb3J0XSBpcyBhIG5vbi1icm9hZGNhc3Qgc3RyZWFtLiBUaGlzIG1lYW5zIHRoYXQgaXQgYnVmZmVycwogKiBpbmNvbWluZyBtZXNzYWdlcyB1bnRpbCBhIGxpc3RlbmVyIGlzIHJlZ2lzdGVyZWQuIE9ubHkgb25lIGxpc3RlbmVyIGNhbgogKiByZWNlaXZlIG1lc3NhZ2VzLiBTZWUgW1N0cmVhbS5hc0Jyb2FkY2FzdFN0cmVhbV0gZm9yIHRyYW5zZm9ybWluZyB0aGUgcG9ydAogKiB0byBhIGJyb2FkY2FzdCBzdHJlYW0uCiAqCiAqIEEgW1JlY2VpdmVQb3J0XSBtYXkgaGF2ZSBtYW55IFtTZW5kUG9ydF1zLgogKi8KYWJzdHJhY3QgY2xhc3MgUmVjZWl2ZVBvcnQgaW1wbGVtZW50cyBTdHJlYW0gewogIC8qKgogICAqIE9wZW5zIGEgbG9uZy1saXZlZCBwb3J0IGZvciByZWNlaXZpbmcgbWVzc2FnZXMuCiAgICoKICAgKiBBIFtSZWNlaXZlUG9ydF0gaXMgYSBub24tYnJvYWRjYXN0IHN0cmVhbS4gVGhpcyBtZWFucyB0aGF0IGl0IGJ1ZmZlcnMKICAgKiBpbmNvbWluZyBtZXNzYWdlcyB1bnRpbCBhIGxpc3RlbmVyIGlzIHJlZ2lzdGVyZWQuIE9ubHkgb25lIGxpc3RlbmVyIGNhbgogICAqIHJlY2VpdmUgbWVzc2FnZXMuIFNlZSBbU3RyZWFtLmFzQnJvYWRjYXN0U3RyZWFtXSBmb3IgdHJhbnNmb3JtaW5nIHRoZSBwb3J0CiAgICogdG8gYSBicm9hZGNhc3Qgc3RyZWFtLgogICAqCiAgICogQSByZWNlaXZlIHBvcnQgaXMgY2xvc2VkIGJ5IGNhbmNlbGluZyBpdHMgc3Vic2NyaXB0aW9uLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgUmVjZWl2ZVBvcnQoKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtSZWNlaXZlUG9ydF0gZnJvbSBhIFtSYXdSZWNlaXZlUG9ydF0uCiAgICoKICAgKiBUaGUgaGFuZGxlciBvZiB0aGUgZ2l2ZW4gW3Jhd1BvcnRdIGlzIG92ZXJ3cml0dGVuIGR1cmluZyB0aGUgY29uc3RydWN0aW9uCiAgICogb2YgdGhlIHJlc3VsdC4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IFJlY2VpdmVQb3J0LmZyb21SYXdSZWNlaXZlUG9ydChSYXdSZWNlaXZlUG9ydCByYXdQb3J0KTsKCiAgLyoqCiAgICogSW5oZXJpdGVkIGZyb20gW1N0cmVhbV0uCiAgICoKICAgKiBOb3RlIHRoYXQgW29uRXJyb3JdIGFuZCBbY2FuY2VsT25FcnJvcl0gYXJlIGlnbm9yZWQgc2luY2UgYSBSZWNlaXZlUG9ydAogICAqIHdpbGwgbmV2ZXIgcmVjZWl2ZSBhbiBlcnJvci4KICAgKgogICAqIFRoZSBbb25Eb25lXSBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHN0cmVhbSBjbG9zZXMuCiAgICogVGhlIHN0cmVhbSBjbG9zZXMgd2hlbiBbY2xvc2VdIGlzIGNhbGxlZC4KICAgKi8KICBTdHJlYW1TdWJzY3JpcHRpb24gbGlzdGVuKHZvaWQgb25EYXRhKHZhciBtZXNzYWdlKSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pOwoKICAvKioKICAgKiBDbG9zZXMgYHRoaXNgLgogICAqCiAgICogSWYgdGhlIHN0cmVhbSBoYXMgbm90IGJlZW4gY2FuY2VsZWQgeWV0LCBhZGRzIGEgY2xvc2UtZXZlbnQgdG8gdGhlIGV2ZW50CiAgICogcXVldWUgYW5kIGRpc2NhcmRzIGFueSBmdXJ0aGVyIGluY29taW5nIG1lc3NhZ2VzLgogICAqCiAgICogSWYgdGhlIHN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIGNhbmNlbGVkIHRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QuCiAgICovCiAgdm9pZCBjbG9zZSgpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgW1NlbmRQb3J0XSB0aGF0IHNlbmRzIHRvIHRoaXMgcmVjZWl2ZSBwb3J0LgogICAqLwogIFNlbmRQb3J0IGdldCBzZW5kUG9ydDsKfQoKYWJzdHJhY3QgY2xhc3MgUmF3UmVjZWl2ZVBvcnQgewogIC8qKgogICAqIE9wZW5zIGEgbG9uZy1saXZlZCBwb3J0IGZvciByZWNlaXZpbmcgbWVzc2FnZXMuCiAgICoKICAgKiBBIFtSYXdSZWNlaXZlUG9ydF0gaXMgbG93IGxldmVsIGFuZCBkb2VzIG5vdCB3b3JrIHdpdGggW1pvbmVdcy4gSXQKICAgKiBjYW4gbm90IGJlIHBhdXNlZC4gVGhlIGRhdGEtaGFuZGxlciBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIGZpcnN0CiAgICogZXZlbnQgaXMgcmVjZWl2ZWQuCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBSYXdSZWNlaXZlUG9ydChbRnVuY3Rpb24gaGFuZGxlcl0pOwoKICAvKioKICAgKiBTZXRzIHRoZSBoYW5kbGVyIHRoYXQgaXMgaW52b2tlZCBmb3IgZXZlcnkgaW5jb21pbmcgbWVzc2FnZS4KICAgKgogICAqIFRoZSBoYW5kbGVyIGlzIGludm9rZWQgaW4gdGhlIHJvb3Qtem9uZSAoW1pvbmUucm9vdF0pLgogICAqLwogIHZvaWQgc2V0IGhhbmRsZXIoRnVuY3Rpb24gbmV3SGFuZGxlcik7CgogIC8qKgogICAqIENsb3NlcyB0aGUgcG9ydC4KICAgKgogICAqIEFmdGVyIGEgY2FsbCB0byB0aGlzIG1ldGhvZCBhbnkgaW5jb21pbmcgbWVzc2FnZSBpcyBzaWxlbnRseSBkcm9wcGVkLgogICAqLwogIHZvaWQgY2xvc2UoKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIFtTZW5kUG9ydF0gdGhhdCBzZW5kcyB0byB0aGlzIHJhdyByZWNlaXZlIHBvcnQuCiAgICovCiAgU2VuZFBvcnQgZ2V0IHNlbmRQb3J0Owp9CgovKioKICogRGVzY3JpcHRpb24gb2YgYW4gZXJyb3IgZnJvbSBhbm90aGVyIGlzb2xhdGUuCiAqCiAqIFRoaXMgZXJyb3IgaGFzIHRoZSBzYW1lIGB0b1N0cmluZygpYCBhbmQgYHN0YWNrVHJhY2UudG9TdHJpbmcoKWAgYmVoYXZpb3IKICogYXMgdGhlIG9yaWdpbmFsIGVycm9yLCBidXQgaGFzIG5vIG90aGVyIGZlYXR1cmVzIG9mIHRoZSBvcmlnaW5hbCBlcnJvci4KICovCmNsYXNzIFJlbW90ZUVycm9yIGltcGxlbWVudHMgRXJyb3IgewogIGZpbmFsIFN0cmluZyBfZGVzY3JpcHRpb247CiAgZmluYWwgU3RhY2tUcmFjZSBzdGFja1RyYWNlOwogIFJlbW90ZUVycm9yKFN0cmluZyBkZXNjcmlwdGlvbiwgU3RyaW5nIHN0YWNrRGVzY3JpcHRpb24pCiAgICAgIDogX2Rlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24sCiAgICAgICAgc3RhY2tUcmFjZSA9IG5ldyBTdGFja1RyYWNlLmZyb21TdHJpbmcoc3RhY2tEZXNjcmlwdGlvbik7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gX2Rlc2NyaXB0aW9uOwp9CgovKioKICogQW4gZWZmaWNpZW50bHkgdHJhbnNmZXJhYmxlIHNlcXVlbmNlIG9mIGJ5dGUgdmFsdWVzLgogKgogKiBBIFtUcmFuc2ZlcmFibGVUeXBlZERhdGFdIGlzIGNyZWF0ZWQgZnJvbSBhIG51bWJlciBvZiBieXRlcy4KICogVGhpcyB3aWxsIHRha2UgdGltZSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZiBieXRlcy4KICoKICogVGhlIFtUcmFuc2ZlcmFibGVUeXBlZERhdGFdIGNhbiBiZSBtb3ZlZCBiZXR3ZWVuIGlzb2xhdGVzLCBzbwogKiBzZW5kaW5nIGl0IHRocm91Z2ggYSBzZW5kIHBvcnQgd2lsbCBvbmx5IHRha2UgY29uc3RhbnQgdGltZS4KICoKICogV2hlbiBzZW50IHRoaXMgd2F5LCB0aGUgbG9jYWwgdHJhbnNmZXJhYmxlIGNhbiBubyBsb25nZXIgYmUgbWF0ZXJpYWxpemVkLAogKiBhbmQgdGhlIHJlY2VpdmVkIG9iamVjdCBpcyBub3cgdGhlIG9ubHkgd2F5IHRvIG1hdGVyaWFsaXplIHRoZSBkYXRhLgogKi8KQFNpbmNlKCIyLjMuMiIpCmFic3RyYWN0IGNsYXNzIFRyYW5zZmVyYWJsZVR5cGVkRGF0YSB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBbVHJhbnNmZXJhYmxlVHlwZWREYXRhXSBjb250YWluaW5nIHRoZSBieXRlcyBvZiBbbGlzdF0uCiAgICoKICAgKiBJdCBtdXN0IGJlIHBvc3NpYmxlIHRvIGNyZWF0ZSBhIHNpbmdsZSBbVWludDhMaXN0XSBjb250YWluaW5nIHRoZQogICAqIGJ5dGVzLCBzbyBpZiB0aGVyZSBhcmUgbW9yZSBieXRlcyB0aGFuIHdoYXQgdGhlIHBsYXRmb3JtIGFsbG93cyBpbgogICAqIGEgc2luZ2xlIFtVaW50OExpc3RdLCB0aGVuIGNyZWF0aW9uIGZhaWxzLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgVHJhbnNmZXJhYmxlVHlwZWREYXRhLmZyb21MaXN0KExpc3Q8VHlwZWREYXRhPiBsaXN0KTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBbQnl0ZUJ1ZmZlcl0gY29udGFpbmluZyB0aGUgYnl0ZXMgc3RvcmVkIGluIHRoaXMgW1RyYW5zZmVyYWJsZVR5cGVkRGF0YV0uCiAgICoKICAgKiBUaGUgW1RyYW5zZmVyYWJsZVR5cGVkRGF0YV0gaXMgYSBjcm9zcy1pc29sYXRlIHNpbmdsZS11c2UgcmVzb3VyY2UuCiAgICogVGhpcyBtZXRob2QgbXVzdCBub3QgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIHVuZGVybHlpbmcKICAgKiB0cmFuc2ZlcmFibGUgYnl0ZXMsIGV2ZW4gaWYgdGhlIGNhbGxzIG9jY3VyIGluIGRpZmZlcmVudCBpc29sYXRlcy4KICAgKi8KICBCeXRlQnVmZmVyIG1hdGVyaWFsaXplKCk7Cn0KgxcATk48AQQsMxskAyUDHgMSBBYBFSRAARgBBC0EMzgYHCc6AgEEJwNMTTkDTBhBA0tKA1EgA0dCTBoDTUQfSSUDREBJOgNOTTUEEEIiTigBBkAFLgU5HwVMSTYGHgEGOwUtTzEwBUlMBiQBBj8FQUo8NgYoAQY9BVAFTzEFUE0WBhAhAQZKBUUfBUgoT00XBU1LBQ4NKkMnCUhJSAZPAQZCBTImBUdHEAVJRikGJwEGTwVPEAZMLwEGNgVJTCUGMQEGLwVHQxoGQQEGTA4FRh1LGwVCMDU1OEBAQSUFPEMFMTJHS0wFUUFFSQ4FTykFUDAFRUhFKAVMQwYsLRsbFxgoAQZMGAVPGQVJDwUQFB0FTEwFMTJLTAVRQUVJDgVFSEUoBT1OSk0xBU4WBUVMKzcFTwVPSQ4FSU0RBUZLQE8rBUQUBU8pBUtDBiwPGRMbFxgbFCdCGxkuFB4BBiQFOzJLPDUFQzhIHAU7PUoXBUdGBT1HBUBBJAVGMTwGNCseHQQBLTUBBh8FQyQFRUMFSEYwBjUBBk0FUU8UBVA8SAVHIwVMFkk6BU5IHUhBHgZMNAZNAQY5BUtNQ0UFTlEUBU5PDgVBNAY9AQY+BUgrBUNCBU5MHUhFHgY1AQYoBTM+BUImTQVAT0A/HExJRkVMGAVOMTsGNwEGRgVMFkk6BUEyBUVJBURFQDdGRUwYBiwzAQZLBTVKMUg8UQVAL0gBTU9LBU5NMwYxAQY7BUVHQkUFTVAWBT4zBjQBBkUFPQVCRjQFSwYWIRkgIjAwRzQGATEUFzIwCxczGBcMHgQCAQQpA0lQMANQDgQwBkQiBVFRPAVQUU1NTQVQT0gGGgEGQCAGHwEGPyYGFAIBBE8DRzRKOgNJS04aAy4ELwY1BUtNUBwFPQYiAQY2BU8UBksBBh4FTSIFQS8GNj4BBhQFTjcFSAYQAQY7BhkCASAGNQVIRhgGNwEGQgU8BikBBhYFSwYQAQY/BhkCAQQxA01LBCUdHzskQiUCAQQ4A0A8A0FAA01IBBAnBksFR0gwBkkBBl0FSUpIBhwCAQxkYXJ0Omlzb2xhdGUyb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9pc29sYXRlX3BhdGNoLmRhcnTAAFCxLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBOb3RlOiB0aGUgVk0gY29uY2F0ZW5hdGVzIGFsbCBwYXRjaCBmaWxlcyBpbnRvIGEgc2luZ2xlIHBhdGNoIGZpbGUuIFRoaXMKLy8vIGZpbGUgaXMgdGhlIGZpcnN0IHBhdGNoIGluICJkYXJ0Omlzb2xhdGUiIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgaW1wb3J0cwovLy8gdXNlZCBieSBwYXRjaGVzIG9mIHRoYXQgbGlicmFyeS4gV2UgcGxhbiB0byBjaGFuZ2UgdGhpcyB3aGVuIHdlIGhhdmUgYQovLy8gc2hhcmVkIGZyb250IGVuZCBhbmQgc2ltcGx5IHVzZSBwYXJ0cy4KCmltcG9ydCAiZGFydDpfaW50ZXJuYWwiIHNob3cgQ2xhc3NJRCwgVk1MaWJyYXJ5SG9va3MsIHBhdGNoOwoKaW1wb3J0ICJkYXJ0OmFzeW5jIgogICAgc2hvdyBDb21wbGV0ZXIsIEZ1dHVyZSwgU3RyZWFtLCBTdHJlYW1Db250cm9sbGVyLCBTdHJlYW1TdWJzY3JpcHRpb24sIFRpbWVyOwoKaW1wb3J0ICJkYXJ0OmNvbGxlY3Rpb24iIHNob3cgSGFzaE1hcDsKaW1wb3J0ICJkYXJ0OnR5cGVkX2RhdGEiIHNob3cgQnl0ZUJ1ZmZlciwgVHlwZWREYXRhLCBVaW50OExpc3Q7CgovLy8gVGhlc2UgYXJlIHRoZSBhZGRpdGlvbmFsIHBhcnRzIG9mIHRoaXMgcGF0Y2ggbGlicmFyeToKLy8gcGFydCAidGltZXJfaW1wbC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBSZWNlaXZlUG9ydCB7CiAgQHBhdGNoCiAgZmFjdG9yeSBSZWNlaXZlUG9ydCgpID0+IG5ldyBfUmVjZWl2ZVBvcnRJbXBsKCk7CgogIEBwYXRjaAogIGZhY3RvcnkgUmVjZWl2ZVBvcnQuZnJvbVJhd1JlY2VpdmVQb3J0KFJhd1JlY2VpdmVQb3J0IHJhd1BvcnQpIHsKICAgIHJldHVybiBuZXcgX1JlY2VpdmVQb3J0SW1wbC5mcm9tUmF3UmVjZWl2ZVBvcnQocmF3UG9ydCk7CiAgfQp9CgpAcGF0Y2gKY2xhc3MgQ2FwYWJpbGl0eSB7CiAgQHBhdGNoCiAgZmFjdG9yeSBDYXBhYmlsaXR5KCkgPT4gbmV3IF9DYXBhYmlsaXR5SW1wbCgpOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9DYXBhYmlsaXR5SW1wbCBpbXBsZW1lbnRzIENhcGFiaWxpdHkgewogIGZhY3RvcnkgX0NhcGFiaWxpdHlJbXBsKCkgbmF0aXZlICJDYXBhYmlsaXR5SW1wbF9mYWN0b3J5IjsKCiAgYm9vbCBvcGVyYXRvciA9PSh2YXIgb3RoZXIpIHsKICAgIHJldHVybiAob3RoZXIgaXMgX0NhcGFiaWxpdHlJbXBsKSAmJiBfZXF1YWxzKG90aGVyKTsKICB9CgogIGludCBnZXQgaGFzaENvZGUgewogICAgcmV0dXJuIF9nZXRfaGFzaGNvZGUoKTsKICB9CgogIF9lcXVhbHMob3RoZXIpIG5hdGl2ZSAiQ2FwYWJpbGl0eUltcGxfZXF1YWxzIjsKICBfZ2V0X2hhc2hjb2RlKCkgbmF0aXZlICJDYXBhYmlsaXR5SW1wbF9nZXRfaGFzaGNvZGUiOwp9CgpAcGF0Y2gKY2xhc3MgUmF3UmVjZWl2ZVBvcnQgewogIC8qKgogICAqIE9wZW5zIGEgbG9uZy1saXZlZCBwb3J0IGZvciByZWNlaXZpbmcgbWVzc2FnZXMuCiAgICoKICAgKiBBIFtSYXdSZWNlaXZlUG9ydF0gaXMgbG93IGxldmVsIGFuZCBkb2VzIG5vdCB3b3JrIHdpdGggW1pvbmVdcy4gSXQKICAgKiBjYW4gbm90IGJlIHBhdXNlZC4gVGhlIGRhdGEtaGFuZGxlciBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIGZpcnN0CiAgICogZXZlbnQgaXMgcmVjZWl2ZWQuCiAgICovCiAgQHBhdGNoCiAgZmFjdG9yeSBSYXdSZWNlaXZlUG9ydChbRnVuY3Rpb24gaGFuZGxlcl0pIHsKICAgIF9SYXdSZWNlaXZlUG9ydEltcGwgcmVzdWx0ID0gbmV3IF9SYXdSZWNlaXZlUG9ydEltcGwoKTsKICAgIHJlc3VsdC5oYW5kbGVyID0gaGFuZGxlcjsKICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CgpjbGFzcyBfUmVjZWl2ZVBvcnRJbXBsIGV4dGVuZHMgU3RyZWFtIGltcGxlbWVudHMgUmVjZWl2ZVBvcnQgewogIF9SZWNlaXZlUG9ydEltcGwoKSA6IHRoaXMuZnJvbVJhd1JlY2VpdmVQb3J0KG5ldyBSYXdSZWNlaXZlUG9ydCgpKTsKCiAgX1JlY2VpdmVQb3J0SW1wbC5mcm9tUmF3UmVjZWl2ZVBvcnQodGhpcy5fcmF3UG9ydCkgewogICAgX2NvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcihvbkNhbmNlbDogY2xvc2UsIHN5bmM6IHRydWUpOwogICAgX3Jhd1BvcnQuaGFuZGxlciA9IF9jb250cm9sbGVyLmFkZDsKICB9CgogIFNlbmRQb3J0IGdldCBzZW5kUG9ydCB7CiAgICByZXR1cm4gX3Jhd1BvcnQuc2VuZFBvcnQ7CiAgfQoKICBTdHJlYW1TdWJzY3JpcHRpb24gbGlzdGVuKHZvaWQgb25EYXRhKHZhciBtZXNzYWdlKSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIHJldHVybiBfY29udHJvbGxlci5zdHJlYW0ubGlzdGVuKG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLCBvbkRvbmU6IG9uRG9uZSwgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgfQoKICBjbG9zZSgpIHsKICAgIF9yYXdQb3J0LmNsb3NlKCk7CiAgICBfY29udHJvbGxlci5jbG9zZSgpOwogIH0KCiAgZmluYWwgUmF3UmVjZWl2ZVBvcnQgX3Jhd1BvcnQ7CiAgU3RyZWFtQ29udHJvbGxlciBfY29udHJvbGxlcjsKfQoKdHlwZWRlZiB2b2lkIF9JbW1lZGlhdGVDYWxsYmFjaygpOwoKLy8vIFRoZSBjYWxsYmFjayB0aGF0IGhhcyBiZWVuIHJlZ2lzdGVyZWQgdGhyb3VnaCBgc2NoZWR1bGVJbW1lZGlhdGVgLgpfSW1tZWRpYXRlQ2FsbGJhY2sgX3BlbmRpbmdJbW1lZGlhdGVDYWxsYmFjazsKCi8vLyBUaGUgY2xvc3VyZSB0aGF0IHNob3VsZCBiZSB1c2VkIGFzIHNjaGVkdWxlSW1tZWRpYXRlQ2xvc3VyZSwgd2hlbiB0aGUgVk0KLy8vIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgZXZlbnQgbG9vcC4Kdm9pZCBfaXNvbGF0ZVNjaGVkdWxlSW1tZWRpYXRlKHZvaWQgY2FsbGJhY2soKSkgewogIGFzc2VydCgoX3BlbmRpbmdJbW1lZGlhdGVDYWxsYmFjayA9PSBudWxsKSB8fAogICAgICAoX3BlbmRpbmdJbW1lZGlhdGVDYWxsYmFjayA9PSBjYWxsYmFjaykpOwogIF9wZW5kaW5nSW1tZWRpYXRlQ2FsbGJhY2sgPSBjYWxsYmFjazsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCnZvaWQgX3J1blBlbmRpbmdJbW1lZGlhdGVDYWxsYmFjaygpIHsKICBpZiAoX3BlbmRpbmdJbW1lZGlhdGVDYWxsYmFjayAhPSBudWxsKSB7CiAgICB2YXIgY2FsbGJhY2sgPSBfcGVuZGluZ0ltbWVkaWF0ZUNhbGxiYWNrOwogICAgX3BlbmRpbmdJbW1lZGlhdGVDYWxsYmFjayA9IG51bGw7CiAgICBjYWxsYmFjaygpOwogIH0KfQoKX0ltbWVkaWF0ZUNhbGxiYWNrIF9yZW1vdmVQZW5kaW5nSW1tZWRpYXRlQ2FsbGJhY2soKSB7CiAgdmFyIGNhbGxiYWNrID0gX3BlbmRpbmdJbW1lZGlhdGVDYWxsYmFjazsKICBfcGVuZGluZ0ltbWVkaWF0ZUNhbGxiYWNrID0gbnVsbDsKICByZXR1cm4gY2FsbGJhY2s7Cn0KCi8vLyBUaGUgZW1iZWRkZXIgY2FuIGV4ZWN1dGUgdGhpcyBmdW5jdGlvbiB0byBnZXQgaG9sZCBvZgovLy8gW19pc29sYXRlU2NoZWR1bGVJbW1lZGlhdGVdIGFib3ZlLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKRnVuY3Rpb24gX2dldElzb2xhdGVTY2hlZHVsZUltbWVkaWF0ZUNsb3N1cmUoKSB7CiAgcmV0dXJuIF9pc29sYXRlU2NoZWR1bGVJbW1lZGlhdGU7Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1Jhd1JlY2VpdmVQb3J0SW1wbCBpbXBsZW1lbnRzIFJhd1JlY2VpdmVQb3J0IHsKICBmYWN0b3J5IF9SYXdSZWNlaXZlUG9ydEltcGwoKSBuYXRpdmUgIlJhd1JlY2VpdmVQb3J0SW1wbF9mYWN0b3J5IjsKCiAgY2xvc2UoKSB7CiAgICAvLyBDbG9zZSB0aGUgcG9ydCBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIGhhbmRsZXIgbWFwLgogICAgX2hhbmRsZXJNYXAucmVtb3ZlKHRoaXMuX2Nsb3NlSW50ZXJuYWwoKSk7CiAgfQoKICBTZW5kUG9ydCBnZXQgc2VuZFBvcnQgewogICAgcmV0dXJuIF9nZXRfc2VuZHBvcnQoKTsKICB9CgogIGJvb2wgb3BlcmF0b3IgPT0odmFyIG90aGVyKSB7CiAgICByZXR1cm4gKG90aGVyIGlzIF9SYXdSZWNlaXZlUG9ydEltcGwpICYmCiAgICAgICAgKHRoaXMuX2dldF9pZCgpID09IG90aGVyLl9nZXRfaWQoKSk7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiBzZW5kUG9ydC5oYXNoQ29kZTsKICB9CgogIC8qKioqIEludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgKioqKi8KICBfZ2V0X2lkKCkgbmF0aXZlICJSYXdSZWNlaXZlUG9ydEltcGxfZ2V0X2lkIjsKICBfZ2V0X3NlbmRwb3J0KCkgbmF0aXZlICJSYXdSZWNlaXZlUG9ydEltcGxfZ2V0X3NlbmRwb3J0IjsKCiAgLy8gQ2FsbGVkIGZyb20gdGhlIFZNIHRvIHJldHJpZXZlIHRoZSBoYW5kbGVyIGZvciBhIG1lc3NhZ2UuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgc3RhdGljIF9sb29rdXBIYW5kbGVyKGludCBpZCkgewogICAgdmFyIHJlc3VsdCA9IF9oYW5kbGVyTWFwW2lkXTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBDYWxsZWQgZnJvbSB0aGUgVk0gdG8gZGlzcGF0Y2ggdG8gdGhlIGhhbmRsZXIuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgc3RhdGljIHZvaWQgX2hhbmRsZU1lc3NhZ2UoRnVuY3Rpb24gaGFuZGxlciwgdmFyIG1lc3NhZ2UpIHsKICAgIC8vIFRPRE8oZmxvaXRzY2gpOiB0aGlzIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IGFueSBleGNlcHRpb24gYWJvcnRzIHRoZQogICAgLy8gVk0uIE9uY2Ugd2UgaGF2ZSBub24tZmF0YWwgZ2xvYmFsIGV4Y2VwdGlvbnMgd2UgbmVlZCB0byBjYXRjaCBlcnJvcnMKICAgIC8vIHNvIHRoYXQgd2UgY2FuIHJ1biB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcy4KICAgIGhhbmRsZXIobWVzc2FnZSk7CiAgICBfcnVuUGVuZGluZ0ltbWVkaWF0ZUNhbGxiYWNrKCk7CiAgfQoKICAvLyBDYWxsIGludG8gdGhlIFZNIHRvIGNsb3NlIHRoZSBWTSBtYWludGFpbmVkIG1hcHBpbmdzLgogIF9jbG9zZUludGVybmFsKCkgbmF0aXZlICJSYXdSZWNlaXZlUG9ydEltcGxfY2xvc2VJbnRlcm5hbCI7CgogIHZvaWQgc2V0IGhhbmRsZXIoRnVuY3Rpb24gdmFsdWUpIHsKICAgIF9oYW5kbGVyTWFwW3RoaXMuX2dldF9pZCgpXSA9IHZhbHVlOwogIH0KCiAgLy8gVE9ETyhpcG9zdmEpOiBJZGVhbGx5IGtlZXAgdGhpcyBtYXAgaW4gdGhlIFZNLgogIC8vIGlkIHRvIGhhbmRsZXIgbWFwcGluZy4KICBzdGF0aWMgX2luaXRIYW5kbGVyTWFwKCkgewogICAgLy8gVE9ETygxODUxMSk6IFdvcmthcm91bmQgYmFkIENoZWNrU21pIGhvaXN0aW5nLgogICAgdmFyIHRlbXBNYXAgPSBuZXcgSGFzaE1hcCgpOwogICAgLy8gQ29sbGVjdCBmZWVkYmFjayB0aGF0IG5vdCBhbGwga2V5cyBhcmUgU21pcy4KICAgIHRlbXBNYXBbIi4iXSA9IDE7CiAgICB0ZW1wTWFwWyIuIl0gPSAyOwoKICAgIHJldHVybiBuZXcgSGFzaE1hcCgpOwogIH0KCiAgc3RhdGljIGZpbmFsIE1hcCBfaGFuZGxlck1hcCA9IF9pbml0SGFuZGxlck1hcCgpOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9TZW5kUG9ydEltcGwgaW1wbGVtZW50cyBTZW5kUG9ydCB7CiAgZmFjdG9yeSBfU2VuZFBvcnRJbXBsLl91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvKi0tLSBwdWJsaWMgaW50ZXJmYWNlIC0tLSovCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgdm9pZCBzZW5kKHZhciBtZXNzYWdlKSB7CiAgICBfc2VuZEludGVybmFsKG1lc3NhZ2UpOwogIH0KCiAgYm9vbCBvcGVyYXRvciA9PSh2YXIgb3RoZXIpIHsKICAgIHJldHVybiAob3RoZXIgaXMgX1NlbmRQb3J0SW1wbCkgJiYgKHRoaXMuX2dldF9pZCgpID09IG90aGVyLl9nZXRfaWQoKSk7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiBfZ2V0X2hhc2hjb2RlKCk7CiAgfQoKICAvKi0tLSBwcml2YXRlIGltcGxlbWVudGF0aW9uIC0tLSovCiAgX2dldF9pZCgpIG5hdGl2ZSAiU2VuZFBvcnRJbXBsX2dldF9pZCI7CiAgX2dldF9oYXNoY29kZSgpIG5hdGl2ZSAiU2VuZFBvcnRJbXBsX2dldF9oYXNoY29kZSI7CgogIC8vIEZvcndhcmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHNlbmRpbmcgbWVzc2FnZXMgdG8gdGhlIFZNLgogIHZvaWQgX3NlbmRJbnRlcm5hbCh2YXIgbWVzc2FnZSkgbmF0aXZlICJTZW5kUG9ydEltcGxfc2VuZEludGVybmFsXyI7Cn0KCnR5cGVkZWYgX051bGxhcnlGdW5jdGlvbigpOwp0eXBlZGVmIF9VbmFyeUZ1bmN0aW9uKE51bGwgYXJncyk7CnR5cGVkZWYgX0JpbmFyeUZ1bmN0aW9uKE51bGwgYXJncywgTnVsbCBtZXNzYWdlKTsKCi8qKgogKiBUYWtlcyB0aGUgcmVhbCBlbnRyeSBwb2ludCBhcyBhcmd1bWVudCBhbmQgaW52b2tlcyBpdCB3aXRoIHRoZQogKiBpbml0aWFsIG1lc3NhZ2UuICBEZWZlcnMgZXhlY3V0aW9uIG9mIHRoZSBlbnRyeSBwb2ludCB1bnRpbCB0aGUKICogaXNvbGF0ZSBpcyBpbiB0aGUgbWVzc2FnZSBsb29wLgogKi8KQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCnZvaWQgX3N0YXJ0TWFpbklzb2xhdGUoRnVuY3Rpb24gZW50cnlQb2ludCwgTGlzdDxTdHJpbmc+IGFyZ3MpIHsKICBfc3RhcnRJc29sYXRlKAogICAgICBudWxsLCAvLyBubyBwYXJlbnQgcG9ydAogICAgICBlbnRyeVBvaW50LAogICAgICBhcmdzLAogICAgICBudWxsLCAvLyBubyBtZXNzYWdlCiAgICAgIHRydWUsIC8vIGlzU3Bhd25VcmkKICAgICAgbnVsbCwgLy8gbm8gY29udHJvbCBwb3J0CiAgICAgIG51bGwpOyAvLyBubyBjYXBhYmlsaXRpZXMKfQoKLyoqCiAqIFJldHVybnMgdGhlIF9zdGFydE1haW5Jc29sYXRlIGZ1bmN0aW9uLiBUaGlzIGNsb3N1cml6YXRpb24gYWxsb3dzIGVtYmVkZGVycwogKiB0byBzZXR1cCB0cmFtcG9saW5lcyB0byB0aGUgbWFpbiBmdW5jdGlvbi4gVGhpcyB3b3JrYXJvdW5kIGNhbiBiZSByZW1vdmVkCiAqIG9uY2Ugc3VwcG9ydCBmb3IgQHByYWdtYSgidm06ZW50cnlfcG9pbnQiLCAiZ2V0IikgYXMgZG9jdW1lbnRlZCBpbgogKiBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMzU3MjAgbGFuZHMuCiAqLwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKRnVuY3Rpb24gX2dldFN0YXJ0TWFpbklzb2xhdGVGdW5jdGlvbigpIHsKICByZXR1cm4gX3N0YXJ0TWFpbklzb2xhdGU7Cn0KCi8qKgogKiBUYWtlcyB0aGUgcmVhbCBlbnRyeSBwb2ludCBhcyBhcmd1bWVudCBhbmQgaW52b2tlcyBpdCB3aXRoIHRoZSBpbml0aWFsCiAqIG1lc3NhZ2UuCiAqLwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKdm9pZCBfc3RhcnRJc29sYXRlKAogICAgU2VuZFBvcnQgcGFyZW50UG9ydCwKICAgIEZ1bmN0aW9uIGVudHJ5UG9pbnQsCiAgICBMaXN0PFN0cmluZz4gYXJncywKICAgIHZhciBtZXNzYWdlLAogICAgYm9vbCBpc1NwYXduVXJpLAogICAgUmF3UmVjZWl2ZVBvcnQgY29udHJvbFBvcnQsCiAgICBMaXN0IGNhcGFiaWxpdGllcykgewogIC8vIFRoZSBjb250cm9sIHBvcnQgKGFrYSB0aGUgbWFpbiBpc29sYXRlIHBvcnQpIGRvZXMgbm90IGhhbmRsZSBhbnkgbWVzc2FnZXMuCiAgaWYgKGNvbnRyb2xQb3J0ICE9IG51bGwpIHsKICAgIGNvbnRyb2xQb3J0LmhhbmRsZXIgPSAoXykge307IC8vIE5vYm9keSBob21lIG9uIHRoZSBjb250cm9sIHBvcnQuCiAgfQoKICBpZiAocGFyZW50UG9ydCAhPSBudWxsKSB7CiAgICAvLyBCdWlsZCBhIG1lc3NhZ2UgdG8gb3VyIHBhcmVudCBpc29sYXRlIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlCiAgICAvLyBjdXJyZW50IGlzb2xhdGUncyBjb250cm9sIHBvcnQgYW5kIGNhcGFiaWxpdGllcy4KICAgIC8vCiAgICAvLyBUT0RPKGZsb2l0c2NoKTogU2VuZCBhbiBlcnJvciBtZXNzYWdlIGlmIHdlIGNhbid0IGZpbmQgdGhlIGVudHJ5IHBvaW50LgogICAgdmFyIHJlYWR5TWVzc2FnZSA9IG5ldyBMaXN0KDIpOwogICAgcmVhZHlNZXNzYWdlWzBdID0gY29udHJvbFBvcnQuc2VuZFBvcnQ7CiAgICByZWFkeU1lc3NhZ2VbMV0gPSBjYXBhYmlsaXRpZXM7CgogICAgLy8gT3V0IG9mIGFuIGV4Y2VzcyBvZiBwYXJhbm9pYSB3ZSBjbGVhciB0aGUgY2FwYWJpbGl0aWVzIGZyb20gdGhlCiAgICAvLyBzdGFjay4gIE5vdCByZWFsbHkgbmVjZXNzYXJ5LgogICAgY2FwYWJpbGl0aWVzID0gbnVsbDsKICAgIHBhcmVudFBvcnQuc2VuZChyZWFkeU1lc3NhZ2UpOwogIH0KICBhc3NlcnQoY2FwYWJpbGl0aWVzID09IG51bGwpOwoKICAvLyBEZWxheSBhbGwgdXNlciBjb2RlIGhhbmRsaW5nIHRvIHRoZSBuZXh0IHJ1biBvZiB0aGUgbWVzc2FnZSBsb29wLiBUaGlzCiAgLy8gYWxsb3dzIHVzIHRvIGludGVyY2VwdCBjZXJ0YWluIGNvbmRpdGlvbnMgaW4gdGhlIGV2ZW50IGRpc3BhdGNoLCBzdWNoIGFzCiAgLy8gc3RhcnRpbmcgaW4gcGF1c2VkIHN0YXRlLgogIFJhd1JlY2VpdmVQb3J0IHBvcnQgPSBuZXcgUmF3UmVjZWl2ZVBvcnQoKTsKICBwb3J0LmhhbmRsZXIgPSAoXykgewogICAgcG9ydC5jbG9zZSgpOwoKICAgIGlmIChpc1NwYXduVXJpKSB7CiAgICAgIGlmIChlbnRyeVBvaW50IGlzIF9CaW5hcnlGdW5jdGlvbikgewogICAgICAgIChlbnRyeVBvaW50IGFzIGR5bmFtaWMpKGFyZ3MsIG1lc3NhZ2UpOwogICAgICB9IGVsc2UgaWYgKGVudHJ5UG9pbnQgaXMgX1VuYXJ5RnVuY3Rpb24pIHsKICAgICAgICAoZW50cnlQb2ludCBhcyBkeW5hbWljKShhcmdzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBlbnRyeVBvaW50KCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGVudHJ5UG9pbnQobWVzc2FnZSk7CiAgICB9CiAgfTsKICAvLyBNYWtlIHN1cmUgdGhlIG1lc3NhZ2UgaGFuZGxlciBpcyB0cmlnZ2VyZWQuCiAgcG9ydC5zZW5kUG9ydC5zZW5kKG51bGwpOwp9CgpAcGF0Y2gKY2xhc3MgSXNvbGF0ZSB7CiAgc3RhdGljIGZpbmFsIF9jdXJyZW50SXNvbGF0ZSA9IF9nZXRDdXJyZW50SXNvbGF0ZSgpOwogIHN0YXRpYyBmaW5hbCBfcm9vdFVyaSA9IF9nZXRDdXJyZW50Um9vdFVyaSgpOwoKICBAcGF0Y2gKICBzdGF0aWMgSXNvbGF0ZSBnZXQgY3VycmVudCA9PiBfY3VycmVudElzb2xhdGU7CgogIEBwYXRjaAogIFN0cmluZyBnZXQgZGVidWdOYW1lID0+IF9nZXREZWJ1Z05hbWUoY29udHJvbFBvcnQpOwoKICBAcGF0Y2gKICBzdGF0aWMgRnV0dXJlPFVyaT4gZ2V0IHBhY2thZ2VSb290IHsKICAgIHZhciBob29rID0gVk1MaWJyYXJ5SG9va3MucGFja2FnZVJvb3RVcmlGdXR1cmU7CiAgICBpZiAoaG9vayA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJJc29sYXRlLnBhY2thZ2VSb290Iik7CiAgICB9CiAgICByZXR1cm4gaG9vaygpOwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIEZ1dHVyZTxVcmk+IGdldCBwYWNrYWdlQ29uZmlnIHsKICAgIHZhciBob29rID0gVk1MaWJyYXJ5SG9va3MucGFja2FnZUNvbmZpZ1VyaUZ1dHVyZTsKICAgIGlmIChob29rID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIklzb2xhdGUucGFja2FnZUNvbmZpZyIpOwogICAgfQogICAgcmV0dXJuIGhvb2soKTsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBGdXR1cmU8VXJpPiByZXNvbHZlUGFja2FnZVVyaShVcmkgcGFja2FnZVVyaSkgewogICAgdmFyIGhvb2sgPSBWTUxpYnJhcnlIb29rcy5yZXNvbHZlUGFja2FnZVVyaUZ1dHVyZTsKICAgIGlmIChob29rID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIklzb2xhdGUucmVzb2x2ZVBhY2thZ2VVcmkiKTsKICAgIH0KICAgIHJldHVybiBob29rKHBhY2thZ2VVcmkpOwogIH0KCiAgc3RhdGljIGJvb2wgX3BhY2thZ2VTdXBwb3J0ZWQoKSA9PgogICAgICAoVk1MaWJyYXJ5SG9va3MucGFja2FnZVJvb3RVcmlGdXR1cmUgIT0gbnVsbCkgJiYKICAgICAgKFZNTGlicmFyeUhvb2tzLnBhY2thZ2VDb25maWdVcmlGdXR1cmUgIT0gbnVsbCkgJiYKICAgICAgKFZNTGlicmFyeUhvb2tzLnJlc29sdmVQYWNrYWdlVXJpRnV0dXJlICE9IG51bGwpOwoKICBAcGF0Y2gKICBzdGF0aWMgRnV0dXJlPElzb2xhdGU+IHNwYXduPFQ+KHZvaWQgZW50cnlQb2ludChUIG1lc3NhZ2UpLCBUIG1lc3NhZ2UsCiAgICAgIHtib29sIHBhdXNlZDogZmFsc2UsCiAgICAgIGJvb2wgZXJyb3JzQXJlRmF0YWwsCiAgICAgIFNlbmRQb3J0IG9uRXhpdCwKICAgICAgU2VuZFBvcnQgb25FcnJvciwKICAgICAgU3RyaW5nIGRlYnVnTmFtZX0pIGFzeW5jIHsKICAgIC8vIGBwYXVzZWRgIGlzbid0IGhhbmRsZWQgeWV0LgogICAgUmF3UmVjZWl2ZVBvcnQgcmVhZHlQb3J0OwogICAgdHJ5IHsKICAgICAgLy8gQ2hlY2sgZm9yIHRoZSB0eXBlIG9mIGBlbnRyeVBvaW50YCBvbiB0aGUgc3Bhd25pbmcgaXNvbGF0ZSB0byBtYWtlCiAgICAgIC8vIGVycm9yLWhhbmRsaW5nIGVhc2llci4KICAgICAgaWYgKGVudHJ5UG9pbnQgaXMhIF9VbmFyeUZ1bmN0aW9uKSB7CiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoZW50cnlQb2ludCk7CiAgICAgIH0KICAgICAgLy8gVGhlIFZNIHdpbGwgaW52b2tlIFtfc3RhcnRJc29sYXRlXSB3aXRoIGVudHJ5UG9pbnQgYXMgYXJndW1lbnQuCiAgICAgIHJlYWR5UG9ydCA9IG5ldyBSYXdSZWNlaXZlUG9ydCgpOwoKICAgICAgLy8gV2UgZG8gbm90IGluaGVyaXQgdGhlIHBhY2thZ2UgY29uZmlnIHNldHRpbmdzIGZyb20gdGhlIHBhcmVudCBpc29sYXRlLAogICAgICAvLyBpbnN0ZWFkIHdlIHVzZSB0aGUgdmFsdWVzIHRoYXQgd2VyZSBzZXQgb24gdGhlIGNvbW1hbmQgbGluZS4KICAgICAgdmFyIHBhY2thZ2VDb25maWcgPSBWTUxpYnJhcnlIb29rcy5wYWNrYWdlQ29uZmlnU3RyaW5nOwogICAgICB2YXIgc2NyaXB0ID0gVk1MaWJyYXJ5SG9va3MucGxhdGZvcm1TY3JpcHQ7CiAgICAgIGlmIChzY3JpcHQgPT0gbnVsbCkgewogICAgICAgIC8vIFdlIGRvIG5vdCBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiB0byBzdXBwb3J0IHNwYXduaW5nIHRoZSBuZXcKICAgICAgICAvLyBpc29sYXRlLgogICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJJc29sYXRlLnNwYXduIik7CiAgICAgIH0KICAgICAgaWYgKHNjcmlwdC5zY2hlbWUgPT0gInBhY2thZ2UiKSB7CiAgICAgICAgc2NyaXB0ID0gYXdhaXQgSXNvbGF0ZS5yZXNvbHZlUGFja2FnZVVyaShzY3JpcHQpOwogICAgICB9CgogICAgICBfc3Bhd25GdW5jdGlvbigKICAgICAgICAgIHJlYWR5UG9ydC5zZW5kUG9ydCwKICAgICAgICAgIHNjcmlwdC50b1N0cmluZygpLAogICAgICAgICAgZW50cnlQb2ludCwKICAgICAgICAgIG1lc3NhZ2UsCiAgICAgICAgICBwYXVzZWQsCiAgICAgICAgICBlcnJvcnNBcmVGYXRhbCwKICAgICAgICAgIG9uRXhpdCwKICAgICAgICAgIG9uRXJyb3IsCiAgICAgICAgICBudWxsLAogICAgICAgICAgcGFja2FnZUNvbmZpZywKICAgICAgICAgIGRlYnVnTmFtZSk7CiAgICAgIHJldHVybiBhd2FpdCBfc3Bhd25Db21tb24ocmVhZHlQb3J0KTsKICAgIH0gY2F0Y2ggKGUsIHN0KSB7CiAgICAgIGlmIChyZWFkeVBvcnQgIT0gbnVsbCkgewogICAgICAgIHJlYWR5UG9ydC5jbG9zZSgpOwogICAgICB9CiAgICAgIHJldHVybiBhd2FpdCBuZXcgRnV0dXJlPElzb2xhdGU+LmVycm9yKGUsIHN0KTsKICAgIH0KICB9CgogIEBwYXRjaAogIHN0YXRpYyBGdXR1cmU8SXNvbGF0ZT4gc3Bhd25VcmkoVXJpIHVyaSwgTGlzdDxTdHJpbmc+IGFyZ3MsIHZhciBtZXNzYWdlLAogICAgICB7Ym9vbCBwYXVzZWQ6IGZhbHNlLAogICAgICBTZW5kUG9ydCBvbkV4aXQsCiAgICAgIFNlbmRQb3J0IG9uRXJyb3IsCiAgICAgIGJvb2wgZXJyb3JzQXJlRmF0YWwsCiAgICAgIGJvb2wgY2hlY2tlZCwKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudCwKICAgICAgVXJpIHBhY2thZ2VSb290LAogICAgICBVcmkgcGFja2FnZUNvbmZpZywKICAgICAgYm9vbCBhdXRvbWF0aWNQYWNrYWdlUmVzb2x1dGlvbjogZmFsc2UsCiAgICAgIFN0cmluZyBkZWJ1Z05hbWV9KSBhc3luYyB7CiAgICBSYXdSZWNlaXZlUG9ydCByZWFkeVBvcnQ7CiAgICBpZiAoZW52aXJvbm1lbnQgIT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgVW5pbXBsZW1lbnRlZEVycm9yKCJlbnZpcm9ubWVudCIpOwogICAgfQoKICAgIC8vIFZlcmlmeSB0aGF0IG5vIG11dHVhbGx5IGV4Y2x1c2l2ZSBhcmd1bWVudHMgaGF2ZSBiZWVuIHBhc3NlZC4KICAgIGlmIChhdXRvbWF0aWNQYWNrYWdlUmVzb2x1dGlvbikgewogICAgICBpZiAocGFja2FnZVJvb3QgIT0gbnVsbCkgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJDYW5ub3Qgc2ltdWx0YW5lb3VzbHkgcmVxdWVzdCAiCiAgICAgICAgICAgICJhdXRvbWF0aWNQYWNrYWdlUmVzb2x1dGlvbiBhbmQgc3BlY2lmeSBhIgogICAgICAgICAgICAicGFja2FnZVJvb3QuIik7CiAgICAgIH0KICAgICAgaWYgKHBhY2thZ2VDb25maWcgIT0gbnVsbCkgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJDYW5ub3Qgc2ltdWx0YW5lb3VzbHkgcmVxdWVzdCAiCiAgICAgICAgICAgICJhdXRvbWF0aWNQYWNrYWdlUmVzb2x1dGlvbiBhbmQgc3BlY2lmeSBhIgogICAgICAgICAgICAicGFja2FnZUNvbmZpZy4iKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaWYgKChwYWNrYWdlUm9vdCAhPSBudWxsKSAmJiAocGFja2FnZUNvbmZpZyAhPSBudWxsKSkgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJDYW5ub3Qgc2ltdWx0YW5lb3VzbHkgc3BlY2lmeSBhICIKICAgICAgICAgICAgInBhY2thZ2VSb290IGFuZCBhIHBhY2thZ2VDb25maWcuIik7CiAgICAgIH0KICAgIH0KICAgIHRyeSB7CiAgICAgIC8vIFJlc29sdmUgdGhlIHVyaSBhZ2FpbnN0IHRoZSBjdXJyZW50IGlzb2xhdGUncyByb290IFVyaSBmaXJzdC4KICAgICAgdmFyIHNwYXduZWRVcmkgPSBfcm9vdFVyaS5yZXNvbHZlVXJpKHVyaSk7CgogICAgICAvLyBJbmhlcml0IHRoaXMgaXNvbGF0ZSdzIHBhY2thZ2UgcmVzb2x1dGlvbiBzZXR1cCBpZiBub3Qgb3ZlcnJpZGRlbi4KICAgICAgaWYgKCFhdXRvbWF0aWNQYWNrYWdlUmVzb2x1dGlvbiAmJgogICAgICAgICAgKHBhY2thZ2VSb290ID09IG51bGwpICYmCiAgICAgICAgICAocGFja2FnZUNvbmZpZyA9PSBudWxsKSkgewogICAgICAgIGlmIChJc29sYXRlLl9wYWNrYWdlU3VwcG9ydGVkKCkpIHsKICAgICAgICAgIHBhY2thZ2VSb290ID0gYXdhaXQgSXNvbGF0ZS5wYWNrYWdlUm9vdDsKICAgICAgICAgIHBhY2thZ2VDb25maWcgPSBhd2FpdCBJc29sYXRlLnBhY2thZ2VDb25maWc7CiAgICAgICAgfQogICAgICB9CgogICAgICAvLyBFbnN1cmUgdG8gcmVzb2x2ZSBwYWNrYWdlOiBVUklzIGJlaW5nIGhhbmRlZCBpbiBhcyBwYXJhbWV0ZXJzLgogICAgICBpZiAocGFja2FnZVJvb3QgIT0gbnVsbCkgewogICAgICAgIC8vIGBwYWNrYWdlcy9gIGRpcmVjdG9yeSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBGb3JjZSBpdCBudWxsLgogICAgICAgIC8vIFRPRE8obWZhaXJodXJzdCkgU2hvdWxkIHRoaXMgdGhyb3cgYW4gZXhjZXB0aW9uPwogICAgICAgIHBhY2thZ2VSb290ID0gbnVsbDsKICAgICAgfSBlbHNlIGlmIChwYWNrYWdlQ29uZmlnICE9IG51bGwpIHsKICAgICAgICAvLyBBdm9pZCBjYWxsaW5nIHJlc29sdmVQYWNrYWdlVXJpIGlmIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkgaW4gY2FzZQogICAgICAgIC8vIHRoZSBBUEkgaXMgbm90IHN1cHBvcnRlZC4KICAgICAgICBpZiAocGFja2FnZUNvbmZpZy5zY2hlbWUgPT0gInBhY2thZ2UiKSB7CiAgICAgICAgICBwYWNrYWdlQ29uZmlnID0gYXdhaXQgSXNvbGF0ZS5yZXNvbHZlUGFja2FnZVVyaShwYWNrYWdlQ29uZmlnKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIFRoZSBWTSB3aWxsIGludm9rZSBbX3N0YXJ0SXNvbGF0ZV0gYW5kIG5vdCBgbWFpbmAuCiAgICAgIHJlYWR5UG9ydCA9IG5ldyBSYXdSZWNlaXZlUG9ydCgpOwogICAgICB2YXIgcGFja2FnZVJvb3RTdHJpbmcgPSBwYWNrYWdlUm9vdD8udG9TdHJpbmcoKTsKICAgICAgdmFyIHBhY2thZ2VDb25maWdTdHJpbmcgPSBwYWNrYWdlQ29uZmlnPy50b1N0cmluZygpOwoKICAgICAgX3NwYXduVXJpKAogICAgICAgICAgcmVhZHlQb3J0LnNlbmRQb3J0LAogICAgICAgICAgc3Bhd25lZFVyaS50b1N0cmluZygpLAogICAgICAgICAgYXJncywKICAgICAgICAgIG1lc3NhZ2UsCiAgICAgICAgICBwYXVzZWQsCiAgICAgICAgICBvbkV4aXQsCiAgICAgICAgICBvbkVycm9yLAogICAgICAgICAgZXJyb3JzQXJlRmF0YWwsCiAgICAgICAgICBjaGVja2VkLAogICAgICAgICAgbnVsbCwKICAgICAgICAgIC8qIGVudmlyb25tZW50ICovCiAgICAgICAgICBwYWNrYWdlUm9vdFN0cmluZywKICAgICAgICAgIHBhY2thZ2VDb25maWdTdHJpbmcsCiAgICAgICAgICBkZWJ1Z05hbWUpOwogICAgICByZXR1cm4gYXdhaXQgX3NwYXduQ29tbW9uKHJlYWR5UG9ydCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIGlmIChyZWFkeVBvcnQgIT0gbnVsbCkgewogICAgICAgIHJlYWR5UG9ydC5jbG9zZSgpOwogICAgICB9CiAgICAgIHJldGhyb3c7CiAgICB9CiAgfQoKICBzdGF0aWMgRnV0dXJlPElzb2xhdGU+IF9zcGF3bkNvbW1vbihSYXdSZWNlaXZlUG9ydCByZWFkeVBvcnQpIHsKICAgIENvbXBsZXRlciBjb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPElzb2xhdGU+LnN5bmMoKTsKICAgIHJlYWR5UG9ydC5oYW5kbGVyID0gKHJlYWR5TWVzc2FnZSkgewogICAgICByZWFkeVBvcnQuY2xvc2UoKTsKICAgICAgaWYgKHJlYWR5TWVzc2FnZSBpcyBMaXN0ICYmIHJlYWR5TWVzc2FnZS5sZW5ndGggPT0gMikgewogICAgICAgIFNlbmRQb3J0IGNvbnRyb2xQb3J0ID0gcmVhZHlNZXNzYWdlWzBdOwogICAgICAgIExpc3QgY2FwYWJpbGl0aWVzID0gcmVhZHlNZXNzYWdlWzFdOwogICAgICAgIGNvbXBsZXRlci5jb21wbGV0ZShuZXcgSXNvbGF0ZShjb250cm9sUG9ydCwKICAgICAgICAgICAgcGF1c2VDYXBhYmlsaXR5OiBjYXBhYmlsaXRpZXNbMF0sCiAgICAgICAgICAgIHRlcm1pbmF0ZUNhcGFiaWxpdHk6IGNhcGFiaWxpdGllc1sxXSkpOwogICAgICB9IGVsc2UgaWYgKHJlYWR5TWVzc2FnZSBpcyBTdHJpbmcpIHsKICAgICAgICAvLyBXZSBlbmNvdW50ZXJlZCBhbiBlcnJvciB3aGlsZSBzdGFydGluZyB0aGUgbmV3IGlzb2xhdGUuCiAgICAgICAgY29tcGxldGVyLmNvbXBsZXRlRXJyb3IobmV3IElzb2xhdGVTcGF3bkV4Y2VwdGlvbigKICAgICAgICAgICAgJ1VuYWJsZSB0byBzcGF3biBpc29sYXRlOiAke3JlYWR5TWVzc2FnZX0nKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLgogICAgICAgIGNvbXBsZXRlci5jb21wbGV0ZUVycm9yKG5ldyBJc29sYXRlU3Bhd25FeGNlcHRpb24oCiAgICAgICAgICAgICJJbnRlcm5hbCBlcnJvcjogdW5leHBlY3RlZCBmb3JtYXQgZm9yIHJlYWR5IG1lc3NhZ2U6ICIKICAgICAgICAgICAgIicke3JlYWR5TWVzc2FnZX0nIikpOwogICAgICB9CiAgICB9OwogICAgcmV0dXJuIGNvbXBsZXRlci5mdXR1cmU7CiAgfQoKICAvLyBUT0RPKGlwb3N2YSk6IENsZWFudXAgdG8gaGF2ZSBvbmx5IG9uZSBkZWZpbml0aW9uLgogIC8vIFRoZXNlIHZhbHVlcyBuZWVkIHRvIGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSBjbGFzcyBJc29sYXRlTWVzc2FnZUhhbmRsZXIKICAvLyBpbiB2bS9pc29sYXRlLmNjLgogIHN0YXRpYyBjb25zdCBfUEFVU0UgPSAxOwogIHN0YXRpYyBjb25zdCBfUkVTVU1FID0gMjsKICBzdGF0aWMgY29uc3QgX1BJTkcgPSAzOwogIHN0YXRpYyBjb25zdCBfS0lMTCA9IDQ7CiAgc3RhdGljIGNvbnN0IF9BRERfRVhJVCA9IDU7CiAgc3RhdGljIGNvbnN0IF9ERUxfRVhJVCA9IDY7CiAgc3RhdGljIGNvbnN0IF9BRERfRVJST1IgPSA3OwogIHN0YXRpYyBjb25zdCBfREVMX0VSUk9SID0gODsKICBzdGF0aWMgY29uc3QgX0VSUk9SX0ZBVEFMID0gOTsKCiAgc3RhdGljIHZvaWQgX3NwYXduRnVuY3Rpb24oCiAgICAgIFNlbmRQb3J0IHJlYWR5UG9ydCwKICAgICAgU3RyaW5nIHVyaSwKICAgICAgRnVuY3Rpb24gdG9wTGV2ZWxGdW5jdGlvbiwKICAgICAgdmFyIG1lc3NhZ2UsCiAgICAgIGJvb2wgcGF1c2VkLAogICAgICBib29sIGVycm9yc0FyZUZhdGFsLAogICAgICBTZW5kUG9ydCBvbkV4aXQsCiAgICAgIFNlbmRQb3J0IG9uRXJyb3IsCiAgICAgIFN0cmluZyBwYWNrYWdlUm9vdCwKICAgICAgU3RyaW5nIHBhY2thZ2VDb25maWcsCiAgICAgIFN0cmluZyBkZWJ1Z05hbWUpIG5hdGl2ZSAiSXNvbGF0ZV9zcGF3bkZ1bmN0aW9uIjsKCiAgc3RhdGljIHZvaWQgX3NwYXduVXJpKAogICAgICBTZW5kUG9ydCByZWFkeVBvcnQsCiAgICAgIFN0cmluZyB1cmksCiAgICAgIExpc3Q8U3RyaW5nPiBhcmdzLAogICAgICB2YXIgbWVzc2FnZSwKICAgICAgYm9vbCBwYXVzZWQsCiAgICAgIFNlbmRQb3J0IG9uRXhpdCwKICAgICAgU2VuZFBvcnQgb25FcnJvciwKICAgICAgYm9vbCBlcnJvcnNBcmVGYXRhbCwKICAgICAgYm9vbCBjaGVja2VkLAogICAgICBMaXN0IGVudmlyb25tZW50LAogICAgICBTdHJpbmcgcGFja2FnZVJvb3QsCiAgICAgIFN0cmluZyBwYWNrYWdlQ29uZmlnLAogICAgICBTdHJpbmcgZGVidWdOYW1lKSBuYXRpdmUgIklzb2xhdGVfc3Bhd25VcmkiOwoKICBzdGF0aWMgdm9pZCBfc2VuZE9PQihwb3J0LCBtc2cpIG5hdGl2ZSAiSXNvbGF0ZV9zZW5kT09CIjsKCiAgc3RhdGljIFN0cmluZyBfZ2V0RGVidWdOYW1lKFNlbmRQb3J0IGNvbnRyb2xQb3J0KQogICAgICBuYXRpdmUgIklzb2xhdGVfZ2V0RGVidWdOYW1lIjsKCiAgQHBhdGNoCiAgdm9pZCBfcGF1c2UoQ2FwYWJpbGl0eSByZXN1bWVDYXBhYmlsaXR5KSB7CiAgICB2YXIgbXNnID0gbmV3IExpc3QoNCkKICAgICAgLi5bMF0gPSAwIC8vIE1ha2Ugcm9vbSBmb3IgT09CIG1lc3NhZ2UgdHlwZS4KICAgICAgLi5bMV0gPSBfUEFVU0UKICAgICAgLi5bMl0gPSBwYXVzZUNhcGFiaWxpdHkKICAgICAgLi5bM10gPSByZXN1bWVDYXBhYmlsaXR5OwogICAgX3NlbmRPT0IoY29udHJvbFBvcnQsIG1zZyk7CiAgfQoKICBAcGF0Y2gKICB2b2lkIHJlc3VtZShDYXBhYmlsaXR5IHJlc3VtZUNhcGFiaWxpdHkpIHsKICAgIHZhciBtc2cgPSBuZXcgTGlzdCg0KQogICAgICAuLlswXSA9IDAgLy8gTWFrZSByb29tIGZvciBPT0IgbWVzc2FnZSB0eXBlLgogICAgICAuLlsxXSA9IF9SRVNVTUUKICAgICAgLi5bMl0gPSBwYXVzZUNhcGFiaWxpdHkKICAgICAgLi5bM10gPSByZXN1bWVDYXBhYmlsaXR5OwogICAgX3NlbmRPT0IoY29udHJvbFBvcnQsIG1zZyk7CiAgfQoKICBAcGF0Y2gKICB2b2lkIGFkZE9uRXhpdExpc3RlbmVyKFNlbmRQb3J0IHJlc3BvbnNlUG9ydCwge09iamVjdCByZXNwb25zZX0pIHsKICAgIHZhciBtc2cgPSBuZXcgTGlzdCg0KQogICAgICAuLlswXSA9IDAgLy8gTWFrZSByb29tIGZvciBPT0IgbWVzc2FnZSB0eXBlLgogICAgICAuLlsxXSA9IF9BRERfRVhJVAogICAgICAuLlsyXSA9IHJlc3BvbnNlUG9ydAogICAgICAuLlszXSA9IHJlc3BvbnNlOwogICAgX3NlbmRPT0IoY29udHJvbFBvcnQsIG1zZyk7CiAgfQoKICBAcGF0Y2gKICB2b2lkIHJlbW92ZU9uRXhpdExpc3RlbmVyKFNlbmRQb3J0IHJlc3BvbnNlUG9ydCkgewogICAgdmFyIG1zZyA9IG5ldyBMaXN0KDMpCiAgICAgIC4uWzBdID0gMCAvLyBNYWtlIHJvb20gZm9yIE9PQiBtZXNzYWdlIHR5cGUuCiAgICAgIC4uWzFdID0gX0RFTF9FWElUCiAgICAgIC4uWzJdID0gcmVzcG9uc2VQb3J0OwogICAgX3NlbmRPT0IoY29udHJvbFBvcnQsIG1zZyk7CiAgfQoKICBAcGF0Y2gKICB2b2lkIHNldEVycm9yc0ZhdGFsKGJvb2wgZXJyb3JzQXJlRmF0YWwpIHsKICAgIHZhciBtc2cgPSBuZXcgTGlzdCg0KQogICAgICAuLlswXSA9IDAgLy8gTWFrZSByb29tIGZvciBPT0IgbWVzc2FnZSB0eXBlLgogICAgICAuLlsxXSA9IF9FUlJPUl9GQVRBTAogICAgICAuLlsyXSA9IHRlcm1pbmF0ZUNhcGFiaWxpdHkKICAgICAgLi5bM10gPSBlcnJvcnNBcmVGYXRhbDsKICAgIF9zZW5kT09CKGNvbnRyb2xQb3J0LCBtc2cpOwogIH0KCiAgQHBhdGNoCiAgdm9pZCBraWxsKHtpbnQgcHJpb3JpdHk6IGJlZm9yZU5leHRFdmVudH0pIHsKICAgIHZhciBtc2cgPSBuZXcgTGlzdCg0KQogICAgICAuLlswXSA9IDAgLy8gTWFrZSByb29tIGZvciBPT0IgbWVzc2FnZSB0eXBlLgogICAgICAuLlsxXSA9IF9LSUxMCiAgICAgIC4uWzJdID0gdGVybWluYXRlQ2FwYWJpbGl0eQogICAgICAuLlszXSA9IHByaW9yaXR5OwogICAgX3NlbmRPT0IoY29udHJvbFBvcnQsIG1zZyk7CiAgfQoKICBAcGF0Y2gKICB2b2lkIHBpbmcoU2VuZFBvcnQgcmVzcG9uc2VQb3J0LCB7T2JqZWN0IHJlc3BvbnNlLCBpbnQgcHJpb3JpdHk6IGltbWVkaWF0ZX0pIHsKICAgIHZhciBtc2cgPSBuZXcgTGlzdCg1KQogICAgICAuLlswXSA9IDAgLy8gTWFrZSByb29tIGZvciBPT00gbWVzc2FnZSB0eXBlLgogICAgICAuLlsxXSA9IF9QSU5HCiAgICAgIC4uWzJdID0gcmVzcG9uc2VQb3J0CiAgICAgIC4uWzNdID0gcHJpb3JpdHkKICAgICAgLi5bNF0gPSByZXNwb25zZTsKICAgIF9zZW5kT09CKGNvbnRyb2xQb3J0LCBtc2cpOwogIH0KCiAgQHBhdGNoCiAgdm9pZCBhZGRFcnJvckxpc3RlbmVyKFNlbmRQb3J0IHBvcnQpIHsKICAgIHZhciBtc2cgPSBuZXcgTGlzdCgzKQogICAgICAuLlswXSA9IDAgLy8gTWFrZSByb29tIGZvciBPT0IgbWVzc2FnZSB0eXBlLgogICAgICAuLlsxXSA9IF9BRERfRVJST1IKICAgICAgLi5bMl0gPSBwb3J0OwogICAgX3NlbmRPT0IoY29udHJvbFBvcnQsIG1zZyk7CiAgfQoKICBAcGF0Y2gKICB2b2lkIHJlbW92ZUVycm9yTGlzdGVuZXIoU2VuZFBvcnQgcG9ydCkgewogICAgdmFyIG1zZyA9IG5ldyBMaXN0KDMpCiAgICAgIC4uWzBdID0gMCAvLyBNYWtlIHJvb20gZm9yIE9PQiBtZXNzYWdlIHR5cGUuCiAgICAgIC4uWzFdID0gX0RFTF9FUlJPUgogICAgICAuLlsyXSA9IHBvcnQ7CiAgICBfc2VuZE9PQihjb250cm9sUG9ydCwgbXNnKTsKICB9CgogIHN0YXRpYyBJc29sYXRlIF9nZXRDdXJyZW50SXNvbGF0ZSgpIHsKICAgIExpc3QgcG9ydEFuZENhcGFiaWxpdGllcyA9IF9nZXRQb3J0QW5kQ2FwYWJpbGl0aWVzT2ZDdXJyZW50SXNvbGF0ZSgpOwogICAgcmV0dXJuIG5ldyBJc29sYXRlKHBvcnRBbmRDYXBhYmlsaXRpZXNbMF0sCiAgICAgICAgcGF1c2VDYXBhYmlsaXR5OiBwb3J0QW5kQ2FwYWJpbGl0aWVzWzFdLAogICAgICAgIHRlcm1pbmF0ZUNhcGFiaWxpdHk6IHBvcnRBbmRDYXBhYmlsaXRpZXNbMl0pOwogIH0KCiAgc3RhdGljIExpc3QgX2dldFBvcnRBbmRDYXBhYmlsaXRpZXNPZkN1cnJlbnRJc29sYXRlKCkKICAgICAgbmF0aXZlICJJc29sYXRlX2dldFBvcnRBbmRDYXBhYmlsaXRpZXNPZkN1cnJlbnRJc29sYXRlIjsKCiAgc3RhdGljIFVyaSBfZ2V0Q3VycmVudFJvb3RVcmkoKSB7CiAgICB0cnkgewogICAgICByZXR1cm4gVXJpLnBhcnNlKF9nZXRDdXJyZW50Um9vdFVyaVN0cigpKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICBzdGF0aWMgU3RyaW5nIF9nZXRDdXJyZW50Um9vdFVyaVN0cigpIG5hdGl2ZSAiSXNvbGF0ZV9nZXRDdXJyZW50Um9vdFVyaVN0ciI7Cn0KCkBwYXRjaAphYnN0cmFjdCBjbGFzcyBUcmFuc2ZlcmFibGVUeXBlZERhdGEgewogIEBwYXRjaAogIGZhY3RvcnkgVHJhbnNmZXJhYmxlVHlwZWREYXRhLmZyb21MaXN0KExpc3Q8VHlwZWREYXRhPiBjaHVua3MpIHsKICAgIGlmIChjaHVua3MgPT0gbnVsbCkgewogICAgICB0aHJvdyBBcmd1bWVudEVycm9yKGNodW5rcyk7CiAgICB9CiAgICBmaW5hbCBpbnQgY2lkID0gQ2xhc3NJRC5nZXRJRChjaHVua3MpOwogICAgaWYgKGNpZCAhPSBDbGFzc0lELmNpZEFycmF5ICYmCiAgICAgICAgY2lkICE9IENsYXNzSUQuY2lkR3Jvd2FibGVPYmplY3RBcnJheSAmJgogICAgICAgIGNpZCAhPSBDbGFzc0lELmNpZEltbXV0YWJsZUFycmF5KSB7CiAgICAgIGNodW5rcyA9IExpc3QudW5tb2RpZmlhYmxlKGNodW5rcyk7CiAgICB9CiAgICByZXR1cm4gX1RyYW5zZmVyYWJsZVR5cGVkRGF0YUltcGwoY2h1bmtzKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1RyYW5zZmVyYWJsZVR5cGVkRGF0YUltcGwgaW1wbGVtZW50cyBUcmFuc2ZlcmFibGVUeXBlZERhdGEgewogIGZhY3RvcnkgX1RyYW5zZmVyYWJsZVR5cGVkRGF0YUltcGwoTGlzdDxUeXBlZERhdGE+IGxpc3QpCiAgICAgIG5hdGl2ZSAiVHJhbnNmZXJhYmxlVHlwZWREYXRhX2ZhY3RvcnkiOwoKICBCeXRlQnVmZmVyIG1hdGVyaWFsaXplKCkgewogICAgcmV0dXJuIF9tYXRlcmlhbGl6ZUludG9VaW50OExpc3QoKS5idWZmZXI7CiAgfQoKICBVaW50OExpc3QgX21hdGVyaWFsaXplSW50b1VpbnQ4TGlzdCgpCiAgICAgIG5hdGl2ZSAiVHJhbnNmZXJhYmxlVHlwZWREYXRhX21hdGVyaWFsaXplIjsKfQqCxgBOTjwBTU1LKwE9ARRRASdAATobAQcUCTMBCUM9BAIBBxMJMQIBGi49ASA5BAEVHAQBMTgCAQcXBjUFSEYYBgkvPB4TBAIBP0YBN0UoBAEaHgQBNj8tSQQBDBYZBAEhIAIBIwFHLgFNJzIwMCgCASImKy4mEAQCATcsJBMCATonIjEkAgEaNkUBDDovBAEaHAQBIC0tBAEVHgQBLjA8AT8kIiITBAE0JD5NTDMWJAQBOz4BJSkEATQcHTYhNBYWARoEATQCARoqLBkEAR8kGxwEASBMBAEVHAQBJSo2AT9HAgEcIzIBBEJDIwQiQREeEgwaGh8gAgEET01GOAQiKhwCAQRKDAQiFBkZFxEVIBlQHUYEARxFOAdPJCwkAUclGSMEIAFMTh8uFxIBFiswMScPFggNGwYFMRwCAQcQNzABCTEBCTYBCSc0GDkGEwQBCSk2GDsGEwQBCTk3GD8GHQQBJTc5OAEJSRsbFxghIx4KTCArLQhJKAFQRj4yHEkUNQgoOggBFh4dFhMSGhITEBkWLBYfGwg1BgQBCUsbFxgbFCcXGS4hHh8zBgFFJiFBNx0II0E3HwgNPkMxCAYKRzEBTCkjJSszNwoIAUghSDwcKk0lMUoKCAE8KDc7AREeIRATEhITGhMQHB0fFiwSHxsIDwYEAUI5KRk+MC00LjQrQzs6DyI7RCMIBx0EAThPFxscGhoeHh8fIQEeGhIhExMbFxgaHDgBGRoSGRMTFxgbFBgaHDMBPAE0JQEJLRozFR4gIAQBCS0aMxYeICAEAQlFGjMYGxggBAEJNRozGBwgBAEJLRozGyIeIAQBCS8aMxQiGCAEAQlRGjMUGxcYIAQBCSkaMxkUIAQBCSwaMxkUIAQBKEovMTYEATg/ASQKMRITBgQBTwIBBycJQxojBisjMSwqBi8EAgEaRDsuAR0vBAEoMgIBJWRhcnQ6aXNvbGF0ZS1wYXRjaC9pc29sYXRlX3BhdGNoLmRhcnQvb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi90aW1lcl9pbXBsLmRhcnS6Yy8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJpc29sYXRlX3BhdGNoLmRhcnQiOwoKLy8gVGltZXIgaGVhcCBpbXBsZW1lbnRlZCBhcyBhIGFycmF5LWJhc2VkIGJpbmFyeSBoZWFwWzBdLgovLyBUaGlzIGFsbG93cyBmb3IgTygxKSBgZmlyc3RgLCBPKGxvZyhuKSkgYHJlbW92ZWAvYHJlbW92ZUZpcnN0YCBhbmQgTyhsb2cobikpCi8vIGBhZGRgLgovLwovLyBUbyBlbnN1cmUgdGhlIHRpbWVycyBhcmUgb3JkZXJlZCBieSBpbnNlcnRpb24gdGltZSwgdGhlIF9UaW1lciBjbGFzcyBoYXMgYQovLyBgX2lkYCBmaWVsZCBzZXQgd2hlbiBhZGRlZCB0byB0aGUgaGVhcC4KLy8KLy8gWzBdIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmluYXJ5X2hlYXAKY2xhc3MgX1RpbWVySGVhcCB7CiAgTGlzdDxfVGltZXI+IF9saXN0OwogIGludCBfdXNlZCA9IDA7CgogIF9UaW1lckhlYXAoW2ludCBpbml0U2l6ZSA9IDddKSA6IF9saXN0ID0gbmV3IExpc3Q8X1RpbWVyPihpbml0U2l6ZSk7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX3VzZWQgPT0gMDsKCiAgX1RpbWVyIGdldCBmaXJzdCA9PiBfbGlzdFswXTsKCiAgYm9vbCBpc0ZpcnN0KF9UaW1lciB0aW1lcikgPT4gdGltZXIuX2luZGV4T3JOZXh0ID09IDA7CgogIHZvaWQgYWRkKF9UaW1lciB0aW1lcikgewogICAgaWYgKF91c2VkID09IF9saXN0Lmxlbmd0aCkgewogICAgICBfcmVzaXplKCk7CiAgICB9CiAgICB0aW1lci5faW5kZXhPck5leHQgPSBfdXNlZCsrOwogICAgX2xpc3RbdGltZXIuX2luZGV4T3JOZXh0XSA9IHRpbWVyOwogICAgX2J1YmJsZVVwKHRpbWVyKTsKICB9CgogIF9UaW1lciByZW1vdmVGaXJzdCgpIHsKICAgIHZhciBmID0gZmlyc3Q7CiAgICByZW1vdmUoZik7CiAgICByZXR1cm4gZjsKICB9CgogIHZvaWQgcmVtb3ZlKF9UaW1lciB0aW1lcikgewogICAgX3VzZWQtLTsKICAgIGlmIChpc0VtcHR5KSB7CiAgICAgIF9saXN0WzBdID0gbnVsbDsKICAgICAgdGltZXIuX2luZGV4T3JOZXh0ID0gbnVsbDsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIGxhc3QgPSBfbGlzdFtfdXNlZF07CiAgICBpZiAoIWlkZW50aWNhbChsYXN0LCB0aW1lcikpIHsKICAgICAgbGFzdC5faW5kZXhPck5leHQgPSB0aW1lci5faW5kZXhPck5leHQ7CiAgICAgIF9saXN0W2xhc3QuX2luZGV4T3JOZXh0XSA9IGxhc3Q7CiAgICAgIGlmIChsYXN0Ll9jb21wYXJlVG8odGltZXIpIDwgMCkgewogICAgICAgIF9idWJibGVVcChsYXN0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfYnViYmxlRG93bihsYXN0KTsKICAgICAgfQogICAgfQogICAgX2xpc3RbX3VzZWRdID0gbnVsbDsKICAgIHRpbWVyLl9pbmRleE9yTmV4dCA9IG51bGw7CiAgfQoKICB2b2lkIF9yZXNpemUoKSB7CiAgICB2YXIgbmV3TGlzdCA9IG5ldyBMaXN0PF9UaW1lcj4oX2xpc3QubGVuZ3RoICogMiArIDEpOwogICAgbmV3TGlzdC5zZXRSYW5nZSgwLCBfdXNlZCwgX2xpc3QpOwogICAgX2xpc3QgPSBuZXdMaXN0OwogIH0KCiAgdm9pZCBfYnViYmxlVXAoX1RpbWVyIHRpbWVyKSB7CiAgICB3aGlsZSAoIWlzRmlyc3QodGltZXIpKSB7CiAgICAgIFRpbWVyIHBhcmVudCA9IF9wYXJlbnQodGltZXIpOwogICAgICBpZiAodGltZXIuX2NvbXBhcmVUbyhwYXJlbnQpIDwgMCkgewogICAgICAgIF9zd2FwKHRpbWVyLCBwYXJlbnQpOwogICAgICB9IGVsc2UgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIF9idWJibGVEb3duKF9UaW1lciB0aW1lcikgewogICAgd2hpbGUgKHRydWUpIHsKICAgICAgaW50IGxlZnRJbmRleCA9IF9sZWZ0Q2hpbGRJbmRleCh0aW1lci5faW5kZXhPck5leHQpOwogICAgICBpbnQgcmlnaHRJbmRleCA9IF9yaWdodENoaWxkSW5kZXgodGltZXIuX2luZGV4T3JOZXh0KTsKICAgICAgX1RpbWVyIG5ld2VzdCA9IHRpbWVyOwogICAgICBpZiAobGVmdEluZGV4IDwgX3VzZWQgJiYgX2xpc3RbbGVmdEluZGV4XS5fY29tcGFyZVRvKG5ld2VzdCkgPCAwKSB7CiAgICAgICAgbmV3ZXN0ID0gX2xpc3RbbGVmdEluZGV4XTsKICAgICAgfQogICAgICBpZiAocmlnaHRJbmRleCA8IF91c2VkICYmIF9saXN0W3JpZ2h0SW5kZXhdLl9jb21wYXJlVG8obmV3ZXN0KSA8IDApIHsKICAgICAgICBuZXdlc3QgPSBfbGlzdFtyaWdodEluZGV4XTsKICAgICAgfQogICAgICBpZiAoaWRlbnRpY2FsKG5ld2VzdCwgdGltZXIpKSB7CiAgICAgICAgLy8gV2UgYXJlIHdoZXJlIHdlIHNob3VsZCBiZSwgYnJlYWsuCiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgX3N3YXAobmV3ZXN0LCB0aW1lcik7CiAgICB9CiAgfQoKICB2b2lkIF9zd2FwKF9UaW1lciBmaXJzdCwgX1RpbWVyIHNlY29uZCkgewogICAgaW50IHRtcCA9IGZpcnN0Ll9pbmRleE9yTmV4dDsKICAgIGZpcnN0Ll9pbmRleE9yTmV4dCA9IHNlY29uZC5faW5kZXhPck5leHQ7CiAgICBzZWNvbmQuX2luZGV4T3JOZXh0ID0gdG1wOwogICAgX2xpc3RbZmlyc3QuX2luZGV4T3JOZXh0XSA9IGZpcnN0OwogICAgX2xpc3Rbc2Vjb25kLl9pbmRleE9yTmV4dF0gPSBzZWNvbmQ7CiAgfQoKICBUaW1lciBfcGFyZW50KF9UaW1lciB0aW1lcikgPT4gX2xpc3RbX3BhcmVudEluZGV4KHRpbWVyLl9pbmRleE9yTmV4dCldOwogIFRpbWVyIF9sZWZ0Q2hpbGQoX1RpbWVyIHRpbWVyKSA9PiBfbGlzdFtfbGVmdENoaWxkSW5kZXgodGltZXIuX2luZGV4T3JOZXh0KV07CiAgVGltZXIgX3JpZ2h0Q2hpbGQoX1RpbWVyIHRpbWVyKSA9PgogICAgICBfbGlzdFtfcmlnaHRDaGlsZEluZGV4KHRpbWVyLl9pbmRleE9yTmV4dCldOwoKICBzdGF0aWMgaW50IF9wYXJlbnRJbmRleChpbnQgaW5kZXgpID0+IChpbmRleCAtIDEpIH4vIDI7CiAgc3RhdGljIGludCBfbGVmdENoaWxkSW5kZXgoaW50IGluZGV4KSA9PiAyICogaW5kZXggKyAxOwogIHN0YXRpYyBpbnQgX3JpZ2h0Q2hpbGRJbmRleChpbnQgaW5kZXgpID0+IDIgKiBpbmRleCArIDI7Cn0KCmNsYXNzIF9UaW1lciBpbXBsZW1lbnRzIFRpbWVyIHsKICAvLyBDYW5jZWxzIHRoZSB0aW1lciBpbiB0aGUgZXZlbnQgaGFuZGxlci4KICBzdGF0aWMgY29uc3QgX05PX1RJTUVSID0gLTE7CgogIC8vIFdlIGRpc3Rpbmd1aXNoIHdoYXQga2luZCBvZiBtZXNzYWdlIGFycml2ZWQgYmFzZWQgb24gdGhlIHZhbHVlIGJlaW5nIHNlbnQuCiAgc3RhdGljIGNvbnN0IF9aRVJPX0VWRU5UID0gMTsKICBzdGF0aWMgY29uc3QgX1RJTUVPVVRfRVZFTlQgPSBudWxsOwoKICAvLyBUaW1lcnMgYXJlIG9yZGVyZWQgYnkgd2FrZXVwIHRpbWUuIFRpbWVycyB3aXRoIGEgdGltZW91dCB2YWx1ZSBvZiA+IDAgZG8KICAvLyBlbmQgdXAgb24gdGhlIFRpbWVySGVhcC4gVGltZXJzIHdpdGggYSB0aW1lb3V0IG9mIDAgYXJlIHF1ZXVlZCBpbiBhIGxpc3QuCiAgc3RhdGljIGZpbmFsIF9oZWFwID0gbmV3IF9UaW1lckhlYXAoKTsKICBzdGF0aWMgX1RpbWVyIF9maXJzdFplcm9UaW1lcjsKICBzdGF0aWMgX1RpbWVyIF9sYXN0WmVyb1RpbWVyOwoKICAvLyBXZSB1c2UgYW4gaWQgdG8gYmUgYWJsZSB0byBzb3J0IHRpbWVycyB3aXRoIHRoZSBzYW1lIGV4cGlyYXRpb24gdGltZS4KICAvLyBpZHMgYXJlIHJlY3ljbGVkIGFmdGVyIElEX01BU0sgZW5xdWV1ZXMgb3Igd2hlbiB0aGUgdGltZXIgcXVldWUgaXMgZW1wdHkuCiAgc3RhdGljIGNvbnN0IF9JRF9NQVNLID0gMHgxZmZmZmZmZjsKICBzdGF0aWMgaW50IF9pZENvdW50ID0gMDsKCiAgc3RhdGljIFJhd1JlY2VpdmVQb3J0IF9yZWNlaXZlUG9ydDsKICBzdGF0aWMgU2VuZFBvcnQgX3NlbmRQb3J0OwogIHN0YXRpYyBpbnQgX3NjaGVkdWxlZFdha2V1cFRpbWU7CgogIHN0YXRpYyBib29sIF9oYW5kbGluZ0NhbGxiYWNrcyA9IGZhbHNlOwoKICBGdW5jdGlvbiBfY2FsbGJhY2s7IC8vIENsb3N1cmUgdG8gY2FsbCB3aGVuIHRpbWVyIGZpcmVzLiBudWxsIGlmIGNhbmNlbGVkLgogIGludCBfd2FrZXVwVGltZTsgLy8gRXhwaXJhdGlvbiB0aW1lLgogIGZpbmFsIGludCBfbWlsbGlTZWNvbmRzOyAvLyBEdXJhdGlvbiBzcGVjaWZpZWQgYXQgY3JlYXRpb24uCiAgZmluYWwgYm9vbCBfcmVwZWF0aW5nOyAvLyBJbmRpY2F0ZXMgcGVyaW9kaWMgdGltZXJzLgogIHZhciBfaW5kZXhPck5leHQ7IC8vIEluZGV4IGlmIHBhcnQgb2YgdGhlIFRpbWVySGVhcCwgbGluayBvdGhlcndpc2UuCiAgaW50IF9pZDsgLy8gSW5jcmVtZW50aW5nIGlkIHRvIGVuYWJsZSBzb3J0aW5nIG9mIHRpbWVycyB3aXRoIHNhbWUgZXhwaXJ5LgoKICBpbnQgX3RpY2sgPSAwOyAvLyBCYWNraW5nIGZvciBbdGlja10sCgogIC8vIEdldCB0aGUgbmV4dCBhdmFpbGFibGUgaWQuIFdlIGFjY2VwdCBjb2xsaXNpb25zIGFuZCByZW9yZGVyaW5nIHdoZW4gdGhlCiAgLy8gX2lkQ291bnQgb3ZlcmZsb3dzIGFuZCB0aGUgdGltZXJzIGV4cGlyZSBhdCB0aGUgc2FtZSBtaWxsaXNlY29uZC4KICBzdGF0aWMgaW50IF9uZXh0SWQoKSB7CiAgICB2YXIgcmVzdWx0ID0gX2lkQ291bnQ7CiAgICBfaWRDb3VudCA9IChfaWRDb3VudCArIDEpICYgX0lEX01BU0s7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgX1RpbWVyLl9pbnRlcm5hbCgKICAgICAgdGhpcy5fY2FsbGJhY2ssIHRoaXMuX3dha2V1cFRpbWUsIHRoaXMuX21pbGxpU2Vjb25kcywgdGhpcy5fcmVwZWF0aW5nKQogICAgICA6IF9pZCA9IF9uZXh0SWQoKTsKCiAgc3RhdGljIFRpbWVyIF9jcmVhdGVUaW1lcigKICAgICAgdm9pZCBjYWxsYmFjayhUaW1lciB0aW1lciksIGludCBtaWxsaVNlY29uZHMsIGJvb2wgcmVwZWF0aW5nKSB7CiAgICAvLyBOZWdhdGl2ZSB0aW1lb3V0cyBhcmUgdHJlYXRlZCBhcyBpZiAwIHRpbWVvdXQuCiAgICBpZiAobWlsbGlTZWNvbmRzIDwgMCkgewogICAgICBtaWxsaVNlY29uZHMgPSAwOwogICAgfQogICAgLy8gQWRkIG9uZSBiZWNhdXNlIERhdGVUaW1lLm5vdygpIGlzIGFzc3VtZWQgdG8gcm91bmQgZG93bgogICAgLy8gdG8gbmVhcmVzdCBtaWxsaXNlY29uZCwgbm90IHVwLCBzbyB0aGF0IHRpbWUgKyBkdXJhdGlvbiBpcyBiZWZvcmUKICAgIC8vIGR1cmF0aW9uIG1pbGxpc2Vjb25kcyBmcm9tIG5vdy4gVXNpbmcgbWljcm9zZWNvbmQgdGltZXJzIGxpa2UKICAgIC8vIFN0b3B3YXRjaCBhbGxvd3MgZGV0ZWN0aW5nIHRoYXQgdGhlIHRpbWVyIGZpcmVzIGVhcmx5LgogICAgaW50IG5vdyA9IFZNTGlicmFyeUhvb2tzLnRpbWVyTWlsbGlzZWNvbmRDbG9jaygpOwogICAgaW50IHdha2V1cFRpbWUgPSAobWlsbGlTZWNvbmRzID09IDApID8gbm93IDogKG5vdyArIDEgKyBtaWxsaVNlY29uZHMpOwoKICAgIF9UaW1lciB0aW1lciA9CiAgICAgICAgbmV3IF9UaW1lci5faW50ZXJuYWwoY2FsbGJhY2ssIHdha2V1cFRpbWUsIG1pbGxpU2Vjb25kcywgcmVwZWF0aW5nKTsKICAgIC8vIEVucXVldWUgdGhpcyBuZXdseSBjcmVhdGVkIHRpbWVyIGluIHRoZSBhcHByb3ByaWF0ZSBzdHJ1Y3R1cmUgYW5kCiAgICAvLyBub3RpZnkgaWYgbmVjZXNzYXJ5LgogICAgdGltZXIuX2VucXVldWUoKTsKICAgIHJldHVybiB0aW1lcjsKICB9CgogIGZhY3RvcnkgX1RpbWVyKGludCBtaWxsaVNlY29uZHMsIHZvaWQgY2FsbGJhY2soVGltZXIgdGltZXIpKSB7CiAgICByZXR1cm4gX2NyZWF0ZVRpbWVyKGNhbGxiYWNrLCBtaWxsaVNlY29uZHMsIGZhbHNlKTsKICB9CgogIGZhY3RvcnkgX1RpbWVyLnBlcmlvZGljKGludCBtaWxsaVNlY29uZHMsIHZvaWQgY2FsbGJhY2soVGltZXIgdGltZXIpKSB7CiAgICByZXR1cm4gX2NyZWF0ZVRpbWVyKGNhbGxiYWNrLCBtaWxsaVNlY29uZHMsIHRydWUpOwogIH0KCiAgYm9vbCBnZXQgX2lzSW5IZWFwID0+IF9pbmRleE9yTmV4dCBpcyBpbnQ7CgogIGludCBfY29tcGFyZVRvKF9UaW1lciBvdGhlcikgewogICAgaW50IGMgPSBfd2FrZXVwVGltZSAtIG90aGVyLl93YWtldXBUaW1lOwogICAgaWYgKGMgIT0gMCkgcmV0dXJuIGM7CiAgICByZXR1cm4gX2lkIC0gb3RoZXIuX2lkOwogIH0KCiAgYm9vbCBnZXQgaXNBY3RpdmUgPT4gX2NhbGxiYWNrICE9IG51bGw7CgogIGludCBnZXQgdGljayA9PiBfdGljazsKCiAgLy8gQ2FuY2VscyBhIHNldCB0aW1lci4gVGhlIHRpbWVyIGlzIHJlbW92ZWQgZnJvbSB0aGUgdGltZXIgaGVhcCBpZiBpdCBpcyBhCiAgLy8gbm9uLXplcm8gdGltZXIuIFplcm8gdGltZXJzIGFyZSBrZXB0IGluIHRoZSBsaXN0IGFzIHRoZXkgbmVlZCB0byBjb25zdW1lCiAgLy8gdGhlIGNvcnJlc3BvbmRpbmcgcGVuZGluZyBtZXNzYWdlLgogIHZvaWQgY2FuY2VsKCkgewogICAgX2NhbGxiYWNrID0gbnVsbDsKICAgIC8vIE9ubHkgaGVhcCB0aW1lcnMgYXJlIHJlYWxseSByZW1vdmVkLiBaZXJvIHRpbWVycyBuZWVkIHRvIGNvbnN1bWUgdGhlaXIKICAgIC8vIGNvcnJlc3BvbmRpbmcgd2FrZXVwIG1lc3NhZ2Ugc28gdGhleSBhcmUgbGVmdCBpbiB0aGUgcXVldWUuCiAgICBpZiAoIV9pc0luSGVhcCkgcmV0dXJuOwogICAgYm9vbCB1cGRhdGUgPSBfaGVhcC5pc0ZpcnN0KHRoaXMpOwogICAgX2hlYXAucmVtb3ZlKHRoaXMpOwogICAgaWYgKHVwZGF0ZSkgewogICAgICBfbm90aWZ5RXZlbnRIYW5kbGVyKCk7CiAgICB9CiAgfQoKICB2b2lkIF9hZHZhbmNlV2FrZXVwVGltZSgpIHsKICAgIC8vIFJlY2FsY3VsYXRlIHRoZSBuZXh0IHdha2V1cCB0aW1lLiBGb3IgcmVwZWF0aW5nIHRpbWVycyB3aXRoIGEgMCB0aW1lb3V0CiAgICAvLyB0aGUgbmV4dCB3YWtldXAgdGltZSBpcyBub3cuCiAgICBfaWQgPSBfbmV4dElkKCk7CiAgICBpZiAoX21pbGxpU2Vjb25kcyA+IDApIHsKICAgICAgX3dha2V1cFRpbWUgKz0gX21pbGxpU2Vjb25kczsKICAgIH0gZWxzZSB7CiAgICAgIF93YWtldXBUaW1lID0gVk1MaWJyYXJ5SG9va3MudGltZXJNaWxsaXNlY29uZENsb2NrKCk7CiAgICB9CiAgfQoKICAvLyBBZGRzIGEgdGltZXIgdG8gdGhlIGhlYXAgb3IgdGltZXIgbGlzdC4gVGltZXJzIHdpdGggdGhlIHNhbWUgd2FrZXVwIHRpbWUKICAvLyBhcmUgZW5xdWV1ZWQgaW4gb3JkZXIgYW5kIG5vdGlmaWVkIGluIEZJRk8gb3JkZXIuCiAgdm9pZCBfZW5xdWV1ZSgpIHsKICAgIGlmIChfbWlsbGlTZWNvbmRzID09IDApIHsKICAgICAgaWYgKF9maXJzdFplcm9UaW1lciA9PSBudWxsKSB7CiAgICAgICAgX2xhc3RaZXJvVGltZXIgPSB0aGlzOwogICAgICAgIF9maXJzdFplcm9UaW1lciA9IHRoaXM7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2xhc3RaZXJvVGltZXIuX2luZGV4T3JOZXh0ID0gdGhpczsKICAgICAgICBfbGFzdFplcm9UaW1lciA9IHRoaXM7CiAgICAgIH0KICAgICAgLy8gRXZlcnkgemVybyB0aW1lciBnZXRzIGl0cyBvd24gZXZlbnQuCiAgICAgIF9ub3RpZnlaZXJvSGFuZGxlcigpOwogICAgfSBlbHNlIHsKICAgICAgX2hlYXAuYWRkKHRoaXMpOwogICAgICBpZiAoX2hlYXAuaXNGaXJzdCh0aGlzKSkgewogICAgICAgIF9ub3RpZnlFdmVudEhhbmRsZXIoKTsKICAgICAgfQogICAgfQogIH0KCiAgLy8gRW5xdWV1ZSBvbmUgbWVzc2FnZSBmb3IgZWFjaCB6ZXJvIHRpbWVyLiBUbyBiZSBhYmxlIHRvIGRpc3Rpbmd1aXNoIGZyb20KICAvLyBFdmVudEhhbmRsZXIgbWVzc2FnZXMgd2Ugc2VuZCBhIF9aRVJPX0VWRU5UIGluc3RlYWQgb2YgYSBfVElNRU9VVF9FVkVOVC4KICBzdGF0aWMgdm9pZCBfbm90aWZ5WmVyb0hhbmRsZXIoKSB7CiAgICBpZiAoX3NlbmRQb3J0ID09IG51bGwpIHsKICAgICAgX2NyZWF0ZVRpbWVySGFuZGxlcigpOwogICAgfQogICAgX3NlbmRQb3J0LnNlbmQoX1pFUk9fRVZFTlQpOwogIH0KCiAgLy8gSGFuZGxlIHRoZSBub3RpZmljYXRpb24gb2YgYSB6ZXJvIHRpbWVyLiBNYWtlIHN1cmUgdG8gYWxzbyBleGVjdXRlIG5vbi16ZXJvCiAgLy8gdGltZXJzIHdpdGggYSBsb3dlciBleHBpcmF0aW9uIHRpbWUuCiAgc3RhdGljIExpc3QgX3F1ZXVlRnJvbVplcm9FdmVudCgpIHsKICAgIHZhciBwZW5kaW5nVGltZXJzID0gbmV3IExpc3QoKTsKICAgIGFzc2VydChfZmlyc3RaZXJvVGltZXIgIT0gbnVsbCk7CiAgICAvLyBDb2xsZWN0IHBlbmRpbmcgdGltZXJzIGZyb20gdGhlIHRpbWVyIGhlYXAgdGhhdCBoYXZlIGFuIGV4cGlyYXRpb24gcHJpb3IKICAgIC8vIHRvIHRoZSBjdXJyZW50bHkgbm90aWZpZWQgemVybyB0aW1lci4KICAgIHZhciB0aW1lcjsKICAgIHdoaWxlICghX2hlYXAuaXNFbXB0eSAmJiAoX2hlYXAuZmlyc3QuX2NvbXBhcmVUbyhfZmlyc3RaZXJvVGltZXIpIDwgMCkpIHsKICAgICAgdGltZXIgPSBfaGVhcC5yZW1vdmVGaXJzdCgpOwogICAgICBwZW5kaW5nVGltZXJzLmFkZCh0aW1lcik7CiAgICB9CiAgICAvLyBBcHBlbmQgdGhlIGZpcnN0IHplcm8gdGltZXIgdG8gdGhlIHBlbmRpbmcgdGltZXJzLgogICAgdGltZXIgPSBfZmlyc3RaZXJvVGltZXI7CiAgICBfZmlyc3RaZXJvVGltZXIgPSB0aW1lci5faW5kZXhPck5leHQ7CiAgICB0aW1lci5faW5kZXhPck5leHQgPSBudWxsOwogICAgcGVuZGluZ1RpbWVycy5hZGQodGltZXIpOwogICAgcmV0dXJuIHBlbmRpbmdUaW1lcnM7CiAgfQoKICBzdGF0aWMgdm9pZCBfbm90aWZ5RXZlbnRIYW5kbGVyKCkgewogICAgaWYgKF9oYW5kbGluZ0NhbGxiYWNrcykgewogICAgICAvLyBXaGlsZSB3ZSBhcmUgYWxyZWFkeSBoYW5kbGluZyBjYWxsYmFja3Mgd2Ugd2lsbCBub3Qgbm90aWZ5IHRoZSBldmVudAogICAgICAvLyBoYW5kbGVyLiBfaGFuZGxlVGltZW91dCB3aWxsIGNhbGwgX25vdGlmeUV2ZW50SGFuZGxlciBvbmNlIGFsbCBwZW5kaW5nCiAgICAgIC8vIHRpbWVycyBhcmUgcHJvY2Vzc2VkLgogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gSWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcgdGltZXJzLiBDbG9zZSBkb3duIHRoZSByZWNlaXZlIHBvcnQuCiAgICBpZiAoKF9maXJzdFplcm9UaW1lciA9PSBudWxsKSAmJiBfaGVhcC5pc0VtcHR5KSB7CiAgICAgIC8vIE5vIHBlbmRpbmcgdGltZXJzOiBDbG9zZSB0aGUgcmVjZWl2ZSBwb3J0IGFuZCBsZXQgdGhlIGV2ZW50IGhhbmRsZXIKICAgICAgLy8ga25vdy4KICAgICAgaWYgKF9zZW5kUG9ydCAhPSBudWxsKSB7CiAgICAgICAgX2NhbmNlbFdha2V1cCgpOwogICAgICAgIF9zaHV0ZG93blRpbWVySGFuZGxlcigpOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZiAoX2hlYXAuaXNFbXB0eSkgewogICAgICAvLyBPbmx5IHplcm8gdGltZXJzIGFyZSBsZWZ0LiBDYW5jZWwgYW55IHNjaGVkdWxlZCB3YWtldXBzLgogICAgICBfY2FuY2VsV2FrZXVwKCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyBPbmx5IHNlbmQgYSBtZXNzYWdlIGlmIHRoZSByZXF1ZXN0ZWQgd2FrZXVwIHRpbWUgZGlmZmVycyBmcm9tIHRoZQogICAgLy8gYWxyZWFkeSBzY2hlZHVsZWQgd2FrZXVwIHRpbWUuCiAgICB2YXIgd2FrZXVwVGltZSA9IF9oZWFwLmZpcnN0Ll93YWtldXBUaW1lOwogICAgaWYgKChfc2NoZWR1bGVkV2FrZXVwVGltZSA9PSBudWxsKSB8fAogICAgICAgICh3YWtldXBUaW1lICE9IF9zY2hlZHVsZWRXYWtldXBUaW1lKSkgewogICAgICBfc2NoZWR1bGVXYWtldXAod2FrZXVwVGltZSk7CiAgICB9CiAgfQoKICBzdGF0aWMgTGlzdCBfcXVldWVGcm9tVGltZW91dEV2ZW50KCkgewogICAgdmFyIHBlbmRpbmdUaW1lcnMgPSBuZXcgTGlzdCgpOwogICAgaWYgKF9maXJzdFplcm9UaW1lciAhPSBudWxsKSB7CiAgICAgIC8vIENvbGxlY3QgcGVuZGluZyB0aW1lcnMgZnJvbSB0aGUgdGltZXIgaGVhcCB0aGF0IGhhdmUgYW4gZXhwaXJhdGlvbgogICAgICAvLyBwcmlvciB0byB0aGUgbmV4dCB6ZXJvIHRpbWVyLgogICAgICAvLyBCeSBkZWZpbml0aW9uIHRoZSBmaXJzdCB6ZXJvIHRpbWVyIGhhcyBiZWVuIHNjaGVkdWxlZCBiZWZvcmUgdGhlCiAgICAgIC8vIGN1cnJlbnQgdGltZSwgbWVhbmluZyBhbGwgdGltZXJzIHdoaWNoIGFyZSAibGVzcyB0aGFuIiB0aGUgZmlyc3QgemVybwogICAgICAvLyB0aW1lciBhcmUgZXhwaXJlZC4gVGhlIGZpcnN0IHplcm8gdGltZXIgd2lsbCBiZSBkaXNwYXRjaGVkIHdoZW4gaXRzCiAgICAgIC8vIGNvcnJlc3BvbmRpbmcgbWVzc2FnZSBpcyBkZWxpdmVyZWQuCiAgICAgIHZhciB0aW1lcjsKICAgICAgd2hpbGUgKCFfaGVhcC5pc0VtcHR5ICYmIChfaGVhcC5maXJzdC5fY29tcGFyZVRvKF9maXJzdFplcm9UaW1lcikgPCAwKSkgewogICAgICAgIHRpbWVyID0gX2hlYXAucmVtb3ZlRmlyc3QoKTsKICAgICAgICBwZW5kaW5nVGltZXJzLmFkZCh0aW1lcik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIENvbGxlY3QgcGVuZGluZyB0aW1lcnMgZnJvbSB0aGUgdGltZXIgaGVhcCB3aGljaCBoYXZlIGV4cGlyZWQgYXQgdGhpcwogICAgICAvLyB0aW1lLgogICAgICB2YXIgY3VycmVudFRpbWUgPSBWTUxpYnJhcnlIb29rcy50aW1lck1pbGxpc2Vjb25kQ2xvY2soKTsKICAgICAgdmFyIHRpbWVyOwogICAgICB3aGlsZSAoIV9oZWFwLmlzRW1wdHkgJiYgKF9oZWFwLmZpcnN0Ll93YWtldXBUaW1lIDw9IGN1cnJlbnRUaW1lKSkgewogICAgICAgIHRpbWVyID0gX2hlYXAucmVtb3ZlRmlyc3QoKTsKICAgICAgICBwZW5kaW5nVGltZXJzLmFkZCh0aW1lcik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBwZW5kaW5nVGltZXJzOwogIH0KCiAgc3RhdGljIHZvaWQgX3J1blRpbWVycyhMaXN0IHBlbmRpbmdUaW1lcnMpIHsKICAgIC8vIElmIHRoZXJlIGFyZSBubyBwZW5kaW5nIHRpbWVycyBjdXJyZW50bHkgcmVzZXQgdGhlIGlkIHNwYWNlIGJlZm9yZSB3ZQogICAgLy8gaGF2ZSBhIGNoYW5jZSB0byBlbnF1ZXVlIG5ldyB0aW1lcnMuCiAgICBpZiAoX2hlYXAuaXNFbXB0eSAmJiAoX2ZpcnN0WmVyb1RpbWVyID09IG51bGwpKSB7CiAgICAgIF9pZENvdW50ID0gMDsKICAgIH0KCiAgICAvLyBGYXN0IGV4aXQgaWYgbm8gcGVuZGluZyB0aW1lcnMuCiAgICBpZiAocGVuZGluZ1RpbWVycy5sZW5ndGggPT0gMCkgewogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gVHJpZ2dlciBhbGwgb2YgdGhlIHBlbmRpbmcgdGltZXJzLiBOZXcgdGltZXJzIGFkZGVkIGFzIHBhcnQgb2YgdGhlCiAgICAvLyBjYWxsYmFja3Mgd2lsbCBiZSBlbnF1ZXVlZCBub3cgYW5kIG5vdGlmaWVkIGluIHRoZSBuZXh0IHNwaW4gYXQgdGhlCiAgICAvLyBlYXJsaWVzdC4KICAgIF9oYW5kbGluZ0NhbGxiYWNrcyA9IHRydWU7CiAgICB2YXIgaSA9IDA7CiAgICB0cnkgewogICAgICBmb3IgKDsgaSA8IHBlbmRpbmdUaW1lcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAvLyBOZXh0IHBlbmRpbmcgdGltZXIuCiAgICAgICAgdmFyIHRpbWVyID0gcGVuZGluZ1RpbWVyc1tpXTsKICAgICAgICB0aW1lci5faW5kZXhPck5leHQgPSBudWxsOwoKICAgICAgICAvLyBPbmUgb2YgdGhlIHRpbWVycyBpbiB0aGUgcGVuZGluZ190aW1lcnMgbGlzdCBjYW4gY2FuY2VsCiAgICAgICAgLy8gb25lIG9mIHRoZSBsYXRlciB0aW1lcnMgd2hpY2ggd2lsbCBzZXQgdGhlIGNhbGxiYWNrIHRvCiAgICAgICAgLy8gbnVsbC4gT3IgdGhlIHBlbmRpbmcgemVybyB0aW1lciBoYXMgYmVlbiBjYW5jZWxlZCBlYXJsaWVyLgogICAgICAgIGlmICh0aW1lci5fY2FsbGJhY2sgIT0gbnVsbCkgewogICAgICAgICAgdmFyIGNhbGxiYWNrID0gdGltZXIuX2NhbGxiYWNrOwogICAgICAgICAgaWYgKCF0aW1lci5fcmVwZWF0aW5nKSB7CiAgICAgICAgICAgIC8vIE1hcmsgdGltZXIgYXMgaW5hY3RpdmUuCiAgICAgICAgICAgIHRpbWVyLl9jYWxsYmFjayA9IG51bGw7CiAgICAgICAgICB9IGVsc2UgaWYgKHRpbWVyLl9taWxsaVNlY29uZHMgPiAwKSB7CiAgICAgICAgICAgIHZhciBtcyA9IHRpbWVyLl9taWxsaVNlY29uZHM7CiAgICAgICAgICAgIGludCBvdmVyZHVlID0KICAgICAgICAgICAgICAgIFZNTGlicmFyeUhvb2tzLnRpbWVyTWlsbGlzZWNvbmRDbG9jaygpIC0gdGltZXIuX3dha2V1cFRpbWU7CiAgICAgICAgICAgIGlmIChvdmVyZHVlID4gbXMpIHsKICAgICAgICAgICAgICBpbnQgbWlzc2VkVGlja3MgPSBvdmVyZHVlIH4vIG1zOwogICAgICAgICAgICAgIHRpbWVyLl93YWtldXBUaW1lICs9IG1pc3NlZFRpY2tzICogbXM7CiAgICAgICAgICAgICAgdGltZXIuX3RpY2sgKz0gbWlzc2VkVGlja3M7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHRpbWVyLl90aWNrICs9IDE7CgogICAgICAgICAgY2FsbGJhY2sodGltZXIpOwogICAgICAgICAgLy8gUmUtaW5zZXJ0IHJlcGVhdGluZyB0aW1lciBpZiBub3QgY2FuY2VsZWQuCiAgICAgICAgICBpZiAodGltZXIuX3JlcGVhdGluZyAmJiAodGltZXIuX2NhbGxiYWNrICE9IG51bGwpKSB7CiAgICAgICAgICAgIHRpbWVyLl9hZHZhbmNlV2FrZXVwVGltZSgpOwogICAgICAgICAgICB0aW1lci5fZW5xdWV1ZSgpOwogICAgICAgICAgfQogICAgICAgICAgLy8gRXhlY3V0ZSBwZW5kaW5nIG1pY3JvIHRhc2tzLgogICAgICAgICAgdmFyIGltbWVkaWF0ZUNhbGxiYWNrID0gX3JlbW92ZVBlbmRpbmdJbW1lZGlhdGVDYWxsYmFjaygpOwogICAgICAgICAgaWYgKGltbWVkaWF0ZUNhbGxiYWNrICE9IG51bGwpIHsKICAgICAgICAgICAgaW1tZWRpYXRlQ2FsbGJhY2soKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gZmluYWxseSB7CiAgICAgIF9oYW5kbGluZ0NhbGxiYWNrcyA9IGZhbHNlOwogICAgICAvLyBSZS1xdWV1ZSB0aW1lcnMgd2UgZGlkbid0IGdldCB0by4KICAgICAgZm9yIChpKys7IGkgPCBwZW5kaW5nVGltZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHRpbWVyID0gcGVuZGluZ1RpbWVyc1tpXTsKICAgICAgICB0aW1lci5fZW5xdWV1ZSgpOwogICAgICB9CiAgICAgIF9ub3RpZnlFdmVudEhhbmRsZXIoKTsKICAgIH0KICB9CgogIHN0YXRpYyB2b2lkIF9oYW5kbGVNZXNzYWdlKG1zZykgewogICAgdmFyIHBlbmRpbmdUaW1lcnM7CiAgICBpZiAobXNnID09IF9aRVJPX0VWRU5UKSB7CiAgICAgIHBlbmRpbmdUaW1lcnMgPSBfcXVldWVGcm9tWmVyb0V2ZW50KCk7CiAgICAgIGFzc2VydChwZW5kaW5nVGltZXJzLmxlbmd0aCA+IDApOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KG1zZyA9PSBfVElNRU9VVF9FVkVOVCk7CiAgICAgIF9zY2hlZHVsZWRXYWtldXBUaW1lID0gbnVsbDsgLy8gQ29uc3VtZWQgdGhlIGxhc3Qgc2NoZWR1bGVkIHdha2V1cCBub3cuCiAgICAgIHBlbmRpbmdUaW1lcnMgPSBfcXVldWVGcm9tVGltZW91dEV2ZW50KCk7CiAgICB9CiAgICBfcnVuVGltZXJzKHBlbmRpbmdUaW1lcnMpOwogICAgLy8gTm90aWZ5IHRoZSBldmVudCBoYW5kbGVyIG9yIHNodXRkb3duIHRoZSBwb3J0IGlmIG5vIG1vcmUgcGVuZGluZwogICAgLy8gdGltZXJzIGFyZSBwcmVzZW50LgogICAgX25vdGlmeUV2ZW50SGFuZGxlcigpOwogIH0KCiAgLy8gVGVsbCB0aGUgZXZlbnQgaGFuZGxlciB0byB3YWtlIHRoaXMgaXNvbGF0ZSBhdCBhIHNwZWNpZmljIHRpbWUuCiAgc3RhdGljIHZvaWQgX3NjaGVkdWxlV2FrZXVwKGludCB3YWtldXBUaW1lKSB7CiAgICBpZiAoX3NlbmRQb3J0ID09IG51bGwpIHsKICAgICAgX2NyZWF0ZVRpbWVySGFuZGxlcigpOwogICAgfQogICAgVk1MaWJyYXJ5SG9va3MuZXZlbnRIYW5kbGVyU2VuZERhdGEobnVsbCwgX3NlbmRQb3J0LCB3YWtldXBUaW1lKTsKICAgIF9zY2hlZHVsZWRXYWtldXBUaW1lID0gd2FrZXVwVGltZTsKICB9CgogIC8vIENhbmNlbCBwZW5kaW5nIHdha2V1cHMgaW4gdGhlIGV2ZW50IGhhbmRsZXIuCiAgc3RhdGljIHZvaWQgX2NhbmNlbFdha2V1cCgpIHsKICAgIGlmIChfc2VuZFBvcnQgIT0gbnVsbCkgewogICAgICBWTUxpYnJhcnlIb29rcy5ldmVudEhhbmRsZXJTZW5kRGF0YShudWxsLCBfc2VuZFBvcnQsIF9OT19USU1FUik7CiAgICAgIF9zY2hlZHVsZWRXYWtldXBUaW1lID0gbnVsbDsKICAgIH0KICB9CgogIC8vIENyZWF0ZSBhIHJlY2VpdmUgcG9ydCBhbmQgcmVnaXN0ZXIgYSBtZXNzYWdlIGhhbmRsZXIgZm9yIHRoZSB0aW1lcgogIC8vIGV2ZW50cy4KICBzdGF0aWMgdm9pZCBfY3JlYXRlVGltZXJIYW5kbGVyKCkgewogICAgYXNzZXJ0KF9yZWNlaXZlUG9ydCA9PSBudWxsKTsKICAgIGFzc2VydChfc2VuZFBvcnQgPT0gbnVsbCk7CiAgICBfcmVjZWl2ZVBvcnQgPSBuZXcgUmF3UmVjZWl2ZVBvcnQoX2hhbmRsZU1lc3NhZ2UpOwogICAgX3NlbmRQb3J0ID0gX3JlY2VpdmVQb3J0LnNlbmRQb3J0OwogICAgX3NjaGVkdWxlZFdha2V1cFRpbWUgPSBudWxsOwogIH0KCiAgc3RhdGljIHZvaWQgX3NodXRkb3duVGltZXJIYW5kbGVyKCkgewogICAgX3JlY2VpdmVQb3J0LmNsb3NlKCk7CiAgICBfcmVjZWl2ZVBvcnQgPSBudWxsOwogICAgX3NlbmRQb3J0ID0gbnVsbDsKICAgIF9zY2hlZHVsZWRXYWtldXBUaW1lID0gbnVsbDsKICB9CgogIC8vIFRoZSBUaW1lciBmYWN0b3J5IHJlZ2lzdGVyZWQgd2l0aCB0aGUgZGFydDphc3luYyBsaWJyYXJ5IGJ5IHRoZSBlbWJlZGRlci4KICBzdGF0aWMgVGltZXIgX2ZhY3RvcnkoCiAgICAgIGludCBtaWxsaVNlY29uZHMsIHZvaWQgY2FsbGJhY2soVGltZXIgdGltZXIpLCBib29sIHJlcGVhdGluZykgewogICAgaWYgKHJlcGVhdGluZykgewogICAgICByZXR1cm4gbmV3IF9UaW1lci5wZXJpb2RpYyhtaWxsaVNlY29uZHMsIGNhbGxiYWNrKTsKICAgIH0KICAgIHJldHVybiBuZXcgX1RpbWVyKG1pbGxpU2Vjb25kcywgY2FsbGJhY2spOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCl9zZXR1cEhvb2tzKCkgewogIFZNTGlicmFyeUhvb2tzLnRpbWVyRmFjdG9yeSA9IF9UaW1lci5fZmFjdG9yeTsKfQqB1wBOTjwBIQE7UAoDTisDMBMWEQFHASIBIAE5ARshEQYiJxYEARkTDw4EAR4NExchDgYdIy4nKBkPGwgGGR8EARM6JxUEASEeJSoeDw8IBgQBIxM7PR1KIwhMJAgmLQ8IHAYEASwiLh8nKQQBSlAlMwE6OjsCASAtHwFQICYBTk8pISABS08mGwEmHSMBKgFNJz43R0wBKAFNRxkbKhMEARRNGQEdRjYcGAY/SUU+NksBE01JHBYSBAFBOAQBSjcEAS0BIS0aHAQBKgEZAU5OKBIWTkMcJxgSHQYEAR5PJBUdJA08BgQBTjcUHiUfIA8sHwguHA0XIR8IBgQBTU4lHR0GIQQBUSomJCVQLQ9OIyAGOh0qHx4aBAEmHk5QHw4GAUQ2TQ8fGSEIDiBCFw4GAUkmLiowIwYEASkkI0wnSk9NLRFQJSIIDU8PQBFLJSIIBhoEAS9NLDYUBgEnJQ4GAUpLER8PCi4fJiMBQ0JGJyojJyQwKhpMIC81Kg4MHAEbOD8oHgwqRSshDAoIECIrMSYaCB0GBAEkFx4tKA0lTjAGH0gbGwQBRTAdHQZGJwQBMiAdRyMGBAFIDSYiHzcnIQQBKBoZFiEEAU8ZRhU6Bi8EAgEiEDECASJkYXJ0Omlzb2xhdGUtcGF0Y2gvdGltZXJfaW1wbC5kYXJ0M29yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pc29sYXRlL2NhcGFiaWxpdHkuZGFydITpLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pc29sYXRlOwoKLyoqCiAqIEFuIHVuZm9yZ2VhYmxlIG9iamVjdCB0aGF0IGNvbWVzIGJhY2sgYXMgZXF1YWwgd2hlbiBwYXNzZWQgdGhyb3VnaCBvdGhlcgogKiBpc29sYXRlcy4KICoKICogU2VuZGluZyBhIGNhcGFiaWxpdHkgb2JqZWN0IHRvIGFub3RoZXIgaXNvbGF0ZSwgYW5kIGdldHRpbmcgaXQgYmFjaywKICogd2lsbCBwcm9kdWNlIGFuIG9iamVjdCB0aGF0IGlzIGVxdWFsIHRvIHRoZSBvcmlnaW5hbC4KICogVGhlcmUgaXMgbm8gb3RoZXIgd2F5IHRvIGNyZWF0ZSBvYmplY3RzIGVxdWFsIHRvIGEgY2FwYWJpbGl0eSBvYmplY3QuCiAqCiAqIENhcGFiaWxpdGllcyBjYW4gYmUgdXNlZCBhcyBhY2Nlc3MgZ3VhcmRzOiBBIHJlbW90ZSBpc29sYXRlIGNhbiBzZW5kCiAqIGEgcmVxdWVzdCBmb3IgYW4gb3BlcmF0aW9uLCBidXQgaXQgaXMgb25seSBhbGxvd2VkIGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zCiAqIHRoZSBjb3JyZWN0IGNhcGFiaWxpdHkgb2JqZWN0LgogKgogKiBUaGlzIGFsbG93cyBleHBvc2luZyB0aGUgc2FtZSBpbnRlcmZhY2UgdG8gbXVsdGlwbGUgY2xpZW50cywKICogYnV0IHJlc3RyaWN0aW5nIHNvbWUgb3BlcmF0aW9ucyB0byBvbmx5IHRob3NlIGNsaWVudHMKICogdGhhdCBoYXZlIGFsc28gYmVlbiBnaXZlbiB0aGUgY29ycmVzcG9uZGluZyBjYXBhYmlsaXR5LgogKgogKiBDYXBhYmlsaXRpZXMgY2FuIGJlIHVzZWQgaW5zaWRlIGEgc2luZ2xlIGlzb2xhdGUsCiAqIGJ1dCB0aGV5IGhhdmUgbm8gYWR2YW50YWdlIG92ZXIKICoganVzdCB1c2luZyBgbmV3IE9iamVjdGAgdG8gY3JlYXRlIGEgdW5pcXVlIG9iamVjdCwKICogYW5kIGl0IG9mZmVycyBubyByZWFsIHNlY3VyaXR5IGFnYWluc3Qgb3RoZXIgY29kZQogKiBydW5uaW5nIGluIHRoZSBzYW1lIGlzb2xhdGUuCiAqLwpjbGFzcyBDYXBhYmlsaXR5IHsKICAvKioKICAgKiBDcmVhdGUgYSBuZXcgdW5mb3JnZWFibGUgY2FwYWJpbGl0eSBvYmplY3QuCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBDYXBhYmlsaXR5KCk7Cn0KJABOTjwBFgEETA0DSDlJA0hOIgNAOTsDNSM2NSAEEwYxBiECARxkYXJ0Omlzb2xhdGUvY2FwYWJpbGl0eS5kYXJ0Km9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9tYXRoL21hdGguZGFydJlILy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBNYXRoZW1hdGljYWwgY29uc3RhbnRzIGFuZCBmdW5jdGlvbnMsIHBsdXMgYSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KLy8vCi8vLyBUbyB1c2UgdGhpcyBsaWJyYXJ5IGluIHlvdXIgY29kZToKLy8vCi8vLyAgICAgaW1wb3J0ICdkYXJ0Om1hdGgnOwovLy8KLy8vIHtAY2F0ZWdvcnkgQ29yZX0KbGlicmFyeSBkYXJ0Lm1hdGg7CgpwYXJ0ICJqZW5raW5zX3NtaV9oYXNoLmRhcnQiOwpwYXJ0ICJwb2ludC5kYXJ0IjsKcGFydCAicmFuZG9tLmRhcnQiOwpwYXJ0ICJyZWN0YW5nbGUuZGFydCI7CgovLy8gQmFzZSBvZiB0aGUgbmF0dXJhbCBsb2dhcml0aG1zLgovLy8KLy8vIFR5cGljYWxseSB3cml0dGVuIGFzICJlIi4KY29uc3QgZG91YmxlIGUgPSAyLjcxODI4MTgyODQ1OTA0NTsKCi8vLyBOYXR1cmFsIGxvZ2FyaXRobSBvZiAxMC4KLy8vCi8vLyBUaGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgMTAgaXMgdGhlIG51bWJlciBzdWNoIHRoYXQgYHBvdyhFLCBMTjEwKSA9PSAxMGAuCi8vLyBUaGlzIHZhbHVlIGlzIG5vdCBleGFjdCwgYnV0IGl0IGlzIHRoZSBjbG9zZXN0IHJlcHJlc2VudGFibGUgZG91YmxlIHRvIHRoZQovLy8gZXhhY3QgbWF0aGVtYXRpY2FsIHZhbHVlLgpjb25zdCBkb3VibGUgbG4xMCA9IDIuMzAyNTg1MDkyOTk0MDQ2OwoKLy8vIE5hdHVyYWwgbG9nYXJpdGhtIG9mIDIuCi8vLwovLy8gVGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIDIgaXMgdGhlIG51bWJlciBzdWNoIHRoYXQgYHBvdyhFLCBMTjIpID09IDJgLgovLy8gVGhpcyB2YWx1ZSBpcyBub3QgZXhhY3QsIGJ1dCBpdCBpcyB0aGUgY2xvc2VzdCByZXByZXNlbnRhYmxlIGRvdWJsZSB0byB0aGUKLy8vIGV4YWN0IG1hdGhlbWF0aWNhbCB2YWx1ZS4KY29uc3QgZG91YmxlIGxuMiA9IDAuNjkzMTQ3MTgwNTU5OTQ1MzsKCi8vLyBCYXNlLTIgbG9nYXJpdGhtIG9mIFtlXS4KY29uc3QgZG91YmxlIGxvZzJlID0gMS40NDI2OTUwNDA4ODg5NjM0OwoKLy8vIEJhc2UtMTAgbG9nYXJpdGhtIG9mIFtlXS4KY29uc3QgZG91YmxlIGxvZzEwZSA9IDAuNDM0Mjk0NDgxOTAzMjUxODsKCi8vLyBUaGUgUEkgY29uc3RhbnQuCmNvbnN0IGRvdWJsZSBwaSA9IDMuMTQxNTkyNjUzNTg5NzkzMjsKCi8vLyBTcXVhcmUgcm9vdCBvZiAxLzIuCmNvbnN0IGRvdWJsZSBzcXJ0MV8yID0gMC43MDcxMDY3ODExODY1NDc2OwoKLy8vIFNxdWFyZSByb290IG9mIDIuCmNvbnN0IGRvdWJsZSBzcXJ0MiA9IDEuNDE0MjEzNTYyMzczMDk1MTsKCi8vLyBSZXR1cm5zIHRoZSBsZXNzZXIgb2YgdHdvIG51bWJlcnMuCi8vLwovLy8gUmV0dXJucyBOYU4gaWYgZWl0aGVyIGFyZ3VtZW50IGlzIE5hTi4KLy8vIFRoZSBsZXNzZXIgb2YgYC0wLjBgIGFuZCBgMC4wYCBpcyBgLTAuMGAuCi8vLyBJZiB0aGUgYXJndW1lbnRzIGFyZSBvdGhlcndpc2UgZXF1YWwgKGluY2x1ZGluZyBpbnQgYW5kIGRvdWJsZXMgd2l0aCB0aGUKLy8vIHNhbWUgbWF0aGVtYXRpY2FsIHZhbHVlKSB0aGVuIGl0IGlzIHVuc3BlY2lmaWVkIHdoaWNoIG9mIHRoZSB0d28gYXJndW1lbnRzCi8vLyBpcyByZXR1cm5lZC4KZXh0ZXJuYWwgVCBtaW48VCBleHRlbmRzIG51bT4oVCBhLCBUIGIpOwoKLy8vIFJldHVybnMgdGhlIGxhcmdlciBvZiB0d28gbnVtYmVycy4KLy8vCi8vLyBSZXR1cm5zIE5hTiBpZiBlaXRoZXIgYXJndW1lbnQgaXMgTmFOLgovLy8gVGhlIGxhcmdlciBvZiBgLTAuMGAgYW5kIGAwLjBgIGlzIGAwLjBgLiBJZiB0aGUgYXJndW1lbnRzIGFyZQovLy8gb3RoZXJ3aXNlIGVxdWFsIChpbmNsdWRpbmcgaW50IGFuZCBkb3VibGVzIHdpdGggdGhlIHNhbWUgbWF0aGVtYXRpY2FsIHZhbHVlKQovLy8gdGhlbiBpdCBpcyB1bnNwZWNpZmllZCB3aGljaCBvZiB0aGUgdHdvIGFyZ3VtZW50cyBpcyByZXR1cm5lZC4KZXh0ZXJuYWwgVCBtYXg8VCBleHRlbmRzIG51bT4oVCBhLCBUIGIpOwoKLy8vIEEgdmFyaWFudCBvZiBbYXRhbl0uCi8vLwovLy8gQ29udmVydHMgYm90aCBhcmd1bWVudHMgdG8gW2RvdWJsZV1zLgovLy8KLy8vIFJldHVybnMgdGhlIGFuZ2xlIGluIHJhZGlhbnMgYmV0d2VlbiB0aGUgcG9zaXRpdmUgeC1heGlzCi8vLyBhbmQgdGhlIHZlY3RvciAoW2JdLFthXSkuCi8vLyBUaGUgcmVzdWx0IGlzIGluIHRoZSByYW5nZSAtUEkuLlBJLgovLy8KLy8vIElmIFtiXSBpcyBwb3NpdGl2ZSwgdGhpcyBpcyB0aGUgc2FtZSBhcyBgYXRhbihiL2EpYC4KLy8vCi8vLyBUaGUgcmVzdWx0IGlzIG5lZ2F0aXZlIHdoZW4gW2FdIGlzIG5lZ2F0aXZlIChpbmNsdWRpbmcgd2hlbiBbYV0gaXMgdGhlCi8vLyBkb3VibGUgLTAuMCkuCi8vLwovLy8gSWYgW2FdIGlzIGVxdWFsIHRvIHplcm8sIHRoZSB2ZWN0b3IgKFtiXSxbYV0pIGlzIGNvbnNpZGVyZWQgcGFyYWxsZWwgdG8KLy8vIHRoZSB4LWF4aXMsIGV2ZW4gaWYgW2JdIGlzIGFsc28gZXF1YWwgdG8gemVyby4gVGhlIHNpZ24gb2YgW2JdIGRldGVybWluZXMKLy8vIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHZlY3RvciBhbG9uZyB0aGUgeC1heGlzLgovLy8KLy8vIFJldHVybnMgTmFOIGlmIGVpdGhlciBhcmd1bWVudCBpcyBOYU4uCmV4dGVybmFsIGRvdWJsZSBhdGFuMihudW0gYSwgbnVtIGIpOwoKLy8vIFJldHVybnMgW3hdIHRvIHRoZSBwb3dlciBvZiBbZXhwb25lbnRdLgovLy8KLy8vIElmIFt4XSBpcyBhbiBbaW50XSBhbmQgW2V4cG9uZW50XSBpcyBhIG5vbi1uZWdhdGl2ZSBbaW50XSwgdGhlIHJlc3VsdCBpcwovLy8gYW4gW2ludF0sIG90aGVyd2lzZSBib3RoIGFyZ3VtZW50cyBhcmUgY29udmVydGVkIHRvIGRvdWJsZXMgZmlyc3QsIGFuZCB0aGUKLy8vIHJlc3VsdCBpcyBhIFtkb3VibGVdLgovLy8KLy8vIEZvciBpbnRlZ2VycywgdGhlIHBvd2VyIGlzIGFsd2F5cyBlcXVhbCB0byB0aGUgbWF0aGVtYXRpY2FsIHJlc3VsdCBvZiBgeGAgdG8KLy8vIHRoZSBwb3dlciBgZXhwb25lbnRgLCBvbmx5IGxpbWl0ZWQgYnkgdGhlIGF2YWlsYWJsZSBtZW1vcnkuCi8vLwovLy8gRm9yIGRvdWJsZXMsIGBwb3coeCwgeSlgIGhhbmRsZXMgZWRnZSBjYXNlcyBhcyBmb2xsb3dzOgovLy8KLy8vIC0gaWYgYHlgIGlzIHplcm8gKDAuMCBvciAtMC4wKSwgdGhlIHJlc3VsdCBpcyBhbHdheXMgMS4wLgovLy8gLSBpZiBgeGAgaXMgMS4wLCB0aGUgcmVzdWx0IGlzIGFsd2F5cyAxLjAuCi8vLyAtIG90aGVyd2lzZSwgaWYgZWl0aGVyIGB4YCBvciBgeWAgaXMgTmFOIHRoZW4gdGhlIHJlc3VsdCBpcyBOYU4uCi8vLyAtIGlmIGB4YCBpcyBuZWdhdGl2ZSAoYnV0IG5vdCAtMC4wKSBhbmQgYHlgIGlzIGEgZmluaXRlIG5vbi1pbnRlZ2VyLCB0aGUKLy8vICAgcmVzdWx0IGlzIE5hTi4KLy8vIC0gaWYgYHhgIGlzIEluZmluaXR5IGFuZCBgeWAgaXMgbmVnYXRpdmUsIHRoZSByZXN1bHQgaXMgMC4wLgovLy8gLSBpZiBgeGAgaXMgSW5maW5pdHkgYW5kIGB5YCBpcyBwb3NpdGl2ZSwgdGhlIHJlc3VsdCBpcyBJbmZpbml0eS4KLy8vIC0gaWYgYHhgIGlzIDAuMCBhbmQgYHlgIGlzIG5lZ2F0aXZlLCB0aGUgcmVzdWx0IGlzIEluZmluaXR5LgovLy8gLSBpZiBgeGAgaXMgMC4wIGFuZCBgeWAgaXMgcG9zaXRpdmUsIHRoZSByZXN1bHQgaXMgMC4wLgovLy8gLSBpZiBgeGAgaXMgLUluZmluaXR5IG9yIC0wLjAgYW5kIGB5YCBpcyBhbiBvZGQgaW50ZWdlciwgdGhlbiB0aGUgcmVzdWx0IGlzCi8vLyAgIGAtcG93KC14ICx5KWAuCi8vLyAtIGlmIGB4YCBpcyAtSW5maW5pdHkgb3IgLTAuMCBhbmQgYHlgIGlzIG5vdCBhbiBvZGQgaW50ZWdlciwgdGhlbiB0aGUgcmVzdWx0Ci8vLyAgIGlzIHRoZSBzYW1lIGFzIGBwb3coLXggLCB5KWAuCi8vLyAtIGlmIGB5YCBpcyBJbmZpbml0eSBhbmQgdGhlIGFic29sdXRlIHZhbHVlIG9mIGB4YCBpcyBsZXNzIHRoYW4gMSwgdGhlCi8vLyAgIHJlc3VsdCBpcyAwLjAuCi8vLyAtIGlmIGB5YCBpcyBJbmZpbml0eSBhbmQgYHhgIGlzIC0xLCB0aGUgcmVzdWx0IGlzIDEuMC4KLy8vIC0gaWYgYHlgIGlzIEluZmluaXR5IGFuZCB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYHhgIGlzIGdyZWF0ZXIgdGhhbiAxLAovLy8gICB0aGUgcmVzdWx0IGlzIEluZmluaXR5LgovLy8gLSBpZiBgeWAgaXMgLUluZmluaXR5LCB0aGUgcmVzdWx0IGlzIGAxL3Bvdyh4LCBJbmZpbml0eSlgLgovLy8KLy8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGBwb3dgIGZ1bmN0aW9uIGRlZmluZWQgaW4gdGhlIElFRUUgU3RhbmRhcmQKLy8vIDc1NC0yMDA4LgovLy8KLy8vIE5vdGljZSB0aGF0IHRoZSByZXN1bHQgbWF5IG92ZXJmbG93LiBJZiBpbnRlZ2VycyBhcmUgcmVwcmVzZW50ZWQgYXMgNjQtYml0Ci8vLyBudW1iZXJzLCBhbiBpbnRlZ2VyIHJlc3VsdCBtYXkgYmUgdHJ1bmNhdGVkLCBhbmQgYSBkb3VibGUgcmVzdWx0IG1heQovLy8gb3ZlcmZsb3cgdG8gcG9zaXRpdmUgb3IgbmVnYXRpdmUgW2RvdWJsZS5pbmZpbml0eV0uCmV4dGVybmFsIG51bSBwb3cobnVtIHgsIG51bSBleHBvbmVudCk7CgovLy8gQ29udmVydHMgW3JhZGlhbnNdIHRvIGEgW2RvdWJsZV0gYW5kIHJldHVybnMgdGhlIHNpbmUgb2YgdGhlIHZhbHVlLgovLy8KLy8vIElmIFtyYWRpYW5zXSBpcyBub3QgYSBmaW5pdGUgbnVtYmVyLCB0aGUgcmVzdWx0IGlzIE5hTi4KZXh0ZXJuYWwgZG91YmxlIHNpbihudW0gcmFkaWFucyk7CgovLy8gQ29udmVydHMgW3JhZGlhbnNdIHRvIGEgW2RvdWJsZV0gYW5kIHJldHVybnMgdGhlIGNvc2luZSBvZiB0aGUgdmFsdWUuCi8vLwovLy8gSWYgW3JhZGlhbnNdIGlzIG5vdCBhIGZpbml0ZSBudW1iZXIsIHRoZSByZXN1bHQgaXMgTmFOLgpleHRlcm5hbCBkb3VibGUgY29zKG51bSByYWRpYW5zKTsKCi8vLyBDb252ZXJ0cyBbcmFkaWFuc10gdG8gYSBbZG91YmxlXSBhbmQgcmV0dXJucyB0aGUgdGFuZ2VudCBvZiB0aGUgdmFsdWUuCi8vLwovLy8gVGhlIHRhbmdlbnQgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBgc2luKHJhZGlhbnMpL2NvcyhyYWRpYW5zKWAgYW5kIG1heSBiZQovLy8gaW5maW5pdGUgKHBvc2l0aXZlIG9yIG5lZ2F0aXZlKSB3aGVuIGBjb3MocmFkaWFucylgIGlzIGVxdWFsIHRvIHplcm8uCi8vLyBJZiBbcmFkaWFuc10gaXMgbm90IGEgZmluaXRlIG51bWJlciwgdGhlIHJlc3VsdCBpcyBOYU4uCmV4dGVybmFsIGRvdWJsZSB0YW4obnVtIHJhZGlhbnMpOwoKLy8vIENvbnZlcnRzIFt4XSB0byBhIFtkb3VibGVdIGFuZCByZXR1cm5zIGl0cyBhcmMgY29zaW5lIGluIHJhZGlhbnMuCi8vLwovLy8gUmV0dXJucyBhIHZhbHVlIGluIHRoZSByYW5nZSAwLi5QSSwgb3IgTmFOIGlmIFt4XSBpcyBvdXRzaWRlCi8vLyB0aGUgcmFuZ2UgLTEuLjEuCmV4dGVybmFsIGRvdWJsZSBhY29zKG51bSB4KTsKCi8vLyBDb252ZXJ0cyBbeF0gdG8gYSBbZG91YmxlXSBhbmQgcmV0dXJucyBpdHMgYXJjIHNpbmUgaW4gcmFkaWFucy4KLy8vCi8vLyBSZXR1cm5zIGEgdmFsdWUgaW4gdGhlIHJhbmdlIC1QSS8yLi5QSS8yLCBvciBOYU4gaWYgW3hdIGlzIG91dHNpZGUKLy8vIHRoZSByYW5nZSAtMS4uMS4KZXh0ZXJuYWwgZG91YmxlIGFzaW4obnVtIHgpOwoKLy8vIENvbnZlcnRzIFt4XSB0byBhIFtkb3VibGVdIGFuZCByZXR1cm5zIGl0cyBhcmMgdGFuZ2VudCBpbiByYWRpYW5zLgovLy8KLy8vIFJldHVybnMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgLVBJLzIuLlBJLzIsIG9yIE5hTiBpZiBbeF0gaXMgTmFOLgpleHRlcm5hbCBkb3VibGUgYXRhbihudW0geCk7CgovLy8gQ29udmVydHMgW3hdIHRvIGEgW2RvdWJsZV0gYW5kIHJldHVybnMgdGhlIHBvc2l0aXZlIHNxdWFyZSByb290IG9mIHRoZQovLy8gdmFsdWUuCi8vLwovLy8gUmV0dXJucyAtMC4wIGlmIFt4XSBpcyAtMC4wLCBhbmQgTmFOIGlmIFt4XSBpcyBvdGhlcndpc2UgbmVnYXRpdmUgb3IgTmFOLgpleHRlcm5hbCBkb3VibGUgc3FydChudW0geCk7CgovLy8gQ29udmVydHMgW3hdIHRvIGEgW2RvdWJsZV0gYW5kIHJldHVybnMgdGhlIG5hdHVyYWwgZXhwb25lbnQsIFtlXSwKLy8vIHRvIHRoZSBwb3dlciBbeF0uCi8vLwovLy8gUmV0dXJucyBOYU4gaWYgW3hdIGlzIE5hTi4KZXh0ZXJuYWwgZG91YmxlIGV4cChudW0geCk7CgovLy8gQ29udmVydHMgW3hdIHRvIGEgW2RvdWJsZV0gYW5kIHJldHVybnMgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIHRoZSB2YWx1ZS4KLy8vCi8vLyBSZXR1cm5zIG5lZ2F0aXZlIGluZmluaXR5IGlmIFt4XSBpcyBlcXVhbCB0byB6ZXJvLgovLy8gUmV0dXJucyBOYU4gaWYgW3hdIGlzIE5hTiBvciBsZXNzIHRoYW4gemVyby4KZXh0ZXJuYWwgZG91YmxlIGxvZyhudW0geCk7CoC1AE5OPAFKBCYEHAQVEwEeExQXASQEHiQBHQROTx4nARwES08eJwEdKQEeKgEVJgEYKwEWKQEnBCsuTU8RKQEnBCtCUUMpARkEKgQ9HigEOQRLEgRMTjIEKyUBLARNTxoEUUAEPAQ+L0VNFUFGQTxQFVEkSxU7Sh4/BEgOBE9JOCcBSAQ8IgFKBDwiAUsEUUo8IgFGBEEVHQFEBEcVHQFHBEQdAUsLBE4dAUYWBB8cAU8ENzEcAQlkYXJ0Om1hdGgvb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9tYXRoX3BhdGNoLmRhcnSlNC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gTm90ZTogdGhlIFZNIGNvbmNhdGVuYXRlcyBhbGwgcGF0Y2ggZmlsZXMgaW50byBhIHNpbmdsZSBwYXRjaCBmaWxlLiBUaGlzCi8vLyBmaWxlIGlzIHRoZSBmaXJzdCBwYXRjaCBpbiAiZGFydDptYXRoIiB3aGljaCBjb250YWlucyBhbGwgdGhlIGltcG9ydHMgdXNlZAovLy8gYnkgcGF0Y2hlcyBvZiB0aGF0IGxpYnJhcnkuIFdlIHBsYW4gdG8gY2hhbmdlIHRoaXMgd2hlbiB3ZSBoYXZlIGEgc2hhcmVkCi8vLyBmcm9udCBlbmQgYW5kIHNpbXBseSB1c2UgcGFydHMuCgppbXBvcnQgImRhcnQ6X2ludGVybmFsIiBzaG93IHBhdGNoOwoKaW1wb3J0ICJkYXJ0OnR5cGVkX2RhdGEiIHNob3cgVWludDMyTGlzdDsKCi8vLyBUaGVyZSBhcmUgbm8gcGFydHMgb2YgdGhpcyBwYXRjaCBsaWJyYXJ5LgoKQHBhdGNoCkBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQpUIG1pbjxUIGV4dGVuZHMgbnVtPihUIGEsIFQgYikgewogIC8vIFRoZXNlIHBhcnRpYWxseSByZWR1bmRhbnQgdHlwZSBjaGVja3MgaW1wcm92ZSBjb2RlIHF1YWxpdHkgZm9yIGRhcnQyanMuCiAgLy8gTW9zdCBvZiB0aGUgaW1wcm92ZW1lbnQgaXMgYXQgY2FsbCBzaXRlcyBmcm9tIHRoZSBpbmZlcnJlZCBub24tbnVsbCBudW0KICAvLyByZXR1cm4gdHlwZS4KICBpZiAoYSBpcyEgbnVtKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihhKTsKICBpZiAoYiBpcyEgbnVtKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihiKTsKCiAgaWYgKGEgPiBiKSByZXR1cm4gYjsKICBpZiAoYSA8IGIpIHJldHVybiBhOwogIGlmIChiIGlzIGRvdWJsZSkgewogICAgLy8gU3BlY2lhbCBjYXNlIGZvciBOYU4gYW5kIC0wLjAuIElmIG9uZSBhcmd1bWVudCBpcyBOYU4gcmV0dXJuIE5hTi4KICAgIC8vIFttaW5dIG11c3QgYWxzbyBkaXN0aW5ndWlzaCBiZXR3ZWVuIC0wLjAgYW5kIDAuMC4KICAgIGlmIChhIGlzIGRvdWJsZSkgewogICAgICBpZiAoYSA9PSAwLjApIHsKICAgICAgICAvLyBhIGlzIGVpdGhlciAwLjAgb3IgLTAuMC4gYiBpcyBlaXRoZXIgMC4wLCAtMC4wIG9yIE5hTi4KICAgICAgICAvLyBUaGUgZm9sbG93aW5nIHJldHVybnMgLTAuMCBpZiBlaXRoZXIgYSBvciBiIGlzIC0wLjAsIGFuZCBpdAogICAgICAgIC8vIHJldHVybnMgTmFOIGlmIGIgaXMgTmFOLgogICAgICAgIG51bSBuID0gKGEgKyBiKSAqIGEgKiBiOwogICAgICAgIHJldHVybiBuOwogICAgICB9CiAgICB9CiAgICAvLyBDaGVjayBmb3IgTmFOIGFuZCBiID09IC0wLjAuCiAgICBpZiAoYSA9PSAwICYmIGIuaXNOZWdhdGl2ZSB8fCBiLmlzTmFOKSByZXR1cm4gYjsKICAgIHJldHVybiBhOwogIH0KICByZXR1cm4gYTsKfQoKQHBhdGNoCkBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQpUIG1heDxUIGV4dGVuZHMgbnVtPihUIGEsIFQgYikgewogIC8vIFRoZXNlIHBhcnRpYWxseSByZWR1bmRhbnQgdHlwZSBjaGVja3MgaW1wcm92ZSBjb2RlIHF1YWxpdHkgZm9yIGRhcnQyanMuCiAgLy8gTW9zdCBvZiB0aGUgaW1wcm92ZW1lbnQgaXMgYXQgY2FsbCBzaXRlcyBmcm9tIHRoZSBpbmZlcnJlZCBub24tbnVsbCBudW0KICAvLyByZXR1cm4gdHlwZS4KICBpZiAoYSBpcyEgbnVtKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihhKTsKICBpZiAoYiBpcyEgbnVtKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihiKTsKCiAgaWYgKGEgPiBiKSByZXR1cm4gYTsKICBpZiAoYSA8IGIpIHJldHVybiBiOwogIGlmIChiIGlzIGRvdWJsZSkgewogICAgLy8gU3BlY2lhbCBjYXNlIGZvciBOYU4gYW5kIC0wLjAuIElmIG9uZSBhcmd1bWVudCBpcyBOYU4gcmV0dXJuIE5hTi4KICAgIC8vIFttYXhdIG11c3QgYWxzbyBkaXN0aW5ndWlzaCBiZXR3ZWVuIC0wLjAgYW5kIDAuMC4KICAgIGlmIChhIGlzIGRvdWJsZSkgewogICAgICBpZiAoYSA9PSAwLjApIHsKICAgICAgICAvLyBhIGlzIGVpdGhlciAwLjAgb3IgLTAuMC4gYiBpcyBlaXRoZXIgMC4wLCAtMC4wLCBvciBOYU4uCiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyByZXR1cm5zIDAuMCBpZiBlaXRoZXIgYSBvciBiIGlzIDAuMCwgYW5kIGl0CiAgICAgICAgLy8gcmV0dXJucyBOYU4gaWYgYiBpcyBOYU4uCiAgICAgICAgbnVtIG4gPSBhICsgYjsKICAgICAgICByZXR1cm4gbjsKICAgICAgfQogICAgfQogICAgLy8gQ2hlY2sgZm9yIE5hTi4KICAgIGlmIChiLmlzTmFOKSByZXR1cm4gYjsKICAgIHJldHVybiBhOwogIH0KICAvLyBtYXgoLTAuMCwgMCkgbXVzdCByZXR1cm4gMC4KICBpZiAoYiA9PSAwICYmIGEuaXNOZWdhdGl2ZSkgcmV0dXJuIGI7CiAgcmV0dXJuIGE7Cn0KCi8vIElmIFt4XSBpcyBhbiBbaW50XSBhbmQgW2V4cG9uZW50XSBpcyBhIG5vbi1uZWdhdGl2ZSBbaW50XSwgdGhlIHJlc3VsdCBpcwovLyBhbiBbaW50XSwgb3RoZXJ3aXNlIHRoZSByZXN1bHQgaXMgYSBbZG91YmxlXS4KQHBhdGNoCkBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQpudW0gcG93KG51bSB4LCBudW0gZXhwb25lbnQpIHsKICBpZiAoKHggaXMgaW50KSAmJiAoZXhwb25lbnQgaXMgaW50KSAmJiAoZXhwb25lbnQgPj0gMCkpIHsKICAgIHJldHVybiBfaW50UG93KHgsIGV4cG9uZW50KTsKICB9CiAgcmV0dXJuIF9kb3VibGVQb3coeC50b0RvdWJsZSgpLCBleHBvbmVudC50b0RvdWJsZSgpKTsKfQoKQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19Eb3VibGUiKQpkb3VibGUgX2RvdWJsZVBvdyhkb3VibGUgYmFzZSwgZG91YmxlIGV4cG9uZW50KSB7CiAgaWYgKGV4cG9uZW50ID09IDAuMCkgewogICAgcmV0dXJuIDEuMDsgLy8gRUNNQS0yNjIgMTUuOC4yLjEzCiAgfQogIC8vIFNwZWVkIHVwIHNpbXBsZSBjYXNlcy4KICBpZiAoZXhwb25lbnQgPT0gMS4wKSByZXR1cm4gYmFzZTsKICBpZiAoZXhwb25lbnQgPT0gMi4wKSByZXR1cm4gYmFzZSAqIGJhc2U7CiAgaWYgKGV4cG9uZW50ID09IDMuMCkgcmV0dXJuIGJhc2UgKiBiYXNlICogYmFzZTsKCiAgaWYgKGJhc2UgPT0gMS4wKSByZXR1cm4gMS4wOwoKICBpZiAoYmFzZS5pc05hTiB8fCBleHBvbmVudC5pc05hTikgewogICAgcmV0dXJuIGRvdWJsZS5uYW47CiAgfQogIGlmICgoYmFzZSAhPSAtZG91YmxlLmluZmluaXR5KSAmJiAoZXhwb25lbnQgPT0gMC41KSkgewogICAgaWYgKGJhc2UgPT0gMC4wKSB7CiAgICAgIHJldHVybiAwLjA7CiAgICB9CiAgICByZXR1cm4gc3FydChiYXNlKTsKICB9CiAgcmV0dXJuIF9wb3coYmFzZS50b0RvdWJsZSgpLCBleHBvbmVudC50b0RvdWJsZSgpKTsKfQoKZG91YmxlIF9wb3coZG91YmxlIGJhc2UsIGRvdWJsZSBleHBvbmVudCkgbmF0aXZlICJNYXRoX2RvdWJsZVBvdyI7CgppbnQgX2ludFBvdyhpbnQgYmFzZSwgaW50IGV4cG9uZW50KSB7CiAgLy8gRXhwb25lbnRpYXRpb24gYnkgc3F1YXJpbmcuCiAgaW50IHJlc3VsdCA9IDE7CiAgd2hpbGUgKGV4cG9uZW50ICE9IDApIHsKICAgIGlmICgoZXhwb25lbnQgJiAxKSA9PSAxKSB7CiAgICAgIHJlc3VsdCAqPSBiYXNlOwogICAgfQogICAgZXhwb25lbnQgPj49IDE7CiAgICAvLyBTa2lwIHVubmVjZXNzYXJ5IG9wZXJhdGlvbiAoY2FuIG92ZXJmbG93IHRvIE1pbnQpLgogICAgaWYgKGV4cG9uZW50ICE9IDApIHsKICAgICAgYmFzZSAqPSBiYXNlOwogICAgfQogIH0KICByZXR1cm4gcmVzdWx0Owp9CgpAcGF0Y2gKQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19Eb3VibGUiKQpAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQpkb3VibGUgYXRhbjIobnVtIGEsIG51bSBiKSA9PiBfYXRhbjIoYS50b0RvdWJsZSgpLCBiLnRvRG91YmxlKCkpOwpAcGF0Y2gKQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19Eb3VibGUiKQpAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQpkb3VibGUgc2luKG51bSByYWRpYW5zKSA9PiBfc2luKHJhZGlhbnMudG9Eb3VibGUoKSk7CkBwYXRjaApAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX0RvdWJsZSIpCkBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCmRvdWJsZSBjb3MobnVtIHJhZGlhbnMpID0+IF9jb3MocmFkaWFucy50b0RvdWJsZSgpKTsKQHBhdGNoCkBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfRG91YmxlIikKQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKZG91YmxlIHRhbihudW0gcmFkaWFucykgPT4gX3RhbihyYWRpYW5zLnRvRG91YmxlKCkpOwpAcGF0Y2gKQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19Eb3VibGUiKQpAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQpkb3VibGUgYWNvcyhudW0geCkgPT4gX2Fjb3MoeC50b0RvdWJsZSgpKTsKQHBhdGNoCkBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfRG91YmxlIikKQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKZG91YmxlIGFzaW4obnVtIHgpID0+IF9hc2luKHgudG9Eb3VibGUoKSk7CkBwYXRjaApAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX0RvdWJsZSIpCkBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCmRvdWJsZSBhdGFuKG51bSB4KSA9PiBfYXRhbih4LnRvRG91YmxlKCkpOwpAcGF0Y2gKQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19Eb3VibGUiKQpAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQpkb3VibGUgc3FydChudW0geCkgPT4gX3NxcnQoeC50b0RvdWJsZSgpKTsKQHBhdGNoCkBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQpkb3VibGUgZXhwKG51bSB4KSA9PiBfZXhwKHgudG9Eb3VibGUoKSk7CkBwYXRjaApAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKZG91YmxlIGxvZyhudW0geCkgPT4gX2xvZyh4LnRvRG91YmxlKCkpOwoKZG91YmxlIF9hdGFuMihkb3VibGUgYSwgZG91YmxlIGIpIG5hdGl2ZSAiTWF0aF9hdGFuMiI7CmRvdWJsZSBfc2luKGRvdWJsZSB4KSBuYXRpdmUgIk1hdGhfc2luIjsKZG91YmxlIF9jb3MoZG91YmxlIHgpIG5hdGl2ZSAiTWF0aF9jb3MiOwpkb3VibGUgX3Rhbihkb3VibGUgeCkgbmF0aXZlICJNYXRoX3RhbiI7CmRvdWJsZSBfYWNvcyhkb3VibGUgeCkgbmF0aXZlICJNYXRoX2Fjb3MiOwpkb3VibGUgX2FzaW4oZG91YmxlIHgpIG5hdGl2ZSAiTWF0aF9hc2luIjsKZG91YmxlIF9hdGFuKGRvdWJsZSB4KSBuYXRpdmUgIk1hdGhfYXRhbiI7CmRvdWJsZSBfc3FydChkb3VibGUgeCkgbmF0aXZlICJNYXRoX3NxcnQiOwpkb3VibGUgX2V4cChkb3VibGUgeCkgbmF0aXZlICJNYXRoX2V4cCI7CmRvdWJsZSBfbG9nKGRvdWJsZSB4KSBuYXRpdmUgIk1hdGhfbG9nIjsKCi8vIFRPRE8oaXBvc3ZhKTogSGFuZGxlIHBhdGNoIG1ldGhvZHMgd2l0aGluIGEgcGF0Y2ggY2xhc3MgY29ycmVjdGx5LgpAcGF0Y2gKY2xhc3MgUmFuZG9tIHsKICBAcGF0Y2gKICBmYWN0b3J5IFJhbmRvbShbaW50IHNlZWRdKSB7CiAgICB2YXIgc3RhdGUgPSBfUmFuZG9tLl9zZXR1cFNlZWQoKHNlZWQgPT0gbnVsbCkgPyBfUmFuZG9tLl9uZXh0U2VlZCgpIDogc2VlZCk7CiAgICAvLyBDcmFuayBhIGNvdXBsZSBvZiB0aW1lcyB0byBkaXN0cmlidXRlIHRoZSBzZWVkIGJpdHMgYSBiaXQgZnVydGhlci4KICAgIHJldHVybiBuZXcgX1JhbmRvbS5fd2l0aFN0YXRlKHN0YXRlKQogICAgICAuLl9uZXh0U3RhdGUoKQogICAgICAuLl9uZXh0U3RhdGUoKQogICAgICAuLl9uZXh0U3RhdGUoKQogICAgICAuLl9uZXh0U3RhdGUoKTsKICB9CgogIEBwYXRjaAogIGZhY3RvcnkgUmFuZG9tLnNlY3VyZSgpIHsKICAgIHJldHVybiBuZXcgX1NlY3VyZVJhbmRvbSgpOwogIH0KfQoKY2xhc3MgX1JhbmRvbSBpbXBsZW1lbnRzIFJhbmRvbSB7CiAgLy8gSW50ZXJuYWwgc3RhdGUgb2YgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBmaW5hbCBVaW50MzJMaXN0IF9zdGF0ZTsKICBzdGF0aWMgY29uc3QgX2tTVEFURV9MTyA9IDA7CiAgc3RhdGljIGNvbnN0IF9rU1RBVEVfSEkgPSAxOyAvLyBVbnVzZWQgaW4gRGFydCBjb2RlLgoKICBfUmFuZG9tLl93aXRoU3RhdGUodGhpcy5fc3RhdGUpOwoKICAvLyBUaGUgYWxnb3JpdGhtIHVzZWQgaGVyZSBpcyBNdWx0aXBseSB3aXRoIENhcnJ5IChNV0MpIHdpdGggYSBCYXNlIGIgPSAyXjMyLgogIC8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTXVsdGlwbHktd2l0aC1jYXJyeQogIC8vIFRoZSBjb25zdGFudCBBIGlzIHNlbGVjdGVkIGZyb20gIk51bWVyaWNhbCBSZWNpcGVzIDNyZCBFZGl0aW9uIiBwLjM0OCBCMS4KCiAgLy8gSW1wbGVtZW50czoKICAvLyAgIGNvbnN0IF9BID0gMHhmZmZmZGE2MTsKICAvLyAgIHZhciBzdGF0ZSA9CiAgLy8gICAgICAgKChfQSAqIChfc3RhdGVbX2tTVEFURV9MT10pKSArIF9zdGF0ZVtfa1NUQVRFX0hJXSkgJiAoKDEgPDwgNjQpIC0gMSk7CiAgLy8gICBfc3RhdGVbX2tTVEFURV9MT10gPSBzdGF0ZSAmICgoMSA8PCAzMikgLSAxKTsKICAvLyAgIF9zdGF0ZVtfa1NUQVRFX0hJXSA9IHN0YXRlID4+IDMyOwogIC8vIFRoaXMgaXMgYSBuYXRpdmUgdG8gcHJldmVudCA2NC1iaXQgb3BlcmF0aW9ucyBpbiBEYXJ0LCB3aGljaAogIC8vIGZhaWwgd2l0aCAtLXRocm93X29uX2phdmFzY3JpcHRfaW50X292ZXJmbG93LgogIC8vIFRPRE8ocmVnaXMpOiBJbXBsZW1lbnQgaW4gRGFydCBhbmQgcmVtb3ZlIFJhbmRvbV9uZXh0U3RhdGUgaW4gbWF0aC5jYy4KICB2b2lkIF9uZXh0U3RhdGUoKSBuYXRpdmUgIlJhbmRvbV9uZXh0U3RhdGUiOwoKICBpbnQgbmV4dEludChpbnQgbWF4KSB7CiAgICBjb25zdCBsaW1pdCA9IDB4M0ZGRkZGRkY7CiAgICBpZiAoKG1heCA8PSAwKSB8fCAoKG1heCA+IGxpbWl0KSAmJiAobWF4ID4gX1BPVzJfMzIpKSkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZSgKICAgICAgICAgIG1heCwgMSwgX1BPVzJfMzIsICJtYXgiLCAiTXVzdCBiZSBwb3NpdGl2ZSBhbmQgPD0gMl4zMiIpOwogICAgfQogICAgaWYgKChtYXggJiAtbWF4KSA9PSBtYXgpIHsKICAgICAgLy8gRmFzdCBjYXNlIGZvciBwb3dlcnMgb2YgdHdvLgogICAgICBfbmV4dFN0YXRlKCk7CiAgICAgIHJldHVybiBfc3RhdGVbX2tTVEFURV9MT10gJiAobWF4IC0gMSk7CiAgICB9CgogICAgdmFyIHJuZDMyOwogICAgdmFyIHJlc3VsdDsKICAgIGRvIHsKICAgICAgX25leHRTdGF0ZSgpOwogICAgICBybmQzMiA9IF9zdGF0ZVtfa1NUQVRFX0xPXTsKICAgICAgcmVzdWx0ID0gcm5kMzIgJSBtYXg7CiAgICB9IHdoaWxlICgocm5kMzIgLSByZXN1bHQgKyBtYXgpID4gX1BPVzJfMzIpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGRvdWJsZSBuZXh0RG91YmxlKCkgewogICAgcmV0dXJuICgobmV4dEludCgxIDw8IDI2KSAqIF9QT1cyXzI3X0QpICsgbmV4dEludCgxIDw8IDI3KSkgLyBfUE9XMl81M19EOwogIH0KCiAgYm9vbCBuZXh0Qm9vbCgpIHsKICAgIHJldHVybiBuZXh0SW50KDIpID09IDA7CiAgfQoKICAvLyBDb25zdGFudHMgdXNlZCBieSB0aGUgYWxnb3JpdGhtLgogIHN0YXRpYyBjb25zdCBfUE9XMl8zMiA9IDEgPDwgMzI7CiAgc3RhdGljIGNvbnN0IF9QT1cyXzUzX0QgPSAxLjAgKiAoMSA8PCA1Myk7CiAgc3RhdGljIGNvbnN0IF9QT1cyXzI3X0QgPSAxLjAgKiAoMSA8PCAyNyk7CgogIC8vIFVzZSBhIHNpbmdsZXRvbiBSYW5kb20gb2JqZWN0IHRvIGdldCBhIG5ldyBzZWVkIGlmIG5vIHNlZWQgd2FzIHBhc3NlZC4KICBzdGF0aWMgZmluYWwgX3BybmcgPSBuZXcgX1JhbmRvbS5fd2l0aFN0YXRlKF9pbml0aWFsU2VlZCgpKTsKCiAgLy8gVGhpcyBpcyBhIG5hdGl2ZSB0byBwcmV2ZW50IDY0LWJpdCBvcGVyYXRpb25zIGluIERhcnQsIHdoaWNoCiAgLy8gZmFpbCB3aXRoIC0tdGhyb3dfb25famF2YXNjcmlwdF9pbnRfb3ZlcmZsb3cuCiAgLy8gVE9ETyhyZWdpcyk6IEltcGxlbWVudCBoZXJlIGluIERhcnQgYW5kIHJlbW92ZSBuYXRpdmUgaW4gbWF0aC5jYy4KICBzdGF0aWMgVWludDMyTGlzdCBfc2V0dXBTZWVkKGludCBzZWVkKSBuYXRpdmUgIlJhbmRvbV9zZXR1cFNlZWQiOwogIC8vIEdldCBhIHNlZWQgZnJvbSB0aGUgVk0ncyByYW5kb20gbnVtYmVyIHByb3ZpZGVyLgogIHN0YXRpYyBVaW50MzJMaXN0IF9pbml0aWFsU2VlZCgpIG5hdGl2ZSAiUmFuZG9tX2luaXRpYWxTZWVkIjsKCiAgc3RhdGljIGludCBfbmV4dFNlZWQoKSB7CiAgICAvLyBUcmlnZ2VyIHRoZSBQUk5HIG9uY2UgdG8gY2hhbmdlIHRoZSBpbnRlcm5hbCBzdGF0ZS4KICAgIF9wcm5nLl9uZXh0U3RhdGUoKTsKICAgIHJldHVybiBfcHJuZy5fc3RhdGVbX2tTVEFURV9MT107CiAgfQp9CgpjbGFzcyBfU2VjdXJlUmFuZG9tIGltcGxlbWVudHMgUmFuZG9tIHsKICBfU2VjdXJlUmFuZG9tKCkgewogICAgLy8gVGhyb3cgZWFybHkgaW4gY29uc3RydWN0b3IgaWYgZW50cm9weSBzb3VyY2UgaXMgbm90IGhvb2tlZCB1cC4KICAgIF9nZXRCeXRlcygxKTsKICB9CgogIC8vIFJldHVybiBjb3VudCBieXRlcyBvZiBlbnRyb3B5IGFzIGEgcG9zaXRpdmUgaW50ZWdlcjsgY291bnQgPD0gOC4KICBzdGF0aWMgaW50IF9nZXRCeXRlcyhpbnQgY291bnQpIG5hdGl2ZSAiU2VjdXJlUmFuZG9tX2dldEJ5dGVzIjsKCiAgaW50IG5leHRJbnQoaW50IG1heCkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbHVlSW5JbnRlcnZhbCgKICAgICAgICBtYXgsIDEsIF9QT1cyXzMyLCAibWF4IiwgIk11c3QgYmUgcG9zaXRpdmUgYW5kIDw9IDJeMzIiKTsKICAgIGZpbmFsIGJ5dGVDb3VudCA9ICgobWF4IC0gMSkuYml0TGVuZ3RoICsgNykgPj4gMzsKICAgIGlmIChieXRlQ291bnQgPT0gMCkgewogICAgICByZXR1cm4gMDsgLy8gTm90IHJhbmRvbSBpZiBtYXggPT0gMS4KICAgIH0KICAgIHZhciBybmQ7CiAgICB2YXIgcmVzdWx0OwogICAgZG8gewogICAgICBybmQgPSBfZ2V0Qnl0ZXMoYnl0ZUNvdW50KTsKICAgICAgcmVzdWx0ID0gcm5kICUgbWF4OwogICAgfSB3aGlsZSAoKHJuZCAtIHJlc3VsdCArIG1heCkgPiAoMSA8PCAoYnl0ZUNvdW50IDw8IDMpKSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgZG91YmxlIG5leHREb3VibGUoKSB7CiAgICByZXR1cm4gKF9nZXRCeXRlcyg3KSA+PiAzKSAvIF9QT1cyXzUzX0Q7CiAgfQoKICBib29sIG5leHRCb29sKCkgewogICAgcmV0dXJuIF9nZXRCeXRlcygxKS5pc0V2ZW47CiAgfQoKICAvLyBDb25zdGFudHMgdXNlZCBieSB0aGUgYWxnb3JpdGhtLgogIHN0YXRpYyBjb25zdCBfUE9XMl8zMiA9IDEgPDwgMzI7CiAgc3RhdGljIGNvbnN0IF9QT1cyXzUzX0QgPSAxLjAgKiAoMSA8PCA1Myk7Cn0KgTsATk48AU1PTSQBJAEqAS4BBxwhTU0SLS0BFxcVSTkXFkJHJCESCAYkNQ4EDAIBBxwhTU0SLS0BFxcVSTkXFkNFJBcSCAYWGw4EISgMAgFMMQccHzwhBDgCATUyGSYEHCQrMgEfASYXBDkXEgYXBDUCAUMBJiESGh8WBhQ6GRQGBBECAQc1G0IHNRs1BzUbNQc1GzUHNRsrBzUbKwc1GysHNRsrBxwpBxwpATcpKSkrKysrKSkBRgcPCR9RSikVFRUWBAEJHCAEAgEiNBwbHzcBIwFQNk8BER4TUTUpQjNMLwEZHj0iRAYfJhQtBgEPEAkUIhwxEwQBGE4EARQcBAEmIy0tAUw/AUIzR0Q2QAEbOxglBAIBKBRGEgQBRkIBGSVCNhorBg0QCSIaPhMEARgtBAEUIAQBJiMtAgEfZGFydDptYXRoLXBhdGNoL21hdGhfcGF0Y2guZGFydDZvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvbWF0aC9qZW5raW5zX3NtaV9oYXNoLmRhcnSFMy8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCnBhcnQgb2YgZGFydC5tYXRoOwoKLy8vIFRoaXMgaXMgdGhlIFtKZW5raW5zIGhhc2ggZnVuY3Rpb25dWzFdIGJ1dCB1c2luZyBtYXNraW5nIHRvIGtlZXAKLy8vIHZhbHVlcyBpbiBTTUkgcmFuZ2UuCi8vLwovLy8gWzFdOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0plbmtpbnNfaGFzaF9mdW5jdGlvbgovLy8KLy8vIFVzZToKLy8vIEhhc2ggZWFjaCB2YWx1ZSB3aXRoIHRoZSBoYXNoIG9mIHRoZSBwcmV2aW91cyB2YWx1ZSwgdGhlbiBnZXQgdGhlIGZpbmFsCi8vLyBoYXNoIGJ5IGNhbGxpbmcgZmluaXNoLgovLy8KLy8vICAgICB2YXIgaGFzaCA9IDA7Ci8vLyAgICAgZm9yICh2YXIgdmFsdWUgaW4gdmFsdWVzKSB7Ci8vLyAgICAgICBoYXNoID0gSmVua2luc1NtaUhhc2guY29tYmluZShoYXNoLCB2YWx1ZS5oYXNoQ29kZSk7Ci8vLyAgICAgfQovLy8gICAgIGhhc2ggPSBKZW5raW5zU21pSGFzaC5maW5pc2goaGFzaCk7CmNsYXNzIF9KZW5raW5zU21pSGFzaCB7CiAgLy8gVE9ETygxMTYxNyk6IFRoaXMgY2xhc3Mgc2hvdWxkIGJlIG9wdGltaXplZCBhbmQgc3RhbmRhcmRpemVkIGVsc2V3aGVyZS4KCiAgc3RhdGljIGludCBjb21iaW5lKGludCBoYXNoLCBpbnQgdmFsdWUpIHsKICAgIGhhc2ggPSAweDFmZmZmZmZmICYgKGhhc2ggKyB2YWx1ZSk7CiAgICBoYXNoID0gMHgxZmZmZmZmZiAmIChoYXNoICsgKCgweDAwMDdmZmZmICYgaGFzaCkgPDwgMTApKTsKICAgIHJldHVybiBoYXNoIF4gKGhhc2ggPj4gNik7CiAgfQoKICBzdGF0aWMgaW50IGZpbmlzaChpbnQgaGFzaCkgewogICAgaGFzaCA9IDB4MWZmZmZmZmYgJiAoaGFzaCArICgoMHgwM2ZmZmZmZiAmIGhhc2gpIDw8IDMpKTsKICAgIGhhc2ggPSBoYXNoIF4gKGhhc2ggPj4gMTEpOwogICAgcmV0dXJuIDB4MWZmZmZmZmYgJiAoaGFzaCArICgoMHgwMDAwM2ZmZiAmIGhhc2gpIDw8IDE1KSk7CiAgfQoKICBzdGF0aWMgaW50IGhhc2gyKGEsIGIpID0+IGZpbmlzaChjb21iaW5lKGNvbWJpbmUoMCwgYSksIGIpKTsKCiAgc3RhdGljIGludCBoYXNoNChhLCBiLCBjLCBkKSA9PgogICAgICBmaW5pc2goY29tYmluZShjb21iaW5lKGNvbWJpbmUoY29tYmluZSgwLCBhKSwgYiksIGMpLCBkKSk7Cn0KKQBOTjwTAUUZBDwECUwcBBYkPwosGE0BLCg+HwQBID0gPgQBPwEiQQIBH2RhcnQ6bWF0aC9qZW5raW5zX3NtaV9oYXNoLmRhcnQrb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL21hdGgvcG9pbnQuZGFydInyLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KcGFydCBvZiBkYXJ0Lm1hdGg7CgovLy8gQSB1dGlsaXR5IGNsYXNzIGZvciByZXByZXNlbnRpbmcgdHdvLWRpbWVuc2lvbmFsIHBvc2l0aW9ucy4KY2xhc3MgUG9pbnQ8VCBleHRlbmRzIG51bT4gewogIGZpbmFsIFQgeDsKICBmaW5hbCBUIHk7CgogIGNvbnN0IFBvaW50KFQgeCwgVCB5KQogICAgICA6IHRoaXMueCA9IHgsCiAgICAgICAgdGhpcy55ID0geTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1BvaW50KCR4LCAkeSknOwoKICAvLy8gQSBgUG9pbnRgIGlzIG9ubHkgZXF1YWwgdG8gYW5vdGhlciBgUG9pbnRgIHdpdGggdGhlIHNhbWUgY29vcmRpbmF0ZXMuCiAgLy8vCiAgLy8vIFRoaXMgcG9pbnQgaXMgZXF1YWwgdG8gYG90aGVyYCBpZiwgYW5kIG9ubHkgaWYsCiAgLy8vIGBvdGhlcmAgaXMgYSBgUG9pbnRgIHdpdGgKICAvLy8gW3hdIGVxdWFsIHRvIGBvdGhlci54YCBhbmQgW3ldIGVxdWFsIHRvIGBvdGhlci55YC4KICBib29sIG9wZXJhdG9yID09KGR5bmFtaWMgb3RoZXIpID0+CiAgICAgIC8vIENhbm5vdCBjaGFuZ2UgcGFyYW1ldGVyIHR5cGUgdG8gYE9iamVjdGAgaW4gY2FzZSBzb21lIGNsYXNzCiAgICAgIC8vIGluaGVyaXRzIHRoZSB0eXBlIGFuZCB1c2VzIHRoZWlyIGFyZ3VtZW50IGR5bmFtaWNhbGx5LgogICAgICBvdGhlciBpcyBQb2ludCAmJiB4ID09IG90aGVyLnggJiYgeSA9PSBvdGhlci55OwoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IF9KZW5raW5zU21pSGFzaC5oYXNoMih4Lmhhc2hDb2RlLCB5Lmhhc2hDb2RlKTsKCiAgLy8vIEFkZCBbb3RoZXJdIHRvIGB0aGlzYCwgYXMgaWYgYm90aCBwb2ludHMgd2VyZSB2ZWN0b3JzLgogIC8vLwogIC8vLyBSZXR1cm5zIHRoZSByZXN1bHRpbmcgInZlY3RvciIgYXMgYSBQb2ludC4KICBQb2ludDxUPiBvcGVyYXRvciArKFBvaW50PFQ+IG90aGVyKSB7CiAgICByZXR1cm4gUG9pbnQ8VD4oeCArIG90aGVyLngsIHkgKyBvdGhlci55KTsKICB9CgogIC8vLyBTdWJ0cmFjdCBbb3RoZXJdIGZyb20gYHRoaXNgLCBhcyBpZiBib3RoIHBvaW50cyB3ZXJlIHZlY3RvcnMuCiAgLy8vCiAgLy8vIFJldHVybnMgdGhlIHJlc3VsdGluZyAidmVjdG9yIiBhcyBhIFBvaW50LgogIFBvaW50PFQ+IG9wZXJhdG9yIC0oUG9pbnQ8VD4gb3RoZXIpIHsKICAgIHJldHVybiBQb2ludDxUPih4IC0gb3RoZXIueCwgeSAtIG90aGVyLnkpOwogIH0KCiAgLy8vIFNjYWxlIHRoaXMgcG9pbnQgYnkgW2ZhY3Rvcl0gYXMgaWYgaXQgd2VyZSBhIHZlY3Rvci4KICAvLy8KICAvLy8gKkltcG9ydGFudCogKk5vdGUqOiBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgYSBgbnVtYCBhcyBpdHMgYXJndW1lbnQgb25seSBzbwogIC8vLyB0aGF0IHlvdSBjYW4gc2NhbGUgUG9pbnQ8ZG91YmxlPiBvYmplY3RzIGJ5IGFuIGBpbnRgIGZhY3Rvci4gQmVjYXVzZSB0aGUKICAvLy8gc3RhciBvcGVyYXRvciBhbHdheXMgcmV0dXJucyB0aGUgc2FtZSB0eXBlIG9mIFBvaW50IHRoYXQgb3JpZ2luYWxseSBjYWxsZWQKICAvLy8gaXQsIHBhc3NpbmcgaW4gYSBkb3VibGUgW2ZhY3Rvcl0gb24gYSBgUG9pbnQ8aW50PmAgX2NhdXNlc18gX2FfCiAgLy8vIF9ydW50aW1lXyBfZXJyb3JfIGluIGNoZWNrZWQgbW9kZS4KICBQb2ludDxUPiBvcGVyYXRvciAqKG51bSAvKlR8aW50Ki8gZmFjdG9yKSB7CiAgICByZXR1cm4gUG9pbnQ8VD4oKHggKiBmYWN0b3IpLCAoeSAqIGZhY3RvcikpOwogIH0KCiAgLy8vIEdldCB0aGUgc3RyYWlnaHQgbGluZSAoRXVjbGlkZWFuKSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBvcmlnaW4gKDAsIDApIGFuZAogIC8vLyB0aGlzIHBvaW50LgogIGRvdWJsZSBnZXQgbWFnbml0dWRlID0+IHNxcnQoeCAqIHggKyB5ICogeSk7CgogIC8vLyBSZXR1cm5zIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIGB0aGlzYCBhbmQgW290aGVyXS4KICBkb3VibGUgZGlzdGFuY2VUbyhQb2ludDxUPiBvdGhlcikgewogICAgdmFyIGR4ID0geCAtIG90aGVyLng7CiAgICB2YXIgZHkgPSB5IC0gb3RoZXIueTsKICAgIHJldHVybiBzcXJ0KGR4ICogZHggKyBkeSAqIGR5KTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gYHRoaXNgIGFuZCBbb3RoZXJdLgogIC8vLwogIC8vLyBTcXVhcmVkIGRpc3RhbmNlcyBjYW4gYmUgdXNlZCBmb3IgY29tcGFyaXNvbnMgd2hlbiB0aGUgYWN0dWFsIHZhbHVlIGlzIG5vdAogIC8vLyByZXF1aXJlZC4KICBUIHNxdWFyZWREaXN0YW5jZVRvKFBvaW50PFQ+IG90aGVyKSB7CiAgICB2YXIgZHggPSB4IC0gb3RoZXIueDsKICAgIHZhciBkeSA9IHkgLSBvdGhlci55OwogICAgcmV0dXJuIGR4ICogZHggKyBkeSAqIGR5OwogIH0KfQpMAE5OPBMBQB0NDQEYFBQBKAFMBjYgOSVFQDYBRQE9BjEoLwQBRAYxKC8EATsGUE9RRikuMQQBTxIvATcmGhokBAE/BlEQKBoaHgQCARRkYXJ0Om1hdGgvcG9pbnQuZGFydCxvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvbWF0aC9yYW5kb20uZGFydIX8Ly8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5tYXRoOwoKLy8vIEEgZ2VuZXJhdG9yIG9mIHJhbmRvbSBib29sLCBpbnQsIG9yIGRvdWJsZSB2YWx1ZXMuCi8vLwovLy8gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc3VwcGxpZXMgYSBzdHJlYW0gb2YgcHNldWRvLXJhbmRvbSBiaXRzIHRoYXQgYXJlCi8vLyBub3Qgc3VpdGFibGUgZm9yIGNyeXB0b2dyYXBoaWMgcHVycG9zZXMuCi8vLwovLy8gVXNlIHRoZSBbUmFuZG9tLnNlY3VyZV0oKSBjb25zdHJ1Y3RvciBmb3IgY3J5cHRvZ3JhcGhpYyBwdXJwb3Nlcy4KYWJzdHJhY3QgY2xhc3MgUmFuZG9tIHsKICAvLy8gQ3JlYXRlcyBhIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgogIC8vLwogIC8vLyBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIFtzZWVkXSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlCiAgLy8vIGludGVybmFsIHN0YXRlIG9mIHRoZSBnZW5lcmF0b3IuIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKICAvLy8gcmFuZG9tIHN0cmVhbSBjYW4gY2hhbmdlIGJldHdlZW4gcmVsZWFzZXMgb2YgdGhlIGxpYnJhcnkuCiAgZXh0ZXJuYWwgZmFjdG9yeSBSYW5kb20oW2ludCBzZWVkXSk7CgogIC8vLyBDcmVhdGVzIGEgY3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgogIC8vLwogIC8vLyBJZiB0aGUgcHJvZ3JhbSBjYW5ub3QgcHJvdmlkZSBhIGNyeXB0b2dyYXBoaWNhbGx5IHNlY3VyZQogIC8vLyBzb3VyY2Ugb2YgcmFuZG9tIG51bWJlcnMsIGl0IHRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0uCiAgZXh0ZXJuYWwgZmFjdG9yeSBSYW5kb20uc2VjdXJlKCk7CgogIC8vLyBHZW5lcmF0ZXMgYSBub24tbmVnYXRpdmUgcmFuZG9tIGludGVnZXIgdW5pZm9ybWx5IGRpc3RyaWJ1dGVkIGluIHRoZSByYW5nZQogIC8vLyBmcm9tIDAsIGluY2x1c2l2ZSwgdG8gW21heF0sIGV4Y2x1c2l2ZS4KICAvLy8KICAvLy8gSW1wbGVtZW50YXRpb24gbm90ZTogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgW21heF0gdmFsdWVzCiAgLy8vIGJldHdlZW4gMSBhbmQgKDE8PDMyKSBpbmNsdXNpdmUuCiAgaW50IG5leHRJbnQoaW50IG1heCk7CgogIC8vLyBHZW5lcmF0ZXMgYSBub24tbmVnYXRpdmUgcmFuZG9tIGZsb2F0aW5nIHBvaW50IHZhbHVlIHVuaWZvcm1seSBkaXN0cmlidXRlZAogIC8vLyBpbiB0aGUgcmFuZ2UgZnJvbSAwLjAsIGluY2x1c2l2ZSwgdG8gMS4wLCBleGNsdXNpdmUuCiAgZG91YmxlIG5leHREb3VibGUoKTsKCiAgLy8vIEdlbmVyYXRlcyBhIHJhbmRvbSBib29sZWFuIHZhbHVlLgogIGJvb2wgbmV4dEJvb2woKTsKfQoqAE5OPAETATcEUC0ERhgpBj5BQCcBQgY/QSQBUS4GTCcYAVE7FwEoEwIBFWRhcnQ6bWF0aC9yYW5kb20uZGFydC9vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvbWF0aC9yZWN0YW5nbGUuZGFydKFcLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KcGFydCBvZiBkYXJ0Lm1hdGg7CgovLy8gQSBiYXNlIGNsYXNzIGZvciByZXByZXNlbnRpbmcgdHdvLWRpbWVuc2lvbmFsIGF4aXMtYWxpZ25lZCByZWN0YW5nbGVzLgovLy8KLy8vIFRoaXMgcmVjdGFuZ2xlIHVzZXMgYSBsZWZ0LWhhbmRlZCBDYXJ0ZXNpYW4gY29vcmRpbmF0ZSBzeXN0ZW0sIHdpdGggeAovLy8gZGlyZWN0ZWQgdG8gdGhlIHJpZ2h0IGFuZCB5IGRpcmVjdGVkIGRvd24sIGFzIHBlciB0aGUgY29udmVudGlvbiBpbiAyRAovLy8gY29tcHV0ZXIgZ3JhcGhpY3MuCi8vLwovLy8gU2VlIGFsc286Ci8vLyAgICBbVzNDIENvb3JkaW5hdGUgU3lzdGVtcyBTcGVjaWZpY2F0aW9uXShodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjSW5pdGlhbENvb3JkaW5hdGVTeXN0ZW0pLgovLy8KLy8vIFRoZSByZWN0YW5nbGUgaXMgdGhlIHNldCBvZiBwb2ludHMgd2l0aCByZXByZXNlbnRhYmxlIGNvb3JkaW5hdGVzIGdyZWF0ZXIKLy8vIHRoYW4gb3IgZXF1YWwgdG8gbGVmdC90b3AsIGFuZCB3aXRoIGRpc3RhbmNlIHRvIGxlZnQvdG9wIG5vIGdyZWF0ZXIgdGhhbgovLy8gd2lkdGgvaGVpZ2h0ICh0byB0aGUgbGltaXQgb2YgdGhlIHByZWNpc2lvbiBvZiB0aGUgY29vcmRpbmF0ZXMpLgphYnN0cmFjdCBjbGFzcyBfUmVjdGFuZ2xlQmFzZTxUIGV4dGVuZHMgbnVtPiB7CiAgY29uc3QgX1JlY3RhbmdsZUJhc2UoKTsKCiAgLy8vIFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGxlZnQgZWRnZS4KICBUIGdldCBsZWZ0OwoKICAvLy8gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgdG9wIGVkZ2UuCiAgVCBnZXQgdG9wOwoKICAvLy8gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGUuCiAgVCBnZXQgd2lkdGg7CgogIC8vLyBUaGUgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUuCiAgVCBnZXQgaGVpZ2h0OwoKICAvLy8gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgcmlnaHQgZWRnZS4KICBUIGdldCByaWdodCA9PiBsZWZ0ICsgd2lkdGg7CgogIC8vLyBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBib3R0b20gZWRnZS4KICBUIGdldCBib3R0b20gPT4gdG9wICsgaGVpZ2h0OwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ1JlY3RhbmdsZSAoJGxlZnQsICR0b3ApICR3aWR0aCB4ICRoZWlnaHQnOwogIH0KCiAgYm9vbCBvcGVyYXRvciA9PShkeW5hbWljIG90aGVyKSA9PgogICAgICAvLyBDYW4ndCBjaGFuZ2UgYXJndW1lbnQgdHlwZSB0byBgT2JqZWN0YCBzaW5jZSBzdWJjbGFzc2VzIGluaGVyaXQgaXQKICAgICAgLy8gYW5kIHVzZXMgdGhlaXIgYXJndW1lbnQgZHluYW1pY2FsbHkuCiAgICAgIG90aGVyIGlzIFJlY3RhbmdsZSAmJgogICAgICBsZWZ0ID09IG90aGVyLmxlZnQgJiYKICAgICAgdG9wID09IG90aGVyLnRvcCAmJgogICAgICByaWdodCA9PSBvdGhlci5yaWdodCAmJgogICAgICBib3R0b20gPT0gb3RoZXIuYm90dG9tOwoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IF9KZW5raW5zU21pSGFzaC5oYXNoNCgKICAgICAgbGVmdC5oYXNoQ29kZSwgdG9wLmhhc2hDb2RlLCByaWdodC5oYXNoQ29kZSwgYm90dG9tLmhhc2hDb2RlKTsKCiAgLy8vIENvbXB1dGVzIHRoZSBpbnRlcnNlY3Rpb24gb2YgYHRoaXNgIGFuZCBbb3RoZXJdLgogIC8vLwogIC8vLyBUaGUgaW50ZXJzZWN0aW9uIG9mIHR3byBheGlzLWFsaWduZWQgcmVjdGFuZ2xlcywgaWYgYW55LCBpcyBhbHdheXMgYW5vdGhlcgogIC8vLyBheGlzLWFsaWduZWQgcmVjdGFuZ2xlLgogIC8vLwogIC8vLyBSZXR1cm5zIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhpcyBhbmQgYG90aGVyYCwgb3IgYG51bGxgIGlmIHRoZXkgZG9uJ3QKICAvLy8gaW50ZXJzZWN0LgogIFJlY3RhbmdsZTxUPiBpbnRlcnNlY3Rpb24oUmVjdGFuZ2xlPFQ+IG90aGVyKSB7CiAgICB2YXIgeDAgPSBtYXgobGVmdCwgb3RoZXIubGVmdCk7CiAgICB2YXIgeDEgPSBtaW4obGVmdCArIHdpZHRoLCBvdGhlci5sZWZ0ICsgb3RoZXIud2lkdGgpOwoKICAgIGlmICh4MCA8PSB4MSkgewogICAgICB2YXIgeTAgPSBtYXgodG9wLCBvdGhlci50b3ApOwogICAgICB2YXIgeTEgPSBtaW4odG9wICsgaGVpZ2h0LCBvdGhlci50b3AgKyBvdGhlci5oZWlnaHQpOwoKICAgICAgaWYgKHkwIDw9IHkxKSB7CiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZTxUPih4MCwgeTAsIHgxIC0geDAsIHkxIC0geTApOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgYHRoaXNgIGludGVyc2VjdHMgW290aGVyXS4KICBib29sIGludGVyc2VjdHMoUmVjdGFuZ2xlPG51bT4gb3RoZXIpIHsKICAgIHJldHVybiAobGVmdCA8PSBvdGhlci5sZWZ0ICsgb3RoZXIud2lkdGggJiYKICAgICAgICBvdGhlci5sZWZ0IDw9IGxlZnQgKyB3aWR0aCAmJgogICAgICAgIHRvcCA8PSBvdGhlci50b3AgKyBvdGhlci5oZWlnaHQgJiYKICAgICAgICBvdGhlci50b3AgPD0gdG9wICsgaGVpZ2h0KTsKICB9CgogIC8vLyBSZXR1cm5zIGEgbmV3IHJlY3RhbmdsZSB3aGljaCBjb21wbGV0ZWx5IGNvbnRhaW5zIGB0aGlzYCBhbmQgW290aGVyXS4KICBSZWN0YW5nbGU8VD4gYm91bmRpbmdCb3goUmVjdGFuZ2xlPFQ+IG90aGVyKSB7CiAgICB2YXIgcmlnaHQgPSBtYXgodGhpcy5sZWZ0ICsgdGhpcy53aWR0aCwgb3RoZXIubGVmdCArIG90aGVyLndpZHRoKTsKICAgIHZhciBib3R0b20gPSBtYXgodGhpcy50b3AgKyB0aGlzLmhlaWdodCwgb3RoZXIudG9wICsgb3RoZXIuaGVpZ2h0KTsKCiAgICB2YXIgbGVmdCA9IG1pbih0aGlzLmxlZnQsIG90aGVyLmxlZnQpOwogICAgdmFyIHRvcCA9IG1pbih0aGlzLnRvcCwgb3RoZXIudG9wKTsKCiAgICByZXR1cm4gUmVjdGFuZ2xlPFQ+KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApOwogIH0KCiAgLy8vIFRlc3RzIHdoZXRoZXIgYHRoaXNgIGVudGlyZWx5IGNvbnRhaW5zIFthbm90aGVyXS4KICBib29sIGNvbnRhaW5zUmVjdGFuZ2xlKFJlY3RhbmdsZTxudW0+IGFub3RoZXIpIHsKICAgIHJldHVybiBsZWZ0IDw9IGFub3RoZXIubGVmdCAmJgogICAgICAgIGxlZnQgKyB3aWR0aCA+PSBhbm90aGVyLmxlZnQgKyBhbm90aGVyLndpZHRoICYmCiAgICAgICAgdG9wIDw9IGFub3RoZXIudG9wICYmCiAgICAgICAgdG9wICsgaGVpZ2h0ID49IGFub3RoZXIudG9wICsgYW5vdGhlci5oZWlnaHQ7CiAgfQoKICAvLy8gVGVzdHMgd2hldGhlciBbYW5vdGhlcl0gaXMgaW5zaWRlIG9yIGFsb25nIHRoZSBlZGdlcyBvZiBgdGhpc2AuCiAgYm9vbCBjb250YWluc1BvaW50KFBvaW50PG51bT4gYW5vdGhlcikgewogICAgcmV0dXJuIGFub3RoZXIueCA+PSBsZWZ0ICYmCiAgICAgICAgYW5vdGhlci54IDw9IGxlZnQgKyB3aWR0aCAmJgogICAgICAgIGFub3RoZXIueSA+PSB0b3AgJiYKICAgICAgICBhbm90aGVyLnkgPD0gdG9wICsgaGVpZ2h0OwogIH0KCiAgUG9pbnQ8VD4gZ2V0IHRvcExlZnQgPT4gUG9pbnQ8VD4odGhpcy5sZWZ0LCB0aGlzLnRvcCk7CiAgUG9pbnQ8VD4gZ2V0IHRvcFJpZ2h0ID0+IFBvaW50PFQ+KHRoaXMubGVmdCArIHRoaXMud2lkdGgsIHRoaXMudG9wKTsKICBQb2ludDxUPiBnZXQgYm90dG9tUmlnaHQgPT4KICAgICAgUG9pbnQ8VD4odGhpcy5sZWZ0ICsgdGhpcy53aWR0aCwgdGhpcy50b3AgKyB0aGlzLmhlaWdodCk7CiAgUG9pbnQ8VD4gZ2V0IGJvdHRvbUxlZnQgPT4gUG9pbnQ8VD4odGhpcy5sZWZ0LCB0aGlzLnRvcCArIHRoaXMuaGVpZ2h0KTsKfQoKLy8vIEEgY2xhc3MgZm9yIHJlcHJlc2VudGluZyB0d28tZGltZW5zaW9uYWwgcmVjdGFuZ2xlcyB3aG9zZSBwcm9wZXJ0aWVzIGFyZQovLy8gaW1tdXRhYmxlLgpjbGFzcyBSZWN0YW5nbGU8VCBleHRlbmRzIG51bT4gZXh0ZW5kcyBfUmVjdGFuZ2xlQmFzZTxUPiB7CiAgZmluYWwgVCBsZWZ0OwogIGZpbmFsIFQgdG9wOwogIGZpbmFsIFQgd2lkdGg7CiAgZmluYWwgVCBoZWlnaHQ7CgogIC8vLyBDcmVhdGUgYSByZWN0YW5nbGUgc3Bhbm5lZCBieSBgKGxlZnQsIHRvcClgIGFuZAogIC8vLyBgKGxlZnQrd2lkdGgsIHRvcCtoZWlnaHQpYC4KICAvLy8KICAvLy8gVGhlIHJlY3RhbmdsZSBjb250YWlucyB0aGUgcG9pbnRzCiAgLy8vIHdpdGggeC1jb29yZGluYXRlIGJldHdlZW4gYGxlZnRgIGFuZCBgbGVmdCArIHdpZHRoYCwgYW5kCiAgLy8vIHdpdGggeS1jb29yZGluYXRlIGJldHdlZW4gYHRvcGAgYW5kIGB0b3AgKyBoZWlnaHRgLCBib3RoIGluY2x1c2l2ZS4KICAvLy8KICAvLy8gVGhlIGB3aWR0aGAgYW5kIGBoZWlnaHRgIHNob3VsZCBiZSBub24tbmVnYXRpdmUuCiAgLy8vIElmIGB3aWR0aGAgb3IgYGhlaWdodGAgYXJlIG5lZ2F0aXZlLCB0aGV5IGFyZSBjbGFtcGVkIHRvIHplcm8uCiAgLy8vCiAgLy8vIElmIGB3aWR0aGAgYW5kIGBoZWlnaHRgIGFyZSB6ZXJvLCB0aGUgInJlY3RhbmdsZSIgY29tcHJpc2VzIG9ubHkgdGhlCiAgLy8vIHNpbmdsZSBwb2ludCBgKGxlZnQsIHRvcClgLgogIGNvbnN0IFJlY3RhbmdsZSh0aGlzLmxlZnQsIHRoaXMudG9wLCBUIHdpZHRoLCBUIGhlaWdodCkKICAgICAgOiB0aGlzLndpZHRoID0gKHdpZHRoIDwgMCkgPyAtd2lkdGggKiAwIDogd2lkdGgsIC8vIElubGluZSBfY2xhbXBUb1plcm8uCiAgICAgICAgdGhpcy5oZWlnaHQgPSAoaGVpZ2h0IDwgMCkgPyAtaGVpZ2h0ICogMCA6IGhlaWdodDsKCiAgLy8vIENyZWF0ZSBhIHJlY3RhbmdsZSBzcGFubmVkIGJ5IHRoZSBwb2ludHMgW2FdIGFuZCBbYl07CiAgLy8vCiAgLy8vIFRoZSByZWN0YW5nbGUgY29udGFpbnMgdGhlIHBvaW50cwogIC8vLyB3aXRoIHgtY29vcmRpbmF0ZSBiZXR3ZWVuIGBhLnhgIGFuZCBgYi54YCwgYW5kCiAgLy8vIHdpdGggeS1jb29yZGluYXRlIGJldHdlZW4gYGEueWAgYW5kIGBiLnlgLCBib3RoIGluY2x1c2l2ZS4KICAvLy8KICAvLy8gSWYgdGhlIGRpc3RhbmNlIGJldHdlZW4gYGEueGAgYW5kIGBiLnhgIGlzIG5vdCByZXByZXNlbnRhYmxlCiAgLy8vICh3aGljaCBjYW4gaGFwcGVuIGlmIG9uZSBvciBib3RoIGlzIGEgZG91YmxlKSwKICAvLy8gdGhlIGFjdHVhbCByaWdodCBlZGdlIG1pZ2h0IGJlIHNsaWdodGx5IG9mZiBmcm9tIGBtYXgoYS54LCBiLngpYC4KICAvLy8gU2ltaWxhciBmb3IgdGhlIHktY29vcmRpbmF0ZXMgYW5kIHRoZSBib3R0b20gZWRnZS4KICBmYWN0b3J5IFJlY3RhbmdsZS5mcm9tUG9pbnRzKFBvaW50PFQ+IGEsIFBvaW50PFQ+IGIpIHsKICAgIFQgbGVmdCA9IG1pbihhLngsIGIueCk7CiAgICBUIHdpZHRoID0gbWF4KGEueCwgYi54KSAtIGxlZnQ7CiAgICBUIHRvcCA9IG1pbihhLnksIGIueSk7CiAgICBUIGhlaWdodCA9IG1heChhLnksIGIueSkgLSB0b3A7CiAgICByZXR1cm4gUmVjdGFuZ2xlPFQ+KGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCk7CiAgfQp9CgovLy8gQSBjbGFzcyBmb3IgcmVwcmVzZW50aW5nIHR3by1kaW1lbnNpb25hbCBheGlzLWFsaWduZWQgcmVjdGFuZ2xlcyB3aXRoCi8vLyBtdXRhYmxlIHByb3BlcnRpZXMuCmNsYXNzIE11dGFibGVSZWN0YW5nbGU8VCBleHRlbmRzIG51bT4gZXh0ZW5kcyBfUmVjdGFuZ2xlQmFzZTxUPgogICAgaW1wbGVtZW50cyBSZWN0YW5nbGU8VD4gewogIC8vLyBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBsZWZ0IGVkZ2UuCiAgLy8vCiAgLy8vIFNldHRpbmcgdGhlIHZhbHVlIHdpbGwgbW92ZSB0aGUgcmVjdGFuZ2xlIHdpdGhvdXQgY2hhbmdpbmcgaXRzIHdpZHRoLgogIFQgbGVmdDsKCiAgLy8vIFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGxlZnQgZWRnZS4KICAvLy8KICAvLy8gU2V0dGluZyB0aGUgdmFsdWUgd2lsbCBtb3ZlIHRoZSByZWN0YW5nbGUgd2l0aG91dCBjaGFuZ2luZyBpdHMgaGVpZ2h0LgogIFQgdG9wOwogIFQgX3dpZHRoOwogIFQgX2hlaWdodDsKCiAgLy8vIENyZWF0ZSBhIG11dGFibGUgcmVjdGFuZ2xlIHNwYW5uZWQgYnkgYChsZWZ0LCB0b3ApYCBhbmQKICAvLy8gYChsZWZ0K3dpZHRoLCB0b3AraGVpZ2h0KWAuCiAgLy8vCiAgLy8vIFRoZSByZWN0YW5nbGUgY29udGFpbnMgdGhlIHBvaW50cwogIC8vLyB3aXRoIHgtY29vcmRpbmF0ZSBiZXR3ZWVuIGBsZWZ0YCBhbmQgYGxlZnQgKyB3aWR0aGAsIGFuZAogIC8vLyB3aXRoIHktY29vcmRpbmF0ZSBiZXR3ZWVuIGB0b3BgIGFuZCBgdG9wICsgaGVpZ2h0YCwgYm90aCBpbmNsdXNpdmUuCiAgLy8vCiAgLy8vIFRoZSBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBzaG91bGQgYmUgbm9uLW5lZ2F0aXZlLgogIC8vLyBJZiBgd2lkdGhgIG9yIGBoZWlnaHRgIGFyZSBuZWdhdGl2ZSwgdGhleSBhcmUgY2xhbXBlZCB0byB6ZXJvLgogIC8vLwogIC8vLyBJZiBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBhcmUgemVybywgdGhlICJyZWN0YW5nbGUiIGNvbXByaXNlcyBvbmx5IHRoZQogIC8vLyBzaW5nbGUgcG9pbnQgYChsZWZ0LCB0b3ApYC4KICBNdXRhYmxlUmVjdGFuZ2xlKHRoaXMubGVmdCwgdGhpcy50b3AsIFQgd2lkdGgsIFQgaGVpZ2h0KQogICAgICA6IHRoaXMuX3dpZHRoID0gKHdpZHRoIDwgMCkgPyBfY2xhbXBUb1plcm88VD4od2lkdGgpIDogd2lkdGgsCiAgICAgICAgdGhpcy5faGVpZ2h0ID0gKGhlaWdodCA8IDApID8gX2NsYW1wVG9aZXJvPFQ+KGhlaWdodCkgOiBoZWlnaHQ7CgogIC8vLyBDcmVhdGUgYSBtdXRhYmxlIHJlY3RhbmdsZSBzcGFubmVkIGJ5IHRoZSBwb2ludHMgW2FdIGFuZCBbYl07CiAgLy8vCiAgLy8vIFRoZSByZWN0YW5nbGUgY29udGFpbnMgdGhlIHBvaW50cwogIC8vLyB3aXRoIHgtY29vcmRpbmF0ZSBiZXR3ZWVuIGBhLnhgIGFuZCBgYi54YCwgYW5kCiAgLy8vIHdpdGggeS1jb29yZGluYXRlIGJldHdlZW4gYGEueWAgYW5kIGBiLnlgLCBib3RoIGluY2x1c2l2ZS4KICAvLy8KICAvLy8gSWYgdGhlIGRpc3RhbmNlIGJldHdlZW4gYGEueGAgYW5kIGBiLnhgIGlzIG5vdCByZXByZXNlbnRhYmxlCiAgLy8vICh3aGljaCBjYW4gaGFwcGVuIGlmIG9uZSBvciBib3RoIGlzIGEgZG91YmxlKSwKICAvLy8gdGhlIGFjdHVhbCByaWdodCBlZGdlIG1pZ2h0IGJlIHNsaWdodGx5IG9mZiBmcm9tIGBtYXgoYS54LCBiLngpYC4KICAvLy8gU2ltaWxhciBmb3IgdGhlIHktY29vcmRpbmF0ZXMgYW5kIHRoZSBib3R0b20gZWRnZS4KICBmYWN0b3J5IE11dGFibGVSZWN0YW5nbGUuZnJvbVBvaW50cyhQb2ludDxUPiBhLCBQb2ludDxUPiBiKSB7CiAgICBUIGxlZnQgPSBtaW4oYS54LCBiLngpOwogICAgVCB3aWR0aCA9IG1heChhLngsIGIueCkgLSBsZWZ0OwogICAgVCB0b3AgPSBtaW4oYS55LCBiLnkpOwogICAgVCBoZWlnaHQgPSBtYXgoYS55LCBiLnkpIC0gdG9wOwogICAgcmV0dXJuIE11dGFibGVSZWN0YW5nbGU8VD4obGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTsKICB9CgogIFQgZ2V0IHdpZHRoID0+IF93aWR0aDsKCiAgLy8vIFNldHMgdGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGUuCiAgLy8vCiAgLy8vIFRoZSB3aWR0aCBtdXN0IGJlIG5vbi1uZWdhdGl2ZS4KICAvLy8gSWYgYSBuZWdhdGl2ZSB3aWR0aCBpcyBzdXBwbGllZCwgaXQgaXMgY2xhbXBlZCB0byB6ZXJvLgogIC8vLwogIC8vLyBTZXR0aW5nIHRoZSB2YWx1ZSB3aWxsIGNoYW5nZSB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgcmVjdGFuZ2xlLAogIC8vLyBidXQgd2lsbCBub3QgY2hhbmdlIFtsZWZ0XS4KICBzZXQgd2lkdGgoVCB3aWR0aCkgewogICAgaWYgKHdpZHRoIDwgMCkgd2lkdGggPSBfY2xhbXBUb1plcm88VD4od2lkdGgpOwogICAgX3dpZHRoID0gd2lkdGg7CiAgfQoKICBUIGdldCBoZWlnaHQgPT4gX2hlaWdodDsKCiAgLy8vIFNldHMgdGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlLgogIC8vLwogIC8vLyBUaGUgaGVpZ2h0IG11c3QgYmUgbm9uLW5lZ2F0aXZlLgogIC8vLyBJZiBhIG5lZ2F0aXZlIGhlaWdodCBpcyBzdXBwbGllZCwgaXQgaXMgY2xhbXBlZCB0byB6ZXJvLgogIC8vLwogIC8vLyBTZXR0aW5nIHRoZSB2YWx1ZSB3aWxsIGNoYW5nZSB0aGUgYm90dG9tIGVkZ2Ugb2YgdGhlIHJlY3RhbmdsZSwKICAvLy8gYnV0IHdpbGwgbm90IGNoYW5nZSBbdG9wXS4KICBzZXQgaGVpZ2h0KFQgaGVpZ2h0KSB7CiAgICBpZiAoaGVpZ2h0IDwgMCkgaGVpZ2h0ID0gX2NsYW1wVG9aZXJvPFQ+KGhlaWdodCk7CiAgICBfaGVpZ2h0ID0gaGVpZ2h0OwogIH0KfQoKLy8vIENvbnZlcnRzIGEgbmVnYXRpdmUgW2ludF0gb3IgW2RvdWJsZV0gdG8gYSB6ZXJvLXZhbHVlIG9mIHRoZSBzYW1lIHR5cGUuCi8vLwovLy8gUmV0dXJucyBgMGAgaWYgdmFsdWUgaXMgaW50LCBgMC4wYCBpZiB2YWx1ZSBpcyBkb3VibGUuClQgX2NsYW1wVG9aZXJvPFQgZXh0ZW5kcyBudW0+KFQgdmFsdWUpIHsKICBhc3NlcnQodmFsdWUgPCAwKTsKICByZXR1cm4gLXZhbHVlICogMDsKfQqA+QBOTjwTAUsESksXBA5tBE5NRS8aASkOASgNASIPASMQASofASsgARY3BAElTC4cHBoeHgEtRQE3BlEeBkwRMiQ6ARQkPAEWNwgGEQQBMSowJiskBAFMMUdIASsoAUAEATgzIzgeNgQBRisgJRwjBAE5Rx5ASgIBTQ87EA8REgE2IgYoP0oGN0UGSyI6TzsBPAYoNUEGQzVIOTkcJBskMwQCAUoYQB4pBkwKASkGTQkMDQE+IgYoP0oGN0UGSyI7REgBRAYoNUEGQzVIOUAcJBskOgQBGQEnBiY+BkUiFzMUBAEbASgGJz8GRiEZNhYEAgFMBDspFRUCARhkYXJ0Om1hdGgvcmVjdGFuZ2xlLmRhcnQwb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL21pcnJvcnMvbWlycm9ycy5kYXJ0wADCly8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoZSBtaXJyb3JzIGxpYnJhcnksIHdlIGFkb3B0IGEgbmFtaW5nCi8vIGNvbnZlbnRpb24gd2l0aCByZXNwZWN0IHRvIGdldHRlcnMgYW5kIHNldHRlcnMuICBTcGVjaWZpY2FsbHksIGZvcgovLyBzb21lIHZhcmlhYmxlIG9yIGZpZWxkLi4uCi8vCi8vICAgdmFyIG15RmllbGQ7Ci8vCi8vIC4uLnRoZSBnZXR0ZXIgaXMgbmFtZWQgJ215RmllbGQnIGFuZCB0aGUgc2V0dGVyIGlzIG5hbWVkCi8vICdteUZpZWxkPScuICBUaGlzIGFsbG93cyB1cyB0byBhc3NpZ24gdW5pcXVlIG5hbWVzIHRvIGdldHRlcnMgYW5kCi8vIHNldHRlcnMgZm9yIHRoZSBwdXJwb3NlcyBvZiBtZW1iZXIgbG9va3VwLgoKLyoqCiAqIEJhc2ljIHJlZmxlY3Rpb24gaW4gRGFydCwKICogd2l0aCBzdXBwb3J0IGZvciBpbnRyb3NwZWN0aW9uIGFuZCBkeW5hbWljIGludm9jYXRpb24uCiAqCiAqICpJbnRyb3NwZWN0aW9uKiBpcyB0aGF0IHN1YnNldCBvZiByZWZsZWN0aW9uIGJ5IHdoaWNoIGEgcnVubmluZwogKiBwcm9ncmFtIGNhbiBleGFtaW5lIGl0cyBvd24gc3RydWN0dXJlLiBGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbgogKiB0aGF0IHByaW50cyBvdXQgdGhlIG5hbWVzIG9mIGFsbCB0aGUgbWVtYmVycyBvZiBhbiBhcmJpdHJhcnkgb2JqZWN0LgogKgogKiAqRHluYW1pYyBpbnZvY2F0aW9uKiByZWZlcnMgdGhlIGFiaWxpdHkgdG8gZXZhbHVhdGUgY29kZSB0aGF0CiAqIGhhcyBub3QgYmVlbiBsaXRlcmFsbHkgc3BlY2lmaWVkIGF0IGNvbXBpbGUgdGltZSwgc3VjaCBhcyBjYWxsaW5nIGEgbWV0aG9kCiAqIHdob3NlIG5hbWUgaXMgcHJvdmlkZWQgYXMgYW4gYXJndW1lbnQgKGJlY2F1c2UgaXQgaXMgbG9va2VkIHVwCiAqIGluIGEgZGF0YWJhc2UsIG9yIHByb3ZpZGVkIGludGVyYWN0aXZlbHkgYnkgdGhlIHVzZXIpLgogKgogKiAjIyBIb3cgdG8gaW50ZXJwcmV0IHRoaXMgbGlicmFyeSdzIGRvY3VtZW50YXRpb24KICoKICogQXMgYSBydWxlLCB0aGUgbmFtZXMgb2YgRGFydCBkZWNsYXJhdGlvbnMgYXJlIHJlcHJlc2VudGVkIHVzaW5nCiAqIGluc3RhbmNlcyBvZiBjbGFzcyBbU3ltYm9sXS4gV2hlbmV2ZXIgdGhlIGRvYyBzcGVha3Mgb2YgYW4gb2JqZWN0ICpzKgogKiBvZiBjbGFzcyBbU3ltYm9sXSBkZW5vdGluZyBhIG5hbWUsIGl0IG1lYW5zIHRoZSBzdHJpbmcgdGhhdAogKiB3YXMgdXNlZCB0byBjb25zdHJ1Y3QgKnMqLgogKgogKiBUaGUgZG9jdW1lbnRhdGlvbiBmcmVxdWVudGx5IGFidXNlcyBub3RhdGlvbiB3aXRoCiAqIERhcnQgcHNldWRvLWNvZGUgc3VjaCBhcyBbOm8ueChhKTpdLCB3aGVyZQogKiBvIGFuZCBhIGFyZSBkZWZpbmVkIHRvIGJlIG9iamVjdHM7IHdoYXQgaXMgYWN0dWFsbHkgbWVhbnQgaW4gdGhlc2UKICogY2FzZXMgaXMgWzpvJy54KGEnKTpdIHdoZXJlICpvJyogYW5kICphJyogYXJlIERhcnQgdmFyaWFibGVzCiAqIGJvdW5kIHRvICpvKiBhbmQgKmEqIHJlc3BlY3RpdmVseS4gRnVydGhlcm1vcmUsICpvJyogYW5kICphJyoKICogYXJlIGFzc3VtZWQgdG8gYmUgZnJlc2ggdmFyaWFibGVzIChtZWFuaW5nIHRoYXQgdGhleSBhcmUKICogZGlzdGluY3QgZnJvbSBhbnkgb3RoZXIgdmFyaWFibGVzIGluIHRoZSBwcm9ncmFtKS4KICoKICogU29tZXRpbWVzIHRoZSBkb2N1bWVudGF0aW9uIHJlZmVycyB0byAqc2VyaWFsaXphYmxlKiBvYmplY3RzLgogKiBBbiBvYmplY3QgaXMgc2VyaWFsaXphYmxlIGFjcm9zcyBpc29sYXRlcyBpZiBhbmQgb25seSBpZiBpdCBpcyBhbiBpbnN0YW5jZSBvZgogKiBudW0sIGJvb2wsIFN0cmluZywgYSBsaXN0IG9mIG9iamVjdHMgdGhhdCBhcmUgc2VyaWFsaXphYmxlCiAqIGFjcm9zcyBpc29sYXRlcywgb3IgYSBtYXAgd2l0aCBrZXlzIGFuZCB2YWx1ZXMgdGhhdCBhcmUgYWxsIHNlcmlhbGl6YWJsZSBhY3Jvc3MKICogaXNvbGF0ZXMuCiAqCiAqICMjIFN0YXR1czogVW5zdGFibGUKICoKICogVGhlIGRhcnQ6bWlycm9ycyBsaWJyYXJ5IGlzIHVuc3RhYmxlIGFuZCBpdHMgQVBJIG1pZ2h0IGNoYW5nZSBzbGlnaHRseSBhcyBhCiAqIHJlc3VsdCBvZiB1c2VyIGZlZWRiYWNrLiBUaGlzIGxpYnJhcnkgaXMgcGxhdGZvcm0gZGVwZW5kZW50IGFuZCB0aGVyZWZvcmUgaXQKICogaGFzIGltcGxlbWVudGF0aW9ucyBmb3IgYm90aCBkYXJ0MmpzIGFuZCB0aGUgRGFydCBWTS4gQm90aCBhcmUgdW5kZXIKICogZGV2ZWxvcG1lbnQgYW5kIG1heSBub3Qgc3VwcG9ydCBhbGwgb3BlcmF0aW9ucyB5ZXQuCiAqCiAqIHtAY2F0ZWdvcnkgVk19CiAqLwpsaWJyYXJ5IGRhcnQubWlycm9yczsKCmltcG9ydCAnZGFydDphc3luYycgc2hvdyBGdXR1cmU7CgovKioKICogQSBbTWlycm9yU3lzdGVtXSBpcyB0aGUgbWFpbiBpbnRlcmZhY2UgdXNlZCB0byByZWZsZWN0IG9uIGEgc2V0IG9mCiAqIGFzc29jaWF0ZWQgbGlicmFyaWVzLgogKgogKiBBdCBydW50aW1lIGVhY2ggcnVubmluZyBpc29sYXRlIGhhcyBhIGRpc3RpbmN0IFtNaXJyb3JTeXN0ZW1dLgogKgogKiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGhhdmUgYSBbTWlycm9yU3lzdGVtXSB3aGljaCByZXByZXNlbnRzIGEgc2V0CiAqIG9mIGxpYnJhcmllcyB3aGljaCBhcmUgbm90IHJ1bm5pbmcgLS0gcGVyaGFwcyBhdCBjb21waWxlLXRpbWUuICBJbgogKiB0aGlzIGNhc2UsIGFsbCBhdmFpbGFibGUgcmVmbGVjdGl2ZSBmdW5jdGlvbmFsaXR5IHdvdWxkIGJlCiAqIHN1cHBvcnRlZCwgYnV0IHJ1bnRpbWUgZnVuY3Rpb25hbGl0eSAoc3VjaCBhcyBpbnZva2luZyBhIGZ1bmN0aW9uCiAqIG9yIGluc3BlY3RpbmcgdGhlIGNvbnRlbnRzIG9mIGEgdmFyaWFibGUpIHdvdWxkIGZhaWwgZHluYW1pY2FsbHkuCiAqLwphYnN0cmFjdCBjbGFzcyBNaXJyb3JTeXN0ZW0gewogIC8qKgogICAqIEFsbCBsaWJyYXJpZXMga25vd24gdG8gdGhlIG1pcnJvciBzeXN0ZW0sIGluZGV4ZWQgYnkgdGhlaXIgVVJJLgogICAqCiAgICogUmV0dXJucyBhbiB1bm1vZGlmaWFibGUgbWFwIG9mIHRoZSBsaWJyYXJpZXMgd2l0aCBbTGlicmFyeU1pcnJvci51cmldIGFzCiAgICoga2V5cy4KICAgKgogICAqIEZvciBhIHJ1bnRpbWUgbWlycm9yIHN5c3RlbSwgb25seSBsaWJyYXJpZXMgd2hpY2ggYXJlIGN1cnJlbnRseSBsb2FkZWQKICAgKiBhcmUgaW5jbHVkZWQsIGFuZCByZXBlYXRlZCBjYWxscyBvZiB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIGRpZmZlcmVudCBtYXBzCiAgICogYXMgbGlicmFyaWVzIGFyZSBsb2FkZWQuCiAgICovCiAgTWFwPFVyaSwgTGlicmFyeU1pcnJvcj4gZ2V0IGxpYnJhcmllczsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgdW5pcXVlIGxpYnJhcnkgbmFtZWQgW2xpYnJhcnlOYW1lXSBpZiBpdCBleGlzdHMuCiAgICoKICAgKiBJZiBubyB1bmlxdWUgbGlicmFyeSBleGlzdHMsIGFuIGVycm9yIGlzIHRocm93bi4KICAgKi8KICBleHRlcm5hbCBMaWJyYXJ5TWlycm9yIGZpbmRMaWJyYXJ5KFN5bWJvbCBsaWJyYXJ5TmFtZSk7CgogIC8qKgogICAqIEEgbWlycm9yIG9uIHRoZSBpc29sYXRlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFtNaXJyb3JTeXN0ZW1dLgogICAqCiAgICogVGhpcyBtYXkgYmUgbnVsbCBpZiB0aGlzIG1pcnJvciBzeXN0ZW0gaXMgbm90IHJ1bm5pbmcuCiAgICovCiAgSXNvbGF0ZU1pcnJvciBnZXQgaXNvbGF0ZTsKCiAgLyoqCiAgICogQSBtaXJyb3Igb24gdGhlIFs6ZHluYW1pYzpdIHR5cGUuCiAgICovCiAgVHlwZU1pcnJvciBnZXQgZHluYW1pY1R5cGU7CgogIC8qKgogICAqIEEgbWlycm9yIG9uIHRoZSBbOnZvaWQ6XSB0eXBlLgogICAqLwogIFR5cGVNaXJyb3IgZ2V0IHZvaWRUeXBlOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIFtzeW1ib2xdLgogICAqCiAgICogVGhlIGZvbGxvd2luZyB0ZXh0IGlzIG5vbi1ub3JtYXRpdmU6CiAgICoKICAgKiBVc2luZyB0aGlzIG1ldGhvZCBtYXkgcmVzdWx0IGluIGxhcmdlciBvdXRwdXQuICBJZiBwb3NzaWJsZSwgdXNlCiAgICogW01pcnJvcnNVc2VkXSB0byBzcGVjaWZ5IHdoaWNoIHN5bWJvbHMgbXVzdCBiZSByZXRhaW5lZCBpbiBjbGVhciB0ZXh0LgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBTdHJpbmcgZ2V0TmFtZShTeW1ib2wgc3ltYm9sKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIHN5bWJvbCBmb3IgW25hbWVdLgogICAqCiAgICogSWYgW2xpYnJhcnldIGlzIG5vdCBhIFtMaWJyYXJ5TWlycm9yXSBvciBpZiBbbmFtZV0gaXMgYSBwcml2YXRlIGlkZW50aWZpZXIKICAgKiBhbmQgW2xpYnJhcnldIGlzIGBudWxsYCwgdGhyb3dzIGFuIFtBcmd1bWVudEVycm9yXS4gSWYgW25hbWVdIGlzIGEgcHJpdmF0ZQogICAqIGlkZW50aWZpZXIsIHRoZSBzeW1ib2wgcmV0dXJuZWQgaXMgd2l0aCByZXNwZWN0IHRvIFtsaWJyYXJ5XS4KICAgKgogICAqIFRoZSBmb2xsb3dpbmcgdGV4dCBpcyBub24tbm9ybWF0aXZlOgogICAqCiAgICogVXNpbmcgdGhpcyBtZXRob2QgbWF5IHJlc3VsdCBpbiBsYXJnZXIgb3V0cHV0LiAgSWYgcG9zc2libGUsIHVzZQogICAqIHRoZSBjb25zdCBjb25zdHJ1Y3RvciBvZiBbU3ltYm9sXSBvciBzeW1ib2wgbGl0ZXJhbHMuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIFN5bWJvbCBnZXRTeW1ib2woU3RyaW5nIG5hbWUsIFtMaWJyYXJ5TWlycm9yIGxpYnJhcnldKTsKfQoKLyoqCiAqIFJldHVybnMgYSBbTWlycm9yU3lzdGVtXSBmb3IgdGhlIGN1cnJlbnQgaXNvbGF0ZS4KICovCmV4dGVybmFsIE1pcnJvclN5c3RlbSBjdXJyZW50TWlycm9yU3lzdGVtKCk7CgovKioKICogUmVmbGVjdHMgYW4gaW5zdGFuY2UuCiAqCiAqIFJldHVybnMgYW4gW0luc3RhbmNlTWlycm9yXSByZWZsZWN0aW5nIFtyZWZsZWN0ZWVdLiBJZiBbcmVmbGVjdGVlXSBpcyBhCiAqIGZ1bmN0aW9uIG9yIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBoYXMgYSBbOmNhbGw6XSBtZXRob2QsIHRoZSByZXR1cm5lZAogKiBpbnN0YW5jZSBtaXJyb3Igd2lsbCBiZSBhIFtDbG9zdXJlTWlycm9yXS4KICoKICogTm90ZSB0aGF0IHNpbmNlIG9uZSBjYW5ub3Qgb2J0YWluIGFuIG9iamVjdCBmcm9tIGFub3RoZXIgaXNvbGF0ZSwgdGhpcwogKiBmdW5jdGlvbiBjYW4gb25seSBiZSB1c2VkIHRvIG9idGFpbiAgbWlycm9ycyBvbiBvYmplY3RzIG9mIHRoZSBjdXJyZW50CiAqIGlzb2xhdGUuCiAqLwpleHRlcm5hbCBJbnN0YW5jZU1pcnJvciByZWZsZWN0KE9iamVjdCByZWZsZWN0ZWUpOwoKLyoqCiAqIFJlZmxlY3RzIGEgY2xhc3MgZGVjbGFyYXRpb24uCiAqCiAqIExldCAqQyogYmUgdGhlIG9yaWdpbmFsIGNsYXNzIGRlY2xhcmF0aW9uIG9mIHRoZSBjbGFzcyByZXByZXNlbnRlZCBieSBba2V5XS4KICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgW0NsYXNzTWlycm9yXSByZWZsZWN0aW5nICpDKi4KICoKICogSWYgW2tleV0gaXMgbm90IGFuIGluc3RhbmNlIG9mIFtUeXBlXSwgdGhlbiB0aGlzIGZ1bmN0aW9uIHRocm93cyBhbgogKiBbQXJndW1lbnRFcnJvcl0uIElmIFtrZXldIGlzIHRoZSBUeXBlIGZvciBkeW5hbWljIG9yIGEgZnVuY3Rpb24gdHlwZWRlZiwKICogdGhyb3dzIGFuIFtBcmd1bWVudEVycm9yXS4KICoKICogTm90ZSB0aGF0IHNpbmNlIG9uZSBjYW5ub3Qgb2J0YWluIGEgW1R5cGVdIG9iamVjdCBmcm9tIGFub3RoZXIgaXNvbGF0ZSwgdGhpcwogKiBmdW5jdGlvbiBjYW4gb25seSBiZSB1c2VkIHRvIG9idGFpbiBjbGFzcyBtaXJyb3JzIG9uIGNsYXNzZXMgb2YgdGhlIGN1cnJlbnQKICogaXNvbGF0ZS4KICovCmV4dGVybmFsIENsYXNzTWlycm9yIHJlZmxlY3RDbGFzcyhUeXBlIGtleSk7CgovKioKICogUmVmbGVjdHMgdGhlIHR5cGUgcmVwcmVzZW50ZWQgYnkgW2tleV0uCiAqCiAqIElmIFtrZXldIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBbVHlwZV0sIHRoZW4gdGhpcyBmdW5jdGlvbiB0aHJvd3MgYW4KICogW0FyZ3VtZW50RXJyb3JdLgogKgogKiBPcHRpb25hbGx5IHRha2VzIGEgbGlzdCBvZiBbdHlwZUFyZ3VtZW50c10gZm9yIGdlbmVyaWMgY2xhc3Nlcy4gSWYgdGhlIGxpc3QKICogaXMgcHJvdmlkZWQsIHRoZW4gdGhlIFtrZXldIG11c3QgYmUgYSBnZW5lcmljIGNsYXNzIHR5cGUsIGFuZCB0aGUgbnVtYmVyIG9mCiAqIHRoZSBwcm92aWRlZCB0eXBlIGFyZ3VtZW50cyBtdXN0IGJlIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgdHlwZSB2YXJpYWJsZXMKICogZGVjbGFyZWQgYnkgdGhlIGNsYXNzLgogKgogKiBOb3RlIHRoYXQgc2luY2Ugb25lIGNhbm5vdCBvYnRhaW4gYSBbVHlwZV0gb2JqZWN0IGZyb20gYW5vdGhlciBpc29sYXRlLCB0aGlzCiAqIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgdG8gb2J0YWluIHR5cGUgbWlycm9ycyBvbiB0eXBlcyBvZiB0aGUgY3VycmVudAogKiBpc29sYXRlLgogKi8KZXh0ZXJuYWwgVHlwZU1pcnJvciByZWZsZWN0VHlwZShUeXBlIGtleSwgW0xpc3Q8VHlwZT4gdHlwZUFyZ3VtZW50c10pOwoKLyoqCiAqIEEgW01pcnJvcl0gcmVmbGVjdHMgc29tZSBEYXJ0IGxhbmd1YWdlIGVudGl0eS4KICoKICogRXZlcnkgW01pcnJvcl0gb3JpZ2luYXRlcyBmcm9tIHNvbWUgW01pcnJvclN5c3RlbV0uCiAqLwphYnN0cmFjdCBjbGFzcyBNaXJyb3Ige30KCi8qKgogKiBBbiBbSXNvbGF0ZU1pcnJvcl0gcmVmbGVjdHMgYW4gaXNvbGF0ZS4KICovCmFic3RyYWN0IGNsYXNzIElzb2xhdGVNaXJyb3IgaW1wbGVtZW50cyBNaXJyb3IgewogIC8qKgogICAqIEEgdW5pcXVlIG5hbWUgdXNlZCB0byByZWZlciB0byB0aGUgaXNvbGF0ZSBpbiBkZWJ1Z2dpbmcgbWVzc2FnZXMuCiAgICovCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWU7CgogIC8qKgogICAqIFdoZXRoZXIgdGhpcyBtaXJyb3IgcmVmbGVjdHMgdGhlIGN1cnJlbnRseSBydW5uaW5nIGlzb2xhdGUuCiAgICovCiAgYm9vbCBnZXQgaXNDdXJyZW50OwoKICAvKioKICAgKiBUaGUgcm9vdCBsaWJyYXJ5IGZvciB0aGUgcmVmbGVjdGVkIGlzb2xhdGUuCiAgICovCiAgTGlicmFyeU1pcnJvciBnZXQgcm9vdExpYnJhcnk7CgogIC8qKgogICAqIFdoZXRoZXIgW290aGVyXSBpcyBhbiBbSXNvbGF0ZU1pcnJvcl0gb24gdGhlIHNhbWUgaXNvbGF0ZSBhcyB0aGlzIG1pcnJvci4KICAgKgogICAqIFRoZSBlcXVhbGl0eSBob2xkcyBpZiBhbmQgb25seSBpZgogICAqCiAgICogMS4gW290aGVyXSBpcyBhIG1pcnJvciBvZiB0aGUgc2FtZSBraW5kLCBhbmQKICAgKiAyLiB0aGUgaXNvbGF0ZSBiZWluZyByZWZsZWN0ZWQgYnkgdGhpcyBtaXJyb3IgaXMgdGhlIHNhbWUgaXNvbGF0ZSBiZWluZwogICAqICAgIHJlZmxlY3RlZCBieSBbb3RoZXJdLgogICAqLwogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpOwoKICAvKioKICAgKiBMb2FkcyB0aGUgbGlicmFyeSBhdCB0aGUgZ2l2ZW4gdXJpIGludG8gdGhpcyBpc29sYXRlLgogICAqCiAgICogV0FSTklORzogWW91IGFyZSBzdHJvbmdseSBlbmNvdXJhZ2VkIHRvIHVzZSBJc29sYXRlLnNwYXduVXJpIGluc3RlYWQgd2hlbgogICAqIHBvc3NpYmxlLiBJc29sYXRlTWlycm9yLmxvYWRVcmkgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIHN5bmNocm9ub3VzCiAgICogY29tbXVuaWNhdGlvbiBvciBzaGFyZWQgc3RhdGUgd2l0aCBkeW5hbWljYWxseSBsb2FkZWQgY29kZSBpcyBuZWVkZWQuCiAgICoKICAgKiBJZiBhIGxpYnJhcnkgd2l0aCB0aGUgc2FtZSBjYW5vbmljYWxpemVkIHVyaSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZCwKICAgKiB0aGUgZXhpc3RpbmcgbGlicmFyeSB3aWxsIGJlIHJldHVybmVkLiAoVGhlIGlzb2xhdGUgd2lsbCBub3QgbG9hZCBhIG5ldwogICAqIGNvcHkgb2YgdGhlIGxpYnJhcnkuKQogICAqCiAgICogVGhpcyBiZWhhdmlvciBpcyBzaW1pbGFyIHRvIHRoZSBiZWhhdmlvciBvZiBhbiBpbXBvcnQgc3RhdGVtZW50IHRoYXQKICAgKiBhcHBlYXJzIGluIHRoZSByb290IGxpYnJhcnksIGV4Y2VwdCB0aGF0IHRoZSBpbXBvcnQgc2NvcGUgb2YgdGhlIHJvb3QKICAgKiBsaWJyYXJ5IGlzIG5vdCBjaGFuZ2VkLgogICAqLwogIEZ1dHVyZTxMaWJyYXJ5TWlycm9yPiBsb2FkVXJpKFVyaSB1cmkpOwp9CgovKioKICogQSBbRGVjbGFyYXRpb25NaXJyb3JdIHJlZmxlY3RzIHNvbWUgZW50aXR5IGRlY2xhcmVkIGluIGEgRGFydCBwcm9ncmFtLgogKi8KYWJzdHJhY3QgY2xhc3MgRGVjbGFyYXRpb25NaXJyb3IgaW1wbGVtZW50cyBNaXJyb3IgewogIC8qKgogICAqIFRoZSBzaW1wbGUgbmFtZSBmb3IgdGhpcyBEYXJ0IGxhbmd1YWdlIGVudGl0eS4KICAgKgogICAqIFRoZSBzaW1wbGUgbmFtZSBpcyBpbiBtb3N0IGNhc2VzIHRoZSBpZGVudGlmaWVyIG5hbWUgb2YgdGhlIGVudGl0eSwKICAgKiBzdWNoIGFzICdteU1ldGhvZCcgZm9yIGEgbWV0aG9kLCBbOnZvaWQgbXlNZXRob2QoKSB7Li4ufTpdIG9yICdteWxpYnJhcnknCiAgICogZm9yIGEgWzpsaWJyYXJ5ICdteWxpYnJhcnknOzpdIGRlY2xhcmF0aW9uLgogICAqLwogIFN5bWJvbCBnZXQgc2ltcGxlTmFtZTsKCiAgLyoqCiAgICogVGhlIGZ1bGx5LXF1YWxpZmllZCBuYW1lIGZvciB0aGlzIERhcnQgbGFuZ3VhZ2UgZW50aXR5LgogICAqCiAgICogVGhpcyBuYW1lIGlzIHF1YWxpZmllZCBieSB0aGUgbmFtZSBvZiB0aGUgb3duZXIuIEZvciBpbnN0YW5jZSwKICAgKiB0aGUgcXVhbGlmaWVkIG5hbWUgb2YgYSBtZXRob2QgJ21ldGhvZCcgaW4gY2xhc3MgJ0NsYXNzJyBpbgogICAqIGxpYnJhcnkgJ2xpYnJhcnknIGlzICdsaWJyYXJ5LkNsYXNzLm1ldGhvZCcuCiAgICoKICAgKiBSZXR1cm5zIGEgW1N5bWJvbF0gY29uc3RydWN0ZWQgZnJvbSBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlCiAgICogZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHJlZmxlY3RlZS4KICAgKiBMZXQgKm8qIGJlIHRoZSBbb3duZXJdIG9mIHRoaXMgbWlycm9yLCBsZXQgKnIqIGJlIHRoZSByZWZsZWN0ZWUgb2YKICAgKiB0aGlzIG1pcnJvciwgbGV0ICpwKiBiZSB0aGUgZnVsbHkgcXVhbGlmaWVkCiAgICogbmFtZSBvZiB0aGUgcmVmbGVjdGVlIG9mICpvKiwgYW5kIGxldCAqcyogYmUgdGhlIHNpbXBsZSBuYW1lIG9mICpyKgogICAqIGNvbXB1dGVkIGJ5IFtzaW1wbGVOYW1lXS4KICAgKiBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgKnIqIGlzIHRoZQogICAqIGNvbmNhdGVuYXRpb24gb2YgKnAqLCAnLicsIGFuZCAqcyouCiAgICoKICAgKiBCZWNhdXNlIGFuIGlzb2xhdGUgY2FuIGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBsaWJyYXJ5IHdpdGggdGhlIHNhbWUgbmFtZSAoYXQKICAgKiBkaWZmZXJlbnQgVVJJcyksIGEgZnVsbHktcXVhbGlmaWVkIG5hbWUgZG9lcyBub3QgdW5pcXVlbHkgaWRlbnRpZnkgYW55CiAgICogbGFuZ3VhZ2UgZW50aXR5LgogICAqLwogIFN5bWJvbCBnZXQgcXVhbGlmaWVkTmFtZTsKCiAgLyoqCiAgICogQSBtaXJyb3Igb24gdGhlIG93bmVyIG9mIHRoaXMgRGFydCBsYW5ndWFnZSBlbnRpdHkuCiAgICoKICAgKiBUaGUgb3duZXIgaXMgdGhlIGRlY2xhcmF0aW9uIGltbWVkaWF0ZWx5IHN1cnJvdW5kaW5nIHRoZSByZWZsZWN0ZWU6CiAgICoKICAgKiAqIEZvciBhIGxpYnJhcnksIHRoZSBvd25lciBpcyBbOm51bGw6XS4KICAgKiAqIEZvciBhIGNsYXNzIGRlY2xhcmF0aW9uLCB0eXBlZGVmIG9yIHRvcCBsZXZlbCBmdW5jdGlvbiBvciB2YXJpYWJsZSwgdGhlCiAgICogICBvd25lciBpcyB0aGUgZW5jbG9zaW5nIGxpYnJhcnkuCiAgICogKiBGb3IgYSBtaXhpbiBhcHBsaWNhdGlvbiBgUyB3aXRoIE1gLCB0aGUgb3duZXIgaXMgdGhlIG93bmVyIG9mIGBNYC4KICAgKiAqIEZvciBhIGNvbnN0cnVjdG9yLCB0aGUgb3duZXIgaXMgdGhlIGltbWVkaWF0ZWx5IGVuY2xvc2luZyBjbGFzcy4KICAgKiAqIEZvciBhIG1ldGhvZCwgaW5zdGFuY2UgdmFyaWFibGUgb3IgYSBzdGF0aWMgdmFyaWFibGUsIHRoZSBvd25lciBpcyB0aGUKICAgKiAgIGltbWVkaWF0ZWx5IGVuY2xvc2luZyBjbGFzcywgdW5sZXNzIHRoZSBjbGFzcyBpcyBhIG1peGluIGFwcGxpY2F0aW9uCiAgICogICBgUyB3aXRoIE1gLCBpbiB3aGljaCBjYXNlIHRoZSBvd25lciBpcyBgTWAuIE5vdGUgdGhhdCBgTWAgbWF5IGJlIGFuCiAgICogICBpbnZvY2F0aW9uIG9mIGEgZ2VuZXJpYy4KICAgKiAqIEZvciBhIHBhcmFtZXRlciwgbG9jYWwgdmFyaWFibGUgb3IgbG9jYWwgZnVuY3Rpb24gdGhlIG93bmVyIGlzIHRoZQogICAqICAgaW1tZWRpYXRlbHkgZW5jbG9zaW5nIGZ1bmN0aW9uLgogICAqLwogIERlY2xhcmF0aW9uTWlycm9yIGdldCBvd25lcjsKCiAgLyoqCiAgICogV2hldGhlciB0aGlzIGRlY2xhcmF0aW9uIGlzIGxpYnJhcnkgcHJpdmF0ZS4KICAgKgogICAqIEFsd2F5cyByZXR1cm5zIGBmYWxzZWAgZm9yIGEgbGlicmFyeSBkZWNsYXJhdGlvbiwKICAgKiBvdGhlcndpc2UgcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGRlY2xhcmF0aW9uJ3MgbmFtZSBzdGFydHMgd2l0aCBhbgogICAqIHVuZGVyc2NvcmUgY2hhcmFjdGVyIChgX2ApLCBhbmQgYGZhbHNlYCBpZiBpdCBkb2Vzbid0LgogICAqLwogIGJvb2wgZ2V0IGlzUHJpdmF0ZTsKCiAgLyoqCiAgICogV2hldGhlciB0aGlzIGRlY2xhcmF0aW9uIGlzIHRvcC1sZXZlbC4KICAgKgogICAqIEEgZGVjbGFyYXRpb24gaXMgY29uc2lkZXJlZCB0b3AtbGV2ZWwgaWYgaXRzIFtvd25lcl0gaXMgYSBbTGlicmFyeU1pcnJvcl0uCiAgICovCiAgYm9vbCBnZXQgaXNUb3BMZXZlbDsKCiAgLyoqCiAgICogVGhlIHNvdXJjZSBsb2NhdGlvbiBvZiB0aGlzIERhcnQgbGFuZ3VhZ2UgZW50aXR5LCBvciBbOm51bGw6XSBpZiB0aGUKICAgKiBlbnRpdHkgaXMgc3ludGhldGljLgogICAqCiAgICogSWYgdGhlIHJlZmxlY3RlZSBpcyBhIHZhcmlhYmxlLCB0aGUgcmV0dXJuZWQgbG9jYXRpb24gZ2l2ZXMgdGhlIHBvc2l0aW9uCiAgICogb2YgdGhlIHZhcmlhYmxlIG5hbWUgYXQgaXRzIHBvaW50IG9mIGRlY2xhcmF0aW9uLgogICAqCiAgICogSWYgdGhlIHJlZmxlY3RlZSBpcyBhIGxpYnJhcnksIGNsYXNzLCB0eXBlZGVmLCBmdW5jdGlvbiBvciB0eXBlIHZhcmlhYmxlCiAgICogd2l0aCBhc3NvY2lhdGVkIG1ldGFkYXRhLCB0aGUgcmV0dXJuZWQgbG9jYXRpb24gZ2l2ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZQogICAqIGZpcnN0IG1ldGFkYXRhIGRlY2xhcmF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVmbGVjdGVlLgogICAqCiAgICogT3RoZXJ3aXNlOgogICAqCiAgICogSWYgdGhlIHJlZmxlY3RlZSBpcyBhIGxpYnJhcnksIHRoZSByZXR1cm5lZCBsb2NhdGlvbiBnaXZlcyB0aGUgcG9zaXRpb24gb2YKICAgKiB0aGUga2V5d29yZCAnbGlicmFyeScgYXQgdGhlIHJlZmxlY3RlZSdzIHBvaW50IG9mIGRlY2xhcmF0aW9uLCBpZiB0aGUKICAgKiByZWZsZWN0ZWUgaXMgYSBuYW1lZCBsaWJyYXJ5LCBvciB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBmaXJzdCBsaW5lIGluCiAgICogdGhlIGNvbXBpbGF0aW9uIHVuaXQgZGVmaW5pbmcgdGhlIHJlZmxlY3RlZSBpZiB0aGUgcmVmbGVjdGVlIGlzIGFub255bW91cy4KICAgKgogICAqIElmIHRoZSByZWZsZWN0ZWUgaXMgYW4gYWJzdHJhY3QgY2xhc3MsIHRoZSByZXR1cm5lZCBsb2NhdGlvbiBnaXZlcyB0aGUKICAgKiBwb3NpdGlvbiBvZiB0aGUga2V5d29yZCAnYWJzdHJhY3QnIGF0IHRoZSByZWZsZWN0ZWUncyBwb2ludCBvZiBkZWNsYXJhdGlvbi4KICAgKiBPdGhlcndpc2UsIGlmIHRoZSByZWZsZWN0ZWUgaXMgYSBjbGFzcywgdGhlIHJldHVybmVkIGxvY2F0aW9uIGdpdmVzIHRoZQogICAqIHBvc2l0aW9uIG9mIHRoZSBrZXl3b3JkICdjbGFzcycgYXQgdGhlIHJlZmxlY3RlZSdzIHBvaW50IG9mIGRlY2xhcmF0aW9uLgogICAqCiAgICogSWYgdGhlIHJlZmxlY3RlZSBpcyBhIHR5cGVkZWYgdGhlIHJldHVybmVkIGxvY2F0aW9uIGdpdmVzIHRoZSBwb3NpdGlvbiBvZgogICAqIHRoZSBvZiB0aGUga2V5d29yZCAndHlwZWRlZicgYXQgdGhlIHJlZmxlY3RlZSdzIHBvaW50IG9mIGRlY2xhcmF0aW9uLgogICAqCiAgICogSWYgdGhlIHJlZmxlY3RlZSBpcyBhIGZ1bmN0aW9uIHdpdGggYSBkZWNsYXJlZCByZXR1cm4gdHlwZSwgdGhlIHJldHVybmVkCiAgICogbG9jYXRpb24gZ2l2ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBmdW5jdGlvbidzIHJldHVybiB0eXBlIGF0IHRoZQogICAqIHJlZmxlY3RlZSdzIHBvaW50IG9mIGRlY2xhcmF0aW9uLiBPdGhlcndpc2UuIHRoZSByZXR1cm5lZCBsb2NhdGlvbiBnaXZlcwogICAqIHRoZSBwb3NpdGlvbiBvZiB0aGUgZnVuY3Rpb24ncyBuYW1lIGF0IHRoZSByZWZsZWN0ZWUncyBwb2ludCBvZgogICAqIGRlY2xhcmF0aW9uLgogICAqCiAgICogVGhpcyBvcGVyYXRpb24gaXMgb3B0aW9uYWwgYW5kIG1heSB0aHJvdyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0uCiAgICovCiAgU291cmNlTG9jYXRpb24gZ2V0IGxvY2F0aW9uOwoKICAvKioKICAgKiBBIGxpc3Qgb2YgdGhlIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRlY2xhcmF0aW9uLgogICAqCiAgICogTGV0ICpEKiBiZSB0aGUgZGVjbGFyYXRpb24gdGhpcyBtaXJyb3IgcmVmbGVjdHMuCiAgICogSWYgKkQqIGlzIGRlY29yYXRlZCB3aXRoIGFubm90YXRpb25zICpBMSwgLi4uLCBBbioKICAgKiB3aGVyZSAqbiA+IDAqLCB0aGVuIGZvciBlYWNoIGFubm90YXRpb24gKkFpKiBhc3NvY2lhdGVkCiAgICogd2l0aCAqRCwgMSA8PSBpIDw9IG4qLCBsZXQgKmNpKiBiZSB0aGUgY29uc3RhbnQgb2JqZWN0CiAgICogc3BlY2lmaWVkIGJ5ICpBaSouIFRoZW4gdGhpcyBtZXRob2QgcmV0dXJucyBhIGxpc3Qgd2hvc2UKICAgKiBtZW1iZXJzIGFyZSBpbnN0YW5jZSBtaXJyb3JzIG9uICpjMSwgLi4uLCBjbiouCiAgICogSWYgbm8gYW5ub3RhdGlvbnMgYXJlIGFzc29jaWF0ZWQgd2l0aCAqRCosIHRoZW4KICAgKiBhbiBlbXB0eSBsaXN0IGlzIHJldHVybmVkLgogICAqCiAgICogSWYgZXZhbHVhdGluZyBhbnkgb2YgKmMxLCAuLi4sIGNuKiB3b3VsZCBjYXVzZSBhCiAgICogY29tcGlsYXRpb24gZXJyb3IKICAgKiB0aGUgZWZmZWN0IGlzIHRoZSBzYW1lIGFzIGlmIGEgbm9uLXJlZmxlY3RpdmUgY29tcGlsYXRpb24gZXJyb3IKICAgKiBoYWQgYmVlbiBlbmNvdW50ZXJlZC4KICAgKi8KICBMaXN0PEluc3RhbmNlTWlycm9yPiBnZXQgbWV0YWRhdGE7Cn0KCi8qKgogKiBBbiBbT2JqZWN0TWlycm9yXSBpcyBhIGNvbW1vbiBzdXBlcmludGVyZmFjZSBvZiBbSW5zdGFuY2VNaXJyb3JdLAogKiBbQ2xhc3NNaXJyb3JdLCBhbmQgW0xpYnJhcnlNaXJyb3JdIHRoYXQgcmVwcmVzZW50cyB0aGVpciBzaGFyZWQKICogZnVuY3Rpb25hbGl0eS4KICoKICogRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGUgbWlycm9ycyBsaWJyYXJ5LCB0aGVzZSB0eXBlcyBhcmUgYWxsCiAqIG9iamVjdC1saWtlLCBpbiB0aGF0IHRoZXkgc3VwcG9ydCBtZXRob2QgaW52b2NhdGlvbiBhbmQgZmllbGQKICogYWNjZXNzLiAgUmVhbCBEYXJ0IG9iamVjdHMgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZSBbSW5zdGFuY2VNaXJyb3JdCiAqIHR5cGUuCiAqCiAqIFNlZSBbSW5zdGFuY2VNaXJyb3JdLCBbQ2xhc3NNaXJyb3JdLCBhbmQgW0xpYnJhcnlNaXJyb3JdLgogKi8KYWJzdHJhY3QgY2xhc3MgT2JqZWN0TWlycm9yIGltcGxlbWVudHMgTWlycm9yIHsKICAvKioKICAgKiBJbnZva2VzIHRoZSBuYW1lZCBmdW5jdGlvbiBhbmQgcmV0dXJucyBhIG1pcnJvciBvbiB0aGUgcmVzdWx0LgogICAqCiAgICogTGV0ICpvKiBiZSB0aGUgb2JqZWN0IHJlZmxlY3RlZCBieSB0aGlzIG1pcnJvciwgbGV0ICpmKiBiZSB0aGUgc2ltcGxlIG5hbWUKICAgKiBvZiB0aGUgbWVtYmVyIGRlbm90ZWQgYnkgW21lbWJlck5hbWVdLCBsZXQgKmExLCAuLi4sIGFuKiBiZSB0aGUgZWxlbWVudHMKICAgKiBvZiBbcG9zaXRpb25hbEFyZ3VtZW50c10sIGxldCAqazEsIC4uLiwga20qIGJlIHRoZSBpZGVudGlmaWVycyBkZW5vdGVkIGJ5CiAgICogdGhlIGVsZW1lbnRzIG9mIFtuYW1lZEFyZ3VtZW50cy5rZXlzXSwgYW5kIGxldCAqdjEsIC4uLiwgdm0qIGJlIHRoZQogICAqIGVsZW1lbnRzIG9mIFtuYW1lZEFyZ3VtZW50cy52YWx1ZXNdLiBUaGVuIHRoaXMgbWV0aG9kIHdpbGwgcGVyZm9ybSB0aGUKICAgKiBtZXRob2QgaW52b2NhdGlvbiAqby5mKGExLCAuLi4sIGFuLCBrMTogdjEsIC4uLiwga206IHZtKSogaW4gYSBzY29wZSB0aGF0CiAgICogaGFzIGFjY2VzcyB0byB0aGUgcHJpdmF0ZSBtZW1iZXJzIG9mICpvKiAoaWYgKm8qIGlzIGEgY2xhc3Mgb3IgbGlicmFyeSkgb3IKICAgKiB0aGUgcHJpdmF0ZSBtZW1iZXJzIG9mIHRoZSBjbGFzcyBvZiAqbyogKG90aGVyd2lzZSkuCiAgICoKICAgKiBJZiB0aGUgaW52b2NhdGlvbiByZXR1cm5zIGEgcmVzdWx0ICpyKiwgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcmVzdWx0IG9mCiAgICogY2FsbGluZyBbcmVmbGVjdF1cKCpyKlwpLgogICAqCiAgICogSWYgdGhlIGludm9jYXRpb24gY2F1c2VzIGEgY29tcGlsYXRpb24gZXJyb3IgdGhlIGVmZmVjdCBpcyB0aGUgc2FtZSBhcyBpZgogICAqIGEgbm9uLXJlZmxlY3RpdmUgY29tcGlsYXRpb24gZXJyb3IgaGFkIGJlZW4gZW5jb3VudGVyZWQuCiAgICoKICAgKiBJZiB0aGUgaW52b2NhdGlvbiB0aHJvd3MgYW4gZXhjZXB0aW9uICplKiAodGhhdCBpdCBkb2VzIG5vdCBjYXRjaCksIHRoaXMKICAgKiBtZXRob2QgdGhyb3dzICplKi4KICAgKi8KICAvKgogICAqIFRPRE8odHVybmlkZ2UpOiBIYW5kbGUgYW1iaWd1b3VzIG5hbWVzLgogICAqIFRPRE8odHVybmlkZ2UpOiBIYW5kbGUgb3B0aW9uYWwgJiBuYW1lZCBhcmd1bWVudHMuCiAgICovCiAgSW5zdGFuY2VNaXJyb3IgaW52b2tlKFN5bWJvbCBtZW1iZXJOYW1lLCBMaXN0IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIFtNYXA8U3ltYm9sLCBkeW5hbWljPiBuYW1lZEFyZ3VtZW50c10pOwoKICAvKioKICAgKiBJbnZva2VzIGEgZ2V0dGVyIGFuZCByZXR1cm5zIGEgbWlycm9yIG9uIHRoZSByZXN1bHQuCiAgICoKICAgKiBUaGUgZ2V0dGVyIGNhbiBiZSB0aGUgaW1wbGljaXQgZ2V0dGVyIGZvciBhIGZpZWxkIG9yIGEgdXNlci1kZWZpbmVkIGdldHRlcgogICAqIG1ldGhvZC4KICAgKgogICAqIExldCAqbyogYmUgdGhlIG9iamVjdCByZWZsZWN0ZWQgYnkgdGhpcyBtaXJyb3IsCiAgICogbGV0ICpmKiBiZSB0aGUgc2ltcGxlIG5hbWUgb2YgdGhlIGdldHRlciBkZW5vdGVkIGJ5IFtmaWVsZE5hbWVdLgogICAqCiAgICogVGhlbiB0aGlzIG1ldGhvZCB3aWxsIHBlcmZvcm0gdGhlIGdldHRlciBpbnZvY2F0aW9uICpvLmYqIGluIGEgc2NvcGUgdGhhdAogICAqIGhhcyBhY2Nlc3MgdG8gdGhlIHByaXZhdGUgbWVtYmVycyBvZiAqbyogKGlmICpvKiBpcyBhIGNsYXNzIG9yIGxpYnJhcnkpIG9yCiAgICogdGhlIHByaXZhdGUgbWVtYmVycyBvZiB0aGUgY2xhc3Mgb2YgKm8qIChvdGhlcndpc2UpLgogICAqCiAgICogSWYgdGhpcyBtaXJyb3IgaXMgYW4gW0luc3RhbmNlTWlycm9yXSwgYW5kIFtmaWVsZE5hbWVdIGRlbm90ZXMgYW4gaW5zdGFuY2UKICAgKiBtZXRob2Qgb24gaXRzIHJlZmxlY3RlZSwgdGhlIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiBpcyBhbiBpbnN0YW5jZQogICAqIG1pcnJvciBvbiBhIGNsb3N1cmUgY29ycmVzcG9uZGluZyB0byB0aGF0IG1ldGhvZC4KICAgKgogICAqIElmIHRoaXMgbWlycm9yIGlzIGEgW0xpYnJhcnlNaXJyb3JdLCBhbmQgW2ZpZWxkTmFtZV0gZGVub3RlcyBhIHRvcC1sZXZlbAogICAqIG1ldGhvZCBpbiB0aGUgY29ycmVzcG9uZGluZyBsaWJyYXJ5LCB0aGUgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIGlzIGFuCiAgICogaW5zdGFuY2UgbWlycm9yIG9uIGEgY2xvc3VyZSBjb3JyZXNwb25kaW5nIHRvIHRoYXQgbWV0aG9kLgogICAqCiAgICogSWYgdGhpcyBtaXJyb3IgaXMgYSBbQ2xhc3NNaXJyb3JdLCBhbmQgW2ZpZWxkTmFtZV0gZGVub3RlcyBhIHN0YXRpYyBtZXRob2QKICAgKiBpbiB0aGUgY29ycmVzcG9uZGluZyBjbGFzcywgdGhlIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiBpcyBhbiBpbnN0YW5jZQogICAqIG1pcnJvciBvbiBhIGNsb3N1cmUgY29ycmVzcG9uZGluZyB0byB0aGF0IG1ldGhvZC4KICAgKgogICAqIElmIHRoZSBpbnZvY2F0aW9uIHJldHVybnMgYSByZXN1bHQgKnIqLCB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSByZXN1bHQgb2YKICAgKiBjYWxsaW5nIFtyZWZsZWN0XVwoKnIqXCkuCiAgICoKICAgKiBJZiB0aGUgaW52b2NhdGlvbiBjYXVzZXMgYSBjb21waWxhdGlvbiBlcnJvciwgdGhlIGVmZmVjdCBpcyB0aGUgc2FtZSBhcyBpZgogICAqIGEgbm9uLXJlZmxlY3RpdmUgY29tcGlsYXRpb24gZXJyb3IgaGFkIGJlZW4gZW5jb3VudGVyZWQuCiAgICoKICAgKiBJZiB0aGUgaW52b2NhdGlvbiB0aHJvd3MgYW4gZXhjZXB0aW9uICplKiAodGhhdCBpdCBkb2VzIG5vdCBjYXRjaCksIHRoaXMKICAgKiBtZXRob2QgdGhyb3dzICplKi4KICAgKi8KICAvLyBUT0RPKGFoZSk6IFJlbW92ZSBzdHVmZiBhYm91dCBzY29wZSBhbmQgcHJpdmF0ZSBtZW1iZXJzLiBbZmllbGROYW1lXSBpcyBhCiAgLy8gY2FwYWJpbGl0eSBnaXZpbmcgYWNjZXNzIHRvIHByaXZhdGUgbWVtYmVycy4KICBJbnN0YW5jZU1pcnJvciBnZXRGaWVsZChTeW1ib2wgZmllbGROYW1lKTsKCiAgLyoqCiAgICogSW52b2tlcyBhIHNldHRlciBhbmQgcmV0dXJucyBhIG1pcnJvciBvbiB0aGUgcmVzdWx0LgogICAqCiAgICogVGhlIHNldHRlciBtYXkgYmUgZWl0aGVyIHRoZSBpbXBsaWNpdCBzZXR0ZXIgZm9yIGEgbm9uLWZpbmFsIGZpZWxkIG9yIGEKICAgKiB1c2VyLWRlZmluZWQgc2V0dGVyIG1ldGhvZC4KICAgKgogICAqIExldCAqbyogYmUgdGhlIG9iamVjdCByZWZsZWN0ZWQgYnkgdGhpcyBtaXJyb3IsCiAgICogbGV0ICpmKiBiZSB0aGUgc2ltcGxlIG5hbWUgb2YgdGhlIGdldHRlciBkZW5vdGVkIGJ5IFtmaWVsZE5hbWVdLAogICAqIGFuZCBsZXQgKmEqIGJlIHRoZSBvYmplY3QgYm91bmQgdG8gW3ZhbHVlXS4KICAgKgogICAqIFRoZW4gdGhpcyBtZXRob2Qgd2lsbCBwZXJmb3JtIHRoZSBzZXR0ZXIgaW52b2NhdGlvbiAqby5mID0gYSogaW4gYSBzY29wZQogICAqIHRoYXQgaGFzIGFjY2VzcyB0byB0aGUgcHJpdmF0ZSBtZW1iZXJzIG9mICpvKiAoaWYgKm8qIGlzIGEgY2xhc3Mgb3IKICAgKiBsaWJyYXJ5KSBvciB0aGUgcHJpdmF0ZSBtZW1iZXJzIG9mIHRoZSBjbGFzcyBvZiAqbyogKG90aGVyd2lzZSkuCiAgICoKICAgKiBJZiB0aGUgaW52b2NhdGlvbiByZXR1cm5zIGEgcmVzdWx0ICpyKiwgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcmVzdWx0IG9mCiAgICogY2FsbGluZyBbcmVmbGVjdF1cKFt2YWx1ZV1cKS4KICAgKgogICAqIElmIHRoZSBpbnZvY2F0aW9uIGNhdXNlcyBhIGNvbXBpbGF0aW9uIGVycm9yLCB0aGUgZWZmZWN0IGlzIHRoZSBzYW1lIGFzIGlmCiAgICogYSBub24tcmVmbGVjdGl2ZSBjb21waWxhdGlvbiBlcnJvciBoYWQgYmVlbiBlbmNvdW50ZXJlZC4KICAgKgogICAqIElmIHRoZSBpbnZvY2F0aW9uIHRocm93cyBhbiBleGNlcHRpb24gKmUqICh0aGF0IGl0IGRvZXMgbm90IGNhdGNoKSB0aGlzCiAgICogbWV0aG9kIHRocm93cyAqZSouCiAgICovCiAgLyogVE9ETyh0dXJuaWRnZSk6IEhhbmRsZSBhbWJpZ3VvdXMgbmFtZXMuKi8KICBJbnN0YW5jZU1pcnJvciBzZXRGaWVsZChTeW1ib2wgZmllbGROYW1lLCBPYmplY3QgdmFsdWUpOwoKICAvKioKICAgKiBQZXJmb3JtcyBbaW52b2NhdGlvbl0gb24gdGhlIHJlZmxlY3RlZSBvZiB0aGlzIFtPYmplY3RNaXJyb3JdLgogICAqCiAgICogRXF1aXZhbGVudCB0bwogICAqCiAgICogICAgIGlmIChpbnZvY2F0aW9uLmlzR2V0dGVyKSB7CiAgICogICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGQoaW52b2NhdGlvbi5tZW1iZXJOYW1lKS5yZWZsZWN0ZWU7CiAgICogICAgIH0gZWxzZSBpZiAoaW52b2NhdGlvbi5pc1NldHRlcikgewogICAqICAgICAgIHJldHVybiB0aGlzLnNldEZpZWxkKGludm9jYXRpb24ubWVtYmVyTmFtZSwKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uLnBvc2l0aW9uYWxBcmd1bWVudHNbMF0pLnJlZmxlY3RlZTsKICAgKiAgICAgfSBlbHNlIHsKICAgKiAgICAgICByZXR1cm4gdGhpcy5pbnZva2UoaW52b2NhdGlvbi5tZW1iZXJOYW1lLAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uLnBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGludm9jYXRpb24ubmFtZWRBcmd1bWVudHMpLnJlZmxlY3RlZTsKICAgKiAgICAgfQogICAqLwogIGRlbGVnYXRlKEludm9jYXRpb24gaW52b2NhdGlvbik7Cn0KCi8qKgogKiBBbiBbSW5zdGFuY2VNaXJyb3JdIHJlZmxlY3RzIGFuIGluc3RhbmNlIG9mIGEgRGFydCBsYW5ndWFnZSBvYmplY3QuCiAqLwphYnN0cmFjdCBjbGFzcyBJbnN0YW5jZU1pcnJvciBpbXBsZW1lbnRzIE9iamVjdE1pcnJvciB7CiAgLyoqCiAgICogQSBtaXJyb3Igb24gdGhlIHR5cGUgb2YgdGhlIHJlZmxlY3RlZS4KICAgKgogICAqIFJldHVybnMgYSBtaXJyb3Igb24gdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgcmVmbGVjdGVlLgogICAqIFRoZSBjbGFzcyBvZiB0aGUgcmVmbGVjdGVlIG1heSBkaWZmZXIgZnJvbQogICAqIHRoZSBvYmplY3QgcmV0dXJuZWQgYnkgaW52b2tpbmcgW3J1bnRpbWVUeXBlXSBvbgogICAqIHRoZSByZWZsZWN0ZWUuCiAgICovCiAgQ2xhc3NNaXJyb3IgZ2V0IHR5cGU7CgogIC8qKgogICAqIFdoZXRoZXIgW3JlZmxlY3RlZV0gd2lsbCByZXR1cm4gdGhlIGluc3RhbmNlIHJlZmxlY3RlZCBieSB0aGlzIG1pcnJvci4KICAgKgogICAqIFRoaXMgd2lsbCBhbHdheXMgYmUgdHJ1ZSBpbiB0aGUgbG9jYWwgY2FzZSAocmVmbGVjdGluZyBpbnN0YW5jZXMgaW4gdGhlCiAgICogc2FtZSBpc29sYXRlKSwgYnV0IG9ubHkgdHJ1ZSBpbiB0aGUgcmVtb3RlIGNhc2UgaWYgdGhpcyBtaXJyb3IgcmVmbGVjdHMgYQogICAqIHNpbXBsZSB2YWx1ZS4KICAgKgogICAqIEEgdmFsdWUgaXMgc2ltcGxlIGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nIGhvbGRzOgogICAqCiAgICogKiB0aGUgdmFsdWUgaXMgWzpudWxsOl0KICAgKiAqIHRoZSB2YWx1ZSBpcyBvZiB0eXBlIFtudW1dCiAgICogKiB0aGUgdmFsdWUgaXMgb2YgdHlwZSBbYm9vbF0KICAgKiAqIHRoZSB2YWx1ZSBpcyBvZiB0eXBlIFtTdHJpbmddCiAgICovCiAgYm9vbCBnZXQgaGFzUmVmbGVjdGVlOwoKICAvKioKICAgKiBJZiB0aGUgW0luc3RhbmNlTWlycm9yXSByZWZsZWN0cyBhbiBpbnN0YW5jZSBpdCBpcyBtZWFuaW5nZnVsIHRvCiAgICogaGF2ZSBhIGxvY2FsIHJlZmVyZW5jZSB0bywgd2UgcHJvdmlkZSBhY2Nlc3MgdG8gdGhlIGFjdHVhbAogICAqIGluc3RhbmNlIGhlcmUuCiAgICoKICAgKiBJZiB5b3UgYWNjZXNzIFtyZWZsZWN0ZWVdIHdoZW4gW2hhc1JlZmxlY3RlZV0gaXMgZmFsc2UsIGFuCiAgICogZXhjZXB0aW9uIGlzIHRocm93bi4KICAgKi8KICBnZXQgcmVmbGVjdGVlOwoKICAvKioKICAgKiBXaGV0aGVyIHRoaXMgbWlycm9yIGlzIGVxdWFsIHRvIFtvdGhlcl0uCiAgICoKICAgKiBUaGUgZXF1YWxpdHkgaG9sZHMgaWYgYW5kIG9ubHkgaWYKICAgKgogICAqIDEuIFtvdGhlcl0gaXMgYSBtaXJyb3Igb2YgdGhlIHNhbWUga2luZCwgYW5kCiAgICogMi4gZWl0aGVyCiAgICoKICAgKiAgICBhLiBbaGFzUmVmbGVjdGVlXSBpcyB0cnVlIGFuZCBzbyBpcwogICAqICAgIFs6aWRlbnRpY2FsKHJlZmxlY3RlZSwgb3RoZXIucmVmbGVjdGVlKTpdLCBvcgogICAqCiAgICogICAgYi4gdGhlIHJlbW90ZSBvYmplY3RzIHJlZmxlY3RlZCBieSB0aGlzIG1pcnJvciBhbmQgYnkgW290aGVyXSBhcmUKICAgKiAgICBpZGVudGljYWwuCiAgICovCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcik7Cn0KCi8qKgogKiBBIFtDbG9zdXJlTWlycm9yXSByZWZsZWN0cyBhIGNsb3N1cmUuCiAqCiAqIEEgW0Nsb3N1cmVNaXJyb3JdIHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGV4ZWN1dGUgaXRzIHJlZmxlY3RlZSBhbmQKICogaW50cm9zcGVjdCBpdHMgZnVuY3Rpb24uCiAqLwphYnN0cmFjdCBjbGFzcyBDbG9zdXJlTWlycm9yIGltcGxlbWVudHMgSW5zdGFuY2VNaXJyb3IgewogIC8qKgogICAqIEEgbWlycm9yIG9uIHRoZSBmdW5jdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBjbG9zdXJlLgogICAqCiAgICogVGhlIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aCBhbiBpbXBsaWNpdCBjbG9zdXJlIG9mIGEgZnVuY3Rpb24gaXMgdGhhdAogICAqIGZ1bmN0aW9uLgogICAqCiAgICogVGhlIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aCBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGEgWzpjYWxsOl0KICAgKiBtZXRob2QgaXMgdGhhdCBbOmNhbGw6XSBtZXRob2QuCiAgICoKICAgKiBBIERhcnQgaW1wbGVtZW50YXRpb24gbWlnaHQgY2hvb3NlIHRvIGNyZWF0ZSBhIGNsYXNzIGZvciBlYWNoIGNsb3N1cmUKICAgKiBleHByZXNzaW9uLCBpbiB3aGljaCBjYXNlIFs6ZnVuY3Rpb246XSB3b3VsZCBiZSB0aGUgc2FtZSBhcwogICAqIFs6dHlwZS5kZWNsYXJhdGlvbnNbI2NhbGxdOl0uIEJ1dCB0aGUgRGFydCBsYW5ndWFnZSBtb2RlbCBkb2VzIG5vdCByZXF1aXJlCiAgICogdGhpcy4gQSBtb3JlIHR5cGljYWwgaW1wbGVtZW50YXRpb24gaW52b2x2ZXMgYSBzaW5nbGUgY2xvc3VyZSBjbGFzcyBmb3IKICAgKiBlYWNoIHR5cGUgc2lnbmF0dXJlLCB3aGVyZSB0aGUgY2FsbCBtZXRob2QgZGlzcGF0Y2hlcyB0byBhIGZ1bmN0aW9uIGhlbGQKICAgKiBpbiB0aGUgY2xvc3VyZSByYXRoZXIgdGhlIGNhbGwgbWV0aG9kCiAgICogZGlyZWN0bHkgaW1wbGVtZW50aW5nIHRoZSBjbG9zdXJlIGJvZHkuIFNvIG9uZSBjYW5ub3QgcmVseSBvbiBjbG9zdXJlcyBmcm9tCiAgICogZGlzdGluY3QgY2xvc3VyZSBleHByZXNzaW9ucyBoYXZpbmcgZGlzdGluY3QgY2xhc3NlcyAoWzp0eXBlOl0pLCBidXQgb25lCiAgICogY2FuIHJlbHkgb24gdGhlbSBoYXZpbmcgZGlzdGluY3QgZnVuY3Rpb25zIChbOmZ1bmN0aW9uOl0pLgogICAqLwogIE1ldGhvZE1pcnJvciBnZXQgZnVuY3Rpb247CgogIC8qKgogICAqIEV4ZWN1dGVzIHRoZSBjbG9zdXJlIGFuZCByZXR1cm5zIGEgbWlycm9yIG9uIHRoZSByZXN1bHQuCiAgICoKICAgKiBMZXQgKmYqIGJlIHRoZSBjbG9zdXJlIHJlZmxlY3RlZCBieSB0aGlzIG1pcnJvciwKICAgKiBsZXQgKmExLCAuLi4sIGFuKiBiZSB0aGUgZWxlbWVudHMgb2YgW3Bvc2l0aW9uYWxBcmd1bWVudHNdLAogICAqIGxldCAqazEsIC4uLiwga20qIGJlIHRoZSBpZGVudGlmaWVycyBkZW5vdGVkIGJ5IHRoZSBlbGVtZW50cyBvZgogICAqIFtuYW1lZEFyZ3VtZW50cy5rZXlzXSwKICAgKiBhbmQgbGV0ICp2MSwgLi4uLCB2bSogYmUgdGhlIGVsZW1lbnRzIG9mIFtuYW1lZEFyZ3VtZW50cy52YWx1ZXNdLgogICAqCiAgICogVGhlbiB0aGlzIG1ldGhvZCB3aWxsIHBlcmZvcm0gdGhlIG1ldGhvZCBpbnZvY2F0aW9uCiAgICogKmYoYTEsIC4uLiwgYW4sIGsxOiB2MSwgLi4uLCBrbTogdm0pKi4KICAgKgogICAqIElmIHRoZSBpbnZvY2F0aW9uIHJldHVybnMgYSByZXN1bHQgKnIqLCB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSByZXN1bHQgb2YKICAgKiBjYWxsaW5nIFtyZWZsZWN0XVwoKnIqXCkuCiAgICoKICAgKiBJZiB0aGUgaW52b2NhdGlvbiBjYXVzZXMgYSBjb21waWxhdGlvbiBlcnJvciwgdGhlIGVmZmVjdCBpcyB0aGUgc2FtZSBhcyBpZgogICAqIGEgbm9uLXJlZmxlY3RpdmUgY29tcGlsYXRpb24gZXJyb3IgaGFkIGJlZW4gZW5jb3VudGVyZWQuCiAgICoKICAgKiBJZiB0aGUgaW52b2NhdGlvbiB0aHJvd3MgYW4gZXhjZXB0aW9uICplKiAodGhhdCBpdCBkb2VzIG5vdCBjYXRjaCksIHRoaXMKICAgKiBtZXRob2QgdGhyb3dzICplKi4KICAgKi8KICBJbnN0YW5jZU1pcnJvciBhcHBseShMaXN0IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIFtNYXA8U3ltYm9sLCBkeW5hbWljPiBuYW1lZEFyZ3VtZW50c10pOwp9CgovKioKICogQSBbTGlicmFyeU1pcnJvcl0gcmVmbGVjdHMgYSBEYXJ0IGxhbmd1YWdlIGxpYnJhcnksIHByb3ZpZGluZwogKiBhY2Nlc3MgdG8gdGhlIHZhcmlhYmxlcywgZnVuY3Rpb25zLCBhbmQgY2xhc3NlcyBvZiB0aGUKICogbGlicmFyeS4KICovCmFic3RyYWN0IGNsYXNzIExpYnJhcnlNaXJyb3IgaW1wbGVtZW50cyBEZWNsYXJhdGlvbk1pcnJvciwgT2JqZWN0TWlycm9yIHsKICAvKioKICAgKiBUaGUgYWJzb2x1dGUgdXJpIG9mIHRoZSBsaWJyYXJ5LgogICAqLwogIFVyaSBnZXQgdXJpOwoKICAvKioKICAgKiBSZXR1cm5zIGFuIGltbXV0YWJsZSBtYXAgb2YgdGhlIGRlY2xhcmF0aW9ucyBhY3R1YWxseSBnaXZlbiBpbiB0aGUgbGlicmFyeS4KICAgKgogICAqIFRoaXMgbWFwIGluY2x1ZGVzIGFsbCByZWd1bGFyIG1ldGhvZHMsIGdldHRlcnMsIHNldHRlcnMsIGZpZWxkcywgY2xhc3NlcwogICAqIGFuZCB0eXBlZGVmcyBhY3R1YWxseSBkZWNsYXJlZCBpbiB0aGUgbGlicmFyeS4gVGhlIG1hcCBpcyBrZXllZCBieSB0aGUKICAgKiBzaW1wbGUgbmFtZXMgb2YgdGhlIGRlY2xhcmF0aW9ucy4KICAgKi8KICBNYXA8U3ltYm9sLCBEZWNsYXJhdGlvbk1pcnJvcj4gZ2V0IGRlY2xhcmF0aW9uczsKCiAgLyoqCiAgICogV2hldGhlciB0aGlzIG1pcnJvciBpcyBlcXVhbCB0byBbb3RoZXJdLgogICAqCiAgICogVGhlIGVxdWFsaXR5IGhvbGRzIGlmIGFuZCBvbmx5IGlmCiAgICoKICAgKiAxLiBbb3RoZXJdIGlzIGEgbWlycm9yIG9mIHRoZSBzYW1lIGtpbmQsIGFuZAogICAqIDIuIFRoZSBsaWJyYXJ5IGJlaW5nIHJlZmxlY3RlZCBieSB0aGlzIG1pcnJvciBhbmQgdGhlIGxpYnJhcnkgYmVpbmcKICAgKiAgICByZWZsZWN0ZWQgYnkgW290aGVyXSBhcmUgdGhlIHNhbWUgbGlicmFyeSBpbiB0aGUgc2FtZSBpc29sYXRlLgogICAqLwogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbGlzdCBvZiB0aGUgaW1wb3J0cyBhbmQgZXhwb3J0cyBpbiB0aGlzIGxpYnJhcnk7CiAgICovCiAgTGlzdDxMaWJyYXJ5RGVwZW5kZW5jeU1pcnJvcj4gZ2V0IGxpYnJhcnlEZXBlbmRlbmNpZXM7Cn0KCi8vLyBBIG1pcnJvciBvbiBhbiBpbXBvcnQgb3IgZXhwb3J0IGRlY2xhcmF0aW9uLgphYnN0cmFjdCBjbGFzcyBMaWJyYXJ5RGVwZW5kZW5jeU1pcnJvciBpbXBsZW1lbnRzIE1pcnJvciB7CiAgLy8vIElzIGB0cnVlYCBpZiB0aGlzIGRlcGVuZGVuY3kgaXMgYW4gaW1wb3J0LgogIGJvb2wgZ2V0IGlzSW1wb3J0OwoKICAvLy8gSXMgYHRydWVgIGlmIHRoaXMgZGVwZW5kZW5jeSBpcyBhbiBleHBvcnQuCiAgYm9vbCBnZXQgaXNFeHBvcnQ7CgogIC8vLyBSZXR1cm5zIHRydWUgaWZmIHRoaXMgZGVwZW5kZW5jeSBpcyBhIGRlZmVycmVkIGltcG9ydC4gT3RoZXJ3aXNlIHJldHVybnMKICAvLy8gZmFsc2UuCiAgYm9vbCBnZXQgaXNEZWZlcnJlZDsKCiAgLy8vIFJldHVybnMgdGhlIGxpYnJhcnkgbWlycm9yIG9mIHRoZSBsaWJyYXJ5IHRoYXQgaW1wb3J0cyBvciBleHBvcnRzIHRoZQogIC8vLyBbdGFyZ2V0TGlicmFyeV0uCiAgTGlicmFyeU1pcnJvciBnZXQgc291cmNlTGlicmFyeTsKCiAgLy8vIFJldHVybnMgdGhlIGxpYnJhcnkgbWlycm9yIG9mIHRoZSBsaWJyYXJ5IHRoYXQgaXMgaW1wb3J0ZWQgb3IgZXhwb3J0ZWQsCiAgLy8vIG9yIG51bGwgaWYgdGhlIGxpYnJhcnkgaXMgbm90IGxvYWRlZC4KICBMaWJyYXJ5TWlycm9yIGdldCB0YXJnZXRMaWJyYXJ5OwoKICAvLy8gUmV0dXJucyB0aGUgcHJlZml4IGlmIHRoaXMgaXMgYSBwcmVmaXhlZCBpbXBvcnQgYW5kIGBudWxsYCBvdGhlcndpc2UuCiAgU3ltYm9sIGdldCBwcmVmaXg7CgogIC8vLyBSZXR1cm5zIHRoZSBsaXN0IG9mIHNob3cvaGlkZSBjb21iaW5hdG9ycyBvbiB0aGUgaW1wb3J0L2V4cG9ydAogIC8vLyBkZWNsYXJhdGlvbi4KICBMaXN0PENvbWJpbmF0b3JNaXJyb3I+IGdldCBjb21iaW5hdG9yczsKCiAgLy8vIFJldHVybnMgdGhlIHNvdXJjZSBsb2NhdGlvbiBmb3IgdGhpcyBpbXBvcnQvZXhwb3J0IGRlY2xhcmF0aW9uLgogIFNvdXJjZUxvY2F0aW9uIGdldCBsb2NhdGlvbjsKCiAgTGlzdDxJbnN0YW5jZU1pcnJvcj4gZ2V0IG1ldGFkYXRhOwoKICAvLy8gUmV0dXJucyBhIGZ1dHVyZSB0aGF0IGNvbXBsZXRlcyB3aXRoIGEgbGlicmFyeSBtaXJyb3Igb24gdGhlIGxpYnJhcnkgYmVpbmcKICAvLy8gaW1wb3J0ZWQgb3IgZXhwb3J0ZWQgd2hlbiBpdCBpcyBsb2FkZWQsIGFuZCBpbml0aWF0ZXMgYSBsb2FkIG9mIHRoYXQKICAvLy8gbGlicmFyeSBpZiBpdCBpcyBub3QgbG9hZGVkLgogIEZ1dHVyZTxMaWJyYXJ5TWlycm9yPiBsb2FkTGlicmFyeSgpOwp9CgovLy8gQSBtaXJyb3Igb24gYSBzaG93L2hpZGUgY29tYmluYXRvciBkZWNsYXJlZCBvbiBhIGxpYnJhcnkgZGVwZW5kZW5jeS4KYWJzdHJhY3QgY2xhc3MgQ29tYmluYXRvck1pcnJvciBpbXBsZW1lbnRzIE1pcnJvciB7CiAgLy8vIFRoZSBsaXN0IG9mIGlkZW50aWZpZXJzIG9uIHRoZSBjb21iaW5hdG9yLgogIExpc3Q8U3ltYm9sPiBnZXQgaWRlbnRpZmllcnM7CgogIC8vLyBJcyBgdHJ1ZWAgaWYgdGhpcyBpcyBhICdzaG93JyBjb21iaW5hdG9yLgogIGJvb2wgZ2V0IGlzU2hvdzsKCiAgLy8vIElzIGB0cnVlYCBpZiB0aGlzIGlzIGEgJ2hpZGUnIGNvbWJpbmF0b3IuCiAgYm9vbCBnZXQgaXNIaWRlOwp9CgovKioKICogQSBbVHlwZU1pcnJvcl0gcmVmbGVjdHMgYSBEYXJ0IGxhbmd1YWdlIGNsYXNzLCB0eXBlZGVmLAogKiBmdW5jdGlvbiB0eXBlIG9yIHR5cGUgdmFyaWFibGUuCiAqLwphYnN0cmFjdCBjbGFzcyBUeXBlTWlycm9yIGltcGxlbWVudHMgRGVjbGFyYXRpb25NaXJyb3IgewogIC8qKgogICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIG1pcnJvciByZWZsZWN0cyBkeW5hbWljLCBhIG5vbi1nZW5lcmljIGNsYXNzIG9yCiAgICogdHlwZWRlZiwgb3IgYW4gaW5zdGFudGlhdGVkIGdlbmVyaWMgY2xhc3Mgb3IgdHlwZWRlZiBpbiB0aGUgY3VycmVudAogICAqIGlzb2xhdGUuIE90aGVyd2lzZSwgcmV0dXJucyBmYWxzZS4KICAgKi8KICBib29sIGdldCBoYXNSZWZsZWN0ZWRUeXBlOwoKICAvKioKICAgKiBJZiBbOmhhc1JlZmxlY3RlZFR5cGU6XSByZXR1cm5zIHRydWUsIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgW1R5cGVdLgogICAqIE90aGVyd2lzZSwgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdIGlzIHRocm93bi4KICAgKi8KICBUeXBlIGdldCByZWZsZWN0ZWRUeXBlOwoKICAvKioKICAgKiBBbiBpbW11dGFibGUgbGlzdCB3aXRoIG1pcnJvcnMgZm9yIGFsbCB0eXBlIHZhcmlhYmxlcyBmb3IgdGhpcyB0eXBlLgogICAqCiAgICogSWYgdGhpcyB0eXBlIGlzIGEgZ2VuZXJpYyBkZWNsYXJhdGlvbiBvciBhbiBpbnZvY2F0aW9uIG9mIGEgZ2VuZXJpYwogICAqIGRlY2xhcmF0aW9uLCB0aGUgcmV0dXJuZWQgbGlzdCBjb250YWlucyBtaXJyb3JzIG9uIHRoZSB0eXBlIHZhcmlhYmxlcwogICAqIGRlY2xhcmVkIGluIHRoZSBvcmlnaW5hbCBkZWNsYXJhdGlvbi4KICAgKiBPdGhlcndpc2UsIHRoZSByZXR1cm5lZCBsaXN0IGlzIGVtcHR5LgogICAqCiAgICogVGhpcyBsaXN0IHByZXNlcnZlcyB0aGUgb3JkZXIgb2YgZGVjbGFyYXRpb24gb2YgdGhlIHR5cGUgdmFyaWFibGVzLgogICAqLwogIExpc3Q8VHlwZVZhcmlhYmxlTWlycm9yPiBnZXQgdHlwZVZhcmlhYmxlczsKCiAgLyoqCiAgICogQW4gaW1tdXRhYmxlIGxpc3Qgd2l0aCBtaXJyb3JzIGZvciBhbGwgdHlwZSBhcmd1bWVudHMgZm9yCiAgICogdGhpcyB0eXBlLgogICAqCiAgICogSWYgdGhlIHJlZmxlY3RlZSBpcyBhbiBpbnZvY2F0aW9uIG9mIGEgZ2VuZXJpYyBjbGFzcywKICAgKiB0aGUgdHlwZSBhcmd1bWVudHMgYXJlIHRoZSBiaW5kaW5ncyBvZiBpdHMgdHlwZSBwYXJhbWV0ZXJzLgogICAqIElmIHRoZSByZWZsZWN0ZWUgaXMgdGhlIG9yaWdpbmFsIGRlY2xhcmF0aW9uIG9mIGEgZ2VuZXJpYywKICAgKiBpdCBoYXMgbm8gdHlwZSBhcmd1bWVudHMgYW5kIHRoaXMgbWV0aG9kIHJldHVybnMgYW4gZW1wdHkgbGlzdC4KICAgKiBJZiB0aGUgcmVmbGVjdGVlIGlzIG5vdCBnZW5lcmljLCB0aGVuCiAgICogaXQgaGFzIG5vIHR5cGUgYXJndW1lbnRzIGFuZCB0aGlzIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IGxpc3QuCiAgICoKICAgKiBUaGlzIGxpc3QgcHJlc2VydmVzIHRoZSBvcmRlciBvZiBkZWNsYXJhdGlvbiBvZiB0aGUgdHlwZSB2YXJpYWJsZXMuCiAgICovCiAgTGlzdDxUeXBlTWlycm9yPiBnZXQgdHlwZUFyZ3VtZW50czsKCiAgLyoqCiAgICogSXMgdGhpcyB0aGUgb3JpZ2luYWwgZGVjbGFyYXRpb24gb2YgdGhpcyB0eXBlPwogICAqCiAgICogRm9yIG1vc3QgY2xhc3NlcywgdGhleSBhcmUgdGhlaXIgb3duIG9yaWdpbmFsIGRlY2xhcmF0aW9uLiAgRm9yCiAgICogZ2VuZXJpYyBjbGFzc2VzLCBob3dldmVyLCB0aGVyZSBpcyBhIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhlCiAgICogb3JpZ2luYWwgY2xhc3MgZGVjbGFyYXRpb24sIHdoaWNoIGhhcyB1bmJvdW5kIHR5cGUgdmFyaWFibGVzLCBhbmQKICAgKiB0aGUgaW5zdGFudGlhdGlvbnMgb2YgZ2VuZXJpYyBjbGFzc2VzLCB3aGljaCBoYXZlIGJvdW5kIHR5cGUKICAgKiB2YXJpYWJsZXMuCiAgICovCiAgYm9vbCBnZXQgaXNPcmlnaW5hbERlY2xhcmF0aW9uOwoKICAvKioKICAgKiBBIG1pcnJvciBvbiB0aGUgb3JpZ2luYWwgZGVjbGFyYXRpb24gb2YgdGhpcyB0eXBlLgogICAqCiAgICogRm9yIG1vc3QgY2xhc3NlcywgdGhleSBhcmUgdGhlaXIgb3duIG9yaWdpbmFsIGRlY2xhcmF0aW9uLiAgRm9yCiAgICogZ2VuZXJpYyBjbGFzc2VzLCBob3dldmVyLCB0aGVyZSBpcyBhIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhlCiAgICogb3JpZ2luYWwgY2xhc3MgZGVjbGFyYXRpb24sIHdoaWNoIGhhcyB1bmJvdW5kIHR5cGUgdmFyaWFibGVzLCBhbmQKICAgKiB0aGUgaW5zdGFudGlhdGlvbnMgb2YgZ2VuZXJpYyBjbGFzc2VzLCB3aGljaCBoYXZlIGJvdW5kIHR5cGUKICAgKiB2YXJpYWJsZXMuCiAgICovCiAgVHlwZU1pcnJvciBnZXQgb3JpZ2luYWxEZWNsYXJhdGlvbjsKCiAgLyoqCiAgICogQ2hlY2tzIHRoZSBzdWJ0eXBlIHJlbGF0aW9uc2hpcCwgZGVub3RlZCBieSBgPDpgIGluIHRoZSBsYW5ndWFnZQogICAqIHNwZWNpZmljYXRpb24uCiAgICoKICAgKiBUaGlzIGlzIHRoZSB0eXBlIHJlbGF0aW9uc2hpcCB1c2VkIGluIGBpc2AgdGVzdCBjaGVja3MuCiAgICovCiAgYm9vbCBpc1N1YnR5cGVPZihUeXBlTWlycm9yIG90aGVyKTsKCiAgLyoqCiAgICogQ2hlY2tzIHRoZSBhc3NpZ25hYmlsaXR5IHJlbGF0aW9uc2hpcCwgZGVub3RlZCBieSBgPD0+YCBpbiB0aGUgbGFuZ3VhZ2UKICAgKiBzcGVjaWZpY2F0aW9uLgogICAqCiAgICogVGhpcyBpcyB0aGUgdHlwZSByZWxhdGlvbnNoaXAgdGVzdGVkIG9uIGFzc2lnbm1lbnQgaW4gY2hlY2tlZCBtb2RlLgogICAqLwogIGJvb2wgaXNBc3NpZ25hYmxlVG8oVHlwZU1pcnJvciBvdGhlcik7Cn0KCi8qKgogKiBBIFtDbGFzc01pcnJvcl0gcmVmbGVjdHMgYSBEYXJ0IGxhbmd1YWdlIGNsYXNzLgogKi8KYWJzdHJhY3QgY2xhc3MgQ2xhc3NNaXJyb3IgaW1wbGVtZW50cyBUeXBlTWlycm9yLCBPYmplY3RNaXJyb3IgewogIC8qKgogICAqIEEgbWlycm9yIG9uIHRoZSBzdXBlcmNsYXNzIG9uIHRoZSByZWZsZWN0ZWUuCiAgICoKICAgKiBJZiB0aGlzIHR5cGUgaXMgWzpPYmplY3Q6XSwgdGhlIHN1cGVyY2xhc3Mgd2lsbCBiZSBudWxsLgogICAqLwogIENsYXNzTWlycm9yIGdldCBzdXBlcmNsYXNzOwoKICAvKioKICAgKiBBIGxpc3Qgb2YgbWlycm9ycyBvbiB0aGUgc3VwZXJpbnRlcmZhY2VzIG9mIHRoZSByZWZsZWN0ZWUuCiAgICovCiAgTGlzdDxDbGFzc01pcnJvcj4gZ2V0IHN1cGVyaW50ZXJmYWNlczsKCiAgLyoqCiAgICogSXMgdGhlIHJlZmxlY3RlZSBhYnN0cmFjdD8KICAgKi8KICBib29sIGdldCBpc0Fic3RyYWN0OwoKICAvKioKICAgKiBJcyB0aGUgcmVmbGVjdGVlIGFuIGVudW0/CiAgICovCiAgYm9vbCBnZXQgaXNFbnVtOwoKICAvKioKICAgKiBSZXR1cm5zIGFuIGltbXV0YWJsZSBtYXAgb2YgdGhlIGRlY2xhcmF0aW9ucyBhY3R1YWxseSBnaXZlbiBpbiB0aGUgY2xhc3MKICAgKiBkZWNsYXJhdGlvbi4KICAgKgogICAqIFRoaXMgbWFwIGluY2x1ZGVzIGFsbCByZWd1bGFyIG1ldGhvZHMsIGdldHRlcnMsIHNldHRlcnMsIGZpZWxkcywKICAgKiBjb25zdHJ1Y3RvcnMgYW5kIHR5cGUgdmFyaWFibGVzIGFjdHVhbGx5IGRlY2xhcmVkIGluIHRoZSBjbGFzcy4gQm90aAogICAqIHN0YXRpYyBhbmQgaW5zdGFuY2UgbWVtYmVycyBhcmUgaW5jbHVkZWQsIGJ1dCBubyBpbmhlcml0ZWQgbWVtYmVycyBhcmUKICAgKiBpbmNsdWRlZC4gVGhlIG1hcCBpcyBrZXllZCBieSB0aGUgc2ltcGxlIG5hbWVzIG9mIHRoZSBkZWNsYXJhdGlvbnMuCiAgICoKICAgKiBUaGlzIGRvZXMgbm90IGluY2x1ZGUgaW5oZXJpdGVkIG1lbWJlcnMuCiAgICovCiAgTWFwPFN5bWJvbCwgRGVjbGFyYXRpb25NaXJyb3I+IGdldCBkZWNsYXJhdGlvbnM7CgogIC8qKgogICAqIFJldHVybnMgYSBtYXAgb2YgdGhlIG1ldGhvZHMsIGdldHRlcnMgYW5kIHNldHRlcnMgb2YgYW4gaW5zdGFuY2Ugb2YgdGhlCiAgICogY2xhc3MuCiAgICoKICAgKiBUaGUgaW50ZW50IGlzIHRvIGNhcHR1cmUgdGhvc2UgbWVtYmVycyB0aGF0IGNvbnN0aXR1dGUgdGhlIEFQSSBvZiBhbgogICAqIGluc3RhbmNlLiBIZW5jZSBmaWVsZHMgYXJlIG5vdCBpbmNsdWRlZCwgYnV0IHRoZSBnZXR0ZXJzIGFuZCBzZXR0ZXJzCiAgICogaW1wbGljaXRseSBpbnRyb2R1Y2VkIGJ5IGZpZWxkcyBhcmUgaW5jbHVkZWQuIFRoZSBtYXAgaW5jbHVkZXMgbWV0aG9kcywKICAgKiBnZXR0ZXJzIGFuZCBzZXR0ZXJzIHRoYXQgYXJlIGluaGVyaXRlZCBhcyB3ZWxsIGFzIHRob3NlIGludHJvZHVjZWQgYnkgdGhlCiAgICogY2xhc3MgaXRzZWxmLgogICAqCiAgICogVGhlIG1hcCBpcyBrZXllZCBieSB0aGUgc2ltcGxlIG5hbWVzIG9mIHRoZSBtZW1iZXJzLgogICAqLwogIE1hcDxTeW1ib2wsIE1ldGhvZE1pcnJvcj4gZ2V0IGluc3RhbmNlTWVtYmVyczsKCiAgLyoqCiAgICogUmV0dXJucyBhIG1hcCBvZiB0aGUgc3RhdGljIG1ldGhvZHMsIGdldHRlcnMgYW5kIHNldHRlcnMgb2YgdGhlIGNsYXNzLgogICAqCiAgICogVGhlIGludGVudCBpcyB0byBjYXB0dXJlIHRob3NlIG1lbWJlcnMgdGhhdCBjb25zdGl0dXRlIHRoZSBBUEkgb2YgYSBjbGFzcy4KICAgKiBIZW5jZSBmaWVsZHMgYXJlIG5vdCBpbmNsdWRlZCwgYnV0IHRoZSBnZXR0ZXJzIGFuZCBzZXR0ZXJzIGltcGxpY2l0bHkKICAgKiBpbnRyb2R1Y2VkIGJ5IGZpZWxkcyBhcmUgaW5jbHVkZWQuCiAgICoKICAgKiBUaGUgbWFwIGlzIGtleWVkIGJ5IHRoZSBzaW1wbGUgbmFtZXMgb2YgdGhlIG1lbWJlcnMuCiAgICovCiAgTWFwPFN5bWJvbCwgTWV0aG9kTWlycm9yPiBnZXQgc3RhdGljTWVtYmVyczsKCiAgLyoqCiAgICogVGhlIG1peGluIG9mIHRoaXMgY2xhc3MuCiAgICoKICAgKiBJZiB0aGlzIGNsYXNzIGlzIHRoZSByZXN1bHQgb2YgYSBtaXhpbiBhcHBsaWNhdGlvbiBvZiB0aGUgZm9ybSBTIHdpdGggTSwKICAgKiByZXR1cm5zIGEgY2xhc3MgbWlycm9yIG9uIE0uIE90aGVyd2lzZSByZXR1cm5zIGEgY2xhc3MgbWlycm9yIG9uCiAgICogdGhlIHJlZmxlY3RlZS4KICAgKi8KICBDbGFzc01pcnJvciBnZXQgbWl4aW47CgogIC8vIFRPRE8oYWhlKTogV2hhdCBhYm91dDoKICAvLyAvLy8gRmluZHMgdGhlIGluc3RhbmNlIG1lbWJlciBuYW1lZCBbbmFtZV0gZGVjbGFyZWQgb3IgaW5oZXJpdGVkIGluIHRoZQogIC8vIC8vLyByZWZsZWN0ZWQgY2xhc3MuCiAgLy8gRGVjbGFyYXRpb25NaXJyb3IgaW5zdGFuY2VMb29rdXAoU3ltYm9sIG5hbWUpOwoKICAvKioKICAgKiBJbnZva2VzIHRoZSBuYW1lZCBjb25zdHJ1Y3RvciBhbmQgcmV0dXJucyBhIG1pcnJvciBvbiB0aGUgcmVzdWx0LgogICAqCiAgICogTGV0ICpjKiBiZSB0aGUgY2xhc3MgcmVmbGVjdGVkIGJ5IHRoaXMgbWlycm9yLAogICAqIGxldCAqYTEsIC4uLiwgYW4qIGJlIHRoZSBlbGVtZW50cyBvZiBbcG9zaXRpb25hbEFyZ3VtZW50c10sCiAgICogbGV0ICprMSwgLi4uLCBrbSogYmUgdGhlIGlkZW50aWZpZXJzIGRlbm90ZWQgYnkgdGhlIGVsZW1lbnRzIG9mCiAgICogW25hbWVkQXJndW1lbnRzLmtleXNdLAogICAqIGFuZCBsZXQgKnYxLCAuLi4sIHZtKiBiZSB0aGUgZWxlbWVudHMgb2YgW25hbWVkQXJndW1lbnRzLnZhbHVlc10uCiAgICoKICAgKiBJZiBbY29uc3RydWN0b3JOYW1lXSB3YXMgY3JlYXRlZCBmcm9tIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gdGhpcyBtZXRob2QKICAgKiB3aWxsIGV4ZWN1dGUgdGhlIGluc3RhbmNlIGNyZWF0aW9uIGV4cHJlc3Npb24KICAgKiAqbmV3IGMoYTEsIC4uLiwgYW4sIGsxOiB2MSwgLi4uLCBrbTogdm0pKiBpbiBhIHNjb3BlIHRoYXQgaGFzIGFjY2VzcyB0bwogICAqIHRoZSBwcml2YXRlIG1lbWJlcnMgb2YgKmMqLgogICAqCiAgICogT3RoZXJ3aXNlLCBsZXQgKmYqIGJlIHRoZSBzaW1wbGUgbmFtZSBvZiB0aGUgY29uc3RydWN0b3IgZGVub3RlZCBieQogICAqIFtjb25zdHJ1Y3Rvck5hbWVdLiBUaGVuIHRoaXMgbWV0aG9kIHdpbGwgZXhlY3V0ZSB0aGUgaW5zdGFuY2UgY3JlYXRpb24KICAgKiBleHByZXNzaW9uICpuZXcgYy5mKGExLCAuLi4sIGFuLCBrMTogdjEsIC4uLiwga206IHZtKSogaW4gYSBzY29wZSB0aGF0IGhhcwogICAqIGFjY2VzcyB0byB0aGUgcHJpdmF0ZSBtZW1iZXJzIG9mICpjKi4KICAgKgogICAqIEluIGVpdGhlciBjYXNlOgogICAqCiAgICogKiBJZiB0aGUgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gYSByZXN1bHQgKnIqLCB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZQogICAqICAgcmVzdWx0IG9mIGNhbGxpbmcgW3JlZmxlY3RdXCgqcipcKS4KICAgKiAqIElmIGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb24gY2F1c2VzIGEgY29tcGlsYXRpb24gZXJyb3IsIHRoZSBlZmZlY3QgaXMKICAgKiAgIHRoZSBzYW1lIGFzIGlmIGEgbm9uLXJlZmxlY3RpdmUgY29tcGlsYXRpb24gZXJyb3IgaGFkIGJlZW4gZW5jb3VudGVyZWQuCiAgICogKiBJZiBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9uIHRocm93cyBhbiBleGNlcHRpb24gKmUqICh0aGF0IGl0IGRvZXMgbm90CiAgICogICBjYXRjaCksIHRoaXMgbWV0aG9kIHRocm93cyAqZSouCiAgICovCiAgSW5zdGFuY2VNaXJyb3IgbmV3SW5zdGFuY2UoU3ltYm9sIGNvbnN0cnVjdG9yTmFtZSwgTGlzdCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBbTWFwPFN5bWJvbCwgZHluYW1pYz4gbmFtZWRBcmd1bWVudHNdKTsKCiAgLyoqCiAgICogV2hldGhlciB0aGlzIG1pcnJvciBpcyBlcXVhbCB0byBbb3RoZXJdLgogICAqCiAgICogVGhlIGVxdWFsaXR5IGhvbGRzIGlmIGFuZCBvbmx5IGlmCiAgICoKICAgKiAxLiBbb3RoZXJdIGlzIGEgbWlycm9yIG9mIHRoZSBzYW1lIGtpbmQsIGFuZAogICAqIDIuIFRoaXMgbWlycm9yIGFuZCBbb3RoZXJdIHJlZmxlY3QgdGhlIHNhbWUgY2xhc3MuCiAgICoKICAgKiBOb3RlIHRoYXQgaWYgdGhlIHJlZmxlY3RlZCBjbGFzcyBpcyBhbiBpbnZvY2F0aW9uIG9mIGEgZ2VuZXJpYyBjbGFzcywgMi4KICAgKiBpbXBsaWVzIHRoYXQgdGhlIHJlZmxlY3RlZCBjbGFzcyBhbmQgW290aGVyXSBoYXZlIGVxdWFsIHR5cGUgYXJndW1lbnRzLgogICAqLwogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGNsYXNzIGRlbm90ZWQgYnkgdGhlIHJlY2VpdmVyIGlzIGEgc3ViY2xhc3Mgb2YgdGhlCiAgICogY2xhc3MgZGVub3RlZCBieSB0aGUgYXJndW1lbnQuCiAgICoKICAgKiBOb3RlIHRoYXQgdGhlIHN1YmNsYXNzIHJlbGF0aW9uc2hpcCBpcyByZWZsZXhpdmUuCiAgICovCiAgYm9vbCBpc1N1YmNsYXNzT2YoQ2xhc3NNaXJyb3Igb3RoZXIpOwp9CgovKioKICogQSBbRnVuY3Rpb25UeXBlTWlycm9yXSByZXByZXNlbnRzIHRoZSB0eXBlIG9mIGEgZnVuY3Rpb24gaW4gdGhlCiAqIERhcnQgbGFuZ3VhZ2UuCiAqLwphYnN0cmFjdCBjbGFzcyBGdW5jdGlvblR5cGVNaXJyb3IgaW1wbGVtZW50cyBDbGFzc01pcnJvciB7CiAgLyoqCiAgICogUmV0dXJucyB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIHJlZmxlY3RlZS4KICAgKi8KICBUeXBlTWlycm9yIGdldCByZXR1cm5UeXBlOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbGlzdCBvZiB0aGUgcGFyYW1ldGVyIHR5cGVzIG9mIHRoZSByZWZsZWN0ZWUuCiAgICovCiAgTGlzdDxQYXJhbWV0ZXJNaXJyb3I+IGdldCBwYXJhbWV0ZXJzOwoKICAvKioKICAgKiBBIG1pcnJvciBvbiB0aGUgWzpjYWxsOl0gbWV0aG9kIGZvciB0aGUgcmVmbGVjdGVlLgogICAqLwogIC8vIFRoaXMgaXMgb25seSBoZXJlIGJlY2F1c2UgaW4gdGhlIHBhc3QgdGhlIFZNIGRpZCBub3QgaW1wbGVtZW50IGEgY2FsbAogIC8vIG1ldGhvZCBvbiBjbG9zdXJlcy4KICBNZXRob2RNaXJyb3IgZ2V0IGNhbGxNZXRob2Q7Cn0KCi8qKgogKiBBIFtUeXBlVmFyaWFibGVNaXJyb3JdIHJlcHJlc2VudHMgYSB0eXBlIHBhcmFtZXRlciBvZiBhIGdlbmVyaWMgdHlwZS4KICovCmFic3RyYWN0IGNsYXNzIFR5cGVWYXJpYWJsZU1pcnJvciBleHRlbmRzIFR5cGVNaXJyb3IgewogIC8qKgogICAqIEEgbWlycm9yIG9uIHRoZSB0eXBlIHRoYXQgaXMgdGhlIHVwcGVyIGJvdW5kIG9mIHRoaXMgdHlwZSB2YXJpYWJsZS4KICAgKi8KICBUeXBlTWlycm9yIGdldCB1cHBlckJvdW5kOwoKICAvKioKICAgKiBJcyB0aGUgcmVmbGVjdGVlIHN0YXRpYz8KICAgKgogICAqIEZvciB0aGUgcHVycG9zZXMgb2YgdGhlIG1pcnJvcnMgbGlicmFyeSwgdHlwZSB2YXJpYWJsZXMgYXJlIGNvbnNpZGVyZWQKICAgKiBub24tc3RhdGljLgogICAqLwogIGJvb2wgZ2V0IGlzU3RhdGljOwoKICAvKioKICAgKiBXaGV0aGVyIFtvdGhlcl0gaXMgYSBbVHlwZVZhcmlhYmxlTWlycm9yXSBvbiB0aGUgc2FtZSB0eXBlIHZhcmlhYmxlIGFzIHRoaXMKICAgKiBtaXJyb3IuCiAgICoKICAgKiBUaGUgZXF1YWxpdHkgaG9sZHMgaWYgYW5kIG9ubHkgaWYKICAgKgogICAqIDEuIFtvdGhlcl0gaXMgYSBtaXJyb3Igb2YgdGhlIHNhbWUga2luZCwgYW5kCiAgICogMi4gWzpzaW1wbGVOYW1lID09IG90aGVyLnNpbXBsZU5hbWU6XSBhbmQgWzpvd25lciA9PSBvdGhlci5vd25lcjpdLgogICAqLwogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpOwp9CgovKioKICogQSBbVHlwZWRlZk1pcnJvcl0gcmVwcmVzZW50cyBhIHR5cGVkZWYgaW4gYSBEYXJ0IGxhbmd1YWdlIHByb2dyYW0uCiAqLwphYnN0cmFjdCBjbGFzcyBUeXBlZGVmTWlycm9yIGltcGxlbWVudHMgVHlwZU1pcnJvciB7CiAgLyoqCiAgICogVGhlIGRlZmluaW5nIHR5cGUgZm9yIHRoaXMgdHlwZWRlZi4KICAgKgogICAqIElmIHRoZSB0eXBlIHJlZmVycmVkIHRvIGJ5IHRoZSByZWZsZWN0ZWUgaXMgYSBmdW5jdGlvbiB0eXBlICpGKiwgdGhlCiAgICogcmVzdWx0IHdpbGwgYmUgWzpGdW5jdGlvblR5cGVNaXJyb3I6XSByZWZsZWN0aW5nICpGKiB3aGljaCBpcyBhYnN0cmFjdAogICAqIGFuZCBoYXMgYW4gYWJzdHJhY3QgbWV0aG9kIFs6Y2FsbDpdIHdob3NlIHNpZ25hdHVyZSBjb3JyZXNwb25kcyB0byAqRiouCiAgICogRm9yIGluc3RhbmNlIFs6dm9pZCBmKGludCk6XSBpcyB0aGUgcmVmZXJlbnQgZm9yIFs6dHlwZWRlZiB2b2lkIGYoaW50KTpdLgogICAqLwogIEZ1bmN0aW9uVHlwZU1pcnJvciBnZXQgcmVmZXJlbnQ7Cn0KCi8qKgogKiBBIFtNZXRob2RNaXJyb3JdIHJlZmxlY3RzIGEgRGFydCBsYW5ndWFnZSBmdW5jdGlvbiwgbWV0aG9kLAogKiBjb25zdHJ1Y3RvciwgZ2V0dGVyLCBvciBzZXR0ZXIuCiAqLwphYnN0cmFjdCBjbGFzcyBNZXRob2RNaXJyb3IgaW1wbGVtZW50cyBEZWNsYXJhdGlvbk1pcnJvciB7CiAgLyoqCiAgICogQSBtaXJyb3Igb24gdGhlIHJldHVybiB0eXBlIGZvciB0aGUgcmVmbGVjdGVlLgogICAqLwogIFR5cGVNaXJyb3IgZ2V0IHJldHVyblR5cGU7CgogIC8qKgogICAqIFRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIHJlZmxlY3RlZSwgaWYgYXZhaWxhYmxlLiBPdGhlcndpc2UgbnVsbC4KICAgKi8KICBTdHJpbmcgZ2V0IHNvdXJjZTsKCiAgLyoqCiAgICogQSBsaXN0IG9mIG1pcnJvcnMgb24gdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSByZWZsZWN0ZWUuCiAgICovCiAgTGlzdDxQYXJhbWV0ZXJNaXJyb3I+IGdldCBwYXJhbWV0ZXJzOwoKICAvKioKICAgKiBBIGZ1bmN0aW9uIGlzIGNvbnNpZGVyZWQgbm9uLXN0YXRpYyBpZmYgaXQgaXMgcGVybWl0ZWQgdG8gcmVmZXIgdG8gJ3RoaXMnLgogICAqCiAgICogTm90ZSB0aGF0IGdlbmVyYXRpdmUgY29uc3RydWN0b3JzIGFyZSBjb25zaWRlcmVkIG5vbi1zdGF0aWMsIHdoZXJlYXMKICAgKiBmYWN0b3J5IGNvbnN0cnVjdG9ycyBhcmUgY29uc2lkZXJlZCBzdGF0aWMuCiAgICovCiAgYm9vbCBnZXQgaXNTdGF0aWM7CgogIC8qKgogICAqIElzIHRoZSByZWZsZWN0ZWUgYWJzdHJhY3Q/CiAgICovCiAgYm9vbCBnZXQgaXNBYnN0cmFjdDsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSByZWZsZWN0ZWUgaXMgc3ludGhldGljLCBhbmQgcmV0dXJucyBmYWxzZSBvdGhlcndpc2UuCiAgICoKICAgKiBBIHJlZmxlY3RlZSBpcyBzeW50aGV0aWMgaWYgaXQgaXMgYSBnZXR0ZXIgb3Igc2V0dGVyIGltcGxpY2l0bHkgaW50cm9kdWNlZAogICAqIGZvciBhIGZpZWxkIG9yIFR5cGUsIG9yIGlmIGl0IGlzIGEgY29uc3RydWN0b3IgdGhhdCB3YXMgaW1wbGljaXRseQogICAqIGludHJvZHVjZWQgYXMgYSBkZWZhdWx0IGNvbnN0cnVjdG9yIG9yIGFzIHBhcnQgb2YgYSBtaXhpbiBhcHBsaWNhdGlvbi4KICAgKi8KICBib29sIGdldCBpc1N5bnRoZXRpYzsKCiAgLyoqCiAgICogSXMgdGhlIHJlZmxlY3RlZSBhIHJlZ3VsYXIgZnVuY3Rpb24gb3IgbWV0aG9kPwogICAqCiAgICogQSBmdW5jdGlvbiBvciBtZXRob2QgaXMgcmVndWxhciBpZiBpdCBpcyBub3QgYSBnZXR0ZXIsIHNldHRlciwgb3IKICAgKiBjb25zdHJ1Y3Rvci4gIE5vdGUgdGhhdCBvcGVyYXRvcnMsIGJ5IHRoaXMgZGVmaW5pdGlvbiwgYXJlCiAgICogcmVndWxhciBtZXRob2RzLgogICAqLwogIGJvb2wgZ2V0IGlzUmVndWxhck1ldGhvZDsKCiAgLyoqCiAgICogSXMgdGhlIHJlZmxlY3RlZSBhbiBvcGVyYXRvcj8KICAgKi8KICBib29sIGdldCBpc09wZXJhdG9yOwoKICAvKioKICAgKiBJcyB0aGUgcmVmbGVjdGVlIGEgZ2V0dGVyPwogICAqLwogIGJvb2wgZ2V0IGlzR2V0dGVyOwoKICAvKioKICAgKiBJcyB0aGUgcmVmbGVjdGVlIGEgc2V0dGVyPwogICAqLwogIGJvb2wgZ2V0IGlzU2V0dGVyOwoKICAvKioKICAgKiBJcyB0aGUgcmVmbGVjdGVlIGEgY29uc3RydWN0b3I/CiAgICovCiAgYm9vbCBnZXQgaXNDb25zdHJ1Y3RvcjsKCiAgLyoqCiAgICogVGhlIGNvbnN0cnVjdG9yIG5hbWUgZm9yIG5hbWVkIGNvbnN0cnVjdG9ycyBhbmQgZmFjdG9yeSBtZXRob2RzLgogICAqCiAgICogRm9yIHVubmFtZWQgY29uc3RydWN0b3JzLCB0aGlzIGlzIHRoZSBlbXB0eSBzdHJpbmcuICBGb3IKICAgKiBub24tY29uc3RydWN0b3JzLCB0aGlzIGlzIHRoZSBlbXB0eSBzdHJpbmcuCiAgICoKICAgKiBGb3IgZXhhbXBsZSwgWzonYmFyJzpdIGlzIHRoZSBjb25zdHJ1Y3RvciBuYW1lIGZvciBjb25zdHJ1Y3RvcgogICAqIFs6Rm9vLmJhcjpdIG9mIHR5cGUgWzpGb286XS4KICAgKi8KICBTeW1ib2wgZ2V0IGNvbnN0cnVjdG9yTmFtZTsKCiAgLyoqCiAgICogSXMgdGhlIHJlZmxlY3RlZSBhIGNvbnN0IGNvbnN0cnVjdG9yPwogICAqLwogIGJvb2wgZ2V0IGlzQ29uc3RDb25zdHJ1Y3RvcjsKCiAgLyoqCiAgICogSXMgdGhlIHJlZmxlY3RlZSBhIGdlbmVyYXRpdmUgY29uc3RydWN0b3I/CiAgICovCiAgYm9vbCBnZXQgaXNHZW5lcmF0aXZlQ29uc3RydWN0b3I7CgogIC8qKgogICAqIElzIHRoZSByZWZsZWN0ZWUgYSByZWRpcmVjdGluZyBjb25zdHJ1Y3Rvcj8KICAgKi8KICBib29sIGdldCBpc1JlZGlyZWN0aW5nQ29uc3RydWN0b3I7CgogIC8qKgogICAqIElzIHRoZSByZWZsZWN0ZWUgYSBmYWN0b3J5IGNvbnN0cnVjdG9yPwogICAqLwogIGJvb2wgZ2V0IGlzRmFjdG9yeUNvbnN0cnVjdG9yOwoKICAvKioKICAgKiBXaGV0aGVyIHRoaXMgbWlycm9yIGlzIGVxdWFsIHRvIFtvdGhlcl0uCiAgICoKICAgKiBUaGUgZXF1YWxpdHkgaG9sZHMgaWYgYW5kIG9ubHkgaWYKICAgKgogICAqIDEuIFtvdGhlcl0gaXMgYSBtaXJyb3Igb2YgdGhlIHNhbWUga2luZCwgYW5kCiAgICogMi4gWzpzaW1wbGVOYW1lID09IG90aGVyLnNpbXBsZU5hbWU6XSBhbmQgWzpvd25lciA9PSBvdGhlci5vd25lcjpdLgogICAqLwogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpOwp9CgovKioKICogQSBbVmFyaWFibGVNaXJyb3JdIHJlZmxlY3RzIGEgRGFydCBsYW5ndWFnZSB2YXJpYWJsZSBkZWNsYXJhdGlvbi4KICovCmFic3RyYWN0IGNsYXNzIFZhcmlhYmxlTWlycm9yIGltcGxlbWVudHMgRGVjbGFyYXRpb25NaXJyb3IgewogIC8qKgogICAqIFJldHVybnMgYSBtaXJyb3Igb24gdGhlIHR5cGUgb2YgdGhlIHJlZmxlY3RlZS4KICAgKi8KICBUeXBlTWlycm9yIGdldCB0eXBlOwoKICAvKioKICAgKiBSZXR1cm5zIFs6dHJ1ZTpdIGlmIHRoZSByZWZsZWN0ZWUgaXMgYSBzdGF0aWMgdmFyaWFibGUuCiAgICogT3RoZXJ3aXNlIHJldHVybnMgWzpmYWxzZTpdLgogICAqCiAgICogRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGUgbWlycm9yIGxpYnJhcnksIHRvcC1sZXZlbCB2YXJpYWJsZXMgYXJlCiAgICogaW1wbGljaXRseSBkZWNsYXJlZCBzdGF0aWMuCiAgICovCiAgYm9vbCBnZXQgaXNTdGF0aWM7CgogIC8qKgogICAqIFJldHVybnMgWzp0cnVlOl0gaWYgdGhlIHJlZmxlY3RlZSBpcyBhIGZpbmFsIHZhcmlhYmxlLgogICAqIE90aGVyd2lzZSByZXR1cm5zIFs6ZmFsc2U6XS4KICAgKi8KICBib29sIGdldCBpc0ZpbmFsOwoKICAvKioKICAgKiBSZXR1cm5zIFs6dHJ1ZTpdIGlmIHRoZSByZWZsZWN0ZWUgaXMgZGVjbGFyZWQgWzpjb25zdDpdLgogICAqIE90aGVyd2lzZSByZXR1cm5zIFs6ZmFsc2U6XS4KICAgKi8KICBib29sIGdldCBpc0NvbnN0OwoKICAvKioKICAgKiBXaGV0aGVyIHRoaXMgbWlycm9yIGlzIGVxdWFsIHRvIFtvdGhlcl0uCiAgICoKICAgKiBUaGUgZXF1YWxpdHkgaG9sZHMgaWYgYW5kIG9ubHkgaWYKICAgKgogICAqIDEuIFtvdGhlcl0gaXMgYSBtaXJyb3Igb2YgdGhlIHNhbWUga2luZCwgYW5kCiAgICogMi4gWzpzaW1wbGVOYW1lID09IG90aGVyLnNpbXBsZU5hbWU6XSBhbmQgWzpvd25lciA9PSBvdGhlci5vd25lcjpdLgogICAqLwogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpOwp9CgovKioKICogQSBbUGFyYW1ldGVyTWlycm9yXSByZWZsZWN0cyBhIERhcnQgZm9ybWFsIHBhcmFtZXRlciBkZWNsYXJhdGlvbi4KICovCmFic3RyYWN0IGNsYXNzIFBhcmFtZXRlck1pcnJvciBpbXBsZW1lbnRzIFZhcmlhYmxlTWlycm9yIHsKICAvKioKICAgKiBBIG1pcnJvciBvbiB0aGUgdHlwZSBvZiB0aGlzIHBhcmFtZXRlci4KICAgKi8KICBUeXBlTWlycm9yIGdldCB0eXBlOwoKICAvKioKICAgKiBSZXR1cm5zIFs6dHJ1ZTpdIGlmIHRoZSByZWZsZWN0ZWUgaXMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyLgogICAqIE90aGVyd2lzZSByZXR1cm5zIFs6ZmFsc2U6XS4KICAgKi8KICBib29sIGdldCBpc09wdGlvbmFsOwoKICAvKioKICAgKiBSZXR1cm5zIFs6dHJ1ZTpdIGlmIHRoZSByZWZsZWN0ZWUgaXMgYSBuYW1lZCBwYXJhbWV0ZXIuCiAgICogT3RoZXJ3aXNlIHJldHVybnMgWzpmYWxzZTpdLgogICAqLwogIGJvb2wgZ2V0IGlzTmFtZWQ7CgogIC8qKgogICAqIFJldHVybnMgWzp0cnVlOl0gaWYgdGhlIHJlZmxlY3RlZSBoYXMgZXhwbGljaXRseSBkZWNsYXJlZCBhIGRlZmF1bHQgdmFsdWUuCiAgICogT3RoZXJ3aXNlIHJldHVybnMgWzpmYWxzZTpdLgogICAqLwogIGJvb2wgZ2V0IGhhc0RlZmF1bHRWYWx1ZTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBhbiBvcHRpb25hbCBwYXJhbWV0ZXIuCiAgICoKICAgKiBSZXR1cm5zIGFuIFtJbnN0YW5jZU1pcnJvcl0gb24gdGhlIChjb21waWxlLXRpbWUgY29uc3RhbnQpCiAgICogZGVmYXVsdCB2YWx1ZSBmb3IgYW4gb3B0aW9uYWwgcGFyYW1ldGVyLgogICAqIElmIG5vIGRlZmF1bHQgdmFsdWUgaXMgZGVjbGFyZWQsIGl0IGRlZmF1bHRzIHRvIGBudWxsYAogICAqIGFuZCBhIG1pcnJvciBvZiBgbnVsbGAgaXMgcmV0dXJuZWQuCiAgICoKICAgKiBSZXR1cm5zIGBudWxsYCBmb3IgYSByZXF1aXJlZCBwYXJhbWV0ZXIuCiAgICovCiAgSW5zdGFuY2VNaXJyb3IgZ2V0IGRlZmF1bHRWYWx1ZTsKfQoKLyoqCiAqIEEgW1NvdXJjZUxvY2F0aW9uXSBkZXNjcmliZXMgdGhlIHNwYW4gb2YgYW4gZW50aXR5IGluIERhcnQgc291cmNlIGNvZGUuCiAqLwphYnN0cmFjdCBjbGFzcyBTb3VyY2VMb2NhdGlvbiB7CiAgLyoqCiAgICogVGhlIDEtYmFzZWQgbGluZSBudW1iZXIgZm9yIHRoaXMgc291cmNlIGxvY2F0aW9uLgogICAqCiAgICogQSB2YWx1ZSBvZiAwIG1lYW5zIHRoYXQgdGhlIGxpbmUgbnVtYmVyIGlzIHVua25vd24uCiAgICovCiAgaW50IGdldCBsaW5lOwoKICAvKioKICAgKiBUaGUgMS1iYXNlZCBjb2x1bW4gbnVtYmVyIGZvciB0aGlzIHNvdXJjZSBsb2NhdGlvbi4KICAgKgogICAqIEEgdmFsdWUgb2YgMCBtZWFucyB0aGF0IHRoZSBjb2x1bW4gbnVtYmVyIGlzIHVua25vd24uCiAgICovCiAgaW50IGdldCBjb2x1bW47CgogIC8qKgogICAqIFJldHVybnMgdGhlIFVSSSB3aGVyZSB0aGUgc291cmNlIG9yaWdpbmF0ZWQuCiAgICovCiAgVXJpIGdldCBzb3VyY2VVcmk7Cn0KCi8qKgogKiBDbGFzcyB1c2VkIGZvciBlbmNvZGluZyBjb21tZW50cyBhcyBtZXRhZGF0YSBhbm5vdGF0aW9ucy4KICovCmNsYXNzIENvbW1lbnQgewogIC8qKgogICAqIFRoZSBjb21tZW50IHRleHQgYXMgd3JpdHRlbiBpbiB0aGUgc291cmNlIHRleHQuCiAgICovCiAgZmluYWwgU3RyaW5nIHRleHQ7CgogIC8qKgogICAqIFRoZSBjb21tZW50IHRleHQgd2l0aG91dCB0aGUgc3RhcnQsIGVuZCwgYW5kIHBhZGRpbmcgdGV4dC4KICAgKgogICAqIEZvciBleGFtcGxlLCBpZiBbdGV4dF0gaXMgWzogLyoqIENvbW1lbnQgdGV4dC4gKi8gOl0gdGhlbiB0aGUgW3RyaW1tZWRUZXh0XQogICAqIGlzIFs6IENvbW1lbnQgdGV4dC4gOl0uCiAgICovCiAgZmluYWwgU3RyaW5nIHRyaW1tZWRUZXh0OwoKICAvKioKICAgKiBJcyBbOnRydWU6XSBpZiB0aGlzIGNvbW1lbnQgaXMgYSBkb2N1bWVudGF0aW9uIGNvbW1lbnQuCiAgICoKICAgKiBUaGF0IGlzLCB0aGF0IHRoZSBjb21tZW50IGlzIGVpdGhlciBlbmNsb3NlZCBpbiBbOiAvKiogLi4uICovIDpdIG9yIHN0YXJ0cwogICAqIHdpdGggWzogLy8vIDpdLgogICAqLwogIGZpbmFsIGJvb2wgaXNEb2NDb21tZW50OwoKICBjb25zdCBDb21tZW50KHRoaXMudGV4dCwgdGhpcy50cmltbWVkVGV4dCwgdGhpcy5pc0RvY0NvbW1lbnQpOwp9CgovKioKICogQW5ub3RhdGlvbiBkZXNjcmliaW5nIGhvdyAiZGFydDptaXJyb3JzIiBpcyB1c2VkIChFWFBFUklNRU5UQUwpLgogKgogKiBXaGVuIHVzZWQgYXMgbWV0YWRhdGEgb24gYW4gaW1wb3J0IG9mICJkYXJ0Om1pcnJvcnMiIGluIGxpYnJhcnkgKkwqLCB0aGlzCiAqIGNsYXNzIGRlc2NyaWJlcyBob3cgImRhcnQ6bWlycm9ycyIgaXMgdXNlZCBieSBsaWJyYXJ5ICpMKiB1bmxlc3Mgb3ZlcnJpZGRlbi4KICogU2VlIFtvdmVycmlkZV0uCiAqCiAqIFRoZSBmb2xsb3dpbmcgdGV4dCBpcyBub24tbm9ybWF0aXZlOgogKgogKiBJbiBzb21lIHNjZW5hcmlvcywgZm9yIGV4YW1wbGUsIHdoZW4gbWluaWZ5aW5nIERhcnQgY29kZSwgb3Igd2hlbiBnZW5lcmF0aW5nCiAqIEphdmFTY3JpcHQgY29kZSBmcm9tIGEgRGFydCBwcm9ncmFtLCB0aGUgc2l6ZSBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlIG91dHB1dAogKiBjYW4gc3VmZmVyIGZyb20gdXNlIG9mIHJlZmxlY3Rpb24uICBJbiB0aG9zZSBjYXNlcywgdGVsbGluZyB0aGUgY29tcGlsZXIKICogd2hhdCBpcyB1c2VkLCBjYW4gaGF2ZSBhIHNpZ25pZmljYW50IGltcGFjdC4KICoKICogRXhhbXBsZSB1c2FnZToKICoKICogICAgIEBNaXJyb3JzVXNlZChzeW1ib2xzOiAnZm9vJykKICogICAgIGltcG9ydCAnZGFydDptaXJyb3JzJzsKICoKICogICAgIGNsYXNzIEZvbyB7CiAqICAgICAgIG5vU3VjaE1ldGhvZChJbnZvY2F0aW9uIGludm9jYXRpb24pIHsKICogICAgICAgICBwcmludChNaXJyb3JTeXN0ZW0uZ2V0TmFtZShpbnZvY2F0aW9uLm1lbWJlck5hbWUpKTsKICogICAgICAgfQogKiAgICAgfQogKgogKiAgICAgbWFpbigpIHsKICogICAgICAgbmV3IEZvbygpLmZvbygpOyAvLyBQcmludHMgImZvbyIuCiAqICAgICAgIG5ldyBGb28oKS5iYXIoKTsgLy8gTWlnaHQgcHJpbnQgYW4gYXJiaXRyYXJ5IChtYW5nbGVkKSBuYW1lLCAiYmFyIi4KICogICAgIH0KICoKICogRm9yIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIFtNaXJyb3JzVXNlZF0gY29uc3RydWN0b3IKICogc2VlIHRoZSBjb21tZW50cyBmb3IgW3N5bWJvbHNdLCBbdGFyZ2V0c10sIFttZXRhVGFyZ2V0c10gYW5kIFtvdmVycmlkZV0uCiAqCiAqIEFuIGltcG9ydCBvZiBgZGFydDptaXJyb3JzYCBtYXkgaGF2ZSBtdWx0aXBsZSBbTWlycm9yc1VzZWRdIGFubm90YXRpb25zLiBUaGlzCiAqIGlzIHBhcnRpY3VsYXJseSBoZWxwZnVsIHRvIHNwZWNpZnkgb3ZlcnJpZGVzIGZvciBzcGVjaWZpYyBsaWJyYXJpZXMuIEZvcgogKiBleGFtcGxlOgogKgogKiAgICAgQE1pcnJvcnNVc2VkKHRhcmdldHM6ICdmb28uQmFyJywgb3ZlcnJpZGU6ICdmb28nKQogKiAgICAgQE1pcnJvcnNVc2VkKHRhcmdldHM6ICdCYXInKQogKiAgICAgaW1wb3J0ICdkYXJ0Om1pcnJvcnMnOwogKgogKiB3aWxsIGVuc3VyZSB0aGF0IHRoZSB0YXJnZXQgYEJhcmAgZnJvbSB0aGUgY3VycmVudCBsaWJyYXJ5IGFuZCBmcm9tIGxpYnJhcnkKICogYGZvb2AgaXMgYXZhaWxhYmxlIGZvciByZWZsZWN0aW9uLiBTZWUgYWxzbyBbb3ZlcnJpZGVdLgogKi8KQERlcHJlY2F0ZWQoIk5vIGxvbmdlciBoYXMgYW55IGVmZmVjdC4gV2lsbCBiZSByZW1vdmVkIGluIGEgbGF0ZXIgcmVsZWFzZS4iKQpjbGFzcyBNaXJyb3JzVXNlZCB7CiAgLy8gTm90ZTogdGhlIGZpZWxkcyBvZiB0aGlzIGNsYXNzIGFyZSB1bnR5cGVkLiAgVGhpcyBpcyBiZWNhdXNlIHRoZSBtb3N0CiAgLy8gY29udmVuaWVudCB3YXkgdG8gc3BlY2lmeSBzeW1ib2xzIHRvZGF5IGlzIHVzaW5nIGEgc2luZ2xlIHN0cmluZy4gSW4KICAvLyBzb21lIGNhc2VzLCBhIGNvbnN0IGxpc3Qgb2YgY2xhc3NlcyBtaWdodCBiZSBjb252ZW5pZW50LiBTb21lCiAgLy8gbWlnaHQgcHJlZmVyIHRvIHVzZSBhIGNvbnN0IGxpc3Qgb2Ygc3ltYm9scy4KCiAgLyoqCiAgICogVGhlIGxpc3Qgb2Ygc3RyaW5ncyBwYXNzZWQgdG8gbmV3IFtTeW1ib2xdLCBhbmQgc3ltYm9scyB0aGF0IG1pZ2h0IGJlCiAgICogcGFzc2VkIHRvIFtNaXJyb3JTeXN0ZW0uZ2V0TmFtZV0uCiAgICoKICAgKiBDb21iaW5lZCB3aXRoIHRoZSBuYW1lcyBvZiBbdGFyZ2V0c10sIFttZXRhVGFyZ2V0c10gYW5kIHRoZWlyIG1lbWJlcnMsCiAgICogdGhpcyBmb3JtcyB0aGUgY29tcGxldGUgbGlzdCBvZiBzdHJpbmdzIHBhc3NlZCB0byBuZXcgW1N5bWJvbF0sIGFuZAogICAqIHN5bWJvbHMgdGhhdCBtaWdodCBiZSBwYXNzZWQgdG8gW01pcnJvclN5c3RlbS5nZXROYW1lXSBieSB0aGUgbGlicmFyeSB0bwogICAqIHdoaWNoIHRoaXMgbWV0YWRhdGEgYXBwbGllcy4KICAgKgogICAqIFRoZSBmb2xsb3dpbmcgdGV4dCBpcyBub24tbm9ybWF0aXZlOgogICAqCiAgICogRGFydDJqcyBjdXJyZW50bHkgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBmb3JtYXRzIHRvIHNwZWNpZnkgc3ltYm9sczoKICAgKgogICAqICogQSBjb25zdGFudCBbTGlzdF0gb2YgW1N0cmluZ10gY29uc3RhbnRzIHJlcHJlc2VudGluZyBzeW1ib2wgbmFtZXMsCiAgICogICBlLmcuLCBgY29uc3QgWydmb28nLCAnYmFyJ11gLgogICAqICogQSBzaW5nbGUgW1N0cmluZ10gY29uc3RhbnQgd2hvc2UgdmFsdWUgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZgogICAqICAgc3ltYm9sIG5hbWVzLCBlLmcuLCBgImZvbywgYmFyImAuCiAgICoKICAgKiBTcGVjaWZ5aW5nIHRoZSBgc3ltYm9sc2AgZmllbGQgdHVybnMgb2ZmIHRoZSBmb2xsb3dpbmcgd2FybmluZ3MgZW1pdHRlZCBieQogICAqIGRhcnQyanM6CiAgICoKICAgKiAqIFVzaW5nICJNaXJyb3JTeXN0ZW0uZ2V0TmFtZSIgbWF5IHJlc3VsdCBpbiBsYXJnZXIgb3V0cHV0LgogICAqICogVXNpbmcgIm5ldyBTeW1ib2wiIG1heSByZXN1bHQgaW4gbGFyZ2VyIG91dHB1dC4KICAgKgogICAqIEZvciBleGFtcGxlLCBpZiB5b3UncmUgdXNpbmcgW25vU3VjaE1ldGhvZF0gdG8gaW50ZXJhY3Qgd2l0aCBhIGRhdGFiYXNlLAogICAqIGV4dHJhY3QgYWxsIHRoZSBwb3NzaWJsZSBjb2x1bW4gbmFtZXMgYW5kIGluY2x1ZGUgdGhlbSBpbiB0aGlzIGxpc3QuCiAgICogU2ltaWxhcmx5LCBpZiB5b3UncmUgdXNpbmcgW25vU3VjaE1ldGhvZF0gdG8gaW50ZXJhY3Qgd2l0aCBhbm90aGVyCiAgICogbGFuZ3VhZ2UgKEphdmFTY3JpcHQsIGZvciBleGFtcGxlKSBleHRyYWN0IGFsbCB0aGUgaWRlbnRpZmllcnMgZnJvbSB0aGUKICAgKiBBUEkgeW91IHVzZSBhbmQgaW5jbHVkZSB0aGVtIGluIHRoaXMgbGlzdC4KICAgKgogICAqIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIGEgc3ltYm9sIG9ubHkgZW5zdXJlcyB0aGF0IHRoZSBzeW1ib2wgd2lsbCBiZQogICAqIGF2YWlsYWJsZSB1bmRlciB0aGF0IG5hbWUgYXQgcnVudGltZS4gSXQgZG9lcyBub3QgbWFyayB0YXJnZXRzIHdpdGgKICAgKiB0aGF0IG5hbWUgYXMgYXZhaWxhYmxlIGZvciByZWZsZWN0aW9uLiBTZWUgW3RhcmdldHNdIGFuZCBbbWV0YVRhcmdldHNdCiAgICogZm9yIHRoYXQgcHVycG9zZS4KICAgKi8KICBmaW5hbCBzeW1ib2xzOwoKICAvKioKICAgKiBBIGxpc3Qgb2YgcmVmbGVjdGl2ZSB0YXJnZXRzLgogICAqCiAgICogQ29tYmluZWQgd2l0aCBbbWV0YVRhcmdldHNdLCB0aGlzIHByb3ZpZGVzIHRoZSBjb21wbGV0ZSBsaXN0IG9mIHJlZmxlY3RpdmUKICAgKiB0YXJnZXRzIHVzZWQgYnkgdGhlIGxpYnJhcnkgdG8gd2hpY2ggdGhpcyBtZXRhZGF0YSBhcHBsaWVzLgogICAqCiAgICogVGhlIGZvbGxvd2luZyB0ZXh0IGlzIG5vbi1ub3JtYXRpdmU6CiAgICoKICAgKiBGb3Igbm93LCB0aGVyZSBpcyBubyBmb3JtYWwgZGVzY3JpcHRpb24gb2Ygd2hhdCBhIHJlZmxlY3RpdmUgdGFyZ2V0IGlzLgogICAqIEluZm9ybWFsbHksIGEgdGFyZ2V0IGlzIGEgbGlicmFyeSwgYSBjbGFzcywgYSBtZXRob2Qgb3IgYSBmaWVsZC4KICAgKgogICAqIERhcnQyanMgY3VycmVudGx5IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZm9ybWF0cyB0byBzcGVjaWZ5IHRhcmdldHM6CiAgICoKICAgKiAqIEEgY29uc3RhbnQgW0xpc3RdIGNvbnRhaW5pbmcgW1N0cmluZ10gY29uc3RhbnRzIHJlcHJlc2VudGluZyAocXVhbGlmaWVkKQogICAqICAgbmFtZXMgb2YgdGFyZ2V0cyBhbmQgRGFydCB0eXBlcy4KICAgKiAqIEEgc2luZ2xlIFtTdHJpbmddIGNvbnN0YW50IHdob3NlIHZhbHVlIGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YKICAgKiAgIChxdWFsaWZpZWQpIG5hbWVzLgogICAqICogQSBzaW5nbGUgRGFydCB0eXBlLgogICAqCiAgICogQSAocXVhbGlmaWVkKSBuYW1lIGlzIHJlc29sdmVkIHRvIGEgdGFyZ2V0IGFzIGZvbGxvd3M6CiAgICoKICAgKiAxLiBJZiB0aGUgcXVhbGlmaWVkIG5hbWUgbWF0Y2hlcyBhIGxpYnJhcnkgbmFtZSwgdGhlIG1hdGNoaW5nIGxpYnJhcnkgaXMKICAgKiAgICB0aGUgdGFyZ2V0LgogICAqIDIuIEVsc2UsIGZpbmQgdGhlIGxvbmdlc3QgcHJlZml4IG9mIHRoZSBuYW1lIHN1Y2ggdGhhdCB0aGUgcHJlZml4IGVuZHMKICAgKiAgICBqdXN0IGJlZm9yZSBhIGAuYCBhbmQgaXMgYSBsaWJyYXJ5IG5hbWUuCiAgICogMy4gVXNlIHRoYXQgbGlicmFyeSBhcyBjdXJyZW50IHNjb3BlLiBJZiBubyBtYXRjaGluZyBwcmVmaXggd2FzIGZvdW5kLCB1c2UKICAgKiAgICB0aGUgY3VycmVudCBsaWJyYXJ5LCBpLmUuLCB0aGUgbGlicmFyeSB3aGVyZSB0aGUgW01pcnJvcnNVc2VkXQogICAqICAgIGFubm90YXRpb24gd2FzIHBsYWNlZC4KICAgKiA0LiBTcGxpdCB0aGUgcmVtYWluaW5nIHN1ZmZpeCAodGhlIGVudGlyZSBuYW1lIGlmIG5vIGxpYnJhcnkgbmFtZSB3YXMKICAgKiAgICBmb3VuZCBpbiBzdGVwIDMpIGludG8gYSBsaXN0IG9mIFtTdHJpbmddIHVzaW5nIGAuYCBhcyBhCiAgICogICAgc2VwYXJhdG9yLgogICAqIDUuIFNlbGVjdCBhbGwgdGFyZ2V0cyBpbiB0aGUgY3VycmVudCBzY29wZSB3aG9zZSBuYW1lIG1hdGNoZXMgYSBbU3RyaW5nXQogICAqICAgIGZyb20gdGhlIGxpc3QuCiAgICoKICAgKiBGb3IgZXhhbXBsZToKICAgKgogICAqICAgICBsaWJyYXJ5IG15LmxpYnJhcnkub25lOwogICAqCiAgICogICAgIGNsYXNzIEEgewogICAqICAgICAgIHZhciBhRmllbGQ7CiAgICogICAgIH0KICAgKgogICAqICAgICBsaWJyYXJ5IG1haW47CiAgICoKICAgKiAgICAgQE1pcnJvcnNVc2VkKHRhcmdldHM6ICJteS5saWJyYXJ5Lm9uZS5BLmFGaWVsZCIpCiAgICogICAgIGltcG9ydCAiZGFydDptaXJyb3JzIjsKICAgKgogICAqIFRoZSBbTWlycm9yc1VzZWRdIGFubm90YXRpb24gc3BlY2lmaWVzIGBBYCBhbmQgYGFGaWVsZGAgZnJvbSBsaWJyYXJ5CiAgICogYG15LmxpYnJhcnkub25lYCBhcyB0YXJnZXRzLiBUaGlzIHdpbGwgbWFyayB0aGUgY2xhc3MgYEFgIGFzIGEgcmVmbGVjdGl2ZQogICAqIHRhcmdldC4gVGhlIHRhcmdldCBzcGVjaWZpY2F0aW9uIGZvciBgYUZpZWxkYCBoYXMgbm8gZWZmZWN0LCBhcyB0aGVyZSBpcwogICAqIG5vIHRhcmdldCBpbiBgbXkubGlicmFyeS5vbmVgIHdpdGggdGhhdCBuYW1lLgogICAqCiAgICogTm90ZSB0aGF0IGV2ZXJ5dGhpbmcgd2l0aGluIGEgdGFyZ2V0IGFsc28gaXMgYXZhaWxhYmxlIGZvciByZWZsZWN0aW9uLgogICAqIFNvLCBpZiBhIGxpYnJhcnkgaXMgc3BlY2lmaWVkIGFzIHRhcmdldCwgYWxsIGNsYXNzZXMgaW4gdGhhdCBsaWJyYXJ5CiAgICogYmVjb21lIHRhcmdldHMgZm9yIHJlZmxlY3Rpb24uIExpa2V3aXNlLCBpZiBhIGNsYXNzIGlzIGEgdGFyZ2V0LCBhbGwKICAgKiBpdHMgbWV0aG9kcyBhbmQgZmllbGRzIGJlY29tZSB0YXJnZXRzIGZvciByZWZsZWN0aW9uLiBBcyBhIGNvbnNlcXVlbmNlLAogICAqIGBhRmllbGRgIGluIHRoZSBhYm92ZSBleGFtcGxlIGlzIGFsc28gYSByZWZsZWN0aXZlIHRhcmdldC4KICAgKgogICAqLwogIGZpbmFsIHRhcmdldHM7CgogIC8qKgogICAqIEEgbGlzdCBvZiBjbGFzc2VzIHRoYXQgd2hlbiB1c2VkIGFzIG1ldGFkYXRhIGluZGljYXRlcyBhIHJlZmxlY3RpdmUKICAgKiB0YXJnZXQuIFNlZSBhbHNvIFt0YXJnZXRzXS4KICAgKgogICAqIFRoZSBmb2xsb3dpbmcgdGV4dCBpcyBub24tbm9ybWF0aXZlOgogICAqCiAgICogVGhlIGZvcm1hdCBmb3Igc3BlY2lmeWluZyB0aGUgbGlzdCBvZiBjbGFzc2VzIGlzIHRoZSBzYW1lIGFzIHVzZWQgZm9yCiAgICogc3BlY2lmeWluZyBbdGFyZ2V0c10uIEhvd2V2ZXIsIGFzIGEgbGlicmFyeSBjYW5ub3QgYmUgdXNlZCBhcyBhIG1ldGFkYXRhCiAgICogYW5ub3RhdGlvbiBpbiBEYXJ0LCBhZGRpbmcgYSBsaWJyYXJ5IHRvIHRoZSBsaXN0IG9mIFttZXRhVGFyZ2V0c10gaGFzIG5vCiAgICogZWZmZWN0LiBJbiBwYXJ0aWN1bGFyLCBhZGRpbmcgYSBsaWJyYXJ5IHRvIFttZXRhVGFyZ2V0c10gZG9lcyBub3QgbWFrZQogICAqIHRoZSBsaWJyYXJ5J3MgY2xhc3NlcyB2YWxpZCBtZXRhZGF0YSBhbm5vdGF0aW9ucyB0byBlbmFibGUgcmVmbGVjdGlvbi4KICAgKgogICAqIElmIGFuIGluc3RhbmNlIG9mIGEgY2xhc3Mgc3BlY2lmaWVkIGluIFttZXRhVGFyZ2V0c10gaXMgdXNlZCBhcwogICAqIG1ldGFkYXRhIGFubm90YXRpb24gb24gYSBsaWJyYXJ5LCBjbGFzcywgZmllbGQgb3IgbWV0aG9kLCB0aGF0IGxpYnJhcnksCiAgICogY2xhc3MsIGZpZWxkIG9yICBtZXRob2QgaXMgYWRkZWQgdG8gdGhlIHNldCBvZiB0YXJnZXRzIGZvciByZWZsZWN0aW9uLgogICAqCiAgICogRXhhbXBsZSB1c2FnZToKICAgKgogICAqICAgICBsaWJyYXJ5IGV4YW1wbGU7CiAgICogICAgIEBNaXJyb3JzVXNlZChtZXRhVGFyZ2V0czogImV4YW1wbGUuUmVmbGVjdGFibGUiKQogICAqICAgICBpbXBvcnQgImRhcnQ6bWlycm9ycyI7CiAgICoKICAgKiAgICAgY2xhc3MgUmVmbGVjdGFibGUgewogICAqICAgICAgIGNvbnN0IFJlZmxlY3RhYmxlKCk7CiAgICogICAgIH0KICAgKgogICAqICAgICBjbGFzcyBGb28gewogICAqICAgICAgIEBSZWZsZWN0YWJsZSgpCiAgICogICAgICAgcmVmbGVjdGFibGVNZXRob2QoKSB7IC4uLiB9CiAgICoKICAgKiAgICAgICBub25SZWZsZWN0YWJsZU1ldGhvZCgpIHsgLi4uIH0KICAgKiAgICAgfQogICAqCiAgICogSW4gdGhlIGFib3ZlIGV4YW1wbGUuIGByZWZsZWN0YWJsZU1ldGhvZGAgaXMgbWFya2VkIGFzIHJlZmxlY3RhYmxlIGJ5CiAgICogdXNpbmcgdGhlIGBSZWZsZWN0YWJsZWAgY2xhc3MsIHdoaWNoIGluIHR1cm4gaXMgc3BlY2lmaWVkIGluIHRoZQogICAqIFttZXRhVGFyZ2V0c10gYW5ub3RhdGlvbi4KICAgKgogICAqIFRoZSBtZXRob2QgYG5vblJlZmxlY3RhYmxlTWV0aG9kYCBsYWNrcyBhIG1ldGFkYXRhIGFubm90YXRpb24gYW5kIHRodXMKICAgKiB3aWxsIG5vdCBiZSByZWZsZWN0YWJsZSBhdCBydW50aW1lLgogICAqLwogIGZpbmFsIG1ldGFUYXJnZXRzOwoKICAvKioKICAgKiBBIGxpc3Qgb2YgbGlicmFyeSBuYW1lcyBvciAiKiIuCiAgICoKICAgKiBXaGVuIHVzZWQgYXMgbWV0YWRhdGEgb24gYW4gaW1wb3J0IG9mICJkYXJ0Om1pcnJvcnMiLCB0aGlzIG1ldGFkYXRhIGRvZXMKICAgKiBub3QgYXBwbHkgdG8gdGhlIGxpYnJhcnkgaW4gd2hpY2ggdGhlIGFubm90YXRpb24gaXMgdXNlZCwgYnV0IGluc3RlYWQKICAgKiBhcHBsaWVzIHRvIHRoZSBvdGhlciBsaWJyYXJpZXMgKGFsbCBsaWJyYXJpZXMgaWYgIioiIGlzIHVzZWQpLgogICAqCiAgICogVGhlIGZvbGxvd2luZyB0ZXh0IGlzIG5vbi1ub3JtYXRpdmU6CiAgICoKICAgKiBEYXJ0MmpzIGN1cnJlbnRseSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGZvcm1hdHMgdG8gc3BlY2lmeSBsaWJyYXJpZXM6CiAgICoKICAgKiAqIEEgY29uc3RhbnQgW0xpc3RdIGNvbnRhaW5pbmcgW1N0cmluZ10gY29uc3RhbnRzIHJlcHJlc2VudGluZyBuYW1lcyBvZgogICAqICAgbGlicmFyaWVzLgogICAqICogQSBzaW5nbGUgW1N0cmluZ10gY29uc3RhbnQgd2hvc2UgdmFsdWUgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZgogICAqICAgbGlicmFyeSBuYW1lcy4KICAgKgogICAqIENvbmNlcHR1YWxseSwgYSBbTWlycm9yc1VzZWRdIGFubm90YXRpb24gd2l0aCBbb3ZlcnJpZGVdIGhhcyB0aGUgc2FtZQogICAqIGVmZmVjdCBhcyBwbGFjaW5nIHRoZSBhbm5vdGF0aW9uIGRpcmVjdGx5IG9uIHRoZSBpbXBvcnQgb2YgYGRhcnQ6bWlycm9yc2AKICAgKiBpbiBlYWNoIG9mIHRoZSByZWZlcmVuY2VkIGxpYnJhcmllcy4gVGh1cywgaWYgdGhlIGxpYnJhcnkgaGFkIG5vCiAgICogW01pcnJvcnNVc2VkXSBhbm5vdGF0aW9uIGJlZm9yZSwgaXRzIHVuY29uZGl0aW9uYWwgaW1wb3J0IG9mCiAgICogYGRhcnQ6bWlycm9yc2AgaXMgb3ZlcnJpZGRlbiBieSBhbiBhbm5vdGF0ZWQgaW1wb3J0LgogICAqCiAgICogTm90ZSB0aGF0LCBsaWtlIG11bHRpcGxlIGV4cGxpY2l0IFtNaXJyb3JzVXNlZF0gYW5ub3RhdGlvbnMsIHVzaW5nCiAgICogb3ZlcnJpZGUgb24gYSBsaWJyYXJ5IHdpdGggYW4gZXhpc3RpbmcgW01pcnJvcnNVc2VkXSBhbm5vdGF0aW9uIGlzCiAgICogYWRkaXRpdmUuIFRoYXQgaXMsIHRoZSBvdmVyYWxsIHNldCBvZiByZWZsZWN0aXZlIHRhcmdldHMgaXMgdGhlIHVuaW9uCiAgICogb2YgdGhlIHJlZmxlY3RpdmUgdGFyZ2V0cyB0aGF0IGFyaXNlIGZyb20gdGhlIG9yaWdpbmFsIGFuZCB0aGUKICAgKiBvdmVycmlkaW5nIFtNaXJyb3JzVXNlZF0gYW5ub3RhdGlvbnMuCiAgICoKICAgKiBUaGUgdXNlIG9mIFtvdmVycmlkZV0gaXMgb25seSBtZWFuaW5nZnVsIGZvciBsaWJyYXJpZXMgdGhhdCBoYXZlIGFuCiAgICogaW1wb3J0IG9mIGBkYXJ0Om1pcnJvcnNgIHdpdGhvdXQgYW5ub3RhdGlvbiBiZWNhdXNlIG90aGVyd2lzZSBpdCB3b3VsZAogICAqIHdvcmsgZXhhY3RseSB0aGUgc2FtZSB3YXkgd2l0aG91dCB0aGUgW292ZXJyaWRlXSBwYXJhbWV0ZXIuCiAgICoKICAgKiBXaGlsZSB0aGUgYW5ub3RhdGlvbiB3aWxsIGFwcGx5IHRvIHRoZSBnaXZlbiB0YXJnZXQgbGlicmFyaWVzLCB0aGUKICAgKiBbc3ltYm9sc10sIFt0YXJnZXRzXSBhbmQgW21ldGFUYXJnZXRzXSBhcmUgc3RpbGwgZXZhbHVhdGVkIGluIHRoZQogICAqIHNjb3BlIG9mIHRoZSBhbm5vdGF0aW9uLiBUaHVzLCB0byBzZWxlY3QgYSB0YXJnZXQgZnJvbSBsaWJyYXJ5IGBmb29gLAogICAqIGEgcXVhbGlmaWVkIG5hbWUgaGFzIHRvIGJlIHVzZWQgb3IsIGlmIHRoZSB0YXJnZXQgaXMgdmlzaWJsZSBpbiB0aGUKICAgKiBjdXJyZW50IHNjb3BlLCBpdHMgdHlwZSBtYXkgYmUgcmVmZXJlbmNlZC4KICAgKgogICAqIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGUgbWFya3MgYWxsIHRhcmdldHMgaW4gdGhlIGxpYnJhcnkgYGZvb2AKICAgKiBhcyByZWZsZWN0YWJsZSB0aGF0IGhhdmUgYSBtZXRhZGF0YSBhbm5vdGF0aW9uIHVzaW5nIHRoZSBgUmVmbGVjdGFibGVgCiAgICogY2xhc3MgZnJvbSB0aGUgc2FtZSBsaWJyYXJ5LgogICAqCiAgICogICAgIEBNaXJyb3JzVXNlZChtZXRhVGFyZ2V0czogImZvby5SZWZsZWN0YWJsZSIsIG92ZXJyaWRlOiAiZm9vIikKICAgKgogICAqIEhvd2V2ZXIsIHRoZSBmb2xsb3dpbmcgY29kZSB3b3VsZCByZXF1aXJlIHRoZSB1c2Ugb2YgdGhlIGBSZWZsZWN0YWJsZWAKICAgKiBjbGFzcyBmcm9tIHRoZSBjdXJyZW50IGxpYnJhcnksIGluc3RlYWQuCiAgICoKICAgKiAgICAgQE1pcnJvcnNVc2VkKG1ldGFUYXJnZXRzOiAiUmVmbGVjdGFibGUiLCBvdmVycmlkZTogImZvbyIpCiAgICoKICAgKi8KICBmaW5hbCBvdmVycmlkZTsKCiAgLyoqCiAgICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBbTWlycm9yc1VzZWQuc3ltYm9sc10sIFtNaXJyb3JzVXNlZC50YXJnZXRzXSwKICAgKiBbTWlycm9yc1VzZWQubWV0YVRhcmdldHNdIGFuZCBbTWlycm9yc1VzZWQub3ZlcnJpZGVdIGZvciBkb2N1bWVudGF0aW9uCiAgICogb2YgdGhlIHBhcmFtZXRlcnMuCiAgICovCiAgY29uc3QgTWlycm9yc1VzZWQoCiAgICAgIHt0aGlzLnN5bWJvbHMsIHRoaXMudGFyZ2V0cywgdGhpcy5tZXRhVGFyZ2V0cywgdGhpcy5vdmVycmlkZX0pOwp9CoW9AE5OPAE+Rh0DEgM8RS4BBB06A0NCSANBTkI6AzQDQ0k/HgM1LkZAQTw2A0FRPlMNAxcDT1BINwMSBBYBIQEERhkDQgNHRj5FRQQeBkUFTgsFTE8eBikBBkIFNgY6AQZCBTwGHQEGJwYeAQYkBhsBBiMFKgVGTAYxAQYiBVBQQwUqBUY7BkoCAQQ1BC0BBBkDS08uA0pKDAQzAQQhA1A5A0dMHgNQTwwELQEEKwNHFANPT00aA1BMDARHAQQyAzcEGQEEKwQxBkcGGAEGQQYWAQYxBiEBBk8FJwUyTR4GGwEGOwVPSksFS00bBUpLHQYqAgEESgQ1BjQFSU8xBhkBBj0FREEyBUMsSDFJHywpBVFMFgYcAQY5BUkFLU8nSkhOTEsgSicGHwEGMgU3RzwGFgEGLAVQBhcBBkoaBU43BU5PPwUQBVBLT1AFTFFNTgVPSwVORk5FEgVFBh8BBj4FNjg9PD40NSAFNhdFGwYlAgEERUMSA0BBRgkDPQQwBkQFUE5PSUxPUDoFTx8FTz4FThgGBS04BkUuAQY6BVANBTVGBU9QOgVQSjcFTk1ABVBNNwVPHwVQPgVOGAZPMi0BBjoFTSEFNUYxBU5JRgVPIwVQPgVNGAYvOwEGRAUTBSRCKzdOEjU+RAsGIwIBBEcEOAYsBTwwNhQGGAEGTAVNTxMFNgUdIiMlBhkBBkZAFAVAGgYRAQYuBScFMg8FLDYFShMGGwIBBCkDRxwEOQY8BUwPBU0lBUtBUE1OK1FOQAYdAQY+BTZBRRxHBTksBU8fBVA+BU4YBjEuAgEEQToMBEoGJgYPAQZRBU5MJwYzAQYuBScFMklHBhsBBkAGOQIBMTsxFQExFQFPDRcBTBcjAU4sIwFMFQFFEyoBRh8BJQFRSyMnAgFJNDEgATATATATAgEEOyMEOQZKSSgGHQEGTTEGGgEGSgVJSyssBUkGLgEGPxAFO0FARStFBUkGJgEGNAVFQkdCEAYiAQY4BUVCR0IQBiYBBkYUBT0GJgEGTRQFSQYpAgEEMwRBBjIFPgYeAQZABikBBiAGFwEGHwYTAQZOEgVGSkxJBS4GMwEGTQwFSkpNTxMFOgYxAQZMBVBLKAU6Bi8BBh4FTkYUBhkBHE0aNAEGRwU0QUUcRwVOM00hBUlMUCsFFQVMK05PTicGTy4BBi4FJwUyOAVOTQYbAQZMJAU3BigCAQRDEgQ7Bi8GHQEGPQYoAQY4BksZHwIBBEkENwZJBh0BBh4FTBEGFQEGUQ0FJwUySQYbAgEERgQ1BikFSkxNTwYjAgEEPyMEOwY0Bh0BBkYGFQEGPAYoAQZQBUoxBhUBBiAGFwEGTgVQSEwGGAEGNAVHQBYGHAEGIwYXAQYgBhUBBiAGFQEGJQYaAQZGBT4xBUQiBh4BBisGHwEGMAYkAQYxBiUBBi0GIQEGLgUnBTJJBhsCAQRFBD0GNAYXAQY9IgVFIQYVAQY8IgYUAQY+IgYUAQYuBScFMkkGGwIBBEUEOwYtBhcBBkEiBhcBBj0iBhQBBlAiBhwBBjkFQC48KQUuBiMCAQRLBCAGNwU5BhABBjkFOwYSAQYyBhUCAQQ9BBAGNQYVAQZABVEdBhwBBj0FUBUGGwFBAgEERANNUBMDKANQT0wwAxIDJB4DEy8/CwkDECtNCQNRTANRTAwDOSQeA087BE0US0pDMgEGSycFTElOIgUqBUoFSiVLKQVQDgVBNwVOSkhNMAVISUwXBhEBBiMFUEEFKgVNRgVKBVAoSxobBTwFThRMMVBHH0tAE04XBRIFIQUTFwsFFwU6IAVKT04zBUxKSk1ABQYRAQZJIQUqBUtOTkxMBUVNTAUUBRo6IAUdIAsFFRonBSoLBUtGHwVMKQYVAQYlBU5LRAUqBUwFTRJLFgVLT0ZCOgVISEtEKwVJTEEFSEdLSTAFTEwiBUcFTC4FQwUGEgEGTUwYBhVGAgEMZGFydDptaXJyb3JzMW9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvbWlycm9yc19pbXBsLmRhcnTAALiWLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgIm1pcnJvcnNfcGF0Y2guZGFydCI7Cgp2YXIgX2RpcnR5ID0gZmFsc2U7IC8vIFNldCB0byB0cnVlIGJ5IHRoZSBWTSB3aGVuIG1vcmUgbGlicmFyaWVzIGFyZSBsb2FkZWQuCgpjbGFzcyBfSW50ZXJuYWxNaXJyb3JFcnJvciBleHRlbmRzIEVycm9yIHsKICBmaW5hbCBTdHJpbmcgX21zZzsKICBfSW50ZXJuYWxNaXJyb3JFcnJvcih0aGlzLl9tc2cpOwogIFN0cmluZyB0b1N0cmluZygpID0+IF9tc2c7Cn0KClN0cmluZyBfbihTeW1ib2wgc3ltYm9sKSA9PiBpbnRlcm5hbC5TeW1ib2wuZ2V0TmFtZShzeW1ib2wpOwoKU3ltYm9sIF9zKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgcmV0dXJuIG5ldyBpbnRlcm5hbC5TeW1ib2wudW52YWxpZGF0ZWQobmFtZSk7Cn0KClN5bWJvbCBfY29tcHV0ZVF1YWxpZmllZE5hbWUoRGVjbGFyYXRpb25NaXJyb3Igb3duZXIsIFN5bWJvbCBzaW1wbGVOYW1lKSB7CiAgaWYgKG93bmVyID09IG51bGwpIHJldHVybiBzaW1wbGVOYW1lOwogIHJldHVybiBfcygnJHtfbihvd25lci5xdWFsaWZpZWROYW1lKX0uJHtfbihzaW1wbGVOYW1lKX0nKTsKfQoKU3RyaW5nIF9tYWtlU2lnbmF0dXJlU3RyaW5nKAogICAgVHlwZU1pcnJvciByZXR1cm5UeXBlLCBMaXN0PFBhcmFtZXRlck1pcnJvcj4gcGFyYW1ldGVycykgewogIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgYnVmLndyaXRlKCcoJyk7CiAgYm9vbCBmb3VuZF9vcHRpb25hbF9wb3NpdGlvbmFsID0gZmFsc2U7CiAgYm9vbCBmb3VuZF9vcHRpb25hbF9uYW1lZCA9IGZhbHNlOwoKICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgIHZhciBwYXJhbSA9IHBhcmFtZXRlcnNbaV07CiAgICBpZiAocGFyYW0uaXNPcHRpb25hbCAmJiBwYXJhbS5pc05hbWVkICYmICFmb3VuZF9vcHRpb25hbF9uYW1lZCkgewogICAgICBidWYud3JpdGUoJ3snKTsKICAgICAgZm91bmRfb3B0aW9uYWxfbmFtZWQgPSB0cnVlOwogICAgfQogICAgaWYgKHBhcmFtLmlzT3B0aW9uYWwgJiYgIXBhcmFtLmlzTmFtZWQgJiYgIWZvdW5kX29wdGlvbmFsX3Bvc2l0aW9uYWwpIHsKICAgICAgYnVmLndyaXRlKCdbJyk7CiAgICAgIGZvdW5kX29wdGlvbmFsX3Bvc2l0aW9uYWwgPSB0cnVlOwogICAgfQogICAgaWYgKHBhcmFtLmlzTmFtZWQpIHsKICAgICAgYnVmLndyaXRlKF9uKHBhcmFtLnNpbXBsZU5hbWUpKTsKICAgICAgYnVmLndyaXRlKCc6ICcpOwogICAgfQogICAgYnVmLndyaXRlKF9uKHBhcmFtLnR5cGUucXVhbGlmaWVkTmFtZSkpOwogICAgaWYgKGkgPCAocGFyYW1ldGVycy5sZW5ndGggLSAxKSkgewogICAgICBidWYud3JpdGUoJywgJyk7CiAgICB9CiAgfQogIGlmIChmb3VuZF9vcHRpb25hbF9uYW1lZCkgewogICAgYnVmLndyaXRlKCd9Jyk7CiAgfQogIGlmIChmb3VuZF9vcHRpb25hbF9wb3NpdGlvbmFsKSB7CiAgICBidWYud3JpdGUoJ10nKTsKICB9CiAgYnVmLndyaXRlKCcpIC0+ICcpOwogIGJ1Zi53cml0ZShfbihyZXR1cm5UeXBlLnF1YWxpZmllZE5hbWUpKTsKICByZXR1cm4gYnVmLnRvU3RyaW5nKCk7Cn0KClNvdXJjZUxvY2F0aW9uIF9sb2NhdGlvbihyZWZsZWN0ZWUpIG5hdGl2ZSAiRGVjbGFyYXRpb25NaXJyb3JfbG9jYXRpb24iOwoKTGlzdDxkeW5hbWljPiBfbWV0YWRhdGEocmVmbGVjdGVlKSBuYXRpdmUgJ0RlY2xhcmF0aW9uTWlycm9yX21ldGFkYXRhJzsKCmJvb2wgX3N1YnR5cGVUZXN0KFR5cGUgYSwgVHlwZSBiKSBuYXRpdmUgJ1R5cGVNaXJyb3Jfc3VidHlwZVRlc3QnOwoKY2xhc3MgX0xvY2FsTWlycm9yU3lzdGVtIGV4dGVuZHMgTWlycm9yU3lzdGVtIHsKICBmaW5hbCBUeXBlTWlycm9yIGR5bmFtaWNUeXBlID0gbmV3IF9TcGVjaWFsVHlwZU1pcnJvci5fKCdkeW5hbWljJyk7CiAgZmluYWwgVHlwZU1pcnJvciB2b2lkVHlwZSA9IG5ldyBfU3BlY2lhbFR5cGVNaXJyb3IuXygndm9pZCcpOwoKICB2YXIgX2xpYnJhcmllczsKICBNYXA8VXJpLCBMaWJyYXJ5TWlycm9yPiBnZXQgbGlicmFyaWVzIHsKICAgIGlmICgoX2xpYnJhcmllcyA9PSBudWxsKSB8fCBfZGlydHkpIHsKICAgICAgX2xpYnJhcmllcyA9IG5ldyBNYXA8VXJpLCBMaWJyYXJ5TWlycm9yPigpOwogICAgICBmb3IgKExpYnJhcnlNaXJyb3IgbGliIGluIF9jb21wdXRlTGlicmFyaWVzKCkpIHsKICAgICAgICBfbGlicmFyaWVzW2xpYi51cmldID0gbGliOwogICAgICB9CiAgICAgIF9saWJyYXJpZXMgPSBuZXcgVW5tb2RpZmlhYmxlTWFwVmlldzxVcmksIExpYnJhcnlNaXJyb3I+KF9saWJyYXJpZXMpOwogICAgICBfZGlydHkgPSBmYWxzZTsKICAgIH0KICAgIHJldHVybiBfbGlicmFyaWVzOwogIH0KCiAgc3RhdGljIExpc3Q8ZHluYW1pYz4gX2NvbXB1dGVMaWJyYXJpZXMoKSBuYXRpdmUgIk1pcnJvclN5c3RlbV9saWJyYXJpZXMiOwoKICBJc29sYXRlTWlycm9yIF9pc29sYXRlOwogIElzb2xhdGVNaXJyb3IgZ2V0IGlzb2xhdGUgewogICAgaWYgKF9pc29sYXRlID09IG51bGwpIHsKICAgICAgX2lzb2xhdGUgPSBfY29tcHV0ZUlzb2xhdGUoKTsKICAgIH0KICAgIHJldHVybiBfaXNvbGF0ZTsKICB9CgogIHN0YXRpYyBJc29sYXRlTWlycm9yIF9jb21wdXRlSXNvbGF0ZSgpIG5hdGl2ZSAiTWlycm9yU3lzdGVtX2lzb2xhdGUiOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiTWlycm9yU3lzdGVtIGZvciBpc29sYXRlICcke2lzb2xhdGUuZGVidWdOYW1lfSciOwp9CgpjbGFzcyBfU291cmNlTG9jYXRpb24gaW1wbGVtZW50cyBTb3VyY2VMb2NhdGlvbiB7CiAgX1NvdXJjZUxvY2F0aW9uLl8odXJpU3RyaW5nLCB0aGlzLmxpbmUsIHRoaXMuY29sdW1uKQogICAgICA6IHRoaXMuc291cmNlVXJpID0gVXJpLnBhcnNlKHVyaVN0cmluZyk7CgogIC8vIExpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgYXJlIDEtb3JpZ2luLCBvciAwIGlmIHVua25vd24uCiAgZmluYWwgaW50IGxpbmU7CiAgZmluYWwgaW50IGNvbHVtbjsKCiAgZmluYWwgVXJpIHNvdXJjZVVyaTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuIGNvbHVtbiA9PSAwID8gIiRzb3VyY2VVcmk6JGxpbmUiIDogIiRzb3VyY2VVcmk6JGxpbmU6JGNvbHVtbiI7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBfTG9jYWxNaXJyb3IgaW1wbGVtZW50cyBNaXJyb3Ige30KCmNsYXNzIF9Mb2NhbElzb2xhdGVNaXJyb3IgZXh0ZW5kcyBfTG9jYWxNaXJyb3IgaW1wbGVtZW50cyBJc29sYXRlTWlycm9yIHsKICBmaW5hbCBTdHJpbmcgZGVidWdOYW1lOwogIGZpbmFsIExpYnJhcnlNaXJyb3Igcm9vdExpYnJhcnk7CgogIF9Mb2NhbElzb2xhdGVNaXJyb3IuXyh0aGlzLmRlYnVnTmFtZSwgdGhpcy5yb290TGlicmFyeSk7CgogIGJvb2wgZ2V0IGlzQ3VycmVudCA9PiB0cnVlOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiSXNvbGF0ZU1pcnJvciBvbiAnJGRlYnVnTmFtZSciOwoKICBGdXR1cmU8TGlicmFyeU1pcnJvcj4gbG9hZFVyaShVcmkgdXJpKSBhc3luYyB7CiAgICB2YXIgcmVzdWx0ID0gX2xvYWRVcmkodXJpLnRvU3RyaW5nKCkpOwogICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CiAgICAgIC8vIENlbnNvcmVkIGxpYnJhcnkuCiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkNhbm5vdCBsb2FkICR1cmkiKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0aWMgTGlicmFyeU1pcnJvciBfbG9hZFVyaShTdHJpbmcgdXJpKSBuYXRpdmUgIklzb2xhdGVNaXJyb3JfbG9hZFVyaSI7Cn0KCmNsYXNzIF9TeW50aGV0aWNBY2Nlc3NvciBpbXBsZW1lbnRzIE1ldGhvZE1pcnJvciB7CiAgZmluYWwgRGVjbGFyYXRpb25NaXJyb3Igb3duZXI7CiAgZmluYWwgU3ltYm9sIHNpbXBsZU5hbWU7CiAgZmluYWwgYm9vbCBpc0dldHRlcjsKICBmaW5hbCBib29sIGlzU3RhdGljOwogIGZpbmFsIGJvb2wgaXNUb3BMZXZlbDsKICBmaW5hbCBfdGFyZ2V0OwoKICBfU3ludGhldGljQWNjZXNzb3IodGhpcy5vd25lciwgdGhpcy5zaW1wbGVOYW1lLCB0aGlzLmlzR2V0dGVyLCB0aGlzLmlzU3RhdGljLAogICAgICB0aGlzLmlzVG9wTGV2ZWwsIHRoaXMuX3RhcmdldCk7CgogIGJvb2wgZ2V0IGlzU3ludGhldGljID0+IHRydWU7CiAgYm9vbCBnZXQgaXNSZWd1bGFyTWV0aG9kID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzT3BlcmF0b3IgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNDb25zdHJ1Y3RvciA9PiBmYWxzZTsKICBib29sIGdldCBpc0NvbnN0Q29uc3RydWN0b3IgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNHZW5lcmF0aXZlQ29uc3RydWN0b3IgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNGYWN0b3J5Q29uc3RydWN0b3IgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNFeHRlcm5hbCA9PiBmYWxzZTsKICBib29sIGdldCBpc1JlZGlyZWN0aW5nQ29uc3RydWN0b3IgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNBYnN0cmFjdCA9PiBmYWxzZTsKCiAgYm9vbCBnZXQgaXNTZXR0ZXIgPT4gIWlzR2V0dGVyOwogIGJvb2wgZ2V0IGlzUHJpdmF0ZSA9PiBfbihzaW1wbGVOYW1lKS5zdGFydHNXaXRoKCdfJyk7CgogIFN5bWJvbCBnZXQgcXVhbGlmaWVkTmFtZSA9PiBfY29tcHV0ZVF1YWxpZmllZE5hbWUob3duZXIsIHNpbXBsZU5hbWUpOwogIFN5bWJvbCBnZXQgY29uc3RydWN0b3JOYW1lID0+IFN5bWJvbC5lbXB0eTsKCiAgVHlwZU1pcnJvciBnZXQgcmV0dXJuVHlwZSA9PiBfdGFyZ2V0LnR5cGU7CiAgTGlzdDxQYXJhbWV0ZXJNaXJyb3I+IGdldCBwYXJhbWV0ZXJzIHsKICAgIGlmIChpc0dldHRlcikgcmV0dXJuIGNvbnN0IDxQYXJhbWV0ZXJNaXJyb3I+W107CiAgICByZXR1cm4gbmV3IFVubW9kaWZpYWJsZUxpc3RWaWV3PFBhcmFtZXRlck1pcnJvcj4oCiAgICAgICAgPFBhcmFtZXRlck1pcnJvcj5bbmV3IF9TeW50aGV0aWNTZXR0ZXJQYXJhbWV0ZXIodGhpcywgdGhpcy5fdGFyZ2V0KV0pOwogIH0KCiAgU291cmNlTG9jYXRpb24gZ2V0IGxvY2F0aW9uID0+IG51bGw7CiAgTGlzdDxJbnN0YW5jZU1pcnJvcj4gZ2V0IG1ldGFkYXRhID0+IGNvbnN0IDxJbnN0YW5jZU1pcnJvcj5bXTsKICBTdHJpbmcgZ2V0IHNvdXJjZSA9PiBudWxsOwp9CgpjbGFzcyBfU3ludGhldGljU2V0dGVyUGFyYW1ldGVyIGltcGxlbWVudHMgUGFyYW1ldGVyTWlycm9yIHsKICBmaW5hbCBEZWNsYXJhdGlvbk1pcnJvciBvd25lcjsKICBmaW5hbCBWYXJpYWJsZU1pcnJvciBfdGFyZ2V0OwoKICBfU3ludGhldGljU2V0dGVyUGFyYW1ldGVyKHRoaXMub3duZXIsIHRoaXMuX3RhcmdldCk7CgogIFN5bWJvbCBnZXQgc2ltcGxlTmFtZSA9PiBfdGFyZ2V0LnNpbXBsZU5hbWU7CiAgU3ltYm9sIGdldCBxdWFsaWZpZWROYW1lID0+IF9jb21wdXRlUXVhbGlmaWVkTmFtZShvd25lciwgc2ltcGxlTmFtZSk7CiAgVHlwZU1pcnJvciBnZXQgdHlwZSA9PiBfdGFyZ2V0LnR5cGU7CgogIGJvb2wgZ2V0IGlzT3B0aW9uYWwgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNOYW1lZCA9PiBmYWxzZTsKICBib29sIGdldCBpc1N0YXRpYyA9PiBmYWxzZTsKICBib29sIGdldCBpc1RvcExldmVsID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzQ29uc3QgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNGaW5hbCA9PiB0cnVlOwogIGJvb2wgZ2V0IGlzUHJpdmF0ZSA9PiBmYWxzZTsKICBib29sIGdldCBoYXNEZWZhdWx0VmFsdWUgPT4gZmFsc2U7CiAgSW5zdGFuY2VNaXJyb3IgZ2V0IGRlZmF1bHRWYWx1ZSA9PiBudWxsOwogIFNvdXJjZUxvY2F0aW9uIGdldCBsb2NhdGlvbiA9PiBudWxsOwogIExpc3Q8SW5zdGFuY2VNaXJyb3I+IGdldCBtZXRhZGF0YSA9PiBjb25zdCA8SW5zdGFuY2VNaXJyb3I+W107Cn0KCmFic3RyYWN0IGNsYXNzIF9Mb2NhbE9iamVjdE1pcnJvciBleHRlbmRzIF9Mb2NhbE1pcnJvciBpbXBsZW1lbnRzIE9iamVjdE1pcnJvciB7CiAgX2ludm9rZShyZWZsZWN0ZWUsIGZ1bmN0aW9uTmFtZSwgYXJndW1lbnRzLCBhcmd1bWVudE5hbWVzKTsKICBfaW52b2tlR2V0dGVyKHJlZmxlY3RlZSwgZ2V0dGVyTmFtZSk7CiAgX2ludm9rZVNldHRlcihyZWZsZWN0ZWUsIHNldHRlck5hbWUsIHZhbHVlKTsKCiAgZmluYWwgX3JlZmxlY3RlZTsgLy8gTWF5IGJlIGEgTWlycm9yUmVmZXJlbmNlIG9yIGFuIG9yZGluYXJ5IG9iamVjdC4KCiAgX0xvY2FsT2JqZWN0TWlycm9yLl8odGhpcy5fcmVmbGVjdGVlKTsKCiAgSW5zdGFuY2VNaXJyb3IgaW52b2tlKFN5bWJvbCBtZW1iZXJOYW1lLCBMaXN0IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIFtNYXA8U3ltYm9sLCBkeW5hbWljPiBuYW1lZEFyZ3VtZW50c10pIHsKICAgIGludCBudW1Qb3NpdGlvbmFsQXJndW1lbnRzID0gcG9zaXRpb25hbEFyZ3VtZW50cy5sZW5ndGg7CiAgICBpbnQgbnVtTmFtZWRBcmd1bWVudHMgPSBuYW1lZEFyZ3VtZW50cyAhPSBudWxsID8gbmFtZWRBcmd1bWVudHMubGVuZ3RoIDogMDsKICAgIGludCBudW1Bcmd1bWVudHMgPSBudW1Qb3NpdGlvbmFsQXJndW1lbnRzICsgbnVtTmFtZWRBcmd1bWVudHM7CiAgICBMaXN0IGFyZ3VtZW50cyA9IG5ldyBMaXN0KG51bUFyZ3VtZW50cyk7CiAgICBhcmd1bWVudHMuc2V0UmFuZ2UoMCwgbnVtUG9zaXRpb25hbEFyZ3VtZW50cywgcG9zaXRpb25hbEFyZ3VtZW50cyk7CiAgICBMaXN0IG5hbWVzID0gbmV3IExpc3QobnVtTmFtZWRBcmd1bWVudHMpOwogICAgaW50IGFyZ3VtZW50SW5kZXggPSBudW1Qb3NpdGlvbmFsQXJndW1lbnRzOwogICAgaW50IG5hbWVJbmRleCA9IDA7CiAgICBpZiAobnVtTmFtZWRBcmd1bWVudHMgPiAwKSB7CiAgICAgIG5hbWVkQXJndW1lbnRzLmZvckVhY2goKG5hbWUsIHZhbHVlKSB7CiAgICAgICAgYXJndW1lbnRzW2FyZ3VtZW50SW5kZXgrK10gPSB2YWx1ZTsKICAgICAgICBuYW1lc1tuYW1lSW5kZXgrK10gPSBfbihuYW1lKTsKICAgICAgfSk7CiAgICB9CgogICAgcmV0dXJuIHJlZmxlY3QodGhpcy5faW52b2tlKF9yZWZsZWN0ZWUsIF9uKG1lbWJlck5hbWUpLCBhcmd1bWVudHMsIG5hbWVzKSk7CiAgfQoKICBJbnN0YW5jZU1pcnJvciBnZXRGaWVsZChTeW1ib2wgbWVtYmVyTmFtZSkgewogICAgcmV0dXJuIHJlZmxlY3QodGhpcy5faW52b2tlR2V0dGVyKF9yZWZsZWN0ZWUsIF9uKG1lbWJlck5hbWUpKSk7CiAgfQoKICBJbnN0YW5jZU1pcnJvciBzZXRGaWVsZChTeW1ib2wgbWVtYmVyTmFtZSwgT2JqZWN0IHZhbHVlKSB7CiAgICB0aGlzLl9pbnZva2VTZXR0ZXIoX3JlZmxlY3RlZSwgX24obWVtYmVyTmFtZSksIHZhbHVlKTsKICAgIHJldHVybiByZWZsZWN0KHZhbHVlKTsKICB9CgogIGRlbGVnYXRlKEludm9jYXRpb24gaW52b2NhdGlvbikgewogICAgaWYgKGludm9jYXRpb24uaXNNZXRob2QpIHsKICAgICAgcmV0dXJuIHRoaXMKICAgICAgICAgIC5pbnZva2UoaW52b2NhdGlvbi5tZW1iZXJOYW1lLCBpbnZvY2F0aW9uLnBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgICAgICAgICAgaW52b2NhdGlvbi5uYW1lZEFyZ3VtZW50cykKICAgICAgICAgIC5yZWZsZWN0ZWU7CiAgICB9CiAgICBpZiAoaW52b2NhdGlvbi5pc0dldHRlcikgewogICAgICByZXR1cm4gdGhpcy5nZXRGaWVsZChpbnZvY2F0aW9uLm1lbWJlck5hbWUpLnJlZmxlY3RlZTsKICAgIH0KICAgIGlmIChpbnZvY2F0aW9uLmlzU2V0dGVyKSB7CiAgICAgIHZhciB1bndyYXBwZWQgPSBfbihpbnZvY2F0aW9uLm1lbWJlck5hbWUpOwogICAgICB2YXIgd2l0aG91dEVxdWFsID0gX3ModW53cmFwcGVkLnN1YnN0cmluZygwLCB1bndyYXBwZWQubGVuZ3RoIC0gMSkpOwogICAgICB2YXIgYXJnID0gaW52b2NhdGlvbi5wb3NpdGlvbmFsQXJndW1lbnRzWzBdOwogICAgICB0aGlzLnNldEZpZWxkKHdpdGhvdXRFcXVhbCwgYXJnKS5yZWZsZWN0ZWU7CiAgICAgIHJldHVybiBhcmc7CiAgICB9CiAgICB0aHJvdyAiVU5SRUFDSEFCTEUiOwogIH0KfQoKY2xhc3MgX0xvY2FsSW5zdGFuY2VNaXJyb3IgZXh0ZW5kcyBfTG9jYWxPYmplY3RNaXJyb3IKICAgIGltcGxlbWVudHMgSW5zdGFuY2VNaXJyb3IgewogIF9Mb2NhbEluc3RhbmNlTWlycm9yLl8ocmVmbGVjdGVlKSA6IHN1cGVyLl8ocmVmbGVjdGVlKTsKCiAgQ2xhc3NNaXJyb3IgX3R5cGU7CiAgQ2xhc3NNaXJyb3IgZ2V0IHR5cGUgewogICAgaWYgKF90eXBlID09IG51bGwpIHsKICAgICAgLy8gTm90ZSBpdCBub3Qgc2FmZSB0byB1c2UgcmVmbGVjdGVlLnJ1bnRpbWVUeXBlIGJlY2F1c2UgcnVudGltZVR5cGUgbWF5CiAgICAgIC8vIGJlIG92ZXJyaWRkZW4uCiAgICAgIF90eXBlID0gcmVmbGVjdFR5cGUoX2NvbXB1dGVUeXBlKHJlZmxlY3RlZSkpOwogICAgfQogICAgcmV0dXJuIF90eXBlOwogIH0KCiAgLy8gTG9jYWxJbnN0YW5jZU1pcnJvcnMgYWx3YXlzIHJlZmxlY3QgbG9jYWwgaW5zdGFuY2VzCiAgYm9vbCBnZXQgaGFzUmVmbGVjdGVlID0+IHRydWU7CgogIGdldCByZWZsZWN0ZWUgPT4gX3JlZmxlY3RlZTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0luc3RhbmNlTWlycm9yIG9uICR7RXJyb3Iuc2FmZVRvU3RyaW5nKF9yZWZsZWN0ZWUpfSc7CgogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIHJldHVybiBvdGhlciBpcyBfTG9jYWxJbnN0YW5jZU1pcnJvciAmJgogICAgICAgIGlkZW50aWNhbChfcmVmbGVjdGVlLCBvdGhlci5fcmVmbGVjdGVlKTsKICB9CgogIGludCBnZXQgaGFzaENvZGUgewogICAgLy8gQXZvaWQgaGFzaCBjb2xsaXNpb25zIHdpdGggdGhlIHJlZmxlY3RlZS4gVGhpcyBjb25zdGFudCBpcyBpbiBTbWkgcmFuZ2UKICAgIC8vIGFuZCBoYXBwZW5zIHRvIGJlIHRoZSBpbm5lciBwYWRkaW5nIGZyb20gUkZDIDIxMDQuCiAgICByZXR1cm4gaWRlbnRpdHlIYXNoQ29kZShfcmVmbGVjdGVlKSBeIDB4MzYzNjM2MzY7CiAgfQoKICBJbnN0YW5jZU1pcnJvciBnZXRGaWVsZChTeW1ib2wgbWVtYmVyTmFtZSkgewogICAgcmV0dXJuIHJlZmxlY3QoX2ludm9rZUdldHRlcihfcmVmbGVjdGVlLCBfbihtZW1iZXJOYW1lKSkpOwogIH0KCiAgSW5zdGFuY2VNaXJyb3Igc2V0RmllbGQoU3ltYm9sIG1lbWJlck5hbWUsIGFyZykgewogICAgX2ludm9rZVNldHRlcihfcmVmbGVjdGVlLCBfbihtZW1iZXJOYW1lKSwgYXJnKTsKICAgIHJldHVybiByZWZsZWN0KGFyZyk7CiAgfQoKICAvLyBPdmVycmlkZSB0byBpbmNsdWRlIHRoZSByZWNlaXZlciBpbiB0aGUgYXJndW1lbnRzLgogIEluc3RhbmNlTWlycm9yIGludm9rZShTeW1ib2wgbWVtYmVyTmFtZSwgTGlzdCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBbTWFwPFN5bWJvbCwgZHluYW1pYz4gbmFtZWRBcmd1bWVudHNdKSB7CiAgICBpbnQgbnVtUG9zaXRpb25hbEFyZ3VtZW50cyA9IHBvc2l0aW9uYWxBcmd1bWVudHMubGVuZ3RoICsgMTsgLy8gUmVjZWl2ZXIuCiAgICBpbnQgbnVtTmFtZWRBcmd1bWVudHMgPSBuYW1lZEFyZ3VtZW50cyAhPSBudWxsID8gbmFtZWRBcmd1bWVudHMubGVuZ3RoIDogMDsKICAgIGludCBudW1Bcmd1bWVudHMgPSBudW1Qb3NpdGlvbmFsQXJndW1lbnRzICsgbnVtTmFtZWRBcmd1bWVudHM7CiAgICBMaXN0IGFyZ3VtZW50cyA9IG5ldyBMaXN0KG51bUFyZ3VtZW50cyk7CiAgICBhcmd1bWVudHNbMF0gPSBfcmVmbGVjdGVlOyAvLyBSZWNlaXZlci4KICAgIGFyZ3VtZW50cy5zZXRSYW5nZSgxLCBudW1Qb3NpdGlvbmFsQXJndW1lbnRzLCBwb3NpdGlvbmFsQXJndW1lbnRzKTsKICAgIExpc3QgbmFtZXMgPSBuZXcgTGlzdChudW1OYW1lZEFyZ3VtZW50cyk7CiAgICBpbnQgYXJndW1lbnRJbmRleCA9IG51bVBvc2l0aW9uYWxBcmd1bWVudHM7CiAgICBpbnQgbmFtZUluZGV4ID0gMDsKICAgIGlmIChudW1OYW1lZEFyZ3VtZW50cyA+IDApIHsKICAgICAgbmFtZWRBcmd1bWVudHMuZm9yRWFjaCgobmFtZSwgdmFsdWUpIHsKICAgICAgICBhcmd1bWVudHNbYXJndW1lbnRJbmRleCsrXSA9IHZhbHVlOwogICAgICAgIG5hbWVzW25hbWVJbmRleCsrXSA9IF9uKG5hbWUpOwogICAgICB9KTsKICAgIH0KCiAgICByZXR1cm4gcmVmbGVjdCh0aGlzLl9pbnZva2UoX3JlZmxlY3RlZSwgX24obWVtYmVyTmFtZSksIGFyZ3VtZW50cywgbmFtZXMpKTsKICB9CgogIF9pbnZva2UocmVmbGVjdGVlLCBmdW5jdGlvbk5hbWUsIGFyZ3VtZW50cywgYXJndW1lbnROYW1lcykKICAgICAgbmF0aXZlICdJbnN0YW5jZU1pcnJvcl9pbnZva2UnOwoKICBfaW52b2tlR2V0dGVyKHJlZmxlY3RlZSwgZ2V0dGVyTmFtZSkgbmF0aXZlICdJbnN0YW5jZU1pcnJvcl9pbnZva2VHZXR0ZXInOwoKICBfaW52b2tlU2V0dGVyKHJlZmxlY3RlZSwgc2V0dGVyTmFtZSwgdmFsdWUpCiAgICAgIG5hdGl2ZSAnSW5zdGFuY2VNaXJyb3JfaW52b2tlU2V0dGVyJzsKCiAgc3RhdGljIF9jb21wdXRlVHlwZShyZWZsZWN0ZWUpIG5hdGl2ZSAnSW5zdGFuY2VNaXJyb3JfY29tcHV0ZVR5cGUnOwp9CgpjbGFzcyBfTG9jYWxDbG9zdXJlTWlycm9yIGV4dGVuZHMgX0xvY2FsSW5zdGFuY2VNaXJyb3IKICAgIGltcGxlbWVudHMgQ2xvc3VyZU1pcnJvciB7CiAgX0xvY2FsQ2xvc3VyZU1pcnJvci5fKHJlZmxlY3RlZSkgOiBzdXBlci5fKHJlZmxlY3RlZSk7CgogIE1ldGhvZE1pcnJvciBfZnVuY3Rpb247CiAgTWV0aG9kTWlycm9yIGdldCBmdW5jdGlvbiB7CiAgICBpZiAoX2Z1bmN0aW9uID09IG51bGwpIHsKICAgICAgX2Z1bmN0aW9uID0gX2NvbXB1dGVGdW5jdGlvbihyZWZsZWN0ZWUpOwogICAgfQogICAgcmV0dXJuIF9mdW5jdGlvbjsKICB9CgogIEluc3RhbmNlTWlycm9yIGFwcGx5KExpc3Q8T2JqZWN0PiBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBbTWFwPFN5bWJvbCwgT2JqZWN0PiBuYW1lZEFyZ3VtZW50c10pIHsKICAgIHJldHVybiB0aGlzLmludm9rZSgjY2FsbCwgcG9zaXRpb25hbEFyZ3VtZW50cywgbmFtZWRBcmd1bWVudHMpOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkNsb3N1cmVNaXJyb3Igb24gJyR7RXJyb3Iuc2FmZVRvU3RyaW5nKF9yZWZsZWN0ZWUpfSciOwoKICBzdGF0aWMgX2NvbXB1dGVGdW5jdGlvbihyZWZsZWN0ZWUpIG5hdGl2ZSAnQ2xvc3VyZU1pcnJvcl9mdW5jdGlvbic7Cn0KCmFic3RyYWN0IGNsYXNzIF9Mb2NhbFR5cGVNaXJyb3IgewogIFR5cGUgZ2V0IF9yZWZsZWN0ZWRUeXBlOwp9CgpjbGFzcyBfTG9jYWxDbGFzc01pcnJvciBleHRlbmRzIF9Mb2NhbE9iamVjdE1pcnJvcgogICAgaW1wbGVtZW50cyBDbGFzc01pcnJvciwgX0xvY2FsVHlwZU1pcnJvciB7CiAgZmluYWwgVHlwZSBfcmVmbGVjdGVkVHlwZTsKICBTeW1ib2wgX3NpbXBsZU5hbWU7CiAgRGVjbGFyYXRpb25NaXJyb3IgX293bmVyOwogIGZpbmFsIGJvb2wgaXNBYnN0cmFjdDsKICBmaW5hbCBib29sIF9pc0dlbmVyaWM7CgogIC8vIFNpbmNlIERhcnQgMiwgbWl4aW5zIGFyZSBlcmFzZWQgYnkga2VybmVsIHRyYW5zZm9ybWF0aW9uLgogIC8vIFJlc3VsdGluZyBjbGFzc2VzIGhhdmUgdGhpcyBmbGFnIHNldCwgYW5kIG1peGVkLWluIHR5cGUgaXMgcHVsbGVkIGludG8KICAvLyB0aGUgZW5kIG9mIGludGVyZmFjZXMgbGlzdC4KICBmaW5hbCBib29sIF9pc1RyYW5zZm9ybWVkTWl4aW5BcHBsaWNhdGlvbjsKCiAgZmluYWwgYm9vbCBfaXNHZW5lcmljRGVjbGFyYXRpb247CiAgZmluYWwgYm9vbCBpc0VudW07CiAgVHlwZSBfaW5zdGFudGlhdG9yOwoKICBfTG9jYWxDbGFzc01pcnJvci5fKAogICAgICByZWZsZWN0ZWUsCiAgICAgIHJlZmxlY3RlZFR5cGUsCiAgICAgIFN0cmluZyBzaW1wbGVOYW1lLAogICAgICB0aGlzLl9vd25lciwKICAgICAgdGhpcy5pc0Fic3RyYWN0LAogICAgICB0aGlzLl9pc0dlbmVyaWMsCiAgICAgIHRoaXMuX2lzVHJhbnNmb3JtZWRNaXhpbkFwcGxpY2F0aW9uLAogICAgICB0aGlzLl9pc0dlbmVyaWNEZWNsYXJhdGlvbiwKICAgICAgdGhpcy5pc0VudW0pCiAgICAgIDogdGhpcy5fc2ltcGxlTmFtZSA9IF9zKHNpbXBsZU5hbWUpLAogICAgICAgIHRoaXMuX3JlZmxlY3RlZFR5cGUgPSByZWZsZWN0ZWRUeXBlLAogICAgICAgIHRoaXMuX2luc3RhbnRpYXRvciA9IHJlZmxlY3RlZFR5cGUsCiAgICAgICAgc3VwZXIuXyhyZWZsZWN0ZWUpOwoKICBib29sIGdldCBoYXNSZWZsZWN0ZWRUeXBlID0+ICFfaXNHZW5lcmljRGVjbGFyYXRpb247CiAgVHlwZSBnZXQgcmVmbGVjdGVkVHlwZSB7CiAgICBpZiAoIWhhc1JlZmxlY3RlZFR5cGUpIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAiRGVjbGFyYXRpb25zIG9mIGdlbmVyaWNzIGhhdmUgbm8gcmVmbGVjdGVkIHR5cGUiKTsKICAgIH0KICAgIHJldHVybiBfcmVmbGVjdGVkVHlwZTsKICB9CgogIFN5bWJvbCBnZXQgc2ltcGxlTmFtZSB7CiAgICAvLyBBbGwgYnV0IGFub255bW91cyBtaXhpbiBhcHBsaWNhdGlvbnMgaGF2ZSB0aGVpciBuYW1lIHNldCBhdCBjb25zdHJ1Y3Rpb24uCiAgICBpZiAoX3NpbXBsZU5hbWUgPT0gbnVsbCkgewogICAgICBfc2ltcGxlTmFtZSA9IHRoaXMuX21peGluQXBwbGljYXRpb25OYW1lOwogICAgfQogICAgcmV0dXJuIF9zaW1wbGVOYW1lOwogIH0KCiAgU3ltYm9sIF9xdWFsaWZpZWROYW1lOwogIFN5bWJvbCBnZXQgcXVhbGlmaWVkTmFtZSB7CiAgICBpZiAoX3F1YWxpZmllZE5hbWUgPT0gbnVsbCkgewogICAgICBfcXVhbGlmaWVkTmFtZSA9IF9jb21wdXRlUXVhbGlmaWVkTmFtZShvd25lciwgc2ltcGxlTmFtZSk7CiAgICB9CiAgICByZXR1cm4gX3F1YWxpZmllZE5hbWU7CiAgfQoKICBEZWNsYXJhdGlvbk1pcnJvciBnZXQgb3duZXIgewogICAgaWYgKF9vd25lciA9PSBudWxsKSB7CiAgICAgIHZhciB1cmkgPSBfTG9jYWxDbGFzc01pcnJvci5fbGlicmFyeVVyaShfcmVmbGVjdGVlKTsKICAgICAgX293bmVyID0gY3VycmVudE1pcnJvclN5c3RlbSgpLmxpYnJhcmllc1tVcmkucGFyc2UodXJpKV07CiAgICB9CiAgICByZXR1cm4gX293bmVyOwogIH0KCiAgYm9vbCBnZXQgaXNQcml2YXRlID0+IF9uKHNpbXBsZU5hbWUpLnN0YXJ0c1dpdGgoJ18nKTsKCiAgYm9vbCBnZXQgaXNUb3BMZXZlbCA9PiB0cnVlOwoKICBTb3VyY2VMb2NhdGlvbiBnZXQgbG9jYXRpb24gewogICAgcmV0dXJuIF9sb2NhdGlvbihfcmVmbGVjdGVlKTsKICB9CgogIF9Mb2NhbENsYXNzTWlycm9yIF90cnVlU3VwZXJjbGFzc0ZpZWxkOwogIF9Mb2NhbENsYXNzTWlycm9yIGdldCBfdHJ1ZVN1cGVyY2xhc3MgewogICAgaWYgKF90cnVlU3VwZXJjbGFzc0ZpZWxkID09IG51bGwpIHsKICAgICAgVHlwZSBzdXBlcnR5cGUgPSBpc09yaWdpbmFsRGVjbGFyYXRpb24KICAgICAgICAgID8gX3N1cGVydHlwZShfcmVmbGVjdGVkVHlwZSkKICAgICAgICAgIDogX3N1cGVydHlwZUluc3RhbnRpYXRlZChfcmVmbGVjdGVkVHlwZSk7CiAgICAgIGlmIChzdXBlcnR5cGUgPT0gbnVsbCkgewogICAgICAgIC8vIE9iamVjdCBoYXMgbm8gc3VwZXJjbGFzcy4KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBfdHJ1ZVN1cGVyY2xhc3NGaWVsZCA9IHJlZmxlY3RUeXBlKHN1cGVydHlwZSk7CiAgICAgIF90cnVlU3VwZXJjbGFzc0ZpZWxkLl9pbnN0YW50aWF0b3IgPSBfaW5zdGFudGlhdG9yOwogICAgfQogICAgcmV0dXJuIF90cnVlU3VwZXJjbGFzc0ZpZWxkOwogIH0KCiAgQ2xhc3NNaXJyb3IgZ2V0IHN1cGVyY2xhc3MgewogICAgcmV0dXJuIF90cnVlU3VwZXJjbGFzczsKICB9CgogIHZhciBfc3VwZXJpbnRlcmZhY2VzOwogIExpc3Q8Q2xhc3NNaXJyb3I+IGdldCBzdXBlcmludGVyZmFjZXMgewogICAgaWYgKF9zdXBlcmludGVyZmFjZXMgPT0gbnVsbCkgewogICAgICB2YXIgaW50ZXJmYWNlVHlwZXMgPSBpc09yaWdpbmFsRGVjbGFyYXRpb24KICAgICAgICAgID8gX25hdGl2ZUludGVyZmFjZXMoX3JlZmxlY3RlZFR5cGUpCiAgICAgICAgICA6IF9uYXRpdmVJbnRlcmZhY2VzSW5zdGFudGlhdGVkKF9yZWZsZWN0ZWRUeXBlKTsKICAgICAgaWYgKF9pc1RyYW5zZm9ybWVkTWl4aW5BcHBsaWNhdGlvbikgewogICAgICAgIGludGVyZmFjZVR5cGVzID0gaW50ZXJmYWNlVHlwZXMuc3VibGlzdCgwLCBpbnRlcmZhY2VUeXBlcy5sZW5ndGggLSAxKTsKICAgICAgfQogICAgICB2YXIgaW50ZXJmYWNlTWlycm9ycyA9IG5ldyBMaXN0PENsYXNzTWlycm9yPigpOwogICAgICBmb3IgKHZhciBpbnRlcmZhY2VUeXBlIGluIGludGVyZmFjZVR5cGVzKSB7CiAgICAgICAgaW50ZXJmYWNlTWlycm9ycy5hZGQocmVmbGVjdFR5cGUoaW50ZXJmYWNlVHlwZSkpOwogICAgICB9CiAgICAgIF9zdXBlcmludGVyZmFjZXMgPQogICAgICAgICAgbmV3IFVubW9kaWZpYWJsZUxpc3RWaWV3PENsYXNzTWlycm9yPihpbnRlcmZhY2VNaXJyb3JzKTsKICAgIH0KICAgIHJldHVybiBfc3VwZXJpbnRlcmZhY2VzOwogIH0KCiAgZ2V0IF9taXhpbkFwcGxpY2F0aW9uTmFtZSB7CiAgICB2YXIgbWl4aW5zID0gbmV3IExpc3Q8Q2xhc3NNaXJyb3I+KCk7CiAgICB2YXIga2xhc3MgPSB0aGlzOwogICAgd2hpbGUgKF9uYXRpdmVNaXhpbihrbGFzcy5fcmVmbGVjdGVkVHlwZSkgIT0gbnVsbCkgewogICAgICBtaXhpbnMuYWRkKGtsYXNzLm1peGluKTsKICAgICAga2xhc3MgPSBrbGFzcy5zdXBlcmNsYXNzOwogICAgfQogICAgcmV0dXJuIF9zKF9uKGtsYXNzLnF1YWxpZmllZE5hbWUpICsKICAgICAgICAnIHdpdGggJyArCiAgICAgICAgbWl4aW5zLnJldmVyc2VkLm1hcCgobSkgPT4gX24obS5xdWFsaWZpZWROYW1lKSkuam9pbignLCAnKSk7CiAgfQoKICB2YXIgX21peGluOwogIENsYXNzTWlycm9yIGdldCBtaXhpbiB7CiAgICBpZiAoX21peGluID09IG51bGwpIHsKICAgICAgVHlwZSBtaXhpblR5cGUgPQogICAgICAgICAgX25hdGl2ZU1peGluSW5zdGFudGlhdGVkKF9yZWZsZWN0ZWRUeXBlLCBfaW5zdGFudGlhdG9yKTsKICAgICAgaWYgKG1peGluVHlwZSA9PSBudWxsKSB7CiAgICAgICAgLy8gVGhlIHJlZmxlY3RlZSBpcyBub3QgYSBtaXhpbiBhcHBsaWNhdGlvbi4KICAgICAgICBfbWl4aW4gPSB0aGlzOwogICAgICB9IGVsc2UgewogICAgICAgIF9taXhpbiA9IHJlZmxlY3RUeXBlKG1peGluVHlwZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfbWl4aW47CiAgfQoKICB2YXIgX2NhY2hlZFN0YXRpY01lbWJlcnM7CiAgTWFwPFN5bWJvbCwgTWV0aG9kTWlycm9yPiBnZXQgc3RhdGljTWVtYmVycyB7CiAgICBpZiAoX2NhY2hlZFN0YXRpY01lbWJlcnMgPT0gbnVsbCkgewogICAgICB2YXIgcmVzdWx0ID0gbmV3IE1hcDxTeW1ib2wsIE1ldGhvZE1pcnJvcj4oKTsKICAgICAgZGVjbGFyYXRpb25zLnZhbHVlcy5mb3JFYWNoKChkZWNsKSB7CiAgICAgICAgaWYgKGRlY2wgaXMgTWV0aG9kTWlycm9yICYmIGRlY2wuaXNTdGF0aWMgJiYgIWRlY2wuaXNDb25zdHJ1Y3RvcikgewogICAgICAgICAgcmVzdWx0W2RlY2wuc2ltcGxlTmFtZV0gPSBkZWNsOwogICAgICAgIH0KICAgICAgICBpZiAoZGVjbCBpcyBWYXJpYWJsZU1pcnJvciAmJiBkZWNsLmlzU3RhdGljKSB7CiAgICAgICAgICB2YXIgZ2V0dGVyTmFtZSA9IGRlY2wuc2ltcGxlTmFtZTsKICAgICAgICAgIHJlc3VsdFtnZXR0ZXJOYW1lXSA9CiAgICAgICAgICAgICAgbmV3IF9TeW50aGV0aWNBY2Nlc3Nvcih0aGlzLCBnZXR0ZXJOYW1lLCB0cnVlLCB0cnVlLCBmYWxzZSwgZGVjbCk7CiAgICAgICAgICBpZiAoIWRlY2wuaXNGaW5hbCkgewogICAgICAgICAgICB2YXIgc2V0dGVyTmFtZSA9IF9hc1NldHRlcihkZWNsLnNpbXBsZU5hbWUsIHRoaXMub3duZXIpOwogICAgICAgICAgICByZXN1bHRbc2V0dGVyTmFtZV0gPSBuZXcgX1N5bnRoZXRpY0FjY2Vzc29yKAogICAgICAgICAgICAgICAgdGhpcywgc2V0dGVyTmFtZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBkZWNsKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwogICAgICBfY2FjaGVkU3RhdGljTWVtYmVycyA9CiAgICAgICAgICBuZXcgVW5tb2RpZmlhYmxlTWFwVmlldzxTeW1ib2wsIE1ldGhvZE1pcnJvcj4ocmVzdWx0KTsKICAgIH0KICAgIHJldHVybiBfY2FjaGVkU3RhdGljTWVtYmVyczsKICB9CgogIHZhciBfY2FjaGVkSW5zdGFuY2VNZW1iZXJzOwogIE1hcDxTeW1ib2wsIE1ldGhvZE1pcnJvcj4gZ2V0IGluc3RhbmNlTWVtYmVycyB7CiAgICBpZiAoX2NhY2hlZEluc3RhbmNlTWVtYmVycyA9PSBudWxsKSB7CiAgICAgIHZhciByZXN1bHQgPSBuZXcgTWFwPFN5bWJvbCwgTWV0aG9kTWlycm9yPigpOwogICAgICBpZiAoc3VwZXJjbGFzcyAhPSBudWxsKSB7CiAgICAgICAgcmVzdWx0LmFkZEFsbChzdXBlcmNsYXNzLmluc3RhbmNlTWVtYmVycyk7CiAgICAgIH0KICAgICAgZGVjbGFyYXRpb25zLnZhbHVlcy5mb3JFYWNoKChkZWNsKSB7CiAgICAgICAgaWYgKGRlY2wgaXMgTWV0aG9kTWlycm9yICYmCiAgICAgICAgICAgICFkZWNsLmlzU3RhdGljICYmCiAgICAgICAgICAgICFkZWNsLmlzQ29uc3RydWN0b3IgJiYKICAgICAgICAgICAgIWRlY2wuaXNBYnN0cmFjdCkgewogICAgICAgICAgcmVzdWx0W2RlY2wuc2ltcGxlTmFtZV0gPSBkZWNsOwogICAgICAgIH0KICAgICAgICBpZiAoZGVjbCBpcyBWYXJpYWJsZU1pcnJvciAmJiAhZGVjbC5pc1N0YXRpYykgewogICAgICAgICAgdmFyIGdldHRlck5hbWUgPSBkZWNsLnNpbXBsZU5hbWU7CiAgICAgICAgICByZXN1bHRbZ2V0dGVyTmFtZV0gPSBuZXcgX1N5bnRoZXRpY0FjY2Vzc29yKAogICAgICAgICAgICAgIHRoaXMsIGdldHRlck5hbWUsIHRydWUsIGZhbHNlLCBmYWxzZSwgZGVjbCk7CiAgICAgICAgICBpZiAoIWRlY2wuaXNGaW5hbCkgewogICAgICAgICAgICB2YXIgc2V0dGVyTmFtZSA9IF9hc1NldHRlcihkZWNsLnNpbXBsZU5hbWUsIHRoaXMub3duZXIpOwogICAgICAgICAgICByZXN1bHRbc2V0dGVyTmFtZV0gPSBuZXcgX1N5bnRoZXRpY0FjY2Vzc29yKAogICAgICAgICAgICAgICAgdGhpcywgc2V0dGVyTmFtZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZGVjbCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgICAgX2NhY2hlZEluc3RhbmNlTWVtYmVycyA9CiAgICAgICAgICBuZXcgVW5tb2RpZmlhYmxlTWFwVmlldzxTeW1ib2wsIE1ldGhvZE1pcnJvcj4ocmVzdWx0KTsKICAgIH0KICAgIHJldHVybiBfY2FjaGVkSW5zdGFuY2VNZW1iZXJzOwogIH0KCiAgTWFwPFN5bWJvbCwgRGVjbGFyYXRpb25NaXJyb3I+IF9kZWNsYXJhdGlvbnM7CiAgTWFwPFN5bWJvbCwgRGVjbGFyYXRpb25NaXJyb3I+IGdldCBkZWNsYXJhdGlvbnMgewogICAgaWYgKF9kZWNsYXJhdGlvbnMgIT0gbnVsbCkgcmV0dXJuIF9kZWNsYXJhdGlvbnM7CgogICAgdmFyIGRlY2xzID0gbmV3IE1hcDxTeW1ib2wsIERlY2xhcmF0aW9uTWlycm9yPigpOwoKICAgIHZhciBtZW1iZXJzID0gX2NvbXB1dGVNZW1iZXJzKG1peGluLCBfaW5zdGFudGlhdG9yLCBfcmVmbGVjdGVlKTsKICAgIGZvciAodmFyIG1lbWJlciBpbiBtZW1iZXJzKSB7CiAgICAgIGRlY2xzW21lbWJlci5zaW1wbGVOYW1lXSA9IG1lbWJlcjsKICAgIH0KCiAgICB2YXIgY29uc3RydWN0b3JzID0gX2NvbXB1dGVDb25zdHJ1Y3RvcnMoX2luc3RhbnRpYXRvciwgX3JlZmxlY3RlZSk7CiAgICB2YXIgc3RyaW5nTmFtZSA9IF9uKHNpbXBsZU5hbWUpOwogICAgZm9yICh2YXIgY29uc3RydWN0b3IgaW4gY29uc3RydWN0b3JzKSB7CiAgICAgIGNvbnN0cnVjdG9yLl9wYXRjaENvbnN0cnVjdG9yTmFtZShzdHJpbmdOYW1lKTsKICAgICAgZGVjbHNbY29uc3RydWN0b3Iuc2ltcGxlTmFtZV0gPSBjb25zdHJ1Y3RvcjsKICAgIH0KCiAgICBmb3IgKHZhciB0eXBlVmFyaWFibGUgaW4gdHlwZVZhcmlhYmxlcykgewogICAgICBkZWNsc1t0eXBlVmFyaWFibGUuc2ltcGxlTmFtZV0gPSB0eXBlVmFyaWFibGU7CiAgICB9CgogICAgcmV0dXJuIF9kZWNsYXJhdGlvbnMgPQogICAgICAgIG5ldyBVbm1vZGlmaWFibGVNYXBWaWV3PFN5bWJvbCwgRGVjbGFyYXRpb25NaXJyb3I+KGRlY2xzKTsKICB9CgogIC8vIE5vdGU6IHJldHVybnMgY29ycmVjdCByZXN1bHQgb25seSBmb3IgRGFydCAxIGFub255bW91cyBtaXhpbiBhcHBsaWNhdGlvbnMuCiAgYm9vbCBnZXQgX2lzQW5vbnltb3VzTWl4aW5BcHBsaWNhdGlvbiB7CiAgICBpZiAobWl4aW4gPT0gdGhpcykgcmV0dXJuIGZhbHNlOyAvLyBOb3QgYSBtaXhpbiBhcHBsaWNhdGlvbi4KICAgIHJldHVybiB0cnVlOwogIH0KCiAgTGlzdDxUeXBlVmFyaWFibGVNaXJyb3I+IF90eXBlVmFyaWFibGVzOwogIExpc3Q8VHlwZVZhcmlhYmxlTWlycm9yPiBnZXQgdHlwZVZhcmlhYmxlcyB7CiAgICBpZiAoX3R5cGVWYXJpYWJsZXMgPT0gbnVsbCkgewogICAgICBpZiAoIV9pc1RyYW5zZm9ybWVkTWl4aW5BcHBsaWNhdGlvbiAmJiBfaXNBbm9ueW1vdXNNaXhpbkFwcGxpY2F0aW9uKSB7CiAgICAgICAgcmV0dXJuIF90eXBlVmFyaWFibGVzID0gY29uc3QgPFR5cGVWYXJpYWJsZU1pcnJvcj5bXTsKICAgICAgfQogICAgICBfdHlwZVZhcmlhYmxlcyA9IG5ldyBMaXN0PFR5cGVWYXJpYWJsZU1pcnJvcj4oKTsKCiAgICAgIExpc3QgcGFyYW1zID0gX0NsYXNzTWlycm9yX3R5cGVfdmFyaWFibGVzKF9yZWZsZWN0ZWUpOwogICAgICBDbGFzc01pcnJvciBvd25lciA9IG9yaWdpbmFsRGVjbGFyYXRpb247CiAgICAgIHZhciBtaXJyb3I7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSArPSAyKSB7CiAgICAgICAgbWlycm9yID0gbmV3IF9Mb2NhbFR5cGVWYXJpYWJsZU1pcnJvci5fKHBhcmFtc1tpICsgMV0sIHBhcmFtc1tpXSwgb3duZXIpOwogICAgICAgIF90eXBlVmFyaWFibGVzLmFkZChtaXJyb3IpOwogICAgICB9CiAgICAgIF90eXBlVmFyaWFibGVzID0KICAgICAgICAgIG5ldyBVbm1vZGlmaWFibGVMaXN0VmlldzxUeXBlVmFyaWFibGVNaXJyb3I+KF90eXBlVmFyaWFibGVzKTsKICAgIH0KICAgIHJldHVybiBfdHlwZVZhcmlhYmxlczsKICB9CgogIExpc3Q8VHlwZU1pcnJvcj4gX3R5cGVBcmd1bWVudHM7CiAgTGlzdDxUeXBlTWlycm9yPiBnZXQgdHlwZUFyZ3VtZW50cyB7CiAgICBpZiAoX3R5cGVBcmd1bWVudHMgPT0gbnVsbCkgewogICAgICBpZiAoX2lzR2VuZXJpY0RlY2xhcmF0aW9uIHx8CiAgICAgICAgICAoIV9pc1RyYW5zZm9ybWVkTWl4aW5BcHBsaWNhdGlvbiAmJiBfaXNBbm9ueW1vdXNNaXhpbkFwcGxpY2F0aW9uKSkgewogICAgICAgIF90eXBlQXJndW1lbnRzID0gY29uc3QgPFR5cGVNaXJyb3I+W107CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX3R5cGVBcmd1bWVudHMgPSBuZXcgVW5tb2RpZmlhYmxlTGlzdFZpZXc8VHlwZU1pcnJvcj4oCiAgICAgICAgICAgIF9jb21wdXRlVHlwZUFyZ3VtZW50cyhfcmVmbGVjdGVkVHlwZSkuY2FzdDxUeXBlTWlycm9yPigpKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIF90eXBlQXJndW1lbnRzOwogIH0KCiAgYm9vbCBnZXQgaXNPcmlnaW5hbERlY2xhcmF0aW9uID0+ICFfaXNHZW5lcmljIHx8IF9pc0dlbmVyaWNEZWNsYXJhdGlvbjsKCiAgQ2xhc3NNaXJyb3IgZ2V0IG9yaWdpbmFsRGVjbGFyYXRpb24gewogICAgaWYgKGlzT3JpZ2luYWxEZWNsYXJhdGlvbikgewogICAgICByZXR1cm4gdGhpczsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiByZWZsZWN0Q2xhc3MoX3JlZmxlY3RlZFR5cGUpOwogICAgfQogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkNsYXNzTWlycm9yIG9uICcke01pcnJvclN5c3RlbS5nZXROYW1lKHNpbXBsZU5hbWUpfSciOwoKICBJbnN0YW5jZU1pcnJvciBuZXdJbnN0YW5jZShTeW1ib2wgY29uc3RydWN0b3JOYW1lLCBMaXN0IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIFtNYXA8U3ltYm9sLCBkeW5hbWljPiBuYW1lZEFyZ3VtZW50c10pIHsKICAgIC8vIE5hdGl2ZSBjb2RlIHdpbGwgYWRkIHRoZSAxIG9yIDIgaW1wbGljaXQgYXJndW1lbnRzIGRlcGVuZGluZyBvbiB3aGV0aGVyCiAgICAvLyB3ZSBlbmQgdXAgaW52b2tpbmcgYSBmYWN0b3J5IG9yIGNvbnN0cnVjdG9yIHJlc3BlY3RpdmVseS4KICAgIGludCBudW1Qb3NpdGlvbmFsQXJndW1lbnRzID0gcG9zaXRpb25hbEFyZ3VtZW50cy5sZW5ndGg7CiAgICBpbnQgbnVtTmFtZWRBcmd1bWVudHMgPSBuYW1lZEFyZ3VtZW50cyAhPSBudWxsID8gbmFtZWRBcmd1bWVudHMubGVuZ3RoIDogMDsKICAgIGludCBudW1Bcmd1bWVudHMgPSBudW1Qb3NpdGlvbmFsQXJndW1lbnRzICsgbnVtTmFtZWRBcmd1bWVudHM7CiAgICBMaXN0IGFyZ3VtZW50cyA9IG5ldyBMaXN0KG51bUFyZ3VtZW50cyk7CiAgICBhcmd1bWVudHMuc2V0UmFuZ2UoMCwgbnVtUG9zaXRpb25hbEFyZ3VtZW50cywgcG9zaXRpb25hbEFyZ3VtZW50cyk7CiAgICBMaXN0IG5hbWVzID0gbmV3IExpc3QobnVtTmFtZWRBcmd1bWVudHMpOwogICAgaW50IGFyZ3VtZW50SW5kZXggPSBudW1Qb3NpdGlvbmFsQXJndW1lbnRzOwogICAgaW50IG5hbWVJbmRleCA9IDA7CiAgICBpZiAobnVtTmFtZWRBcmd1bWVudHMgPiAwKSB7CiAgICAgIG5hbWVkQXJndW1lbnRzLmZvckVhY2goKG5hbWUsIHZhbHVlKSB7CiAgICAgICAgYXJndW1lbnRzW2FyZ3VtZW50SW5kZXgrK10gPSB2YWx1ZTsKICAgICAgICBuYW1lc1tuYW1lSW5kZXgrK10gPSBfbihuYW1lKTsKICAgICAgfSk7CiAgICB9CgogICAgcmV0dXJuIHJlZmxlY3QoX2ludm9rZUNvbnN0cnVjdG9yKAogICAgICAgIF9yZWZsZWN0ZWUsIF9yZWZsZWN0ZWRUeXBlLCBfbihjb25zdHJ1Y3Rvck5hbWUpLCBhcmd1bWVudHMsIG5hbWVzKSk7CiAgfQoKICBMaXN0PEluc3RhbmNlTWlycm9yPiBnZXQgbWV0YWRhdGEgewogICAgLy8gR2V0IHRoZSBtZXRhZGF0YSBvYmplY3RzLCBjb252ZXJ0IHRoZW0gaW50byBJbnN0YW5jZU1pcnJvcnMgdXNpbmcKICAgIC8vIHJlZmxlY3QoKSBhbmQgdGhlbiBtYWtlIHRoZW0gaW50byBhIERhcnQgbGlzdC4KICAgIHJldHVybiBuZXcgVW5tb2RpZmlhYmxlTGlzdFZpZXc8SW5zdGFuY2VNaXJyb3I+KAogICAgICAgIF9tZXRhZGF0YShfcmVmbGVjdGVlKS5tYXAocmVmbGVjdCkpOwogIH0KCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgcmV0dXJuIHRoaXMucnVudGltZVR5cGUgPT0gb3RoZXIucnVudGltZVR5cGUgJiYKICAgICAgICB0aGlzLl9yZWZsZWN0ZWUgPT0gb3RoZXIuX3JlZmxlY3RlZSAmJgogICAgICAgIHRoaXMuX3JlZmxlY3RlZFR5cGUgPT0gb3RoZXIuX3JlZmxlY3RlZFR5cGUgJiYKICAgICAgICB0aGlzLl9pc0dlbmVyaWNEZWNsYXJhdGlvbiA9PSBvdGhlci5faXNHZW5lcmljRGVjbGFyYXRpb247CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHNpbXBsZU5hbWUuaGFzaENvZGU7CgogIGJvb2wgaXNTdWJ0eXBlT2YoVHlwZU1pcnJvciBvdGhlcikgewogICAgaWYgKG90aGVyID09IGN1cnJlbnRNaXJyb3JTeXN0ZW0oKS5keW5hbWljVHlwZSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgPT0gY3VycmVudE1pcnJvclN5c3RlbSgpLnZvaWRUeXBlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX3N1YnR5cGVUZXN0KAogICAgICAgIF9yZWZsZWN0ZWRUeXBlLCAob3RoZXIgYXMgX0xvY2FsVHlwZU1pcnJvcikuX3JlZmxlY3RlZFR5cGUpOwogIH0KCiAgYm9vbCBpc0Fzc2lnbmFibGVUbyhUeXBlTWlycm9yIG90aGVyKSB7CiAgICBpZiAob3RoZXIgPT0gY3VycmVudE1pcnJvclN5c3RlbSgpLmR5bmFtaWNUeXBlKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciA9PSBjdXJyZW50TWlycm9yU3lzdGVtKCkudm9pZFR5cGUpIHJldHVybiBmYWxzZTsKICAgIGZpbmFsIG90aGVyUmVmbGVjdGVkVHlwZSA9IChvdGhlciBhcyBfTG9jYWxUeXBlTWlycm9yKS5fcmVmbGVjdGVkVHlwZTsKICAgIHJldHVybiBfc3VidHlwZVRlc3QoX3JlZmxlY3RlZFR5cGUsIG90aGVyUmVmbGVjdGVkVHlwZSkgfHwKICAgICAgICBfc3VidHlwZVRlc3Qob3RoZXJSZWZsZWN0ZWRUeXBlLCBfcmVmbGVjdGVkVHlwZSk7CiAgfQoKICBib29sIGlzU3ViY2xhc3NPZihDbGFzc01pcnJvciBvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBDbGFzc01pcnJvcikgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iob3RoZXIpOwogICAgQ2xhc3NNaXJyb3Igb3RoZXJEZWNsYXJhdGlvbiA9IG90aGVyLm9yaWdpbmFsRGVjbGFyYXRpb247CiAgICBDbGFzc01pcnJvciBjID0gdGhpczsKICAgIHdoaWxlIChjICE9IG51bGwpIHsKICAgICAgYyA9IGMub3JpZ2luYWxEZWNsYXJhdGlvbjsKICAgICAgaWYgKGMgPT0gb3RoZXJEZWNsYXJhdGlvbikgcmV0dXJuIHRydWU7CiAgICAgIGMgPSBjLnN1cGVyY2xhc3M7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBzdGF0aWMgU3RyaW5nIF9saWJyYXJ5VXJpKHJlZmxlY3RlZSkgbmF0aXZlICJDbGFzc01pcnJvcl9saWJyYXJ5VXJpIjsKCiAgc3RhdGljIFR5cGUgX3N1cGVydHlwZShyZWZsZWN0ZWRUeXBlKSBuYXRpdmUgIkNsYXNzTWlycm9yX3N1cGVydHlwZSI7CgogIHN0YXRpYyBUeXBlIF9zdXBlcnR5cGVJbnN0YW50aWF0ZWQocmVmbGVjdGVkVHlwZSkKICAgICAgbmF0aXZlICJDbGFzc01pcnJvcl9zdXBlcnR5cGVfaW5zdGFudGlhdGVkIjsKCiAgc3RhdGljIExpc3Q8ZHluYW1pYz4gX25hdGl2ZUludGVyZmFjZXMocmVmbGVjdGVkVHlwZSkKICAgICAgbmF0aXZlICJDbGFzc01pcnJvcl9pbnRlcmZhY2VzIjsKCiAgc3RhdGljIExpc3Q8ZHluYW1pYz4gX25hdGl2ZUludGVyZmFjZXNJbnN0YW50aWF0ZWQocmVmbGVjdGVkVHlwZSkKICAgICAgbmF0aXZlICJDbGFzc01pcnJvcl9pbnRlcmZhY2VzX2luc3RhbnRpYXRlZCI7CgogIHN0YXRpYyBUeXBlIF9uYXRpdmVNaXhpbihyZWZsZWN0ZWRUeXBlKSBuYXRpdmUgIkNsYXNzTWlycm9yX21peGluIjsKCiAgc3RhdGljIFR5cGUgX25hdGl2ZU1peGluSW5zdGFudGlhdGVkKHJlZmxlY3RlZFR5cGUsIGluc3RhbnRpYXRvcikKICAgICAgbmF0aXZlICJDbGFzc01pcnJvcl9taXhpbl9pbnN0YW50aWF0ZWQiOwoKICBzdGF0aWMgTGlzdDxkeW5hbWljPiBfY29tcHV0ZU1lbWJlcnMob3duZXIsIHJlZmxlY3RlZSwgaW5zdGFudGlhdG9yKQogICAgICBuYXRpdmUgIkNsYXNzTWlycm9yX21lbWJlcnMiOwoKICBMaXN0PGR5bmFtaWM+IF9jb21wdXRlQ29uc3RydWN0b3JzKHJlZmxlY3RlZSwgaW5zdGFudGlhdG9yKQogICAgICBuYXRpdmUgIkNsYXNzTWlycm9yX2NvbnN0cnVjdG9ycyI7CgogIF9pbnZva2UocmVmbGVjdGVlLCBtZW1iZXJOYW1lLCBhcmd1bWVudHMsIGFyZ3VtZW50TmFtZXMpCiAgICAgIG5hdGl2ZSAnQ2xhc3NNaXJyb3JfaW52b2tlJzsKCiAgX2ludm9rZUdldHRlcihyZWZsZWN0ZWUsIGdldHRlck5hbWUpIG5hdGl2ZSAnQ2xhc3NNaXJyb3JfaW52b2tlR2V0dGVyJzsKCiAgX2ludm9rZVNldHRlcihyZWZsZWN0ZWUsIHNldHRlck5hbWUsIHZhbHVlKSBuYXRpdmUgJ0NsYXNzTWlycm9yX2ludm9rZVNldHRlcic7CgogIHN0YXRpYyBfaW52b2tlQ29uc3RydWN0b3IocmVmbGVjdGVlLCB0eXBlLCBjb25zdHJ1Y3Rvck5hbWUsIGFyZ3VtZW50cywKICAgICAgYXJndW1lbnROYW1lcykgbmF0aXZlICdDbGFzc01pcnJvcl9pbnZva2VDb25zdHJ1Y3Rvcic7CgogIHN0YXRpYyBMaXN0PGR5bmFtaWM+IF9DbGFzc01pcnJvcl90eXBlX3ZhcmlhYmxlcyhyZWZsZWN0ZWUpCiAgICAgIG5hdGl2ZSAiQ2xhc3NNaXJyb3JfdHlwZV92YXJpYWJsZXMiOwoKICBzdGF0aWMgTGlzdDxkeW5hbWljPiBfY29tcHV0ZVR5cGVBcmd1bWVudHMocmVmbGVjdGVlKQogICAgICBuYXRpdmUgIkNsYXNzTWlycm9yX3R5cGVfYXJndW1lbnRzIjsKfQoKY2xhc3MgX0xvY2FsRnVuY3Rpb25UeXBlTWlycm9yIGV4dGVuZHMgX0xvY2FsQ2xhc3NNaXJyb3IKICAgIGltcGxlbWVudHMgRnVuY3Rpb25UeXBlTWlycm9yIHsKICBmaW5hbCBfZnVuY3Rpb25SZWZsZWN0ZWU7CiAgX0xvY2FsRnVuY3Rpb25UeXBlTWlycm9yLl8ocmVmbGVjdGVlLCB0aGlzLl9mdW5jdGlvblJlZmxlY3RlZSwgcmVmbGVjdGVkVHlwZSkKICAgICAgOiBzdXBlci5fKHJlZmxlY3RlZSwgcmVmbGVjdGVkVHlwZSwgbnVsbCwgbnVsbCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCiAgICAgICAgICAgIGZhbHNlKTsKCiAgYm9vbCBnZXQgX2lzQW5vbnltb3VzTWl4aW5BcHBsaWNhdGlvbiA9PiBmYWxzZTsKCiAgLy8gRnVuY3Rpb25UeXBlTWlycm9ycyBoYXZlIGEgc2ltcGxlTmFtZSBnZW5lcmF0ZWQgZnJvbSB0aGVpciBzaWduYXR1cmUuCiAgU3ltYm9sIF9zaW1wbGVOYW1lOwogIFN5bWJvbCBnZXQgc2ltcGxlTmFtZSB7CiAgICBpZiAoX3NpbXBsZU5hbWUgPT0gbnVsbCkgewogICAgICBfc2ltcGxlTmFtZSA9IF9zKF9tYWtlU2lnbmF0dXJlU3RyaW5nKHJldHVyblR5cGUsIHBhcmFtZXRlcnMpKTsKICAgIH0KICAgIHJldHVybiBfc2ltcGxlTmFtZTsKICB9CgogIE1ldGhvZE1pcnJvciBfY2FsbE1ldGhvZDsKICBNZXRob2RNaXJyb3IgZ2V0IGNhbGxNZXRob2QgewogICAgaWYgKF9jYWxsTWV0aG9kID09IG51bGwpIHsKICAgICAgX2NhbGxNZXRob2QgPSBfRnVuY3Rpb25UeXBlTWlycm9yX2NhbGxfbWV0aG9kKF9mdW5jdGlvblJlZmxlY3RlZSk7CiAgICB9CiAgICByZXR1cm4gX2NhbGxNZXRob2Q7CiAgfQoKICBUeXBlTWlycm9yIF9yZXR1cm5UeXBlOwogIFR5cGVNaXJyb3IgZ2V0IHJldHVyblR5cGUgewogICAgaWYgKF9yZXR1cm5UeXBlID09IG51bGwpIHsKICAgICAgX3JldHVyblR5cGUgPQogICAgICAgICAgcmVmbGVjdFR5cGUoX0Z1bmN0aW9uVHlwZU1pcnJvcl9yZXR1cm5fdHlwZShfZnVuY3Rpb25SZWZsZWN0ZWUpKTsKICAgIH0KICAgIHJldHVybiBfcmV0dXJuVHlwZTsKICB9CgogIExpc3Q8UGFyYW1ldGVyTWlycm9yPiBfcGFyYW1ldGVyczsKICBMaXN0PFBhcmFtZXRlck1pcnJvcj4gZ2V0IHBhcmFtZXRlcnMgewogICAgaWYgKF9wYXJhbWV0ZXJzID09IG51bGwpIHsKICAgICAgX3BhcmFtZXRlcnMgPSBfRnVuY3Rpb25UeXBlTWlycm9yX3BhcmFtZXRlcnMoX2Z1bmN0aW9uUmVmbGVjdGVlKQogICAgICAgICAgLmNhc3Q8UGFyYW1ldGVyTWlycm9yPigpOwogICAgICBfcGFyYW1ldGVycyA9IG5ldyBVbm1vZGlmaWFibGVMaXN0VmlldzxQYXJhbWV0ZXJNaXJyb3I+KF9wYXJhbWV0ZXJzKTsKICAgIH0KICAgIHJldHVybiBfcGFyYW1ldGVyczsKICB9CgogIGJvb2wgZ2V0IGlzT3JpZ2luYWxEZWNsYXJhdGlvbiA9PiB0cnVlOwogIENsYXNzTWlycm9yIGdldCBvcmlnaW5hbERlY2xhcmF0aW9uID0+IHRoaXM7CiAgZ2V0IHR5cGVWYXJpYWJsZXMgPT4gY29uc3QgPFR5cGVWYXJpYWJsZU1pcnJvcj5bXTsKICBnZXQgdHlwZUFyZ3VtZW50cyA9PiBjb25zdCA8VHlwZU1pcnJvcj5bXTsKICBnZXQgbWV0YWRhdGEgPT4gY29uc3QgPEluc3RhbmNlTWlycm9yPltdOwogIGdldCBsb2NhdGlvbiA9PiBudWxsOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiRnVuY3Rpb25UeXBlTWlycm9yIG9uICcke19uKHNpbXBsZU5hbWUpfSciOwoKICBNZXRob2RNaXJyb3IgX0Z1bmN0aW9uVHlwZU1pcnJvcl9jYWxsX21ldGhvZChmdW5jdGlvblJlZmxlY3RlZSkKICAgICAgbmF0aXZlICJGdW5jdGlvblR5cGVNaXJyb3JfY2FsbF9tZXRob2QiOwoKICBzdGF0aWMgVHlwZSBfRnVuY3Rpb25UeXBlTWlycm9yX3JldHVybl90eXBlKGZ1bmN0aW9uUmVmbGVjdGVlKQogICAgICBuYXRpdmUgIkZ1bmN0aW9uVHlwZU1pcnJvcl9yZXR1cm5fdHlwZSI7CgogIExpc3Q8ZHluYW1pYz4gX0Z1bmN0aW9uVHlwZU1pcnJvcl9wYXJhbWV0ZXJzKGZ1bmN0aW9uUmVmbGVjdGVlKQogICAgICBuYXRpdmUgIkZ1bmN0aW9uVHlwZU1pcnJvcl9wYXJhbWV0ZXJzIjsKfQoKYWJzdHJhY3QgY2xhc3MgX0xvY2FsRGVjbGFyYXRpb25NaXJyb3IgZXh0ZW5kcyBfTG9jYWxNaXJyb3IKICAgIGltcGxlbWVudHMgRGVjbGFyYXRpb25NaXJyb3IgewogIGZpbmFsIF9yZWZsZWN0ZWU7CiAgU3ltYm9sIF9zaW1wbGVOYW1lOwoKICBfTG9jYWxEZWNsYXJhdGlvbk1pcnJvci5fKHRoaXMuX3JlZmxlY3RlZSwgdGhpcy5fc2ltcGxlTmFtZSk7CgogIFN5bWJvbCBnZXQgc2ltcGxlTmFtZSA9PiBfc2ltcGxlTmFtZTsKCiAgU3ltYm9sIF9xdWFsaWZpZWROYW1lOwogIFN5bWJvbCBnZXQgcXVhbGlmaWVkTmFtZSB7CiAgICBpZiAoX3F1YWxpZmllZE5hbWUgPT0gbnVsbCkgewogICAgICBfcXVhbGlmaWVkTmFtZSA9IF9jb21wdXRlUXVhbGlmaWVkTmFtZShvd25lciwgc2ltcGxlTmFtZSk7CiAgICB9CiAgICByZXR1cm4gX3F1YWxpZmllZE5hbWU7CiAgfQoKICBib29sIGdldCBpc1ByaXZhdGUgPT4gX24oc2ltcGxlTmFtZSkuc3RhcnRzV2l0aCgnXycpOwoKICBTb3VyY2VMb2NhdGlvbiBnZXQgbG9jYXRpb24gewogICAgcmV0dXJuIF9sb2NhdGlvbihfcmVmbGVjdGVlKTsKICB9CgogIExpc3Q8SW5zdGFuY2VNaXJyb3I+IGdldCBtZXRhZGF0YSB7CiAgICAvLyBHZXQgdGhlIG1ldGFkYXRhIG9iamVjdHMsIGNvbnZlcnQgdGhlbSBpbnRvIEluc3RhbmNlTWlycm9ycyB1c2luZwogICAgLy8gcmVmbGVjdCgpIGFuZCB0aGVuIG1ha2UgdGhlbSBpbnRvIGEgRGFydCBsaXN0LgogICAgcmV0dXJuIG5ldyBVbm1vZGlmaWFibGVMaXN0VmlldzxJbnN0YW5jZU1pcnJvcj4oCiAgICAgICAgX21ldGFkYXRhKF9yZWZsZWN0ZWUpLm1hcChyZWZsZWN0KSk7CiAgfQoKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICByZXR1cm4gdGhpcy5ydW50aW1lVHlwZSA9PSBvdGhlci5ydW50aW1lVHlwZSAmJgogICAgICAgIHRoaXMuX3JlZmxlY3RlZSA9PSBvdGhlci5fcmVmbGVjdGVlOwogIH0KCiAgaW50IGdldCBoYXNoQ29kZSA9PiBzaW1wbGVOYW1lLmhhc2hDb2RlOwp9CgpjbGFzcyBfTG9jYWxUeXBlVmFyaWFibGVNaXJyb3IgZXh0ZW5kcyBfTG9jYWxEZWNsYXJhdGlvbk1pcnJvcgogICAgaW1wbGVtZW50cyBUeXBlVmFyaWFibGVNaXJyb3IsIF9Mb2NhbFR5cGVNaXJyb3IgewogIF9Mb2NhbFR5cGVWYXJpYWJsZU1pcnJvci5fKHJlZmxlY3RlZSwgU3RyaW5nIHNpbXBsZU5hbWUsIHRoaXMuX293bmVyKQogICAgICA6IHN1cGVyLl8ocmVmbGVjdGVlLCBfcyhzaW1wbGVOYW1lKSk7CgogIERlY2xhcmF0aW9uTWlycm9yIF9vd25lcjsKICBEZWNsYXJhdGlvbk1pcnJvciBnZXQgb3duZXIgewogICAgaWYgKF9vd25lciA9PSBudWxsKSB7CiAgICAgIF9vd25lciA9IChfVHlwZVZhcmlhYmxlTWlycm9yX293bmVyKF9yZWZsZWN0ZWUpIGFzIFR5cGVNaXJyb3IpCiAgICAgICAgICAub3JpZ2luYWxEZWNsYXJhdGlvbjsKICAgIH0KICAgIHJldHVybiBfb3duZXI7CiAgfQoKICBib29sIGdldCBpc1N0YXRpYyA9PiBmYWxzZTsKICBib29sIGdldCBpc1RvcExldmVsID0+IGZhbHNlOwoKICBUeXBlTWlycm9yIF91cHBlckJvdW5kOwogIFR5cGVNaXJyb3IgZ2V0IHVwcGVyQm91bmQgewogICAgaWYgKF91cHBlckJvdW5kID09IG51bGwpIHsKICAgICAgX3VwcGVyQm91bmQgPSByZWZsZWN0VHlwZShfVHlwZVZhcmlhYmxlTWlycm9yX3VwcGVyX2JvdW5kKF9yZWZsZWN0ZWUpKTsKICAgIH0KICAgIHJldHVybiBfdXBwZXJCb3VuZDsKICB9CgogIGJvb2wgZ2V0IGhhc1JlZmxlY3RlZFR5cGUgPT4gZmFsc2U7CiAgVHlwZSBnZXQgcmVmbGVjdGVkVHlwZSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignVHlwZSB2YXJpYWJsZXMgaGF2ZSBubyByZWZsZWN0ZWQgdHlwZScpOwogIH0KCiAgVHlwZSBnZXQgX3JlZmxlY3RlZFR5cGUgPT4gX3JlZmxlY3RlZTsKCiAgTGlzdDxUeXBlVmFyaWFibGVNaXJyb3I+IGdldCB0eXBlVmFyaWFibGVzID0+IGNvbnN0IDxUeXBlVmFyaWFibGVNaXJyb3I+W107CiAgTGlzdDxUeXBlTWlycm9yPiBnZXQgdHlwZUFyZ3VtZW50cyA9PiBjb25zdCA8VHlwZU1pcnJvcj5bXTsKCiAgYm9vbCBnZXQgaXNPcmlnaW5hbERlY2xhcmF0aW9uID0+IHRydWU7CiAgVHlwZU1pcnJvciBnZXQgb3JpZ2luYWxEZWNsYXJhdGlvbiA9PiB0aGlzOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiVHlwZVZhcmlhYmxlTWlycm9yIG9uICcke19uKHNpbXBsZU5hbWUpfSciOwoKICBvcGVyYXRvciA9PShvdGhlcikgewogICAgcmV0dXJuIG90aGVyIGlzIFR5cGVWYXJpYWJsZU1pcnJvciAmJgogICAgICAgIHNpbXBsZU5hbWUgPT0gb3RoZXIuc2ltcGxlTmFtZSAmJgogICAgICAgIG93bmVyID09IG90aGVyLm93bmVyOwogIH0KCiAgaW50IGdldCBoYXNoQ29kZSA9PiBzaW1wbGVOYW1lLmhhc2hDb2RlOwoKICBib29sIGlzU3VidHlwZU9mKFR5cGVNaXJyb3Igb3RoZXIpIHsKICAgIGlmIChvdGhlciA9PSBjdXJyZW50TWlycm9yU3lzdGVtKCkuZHluYW1pY1R5cGUpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyID09IGN1cnJlbnRNaXJyb3JTeXN0ZW0oKS52b2lkVHlwZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIF9zdWJ0eXBlVGVzdCgKICAgICAgICBfcmVmbGVjdGVkVHlwZSwgKG90aGVyIGFzIF9Mb2NhbFR5cGVNaXJyb3IpLl9yZWZsZWN0ZWRUeXBlKTsKICB9CgogIGJvb2wgaXNBc3NpZ25hYmxlVG8oVHlwZU1pcnJvciBvdGhlcikgewogICAgaWYgKG90aGVyID09IGN1cnJlbnRNaXJyb3JTeXN0ZW0oKS5keW5hbWljVHlwZSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgPT0gY3VycmVudE1pcnJvclN5c3RlbSgpLnZvaWRUeXBlKSByZXR1cm4gZmFsc2U7CiAgICBmaW5hbCBvdGhlclJlZmxlY3RlZFR5cGUgPSAob3RoZXIgYXMgX0xvY2FsVHlwZU1pcnJvcikuX3JlZmxlY3RlZFR5cGU7CiAgICByZXR1cm4gX3N1YnR5cGVUZXN0KF9yZWZsZWN0ZWRUeXBlLCBvdGhlclJlZmxlY3RlZFR5cGUpIHx8CiAgICAgICAgX3N1YnR5cGVUZXN0KG90aGVyUmVmbGVjdGVkVHlwZSwgX3JlZmxlY3RlZFR5cGUpOwogIH0KCiAgc3RhdGljIERlY2xhcmF0aW9uTWlycm9yIF9UeXBlVmFyaWFibGVNaXJyb3Jfb3duZXIocmVmbGVjdGVlKQogICAgICBuYXRpdmUgIlR5cGVWYXJpYWJsZU1pcnJvcl9vd25lciI7CgogIHN0YXRpYyBUeXBlIF9UeXBlVmFyaWFibGVNaXJyb3JfdXBwZXJfYm91bmQocmVmbGVjdGVlKQogICAgICBuYXRpdmUgIlR5cGVWYXJpYWJsZU1pcnJvcl91cHBlcl9ib3VuZCI7Cn0KCmNsYXNzIF9Mb2NhbFR5cGVkZWZNaXJyb3IgZXh0ZW5kcyBfTG9jYWxEZWNsYXJhdGlvbk1pcnJvcgogICAgaW1wbGVtZW50cyBUeXBlZGVmTWlycm9yLCBfTG9jYWxUeXBlTWlycm9yIHsKICBmaW5hbCBUeXBlIF9yZWZsZWN0ZWRUeXBlOwogIGZpbmFsIGJvb2wgX2lzR2VuZXJpYzsKICBmaW5hbCBib29sIF9pc0dlbmVyaWNEZWNsYXJhdGlvbjsKCiAgX0xvY2FsVHlwZWRlZk1pcnJvcihyZWZsZWN0ZWUsIHRoaXMuX3JlZmxlY3RlZFR5cGUsIFN0cmluZyBzaW1wbGVOYW1lLAogICAgICB0aGlzLl9pc0dlbmVyaWMsIHRoaXMuX2lzR2VuZXJpY0RlY2xhcmF0aW9uLCB0aGlzLl9vd25lcikKICAgICAgOiBzdXBlci5fKHJlZmxlY3RlZSwgX3Moc2ltcGxlTmFtZSkpOwoKICBib29sIGdldCBpc1RvcExldmVsID0+IHRydWU7CgogIERlY2xhcmF0aW9uTWlycm9yIF9vd25lcjsKICBEZWNsYXJhdGlvbk1pcnJvciBnZXQgb3duZXIgewogICAgaWYgKF9vd25lciA9PSBudWxsKSB7CiAgICAgIHZhciB1cmkgPSBfTG9jYWxDbGFzc01pcnJvci5fbGlicmFyeVVyaShfcmVmbGVjdGVlKTsKICAgICAgX293bmVyID0gY3VycmVudE1pcnJvclN5c3RlbSgpLmxpYnJhcmllc1tVcmkucGFyc2UodXJpKV07CiAgICB9CiAgICByZXR1cm4gX293bmVyOwogIH0KCiAgX0xvY2FsRnVuY3Rpb25UeXBlTWlycm9yIF9yZWZlcmVudDsKICBGdW5jdGlvblR5cGVNaXJyb3IgZ2V0IHJlZmVyZW50IHsKICAgIGlmIChfcmVmZXJlbnQgPT0gbnVsbCkgewogICAgICBfcmVmZXJlbnQgPSBfbmF0aXZlUmVmZXJlbnQoX3JlZmxlY3RlZFR5cGUpOwogICAgICBfcmVmZXJlbnQuX2luc3RhbnRpYXRvciA9IF9yZWZsZWN0ZWRUeXBlOwogICAgfQogICAgcmV0dXJuIF9yZWZlcmVudDsKICB9CgogIGJvb2wgZ2V0IGhhc1JlZmxlY3RlZFR5cGUgPT4gIV9pc0dlbmVyaWNEZWNsYXJhdGlvbjsKICBUeXBlIGdldCByZWZsZWN0ZWRUeXBlIHsKICAgIGlmICghaGFzUmVmbGVjdGVkVHlwZSkgewogICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAgICJEZWNsYXJhdGlvbnMgb2YgZ2VuZXJpY3MgaGF2ZSBubyByZWZsZWN0ZWQgdHlwZSIpOwogICAgfQogICAgcmV0dXJuIF9yZWZsZWN0ZWRUeXBlOwogIH0KCiAgYm9vbCBnZXQgaXNPcmlnaW5hbERlY2xhcmF0aW9uID0+ICFfaXNHZW5lcmljIHx8IF9pc0dlbmVyaWNEZWNsYXJhdGlvbjsKCiAgVHlwZWRlZk1pcnJvciBnZXQgb3JpZ2luYWxEZWNsYXJhdGlvbiB7CiAgICBpZiAoaXNPcmlnaW5hbERlY2xhcmF0aW9uKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIF9uYXRpdmVEZWNsYXJhdGlvbihfcmVmbGVjdGVkVHlwZSk7CiAgICB9CiAgfQoKICBMaXN0PFR5cGVWYXJpYWJsZU1pcnJvcj4gX3R5cGVWYXJpYWJsZXM7CiAgTGlzdDxUeXBlVmFyaWFibGVNaXJyb3I+IGdldCB0eXBlVmFyaWFibGVzIHsKICAgIGlmIChfdHlwZVZhcmlhYmxlcyA9PSBudWxsKSB7CiAgICAgIF90eXBlVmFyaWFibGVzID0gbmV3IExpc3Q8VHlwZVZhcmlhYmxlTWlycm9yPigpOwogICAgICBMaXN0IHBhcmFtcyA9IF9Mb2NhbENsYXNzTWlycm9yLl9DbGFzc01pcnJvcl90eXBlX3ZhcmlhYmxlcyhfcmVmbGVjdGVlKTsKICAgICAgVHlwZWRlZk1pcnJvciBvd25lciA9IG9yaWdpbmFsRGVjbGFyYXRpb247CiAgICAgIHZhciBtaXJyb3I7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSArPSAyKSB7CiAgICAgICAgbWlycm9yID0gbmV3IF9Mb2NhbFR5cGVWYXJpYWJsZU1pcnJvci5fKHBhcmFtc1tpICsgMV0sIHBhcmFtc1tpXSwgb3duZXIpOwogICAgICAgIF90eXBlVmFyaWFibGVzLmFkZChtaXJyb3IpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX3R5cGVWYXJpYWJsZXM7CiAgfQoKICBMaXN0PFR5cGVNaXJyb3I+IF90eXBlQXJndW1lbnRzOwogIExpc3Q8VHlwZU1pcnJvcj4gZ2V0IHR5cGVBcmd1bWVudHMgewogICAgaWYgKF90eXBlQXJndW1lbnRzID09IG51bGwpIHsKICAgICAgaWYgKF9pc0dlbmVyaWNEZWNsYXJhdGlvbikgewogICAgICAgIF90eXBlQXJndW1lbnRzID0gY29uc3QgPFR5cGVNaXJyb3I+W107CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX3R5cGVBcmd1bWVudHMgPSBuZXcgVW5tb2RpZmlhYmxlTGlzdFZpZXc8VHlwZU1pcnJvcj4oX0xvY2FsQ2xhc3NNaXJyb3IKICAgICAgICAgICAgLl9jb21wdXRlVHlwZUFyZ3VtZW50cyhfcmVmbGVjdGVkVHlwZSkKICAgICAgICAgICAgLmNhc3Q8VHlwZU1pcnJvcj4oKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfdHlwZUFyZ3VtZW50czsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJUeXBlZGVmTWlycm9yIG9uICcke19uKHNpbXBsZU5hbWUpfSciOwoKICBib29sIGlzU3VidHlwZU9mKFR5cGVNaXJyb3Igb3RoZXIpIHsKICAgIGlmIChvdGhlciA9PSBjdXJyZW50TWlycm9yU3lzdGVtKCkuZHluYW1pY1R5cGUpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyID09IGN1cnJlbnRNaXJyb3JTeXN0ZW0oKS52b2lkVHlwZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIF9zdWJ0eXBlVGVzdCgKICAgICAgICBfcmVmbGVjdGVkVHlwZSwgKG90aGVyIGFzIF9Mb2NhbFR5cGVNaXJyb3IpLl9yZWZsZWN0ZWRUeXBlKTsKICB9CgogIGJvb2wgaXNBc3NpZ25hYmxlVG8oVHlwZU1pcnJvciBvdGhlcikgewogICAgaWYgKG90aGVyID09IGN1cnJlbnRNaXJyb3JTeXN0ZW0oKS5keW5hbWljVHlwZSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgPT0gY3VycmVudE1pcnJvclN5c3RlbSgpLnZvaWRUeXBlKSByZXR1cm4gZmFsc2U7CiAgICBmaW5hbCBvdGhlclJlZmxlY3RlZFR5cGUgPSAob3RoZXIgYXMgX0xvY2FsVHlwZU1pcnJvcikuX3JlZmxlY3RlZFR5cGU7CiAgICByZXR1cm4gX3N1YnR5cGVUZXN0KF9yZWZsZWN0ZWRUeXBlLCBvdGhlclJlZmxlY3RlZFR5cGUpIHx8CiAgICAgICAgX3N1YnR5cGVUZXN0KG90aGVyUmVmbGVjdGVkVHlwZSwgX3JlZmxlY3RlZFR5cGUpOwogIH0KCiAgc3RhdGljIEZ1bmN0aW9uVHlwZU1pcnJvciBfbmF0aXZlUmVmZXJlbnQocmVmbGVjdGVkVHlwZSkKICAgICAgbmF0aXZlICJUeXBlZGVmTWlycm9yX3JlZmVyZW50IjsKCiAgc3RhdGljIFR5cGVkZWZNaXJyb3IgX25hdGl2ZURlY2xhcmF0aW9uKHJlZmxlY3RlZFR5cGUpCiAgICAgIG5hdGl2ZSAiVHlwZWRlZk1pcnJvcl9kZWNsYXJhdGlvbiI7Cn0KClN5bWJvbCBfYXNTZXR0ZXIoU3ltYm9sIGdldHRlciwgTGlicmFyeU1pcnJvciBsaWJyYXJ5KSB7CiAgdmFyIHVud3JhcHBlZCA9IE1pcnJvclN5c3RlbS5nZXROYW1lKGdldHRlcik7CiAgcmV0dXJuIE1pcnJvclN5c3RlbS5nZXRTeW1ib2woJyR7dW53cmFwcGVkfT0nLCBsaWJyYXJ5KTsKfQoKY2xhc3MgX0xvY2FsTGlicmFyeU1pcnJvciBleHRlbmRzIF9Mb2NhbE9iamVjdE1pcnJvciBpbXBsZW1lbnRzIExpYnJhcnlNaXJyb3IgewogIGZpbmFsIFN5bWJvbCBzaW1wbGVOYW1lOwogIGZpbmFsIFVyaSB1cmk7CgogIF9Mb2NhbExpYnJhcnlNaXJyb3IuXyhyZWZsZWN0ZWUsIFN0cmluZyBzaW1wbGVOYW1lLCBTdHJpbmcgdXJsKQogICAgICA6IHRoaXMuc2ltcGxlTmFtZSA9IF9zKHNpbXBsZU5hbWUpLAogICAgICAgIHRoaXMudXJpID0gVXJpLnBhcnNlKHVybCksCiAgICAgICAgc3VwZXIuXyhyZWZsZWN0ZWUpOwoKICAvLyBUaGUgc2ltcGxlIG5hbWUgYW5kIHRoZSBxdWFsaWZpZWQgbmFtZSBhcmUgdGhlIHNhbWUgZm9yIGEgbGlicmFyeS4KICBTeW1ib2wgZ2V0IHF1YWxpZmllZE5hbWUgPT4gc2ltcGxlTmFtZTsKCiAgRGVjbGFyYXRpb25NaXJyb3IgZ2V0IG93bmVyID0+IG51bGw7CgogIGJvb2wgZ2V0IGlzUHJpdmF0ZSA9PiBmYWxzZTsKICBib29sIGdldCBpc1RvcExldmVsID0+IGZhbHNlOwoKICBUeXBlIGdldCBfaW5zdGFudGlhdG9yID0+IG51bGw7CgogIE1hcDxTeW1ib2wsIERlY2xhcmF0aW9uTWlycm9yPiBfZGVjbGFyYXRpb25zOwogIE1hcDxTeW1ib2wsIERlY2xhcmF0aW9uTWlycm9yPiBnZXQgZGVjbGFyYXRpb25zIHsKICAgIGlmIChfZGVjbGFyYXRpb25zICE9IG51bGwpIHJldHVybiBfZGVjbGFyYXRpb25zOwoKICAgIHZhciBkZWNscyA9IG5ldyBNYXA8U3ltYm9sLCBEZWNsYXJhdGlvbk1pcnJvcj4oKTsKICAgIHZhciBtZW1iZXJzID0gX2NvbXB1dGVNZW1iZXJzKF9yZWZsZWN0ZWUpOwogICAgZm9yICh2YXIgbWVtYmVyIGluIG1lbWJlcnMpIHsKICAgICAgZGVjbHNbbWVtYmVyLnNpbXBsZU5hbWVdID0gbWVtYmVyOwogICAgfQoKICAgIHJldHVybiBfZGVjbGFyYXRpb25zID0KICAgICAgICBuZXcgVW5tb2RpZmlhYmxlTWFwVmlldzxTeW1ib2wsIERlY2xhcmF0aW9uTWlycm9yPihkZWNscyk7CiAgfQoKICBTb3VyY2VMb2NhdGlvbiBnZXQgbG9jYXRpb24gewogICAgcmV0dXJuIF9sb2NhdGlvbihfcmVmbGVjdGVlKTsKICB9CgogIExpc3Q8SW5zdGFuY2VNaXJyb3I+IGdldCBtZXRhZGF0YSB7CiAgICAvLyBHZXQgdGhlIG1ldGFkYXRhIG9iamVjdHMsIGNvbnZlcnQgdGhlbSBpbnRvIEluc3RhbmNlTWlycm9ycyB1c2luZwogICAgLy8gcmVmbGVjdCgpIGFuZCB0aGVuIG1ha2UgdGhlbSBpbnRvIGEgRGFydCBsaXN0LgogICAgcmV0dXJuIG5ldyBVbm1vZGlmaWFibGVMaXN0VmlldzxJbnN0YW5jZU1pcnJvcj4oCiAgICAgICAgX21ldGFkYXRhKF9yZWZsZWN0ZWUpLm1hcChyZWZsZWN0KSk7CiAgfQoKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICByZXR1cm4gdGhpcy5ydW50aW1lVHlwZSA9PSBvdGhlci5ydW50aW1lVHlwZSAmJgogICAgICAgIHRoaXMuX3JlZmxlY3RlZSA9PSBvdGhlci5fcmVmbGVjdGVlOwogIH0KCiAgaW50IGdldCBoYXNoQ29kZSA9PiBzaW1wbGVOYW1lLmhhc2hDb2RlOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiTGlicmFyeU1pcnJvciBvbiAnJHtfbihzaW1wbGVOYW1lKX0nIjsKCiAgdmFyIF9jYWNoZWRMaWJyYXJ5RGVwZW5kZW5jaWVzOwogIGdldCBsaWJyYXJ5RGVwZW5kZW5jaWVzIHsKICAgIGlmIChfY2FjaGVkTGlicmFyeURlcGVuZGVuY2llcyA9PSBudWxsKSB7CiAgICAgIF9jYWNoZWRMaWJyYXJ5RGVwZW5kZW5jaWVzID0KICAgICAgICAgIG5ldyBVbm1vZGlmaWFibGVMaXN0VmlldzxMaWJyYXJ5RGVwZW5kZW5jeU1pcnJvcj4oCiAgICAgICAgICAgICAgX2xpYnJhcnlEZXBlbmRlbmNpZXMoX3JlZmxlY3RlZSkuY2FzdDxMaWJyYXJ5RGVwZW5kZW5jeU1pcnJvcj4oKSk7CiAgICB9CiAgICByZXR1cm4gX2NhY2hlZExpYnJhcnlEZXBlbmRlbmNpZXM7CiAgfQoKICBMaXN0PGR5bmFtaWM+IF9saWJyYXJ5RGVwZW5kZW5jaWVzKHJlZmxlY3RlZSkKICAgICAgbmF0aXZlICdMaWJyYXJ5TWlycm9yX2xpYnJhcnlEZXBlbmRlbmNpZXMnOwoKICBfaW52b2tlKHJlZmxlY3RlZSwgbWVtYmVyTmFtZSwgYXJndW1lbnRzLCBhcmd1bWVudE5hbWVzKQogICAgICBuYXRpdmUgJ0xpYnJhcnlNaXJyb3JfaW52b2tlJzsKCiAgX2ludm9rZUdldHRlcihyZWZsZWN0ZWUsIGdldHRlck5hbWUpIG5hdGl2ZSAnTGlicmFyeU1pcnJvcl9pbnZva2VHZXR0ZXInOwoKICBfaW52b2tlU2V0dGVyKHJlZmxlY3RlZSwgc2V0dGVyTmFtZSwgdmFsdWUpCiAgICAgIG5hdGl2ZSAnTGlicmFyeU1pcnJvcl9pbnZva2VTZXR0ZXInOwoKICBMaXN0PGR5bmFtaWM+IF9jb21wdXRlTWVtYmVycyhyZWZsZWN0ZWUpIG5hdGl2ZSAiTGlicmFyeU1pcnJvcl9tZW1iZXJzIjsKfQoKY2xhc3MgX0xvY2FsTGlicmFyeURlcGVuZGVuY3lNaXJyb3IgZXh0ZW5kcyBfTG9jYWxNaXJyb3IKICAgIGltcGxlbWVudHMgTGlicmFyeURlcGVuZGVuY3lNaXJyb3IgewogIGZpbmFsIExpYnJhcnlNaXJyb3Igc291cmNlTGlicmFyeTsKICB2YXIgX3RhcmdldE1pcnJvck9yUHJlZml4OwogIGZpbmFsIExpc3Q8Q29tYmluYXRvck1pcnJvcj4gY29tYmluYXRvcnM7CiAgZmluYWwgU3ltYm9sIHByZWZpeDsKICBmaW5hbCBib29sIGlzSW1wb3J0OwogIGZpbmFsIGJvb2wgaXNEZWZlcnJlZDsKICBmaW5hbCBMaXN0PEluc3RhbmNlTWlycm9yPiBtZXRhZGF0YTsKCiAgX0xvY2FsTGlicmFyeURlcGVuZGVuY3lNaXJyb3IuXygKICAgICAgdGhpcy5zb3VyY2VMaWJyYXJ5LAogICAgICB0aGlzLl90YXJnZXRNaXJyb3JPclByZWZpeCwKICAgICAgTGlzdDxkeW5hbWljPiBtdXRhYmxlQ29tYmluYXRvcnMsCiAgICAgIHByZWZpeFN0cmluZywKICAgICAgdGhpcy5pc0ltcG9ydCwKICAgICAgdGhpcy5pc0RlZmVycmVkLAogICAgICBMaXN0PGR5bmFtaWM+IHVud3JhcHBlZE1ldGFkYXRhKQogICAgICA6IHByZWZpeCA9IF9zKHByZWZpeFN0cmluZyksCiAgICAgICAgY29tYmluYXRvcnMgPSBuZXcgVW5tb2RpZmlhYmxlTGlzdFZpZXc8Q29tYmluYXRvck1pcnJvcj4oCiAgICAgICAgICAgIG11dGFibGVDb21iaW5hdG9ycy5jYXN0PENvbWJpbmF0b3JNaXJyb3I+KCkpLAogICAgICAgIG1ldGFkYXRhID0gbmV3IFVubW9kaWZpYWJsZUxpc3RWaWV3PEluc3RhbmNlTWlycm9yPigKICAgICAgICAgICAgdW53cmFwcGVkTWV0YWRhdGEubWFwKHJlZmxlY3QpKTsKCiAgYm9vbCBnZXQgaXNFeHBvcnQgPT4gIWlzSW1wb3J0OwoKICBMaWJyYXJ5TWlycm9yIGdldCB0YXJnZXRMaWJyYXJ5IHsKICAgIGlmIChfdGFyZ2V0TWlycm9yT3JQcmVmaXggaXMgX0xvY2FsTGlicmFyeU1pcnJvcikgewogICAgICByZXR1cm4gX3RhcmdldE1pcnJvck9yUHJlZml4OwogICAgfQogICAgdmFyIG1pcnJvck9yTnVsbCA9IF90cnlVcGdyYWRlUHJlZml4KF90YXJnZXRNaXJyb3JPclByZWZpeCk7CiAgICBpZiAobWlycm9yT3JOdWxsICE9IG51bGwpIHsKICAgICAgX3RhcmdldE1pcnJvck9yUHJlZml4ID0gbWlycm9yT3JOdWxsOwogICAgfQogICAgcmV0dXJuIG1pcnJvck9yTnVsbDsKICB9CgogIEZ1dHVyZTxMaWJyYXJ5TWlycm9yPiBsb2FkTGlicmFyeSgpIHsKICAgIGlmIChfdGFyZ2V0TWlycm9yT3JQcmVmaXggaXMgX0xvY2FsTGlicmFyeU1pcnJvcikgewogICAgICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZShfdGFyZ2V0TWlycm9yT3JQcmVmaXgpOwogICAgfQogICAgdmFyIHNhdmVkUHJlZml4ID0gX3RhcmdldE1pcnJvck9yUHJlZml4OwogICAgcmV0dXJuIHNhdmVkUHJlZml4LmxvYWRMaWJyYXJ5KCkudGhlbigoXykgewogICAgICByZXR1cm4gX3RyeVVwZ3JhZGVQcmVmaXgoc2F2ZWRQcmVmaXgpOwogICAgfSk7CiAgfQoKICBzdGF0aWMgTGlicmFyeU1pcnJvciBfdHJ5VXBncmFkZVByZWZpeChsaWJyYXJ5UHJlZml4KQogICAgICBuYXRpdmUgIkxpYnJhcnlNaXJyb3JfZnJvbVByZWZpeCI7CgogIFNvdXJjZUxvY2F0aW9uIGdldCBsb2NhdGlvbiA9PiBudWxsOwp9CgpjbGFzcyBfTG9jYWxDb21iaW5hdG9yTWlycm9yIGV4dGVuZHMgX0xvY2FsTWlycm9yIGltcGxlbWVudHMgQ29tYmluYXRvck1pcnJvciB7CiAgZmluYWwgTGlzdDxTeW1ib2w+IGlkZW50aWZpZXJzOwogIGZpbmFsIGJvb2wgaXNTaG93OwoKICBfTG9jYWxDb21iaW5hdG9yTWlycm9yLl8oaWRlbnRpZmllclN0cmluZywgdGhpcy5pc1Nob3cpCiAgICAgIDogdGhpcy5pZGVudGlmaWVycyA9CiAgICAgICAgICAgIG5ldyBVbm1vZGlmaWFibGVMaXN0VmlldzxTeW1ib2w+KDxTeW1ib2w+W19zKGlkZW50aWZpZXJTdHJpbmcpXSk7CgogIGJvb2wgZ2V0IGlzSGlkZSA9PiAhaXNTaG93Owp9CgpjbGFzcyBfTG9jYWxNZXRob2RNaXJyb3IgZXh0ZW5kcyBfTG9jYWxEZWNsYXJhdGlvbk1pcnJvcgogICAgaW1wbGVtZW50cyBNZXRob2RNaXJyb3IgewogIGZpbmFsIFR5cGUgX2luc3RhbnRpYXRvcjsKICBmaW5hbCBib29sIGlzU3RhdGljOwogIGZpbmFsIGludCBfa2luZEZsYWdzOwoKICBfTG9jYWxNZXRob2RNaXJyb3IuXyhyZWZsZWN0ZWUsIFN0cmluZyBzaW1wbGVOYW1lLCB0aGlzLl9vd25lciwKICAgICAgdGhpcy5faW5zdGFudGlhdG9yLCB0aGlzLmlzU3RhdGljLCB0aGlzLl9raW5kRmxhZ3MpCiAgICAgIDogc3VwZXIuXyhyZWZsZWN0ZWUsIF9zKHNpbXBsZU5hbWUpKTsKCiAgc3RhdGljIGNvbnN0IGtBYnN0cmFjdCA9IDA7CiAgc3RhdGljIGNvbnN0IGtHZXR0ZXIgPSAxOwogIHN0YXRpYyBjb25zdCBrU2V0dGVyID0gMjsKICBzdGF0aWMgY29uc3Qga0NvbnN0cnVjdG9yID0gMzsKICBzdGF0aWMgY29uc3Qga0NvbnN0Q3RvciA9IDQ7CiAgc3RhdGljIGNvbnN0IGtHZW5lcmF0aXZlQ3RvciA9IDU7CiAgc3RhdGljIGNvbnN0IGtSZWRpcmVjdGluZ0N0b3IgPSA2OwogIHN0YXRpYyBjb25zdCBrRmFjdG9yeUN0b3IgPSA3OwogIHN0YXRpYyBjb25zdCBrRXh0ZXJuYWwgPSA4OwogIHN0YXRpYyBjb25zdCBrU3ludGhldGljID0gOTsKCiAgLy8gVGhlc2Ugb2Zmc2V0cyBtdWNoIGJlIGtlcHQgaW4gc3luYyB3aXRoIHRob3NlIGluIG1pcnJvcnMuaC4KICBib29sIGdldCBpc0Fic3RyYWN0ID0+IDAgIT0gKF9raW5kRmxhZ3MgJiAoMSA8PCBrQWJzdHJhY3QpKTsKICBib29sIGdldCBpc0dldHRlciA9PiAwICE9IChfa2luZEZsYWdzICYgKDEgPDwga0dldHRlcikpOwogIGJvb2wgZ2V0IGlzU2V0dGVyID0+IDAgIT0gKF9raW5kRmxhZ3MgJiAoMSA8PCBrU2V0dGVyKSk7CiAgYm9vbCBnZXQgaXNDb25zdHJ1Y3RvciA9PiAwICE9IChfa2luZEZsYWdzICYgKDEgPDwga0NvbnN0cnVjdG9yKSk7CiAgYm9vbCBnZXQgaXNDb25zdENvbnN0cnVjdG9yID0+IDAgIT0gKF9raW5kRmxhZ3MgJiAoMSA8PCBrQ29uc3RDdG9yKSk7CiAgYm9vbCBnZXQgaXNHZW5lcmF0aXZlQ29uc3RydWN0b3IgPT4KICAgICAgMCAhPSAoX2tpbmRGbGFncyAmICgxIDw8IGtHZW5lcmF0aXZlQ3RvcikpOwogIGJvb2wgZ2V0IGlzUmVkaXJlY3RpbmdDb25zdHJ1Y3RvciA9PgogICAgICAwICE9IChfa2luZEZsYWdzICYgKDEgPDwga1JlZGlyZWN0aW5nQ3RvcikpOwogIGJvb2wgZ2V0IGlzRmFjdG9yeUNvbnN0cnVjdG9yID0+IDAgIT0gKF9raW5kRmxhZ3MgJiAoMSA8PCBrRmFjdG9yeUN0b3IpKTsKICBib29sIGdldCBpc0V4dGVybmFsID0+IDAgIT0gKF9raW5kRmxhZ3MgJiAoMSA8PCBrRXh0ZXJuYWwpKTsKICBib29sIGdldCBpc1N5bnRoZXRpYyA9PiAwICE9IChfa2luZEZsYWdzICYgKDEgPDwga1N5bnRoZXRpYykpOwoKICBzdGF0aWMgY29uc3QgX29wZXJhdG9ycyA9IGNvbnN0IFsKICAgICIlIiwgIiYiLCAiKiIsICIrIiwgIi0iLCAiLyIsICI8IiwgIjw8IiwgLy8KICAgICI8PSIsICI9PSIsICI+IiwgIj49IiwgIj4+IiwgIltdIiwgIltdPSIsCiAgICAiXiIsICJ8IiwgIn4iLCAidW5hcnktIiwgIn4vIiwKICBdOwogIGJvb2wgZ2V0IGlzT3BlcmF0b3IgPT4gX29wZXJhdG9ycy5jb250YWlucyhfbihzaW1wbGVOYW1lKSk7CgogIERlY2xhcmF0aW9uTWlycm9yIF9vd25lcjsKICBEZWNsYXJhdGlvbk1pcnJvciBnZXQgb3duZXIgewogICAgLy8gRm9yIG5lc3RlZCBjbG9zdXJlcyBpdCBpcyBwb3NzaWJsZSwgdGhhdCB0aGUgbWlycm9yIGZvciB0aGUgb3duZXIgaGFzIG5vdAogICAgLy8gYmVlbiBjcmVhdGVkIHlldC4KICAgIGlmIChfb3duZXIgPT0gbnVsbCkgewogICAgICBfb3duZXIgPSBfTWV0aG9kTWlycm9yX293bmVyKF9yZWZsZWN0ZWUsIF9pbnN0YW50aWF0b3IpOwogICAgfQogICAgcmV0dXJuIF9vd25lcjsKICB9CgogIGJvb2wgZ2V0IGlzUHJpdmF0ZSA9PgogICAgICBfbihzaW1wbGVOYW1lKS5zdGFydHNXaXRoKCdfJykgfHwgX24oY29uc3RydWN0b3JOYW1lKS5zdGFydHNXaXRoKCdfJyk7CgogIGJvb2wgZ2V0IGlzVG9wTGV2ZWwgPT4gb3duZXIgaXMgTGlicmFyeU1pcnJvcjsKCiAgVHlwZU1pcnJvciBfcmV0dXJuVHlwZTsKICBUeXBlTWlycm9yIGdldCByZXR1cm5UeXBlIHsKICAgIGlmIChfcmV0dXJuVHlwZSA9PSBudWxsKSB7CiAgICAgIGlmIChpc0NvbnN0cnVjdG9yKSB7CiAgICAgICAgX3JldHVyblR5cGUgPSBvd25lcjsKICAgICAgfSBlbHNlIHsKICAgICAgICBfcmV0dXJuVHlwZSA9CiAgICAgICAgICAgIHJlZmxlY3RUeXBlKF9NZXRob2RNaXJyb3JfcmV0dXJuX3R5cGUoX3JlZmxlY3RlZSwgX2luc3RhbnRpYXRvcikpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX3JldHVyblR5cGU7CiAgfQoKICBMaXN0PFBhcmFtZXRlck1pcnJvcj4gX3BhcmFtZXRlcnM7CiAgTGlzdDxQYXJhbWV0ZXJNaXJyb3I+IGdldCBwYXJhbWV0ZXJzIHsKICAgIGlmIChfcGFyYW1ldGVycyA9PSBudWxsKSB7CiAgICAgIF9wYXJhbWV0ZXJzID0gbmV3IFVubW9kaWZpYWJsZUxpc3RWaWV3PFBhcmFtZXRlck1pcnJvcj4oCiAgICAgICAgICBfTWV0aG9kTWlycm9yX3BhcmFtZXRlcnMoX3JlZmxlY3RlZSkuY2FzdDxQYXJhbWV0ZXJNaXJyb3I+KCkpOwogICAgfQogICAgcmV0dXJuIF9wYXJhbWV0ZXJzOwogIH0KCiAgYm9vbCBnZXQgaXNSZWd1bGFyTWV0aG9kID0+ICFpc0dldHRlciAmJiAhaXNTZXR0ZXIgJiYgIWlzQ29uc3RydWN0b3I7CgogIFN5bWJvbCBfY29uc3RydWN0b3JOYW1lOwogIFN5bWJvbCBnZXQgY29uc3RydWN0b3JOYW1lIHsKICAgIGlmIChfY29uc3RydWN0b3JOYW1lID09IG51bGwpIHsKICAgICAgaWYgKCFpc0NvbnN0cnVjdG9yKSB7CiAgICAgICAgX2NvbnN0cnVjdG9yTmFtZSA9IF9zKCcnKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgcGFydHMgPSBNaXJyb3JTeXN0ZW0uZ2V0TmFtZShzaW1wbGVOYW1lKS5zcGxpdCgnLicpOwogICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAyKSB7CiAgICAgICAgICB0aHJvdyBuZXcgX0ludGVybmFsTWlycm9yRXJyb3IoCiAgICAgICAgICAgICAgJ0ludGVybmFsIGVycm9yIGluIE1ldGhvZE1pcnJvci5jb25zdHJ1Y3Rvck5hbWU6ICcKICAgICAgICAgICAgICAnbWFsZm9ybWVkIG5hbWUgPCRzaW1wbGVOYW1lPicpOwogICAgICAgIH0gZWxzZSBpZiAocGFydHMubGVuZ3RoID09IDIpIHsKICAgICAgICAgIExpYnJhcnlNaXJyb3IgZGVmaW5pbmdMaWJyYXJ5ID0gb3duZXIub3duZXI7CiAgICAgICAgICBfY29uc3RydWN0b3JOYW1lID0gTWlycm9yU3lzdGVtLmdldFN5bWJvbChwYXJ0c1sxXSwgZGVmaW5pbmdMaWJyYXJ5KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgX2NvbnN0cnVjdG9yTmFtZSA9IF9zKCcnKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfY29uc3RydWN0b3JOYW1lOwogIH0KCiAgU3RyaW5nIGdldCBzb3VyY2UgPT4gX01ldGhvZE1pcnJvcl9zb3VyY2UoX3JlZmxlY3RlZSk7CgogIHZvaWQgX3BhdGNoQ29uc3RydWN0b3JOYW1lKG93bmVyTmFtZSkgewogICAgdmFyIGNuID0gX24oY29uc3RydWN0b3JOYW1lKTsKICAgIGlmIChjbiA9PSAnJykgewogICAgICBfc2ltcGxlTmFtZSA9IF9zKG93bmVyTmFtZSk7CiAgICB9IGVsc2UgewogICAgICBfc2ltcGxlTmFtZSA9IF9zKG93bmVyTmFtZSArICIuIiArIGNuKTsKICAgIH0KICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJNZXRob2RNaXJyb3Igb24gJyR7TWlycm9yU3lzdGVtLmdldE5hbWUoc2ltcGxlTmFtZSl9JyI7CgogIHN0YXRpYyBkeW5hbWljIF9NZXRob2RNaXJyb3Jfb3duZXIocmVmbGVjdGVlLCBpbnN0YW50aWF0b3IpCiAgICAgIG5hdGl2ZSAiTWV0aG9kTWlycm9yX293bmVyIjsKCiAgc3RhdGljIGR5bmFtaWMgX01ldGhvZE1pcnJvcl9yZXR1cm5fdHlwZShyZWZsZWN0ZWUsIGluc3RhbnRpYXRvcikKICAgICAgbmF0aXZlICJNZXRob2RNaXJyb3JfcmV0dXJuX3R5cGUiOwoKICBMaXN0PGR5bmFtaWM+IF9NZXRob2RNaXJyb3JfcGFyYW1ldGVycyhyZWZsZWN0ZWUpCiAgICAgIG5hdGl2ZSAiTWV0aG9kTWlycm9yX3BhcmFtZXRlcnMiOwoKICBzdGF0aWMgU3RyaW5nIF9NZXRob2RNaXJyb3Jfc291cmNlKHJlZmxlY3RlZSkgbmF0aXZlICJNZXRob2RNaXJyb3Jfc291cmNlIjsKfQoKY2xhc3MgX0xvY2FsVmFyaWFibGVNaXJyb3IgZXh0ZW5kcyBfTG9jYWxEZWNsYXJhdGlvbk1pcnJvcgogICAgaW1wbGVtZW50cyBWYXJpYWJsZU1pcnJvciB7CiAgZmluYWwgRGVjbGFyYXRpb25NaXJyb3Igb3duZXI7CiAgZmluYWwgYm9vbCBpc1N0YXRpYzsKICBmaW5hbCBib29sIGlzRmluYWw7CiAgZmluYWwgYm9vbCBpc0NvbnN0OwoKICBfTG9jYWxWYXJpYWJsZU1pcnJvci5fKHJlZmxlY3RlZSwgU3RyaW5nIHNpbXBsZU5hbWUsIHRoaXMub3duZXIsIHRoaXMuX3R5cGUsCiAgICAgIHRoaXMuaXNTdGF0aWMsIHRoaXMuaXNGaW5hbCwgdGhpcy5pc0NvbnN0KQogICAgICA6IHN1cGVyLl8ocmVmbGVjdGVlLCBfcyhzaW1wbGVOYW1lKSk7CgogIGJvb2wgZ2V0IGlzVG9wTGV2ZWwgPT4gb3duZXIgaXMgTGlicmFyeU1pcnJvcjsKCiAgVHlwZSBnZXQgX2luc3RhbnRpYXRvciB7CiAgICBmaW5hbCBvID0gb3duZXI7IC8vIE5vdGU6IG5lZWQgbG9jYWwgdmFyaWFibGUgZm9yIHByb21vdGlvbiB0byBoYXBwZW4uCiAgICBpZiAobyBpcyBfTG9jYWxDbGFzc01pcnJvcikgewogICAgICByZXR1cm4gby5faW5zdGFudGlhdG9yOwogICAgfSBlbHNlIGlmIChvIGlzIF9Mb2NhbE1ldGhvZE1pcnJvcikgewogICAgICByZXR1cm4gby5faW5zdGFudGlhdG9yOwogICAgfSBlbHNlIGlmIChvIGlzIF9Mb2NhbExpYnJhcnlNaXJyb3IpIHsKICAgICAgcmV0dXJuIG8uX2luc3RhbnRpYXRvcjsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJ1bmV4cGVjdGVkIG93bmVyICR7b3duZXJ9Iik7CiAgICB9CiAgfQoKICBUeXBlTWlycm9yIF90eXBlOwogIFR5cGVNaXJyb3IgZ2V0IHR5cGUgewogICAgaWYgKF90eXBlID09IG51bGwpIHsKICAgICAgX3R5cGUgPSByZWZsZWN0VHlwZShfVmFyaWFibGVNaXJyb3JfdHlwZShfcmVmbGVjdGVlLCBfaW5zdGFudGlhdG9yKSk7CiAgICB9CiAgICByZXR1cm4gX3R5cGU7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PgogICAgICAiVmFyaWFibGVNaXJyb3Igb24gJyR7TWlycm9yU3lzdGVtLmdldE5hbWUoc2ltcGxlTmFtZSl9JyI7CgogIHN0YXRpYyBfVmFyaWFibGVNaXJyb3JfdHlwZShyZWZsZWN0ZWUsIGluc3RhbnRpYXRvcikKICAgICAgbmF0aXZlICJWYXJpYWJsZU1pcnJvcl90eXBlIjsKfQoKY2xhc3MgX0xvY2FsUGFyYW1ldGVyTWlycm9yIGV4dGVuZHMgX0xvY2FsVmFyaWFibGVNaXJyb3IKICAgIGltcGxlbWVudHMgUGFyYW1ldGVyTWlycm9yIHsKICBmaW5hbCBpbnQgX3Bvc2l0aW9uOwogIGZpbmFsIGJvb2wgaXNPcHRpb25hbDsKICBmaW5hbCBib29sIGlzTmFtZWQ7CiAgZmluYWwgTGlzdCBfdW5taXJyb3JlZE1ldGFkYXRhOwoKICBfTG9jYWxQYXJhbWV0ZXJNaXJyb3IuXygKICAgICAgcmVmbGVjdGVlLAogICAgICBTdHJpbmcgc2ltcGxlTmFtZSwKICAgICAgRGVjbGFyYXRpb25NaXJyb3Igb3duZXIsCiAgICAgIHRoaXMuX3Bvc2l0aW9uLAogICAgICB0aGlzLmlzT3B0aW9uYWwsCiAgICAgIHRoaXMuaXNOYW1lZCwKICAgICAgYm9vbCBpc0ZpbmFsLAogICAgICB0aGlzLl9kZWZhdWx0VmFsdWVSZWZsZWN0ZWUsCiAgICAgIHRoaXMuX3VubWlycm9yZWRNZXRhZGF0YSkKICAgICAgOiBzdXBlci5fKAogICAgICAgICAgICByZWZsZWN0ZWUsCiAgICAgICAgICAgIHNpbXBsZU5hbWUsCiAgICAgICAgICAgIG93bmVyLAogICAgICAgICAgICBudWxsLCAvLyBXZSBvdmVycmlkZSB0aGUgdHlwZS4KICAgICAgICAgICAgZmFsc2UsIC8vIGlzU3RhdGljIGRvZXMgbm90IGFwcGx5LgogICAgICAgICAgICBpc0ZpbmFsLAogICAgICAgICAgICBmYWxzZSAvLyBOb3QgY29uc3QuCiAgICAgICAgICAgICk7CgogIE9iamVjdCBfZGVmYXVsdFZhbHVlUmVmbGVjdGVlOwogIEluc3RhbmNlTWlycm9yIF9kZWZhdWx0VmFsdWU7CiAgSW5zdGFuY2VNaXJyb3IgZ2V0IGRlZmF1bHRWYWx1ZSB7CiAgICBpZiAoIWlzT3B0aW9uYWwpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAoX2RlZmF1bHRWYWx1ZSA9PSBudWxsKSB7CiAgICAgIF9kZWZhdWx0VmFsdWUgPSByZWZsZWN0KF9kZWZhdWx0VmFsdWVSZWZsZWN0ZWUpOwogICAgfQogICAgcmV0dXJuIF9kZWZhdWx0VmFsdWU7CiAgfQoKICBib29sIGdldCBoYXNEZWZhdWx0VmFsdWUgPT4gX2RlZmF1bHRWYWx1ZVJlZmxlY3RlZSAhPSBudWxsOwoKICBTb3VyY2VMb2NhdGlvbiBnZXQgbG9jYXRpb24gewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlBhcmFtZXRlck1pcnJvci5sb2NhdGlvbiB1bmltcGxlbWVudGVkIik7CiAgfQoKICBMaXN0PEluc3RhbmNlTWlycm9yPiBnZXQgbWV0YWRhdGEgewogICAgaWYgKF91bm1pcnJvcmVkTWV0YWRhdGEgPT0gbnVsbCkgcmV0dXJuIGNvbnN0IDxJbnN0YW5jZU1pcnJvcj5bXTsKICAgIHJldHVybiBuZXcgVW5tb2RpZmlhYmxlTGlzdFZpZXc8SW5zdGFuY2VNaXJyb3I+KAogICAgICAgIF91bm1pcnJvcmVkTWV0YWRhdGEubWFwKHJlZmxlY3QpKTsKICB9CgogIFR5cGVNaXJyb3IgX3R5cGU7CiAgVHlwZU1pcnJvciBnZXQgdHlwZSB7CiAgICBpZiAoX3R5cGUgPT0gbnVsbCkgewogICAgICBfdHlwZSA9IHJlZmxlY3RUeXBlKAogICAgICAgICAgX1BhcmFtZXRlck1pcnJvcl90eXBlKF9yZWZsZWN0ZWUsIF9wb3NpdGlvbiwgX2luc3RhbnRpYXRvcikpOwogICAgfQogICAgcmV0dXJuIF90eXBlOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIlBhcmFtZXRlck1pcnJvciBvbiAnJHtfbihzaW1wbGVOYW1lKX0nIjsKCiAgc3RhdGljIFR5cGUgX1BhcmFtZXRlck1pcnJvcl90eXBlKF9yZWZsZWN0ZWUsIF9wb3NpdGlvbiwgaW5zdGFudGlhdG9yKQogICAgICBuYXRpdmUgIlBhcmFtZXRlck1pcnJvcl90eXBlIjsKfQoKY2xhc3MgX1NwZWNpYWxUeXBlTWlycm9yIGV4dGVuZHMgX0xvY2FsTWlycm9yCiAgICBpbXBsZW1lbnRzIFR5cGVNaXJyb3IsIERlY2xhcmF0aW9uTWlycm9yIHsKICBmaW5hbCBTeW1ib2wgc2ltcGxlTmFtZTsKCiAgX1NwZWNpYWxUeXBlTWlycm9yLl8oU3RyaW5nIG5hbWUpIDogc2ltcGxlTmFtZSA9IF9zKG5hbWUpOwoKICBib29sIGdldCBpc1ByaXZhdGUgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNUb3BMZXZlbCA9PiB0cnVlOwoKICBEZWNsYXJhdGlvbk1pcnJvciBnZXQgb3duZXIgPT4gbnVsbDsKCiAgU291cmNlTG9jYXRpb24gZ2V0IGxvY2F0aW9uID0+IG51bGw7CiAgTGlzdDxJbnN0YW5jZU1pcnJvcj4gZ2V0IG1ldGFkYXRhID0+IGNvbnN0IDxJbnN0YW5jZU1pcnJvcj5bXTsKCiAgYm9vbCBnZXQgaGFzUmVmbGVjdGVkVHlwZSA9PiBzaW1wbGVOYW1lID09ICNkeW5hbWljOwogIFR5cGUgZ2V0IHJlZmxlY3RlZFR5cGUgewogICAgaWYgKHNpbXBsZU5hbWUgPT0gI2R5bmFtaWMpIHJldHVybiBkeW5hbWljOwogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoInZvaWQgaGFzIG5vIHJlZmxlY3RlZCB0eXBlIik7CiAgfQoKICBMaXN0PFR5cGVWYXJpYWJsZU1pcnJvcj4gZ2V0IHR5cGVWYXJpYWJsZXMgPT4gY29uc3QgPFR5cGVWYXJpYWJsZU1pcnJvcj5bXTsKICBMaXN0PFR5cGVNaXJyb3I+IGdldCB0eXBlQXJndW1lbnRzID0+IGNvbnN0IDxUeXBlTWlycm9yPltdOwoKICBib29sIGdldCBpc09yaWdpbmFsRGVjbGFyYXRpb24gPT4gdHJ1ZTsKICBUeXBlTWlycm9yIGdldCBvcmlnaW5hbERlY2xhcmF0aW9uID0+IHRoaXM7CgogIFN5bWJvbCBnZXQgcXVhbGlmaWVkTmFtZSA9PiBzaW1wbGVOYW1lOwoKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIF9TcGVjaWFsVHlwZU1pcnJvcikgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdGhpcy5zaW1wbGVOYW1lID09IG90aGVyLnNpbXBsZU5hbWU7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHNpbXBsZU5hbWUuaGFzaENvZGU7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJUeXBlTWlycm9yIG9uICcke19uKHNpbXBsZU5hbWUpfSciOwoKICBib29sIGlzU3VidHlwZU9mKFR5cGVNaXJyb3Igb3RoZXIpIHsKICAgIHJldHVybiBzaW1wbGVOYW1lID09ICNkeW5hbWljIHx8IG90aGVyIGlzIF9TcGVjaWFsVHlwZU1pcnJvcjsKICB9CgogIGJvb2wgaXNBc3NpZ25hYmxlVG8oVHlwZU1pcnJvciBvdGhlcikgewogICAgcmV0dXJuIHNpbXBsZU5hbWUgPT0gI2R5bmFtaWMgfHwgb3RoZXIgaXMgX1NwZWNpYWxUeXBlTWlycm9yOwogIH0KfQoKY2xhc3MgX01pcnJvcnMgewogIHN0YXRpYyBNaXJyb3JTeXN0ZW0gX2N1cnJlbnRNaXJyb3JTeXN0ZW0gPSBuZXcgX0xvY2FsTWlycm9yU3lzdGVtKCk7CiAgc3RhdGljIE1pcnJvclN5c3RlbSBjdXJyZW50TWlycm9yU3lzdGVtKCkgewogICAgcmV0dXJuIF9jdXJyZW50TWlycm9yU3lzdGVtOwogIH0KCiAgLy8gQ3JlYXRlcyBhIG5ldyBsb2NhbCBtaXJyb3IgZm9yIHNvbWUgT2JqZWN0LgogIHN0YXRpYyBJbnN0YW5jZU1pcnJvciByZWZsZWN0KE9iamVjdCByZWZsZWN0ZWUpIHsKICAgIHJldHVybiByZWZsZWN0ZWUgaXMgRnVuY3Rpb24KICAgICAgICA/IG5ldyBfTG9jYWxDbG9zdXJlTWlycm9yLl8ocmVmbGVjdGVlKQogICAgICAgIDogbmV3IF9Mb2NhbEluc3RhbmNlTWlycm9yLl8ocmVmbGVjdGVlKTsKICB9CgogIHN0YXRpYyBDbGFzc01pcnJvciBfbWFrZUxvY2FsQ2xhc3NNaXJyb3IoVHlwZSBrZXkpCiAgICAgIG5hdGl2ZSAiTWlycm9yc19tYWtlTG9jYWxDbGFzc01pcnJvciI7CiAgc3RhdGljIFR5cGVNaXJyb3IgX21ha2VMb2NhbFR5cGVNaXJyb3IoVHlwZSBrZXkpCiAgICAgIG5hdGl2ZSAiTWlycm9yc19tYWtlTG9jYWxUeXBlTWlycm9yIjsKICBzdGF0aWMgVHlwZSBfaW5zdGFudGlhdGVHZW5lcmljVHlwZShUeXBlIGtleSwgdHlwZUFyZ3VtZW50cykKICAgICAgbmF0aXZlICJNaXJyb3JzX2luc3RhbnRpYXRlR2VuZXJpY1R5cGUiOwoKICBzdGF0aWMgRXhwYW5kbzxfTG9jYWxDbGFzc01pcnJvcj4gX2RlY2xhcmF0aW9uQ2FjaGUgPQogICAgICBuZXcgRXhwYW5kbygiQ2xhc3NNaXJyb3IiKTsKICBzdGF0aWMgRXhwYW5kbzxUeXBlTWlycm9yPiBfaW5zdGFudGlhdGlvbkNhY2hlID0gbmV3IEV4cGFuZG8oIlR5cGVNaXJyb3IiKTsKCiAgc3RhdGljIENsYXNzTWlycm9yIHJlZmxlY3RDbGFzcyhUeXBlIGtleSkgewogICAgdmFyIGNsYXNzTWlycm9yID0gX2RlY2xhcmF0aW9uQ2FjaGVba2V5XTsKICAgIGlmIChjbGFzc01pcnJvciA9PSBudWxsKSB7CiAgICAgIGNsYXNzTWlycm9yID0gX21ha2VMb2NhbENsYXNzTWlycm9yKGtleSk7CiAgICAgIF9kZWNsYXJhdGlvbkNhY2hlW2tleV0gPSBjbGFzc01pcnJvcjsKICAgICAgaWYgKCFjbGFzc01pcnJvci5faXNHZW5lcmljKSB7CiAgICAgICAgX2luc3RhbnRpYXRpb25DYWNoZVtrZXldID0gY2xhc3NNaXJyb3I7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBjbGFzc01pcnJvcjsKICB9CgogIHN0YXRpYyBUeXBlTWlycm9yIHJlZmxlY3RUeXBlKFR5cGUga2V5LCBbTGlzdDxUeXBlPiB0eXBlQXJndW1lbnRzXSkgewogICAgaWYgKHR5cGVBcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBrZXkgPSBfaW5zdGFudGlhdGVUeXBlKGtleSwgdHlwZUFyZ3VtZW50cyk7CiAgICB9CiAgICB2YXIgdHlwZU1pcnJvciA9IF9pbnN0YW50aWF0aW9uQ2FjaGVba2V5XTsKICAgIGlmICh0eXBlTWlycm9yID09IG51bGwpIHsKICAgICAgdHlwZU1pcnJvciA9IF9tYWtlTG9jYWxUeXBlTWlycm9yKGtleSk7CiAgICAgIF9pbnN0YW50aWF0aW9uQ2FjaGVba2V5XSA9IHR5cGVNaXJyb3I7CiAgICAgIGlmICh0eXBlTWlycm9yIGlzIF9Mb2NhbENsYXNzTWlycm9yICYmICF0eXBlTWlycm9yLl9pc0dlbmVyaWMpIHsKICAgICAgICBfZGVjbGFyYXRpb25DYWNoZVtrZXldID0gdHlwZU1pcnJvcjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHR5cGVNaXJyb3I7CiAgfQoKICBzdGF0aWMgVHlwZSBfaW5zdGFudGlhdGVUeXBlKFR5cGUga2V5LCBMaXN0PFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIGlmICh0eXBlQXJndW1lbnRzLmlzRW1wdHkpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUodHlwZUFyZ3VtZW50cywgJ3R5cGVBcmd1bWVudHMnLAogICAgICAgICAgJ1R5cGUgYXJndW1lbnRzIGxpc3QgY2Fubm90IGJlIGVtcHR5LicpOwogICAgfQogICAgcmV0dXJuIF9pbnN0YW50aWF0ZUdlbmVyaWNUeXBlKGtleSwgdHlwZUFyZ3VtZW50cy50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKSk7CiAgfQp9CoXjAE5OPAEhAU0BKxUjHQIBPQEZITACAUsoPQIBHT8pEiolATAfRhYjBkwWKAYZJxcGLScXBgQeFAQjFAQWKxkC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ZW50cnktcG9pbnQiKQpjbGFzcyBfTWlycm9yUmVmZXJlbmNlIHsKICBmYWN0b3J5IF9NaXJyb3JSZWZlcmVuY2UuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIG5hdGl2ZSAiTWlycm9yUmVmZXJlbmNlX2VxdWFscyI7Cn0KEABOTjwBIQEaGS8ZBAE7AgEoZGFydDptaXJyb3JzLXBhdGNoL21pcnJvcl9yZWZlcmVuY2UuZGFydDJvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL21pcnJvcnNfcGF0Y2guZGFydIq6Ly8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBOb3RlOiB0aGUgVk0gY29uY2F0ZW5hdGVzIGFsbCBwYXRjaCBmaWxlcyBpbnRvIGEgc2luZ2xlIHBhdGNoIGZpbGUuIFRoaXMKLy8vIGZpbGUgaXMgdGhlIGZpcnN0IHBhdGNoIGluICJkYXJ0Ol9pbnRlcm5hbCIgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBpbXBvcnRzCi8vLyB1c2VkIGJ5IHBhdGNoZXMgb2YgdGhhdCBsaWJyYXJ5LiBXZSBwbGFuIHRvIGNoYW5nZSB0aGlzIHdoZW4gd2UgaGF2ZSBhCi8vLyBzaGFyZWQgZnJvbnQgZW5kIGFuZCBzaW1wbHkgdXNlIHBhcnRzLgoKaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIgYXMgaW50ZXJuYWw7CgppbXBvcnQgImRhcnQ6X2ludGVybmFsIiBzaG93IHBhdGNoOwoKaW1wb3J0ICJkYXJ0OmFzeW5jIiBzaG93IEZ1dHVyZTsKCmltcG9ydCAiZGFydDpjb2xsZWN0aW9uIiBzaG93IFVubW9kaWZpYWJsZUxpc3RWaWV3LCBVbm1vZGlmaWFibGVNYXBWaWV3OwoKLy8vIFRoZXNlIGFyZSB0aGUgYWRkaXRpb25hbCBwYXJ0cyBvZiB0aGlzIHBhdGNoIGxpYnJhcnk6Ci8vIHBhcnQgIm1pcnJvcnNfaW1wbC5kYXJ0IjsKLy8gcGFydCAibWlycm9yX3JlZmVyZW5jZS5kYXJ0IjsKCi8qKgogKiBSZXR1cm5zIGEgW01pcnJvclN5c3RlbV0gZm9yIHRoZSBjdXJyZW50IGlzb2xhdGUuCiAqLwpAcGF0Y2gKTWlycm9yU3lzdGVtIGN1cnJlbnRNaXJyb3JTeXN0ZW0oKSB7CiAgcmV0dXJuIF9NaXJyb3JzLmN1cnJlbnRNaXJyb3JTeXN0ZW0oKTsKfQoKLyoqCiAqIFJldHVybnMgYW4gW0luc3RhbmNlTWlycm9yXSBmb3Igc29tZSBEYXJ0IGxhbmd1YWdlIG9iamVjdC4KICoKICogVGhpcyBvbmx5IHdvcmtzIGlmIHRoaXMgbWlycm9yIHN5c3RlbSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlCiAqIGN1cnJlbnQgcnVubmluZyBpc29sYXRlLgogKi8KQHBhdGNoCkluc3RhbmNlTWlycm9yIHJlZmxlY3QoT2JqZWN0IHJlZmxlY3RlZSkgewogIHJldHVybiBfTWlycm9ycy5yZWZsZWN0KHJlZmxlY3RlZSk7Cn0KCi8qKgogKiBSZXR1cm5zIGEgW0NsYXNzTWlycm9yXSBmb3IgdGhlIGNsYXNzIHJlcHJlc2VudGVkIGJ5IGEgRGFydAogKiBUeXBlIG9iamVjdC4KICoKICogVGhpcyBvbmx5IHdvcmtzIHdpdGggb2JqZWN0cyBsb2NhbCB0byB0aGUgY3VycmVudCBpc29sYXRlLgogKi8KQHBhdGNoCkNsYXNzTWlycm9yIHJlZmxlY3RDbGFzcyhUeXBlIGtleSkgewogIHJldHVybiBfTWlycm9ycy5yZWZsZWN0Q2xhc3Moa2V5KTsKfQoKQHBhdGNoClR5cGVNaXJyb3IgcmVmbGVjdFR5cGUoVHlwZSBrZXksIFtMaXN0PFR5cGU+IHR5cGVBcmd1bWVudHNdKSB7CiAgcmV0dXJuIF9NaXJyb3JzLnJlZmxlY3RUeXBlKGtleSwgdHlwZUFyZ3VtZW50cyk7Cn0KCkBwYXRjaApjbGFzcyBNaXJyb3JTeXN0ZW0gewogIEBwYXRjaAogIExpYnJhcnlNaXJyb3IgZmluZExpYnJhcnkoU3ltYm9sIGxpYnJhcnlOYW1lKSB7CiAgICB2YXIgY2FuZGlkYXRlcyA9CiAgICAgICAgbGlicmFyaWVzLnZhbHVlcy53aGVyZSgobGliKSA9PiBsaWIuc2ltcGxlTmFtZSA9PSBsaWJyYXJ5TmFtZSk7CiAgICBpZiAoY2FuZGlkYXRlcy5sZW5ndGggPT0gMSkgewogICAgICByZXR1cm4gY2FuZGlkYXRlcy5zaW5nbGU7CiAgICB9CiAgICBpZiAoY2FuZGlkYXRlcy5sZW5ndGggPiAxKSB7CiAgICAgIHZhciB1cmlzID0gY2FuZGlkYXRlcy5tYXAoKGxpYikgPT4gbGliLnVyaS50b1N0cmluZygpKS50b0xpc3QoKTsKICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGhlcmUgYXJlIG11bHRpcGxlIGxpYnJhcmllcyBuYW1lZCAiCiAgICAgICAgICAiJyR7Z2V0TmFtZShsaWJyYXJ5TmFtZSl9JzogJHVyaXMiKTsKICAgIH0KICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRoZXJlIGlzIG5vIGxpYnJhcnkgbmFtZWQgJyR7Z2V0TmFtZShsaWJyYXJ5TmFtZSl9JyIpOwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIFN0cmluZyBnZXROYW1lKFN5bWJvbCBzeW1ib2wpIHsKICAgIHJldHVybiBpbnRlcm5hbC5TeW1ib2wuY29tcHV0ZVVubWFuZ2xlZE5hbWUoc3ltYm9sKTsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBTeW1ib2wgZ2V0U3ltYm9sKFN0cmluZyBuYW1lLCBbTGlicmFyeU1pcnJvciBsaWJyYXJ5XSkgewogICAgaWYgKChsaWJyYXJ5ICE9IG51bGwgJiYgbGlicmFyeSBpcyEgX0xvY2FsTGlicmFyeU1pcnJvcikgfHwKICAgICAgICAoKG5hbWUubGVuZ3RoID4gMCkgJiYgKG5hbWVbMF0gPT0gJ18nKSAmJiAobGlicmFyeSA9PSBudWxsKSkpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IobGlicmFyeSk7CiAgICB9CiAgICBpZiAobGlicmFyeSAhPSBudWxsKSB7CiAgICAgIG5hbWUgPSBfbWFuZ2xlTmFtZShuYW1lLCAobGlicmFyeSBhcyBfTG9jYWxMaWJyYXJ5TWlycm9yKS5fcmVmbGVjdGVlKTsKICAgIH0KICAgIHJldHVybiBuZXcgaW50ZXJuYWwuU3ltYm9sLnVudmFsaWRhdGVkKG5hbWUpOwogIH0KCiAgc3RhdGljIF9tYW5nbGVOYW1lKFN0cmluZyBuYW1lLCBfTWlycm9yUmVmZXJlbmNlIGxpYikKICAgICAgbmF0aXZlICJNaXJyb3JzX21hbmdsZU5hbWUiOwp9Cl8ATk48AU1PSysBJQEkASEBSQE6HSEBBDUEByUpAgEEPgNAHAQHKyYCAQQ/EAM+BAclJQIBBz8zAgEHFQkyFUgiIAYhR0AvBlAEAQkpOQQBCUJASCgGG00GMgQBOCMCASVkYXJ0Om1pcnJvcnMtcGF0Y2gvbWlycm9yc19wYXRjaC5kYXJ0Mm9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9wcm9maWxlci9wcm9maWxlci5kYXJ0gYkvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIFBsZWFzZSBzZWUgJ2RhcnQ6ZGV2ZWxvcGVyJy4KQERlcHJlY2F0ZWQoIkRhcnQgU0RLIDEuMTIiKQpsaWJyYXJ5IGRhcnQucHJvZmlsZXI7CgpleHBvcnQgJ2RhcnQ6ZGV2ZWxvcGVyJwogICAgc2hvdyBnZXRDdXJyZW50VGFnLCBDb3VudGVyLCBHYXVnZSwgTWV0cmljLCBNZXRyaWNzLCBVc2VyVGFnOwoMAE5OPAEhHRcBGEIBDWRhcnQ6cHJvZmlsZXI2b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL3R5cGVkX2RhdGEvdHlwZWRfZGF0YS5kYXJ0wAFdni8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gTGlzdHMgdGhhdCBlZmZpY2llbnRseSBoYW5kbGUgZml4ZWQgc2l6ZWQgZGF0YQovLy8gKGZvciBleGFtcGxlLCB1bnNpZ25lZCA4IGJ5dGUgaW50ZWdlcnMpIGFuZCBTSU1EIG51bWVyaWMgdHlwZXMuCi8vLwovLy8gVG8gdXNlIHRoaXMgbGlicmFyeSBpbiB5b3VyIGNvZGU6Ci8vLwovLy8gICAgIGltcG9ydCAnZGFydDp0eXBlZF9kYXRhJzsKLy8vCi8vLyB7QGNhdGVnb3J5IENvcmV9CmxpYnJhcnkgZGFydC50eXBlZF9kYXRhOwoKaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIgc2hvdyBVbm1vZGlmaWFibGVMaXN0QmFzZTsKCnBhcnQgInVubW9kaWZpYWJsZV90eXBlZF9kYXRhLmRhcnQiOwoKLyoqCiAqIEEgc2VxdWVuY2Ugb2YgYnl0ZXMgdW5kZXJseWluZyBhIHR5cGVkIGRhdGEgb2JqZWN0LgogKgogKiBVc2VkIHRvIHByb2Nlc3MgbGFyZ2UgcXVhbnRpdGllcyBvZiBiaW5hcnkgb3IgbnVtZXJpY2FsIGRhdGEKICogbW9yZSBlZmZpY2llbnRseSB1c2luZyBhIHR5cGVkIHZpZXcuCiAqLwphYnN0cmFjdCBjbGFzcyBCeXRlQnVmZmVyIHsKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhpcyBieXRlIGJ1ZmZlciwgaW4gYnl0ZXMuCiAgICovCiAgaW50IGdldCBsZW5ndGhJbkJ5dGVzOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW1VpbnQ4TGlzdF0gX3ZpZXdfIG9mIGEgcmVnaW9uIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaGUgdmlldyBpcyBiYWNrZWQgYnkgdGhlIGJ5dGVzIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICogQW55IGNoYW5nZXMgbWFkZSB0byB0aGUgYFVpbnQ4TGlzdGAgd2lsbCBhbHNvIGNoYW5nZSB0aGUgYnVmZmVyLAogICAqIGFuZCB2aWNlIHZlcnNhLgogICAqCiAgICogVGhlIHZpZXdlZCByZWdpb24gc3RhcnQgYXQgW29mZnNldEluQnl0ZXNdIGFuZCBjb250YWlucyBbbGVuZ3RoXSBieXRlcy4KICAgKiBJZiBbbGVuZ3RoXSBpcyBvbWl0dGVkLCB0aGUgcmFuZ2UgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCiAgICoKICAgKiBUaGUgc3RhcnQgaW5kZXggYW5kIGxlbmd0aCBtdXN0IGRlc2NyaWJlIGEgdmFsaWQgcmFuZ2Ugb2YgdGhlIGJ1ZmZlcjoKICAgKgogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLAogICAqICogYGxlbmd0aGAgbXVzdCBub3QgYmUgbmVnYXRpdmUsIGFuZAogICAqICogYG9mZnNldEluQnl0ZXMgKyBsZW5ndGhgIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBbbGVuZ3RoSW5CeXRlc10uCiAgICovCiAgVWludDhMaXN0IGFzVWludDhMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtJbnQ4TGlzdF0gX3ZpZXdfIG9mIGEgcmVnaW9uIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaGUgdmlldyBpcyBiYWNrZWQgYnkgdGhlIGJ5dGVzIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICogQW55IGNoYW5nZXMgbWFkZSB0byB0aGUgYEludDhMaXN0YCB3aWxsIGFsc28gY2hhbmdlIHRoZSBidWZmZXIsCiAgICogYW5kIHZpY2UgdmVyc2EuCiAgICoKICAgKiBUaGUgdmlld2VkIHJlZ2lvbiBzdGFydCBhdCBbb2Zmc2V0SW5CeXRlc10gYW5kIGNvbnRhaW5zIFtsZW5ndGhdIGJ5dGVzLgogICAqIElmIFtsZW5ndGhdIGlzIG9taXR0ZWQsIHRoZSByYW5nZSBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KICAgKgogICAqIFRoZSBzdGFydCBpbmRleCBhbmQgbGVuZ3RoIG11c3QgZGVzY3JpYmUgYSB2YWxpZCByYW5nZSBvZiB0aGUgYnVmZmVyOgogICAqCiAgICogKiBgb2Zmc2V0SW5CeXRlc2AgbXVzdCBub3QgYmUgbmVnYXRpdmUsCiAgICogKiBgbGVuZ3RoYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwgYW5kCiAgICogKiBgb2Zmc2V0SW5CeXRlcyArIGxlbmd0aGAgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIFtsZW5ndGhJbkJ5dGVzXS4KICAgKi8KICBJbnQ4TGlzdCBhc0ludDhMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtVaW50OENsYW1wZWRMaXN0XSBfdmlld18gb2YgYSByZWdpb24gb2YgdGhpcyBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRoZSB2aWV3IGlzIGJhY2tlZCBieSB0aGUgYnl0ZXMgb2YgdGhpcyBieXRlIGJ1ZmZlci4KICAgKiBBbnkgY2hhbmdlcyBtYWRlIHRvIHRoZSBgVWludDhDbGFtcGVkTGlzdGAgd2lsbCBhbHNvIGNoYW5nZSB0aGUgYnVmZmVyLAogICAqIGFuZCB2aWNlIHZlcnNhLgogICAqCiAgICogVGhlIHZpZXdlZCByZWdpb24gc3RhcnQgYXQgW29mZnNldEluQnl0ZXNdIGFuZCBjb250YWlucyBbbGVuZ3RoXSBieXRlcy4KICAgKiBJZiBbbGVuZ3RoXSBpcyBvbWl0dGVkLCB0aGUgcmFuZ2UgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCiAgICoKICAgKiBUaGUgc3RhcnQgaW5kZXggYW5kIGxlbmd0aCBtdXN0IGRlc2NyaWJlIGEgdmFsaWQgcmFuZ2Ugb2YgdGhlIGJ1ZmZlcjoKICAgKgogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLAogICAqICogYGxlbmd0aGAgbXVzdCBub3QgYmUgbmVnYXRpdmUsIGFuZAogICAqICogYG9mZnNldEluQnl0ZXMgKyBsZW5ndGhgIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBbbGVuZ3RoSW5CeXRlc10uCiAgICovCiAgVWludDhDbGFtcGVkTGlzdCBhc1VpbnQ4Q2xhbXBlZExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW1VpbnQxNkxpc3RdIF92aWV3XyBvZiBhIHJlZ2lvbiBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqCiAgICogVGhlIHZpZXcgaXMgYmFja2VkIGJ5IHRoZSBieXRlcyBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqIEFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGBVaW50MTZMaXN0YCB3aWxsIGFsc28gY2hhbmdlIHRoZSBidWZmZXIsCiAgICogYW5kIHZpY2UgdmVyc2EuCiAgICoKICAgKiBUaGUgdmlld2VkIHJlZ2lvbiBzdGFydCBhdCBbb2Zmc2V0SW5CeXRlc10sIHdoaWNoIG11c3QgYmUgMTYtYml0IGFsaWduZWQsCiAgICogYW5kIGNvbnRhaW5zIFtsZW5ndGhdIDE2LWJpdCBpbnRlZ2Vycy4KICAgKiBJZiBbbGVuZ3RoXSBpcyBvbWl0dGVkLCB0aGUgcmFuZ2UgZXh0ZW5kcyBhcyBmYXIgdG93YXJkcyB0aGUgZW5kIG9mCiAgICogdGhlIGJ1ZmZlciBhcyBwb3NzaWJsZSAtCiAgICogaWYgW2xlbmd0aEluQnl0ZXNdIGlzIG5vdCBldmVuLCB0aGUgbGFzdCBieXRlIGNhbid0IGJlIHBhcnQgb2YgdGhlIHZpZXcuCiAgICoKICAgKiBUaGUgc3RhcnQgaW5kZXggYW5kIGxlbmd0aCBtdXN0IGRlc2NyaWJlIGEgdmFsaWQgMTYtYml0IGFsaWduZWQgcmFuZ2UKICAgKiBvZiB0aGUgYnVmZmVyOgogICAqCiAgICogKiBgb2Zmc2V0SW5CeXRlc2AgbXVzdCBub3QgYmUgbmVnYXRpdmUsCiAgICogKiBgb2Zmc2V0SW5CeXRlc2AgbXVzdCBiZSBkaXZpc2libGUgYnkgdHdvLAogICAqICogYGxlbmd0aGAgbXVzdCBub3QgYmUgbmVnYXRpdmUsIGFuZAogICAqICogYG9mZnNldEluQnl0ZXMgKyBsZW5ndGggKiAyYCBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gW2xlbmd0aEluQnl0ZXNdLgogICAqLwogIFVpbnQxNkxpc3QgYXNVaW50MTZMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtJbnQxNkxpc3RdIF92aWV3XyBvZiBhIHJlZ2lvbiBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqCiAgICogVGhlIHZpZXcgaXMgYmFja2VkIGJ5IHRoZSBieXRlcyBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqIEFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGBJbnQxNkxpc3RgIHdpbGwgYWxzbyBjaGFuZ2UgdGhlIGJ1ZmZlciwKICAgKiBhbmQgdmljZSB2ZXJzYS4KICAgKgogICAqIFRoZSB2aWV3ZWQgcmVnaW9uIHN0YXJ0IGF0IFtvZmZzZXRJbkJ5dGVzXSwgd2hpY2ggbXVzdCBiZSAxNi1iaXQgYWxpZ25lZCwKICAgKiBhbmQgY29udGFpbnMgW2xlbmd0aF0gMTYtYml0IGludGVnZXJzLgogICAqIElmIFtsZW5ndGhdIGlzIG9taXR0ZWQsIHRoZSByYW5nZSBleHRlbmRzIGFzIGZhciB0b3dhcmRzIHRoZSBlbmQgb2YKICAgKiB0aGUgYnVmZmVyIGFzIHBvc3NpYmxlIC0KICAgKiBpZiBbbGVuZ3RoSW5CeXRlc10gaXMgbm90IGV2ZW4sIHRoZSBsYXN0IGJ5dGUgY2FuJ3QgYmUgcGFydCBvZiB0aGUgdmlldy4KICAgKgogICAqIFRoZSBzdGFydCBpbmRleCBhbmQgbGVuZ3RoIG11c3QgZGVzY3JpYmUgYSB2YWxpZCAxNi1iaXQgYWxpZ25lZCByYW5nZQogICAqIG9mIHRoZSBidWZmZXI6CiAgICoKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IGJlIGRpdmlzaWJsZSBieSB0d28sCiAgICogKiBgbGVuZ3RoYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwgYW5kCiAgICogKiBgb2Zmc2V0SW5CeXRlcyArIGxlbmd0aCAqIDJgIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBbbGVuZ3RoSW5CeXRlc10uCiAgICovCiAgSW50MTZMaXN0IGFzSW50MTZMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtVaW50MzJMaXN0XSBfdmlld18gb2YgYSByZWdpb24gb2YgdGhpcyBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRoZSB2aWV3IGlzIGJhY2tlZCBieSB0aGUgYnl0ZXMgb2YgdGhpcyBieXRlIGJ1ZmZlci4KICAgKiBBbnkgY2hhbmdlcyBtYWRlIHRvIHRoZSBgVWludDMyTGlzdGAgd2lsbCBhbHNvIGNoYW5nZSB0aGUgYnVmZmVyLAogICAqIGFuZCB2aWNlIHZlcnNhLgogICAqCiAgICogVGhlIHZpZXdlZCByZWdpb24gc3RhcnQgYXQgW29mZnNldEluQnl0ZXNdLCB3aGljaCBtdXN0IGJlIDMyLWJpdCBhbGlnbmVkLAogICAqIGFuZCBjb250YWlucyBbbGVuZ3RoXSAzMi1iaXQgaW50ZWdlcnMuCiAgICogSWYgW2xlbmd0aF0gaXMgb21pdHRlZCwgdGhlIHJhbmdlIGV4dGVuZHMgYXMgZmFyIHRvd2FyZHMgdGhlIGVuZCBvZgogICAqIHRoZSBidWZmZXIgYXMgcG9zc2libGUgLQogICAqIGlmIFtsZW5ndGhJbkJ5dGVzXSBpcyBub3QgZGl2aXNpYmxlIGJ5IGZvdXIsIHRoZSBsYXN0IGJ5dGVzIGNhbid0IGJlIHBhcnQKICAgKiBvZiB0aGUgdmlldy4KICAgKgogICAqIFRoZSBzdGFydCBpbmRleCBhbmQgbGVuZ3RoIG11c3QgZGVzY3JpYmUgYSB2YWxpZCAzMi1iaXQgYWxpZ25lZCByYW5nZQogICAqIG9mIHRoZSBidWZmZXI6CiAgICoKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IGJlIGRpdmlzaWJsZSBieSBmb3VyLAogICAqICogYGxlbmd0aGAgbXVzdCBub3QgYmUgbmVnYXRpdmUsIGFuZAogICAqICogYG9mZnNldEluQnl0ZXMgKyBsZW5ndGggKiA0YCBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gW2xlbmd0aEluQnl0ZXNdLgogICAqLwogIFVpbnQzMkxpc3QgYXNVaW50MzJMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtJbnQzMkxpc3RdIF92aWV3XyBvZiBhIHJlZ2lvbiBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqCiAgICogVGhlIHZpZXcgaXMgYmFja2VkIGJ5IHRoZSBieXRlcyBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqIEFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGBJbnQzMkxpc3RgIHdpbGwgYWxzbyBjaGFuZ2UgdGhlIGJ1ZmZlciwKICAgKiBhbmQgdmljZSB2ZXJzYS4KICAgKgogICAqIFRoZSB2aWV3ZWQgcmVnaW9uIHN0YXJ0IGF0IFtvZmZzZXRJbkJ5dGVzXSwgd2hpY2ggbXVzdCBiZSAzMi1iaXQgYWxpZ25lZCwKICAgKiBhbmQgY29udGFpbnMgW2xlbmd0aF0gMzItYml0IGludGVnZXJzLgogICAqIElmIFtsZW5ndGhdIGlzIG9taXR0ZWQsIHRoZSByYW5nZSBleHRlbmRzIGFzIGZhciB0b3dhcmRzIHRoZSBlbmQgb2YKICAgKiB0aGUgYnVmZmVyIGFzIHBvc3NpYmxlIC0KICAgKiBpZiBbbGVuZ3RoSW5CeXRlc10gaXMgbm90IGRpdmlzaWJsZSBieSBmb3VyLCB0aGUgbGFzdCBieXRlcyBjYW4ndCBiZSBwYXJ0CiAgICogb2YgdGhlIHZpZXcuCiAgICoKICAgKiBUaGUgc3RhcnQgaW5kZXggYW5kIGxlbmd0aCBtdXN0IGRlc2NyaWJlIGEgdmFsaWQgMzItYml0IGFsaWduZWQgcmFuZ2UKICAgKiBvZiB0aGUgYnVmZmVyOgogICAqCiAgICogKiBgb2Zmc2V0SW5CeXRlc2AgbXVzdCBub3QgYmUgbmVnYXRpdmUsCiAgICogKiBgb2Zmc2V0SW5CeXRlc2AgbXVzdCBiZSBkaXZpc2libGUgYnkgZm91ciwKICAgKiAqIGBsZW5ndGhgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLCBhbmQKICAgKiAqIGBvZmZzZXRJbkJ5dGVzICsgbGVuZ3RoICogNGAgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIFtsZW5ndGhJbkJ5dGVzXS4KICAgKi8KICBJbnQzMkxpc3QgYXNJbnQzMkxpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW1VpbnQ2NExpc3RdIF92aWV3XyBvZiBhIHJlZ2lvbiBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqCiAgICogVGhlIHZpZXcgaXMgYmFja2VkIGJ5IHRoZSBieXRlcyBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqIEFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGBVaW50NjRMaXN0YCB3aWxsIGFsc28gY2hhbmdlIHRoZSBidWZmZXIsCiAgICogYW5kIHZpY2UgdmVyc2EuCiAgICoKICAgKiBUaGUgdmlld2VkIHJlZ2lvbiBzdGFydCBhdCBbb2Zmc2V0SW5CeXRlc10sIHdoaWNoIG11c3QgYmUgNjQtYml0IGFsaWduZWQsCiAgICogYW5kIGNvbnRhaW5zIFtsZW5ndGhdIDY0LWJpdCBpbnRlZ2Vycy4KICAgKiBJZiBbbGVuZ3RoXSBpcyBvbWl0dGVkLCB0aGUgcmFuZ2UgZXh0ZW5kcyBhcyBmYXIgdG93YXJkcyB0aGUgZW5kIG9mCiAgICogdGhlIGJ1ZmZlciBhcyBwb3NzaWJsZSAtCiAgICogaWYgW2xlbmd0aEluQnl0ZXNdIGlzIG5vdCBkaXZpc2libGUgYnkgZWlnaHQsIHRoZSBsYXN0IGJ5dGVzIGNhbid0IGJlIHBhcnQKICAgKiBvZiB0aGUgdmlldy4KICAgKgogICAqIFRoZSBzdGFydCBpbmRleCBhbmQgbGVuZ3RoIG11c3QgZGVzY3JpYmUgYSB2YWxpZCA2NC1iaXQgYWxpZ25lZCByYW5nZQogICAqIG9mIHRoZSBidWZmZXI6CiAgICoKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IGJlIGRpdmlzaWJsZSBieSBlaWdodCwKICAgKiAqIGBsZW5ndGhgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLCBhbmQKICAgKiAqIGBvZmZzZXRJbkJ5dGVzICsgbGVuZ3RoICogOGAgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIFtsZW5ndGhJbkJ5dGVzXS4KICAgKi8KICBVaW50NjRMaXN0IGFzVWludDY0TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbSW50NjRMaXN0XSBfdmlld18gb2YgYSByZWdpb24gb2YgdGhpcyBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRoZSB2aWV3IGlzIGJhY2tlZCBieSB0aGUgYnl0ZXMgb2YgdGhpcyBieXRlIGJ1ZmZlci4KICAgKiBBbnkgY2hhbmdlcyBtYWRlIHRvIHRoZSBgSW50NjRMaXN0YCB3aWxsIGFsc28gY2hhbmdlIHRoZSBidWZmZXIsCiAgICogYW5kIHZpY2UgdmVyc2EuCiAgICoKICAgKiBUaGUgdmlld2VkIHJlZ2lvbiBzdGFydCBhdCBbb2Zmc2V0SW5CeXRlc10sIHdoaWNoIG11c3QgYmUgNjQtYml0IGFsaWduZWQsCiAgICogYW5kIGNvbnRhaW5zIFtsZW5ndGhdIDY0LWJpdCBpbnRlZ2Vycy4KICAgKiBJZiBbbGVuZ3RoXSBpcyBvbWl0dGVkLCB0aGUgcmFuZ2UgZXh0ZW5kcyBhcyBmYXIgdG93YXJkcyB0aGUgZW5kIG9mCiAgICogdGhlIGJ1ZmZlciBhcyBwb3NzaWJsZSAtCiAgICogaWYgW2xlbmd0aEluQnl0ZXNdIGlzIG5vdCBkaXZpc2libGUgYnkgZWlnaHQsIHRoZSBsYXN0IGJ5dGVzIGNhbid0IGJlIHBhcnQKICAgKiBvZiB0aGUgdmlldy4KICAgKgogICAqIFRoZSBzdGFydCBpbmRleCBhbmQgbGVuZ3RoIG11c3QgZGVzY3JpYmUgYSB2YWxpZCA2NC1iaXQgYWxpZ25lZCByYW5nZQogICAqIG9mIHRoZSBidWZmZXI6CiAgICoKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IGJlIGRpdmlzaWJsZSBieSBlaWdodCwKICAgKiAqIGBsZW5ndGhgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLCBhbmQKICAgKiAqIGBvZmZzZXRJbkJ5dGVzICsgbGVuZ3RoICogOGAgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIFtsZW5ndGhJbkJ5dGVzXS4KICAgKi8KICBJbnQ2NExpc3QgYXNJbnQ2NExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0ludDMyeDRMaXN0XSBfdmlld18gb2YgYSByZWdpb24gb2YgdGhpcyBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRoZSB2aWV3IGlzIGJhY2tlZCBieSB0aGUgYnl0ZXMgb2YgdGhpcyBieXRlIGJ1ZmZlci4KICAgKiBBbnkgY2hhbmdlcyBtYWRlIHRvIHRoZSBgSW50MzJ4NExpc3RgIHdpbGwgYWxzbyBjaGFuZ2UgdGhlIGJ1ZmZlciwKICAgKiBhbmQgdmljZSB2ZXJzYS4KICAgKgogICAqIFRoZSB2aWV3ZWQgcmVnaW9uIHN0YXJ0IGF0IFtvZmZzZXRJbkJ5dGVzXSwgd2hpY2ggbXVzdCBiZSAxMjgtYml0IGFsaWduZWQsCiAgICogYW5kIGNvbnRhaW5zIFtsZW5ndGhdIDEyOC1iaXQgaW50ZWdlcnMuCiAgICogSWYgW2xlbmd0aF0gaXMgb21pdHRlZCwgdGhlIHJhbmdlIGV4dGVuZHMgYXMgZmFyIHRvd2FyZHMgdGhlIGVuZCBvZgogICAqIHRoZSBidWZmZXIgYXMgcG9zc2libGUgLQogICAqIGlmIFtsZW5ndGhJbkJ5dGVzXSBpcyBub3QgZGl2aXNpYmxlIGJ5IDE2LCB0aGUgbGFzdCBieXRlcyBjYW4ndCBiZSBwYXJ0CiAgICogb2YgdGhlIHZpZXcuCiAgICoKICAgKiBUaGUgc3RhcnQgaW5kZXggYW5kIGxlbmd0aCBtdXN0IGRlc2NyaWJlIGEgdmFsaWQgMTI4LWJpdCBhbGlnbmVkIHJhbmdlCiAgICogb2YgdGhlIGJ1ZmZlcjoKICAgKgogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLAogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3QgYmUgZGl2aXNpYmxlIGJ5IHNpeHRlZW4sCiAgICogKiBgbGVuZ3RoYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwgYW5kCiAgICogKiBgb2Zmc2V0SW5CeXRlcyArIGxlbmd0aCAqIDE2YCBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gW2xlbmd0aEluQnl0ZXNdLgogICAqLwogIEludDMyeDRMaXN0IGFzSW50MzJ4NExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0Zsb2F0MzJMaXN0XSBfdmlld18gb2YgYSByZWdpb24gb2YgdGhpcyBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRoZSB2aWV3IGlzIGJhY2tlZCBieSB0aGUgYnl0ZXMgb2YgdGhpcyBieXRlIGJ1ZmZlci4KICAgKiBBbnkgY2hhbmdlcyBtYWRlIHRvIHRoZSBgRmxvYXQzMkxpc3RgIHdpbGwgYWxzbyBjaGFuZ2UgdGhlIGJ1ZmZlciwKICAgKiBhbmQgdmljZSB2ZXJzYS4KICAgKgogICAqIFRoZSB2aWV3ZWQgcmVnaW9uIHN0YXJ0IGF0IFtvZmZzZXRJbkJ5dGVzXSwgd2hpY2ggbXVzdCBiZSAzMi1iaXQgYWxpZ25lZCwKICAgKiBhbmQgY29udGFpbnMgW2xlbmd0aF0gMzItYml0IGludGVnZXJzLgogICAqIElmIFtsZW5ndGhdIGlzIG9taXR0ZWQsIHRoZSByYW5nZSBleHRlbmRzIGFzIGZhciB0b3dhcmRzIHRoZSBlbmQgb2YKICAgKiB0aGUgYnVmZmVyIGFzIHBvc3NpYmxlIC0KICAgKiBpZiBbbGVuZ3RoSW5CeXRlc10gaXMgbm90IGRpdmlzaWJsZSBieSBmb3VyLCB0aGUgbGFzdCBieXRlcyBjYW4ndCBiZSBwYXJ0CiAgICogb2YgdGhlIHZpZXcuCiAgICoKICAgKiBUaGUgc3RhcnQgaW5kZXggYW5kIGxlbmd0aCBtdXN0IGRlc2NyaWJlIGEgdmFsaWQgMzItYml0IGFsaWduZWQgcmFuZ2UKICAgKiBvZiB0aGUgYnVmZmVyOgogICAqCiAgICogKiBgb2Zmc2V0SW5CeXRlc2AgbXVzdCBub3QgYmUgbmVnYXRpdmUsCiAgICogKiBgb2Zmc2V0SW5CeXRlc2AgbXVzdCBiZSBkaXZpc2libGUgYnkgZm91ciwKICAgKiAqIGBsZW5ndGhgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLCBhbmQKICAgKiAqIGBvZmZzZXRJbkJ5dGVzICsgbGVuZ3RoICogNGAgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIFtsZW5ndGhJbkJ5dGVzXS4KICAgKi8KICBGbG9hdDMyTGlzdCBhc0Zsb2F0MzJMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtGbG9hdDY0TGlzdF0gX3ZpZXdfIG9mIGEgcmVnaW9uIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaGUgdmlldyBpcyBiYWNrZWQgYnkgdGhlIGJ5dGVzIG9mIHRoaXMgYnl0ZSBidWZmZXIuCiAgICogQW55IGNoYW5nZXMgbWFkZSB0byB0aGUgYEZsb2F0NjRMaXN0YCB3aWxsIGFsc28gY2hhbmdlIHRoZSBidWZmZXIsCiAgICogYW5kIHZpY2UgdmVyc2EuCiAgICoKICAgKiBUaGUgdmlld2VkIHJlZ2lvbiBzdGFydCBhdCBbb2Zmc2V0SW5CeXRlc10sIHdoaWNoIG11c3QgYmUgNjQtYml0IGFsaWduZWQsCiAgICogYW5kIGNvbnRhaW5zIFtsZW5ndGhdIDY0LWJpdCBpbnRlZ2Vycy4KICAgKiBJZiBbbGVuZ3RoXSBpcyBvbWl0dGVkLCB0aGUgcmFuZ2UgZXh0ZW5kcyBhcyBmYXIgdG93YXJkcyB0aGUgZW5kIG9mCiAgICogdGhlIGJ1ZmZlciBhcyBwb3NzaWJsZSAtCiAgICogaWYgW2xlbmd0aEluQnl0ZXNdIGlzIG5vdCBkaXZpc2libGUgYnkgZWlnaHQsIHRoZSBsYXN0IGJ5dGVzIGNhbid0IGJlIHBhcnQKICAgKiBvZiB0aGUgdmlldy4KICAgKgogICAqIFRoZSBzdGFydCBpbmRleCBhbmQgbGVuZ3RoIG11c3QgZGVzY3JpYmUgYSB2YWxpZCA2NC1iaXQgYWxpZ25lZCByYW5nZQogICAqIG9mIHRoZSBidWZmZXI6CiAgICoKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IGJlIGRpdmlzaWJsZSBieSBlaWdodCwKICAgKiAqIGBsZW5ndGhgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLCBhbmQKICAgKiAqIGBvZmZzZXRJbkJ5dGVzICsgbGVuZ3RoICogOGAgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIFtsZW5ndGhJbkJ5dGVzXS4KICAgKi8KICBGbG9hdDY0TGlzdCBhc0Zsb2F0NjRMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtGbG9hdDMyeDRMaXN0XSBfdmlld18gb2YgYSByZWdpb24gb2YgdGhpcyBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRoZSB2aWV3IGlzIGJhY2tlZCBieSB0aGUgYnl0ZXMgb2YgdGhpcyBieXRlIGJ1ZmZlci4KICAgKiBBbnkgY2hhbmdlcyBtYWRlIHRvIHRoZSBgRmxvYXQzMng0TGlzdGAgd2lsbCBhbHNvIGNoYW5nZSB0aGUgYnVmZmVyLAogICAqIGFuZCB2aWNlIHZlcnNhLgogICAqCiAgICogVGhlIHZpZXdlZCByZWdpb24gc3RhcnQgYXQgW29mZnNldEluQnl0ZXNdLCB3aGljaCBtdXN0IGJlIDEyOC1iaXQgYWxpZ25lZCwKICAgKiBhbmQgY29udGFpbnMgW2xlbmd0aF0gMTI4LWJpdCBpbnRlZ2Vycy4KICAgKiBJZiBbbGVuZ3RoXSBpcyBvbWl0dGVkLCB0aGUgcmFuZ2UgZXh0ZW5kcyBhcyBmYXIgdG93YXJkcyB0aGUgZW5kIG9mCiAgICogdGhlIGJ1ZmZlciBhcyBwb3NzaWJsZSAtCiAgICogaWYgW2xlbmd0aEluQnl0ZXNdIGlzIG5vdCBkaXZpc2libGUgYnkgMTYsIHRoZSBsYXN0IGJ5dGVzIGNhbid0IGJlIHBhcnQKICAgKiBvZiB0aGUgdmlldy4KICAgKgogICAqIFRoZSBzdGFydCBpbmRleCBhbmQgbGVuZ3RoIG11c3QgZGVzY3JpYmUgYSB2YWxpZCAxMjgtYml0IGFsaWduZWQgcmFuZ2UKICAgKiBvZiB0aGUgYnVmZmVyOgogICAqCiAgICogKiBgb2Zmc2V0SW5CeXRlc2AgbXVzdCBub3QgYmUgbmVnYXRpdmUsCiAgICogKiBgb2Zmc2V0SW5CeXRlc2AgbXVzdCBiZSBkaXZpc2libGUgYnkgc2l4dGVlbiwKICAgKiAqIGBsZW5ndGhgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLCBhbmQKICAgKiAqIGBvZmZzZXRJbkJ5dGVzICsgbGVuZ3RoICogMTZgIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBbbGVuZ3RoSW5CeXRlc10uCiAgICovCiAgRmxvYXQzMng0TGlzdCBhc0Zsb2F0MzJ4NExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0Zsb2F0NjR4Mkxpc3RdIF92aWV3XyBvZiBhIHJlZ2lvbiBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqCiAgICogVGhlIHZpZXcgaXMgYmFja2VkIGJ5IHRoZSBieXRlcyBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqIEFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGBGbG9hdDY0eDJMaXN0YCB3aWxsIGFsc28gY2hhbmdlIHRoZSBidWZmZXIsCiAgICogYW5kIHZpY2UgdmVyc2EuCiAgICoKICAgKiBUaGUgdmlld2VkIHJlZ2lvbiBzdGFydCBhdCBbb2Zmc2V0SW5CeXRlc10sIHdoaWNoIG11c3QgYmUgMTI4LWJpdCBhbGlnbmVkLAogICAqIGFuZCBjb250YWlucyBbbGVuZ3RoXSAxMjgtYml0IGludGVnZXJzLgogICAqIElmIFtsZW5ndGhdIGlzIG9taXR0ZWQsIHRoZSByYW5nZSBleHRlbmRzIGFzIGZhciB0b3dhcmRzIHRoZSBlbmQgb2YKICAgKiB0aGUgYnVmZmVyIGFzIHBvc3NpYmxlIC0KICAgKiBpZiBbbGVuZ3RoSW5CeXRlc10gaXMgbm90IGRpdmlzaWJsZSBieSAxNiwgdGhlIGxhc3QgYnl0ZXMgY2FuJ3QgYmUgcGFydAogICAqIG9mIHRoZSB2aWV3LgogICAqCiAgICogVGhlIHN0YXJ0IGluZGV4IGFuZCBsZW5ndGggbXVzdCBkZXNjcmliZSBhIHZhbGlkIDEyOC1iaXQgYWxpZ25lZCByYW5nZQogICAqIG9mIHRoZSBidWZmZXI6CiAgICoKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSwKICAgKiAqIGBvZmZzZXRJbkJ5dGVzYCBtdXN0IGJlIGRpdmlzaWJsZSBieSBzaXh0ZWVuLAogICAqICogYGxlbmd0aGAgbXVzdCBub3QgYmUgbmVnYXRpdmUsIGFuZAogICAqICogYG9mZnNldEluQnl0ZXMgKyBsZW5ndGggKiAxNmAgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIFtsZW5ndGhJbkJ5dGVzXS4KICAgKi8KICBGbG9hdDY0eDJMaXN0IGFzRmxvYXQ2NHgyTGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbQnl0ZURhdGFdIF92aWV3XyBvZiBhIHJlZ2lvbiBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqCiAgICogVGhlIHZpZXcgaXMgYmFja2VkIGJ5IHRoZSBieXRlcyBvZiB0aGlzIGJ5dGUgYnVmZmVyLgogICAqIEFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGBCeXRlRGF0YWAgd2lsbCBhbHNvIGNoYW5nZSB0aGUgYnVmZmVyLAogICAqIGFuZCB2aWNlIHZlcnNhLgogICAqCiAgICogVGhlIHZpZXdlZCByZWdpb24gc3RhcnQgYXQgW29mZnNldEluQnl0ZXNdIGFuZCBjb250YWlucyBbbGVuZ3RoXSBieXRlcy4KICAgKiBJZiBbbGVuZ3RoXSBpcyBvbWl0dGVkLCB0aGUgcmFuZ2UgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCiAgICoKICAgKiBUaGUgc3RhcnQgaW5kZXggYW5kIGxlbmd0aCBtdXN0IGRlc2NyaWJlIGEgdmFsaWQgcmFuZ2Ugb2YgdGhlIGJ1ZmZlcjoKICAgKgogICAqICogYG9mZnNldEluQnl0ZXNgIG11c3Qgbm90IGJlIG5lZ2F0aXZlLAogICAqICogYGxlbmd0aGAgbXVzdCBub3QgYmUgbmVnYXRpdmUsIGFuZAogICAqICogYG9mZnNldEluQnl0ZXMgKyBsZW5ndGhgIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBbbGVuZ3RoSW5CeXRlc10uCiAgICovCiAgQnl0ZURhdGEgYXNCeXRlRGF0YShbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSk7Cn0KCi8qKgogKiBBIHR5cGVkIHZpZXcgb2YgYSBzZXF1ZW5jZSBvZiBieXRlcy4KICovCmFic3RyYWN0IGNsYXNzIFR5cGVkRGF0YSB7CiAgLyoqCiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSByZXByZXNlbnRhdGlvbiBvZiBlYWNoIGVsZW1lbnQgaW4gdGhpcwogICAqIGxpc3QuCiAgICovCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXM7CgogIC8qKgogICAqIFJldHVybnMgdGhlIG9mZnNldCBpbiBieXRlcyBpbnRvIHRoZSB1bmRlcmx5aW5nIGJ5dGUgYnVmZmVyIG9mIHRoaXMgdmlldy4KICAgKi8KICBpbnQgZ2V0IG9mZnNldEluQnl0ZXM7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGlzIHZpZXcsIGluIGJ5dGVzLgogICAqLwogIGludCBnZXQgbGVuZ3RoSW5CeXRlczsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgYnl0ZSBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb2JqZWN0LgogICAqLwogIEJ5dGVCdWZmZXIgZ2V0IGJ1ZmZlcjsKfQoKYWJzdHJhY3QgY2xhc3MgX1R5cGVkSW50TGlzdCBleHRlbmRzIFR5cGVkRGF0YSB7CiAgLyoqCiAgICogUmV0dXJucyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGlzIGxpc3QgYW5kIFtvdGhlcl0uCiAgICoKICAgKiBJZiBvdGhlciBpcyBhbHNvIGEgdHlwZWQtZGF0YSBpbnRlZ2VyIGxpc3QsIHRoZSByZXR1cm5lZCBsaXN0IHdpbGwKICAgKiBiZSBhIHR5cGUtZGF0YSBpbnRlZ2VyIGxpc3QgY2FwYWJsZSBvZiBjb250YWluaW5nIGFsbCB0aGUgZWxlbWVudHMgb2YKICAgKiB0aGlzIGxpc3QgYW5kIG9mIFtvdGhlcl0uCiAgICogT3RoZXJ3aXNlIHRoZSByZXR1cm5lZCBsaXN0IHdpbGwgYmUgYSBub3JtYWwgZ3Jvd2FibGUgYExpc3Q8aW50PmAuCiAgICovCiAgTGlzdDxpbnQ+IG9wZXJhdG9yICsoTGlzdDxpbnQ+IG90aGVyKTsKfQoKYWJzdHJhY3QgY2xhc3MgX1R5cGVkRmxvYXRMaXN0IGV4dGVuZHMgVHlwZWREYXRhIHsKICAvKioKICAgKiBSZXR1cm5zIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoaXMgbGlzdCBhbmQgW290aGVyXS4KICAgKgogICAqIElmIG90aGVyIGlzIGFsc28gYSB0eXBlZC1kYXRhIGZsb2F0aW5nIHBvaW50IG51bWJlciBsaXN0LAogICAqIHRoZSByZXR1cm5lZCBsaXN0IHdpbGwgYmUgYSB0eXBlLWRhdGEgZmxvYXQgbGlzdCBjYXBhYmxlIG9mIGNvbnRhaW5pbmcKICAgKiBhbGwgdGhlIGVsZW1lbnRzIG9mIHRoaXMgbGlzdCBhbmQgb2YgW290aGVyXS4KICAgKiBPdGhlcndpc2UgdGhlIHJldHVybmVkIGxpc3Qgd2lsbCBiZSBhIG5vcm1hbCBncm93YWJsZSBgTGlzdDxkb3VibGU+YC4KICAgKi8KICBMaXN0PGRvdWJsZT4gb3BlcmF0b3IgKyhMaXN0PGRvdWJsZT4gb3RoZXIpOwp9CgovKioKICogRGVzY3JpYmVzIGVuZGlhbm5lc3MgdG8gYmUgdXNlZCB3aGVuIGFjY2Vzc2luZyBvciB1cGRhdGluZyBhCiAqIHNlcXVlbmNlIG9mIGJ5dGVzLgogKi8KY2xhc3MgRW5kaWFuIHsKICBmaW5hbCBib29sIF9saXR0bGVFbmRpYW47CiAgY29uc3QgRW5kaWFuLl8odGhpcy5fbGl0dGxlRW5kaWFuKTsKCiAgc3RhdGljIGNvbnN0IEVuZGlhbiBiaWcgPSBjb25zdCBFbmRpYW4uXyhmYWxzZSk7CiAgc3RhdGljIGNvbnN0IEVuZGlhbiBsaXR0bGUgPSBjb25zdCBFbmRpYW4uXyh0cnVlKTsKICBzdGF0aWMgZmluYWwgRW5kaWFuIGhvc3QgPQogICAgICAobmV3IEJ5dGVEYXRhLnZpZXcobmV3IFVpbnQxNkxpc3QuZnJvbUxpc3QoWzFdKS5idWZmZXIpKS5nZXRJbnQ4KDApID09IDEKICAgICAgICAgID8gbGl0dGxlCiAgICAgICAgICA6IGJpZzsKfQoKLyoqCiAqIEEgZml4ZWQtbGVuZ3RoLCByYW5kb20tYWNjZXNzIHNlcXVlbmNlIG9mIGJ5dGVzIHRoYXQgYWxzbyBwcm92aWRlcyByYW5kb20KICogYW5kIHVuYWxpZ25lZCBhY2Nlc3MgdG8gdGhlIGZpeGVkLXdpZHRoIGludGVnZXJzIGFuZCBmbG9hdGluZyBwb2ludAogKiBudW1iZXJzIHJlcHJlc2VudGVkIGJ5IHRob3NlIGJ5dGVzLgogKgogKiBgQnl0ZURhdGFgIG1heSBiZSB1c2VkIHRvIHBhY2sgYW5kIHVucGFjayBkYXRhIGZyb20gZXh0ZXJuYWwgc291cmNlcwogKiAoc3VjaCBhcyBuZXR3b3JrcyBvciBmaWxlcyBzeXN0ZW1zKSwgYW5kIHRvIHByb2Nlc3MgbGFyZ2UgcXVhbnRpdGllcwogKiBvZiBudW1lcmljYWwgZGF0YSBtb3JlIGVmZmljaWVudGx5IHRoYW4gd291bGQgYmUgcG9zc2libGUKICogd2l0aCBvcmRpbmFyeSBbTGlzdF0gaW1wbGVtZW50YXRpb25zLgogKiBgQnl0ZURhdGFgIGNhbiBzYXZlIHNwYWNlLCBieSBlbGltaW5hdGluZyB0aGUgbmVlZCBmb3Igb2JqZWN0IGhlYWRlcnMsCiAqIGFuZCB0aW1lLCBieSBlbGltaW5hdGluZyB0aGUgbmVlZCBmb3IgZGF0YSBjb3BpZXMuCiAqIEZpbmFsbHksIGBCeXRlRGF0YWAgbWF5IGJlIHVzZWQgdG8gaW50ZW50aW9uYWxseSByZWludGVycHJldCB0aGUgYnl0ZXMKICogcmVwcmVzZW50aW5nIG9uZSBhcml0aG1ldGljIHR5cGUgYXMgYW5vdGhlci4KICogRm9yIGV4YW1wbGUgdGhpcyBjb2RlIGZyYWdtZW50IGRldGVybWluZSB3aGF0IDMyLWJpdCBzaWduZWQgaW50ZWdlcgogKiBpcyByZXByZXNlbnRlZCBieSB0aGUgYnl0ZXMgb2YgYSAzMi1iaXQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyOgogKgogKiAgICAgdmFyIGJ1ZmZlciA9IG5ldyBVaW50OExpc3QoOCkuYnVmZmVyOwogKiAgICAgdmFyIGJkYXRhID0gbmV3IEJ5dGVEYXRhLnZpZXcoYnVmZmVyKTsKICogICAgIGJkYXRhLnNldEZsb2F0MzIoMCwgMy4wNCk7CiAqICAgICBpbnQgaHVoID0gYmRhdGEuZ2V0SW50MzIoMCk7CiAqLwphYnN0cmFjdCBjbGFzcyBCeXRlRGF0YSBpbXBsZW1lbnRzIFR5cGVkRGF0YSB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIFtCeXRlRGF0YV0gb2YgdGhlIHNwZWNpZmllZCBsZW5ndGggKGluIGVsZW1lbnRzKSwgYWxsIG9mCiAgICogd2hvc2UgYnl0ZXMgYXJlIGluaXRpYWxseSB6ZXJvLgogICAqLwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBleHRlcm5hbCBmYWN0b3J5IEJ5dGVEYXRhKGludCBsZW5ndGgpOwoKICAvKioKICAgKiBDcmVhdGVzIGFuIFtCeXRlRGF0YV0gX3ZpZXdfIG9mIHRoZSBzcGVjaWZpZWQgcmVnaW9uIGluIFtidWZmZXJdLgogICAqCiAgICogQ2hhbmdlcyBpbiB0aGUgW0J5dGVEYXRhXSB3aWxsIGJlIHZpc2libGUgaW4gdGhlIGJ5dGUKICAgKiBidWZmZXIgYW5kIHZpY2UgdmVyc2EuCiAgICogSWYgdGhlIFtvZmZzZXRJbkJ5dGVzXSBpbmRleCBvZiB0aGUgcmVnaW9uIGlzIG5vdCBzcGVjaWZpZWQsCiAgICogaXQgZGVmYXVsdHMgdG8gemVybyAodGhlIGZpcnN0IGJ5dGUgaW4gdGhlIGJ5dGUgYnVmZmVyKS4KICAgKiBJZiB0aGUgbGVuZ3RoIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvIGBudWxsYCwKICAgKiB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgdmlldyBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhlIGJ5dGUgYnVmZmVyLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbb2Zmc2V0SW5CeXRlc10gb3IgW2xlbmd0aF0gYXJlIG5lZ2F0aXZlLCBvcgogICAqIGlmIFtvZmZzZXRJbkJ5dGVzXSArIChbbGVuZ3RoXSAqIGVsZW1lbnRTaXplSW5CeXRlcykgaXMgZ3JlYXRlciB0aGFuCiAgICogdGhlIGxlbmd0aCBvZiBbYnVmZmVyXS4KICAgKi8KICBmYWN0b3J5IEJ5dGVEYXRhLnZpZXcoQnl0ZUJ1ZmZlciBidWZmZXIsCiAgICAgIFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICByZXR1cm4gYnVmZmVyLmFzQnl0ZURhdGEob2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIChwb3NzaWJseSBuZWdhdGl2ZSkgaW50ZWdlciByZXByZXNlbnRlZCBieSB0aGUgYnl0ZSBhdCB0aGUKICAgKiBzcGVjaWZpZWQgW2J5dGVPZmZzZXRdIGluIHRoaXMgb2JqZWN0LCBpbiB0d28ncyBjb21wbGVtZW50IGJpbmFyeQogICAqIHJlcHJlc2VudGF0aW9uLgogICAqCiAgICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGJldHdlZW4gLTEyOCBhbmQgMTI3LCBpbmNsdXNpdmUuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtieXRlT2Zmc2V0XSBpcyBuZWdhdGl2ZSwgb3IKICAgKiBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGxlbmd0aCBvZiB0aGlzIG9iamVjdC4KICAgKi8KICBpbnQgZ2V0SW50OChpbnQgYnl0ZU9mZnNldCk7CgogIC8qKgogICAqIFNldHMgdGhlIGJ5dGUgYXQgdGhlIHNwZWNpZmllZCBbYnl0ZU9mZnNldF0gaW4gdGhpcyBvYmplY3QgdG8gdGhlCiAgICogdHdvJ3MgY29tcGxlbWVudCBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNwZWNpZmllZCBbdmFsdWVdLCB3aGljaAogICAqIG11c3QgZml0IGluIGEgc2luZ2xlIGJ5dGUuCiAgICoKICAgKiBJbiBvdGhlciB3b3JkcywgW3ZhbHVlXSBtdXN0IGJlIGJldHdlZW4gLTEyOCBhbmQgMTI3LCBpbmNsdXNpdmUuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtieXRlT2Zmc2V0XSBpcyBuZWdhdGl2ZSwgb3IKICAgKiBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGxlbmd0aCBvZiB0aGlzIG9iamVjdC4KICAgKi8KICB2b2lkIHNldEludDgoaW50IGJ5dGVPZmZzZXQsIGludCB2YWx1ZSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHBvc2l0aXZlIGludGVnZXIgcmVwcmVzZW50ZWQgYnkgdGhlIGJ5dGUgYXQgdGhlIHNwZWNpZmllZAogICAqIFtieXRlT2Zmc2V0XSBpbiB0aGlzIG9iamVjdCwgaW4gdW5zaWduZWQgYmluYXJ5IGZvcm0uCiAgICoKICAgKiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgYmV0d2VlbiAwIGFuZCAyNTUsIGluY2x1c2l2ZS4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW2J5dGVPZmZzZXRdIGlzIG5lZ2F0aXZlLCBvcgogICAqIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgbGVuZ3RoIG9mIHRoaXMgb2JqZWN0LgogICAqLwogIGludCBnZXRVaW50OChpbnQgYnl0ZU9mZnNldCk7CgogIC8qKgogICAqIFNldHMgdGhlIGJ5dGUgYXQgdGhlIHNwZWNpZmllZCBbYnl0ZU9mZnNldF0gaW4gdGhpcyBvYmplY3QgdG8gdGhlCiAgICogdW5zaWduZWQgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzcGVjaWZpZWQgW3ZhbHVlXSwgd2hpY2ggbXVzdCBmaXQKICAgKiBpbiBhIHNpbmdsZSBieXRlLgogICAqCiAgICogSW4gb3RoZXIgd29yZHMsIFt2YWx1ZV0gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDI1NSwgaW5jbHVzaXZlLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbYnl0ZU9mZnNldF0gaXMgbmVnYXRpdmUsCiAgICogb3IgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBsZW5ndGggb2YgdGhpcyBvYmplY3QuCiAgICovCiAgdm9pZCBzZXRVaW50OChpbnQgYnl0ZU9mZnNldCwgaW50IHZhbHVlKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgKHBvc3NpYmx5IG5lZ2F0aXZlKSBpbnRlZ2VyIHJlcHJlc2VudGVkIGJ5IHRoZSB0d28gYnl0ZXMgYXQKICAgKiB0aGUgc3BlY2lmaWVkIFtieXRlT2Zmc2V0XSBpbiB0aGlzIG9iamVjdCwgaW4gdHdvJ3MgY29tcGxlbWVudCBiaW5hcnkKICAgKiBmb3JtLgogICAqCiAgICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGJldHdlZW4gLTI8c3VwPjE1PC9zdXA+IGFuZCAyPHN1cD4xNTwvc3VwPiAtIDEsCiAgICogaW5jbHVzaXZlLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbYnl0ZU9mZnNldF0gaXMgbmVnYXRpdmUsIG9yCiAgICogYGJ5dGVPZmZzZXQgKyAyYCBpcyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzIG9iamVjdC4KICAgKi8KICBpbnQgZ2V0SW50MTYoaW50IGJ5dGVPZmZzZXQsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pOwoKICAvKioKICAgKiBTZXRzIHRoZSB0d28gYnl0ZXMgc3RhcnRpbmcgYXQgdGhlIHNwZWNpZmllZCBbYnl0ZU9mZnNldF0gaW4gdGhpcwogICAqIG9iamVjdCB0byB0aGUgdHdvJ3MgY29tcGxlbWVudCBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNwZWNpZmllZAogICAqIFt2YWx1ZV0sIHdoaWNoIG11c3QgZml0IGluIHR3byBieXRlcy4KICAgKgogICAqIEluIG90aGVyIHdvcmRzLCBbdmFsdWVdIG11c3QgbGllCiAgICogYmV0d2VlbiAtMjxzdXA+MTU8L3N1cD4gYW5kIDI8c3VwPjE1PC9zdXA+IC0gMSwgaW5jbHVzaXZlLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbYnl0ZU9mZnNldF0gaXMgbmVnYXRpdmUsIG9yCiAgICogYGJ5dGVPZmZzZXQgKyAyYCBpcyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzIG9iamVjdC4KICAgKi8KICB2b2lkIHNldEludDE2KGludCBieXRlT2Zmc2V0LCBpbnQgdmFsdWUsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBwb3NpdGl2ZSBpbnRlZ2VyIHJlcHJlc2VudGVkIGJ5IHRoZSB0d28gYnl0ZXMgc3RhcnRpbmcKICAgKiBhdCB0aGUgc3BlY2lmaWVkIFtieXRlT2Zmc2V0XSBpbiB0aGlzIG9iamVjdCwgaW4gdW5zaWduZWQgYmluYXJ5CiAgICogZm9ybS4KICAgKgogICAqIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBiZXR3ZWVuIDAgYW5kICAyPHN1cD4xNjwvc3VwPiAtIDEsIGluY2x1c2l2ZS4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW2J5dGVPZmZzZXRdIGlzIG5lZ2F0aXZlLCBvcgogICAqIGBieXRlT2Zmc2V0ICsgMmAgaXMgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhpcyBvYmplY3QuCiAgICovCiAgaW50IGdldFVpbnQxNihpbnQgYnl0ZU9mZnNldCwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSk7CgogIC8qKgogICAqIFNldHMgdGhlIHR3byBieXRlcyBzdGFydGluZyBhdCB0aGUgc3BlY2lmaWVkIFtieXRlT2Zmc2V0XSBpbiB0aGlzIG9iamVjdAogICAqIHRvIHRoZSB1bnNpZ25lZCBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNwZWNpZmllZCBbdmFsdWVdLAogICAqIHdoaWNoIG11c3QgZml0IGluIHR3byBieXRlcy4KICAgKgogICAqIEluIG90aGVyIHdvcmRzLCBbdmFsdWVdIG11c3QgYmUgYmV0d2VlbgogICAqIDAgYW5kIDI8c3VwPjE2PC9zdXA+IC0gMSwgaW5jbHVzaXZlLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbYnl0ZU9mZnNldF0gaXMgbmVnYXRpdmUsIG9yCiAgICogYGJ5dGVPZmZzZXQgKyAyYCBpcyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzIG9iamVjdC4KICAgKi8KICB2b2lkIHNldFVpbnQxNihpbnQgYnl0ZU9mZnNldCwgaW50IHZhbHVlLCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgKHBvc3NpYmx5IG5lZ2F0aXZlKSBpbnRlZ2VyIHJlcHJlc2VudGVkIGJ5IHRoZSBmb3VyIGJ5dGVzIGF0CiAgICogdGhlIHNwZWNpZmllZCBbYnl0ZU9mZnNldF0gaW4gdGhpcyBvYmplY3QsIGluIHR3bydzIGNvbXBsZW1lbnQgYmluYXJ5CiAgICogZm9ybS4KICAgKgogICAqIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBiZXR3ZWVuIC0yPHN1cD4zMTwvc3VwPiBhbmQgMjxzdXA+MzE8L3N1cD4gLSAxLAogICAqIGluY2x1c2l2ZS4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW2J5dGVPZmZzZXRdIGlzIG5lZ2F0aXZlLCBvcgogICAqIGBieXRlT2Zmc2V0ICsgNGAgaXMgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhpcyBvYmplY3QuCiAgICovCiAgaW50IGdldEludDMyKGludCBieXRlT2Zmc2V0LCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKTsKCiAgLyoqCiAgICogU2V0cyB0aGUgZm91ciBieXRlcyBzdGFydGluZyBhdCB0aGUgc3BlY2lmaWVkIFtieXRlT2Zmc2V0XSBpbiB0aGlzCiAgICogb2JqZWN0IHRvIHRoZSB0d28ncyBjb21wbGVtZW50IGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3BlY2lmaWVkCiAgICogW3ZhbHVlXSwgd2hpY2ggbXVzdCBmaXQgaW4gZm91ciBieXRlcy4KICAgKgogICAqIEluIG90aGVyIHdvcmRzLCBbdmFsdWVdIG11c3QgbGllCiAgICogYmV0d2VlbiAtMjxzdXA+MzE8L3N1cD4gYW5kIDI8c3VwPjMxPC9zdXA+IC0gMSwgaW5jbHVzaXZlLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbYnl0ZU9mZnNldF0gaXMgbmVnYXRpdmUsIG9yCiAgICogYGJ5dGVPZmZzZXQgKyA0YCBpcyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzIG9iamVjdC4KICAgKi8KICB2b2lkIHNldEludDMyKGludCBieXRlT2Zmc2V0LCBpbnQgdmFsdWUsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBwb3NpdGl2ZSBpbnRlZ2VyIHJlcHJlc2VudGVkIGJ5IHRoZSBmb3VyIGJ5dGVzIHN0YXJ0aW5nCiAgICogYXQgdGhlIHNwZWNpZmllZCBbYnl0ZU9mZnNldF0gaW4gdGhpcyBvYmplY3QsIGluIHVuc2lnbmVkIGJpbmFyeQogICAqIGZvcm0uCiAgICoKICAgKiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgYmV0d2VlbiAwIGFuZCAgMjxzdXA+MzI8L3N1cD4gLSAxLCBpbmNsdXNpdmUuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtieXRlT2Zmc2V0XSBpcyBuZWdhdGl2ZSwgb3IKICAgKiBgYnl0ZU9mZnNldCArIDRgIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoaXMgb2JqZWN0LgogICAqLwogIGludCBnZXRVaW50MzIoaW50IGJ5dGVPZmZzZXQsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pOwoKICAvKioKICAgKiBTZXRzIHRoZSBmb3VyIGJ5dGVzIHN0YXJ0aW5nIGF0IHRoZSBzcGVjaWZpZWQgW2J5dGVPZmZzZXRdIGluIHRoaXMgb2JqZWN0CiAgICogdG8gdGhlIHVuc2lnbmVkIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3BlY2lmaWVkIFt2YWx1ZV0sCiAgICogd2hpY2ggbXVzdCBmaXQgaW4gZm91ciBieXRlcy4KICAgKgogICAqIEluIG90aGVyIHdvcmRzLCBbdmFsdWVdIG11c3QgYmUgYmV0d2VlbgogICAqIDAgYW5kIDI8c3VwPjMyPC9zdXA+IC0gMSwgaW5jbHVzaXZlLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbYnl0ZU9mZnNldF0gaXMgbmVnYXRpdmUsIG9yCiAgICogYGJ5dGVPZmZzZXQgKyA0YCBpcyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzIG9iamVjdC4KICAgKi8KICB2b2lkIHNldFVpbnQzMihpbnQgYnl0ZU9mZnNldCwgaW50IHZhbHVlLCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgKHBvc3NpYmx5IG5lZ2F0aXZlKSBpbnRlZ2VyIHJlcHJlc2VudGVkIGJ5IHRoZSBlaWdodCBieXRlcyBhdAogICAqIHRoZSBzcGVjaWZpZWQgW2J5dGVPZmZzZXRdIGluIHRoaXMgb2JqZWN0LCBpbiB0d28ncyBjb21wbGVtZW50IGJpbmFyeQogICAqIGZvcm0uCiAgICoKICAgKiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgYmV0d2VlbiAtMjxzdXA+NjM8L3N1cD4gYW5kIDI8c3VwPjYzPC9zdXA+IC0gMSwKICAgKiBpbmNsdXNpdmUuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtieXRlT2Zmc2V0XSBpcyBuZWdhdGl2ZSwgb3IKICAgKiBgYnl0ZU9mZnNldCArIDhgIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoaXMgb2JqZWN0LgogICAqLwogIGludCBnZXRJbnQ2NChpbnQgYnl0ZU9mZnNldCwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSk7CgogIC8qKgogICAqIFNldHMgdGhlIGVpZ2h0IGJ5dGVzIHN0YXJ0aW5nIGF0IHRoZSBzcGVjaWZpZWQgW2J5dGVPZmZzZXRdIGluIHRoaXMKICAgKiBvYmplY3QgdG8gdGhlIHR3bydzIGNvbXBsZW1lbnQgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzcGVjaWZpZWQKICAgKiBbdmFsdWVdLCB3aGljaCBtdXN0IGZpdCBpbiBlaWdodCBieXRlcy4KICAgKgogICAqIEluIG90aGVyIHdvcmRzLCBbdmFsdWVdIG11c3QgbGllCiAgICogYmV0d2VlbiAtMjxzdXA+NjM8L3N1cD4gYW5kIDI8c3VwPjYzPC9zdXA+IC0gMSwgaW5jbHVzaXZlLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbYnl0ZU9mZnNldF0gaXMgbmVnYXRpdmUsIG9yCiAgICogYGJ5dGVPZmZzZXQgKyA4YCBpcyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzIG9iamVjdC4KICAgKi8KICB2b2lkIHNldEludDY0KGludCBieXRlT2Zmc2V0LCBpbnQgdmFsdWUsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBwb3NpdGl2ZSBpbnRlZ2VyIHJlcHJlc2VudGVkIGJ5IHRoZSBlaWdodCBieXRlcyBzdGFydGluZwogICAqIGF0IHRoZSBzcGVjaWZpZWQgW2J5dGVPZmZzZXRdIGluIHRoaXMgb2JqZWN0LCBpbiB1bnNpZ25lZCBiaW5hcnkKICAgKiBmb3JtLgogICAqCiAgICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGJldHdlZW4gMCBhbmQgIDI8c3VwPjY0PC9zdXA+IC0gMSwgaW5jbHVzaXZlLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbYnl0ZU9mZnNldF0gaXMgbmVnYXRpdmUsIG9yCiAgICogYGJ5dGVPZmZzZXQgKyA4YCBpcyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzIG9iamVjdC4KICAgKi8KICBpbnQgZ2V0VWludDY0KGludCBieXRlT2Zmc2V0LCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKTsKCiAgLyoqCiAgICogU2V0cyB0aGUgZWlnaHQgYnl0ZXMgc3RhcnRpbmcgYXQgdGhlIHNwZWNpZmllZCBbYnl0ZU9mZnNldF0gaW4gdGhpcyBvYmplY3QKICAgKiB0byB0aGUgdW5zaWduZWQgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzcGVjaWZpZWQgW3ZhbHVlXSwKICAgKiB3aGljaCBtdXN0IGZpdCBpbiBlaWdodCBieXRlcy4KICAgKgogICAqIEluIG90aGVyIHdvcmRzLCBbdmFsdWVdIG11c3QgYmUgYmV0d2VlbgogICAqIDAgYW5kIDI8c3VwPjY0PC9zdXA+IC0gMSwgaW5jbHVzaXZlLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbYnl0ZU9mZnNldF0gaXMgbmVnYXRpdmUsIG9yCiAgICogYGJ5dGVPZmZzZXQgKyA4YCBpcyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzIG9iamVjdC4KICAgKi8KICB2b2lkIHNldFVpbnQ2NChpbnQgYnl0ZU9mZnNldCwgaW50IHZhbHVlLCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHJlcHJlc2VudGVkIGJ5IHRoZSBmb3VyIGJ5dGVzIGF0CiAgICogdGhlIHNwZWNpZmllZCBbYnl0ZU9mZnNldF0gaW4gdGhpcyBvYmplY3QsIGluIElFRUUgNzU0CiAgICogc2luZ2xlLXByZWNpc2lvbiBiaW5hcnkgZmxvYXRpbmctcG9pbnQgZm9ybWF0IChiaW5hcnkzMikuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtieXRlT2Zmc2V0XSBpcyBuZWdhdGl2ZSwgb3IKICAgKiBgYnl0ZU9mZnNldCArIDRgIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoaXMgb2JqZWN0LgogICAqLwogIGRvdWJsZSBnZXRGbG9hdDMyKGludCBieXRlT2Zmc2V0LCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKTsKCiAgLyoqCiAgICogU2V0cyB0aGUgZm91ciBieXRlcyBzdGFydGluZyBhdCB0aGUgc3BlY2lmaWVkIFtieXRlT2Zmc2V0XSBpbiB0aGlzCiAgICogb2JqZWN0IHRvIHRoZSBJRUVFIDc1NCBzaW5nbGUtcHJlY2lzaW9uIGJpbmFyeSBmbG9hdGluZy1wb2ludAogICAqIChiaW5hcnkzMikgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNwZWNpZmllZCBbdmFsdWVdLgogICAqCiAgICogKipOb3RlIHRoYXQgdGhpcyBtZXRob2QgY2FuIGxvc2UgcHJlY2lzaW9uLioqIFRoZSBpbnB1dCBbdmFsdWVdIGlzCiAgICogYSA2NC1iaXQgZmxvYXRpbmcgcG9pbnQgdmFsdWUsIHdoaWNoIHdpbGwgYmUgY29udmVydGVkIHRvIDMyLWJpdAogICAqIGZsb2F0aW5nIHBvaW50IHZhbHVlIGJ5IElFRUUgNzU0IHJvdW5kaW5nIHJ1bGVzIGJlZm9yZSBpdCBpcyBzdG9yZWQuCiAgICogSWYgW3ZhbHVlXSBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgZXhhY3RseSBhcyBhIGJpbmFyeTMyLCBpdCB3aWxsIGJlCiAgICogY29udmVydGVkIHRvIHRoZSBuZWFyZXN0IGJpbmFyeTMyIHZhbHVlLiAgSWYgdHdvIGJpbmFyeTMyIHZhbHVlcyBhcmUKICAgKiBlcXVhbGx5IGNsb3NlLCB0aGUgb25lIHdob3NlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBpcyB6ZXJvIHdpbGwgYmUgdXNlZC4KICAgKiBOb3RlIHRoYXQgZmluaXRlIChidXQgbGFyZ2UpIHZhbHVlcyBjYW4gYmUgY29udmVydGVkIHRvIGluZmluaXR5LCBhbmQKICAgKiBzbWFsbCBub24temVybyB2YWx1ZXMgY2FuIGJlIGNvbnZlcnRlZCB0byB6ZXJvLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbYnl0ZU9mZnNldF0gaXMgbmVnYXRpdmUsIG9yCiAgICogYGJ5dGVPZmZzZXQgKyA0YCBpcyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzIG9iamVjdC4KICAgKi8KICB2b2lkIHNldEZsb2F0MzIoaW50IGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGZsb2F0aW5nIHBvaW50IG51bWJlciByZXByZXNlbnRlZCBieSB0aGUgZWlnaHQgYnl0ZXMgYXQKICAgKiB0aGUgc3BlY2lmaWVkIFtieXRlT2Zmc2V0XSBpbiB0aGlzIG9iamVjdCwgaW4gSUVFRSA3NTQKICAgKiBkb3VibGUtcHJlY2lzaW9uIGJpbmFyeSBmbG9hdGluZy1wb2ludCBmb3JtYXQgKGJpbmFyeTY0KS4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW2J5dGVPZmZzZXRdIGlzIG5lZ2F0aXZlLCBvcgogICAqIGBieXRlT2Zmc2V0ICsgOGAgaXMgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhpcyBvYmplY3QuCiAgICovCiAgZG91YmxlIGdldEZsb2F0NjQoaW50IGJ5dGVPZmZzZXQsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pOwoKICAvKioKICAgKiBTZXRzIHRoZSBlaWdodCBieXRlcyBzdGFydGluZyBhdCB0aGUgc3BlY2lmaWVkIFtieXRlT2Zmc2V0XSBpbiB0aGlzCiAgICogb2JqZWN0IHRvIHRoZSBJRUVFIDc1NCBkb3VibGUtcHJlY2lzaW9uIGJpbmFyeSBmbG9hdGluZy1wb2ludAogICAqIChiaW5hcnk2NCkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNwZWNpZmllZCBbdmFsdWVdLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbYnl0ZU9mZnNldF0gaXMgbmVnYXRpdmUsIG9yCiAgICogYGJ5dGVPZmZzZXQgKyA4YCBpcyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGlzIG9iamVjdC4KICAgKi8KICB2b2lkIHNldEZsb2F0NjQoaW50IGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSk7Cn0KCi8qKgogKiBBIGZpeGVkLWxlbmd0aCBsaXN0IG9mIDgtYml0IHNpZ25lZCBpbnRlZ2Vycy4KICoKICogRm9yIGxvbmcgbGlzdHMsIHRoaXMgaW1wbGVtZW50YXRpb24gY2FuIGJlIGNvbnNpZGVyYWJseQogKiBtb3JlIHNwYWNlLSBhbmQgdGltZS1lZmZpY2llbnQgdGhhbiB0aGUgZGVmYXVsdCBbTGlzdF0gaW1wbGVtZW50YXRpb24uCiAqCiAqIEludGVnZXJzIHN0b3JlZCBpbiB0aGUgbGlzdCBhcmUgdHJ1bmNhdGVkIHRvIHRoZWlyIGxvdyBlaWdodCBiaXRzLAogKiBpbnRlcnByZXRlZCBhcyBhIHNpZ25lZCA4LWJpdCB0d28ncyBjb21wbGVtZW50IGludGVnZXIgd2l0aCB2YWx1ZXMgaW4gdGhlCiAqIHJhbmdlIC0xMjggdG8gKzEyNy4KICovCmFic3RyYWN0IGNsYXNzIEludDhMaXN0IGltcGxlbWVudHMgTGlzdDxpbnQ+LCBfVHlwZWRJbnRMaXN0IHsKICAvKioKICAgKiBDcmVhdGVzIGFuIFtJbnQ4TGlzdF0gb2YgdGhlIHNwZWNpZmllZCBsZW5ndGggKGluIGVsZW1lbnRzKSwgYWxsIG9mCiAgICogd2hvc2UgZWxlbWVudHMgYXJlIGluaXRpYWxseSB6ZXJvLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgSW50OExpc3QoaW50IGxlbmd0aCk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbSW50OExpc3RdIHdpdGggdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBbZWxlbWVudHNdIGxpc3QKICAgKiBhbmQgY29waWVzIG92ZXIgdGhlIGVsZW1lbnRzLgogICAqCiAgICogVmFsdWVzIGFyZSB0cnVuY2F0ZWQgdG8gZml0IGluIHRoZSBsaXN0IHdoZW4gdGhleSBhcmUgY29waWVkLAogICAqIHRoZSBzYW1lIHdheSBzdG9yaW5nIHZhbHVlcyB0cnVuY2F0ZXMgdGhlbS4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IEludDhMaXN0LmZyb21MaXN0KExpc3Q8aW50PiBlbGVtZW50cyk7CgogIC8qKgogICAqIENyZWF0ZXMgYW4gW0ludDhMaXN0XSBfdmlld18gb2YgdGhlIHNwZWNpZmllZCByZWdpb24gaW4gW2J1ZmZlcl0uCiAgICoKICAgKiBDaGFuZ2VzIGluIHRoZSBbSW50OExpc3RdIHdpbGwgYmUgdmlzaWJsZSBpbiB0aGUgYnl0ZQogICAqIGJ1ZmZlciBhbmQgdmljZSB2ZXJzYS4KICAgKiBJZiB0aGUgW29mZnNldEluQnl0ZXNdIGluZGV4IG9mIHRoZSByZWdpb24gaXMgbm90IHNwZWNpZmllZCwKICAgKiBpdCBkZWZhdWx0cyB0byB6ZXJvICh0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgYnl0ZSBidWZmZXIpLgogICAqIElmIHRoZSBsZW5ndGggaXMgbm90IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gYG51bGxgLAogICAqIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSB2aWV3IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBvciBbbGVuZ3RoXSBhcmUgbmVnYXRpdmUsIG9yCiAgICogaWYgW29mZnNldEluQnl0ZXNdICsgKFtsZW5ndGhdICogZWxlbWVudFNpemVJbkJ5dGVzKSBpcyBncmVhdGVyIHRoYW4KICAgKiB0aGUgbGVuZ3RoIG9mIFtidWZmZXJdLgogICAqLwogIGZhY3RvcnkgSW50OExpc3QudmlldyhCeXRlQnVmZmVyIGJ1ZmZlciwKICAgICAgW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIHJldHVybiBidWZmZXIuYXNJbnQ4TGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIGJldHdlZW4gW3N0YXJ0XSBhbmQgW2VuZF0uCiAgICoKICAgKiBUaGUgbmV3IGxpc3QgaXMgYW4gYEludDhMaXN0YCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBvZiB0aGlzIGxpc3QgYXQKICAgKiBwb3NpdGlvbnMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIFtzdGFydF0gYW5kIGxlc3MgdGhhbiBbZW5kXSBpbiB0aGUgc2FtZQogICAqIG9yZGVyIGFzIHRoZXkgb2NjdXIgaW4gdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHZhciBudW1iZXJzID0gSW50OExpc3QuZnJvbUxpc3QoWzAsIDEsIDIsIDMsIDRdKTsKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykpOyAvLyBbMSwgMl0KICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykucnVudGltZVR5cGUpOyAvLyBJbnQ4TGlzdAogICAqIGBgYAogICAqCiAgICogSWYgW2VuZF0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGhlIFtsZW5ndGhdIG9mIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSkpOyAvLyBbMSwgMiwgMywgNF0KICAgKiBgYGAKICAgKgogICAqIFRoZSBgc3RhcnRgIGFuZCBgZW5kYCBwb3NpdGlvbnMgbXVzdCBzYXRpc2Z5IHRoZSByZWxhdGlvbnMKICAgKiAwIOKJpCBgc3RhcnRgIOKJpCBgZW5kYCDiiaQgYHRoaXMubGVuZ3RoYAogICAqIElmIGBlbmRgIGlzIGVxdWFsIHRvIGBzdGFydGAsIHRoZW4gdGhlIHJldHVybmVkIGxpc3QgaXMgZW1wdHkuCiAgICovCiAgSW50OExpc3Qgc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSk7CgogIHN0YXRpYyBjb25zdCBpbnQgYnl0ZXNQZXJFbGVtZW50ID0gMTsKfQoKLyoqCiAqIEEgZml4ZWQtbGVuZ3RoIGxpc3Qgb2YgOC1iaXQgdW5zaWduZWQgaW50ZWdlcnMuCiAqCiAqIEZvciBsb25nIGxpc3RzLCB0aGlzIGltcGxlbWVudGF0aW9uIGNhbiBiZSBjb25zaWRlcmFibHkKICogbW9yZSBzcGFjZS0gYW5kIHRpbWUtZWZmaWNpZW50IHRoYW4gdGhlIGRlZmF1bHQgW0xpc3RdIGltcGxlbWVudGF0aW9uLgogKgogKiBJbnRlZ2VycyBzdG9yZWQgaW4gdGhlIGxpc3QgYXJlIHRydW5jYXRlZCB0byB0aGVpciBsb3cgZWlnaHQgYml0cywKICogaW50ZXJwcmV0ZWQgYXMgYW4gdW5zaWduZWQgOC1iaXQgaW50ZWdlciB3aXRoIHZhbHVlcyBpbiB0aGUKICogcmFuZ2UgMCB0byAyNTUuCiAqLwphYnN0cmFjdCBjbGFzcyBVaW50OExpc3QgaW1wbGVtZW50cyBMaXN0PGludD4sIF9UeXBlZEludExpc3QgewogIC8qKgogICAqIENyZWF0ZXMgYSBbVWludDhMaXN0XSBvZiB0aGUgc3BlY2lmaWVkIGxlbmd0aCAoaW4gZWxlbWVudHMpLCBhbGwgb2YKICAgKiB3aG9zZSBlbGVtZW50cyBhcmUgaW5pdGlhbGx5IHplcm8uCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBVaW50OExpc3QoaW50IGxlbmd0aCk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbVWludDhMaXN0XSB3aXRoIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgW2VsZW1lbnRzXSBsaXN0CiAgICogYW5kIGNvcGllcyBvdmVyIHRoZSBlbGVtZW50cy4KICAgKgogICAqIFZhbHVlcyBhcmUgdHJ1bmNhdGVkIHRvIGZpdCBpbiB0aGUgbGlzdCB3aGVuIHRoZXkgYXJlIGNvcGllZCwKICAgKiB0aGUgc2FtZSB3YXkgc3RvcmluZyB2YWx1ZXMgdHJ1bmNhdGVzIHRoZW0uCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBVaW50OExpc3QuZnJvbUxpc3QoTGlzdDxpbnQ+IGVsZW1lbnRzKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtVaW50OExpc3RdIF92aWV3XyBvZiB0aGUgc3BlY2lmaWVkIHJlZ2lvbiBpbiBbYnVmZmVyXS4KICAgKgogICAqIENoYW5nZXMgaW4gdGhlIFtVaW50OExpc3RdIHdpbGwgYmUgdmlzaWJsZSBpbiB0aGUgYnl0ZQogICAqIGJ1ZmZlciBhbmQgdmljZSB2ZXJzYS4KICAgKiBJZiB0aGUgW29mZnNldEluQnl0ZXNdIGluZGV4IG9mIHRoZSByZWdpb24gaXMgbm90IHNwZWNpZmllZCwKICAgKiBpdCBkZWZhdWx0cyB0byB6ZXJvICh0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgYnl0ZSBidWZmZXIpLgogICAqIElmIHRoZSBsZW5ndGggaXMgbm90IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gYG51bGxgLAogICAqIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSB2aWV3IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBvciBbbGVuZ3RoXSBhcmUgbmVnYXRpdmUsIG9yCiAgICogaWYgW29mZnNldEluQnl0ZXNdICsgKFtsZW5ndGhdICogZWxlbWVudFNpemVJbkJ5dGVzKSBpcyBncmVhdGVyIHRoYW4KICAgKiB0aGUgbGVuZ3RoIG9mIFtidWZmZXJdLgogICAqLwogIGZhY3RvcnkgVWludDhMaXN0LnZpZXcoQnl0ZUJ1ZmZlciBidWZmZXIsCiAgICAgIFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICByZXR1cm4gYnVmZmVyLmFzVWludDhMaXN0KG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgY29uY2F0ZW5hdGlvbiBvZiB0aGlzIGxpc3QgYW5kIFtvdGhlcl0uCiAgICoKICAgKiBJZiBbb3RoZXJdIGlzIGFsc28gYSB0eXBlZC1kYXRhIGxpc3QsIHRoZW4gdGhlIHJldHVybiBsaXN0IHdpbGwgYmUgYQogICAqIHR5cGVkIGRhdGEgbGlzdCBjYXBhYmxlIG9mIGhvbGRpbmcgYm90aCB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VycyBhbmQKICAgKiB0aGUgZWxlbWVudHMgb2YgW290aGVyXSwgb3RoZXJ3aXNlIGl0J2xsIGJlIGEgbm9ybWFsIGxpc3Qgb2YgaW50ZWdlcnMuCiAgICovCiAgTGlzdDxpbnQ+IG9wZXJhdG9yICsoTGlzdDxpbnQ+IG90aGVyKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIGJldHdlZW4gW3N0YXJ0XSBhbmQgW2VuZF0uCiAgICoKICAgKiBUaGUgbmV3IGxpc3QgaXMgYSBgVWludDhMaXN0YCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBvZiB0aGlzIGxpc3QgYXQKICAgKiBwb3NpdGlvbnMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIFtzdGFydF0gYW5kIGxlc3MgdGhhbiBbZW5kXSBpbiB0aGUgc2FtZQogICAqIG9yZGVyIGFzIHRoZXkgb2NjdXIgaW4gdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHZhciBudW1iZXJzID0gVWludDhMaXN0LmZyb21MaXN0KFswLCAxLCAyLCAzLCA0XSk7CiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpKTsgLy8gWzEsIDJdCiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpLnJ1bnRpbWVUeXBlKTsgLy8gVWludDhMaXN0CiAgICogYGBgCiAgICoKICAgKiBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byB0aGUgW2xlbmd0aF0gb2YgdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxKSk7IC8vIFsxLCAyLCAzLCA0XQogICAqIGBgYAogICAqCiAgICogVGhlIGBzdGFydGAgYW5kIGBlbmRgIHBvc2l0aW9ucyBtdXN0IHNhdGlzZnkgdGhlIHJlbGF0aW9ucwogICAqIDAg4omkIGBzdGFydGAg4omkIGBlbmRgIOKJpCBgdGhpcy5sZW5ndGhgCiAgICogSWYgYGVuZGAgaXMgZXF1YWwgdG8gYHN0YXJ0YCwgdGhlbiB0aGUgcmV0dXJuZWQgbGlzdCBpcyBlbXB0eS4KICAgKi8KICBVaW50OExpc3Qgc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSk7CgogIHN0YXRpYyBjb25zdCBpbnQgYnl0ZXNQZXJFbGVtZW50ID0gMTsKfQoKLyoqCiAqIEEgZml4ZWQtbGVuZ3RoIGxpc3Qgb2YgOC1iaXQgdW5zaWduZWQgaW50ZWdlcnMuCiAqCiAqIEZvciBsb25nIGxpc3RzLCB0aGlzIGltcGxlbWVudGF0aW9uIGNhbiBiZSBjb25zaWRlcmFibHkKICogbW9yZSBzcGFjZS0gYW5kIHRpbWUtZWZmaWNpZW50IHRoYW4gdGhlIGRlZmF1bHQgW0xpc3RdIGltcGxlbWVudGF0aW9uLgogKgogKiBJbnRlZ2VycyBzdG9yZWQgaW4gdGhlIGxpc3QgYXJlIGNsYW1wZWQgdG8gYW4gdW5zaWduZWQgZWlnaHQgYml0IHZhbHVlLgogKiBUaGF0IGlzLCBhbGwgdmFsdWVzIGJlbG93IHplcm8gYXJlIHN0b3JlZCBhcyB6ZXJvCiAqIGFuZCBhbGwgdmFsdWVzIGFib3ZlIDI1NSBhcmUgc3RvcmVkIGFzIDI1NS4KICovCmFic3RyYWN0IGNsYXNzIFVpbnQ4Q2xhbXBlZExpc3QgaW1wbGVtZW50cyBMaXN0PGludD4sIF9UeXBlZEludExpc3QgewogIC8qKgogICAqIENyZWF0ZXMgYSBbVWludDhDbGFtcGVkTGlzdF0gb2YgdGhlIHNwZWNpZmllZCBsZW5ndGggKGluIGVsZW1lbnRzKSwgYWxsIG9mCiAgICogd2hvc2UgZWxlbWVudHMgYXJlIGluaXRpYWxseSB6ZXJvLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgVWludDhDbGFtcGVkTGlzdChpbnQgbGVuZ3RoKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtVaW50OENsYW1wZWRMaXN0XSBvZiB0aGUgc2FtZSBzaXplIGFzIHRoZSBbZWxlbWVudHNdCiAgICogbGlzdCBhbmQgY29waWVzIG92ZXIgdGhlIHZhbHVlcyBjbGFtcGluZyB3aGVuIG5lZWRlZC4KICAgKgogICAqIFZhbHVlcyBhcmUgY2xhbXBlZCB0byBmaXQgaW4gdGhlIGxpc3Qgd2hlbiB0aGV5IGFyZSBjb3BpZWQsCiAgICogdGhlIHNhbWUgd2F5IHN0b3JpbmcgdmFsdWVzIGNsYW1wcyB0aGVtLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgVWludDhDbGFtcGVkTGlzdC5mcm9tTGlzdChMaXN0PGludD4gZWxlbWVudHMpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW1VpbnQ4Q2xhbXBlZExpc3RdIF92aWV3XyBvZiB0aGUgc3BlY2lmaWVkIHJlZ2lvbiBpbiB0aGUKICAgKiBzcGVjaWZpZWQgYnl0ZSBbYnVmZmVyXS4KICAgKgogICAqIENoYW5nZXMgaW4gdGhlIFtVaW50OExpc3RdIHdpbGwgYmUgdmlzaWJsZSBpbiB0aGUgYnl0ZSBidWZmZXIKICAgKiBhbmQgdmljZSB2ZXJzYS4KICAgKiBJZiB0aGUgW29mZnNldEluQnl0ZXNdIGluZGV4IG9mIHRoZSByZWdpb24gaXMgbm90IHNwZWNpZmllZCwKICAgKiBpdCBkZWZhdWx0cyB0byB6ZXJvICh0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgYnl0ZSBidWZmZXIpLgogICAqIElmIHRoZSBsZW5ndGggaXMgbm90IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gYG51bGxgLAogICAqIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSB2aWV3IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBvciBbbGVuZ3RoXSBhcmUgbmVnYXRpdmUsIG9yCiAgICogaWYgW29mZnNldEluQnl0ZXNdICsgKFtsZW5ndGhdICogZWxlbWVudFNpemVJbkJ5dGVzKSBpcyBncmVhdGVyIHRoYW4KICAgKiB0aGUgbGVuZ3RoIG9mIFtidWZmZXJdLgogICAqLwogIGZhY3RvcnkgVWludDhDbGFtcGVkTGlzdC52aWV3KEJ5dGVCdWZmZXIgYnVmZmVyLAogICAgICBbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgcmV0dXJuIGJ1ZmZlci5hc1VpbnQ4Q2xhbXBlZExpc3Qob2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgbGlzdCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBiZXR3ZWVuIFtzdGFydF0gYW5kIFtlbmRdLgogICAqCiAgICogVGhlIG5ldyBsaXN0IGlzIGEgYFVpbnQ4Q2xhbXBlZExpc3RgIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIG9mIHRoaXMKICAgKiBsaXN0IGF0IHBvc2l0aW9ucyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gW3N0YXJ0XSBhbmQgbGVzcyB0aGFuIFtlbmRdIGluCiAgICogdGhlIHNhbWUgb3JkZXIgYXMgdGhleSBvY2N1ciBpbiB0aGlzIGxpc3QuCiAgICoKICAgKiBgYGBkYXJ0CiAgICogdmFyIG51bWJlcnMgPSBVaW50OENsYW1wZWRMaXN0LmZyb21MaXN0KFswLCAxLCAyLCAzLCA0XSk7CiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpKTsgLy8gWzEsIDJdCiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpLnJ1bnRpbWVUeXBlKTsgLy8gVWludDhDbGFtcGVkTGlzdAogICAqIGBgYAogICAqCiAgICogSWYgW2VuZF0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGhlIFtsZW5ndGhdIG9mIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSkpOyAvLyBbMSwgMiwgMywgNF0KICAgKiBgYGAKICAgKgogICAqIFRoZSBgc3RhcnRgIGFuZCBgZW5kYCBwb3NpdGlvbnMgbXVzdCBzYXRpc2Z5IHRoZSByZWxhdGlvbnMKICAgKiAwIOKJpCBgc3RhcnRgIOKJpCBgZW5kYCDiiaQgYHRoaXMubGVuZ3RoYAogICAqIElmIGBlbmRgIGlzIGVxdWFsIHRvIGBzdGFydGAsIHRoZW4gdGhlIHJldHVybmVkIGxpc3QgaXMgZW1wdHkuCiAgICovCiAgVWludDhDbGFtcGVkTGlzdCBzdWJsaXN0KGludCBzdGFydCwgW2ludCBlbmRdKTsKCiAgc3RhdGljIGNvbnN0IGludCBieXRlc1BlckVsZW1lbnQgPSAxOwp9CgovKioKICogQSBmaXhlZC1sZW5ndGggbGlzdCBvZiAxNi1iaXQgc2lnbmVkIGludGVnZXJzIHRoYXQgaXMgdmlld2FibGUgYXMgYQogKiBbVHlwZWREYXRhXS4KICoKICogRm9yIGxvbmcgbGlzdHMsIHRoaXMgaW1wbGVtZW50YXRpb24gY2FuIGJlIGNvbnNpZGVyYWJseQogKiBtb3JlIHNwYWNlLSBhbmQgdGltZS1lZmZpY2llbnQgdGhhbiB0aGUgZGVmYXVsdCBbTGlzdF0gaW1wbGVtZW50YXRpb24uCiAqCiAqIEludGVnZXJzIHN0b3JlZCBpbiB0aGUgbGlzdCBhcmUgdHJ1bmNhdGVkIHRvIHRoZWlyIGxvdyAxNiBiaXRzLAogKiBpbnRlcnByZXRlZCBhcyBhIHNpZ25lZCAxNi1iaXQgdHdvJ3MgY29tcGxlbWVudCBpbnRlZ2VyIHdpdGggdmFsdWVzIGluIHRoZQogKiByYW5nZSAtMzI3NjggdG8gKzMyNzY3LgogKi8KYWJzdHJhY3QgY2xhc3MgSW50MTZMaXN0IGltcGxlbWVudHMgTGlzdDxpbnQ+LCBfVHlwZWRJbnRMaXN0IHsKICAvKioKICAgKiBDcmVhdGVzIGFuIFtJbnQxNkxpc3RdIG9mIHRoZSBzcGVjaWZpZWQgbGVuZ3RoIChpbiBlbGVtZW50cyksIGFsbCBvZgogICAqIHdob3NlIGVsZW1lbnRzIGFyZSBpbml0aWFsbHkgemVyby4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IEludDE2TGlzdChpbnQgbGVuZ3RoKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtJbnQxNkxpc3RdIHdpdGggdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBbZWxlbWVudHNdIGxpc3QKICAgKiBhbmQgY29waWVzIG92ZXIgdGhlIGVsZW1lbnRzLgogICAqCiAgICogVmFsdWVzIGFyZSB0cnVuY2F0ZWQgdG8gZml0IGluIHRoZSBsaXN0IHdoZW4gdGhleSBhcmUgY29waWVkLAogICAqIHRoZSBzYW1lIHdheSBzdG9yaW5nIHZhbHVlcyB0cnVuY2F0ZXMgdGhlbS4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IEludDE2TGlzdC5mcm9tTGlzdChMaXN0PGludD4gZWxlbWVudHMpOwoKICAvKioKICAgKiBDcmVhdGVzIGFuIFtJbnQxNkxpc3RdIF92aWV3XyBvZiB0aGUgc3BlY2lmaWVkIHJlZ2lvbiBpbiBbYnVmZmVyXS4KICAgKgogICAqIENoYW5nZXMgaW4gdGhlIFtJbnQxNkxpc3RdIHdpbGwgYmUgdmlzaWJsZSBpbiB0aGUgYnl0ZQogICAqIGJ1ZmZlciBhbmQgdmljZSB2ZXJzYS4KICAgKiBJZiB0aGUgW29mZnNldEluQnl0ZXNdIGluZGV4IG9mIHRoZSByZWdpb24gaXMgbm90IHNwZWNpZmllZCwKICAgKiBpdCBkZWZhdWx0cyB0byB6ZXJvICh0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgYnl0ZSBidWZmZXIpLgogICAqIElmIHRoZSBsZW5ndGggaXMgbm90IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gYG51bGxgLAogICAqIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSB2aWV3IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBvciBbbGVuZ3RoXSBhcmUgbmVnYXRpdmUsIG9yCiAgICogaWYgW29mZnNldEluQnl0ZXNdICsgKFtsZW5ndGhdICogZWxlbWVudFNpemVJbkJ5dGVzKSBpcyBncmVhdGVyIHRoYW4KICAgKiB0aGUgbGVuZ3RoIG9mIFtidWZmZXJdLgogICAqCiAgICogVGhyb3dzIFtBcmd1bWVudEVycm9yXSBpZiBbb2Zmc2V0SW5CeXRlc10gaXMgbm90IGEgbXVsdGlwbGUgb2YKICAgKiBbYnl0ZXNQZXJFbGVtZW50XS4KICAgKi8KICBmYWN0b3J5IEludDE2TGlzdC52aWV3KEJ5dGVCdWZmZXIgYnVmZmVyLAogICAgICBbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgcmV0dXJuIGJ1ZmZlci5hc0ludDE2TGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIGJldHdlZW4gW3N0YXJ0XSBhbmQgW2VuZF0uCiAgICoKICAgKiBUaGUgbmV3IGxpc3QgaXMgYW4gYEludDE2TGlzdGAgY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcwogICAqIGxpc3QgYXQgcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBbc3RhcnRdIGFuZCBsZXNzIHRoYW4gW2VuZF0gaW4KICAgKiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IG9jY3VyIGluIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiB2YXIgbnVtYmVycyA9IEludDE2TGlzdC5mcm9tTGlzdChbMCwgMSwgMiwgMywgNF0pOwogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxLCAzKSk7IC8vIFsxLCAyXQogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxLCAzKS5ydW50aW1lVHlwZSk7IC8vIEludDE2TGlzdAogICAqIGBgYAogICAqCiAgICogSWYgW2VuZF0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGhlIFtsZW5ndGhdIG9mIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSkpOyAvLyBbMSwgMiwgMywgNF0KICAgKiBgYGAKICAgKgogICAqIFRoZSBgc3RhcnRgIGFuZCBgZW5kYCBwb3NpdGlvbnMgbXVzdCBzYXRpc2Z5IHRoZSByZWxhdGlvbnMKICAgKiAwIOKJpCBgc3RhcnRgIOKJpCBgZW5kYCDiiaQgYHRoaXMubGVuZ3RoYAogICAqIElmIGBlbmRgIGlzIGVxdWFsIHRvIGBzdGFydGAsIHRoZW4gdGhlIHJldHVybmVkIGxpc3QgaXMgZW1wdHkuCiAgICovCiAgSW50MTZMaXN0IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pOwoKICBzdGF0aWMgY29uc3QgaW50IGJ5dGVzUGVyRWxlbWVudCA9IDI7Cn0KCi8qKgogKiBBIGZpeGVkLWxlbmd0aCBsaXN0IG9mIDE2LWJpdCB1bnNpZ25lZCBpbnRlZ2VycyB0aGF0IGlzIHZpZXdhYmxlIGFzIGEKICogW1R5cGVkRGF0YV0uCiAqCiAqIEZvciBsb25nIGxpc3RzLCB0aGlzIGltcGxlbWVudGF0aW9uIGNhbiBiZSBjb25zaWRlcmFibHkKICogbW9yZSBzcGFjZS0gYW5kIHRpbWUtZWZmaWNpZW50IHRoYW4gdGhlIGRlZmF1bHQgW0xpc3RdIGltcGxlbWVudGF0aW9uLgogKgogKiBJbnRlZ2VycyBzdG9yZWQgaW4gdGhlIGxpc3QgYXJlIHRydW5jYXRlZCB0byB0aGVpciBsb3cgMTYgYml0cywKICogaW50ZXJwcmV0ZWQgYXMgYW4gdW5zaWduZWQgMTYtYml0IGludGVnZXIgd2l0aCB2YWx1ZXMgaW4gdGhlCiAqIHJhbmdlIDAgdG8gNjU1MzUuCiAqLwphYnN0cmFjdCBjbGFzcyBVaW50MTZMaXN0IGltcGxlbWVudHMgTGlzdDxpbnQ+LCBfVHlwZWRJbnRMaXN0IHsKICAvKioKICAgKiBDcmVhdGVzIGEgW1VpbnQxNkxpc3RdIG9mIHRoZSBzcGVjaWZpZWQgbGVuZ3RoIChpbiBlbGVtZW50cyksIGFsbAogICAqIG9mIHdob3NlIGVsZW1lbnRzIGFyZSBpbml0aWFsbHkgemVyby4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IFVpbnQxNkxpc3QoaW50IGxlbmd0aCk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbVWludDE2TGlzdF0gd2l0aCB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIFtlbGVtZW50c10gbGlzdAogICAqIGFuZCBjb3BpZXMgb3ZlciB0aGUgZWxlbWVudHMuCiAgICoKICAgKiBWYWx1ZXMgYXJlIHRydW5jYXRlZCB0byBmaXQgaW4gdGhlIGxpc3Qgd2hlbiB0aGV5IGFyZSBjb3BpZWQsCiAgICogdGhlIHNhbWUgd2F5IHN0b3JpbmcgdmFsdWVzIHRydW5jYXRlcyB0aGVtLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgVWludDE2TGlzdC5mcm9tTGlzdChMaXN0PGludD4gZWxlbWVudHMpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW1VpbnQxNkxpc3RdIF92aWV3XyBvZiB0aGUgc3BlY2lmaWVkIHJlZ2lvbiBpbgogICAqIHRoZSBzcGVjaWZpZWQgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBDaGFuZ2VzIGluIHRoZSBbVWludDE2TGlzdF0gd2lsbCBiZSB2aXNpYmxlIGluIHRoZSBieXRlIGJ1ZmZlcgogICAqIGFuZCB2aWNlIHZlcnNhLgogICAqIElmIHRoZSBbb2Zmc2V0SW5CeXRlc10gaW5kZXggb2YgdGhlIHJlZ2lvbiBpcyBub3Qgc3BlY2lmaWVkLAogICAqIGl0IGRlZmF1bHRzIHRvIHplcm8gKHRoZSBmaXJzdCBieXRlIGluIHRoZSBieXRlIGJ1ZmZlcikuCiAgICogSWYgdGhlIGxlbmd0aCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBgbnVsbGAsCiAgICogd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIHZpZXcgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW29mZnNldEluQnl0ZXNdIG9yIFtsZW5ndGhdIGFyZSBuZWdhdGl2ZSwgb3IKICAgKiBpZiBbb2Zmc2V0SW5CeXRlc10gKyAoW2xlbmd0aF0gKiBlbGVtZW50U2l6ZUluQnl0ZXMpIGlzIGdyZWF0ZXIgdGhhbgogICAqIHRoZSBsZW5ndGggb2YgW2J1ZmZlcl0uCiAgICoKICAgKiBUaHJvd3MgW0FyZ3VtZW50RXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBpcyBub3QgYSBtdWx0aXBsZSBvZgogICAqIFtieXRlc1BlckVsZW1lbnRdLgogICAqLwogIGZhY3RvcnkgVWludDE2TGlzdC52aWV3KEJ5dGVCdWZmZXIgYnVmZmVyLAogICAgICBbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgcmV0dXJuIGJ1ZmZlci5hc1VpbnQxNkxpc3Qob2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgbGlzdCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBiZXR3ZWVuIFtzdGFydF0gYW5kIFtlbmRdLgogICAqCiAgICogVGhlIG5ldyBsaXN0IGlzIGEgYFVpbnQxNkxpc3RgIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIG9mIHRoaXMKICAgKiBsaXN0IGF0IHBvc2l0aW9ucyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gW3N0YXJ0XSBhbmQgbGVzcyB0aGFuIFtlbmRdIGluCiAgICogdGhlIHNhbWUgb3JkZXIgYXMgdGhleSBvY2N1ciBpbiB0aGlzIGxpc3QuCiAgICoKICAgKiBgYGBkYXJ0CiAgICogdmFyIG51bWJlcnMgPSBVaW50MTZMaXN0LmZyb21MaXN0KFswLCAxLCAyLCAzLCA0XSk7CiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpKTsgLy8gWzEsIDJdCiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpLnJ1bnRpbWVUeXBlKTsgLy8gVWludDE2TGlzdAogICAqIGBgYAogICAqCiAgICogSWYgW2VuZF0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGhlIFtsZW5ndGhdIG9mIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSkpOyAvLyBbMSwgMiwgMywgNF0KICAgKiBgYGAKICAgKgogICAqIFRoZSBgc3RhcnRgIGFuZCBgZW5kYCBwb3NpdGlvbnMgbXVzdCBzYXRpc2Z5IHRoZSByZWxhdGlvbnMKICAgKiAwIOKJpCBgc3RhcnRgIOKJpCBgZW5kYCDiiaQgYHRoaXMubGVuZ3RoYAogICAqIElmIGBlbmRgIGlzIGVxdWFsIHRvIGBzdGFydGAsIHRoZW4gdGhlIHJldHVybmVkIGxpc3QgaXMgZW1wdHkuCiAgICovCiAgVWludDE2TGlzdCBzdWJsaXN0KGludCBzdGFydCwgW2ludCBlbmRdKTsKCiAgc3RhdGljIGNvbnN0IGludCBieXRlc1BlckVsZW1lbnQgPSAyOwp9CgovKioKICogQSBmaXhlZC1sZW5ndGggbGlzdCBvZiAzMi1iaXQgc2lnbmVkIGludGVnZXJzIHRoYXQgaXMgdmlld2FibGUgYXMgYQogKiBbVHlwZWREYXRhXS4KICoKICogRm9yIGxvbmcgbGlzdHMsIHRoaXMgaW1wbGVtZW50YXRpb24gY2FuIGJlIGNvbnNpZGVyYWJseQogKiBtb3JlIHNwYWNlLSBhbmQgdGltZS1lZmZpY2llbnQgdGhhbiB0aGUgZGVmYXVsdCBbTGlzdF0gaW1wbGVtZW50YXRpb24uCiAqCiAqIEludGVnZXJzIHN0b3JlZCBpbiB0aGUgbGlzdCBhcmUgdHJ1bmNhdGVkIHRvIHRoZWlyIGxvdyAzMiBiaXRzLAogKiBpbnRlcnByZXRlZCBhcyBhIHNpZ25lZCAzMi1iaXQgdHdvJ3MgY29tcGxlbWVudCBpbnRlZ2VyIHdpdGggdmFsdWVzIGluIHRoZQogKiByYW5nZSAtMjE0NzQ4MzY0OCB0byAyMTQ3NDgzNjQ3LgogKi8KYWJzdHJhY3QgY2xhc3MgSW50MzJMaXN0IGltcGxlbWVudHMgTGlzdDxpbnQ+LCBfVHlwZWRJbnRMaXN0IHsKICAvKioKICAgKiBDcmVhdGVzIGFuIFtJbnQzMkxpc3RdIG9mIHRoZSBzcGVjaWZpZWQgbGVuZ3RoIChpbiBlbGVtZW50cyksIGFsbCBvZgogICAqIHdob3NlIGVsZW1lbnRzIGFyZSBpbml0aWFsbHkgemVyby4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IEludDMyTGlzdChpbnQgbGVuZ3RoKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtJbnQzMkxpc3RdIHdpdGggdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBbZWxlbWVudHNdIGxpc3QKICAgKiBhbmQgY29waWVzIG92ZXIgdGhlIGVsZW1lbnRzLgogICAqCiAgICogVmFsdWVzIGFyZSB0cnVuY2F0ZWQgdG8gZml0IGluIHRoZSBsaXN0IHdoZW4gdGhleSBhcmUgY29waWVkLAogICAqIHRoZSBzYW1lIHdheSBzdG9yaW5nIHZhbHVlcyB0cnVuY2F0ZXMgdGhlbS4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IEludDMyTGlzdC5mcm9tTGlzdChMaXN0PGludD4gZWxlbWVudHMpOwoKICAvKioKICAgKiBDcmVhdGVzIGFuIFtJbnQzMkxpc3RdIF92aWV3XyBvZiB0aGUgc3BlY2lmaWVkIHJlZ2lvbiBpbiBbYnVmZmVyXS4KICAgKgogICAqIENoYW5nZXMgaW4gdGhlIFtJbnQzMkxpc3RdIHdpbGwgYmUgdmlzaWJsZSBpbiB0aGUgYnl0ZQogICAqIGJ1ZmZlciBhbmQgdmljZSB2ZXJzYS4KICAgKiBJZiB0aGUgW29mZnNldEluQnl0ZXNdIGluZGV4IG9mIHRoZSByZWdpb24gaXMgbm90IHNwZWNpZmllZCwKICAgKiBpdCBkZWZhdWx0cyB0byB6ZXJvICh0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgYnl0ZSBidWZmZXIpLgogICAqIElmIHRoZSBsZW5ndGggaXMgbm90IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gYG51bGxgLAogICAqIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSB2aWV3IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBvciBbbGVuZ3RoXSBhcmUgbmVnYXRpdmUsIG9yCiAgICogaWYgW29mZnNldEluQnl0ZXNdICsgKFtsZW5ndGhdICogZWxlbWVudFNpemVJbkJ5dGVzKSBpcyBncmVhdGVyIHRoYW4KICAgKiB0aGUgbGVuZ3RoIG9mIFtidWZmZXJdLgogICAqCiAgICogVGhyb3dzIFtBcmd1bWVudEVycm9yXSBpZiBbb2Zmc2V0SW5CeXRlc10gaXMgbm90IGEgbXVsdGlwbGUgb2YKICAgKiBbYnl0ZXNQZXJFbGVtZW50XS4KICAgKi8KICBmYWN0b3J5IEludDMyTGlzdC52aWV3KEJ5dGVCdWZmZXIgYnVmZmVyLAogICAgICBbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgcmV0dXJuIGJ1ZmZlci5hc0ludDMyTGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIGJldHdlZW4gW3N0YXJ0XSBhbmQgW2VuZF0uCiAgICoKICAgKiBUaGUgbmV3IGxpc3QgaXMgYW4gYEludDMyTGlzdGAgY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcwogICAqIGxpc3QgYXQgcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBbc3RhcnRdIGFuZCBsZXNzIHRoYW4gW2VuZF0gaW4KICAgKiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IG9jY3VyIGluIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiB2YXIgbnVtYmVycyA9IEludDMyTGlzdC5mcm9tTGlzdChbMCwgMSwgMiwgMywgNF0pOwogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxLCAzKSk7IC8vIFsxLCAyXQogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxLCAzKS5ydW50aW1lVHlwZSk7IC8vIEludDMyTGlzdAogICAqIGBgYAogICAqCiAgICogSWYgW2VuZF0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGhlIFtsZW5ndGhdIG9mIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSkpOyAvLyBbMSwgMiwgMywgNF0KICAgKiBgYGAKICAgKgogICAqIFRoZSBgc3RhcnRgIGFuZCBgZW5kYCBwb3NpdGlvbnMgbXVzdCBzYXRpc2Z5IHRoZSByZWxhdGlvbnMKICAgKiAwIOKJpCBgc3RhcnRgIOKJpCBgZW5kYCDiiaQgYHRoaXMubGVuZ3RoYAogICAqIElmIGBlbmRgIGlzIGVxdWFsIHRvIGBzdGFydGAsIHRoZW4gdGhlIHJldHVybmVkIGxpc3QgaXMgZW1wdHkuCiAgICovCiAgSW50MzJMaXN0IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pOwoKICBzdGF0aWMgY29uc3QgaW50IGJ5dGVzUGVyRWxlbWVudCA9IDQ7Cn0KCi8qKgogKiBBIGZpeGVkLWxlbmd0aCBsaXN0IG9mIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VycyB0aGF0IGlzIHZpZXdhYmxlIGFzIGEKICogW1R5cGVkRGF0YV0uCiAqCiAqIEZvciBsb25nIGxpc3RzLCB0aGlzIGltcGxlbWVudGF0aW9uIGNhbiBiZSBjb25zaWRlcmFibHkKICogbW9yZSBzcGFjZS0gYW5kIHRpbWUtZWZmaWNpZW50IHRoYW4gdGhlIGRlZmF1bHQgW0xpc3RdIGltcGxlbWVudGF0aW9uLgogKgogKiBJbnRlZ2VycyBzdG9yZWQgaW4gdGhlIGxpc3QgYXJlIHRydW5jYXRlZCB0byB0aGVpciBsb3cgMzIgYml0cywKICogaW50ZXJwcmV0ZWQgYXMgYW4gdW5zaWduZWQgMzItYml0IGludGVnZXIgd2l0aCB2YWx1ZXMgaW4gdGhlCiAqIHJhbmdlIDAgdG8gNDI5NDk2NzI5NS4KICovCmFic3RyYWN0IGNsYXNzIFVpbnQzMkxpc3QgaW1wbGVtZW50cyBMaXN0PGludD4sIF9UeXBlZEludExpc3QgewogIC8qKgogICAqIENyZWF0ZXMgYSBbVWludDMyTGlzdF0gb2YgdGhlIHNwZWNpZmllZCBsZW5ndGggKGluIGVsZW1lbnRzKSwgYWxsCiAgICogb2Ygd2hvc2UgZWxlbWVudHMgYXJlIGluaXRpYWxseSB6ZXJvLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgVWludDMyTGlzdChpbnQgbGVuZ3RoKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtVaW50MzJMaXN0XSB3aXRoIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgW2VsZW1lbnRzXSBsaXN0CiAgICogYW5kIGNvcGllcyBvdmVyIHRoZSBlbGVtZW50cy4KICAgKgogICAqIFZhbHVlcyBhcmUgdHJ1bmNhdGVkIHRvIGZpdCBpbiB0aGUgbGlzdCB3aGVuIHRoZXkgYXJlIGNvcGllZCwKICAgKiB0aGUgc2FtZSB3YXkgc3RvcmluZyB2YWx1ZXMgdHJ1bmNhdGVzIHRoZW0uCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBVaW50MzJMaXN0LmZyb21MaXN0KExpc3Q8aW50PiBlbGVtZW50cyk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbVWludDMyTGlzdF0gX3ZpZXdfIG9mIHRoZSBzcGVjaWZpZWQgcmVnaW9uIGluCiAgICogdGhlIHNwZWNpZmllZCBieXRlIGJ1ZmZlci4KICAgKgogICAqIENoYW5nZXMgaW4gdGhlIFtVaW50MzJMaXN0XSB3aWxsIGJlIHZpc2libGUgaW4gdGhlIGJ5dGUgYnVmZmVyCiAgICogYW5kIHZpY2UgdmVyc2EuCiAgICogSWYgdGhlIFtvZmZzZXRJbkJ5dGVzXSBpbmRleCBvZiB0aGUgcmVnaW9uIGlzIG5vdCBzcGVjaWZpZWQsCiAgICogaXQgZGVmYXVsdHMgdG8gemVybyAodGhlIGZpcnN0IGJ5dGUgaW4gdGhlIGJ5dGUgYnVmZmVyKS4KICAgKiBJZiB0aGUgbGVuZ3RoIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvIGBudWxsYCwKICAgKiB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgdmlldyBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhlIGJ5dGUgYnVmZmVyLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbb2Zmc2V0SW5CeXRlc10gb3IgW2xlbmd0aF0gYXJlIG5lZ2F0aXZlLCBvcgogICAqIGlmIFtvZmZzZXRJbkJ5dGVzXSArIChbbGVuZ3RoXSAqIGVsZW1lbnRTaXplSW5CeXRlcykgaXMgZ3JlYXRlciB0aGFuCiAgICogdGhlIGxlbmd0aCBvZiBbYnVmZmVyXS4KICAgKgogICAqIFRocm93cyBbQXJndW1lbnRFcnJvcl0gaWYgW29mZnNldEluQnl0ZXNdIGlzIG5vdCBhIG11bHRpcGxlIG9mCiAgICogW2J5dGVzUGVyRWxlbWVudF0uCiAgICovCiAgZmFjdG9yeSBVaW50MzJMaXN0LnZpZXcoQnl0ZUJ1ZmZlciBidWZmZXIsCiAgICAgIFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICByZXR1cm4gYnVmZmVyLmFzVWludDMyTGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIGJldHdlZW4gW3N0YXJ0XSBhbmQgW2VuZF0uCiAgICoKICAgKiBUaGUgbmV3IGxpc3QgaXMgYSBgVWludDMyTGlzdGAgY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcwogICAqIGxpc3QgYXQgcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBbc3RhcnRdIGFuZCBsZXNzIHRoYW4gW2VuZF0gaW4KICAgKiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IG9jY3VyIGluIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiB2YXIgbnVtYmVycyA9IFVpbnQzMkxpc3QuZnJvbUxpc3QoWzAsIDEsIDIsIDMsIDRdKTsKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykpOyAvLyBbMSwgMl0KICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykucnVudGltZVR5cGUpOyAvLyBVaW50MzJMaXN0CiAgICogYGBgCiAgICoKICAgKiBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byB0aGUgW2xlbmd0aF0gb2YgdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxKSk7IC8vIFsxLCAyLCAzLCA0XQogICAqIGBgYAogICAqCiAgICogVGhlIGBzdGFydGAgYW5kIGBlbmRgIHBvc2l0aW9ucyBtdXN0IHNhdGlzZnkgdGhlIHJlbGF0aW9ucwogICAqIDAg4omkIGBzdGFydGAg4omkIGBlbmRgIOKJpCBgdGhpcy5sZW5ndGhgCiAgICogSWYgYGVuZGAgaXMgZXF1YWwgdG8gYHN0YXJ0YCwgdGhlbiB0aGUgcmV0dXJuZWQgbGlzdCBpcyBlbXB0eS4KICAgKi8KICBVaW50MzJMaXN0IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pOwoKICBzdGF0aWMgY29uc3QgaW50IGJ5dGVzUGVyRWxlbWVudCA9IDQ7Cn0KCi8qKgogKiBBIGZpeGVkLWxlbmd0aCBsaXN0IG9mIDY0LWJpdCBzaWduZWQgaW50ZWdlcnMgdGhhdCBpcyB2aWV3YWJsZSBhcyBhCiAqIFtUeXBlZERhdGFdLgogKgogKiBGb3IgbG9uZyBsaXN0cywgdGhpcyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgY29uc2lkZXJhYmx5CiAqIG1vcmUgc3BhY2UtIGFuZCB0aW1lLWVmZmljaWVudCB0aGFuIHRoZSBkZWZhdWx0IFtMaXN0XSBpbXBsZW1lbnRhdGlvbi4KICoKICogSW50ZWdlcnMgc3RvcmVkIGluIHRoZSBsaXN0IGFyZSB0cnVuY2F0ZWQgdG8gdGhlaXIgbG93IDY0IGJpdHMsCiAqIGludGVycHJldGVkIGFzIGEgc2lnbmVkIDY0LWJpdCB0d28ncyBjb21wbGVtZW50IGludGVnZXIgd2l0aCB2YWx1ZXMgaW4gdGhlCiAqIHJhbmdlIC05MjIzMzcyMDM2ODU0Nzc1ODA4IHRvICs5MjIzMzcyMDM2ODU0Nzc1ODA3LgogKi8KYWJzdHJhY3QgY2xhc3MgSW50NjRMaXN0IGltcGxlbWVudHMgTGlzdDxpbnQ+LCBfVHlwZWRJbnRMaXN0IHsKICAvKioKICAgKiBDcmVhdGVzIGFuIFtJbnQ2NExpc3RdIG9mIHRoZSBzcGVjaWZpZWQgbGVuZ3RoIChpbiBlbGVtZW50cyksIGFsbCBvZgogICAqIHdob3NlIGVsZW1lbnRzIGFyZSBpbml0aWFsbHkgemVyby4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IEludDY0TGlzdChpbnQgbGVuZ3RoKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtJbnQ2NExpc3RdIHdpdGggdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBbZWxlbWVudHNdIGxpc3QKICAgKiBhbmQgY29waWVzIG92ZXIgdGhlIGVsZW1lbnRzLgogICAqCiAgICogVmFsdWVzIGFyZSB0cnVuY2F0ZWQgdG8gZml0IGluIHRoZSBsaXN0IHdoZW4gdGhleSBhcmUgY29waWVkLAogICAqIHRoZSBzYW1lIHdheSBzdG9yaW5nIHZhbHVlcyB0cnVuY2F0ZXMgdGhlbS4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IEludDY0TGlzdC5mcm9tTGlzdChMaXN0PGludD4gZWxlbWVudHMpOwoKICAvKioKICAgKiBDcmVhdGVzIGFuIFtJbnQ2NExpc3RdIF92aWV3XyBvZiB0aGUgc3BlY2lmaWVkIHJlZ2lvbiBpbiBbYnVmZmVyXS4KICAgKgogICAqIENoYW5nZXMgaW4gdGhlIFtJbnQ2NExpc3RdIHdpbGwgYmUgdmlzaWJsZSBpbiB0aGUgYnl0ZSBidWZmZXIKICAgKiBhbmQgdmljZSB2ZXJzYS4KICAgKiBJZiB0aGUgW29mZnNldEluQnl0ZXNdIGluZGV4IG9mIHRoZSByZWdpb24gaXMgbm90IHNwZWNpZmllZCwKICAgKiBpdCBkZWZhdWx0cyB0byB6ZXJvICh0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgYnl0ZSBidWZmZXIpLgogICAqIElmIHRoZSBsZW5ndGggaXMgbm90IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gYG51bGxgLAogICAqIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSB2aWV3IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBvciBbbGVuZ3RoXSBhcmUgbmVnYXRpdmUsIG9yCiAgICogaWYgW29mZnNldEluQnl0ZXNdICsgKFtsZW5ndGhdICogZWxlbWVudFNpemVJbkJ5dGVzKSBpcyBncmVhdGVyIHRoYW4KICAgKiB0aGUgbGVuZ3RoIG9mIFtidWZmZXJdLgogICAqCiAgICogVGhyb3dzIFtBcmd1bWVudEVycm9yXSBpZiBbb2Zmc2V0SW5CeXRlc10gaXMgbm90IGEgbXVsdGlwbGUgb2YKICAgKiBbYnl0ZXNQZXJFbGVtZW50XS4KICAgKi8KICBmYWN0b3J5IEludDY0TGlzdC52aWV3KEJ5dGVCdWZmZXIgYnVmZmVyLAogICAgICBbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgcmV0dXJuIGJ1ZmZlci5hc0ludDY0TGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIGJldHdlZW4gW3N0YXJ0XSBhbmQgW2VuZF0uCiAgICoKICAgKiBUaGUgbmV3IGxpc3QgaXMgYW4gYEludDY0TGlzdGAgY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcwogICAqIGxpc3QgYXQgcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBbc3RhcnRdIGFuZCBsZXNzIHRoYW4gW2VuZF0gaW4KICAgKiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IG9jY3VyIGluIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiB2YXIgbnVtYmVycyA9IEludDY0TGlzdC5mcm9tTGlzdChbMCwgMSwgMiwgMywgNF0pOwogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxLCAzKSk7IC8vIFsxLCAyXQogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxLCAzKS5ydW50aW1lVHlwZSk7IC8vIEludDY0TGlzdAogICAqIGBgYAogICAqCiAgICogSWYgW2VuZF0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGhlIFtsZW5ndGhdIG9mIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSkpOyAvLyBbMSwgMiwgMywgNF0KICAgKiBgYGAKICAgKgogICAqIFRoZSBgc3RhcnRgIGFuZCBgZW5kYCBwb3NpdGlvbnMgbXVzdCBzYXRpc2Z5IHRoZSByZWxhdGlvbnMKICAgKiAwIOKJpCBgc3RhcnRgIOKJpCBgZW5kYCDiiaQgYHRoaXMubGVuZ3RoYAogICAqIElmIGBlbmRgIGlzIGVxdWFsIHRvIGBzdGFydGAsIHRoZW4gdGhlIHJldHVybmVkIGxpc3QgaXMgZW1wdHkuCiAgICovCiAgSW50NjRMaXN0IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pOwoKICBzdGF0aWMgY29uc3QgaW50IGJ5dGVzUGVyRWxlbWVudCA9IDg7Cn0KCi8qKgogKiBBIGZpeGVkLWxlbmd0aCBsaXN0IG9mIDY0LWJpdCB1bnNpZ25lZCBpbnRlZ2VycyB0aGF0IGlzIHZpZXdhYmxlIGFzIGEKICogW1R5cGVkRGF0YV0uCiAqCiAqIEZvciBsb25nIGxpc3RzLCB0aGlzIGltcGxlbWVudGF0aW9uIGNhbiBiZSBjb25zaWRlcmFibHkKICogbW9yZSBzcGFjZS0gYW5kIHRpbWUtZWZmaWNpZW50IHRoYW4gdGhlIGRlZmF1bHQgW0xpc3RdIGltcGxlbWVudGF0aW9uLgogKgogKiBJbnRlZ2VycyBzdG9yZWQgaW4gdGhlIGxpc3QgYXJlIHRydW5jYXRlZCB0byB0aGVpciBsb3cgNjQgYml0cywKICogaW50ZXJwcmV0ZWQgYXMgYW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgd2l0aCB2YWx1ZXMgaW4gdGhlCiAqIHJhbmdlIDAgdG8gMTg0NDY3NDQwNzM3MDk1NTE2MTUuCiAqLwphYnN0cmFjdCBjbGFzcyBVaW50NjRMaXN0IGltcGxlbWVudHMgTGlzdDxpbnQ+LCBfVHlwZWRJbnRMaXN0IHsKICAvKioKICAgKiBDcmVhdGVzIGEgW1VpbnQ2NExpc3RdIG9mIHRoZSBzcGVjaWZpZWQgbGVuZ3RoIChpbiBlbGVtZW50cyksIGFsbAogICAqIG9mIHdob3NlIGVsZW1lbnRzIGFyZSBpbml0aWFsbHkgemVyby4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IFVpbnQ2NExpc3QoaW50IGxlbmd0aCk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbVWludDY0TGlzdF0gd2l0aCB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIFtlbGVtZW50c10gbGlzdAogICAqIGFuZCBjb3BpZXMgb3ZlciB0aGUgZWxlbWVudHMuCiAgICoKICAgKiBWYWx1ZXMgYXJlIHRydW5jYXRlZCB0byBmaXQgaW4gdGhlIGxpc3Qgd2hlbiB0aGV5IGFyZSBjb3BpZWQsCiAgICogdGhlIHNhbWUgd2F5IHN0b3JpbmcgdmFsdWVzIHRydW5jYXRlcyB0aGVtLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgVWludDY0TGlzdC5mcm9tTGlzdChMaXN0PGludD4gZWxlbWVudHMpOwoKICAvKioKICAgKiBDcmVhdGVzIGFuIFtVaW50NjRMaXN0XSBfdmlld18gb2YgdGhlIHNwZWNpZmllZCByZWdpb24gaW4KICAgKiB0aGUgc3BlY2lmaWVkIGJ5dGUgYnVmZmVyLgogICAqCiAgICogQ2hhbmdlcyBpbiB0aGUgW1VpbnQ2NExpc3RdIHdpbGwgYmUgdmlzaWJsZSBpbiB0aGUgYnl0ZSBidWZmZXIKICAgKiBhbmQgdmljZSB2ZXJzYS4KICAgKiBJZiB0aGUgW29mZnNldEluQnl0ZXNdIGluZGV4IG9mIHRoZSByZWdpb24gaXMgbm90IHNwZWNpZmllZCwKICAgKiBpdCBkZWZhdWx0cyB0byB6ZXJvICh0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgYnl0ZSBidWZmZXIpLgogICAqIElmIHRoZSBsZW5ndGggaXMgbm90IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gYG51bGxgLAogICAqIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSB2aWV3IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBvciBbbGVuZ3RoXSBhcmUgbmVnYXRpdmUsIG9yCiAgICogaWYgW29mZnNldEluQnl0ZXNdICsgKFtsZW5ndGhdICogZWxlbWVudFNpemVJbkJ5dGVzKSBpcyBncmVhdGVyIHRoYW4KICAgKiB0aGUgbGVuZ3RoIG9mIFtidWZmZXJdLgogICAqCiAgICogVGhyb3dzIFtBcmd1bWVudEVycm9yXSBpZiBbb2Zmc2V0SW5CeXRlc10gaXMgbm90IGEgbXVsdGlwbGUgb2YKICAgKiBbYnl0ZXNQZXJFbGVtZW50XS4KICAgKi8KICBmYWN0b3J5IFVpbnQ2NExpc3QudmlldyhCeXRlQnVmZmVyIGJ1ZmZlciwKICAgICAgW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIHJldHVybiBidWZmZXIuYXNVaW50NjRMaXN0KG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGxpc3QgY29udGFpbmluZyB0aGUgZWxlbWVudHMgYmV0d2VlbiBbc3RhcnRdIGFuZCBbZW5kXS4KICAgKgogICAqIFRoZSBuZXcgbGlzdCBpcyBhIGBVaW50NjRMaXN0YCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBvZiB0aGlzCiAgICogbGlzdCBhdCBwb3NpdGlvbnMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIFtzdGFydF0gYW5kIGxlc3MgdGhhbiBbZW5kXSBpbgogICAqIHRoZSBzYW1lIG9yZGVyIGFzIHRoZXkgb2NjdXIgaW4gdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHZhciBudW1iZXJzID0gVWludDY0TGlzdC5mcm9tTGlzdChbMCwgMSwgMiwgMywgNF0pOwogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxLCAzKSk7IC8vIFsxLCAyXQogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxLCAzKS5ydW50aW1lVHlwZSk7IC8vIFVpbnQ2NExpc3QKICAgKiBgYGAKICAgKgogICAqIElmIFtlbmRdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHRoZSBbbGVuZ3RoXSBvZiB0aGlzIGxpc3QuCiAgICoKICAgKiBgYGBkYXJ0CiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEpKTsgLy8gWzEsIDIsIDMsIDRdCiAgICogYGBgCiAgICoKICAgKiBUaGUgYHN0YXJ0YCBhbmQgYGVuZGAgcG9zaXRpb25zIG11c3Qgc2F0aXNmeSB0aGUgcmVsYXRpb25zCiAgICogMCDiiaQgYHN0YXJ0YCDiiaQgYGVuZGAg4omkIGB0aGlzLmxlbmd0aGAKICAgKiBJZiBgZW5kYCBpcyBlcXVhbCB0byBgc3RhcnRgLCB0aGVuIHRoZSByZXR1cm5lZCBsaXN0IGlzIGVtcHR5LgogICAqLwogIFVpbnQ2NExpc3Qgc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSk7CgogIHN0YXRpYyBjb25zdCBpbnQgYnl0ZXNQZXJFbGVtZW50ID0gODsKfQoKLyoqCiAqIEEgZml4ZWQtbGVuZ3RoIGxpc3Qgb2YgSUVFRSA3NTQgc2luZ2xlLXByZWNpc2lvbiBiaW5hcnkgZmxvYXRpbmctcG9pbnQKICogbnVtYmVycyB0aGF0IGlzIHZpZXdhYmxlIGFzIGEgW1R5cGVkRGF0YV0uCiAqCiAqIEZvciBsb25nIGxpc3RzLCB0aGlzCiAqIGltcGxlbWVudGF0aW9uIGNhbiBiZSBjb25zaWRlcmFibHkgbW9yZSBzcGFjZS0gYW5kIHRpbWUtZWZmaWNpZW50IHRoYW4KICogdGhlIGRlZmF1bHQgW0xpc3RdIGltcGxlbWVudGF0aW9uLgogKgogKiBEb3VibGUgdmFsdWVzIHN0b3JlZCBpbiB0aGUgbGlzdCBhcmUgY29udmVydGVkIHRvIHRoZSBuZWFyZXN0CiAqIHNpbmdsZS1wcmVjaXNpb24gdmFsdWUuIFZhbHVlcyByZWFkIGFyZSBjb252ZXJ0ZWQgdG8gYSBkb3VibGUKICogdmFsdWUgd2l0aCB0aGUgc2FtZSB2YWx1ZS4KICovCmFic3RyYWN0IGNsYXNzIEZsb2F0MzJMaXN0IGltcGxlbWVudHMgTGlzdDxkb3VibGU+LCBfVHlwZWRGbG9hdExpc3QgewogIC8qKgogICAqIENyZWF0ZXMgYSBbRmxvYXQzMkxpc3RdIG9mIHRoZSBzcGVjaWZpZWQgbGVuZ3RoIChpbiBlbGVtZW50cyksIGFsbCBvZgogICAqIHdob3NlIGVsZW1lbnRzIGFyZSBpbml0aWFsbHkgemVyby4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IEZsb2F0MzJMaXN0KGludCBsZW5ndGgpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0Zsb2F0MzJMaXN0XSB3aXRoIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgW2VsZW1lbnRzXSBsaXN0CiAgICogYW5kIGNvcGllcyBvdmVyIHRoZSBlbGVtZW50cy4KICAgKgogICAqIFZhbHVlcyBhcmUgdHJ1bmNhdGVkIHRvIGZpdCBpbiB0aGUgbGlzdCB3aGVuIHRoZXkgYXJlIGNvcGllZCwKICAgKiB0aGUgc2FtZSB3YXkgc3RvcmluZyB2YWx1ZXMgdHJ1bmNhdGVzIHRoZW0uCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBGbG9hdDMyTGlzdC5mcm9tTGlzdChMaXN0PGRvdWJsZT4gZWxlbWVudHMpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0Zsb2F0MzJMaXN0XSBfdmlld18gb2YgdGhlIHNwZWNpZmllZCByZWdpb24gaW4gW2J1ZmZlcl0uCiAgICoKICAgKiBDaGFuZ2VzIGluIHRoZSBbRmxvYXQzMkxpc3RdIHdpbGwgYmUgdmlzaWJsZSBpbiB0aGUgYnl0ZQogICAqIGJ1ZmZlciBhbmQgdmljZSB2ZXJzYS4KICAgKiBJZiB0aGUgW29mZnNldEluQnl0ZXNdIGluZGV4IG9mIHRoZSByZWdpb24gaXMgbm90IHNwZWNpZmllZCwKICAgKiBpdCBkZWZhdWx0cyB0byB6ZXJvICh0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgYnl0ZSBidWZmZXIpLgogICAqIElmIHRoZSBsZW5ndGggaXMgbm90IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gYG51bGxgLAogICAqIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSB2aWV3IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBvciBbbGVuZ3RoXSBhcmUgbmVnYXRpdmUsIG9yCiAgICogaWYgW29mZnNldEluQnl0ZXNdICsgKFtsZW5ndGhdICogZWxlbWVudFNpemVJbkJ5dGVzKSBpcyBncmVhdGVyIHRoYW4KICAgKiB0aGUgbGVuZ3RoIG9mIFtidWZmZXJdLgogICAqCiAgICogVGhyb3dzIFtBcmd1bWVudEVycm9yXSBpZiBbb2Zmc2V0SW5CeXRlc10gaXMgbm90IGEgbXVsdGlwbGUgb2YKICAgKiBbYnl0ZXNQZXJFbGVtZW50XS4KICAgKi8KICBmYWN0b3J5IEZsb2F0MzJMaXN0LnZpZXcoQnl0ZUJ1ZmZlciBidWZmZXIsCiAgICAgIFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICByZXR1cm4gYnVmZmVyLmFzRmxvYXQzMkxpc3Qob2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgbGlzdCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBiZXR3ZWVuIFtzdGFydF0gYW5kIFtlbmRdLgogICAqCiAgICogVGhlIG5ldyBsaXN0IGlzIGEgYEZsb2F0MzJMaXN0YCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBvZiB0aGlzCiAgICogbGlzdCBhdCBwb3NpdGlvbnMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIFtzdGFydF0gYW5kIGxlc3MgdGhhbiBbZW5kXSBpbgogICAqIHRoZSBzYW1lIG9yZGVyIGFzIHRoZXkgb2NjdXIgaW4gdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHZhciBudW1iZXJzID0gRmxvYXQzMkxpc3QuZnJvbUxpc3QoWzAsIDEsIDIsIDMsIDRdKTsKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykpOyAvLyBbMSwgMl0KICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykucnVudGltZVR5cGUpOyAvLyBGbG9hdDMyTGlzdAogICAqIGBgYAogICAqCiAgICogSWYgW2VuZF0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGhlIFtsZW5ndGhdIG9mIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSkpOyAvLyBbMSwgMiwgMywgNF0KICAgKiBgYGAKICAgKgogICAqIFRoZSBgc3RhcnRgIGFuZCBgZW5kYCBwb3NpdGlvbnMgbXVzdCBzYXRpc2Z5IHRoZSByZWxhdGlvbnMKICAgKiAwIOKJpCBgc3RhcnRgIOKJpCBgZW5kYCDiiaQgYHRoaXMubGVuZ3RoYAogICAqIElmIGBlbmRgIGlzIGVxdWFsIHRvIGBzdGFydGAsIHRoZW4gdGhlIHJldHVybmVkIGxpc3QgaXMgZW1wdHkuCiAgICovCiAgRmxvYXQzMkxpc3Qgc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSk7CgogIHN0YXRpYyBjb25zdCBpbnQgYnl0ZXNQZXJFbGVtZW50ID0gNDsKfQoKLyoqCiAqIEEgZml4ZWQtbGVuZ3RoIGxpc3Qgb2YgSUVFRSA3NTQgZG91YmxlLXByZWNpc2lvbiBiaW5hcnkgZmxvYXRpbmctcG9pbnQKICogbnVtYmVycyAgdGhhdCBpcyB2aWV3YWJsZSBhcyBhIFtUeXBlZERhdGFdLgogKgogKiBGb3IgbG9uZyBsaXN0cywgdGhpcwogKiBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgY29uc2lkZXJhYmx5IG1vcmUgc3BhY2UtIGFuZCB0aW1lLWVmZmljaWVudCB0aGFuCiAqIHRoZSBkZWZhdWx0IFtMaXN0XSBpbXBsZW1lbnRhdGlvbi4KICovCmFic3RyYWN0IGNsYXNzIEZsb2F0NjRMaXN0IGltcGxlbWVudHMgTGlzdDxkb3VibGU+LCBfVHlwZWRGbG9hdExpc3QgewogIC8qKgogICAqIENyZWF0ZXMgYSBbRmxvYXQ2NExpc3RdIG9mIHRoZSBzcGVjaWZpZWQgbGVuZ3RoIChpbiBlbGVtZW50cyksIGFsbCBvZgogICAqIHdob3NlIGVsZW1lbnRzIGFyZSBpbml0aWFsbHkgemVyby4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IEZsb2F0NjRMaXN0KGludCBsZW5ndGgpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0Zsb2F0NjRMaXN0XSB3aXRoIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgW2VsZW1lbnRzXSBsaXN0CiAgICogYW5kIGNvcGllcyBvdmVyIHRoZSBlbGVtZW50cy4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IEZsb2F0NjRMaXN0LmZyb21MaXN0KExpc3Q8ZG91YmxlPiBlbGVtZW50cyk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbRmxvYXQ2NExpc3RdIF92aWV3XyBvZiB0aGUgc3BlY2lmaWVkIHJlZ2lvbiBpbiBbYnVmZmVyXS4KICAgKgogICAqIENoYW5nZXMgaW4gdGhlIFtGbG9hdDY0TGlzdF0gd2lsbCBiZSB2aXNpYmxlIGluIHRoZSBieXRlCiAgICogYnVmZmVyIGFuZCB2aWNlIHZlcnNhLgogICAqIElmIHRoZSBbb2Zmc2V0SW5CeXRlc10gaW5kZXggb2YgdGhlIHJlZ2lvbiBpcyBub3Qgc3BlY2lmaWVkLAogICAqIGl0IGRlZmF1bHRzIHRvIHplcm8gKHRoZSBmaXJzdCBieXRlIGluIHRoZSBieXRlIGJ1ZmZlcikuCiAgICogSWYgdGhlIGxlbmd0aCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBgbnVsbGAsCiAgICogd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIHZpZXcgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBieXRlIGJ1ZmZlci4KICAgKgogICAqIFRocm93cyBbUmFuZ2VFcnJvcl0gaWYgW29mZnNldEluQnl0ZXNdIG9yIFtsZW5ndGhdIGFyZSBuZWdhdGl2ZSwgb3IKICAgKiBpZiBbb2Zmc2V0SW5CeXRlc10gKyAoW2xlbmd0aF0gKiBlbGVtZW50U2l6ZUluQnl0ZXMpIGlzIGdyZWF0ZXIgdGhhbgogICAqIHRoZSBsZW5ndGggb2YgW2J1ZmZlcl0uCiAgICoKICAgKiBUaHJvd3MgW0FyZ3VtZW50RXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBpcyBub3QgYSBtdWx0aXBsZSBvZgogICAqIFtieXRlc1BlckVsZW1lbnRdLgogICAqLwogIGZhY3RvcnkgRmxvYXQ2NExpc3QudmlldyhCeXRlQnVmZmVyIGJ1ZmZlciwKICAgICAgW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIHJldHVybiBidWZmZXIuYXNGbG9hdDY0TGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIGJldHdlZW4gW3N0YXJ0XSBhbmQgW2VuZF0uCiAgICoKICAgKiBUaGUgbmV3IGxpc3QgaXMgYSBgRmxvYXQ2NExpc3RgIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIG9mIHRoaXMKICAgKiBsaXN0IGF0IHBvc2l0aW9ucyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gW3N0YXJ0XSBhbmQgbGVzcyB0aGFuIFtlbmRdIGluCiAgICogdGhlIHNhbWUgb3JkZXIgYXMgdGhleSBvY2N1ciBpbiB0aGlzIGxpc3QuCiAgICoKICAgKiBgYGBkYXJ0CiAgICogdmFyIG51bWJlcnMgPSBGbG9hdDY0TGlzdC5mcm9tTGlzdChbMCwgMSwgMiwgMywgNF0pOwogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxLCAzKSk7IC8vIFsxLCAyXQogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxLCAzKS5ydW50aW1lVHlwZSk7IC8vIEZsb2F0NjRMaXN0CiAgICogYGBgCiAgICoKICAgKiBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byB0aGUgW2xlbmd0aF0gb2YgdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxKSk7IC8vIFsxLCAyLCAzLCA0XQogICAqIGBgYAogICAqCiAgICogVGhlIGBzdGFydGAgYW5kIGBlbmRgIHBvc2l0aW9ucyBtdXN0IHNhdGlzZnkgdGhlIHJlbGF0aW9ucwogICAqIDAg4omkIGBzdGFydGAg4omkIGBlbmRgIOKJpCBgdGhpcy5sZW5ndGhgCiAgICogSWYgYGVuZGAgaXMgZXF1YWwgdG8gYHN0YXJ0YCwgdGhlbiB0aGUgcmV0dXJuZWQgbGlzdCBpcyBlbXB0eS4KICAgKi8KICBGbG9hdDY0TGlzdCBzdWJsaXN0KGludCBzdGFydCwgW2ludCBlbmRdKTsKCiAgc3RhdGljIGNvbnN0IGludCBieXRlc1BlckVsZW1lbnQgPSA4Owp9CgovKioKICogQSBmaXhlZC1sZW5ndGggbGlzdCBvZiBGbG9hdDMyeDQgbnVtYmVycyB0aGF0IGlzIHZpZXdhYmxlIGFzIGEKICogW1R5cGVkRGF0YV0uCiAqCiAqIEZvciBsb25nIGxpc3RzLCB0aGlzIGltcGxlbWVudGF0aW9uIHdpbGwgYmUgY29uc2lkZXJhYmx5IG1vcmUKICogc3BhY2UtIGFuZCB0aW1lLWVmZmljaWVudCB0aGFuIHRoZSBkZWZhdWx0IFtMaXN0XSBpbXBsZW1lbnRhdGlvbi4KICovCmFic3RyYWN0IGNsYXNzIEZsb2F0MzJ4NExpc3QgaW1wbGVtZW50cyBMaXN0PEZsb2F0MzJ4ND4sIFR5cGVkRGF0YSB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIFtGbG9hdDMyeDRMaXN0XSBvZiB0aGUgc3BlY2lmaWVkIGxlbmd0aCAoaW4gZWxlbWVudHMpLAogICAqIGFsbCBvZiB3aG9zZSBlbGVtZW50cyBhcmUgaW5pdGlhbGx5IHplcm8uCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBGbG9hdDMyeDRMaXN0KGludCBsZW5ndGgpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0Zsb2F0MzJ4NExpc3RdIHdpdGggdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBbZWxlbWVudHNdIGxpc3QKICAgKiBhbmQgY29waWVzIG92ZXIgdGhlIGVsZW1lbnRzLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgRmxvYXQzMng0TGlzdC5mcm9tTGlzdChMaXN0PEZsb2F0MzJ4ND4gZWxlbWVudHMpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0Zsb2F0MzJ4NExpc3RdIF92aWV3XyBvZiB0aGUgc3BlY2lmaWVkIHJlZ2lvbiBpbiBbYnVmZmVyXS4KICAgKgogICAqIENoYW5nZXMgaW4gdGhlIFtGbG9hdDMyeDRMaXN0XSB3aWxsIGJlIHZpc2libGUgaW4gdGhlIGJ5dGUKICAgKiBidWZmZXIgYW5kIHZpY2UgdmVyc2EuCiAgICogSWYgdGhlIFtvZmZzZXRJbkJ5dGVzXSBpbmRleCBvZiB0aGUgcmVnaW9uIGlzIG5vdCBzcGVjaWZpZWQsCiAgICogaXQgZGVmYXVsdHMgdG8gemVybyAodGhlIGZpcnN0IGJ5dGUgaW4gdGhlIGJ5dGUgYnVmZmVyKS4KICAgKiBJZiB0aGUgbGVuZ3RoIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvIGBudWxsYCwKICAgKiB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgdmlldyBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhlIGJ5dGUgYnVmZmVyLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbb2Zmc2V0SW5CeXRlc10gb3IgW2xlbmd0aF0gYXJlIG5lZ2F0aXZlLCBvcgogICAqIGlmIFtvZmZzZXRJbkJ5dGVzXSArIChbbGVuZ3RoXSAqIGVsZW1lbnRTaXplSW5CeXRlcykgaXMgZ3JlYXRlciB0aGFuCiAgICogdGhlIGxlbmd0aCBvZiBbYnVmZmVyXS4KICAgKgogICAqIFRocm93cyBbQXJndW1lbnRFcnJvcl0gaWYgW29mZnNldEluQnl0ZXNdIGlzIG5vdCBhIG11bHRpcGxlIG9mCiAgICogW2J5dGVzUGVyRWxlbWVudF0uCiAgICovCiAgZmFjdG9yeSBGbG9hdDMyeDRMaXN0LnZpZXcoQnl0ZUJ1ZmZlciBidWZmZXIsCiAgICAgIFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICByZXR1cm4gYnVmZmVyLmFzRmxvYXQzMng0TGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGlzIGxpc3QgYW5kIFtvdGhlcl0uCiAgICoKICAgKiBJZiBbb3RoZXJdIGlzIGFsc28gYSBbRmxvYXQzMng0TGlzdF0sIHRoZSByZXN1bHQgaXMgYSBuZXcgW0Zsb2F0MzJ4NExpc3RdLAogICAqIG90aGVyd2lzZSB0aGUgcmVzdWx0IGlzIGEgbm9ybWFsIGdyb3dhYmxlIGBMaXN0PEZsb2F0MzJ4ND5gLgogICAqLwogIExpc3Q8RmxvYXQzMng0PiBvcGVyYXRvciArKExpc3Q8RmxvYXQzMng0PiBvdGhlcik7CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgbGlzdCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBiZXR3ZWVuIFtzdGFydF0gYW5kIFtlbmRdLgogICAqCiAgICogVGhlIG5ldyBsaXN0IGlzIGEgYEZsb2F0MzJ4NExpc3RgIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIG9mIHRoaXMKICAgKiBsaXN0IGF0IHBvc2l0aW9ucyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gW3N0YXJ0XSBhbmQgbGVzcyB0aGFuIFtlbmRdIGluCiAgICogdGhlIHNhbWUgb3JkZXIgYXMgdGhleSBvY2N1ciBpbiB0aGlzIGxpc3QuCiAgICoKICAgKiBgYGBkYXJ0CiAgICogdmFyIG51bWJlcnMgPSBGbG9hdDMyeDRMaXN0LmZyb21MaXN0KFswLCAxLCAyLCAzLCA0XSk7CiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpKTsgLy8gWzEsIDJdCiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpLnJ1bnRpbWVUeXBlKTsgLy8gRmxvYXQzMng0TGlzdAogICAqIGBgYAogICAqCiAgICogSWYgW2VuZF0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGhlIFtsZW5ndGhdIG9mIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSkpOyAvLyBbMSwgMiwgMywgNF0KICAgKiBgYGAKICAgKgogICAqIFRoZSBgc3RhcnRgIGFuZCBgZW5kYCBwb3NpdGlvbnMgbXVzdCBzYXRpc2Z5IHRoZSByZWxhdGlvbnMKICAgKiAwIOKJpCBgc3RhcnRgIOKJpCBgZW5kYCDiiaQgYHRoaXMubGVuZ3RoYAogICAqIElmIGBlbmRgIGlzIGVxdWFsIHRvIGBzdGFydGAsIHRoZW4gdGhlIHJldHVybmVkIGxpc3QgaXMgZW1wdHkuCiAgICovCiAgRmxvYXQzMng0TGlzdCBzdWJsaXN0KGludCBzdGFydCwgW2ludCBlbmRdKTsKCiAgc3RhdGljIGNvbnN0IGludCBieXRlc1BlckVsZW1lbnQgPSAxNjsKfQoKLyoqCiAqIEEgZml4ZWQtbGVuZ3RoIGxpc3Qgb2YgSW50MzJ4NCBudW1iZXJzIHRoYXQgaXMgdmlld2FibGUgYXMgYQogKiBbVHlwZWREYXRhXS4KICoKICogRm9yIGxvbmcgbGlzdHMsIHRoaXMgaW1wbGVtZW50YXRpb24gd2lsbCBiZSBjb25zaWRlcmFibHkgbW9yZQogKiBzcGFjZS0gYW5kIHRpbWUtZWZmaWNpZW50IHRoYW4gdGhlIGRlZmF1bHQgW0xpc3RdIGltcGxlbWVudGF0aW9uLgogKi8KYWJzdHJhY3QgY2xhc3MgSW50MzJ4NExpc3QgaW1wbGVtZW50cyBMaXN0PEludDMyeDQ+LCBUeXBlZERhdGEgewogIC8qKgogICAqIENyZWF0ZXMgYSBbSW50MzJ4NExpc3RdIG9mIHRoZSBzcGVjaWZpZWQgbGVuZ3RoIChpbiBlbGVtZW50cyksCiAgICogYWxsIG9mIHdob3NlIGVsZW1lbnRzIGFyZSBpbml0aWFsbHkgemVyby4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IEludDMyeDRMaXN0KGludCBsZW5ndGgpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0ludDMyeDRMaXN0XSB3aXRoIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgW2VsZW1lbnRzXSBsaXN0CiAgICogYW5kIGNvcGllcyBvdmVyIHRoZSBlbGVtZW50cy4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IEludDMyeDRMaXN0LmZyb21MaXN0KExpc3Q8SW50MzJ4ND4gZWxlbWVudHMpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0ludDMyeDRMaXN0XSBfdmlld18gb2YgdGhlIHNwZWNpZmllZCByZWdpb24gaW4gW2J1ZmZlcl0uCiAgICoKICAgKiBDaGFuZ2VzIGluIHRoZSBbSW50MzJ4NExpc3RdIHdpbGwgYmUgdmlzaWJsZSBpbiB0aGUgYnl0ZQogICAqIGJ1ZmZlciBhbmQgdmljZSB2ZXJzYS4KICAgKiBJZiB0aGUgW29mZnNldEluQnl0ZXNdIGluZGV4IG9mIHRoZSByZWdpb24gaXMgbm90IHNwZWNpZmllZCwKICAgKiBpdCBkZWZhdWx0cyB0byB6ZXJvICh0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgYnl0ZSBidWZmZXIpLgogICAqIElmIHRoZSBsZW5ndGggaXMgbm90IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gYG51bGxgLAogICAqIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSB2aWV3IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgYnl0ZSBidWZmZXIuCiAgICoKICAgKiBUaHJvd3MgW1JhbmdlRXJyb3JdIGlmIFtvZmZzZXRJbkJ5dGVzXSBvciBbbGVuZ3RoXSBhcmUgbmVnYXRpdmUsIG9yCiAgICogaWYgW29mZnNldEluQnl0ZXNdICsgKFtsZW5ndGhdICogZWxlbWVudFNpemVJbkJ5dGVzKSBpcyBncmVhdGVyIHRoYW4KICAgKiB0aGUgbGVuZ3RoIG9mIFtidWZmZXJdLgogICAqCiAgICogVGhyb3dzIFtBcmd1bWVudEVycm9yXSBpZiBbb2Zmc2V0SW5CeXRlc10gaXMgbm90IGEgbXVsdGlwbGUgb2YKICAgKiBbYnl0ZXNQZXJFbGVtZW50XS4KICAgKi8KICBmYWN0b3J5IEludDMyeDRMaXN0LnZpZXcoQnl0ZUJ1ZmZlciBidWZmZXIsCiAgICAgIFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICByZXR1cm4gYnVmZmVyLmFzSW50MzJ4NExpc3Qob2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhpcyBsaXN0IGFuZCBbb3RoZXJdLgogICAqCiAgICogSWYgW290aGVyXSBpcyBhbHNvIGEgW0ludDMyeDRMaXN0XSwgdGhlIHJlc3VsdCBpcyBhIG5ldyBbSW50MzJ4NExpc3RdLAogICAqIG90aGVyd2lzZSB0aGUgcmVzdWx0IGlzIGEgbm9ybWFsIGdyb3dhYmxlIGBMaXN0PEludDMyeDQ+YC4KICAgKi8KICBMaXN0PEludDMyeDQ+IG9wZXJhdG9yICsoTGlzdDxJbnQzMng0PiBvdGhlcik7CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgbGlzdCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBiZXR3ZWVuIFtzdGFydF0gYW5kIFtlbmRdLgogICAqCiAgICogVGhlIG5ldyBsaXN0IGlzIGFuIGBJbnQzMng0bGlzdGAgY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcwogICAqIGxpc3QgYXQgcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBbc3RhcnRdIGFuZCBsZXNzIHRoYW4gW2VuZF0gaW4KICAgKiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IG9jY3VyIGluIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiB2YXIgbnVtYmVycyA9IEludDMyeDRsaXN0LmZyb21MaXN0KFswLCAxLCAyLCAzLCA0XSk7CiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpKTsgLy8gWzEsIDJdCiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEsIDMpLnJ1bnRpbWVUeXBlKTsgLy8gSW50MzJ4NGxpc3QKICAgKiBgYGAKICAgKgogICAqIElmIFtlbmRdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHRoZSBbbGVuZ3RoXSBvZiB0aGlzIGxpc3QuCiAgICoKICAgKiBgYGBkYXJ0CiAgICogcHJpbnQobnVtYmVycy5zdWJsaXN0KDEpKTsgLy8gWzEsIDIsIDMsIDRdCiAgICogYGBgCiAgICoKICAgKiBUaGUgYHN0YXJ0YCBhbmQgYGVuZGAgcG9zaXRpb25zIG11c3Qgc2F0aXNmeSB0aGUgcmVsYXRpb25zCiAgICogMCDiiaQgYHN0YXJ0YCDiiaQgYGVuZGAg4omkIGB0aGlzLmxlbmd0aGAKICAgKiBJZiBgZW5kYCBpcyBlcXVhbCB0byBgc3RhcnRgLCB0aGVuIHRoZSByZXR1cm5lZCBsaXN0IGlzIGVtcHR5LgogICAqLwogIEludDMyeDRMaXN0IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pOwoKICBzdGF0aWMgY29uc3QgaW50IGJ5dGVzUGVyRWxlbWVudCA9IDE2Owp9CgovKioKICogQSBmaXhlZC1sZW5ndGggbGlzdCBvZiBGbG9hdDY0eDIgbnVtYmVycyB0aGF0IGlzIHZpZXdhYmxlIGFzIGEKICogW1R5cGVkRGF0YV0uCiAqCiAqIEZvciBsb25nIGxpc3RzLCB0aGlzIGltcGxlbWVudGF0aW9uIHdpbGwgYmUgY29uc2lkZXJhYmx5IG1vcmUKICogc3BhY2UtIGFuZCB0aW1lLWVmZmljaWVudCB0aGFuIHRoZSBkZWZhdWx0IFtMaXN0XSBpbXBsZW1lbnRhdGlvbi4KICovCmFic3RyYWN0IGNsYXNzIEZsb2F0NjR4Mkxpc3QgaW1wbGVtZW50cyBMaXN0PEZsb2F0NjR4Mj4sIFR5cGVkRGF0YSB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIFtGbG9hdDY0eDJMaXN0XSBvZiB0aGUgc3BlY2lmaWVkIGxlbmd0aCAoaW4gZWxlbWVudHMpLAogICAqIGFsbCBvZiB3aG9zZSBlbGVtZW50cyBoYXZlIGFsbCBsYW5lcyBzZXQgdG8gemVyby4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IEZsb2F0NjR4Mkxpc3QoaW50IGxlbmd0aCk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbRmxvYXQ2NHgyTGlzdF0gd2l0aCB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIFtlbGVtZW50c10gbGlzdAogICAqIGFuZCBjb3BpZXMgb3ZlciB0aGUgZWxlbWVudHMuCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBGbG9hdDY0eDJMaXN0LmZyb21MaXN0KExpc3Q8RmxvYXQ2NHgyPiBlbGVtZW50cyk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhpcyBsaXN0IGFuZCBbb3RoZXJdLgogICAqCiAgICogSWYgW290aGVyXSBpcyBhbHNvIGEgW0Zsb2F0NjR4Mkxpc3RdLCB0aGUgcmVzdWx0IGlzIGEgbmV3IFtGbG9hdDY0eDJMaXN0XSwKICAgKiBvdGhlcndpc2UgdGhlIHJlc3VsdCBpcyBhIG5vcm1hbCBncm93YWJsZSBgTGlzdDxGbG9hdDY0eDI+YC4KICAgKi8KICBMaXN0PEZsb2F0NjR4Mj4gb3BlcmF0b3IgKyhMaXN0PEZsb2F0NjR4Mj4gb3RoZXIpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0Zsb2F0NjR4Mkxpc3RdIF92aWV3XyBvZiB0aGUgc3BlY2lmaWVkIHJlZ2lvbiBpbiBbYnVmZmVyXS4KICAgKgogICAqIENoYW5nZXMgaW4gdGhlIFtGbG9hdDY0eDJMaXN0XSB3aWxsIGJlIHZpc2libGUgaW4gdGhlIGJ5dGUKICAgKiBidWZmZXIgYW5kIHZpY2UgdmVyc2EuCiAgICogSWYgdGhlIFtvZmZzZXRJbkJ5dGVzXSBpbmRleCBvZiB0aGUgcmVnaW9uIGlzIG5vdCBzcGVjaWZpZWQsCiAgICogaXQgZGVmYXVsdHMgdG8gemVybyAodGhlIGZpcnN0IGJ5dGUgaW4gdGhlIGJ5dGUgYnVmZmVyKS4KICAgKiBJZiB0aGUgbGVuZ3RoIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvIGBudWxsYCwKICAgKiB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgdmlldyBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhlIGJ5dGUgYnVmZmVyLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbb2Zmc2V0SW5CeXRlc10gb3IgW2xlbmd0aF0gYXJlIG5lZ2F0aXZlLCBvcgogICAqIGlmIFtvZmZzZXRJbkJ5dGVzXSArIChbbGVuZ3RoXSAqIGVsZW1lbnRTaXplSW5CeXRlcykgaXMgZ3JlYXRlciB0aGFuCiAgICogdGhlIGxlbmd0aCBvZiBbYnVmZmVyXS4KICAgKgogICAqIFRocm93cyBbQXJndW1lbnRFcnJvcl0gaWYgW29mZnNldEluQnl0ZXNdIGlzIG5vdCBhIG11bHRpcGxlIG9mCiAgICogW2J5dGVzUGVyRWxlbWVudF0uCiAgICovCiAgZmFjdG9yeSBGbG9hdDY0eDJMaXN0LnZpZXcoQnl0ZUJ1ZmZlciBidWZmZXIsCiAgICAgIFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICByZXR1cm4gYnVmZmVyLmFzRmxvYXQ2NHgyTGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIGJldHdlZW4gW3N0YXJ0XSBhbmQgW2VuZF0uCiAgICoKICAgKiBUaGUgbmV3IGxpc3QgaXMgYSBgRmxvYXQ2NHgyTGlzdGAgY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcwogICAqIGxpc3QgYXQgcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBbc3RhcnRdIGFuZCBsZXNzIHRoYW4gW2VuZF0gaW4KICAgKiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IG9jY3VyIGluIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiB2YXIgbnVtYmVycyA9IEZsb2F0NjR4Mkxpc3QuZnJvbUxpc3QoWzAsIDEsIDIsIDMsIDRdKTsKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykpOyAvLyBbMSwgMl0KICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykucnVudGltZVR5cGUpOyAvLyBGbG9hdDY0eDJMaXN0CiAgICogYGBgCiAgICoKICAgKiBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byB0aGUgW2xlbmd0aF0gb2YgdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxKSk7IC8vIFsxLCAyLCAzLCA0XQogICAqIGBgYAogICAqCiAgICogVGhlIGBzdGFydGAgYW5kIGBlbmRgIHBvc2l0aW9ucyBtdXN0IHNhdGlzZnkgdGhlIHJlbGF0aW9ucwogICAqIDAg4omkIGBzdGFydGAg4omkIGBlbmRgIOKJpCBgdGhpcy5sZW5ndGhgCiAgICogSWYgYGVuZGAgaXMgZXF1YWwgdG8gYHN0YXJ0YCwgdGhlbiB0aGUgcmV0dXJuZWQgbGlzdCBpcyBlbXB0eS4KICAgKi8KICBGbG9hdDY0eDJMaXN0IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pOwoKICBzdGF0aWMgY29uc3QgaW50IGJ5dGVzUGVyRWxlbWVudCA9IDE2Owp9CgovKioKICogRmxvYXQzMng0IGltbXV0YWJsZSB2YWx1ZSB0eXBlIGFuZCBvcGVyYXRpb25zLgogKgogKiBGbG9hdDMyeDQgc3RvcmVzIDQgMzItYml0IGZsb2F0aW5nIHBvaW50IHZhbHVlcyBpbiAibGFuZXMiLgogKiBUaGUgbGFuZXMgYXJlICJ4IiwgInkiLCAieiIsIGFuZCAidyIgcmVzcGVjdGl2ZWx5LgogKi8KYWJzdHJhY3QgY2xhc3MgRmxvYXQzMng0IHsKICBleHRlcm5hbCBmYWN0b3J5IEZsb2F0MzJ4NChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6LCBkb3VibGUgdyk7CiAgZXh0ZXJuYWwgZmFjdG9yeSBGbG9hdDMyeDQuc3BsYXQoZG91YmxlIHYpOwogIGV4dGVybmFsIGZhY3RvcnkgRmxvYXQzMng0Lnplcm8oKTsKICBleHRlcm5hbCBmYWN0b3J5IEZsb2F0MzJ4NC5mcm9tSW50MzJ4NEJpdHMoSW50MzJ4NCB4KTsKCiAgLy8vIFNldHMgdGhlIHggYW5kIHkgbGFuZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSB2YWx1ZXMgaW4gW3ZdIGFuZCBzZXRzIHRoZSB6CiAgLy8vIGFuZCB3IGxhbmVzIHRvIDAuMC4KICBleHRlcm5hbCBmYWN0b3J5IEZsb2F0MzJ4NC5mcm9tRmxvYXQ2NHgyKEZsb2F0NjR4MiB2KTsKCiAgLy8vIEFkZGl0aW9uIG9wZXJhdG9yLgogIEZsb2F0MzJ4NCBvcGVyYXRvciArKEZsb2F0MzJ4NCBvdGhlcik7CgogIC8vLyBOZWdhdGUgb3BlcmF0b3IuCiAgRmxvYXQzMng0IG9wZXJhdG9yIC0oKTsKCiAgLy8vIFN1YnRyYWN0aW9uIG9wZXJhdG9yLgogIEZsb2F0MzJ4NCBvcGVyYXRvciAtKEZsb2F0MzJ4NCBvdGhlcik7CgogIC8vLyBNdWx0aXBsaWNhdGlvbiBvcGVyYXRvci4KICBGbG9hdDMyeDQgb3BlcmF0b3IgKihGbG9hdDMyeDQgb3RoZXIpOwoKICAvLy8gRGl2aXNpb24gb3BlcmF0b3IuCiAgRmxvYXQzMng0IG9wZXJhdG9yIC8oRmxvYXQzMng0IG90aGVyKTsKCiAgLy8vIFJlbGF0aW9uYWwgbGVzcyB0aGFuLgogIEludDMyeDQgbGVzc1RoYW4oRmxvYXQzMng0IG90aGVyKTsKCiAgLy8vIFJlbGF0aW9uYWwgbGVzcyB0aGFuIG9yIGVxdWFsLgogIEludDMyeDQgbGVzc1RoYW5PckVxdWFsKEZsb2F0MzJ4NCBvdGhlcik7CgogIC8vLyBSZWxhdGlvbmFsIGdyZWF0ZXIgdGhhbi4KICBJbnQzMng0IGdyZWF0ZXJUaGFuKEZsb2F0MzJ4NCBvdGhlcik7CgogIC8vLyBSZWxhdGlvbmFsIGdyZWF0ZXIgdGhhbiBvciBlcXVhbC4KICBJbnQzMng0IGdyZWF0ZXJUaGFuT3JFcXVhbChGbG9hdDMyeDQgb3RoZXIpOwoKICAvLy8gUmVsYXRpb25hbCBlcXVhbC4KICBJbnQzMng0IGVxdWFsKEZsb2F0MzJ4NCBvdGhlcik7CgogIC8vLyBSZWxhdGlvbmFsIG5vdC1lcXVhbC4KICBJbnQzMng0IG5vdEVxdWFsKEZsb2F0MzJ4NCBvdGhlcik7CgogIC8vLyBSZXR1cm5zIGEgY29weSBvZiBbdGhpc10gZWFjaCBsYW5lIGJlaW5nIHNjYWxlZCBieSBbc10uCiAgLy8vIEVxdWl2YWxlbnQgdG8gdGhpcyAqIG5ldyBGbG9hdDMyeDQuc3BsYXQocykKICBGbG9hdDMyeDQgc2NhbGUoZG91YmxlIHMpOwoKICAvLy8gUmV0dXJucyB0aGUgbGFuZS13aXNlIGFic29sdXRlIHZhbHVlIG9mIHRoaXMgW0Zsb2F0MzJ4NF0uCiAgRmxvYXQzMng0IGFicygpOwoKICAvLy8gTGFuZS13aXNlIGNsYW1wIFt0aGlzXSB0byBiZSBpbiB0aGUgcmFuZ2UgW2xvd2VyTGltaXRdLVt1cHBlckxpbWl0XS4KICBGbG9hdDMyeDQgY2xhbXAoRmxvYXQzMng0IGxvd2VyTGltaXQsIEZsb2F0MzJ4NCB1cHBlckxpbWl0KTsKCiAgLy8vIEV4dHJhY3RlZCB4IHZhbHVlLgogIGRvdWJsZSBnZXQgeDsKCiAgLy8vIEV4dHJhY3RlZCB5IHZhbHVlLgogIGRvdWJsZSBnZXQgeTsKCiAgLy8vIEV4dHJhY3RlZCB6IHZhbHVlLgogIGRvdWJsZSBnZXQgejsKCiAgLy8vIEV4dHJhY3RlZCB3IHZhbHVlLgogIGRvdWJsZSBnZXQgdzsKCiAgLy8vIEV4dHJhY3QgdGhlIHNpZ24gYml0cyBmcm9tIGVhY2ggbGFuZSByZXR1cm4gdGhlbSBpbiB0aGUgZmlyc3QgNCBiaXRzLgogIC8vLyAieCIgbGFuZSBpcyBiaXQgMC4KICAvLy8gInkiIGxhbmUgaXMgYml0IDEuCiAgLy8vICJ6IiBsYW5lIGlzIGJpdCAyLgogIC8vLyAidyIgbGFuZSBpcyBiaXQgMy4KICBpbnQgZ2V0IHNpZ25NYXNrOwoKICAvLy8gTWFzayBwYXNzZWQgdG8gW3NodWZmbGVdIG9yIFtzaHVmZmxlTWl4XS4KICBzdGF0aWMgY29uc3QgaW50IHh4eHggPSAweDA7CiAgc3RhdGljIGNvbnN0IGludCB4eHh5ID0gMHg0MDsKICBzdGF0aWMgY29uc3QgaW50IHh4eHogPSAweDgwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh4dyA9IDB4QzA7CiAgc3RhdGljIGNvbnN0IGludCB4eHl4ID0gMHgxMDsKICBzdGF0aWMgY29uc3QgaW50IHh4eXkgPSAweDUwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh5eiA9IDB4OTA7CiAgc3RhdGljIGNvbnN0IGludCB4eHl3ID0gMHhEMDsKICBzdGF0aWMgY29uc3QgaW50IHh4enggPSAweDIwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh6eSA9IDB4NjA7CiAgc3RhdGljIGNvbnN0IGludCB4eHp6ID0gMHhBMDsKICBzdGF0aWMgY29uc3QgaW50IHh4encgPSAweEUwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh3eCA9IDB4MzA7CiAgc3RhdGljIGNvbnN0IGludCB4eHd5ID0gMHg3MDsKICBzdGF0aWMgY29uc3QgaW50IHh4d3ogPSAweEIwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh3dyA9IDB4RjA7CiAgc3RhdGljIGNvbnN0IGludCB4eXh4ID0gMHg0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl4eSA9IDB4NDQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXh6ID0gMHg4NDsKICBzdGF0aWMgY29uc3QgaW50IHh5eHcgPSAweEM0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl5eCA9IDB4MTQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXl5ID0gMHg1NDsKICBzdGF0aWMgY29uc3QgaW50IHh5eXogPSAweDk0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl5dyA9IDB4RDQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXp4ID0gMHgyNDsKICBzdGF0aWMgY29uc3QgaW50IHh5enkgPSAweDY0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl6eiA9IDB4QTQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXp3ID0gMHhFNDsKICBzdGF0aWMgY29uc3QgaW50IHh5d3ggPSAweDM0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl3eSA9IDB4NzQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXd6ID0gMHhCNDsKICBzdGF0aWMgY29uc3QgaW50IHh5d3cgPSAweEY0OwogIHN0YXRpYyBjb25zdCBpbnQgeHp4eCA9IDB4ODsKICBzdGF0aWMgY29uc3QgaW50IHh6eHkgPSAweDQ4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp4eiA9IDB4ODg7CiAgc3RhdGljIGNvbnN0IGludCB4enh3ID0gMHhDODsKICBzdGF0aWMgY29uc3QgaW50IHh6eXggPSAweDE4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp5eSA9IDB4NTg7CiAgc3RhdGljIGNvbnN0IGludCB4enl6ID0gMHg5ODsKICBzdGF0aWMgY29uc3QgaW50IHh6eXcgPSAweEQ4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp6eCA9IDB4Mjg7CiAgc3RhdGljIGNvbnN0IGludCB4enp5ID0gMHg2ODsKICBzdGF0aWMgY29uc3QgaW50IHh6enogPSAweEE4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp6dyA9IDB4RTg7CiAgc3RhdGljIGNvbnN0IGludCB4end4ID0gMHgzODsKICBzdGF0aWMgY29uc3QgaW50IHh6d3kgPSAweDc4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp3eiA9IDB4Qjg7CiAgc3RhdGljIGNvbnN0IGludCB4end3ID0gMHhGODsKICBzdGF0aWMgY29uc3QgaW50IHh3eHggPSAweEM7CiAgc3RhdGljIGNvbnN0IGludCB4d3h5ID0gMHg0QzsKICBzdGF0aWMgY29uc3QgaW50IHh3eHogPSAweDhDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd4dyA9IDB4Q0M7CiAgc3RhdGljIGNvbnN0IGludCB4d3l4ID0gMHgxQzsKICBzdGF0aWMgY29uc3QgaW50IHh3eXkgPSAweDVDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd5eiA9IDB4OUM7CiAgc3RhdGljIGNvbnN0IGludCB4d3l3ID0gMHhEQzsKICBzdGF0aWMgY29uc3QgaW50IHh3enggPSAweDJDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd6eSA9IDB4NkM7CiAgc3RhdGljIGNvbnN0IGludCB4d3p6ID0gMHhBQzsKICBzdGF0aWMgY29uc3QgaW50IHh3encgPSAweEVDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd3eCA9IDB4M0M7CiAgc3RhdGljIGNvbnN0IGludCB4d3d5ID0gMHg3QzsKICBzdGF0aWMgY29uc3QgaW50IHh3d3ogPSAweEJDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd3dyA9IDB4RkM7CiAgc3RhdGljIGNvbnN0IGludCB5eHh4ID0gMHgxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh4eSA9IDB4NDE7CiAgc3RhdGljIGNvbnN0IGludCB5eHh6ID0gMHg4MTsKICBzdGF0aWMgY29uc3QgaW50IHl4eHcgPSAweEMxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh5eCA9IDB4MTE7CiAgc3RhdGljIGNvbnN0IGludCB5eHl5ID0gMHg1MTsKICBzdGF0aWMgY29uc3QgaW50IHl4eXogPSAweDkxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh5dyA9IDB4RDE7CiAgc3RhdGljIGNvbnN0IGludCB5eHp4ID0gMHgyMTsKICBzdGF0aWMgY29uc3QgaW50IHl4enkgPSAweDYxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh6eiA9IDB4QTE7CiAgc3RhdGljIGNvbnN0IGludCB5eHp3ID0gMHhFMTsKICBzdGF0aWMgY29uc3QgaW50IHl4d3ggPSAweDMxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh3eSA9IDB4NzE7CiAgc3RhdGljIGNvbnN0IGludCB5eHd6ID0gMHhCMTsKICBzdGF0aWMgY29uc3QgaW50IHl4d3cgPSAweEYxOwogIHN0YXRpYyBjb25zdCBpbnQgeXl4eCA9IDB4NTsKICBzdGF0aWMgY29uc3QgaW50IHl5eHkgPSAweDQ1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl4eiA9IDB4ODU7CiAgc3RhdGljIGNvbnN0IGludCB5eXh3ID0gMHhDNTsKICBzdGF0aWMgY29uc3QgaW50IHl5eXggPSAweDE1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl5eSA9IDB4NTU7CiAgc3RhdGljIGNvbnN0IGludCB5eXl6ID0gMHg5NTsKICBzdGF0aWMgY29uc3QgaW50IHl5eXcgPSAweEQ1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl6eCA9IDB4MjU7CiAgc3RhdGljIGNvbnN0IGludCB5eXp5ID0gMHg2NTsKICBzdGF0aWMgY29uc3QgaW50IHl5enogPSAweEE1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl6dyA9IDB4RTU7CiAgc3RhdGljIGNvbnN0IGludCB5eXd4ID0gMHgzNTsKICBzdGF0aWMgY29uc3QgaW50IHl5d3kgPSAweDc1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl3eiA9IDB4QjU7CiAgc3RhdGljIGNvbnN0IGludCB5eXd3ID0gMHhGNTsKICBzdGF0aWMgY29uc3QgaW50IHl6eHggPSAweDk7CiAgc3RhdGljIGNvbnN0IGludCB5enh5ID0gMHg0OTsKICBzdGF0aWMgY29uc3QgaW50IHl6eHogPSAweDg5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp4dyA9IDB4Qzk7CiAgc3RhdGljIGNvbnN0IGludCB5enl4ID0gMHgxOTsKICBzdGF0aWMgY29uc3QgaW50IHl6eXkgPSAweDU5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp5eiA9IDB4OTk7CiAgc3RhdGljIGNvbnN0IGludCB5enl3ID0gMHhEOTsKICBzdGF0aWMgY29uc3QgaW50IHl6enggPSAweDI5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp6eSA9IDB4Njk7CiAgc3RhdGljIGNvbnN0IGludCB5enp6ID0gMHhBOTsKICBzdGF0aWMgY29uc3QgaW50IHl6encgPSAweEU5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp3eCA9IDB4Mzk7CiAgc3RhdGljIGNvbnN0IGludCB5end5ID0gMHg3OTsKICBzdGF0aWMgY29uc3QgaW50IHl6d3ogPSAweEI5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp3dyA9IDB4Rjk7CiAgc3RhdGljIGNvbnN0IGludCB5d3h4ID0gMHhEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd4eSA9IDB4NEQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3h6ID0gMHg4RDsKICBzdGF0aWMgY29uc3QgaW50IHl3eHcgPSAweENEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd5eCA9IDB4MUQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3l5ID0gMHg1RDsKICBzdGF0aWMgY29uc3QgaW50IHl3eXogPSAweDlEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd5dyA9IDB4REQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3p4ID0gMHgyRDsKICBzdGF0aWMgY29uc3QgaW50IHl3enkgPSAweDZEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd6eiA9IDB4QUQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3p3ID0gMHhFRDsKICBzdGF0aWMgY29uc3QgaW50IHl3d3ggPSAweDNEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd3eSA9IDB4N0Q7CiAgc3RhdGljIGNvbnN0IGludCB5d3d6ID0gMHhCRDsKICBzdGF0aWMgY29uc3QgaW50IHl3d3cgPSAweEZEOwogIHN0YXRpYyBjb25zdCBpbnQgenh4eCA9IDB4MjsKICBzdGF0aWMgY29uc3QgaW50IHp4eHkgPSAweDQyOwogIHN0YXRpYyBjb25zdCBpbnQgenh4eiA9IDB4ODI7CiAgc3RhdGljIGNvbnN0IGludCB6eHh3ID0gMHhDMjsKICBzdGF0aWMgY29uc3QgaW50IHp4eXggPSAweDEyOwogIHN0YXRpYyBjb25zdCBpbnQgenh5eSA9IDB4NTI7CiAgc3RhdGljIGNvbnN0IGludCB6eHl6ID0gMHg5MjsKICBzdGF0aWMgY29uc3QgaW50IHp4eXcgPSAweEQyOwogIHN0YXRpYyBjb25zdCBpbnQgenh6eCA9IDB4MjI7CiAgc3RhdGljIGNvbnN0IGludCB6eHp5ID0gMHg2MjsKICBzdGF0aWMgY29uc3QgaW50IHp4enogPSAweEEyOwogIHN0YXRpYyBjb25zdCBpbnQgenh6dyA9IDB4RTI7CiAgc3RhdGljIGNvbnN0IGludCB6eHd4ID0gMHgzMjsKICBzdGF0aWMgY29uc3QgaW50IHp4d3kgPSAweDcyOwogIHN0YXRpYyBjb25zdCBpbnQgenh3eiA9IDB4QjI7CiAgc3RhdGljIGNvbnN0IGludCB6eHd3ID0gMHhGMjsKICBzdGF0aWMgY29uc3QgaW50IHp5eHggPSAweDY7CiAgc3RhdGljIGNvbnN0IGludCB6eXh5ID0gMHg0NjsKICBzdGF0aWMgY29uc3QgaW50IHp5eHogPSAweDg2OwogIHN0YXRpYyBjb25zdCBpbnQgenl4dyA9IDB4QzY7CiAgc3RhdGljIGNvbnN0IGludCB6eXl4ID0gMHgxNjsKICBzdGF0aWMgY29uc3QgaW50IHp5eXkgPSAweDU2OwogIHN0YXRpYyBjb25zdCBpbnQgenl5eiA9IDB4OTY7CiAgc3RhdGljIGNvbnN0IGludCB6eXl3ID0gMHhENjsKICBzdGF0aWMgY29uc3QgaW50IHp5enggPSAweDI2OwogIHN0YXRpYyBjb25zdCBpbnQgenl6eSA9IDB4NjY7CiAgc3RhdGljIGNvbnN0IGludCB6eXp6ID0gMHhBNjsKICBzdGF0aWMgY29uc3QgaW50IHp5encgPSAweEU2OwogIHN0YXRpYyBjb25zdCBpbnQgenl3eCA9IDB4MzY7CiAgc3RhdGljIGNvbnN0IGludCB6eXd5ID0gMHg3NjsKICBzdGF0aWMgY29uc3QgaW50IHp5d3ogPSAweEI2OwogIHN0YXRpYyBjb25zdCBpbnQgenl3dyA9IDB4RjY7CiAgc3RhdGljIGNvbnN0IGludCB6enh4ID0gMHhBOwogIHN0YXRpYyBjb25zdCBpbnQgenp4eSA9IDB4NEE7CiAgc3RhdGljIGNvbnN0IGludCB6enh6ID0gMHg4QTsKICBzdGF0aWMgY29uc3QgaW50IHp6eHcgPSAweENBOwogIHN0YXRpYyBjb25zdCBpbnQgenp5eCA9IDB4MUE7CiAgc3RhdGljIGNvbnN0IGludCB6enl5ID0gMHg1QTsKICBzdGF0aWMgY29uc3QgaW50IHp6eXogPSAweDlBOwogIHN0YXRpYyBjb25zdCBpbnQgenp5dyA9IDB4REE7CiAgc3RhdGljIGNvbnN0IGludCB6enp4ID0gMHgyQTsKICBzdGF0aWMgY29uc3QgaW50IHp6enkgPSAweDZBOwogIHN0YXRpYyBjb25zdCBpbnQgenp6eiA9IDB4QUE7CiAgc3RhdGljIGNvbnN0IGludCB6enp3ID0gMHhFQTsKICBzdGF0aWMgY29uc3QgaW50IHp6d3ggPSAweDNBOwogIHN0YXRpYyBjb25zdCBpbnQgenp3eSA9IDB4N0E7CiAgc3RhdGljIGNvbnN0IGludCB6end6ID0gMHhCQTsKICBzdGF0aWMgY29uc3QgaW50IHp6d3cgPSAweEZBOwogIHN0YXRpYyBjb25zdCBpbnQgend4eCA9IDB4RTsKICBzdGF0aWMgY29uc3QgaW50IHp3eHkgPSAweDRFOwogIHN0YXRpYyBjb25zdCBpbnQgend4eiA9IDB4OEU7CiAgc3RhdGljIGNvbnN0IGludCB6d3h3ID0gMHhDRTsKICBzdGF0aWMgY29uc3QgaW50IHp3eXggPSAweDFFOwogIHN0YXRpYyBjb25zdCBpbnQgend5eSA9IDB4NUU7CiAgc3RhdGljIGNvbnN0IGludCB6d3l6ID0gMHg5RTsKICBzdGF0aWMgY29uc3QgaW50IHp3eXcgPSAweERFOwogIHN0YXRpYyBjb25zdCBpbnQgend6eCA9IDB4MkU7CiAgc3RhdGljIGNvbnN0IGludCB6d3p5ID0gMHg2RTsKICBzdGF0aWMgY29uc3QgaW50IHp3enogPSAweEFFOwogIHN0YXRpYyBjb25zdCBpbnQgend6dyA9IDB4RUU7CiAgc3RhdGljIGNvbnN0IGludCB6d3d4ID0gMHgzRTsKICBzdGF0aWMgY29uc3QgaW50IHp3d3kgPSAweDdFOwogIHN0YXRpYyBjb25zdCBpbnQgend3eiA9IDB4QkU7CiAgc3RhdGljIGNvbnN0IGludCB6d3d3ID0gMHhGRTsKICBzdGF0aWMgY29uc3QgaW50IHd4eHggPSAweDM7CiAgc3RhdGljIGNvbnN0IGludCB3eHh5ID0gMHg0MzsKICBzdGF0aWMgY29uc3QgaW50IHd4eHogPSAweDgzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h4dyA9IDB4QzM7CiAgc3RhdGljIGNvbnN0IGludCB3eHl4ID0gMHgxMzsKICBzdGF0aWMgY29uc3QgaW50IHd4eXkgPSAweDUzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h5eiA9IDB4OTM7CiAgc3RhdGljIGNvbnN0IGludCB3eHl3ID0gMHhEMzsKICBzdGF0aWMgY29uc3QgaW50IHd4enggPSAweDIzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h6eSA9IDB4NjM7CiAgc3RhdGljIGNvbnN0IGludCB3eHp6ID0gMHhBMzsKICBzdGF0aWMgY29uc3QgaW50IHd4encgPSAweEUzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h3eCA9IDB4MzM7CiAgc3RhdGljIGNvbnN0IGludCB3eHd5ID0gMHg3MzsKICBzdGF0aWMgY29uc3QgaW50IHd4d3ogPSAweEIzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h3dyA9IDB4RjM7CiAgc3RhdGljIGNvbnN0IGludCB3eXh4ID0gMHg3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l4eSA9IDB4NDc7CiAgc3RhdGljIGNvbnN0IGludCB3eXh6ID0gMHg4NzsKICBzdGF0aWMgY29uc3QgaW50IHd5eHcgPSAweEM3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l5eCA9IDB4MTc7CiAgc3RhdGljIGNvbnN0IGludCB3eXl5ID0gMHg1NzsKICBzdGF0aWMgY29uc3QgaW50IHd5eXogPSAweDk3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l5dyA9IDB4RDc7CiAgc3RhdGljIGNvbnN0IGludCB3eXp4ID0gMHgyNzsKICBzdGF0aWMgY29uc3QgaW50IHd5enkgPSAweDY3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l6eiA9IDB4QTc7CiAgc3RhdGljIGNvbnN0IGludCB3eXp3ID0gMHhFNzsKICBzdGF0aWMgY29uc3QgaW50IHd5d3ggPSAweDM3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l3eSA9IDB4Nzc7CiAgc3RhdGljIGNvbnN0IGludCB3eXd6ID0gMHhCNzsKICBzdGF0aWMgY29uc3QgaW50IHd5d3cgPSAweEY3OwogIHN0YXRpYyBjb25zdCBpbnQgd3p4eCA9IDB4QjsKICBzdGF0aWMgY29uc3QgaW50IHd6eHkgPSAweDRCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p4eiA9IDB4OEI7CiAgc3RhdGljIGNvbnN0IGludCB3enh3ID0gMHhDQjsKICBzdGF0aWMgY29uc3QgaW50IHd6eXggPSAweDFCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p5eSA9IDB4NUI7CiAgc3RhdGljIGNvbnN0IGludCB3enl6ID0gMHg5QjsKICBzdGF0aWMgY29uc3QgaW50IHd6eXcgPSAweERCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p6eCA9IDB4MkI7CiAgc3RhdGljIGNvbnN0IGludCB3enp5ID0gMHg2QjsKICBzdGF0aWMgY29uc3QgaW50IHd6enogPSAweEFCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p6dyA9IDB4RUI7CiAgc3RhdGljIGNvbnN0IGludCB3end4ID0gMHgzQjsKICBzdGF0aWMgY29uc3QgaW50IHd6d3kgPSAweDdCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p3eiA9IDB4QkI7CiAgc3RhdGljIGNvbnN0IGludCB3end3ID0gMHhGQjsKICBzdGF0aWMgY29uc3QgaW50IHd3eHggPSAweEY7CiAgc3RhdGljIGNvbnN0IGludCB3d3h5ID0gMHg0RjsKICBzdGF0aWMgY29uc3QgaW50IHd3eHogPSAweDhGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d4dyA9IDB4Q0Y7CiAgc3RhdGljIGNvbnN0IGludCB3d3l4ID0gMHgxRjsKICBzdGF0aWMgY29uc3QgaW50IHd3eXkgPSAweDVGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d5eiA9IDB4OUY7CiAgc3RhdGljIGNvbnN0IGludCB3d3l3ID0gMHhERjsKICBzdGF0aWMgY29uc3QgaW50IHd3enggPSAweDJGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d6eSA9IDB4NkY7CiAgc3RhdGljIGNvbnN0IGludCB3d3p6ID0gMHhBRjsKICBzdGF0aWMgY29uc3QgaW50IHd3encgPSAweEVGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d3eCA9IDB4M0Y7CiAgc3RhdGljIGNvbnN0IGludCB3d3d5ID0gMHg3RjsKICBzdGF0aWMgY29uc3QgaW50IHd3d3ogPSAweEJGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d3dyA9IDB4RkY7CgogIC8vLyBTaHVmZmxlIHRoZSBsYW5lIHZhbHVlcy4gW21hc2tdIG11c3QgYmUgb25lIG9mIHRoZSAyNTYgc2h1ZmZsZSBjb25zdGFudHMuCiAgRmxvYXQzMng0IHNodWZmbGUoaW50IG1hc2spOwoKICAvLy8gU2h1ZmZsZSB0aGUgbGFuZSB2YWx1ZXMgaW4gW3RoaXNdIGFuZCBbb3RoZXJdLiBUaGUgcmV0dXJuZWQKICAvLy8gRmxvYXQzMng0IHdpbGwgaGF2ZSBYWSBsYW5lcyBmcm9tIFt0aGlzXSBhbmQgWlcgbGFuZXMgZnJvbSBbb3RoZXJdLgogIC8vLyBVc2VzIHRoZSBzYW1lIFttYXNrXSBhcyBbc2h1ZmZsZV0uCiAgRmxvYXQzMng0IHNodWZmbGVNaXgoRmxvYXQzMng0IG90aGVyLCBpbnQgbWFzayk7CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtGbG9hdDMyeDRdIGNvcGllZCBmcm9tIFt0aGlzXSB3aXRoIGEgbmV3IHggdmFsdWUuCiAgRmxvYXQzMng0IHdpdGhYKGRvdWJsZSB4KTsKCiAgLy8vIFJldHVybnMgYSBuZXcgW0Zsb2F0MzJ4NF0gY29waWVkIGZyb20gW3RoaXNdIHdpdGggYSBuZXcgeSB2YWx1ZS4KICBGbG9hdDMyeDQgd2l0aFkoZG91YmxlIHkpOwoKICAvLy8gUmV0dXJucyBhIG5ldyBbRmxvYXQzMng0XSBjb3BpZWQgZnJvbSBbdGhpc10gd2l0aCBhIG5ldyB6IHZhbHVlLgogIEZsb2F0MzJ4NCB3aXRoWihkb3VibGUgeik7CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtGbG9hdDMyeDRdIGNvcGllZCBmcm9tIFt0aGlzXSB3aXRoIGEgbmV3IHcgdmFsdWUuCiAgRmxvYXQzMng0IHdpdGhXKGRvdWJsZSB3KTsKCiAgLy8vIFJldHVybnMgdGhlIGxhbmUtd2lzZSBtaW5pbXVtIHZhbHVlIGluIFt0aGlzXSBvciBbb3RoZXJdLgogIEZsb2F0MzJ4NCBtaW4oRmxvYXQzMng0IG90aGVyKTsKCiAgLy8vIFJldHVybnMgdGhlIGxhbmUtd2lzZSBtYXhpbXVtIHZhbHVlIGluIFt0aGlzXSBvciBbb3RoZXJdLgogIEZsb2F0MzJ4NCBtYXgoRmxvYXQzMng0IG90aGVyKTsKCiAgLy8vIFJldHVybnMgdGhlIHNxdWFyZSByb290IG9mIFt0aGlzXS4KICBGbG9hdDMyeDQgc3FydCgpOwoKICAvLy8gUmV0dXJucyB0aGUgcmVjaXByb2NhbCBvZiBbdGhpc10uCiAgRmxvYXQzMng0IHJlY2lwcm9jYWwoKTsKCiAgLy8vIFJldHVybnMgdGhlIHNxdWFyZSByb290IG9mIHRoZSByZWNpcHJvY2FsIG9mIFt0aGlzXS4KICBGbG9hdDMyeDQgcmVjaXByb2NhbFNxcnQoKTsKfQoKLyoqCiAqIEludDMyeDQgYW5kIG9wZXJhdGlvbnMuCiAqCiAqIEludDMyeDQgc3RvcmVzIDQgMzItYml0IGJpdC1tYXNrcyBpbiAibGFuZXMiLgogKiBUaGUgbGFuZXMgYXJlICJ4IiwgInkiLCAieiIsIGFuZCAidyIgcmVzcGVjdGl2ZWx5LgogKi8KYWJzdHJhY3QgY2xhc3MgSW50MzJ4NCB7CiAgZXh0ZXJuYWwgZmFjdG9yeSBJbnQzMng0KGludCB4LCBpbnQgeSwgaW50IHosIGludCB3KTsKICBleHRlcm5hbCBmYWN0b3J5IEludDMyeDQuYm9vbChib29sIHgsIGJvb2wgeSwgYm9vbCB6LCBib29sIHcpOwogIGV4dGVybmFsIGZhY3RvcnkgSW50MzJ4NC5mcm9tRmxvYXQzMng0Qml0cyhGbG9hdDMyeDQgeCk7CgogIC8vLyBUaGUgYml0LXdpc2Ugb3Igb3BlcmF0b3IuCiAgSW50MzJ4NCBvcGVyYXRvciB8KEludDMyeDQgb3RoZXIpOwoKICAvLy8gVGhlIGJpdC13aXNlIGFuZCBvcGVyYXRvci4KICBJbnQzMng0IG9wZXJhdG9yICYoSW50MzJ4NCBvdGhlcik7CgogIC8vLyBUaGUgYml0LXdpc2UgeG9yIG9wZXJhdG9yLgogIEludDMyeDQgb3BlcmF0b3IgXihJbnQzMng0IG90aGVyKTsKCiAgLy8vIEFkZGl0aW9uIG9wZXJhdG9yLgogIEludDMyeDQgb3BlcmF0b3IgKyhJbnQzMng0IG90aGVyKTsKCiAgLy8vIFN1YnRyYWN0aW9uIG9wZXJhdG9yLgogIEludDMyeDQgb3BlcmF0b3IgLShJbnQzMng0IG90aGVyKTsKCiAgLy8vIEV4dHJhY3QgMzItYml0IG1hc2sgZnJvbSB4IGxhbmUuCiAgaW50IGdldCB4OwoKICAvLy8gRXh0cmFjdCAzMi1iaXQgbWFzayBmcm9tIHkgbGFuZS4KICBpbnQgZ2V0IHk7CgogIC8vLyBFeHRyYWN0IDMyLWJpdCBtYXNrIGZyb20geiBsYW5lLgogIGludCBnZXQgejsKCiAgLy8vIEV4dHJhY3QgMzItYml0IG1hc2sgZnJvbSB3IGxhbmUuCiAgaW50IGdldCB3OwoKICAvLy8gRXh0cmFjdCB0aGUgdG9wIGJpdCBmcm9tIGVhY2ggbGFuZSByZXR1cm4gdGhlbSBpbiB0aGUgZmlyc3QgNCBiaXRzLgogIC8vLyAieCIgbGFuZSBpcyBiaXQgMC4KICAvLy8gInkiIGxhbmUgaXMgYml0IDEuCiAgLy8vICJ6IiBsYW5lIGlzIGJpdCAyLgogIC8vLyAidyIgbGFuZSBpcyBiaXQgMy4KICBpbnQgZ2V0IHNpZ25NYXNrOwoKICAvLy8gTWFzayBwYXNzZWQgdG8gW3NodWZmbGVdIG9yIFtzaHVmZmxlTWl4XS4KICBzdGF0aWMgY29uc3QgaW50IHh4eHggPSAweDA7CiAgc3RhdGljIGNvbnN0IGludCB4eHh5ID0gMHg0MDsKICBzdGF0aWMgY29uc3QgaW50IHh4eHogPSAweDgwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh4dyA9IDB4QzA7CiAgc3RhdGljIGNvbnN0IGludCB4eHl4ID0gMHgxMDsKICBzdGF0aWMgY29uc3QgaW50IHh4eXkgPSAweDUwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh5eiA9IDB4OTA7CiAgc3RhdGljIGNvbnN0IGludCB4eHl3ID0gMHhEMDsKICBzdGF0aWMgY29uc3QgaW50IHh4enggPSAweDIwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh6eSA9IDB4NjA7CiAgc3RhdGljIGNvbnN0IGludCB4eHp6ID0gMHhBMDsKICBzdGF0aWMgY29uc3QgaW50IHh4encgPSAweEUwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh3eCA9IDB4MzA7CiAgc3RhdGljIGNvbnN0IGludCB4eHd5ID0gMHg3MDsKICBzdGF0aWMgY29uc3QgaW50IHh4d3ogPSAweEIwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh3dyA9IDB4RjA7CiAgc3RhdGljIGNvbnN0IGludCB4eXh4ID0gMHg0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl4eSA9IDB4NDQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXh6ID0gMHg4NDsKICBzdGF0aWMgY29uc3QgaW50IHh5eHcgPSAweEM0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl5eCA9IDB4MTQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXl5ID0gMHg1NDsKICBzdGF0aWMgY29uc3QgaW50IHh5eXogPSAweDk0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl5dyA9IDB4RDQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXp4ID0gMHgyNDsKICBzdGF0aWMgY29uc3QgaW50IHh5enkgPSAweDY0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl6eiA9IDB4QTQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXp3ID0gMHhFNDsKICBzdGF0aWMgY29uc3QgaW50IHh5d3ggPSAweDM0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl3eSA9IDB4NzQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXd6ID0gMHhCNDsKICBzdGF0aWMgY29uc3QgaW50IHh5d3cgPSAweEY0OwogIHN0YXRpYyBjb25zdCBpbnQgeHp4eCA9IDB4ODsKICBzdGF0aWMgY29uc3QgaW50IHh6eHkgPSAweDQ4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp4eiA9IDB4ODg7CiAgc3RhdGljIGNvbnN0IGludCB4enh3ID0gMHhDODsKICBzdGF0aWMgY29uc3QgaW50IHh6eXggPSAweDE4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp5eSA9IDB4NTg7CiAgc3RhdGljIGNvbnN0IGludCB4enl6ID0gMHg5ODsKICBzdGF0aWMgY29uc3QgaW50IHh6eXcgPSAweEQ4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp6eCA9IDB4Mjg7CiAgc3RhdGljIGNvbnN0IGludCB4enp5ID0gMHg2ODsKICBzdGF0aWMgY29uc3QgaW50IHh6enogPSAweEE4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp6dyA9IDB4RTg7CiAgc3RhdGljIGNvbnN0IGludCB4end4ID0gMHgzODsKICBzdGF0aWMgY29uc3QgaW50IHh6d3kgPSAweDc4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp3eiA9IDB4Qjg7CiAgc3RhdGljIGNvbnN0IGludCB4end3ID0gMHhGODsKICBzdGF0aWMgY29uc3QgaW50IHh3eHggPSAweEM7CiAgc3RhdGljIGNvbnN0IGludCB4d3h5ID0gMHg0QzsKICBzdGF0aWMgY29uc3QgaW50IHh3eHogPSAweDhDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd4dyA9IDB4Q0M7CiAgc3RhdGljIGNvbnN0IGludCB4d3l4ID0gMHgxQzsKICBzdGF0aWMgY29uc3QgaW50IHh3eXkgPSAweDVDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd5eiA9IDB4OUM7CiAgc3RhdGljIGNvbnN0IGludCB4d3l3ID0gMHhEQzsKICBzdGF0aWMgY29uc3QgaW50IHh3enggPSAweDJDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd6eSA9IDB4NkM7CiAgc3RhdGljIGNvbnN0IGludCB4d3p6ID0gMHhBQzsKICBzdGF0aWMgY29uc3QgaW50IHh3encgPSAweEVDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd3eCA9IDB4M0M7CiAgc3RhdGljIGNvbnN0IGludCB4d3d5ID0gMHg3QzsKICBzdGF0aWMgY29uc3QgaW50IHh3d3ogPSAweEJDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd3dyA9IDB4RkM7CiAgc3RhdGljIGNvbnN0IGludCB5eHh4ID0gMHgxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh4eSA9IDB4NDE7CiAgc3RhdGljIGNvbnN0IGludCB5eHh6ID0gMHg4MTsKICBzdGF0aWMgY29uc3QgaW50IHl4eHcgPSAweEMxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh5eCA9IDB4MTE7CiAgc3RhdGljIGNvbnN0IGludCB5eHl5ID0gMHg1MTsKICBzdGF0aWMgY29uc3QgaW50IHl4eXogPSAweDkxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh5dyA9IDB4RDE7CiAgc3RhdGljIGNvbnN0IGludCB5eHp4ID0gMHgyMTsKICBzdGF0aWMgY29uc3QgaW50IHl4enkgPSAweDYxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh6eiA9IDB4QTE7CiAgc3RhdGljIGNvbnN0IGludCB5eHp3ID0gMHhFMTsKICBzdGF0aWMgY29uc3QgaW50IHl4d3ggPSAweDMxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh3eSA9IDB4NzE7CiAgc3RhdGljIGNvbnN0IGludCB5eHd6ID0gMHhCMTsKICBzdGF0aWMgY29uc3QgaW50IHl4d3cgPSAweEYxOwogIHN0YXRpYyBjb25zdCBpbnQgeXl4eCA9IDB4NTsKICBzdGF0aWMgY29uc3QgaW50IHl5eHkgPSAweDQ1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl4eiA9IDB4ODU7CiAgc3RhdGljIGNvbnN0IGludCB5eXh3ID0gMHhDNTsKICBzdGF0aWMgY29uc3QgaW50IHl5eXggPSAweDE1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl5eSA9IDB4NTU7CiAgc3RhdGljIGNvbnN0IGludCB5eXl6ID0gMHg5NTsKICBzdGF0aWMgY29uc3QgaW50IHl5eXcgPSAweEQ1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl6eCA9IDB4MjU7CiAgc3RhdGljIGNvbnN0IGludCB5eXp5ID0gMHg2NTsKICBzdGF0aWMgY29uc3QgaW50IHl5enogPSAweEE1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl6dyA9IDB4RTU7CiAgc3RhdGljIGNvbnN0IGludCB5eXd4ID0gMHgzNTsKICBzdGF0aWMgY29uc3QgaW50IHl5d3kgPSAweDc1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl3eiA9IDB4QjU7CiAgc3RhdGljIGNvbnN0IGludCB5eXd3ID0gMHhGNTsKICBzdGF0aWMgY29uc3QgaW50IHl6eHggPSAweDk7CiAgc3RhdGljIGNvbnN0IGludCB5enh5ID0gMHg0OTsKICBzdGF0aWMgY29uc3QgaW50IHl6eHogPSAweDg5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp4dyA9IDB4Qzk7CiAgc3RhdGljIGNvbnN0IGludCB5enl4ID0gMHgxOTsKICBzdGF0aWMgY29uc3QgaW50IHl6eXkgPSAweDU5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp5eiA9IDB4OTk7CiAgc3RhdGljIGNvbnN0IGludCB5enl3ID0gMHhEOTsKICBzdGF0aWMgY29uc3QgaW50IHl6enggPSAweDI5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp6eSA9IDB4Njk7CiAgc3RhdGljIGNvbnN0IGludCB5enp6ID0gMHhBOTsKICBzdGF0aWMgY29uc3QgaW50IHl6encgPSAweEU5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp3eCA9IDB4Mzk7CiAgc3RhdGljIGNvbnN0IGludCB5end5ID0gMHg3OTsKICBzdGF0aWMgY29uc3QgaW50IHl6d3ogPSAweEI5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp3dyA9IDB4Rjk7CiAgc3RhdGljIGNvbnN0IGludCB5d3h4ID0gMHhEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd4eSA9IDB4NEQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3h6ID0gMHg4RDsKICBzdGF0aWMgY29uc3QgaW50IHl3eHcgPSAweENEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd5eCA9IDB4MUQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3l5ID0gMHg1RDsKICBzdGF0aWMgY29uc3QgaW50IHl3eXogPSAweDlEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd5dyA9IDB4REQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3p4ID0gMHgyRDsKICBzdGF0aWMgY29uc3QgaW50IHl3enkgPSAweDZEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd6eiA9IDB4QUQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3p3ID0gMHhFRDsKICBzdGF0aWMgY29uc3QgaW50IHl3d3ggPSAweDNEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd3eSA9IDB4N0Q7CiAgc3RhdGljIGNvbnN0IGludCB5d3d6ID0gMHhCRDsKICBzdGF0aWMgY29uc3QgaW50IHl3d3cgPSAweEZEOwogIHN0YXRpYyBjb25zdCBpbnQgenh4eCA9IDB4MjsKICBzdGF0aWMgY29uc3QgaW50IHp4eHkgPSAweDQyOwogIHN0YXRpYyBjb25zdCBpbnQgenh4eiA9IDB4ODI7CiAgc3RhdGljIGNvbnN0IGludCB6eHh3ID0gMHhDMjsKICBzdGF0aWMgY29uc3QgaW50IHp4eXggPSAweDEyOwogIHN0YXRpYyBjb25zdCBpbnQgenh5eSA9IDB4NTI7CiAgc3RhdGljIGNvbnN0IGludCB6eHl6ID0gMHg5MjsKICBzdGF0aWMgY29uc3QgaW50IHp4eXcgPSAweEQyOwogIHN0YXRpYyBjb25zdCBpbnQgenh6eCA9IDB4MjI7CiAgc3RhdGljIGNvbnN0IGludCB6eHp5ID0gMHg2MjsKICBzdGF0aWMgY29uc3QgaW50IHp4enogPSAweEEyOwogIHN0YXRpYyBjb25zdCBpbnQgenh6dyA9IDB4RTI7CiAgc3RhdGljIGNvbnN0IGludCB6eHd4ID0gMHgzMjsKICBzdGF0aWMgY29uc3QgaW50IHp4d3kgPSAweDcyOwogIHN0YXRpYyBjb25zdCBpbnQgenh3eiA9IDB4QjI7CiAgc3RhdGljIGNvbnN0IGludCB6eHd3ID0gMHhGMjsKICBzdGF0aWMgY29uc3QgaW50IHp5eHggPSAweDY7CiAgc3RhdGljIGNvbnN0IGludCB6eXh5ID0gMHg0NjsKICBzdGF0aWMgY29uc3QgaW50IHp5eHogPSAweDg2OwogIHN0YXRpYyBjb25zdCBpbnQgenl4dyA9IDB4QzY7CiAgc3RhdGljIGNvbnN0IGludCB6eXl4ID0gMHgxNjsKICBzdGF0aWMgY29uc3QgaW50IHp5eXkgPSAweDU2OwogIHN0YXRpYyBjb25zdCBpbnQgenl5eiA9IDB4OTY7CiAgc3RhdGljIGNvbnN0IGludCB6eXl3ID0gMHhENjsKICBzdGF0aWMgY29uc3QgaW50IHp5enggPSAweDI2OwogIHN0YXRpYyBjb25zdCBpbnQgenl6eSA9IDB4NjY7CiAgc3RhdGljIGNvbnN0IGludCB6eXp6ID0gMHhBNjsKICBzdGF0aWMgY29uc3QgaW50IHp5encgPSAweEU2OwogIHN0YXRpYyBjb25zdCBpbnQgenl3eCA9IDB4MzY7CiAgc3RhdGljIGNvbnN0IGludCB6eXd5ID0gMHg3NjsKICBzdGF0aWMgY29uc3QgaW50IHp5d3ogPSAweEI2OwogIHN0YXRpYyBjb25zdCBpbnQgenl3dyA9IDB4RjY7CiAgc3RhdGljIGNvbnN0IGludCB6enh4ID0gMHhBOwogIHN0YXRpYyBjb25zdCBpbnQgenp4eSA9IDB4NEE7CiAgc3RhdGljIGNvbnN0IGludCB6enh6ID0gMHg4QTsKICBzdGF0aWMgY29uc3QgaW50IHp6eHcgPSAweENBOwogIHN0YXRpYyBjb25zdCBpbnQgenp5eCA9IDB4MUE7CiAgc3RhdGljIGNvbnN0IGludCB6enl5ID0gMHg1QTsKICBzdGF0aWMgY29uc3QgaW50IHp6eXogPSAweDlBOwogIHN0YXRpYyBjb25zdCBpbnQgenp5dyA9IDB4REE7CiAgc3RhdGljIGNvbnN0IGludCB6enp4ID0gMHgyQTsKICBzdGF0aWMgY29uc3QgaW50IHp6enkgPSAweDZBOwogIHN0YXRpYyBjb25zdCBpbnQgenp6eiA9IDB4QUE7CiAgc3RhdGljIGNvbnN0IGludCB6enp3ID0gMHhFQTsKICBzdGF0aWMgY29uc3QgaW50IHp6d3ggPSAweDNBOwogIHN0YXRpYyBjb25zdCBpbnQgenp3eSA9IDB4N0E7CiAgc3RhdGljIGNvbnN0IGludCB6end6ID0gMHhCQTsKICBzdGF0aWMgY29uc3QgaW50IHp6d3cgPSAweEZBOwogIHN0YXRpYyBjb25zdCBpbnQgend4eCA9IDB4RTsKICBzdGF0aWMgY29uc3QgaW50IHp3eHkgPSAweDRFOwogIHN0YXRpYyBjb25zdCBpbnQgend4eiA9IDB4OEU7CiAgc3RhdGljIGNvbnN0IGludCB6d3h3ID0gMHhDRTsKICBzdGF0aWMgY29uc3QgaW50IHp3eXggPSAweDFFOwogIHN0YXRpYyBjb25zdCBpbnQgend5eSA9IDB4NUU7CiAgc3RhdGljIGNvbnN0IGludCB6d3l6ID0gMHg5RTsKICBzdGF0aWMgY29uc3QgaW50IHp3eXcgPSAweERFOwogIHN0YXRpYyBjb25zdCBpbnQgend6eCA9IDB4MkU7CiAgc3RhdGljIGNvbnN0IGludCB6d3p5ID0gMHg2RTsKICBzdGF0aWMgY29uc3QgaW50IHp3enogPSAweEFFOwogIHN0YXRpYyBjb25zdCBpbnQgend6dyA9IDB4RUU7CiAgc3RhdGljIGNvbnN0IGludCB6d3d4ID0gMHgzRTsKICBzdGF0aWMgY29uc3QgaW50IHp3d3kgPSAweDdFOwogIHN0YXRpYyBjb25zdCBpbnQgend3eiA9IDB4QkU7CiAgc3RhdGljIGNvbnN0IGludCB6d3d3ID0gMHhGRTsKICBzdGF0aWMgY29uc3QgaW50IHd4eHggPSAweDM7CiAgc3RhdGljIGNvbnN0IGludCB3eHh5ID0gMHg0MzsKICBzdGF0aWMgY29uc3QgaW50IHd4eHogPSAweDgzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h4dyA9IDB4QzM7CiAgc3RhdGljIGNvbnN0IGludCB3eHl4ID0gMHgxMzsKICBzdGF0aWMgY29uc3QgaW50IHd4eXkgPSAweDUzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h5eiA9IDB4OTM7CiAgc3RhdGljIGNvbnN0IGludCB3eHl3ID0gMHhEMzsKICBzdGF0aWMgY29uc3QgaW50IHd4enggPSAweDIzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h6eSA9IDB4NjM7CiAgc3RhdGljIGNvbnN0IGludCB3eHp6ID0gMHhBMzsKICBzdGF0aWMgY29uc3QgaW50IHd4encgPSAweEUzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h3eCA9IDB4MzM7CiAgc3RhdGljIGNvbnN0IGludCB3eHd5ID0gMHg3MzsKICBzdGF0aWMgY29uc3QgaW50IHd4d3ogPSAweEIzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h3dyA9IDB4RjM7CiAgc3RhdGljIGNvbnN0IGludCB3eXh4ID0gMHg3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l4eSA9IDB4NDc7CiAgc3RhdGljIGNvbnN0IGludCB3eXh6ID0gMHg4NzsKICBzdGF0aWMgY29uc3QgaW50IHd5eHcgPSAweEM3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l5eCA9IDB4MTc7CiAgc3RhdGljIGNvbnN0IGludCB3eXl5ID0gMHg1NzsKICBzdGF0aWMgY29uc3QgaW50IHd5eXogPSAweDk3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l5dyA9IDB4RDc7CiAgc3RhdGljIGNvbnN0IGludCB3eXp4ID0gMHgyNzsKICBzdGF0aWMgY29uc3QgaW50IHd5enkgPSAweDY3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l6eiA9IDB4QTc7CiAgc3RhdGljIGNvbnN0IGludCB3eXp3ID0gMHhFNzsKICBzdGF0aWMgY29uc3QgaW50IHd5d3ggPSAweDM3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l3eSA9IDB4Nzc7CiAgc3RhdGljIGNvbnN0IGludCB3eXd6ID0gMHhCNzsKICBzdGF0aWMgY29uc3QgaW50IHd5d3cgPSAweEY3OwogIHN0YXRpYyBjb25zdCBpbnQgd3p4eCA9IDB4QjsKICBzdGF0aWMgY29uc3QgaW50IHd6eHkgPSAweDRCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p4eiA9IDB4OEI7CiAgc3RhdGljIGNvbnN0IGludCB3enh3ID0gMHhDQjsKICBzdGF0aWMgY29uc3QgaW50IHd6eXggPSAweDFCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p5eSA9IDB4NUI7CiAgc3RhdGljIGNvbnN0IGludCB3enl6ID0gMHg5QjsKICBzdGF0aWMgY29uc3QgaW50IHd6eXcgPSAweERCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p6eCA9IDB4MkI7CiAgc3RhdGljIGNvbnN0IGludCB3enp5ID0gMHg2QjsKICBzdGF0aWMgY29uc3QgaW50IHd6enogPSAweEFCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p6dyA9IDB4RUI7CiAgc3RhdGljIGNvbnN0IGludCB3end4ID0gMHgzQjsKICBzdGF0aWMgY29uc3QgaW50IHd6d3kgPSAweDdCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p3eiA9IDB4QkI7CiAgc3RhdGljIGNvbnN0IGludCB3end3ID0gMHhGQjsKICBzdGF0aWMgY29uc3QgaW50IHd3eHggPSAweEY7CiAgc3RhdGljIGNvbnN0IGludCB3d3h5ID0gMHg0RjsKICBzdGF0aWMgY29uc3QgaW50IHd3eHogPSAweDhGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d4dyA9IDB4Q0Y7CiAgc3RhdGljIGNvbnN0IGludCB3d3l4ID0gMHgxRjsKICBzdGF0aWMgY29uc3QgaW50IHd3eXkgPSAweDVGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d5eiA9IDB4OUY7CiAgc3RhdGljIGNvbnN0IGludCB3d3l3ID0gMHhERjsKICBzdGF0aWMgY29uc3QgaW50IHd3enggPSAweDJGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d6eSA9IDB4NkY7CiAgc3RhdGljIGNvbnN0IGludCB3d3p6ID0gMHhBRjsKICBzdGF0aWMgY29uc3QgaW50IHd3encgPSAweEVGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d3eCA9IDB4M0Y7CiAgc3RhdGljIGNvbnN0IGludCB3d3d5ID0gMHg3RjsKICBzdGF0aWMgY29uc3QgaW50IHd3d3ogPSAweEJGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d3dyA9IDB4RkY7CgogIC8vLyBTaHVmZmxlIHRoZSBsYW5lIHZhbHVlcy4gW21hc2tdIG11c3QgYmUgb25lIG9mIHRoZSAyNTYgc2h1ZmZsZSBjb25zdGFudHMuCiAgSW50MzJ4NCBzaHVmZmxlKGludCBtYXNrKTsKCiAgLy8vIFNodWZmbGUgdGhlIGxhbmUgdmFsdWVzIGluIFt0aGlzXSBhbmQgW290aGVyXS4gVGhlIHJldHVybmVkCiAgLy8vIEludDMyeDQgd2lsbCBoYXZlIFhZIGxhbmVzIGZyb20gW3RoaXNdIGFuZCBaVyBsYW5lcyBmcm9tIFtvdGhlcl0uCiAgLy8vIFVzZXMgdGhlIHNhbWUgW21hc2tdIGFzIFtzaHVmZmxlXS4KICBJbnQzMng0IHNodWZmbGVNaXgoSW50MzJ4NCBvdGhlciwgaW50IG1hc2spOwoKICAvLy8gUmV0dXJucyBhIG5ldyBbSW50MzJ4NF0gY29waWVkIGZyb20gW3RoaXNdIHdpdGggYSBuZXcgeCB2YWx1ZS4KICBJbnQzMng0IHdpdGhYKGludCB4KTsKCiAgLy8vIFJldHVybnMgYSBuZXcgW0ludDMyeDRdIGNvcGllZCBmcm9tIFt0aGlzXSB3aXRoIGEgbmV3IHkgdmFsdWUuCiAgSW50MzJ4NCB3aXRoWShpbnQgeSk7CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtJbnQzMng0XSBjb3BpZWQgZnJvbSBbdGhpc10gd2l0aCBhIG5ldyB6IHZhbHVlLgogIEludDMyeDQgd2l0aFooaW50IHopOwoKICAvLy8gUmV0dXJucyBhIG5ldyBbSW50MzJ4NF0gY29waWVkIGZyb20gW3RoaXNdIHdpdGggYSBuZXcgdyB2YWx1ZS4KICBJbnQzMng0IHdpdGhXKGludCB3KTsKCiAgLy8vIEV4dHJhY3RlZCB4IHZhbHVlLiBSZXR1cm5zIGZhbHNlIGZvciAwLCB0cnVlIGZvciBhbnkgb3RoZXIgdmFsdWUuCiAgYm9vbCBnZXQgZmxhZ1g7CgogIC8vLyBFeHRyYWN0ZWQgeSB2YWx1ZS4gUmV0dXJucyBmYWxzZSBmb3IgMCwgdHJ1ZSBmb3IgYW55IG90aGVyIHZhbHVlLgogIGJvb2wgZ2V0IGZsYWdZOwoKICAvLy8gRXh0cmFjdGVkIHogdmFsdWUuIFJldHVybnMgZmFsc2UgZm9yIDAsIHRydWUgZm9yIGFueSBvdGhlciB2YWx1ZS4KICBib29sIGdldCBmbGFnWjsKCiAgLy8vIEV4dHJhY3RlZCB3IHZhbHVlLiBSZXR1cm5zIGZhbHNlIGZvciAwLCB0cnVlIGZvciBhbnkgb3RoZXIgdmFsdWUuCiAgYm9vbCBnZXQgZmxhZ1c7CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtJbnQzMng0XSBjb3BpZWQgZnJvbSBbdGhpc10gd2l0aCBhIG5ldyB4IHZhbHVlLgogIEludDMyeDQgd2l0aEZsYWdYKGJvb2wgeCk7CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtJbnQzMng0XSBjb3BpZWQgZnJvbSBbdGhpc10gd2l0aCBhIG5ldyB5IHZhbHVlLgogIEludDMyeDQgd2l0aEZsYWdZKGJvb2wgeSk7CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtJbnQzMng0XSBjb3BpZWQgZnJvbSBbdGhpc10gd2l0aCBhIG5ldyB6IHZhbHVlLgogIEludDMyeDQgd2l0aEZsYWdaKGJvb2wgeik7CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtJbnQzMng0XSBjb3BpZWQgZnJvbSBbdGhpc10gd2l0aCBhIG5ldyB3IHZhbHVlLgogIEludDMyeDQgd2l0aEZsYWdXKGJvb2wgdyk7CgogIC8vLyBNZXJnZSBbdHJ1ZVZhbHVlXSBhbmQgW2ZhbHNlVmFsdWVdIGJhc2VkIG9uIFt0aGlzXScgYml0IG1hc2s6CiAgLy8vIFNlbGVjdCBiaXQgZnJvbSBbdHJ1ZVZhbHVlXSB3aGVuIGJpdCBpbiBbdGhpc10gaXMgb24uCiAgLy8vIFNlbGVjdCBiaXQgZnJvbSBbZmFsc2VWYWx1ZV0gd2hlbiBiaXQgaW4gW3RoaXNdIGlzIG9mZi4KICBGbG9hdDMyeDQgc2VsZWN0KEZsb2F0MzJ4NCB0cnVlVmFsdWUsIEZsb2F0MzJ4NCBmYWxzZVZhbHVlKTsKfQoKLyoqCiAqIEZsb2F0NjR4MiBpbW11dGFibGUgdmFsdWUgdHlwZSBhbmQgb3BlcmF0aW9ucy4KICoKICogRmxvYXQ2NHgyIHN0b3JlcyAyIDY0LWJpdCBmbG9hdGluZyBwb2ludCB2YWx1ZXMgaW4gImxhbmVzIi4KICogVGhlIGxhbmVzIGFyZSAieCIgYW5kICJ5IiByZXNwZWN0aXZlbHkuCiAqLwphYnN0cmFjdCBjbGFzcyBGbG9hdDY0eDIgewogIGV4dGVybmFsIGZhY3RvcnkgRmxvYXQ2NHgyKGRvdWJsZSB4LCBkb3VibGUgeSk7CiAgZXh0ZXJuYWwgZmFjdG9yeSBGbG9hdDY0eDIuc3BsYXQoZG91YmxlIHYpOwogIGV4dGVybmFsIGZhY3RvcnkgRmxvYXQ2NHgyLnplcm8oKTsKCiAgLy8vIFVzZXMgdGhlICJ4IiBhbmQgInkiIGxhbmVzIGZyb20gW3ZdLgogIGV4dGVybmFsIGZhY3RvcnkgRmxvYXQ2NHgyLmZyb21GbG9hdDMyeDQoRmxvYXQzMng0IHYpOwoKICAvLy8gQWRkaXRpb24gb3BlcmF0b3IuCiAgRmxvYXQ2NHgyIG9wZXJhdG9yICsoRmxvYXQ2NHgyIG90aGVyKTsKCiAgLy8vIE5lZ2F0ZSBvcGVyYXRvci4KICBGbG9hdDY0eDIgb3BlcmF0b3IgLSgpOwoKICAvLy8gU3VidHJhY3Rpb24gb3BlcmF0b3IuCiAgRmxvYXQ2NHgyIG9wZXJhdG9yIC0oRmxvYXQ2NHgyIG90aGVyKTsKCiAgLy8vIE11bHRpcGxpY2F0aW9uIG9wZXJhdG9yLgogIEZsb2F0NjR4MiBvcGVyYXRvciAqKEZsb2F0NjR4MiBvdGhlcik7CgogIC8vLyBEaXZpc2lvbiBvcGVyYXRvci4KICBGbG9hdDY0eDIgb3BlcmF0b3IgLyhGbG9hdDY0eDIgb3RoZXIpOwoKICAvLy8gUmV0dXJucyBhIGNvcHkgb2YgW3RoaXNdIGVhY2ggbGFuZSBiZWluZyBzY2FsZWQgYnkgW3NdLgogIC8vLyBFcXVpdmFsZW50IHRvIHRoaXMgKiBuZXcgRmxvYXQ2NHgyLnNwbGF0KHMpCiAgRmxvYXQ2NHgyIHNjYWxlKGRvdWJsZSBzKTsKCiAgLy8vIFJldHVybnMgdGhlIGxhbmUtd2lzZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGlzIFtGbG9hdDY0eDJdLgogIEZsb2F0NjR4MiBhYnMoKTsKCiAgLy8vIExhbmUtd2lzZSBjbGFtcCBbdGhpc10gdG8gYmUgaW4gdGhlIHJhbmdlIFtsb3dlckxpbWl0XS1bdXBwZXJMaW1pdF0uCiAgRmxvYXQ2NHgyIGNsYW1wKEZsb2F0NjR4MiBsb3dlckxpbWl0LCBGbG9hdDY0eDIgdXBwZXJMaW1pdCk7CgogIC8vLyBFeHRyYWN0ZWQgeCB2YWx1ZS4KICBkb3VibGUgZ2V0IHg7CgogIC8vLyBFeHRyYWN0ZWQgeSB2YWx1ZS4KICBkb3VibGUgZ2V0IHk7CgogIC8vLyBFeHRyYWN0IHRoZSBzaWduIGJpdHMgZnJvbSBlYWNoIGxhbmUgcmV0dXJuIHRoZW0gaW4gdGhlIGZpcnN0IDIgYml0cy4KICAvLy8gIngiIGxhbmUgaXMgYml0IDAuCiAgLy8vICJ5IiBsYW5lIGlz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BkgFQxVCPjxKBUlKHQVEGAYsLTYEAQZLBURPMAUNOC08CQVEBQ0wCQVAKUQGKwEoAgEESRADO0oDQ0AkBEAGRysGKwEGSCMFQzEGPAEGPyAFRBVCPjxKBUlKHQVEGAYtLTcEAQZLBURPMAUNOS09CQVEBQ0wCQVAKUQGLAEoAgEESi4DGEomA0FBHgRGBksoBiwBBkkjBUMxBkABBkkFPhxCPjxKBUlKHQVEGAYuLTgEAQZLBUVPMAUNOi0+CQVEBQ0wCQVAKUQGLQEoAgEESi8DGEomBEYGSygGLAEGSSMGQAEGSQU+HEI+PEoFSUodBUQYBi4tOAQBBksFRU8wBQ06LT4JBUQFDTAJBUApRAYtASgCAQRCEANBRQRFBkYvBi4BBksjBkUBBksFQBxCPjxKBUlKHQVEGAYwLToEAQY5BVBCBjUBBksFR08wBQ08LUAJBUQFDTAJBUApRAYvASkCAQRAEANBRQRBBkQvBiwBBkkjBkEBBkkFPhxCPjxKBUlKHQVEGAYuLTgEAQY5BUxABjEBBksFRk8wBQ06LT4JBUQFDTAJBUApRAYtASkCAQRCEANBRQRFBkY3Bi4BBksjBkUBBjkFUEIGNQEGSwVAHEI+PEoFSUodBUQYBjAtOgQBBksFR08wBQ08LUAJBUQFDTAJBUApRAYvASkCAQQyAz82BBtGLiU5AU4aOQEZKQEXGgEcKQEfKQEZKQEcJQElLAEfKAEoLwEYIgEcJQE+Mh0BQBMBSz8BGRABGRABGRABGRABTBkZGRkUATAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgAVAfAUJKKTMBRx0BRx0BRx0BRx0BQCIBQCIBKRQBKBoBOx4CAQQbAzE2BBk4QTsBICUBISUBISUBGSUBHCUBJw0BJw0BJw0BJw0BShkZGRkUATAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgAVAdAUJIKS8BRRgBRRgBRRgBRRgBSBIBSBIBSBIBSBIBRR0BRR0BRR0BRR0BRDw+PwIBBDIDPysEGzIuJQErOQEZKQEXGgEcKQEfKQEZKQE+Mh0BQBMBSz8BGRABGRABTBkZFAFHHQFHHQFAIgFAIgEzFAIBD2RhcnQ6dHlwZWRfZGF0YTVvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL3R5cGVkX2RhdGFfcGF0Y2guZGFydMACGDcvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIE5vdGU6IHRoZSBWTSBjb25jYXRlbmF0ZXMgYWxsIHBhdGNoIGZpbGVzIGludG8gYSBzaW5nbGUgcGF0Y2ggZmlsZS4gVGhpcwovLy8gZmlsZSBpcyB0aGUgZmlyc3QgcGF0Y2ggaW4gImRhcnQ6dHlwZWRfZGF0YSIgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBpbXBvcnRzCi8vLyB1c2VkIGJ5IHBhdGNoZXMgb2YgdGhhdCBsaWJyYXJ5LiBXZSBwbGFuIHRvIGNoYW5nZSB0aGlzIHdoZW4gd2UgaGF2ZSBhCi8vLyBzaGFyZWQgZnJvbnQgZW5kIGFuZCBzaW1wbHkgdXNlIHBhcnRzLgoKaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIKICAgIHNob3cKICAgICAgICBDbGFzc0lELAogICAgICAgIENvZGVVbml0cywKICAgICAgICBFeHBhbmRJdGVyYWJsZSwKICAgICAgICBGb2xsb3dlZEJ5SXRlcmFibGUsCiAgICAgICAgSXRlcmFibGVFbGVtZW50RXJyb3IsCiAgICAgICAgTGlzdE1hcFZpZXcsCiAgICAgICAgTGlzdHMsCiAgICAgICAgTWFwcGVkSXRlcmFibGUsCiAgICAgICAgTWFwcGVkSXRlcmFibGUsCiAgICAgICAgUmV2ZXJzZWRMaXN0SXRlcmFibGUsCiAgICAgICAgU2tpcFdoaWxlSXRlcmFibGUsCiAgICAgICAgU29ydCwKICAgICAgICBTdWJMaXN0SXRlcmFibGUsCiAgICAgICAgVGFrZVdoaWxlSXRlcmFibGUsCiAgICAgICAgV2hlcmVJdGVyYWJsZSwKICAgICAgICBXaGVyZVR5cGVJdGVyYWJsZSwKICAgICAgICBwYXRjaDsKCmltcG9ydCAiZGFydDpjb2xsZWN0aW9uIiBzaG93IExpc3RCYXNlOwoKaW1wb3J0ICdkYXJ0Om1hdGgnIHNob3cgUmFuZG9tOwoKLy8vIFRoZXJlIGFyZSBubyBwYXJ0cyBpbiBwYXRjaCBsaWJyYXJ5OgoKQHBhdGNoCmNsYXNzIEJ5dGVEYXRhIGltcGxlbWVudHMgVHlwZWREYXRhIHsKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgZmFjdG9yeSBCeXRlRGF0YShpbnQgbGVuZ3RoKSB7CiAgICBmaW5hbCBsaXN0ID0gbmV3IFVpbnQ4TGlzdChsZW5ndGgpIGFzIF9UeXBlZExpc3Q7CiAgICBfcmFuZ2VDaGVjayhsaXN0Lmxlbmd0aEluQnl0ZXMsIDAsIGxlbmd0aCk7CiAgICByZXR1cm4gbmV3IF9CeXRlRGF0YVZpZXcuXyhsaXN0LCAwLCBsZW5ndGgpOwogIH0KCiAgLy8gQ2FsbGVkIGRpcmVjdGx5IGZyb20gQyBjb2RlLgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBmYWN0b3J5IEJ5dGVEYXRhLl92aWV3KF9UeXBlZExpc3QgdHlwZWREYXRhLCBpbnQgb2Zmc2V0SW5CeXRlcywgaW50IGxlbmd0aCkgewogICAgX3JhbmdlQ2hlY2sodHlwZWREYXRhLmxlbmd0aEluQnl0ZXMsIG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgICByZXR1cm4gbmV3IF9CeXRlRGF0YVZpZXcuXyh0eXBlZERhdGEsIG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgfQp9CgovLyBCYXNlZCBjbGFzcyBmb3IgX1R5cGVkTGlzdCB0aGF0IHByb3ZpZGVzIGNvbW1vbiBtZXRob2RzIGZvciBpbXBsZW1lbnRpbmcKLy8gdGhlIGNvbGxlY3Rpb24gYW5kIGxpc3QgaW50ZXJmYWNlcy4KLy8gVGhpcyBjbGFzcyBkb2VzIG5vdCBleHRlbmQgTGlzdEJhc2U8VD4gc2luY2UgdGhhdCB3b3VsZCBhZGQgdHlwZSBhcmd1bWVudHMKLy8gdG8gaW5zdGFuY2VzIG9mIF9UeXBlTGlzdEJhc2UuIEluc3RlYWQgdGhlIHN1YmNsYXNzZXMgdXNlIHR5cGUgc3BlY2lmaWMKLy8gbWl4aW5zIChsaWtlIF9JbnRMaXN0TWl4aW4sIF9Eb3VibGVMaXN0TWl4aW4pIHRvIGltcGxlbWVudCBMaXN0QmFzZTxUPi4KYWJzdHJhY3QgY2xhc3MgX1R5cGVkTGlzdEJhc2UgewogIGludCBnZXQgbGVuZ3RoOwogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzOwogIGludCBnZXQgb2Zmc2V0SW5CeXRlczsKICBfQnl0ZUJ1ZmZlciBnZXQgYnVmZmVyOwoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBDb2xsZWN0aW9uIGludGVyZmFjZS4KICBTdHJpbmcgam9pbihbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSkgewogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGJ1ZmZlci53cml0ZUFsbCh0aGlzIGFzIEl0ZXJhYmxlLCBzZXBhcmF0b3IpOwogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgYm9vbCBnZXQgaXNFbXB0eSB7CiAgICByZXR1cm4gdGhpcy5sZW5ndGggPT0gMDsKICB9CgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gIWlzRW1wdHk7CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgoKICBzZXQgbGVuZ3RoKG5ld0xlbmd0aCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZXNpemUgYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBjbGVhcigpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgYm9vbCByZW1vdmUoT2JqZWN0IGVsZW1lbnQpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCByZW1vdmVSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCByZXBsYWNlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZSBpdGVyYWJsZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIE9iamVjdCBpbnRlcmZhY2UuCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gTGlzdEJhc2UubGlzdFRvU3RyaW5nKHRoaXMgYXMgTGlzdCk7CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KCiAgLy8gUmV0dXJucyB0cnVlIGlmIG9wZXJhdGlvbiBzdWNjZWVkcy4KICAvLyAnZnJvbUNpZCcgYW5kICd0b0NpZCcgbWF5IGJlIGNpZC1zIG9mIHRoZSB2aWV3cyBhbmQgdGhlcmVmb3JlIG1heSBub3QKICAvLyBtYXRjaCB0aGUgY2lkcyBvZiAndGhpcycgYW5kICdmcm9tJy4KICAvLyBVc2VzIHRvQ2lkIGFuZCBmcm9tQ2lkIHRvIGRlY2lkZSBpZiBjbGFtcGluZyBpcyBuZWNlc3NhcnkuCiAgLy8gRWxlbWVudCBzaXplIG9mIHRvQ2lkIGFuZCBmcm9tQ2lkIG11c3QgbWF0Y2ggKHRlc3QgYXQgY2FsbGVyKS4KICBib29sIF9zZXRSYW5nZShpbnQgc3RhcnRJbkJ5dGVzLCBpbnQgbGVuZ3RoSW5CeXRlcywgX1R5cGVkTGlzdEJhc2UgZnJvbSwKICAgICAgaW50IHN0YXJ0RnJvbUluQnl0ZXMsIGludCB0b0NpZCwgaW50IGZyb21DaWQpIG5hdGl2ZSAiVHlwZWREYXRhX3NldFJhbmdlIjsKfQoKbWl4aW4gX0ludExpc3RNaXhpbiBpbXBsZW1lbnRzIExpc3Q8aW50PiB7CiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXM7CiAgaW50IGdldCBvZmZzZXRJbkJ5dGVzOwogIF9CeXRlQnVmZmVyIGdldCBidWZmZXI7CgogIEl0ZXJhYmxlPFQ+IHdoZXJlVHlwZTxUPigpID0+IG5ldyBXaGVyZVR5cGVJdGVyYWJsZTxUPih0aGlzKTsKCiAgSXRlcmFibGU8aW50PiBmb2xsb3dlZEJ5KEl0ZXJhYmxlPGludD4gb3RoZXIpID0+CiAgICAgIG5ldyBGb2xsb3dlZEJ5SXRlcmFibGU8aW50Pi5maXJzdEVmZmljaWVudCh0aGlzLCBvdGhlcik7CgogIExpc3Q8Uj4gY2FzdDxSPigpID0+IExpc3QuY2FzdEZyb208aW50LCBSPih0aGlzKTsKICB2b2lkIHNldCBmaXJzdChpbnQgdmFsdWUpIHsKICAgIGlmICh0aGlzLmxlbmd0aCA9PSAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleCgwLCB0aGlzKTsKICAgIHRoaXNbMF0gPSB2YWx1ZTsKICB9CgogIHZvaWQgc2V0IGxhc3QoaW50IHZhbHVlKSB7CiAgICBpZiAodGhpcy5sZW5ndGggPT0gMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoMCwgdGhpcyk7CiAgICB0aGlzW3RoaXMubGVuZ3RoIC0gMV0gPSB2YWx1ZTsKICB9CgogIGludCBpbmRleFdoZXJlKGJvb2wgdGVzdChpbnQgZWxlbWVudCksIFtpbnQgc3RhcnQgPSAwXSkgewogICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRlc3QodGhpc1tpXSkpIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgaW50IGxhc3RJbmRleFdoZXJlKGJvb2wgdGVzdChpbnQgZWxlbWVudCksIFtpbnQgc3RhcnRdKSB7CiAgICBpZiAoc3RhcnQgPT0gbnVsbCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgc3RhcnQgPSB0aGlzLmxlbmd0aCAtIDE7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPj0gMDsgaS0tKSB7CiAgICAgIGlmICh0ZXN0KHRoaXNbaV0pKSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIExpc3Q8aW50PiBvcGVyYXRvciArKExpc3Q8aW50PiBvdGhlcikgewogICAgaW50IHRvdGFsTGVuZ3RoID0gdGhpcy5sZW5ndGggKyBvdGhlci5sZW5ndGg7CiAgICByZXR1cm4gPGludD5bXQogICAgICAuLmxlbmd0aCA9IHRvdGFsTGVuZ3RoCiAgICAgIC4uc2V0UmFuZ2UoMCwgdGhpcy5sZW5ndGgsIHRoaXMpCiAgICAgIC4uc2V0UmFuZ2UodGhpcy5sZW5ndGgsIHRvdGFsTGVuZ3RoLCBvdGhlcik7CiAgfQoKICBib29sIGNvbnRhaW5zKE9iamVjdCBlbGVtZW50KSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgIGlmICh0aGlzW2ldID09IGVsZW1lbnQpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdm9pZCBzaHVmZmxlKFtSYW5kb20gcmFuZG9tXSkgewogICAgcmFuZG9tID8/PSBuZXcgUmFuZG9tKCk7CiAgICB2YXIgaSA9IHRoaXMubGVuZ3RoOwogICAgd2hpbGUgKGkgPiAxKSB7CiAgICAgIGludCBwb3MgPSByYW5kb20ubmV4dEludChpKTsKICAgICAgaSAtPSAxOwogICAgICB2YXIgdG1wID0gdGhpc1tpXTsKICAgICAgdGhpc1tpXSA9IHRoaXNbcG9zXTsKICAgICAgdGhpc1twb3NdID0gdG1wOwogICAgfQogIH0KCiAgSXRlcmFibGU8aW50PiB3aGVyZShib29sIGYoaW50IGVsZW1lbnQpKSA9PiBuZXcgV2hlcmVJdGVyYWJsZTxpbnQ+KHRoaXMsIGYpOwoKICBJdGVyYWJsZTxpbnQ+IHRha2UoaW50IG4pID0+IG5ldyBTdWJMaXN0SXRlcmFibGU8aW50Pih0aGlzLCAwLCBuKTsKCiAgSXRlcmFibGU8aW50PiB0YWtlV2hpbGUoYm9vbCB0ZXN0KGludCBlbGVtZW50KSkgPT4KICAgICAgbmV3IFRha2VXaGlsZUl0ZXJhYmxlPGludD4odGhpcywgdGVzdCk7CgogIEl0ZXJhYmxlPGludD4gc2tpcChpbnQgbikgPT4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxpbnQ+KHRoaXMsIG4sIG51bGwpOwoKICBJdGVyYWJsZTxpbnQ+IHNraXBXaGlsZShib29sIHRlc3QoaW50IGVsZW1lbnQpKSA9PgogICAgICBuZXcgU2tpcFdoaWxlSXRlcmFibGU8aW50Pih0aGlzLCB0ZXN0KTsKCiAgSXRlcmFibGU8aW50PiBnZXQgcmV2ZXJzZWQgPT4gbmV3IFJldmVyc2VkTGlzdEl0ZXJhYmxlPGludD4odGhpcyk7CgogIE1hcDxpbnQsIGludD4gYXNNYXAoKSA9PiBuZXcgTGlzdE1hcFZpZXc8aW50Pih0aGlzKTsKCiAgSXRlcmFibGU8aW50PiBnZXRSYW5nZShpbnQgc3RhcnQsIFtpbnQgZW5kXSkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgcmV0dXJuIG5ldyBTdWJMaXN0SXRlcmFibGU8aW50Pih0aGlzLCBzdGFydCwgZW5kKTsKICB9CgogIEl0ZXJhdG9yPGludD4gZ2V0IGl0ZXJhdG9yID0+IG5ldyBfVHlwZWRMaXN0SXRlcmF0b3I8aW50Pih0aGlzKTsKCiAgTGlzdDxpbnQ+IHRvTGlzdCh7Ym9vbCBncm93YWJsZTogdHJ1ZX0pIHsKICAgIHJldHVybiBuZXcgTGlzdDxpbnQ+LmZyb20odGhpcywgZ3Jvd2FibGU6IGdyb3dhYmxlKTsKICB9CgogIFNldDxpbnQ+IHRvU2V0KCkgewogICAgcmV0dXJuIG5ldyBTZXQ8aW50Pi5mcm9tKHRoaXMpOwogIH0KCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihpbnQgZWxlbWVudCkpIHsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgZih0aGlzW2ldKTsKICAgIH0KICB9CgogIGludCByZWR1Y2UoaW50IGNvbWJpbmUoaW50IHZhbHVlLCBpbnQgZWxlbWVudCkpIHsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGlmIChsZW4gPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB2YXIgdmFsdWUgPSB0aGlzWzBdOwogICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47ICsraSkgewogICAgICB2YWx1ZSA9IGNvbWJpbmUodmFsdWUsIHRoaXNbaV0pOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgVCBmb2xkPFQ+KFQgaW5pdGlhbFZhbHVlLCBUIGNvbWJpbmUoVCBpbml0aWFsVmFsdWUsIGludCBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICBpbml0aWFsVmFsdWUgPSBjb21iaW5lKGluaXRpYWxWYWx1ZSwgdGhpc1tpXSk7CiAgICB9CiAgICByZXR1cm4gaW5pdGlhbFZhbHVlOwogIH0KCiAgSXRlcmFibGU8VD4gbWFwPFQ+KFQgZihpbnQgZWxlbWVudCkpID0+IG5ldyBNYXBwZWRJdGVyYWJsZTxpbnQsIFQ+KHRoaXMsIGYpOwoKICBJdGVyYWJsZTxUPiBleHBhbmQ8VD4oSXRlcmFibGU8VD4gZihpbnQgZWxlbWVudCkpID0+CiAgICAgIG5ldyBFeHBhbmRJdGVyYWJsZTxpbnQsIFQ+KHRoaXMsIGYpOwoKICBib29sIGV2ZXJ5KGJvb2wgZihpbnQgZWxlbWVudCkpIHsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgaWYgKCFmKHRoaXNbaV0pKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGJvb2wgYW55KGJvb2wgZihpbnQgZWxlbWVudCkpIHsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgaWYgKGYodGhpc1tpXSkpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgaW50IGZpcnN0V2hlcmUoYm9vbCB0ZXN0KGludCBlbGVtZW50KSwge2ludCBvckVsc2UoKX0pIHsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzW2ldOwogICAgICBpZiAodGVzdChlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgaW50IGxhc3RXaGVyZShib29sIHRlc3QoaW50IGVsZW1lbnQpLCB7aW50IG9yRWxzZSgpfSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgIHZhciBlbGVtZW50ID0gdGhpc1tpXTsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHsKICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgICAgfQogICAgfQogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIGludCBzaW5nbGVXaGVyZShib29sIHRlc3QoaW50IGVsZW1lbnQpLCB7aW50IG9yRWxzZSgpfSkgewogICAgdmFyIHJlc3VsdCA9IG51bGw7CiAgICBib29sIGZvdW5kTWF0Y2hpbmcgPSBmYWxzZTsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzW2ldOwogICAgICBpZiAodGVzdChlbGVtZW50KSkgewogICAgICAgIGlmIChmb3VuZE1hdGNoaW5nKSB7CiAgICAgICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICAgICAgfQogICAgICAgIHJlc3VsdCA9IGVsZW1lbnQ7CiAgICAgICAgZm91bmRNYXRjaGluZyA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIGlmIChmb3VuZE1hdGNoaW5nKSByZXR1cm4gcmVzdWx0OwogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIGludCBlbGVtZW50QXQoaW50IGluZGV4KSB7CiAgICByZXR1cm4gdGhpc1tpbmRleF07CiAgfQoKICB2b2lkIGFkZChpbnQgdmFsdWUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgYWRkIHRvIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPGludD4gdmFsdWUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgYWRkIHRvIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIHZvaWQgaW5zZXJ0KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGluc2VydCBpbnRvIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIHZvaWQgaW5zZXJ0QWxsKGludCBpbmRleCwgSXRlcmFibGU8aW50PiB2YWx1ZXMpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgaW5zZXJ0IGludG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBzb3J0KFtpbnQgY29tcGFyZShpbnQgYSwgaW50IGIpXSkgewogICAgU29ydC5zb3J0KHRoaXMsIGNvbXBhcmUgPz8gQ29tcGFyYWJsZS5jb21wYXJlKTsKICB9CgogIGludCBpbmRleE9mKGludCBlbGVtZW50LCBbaW50IHN0YXJ0ID0gMF0pIHsKICAgIGlmIChzdGFydCA+PSB0aGlzLmxlbmd0aCkgewogICAgICByZXR1cm4gLTE7CiAgICB9IGVsc2UgaWYgKHN0YXJ0IDwgMCkgewogICAgICBzdGFydCA9IDA7CiAgICB9CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICh0aGlzW2ldID09IGVsZW1lbnQpIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgaW50IGxhc3RJbmRleE9mKGludCBlbGVtZW50LCBbaW50IHN0YXJ0ID0gbnVsbF0pIHsKICAgIGlmIChzdGFydCA9PSBudWxsIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB7CiAgICAgIHN0YXJ0ID0gdGhpcy5sZW5ndGggLSAxOwogICAgfSBlbHNlIGlmIChzdGFydCA8IDApIHsKICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpID49IDA7IGktLSkgewogICAgICBpZiAodGhpc1tpXSA9PSBlbGVtZW50KSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIGludCByZW1vdmVMYXN0KCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICBpbnQgcmVtb3ZlQXQoaW50IGluZGV4KSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KGludCBlbGVtZW50KSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChpbnQgZWxlbWVudCkpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgaW50IGdldCBmaXJzdCB7CiAgICBpZiAobGVuZ3RoID4gMCkgcmV0dXJuIHRoaXNbMF07CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIGludCBnZXQgbGFzdCB7CiAgICBpZiAobGVuZ3RoID4gMCkgcmV0dXJuIHRoaXNbbGVuZ3RoIC0gMV07CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIGludCBnZXQgc2luZ2xlIHsKICAgIGlmIChsZW5ndGggPT0gMSkgcmV0dXJuIHRoaXNbMF07CiAgICBpZiAobGVuZ3RoID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vTWFueSgpOwogIH0KCiAgdm9pZCBzZXRBbGwoaW50IGluZGV4LCBJdGVyYWJsZTxpbnQ+IGl0ZXJhYmxlKSB7CiAgICBmaW5hbCBlbmQgPSBpdGVyYWJsZS5sZW5ndGggKyBpbmRleDsKICAgIHNldFJhbmdlKGluZGV4LCBlbmQsIGl0ZXJhYmxlKTsKICB9CgogIHZvaWQgZmlsbFJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgW2ludCBmaWxsVmFsdWVdKSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkgewogICAgICB0aGlzW2ldID0gZmlsbFZhbHVlOwogICAgfQogIH0KfQoKbWl4aW4gX1R5cGVkSW50TGlzdE1peGluPFNwYXduZWRUeXBlIGV4dGVuZHMgTGlzdDxpbnQ+PiBvbiBfSW50TGlzdE1peGluCiAgICBpbXBsZW1lbnRzIExpc3Q8aW50PiB7CiAgU3Bhd25lZFR5cGUgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCk7CgogIHZvaWQgc2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZTxpbnQ+IGZyb20sIFtpbnQgc2tpcENvdW50ID0gMF0pIHsKICAgIC8vIENoZWNrIHJhbmdlcy4KICAgIGlmICgwID4gc3RhcnQgfHwgc3RhcnQgPiBlbmQgfHwgZW5kID4gbGVuZ3RoKSB7CiAgICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGxlbmd0aCk7IC8vIEFsd2F5cyB0aHJvd3MuCiAgICAgIGFzc2VydChmYWxzZSk7CiAgICB9CiAgICBpZiAoc2tpcENvdW50IDwgMCkgewogICAgICB0aHJvdyBSYW5nZUVycm9yLnJhbmdlKHNraXBDb3VudCwgMCwgbnVsbCwgInNraXBDb3VudCIpOwogICAgfQoKICAgIGZpbmFsIGNvdW50ID0gZW5kIC0gc3RhcnQ7CiAgICBpZiAoKGZyb20ubGVuZ3RoIC0gc2tpcENvdW50KSA8IGNvdW50KSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb0ZldygpOwogICAgfQoKICAgIGlmIChjb3VudCA9PSAwKSByZXR1cm47CgogICAgaWYgKGZyb20gaXMgX1R5cGVkTGlzdEJhc2UpIHsKICAgICAgLy8gTm90ZTogX1R5cGVkTGlzdEJhc2UgaXMgbm90IHJlbGF0ZWQgdG8gSXRlcmFibGU8aW50PiBzbyB0aGVyZSBpcwogICAgICAvLyBubyBwcm9tb3Rpb24gaGVyZS4KICAgICAgZmluYWwgZnJvbUFzVHlwZWRMaXN0ID0gZnJvbSBhcyBfVHlwZWRMaXN0QmFzZTsKICAgICAgaWYgKHRoaXMuZWxlbWVudFNpemVJbkJ5dGVzID09IGZyb21Bc1R5cGVkTGlzdC5lbGVtZW50U2l6ZUluQnl0ZXMpIHsKICAgICAgICBpZiAoKGNvdW50IDwgMTApICYmIChmcm9tQXNUeXBlZExpc3QuYnVmZmVyICE9IHRoaXMuYnVmZmVyKSkgewogICAgICAgICAgTGlzdHMuY29weShmcm9tIGFzIExpc3Q8aW50Piwgc2tpcENvdW50LCB0aGlzLCBzdGFydCwgY291bnQpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5idWZmZXIuX2RhdGEuX3NldFJhbmdlKAogICAgICAgICAgICBzdGFydCAqIGVsZW1lbnRTaXplSW5CeXRlcyArIHRoaXMub2Zmc2V0SW5CeXRlcywKICAgICAgICAgICAgY291bnQgKiBlbGVtZW50U2l6ZUluQnl0ZXMsCiAgICAgICAgICAgIGZyb21Bc1R5cGVkTGlzdC5idWZmZXIuX2RhdGEsCiAgICAgICAgICAgIHNraXBDb3VudCAqIGVsZW1lbnRTaXplSW5CeXRlcyArIGZyb21Bc1R5cGVkTGlzdC5vZmZzZXRJbkJ5dGVzLAogICAgICAgICAgICBDbGFzc0lELmdldElEKHRoaXMpLAogICAgICAgICAgICBDbGFzc0lELmdldElEKGZyb20pKSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChmcm9tQXNUeXBlZExpc3QuYnVmZmVyID09IHRoaXMuYnVmZmVyKSB7CiAgICAgICAgLy8gRGlmZmVyZW50IGVsZW1lbnQgc2l6ZXMsIGJ1dCBzYW1lIGJ1ZmZlciBtZWFucyB0aGF0IHdlIG5lZWQKICAgICAgICAvLyBhbiBpbnRlcm1lZGlhdGUgc3RydWN0dXJlLgogICAgICAgIC8vIFRPRE8oc3JkamFuKTogT3B0aW1pemUgdG8gc2tpcCBjb3B5aW5nIGlmIHRoZSByYW5nZSBkb2VzIG5vdCBvdmVybGFwLgogICAgICAgIGZpbmFsIGZyb21Bc0xpc3QgPSBmcm9tIGFzIExpc3Q8aW50PjsKICAgICAgICBmaW5hbCB0ZW1wQnVmZmVyID0gX2NyZWF0ZUxpc3QoY291bnQpOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICAgICAgdGVtcEJ1ZmZlcltpXSA9IGZyb21Bc0xpc3Rbc2tpcENvdW50ICsgaV07CiAgICAgICAgfQogICAgICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgICAgICB0aGlzW2ldID0gdGVtcEJ1ZmZlcltpIC0gc3RhcnRdOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KCiAgICBMaXN0IG90aGVyTGlzdDsKICAgIGludCBvdGhlclN0YXJ0OwogICAgaWYgKGZyb20gaXMgTGlzdDxpbnQ+KSB7CiAgICAgIG90aGVyTGlzdCA9IGZyb207CiAgICAgIG90aGVyU3RhcnQgPSBza2lwQ291bnQ7CiAgICB9IGVsc2UgewogICAgICBvdGhlckxpc3QgPSBmcm9tLnNraXAoc2tpcENvdW50KS50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKICAgICAgb3RoZXJTdGFydCA9IDA7CiAgICB9CiAgICBpZiAob3RoZXJTdGFydCArIGNvdW50ID4gb3RoZXJMaXN0Lmxlbmd0aCkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29GZXcoKTsKICAgIH0KICAgIExpc3RzLmNvcHkob3RoZXJMaXN0LCBvdGhlclN0YXJ0LCB0aGlzLCBzdGFydCwgY291bnQpOwogIH0KCiAgU3Bhd25lZFR5cGUgc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSkgewogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgdmFyIGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgU3Bhd25lZFR5cGUgcmVzdWx0ID0gX2NyZWF0ZUxpc3QobGVuZ3RoKTsKICAgIHJlc3VsdC5zZXRSYW5nZSgwLCBsZW5ndGgsIHRoaXMsIHN0YXJ0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CgptaXhpbiBfRG91YmxlTGlzdE1peGluIGltcGxlbWVudHMgTGlzdDxkb3VibGU+IHsKICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlczsKICBpbnQgZ2V0IG9mZnNldEluQnl0ZXM7CiAgX0J5dGVCdWZmZXIgZ2V0IGJ1ZmZlcjsKCiAgSXRlcmFibGU8VD4gd2hlcmVUeXBlPFQ+KCkgPT4gbmV3IFdoZXJlVHlwZUl0ZXJhYmxlPFQ+KHRoaXMpOwoKICBJdGVyYWJsZTxkb3VibGU+IGZvbGxvd2VkQnkoSXRlcmFibGU8ZG91YmxlPiBvdGhlcikgPT4KICAgICAgbmV3IEZvbGxvd2VkQnlJdGVyYWJsZTxkb3VibGU+LmZpcnN0RWZmaWNpZW50KHRoaXMsIG90aGVyKTsKCiAgTGlzdDxSPiBjYXN0PFI+KCkgPT4gTGlzdC5jYXN0RnJvbTxkb3VibGUsIFI+KHRoaXMpOwogIHZvaWQgc2V0IGZpcnN0KGRvdWJsZSB2YWx1ZSkgewogICAgaWYgKHRoaXMubGVuZ3RoID09IDApIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KDAsIHRoaXMpOwogICAgdGhpc1swXSA9IHZhbHVlOwogIH0KCiAgdm9pZCBzZXQgbGFzdChkb3VibGUgdmFsdWUpIHsKICAgIGlmICh0aGlzLmxlbmd0aCA9PSAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleCgwLCB0aGlzKTsKICAgIHRoaXNbdGhpcy5sZW5ndGggLSAxXSA9IHZhbHVlOwogIH0KCiAgaW50IGluZGV4V2hlcmUoYm9vbCB0ZXN0KGRvdWJsZSBlbGVtZW50KSwgW2ludCBzdGFydCA9IDBdKSB7CiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDA7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBpZiAodGVzdCh0aGlzW2ldKSkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBpbnQgbGFzdEluZGV4V2hlcmUoYm9vbCB0ZXN0KGRvdWJsZSBlbGVtZW50KSwgW2ludCBzdGFydF0pIHsKICAgIGlmIChzdGFydCA9PSBudWxsIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSBzdGFydCA9IHRoaXMubGVuZ3RoIC0gMTsKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA+PSAwOyBpLS0pIHsKICAgICAgaWYgKHRlc3QodGhpc1tpXSkpIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgTGlzdDxkb3VibGU+IG9wZXJhdG9yICsoTGlzdDxkb3VibGU+IG90aGVyKSB7CiAgICBpbnQgdG90YWxMZW5ndGggPSB0aGlzLmxlbmd0aCArIG90aGVyLmxlbmd0aDsKICAgIHJldHVybiA8ZG91YmxlPltdCiAgICAgIC4ubGVuZ3RoID0gdG90YWxMZW5ndGgKICAgICAgLi5zZXRSYW5nZSgwLCB0aGlzLmxlbmd0aCwgdGhpcykKICAgICAgLi5zZXRSYW5nZSh0aGlzLmxlbmd0aCwgdG90YWxMZW5ndGgsIG90aGVyKTsKICB9CgogIGJvb2wgY29udGFpbnMoT2JqZWN0IGVsZW1lbnQpIHsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgaWYgKHRoaXNbaV0gPT0gZWxlbWVudCkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB2b2lkIHNodWZmbGUoW1JhbmRvbSByYW5kb21dKSB7CiAgICByYW5kb20gPz89IG5ldyBSYW5kb20oKTsKICAgIHZhciBpID0gdGhpcy5sZW5ndGg7CiAgICB3aGlsZSAoaSA+IDEpIHsKICAgICAgaW50IHBvcyA9IHJhbmRvbS5uZXh0SW50KGkpOwogICAgICBpIC09IDE7CiAgICAgIHZhciB0bXAgPSB0aGlzW2ldOwogICAgICB0aGlzW2ldID0gdGhpc1twb3NdOwogICAgICB0aGlzW3Bvc10gPSB0bXA7CiAgICB9CiAgfQoKICBJdGVyYWJsZTxkb3VibGU+IHdoZXJlKGJvb2wgZihkb3VibGUgZWxlbWVudCkpID0+CiAgICAgIG5ldyBXaGVyZUl0ZXJhYmxlPGRvdWJsZT4odGhpcywgZik7CgogIEl0ZXJhYmxlPGRvdWJsZT4gdGFrZShpbnQgbikgPT4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxkb3VibGU+KHRoaXMsIDAsIG4pOwoKICBJdGVyYWJsZTxkb3VibGU+IHRha2VXaGlsZShib29sIHRlc3QoZG91YmxlIGVsZW1lbnQpKSA9PgogICAgICBuZXcgVGFrZVdoaWxlSXRlcmFibGU8ZG91YmxlPih0aGlzLCB0ZXN0KTsKCiAgSXRlcmFibGU8ZG91YmxlPiBza2lwKGludCBuKSA9PiBuZXcgU3ViTGlzdEl0ZXJhYmxlPGRvdWJsZT4odGhpcywgbiwgbnVsbCk7CgogIEl0ZXJhYmxlPGRvdWJsZT4gc2tpcFdoaWxlKGJvb2wgdGVzdChkb3VibGUgZWxlbWVudCkpID0+CiAgICAgIG5ldyBTa2lwV2hpbGVJdGVyYWJsZTxkb3VibGU+KHRoaXMsIHRlc3QpOwoKICBJdGVyYWJsZTxkb3VibGU+IGdldCByZXZlcnNlZCA9PiBuZXcgUmV2ZXJzZWRMaXN0SXRlcmFibGU8ZG91YmxlPih0aGlzKTsKCiAgTWFwPGludCwgZG91YmxlPiBhc01hcCgpID0+IG5ldyBMaXN0TWFwVmlldzxkb3VibGU+KHRoaXMpOwoKICBJdGVyYWJsZTxkb3VibGU+IGdldFJhbmdlKGludCBzdGFydCwgW2ludCBlbmRdKSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICByZXR1cm4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxkb3VibGU+KHRoaXMsIHN0YXJ0LCBlbmQpOwogIH0KCiAgSXRlcmF0b3I8ZG91YmxlPiBnZXQgaXRlcmF0b3IgPT4gbmV3IF9UeXBlZExpc3RJdGVyYXRvcjxkb3VibGU+KHRoaXMpOwoKICBMaXN0PGRvdWJsZT4gdG9MaXN0KHtib29sIGdyb3dhYmxlOiB0cnVlfSkgewogICAgcmV0dXJuIG5ldyBMaXN0PGRvdWJsZT4uZnJvbSh0aGlzLCBncm93YWJsZTogZ3Jvd2FibGUpOwogIH0KCiAgU2V0PGRvdWJsZT4gdG9TZXQoKSB7CiAgICByZXR1cm4gbmV3IFNldDxkb3VibGU+LmZyb20odGhpcyk7CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBmKGRvdWJsZSBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICBmKHRoaXNbaV0pOwogICAgfQogIH0KCiAgZG91YmxlIHJlZHVjZShkb3VibGUgY29tYmluZShkb3VibGUgdmFsdWUsIGRvdWJsZSBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgaWYgKGxlbiA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIHZhciB2YWx1ZSA9IHRoaXNbMF07CiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgKytpKSB7CiAgICAgIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgdGhpc1tpXSk7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBUIGZvbGQ8VD4oVCBpbml0aWFsVmFsdWUsIFQgY29tYmluZShUIGluaXRpYWxWYWx1ZSwgZG91YmxlIGVsZW1lbnQpKSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgIGluaXRpYWxWYWx1ZSA9IGNvbWJpbmUoaW5pdGlhbFZhbHVlLCB0aGlzW2ldKTsKICAgIH0KICAgIHJldHVybiBpbml0aWFsVmFsdWU7CiAgfQoKICBJdGVyYWJsZTxUPiBtYXA8VD4oVCBmKGRvdWJsZSBlbGVtZW50KSkgPT4KICAgICAgbmV3IE1hcHBlZEl0ZXJhYmxlPGRvdWJsZSwgVD4odGhpcywgZik7CgogIEl0ZXJhYmxlPFQ+IGV4cGFuZDxUPihJdGVyYWJsZTxUPiBmKGRvdWJsZSBlbGVtZW50KSkgPT4KICAgICAgbmV3IEV4cGFuZEl0ZXJhYmxlPGRvdWJsZSwgVD4odGhpcywgZik7CgogIGJvb2wgZXZlcnkoYm9vbCBmKGRvdWJsZSBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICBpZiAoIWYodGhpc1tpXSkpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgYm9vbCBhbnkoYm9vbCBmKGRvdWJsZSBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICBpZiAoZih0aGlzW2ldKSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBkb3VibGUgZmlyc3RXaGVyZShib29sIHRlc3QoZG91YmxlIGVsZW1lbnQpLCB7ZG91YmxlIG9yRWxzZSgpfSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICB2YXIgZWxlbWVudCA9IHRoaXNbaV07CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBkb3VibGUgbGFzdFdoZXJlKGJvb2wgdGVzdChkb3VibGUgZWxlbWVudCksIHtkb3VibGUgb3JFbHNlKCl9KSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gbGVuIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzW2ldOwogICAgICBpZiAodGVzdChlbGVtZW50KSkgewogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICB9CiAgICB9CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgZG91YmxlIHNpbmdsZVdoZXJlKGJvb2wgdGVzdChkb3VibGUgZWxlbWVudCksIHtkb3VibGUgb3JFbHNlKCl9KSB7CiAgICB2YXIgcmVzdWx0ID0gbnVsbDsKICAgIGJvb2wgZm91bmRNYXRjaGluZyA9IGZhbHNlOwogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICB2YXIgZWxlbWVudCA9IHRoaXNbaV07CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHsKICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgICAgICB9CiAgICAgICAgcmVzdWx0ID0gZWxlbWVudDsKICAgICAgICBmb3VuZE1hdGNoaW5nID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHJldHVybiByZXN1bHQ7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgZG91YmxlIGVsZW1lbnRBdChpbnQgaW5kZXgpIHsKICAgIHJldHVybiB0aGlzW2luZGV4XTsKICB9CgogIHZvaWQgYWRkKGRvdWJsZSB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8ZG91YmxlPiB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBpbnNlcnQoaW50IGluZGV4LCBkb3VibGUgdmFsdWUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgaW5zZXJ0IGludG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBpbnNlcnRBbGwoaW50IGluZGV4LCBJdGVyYWJsZTxkb3VibGU+IHZhbHVlcykgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBpbnNlcnQgaW50byBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIHNvcnQoW2ludCBjb21wYXJlKGRvdWJsZSBhLCBkb3VibGUgYildKSB7CiAgICBTb3J0LnNvcnQodGhpcywgY29tcGFyZSA/PyBDb21wYXJhYmxlLmNvbXBhcmUpOwogIH0KCiAgaW50IGluZGV4T2YoZG91YmxlIGVsZW1lbnQsIFtpbnQgc3RhcnQgPSAwXSkgewogICAgaWYgKHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB7CiAgICAgIHJldHVybiAtMTsKICAgIH0gZWxzZSBpZiAoc3RhcnQgPCAwKSB7CiAgICAgIHN0YXJ0ID0gMDsKICAgIH0KICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRoaXNbaV0gPT0gZWxlbWVudCkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBpbnQgbGFzdEluZGV4T2YoZG91YmxlIGVsZW1lbnQsIFtpbnQgc3RhcnQgPSBudWxsXSkgewogICAgaWYgKHN0YXJ0ID09IG51bGwgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHsKICAgICAgc3RhcnQgPSB0aGlzLmxlbmd0aCAtIDE7CiAgICB9IGVsc2UgaWYgKHN0YXJ0IDwgMCkgewogICAgICByZXR1cm4gLTE7CiAgICB9CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPj0gMDsgaS0tKSB7CiAgICAgIGlmICh0aGlzW2ldID09IGVsZW1lbnQpIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgZG91YmxlIHJlbW92ZUxhc3QoKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIGRvdWJsZSByZW1vdmVBdChpbnQgaW5kZXgpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoZG91YmxlIGVsZW1lbnQpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KGRvdWJsZSBlbGVtZW50KSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICBkb3VibGUgZ2V0IGZpcnN0IHsKICAgIGlmIChsZW5ndGggPiAwKSByZXR1cm4gdGhpc1swXTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgZG91YmxlIGdldCBsYXN0IHsKICAgIGlmIChsZW5ndGggPiAwKSByZXR1cm4gdGhpc1tsZW5ndGggLSAxXTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgZG91YmxlIGdldCBzaW5nbGUgewogICAgaWYgKGxlbmd0aCA9PSAxKSByZXR1cm4gdGhpc1swXTsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgfQoKICB2b2lkIHNldEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPGRvdWJsZT4gaXRlcmFibGUpIHsKICAgIGZpbmFsIGVuZCA9IGl0ZXJhYmxlLmxlbmd0aCArIGluZGV4OwogICAgc2V0UmFuZ2UoaW5kZXgsIGVuZCwgaXRlcmFibGUpOwogIH0KCiAgdm9pZCBmaWxsUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBbZG91YmxlIGZpbGxWYWx1ZV0pIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7CiAgICAgIHRoaXNbaV0gPSBmaWxsVmFsdWU7CiAgICB9CiAgfQp9CgptaXhpbiBfVHlwZWREb3VibGVMaXN0TWl4aW48U3Bhd25lZFR5cGUgZXh0ZW5kcyBMaXN0PGRvdWJsZT4+CiAgICBvbiBfRG91YmxlTGlzdE1peGluIGltcGxlbWVudHMgTGlzdDxkb3VibGU+IHsKICBTcGF3bmVkVHlwZSBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKTsKCiAgdm9pZCBzZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlPGRvdWJsZT4gZnJvbSwKICAgICAgW2ludCBza2lwQ291bnQgPSAwXSkgewogICAgLy8gQ2hlY2sgcmFuZ2VzLgogICAgaWYgKDAgPiBzdGFydCB8fCBzdGFydCA+IGVuZCB8fCBlbmQgPiBsZW5ndGgpIHsKICAgICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgbGVuZ3RoKTsgLy8gQWx3YXlzIHRocm93cy4KICAgICAgYXNzZXJ0KGZhbHNlKTsKICAgIH0KICAgIGlmIChza2lwQ291bnQgPCAwKSB7CiAgICAgIHRocm93IFJhbmdlRXJyb3IucmFuZ2Uoc2tpcENvdW50LCAwLCBudWxsLCAic2tpcENvdW50Iik7CiAgICB9CgogICAgZmluYWwgY291bnQgPSBlbmQgLSBzdGFydDsKICAgIGlmICgoZnJvbS5sZW5ndGggLSBza2lwQ291bnQpIDwgY291bnQpIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vRmV3KCk7CiAgICB9CgogICAgaWYgKGNvdW50ID09IDApIHJldHVybjsKCiAgICBpZiAoZnJvbSBpcyBfVHlwZWRMaXN0QmFzZSkgewogICAgICAvLyBOb3RlOiBfVHlwZWRMaXN0QmFzZSBpcyBub3QgcmVsYXRlZCB0byBJdGVyYWJsZTxkb3VibGU+IHNvIHRoZXJlIGlzCiAgICAgIC8vIG5vIHByb21vdGlvbiBoZXJlLgogICAgICBmaW5hbCBmcm9tQXNUeXBlZExpc3QgPSBmcm9tIGFzIF9UeXBlZExpc3RCYXNlOwogICAgICBpZiAodGhpcy5lbGVtZW50U2l6ZUluQnl0ZXMgPT0gZnJvbUFzVHlwZWRMaXN0LmVsZW1lbnRTaXplSW5CeXRlcykgewogICAgICAgIGlmICgoY291bnQgPCAxMCkgJiYgKGZyb21Bc1R5cGVkTGlzdC5idWZmZXIgIT0gdGhpcy5idWZmZXIpKSB7CiAgICAgICAgICBMaXN0cy5jb3B5KGZyb20gYXMgTGlzdDxkb3VibGU+LCBza2lwQ291bnQsIHRoaXMsIHN0YXJ0LCBjb3VudCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmJ1ZmZlci5fZGF0YS5fc2V0UmFuZ2UoCiAgICAgICAgICAgIHN0YXJ0ICogZWxlbWVudFNpemVJbkJ5dGVzICsgdGhpcy5vZmZzZXRJbkJ5dGVzLAogICAgICAgICAgICBjb3VudCAqIGVsZW1lbnRTaXplSW5CeXRlcywKICAgICAgICAgICAgZnJvbUFzVHlwZWRMaXN0LmJ1ZmZlci5fZGF0YSwKICAgICAgICAgICAgc2tpcENvdW50ICogZWxlbWVudFNpemVJbkJ5dGVzICsgZnJvbUFzVHlwZWRMaXN0Lm9mZnNldEluQnl0ZXMsCiAgICAgICAgICAgIENsYXNzSUQuZ2V0SUQodGhpcyksCiAgICAgICAgICAgIENsYXNzSUQuZ2V0SUQoZnJvbSkpKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGZyb21Bc1R5cGVkTGlzdC5idWZmZXIgPT0gdGhpcy5idWZmZXIpIHsKICAgICAgICAvLyBEaWZmZXJlbnQgZWxlbWVudCBzaXplcywgYnV0IHNhbWUgYnVmZmVyIG1lYW5zIHRoYXQgd2UgbmVlZAogICAgICAgIC8vIGFuIGludGVybWVkaWF0ZSBzdHJ1Y3R1cmUuCiAgICAgICAgLy8gVE9ETyhzcmRqYW4pOiBPcHRpbWl6ZSB0byBza2lwIGNvcHlpbmcgaWYgdGhlIHJhbmdlIGRvZXMgbm90IG92ZXJsYXAuCiAgICAgICAgZmluYWwgZnJvbUFzTGlzdCA9IGZyb20gYXMgTGlzdDxkb3VibGU+OwogICAgICAgIGZpbmFsIHRlbXBCdWZmZXIgPSBfY3JlYXRlTGlzdChjb3VudCk7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgICB0ZW1wQnVmZmVyW2ldID0gZnJvbUFzTGlzdFtza2lwQ291bnQgKyBpXTsKICAgICAgICB9CiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgICAgIHRoaXNbaV0gPSB0ZW1wQnVmZmVyW2kgLSBzdGFydF07CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQoKICAgIExpc3Qgb3RoZXJMaXN0OwogICAgaW50IG90aGVyU3RhcnQ7CiAgICBpZiAoZnJvbSBpcyBMaXN0PGRvdWJsZT4pIHsKICAgICAgb3RoZXJMaXN0ID0gZnJvbTsKICAgICAgb3RoZXJTdGFydCA9IHNraXBDb3VudDsKICAgIH0gZWxzZSB7CiAgICAgIG90aGVyTGlzdCA9IGZyb20uc2tpcChza2lwQ291bnQpLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgICBvdGhlclN0YXJ0ID0gMDsKICAgIH0KICAgIGlmIChvdGhlclN0YXJ0ICsgY291bnQgPiBvdGhlckxpc3QubGVuZ3RoKSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb0ZldygpOwogICAgfQogICAgTGlzdHMuY29weShvdGhlckxpc3QsIG90aGVyU3RhcnQsIHRoaXMsIHN0YXJ0LCBjb3VudCk7CiAgfQoKICBTcGF3bmVkVHlwZSBzdWJsaXN0KGludCBzdGFydCwgW2ludCBlbmRdKSB7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICB2YXIgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICBTcGF3bmVkVHlwZSByZXN1bHQgPSBfY3JlYXRlTGlzdChsZW5ndGgpOwogICAgcmVzdWx0LnNldFJhbmdlKDAsIGxlbmd0aCwgdGhpcywgc3RhcnQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9GbG9hdDMyeDRMaXN0TWl4aW4gaW1wbGVtZW50cyBMaXN0PEZsb2F0MzJ4ND4gewogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzOwogIGludCBnZXQgb2Zmc2V0SW5CeXRlczsKICBfQnl0ZUJ1ZmZlciBnZXQgYnVmZmVyOwoKICBGbG9hdDMyeDRMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpOwoKICBJdGVyYWJsZTxUPiB3aGVyZVR5cGU8VD4oKSA9PiBuZXcgV2hlcmVUeXBlSXRlcmFibGU8VD4odGhpcyk7CgogIEl0ZXJhYmxlPEZsb2F0MzJ4ND4gZm9sbG93ZWRCeShJdGVyYWJsZTxGbG9hdDMyeDQ+IG90aGVyKSA9PgogICAgICBuZXcgRm9sbG93ZWRCeUl0ZXJhYmxlPEZsb2F0MzJ4ND4uZmlyc3RFZmZpY2llbnQodGhpcywgb3RoZXIpOwoKICBMaXN0PFI+IGNhc3Q8Uj4oKSA9PiBMaXN0LmNhc3RGcm9tPEZsb2F0MzJ4NCwgUj4odGhpcyk7CiAgdm9pZCBzZXQgZmlyc3QoRmxvYXQzMng0IHZhbHVlKSB7CiAgICBpZiAodGhpcy5sZW5ndGggPT0gMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoMCwgdGhpcyk7CiAgICB0aGlzWzBdID0gdmFsdWU7CiAgfQoKICB2b2lkIHNldCBsYXN0KEZsb2F0MzJ4NCB2YWx1ZSkgewogICAgaWYgKHRoaXMubGVuZ3RoID09IDApIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KDAsIHRoaXMpOwogICAgdGhpc1t0aGlzLmxlbmd0aCAtIDFdID0gdmFsdWU7CiAgfQoKICBpbnQgaW5kZXhXaGVyZShib29sIHRlc3QoRmxvYXQzMng0IGVsZW1lbnQpLCBbaW50IHN0YXJ0ID0gMF0pIHsKICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMDsKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICh0ZXN0KHRoaXNbaV0pKSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIGludCBsYXN0SW5kZXhXaGVyZShib29sIHRlc3QoRmxvYXQzMng0IGVsZW1lbnQpLCBbaW50IHN0YXJ0XSkgewogICAgaWYgKHN0YXJ0ID09IG51bGwgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHN0YXJ0ID0gdGhpcy5sZW5ndGggLSAxOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpID49IDA7IGktLSkgewogICAgICBpZiAodGVzdCh0aGlzW2ldKSkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBMaXN0PEZsb2F0MzJ4ND4gb3BlcmF0b3IgKyhMaXN0PEZsb2F0MzJ4ND4gb3RoZXIpIHsKICAgIGludCB0b3RhbExlbmd0aCA9IHRoaXMubGVuZ3RoICsgb3RoZXIubGVuZ3RoOwogICAgcmV0dXJuIDxGbG9hdDMyeDQ+W10KICAgICAgLi5sZW5ndGggPSB0b3RhbExlbmd0aAogICAgICAuLnNldFJhbmdlKDAsIHRoaXMubGVuZ3RoLCB0aGlzKQogICAgICAuLnNldFJhbmdlKHRoaXMubGVuZ3RoLCB0b3RhbExlbmd0aCwgb3RoZXIpOwogIH0KCiAgYm9vbCBjb250YWlucyhPYmplY3QgZWxlbWVudCkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICBpZiAodGhpc1tpXSA9PSBlbGVtZW50KSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgc2h1ZmZsZShbUmFuZG9tIHJhbmRvbV0pIHsKICAgIHJhbmRvbSA/Pz0gbmV3IFJhbmRvbSgpOwogICAgdmFyIGkgPSB0aGlzLmxlbmd0aDsKICAgIHdoaWxlIChpID4gMSkgewogICAgICBpbnQgcG9zID0gcmFuZG9tLm5leHRJbnQoaSk7CiAgICAgIGkgLT0gMTsKICAgICAgdmFyIHRtcCA9IHRoaXNbaV07CiAgICAgIHRoaXNbaV0gPSB0aGlzW3Bvc107CiAgICAgIHRoaXNbcG9zXSA9IHRtcDsKICAgIH0KICB9CgogIHZvaWQgc2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZTxGbG9hdDMyeDQ+IGZyb20sCiAgICAgIFtpbnQgc2tpcENvdW50ID0gMF0pIHsKICAgIC8vIENoZWNrIHJhbmdlcy4KICAgIGlmICgwID4gc3RhcnQgfHwgc3RhcnQgPiBlbmQgfHwgZW5kID4gbGVuZ3RoKSB7CiAgICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGxlbmd0aCk7IC8vIEFsd2F5cyB0aHJvd3MuCiAgICAgIGFzc2VydChmYWxzZSk7CiAgICB9CiAgICBpZiAoc2tpcENvdW50IDwgMCkgewogICAgICB0aHJvdyBSYW5nZUVycm9yLnJhbmdlKHNraXBDb3VudCwgMCwgbnVsbCwgInNraXBDb3VudCIpOwogICAgfQoKICAgIGZpbmFsIGNvdW50ID0gZW5kIC0gc3RhcnQ7CiAgICBpZiAoKGZyb20ubGVuZ3RoIC0gc2tpcENvdW50KSA8IGNvdW50KSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb0ZldygpOwogICAgfQoKICAgIGlmIChjb3VudCA9PSAwKSByZXR1cm47CgogICAgaWYgKGZyb20gaXMgX1R5cGVkTGlzdEJhc2UpIHsKICAgICAgLy8gTm90ZTogX1R5cGVkTGlzdEJhc2UgaXMgbm90IHJlbGF0ZWQgdG8gSXRlcmFibGU8RmxvYXQzMng0PiBzbyB0aGVyZSBpcwogICAgICAvLyBubyBwcm9tb3Rpb24gaGVyZS4KICAgICAgZmluYWwgZnJvbUFzVHlwZWRMaXN0ID0gZnJvbSBhcyBfVHlwZWRMaXN0QmFzZTsKICAgICAgaWYgKHRoaXMuZWxlbWVudFNpemVJbkJ5dGVzID09IGZyb21Bc1R5cGVkTGlzdC5lbGVtZW50U2l6ZUluQnl0ZXMpIHsKICAgICAgICBpZiAoKGNvdW50IDwgMTApICYmIChmcm9tQXNUeXBlZExpc3QuYnVmZmVyICE9IHRoaXMuYnVmZmVyKSkgewogICAgICAgICAgTGlzdHMuY29weShmcm9tIGFzIExpc3Q8RmxvYXQzMng0Piwgc2tpcENvdW50LCB0aGlzLCBzdGFydCwgY291bnQpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5idWZmZXIuX2RhdGEuX3NldFJhbmdlKAogICAgICAgICAgICBzdGFydCAqIGVsZW1lbnRTaXplSW5CeXRlcyArIHRoaXMub2Zmc2V0SW5CeXRlcywKICAgICAgICAgICAgY291bnQgKiBlbGVtZW50U2l6ZUluQnl0ZXMsCiAgICAgICAgICAgIGZyb21Bc1R5cGVkTGlzdC5idWZmZXIuX2RhdGEsCiAgICAgICAgICAgIHNraXBDb3VudCAqIGVsZW1lbnRTaXplSW5CeXRlcyArIGZyb21Bc1R5cGVkTGlzdC5vZmZzZXRJbkJ5dGVzLAogICAgICAgICAgICBDbGFzc0lELmdldElEKHRoaXMpLAogICAgICAgICAgICBDbGFzc0lELmdldElEKGZyb20pKSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChmcm9tQXNUeXBlZExpc3QuYnVmZmVyID09IHRoaXMuYnVmZmVyKSB7CiAgICAgICAgLy8gRGlmZmVyZW50IGVsZW1lbnQgc2l6ZXMsIGJ1dCBzYW1lIGJ1ZmZlciBtZWFucyB0aGF0IHdlIG5lZWQKICAgICAgICAvLyBhbiBpbnRlcm1lZGlhdGUgc3RydWN0dXJlLgogICAgICAgIC8vIFRPRE8oc3JkamFuKTogT3B0aW1pemUgdG8gc2tpcCBjb3B5aW5nIGlmIHRoZSByYW5nZSBkb2VzIG5vdCBvdmVybGFwLgogICAgICAgIGZpbmFsIGZyb21Bc0xpc3QgPSBmcm9tIGFzIExpc3Q8RmxvYXQzMng0PjsKICAgICAgICBmaW5hbCB0ZW1wQnVmZmVyID0gX2NyZWF0ZUxpc3QoY291bnQpOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICAgICAgdGVtcEJ1ZmZlcltpXSA9IGZyb21Bc0xpc3Rbc2tpcENvdW50ICsgaV07CiAgICAgICAgfQogICAgICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgICAgICB0aGlzW2ldID0gdGVtcEJ1ZmZlcltpIC0gc3RhcnRdOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KCiAgICBMaXN0IG90aGVyTGlzdDsKICAgIGludCBvdGhlclN0YXJ0OwogICAgaWYgKGZyb20gaXMgTGlzdDxGbG9hdDMyeDQ+KSB7CiAgICAgIG90aGVyTGlzdCA9IGZyb207CiAgICAgIG90aGVyU3RhcnQgPSBza2lwQ291bnQ7CiAgICB9IGVsc2UgewogICAgICBvdGhlckxpc3QgPSBmcm9tLnNraXAoc2tpcENvdW50KS50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKICAgICAgb3RoZXJTdGFydCA9IDA7CiAgICB9CiAgICBpZiAob3RoZXJTdGFydCArIGNvdW50ID4gb3RoZXJMaXN0Lmxlbmd0aCkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29GZXcoKTsKICAgIH0KICAgIExpc3RzLmNvcHkob3RoZXJMaXN0LCBvdGhlclN0YXJ0LCB0aGlzLCBzdGFydCwgY291bnQpOwogIH0KCiAgSXRlcmFibGU8RmxvYXQzMng0PiB3aGVyZShib29sIGYoRmxvYXQzMng0IGVsZW1lbnQpKSA9PgogICAgICBuZXcgV2hlcmVJdGVyYWJsZTxGbG9hdDMyeDQ+KHRoaXMsIGYpOwoKICBJdGVyYWJsZTxGbG9hdDMyeDQ+IHRha2UoaW50IG4pID0+IG5ldyBTdWJMaXN0SXRlcmFibGU8RmxvYXQzMng0Pih0aGlzLCAwLCBuKTsKCiAgSXRlcmFibGU8RmxvYXQzMng0PiB0YWtlV2hpbGUoYm9vbCB0ZXN0KEZsb2F0MzJ4NCBlbGVtZW50KSkgPT4KICAgICAgbmV3IFRha2VXaGlsZUl0ZXJhYmxlPEZsb2F0MzJ4ND4odGhpcywgdGVzdCk7CgogIEl0ZXJhYmxlPEZsb2F0MzJ4ND4gc2tpcChpbnQgbikgPT4KICAgICAgbmV3IFN1Ykxpc3RJdGVyYWJsZTxGbG9hdDMyeDQ+KHRoaXMsIG4sIG51bGwpOwoKICBJdGVyYWJsZTxGbG9hdDMyeDQ+IHNraXBXaGlsZShib29sIHRlc3QoRmxvYXQzMng0IGVsZW1lbnQpKSA9PgogICAgICBuZXcgU2tpcFdoaWxlSXRlcmFibGU8RmxvYXQzMng0Pih0aGlzLCB0ZXN0KTsKCiAgSXRlcmFibGU8RmxvYXQzMng0PiBnZXQgcmV2ZXJzZWQgPT4gbmV3IFJldmVyc2VkTGlzdEl0ZXJhYmxlPEZsb2F0MzJ4ND4odGhpcyk7CgogIE1hcDxpbnQsIEZsb2F0MzJ4ND4gYXNNYXAoKSA9PiBuZXcgTGlzdE1hcFZpZXc8RmxvYXQzMng0Pih0aGlzKTsKCiAgSXRlcmFibGU8RmxvYXQzMng0PiBnZXRSYW5nZShpbnQgc3RhcnQsIFtpbnQgZW5kXSkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgcmV0dXJuIG5ldyBTdWJMaXN0SXRlcmFibGU8RmxvYXQzMng0Pih0aGlzLCBzdGFydCwgZW5kKTsKICB9CgogIEl0ZXJhdG9yPEZsb2F0MzJ4ND4gZ2V0IGl0ZXJhdG9yID0+IG5ldyBfVHlwZWRMaXN0SXRlcmF0b3I8RmxvYXQzMng0Pih0aGlzKTsKCiAgTGlzdDxGbG9hdDMyeDQ+IHRvTGlzdCh7Ym9vbCBncm93YWJsZTogdHJ1ZX0pIHsKICAgIHJldHVybiBuZXcgTGlzdDxGbG9hdDMyeDQ+LmZyb20odGhpcywgZ3Jvd2FibGU6IGdyb3dhYmxlKTsKICB9CgogIFNldDxGbG9hdDMyeDQ+IHRvU2V0KCkgewogICAgcmV0dXJuIG5ldyBTZXQ8RmxvYXQzMng0Pi5mcm9tKHRoaXMpOwogIH0KCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihGbG9hdDMyeDQgZWxlbWVudCkpIHsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgZih0aGlzW2ldKTsKICAgIH0KICB9CgogIEZsb2F0MzJ4NCByZWR1Y2UoRmxvYXQzMng0IGNvbWJpbmUoRmxvYXQzMng0IHZhbHVlLCBGbG9hdDMyeDQgZWxlbWVudCkpIHsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGlmIChsZW4gPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB2YXIgdmFsdWUgPSB0aGlzWzBdOwogICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47ICsraSkgewogICAgICB2YWx1ZSA9IGNvbWJpbmUodmFsdWUsIHRoaXNbaV0pOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgVCBmb2xkPFQ+KFQgaW5pdGlhbFZhbHVlLCBUIGNvbWJpbmUoVCBpbml0aWFsVmFsdWUsIEZsb2F0MzJ4NCBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICBpbml0aWFsVmFsdWUgPSBjb21iaW5lKGluaXRpYWxWYWx1ZSwgdGhpc1tpXSk7CiAgICB9CiAgICByZXR1cm4gaW5pdGlhbFZhbHVlOwogIH0KCiAgSXRlcmFibGU8VD4gbWFwPFQ+KFQgZihGbG9hdDMyeDQgZWxlbWVudCkpID0+CiAgICAgIG5ldyBNYXBwZWRJdGVyYWJsZTxGbG9hdDMyeDQsIFQ+KHRoaXMsIGYpOwoKICBJdGVyYWJsZTxUPiBleHBhbmQ8VD4oSXRlcmFibGU8VD4gZihGbG9hdDMyeDQgZWxlbWVudCkpID0+CiAgICAgIG5ldyBFeHBhbmRJdGVyYWJsZTxGbG9hdDMyeDQsIFQ+KHRoaXMsIGYpOwoKICBib29sIGV2ZXJ5KGJvb2wgZihGbG9hdDMyeDQgZWxlbWVudCkpIHsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgaWYgKCFmKHRoaXNbaV0pKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGJvb2wgYW55KGJvb2wgZihGbG9hdDMyeDQgZWxlbWVudCkpIHsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgaWYgKGYodGhpc1tpXSkpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgRmxvYXQzMng0IGZpcnN0V2hlcmUoYm9vbCB0ZXN0KEZsb2F0MzJ4NCBlbGVtZW50KSwge0Zsb2F0MzJ4NCBvckVsc2UoKX0pIHsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzW2ldOwogICAgICBpZiAodGVzdChlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRmxvYXQzMng0IGxhc3RXaGVyZShib29sIHRlc3QoRmxvYXQzMng0IGVsZW1lbnQpLCB7RmxvYXQzMng0IG9yRWxzZSgpfSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgIHZhciBlbGVtZW50ID0gdGhpc1tpXTsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHsKICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgICAgfQogICAgfQogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEZsb2F0MzJ4NCBzaW5nbGVXaGVyZShib29sIHRlc3QoRmxvYXQzMng0IGVsZW1lbnQpLCB7RmxvYXQzMng0IG9yRWxzZSgpfSkgewogICAgdmFyIHJlc3VsdCA9IG51bGw7CiAgICBib29sIGZvdW5kTWF0Y2hpbmcgPSBmYWxzZTsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzW2ldOwogICAgICBpZiAodGVzdChlbGVtZW50KSkgewogICAgICAgIGlmIChmb3VuZE1hdGNoaW5nKSB7CiAgICAgICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICAgICAgfQogICAgICAgIHJlc3VsdCA9IGVsZW1lbnQ7CiAgICAgICAgZm91bmRNYXRjaGluZyA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIGlmIChmb3VuZE1hdGNoaW5nKSByZXR1cm4gcmVzdWx0OwogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEZsb2F0MzJ4NCBlbGVtZW50QXQoaW50IGluZGV4KSB7CiAgICByZXR1cm4gdGhpc1tpbmRleF07CiAgfQoKICB2b2lkIGFkZChGbG9hdDMyeDQgdmFsdWUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgYWRkIHRvIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEZsb2F0MzJ4ND4gdmFsdWUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgYWRkIHRvIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIHZvaWQgaW5zZXJ0KGludCBpbmRleCwgRmxvYXQzMng0IHZhbHVlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGluc2VydCBpbnRvIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIHZvaWQgaW5zZXJ0QWxsKGludCBpbmRleCwgSXRlcmFibGU8RmxvYXQzMng0PiB2YWx1ZXMpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgaW5zZXJ0IGludG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBzb3J0KFtpbnQgY29tcGFyZShGbG9hdDMyeDQgYSwgRmxvYXQzMng0IGIpXSkgewogICAgaWYgKGNvbXBhcmUgPT0gbnVsbCkgewogICAgICB0aHJvdyAiU0lNRCBkb24ndCBoYXZlIGRlZmF1bHQgY29tcGFyZS4iOwogICAgfQogICAgU29ydC5zb3J0KHRoaXMsIGNvbXBhcmUpOwogIH0KCiAgaW50IGluZGV4T2YoRmxvYXQzMng0IGVsZW1lbnQsIFtpbnQgc3RhcnQgPSAwXSkgewogICAgaWYgKHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB7CiAgICAgIHJldHVybiAtMTsKICAgIH0gZWxzZSBpZiAoc3RhcnQgPCAwKSB7CiAgICAgIHN0YXJ0ID0gMDsKICAgIH0KICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRoaXNbaV0gPT0gZWxlbWVudCkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBpbnQgbGFzdEluZGV4T2YoRmxvYXQzMng0IGVsZW1lbnQsIFtpbnQgc3RhcnQgPSBudWxsXSkgewogICAgaWYgKHN0YXJ0ID09IG51bGwgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHsKICAgICAgc3RhcnQgPSB0aGlzLmxlbmd0aCAtIDE7CiAgICB9IGVsc2UgaWYgKHN0YXJ0IDwgMCkgewogICAgICByZXR1cm4gLTE7CiAgICB9CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPj0gMDsgaS0tKSB7CiAgICAgIGlmICh0aGlzW2ldID09IGVsZW1lbnQpIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgRmxvYXQzMng0IHJlbW92ZUxhc3QoKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIEZsb2F0MzJ4NCByZW1vdmVBdChpbnQgaW5kZXgpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRmxvYXQzMng0IGVsZW1lbnQpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEZsb2F0MzJ4NCBlbGVtZW50KSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICBGbG9hdDMyeDQgZ2V0IGZpcnN0IHsKICAgIGlmIChsZW5ndGggPiAwKSByZXR1cm4gdGhpc1swXTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRmxvYXQzMng0IGdldCBsYXN0IHsKICAgIGlmIChsZW5ndGggPiAwKSByZXR1cm4gdGhpc1tsZW5ndGggLSAxXTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRmxvYXQzMng0IGdldCBzaW5nbGUgewogICAgaWYgKGxlbmd0aCA9PSAxKSByZXR1cm4gdGhpc1swXTsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgfQoKICBGbG9hdDMyeDRMaXN0IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pIHsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgIHZhciBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIEZsb2F0MzJ4NExpc3QgcmVzdWx0ID0gX2NyZWF0ZUxpc3QobGVuZ3RoKTsKICAgIHJlc3VsdC5zZXRSYW5nZSgwLCBsZW5ndGgsIHRoaXMsIHN0YXJ0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIHNldEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPEZsb2F0MzJ4ND4gaXRlcmFibGUpIHsKICAgIGZpbmFsIGVuZCA9IGl0ZXJhYmxlLmxlbmd0aCArIGluZGV4OwogICAgc2V0UmFuZ2UoaW5kZXgsIGVuZCwgaXRlcmFibGUpOwogIH0KCiAgdm9pZCBmaWxsUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBbRmxvYXQzMng0IGZpbGxWYWx1ZV0pIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7CiAgICAgIHRoaXNbaV0gPSBmaWxsVmFsdWU7CiAgICB9CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBfSW50MzJ4NExpc3RNaXhpbiBpbXBsZW1lbnRzIExpc3Q8SW50MzJ4ND4gewogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzOwogIGludCBnZXQgb2Zmc2V0SW5CeXRlczsKICBfQnl0ZUJ1ZmZlciBnZXQgYnVmZmVyOwoKICBJbnQzMng0TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKTsKCiAgSXRlcmFibGU8VD4gd2hlcmVUeXBlPFQ+KCkgPT4gbmV3IFdoZXJlVHlwZUl0ZXJhYmxlPFQ+KHRoaXMpOwoKICBJdGVyYWJsZTxJbnQzMng0PiBmb2xsb3dlZEJ5KEl0ZXJhYmxlPEludDMyeDQ+IG90aGVyKSA9PgogICAgICBuZXcgRm9sbG93ZWRCeUl0ZXJhYmxlPEludDMyeDQ+LmZpcnN0RWZmaWNpZW50KHRoaXMsIG90aGVyKTsKCiAgTGlzdDxSPiBjYXN0PFI+KCkgPT4gTGlzdC5jYXN0RnJvbTxJbnQzMng0LCBSPih0aGlzKTsKICB2b2lkIHNldCBmaXJzdChJbnQzMng0IHZhbHVlKSB7CiAgICBpZiAodGhpcy5sZW5ndGggPT0gMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoMCwgdGhpcyk7CiAgICB0aGlzWzBdID0gdmFsdWU7CiAgfQoKICB2b2lkIHNldCBsYXN0KEludDMyeDQgdmFsdWUpIHsKICAgIGlmICh0aGlzLmxlbmd0aCA9PSAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleCgwLCB0aGlzKTsKICAgIHRoaXNbdGhpcy5sZW5ndGggLSAxXSA9IHZhbHVlOwogIH0KCiAgaW50IGluZGV4V2hlcmUoYm9vbCB0ZXN0KEludDMyeDQgZWxlbWVudCksIFtpbnQgc3RhcnQgPSAwXSkgewogICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRlc3QodGhpc1tpXSkpIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgaW50IGxhc3RJbmRleFdoZXJlKGJvb2wgdGVzdChJbnQzMng0IGVsZW1lbnQpLCBbaW50IHN0YXJ0XSkgewogICAgaWYgKHN0YXJ0ID09IG51bGwgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHN0YXJ0ID0gdGhpcy5sZW5ndGggLSAxOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpID49IDA7IGktLSkgewogICAgICBpZiAodGVzdCh0aGlzW2ldKSkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBMaXN0PEludDMyeDQ+IG9wZXJhdG9yICsoTGlzdDxJbnQzMng0PiBvdGhlcikgewogICAgaW50IHRvdGFsTGVuZ3RoID0gdGhpcy5sZW5ndGggKyBvdGhlci5sZW5ndGg7CiAgICByZXR1cm4gPEludDMyeDQ+W10KICAgICAgLi5sZW5ndGggPSB0b3RhbExlbmd0aAogICAgICAuLnNldFJhbmdlKDAsIHRoaXMubGVuZ3RoLCB0aGlzKQogICAgICAuLnNldFJhbmdlKHRoaXMubGVuZ3RoLCB0b3RhbExlbmd0aCwgb3RoZXIpOwogIH0KCiAgYm9vbCBjb250YWlucyhPYmplY3QgZWxlbWVudCkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICBpZiAodGhpc1tpXSA9PSBlbGVtZW50KSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgc2h1ZmZsZShbUmFuZG9tIHJhbmRvbV0pIHsKICAgIHJhbmRvbSA/Pz0gbmV3IFJhbmRvbSgpOwogICAgdmFyIGkgPSB0aGlzLmxlbmd0aDsKICAgIHdoaWxlIChpID4gMSkgewogICAgICBpbnQgcG9zID0gcmFuZG9tLm5leHRJbnQoaSk7CiAgICAgIGkgLT0gMTsKICAgICAgdmFyIHRtcCA9IHRoaXNbaV07CiAgICAgIHRoaXNbaV0gPSB0aGlzW3Bvc107CiAgICAgIHRoaXNbcG9zXSA9IHRtcDsKICAgIH0KICB9CgogIHZvaWQgc2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZTxJbnQzMng0PiBmcm9tLAogICAgICBbaW50IHNraXBDb3VudCA9IDBdKSB7CiAgICAvLyBDaGVjayByYW5nZXMuCiAgICBpZiAoMCA+IHN0YXJ0IHx8IHN0YXJ0ID4gZW5kIHx8IGVuZCA+IGxlbmd0aCkgewogICAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBsZW5ndGgpOyAvLyBBbHdheXMgdGhyb3dzLgogICAgICBhc3NlcnQoZmFsc2UpOwogICAgfQogICAgaWYgKHNraXBDb3VudCA8IDApIHsKICAgICAgdGhyb3cgUmFuZ2VFcnJvci5yYW5nZShza2lwQ291bnQsIDAsIG51bGwsICJza2lwQ291bnQiKTsKICAgIH0KCiAgICBmaW5hbCBjb3VudCA9IGVuZCAtIHN0YXJ0OwogICAgaWYgKChmcm9tLmxlbmd0aCAtIHNraXBDb3VudCkgPCBjb3VudCkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29GZXcoKTsKICAgIH0KCiAgICBpZiAoY291bnQgPT0gMCkgcmV0dXJuOwoKICAgIGlmIChmcm9tIGlzIF9UeXBlZExpc3RCYXNlKSB7CiAgICAgIC8vIE5vdGU6IF9UeXBlZExpc3RCYXNlIGlzIG5vdCByZWxhdGVkIHRvIEl0ZXJhYmxlPEludDMyeDQ+IHNvIHRoZXJlIGlzCiAgICAgIC8vIG5vIHByb21vdGlvbiBoZXJlLgogICAgICBmaW5hbCBmcm9tQXNUeXBlZExpc3QgPSBmcm9tIGFzIF9UeXBlZExpc3RCYXNlOwogICAgICBpZiAodGhpcy5lbGVtZW50U2l6ZUluQnl0ZXMgPT0gZnJvbUFzVHlwZWRMaXN0LmVsZW1lbnRTaXplSW5CeXRlcykgewogICAgICAgIGlmICgoY291bnQgPCAxMCkgJiYgKGZyb21Bc1R5cGVkTGlzdC5idWZmZXIgIT0gdGhpcy5idWZmZXIpKSB7CiAgICAgICAgICBMaXN0cy5jb3B5KGZyb20gYXMgTGlzdDxJbnQzMng0Piwgc2tpcENvdW50LCB0aGlzLCBzdGFydCwgY291bnQpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5idWZmZXIuX2RhdGEuX3NldFJhbmdlKAogICAgICAgICAgICBzdGFydCAqIGVsZW1lbnRTaXplSW5CeXRlcyArIHRoaXMub2Zmc2V0SW5CeXRlcywKICAgICAgICAgICAgY291bnQgKiBlbGVtZW50U2l6ZUluQnl0ZXMsCiAgICAgICAgICAgIGZyb21Bc1R5cGVkTGlzdC5idWZmZXIuX2RhdGEsCiAgICAgICAgICAgIHNraXBDb3VudCAqIGVsZW1lbnRTaXplSW5CeXRlcyArIGZyb21Bc1R5cGVkTGlzdC5vZmZzZXRJbkJ5dGVzLAogICAgICAgICAgICBDbGFzc0lELmdldElEKHRoaXMpLAogICAgICAgICAgICBDbGFzc0lELmdldElEKGZyb20pKSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChmcm9tQXNUeXBlZExpc3QuYnVmZmVyID09IHRoaXMuYnVmZmVyKSB7CiAgICAgICAgLy8gRGlmZmVyZW50IGVsZW1lbnQgc2l6ZXMsIGJ1dCBzYW1lIGJ1ZmZlciBtZWFucyB0aGF0IHdlIG5lZWQKICAgICAgICAvLyBhbiBpbnRlcm1lZGlhdGUgc3RydWN0dXJlLgogICAgICAgIC8vIFRPRE8oc3JkamFuKTogT3B0aW1pemUgdG8gc2tpcCBjb3B5aW5nIGlmIHRoZSByYW5nZSBkb2VzIG5vdCBvdmVybGFwLgogICAgICAgIGZpbmFsIGZyb21Bc0xpc3QgPSBmcm9tIGFzIExpc3Q8SW50MzJ4ND47CiAgICAgICAgZmluYWwgdGVtcEJ1ZmZlciA9IF9jcmVhdGVMaXN0KGNvdW50KTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAgIHRlbXBCdWZmZXJbaV0gPSBmcm9tQXNMaXN0W3NraXBDb3VudCArIGldOwogICAgICAgIH0KICAgICAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICAgICAgdGhpc1tpXSA9IHRlbXBCdWZmZXJbaSAtIHN0YXJ0XTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CgogICAgTGlzdCBvdGhlckxpc3Q7CiAgICBpbnQgb3RoZXJTdGFydDsKICAgIGlmIChmcm9tIGlzIExpc3Q8SW50MzJ4ND4pIHsKICAgICAgb3RoZXJMaXN0ID0gZnJvbTsKICAgICAgb3RoZXJTdGFydCA9IHNraXBDb3VudDsKICAgIH0gZWxzZSB7CiAgICAgIG90aGVyTGlzdCA9IGZyb20uc2tpcChza2lwQ291bnQpLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgICBvdGhlclN0YXJ0ID0gMDsKICAgIH0KICAgIGlmIChvdGhlclN0YXJ0ICsgY291bnQgPiBvdGhlckxpc3QubGVuZ3RoKSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb0ZldygpOwogICAgfQogICAgTGlzdHMuY29weShvdGhlckxpc3QsIG90aGVyU3RhcnQsIHRoaXMsIHN0YXJ0LCBjb3VudCk7CiAgfQoKICBJdGVyYWJsZTxJbnQzMng0PiB3aGVyZShib29sIGYoSW50MzJ4NCBlbGVtZW50KSkgPT4KICAgICAgbmV3IFdoZXJlSXRlcmFibGU8SW50MzJ4ND4odGhpcywgZik7CgogIEl0ZXJhYmxlPEludDMyeDQ+IHRha2UoaW50IG4pID0+IG5ldyBTdWJMaXN0SXRlcmFibGU8SW50MzJ4ND4odGhpcywgMCwgbik7CgogIEl0ZXJhYmxlPEludDMyeDQ+IHRha2VXaGlsZShib29sIHRlc3QoSW50MzJ4NCBlbGVtZW50KSkgPT4KICAgICAgbmV3IFRha2VXaGlsZUl0ZXJhYmxlPEludDMyeDQ+KHRoaXMsIHRlc3QpOwoKICBJdGVyYWJsZTxJbnQzMng0PiBza2lwKGludCBuKSA9PiBuZXcgU3ViTGlzdEl0ZXJhYmxlPEludDMyeDQ+KHRoaXMsIG4sIG51bGwpOwoKICBJdGVyYWJsZTxJbnQzMng0PiBza2lwV2hpbGUoYm9vbCB0ZXN0KEludDMyeDQgZWxlbWVudCkpID0+CiAgICAgIG5ldyBTa2lwV2hpbGVJdGVyYWJsZTxJbnQzMng0Pih0aGlzLCB0ZXN0KTsKCiAgSXRlcmFibGU8SW50MzJ4ND4gZ2V0IHJldmVyc2VkID0+IG5ldyBSZXZlcnNlZExpc3RJdGVyYWJsZTxJbnQzMng0Pih0aGlzKTsKCiAgTWFwPGludCwgSW50MzJ4ND4gYXNNYXAoKSA9PiBuZXcgTGlzdE1hcFZpZXc8SW50MzJ4ND4odGhpcyk7CgogIEl0ZXJhYmxlPEludDMyeDQ+IGdldFJhbmdlKGludCBzdGFydCwgW2ludCBlbmRdKSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICByZXR1cm4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxJbnQzMng0Pih0aGlzLCBzdGFydCwgZW5kKTsKICB9CgogIEl0ZXJhdG9yPEludDMyeDQ+IGdldCBpdGVyYXRvciA9PiBuZXcgX1R5cGVkTGlzdEl0ZXJhdG9yPEludDMyeDQ+KHRoaXMpOwoKICBMaXN0PEludDMyeDQ+IHRvTGlzdCh7Ym9vbCBncm93YWJsZTogdHJ1ZX0pIHsKICAgIHJldHVybiBuZXcgTGlzdDxJbnQzMng0Pi5mcm9tKHRoaXMsIGdyb3dhYmxlOiBncm93YWJsZSk7CiAgfQoKICBTZXQ8SW50MzJ4ND4gdG9TZXQoKSB7CiAgICByZXR1cm4gbmV3IFNldDxJbnQzMng0Pi5mcm9tKHRoaXMpOwogIH0KCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihJbnQzMng0IGVsZW1lbnQpKSB7CiAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIGYodGhpc1tpXSk7CiAgICB9CiAgfQoKICBJbnQzMng0IHJlZHVjZShJbnQzMng0IGNvbWJpbmUoSW50MzJ4NCB2YWx1ZSwgSW50MzJ4NCBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgaWYgKGxlbiA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIHZhciB2YWx1ZSA9IHRoaXNbMF07CiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgKytpKSB7CiAgICAgIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgdGhpc1tpXSk7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBUIGZvbGQ8VD4oVCBpbml0aWFsVmFsdWUsIFQgY29tYmluZShUIGluaXRpYWxWYWx1ZSwgSW50MzJ4NCBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICBpbml0aWFsVmFsdWUgPSBjb21iaW5lKGluaXRpYWxWYWx1ZSwgdGhpc1tpXSk7CiAgICB9CiAgICByZXR1cm4gaW5pdGlhbFZhbHVlOwogIH0KCiAgSXRlcmFibGU8VD4gbWFwPFQ+KFQgZihJbnQzMng0IGVsZW1lbnQpKSA9PgogICAgICBuZXcgTWFwcGVkSXRlcmFibGU8SW50MzJ4NCwgVD4odGhpcywgZik7CgogIEl0ZXJhYmxlPFQ+IGV4cGFuZDxUPihJdGVyYWJsZTxUPiBmKEludDMyeDQgZWxlbWVudCkpID0+CiAgICAgIG5ldyBFeHBhbmRJdGVyYWJsZTxJbnQzMng0LCBUPih0aGlzLCBmKTsKCiAgYm9vbCBldmVyeShib29sIGYoSW50MzJ4NCBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICBpZiAoIWYodGhpc1tpXSkpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgYm9vbCBhbnkoYm9vbCBmKEludDMyeDQgZWxlbWVudCkpIHsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgaWYgKGYodGhpc1tpXSkpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgSW50MzJ4NCBmaXJzdFdoZXJlKGJvb2wgdGVzdChJbnQzMng0IGVsZW1lbnQpLCB7SW50MzJ4NCBvckVsc2UoKX0pIHsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzW2ldOwogICAgICBpZiAodGVzdChlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgSW50MzJ4NCBsYXN0V2hlcmUoYm9vbCB0ZXN0KEludDMyeDQgZWxlbWVudCksIHtJbnQzMng0IG9yRWxzZSgpfSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgIHZhciBlbGVtZW50ID0gdGhpc1tpXTsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHsKICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgICAgfQogICAgfQogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEludDMyeDQgc2luZ2xlV2hlcmUoYm9vbCB0ZXN0KEludDMyeDQgZWxlbWVudCksIHtJbnQzMng0IG9yRWxzZSgpfSkgewogICAgdmFyIHJlc3VsdCA9IG51bGw7CiAgICBib29sIGZvdW5kTWF0Y2hpbmcgPSBmYWxzZTsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzW2ldOwogICAgICBpZiAodGVzdChlbGVtZW50KSkgewogICAgICAgIGlmIChmb3VuZE1hdGNoaW5nKSB7CiAgICAgICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICAgICAgfQogICAgICAgIHJlc3VsdCA9IGVsZW1lbnQ7CiAgICAgICAgZm91bmRNYXRjaGluZyA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIGlmIChmb3VuZE1hdGNoaW5nKSByZXR1cm4gcmVzdWx0OwogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEludDMyeDQgZWxlbWVudEF0KGludCBpbmRleCkgewogICAgcmV0dXJuIHRoaXNbaW5kZXhdOwogIH0KCiAgdm9pZCBhZGQoSW50MzJ4NCB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBhZGQgdG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8SW50MzJ4ND4gdmFsdWUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgYWRkIHRvIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIHZvaWQgaW5zZXJ0KGludCBpbmRleCwgSW50MzJ4NCB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBpbnNlcnQgaW50byBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIGluc2VydEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPEludDMyeDQ+IHZhbHVlcykgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBpbnNlcnQgaW50byBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIHNvcnQoW2ludCBjb21wYXJlKEludDMyeDQgYSwgSW50MzJ4NCBiKV0pIHsKICAgIGlmIChjb21wYXJlID09IG51bGwpIHsKICAgICAgdGhyb3cgIlNJTUQgZG9uJ3QgaGF2ZSBkZWZhdWx0IGNvbXBhcmUuIjsKICAgIH0KICAgIFNvcnQuc29ydCh0aGlzLCBjb21wYXJlKTsKICB9CgogIGludCBpbmRleE9mKEludDMyeDQgZWxlbWVudCwgW2ludCBzdGFydCA9IDBdKSB7CiAgICBpZiAoc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHsKICAgICAgcmV0dXJuIC0xOwogICAgfSBlbHNlIGlmIChzdGFydCA8IDApIHsKICAgICAgc3RhcnQgPSAwOwogICAgfQogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgdGhpcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAodGhpc1tpXSA9PSBlbGVtZW50KSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIGludCBsYXN0SW5kZXhPZihJbnQzMng0IGVsZW1lbnQsIFtpbnQgc3RhcnQgPSBudWxsXSkgewogICAgaWYgKHN0YXJ0ID09IG51bGwgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHsKICAgICAgc3RhcnQgPSB0aGlzLmxlbmd0aCAtIDE7CiAgICB9IGVsc2UgaWYgKHN0YXJ0IDwgMCkgewogICAgICByZXR1cm4gLTE7CiAgICB9CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPj0gMDsgaS0tKSB7CiAgICAgIGlmICh0aGlzW2ldID09IGVsZW1lbnQpIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgSW50MzJ4NCByZW1vdmVMYXN0KCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICBJbnQzMng0IHJlbW92ZUF0KGludCBpbmRleCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChJbnQzMng0IGVsZW1lbnQpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEludDMyeDQgZWxlbWVudCkpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgSW50MzJ4NCBnZXQgZmlyc3QgewogICAgaWYgKGxlbmd0aCA+IDApIHJldHVybiB0aGlzWzBdOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBJbnQzMng0IGdldCBsYXN0IHsKICAgIGlmIChsZW5ndGggPiAwKSByZXR1cm4gdGhpc1tsZW5ndGggLSAxXTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgSW50MzJ4NCBnZXQgc2luZ2xlIHsKICAgIGlmIChsZW5ndGggPT0gMSkgcmV0dXJuIHRoaXNbMF07CiAgICBpZiAobGVuZ3RoID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vTWFueSgpOwogIH0KCiAgSW50MzJ4NExpc3Qgc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSkgewogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgdmFyIGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgSW50MzJ4NExpc3QgcmVzdWx0ID0gX2NyZWF0ZUxpc3QobGVuZ3RoKTsKICAgIHJlc3VsdC5zZXRSYW5nZSgwLCBsZW5ndGgsIHRoaXMsIHN0YXJ0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIHNldEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPEludDMyeDQ+IGl0ZXJhYmxlKSB7CiAgICBmaW5hbCBlbmQgPSBpdGVyYWJsZS5sZW5ndGggKyBpbmRleDsKICAgIHNldFJhbmdlKGluZGV4LCBlbmQsIGl0ZXJhYmxlKTsKICB9CgogIHZvaWQgZmlsbFJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgW0ludDMyeDQgZmlsbFZhbHVlXSkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHsKICAgICAgdGhpc1tpXSA9IGZpbGxWYWx1ZTsKICAgIH0KICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9GbG9hdDY0eDJMaXN0TWl4aW4gaW1wbGVtZW50cyBMaXN0PEZsb2F0NjR4Mj4gewogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzOwogIGludCBnZXQgb2Zmc2V0SW5CeXRlczsKICBfQnl0ZUJ1ZmZlciBnZXQgYnVmZmVyOwoKICBGbG9hdDY0eDJMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpOwoKICBJdGVyYWJsZTxUPiB3aGVyZVR5cGU8VD4oKSA9PiBuZXcgV2hlcmVUeXBlSXRlcmFibGU8VD4odGhpcyk7CgogIEl0ZXJhYmxlPEZsb2F0NjR4Mj4gZm9sbG93ZWRCeShJdGVyYWJsZTxGbG9hdDY0eDI+IG90aGVyKSA9PgogICAgICBuZXcgRm9sbG93ZWRCeUl0ZXJhYmxlPEZsb2F0NjR4Mj4uZmlyc3RFZmZpY2llbnQodGhpcywgb3RoZXIpOwoKICBMaXN0PFI+IGNhc3Q8Uj4oKSA9PiBMaXN0LmNhc3RGcm9tPEZsb2F0NjR4MiwgUj4odGhpcyk7CiAgdm9pZCBzZXQgZmlyc3QoRmxvYXQ2NHgyIHZhbHVlKSB7CiAgICBpZiAodGhpcy5sZW5ndGggPT0gMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoMCwgdGhpcyk7CiAgICB0aGlzWzBdID0gdmFsdWU7CiAgfQoKICB2b2lkIHNldCBsYXN0KEZsb2F0NjR4MiB2YWx1ZSkgewogICAgaWYgKHRoaXMubGVuZ3RoID09IDApIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KDAsIHRoaXMpOwogICAgdGhpc1t0aGlzLmxlbmd0aCAtIDFdID0gdmFsdWU7CiAgfQoKICBpbnQgaW5kZXhXaGVyZShib29sIHRlc3QoRmxvYXQ2NHgyIGVsZW1lbnQpLCBbaW50IHN0YXJ0ID0gMF0pIHsKICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMDsKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICh0ZXN0KHRoaXNbaV0pKSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIGludCBsYXN0SW5kZXhXaGVyZShib29sIHRlc3QoRmxvYXQ2NHgyIGVsZW1lbnQpLCBbaW50IHN0YXJ0XSkgewogICAgaWYgKHN0YXJ0ID09IG51bGwgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHN0YXJ0ID0gdGhpcy5sZW5ndGggLSAxOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpID49IDA7IGktLSkgewogICAgICBpZiAodGVzdCh0aGlzW2ldKSkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBMaXN0PEZsb2F0NjR4Mj4gb3BlcmF0b3IgKyhMaXN0PEZsb2F0NjR4Mj4gb3RoZXIpIHsKICAgIGludCB0b3RhbExlbmd0aCA9IHRoaXMubGVuZ3RoICsgb3RoZXIubGVuZ3RoOwogICAgcmV0dXJuIDxGbG9hdDY0eDI+W10KICAgICAgLi5sZW5ndGggPSB0b3RhbExlbmd0aAogICAgICAuLnNldFJhbmdlKDAsIHRoaXMubGVuZ3RoLCB0aGlzKQogICAgICAuLnNldFJhbmdlKHRoaXMubGVuZ3RoLCB0b3RhbExlbmd0aCwgb3RoZXIpOwogIH0KCiAgYm9vbCBjb250YWlucyhPYmplY3QgZWxlbWVudCkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICBpZiAodGhpc1tpXSA9PSBlbGVtZW50KSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgc2h1ZmZsZShbUmFuZG9tIHJhbmRvbV0pIHsKICAgIHJhbmRvbSA/Pz0gbmV3IFJhbmRvbSgpOwogICAgdmFyIGkgPSB0aGlzLmxlbmd0aDsKICAgIHdoaWxlIChpID4gMSkgewogICAgICBpbnQgcG9zID0gcmFuZG9tLm5leHRJbnQoaSk7CiAgICAgIGkgLT0gMTsKICAgICAgdmFyIHRtcCA9IHRoaXNbaV07CiAgICAgIHRoaXNbaV0gPSB0aGlzW3Bvc107CiAgICAgIHRoaXNbcG9zXSA9IHRtcDsKICAgIH0KICB9CgogIHZvaWQgc2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZTxGbG9hdDY0eDI+IGZyb20sCiAgICAgIFtpbnQgc2tpcENvdW50ID0gMF0pIHsKICAgIC8vIENoZWNrIHJhbmdlcy4KICAgIGlmICgwID4gc3RhcnQgfHwgc3RhcnQgPiBlbmQgfHwgZW5kID4gbGVuZ3RoKSB7CiAgICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGxlbmd0aCk7IC8vIEFsd2F5cyB0aHJvd3MuCiAgICAgIGFzc2VydChmYWxzZSk7CiAgICB9CiAgICBpZiAoc2tpcENvdW50IDwgMCkgewogICAgICB0aHJvdyBSYW5nZUVycm9yLnJhbmdlKHNraXBDb3VudCwgMCwgbnVsbCwgInNraXBDb3VudCIpOwogICAgfQoKICAgIGZpbmFsIGNvdW50ID0gZW5kIC0gc3RhcnQ7CiAgICBpZiAoKGZyb20ubGVuZ3RoIC0gc2tpcENvdW50KSA8IGNvdW50KSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb0ZldygpOwogICAgfQoKICAgIGlmIChjb3VudCA9PSAwKSByZXR1cm47CgogICAgaWYgKGZyb20gaXMgX1R5cGVkTGlzdEJhc2UpIHsKICAgICAgLy8gTm90ZTogX1R5cGVkTGlzdEJhc2UgaXMgbm90IHJlbGF0ZWQgdG8gSXRlcmFibGU8RmxvYXQ2NHgyPiBzbyB0aGVyZSBpcwogICAgICAvLyBubyBwcm9tb3Rpb24gaGVyZS4KICAgICAgZmluYWwgZnJvbUFzVHlwZWRMaXN0ID0gZnJvbSBhcyBfVHlwZWRMaXN0QmFzZTsKICAgICAgaWYgKHRoaXMuZWxlbWVudFNpemVJbkJ5dGVzID09IGZyb21Bc1R5cGVkTGlzdC5lbGVtZW50U2l6ZUluQnl0ZXMpIHsKICAgICAgICBpZiAoKGNvdW50IDwgMTApICYmIChmcm9tQXNUeXBlZExpc3QuYnVmZmVyICE9IHRoaXMuYnVmZmVyKSkgewogICAgICAgICAgTGlzdHMuY29weShmcm9tIGFzIExpc3Q8RmxvYXQ2NHgyPiwgc2tpcENvdW50LCB0aGlzLCBzdGFydCwgY291bnQpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5idWZmZXIuX2RhdGEuX3NldFJhbmdlKAogICAgICAgICAgICBzdGFydCAqIGVsZW1lbnRTaXplSW5CeXRlcyArIHRoaXMub2Zmc2V0SW5CeXRlcywKICAgICAgICAgICAgY291bnQgKiBlbGVtZW50U2l6ZUluQnl0ZXMsCiAgICAgICAgICAgIGZyb21Bc1R5cGVkTGlzdC5idWZmZXIuX2RhdGEsCiAgICAgICAgICAgIHNraXBDb3VudCAqIGVsZW1lbnRTaXplSW5CeXRlcyArIGZyb21Bc1R5cGVkTGlzdC5vZmZzZXRJbkJ5dGVzLAogICAgICAgICAgICBDbGFzc0lELmdldElEKHRoaXMpLAogICAgICAgICAgICBDbGFzc0lELmdldElEKGZyb20pKSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChmcm9tQXNUeXBlZExpc3QuYnVmZmVyID09IHRoaXMuYnVmZmVyKSB7CiAgICAgICAgLy8gRGlmZmVyZW50IGVsZW1lbnQgc2l6ZXMsIGJ1dCBzYW1lIGJ1ZmZlciBtZWFucyB0aGF0IHdlIG5lZWQKICAgICAgICAvLyBhbiBpbnRlcm1lZGlhdGUgc3RydWN0dXJlLgogICAgICAgIC8vIFRPRE8oc3JkamFuKTogT3B0aW1pemUgdG8gc2tpcCBjb3B5aW5nIGlmIHRoZSByYW5nZSBkb2VzIG5vdCBvdmVybGFwLgogICAgICAgIGZpbmFsIGZyb21Bc0xpc3QgPSBmcm9tIGFzIExpc3Q8RmxvYXQ2NHgyPjsKICAgICAgICBmaW5hbCB0ZW1wQnVmZmVyID0gX2NyZWF0ZUxpc3QoY291bnQpOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICAgICAgdGVtcEJ1ZmZlcltpXSA9IGZyb21Bc0xpc3Rbc2tpcENvdW50ICsgaV07CiAgICAgICAgfQogICAgICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgICAgICB0aGlzW2ldID0gdGVtcEJ1ZmZlcltpIC0gc3RhcnRdOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KCiAgICBMaXN0IG90aGVyTGlzdDsKICAgIGludCBvdGhlclN0YXJ0OwogICAgaWYgKGZyb20gaXMgTGlzdDxGbG9hdDY0eDI+KSB7CiAgICAgIG90aGVyTGlzdCA9IGZyb207CiAgICAgIG90aGVyU3RhcnQgPSBza2lwQ291bnQ7CiAgICB9IGVsc2UgewogICAgICBvdGhlckxpc3QgPSBmcm9tLnNraXAoc2tpcENvdW50KS50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKICAgICAgb3RoZXJTdGFydCA9IDA7CiAgICB9CiAgICBpZiAob3RoZXJTdGFydCArIGNvdW50ID4gb3RoZXJMaXN0Lmxlbmd0aCkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29GZXcoKTsKICAgIH0KICAgIExpc3RzLmNvcHkob3RoZXJMaXN0LCBvdGhlclN0YXJ0LCB0aGlzLCBzdGFydCwgY291bnQpOwogIH0KCiAgSXRlcmFibGU8RmxvYXQ2NHgyPiB3aGVyZShib29sIGYoRmxvYXQ2NHgyIGVsZW1lbnQpKSA9PgogICAgICBuZXcgV2hlcmVJdGVyYWJsZTxGbG9hdDY0eDI+KHRoaXMsIGYpOwoKICBJdGVyYWJsZTxGbG9hdDY0eDI+IHRha2UoaW50IG4pID0+IG5ldyBTdWJMaXN0SXRlcmFibGU8RmxvYXQ2NHgyPih0aGlzLCAwLCBuKTsKCiAgSXRlcmFibGU8RmxvYXQ2NHgyPiB0YWtlV2hpbGUoYm9vbCB0ZXN0KEZsb2F0NjR4MiBlbGVtZW50KSkgPT4KICAgICAgbmV3IFRha2VXaGlsZUl0ZXJhYmxlPEZsb2F0NjR4Mj4odGhpcywgdGVzdCk7CgogIEl0ZXJhYmxlPEZsb2F0NjR4Mj4gc2tpcChpbnQgbikgPT4KICAgICAgbmV3IFN1Ykxpc3RJdGVyYWJsZTxGbG9hdDY0eDI+KHRoaXMsIG4sIG51bGwpOwoKICBJdGVyYWJsZTxGbG9hdDY0eDI+IHNraXBXaGlsZShib29sIHRlc3QoRmxvYXQ2NHgyIGVsZW1lbnQpKSA9PgogICAgICBuZXcgU2tpcFdoaWxlSXRlcmFibGU8RmxvYXQ2NHgyPih0aGlzLCB0ZXN0KTsKCiAgSXRlcmFibGU8RmxvYXQ2NHgyPiBnZXQgcmV2ZXJzZWQgPT4gbmV3IFJldmVyc2VkTGlzdEl0ZXJhYmxlPEZsb2F0NjR4Mj4odGhpcyk7CgogIE1hcDxpbnQsIEZsb2F0NjR4Mj4gYXNNYXAoKSA9PiBuZXcgTGlzdE1hcFZpZXc8RmxvYXQ2NHgyPih0aGlzKTsKCiAgSXRlcmFibGU8RmxvYXQ2NHgyPiBnZXRSYW5nZShpbnQgc3RhcnQsIFtpbnQgZW5kXSkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgcmV0dXJuIG5ldyBTdWJMaXN0SXRlcmFibGU8RmxvYXQ2NHgyPih0aGlzLCBzdGFydCwgZW5kKTsKICB9CgogIEl0ZXJhdG9yPEZsb2F0NjR4Mj4gZ2V0IGl0ZXJhdG9yID0+IG5ldyBfVHlwZWRMaXN0SXRlcmF0b3I8RmxvYXQ2NHgyPih0aGlzKTsKCiAgTGlzdDxGbG9hdDY0eDI+IHRvTGlzdCh7Ym9vbCBncm93YWJsZTogdHJ1ZX0pIHsKICAgIHJldHVybiBuZXcgTGlzdDxGbG9hdDY0eDI+LmZyb20odGhpcywgZ3Jvd2FibGU6IGdyb3dhYmxlKTsKICB9CgogIFNldDxGbG9hdDY0eDI+IHRvU2V0KCkgewogICAgcmV0dXJuIG5ldyBTZXQ8RmxvYXQ2NHgyPi5mcm9tKHRoaXMpOwogIH0KCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihGbG9hdDY0eDIgZWxlbWVudCkpIHsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgZih0aGlzW2ldKTsKICAgIH0KICB9CgogIEZsb2F0NjR4MiByZWR1Y2UoRmxvYXQ2NHgyIGNvbWJpbmUoRmxvYXQ2NHgyIHZhbHVlLCBGbG9hdDY0eDIgZWxlbWVudCkpIHsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGlmIChsZW4gPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB2YXIgdmFsdWUgPSB0aGlzWzBdOwogICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47ICsraSkgewogICAgICB2YWx1ZSA9IGNvbWJpbmUodmFsdWUsIHRoaXNbaV0pOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgVCBmb2xkPFQ+KFQgaW5pdGlhbFZhbHVlLCBUIGNvbWJpbmUoVCBpbml0aWFsVmFsdWUsIEZsb2F0NjR4MiBlbGVtZW50KSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICBpbml0aWFsVmFsdWUgPSBjb21iaW5lKGluaXRpYWxWYWx1ZSwgdGhpc1tpXSk7CiAgICB9CiAgICByZXR1cm4gaW5pdGlhbFZhbHVlOwogIH0KCiAgSXRlcmFibGU8VD4gbWFwPFQ+KFQgZihGbG9hdDY0eDIgZWxlbWVudCkpID0+CiAgICAgIG5ldyBNYXBwZWRJdGVyYWJsZTxGbG9hdDY0eDIsIFQ+KHRoaXMsIGYpOwoKICBJdGVyYWJsZTxUPiBleHBhbmQ8VD4oSXRlcmFibGU8VD4gZihGbG9hdDY0eDIgZWxlbWVudCkpID0+CiAgICAgIG5ldyBFeHBhbmRJdGVyYWJsZTxGbG9hdDY0eDIsIFQ+KHRoaXMsIGYpOwoKICBib29sIGV2ZXJ5KGJvb2wgZihGbG9hdDY0eDIgZWxlbWVudCkpIHsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgaWYgKCFmKHRoaXNbaV0pKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGJvb2wgYW55KGJvb2wgZihGbG9hdDY0eDIgZWxlbWVudCkpIHsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgaWYgKGYodGhpc1tpXSkpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgRmxvYXQ2NHgyIGZpcnN0V2hlcmUoYm9vbCB0ZXN0KEZsb2F0NjR4MiBlbGVtZW50KSwge0Zsb2F0NjR4MiBvckVsc2UoKX0pIHsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzW2ldOwogICAgICBpZiAodGVzdChlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRmxvYXQ2NHgyIGxhc3RXaGVyZShib29sIHRlc3QoRmxvYXQ2NHgyIGVsZW1lbnQpLCB7RmxvYXQ2NHgyIG9yRWxzZSgpfSkgewogICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgIHZhciBlbGVtZW50ID0gdGhpc1tpXTsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHsKICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgICAgfQogICAgfQogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEZsb2F0NjR4MiBzaW5nbGVXaGVyZShib29sIHRlc3QoRmxvYXQ2NHgyIGVsZW1lbnQpLCB7RmxvYXQ2NHgyIG9yRWxzZSgpfSkgewogICAgdmFyIHJlc3VsdCA9IG51bGw7CiAgICBib29sIGZvdW5kTWF0Y2hpbmcgPSBmYWxzZTsKICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzW2ldOwogICAgICBpZiAodGVzdChlbGVtZW50KSkgewogICAgICAgIGlmIChmb3VuZE1hdGNoaW5nKSB7CiAgICAgICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICAgICAgfQogICAgICAgIHJlc3VsdCA9IGVsZW1lbnQ7CiAgICAgICAgZm91bmRNYXRjaGluZyA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIGlmIChmb3VuZE1hdGNoaW5nKSByZXR1cm4gcmVzdWx0OwogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEZsb2F0NjR4MiBlbGVtZW50QXQoaW50IGluZGV4KSB7CiAgICByZXR1cm4gdGhpc1tpbmRleF07CiAgfQoKICB2b2lkIGFkZChGbG9hdDY0eDIgdmFsdWUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgYWRkIHRvIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEZsb2F0NjR4Mj4gdmFsdWUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgYWRkIHRvIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIHZvaWQgaW5zZXJ0KGludCBpbmRleCwgRmxvYXQ2NHgyIHZhbHVlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGluc2VydCBpbnRvIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIHZvaWQgaW5zZXJ0QWxsKGludCBpbmRleCwgSXRlcmFibGU8RmxvYXQ2NHgyPiB2YWx1ZXMpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgaW5zZXJ0IGludG8gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCBzb3J0KFtpbnQgY29tcGFyZShGbG9hdDY0eDIgYSwgRmxvYXQ2NHgyIGIpXSkgewogICAgaWYgKGNvbXBhcmUgPT0gbnVsbCkgewogICAgICB0aHJvdyAiU0lNRCBkb24ndCBoYXZlIGRlZmF1bHQgY29tcGFyZS4iOwogICAgfQogICAgU29ydC5zb3J0KHRoaXMsIGNvbXBhcmUpOwogIH0KCiAgaW50IGluZGV4T2YoRmxvYXQ2NHgyIGVsZW1lbnQsIFtpbnQgc3RhcnQgPSAwXSkgewogICAgaWYgKHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB7CiAgICAgIHJldHVybiAtMTsKICAgIH0gZWxzZSBpZiAoc3RhcnQgPCAwKSB7CiAgICAgIHN0YXJ0ID0gMDsKICAgIH0KICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRoaXNbaV0gPT0gZWxlbWVudCkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBpbnQgbGFzdEluZGV4T2YoRmxvYXQ2NHgyIGVsZW1lbnQsIFtpbnQgc3RhcnQgPSBudWxsXSkgewogICAgaWYgKHN0YXJ0ID09IG51bGwgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHsKICAgICAgc3RhcnQgPSB0aGlzLmxlbmd0aCAtIDE7CiAgICB9IGVsc2UgaWYgKHN0YXJ0IDwgMCkgewogICAgICByZXR1cm4gLTE7CiAgICB9CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPj0gMDsgaS0tKSB7CiAgICAgIGlmICh0aGlzW2ldID09IGVsZW1lbnQpIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgRmxvYXQ2NHgyIHJlbW92ZUxhc3QoKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIEZsb2F0NjR4MiByZW1vdmVBdChpbnQgaW5kZXgpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRmxvYXQ2NHgyIGVsZW1lbnQpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEZsb2F0NjR4MiBlbGVtZW50KSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICBGbG9hdDY0eDIgZ2V0IGZpcnN0IHsKICAgIGlmIChsZW5ndGggPiAwKSByZXR1cm4gdGhpc1swXTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRmxvYXQ2NHgyIGdldCBsYXN0IHsKICAgIGlmIChsZW5ndGggPiAwKSByZXR1cm4gdGhpc1tsZW5ndGggLSAxXTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRmxvYXQ2NHgyIGdldCBzaW5nbGUgewogICAgaWYgKGxlbmd0aCA9PSAxKSByZXR1cm4gdGhpc1swXTsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgfQoKICBGbG9hdDY0eDJMaXN0IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pIHsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgIHZhciBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIEZsb2F0NjR4Mkxpc3QgcmVzdWx0ID0gX2NyZWF0ZUxpc3QobGVuZ3RoKTsKICAgIHJlc3VsdC5zZXRSYW5nZSgwLCBsZW5ndGgsIHRoaXMsIHN0YXJ0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIHNldEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPEZsb2F0NjR4Mj4gaXRlcmFibGUpIHsKICAgIGZpbmFsIGVuZCA9IGl0ZXJhYmxlLmxlbmd0aCArIGluZGV4OwogICAgc2V0UmFuZ2UoaW5kZXgsIGVuZCwgaXRlcmFibGUpOwogIH0KCiAgdm9pZCBmaWxsUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBbRmxvYXQ2NHgyIGZpbGxWYWx1ZV0pIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7CiAgICAgIHRoaXNbaV0gPSBmaWxsVmFsdWU7CiAgICB9CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9CeXRlQnVmZmVyIGltcGxlbWVudHMgQnl0ZUJ1ZmZlciB7CiAgZmluYWwgX1R5cGVkTGlzdCBfZGF0YTsKCiAgX0J5dGVCdWZmZXIodGhpcy5fZGF0YSk7CgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBmYWN0b3J5IF9CeXRlQnVmZmVyLl9OZXcoZGF0YSkgPT4gbmV3IF9CeXRlQnVmZmVyKGRhdGEpOwoKICAvLyBGb3J3YXJkIGNhbGxzIHRvIF9kYXRhLgogIGludCBnZXQgbGVuZ3RoSW5CeXRlcyA9PiBfZGF0YS5sZW5ndGhJbkJ5dGVzOwogIGludCBnZXQgaGFzaENvZGUgPT4gX2RhdGEuaGFzaENvZGU7CiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpID0+CiAgICAgIChvdGhlciBpcyBfQnl0ZUJ1ZmZlcikgJiYgaWRlbnRpY2FsKF9kYXRhLCBvdGhlci5fZGF0YSk7CgogIEJ5dGVEYXRhIGFzQnl0ZURhdGEoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIGxlbmd0aCA/Pz0gdGhpcy5sZW5ndGhJbkJ5dGVzIC0gb2Zmc2V0SW5CeXRlczsKICAgIF9yYW5nZUNoZWNrKHRoaXMuX2RhdGEubGVuZ3RoSW5CeXRlcywgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICAgIHJldHVybiBuZXcgX0J5dGVEYXRhVmlldy5fKHRoaXMuX2RhdGEsIG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgfQoKICBJbnQ4TGlzdCBhc0ludDhMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICBsZW5ndGggPz89ICh0aGlzLmxlbmd0aEluQnl0ZXMgLSBvZmZzZXRJbkJ5dGVzKSB+LyBJbnQ4TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgICBfcmFuZ2VDaGVjaygKICAgICAgICB0aGlzLmxlbmd0aEluQnl0ZXMsIG9mZnNldEluQnl0ZXMsIGxlbmd0aCAqIEludDhMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgICByZXR1cm4gbmV3IF9JbnQ4QXJyYXlWaWV3Ll8odGhpcy5fZGF0YSwgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIFVpbnQ4TGlzdCBhc1VpbnQ4TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgbGVuZ3RoID8/PQogICAgICAgICh0aGlzLmxlbmd0aEluQnl0ZXMgLSBvZmZzZXRJbkJ5dGVzKSB+LyBVaW50OExpc3QuYnl0ZXNQZXJFbGVtZW50OwogICAgX3JhbmdlQ2hlY2soCiAgICAgICAgdGhpcy5sZW5ndGhJbkJ5dGVzLCBvZmZzZXRJbkJ5dGVzLCBsZW5ndGggKiBVaW50OExpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIHJldHVybiBuZXcgX1VpbnQ4QXJyYXlWaWV3Ll8odGhpcy5fZGF0YSwgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIFVpbnQ4Q2xhbXBlZExpc3QgYXNVaW50OENsYW1wZWRMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICBsZW5ndGggPz89ICh0aGlzLmxlbmd0aEluQnl0ZXMgLSBvZmZzZXRJbkJ5dGVzKSB+LwogICAgICAgIFVpbnQ4Q2xhbXBlZExpc3QuYnl0ZXNQZXJFbGVtZW50OwogICAgX3JhbmdlQ2hlY2sodGhpcy5sZW5ndGhJbkJ5dGVzLCBvZmZzZXRJbkJ5dGVzLAogICAgICAgIGxlbmd0aCAqIFVpbnQ4Q2xhbXBlZExpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIHJldHVybiBuZXcgX1VpbnQ4Q2xhbXBlZEFycmF5Vmlldy5fKHRoaXMuX2RhdGEsIG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgfQoKICBJbnQxNkxpc3QgYXNJbnQxNkxpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIGxlbmd0aCA/Pz0KICAgICAgICAodGhpcy5sZW5ndGhJbkJ5dGVzIC0gb2Zmc2V0SW5CeXRlcykgfi8gSW50MTZMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICAgIF9yYW5nZUNoZWNrKAogICAgICAgIHRoaXMubGVuZ3RoSW5CeXRlcywgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoICogSW50MTZMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgICBfb2Zmc2V0QWxpZ25tZW50Q2hlY2sob2Zmc2V0SW5CeXRlcywgSW50MTZMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgICByZXR1cm4gbmV3IF9JbnQxNkFycmF5Vmlldy5fKHRoaXMuX2RhdGEsIG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgfQoKICBVaW50MTZMaXN0IGFzVWludDE2TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgbGVuZ3RoID8/PQogICAgICAgICh0aGlzLmxlbmd0aEluQnl0ZXMgLSBvZmZzZXRJbkJ5dGVzKSB+LyBVaW50MTZMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICAgIF9yYW5nZUNoZWNrKAogICAgICAgIHRoaXMubGVuZ3RoSW5CeXRlcywgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoICogVWludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogICAgX29mZnNldEFsaWdubWVudENoZWNrKG9mZnNldEluQnl0ZXMsIFVpbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIHJldHVybiBuZXcgX1VpbnQxNkFycmF5Vmlldy5fKHRoaXMuX2RhdGEsIG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgfQoKICBJbnQzMkxpc3QgYXNJbnQzMkxpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIGxlbmd0aCA/Pz0KICAgICAgICAodGhpcy5sZW5ndGhJbkJ5dGVzIC0gb2Zmc2V0SW5CeXRlcykgfi8gSW50MzJMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICAgIF9yYW5nZUNoZWNrKAogICAgICAgIHRoaXMubGVuZ3RoSW5CeXRlcywgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoICogSW50MzJMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgICBfb2Zmc2V0QWxpZ25tZW50Q2hlY2sob2Zmc2V0SW5CeXRlcywgSW50MzJMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgICByZXR1cm4gbmV3IF9JbnQzMkFycmF5Vmlldy5fKHRoaXMuX2RhdGEsIG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgfQoKICBVaW50MzJMaXN0IGFzVWludDMyTGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgbGVuZ3RoID8/PQogICAgICAgICh0aGlzLmxlbmd0aEluQnl0ZXMgLSBvZmZzZXRJbkJ5dGVzKSB+LyBVaW50MzJMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICAgIF9yYW5nZUNoZWNrKAogICAgICAgIHRoaXMubGVuZ3RoSW5CeXRlcywgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoICogVWludDMyTGlzdC5ieXRlc1BlckVsZW1lbnQpOwogICAgX29mZnNldEFsaWdubWVudENoZWNrKG9mZnNldEluQnl0ZXMsIFVpbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIHJldHVybiBuZXcgX1VpbnQzMkFycmF5Vmlldy5fKHRoaXMuX2RhdGEsIG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgfQoKICBJbnQ2NExpc3QgYXNJbnQ2NExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIGxlbmd0aCA/Pz0KICAgICAgICAodGhpcy5sZW5ndGhJbkJ5dGVzIC0gb2Zmc2V0SW5CeXRlcykgfi8gSW50NjRMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICAgIF9yYW5nZUNoZWNrKAogICAgICAgIHRoaXMubGVuZ3RoSW5CeXRlcywgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoICogSW50NjRMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgICBfb2Zmc2V0QWxpZ25tZW50Q2hlY2sob2Zmc2V0SW5CeXRlcywgSW50NjRMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgICByZXR1cm4gbmV3IF9JbnQ2NEFycmF5Vmlldy5fKHRoaXMuX2RhdGEsIG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgfQoKICBVaW50NjRMaXN0IGFzVWludDY0TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgewogICAgbGVuZ3RoID8/PQogICAgICAgICh0aGlzLmxlbmd0aEluQnl0ZXMgLSBvZmZzZXRJbkJ5dGVzKSB+LyBVaW50NjRMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICAgIF9yYW5nZUNoZWNrKAogICAgICAgIHRoaXMubGVuZ3RoSW5CeXRlcywgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoICogVWludDY0TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogICAgX29mZnNldEFsaWdubWVudENoZWNrKG9mZnNldEluQnl0ZXMsIFVpbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIHJldHVybiBuZXcgX1VpbnQ2NEFycmF5Vmlldy5fKHRoaXMuX2RhdGEsIG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgfQoKICBGbG9hdDMyTGlzdCBhc0Zsb2F0MzJMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICBsZW5ndGggPz89CiAgICAgICAgKHRoaXMubGVuZ3RoSW5CeXRlcyAtIG9mZnNldEluQnl0ZXMpIH4vIEZsb2F0MzJMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICAgIF9yYW5nZUNoZWNrKHRoaXMubGVuZ3RoSW5CeXRlcywgb2Zmc2V0SW5CeXRlcywKICAgICAgICBsZW5ndGggKiBGbG9hdDMyTGlzdC5ieXRlc1BlckVsZW1lbnQpOwogICAgX29mZnNldEFsaWdubWVudENoZWNrKG9mZnNldEluQnl0ZXMsIEZsb2F0MzJMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgICByZXR1cm4gbmV3IF9GbG9hdDMyQXJyYXlWaWV3Ll8odGhpcy5fZGF0YSwgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIEZsb2F0NjRMaXN0IGFzRmxvYXQ2NExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIGxlbmd0aCA/Pz0KICAgICAgICAodGhpcy5sZW5ndGhJbkJ5dGVzIC0gb2Zmc2V0SW5CeXRlcykgfi8gRmxvYXQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50OwogICAgX3JhbmdlQ2hlY2sodGhpcy5sZW5ndGhJbkJ5dGVzLCBvZmZzZXRJbkJ5dGVzLAogICAgICAgIGxlbmd0aCAqIEZsb2F0NjRMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgICBfb2Zmc2V0QWxpZ25tZW50Q2hlY2sob2Zmc2V0SW5CeXRlcywgRmxvYXQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIHJldHVybiBuZXcgX0Zsb2F0NjRBcnJheVZpZXcuXyh0aGlzLl9kYXRhLCBvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgRmxvYXQzMng0TGlzdCBhc0Zsb2F0MzJ4NExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pIHsKICAgIGxlbmd0aCA/Pz0KICAgICAgICAodGhpcy5sZW5ndGhJbkJ5dGVzIC0gb2Zmc2V0SW5CeXRlcykgfi8gRmxvYXQzMng0TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgICBfcmFuZ2VDaGVjayh0aGlzLmxlbmd0aEluQnl0ZXMsIG9mZnNldEluQnl0ZXMsCiAgICAgICAgbGVuZ3RoICogRmxvYXQzMng0TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogICAgX29mZnNldEFsaWdubWVudENoZWNrKG9mZnNldEluQnl0ZXMsIEZsb2F0MzJ4NExpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIHJldHVybiBuZXcgX0Zsb2F0MzJ4NEFycmF5Vmlldy5fKHRoaXMuX2RhdGEsIG9mZnNldEluQnl0ZXMsIGxlbmd0aCk7CiAgfQoKICBJbnQzMng0TGlzdCBhc0ludDMyeDRMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICBsZW5ndGggPz89CiAgICAgICAgKHRoaXMubGVuZ3RoSW5CeXRlcyAtIG9mZnNldEluQnl0ZXMpIH4vIEludDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICAgIF9yYW5nZUNoZWNrKHRoaXMubGVuZ3RoSW5CeXRlcywgb2Zmc2V0SW5CeXRlcywKICAgICAgICBsZW5ndGggKiBJbnQzMng0TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogICAgX29mZnNldEFsaWdubWVudENoZWNrKG9mZnNldEluQnl0ZXMsIEludDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgICByZXR1cm4gbmV3IF9JbnQzMng0QXJyYXlWaWV3Ll8odGhpcy5fZGF0YSwgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKICB9CgogIEZsb2F0NjR4Mkxpc3QgYXNGbG9hdDY0eDJMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICBsZW5ndGggPz89CiAgICAgICAgKHRoaXMubGVuZ3RoSW5CeXRlcyAtIG9mZnNldEluQnl0ZXMpIH4vIEZsb2F0NjR4Mkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogICAgX3JhbmdlQ2hlY2sodGhpcy5sZW5ndGhJbkJ5dGVzLCBvZmZzZXRJbkJ5dGVzLAogICAgICAgIGxlbmd0aCAqIEZsb2F0NjR4Mkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICAgIF9vZmZzZXRBbGlnbm1lbnRDaGVjayhvZmZzZXRJbkJ5dGVzLCBGbG9hdDY0eDJMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgICByZXR1cm4gbmV3IF9GbG9hdDY0eDJBcnJheVZpZXcuXyh0aGlzLl9kYXRhLCBvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgX1R5cGVkTGlzdCBleHRlbmRzIF9UeXBlZExpc3RCYXNlIHsKICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlczsKCiAgLy8gRGVmYXVsdCBtZXRob2QgaW1wbGVtZW50aW5nIHBhcnRzIG9mIHRoZSBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgb2Zmc2V0SW5CeXRlcyB7CiAgICByZXR1cm4gMDsKICB9CgogIGludCBnZXQgbGVuZ3RoSW5CeXRlcyB7CiAgICByZXR1cm4gbGVuZ3RoICogZWxlbWVudFNpemVJbkJ5dGVzOwogIH0KCiAgX0J5dGVCdWZmZXIgZ2V0IGJ1ZmZlciA9PiBuZXcgX0J5dGVCdWZmZXIodGhpcyk7CgogIC8vIE1ldGhvZHMgaW1wbGVtZW50aW5nIHRoZSBjb2xsZWN0aW9uIGludGVyZmFjZS4KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBnZXQgbGVuZ3RoIG5hdGl2ZSAiVHlwZWREYXRhX2xlbmd0aCI7CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBfZ2V0SW50OChpbnQgb2Zmc2V0SW5CeXRlcykgbmF0aXZlICJUeXBlZERhdGFfR2V0SW50OCI7CiAgdm9pZCBfc2V0SW50OChpbnQgb2Zmc2V0SW5CeXRlcywgaW50IHZhbHVlKSBuYXRpdmUgIlR5cGVkRGF0YV9TZXRJbnQ4IjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBfZ2V0VWludDgoaW50IG9mZnNldEluQnl0ZXMpIG5hdGl2ZSAiVHlwZWREYXRhX0dldFVpbnQ4IjsKICB2b2lkIF9zZXRVaW50OChpbnQgb2Zmc2V0SW5CeXRlcywgaW50IHZhbHVlKSBuYXRpdmUgIlR5cGVkRGF0YV9TZXRVaW50OCI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBpbnQgX2dldEludDE2KGludCBvZmZzZXRJbkJ5dGVzKSBuYXRpdmUgIlR5cGVkRGF0YV9HZXRJbnQxNiI7CiAgdm9pZCBfc2V0SW50MTYoaW50IG9mZnNldEluQnl0ZXMsIGludCB2YWx1ZSkgbmF0aXZlICJUeXBlZERhdGFfU2V0SW50MTYiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgaW50IF9nZXRVaW50MTYoaW50IG9mZnNldEluQnl0ZXMpIG5hdGl2ZSAiVHlwZWREYXRhX0dldFVpbnQxNiI7CiAgdm9pZCBfc2V0VWludDE2KGludCBvZmZzZXRJbkJ5dGVzLCBpbnQgdmFsdWUpIG5hdGl2ZSAiVHlwZWREYXRhX1NldFVpbnQxNiI7CgogIGludCBfZ2V0SW50MzIoaW50IG9mZnNldEluQnl0ZXMpIG5hdGl2ZSAiVHlwZWREYXRhX0dldEludDMyIjsKICB2b2lkIF9zZXRJbnQzMihpbnQgb2Zmc2V0SW5CeXRlcywgaW50IHZhbHVlKSBuYXRpdmUgIlR5cGVkRGF0YV9TZXRJbnQzMiI7CgogIGludCBfZ2V0VWludDMyKGludCBvZmZzZXRJbkJ5dGVzKSBuYXRpdmUgIlR5cGVkRGF0YV9HZXRVaW50MzIiOwogIHZvaWQgX3NldFVpbnQzMihpbnQgb2Zmc2V0SW5CeXRlcywgaW50IHZhbHVlKSBuYXRpdmUgIlR5cGVkRGF0YV9TZXRVaW50MzIiOwoKICBpbnQgX2dldEludDY0KGludCBvZmZzZXRJbkJ5dGVzKSBuYXRpdmUgIlR5cGVkRGF0YV9HZXRJbnQ2NCI7CiAgdm9pZCBfc2V0SW50NjQoaW50IG9mZnNldEluQnl0ZXMsIGludCB2YWx1ZSkgbmF0aXZlICJUeXBlZERhdGFfU2V0SW50NjQiOwoKICBpbnQgX2dldFVpbnQ2NChpbnQgb2Zmc2V0SW5CeXRlcykgbmF0aXZlICJUeXBlZERhdGFfR2V0VWludDY0IjsKICB2b2lkIF9zZXRVaW50NjQoaW50IG9mZnNldEluQnl0ZXMsIGludCB2YWx1ZSkgbmF0aXZlICJUeXBlZERhdGFfU2V0VWludDY0IjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19Eb3VibGUiKQogIGRvdWJsZSBfZ2V0RmxvYXQzMihpbnQgb2Zmc2V0SW5CeXRlcykgbmF0aXZlICJUeXBlZERhdGFfR2V0RmxvYXQzMiI7CiAgdm9pZCBfc2V0RmxvYXQzMihpbnQgb2Zmc2V0SW5CeXRlcywgZG91YmxlIHZhbHVlKQogICAgICBuYXRpdmUgIlR5cGVkRGF0YV9TZXRGbG9hdDMyIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19Eb3VibGUiKQogIGRvdWJsZSBfZ2V0RmxvYXQ2NChpbnQgb2Zmc2V0SW5CeXRlcykgbmF0aXZlICJUeXBlZERhdGFfR2V0RmxvYXQ2NCI7CiAgdm9pZCBfc2V0RmxvYXQ2NChpbnQgb2Zmc2V0SW5CeXRlcywgZG91YmxlIHZhbHVlKQogICAgICBuYXRpdmUgIlR5cGVkRGF0YV9TZXRGbG9hdDY0IjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQzMng0KQogIEZsb2F0MzJ4NCBfZ2V0RmxvYXQzMng0KGludCBvZmZzZXRJbkJ5dGVzKSBuYXRpdmUgIlR5cGVkRGF0YV9HZXRGbG9hdDMyeDQiOwogIHZvaWQgX3NldEZsb2F0MzJ4NChpbnQgb2Zmc2V0SW5CeXRlcywgRmxvYXQzMng0IHZhbHVlKQogICAgICBuYXRpdmUgIlR5cGVkRGF0YV9TZXRGbG9hdDMyeDQiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQzMng0KQogIEludDMyeDQgX2dldEludDMyeDQoaW50IG9mZnNldEluQnl0ZXMpIG5hdGl2ZSAiVHlwZWREYXRhX0dldEludDMyeDQiOwogIHZvaWQgX3NldEludDMyeDQoaW50IG9mZnNldEluQnl0ZXMsIEludDMyeDQgdmFsdWUpCiAgICAgIG5hdGl2ZSAiVHlwZWREYXRhX1NldEludDMyeDQiOwoKICBGbG9hdDY0eDIgX2dldEZsb2F0NjR4MihpbnQgb2Zmc2V0SW5CeXRlcykgbmF0aXZlICJUeXBlZERhdGFfR2V0RmxvYXQ2NHgyIjsKICB2b2lkIF9zZXRGbG9hdDY0eDIoaW50IG9mZnNldEluQnl0ZXMsIEZsb2F0NjR4MiB2YWx1ZSkKICAgICAgbmF0aXZlICJUeXBlZERhdGFfU2V0RmxvYXQ2NHgyIjsKCiAgLyoqCiAgICogU3RvcmVzIHRoZSBbQ29kZVVuaXRzXSBhcyBVVEYtMTYgdW5pdHMgaW50byB0aGlzIFR5cGVkRGF0YSBhdAogICAqIHBvc2l0aW9ucyBbc3RhcnRdLi5bZW5kXSAodWludDE2IGluZGljZXMpLgogICAqLwogIHZvaWQgX3NldENvZGVVbml0cygKICAgICAgQ29kZVVuaXRzIHVuaXRzLCBpbnQgYnl0ZVN0YXJ0LCBpbnQgbGVuZ3RoLCBpbnQgc2tpcENvdW50KSB7CiAgICBhc3NlcnQoYnl0ZVN0YXJ0ICsgbGVuZ3RoICogVWludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQgPD0gbGVuZ3RoSW5CeXRlcyk7CiAgICBTdHJpbmcgc3RyaW5nID0gQ29kZVVuaXRzLnN0cmluZ09mKHVuaXRzKTsKICAgIGludCBzbGljZUVuZCA9IHNraXBDb3VudCArIGxlbmd0aDsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKAogICAgICAgIHNraXBDb3VudCwgc2xpY2VFbmQsIHN0cmluZy5sZW5ndGgsICJza2lwQ291bnQiLCAic2tpcENvdW50ICsgbGVuZ3RoIik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIF9zZXRVaW50MTYoYnl0ZVN0YXJ0ICsgaSAqIFVpbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50LAogICAgICAgICAgc3RyaW5nLmNvZGVVbml0QXQoc2tpcENvdW50ICsgaSkpOwogICAgfQogIH0KfQoKQHBhdGNoCmNsYXNzIEludDhMaXN0IHsKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQ4TGlzdCkKICBmYWN0b3J5IEludDhMaXN0KGludCBsZW5ndGgpIG5hdGl2ZSAiVHlwZWREYXRhX0ludDhBcnJheV9uZXciOwoKICBAcGF0Y2gKICBmYWN0b3J5IEludDhMaXN0LmZyb21MaXN0KExpc3Q8aW50PiBlbGVtZW50cykgewogICAgcmV0dXJuIG5ldyBJbnQ4TGlzdChlbGVtZW50cy5sZW5ndGgpCiAgICAgIC4uc2V0UmFuZ2UoMCwgZWxlbWVudHMubGVuZ3RoLCBlbGVtZW50cyk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9JbnQ4TGlzdCBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0ludExpc3RNaXhpbiwgX1R5cGVkSW50TGlzdE1peGluPEludDhMaXN0PgogICAgaW1wbGVtZW50cyBJbnQ4TGlzdCB7CiAgZmFjdG9yeSBfSW50OExpc3QuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgTGlzdCBpbnRlcmZhY2UuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW50OChpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEludDgoaW5kZXgsIF90b0ludDgodmFsdWUpKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gSW50OExpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIEludDhMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgSW50OExpc3QobGVuZ3RoKTsKICB9Cn0KCkBwYXRjaApjbGFzcyBVaW50OExpc3QgewogIEBwYXRjaAogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX1VpbnQ4TGlzdCkKICBmYWN0b3J5IFVpbnQ4TGlzdChpbnQgbGVuZ3RoKSBuYXRpdmUgIlR5cGVkRGF0YV9VaW50OEFycmF5X25ldyI7CgogIEBwYXRjaAogIGZhY3RvcnkgVWludDhMaXN0LmZyb21MaXN0KExpc3Q8aW50PiBlbGVtZW50cykgewogICAgcmV0dXJuIG5ldyBVaW50OExpc3QoZWxlbWVudHMubGVuZ3RoKQogICAgICAuLnNldFJhbmdlKDAsIGVsZW1lbnRzLmxlbmd0aCwgZWxlbWVudHMpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfVWludDhMaXN0IGV4dGVuZHMgX1R5cGVkTGlzdAogICAgd2l0aCBfSW50TGlzdE1peGluLCBfVHlwZWRJbnRMaXN0TWl4aW48VWludDhMaXN0PgogICAgaW1wbGVtZW50cyBVaW50OExpc3QgewogIGZhY3RvcnkgX1VpbnQ4TGlzdC5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KCiAgLy8gTWV0aG9kcyBpbXBsZW1lbnRpbmcgTGlzdCBpbnRlcmZhY2UuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0VWludDgoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF9zZXRVaW50OChpbmRleCwgX3RvVWludDgodmFsdWUpKTsKICB9CgogIC8vIE1ldGhvZHMgaW1wbGVtZW50aW5nIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIFVpbnQ4TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgVWludDhMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgVWludDhMaXN0KGxlbmd0aCk7CiAgfQp9CgpAcGF0Y2gKY2xhc3MgVWludDhDbGFtcGVkTGlzdCB7CiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfVWludDhDbGFtcGVkTGlzdCkKICBmYWN0b3J5IFVpbnQ4Q2xhbXBlZExpc3QoaW50IGxlbmd0aCkgbmF0aXZlICJUeXBlZERhdGFfVWludDhDbGFtcGVkQXJyYXlfbmV3IjsKCiAgQHBhdGNoCiAgZmFjdG9yeSBVaW50OENsYW1wZWRMaXN0LmZyb21MaXN0KExpc3Q8aW50PiBlbGVtZW50cykgewogICAgcmV0dXJuIG5ldyBVaW50OENsYW1wZWRMaXN0KGVsZW1lbnRzLmxlbmd0aCkKICAgICAgLi5zZXRSYW5nZSgwLCBlbGVtZW50cy5sZW5ndGgsIGVsZW1lbnRzKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1VpbnQ4Q2xhbXBlZExpc3QgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxVaW50OENsYW1wZWRMaXN0PgogICAgaW1wbGVtZW50cyBVaW50OENsYW1wZWRMaXN0IHsKICBmYWN0b3J5IF9VaW50OENsYW1wZWRMaXN0Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvLyBNZXRob2RzIGltcGxlbWVudGluZyBMaXN0IGludGVyZmFjZS4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgaW50IG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF9nZXRVaW50OChpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldFVpbnQ4KGluZGV4LCBfdG9DbGFtcGVkVWludDgodmFsdWUpKTsKICB9CgogIC8vIE1ldGhvZHMgaW1wbGVtZW50aW5nIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIFVpbnQ4TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgVWludDhDbGFtcGVkTGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IFVpbnQ4Q2xhbXBlZExpc3QobGVuZ3RoKTsKICB9Cn0KCkBwYXRjaApjbGFzcyBJbnQxNkxpc3QgewogIEBwYXRjaAogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0ludDE2TGlzdCkKICBmYWN0b3J5IEludDE2TGlzdChpbnQgbGVuZ3RoKSBuYXRpdmUgIlR5cGVkRGF0YV9JbnQxNkFycmF5X25ldyI7CgogIEBwYXRjaAogIGZhY3RvcnkgSW50MTZMaXN0LmZyb21MaXN0KExpc3Q8aW50PiBlbGVtZW50cykgewogICAgcmV0dXJuIG5ldyBJbnQxNkxpc3QoZWxlbWVudHMubGVuZ3RoKQogICAgICAuLnNldFJhbmdlKDAsIGVsZW1lbnRzLmxlbmd0aCwgZWxlbWVudHMpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfSW50MTZMaXN0IGV4dGVuZHMgX1R5cGVkTGlzdAogICAgd2l0aCBfSW50TGlzdE1peGluLCBfVHlwZWRJbnRMaXN0TWl4aW48SW50MTZMaXN0PgogICAgaW1wbGVtZW50cyBJbnQxNkxpc3QgewogIGZhY3RvcnkgX0ludDE2TGlzdC5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBMaXN0IGludGVyZmFjZS4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgaW50IG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF9nZXRJbmRleGVkSW50MTYoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF9zZXRJbmRleGVkSW50MTYoaW5kZXgsIF90b0ludDE2KHZhbHVlKSk7CiAgfQoKICB2b2lkIHNldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgSXRlcmFibGUgaXRlcmFibGUsIFtpbnQgc2tpcENvdW50ID0gMF0pIHsKICAgIGlmIChpdGVyYWJsZSBpcyBDb2RlVW5pdHMpIHsKICAgICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICAgIGludCBieXRlU3RhcnQgPSB0aGlzLm9mZnNldEluQnl0ZXMgKyBzdGFydCAqIEludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgICAgIF9zZXRDb2RlVW5pdHMoaXRlcmFibGUsIGJ5dGVTdGFydCwgbGVuZ3RoLCBza2lwQ291bnQpOwogICAgfSBlbHNlIHsKICAgICAgc3VwZXIuc2V0UmFuZ2Uoc3RhcnQsIGVuZCwgaXRlcmFibGUsIHNraXBDb3VudCk7CiAgICB9CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgSW50MTZMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgSW50MTZMaXN0KGxlbmd0aCk7CiAgfQoKICBpbnQgX2dldEluZGV4ZWRJbnQxNihpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZ2V0SW50MTYoaW5kZXggKiBJbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIHZvaWQgX3NldEluZGV4ZWRJbnQxNihpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgX3NldEludDE2KGluZGV4ICogSW50MTZMaXN0LmJ5dGVzUGVyRWxlbWVudCwgdmFsdWUpOwogIH0KfQoKQHBhdGNoCmNsYXNzIFVpbnQxNkxpc3QgewogIEBwYXRjaAogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX1VpbnQxNkxpc3QpCiAgZmFjdG9yeSBVaW50MTZMaXN0KGludCBsZW5ndGgpIG5hdGl2ZSAiVHlwZWREYXRhX1VpbnQxNkFycmF5X25ldyI7CgogIEBwYXRjaAogIGZhY3RvcnkgVWludDE2TGlzdC5mcm9tTGlzdChMaXN0PGludD4gZWxlbWVudHMpIHsKICAgIHJldHVybiBuZXcgVWludDE2TGlzdChlbGVtZW50cy5sZW5ndGgpCiAgICAgIC4uc2V0UmFuZ2UoMCwgZWxlbWVudHMubGVuZ3RoLCBlbGVtZW50cyk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9VaW50MTZMaXN0IGV4dGVuZHMgX1R5cGVkTGlzdAogICAgd2l0aCBfSW50TGlzdE1peGluLCBfVHlwZWRJbnRMaXN0TWl4aW48VWludDE2TGlzdD4KICAgIGltcGxlbWVudHMgVWludDE2TGlzdCB7CiAgZmFjdG9yeSBfVWludDE2TGlzdC5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgTGlzdCBpbnRlcmZhY2UuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZFVpbnQxNihpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRVaW50MTYoaW5kZXgsIF90b1VpbnQxNih2YWx1ZSkpOwogIH0KCiAgdm9pZCBzZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlIGl0ZXJhYmxlLCBbaW50IHNraXBDb3VudCA9IDBdKSB7CiAgICBpZiAoaXRlcmFibGUgaXMgQ29kZVVuaXRzKSB7CiAgICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgICBpbnQgYnl0ZVN0YXJ0ID0gdGhpcy5vZmZzZXRJbkJ5dGVzICsgc3RhcnQgKiBVaW50MTZMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICAgICAgX3NldENvZGVVbml0cyhpdGVyYWJsZSwgYnl0ZVN0YXJ0LCBsZW5ndGgsIHNraXBDb3VudCk7CiAgICB9IGVsc2UgewogICAgICBzdXBlci5zZXRSYW5nZShzdGFydCwgZW5kLCBpdGVyYWJsZSwgc2tpcENvdW50KTsKICAgIH0KICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIFVpbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIFVpbnQxNkxpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBVaW50MTZMaXN0KGxlbmd0aCk7CiAgfQoKICBpbnQgX2dldEluZGV4ZWRVaW50MTYoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2dldFVpbnQxNihpbmRleCAqIFVpbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIHZvaWQgX3NldEluZGV4ZWRVaW50MTYoaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIF9zZXRVaW50MTYoaW5kZXggKiBVaW50MTZMaXN0LmJ5dGVzUGVyRWxlbWVudCwgdmFsdWUpOwogIH0KfQoKQHBhdGNoCmNsYXNzIEludDMyTGlzdCB7CiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50MzJMaXN0KQogIGZhY3RvcnkgSW50MzJMaXN0KGludCBsZW5ndGgpIG5hdGl2ZSAiVHlwZWREYXRhX0ludDMyQXJyYXlfbmV3IjsKCiAgQHBhdGNoCiAgZmFjdG9yeSBJbnQzMkxpc3QuZnJvbUxpc3QoTGlzdDxpbnQ+IGVsZW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IEludDMyTGlzdChlbGVtZW50cy5sZW5ndGgpCiAgICAgIC4uc2V0UmFuZ2UoMCwgZWxlbWVudHMubGVuZ3RoLCBlbGVtZW50cyk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9JbnQzMkxpc3QgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxJbnQzMkxpc3Q+CiAgICBpbXBsZW1lbnRzIEludDMyTGlzdCB7CiAgZmFjdG9yeSBfSW50MzJMaXN0Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBMaXN0IGludGVyZmFjZS4KICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEluZGV4ZWRJbnQzMihpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRJbnQzMihpbmRleCwgX3RvSW50MzIodmFsdWUpKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gSW50MzJMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBJbnQzMkxpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBJbnQzMkxpc3QobGVuZ3RoKTsKICB9CgogIGludCBfZ2V0SW5kZXhlZEludDMyKGludCBpbmRleCkgewogICAgcmV0dXJuIF9nZXRJbnQzMihpbmRleCAqIEludDMyTGlzdC5ieXRlc1BlckVsZW1lbnQpOwogIH0KCiAgdm9pZCBfc2V0SW5kZXhlZEludDMyKGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBfc2V0SW50MzIoaW5kZXggKiBJbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50LCB2YWx1ZSk7CiAgfQp9CgpAcGF0Y2gKY2xhc3MgVWludDMyTGlzdCB7CiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfVWludDMyTGlzdCkKICBmYWN0b3J5IFVpbnQzMkxpc3QoaW50IGxlbmd0aCkgbmF0aXZlICJUeXBlZERhdGFfVWludDMyQXJyYXlfbmV3IjsKCiAgQHBhdGNoCiAgZmFjdG9yeSBVaW50MzJMaXN0LmZyb21MaXN0KExpc3Q8aW50PiBlbGVtZW50cykgewogICAgcmV0dXJuIG5ldyBVaW50MzJMaXN0KGVsZW1lbnRzLmxlbmd0aCkKICAgICAgLi5zZXRSYW5nZSgwLCBlbGVtZW50cy5sZW5ndGgsIGVsZW1lbnRzKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1VpbnQzMkxpc3QgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxVaW50MzJMaXN0PgogICAgaW1wbGVtZW50cyBVaW50MzJMaXN0IHsKICBmYWN0b3J5IF9VaW50MzJMaXN0Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBMaXN0IGludGVyZmFjZS4KICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEluZGV4ZWRVaW50MzIoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF9zZXRJbmRleGVkVWludDMyKGluZGV4LCBfdG9VaW50MzIodmFsdWUpKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIFVpbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIFVpbnQzMkxpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBVaW50MzJMaXN0KGxlbmd0aCk7CiAgfQoKICBpbnQgX2dldEluZGV4ZWRVaW50MzIoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2dldFVpbnQzMihpbmRleCAqIFVpbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIHZvaWQgX3NldEluZGV4ZWRVaW50MzIoaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIF9zZXRVaW50MzIoaW5kZXggKiBVaW50MzJMaXN0LmJ5dGVzUGVyRWxlbWVudCwgdmFsdWUpOwogIH0KfQoKQHBhdGNoCmNsYXNzIEludDY0TGlzdCB7CiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50NjRMaXN0KQogIGZhY3RvcnkgSW50NjRMaXN0KGludCBsZW5ndGgpIG5hdGl2ZSAiVHlwZWREYXRhX0ludDY0QXJyYXlfbmV3IjsKCiAgQHBhdGNoCiAgZmFjdG9yeSBJbnQ2NExpc3QuZnJvbUxpc3QoTGlzdDxpbnQ+IGVsZW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IEludDY0TGlzdChlbGVtZW50cy5sZW5ndGgpCiAgICAgIC4uc2V0UmFuZ2UoMCwgZWxlbWVudHMubGVuZ3RoLCBlbGVtZW50cyk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9JbnQ2NExpc3QgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxJbnQ2NExpc3Q+CiAgICBpbXBsZW1lbnRzIEludDY0TGlzdCB7CiAgZmFjdG9yeSBfSW50NjRMaXN0Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBMaXN0IGludGVyZmFjZS4KICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEluZGV4ZWRJbnQ2NChpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRJbnQ2NChpbmRleCwgdmFsdWUpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gSW50NjRMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBJbnQ2NExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBJbnQ2NExpc3QobGVuZ3RoKTsKICB9CgogIGludCBfZ2V0SW5kZXhlZEludDY0KGludCBpbmRleCkgewogICAgcmV0dXJuIF9nZXRJbnQ2NChpbmRleCAqIEludDY0TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogIH0KCiAgdm9pZCBfc2V0SW5kZXhlZEludDY0KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBfc2V0SW50NjQoaW5kZXggKiBJbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50LCB2YWx1ZSk7CiAgfQp9CgpAcGF0Y2gKY2xhc3MgVWludDY0TGlzdCB7CiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfVWludDY0TGlzdCkKICBmYWN0b3J5IFVpbnQ2NExpc3QoaW50IGxlbmd0aCkgbmF0aXZlICJUeXBlZERhdGFfVWludDY0QXJyYXlfbmV3IjsKCiAgQHBhdGNoCiAgZmFjdG9yeSBVaW50NjRMaXN0LmZyb21MaXN0KExpc3Q8aW50PiBlbGVtZW50cykgewogICAgcmV0dXJuIG5ldyBVaW50NjRMaXN0KGVsZW1lbnRzLmxlbmd0aCkKICAgICAgLi5zZXRSYW5nZSgwLCBlbGVtZW50cy5sZW5ndGgsIGVsZW1lbnRzKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1VpbnQ2NExpc3QgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxVaW50NjRMaXN0PgogICAgaW1wbGVtZW50cyBVaW50NjRMaXN0IHsKICBmYWN0b3J5IF9VaW50NjRMaXN0Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBMaXN0IGludGVyZmFjZS4KICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEluZGV4ZWRVaW50NjQoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF9zZXRJbmRleGVkVWludDY0KGluZGV4LCB2YWx1ZSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBVaW50NjRMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBVaW50NjRMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgVWludDY0TGlzdChsZW5ndGgpOwogIH0KCiAgaW50IF9nZXRJbmRleGVkVWludDY0KGludCBpbmRleCkgewogICAgcmV0dXJuIF9nZXRVaW50NjQoaW5kZXggKiBVaW50NjRMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgfQoKICB2b2lkIF9zZXRJbmRleGVkVWludDY0KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBfc2V0VWludDY0KGluZGV4ICogVWludDY0TGlzdC5ieXRlc1BlckVsZW1lbnQsIHZhbHVlKTsKICB9Cn0KCkBwYXRjaApjbGFzcyBGbG9hdDMyTGlzdCB7CiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQzMkxpc3QpCiAgZmFjdG9yeSBGbG9hdDMyTGlzdChpbnQgbGVuZ3RoKSBuYXRpdmUgIlR5cGVkRGF0YV9GbG9hdDMyQXJyYXlfbmV3IjsKCiAgQHBhdGNoCiAgZmFjdG9yeSBGbG9hdDMyTGlzdC5mcm9tTGlzdChMaXN0PGRvdWJsZT4gZWxlbWVudHMpIHsKICAgIHJldHVybiBuZXcgRmxvYXQzMkxpc3QoZWxlbWVudHMubGVuZ3RoKQogICAgICAuLnNldFJhbmdlKDAsIGVsZW1lbnRzLmxlbmd0aCwgZWxlbWVudHMpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRmxvYXQzMkxpc3QgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9Eb3VibGVMaXN0TWl4aW4sIF9UeXBlZERvdWJsZUxpc3RNaXhpbjxGbG9hdDMyTGlzdD4KICAgIGltcGxlbWVudHMgRmxvYXQzMkxpc3QgewogIGZhY3RvcnkgX0Zsb2F0MzJMaXN0Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBMaXN0IGludGVyZmFjZS4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX0RvdWJsZSIpCiAgZG91YmxlIG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF9nZXRJbmRleGVkRmxvYXQzMihpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRGbG9hdDMyKGluZGV4LCB2YWx1ZSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBGbG9hdDMyTGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgRmxvYXQzMkxpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBGbG9hdDMyTGlzdChsZW5ndGgpOwogIH0KCiAgZG91YmxlIF9nZXRJbmRleGVkRmxvYXQzMihpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZ2V0RmxvYXQzMihpbmRleCAqIEZsb2F0MzJMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgfQoKICB2b2lkIF9zZXRJbmRleGVkRmxvYXQzMihpbnQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgewogICAgX3NldEZsb2F0MzIoaW5kZXggKiBGbG9hdDMyTGlzdC5ieXRlc1BlckVsZW1lbnQsIHZhbHVlKTsKICB9Cn0KCkBwYXRjaApjbGFzcyBGbG9hdDY0TGlzdCB7CiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQ2NExpc3QpCiAgZmFjdG9yeSBGbG9hdDY0TGlzdChpbnQgbGVuZ3RoKSBuYXRpdmUgIlR5cGVkRGF0YV9GbG9hdDY0QXJyYXlfbmV3IjsKCiAgQHBhdGNoCiAgZmFjdG9yeSBGbG9hdDY0TGlzdC5mcm9tTGlzdChMaXN0PGRvdWJsZT4gZWxlbWVudHMpIHsKICAgIHJldHVybiBuZXcgRmxvYXQ2NExpc3QoZWxlbWVudHMubGVuZ3RoKQogICAgICAuLnNldFJhbmdlKDAsIGVsZW1lbnRzLmxlbmd0aCwgZWxlbWVudHMpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRmxvYXQ2NExpc3QgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9Eb3VibGVMaXN0TWl4aW4sIF9UeXBlZERvdWJsZUxpc3RNaXhpbjxGbG9hdDY0TGlzdD4KICAgIGltcGxlbWVudHMgRmxvYXQ2NExpc3QgewogIGZhY3RvcnkgX0Zsb2F0NjRMaXN0Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBMaXN0IGludGVyZmFjZS4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX0RvdWJsZSIpCiAgZG91YmxlIG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF9nZXRJbmRleGVkRmxvYXQ2NChpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRGbG9hdDY0KGluZGV4LCB2YWx1ZSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBGbG9hdDY0TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgRmxvYXQ2NExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBGbG9hdDY0TGlzdChsZW5ndGgpOwogIH0KCiAgZG91YmxlIF9nZXRJbmRleGVkRmxvYXQ2NChpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZ2V0RmxvYXQ2NChpbmRleCAqIEZsb2F0NjRMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgfQoKICB2b2lkIF9zZXRJbmRleGVkRmxvYXQ2NChpbnQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgewogICAgX3NldEZsb2F0NjQoaW5kZXggKiBGbG9hdDY0TGlzdC5ieXRlc1BlckVsZW1lbnQsIHZhbHVlKTsKICB9Cn0KCkBwYXRjaApjbGFzcyBGbG9hdDMyeDRMaXN0IHsKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDRMaXN0KQogIGZhY3RvcnkgRmxvYXQzMng0TGlzdChpbnQgbGVuZ3RoKSBuYXRpdmUgIlR5cGVkRGF0YV9GbG9hdDMyeDRBcnJheV9uZXciOwoKICBAcGF0Y2gKICBmYWN0b3J5IEZsb2F0MzJ4NExpc3QuZnJvbUxpc3QoTGlzdDxGbG9hdDMyeDQ+IGVsZW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IEZsb2F0MzJ4NExpc3QoZWxlbWVudHMubGVuZ3RoKQogICAgICAuLnNldFJhbmdlKDAsIGVsZW1lbnRzLmxlbmd0aCwgZWxlbWVudHMpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRmxvYXQzMng0TGlzdCBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0Zsb2F0MzJ4NExpc3RNaXhpbgogICAgaW1wbGVtZW50cyBGbG9hdDMyeDRMaXN0IHsKICBmYWN0b3J5IF9GbG9hdDMyeDRMaXN0Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgRmxvYXQzMng0IG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF9nZXRJbmRleGVkRmxvYXQzMng0KGluZGV4KTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgRmxvYXQzMng0IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfc2V0SW5kZXhlZEZsb2F0MzJ4NChpbmRleCwgdmFsdWUpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gRmxvYXQzMng0TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgRmxvYXQzMng0TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IEZsb2F0MzJ4NExpc3QobGVuZ3RoKTsKICB9CgogIEZsb2F0MzJ4NCBfZ2V0SW5kZXhlZEZsb2F0MzJ4NChpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZ2V0RmxvYXQzMng0KGluZGV4ICogRmxvYXQzMng0TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogIH0KCiAgdm9pZCBfc2V0SW5kZXhlZEZsb2F0MzJ4NChpbnQgaW5kZXgsIEZsb2F0MzJ4NCB2YWx1ZSkgewogICAgX3NldEZsb2F0MzJ4NChpbmRleCAqIEZsb2F0MzJ4NExpc3QuYnl0ZXNQZXJFbGVtZW50LCB2YWx1ZSk7CiAgfQp9CgpAcGF0Y2gKY2xhc3MgSW50MzJ4NExpc3QgewogIEBwYXRjaAogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0ludDMyeDRMaXN0KQogIGZhY3RvcnkgSW50MzJ4NExpc3QoaW50IGxlbmd0aCkgbmF0aXZlICJUeXBlZERhdGFfSW50MzJ4NEFycmF5X25ldyI7CgogIEBwYXRjaAogIGZhY3RvcnkgSW50MzJ4NExpc3QuZnJvbUxpc3QoTGlzdDxJbnQzMng0PiBlbGVtZW50cykgewogICAgcmV0dXJuIG5ldyBJbnQzMng0TGlzdChlbGVtZW50cy5sZW5ndGgpCiAgICAgIC4uc2V0UmFuZ2UoMCwgZWxlbWVudHMubGVuZ3RoLCBlbGVtZW50cyk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9JbnQzMng0TGlzdCBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0ludDMyeDRMaXN0TWl4aW4KICAgIGltcGxlbWVudHMgSW50MzJ4NExpc3QgewogIGZhY3RvcnkgX0ludDMyeDRMaXN0Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQzMng0KQogIEludDMyeDQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEluZGV4ZWRJbnQzMng0KGluZGV4KTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgSW50MzJ4NCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRJbnQzMng0KGluZGV4LCB2YWx1ZSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBJbnQzMng0TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgSW50MzJ4NExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBJbnQzMng0TGlzdChsZW5ndGgpOwogIH0KCiAgSW50MzJ4NCBfZ2V0SW5kZXhlZEludDMyeDQoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2dldEludDMyeDQoaW5kZXggKiBJbnQzMng0TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogIH0KCiAgdm9pZCBfc2V0SW5kZXhlZEludDMyeDQoaW50IGluZGV4LCBJbnQzMng0IHZhbHVlKSB7CiAgICBfc2V0SW50MzJ4NChpbmRleCAqIEludDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudCwgdmFsdWUpOwogIH0KfQoKQHBhdGNoCmNsYXNzIEZsb2F0NjR4Mkxpc3QgewogIEBwYXRjaAogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0NjR4Mkxpc3QpCiAgZmFjdG9yeSBGbG9hdDY0eDJMaXN0KGludCBsZW5ndGgpIG5hdGl2ZSAiVHlwZWREYXRhX0Zsb2F0NjR4MkFycmF5X25ldyI7CgogIEBwYXRjaAogIGZhY3RvcnkgRmxvYXQ2NHgyTGlzdC5mcm9tTGlzdChMaXN0PEZsb2F0NjR4Mj4gZWxlbWVudHMpIHsKICAgIHJldHVybiBuZXcgRmxvYXQ2NHgyTGlzdChlbGVtZW50cy5sZW5ndGgpCiAgICAgIC4uc2V0UmFuZ2UoMCwgZWxlbWVudHMubGVuZ3RoLCBlbGVtZW50cyk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9GbG9hdDY0eDJMaXN0IGV4dGVuZHMgX1R5cGVkTGlzdAogICAgd2l0aCBfRmxvYXQ2NHgyTGlzdE1peGluCiAgICBpbXBsZW1lbnRzIEZsb2F0NjR4Mkxpc3QgewogIGZhY3RvcnkgX0Zsb2F0NjR4Mkxpc3QuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0NjR4MikKICBGbG9hdDY0eDIgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEluZGV4ZWRGbG9hdDY0eDIoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBGbG9hdDY0eDIgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF9zZXRJbmRleGVkRmxvYXQ2NHgyKGluZGV4LCB2YWx1ZSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBGbG9hdDY0eDJMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBGbG9hdDY0eDJMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgRmxvYXQ2NHgyTGlzdChsZW5ndGgpOwogIH0KCiAgRmxvYXQ2NHgyIF9nZXRJbmRleGVkRmxvYXQ2NHgyKGludCBpbmRleCkgewogICAgcmV0dXJuIF9nZXRGbG9hdDY0eDIoaW5kZXggKiBGbG9hdDY0eDJMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgfQoKICB2b2lkIF9zZXRJbmRleGVkRmxvYXQ2NHgyKGludCBpbmRleCwgRmxvYXQ2NHgyIHZhbHVlKSB7CiAgICBfc2V0RmxvYXQ2NHgyKGluZGV4ICogRmxvYXQ2NHgyTGlzdC5ieXRlc1BlckVsZW1lbnQsIHZhbHVlKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0V4dGVybmFsSW50OEFycmF5IGV4dGVuZHMgX1R5cGVkTGlzdAogICAgd2l0aCBfSW50TGlzdE1peGluLCBfVHlwZWRJbnRMaXN0TWl4aW48SW50OExpc3Q+CiAgICBpbXBsZW1lbnRzIEludDhMaXN0IHsKICBmYWN0b3J5IF9FeHRlcm5hbEludDhBcnJheS5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgTGlzdCBpbnRlcmZhY2UuCiAgaW50IG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF9nZXRJbnQ4KGluZGV4KTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfc2V0SW50OChpbmRleCwgdmFsdWUpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gSW50OExpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIEludDhMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgSW50OExpc3QobGVuZ3RoKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0V4dGVybmFsVWludDhBcnJheSBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0ludExpc3RNaXhpbiwgX1R5cGVkSW50TGlzdE1peGluPFVpbnQ4TGlzdD4KICAgIGltcGxlbWVudHMgVWludDhMaXN0IHsKICBmYWN0b3J5IF9FeHRlcm5hbFVpbnQ4QXJyYXkuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldFVpbnQ4KGluZGV4KTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfc2V0VWludDgoaW5kZXgsIF90b1VpbnQ4KHZhbHVlKSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBVaW50OExpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIFVpbnQ4TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IFVpbnQ4TGlzdChsZW5ndGgpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRXh0ZXJuYWxVaW50OENsYW1wZWRBcnJheSBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0ludExpc3RNaXhpbiwgX1R5cGVkSW50TGlzdE1peGluPFVpbnQ4Q2xhbXBlZExpc3Q+CiAgICBpbXBsZW1lbnRzIFVpbnQ4Q2xhbXBlZExpc3QgewogIGZhY3RvcnkgX0V4dGVybmFsVWludDhDbGFtcGVkQXJyYXkuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldFVpbnQ4KGluZGV4KTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfc2V0VWludDgoaW5kZXgsIF90b0NsYW1wZWRVaW50OCh2YWx1ZSkpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gVWludDhMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBVaW50OENsYW1wZWRMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgVWludDhDbGFtcGVkTGlzdChsZW5ndGgpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRXh0ZXJuYWxJbnQxNkFycmF5IGV4dGVuZHMgX1R5cGVkTGlzdAogICAgd2l0aCBfSW50TGlzdE1peGluLCBfVHlwZWRJbnRMaXN0TWl4aW48SW50MTZMaXN0PgogICAgaW1wbGVtZW50cyBJbnQxNkxpc3QgewogIGZhY3RvcnkgX0V4dGVybmFsSW50MTZBcnJheS5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgTGlzdCBpbnRlcmZhY2UuCiAgaW50IG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF9nZXRJbmRleGVkSW50MTYoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF9zZXRJbmRleGVkSW50MTYoaW5kZXgsIF90b0ludDE2KHZhbHVlKSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBJbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIEludDE2TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IEludDE2TGlzdChsZW5ndGgpOwogIH0KCiAgaW50IF9nZXRJbmRleGVkSW50MTYoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2dldEludDE2KGluZGV4ICogSW50MTZMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgfQoKICB2b2lkIF9zZXRJbmRleGVkSW50MTYoaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIF9zZXRJbnQxNihpbmRleCAqIEludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQsIHZhbHVlKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0V4dGVybmFsVWludDE2QXJyYXkgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxVaW50MTZMaXN0PgogICAgaW1wbGVtZW50cyBVaW50MTZMaXN0IHsKICBmYWN0b3J5IF9FeHRlcm5hbFVpbnQxNkFycmF5Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBMaXN0IGludGVyZmFjZS4KICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEluZGV4ZWRVaW50MTYoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF9zZXRJbmRleGVkVWludDE2KGluZGV4LCBfdG9VaW50MTYodmFsdWUpKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIFVpbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIFVpbnQxNkxpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBVaW50MTZMaXN0KGxlbmd0aCk7CiAgfQoKICBpbnQgX2dldEluZGV4ZWRVaW50MTYoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2dldFVpbnQxNihpbmRleCAqIFVpbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIHZvaWQgX3NldEluZGV4ZWRVaW50MTYoaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIF9zZXRVaW50MTYoaW5kZXggKiBVaW50MTZMaXN0LmJ5dGVzUGVyRWxlbWVudCwgdmFsdWUpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRXh0ZXJuYWxJbnQzMkFycmF5IGV4dGVuZHMgX1R5cGVkTGlzdAogICAgd2l0aCBfSW50TGlzdE1peGluLCBfVHlwZWRJbnRMaXN0TWl4aW48SW50MzJMaXN0PgogICAgaW1wbGVtZW50cyBJbnQzMkxpc3QgewogIGZhY3RvcnkgX0V4dGVybmFsSW50MzJBcnJheS5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgTGlzdCBpbnRlcmZhY2UuCiAgaW50IG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF9nZXRJbmRleGVkSW50MzIoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF9zZXRJbmRleGVkSW50MzIoaW5kZXgsIF90b0ludDMyKHZhbHVlKSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBJbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIEludDMyTGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IEludDMyTGlzdChsZW5ndGgpOwogIH0KCiAgaW50IF9nZXRJbmRleGVkSW50MzIoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2dldEludDMyKGluZGV4ICogSW50MzJMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgfQoKICB2b2lkIF9zZXRJbmRleGVkSW50MzIoaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIF9zZXRJbnQzMihpbmRleCAqIEludDMyTGlzdC5ieXRlc1BlckVsZW1lbnQsIHZhbHVlKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0V4dGVybmFsVWludDMyQXJyYXkgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxVaW50MzJMaXN0PgogICAgaW1wbGVtZW50cyBVaW50MzJMaXN0IHsKICBmYWN0b3J5IF9FeHRlcm5hbFVpbnQzMkFycmF5Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBMaXN0IGludGVyZmFjZS4KICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEluZGV4ZWRVaW50MzIoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF9zZXRJbmRleGVkVWludDMyKGluZGV4LCBfdG9VaW50MzIodmFsdWUpKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIFVpbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIFVpbnQzMkxpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBVaW50MzJMaXN0KGxlbmd0aCk7CiAgfQoKICBpbnQgX2dldEluZGV4ZWRVaW50MzIoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2dldFVpbnQzMihpbmRleCAqIFVpbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIHZvaWQgX3NldEluZGV4ZWRVaW50MzIoaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIF9zZXRVaW50MzIoaW5kZXggKiBVaW50MzJMaXN0LmJ5dGVzUGVyRWxlbWVudCwgdmFsdWUpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRXh0ZXJuYWxJbnQ2NEFycmF5IGV4dGVuZHMgX1R5cGVkTGlzdAogICAgd2l0aCBfSW50TGlzdE1peGluLCBfVHlwZWRJbnRMaXN0TWl4aW48SW50NjRMaXN0PgogICAgaW1wbGVtZW50cyBJbnQ2NExpc3QgewogIGZhY3RvcnkgX0V4dGVybmFsSW50NjRBcnJheS5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyB0aGUgTGlzdCBpbnRlcmZhY2UuCiAgaW50IG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF9nZXRJbmRleGVkSW50NjQoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF9zZXRJbmRleGVkSW50NjQoaW5kZXgsIHZhbHVlKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEludDY0TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgSW50NjRMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgSW50NjRMaXN0KGxlbmd0aCk7CiAgfQoKICBpbnQgX2dldEluZGV4ZWRJbnQ2NChpbnQgaW5kZXgpIHsKICAgIHJldHVybiBfZ2V0SW50NjQoaW5kZXggKiBJbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIHZvaWQgX3NldEluZGV4ZWRJbnQ2NChpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgX3NldEludDY0KGluZGV4ICogSW50NjRMaXN0LmJ5dGVzUGVyRWxlbWVudCwgdmFsdWUpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRXh0ZXJuYWxVaW50NjRBcnJheSBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0ludExpc3RNaXhpbiwgX1R5cGVkSW50TGlzdE1peGluPFVpbnQ2NExpc3Q+CiAgICBpbXBsZW1lbnRzIFVpbnQ2NExpc3QgewogIGZhY3RvcnkgX0V4dGVybmFsVWludDY0QXJyYXkuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfZ2V0SW5kZXhlZFVpbnQ2NChpbmRleCk7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRVaW50NjQoaW5kZXgsIHZhbHVlKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIFVpbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIFVpbnQ2NExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBVaW50NjRMaXN0KGxlbmd0aCk7CiAgfQoKICBpbnQgX2dldEluZGV4ZWRVaW50NjQoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2dldFVpbnQ2NChpbmRleCAqIFVpbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIHZvaWQgX3NldEluZGV4ZWRVaW50NjQoaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIF9zZXRVaW50NjQoaW5kZXggKiBVaW50NjRMaXN0LmJ5dGVzUGVyRWxlbWVudCwgdmFsdWUpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRXh0ZXJuYWxGbG9hdDMyQXJyYXkgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9Eb3VibGVMaXN0TWl4aW4sIF9UeXBlZERvdWJsZUxpc3RNaXhpbjxGbG9hdDMyTGlzdD4KICAgIGltcGxlbWVudHMgRmxvYXQzMkxpc3QgewogIGZhY3RvcnkgX0V4dGVybmFsRmxvYXQzMkFycmF5Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBMaXN0IGludGVyZmFjZS4KICBkb3VibGUgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEluZGV4ZWRGbG9hdDMyKGluZGV4KTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgZG91YmxlIHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfc2V0SW5kZXhlZEZsb2F0MzIoaW5kZXgsIHZhbHVlKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEZsb2F0MzJMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBGbG9hdDMyTGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IEZsb2F0MzJMaXN0KGxlbmd0aCk7CiAgfQoKICBkb3VibGUgX2dldEluZGV4ZWRGbG9hdDMyKGludCBpbmRleCkgewogICAgcmV0dXJuIF9nZXRGbG9hdDMyKGluZGV4ICogRmxvYXQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIHZvaWQgX3NldEluZGV4ZWRGbG9hdDMyKGludCBpbmRleCwgZG91YmxlIHZhbHVlKSB7CiAgICBfc2V0RmxvYXQzMihpbmRleCAqIEZsb2F0MzJMaXN0LmJ5dGVzUGVyRWxlbWVudCwgdmFsdWUpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRXh0ZXJuYWxGbG9hdDY0QXJyYXkgZXh0ZW5kcyBfVHlwZWRMaXN0CiAgICB3aXRoIF9Eb3VibGVMaXN0TWl4aW4sIF9UeXBlZERvdWJsZUxpc3RNaXhpbjxGbG9hdDY0TGlzdD4KICAgIGltcGxlbWVudHMgRmxvYXQ2NExpc3QgewogIGZhY3RvcnkgX0V4dGVybmFsRmxvYXQ2NEFycmF5Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBMaXN0IGludGVyZmFjZS4KICBkb3VibGUgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEluZGV4ZWRGbG9hdDY0KGluZGV4KTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgZG91YmxlIHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfc2V0SW5kZXhlZEZsb2F0NjQoaW5kZXgsIHZhbHVlKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEZsb2F0NjRMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBGbG9hdDY0TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IEZsb2F0NjRMaXN0KGxlbmd0aCk7CiAgfQoKICBkb3VibGUgX2dldEluZGV4ZWRGbG9hdDY0KGludCBpbmRleCkgewogICAgcmV0dXJuIF9nZXRGbG9hdDY0KGluZGV4ICogRmxvYXQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50KTsKICB9CgogIHZvaWQgX3NldEluZGV4ZWRGbG9hdDY0KGludCBpbmRleCwgZG91YmxlIHZhbHVlKSB7CiAgICBfc2V0RmxvYXQ2NChpbmRleCAqIEZsb2F0NjRMaXN0LmJ5dGVzUGVyRWxlbWVudCwgdmFsdWUpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRXh0ZXJuYWxGbG9hdDMyeDRBcnJheSBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0Zsb2F0MzJ4NExpc3RNaXhpbgogICAgaW1wbGVtZW50cyBGbG9hdDMyeDRMaXN0IHsKICBmYWN0b3J5IF9FeHRlcm5hbEZsb2F0MzJ4NEFycmF5Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBMaXN0IGludGVyZmFjZS4KICBGbG9hdDMyeDQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEluZGV4ZWRGbG9hdDMyeDQoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBGbG9hdDMyeDQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF9zZXRJbmRleGVkRmxvYXQzMng0KGluZGV4LCB2YWx1ZSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBGbG9hdDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBGbG9hdDMyeDRMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgRmxvYXQzMng0TGlzdChsZW5ndGgpOwogIH0KCiAgRmxvYXQzMng0IF9nZXRJbmRleGVkRmxvYXQzMng0KGludCBpbmRleCkgewogICAgcmV0dXJuIF9nZXRGbG9hdDMyeDQoaW5kZXggKiBGbG9hdDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgfQoKICB2b2lkIF9zZXRJbmRleGVkRmxvYXQzMng0KGludCBpbmRleCwgRmxvYXQzMng0IHZhbHVlKSB7CiAgICBfc2V0RmxvYXQzMng0KGluZGV4ICogRmxvYXQzMng0TGlzdC5ieXRlc1BlckVsZW1lbnQsIHZhbHVlKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0V4dGVybmFsSW50MzJ4NEFycmF5IGV4dGVuZHMgX1R5cGVkTGlzdAogICAgd2l0aCBfSW50MzJ4NExpc3RNaXhpbgogICAgaW1wbGVtZW50cyBJbnQzMng0TGlzdCB7CiAgZmFjdG9yeSBfRXh0ZXJuYWxJbnQzMng0QXJyYXkuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIExpc3QgaW50ZXJmYWNlLgogIEludDMyeDQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEluZGV4ZWRJbnQzMng0KGluZGV4KTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgSW50MzJ4NCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3NldEluZGV4ZWRJbnQzMng0KGluZGV4LCB2YWx1ZSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBJbnQzMng0TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgSW50MzJ4NExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBJbnQzMng0TGlzdChsZW5ndGgpOwogIH0KCiAgSW50MzJ4NCBfZ2V0SW5kZXhlZEludDMyeDQoaW50IGluZGV4KSB7CiAgICByZXR1cm4gX2dldEludDMyeDQoaW5kZXggKiBJbnQzMng0TGlzdC5ieXRlc1BlckVsZW1lbnQpOwogIH0KCiAgdm9pZCBfc2V0SW5kZXhlZEludDMyeDQoaW50IGluZGV4LCBJbnQzMng0IHZhbHVlKSB7CiAgICBfc2V0SW50MzJ4NChpbmRleCAqIEludDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudCwgdmFsdWUpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRXh0ZXJuYWxGbG9hdDY0eDJBcnJheSBleHRlbmRzIF9UeXBlZExpc3QKICAgIHdpdGggX0Zsb2F0NjR4Mkxpc3RNaXhpbgogICAgaW1wbGVtZW50cyBGbG9hdDY0eDJMaXN0IHsKICBmYWN0b3J5IF9FeHRlcm5hbEZsb2F0NjR4MkFycmF5Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBMaXN0IGludGVyZmFjZS4KICBGbG9hdDY0eDIgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2dldEluZGV4ZWRGbG9hdDY0eDIoaW5kZXgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBGbG9hdDY0eDIgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF9zZXRJbmRleGVkRmxvYXQ2NHgyKGluZGV4LCB2YWx1ZSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIHRoZSBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBGbG9hdDY0eDJMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBGbG9hdDY0eDJMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgRmxvYXQ2NHgyTGlzdChsZW5ndGgpOwogIH0KCiAgRmxvYXQ2NHgyIF9nZXRJbmRleGVkRmxvYXQ2NHgyKGludCBpbmRleCkgewogICAgcmV0dXJuIF9nZXRGbG9hdDY0eDIoaW5kZXggKiBGbG9hdDY0eDJMaXN0LmJ5dGVzUGVyRWxlbWVudCk7CiAgfQoKICB2b2lkIF9zZXRJbmRleGVkRmxvYXQ2NHgyKGludCBpbmRleCwgRmxvYXQ2NHgyIHZhbHVlKSB7CiAgICBfc2V0RmxvYXQ2NHgyKGluZGV4ICogRmxvYXQ2NHgyTGlzdC5ieXRlc1BlckVsZW1lbnQsIHZhbHVlKTsKICB9Cn0KCkBwYXRjaApjbGFzcyBGbG9hdDMyeDQgewogIEBwYXRjaAogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NCkKICBmYWN0b3J5IEZsb2F0MzJ4NChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6LCBkb3VibGUgdykKICAgICAgbmF0aXZlICJGbG9hdDMyeDRfZnJvbURvdWJsZXMiOwoKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgZmFjdG9yeSBGbG9hdDMyeDQuc3BsYXQoZG91YmxlIHYpIG5hdGl2ZSAiRmxvYXQzMng0X3NwbGF0IjsKCiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQzMng0KQogIGZhY3RvcnkgRmxvYXQzMng0Lnplcm8oKSBuYXRpdmUgIkZsb2F0MzJ4NF96ZXJvIjsKCiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQzMng0KQogIGZhY3RvcnkgRmxvYXQzMng0LmZyb21JbnQzMng0Qml0cyhJbnQzMng0IHgpCiAgICAgIG5hdGl2ZSAiRmxvYXQzMng0X2Zyb21JbnQzMng0Qml0cyI7CgogIEBwYXRjaAogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NCkKICBmYWN0b3J5IEZsb2F0MzJ4NC5mcm9tRmxvYXQ2NHgyKEZsb2F0NjR4MiB2KSBuYXRpdmUgIkZsb2F0MzJ4NF9mcm9tRmxvYXQ2NHgyIjsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRmxvYXQzMng0IGltcGxlbWVudHMgRmxvYXQzMng0IHsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgRmxvYXQzMng0IG9wZXJhdG9yICsoRmxvYXQzMng0IG90aGVyKSBuYXRpdmUgIkZsb2F0MzJ4NF9hZGQiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NCkKICBGbG9hdDMyeDQgb3BlcmF0b3IgLSgpIG5hdGl2ZSAiRmxvYXQzMng0X25lZ2F0ZSI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQzMng0KQogIEZsb2F0MzJ4NCBvcGVyYXRvciAtKEZsb2F0MzJ4NCBvdGhlcikgbmF0aXZlICJGbG9hdDMyeDRfc3ViIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgRmxvYXQzMng0IG9wZXJhdG9yICooRmxvYXQzMng0IG90aGVyKSBuYXRpdmUgIkZsb2F0MzJ4NF9tdWwiOwogIEZsb2F0MzJ4NCBvcGVyYXRvciAvKEZsb2F0MzJ4NCBvdGhlcikgbmF0aXZlICJGbG9hdDMyeDRfZGl2IjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQzMng0KQogIEludDMyeDQgbGVzc1RoYW4oRmxvYXQzMng0IG90aGVyKSBuYXRpdmUgIkZsb2F0MzJ4NF9jbXBsdCI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50MzJ4NCkKICBJbnQzMng0IGxlc3NUaGFuT3JFcXVhbChGbG9hdDMyeDQgb3RoZXIpIG5hdGl2ZSAiRmxvYXQzMng0X2NtcGx0ZSI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50MzJ4NCkKICBJbnQzMng0IGdyZWF0ZXJUaGFuKEZsb2F0MzJ4NCBvdGhlcikgbmF0aXZlICJGbG9hdDMyeDRfY21wZ3QiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0ludDMyeDQpCiAgSW50MzJ4NCBncmVhdGVyVGhhbk9yRXF1YWwoRmxvYXQzMng0IG90aGVyKSBuYXRpdmUgIkZsb2F0MzJ4NF9jbXBndGUiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0ludDMyeDQpCiAgSW50MzJ4NCBlcXVhbChGbG9hdDMyeDQgb3RoZXIpIG5hdGl2ZSAiRmxvYXQzMng0X2NtcGVxdWFsIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQzMng0KQogIEludDMyeDQgbm90RXF1YWwoRmxvYXQzMng0IG90aGVyKSBuYXRpdmUgIkZsb2F0MzJ4NF9jbXBuZXF1YWwiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NCkKICBGbG9hdDMyeDQgc2NhbGUoZG91YmxlIHMpIG5hdGl2ZSAiRmxvYXQzMng0X3NjYWxlIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgRmxvYXQzMng0IGFicygpIG5hdGl2ZSAiRmxvYXQzMng0X2FicyI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQzMng0KQogIEZsb2F0MzJ4NCBjbGFtcChGbG9hdDMyeDQgbG93ZXJMaW1pdCwgRmxvYXQzMng0IHVwcGVyTGltaXQpCiAgICAgIG5hdGl2ZSAiRmxvYXQzMng0X2NsYW1wIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX0RvdWJsZSIpCiAgZG91YmxlIGdldCB4IG5hdGl2ZSAiRmxvYXQzMng0X2dldFgiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfRG91YmxlIikKICBkb3VibGUgZ2V0IHkgbmF0aXZlICJGbG9hdDMyeDRfZ2V0WSI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19Eb3VibGUiKQogIGRvdWJsZSBnZXQgeiBuYXRpdmUgIkZsb2F0MzJ4NF9nZXRaIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX0RvdWJsZSIpCiAgZG91YmxlIGdldCB3IG5hdGl2ZSAiRmxvYXQzMng0X2dldFciOwogIGludCBnZXQgc2lnbk1hc2sgbmF0aXZlICJGbG9hdDMyeDRfZ2V0U2lnbk1hc2siOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgRmxvYXQzMng0IHNodWZmbGUoaW50IG1hc2spIG5hdGl2ZSAiRmxvYXQzMng0X3NodWZmbGUiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NCkKICBGbG9hdDMyeDQgc2h1ZmZsZU1peChGbG9hdDMyeDQgencsIGludCBtYXNrKSBuYXRpdmUgIkZsb2F0MzJ4NF9zaHVmZmxlTWl4IjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQzMng0KQogIEZsb2F0MzJ4NCB3aXRoWChkb3VibGUgeCkgbmF0aXZlICJGbG9hdDMyeDRfc2V0WCI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQzMng0KQogIEZsb2F0MzJ4NCB3aXRoWShkb3VibGUgeSkgbmF0aXZlICJGbG9hdDMyeDRfc2V0WSI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQzMng0KQogIEZsb2F0MzJ4NCB3aXRoWihkb3VibGUgeikgbmF0aXZlICJGbG9hdDMyeDRfc2V0WiI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQzMng0KQogIEZsb2F0MzJ4NCB3aXRoVyhkb3VibGUgdykgbmF0aXZlICJGbG9hdDMyeDRfc2V0VyI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQzMng0KQogIEZsb2F0MzJ4NCBtaW4oRmxvYXQzMng0IG90aGVyKSBuYXRpdmUgIkZsb2F0MzJ4NF9taW4iOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJ4NCkKICBGbG9hdDMyeDQgbWF4KEZsb2F0MzJ4NCBvdGhlcikgbmF0aXZlICJGbG9hdDMyeDRfbWF4IjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgRmxvYXQzMng0IHNxcnQoKSBuYXRpdmUgIkZsb2F0MzJ4NF9zcXJ0IjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgRmxvYXQzMng0IHJlY2lwcm9jYWwoKSBuYXRpdmUgIkZsb2F0MzJ4NF9yZWNpcHJvY2FsIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgRmxvYXQzMng0IHJlY2lwcm9jYWxTcXJ0KCkgbmF0aXZlICJGbG9hdDMyeDRfcmVjaXByb2NhbFNxcnQiOwp9CgpAcGF0Y2gKY2xhc3MgSW50MzJ4NCB7CiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50MzJ4NCkKICBmYWN0b3J5IEludDMyeDQoaW50IHgsIGludCB5LCBpbnQgeiwgaW50IHcpIG5hdGl2ZSAiSW50MzJ4NF9mcm9tSW50cyI7CgogIEBwYXRjaAogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0ludDMyeDQpCiAgZmFjdG9yeSBJbnQzMng0LmJvb2woYm9vbCB4LCBib29sIHksIGJvb2wgeiwgYm9vbCB3KQogICAgICBuYXRpdmUgIkludDMyeDRfZnJvbUJvb2xzIjsKCiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50MzJ4NCkKICBmYWN0b3J5IEludDMyeDQuZnJvbUZsb2F0MzJ4NEJpdHMoRmxvYXQzMng0IHgpCiAgICAgIG5hdGl2ZSAiSW50MzJ4NF9mcm9tRmxvYXQzMng0Qml0cyI7Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0ludDMyeDQgaW1wbGVtZW50cyBJbnQzMng0IHsKICBJbnQzMng0IG9wZXJhdG9yIHwoSW50MzJ4NCBvdGhlcikgbmF0aXZlICJJbnQzMng0X29yIjsKICBJbnQzMng0IG9wZXJhdG9yICYoSW50MzJ4NCBvdGhlcikgbmF0aXZlICJJbnQzMng0X2FuZCI7CiAgSW50MzJ4NCBvcGVyYXRvciBeKEludDMyeDQgb3RoZXIpIG5hdGl2ZSAiSW50MzJ4NF94b3IiOwogIEludDMyeDQgb3BlcmF0b3IgKyhJbnQzMng0IG90aGVyKSBuYXRpdmUgIkludDMyeDRfYWRkIjsKICBJbnQzMng0IG9wZXJhdG9yIC0oSW50MzJ4NCBvdGhlcikgbmF0aXZlICJJbnQzMng0X3N1YiI7CiAgaW50IGdldCB4IG5hdGl2ZSAiSW50MzJ4NF9nZXRYIjsKICBpbnQgZ2V0IHkgbmF0aXZlICJJbnQzMng0X2dldFkiOwogIGludCBnZXQgeiBuYXRpdmUgIkludDMyeDRfZ2V0WiI7CiAgaW50IGdldCB3IG5hdGl2ZSAiSW50MzJ4NF9nZXRXIjsKICBpbnQgZ2V0IHNpZ25NYXNrIG5hdGl2ZSAiSW50MzJ4NF9nZXRTaWduTWFzayI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfSW50MzJ4NCkKICBJbnQzMng0IHNodWZmbGUoaW50IG1hc2spIG5hdGl2ZSAiSW50MzJ4NF9zaHVmZmxlIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQzMng0KQogIEludDMyeDQgc2h1ZmZsZU1peChJbnQzMng0IHp3LCBpbnQgbWFzaykgbmF0aXZlICJJbnQzMng0X3NodWZmbGVNaXgiOwogIEludDMyeDQgd2l0aFgoaW50IHgpIG5hdGl2ZSAiSW50MzJ4NF9zZXRYIjsKICBJbnQzMng0IHdpdGhZKGludCB5KSBuYXRpdmUgIkludDMyeDRfc2V0WSI7CiAgSW50MzJ4NCB3aXRoWihpbnQgeikgbmF0aXZlICJJbnQzMng0X3NldFoiOwogIEludDMyeDQgd2l0aFcoaW50IHcpIG5hdGl2ZSAiSW50MzJ4NF9zZXRXIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgYm9vbCBnZXQgZmxhZ1ggbmF0aXZlICJJbnQzMng0X2dldEZsYWdYIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgYm9vbCBnZXQgZmxhZ1kgbmF0aXZlICJJbnQzMng0X2dldEZsYWdZIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgYm9vbCBnZXQgZmxhZ1ogbmF0aXZlICJJbnQzMng0X2dldEZsYWdaIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgYm9vbCBnZXQgZmxhZ1cgbmF0aXZlICJJbnQzMng0X2dldEZsYWdXIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQzMng0KQogIEludDMyeDQgd2l0aEZsYWdYKGJvb2wgeCkgbmF0aXZlICJJbnQzMng0X3NldEZsYWdYIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQzMng0KQogIEludDMyeDQgd2l0aEZsYWdZKGJvb2wgeSkgbmF0aXZlICJJbnQzMng0X3NldEZsYWdZIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQzMng0KQogIEludDMyeDQgd2l0aEZsYWdaKGJvb2wgeikgbmF0aXZlICJJbnQzMng0X3NldEZsYWdaIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQzMng0KQogIEludDMyeDQgd2l0aEZsYWdXKGJvb2wgdykgbmF0aXZlICJJbnQzMng0X3NldEZsYWdXIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDQpCiAgRmxvYXQzMng0IHNlbGVjdChGbG9hdDMyeDQgdHJ1ZVZhbHVlLCBGbG9hdDMyeDQgZmFsc2VWYWx1ZSkKICAgICAgbmF0aXZlICJJbnQzMng0X3NlbGVjdCI7Cn0KCkBwYXRjaApjbGFzcyBGbG9hdDY0eDIgewogIEBwYXRjaAogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0NjR4MikKICBmYWN0b3J5IEZsb2F0NjR4Mihkb3VibGUgeCwgZG91YmxlIHkpIG5hdGl2ZSAiRmxvYXQ2NHgyX2Zyb21Eb3VibGVzIjsKCiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQ2NHgyKQogIGZhY3RvcnkgRmxvYXQ2NHgyLnNwbGF0KGRvdWJsZSB2KSBuYXRpdmUgIkZsb2F0NjR4Ml9zcGxhdCI7CgogIEBwYXRjaAogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0NjR4MikKICBmYWN0b3J5IEZsb2F0NjR4Mi56ZXJvKCkgbmF0aXZlICJGbG9hdDY0eDJfemVybyI7CgogIEBwYXRjaAogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0NjR4MikKICBmYWN0b3J5IEZsb2F0NjR4Mi5mcm9tRmxvYXQzMng0KEZsb2F0MzJ4NCB2KSBuYXRpdmUgIkZsb2F0NjR4Ml9mcm9tRmxvYXQzMng0IjsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRmxvYXQ2NHgyIGltcGxlbWVudHMgRmxvYXQ2NHgyIHsKICBGbG9hdDY0eDIgb3BlcmF0b3IgKyhGbG9hdDY0eDIgb3RoZXIpIG5hdGl2ZSAiRmxvYXQ2NHgyX2FkZCI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQ2NHgyKQogIEZsb2F0NjR4MiBvcGVyYXRvciAtKCkgbmF0aXZlICJGbG9hdDY0eDJfbmVnYXRlIjsKICBGbG9hdDY0eDIgb3BlcmF0b3IgLShGbG9hdDY0eDIgb3RoZXIpIG5hdGl2ZSAiRmxvYXQ2NHgyX3N1YiI7CiAgRmxvYXQ2NHgyIG9wZXJhdG9yICooRmxvYXQ2NHgyIG90aGVyKSBuYXRpdmUgIkZsb2F0NjR4Ml9tdWwiOwogIEZsb2F0NjR4MiBvcGVyYXRvciAvKEZsb2F0NjR4MiBvdGhlcikgbmF0aXZlICJGbG9hdDY0eDJfZGl2IjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDY0eDIpCiAgRmxvYXQ2NHgyIHNjYWxlKGRvdWJsZSBzKSBuYXRpdmUgIkZsb2F0NjR4Ml9zY2FsZSI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQ2NHgyKQogIEZsb2F0NjR4MiBhYnMoKSBuYXRpdmUgIkZsb2F0NjR4Ml9hYnMiOwogIEZsb2F0NjR4MiBjbGFtcChGbG9hdDY0eDIgbG93ZXJMaW1pdCwgRmxvYXQ2NHgyIHVwcGVyTGltaXQpCiAgICAgIG5hdGl2ZSAiRmxvYXQ2NHgyX2NsYW1wIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX0RvdWJsZSIpCiAgZG91YmxlIGdldCB4IG5hdGl2ZSAiRmxvYXQ2NHgyX2dldFgiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfRG91YmxlIikKICBkb3VibGUgZ2V0IHkgbmF0aXZlICJGbG9hdDY0eDJfZ2V0WSI7CiAgaW50IGdldCBzaWduTWFzayBuYXRpdmUgIkZsb2F0NjR4Ml9nZXRTaWduTWFzayI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQ2NHgyKQogIEZsb2F0NjR4MiB3aXRoWChkb3VibGUgeCkgbmF0aXZlICJGbG9hdDY0eDJfc2V0WCI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQ2NHgyKQogIEZsb2F0NjR4MiB3aXRoWShkb3VibGUgeSkgbmF0aXZlICJGbG9hdDY0eDJfc2V0WSI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRmxvYXQ2NHgyKQogIEZsb2F0NjR4MiBtaW4oRmxvYXQ2NHgyIG90aGVyKSBuYXRpdmUgIkZsb2F0NjR4Ml9taW4iOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0NjR4MikKICBGbG9hdDY0eDIgbWF4KEZsb2F0NjR4MiBvdGhlcikgbmF0aXZlICJGbG9hdDY0eDJfbWF4IjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDY0eDIpCiAgRmxvYXQ2NHgyIHNxcnQoKSBuYXRpdmUgIkZsb2F0NjR4Ml9zcXJ0IjsKfQoKY2xhc3MgX1R5cGVkTGlzdEl0ZXJhdG9yPEU+IGltcGxlbWVudHMgSXRlcmF0b3I8RT4gewogIGZpbmFsIExpc3Q8RT4gX2FycmF5OwogIGZpbmFsIGludCBfbGVuZ3RoOwogIGludCBfcG9zaXRpb247CiAgRSBfY3VycmVudDsKCiAgX1R5cGVkTGlzdEl0ZXJhdG9yKExpc3QgYXJyYXkpCiAgICAgIDogX2FycmF5ID0gYXJyYXksCiAgICAgICAgX2xlbmd0aCA9IGFycmF5Lmxlbmd0aCwKICAgICAgICBfcG9zaXRpb24gPSAtMSB7CiAgICBhc3NlcnQoYXJyYXkgaXMgX1R5cGVkTGlzdCB8fCBhcnJheSBpcyBfVHlwZWRMaXN0Vmlldyk7CiAgfQoKICBib29sIG1vdmVOZXh0KCkgewogICAgaW50IG5leHRQb3NpdGlvbiA9IF9wb3NpdGlvbiArIDE7CiAgICBpZiAobmV4dFBvc2l0aW9uIDwgX2xlbmd0aCkgewogICAgICBfY3VycmVudCA9IF9hcnJheVtuZXh0UG9zaXRpb25dOwogICAgICBfcG9zaXRpb24gPSBuZXh0UG9zaXRpb247CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgX3Bvc2l0aW9uID0gX2xlbmd0aDsKICAgIF9jdXJyZW50ID0gbnVsbDsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEUgZ2V0IGN1cnJlbnQgPT4gX2N1cnJlbnQ7Cn0KCmFic3RyYWN0IGNsYXNzIF9UeXBlZExpc3RWaWV3IGV4dGVuZHMgX1R5cGVkTGlzdEJhc2UgaW1wbGVtZW50cyBUeXBlZERhdGEgewogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgdGhlIFR5cGVkRGF0YSBpbnRlcmZhY2UuCgogIGludCBnZXQgbGVuZ3RoSW5CeXRlcyB7CiAgICByZXR1cm4gbGVuZ3RoICogZWxlbWVudFNpemVJbkJ5dGVzOwogIH0KCiAgX0J5dGVCdWZmZXIgZ2V0IGJ1ZmZlciB7CiAgICByZXR1cm4gX3R5cGVkRGF0YS5idWZmZXI7CiAgfQoKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIF9UeXBlZExpc3QgZ2V0IF90eXBlZERhdGEgbmF0aXZlICJUeXBlZERhdGFWaWV3X3R5cGVkRGF0YSI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgZ2V0IG9mZnNldEluQnl0ZXMgbmF0aXZlICJUeXBlZERhdGFWaWV3X29mZnNldEluQnl0ZXMiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IGdldCBsZW5ndGggbmF0aXZlICJUeXBlZERhdGFWaWV3X2xlbmd0aCI7Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0ludDhBcnJheVZpZXcgZXh0ZW5kcyBfVHlwZWRMaXN0VmlldwogICAgd2l0aCBfSW50TGlzdE1peGluLCBfVHlwZWRJbnRMaXN0TWl4aW48SW50OExpc3Q+CiAgICBpbXBsZW1lbnRzIEludDhMaXN0IHsKICAvLyBDb25zdHJ1Y3Rvci4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQ4QXJyYXlWaWV3KQogIGZhY3RvcnkgX0ludDhBcnJheVZpZXcuXyhfVHlwZWRMaXN0IGJ1ZmZlciwgaW50IG9mZnNldEluQnl0ZXMsIGludCBsZW5ndGgpCiAgICAgIG5hdGl2ZSAiVHlwZWREYXRhVmlld19JbnQ4QXJyYXlWaWV3X25ldyI7CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgTGlzdCBpbnRlcmZhY2UuCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF90eXBlZERhdGEKICAgICAgICAuX2dldEludDgob2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIEludDhMaXN0LmJ5dGVzUGVyRWxlbWVudCkpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF90eXBlZERhdGEuX3NldEludDgoCiAgICAgICAgb2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIEludDhMaXN0LmJ5dGVzUGVyRWxlbWVudCksIF90b0ludDgodmFsdWUpKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gSW50OExpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIEludDhMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgSW50OExpc3QobGVuZ3RoKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1VpbnQ4QXJyYXlWaWV3IGV4dGVuZHMgX1R5cGVkTGlzdFZpZXcKICAgIHdpdGggX0ludExpc3RNaXhpbiwgX1R5cGVkSW50TGlzdE1peGluPFVpbnQ4TGlzdD4KICAgIGltcGxlbWVudHMgVWludDhMaXN0IHsKICAvLyBDb25zdHJ1Y3Rvci4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9VaW50OEFycmF5VmlldykKICBmYWN0b3J5IF9VaW50OEFycmF5Vmlldy5fKF9UeXBlZExpc3QgYnVmZmVyLCBpbnQgb2Zmc2V0SW5CeXRlcywgaW50IGxlbmd0aCkKICAgICAgbmF0aXZlICJUeXBlZERhdGFWaWV3X1VpbnQ4QXJyYXlWaWV3X25ldyI7CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgTGlzdCBpbnRlcmZhY2UuCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF90eXBlZERhdGEKICAgICAgICAuX2dldFVpbnQ4KG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBVaW50OExpc3QuYnl0ZXNQZXJFbGVtZW50KSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3R5cGVkRGF0YS5fc2V0VWludDgoCiAgICAgICAgb2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIFVpbnQ4TGlzdC5ieXRlc1BlckVsZW1lbnQpLCBfdG9VaW50OCh2YWx1ZSkpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBVaW50OExpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIFVpbnQ4TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IFVpbnQ4TGlzdChsZW5ndGgpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfVWludDhDbGFtcGVkQXJyYXlWaWV3IGV4dGVuZHMgX1R5cGVkTGlzdFZpZXcKICAgIHdpdGggX0ludExpc3RNaXhpbiwgX1R5cGVkSW50TGlzdE1peGluPFVpbnQ4Q2xhbXBlZExpc3Q+CiAgICBpbXBsZW1lbnRzIFVpbnQ4Q2xhbXBlZExpc3QgewogIC8vIENvbnN0cnVjdG9yLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX1VpbnQ4Q2xhbXBlZEFycmF5VmlldykKICBmYWN0b3J5IF9VaW50OENsYW1wZWRBcnJheVZpZXcuXyhfVHlwZWRMaXN0IGJ1ZmZlciwgaW50IG9mZnNldEluQnl0ZXMsCiAgICAgIGludCBsZW5ndGgpIG5hdGl2ZSAiVHlwZWREYXRhVmlld19VaW50OENsYW1wZWRBcnJheVZpZXdfbmV3IjsKCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBMaXN0IGludGVyZmFjZS4KICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX3R5cGVkRGF0YQogICAgICAgIC5fZ2V0VWludDgob2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIFVpbnQ4TGlzdC5ieXRlc1BlckVsZW1lbnQpKTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfdHlwZWREYXRhLl9zZXRVaW50OChvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogVWludDhMaXN0LmJ5dGVzUGVyRWxlbWVudCksCiAgICAgICAgX3RvQ2xhbXBlZFVpbnQ4KHZhbHVlKSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIFVpbnQ4TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgVWludDhDbGFtcGVkTGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IFVpbnQ4Q2xhbXBlZExpc3QobGVuZ3RoKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0ludDE2QXJyYXlWaWV3IGV4dGVuZHMgX1R5cGVkTGlzdFZpZXcKICAgIHdpdGggX0ludExpc3RNaXhpbiwgX1R5cGVkSW50TGlzdE1peGluPEludDE2TGlzdD4KICAgIGltcGxlbWVudHMgSW50MTZMaXN0IHsKICAvLyBDb25zdHJ1Y3Rvci4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQxNkFycmF5VmlldykKICBmYWN0b3J5IF9JbnQxNkFycmF5Vmlldy5fKF9UeXBlZExpc3QgYnVmZmVyLCBpbnQgb2Zmc2V0SW5CeXRlcywgaW50IGxlbmd0aCkKICAgICAgbmF0aXZlICJUeXBlZERhdGFWaWV3X0ludDE2QXJyYXlWaWV3X25ldyI7CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgTGlzdCBpbnRlcmZhY2UuCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF90eXBlZERhdGEKICAgICAgICAuX2dldEludDE2KG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBJbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50KSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3R5cGVkRGF0YS5fc2V0SW50MTYoCiAgICAgICAgb2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIEludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQpLCBfdG9JbnQxNih2YWx1ZSkpOwogIH0KCiAgdm9pZCBzZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlIGl0ZXJhYmxlLCBbaW50IHNraXBDb3VudCA9IDBdKSB7CiAgICBpZiAoaXRlcmFibGUgaXMgQ29kZVVuaXRzKSB7CiAgICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgICBpbnQgYnl0ZVN0YXJ0ID0gdGhpcy5vZmZzZXRJbkJ5dGVzICsgc3RhcnQgKiBJbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogICAgICBfdHlwZWREYXRhLl9zZXRDb2RlVW5pdHMoaXRlcmFibGUsIGJ5dGVTdGFydCwgbGVuZ3RoLCBza2lwQ291bnQpOwogICAgfSBlbHNlIHsKICAgICAgc3VwZXIuc2V0UmFuZ2Uoc3RhcnQsIGVuZCwgaXRlcmFibGUsIHNraXBDb3VudCk7CiAgICB9CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIFR5cGVkRGF0YSBpbnRlcmZhY2UuCgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBJbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgogIEludDE2TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IEludDE2TGlzdChsZW5ndGgpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfVWludDE2QXJyYXlWaWV3IGV4dGVuZHMgX1R5cGVkTGlzdFZpZXcKICAgIHdpdGggX0ludExpc3RNaXhpbiwgX1R5cGVkSW50TGlzdE1peGluPFVpbnQxNkxpc3Q+CiAgICBpbXBsZW1lbnRzIFVpbnQxNkxpc3QgewogIC8vIENvbnN0cnVjdG9yLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX1VpbnQxNkFycmF5VmlldykKICBmYWN0b3J5IF9VaW50MTZBcnJheVZpZXcuXyhfVHlwZWRMaXN0IGJ1ZmZlciwgaW50IG9mZnNldEluQnl0ZXMsIGludCBsZW5ndGgpCiAgICAgIG5hdGl2ZSAiVHlwZWREYXRhVmlld19VaW50MTZBcnJheVZpZXdfbmV3IjsKCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBMaXN0IGludGVyZmFjZS4KICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX3R5cGVkRGF0YQogICAgICAgIC5fZ2V0VWludDE2KG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBVaW50MTZMaXN0LmJ5dGVzUGVyRWxlbWVudCkpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIF90eXBlZERhdGEuX3NldFVpbnQxNigKICAgICAgICBvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogVWludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQpLCBfdG9VaW50MTYodmFsdWUpKTsKICB9CgogIHZvaWQgc2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZSBpdGVyYWJsZSwgW2ludCBza2lwQ291bnQgPSAwXSkgewogICAgaWYgKGl0ZXJhYmxlIGlzIENvZGVVbml0cykgewogICAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICAgIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgICAgaW50IGJ5dGVTdGFydCA9IHRoaXMub2Zmc2V0SW5CeXRlcyArIHN0YXJ0ICogVWludDE2TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgICAgIF90eXBlZERhdGEuX3NldENvZGVVbml0cyhpdGVyYWJsZSwgYnl0ZVN0YXJ0LCBsZW5ndGgsIHNraXBDb3VudCk7CiAgICB9IGVsc2UgewogICAgICBzdXBlci5zZXRSYW5nZShzdGFydCwgZW5kLCBpdGVyYWJsZSwgc2tpcENvdW50KTsKICAgIH0KICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgVHlwZWREYXRhIGludGVyZmFjZS4KCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIFVpbnQxNkxpc3QuYnl0ZXNQZXJFbGVtZW50OwogIH0KCiAgLy8gSW50ZXJuYWwgdXRpbGl0eSBtZXRob2RzLgoKICBVaW50MTZMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgVWludDE2TGlzdChsZW5ndGgpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfSW50MzJBcnJheVZpZXcgZXh0ZW5kcyBfVHlwZWRMaXN0VmlldwogICAgd2l0aCBfSW50TGlzdE1peGluLCBfVHlwZWRJbnRMaXN0TWl4aW48SW50MzJMaXN0PgogICAgaW1wbGVtZW50cyBJbnQzMkxpc3QgewogIC8vIENvbnN0cnVjdG9yLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0ludDMyQXJyYXlWaWV3KQogIGZhY3RvcnkgX0ludDMyQXJyYXlWaWV3Ll8oX1R5cGVkTGlzdCBidWZmZXIsIGludCBvZmZzZXRJbkJ5dGVzLCBpbnQgbGVuZ3RoKQogICAgICBuYXRpdmUgIlR5cGVkRGF0YVZpZXdfSW50MzJBcnJheVZpZXdfbmV3IjsKCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBMaXN0IGludGVyZmFjZS4KICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX3R5cGVkRGF0YQogICAgICAgIC5fZ2V0SW50MzIob2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIEludDMyTGlzdC5ieXRlc1BlckVsZW1lbnQpKTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfdHlwZWREYXRhLl9zZXRJbnQzMigKICAgICAgICBvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogSW50MzJMaXN0LmJ5dGVzUGVyRWxlbWVudCksIF90b0ludDMyKHZhbHVlKSk7CiAgfQoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIFR5cGVkRGF0YSBpbnRlcmZhY2UuCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgewogICAgcmV0dXJuIEludDMyTGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgSW50MzJMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgSW50MzJMaXN0KGxlbmd0aCk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9VaW50MzJBcnJheVZpZXcgZXh0ZW5kcyBfVHlwZWRMaXN0VmlldwogICAgd2l0aCBfSW50TGlzdE1peGluLCBfVHlwZWRJbnRMaXN0TWl4aW48VWludDMyTGlzdD4KICAgIGltcGxlbWVudHMgVWludDMyTGlzdCB7CiAgLy8gQ29uc3RydWN0b3IuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfVWludDMyQXJyYXlWaWV3KQogIGZhY3RvcnkgX1VpbnQzMkFycmF5Vmlldy5fKF9UeXBlZExpc3QgYnVmZmVyLCBpbnQgb2Zmc2V0SW5CeXRlcywgaW50IGxlbmd0aCkKICAgICAgbmF0aXZlICJUeXBlZERhdGFWaWV3X1VpbnQzMkFycmF5Vmlld19uZXciOwoKICAvLyBNZXRob2QocykgaW1wbGVtZW50aW5nIExpc3QgaW50ZXJmYWNlLgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfdHlwZWREYXRhCiAgICAgICAgLl9nZXRVaW50MzIob2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIFVpbnQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50KSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3R5cGVkRGF0YS5fc2V0VWludDMyKAogICAgICAgIG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBVaW50MzJMaXN0LmJ5dGVzUGVyRWxlbWVudCksIF90b1VpbnQzMih2YWx1ZSkpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBVaW50MzJMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBVaW50MzJMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgVWludDMyTGlzdChsZW5ndGgpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfSW50NjRBcnJheVZpZXcgZXh0ZW5kcyBfVHlwZWRMaXN0VmlldwogICAgd2l0aCBfSW50TGlzdE1peGluLCBfVHlwZWRJbnRMaXN0TWl4aW48SW50NjRMaXN0PgogICAgaW1wbGVtZW50cyBJbnQ2NExpc3QgewogIC8vIENvbnN0cnVjdG9yLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0ludDY0QXJyYXlWaWV3KQogIGZhY3RvcnkgX0ludDY0QXJyYXlWaWV3Ll8oX1R5cGVkTGlzdCBidWZmZXIsIGludCBvZmZzZXRJbkJ5dGVzLCBpbnQgbGVuZ3RoKQogICAgICBuYXRpdmUgIlR5cGVkRGF0YVZpZXdfSW50NjRBcnJheVZpZXdfbmV3IjsKCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBMaXN0IGludGVyZmFjZS4KICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX3R5cGVkRGF0YQogICAgICAgIC5fZ2V0SW50NjQob2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIEludDY0TGlzdC5ieXRlc1BlckVsZW1lbnQpKTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfdHlwZWREYXRhLl9zZXRJbnQ2NCgKICAgICAgICBvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogSW50NjRMaXN0LmJ5dGVzUGVyRWxlbWVudCksIHZhbHVlKTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgVHlwZWREYXRhIGludGVyZmFjZS4KICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gSW50NjRMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBJbnQ2NExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBJbnQ2NExpc3QobGVuZ3RoKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1VpbnQ2NEFycmF5VmlldyBleHRlbmRzIF9UeXBlZExpc3RWaWV3CiAgICB3aXRoIF9JbnRMaXN0TWl4aW4sIF9UeXBlZEludExpc3RNaXhpbjxVaW50NjRMaXN0PgogICAgaW1wbGVtZW50cyBVaW50NjRMaXN0IHsKICAvLyBDb25zdHJ1Y3Rvci4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9VaW50NjRBcnJheVZpZXcpCiAgZmFjdG9yeSBfVWludDY0QXJyYXlWaWV3Ll8oX1R5cGVkTGlzdCBidWZmZXIsIGludCBvZmZzZXRJbkJ5dGVzLCBpbnQgbGVuZ3RoKQogICAgICBuYXRpdmUgIlR5cGVkRGF0YVZpZXdfVWludDY0QXJyYXlWaWV3X25ldyI7CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgTGlzdCBpbnRlcmZhY2UuCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF90eXBlZERhdGEKICAgICAgICAuX2dldFVpbnQ2NChvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogVWludDY0TGlzdC5ieXRlc1BlckVsZW1lbnQpKTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgaW50IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfdHlwZWREYXRhLl9zZXRVaW50NjQoCiAgICAgICAgb2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIFVpbnQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50KSwgdmFsdWUpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBVaW50NjRMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBVaW50NjRMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgVWludDY0TGlzdChsZW5ndGgpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRmxvYXQzMkFycmF5VmlldyBleHRlbmRzIF9UeXBlZExpc3RWaWV3CiAgICB3aXRoIF9Eb3VibGVMaXN0TWl4aW4sIF9UeXBlZERvdWJsZUxpc3RNaXhpbjxGbG9hdDMyTGlzdD4KICAgIGltcGxlbWVudHMgRmxvYXQzMkxpc3QgewogIC8vIENvbnN0cnVjdG9yLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0MzJBcnJheVZpZXcpCiAgZmFjdG9yeSBfRmxvYXQzMkFycmF5Vmlldy5fKF9UeXBlZExpc3QgYnVmZmVyLCBpbnQgb2Zmc2V0SW5CeXRlcywgaW50IGxlbmd0aCkKICAgICAgbmF0aXZlICJUeXBlZERhdGFWaWV3X0Zsb2F0MzJBcnJheVZpZXdfbmV3IjsKCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBMaXN0IGludGVyZmFjZS4KICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBkb3VibGUgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX3R5cGVkRGF0YQogICAgICAgIC5fZ2V0RmxvYXQzMihvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogRmxvYXQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50KSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3R5cGVkRGF0YS5fc2V0RmxvYXQzMigKICAgICAgICBvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogRmxvYXQzMkxpc3QuYnl0ZXNQZXJFbGVtZW50KSwgdmFsdWUpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBGbG9hdDMyTGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgRmxvYXQzMkxpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBGbG9hdDMyTGlzdChsZW5ndGgpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRmxvYXQ2NEFycmF5VmlldyBleHRlbmRzIF9UeXBlZExpc3RWaWV3CiAgICB3aXRoIF9Eb3VibGVMaXN0TWl4aW4sIF9UeXBlZERvdWJsZUxpc3RNaXhpbjxGbG9hdDY0TGlzdD4KICAgIGltcGxlbWVudHMgRmxvYXQ2NExpc3QgewogIC8vIENvbnN0cnVjdG9yLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0Zsb2F0NjRBcnJheVZpZXcpCiAgZmFjdG9yeSBfRmxvYXQ2NEFycmF5Vmlldy5fKF9UeXBlZExpc3QgYnVmZmVyLCBpbnQgb2Zmc2V0SW5CeXRlcywgaW50IGxlbmd0aCkKICAgICAgbmF0aXZlICJUeXBlZERhdGFWaWV3X0Zsb2F0NjRBcnJheVZpZXdfbmV3IjsKCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBMaXN0IGludGVyZmFjZS4KICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBkb3VibGUgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX3R5cGVkRGF0YQogICAgICAgIC5fZ2V0RmxvYXQ2NChvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogRmxvYXQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50KSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3R5cGVkRGF0YS5fc2V0RmxvYXQ2NCgKICAgICAgICBvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogRmxvYXQ2NExpc3QuYnl0ZXNQZXJFbGVtZW50KSwgdmFsdWUpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBGbG9hdDY0TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgRmxvYXQ2NExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBGbG9hdDY0TGlzdChsZW5ndGgpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRmxvYXQzMng0QXJyYXlWaWV3IGV4dGVuZHMgX1R5cGVkTGlzdFZpZXcKICAgIHdpdGggX0Zsb2F0MzJ4NExpc3RNaXhpbgogICAgaW1wbGVtZW50cyBGbG9hdDMyeDRMaXN0IHsKICAvLyBDb25zdHJ1Y3Rvci4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDMyeDRBcnJheVZpZXcpCiAgZmFjdG9yeSBfRmxvYXQzMng0QXJyYXlWaWV3Ll8oX1R5cGVkTGlzdCBidWZmZXIsIGludCBvZmZzZXRJbkJ5dGVzLAogICAgICBpbnQgbGVuZ3RoKSBuYXRpdmUgIlR5cGVkRGF0YVZpZXdfRmxvYXQzMng0QXJyYXlWaWV3X25ldyI7CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgTGlzdCBpbnRlcmZhY2UuCiAgRmxvYXQzMng0IG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF90eXBlZERhdGEKICAgICAgICAuX2dldEZsb2F0MzJ4NChvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogRmxvYXQzMng0TGlzdC5ieXRlc1BlckVsZW1lbnQpKTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgRmxvYXQzMng0IHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfdHlwZWREYXRhLl9zZXRGbG9hdDMyeDQoCiAgICAgICAgb2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIEZsb2F0MzJ4NExpc3QuYnl0ZXNQZXJFbGVtZW50KSwgdmFsdWUpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBGbG9hdDMyeDRMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBGbG9hdDMyeDRMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgRmxvYXQzMng0TGlzdChsZW5ndGgpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfSW50MzJ4NEFycmF5VmlldyBleHRlbmRzIF9UeXBlZExpc3RWaWV3CiAgICB3aXRoIF9JbnQzMng0TGlzdE1peGluCiAgICBpbXBsZW1lbnRzIEludDMyeDRMaXN0IHsKICAvLyBDb25zdHJ1Y3Rvci4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9JbnQzMng0QXJyYXlWaWV3KQogIGZhY3RvcnkgX0ludDMyeDRBcnJheVZpZXcuXyhfVHlwZWRMaXN0IGJ1ZmZlciwgaW50IG9mZnNldEluQnl0ZXMsIGludCBsZW5ndGgpCiAgICAgIG5hdGl2ZSAiVHlwZWREYXRhVmlld19JbnQzMng0QXJyYXlWaWV3X25ldyI7CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgTGlzdCBpbnRlcmZhY2UuCiAgSW50MzJ4NCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiKTsKICAgIH0KICAgIHJldHVybiBfdHlwZWREYXRhCiAgICAgICAgLl9nZXRJbnQzMng0KG9mZnNldEluQnl0ZXMgKyAoaW5kZXggKiBJbnQzMng0TGlzdC5ieXRlc1BlckVsZW1lbnQpKTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgSW50MzJ4NCB2YWx1ZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgX3R5cGVkRGF0YS5fc2V0SW50MzJ4NCgKICAgICAgICBvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogSW50MzJ4NExpc3QuYnl0ZXNQZXJFbGVtZW50KSwgdmFsdWUpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBJbnQzMng0TGlzdC5ieXRlc1BlckVsZW1lbnQ7CiAgfQoKICAvLyBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZHMuCiAgSW50MzJ4NExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIG5ldyBJbnQzMng0TGlzdChsZW5ndGgpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRmxvYXQ2NHgyQXJyYXlWaWV3IGV4dGVuZHMgX1R5cGVkTGlzdFZpZXcKICAgIHdpdGggX0Zsb2F0NjR4Mkxpc3RNaXhpbgogICAgaW1wbGVtZW50cyBGbG9hdDY0eDJMaXN0IHsKICAvLyBDb25zdHJ1Y3Rvci4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9GbG9hdDY0eDJBcnJheVZpZXcpCiAgZmFjdG9yeSBfRmxvYXQ2NHgyQXJyYXlWaWV3Ll8oX1R5cGVkTGlzdCBidWZmZXIsIGludCBvZmZzZXRJbkJ5dGVzLAogICAgICBpbnQgbGVuZ3RoKSBuYXRpdmUgIlR5cGVkRGF0YVZpZXdfRmxvYXQ2NHgyQXJyYXlWaWV3X25ldyI7CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgTGlzdCBpbnRlcmZhY2UuCiAgRmxvYXQ2NHgyIG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIpOwogICAgfQogICAgcmV0dXJuIF90eXBlZERhdGEKICAgICAgICAuX2dldEZsb2F0NjR4MihvZmZzZXRJbkJ5dGVzICsgKGluZGV4ICogRmxvYXQ2NHgyTGlzdC5ieXRlc1BlckVsZW1lbnQpKTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgRmxvYXQ2NHgyIHZhbHVlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICBfdHlwZWREYXRhLl9zZXRGbG9hdDY0eDIoCiAgICAgICAgb2Zmc2V0SW5CeXRlcyArIChpbmRleCAqIEZsb2F0NjR4Mkxpc3QuYnl0ZXNQZXJFbGVtZW50KSwgdmFsdWUpOwogIH0KCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBUeXBlZERhdGEgaW50ZXJmYWNlLgogIGludCBnZXQgZWxlbWVudFNpemVJbkJ5dGVzIHsKICAgIHJldHVybiBGbG9hdDY0eDJMaXN0LmJ5dGVzUGVyRWxlbWVudDsKICB9CgogIC8vIEludGVybmFsIHV0aWxpdHkgbWV0aG9kcy4KICBGbG9hdDY0eDJMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgRmxvYXQ2NHgyTGlzdChsZW5ndGgpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfQnl0ZURhdGFWaWV3IGltcGxlbWVudHMgQnl0ZURhdGEgewogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0J5dGVEYXRhVmlldykKICBmYWN0b3J5IF9CeXRlRGF0YVZpZXcuXyhfVHlwZWRMaXN0IGJ1ZmZlciwgaW50IG9mZnNldEluQnl0ZXMsIGludCBsZW5ndGgpCiAgICAgIG5hdGl2ZSAiVHlwZWREYXRhVmlld19CeXRlRGF0YVZpZXdfbmV3IjsKCiAgLy8gTWV0aG9kKHMpIGltcGxlbWVudGluZyBUeXBlZERhdGEgaW50ZXJmYWNlLgogIF9CeXRlQnVmZmVyIGdldCBidWZmZXIgewogICAgcmV0dXJuIF90eXBlZERhdGEuYnVmZmVyOwogIH0KCiAgaW50IGdldCBsZW5ndGhJbkJ5dGVzIHsKICAgIHJldHVybiBsZW5ndGg7CiAgfQoKICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyB7CiAgICByZXR1cm4gMTsKICB9CgogIC8vIE1ldGhvZChzKSBpbXBsZW1lbnRpbmcgQnl0ZURhdGEgaW50ZXJmYWNlLgoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgZ2V0SW50OChpbnQgYnl0ZU9mZnNldCkgewogICAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGJ5dGVPZmZzZXQgPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGJ5dGVPZmZzZXQsIHRoaXMsICJieXRlT2Zmc2V0Iik7CiAgICB9CiAgICByZXR1cm4gX3R5cGVkRGF0YS5fZ2V0SW50OChvZmZzZXRJbkJ5dGVzICsgYnl0ZU9mZnNldCk7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIHNldEludDgoaW50IGJ5dGVPZmZzZXQsIGludCB2YWx1ZSkgewogICAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGJ5dGVPZmZzZXQgPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGJ5dGVPZmZzZXQsIHRoaXMsICJieXRlT2Zmc2V0Iik7CiAgICB9CiAgICBfdHlwZWREYXRhLl9zZXRJbnQ4KG9mZnNldEluQnl0ZXMgKyBieXRlT2Zmc2V0LCB2YWx1ZSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgZ2V0VWludDgoaW50IGJ5dGVPZmZzZXQpIHsKICAgIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBieXRlT2Zmc2V0ID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChieXRlT2Zmc2V0LCB0aGlzLCAiYnl0ZU9mZnNldCIpOwogICAgfQogICAgcmV0dXJuIF90eXBlZERhdGEuX2dldFVpbnQ4KG9mZnNldEluQnl0ZXMgKyBieXRlT2Zmc2V0KTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgc2V0VWludDgoaW50IGJ5dGVPZmZzZXQsIGludCB2YWx1ZSkgewogICAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGJ5dGVPZmZzZXQgPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLmluZGV4KGJ5dGVPZmZzZXQsIHRoaXMsICJieXRlT2Zmc2V0Iik7CiAgICB9CiAgICBfdHlwZWREYXRhLl9zZXRVaW50OChvZmZzZXRJbkJ5dGVzICsgYnl0ZU9mZnNldCwgdmFsdWUpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IGdldEludDE2KGludCBieXRlT2Zmc2V0LCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSB7CiAgICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYnl0ZU9mZnNldCArIDEgPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGJ5dGVPZmZzZXQsIDAsIGxlbmd0aCAtIDIsICJieXRlT2Zmc2V0Iik7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX3R5cGVkRGF0YS5fZ2V0SW50MTYob2Zmc2V0SW5CeXRlcyArIGJ5dGVPZmZzZXQpOwogICAgaWYgKGlkZW50aWNhbChlbmRpYW4sIEVuZGlhbi5ob3N0KSkgewogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgcmV0dXJuIF9ieXRlU3dhcDE2KHJlc3VsdCkudG9TaWduZWQoMTYpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBzZXRJbnQxNihpbnQgYnl0ZU9mZnNldCwgaW50IHZhbHVlLCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSB7CiAgICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYnl0ZU9mZnNldCArIDEgPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGJ5dGVPZmZzZXQsIDAsIGxlbmd0aCAtIDIsICJieXRlT2Zmc2V0Iik7CiAgICB9CiAgICBfdHlwZWREYXRhLl9zZXRJbnQxNihvZmZzZXRJbkJ5dGVzICsgYnl0ZU9mZnNldCwKICAgICAgICBpZGVudGljYWwoZW5kaWFuLCBFbmRpYW4uaG9zdCkgPyB2YWx1ZSA6IF9ieXRlU3dhcDE2KHZhbHVlKSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgZ2V0VWludDE2KGludCBieXRlT2Zmc2V0LCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSB7CiAgICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYnl0ZU9mZnNldCArIDEgPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGJ5dGVPZmZzZXQsIDAsIGxlbmd0aCAtIDIsICJieXRlT2Zmc2V0Iik7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX3R5cGVkRGF0YS5fZ2V0VWludDE2KG9mZnNldEluQnl0ZXMgKyBieXRlT2Zmc2V0KTsKICAgIGlmIChpZGVudGljYWwoZW5kaWFuLCBFbmRpYW4uaG9zdCkpIHsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIHJldHVybiBfYnl0ZVN3YXAxNihyZXN1bHQpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBzZXRVaW50MTYoaW50IGJ5dGVPZmZzZXQsIGludCB2YWx1ZSwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgewogICAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGJ5dGVPZmZzZXQgKyAxID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShieXRlT2Zmc2V0LCAwLCBsZW5ndGggLSAyLCAiYnl0ZU9mZnNldCIpOwogICAgfQogICAgX3R5cGVkRGF0YS5fc2V0VWludDE2KG9mZnNldEluQnl0ZXMgKyBieXRlT2Zmc2V0LAogICAgICAgIGlkZW50aWNhbChlbmRpYW4sIEVuZGlhbi5ob3N0KSA/IHZhbHVlIDogX2J5dGVTd2FwMTYodmFsdWUpKTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBnZXRJbnQzMihpbnQgYnl0ZU9mZnNldCwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgewogICAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGJ5dGVPZmZzZXQgKyAzID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShieXRlT2Zmc2V0LCAwLCBsZW5ndGggLSA0LCAiYnl0ZU9mZnNldCIpOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF90eXBlZERhdGEuX2dldEludDMyKG9mZnNldEluQnl0ZXMgKyBieXRlT2Zmc2V0KTsKICAgIGlmIChpZGVudGljYWwoZW5kaWFuLCBFbmRpYW4uaG9zdCkpIHsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIHJldHVybiBfYnl0ZVN3YXAzMihyZXN1bHQpLnRvU2lnbmVkKDMyKTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgc2V0SW50MzIoaW50IGJ5dGVPZmZzZXQsIGludCB2YWx1ZSwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgewogICAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGJ5dGVPZmZzZXQgKyAzID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShieXRlT2Zmc2V0LCAwLCBsZW5ndGggLSA0LCAiYnl0ZU9mZnNldCIpOwogICAgfQogICAgX3R5cGVkRGF0YS5fc2V0SW50MzIob2Zmc2V0SW5CeXRlcyArIGJ5dGVPZmZzZXQsCiAgICAgICAgaWRlbnRpY2FsKGVuZGlhbiwgRW5kaWFuLmhvc3QpID8gdmFsdWUgOiBfYnl0ZVN3YXAzMih2YWx1ZSkpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IGdldFVpbnQzMihpbnQgYnl0ZU9mZnNldCwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgewogICAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGJ5dGVPZmZzZXQgKyAzID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShieXRlT2Zmc2V0LCAwLCBsZW5ndGggLSA0LCAiYnl0ZU9mZnNldCIpOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF90eXBlZERhdGEuX2dldFVpbnQzMihvZmZzZXRJbkJ5dGVzICsgYnl0ZU9mZnNldCk7CiAgICBpZiAoaWRlbnRpY2FsKGVuZGlhbiwgRW5kaWFuLmhvc3QpKSB7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gX2J5dGVTd2FwMzIocmVzdWx0KTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgc2V0VWludDMyKGludCBieXRlT2Zmc2V0LCBpbnQgdmFsdWUsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pIHsKICAgIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBieXRlT2Zmc2V0ICsgMyA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoYnl0ZU9mZnNldCwgMCwgbGVuZ3RoIC0gNCwgImJ5dGVPZmZzZXQiKTsKICAgIH0KICAgIF90eXBlZERhdGEuX3NldFVpbnQzMihvZmZzZXRJbkJ5dGVzICsgYnl0ZU9mZnNldCwKICAgICAgICBpZGVudGljYWwoZW5kaWFuLCBFbmRpYW4uaG9zdCkgPyB2YWx1ZSA6IF9ieXRlU3dhcDMyKHZhbHVlKSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgZ2V0SW50NjQoaW50IGJ5dGVPZmZzZXQsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pIHsKICAgIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBieXRlT2Zmc2V0ICsgNyA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoYnl0ZU9mZnNldCwgMCwgbGVuZ3RoIC0gOCwgImJ5dGVPZmZzZXQiKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfdHlwZWREYXRhLl9nZXRJbnQ2NChvZmZzZXRJbkJ5dGVzICsgYnl0ZU9mZnNldCk7CiAgICBpZiAoaWRlbnRpY2FsKGVuZGlhbiwgRW5kaWFuLmhvc3QpKSB7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gX2J5dGVTd2FwNjQocmVzdWx0KS50b1NpZ25lZCg2NCk7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIHNldEludDY0KGludCBieXRlT2Zmc2V0LCBpbnQgdmFsdWUsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pIHsKICAgIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBieXRlT2Zmc2V0ICsgNyA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoYnl0ZU9mZnNldCwgMCwgbGVuZ3RoIC0gOCwgImJ5dGVPZmZzZXQiKTsKICAgIH0KICAgIF90eXBlZERhdGEuX3NldEludDY0KG9mZnNldEluQnl0ZXMgKyBieXRlT2Zmc2V0LAogICAgICAgIGlkZW50aWNhbChlbmRpYW4sIEVuZGlhbi5ob3N0KSA/IHZhbHVlIDogX2J5dGVTd2FwNjQodmFsdWUpKTsKICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBnZXRVaW50NjQoaW50IGJ5dGVPZmZzZXQsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pIHsKICAgIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBieXRlT2Zmc2V0ICsgNyA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoYnl0ZU9mZnNldCwgMCwgbGVuZ3RoIC0gOCwgImJ5dGVPZmZzZXQiKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfdHlwZWREYXRhLl9nZXRVaW50NjQob2Zmc2V0SW5CeXRlcyArIGJ5dGVPZmZzZXQpOwogICAgaWYgKGlkZW50aWNhbChlbmRpYW4sIEVuZGlhbi5ob3N0KSkgewogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgcmV0dXJuIF9ieXRlU3dhcDY0KHJlc3VsdCk7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIHNldFVpbnQ2NChpbnQgYnl0ZU9mZnNldCwgaW50IHZhbHVlLCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSB7CiAgICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYnl0ZU9mZnNldCArIDcgPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGJ5dGVPZmZzZXQsIDAsIGxlbmd0aCAtIDgsICJieXRlT2Zmc2V0Iik7CiAgICB9CiAgICBfdHlwZWREYXRhLl9zZXRVaW50NjQob2Zmc2V0SW5CeXRlcyArIGJ5dGVPZmZzZXQsCiAgICAgICAgaWRlbnRpY2FsKGVuZGlhbiwgRW5kaWFuLmhvc3QpID8gdmFsdWUgOiBfYnl0ZVN3YXA2NCh2YWx1ZSkpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgZG91YmxlIGdldEZsb2F0MzIoaW50IGJ5dGVPZmZzZXQsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pIHsKICAgIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBieXRlT2Zmc2V0ICsgMyA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoYnl0ZU9mZnNldCwgMCwgbGVuZ3RoIC0gNCwgImJ5dGVPZmZzZXQiKTsKICAgIH0KICAgIGlmIChpZGVudGljYWwoZW5kaWFuLCBFbmRpYW4uaG9zdCkpIHsKICAgICAgcmV0dXJuIF90eXBlZERhdGEuX2dldEZsb2F0MzIob2Zmc2V0SW5CeXRlcyArIGJ5dGVPZmZzZXQpOwogICAgfQogICAgX2NvbnZVMzJbMF0gPQogICAgICAgIF9ieXRlU3dhcDMyKF90eXBlZERhdGEuX2dldFVpbnQzMihvZmZzZXRJbkJ5dGVzICsgYnl0ZU9mZnNldCkpOwogICAgcmV0dXJuIF9jb252RjMyWzBdOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBzZXRGbG9hdDMyKGludCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pIHsKICAgIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBieXRlT2Zmc2V0ICsgMyA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoYnl0ZU9mZnNldCwgMCwgbGVuZ3RoIC0gNCwgImJ5dGVPZmZzZXQiKTsKICAgIH0KICAgIGlmIChpZGVudGljYWwoZW5kaWFuLCBFbmRpYW4uaG9zdCkpIHsKICAgICAgX3R5cGVkRGF0YS5fc2V0RmxvYXQzMihvZmZzZXRJbkJ5dGVzICsgYnl0ZU9mZnNldCwgdmFsdWUpOwogICAgICByZXR1cm47CiAgICB9CiAgICBfY29udkYzMlswXSA9IHZhbHVlOwogICAgX3R5cGVkRGF0YS5fc2V0VWludDMyKG9mZnNldEluQnl0ZXMgKyBieXRlT2Zmc2V0LCBfYnl0ZVN3YXAzMihfY29udlUzMlswXSkpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgZG91YmxlIGdldEZsb2F0NjQoaW50IGJ5dGVPZmZzZXQsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pIHsKICAgIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBieXRlT2Zmc2V0ICsgNyA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoYnl0ZU9mZnNldCwgMCwgbGVuZ3RoIC0gOCwgImJ5dGVPZmZzZXQiKTsKICAgIH0KICAgIGlmIChpZGVudGljYWwoZW5kaWFuLCBFbmRpYW4uaG9zdCkpIHsKICAgICAgcmV0dXJuIF90eXBlZERhdGEuX2dldEZsb2F0NjQob2Zmc2V0SW5CeXRlcyArIGJ5dGVPZmZzZXQpOwogICAgfQogICAgX2NvbnZVNjRbMF0gPQogICAgICAgIF9ieXRlU3dhcDY0KF90eXBlZERhdGEuX2dldFVpbnQ2NChvZmZzZXRJbkJ5dGVzICsgYnl0ZU9mZnNldCkpOwogICAgcmV0dXJuIF9jb252RjY0WzBdOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBzZXRGbG9hdDY0KGludCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pIHsKICAgIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBieXRlT2Zmc2V0ICsgNyA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoYnl0ZU9mZnNldCwgMCwgbGVuZ3RoIC0gOCwgImJ5dGVPZmZzZXQiKTsKICAgIH0KICAgIGlmIChpZGVudGljYWwoZW5kaWFuLCBFbmRpYW4uaG9zdCkpIHsKICAgICAgX3R5cGVkRGF0YS5fc2V0RmxvYXQ2NChvZmZzZXRJbkJ5dGVzICsgYnl0ZU9mZnNldCwgdmFsdWUpOwogICAgICByZXR1cm47CiAgICB9CiAgICBfY29udkY2NFswXSA9IHZhbHVlOwogICAgX3R5cGVkRGF0YS5fc2V0VWludDY0KG9mZnNldEluQnl0ZXMgKyBieXRlT2Zmc2V0LCBfYnl0ZVN3YXA2NChfY29udlU2NFswXSkpOwogIH0KCiAgRmxvYXQzMng0IGdldEZsb2F0MzJ4NChpbnQgYnl0ZU9mZnNldCwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgewogICAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGJ5dGVPZmZzZXQgKyAzID49IGxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShieXRlT2Zmc2V0LCAwLCBsZW5ndGggLSA0LCAiYnl0ZU9mZnNldCIpOwogICAgfQogICAgLy8gVE9ETyhqb2hubWNjdXRjaGFuKSA6IE5lZWQgdG8gcmVzb2x2ZSB0aGlzIGZvciBlbmRpYW5pdHkuCiAgICByZXR1cm4gX3R5cGVkRGF0YS5fZ2V0RmxvYXQzMng0KG9mZnNldEluQnl0ZXMgKyBieXRlT2Zmc2V0KTsKICB9CgogIHZvaWQgc2V0RmxvYXQzMng0KGludCBieXRlT2Zmc2V0LCBGbG9hdDMyeDQgdmFsdWUsCiAgICAgIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pIHsKICAgIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBieXRlT2Zmc2V0ICsgMyA+PSBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoYnl0ZU9mZnNldCwgMCwgbGVuZ3RoIC0gNCwgImJ5dGVPZmZzZXQiKTsKICAgIH0KICAgIC8vIFRPRE8oam9obm1jY3V0Y2hhbikgOiBOZWVkIHRvIHJlc29sdmUgdGhpcyBmb3IgZW5kaWFuaXR5LgogICAgX3R5cGVkRGF0YS5fc2V0RmxvYXQzMng0KG9mZnNldEluQnl0ZXMgKyBieXRlT2Zmc2V0LCB2YWx1ZSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIF9UeXBlZExpc3QgZ2V0IF90eXBlZERhdGEgbmF0aXZlICJUeXBlZERhdGFWaWV3X3R5cGVkRGF0YSI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgZ2V0IG9mZnNldEluQnl0ZXMgbmF0aXZlICJUeXBlZERhdGFWaWV3X29mZnNldEluQnl0ZXMiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IGdldCBsZW5ndGggbmF0aXZlICJUeXBlZERhdGFWaWV3X2xlbmd0aCI7Cn0KCkBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQppbnQgX2J5dGVTd2FwMTYoaW50IHZhbHVlKSB7CiAgcmV0dXJuICgodmFsdWUgJiAweEZGMDApID4+IDgpIHwgKCh2YWx1ZSAmIDB4MDBGRikgPDwgOCk7Cn0KCkBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQppbnQgX2J5dGVTd2FwMzIoaW50IHZhbHVlKSB7CiAgdmFsdWUgPSAoKHZhbHVlICYgMHhGRjAwRkYwMCkgPj4gOCkgfCAoKHZhbHVlICYgMHgwMEZGMDBGRikgPDwgOCk7CiAgdmFsdWUgPSAoKHZhbHVlICYgMHhGRkZGMDAwMCkgPj4gMTYpIHwgKCh2YWx1ZSAmIDB4MDAwMEZGRkYpIDw8IDE2KTsKICByZXR1cm4gdmFsdWU7Cn0KCkBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQppbnQgX2J5dGVTd2FwNjQoaW50IHZhbHVlKSB7CiAgcmV0dXJuIChfYnl0ZVN3YXAzMih2YWx1ZSkgPDwgMzIpIHwgX2J5dGVTd2FwMzIodmFsdWUgPj4gMzIpOwp9CgpmaW5hbCBfY29udlUzMiA9IG5ldyBVaW50MzJMaXN0KDIpOwpmaW5hbCBfY29udlU2NCA9IG5ldyBVaW50NjRMaXN0LnZpZXcoX2NvbnZVMzIuYnVmZmVyKTsKZmluYWwgX2NvbnZGMzIgPSBuZXcgRmxvYXQzMkxpc3QudmlldyhfY29udlUzMi5idWZmZXIpOwpmaW5hbCBfY29udkY2NCA9IG5ldyBGbG9hdDY0TGlzdC52aWV3KF9jb252VTMyLmJ1ZmZlcik7CgovLyBUb3AgbGV2ZWwgdXRpbGl0eSBtZXRob2RzLgpAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKaW50IF90b0ludChpbnQgdmFsdWUsIGludCBtYXNrKSB7CiAgdmFsdWUgJj0gbWFzazsKICBpZiAodmFsdWUgPiAobWFzayA+PiAxKSkgdmFsdWUgLT0gbWFzayArIDE7CiAgcmV0dXJuIHZhbHVlOwp9CgpAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKaW50IF90b0ludDgoaW50IHZhbHVlKSB7CiAgcmV0dXJuIF90b0ludCh2YWx1ZSwgMHhGRik7Cn0KCkBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQppbnQgX3RvVWludDgoaW50IHZhbHVlKSB7CiAgcmV0dXJuIHZhbHVlICYgMHhGRjsKfQoKQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQppbnQgX3RvQ2xhbXBlZFVpbnQ4KGludCB2YWx1ZSkgewogIGlmICh2YWx1ZSA8IDApIHJldHVybiAwOwogIGlmICh2YWx1ZSA+IDB4RkYpIHJldHVybiAweEZGOwogIHJldHVybiB2YWx1ZTsKfQoKQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCmludCBfdG9JbnQxNihpbnQgdmFsdWUpIHsKICByZXR1cm4gX3RvSW50KHZhbHVlLCAweEZGRkYpOwp9CgpAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKaW50IF90b1VpbnQxNihpbnQgdmFsdWUpIHsKICByZXR1cm4gdmFsdWUgJiAweEZGRkY7Cn0KCkBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQppbnQgX3RvSW50MzIoaW50IHZhbHVlKSB7CiAgcmV0dXJuIF90b0ludCh2YWx1ZSwgMHhGRkZGRkZGRik7Cn0KCkBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQppbnQgX3RvVWludDMyKGludCB2YWx1ZSkgewogIHJldHVybiB2YWx1ZSAmIDB4RkZGRkZGRkY7Cn0KCi8vIEluIGFkZGl0aW9uIHRvIGV4cGxpY2l0bHkgY2hlY2tpbmcgdGhlIHJhbmdlLCB0aGlzIG1ldGhvZCBpbXBsaWNpdGx5IGVuc3VyZXMKLy8gdGhhdCBhbGwgYXJndW1lbnRzIGFyZSBub24tbnVsbCAoYSBubyBzdWNoIG1ldGhvZCBlcnJvciBnZXRzIHRocm93bgovLyBvdGhlcndpc2UpLgp2b2lkIF9yYW5nZUNoZWNrKGludCBsaXN0TGVuZ3RoLCBpbnQgc3RhcnQsIGludCBsZW5ndGgpIHsKICBpZiAobGVuZ3RoIDwgMCkgewogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IudmFsdWUobGVuZ3RoKTsKICB9CiAgaWYgKHN0YXJ0IDwgMCkgewogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IudmFsdWUoc3RhcnQpOwogIH0KICBpZiAoc3RhcnQgKyBsZW5ndGggPiBsaXN0TGVuZ3RoKSB7CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci52YWx1ZShzdGFydCArIGxlbmd0aCk7CiAgfQp9Cgp2b2lkIF9vZmZzZXRBbGlnbm1lbnRDaGVjayhpbnQgb2Zmc2V0LCBpbnQgYWxpZ25tZW50KSB7CiAgaWYgKChvZmZzZXQgJSBhbGlnbm1lbnQpICE9IDApIHsKICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPZmZzZXQgKCRvZmZzZXQpIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAnCiAg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SwZEKhUGIAQBHkw2SwY2RgQBHkQ2SwYqQQYSSBgEAR5QNksGKkEOBhlRBAEeRDZLBipBBhJIGAQBHlA2SwYqQQ4GGVEEAUk2SwZBQQQBNSY2SwZBQQQBKR4+ATQePgE0HjACARwdPAIBHB1FRxACARwdQAIBJDc4OAEeHCIRLhACARwZHgIBHBoXAgEyIRshEAIBHBogAgEcGxkCARwaJAIBHBsdAgFQRw86FCgEEycEJTAEAgE4I0MrBAIBK2RhcnQ6dHlwZWRfZGF0YS1wYXRjaC90eXBlZF9kYXRhX3BhdGNoLmRhcnRDb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL3R5cGVkX2RhdGEvdW5tb2RpZmlhYmxlX3R5cGVkX2RhdGEuZGFydKw+Ly8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC50eXBlZF9kYXRhOwoKLyoqCiAqIEEgcmVhZC1vbmx5IHZpZXcgb2YgYSBbQnl0ZUJ1ZmZlcl0uCiAqLwpjbGFzcyBVbm1vZGlmaWFibGVCeXRlQnVmZmVyVmlldyBpbXBsZW1lbnRzIEJ5dGVCdWZmZXIgewogIGZpbmFsIEJ5dGVCdWZmZXIgX2RhdGE7CgogIFVubW9kaWZpYWJsZUJ5dGVCdWZmZXJWaWV3KEJ5dGVCdWZmZXIgZGF0YSkgOiBfZGF0YSA9IGRhdGE7CgogIGludCBnZXQgbGVuZ3RoSW5CeXRlcyA9PiBfZGF0YS5sZW5ndGhJbkJ5dGVzOwoKICBVaW50OExpc3QgYXNVaW50OExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pID0+CiAgICAgIG5ldyBVbm1vZGlmaWFibGVVaW50OExpc3RWaWV3KF9kYXRhLmFzVWludDhMaXN0KG9mZnNldEluQnl0ZXMsIGxlbmd0aCkpOwoKICBJbnQ4TGlzdCBhc0ludDhMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSA9PgogICAgICBuZXcgVW5tb2RpZmlhYmxlSW50OExpc3RWaWV3KF9kYXRhLmFzSW50OExpc3Qob2Zmc2V0SW5CeXRlcywgbGVuZ3RoKSk7CgogIFVpbnQ4Q2xhbXBlZExpc3QgYXNVaW50OENsYW1wZWRMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSA9PgogICAgICBuZXcgVW5tb2RpZmlhYmxlVWludDhDbGFtcGVkTGlzdFZpZXcoCiAgICAgICAgICBfZGF0YS5hc1VpbnQ4Q2xhbXBlZExpc3Qob2Zmc2V0SW5CeXRlcywgbGVuZ3RoKSk7CgogIFVpbnQxNkxpc3QgYXNVaW50MTZMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSA9PgogICAgICBuZXcgVW5tb2RpZmlhYmxlVWludDE2TGlzdFZpZXcoX2RhdGEuYXNVaW50MTZMaXN0KG9mZnNldEluQnl0ZXMsIGxlbmd0aCkpOwoKICBJbnQxNkxpc3QgYXNJbnQxNkxpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pID0+CiAgICAgIG5ldyBVbm1vZGlmaWFibGVJbnQxNkxpc3RWaWV3KF9kYXRhLmFzSW50MTZMaXN0KG9mZnNldEluQnl0ZXMsIGxlbmd0aCkpOwoKICBVaW50MzJMaXN0IGFzVWludDMyTGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgPT4KICAgICAgbmV3IFVubW9kaWZpYWJsZVVpbnQzMkxpc3RWaWV3KF9kYXRhLmFzVWludDMyTGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpKTsKCiAgSW50MzJMaXN0IGFzSW50MzJMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSA9PgogICAgICBuZXcgVW5tb2RpZmlhYmxlSW50MzJMaXN0VmlldyhfZGF0YS5hc0ludDMyTGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpKTsKCiAgVWludDY0TGlzdCBhc1VpbnQ2NExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pID0+CiAgICAgIG5ldyBVbm1vZGlmaWFibGVVaW50NjRMaXN0VmlldyhfZGF0YS5hc1VpbnQ2NExpc3Qob2Zmc2V0SW5CeXRlcywgbGVuZ3RoKSk7CgogIEludDY0TGlzdCBhc0ludDY0TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgPT4KICAgICAgbmV3IFVubW9kaWZpYWJsZUludDY0TGlzdFZpZXcoX2RhdGEuYXNJbnQ2NExpc3Qob2Zmc2V0SW5CeXRlcywgbGVuZ3RoKSk7CgogIEludDMyeDRMaXN0IGFzSW50MzJ4NExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pID0+CiAgICAgIG5ldyBVbm1vZGlmaWFibGVJbnQzMng0TGlzdFZpZXcoCiAgICAgICAgICBfZGF0YS5hc0ludDMyeDRMaXN0KG9mZnNldEluQnl0ZXMsIGxlbmd0aCkpOwoKICBGbG9hdDMyTGlzdCBhc0Zsb2F0MzJMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSA9PgogICAgICBuZXcgVW5tb2RpZmlhYmxlRmxvYXQzMkxpc3RWaWV3KAogICAgICAgICAgX2RhdGEuYXNGbG9hdDMyTGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpKTsKCiAgRmxvYXQ2NExpc3QgYXNGbG9hdDY0TGlzdChbaW50IG9mZnNldEluQnl0ZXMgPSAwLCBpbnQgbGVuZ3RoXSkgPT4KICAgICAgbmV3IFVubW9kaWZpYWJsZUZsb2F0NjRMaXN0VmlldygKICAgICAgICAgIF9kYXRhLmFzRmxvYXQ2NExpc3Qob2Zmc2V0SW5CeXRlcywgbGVuZ3RoKSk7CgogIEZsb2F0MzJ4NExpc3QgYXNGbG9hdDMyeDRMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSA9PgogICAgICBuZXcgVW5tb2RpZmlhYmxlRmxvYXQzMng0TGlzdFZpZXcoCiAgICAgICAgICBfZGF0YS5hc0Zsb2F0MzJ4NExpc3Qob2Zmc2V0SW5CeXRlcywgbGVuZ3RoKSk7CgogIEZsb2F0NjR4Mkxpc3QgYXNGbG9hdDY0eDJMaXN0KFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSA9PgogICAgICBuZXcgVW5tb2RpZmlhYmxlRmxvYXQ2NHgyTGlzdFZpZXcoCiAgICAgICAgICBfZGF0YS5hc0Zsb2F0NjR4Mkxpc3Qob2Zmc2V0SW5CeXRlcywgbGVuZ3RoKSk7CgogIEJ5dGVEYXRhIGFzQnl0ZURhdGEoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pID0+CiAgICAgIG5ldyBVbm1vZGlmaWFibGVCeXRlRGF0YVZpZXcoX2RhdGEuYXNCeXRlRGF0YShvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpKTsKfQoKLyoqCiAqIEEgcmVhZC1vbmx5IHZpZXcgb2YgYSBbQnl0ZURhdGFdLgogKi8KY2xhc3MgVW5tb2RpZmlhYmxlQnl0ZURhdGFWaWV3IGltcGxlbWVudHMgQnl0ZURhdGEgewogIGZpbmFsIEJ5dGVEYXRhIF9kYXRhOwoKICBVbm1vZGlmaWFibGVCeXRlRGF0YVZpZXcoQnl0ZURhdGEgZGF0YSkgOiBfZGF0YSA9IGRhdGE7CgogIGludCBnZXRJbnQ4KGludCBieXRlT2Zmc2V0KSA9PiBfZGF0YS5nZXRJbnQ4KGJ5dGVPZmZzZXQpOwoKICB2b2lkIHNldEludDgoaW50IGJ5dGVPZmZzZXQsIGludCB2YWx1ZSkgPT4gX3Vuc3VwcG9ydGVkKCk7CgogIGludCBnZXRVaW50OChpbnQgYnl0ZU9mZnNldCkgPT4gX2RhdGEuZ2V0VWludDgoYnl0ZU9mZnNldCk7CgogIHZvaWQgc2V0VWludDgoaW50IGJ5dGVPZmZzZXQsIGludCB2YWx1ZSkgPT4gX3Vuc3VwcG9ydGVkKCk7CgogIGludCBnZXRJbnQxNihpbnQgYnl0ZU9mZnNldCwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgPT4KICAgICAgX2RhdGEuZ2V0SW50MTYoYnl0ZU9mZnNldCwgZW5kaWFuKTsKCiAgdm9pZCBzZXRJbnQxNihpbnQgYnl0ZU9mZnNldCwgaW50IHZhbHVlLCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSA9PgogICAgICBfdW5zdXBwb3J0ZWQoKTsKCiAgaW50IGdldFVpbnQxNihpbnQgYnl0ZU9mZnNldCwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgPT4KICAgICAgX2RhdGEuZ2V0VWludDE2KGJ5dGVPZmZzZXQsIGVuZGlhbik7CgogIHZvaWQgc2V0VWludDE2KGludCBieXRlT2Zmc2V0LCBpbnQgdmFsdWUsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pID0+CiAgICAgIF91bnN1cHBvcnRlZCgpOwoKICBpbnQgZ2V0SW50MzIoaW50IGJ5dGVPZmZzZXQsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pID0+CiAgICAgIF9kYXRhLmdldEludDMyKGJ5dGVPZmZzZXQsIGVuZGlhbik7CgogIHZvaWQgc2V0SW50MzIoaW50IGJ5dGVPZmZzZXQsIGludCB2YWx1ZSwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgPT4KICAgICAgX3Vuc3VwcG9ydGVkKCk7CgogIGludCBnZXRVaW50MzIoaW50IGJ5dGVPZmZzZXQsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pID0+CiAgICAgIF9kYXRhLmdldFVpbnQzMihieXRlT2Zmc2V0LCBlbmRpYW4pOwoKICB2b2lkIHNldFVpbnQzMihpbnQgYnl0ZU9mZnNldCwgaW50IHZhbHVlLCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSA9PgogICAgICBfdW5zdXBwb3J0ZWQoKTsKCiAgaW50IGdldEludDY0KGludCBieXRlT2Zmc2V0LCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSA9PgogICAgICBfZGF0YS5nZXRJbnQ2NChieXRlT2Zmc2V0LCBlbmRpYW4pOwoKICB2b2lkIHNldEludDY0KGludCBieXRlT2Zmc2V0LCBpbnQgdmFsdWUsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pID0+CiAgICAgIF91bnN1cHBvcnRlZCgpOwoKICBpbnQgZ2V0VWludDY0KGludCBieXRlT2Zmc2V0LCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSA9PgogICAgICBfZGF0YS5nZXRVaW50NjQoYnl0ZU9mZnNldCwgZW5kaWFuKTsKCiAgdm9pZCBzZXRVaW50NjQoaW50IGJ5dGVPZmZzZXQsIGludCB2YWx1ZSwgW0VuZGlhbiBlbmRpYW4gPSBFbmRpYW4uYmlnXSkgPT4KICAgICAgX3Vuc3VwcG9ydGVkKCk7CgogIGRvdWJsZSBnZXRGbG9hdDMyKGludCBieXRlT2Zmc2V0LCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSA9PgogICAgICBfZGF0YS5nZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIGVuZGlhbik7CgogIHZvaWQgc2V0RmxvYXQzMihpbnQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBbRW5kaWFuIGVuZGlhbiA9IEVuZGlhbi5iaWddKSA9PgogICAgICBfdW5zdXBwb3J0ZWQoKTsKCiAgZG91YmxlIGdldEZsb2F0NjQoaW50IGJ5dGVPZmZzZXQsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pID0+CiAgICAgIF9kYXRhLmdldEZsb2F0NjQoYnl0ZU9mZnNldCwgZW5kaWFuKTsKCiAgdm9pZCBzZXRGbG9hdDY0KGludCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIFtFbmRpYW4gZW5kaWFuID0gRW5kaWFuLmJpZ10pID0+CiAgICAgIF91bnN1cHBvcnRlZCgpOwoKICBpbnQgZ2V0IGVsZW1lbnRTaXplSW5CeXRlcyA9PiBfZGF0YS5lbGVtZW50U2l6ZUluQnl0ZXM7CgogIGludCBnZXQgb2Zmc2V0SW5CeXRlcyA9PiBfZGF0YS5vZmZzZXRJbkJ5dGVzOwoKICBpbnQgZ2V0IGxlbmd0aEluQnl0ZXMgPT4gX2RhdGEubGVuZ3RoSW5CeXRlczsKCiAgQnl0ZUJ1ZmZlciBnZXQgYnVmZmVyID0+IG5ldyBVbm1vZGlmaWFibGVCeXRlQnVmZmVyVmlldyhfZGF0YS5idWZmZXIpOwoKICB2b2lkIF91bnN1cHBvcnRlZCgpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJBbiBVbm1vZGlmaWFibGVCeXRlRGF0YVZpZXcgbWF5IG5vdCBiZSBtb2RpZmllZCIpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgX1VubW9kaWZpYWJsZUxpc3RNaXhpbjxOLCBMIGV4dGVuZHMgTGlzdDxOPiwKICAgIFREIGV4dGVuZHMgVHlwZWREYXRhPiB7CiAgTCBnZXQgX2xpc3Q7CiAgVEQgZ2V0IF9kYXRhID0+IChfbGlzdCBhcyBURCk7CgogIGludCBnZXQgbGVuZ3RoID0+IF9saXN0Lmxlbmd0aDsKCiAgTiBvcGVyYXRvciBbXShpbnQgaW5kZXgpID0+IF9saXN0W2luZGV4XTsKCiAgaW50IGdldCBlbGVtZW50U2l6ZUluQnl0ZXMgPT4gX2RhdGEuZWxlbWVudFNpemVJbkJ5dGVzOwoKICBpbnQgZ2V0IG9mZnNldEluQnl0ZXMgPT4gX2RhdGEub2Zmc2V0SW5CeXRlczsKCiAgaW50IGdldCBsZW5ndGhJbkJ5dGVzID0+IF9kYXRhLmxlbmd0aEluQnl0ZXM7CgogIEJ5dGVCdWZmZXIgZ2V0IGJ1ZmZlciA9PiBuZXcgVW5tb2RpZmlhYmxlQnl0ZUJ1ZmZlclZpZXcoX2RhdGEuYnVmZmVyKTsKCiAgTCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKTsKCiAgTCBzdWJsaXN0KGludCBzdGFydCwgW2ludCBlbmRdKSB7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBsZW5ndGgpOwogICAgaW50IHN1Ymxpc3RMZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIEwgcmVzdWx0ID0gX2NyZWF0ZUxpc3Qoc3VibGlzdExlbmd0aCk7CiAgICByZXN1bHQuc2V0UmFuZ2UoMCwgc3VibGlzdExlbmd0aCwgX2xpc3QsIHN0YXJ0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CgovKioKICogVmlldyBvZiBhIFtVaW50OExpc3RdIHRoYXQgZGlzYWxsb3dzIG1vZGlmaWNhdGlvbi4KICovCmNsYXNzIFVubW9kaWZpYWJsZVVpbnQ4TGlzdFZpZXcgZXh0ZW5kcyBVbm1vZGlmaWFibGVMaXN0QmFzZTxpbnQ+CiAgICB3aXRoIF9Vbm1vZGlmaWFibGVMaXN0TWl4aW48aW50LCBVaW50OExpc3QsIFVpbnQ4TGlzdD4KICAgIGltcGxlbWVudHMgVWludDhMaXN0IHsKICBmaW5hbCBVaW50OExpc3QgX2xpc3Q7CiAgVW5tb2RpZmlhYmxlVWludDhMaXN0VmlldyhVaW50OExpc3QgbGlzdCkgOiBfbGlzdCA9IGxpc3Q7CgogIFVpbnQ4TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSA9PiBVaW50OExpc3QobGVuZ3RoKTsKfQoKLyoqCiAqIFZpZXcgb2YgYSBbSW50OExpc3RdIHRoYXQgZGlzYWxsb3dzIG1vZGlmaWNhdGlvbi4KICovCmNsYXNzIFVubW9kaWZpYWJsZUludDhMaXN0VmlldyBleHRlbmRzIFVubW9kaWZpYWJsZUxpc3RCYXNlPGludD4KICAgIHdpdGggX1VubW9kaWZpYWJsZUxpc3RNaXhpbjxpbnQsIEludDhMaXN0LCBJbnQ4TGlzdD4KICAgIGltcGxlbWVudHMgSW50OExpc3QgewogIGZpbmFsIEludDhMaXN0IF9saXN0OwogIFVubW9kaWZpYWJsZUludDhMaXN0VmlldyhJbnQ4TGlzdCBsaXN0KSA6IF9saXN0ID0gbGlzdDsKCiAgSW50OExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgPT4gSW50OExpc3QobGVuZ3RoKTsKfQoKLyoqCiAqIFZpZXcgb2YgYSBbVWludDhDbGFtcGVkTGlzdF0gdGhhdCBkaXNhbGxvd3MgbW9kaWZpY2F0aW9uLgogKi8KY2xhc3MgVW5tb2RpZmlhYmxlVWludDhDbGFtcGVkTGlzdFZpZXcgZXh0ZW5kcyBVbm1vZGlmaWFibGVMaXN0QmFzZTxpbnQ+CiAgICB3aXRoIF9Vbm1vZGlmaWFibGVMaXN0TWl4aW48aW50LCBVaW50OENsYW1wZWRMaXN0LCBVaW50OENsYW1wZWRMaXN0PgogICAgaW1wbGVtZW50cyBVaW50OENsYW1wZWRMaXN0IHsKICBmaW5hbCBVaW50OENsYW1wZWRMaXN0IF9saXN0OwogIFVubW9kaWZpYWJsZVVpbnQ4Q2xhbXBlZExpc3RWaWV3KFVpbnQ4Q2xhbXBlZExpc3QgbGlzdCkgOiBfbGlzdCA9IGxpc3Q7CgogIFVpbnQ4Q2xhbXBlZExpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgPT4gVWludDhDbGFtcGVkTGlzdChsZW5ndGgpOwp9CgovKioKICogVmlldyBvZiBhIFtVaW50MTZMaXN0XSB0aGF0IGRpc2FsbG93cyBtb2RpZmljYXRpb24uCiAqLwpjbGFzcyBVbm1vZGlmaWFibGVVaW50MTZMaXN0VmlldyBleHRlbmRzIFVubW9kaWZpYWJsZUxpc3RCYXNlPGludD4KICAgIHdpdGggX1VubW9kaWZpYWJsZUxpc3RNaXhpbjxpbnQsIFVpbnQxNkxpc3QsIFVpbnQxNkxpc3Q+CiAgICBpbXBsZW1lbnRzIFVpbnQxNkxpc3QgewogIGZpbmFsIFVpbnQxNkxpc3QgX2xpc3Q7CiAgVW5tb2RpZmlhYmxlVWludDE2TGlzdFZpZXcoVWludDE2TGlzdCBsaXN0KSA6IF9saXN0ID0gbGlzdDsKCiAgVWludDE2TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSA9PiBVaW50MTZMaXN0KGxlbmd0aCk7Cn0KCi8qKgogKiBWaWV3IG9mIGEgW0ludDE2TGlzdF0gdGhhdCBkaXNhbGxvd3MgbW9kaWZpY2F0aW9uLgogKi8KY2xhc3MgVW5tb2RpZmlhYmxlSW50MTZMaXN0VmlldyBleHRlbmRzIFVubW9kaWZpYWJsZUxpc3RCYXNlPGludD4KICAgIHdpdGggX1VubW9kaWZpYWJsZUxpc3RNaXhpbjxpbnQsIEludDE2TGlzdCwgSW50MTZMaXN0PgogICAgaW1wbGVtZW50cyBJbnQxNkxpc3QgewogIGZpbmFsIEludDE2TGlzdCBfbGlzdDsKICBVbm1vZGlmaWFibGVJbnQxNkxpc3RWaWV3KEludDE2TGlzdCBsaXN0KSA6IF9saXN0ID0gbGlzdDsKCiAgSW50MTZMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpID0+IEludDE2TGlzdChsZW5ndGgpOwp9CgovKioKICogVmlldyBvZiBhIFtVaW50MzJMaXN0XSB0aGF0IGRpc2FsbG93cyBtb2RpZmljYXRpb24uCiAqLwpjbGFzcyBVbm1vZGlmaWFibGVVaW50MzJMaXN0VmlldyBleHRlbmRzIFVubW9kaWZpYWJsZUxpc3RCYXNlPGludD4KICAgIHdpdGggX1VubW9kaWZpYWJsZUxpc3RNaXhpbjxpbnQsIFVpbnQzMkxpc3QsIFVpbnQzMkxpc3Q+CiAgICBpbXBsZW1lbnRzIFVpbnQzMkxpc3QgewogIGZpbmFsIFVpbnQzMkxpc3QgX2xpc3Q7CiAgVW5tb2RpZmlhYmxlVWludDMyTGlzdFZpZXcoVWludDMyTGlzdCBsaXN0KSA6IF9saXN0ID0gbGlzdDsKCiAgVWludDMyTGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSA9PiBVaW50MzJMaXN0KGxlbmd0aCk7Cn0KCi8qKgogKiBWaWV3IG9mIGEgW0ludDMyTGlzdF0gdGhhdCBkaXNhbGxvd3MgbW9kaWZpY2F0aW9uLgogKi8KY2xhc3MgVW5tb2RpZmlhYmxlSW50MzJMaXN0VmlldyBleHRlbmRzIFVubW9kaWZpYWJsZUxpc3RCYXNlPGludD4KICAgIHdpdGggX1VubW9kaWZpYWJsZUxpc3RNaXhpbjxpbnQsIEludDMyTGlzdCwgSW50MzJMaXN0PgogICAgaW1wbGVtZW50cyBJbnQzMkxpc3QgewogIGZpbmFsIEludDMyTGlzdCBfbGlzdDsKICBVbm1vZGlmaWFibGVJbnQzMkxpc3RWaWV3KEludDMyTGlzdCBsaXN0KSA6IF9saXN0ID0gbGlzdDsKCiAgSW50MzJMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpID0+IEludDMyTGlzdChsZW5ndGgpOwp9CgovKioKICogVmlldyBvZiBhIFtVaW50NjRMaXN0XSB0aGF0IGRpc2FsbG93cyBtb2RpZmljYXRpb24uCiAqLwpjbGFzcyBVbm1vZGlmaWFibGVVaW50NjRMaXN0VmlldyBleHRlbmRzIFVubW9kaWZpYWJsZUxpc3RCYXNlPGludD4KICAgIHdpdGggX1VubW9kaWZpYWJsZUxpc3RNaXhpbjxpbnQsIFVpbnQ2NExpc3QsIFVpbnQ2NExpc3Q+CiAgICBpbXBsZW1lbnRzIFVpbnQ2NExpc3QgewogIGZpbmFsIFVpbnQ2NExpc3QgX2xpc3Q7CiAgVW5tb2RpZmlhYmxlVWludDY0TGlzdFZpZXcoVWludDY0TGlzdCBsaXN0KSA6IF9saXN0ID0gbGlzdDsKCiAgVWludDY0TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSA9PiBVaW50NjRMaXN0KGxlbmd0aCk7Cn0KCi8qKgogKiBWaWV3IG9mIGEgW0ludDY0TGlzdF0gdGhhdCBkaXNhbGxvd3MgbW9kaWZpY2F0aW9uLgogKi8KY2xhc3MgVW5tb2RpZmlhYmxlSW50NjRMaXN0VmlldyBleHRlbmRzIFVubW9kaWZpYWJsZUxpc3RCYXNlPGludD4KICAgIHdpdGggX1VubW9kaWZpYWJsZUxpc3RNaXhpbjxpbnQsIEludDY0TGlzdCwgSW50NjRMaXN0PgogICAgaW1wbGVtZW50cyBJbnQ2NExpc3QgewogIGZpbmFsIEludDY0TGlzdCBfbGlzdDsKICBVbm1vZGlmaWFibGVJbnQ2NExpc3RWaWV3KEludDY0TGlzdCBsaXN0KSA6IF9saXN0ID0gbGlzdDsKCiAgSW50NjRMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpID0+IEludDY0TGlzdChsZW5ndGgpOwp9CgovKioKICogVmlldyBvZiBhIFtJbnQzMng0TGlzdF0gdGhhdCBkaXNhbGxvd3MgbW9kaWZpY2F0aW9uLgogKi8KY2xhc3MgVW5tb2RpZmlhYmxlSW50MzJ4NExpc3RWaWV3IGV4dGVuZHMgVW5tb2RpZmlhYmxlTGlzdEJhc2U8SW50MzJ4ND4KICAgIHdpdGggX1VubW9kaWZpYWJsZUxpc3RNaXhpbjxJbnQzMng0LCBJbnQzMng0TGlzdCwgSW50MzJ4NExpc3Q+CiAgICBpbXBsZW1lbnRzIEludDMyeDRMaXN0IHsKICBmaW5hbCBJbnQzMng0TGlzdCBfbGlzdDsKICBVbm1vZGlmaWFibGVJbnQzMng0TGlzdFZpZXcoSW50MzJ4NExpc3QgbGlzdCkgOiBfbGlzdCA9IGxpc3Q7CgogIEludDMyeDRMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpID0+IEludDMyeDRMaXN0KGxlbmd0aCk7Cn0KCi8qKgogKiBWaWV3IG9mIGEgW0Zsb2F0MzJ4NExpc3RdIHRoYXQgZGlzYWxsb3dzIG1vZGlmaWNhdGlvbi4KICovCmNsYXNzIFVubW9kaWZpYWJsZUZsb2F0MzJ4NExpc3RWaWV3IGV4dGVuZHMgVW5tb2RpZmlhYmxlTGlzdEJhc2U8RmxvYXQzMng0PgogICAgd2l0aCBfVW5tb2RpZmlhYmxlTGlzdE1peGluPEZsb2F0MzJ4NCwgRmxvYXQzMng0TGlzdCwgRmxvYXQzMng0TGlzdD4KICAgIGltcGxlbWVudHMgRmxvYXQzMng0TGlzdCB7CiAgZmluYWwgRmxvYXQzMng0TGlzdCBfbGlzdDsKICBVbm1vZGlmaWFibGVGbG9hdDMyeDRMaXN0VmlldyhGbG9hdDMyeDRMaXN0IGxpc3QpIDogX2xpc3QgPSBsaXN0OwoKICBGbG9hdDMyeDRMaXN0IF9jcmVhdGVMaXN0KGludCBsZW5ndGgpID0+IEZsb2F0MzJ4NExpc3QobGVuZ3RoKTsKfQoKLyoqCiAqIFZpZXcgb2YgYSBbRmxvYXQ2NHgyTGlzdF0gdGhhdCBkaXNhbGxvd3MgbW9kaWZpY2F0aW9uLgogKi8KY2xhc3MgVW5tb2RpZmlhYmxlRmxvYXQ2NHgyTGlzdFZpZXcgZXh0ZW5kcyBVbm1vZGlmaWFibGVMaXN0QmFzZTxGbG9hdDY0eDI+CiAgICB3aXRoIF9Vbm1vZGlmaWFibGVMaXN0TWl4aW48RmxvYXQ2NHgyLCBGbG9hdDY0eDJMaXN0LCBGbG9hdDY0eDJMaXN0PgogICAgaW1wbGVtZW50cyBGbG9hdDY0eDJMaXN0IHsKICBmaW5hbCBGbG9hdDY0eDJMaXN0IF9saXN0OwogIFVubW9kaWZpYWJsZUZsb2F0NjR4Mkxpc3RWaWV3KEZsb2F0NjR4Mkxpc3QgbGlzdCkgOiBfbGlzdCA9IGxpc3Q7CgogIEZsb2F0NjR4Mkxpc3QgX2NyZWF0ZUxpc3QoaW50IGxlbmd0aCkgPT4gRmxvYXQ2NHgyTGlzdChsZW5ndGgpOwp9CgovKioKICogVmlldyBvZiBhIFtGbG9hdDMyTGlzdF0gdGhhdCBkaXNhbGxvd3MgbW9kaWZpY2F0aW9uLgogKi8KY2xhc3MgVW5tb2RpZmlhYmxlRmxvYXQzMkxpc3RWaWV3IGV4dGVuZHMgVW5tb2RpZmlhYmxlTGlzdEJhc2U8ZG91YmxlPgogICAgd2l0aCBfVW5tb2RpZmlhYmxlTGlzdE1peGluPGRvdWJsZSwgRmxvYXQzMkxpc3QsIEZsb2F0MzJMaXN0PgogICAgaW1wbGVtZW50cyBGbG9hdDMyTGlzdCB7CiAgZmluYWwgRmxvYXQzMkxpc3QgX2xpc3Q7CiAgVW5tb2RpZmlhYmxlRmxvYXQzMkxpc3RWaWV3KEZsb2F0MzJMaXN0IGxpc3QpIDogX2xpc3QgPSBsaXN0OwoKICBGbG9hdDMyTGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSA9PiBGbG9hdDMyTGlzdChsZW5ndGgpOwp9CgovKioKICogVmlldyBvZiBhIFtGbG9hdDY0TGlzdF0gdGhhdCBkaXNhbGxvd3MgbW9kaWZpY2F0aW9uLgogKi8KY2xhc3MgVW5tb2RpZmlhYmxlRmxvYXQ2NExpc3RWaWV3IGV4dGVuZHMgVW5tb2RpZmlhYmxlTGlzdEJhc2U8ZG91YmxlPgogICAgd2l0aCBfVW5tb2RpZmlhYmxlTGlzdE1peGluPGRvdWJsZSwgRmxvYXQ2NExpc3QsIEZsb2F0NjRMaXN0PgogICAgaW1wbGVtZW50cyBGbG9hdDY0TGlzdCB7CiAgZmluYWwgRmxvYXQ2NExpc3QgX2xpc3Q7CiAgVW5tb2RpZmlhYmxlRmxvYXQ2NExpc3RWaWV3KEZsb2F0NjRMaXN0IGxpc3QpIDogX2xpc3QgPSBsaXN0OwoKICBGbG9hdDY0TGlzdCBfY3JlYXRlTGlzdChpbnQgbGVuZ3RoKSA9PiBGbG9hdDY0TGlzdChsZW5ndGgpOwp9CoFXAE5OPAEZAQQnBDkaAT4BMAFATwE+TQFOLDwBQlEBQE8BQlEBQE8BQlEBQE8BRCc3AUQnNwFEJzcBSCk5AUgpOQE+TQIBBCUENRgBOgE8AT0BPgE+AUAqAUwWAUErAU0WAUAqAUwWAUErAU0WAUAqAUwWAUErAU0WAUUsAVEWAUUsAVEWAToBMAEwAUkBGCA8BAIBPBwPIQEiASwBOgEwATABSQEdASQ6JSs1EwQCAQQ2BEI7Gxk8AToCAQQ1BEE5Ghg6ATgCAQQ9BElJIiBKAUgCAQQ3BEM9HBo+ATwCAQQ2BEI7Gxk8AToCAQQ3BEM9HBo+ATwCAQQ2BEI7Gxk8AToCAQQ3BEM9HBo+ATwCAQQ2BEI7Gxk8AToCAQQ4BEhDHRtAAT4CAQQ6BExJHx1EAUICAQQ6BExJHx1EAUICAQQ4BEdCHRtAAT4CAQQ4BEdCHRtAAT4CASxkYXJ0OnR5cGVkX2RhdGEvdW5tb2RpZmlhYmxlX3R5cGVkX2RhdGEuZGFydDtvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvYmluL3Ztc2VydmljZS92bXNlcnZpY2VfaW8uZGFydJ1ULy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgdm1zZXJ2aWNlX2lvOwoKaW1wb3J0ICdkYXJ0OmFzeW5jJzsKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nOwppbXBvcnQgJ2RhcnQ6Y29udmVydCc7CmltcG9ydCAnZGFydDppbyc7CmltcG9ydCAnZGFydDppc29sYXRlJzsKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwppbXBvcnQgJ2RhcnQ6X3Ztc2VydmljZSc7CgpwYXJ0ICdsb2FkZXIuZGFydCc7CnBhcnQgJ3NlcnZlci5kYXJ0JzsKCi8vIFRoZSBUQ1AgaXAvcG9ydCB0aGF0IHRoZSBIVFRQIHNlcnZlciBsaXN0ZW5zIG9uLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmludCBfcG9ydDsKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpTdHJpbmcgX2lwOwovLyBTaG91bGQgdGhlIEhUVFAgc2VydmVyIGF1dG8gc3RhcnQ/CkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKYm9vbCBfYXV0b1N0YXJ0OwovLyBTaG91bGQgdGhlIEhUVFAgc2VydmVyIHJlcXVpcmUgYW4gYXV0aCBjb2RlPwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmJvb2wgX2F1dGhDb2Rlc0Rpc2FibGVkOwovLyBTaG91bGQgdGhlIEhUVFAgc2VydmVyIHJ1biBpbiBkZXZtb2RlPwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmJvb2wgX29yaWdpbkNoZWNrRGlzYWJsZWQ7CkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKYm9vbCBfaXNXaW5kb3dzID0gZmFsc2U7CkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKYm9vbCBfaXNGdWNoc2lhID0gZmFsc2U7CkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKdmFyIF9zaWduYWxXYXRjaDsKdmFyIF9zaWduYWxTdWJzY3JpcHRpb247CgovLyBIVFRQIHNlcnZlci4KU2VydmVyIHNlcnZlcjsKRnV0dXJlPFNlcnZlcj4gc2VydmVyRnV0dXJlOwoKX2xhenlTZXJ2ZXJCb290KCkgewogIGlmIChzZXJ2ZXIgIT0gbnVsbCkgewogICAgcmV0dXJuOwogIH0KICAvLyBMYXppbHkgY3JlYXRlIHNlcnZpY2UuCiAgdmFyIHNlcnZpY2UgPSBuZXcgVk1TZXJ2aWNlKCk7CiAgLy8gTGF6aWx5IGNyZWF0ZSBzZXJ2ZXIuCiAgc2VydmVyID0KICAgICAgbmV3IFNlcnZlcihzZXJ2aWNlLCBfaXAsIF9wb3J0LCBfb3JpZ2luQ2hlY2tEaXNhYmxlZCwgX2F1dGhDb2Rlc0Rpc2FibGVkKTsKfQoKRnV0dXJlIGNsZWFudXBDYWxsYmFjaygpIGFzeW5jIHsKICBzaHV0ZG93bkxvYWRlcnMoKTsKICAvLyBDYW5jZWwgdGhlIHNpZ3F1aXQgc3Vic2NyaXB0aW9uLgogIGlmIChfc2lnbmFsU3Vic2NyaXB0aW9uICE9IG51bGwpIHsKICAgIGF3YWl0IF9zaWduYWxTdWJzY3JpcHRpb24uY2FuY2VsKCk7CiAgICBfc2lnbmFsU3Vic2NyaXB0aW9uID0gbnVsbDsKICB9CiAgaWYgKHNlcnZlciAhPSBudWxsKSB7CiAgICB0cnkgewogICAgICBhd2FpdCBzZXJ2ZXIuY2xlYW51cCh0cnVlKTsKICAgIH0gY2F0Y2ggKGUsIHN0KSB7CiAgICAgIHByaW50KCJFcnJvciBpbiB2bS1zZXJ2aWNlIHNodXRkb3duOiAkZVxuJHN0XG4iKTsKICAgIH0KICB9CiAgaWYgKF9yZWdpc3RlclNpZ25hbEhhbmRsZXJUaW1lciAhPSBudWxsKSB7CiAgICBfcmVnaXN0ZXJTaWduYWxIYW5kbGVyVGltZXIuY2FuY2VsKCk7CiAgICBfcmVnaXN0ZXJTaWduYWxIYW5kbGVyVGltZXIgPSBudWxsOwogIH0KICAvLyBDYWxsIG91dCB0byBlbWJlZGRlcidzIHNodXRkb3duIGNhbGxiYWNrLgogIF9zaHV0ZG93bigpOwp9CgpGdXR1cmU8VXJpPiBjcmVhdGVUZW1wRGlyQ2FsbGJhY2soU3RyaW5nIGJhc2UpIGFzeW5jIHsKICBEaXJlY3RvcnkgdGVtcCA9IGF3YWl0IERpcmVjdG9yeS5zeXN0ZW1UZW1wLmNyZWF0ZVRlbXAoYmFzZSk7CiAgLy8gVW5kZXJuZWF0aCB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSwgY3JlYXRlIGEgZGlyZWN0b3J5IHdpdGggdGhlCiAgLy8gc2FtZSBuYW1lIGFzIHRoZSBEZXZGUyBuYW1lIFtiYXNlXS4KICB2YXIgZnNVcmkgPSB0ZW1wLnVyaS5yZXNvbHZlVXJpKG5ldyBVcmkuZGlyZWN0b3J5KGJhc2UpKTsKICBhd2FpdCBuZXcgRGlyZWN0b3J5LmZyb21VcmkoZnNVcmkpLmNyZWF0ZSgpOwogIHJldHVybiBmc1VyaTsKfQoKRnV0dXJlIGRlbGV0ZURpckNhbGxiYWNrKFVyaSBwYXRoKSBhc3luYyB7CiAgRGlyZWN0b3J5IGRpciA9IG5ldyBEaXJlY3RvcnkuZnJvbVVyaShwYXRoKTsKICBhd2FpdCBkaXIuZGVsZXRlKHJlY3Vyc2l2ZTogdHJ1ZSk7Cn0KCmNsYXNzIFBlbmRpbmdXcml0ZSB7CiAgUGVuZGluZ1dyaXRlKHRoaXMudXJpLCB0aGlzLmJ5dGVzKTsKICBmaW5hbCBDb21wbGV0ZXIgY29tcGxldGVyID0gbmV3IENvbXBsZXRlcigpOwogIGZpbmFsIFVyaSB1cmk7CiAgZmluYWwgTGlzdDxpbnQ+IGJ5dGVzOwoKICBGdXR1cmUgd3JpdGUoKSBhc3luYyB7CiAgICB2YXIgZmlsZSA9IG5ldyBGaWxlLmZyb21VcmkodXJpKTsKICAgIHZhciBwYXJlbnRfZGlyZWN0b3J5ID0gZmlsZS5wYXJlbnQ7CiAgICBhd2FpdCBwYXJlbnRfZGlyZWN0b3J5LmNyZWF0ZShyZWN1cnNpdmU6IHRydWUpOwogICAgaWYgKGF3YWl0IGZpbGUuZXhpc3RzKCkpIHsKICAgICAgYXdhaXQgZmlsZS5kZWxldGUoKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBhd2FpdCBmaWxlLndyaXRlQXNCeXRlcyhieXRlcyk7CiAgICBjb21wbGV0ZXIuY29tcGxldGUobnVsbCk7CiAgICBXcml0ZUxpbWl0ZXIuX3dyaXRlQ29tcGxldGVkKCk7CiAgfQp9CgpjbGFzcyBXcml0ZUxpbWl0ZXIgewogIHN0YXRpYyBmaW5hbCBMaXN0PFBlbmRpbmdXcml0ZT4gcGVuZGluZ1dyaXRlcyA9IG5ldyBMaXN0PFBlbmRpbmdXcml0ZT4oKTsKCiAgLy8gbm9uLXJvb3RlZCBBbmRyb2lkIGRldmljZXMgaGF2ZSBhIHZlcnkgbG93IGxpbWl0IGZvciB0aGUgbnVtYmVyIG9mCiAgLy8gb3BlbiBmaWxlcy4gQXJ0aWZpY2lhbGx5IGNhcCBvdXJzZWx2ZXMgdG8gMTYuCiAgc3RhdGljIGNvbnN0IGtNYXhPcGVuV3JpdGVzID0gMTY7CiAgc3RhdGljIGludCBvcGVuV3JpdGVzID0gMDsKCiAgc3RhdGljIEZ1dHVyZSBzY2hlZHVsZVdyaXRlKFVyaSBwYXRoLCBMaXN0PGludD4gYnl0ZXMpIGFzeW5jIHsKICAgIC8vIENyZWF0ZSBhIG5ldyBwZW5kaW5nIHdyaXRlLgogICAgUGVuZGluZ1dyaXRlIHB3ID0gbmV3IFBlbmRpbmdXcml0ZShwYXRoLCBieXRlcyk7CiAgICBwZW5kaW5nV3JpdGVzLmFkZChwdyk7CiAgICBfbWF5YmVXcml0ZUZpbGVzKCk7CiAgICByZXR1cm4gcHcuY29tcGxldGVyLmZ1dHVyZTsKICB9CgogIHN0YXRpYyBfbWF5YmVXcml0ZUZpbGVzKCkgewogICAgd2hpbGUgKG9wZW5Xcml0ZXMgPCBrTWF4T3BlbldyaXRlcykgewogICAgICBpZiAocGVuZGluZ1dyaXRlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgUGVuZGluZ1dyaXRlIHB3ID0gcGVuZGluZ1dyaXRlcy5yZW1vdmVMYXN0KCk7CiAgICAgICAgcHcud3JpdGUoKTsKICAgICAgICBvcGVuV3JpdGVzKys7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICB9CgogIHN0YXRpYyBfd3JpdGVDb21wbGV0ZWQoKSB7CiAgICBvcGVuV3JpdGVzLS07CiAgICBhc3NlcnQob3BlbldyaXRlcyA+PSAwKTsKICAgIF9tYXliZVdyaXRlRmlsZXMoKTsKICB9Cn0KCkZ1dHVyZSB3cml0ZUZpbGVDYWxsYmFjayhVcmkgcGF0aCwgTGlzdDxpbnQ+IGJ5dGVzKSBhc3luYyB7CiAgcmV0dXJuIFdyaXRlTGltaXRlci5zY2hlZHVsZVdyaXRlKHBhdGgsIGJ5dGVzKTsKfQoKRnV0dXJlIHdyaXRlU3RyZWFtRmlsZUNhbGxiYWNrKFVyaSBwYXRoLCBTdHJlYW08TGlzdDxpbnQ+PiBieXRlcykgYXN5bmMgewogIHZhciBmaWxlID0gbmV3IEZpbGUuZnJvbVVyaShwYXRoKTsKICB2YXIgcGFyZW50X2RpcmVjdG9yeSA9IGZpbGUucGFyZW50OwogIGF3YWl0IHBhcmVudF9kaXJlY3RvcnkuY3JlYXRlKHJlY3Vyc2l2ZTogdHJ1ZSk7CiAgaWYgKGF3YWl0IGZpbGUuZXhpc3RzKCkpIHsKICAgIGF3YWl0IGZpbGUuZGVsZXRlKCk7CiAgfQogIElPU2luayBzaW5rID0gYXdhaXQgZmlsZS5vcGVuV3JpdGUoKTsKICBhd2FpdCBzaW5rLmFkZFN0cmVhbShieXRlcyk7CiAgYXdhaXQgc2luay5jbG9zZSgpOwp9CgpGdXR1cmU8TGlzdDxpbnQ+PiByZWFkRmlsZUNhbGxiYWNrKFVyaSBwYXRoKSBhc3luYyB7CiAgdmFyIGZpbGUgPSBuZXcgRmlsZS5mcm9tVXJpKHBhdGgpOwogIHJldHVybiBhd2FpdCBmaWxlLnJlYWRBc0J5dGVzKCk7Cn0KCkZ1dHVyZTxMaXN0PE1hcDxTdHJpbmcsIGR5bmFtaWM+Pj4gbGlzdEZpbGVzQ2FsbGJhY2soVXJpIGRpclBhdGgpIGFzeW5jIHsKICB2YXIgZGlyID0gbmV3IERpcmVjdG9yeS5mcm9tVXJpKGRpclBhdGgpOwogIHZhciBkaXJQYXRoU3RyID0gZGlyUGF0aC5wYXRoOwogIHZhciBzdHJlYW0gPSBkaXIubGlzdChyZWN1cnNpdmU6IHRydWUpOwogIHZhciByZXN1bHQgPSA8TWFwPFN0cmluZywgZHluYW1pYz4+W107CiAgYXdhaXQgZm9yICh2YXIgZmlsZUVudGl0eSBpbiBzdHJlYW0pIHsKICAgIHZhciBmaWxlUGF0aCA9IG5ldyBVcmkuZmlsZShmaWxlRW50aXR5LnBhdGgpLnBhdGg7CiAgICB2YXIgc3RhdCA9IGF3YWl0IGZpbGVFbnRpdHkuc3RhdCgpOwogICAgaWYgKHN0YXQudHlwZSA9PSBGaWxlU3lzdGVtRW50aXR5VHlwZS5GSUxFICYmCiAgICAgICAgZmlsZVBhdGguc3RhcnRzV2l0aChkaXJQYXRoU3RyKSkgewogICAgICB2YXIgbWFwID0gPFN0cmluZywgZHluYW1pYz57fTsKICAgICAgbWFwWyduYW1lJ10gPSAnLycgKyBmaWxlUGF0aC5zdWJzdHJpbmcoZGlyUGF0aFN0ci5sZW5ndGgpOwogICAgICBtYXBbJ3NpemUnXSA9IHN0YXQuc2l6ZTsKICAgICAgbWFwWydtb2RpZmllZCddID0gc3RhdC5tb2RpZmllZC5taWxsaXNlY29uZHNTaW5jZUVwb2NoOwogICAgICByZXN1bHQuYWRkKG1hcCk7CiAgICB9CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KCkZ1dHVyZTxVcmk+IHNlcnZlckluZm9ybWF0aW9uQ2FsbGJhY2soKSBhc3luYyB7CiAgX2xhenlTZXJ2ZXJCb290KCk7CiAgcmV0dXJuIHNlcnZlci5zZXJ2ZXJBZGRyZXNzOwp9CgpGdXR1cmU8VXJpPiB3ZWJTZXJ2ZXJDb250cm9sQ2FsbGJhY2soYm9vbCBlbmFibGUpIGFzeW5jIHsKICBfbGF6eVNlcnZlckJvb3QoKTsKICBpZiAoc2VydmVyLnJ1bm5pbmcgPT0gZW5hYmxlKSB7CiAgICAvLyBObyBjaGFuZ2UuCiAgICByZXR1cm4gc2VydmVyLnNlcnZlckFkZHJlc3M7CiAgfQoKICBpZiAoZW5hYmxlKSB7CiAgICBhd2FpdCBzZXJ2ZXIuc3RhcnR1cCgpOwogICAgcmV0dXJuIHNlcnZlci5zZXJ2ZXJBZGRyZXNzOwogIH0gZWxzZSB7CiAgICBhd2FpdCBzZXJ2ZXIuc2h1dGRvd24odHJ1ZSk7CiAgICByZXR1cm4gc2VydmVyLnNlcnZlckFkZHJlc3M7CiAgfQp9CgpOdWxsIF9jbGVhckZ1dHVyZShfKSB7CiAgc2VydmVyRnV0dXJlID0gbnVsbDsKfQoKX29uU2lnbmFsKFByb2Nlc3NTaWduYWwgc2lnbmFsKSB7CiAgaWYgKHNlcnZlckZ1dHVyZSAhPSBudWxsKSB7CiAgICAvLyBTdGlsbCB3YWl0aW5nLgogICAgcmV0dXJuOwogIH0KICBfbGF6eVNlcnZlckJvb3QoKTsKICAvLyBUb2dnbGUgSFRUUCBzZXJ2ZXIuCiAgaWYgKHNlcnZlci5ydW5uaW5nKSB7CiAgICBzZXJ2ZXJGdXR1cmUgPSBzZXJ2ZXIuc2h1dGRvd24odHJ1ZSkudGhlbihfY2xlYXJGdXR1cmUpOwogIH0gZWxzZSB7CiAgICBzZXJ2ZXJGdXR1cmUgPSBzZXJ2ZXIuc3RhcnR1cCgpLnRoZW4oX2NsZWFyRnV0dXJlKTsKICB9Cn0KClRpbWVyIF9yZWdpc3RlclNpZ25hbEhhbmRsZXJUaW1lcjsKCl9yZWdpc3RlclNpZ25hbEhhbmRsZXIoKSB7CiAgX3JlZ2lzdGVyU2lnbmFsSGFuZGxlclRpbWVyID0gbnVsbDsKICBpZiAoX3NpZ25hbFdhdGNoID09IG51bGwpIHsKICAgIC8vIENhbm5vdCByZWdpc3RlciBmb3Igc2lnbmFscy4KICAgIHJldHVybjsKICB9CiAgaWYgKF9pc1dpbmRvd3MgfHwgX2lzRnVjaHNpYSkgewogICAgLy8gQ2Fubm90IHJlZ2lzdGVyIGZvciBzaWduYWxzIG9uIFdpbmRvd3Mgb3IgRnVjaHNpYS4KICAgIHJldHVybjsKICB9CiAgX3NpZ25hbFN1YnNjcmlwdGlvbiA9IF9zaWduYWxXYXRjaChQcm9jZXNzU2lnbmFsLlNJR1FVSVQpLmxpc3Rlbihfb25TaWduYWwpOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICFjb25zdCBib29sLmZyb21FbnZpcm9ubWVudCgiZGFydC52bS5wcm9kdWN0IikpCm1haW4oKSB7CiAgLy8gU2V0IGVtYmVkZGVyIGhvb2tzLgogIFZNU2VydmljZUVtYmVkZGVySG9va3MuY2xlYW51cCA9IGNsZWFudXBDYWxsYmFjazsKICBWTVNlcnZpY2VFbWJlZGRlckhvb2tzLmNyZWF0ZVRlbXBEaXIgPSBjcmVhdGVUZW1wRGlyQ2FsbGJhY2s7CiAgVk1TZXJ2aWNlRW1iZWRkZXJIb29rcy5kZWxldGVEaXIgPSBkZWxldGVEaXJDYWxsYmFjazsKICBWTVNlcnZpY2VFbWJlZGRlckhvb2tzLndyaXRlRmlsZSA9IHdyaXRlRmlsZUNhbGxiYWNrOwogIFZNU2VydmljZUVtYmVkZGVySG9va3Mud3JpdGVTdHJlYW1GaWxlID0gd3JpdGVTdHJlYW1GaWxlQ2FsbGJhY2s7CiAgVk1TZXJ2aWNlRW1iZWRkZXJIb29rcy5yZWFkRmlsZSA9IHJlYWRGaWxlQ2FsbGJhY2s7CiAgVk1TZXJ2aWNlRW1iZWRkZXJIb29rcy5saXN0RmlsZXMgPSBsaXN0RmlsZXNDYWxsYmFjazsKICBWTVNlcnZpY2VFbWJlZGRlckhvb2tzLnNlcnZlckluZm9ybWF0aW9uID0gc2VydmVySW5mb3JtYXRpb25DYWxsYmFjazsKICBWTVNlcnZpY2VFbWJlZGRlckhvb2tzLndlYlNlcnZlckNvbnRyb2wgPSB3ZWJTZXJ2ZXJDb250cm9sQ2FsbGJhY2s7CiAgLy8gQWx3YXlzIGluc3RhbnRpYXRlIHRoZSB2bXNlcnZpY2Ugb2JqZWN0IHNvIHRoYXQgdGhlIGV4aXQgbWVzc2FnZQogIC8vIGNhbiBiZSBkZWxpdmVyZWQgYW5kIHdhaXRpbmcgbG9hZGVycyBjYW4gYmUgY2FuY2VsbGVkLgogIG5ldyBWTVNlcnZpY2UoKTsKICBpZiAoX2F1dG9TdGFydCkgewogICAgX2xhenlTZXJ2ZXJCb290KCk7CiAgICBzZXJ2ZXIuc3RhcnR1cCgpOwogICAgLy8gSXQncyBqdXN0IGhlcmUgdG8gcHVzaCBhbiBldmVudCBvbiB0aGUgZXZlbnQgbG9vcCBzbyB0aGF0IHdlIGludm9rZSB0aGUKICAgIC8vIHNjaGVkdWxlZCBtaWNyb3Rhc2tzLgogICAgVGltZXIucnVuKCgpIHt9KTsKICB9CiAgc2NyaXB0TG9hZFBvcnQuaGFuZGxlciA9IF9wcm9jZXNzTG9hZFJlcXVlc3Q7CiAgLy8gUmVnaXN0ZXIgc2lnbmFsIGhhbmRsZXIgYWZ0ZXIgYSBzbWFsbCBkZWxheSB0byBhdm9pZCBzdGFsbGluZyBtYWluCiAgLy8gaXNvbGF0ZSBzdGFydHVwLgogIF9yZWdpc3RlclNpZ25hbEhhbmRsZXJUaW1lciA9IG5ldyBUaW1lcihzaG9ydERlbGF5LCBfcmVnaXN0ZXJTaWduYWxIYW5kbGVyKTsKICByZXR1cm4gc2NyaXB0TG9hZFBvcnQ7Cn0KCl9zaHV0ZG93bigpIG5hdGl2ZSAiVk1TZXJ2aWNlSU9fU2h1dGRvd24iOwqBDwBOTjwBFgEVGhcSFxoaARQUATQaCxoMJhoRMBoZKhobGhkaGRoSGQEQDx0BFBgMBBwhGwtRAgEhFSYlKCAEGAoiFjgGBC0qKAQvDwIBN0BFKTwvEAIBKy8lAgEVJi8RGQEZJig0HxsGMR4kBAIBFUwBSDMkHQFBIzUbGCAEAR4qJjYUFg8PCAYEAR0SHRgEAgE8MgIBSiUmMh0ZBCgfFgIBNSUjAgFKLCEqKSk3KDIrJUEfPhcGBBECATAVHwIBOhUiEiEEARAcIQshIQQCARcXAgEiHhYMBBUZGD0LOAQCASMBGyYeJAwEIjoMBE8CAUoJGTRAODhENjhIRkY8ExQXFk8dFgQwSBZPGQIBKwERZGFydDp2bXNlcnZpY2VfaW81b3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2Jpbi92bXNlcnZpY2UvbG9hZGVyLmRhcnTAAIjrLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2Ygdm1zZXJ2aWNlX2lvOwoKX3Nhbml0aXplV2luZG93c1BhdGgocGF0aCkgewogIC8vIEZvciBXaW5kb3dzIHdlIG5lZWQgdG8gbWFzc2FnZSB0aGUgcGF0aHMgYSBiaXQgYWNjb3JkaW5nIHRvCiAgLy8gaHR0cDovL2Jsb2dzLm1zZG4uY29tL2IvaWUvYXJjaGl2ZS8yMDA2LzEyLzA2L2ZpbGUtdXJpcy1pbi13aW5kb3dzLmFzcHgKICAvLwogIC8vIENvbnZlcnQKICAvLyBDOlxvbmVcdHdvXHRocmVlCiAgLy8gdG8KICAvLyAvQzovb25lL3R3by90aHJlZQoKICBpZiAoX2lzV2luZG93cyA9PSBmYWxzZSkgewogICAgLy8gRG8gbm90aGluZyB3aGVuIG5vdCBydW5uaW5nIFdpbmRvd3MuCiAgICByZXR1cm4gcGF0aDsKICB9CgogIHZhciBmaXhlZFBhdGggPSAiJHtwYXRoLnJlcGxhY2VBbGwoJ1xcJywgJy8nKX0iOwoKICBpZiAoKHBhdGgubGVuZ3RoID4gMikgJiYgKHBhdGhbMV0gPT0gJzonKSkgewogICAgLy8gUGF0aCBiZWdpbnMgd2l0aCBhIGRyaXZlIGxldHRlci4KICAgIHJldHVybiAnLyRmaXhlZFBhdGgnOwogIH0KCiAgcmV0dXJuIGZpeGVkUGF0aDsKfQoKX3RyaW1XaW5kb3dzUGF0aChwYXRoKSB7CiAgLy8gQ29udmVydCAvWDovIHRvIFg6Ly4KICBpZiAoX2lzV2luZG93cyA9PSBmYWxzZSkgewogICAgLy8gRG8gbm90aGluZyB3aGVuIG5vdCBydW5uaW5nIFdpbmRvd3MuCiAgICByZXR1cm4gcGF0aDsKICB9CiAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoJy8nKSB8fCAocGF0aC5sZW5ndGggPCAzKSkgewogICAgcmV0dXJuIHBhdGg7CiAgfQogIC8vIE1hdGNoICcvPzonLgogIGlmICgocGF0aFswXSA9PSAnLycpICYmIChwYXRoWzJdID09ICc6JykpIHsKICAgIC8vIFJlbW92ZSBsZWFkaW5nICcvJy4KICAgIHJldHVybiBwYXRoLnN1YnN0cmluZygxKTsKICB9CiAgcmV0dXJuIHBhdGg7Cn0KCi8vIEVuc3VyZSB3ZSBoYXZlIGEgdHJhaWxpbmcgc2xhc2ggY2hhcmFjdGVyLgpfZW5mb3JjZVRyYWlsaW5nU2xhc2godXJpKSB7CiAgaWYgKCF1cmkuZW5kc1dpdGgoJy8nKSkgewogICAgcmV0dXJuICckdXJpLyc7CiAgfQogIHJldHVybiB1cmk7Cn0KCmNsYXNzIEZpbGVSZXF1ZXN0IHsKICBmaW5hbCBTZW5kUG9ydCBzcDsKICBmaW5hbCBpbnQgdGFnOwogIGZpbmFsIFVyaSB1cmk7CiAgZmluYWwgVXJpIHJlc29sdmVkVXJpOwogIGZpbmFsIFN0cmluZyBsaWJyYXJ5VXJsOwogIEZpbGVSZXF1ZXN0KHRoaXMuc3AsIHRoaXMudGFnLCB0aGlzLnVyaSwgdGhpcy5yZXNvbHZlZFVyaSwgdGhpcy5saWJyYXJ5VXJsKTsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpib29sIF90cmFjZUxvYWRpbmcgPSBmYWxzZTsKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpib29sIF9kZXRlcm1pbmlzdGljID0gZmFsc2U7CgovLyBTdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGlzb2xhdGUgdGhhdCBpcyB1c2VkIGZvciBsb2FkaW5nLgpjbGFzcyBJc29sYXRlTG9hZGVyU3RhdGUgZXh0ZW5kcyBJc29sYXRlRW1iZWRkZXJEYXRhIHsKICBJc29sYXRlTG9hZGVyU3RhdGUodGhpcy5pc29sYXRlSWQpOwoKICBmaW5hbCBpbnQgaXNvbGF0ZUlkOwogIGJvb2wgX2RlYWQgPSBmYWxzZTsKICBTZW5kUG9ydCBzcDsKCiAgdm9pZCBpbml0KFN0cmluZyBwYWNrYWdlUm9vdEZsYWcsIFN0cmluZyBwYWNrYWdlc0NvbmZpZ0ZsYWcsCiAgICAgIFN0cmluZyB3b3JraW5nRGlyZWN0b3J5LCBTdHJpbmcgcm9vdFNjcmlwdCkgewogICAgaWYgKF9kZWFkKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIF93b3JraW5nRGlyZWN0b3J5IG11c3QgYmUgc2V0IGZpcnN0LgogICAgX3dvcmtpbmdEaXJlY3RvcnkgPSBuZXcgVXJpLmRpcmVjdG9yeSh3b3JraW5nRGlyZWN0b3J5KTsKICAgIGlmIChyb290U2NyaXB0ICE9IG51bGwpIHsKICAgICAgX3Jvb3RTY3JpcHQgPSBVcmkucGFyc2Uocm9vdFNjcmlwdCk7CiAgICB9CiAgICAvLyBJZiB0aGUgLS1wYWNrYWdlLXJvb3QgZmxhZyB3YXMgcGFzc2VkLgogICAgaWYgKHBhY2thZ2VSb290RmxhZyAhPSBudWxsKSB7CiAgICAgIF9zZXRQYWNrYWdlUm9vdChwYWNrYWdlUm9vdEZsYWcpOwogICAgfQogICAgLy8gSWYgdGhlIC0tcGFja2FnZXMgZmxhZyB3YXMgcGFzc2VkLgogICAgaWYgKHBhY2thZ2VzQ29uZmlnRmxhZyAhPSBudWxsKSB7CiAgICAgIF9zZXRQYWNrYWdlc0NvbmZpZyhwYWNrYWdlc0NvbmZpZ0ZsYWcpOwogICAgfQogIH0KCiAgdm9pZCB1cGRhdGVQYWNrYWdlTWFwKFN0cmluZyBwYWNrYWdlc0NvbmZpZ0ZsYWcpIHsKICAgIGlmIChwYWNrYWdlc0NvbmZpZ0ZsYWcgPT0gbnVsbCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBfcGFja2FnZU1hcCA9IG51bGw7CiAgICBfc2V0UGFja2FnZXNDb25maWcocGFja2FnZXNDb25maWdGbGFnKTsKICB9CgogIHZvaWQgY2xlYW51cCgpIHsKICAgIF9kZWFkID0gdHJ1ZTsKICAgIGlmIChfcGFja2FnZXNQb3J0ICE9IG51bGwpIHsKICAgICAgX3BhY2thZ2VzUG9ydC5jbG9zZSgpOwogICAgICBfcGFja2FnZXNQb3J0ID0gbnVsbDsKICAgIH0KICB9CgogIC8vIFRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVuIHRoZSBlbWJlZGRlciBzdGFydGVkLgogIFVyaSBfd29ya2luZ0RpcmVjdG9yeTsKCiAgLy8gVGhlIHJvb3Qgc2NyaXB0J3MgdXJpLgogIFVyaSBfcm9vdFNjcmlwdDsKCiAgLy8gUGFja2FnZXMgYXJlIGVpdGhlciByZXNvbHZlZCBsb29raW5nIHVwIGluIGEgbWFwIG9yIHJlc29sdmVkIGZyb20gd2l0aGluIGEKICAvLyBwYWNrYWdlIHJvb3QuCiAgYm9vbCBnZXQgX3BhY2thZ2VzUmVhZHkgPT4KICAgICAgKF9wYWNrYWdlUm9vdCAhPSBudWxsKSB8fAogICAgICAoX3BhY2thZ2VNYXAgIT0gbnVsbCkgfHwKICAgICAgKF9wYWNrYWdlRXJyb3IgIT0gbnVsbCk7CgogIC8vIEVycm9yIHN0cmluZyBzZXQgaWYgdGhlcmUgd2FzIGFuIGVycm9yIHJlc29sdmluZyBwYWNrYWdlIGNvbmZpZ3VyYXRpb24uCiAgLy8gRm9yIGV4YW1wbGUgbm90IGZpbmRpbmcgYSAucGFja2FnZXMgZmlsZSBvciBwYWNrYWdlcy8gZGlyZWN0b3J5LCBtYWxmb3JtZWQKICAvLyAucGFja2FnZXMgZmlsZSBvciBhbnkgb3RoZXIgcmVsYXRlZCBlcnJvci4KICBTdHJpbmcgX3BhY2thZ2VFcnJvciA9IG51bGw7CgogIC8vIFRoZSBkaXJlY3RvcnkgdG8gbG9vayBpbiB0byByZXNvbHZlICJwYWNrYWdlOiIgc2NoZW1lIFVSSXMuIEJ5IGRlZmF1bHQgaXQKICAvLyBpcyB0aGUgJ3BhY2thZ2VzJyBkaXJlY3RvcnkgcmlnaHQgbmV4dCB0byB0aGUgc2NyaXB0LgogIFVyaSBfcGFja2FnZVJvb3QgPSBudWxsOwoKICAvLyBUaGUgbWFwIGRlc2NyaWJpbmcgaG93IGNlcnRhaW4gcGFja2FnZSBuYW1lcyBhcmUgbWFwcGVkIHRvIFVyaXMuCiAgVXJpIF9wYWNrYWdlQ29uZmlnID0gbnVsbDsKICBNYXA8U3RyaW5nLCBVcmk+IF9wYWNrYWdlTWFwID0gbnVsbDsKCiAgLy8gV2UgaXNzdWUgb25seSAxNiBjb25jdXJyZW50IGNhbGxzIHRvIEZpbGUucmVhZEFzQnl0ZXMoKSB0byBzdGF5IHdpdGhpbgogIC8vIHBsYXRmb3JtLXNwZWNpZmljIHJlc291cmNlIGxpbWl0cyAoZS5nLiBtYXggb3BlbiBmaWxlcykuIFRoZSByZXN0IGdvIG9uCiAgLy8gX2ZpbGVSZXF1ZXN0UXVldWUgYW5kIGFyZSBwcm9jZXNzZWQgd2hlbiB3ZSBjYW4gc2FmZWx5IGlzc3VlIHRoZW0uCiAgc3RhdGljIGZpbmFsIGludCBfbWF4RmlsZVJlcXVlc3RzID0gX2RldGVybWluaXN0aWMgPyAxIDogMTY7CiAgaW50IGN1cnJlbnRGaWxlUmVxdWVzdHMgPSAwOwogIGZpbmFsIExpc3Q8RmlsZVJlcXVlc3Q+IF9maWxlUmVxdWVzdFF1ZXVlID0gbmV3IExpc3Q8RmlsZVJlcXVlc3Q+KCk7CgogIGJvb2wgZ2V0IHNob3VsZElzc3VlRmlsZVJlcXVlc3QgPT4gY3VycmVudEZpbGVSZXF1ZXN0cyA8IF9tYXhGaWxlUmVxdWVzdHM7CiAgdm9pZCBlbnF1ZXVlRmlsZVJlcXVlc3QoRmlsZVJlcXVlc3QgZnIpIHsKICAgIF9maWxlUmVxdWVzdFF1ZXVlLmFkZChmcik7CiAgfQoKICBGaWxlUmVxdWVzdCBkZXF1ZXVlRmlsZVJlcXVlc3QoKSB7CiAgICBpZiAoX2ZpbGVSZXF1ZXN0UXVldWUubGVuZ3RoID09IDApIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gX2ZpbGVSZXF1ZXN0UXVldWUucmVtb3ZlQXQoMCk7CiAgfQoKICBfc2V0UGFja2FnZVJvb3QoU3RyaW5nIHBhY2thZ2VSb290KSB7CiAgICBwYWNrYWdlUm9vdCA9IF9zYW5pdGl6ZVdpbmRvd3NQYXRoKHBhY2thZ2VSb290KTsKICAgIGlmIChwYWNrYWdlUm9vdC5zdGFydHNXaXRoKCdmaWxlOicpIHx8CiAgICAgICAgcGFja2FnZVJvb3Quc3RhcnRzV2l0aCgnaHR0cDonKSB8fAogICAgICAgIHBhY2thZ2VSb290LnN0YXJ0c1dpdGgoJ2h0dHBzOicpKSB7CiAgICAgIHBhY2thZ2VSb290ID0gX2VuZm9yY2VUcmFpbGluZ1NsYXNoKHBhY2thZ2VSb290KTsKICAgICAgX3BhY2thZ2VSb290ID0gX3dvcmtpbmdEaXJlY3RvcnkucmVzb2x2ZShwYWNrYWdlUm9vdCk7CiAgICB9IGVsc2UgewogICAgICBwYWNrYWdlUm9vdCA9IF9zYW5pdGl6ZVdpbmRvd3NQYXRoKHBhY2thZ2VSb290KTsKICAgICAgcGFja2FnZVJvb3QgPSBfdHJpbVdpbmRvd3NQYXRoKHBhY2thZ2VSb290KTsKICAgICAgX3BhY2thZ2VSb290ID0KICAgICAgICAgIF93b3JraW5nRGlyZWN0b3J5LnJlc29sdmVVcmkobmV3IFVyaS5kaXJlY3RvcnkocGFja2FnZVJvb3QpKTsKICAgIH0KICB9CgogIF9zZXRQYWNrYWdlc0NvbmZpZyhTdHJpbmcgcGFja2FnZXNQYXJhbSkgewogICAgdmFyIHBhY2thZ2VzTmFtZSA9IF9zYW5pdGl6ZVdpbmRvd3NQYXRoKHBhY2thZ2VzUGFyYW0pOwogICAgdmFyIHBhY2thZ2VzVXJpID0gVXJpLnBhcnNlKHBhY2thZ2VzTmFtZSk7CiAgICBpZiAocGFja2FnZXNVcmkuc2NoZW1lID09ICcnKSB7CiAgICAgIC8vIFNjcmlwdCBkb2VzIG5vdCBoYXZlIGEgc2NoZW1lLCBhc3N1bWUgdGhhdCBpdCBpcyBhIHBhdGgsCiAgICAgIC8vIHJlc29sdmUgaXQgYWdhaW5zdCB0aGUgd29ya2luZyBkaXJlY3RvcnkuCiAgICAgIHBhY2thZ2VzVXJpID0gX3dvcmtpbmdEaXJlY3RvcnkucmVzb2x2ZVVyaShwYWNrYWdlc1VyaSk7CiAgICB9CiAgICBfcmVxdWVzdFBhY2thZ2VzTWFwKHBhY2thZ2VzVXJpKTsKICAgIF9wZW5kaW5nUGFja2FnZUxvYWRzLmFkZCgoKSB7CiAgICAgIC8vIER1bW15IGFjdGlvbi4KICAgIH0pOwogIH0KCiAgLy8gSGFuZGxpbmcgb2YgYWNjZXNzIHRvIHRoZSBwYWNrYWdlIHJvb3Qgb3IgcGFja2FnZSBtYXAgZnJvbSB1c2VyIGNvZGUuCiAgX3RyaWdnZXJQYWNrYWdlUmVzb2x1dGlvbihhY3Rpb24pIHsKICAgIGlmIChfcGFja2FnZXNSZWFkeSkgewogICAgICAvLyBQYWNrYWdlcyBhcmUgcmVhZHkuIEV4ZWN1dGUgdGhlIGFjdGlvbiBub3cuCiAgICAgIGFjdGlvbigpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKF9wZW5kaW5nUGFja2FnZUxvYWRzLmlzRW1wdHkpIHsKICAgICAgICAvLyBQYWNrYWdlIHJlc29sdXRpb24gaGFzIG5vdCBiZWVuIHNldHVwIHlldCwgYW5kIHRoaXMgaXMgdGhlIGZpcnN0CiAgICAgICAgLy8gcmVxdWVzdCBmb3IgcGFja2FnZSByZXNvbHV0aW9uICYgbG9hZGluZy4KICAgICAgICBfcmVxdWVzdFBhY2thZ2VzTWFwKCk7CiAgICAgIH0KICAgICAgLy8gUmVnaXN0ZXIgdGhlIGFjdGlvbiBmb3Igd2hlbiB0aGUgcGFja2FnZSByZXNvbHV0aW9uIGlzIHJlYWR5LgogICAgICBfcGVuZGluZ1BhY2thZ2VMb2Fkcy5hZGQoYWN0aW9uKTsKICAgIH0KICB9CgogIC8vIEEgbGlzdCBvZiBjYWxsYmFja3Mgd2hpY2ggc2hvdWxkIGJlIGludm9rZWQgYWZ0ZXIgdGhlIHBhY2thZ2UgbWFwIGhhcyBiZWVuCiAgLy8gbG9hZGVkLgogIExpc3Q8RnVuY3Rpb24+IF9wZW5kaW5nUGFja2FnZUxvYWRzID0gW107CgogIC8vIEdpdmVuIGEgdXJpIHdpdGggYSAncGFja2FnZScgc2NoZW1lLCByZXR1cm4gYSBVcmkgdGhhdCBpcyBwcmVmaXhlZCB3aXRoCiAgLy8gdGhlIHBhY2thZ2Ugcm9vdCBvciByZXNvbHZlZCByZWxhdGl2ZSB0byB0aGUgcGFja2FnZSBjb25maWd1cmF0aW9uLgogIFVyaSBfcmVzb2x2ZVBhY2thZ2VVcmkoVXJpIHVyaSkgewogICAgYXNzZXJ0KHVyaS5zY2hlbWUgPT0gInBhY2thZ2UiKTsKICAgIGFzc2VydChfcGFja2FnZXNSZWFkeSk7CgogICAgaWYgKHVyaS5ob3N0LmlzTm90RW1wdHkpIHsKICAgICAgdmFyIHBhdGggPSAnJHt1cmkuaG9zdH0ke3VyaS5wYXRofSc7CiAgICAgIHZhciByaWdodCA9ICdwYWNrYWdlOiRwYXRoJzsKICAgICAgdmFyIHdyb25nID0gJ3BhY2thZ2U6Ly8kcGF0aCc7CgogICAgICB0aHJvdyAiVVJJcyB1c2luZyB0aGUgJ3BhY2thZ2U6JyBzY2hlbWUgc2hvdWxkIGxvb2sgbGlrZSAiCiAgICAgICAgICAiJyRyaWdodCcsIG5vdCAnJHdyb25nJy4iOwogICAgfQoKICAgIHZhciBwYWNrYWdlTmFtZUVuZCA9IHVyaS5wYXRoLmluZGV4T2YoJy8nKTsKICAgIGlmIChwYWNrYWdlTmFtZUVuZCA9PSAwKSB7CiAgICAgIC8vIFBhY2thZ2UgVVJJcyBtdXN0IGhhdmUgYSBub24tZW1wdHkgcGFja2FnZSBuYW1lIChub3Qgc3RhcnQgd2l0aCAiLyIpLgogICAgICB0aHJvdyAiVVJJUyB1c2luZyB0aGUgJ3BhY2thZ2U6JyBzY2hlbWUgc2hvdWxkIGxvb2sgbGlrZSAiCiAgICAgICAgICAiJ3BhY2thZ2U6cGFja2FnZU5hbWUke3VyaS5wYXRofScsIG5vdCAncGFja2FnZToke3VyaS5wYXRofSciOwogICAgfQogICAgaWYgKF90cmFjZUxvYWRpbmcpIHsKICAgICAgX2xvZygnUmVzb2x2aW5nIHBhY2thZ2Ugd2l0aCB1cmkgcGF0aDogJHt1cmkucGF0aH0nKTsKICAgIH0KICAgIHZhciByZXNvbHZlZFVyaTsKICAgIGlmIChfcGFja2FnZUVycm9yICE9IG51bGwpIHsKICAgICAgaWYgKF90cmFjZUxvYWRpbmcpIHsKICAgICAgICBfbG9nKCJSZXNvbHZpbmcgcGFja2FnZSB3aXRoIHBlbmRpbmcgcmVzb2x1dGlvbiBlcnJvcjogJF9wYWNrYWdlRXJyb3IiKTsKICAgICAgfQogICAgICB0aHJvdyBfcGFja2FnZUVycm9yOwogICAgfSBlbHNlIGlmIChfcGFja2FnZVJvb3QgIT0gbnVsbCkgewogICAgICByZXNvbHZlZFVyaSA9IF9wYWNrYWdlUm9vdC5yZXNvbHZlKHVyaS5wYXRoKTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChwYWNrYWdlTmFtZUVuZCA8IDApIHsKICAgICAgICAvLyBQYWNrYWdlIFVSSXMgbXVzdCBoYXZlIGEgcGF0aCBhZnRlciB0aGUgcGFja2FnZSBuYW1lLCBldmVuIGlmIGl0J3MKICAgICAgICAvLyBqdXN0ICIvIi4KICAgICAgICB0aHJvdyAiVVJJUyB1c2luZyB0aGUgJ3BhY2thZ2U6JyBzY2hlbWUgc2hvdWxkIGxvb2sgbGlrZSAiCiAgICAgICAgICAgICIncGFja2FnZToke3VyaS5wYXRofS8nLCBub3QgJ3BhY2thZ2U6JHt1cmkucGF0aH0nIjsKICAgICAgfQogICAgICB2YXIgcGFja2FnZU5hbWUgPSB1cmkucGF0aC5zdWJzdHJpbmcoMCwgcGFja2FnZU5hbWVFbmQpOwogICAgICB2YXIgbWFwcGluZyA9IF9wYWNrYWdlTWFwW3BhY2thZ2VOYW1lXTsKICAgICAgaWYgKF90cmFjZUxvYWRpbmcpIHsKICAgICAgICBfbG9nKCJNYXBwZWQgJyRwYWNrYWdlTmFtZScgcGFja2FnZSB0byAnJG1hcHBpbmcnIik7CiAgICAgIH0KICAgICAgaWYgKG1hcHBpbmcgPT0gbnVsbCkgewogICAgICAgIHRocm93ICJObyBtYXBwaW5nIGZvciAnJHBhY2thZ2VOYW1lJyBwYWNrYWdlIHdoZW4gcmVzb2x2aW5nICckdXJpJy4iOwogICAgICB9CiAgICAgIHZhciBwYXRoOwogICAgICBhc3NlcnQodXJpLnBhdGgubGVuZ3RoID4gcGFja2FnZU5hbWUubGVuZ3RoKTsKICAgICAgcGF0aCA9IHVyaS5wYXRoLnN1YnN0cmluZyhwYWNrYWdlTmFtZS5sZW5ndGggKyAxKTsKICAgICAgaWYgKF90cmFjZUxvYWRpbmcpIHsKICAgICAgICBfbG9nKCJQYXRoIHRvIGJlIHJlc29sdmVkIGluIHBhY2thZ2U6ICRwYXRoIik7CiAgICAgIH0KICAgICAgcmVzb2x2ZWRVcmkgPSBtYXBwaW5nLnJlc29sdmUocGF0aCk7CiAgICB9CiAgICBpZiAoX3RyYWNlTG9hZGluZykgewogICAgICBfbG9nKCJSZXNvbHZlZCAnJHVyaScgdG8gJyRyZXNvbHZlZFVyaScuIik7CiAgICB9CiAgICByZXR1cm4gcmVzb2x2ZWRVcmk7CiAgfQoKICBSYXdSZWNlaXZlUG9ydCBfcGFja2FnZXNQb3J0OwoKICB2b2lkIF9yZXF1ZXN0UGFja2FnZXNNYXAoW1VyaSBwYWNrYWdlQ29uZmlnXSkgewogICAgaWYgKF9wYWNrYWdlc1BvcnQgIT0gbnVsbCkgewogICAgICAvLyBBbHJlYWR5IHNjaGVkdWxlZC4KICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gQ3JlYXRlIGEgcG9ydCB0byByZWNlaXZlIHRoZSBwYWNrYWdlcyBtYXAgb24uCiAgICBfcGFja2FnZXNQb3J0ID0gbmV3IFJhd1JlY2VpdmVQb3J0KF9oYW5kbGVQYWNrYWdlc1JlcGx5KTsKICAgIHZhciBzcCA9IF9wYWNrYWdlc1BvcnQuc2VuZFBvcnQ7CgogICAgaWYgKHBhY2thZ2VDb25maWcgIT0gbnVsbCkgewogICAgICAvLyBFeHBsaWNpdGx5IHNwZWNpZmllZCAucGFja2FnZXMgcGF0aC4KICAgICAgX2hhbmRsZVBhY2thZ2VzUmVxdWVzdChzcCwgX3RyYWNlTG9hZGluZywgLTIsIHBhY2thZ2VDb25maWcpOwogICAgfSBlbHNlIHsKICAgICAgLy8gU2VhcmNoIGZvciAucGFja2FnZXMgc3RhcnRpbmcgYXQgdGhlIHJvb3Qgc2NyaXB0LgogICAgICBfaGFuZGxlUGFja2FnZXNSZXF1ZXN0KHNwLCBfdHJhY2VMb2FkaW5nLCAtMSwgX3Jvb3RTY3JpcHQpOwogICAgfQoKICAgIGlmIChfdHJhY2VMb2FkaW5nKSB7CiAgICAgIF9sb2coIlJlcXVlc3RlZCBwYWNrYWdlcyBtYXAgZm9yICckX3Jvb3RTY3JpcHQnLiIpOwogICAgfQogIH0KCiAgdm9pZCBfaGFuZGxlUGFja2FnZXNSZXBseShtc2cpIHsKICAgIGlmIChfcGFja2FnZXNQb3J0ID09IG51bGwpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gTWFrZSBzdXJlIHRvIGNsb3NlIHRoZSBfcGFja2FnZVBvcnQgYmVmb3JlIGFueSBvdGhlciBhY3Rpb24uCiAgICBfcGFja2FnZXNQb3J0LmNsb3NlKCk7CiAgICBfcGFja2FnZXNQb3J0ID0gbnVsbDsKCiAgICBpZiAoX3RyYWNlTG9hZGluZykgewogICAgICBfbG9nKCJHb3QgcGFja2FnZXMgcmVwbHk6ICRtc2ciKTsKICAgIH0KICAgIGlmIChtc2cgaXMgU3RyaW5nKSB7CiAgICAgIGlmIChfdHJhY2VMb2FkaW5nKSB7CiAgICAgICAgX2xvZygiR290IGZhaWx1cmUgcmVzcG9uc2Ugb24gcGFja2FnZSBwb3J0OiAnJG1zZyciKTsKICAgICAgfQogICAgICAvLyBSZW1lbWJlciB0aGUgZXJyb3IgbWVzc2FnZS4KICAgICAgX3BhY2thZ2VFcnJvciA9IG1zZzsKICAgIH0gZWxzZSBpZiAobXNnIGlzIExpc3QpIHsKICAgICAgaWYgKG1zZy5sZW5ndGggPT0gMSkgewogICAgICAgIGlmIChfdHJhY2VMb2FkaW5nKSB7CiAgICAgICAgICBfbG9nKCJSZWNlaXZlZCBwYWNrYWdlIHJvb3Q6ICcke21zZ1swXX0nIik7CiAgICAgICAgfQogICAgICAgIF9wYWNrYWdlUm9vdCA9IFVyaS5wYXJzZShtc2dbMF0pOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIEZpcnN0IGVudHJ5IGNvbnRhaW5zIHRoZSBsb2NhdGlvbiBvZiB0aGUgbG9hZGVkIC5wYWNrYWdlcyBmaWxlLgogICAgICAgIGFzc2VydCgobXNnLmxlbmd0aCAlIDIpID09IDApOwogICAgICAgIGFzc2VydChtc2cubGVuZ3RoID49IDIpOwogICAgICAgIGFzc2VydChtc2dbMV0gPT0gbnVsbCk7CiAgICAgICAgX3BhY2thZ2VDb25maWcgPSBVcmkucGFyc2UobXNnWzBdKTsKICAgICAgICBfcGFja2FnZU1hcCA9IG5ldyBNYXA8U3RyaW5nLCBVcmk+KCk7CiAgICAgICAgZm9yICh2YXIgaSA9IDI7IGkgPCBtc2cubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgICAgIC8vIFRPRE8oaXBvc3ZhKTogQ29tcGxhaW4gYWJvdXQgZHVwbGljYXRlIGVudHJpZXMuCiAgICAgICAgICBfcGFja2FnZU1hcFttc2dbaV1dID0gVXJpLnBhcnNlKG1zZ1tpICsgMV0pOwogICAgICAgIH0KICAgICAgICBpZiAoX3RyYWNlTG9hZGluZykgewogICAgICAgICAgX2xvZygiU2V0dXAgcGFja2FnZSBtYXA6ICRfcGFja2FnZU1hcCIpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgX3BhY2thZ2VFcnJvciA9ICJCYWQgdHlwZSBvZiBwYWNrYWdlcyByZXBseTogJHttc2cucnVudGltZVR5cGV9IjsKICAgICAgaWYgKF90cmFjZUxvYWRpbmcpIHsKICAgICAgICBfbG9nKF9wYWNrYWdlRXJyb3IpOwogICAgICB9CiAgICB9CgogICAgLy8gUmVzb2x2ZSBhbGwgcGVuZGluZyBwYWNrYWdlIGxvYWRzIG5vdyB0aGF0IHdlIGtub3cgaG93IHRvIHJlc29sdmUgdGhlbS4KICAgIHdoaWxlIChfcGVuZGluZ1BhY2thZ2VMb2Fkcy5sZW5ndGggPiAwKSB7CiAgICAgIC8vIE9yZGVyIGRvZXMgbm90IG1hdHRlciBhcyB3ZSBxdWV1ZSBhbGwgb2YgdGhlIHJlcXVlc3RzIHVwIHJpZ2h0IG5vdy4KICAgICAgdmFyIHJlcSA9IF9wZW5kaW5nUGFja2FnZUxvYWRzLnJlbW92ZUxhc3QoKTsKICAgICAgLy8gQ2FsbCB0aGUgcmVnaXN0ZXJlZCBjbG9zdXJlLCB0byBoYW5kbGUgdGhlIGRlbGF5ZWQgYWN0aW9uLgogICAgICByZXEoKTsKICAgIH0KICAgIC8vIFJlc2V0IHRoZSBwZW5kaW5nIHBhY2thZ2UgbG9hZHMgdG8gZW1wdHkuIFNvIHRoYXQgd2UgZXZlbnR1YWxseSBjYW4KICAgIC8vIGZpbmlzaCBsb2FkaW5nLgogICAgX3BlbmRpbmdQYWNrYWdlTG9hZHMgPSBbXTsKICB9Cn0KCl9sb2cobXNnKSB7CiAgcHJpbnQoIiUgJG1zZyIpOwp9Cgp2YXIgX2h0dHBDbGllbnQ7CgovLyBTZW5kIGEgcmVzcG9uc2UgdG8gdGhlIHJlcXVlc3RpbmcgaXNvbGF0ZS4Kdm9pZCBfc2VuZFJlc291cmNlUmVzcG9uc2UoU2VuZFBvcnQgc3AsIGludCB0YWcsIFVyaSB1cmksIFVyaSByZXNvbHZlZFVyaSwKICAgIFN0cmluZyBsaWJyYXJ5VXJsLCBkeW5hbWljIGRhdGEpIHsKICBhc3NlcnQoKGRhdGEgaXMgTGlzdDxpbnQ+KSB8fCAoZGF0YSBpcyBTdHJpbmcpKTsKICB2YXIgbXNnID0gbmV3IExpc3QoNSk7CiAgaWYgKGRhdGEgaXMgU3RyaW5nKSB7CiAgICAvLyBXZSBlbmNvdW50ZXJlZCBhbiBlcnJvciwgZmxpcCB0aGUgc2lnbiBvZiB0aGUgdGFnIHRvIGluZGljYXRlIHRoYXQuCiAgICB0YWcgPSAtdGFnOwogICAgaWYgKGxpYnJhcnlVcmwgPT0gbnVsbCkgewogICAgICBkYXRhID0gJ0NvdWxkIG5vdCBsb2FkICIkdXJpIjogJGRhdGEnOwogICAgfSBlbHNlIHsKICAgICAgZGF0YSA9ICdDb3VsZCBub3QgaW1wb3J0ICIkdXJpIiBmcm9tICIkbGlicmFyeVVybCI6ICRkYXRhJzsKICAgIH0KICB9CiAgbXNnWzBdID0gdGFnOwogIG1zZ1sxXSA9IHVyaS50b1N0cmluZygpOwogIG1zZ1syXSA9IHJlc29sdmVkVXJpLnRvU3RyaW5nKCk7CiAgbXNnWzNdID0gbGlicmFyeVVybDsKICBtc2dbNF0gPSBkYXRhOwogIHNwLnNlbmQobXNnKTsKfQoKLy8gU2VuZCBhIHJlc3BvbnNlIHRvIHRoZSByZXF1ZXN0aW5nIGlzb2xhdGUuCnZvaWQgX3NlbmRFeHRlbnNpb25JbXBvcnRSZXNwb25zZSgKICAgIFNlbmRQb3J0IHNwLCBVcmkgdXJpLCBTdHJpbmcgbGlicmFyeVVybCwgU3RyaW5nIHJlc29sdmVkVXJpKSB7CiAgdmFyIG1zZyA9IG5ldyBMaXN0KDUpOwogIGludCB0YWcgPSBfRGFydF9rSW1wb3J0RXh0ZW5zaW9uOwogIGlmIChyZXNvbHZlZFVyaSA9PSBudWxsKSB7CiAgICAvLyBXZSBjb3VsZCBub3QgcmVzb2x2ZSB0aGUgZGFydC1leHQ6IHVyaS4KICAgIHRhZyA9IC10YWc7CiAgICByZXNvbHZlZFVyaSA9ICdDb3VsZCBub3QgcmVzb2x2ZSAiJHVyaSIgZnJvbSAiJGxpYnJhcnlVcmwiJzsKICB9CiAgbXNnWzBdID0gdGFnOwogIG1zZ1sxXSA9IHVyaS50b1N0cmluZygpOwogIG1zZ1syXSA9IHJlc29sdmVkVXJpOwogIG1zZ1szXSA9IGxpYnJhcnlVcmw7CiAgbXNnWzRdID0gcmVzb2x2ZWRVcmk7CiAgc3Auc2VuZChtc2cpOwp9Cgp2b2lkIF9sb2FkSHR0cCgKICAgIFNlbmRQb3J0IHNwLCBpbnQgdGFnLCBVcmkgdXJpLCBVcmkgcmVzb2x2ZWRVcmksIFN0cmluZyBsaWJyYXJ5VXJsKSB7CiAgaWYgKF9odHRwQ2xpZW50ID09IG51bGwpIHsKICAgIF9odHRwQ2xpZW50ID0gbmV3IEh0dHBDbGllbnQoKS4ubWF4Q29ubmVjdGlvbnNQZXJIb3N0ID0gNjsKICB9CiAgX2h0dHBDbGllbnQKICAgICAgLmdldFVybChyZXNvbHZlZFVyaSkKICAgICAgLnRoZW4oKEh0dHBDbGllbnRSZXF1ZXN0IHJlcXVlc3QpID0+IHJlcXVlc3QuY2xvc2UoKSkKICAgICAgLnRoZW4oKEh0dHBDbGllbnRSZXNwb25zZSByZXNwb25zZSkgewogICAgdmFyIGJ1aWxkZXIgPSBuZXcgQnl0ZXNCdWlsZGVyKGNvcHk6IGZhbHNlKTsKICAgIHJlc3BvbnNlLmxpc3RlbihidWlsZGVyLmFkZCwgb25Eb25lOiAoKSB7CiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlICE9IDIwMCkgewogICAgICAgIHZhciBtc2cgPSAiRmFpbHVyZSBnZXR0aW5nICRyZXNvbHZlZFVyaTpcbiIKICAgICAgICAgICAgIiAgJHtyZXNwb25zZS5zdGF0dXNDb2RlfSAke3Jlc3BvbnNlLnJlYXNvblBocmFzZX0iOwogICAgICAgIF9zZW5kUmVzb3VyY2VSZXNwb25zZShzcCwgdGFnLCB1cmksIHJlc29sdmVkVXJpLCBsaWJyYXJ5VXJsLCBtc2cpOwogICAgICB9IGVsc2UgewogICAgICAgIF9zZW5kUmVzb3VyY2VSZXNwb25zZSgKICAgICAgICAgICAgc3AsIHRhZywgdXJpLCByZXNvbHZlZFVyaSwgbGlicmFyeVVybCwgYnVpbGRlci50YWtlQnl0ZXMoKSk7CiAgICAgIH0KICAgIH0sIG9uRXJyb3I6IChlKSB7CiAgICAgIF9zZW5kUmVzb3VyY2VSZXNwb25zZSgKICAgICAgICAgIHNwLCB0YWcsIHVyaSwgcmVzb2x2ZWRVcmksIGxpYnJhcnlVcmwsIGUudG9TdHJpbmcoKSk7CiAgICB9KTsKICB9KS5jYXRjaEVycm9yKChlKSB7CiAgICBfc2VuZFJlc291cmNlUmVzcG9uc2Uoc3AsIHRhZywgdXJpLCByZXNvbHZlZFVyaSwgbGlicmFyeVVybCwgZS50b1N0cmluZygpKTsKICB9KTsKICAvLyBJdCdzIGp1c3QgaGVyZSB0byBwdXNoIGFuIGV2ZW50IG9uIHRoZSBldmVudCBsb29wIHNvIHRoYXQgd2UgaW52b2tlIHRoZQogIC8vIHNjaGVkdWxlZCBtaWNyb3Rhc2tzLgogIFRpbWVyLnJ1bigoKSB7fSk7Cn0KCnZvaWQgX2xvYWRGaWxlKElzb2xhdGVMb2FkZXJTdGF0ZSBsb2FkZXJTdGF0ZSwgU2VuZFBvcnQgc3AsIGludCB0YWcsIFVyaSB1cmksCiAgICBVcmkgcmVzb2x2ZWRVcmksIFN0cmluZyBsaWJyYXJ5VXJsKSB7CiAgdmFyIHBhdGggPSByZXNvbHZlZFVyaS50b0ZpbGVQYXRoKCk7CiAgdmFyIHNvdXJjZUZpbGUgPSBuZXcgRmlsZShwYXRoKTsKICBzb3VyY2VGaWxlLnJlYWRBc0J5dGVzKCkudGhlbigoZGF0YSkgewogICAgX3NlbmRSZXNvdXJjZVJlc3BvbnNlKHNwLCB0YWcsIHVyaSwgcmVzb2x2ZWRVcmksIGxpYnJhcnlVcmwsIGRhdGEpOwogIH0sIG9uRXJyb3I6IChlKSB7CiAgICBfc2VuZFJlc291cmNlUmVzcG9uc2Uoc3AsIHRhZywgdXJpLCByZXNvbHZlZFVyaSwgbGlicmFyeVVybCwgZS50b1N0cmluZygpKTsKICB9KS53aGVuQ29tcGxldGUoKCkgewogICAgbG9hZGVyU3RhdGUuY3VycmVudEZpbGVSZXF1ZXN0cy0tOwogICAgd2hpbGUgKGxvYWRlclN0YXRlLnNob3VsZElzc3VlRmlsZVJlcXVlc3QpIHsKICAgICAgRmlsZVJlcXVlc3QgZnIgPSBsb2FkZXJTdGF0ZS5kZXF1ZXVlRmlsZVJlcXVlc3QoKTsKICAgICAgaWYgKGZyID09IG51bGwpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBfbG9hZEZpbGUoCiAgICAgICAgICBsb2FkZXJTdGF0ZSwgZnIuc3AsIGZyLnRhZywgZnIudXJpLCBmci5yZXNvbHZlZFVyaSwgZnIubGlicmFyeVVybCk7CiAgICAgIGxvYWRlclN0YXRlLmN1cnJlbnRGaWxlUmVxdWVzdHMrKzsKICAgIH0KICB9KTsKfQoKdm9pZCBfbG9hZERhdGFVcmkoCiAgICBTZW5kUG9ydCBzcCwgaW50IHRhZywgVXJpIHVyaSwgVXJpIHJlc29sdmVkVXJpLCBTdHJpbmcgbGlicmFyeVVybCkgewogIHRyeSB7CiAgICB2YXIgbWltZSA9IHVyaS5kYXRhLm1pbWVUeXBlOwogICAgaWYgKChtaW1lICE9ICJhcHBsaWNhdGlvbi9kYXJ0IikgJiYgKG1pbWUgIT0gInRleHQvcGxhaW4iKSkgewogICAgICB0aHJvdyAiTUlNRS10eXBlIG11c3QgYmUgYXBwbGljYXRpb24vZGFydCBvciB0ZXh0L3BsYWluOiAkbWltZSBnaXZlbi4iOwogICAgfQogICAgdmFyIGNoYXJzZXQgPSB1cmkuZGF0YS5jaGFyc2V0OwogICAgaWYgKChjaGFyc2V0ICE9ICJ1dGYtOCIpICYmIChjaGFyc2V0ICE9ICJVUy1BU0NJSSIpKSB7CiAgICAgIC8vIFRoZSBDKysgcG9ydGlvbiBvZiB0aGUgZW1iZWRkZXIgYXNzdW1lcyBVVEYtOC4KICAgICAgdGhyb3cgIk9ubHkgdXRmLTggb3IgVVMtQVNDSUkgZW5jb2RpbmdzIGFyZSBzdXBwb3J0ZWQ6ICRjaGFyc2V0IGdpdmVuLiI7CiAgICB9CiAgICBfc2VuZFJlc291cmNlUmVzcG9uc2UoCiAgICAgICAgc3AsIHRhZywgdXJpLCByZXNvbHZlZFVyaSwgbGlicmFyeVVybCwgdXJpLmRhdGEuY29udGVudEFzQnl0ZXMoKSk7CiAgfSBjYXRjaCAoZSkgewogICAgX3NlbmRSZXNvdXJjZVJlc3BvbnNlKHNwLCB0YWcsIHVyaSwgcmVzb2x2ZWRVcmksIGxpYnJhcnlVcmwsCiAgICAgICAgIkludmFsaWQgZGF0YSB1cmkgKCR1cmkpOlxuICAkZSIpOwogIH0KfQoKLy8gTG9hZGluZyBhIHBhY2thZ2UgVVJJIG5lZWRzIHRvIGZpcnN0IG1hcCB0aGUgcGFja2FnZSBuYW1lIHRvIGEgbG9hZGFibGUKLy8gVVJJLgpfbG9hZFBhY2thZ2UoSXNvbGF0ZUxvYWRlclN0YXRlIGxvYWRlclN0YXRlLCBTZW5kUG9ydCBzcCwgYm9vbCB0cmFjZUxvYWRpbmcsCiAgICBpbnQgdGFnLCBVcmkgdXJpLCBVcmkgcmVzb2x2ZWRVcmksIFN0cmluZyBsaWJyYXJ5VXJsKSB7CiAgaWYgKGxvYWRlclN0YXRlLl9wYWNrYWdlc1JlYWR5KSB7CiAgICB2YXIgcmVzb2x2ZWRVcmk7CiAgICB0cnkgewogICAgICByZXNvbHZlZFVyaSA9IGxvYWRlclN0YXRlLl9yZXNvbHZlUGFja2FnZVVyaSh1cmkpOwogICAgfSBjYXRjaCAoZSwgcykgewogICAgICBpZiAodHJhY2VMb2FkaW5nKSB7CiAgICAgICAgX2xvZygiRXhjZXB0aW9uICgkZSkgd2hlbiByZXNvbHZpbmcgcGFja2FnZSBVUkk6ICR1cmkiKTsKICAgICAgfQogICAgICAvLyBSZXBvcnQgZXJyb3IuCiAgICAgIF9zZW5kUmVzb3VyY2VSZXNwb25zZSgKICAgICAgICAgIHNwLCB0YWcsIHVyaSwgcmVzb2x2ZWRVcmksIGxpYnJhcnlVcmwsIGUudG9TdHJpbmcoKSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIFJlY3Vyc2l2ZWx5IGNhbGwgd2l0aCB0aGUgbmV3IHJlc29sdmVkIHVyaS4KICAgIF9oYW5kbGVSZXNvdXJjZVJlcXVlc3QoCiAgICAgICAgbG9hZGVyU3RhdGUsIHNwLCB0cmFjZUxvYWRpbmcsIHRhZywgdXJpLCByZXNvbHZlZFVyaSwgbGlicmFyeVVybCk7CiAgfSBlbHNlIHsKICAgIGlmIChsb2FkZXJTdGF0ZS5fcGVuZGluZ1BhY2thZ2VMb2Fkcy5pc0VtcHR5KSB7CiAgICAgIC8vIFBhY2thZ2UgcmVzb2x1dGlvbiBoYXMgbm90IGJlZW4gc2V0dXAgeWV0LCBhbmQgdGhpcyBpcyB0aGUgZmlyc3QKICAgICAgLy8gcmVxdWVzdCBmb3IgcGFja2FnZSByZXNvbHV0aW9uICYgbG9hZGluZy4KICAgICAgbG9hZGVyU3RhdGUuX3JlcXVlc3RQYWNrYWdlc01hcCgpOwogICAgfQogICAgLy8gUmVnaXN0ZXIgdGhlIGFjdGlvbiBvZiBsb2FkaW5nIHRoaXMgcGFja2FnZSBvbmNlIHRoZSBwYWNrYWdlIHJlc29sdXRpb24KICAgIC8vIGlzIHJlYWR5LgogICAgbG9hZGVyU3RhdGUuX3BlbmRpbmdQYWNrYWdlTG9hZHMuYWRkKCgpIHsKICAgICAgX2hhbmRsZVJlc291cmNlUmVxdWVzdCgKICAgICAgICAgIGxvYWRlclN0YXRlLCBzcCwgdHJhY2VMb2FkaW5nLCB0YWcsIHVyaSwgdXJpLCBsaWJyYXJ5VXJsKTsKICAgIH0pOwogICAgaWYgKHRyYWNlTG9hZGluZykgewogICAgICBfbG9nKCJQZW5kaW5nIHBhY2thZ2UgbG9hZCBvZiAnJHVyaSc6ICIKICAgICAgICAgICIke2xvYWRlclN0YXRlLl9wZW5kaW5nUGFja2FnZUxvYWRzLmxlbmd0aH0gcGVuZGluZyIpOwogICAgfQogIH0KfQoKLy8gVE9ETyhqb2hubWNjdXRjaGFuKTogVGhpcyBhbmQgbW9zdCBvdGhlciB0b3AgbGV2ZWwgZnVuY3Rpb25zIGluIHRoaXMgZmlsZQovLyBzaG91bGQgYmUgdHVybmVkIGludG8gbWV0aG9kcyBvbiB0aGUgSXNvbGF0ZUxvYWRlclN0YXRlIGNsYXNzLgpfaGFuZGxlUmVzb3VyY2VSZXF1ZXN0KElzb2xhdGVMb2FkZXJTdGF0ZSBsb2FkZXJTdGF0ZSwgU2VuZFBvcnQgc3AsCiAgICBib29sIHRyYWNlTG9hZGluZywgaW50IHRhZywgVXJpIHVyaSwgVXJpIHJlc29sdmVkVXJpLCBTdHJpbmcgbGlicmFyeVVybCkgewogIGlmIChyZXNvbHZlZFVyaS5zY2hlbWUgPT0gJycgfHwgcmVzb2x2ZWRVcmkuc2NoZW1lID09ICdmaWxlJykgewogICAgaWYgKGxvYWRlclN0YXRlLnNob3VsZElzc3VlRmlsZVJlcXVlc3QpIHsKICAgICAgX2xvYWRGaWxlKGxvYWRlclN0YXRlLCBzcCwgdGFnLCB1cmksIHJlc29sdmVkVXJpLCBsaWJyYXJ5VXJsKTsKICAgICAgbG9hZGVyU3RhdGUuY3VycmVudEZpbGVSZXF1ZXN0cysrOwogICAgfSBlbHNlIHsKICAgICAgRmlsZVJlcXVlc3QgZnIgPSBuZXcgRmlsZVJlcXVlc3Qoc3AsIHRhZywgdXJpLCByZXNvbHZlZFVyaSwgbGlicmFyeVVybCk7CiAgICAgIGxvYWRlclN0YXRlLmVucXVldWVGaWxlUmVxdWVzdChmcik7CiAgICB9CiAgfSBlbHNlIGlmICgocmVzb2x2ZWRVcmkuc2NoZW1lID09ICdodHRwJykgfHwKICAgICAgKHJlc29sdmVkVXJpLnNjaGVtZSA9PSAnaHR0cHMnKSkgewogICAgX2xvYWRIdHRwKHNwLCB0YWcsIHVyaSwgcmVzb2x2ZWRVcmksIGxpYnJhcnlVcmwpOwogIH0gZWxzZSBpZiAoKHJlc29sdmVkVXJpLnNjaGVtZSA9PSAnZGF0YScpKSB7CiAgICBfbG9hZERhdGFVcmkoc3AsIHRhZywgdXJpLCByZXNvbHZlZFVyaSwgbGlicmFyeVVybCk7CiAgfSBlbHNlIGlmICgocmVzb2x2ZWRVcmkuc2NoZW1lID09ICdwYWNrYWdlJykpIHsKICAgIF9sb2FkUGFja2FnZSgKICAgICAgICBsb2FkZXJTdGF0ZSwgc3AsIHRyYWNlTG9hZGluZywgdGFnLCB1cmksIHJlc29sdmVkVXJpLCBsaWJyYXJ5VXJsKTsKICB9IGVsc2UgewogICAgX3NlbmRSZXNvdXJjZVJlc3BvbnNlKAogICAgICAgIHNwLAogICAgICAgIHRhZywKICAgICAgICB1cmksCiAgICAgICAgcmVzb2x2ZWRVcmksCiAgICAgICAgbGlicmFyeVVybCwKICAgICAgICAnVW5rbm93biBzY2hlbWUgKCR7cmVzb2x2ZWRVcmkuc2NoZW1lfSkgZm9yICcKICAgICAgICAnJHJlc29sdmVkVXJpJyk7CiAgfQp9CgovLyBIYW5kbGluZyBvZiBwYWNrYWdlcyByZXF1ZXN0cy4gRmluZGluZyBhbmQgcGFyc2luZyBvZiAucGFja2FnZXMgZmlsZSBvcgovLyBwYWNrYWdlcy8gZGlyZWN0b3JpZXMuCmNvbnN0IF9MRiA9IDB4MEE7CmNvbnN0IF9DUiA9IDB4MEQ7CmNvbnN0IF9TUEFDRSA9IDB4MjA7CmNvbnN0IF9IQVNIID0gMHgyMzsKY29uc3QgX0RPVCA9IDB4MkU7CmNvbnN0IF9DT0xPTiA9IDB4M0E7CmNvbnN0IF9ERUwgPSAweDdGOwoKY29uc3QgX2ludmFsaWRQYWNrYWdlTmFtZUNoYXJzID0gY29uc3QgWwogIHRydWUsIC8vICBzcGFjZQogIGZhbHNlLCAvLyAhCiAgdHJ1ZSwgLy8gICIKICB0cnVlLCAvLyAgIwogIGZhbHNlLCAvLyAkCiAgdHJ1ZSwgLy8gICUKICBmYWxzZSwgLy8gJgogIGZhbHNlLCAvLyAnCiAgZmFsc2UsIC8vICgKICBmYWxzZSwgLy8gKQogIGZhbHNlLCAvLyAqCiAgZmFsc2UsIC8vICsKICBmYWxzZSwgLy8gLAogIGZhbHNlLCAvLyAtCiAgZmFsc2UsIC8vIC4KICB0cnVlLCAvLyAgLwogIGZhbHNlLCAvLyAwCiAgZmFsc2UsIC8vIDEKICBmYWxzZSwgLy8gMgogIGZhbHNlLCAvLyAzCiAgZmFsc2UsIC8vIDQKICBmYWxzZSwgLy8gNQogIGZhbHNlLCAvLyA2CiAgZmFsc2UsIC8vIDcKICBmYWxzZSwgLy8gOAogIGZhbHNlLCAvLyA5CiAgdHJ1ZSwgLy8gIDoKICBmYWxzZSwgLy8gOwogIHRydWUsIC8vICA8CiAgZmFsc2UsIC8vID0KICB0cnVlLCAvLyAgPgogIHRydWUsIC8vICA/CiAgZmFsc2UsIC8vIEAKICBmYWxzZSwgLy8gQQogIGZhbHNlLCAvLyBCCiAgZmFsc2UsIC8vIEMKICBmYWxzZSwgLy8gRAogIGZhbHNlLCAvLyBFCiAgZmFsc2UsIC8vIEYKICBmYWxzZSwgLy8gRwogIGZhbHNlLCAvLyBICiAgZmFsc2UsIC8vIEkKICBmYWxzZSwgLy8gSgogIGZhbHNlLCAvLyBLCiAgZmFsc2UsIC8vIEwKICBmYWxzZSwgLy8gTQogIGZhbHNlLCAvLyBOCiAgZmFsc2UsIC8vIE8KICBmYWxzZSwgLy8gUAogIGZhbHNlLCAvLyBRCiAgZmFsc2UsIC8vIFIKICBmYWxzZSwgLy8gUwogIGZhbHNlLCAvLyBUCiAgZmFsc2UsIC8vIFUKICBmYWxzZSwgLy8gVgogIGZhbHNlLCAvLyBXCiAgZmFsc2UsIC8vIFgKICBmYWxzZSwgLy8gWQogIGZhbHNlLCAvLyBaCiAgdHJ1ZSwgLy8gIFsKICB0cnVlLCAvLyAgXAogIHRydWUsIC8vICBdCiAgdHJ1ZSwgLy8gIF4KICBmYWxzZSwgLy8gXwogIHRydWUsIC8vICBgCiAgZmFsc2UsIC8vIGEKICBmYWxzZSwgLy8gYgogIGZhbHNlLCAvLyBjCiAgZmFsc2UsIC8vIGQKICBmYWxzZSwgLy8gZQogIGZhbHNlLCAvLyBmCiAgZmFsc2UsIC8vIGcKICBmYWxzZSwgLy8gaAogIGZhbHNlLCAvLyBpCiAgZmFsc2UsIC8vIGoKICBmYWxzZSwgLy8gawogIGZhbHNlLCAvLyBsCiAgZmFsc2UsIC8vIG0KICBmYWxzZSwgLy8gbgogIGZhbHNlLCAvLyBvCiAgZmFsc2UsIC8vIHAKICBmYWxzZSwgLy8gcQogIGZhbHNlLCAvLyByCiAgZmFsc2UsIC8vIHMKICBmYWxzZSwgLy8gdAogIGZhbHNlLCAvLyB1CiAgZmFsc2UsIC8vIHYKICBmYWxzZSwgLy8gdwogIGZhbHNlLCAvLyB4CiAgZmFsc2UsIC8vIHkKICBmYWxzZSwgLy8gegogIHRydWUsIC8vICB7CiAgdHJ1ZSwgLy8gIHwKICB0cnVlLCAvLyAgfQogIGZhbHNlLCAvLyB+CiAgdHJ1ZSwgLy8gIERFTApdOwoKX3BhcnNlUGFja2FnZXNGaWxlKAogICAgU2VuZFBvcnQgc3AsIGJvb2wgdHJhY2VMb2FkaW5nLCBVcmkgcGFja2FnZXNGaWxlLCBMaXN0PGludD4gZGF0YSkgewogIC8vIFRoZSBmaXJzdCBlbnRyeSBjb250YWlucyB0aGUgbG9jYXRpb24gb2YgdGhlIGlkZW50aWZpZWQgLnBhY2thZ2VzIGZpbGUKICAvLyBpbnN0ZWFkIG9mIGEgbWFwcGluZy4KICB2YXIgcmVzdWx0ID0gW3BhY2thZ2VzRmlsZS50b1N0cmluZygpLCBudWxsXTsKICB2YXIgaW5kZXggPSAwOwogIHZhciBsZW4gPSBkYXRhLmxlbmd0aDsKICB3aGlsZSAoaW5kZXggPCBsZW4pIHsKICAgIHZhciBzdGFydCA9IGluZGV4OwogICAgdmFyIGNoYXIgPSBkYXRhW2luZGV4XTsKICAgIGlmICgoY2hhciA9PSBfQ1IpIHx8IChjaGFyID09IF9MRikpIHsKICAgICAgLy8gU2tpcHBpbmcgZW1wdHkgbGluZXMuCiAgICAgIGluZGV4Kys7CiAgICAgIGNvbnRpbnVlOwogICAgfQoKICAgIC8vIElkZW50aWZ5IHNwbGl0IHdpdGhpbiB0aGUgbGluZSBhbmQgZW5kIG9mIHRoZSBsaW5lLgogICAgdmFyIHNlcGFyYXRvciA9IC0xOwogICAgdmFyIGVuZCA9IGxlbjsKICAgIC8vIFZlcmlmeWluZyB2YWxpZGl0eSBvZiBwYWNrYWdlIG5hbWUgd2hpbGUgc2Nhbm5pbmcgdGhlIGxpbmUuCiAgICB2YXIgbm9uRG90ID0gZmFsc2U7CiAgICB2YXIgaW52YWxpZFBhY2thZ2VOYW1lID0gZmFsc2U7CgogICAgLy8gU2NhbiB0byB0aGUgZW5kIG9mIHRoZSBsaW5lIG9yIGRhdGEuCiAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHsKICAgICAgY2hhciA9IGRhdGFbaW5kZXgrK107CiAgICAgIC8vIElmIHdlIGhhdmUgbm90IHJlYWNoZWQgdGhlIHNlcGFyYXRvciB5ZXQsIGRldGVybWluZSB3aGV0aGVyIHdlIGFyZQogICAgICAvLyBzY2FubmluZyBsZWdhbCBwYWNrYWdlIG5hbWUgY2hhcmFjdGVycy4KICAgICAgaWYgKHNlcGFyYXRvciA9PSAtMSkgewogICAgICAgIGlmICgoY2hhciA9PSBfQ09MT04pKSB7CiAgICAgICAgICAvLyBUaGUgZmlyc3QgY29sb24gb24gYSBsaW5lIGlzIHRoZSBzZXBhcmF0b3IgYmV0d2VlbiBwYWNrYWdlIG5hbWUgYW5kCiAgICAgICAgICAvLyByZWxhdGVkIFVSSS4KICAgICAgICAgIHNlcGFyYXRvciA9IGluZGV4IC0gMTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gU3RpbGwgc2Nhbm5pbmcgdGhlIHBhY2thZ2UgbmFtZSBwYXJ0LiBDaGVjayBmb3IgdGhlIHZhbGlkaXR5IG9mCiAgICAgICAgICAvLyB0aGUgY2hhcmFjdGVycy4KICAgICAgICAgIG5vbkRvdCA9IG5vbkRvdCB8fCAoY2hhciAhPSBfRE9UKTsKICAgICAgICAgIGludmFsaWRQYWNrYWdlTmFtZSA9IGludmFsaWRQYWNrYWdlTmFtZSB8fAogICAgICAgICAgICAgIChjaGFyIDwgX1NQQUNFKSB8fAogICAgICAgICAgICAgIChjaGFyID4gX0RFTCkgfHwKICAgICAgICAgICAgICBfaW52YWxpZFBhY2thZ2VOYW1lQ2hhcnNbY2hhciAtIF9TUEFDRV07CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIElkZW50aWZ5IGVuZCBvZiBsaW5lLgogICAgICBpZiAoKGNoYXIgPT0gX0NSKSB8fCAoY2hhciA9PSBfTEYpKSB7CiAgICAgICAgZW5kID0gaW5kZXggLSAxOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CgogICAgLy8gTm8gZnVydGhlciBoYW5kbGluZyBuZWVkZWQgZm9yIGNvbW1lbnQgbGluZXMuCiAgICBpZiAoZGF0YVtzdGFydF0gPT0gX0hBU0gpIHsKICAgICAgaWYgKHRyYWNlTG9hZGluZykgewogICAgICAgIF9sb2coIlNraXBwaW5nIGNvbW1lbnQgaW4gJHBhY2thZ2VzRmlsZTpcbiIKICAgICAgICAgICAgIiR7bmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGRhdGEsIHN0YXJ0LCBlbmQpfSIpOwogICAgICB9CiAgICAgIGNvbnRpbnVlOwogICAgfQoKICAgIC8vIENoZWNrIGZvciBhIGJhZGx5IGZvcm1hdHRlZCBsaW5lLCBzdGFydGluZyB3aXRoIGEgJzonLgogICAgaWYgKHNlcGFyYXRvciA9PSBzdGFydCkgewogICAgICB2YXIgbGluZSA9IG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhkYXRhLCBzdGFydCwgZW5kKTsKICAgICAgaWYgKHRyYWNlTG9hZGluZykgewogICAgICAgIF9sb2coIkxpbmUgc3RhcnRzIHdpdGggJzonIGluICRwYWNrYWdlc0ZpbGU6XG4iCiAgICAgICAgICAgICIkbGluZSIpOwogICAgICB9CiAgICAgIHNwLnNlbmQoIk1pc3NpbmcgcGFja2FnZSBuYW1lIGluICRwYWNrYWdlc0ZpbGU6XG4iCiAgICAgICAgICAiJGxpbmUiKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIEVuc3VyZSB0aGVyZSBpcyBhIHNlcGFyYXRvciBvbiB0aGUgbGluZS4KICAgIGlmIChzZXBhcmF0b3IgPT0gLTEpIHsKICAgICAgdmFyIGxpbmUgPSBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoZGF0YSwgc3RhcnQsIGVuZCk7CiAgICAgIGlmICh0cmFjZUxvYWRpbmcpIHsKICAgICAgICBfbG9nKCJMaW5lIGhhcyBubyAnOicgaW4gJHBhY2thZ2VzRmlsZTpcbiIKICAgICAgICAgICAgIiRsaW5lIik7CiAgICAgIH0KICAgICAgc3Auc2VuZCgiTWlzc2luZyAnOicgc2VwYXJhdG9yIGluICRwYWNrYWdlc0ZpbGU6XG4iCiAgICAgICAgICAiJGxpbmUiKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHZhciBwYWNrYWdlTmFtZSA9IG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhkYXRhLCBzdGFydCwgc2VwYXJhdG9yKTsKCiAgICAvLyBDaGVjayBmb3IgdmFsaWQgcGFja2FnZSBuYW1lLgogICAgaWYgKGludmFsaWRQYWNrYWdlTmFtZSB8fCAhbm9uRG90KSB7CiAgICAgIHZhciBsaW5lID0gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGRhdGEsIHN0YXJ0LCBlbmQpOwogICAgICBpZiAodHJhY2VMb2FkaW5nKSB7CiAgICAgICAgX2xvZygiSW52YWxpZCBwYWNrYWdlIG5hbWUgJHBhY2thZ2VOYW1lIGluICRwYWNrYWdlc0ZpbGUiKTsKICAgICAgfQogICAgICBzcC5zZW5kKCJJbnZhbGlkIHBhY2thZ2UgbmFtZSAnJHBhY2thZ2VOYW1lJyBpbiAkcGFja2FnZXNGaWxlOlxuIgogICAgICAgICAgIiRsaW5lIik7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAodHJhY2VMb2FkaW5nKSB7CiAgICAgIF9sb2coInBhY2thZ2VOYW1lOiAkcGFja2FnZU5hbWUiKTsKICAgIH0KICAgIHZhciBwYWNrYWdlVXJpID0gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGRhdGEsIHNlcGFyYXRvciArIDEsIGVuZCk7CiAgICBpZiAodHJhY2VMb2FkaW5nKSB7CiAgICAgIF9sb2coIm9yaWdpbmFsIHBhY2thZ2VVcmk6ICRwYWNrYWdlVXJpIik7CiAgICB9CiAgICAvLyBFbnN1cmUgdGhlIHBhY2thZ2UgdXJpIGVuZHMgd2l0aCBhIC8uCiAgICBpZiAoIXBhY2thZ2VVcmkuZW5kc1dpdGgoIi8iKSkgewogICAgICBwYWNrYWdlVXJpID0gIiRwYWNrYWdlVXJpLyI7CiAgICB9CiAgICBwYWNrYWdlVXJpID0gcGFja2FnZXNGaWxlLnJlc29sdmUocGFja2FnZVVyaSkudG9TdHJpbmcoKTsKICAgIGlmICh0cmFjZUxvYWRpbmcpIHsKICAgICAgX2xvZygibWFwcGluZzogJHBhY2thZ2VOYW1lIC0+ICRwYWNrYWdlVXJpIik7CiAgICB9CiAgICByZXN1bHQuYWRkKHBhY2thZ2VOYW1lKTsKICAgIHJlc3VsdC5hZGQocGFja2FnZVVyaSk7CiAgfQoKICBpZiAodHJhY2VMb2FkaW5nKSB7CiAgICBfbG9nKCJQYXJzZWQgcGFja2FnZXMgZmlsZSBhdCAkcGFja2FnZXNGaWxlLiBTZW5kaW5nOlxuJHJlc3VsdCIpOwogIH0KICBzcC5zZW5kKHJlc3VsdCk7Cn0KCl9sb2FkUGFja2FnZXNGaWxlKFNlbmRQb3J0IHNwLCBib29sIHRyYWNlTG9hZGluZywgVXJpIHBhY2thZ2VzRmlsZSkgYXN5bmMgewogIHRyeSB7CiAgICB2YXIgZGF0YSA9IGF3YWl0IG5ldyBGaWxlLmZyb21VcmkocGFja2FnZXNGaWxlKS5yZWFkQXNCeXRlcygpOwogICAgaWYgKHRyYWNlTG9hZGluZykgewogICAgICBfbG9nKCJMb2FkZWQgcGFja2FnZXMgZmlsZSBmcm9tICRwYWNrYWdlc0ZpbGU6XG4iCiAgICAgICAgICAiJHtuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoZGF0YSl9Iik7CiAgICB9CiAgICBfcGFyc2VQYWNrYWdlc0ZpbGUoc3AsIHRyYWNlTG9hZGluZywgcGFja2FnZXNGaWxlLCBkYXRhKTsKICB9IGNhdGNoIChlLCBzKSB7CiAgICBpZiAodHJhY2VMb2FkaW5nKSB7CiAgICAgIF9sb2coIkVycm9yIGxvYWRpbmcgcGFja2FnZXM6ICRlXG4kcyIpOwogICAgfQogICAgc3Auc2VuZCgiVW5jYXVnaHQgZXJyb3IgKCRlKSBsb2FkaW5nIHBhY2thZ2VzIGZpbGUuIik7CiAgfQp9CgpfZmluZFBhY2thZ2VzRmlsZShTZW5kUG9ydCBzcCwgYm9vbCB0cmFjZUxvYWRpbmcsIFVyaSBiYXNlKSBhc3luYyB7CiAgdHJ5IHsKICAgIC8vIFdhbGsgdXAgdGhlIGRpcmVjdG9yeSBoaWVyYXJjaHkgdG8gY2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YKICAgIC8vIC5wYWNrYWdlcyBmaWxlcyBpbiBwYXJlbnQgZGlyZWN0b3JpZXMgYW5kIGZvciB0aGUgZXhpc3RlbmNlIG9mIGEKICAgIC8vIHBhY2thZ2VzLyBkaXJlY3Rvcnkgb24gdGhlIGZpcnN0IGl0ZXJhdGlvbi4KICAgIHZhciBkaXIgPSBuZXcgRmlsZS5mcm9tVXJpKGJhc2UpLnBhcmVudDsKICAgIHZhciBwcmV2ID0gbnVsbDsKICAgIC8vIEtlZXAgc2VhcmNoaW5nIHVudGlsIHdlIHJlYWNoIHRoZSByb290LgogICAgd2hpbGUgKChwcmV2ID09IG51bGwpIHx8IChwcmV2LnBhdGggIT0gZGlyLnBhdGgpKSB7CiAgICAgIC8vIENoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mIGEgLnBhY2thZ2VzIGZpbGUgYW5kIGlmIGl0IGV4aXN0cyB0cnkgdG8KICAgICAgLy8gbG9hZCBhbmQgcGFyc2UgaXQuCiAgICAgIHZhciBkaXJVcmkgPSBkaXIudXJpOwogICAgICB2YXIgcGFja2FnZXNGaWxlID0gZGlyVXJpLnJlc29sdmUoIi5wYWNrYWdlcyIpOwogICAgICBpZiAodHJhY2VMb2FkaW5nKSB7CiAgICAgICAgX2xvZygiQ2hlY2tpbmcgZm9yICRwYWNrYWdlc0ZpbGUgZmlsZS4iKTsKICAgICAgfQogICAgICB2YXIgZXhpc3RzID0gYXdhaXQgbmV3IEZpbGUuZnJvbVVyaShwYWNrYWdlc0ZpbGUpLmV4aXN0cygpOwogICAgICBpZiAodHJhY2VMb2FkaW5nKSB7CiAgICAgICAgX2xvZygiJHBhY2thZ2VzRmlsZSBleGlzdHM6ICRleGlzdHMiKTsKICAgICAgfQogICAgICBpZiAoZXhpc3RzKSB7CiAgICAgICAgX2xvYWRQYWNrYWdlc0ZpbGUoc3AsIHRyYWNlTG9hZGluZywgcGFja2FnZXNGaWxlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgLy8gTW92ZSB1cCBvbmUgbGV2ZWwuCiAgICAgIHByZXYgPSBkaXI7CiAgICAgIGRpciA9IGRpci5wYXJlbnQ7CiAgICB9CgogICAgLy8gTm8gLnBhY2thZ2VzIGZpbGUgd2FzIGZvdW5kLgogICAgaWYgKHRyYWNlTG9hZGluZykgewogICAgICBfbG9nKCJDb3VsZCBub3QgcmVzb2x2ZSBhIHBhY2thZ2UgbG9jYXRpb24gZnJvbSAkYmFzZSIpOwogICAgfQogICAgc3Auc2VuZCgiQ291bGQgbm90IHJlc29sdmUgYSBwYWNrYWdlIGxvY2F0aW9uIGZvciBiYXNlIGF0ICRiYXNlIik7CiAgfSBjYXRjaCAoZSwgcykgewogICAgaWYgKHRyYWNlTG9hZGluZykgewogICAgICBfbG9nKCJFcnJvciBsb2FkaW5nIHBhY2thZ2VzOiAkZVxuJHMiKTsKICAgIH0KICAgIHNwLnNlbmQoIlVuY2F1Z2h0IGVycm9yICgkZSkgbG9hZGluZyBwYWNrYWdlcyBmaWxlLiIpOwogIH0KfQoKRnV0dXJlPGJvb2w+IF9sb2FkSHR0cFBhY2thZ2VzRmlsZSgKICAgIFNlbmRQb3J0IHNwLCBib29sIHRyYWNlTG9hZGluZywgVXJpIHJlc291cmNlKSBhc3luYyB7CiAgdHJ5IHsKICAgIGlmIChfaHR0cENsaWVudCA9PSBudWxsKSB7CiAgICAgIF9odHRwQ2xpZW50ID0gbmV3IEh0dHBDbGllbnQoKS4ubWF4Q29ubmVjdGlvbnNQZXJIb3N0ID0gNjsKICAgIH0KICAgIGlmICh0cmFjZUxvYWRpbmcpIHsKICAgICAgX2xvZygiRmV0Y2hpbmcgcGFja2FnZXMgZmlsZSBmcm9tICckcmVzb3VyY2UnLiIpOwogICAgfQogICAgdmFyIHJlcSA9IGF3YWl0IF9odHRwQ2xpZW50LmdldFVybChyZXNvdXJjZSk7CiAgICB2YXIgcnNwID0gYXdhaXQgcmVxLmNsb3NlKCk7CiAgICB2YXIgYnVpbGRlciA9IG5ldyBCeXRlc0J1aWxkZXIoY29weTogZmFsc2UpOwogICAgYXdhaXQgZm9yICh2YXIgYnl0ZXMgaW4gcnNwKSB7CiAgICAgIGJ1aWxkZXIuYWRkKGJ5dGVzKTsKICAgIH0KICAgIGlmIChyc3Auc3RhdHVzQ29kZSAhPSAyMDApIHsKICAgICAgaWYgKHRyYWNlTG9hZGluZykgewogICAgICAgIF9sb2coIkdvdCBzdGF0dXMgJHtyc3Auc3RhdHVzQ29kZX0gZmV0Y2hpbmcgJyRyZXNvdXJjZScuIik7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdmFyIGRhdGEgPSBidWlsZGVyLnRha2VCeXRlcygpOwogICAgaWYgKHRyYWNlTG9hZGluZykgewogICAgICBfbG9nKCJMb2FkZWQgcGFja2FnZXMgZmlsZSBmcm9tICckcmVzb3VyY2UnOlxuIgogICAgICAgICAgIiR7bmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGRhdGEpfSIpOwogICAgfQogICAgX3BhcnNlUGFja2FnZXNGaWxlKHNwLCB0cmFjZUxvYWRpbmcsIHJlc291cmNlLCBkYXRhKTsKICB9IGNhdGNoIChlLCBzKSB7CiAgICBpZiAodHJhY2VMb2FkaW5nKSB7CiAgICAgIF9sb2coIkVycm9yIGxvYWRpbmcgcGFja2FnZXMgZmlsZSBmcm9tICckcmVzb3VyY2UnOiAkZVxuJHMiKTsKICAgIH0KICAgIHNwLnNlbmQoIlVuY2F1Z2h0IGVycm9yICgkZSkgbG9hZGluZyBwYWNrYWdlcyBmaWxlIGZyb20gJyRyZXNvdXJjZScuIik7CiAgfQogIHJldHVybiBmYWxzZTsKfQoKX2xvYWRQYWNrYWdlc0RhdGEoc3AsIHRyYWNlTG9hZGluZywgcmVzb3VyY2UpIHsKICB0cnkgewogICAgdmFyIGRhdGEgPSByZXNvdXJjZS5kYXRhOwogICAgdmFyIG1pbWUgPSBkYXRhLm1pbWVUeXBlOwogICAgaWYgKG1pbWUgIT0gInRleHQvcGxhaW4iKSB7CiAgICAgIHRocm93ICJNSU1FLXR5cGUgbXVzdCBiZSB0ZXh0L3BsYWluOiAkbWltZSBnaXZlbi4iOwogICAgfQogICAgdmFyIGNoYXJzZXQgPSBkYXRhLmNoYXJzZXQ7CiAgICBpZiAoKGNoYXJzZXQgIT0gInV0Zi04IikgJiYgKGNoYXJzZXQgIT0gIlVTLUFTQ0lJIikpIHsKICAgICAgLy8gVGhlIEMrKyBwb3J0aW9uIG9mIHRoZSBlbWJlZGRlciBhc3N1bWVzIFVURi04LgogICAgICB0aHJvdyAiT25seSB1dGYtOCBvciBVUy1BU0NJSSBlbmNvZGluZ3MgYXJlIHN1cHBvcnRlZDogJGNoYXJzZXQgZ2l2ZW4uIjsKICAgIH0KICAgIF9wYXJzZVBhY2thZ2VzRmlsZShzcCwgdHJhY2VMb2FkaW5nLCByZXNvdXJjZSwgZGF0YS5jb250ZW50QXNCeXRlcygpKTsKICB9IGNhdGNoIChlKSB7CiAgICBzcC5zZW5kKCJVbmNhdWdodCBlcnJvciAoJGUpIGxvYWRpbmcgcGFja2FnZXMgZGF0YS4iKTsKICB9Cn0KCi8vIFRoaXMgY29kZSB1c2VkIHRvIGV4aXN0IGluIGEgc2Vjb25kIGlzb2xhdGUgYW5kIHNvIGl0IHVzZXMgYSBTZW5kUG9ydCB0bwovLyByZXBvcnQgaXQncyByZXR1cm4gdmFsdWUuIFRoaXMgY291bGQgYmUgcmVmYWN0b3JlZCBzbyB0aGF0IGl0IHJldHVybnMgaXQncwovLyB2YWx1ZSBhbmQgdGhlIGNhbGxlciBjb3VsZCB3YWl0IG9uIHRoZSBmdXR1cmUgcmF0aGVyIHRoYW4gYSBtZXNzYWdlIG9uCi8vIFNlbmRQb3J0LgpfaGFuZGxlUGFja2FnZXNSZXF1ZXN0KAogICAgU2VuZFBvcnQgc3AsIGJvb2wgdHJhY2VMb2FkaW5nLCBpbnQgdGFnLCBVcmkgcmVzb3VyY2UpIGFzeW5jIHsKICB0cnkgewogICAgaWYgKHRhZyA9PSAtMSkgewogICAgICBpZiAocmVzb3VyY2Uuc2NoZW1lID09ICcnIHx8IHJlc291cmNlLnNjaGVtZSA9PSAnZmlsZScpIHsKICAgICAgICBfZmluZFBhY2thZ2VzRmlsZShzcCwgdHJhY2VMb2FkaW5nLCByZXNvdXJjZSk7CiAgICAgIH0gZWxzZSBpZiAoKHJlc291cmNlLnNjaGVtZSA9PSAnaHR0cCcpIHx8IChyZXNvdXJjZS5zY2hlbWUgPT0gJ2h0dHBzJykpIHsKICAgICAgICAvLyBUcnkgdG8gbG9hZCB0aGUgLnBhY2thZ2VzIGZpbGUgbmV4dCB0byB0aGUgcmVzb3VyY2UuCiAgICAgICAgdmFyIHBhY2thZ2VzVXJpID0gcmVzb3VyY2UucmVzb2x2ZSgiLnBhY2thZ2VzIik7CiAgICAgICAgdmFyIGV4aXN0cyA9IGF3YWl0IF9sb2FkSHR0cFBhY2thZ2VzRmlsZShzcCwgdHJhY2VMb2FkaW5nLCBwYWNrYWdlc1VyaSk7CiAgICAgICAgaWYgKCFleGlzdHMpIHsKICAgICAgICAgIC8vIExvYWRpbmcgb2YgdGhlIC5wYWNrYWdlcyBmaWxlIGZhaWxlZCBmb3IgaHR0cC9odHRwcyBiYXNlZCBzY3JpcHRzCiAgICAgICAgICBzcC5zZW5kKFtudWxsXSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHNwLnNlbmQoIlVuc3VwcG9ydGVkIHNjaGVtZSB1c2VkIHRvIGxvY2F0ZSAucGFja2FnZXMgZmlsZTogIgogICAgICAgICAgICAiJyRyZXNvdXJjZScuIik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodGFnID09IC0yKSB7CiAgICAgIGlmICh0cmFjZUxvYWRpbmcpIHsKICAgICAgICBfbG9nKCJIYW5kbGluZyBsb2FkIG9mIHBhY2thZ2VzIG1hcDogJyRyZXNvdXJjZScuIik7CiAgICAgIH0KICAgICAgaWYgKHJlc291cmNlLnNjaGVtZSA9PSAnJyB8fCByZXNvdXJjZS5zY2hlbWUgPT0gJ2ZpbGUnKSB7CiAgICAgICAgdmFyIGV4aXN0cyA9IGF3YWl0IG5ldyBGaWxlLmZyb21VcmkocmVzb3VyY2UpLmV4aXN0cygpOwogICAgICAgIGlmIChleGlzdHMpIHsKICAgICAgICAgIF9sb2FkUGFja2FnZXNGaWxlKHNwLCB0cmFjZUxvYWRpbmcsIHJlc291cmNlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3Auc2VuZCgiUGFja2FnZXMgZmlsZSAnJHJlc291cmNlJyBub3QgZm91bmQuIik7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKChyZXNvdXJjZS5zY2hlbWUgPT0gJ2h0dHAnKSB8fCAocmVzb3VyY2Uuc2NoZW1lID09ICdodHRwcycpKSB7CiAgICAgICAgdmFyIGV4aXN0cyA9IGF3YWl0IF9sb2FkSHR0cFBhY2thZ2VzRmlsZShzcCwgdHJhY2VMb2FkaW5nLCByZXNvdXJjZSk7CiAgICAgICAgaWYgKCFleGlzdHMpIHsKICAgICAgICAgIHNwLnNlbmQoIlBhY2thZ2VzIGZpbGUgJyRyZXNvdXJjZScgbm90IGZvdW5kLiIpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChyZXNvdXJjZS5zY2hlbWUgPT0gJ2RhdGEnKSB7CiAgICAgICAgX2xvYWRQYWNrYWdlc0RhdGEoc3AsIHRyYWNlTG9hZGluZywgcmVzb3VyY2UpOwogICAgICB9IGVsc2UgewogICAgICAgIHNwLnNlbmQoIlVua25vd24gc2NoZW1lICgke3Jlc291cmNlLnNjaGVtZX0pIGZvciBwYWNrYWdlIGZpbGUgYXQgIgogICAgICAgICAgICAiJyRyZXNvdXJjZScuIik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHNwLnNlbmQoIlVua25vd24gcGFja2FnZXMgcmVxdWVzdCB0YWc6ICR0YWcgZm9yICckcmVzb3VyY2UnLiIpOwogICAgfQogIH0gY2F0Y2ggKGUsIHMpIHsKICAgIGlmICh0cmFjZUxvYWRpbmcpIHsKICAgICAgX2xvZygiRXJyb3IgaGFuZGxpbmcgcGFja2FnZXMgcmVxdWVzdDogJGVcbiRzIik7CiAgICB9CiAgICBzcC5zZW5kKCJVbmNhdWdodCBlcnJvciAoJGUpIGhhbmRsaW5nIHBhY2thZ2VzIHJlcXVlc3QuIik7CiAgfQp9CgovLyBTaHV0ZG93biBhbGwgYWN0aXZlIGxvYWRlcnMgYnkgc2VuZGluZyBhbiBlcnJvciBtZXNzYWdlLgp2b2lkIHNodXRkb3duTG9hZGVycygpIHsKICBTdHJpbmcgbWVzc2FnZSA9ICdTZXJ2aWNlIHNodXRkb3duJzsKICBpZiAoX2h0dHBDbGllbnQgIT0gbnVsbCkgewogICAgX2h0dHBDbGllbnQuY2xvc2UoZm9yY2U6IHRydWUpOwogICAgX2h0dHBDbGllbnQgPSBudWxsOwogIH0KICBpc29sYXRlRW1iZWRkZXJEYXRhLnZhbHVlcy50b0xpc3QoKS5mb3JFYWNoKChpZWQpIHsKICAgIElzb2xhdGVMb2FkZXJTdGF0ZSBpbHMgPSBpZWQ7CiAgICBpbHMuY2xlYW51cCgpOwogICAgYXNzZXJ0KGlscy5zcCAhPSBudWxsKTsKICAgIF9zZW5kUmVzb3VyY2VSZXNwb25zZShpbHMuc3AsIDEsIG51bGwsIG51bGwsIG51bGwsIG1lc3NhZ2UpOwogIH0pOwp9CgovLyBTZWUgRGFydF9MaWJyYXJ5VGFnIGluIGRhcnRfYXBpLmgKY29uc3QgX0RhcnRfa0Nhbm9uaWNhbGl6ZVVybCA9IDA7IC8vIENhbm9uaWNhbGl6ZSB0aGUgVVJMLgpjb25zdCBfRGFydF9rU2NyaXB0VGFnID0gMTsgLy8gTG9hZCB0aGUgcm9vdCBzY3JpcHQuCmNvbnN0IF9EYXJ0X2tTb3VyY2VUYWcgPSAyOyAvLyBMb2FkIGEgcGFydCBzb3VyY2UuCmNvbnN0IF9EYXJ0X2tJbXBvcnRUYWcgPSAzOyAvLyBJbXBvcnQgYSBsaWJyYXJ5LgoKLy8gRXh0cmEgcmVxdWVzdHMuIEtlZXAgdGhlc2UgaW4gc3luYyBiZXR3ZWVuIGxvYWRlci5kYXJ0IGFuZCBidWlsdGluLmRhcnQuCmNvbnN0IF9EYXJ0X2tJbml0TG9hZGVyID0gNDsgLy8gSW5pdGlhbGl6ZSB0aGUgbG9hZGVyLgpjb25zdCBfRGFydF9rUmVzb3VyY2VMb2FkID0gNTsgLy8gUmVzb3VyY2UgY2xhc3Mgc3VwcG9ydC4KY29uc3QgX0RhcnRfa0dldFBhY2thZ2VSb290VXJpID0gNjsgLy8gVXJpIG9mIHRoZSBwYWNrYWdlcy8gZGlyZWN0b3J5Lgpjb25zdCBfRGFydF9rR2V0UGFja2FnZUNvbmZpZ1VyaSA9IDc7IC8vIFVyaSBvZiB0aGUgLnBhY2thZ2VzIGZpbGUuCmNvbnN0IF9EYXJ0X2tSZXNvbHZlUGFja2FnZVVyaSA9IDg7IC8vIFJlc29sdmUgYSBwYWNrYWdlOiB1cmkuCgovLyBFeHRyYSByZXF1ZXN0cy4gS2VlcCB0aGVzZSBpbiBzeW5jIGJldHdlZW4gbG9hZGVyLmRhcnQgYW5kIGxvYWRlci5jYy4KY29uc3QgX0RhcnRfa0ltcG9ydEV4dGVuc2lvbiA9IDk7IC8vIEltcG9ydCBhIGRhcnQtZXh0OiBmaWxlLgpjb25zdCBfRGFydF9rUmVzb2x2ZUFzRmlsZVBhdGggPSAxMDsgLy8gUmVzb2x2ZSB1cmkgdG8gZmlsZSBwYXRoLgoKLy8gRXh0ZXJuYWwgZW50cnkgcG9pbnQgZm9yIGxvYWRlciByZXF1ZXN0cy4KX3Byb2Nlc3NMb2FkUmVxdWVzdChyZXF1ZXN0KSB7CiAgYXNzZXJ0KHJlcXVlc3QgaXMgTGlzdCk7CiAgYXNzZXJ0KHJlcXVlc3QubGVuZ3RoID4gNCk7CgogIC8vIFNob3VsZCB3ZSB0cmFjZSBsb2FkaW5nPwogIGJvb2wgdHJhY2VMb2FkaW5nID0gcmVxdWVzdFswXTsKCiAgLy8gVGhpcyBpcyB0aGUgc2VuZGluZyBpc29sYXRlJ3MgRGFydF9HZXRNYWluUG9ydElkKCkuCiAgaW50IGlzb2xhdGVJZCA9IHJlcXVlc3RbMV07CgogIC8vIFRoZSB0YWcgZGVzY3JpYmluZyB0aGUgb3BlcmF0aW9uLgogIGludCB0YWcgPSByZXF1ZXN0WzJdOwoKICAvLyBUaGUgc2VuZCBwb3J0IHRvIHNlbmQgdGhlIHJlc3BvbnNlIG9uLgogIFNlbmRQb3J0IHNwID0gcmVxdWVzdFszXTsKCiAgLy8gR3JhYiB0aGUgbG9hZGVyIHN0YXRlIGZvciB0aGUgcmVxdWVzdGluZyBpc29sYXRlLgogIElzb2xhdGVMb2FkZXJTdGF0ZSBsb2FkZXJTdGF0ZSA9IGlzb2xhdGVFbWJlZGRlckRhdGFbaXNvbGF0ZUlkXTsKCiAgLy8gV2UgYXJlIGVpdGhlciBhYm91dCB0byBpbml0aWFsaXplIHRoZSBsb2FkZXIsIG9yLCB3ZSBhbHJlYWR5IGhhdmUuCiAgYXNzZXJ0KCh0YWcgPT0gX0RhcnRfa0luaXRMb2FkZXIpIHx8IChsb2FkZXJTdGF0ZSAhPSBudWxsKSk7CgogIC8vIEhhbmRsZSB0aGUgcmVxdWVzdCBzcGVjaWZpZWQgaW4gdGhlIHRhZy4KICBzd2l0Y2ggKHRhZykgewogICAgY2FzZSBfRGFydF9rSW5pdExvYWRlcjoKICAgICAgewogICAgICAgIFN0cmluZyBwYWNrYWdlUm9vdCA9IHJlcXVlc3RbNF07CiAgICAgICAgU3RyaW5nIHBhY2thZ2VzRmlsZSA9IHJlcXVlc3RbNV07CiAgICAgICAgU3RyaW5nIHdvcmtpbmdEaXJlY3RvcnkgPSByZXF1ZXN0WzZdOwogICAgICAgIFN0cmluZyByb290U2NyaXB0ID0gcmVxdWVzdFs3XTsKICAgICAgICBib29sIGlzUmVsb2FkaW5nID0gcmVxdWVzdFs4XTsKICAgICAgICBpZiAobG9hZGVyU3RhdGUgPT0gbnVsbCkgewogICAgICAgICAgbG9hZGVyU3RhdGUgPSBuZXcgSXNvbGF0ZUxvYWRlclN0YXRlKGlzb2xhdGVJZCk7CiAgICAgICAgICBpc29sYXRlRW1iZWRkZXJEYXRhW2lzb2xhdGVJZF0gPSBsb2FkZXJTdGF0ZTsKICAgICAgICAgIGxvYWRlclN0YXRlLmluaXQoCiAgICAgICAgICAgICAgcGFja2FnZVJvb3QsIHBhY2thZ2VzRmlsZSwgd29ya2luZ0RpcmVjdG9yeSwgcm9vdFNjcmlwdCk7CiAgICAgICAgfSBlbHNlIGlmIChpc1JlbG9hZGluZykgewogICAgICAgICAgbG9hZGVyU3RhdGUudXBkYXRlUGFja2FnZU1hcChwYWNrYWdlc0ZpbGUpOwogICAgICAgIH0KICAgICAgICBsb2FkZXJTdGF0ZS5zcCA9IHNwOwogICAgICAgIGFzc2VydChpc29sYXRlRW1iZWRkZXJEYXRhW2lzb2xhdGVJZF0gPT0gbG9hZGVyU3RhdGUpOwogICAgICB9CiAgICAgIGJyZWFrOwogICAgY2FzZSBfRGFydF9rUmVzb3VyY2VMb2FkOgogICAgICB7CiAgICAgICAgVXJpIHVyaSA9IFVyaS5wYXJzZShyZXF1ZXN0WzRdKTsKICAgICAgICBfaGFuZGxlUmVzb3VyY2VSZXF1ZXN0KAogICAgICAgICAgICBsb2FkZXJTdGF0ZSwgc3AsIHRyYWNlTG9hZGluZywgdGFnLCB1cmksIHVyaSwgbnVsbCk7CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBjYXNlIF9EYXJ0X2tHZXRQYWNrYWdlUm9vdFVyaToKICAgICAgbG9hZGVyU3RhdGUuX3RyaWdnZXJQYWNrYWdlUmVzb2x1dGlvbigoKSB7CiAgICAgICAgLy8gVGhlIHBhY2thZ2Ugcm9vdCBpcyBkZXByZWNhdGVkIGFuZCBub3cgYWx3YXlzIHJldHVybnMgbnVsbC4KICAgICAgICBzcC5zZW5kKG51bGwpOwogICAgICB9KTsKICAgICAgYnJlYWs7CiAgICBjYXNlIF9EYXJ0X2tHZXRQYWNrYWdlQ29uZmlnVXJpOgogICAgICBsb2FkZXJTdGF0ZS5fdHJpZ2dlclBhY2thZ2VSZXNvbHV0aW9uKCgpIHsKICAgICAgICAvLyBSZXNwb25kIHdpdGggdGhlIHBhY2thZ2VzIGNvbmZpZyAoaWYgYW55KSBhZnRlciBwYWNrYWdlIHJlc29sdXRpb24uCiAgICAgICAgc3Auc2VuZChsb2FkZXJTdGF0ZS5fcGFja2FnZUNvbmZpZyk7CiAgICAgIH0pOwogICAgICBicmVhazsKICAgIGNhc2UgX0RhcnRfa1Jlc29sdmVQYWNrYWdlVXJpOgogICAgICBVcmkgdXJpID0gVXJpLnBhcnNlKHJlcXVlc3RbNF0pOwogICAgICBsb2FkZXJTdGF0ZS5fdHJpZ2dlclBhY2thZ2VSZXNvbHV0aW9uKCgpIHsKICAgICAgICAvLyBSZXNwb25kIHdpdGggdGhlIHJlc29sdmVkIHBhY2thZ2UgdXJpIGFmdGVyIHBhY2thZ2UgcmVzb2x1dGlvbi4KICAgICAgICBVcmkgcmVzb2x2ZWRVcmk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHJlc29sdmVkVXJpID0gbG9hZGVyU3RhdGUuX3Jlc29sdmVQYWNrYWdlVXJpKHVyaSk7CiAgICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgICAgaWYgKHRyYWNlTG9hZGluZykgewogICAgICAgICAgICBfbG9nKCJFeGNlcHRpb24gKCRlKSB3aGVuIHJlc29sdmluZyBwYWNrYWdlIFVSSTogJHVyaSIpOwogICAgICAgICAgfQogICAgICAgICAgcmVzb2x2ZWRVcmkgPSBudWxsOwogICAgICAgIH0KICAgICAgICBzcC5zZW5kKHJlc29sdmVkVXJpKTsKICAgICAgfSk7CiAgICAgIGJyZWFrOwogICAgY2FzZSBfRGFydF9rSW1wb3J0RXh0ZW5zaW9uOgogICAgICBVcmkgdXJpID0gVXJpLnBhcnNlKHJlcXVlc3RbNF0pOwogICAgICBTdHJpbmcgbGlicmFyeVVyaSA9IHJlcXVlc3RbNV07CiAgICAgIC8vIFN0cmlwIGFueSBmaWxlbmFtZSBvZmYgb2YgdGhlIGxpYnJhcnlVcmkncyBwYXRoLgogICAgICBpbnQgaW5kZXggPSBsaWJyYXJ5VXJpLmxhc3RJbmRleE9mKCcvJyk7CiAgICAgIHZhciBwYXRoOwogICAgICBpZiAoaW5kZXggPT0gLTEpIHsKICAgICAgICBwYXRoID0gJy4vJzsKICAgICAgfSBlbHNlIHsKICAgICAgICBwYXRoID0gbGlicmFyeVVyaS5zdWJzdHJpbmcoMCwgaW5kZXggKyAxKTsKICAgICAgfQogICAgICB2YXIgcGF0aFVyaSA9IFVyaS5wYXJzZShwYXRoKTsKICAgICAgc3dpdGNoIChwYXRoVXJpLnNjaGVtZSkgewogICAgICAgIGNhc2UgJyc6CiAgICAgICAgY2FzZSAnZmlsZSc6CiAgICAgICAgICBfc2VuZEV4dGVuc2lvbkltcG9ydFJlc3BvbnNlKAogICAgICAgICAgICAgIHNwLCB1cmksIGxpYnJhcnlVcmksIHBhdGhVcmkudG9GaWxlUGF0aCgpKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2RhdGEnOgogICAgICAgIGNhc2UgJ2h0dHAnOgogICAgICAgIGNhc2UgJ2h0dHBzJzoKICAgICAgICAgIF9zZW5kRXh0ZW5zaW9uSW1wb3J0UmVzcG9uc2Uoc3AsIHVyaSwgbGlicmFyeVVyaSwgcGF0aFVyaS50b1N0cmluZygpKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ3BhY2thZ2UnOgogICAgICAgICAgLy8gU3RhcnQgcGFja2FnZSByZXNvbHV0aW9uLgogICAgICAgICAgbG9hZGVyU3RhdGUuX3RyaWdnZXJQYWNrYWdlUmVzb2x1dGlvbigoKSB7CiAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gZmluZCB0aGUgZnVsbHkgcmVzb2x2ZWQgdXJpIG9mIFtwYXRoXS4KICAgICAgICAgICAgVXJpIHJlc29sdmVkVXJpOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIHJlc29sdmVkVXJpID0gbG9hZGVyU3RhdGUuX3Jlc29sdmVQYWNrYWdlVXJpKHBhdGhVcmkpOwogICAgICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICAgICAgaWYgKHRyYWNlTG9hZGluZykgewogICAgICAgICAgICAgICAgX2xvZygiRXhjZXB0aW9uICgkZSkgd2hlbiByZXNvbHZpbmcgcGFja2FnZSBVUkk6ICR1cmkiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmVzb2x2ZWRVcmkgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9zZW5kRXh0ZW5zaW9uSW1wb3J0UmVzcG9uc2UoCiAgICAgICAgICAgICAgICBzcCwgdXJpLCBsaWJyYXJ5VXJpLCByZXNvbHZlZFVyaS50b1N0cmluZygpKTsKICAgICAgICAgIH0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGlmICh0cmFjZUxvYWRpbmcpIHsKICAgICAgICAgICAgX2xvZygnVW5rbm93biBzY2hlbWUgKCR7cGF0aFVyaS5zY2hlbWV9KSBpbiAkcGF0aFVyaS4nKTsKICAgICAgICAgIH0KICAgICAgICAgIF9zZW5kRXh0ZW5zaW9uSW1wb3J0UmVzcG9uc2Uoc3AsIHVyaSwgbGlicmFyeVVyaSwgbnVsbCk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgICBicmVhazsKICAgIGNhc2UgX0RhcnRfa1Jlc29sdmVBc0ZpbGVQYXRoOgogICAgICBsb2FkZXJTdGF0ZS5fdHJpZ2dlclBhY2thZ2VSZXNvbHV0aW9uKCgpIHsKICAgICAgICBTdHJpbmcgdXJpID0gcmVxdWVzdFs0XTsKICAgICAgICBVcmkgcmVzb2x2ZWRVcmkgPSBVcmkucGFyc2UoX3Nhbml0aXplV2luZG93c1BhdGgodXJpKSk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGlmIChyZXNvbHZlZFVyaS5zY2hlbWUgPT0gJ3BhY2thZ2UnKSB7CiAgICAgICAgICAgIHJlc29sdmVkVXJpID0gbG9hZGVyU3RhdGUuX3Jlc29sdmVQYWNrYWdlVXJpKHJlc29sdmVkVXJpKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChyZXNvbHZlZFVyaS5zY2hlbWUgPT0gJycgfHwgcmVzb2x2ZWRVcmkuc2NoZW1lID09ICdmaWxlJykgewogICAgICAgICAgICByZXNvbHZlZFVyaSA9IGxvYWRlclN0YXRlLl93b3JraW5nRGlyZWN0b3J5LnJlc29sdmVVcmkocmVzb2x2ZWRVcmkpOwogICAgICAgICAgICB2YXIgbXNnID0gbmV3IExpc3QoNSk7CiAgICAgICAgICAgIG1zZ1swXSA9IHRhZzsKICAgICAgICAgICAgbXNnWzFdID0gdXJpOwogICAgICAgICAgICBtc2dbMl0gPSByZXNvbHZlZFVyaS50b1N0cmluZygpOwogICAgICAgICAgICBtc2dbM10gPSBudWxsOwogICAgICAgICAgICBtc2dbNF0gPSByZXNvbHZlZFVyaS50b0ZpbGVQYXRoKCk7CiAgICAgICAgICAgIHNwLnNlbmQobXNnKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93ICJDYW5ub3QgcmVzb2x2ZSBzY2hlbWUgKCR7cmVzb2x2ZWRVcmkuc2NoZW1lfSkgdG8gZmlsZSBwYXRoIgogICAgICAgICAgICAgICAgIiBmb3IgJHJlc29sdmVkVXJpIjsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICB2YXIgbXNnID0gbmV3IExpc3QoNSk7CiAgICAgICAgICBtc2dbMF0gPSAtdGFnOwogICAgICAgICAgbXNnWzFdID0gdXJpOwogICAgICAgICAgbXNnWzJdID0gcmVzb2x2ZWRVcmkudG9TdHJpbmcoKTsKICAgICAgICAgIG1zZ1szXSA9IG51bGw7CiAgICAgICAgICBtc2dbNF0gPSBlLnRvU3RyaW5nKCk7CiAgICAgICAgICBzcC5zZW5kKG1zZyk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAg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IHN0YXRpYyBjb25zdCBpbnQgUEFSU0VfRVJST1JfQ09ERSA9IDQwMDA7CiAgc3RhdGljIGNvbnN0IGludCBCSU5BUllfTUVTU0FHRV9FUlJPUl9DT0RFID0gNDAwMTsKICBzdGF0aWMgY29uc3QgaW50IE5PVF9NQVBfRVJST1JfQ09ERSA9IDQwMDI7CiAgc3RhdGljIGNvbnN0IGludCBJRF9FUlJPUl9DT0RFID0gNDAwMzsKICBmaW5hbCBXZWJTb2NrZXQgc29ja2V0OwoKICBXZWJTb2NrZXRDbGllbnQodGhpcy5zb2NrZXQsIFZNU2VydmljZSBzZXJ2aWNlKSA6IHN1cGVyKHNlcnZpY2UpIHsKICAgIHNvY2tldC5saXN0ZW4oKG1lc3NhZ2UpID0+IG9uV2ViU29ja2V0TWVzc2FnZShtZXNzYWdlKSk7CiAgICBzb2NrZXQuZG9uZS50aGVuKChfKSA9PiBjbG9zZSgpKTsKICB9CgogIGRpc2Nvbm5lY3QoKSB7CiAgICBpZiAoc29ja2V0ICE9IG51bGwpIHsKICAgICAgc29ja2V0LmNsb3NlKCk7CiAgICB9CiAgfQoKICB2b2lkIG9uV2ViU29ja2V0TWVzc2FnZShtZXNzYWdlKSB7CiAgICBpZiAobWVzc2FnZSBpcyBTdHJpbmcpIHsKICAgICAgdmFyIG1hcDsKICAgICAgdHJ5IHsKICAgICAgICBtYXAgPSBqc29uLmRlY29kZShtZXNzYWdlKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIHNvY2tldC5jbG9zZShQQVJTRV9FUlJPUl9DT0RFLCAnTWVzc2FnZSBwYXJzZSBlcnJvcjogJGUnKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKG1hcCBpcyEgTWFwKSB7CiAgICAgICAgc29ja2V0LmNsb3NlKE5PVF9NQVBfRVJST1JfQ09ERSwgJ01lc3NhZ2UgbXVzdCBiZSBhIEpTT04gbWFwLicpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0cnkgewogICAgICAgIGZpbmFsIHJwYyA9IG5ldyBNZXNzYWdlLmZyb21Kc29uUnBjKHRoaXMsIG1hcCk7CiAgICAgICAgc3dpdGNoIChycGMudHlwZSkgewogICAgICAgICAgY2FzZSBNZXNzYWdlVHlwZS5SZXF1ZXN0OgogICAgICAgICAgICBvblJlcXVlc3QocnBjKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIE1lc3NhZ2VUeXBlLk5vdGlmaWNhdGlvbjoKICAgICAgICAgICAgb25Ob3RpZmljYXRpb24ocnBjKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIE1lc3NhZ2VUeXBlLlJlc3BvbnNlOgogICAgICAgICAgICBvblJlc3BvbnNlKHJwYyk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIHNvY2tldC5jbG9zZShJRF9FUlJPUl9DT0RFLCBlLm1lc3NhZ2UpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBzb2NrZXQuY2xvc2UoQklOQVJZX01FU1NBR0VfRVJST1JfQ09ERSwgJ01lc3NhZ2UgbXVzdCBiZSBhIHN0cmluZy4nKTsKICAgIH0KICB9CgogIHZvaWQgcG9zdChSZXNwb25zZSByZXN1bHQpIHsKICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgewogICAgICAvLyBEbyBub3RoaW5nLgogICAgICByZXR1cm47CiAgICB9CiAgICB0cnkgewogICAgICBzd2l0Y2ggKHJlc3VsdC5raW5kKSB7CiAgICAgICAgY2FzZSBSZXNwb25zZVBheWxvYWRLaW5kLlN0cmluZzoKICAgICAgICBjYXNlIFJlc3BvbnNlUGF5bG9hZEtpbmQuQmluYXJ5OgogICAgICAgICAgc29ja2V0LmFkZChyZXN1bHQucGF5bG9hZCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFJlc3BvbnNlUGF5bG9hZEtpbmQuVXRmOFN0cmluZzoKICAgICAgICAgIHNvY2tldC5hZGRVdGY4VGV4dChyZXN1bHQucGF5bG9hZCk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfSBvbiBTdGF0ZUVycm9yIGNhdGNoIChfKSB7CiAgICAgIC8vIFZNIGhhcyBzaHV0ZG93biwgZG8gbm90aGluZy4KICAgICAgcmV0dXJuOwogICAgfQogIH0KCiAgZHluYW1pYyB0b0pzb24oKSB7CiAgICBNYXAgbWFwID0gc3VwZXIudG9Kc29uKCk7CiAgICBtYXBbJ3R5cGUnXSA9ICdXZWJTb2NrZXRDbGllbnQnOwogICAgbWFwWydzb2NrZXQnXSA9ICckc29ja2V0JzsKICAgIHJldHVybiBtYXA7CiAgfQp9CgpjbGFzcyBIdHRwUmVxdWVzdENsaWVudCBleHRlbmRzIENsaWVudCB7CiAgc3RhdGljIENvbnRlbnRUeXBlIGpzb25Db250ZW50VHlwZSA9CiAgICAgIG5ldyBDb250ZW50VHlwZSgiYXBwbGljYXRpb24iLCAianNvbiIsIGNoYXJzZXQ6ICJ1dGYtOCIpOwogIGZpbmFsIEh0dHBSZXF1ZXN0IHJlcXVlc3Q7CgogIEh0dHBSZXF1ZXN0Q2xpZW50KHRoaXMucmVxdWVzdCwgVk1TZXJ2aWNlIHNlcnZpY2UpCiAgICAgIDogc3VwZXIoc2VydmljZSwgc2VuZEV2ZW50czogZmFsc2UpOwoKICBkaXNjb25uZWN0KCkgewogICAgcmVxdWVzdC5yZXNwb25zZS5jbG9zZSgpOwogICAgY2xvc2UoKTsKICB9CgogIHZvaWQgcG9zdChSZXNwb25zZSByZXN1bHQpIHsKICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgewogICAgICBjbG9zZSgpOwogICAgICByZXR1cm47CiAgICB9CiAgICBIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSByZXF1ZXN0LnJlc3BvbnNlOwogICAgLy8gV2UgY2xvc2VkIHRoZSBjb25uZWN0aW9uIGZvciBiYWQgb3JpZ2lucyBlYXJsaWVyLgogICAgcmVzcG9uc2UuaGVhZGVycy5hZGQoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsICcqJyk7CiAgICByZXNwb25zZS5oZWFkZXJzLmNvbnRlbnRUeXBlID0ganNvbkNvbnRlbnRUeXBlOwogICAgc3dpdGNoIChyZXN1bHQua2luZCkgewogICAgICBjYXNlIFJlc3BvbnNlUGF5bG9hZEtpbmQuU3RyaW5nOgogICAgICAgIHJlc3BvbnNlLndyaXRlKHJlc3VsdC5wYXlsb2FkKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBSZXNwb25zZVBheWxvYWRLaW5kLlV0ZjhTdHJpbmc6CiAgICAgICAgcmVzcG9uc2UuYWRkKHJlc3VsdC5wYXlsb2FkKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBSZXNwb25zZVBheWxvYWRLaW5kLkJpbmFyeToKICAgICAgICB0aHJvdyAnQ2FuIG5vdCBoYW5kbGUgYmluYXJ5IHJlc3BvbnNlcyc7CiAgICB9CiAgICByZXNwb25zZS5jbG9zZSgpOwogICAgY2xvc2UoKTsKICB9CgogIGR5bmFtaWMgdG9Kc29uKCkgewogICAgTWFwIG1hcCA9IHN1cGVyLnRvSnNvbigpOwogICAgbWFwWyd0eXBlJ10gPSAnSHR0cFJlcXVlc3RDbGllbnQnOwogICAgbWFwWydyZXF1ZXN0J10gPSAnJHJlcXVlc3QnOwogICAgcmV0dXJuIG1hcDsKICB9Cn0KCmNsYXNzIFNlcnZlciB7CiAgc3RhdGljIGNvbnN0IFdFQlNPQ0tFVF9QQVRIID0gJy93cyc7CiAgc3RhdGljIGNvbnN0IFJPT1RfUkVESVJFQ1RfUEFUSCA9ICcvaW5kZXguaHRtbCc7CgogIGZpbmFsIFZNU2VydmljZSBfc2VydmljZTsKICBmaW5hbCBTdHJpbmcgX2lwOwogIGZpbmFsIGludCBfcG9ydDsKICBmaW5hbCBib29sIF9vcmlnaW5DaGVja0Rpc2FibGVkOwogIGZpbmFsIGJvb2wgX2F1dGhDb2Rlc0Rpc2FibGVkOwogIEh0dHBTZXJ2ZXIgX3NlcnZlcjsKICBib29sIGdldCBydW5uaW5nID0+IF9zZXJ2ZXIgIT0gbnVsbDsKCiAgLy8vIFJldHVybnMgdGhlIHNlcnZlciBhZGRyZXNzIGluY2x1ZGluZyB0aGUgYXV0aCB0b2tlbi4KICBVcmkgZ2V0IHNlcnZlckFkZHJlc3MgewogICAgaWYgKCFydW5uaW5nKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgdmFyIGlwID0gX3NlcnZlci5hZGRyZXNzLmFkZHJlc3M7CiAgICB2YXIgcG9ydCA9IF9zZXJ2ZXIucG9ydDsKICAgIHZhciBwYXRoID0gIV9hdXRoQ29kZXNEaXNhYmxlZCA/ICIkc2VydmljZUF1dGhUb2tlbi8iIDogIi8iOwogICAgcmV0dXJuIG5ldyBVcmkoc2NoZW1lOiAnaHR0cCcsIGhvc3Q6IGlwLCBwb3J0OiBwb3J0LCBwYXRoOiBwYXRoKTsKICB9CgogIC8vIE9uIEZ1Y2hzaWEsIGF1dGhlbnRpY2F0aW9uIGNvZGVzIGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0LiBUbyBlbmFibGUsIHRoZSBhdXRoZW50aWNhdGlvbiB0b2tlbgogIC8vIHdvdWxkIGhhdmUgdG8gYmUgd3JpdHRlbiBpbnRvIHRoZSBodWIgYWxvbmdzaWRlIHRoZSBwb3J0IG51bWJlci4KICBTZXJ2ZXIodGhpcy5fc2VydmljZSwgdGhpcy5faXAsIHRoaXMuX3BvcnQsIHRoaXMuX29yaWdpbkNoZWNrRGlzYWJsZWQsCiAgICAgIGJvb2wgYXV0aENvZGVzRGlzYWJsZWQpCiAgICAgIDogX2F1dGhDb2Rlc0Rpc2FibGVkID0gKGF1dGhDb2Rlc0Rpc2FibGVkIHx8IFBsYXRmb3JtLmlzRnVjaHNpYSk7CgogIGJvb2wgX2lzQWxsb3dlZE9yaWdpbihTdHJpbmcgb3JpZ2luKSB7CiAgICBVcmkgdXJpOwogICAgdHJ5IHsKICAgICAgdXJpID0gVXJpLnBhcnNlKG9yaWdpbik7CiAgICB9IGNhdGNoIChfKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvLyBFeHBsaWNpdGx5IGFkZCBsb2NhbGhvc3QgYW5kIDEyNy4wLjAuMSBvbiBhbnkgcG9ydCAobmVjZXNzYXJ5IGZvcgogICAgLy8gYWRiIHBvcnQgZm9yd2FyZGluZykuCiAgICBpZiAoKHVyaS5ob3N0ID09ICdsb2NhbGhvc3QnKSB8fAogICAgICAgICh1cmkuaG9zdCA9PSAnOjoxJykgfHwKICAgICAgICAodXJpLmhvc3QgPT0gJzEyNy4wLjAuMScpKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIGlmICgodXJpLnBvcnQgPT0gX3NlcnZlci5wb3J0KSAmJgogICAgICAgICgodXJpLmhvc3QgPT0gX3NlcnZlci5hZGRyZXNzLmFkZHJlc3MpIHx8CiAgICAgICAgICAgICh1cmkuaG9zdCA9PSBfc2VydmVyLmFkZHJlc3MuaG9zdCkpKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgX29yaWdpbkNoZWNrKEh0dHBSZXF1ZXN0IHJlcXVlc3QpIHsKICAgIGlmIChfb3JpZ2luQ2hlY2tEaXNhYmxlZCkgewogICAgICAvLyBBbHdheXMgYWxsb3cuCiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgLy8gRmlyc3QgY2hlY2sgdGhlIHdlYi1zb2NrZXQgc3BlY2lmaWMgb3JpZ2luLgogICAgTGlzdDxTdHJpbmc+IG9yaWdpbnMgPSByZXF1ZXN0LmhlYWRlcnNbIlNlYy1XZWJTb2NrZXQtT3JpZ2luIl07CiAgICBpZiAob3JpZ2lucyA9PSBudWxsKSB7CiAgICAgIC8vIEZhbGwgYmFjayB0byB0aGUgZ2VuZXJhbCBPcmlnaW4gZmllbGQuCiAgICAgIG9yaWdpbnMgPSByZXF1ZXN0LmhlYWRlcnNbIk9yaWdpbiJdOwogICAgfQogICAgaWYgKG9yaWdpbnMgPT0gbnVsbCkgewogICAgICAvLyBObyBvcmlnaW4gc2VudC4gVGhpcyBpcyBhIG5vbi1icm93c2VyIGNsaWVudCBvciBhIHNhbWUtb3JpZ2luIHJlcXVlc3QuCiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZm9yIChTdHJpbmcgb3JpZ2luIGluIG9yaWdpbnMpIHsKICAgICAgaWYgKF9pc0FsbG93ZWRPcmlnaW4ob3JpZ2luKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLy8gQ2hlY2tzIHRoZSBbcmVxdWVzdFVyaV0gZm9yIHRoZSBzZXJ2aWNlIGF1dGggdG9rZW4gYW5kIHJldHVybnMgdGhlIHBhdGgKICAvLy8gYXMgYSBTdHJpbmcuIElmIHRoZSBzZXJ2aWNlIGF1dGggdG9rZW4gY2hlY2sgZmFpbHMsIHJldHVybnMgbnVsbC4KICAvLy8gUmV0dXJucyBhIFVyaSBpZiBhIHJlZGlyZWN0IGlzIHJlcXVpcmVkLgogIGR5bmFtaWMgX2NoZWNrQXV0aFRva2VuQW5kR2V0UGF0aChVcmkgcmVxdWVzdFVyaSkgewogICAgaWYgKF9hdXRoQ29kZXNEaXNhYmxlZCkgewogICAgICByZXR1cm4gcmVxdWVzdFVyaS5wYXRoID09ICcvJyA/IFJPT1RfUkVESVJFQ1RfUEFUSCA6IHJlcXVlc3RVcmkucGF0aDsKICAgIH0KICAgIGZpbmFsIExpc3Q8U3RyaW5nPiByZXF1ZXN0UGF0aFNlZ21lbnRzID0gcmVxdWVzdFVyaS5wYXRoU2VnbWVudHM7CiAgICBpZiAocmVxdWVzdFBhdGhTZWdtZW50cy5pc0VtcHR5KSB7CiAgICAgIC8vIE1hbGZvcm1lZC4KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICAvLyBDaGVjayB0aGF0IHdlIHdlcmUgZ2l2ZW4gdGhlIGF1dGggdG9rZW4uCiAgICBmaW5hbCBTdHJpbmcgYXV0aFRva2VuID0gcmVxdWVzdFBhdGhTZWdtZW50c1swXTsKICAgIGlmIChhdXRoVG9rZW4gIT0gc2VydmljZUF1dGhUb2tlbikgewogICAgICAvLyBNYWxmb3JtZWQuCiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgLy8gTWlzc2luZyBhIHRyYWlsaW5nICcvJy4gV2UnbGwgbmVlZCB0byByZWRpcmVjdCB0byBzZXJ2ZQogICAgLy8gUk9PVF9SRURJUkVDVF9QQVRIIGNvcnJlY3RseSwgb3RoZXJ3aXNlIHRoZSByZXNwb25zZSBpcyBtaXNpbnRlcnByZXRlZC4KICAgIGlmIChyZXF1ZXN0UGF0aFNlZ21lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIC8vIHJlcXVlc3RQYXRoU2VnbWVudHMgaXMgdW5tb2RpZmlhYmxlLiBDb3B5IGl0LgogICAgICBmaW5hbCBMaXN0PFN0cmluZz4gcGF0aFNlZ21lbnRzID0gPFN0cmluZz5bXS4uYWRkQWxsKHJlcXVlc3RQYXRoU2VnbWVudHMpOwoKICAgICAgLy8gQWRkaW5nIGFuIGVtcHR5IHN0cmluZyB0byB0aGUgcGF0aCBzZWdtZW50cyByZXN1bHRzIGluIHRoZSBwYXRoIGhhdmluZwogICAgICAvLyBhIHRyYWlsaW5nICcvJy4KICAgICAgcGF0aFNlZ21lbnRzLmFkZCgnJyk7CgogICAgICByZXR1cm4gcmVxdWVzdFVyaS5yZXBsYWNlKHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzKTsKICAgIH0KICAgIC8vIENvbnN0cnVjdCB0aGUgYWN0dWFsIHJlcXVlc3QgcGF0aCBieSBjaG9wcGluZyBvZmYgdGhlIGF1dGggdG9rZW4uCiAgICByZXR1cm4gKHJlcXVlc3RQYXRoU2VnbWVudHNbMV0gPT0gJycpCiAgICAgICAgPyBST09UX1JFRElSRUNUX1BBVEgKICAgICAgICA6ICcvJHtyZXF1ZXN0UGF0aFNlZ21lbnRzLnN1Ymxpc3QoMSkuam9pbignLycpfSc7CiAgfQoKICBGdXR1cmUgX3JlcXVlc3RIYW5kbGVyKEh0dHBSZXF1ZXN0IHJlcXVlc3QpIGFzeW5jIHsKICAgIGlmICghX29yaWdpbkNoZWNrKHJlcXVlc3QpKSB7CiAgICAgIC8vIFRoaXMgaXMgYSBjcm9zcyBvcmlnaW4gYXR0ZW1wdCB0byBjb25uZWN0CiAgICAgIHJlcXVlc3QucmVzcG9uc2Uuc3RhdHVzQ29kZSA9IEh0dHBTdGF0dXMuZm9yYmlkZGVuOwogICAgICByZXF1ZXN0LnJlc3BvbnNlLndyaXRlKCJmb3JiaWRkZW4gb3JpZ2luIik7CiAgICAgIHJlcXVlc3QucmVzcG9uc2UuY2xvc2UoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHJlcXVlc3QubWV0aG9kID09ICdQVVQnKSB7CiAgICAgIC8vIFBVVCByZXF1ZXN0cyBhcmUgZm9yd2FyZGVkIHRvIERldkZTIGZvciBwcm9jZXNzaW5nLgoKICAgICAgTGlzdCBmc05hbWVMaXN0OwogICAgICBMaXN0IGZzUGF0aExpc3Q7CiAgICAgIExpc3QgZnNQYXRoQmFzZTY0TGlzdDsKICAgICAgTGlzdCBmc1VyaUJhc2U2NExpc3Q7CiAgICAgIE9iamVjdCBmc05hbWU7CiAgICAgIE9iamVjdCBmc1BhdGg7CiAgICAgIE9iamVjdCBmc1VyaTsKCiAgICAgIHRyeSB7CiAgICAgICAgLy8gRXh0cmFjdCB0aGUgZnMgbmFtZSBhbmQgZnMgcGF0aCBmcm9tIHRoZSByZXF1ZXN0IGhlYWRlcnMuCiAgICAgICAgZnNOYW1lTGlzdCA9IHJlcXVlc3QuaGVhZGVyc1snZGV2X2ZzX25hbWUnXTsKICAgICAgICBmc05hbWUgPSBmc05hbWVMaXN0WzBdOwoKICAgICAgICAvLyBQcmVmZXIgVXJpIGVuY29kaW5nIGZpcnN0LgogICAgICAgIGZzVXJpQmFzZTY0TGlzdCA9IHJlcXVlc3QuaGVhZGVyc1snZGV2X2ZzX3VyaV9iNjQnXTsKICAgICAgICBpZiAoKGZzVXJpQmFzZTY0TGlzdCAhPSBudWxsKSAmJiAoZnNVcmlCYXNlNjRMaXN0Lmxlbmd0aCA+IDApKSB7CiAgICAgICAgICBTdHJpbmcgZGVjb2RlZEZzVXJpID0gdXRmOC5kZWNvZGUoYmFzZTY0LmRlY29kZShmc1VyaUJhc2U2NExpc3RbMF0pKTsKICAgICAgICAgIGZzVXJpID0gVXJpLnBhcnNlKGRlY29kZWRGc1VyaSk7CiAgICAgICAgfQoKICAgICAgICAvLyBGYWxsYmFjayB0byBwYXRoIGVuY29kaW5nLgogICAgICAgIGlmIChmc1VyaSA9PSBudWxsKSB7CiAgICAgICAgICBmc1BhdGhMaXN0ID0gcmVxdWVzdC5oZWFkZXJzWydkZXZfZnNfcGF0aCddOwogICAgICAgICAgZnNQYXRoQmFzZTY0TGlzdCA9IHJlcXVlc3QuaGVhZGVyc1snZGV2X2ZzX3BhdGhfYjY0J107CiAgICAgICAgICAvLyBJZiB0aGUgJ2Rldl9mc19wYXRoX2I2NCcgaGVhZGVyIGZpZWxkIHdhcyBzZW50LCB1c2UgdGhhdCBpbnN0ZWFkLgogICAgICAgICAgaWYgKChmc1BhdGhCYXNlNjRMaXN0ICE9IG51bGwpICYmIChmc1BhdGhCYXNlNjRMaXN0Lmxlbmd0aCA+IDApKSB7CiAgICAgICAgICAgIGZzUGF0aCA9IHV0ZjguZGVjb2RlKGJhc2U2NC5kZWNvZGUoZnNQYXRoQmFzZTY0TGlzdFswXSkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZnNQYXRoID0gZnNQYXRoTGlzdFswXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGUpIHsvKiBpZ25vcmUgKi99CgogICAgICBTdHJpbmcgcmVzdWx0OwogICAgICB0cnkgewogICAgICAgIHJlc3VsdCA9IGF3YWl0IF9zZXJ2aWNlLmRldmZzLmhhbmRsZVB1dFN0cmVhbShmc05hbWUsIGZzUGF0aCwgZnNVcmksCiAgICAgICAgICAgIHJlcXVlc3QuY2FzdDxMaXN0PGludD4+KCkudHJhbnNmb3JtKEdaSVAuZGVjb2RlcikpOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgcmVxdWVzdC5yZXNwb25zZS5zdGF0dXNDb2RlID0gSHR0cFN0YXR1cy5pbnRlcm5hbFNlcnZlckVycm9yOwogICAgICAgIHJlcXVlc3QucmVzcG9uc2Uud3JpdGUoZSk7CiAgICAgICAgcmVxdWVzdC5yZXNwb25zZS5jbG9zZSgpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7CiAgICAgICAgcmVxdWVzdC5yZXNwb25zZS5oZWFkZXJzLmNvbnRlbnRUeXBlID0KICAgICAgICAgICAgSHR0cFJlcXVlc3RDbGllbnQuanNvbkNvbnRlbnRUeXBlOwogICAgICAgIHJlcXVlc3QucmVzcG9uc2Uud3JpdGUocmVzdWx0KTsKICAgICAgfQogICAgICByZXF1ZXN0LnJlc3BvbnNlLmNsb3NlKCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPSAnR0VUJykgewogICAgICAvLyBOb3QgYSBHRVQgcmVxdWVzdC4gRG8gbm90aGluZy4KICAgICAgcmVxdWVzdC5yZXNwb25zZS5zdGF0dXNDb2RlID0gSHR0cFN0YXR1cy5tZXRob2ROb3RBbGxvd2VkOwogICAgICByZXF1ZXN0LnJlc3BvbnNlLndyaXRlKCJtZXRob2Qgbm90IGFsbG93ZWQiKTsKICAgICAgcmVxdWVzdC5yZXNwb25zZS5jbG9zZSgpOwogICAgICByZXR1cm47CiAgICB9CgogICAgZmluYWwgZHluYW1pYyByZXN1bHQgPSBfY2hlY2tBdXRoVG9rZW5BbmRHZXRQYXRoKHJlcXVlc3QudXJpKTsKICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgewogICAgICAvLyBFaXRoZXIgbm8gYXV0aGVudGljYXRpb24gY29kZSB3YXMgcHJvdmlkZWQgd2hlbiBvbmUgd2FzIGV4cGVjdGVkIG9yIGFuCiAgICAgIC8vIGluY29ycmVjdCBhdXRoZW50aWNhdGlvbiBjb2RlIHdhcyBwcm92aWRlZC4KICAgICAgcmVxdWVzdC5yZXNwb25zZS5zdGF0dXNDb2RlID0gSHR0cFN0YXR1cy5mb3JiaWRkZW47CiAgICAgIHJlcXVlc3QucmVzcG9uc2Uud3JpdGUoIm1pc3Npbmcgb3IgaW52YWxpZCBhdXRoZW50aWNhdGlvbiBjb2RlIik7CiAgICAgIHJlcXVlc3QucmVzcG9uc2UuY2xvc2UoKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmIChyZXN1bHQgaXMgVXJpKSB7CiAgICAgIC8vIFRoZSBVUkkgY29udGFpbnMgdGhlIHZhbGlkIGF1dGggdG9rZW4gYnV0IGlzIG1pc3NpbmcgYSB0cmFpbGluZyAnLycuCiAgICAgIC8vIFJlZGlyZWN0IHRvIHRoZSBzYW1lIFVSSSB3aXRoIHRoZSB0cmFpbGluZyAnLycgdG8gY29ycmVjdGx5IHNlcnZlCiAgICAgIC8vIGluZGV4Lmh0bWwuCiAgICAgIHJlcXVlc3QucmVzcG9uc2UucmVkaXJlY3QocmVzdWx0IGFzIFVyaSk7CiAgICAgIHJlcXVlc3QucmVzcG9uc2UuY2xvc2UoKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGZpbmFsIFN0cmluZyBwYXRoID0gcmVzdWx0OwogICAgaWYgKHBhdGggPT0gV0VCU09DS0VUX1BBVEgpIHsKICAgICAgV2ViU29ja2V0VHJhbnNmb3JtZXIudXBncmFkZShyZXF1ZXN0KS50aGVuKChXZWJTb2NrZXQgd2ViU29ja2V0KSB7CiAgICAgICAgbmV3IFdlYlNvY2tldENsaWVudCh3ZWJTb2NrZXQsIF9zZXJ2aWNlKTsKICAgICAgfSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoYXNzZXRzID09IG51bGwpIHsKICAgICAgcmVxdWVzdC5yZXNwb25zZS5oZWFkZXJzLmNvbnRlbnRUeXBlID0gQ29udGVudFR5cGUuVEVYVDsKICAgICAgcmVxdWVzdC5yZXNwb25zZS53cml0ZSgiVGhpcyBWTSB3YXMgYnVpbHQgd2l0aG91dCB0aGUgT2JzZXJ2YXRvcnkgVUkuIik7CiAgICAgIHJlcXVlc3QucmVzcG9uc2UuY2xvc2UoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgQXNzZXQgYXNzZXQgPSBhc3NldHNbcGF0aF07CiAgICBpZiAoYXNzZXQgIT0gbnVsbCkgewogICAgICAvLyBTZXJ2aW5nIHVwIGEgc3RhdGljIGFzc2V0IChlLmcuIC5jc3MsIC5odG1sLCAucG5nKS4KICAgICAgcmVxdWVzdC5yZXNwb25zZS5oZWFkZXJzLmNvbnRlbnRUeXBlID0gQ29udGVudFR5cGUucGFyc2UoYXNzZXQubWltZVR5cGUpOwogICAgICByZXF1ZXN0LnJlc3BvbnNlLmFkZChhc3NldC5kYXRhKTsKICAgICAgcmVxdWVzdC5yZXNwb25zZS5jbG9zZSgpOwogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBIVFRQIGJhc2VkIHNlcnZpY2UgcmVxdWVzdC4KICAgIGZpbmFsIGNsaWVudCA9IG5ldyBIdHRwUmVxdWVzdENsaWVudChyZXF1ZXN0LCBfc2VydmljZSk7CiAgICBmaW5hbCBtZXNzYWdlID0gbmV3IE1lc3NhZ2UuZnJvbVVyaSgKICAgICAgICBjbGllbnQsIFVyaShwYXRoOiBwYXRoLCBxdWVyeVBhcmFtZXRlcnM6IHJlcXVlc3QudXJpLnF1ZXJ5UGFyYW1ldGVycykpOwogICAgY2xpZW50Lm9uUmVxdWVzdChtZXNzYWdlKTsgLy8gZXhjZXB0aW9uIGZyZWUsIG5vIG5lZWQgdG8gdHJ5IGNhdGNoCiAgfQoKICBGdXR1cmUgc3RhcnR1cCgpIGFzeW5jIHsKICAgIGlmIChfc2VydmVyICE9IG51bGwpIHsKICAgICAgLy8gQWxyZWFkeSBydW5uaW5nLgogICAgICByZXR1cm4gdGhpczsKICAgIH0KCiAgICAvLyBTdGFydHVwIEhUVFAgc2VydmVyLgogICAgdmFyIHBvbGxFcnJvcjsKICAgIHZhciBwb2xsU3RhY2s7CiAgICBGdXR1cmU8Ym9vbD4gcG9sbCgpIGFzeW5jIHsKICAgICAgdHJ5IHsKICAgICAgICB2YXIgYWRkcmVzczsKICAgICAgICB2YXIgYWRkcmVzc2VzID0gYXdhaXQgSW50ZXJuZXRBZGRyZXNzLmxvb2t1cChfaXApOwogICAgICAgIC8vIFByZWZlciBJUHY0IGFkZHJlc3Nlcy4KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFkZHJlc3Nlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgYWRkcmVzcyA9IGFkZHJlc3Nlc1tpXTsKICAgICAgICAgIGlmIChhZGRyZXNzLnR5cGUgPT0gSW50ZXJuZXRBZGRyZXNzVHlwZS5JUF9WNCkgYnJlYWs7CiAgICAgICAgfQogICAgICAgIF9zZXJ2ZXIgPSBhd2FpdCBIdHRwU2VydmVyLmJpbmQoYWRkcmVzcywgX3BvcnQpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9IGNhdGNoIChlLCBzdCkgewogICAgICAgIHBvbGxFcnJvciA9IGU7CiAgICAgICAgcG9sbFN0YWNrID0gc3Q7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CgogICAgLy8gcG9sbCBmb3IgdGhlIG5ldHdvcmsgZm9yIH4xMCBzZWNvbmRzLgogICAgaW50IGF0dGVtcHRzID0gMDsKICAgIGZpbmFsIGludCBtYXhBdHRlbXB0cyA9IDEwOwogICAgd2hpbGUgKCFhd2FpdCBwb2xsKCkpIHsKICAgICAgYXR0ZW1wdHMrKzsKICAgICAgc2VydmVyUHJpbnQoIk9ic2VydmF0b3J5IHNlcnZlciBmYWlsZWQgdG8gc3RhcnQgYWZ0ZXIgJGF0dGVtcHRzIHRyaWVzIik7CiAgICAgIGlmIChhdHRlbXB0cyA+IG1heEF0dGVtcHRzKSB7CiAgICAgICAgc2VydmVyUHJpbnQoJ0NvdWxkIG5vdCBzdGFydCBPYnNlcnZhdG9yeSBIVFRQIHNlcnZlcjpcbicKICAgICAgICAgICAgJyRwb2xsRXJyb3JcbiRwb2xsU3RhY2tcbicpOwogICAgICAgIF9ub3RpZnlTZXJ2ZXJTdGF0ZSgiIik7CiAgICAgICAgb25TZXJ2ZXJBZGRyZXNzQ2hhbmdlKG51bGwpOwogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CiAgICAgIGF3YWl0IG5ldyBGdXR1cmU8TnVsbD4uZGVsYXllZChjb25zdCBEdXJhdGlvbihzZWNvbmRzOiAxKSk7CiAgICB9CiAgICBpZiAoX3NlcnZpY2UuaXNFeGl0aW5nKSB7CiAgICAgIHNlcnZlclByaW50KCdPYnNlcnZhdG9yeSBIVFRQIHNlcnZlciBleGl0aW5nIGJlZm9yZSBsaXN0ZW5pbmcgYXMgJwogICAgICAgICAgJ3ZtIHNlcnZpY2UgaGFzIHJlY2VpdmVkIGV4aXQgcmVxdWVzdFxuJyk7CiAgICAgIGF3YWl0IHNodXRkb3duKHRydWUpOwogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIF9zZXJ2ZXIubGlzdGVuKF9yZXF1ZXN0SGFuZGxlciwgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICBzZXJ2ZXJQcmludCgnT2JzZXJ2YXRvcnkgbGlzdGVuaW5nIG9uICRzZXJ2ZXJBZGRyZXNzJyk7CiAgICBpZiAoUGxhdGZvcm0uaXNGdWNoc2lhKSB7CiAgICAgIC8vIENyZWF0ZSBhIGZpbGUgd2l0aCB0aGUgcG9ydCBudW1iZXIuCiAgICAgIFN0cmluZyB0bXAgPSBEaXJlY3Rvcnkuc3lzdGVtVGVtcC5wYXRoOwogICAgICBTdHJpbmcgcGF0aCA9ICIkdG1wL2RhcnQuc2VydmljZXMvJHtfc2VydmVyLnBvcnR9IjsKICAgICAgc2VydmVyUHJpbnQoIkNyZWF0aW5nICRwYXRoIik7CiAgICAgIG5ldyBGaWxlKHBhdGgpLi5jcmVhdGVTeW5jKHJlY3Vyc2l2ZTogdHJ1ZSk7CiAgICB9CiAgICAvLyBTZXJ2ZXIgaXMgdXAgYW5kIHJ1bm5pbmcuCiAgICBfbm90aWZ5U2VydmVyU3RhdGUoc2VydmVyQWRkcmVzcy50b1N0cmluZygpKTsKICAgIG9uU2VydmVyQWRkcmVzc0NoYW5nZSgnJHNlcnZlckFkZHJlc3MnKTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgRnV0dXJlIGNsZWFudXAoYm9vbCBmb3JjZSkgewogICAgaWYgKF9zZXJ2ZXIgPT0gbnVsbCkgewogICAgICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZShudWxsKTsKICAgIH0KICAgIGlmIChQbGF0Zm9ybS5pc0Z1Y2hzaWEpIHsKICAgICAgLy8gUmVtb3ZlIHRoZSBmaWxlIHdpdGggdGhlIHBvcnQgbnVtYmVyLgogICAgICBTdHJpbmcgdG1wID0gRGlyZWN0b3J5LnN5c3RlbVRlbXAucGF0aDsKICAgICAgU3RyaW5nIHBhdGggPSAiJHRtcC9kYXJ0LnNlcnZpY2VzLyR7X3NlcnZlci5wb3J0fSI7CiAgICAgIHNlcnZlclByaW50KCJEZWxldGluZyAkcGF0aCIpOwogICAgICBuZXcgRmlsZShwYXRoKS4uZGVsZXRlU3luYygpOwogICAgfQogICAgcmV0dXJuIF9zZXJ2ZXIuY2xvc2UoZm9yY2U6IGZvcmNlKTsKICB9CgogIEZ1dHVyZSBzaHV0ZG93bihib29sIGZvcmNlZCkgewogICAgaWYgKF9zZXJ2ZXIgPT0gbnVsbCkgewogICAgICAvLyBOb3Qgc3RhcnRlZC4KICAgICAgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUodGhpcyk7CiAgICB9CgogICAgLy8gU2h1dGRvd24gSFRUUCBzZXJ2ZXIgYW5kIHN1YnNjcmlwdGlvbi4KICAgIFVyaSBvbGRTZXJ2ZXJBZGRyZXNzID0gc2VydmVyQWRkcmVzczsKICAgIHJldHVybiBjbGVhbnVwKGZvcmNlZCkudGhlbigoXykgewogICAgICBzZXJ2ZXJQcmludCgnT2JzZXJ2YXRvcnkgbm8gbG9uZ2VyIGxpc3RlbmluZyBvbiAkb2xkU2VydmVyQWRkcmVzcycpOwogICAgICBfc2VydmVyID0gbnVsbDsKICAgICAgX25vdGlmeVNlcnZlclN0YXRlKCIiKTsKICAgICAgb25TZXJ2ZXJBZGRyZXNzQ2hhbmdlKG51bGwpOwogICAgICByZXR1cm4gdGhpczsKICAgIH0pLmNhdGNoRXJyb3IoKGUsIHN0KSB7CiAgICAgIF9zZXJ2ZXIgPSBudWxsOwogICAgICBzZXJ2ZXJQcmludCgnQ291bGQgbm90IHNodXRkb3duIE9ic2VydmF0b3J5IEhUVFAgc2VydmVyOlxuJGVcbiRzdFxuJyk7CiAgICAgIF9ub3RpZnlTZXJ2ZXJTdGF0ZSgiIik7CiAgICAgIG9uU2VydmVyQWRkcmVzc0NoYW5nZShudWxsKTsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9KTsKICB9Cn0KCnZvaWQgX25vdGlmeVNlcnZlclN0YXRlKFN0cmluZyB1cmkpIG5hdGl2ZSAiVk1TZXJ2aWNlSU9fTm90aWZ5U2VydmVyU3RhdGUiOwqB2wBOTjwBFgFPAR0bKgwEDAIBJyw1LikaAUU9JgQBERoWBgQBJR0PDCQUQxAIGUkQCAw4HCQcEykhEyUdEwoUMAgNTAYEAR8aFQ4GCh0pKSYRLS4RCCAmDgYEARUeJR8QBAIBKSdAHQE1KwERHg0EAR8aDw4GLjk+NBsnKA8rJg8nMQYWDQQBFR4nIRAEAgEPJzMBHBQTIyEWJwE7GhQTBiYdQUYEAWNGSR5IASkNCh8SFAYBSR0lHyUTBgEmMjMTBgESBAErIBcTBjNEGzArBhtQEwYlJhUIBhIEAU5ILzYeTAZGJxQTBjA1KRQTBj9PKzdRAVAZHAE9BkkqHToEATYiMzoyIA4GIz0BFxcdHBUVFAEMRTUgASY9SVArCgEmHTdBT01GEyQMCiEBFQxNQBRGIyIQCAEcLy8oCCAOBiMoQTQgDgYBQxpQNTpIIA4gTksVMCAOBgEgIkkyCg4GARo/TyAOBiAZPVAoIA4GIz0pUEcEARsbGhMGARwTEyAMFTsiNSJACjkVGBcYFggGAS0WIBwSTyRBKSAlFQhCBh5JNRwTBjo8Hi0uOiUzBiEyLREEAR8bJQYeLy46JSQGKAQBIRsWJQYBLiomSxYeIxMcFk0eIxMIBAIBTAEdZGFydDp2bXNlcnZpY2VfaW8vc2VydmVyLmRhcnQ0b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL3Ztc2VydmljZS92bXNlcnZpY2UuZGFydMAAU1svLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0Ll92bXNlcnZpY2U7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnOwppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbic7CmltcG9ydCAnZGFydDpjb252ZXJ0JzsKaW1wb3J0ICdkYXJ0Omlzb2xhdGUnOwppbXBvcnQgJ2RhcnQ6bWF0aCc7CmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJzsKCnBhcnQgJ2Fzc2V0LmRhcnQnOwpwYXJ0ICdjbGllbnQuZGFydCc7CnBhcnQgJ2RldmZzLmRhcnQnOwpwYXJ0ICdjb25zdGFudHMuZGFydCc7CnBhcnQgJ3J1bm5pbmdfaXNvbGF0ZS5kYXJ0JzsKcGFydCAncnVubmluZ19pc29sYXRlcy5kYXJ0JzsKcGFydCAnbWVzc2FnZS5kYXJ0JzsKcGFydCAnbWVzc2FnZV9yb3V0ZXIuZGFydCc7CnBhcnQgJ25hbWVkX2xvb2t1cC5kYXJ0JzsKCmZpbmFsIFJhd1JlY2VpdmVQb3J0IGlzb2xhdGVDb250cm9sUG9ydCA9IG5ldyBSYXdSZWNlaXZlUG9ydCgpOwpmaW5hbCBSYXdSZWNlaXZlUG9ydCBzY3JpcHRMb2FkUG9ydCA9IG5ldyBSYXdSZWNlaXZlUG9ydCgpOwoKYWJzdHJhY3QgY2xhc3MgSXNvbGF0ZUVtYmVkZGVyRGF0YSB7CiAgdm9pZCBjbGVhbnVwKCk7Cn0KClN0cmluZyBfbWFrZUF1dGhUb2tlbigpIHsKICBmaW5hbCBrVG9rZW5CeXRlU2l6ZSA9IDg7CiAgVWludDhMaXN0IGJ5dGVzID0gbmV3IFVpbnQ4TGlzdChrVG9rZW5CeXRlU2l6ZSk7CiAgUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20uc2VjdXJlKCk7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBrVG9rZW5CeXRlU2l6ZTsgaSsrKSB7CiAgICBieXRlc1tpXSA9IHJhbmRvbS5uZXh0SW50KDI1Nik7CiAgfQogIHJldHVybiBiYXNlNjRVcmwuZW5jb2RlKGJ5dGVzKTsKfQoKLy8gVGhlIHJhbmRvbWx5IGdlbmVyYXRlZCBhdXRoIHRva2VuIHVzZWQgdG8gYWNjZXNzIHRoZSBWTSBzZXJ2aWNlLgpmaW5hbCBTdHJpbmcgc2VydmljZUF1dGhUb2tlbiA9IF9tYWtlQXV0aFRva2VuKCk7CgovLyBUaGlzIGlzIGZvciB1c2UgYnkgdGhlIGVtYmVkZGVyLiBJdCBpcyBhIG1hcCBmcm9tIHRoZSBpc29sYXRlSWQgdG8KLy8gYW55dGhpbmcgaW1wbGVtZW50aW5nIElzb2xhdGVFbWJlZGRlckRhdGEuIFdoZW4gYW4gaXNvbGF0ZSBnb2VzIGF3YXksCi8vIHRoZSBjbGVhbnVwIG1ldGhvZCB3aWxsIGJlIGludm9rZWQgYWZ0ZXIgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBtYXAuCmZpbmFsIE1hcDxpbnQsIElzb2xhdGVFbWJlZGRlckRhdGE+IGlzb2xhdGVFbWJlZGRlckRhdGEgPQogICAgbmV3IE1hcDxpbnQsIElzb2xhdGVFbWJlZGRlckRhdGE+KCk7CgovLyBUaGVzZSBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSBkZWNsYXJhdGlvbnMgaW4gdm0vanNvbl9zdHJlYW0uaC4KY29uc3Qga1BhcnNlRXJyb3IgPSAtMzI3MDA7CmNvbnN0IGtJbnZhbGlkUmVxdWVzdCA9IC0zMjYwMDsKY29uc3Qga01ldGhvZE5vdEZvdW5kID0gLTMyNjAxOwpjb25zdCBrSW52YWxpZFBhcmFtcyA9IC0zMjYwMjsKY29uc3Qga0ludGVybmFsRXJyb3IgPSAtMzI2MDM7Cgpjb25zdCBrRXh0ZW5zaW9uRXJyb3IgPSAtMzIwMDA7Cgpjb25zdCBrRmVhdHVyZURpc2FibGVkID0gMTAwOwpjb25zdCBrQ2Fubm90QWRkQnJlYWtwb2ludCA9IDEwMjsKY29uc3Qga1N0cmVhbUFscmVhZHlTdWJzY3JpYmVkID0gMTAzOwpjb25zdCBrU3RyZWFtTm90U3Vic2NyaWJlZCA9IDEwNDsKY29uc3Qga0lzb2xhdGVNdXN0QmVSdW5uYWJsZSA9IDEwNTsKY29uc3Qga0lzb2xhdGVNdXN0QmVQYXVzZWQgPSAxMDY7CmNvbnN0IGtDYW5ub3RSZXN1bWUgPSAxMDc7CmNvbnN0IGtJc29sYXRlSXNSZWxvYWRpbmcgPSAxMDg7CmNvbnN0IGtJc29sYXRlUmVsb2FkQmFycmVkID0gMTA5Owpjb25zdCBrSXNvbGF0ZU11c3RIYXZlUmVsb2FkZWQgPSAxMTA7CmNvbnN0IGtTZXJ2aWNlQWxyZWFkeVJlZ2lzdGVyZWQgPSAxMTE7CmNvbnN0IGtTZXJ2aWNlRGlzYXBwZWFyZWQgPSAxMTI7CmNvbnN0IGtFeHByZXNzaW9uQ29tcGlsYXRpb25FcnJvciA9IDExMzsKY29uc3Qga0ludmFsaWRUaW1lbGluZVJlcXVlc3QgPSAxMTQ7CgovLyBFeHBlcmltZW50YWwgKHVzZWQgaW4gcHJpdmF0ZSBycGNzKS4KY29uc3Qga0ZpbGVTeXN0ZW1BbHJlYWR5RXhpc3RzID0gMTAwMTsKY29uc3Qga0ZpbGVTeXN0ZW1Eb2VzTm90RXhpc3QgPSAxMDAyOwpjb25zdCBrRmlsZURvZXNOb3RFeGlzdCA9IDEwMDM7Cgp2YXIgX2Vycm9yTWVzc2FnZXMgPSB7CiAga0ludmFsaWRQYXJhbXM6ICdJbnZhbGlkIHBhcmFtcycsCiAga0ludGVybmFsRXJyb3I6ICdJbnRlcm5hbCBlcnJvcicsCiAga0ZlYXR1cmVEaXNhYmxlZDogJ0ZlYXR1cmUgaXMgZGlzYWJsZWQnLAogIGtTdHJlYW1BbHJlYWR5U3Vic2NyaWJlZDogJ1N0cmVhbSBhbHJlYWR5IHN1YnNjcmliZWQnLAogIGtTdHJlYW1Ob3RTdWJzY3JpYmVkOiAnU3RyZWFtIG5vdCBzdWJzY3JpYmVkJywKICBrRmlsZVN5c3RlbUFscmVhZHlFeGlzdHM6ICdGaWxlIHN5c3RlbSBhbHJlYWR5IGV4aXN0cycsCiAga0ZpbGVTeXN0ZW1Eb2VzTm90RXhpc3Q6ICdGaWxlIHN5c3RlbSBkb2VzIG5vdCBleGlzdCcsCiAga0ZpbGVEb2VzTm90RXhpc3Q6ICdGaWxlIGRvZXMgbm90IGV4aXN0JywKICBrU2VydmljZUFscmVhZHlSZWdpc3RlcmVkOiAnU2VydmljZSBhbHJlYWR5IHJlZ2lzdGVyZWQnLAogIGtTZXJ2aWNlRGlzYXBwZWFyZWQ6ICdTZXJ2aWNlIGhhcyBkaXNhcHBlYXJlZCcsCiAga0V4cHJlc3Npb25Db21waWxhdGlvbkVycm9yOiAnRXhwcmVzc2lvbiBjb21waWxhdGlvbiBlcnJvcicsCiAga0ludmFsaWRUaW1lbGluZVJlcXVlc3Q6ICdUaGUgdGltZWxpbmUgcmVsYXRlZCByZXF1ZXN0IGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQnCiAgICAgICdkdWUgdG8gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbicsCn07CgpTdHJpbmcgZW5jb2RlUnBjRXJyb3IoTWVzc2FnZSBtZXNzYWdlLCBpbnQgY29kZSwge1N0cmluZyBkZXRhaWxzfSkgewogIHZhciByZXNwb25zZSA9IHsKICAgICdqc29ucnBjJzogJzIuMCcsCiAgICAnaWQnOiBtZXNzYWdlLnNlcmlhbCwKICAgICdlcnJvcic6IHsKICAgICAgJ2NvZGUnOiBjb2RlLAogICAgICAnbWVzc2FnZSc6IF9lcnJvck1lc3NhZ2VzW2NvZGVdLAogICAgfSwKICB9OwogIGlmIChkZXRhaWxzICE9IG51bGwpIHsKICAgIHJlc3BvbnNlWydlcnJvciddWydkYXRhJ10gPSB7CiAgICAgICdkZXRhaWxzJzogZGV0YWlscywKICAgIH07CiAgfQogIHJldHVybiBqc29uLmVuY29kZShyZXNwb25zZSk7Cn0KClN0cmluZyBlbmNvZGVNaXNzaW5nUGFyYW1FcnJvcihNZXNzYWdlIG1lc3NhZ2UsIFN0cmluZyBwYXJhbSkgewogIHJldHVybiBlbmNvZGVScGNFcnJvcihtZXNzYWdlLCBrSW52YWxpZFBhcmFtcywKICAgICAgZGV0YWlsczogIiR7bWVzc2FnZS5tZXRob2R9IGV4cGVjdHMgdGhlICcke3BhcmFtfScgcGFyYW1ldGVyIik7Cn0KClN0cmluZyBlbmNvZGVJbnZhbGlkUGFyYW1FcnJvcihNZXNzYWdlIG1lc3NhZ2UsIFN0cmluZyBwYXJhbSkgewogIHZhciB2YWx1ZSA9IG1lc3NhZ2UucGFyYW1zW3BhcmFtXTsKICByZXR1cm4gZW5jb2RlUnBjRXJyb3IobWVzc2FnZSwga0ludmFsaWRQYXJhbXMsCiAgICAgIGRldGFpbHM6ICIke21lc3NhZ2UubWV0aG9kfTogaW52YWxpZCAnJHtwYXJhbX0nIHBhcmFtZXRlcjogJHt2YWx1ZX0iKTsKfQoKU3RyaW5nIGVuY29kZUNvbXBpbGF0aW9uRXJyb3IoTWVzc2FnZSBtZXNzYWdlLCBTdHJpbmcgZGlhZ25vc3RpYykgewogIHJldHVybiBlbmNvZGVScGNFcnJvcihtZXNzYWdlLCBrRXhwcmVzc2lvbkNvbXBpbGF0aW9uRXJyb3IsCiAgICAgIGRldGFpbHM6IGRpYWdub3N0aWMpOwp9CgpTdHJpbmcgZW5jb2RlUmVzdWx0KE1lc3NhZ2UgbWVzc2FnZSwgTWFwIHJlc3VsdCkgewogIHZhciByZXNwb25zZSA9IHsKICAgICdqc29ucnBjJzogJzIuMCcsCiAgICAnaWQnOiBtZXNzYWdlLnNlcmlhbCwKICAgICdyZXN1bHQnOiByZXN1bHQsCiAgfTsKICByZXR1cm4ganNvbi5lbmNvZGUocmVzcG9uc2UpOwp9CgpTdHJpbmcgZW5jb2RlU3VjY2VzcyhNZXNzYWdlIG1lc3NhZ2UpIHsKICByZXR1cm4gZW5jb2RlUmVzdWx0KG1lc3NhZ2UsIHsndHlwZSc6ICdTdWNjZXNzJ30pOwp9Cgpjb25zdCBzaG9ydERlbGF5ID0gY29uc3QgRHVyYXRpb24obWlsbGlzZWNvbmRzOiAxMCk7CgovLy8gQ2FsbGVkIHdoZW4gdGhlIHNlcnZlciBzaG91bGQgYmUgc3RhcnRlZC4KdHlwZWRlZiBGdXR1cmUgU2VydmVyU3RhcnRDYWxsYmFjaygpOwoKLy8vIENhbGxlZCB3aGVuIHRoZSBzZXJ2ZXIgc2hvdWxkIGJlIHN0b3BwZWQuCnR5cGVkZWYgRnV0dXJlIFNlcnZlclN0b3BDYWxsYmFjaygpOwoKLy8vIENhbGxlZCB3aGVuIHRoZSBzZXJ2aWNlIGlzIGV4aXRpbmcuCnR5cGVkZWYgRnV0dXJlIENsZWFudXBDYWxsYmFjaygpOwoKLy8vIENhbGxlZCB0byBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5CnR5cGVkZWYgRnV0dXJlPFVyaT4gQ3JlYXRlVGVtcERpckNhbGxiYWNrKFN0cmluZyBiYXNlKTsKCi8vLyBDYWxsZWQgdG8gZGVsZXRlIGEgZGlyZWN0b3J5CnR5cGVkZWYgRnV0dXJlIERlbGV0ZURpckNhbGxiYWNrKFVyaSBwYXRoKTsKCi8vLyBDYWxsZWQgdG8gd3JpdGUgYSBmaWxlLgp0eXBlZGVmIEZ1dHVyZSBXcml0ZUZpbGVDYWxsYmFjayhVcmkgcGF0aCwgTGlzdDxpbnQ+IGJ5dGVzKTsKCi8vLyBDYWxsZWQgdG8gd3JpdGUgYSBzdHJlYW0gaW50byBhIGZpbGUuCnR5cGVkZWYgRnV0dXJlIFdyaXRlU3RyZWFtRmlsZUNhbGxiYWNrKFVyaSBwYXRoLCBTdHJlYW08TGlzdDxpbnQ+PiBieXRlcyk7CgovLy8gQ2FsbGVkIHRvIHJlYWQgYSBmaWxlLgp0eXBlZGVmIEZ1dHVyZTxMaXN0PGludD4+IFJlYWRGaWxlQ2FsbGJhY2soVXJpIHBhdGgpOwoKLy8vIENhbGxlZCB0byBsaXN0IGFsbCBmaWxlcyB1bmRlciBzb21lIHBhdGguCnR5cGVkZWYgRnV0dXJlPExpc3Q8TWFwPFN0cmluZywgZHluYW1pYz4+PiBMaXN0RmlsZXNDYWxsYmFjayhVcmkgcGF0aCk7CgovLy8gQ2FsbGVkIHdoZW4gd2UgbmVlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VydmVyLgp0eXBlZGVmIEZ1dHVyZTxVcmk+IFNlcnZlckluZm9ybWFtZXNzYWdlX3JvdXRlcnRpb25DYWxsYmFjaygpOwoKLy8vIENhbGxlZCB3aGVuIHdlIG5lZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlcnZlci4KdHlwZWRlZiBGdXR1cmU8VXJpPiBTZXJ2ZXJJbmZvcm1hdGlvbkNhbGxiYWNrKCk7CgovLy8gQ2FsbGVkIHdoZW4gd2Ugd2FudCB0byBbZW5hYmxlXSBvciBkaXNhYmxlIHRoZSB3ZWIgc2VydmVyLgp0eXBlZGVmIEZ1dHVyZTxVcmk+IFdlYlNlcnZlckNvbnRyb2xDYWxsYmFjayhib29sIGVuYWJsZSk7CgovLy8gSG9va3MgdGhhdCBhcmUgc2V0dXAgYnkgdGhlIGVtYmVkZGVyLgpjbGFzcyBWTVNlcnZpY2VFbWJlZGRlckhvb2tzIHsKICBzdGF0aWMgU2VydmVyU3RhcnRDYWxsYmFjayBzZXJ2ZXJTdGFydDsKICBzdGF0aWMgU2VydmVyU3RvcENhbGxiYWNrIHNlcnZlclN0b3A7CiAgc3RhdGljIENsZWFudXBDYWxsYmFjayBjbGVhbnVwOwogIHN0YXRpYyBDcmVhdGVUZW1wRGlyQ2FsbGJhY2sgY3JlYXRlVGVtcERpcjsKICBzdGF0aWMgRGVsZXRlRGlyQ2FsbGJhY2sgZGVsZXRlRGlyOwogIHN0YXRpYyBXcml0ZUZpbGVDYWxsYmFjayB3cml0ZUZpbGU7CiAgc3RhdGljIFdyaXRlU3RyZWFtRmlsZUNhbGxiYWNrIHdyaXRlU3RyZWFtRmlsZTsKICBzdGF0aWMgUmVhZEZpbGVDYWxsYmFjayByZWFkRmlsZTsKICBzdGF0aWMgTGlzdEZpbGVzQ2FsbGJhY2sgbGlzdEZpbGVzOwogIHN0YXRpYyBTZXJ2ZXJJbmZvcm1hdGlvbkNhbGxiYWNrIHNlcnZlckluZm9ybWF0aW9uOwogIHN0YXRpYyBXZWJTZXJ2ZXJDb250cm9sQ2FsbGJhY2sgd2ViU2VydmVyQ29udHJvbDsKfQoKY2xhc3MgVk1TZXJ2aWNlIGV4dGVuZHMgTWVzc2FnZVJvdXRlciB7CiAgc3RhdGljIFZNU2VydmljZSBfaW5zdGFuY2U7CgogIHN0YXRpYyBjb25zdCBzZXJ2aWNlTmFtZXNwYWNlID0gJ3MnOwoKICAvLy8gQ29sbGVjdGlvbiBvZiBjdXJyZW50bHkgY29ubmVjdGVkIGNsaWVudHMuCiAgZmluYWwgTmFtZWRMb29rdXA8Q2xpZW50PiBjbGllbnRzID0KICAgICAgbmV3IE5hbWVkTG9va3VwPENsaWVudD4ocHJvbG9ndWU6IHNlcnZpY2VOYW1lc3BhY2UpOwogIGZpbmFsIElkR2VuZXJhdG9yIF9zZXJ2aWNlUmVxdWVzdHMgPSBuZXcgSWRHZW5lcmF0b3IocHJvbG9ndWU6ICdzcicpOwoKICAvLy8gQ29sbGVjdGlvbiBvZiBjdXJyZW50bHkgcnVubmluZyBpc29sYXRlcy4KICBSdW5uaW5nSXNvbGF0ZXMgcnVubmluZ0lzb2xhdGVzID0gbmV3IFJ1bm5pbmdJc29sYXRlcygpOwoKICAvLy8gRmxhZyB0byBpbmRpY2F0ZSBWTSBzZXJ2aWNlIGlzIGV4aXRpbmcuCiAgYm9vbCBpc0V4aXRpbmcgPSBmYWxzZTsKCiAgLy8vIEEgcG9ydCB1c2VkIHRvIHJlY2VpdmUgZXZlbnRzIGZyb20gdGhlIFZNLgogIGZpbmFsIFJhd1JlY2VpdmVQb3J0IGV2ZW50UG9ydDsKCiAgZmluYWwgZGV2ZnMgPSBuZXcgRGV2RlMoKTsKCiAgdm9pZCBfYWRkQ2xpZW50KENsaWVudCBjbGllbnQpIHsKICAgIGFzc2VydChjbGllbnQuc3RyZWFtcy5pc0VtcHR5KTsKICAgIGFzc2VydChjbGllbnQuc2VydmljZXMuaXNFbXB0eSk7CiAgICBjbGllbnRzLmFkZChjbGllbnQpOwogIH0KCiAgdm9pZCBfcmVtb3ZlQ2xpZW50KENsaWVudCBjbGllbnQpIHsKICAgIGZpbmFsIG5hbWVzcGFjZSA9IGNsaWVudHMua2V5T2YoY2xpZW50KTsKICAgIGNsaWVudHMucmVtb3ZlKGNsaWVudCk7CiAgICBmb3IgKHZhciBzdHJlYW1JZCBpbiBjbGllbnQuc3RyZWFtcykgewogICAgICBpZiAoIV9pc0FueUNsaWVudFN1YnNjcmliZWQoc3RyZWFtSWQpKSB7CiAgICAgICAgX3ZtQ2FuY2VsU3RyZWFtKHN0cmVhbUlkKTsKICAgICAgfQogICAgfQogICAgZm9yICh2YXIgc2VydmljZSBpbiBjbGllbnQuc2VydmljZXMua2V5cykgewogICAgICBfZXZlbnRNZXNzYWdlSGFuZGxlcigKICAgICAgICAgICdTZXJ2aWNlJywKICAgICAgICAgIG5ldyBSZXNwb25zZS5qc29uKHsKICAgICAgICAgICAgJ2pzb25ycGMnOiAnMi4wJywKICAgICAgICAgICAgJ21ldGhvZCc6ICdzdHJlYW1Ob3RpZnknLAogICAgICAgICAgICAncGFyYW1zJzogewogICAgICAgICAgICAgICdzdHJlYW1JZCc6ICdTZXJ2aWNlJywKICAgICAgICAgICAgICAnZXZlbnQnOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJFdmVudCIsCiAgICAgICAgICAgICAgICAia2luZCI6ICJTZXJ2aWNlVW5yZWdpc3RlcmVkIiwKICAgICAgICAgICAgICAgICd0aW1lc3RhbXAnOiBuZXcgRGF0ZVRpbWUubm93KCkubWlsbGlzZWNvbmRzU2luY2VFcG9jaCwKICAgICAgICAgICAgICAgICdzZXJ2aWNlJzogc2VydmljZSwKICAgICAgICAgICAgICAgICdtZXRob2QnOiBuYW1lc3BhY2UgKyAnLicgKyBzZXJ2aWNlLAogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSkpOwogICAgfQogICAgLy8gQ29tcGxldGUgYWxsIHJlcXVlc3RzIGFzIGZhaWxlZAogICAgZm9yICh2YXIgaGFuZGxlIGluIGNsaWVudC5zZXJ2aWNlSGFuZGxlcy52YWx1ZXMpIHsKICAgICAgaGFuZGxlKG51bGwpOwogICAgfQogIH0KCiAgdm9pZCBfZXZlbnRNZXNzYWdlSGFuZGxlcihTdHJpbmcgc3RyZWFtSWQsIFJlc3BvbnNlIGV2ZW50KSB7CiAgICBmb3IgKHZhciBjbGllbnQgaW4gY2xpZW50cykgewogICAgICBpZiAoY2xpZW50LnNlbmRFdmVudHMgJiYgY2xpZW50LnN0cmVhbXMuY29udGFpbnMoc3RyZWFtSWQpKSB7CiAgICAgICAgY2xpZW50LnBvc3QoZXZlbnQpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIF9jb250cm9sTWVzc2FnZUhhbmRsZXIoaW50IGNvZGUsIGludCBwb3J0SWQsIFNlbmRQb3J0IHNwLCBTdHJpbmcgbmFtZSkgewogICAgc3dpdGNoIChjb2RlKSB7CiAgICAgIGNhc2UgQ29uc3RhbnRzLklTT0xBVEVfU1RBUlRVUF9NRVNTQUdFX0lEOgogICAgICAgIHJ1bm5pbmdJc29sYXRlcy5pc29sYXRlU3RhcnR1cChwb3J0SWQsIHNwLCBuYW1lKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBDb25zdGFudHMuSVNPTEFURV9TSFVURE9XTl9NRVNTQUdFX0lEOgogICAgICAgIHJ1bm5pbmdJc29sYXRlcy5pc29sYXRlU2h1dGRvd24ocG9ydElkLCBzcCk7CiAgICAgICAgSXNvbGF0ZUVtYmVkZGVyRGF0YSBpZWQgPSBpc29sYXRlRW1iZWRkZXJEYXRhLnJlbW92ZShwb3J0SWQpOwogICAgICAgIGlmIChpZWQgIT0gbnVsbCkgewogICAgICAgICAgaWVkLmNsZWFudXAoKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICB9CiAgfQoKICBGdXR1cmU8TnVsbD4gX3NlcnZlck1lc3NhZ2VIYW5kbGVyKGludCBjb2RlLCBTZW5kUG9ydCBzcCwgYm9vbCBlbmFibGUpIGFzeW5jIHsKICAgIHN3aXRjaCAoY29kZSkgewogICAgICBjYXNlIENvbnN0YW50cy5XRUJfU0VSVkVSX0NPTlRST0xfTUVTU0FHRV9JRDoKICAgICAgICBpZiAoVk1TZXJ2aWNlRW1iZWRkZXJIb29rcy53ZWJTZXJ2ZXJDb250cm9sID09IG51bGwpIHsKICAgICAgICAgIHNwLnNlbmQobnVsbCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIFVyaSB1cmkgPSBhd2FpdCBWTVNlcnZpY2VFbWJlZGRlckhvb2tzLndlYlNlcnZlckNvbnRyb2woZW5hYmxlKTsKICAgICAgICBzcC5zZW5kKHVyaSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ29uc3RhbnRzLlNFUlZFUl9JTkZPX01FU1NBR0VfSUQ6CiAgICAgICAgaWYgKFZNU2VydmljZUVtYmVkZGVySG9va3Muc2VydmVySW5mb3JtYXRpb24gPT0gbnVsbCkgewogICAgICAgICAgc3Auc2VuZChudWxsKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgVXJpIHVyaSA9IGF3YWl0IFZNU2VydmljZUVtYmVkZGVySG9va3Muc2VydmVySW5mb3JtYXRpb24oKTsKICAgICAgICBzcC5zZW5kKHVyaSk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgfQoKICBGdXR1cmU8TnVsbD4gX2hhbmRsZU5hdGl2ZVJwY0NhbGwobWVzc2FnZSwgU2VuZFBvcnQgcmVwbHlQb3J0KSBhc3luYyB7CiAgICAvLyBLZWVwIGluIHN5bmMgd2l0aCAicnVudGltZS92bS9zZXJ2aWNlX2lzb2xhdGUuY2M6SW52b2tlU2VydmljZVJwYyIuCiAgICBSZXNwb25zZSByZXNwb25zZTsKCiAgICB0cnkgewogICAgICBmaW5hbCBNZXNzYWdlIHJwYyA9IG5ldyBNZXNzYWdlLmZyb21Kc29uUnBjKAogICAgICAgICAgbnVsbCwganNvbi5kZWNvZGUodXRmOC5kZWNvZGUobWVzc2FnZSBhcyBMaXN0PGludD4pKSk7CiAgICAgIGlmIChycGMudHlwZSAhPSBNZXNzYWdlVHlwZS5SZXF1ZXN0KSB7CiAgICAgICAgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UuaW50ZXJuYWxFcnJvcigKICAgICAgICAgICAgJ1RoZSBjbGllbnQgc2VudCBhIG5vbi1yZXF1ZXN0IGpzb24tcnBjIG1lc3NhZ2UuJyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCByb3V0ZVJlcXVlc3QodGhpcywgcnBjKTsKICAgICAgfQogICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7CiAgICAgIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlLmludGVybmFsRXJyb3IoCiAgICAgICAgICAnVGhlIHJwYyBjYWxsIHJlc3VsdGVkIGluIGV4Y2VwdGlvbjogJGV4Y2VwdGlvbi4nKTsKICAgIH0KICAgIExpc3Q8aW50PiBieXRlczsKICAgIHN3aXRjaCAocmVzcG9uc2Uua2luZCkgewogICAgICBjYXNlIFJlc3BvbnNlUGF5bG9hZEtpbmQuU3RyaW5nOgogICAgICAgIGJ5dGVzID0gdXRmOC5lbmNvZGUocmVzcG9uc2UucGF5bG9hZCk7CiAgICAgICAgYnl0ZXMgPSBieXRlcyBpcyBVaW50OExpc3QgPyBieXRlcyA6IG5ldyBVaW50OExpc3QuZnJvbUxpc3QoYnl0ZXMpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFJlc3BvbnNlUGF5bG9hZEtpbmQuQmluYXJ5OgogICAgICBjYXNlIFJlc3BvbnNlUGF5bG9hZEtpbmQuVXRmOFN0cmluZzoKICAgICAgICBieXRlcyA9IHJlc3BvbnNlLnBheWxvYWQgYXMgVWludDhMaXN0OwogICAgICAgIGJyZWFrOwogICAgfQogICAgcmVwbHlQb3J0LnNlbmQoYnl0ZXMpOwogIH0KCiAgRnV0dXJlIF9leGl0KCkgYXN5bmMgewogICAgaXNFeGl0aW5nID0gdHJ1ZTsKCiAgICAvLyBTdG9wIHRoZSBzZXJ2ZXIuCiAgICBpZiAoVk1TZXJ2aWNlRW1iZWRkZXJIb29rcy5zZXJ2ZXJTdG9wICE9IG51bGwpIHsKICAgICAgYXdhaXQgVk1TZXJ2aWNlRW1iZWRkZXJIb29rcy5zZXJ2ZXJTdG9wKCk7CiAgICB9CgogICAgLy8gQ2xvc2UgcmVjZWl2ZSBwb3J0cy4KICAgIGlzb2xhdGVDb250cm9sUG9ydC5jbG9zZSgpOwogICAgc2NyaXB0TG9hZFBvcnQuY2xvc2UoKTsKCiAgICAvLyBDcmVhdGUgYSBjb3B5IG9mIHRoZSBzZXQgYXMgYSBsaXN0IGJlY2F1c2UgY2xpZW50LmRpc2Nvbm5lY3QoKSB3aWxsCiAgICAvLyBhbHRlciB0aGUgY29ubmVjdGVkIGNsaWVudHMgc2V0LgogICAgdmFyIGNsaWVudHNMaXN0ID0gY2xpZW50cy50b0xpc3QoKTsKICAgIGZvciAodmFyIGNsaWVudCBpbiBjbGllbnRzTGlzdCkgewogICAgICBjbGllbnQuZGlzY29ubmVjdCgpOwogICAgfQogICAgZGV2ZnMuY2xlYW51cCgpOwogICAgaWYgKFZNU2VydmljZUVtYmVkZGVySG9va3MuY2xlYW51cCAhPSBudWxsKSB7CiAgICAgIGF3YWl0IFZNU2VydmljZUVtYmVkZGVySG9va3MuY2xlYW51cCgpOwogICAgfQoKICAgIC8vIE5vdGlmeSB0aGUgVk0gdGhhdCB3ZSBoYXZlIGV4aXRlZC4KICAgIF9vbkV4aXQoKTsKICB9CgogIHZvaWQgbWVzc2FnZUhhbmRsZXIobWVzc2FnZSkgewogICAgaWYgKG1lc3NhZ2UgaXMgTGlzdCkgewogICAgICBpZiAobWVzc2FnZS5sZW5ndGggPT0gMikgewogICAgICAgIC8vIFRoaXMgaXMgYW4gZXZlbnQuCiAgICAgICAgX2V2ZW50TWVzc2FnZUhhbmRsZXIobWVzc2FnZVswXSwgbmV3IFJlc3BvbnNlLmZyb20obWVzc2FnZVsxXSkpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAobWVzc2FnZS5sZW5ndGggPT0gMSkgewogICAgICAgIC8vIFRoaXMgaXMgYSBjb250cm9sIG1lc3NhZ2UgZGlyZWN0aW5nIHRoZSB2bSBzZXJ2aWNlIHRvIGV4aXQuCiAgICAgICAgYXNzZXJ0KG1lc3NhZ2VbMF0gPT0gQ29uc3RhbnRzLlNFUlZJQ0VfRVhJVF9NRVNTQUdFX0lEKTsKICAgICAgICBfZXhpdCgpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAobWVzc2FnZS5sZW5ndGggPT0gMykgewogICAgICAgIGZpbmFsIG9wY29kZSA9IG1lc3NhZ2VbMF07CiAgICAgICAgaWYgKG9wY29kZSA9PSBDb25zdGFudHMuTUVUSE9EX0NBTExfRlJPTV9OQVRJVkUpIHsKICAgICAgICAgIF9oYW5kbGVOYXRpdmVScGNDYWxsKG1lc3NhZ2VbMV0sIG1lc3NhZ2VbMl0pOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBUaGlzIGlzIGEgbWVzc2FnZSBpbnRlcmFjdGluZyB3aXRoIHRoZSB3ZWIgc2VydmVyLgogICAgICAgICAgYXNzZXJ0KChvcGNvZGUgPT0gQ29uc3RhbnRzLldFQl9TRVJWRVJfQ09OVFJPTF9NRVNTQUdFX0lEKSB8fAogICAgICAgICAgICAgIChvcGNvZGUgPT0gQ29uc3RhbnRzLlNFUlZFUl9JTkZPX01FU1NBR0VfSUQpKTsKICAgICAgICAgIF9zZXJ2ZXJNZXNzYWdlSGFuZGxlcihtZXNzYWdlWzBdLCBtZXNzYWdlWzFdLCBtZXNzYWdlWzJdKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKG1lc3NhZ2UubGVuZ3RoID09IDQpIHsKICAgICAgICAvLyBUaGlzIGlzIGEgbWVzc2FnZSBpbmZvcm1pbmcgdXMgb2YgdGhlIGJpcnRoIG9yIGRlYXRoIG9mIGFuCiAgICAgICAgLy8gaXNvbGF0ZS4KICAgICAgICBfY29udHJvbE1lc3NhZ2VIYW5kbGVyKG1lc3NhZ2VbMF0sIG1lc3NhZ2VbMV0sIG1lc3NhZ2VbMl0sIG1lc3NhZ2VbM10pOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgcHJpbnQoJ0ludGVybmFsIHZtLXNlcnZpY2UgZXJyb3I6IGlnbm9yaW5nIGlsbGVnYWwgbWVzc2FnZTogJG1lc3NhZ2UnKTsKICB9CgogIFZNU2VydmljZS5faW50ZXJuYWwoKSA6IGV2ZW50UG9ydCA9IGlzb2xhdGVDb250cm9sUG9ydCB7CiAgICBldmVudFBvcnQuaGFuZGxlciA9IG1lc3NhZ2VIYW5kbGVyOwogIH0KCiAgZmFjdG9yeSBWTVNlcnZpY2UoKSB7CiAgICBpZiAoVk1TZXJ2aWNlLl9pbnN0YW5jZSA9PSBudWxsKSB7CiAgICAgIFZNU2VydmljZS5faW5zdGFuY2UgPSBuZXcgVk1TZXJ2aWNlLl9pbnRlcm5hbCgpOwogICAgICBfb25TdGFydCgpOwogICAgfQogICAgcmV0dXJuIF9pbnN0YW5jZTsKICB9CgogIGJvb2wgX2lzQW55Q2xpZW50U3Vic2NyaWJlZChTdHJpbmcgc3RyZWFtSWQpIHsKICAgIGZvciAodmFyIGNsaWVudCBpbiBjbGllbnRzKSB7CiAgICAgIGlmIChjbGllbnQuc3RyZWFtcy5jb250YWlucyhzdHJlYW1JZCkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQ2xpZW50IF9maW5kRmlyc3RDbGllbnRUaGF0SGFuZGxlc1NlcnZpY2UoU3RyaW5nIHNlcnZpY2UpIHsKICAgIGlmIChjbGllbnRzICE9IG51bGwpIHsKICAgICAgZm9yIChDbGllbnQgYyBpbiBjbGllbnRzKSB7CiAgICAgICAgaWYgKGMuc2VydmljZXMuY29udGFpbnNLZXkoc2VydmljZSkpIHsKICAgICAgICAgIHJldHVybiBjOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBzdGF0aWMgY29uc3Qga1NlcnZpY2VTdHJlYW0gPSAnU2VydmljZSc7CiAgc3RhdGljIGNvbnN0IHNlcnZpY2VTdHJlYW1zID0gY29uc3QgW2tTZXJ2aWNlU3RyZWFtXTsKCiAgRnV0dXJlPFN0cmluZz4gX3N0cmVhbUxpc3RlbihNZXNzYWdlIG1lc3NhZ2UpIGFzeW5jIHsKICAgIHZhciBjbGllbnQgPSBtZXNzYWdlLmNsaWVudDsKICAgIHZhciBzdHJlYW1JZCA9IG1lc3NhZ2UucGFyYW1zWydzdHJlYW1JZCddOwoKICAgIGlmIChjbGllbnQuc3RyZWFtcy5jb250YWlucyhzdHJlYW1JZCkpIHsKICAgICAgcmV0dXJuIGVuY29kZVJwY0Vycm9yKG1lc3NhZ2UsIGtTdHJlYW1BbHJlYWR5U3Vic2NyaWJlZCk7CiAgICB9CiAgICBpZiAoIV9pc0FueUNsaWVudFN1YnNjcmliZWQoc3RyZWFtSWQpKSB7CiAgICAgIGlmICghc2VydmljZVN0cmVhbXMuY29udGFpbnMoc3RyZWFtSWQpICYmICFfdm1MaXN0ZW5TdHJlYW0oc3RyZWFtSWQpKSB7CiAgICAgICAgcmV0dXJuIGVuY29kZVJwY0Vycm9yKG1lc3NhZ2UsIGtJbnZhbGlkUGFyYW1zLAogICAgICAgICAgICBkZXRhaWxzOiAic3RyZWFtTGlzdGVuOiBpbnZhbGlkICdzdHJlYW1JZCcgcGFyYW1ldGVyOiAke3N0cmVhbUlkfSIpOwogICAgICB9CiAgICB9CgogICAgLy8gU29tZSBzdHJlYW1zIGNhbiBnZW5lcmF0ZSBldmVudHMgb3Igc2lkZSBlZmZlY3RzIGFmdGVyIHJlZ2lzdHJhdGlvbgogICAgc3dpdGNoIChzdHJlYW1JZCkgewogICAgICBjYXNlIGtTZXJ2aWNlU3RyZWFtOgogICAgICAgIGZvciAoQ2xpZW50IGMgaW4gY2xpZW50cykgewogICAgICAgICAgaWYgKGMgPT0gY2xpZW50KSBjb250aW51ZTsKICAgICAgICAgIGZvciAoU3RyaW5nIHNlcnZpY2UgaW4gYy5zZXJ2aWNlcy5rZXlzKSB7CiAgICAgICAgICAgIF9zZW5kU2VydmljZVJlZ2lzdGVyZWRFdmVudChjLCBzZXJ2aWNlLCB0YXJnZXQ6IGNsaWVudCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIDsKICAgICAgICBicmVhazsKICAgIH0KCiAgICBjbGllbnQuc3RyZWFtcy5hZGQoc3RyZWFtSWQpOwogICAgcmV0dXJuIGVuY29kZVN1Y2Nlc3MobWVzc2FnZSk7CiAgfQoKICBGdXR1cmU8U3RyaW5nPiBfc3RyZWFtQ2FuY2VsKE1lc3NhZ2UgbWVzc2FnZSkgYXN5bmMgewogICAgdmFyIGNsaWVudCA9IG1lc3NhZ2UuY2xpZW50OwogICAgdmFyIHN0cmVhbUlkID0gbWVzc2FnZS5wYXJhbXNbJ3N0cmVhbUlkJ107CgogICAgaWYgKCFjbGllbnQuc3RyZWFtcy5jb250YWlucyhzdHJlYW1JZCkpIHsKICAgICAgcmV0dXJuIGVuY29kZVJwY0Vycm9yKG1lc3NhZ2UsIGtTdHJlYW1Ob3RTdWJzY3JpYmVkKTsKICAgIH0KICAgIGNsaWVudC5zdHJlYW1zLnJlbW92ZShzdHJlYW1JZCk7CiAgICBpZiAoIXNlcnZpY2VTdHJlYW1zLmNvbnRhaW5zKHN0cmVhbUlkKSAmJgogICAgICAgICFfaXNBbnlDbGllbnRTdWJzY3JpYmVkKHN0cmVhbUlkKSkgewogICAgICBfdm1DYW5jZWxTdHJlYW0oc3RyZWFtSWQpOwogICAgfQoKICAgIHJldHVybiBlbmNvZGVTdWNjZXNzKG1lc3NhZ2UpOwogIH0KCiAgc3RhdGljIGJvb2wgX2hhc05hbWVzcGFjZShTdHJpbmcgbWV0aG9kKSA9PgogICAgICBtZXRob2QuY29udGFpbnMoJy4nKSAmJgogICAgICBfZ2V0TmFtZXNwYWNlKG1ldGhvZCkuc3RhcnRzV2l0aChzZXJ2aWNlTmFtZXNwYWNlKTsKICBzdGF0aWMgU3RyaW5nIF9nZXROYW1lc3BhY2UoU3RyaW5nIG1ldGhvZCkgPT4gbWV0aG9kLnNwbGl0KCcuJykuZmlyc3Q7CiAgc3RhdGljIFN0cmluZyBfZ2V0TWV0aG9kKFN0cmluZyBtZXRob2QpID0+IG1ldGhvZC5zcGxpdCgnLicpLmxhc3Q7CgogIEZ1dHVyZTxTdHJpbmc+IF9yZWdpc3RlclNlcnZpY2UoTWVzc2FnZSBtZXNzYWdlKSBhc3luYyB7CiAgICBmaW5hbCBjbGllbnQgPSBtZXNzYWdlLmNsaWVudDsKICAgIGZpbmFsIHNlcnZpY2UgPSBtZXNzYWdlLnBhcmFtc1snc2VydmljZSddOwogICAgZmluYWwgYWxpYXMgPSBtZXNzYWdlLnBhcmFtc1snYWxpYXMnXTsKCiAgICBpZiAoc2VydmljZSBpcyEgU3RyaW5nIHx8IHNlcnZpY2UgPT0gJycpIHsKICAgICAgcmV0dXJuIGVuY29kZVJwY0Vycm9yKG1lc3NhZ2UsIGtJbnZhbGlkUGFyYW1zLAogICAgICAgICAgZGV0YWlsczogInJlZ2lzdGVyU2VydmljZTogaW52YWxpZCAnc2VydmljZScgcGFyYW1ldGVyOiAke3NlcnZpY2V9Iik7CiAgICB9CiAgICBpZiAoYWxpYXMgaXMhIFN0cmluZyB8fCBhbGlhcyA9PSAnJykgewogICAgICByZXR1cm4gZW5jb2RlUnBjRXJyb3IobWVzc2FnZSwga0ludmFsaWRQYXJhbXMsCiAgICAgICAgICBkZXRhaWxzOiAicmVnaXN0ZXJTZXJ2aWNlOiBpbnZhbGlkICdhbGlhcycgcGFyYW1ldGVyOiAke2FsaWFzfSIpOwogICAgfQogICAgaWYgKGNsaWVudC5zZXJ2aWNlcy5jb250YWluc0tleShzZXJ2aWNlKSkgewogICAgICByZXR1cm4gZW5jb2RlUnBjRXJyb3IobWVzc2FnZSwga1NlcnZpY2VBbHJlYWR5UmVnaXN0ZXJlZCk7CiAgICB9CiAgICBjbGllbnQuc2VydmljZXNbc2VydmljZV0gPSBhbGlhczsKCiAgICBib29sIHJlbW92ZWQ7CiAgICB0cnkgewogICAgICAvLyBEbyBub3Qgc2VuZCBzdHJlYW1pbmcgZXZlbnRzIHRvIHRoZSBjbGllbnQgd2hpY2ggcmVnaXN0ZXJzIHRoZSBzZXJ2aWNlCiAgICAgIHJlbW92ZWQgPSBjbGllbnQuc3RyZWFtcy5yZW1vdmUoa1NlcnZpY2VTdHJlYW0pOwogICAgICBhd2FpdCBfc2VuZFNlcnZpY2VSZWdpc3RlcmVkRXZlbnQoY2xpZW50LCBzZXJ2aWNlKTsKICAgIH0gZmluYWxseSB7CiAgICAgIGlmIChyZW1vdmVkKSBjbGllbnQuc3RyZWFtcy5hZGQoa1NlcnZpY2VTdHJlYW0pOwogICAgfQoKICAgIHJldHVybiBlbmNvZGVTdWNjZXNzKG1lc3NhZ2UpOwogIH0KCiAgX3NlbmRTZXJ2aWNlUmVnaXN0ZXJlZEV2ZW50KENsaWVudCBjbGllbnQsIFN0cmluZyBzZXJ2aWNlLAogICAgICB7Q2xpZW50IHRhcmdldH0pIGFzeW5jIHsKICAgIGZpbmFsIG5hbWVzcGFjZSA9IGNsaWVudHMua2V5T2YoY2xpZW50KTsKICAgIGZpbmFsIGFsaWFzID0gY2xpZW50LnNlcnZpY2VzW3NlcnZpY2VdOwogICAgZmluYWwgZXZlbnQgPSBuZXcgUmVzcG9uc2UuanNvbih7CiAgICAgICdqc29ucnBjJzogJzIuMCcsCiAgICAgICdtZXRob2QnOiAnc3RyZWFtTm90aWZ5JywKICAgICAgJ3BhcmFtcyc6IHsKICAgICAgICAnc3RyZWFtSWQnOiBrU2VydmljZVN0cmVhbSwKICAgICAgICAnZXZlbnQnOiB7CiAgICAgICAgICAidHlwZSI6ICJFdmVudCIsCiAgICAgICAgICAia2luZCI6ICJTZXJ2aWNlUmVnaXN0ZXJlZCIsCiAgICAgICAgICAndGltZXN0YW1wJzogbmV3IERhdGVUaW1lLm5vdygpLm1pbGxpc2Vjb25kc1NpbmNlRXBvY2gsCiAgICAgICAgICAnc2VydmljZSc6IHNlcnZpY2UsCiAgICAgICAgICAnbWV0aG9kJzogbmFtZXNwYWNlICsgJy4nICsgc2VydmljZSwKICAgICAgICAgICdhbGlhcyc6IGFsaWFzCiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIGlmICh0YXJnZXQgPT0gbnVsbCkgewogICAgICBfZXZlbnRNZXNzYWdlSGFuZGxlcihrU2VydmljZVN0cmVhbSwgZXZlbnQpOwogICAgfSBlbHNlIHsKICAgICAgdGFyZ2V0LnBvc3QoZXZlbnQpOwogICAgfQogIH0KCiAgRnV0dXJlPFN0cmluZz4gX2hhbmRsZVNlcnZpY2UoTWVzc2FnZSBtZXNzYWdlKSBhc3luYyB7CiAgICBmaW5hbCBuYW1lc3BhY2UgPSBfZ2V0TmFtZXNwYWNlKG1lc3NhZ2UubWV0aG9kKTsKICAgIGZpbmFsIG1ldGhvZCA9IF9nZXRNZXRob2QobWVzc2FnZS5tZXRob2QpOwogICAgZmluYWwgY2xpZW50ID0gY2xpZW50c1tuYW1lc3BhY2VdOwogICAgaWYgKGNsaWVudCAhPSBudWxsKSB7CiAgICAgIGlmIChjbGllbnQuc2VydmljZXMuY29udGFpbnNLZXkobWV0aG9kKSkgewogICAgICAgIGZpbmFsIGlkID0gX3NlcnZpY2VSZXF1ZXN0cy5uZXdJZCgpOwogICAgICAgIGZpbmFsIG9sZElkID0gbWVzc2FnZS5zZXJpYWw7CiAgICAgICAgZmluYWwgY29tcGxldGVyID0gbmV3IENvbXBsZXRlcjxTdHJpbmc+KCk7CiAgICAgICAgY2xpZW50LnNlcnZpY2VIYW5kbGVzW2lkXSA9IChNZXNzYWdlIG0pIHsKICAgICAgICAgIGlmIChtICE9IG51bGwpIHsKICAgICAgICAgICAgY29tcGxldGVyLmNvbXBsZXRlKGpzb24uZW5jb2RlKG0uZm9yd2FyZFRvSnNvbih7J2lkJzogb2xkSWR9KSkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29tcGxldGVyLmNvbXBsZXRlKGVuY29kZVJwY0Vycm9yKG1lc3NhZ2UsIGtTZXJ2aWNlRGlzYXBwZWFyZWQpKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGNsaWVudC5wb3N0KG5ldyBSZXNwb25zZS5qc29uKAogICAgICAgICAgICBtZXNzYWdlLmZvcndhcmRUb0pzb24oeydpZCc6IGlkLCAnbWV0aG9kJzogbWV0aG9kfSkpKTsKICAgICAgICByZXR1cm4gY29tcGxldGVyLmZ1dHVyZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGVuY29kZVJwY0Vycm9yKG1lc3NhZ2UsIGtNZXRob2ROb3RGb3VuZCwKICAgICAgICBkZXRhaWxzOiAiVW5rbm93biBzZXJ2aWNlOiAke21lc3NhZ2UubWV0aG9kfSIpOwogIH0KCiAgRnV0dXJlPFN0cmluZz4gX3NwYXduVXJpKE1lc3NhZ2UgbWVzc2FnZSkgYXN5bmMgewogICAgdmFyIHRva2VuID0gbWVzc2FnZS5wYXJhbXNbJ3Rva2VuJ107CiAgICBpZiAodG9rZW4gPT0gbnVsbCkgewogICAgICByZXR1cm4gZW5jb2RlTWlzc2luZ1BhcmFtRXJyb3IobWVzc2FnZSwgJ3Rva2VuJyk7CiAgICB9CiAgICBpZiAodG9rZW4gaXMhIFN0cmluZykgewogICAgICByZXR1cm4gZW5jb2RlSW52YWxpZFBhcmFtRXJyb3IobWVzc2FnZSwgJ3Rva2VuJyk7CiAgICB9CiAgICB2YXIgdXJpID0gbWVzc2FnZS5wYXJhbXNbJ3VyaSddOwogICAgaWYgKHVyaSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBlbmNvZGVNaXNzaW5nUGFyYW1FcnJvcihtZXNzYWdlLCAndXJpJyk7CiAgICB9CiAgICBpZiAodXJpIGlzISBTdHJpbmcpIHsKICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICd1cmknKTsKICAgIH0KICAgIHZhciBhcmdzID0gbWVzc2FnZS5wYXJhbXNbJ2FyZ3MnXTsKICAgIHZhciBhcmdzT2ZTdHJpbmcgPSBuZXcgTGlzdDxTdHJpbmc+KCk7CiAgICBpZiAoYXJncyAhPSBudWxsKSB7CiAgICAgIGlmIChhcmdzIGlzISBMaXN0KSB7CiAgICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICdhcmdzJyk7CiAgICAgIH0KICAgICAgZm9yICh2YXIgYXJnIGluIGFyZ3MpIHsKICAgICAgICBpZiAoYXJnIGlzISBTdHJpbmcpIHsKICAgICAgICAgIHJldHVybiBlbmNvZGVJbnZhbGlkUGFyYW1FcnJvcihtZXNzYWdlLCAnYXJncycpOwogICAgICAgIH0KICAgICAgICBhcmdzT2ZTdHJpbmcuYWRkKGFyZyk7CiAgICAgIH0KICAgIH0KICAgIHZhciBtc2cgPSBtZXNzYWdlLnBhcmFtc1snbWVzc2FnZSddOwoKICAgIElzb2xhdGUuc3Bhd25VcmkoVXJpLnBhcnNlKHVyaSksIGFyZ3NPZlN0cmluZywgbXNnKS50aGVuKChpc29sYXRlKSB7CiAgICAgIF9zcGF3blVyaU5vdGlmeShpc29sYXRlLmNvbnRyb2xQb3J0LCB0b2tlbik7CiAgICB9KS5jYXRjaEVycm9yKChlKSB7CiAgICAgIF9zcGF3blVyaU5vdGlmeShlLnRvU3RyaW5nKCksIHRva2VuKTsKICAgIH0pOwoKICAgIHJldHVybiBlbmNvZGVTdWNjZXNzKG1lc3NhZ2UpOwogIH0KCiAgRnV0dXJlPFJlc3BvbnNlPiByb3V0ZVJlcXVlc3QoVk1TZXJ2aWNlIF8sIE1lc3NhZ2UgbWVzc2FnZSkgYXN5bmMgewogICAgZmluYWwgcmVzcG9uc2UgPSBhd2FpdCBfcm91dGVSZXF1ZXN0SW1wbChtZXNzYWdlKTsKICAgIGlmIChyZXNwb25zZSA9PSBudWxsKSB7CiAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGhhdmUgYSBudWxsIHJlc3BvbnNlIGZvciBOb3RpZmljYXRpb25zLgogICAgICBhc3NlcnQobWVzc2FnZS50eXBlID09IE1lc3NhZ2VUeXBlLk5vdGlmaWNhdGlvbik7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIG5ldyBSZXNwb25zZS5mcm9tKHJlc3BvbnNlKTsKICB9CgogIEZ1dHVyZSBfcm91dGVSZXF1ZXN0SW1wbChNZXNzYWdlIG1lc3NhZ2UpIGFzeW5jIHsKICAgIHRyeSB7CiAgICAgIGlmIChtZXNzYWdlLmNvbXBsZXRlZCkgewogICAgICAgIHJldHVybiBhd2FpdCBtZXNzYWdlLnJlc3BvbnNlOwogICAgICB9CiAgICAgIGlmIChtZXNzYWdlLm1ldGhvZCA9PSAnc3RyZWFtTGlzdGVuJykgewogICAgICAgIHJldHVybiBhd2FpdCBfc3RyZWFtTGlzdGVuKG1lc3NhZ2UpOwogICAgICB9CiAgICAgIGlmIChtZXNzYWdlLm1ldGhvZCA9PSAnc3RyZWFtQ2FuY2VsJykgewogICAgICAgIHJldHVybiBhd2FpdCBfc3RyZWFtQ2FuY2VsKG1lc3NhZ2UpOwogICAgICB9CiAgICAgIGlmIChtZXNzYWdlLm1ldGhvZCA9PSAncmVnaXN0ZXJTZXJ2aWNlJykgewogICAgICAgIHJldHVybiBhd2FpdCBfcmVnaXN0ZXJTZXJ2aWNlKG1lc3NhZ2UpOwogICAgICB9CiAgICAgIGlmIChtZXNzYWdlLm1ldGhvZCA9PSAnX3NwYXduVXJpJykgewogICAgICAgIHJldHVybiBhd2FpdCBfc3Bhd25VcmkobWVzc2FnZSk7CiAgICAgIH0KICAgICAgaWYgKGRldmZzLnNob3VsZEhhbmRsZU1lc3NhZ2UobWVzc2FnZSkpIHsKICAgICAgICByZXR1cm4gYXdhaXQgZGV2ZnMuaGFuZGxlTWVzc2FnZShtZXNzYWdlKTsKICAgICAgfQogICAgICBpZiAoX2hhc05hbWVzcGFjZShtZXNzYWdlLm1ldGhvZCkpIHsKICAgICAgICByZXR1cm4gYXdhaXQgX2hhbmRsZVNlcnZpY2UobWVzc2FnZSk7CiAgICAgIH0KICAgICAgaWYgKG1lc3NhZ2UucGFyYW1zWydpc29sYXRlSWQnXSAhPSBudWxsKSB7CiAgICAgICAgcmV0dXJuIGF3YWl0IHJ1bm5pbmdJc29sYXRlcy5yb3V0ZVJlcXVlc3QodGhpcywgbWVzc2FnZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGF3YWl0IG1lc3NhZ2Uuc2VuZFRvVk0oKTsKICAgIH0gY2F0Y2ggKGUsIHN0KSB7CiAgICAgIG1lc3NhZ2Uuc2V0RXJyb3JSZXNwb25zZShrSW50ZXJuYWxFcnJvciwgJ1VuZXhwZWN0ZWQgZXhjZXB0aW9uOiRlXG4kc3QnKTsKICAgICAgcmV0dXJuIG1lc3NhZ2UucmVzcG9uc2U7CiAgICB9CiAgfQoKICB2b2lkIHJvdXRlUmVzcG9uc2UobWVzc2FnZSkgewogICAgZmluYWwgY2xpZW50ID0gbWVzc2FnZS5jbGllbnQ7CiAgICBpZiAoY2xpZW50LnNlcnZpY2VIYW5kbGVzLmNvbnRhaW5zS2V5KG1lc3NhZ2Uuc2VyaWFsKSkgewogICAgICBjbGllbnQuc2VydmljZUhhbmRsZXMucmVtb3ZlKG1lc3NhZ2Uuc2VyaWFsKShtZXNzYWdlKTsKICAgICAgX3NlcnZpY2VSZXF1ZXN0cy5yZWxlYXNlKG1lc3NhZ2Uuc2VyaWFsKTsKICAgIH0KICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQpSYXdSZWNlaXZlUG9ydCBib290KCkgewogIC8vIFJldHVybiB0aGUgcG9ydCB3ZSBleHBlY3QgaXNvbGF0ZSBjb250cm9sIG1lc3NhZ2VzIG9uLgogIHJldHVybiBpc29sYXRlQ29udHJvbFBvcnQ7Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgIWNvbnN0IGJvb2wuZnJvbUVudmlyb25tZW50KCJkYXJ0LnZtLnByb2R1Y3QiKSkKdm9pZCBfcmVnaXN0ZXJJc29sYXRlKGludCBwb3J0X2lkLCBTZW5kUG9ydCBzcCwgU3RyaW5nIG5hbWUpIHsKICB2YXIgc2VydmljZSA9IG5ldyBWTVNlcnZpY2UoKTsKICBzZXJ2aWNlLnJ1bm5pbmdJc29sYXRlcy5pc29sYXRlU3RhcnR1cChwb3J0X2lkLCBzcCwgbmFtZSk7Cn0KCi8vLyBOb3RpZnkgdGhlIFZNIHRoYXQgdGhlIHNlcnZpY2UgaXMgcnVubmluZy4Kdm9pZCBfb25TdGFydCgpIG5hdGl2ZSAiVk1TZXJ2aWNlX09uU3RhcnQiOwoKLy8vIE5vdGlmeSB0aGUgVk0gdGhhdCB0aGUgc2VydmljZSBpcyBubyBsb25nZXIgcnVubmluZy4Kdm9pZCBfb25FeGl0KCkgbmF0aXZlICJWTVNlcnZpY2VfT25FeGl0IjsKCi8vLyBOb3RpZnkgdGhlIFZNIHRoYXQgdGhlIHNlcnZlcidzIGFkZHJlc3MgaGFzIGNoYW5nZWQuCnZvaWQgb25TZXJ2ZXJBZGRyZXNzQ2hhbmdlKFN0cmluZyBhZGRyZXNzKQogICAgbmF0aXZlICJWTVNlcnZpY2VfT25TZXJ2ZXJBZGRyZXNzQ2hhbmdlIjsKCi8vLyBTdWJzY3JpYmUgdG8gYSBzZXJ2aWNlIHN0cmVhbS4KYm9vbCBfdm1MaXN0ZW5TdHJlYW0oU3RyaW5nIHN0cmVhbUlkKSBuYXRpdmUgIlZNU2VydmljZV9MaXN0ZW5TdHJlYW0iOwoKLy8vIENhbmNlbCBhIHN1YnNjcmlwdGlvbiB0byBhIHNlcnZpY2Ugc3RyZWFtLgp2b2lkIF92bUNhbmNlbFN0cmVhbShTdHJpbmcgc3RyZWFtSWQpIG5hdGl2ZSAiVk1TZXJ2aWNlX0NhbmNlbFN0cmVhbSI7CgovLy8gR2V0IHRoZSBieXRlcyB0byB0aGUgdGFyIGFyY2hpdmUuClVpbnQ4TGlzdCBfcmVxdWVzdEFzc2V0cygpIG5hdGl2ZSAiVk1TZXJ2aWNlX1JlcXVlc3RBc3NldHMiOwoKLy8vIE5vdGlmeSB0aGUgdm0gc2VydmljZSB0aGF0IGFuIGlzb2xhdGUgaGFzIGJlZW4gc3Bhd25lZCB2aWEgcnBjLgp2b2lkIF9zcGF3blVyaU5vdGlmeShvYmosIFN0cmluZyB0b2tlbikgbmF0aXZlICJWTVNlcnZpY2Vfc3Bhd25VcmlOb3RpZnkiOwqCrQBOTjwBGQEVGhcXFBoBExQTFx0eFRwaAUA8ASUSAgEaHDMnLSQEIgIBRDIBRklIOikBSRwgIB8fASABHiImIiQiGyEiJichKSUBKCcmIAEXJCQrOTE6OSw7Mj9RKgMBRRMWGg8UJwcFGSIaBwQgAgFAMUYCAUAlMU0CAUQ+HAIBMxMWGhYFIAIBKDUCATUBLiYBLiUBKCIBKzgBISwBHD0BKksBGzYBLkgBNj8BNjEBPzsBKh8qKCIuJiYyJCY2NAIBKB4BJwExJjtIATA7AS4aATEiAR0BIyQlGQQBJi0cKy8jCAYwHBUeHiYYJRkhL0gkNRAODwYnNxQGBAE/IkQcCAYEAVAUMToPMjVGGxkKDwYEAVEUND8ZEgpJFg8tQBkSCkQWDwYEAUlLFwEKM0EtL0APMggaLT4GFR0nL0wPJysvDwYbBAEZFgEYNTEGARwgHAFLKCgmGwYVMi4GASoPBAEhGyEdSRAIIUdBERAIISM7OBIRQEg9RRIKCCFGFFAQCAZMBAE7KAQBGCc3EgYWBAExIi8VCAYSBAE+GyIvFAoIBhEEASs4ATghLwEtQAYtTjdRCAYBSxgbJCU0RQwKCg8GASIjBAE4IS8BLjwGJS4tIQYBIwQBLh46SUUBOyMvKwEvNVAGKzVMBjBBBiYBEgpQNzoQNwYBIwQBPR8tLCYYIBIkExsnQh4vGQoICBozDRoGBAE5NS8nGjEtJjMyG00TTgwLJ0MhCAY0OAQBNCkZOAYcOAYlFzYGGjYGJysYGzkIHh47Ch8IBikBSTMYLAgBIwQBRjccQDgTBigEATQKHycILi0ILi0IMTAIKykIMDMIKy4IMUIIJxZQHwYEASAjPT0wBgQCASIYPB0CAUo/IT0CAS8sATkqATkrLgEjRwEvRwEmPQFESwEPZGFydDpfdm1zZXJ2aWNlMW9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi92bXNlcnZpY2UvY2xpZW50LmRhcnSH+y8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuX3Ztc2VydmljZTsKCnR5cGVkZWYgdm9pZCBDbGllbnRTZXJ2aWNlSGFuZGxlKE1lc3NhZ2UgcmVzcG9uc2UpOwoKLy8gQSBzZXJ2aWNlIGNsaWVudC4KYWJzdHJhY3QgY2xhc3MgQ2xpZW50IHsKICBmaW5hbCBWTVNlcnZpY2Ugc2VydmljZTsKICBmaW5hbCBib29sIHNlbmRFdmVudHM7CgogIC8vLyBBIHNldCBzdHJlYW1JZHMgd2hpY2ggZGVzY3JpYmVzIHRoZSBzdHJlYW1zIHRoZSBjbGllbnQgaXMgY29ubmVjdGVkIHRvCiAgZmluYWwgU2V0PFN0cmluZz4gc3RyZWFtcyA9IG5ldyBTZXQ8U3RyaW5nPigpOwoKICAvLy8gU2VydmljZXMgcmVnaXN0ZXJlZCBhbmQgdGhlaXIgYWxpYXNlcwogIC8vLyBrZXk6IHNlcnZpY2UKICAvLy8gdmFsdWU6IGFsaWFzCiAgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBzZXJ2aWNlcyA9IG5ldyBNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CgogIC8vLyBDYWxsYmFja3MgcmVnaXN0ZXJlZCBmb3Igc2VydmljZSBpbnZvY2F0aW9ucyBzZXQgdG8gdGhlIGNsaWVudAogIC8vLyBrZXk6IFJQQyBpZCB1c2VkIGZvciB0aGUgcmVxdWVzdAogIC8vLyB2YWx1ZTogY2FsbGJhY2sgdGhhdCBzaG91bGQgYmUgaW52b2tlZAogIGZpbmFsIE1hcDxTdHJpbmcsIENsaWVudFNlcnZpY2VIYW5kbGU+IHNlcnZpY2VIYW5kbGVzID0KICAgICAgbmV3IE1hcDxTdHJpbmcsIENsaWVudFNlcnZpY2VIYW5kbGU+KCk7CgogIENsaWVudCh0aGlzLnNlcnZpY2UsIHtib29sIHNlbmRFdmVudHM6IHRydWV9KSA6IHRoaXMuc2VuZEV2ZW50cyA9IHNlbmRFdmVudHMgewogICAgc2VydmljZS5fYWRkQ2xpZW50KHRoaXMpOwogIH0KCiAgLy8gRGlzY29ubmVjdHMgdGhlIGNsaWVudC4KICBkaXNjb25uZWN0KCk7CgogIC8vLyBXaGVuIGltcGxlbWVudGluZywgY2FsbCBbY2xvc2VdIHdoZW4gdGhlIG5ldHdvcmsgY29ubmVjdGlvbiBjbG9zZXMuCiAgdm9pZCBjbG9zZSgpIHsKICAgIHNlcnZpY2UuX3JlbW92ZUNsaWVudCh0aGlzKTsKICB9CgogIC8vLyBDYWxsIHRvIHByb2Nlc3MgYSByZXF1ZXN0LiBSZXNwb25zZSB3aWxsIGJlIHBvc3RlZCB3aXRoICdzZXEnLgogIHZvaWQgb25SZXF1ZXN0KE1lc3NhZ2UgbWVzc2FnZSkgewogICAgLy8gSW4gSlNPTi1SUEMgMi4wIG1lc3NhZ2VzIHdpdGggYW5kIGlkIGFyZSBSZXF1ZXN0IGFuZCBtdXN0IGJlIGFuc3dlcmVkCiAgICAvLyBodHRwOi8vd3d3Lmpzb25ycGMub3JnL3NwZWNpZmljYXRpb24jbm90aWZpY2F0aW9uCiAgICBzZXJ2aWNlLnJvdXRlUmVxdWVzdChzZXJ2aWNlLCBtZXNzYWdlKS50aGVuKHBvc3QpOwogIH0KCiAgdm9pZCBvblJlc3BvbnNlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgc2VydmljZS5yb3V0ZVJlc3BvbnNlKG1lc3NhZ2UpOwogIH0KCiAgLy8vIENhbGwgdG8gcHJvY2VzcyBhIG5vdGlmaWNhdGlvbi4gUmVzcG9uc2Ugd2lsbCBub3QgYmUgcG9zdGVkLgogIHZvaWQgb25Ob3RpZmljYXRpb24oTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAvLyBJbiBKU09OLVJQQyAyLjAgbWVzc2FnZXMgd2l0aG91dCBhbiBpZCBhcmUgTm90aWZpY2F0aW9uCiAgICAvLyBhbmQgc2hvdWxkIG5vdCBiZSBhbnN3ZXJlZAogICAgLy8gaHR0cDovL3d3dy5qc29ucnBjLm9yZy9zcGVjaWZpY2F0aW9uI25vdGlmaWNhdGlvbgogICAgc2VydmljZS5yb3V0ZVJlcXVlc3Qoc2VydmljZSwgbWVzc2FnZSk7CiAgfQoKICAvLyBTZW5kcyBhIHJlc3VsdCB0byB0aGUgY2xpZW50LiAgSW1wbGVtZW50ZWQgaW4gc3ViY2xhc3Nlcy4KICB2b2lkIHBvc3QoUmVzcG9uc2UgcmVzdWx0KTsKCiAgZHluYW1pYyB0b0pzb24oKSB7CiAgICByZXR1cm4ge307CiAgfQp9CkMATk48ARkBNAEVGBsZAU0xASwTE0IBRSctOi4BUR4EAR0QAUoRIQQBRSRNOTcEASUkBAFDKT8iOSwEAT8eARUPBAIBG2RhcnQ6X3Ztc2VydmljZS9jbGllbnQuZGFydDBvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvdm1zZXJ2aWNlL2Fzc2V0LmRhcnSHBy8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuX3Ztc2VydmljZTsKCmNsYXNzIEFzc2V0IHsKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBmaW5hbCBVaW50OExpc3QgZGF0YTsKCiAgQXNzZXQodGhpcy5uYW1lLCB0aGlzLmRhdGEpOwoKICBTdHJpbmcgZ2V0IG1pbWVUeXBlIHsKICAgIHZhciBleHRlbnNpb25TdGFydCA9IG5hbWUubGFzdEluZGV4T2YoJy4nKTsKICAgIHZhciBleHRlbnNpb24gPSBuYW1lLnN1YnN0cmluZyhleHRlbnNpb25TdGFydCArIDEpOwogICAgc3dpdGNoIChleHRlbnNpb24pIHsKICAgICAgY2FzZSAnaHRtbCc6CiAgICAgICAgcmV0dXJuICd0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgnOwogICAgICBjYXNlICdkYXJ0JzoKICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2RhcnQ7IGNoYXJzZXQ9VVRGLTgnOwogICAgICBjYXNlICdqcyc6CiAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0OyBjaGFyc2V0PVVURi04JzsKICAgICAgY2FzZSAnY3NzJzoKICAgICAgICByZXR1cm4gJ3RleHQvY3NzOyBjaGFyc2V0PVVURi04JzsKICAgICAgY2FzZSAnZ2lmJzoKICAgICAgICByZXR1cm4gJ2ltYWdlL2dpZic7CiAgICAgIGNhc2UgJ3BuZyc6CiAgICAgICAgcmV0dXJuICdpbWFnZS9wbmcnOwogICAgICBjYXNlICdqcGcnOgogICAgICAgIHJldHVybiAnaW1hZ2UvanBlZyc7CiAgICAgIGNhc2UgJ2pwZWcnOgogICAgICAgIHJldHVybiAnaW1hZ2UvanBlZyc7CiAgICAgIGNhc2UgJ3N2Zyc6CiAgICAgICAgcmV0dXJuICdpbWFnZS9zdmcreG1sJzsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gJ3RleHQvcGxhaW4nOwogICAgfQogIH0KCiAgc3RhdGljIE1hcDxTdHJpbmcsIEFzc2V0PiByZXF1ZXN0KCkgewogICAgVWludDhMaXN0IHRhckJ5dGVzID0gX3JlcXVlc3RBc3NldHMoKTsKICAgIGlmICh0YXJCeXRlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgTGlzdCBhc3NldExpc3QgPSBfZGVjb2RlQXNzZXRzKHRhckJ5dGVzKTsKICAgIE1hcDxTdHJpbmcsIEFzc2V0PiBhc3NldHMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEFzc2V0PigpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhc3NldExpc3QubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgdmFyIGEgPSBuZXcgQXNzZXQoYXNzZXRMaXN0W2ldLCBhc3NldExpc3RbaSArIDFdKTsKICAgICAgYXNzZXRzW2EubmFtZV0gPSBhOwogICAgfQogICAgcmV0dXJuIGFzc2V0czsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+ICckbmFtZSAoJG1pbWVUeXBlKSc7Cn0KCkxpc3QgX2RlY29kZUFzc2V0cyhVaW50OExpc3QgZGF0YSkgbmF0aXZlICJWTVNlcnZpY2VfRGVjb2RlQXNzZXRzIjsKCk1hcDxTdHJpbmcsIEFzc2V0PiBfYXNzZXRzOwpNYXA8U3RyaW5nLCBBc3NldD4gZ2V0IGFzc2V0cyB7CiAgaWYgKF9hc3NldHMgPT0gbnVsbCkgewogICAgdHJ5IHsKICAgICAgX2Fzc2V0cyA9IEFzc2V0LnJlcXVlc3QoKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgcHJpbnQoJ0NvdWxkIG5vdCBsb2FkIE9ic2VydmF0b3J5IGFzc2V0czogJGUnKTsKICAgIH0KICB9CiAgcmV0dXJuIF9hc3NldHM7Cn0KRwBOTjwBGQEOFRgBHwEYMDgZEysTMhE4EioSHBIcEh0THRIgDx0GBAEoKxwTBi4+NDkaBhMEASwCAUQBHCAZCiESNgYEEgIBGmRhcnQ6X3Ztc2VydmljZS9hc3NldC5kYXJ0MG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi92bXNlcnZpY2UvZGV2ZnMuZGFydK8SLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5fdm1zZXJ2aWNlOwoKU3RyaW5nIF9lbmNvZGVEZXZGU0Rpc2FibGVkRXJyb3IoTWVzc2FnZSBtZXNzYWdlKSB7CiAgcmV0dXJuIGVuY29kZVJwY0Vycm9yKG1lc3NhZ2UsIGtGZWF0dXJlRGlzYWJsZWQsCiAgICAgIGRldGFpbHM6ICJEZXZGUyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgRGFydCBpbXBsZW1lbnRhdGlvbiIpOwp9CgpTdHJpbmcgX2VuY29kZUZpbGVTeXN0ZW1BbHJlYWR5RXhpc3RzRXJyb3IoTWVzc2FnZSBtZXNzYWdlLCBTdHJpbmcgZnNOYW1lKSB7CiAgcmV0dXJuIGVuY29kZVJwY0Vycm9yKG1lc3NhZ2UsIGtGaWxlU3lzdGVtQWxyZWFkeUV4aXN0cywKICAgICAgZGV0YWlsczogIiR7bWVzc2FnZS5tZXRob2R9OiBmaWxlIHN5c3RlbSAnJHtmc05hbWV9JyBhbHJlYWR5IGV4aXN0cyIpOwp9CgpTdHJpbmcgX2VuY29kZUZpbGVTeXN0ZW1Eb2VzTm90RXhpc3RFcnJvcihNZXNzYWdlIG1lc3NhZ2UsIFN0cmluZyBmc05hbWUpIHsKICByZXR1cm4gZW5jb2RlUnBjRXJyb3IobWVzc2FnZSwga0ZpbGVTeXN0ZW1Eb2VzTm90RXhpc3QsCiAgICAgIGRldGFpbHM6ICIke21lc3NhZ2UubWV0aG9kfTogZmlsZSBzeXN0ZW0gJyR7ZnNOYW1lfScgZG9lcyBub3QgZXhpc3QiKTsKfQoKY2xhc3MgX0ZpbGVTeXN0ZW0gewogIF9GaWxlU3lzdGVtKHRoaXMubmFtZSwgdGhpcy51cmkpOwoKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBmaW5hbCBVcmkgdXJpOwoKICBVcmkgcmVzb2x2ZVBhdGgoU3RyaW5nIHBhdGgpIHsKICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoJy8nKSkgewogICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoMSk7CiAgICB9CiAgICBpZiAocGF0aC5pc0VtcHR5KSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgVXJpIHBhdGhVcmk7CiAgICB0cnkgewogICAgICBwYXRoVXJpID0gbmV3IFVyaS5maWxlKHBhdGgpOwogICAgfSBvbiBGb3JtYXRFeGNlcHRpb24gY2F0Y2ggKGUpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcmV0dXJuIHJlc29sdmUocGF0aFVyaSk7CiAgfQoKICBVcmkgcmVzb2x2ZShVcmkgcGF0aFVyaSkgewogICAgdHJ5IHsKICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhpcyBwYXRoVXJpIGNhbiBiZSBjb252ZXJ0ZWQgdG8gYSBmaWxlIHBhdGguCiAgICAgIHBhdGhVcmkudG9GaWxlUGF0aCgpOwogICAgfSBvbiBVbnN1cHBvcnRlZEVycm9yIGNhdGNoIChlKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIFVyaSByZXNvbHZlZFVyaSA9IHVyaS5yZXNvbHZlVXJpKHBhdGhVcmkpOwogICAgaWYgKCFyZXNvbHZlZFVyaS50b1N0cmluZygpLnN0YXJ0c1dpdGgodXJpLnRvU3RyaW5nKCkpKSB7CiAgICAgIC8vIFJlc29sdmVkIHVyaSBtdXN0IGJlIHdpdGhpbiB0aGUgZmlsZXN5c3RlbSdzIGJhc2UgdXJpLgogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHJldHVybiByZXNvbHZlZFVyaTsKICB9CgogIE1hcCB0b01hcCgpIHsKICAgIHJldHVybiB7CiAgICAgICd0eXBlJzogJ0ZpbGVTeXN0ZW0nLAogICAgICAnbmFtZSc6IG5hbWUsCiAgICAgICd1cmknOiB1cmkudG9TdHJpbmcoKSwKICAgIH07CiAgfQp9CgpjbGFzcyBEZXZGUyB7CiAgRGV2RlMoKTsKCiAgTWFwPFN0cmluZywgX0ZpbGVTeXN0ZW0+IF9mc01hcCA9IHt9OwoKICBmaW5hbCBTZXQgX3JwY05hbWVzID0gbmV3IFNldC5mcm9tKFsKICAgICdfbGlzdERldkZTJywKICAgICdfY3JlYXRlRGV2RlMnLAogICAgJ19kZWxldGVEZXZGUycsCiAgICAnX3JlYWREZXZGU0ZpbGUnLAogICAgJ193cml0ZURldkZTRmlsZScsCiAgICAnX3dyaXRlRGV2RlNGaWxlcycsCiAgICAnX2xpc3REZXZGU0ZpbGVzJywKICBdKTsKCiAgdm9pZCBjbGVhbnVwKCkgewogICAgdmFyIGRlbGV0ZURpciA9IFZNU2VydmljZUVtYmVkZGVySG9va3MuZGVsZXRlRGlyOwogICAgaWYgKGRlbGV0ZURpciA9PSBudWxsKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHZhciBkZWxldGlvbnMgPSA8RnV0dXJlPltdOwogICAgZm9yICh2YXIgZnMgaW4gX2ZzTWFwLnZhbHVlcykgewogICAgICBkZWxldGlvbnMuYWRkKGRlbGV0ZURpcihmcy51cmkpKTsKICAgIH0KICAgIEZ1dHVyZS53YWl0KGRlbGV0aW9ucyk7CiAgICBfZnNNYXAuY2xlYXIoKTsKICB9CgogIGJvb2wgc2hvdWxkSGFuZGxlTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgIHJldHVybiBfcnBjTmFtZXMuY29udGFpbnMobWVzc2FnZS5tZXRob2QpOwogIH0KCiAgRnV0dXJlPFN0cmluZz4gaGFuZGxlTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIGFzeW5jIHsKICAgIHN3aXRjaCAobWVzc2FnZS5tZXRob2QpIHsKICAgICAgY2FzZSAnX2xpc3REZXZGUyc6CiAgICAgICAgcmV0dXJuIF9saXN0RGV2RlMobWVzc2FnZSk7CiAgICAgIGNhc2UgJ19jcmVhdGVEZXZGUyc6CiAgICAgICAgcmV0dXJuIF9jcmVhdGVEZXZGUyhtZXNzYWdlKTsKICAgICAgY2FzZSAnX2RlbGV0ZURldkZTJzoKICAgICAgICByZXR1cm4gX2RlbGV0ZURldkZTKG1lc3NhZ2UpOwogICAgICBjYXNlICdfcmVhZERldkZTRmlsZSc6CiAgICAgICAgcmV0dXJuIF9yZWFkRGV2RlNGaWxlKG1lc3NhZ2UpOwogICAgICBjYXNlICdfd3JpdGVEZXZGU0ZpbGUnOgogICAgICAgIHJldHVybiBfd3JpdGVEZXZGU0ZpbGUobWVzc2FnZSk7CiAgICAgIGNhc2UgJ193cml0ZURldkZTRmlsZXMnOgogICAgICAgIHJldHVybiBfd3JpdGVEZXZGU0ZpbGVzKG1lc3NhZ2UpOwogICAgICBjYXNlICdfbGlzdERldkZTRmlsZXMnOgogICAgICAgIHJldHVybiBfbGlzdERldkZTRmlsZXMobWVzc2FnZSk7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIGVuY29kZVJwY0Vycm9yKG1lc3NhZ2UsIGtJbnRlcm5hbEVycm9yLAogICAgICAgICAgICBkZXRhaWxzOiAnVW5leHBlY3RlZCBycGMgJHttZXNzYWdlLm1ldGhvZH0nKTsKICAgIH0KICB9CgogIEZ1dHVyZTxTdHJpbmc+IGhhbmRsZVB1dFN0cmVhbSgKICAgICAgT2JqZWN0IGZzTmFtZSwgT2JqZWN0IHBhdGgsIFVyaSBmc1VyaSwgU3RyZWFtPExpc3Q8aW50Pj4gYnl0ZXMpIGFzeW5jIHsKICAgIC8vIEEgZHVtbXkgTWVzc2FnZSBmb3IgZXJyb3IgbWVzc2FnZSBjb25zdHJ1Y3Rpb24uCiAgICBNZXNzYWdlIG1lc3NhZ2UgPSBuZXcgTWVzc2FnZS5mb3JNZXRob2QoJ193cml0ZURldkZTRmlsZScpOwogICAgdmFyIHdyaXRlU3RyZWFtRmlsZSA9IFZNU2VydmljZUVtYmVkZGVySG9va3Mud3JpdGVTdHJlYW1GaWxlOwogICAgaWYgKHdyaXRlU3RyZWFtRmlsZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfZW5jb2RlRGV2RlNEaXNhYmxlZEVycm9yKG1lc3NhZ2UpOwogICAgfQogICAgaWYgKGZzTmFtZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBlbmNvZGVNaXNzaW5nUGFyYW1FcnJvcihtZXNzYWdlLCAnZnNOYW1lJyk7CiAgICB9CiAgICBpZiAoZnNOYW1lIGlzISBTdHJpbmcpIHsKICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICdmc05hbWUnKTsKICAgIH0KICAgIHZhciBmcyA9IF9mc01hcFtmc05hbWVdOwogICAgaWYgKGZzID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9lbmNvZGVGaWxlU3lzdGVtRG9lc05vdEV4aXN0RXJyb3IobWVzc2FnZSwgZnNOYW1lKTsKICAgIH0KICAgIFVyaSB1cmkgPSBmc1VyaTsKICAgIGlmICh1cmkgPT0gbnVsbCkgewogICAgICBpZiAocGF0aCA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIGVuY29kZU1pc3NpbmdQYXJhbUVycm9yKG1lc3NhZ2UsICdwYXRoJyk7CiAgICAgIH0KICAgICAgaWYgKHBhdGggaXMhIFN0cmluZykgewogICAgICAgIHJldHVybiBlbmNvZGVJbnZhbGlkUGFyYW1FcnJvcihtZXNzYWdlLCAncGF0aCcpOwogICAgICB9CiAgICAgIHVyaSA9IGZzLnJlc29sdmVQYXRoKHBhdGgpOwogICAgICBpZiAodXJpID09IG51bGwpIHsKICAgICAgICByZXR1cm4gZW5jb2RlSW52YWxpZFBhcmFtRXJyb3IobWVzc2FnZSwgJ3BhdGgnKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdXJpID0gZnMucmVzb2x2ZSh1cmkpOwogICAgICBpZiAodXJpID09IG51bGwpIHsKICAgICAgICByZXR1cm4gZW5jb2RlSW52YWxpZFBhcmFtRXJyb3IobWVzc2FnZSwgJ3VyaScpOwogICAgICB9CiAgICB9CiAgICBhd2FpdCB3cml0ZVN0cmVhbUZpbGUodXJpLCBieXRlcyk7CiAgICByZXR1cm4gZW5jb2RlU3VjY2VzcyhtZXNzYWdlKTsKICB9CgogIEZ1dHVyZTxTdHJpbmc+IF9saXN0RGV2RlMoTWVzc2FnZSBtZXNzYWdlKSBhc3luYyB7CiAgICB2YXIgcmVzdWx0ID0ge307CiAgICByZXN1bHRbJ3R5cGUnXSA9ICdGaWxlU3lzdGVtTGlzdCc7CiAgICByZXN1bHRbJ2ZzTmFtZXMnXSA9IF9mc01hcC5rZXlzLnRvTGlzdCgpOwogICAgcmV0dXJuIGVuY29kZVJlc3VsdChtZXNzYWdlLCByZXN1bHQpOwogIH0KCiAgRnV0dXJlPFN0cmluZz4gX2NyZWF0ZURldkZTKE1lc3NhZ2UgbWVzc2FnZSkgYXN5bmMgewogICAgdmFyIGNyZWF0ZVRlbXBEaXIgPSBWTVNlcnZpY2VFbWJlZGRlckhvb2tzLmNyZWF0ZVRlbXBEaXI7CiAgICBpZiAoY3JlYXRlVGVtcERpciA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfZW5jb2RlRGV2RlNEaXNhYmxlZEVycm9yKG1lc3NhZ2UpOwogICAgfQogICAgdmFyIGZzTmFtZSA9IG1lc3NhZ2UucGFyYW1zWydmc05hbWUnXTsKICAgIGlmIChmc05hbWUgPT0gbnVsbCkgewogICAgICByZXR1cm4gZW5jb2RlTWlzc2luZ1BhcmFtRXJyb3IobWVzc2FnZSwgJ2ZzTmFtZScpOwogICAgfQogICAgaWYgKGZzTmFtZSBpcyEgU3RyaW5nKSB7CiAgICAgIHJldHVybiBlbmNvZGVJbnZhbGlkUGFyYW1FcnJvcihtZXNzYWdlLCAnZnNOYW1lJyk7CiAgICB9CiAgICB2YXIgZnMgPSBfZnNNYXBbZnNOYW1lXTsKICAgIGlmIChmcyAhPSBudWxsKSB7CiAgICAgIHJldHVybiBfZW5jb2RlRmlsZVN5c3RlbUFscmVhZHlFeGlzdHNFcnJvcihtZXNzYWdlLCBmc05hbWUpOwogICAgfQogICAgdmFyIHRlbXBEaXIgPSBhd2FpdCBjcmVhdGVUZW1wRGlyKGZzTmFtZSk7CiAgICBmcyA9IG5ldyBfRmlsZVN5c3RlbShmc05hbWUsIHRlbXBEaXIpOwogICAgX2ZzTWFwW2ZzTmFtZV0gPSBmczsKICAgIHJldHVybiBlbmNvZGVSZXN1bHQobWVzc2FnZSwgZnMudG9NYXAoKSk7CiAgfQoKICBGdXR1cmU8U3RyaW5nPiBfZGVsZXRlRGV2RlMoTWVzc2FnZSBtZXNzYWdlKSBhc3luYyB7CiAgICB2YXIgZGVsZXRlRGlyID0gVk1TZXJ2aWNlRW1iZWRkZXJIb29rcy5kZWxldGVEaXI7CiAgICBpZiAoZGVsZXRlRGlyID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9lbmNvZGVEZXZGU0Rpc2FibGVkRXJyb3IobWVzc2FnZSk7CiAgICB9CiAgICB2YXIgZnNOYW1lID0gbWVzc2FnZS5wYXJhbXNbJ2ZzTmFtZSddOwogICAgaWYgKGZzTmFtZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBlbmNvZGVNaXNzaW5nUGFyYW1FcnJvcihtZXNzYWdlLCAnZnNOYW1lJyk7CiAgICB9CiAgICBpZiAoZnNOYW1lIGlzISBTdHJpbmcpIHsKICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICdmc05hbWUnKTsKICAgIH0KICAgIHZhciBmcyA9IF9mc01hcC5yZW1vdmUoZnNOYW1lKTsKICAgIGlmIChmcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfZW5jb2RlRmlsZVN5c3RlbURvZXNOb3RFeGlzdEVycm9yKG1lc3NhZ2UsIGZzTmFtZSk7CiAgICB9CiAgICBhd2FpdCBkZWxldGVEaXIoZnMudXJpKTsKICAgIHJldHVybiBlbmNvZGVTdWNjZXNzKG1lc3NhZ2UpOwogIH0KCiAgRnV0dXJlPFN0cmluZz4gX3JlYWREZXZGU0ZpbGUoTWVzc2FnZSBtZXNzYWdlKSBhc3luYyB7CiAgICB2YXIgcmVhZEZpbGUgPSBWTVNlcnZpY2VFbWJlZGRlckhvb2tzLnJlYWRGaWxlOwogICAgaWYgKHJlYWRGaWxlID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9lbmNvZGVEZXZGU0Rpc2FibGVkRXJyb3IobWVzc2FnZSk7CiAgICB9CiAgICB2YXIgZnNOYW1lID0gbWVzc2FnZS5wYXJhbXNbJ2ZzTmFtZSddOwogICAgaWYgKGZzTmFtZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBlbmNvZGVNaXNzaW5nUGFyYW1FcnJvcihtZXNzYWdlLCAnZnNOYW1lJyk7CiAgICB9CiAgICBpZiAoZnNOYW1lIGlzISBTdHJpbmcpIHsKICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICdmc05hbWUnKTsKICAgIH0KICAgIHZhciBmcyA9IF9mc01hcFtmc05hbWVdOwogICAgaWYgKGZzID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9lbmNvZGVGaWxlU3lzdGVtRG9lc05vdEV4aXN0RXJyb3IobWVzc2FnZSwgZnNOYW1lKTsKICAgIH0KICAgIFVyaSB1cmk7CiAgICBpZiAobWVzc2FnZS5wYXJhbXNbJ3VyaSddICE9IG51bGwpIHsKICAgICAgdHJ5IHsKICAgICAgICB2YXIgdXJpUGFyYW0gPSBtZXNzYWdlLnBhcmFtc1sndXJpJ107CiAgICAgICAgaWYgKHVyaVBhcmFtIGlzISBTdHJpbmcpIHsKICAgICAgICAgIHJldHVybiBlbmNvZGVJbnZhbGlkUGFyYW1FcnJvcihtZXNzYWdlLCAndXJpJyk7CiAgICAgICAgfQogICAgICAgIFVyaSBwYXJzZWRVcmkgPSBVcmkucGFyc2UodXJpUGFyYW0pOwogICAgICAgIHVyaSA9IGZzLnJlc29sdmUocGFyc2VkVXJpKTsKICAgICAgICBpZiAodXJpID09IG51bGwpIHsKICAgICAgICAgIHJldHVybiBlbmNvZGVJbnZhbGlkUGFyYW1FcnJvcihtZXNzYWdlLCAndXJpJyk7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICd1cmknKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdmFyIHBhdGggPSBtZXNzYWdlLnBhcmFtc1sncGF0aCddOwogICAgICBpZiAocGF0aCA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIGVuY29kZU1pc3NpbmdQYXJhbUVycm9yKG1lc3NhZ2UsICdwYXRoJyk7CiAgICAgIH0KICAgICAgaWYgKHBhdGggaXMhIFN0cmluZykgewogICAgICAgIHJldHVybiBlbmNvZGVJbnZhbGlkUGFyYW1FcnJvcihtZXNzYWdlLCAncGF0aCcpOwogICAgICB9CiAgICAgIHVyaSA9IGZzLnJlc29sdmVQYXRoKHBhdGgpOwogICAgICBpZiAodXJpID09IG51bGwpIHsKICAgICAgICByZXR1cm4gZW5jb2RlSW52YWxpZFBhcmFtRXJyb3IobWVzc2FnZSwgJ3BhdGgnKTsKICAgICAgfQogICAgfQogICAgdHJ5IHsKICAgICAgTGlzdDxpbnQ+IGJ5dGVzID0gYXdhaXQgcmVhZEZpbGUodXJpKTsKICAgICAgdmFyIHJlc3VsdCA9IHsndHlwZSc6ICdGU0ZpbGUnLCAnZmlsZUNvbnRlbnRzJzogYmFzZTY0LmVuY29kZShieXRlcyl9OwogICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KG1lc3NhZ2UsIHJlc3VsdCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHJldHVybiBlbmNvZGVScGNFcnJvcihtZXNzYWdlLCBrRmlsZURvZXNOb3RFeGlzdCwKICAgICAgICAgIGRldGFpbHM6ICJfcmVhZERldkZTRmlsZTogJGUiKTsKICAgIH0KICB9CgogIEZ1dHVyZTxTdHJpbmc+IF93cml0ZURldkZTRmlsZShNZXNzYWdlIG1lc3NhZ2UpIGFzeW5jIHsKICAgIHZhciB3cml0ZUZpbGUgPSBWTVNlcnZpY2VFbWJlZGRlckhvb2tzLndyaXRlRmlsZTsKICAgIGlmICh3cml0ZUZpbGUgPT0gbnVsbCkgewogICAgICByZXR1cm4gX2VuY29kZURldkZTRGlzYWJsZWRFcnJvcihtZXNzYWdlKTsKICAgIH0KICAgIHZhciBmc05hbWUgPSBtZXNzYWdlLnBhcmFtc1snZnNOYW1lJ107CiAgICBpZiAoZnNOYW1lID09IG51bGwpIHsKICAgICAgcmV0dXJuIGVuY29kZU1pc3NpbmdQYXJhbUVycm9yKG1lc3NhZ2UsICdmc05hbWUnKTsKICAgIH0KICAgIGlmIChmc05hbWUgaXMhIFN0cmluZykgewogICAgICByZXR1cm4gZW5jb2RlSW52YWxpZFBhcmFtRXJyb3IobWVzc2FnZSwgJ2ZzTmFtZScpOwogICAgfQogICAgdmFyIGZzID0gX2ZzTWFwW2ZzTmFtZV07CiAgICBpZiAoZnMgPT0gbnVsbCkgewogICAgICByZXR1cm4gX2VuY29kZUZpbGVTeXN0ZW1Eb2VzTm90RXhpc3RFcnJvcihtZXNzYWdlLCBmc05hbWUpOwogICAgfQogICAgVXJpIHVyaTsKICAgIGlmIChtZXNzYWdlLnBhcmFtc1sndXJpJ10gIT0gbnVsbCkgewogICAgICB0cnkgewogICAgICAgIHZhciB1cmlQYXJhbSA9IG1lc3NhZ2UucGFyYW1zWyd1cmknXTsKICAgICAgICBpZiAodXJpUGFyYW0gaXMhIFN0cmluZykgewogICAgICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICd1cmknKTsKICAgICAgICB9CiAgICAgICAgVXJpIHBhcnNlZFVyaSA9IFVyaS5wYXJzZSh1cmlQYXJhbSk7CiAgICAgICAgdXJpID0gZnMucmVzb2x2ZShwYXJzZWRVcmkpOwogICAgICAgIGlmICh1cmkgPT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICd1cmknKTsKICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICByZXR1cm4gZW5jb2RlSW52YWxpZFBhcmFtRXJyb3IobWVzc2FnZSwgJ3VyaScpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB2YXIgcGF0aCA9IG1lc3NhZ2UucGFyYW1zWydwYXRoJ107CiAgICAgIGlmIChwYXRoID09IG51bGwpIHsKICAgICAgICByZXR1cm4gZW5jb2RlTWlzc2luZ1BhcmFtRXJyb3IobWVzc2FnZSwgJ3BhdGgnKTsKICAgICAgfQogICAgICBpZiAocGF0aCBpcyEgU3RyaW5nKSB7CiAgICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICdwYXRoJyk7CiAgICAgIH0KICAgICAgdXJpID0gZnMucmVzb2x2ZVBhdGgocGF0aCk7CiAgICAgIGlmICh1cmkgPT0gbnVsbCkgewogICAgICAgIHJldHVybiBlbmNvZGVJbnZhbGlkUGFyYW1FcnJvcihtZXNzYWdlLCAncGF0aCcpOwogICAgICB9CiAgICB9CiAgICB2YXIgZmlsZUNvbnRlbnRzID0gbWVzc2FnZS5wYXJhbXNbJ2ZpbGVDb250ZW50cyddOwogICAgaWYgKGZpbGVDb250ZW50cyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBlbmNvZGVNaXNzaW5nUGFyYW1FcnJvcihtZXNzYWdlLCAnZmlsZUNvbnRlbnRzJyk7CiAgICB9CiAgICBpZiAoZmlsZUNvbnRlbnRzIGlzISBTdHJpbmcpIHsKICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICdmaWxlQ29udGVudHMnKTsKICAgIH0KICAgIExpc3Q8aW50PiBkZWNvZGVkRmlsZUNvbnRlbnRzID0gYmFzZTY0LmRlY29kZShmaWxlQ29udGVudHMpOwoKICAgIGF3YWl0IHdyaXRlRmlsZSh1cmksIGRlY29kZWRGaWxlQ29udGVudHMpOwogICAgcmV0dXJuIGVuY29kZVN1Y2Nlc3MobWVzc2FnZSk7CiAgfQoKICBGdXR1cmU8U3RyaW5nPiBfd3JpdGVEZXZGU0ZpbGVzKE1lc3NhZ2UgbWVzc2FnZSkgYXN5bmMgewogICAgdmFyIHdyaXRlRmlsZSA9IFZNU2VydmljZUVtYmVkZGVySG9va3Mud3JpdGVGaWxlOwogICAgaWYgKHdyaXRlRmlsZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfZW5jb2RlRGV2RlNEaXNhYmxlZEVycm9yKG1lc3NhZ2UpOwogICAgfQogICAgdmFyIGZzTmFtZSA9IG1lc3NhZ2UucGFyYW1zWydmc05hbWUnXTsKICAgIGlmIChmc05hbWUgPT0gbnVsbCkgewogICAgICByZXR1cm4gZW5jb2RlTWlzc2luZ1BhcmFtRXJyb3IobWVzc2FnZSwgJ2ZzTmFtZScpOwogICAgfQogICAgaWYgKGZzTmFtZSBpcyEgU3RyaW5nKSB7CiAgICAgIHJldHVybiBlbmNvZGVJbnZhbGlkUGFyYW1FcnJvcihtZXNzYWdlLCAnZnNOYW1lJyk7CiAgICB9CiAgICB2YXIgZnMgPSBfZnNNYXBbZnNOYW1lXTsKICAgIGlmIChmcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfZW5jb2RlRmlsZVN5c3RlbURvZXNOb3RFeGlzdEVycm9yKG1lc3NhZ2UsIGZzTmFtZSk7CiAgICB9CiAgICB2YXIgZmlsZXMgPSBtZXNzYWdlLnBhcmFtc1snZmlsZXMnXTsKICAgIGlmIChmaWxlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBlbmNvZGVNaXNzaW5nUGFyYW1FcnJvcihtZXNzYWdlLCAnZmlsZXMnKTsKICAgIH0KICAgIGlmIChmaWxlcyBpcyEgTGlzdCkgewogICAgICByZXR1cm4gZW5jb2RlSW52YWxpZFBhcmFtRXJyb3IobWVzc2FnZSwgJ2ZpbGVzJyk7CiAgICB9CiAgICB2YXIgdXJpcyA9IFtdOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgZmlsZUluZm8gPSBmaWxlc1tpXTsKICAgICAgaWYgKGZpbGVJbmZvIGlzISBMaXN0IHx8CiAgICAgICAgICBmaWxlSW5mby5sZW5ndGggIT0gMiB8fAogICAgICAgICAgZmlsZUluZm9bMF0gaXMhIFN0cmluZyB8fAogICAgICAgICAgZmlsZUluZm9bMV0gaXMhIFN0cmluZykgewogICAgICAgIHJldHVybiBlbmNvZGVScGNFcnJvcihtZXNzYWdlLCBrSW52YWxpZFBhcmFtcywKICAgICAgICAgICAgZGV0YWlsczogIiR7bWVzc2FnZS5tZXRob2R9OiBpbnZhbGlkICdmaWxlcycgcGFyYW1ldGVyICIKICAgICAgICAgICAgICAgICJhdCBpbmRleCAke2l9OiAke2ZpbGVJbmZvfSIpOwogICAgICB9CiAgICAgIHZhciB1cmkgPSBmcy5yZXNvbHZlUGF0aChmaWxlSW5mb1swXSk7CiAgICAgIGlmICh1cmkgPT0gbnVsbCkgewogICAgICAgIHJldHVybiBlbmNvZGVScGNFcnJvcihtZXNzYWdlLCBrSW52YWxpZFBhcmFtcywKICAgICAgICAgICAgZGV0YWlsczogIiR7bWVzc2FnZS5tZXRob2R9OiBpbnZhbGlkICdmaWxlcycgcGFyYW1ldGVyICIKICAgICAgICAgICAgICAgICJhdCBpbmRleCAke2l9OiAke2ZpbGVJbmZvfSIpOwogICAgICB9CiAgICAgIHVyaXMuYWRkKHVyaSk7CiAgICB9CiAgICB2YXIgcGVuZGluZ1dyaXRlcyA9IDxGdXR1cmU+W107CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHVyaXMubGVuZ3RoOyBpKyspIHsKICAgICAgTGlzdDxpbnQ+IGRlY29kZWRGaWxlQ29udGVudHMgPSBiYXNlNjQuZGVjb2RlKGZpbGVzW2ldWzFdKTsKICAgICAgcGVuZGluZ1dyaXRlcy5hZGQod3JpdGVGaWxlKHVyaXNbaV0sIGRlY29kZWRGaWxlQ29udGVudHMpKTsKICAgIH0KICAgIGF3YWl0IEZ1dHVyZS53YWl0KHBlbmRpbmdXcml0ZXMpOwogICAgcmV0dXJuIGVuY29kZVN1Y2Nlc3MobWVzc2FnZSk7CiAgfQoKICBGdXR1cmU8U3RyaW5nPiBfbGlzdERldkZTRmlsZXMoTWVzc2FnZSBtZXNzYWdlKSBhc3luYyB7CiAgICB2YXIgbGlzdEZpbGVzID0gVk1TZXJ2aWNlRW1iZWRkZXJIb29rcy5saXN0RmlsZXM7CiAgICBpZiAobGlzdEZpbGVzID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9lbmNvZGVEZXZGU0Rpc2FibGVkRXJyb3IobWVzc2FnZSk7CiAgICB9CiAgICB2YXIgZnNOYW1lID0gbWVzc2FnZS5wYXJhbXNbJ2ZzTmFtZSddOwogICAgaWYgKGZzTmFtZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBlbmNvZGVNaXNzaW5nUGFyYW1FcnJvcihtZXNzYWdlLCAnZnNOYW1lJyk7CiAgICB9CiAgICBpZiAoZnNOYW1lIGlzISBTdHJpbmcpIHsKICAgICAgcmV0dXJuIGVuY29kZUludmFsaWRQYXJhbUVycm9yKG1lc3NhZ2UsICdmc05hbWUnKTsKICAgIH0KICAgIHZhciBmcyA9IF9mc01hcFtmc05hbWVdOwogICAgaWYgKGZzID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9lbmNvZGVGaWxlU3lzdGVtRG9lc05vdEV4aXN0RXJyb3IobWVzc2FnZSwgZnNOYW1lKTsKICAgIH0KICAgIHZhciBmaWxlTGlzdCA9IGF3YWl0IGxpc3RGaWxlcyhmcy51cmkpOwogICAgLy8gUmVtb3ZlIGFueSB1cmwtZW5jb2RpbmcgaW4gdGhlIGZpbGVuYW1lcy4KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZUxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgZmlsZUxpc3RbaV1bJ25hbWUnXSA9IFVyaS5kZWNvZGVGdWxsKGZpbGVMaXN0W2ldWyduYW1lJ10pOwogICAgfQogICAgdmFyIHJlc3VsdCA9IHsndHlwZSc6ICdGU0ZpbGVMaXN0JywgJ2ZpbGVzJzogZmlsZUxpc3R9OwogICAgcmV0dXJuIGVuY29kZVJlc3VsdChtZXNzYWdlLCByZXN1bHQpOwogIH0KfQqBkQBOTjwBGQE0M0YCAU07TQIBTDpNAgEUJAEVEQEhICAGGBMGEQokJRMGAR0EAR0KRhwmEwYBLz5AEwYYBAEQDRwUHQcEAgEOCwEoAScSFBQWFxgXBgETNh0OBiAkKAYcFAQBLi8EATgeGSQbJhsmHSgeKR8qHikPNzoGBAEiTjdAQiMxBho5Bh05Bh0WQgYVFxo5CB05CCIZOQgNHRk4CAYnIwQBNRUnLioEATc+ITEGKxo5Bh05Bh0WQwYvKxkuBAE3Nh0xBisaOQYdOQYkFkIGHSMEATk0HDEGKxo5Bh05Bh0WQgYNKQwuIzoKLSUbOgoUOAgNKRo5CB05CCIZOQgGCi1NLBI4KgYEATo2HTEGKxo5Bh05Bh0WQgYNKQwuIzoKLSUbOgoUOAgNKRo5CB05CCIZOQgGNyA/BiM/BkEBLyMEATs2HTEGKxo5Bh05Bh0WQgYpGTgGGjgGEy0fHyIkJDdFLwgtGTdFLwgVBiQsQkIGJiMEATo2HTEGKxo5Bh05Bh0WQgYsMTBBBjwqBAIBGmRhcnQ6X3Ztc2VydmljZS9kZXZmcy5kYXJ0NG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi92bXNlcnZpY2UvY29uc3RhbnRzLmRhcnSDry8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuX3Ztc2VydmljZTsKCi8vIFRoZXNlIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggcnVudGltZS92bS9zZXJ2aWNlLmNjLgpjbGFzcyBDb25zdGFudHMgewogIHN0YXRpYyBjb25zdCBpbnQgU0VSVklDRV9FWElUX01FU1NBR0VfSUQgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgSVNPTEFURV9TVEFSVFVQX01FU1NBR0VfSUQgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgSVNPTEFURV9TSFVURE9XTl9NRVNTQUdFX0lEID0gMjsKICBzdGF0aWMgY29uc3QgaW50IFdFQl9TRVJWRVJfQ09OVFJPTF9NRVNTQUdFX0lEID0gMzsKICBzdGF0aWMgY29uc3QgaW50IFNFUlZFUl9JTkZPX01FU1NBR0VfSUQgPSA0OwoKICAvLy8gU2lnbmFscyBhbiBSUEMgY29taW5nIGZyb20gbmF0aXZlIGNvZGUgKGluc3RlYWQgb2YgZnJvbSBhIHdlYnNvY2tldAogIC8vLyBjb25uZWN0aW9uKS4gIFRoZXNlIGNhbGxzIGFyZSBsaW1pdGVkIHRvIHNpbXBsZSByZXF1ZXN0LXJlc3BvbnNlIGFuZCBkbwogIC8vLyBub3QgYWxsb3cgYXJiaXRyYXJ5IGpzb24tcnBjIG1lc3NhZ2VzLgogIC8vLwogIC8vLyBUaGUgbWVzc2FnZXMgYXJlIGFuIGFycmF5IG9mIGxlbmd0aCAzOgogIC8vLyAgIChNRVRIT0RfQ0FMTF9GUk9NX05BVElWRSwgU3RyaW5nIGpzb25SZXF1ZXN0LCBQb3J0SWQgcmVwbHlQb3J0KS4KICBzdGF0aWMgY29uc3QgaW50IE1FVEhPRF9DQUxMX0ZST01fTkFUSVZFID0gNTsKfQoYAE5OPAEZAToSMDM0Ni8BSk4tBi1JMAIBHmRhcnQ6X3Ztc2VydmljZS9jb25zdGFudHMuZGFydDpvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvdm1zZXJ2aWNlL3J1bm5pbmdfaXNvbGF0ZS5kYXJ0gqsvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0Ll92bXNlcnZpY2U7CgpjbGFzcyBSdW5uaW5nSXNvbGF0ZSBpbXBsZW1lbnRzIE1lc3NhZ2VSb3V0ZXIgewogIGZpbmFsIGludCBwb3J0SWQ7CiAgZmluYWwgU2VuZFBvcnQgc2VuZFBvcnQ7CiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIFJ1bm5pbmdJc29sYXRlKHRoaXMucG9ydElkLCB0aGlzLnNlbmRQb3J0LCB0aGlzLm5hbWUpOwoKICBTdHJpbmcgZ2V0IHNlcnZpY2VJZCA9PiAnaXNvbGF0ZXMvJHBvcnRJZCc7CgogIEBvdmVycmlkZQogIEZ1dHVyZTxSZXNwb25zZT4gcm91dGVSZXF1ZXN0KFZNU2VydmljZSBzZXJ2aWNlLCBNZXNzYWdlIG1lc3NhZ2UpIHsKICAgIC8vIFNlbmQgbWVzc2FnZSB0byBpc29sYXRlLgogICAgcmV0dXJuIG1lc3NhZ2Uuc2VuZFRvSXNvbGF0ZShzZW5kUG9ydCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJvdXRlUmVzcG9uc2UoTWVzc2FnZSBtZXNzYWdlKSB7fQp9ChoATk48ARkBMBQbFQE5AS4BDEYgLAQBDCkCASRkYXJ0Ol92bXNlcnZpY2UvcnVubmluZ19pc29sYXRlLmRhcnQ7b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL3Ztc2VydmljZS9ydW5uaW5nX2lzb2xhdGVzLmRhcnScdy8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuX3Ztc2VydmljZTsKCmNsYXNzIFJ1bm5pbmdJc29sYXRlcyBpbXBsZW1lbnRzIE1lc3NhZ2VSb3V0ZXIgewogIGZpbmFsIE1hcDxpbnQsIFJ1bm5pbmdJc29sYXRlPiBpc29sYXRlcyA9IG5ldyBNYXA8aW50LCBSdW5uaW5nSXNvbGF0ZT4oKTsKICBpbnQgX3Jvb3RQb3J0SWQ7CgogIFJ1bm5pbmdJc29sYXRlcygpOwoKICB2b2lkIGlzb2xhdGVTdGFydHVwKGludCBwb3J0SWQsIFNlbmRQb3J0IHNwLCBTdHJpbmcgbmFtZSkgewogICAgaWYgKF9yb290UG9ydElkID09IG51bGwpIHsKICAgICAgX3Jvb3RQb3J0SWQgPSBwb3J0SWQ7CiAgICB9CiAgICB2YXIgcmkgPSBuZXcgUnVubmluZ0lzb2xhdGUocG9ydElkLCBzcCwgbmFtZSk7CiAgICBpc29sYXRlc1twb3J0SWRdID0gcmk7CiAgfQoKICB2b2lkIGlzb2xhdGVTaHV0ZG93bihpbnQgcG9ydElkLCBTZW5kUG9ydCBzcCkgewogICAgaWYgKF9yb290UG9ydElkID09IHBvcnRJZCkgewogICAgICBfcm9vdFBvcnRJZCA9IG51bGw7CiAgICB9CiAgICBpc29sYXRlcy5yZW1vdmUocG9ydElkKTsKICB9CgogIEBvdmVycmlkZQogIEZ1dHVyZTxSZXNwb25zZT4gcm91dGVSZXF1ZXN0KFZNU2VydmljZSBzZXJ2aWNlLCBNZXNzYWdlIG1lc3NhZ2UpIHsKICAgIFN0cmluZyBpc29sYXRlUGFyYW0gPSBtZXNzYWdlLnBhcmFtc1snaXNvbGF0ZUlkJ107CiAgICBpbnQgaXNvbGF0ZUlkOwogICAgaWYgKCFpc29sYXRlUGFyYW0uc3RhcnRzV2l0aCgnaXNvbGF0ZXMvJykpIHsKICAgICAgbWVzc2FnZS5zZXRFcnJvclJlc3BvbnNlKAogICAgICAgICAga0ludmFsaWRQYXJhbXMsICJpbnZhbGlkICdpc29sYXRlSWQnIHBhcmFtZXRlcjogJGlzb2xhdGVQYXJhbSIpOwogICAgICByZXR1cm4gbWVzc2FnZS5yZXNwb25zZTsKICAgIH0KICAgIGlzb2xhdGVQYXJhbSA9IGlzb2xhdGVQYXJhbS5zdWJzdHJpbmcoJ2lzb2xhdGVzLycubGVuZ3RoKTsKICAgIGlmIChpc29sYXRlUGFyYW0gPT0gJ3Jvb3QnKSB7CiAgICAgIGlzb2xhdGVJZCA9IF9yb290UG9ydElkOwogICAgfSBlbHNlIHsKICAgICAgdHJ5IHsKICAgICAgICBpc29sYXRlSWQgPSBpbnQucGFyc2UoaXNvbGF0ZVBhcmFtKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIG1lc3NhZ2Uuc2V0RXJyb3JSZXNwb25zZSgKICAgICAgICAgICAga0ludmFsaWRQYXJhbXMsICJpbnZhbGlkICdpc29sYXRlSWQnIHBhcmFtZXRlcjogJGlzb2xhdGVQYXJhbSIpOwogICAgICAgIHJldHVybiBtZXNzYWdlLnJlc3BvbnNlOwogICAgICB9CiAgICB9CiAgICB2YXIgaXNvbGF0ZSA9IGlzb2xhdGVzW2lzb2xhdGVJZF07CiAgICBpZiAoaXNvbGF0ZSA9PSBudWxsKSB7CiAgICAgIC8vIFRoZXJlIGlzIHNvbWUgY2hhbmNlIHRoYXQgdGhpcyBpc29sYXRlIG1heSBoYXZlIGxpdmVkIGJlZm9yZSwKICAgICAgLy8gc28gcmV0dXJuIGEgc2VudGluZWwgcmF0aGVyIHRoYW4gYW4gZXJyb3IuCiAgICAgIHZhciByZXN1bHQgPSB7CiAgICAgICAgJ3R5cGUnOiAnU2VudGluZWwnLAogICAgICAgICdraW5kJzogJ0NvbGxlY3RlZCcsCiAgICAgICAgJ3ZhbHVlQXNTdHJpbmcnOiAnPGNvbGxlY3RlZD4nLAogICAgICB9OwogICAgICBtZXNzYWdlLnNldFJlc3BvbnNlKGVuY29kZVJlc3VsdChtZXNzYWdlLCByZXN1bHQpKTsKICAgICAgcmV0dXJuIG1lc3NhZ2UucmVzcG9uc2U7CiAgICB9CgogICAgaWYgKG1lc3NhZ2UubWV0aG9kID09ICdldmFsdWF0ZUluRnJhbWUnIHx8IG1lc3NhZ2UubWV0aG9kID09ICdldmFsdWF0ZScpIHsKICAgICAgcmV0dXJuIG5ldyBfRXZhbHVhdG9yKG1lc3NhZ2UsIGlzb2xhdGUsIHNlcnZpY2UpLnJ1bigpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGlzb2xhdGUucm91dGVSZXF1ZXN0KHNlcnZpY2UsIG1lc3NhZ2UpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByb3V0ZVJlc3BvbnNlKE1lc3NhZ2UgbWVzc2FnZSkge30KfQoKLy8vIENsYXNzIHRoYXQga25vd3MgaG93IHRvIG9yY2hlc3RyYXRlIGV4cHJlc3Npb24gZXZhbHVhdGlvbiBpbiBkYXJ0MiB3b3JsZC4KY2xhc3MgX0V2YWx1YXRvciB7CiAgX0V2YWx1YXRvcih0aGlzLl9tZXNzYWdlLCB0aGlzLl9pc29sYXRlLCB0aGlzLl9zZXJ2aWNlKTsKCiAgRnV0dXJlPFJlc3BvbnNlPiBydW4oKSBhc3luYyB7CiAgICBSZXNwb25zZSBidWlsZFNjb3BlUmVzcG9uc2UgPSBhd2FpdCBfYnVpbGRTY29wZSgpOwogICAgTWFwPFN0cmluZywgZHluYW1pYz4gcmVzcG9uc2VKc29uID0gYnVpbGRTY29wZVJlc3BvbnNlLmRlY29kZUpzb24oKTsKCiAgICBpZiAocmVzcG9uc2VKc29uLmNvbnRhaW5zS2V5KCdlcnJvcicpKSB7CiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UuZnJvbShlbmNvZGVDb21waWxhdGlvbkVycm9yKAogICAgICAgICAgX21lc3NhZ2UsIHJlc3BvbnNlSnNvblsnZXJyb3InXVsnZGF0YSddWydkZXRhaWxzJ10pKTsKICAgIH0KCiAgICBTdHJpbmcga2VybmVsQmFzZTY0OwogICAgdHJ5IHsKICAgICAga2VybmVsQmFzZTY0ID0gYXdhaXQgX2NvbXBpbGVFeHByZXNzaW9uKHJlc3BvbnNlSnNvblsncmVzdWx0J10pOwogICAgfSBjYXRjaCAoZSkgewogICAgICByZXR1cm4gbmV3IFJlc3BvbnNlLmZyb20oZW5jb2RlQ29tcGlsYXRpb25FcnJvcihfbWVzc2FnZSwgZS50b1N0cmluZygpKSk7CiAgICB9CiAgICByZXR1cm4gX2V2YWx1YXRlQ29tcGlsZWRFeHByZXNzaW9uKGtlcm5lbEJhc2U2NCk7CiAgfQoKICBNZXNzYWdlIF9tZXNzYWdlOwogIFJ1bm5pbmdJc29sYXRlIF9pc29sYXRlOwogIFZNU2VydmljZSBfc2VydmljZTsKCiAgRnV0dXJlPFJlc3BvbnNlPiBfYnVpbGRTY29wZSgpIHsKICAgIE1hcDxTdHJpbmcsIGR5bmFtaWM+IHBhcmFtcyA9IF9zZXR1cFBhcmFtcygpOwogICAgcGFyYW1zWydpc29sYXRlSWQnXSA9IF9tZXNzYWdlLnBhcmFtc1snaXNvbGF0ZUlkJ107CiAgICBNYXAgYnVpbGRTY29wZVBhcmFtcyA9IHsKICAgICAgJ21ldGhvZCc6ICdfYnVpbGRFeHByZXNzaW9uRXZhbHVhdGlvblNjb3BlJywKICAgICAgJ2lkJzogX21lc3NhZ2Uuc2VyaWFsLAogICAgICAncGFyYW1zJzogcGFyYW1zLAogICAgfTsKICAgIGlmIChfbWVzc2FnZS5wYXJhbXNbJ3Njb3BlJ10gIT0gbnVsbCkgewogICAgICBidWlsZFNjb3BlUGFyYW1zWydwYXJhbXMnXVsnc2NvcGUnXSA9IF9tZXNzYWdlLnBhcmFtc1snc2NvcGUnXTsKICAgIH0KICAgIHZhciBidWlsZFNjb3BlID0KICAgICAgICBuZXcgTWVzc2FnZS5fZnJvbUpzb25ScGNSZXF1ZXN0KF9tZXNzYWdlLmNsaWVudCwgYnVpbGRTY29wZVBhcmFtcyk7CgogICAgLy8gRGVjb2RlIHRoZSBKU09OIGFuZCBhbmQgaW5zZXJ0IGl0IGludG8gdGhlIG1hcC4gVGhlIG1hcCBrZXkKICAgIC8vIGlzIHRoZSByZXF1ZXN0IFVyaS4KICAgIHJldHVybiBfaXNvbGF0ZS5yb3V0ZVJlcXVlc3QoX3NlcnZpY2UsIGJ1aWxkU2NvcGUpOwogIH0KCiAgRnV0dXJlPFN0cmluZz4gX2NvbXBpbGVFeHByZXNzaW9uKAogICAgICBNYXA8U3RyaW5nLCBkeW5hbWljPiBidWlsZFNjb3BlUmVzcG9uc2VSZXN1bHQpIHsKICAgIENsaWVudCBleHRlcm5hbENsaWVudCA9CiAgICAgICAgX3NlcnZpY2UuX2ZpbmRGaXJzdENsaWVudFRoYXRIYW5kbGVzU2VydmljZSgnY29tcGlsZUV4cHJlc3Npb24nKTsKCiAgICBNYXAgY29tcGlsZVBhcmFtcyA9IHsKICAgICAgJ2lzb2xhdGVJZCc6IF9tZXNzYWdlLnBhcmFtc1snaXNvbGF0ZUlkJ10sCiAgICAgICdleHByZXNzaW9uJzogX21lc3NhZ2UucGFyYW1zWydleHByZXNzaW9uJ10sCiAgICAgICdkZWZpbml0aW9ucyc6IGJ1aWxkU2NvcGVSZXNwb25zZVJlc3VsdFsncGFyYW1fbmFtZXMnXSwKICAgICAgJ3R5cGVEZWZpbml0aW9ucyc6IGJ1aWxkU2NvcGVSZXNwb25zZVJlc3VsdFsndHlwZV9wYXJhbXNfbmFtZXMnXSwKICAgICAgJ2xpYnJhcnlVcmknOiBidWlsZFNjb3BlUmVzcG9uc2VSZXN1bHRbJ2xpYnJhcnlVcmknXSwKICAgICAgJ2lzU3RhdGljJzogYnVpbGRTY29wZVJlc3BvbnNlUmVzdWx0Wydpc1N0YXRpYyddLAogICAgfTsKICAgIGR5bmFtaWMga2xhc3MgPSBidWlsZFNjb3BlUmVzcG9uc2VSZXN1bHRbJ2tsYXNzJ107CiAgICBpZiAoa2xhc3MgIT0gbnVsbCkgewogICAgICBjb21waWxlUGFyYW1zWydrbGFzcyddID0ga2xhc3M7CiAgICB9CiAgICBpZiAoZXh0ZXJuYWxDbGllbnQgIT0gbnVsbCkgewogICAgICB2YXIgY29tcGlsZUV4cHJlc3Npb24gPSBuZXcgTWVzc2FnZS5mb3JNZXRob2QoJ2NvbXBpbGVFeHByZXNzaW9uJyk7CiAgICAgIGNvbXBpbGVFeHByZXNzaW9uLmNsaWVudCA9IGV4dGVybmFsQ2xpZW50OwogICAgICBjb21waWxlRXhwcmVzc2lvbi5wYXJhbXMuYWRkQWxsKGNvbXBpbGVQYXJhbXMpOwoKICAgICAgZmluYWwgaWQgPSBfc2VydmljZS5fc2VydmljZVJlcXVlc3RzLm5ld0lkKCk7CiAgICAgIGZpbmFsIG9sZElkID0gX21lc3NhZ2Uuc2VyaWFsOwogICAgICBmaW5hbCBjb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPFN0cmluZz4oKTsKICAgICAgZXh0ZXJuYWxDbGllbnQuc2VydmljZUhhbmRsZXNbaWRdID0gKE1lc3NhZ2UgbSkgewogICAgICAgIGlmIChtICE9IG51bGwpIHsKICAgICAgICAgIGNvbXBsZXRlci5jb21wbGV0ZShqc29uLmVuY29kZShtLmZvcndhcmRUb0pzb24oeydpZCc6IG9sZElkfSkpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29tcGxldGVyLmNvbXBsZXRlKGVuY29kZVJwY0Vycm9yKF9tZXNzYWdlLCBrU2VydmljZURpc2FwcGVhcmVkKSk7CiAgICAgICAgfQogICAgICB9OwogICAgICBleHRlcm5hbENsaWVudC5wb3N0KG5ldyBSZXNwb25zZS5qc29uKGNvbXBpbGVFeHByZXNzaW9uCiAgICAgICAgICAuZm9yd2FyZFRvSnNvbih7J2lkJzogaWQsICdtZXRob2QnOiAnY29tcGlsZUV4cHJlc3Npb24nfSkpKTsKICAgICAgcmV0dXJuIGNvbXBsZXRlci5mdXR1cmUKICAgICAgICAgIC50aGVuKChTdHJpbmcgcykgPT4ganNvbkRlY29kZShzKSkKICAgICAgICAgIC50aGVuKChkeW5hbWljIGpzb24pIHsKICAgICAgICBNYXA8U3RyaW5nLCBkeW5hbWljPiBqc29uTWFwID0ganNvbjsKICAgICAgICBpZiAoanNvbk1hcC5jb250YWluc0tleSgnZXJyb3InKSkgewogICAgICAgICAgdGhyb3cganNvbk1hcFsnZXJyb3InXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGpzb25NYXBbJ3Jlc3VsdCddWydyZXN1bHQnXVsna2VybmVsQnl0ZXMnXTsKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICAvLyBmYWxsYmFjayB0byBjb21waWxlIHVzaW5nIGtlcm5lbCBzZXJ2aWNlCiAgICAgIE1hcCBjb21waWxlRXhwcmVzc2lvblBhcmFtcyA9IHsKICAgICAgICAnbWV0aG9kJzogJ19jb21waWxlRXhwcmVzc2lvbicsCiAgICAgICAgJ2lkJzogX21lc3NhZ2Uuc2VyaWFsLAogICAgICAgICdwYXJhbXMnOiBjb21waWxlUGFyYW1zLAogICAgICB9OwogICAgICB2YXIgY29tcGlsZUV4cHJlc3Npb24gPSBuZXcgTWVzc2FnZS5fZnJvbUpzb25ScGNSZXF1ZXN0KAogICAgICAgICAgX21lc3NhZ2UuY2xpZW50LCBjb21waWxlRXhwcmVzc2lvblBhcmFtcyk7CgogICAgICByZXR1cm4gX2lzb2xhdGUKICAgICAgICAgIC5yb3V0ZVJlcXVlc3QoX3NlcnZpY2UsIGNvbXBpbGVFeHByZXNzaW9uKQogICAgICAgICAgLnRoZW4oKFJlc3BvbnNlIHJlc3BvbnNlKSA9PiByZXNwb25zZS5kZWNvZGVKc29uKCkpCiAgICAgICAgICAudGhlbigoZHluYW1pYyBqc29uKSB7CiAgICAgICAgaWYgKGpzb25bJ3Jlc3VsdCddICE9IG51bGwpIHsKICAgICAgICAgIHJldHVybiBqc29uWydyZXN1bHQnXVsna2VybmVsQnl0ZXMnXTsKICAgICAgICB9CiAgICAgICAgdGhyb3cganNvblsnZXJyb3InXVsnZGF0YSddWydkZXRhaWxzJ107CiAgICAgIH0pOwogICAgfQogIH0KCiAgRnV0dXJlPFJlc3BvbnNlPiBfZXZhbHVhdGVDb21waWxlZEV4cHJlc3Npb24oU3RyaW5nIGtlcm5lbEJhc2U2NCkgewogICAgaWYgKGtlcm5lbEJhc2U2NC5pc05vdEVtcHR5KSB7CiAgICAgIE1hcDxTdHJpbmcsIGR5bmFtaWM+IHBhcmFtcyA9IF9zZXR1cFBhcmFtcygpOwogICAgICBwYXJhbXNbJ2lzb2xhdGVJZCddID0gX21lc3NhZ2UucGFyYW1zWydpc29sYXRlSWQnXTsKICAgICAgcGFyYW1zWydrZXJuZWxCeXRlcyddID0ga2VybmVsQmFzZTY0OwogICAgICBwYXJhbXNbJ2Rpc2FibGVCcmVha3BvaW50cyddID0gX21lc3NhZ2UucGFyYW1zWydkaXNhYmxlQnJlYWtwb2ludHMnXTsKICAgICAgTWFwIHJ1blBhcmFtcyA9IHsKICAgICAgICAnbWV0aG9kJzogJ19ldmFsdWF0ZUNvbXBpbGVkRXhwcmVzc2lvbicsCiAgICAgICAgJ2lkJzogX21lc3NhZ2Uuc2VyaWFsLAogICAgICAgICdwYXJhbXMnOiBwYXJhbXMsCiAgICAgIH07CiAgICAgIGlmIChfbWVzc2FnZS5wYXJhbXNbJ3Njb3BlJ10gIT0gbnVsbCkgewogICAgICAgIHJ1blBhcmFtc1sncGFyYW1zJ11bJ3Njb3BlJ10gPSBfbWVzc2FnZS5wYXJhbXNbJ3Njb3BlJ107CiAgICAgIH0KICAgICAgdmFyIHJ1bkV4cHJlc3Npb24gPQogICAgICAgICAgbmV3IE1lc3NhZ2UuX2Zyb21Kc29uUnBjUmVxdWVzdChfbWVzc2FnZS5jbGllbnQsIHJ1blBhcmFtcyk7CiAgICAgIHJldHVybiBfaXNvbGF0ZS5yb3V0ZVJlcXVlc3QoX3NlcnZpY2UsIHJ1bkV4cHJlc3Npb24pOyAvLyBfbWVzc2FnZQogICAgfSBlbHNlIHsKICAgICAgLy8gZW1wdHkga2VybmVsIGluZGljYXRlcyBkYXJ0MSBtb2RlCiAgICAgIHJldHVybiBfaXNvbGF0ZS5yb3V0ZVJlcXVlc3QoX3NlcnZpY2UsIF9tZXNzYWdlKTsKICAgIH0KICB9CgogIE1hcDxTdHJpbmcsIGR5bmFtaWM+IF9zZXR1cFBhcmFtcygpIHsKICAgIGlmIChfbWVzc2FnZS5tZXRob2QgPT0gJ2V2YWx1YXRlSW5GcmFtZScpIHsKICAgICAgcmV0dXJuIDxTdHJpbmcsIGR5bmFtaWM+eydmcmFtZUluZGV4JzogX21lc3NhZ2UucGFyYW1zWydmcmFtZUluZGV4J119OwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KF9tZXNzYWdlLm1ldGhvZCA9PSAnZXZhbHVhdGUnKTsKICAgICAgcmV0dXJuIDxTdHJpbmcsIGR5bmFtaWM+eyd0YXJnZXRJZCc6IF9tZXNzYWdlLnBhcmFtc1sndGFyZ2V0SWQnXX07CiAgICB9CiAgfQp9CoDYAE5OPAEZATFMEwEVAT4fHAYzGwQBMiEaBh0EAQxGNxMxIEsfBj8iHw0MLRQiTSEIBicbRzQVHB0oCTofBgFPPg01BgQBDCkCAU4TOwEhN0kBLTdABgEZCkcSUAY2BAEUGxYBIzI4HTMdGAcsRgYVTAFDGzgEASU3HEoBGjEzPkg8OAc3GSYGIkoxNgE0JTE4GUsRTQoJPkceLSEtLCIKOwoNMiYoHyEJPzUBFjU+ISYwCjAKBgQBRiM0OixMGDEfGgkuQQgaR0kNKzgGBAEoME0NLUkGBAIBJWRhcnQ6X3Ztc2VydmljZS9ydW5uaW5nX2lzb2xhdGVzLmRhcnQyb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL3Ztc2VydmljZS9tZXNzYWdlLmRhcnSe6i8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuX3Ztc2VydmljZTsKCmVudW0gTWVzc2FnZVR5cGUgeyBSZXF1ZXN0LCBOb3RpZmljYXRpb24sIFJlc3BvbnNlIH0KCmNsYXNzIE1lc3NhZ2UgewogIGZpbmFsIENvbXBsZXRlcjxSZXNwb25zZT4gX2NvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXI8UmVzcG9uc2U+LnN5bmMoKTsKICBib29sIGdldCBjb21wbGV0ZWQgPT4gX2NvbXBsZXRlci5pc0NvbXBsZXRlZDsKCiAgLy8vIEZ1dHVyZSBvZiByZXNwb25zZS4KICBGdXR1cmU8UmVzcG9uc2U+IGdldCByZXNwb25zZSA9PiBfY29tcGxldGVyLmZ1dHVyZTsKICBDbGllbnQgY2xpZW50OwoKICAvLyBJcyBhIG5vdGlmaWNhdGlvbiBtZXNzYWdlIChubyBzZXJpYWwpCiAgZmluYWwgTWVzc2FnZVR5cGUgdHlwZTsKCiAgLy8gQ2xpZW50LXNpZGUgaWRlbnRpZmllciBmb3IgdGhpcyBtZXNzYWdlLgogIGZpbmFsIHNlcmlhbDsKCiAgZmluYWwgU3RyaW5nIG1ldGhvZDsKCiAgZmluYWwgTWFwIHBhcmFtcyA9IG5ldyBNYXAoKTsKICBmaW5hbCBNYXAgcmVzdWx0ID0gbmV3IE1hcCgpOwogIGZpbmFsIE1hcCBlcnJvciA9IG5ldyBNYXAoKTsKCiAgZmFjdG9yeSBNZXNzYWdlLmZyb21Kc29uUnBjKENsaWVudCBjbGllbnQsIE1hcCBtYXApIHsKICAgIGlmIChtYXAuY29udGFpbnNLZXkoJ2lkJykpIHsKICAgICAgZmluYWwgaWQgPSBtYXBbJ2lkJ107CiAgICAgIGlmIChpZCAhPSBudWxsICYmIGlkIGlzISBudW0gJiYgaWQgaXMhIFN0cmluZykgewogICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJyJpZCIgbXVzdCBiZSBhIG51bWJlciwgc3RyaW5nLCBvciBudWxsLicpOwogICAgICB9CiAgICAgIGlmIChtYXAuY29udGFpbnNLZXkoJ21ldGhvZCcpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBNZXNzYWdlLl9mcm9tSnNvblJwY1JlcXVlc3QoY2xpZW50LCBtYXApOwogICAgICB9CiAgICAgIGlmIChtYXAuY29udGFpbnNLZXkoJ3Jlc3VsdCcpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBNZXNzYWdlLl9mcm9tSnNvblJwY1Jlc3VsdChjbGllbnQsIG1hcCk7CiAgICAgIH0KICAgICAgaWYgKG1hcC5jb250YWluc0tleSgnZXJyb3InKSkgewogICAgICAgIHJldHVybiBuZXcgTWVzc2FnZS5fZnJvbUpzb25ScGNFcnJvcihjbGllbnQsIG1hcCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAobWFwLmNvbnRhaW5zS2V5KCdtZXRob2QnKSkgewogICAgICByZXR1cm4gbmV3IE1lc3NhZ2UuX2Zyb21Kc29uUnBjTm90aWZpY2F0aW9uKGNsaWVudCwgbWFwKTsKICAgIH0KICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0ludmFsaWQgbWVzc2FnZSBmb3JtYXQnKTsKICB9CgogIC8vIGh0dHA6Ly93d3cuanNvbnJwYy5vcmcvc3BlY2lmaWNhdGlvbiNyZXF1ZXN0X29iamVjdAogIE1lc3NhZ2UuX2Zyb21Kc29uUnBjUmVxdWVzdChDbGllbnQgY2xpZW50LCBNYXAgbWFwKQogICAgICA6IGNsaWVudCA9IGNsaWVudCwKICAgICAgICB0eXBlID0gTWVzc2FnZVR5cGUuUmVxdWVzdCwKICAgICAgICBzZXJpYWwgPSBtYXBbJ2lkJ10sCiAgICAgICAgbWV0aG9kID0gbWFwWydtZXRob2QnXSB7CiAgICBpZiAobWFwWydwYXJhbXMnXSAhPSBudWxsKSB7CiAgICAgIHBhcmFtcy5hZGRBbGwobWFwWydwYXJhbXMnXSk7CiAgICB9CiAgfQoKICAvLyBodHRwOi8vd3d3Lmpzb25ycGMub3JnL3NwZWNpZmljYXRpb24jbm90aWZpY2F0aW9uCiAgTWVzc2FnZS5fZnJvbUpzb25ScGNOb3RpZmljYXRpb24oQ2xpZW50IGNsaWVudCwgTWFwIG1hcCkKICAgICAgOiBjbGllbnQgPSBjbGllbnQsCiAgICAgICAgdHlwZSA9IE1lc3NhZ2VUeXBlLk5vdGlmaWNhdGlvbiwKICAgICAgICBtZXRob2QgPSBtYXBbJ21ldGhvZCddLAogICAgICAgIHNlcmlhbCA9IG51bGwgewogICAgaWYgKG1hcFsncGFyYW1zJ10gIT0gbnVsbCkgewogICAgICBwYXJhbXMuYWRkQWxsKG1hcFsncGFyYW1zJ10pOwogICAgfQogIH0KCiAgLy8gaHR0cDovL3d3dy5qc29ucnBjLm9yZy9zcGVjaWZpY2F0aW9uI3Jlc3BvbnNlX29iamVjdAogIE1lc3NhZ2UuX2Zyb21Kc29uUnBjUmVzdWx0KENsaWVudCBjbGllbnQsIE1hcCBtYXApCiAgICAgIDogY2xpZW50ID0gY2xpZW50LAogICAgICAgIHR5cGUgPSBNZXNzYWdlVHlwZS5SZXNwb25zZSwKICAgICAgICBzZXJpYWwgPSBtYXBbJ2lkJ10sCiAgICAgICAgbWV0aG9kID0gbnVsbCB7CiAgICByZXN1bHQuYWRkQWxsKG1hcFsncmVzdWx0J10pOwogIH0KCiAgLy8gaHR0cDovL3d3dy5qc29ucnBjLm9yZy9zcGVjaWZpY2F0aW9uI3Jlc3BvbnNlX29iamVjdAogIE1lc3NhZ2UuX2Zyb21Kc29uUnBjRXJyb3IoQ2xpZW50IGNsaWVudCwgTWFwIG1hcCkKICAgICAgOiBjbGllbnQgPSBjbGllbnQsCiAgICAgICAgdHlwZSA9IE1lc3NhZ2VUeXBlLlJlc3BvbnNlLAogICAgICAgIHNlcmlhbCA9IG1hcFsnaWQnXSwKICAgICAgICBtZXRob2QgPSBudWxsIHsKICAgIGVycm9yLmFkZEFsbChtYXBbJ2Vycm9yJ10pOwogIH0KCiAgc3RhdGljIFN0cmluZyBfbWV0aG9kTmFtZUZyb21VcmkoVXJpIHVyaSkgewogICAgaWYgKHVyaSA9PSBudWxsKSB7CiAgICAgIHJldHVybiAnJzsKICAgIH0KICAgIGlmICh1cmkucGF0aFNlZ21lbnRzLmxlbmd0aCA9PSAwKSB7CiAgICAgIHJldHVybiAnJzsKICAgIH0KICAgIHJldHVybiB1cmkucGF0aFNlZ21lbnRzWzBdOwogIH0KCiAgTWVzc2FnZS5mb3JNZXRob2QoU3RyaW5nIG1ldGhvZCkKICAgICAgOiBjbGllbnQgPSBudWxsLAogICAgICAgIG1ldGhvZCA9IG1ldGhvZCwKICAgICAgICB0eXBlID0gTWVzc2FnZVR5cGUuUmVxdWVzdCwKICAgICAgICBzZXJpYWwgPSAnJzsKCiAgTWVzc2FnZS5mcm9tVXJpKHRoaXMuY2xpZW50LCBVcmkgdXJpKQogICAgICA6IHR5cGUgPSBNZXNzYWdlVHlwZS5SZXF1ZXN0LAogICAgICAgIHNlcmlhbCA9ICcnLAogICAgICAgIG1ldGhvZCA9IF9tZXRob2ROYW1lRnJvbVVyaSh1cmkpIHsKICAgIHBhcmFtcy5hZGRBbGwodXJpLnF1ZXJ5UGFyYW1ldGVycyk7CiAgfQoKICBNZXNzYWdlLmZvcklzb2xhdGUodGhpcy5jbGllbnQsIFVyaSB1cmksIFJ1bm5pbmdJc29sYXRlIGlzb2xhdGUpCiAgICAgIDogdHlwZSA9IE1lc3NhZ2VUeXBlLlJlcXVlc3QsCiAgICAgICAgc2VyaWFsID0gJycsCiAgICAgICAgbWV0aG9kID0gX21ldGhvZE5hbWVGcm9tVXJpKHVyaSkgewogICAgcGFyYW1zLmFkZEFsbCh1cmkucXVlcnlQYXJhbWV0ZXJzKTsKICAgIHBhcmFtc1snaXNvbGF0ZUlkJ10gPSBpc29sYXRlLnNlcnZpY2VJZDsKICB9CgogIFVyaSB0b1VyaSgpIHsKICAgIHJldHVybiBuZXcgVXJpKHBhdGg6IG1ldGhvZCwgcXVlcnlQYXJhbWV0ZXJzOiBwYXJhbXMpOwogIH0KCiAgZHluYW1pYyB0b0pzb24oKSB7CiAgICB0aHJvdyAndW5zdXBwb3J0ZWQnOwogIH0KCiAgZHluYW1pYyBmb3J3YXJkVG9Kc29uKFtNYXAgb3ZlcmxvYWRzXSkgewogICAgTWFwPGR5bmFtaWMsIGR5bmFtaWM+IGpzb24gPSB7J2pzb25ycGMnOiAnMi4wJywgJ2lkJzogc2VyaWFsfTsKICAgIHN3aXRjaCAodHlwZSkgewogICAgICBjYXNlIE1lc3NhZ2VUeXBlLlJlcXVlc3Q6CiAgICAgIGNhc2UgTWVzc2FnZVR5cGUuTm90aWZpY2F0aW9uOgogICAgICAgIGpzb25bJ21ldGhvZCddID0gbWV0aG9kOwogICAgICAgIGlmIChwYXJhbXMuaXNOb3RFbXB0eSkgewogICAgICAgICAganNvblsncGFyYW1zJ10gPSBwYXJhbXM7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1lc3NhZ2VUeXBlLlJlc3BvbnNlOgogICAgICAgIGlmIChyZXN1bHQuaXNOb3RFbXB0eSkgewogICAgICAgICAganNvblsncmVzdWx0J10gPSByZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGlmIChlcnJvci5pc05vdEVtcHR5KSB7CiAgICAgICAgICBqc29uWydlcnJvciddID0gZXJyb3I7CiAgICAgICAgfQogICAgfQogICAgaWYgKG92ZXJsb2FkcyAhPSBudWxsKSB7CiAgICAgIGpzb24uYWRkQWxsKG92ZXJsb2Fkcyk7CiAgICB9CiAgICByZXR1cm4ganNvbjsKICB9CgogIC8vIENhbGxzIHRvU3RyaW5nIG9uIGFsbCBub24tU3RyaW5nIGVsZW1lbnRzIG9mIFtsaXN0XS4gV2UgZG8gdGhpcyBzbyBhbGwKICAvLyBlbGVtZW50cyBpbiB0aGUgbGlzdCBhcmUgc3RyaW5ncywgbWFraW5nIGNvbnN1bXB0aW9uIGJ5IEMrKyBzaW1wbGVyLgogIC8vIFRoaXMgaGFzIGEgc2lkZSBlZmZlY3QgdGhhdCBib29sZWFuIGxpdGVyYWwgdmFsdWVzIGxpa2UgdHJ1ZSBiZWNvbWUgJ3RydWUnCiAgLy8gYW5kIHRodXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSB0aGUgc3RyaW5nIGxpdGVyYWwgJ3RydWUnLgogIExpc3Q8U3RyaW5nPiBfbWFrZUFsbFN0cmluZyhMaXN0IGxpc3QpIHsKICAgIGlmIChsaXN0ID09IG51bGwpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICB2YXIgbmV3X2xpc3QgPSBuZXcgTGlzdDxTdHJpbmc+KGxpc3QubGVuZ3RoKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgewogICAgICBuZXdfbGlzdFtpXSA9IGxpc3RbaV0udG9TdHJpbmcoKTsKICAgIH0KICAgIHJldHVybiBuZXdfbGlzdDsKICB9CgogIEZ1dHVyZTxSZXNwb25zZT4gc2VuZFRvSXNvbGF0ZShTZW5kUG9ydCBzZW5kUG9ydCkgewogICAgZmluYWwgcmVjZWl2ZVBvcnQgPSBuZXcgUmF3UmVjZWl2ZVBvcnQoKTsKICAgIHJlY2VpdmVQb3J0LmhhbmRsZXIgPSAodmFsdWUpIHsKICAgICAgcmVjZWl2ZVBvcnQuY2xvc2UoKTsKICAgICAgX3NldFJlc3BvbnNlRnJvbVBvcnQodmFsdWUpOwogICAgfTsKICAgIHZhciBrZXlzID0gX21ha2VBbGxTdHJpbmcocGFyYW1zLmtleXMudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSkpOwogICAgdmFyIHZhbHVlcyA9IF9tYWtlQWxsU3RyaW5nKHBhcmFtcy52YWx1ZXMudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSkpOwogICAgdmFyIHJlcXVlc3QgPSBuZXcgTGlzdCg2KQogICAgICAuLlswXSA9IDAgLy8gTWFrZSByb29tIGZvciBPT0IgbWVzc2FnZSB0eXBlLgogICAgICAuLlsxXSA9IHJlY2VpdmVQb3J0LnNlbmRQb3J0CiAgICAgIC4uWzJdID0gc2VyaWFsCiAgICAgIC4uWzNdID0gbWV0aG9kCiAgICAgIC4uWzRdID0ga2V5cwogICAgICAuLls1XSA9IHZhbHVlczsKICAgIGlmICghc2VuZElzb2xhdGVTZXJ2aWNlTWVzc2FnZShzZW5kUG9ydCwgcmVxdWVzdCkpIHsKICAgICAgcmVjZWl2ZVBvcnQuY2xvc2UoKTsKICAgICAgX2NvbXBsZXRlci5jb21wbGV0ZShuZXcgUmVzcG9uc2UuaW50ZXJuYWxFcnJvcigKICAgICAgICAgICdjb3VsZCBub3Qgc2VuZCBtZXNzYWdlIFske3NlcmlhbH1dIHRvIGlzb2xhdGUnKSk7CiAgICB9CiAgICByZXR1cm4gX2NvbXBsZXRlci5mdXR1cmU7CiAgfQoKICAvLyBXZSBjdXJyZW50bHkgc3VwcG9ydCB0d28gd2F5cyBvZiBwYXNzaW5nIHBhcmFtZXRlcnMgZnJvbSBEYXJ0IGNvZGUgdG8gQwogIC8vIGNvZGUuIFRoZSBvcmlnaW5hbCB3YXkgYWx3YXlzIGNvbnZlcnRzIHRoZSBwYXJhbWV0ZXJzIHRvIHN0cmluZ3MgYmVmb3JlCiAgLy8gcGFzc2luZyB0aGVtIG92ZXIuIE91ciBnb2FsIGlzIHRvIGNvbnZlcnQgYWxsIEMgaGFuZGxlcnMgdG8gdGFrZSB0aGUKICAvLyBwYXJhbWV0ZXJzIGFzIERhcnQgb2JqZWN0cyBidXQgdW50aWwgdGhlIGNvbnZlcnNpb24gaXMgY29tcGxldGUsIHdlCiAgLy8gbWFpbnRhaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIG1ldGhvZHMgYmVsb3cuCiAgYm9vbCBfbWV0aG9kTmVlZHNPYmplY3RQYXJhbWV0ZXJzKFN0cmluZyBtZXRob2QpIHsKICAgIHN3aXRjaCAobWV0aG9kKSB7CiAgICAgIGNhc2UgJ19saXN0RGV2RlMnOgogICAgICBjYXNlICdfbGlzdERldkZTRmlsZXMnOgogICAgICBjYXNlICdfY3JlYXRlRGV2RlMnOgogICAgICBjYXNlICdfZGVsZXRlRGV2RlMnOgogICAgICBjYXNlICdfd3JpdGVEZXZGU0ZpbGUnOgogICAgICBjYXNlICdfd3JpdGVEZXZGU0ZpbGVzJzoKICAgICAgY2FzZSAnX3JlYWREZXZGU0ZpbGUnOgogICAgICBjYXNlICdfc3Bhd25VcmknOgogICAgICAgIHJldHVybiB0cnVlOwogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CgogIEZ1dHVyZTxSZXNwb25zZT4gc2VuZFRvVk0oKSB7CiAgICBmaW5hbCByZWNlaXZlUG9ydCA9IG5ldyBSYXdSZWNlaXZlUG9ydCgpOwogICAgcmVjZWl2ZVBvcnQuaGFuZGxlciA9ICh2YWx1ZSkgewogICAgICByZWNlaXZlUG9ydC5jbG9zZSgpOwogICAgICBfc2V0UmVzcG9uc2VGcm9tUG9ydCh2YWx1ZSk7CiAgICB9OwogICAgdmFyIGtleXMgPSBwYXJhbXMua2V5cy50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKICAgIHZhciB2YWx1ZXMgPSBwYXJhbXMudmFsdWVzLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgaWYgKCFfbWV0aG9kTmVlZHNPYmplY3RQYXJhbWV0ZXJzKG1ldGhvZCkpIHsKICAgICAga2V5cyA9IF9tYWtlQWxsU3RyaW5nKGtleXMpOwogICAgICB2YWx1ZXMgPSBfbWFrZUFsbFN0cmluZyh2YWx1ZXMpOwogICAgfQoKICAgIGZpbmFsIHJlcXVlc3QgPSBuZXcgTGlzdCg2KQogICAgICAuLlswXSA9IDAgLy8gTWFrZSByb29tIGZvciBPT0IgbWVzc2FnZSB0eXBlLgogICAgICAuLlsxXSA9IHJlY2VpdmVQb3J0LnNlbmRQb3J0CiAgICAgIC4uWzJdID0gc2VyaWFsCiAgICAgIC4uWzNdID0gbWV0aG9kCiAgICAgIC4uWzRdID0ga2V5cwogICAgICAuLls1XSA9IHZhbHVlczsKCiAgICBpZiAoX21ldGhvZE5lZWRzT2JqZWN0UGFyYW1ldGVycyhtZXRob2QpKSB7CiAgICAgIC8vIFdlIHVzZSBhIGRpZmZlcmVudCBtZXRob2QgaW52b2NhdGlvbiBwYXRoIGhlcmUuCiAgICAgIHNlbmRPYmplY3RSb290U2VydmljZU1lc3NhZ2UocmVxdWVzdCk7CiAgICB9IGVsc2UgewogICAgICBzZW5kUm9vdFNlcnZpY2VNZXNzYWdlKHJlcXVlc3QpOwogICAgfQoKICAgIHJldHVybiBfY29tcGxldGVyLmZ1dHVyZTsKICB9CgogIHZvaWQgX3NldFJlc3BvbnNlRnJvbVBvcnQoZHluYW1pYyByZXNwb25zZSkgewogICAgaWYgKHJlc3BvbnNlID09IG51bGwpIHsKICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgaGF2ZSBhIG51bGwgcmVzcG9uc2UgZm9yIE5vdGlmaWNhdGlvbnMuCiAgICAgIGFzc2VydCh0eXBlID09IE1lc3NhZ2VUeXBlLk5vdGlmaWNhdGlvbik7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgX2NvbXBsZXRlci5jb21wbGV0ZShSZXNwb25zZS5mcm9tKHJlc3BvbnNlKSk7CiAgfQoKICB2b2lkIHNldFJlc3BvbnNlKFN0cmluZyByZXNwb25zZSkgewogICAgX2NvbXBsZXRlci5jb21wbGV0ZShuZXcgUmVzcG9uc2UoUmVzcG9uc2VQYXlsb2FkS2luZC5TdHJpbmcsIHJlc3BvbnNlKSk7CiAgfQoKICB2b2lkIHNldEVycm9yUmVzcG9uc2UoaW50IGNvZGUsIFN0cmluZyBkZXRhaWxzKSB7CiAgICBzZXRSZXNwb25zZShlbmNvZGVScGNFcnJvcih0aGlzLCBjb2RlLCBkZXRhaWxzOiAnJG1ldGhvZDogJGRldGFpbHMnKSk7CiAgfQp9Cgpib29sIHNlbmRJc29sYXRlU2VydmljZU1lc3NhZ2UoU2VuZFBvcnQgc3AsIExpc3QgbSkKICAgIG5hdGl2ZSAiVk1TZXJ2aWNlX1NlbmRJc29sYXRlU2VydmljZU1lc3NhZ2UiOwoKdm9pZCBzZW5kUm9vdFNlcnZpY2VNZXNzYWdlKExpc3QgbSkgbmF0aXZlICJWTVNlcnZpY2VfU2VuZFJvb3RTZXJ2aWNlTWVzc2FnZSI7Cgp2b2lkIHNlbmRPYmplY3RSb290U2VydmljZU1lc3NhZ2UoTGlzdCBtKQogICAgbmF0aXZlICJWTVNlcnZpY2VfU2VuZE9iamVjdFJvb3RTZXJ2aWNlTWVzc2FnZSI7CoENAE5OPAEZATUBEEkwARo2EQErGgEuEAEXASAgHwE4IRw3SAgnPQgnPAgmOwgsQAYzBAE5NhkkHCEhJAYEATc7GSkgGCEkBgQBOjUZJRwYIgQBOjQZJRwYIAQBLhcRBigRBiAEASMXGSQVASgkFSsoBAFDJBUrKC0EARA7BAEVGQQBK0MUICUhISMKDyEhIwogIQoGHR4GEQQBTEpQQCsYEwYyLCgGFQQBNi4kGyMHREgeMyMVFRMWORs2PQYeBAFNTUpJMzUWGR4bGx4fHRgVDxYGBAEgLiQbIwc0ODEjJwYBIDMjFRUTFgEwOS0NJwYBHgQBMBxAMBMGMgQBJk0EATRLBAIBNDIBTwEqNQEcZGFydDpfdm1zZXJ2aWNlL21lc3NhZ2UuZGFydDlvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvdm1zZXJ2aWNlL21lc3NhZ2Vfcm91dGVyLmRhcnSJwC8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuX3Ztc2VydmljZTsKCmFic3RyYWN0IGNsYXNzIE1lc3NhZ2VSb3V0ZXIgewogIEZ1dHVyZTxSZXNwb25zZT4gcm91dGVSZXF1ZXN0KFZNU2VydmljZSBzZXJ2aWNlLCBNZXNzYWdlIG1lc3NhZ2UpOwogIHZvaWQgcm91dGVSZXNwb25zZShNZXNzYWdlIG1lc3NhZ2UpOwp9CgplbnVtIFJlc3BvbnNlUGF5bG9hZEtpbmQgewogIC8vLyBSZXNwb25zZSBwYXlsb2FkIGlzIGEgRGFydCBzdHJpbmcuCiAgU3RyaW5nLAoKICAvLy8gUmVzcG9uc2UgcGF5bG9hZCBpcyBhIGJpbmFyeSAoVWludDhMaXN0KS4KICBCaW5hcnksCgogIC8vLyBSZXNwb25zZSBwYXlsb2FkIGlzIGEgc3RyaW5nIGVuY29kZWQgYXMgVVRGOCBieXRlcyAoVWludDhMaXN0KS4KICBVdGY4U3RyaW5nLAp9CgpjbGFzcyBSZXNwb25zZSB7CiAgZmluYWwgUmVzcG9uc2VQYXlsb2FkS2luZCBraW5kOwogIGZpbmFsIHBheWxvYWQ7CgogIC8vLyBDb25zdHJ1Y3QgcmVzcG9uc2Ugb2JqZWN0IHdpdGggdGhlIGdpdmVuIFtwYXlsb2FkXSBhbmQgW2tpbmRdLgogIFJlc3BvbnNlKHRoaXMua2luZCwgdGhpcy5wYXlsb2FkKSB7CiAgICBhc3NlcnQoKCkgewogICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICBjYXNlIFJlc3BvbnNlUGF5bG9hZEtpbmQuU3RyaW5nOgogICAgICAgICAgcmV0dXJuIHBheWxvYWQgaXMgU3RyaW5nOwogICAgICAgIGNhc2UgUmVzcG9uc2VQYXlsb2FkS2luZC5CaW5hcnk6CiAgICAgICAgY2FzZSBSZXNwb25zZVBheWxvYWRLaW5kLlV0ZjhTdHJpbmc6CiAgICAgICAgICByZXR1cm4gcGF5bG9hZCBpcyBVaW50OExpc3Q7CiAgICAgIH0KICAgIH0oKSk7CiAgfQoKICAvLy8gQ29uc3RydWN0IGEgc3RyaW5nIHJlc3BvbnNlIGZyb20gdGhlIGdpdmVuIFt2YWx1ZV0gYnkgZW5jb2RpbmcgaXQKICAvLy8gYXMgSlNPTi4KICBSZXNwb25zZS5qc29uKE9iamVjdCB2YWx1ZSkKICAgICAgOiB0aGlzKFJlc3BvbnNlUGF5bG9hZEtpbmQuU3RyaW5nLCBqc29uLmVuY29kZSh2YWx1ZSkpOwoKICBmYWN0b3J5IFJlc3BvbnNlLmludGVybmFsRXJyb3IoU3RyaW5nIG1lc3NhZ2UpIHsKICAgIHJldHVybiBuZXcgUmVzcG9uc2UuanNvbih7CiAgICAgICd0eXBlJzogJ1NlcnZpY2VFcnJvcicsCiAgICAgICdpZCc6ICcnLAogICAgICAna2luZCc6ICdJbnRlcm5hbEVycm9yJywKICAgICAgJ21lc3NhZ2UnOiBtZXNzYWdlLAogICAgfSk7CiAgfQoKICAvLy8gQ29uc3RydWN0IHJlc3BvbnNlIGZyb20gdGhlIHJlc3BvbnNlIFt2YWx1ZV0gd2hpY2ggY2FuIGJlIGVpdGhlcjoKICAvLy8gICAgIFN0cmluZzogYSBzdHJpbmcKICAvLy8gICAgIEJpbmFyeTogYSBVaW50OExpc3QKICAvLy8gICAgIFV0ZjhTdHJpbmc6IGEgc2luZ2xlIGVsZW1lbnQgbGlzdCBjb250YWluaW5nIFVpbnQ4TGlzdAogIGZhY3RvcnkgUmVzcG9uc2UuZnJvbShPYmplY3QgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSBpcyBTdHJpbmcpIHsKICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShSZXNwb25zZVBheWxvYWRLaW5kLlN0cmluZywgdmFsdWUpOwogICAgfSBlbHNlIGlmICh2YWx1ZSBpcyBVaW50OExpc3QpIHsKICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShSZXNwb25zZVBheWxvYWRLaW5kLkJpbmFyeSwgdmFsdWUpOwogICAgfSBlbHNlIGlmICh2YWx1ZSBpcyBMaXN0KSB7CiAgICAgIGFzc2VydCh2YWx1ZS5sZW5ndGggPT0gMSk7CiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoCiAgICAgICAgICBSZXNwb25zZVBheWxvYWRLaW5kLlV0ZjhTdHJpbmcsIHZhbHVlWzBdIGFzIFVpbnQ4TGlzdCk7CiAgICB9IGVsc2UgaWYgKHZhbHVlIGlzIFJlc3BvbnNlKSB7CiAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93ICdVbnJlY29nbml6ZWQgcmVzcG9uc2U6ICR7dmFsdWV9JzsKICAgIH0KICB9CgogIC8vLyBEZWNvZGUgSlNPTiBjb250YWluZWQgaW4gdGhpcyByZXNwb25zZS4KICBkeW5hbWljIGRlY29kZUpzb24oKSB7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBSZXNwb25zZVBheWxvYWRLaW5kLlN0cmluZzoKICAgICAgICByZXR1cm4ganNvbi5kZWNvZGUocGF5bG9hZCk7CiAgICAgIGNhc2UgUmVzcG9uc2VQYXlsb2FkS2luZC5VdGY4U3RyaW5nOgogICAgICAgIHJldHVybiBqc29uLmZ1c2UodXRmOCkuZGVjb2RlKHBheWxvYWQpOwogICAgICBjYXNlIFJlc3BvbnNlUGF5bG9hZEtpbmQuQmluYXJ5OgogICAgICAgIHRocm93ICdCaW5hcnkgcmVzcG9uc2VzIGNhbiBub3QgYmUgZGVjb2RlZCc7CiAgICB9CiAgfQp9ClcATk48ARkBH0UnAgEbKQoBMAoBRg4CAREiEQFFJhAWKSQpLScICgQBSA8ePgEzHx4QHxoIBAFIGx5BKBs+JT4gIRtCJBQNLwYEAS4ZFCclKzAnNQYEAgEjZGFydDpfdm1zZXJ2aWNlL21lc3NhZ2Vfcm91dGVyLmRhcnQ3b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL3Ztc2VydmljZS9uYW1lZF9sb29rdXAuZGFydIb9Ly8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5fdm1zZXJ2aWNlOwoKLy8vIFNldCBsaWtlIGNvbnRhaW5lcyB3aGljaCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBTdHJpbmcgaWRzIGZvciBpdHMgaXRlbXMKY2xhc3MgTmFtZWRMb29rdXA8RT4gZXh0ZW5kcyBPYmplY3Qgd2l0aCBJdGVyYWJsZU1peGluPEU+IHsKICBmaW5hbCBJZEdlbmVyYXRvciBfZ2VuZXJhdG9yOwogIGZpbmFsIE1hcDxTdHJpbmcsIEU+IF9lbGVtZW50cyA9IG5ldyBNYXA8U3RyaW5nLCBFPigpOwogIGZpbmFsIE1hcDxFLCBTdHJpbmc+IF9pZHMgPSBuZXcgTWFwPEUsIFN0cmluZz4oKTsKCiAgTmFtZWRMb29rdXAoe1N0cmluZyBwcm9sb2d1ZSA9ICcnfSkKICAgICAgOiBfZ2VuZXJhdG9yID0gbmV3IElkR2VuZXJhdG9yKHByb2xvZ3VlOiBwcm9sb2d1ZSk7CgogIHZvaWQgYWRkKEUgZSkgewogICAgZmluYWwgaWQgPSBfZ2VuZXJhdG9yLm5ld0lkKCk7CiAgICBfZWxlbWVudHNbaWRdID0gZTsKICAgIF9pZHNbZV0gPSBpZDsKICB9CgogIHZvaWQgcmVtb3ZlKEUgZSkgewogICAgZmluYWwgaWQgPSBfaWRzLnJlbW92ZShlKTsKICAgIF9lbGVtZW50cy5yZW1vdmUoaWQpOwogICAgX2dlbmVyYXRvci5yZWxlYXNlKGlkKTsKICB9CgogIEUgb3BlcmF0b3IgW10oU3RyaW5nIGlkKSA9PiBfZWxlbWVudHNbaWRdOwogIFN0cmluZyBrZXlPZihFIGUpID0+IF9pZHNbZV07CgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciA9PiBfaWRzLmtleXMuaXRlcmF0b3I7Cn0KCi8vLyBHZW5lcmF0b3IgZm9yIHVuaXF1ZSBpZHMgd2hpY2ggcmVjeWNsZXMgZXhwaXJlZCBvbmVzCmNsYXNzIElkR2VuZXJhdG9yIHsKICAvLy8gRml4ZWQgaW5pdGlhbCBwYXJ0IG9mIHRoZSBpZAogIGZpbmFsIFN0cmluZyBwcm9sb2d1ZTsKICAvLyBJZHMgaW4gdXNlCiAgZmluYWwgU2V0PFN0cmluZz4gX3VzZWQgPSBuZXcgU2V0PFN0cmluZz4oKTsKCiAgLy8vIElkcyB0aGF0IGhhcyBiZWVuIHJlbGVhc2VkICh1c2UgdGhlc2UgYmVmb3JlIGdlbmVyYXRlIG5ldyBvbmVzKQogIGZpbmFsIFNldDxTdHJpbmc+IF9mcmVlID0gbmV3IFNldDxTdHJpbmc+KCk7CgogIC8vLyBOZXh0IGlkIHRvIGdlbmVyYXRlIGlmIG5vIG9uZSBjYW4gYmUgcmVjeWNsZWQgKGZpcnN0IHVzZSBfZnJlZSk7CiAgaW50IF9uZXh0ID0gMDsKCiAgSWRHZW5lcmF0b3Ioe3RoaXMucHJvbG9ndWUgPSAnJ30pOwoKICAvLy8gUmV0dXJucyBhIG5ldyBJZCAocG9zc2libHkgcmVjeWNsZWQpCiAgU3RyaW5nIG5ld0lkKCkgewogICAgdmFyIGlkOwogICAgaWYgKF9mcmVlLmlzRW1wdHkpIHsKICAgICAgaWQgPSBwcm9sb2d1ZSArIChfbmV4dCsrKS50b1N0cmluZygpOwogICAgfSBlbHNlIHsKICAgICAgaWQgPSBfZnJlZS5maXJzdDsKICAgIH0KICAgIF9mcmVlLnJlbW92ZShpZCk7CiAgICBfdXNlZC5hZGQoaWQpOwogICAgcmV0dXJuIGlkOwogIH0KCiAgLy8vIFJlbGVhc2VzIHRoZSBpZCBhbmQgbWFyayBpdCBmb3IgcmVjeWNsZQogIHZvaWQgcmVsZWFzZShTdHJpbmcgaWQpIHsKICAgIGlmIChfdXNlZC5yZW1vdmUoaWQpKSB7CiAgICAgIF9mcmVlLmFkZChpZCk7CiAgICB9CiAgfQp9CkYATk48ARkBTjwgOTQBJjoBEiMXEgQBFR8aHAQBLSABMgIBORQjGRAvAUYvAUcRASUBKxMMGSwNGAYWEw8EAS4cHBUGBAIBIWRhcnQ6X3Ztc2VydmljZS9uYW1lZF9sb29rdXAuZGFydCxvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvYmluL2J1aWx0aW4uZGFydKkkLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgYnVpbHRpbjsKCi8vIE5PVEU6IERvIG5vdCBpbXBvcnQgJ2RhcnQ6aW8nIGluIGJ1aWx0aW4uCmltcG9ydCAnZGFydDphc3luYyc7CmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJyBoaWRlIExpbmtlZExpc3QsIExpbmtlZExpc3RFbnRyeTsKaW1wb3J0ICdkYXJ0Ol9pbnRlcm5hbCcgaGlkZSBTeW1ib2w7CmltcG9ydCAnZGFydDppc29sYXRlJzsKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwoKLy8gRW1iZWRkZXIgc2V0cyB0aGlzIHRvIHRydWUgaWYgdGhlIC0tdHJhY2UtbG9hZGluZyBmbGFnIHdhcyBwYXNzZWQgb24gdGhlCi8vIGNvbW1hbmQgbGluZS4KYm9vbCBfdHJhY2VMb2FkaW5nID0gZmFsc2U7CgovLyBCZWZvcmUgaGFuZGxpbmcgYW4gZW1iZWRkZXIgZW50cnlwb2ludCB3ZSBmaW5hbGl6ZSB0aGUgc2V0dXAgb2YgdGhlCi8vIGRhcnQ6X2J1aWx0aW4gbGlicmFyeS4KYm9vbCBfc2V0dXBDb21wbGV0ZWQgPSBmYWxzZTsKCi8vICdwcmludCcgaW1wbGVtZW50YXRpb24uCi8vIFRoZSBzdGFuZGFsb25lIGVtYmVkZGVyIHJlZ2lzdGVycyB0aGUgY2xvc3VyaXplZCBfcHJpbnQgZnVuY3Rpb24gd2l0aCB0aGUKLy8gZGFydDpjb3JlIGxpYnJhcnkuCnZvaWQgX3ByaW50U3RyaW5nKFN0cmluZyBzKSBuYXRpdmUgIkJ1aWx0aW5fUHJpbnRTdHJpbmciOwoKdm9pZCBfcHJpbnQoYXJnKSB7CiAgX3ByaW50U3RyaW5nKGFyZy50b1N0cmluZygpKTsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpfZ2V0UHJpbnRDbG9zdXJlKCkgPT4gX3ByaW50OwoKLy8gQXN5bmNocm9ub3VzIGxvYWRpbmcgb2YgcmVzb3VyY2VzLgovLyBUaGUgZW1iZWRkZXIgZm9yd2FyZHMgbG9hZGluZyByZXF1ZXN0cyB0byB0aGUgc2VydmljZSBpc29sYXRlLgoKLy8gQSBwb3J0IGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIHNlcnZpY2UgaXNvbGF0ZSBmb3IgSS9PLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpClNlbmRQb3J0IF9sb2FkUG9ydDsKCi8vIFRoZSBpc29sYXRlSWQgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBzZXJ2aWNlIGlzb2xhdGUgZm9yIEkvTy4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQppbnQgX2lzb2xhdGVJZDsKCi8vIFJlcXVlc3RzIG1hZGUgdG8gdGhlIHNlcnZpY2UgaXNvbGF0ZSBvdmVyIHRoZSBsb2FkIHBvcnQuCgovLyBFeHRyYSByZXF1ZXN0cy4gS2VlcCB0aGVzZSBpbiBzeW5jIGJldHdlZW4gbG9hZGVyLmRhcnQgYW5kIGJ1aWx0aW4uZGFydC4KY29uc3QgX0RhcnRfa0luaXRMb2FkZXIgPSA0OyAvLyBJbml0aWFsaXplIHRoZSBsb2FkZXIuCmNvbnN0IF9EYXJ0X2tSZXNvdXJjZUxvYWQgPSA1OyAvLyBSZXNvdXJjZSBjbGFzcyBzdXBwb3J0Lgpjb25zdCBfRGFydF9rR2V0UGFja2FnZVJvb3RVcmkgPSA2OyAvLyBVcmkgb2YgdGhlIHBhY2thZ2VzLyBkaXJlY3RvcnkuCmNvbnN0IF9EYXJ0X2tHZXRQYWNrYWdlQ29uZmlnVXJpID0gNzsgLy8gVXJpIG9mIHRoZSAucGFja2FnZXMgZmlsZS4KY29uc3QgX0RhcnRfa1Jlc29sdmVQYWNrYWdlVXJpID0gODsgLy8gUmVzb2x2ZSBhIHBhY2thZ2U6IHVyaS4KCi8vIE1ha2UgYSByZXF1ZXN0IHRvIHRoZSBsb2FkZXIuIEZ1dHVyZSB3aWxsIGNvbXBsZXRlIHdpdGggcmVzdWx0IHdoaWNoIGlzCi8vIGVpdGhlciBhIFVyaSBvciBhIExpc3Q8aW50Pi4KRnV0dXJlPFQ+IF9tYWtlTG9hZGVyUmVxdWVzdDxUPihpbnQgdGFnLCBTdHJpbmcgdXJpKSB7CiAgYXNzZXJ0KF9pc29sYXRlSWQgIT0gbnVsbCk7CiAgaWYgKF9sb2FkUG9ydCA9PSBudWxsKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiU2VydmljZSBpc29sYXRlIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgfQogIENvbXBsZXRlciBjb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPFQ+KCk7CiAgUmF3UmVjZWl2ZVBvcnQgcG9ydCA9IG5ldyBSYXdSZWNlaXZlUG9ydCgpOwogIHBvcnQuaGFuZGxlciA9IChtc2cpIHsKICAgIC8vIENsb3NlIHRoZSBwb3J0LgogICAgcG9ydC5jbG9zZSgpOwogICAgY29tcGxldGVyLmNvbXBsZXRlKG1zZyk7CiAgfTsKICBfbG9hZFBvcnQuc2VuZChbX3RyYWNlTG9hZGluZywgX2lzb2xhdGVJZCwgdGFnLCBwb3J0LnNlbmRQb3J0LCB1cmldKTsKICByZXR1cm4gY29tcGxldGVyLmZ1dHVyZTsKfQoKLy8gVGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgd2hlbiB0aGUgZW1iZWRkZXIgd2FzIGxhdW5jaGVkLgpVcmkgX3dvcmtpbmdEaXJlY3Rvcnk7Ci8vIFRoZSBVUkkgdGhhdCB0aGUgcm9vdCBzY3JpcHQgd2FzIGxvYWRlZCBmcm9tLiBSZW1lbWJlcmVkIHNvIHRoYXQKLy8gcGFja2FnZSBpbXBvcnRzIGNhbiBiZSByZXNvbHZlZCByZWxhdGl2ZSB0byBpdC4gVGhlIHJvb3Qgc2NyaXB0IGlzIHRoZSBiYXNpcwovLyBmb3IgdGhlIHJvb3QgbGlicmFyeSBpbiB0aGUgVk0uClVyaSBfcm9vdFNjcmlwdDsKLy8gVGhlIHBhY2thZ2Ugcm9vdCBzZXQgb24gdGhlIGNvbW1hbmQgbGluZS4KVXJpIF9wYWNrYWdlUm9vdDsKCi8vIFNwZWNpYWwgaGFuZGxpbmcgZm9yIFdpbmRvd3MgcGF0aHMgc28gdGhhdCB0aGV5IGFyZSBjb21wYXRpYmxlIHdpdGggVVJJCi8vIGhhbmRsaW5nLgovLyBFbWJlZGRlciBzZXRzIHRoaXMgdG8gdHJ1ZSBpZiB3ZSBhcmUgcnVubmluZyBvbiBXaW5kb3dzLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmJvb2wgX2lzV2luZG93cyA9IGZhbHNlOwoKLy8gTG9nZ2luZyBmcm9tIGJ1aWx0aW4uZGFydCBpcyBwcmVmaXhlZCB3aXRoIGEgJyonLgpTdHJpbmcgX2xvZ0lkID0gKElzb2xhdGUuY3VycmVudC5oYXNoQ29kZSAlIDB4MTAwMDAwKS50b1JhZGl4U3RyaW5nKDE2KTsKX2xvZyhtc2cpIHsKICBfcHJpbnQoIiogJF9sb2dJZCAkbXNnIik7Cn0KCl9zYW5pdGl6ZVdpbmRvd3NQYXRoKHBhdGgpIHsKICAvLyBGb3IgV2luZG93cyB3ZSBuZWVkIHRvIG1hc3NhZ2UgdGhlIHBhdGhzIGEgYml0IGFjY29yZGluZyB0bwogIC8vIGh0dHA6Ly9ibG9ncy5tc2RuLmNvbS9iL2llL2FyY2hpdmUvMjAwNi8xMi8wNi9maWxlLXVyaXMtaW4td2luZG93cy5hc3B4CiAgLy8KICAvLyBDb252ZXJ0CiAgLy8gQzpcb25lXHR3b1x0aHJlZQogIC8vIHRvCiAgLy8gL0M6L29uZS90d28vdGhyZWUKCiAgaWYgKF9pc1dpbmRvd3MgPT0gZmFsc2UpIHsKICAgIC8vIERvIG5vdGhpbmcgd2hlbiBub3QgcnVubmluZyBXaW5kb3dzLgogICAgcmV0dXJuIHBhdGg7CiAgfQoKICB2YXIgZml4ZWRQYXRoID0gIiR7cGF0aC5yZXBsYWNlQWxsKCdcXCcsICcvJyl9IjsKCiAgaWYgKChwYXRoLmxlbmd0aCA+IDIpICYmIChwYXRoWzFdID09ICc6JykpIHsKICAgIC8vIFBhdGggYmVnaW5zIHdpdGggYSBkcml2ZSBsZXR0ZXIuCiAgICByZXR1cm4gJy8kZml4ZWRQYXRoJzsKICB9CgogIHJldHVybiBmaXhlZFBhdGg7Cn0KCl90cmltV2luZG93c1BhdGgocGF0aCkgewogIC8vIENvbnZlcnQgL1g6LyB0byBYOi8uCiAgaWYgKF9pc1dpbmRvd3MgPT0gZmFsc2UpIHsKICAgIC8vIERvIG5vdGhpbmcgd2hlbiBub3QgcnVubmluZyBXaW5kb3dzLgogICAgcmV0dXJuIHBhdGg7CiAgfQogIGlmICghcGF0aC5zdGFydHNXaXRoKCcvJykgfHwgKHBhdGgubGVuZ3RoIDwgMykpIHsKICAgIHJldHVybiBwYXRoOwogIH0KICAvLyBNYXRjaCAnLz86Jy4KICBpZiAoKHBhdGhbMF0gPT0gJy8nKSAmJiAocGF0aFsyXSA9PSAnOicpKSB7CiAgICAvLyBSZW1vdmUgbGVhZGluZyAnLycuCiAgICByZXR1cm4gcGF0aC5zdWJzdHJpbmcoMSk7CiAgfQogIHJldHVybiBwYXRoOwp9CgovLyBFbnN1cmUgd2UgaGF2ZSBhIHRyYWlsaW5nIHNsYXNoIGNoYXJhY3Rlci4KX2VuZm9yY2VUcmFpbGluZ1NsYXNoKHVyaSkgewogIGlmICghdXJpLmVuZHNXaXRoKCcvJykpIHsKICAgIHJldHVybiAnJHVyaS8nOwogIH0KICByZXR1cm4gdXJpOwp9CgovLyBFbWJlZGRlciBFbnRyeXBvaW50OgovLyBUaGUgZW1iZWRkZXIgY2FsbHMgdGhpcyBtZXRob2Qgd2l0aCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQp2b2lkIF9zZXRXb3JraW5nRGlyZWN0b3J5KFN0cmluZyBjd2QpIHsKICBpZiAoIV9zZXR1cENvbXBsZXRlZCkgewogICAgX3NldHVwSG9va3MoKTsKICB9CiAgaWYgKF90cmFjZUxvYWRpbmcpIHsKICAgIF9sb2coJ1NldHRpbmcgd29ya2luZyBkaXJlY3Rvcnk6ICRjd2QnKTsKICB9CiAgX3dvcmtpbmdEaXJlY3RvcnkgPSBuZXcgVXJpLmRpcmVjdG9yeShjd2QpOwogIGlmIChfdHJhY2VMb2FkaW5nKSB7CiAgICBfbG9nKCdXb3JraW5nIGRpcmVjdG9yeSBVUkk6ICRfd29ya2luZ0RpcmVjdG9yeScpOwogIH0KfQoKLy8gRW1iZWRkZXIgRW50cnlwb2ludDoKLy8gVGhlIGVtYmVkZGVyIGNhbGxzIHRoaXMgbWV0aG9kIHdpdGggYSBjdXN0b20gcGFja2FnZSByb290LgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpClN0cmluZyBfc2V0UGFja2FnZVJvb3QoU3RyaW5nIHBhY2thZ2VSb290KSB7CiAgaWYgKCFfc2V0dXBDb21wbGV0ZWQpIHsKICAgIF9zZXR1cEhvb2tzKCk7CiAgfQogIGlmIChfdHJhY2VMb2FkaW5nKSB7CiAgICBfbG9nKCdTZXR0aW5nIHBhY2thZ2Ugcm9vdDogJHBhY2thZ2VSb290Jyk7CiAgfQogIGlmIChwYWNrYWdlUm9vdC5zdGFydHNXaXRoKCdmaWxlOicpIHx8CiAgICAgIHBhY2thZ2VSb290LnN0YXJ0c1dpdGgoJ2h0dHA6JykgfHwKICAgICAgcGFja2FnZVJvb3Quc3RhcnRzV2l0aCgnaHR0cHM6JykpIHsKICAgIHBhY2thZ2VSb290ID0gX2VuZm9yY2VUcmFpbGluZ1NsYXNoKHBhY2thZ2VSb290KTsKICAgIF9wYWNrYWdlUm9vdCA9IF93b3JraW5nRGlyZWN0b3J5LnJlc29sdmUocGFja2FnZVJvb3QpOwogIH0gZWxzZSB7CiAgICBwYWNrYWdlUm9vdCA9IF9zYW5pdGl6ZVdpbmRvd3NQYXRoKHBhY2thZ2VSb290KTsKICAgIHBhY2thZ2VSb290ID0gX3RyaW1XaW5kb3dzUGF0aChwYWNrYWdlUm9vdCk7CiAgICBfcGFja2FnZVJvb3QgPSBfd29ya2luZ0RpcmVjdG9yeS5yZXNvbHZlVXJpKG5ldyBVcmkuZGlyZWN0b3J5KHBhY2thZ2VSb290KSk7CiAgfQogIC8vIE5vdyB0aGF0IHdlIGhhdmUgZGV0ZXJtaW5lZCB0aGUgcGFja2FnZVJvb3QgdmFsdWUgYmVpbmcgdXNlZCwgc2V0IGl0CiAgLy8gdXAgZm9yIHVzZSBpbiBQbGF0Zm9ybS5wYWNrYWdlUm9vdC4gVGhpcyBpcyBvbmx5IHNldCB3aGVuIHRoZSBlbWJlZGRlcgogIC8vIHNldHMgdXAgdGhlIHBhY2thZ2Ugcm9vdC4gQXV0b21hdGljYWxseSBkaXNjb3ZlcmVkIHBhY2thZ2Ugcm9vdCB3aWxsCiAgLy8gbm90IHVwZGF0ZSB0aGUgVk1MaWJyYXJ5SG9va3MgdmFsdWUuCiAgdmFyIHBhY2thZ2VSb290U3RyID0gX3BhY2thZ2VSb290LnRvU3RyaW5nKCk7CiAgVk1MaWJyYXJ5SG9va3MucGFja2FnZVJvb3RTdHJpbmcgPSBwYWNrYWdlUm9vdFN0cjsKICBpZiAoX3RyYWNlTG9hZGluZykgewogICAgX2xvZygnUGFja2FnZSByb290IFVSSTogJF9wYWNrYWdlUm9vdCcpOwogIH0KICByZXR1cm4gcGFja2FnZVJvb3RTdHI7Cn0KCi8vIEVtYmVkZGVyIEVudHJ5cG9pbnQ6CkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKU3RyaW5nIF9zZXRQYWNrYWdlc01hcChTdHJpbmcgcGFja2FnZXNQYXJhbSkgewogIGlmICghX3NldHVwQ29tcGxldGVkKSB7CiAgICBfc2V0dXBIb29rcygpOwogIH0KICAvLyBGaXJzdCBjb252ZXJ0IHRoZSBwYWNrYWdlcyBwYXJhbWV0ZXIgZnJvbSB0aGUgY29tbWFuZCBsaW5lIHRvIGEgVVJJIHdoaWNoCiAgLy8gY2FuIGJlIGhhbmRsZWQgYnkgdGhlIGxvYWRlciBjb2RlLgogIC8vIFRPRE8oaXBvc3ZhKTogQ29uc2lkZXIgcmVmYWN0b3JpbmcgdGhlIGNvbW1vbiBjb2RlIGJlbG93IHdoaWNoIGlzIGFsbW9zdAogIC8vIHNoYXJlZCB3aXRoIHJlc29sdXRpb24gb2YgdGhlIHJvb3Qgc2NyaXB0LgogIGlmIChfdHJhY2VMb2FkaW5nKSB7CiAgICBfbG9nKCJSZXNvbHZpbmcgcGFja2FnZXMgbWFwOiAkcGFja2FnZXNQYXJhbSIpOwogIH0KICBpZiAoX3dvcmtpbmdEaXJlY3RvcnkgPT0gbnVsbCkgewogICAgdGhyb3cgJ05vIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgc2V0Lic7CiAgfQogIHZhciBwYWNrYWdlc05hbWUgPSBfc2FuaXRpemVXaW5kb3dzUGF0aChwYWNrYWdlc1BhcmFtKTsKICB2YXIgcGFja2FnZXNVcmkgPSBVcmkucGFyc2UocGFja2FnZXNOYW1lKTsKICBpZiAocGFja2FnZXNVcmkuc2NoZW1lID09ICcnKSB7CiAgICAvLyBTY3JpcHQgZG9lcyBub3QgaGF2ZSBhIHNjaGVtZSwgYXNzdW1lIHRoYXQgaXQgaXMgYSBwYXRoLAogICAgLy8gcmVzb2x2ZSBpdCBhZ2FpbnN0IHRoZSB3b3JraW5nIGRpcmVjdG9yeS4KICAgIHBhY2thZ2VzVXJpID0gX3dvcmtpbmdEaXJlY3RvcnkucmVzb2x2ZVVyaShwYWNrYWdlc1VyaSk7CiAgfQogIHZhciBwYWNrYWdlc1VyaVN0ciA9IHBhY2thZ2VzVXJpLnRvU3RyaW5nKCk7CiAgVk1MaWJyYXJ5SG9va3MucGFja2FnZUNvbmZpZ1N0cmluZyA9IHBhY2thZ2VzVXJpU3RyOwogIGlmIChfdHJhY2VMb2FkaW5nKSB7CiAgICBfbG9nKCdSZXNvbHZlZCBwYWNrYWdlcyBtYXAgdG86ICRwYWNrYWdlc1VyaScpOwogIH0KICByZXR1cm4gcGFja2FnZXNVcmlTdHI7Cn0KCi8vIFJlc29sdmVzIHRoZSBzY3JpcHQgdXJpIGluIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlmZiB0aGUgZ2l2ZW4gdXJpCi8vIGRpZCBub3Qgc3BlY2lmeSBhIHNjaGVtZSAoZS5nLiBhIHBhdGggdG8gYSBzY3JpcHQgZmlsZSBvbiB0aGUgY29tbWFuZCBsaW5lKS4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpTdHJpbmcgX3Jlc29sdmVTY3JpcHRVcmkoU3RyaW5nIHNjcmlwdE5hbWUpIHsKICBpZiAoX3RyYWNlTG9hZGluZykgewogICAgX2xvZygiUmVzb2x2aW5nIHNjcmlwdDogJHNjcmlwdE5hbWUiKTsKICB9CiAgaWYgKF93b3JraW5nRGlyZWN0b3J5ID09IG51bGwpIHsKICAgIHRocm93ICdObyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHNldC4nOwogIH0KICBzY3JpcHROYW1lID0gX3Nhbml0aXplV2luZG93c1BhdGgoc2NyaXB0TmFtZSk7CgogIHZhciBzY3JpcHRVcmkgPSBVcmkucGFyc2Uoc2NyaXB0TmFtZSk7CiAgaWYgKHNjcmlwdFVyaS5zY2hlbWUgPT0gJycpIHsKICAgIC8vIFNjcmlwdCBkb2VzIG5vdCBoYXZlIGEgc2NoZW1lLCBhc3N1bWUgdGhhdCBpdCBpcyBhIHBhdGgsCiAgICAvLyByZXNvbHZlIGl0IGFnYWluc3QgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LgogICAgc2NyaXB0VXJpID0gX3dvcmtpbmdEaXJlY3RvcnkucmVzb2x2ZVVyaShzY3JpcHRVcmkpOwogIH0KCiAgLy8gUmVtZW1iZXIgdGhlIHJvb3Qgc2NyaXB0IFVSSSBzbyB0aGF0IHdlIGNhbiByZXNvbHZlIHBhY2thZ2VzIGJhc2VkIG9uCiAgLy8gdGhpcyBsb2NhdGlvbi4KICBfcm9vdFNjcmlwdCA9IHNjcmlwdFVyaTsKCiAgaWYgKF90cmFjZUxvYWRpbmcpIHsKICAgIF9sb2coJ1Jlc29sdmVkIGVudHJ5IHBvaW50IHRvOiAkX3Jvb3RTY3JpcHQnKTsKICB9CiAgcmV0dXJuIHNjcmlwdFVyaS50b1N0cmluZygpOwp9CgovLyBPbmx5IHVzZWQgYnkgdm0vY2MgdW5pdCB0ZXN0cy4KVXJpIF9yZXNvbHZlUGFja2FnZVVyaShVcmkgdXJpKSB7CiAgYXNzZXJ0KF9wYWNrYWdlUm9vdCAhPSBudWxsKTsKICByZXR1cm4gX3BhY2thZ2VSb290LnJlc29sdmUodXJpLnBhdGgpOwp9CgovLyBSZXR1cm5zIGVpdGhlciBhIGZpbGUgcGF0aCBvciBhIFVSSSBzdGFydGluZyB3aXRoIGh0dHBbc106LCBhcyBhIFN0cmluZy4KU3RyaW5nIF9maWxlUGF0aEZyb21VcmkoU3RyaW5nIHVzZXJVcmkpIHsKICB2YXIgdXJpID0gVXJpLnBhcnNlKHVzZXJVcmkpOwogIGlmIChfdHJhY2VMb2FkaW5nKSB7CiAgICBfbG9nKCdHZXR0aW5nIGZpbGUgcGF0aCBmcm9tOiAkdXJpJyk7CiAgfQoKICB2YXIgcGF0aDsKICBzd2l0Y2ggKHVyaS5zY2hlbWUpIHsKICAgIGNhc2UgJyc6CiAgICBjYXNlICdmaWxlJzoKICAgICAgcmV0dXJuIHVyaS50b0ZpbGVQYXRoKCk7CiAgICBjYXNlICdwYWNrYWdlJzoKICAgICAgcmV0dXJuIF9maWxlUGF0aEZyb21VcmkoX3Jlc29sdmVQYWNrYWdlVXJpKHVyaSkudG9TdHJpbmcoKSk7CiAgICBjYXNlICdkYXRhJzoKICAgIGNhc2UgJ2h0dHAnOgogICAgY2FzZSAnaHR0cHMnOgogICAgICByZXR1cm4gdXJpLnRvU3RyaW5nKCk7CiAgICBkZWZhdWx0OgogICAgICAvLyBPbmx5IGhhbmRsaW5nIGZpbGUsIGh0dHAsIGFuZCBwYWNrYWdlIFVSSXMKICAgICAgLy8gaW4gc3RhbmRhbG9uZSBiaW5hcnkuCiAgICAgIGlmIChfdHJhY2VMb2FkaW5nKSB7CiAgICAgICAgX2xvZygnVW5rbm93biBzY2hlbWUgKCR7dXJpLnNjaGVtZX0pIGluICR1cmkuJyk7CiAgICAgIH0KICAgICAgdGhyb3cgJ05vdCBhIGtub3duIHNjaGVtZTogJHVyaSc7CiAgfQp9CgovLyBSZWdpc3RlciBjYWxsYmFja3MgYW5kIGhvb2tzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGNvcmUgbGlicmFyaWVzLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCl9zZXR1cEhvb2tzKCkgewogIF9zZXR1cENvbXBsZXRlZCA9IHRydWU7CiAgVk1MaWJyYXJ5SG9va3MucmVzb3VyY2VSZWFkQXNCeXRlcyA9IF9yZXNvdXJjZVJlYWRBc0J5dGVzOwoKICBWTUxpYnJhcnlIb29rcy5wYWNrYWdlUm9vdFVyaUZ1dHVyZSA9IF9nZXRQYWNrYWdlUm9vdEZ1dHVyZTsKICBWTUxpYnJhcnlIb29rcy5wYWNrYWdlQ29uZmlnVXJpRnV0dXJlID0gX2dldFBhY2thZ2VDb25maWdGdXR1cmU7CiAgVk1MaWJyYXJ5SG9va3MucmVzb2x2ZVBhY2thZ2VVcmlGdXR1cmUgPSBfcmVzb2x2ZVBhY2thZ2VVcmlGdXR1cmU7Cn0KCi8vIEhhbmRsaW5nIG9mIFJlc291cmNlIGNsYXNzIGJ5IGRpc3BhdGNoaW5nIHRvIHRoZSBsb2FkIHBvcnQuCkZ1dHVyZTxMaXN0PGludD4+IF9yZXNvdXJjZVJlYWRBc0J5dGVzKFVyaSB1cmkpIGFzeW5jIHsKICBMaXN0IHJlc3BvbnNlID0KICAgICAgYXdhaXQgX21ha2VMb2FkZXJSZXF1ZXN0PExpc3Q8aW50Pj4oX0RhcnRfa1Jlc291cmNlTG9hZCwgdXJpLnRvU3RyaW5nKCkpOwogIGlmIChyZXNwb25zZVs0XSBpcyBTdHJpbmcpIHsKICAgIC8vIFRocm93IHRoZSBlcnJvci4KICAgIHRocm93IHJlc3BvbnNlWzRdOwogIH0gZWxzZSB7CiAgICByZXR1cm4gcmVzcG9uc2VbNF07CiAgfQp9CgovLyBUT0RPKG1mYWlyaHVyc3QpOiByZW1vdmUgdGhpcwpGdXR1cmU8VXJpPiBfZ2V0UGFja2FnZVJvb3RGdXR1cmUoKSB7CiAgaWYgKF90cmFjZUxvYWRpbmcpIHsKICAgIF9sb2coIlJlcXVlc3QgZm9yIHBhY2thZ2Ugcm9vdCBmcm9tIHVzZXIgY29kZS4iKTsKICB9CiAgLy8gUmV0dXJuIG51bGwsIGFzIHRoZSBgcGFja2FnZXMvYCBkaXJlY3RvcnkgaXMgbm90IHN1cHBvcnRlZCBpbiBkYXJ0IDIuCiAgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUobnVsbCk7Cn0KCkZ1dHVyZTxVcmk+IF9nZXRQYWNrYWdlQ29uZmlnRnV0dXJlKCkgewogIGlmIChfdHJhY2VMb2FkaW5nKSB7CiAgICBfbG9nKCJSZXF1ZXN0IGZvciBwYWNrYWdlIGNvbmZpZyBmcm9tIHVzZXIgY29kZS4iKTsKICB9CiAgYXNzZXJ0KF9sb2FkUG9ydCAhPSBudWxsKTsKICByZXR1cm4gX21ha2VMb2FkZXJSZXF1ZXN0PFVyaT4oX0RhcnRfa0dldFBhY2thZ2VDb25maWdVcmksIG51bGwpOwp9CgpGdXR1cmU8VXJpPiBfcmVzb2x2ZVBhY2thZ2VVcmlGdXR1cmUoVXJpIHBhY2thZ2VVcmkpIGFzeW5jIHsKICBpZiAoX3RyYWNlTG9hZGluZykgewogICAgX2xvZygiUmVxdWVzdCBmb3IgcGFja2FnZSBVcmkgcmVzb2x1dGlvbiBmcm9tIHVzZXIgY29kZTogJHBhY2thZ2VVcmkiKTsKICB9CiAgaWYgKHBhY2thZ2VVcmkuc2NoZW1lICE9ICJwYWNrYWdlIikgewogICAgaWYgKF90cmFjZUxvYWRpbmcpIHsKICAgICAgX2xvZygiTm9uLXBhY2thZ2UgVXJpLCByZXR1cm5pbmcgdW5tb2RpZmllZDogJHBhY2thZ2VVcmkiKTsKICAgIH0KICAgIC8vIFJldHVybiB0aGUgaW5jb21pbmcgcGFyYW1ldGVyIGlmIG5vdCBwYXNzZWQgYSBwYWNrYWdlOiBVUkkuCiAgICByZXR1cm4gcGFja2FnZVVyaTsKICB9CiAgdmFyIHJlc3VsdCA9IGF3YWl0IF9tYWtlTG9hZGVyUmVxdWVzdDxVcmk+KAogICAgICBfRGFydF9rUmVzb2x2ZVBhY2thZ2VVcmksIHBhY2thZ2VVcmkudG9TdHJpbmcoKSk7CiAgaWYgKHJlc3VsdCBpcyEgVXJpKSB7CiAgICBpZiAoX3RyYWNlTG9hZGluZykgewogICAgICBfbG9nKCJFeGNlcHRpb24gd2hlbiByZXNvbHZpbmcgcGFja2FnZSBVUkk6ICRwYWNrYWdlVXJpIik7CiAgICB9CiAgICByZXN1bHQgPSBudWxsOwogIH0KICBpZiAoX3RyYWNlTG9hZGluZykgewogICAgX2xvZygiUmVzb2x2ZWQgJyRwYWNrYWdlVXJpJyB0byAnJHJlc3VsdCciKTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQqBXQBOTjwBEQEtFTslFxoBTBEcAUcaHgEbTRY6ARMgAgEaHgEmQgE+GhQBRxoQATwBTDc6R0Q/AUsgNx4bRQQsLhkXEh0FSBsCAUEXRFAjES0SAUsNPBoZATVJDBwCAR1BTQUNFggXAR0sEQQBMwEvKBoEARQCARkaHSwRBDQRBBIuGx4EDwIBLh0cFAQOAgEYRhooGhMEFy0ELhc3BAIBGD4aLRoTBBcwBCkpKjY7CzUxUQRKTEoqMDUXLQQZAgEYGi8aEwRPKE4wFzQEIy8EOi0iQDE9BC83FzQEGQIBTlAaLhcrBCMvBDEBKSBAMTkEAUsUGwEXMwQfAgEiIiApAgFMKiAXKgQBDBgNER8UQxEREh0NNB8bOQgoBAIBRRoQGj0BP0NFAgE/OBJQHxgXCxgEAgEhJhc2BEshAgEoFzgEHUQCAT0XTAQoGUIGQxcELjgYGUEGEwQXMQQRAgENZGFydDpfYnVpbHRpbjxvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaHRtbC9kYXJ0aXVtL25hdGl2ZXdyYXBwZXJzLmRhcnSBfS8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IG5hdGl2ZXdyYXBwZXJzOwoKY2xhc3MgTmF0aXZlRmllbGRXcmFwcGVyQ2xhc3MxIHt9CgpjbGFzcyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczIge30KCmNsYXNzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMyB7fQoKY2xhc3MgTmF0aXZlRmllbGRXcmFwcGVyQ2xhc3M0IHt9Cg8ATk48ARgBIgEiASIBIgETZGFydDpuYXRpdmV3cmFwcGVycyZvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW8vaW8uZGFydJ8aLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8qKgogKiBGaWxlLCBzb2NrZXQsIEhUVFAsIGFuZCBvdGhlciBJL08gc3VwcG9ydCBmb3Igbm9uLXdlYiBhcHBsaWNhdGlvbnMuCiAqCiAqICoqSW1wb3J0YW50OioqIEJyb3dzZXItYmFzZWQgYXBwbGljYXRpb25zIGNhbid0IHVzZSB0aGlzIGxpYnJhcnkuCiAqIE9ubHkgc2VydmVycywgY29tbWFuZC1saW5lIHNjcmlwdHMsIGFuZCBGbHV0dGVyIG1vYmlsZSBhcHBzIGNhbiBpbXBvcnQKICogYW5kIHVzZSBkYXJ0OmlvLgogKgogKiBUaGlzIGxpYnJhcnkgYWxsb3dzIHlvdSB0byB3b3JrIHdpdGggZmlsZXMsIGRpcmVjdG9yaWVzLAogKiBzb2NrZXRzLCBwcm9jZXNzZXMsIEhUVFAgc2VydmVycyBhbmQgY2xpZW50cywgYW5kIG1vcmUuCiAqIE1hbnkgb3BlcmF0aW9ucyByZWxhdGVkIHRvIGlucHV0IGFuZCBvdXRwdXQgYXJlIGFzeW5jaHJvbm91cwogKiBhbmQgYXJlIGhhbmRsZWQgdXNpbmcgW0Z1dHVyZV1zIG9yIFtTdHJlYW1dcywgYm90aCBvZiB3aGljaAogKiBhcmUgZGVmaW5lZCBpbiB0aGUgW2RhcnQ6YXN5bmMKICogbGlicmFyeV0oLi4vZGFydC1hc3luYy9kYXJ0LWFzeW5jLWxpYnJhcnkuaHRtbCkuCiAqCiAqIFRvIHVzZSB0aGUgZGFydDppbyBsaWJyYXJ5IGluIHlvdXIgY29kZToKICoKICogICAgIGltcG9ydCAnZGFydDppbyc7CiAqCiAqIEZvciBhbiBpbnRyb2R1Y3Rpb24gdG8gSS9PIGluIERhcnQsIHNlZSB0aGUgW2RhcnQ6aW8gbGlicmFyeQogKiB0b3VyXShodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvZGFydC12bS9pby1saWJyYXJ5LXRvdXIpLgogKgogKiAjIyBGaWxlLCBEaXJlY3RvcnksIGFuZCBMaW5rCiAqCiAqIEFuIGluc3RhbmNlIG9mIFtGaWxlXSwgW0RpcmVjdG9yeV0sIG9yIFtMaW5rXSByZXByZXNlbnRzIGEgZmlsZSwKICogZGlyZWN0b3J5LCBvciBsaW5rLCByZXNwZWN0aXZlbHksIGluIHRoZSBuYXRpdmUgZmlsZSBzeXN0ZW0uCiAqCiAqIFlvdSBjYW4gbWFuaXB1bGF0ZSB0aGUgZmlsZSBzeXN0ZW0gdGhyb3VnaCBvYmplY3RzIG9mIHRoZXNlIHR5cGVzLgogKiBGb3IgZXhhbXBsZSwgeW91IGNhbiByZW5hbWUgYSBmaWxlIG9yIGRpcmVjdG9yeToKICoKICogICAgIEZpbGUgbXlGaWxlID0gbmV3IEZpbGUoJ215RmlsZS50eHQnKTsKICogICAgIG15RmlsZS5yZW5hbWUoJ3lvdXJGaWxlLnR4dCcpLnRoZW4oKF8pID0+IHByaW50KCdmaWxlIHJlbmFtZWQnKSk7CiAqCiAqIE1hbnkgbWV0aG9kcyBwcm92aWRlZCBieSB0aGUgRmlsZSwgRGlyZWN0b3J5LCBhbmQgTGluayBjbGFzc2VzCiAqIHJ1biBhc3luY2hyb25vdXNseSBhbmQgcmV0dXJuIGEgRnV0dXJlLgogKgogKiAjIyBGaWxlU3lzdGVtRW50aXR5CiAqCiAqIEZpbGUsIERpcmVjdG9yeSwgYW5kIExpbmsgYWxsIGV4dGVuZCBbRmlsZVN5c3RlbUVudGl0eV0uCiAqIEluIGFkZGl0aW9uIHRvIGJlaW5nIHRoZSBzdXBlcmNsYXNzIGZvciB0aGVzZSBjbGFzc2VzLAogKiBGaWxlU3lzdGVtRW50aXR5IGhhcyBhIG51bWJlciBvZiBzdGF0aWMgbWV0aG9kcyBmb3Igd29ya2luZyB3aXRoIHBhdGhzLgogKgogKiBUbyBnZXQgaW5mb3JtYXRpb24gYWJvdXQgYSBwYXRoLAogKiB5b3UgY2FuIHVzZSB0aGUgRmlsZVN5c3RlbUVudGl0eSBzdGF0aWMgbWV0aG9kcwogKiBzdWNoIGFzICdpc0RpcmVjdG9yeScsICdpc0ZpbGUnLCBhbmQgJ2V4aXN0cycuCiAqIEJlY2F1c2UgZmlsZSBzeXN0ZW0gYWNjZXNzIGludm9sdmVzIEkvTywgdGhlc2UgbWV0aG9kcwogKiBhcmUgYXN5bmNocm9ub3VzIGFuZCByZXR1cm4gYSBGdXR1cmUuCiAqCiAqICAgICBGaWxlU3lzdGVtRW50aXR5LmlzRGlyZWN0b3J5KG15UGF0aCkudGhlbigoaXNEaXIpIHsKICogICAgICAgaWYgKGlzRGlyKSB7CiAqICAgICAgICAgcHJpbnQoJyRteVBhdGggaXMgYSBkaXJlY3RvcnknKTsKICogICAgICAgfSBlbHNlIHsKICogICAgICAgICBwcmludCgnJG15UGF0aCBpcyBub3QgYSBkaXJlY3RvcnknKTsKICogICAgICAgfQogKiAgICAgfSk7CiAqCiAqICMjIEh0dHBTZXJ2ZXIgYW5kIEh0dHBDbGllbnQKICoKICogVGhlIGNsYXNzZXMgW0h0dHBTZXJ2ZXJdIGFuZCBbSHR0cENsaWVudF0KICogcHJvdmlkZSBIVFRQIHNlcnZlciBhbmQgSFRUUCBjbGllbnQgZnVuY3Rpb25hbGl0eS4KICoKICogVGhlIFtIdHRwU2VydmVyXSBjbGFzcyBwcm92aWRlcyB0aGUgYmFzaWMgZnVuY3Rpb25hbGl0eSBmb3IKICogaW1wbGVtZW50aW5nIGFuIEhUVFAgc2VydmVyLgogKiBGb3Igc29tZSBoaWdoZXItbGV2ZWwgYnVpbGRpbmctYmxvY2tzLCB3ZSByZWNvbW1lbmQgdGhhdCB5b3UgdHJ5CiAqIHRoZSBbc2hlbGZdKGh0dHBzOi8vcHViLmRhcnRsYW5nLm9yZy9wYWNrYWdlcy9zaGVsZikKICogcHViIHBhY2thZ2UsIHdoaWNoIGNvbnRhaW5zCiAqIGEgc2V0IG9mIGhpZ2gtbGV2ZWwgY2xhc3NlcyB0aGF0LCB0b2dldGhlciB3aXRoIHRoZSBbSHR0cFNlcnZlcl0gY2xhc3MKICogaW4gdGhpcyBsaWJyYXJ5LCBtYWtlIGl0IGVhc2llciB0byBpbXBsZW1lbnQgSFRUUCBzZXJ2ZXJzLgogKgogKiAjIyBQcm9jZXNzCiAqCiAqIFRoZSBbUHJvY2Vzc10gY2xhc3MgcHJvdmlkZXMgYSB3YXkgdG8gcnVuIGEgcHJvY2VzcyBvbgogKiB0aGUgbmF0aXZlIG1hY2hpbmUuCiAqIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGUgc3Bhd25zIGEgcHJvY2VzcyB0aGF0IHJlY3Vyc2l2ZWx5IGxpc3RzCiAqIHRoZSBmaWxlcyB1bmRlciBgd2ViYC4KICoKICogICAgIFByb2Nlc3Muc3RhcnQoJ2xzJywgWyctUicsICd3ZWInXSkudGhlbigocHJvY2VzcykgewogKiAgICAgICBzdGRvdXQuYWRkU3RyZWFtKHByb2Nlc3Muc3Rkb3V0KTsKICogICAgICAgc3RkZXJyLmFkZFN0cmVhbShwcm9jZXNzLnN0ZGVycik7CiAqICAgICAgIHByb2Nlc3MuZXhpdENvZGUudGhlbihwcmludCk7CiAqICAgICB9KTsKICoKICogVXNpbmcgYHN0YXJ0KClgIHJldHVybnMgYSBGdXR1cmUsIHdoaWNoIGNvbXBsZXRlcyB3aXRoIGEgW1Byb2Nlc3NdIG9iamVjdAogKiB3aGVuIHRoZSBwcm9jZXNzIGhhcyBzdGFydGVkLiBUaGlzIFtQcm9jZXNzXSBvYmplY3QgYWxsb3dzIHlvdSB0byBpbnRlcmFjdAogKiB3aXRoIHRoZSBwcm9jZXNzIHdoaWxlIGl0IGlzIHJ1bm5pbmcuIFVzaW5nIGBydW4oKWAgcmV0dXJucyBhIEZ1dHVyZSwgd2hpY2gKICogY29tcGxldGVzIHdpdGggYSBbUHJvY2Vzc1Jlc3VsdF0gb2JqZWN0IHdoZW4gdGhlIHNwYXduZWQgcHJvY2VzcyBoYXMKICogdGVybWluYXRlZC4gVGhpcyBbUHJvY2Vzc1Jlc3VsdF0gb2JqZWN0IGNvbGxlY3RzIHRoZSBvdXRwdXQgYW5kIGV4aXQgY29kZQogKiBmcm9tIHRoZSBwcm9jZXNzLgogKgogKiBXaGVuIHVzaW5nIGBzdGFydCgpYCwKICogeW91IG5lZWQgdG8gcmVhZCBhbGwgZGF0YSBjb21pbmcgb24gdGhlIHN0ZG91dCBhbmQgc3RkZXJyIHN0cmVhbXMgb3RoZXJ3aXNlCiAqIHRoZSBzeXN0ZW0gcmVzb3VyY2VzIHdpbGwgbm90IGJlIGZyZWVkLgogKgogKiAjIyBXZWJTb2NrZXQKICoKICogVGhlIFtXZWJTb2NrZXRdIGNsYXNzIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSB3ZWIgc29ja2V0IHByb3RvY29sLiBUaGlzCiAqIGFsbG93cyBmdWxsLWR1cGxleCBjb21tdW5pY2F0aW9ucyBiZXR3ZWVuIGNsaWVudCBhbmQgc2VydmVyIGFwcGxpY2F0aW9ucy4KICoKICogQSB3ZWIgc29ja2V0IHNlcnZlciB1c2VzIGEgbm9ybWFsIEhUVFAgc2VydmVyIGZvciBhY2NlcHRpbmcgd2ViIHNvY2tldAogKiBjb25uZWN0aW9ucy4gVGhlIGluaXRpYWwgaGFuZHNoYWtlIGlzIGEgSFRUUCByZXF1ZXN0IHdoaWNoIGlzIHRoZW4gdXBncmFkZWQgdG8gYQogKiB3ZWIgc29ja2V0IGNvbm5lY3Rpb24uCiAqIFRoZSBzZXJ2ZXIgdXBncmFkZXMgdGhlIHJlcXVlc3QgdXNpbmcgW1dlYlNvY2tldFRyYW5zZm9ybWVyXQogKiBhbmQgbGlzdGVucyBmb3IgdGhlIGRhdGEgb24gdGhlIHJldHVybmVkIHdlYiBzb2NrZXQuCiAqIEZvciBleGFtcGxlLCBoZXJlJ3MgYSBtaW5pIHNlcnZlciB0aGF0IGxpc3RlbnMgZm9yICd3cycgZGF0YQogKiBvbiBhIFdlYlNvY2tldDoKICoKICogICAgIHJ1blpvbmVkKCgpIGFzeW5jIHsKICogICAgICAgdmFyIHNlcnZlciA9IGF3YWl0IEh0dHBTZXJ2ZXIuYmluZCgnMTI3LjAuMC4xJywgNDA0MCk7CiAqICAgICAgIHNlcnZlci5saXN0ZW4oKEh0dHBSZXF1ZXN0IHJlcSkgYXN5bmMgewogKiAgICAgICAgIGlmIChyZXEudXJpLnBhdGggPT0gJy93cycpIHsKICogICAgICAgICAgIHZhciBzb2NrZXQgPSBhd2FpdCBXZWJTb2NrZXRUcmFuc2Zvcm1lci51cGdyYWRlKHJlcSk7CiAqICAgICAgICAgICBzb2NrZXQubGlzdGVuKGhhbmRsZU1zZyk7CiAqICAgICAgICAgfQogKiAgICAgICB9KTsKICogICAgIH0sIG9uRXJyb3I6IChlKSA9PiBwcmludCgiQW4gZXJyb3Igb2NjdXJyZWQuIikpOwogKgogKiBUaGUgY2xpZW50IGNvbm5lY3RzIHRvIHRoZSBXZWJTb2NrZXQgdXNpbmcgdGhlIGBjb25uZWN0KClgIG1ldGhvZAogKiBhbmQgYSBVUkkgdGhhdCB1c2VzIHRoZSBXZWIgU29ja2V0IHByb3RvY29sLgogKiBUaGUgY2xpZW50IGNhbiB3cml0ZSB0byB0aGUgV2ViU29ja2V0IHdpdGggdGhlIGBhZGQoKWAgbWV0aG9kLgogKiBGb3IgZXhhbXBsZSwKICoKICogICAgIHZhciBzb2NrZXQgPSBhd2FpdCBXZWJTb2NrZXQuY29ubmVjdCgnd3M6Ly8xMjcuMC4wLjE6NDA0MC93cycpOwogKiAgICAgc29ja2V0LmFkZCgnSGVsbG8sIFdvcmxkIScpOwogKgogKiBDaGVjayBvdXQgdGhlCiAqIFt3ZWJzb2NrZXRfc2FtcGxlXShodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL2RhcnQtc2FtcGxlcy90cmVlL21hc3Rlci9odG1sNS93ZWIvd2Vic29ja2V0cy9iYXNpY3MpCiAqIGFwcCwgd2hpY2ggdXNlcyBXZWJTb2NrZXRzIHRvIGNvbW11bmljYXRlIHdpdGggYSBzZXJ2ZXIuCiAqCiAqICMjIFNvY2tldCBhbmQgU2VydmVyU29ja2V0CiAqCiAqIENsaWVudHMgYW5kIHNlcnZlcnMgdXNlIFtTb2NrZXRdcyB0byBjb21tdW5pY2F0ZSB1c2luZyB0aGUgVENQIHByb3RvY29sLgogKiBVc2UgW1NlcnZlclNvY2tldF0gb24gdGhlIHNlcnZlciBzaWRlIGFuZCBbU29ja2V0XSBvbiB0aGUgY2xpZW50LgogKiBUaGUgc2VydmVyIGNyZWF0ZXMgYSBsaXN0ZW5pbmcgc29ja2V0IHVzaW5nIHRoZSBgYmluZCgpYCBtZXRob2QgYW5kCiAqIHRoZW4gbGlzdGVucyBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnMgb24gdGhlIHNvY2tldC4gRm9yIGV4YW1wbGU6CiAqCiAqICAgICBTZXJ2ZXJTb2NrZXQuYmluZCgnMTI3LjAuMC4xJywgNDA0MSkKICogICAgICAgLnRoZW4oKHNlcnZlclNvY2tldCkgewogKiAgICAgICAgIHNlcnZlclNvY2tldC5saXN0ZW4oKHNvY2tldCkgewogKiAgICAgICAgICAgc29ja2V0LnRyYW5zZm9ybSh1dGY4LmRlY29kZXIpLmxpc3RlbihwcmludCk7CiAqICAgICAgICAgfSk7CiAqICAgICAgIH0pOwogKgogKiBBIGNsaWVudCBjb25uZWN0cyBhIFNvY2tldCB1c2luZyB0aGUgYGNvbm5lY3QoKWAgbWV0aG9kLAogKiB3aGljaCByZXR1cm5zIGEgRnV0dXJlLgogKiBVc2luZyBgd3JpdGUoKWAsIGB3cml0ZWxuKClgLCBvciBgd3JpdGVBbGwoKWAgYXJlIHRoZSBlYXNpZXN0IHdheXMgdG8KICogc2VuZCBkYXRhIG92ZXIgdGhlIHNvY2tldC4KICogRm9yIGV4YW1wbGU6CiAqCiAqICAgICBTb2NrZXQuY29ubmVjdCgnMTI3LjAuMC4xJywgNDA0MSkudGhlbigoc29ja2V0KSB7CiAqICAgICAgIHNvY2tldC53cml0ZSgnSGVsbG8sIFdvcmxkIScpOwogKiAgICAgfSk7CiAqCiAqIEJlc2lkZXMgW1NvY2tldF0gYW5kIFtTZXJ2ZXJTb2NrZXRdLCB0aGUgW1Jhd1NvY2tldF0gYW5kCiAqIFtSYXdTZXJ2ZXJTb2NrZXRdIGNsYXNzZXMgYXJlIGF2YWlsYWJsZSBmb3IgbG93ZXItbGV2ZWwgYWNjZXNzCiAqIHRvIGFzeW5jIHNvY2tldCBJTy4KICoKICogIyMgU3RhbmRhcmQgb3V0cHV0LCBlcnJvciwgYW5kIGlucHV0IHN0cmVhbXMKICoKICogVGhpcyBsaWJyYXJ5IHByb3ZpZGVzIHRoZSBzdGFuZGFyZCBvdXRwdXQsIGVycm9yLCBhbmQgaW5wdXQKICogc3RyZWFtcywgbmFtZWQgJ3N0ZG91dCcsICdzdGRlcnInLCBhbmQgJ3N0ZGluJywgcmVzcGVjdGl2ZWx5LgogKgogKiBUaGUgc3Rkb3V0IGFuZCBzdGRlcnIgc3RyZWFtcyBhcmUgYm90aCBbSU9TaW5rXXMgYW5kIGhhdmUgdGhlIHNhbWUgc2V0CiAqIG9mIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMuCiAqCiAqIFRvIHdyaXRlIGEgc3RyaW5nIHRvICdzdGRvdXQnOgogKgogKiAgICAgc3Rkb3V0LndyaXRlbG4oJ0hlbGxvLCBXb3JsZCEnKTsKICoKICogVG8gd3JpdGUgYSBsaXN0IG9mIG9iamVjdHMgdG8gJ3N0ZGVycic6CiAqCiAqICAgICBzdGRlcnIud3JpdGVBbGwoWyAnVGhhdCAnLCAnaXMgJywgJ2FuICcsICdlcnJvci4nLCAnXG4nXSk7CiAqCiAqIFRoZSBzdGFuZGFyZCBpbnB1dCBzdHJlYW0gaXMgYSB0cnVlIFtTdHJlYW1dLCBzbyBpdCBpbmhlcml0cwogKiBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIGZyb20gdGhlIFN0cmVhbSBjbGFzcy4KICoKICogVG8gcmVhZCB0ZXh0IHN5bmNocm9ub3VzbHkgZnJvbSB0aGUgY29tbWFuZCBsaW5lCiAqICh0aGUgcHJvZ3JhbSBibG9ja3Mgd2FpdGluZyBmb3IgdXNlciB0byB0eXBlIGluZm9ybWF0aW9uKToKICoKICogICAgICBTdHJpbmcgaW5wdXRUZXh0ID0gc3RkaW4ucmVhZExpbmVTeW5jKCk7CiAqCiAqIHtAY2F0ZWdvcnkgVk19CiAqLwpsaWJyYXJ5IGRhcnQuaW87CgppbXBvcnQgJ2RhcnQ6YXN5bmMnOwppbXBvcnQgJ2RhcnQ6X2ludGVybmFsJyBoaWRlIFN5bWJvbDsKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nCiAgICBzaG93IEhhc2hNYXAsIEhhc2hTZXQsIFF1ZXVlLCBMaXN0UXVldWUsIE1hcEJhc2UsIFVubW9kaWZpYWJsZU1hcFZpZXc7CmltcG9ydCAnZGFydDpjb252ZXJ0JzsKaW1wb3J0ICdkYXJ0OmRldmVsb3BlcicgaGlkZSBsb2c7CmltcG9ydCAnZGFydDppc29sYXRlJzsKaW1wb3J0ICdkYXJ0Om1hdGgnOwppbXBvcnQgJ2RhcnQ6dHlwZWRfZGF0YSc7CgpleHBvcnQgJ2RhcnQ6X2h0dHAnOwpleHBvcnQgJ2RhcnQ6X2ludGVybmFsJyBzaG93IEh0dHBTdGF0dXM7CgpwYXJ0ICdieXRlc19idWlsZGVyLmRhcnQnOwpwYXJ0ICdjb21tb24uZGFydCc7CnBhcnQgJ2RhdGFfdHJhbnNmb3JtZXIuZGFydCc7CnBhcnQgJ2RpcmVjdG9yeS5kYXJ0JzsKcGFydCAnZGlyZWN0b3J5X2ltcGwuZGFydCc7CnBhcnQgJ2VtYmVkZGVyX2NvbmZpZy5kYXJ0JzsKcGFydCAnZXZlbnRoYW5kbGVyLmRhcnQnOwpwYXJ0ICdmaWxlLmRhcnQnOwpwYXJ0ICdmaWxlX2ltcGwuZGFydCc7CnBhcnQgJ2ZpbGVfc3lzdGVtX2VudGl0eS5kYXJ0JzsKcGFydCAnaW9fcmVzb3VyY2VfaW5mby5kYXJ0JzsKcGFydCAnaW9fc2luay5kYXJ0JzsKcGFydCAnaW9fc2VydmljZS5kYXJ0JzsKcGFydCAnbGluay5kYXJ0JzsKcGFydCAnbmFtZXNwYWNlX2ltcGwuZGFydCc7CnBhcnQgJ292ZXJyaWRlcy5kYXJ0JzsKcGFydCAncGxhdGZvcm0uZGFydCc7CnBhcnQgJ3BsYXRmb3JtX2ltcGwuZGFydCc7CnBhcnQgJ3Byb2Nlc3MuZGFydCc7CnBhcnQgJ3NlY3VyZV9zZXJ2ZXJfc29ja2V0LmRhcnQnOwpwYXJ0ICdzZWN1cmVfc29ja2V0LmRhcnQnOwpwYXJ0ICdzZWN1cml0eV9jb250ZXh0LmRhcnQnOwpwYXJ0ICdzZXJ2aWNlX29iamVjdC5kYXJ0JzsKcGFydCAnc29ja2V0LmRhcnQnOwpwYXJ0ICdzdGRpby5kYXJ0JzsKcGFydCAnc3RyaW5nX3RyYW5zZm9ybWVyLmRhcnQnOwpwYXJ0ICdzeW5jX3NvY2tldC5kYXJ0JzsKgOUATk48AQRHA0VKFAM8O0A/IjQDLAMZA0A8AyADREADRjQDLUkDQisDFwM8OksDJDMyOikDOxYsEjALCwMgAy02Az8gRDgfSj4DDgM6F0saAzsrKycLA01OT0hNFQMZTysDEANMTQNKVBpAOEATAxtAMShDJw0NOANFMEIQA0ckAxFpPAMeA0xFR0UDLCAqOw8NAzwbSR4QAzkoCwM8QhcDMAM/QQNKHgMiAygDKwNCA0AxAzQ+AzEDEgQRARUlGUsXIhcUGgEVKQEbFB4XHB0aEhcgHhUYEhwXFhsVIhseHBQTIBkBB2RhcnQ6aW80b3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2Jpbi9kaXJlY3RvcnlfcGF0Y2guZGFydIkuLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvbW1vbl9wYXRjaC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBfRGlyZWN0b3J5IHsKICBAcGF0Y2gKICBzdGF0aWMgX2N1cnJlbnQoX05hbWVzcGFjZSBuYW1lc3BhY2UpIG5hdGl2ZSAiRGlyZWN0b3J5X0N1cnJlbnQiOwogIEBwYXRjaAogIHN0YXRpYyBfc2V0Q3VycmVudChfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpCiAgICAgIG5hdGl2ZSAiRGlyZWN0b3J5X1NldEN1cnJlbnQiOwogIEBwYXRjaAogIHN0YXRpYyBfY3JlYXRlVGVtcChfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpCiAgICAgIG5hdGl2ZSAiRGlyZWN0b3J5X0NyZWF0ZVRlbXAiOwogIEBwYXRjaAogIHN0YXRpYyBTdHJpbmcgX3N5c3RlbVRlbXAoX05hbWVzcGFjZSBuYW1lc3BhY2UpIG5hdGl2ZSAiRGlyZWN0b3J5X1N5c3RlbVRlbXAiOwogIEBwYXRjaAogIHN0YXRpYyBfZXhpc3RzKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCkKICAgICAgbmF0aXZlICJEaXJlY3RvcnlfRXhpc3RzIjsKICBAcGF0Y2gKICBzdGF0aWMgX2NyZWF0ZShfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpCiAgICAgIG5hdGl2ZSAiRGlyZWN0b3J5X0NyZWF0ZSI7CiAgQHBhdGNoCiAgc3RhdGljIF9kZWxldGVOYXRpdmUoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoLCBib29sIHJlY3Vyc2l2ZSkKICAgICAgbmF0aXZlICJEaXJlY3RvcnlfRGVsZXRlIjsKICBAcGF0Y2gKICBzdGF0aWMgX3JlbmFtZShfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgsIFN0cmluZyBuZXdQYXRoKQogICAgICBuYXRpdmUgIkRpcmVjdG9yeV9SZW5hbWUiOwogIEBwYXRjaAogIHN0YXRpYyB2b2lkIF9maWxsV2l0aERpcmVjdG9yeUxpc3RpbmcoCiAgICAgIF9OYW1lc3BhY2UgbmFtZXNwYWNlLAogICAgICBMaXN0PEZpbGVTeXN0ZW1FbnRpdHk+IGxpc3QsCiAgICAgIFVpbnQ4TGlzdCByYXdQYXRoLAogICAgICBib29sIHJlY3Vyc2l2ZSwKICAgICAgYm9vbCBmb2xsb3dMaW5rcykgbmF0aXZlICJEaXJlY3RvcnlfRmlsbFdpdGhEaXJlY3RvcnlMaXN0aW5nIjsKfQoKQHBhdGNoCmNsYXNzIF9Bc3luY0RpcmVjdG9yeUxpc3Rlck9wcyB7CiAgQHBhdGNoCiAgZmFjdG9yeSBfQXN5bmNEaXJlY3RvcnlMaXN0ZXJPcHMoaW50IHBvaW50ZXIpID0+CiAgICAgIG5ldyBfQXN5bmNEaXJlY3RvcnlMaXN0ZXJPcHNJbXBsKHBvaW50ZXIpOwp9CgpjbGFzcyBfQXN5bmNEaXJlY3RvcnlMaXN0ZXJPcHNJbXBsIGV4dGVuZHMgTmF0aXZlRmllbGRXcmFwcGVyQ2xhc3MxCiAgICBpbXBsZW1lbnRzIF9Bc3luY0RpcmVjdG9yeUxpc3Rlck9wcyB7CiAgX0FzeW5jRGlyZWN0b3J5TGlzdGVyT3BzSW1wbC5fKCk7CgogIGZhY3RvcnkgX0FzeW5jRGlyZWN0b3J5TGlzdGVyT3BzSW1wbChpbnQgcG9pbnRlcikgPT4KICAgICAgbmV3IF9Bc3luY0RpcmVjdG9yeUxpc3Rlck9wc0ltcGwuXygpLi5fc2V0UG9pbnRlcihwb2ludGVyKTsKCiAgdm9pZCBfc2V0UG9pbnRlcihpbnQgcG9pbnRlcikKICAgICAgbmF0aXZlICJEaXJlY3RvcnlfU2V0QXN5bmNEaXJlY3RvcnlMaXN0ZXJQb2ludGVyIjsKICBpbnQgZ2V0UG9pbnRlcigpIG5hdGl2ZSAiRGlyZWN0b3J5X0dldEFzeW5jRGlyZWN0b3J5TGlzdGVyUG9pbnRlciI7Cn0KCi8vIENvcmVsaWIgJ1VyaS5iYXNlJyBpbXBsZW1lbnRhdGlvbi4KLy8gVXJpLmJhc2UgaXMgc3VzY2VwdGlibGUgdG8gY2hhbmdlcyBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KVXJpIF91cmlCYXNlQ2xvc3VyZSgpIHsKICB2YXIgcmVzdWx0ID0gX0RpcmVjdG9yeS5fY3VycmVudChfTmFtZXNwYWNlLl9uYW1lc3BhY2UpOwogIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oCiAgICAgICAgIkdldHRpbmcgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBmYWlsZWQiLCAiIiwgcmVzdWx0KTsKICB9CiAgcmV0dXJuIG5ldyBVcmkuZGlyZWN0b3J5KHJlc3VsdCk7Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQpfZ2V0VXJpQmFzZUNsb3N1cmUoKSA9PiBfdXJpQmFzZUNsb3N1cmU7CkkATk48ASABBxMJRAk+JQk+JQlRCTohCTohCVAhCUohCSkcIxkWRQIBByEJMzECAUQqJAE3QgEgOUYCASZIGDsbI0EEJAIBIikBImRhcnQ6aW8tcGF0Y2gvZGlyZWN0b3J5X3BhdGNoLmRhcnQvb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2Jpbi9maWxlX3BhdGNoLmRhcnSz2S8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb21tb25fcGF0Y2guZGFydCI7CgpAcGF0Y2gKY2xhc3MgX0ZpbGUgewogIEBwYXRjaAogIHN0YXRpYyBfZXhpc3RzKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCkgbmF0aXZlICJGaWxlX0V4aXN0cyI7CiAgQHBhdGNoCiAgc3RhdGljIF9jcmVhdGUoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKSBuYXRpdmUgIkZpbGVfQ3JlYXRlIjsKICBAcGF0Y2gKICBzdGF0aWMgX2NyZWF0ZUxpbmsoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoLCBTdHJpbmcgdGFyZ2V0KQogICAgICBuYXRpdmUgIkZpbGVfQ3JlYXRlTGluayI7CiAgQHBhdGNoCiAgc3RhdGljIF9saW5rVGFyZ2V0KF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCkKICAgICAgbmF0aXZlICJGaWxlX0xpbmtUYXJnZXQiOwogIEBwYXRjaAogIHN0YXRpYyBfZGVsZXRlTmF0aXZlKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCkKICAgICAgbmF0aXZlICJGaWxlX0RlbGV0ZSI7CiAgQHBhdGNoCiAgc3RhdGljIF9kZWxldGVMaW5rTmF0aXZlKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCkKICAgICAgbmF0aXZlICJGaWxlX0RlbGV0ZUxpbmsiOwogIEBwYXRjaAogIHN0YXRpYyBfcmVuYW1lKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3Qgb2xkUGF0aCwgU3RyaW5nIG5ld1BhdGgpCiAgICAgIG5hdGl2ZSAiRmlsZV9SZW5hbWUiOwogIEBwYXRjaAogIHN0YXRpYyBfcmVuYW1lTGluayhfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IG9sZFBhdGgsIFN0cmluZyBuZXdQYXRoKQogICAgICBuYXRpdmUgIkZpbGVfUmVuYW1lTGluayI7CiAgQHBhdGNoCiAgc3RhdGljIF9jb3B5KF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3Qgb2xkUGF0aCwgU3RyaW5nIG5ld1BhdGgpCiAgICAgIG5hdGl2ZSAiRmlsZV9Db3B5IjsKICBAcGF0Y2gKICBzdGF0aWMgX2xlbmd0aEZyb21QYXRoKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCkKICAgICAgbmF0aXZlICJGaWxlX0xlbmd0aEZyb21QYXRoIjsKICBAcGF0Y2gKICBzdGF0aWMgX2xhc3RNb2RpZmllZChfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpCiAgICAgIG5hdGl2ZSAiRmlsZV9MYXN0TW9kaWZpZWQiOwogIEBwYXRjaAogIHN0YXRpYyBfc2V0TGFzdE1vZGlmaWVkKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCwgaW50IG1pbGxpcykKICAgICAgbmF0aXZlICJGaWxlX1NldExhc3RNb2RpZmllZCI7CiAgQHBhdGNoCiAgc3RhdGljIF9sYXN0QWNjZXNzZWQoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKQogICAgICBuYXRpdmUgIkZpbGVfTGFzdEFjY2Vzc2VkIjsKICBAcGF0Y2gKICBzdGF0aWMgX3NldExhc3RBY2Nlc3NlZChfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgsIGludCBtaWxsaXMpCiAgICAgIG5hdGl2ZSAiRmlsZV9TZXRMYXN0QWNjZXNzZWQiOwogIEBwYXRjaAogIHN0YXRpYyBfb3BlbihfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgsIGludCBtb2RlKQogICAgICBuYXRpdmUgIkZpbGVfT3BlbiI7CiAgQHBhdGNoCiAgc3RhdGljIGludCBfb3BlblN0ZGlvKGludCBmZCkgbmF0aXZlICJGaWxlX09wZW5TdGRpbyI7Cn0KCkBwYXRjaApjbGFzcyBfUmFuZG9tQWNjZXNzRmlsZU9wcyB7CiAgQHBhdGNoCiAgZmFjdG9yeSBfUmFuZG9tQWNjZXNzRmlsZU9wcyhpbnQgcG9pbnRlcikgPT4KICAgICAgbmV3IF9SYW5kb21BY2Nlc3NGaWxlT3BzSW1wbChwb2ludGVyKTsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfUmFuZG9tQWNjZXNzRmlsZU9wc0ltcGwgZXh0ZW5kcyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczEKICAgIGltcGxlbWVudHMgX1JhbmRvbUFjY2Vzc0ZpbGVPcHMgewogIF9SYW5kb21BY2Nlc3NGaWxlT3BzSW1wbC5fKCk7CgogIGZhY3RvcnkgX1JhbmRvbUFjY2Vzc0ZpbGVPcHNJbXBsKGludCBwb2ludGVyKSA9PgogICAgICBuZXcgX1JhbmRvbUFjY2Vzc0ZpbGVPcHNJbXBsLl8oKS4uX3NldFBvaW50ZXIocG9pbnRlcik7CgogIHZvaWQgX3NldFBvaW50ZXIoaW50IHBvaW50ZXIpIG5hdGl2ZSAiRmlsZV9TZXRQb2ludGVyIjsKCiAgaW50IGdldFBvaW50ZXIoKSBuYXRpdmUgIkZpbGVfR2V0UG9pbnRlciI7CiAgaW50IGNsb3NlKCkgbmF0aXZlICJGaWxlX0Nsb3NlIjsKICByZWFkQnl0ZSgpIG5hdGl2ZSAiRmlsZV9SZWFkQnl0ZSI7CiAgcmVhZChpbnQgYnl0ZXMpIG5hdGl2ZSAiRmlsZV9SZWFkIjsKICByZWFkSW50byhMaXN0PGludD4gYnVmZmVyLCBpbnQgc3RhcnQsIGludCBlbmQpIG5hdGl2ZSAiRmlsZV9SZWFkSW50byI7CiAgd3JpdGVCeXRlKGludCB2YWx1ZSkgbmF0aXZlICJGaWxlX1dyaXRlQnl0ZSI7CiAgd3JpdGVGcm9tKExpc3Q8aW50PiBidWZmZXIsIGludCBzdGFydCwgaW50IGVuZCkgbmF0aXZlICJGaWxlX1dyaXRlRnJvbSI7CiAgcG9zaXRpb24oKSBuYXRpdmUgIkZpbGVfUG9zaXRpb24iOwogIHNldFBvc2l0aW9uKGludCBwb3NpdGlvbikgbmF0aXZlICJGaWxlX1NldFBvc2l0aW9uIjsKICB0cnVuY2F0ZShpbnQgbGVuZ3RoKSBuYXRpdmUgIkZpbGVfVHJ1bmNhdGUiOwogIGxlbmd0aCgpIG5hdGl2ZSAiRmlsZV9MZW5ndGgiOwogIGZsdXNoKCkgbmF0aXZlICJGaWxlX0ZsdXNoIjsKICBsb2NrKGludCBsb2NrLCBpbnQgc3RhcnQsIGludCBlbmQpIG5hdGl2ZSAiRmlsZV9Mb2NrIjsKfQoKY2xhc3MgX1dhdGNoZXJQYXRoIHsKICBmaW5hbCBpbnQgcGF0aElkOwogIGZpbmFsIFN0cmluZyBwYXRoOwogIGZpbmFsIGludCBldmVudHM7CiAgaW50IGNvdW50ID0gMDsKICBfV2F0Y2hlclBhdGgodGhpcy5wYXRoSWQsIHRoaXMucGF0aCwgdGhpcy5ldmVudHMpOwp9CgpAcGF0Y2gKY2xhc3MgX0ZpbGVTeXN0ZW1XYXRjaGVyIHsKICB2b2lkIF9wYXRoV2F0Y2hlZEVuZCgpOwoKICBzdGF0aWMgaW50IF9pZDsKICBzdGF0aWMgZmluYWwgTWFwPGludCwgX1dhdGNoZXJQYXRoPiBfaWRNYXAgPSB7fTsKCiAgZmluYWwgU3RyaW5nIF9wYXRoOwogIGZpbmFsIGludCBfZXZlbnRzOwogIGZpbmFsIGJvb2wgX3JlY3Vyc2l2ZTsKCiAgX1dhdGNoZXJQYXRoIF93YXRjaGVyUGF0aDsKCiAgU3RyZWFtQ29udHJvbGxlcjxGaWxlU3lzdGVtRXZlbnQ+IF9icm9hZGNhc3RDb250cm9sbGVyOwoKICBAcGF0Y2gKICBzdGF0aWMgU3RyZWFtPEZpbGVTeXN0ZW1FdmVudD4gX3dhdGNoKAogICAgICBTdHJpbmcgcGF0aCwgaW50IGV2ZW50cywgYm9vbCByZWN1cnNpdmUpIHsKICAgIGlmIChQbGF0Zm9ybS5pc0xpbnV4KSB7CiAgICAgIHJldHVybiBuZXcgX0lub3RpZnlGaWxlU3lzdGVtV2F0Y2hlcihwYXRoLCBldmVudHMsIHJlY3Vyc2l2ZSkuX3N0cmVhbTsKICAgIH0KICAgIGlmIChQbGF0Zm9ybS5pc1dpbmRvd3MpIHsKICAgICAgcmV0dXJuIG5ldyBfV2luMzJGaWxlU3lzdGVtV2F0Y2hlcihwYXRoLCBldmVudHMsIHJlY3Vyc2l2ZSkuX3N0cmVhbTsKICAgIH0KICAgIGlmIChQbGF0Zm9ybS5pc01hY09TKSB7CiAgICAgIHJldHVybiBuZXcgX0ZTRXZlbnRTdHJlYW1GaWxlU3lzdGVtV2F0Y2hlcihwYXRoLCBldmVudHMsIHJlY3Vyc2l2ZSkKICAgICAgICAgIC5fc3RyZWFtOwogICAgfQogICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oCiAgICAgICAgIkZpbGUgc3lzdGVtIHdhdGNoaW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIpOwogIH0KCiAgX0ZpbGVTeXN0ZW1XYXRjaGVyLl8odGhpcy5fcGF0aCwgdGhpcy5fZXZlbnRzLCB0aGlzLl9yZWN1cnNpdmUpIHsKICAgIGlmICghaXNTdXBwb3J0ZWQpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oCiAgICAgICAgICAiRmlsZSBzeXN0ZW0gd2F0Y2hpbmcgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIiwgX3BhdGgpOwogICAgfQogICAgX2Jyb2FkY2FzdENvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcjxGaWxlU3lzdGVtRXZlbnQ+LmJyb2FkY2FzdCgKICAgICAgICBvbkxpc3RlbjogX2xpc3Rlbiwgb25DYW5jZWw6IF9jYW5jZWwpOwogIH0KCiAgU3RyZWFtPEZpbGVTeXN0ZW1FdmVudD4gZ2V0IF9zdHJlYW0gPT4gX2Jyb2FkY2FzdENvbnRyb2xsZXIuc3RyZWFtOwoKICB2b2lkIF9saXN0ZW4oKSB7CiAgICBpZiAoX2lkID09IG51bGwpIHsKICAgICAgdHJ5IHsKICAgICAgICBfaWQgPSBfaW5pdFdhdGNoZXIoKTsKICAgICAgICBfbmV3V2F0Y2hlcigpOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgX2Jyb2FkY2FzdENvbnRyb2xsZXIuYWRkRXJyb3IobmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oCiAgICAgICAgICAgICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBmaWxlIHN5c3RlbSBlbnRpdHkgd2F0Y2hlciIsIG51bGwsIGUpKTsKICAgICAgICBfYnJvYWRjYXN0Q29udHJvbGxlci5jbG9zZSgpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgdmFyIHBhdGhJZDsKICAgIHRyeSB7CiAgICAgIHBhdGhJZCA9CiAgICAgICAgICBfd2F0Y2hQYXRoKF9pZCwgX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBfcGF0aCwgX2V2ZW50cywgX3JlY3Vyc2l2ZSk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIF9icm9hZGNhc3RDb250cm9sbGVyCiAgICAgICAgICAuYWRkRXJyb3IobmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oIkZhaWxlZCB0byB3YXRjaCBwYXRoIiwgX3BhdGgsIGUpKTsKICAgICAgX2Jyb2FkY2FzdENvbnRyb2xsZXIuY2xvc2UoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFfaWRNYXAuY29udGFpbnNLZXkocGF0aElkKSkgewogICAgICBfaWRNYXBbcGF0aElkXSA9IG5ldyBfV2F0Y2hlclBhdGgocGF0aElkLCBfcGF0aCwgX2V2ZW50cyk7CiAgICB9CiAgICBfd2F0Y2hlclBhdGggPSBfaWRNYXBbcGF0aElkXTsKICAgIF93YXRjaGVyUGF0aC5jb3VudCsrOwogICAgX3BhdGhXYXRjaGVkKCkucGlwZShfYnJvYWRjYXN0Q29udHJvbGxlcik7CiAgfQoKICB2b2lkIF9jYW5jZWwoKSB7CiAgICBpZiAoX3dhdGNoZXJQYXRoICE9IG51bGwpIHsKICAgICAgYXNzZXJ0KF93YXRjaGVyUGF0aC5jb3VudCA+IDApOwogICAgICBfd2F0Y2hlclBhdGguY291bnQtLTsKICAgICAgaWYgKF93YXRjaGVyUGF0aC5jb3VudCA9PSAwKSB7CiAgICAgICAgX3Vud2F0Y2hQYXRoKF9pZCwgX3dhdGNoZXJQYXRoLnBhdGhJZCk7CiAgICAgICAgX3BhdGhXYXRjaGVkRW5kKCk7CiAgICAgICAgX2lkTWFwLnJlbW92ZShfd2F0Y2hlclBhdGgucGF0aElkKTsKICAgICAgfQogICAgICBfd2F0Y2hlclBhdGggPSBudWxsOwogICAgfQogICAgaWYgKF9pZE1hcC5pc0VtcHR5ICYmIF9pZCAhPSBudWxsKSB7CiAgICAgIF9jbG9zZVdhdGNoZXIoX2lkKTsKICAgICAgX2RvbmVXYXRjaGVyKCk7CiAgICAgIF9pZCA9IG51bGw7CiAgICB9CiAgfQoKICAvLyBDYWxsZWQgd2hlbiAoYW5kIGFmdGVyKSBhIG5ldyB3YXRjaGVyIGluc3RhbmNlIGlzIGNyZWF0ZWQgYW5kIGF2YWlsYWJsZS4KICB2b2lkIF9uZXdXYXRjaGVyKCkge30KICAvLyBDYWxsZWQgd2hlbiBhIHdhdGNoZXIgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KICB2b2lkIF9kb25lV2F0Y2hlcigpIHt9CiAgLy8gQ2FsbGVkIHdoZW4gYSBuZXcgcGF0aCBpcyBiZWluZyB3YXRjaGVkLgogIFN0cmVhbSBfcGF0aFdhdGNoZWQoKSB7fQogIC8vIENhbGxlZCB3aGVuIGEgcGF0aCBpcyBubyBsb25nZXIgYmVpbmcgd2F0Y2hlZC4KICB2b2lkIF9kb25lUGF0aFdhdGNoZWQoKSB7fQoKICBzdGF0aWMgX1dhdGNoZXJQYXRoIF9wYXRoRnJvbVBhdGhJZChpbnQgcGF0aElkKSB7CiAgICByZXR1cm4gX2lkTWFwW3BhdGhJZF07CiAgfQoKICBzdGF0aWMgU3RyZWFtIF9saXN0ZW5PblNvY2tldChpbnQgc29ja2V0SWQsIGludCBpZCwgaW50IHBhdGhJZCkgewogICAgdmFyIG5hdGl2ZSA9IG5ldyBfTmF0aXZlU29ja2V0LndhdGNoKHNvY2tldElkKTsKICAgIHZhciBzb2NrZXQgPSBuZXcgX1Jhd1NvY2tldChuYXRpdmUpOwogICAgcmV0dXJuIHNvY2tldC5leHBhbmQoKGV2ZW50KSB7CiAgICAgIHZhciBzdG9wcyA9IFtdOwogICAgICB2YXIgZXZlbnRzID0gW107CiAgICAgIHZhciBwYWlyID0ge307CiAgICAgIGlmIChldmVudCA9PSBSYXdTb2NrZXRFdmVudC5yZWFkKSB7CiAgICAgICAgU3RyaW5nIGdldFBhdGgoZXZlbnQpIHsKICAgICAgICAgIHZhciBwYXRoID0gX3BhdGhGcm9tUGF0aElkKGV2ZW50WzRdKS5wYXRoOwogICAgICAgICAgaWYgKGV2ZW50WzJdICE9IG51bGwgJiYgZXZlbnRbMl0uaXNOb3RFbXB0eSkgewogICAgICAgICAgICBwYXRoICs9IFBsYXRmb3JtLnBhdGhTZXBhcmF0b3I7CiAgICAgICAgICAgIHBhdGggKz0gZXZlbnRbMl07CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gcGF0aDsKICAgICAgICB9CgogICAgICAgIGJvb2wgZ2V0SXNEaXIoZXZlbnQpIHsKICAgICAgICAgIGlmIChQbGF0Zm9ybS5pc1dpbmRvd3MpIHsKICAgICAgICAgICAgLy8gV2luZG93cyBkb2VzIG5vdCBnZXQgJ2lzRGlyJyBhcyBwYXJ0IG9mIHRoZSBldmVudC4KICAgICAgICAgICAgcmV0dXJuIEZpbGVTeXN0ZW1FbnRpdHkuaXNEaXJlY3RvcnlTeW5jKGdldFBhdGgoZXZlbnQpKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiAoZXZlbnRbMF0gJiBGaWxlU3lzdGVtRXZlbnQuX2lzRGlyKSAhPSAwOwogICAgICAgIH0KCiAgICAgICAgdm9pZCBhZGQoaWQsIGV2ZW50KSB7CiAgICAgICAgICBpZiAoKGV2ZW50LnR5cGUgJiBfcGF0aEZyb21QYXRoSWQoaWQpLmV2ZW50cykgPT0gMCkgcmV0dXJuOwogICAgICAgICAgZXZlbnRzLmFkZChbaWQsIGV2ZW50XSk7CiAgICAgICAgfQoKICAgICAgICB2b2lkIHJld3JpdGVNb3ZlKGV2ZW50LCBpc0RpcikgewogICAgICAgICAgaWYgKGV2ZW50WzNdKSB7CiAgICAgICAgICAgIGFkZChldmVudFs0XSwgbmV3IEZpbGVTeXN0ZW1DcmVhdGVFdmVudC5fKGdldFBhdGgoZXZlbnQpLCBpc0RpcikpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYWRkKGV2ZW50WzRdLCBuZXcgRmlsZVN5c3RlbURlbGV0ZUV2ZW50Ll8oZ2V0UGF0aChldmVudCksIGlzRGlyKSk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpbnQgZXZlbnRDb3VudDsKICAgICAgICBkbyB7CiAgICAgICAgICBldmVudENvdW50ID0gMDsKICAgICAgICAgIGZvciAodmFyIGV2ZW50IGluIF9yZWFkRXZlbnRzKGlkLCBwYXRoSWQpKSB7CiAgICAgICAgICAgIGlmIChldmVudCA9PSBudWxsKSBjb250aW51ZTsKICAgICAgICAgICAgZXZlbnRDb3VudCsrOwogICAgICAgICAgICBpbnQgcGF0aElkID0gZXZlbnRbNF07CiAgICAgICAgICAgIGlmICghX2lkTWFwLmNvbnRhaW5zS2V5KHBhdGhJZCkpIHsKICAgICAgICAgICAgICAvLyBQYXRoIGlzIG5vIGxvbmdlciBiZWluZyB3YXRoZWQuCiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYm9vbCBpc0RpciA9IGdldElzRGlyKGV2ZW50KTsKICAgICAgICAgICAgdmFyIHBhdGggPSBnZXRQYXRoKGV2ZW50KTsKICAgICAgICAgICAgaWYgKChldmVudFswXSAmIEZpbGVTeXN0ZW1FdmVudC5jcmVhdGUpICE9IDApIHsKICAgICAgICAgICAgICBhZGQoZXZlbnRbNF0sIG5ldyBGaWxlU3lzdGVtQ3JlYXRlRXZlbnQuXyhwYXRoLCBpc0RpcikpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgoZXZlbnRbMF0gJiBGaWxlU3lzdGVtRXZlbnQubW9kaWZ5KSAhPSAwKSB7CiAgICAgICAgICAgICAgYWRkKGV2ZW50WzRdLCBuZXcgRmlsZVN5c3RlbU1vZGlmeUV2ZW50Ll8ocGF0aCwgaXNEaXIsIHRydWUpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoKGV2ZW50WzBdICYgRmlsZVN5c3RlbUV2ZW50Ll9tb2RpZnlBdHRyaWJ1dGVzKSAhPSAwKSB7CiAgICAgICAgICAgICAgYWRkKGV2ZW50WzRdLCBuZXcgRmlsZVN5c3RlbU1vZGlmeUV2ZW50Ll8ocGF0aCwgaXNEaXIsIGZhbHNlKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKChldmVudFswXSAmIEZpbGVTeXN0ZW1FdmVudC5tb3ZlKSAhPSAwKSB7CiAgICAgICAgICAgICAgaW50IGxpbmsgPSBldmVudFsxXTsKICAgICAgICAgICAgICBpZiAobGluayA+IDApIHsKICAgICAgICAgICAgICAgIHBhaXIucHV0SWZBYnNlbnQocGF0aElkLCAoKSA9PiB7fSk7CiAgICAgICAgICAgICAgICBpZiAocGFpcltwYXRoSWRdLmNvbnRhaW5zS2V5KGxpbmspKSB7CiAgICAgICAgICAgICAgICAgIGFkZCgKICAgICAgICAgICAgICAgICAgICAgIGV2ZW50WzRdLAogICAgICAgICAgICAgICAgICAgICAgbmV3IEZpbGVTeXN0ZW1Nb3ZlRXZlbnQuXygKICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRQYXRoKHBhaXJbcGF0aElkXVtsaW5rXSksIGlzRGlyLCBwYXRoKSk7CiAgICAgICAgICAgICAgICAgIHBhaXJbcGF0aElkXS5yZW1vdmUobGluayk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBwYWlyW3BhdGhJZF1bbGlua10gPSBldmVudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV3cml0ZU1vdmUoZXZlbnQsIGlzRGlyKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKChldmVudFswXSAmIEZpbGVTeXN0ZW1FdmVudC5kZWxldGUpICE9IDApIHsKICAgICAgICAgICAgICBhZGQoZXZlbnRbNF0sIG5ldyBGaWxlU3lzdGVtRGVsZXRlRXZlbnQuXyhwYXRoLCBpc0RpcikpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgoZXZlbnRbMF0gJiBGaWxlU3lzdGVtRXZlbnQuX2RlbGV0ZVNlbGYpICE9IDApIHsKICAgICAgICAgICAgICBhZGQoZXZlbnRbNF0sIG5ldyBGaWxlU3lzdGVtRGVsZXRlRXZlbnQuXyhwYXRoLCBpc0RpcikpOwogICAgICAgICAgICAgIC8vIFNpZ25hbCBkb25lIGV2ZW50LgogICAgICAgICAgICAgIHN0b3BzLmFkZChbZXZlbnRbNF0sIG51bGxdKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gd2hpbGUgKGV2ZW50Q291bnQgPiAwKTsKICAgICAgICAvLyBCZSBzdXJlIHRvIGNsZWFyIHRoaXMgbWFudWFsbHksIGFzIHRoZSBzb2NrZXRzIGFyZSBub3QgcmVhZCB0aHJvdWdoCiAgICAgICAgLy8gdGhlIF9OYXRpdmVTb2NrZXQgaW50ZXJmYWNlLgogICAgICAgIG5hdGl2ZS5hdmFpbGFibGUgPSAwOwogICAgICAgIGZvciAodmFyIG1hcCBpbiBwYWlyLnZhbHVlcykgewogICAgICAgICAgZm9yICh2YXIgZXZlbnQgaW4gbWFwLnZhbHVlcykgewogICAgICAgICAgICByZXdyaXRlTW92ZShldmVudCwgZ2V0SXNEaXIoZXZlbnQpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZXZlbnQgPT0gUmF3U29ja2V0RXZlbnQuY2xvc2VkKSB7CiAgICAgIH0gZWxzZSBpZiAoZXZlbnQgPT0gUmF3U29ja2V0RXZlbnQucmVhZENsb3NlZCkgewogICAgICB9IGVsc2UgewogICAgICAgIGFzc2VydChmYWxzZSk7CiAgICAgIH0KICAgICAgZXZlbnRzLmFkZEFsbChzdG9wcyk7CiAgICAgIHJldHVybiBldmVudHM7CiAgICB9KTsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBib29sIGdldCBpc1N1cHBvcnRlZCBuYXRpdmUgIkZpbGVTeXN0ZW1XYXRjaGVyX0lzU3VwcG9ydGVkIjsKCiAgc3RhdGljIGludCBfaW5pdFdhdGNoZXIoKSBuYXRpdmUgIkZpbGVTeXN0ZW1XYXRjaGVyX0luaXRXYXRjaGVyIjsKICBzdGF0aWMgdm9pZCBfY2xvc2VXYXRjaGVyKGludCBpZCkgbmF0aXZlICJGaWxlU3lzdGVtV2F0Y2hlcl9DbG9zZVdhdGNoZXIiOwoKICBzdGF0aWMgaW50IF93YXRjaFBhdGgoaW50IGlkLCBfTmFtZXNwYWNlIG5hbWVzcGFjZSwgU3RyaW5nIHBhdGgsIGludCBldmVudHMsCiAgICAgIGJvb2wgcmVjdXJzaXZlKSBuYXRpdmUgIkZpbGVTeXN0ZW1XYXRjaGVyX1dhdGNoUGF0aCI7CiAgc3RhdGljIHZvaWQgX3Vud2F0Y2hQYXRoKGludCBpZCwgaW50IHBhdGhfaWQpCiAgICAgIG5hdGl2ZSAiRmlsZVN5c3RlbVdhdGNoZXJfVW53YXRjaFBhdGgiOwogIHN0YXRpYyBMaXN0IF9yZWFkRXZlbnRzKGludCBpZCwgaW50IHBhdGhfaWQpCiAgICAgIG5hdGl2ZSAiRmlsZVN5c3RlbVdhdGNoZXJfUmVhZEV2ZW50cyI7CiAgc3RhdGljIGludCBfZ2V0U29ja2V0SWQoaW50IGlkLCBpbnQgcGF0aF9pZCkKICAgICAgbmF0aXZlICJGaWxlU3lzdGVtV2F0Y2hlcl9HZXRTb2NrZXRJZCI7Cn0KCmNsYXNzIF9Jbm90aWZ5RmlsZVN5c3RlbVdhdGNoZXIgZXh0ZW5kcyBfRmlsZVN5c3RlbVdhdGNoZXIgewogIHN0YXRpYyBmaW5hbCBNYXA8aW50LCBTdHJlYW1Db250cm9sbGVyPiBfaWRNYXAgPSB7fTsKICBzdGF0aWMgU3RyZWFtU3Vic2NyaXB0aW9uIF9zdWJzY3JpcHRpb247CgogIF9Jbm90aWZ5RmlsZVN5c3RlbVdhdGNoZXIocGF0aCwgZXZlbnRzLCByZWN1cnNpdmUpCiAgICAgIDogc3VwZXIuXyhwYXRoLCBldmVudHMsIHJlY3Vyc2l2ZSk7CgogIHZvaWQgX25ld1dhdGNoZXIoKSB7CiAgICBpbnQgaWQgPSBfRmlsZVN5c3RlbVdhdGNoZXIuX2lkOwogICAgX3N1YnNjcmlwdGlvbiA9CiAgICAgICAgX0ZpbGVTeXN0ZW1XYXRjaGVyLl9saXN0ZW5PblNvY2tldChpZCwgaWQsIDApLmxpc3RlbigoZXZlbnQpIHsKICAgICAgaWYgKF9pZE1hcC5jb250YWluc0tleShldmVudFswXSkpIHsKICAgICAgICBpZiAoZXZlbnRbMV0gIT0gbnVsbCkgewogICAgICAgICAgX2lkTWFwW2V2ZW50WzBdXS5hZGQoZXZlbnRbMV0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfaWRNYXBbZXZlbnRbMF1dLmNsb3NlKCk7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICB9CgogIHZvaWQgX2RvbmVXYXRjaGVyKCkgewogICAgX3N1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICB9CgogIFN0cmVhbSBfcGF0aFdhdGNoZWQoKSB7CiAgICB2YXIgcGF0aElkID0gX3dhdGNoZXJQYXRoLnBhdGhJZDsKICAgIGlmICghX2lkTWFwLmNvbnRhaW5zS2V5KHBhdGhJZCkpIHsKICAgICAgX2lkTWFwW3BhdGhJZF0gPSBuZXcgU3RyZWFtQ29udHJvbGxlcjxGaWxlU3lzdGVtRXZlbnQ+LmJyb2FkY2FzdCgpOwogICAgfQogICAgcmV0dXJuIF9pZE1hcFtwYXRoSWRdLnN0cmVhbTsKICB9CgogIHZvaWQgX3BhdGhXYXRjaGVkRW5kKCkgewogICAgdmFyIHBhdGhJZCA9IF93YXRjaGVyUGF0aC5wYXRoSWQ7CiAgICBpZiAoIV9pZE1hcC5jb250YWluc0tleShwYXRoSWQpKSByZXR1cm47CiAgICBfaWRNYXBbcGF0aElkXS5jbG9zZSgpOwogICAgX2lkTWFwLnJlbW92ZShwYXRoSWQpOwogIH0KfQoKY2xhc3MgX1dpbjMyRmlsZVN5c3RlbVdhdGNoZXIgZXh0ZW5kcyBfRmlsZVN5c3RlbVdhdGNoZXIgewogIFN0cmVhbVN1YnNjcmlwdGlvbiBfc3Vic2NyaXB0aW9uOwogIFN0cmVhbUNvbnRyb2xsZXIgX2NvbnRyb2xsZXI7CgogIF9XaW4zMkZpbGVTeXN0ZW1XYXRjaGVyKHBhdGgsIGV2ZW50cywgcmVjdXJzaXZlKQogICAgICA6IHN1cGVyLl8ocGF0aCwgZXZlbnRzLCByZWN1cnNpdmUpOwoKICBTdHJlYW0gX3BhdGhXYXRjaGVkKCkgewogICAgdmFyIHBhdGhJZCA9IF93YXRjaGVyUGF0aC5wYXRoSWQ7CiAgICBfY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPEZpbGVTeXN0ZW1FdmVudD4oKTsKICAgIF9zdWJzY3JpcHRpb24gPQogICAgICAgIF9GaWxlU3lzdGVtV2F0Y2hlci5fbGlzdGVuT25Tb2NrZXQocGF0aElkLCAwLCBwYXRoSWQpLmxpc3RlbigoZXZlbnQpIHsKICAgICAgYXNzZXJ0KGV2ZW50WzBdID09IHBhdGhJZCk7CiAgICAgIGlmIChldmVudFsxXSAhPSBudWxsKSB7CiAgICAgICAgX2NvbnRyb2xsZXIuYWRkKGV2ZW50WzFdKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBfY29udHJvbGxlci5zdHJlYW07CiAgfQoKICB2b2lkIF9wYXRoV2F0Y2hlZEVuZCgpIHsKICAgIF9zdWJzY3JpcHRpb24uY2FuY2VsKCk7CiAgICBfY29udHJvbGxlci5jbG9zZSgpOwogIH0KfQoKY2xhc3MgX0ZTRXZlbnRTdHJlYW1GaWxlU3lzdGVtV2F0Y2hlciBleHRlbmRzIF9GaWxlU3lzdGVtV2F0Y2hlciB7CiAgU3RyZWFtU3Vic2NyaXB0aW9uIF9zdWJzY3JpcHRpb247CiAgU3RyZWFtQ29udHJvbGxlciBfY29udHJvbGxlcjsKCiAgX0ZTRXZlbnRTdHJlYW1GaWxlU3lzdGVtV2F0Y2hlcihwYXRoLCBldmVudHMsIHJlY3Vyc2l2ZSkKICAgICAgOiBzdXBlci5fKHBhdGgsIGV2ZW50cywgcmVjdXJzaXZlKTsKCiAgU3RyZWFtIF9wYXRoV2F0Y2hlZCgpIHsKICAgIHZhciBwYXRoSWQgPSBfd2F0Y2hlclBhdGgucGF0aElkOwogICAgdmFyIHNvY2tldElkID0gX0ZpbGVTeXN0ZW1XYXRjaGVyLl9nZXRTb2NrZXRJZCgwLCBwYXRoSWQpOwogICAgX2NvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcjxGaWxlU3lzdGVtRXZlbnQ+KCk7CiAgICBfc3Vic2NyaXB0aW9uID0KICAgICAgICBfRmlsZVN5c3RlbVdhdGNoZXIuX2xpc3Rlbk9uU29ja2V0KHNvY2tldElkLCAwLCBwYXRoSWQpLmxpc3RlbigoZXZlbnQpIHsKICAgICAgaWYgKGV2ZW50WzFdICE9IG51bGwpIHsKICAgICAgICBfY29udHJvbGxlci5hZGQoZXZlbnRbMV0pOwogICAgICB9IGVsc2UgewogICAgICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIF9jb250cm9sbGVyLnN0cmVhbTsKICB9CgogIHZvaWQgX3BhdGhXYXRjaGVkRW5kKCkgewogICAgX3N1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKVWludDhMaXN0IF9tYWtlVWludDhMaXN0VmlldyhVaW50OExpc3Qgc291cmNlLCBpbnQgb2Zmc2V0SW5CeXRlcywgaW50IGxlbmd0aCkgewogIHJldHVybiBuZXcgVWludDhMaXN0LnZpZXcoc291cmNlLmJ1ZmZlciwgb2Zmc2V0SW5CeXRlcywgbGVuZ3RoKTsKfQqBpwBOTjwBIAEHDglQCVAJTSAJPiAJQBwJRCAJShwJTiAJSBoJQiQJQCIJTyUJQCIJTyUJQhoJOQIBBx0JLy0CARpAJiABMz4BOgEtIyUmSTBLJTcvIR85AgEVFBUUETUCAQcbGgESMwEWFRkBHQE6AQkpMRxNBh5LBhxKFAYjQwQBRBglTAZMLwQBRgETFwweFxQ/SiYQCAYQCg9OEhtQJA4GJ0EGIxovBAETICYcJTAbLAgbBikaFhIGBAFOGDAZLhs0HQE0GwQBRDQpIxYXFSogNTksHgwXCgEfJEJFDDsKAR5GIwoBKRpPE08MCgEYDRo3KRojLzEYDionPEcOPE0OR04OOiMeNDYXIDFGLRkuEhcrEA48Rw5BRyQrDgwiTygeJyoxDAozNw8XCBwVCAQBCUYBRE0BTzwwLi8tLy4CAT03KwE1KgEXJRRHKiAqESQKCAgEARgcBAEaJidKBiIEARsmLRwbBAIBOyQgATMqARomOxRPIh4jDx0ICB8EARscGQQCAUMkIAE7KgEaJj87FFEeIw8dCAgfBAEbHBkEAgEiUEMCAR1kYXJ0OmlvLXBhdGNoL2ZpbGVfcGF0Y2guZGFydDFvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvYmluL2ZpbHRlcl9wYXRjaC5kYXJ0hq4vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29tbW9uX3BhdGNoLmRhcnQiOwoKY2xhc3MgX0ZpbHRlckltcGwgZXh0ZW5kcyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczEgaW1wbGVtZW50cyBSYXdaTGliRmlsdGVyIHsKICB2b2lkIHByb2Nlc3MoTGlzdDxpbnQ+IGRhdGEsIGludCBzdGFydCwgaW50IGVuZCkgbmF0aXZlICJGaWx0ZXJfUHJvY2VzcyI7CgogIExpc3Q8aW50PiBwcm9jZXNzZWQoe2Jvb2wgZmx1c2g6IHRydWUsIGJvb2wgZW5kOiBmYWxzZX0pCiAgICAgIG5hdGl2ZSAiRmlsdGVyX1Byb2Nlc3NlZCI7Cn0KCmNsYXNzIF9aTGliSW5mbGF0ZUZpbHRlciBleHRlbmRzIF9GaWx0ZXJJbXBsIHsKICBfWkxpYkluZmxhdGVGaWx0ZXIoaW50IHdpbmRvd0JpdHMsIExpc3Q8aW50PiBkaWN0aW9uYXJ5LCBib29sIHJhdykgewogICAgX2luaXQod2luZG93Qml0cywgZGljdGlvbmFyeSwgcmF3KTsKICB9CiAgdm9pZCBfaW5pdChpbnQgd2luZG93Qml0cywgTGlzdDxpbnQ+IGRpY3Rpb25hcnksIGJvb2wgcmF3KQogICAgICBuYXRpdmUgIkZpbHRlcl9DcmVhdGVaTGliSW5mbGF0ZSI7Cn0KCmNsYXNzIF9aTGliRGVmbGF0ZUZpbHRlciBleHRlbmRzIF9GaWx0ZXJJbXBsIHsKICBfWkxpYkRlZmxhdGVGaWx0ZXIoYm9vbCBnemlwLCBpbnQgbGV2ZWwsIGludCB3aW5kb3dCaXRzLCBpbnQgbWVtTGV2ZWwsCiAgICAgIGludCBzdHJhdGVneSwgTGlzdDxpbnQ+IGRpY3Rpb25hcnksIGJvb2wgcmF3KSB7CiAgICBfaW5pdChnemlwLCBsZXZlbCwgd2luZG93Qml0cywgbWVtTGV2ZWwsIHN0cmF0ZWd5LCBkaWN0aW9uYXJ5LCByYXcpOwogIH0KICB2b2lkIF9pbml0KGJvb2wgZ3ppcCwgaW50IGxldmVsLCBpbnQgd2luZG93Qml0cywgaW50IG1lbUxldmVsLCBpbnQgc3RyYXRlZ3ksCiAgICAgIExpc3Q8aW50PiBkaWN0aW9uYXJ5LCBib29sIHJhdykgbmF0aXZlICJGaWx0ZXJfQ3JlYXRlWkxpYkRlZmxhdGUiOwp9CgpAcGF0Y2gKY2xhc3MgUmF3WkxpYkZpbHRlciB7CiAgQHBhdGNoCiAgc3RhdGljIFJhd1pMaWJGaWx0ZXIgX21ha2VaTGliRGVmbGF0ZUZpbHRlcigKICAgICAgICAgIGJvb2wgZ3ppcCwKICAgICAgICAgIGludCBsZXZlbCwKICAgICAgICAgIGludCB3aW5kb3dCaXRzLAogICAgICAgICAgaW50IG1lbUxldmVsLAogICAgICAgICAgaW50IHN0cmF0ZWd5LAogICAgICAgICAgTGlzdDxpbnQ+IGRpY3Rpb25hcnksCiAgICAgICAgICBib29sIHJhdykgPT4KICAgICAgbmV3IF9aTGliRGVmbGF0ZUZpbHRlcigKICAgICAgICAgIGd6aXAsIGxldmVsLCB3aW5kb3dCaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3ksIGRpY3Rpb25hcnksIHJhdyk7CiAgQHBhdGNoCiAgc3RhdGljIFJhd1pMaWJGaWx0ZXIgX21ha2VaTGliSW5mbGF0ZUZpbHRlcigKICAgICAgICAgIGludCB3aW5kb3dCaXRzLCBMaXN0PGludD4gZGljdGlvbmFyeSwgYm9vbCByYXcpID0+CiAgICAgIG5ldyBfWkxpYkluZmxhdGVGaWx0ZXIod2luZG93Qml0cywgZGljdGlvbmFyeSwgcmF3KTsKfQoyAE5OPAEgAU5MATshAgEvRygEPSkCAS9JNkkET0kCAQcWCS8VFRoYGCAXHkkJLz07AgEfZGFydDppby1wYXRjaC9maWx0ZXJfcGF0Y2guZGFydDVvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvYmluL2lvX3NlcnZpY2VfcGF0Y2guZGFydIt9Ly8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvbW1vbl9wYXRjaC5kYXJ0IjsKCmNsYXNzIF9JT1NlcnZpY2VQb3J0cyB7CiAgLy8gV2UgbGltaXQgdGhlIG51bWJlciBvZiBJTyBTZXJ2aWNlIHBvcnRzIHBlciBpc29sYXRlIHNvIHRoYXQgd2UgZG9uJ3QKICAvLyBzcGF3biB0b28gbWFueSB0aHJlYWRzIGFsbCBhdCBvbmNlLCB3aGljaCBjYW4gY3Jhc2ggdGhlIFZNIG9uIFdpbmRvd3MuCiAgc3RhdGljIGNvbnN0IGludCBtYXhQb3J0cyA9IDMyOwogIExpc3Q8U2VuZFBvcnQ+IF9wb3J0cyA9IDxTZW5kUG9ydD5bXTsKICBMaXN0PFNlbmRQb3J0PiBfZnJlZVBvcnRzID0gPFNlbmRQb3J0PltdOwogIE1hcDxpbnQsIFNlbmRQb3J0PiBfdXNlZFBvcnRzID0gbmV3IEhhc2hNYXA8aW50LCBTZW5kUG9ydD4oKTsKCiAgX0lPU2VydmljZVBvcnRzKCk7CgogIFNlbmRQb3J0IF9nZXRQb3J0KGludCBmb3JSZXF1ZXN0SWQpIHsKICAgIGlmIChfZnJlZVBvcnRzLmlzRW1wdHkgJiYgX3VzZWRQb3J0cy5sZW5ndGggPCBtYXhQb3J0cykgewogICAgICBmaW5hbCBTZW5kUG9ydCBwb3J0ID0gX25ld1NlcnZpY2VQb3J0KCk7CiAgICAgIF9wb3J0cy5hZGQocG9ydCk7CiAgICAgIF9mcmVlUG9ydHMuYWRkKHBvcnQpOwogICAgfQogICAgaWYgKCFfZnJlZVBvcnRzLmlzRW1wdHkpIHsKICAgICAgZmluYWwgU2VuZFBvcnQgcG9ydCA9IF9mcmVlUG9ydHMucmVtb3ZlTGFzdCgpOwogICAgICBhc3NlcnQoIV91c2VkUG9ydHMuY29udGFpbnNLZXkoZm9yUmVxdWVzdElkKSk7CiAgICAgIF91c2VkUG9ydHNbZm9yUmVxdWVzdElkXSA9IHBvcnQ7CiAgICAgIHJldHVybiBwb3J0OwogICAgfQogICAgLy8gV2UgaGF2ZSBhbHJlYWR5IGFsbG9jYXRlZCB0aGUgbWF4IG51bWJlciBvZiBwb3J0cy4gUmUtdXNlIGFuCiAgICAvLyBleGlzdGluZyBvbmUuCiAgICBmaW5hbCBTZW5kUG9ydCBwb3J0ID0gX3BvcnRzW2ZvclJlcXVlc3RJZCAlIG1heFBvcnRzXTsKICAgIF91c2VkUG9ydHNbZm9yUmVxdWVzdElkXSA9IHBvcnQ7CiAgICByZXR1cm4gcG9ydDsKICB9CgogIHZvaWQgX3JldHVyblBvcnQoaW50IGZvclJlcXVlc3RJZCkgewogICAgZmluYWwgU2VuZFBvcnQgcG9ydCA9IF91c2VkUG9ydHMucmVtb3ZlKGZvclJlcXVlc3RJZCk7CiAgICBpZiAoIV91c2VkUG9ydHMudmFsdWVzLmNvbnRhaW5zKHBvcnQpKSB7CiAgICAgIF9mcmVlUG9ydHMuYWRkKHBvcnQpOwogICAgfQogIH0KCiAgc3RhdGljIFNlbmRQb3J0IF9uZXdTZXJ2aWNlUG9ydCgpIG5hdGl2ZSAiSU9TZXJ2aWNlX05ld1NlcnZpY2VQb3J0IjsKfQoKQHBhdGNoCmNsYXNzIF9JT1NlcnZpY2UgewogIHN0YXRpYyBfSU9TZXJ2aWNlUG9ydHMgX3NlcnZpY2VQb3J0cyA9IG5ldyBfSU9TZXJ2aWNlUG9ydHMoKTsKICBzdGF0aWMgUmF3UmVjZWl2ZVBvcnQgX3JlY2VpdmVQb3J0OwogIHN0YXRpYyBTZW5kUG9ydCBfcmVwbHlUb1BvcnQ7CiAgc3RhdGljIEhhc2hNYXA8aW50LCBDb21wbGV0ZXI+IF9tZXNzYWdlTWFwID0gbmV3IEhhc2hNYXA8aW50LCBDb21wbGV0ZXI+KCk7CiAgc3RhdGljIGludCBfaWQgPSAwOwoKICBAcGF0Y2gKICBzdGF0aWMgRnV0dXJlIF9kaXNwYXRjaChpbnQgcmVxdWVzdCwgTGlzdCBkYXRhKSB7CiAgICBpbnQgaWQ7CiAgICBkbyB7CiAgICAgIGlkID0gX2dldE5leHRJZCgpOwogICAgfSB3aGlsZSAoX21lc3NhZ2VNYXAuY29udGFpbnNLZXkoaWQpKTsKICAgIGZpbmFsIFNlbmRQb3J0IHNlcnZpY2VQb3J0ID0gX3NlcnZpY2VQb3J0cy5fZ2V0UG9ydChpZCk7CiAgICBfZW5zdXJlSW5pdGlhbGl6ZSgpOwogICAgZmluYWwgQ29tcGxldGVyIGNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXIoKTsKICAgIF9tZXNzYWdlTWFwW2lkXSA9IGNvbXBsZXRlcjsKICAgIHRyeSB7CiAgICAgIHNlcnZpY2VQb3J0LnNlbmQoW2lkLCBfcmVwbHlUb1BvcnQsIHJlcXVlc3QsIGRhdGFdKTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIF9tZXNzYWdlTWFwLnJlbW92ZShpZCkuY29tcGxldGUoZXJyb3IpOwogICAgICBpZiAoX21lc3NhZ2VNYXAubGVuZ3RoID09IDApIHsKICAgICAgICBfZmluYWxpemUoKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNvbXBsZXRlci5mdXR1cmU7CiAgfQoKICBzdGF0aWMgdm9pZCBfZW5zdXJlSW5pdGlhbGl6ZSgpIHsKICAgIGlmIChfcmVjZWl2ZVBvcnQgPT0gbnVsbCkgewogICAgICBfcmVjZWl2ZVBvcnQgPSBuZXcgUmF3UmVjZWl2ZVBvcnQoKTsKICAgICAgX3JlcGx5VG9Qb3J0ID0gX3JlY2VpdmVQb3J0LnNlbmRQb3J0OwogICAgICBfcmVjZWl2ZVBvcnQuaGFuZGxlciA9IChkYXRhKSB7CiAgICAgICAgYXNzZXJ0KGRhdGEgaXMgTGlzdCAmJiBkYXRhLmxlbmd0aCA9PSAyKTsKICAgICAgICBfbWVzc2FnZU1hcC5yZW1vdmUoZGF0YVswXSkuY29tcGxldGUoZGF0YVsxXSk7CiAgICAgICAgX3NlcnZpY2VQb3J0cy5fcmV0dXJuUG9ydChkYXRhWzBdKTsKICAgICAgICBpZiAoX21lc3NhZ2VNYXAubGVuZ3RoID09IDApIHsKICAgICAgICAgIF9maW5hbGl6ZSgpOwogICAgICAgIH0KICAgICAgfTsKICAgIH0KICB9CgogIHN0YXRpYyB2b2lkIF9maW5hbGl6ZSgpIHsKICAgIF9pZCA9IDA7CiAgICBfcmVjZWl2ZVBvcnQuY2xvc2UoKTsKICAgIF9yZWNlaXZlUG9ydCA9IG51bGw7CiAgfQoKICBzdGF0aWMgaW50IF9nZXROZXh0SWQoKSB7CiAgICBpZiAoX2lkID09IDB4N0ZGRkZGRkYpIF9pZCA9IDA7CiAgICByZXR1cm4gX2lkKys7CiAgfQp9CmYATk48ASABGEpMIigsQAEVASg+LxgcBh81NScTBkQVOyURBAEnOy0cBgQBRwIBBxNAJiBOFgEJNAwJGSs9GTEhCjsWLiUVCAYdBAEkICssJjI3LCcXCgkGBAEcDRoZBAEcJBIEAgEjZGFydDppby1wYXRjaC9pb19zZXJ2aWNlX3BhdGNoLmRhcnQ0b3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2Jpbi9uYW1lc3BhY2VfcGF0Y2guZGFydIZbLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX05hbWVzcGFjZUltcGwgZXh0ZW5kcyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczEgaW1wbGVtZW50cyBfTmFtZXNwYWNlIHsKICBfTmFtZXNwYWNlSW1wbC5fKCk7CgogIHN0YXRpYyBfTmFtZXNwYWNlSW1wbCBfY3JlYXRlKF9OYW1lc3BhY2VJbXBsIG5hbWVzcGFjZSwgdmFyIG4pCiAgICAgIG5hdGl2ZSAiTmFtZXNwYWNlX0NyZWF0ZSI7CiAgc3RhdGljIGludCBfZ2V0UG9pbnRlcihfTmFtZXNwYWNlSW1wbCBuYW1lc3BhY2UpCiAgICAgIG5hdGl2ZSAiTmFtZXNwYWNlX0dldFBvaW50ZXIiOwogIHN0YXRpYyBpbnQgX2dldERlZmF1bHQoKSBuYXRpdmUgIk5hbWVzcGFjZV9HZXREZWZhdWx0IjsKCiAgLy8gSWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzICJuYW1lc3BhY2VzIiwgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZQogIC8vIGVtYmVkZGVyIHdpdGggdGhlIHBsYXRmb3JtLXNwZWNpZmljIG5hbWVzcGFjZSBpbmZvcm1hdGlvbi4KICBzdGF0aWMgX05hbWVzcGFjZUltcGwgX2NhY2hlZE5hbWVzcGFjZSA9IG51bGw7CiAgc3RhdGljIHZvaWQgX3NldHVwTmFtZXNwYWNlKHZhciBuYW1lc3BhY2UpIHsKICAgIF9jYWNoZWROYW1lc3BhY2UgPSBfY3JlYXRlKG5ldyBfTmFtZXNwYWNlSW1wbC5fKCksIG5hbWVzcGFjZSk7CiAgfQoKICBzdGF0aWMgX05hbWVzcGFjZUltcGwgZ2V0IF9uYW1lc3BhY2UgewogICAgaWYgKF9jYWNoZWROYW1lc3BhY2UgPT0gbnVsbCkgewogICAgICAvLyBUaGUgZW1iZWRkZXIgaGFzIG5vdCBzdXBwbGllZCBhIG5hbWVzcGFjZSBiZWZvcmUgb25lIGlzIG5lZWRlZCwgc28KICAgICAgLy8gaW5zdGVhZCB1c2UgYSBzYWZlLWlzaCBkZWZhdWx0IHZhbHVlLgogICAgICBfY2FjaGVkTmFtZXNwYWNlID0gX2NyZWF0ZShuZXcgX05hbWVzcGFjZUltcGwuXygpLCBfZ2V0RGVmYXVsdCgpKTsKICAgIH0KICAgIHJldHVybiBfY2FjaGVkTmFtZXNwYWNlOwogIH0KCiAgc3RhdGljIGludCBnZXQgX25hbWVzcGFjZVBvaW50ZXIgPT4gX2dldFBvaW50ZXIoX25hbWVzcGFjZSk7Cn0KCkBwYXRjaApAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9OYW1lc3BhY2UgewogIEBwYXRjaAogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQogIHN0YXRpYyB2b2lkIF9zZXR1cE5hbWVzcGFjZSh2YXIgbmFtZXNwYWNlKSB7CiAgICBfTmFtZXNwYWNlSW1wbC5fc2V0dXBOYW1lc3BhY2UobmFtZXNwYWNlKTsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBfTmFtZXNwYWNlIGdldCBfbmFtZXNwYWNlID0+IF9OYW1lc3BhY2VJbXBsLl9uYW1lc3BhY2U7CgogIEBwYXRjaAogIHN0YXRpYyBpbnQgZ2V0IF9uYW1lc3BhY2VQb2ludGVyID0+IF9OYW1lc3BhY2VJbXBsLl9uYW1lc3BhY2VQb2ludGVyOwp9CjIATk48ARpOFgFBITMlOgFJQDEvQwQBKSRML0kGHQQBPwIBBxoTCSQvLwQBCUEBCUgCASJkYXJ0OmlvLXBhdGNoL25hbWVzcGFjZV9wYXRjaC5kYXJ0Mm9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9iaW4vcHJvY2Vzc19wYXRjaC5kYXJ0wABLIy8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb21tb25fcGF0Y2guZGFydCI7CgpAcGF0Y2gKY2xhc3MgX1dpbmRvd3NDb2RlUGFnZURlY29kZXIgewogIEBwYXRjaAogIHN0YXRpYyBTdHJpbmcgX2RlY29kZUJ5dGVzKExpc3Q8aW50PiBieXRlcykgbmF0aXZlICJTeXN0ZW1FbmNvZGluZ1RvU3RyaW5nIjsKfQoKQHBhdGNoCmNsYXNzIF9XaW5kb3dzQ29kZVBhZ2VFbmNvZGVyIHsKICBAcGF0Y2gKICBzdGF0aWMgTGlzdDxpbnQ+IF9lbmNvZGVTdHJpbmcoU3RyaW5nIHN0cmluZykgbmF0aXZlICJTdHJpbmdUb1N5c3RlbUVuY29kaW5nIjsKfQoKQHBhdGNoCmNsYXNzIFByb2Nlc3MgewogIEBwYXRjaAogIHN0YXRpYyBGdXR1cmU8UHJvY2Vzcz4gc3RhcnQoU3RyaW5nIGV4ZWN1dGFibGUsIExpc3Q8U3RyaW5nPiBhcmd1bWVudHMsCiAgICAgIHtTdHJpbmcgd29ya2luZ0RpcmVjdG9yeSwKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudCwKICAgICAgYm9vbCBpbmNsdWRlUGFyZW50RW52aXJvbm1lbnQ6IHRydWUsCiAgICAgIGJvb2wgcnVuSW5TaGVsbDogZmFsc2UsCiAgICAgIFByb2Nlc3NTdGFydE1vZGUgbW9kZTogUHJvY2Vzc1N0YXJ0TW9kZS5ub3JtYWx9KSB7CiAgICBfUHJvY2Vzc0ltcGwgcHJvY2VzcyA9IG5ldyBfUHJvY2Vzc0ltcGwoCiAgICAgICAgZXhlY3V0YWJsZSwKICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgd29ya2luZ0RpcmVjdG9yeSwKICAgICAgICBlbnZpcm9ubWVudCwKICAgICAgICBpbmNsdWRlUGFyZW50RW52aXJvbm1lbnQsCiAgICAgICAgcnVuSW5TaGVsbCwKICAgICAgICBtb2RlKTsKICAgIHJldHVybiBwcm9jZXNzLl9zdGFydCgpOwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIEZ1dHVyZTxQcm9jZXNzUmVzdWx0PiBydW4oU3RyaW5nIGV4ZWN1dGFibGUsIExpc3Q8U3RyaW5nPiBhcmd1bWVudHMsCiAgICAgIHtTdHJpbmcgd29ya2luZ0RpcmVjdG9yeSwKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudCwKICAgICAgYm9vbCBpbmNsdWRlUGFyZW50RW52aXJvbm1lbnQ6IHRydWUsCiAgICAgIGJvb2wgcnVuSW5TaGVsbDogZmFsc2UsCiAgICAgIEVuY29kaW5nIHN0ZG91dEVuY29kaW5nOiBzeXN0ZW1FbmNvZGluZywKICAgICAgRW5jb2Rpbmcgc3RkZXJyRW5jb2Rpbmc6IHN5c3RlbUVuY29kaW5nfSkgewogICAgcmV0dXJuIF9ydW5Ob25JbnRlcmFjdGl2ZVByb2Nlc3MoCiAgICAgICAgZXhlY3V0YWJsZSwKICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgd29ya2luZ0RpcmVjdG9yeSwKICAgICAgICBlbnZpcm9ubWVudCwKICAgICAgICBpbmNsdWRlUGFyZW50RW52aXJvbm1lbnQsCiAgICAgICAgcnVuSW5TaGVsbCwKICAgICAgICBzdGRvdXRFbmNvZGluZywKICAgICAgICBzdGRlcnJFbmNvZGluZyk7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgUHJvY2Vzc1Jlc3VsdCBydW5TeW5jKFN0cmluZyBleGVjdXRhYmxlLCBMaXN0PFN0cmluZz4gYXJndW1lbnRzLAogICAgICB7U3RyaW5nIHdvcmtpbmdEaXJlY3RvcnksCiAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQsCiAgICAgIGJvb2wgaW5jbHVkZVBhcmVudEVudmlyb25tZW50OiB0cnVlLAogICAgICBib29sIHJ1bkluU2hlbGw6IGZhbHNlLAogICAgICBFbmNvZGluZyBzdGRvdXRFbmNvZGluZzogc3lzdGVtRW5jb2RpbmcsCiAgICAgIEVuY29kaW5nIHN0ZGVyckVuY29kaW5nOiBzeXN0ZW1FbmNvZGluZ30pIHsKICAgIHJldHVybiBfcnVuTm9uSW50ZXJhY3RpdmVQcm9jZXNzU3luYygKICAgICAgICBleGVjdXRhYmxlLAogICAgICAgIGFyZ3VtZW50cywKICAgICAgICB3b3JraW5nRGlyZWN0b3J5LAogICAgICAgIGVudmlyb25tZW50LAogICAgICAgIGluY2x1ZGVQYXJlbnRFbnZpcm9ubWVudCwKICAgICAgICBydW5JblNoZWxsLAogICAgICAgIHN0ZG91dEVuY29kaW5nLAogICAgICAgIHN0ZGVyckVuY29kaW5nKTsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBib29sIGtpbGxQaWQoaW50IHBpZCwgW1Byb2Nlc3NTaWduYWwgc2lnbmFsID0gUHJvY2Vzc1NpZ25hbC5zaWd0ZXJtXSkgewogICAgaWYgKHNpZ25hbCBpcyEgUHJvY2Vzc1NpZ25hbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiQXJndW1lbnQgJ3NpZ25hbCcgbXVzdCBiZSBhIFByb2Nlc3NTaWduYWwiKTsKICAgIH0KICAgIHJldHVybiBfUHJvY2Vzc1V0aWxzLl9raWxsUGlkKHBpZCwgc2lnbmFsLl9zaWduYWxOdW1iZXIpOwogIH0KfQoKTGlzdDxfU2lnbmFsQ29udHJvbGxlcj4gX3NpZ25hbENvbnRyb2xsZXJzID0gbmV3IExpc3QoMzIpOwoKY2xhc3MgX1NpZ25hbENvbnRyb2xsZXIgewogIGZpbmFsIFByb2Nlc3NTaWduYWwgc2lnbmFsOwoKICBTdHJlYW1Db250cm9sbGVyPFByb2Nlc3NTaWduYWw+IF9jb250cm9sbGVyOwogIHZhciBfaWQ7CgogIF9TaWduYWxDb250cm9sbGVyKHRoaXMuc2lnbmFsKSB7CiAgICBfY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPFByb2Nlc3NTaWduYWw+LmJyb2FkY2FzdCgKICAgICAgICBvbkxpc3RlbjogX2xpc3Rlbiwgb25DYW5jZWw6IF9jYW5jZWwpOwogIH0KCiAgU3RyZWFtPFByb2Nlc3NTaWduYWw+IGdldCBzdHJlYW0gPT4gX2NvbnRyb2xsZXIuc3RyZWFtOwoKICB2b2lkIF9saXN0ZW4oKSB7CiAgICB2YXIgaWQgPSBfc2V0U2lnbmFsSGFuZGxlcihzaWduYWwuX3NpZ25hbE51bWJlcik7CiAgICBpZiAoaWQgaXMhIGludCkgewogICAgICBfY29udHJvbGxlcgogICAgICAgICAgLmFkZEVycm9yKG5ldyBTaWduYWxFeGNlcHRpb24oIkZhaWxlZCB0byBsaXN0ZW4gZm9yICRzaWduYWwiLCBpZCkpOwogICAgICByZXR1cm47CiAgICB9CiAgICBfaWQgPSBpZDsKICAgIHZhciBzb2NrZXQgPSBuZXcgX1Jhd1NvY2tldChuZXcgX05hdGl2ZVNvY2tldC53YXRjaFNpZ25hbChpZCkpOwogICAgc29ja2V0Lmxpc3RlbigoZXZlbnQpIHsKICAgICAgaWYgKGV2ZW50ID09IFJhd1NvY2tldEV2ZW50LnJlYWQpIHsKICAgICAgICB2YXIgYnl0ZXMgPSBzb2NrZXQucmVhZCgpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIF9jb250cm9sbGVyLmFkZChzaWduYWwpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfQoKICB2b2lkIF9jYW5jZWwoKSB7CiAgICBpZiAoX2lkICE9IG51bGwpIHsKICAgICAgX2NsZWFyU2lnbmFsSGFuZGxlcihzaWduYWwuX3NpZ25hbE51bWJlcik7CiAgICAgIF9pZCA9IG51bGw7CiAgICB9CiAgfQoKICBzdGF0aWMgX3NldFNpZ25hbEhhbmRsZXIoaW50IHNpZ25hbCkgbmF0aXZlICJQcm9jZXNzX1NldFNpZ25hbEhhbmRsZXIiOwogIHN0YXRpYyBpbnQgX2NsZWFyU2lnbmFsSGFuZGxlcihpbnQgc2lnbmFsKQogICAgICBuYXRpdmUgIlByb2Nlc3NfQ2xlYXJTaWduYWxIYW5kbGVyIjsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCkZ1bmN0aW9uIF9nZXRXYXRjaFNpZ25hbEludGVybmFsKCkgPT4gX1Byb2Nlc3NVdGlscy5fd2F0Y2hTaWduYWxJbnRlcm5hbDsKCkBwYXRjaApjbGFzcyBfUHJvY2Vzc1V0aWxzIHsKICBAcGF0Y2gKICBzdGF0aWMgdm9pZCBfZXhpdChpbnQgc3RhdHVzKSBuYXRpdmUgIlByb2Nlc3NfRXhpdCI7CiAgQHBhdGNoCiAgc3RhdGljIHZvaWQgX3NldEV4aXRDb2RlKGludCBzdGF0dXMpIG5hdGl2ZSAiUHJvY2Vzc19TZXRFeGl0Q29kZSI7CiAgQHBhdGNoCiAgc3RhdGljIGludCBfZ2V0RXhpdENvZGUoKSBuYXRpdmUgIlByb2Nlc3NfR2V0RXhpdENvZGUiOwogIEBwYXRjaAogIHN0YXRpYyB2b2lkIF9zbGVlcChpbnQgbWlsbGlzKSBuYXRpdmUgIlByb2Nlc3NfU2xlZXAiOwogIEBwYXRjaAogIHN0YXRpYyBpbnQgX3BpZChQcm9jZXNzIHByb2Nlc3MpIG5hdGl2ZSAiUHJvY2Vzc19QaWQiOwogIHN0YXRpYyBib29sIF9raWxsUGlkKGludCBwaWQsIGludCBzaWduYWwpIG5hdGl2ZSAiUHJvY2Vzc19LaWxsUGlkIjsKICBAcGF0Y2gKICBzdGF0aWMgU3RyZWFtPFByb2Nlc3NTaWduYWw+IF93YXRjaFNpZ25hbChQcm9jZXNzU2lnbmFsIHNpZ25hbCkgewogICAgaWYgKHNpZ25hbCAhPSBQcm9jZXNzU2lnbmFsLnNpZ2h1cCAmJgogICAgICAgIHNpZ25hbCAhPSBQcm9jZXNzU2lnbmFsLnNpZ2ludCAmJgogICAgICAgIHNpZ25hbCAhPSBQcm9jZXNzU2lnbmFsLnNpZ3Rlcm0gJiYKICAgICAgICAoUGxhdGZvcm0uaXNXaW5kb3dzIHx8CiAgICAgICAgICAgIChzaWduYWwgIT0gUHJvY2Vzc1NpZ25hbC5zaWd1c3IxICYmCiAgICAgICAgICAgICAgICBzaWduYWwgIT0gUHJvY2Vzc1NpZ25hbC5zaWd1c3IyICYmCiAgICAgICAgICAgICAgICBzaWduYWwgIT0gUHJvY2Vzc1NpZ25hbC5zaWd3aW5jaCkpKSB7CiAgICAgIHRocm93IG5ldyBTaWduYWxFeGNlcHRpb24oCiAgICAgICAgICAiTGlzdGVuaW5nIGZvciBzaWduYWwgJHNpZ25hbCBpcyBub3Qgc3VwcG9ydGVkIik7CiAgICB9CiAgICByZXR1cm4gX3dhdGNoU2lnbmFsSW50ZXJuYWwoc2lnbmFsKTsKICB9CgogIHN0YXRpYyBTdHJlYW08UHJvY2Vzc1NpZ25hbD4gX3dhdGNoU2lnbmFsSW50ZXJuYWwoUHJvY2Vzc1NpZ25hbCBzaWduYWwpIHsKICAgIGlmIChfc2lnbmFsQ29udHJvbGxlcnNbc2lnbmFsLl9zaWduYWxOdW1iZXJdID09IG51bGwpIHsKICAgICAgX3NpZ25hbENvbnRyb2xsZXJzW3NpZ25hbC5fc2lnbmFsTnVtYmVyXSA9IG5ldyBfU2lnbmFsQ29udHJvbGxlcihzaWduYWwpOwogICAgfQogICAgcmV0dXJuIF9zaWduYWxDb250cm9sbGVyc1tzaWduYWwuX3NpZ25hbE51bWJlcl0uc3RyZWFtOwogIH0KfQoKQHBhdGNoCmNsYXNzIFByb2Nlc3NJbmZvIHsKICBAcGF0Y2gKICBzdGF0aWMgaW50IGdldCBtYXhSc3MgewogICAgdmFyIHJlc3VsdCA9IF9tYXhSc3MoKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIGludCBnZXQgY3VycmVudFJzcyB7CiAgICB2YXIgcmVzdWx0ID0gX2N1cnJlbnRSc3MoKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIF9tYXhSc3MoKSBuYXRpdmUgIlByb2Nlc3NJbmZvX01heFJTUyI7CiAgc3RhdGljIF9jdXJyZW50UnNzKCkgbmF0aXZlICJQcm9jZXNzSW5mb19DdXJyZW50UlNTIjsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfUHJvY2Vzc1N0YXJ0U3RhdHVzIHsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJzZXQiKQogIGludCBfZXJyb3JDb2RlOyAvLyBTZXQgdG8gT1MgZXJyb3IgY29kZSBpZiBwcm9jZXNzIHN0YXJ0IGZhaWxlZC4KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJzZXQiKQogIFN0cmluZyBfZXJyb3JNZXNzYWdlOyAvLyBTZXQgdG8gT1MgZXJyb3IgbWVzc2FnZSBpZiBwcm9jZXNzIHN0YXJ0IGZhaWxlZC4KfQoKLy8gVGhlIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMSBjYW4gbm90IGJlIHVzZWQgd2l0aCBhIG1peGluLCBkdWUgdG8gbWlzc2luZwovLyBpbXBsaWNpdCBjb25zdHJ1Y3Rvci4KY2xhc3MgX1Byb2Nlc3NJbXBsTmF0aXZlV3JhcHBlciBleHRlbmRzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMSB7fQoKY2xhc3MgX1Byb2Nlc3NJbXBsIGV4dGVuZHMgX1Byb2Nlc3NJbXBsTmF0aXZlV3JhcHBlciBpbXBsZW1lbnRzIFByb2Nlc3MgewogIF9Qcm9jZXNzUmVzb3VyY2VJbmZvIF9yZXNvdXJjZUluZm87CiAgc3RhdGljIGJvb2wgY29ubmVjdGVkUmVzb3VyY2VIYW5kbGVyID0gZmFsc2U7CgogIF9Qcm9jZXNzSW1wbCgKICAgICAgU3RyaW5nIHBhdGgsCiAgICAgIExpc3Q8U3RyaW5nPiBhcmd1bWVudHMsCiAgICAgIHRoaXMuX3dvcmtpbmdEaXJlY3RvcnksCiAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQsCiAgICAgIGJvb2wgaW5jbHVkZVBhcmVudEVudmlyb25tZW50LAogICAgICBib29sIHJ1bkluU2hlbGwsCiAgICAgIFByb2Nlc3NTdGFydE1vZGUgbW9kZSkKICAgICAgOiBzdXBlcigpIHsKICAgIGlmICghY29ubmVjdGVkUmVzb3VyY2VIYW5kbGVyKSB7CiAgICAgIHJlZ2lzdGVyRXh0ZW5zaW9uKAogICAgICAgICAgJ2V4dC5kYXJ0LmlvLmdldFByb2Nlc3NlcycsIF9Qcm9jZXNzUmVzb3VyY2VJbmZvLmdldFN0YXJ0ZWRQcm9jZXNzZXMpOwogICAgICByZWdpc3RlckV4dGVuc2lvbignZXh0LmRhcnQuaW8uZ2V0UHJvY2Vzc0J5SWQnLAogICAgICAgICAgX1Byb2Nlc3NSZXNvdXJjZUluZm8uZ2V0UHJvY2Vzc0luZm9NYXBCeUlkKTsKICAgICAgY29ubmVjdGVkUmVzb3VyY2VIYW5kbGVyID0gdHJ1ZTsKICAgIH0KCiAgICBpZiAocnVuSW5TaGVsbCkgewogICAgICBhcmd1bWVudHMgPSBfZ2V0U2hlbGxBcmd1bWVudHMocGF0aCwgYXJndW1lbnRzKTsKICAgICAgcGF0aCA9IF9nZXRTaGVsbENvbW1hbmQoKTsKICAgIH0KCiAgICBpZiAocGF0aCBpcyEgU3RyaW5nKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJQYXRoIGlzIG5vdCBhIFN0cmluZzogJHBhdGgiKTsKICAgIH0KCiAgICBpZiAoUGxhdGZvcm0uaXNXaW5kb3dzICYmIHBhdGguY29udGFpbnMoJyAnKSAmJiAhcGF0aC5jb250YWlucygnIicpKSB7CiAgICAgIC8vIEVzY2FwZSBwYXRocyB0aGF0IG1heSBjb250YWluIHNwYWNlcwogICAgICAvLyBCdWc6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvc2RrL2lzc3Vlcy8zNzc1MQogICAgICBfcGF0aCA9ICciJHBhdGgiJzsKICAgIH0gZWxzZSB7CiAgICAgIF9wYXRoID0gcGF0aDsKICAgIH0KCiAgICBpZiAoYXJndW1lbnRzIGlzISBMaXN0KSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJBcmd1bWVudHMgaXMgbm90IGEgTGlzdDogJGFyZ3VtZW50cyIpOwogICAgfQogICAgaW50IGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7CiAgICBfYXJndW1lbnRzID0gbmV3IExpc3Q8U3RyaW5nPihsZW4pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICB2YXIgYXJnID0gYXJndW1lbnRzW2ldOwogICAgICBpZiAoYXJnIGlzISBTdHJpbmcpIHsKICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiTm9uLXN0cmluZyBhcmd1bWVudDogJGFyZyIpOwogICAgICB9CiAgICAgIF9hcmd1bWVudHNbaV0gPSBhcmd1bWVudHNbaV07CiAgICAgIGlmIChQbGF0Zm9ybS5pc1dpbmRvd3MpIHsKICAgICAgICBfYXJndW1lbnRzW2ldID0gX3dpbmRvd3NBcmd1bWVudEVzY2FwZShfYXJndW1lbnRzW2ldKTsKICAgICAgfQogICAgfQoKICAgIGlmIChfd29ya2luZ0RpcmVjdG9yeSAhPSBudWxsICYmIF93b3JraW5nRGlyZWN0b3J5IGlzISBTdHJpbmcpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAiV29ya2luZ0RpcmVjdG9yeSBpcyBub3QgYSBTdHJpbmc6ICRfd29ya2luZ0RpcmVjdG9yeSIpOwogICAgfQoKICAgIF9lbnZpcm9ubWVudCA9IFtdOwogICAgLy8gRW5zdXJlIHRoYXQgd2UgaGF2ZSBhIG5vbi1udWxsIGVudmlyb25tZW50LgogICAgZW52aXJvbm1lbnQgPSAoZW52aXJvbm1lbnQgPT0gbnVsbCkgPyAoY29uc3Qge30pIDogZW52aXJvbm1lbnQ7CiAgICBpZiAoZW52aXJvbm1lbnQgaXMhIE1hcCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiRW52aXJvbm1lbnQgaXMgbm90IGEgbWFwOiAkZW52aXJvbm1lbnQiKTsKICAgIH0KICAgIGVudmlyb25tZW50LmZvckVhY2goKGtleSwgdmFsdWUpIHsKICAgICAgaWYgKGtleSBpcyEgU3RyaW5nIHx8IHZhbHVlIGlzISBTdHJpbmcpIHsKICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigKICAgICAgICAgICAgIkVudmlyb25tZW50IGtleSBvciB2YWx1ZSBpcyBub3QgYSBzdHJpbmc6ICgka2V5LCAkdmFsdWUpIik7CiAgICAgIH0KICAgICAgX2Vudmlyb25tZW50LmFkZCgnJGtleT0kdmFsdWUnKTsKICAgIH0pOwogICAgaWYgKGluY2x1ZGVQYXJlbnRFbnZpcm9ubWVudCkgewogICAgICBQbGF0Zm9ybS5lbnZpcm9ubWVudC5mb3JFYWNoKChrZXksIHZhbHVlKSB7CiAgICAgICAgYXNzZXJ0KGtleSBpcyBTdHJpbmcpOwogICAgICAgIGFzc2VydCh2YWx1ZSBpcyBTdHJpbmcpOwogICAgICAgIC8vIERvIG5vdCBvdmVycmlkZSBrZXlzIGFscmVhZHkgc2V0IGFzIHBhcnQgb2YgZW52aXJvbm1lbnQuCiAgICAgICAgaWYgKCFlbnZpcm9ubWVudC5jb250YWluc0tleShrZXkpKSB7CiAgICAgICAgICBfZW52aXJvbm1lbnQuYWRkKCcka2V5PSR2YWx1ZScpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CgogICAgaWYgKG1vZGUgaXMhIFByb2Nlc3NTdGFydE1vZGUpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIk1vZGUgaXMgbm90IGEgUHJvY2Vzc1N0YXJ0TW9kZTogJG1vZGUiKTsKICAgIH0KICAgIF9tb2RlID0gbW9kZTsKCiAgICBpZiAoX21vZGVIYXNTdGRpbyhtb2RlKSkgewogICAgICAvLyBzdGRpbiBnb2luZyB0byBwcm9jZXNzLgogICAgICBfc3RkaW4gPSBuZXcgX1N0ZFNpbmsobmV3IF9Tb2NrZXQuX3dyaXRlUGlwZSgpLi5fb3duZXIgPSB0aGlzKTsKICAgICAgLy8gc3Rkb3V0IGNvbWluZyBmcm9tIHByb2Nlc3MuCiAgICAgIF9zdGRvdXQgPSBuZXcgX1N0ZFN0cmVhbShuZXcgX1NvY2tldC5fcmVhZFBpcGUoKS4uX293bmVyID0gdGhpcyk7CiAgICAgIC8vIHN0ZGVyciBjb21pbmcgZnJvbSBwcm9jZXNzLgogICAgICBfc3RkZXJyID0gbmV3IF9TdGRTdHJlYW0obmV3IF9Tb2NrZXQuX3JlYWRQaXBlKCkuLl9vd25lciA9IHRoaXMpOwogICAgfQogICAgaWYgKF9tb2RlSXNBdHRhY2hlZChtb2RlKSkgewogICAgICBfZXhpdEhhbmRsZXIgPSBuZXcgX1NvY2tldC5fcmVhZFBpcGUoKTsKICAgIH0KICAgIF9lbmRlZCA9IGZhbHNlOwogICAgX3N0YXJ0ZWQgPSBmYWxzZTsKICB9CgogIF9OYXRpdmVTb2NrZXQgZ2V0IF9zdGRpbk5hdGl2ZVNvY2tldCA9PgogICAgICAoX3N0ZGluLl9zaW5rIGFzIF9Tb2NrZXQpLl9uYXRpdmVTb2NrZXQ7CiAgX05hdGl2ZVNvY2tldCBnZXQgX3N0ZG91dE5hdGl2ZVNvY2tldCA9PgogICAgICAoX3N0ZG91dC5fc3RyZWFtIGFzIF9Tb2NrZXQpLl9uYXRpdmVTb2NrZXQ7CiAgX05hdGl2ZVNvY2tldCBnZXQgX3N0ZGVyck5hdGl2ZVNvY2tldCA9PgogICAgICAoX3N0ZGVyci5fc3RyZWFtIGFzIF9Tb2NrZXQpLl9uYXRpdmVTb2NrZXQ7CgogIHN0YXRpYyBib29sIF9tb2RlSXNBdHRhY2hlZChQcm9jZXNzU3RhcnRNb2RlIG1vZGUpIHsKICAgIHJldHVybiAobW9kZSA9PSBQcm9jZXNzU3RhcnRNb2RlLm5vcm1hbCkgfHwKICAgICAgICAobW9kZSA9PSBQcm9jZXNzU3RhcnRNb2RlLmluaGVyaXRTdGRpbyk7CiAgfQoKICBzdGF0aWMgYm9vbCBfbW9kZUhhc1N0ZGlvKFByb2Nlc3NTdGFydE1vZGUgbW9kZSkgewogICAgcmV0dXJuIChtb2RlID09IFByb2Nlc3NTdGFydE1vZGUubm9ybWFsKSB8fAogICAgICAgIChtb2RlID09IFByb2Nlc3NTdGFydE1vZGUuZGV0YWNoZWRXaXRoU3RkaW8pOwogIH0KCiAgc3RhdGljIFN0cmluZyBfZ2V0U2hlbGxDb21tYW5kKCkgewogICAgaWYgKFBsYXRmb3JtLmlzV2luZG93cykgewogICAgICByZXR1cm4gJ2NtZC5leGUnOwogICAgfQogICAgcmV0dXJuICcvYmluL3NoJzsKICB9CgogIHN0YXRpYyBMaXN0PFN0cmluZz4gX2dldFNoZWxsQXJndW1lbnRzKAogICAgICBTdHJpbmcgZXhlY3V0YWJsZSwgTGlzdDxTdHJpbmc+IGFyZ3VtZW50cykgewogICAgTGlzdDxTdHJpbmc+IHNoZWxsQXJndW1lbnRzID0gW107CiAgICBpZiAoUGxhdGZvcm0uaXNXaW5kb3dzKSB7CiAgICAgIHNoZWxsQXJndW1lbnRzLmFkZCgnL2MnKTsKICAgICAgc2hlbGxBcmd1bWVudHMuYWRkKGV4ZWN1dGFibGUpOwogICAgICBmb3IgKHZhciBhcmcgaW4gYXJndW1lbnRzKSB7CiAgICAgICAgc2hlbGxBcmd1bWVudHMuYWRkKGFyZyk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHZhciBjb21tYW5kTGluZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgZXhlY3V0YWJsZSA9IGV4ZWN1dGFibGUucmVwbGFjZUFsbCgiJyIsICInXCInXCInIik7CiAgICAgIGNvbW1hbmRMaW5lLndyaXRlKCInJGV4ZWN1dGFibGUnIik7CiAgICAgIHNoZWxsQXJndW1lbnRzLmFkZCgiLWMiKTsKICAgICAgZm9yICh2YXIgYXJnIGluIGFyZ3VtZW50cykgewogICAgICAgIGFyZyA9IGFyZy5yZXBsYWNlQWxsKCInIiwgIidcIidcIiciKTsKICAgICAgICBjb21tYW5kTGluZS53cml0ZSgiICckYXJnJyIpOwogICAgICB9CiAgICAgIHNoZWxsQXJndW1lbnRzLmFkZChjb21tYW5kTGluZS50b1N0cmluZygpKTsKICAgIH0KICAgIHJldHVybiBzaGVsbEFyZ3VtZW50czsKICB9CgogIFN0cmluZyBfd2luZG93c0FyZ3VtZW50RXNjYXBlKFN0cmluZyBhcmd1bWVudCkgewogICAgdmFyIHJlc3VsdCA9IGFyZ3VtZW50OwogICAgaWYgKGFyZ3VtZW50LmNvbnRhaW5zKCdcdCcpIHx8CiAgICAgICAgYXJndW1lbnQuY29udGFpbnMoJyAnKSB8fAogICAgICAgIGFyZ3VtZW50LmNvbnRhaW5zKCciJykpIHsKICAgICAgLy8gUHJvZHVjZSBzb21ldGhpbmcgdGhhdCB0aGUgQyBydW50aW1lIG9uIFdpbmRvd3Mgd2lsbCBwYXJzZQogICAgICAvLyBiYWNrIGFzIHRoaXMgc3RyaW5nLgoKICAgICAgLy8gUmVwbGFjZSBhbnkgbnVtYmVyIG9mICdcJyBmb2xsb3dlZCBieSAnIicgd2l0aAogICAgICAvLyB0d2ljZSBhcyBtYW55ICdcJyBmb2xsb3dlZCBieSAnXCInLgogICAgICB2YXIgYmFja3NsYXNoID0gJ1xcJy5jb2RlVW5pdEF0KDApOwogICAgICB2YXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgIHZhciBuZXh0UG9zID0gMDsKICAgICAgdmFyIHF1b3RlUG9zID0gYXJndW1lbnQuaW5kZXhPZignIicsIG5leHRQb3MpOwogICAgICB3aGlsZSAocXVvdGVQb3MgIT0gLTEpIHsKICAgICAgICB2YXIgbnVtQmFja3NsYXNoID0gMDsKICAgICAgICB2YXIgcG9zID0gcXVvdGVQb3MgLSAxOwogICAgICAgIHdoaWxlIChwb3MgPj0gMCAmJiBhcmd1bWVudC5jb2RlVW5pdEF0KHBvcykgPT0gYmFja3NsYXNoKSB7CiAgICAgICAgICBudW1CYWNrc2xhc2grKzsKICAgICAgICAgIHBvcy0tOwogICAgICAgIH0KICAgICAgICBzYi53cml0ZShhcmd1bWVudC5zdWJzdHJpbmcobmV4dFBvcywgcXVvdGVQb3MgLSBudW1CYWNrc2xhc2gpKTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUJhY2tzbGFzaDsgaSsrKSB7CiAgICAgICAgICBzYi53cml0ZShyJ1xcJyk7CiAgICAgICAgfQogICAgICAgIHNiLndyaXRlKHInXCInKTsKICAgICAgICBuZXh0UG9zID0gcXVvdGVQb3MgKyAxOwogICAgICAgIHF1b3RlUG9zID0gYXJndW1lbnQuaW5kZXhPZignIicsIG5leHRQb3MpOwogICAgICB9CiAgICAgIHNiLndyaXRlKGFyZ3VtZW50LnN1YnN0cmluZyhuZXh0UG9zLCBhcmd1bWVudC5sZW5ndGgpKTsKICAgICAgcmVzdWx0ID0gc2IudG9TdHJpbmcoKTsKCiAgICAgIC8vIEFkZCAnIicgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIGFuZCByZXBsYWNlIGFsbCAnXCcgYXQKICAgICAgLy8gdGhlIGVuZCB3aXRoIHR3byAnXCcuCiAgICAgIHNiID0gbmV3IFN0cmluZ0J1ZmZlcignIicpOwogICAgICBzYi53cml0ZShyZXN1bHQpOwogICAgICBuZXh0UG9zID0gYXJndW1lbnQubGVuZ3RoIC0gMTsKICAgICAgd2hpbGUgKGFyZ3VtZW50LmNvZGVVbml0QXQobmV4dFBvcykgPT0gYmFja3NsYXNoKSB7CiAgICAgICAgc2Iud3JpdGUoJ1xcJyk7CiAgICAgICAgbmV4dFBvcy0tOwogICAgICB9CiAgICAgIHNiLndyaXRlKCciJyk7CiAgICAgIHJlc3VsdCA9IHNiLnRvU3RyaW5nKCk7CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGludCBfaW50RnJvbUJ5dGVzKExpc3Q8aW50PiBieXRlcywgaW50IG9mZnNldCkgewogICAgcmV0dXJuIChieXRlc1tvZmZzZXRdICsKICAgICAgICAoYnl0ZXNbb2Zmc2V0ICsgMV0gPDwgOCkgKwogICAgICAgIChieXRlc1tvZmZzZXQgKyAyXSA8PCAxNikgKwogICAgICAgIChieXRlc1tvZmZzZXQgKyAzXSA8PCAyNCkpOwogIH0KCiAgRnV0dXJlPFByb2Nlc3M+IF9zdGFydCgpIHsKICAgIHZhciBjb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPFByb2Nlc3M+KCk7CiAgICBpZiAoX21vZGVJc0F0dGFjaGVkKF9tb2RlKSkgewogICAgICBfZXhpdENvZGUgPSBuZXcgQ29tcGxldGVyPGludD4oKTsKICAgIH0KICAgIC8vIFRPRE8oYWdlcik6IE1ha2UgdGhlIGFjdHVhbCBwcm9jZXNzIHN0YXJ0aW5nIHJlYWxseSBhc3luYyBpbnN0ZWFkIG9mCiAgICAvLyBzaW11bGF0aW5nIGl0IHdpdGggYSB0aW1lci4KICAgIFRpbWVyLnJ1bigoKSB7CiAgICAgIHZhciBzdGF0dXMgPSBuZXcgX1Byb2Nlc3NTdGFydFN0YXR1cygpOwogICAgICBib29sIHN1Y2Nlc3MgPSBfc3RhcnROYXRpdmUoCiAgICAgICAgICBfTmFtZXNwYWNlLl9uYW1lc3BhY2UsCiAgICAgICAgICBfcGF0aCwKICAgICAgICAgIF9hcmd1bWVudHMsCiAgICAgICAgICBfd29ya2luZ0RpcmVjdG9yeSwKICAgICAgICAgIF9lbnZpcm9ubWVudCwKICAgICAgICAgIF9tb2RlLl9tb2RlLAogICAgICAgICAgX21vZGVIYXNTdGRpbyhfbW9kZSkgPyBfc3RkaW5OYXRpdmVTb2NrZXQgOiBudWxsLAogICAgICAgICAgX21vZGVIYXNTdGRpbyhfbW9kZSkgPyBfc3Rkb3V0TmF0aXZlU29ja2V0IDogbnVsbCwKICAgICAgICAgIF9tb2RlSGFzU3RkaW8oX21vZGUpID8gX3N0ZGVyck5hdGl2ZVNvY2tldCA6IG51bGwsCiAgICAgICAgICBfbW9kZUlzQXR0YWNoZWQoX21vZGUpID8gX2V4aXRIYW5kbGVyLl9uYXRpdmVTb2NrZXQgOiBudWxsLAogICAgICAgICAgc3RhdHVzKTsKICAgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgICAgY29tcGxldGVyLmNvbXBsZXRlRXJyb3IobmV3IFByb2Nlc3NFeGNlcHRpb24oCiAgICAgICAgICAgIF9wYXRoLCBfYXJndW1lbnRzLCBzdGF0dXMuX2Vycm9yTWVzc2FnZSwgc3RhdHVzLl9lcnJvckNvZGUpKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIF9zdGFydGVkID0gdHJ1ZTsKICAgICAgX3Jlc291cmNlSW5mbyA9IG5ldyBfUHJvY2Vzc1Jlc291cmNlSW5mbyh0aGlzKTsKCiAgICAgIC8vIFNldHVwIGFuIGV4aXQgaGFuZGxlciB0byBoYW5kbGUgaW50ZXJuYWwgY2xlYW51cCBhbmQgcG9zc2libGUKICAgICAgLy8gY2FsbGJhY2sgd2hlbiBhIHByb2Nlc3MgdGVybWluYXRlcy4KICAgICAgaWYgKF9tb2RlSXNBdHRhY2hlZChfbW9kZSkpIHsKICAgICAgICBpbnQgZXhpdERhdGFSZWFkID0gMDsKICAgICAgICBmaW5hbCBpbnQgRVhJVF9EQVRBX1NJWkUgPSA4OwogICAgICAgIExpc3Q8aW50PiBleGl0RGF0YUJ1ZmZlciA9IG5ldyBMaXN0PGludD4oRVhJVF9EQVRBX1NJWkUpOwogICAgICAgIF9leGl0SGFuZGxlci5saXN0ZW4oKGRhdGEpIHsKICAgICAgICAgIGludCBleGl0Q29kZShMaXN0PGludD4gaW50cykgewogICAgICAgICAgICB2YXIgY29kZSA9IF9pbnRGcm9tQnl0ZXMoaW50cywgMCk7CiAgICAgICAgICAgIHZhciBuZWdhdGl2ZSA9IF9pbnRGcm9tQnl0ZXMoaW50cywgNCk7CiAgICAgICAgICAgIGFzc2VydChuZWdhdGl2ZSA9PSAwIHx8IG5lZ2F0aXZlID09IDEpOwogICAgICAgICAgICByZXR1cm4gKG5lZ2F0aXZlID09IDApID8gY29kZSA6IC1jb2RlOwogICAgICAgICAgfQoKICAgICAgICAgIHZvaWQgaGFuZGxlRXhpdCgpIHsKICAgICAgICAgICAgX2VuZGVkID0gdHJ1ZTsKICAgICAgICAgICAgX2V4aXRDb2RlLmNvbXBsZXRlKGV4aXRDb2RlKGV4aXREYXRhQnVmZmVyKSk7CiAgICAgICAgICAgIC8vIEtpbGwgc3RkaW4sIGhlbHBpbmcgaGFuZCBpZiB0aGUgdXNlciBmb3Jnb3QgdG8gZG8gaXQuCiAgICAgICAgICAgIGlmIChfbW9kZUhhc1N0ZGlvKF9tb2RlKSkgewogICAgICAgICAgICAgIChfc3RkaW4uX3NpbmsgYXMgX1NvY2tldCkuZGVzdHJveSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9yZXNvdXJjZUluZm8uc3RvcHBlZCgpOwogICAgICAgICAgfQoKICAgICAgICAgIGV4aXREYXRhQnVmZmVyLnNldFJhbmdlKAogICAgICAgICAgICAgIGV4aXREYXRhUmVhZCwgZXhpdERhdGFSZWFkICsgZGF0YS5sZW5ndGgsIGRhdGEpOwogICAgICAgICAgZXhpdERhdGFSZWFkICs9IGRhdGEubGVuZ3RoOwogICAgICAgICAgaWYgKGV4aXREYXRhUmVhZCA9PSBFWElUX0RBVEFfU0laRSkgewogICAgICAgICAgICBoYW5kbGVFeGl0KCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIGNvbXBsZXRlci5jb21wbGV0ZSh0aGlzKTsKICAgIH0pOwogICAgcmV0dXJuIGNvbXBsZXRlci5mdXR1cmU7CiAgfQoKICBQcm9jZXNzUmVzdWx0IF9ydW5BbmRXYWl0KEVuY29kaW5nIHN0ZG91dEVuY29kaW5nLCBFbmNvZGluZyBzdGRlcnJFbmNvZGluZykgewogICAgdmFyIHN0YXR1cyA9IG5ldyBfUHJvY2Vzc1N0YXJ0U3RhdHVzKCk7CiAgICBfZXhpdENvZGUgPSBuZXcgQ29tcGxldGVyPGludD4oKTsKICAgIGJvb2wgc3VjY2VzcyA9IF9zdGFydE5hdGl2ZSgKICAgICAgICBfTmFtZXNwYWNlLl9uYW1lc3BhY2UsCiAgICAgICAgX3BhdGgsCiAgICAgICAgX2FyZ3VtZW50cywKICAgICAgICBfd29ya2luZ0RpcmVjdG9yeSwKICAgICAgICBfZW52aXJvbm1lbnQsCiAgICAgICAgUHJvY2Vzc1N0YXJ0TW9kZS5ub3JtYWwuX21vZGUsCiAgICAgICAgX3N0ZGluTmF0aXZlU29ja2V0LAogICAgICAgIF9zdGRvdXROYXRpdmVTb2NrZXQsCiAgICAgICAgX3N0ZGVyck5hdGl2ZVNvY2tldCwKICAgICAgICBfZXhpdEhhbmRsZXIuX25hdGl2ZVNvY2tldCwKICAgICAgICBzdGF0dXMpOwogICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgIHRocm93IG5ldyBQcm9jZXNzRXhjZXB0aW9uKAogICAgICAgICAgX3BhdGgsIF9hcmd1bWVudHMsIHN0YXR1cy5fZXJyb3JNZXNzYWdlLCBzdGF0dXMuX2Vycm9yQ29kZSk7CiAgICB9CgogICAgX3Jlc291cmNlSW5mbyA9IG5ldyBfUHJvY2Vzc1Jlc291cmNlSW5mbyh0aGlzKTsKCiAgICB2YXIgcmVzdWx0ID0gX3dhaXQoX3N0ZGluTmF0aXZlU29ja2V0LCBfc3Rkb3V0TmF0aXZlU29ja2V0LAogICAgICAgIF9zdGRlcnJOYXRpdmVTb2NrZXQsIF9leGl0SGFuZGxlci5fbmF0aXZlU29ja2V0KTsKCiAgICBnZXRPdXRwdXQob3V0cHV0LCBlbmNvZGluZykgewogICAgICBpZiAoZW5jb2RpbmcgPT0gbnVsbCkgcmV0dXJuIG91dHB1dDsKICAgICAgcmV0dXJuIGVuY29kaW5nLmRlY29kZShvdXRwdXQpOwogICAgfQoKICAgIF9yZXNvdXJjZUluZm8uc3RvcHBlZCgpOwoKICAgIHJldHVybiBuZXcgUHJvY2Vzc1Jlc3VsdCgKICAgICAgICByZXN1bHRbMF0sCiAgICAgICAgcmVzdWx0WzFdLAogICAgICAgIGdldE91dHB1dChyZXN1bHRbMl0sIHN0ZG91dEVuY29kaW5nKSwKICAgICAgICBnZXRPdXRwdXQocmVzdWx0WzNdLCBzdGRlcnJFbmNvZGluZykpOwogIH0KCiAgYm9vbCBfc3RhcnROYXRpdmUoCiAgICAgIF9OYW1lc3BhY2UgbmFtZXNwYWNlLAogICAgICBTdHJpbmcgcGF0aCwKICAgICAgTGlzdDxTdHJpbmc+IGFyZ3VtZW50cywKICAgICAgU3RyaW5nIHdvcmtpbmdEaXJlY3RvcnksCiAgICAgIExpc3Q8U3RyaW5nPiBlbnZpcm9ubWVudCwKICAgICAgaW50IG1vZGUsCiAgICAgIF9OYXRpdmVTb2NrZXQgc3RkaW4sCiAgICAgIF9OYXRpdmVTb2NrZXQgc3Rkb3V0LAogICAgICBfTmF0aXZlU29ja2V0IHN0ZGVyciwKICAgICAgX05hdGl2ZVNvY2tldCBleGl0SGFuZGxlciwKICAgICAgX1Byb2Nlc3NTdGFydFN0YXR1cyBzdGF0dXMpIG5hdGl2ZSAiUHJvY2Vzc19TdGFydCI7CgogIF93YWl0KF9OYXRpdmVTb2NrZXQgc3RkaW4sIF9OYXRpdmVTb2NrZXQgc3Rkb3V0LCBfTmF0aXZlU29ja2V0IHN0ZGVyciwKICAgICAgX05hdGl2ZVNvY2tldCBleGl0SGFuZGxlcikgbmF0aXZlICJQcm9jZXNzX1dhaXQiOwoKICBTdHJlYW08TGlzdDxpbnQ+PiBnZXQgc3Rkb3V0IHsKICAgIHJldHVybiBfc3Rkb3V0OwogIH0KCiAgU3RyZWFtPExpc3Q8aW50Pj4gZ2V0IHN0ZGVyciB7CiAgICByZXR1cm4gX3N0ZGVycjsKICB9CgogIElPU2luayBnZXQgc3RkaW4gewogICAgcmV0dXJuIF9zdGRpbjsKICB9CgogIEZ1dHVyZTxpbnQ+IGdldCBleGl0Q29kZSA9PiBfZXhpdENvZGUgIT0gbnVsbCA/IF9leGl0Q29kZS5mdXR1cmUgOiBudWxsOwoKICBib29sIGtpbGwoW1Byb2Nlc3NTaWduYWwgc2lnbmFsID0gUHJvY2Vzc1NpZ25hbC5zaWd0ZXJtXSkgewogICAgaWYgKHNpZ25hbCBpcyEgUHJvY2Vzc1NpZ25hbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiQXJndW1lbnQgJ3NpZ25hbCcgbXVzdCBiZSBhIFByb2Nlc3NTaWduYWwiKTsKICAgIH0KICAgIGFzc2VydChfc3RhcnRlZCk7CiAgICBpZiAoX2VuZGVkKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX1Byb2Nlc3NVdGlscy5fa2lsbFBpZChwaWQsIHNpZ25hbC5fc2lnbmFsTnVtYmVyKTsKICB9CgogIGludCBnZXQgcGlkID0+IF9Qcm9jZXNzVXRpbHMuX3BpZCh0aGlzKTsKCiAgU3RyaW5nIF9wYXRoOwogIExpc3Q8U3RyaW5nPiBfYXJndW1lbnRzOwogIFN0cmluZyBfd29ya2luZ0RpcmVjdG9yeTsKICBMaXN0PFN0cmluZz4gX2Vudmlyb25tZW50OwogIFByb2Nlc3NTdGFydE1vZGUgX21vZGU7CiAgLy8gUHJpdmF0ZSBtZXRob2RzIG9mIFNvY2tldCBhcmUgdXNlZCBieSBfaW4sIF9vdXQsIGFuZCBfZXJyLgogIF9TdGRTaW5rIF9zdGRpbjsKICBfU3RkU3RyZWFtIF9zdGRvdXQ7CiAgX1N0ZFN0cmVhbSBfc3RkZXJyOwogIF9Tb2NrZXQgX2V4aXRIYW5kbGVyOwogIGJvb2wgX2VuZGVkOwogIGJvb2wgX3N0YXJ0ZWQ7CiAgQ29tcGxldGVyPGludD4gX2V4aXRDb2RlOwp9CgovLyBfTm9uSW50ZXJhY3RpdmVQcm9jZXNzIGlzIGEgd3JhcHBlciBhcm91bmQgYW4gaW50ZXJhY3RpdmUgcHJvY2VzcwovLyB0aGF0IGJ1ZmZlcnMgb3V0cHV0IHNvIGl0IGNhbiBiZSBkZWxpdmVyZWQgd2hlbiB0aGUgcHJvY2VzcyBleGl0cy4KLy8gX05vbkludGVyYWN0aXZlUHJvY2VzcyBpcyB1c2VkIHRvIGltcGxlbWVudCB0aGUgUHJvY2Vzcy5ydW4KLy8gbWV0aG9kLgpGdXR1cmU8UHJvY2Vzc1Jlc3VsdD4gX3J1bk5vbkludGVyYWN0aXZlUHJvY2VzcygKICAgIFN0cmluZyBwYXRoLAogICAgTGlzdDxTdHJpbmc+IGFyZ3VtZW50cywKICAgIFN0cmluZyB3b3JraW5nRGlyZWN0b3J5LAogICAgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudCwKICAgIGJvb2wgaW5jbHVkZVBhcmVudEVudmlyb25tZW50LAogICAgYm9vbCBydW5JblNoZWxsLAogICAgRW5jb2Rpbmcgc3Rkb3V0RW5jb2RpbmcsCiAgICBFbmNvZGluZyBzdGRlcnJFbmNvZGluZykgewogIC8vIFN0YXJ0IHRoZSB1bmRlcmx5aW5nIHByb2Nlc3MuCiAgcmV0dXJuIFByb2Nlc3Muc3RhcnQocGF0aCwgYXJndW1lbnRzLAogICAgICAgICAgd29ya2luZ0RpcmVjdG9yeTogd29ya2luZ0RpcmVjdG9yeSwKICAgICAgICAgIGVudmlyb25tZW50OiBlbnZpcm9ubWVudCwKICAgICAgICAgIGluY2x1ZGVQYXJlbnRFbnZpcm9ubWVudDogaW5jbHVkZVBhcmVudEVudmlyb25tZW50LAogICAgICAgICAgcnVuSW5TaGVsbDogcnVuSW5TaGVsbCkKICAgICAgLnRoZW4oKFByb2Nlc3MgcCkgewogICAgaW50IHBpZCA9IHAucGlkOwoKICAgIC8vIE1ha2Ugc3VyZSB0aGUgcHJvY2VzcyBzdGRpbiBpcyBjbG9zZWQuCiAgICBwLnN0ZGluLmNsb3NlKCk7CgogICAgLy8gU2V0dXAgc3Rkb3V0IGFuZCBzdGRlcnIgaGFuZGxpbmcuCiAgICBGdXR1cmUgZm9sZFN0cmVhbShTdHJlYW08TGlzdDxpbnQ+PiBzdHJlYW0sIEVuY29kaW5nIGVuY29kaW5nKSB7CiAgICAgIGlmIChlbmNvZGluZyA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIHN0cmVhbQogICAgICAgICAgICAuZm9sZChuZXcgQnl0ZXNCdWlsZGVyKCksIChidWlsZGVyLCBkYXRhKSA9PiBidWlsZGVyLi5hZGQoZGF0YSkpCiAgICAgICAgICAgIC50aGVuKChidWlsZGVyKSA9PiBidWlsZGVyLnRha2VCeXRlcygpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gc3RyZWFtLnRyYW5zZm9ybShlbmNvZGluZy5kZWNvZGVyKS5mb2xkKG5ldyBTdHJpbmdCdWZmZXIoKSwKICAgICAgICAgICAgKGJ1ZiwgZGF0YSkgewogICAgICAgICAgYnVmLndyaXRlKGRhdGEpOwogICAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgICB9KS50aGVuKChzYikgPT4gc2IudG9TdHJpbmcoKSk7CiAgICAgIH0KICAgIH0KCiAgICBGdXR1cmUgc3Rkb3V0ID0gZm9sZFN0cmVhbShwLnN0ZG91dCwgc3Rkb3V0RW5jb2RpbmcpOwogICAgRnV0dXJlIHN0ZGVyciA9IGZvbGRTdHJlYW0ocC5zdGRlcnIsIHN0ZGVyckVuY29kaW5nKTsKCiAgICByZXR1cm4gRnV0dXJlLndhaXQoW3AuZXhpdENvZGUsIHN0ZG91dCwgc3RkZXJyXSkudGhlbigocmVzdWx0KSB7CiAgICAgIHJldHVybiBuZXcgUHJvY2Vzc1Jlc3VsdChwaWQsIHJlc3VsdFswXSwgcmVzdWx0WzFdLCByZXN1bHRbMl0pOwogICAgfSk7CiAgfSk7Cn0KClByb2Nlc3NSZXN1bHQgX3J1bk5vbkludGVyYWN0aXZlUHJvY2Vzc1N5bmMoCiAgICBTdHJpbmcgZXhlY3V0YWJsZSwKICAgIExpc3Q8U3RyaW5nPiBhcmd1bWVudHMsCiAgICBTdHJpbmcgd29ya2luZ0RpcmVjdG9yeSwKICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQsCiAgICBib29sIGluY2x1ZGVQYXJlbnRFbnZpcm9ubWVudCwKICAgIGJvb2wgcnVuSW5TaGVsbCwKICAgIEVuY29kaW5nIHN0ZG91dEVuY29kaW5nLAogICAgRW5jb2Rpbmcgc3RkZXJyRW5jb2RpbmcpIHsKICB2YXIgcHJvY2VzcyA9IG5ldyBfUHJvY2Vzc0ltcGwoCiAgICAgIGV4ZWN1dGFibGUsCiAgICAgIGFyZ3VtZW50cywKICAgICAgd29ya2luZ0RpcmVjdG9yeSwKICAgICAgZW52aXJvbm1lbnQsCiAgICAgIGluY2x1ZGVQYXJlbnRFbnZpcm9ubWVudCwKICAgICAgcnVuSW5TaGVsbCwKICAgICAgUHJvY2Vzc1N0YXJ0TW9kZS5ub3JtYWwpOwogIHJldHVybiBwcm9jZXNzLl9ydW5BbmRXYWl0KHN0ZG91dEVuY29kaW5nLCBzdGRlcnJFbmNvZGluZyk7Cn0KgoQATk48ASABByAJTwIBByAJUQIBBxAJSiAnKx45LRQTGhUiFA8dBAEJTiAnKx4vMiYUExoVIhQYGQQBCUogJyseLzIqFBMaFSIUGBkEAQlRJEwGPgQCATsBGh4BLwsBI0EvBAE6ARM2FhJODgYORBwqIzEjCggIBAETFzESBgQBSi0rAgEiSgEHFgk3CUUJOgk5CTlGCUQqKisfMDM2ITwGKQQBTDxQBjwEAgEHFAkaHB0UBhMEAQkeIB0UBhMEATA4AgEaHCNDI0wCAU0ZRAFKJjABEBMeHiclFx0SJRlRNjcnBgEWNyEGARs+BgFLLjwZDRQGAR5GBiAoJB4cPggkID8IBgFFH0MGARczRB9JBicwIUkIJwgkMh8hRC0rCgoGASVIBhIBHyFGJUglSAYhLgYUFgQBKi8rMisyATcwMQQBNTA2BAElHhgGFgQBKjMmHiAmIyEIDSw6KiAjLiYIMgYbBAEzGyMiIkQeATgtKiMXNR8eIEQaEQpIMRsKGSAzCD4eAUEfIhglOhgTCBUeBgETBAEzHCMkJAQBHS4iKAZMIxMuIyERFh0YFzw9PUYTFjZKEAgBFzYBRy0kHiZCJSkvMzQzDAEeGzpFKDMOJQwBIz8nMBoMDAgBIAgdBAFQLCYhHw8UGxYnHB0dJBEUIkcGATQBQDoBIismBgEdAR4TEy4vBAEVHBMeHyAQGxwcIToBSTgBIRQEASEUBAEVEwQBSwE+JEwGFh4+BAErARAbHB0aQBMWFhgPERwCAUVGPwsxERwdJSMVHR8jKC4kPiIaFQEuFQEpRR4WTTUPSxobFigIBgE6OgFFRggGAgEtFxwdJSMVHR8iEhEYEyASID4CASBkYXJ0OmlvLXBhdGNoL3Byb2Nlc3NfcGF0Y2guZGFydDFvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvYmluL3NvY2tldF9wYXRjaC5kYXJ0wADzni8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb21tb25fcGF0Y2guZGFydCI7CgpAcGF0Y2gKY2xhc3MgUmF3U2VydmVyU29ja2V0IHsKICBAcGF0Y2gKICBzdGF0aWMgRnV0dXJlPFJhd1NlcnZlclNvY2tldD4gYmluZChhZGRyZXNzLCBpbnQgcG9ydCwKICAgICAge2ludCBiYWNrbG9nOiAwLCBib29sIHY2T25seTogZmFsc2UsIGJvb2wgc2hhcmVkOiBmYWxzZX0pIHsKICAgIHJldHVybiBfUmF3U2VydmVyU29ja2V0LmJpbmQoYWRkcmVzcywgcG9ydCwgYmFja2xvZywgdjZPbmx5LCBzaGFyZWQpOwogIH0KfQoKQHBhdGNoCmNsYXNzIFJhd1NvY2tldCB7CiAgQHBhdGNoCiAgc3RhdGljIEZ1dHVyZTxSYXdTb2NrZXQ+IGNvbm5lY3QoaG9zdCwgaW50IHBvcnQsCiAgICAgIHtzb3VyY2VBZGRyZXNzLCBEdXJhdGlvbiB0aW1lb3V0fSkgewogICAgcmV0dXJuIF9SYXdTb2NrZXQuY29ubmVjdChob3N0LCBwb3J0LCBzb3VyY2VBZGRyZXNzLCB0aW1lb3V0KTsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBGdXR1cmU8Q29ubmVjdGlvblRhc2s8UmF3U29ja2V0Pj4gc3RhcnRDb25uZWN0KGhvc3QsIGludCBwb3J0LAogICAgICB7c291cmNlQWRkcmVzc30pIHsKICAgIHJldHVybiBfUmF3U29ja2V0LnN0YXJ0Q29ubmVjdChob3N0LCBwb3J0LCBzb3VyY2VBZGRyZXNzKTsKICB9Cn0KCkBwYXRjaApjbGFzcyBSYXdTb2NrZXRPcHRpb24gewogIHN0YXRpYyBmaW5hbCBMaXN0PGludD4gX29wdGlvbnNDYWNoZSA9CiAgICAgIExpc3Q8aW50PihfUmF3U29ja2V0T3B0aW9ucy52YWx1ZXMubGVuZ3RoKTsKCiAgQHBhdGNoCiAgc3RhdGljIGludCBfZ2V0T3B0aW9uVmFsdWUoaW50IGtleSkgewogICAgaWYgKGtleSA+IF9SYXdTb2NrZXRPcHRpb25zLnZhbHVlcy5sZW5ndGgpIHsKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvci52YWx1ZShrZXksICdrZXknKTsKICAgIH0KICAgIF9vcHRpb25zQ2FjaGVba2V5XSA/Pz0gX2dldE5hdGl2ZU9wdGlvblZhbHVlKGtleSk7CiAgICByZXR1cm4gX29wdGlvbnNDYWNoZVtrZXldOwogIH0KCiAgc3RhdGljIGludCBfZ2V0TmF0aXZlT3B0aW9uVmFsdWUoaW50IGtleSkKICAgICAgbmF0aXZlICJSYXdTb2NrZXRPcHRpb25fR2V0T3B0aW9uVmFsdWUiOwp9CgpAcGF0Y2gKY2xhc3MgSW50ZXJuZXRBZGRyZXNzIHsKICBAcGF0Y2gKICBzdGF0aWMgSW50ZXJuZXRBZGRyZXNzIGdldCBMT09QQkFDS19JUF9WNCB7CiAgICByZXR1cm4gX0ludGVybmV0QWRkcmVzcy5sb29wYmFja0lQdjQ7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgSW50ZXJuZXRBZGRyZXNzIGdldCBMT09QQkFDS19JUF9WNiB7CiAgICByZXR1cm4gX0ludGVybmV0QWRkcmVzcy5sb29wYmFja0lQdjY7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgSW50ZXJuZXRBZGRyZXNzIGdldCBBTllfSVBfVjQgewogICAgcmV0dXJuIF9JbnRlcm5ldEFkZHJlc3MuYW55SVB2NDsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBJbnRlcm5ldEFkZHJlc3MgZ2V0IEFOWV9JUF9WNiB7CiAgICByZXR1cm4gX0ludGVybmV0QWRkcmVzcy5hbnlJUHY2OwogIH0KCiAgQHBhdGNoCiAgZmFjdG9yeSBJbnRlcm5ldEFkZHJlc3MoU3RyaW5nIGFkZHJlc3MpIHsKICAgIHJldHVybiBuZXcgX0ludGVybmV0QWRkcmVzcy5wYXJzZShhZGRyZXNzKTsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBGdXR1cmU8TGlzdDxJbnRlcm5ldEFkZHJlc3M+PiBsb29rdXAoU3RyaW5nIGhvc3QsCiAgICAgIHtJbnRlcm5ldEFkZHJlc3NUeXBlIHR5cGU6IEludGVybmV0QWRkcmVzc1R5cGUuYW55fSkgewogICAgcmV0dXJuIF9OYXRpdmVTb2NrZXQubG9va3VwKGhvc3QsIHR5cGU6IHR5cGUpOwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIEludGVybmV0QWRkcmVzcyBfY2xvbmVXaXRoTmV3SG9zdCgKICAgICAgSW50ZXJuZXRBZGRyZXNzIGFkZHJlc3MsIFN0cmluZyBob3N0KSB7CiAgICByZXR1cm4gKGFkZHJlc3MgYXMgX0ludGVybmV0QWRkcmVzcykuX2Nsb25lV2l0aE5ld0hvc3QoaG9zdCk7CiAgfQp9CgpAcGF0Y2gKY2xhc3MgTmV0d29ya0ludGVyZmFjZSB7CiAgQHBhdGNoCiAgc3RhdGljIGJvb2wgZ2V0IGxpc3RTdXBwb3J0ZWQgewogICAgcmV0dXJuIF9saXN0U3VwcG9ydGVkKCk7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgRnV0dXJlPExpc3Q8TmV0d29ya0ludGVyZmFjZT4+IGxpc3QoCiAgICAgIHtib29sIGluY2x1ZGVMb29wYmFjazogZmFsc2UsCiAgICAgIGJvb2wgaW5jbHVkZUxpbmtMb2NhbDogZmFsc2UsCiAgICAgIEludGVybmV0QWRkcmVzc1R5cGUgdHlwZTogSW50ZXJuZXRBZGRyZXNzVHlwZS5hbnl9KSB7CiAgICByZXR1cm4gX05hdGl2ZVNvY2tldC5saXN0SW50ZXJmYWNlcygKICAgICAgICBpbmNsdWRlTG9vcGJhY2s6IGluY2x1ZGVMb29wYmFjaywKICAgICAgICBpbmNsdWRlTGlua0xvY2FsOiBpbmNsdWRlTGlua0xvY2FsLAogICAgICAgIHR5cGU6IHR5cGUpOwogIH0KCiAgc3RhdGljIGJvb2wgX2xpc3RTdXBwb3J0ZWQoKSBuYXRpdmUgIk5ldHdvcmtJbnRlcmZhY2VfTGlzdFN1cHBvcnRlZCI7Cn0KCnZvaWQgX3Rocm93T25CYWRQb3J0KGludCBwb3J0KSB7CiAgaWYgKChwb3J0ID09IG51bGwpIHx8IChwb3J0IDwgMCkgfHwgKHBvcnQgPiAweEZGRkYpKSB7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiSW52YWxpZCBwb3J0ICRwb3J0Iik7CiAgfQp9Cgp2b2lkIF90aHJvd09uQmFkVHRsKGludCB0dGwpIHsKICBpZiAodHRsID09IG51bGwgfHwgdHRsIDwgMSB8fCB0dGwgPiAyNTUpIHsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCdJbnZhbGlkIHR0bCAkdHRsJyk7CiAgfQp9CgpjbGFzcyBfSW50ZXJuZXRBZGRyZXNzIGltcGxlbWVudHMgSW50ZXJuZXRBZGRyZXNzIHsKICBzdGF0aWMgY29uc3QgaW50IF9hZGRyZXNzTG9vcGJhY2tJUHY0ID0gMDsKICBzdGF0aWMgY29uc3QgaW50IF9hZGRyZXNzTG9vcGJhY2tJUHY2ID0gMTsKICBzdGF0aWMgY29uc3QgaW50IF9hZGRyZXNzQW55SVB2NCA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBfYWRkcmVzc0FueUlQdjYgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgX0lQdjRBZGRyTGVuZ3RoID0gNDsKICBzdGF0aWMgY29uc3QgaW50IF9JUHY2QWRkckxlbmd0aCA9IDE2OwoKICBzdGF0aWMgX0ludGVybmV0QWRkcmVzcyBsb29wYmFja0lQdjQgPQogICAgICBuZXcgX0ludGVybmV0QWRkcmVzcy5maXhlZChfYWRkcmVzc0xvb3BiYWNrSVB2NCk7CiAgc3RhdGljIF9JbnRlcm5ldEFkZHJlc3MgbG9vcGJhY2tJUHY2ID0KICAgICAgbmV3IF9JbnRlcm5ldEFkZHJlc3MuZml4ZWQoX2FkZHJlc3NMb29wYmFja0lQdjYpOwogIHN0YXRpYyBfSW50ZXJuZXRBZGRyZXNzIGFueUlQdjQgPSBuZXcgX0ludGVybmV0QWRkcmVzcy5maXhlZChfYWRkcmVzc0FueUlQdjQpOwogIHN0YXRpYyBfSW50ZXJuZXRBZGRyZXNzIGFueUlQdjYgPSBuZXcgX0ludGVybmV0QWRkcmVzcy5maXhlZChfYWRkcmVzc0FueUlQdjYpOwoKICBmaW5hbCBTdHJpbmcgYWRkcmVzczsKICBmaW5hbCBTdHJpbmcgX2hvc3Q7CiAgZmluYWwgVWludDhMaXN0IF9pbl9hZGRyOwoKICBJbnRlcm5ldEFkZHJlc3NUeXBlIGdldCB0eXBlID0+IF9pbl9hZGRyLmxlbmd0aCA9PSBfSVB2NEFkZHJMZW5ndGgKICAgICAgPyBJbnRlcm5ldEFkZHJlc3NUeXBlLklQdjQKICAgICAgOiBJbnRlcm5ldEFkZHJlc3NUeXBlLklQdjY7CgogIFN0cmluZyBnZXQgaG9zdCA9PiBfaG9zdCAhPSBudWxsID8gX2hvc3QgOiBhZGRyZXNzOwoKICBVaW50OExpc3QgZ2V0IHJhd0FkZHJlc3MgPT4gbmV3IFVpbnQ4TGlzdC5mcm9tTGlzdChfaW5fYWRkcik7CgogIGJvb2wgZ2V0IGlzTG9vcGJhY2sgewogICAgc3dpdGNoICh0eXBlKSB7CiAgICAgIGNhc2UgSW50ZXJuZXRBZGRyZXNzVHlwZS5JUHY0OgogICAgICAgIHJldHVybiBfaW5fYWRkclswXSA9PSAxMjc7CgogICAgICBjYXNlIEludGVybmV0QWRkcmVzc1R5cGUuSVB2NjoKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IF9JUHY2QWRkckxlbmd0aCAtIDE7IGkrKykgewogICAgICAgICAgaWYgKF9pbl9hZGRyW2ldICE9IDApIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9pbl9hZGRyW19JUHY2QWRkckxlbmd0aCAtIDFdID09IDE7CiAgICB9CiAgfQoKICBib29sIGdldCBpc0xpbmtMb2NhbCB7CiAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgY2FzZSBJbnRlcm5ldEFkZHJlc3NUeXBlLklQdjQ6CiAgICAgICAgLy8gQ2hlY2tpbmcgZm9yIDE2OS4yNTQuMC4wLzE2LgogICAgICAgIHJldHVybiBfaW5fYWRkclswXSA9PSAxNjkgJiYgX2luX2FkZHJbMV0gPT0gMjU0OwoKICAgICAgY2FzZSBJbnRlcm5ldEFkZHJlc3NUeXBlLklQdjY6CiAgICAgICAgLy8gQ2hlY2tpbmcgZm9yIGZlODA6Oi8xMC4KICAgICAgICByZXR1cm4gX2luX2FkZHJbMF0gPT0gMHhGRSAmJiAoX2luX2FkZHJbMV0gJiAweEIwKSA9PSAweDgwOwogICAgfQogIH0KCiAgYm9vbCBnZXQgaXNNdWx0aWNhc3QgewogICAgc3dpdGNoICh0eXBlKSB7CiAgICAgIGNhc2UgSW50ZXJuZXRBZGRyZXNzVHlwZS5JUHY0OgogICAgICAgIC8vIENoZWNraW5nIGZvciAyMjQuMC4wLjAgdGhyb3VnaCAyMzkuMjU1LjI1NS4yNTUuCiAgICAgICAgcmV0dXJuIF9pbl9hZGRyWzBdID49IDIyNCAmJiBfaW5fYWRkclswXSA8IDI0MDsKCiAgICAgIGNhc2UgSW50ZXJuZXRBZGRyZXNzVHlwZS5JUHY2OgogICAgICAgIC8vIENoZWNraW5nIGZvciBmZjAwOjovOC4KICAgICAgICByZXR1cm4gX2luX2FkZHJbMF0gPT0gMHhGRjsKICAgIH0KICB9CgogIEZ1dHVyZTxJbnRlcm5ldEFkZHJlc3M+IHJldmVyc2UoKSA9PiBfTmF0aXZlU29ja2V0LnJldmVyc2VMb29rdXAodGhpcyk7CgogIF9JbnRlcm5ldEFkZHJlc3ModGhpcy5hZGRyZXNzLCB0aGlzLl9ob3N0LCB0aGlzLl9pbl9hZGRyKTsKCiAgZmFjdG9yeSBfSW50ZXJuZXRBZGRyZXNzLnBhcnNlKFN0cmluZyBhZGRyZXNzKSB7CiAgICBpZiAoYWRkcmVzcyBpcyEgU3RyaW5nKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJJbnZhbGlkIGludGVybmV0IGFkZHJlc3MgJGFkZHJlc3MiKTsKICAgIH0KICAgIHZhciBpbl9hZGRyID0gX3BhcnNlKGFkZHJlc3MpOwogICAgaWYgKGluX2FkZHIgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiSW52YWxpZCBpbnRlcm5ldCBhZGRyZXNzICRhZGRyZXNzIik7CiAgICB9CiAgICByZXR1cm4gbmV3IF9JbnRlcm5ldEFkZHJlc3MoYWRkcmVzcywgbnVsbCwgaW5fYWRkcik7CiAgfQoKICBmYWN0b3J5IF9JbnRlcm5ldEFkZHJlc3MuZml4ZWQoaW50IGlkKSB7CiAgICBzd2l0Y2ggKGlkKSB7CiAgICAgIGNhc2UgX2FkZHJlc3NMb29wYmFja0lQdjQ6CiAgICAgICAgdmFyIGluX2FkZHIgPSBuZXcgVWludDhMaXN0KF9JUHY0QWRkckxlbmd0aCk7CiAgICAgICAgaW5fYWRkclswXSA9IDEyNzsKICAgICAgICBpbl9hZGRyW19JUHY0QWRkckxlbmd0aCAtIDFdID0gMTsKICAgICAgICByZXR1cm4gbmV3IF9JbnRlcm5ldEFkZHJlc3MoIjEyNy4wLjAuMSIsIG51bGwsIGluX2FkZHIpOwogICAgICBjYXNlIF9hZGRyZXNzTG9vcGJhY2tJUHY2OgogICAgICAgIHZhciBpbl9hZGRyID0gbmV3IFVpbnQ4TGlzdChfSVB2NkFkZHJMZW5ndGgpOwogICAgICAgIGluX2FkZHJbX0lQdjZBZGRyTGVuZ3RoIC0gMV0gPSAxOwogICAgICAgIHJldHVybiBuZXcgX0ludGVybmV0QWRkcmVzcygiOjoxIiwgbnVsbCwgaW5fYWRkcik7CiAgICAgIGNhc2UgX2FkZHJlc3NBbnlJUHY0OgogICAgICAgIHZhciBpbl9hZGRyID0gbmV3IFVpbnQ4TGlzdChfSVB2NEFkZHJMZW5ndGgpOwogICAgICAgIHJldHVybiBuZXcgX0ludGVybmV0QWRkcmVzcygiMC4wLjAuMCIsICIwLjAuMC4wIiwgaW5fYWRkcik7CiAgICAgIGNhc2UgX2FkZHJlc3NBbnlJUHY2OgogICAgICAgIHZhciBpbl9hZGRyID0gbmV3IFVpbnQ4TGlzdChfSVB2NkFkZHJMZW5ndGgpOwogICAgICAgIHJldHVybiBuZXcgX0ludGVybmV0QWRkcmVzcygiOjoiLCAiOjoiLCBpbl9hZGRyKTsKICAgICAgZGVmYXVsdDoKICAgICAgICBhc3NlcnQoZmFsc2UpOwogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCk7CiAgICB9CiAgfQoKICAvLyBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIF9JbnRlcm5ldEFkZHJlc3MgcmVwbGFjaW5nIHRoZSBob3N0LgogIF9JbnRlcm5ldEFkZHJlc3MgX2Nsb25lV2l0aE5ld0hvc3QoU3RyaW5nIGhvc3QpIHsKICAgIHJldHVybiBuZXcgX0ludGVybmV0QWRkcmVzcygKICAgICAgICBhZGRyZXNzLCBob3N0LCBuZXcgVWludDhMaXN0LmZyb21MaXN0KF9pbl9hZGRyKSk7CiAgfQoKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoIShvdGhlciBpcyBfSW50ZXJuZXRBZGRyZXNzKSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKG90aGVyLnR5cGUgIT0gdHlwZSkgcmV0dXJuIGZhbHNlOwogICAgYm9vbCBlcXVhbHMgPSB0cnVlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfaW5fYWRkci5sZW5ndGggJiYgZXF1YWxzOyBpKyspIHsKICAgICAgZXF1YWxzID0gb3RoZXIuX2luX2FkZHJbaV0gPT0gX2luX2FkZHJbaV07CiAgICB9CiAgICByZXR1cm4gZXF1YWxzOwogIH0KCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICBpbnQgcmVzdWx0ID0gMTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX2luX2FkZHIubGVuZ3RoOyBpKyspIHsKICAgICAgcmVzdWx0ID0gKHJlc3VsdCAqIDMxICsgX2luX2FkZHJbaV0pICYgMHgzRkZGRkZGRjsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gIkludGVybmV0QWRkcmVzcygnJGFkZHJlc3MnLCAke3R5cGUubmFtZX0pIjsKICB9CgogIHN0YXRpYyBVaW50OExpc3QgX3BhcnNlKFN0cmluZyBhZGRyZXNzKSBuYXRpdmUgIkludGVybmV0QWRkcmVzc19QYXJzZSI7Cn0KCmNsYXNzIF9OZXR3b3JrSW50ZXJmYWNlIGltcGxlbWVudHMgTmV0d29ya0ludGVyZmFjZSB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgZmluYWwgaW50IGluZGV4OwogIGZpbmFsIExpc3Q8SW50ZXJuZXRBZGRyZXNzPiBhZGRyZXNzZXMgPSBbXTsKCiAgX05ldHdvcmtJbnRlcmZhY2UodGhpcy5uYW1lLCB0aGlzLmluZGV4KTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICJOZXR3b3JrSW50ZXJmYWNlKCckbmFtZScsICRhZGRyZXNzZXMpIjsKICB9Cn0KCi8vIFRoZSBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczEgY2Fubm90IGJlIHVzZWQgd2l0aCBhIG1peGluLCBkdWUgdG8gbWlzc2luZwovLyBpbXBsaWNpdCBjb25zdHJ1Y3Rvci4KY2xhc3MgX05hdGl2ZVNvY2tldE5hdGl2ZVdyYXBwZXIgZXh0ZW5kcyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczEge30KCi8vIFRoZSBfTmF0aXZlU29ja2V0IGNsYXNzIGVuY2Fwc3VsYXRlcyBhbiBPUyBzb2NrZXQuCmNsYXNzIF9OYXRpdmVTb2NrZXQgZXh0ZW5kcyBfTmF0aXZlU29ja2V0TmF0aXZlV3JhcHBlciB3aXRoIF9TZXJ2aWNlT2JqZWN0IHsKICAvLyBCaXQgZmxhZ3MgdXNlZCB3aGVuIGNvbW11bmljYXRpbmcgYmV0d2VlbiB0aGUgZXZlbnRoYW5kbGVyIGFuZAogIC8vIGRhcnQgY29kZS4gVGhlIEVWRU5UIGZsYWdzIGFyZSB1c2VkIHRvIGluZGljYXRlIGV2ZW50cyBvZgogIC8vIGludGVyZXN0IHdoZW4gc2VuZGluZyBhIG1lc3NhZ2UgZnJvbSBkYXJ0IGNvZGUgdG8gdGhlCiAgLy8gZXZlbnRoYW5kbGVyLiBXaGVuIHJlY2VpdmluZyBhIG1lc3NhZ2UgZnJvbSB0aGUgZXZlbnRoYW5kbGVyIHRoZQogIC8vIEVWRU5UIGZsYWdzIGluZGljYXRlIHRoZSBldmVudHMgdGhhdCBhY3R1YWxseSBoYXBwZW5lZC4gVGhlCiAgLy8gQ09NTUFORCBmbGFncyBhcmUgdXNlZCB0byBzZW5kIGNvbW1hbmRzIGZyb20gZGFydCB0byB0aGUKICAvLyBldmVudGhhbmRsZXIuIENPTU1BTkQgZmxhZ3MgYXJlIG5ldmVyIHJlY2VpdmVkIGZyb20gdGhlCiAgLy8gZXZlbnRoYW5kbGVyLiBBZGRpdGlvbmFsIGZsYWdzIGFyZSB1c2VkIHRvIGNvbW11bmljYXRlIG90aGVyCiAgLy8gaW5mb3JtYXRpb24uCiAgc3RhdGljIGNvbnN0IGludCByZWFkRXZlbnQgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgd3JpdGVFdmVudCA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBlcnJvckV2ZW50ID0gMjsKICBzdGF0aWMgY29uc3QgaW50IGNsb3NlZEV2ZW50ID0gMzsKICBzdGF0aWMgY29uc3QgaW50IGRlc3Ryb3llZEV2ZW50ID0gNDsKICBzdGF0aWMgY29uc3QgaW50IGZpcnN0RXZlbnQgPSByZWFkRXZlbnQ7CiAgc3RhdGljIGNvbnN0IGludCBsYXN0RXZlbnQgPSBkZXN0cm95ZWRFdmVudDsKICBzdGF0aWMgY29uc3QgaW50IGV2ZW50Q291bnQgPSBsYXN0RXZlbnQgLSBmaXJzdEV2ZW50ICsgMTsKCiAgc3RhdGljIGNvbnN0IGludCBjbG9zZUNvbW1hbmQgPSA4OwogIHN0YXRpYyBjb25zdCBpbnQgc2h1dGRvd25SZWFkQ29tbWFuZCA9IDk7CiAgc3RhdGljIGNvbnN0IGludCBzaHV0ZG93bldyaXRlQ29tbWFuZCA9IDEwOwogIC8vIFRoZSBsb3dlciBiaXRzIG9mIHJldHVyblRva2VuQ29tbWFuZCBtZXNzYWdlcyBjb250YWlucyB0aGUgbnVtYmVyCiAgLy8gb2YgdG9rZW5zIHJldHVybmVkLgogIHN0YXRpYyBjb25zdCBpbnQgcmV0dXJuVG9rZW5Db21tYW5kID0gMTE7CiAgc3RhdGljIGNvbnN0IGludCBzZXRFdmVudE1hc2tDb21tYW5kID0gMTI7CiAgc3RhdGljIGNvbnN0IGludCBmaXJzdENvbW1hbmQgPSBjbG9zZUNvbW1hbmQ7CiAgc3RhdGljIGNvbnN0IGludCBsYXN0Q29tbWFuZCA9IHNldEV2ZW50TWFza0NvbW1hbmQ7CgogIC8vIFR5cGUgZmxhZyBzZW5kIHRvIHRoZSBldmVudGhhbmRsZXIgcHJvdmlkaW5nIGFkZGl0aW9uYWwKICAvLyBpbmZvcm1hdGlvbiBvbiB0aGUgdHlwZSBvZiB0aGUgZmlsZSBkZXNjcmlwdG9yLgogIHN0YXRpYyBjb25zdCBpbnQgbGlzdGVuaW5nU29ja2V0ID0gMTY7CiAgc3RhdGljIGNvbnN0IGludCBwaXBlU29ja2V0ID0gMTc7CiAgc3RhdGljIGNvbnN0IGludCB0eXBlTm9ybWFsU29ja2V0ID0gMDsKICBzdGF0aWMgY29uc3QgaW50IHR5cGVMaXN0ZW5pbmdTb2NrZXQgPSAxIDw8IGxpc3RlbmluZ1NvY2tldDsKICBzdGF0aWMgY29uc3QgaW50IHR5cGVQaXBlID0gMSA8PCBwaXBlU29ja2V0OwogIHN0YXRpYyBjb25zdCBpbnQgdHlwZVR5cGVNYXNrID0gdHlwZUxpc3RlbmluZ1NvY2tldCB8IHBpcGVTb2NrZXQ7CgogIC8vIFByb3RvY29sIGZsYWdzLgogIC8vIEtlZXAgaW4gc3luYyB3aXRoIFNvY2tldFR5cGUgZW51bSBpbiBzb2NrZXQuaC4KICBzdGF0aWMgY29uc3QgaW50IHRjcFNvY2tldCA9IDE4OwogIHN0YXRpYyBjb25zdCBpbnQgdWRwU29ja2V0ID0gMTk7CiAgc3RhdGljIGNvbnN0IGludCBpbnRlcm5hbFNvY2tldCA9IDIwOwogIHN0YXRpYyBjb25zdCBpbnQgaW50ZXJuYWxTaWduYWxTb2NrZXQgPSAyMTsKICBzdGF0aWMgY29uc3QgaW50IHR5cGVUY3BTb2NrZXQgPSAxIDw8IHRjcFNvY2tldDsKICBzdGF0aWMgY29uc3QgaW50IHR5cGVVZHBTb2NrZXQgPSAxIDw8IHVkcFNvY2tldDsKICBzdGF0aWMgY29uc3QgaW50IHR5cGVJbnRlcm5hbFNvY2tldCA9IDEgPDwgaW50ZXJuYWxTb2NrZXQ7CiAgc3RhdGljIGNvbnN0IGludCB0eXBlSW50ZXJuYWxTaWduYWxTb2NrZXQgPSAxIDw8IGludGVybmFsU2lnbmFsU29ja2V0OwogIHN0YXRpYyBjb25zdCBpbnQgdHlwZVByb3RvY29sTWFzayA9IHR5cGVUY3BTb2NrZXQgfAogICAgICB0eXBlVWRwU29ja2V0IHwKICAgICAgdHlwZUludGVybmFsU29ja2V0IHwKICAgICAgdHlwZUludGVybmFsU2lnbmFsU29ja2V0OwoKICAvLyBOYXRpdmUgcG9ydCBtZXNzYWdlcy4KICBzdGF0aWMgY29uc3QgaG9zdE5hbWVMb29rdXBNZXNzYWdlID0gMDsKICBzdGF0aWMgY29uc3QgbGlzdEludGVyZmFjZXNNZXNzYWdlID0gMTsKICBzdGF0aWMgY29uc3QgcmV2ZXJzZUxvb2t1cE1lc3NhZ2UgPSAyOwoKICAvLyBQcm90b2NvbCBmbGFncy4KICBzdGF0aWMgY29uc3QgaW50IHByb3RvY29sSVB2NCA9IDEgPDwgMDsKICBzdGF0aWMgY29uc3QgaW50IHByb3RvY29sSVB2NiA9IDEgPDwgMTsKCiAgc3RhdGljIGNvbnN0IGludCBub3JtYWxUb2tlbkJhdGNoU2l6ZSA9IDg7CiAgc3RhdGljIGNvbnN0IGludCBsaXN0ZW5pbmdUb2tlbkJhdGNoU2l6ZSA9IDI7CgogIHN0YXRpYyBjb25zdCBEdXJhdGlvbiBfcmV0cnlEdXJhdGlvbiA9IGNvbnN0IER1cmF0aW9uKG1pbGxpc2Vjb25kczogMjUwKTsKICBzdGF0aWMgY29uc3QgRHVyYXRpb24gX3JldHJ5RHVyYXRpb25Mb29wYmFjayA9CiAgICAgIGNvbnN0IER1cmF0aW9uKG1pbGxpc2Vjb25kczogMjUpOwoKICAvLyBTb2NrZXQgY2xvc2Ugc3RhdGUKICBib29sIGlzQ2xvc2VkID0gZmFsc2U7CiAgYm9vbCBpc0Nsb3NpbmcgPSBmYWxzZTsKICBib29sIGlzQ2xvc2VkUmVhZCA9IGZhbHNlOwogIGJvb2wgY2xvc2VkUmVhZEV2ZW50U2VudCA9IGZhbHNlOwogIGJvb2wgaXNDbG9zZWRXcml0ZSA9IGZhbHNlOwogIENvbXBsZXRlciBjbG9zZUNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXIuc3luYygpOwoKICAvLyBIYW5kbGVycyBhbmQgcmVjZWl2ZSBwb3J0IGZvciBzb2NrZXQgZXZlbnRzIGZyb20gdGhlIGV2ZW50IGhhbmRsZXIuCiAgZmluYWwgTGlzdCBldmVudEhhbmRsZXJzID0gbmV3IExpc3QoZXZlbnRDb3VudCArIDEpOwogIFJhd1JlY2VpdmVQb3J0IGV2ZW50UG9ydDsKICBib29sIGZsYWdzU2VudCA9IGZhbHNlOwoKICAvLyBUaGUgdHlwZSBmbGFncyBmb3IgdGhpcyBzb2NrZXQuCiAgZmluYWwgaW50IHR5cGVGbGFnczsKCiAgLy8gSG9sZHMgdGhlIHBvcnQgb2YgdGhlIHNvY2tldCwgMCBpZiBub3Qga25vd24uCiAgaW50IGxvY2FsUG9ydCA9IDA7CgogIC8vIEhvbGRzIHRoZSBhZGRyZXNzIHVzZWQgdG8gY29ubmVjdCBvciBiaW5kIHRoZSBzb2NrZXQuCiAgSW50ZXJuZXRBZGRyZXNzIGxvY2FsQWRkcmVzczsKCiAgaW50IGF2YWlsYWJsZSA9IDA7CgogIGludCB0b2tlbnMgPSAwOwoKICBib29sIHNlbmRSZWFkRXZlbnRzID0gZmFsc2U7CiAgYm9vbCByZWFkRXZlbnRJc3N1ZWQgPSBmYWxzZTsKCiAgYm9vbCBzZW5kV3JpdGVFdmVudHMgPSBmYWxzZTsKICBib29sIHdyaXRlRXZlbnRJc3N1ZWQgPSBmYWxzZTsKICBib29sIHdyaXRlQXZhaWxhYmxlID0gZmFsc2U7CgogIHN0YXRpYyBib29sIGNvbm5lY3RlZFJlc291cmNlSGFuZGxlciA9IGZhbHNlOwogIF9SZWFkV3JpdGVSZXNvdXJjZUluZm8gcmVzb3VyY2VJbmZvOwoKICAvLyBUaGUgb3duZXIgb2JqZWN0IGlzIHRoZSBvYmplY3QgdGhhdCB0aGUgU29ja2V0IGlzIGJlaW5nIHVzZWQgYnksIGUuZy4KICAvLyBhIEh0dHBTZXJ2ZXIsIGEgV2ViU29ja2V0IGNvbm5lY3Rpb24sIGEgcHJvY2VzcyBwaXBlLCBldGMuCiAgT2JqZWN0IG93bmVyOwoKICBzdGF0aWMgRnV0dXJlPExpc3Q8SW50ZXJuZXRBZGRyZXNzPj4gbG9va3VwKFN0cmluZyBob3N0LAogICAgICB7SW50ZXJuZXRBZGRyZXNzVHlwZSB0eXBlOiBJbnRlcm5ldEFkZHJlc3NUeXBlLmFueX0pIHsKICAgIHJldHVybiBfSU9TZXJ2aWNlLl9kaXNwYXRjaChfSU9TZXJ2aWNlLnNvY2tldExvb2t1cCwgW2hvc3QsIHR5cGUuX3ZhbHVlXSkKICAgICAgICAudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKGlzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBjcmVhdGVFcnJvcihyZXNwb25zZSwgIkZhaWxlZCBob3N0IGxvb2t1cDogJyRob3N0JyIpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiByZXNwb25zZS5za2lwKDEpLm1hcDxJbnRlcm5ldEFkZHJlc3M+KChyZXN1bHQpIHsKICAgICAgICAgIHZhciB0eXBlID0gbmV3IEludGVybmV0QWRkcmVzc1R5cGUuX2Zyb20ocmVzdWx0WzBdKTsKICAgICAgICAgIHJldHVybiBuZXcgX0ludGVybmV0QWRkcmVzcyhyZXN1bHRbMV0sIGhvc3QsIHJlc3VsdFsyXSk7CiAgICAgICAgfSkudG9MaXN0KCk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgc3RhdGljIEZ1dHVyZTxJbnRlcm5ldEFkZHJlc3M+IHJldmVyc2VMb29rdXAoSW50ZXJuZXRBZGRyZXNzIGFkZHIpIHsKICAgIHJldHVybiBfSU9TZXJ2aWNlLl9kaXNwYXRjaChfSU9TZXJ2aWNlLnNvY2tldFJldmVyc2VMb29rdXAsCiAgICAgICAgWyhhZGRyIGFzIF9JbnRlcm5ldEFkZHJlc3MpLl9pbl9hZGRyXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKGlzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBjcmVhdGVFcnJvcihyZXNwb25zZSwgIkZhaWxlZCByZXZlcnNlIGhvc3QgbG9va3VwIiwgYWRkcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIChhZGRyIGFzIF9JbnRlcm5ldEFkZHJlc3MpLl9jbG9uZVdpdGhOZXdIb3N0KHJlc3BvbnNlKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBzdGF0aWMgRnV0dXJlPExpc3Q8TmV0d29ya0ludGVyZmFjZT4+IGxpc3RJbnRlcmZhY2VzKAogICAgICB7Ym9vbCBpbmNsdWRlTG9vcGJhY2s6IGZhbHNlLAogICAgICBib29sIGluY2x1ZGVMaW5rTG9jYWw6IGZhbHNlLAogICAgICBJbnRlcm5ldEFkZHJlc3NUeXBlIHR5cGU6IEludGVybmV0QWRkcmVzc1R5cGUuYW55fSkgewogICAgcmV0dXJuIF9JT1NlcnZpY2UuX2Rpc3BhdGNoKF9JT1NlcnZpY2Uuc29ja2V0TGlzdEludGVyZmFjZXMsIFt0eXBlLl92YWx1ZV0pCiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChpc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgY3JlYXRlRXJyb3IocmVzcG9uc2UsICJGYWlsZWQgbGlzdGluZyBpbnRlcmZhY2VzIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIG1hcCA9IHJlc3BvbnNlLnNraXAoMSkuZm9sZChuZXcgTWFwPFN0cmluZywgTmV0d29ya0ludGVyZmFjZT4oKSwKICAgICAgICAgICAgKG1hcCwgcmVzdWx0KSB7CiAgICAgICAgICB2YXIgdHlwZSA9IG5ldyBJbnRlcm5ldEFkZHJlc3NUeXBlLl9mcm9tKHJlc3VsdFswXSk7CiAgICAgICAgICB2YXIgbmFtZSA9IHJlc3VsdFszXTsKICAgICAgICAgIHZhciBpbmRleCA9IHJlc3VsdFs0XTsKICAgICAgICAgIHZhciBhZGRyZXNzID0gbmV3IF9JbnRlcm5ldEFkZHJlc3MocmVzdWx0WzFdLCAiIiwgcmVzdWx0WzJdKTsKICAgICAgICAgIGlmICghaW5jbHVkZUxpbmtMb2NhbCAmJiBhZGRyZXNzLmlzTGlua0xvY2FsKSByZXR1cm4gbWFwOwogICAgICAgICAgaWYgKCFpbmNsdWRlTG9vcGJhY2sgJiYgYWRkcmVzcy5pc0xvb3BiYWNrKSByZXR1cm4gbWFwOwogICAgICAgICAgbWFwLnB1dElmQWJzZW50KG5hbWUsICgpID0+IG5ldyBfTmV0d29ya0ludGVyZmFjZShuYW1lLCBpbmRleCkpOwogICAgICAgICAgbWFwW25hbWVdLmFkZHJlc3Nlcy5hZGQoYWRkcmVzcyk7CiAgICAgICAgICByZXR1cm4gbWFwOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBtYXAudmFsdWVzLnRvTGlzdCgpOwogICAgICB9CiAgICB9KTsKICB9CgogIHN0YXRpYyBGdXR1cmU8Q29ubmVjdGlvblRhc2s8X05hdGl2ZVNvY2tldD4+IHN0YXJ0Q29ubmVjdCgKICAgICAgaG9zdCwgaW50IHBvcnQsIHNvdXJjZUFkZHJlc3MpIHsKICAgIF90aHJvd09uQmFkUG9ydChwb3J0KTsKICAgIGlmIChzb3VyY2VBZGRyZXNzICE9IG51bGwgJiYgc291cmNlQWRkcmVzcyBpcyEgX0ludGVybmV0QWRkcmVzcykgewogICAgICBpZiAoc291cmNlQWRkcmVzcyBpcyBTdHJpbmcpIHsKICAgICAgICBzb3VyY2VBZGRyZXNzID0gbmV3IEludGVybmV0QWRkcmVzcyhzb3VyY2VBZGRyZXNzKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUoaG9zdCkudGhlbigoaG9zdCkgewogICAgICBpZiAoaG9zdCBpcyBfSW50ZXJuZXRBZGRyZXNzKSByZXR1cm4gW2hvc3RdOwogICAgICByZXR1cm4gbG9va3VwKGhvc3QpLnRoZW4oKGFkZHJlc3NlcykgewogICAgICAgIGlmIChhZGRyZXNzZXMuaXNFbXB0eSkgewogICAgICAgICAgdGhyb3cgY3JlYXRlRXJyb3IobnVsbCwgIkZhaWxlZCBob3N0IGxvb2t1cDogJyRob3N0JyIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWRkcmVzc2VzOwogICAgICB9KTsKICAgIH0pLnRoZW4oKGFkZHJlc3NlcykgewogICAgICB2YXIgY29tcGxldGVyID0gbmV3IENvbXBsZXRlcjxfTmF0aXZlU29ja2V0PigpOwogICAgICB2YXIgaXQgPSAoYWRkcmVzc2VzIGFzIExpc3Q8SW50ZXJuZXRBZGRyZXNzPikuaXRlcmF0b3I7CiAgICAgIHZhciBlcnJvciA9IG51bGw7CiAgICAgIHZhciBjb25uZWN0aW5nID0gbmV3IEhhc2hNYXAoKTsKCiAgICAgIHZvaWQgY29ubmVjdE5leHQoKSB7CiAgICAgICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSB7CiAgICAgICAgICBpZiAoY29ubmVjdGluZy5pc0VtcHR5KSB7CiAgICAgICAgICAgIGFzc2VydChlcnJvciAhPSBudWxsKTsKICAgICAgICAgICAgY29tcGxldGVyLmNvbXBsZXRlRXJyb3IoZXJyb3IpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBmaW5hbCBfSW50ZXJuZXRBZGRyZXNzIGFkZHJlc3MgPSBpdC5jdXJyZW50OwogICAgICAgIHZhciBzb2NrZXQgPSBuZXcgX05hdGl2ZVNvY2tldC5ub3JtYWwoKTsKICAgICAgICBzb2NrZXQubG9jYWxBZGRyZXNzID0gYWRkcmVzczsKICAgICAgICB2YXIgcmVzdWx0OwogICAgICAgIGlmIChzb3VyY2VBZGRyZXNzID09IG51bGwpIHsKICAgICAgICAgIHJlc3VsdCA9IHNvY2tldC5uYXRpdmVDcmVhdGVDb25uZWN0KGFkZHJlc3MuX2luX2FkZHIsIHBvcnQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhc3NlcnQoc291cmNlQWRkcmVzcyBpcyBfSW50ZXJuZXRBZGRyZXNzKTsKICAgICAgICAgIHJlc3VsdCA9IHNvY2tldC5uYXRpdmVDcmVhdGVCaW5kQ29ubmVjdCgKICAgICAgICAgICAgICBhZGRyZXNzLl9pbl9hZGRyLCBwb3J0LCBzb3VyY2VBZGRyZXNzLl9pbl9hZGRyKTsKICAgICAgICB9CiAgICAgICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgICAgICAvLyBLZWVwIGZpcnN0IGVycm9yLCBpZiBwcmVzZW50LgogICAgICAgICAgaWYgKGVycm9yID09IG51bGwpIHsKICAgICAgICAgICAgaW50IGVycm9yQ29kZSA9IHJlc3VsdC5lcnJvckNvZGU7CiAgICAgICAgICAgIGlmIChzb3VyY2VBZGRyZXNzICE9IG51bGwgJiYKICAgICAgICAgICAgICAgIGVycm9yQ29kZSAhPSBudWxsICYmCiAgICAgICAgICAgICAgICBzb2NrZXQuaXNCaW5kRXJyb3IoZXJyb3JDb2RlKSkgewogICAgICAgICAgICAgIGVycm9yID0gY3JlYXRlRXJyb3IocmVzdWx0LCAiQmluZCBmYWlsZWQiLCBzb3VyY2VBZGRyZXNzKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBlcnJvciA9IGNyZWF0ZUVycm9yKHJlc3VsdCwgIkNvbm5lY3Rpb24gZmFpbGVkIiwgYWRkcmVzcywgcG9ydCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGNvbm5lY3ROZXh0KCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIFF1ZXJ5IHRoZSBsb2NhbCBwb3J0IGZvciBlcnJvciBtZXNzYWdlcy4KICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHNvY2tldC5wb3J0OwogICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICBpZiAoZXJyb3IgPT0gbnVsbCkgewogICAgICAgICAgICAgIGVycm9yID0gY3JlYXRlRXJyb3IoZSwgIkNvbm5lY3Rpb24gZmFpbGVkIiwgYWRkcmVzcywgcG9ydCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29ubmVjdE5leHQoKTsKICAgICAgICAgIH0KICAgICAgICAgIC8vIFNldCB1cCB0aW1lciBmb3Igd2hlbiB3ZSBzaG91bGQgcmV0cnkgdGhlIG5leHQgYWRkcmVzcwogICAgICAgICAgLy8gKGlmIGFueSkuCiAgICAgICAgICB2YXIgZHVyYXRpb24gPQogICAgICAgICAgICAgIGFkZHJlc3MuaXNMb29wYmFjayA/IF9yZXRyeUR1cmF0aW9uTG9vcGJhY2sgOiBfcmV0cnlEdXJhdGlvbjsKICAgICAgICAgIHZhciB0aW1lciA9IG5ldyBUaW1lcihkdXJhdGlvbiwgY29ubmVjdE5leHQpOwogICAgICAgICAgc2V0dXBSZXNvdXJjZUluZm8oc29ja2V0KTsKCiAgICAgICAgICBjb25uZWN0aW5nW3NvY2tldF0gPSB0aW1lcjsKICAgICAgICAgIC8vIFNldHVwIGhhbmRsZXJzIGZvciByZWNlaXZpbmcgdGhlIGZpcnN0IHdyaXRlIGV2ZW50IHdoaWNoCiAgICAgICAgICAvLyBpbmRpY2F0ZSB0aGF0IHRoZSBzb2NrZXQgaXMgZnVsbHkgY29ubmVjdGVkLgogICAgICAgICAgc29ja2V0LnNldEhhbmRsZXJzKHdyaXRlOiAoKSB7CiAgICAgICAgICAgIHRpbWVyLmNhbmNlbCgpOwogICAgICAgICAgICBjb25uZWN0aW5nLnJlbW92ZShzb2NrZXQpOwogICAgICAgICAgICAvLyBGcm9tICdtYW4gMiBjb25uZWN0JzoKICAgICAgICAgICAgLy8gQWZ0ZXIgc2VsZWN0KDIpIGluZGljYXRlcyB3cml0YWJpbGl0eSwgdXNlIGdldHNvY2tvcHQoMikgdG8gcmVhZAogICAgICAgICAgICAvLyB0aGUgU09fRVJST1Igb3B0aW9uIGF0IGxldmVsIFNPTF9TT0NLRVQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIKICAgICAgICAgICAgLy8gY29ubmVjdCgpIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgKFNPX0VSUk9SIGlzIHplcm8pIG9yCiAgICAgICAgICAgIC8vIHVuc3VjY2Vzc2Z1bGx5LgogICAgICAgICAgICBPU0Vycm9yIG9zRXJyb3IgPSBzb2NrZXQubmF0aXZlR2V0RXJyb3IoKTsKICAgICAgICAgICAgaWYgKG9zRXJyb3IuZXJyb3JDb2RlICE9IDApIHsKICAgICAgICAgICAgICBzb2NrZXQuY2xvc2UoKTsKICAgICAgICAgICAgICBpZiAoZXJyb3IgPT0gbnVsbCkgZXJyb3IgPSBvc0Vycm9yOwogICAgICAgICAgICAgIGlmIChjb25uZWN0aW5nLmlzRW1wdHkpIGNvbm5lY3ROZXh0KCk7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHNvY2tldC5zZXRMaXN0ZW5pbmcocmVhZDogZmFsc2UsIHdyaXRlOiBmYWxzZSk7CiAgICAgICAgICAgIGNvbXBsZXRlci5jb21wbGV0ZShzb2NrZXQpOwogICAgICAgICAgICBjb25uZWN0aW5nLmZvckVhY2goKHMsIHQpIHsKICAgICAgICAgICAgICB0LmNhbmNlbCgpOwogICAgICAgICAgICAgIHMuY2xvc2UoKTsKICAgICAgICAgICAgICBzLnNldEhhbmRsZXJzKCk7CiAgICAgICAgICAgICAgcy5zZXRMaXN0ZW5pbmcocmVhZDogZmFsc2UsIHdyaXRlOiBmYWxzZSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb25uZWN0aW5nLmNsZWFyKCk7CiAgICAgICAgICB9LCBlcnJvcjogKGUsIHN0KSB7CiAgICAgICAgICAgIHRpbWVyLmNhbmNlbCgpOwogICAgICAgICAgICBzb2NrZXQuY2xvc2UoKTsKICAgICAgICAgICAgLy8gS2VlcCBmaXJzdCBlcnJvciwgaWYgcHJlc2VudC4KICAgICAgICAgICAgaWYgKGVycm9yID09IG51bGwpIGVycm9yID0gZTsKICAgICAgICAgICAgY29ubmVjdGluZy5yZW1vdmUoc29ja2V0KTsKICAgICAgICAgICAgaWYgKGNvbm5lY3RpbmcuaXNFbXB0eSkgY29ubmVjdE5leHQoKTsKICAgICAgICAgIH0pOwogICAgICAgICAgc29ja2V0LnNldExpc3RlbmluZyhyZWFkOiBmYWxzZSwgd3JpdGU6IHRydWUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgdm9pZCBvbkNhbmNlbCgpIHsKICAgICAgICBjb25uZWN0aW5nLmZvckVhY2goKHMsIHQpIHsKICAgICAgICAgIHQuY2FuY2VsKCk7CiAgICAgICAgICBzLmNsb3NlKCk7CiAgICAgICAgICBzLnNldEhhbmRsZXJzKCk7CiAgICAgICAgICBzLnNldExpc3RlbmluZyhyZWFkOiBmYWxzZSwgd3JpdGU6IGZhbHNlKTsKICAgICAgICAgIGlmIChlcnJvciA9PSBudWxsKSB7CiAgICAgICAgICAgIGVycm9yID0gY3JlYXRlRXJyb3IobnVsbCwKICAgICAgICAgICAgICAgICJDb25uZWN0aW9uIGF0dGVtcHQgY2FuY2VsbGVkLCBob3N0OiAke2hvc3R9LCBwb3J0OiAke3BvcnR9Iik7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgY29ubmVjdGluZy5jbGVhcigpOwogICAgICAgIGlmICghY29tcGxldGVyLmlzQ29tcGxldGVkKSB7CiAgICAgICAgICBjb21wbGV0ZXIuY29tcGxldGVFcnJvcihlcnJvcik7CiAgICAgICAgfQogICAgICB9CgogICAgICBjb25uZWN0TmV4dCgpOwogICAgICByZXR1cm4gbmV3IENvbm5lY3Rpb25UYXNrPF9OYXRpdmVTb2NrZXQ+Ll8oCiAgICAgICAgICBzb2NrZXQ6IGNvbXBsZXRlci5mdXR1cmUsIG9uQ2FuY2VsOiBvbkNhbmNlbCk7CiAgICB9KTsKICB9CgogIHN0YXRpYyBGdXR1cmU8X05hdGl2ZVNvY2tldD4gY29ubmVjdCgKICAgICAgaG9zdCwgaW50IHBvcnQsIHNvdXJjZUFkZHJlc3MsIER1cmF0aW9uIHRpbWVvdXQpIHsKICAgIHJldHVybiBzdGFydENvbm5lY3QoaG9zdCwgcG9ydCwgc291cmNlQWRkcmVzcykKICAgICAgICAudGhlbigoQ29ubmVjdGlvblRhc2s8X05hdGl2ZVNvY2tldD4gdGFzaykgewogICAgICBGdXR1cmU8X05hdGl2ZVNvY2tldD4gc29ja2V0RnV0dXJlID0gdGFzay5zb2NrZXQ7CiAgICAgIGlmICh0aW1lb3V0ICE9IG51bGwpIHsKICAgICAgICBzb2NrZXRGdXR1cmUgPSBzb2NrZXRGdXR1cmUudGltZW91dCh0aW1lb3V0LCBvblRpbWVvdXQ6ICgpIHsKICAgICAgICAgIHRhc2suY2FuY2VsKCk7CiAgICAgICAgICB0aHJvdyBjcmVhdGVFcnJvcigKICAgICAgICAgICAgICBudWxsLCAiQ29ubmVjdGlvbiB0aW1lZCBvdXQsIGhvc3Q6ICR7aG9zdH0sIHBvcnQ6ICR7cG9ydH0iKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gc29ja2V0RnV0dXJlOwogICAgfSk7CiAgfQoKICBzdGF0aWMgRnV0dXJlPF9JbnRlcm5ldEFkZHJlc3M+IF9yZXNvbHZlSG9zdChob3N0KSBhc3luYyB7CiAgICBpZiAoaG9zdCBpcyBfSW50ZXJuZXRBZGRyZXNzKSB7CiAgICAgIHJldHVybiBob3N0OwogICAgfSBlbHNlIHsKICAgICAgZmluYWwgbGlzdCA9IGF3YWl0IGxvb2t1cChob3N0KTsKICAgICAgaWYgKGxpc3QuaXNFbXB0eSkgewogICAgICAgIHRocm93IGNyZWF0ZUVycm9yKG51bGwsICJGYWlsZWQgaG9zdCBsb29rdXA6ICckaG9zdCciKTsKICAgICAgfQogICAgICByZXR1cm4gbGlzdC5maXJzdCBhcyBfSW50ZXJuZXRBZGRyZXNzOwogICAgfQogIH0KCiAgc3RhdGljIEZ1dHVyZTxfTmF0aXZlU29ja2V0PiBiaW5kKAogICAgICBob3N0LCBpbnQgcG9ydCwgaW50IGJhY2tsb2csIGJvb2wgdjZPbmx5LCBib29sIHNoYXJlZCkgYXN5bmMgewogICAgX3Rocm93T25CYWRQb3J0KHBvcnQpOwoKICAgIGZpbmFsIGFkZHJlc3MgPSBhd2FpdCBfcmVzb2x2ZUhvc3QoaG9zdCk7CgogICAgdmFyIHNvY2tldCA9IG5ldyBfTmF0aXZlU29ja2V0Lmxpc3RlbigpOwogICAgc29ja2V0LmxvY2FsQWRkcmVzcyA9IGFkZHJlc3M7CiAgICB2YXIgcmVzdWx0ID0gc29ja2V0Lm5hdGl2ZUNyZWF0ZUJpbmRMaXN0ZW4oCiAgICAgICAgYWRkcmVzcy5faW5fYWRkciwgcG9ydCwgYmFja2xvZywgdjZPbmx5LCBzaGFyZWQpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBTb2NrZXRFeGNlcHRpb24oIkZhaWxlZCB0byBjcmVhdGUgc2VydmVyIHNvY2tldCIsCiAgICAgICAgICBvc0Vycm9yOiByZXN1bHQsIGFkZHJlc3M6IGFkZHJlc3MsIHBvcnQ6IHBvcnQpOwogICAgfQogICAgaWYgKHBvcnQgIT0gMCkgc29ja2V0LmxvY2FsUG9ydCA9IHBvcnQ7CiAgICBzZXR1cFJlc291cmNlSW5mbyhzb2NrZXQpOwogICAgc29ja2V0LmNvbm5lY3RUb0V2ZW50SGFuZGxlcigpOwogICAgcmV0dXJuIHNvY2tldDsKICB9CgogIHN0YXRpYyB2b2lkIHNldHVwUmVzb3VyY2VJbmZvKF9OYXRpdmVTb2NrZXQgc29ja2V0KSB7CiAgICBzb2NrZXQucmVzb3VyY2VJbmZvID0gbmV3IF9Tb2NrZXRSZXNvdXJjZUluZm8oc29ja2V0KTsKICB9CgogIHN0YXRpYyBGdXR1cmU8X05hdGl2ZVNvY2tldD4gYmluZERhdGFncmFtKAogICAgICBob3N0LCBpbnQgcG9ydCwgYm9vbCByZXVzZUFkZHJlc3MsIGJvb2wgcmV1c2VQb3J0LCBpbnQgdHRsKSBhc3luYyB7CiAgICBfdGhyb3dPbkJhZFBvcnQocG9ydCk7CiAgICBfdGhyb3dPbkJhZFR0bCh0dGwpOwoKICAgIGZpbmFsIGFkZHJlc3MgPSBhd2FpdCBfcmVzb2x2ZUhvc3QoaG9zdCk7CgogICAgdmFyIHNvY2tldCA9IG5ldyBfTmF0aXZlU29ja2V0LmRhdGFncmFtKGFkZHJlc3MpOwogICAgdmFyIHJlc3VsdCA9IHNvY2tldC5uYXRpdmVDcmVhdGVCaW5kRGF0YWdyYW0oCiAgICAgICAgYWRkcmVzcy5faW5fYWRkciwgcG9ydCwgcmV1c2VBZGRyZXNzLCByZXVzZVBvcnQsIHR0bCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IFNvY2tldEV4Y2VwdGlvbigiRmFpbGVkIHRvIGNyZWF0ZSBkYXRhZ3JhbSBzb2NrZXQiLAogICAgICAgICAgb3NFcnJvcjogcmVzdWx0LCBhZGRyZXNzOiBhZGRyZXNzLCBwb3J0OiBwb3J0KTsKICAgIH0KICAgIGlmIChwb3J0ICE9IDApIHNvY2tldC5sb2NhbFBvcnQgPSBwb3J0OwogICAgc2V0dXBSZXNvdXJjZUluZm8oc29ja2V0KTsKICAgIHJldHVybiBzb2NrZXQ7CiAgfQoKICBfTmF0aXZlU29ja2V0LmRhdGFncmFtKHRoaXMubG9jYWxBZGRyZXNzKQogICAgICA6IHR5cGVGbGFncyA9IHR5cGVOb3JtYWxTb2NrZXQgfCB0eXBlVWRwU29ja2V0OwoKICBfTmF0aXZlU29ja2V0Lm5vcm1hbCgpIDogdHlwZUZsYWdzID0gdHlwZU5vcm1hbFNvY2tldCB8IHR5cGVUY3BTb2NrZXQ7CgogIF9OYXRpdmVTb2NrZXQubGlzdGVuKCkgOiB0eXBlRmxhZ3MgPSB0eXBlTGlzdGVuaW5nU29ja2V0IHwgdHlwZVRjcFNvY2tldCB7CiAgICBpc0Nsb3NlZFdyaXRlID0gdHJ1ZTsKICB9CgogIF9OYXRpdmVTb2NrZXQucGlwZSgpIDogdHlwZUZsYWdzID0gdHlwZVBpcGU7CgogIF9OYXRpdmVTb2NrZXQuX3dhdGNoQ29tbW9uKGludCBpZCwgaW50IHR5cGUpCiAgICAgIDogdHlwZUZsYWdzID0gdHlwZU5vcm1hbFNvY2tldCB8IHR5cGUgewogICAgaXNDbG9zZWRXcml0ZSA9IHRydWU7CiAgICBuYXRpdmVTZXRTb2NrZXRJZChpZCwgdHlwZUZsYWdzKTsKICB9CgogIF9OYXRpdmVTb2NrZXQud2F0Y2hTaWduYWwoaW50IGlkKQogICAgICA6IHRoaXMuX3dhdGNoQ29tbW9uKGlkLCB0eXBlSW50ZXJuYWxTaWduYWxTb2NrZXQpOwoKICBfTmF0aXZlU29ja2V0LndhdGNoKGludCBpZCkgOiB0aGlzLl93YXRjaENvbW1vbihpZCwgdHlwZUludGVybmFsU29ja2V0KTsKCiAgYm9vbCBnZXQgaXNMaXN0ZW5pbmcgPT4gKHR5cGVGbGFncyAmIHR5cGVMaXN0ZW5pbmdTb2NrZXQpICE9IDA7CiAgYm9vbCBnZXQgaXNQaXBlID0+ICh0eXBlRmxhZ3MgJiB0eXBlUGlwZSkgIT0gMDsKICBib29sIGdldCBpc0ludGVybmFsID0+ICh0eXBlRmxhZ3MgJiB0eXBlSW50ZXJuYWxTb2NrZXQpICE9IDA7CiAgYm9vbCBnZXQgaXNJbnRlcm5hbFNpZ25hbCA9PiAodHlwZUZsYWdzICYgdHlwZUludGVybmFsU2lnbmFsU29ja2V0KSAhPSAwOwogIGJvb2wgZ2V0IGlzVGNwID0+ICh0eXBlRmxhZ3MgJiB0eXBlVGNwU29ja2V0KSAhPSAwOwogIGJvb2wgZ2V0IGlzVWRwID0+ICh0eXBlRmxhZ3MgJiB0eXBlVWRwU29ja2V0KSAhPSAwOwoKICBNYXAgX3RvSlNPTihib29sIHJlZikgPT4gdGhyb3cgbmV3IFVuaW1wbGVtZW50ZWRFcnJvcigpOwogIFN0cmluZyBnZXQgX3NlcnZpY2VUeXBlUGF0aCA9PiB0aHJvdyBuZXcgVW5pbXBsZW1lbnRlZEVycm9yKCk7CiAgU3RyaW5nIGdldCBfc2VydmljZVR5cGVOYW1lID0+IHRocm93IG5ldyBVbmltcGxlbWVudGVkRXJyb3IoKTsKCiAgVWludDhMaXN0IHJlYWQoaW50IGxlbikgewogICAgaWYgKGxlbiAhPSBudWxsICYmIGxlbiA8PSAwKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJJbGxlZ2FsIGxlbmd0aCAkbGVuIik7CiAgICB9CiAgICBpZiAoaXNDbG9zaW5nIHx8IGlzQ2xvc2VkKSByZXR1cm4gbnVsbDsKICAgIGxlbiA9IG1pbihhdmFpbGFibGUsIGxlbiA9PSBudWxsID8gYXZhaWxhYmxlIDogbGVuKTsKICAgIGlmIChsZW4gPT0gMCkgcmV0dXJuIG51bGw7CiAgICB2YXIgcmVzdWx0ID0gbmF0aXZlUmVhZChsZW4pOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHJlcG9ydEVycm9yKHJlc3VsdCwgU3RhY2tUcmFjZS5jdXJyZW50LCAiUmVhZCBmYWlsZWQiKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHsKICAgICAgYXZhaWxhYmxlIC09IHJlc3VsdC5sZW5ndGg7CiAgICAgIC8vIFRPRE8ocmljb3cpOiBSZW1vdmUgd2hlbiB3ZSB0cmFjayBpbnRlcm5hbCBhbmQgcGlwZSB1c2VzLgogICAgICBhc3NlcnQocmVzb3VyY2VJbmZvICE9IG51bGwgfHwgaXNQaXBlIHx8IGlzSW50ZXJuYWwgfHwgaXNJbnRlcm5hbFNpZ25hbCk7CiAgICAgIGlmIChyZXNvdXJjZUluZm8gIT0gbnVsbCkgewogICAgICAgIHJlc291cmNlSW5mby50b3RhbFJlYWQgKz0gcmVzdWx0Lmxlbmd0aDsKICAgICAgfQogICAgfQogICAgLy8gVE9ETyhyaWNvdyk6IFJlbW92ZSB3aGVuIHdlIHRyYWNrIGludGVybmFsIGFuZCBwaXBlIHVzZXMuCiAgICBhc3NlcnQocmVzb3VyY2VJbmZvICE9IG51bGwgfHwgaXNQaXBlIHx8IGlzSW50ZXJuYWwgfHwgaXNJbnRlcm5hbFNpZ25hbCk7CiAgICBpZiAocmVzb3VyY2VJbmZvICE9IG51bGwpIHsKICAgICAgcmVzb3VyY2VJbmZvLmRpZFJlYWQoKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBEYXRhZ3JhbSByZWNlaXZlKCkgewogICAgaWYgKGlzQ2xvc2luZyB8fCBpc0Nsb3NlZCkgcmV0dXJuIG51bGw7CiAgICB2YXIgcmVzdWx0ID0gbmF0aXZlUmVjdkZyb20oKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICByZXBvcnRFcnJvcihyZXN1bHQsIFN0YWNrVHJhY2UuY3VycmVudCwgIlJlY2VpdmUgZmFpbGVkIik7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7CiAgICAgIC8vIFJlYWQgdGhlIG5leHQgYXZhaWxhYmxlLiBBdmFpbGFibGUgaXMgb25seSBmb3IgdGhlIG5leHQgZGF0YWdyYW0sIG5vdAogICAgICAvLyB0aGUgc3VtIG9mIGFsbCBkYXRhZ3JhbXMgcGVuZGluZywgc28gd2UgbmVlZCB0byBjYWxsIGFmdGVyIGVhY2gKICAgICAgLy8gcmVjZWl2ZS4gSWYgYXZhaWxhYmxlIGJlY29tZXMgPiAwLCB0aGUgX05hdGl2ZVNvY2tldCB3aWxsIGNvbnRpbnVlIHRvCiAgICAgIC8vIGVtaXQgcmVhZCBldmVudHMuCiAgICAgIGF2YWlsYWJsZSA9IG5hdGl2ZUF2YWlsYWJsZSgpOwogICAgICAvLyBUT0RPKHJpY293KTogUmVtb3ZlIHdoZW4gd2UgdHJhY2sgaW50ZXJuYWwgYW5kIHBpcGUgdXNlcy4KICAgICAgYXNzZXJ0KHJlc291cmNlSW5mbyAhPSBudWxsIHx8IGlzUGlwZSB8fCBpc0ludGVybmFsIHx8IGlzSW50ZXJuYWxTaWduYWwpOwogICAgICBpZiAocmVzb3VyY2VJbmZvICE9IG51bGwpIHsKICAgICAgICByZXNvdXJjZUluZm8udG90YWxSZWFkICs9IHJlc3VsdC5kYXRhLmxlbmd0aDsKICAgICAgfQogICAgfQogICAgLy8gVE9ETyhyaWNvdyk6IFJlbW92ZSB3aGVuIHdlIHRyYWNrIGludGVybmFsIGFuZCBwaXBlIHVzZXMuCiAgICBhc3NlcnQocmVzb3VyY2VJbmZvICE9IG51bGwgfHwgaXNQaXBlIHx8IGlzSW50ZXJuYWwgfHwgaXNJbnRlcm5hbFNpZ25hbCk7CiAgICBpZiAocmVzb3VyY2VJbmZvICE9IG51bGwpIHsKICAgICAgcmVzb3VyY2VJbmZvLmRpZFJlYWQoKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBpbnQgd3JpdGUoTGlzdDxpbnQ+IGJ1ZmZlciwgaW50IG9mZnNldCwgaW50IGJ5dGVzKSB7CiAgICBpZiAoYnVmZmVyIGlzISBMaXN0KSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigpOwogICAgaWYgKG9mZnNldCA9PSBudWxsKSBvZmZzZXQgPSAwOwogICAgaWYgKGJ5dGVzID09IG51bGwpIHsKICAgICAgaWYgKG9mZnNldCA+IGJ1ZmZlci5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci52YWx1ZShvZmZzZXQpOwogICAgICB9CiAgICAgIGJ5dGVzID0gYnVmZmVyLmxlbmd0aCAtIG9mZnNldDsKICAgIH0KICAgIGlmIChvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvci52YWx1ZShvZmZzZXQpOwogICAgaWYgKGJ5dGVzIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IudmFsdWUoYnl0ZXMpOwogICAgaWYgKChvZmZzZXQgKyBieXRlcykgPiBidWZmZXIubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnZhbHVlKG9mZnNldCArIGJ5dGVzKTsKICAgIH0KICAgIGlmIChvZmZzZXQgaXMhIGludCB8fCBieXRlcyBpcyEgaW50KSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJJbnZhbGlkIGFyZ3VtZW50cyB0byB3cml0ZSBvbiBTb2NrZXQiKTsKICAgIH0KICAgIGlmIChpc0Nsb3NpbmcgfHwgaXNDbG9zZWQpIHJldHVybiAwOwogICAgaWYgKGJ5dGVzID09IDApIHJldHVybiAwOwogICAgX0J1ZmZlckFuZFN0YXJ0IGJ1ZmZlckFuZFN0YXJ0ID0KICAgICAgICBfZW5zdXJlRmFzdEFuZFNlcmlhbGl6YWJsZUJ5dGVEYXRhKGJ1ZmZlciwgb2Zmc2V0LCBvZmZzZXQgKyBieXRlcyk7CiAgICB2YXIgcmVzdWx0ID0KICAgICAgICBuYXRpdmVXcml0ZShidWZmZXJBbmRTdGFydC5idWZmZXIsIGJ1ZmZlckFuZFN0YXJ0LnN0YXJ0LCBieXRlcyk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgT1NFcnJvciBvc0Vycm9yID0gcmVzdWx0OwogICAgICBTdGFja1RyYWNlIHN0ID0gU3RhY2tUcmFjZS5jdXJyZW50OwogICAgICBzY2hlZHVsZU1pY3JvdGFzaygoKSA9PiByZXBvcnRFcnJvcihvc0Vycm9yLCBzdCwgIldyaXRlIGZhaWxlZCIpKTsKICAgICAgcmVzdWx0ID0gMDsKICAgIH0KICAgIC8vIFRoZSByZXN1bHQgbWF5IGJlIG5lZ2F0aXZlLCBpZiB3ZSBmb3JjZWQgYSBzaG9ydCB3cml0ZSBmb3IgdGVzdGluZwogICAgLy8gcHVycG9zZS4gSW4gc3VjaCBjYXNlLCBkb24ndCBtYXJrIHdyaXRlQXZhaWxhYmxlIGFzIGZhbHNlLCBhcyB3ZSBkb24ndAogICAgLy8ga25vdyBpZiB3ZSdsbCByZWNlaXZlIGFuIGV2ZW50LiBJdCdzIGJldHRlciB0byBqdXN0IHJldHJ5LgogICAgaWYgKHJlc3VsdCA+PSAwICYmIHJlc3VsdCA8IGJ5dGVzKSB7CiAgICAgIHdyaXRlQXZhaWxhYmxlID0gZmFsc2U7CiAgICB9CiAgICAvLyBOZWdhdGUgdGhlIHJlc3VsdCwgYXMgc3RhdGVkIGFib3ZlLgogICAgaWYgKHJlc3VsdCA8IDApIHJlc3VsdCA9IC1yZXN1bHQ7CiAgICAvLyBUT0RPKHJpY293KTogUmVtb3ZlIHdoZW4gd2UgdHJhY2sgaW50ZXJuYWwgYW5kIHBpcGUgdXNlcy4KICAgIGFzc2VydChyZXNvdXJjZUluZm8gIT0gbnVsbCB8fCBpc1BpcGUgfHwgaXNJbnRlcm5hbCB8fCBpc0ludGVybmFsU2lnbmFsKTsKICAgIGlmIChyZXNvdXJjZUluZm8gIT0gbnVsbCkgewogICAgICByZXNvdXJjZUluZm8uYWRkV3JpdGUocmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBpbnQgc2VuZChMaXN0PGludD4gYnVmZmVyLCBpbnQgb2Zmc2V0LCBpbnQgYnl0ZXMsIEludGVybmV0QWRkcmVzcyBhZGRyZXNzLAogICAgICBpbnQgcG9ydCkgewogICAgX3Rocm93T25CYWRQb3J0KHBvcnQpOwogICAgaWYgKGlzQ2xvc2luZyB8fCBpc0Nsb3NlZCkgcmV0dXJuIDA7CiAgICBfQnVmZmVyQW5kU3RhcnQgYnVmZmVyQW5kU3RhcnQgPQogICAgICAgIF9lbnN1cmVGYXN0QW5kU2VyaWFsaXphYmxlQnl0ZURhdGEoYnVmZmVyLCBvZmZzZXQsIGJ5dGVzKTsKICAgIHZhciByZXN1bHQgPSBuYXRpdmVTZW5kVG8oYnVmZmVyQW5kU3RhcnQuYnVmZmVyLCBidWZmZXJBbmRTdGFydC5zdGFydCwKICAgICAgICBieXRlcywgKGFkZHJlc3MgYXMgX0ludGVybmV0QWRkcmVzcykuX2luX2FkZHIsIHBvcnQpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIE9TRXJyb3Igb3NFcnJvciA9IHJlc3VsdDsKICAgICAgU3RhY2tUcmFjZSBzdCA9IFN0YWNrVHJhY2UuY3VycmVudDsKICAgICAgc2NoZWR1bGVNaWNyb3Rhc2soKCkgPT4gcmVwb3J0RXJyb3Iob3NFcnJvciwgc3QsICJTZW5kIGZhaWxlZCIpKTsKICAgICAgcmVzdWx0ID0gMDsKICAgIH0KICAgIC8vIFRPRE8ocmljb3cpOiBSZW1vdmUgd2hlbiB3ZSB0cmFjayBpbnRlcm5hbCBhbmQgcGlwZSB1c2VzLgogICAgYXNzZXJ0KHJlc291cmNlSW5mbyAhPSBudWxsIHx8IGlzUGlwZSB8fCBpc0ludGVybmFsIHx8IGlzSW50ZXJuYWxTaWduYWwpOwogICAgaWYgKHJlc291cmNlSW5mbyAhPSBudWxsKSB7CiAgICAgIHJlc291cmNlSW5mby5hZGRXcml0ZShyZXN1bHQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIF9OYXRpdmVTb2NrZXQgYWNjZXB0KCkgewogICAgLy8gRG9uJ3QgaXNzdWUgYWNjZXB0IGlmIHdlJ3JlIGNsb3NpbmcuCiAgICBpZiAoaXNDbG9zaW5nIHx8IGlzQ2xvc2VkKSByZXR1cm4gbnVsbDsKICAgIGFzc2VydChhdmFpbGFibGUgPiAwKTsKICAgIGF2YWlsYWJsZS0tOwogICAgdG9rZW5zKys7CiAgICByZXR1cm5Ub2tlbnMobGlzdGVuaW5nVG9rZW5CYXRjaFNpemUpOwogICAgdmFyIHNvY2tldCA9IG5ldyBfTmF0aXZlU29ja2V0Lm5vcm1hbCgpOwogICAgaWYgKG5hdGl2ZUFjY2VwdChzb2NrZXQpICE9IHRydWUpIHJldHVybiBudWxsOwogICAgc29ja2V0LmxvY2FsUG9ydCA9IGxvY2FsUG9ydDsKICAgIHNvY2tldC5sb2NhbEFkZHJlc3MgPSBhZGRyZXNzOwogICAgc2V0dXBSZXNvdXJjZUluZm8oc29ja2V0KTsKICAgIC8vIFRPRE8ocmljb3cpOiBSZW1vdmUgd2hlbiB3ZSB0cmFjayBpbnRlcm5hbCBhbmQgcGlwZSB1c2VzLgogICAgYXNzZXJ0KHJlc291cmNlSW5mbyAhPSBudWxsIHx8IGlzUGlwZSB8fCBpc0ludGVybmFsIHx8IGlzSW50ZXJuYWxTaWduYWwpOwogICAgaWYgKHJlc291cmNlSW5mbyAhPSBudWxsKSB7CiAgICAgIC8vIFdlIHRyYWNrIHRoaXMgYXMgcmVhZCBvbmUgYnl0ZS4KICAgICAgcmVzb3VyY2VJbmZvLmFkZFJlYWQoMSk7CiAgICB9CiAgICByZXR1cm4gc29ja2V0OwogIH0KCiAgaW50IGdldCBwb3J0IHsKICAgIGlmIChsb2NhbFBvcnQgIT0gMCkgcmV0dXJuIGxvY2FsUG9ydDsKICAgIGlmIChpc0Nsb3NpbmcgfHwgaXNDbG9zZWQpIHRocm93IGNvbnN0IFNvY2tldEV4Y2VwdGlvbi5jbG9zZWQoKTsKICAgIHZhciByZXN1bHQgPSBuYXRpdmVHZXRQb3J0KCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHRocm93IHJlc3VsdDsKICAgIHJldHVybiBsb2NhbFBvcnQgPSByZXN1bHQ7CiAgfQoKICBpbnQgZ2V0IHJlbW90ZVBvcnQgewogICAgaWYgKGlzQ2xvc2luZyB8fCBpc0Nsb3NlZCkgdGhyb3cgY29uc3QgU29ja2V0RXhjZXB0aW9uLmNsb3NlZCgpOwogICAgdmFyIHJlc3VsdCA9IG5hdGl2ZUdldFJlbW90ZVBlZXIoKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgdGhyb3cgcmVzdWx0OwogICAgcmV0dXJuIHJlc3VsdFsxXTsKICB9CgogIEludGVybmV0QWRkcmVzcyBnZXQgYWRkcmVzcyA9PiBsb2NhbEFkZHJlc3M7CgogIEludGVybmV0QWRkcmVzcyBnZXQgcmVtb3RlQWRkcmVzcyB7CiAgICBpZiAoaXNDbG9zaW5nIHx8IGlzQ2xvc2VkKSB0aHJvdyBjb25zdCBTb2NrZXRFeGNlcHRpb24uY2xvc2VkKCk7CiAgICB2YXIgcmVzdWx0ID0gbmF0aXZlR2V0UmVtb3RlUGVlcigpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB0aHJvdyByZXN1bHQ7CiAgICB2YXIgYWRkciA9IHJlc3VsdFswXTsKICAgIHZhciB0eXBlID0gbmV3IEludGVybmV0QWRkcmVzc1R5cGUuX2Zyb20oYWRkclswXSk7CiAgICByZXR1cm4gbmV3IF9JbnRlcm5ldEFkZHJlc3MoYWRkclsxXSwgbnVsbCwgYWRkclsyXSk7CiAgfQoKICB2b2lkIGlzc3VlUmVhZEV2ZW50KCkgewogICAgaWYgKGNsb3NlZFJlYWRFdmVudFNlbnQpIHJldHVybjsKICAgIGlmIChyZWFkRXZlbnRJc3N1ZWQpIHJldHVybjsKICAgIHJlYWRFdmVudElzc3VlZCA9IHRydWU7CiAgICB2b2lkIGlzc3VlKCkgewogICAgICByZWFkRXZlbnRJc3N1ZWQgPSBmYWxzZTsKICAgICAgaWYgKGlzQ2xvc2luZykgcmV0dXJuOwogICAgICBpZiAoIXNlbmRSZWFkRXZlbnRzKSByZXR1cm47CiAgICAgIGlmIChhdmFpbGFibGUgPT0gMCkgewogICAgICAgIGlmIChpc0Nsb3NlZFJlYWQgJiYgIWNsb3NlZFJlYWRFdmVudFNlbnQpIHsKICAgICAgICAgIGlmIChpc0Nsb3NlZFdyaXRlKSBjbG9zZSgpOwogICAgICAgICAgdmFyIGhhbmRsZXIgPSBldmVudEhhbmRsZXJzW2Nsb3NlZEV2ZW50XTsKICAgICAgICAgIGlmIChoYW5kbGVyID09IG51bGwpIHJldHVybjsKICAgICAgICAgIGNsb3NlZFJlYWRFdmVudFNlbnQgPSB0cnVlOwogICAgICAgICAgaGFuZGxlcigpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdmFyIGhhbmRsZXIgPSBldmVudEhhbmRsZXJzW3JlYWRFdmVudF07CiAgICAgIGlmIChoYW5kbGVyID09IG51bGwpIHJldHVybjsKICAgICAgcmVhZEV2ZW50SXNzdWVkID0gdHJ1ZTsKICAgICAgaGFuZGxlcigpOwogICAgICBzY2hlZHVsZU1pY3JvdGFzayhpc3N1ZSk7CiAgICB9CgogICAgc2NoZWR1bGVNaWNyb3Rhc2soaXNzdWUpOwogIH0KCiAgdm9pZCBpc3N1ZVdyaXRlRXZlbnQoe2Jvb2wgZGVsYXllZDogdHJ1ZX0pIHsKICAgIGlmICh3cml0ZUV2ZW50SXNzdWVkKSByZXR1cm47CiAgICBpZiAoIXdyaXRlQXZhaWxhYmxlKSByZXR1cm47CiAgICB2b2lkIGlzc3VlKCkgewogICAgICB3cml0ZUV2ZW50SXNzdWVkID0gZmFsc2U7CiAgICAgIGlmICghd3JpdGVBdmFpbGFibGUpIHJldHVybjsKICAgICAgaWYgKGlzQ2xvc2luZykgcmV0dXJuOwogICAgICBpZiAoIXNlbmRXcml0ZUV2ZW50cykgcmV0dXJuOwogICAgICBzZW5kV3JpdGVFdmVudHMgPSBmYWxzZTsKICAgICAgdmFyIGhhbmRsZXIgPSBldmVudEhhbmRsZXJzW3dyaXRlRXZlbnRdOwogICAgICBpZiAoaGFuZGxlciA9PSBudWxsKSByZXR1cm47CiAgICAgIGhhbmRsZXIoKTsKICAgIH0KCiAgICBpZiAoZGVsYXllZCkgewogICAgICB3cml0ZUV2ZW50SXNzdWVkID0gdHJ1ZTsKICAgICAgc2NoZWR1bGVNaWNyb3Rhc2soaXNzdWUpOwogICAgfSBlbHNlIHsKICAgICAgaXNzdWUoKTsKICAgIH0KICB9CgogIC8vIE11bHRpcGxleGVzIHNvY2tldCBldmVudHMgdG8gdGhlIHNvY2tldCBoYW5kbGVycy4KICB2b2lkIG11bHRpcGxleChPYmplY3QgZXZlbnRzT2JqKSB7CiAgICAvLyBUT0RPKHBhdWxiZXJyeSk6IHdoZW4gaXNzdWUgIzMxMzA1IGlzIGZpeGVkLCB3ZSBzaG91bGQgYmUgYWJsZSB0byBzaW1wbHkKICAgIC8vIGRlY2xhcmUgYGV2ZW50c2AgYXMgYSBgY292YXJpYW50IGludGAgcGFyYW1ldGVyLgogICAgaW50IGV2ZW50cyA9IGV2ZW50c09iajsKICAgIGZvciAoaW50IGkgPSBmaXJzdEV2ZW50OyBpIDw9IGxhc3RFdmVudDsgaSsrKSB7CiAgICAgIGlmICgoKGV2ZW50cyAmICgxIDw8IGkpKSAhPSAwKSkgewogICAgICAgIGlmICgoaSA9PSBjbG9zZWRFdmVudCB8fCBpID09IHJlYWRFdmVudCkgJiYgaXNDbG9zZWRSZWFkKSBjb250aW51ZTsKICAgICAgICBpZiAoaXNDbG9zaW5nICYmIGkgIT0gZGVzdHJveWVkRXZlbnQpIGNvbnRpbnVlOwogICAgICAgIGlmIChpID09IGNsb3NlZEV2ZW50ICYmICFpc0xpc3RlbmluZyAmJiAhaXNDbG9zaW5nICYmICFpc0Nsb3NlZCkgewogICAgICAgICAgaXNDbG9zZWRSZWFkID0gdHJ1ZTsKICAgICAgICAgIGlzc3VlUmVhZEV2ZW50KCk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CgogICAgICAgIGlmIChpID09IHdyaXRlRXZlbnQpIHsKICAgICAgICAgIHdyaXRlQXZhaWxhYmxlID0gdHJ1ZTsKICAgICAgICAgIGlzc3VlV3JpdGVFdmVudChkZWxheWVkOiBmYWxzZSk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CgogICAgICAgIGlmIChpID09IHJlYWRFdmVudCkgewogICAgICAgICAgaWYgKGlzTGlzdGVuaW5nKSB7CiAgICAgICAgICAgIGF2YWlsYWJsZSsrOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYXZhaWxhYmxlID0gbmF0aXZlQXZhaWxhYmxlKCk7CiAgICAgICAgICAgIGlzc3VlUmVhZEV2ZW50KCk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdmFyIGhhbmRsZXIgPSBldmVudEhhbmRsZXJzW2ldOwogICAgICAgIGlmIChpID09IGRlc3Ryb3llZEV2ZW50KSB7CiAgICAgICAgICBhc3NlcnQoaXNDbG9zaW5nKTsKICAgICAgICAgIGFzc2VydCghaXNDbG9zZWQpOwogICAgICAgICAgLy8gVE9ETyhyaWNvdyk6IFJlbW92ZS91cGRhdGUgd2hlbiB3ZSB0cmFjayBpbnRlcm5hbCBhbmQgcGlwZSB1c2VzLgogICAgICAgICAgYXNzZXJ0KAogICAgICAgICAgICAgIHJlc291cmNlSW5mbyAhPSBudWxsIHx8IGlzUGlwZSB8fCBpc0ludGVybmFsIHx8IGlzSW50ZXJuYWxTaWduYWwpOwogICAgICAgICAgaWYgKHJlc291cmNlSW5mbyAhPSBudWxsKSB7CiAgICAgICAgICAgIF9Tb2NrZXRSZXNvdXJjZUluZm8uU29ja2V0Q2xvc2VkKHJlc291cmNlSW5mbyk7CiAgICAgICAgICB9CiAgICAgICAgICBpc0Nsb3NlZCA9IHRydWU7CiAgICAgICAgICBjbG9zZUNvbXBsZXRlci5jb21wbGV0ZSgpOwogICAgICAgICAgZGlzY29ubmVjdEZyb21FdmVudEhhbmRsZXIoKTsKICAgICAgICAgIGlmIChoYW5kbGVyICE9IG51bGwpIGhhbmRsZXIoKTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGkgPT0gZXJyb3JFdmVudCkgewogICAgICAgICAgaWYgKCFpc0Nsb3NpbmcpIHsKICAgICAgICAgICAgcmVwb3J0RXJyb3IobmF0aXZlR2V0RXJyb3IoKSwgbnVsbCwgIiIpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoIWlzQ2xvc2VkKSB7CiAgICAgICAgICAvLyBJZiB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQgcmlnaHQgYWZ0ZXIgaXQncyBhY2NlcHRlZCwgdGhlcmUncyBhCiAgICAgICAgICAvLyBjaGFuY2UgdGhlIGNsb3NlLWhhbmRsZXIgaXMgbm90IHNldC4KICAgICAgICAgIGlmIChoYW5kbGVyICE9IG51bGwpIGhhbmRsZXIoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmICghaXNMaXN0ZW5pbmcpIHsKICAgICAgdG9rZW5zKys7CiAgICAgIHJldHVyblRva2Vucyhub3JtYWxUb2tlbkJhdGNoU2l6ZSk7CiAgICB9CiAgfQoKICB2b2lkIHJldHVyblRva2VucyhpbnQgdG9rZW5CYXRjaFNpemUpIHsKICAgIGlmICghaXNDbG9zaW5nICYmICFpc0Nsb3NlZCkgewogICAgICBhc3NlcnQoZXZlbnRQb3J0ICE9IG51bGwpOwogICAgICAvLyBSZXR1cm4gaW4gYmF0Y2hlcy4KICAgICAgaWYgKHRva2VucyA9PSB0b2tlbkJhdGNoU2l6ZSkgewogICAgICAgIGFzc2VydCh0b2tlbnMgPCAoMSA8PCBmaXJzdENvbW1hbmQpKTsKICAgICAgICBzZW5kVG9FdmVudEhhbmRsZXIoKDEgPDwgcmV0dXJuVG9rZW5Db21tYW5kKSB8IHRva2Vucyk7CiAgICAgICAgdG9rZW5zID0gMDsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBzZXRIYW5kbGVycyh7cmVhZCwgd3JpdGUsIGVycm9yLCBjbG9zZWQsIGRlc3Ryb3llZH0pIHsKICAgIGV2ZW50SGFuZGxlcnNbcmVhZEV2ZW50XSA9IHJlYWQ7CiAgICBldmVudEhhbmRsZXJzW3dyaXRlRXZlbnRdID0gd3JpdGU7CiAgICBldmVudEhhbmRsZXJzW2Vycm9yRXZlbnRdID0gZXJyb3I7CiAgICBldmVudEhhbmRsZXJzW2Nsb3NlZEV2ZW50XSA9IGNsb3NlZDsKICAgIGV2ZW50SGFuZGxlcnNbZGVzdHJveWVkRXZlbnRdID0gZGVzdHJveWVkOwogIH0KCiAgdm9pZCBzZXRMaXN0ZW5pbmcoe3JlYWQ6IHRydWUsIHdyaXRlOiB0cnVlfSkgewogICAgc2VuZFJlYWRFdmVudHMgPSByZWFkOwogICAgc2VuZFdyaXRlRXZlbnRzID0gd3JpdGU7CiAgICBpZiAocmVhZCkgaXNzdWVSZWFkRXZlbnQoKTsKICAgIGlmICh3cml0ZSkgaXNzdWVXcml0ZUV2ZW50KCk7CiAgICBpZiAoIWZsYWdzU2VudCAmJiAhaXNDbG9zaW5nKSB7CiAgICAgIGZsYWdzU2VudCA9IHRydWU7CiAgICAgIGludCBmbGFncyA9IDEgPDwgc2V0RXZlbnRNYXNrQ29tbWFuZDsKICAgICAgaWYgKCFpc0Nsb3NlZFJlYWQpIGZsYWdzIHw9IDEgPDwgcmVhZEV2ZW50OwogICAgICBpZiAoIWlzQ2xvc2VkV3JpdGUpIGZsYWdzIHw9IDEgPDwgd3JpdGVFdmVudDsKICAgICAgc2VuZFRvRXZlbnRIYW5kbGVyKGZsYWdzKTsKICAgIH0KICB9CgogIEZ1dHVyZSBjbG9zZSgpIHsKICAgIGlmICghaXNDbG9zaW5nICYmICFpc0Nsb3NlZCkgewogICAgICBzZW5kVG9FdmVudEhhbmRsZXIoMSA8PCBjbG9zZUNvbW1hbmQpOwogICAgICBpc0Nsb3NpbmcgPSB0cnVlOwogICAgfQogICAgcmV0dXJuIGNsb3NlQ29tcGxldGVyLmZ1dHVyZTsKICB9CgogIHZvaWQgc2h1dGRvd24oU29ja2V0RGlyZWN0aW9uIGRpcmVjdGlvbikgewogICAgaWYgKCFpc0Nsb3NpbmcgJiYgIWlzQ2xvc2VkKSB7CiAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CiAgICAgICAgY2FzZSBTb2NrZXREaXJlY3Rpb24ucmVjZWl2ZToKICAgICAgICAgIHNodXRkb3duUmVhZCgpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBTb2NrZXREaXJlY3Rpb24uc2VuZDoKICAgICAgICAgIHNodXRkb3duV3JpdGUoKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgU29ja2V0RGlyZWN0aW9uLmJvdGg6CiAgICAgICAgICBjbG9zZSgpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKGRpcmVjdGlvbik7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgc2h1dGRvd25Xcml0ZSgpIHsKICAgIGlmICghaXNDbG9zaW5nICYmICFpc0Nsb3NlZCkgewogICAgICBpZiAoY2xvc2VkUmVhZEV2ZW50U2VudCkgewogICAgICAgIGNsb3NlKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2VuZFRvRXZlbnRIYW5kbGVyKDEgPDwgc2h1dGRvd25Xcml0ZUNvbW1hbmQpOwogICAgICB9CiAgICAgIGlzQ2xvc2VkV3JpdGUgPSB0cnVlOwogICAgfQogIH0KCiAgdm9pZCBzaHV0ZG93blJlYWQoKSB7CiAgICBpZiAoIWlzQ2xvc2luZyAmJiAhaXNDbG9zZWQpIHsKICAgICAgaWYgKGlzQ2xvc2VkV3JpdGUpIHsKICAgICAgICBjbG9zZSgpOwogICAgICB9IGVsc2UgewogICAgICAgIHNlbmRUb0V2ZW50SGFuZGxlcigxIDw8IHNodXRkb3duUmVhZENvbW1hbmQpOwogICAgICB9CiAgICAgIGlzQ2xvc2VkUmVhZCA9IHRydWU7CiAgICB9CiAgfQoKICB2b2lkIHNlbmRUb0V2ZW50SGFuZGxlcihpbnQgZGF0YSkgewogICAgaW50IGZ1bGxEYXRhID0gKHR5cGVGbGFncyAmIHR5cGVUeXBlTWFzaykgfCBkYXRhOwogICAgYXNzZXJ0KCFpc0Nsb3NpbmcpOwogICAgY29ubmVjdFRvRXZlbnRIYW5kbGVyKCk7CiAgICBfRXZlbnRIYW5kbGVyLl9zZW5kRGF0YSh0aGlzLCBldmVudFBvcnQuc2VuZFBvcnQsIGZ1bGxEYXRhKTsKICB9CgogIHZvaWQgY29ubmVjdFRvRXZlbnRIYW5kbGVyKCkgewogICAgYXNzZXJ0KCFpc0Nsb3NlZCk7CiAgICBpZiAoZXZlbnRQb3J0ID09IG51bGwpIHsKICAgICAgZXZlbnRQb3J0ID0gbmV3IFJhd1JlY2VpdmVQb3J0KG11bHRpcGxleCk7CiAgICB9CiAgICBpZiAoIWNvbm5lY3RlZFJlc291cmNlSGFuZGxlcikgewogICAgICByZWdpc3RlckV4dGVuc2lvbigKICAgICAgICAgICdleHQuZGFydC5pby5nZXRPcGVuU29ja2V0cycsIF9Tb2NrZXRSZXNvdXJjZUluZm8uZ2V0T3BlblNvY2tldHMpOwogICAgICByZWdpc3RlckV4dGVuc2lvbignZXh0LmRhcnQuaW8uZ2V0U29ja2V0QnlJRCcsCiAgICAgICAgICBfU29ja2V0UmVzb3VyY2VJbmZvLmdldFNvY2tldEluZm9NYXBCeUlEKTsKCiAgICAgIGNvbm5lY3RlZFJlc291cmNlSGFuZGxlciA9IHRydWU7CiAgICB9CiAgfQoKICB2b2lkIGRpc2Nvbm5lY3RGcm9tRXZlbnRIYW5kbGVyKCkgewogICAgYXNzZXJ0KGV2ZW50UG9ydCAhPSBudWxsKTsKICAgIGV2ZW50UG9ydC5jbG9zZSgpOwogICAgZXZlbnRQb3J0ID0gbnVsbDsKICAgIC8vIE5vdyB0aGF0IHdlIGRvbid0IHRyYWNrIHRoaXMgU29ja2V0IGFueW1vcmUsIHdlIGNhbiBjbGVhciB0aGUgb3duZXIKICAgIC8vIGZpZWxkLgogICAgb3duZXIgPSBudWxsOwogIH0KCiAgLy8gQ2hlY2sgd2hldGhlciB0aGlzIGlzIGFuIGVycm9yIHJlc3BvbnNlIGZyb20gYSBuYXRpdmUgcG9ydCBjYWxsLgogIHN0YXRpYyBib29sIGlzRXJyb3JSZXNwb25zZShyZXNwb25zZSkgewogICAgcmV0dXJuIHJlc3BvbnNlIGlzIExpc3QgJiYgcmVzcG9uc2VbMF0gIT0gX3N1Y2Nlc3NSZXNwb25zZTsKICB9CgogIC8vIENyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgZXJyb3IvZXhjZXB0aW9uIGZyb20gZGlmZmVyZW50IHJldHVybmVkCiAgLy8gZXJyb3Igb2JqZWN0cy4KICBzdGF0aWMgY3JlYXRlRXJyb3IoZXJyb3IsIFN0cmluZyBtZXNzYWdlLAogICAgICBbSW50ZXJuZXRBZGRyZXNzIGFkZHJlc3MsIGludCBwb3J0XSkgewogICAgaWYgKGVycm9yIGlzIE9TRXJyb3IpIHsKICAgICAgcmV0dXJuIG5ldyBTb2NrZXRFeGNlcHRpb24obWVzc2FnZSwKICAgICAgICAgIG9zRXJyb3I6IGVycm9yLCBhZGRyZXNzOiBhZGRyZXNzLCBwb3J0OiBwb3J0KTsKICAgIH0gZWxzZSBpZiAoZXJyb3IgaXMgTGlzdCkgewogICAgICBhc3NlcnQoaXNFcnJvclJlc3BvbnNlKGVycm9yKSk7CiAgICAgIHN3aXRjaCAoZXJyb3JbMF0pIHsKICAgICAgICBjYXNlIF9pbGxlZ2FsQXJndW1lbnRSZXNwb25zZToKICAgICAgICAgIHJldHVybiBuZXcgQXJndW1lbnRFcnJvcigpOwogICAgICAgIGNhc2UgX29zRXJyb3JSZXNwb25zZToKICAgICAgICAgIHJldHVybiBuZXcgU29ja2V0RXhjZXB0aW9uKG1lc3NhZ2UsCiAgICAgICAgICAgICAgb3NFcnJvcjogbmV3IE9TRXJyb3IoZXJyb3JbMl0sIGVycm9yWzFdKSwKICAgICAgICAgICAgICBhZGRyZXNzOiBhZGRyZXNzLAogICAgICAgICAgICAgIHBvcnQ6IHBvcnQpOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gbmV3IEV4Y2VwdGlvbigiVW5rbm93biBlcnJvciIpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IFNvY2tldEV4Y2VwdGlvbihtZXNzYWdlLCBhZGRyZXNzOiBhZGRyZXNzLCBwb3J0OiBwb3J0KTsKICAgIH0KICB9CgogIHZvaWQgcmVwb3J0RXJyb3IoZXJyb3IsIFN0YWNrVHJhY2Ugc3QsIFN0cmluZyBtZXNzYWdlKSB7CiAgICB2YXIgZSA9IGNyZWF0ZUVycm9yKGVycm9yLCBtZXNzYWdlLCBhZGRyZXNzLCBsb2NhbFBvcnQpOwogICAgLy8gSW52b2tlIHRoZSBlcnJvciBoYW5kbGVyIGlmIGFueS4KICAgIGlmIChldmVudEhhbmRsZXJzW2Vycm9yRXZlbnRdICE9IG51bGwpIHsKICAgICAgZXZlbnRIYW5kbGVyc1tlcnJvckV2ZW50XShlLCBzdCk7CiAgICB9CiAgICAvLyBGb3IgYWxsIGVycm9ycyB3ZSBjbG9zZSB0aGUgc29ja2V0CiAgICBjbG9zZSgpOwogIH0KCiAgZ2V0T3B0aW9uKFNvY2tldE9wdGlvbiBvcHRpb24pIHsKICAgIGlmIChvcHRpb24gPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgib3B0aW9uIik7CiAgICB2YXIgcmVzdWx0ID0gbmF0aXZlR2V0T3B0aW9uKG9wdGlvbi5fdmFsdWUsIGFkZHJlc3MudHlwZS5fdmFsdWUpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB0aHJvdyByZXN1bHQ7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgYm9vbCBzZXRPcHRpb24oU29ja2V0T3B0aW9uIG9wdGlvbiwgdmFsdWUpIHsKICAgIGlmIChvcHRpb24gPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgib3B0aW9uIik7CiAgICB2YXIgcmVzdWx0ID0gbmF0aXZlU2V0T3B0aW9uKG9wdGlvbi5fdmFsdWUsIGFkZHJlc3MudHlwZS5fdmFsdWUsIHZhbHVlKTsKICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgdGhyb3cgcmVzdWx0OwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBVaW50OExpc3QgZ2V0UmF3T3B0aW9uKFJhd1NvY2tldE9wdGlvbiBvcHRpb24pIHsKICAgIGlmIChvcHRpb24gPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgib3B0aW9uIik7CiAgICBpZiAob3B0aW9uLnZhbHVlID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoIm9wdGlvbi52YWx1ZSIpOwoKICAgIHZhciByZXN1bHQgPSBuYXRpdmVHZXRSYXdPcHRpb24ob3B0aW9uLmxldmVsLCBvcHRpb24ub3B0aW9uLCBvcHRpb24udmFsdWUpOwogICAgaWYgKHJlc3VsdCAhPSBudWxsKSB0aHJvdyByZXN1bHQ7CiAgICByZXR1cm4gb3B0aW9uLnZhbHVlOwogIH0KCiAgdm9pZCBzZXRSYXdPcHRpb24oUmF3U29ja2V0T3B0aW9uIG9wdGlvbikgewogICAgaWYgKG9wdGlvbiA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci5ub3ROdWxsKCJvcHRpb24iKTsKICAgIGlmIChvcHRpb24udmFsdWUgPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgib3B0aW9uLnZhbHVlIik7CgogICAgdmFyIHJlc3VsdCA9IG5hdGl2ZVNldFJhd09wdGlvbihvcHRpb24ubGV2ZWwsIG9wdGlvbi5vcHRpb24sIG9wdGlvbi52YWx1ZSk7CiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHRocm93IHJlc3VsdDsKICB9CgogIEludGVybmV0QWRkcmVzcyBtdWx0aWNhc3RBZGRyZXNzKAogICAgICBJbnRlcm5ldEFkZHJlc3MgYWRkciwgTmV0d29ya0ludGVyZmFjZSBpbnRlcmZhY2UpIHsKICAgIC8vIE9uIE1hYyBPUyB1c2luZyB0aGUgaW50ZXJmYWNlIGluZGV4IGZvciBqb2luaW5nIElQdjQgbXVsdGljYXN0IGdyb3VwcwogICAgLy8gaXMgbm90IHN1cHBvcnRlZC4gSGVyZSB0aGUgSVAgYWRkcmVzcyBvZiB0aGUgaW50ZXJmYWNlIGlzIG5lZWRlZC4KICAgIGlmIChQbGF0Zm9ybS5pc01hY09TICYmIGFkZHIudHlwZSA9PSBJbnRlcm5ldEFkZHJlc3NUeXBlLklQdjQpIHsKICAgICAgaWYgKGludGVyZmFjZSAhPSBudWxsKSB7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRlcmZhY2UuYWRkcmVzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBpZiAoaW50ZXJmYWNlLmFkZHJlc3Nlc1tpXS50eXBlID09IEludGVybmV0QWRkcmVzc1R5cGUuSVB2NCkgewogICAgICAgICAgICByZXR1cm4gaW50ZXJmYWNlLmFkZHJlc3Nlc1tpXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gTm8gSVB2NCBhZGRyZXNzIGZvdW5kIG9uIHRoZSBpbnRlcmZhY2UuCiAgICAgICAgdGhyb3cgbmV3IFNvY2tldEV4Y2VwdGlvbigKICAgICAgICAgICAgIlRoZSBuZXR3b3JrIGludGVyZmFjZSBkb2VzIG5vdCBoYXZlIGFuIGFkZHJlc3MgIgogICAgICAgICAgICAib2YgdGhlIHNhbWUgZmFtaWx5IGFzIHRoZSBtdWx0aWNhc3QgYWRkcmVzcyIpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIERlZmF1bHQgdG8gdGhlIEFOWSBhZGRyZXNzIGlmIG5vIGludGVyZmFjZSBpcyBzcGVjaWZpZWQuCiAgICAgICAgcmV0dXJuIEludGVybmV0QWRkcmVzcy5hbnlJUHY0OwogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIHZvaWQgam9pbk11bHRpY2FzdChJbnRlcm5ldEFkZHJlc3MgYWRkciwgTmV0d29ya0ludGVyZmFjZSBpbnRlcmZhY2UpIHsKICAgIF9JbnRlcm5ldEFkZHJlc3MgaW50ZXJmYWNlQWRkciA9IG11bHRpY2FzdEFkZHJlc3MoYWRkciwgaW50ZXJmYWNlKTsKICAgIHZhciBpbnRlcmZhY2VJbmRleCA9IGludGVyZmFjZSA9PSBudWxsID8gMCA6IGludGVyZmFjZS5pbmRleDsKICAgIHZhciByZXN1bHQgPSBuYXRpdmVKb2luTXVsdGljYXN0KChhZGRyIGFzIF9JbnRlcm5ldEFkZHJlc3MpLl9pbl9hZGRyLAogICAgICAgIGludGVyZmFjZUFkZHI/Ll9pbl9hZGRyLCBpbnRlcmZhY2VJbmRleCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHRocm93IHJlc3VsdDsKICB9CgogIHZvaWQgbGVhdmVNdWx0aWNhc3QoSW50ZXJuZXRBZGRyZXNzIGFkZHIsIE5ldHdvcmtJbnRlcmZhY2UgaW50ZXJmYWNlKSB7CiAgICBfSW50ZXJuZXRBZGRyZXNzIGludGVyZmFjZUFkZHIgPSBtdWx0aWNhc3RBZGRyZXNzKGFkZHIsIGludGVyZmFjZSk7CiAgICB2YXIgaW50ZXJmYWNlSW5kZXggPSBpbnRlcmZhY2UgPT0gbnVsbCA/IDAgOiBpbnRlcmZhY2UuaW5kZXg7CiAgICB2YXIgcmVzdWx0ID0gbmF0aXZlTGVhdmVNdWx0aWNhc3QoKGFkZHIgYXMgX0ludGVybmV0QWRkcmVzcykuX2luX2FkZHIsCiAgICAgICAgaW50ZXJmYWNlQWRkcj8uX2luX2FkZHIsIGludGVyZmFjZUluZGV4KTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgdGhyb3cgcmVzdWx0OwogIH0KCiAgdm9pZCBuYXRpdmVTZXRTb2NrZXRJZChpbnQgaWQsIGludCB0eXBlRmxhZ3MpIG5hdGl2ZSAiU29ja2V0X1NldFNvY2tldElkIjsKICBuYXRpdmVBdmFpbGFibGUoKSBuYXRpdmUgIlNvY2tldF9BdmFpbGFibGUiOwogIG5hdGl2ZVJlYWQoaW50IGxlbikgbmF0aXZlICJTb2NrZXRfUmVhZCI7CiAgbmF0aXZlUmVjdkZyb20oKSBuYXRpdmUgIlNvY2tldF9SZWN2RnJvbSI7CiAgbmF0aXZlV3JpdGUoTGlzdDxpbnQ+IGJ1ZmZlciwgaW50IG9mZnNldCwgaW50IGJ5dGVzKQogICAgICBuYXRpdmUgIlNvY2tldF9Xcml0ZUxpc3QiOwogIG5hdGl2ZVNlbmRUbyhMaXN0PGludD4gYnVmZmVyLCBpbnQgb2Zmc2V0LCBpbnQgYnl0ZXMsIFVpbnQ4TGlzdCBhZGRyZXNzLAogICAgICBpbnQgcG9ydCkgbmF0aXZlICJTb2NrZXRfU2VuZFRvIjsKICBuYXRpdmVDcmVhdGVDb25uZWN0KFVpbnQ4TGlzdCBhZGRyLCBpbnQgcG9ydCkgbmF0aXZlICJTb2NrZXRfQ3JlYXRlQ29ubmVjdCI7CiAgbmF0aXZlQ3JlYXRlQmluZENvbm5lY3QoVWludDhMaXN0IGFkZHIsIGludCBwb3J0LCBVaW50OExpc3Qgc291cmNlQWRkcikKICAgICAgbmF0aXZlICJTb2NrZXRfQ3JlYXRlQmluZENvbm5lY3QiOwogIGJvb2wgaXNCaW5kRXJyb3IoaW50IGVycm9yTnVtYmVyKSBuYXRpdmUgIlNvY2tldEJhc2VfSXNCaW5kRXJyb3IiOwogIG5hdGl2ZUNyZWF0ZUJpbmRMaXN0ZW4oVWludDhMaXN0IGFkZHIsIGludCBwb3J0LCBpbnQgYmFja2xvZywgYm9vbCB2Nk9ubHksCiAgICAgIGJvb2wgc2hhcmVkKSBuYXRpdmUgIlNlcnZlclNvY2tldF9DcmVhdGVCaW5kTGlzdGVuIjsKICBuYXRpdmVDcmVhdGVCaW5kRGF0YWdyYW0oVWludDhMaXN0IGFkZHIsIGludCBwb3J0LCBib29sIHJldXNlQWRkcmVzcywKICAgICAgYm9vbCByZXVzZVBvcnQsIGludCB0dGwpIG5hdGl2ZSAiU29ja2V0X0NyZWF0ZUJpbmREYXRhZ3JhbSI7CiAgbmF0aXZlQWNjZXB0KF9OYXRpdmVTb2NrZXQgc29ja2V0KSBuYXRpdmUgIlNlcnZlclNvY2tldF9BY2NlcHQiOwogIGludCBuYXRpdmVHZXRQb3J0KCkgbmF0aXZlICJTb2NrZXRfR2V0UG9ydCI7CiAgTGlzdCBuYXRpdmVHZXRSZW1vdGVQZWVyKCkgbmF0aXZlICJTb2NrZXRfR2V0UmVtb3RlUGVlciI7CiAgaW50IG5hdGl2ZUdldFNvY2tldElkKCkgbmF0aXZlICJTb2NrZXRfR2V0U29ja2V0SWQiOwogIE9TRXJyb3IgbmF0aXZlR2V0RXJyb3IoKSBuYXRpdmUgIlNvY2tldF9HZXRFcnJvciI7CiAgbmF0aXZlR2V0T3B0aW9uKGludCBvcHRpb24sIGludCBwcm90b2NvbCkgbmF0aXZlICJTb2NrZXRfR2V0T3B0aW9uIjsKICBPU0Vycm9yIG5hdGl2ZUdldFJhd09wdGlvbihpbnQgbGV2ZWwsIGludCBvcHRpb24sIFVpbnQ4TGlzdCBkYXRhKQogICAgICBuYXRpdmUgIlNvY2tldF9HZXRSYXdPcHRpb24iOwogIE9TRXJyb3IgbmF0aXZlU2V0T3B0aW9uKGludCBvcHRpb24sIGludCBwcm90b2NvbCwgdmFsdWUpCiAgICAgIG5hdGl2ZSAiU29ja2V0X1NldE9wdGlvbiI7CiAgT1NFcnJvciBuYXRpdmVTZXRSYXdPcHRpb24oaW50IGxldmVsLCBpbnQgb3B0aW9uLCBVaW50OExpc3QgZGF0YSkKICAgICAgbmF0aXZlICJTb2NrZXRfU2V0UmF3T3B0aW9uIjsKICBPU0Vycm9yIG5hdGl2ZUpvaW5NdWx0aWNhc3QoVWludDhMaXN0IGFkZHIsIFVpbnQ4TGlzdCBpbnRlcmZhY2VBZGRyLAogICAgICBpbnQgaW50ZXJmYWNlSW5kZXgpIG5hdGl2ZSAiU29ja2V0X0pvaW5NdWx0aWNhc3QiOwogIGJvb2wgbmF0aXZlTGVhdmVNdWx0aWNhc3QoVWludDhMaXN0IGFkZHIsIFVpbnQ4TGlzdCBpbnRlcmZhY2VBZGRyLAogICAgICBpbnQgaW50ZXJmYWNlSW5kZXgpIG5hdGl2ZSAiU29ja2V0X0xlYXZlTXVsdGljYXN0IjsKfQoKY2xhc3MgX1Jhd1NlcnZlclNvY2tldCBleHRlbmRzIFN0cmVhbTxSYXdTb2NrZXQ+IGltcGxlbWVudHMgUmF3U2VydmVyU29ja2V0IHsKICBmaW5hbCBfTmF0aXZlU29ja2V0IF9zb2NrZXQ7CiAgU3RyZWFtQ29udHJvbGxlcjxSYXdTb2NrZXQ+IF9jb250cm9sbGVyOwogIFJlY2VpdmVQb3J0IF9yZWZlcmVuY2VQb3J0OwogIGJvb2wgX3Y2T25seTsKCiAgc3RhdGljIEZ1dHVyZTxfUmF3U2VydmVyU29ja2V0PiBiaW5kKAogICAgICBhZGRyZXNzLCBpbnQgcG9ydCwgaW50IGJhY2tsb2csIGJvb2wgdjZPbmx5LCBib29sIHNoYXJlZCkgewogICAgX3Rocm93T25CYWRQb3J0KHBvcnQpOwogICAgaWYgKGJhY2tsb2cgPCAwKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiSW52YWxpZCBiYWNrbG9nICRiYWNrbG9nIik7CiAgICByZXR1cm4gX05hdGl2ZVNvY2tldC5iaW5kKGFkZHJlc3MsIHBvcnQsIGJhY2tsb2csIHY2T25seSwgc2hhcmVkKQogICAgICAgIC50aGVuKChzb2NrZXQpID0+IG5ldyBfUmF3U2VydmVyU29ja2V0KHNvY2tldCwgdjZPbmx5KSk7CiAgfQoKICBfUmF3U2VydmVyU29ja2V0KHRoaXMuX3NvY2tldCwgdGhpcy5fdjZPbmx5KTsKCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFJhd1NvY2tldD4gbGlzdGVuKHZvaWQgb25EYXRhKFJhd1NvY2tldCBldmVudCksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICBpZiAoX2NvbnRyb2xsZXIgIT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiU3RyZWFtIHdhcyBhbHJlYWR5IGxpc3RlbmVkIHRvIik7CiAgICB9CiAgICB2YXIgem9uZSA9IFpvbmUuY3VycmVudDsKICAgIF9jb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXIoCiAgICAgICAgc3luYzogdHJ1ZSwKICAgICAgICBvbkxpc3RlbjogX29uU3Vic2NyaXB0aW9uU3RhdGVDaGFuZ2UsCiAgICAgICAgb25DYW5jZWw6IF9vblN1YnNjcmlwdGlvblN0YXRlQ2hhbmdlLAogICAgICAgIG9uUGF1c2U6IF9vblBhdXNlU3RhdGVDaGFuZ2UsCiAgICAgICAgb25SZXN1bWU6IF9vblBhdXNlU3RhdGVDaGFuZ2UpOwogICAgX3NvY2tldC5zZXRIYW5kbGVycyhyZWFkOiB6b25lLmJpbmRDYWxsYmFja0d1YXJkZWQoKCkgewogICAgICB3aGlsZSAoX3NvY2tldC5hdmFpbGFibGUgPiAwKSB7CiAgICAgICAgdmFyIHNvY2tldCA9IF9zb2NrZXQuYWNjZXB0KCk7CiAgICAgICAgaWYgKHNvY2tldCA9PSBudWxsKSByZXR1cm47CiAgICAgICAgX2NvbnRyb2xsZXIuYWRkKG5ldyBfUmF3U29ja2V0KHNvY2tldCkpOwogICAgICAgIGlmIChfY29udHJvbGxlci5pc1BhdXNlZCkgcmV0dXJuOwogICAgICB9CiAgICB9KSwgZXJyb3I6IHpvbmUuYmluZEJpbmFyeUNhbGxiYWNrR3VhcmRlZCgoZSwgc3QpIHsKICAgICAgX2NvbnRyb2xsZXIuYWRkRXJyb3IoZSwgc3QpOwogICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgfSksIGRlc3Ryb3llZDogKCkgewogICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgICBpZiAoX3JlZmVyZW5jZVBvcnQgIT0gbnVsbCkgewogICAgICAgIF9yZWZlcmVuY2VQb3J0LmNsb3NlKCk7CiAgICAgICAgX3JlZmVyZW5jZVBvcnQgPSBudWxsOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBfY29udHJvbGxlci5zdHJlYW0ubGlzdGVuKG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLCBvbkRvbmU6IG9uRG9uZSwgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgfQoKICBpbnQgZ2V0IHBvcnQgPT4gX3NvY2tldC5wb3J0OwoKICBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFkZHJlc3MgPT4gX3NvY2tldC5hZGRyZXNzOwoKICBGdXR1cmU8UmF3U2VydmVyU29ja2V0PiBjbG9zZSgpIHsKICAgIHJldHVybiBfc29ja2V0LmNsb3NlKCkudGhlbjxSYXdTZXJ2ZXJTb2NrZXQ+KChfKSB7CiAgICAgIGlmIChfcmVmZXJlbmNlUG9ydCAhPSBudWxsKSB7CiAgICAgICAgX3JlZmVyZW5jZVBvcnQuY2xvc2UoKTsKICAgICAgICBfcmVmZXJlbmNlUG9ydCA9IG51bGw7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9KTsKICB9CgogIHZvaWQgX3BhdXNlKCkgewogICAgX3NvY2tldC5zZXRMaXN0ZW5pbmcocmVhZDogZmFsc2UsIHdyaXRlOiBmYWxzZSk7CiAgfQoKICB2b2lkIF9yZXN1bWUoKSB7CiAgICBfc29ja2V0LnNldExpc3RlbmluZyhyZWFkOiB0cnVlLCB3cml0ZTogZmFsc2UpOwogIH0KCiAgdm9pZCBfb25TdWJzY3JpcHRpb25TdGF0ZUNoYW5nZSgpIHsKICAgIGlmIChfY29udHJvbGxlci5oYXNMaXN0ZW5lcikgewogICAgICBfcmVzdW1lKCk7CiAgICB9IGVsc2UgewogICAgICBfc29ja2V0LmNsb3NlKCk7CiAgICB9CiAgfQoKICB2b2lkIF9vblBhdXNlU3RhdGVDaGFuZ2UoKSB7CiAgICBpZiAoX2NvbnRyb2xsZXIuaXNQYXVzZWQpIHsKICAgICAgX3BhdXNlKCk7CiAgICB9IGVsc2UgewogICAgICBfcmVzdW1lKCk7CiAgICB9CiAgfQoKICB2b2lkIHNldCBfb3duZXIob3duZXIpIHsKICAgIF9zb2NrZXQub3duZXIgPSBvd25lcjsKICB9Cn0KCmNsYXNzIF9SYXdTb2NrZXQgZXh0ZW5kcyBTdHJlYW08UmF3U29ja2V0RXZlbnQ+IGltcGxlbWVudHMgUmF3U29ja2V0IHsKICBmaW5hbCBfTmF0aXZlU29ja2V0IF9zb2NrZXQ7CiAgU3RyZWFtQ29udHJvbGxlcjxSYXdTb2NrZXRFdmVudD4gX2NvbnRyb2xsZXI7CiAgYm9vbCBfcmVhZEV2ZW50c0VuYWJsZWQgPSB0cnVlOwogIGJvb2wgX3dyaXRlRXZlbnRzRW5hYmxlZCA9IHRydWU7CgogIC8vIEZsYWcgdG8gaGFuZGxlIEN0cmwtRCBjbG9zaW5nIG9mIHN0ZGlvIG9uIE1hYyBPUy4KICBib29sIF9pc01hY09TVGVybWluYWxJbnB1dCA9IGZhbHNlOwoKICBzdGF0aWMgRnV0dXJlPFJhd1NvY2tldD4gY29ubmVjdCgKICAgICAgaG9zdCwgaW50IHBvcnQsIHNvdXJjZUFkZHJlc3MsIER1cmF0aW9uIHRpbWVvdXQpIHsKICAgIHJldHVybiBfTmF0aXZlU29ja2V0LmNvbm5lY3QoaG9zdCwgcG9ydCwgc291cmNlQWRkcmVzcywgdGltZW91dCkKICAgICAgICAudGhlbigoc29ja2V0KSA9PiBuZXcgX1Jhd1NvY2tldChzb2NrZXQpKTsKICB9CgogIHN0YXRpYyBGdXR1cmU8Q29ubmVjdGlvblRhc2s8X1Jhd1NvY2tldD4+IHN0YXJ0Q29ubmVjdCgKICAgICAgaG9zdCwgaW50IHBvcnQsIHNvdXJjZUFkZHJlc3MpIHsKICAgIHJldHVybiBfTmF0aXZlU29ja2V0LnN0YXJ0Q29ubmVjdChob3N0LCBwb3J0LCBzb3VyY2VBZGRyZXNzKQogICAgICAgIC50aGVuKChDb25uZWN0aW9uVGFzazxfTmF0aXZlU29ja2V0PiBuYXRpdmVUYXNrKSB7CiAgICAgIGZpbmFsIEZ1dHVyZTxfUmF3U29ja2V0PiByYXcgPSBuYXRpdmVUYXNrLnNvY2tldAogICAgICAgICAgLnRoZW4oKF9OYXRpdmVTb2NrZXQgbmF0aXZlU29ja2V0KSA9PiBuZXcgX1Jhd1NvY2tldChuYXRpdmVTb2NrZXQpKTsKICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uVGFzazxfUmF3U29ja2V0Pi5fKAogICAgICAgICAgc29ja2V0OiByYXcsIG9uQ2FuY2VsOiBuYXRpdmVUYXNrLl9vbkNhbmNlbCk7CiAgICB9KTsKICB9CgogIF9SYXdTb2NrZXQodGhpcy5fc29ja2V0KSB7CiAgICB2YXIgem9uZSA9IFpvbmUuY3VycmVudDsKICAgIF9jb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXIoCiAgICAgICAgc3luYzogdHJ1ZSwKICAgICAgICBvbkxpc3RlbjogX29uU3Vic2NyaXB0aW9uU3RhdGVDaGFuZ2UsCiAgICAgICAgb25DYW5jZWw6IF9vblN1YnNjcmlwdGlvblN0YXRlQ2hhbmdlLAogICAgICAgIG9uUGF1c2U6IF9vblBhdXNlU3RhdGVDaGFuZ2UsCiAgICAgICAgb25SZXN1bWU6IF9vblBhdXNlU3RhdGVDaGFuZ2UpOwogICAgX3NvY2tldC5zZXRIYW5kbGVycygKICAgICAgICByZWFkOiAoKSA9PiBfY29udHJvbGxlci5hZGQoUmF3U29ja2V0RXZlbnQucmVhZCksCiAgICAgICAgd3JpdGU6ICgpIHsKICAgICAgICAgIC8vIFRoZSB3cml0ZSBldmVudCBoYW5kbGVyIGlzIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgYnkgdGhlCiAgICAgICAgICAvLyBldmVudCBoYW5kbGVyIHdoZW4gaXQgZmlyZXMuCiAgICAgICAgICB3cml0ZUV2ZW50c0VuYWJsZWQgPSBmYWxzZTsKICAgICAgICAgIF9jb250cm9sbGVyLmFkZChSYXdTb2NrZXRFdmVudC53cml0ZSk7CiAgICAgICAgfSwKICAgICAgICBjbG9zZWQ6ICgpID0+IF9jb250cm9sbGVyLmFkZChSYXdTb2NrZXRFdmVudC5yZWFkQ2xvc2VkKSwKICAgICAgICBkZXN0cm95ZWQ6ICgpIHsKICAgICAgICAgIF9jb250cm9sbGVyLmFkZChSYXdTb2NrZXRFdmVudC5jbG9zZWQpOwogICAgICAgICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICAgICAgICB9LAogICAgICAgIGVycm9yOiB6b25lLmJpbmRCaW5hcnlDYWxsYmFja0d1YXJkZWQoKGUsIHN0KSB7CiAgICAgICAgICBfY29udHJvbGxlci5hZGRFcnJvcihlLCBzdCk7CiAgICAgICAgICBfc29ja2V0LmNsb3NlKCk7CiAgICAgICAgfSkpOwogIH0KCiAgZmFjdG9yeSBfUmF3U29ja2V0Ll93cml0ZVBpcGUoKSB7CiAgICB2YXIgbmF0aXZlID0gbmV3IF9OYXRpdmVTb2NrZXQucGlwZSgpOwogICAgbmF0aXZlLmlzQ2xvc2VkUmVhZCA9IHRydWU7CiAgICBuYXRpdmUuY2xvc2VkUmVhZEV2ZW50U2VudCA9IHRydWU7CiAgICByZXR1cm4gbmV3IF9SYXdTb2NrZXQobmF0aXZlKTsKICB9CgogIGZhY3RvcnkgX1Jhd1NvY2tldC5fcmVhZFBpcGUoaW50IGZkKSB7CiAgICB2YXIgbmF0aXZlID0gbmV3IF9OYXRpdmVTb2NrZXQucGlwZSgpOwogICAgbmF0aXZlLmlzQ2xvc2VkV3JpdGUgPSB0cnVlOwogICAgaWYgKGZkICE9IG51bGwpIF9nZXRTdGRpb0hhbmRsZShuYXRpdmUsIGZkKTsKICAgIHZhciByZXN1bHQgPSBuZXcgX1Jhd1NvY2tldChuYXRpdmUpOwogICAgaWYgKGZkICE9IG51bGwpIHsKICAgICAgdmFyIHNvY2tldFR5cGUgPSBfU3RkSU9VdGlscy5fbmF0aXZlU29ja2V0VHlwZShyZXN1bHQuX3NvY2tldCk7CiAgICAgIHJlc3VsdC5faXNNYWNPU1Rlcm1pbmFsSW5wdXQgPQogICAgICAgICAgUGxhdGZvcm0uaXNNYWNPUyAmJiBzb2NrZXRUeXBlID09IF9zdGRpb0hhbmRsZVR5cGVUZXJtaW5hbDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBTdHJlYW1TdWJzY3JpcHRpb248UmF3U29ja2V0RXZlbnQ+IGxpc3Rlbih2b2lkIG9uRGF0YShSYXdTb2NrZXRFdmVudCBldmVudCksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICByZXR1cm4gX2NvbnRyb2xsZXIuc3RyZWFtLmxpc3RlbihvbkRhdGEsCiAgICAgICAgb25FcnJvcjogb25FcnJvciwgb25Eb25lOiBvbkRvbmUsIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwogIH0KCiAgaW50IGF2YWlsYWJsZSgpID0+IF9zb2NrZXQuYXZhaWxhYmxlOwoKICBVaW50OExpc3QgcmVhZChbaW50IGxlbl0pIHsKICAgIGlmIChfaXNNYWNPU1Rlcm1pbmFsSW5wdXQpIHsKICAgICAgdmFyIGF2YWlsYWJsZSA9IHRoaXMuYXZhaWxhYmxlKCk7CiAgICAgIGlmIChhdmFpbGFibGUgPT0gMCkgcmV0dXJuIG51bGw7CiAgICAgIHZhciBkYXRhID0gX3NvY2tldC5yZWFkKGxlbik7CiAgICAgIGlmIChkYXRhID09IG51bGwgfHwgZGF0YS5sZW5ndGggPCBhdmFpbGFibGUpIHsKICAgICAgICAvLyBSZWFkaW5nIGxlc3MgdGhhbiBhdmFpbGFibGUgZnJvbSBhIE1hYyBPUyB0ZXJtaW5hbCBpbmRpY2F0ZSBDdHJsLUQuCiAgICAgICAgLy8gVGhpcyBpcyBpbnRlcnByZXRlZCBhcyByZWFkIGNsb3NlZC4KICAgICAgICBzY2hlZHVsZU1pY3JvdGFzaygoKSA9PiBfY29udHJvbGxlci5hZGQoUmF3U29ja2V0RXZlbnQucmVhZENsb3NlZCkpOwogICAgICB9CiAgICAgIHJldHVybiBkYXRhOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIF9zb2NrZXQucmVhZChsZW4pOwogICAgfQogIH0KCiAgaW50IHdyaXRlKExpc3Q8aW50PiBidWZmZXIsIFtpbnQgb2Zmc2V0LCBpbnQgY291bnRdKSA9PgogICAgICBfc29ja2V0LndyaXRlKGJ1ZmZlciwgb2Zmc2V0LCBjb3VudCk7CgogIEZ1dHVyZTxSYXdTb2NrZXQ+IGNsb3NlKCkgPT4gX3NvY2tldC5jbG9zZSgpLnRoZW48UmF3U29ja2V0PigoXykgPT4gdGhpcyk7CgogIHZvaWQgc2h1dGRvd24oU29ja2V0RGlyZWN0aW9uIGRpcmVjdGlvbikgPT4gX3NvY2tldC5zaHV0ZG93bihkaXJlY3Rpb24pOwoKICBpbnQgZ2V0IHBvcnQgPT4gX3NvY2tldC5wb3J0OwoKICBpbnQgZ2V0IHJlbW90ZVBvcnQgPT4gX3NvY2tldC5yZW1vdGVQb3J0OwoKICBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFkZHJlc3MgPT4gX3NvY2tldC5hZGRyZXNzOwoKICBJbnRlcm5ldEFkZHJlc3MgZ2V0IHJlbW90ZUFkZHJlc3MgPT4gX3NvY2tldC5yZW1vdGVBZGRyZXNzOwoKICBib29sIGdldCByZWFkRXZlbnRzRW5hYmxlZCA9PiBfcmVhZEV2ZW50c0VuYWJsZWQ7CiAgdm9pZCBzZXQgcmVhZEV2ZW50c0VuYWJsZWQoYm9vbCB2YWx1ZSkgewogICAgaWYgKHZhbHVlICE9IF9yZWFkRXZlbnRzRW5hYmxlZCkgewogICAgICBfcmVhZEV2ZW50c0VuYWJsZWQgPSB2YWx1ZTsKICAgICAgaWYgKCFfY29udHJvbGxlci5pc1BhdXNlZCkgX3Jlc3VtZSgpOwogICAgfQogIH0KCiAgYm9vbCBnZXQgd3JpdGVFdmVudHNFbmFibGVkID0+IF93cml0ZUV2ZW50c0VuYWJsZWQ7CiAgdm9pZCBzZXQgd3JpdGVFdmVudHNFbmFibGVkKGJvb2wgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSAhPSBfd3JpdGVFdmVudHNFbmFibGVkKSB7CiAgICAgIF93cml0ZUV2ZW50c0VuYWJsZWQgPSB2YWx1ZTsKICAgICAgaWYgKCFfY29udHJvbGxlci5pc1BhdXNlZCkgX3Jlc3VtZSgpOwogICAgfQogIH0KCiAgYm9vbCBzZXRPcHRpb24oU29ja2V0T3B0aW9uIG9wdGlvbiwgYm9vbCBlbmFibGVkKSA9PgogICAgICBfc29ja2V0LnNldE9wdGlvbihvcHRpb24sIGVuYWJsZWQpOwoKICBVaW50OExpc3QgZ2V0UmF3T3B0aW9uKFJhd1NvY2tldE9wdGlvbiBvcHRpb24pID0+CiAgICAgIF9zb2NrZXQuZ2V0UmF3T3B0aW9uKG9wdGlvbik7CiAgdm9pZCBzZXRSYXdPcHRpb24oUmF3U29ja2V0T3B0aW9uIG9wdGlvbikgPT4gX3NvY2tldC5zZXRSYXdPcHRpb24ob3B0aW9uKTsKCiAgX3BhdXNlKCkgewogICAgX3NvY2tldC5zZXRMaXN0ZW5pbmcocmVhZDogZmFsc2UsIHdyaXRlOiBmYWxzZSk7CiAgfQoKICB2b2lkIF9yZXN1bWUoKSB7CiAgICBfc29ja2V0LnNldExpc3RlbmluZyhyZWFkOiBfcmVhZEV2ZW50c0VuYWJsZWQsIHdyaXRlOiBfd3JpdGVFdmVudHNFbmFibGVkKTsKICB9CgogIHZvaWQgX29uUGF1c2VTdGF0ZUNoYW5nZSgpIHsKICAgIGlmIChfY29udHJvbGxlci5pc1BhdXNlZCkgewogICAgICBfcGF1c2UoKTsKICAgIH0gZWxzZSB7CiAgICAgIF9yZXN1bWUoKTsKICAgIH0KICB9CgogIHZvaWQgX29uU3Vic2NyaXB0aW9uU3RhdGVDaGFuZ2UoKSB7CiAgICBpZiAoX2NvbnRyb2xsZXIuaGFzTGlzdGVuZXIpIHsKICAgICAgX3Jlc3VtZSgpOwogICAgfSBlbHNlIHsKICAgICAgX3NvY2tldC5jbG9zZSgpOwogICAgfQogIH0KCiAgdm9pZCBzZXQgX293bmVyKG93bmVyKSB7CiAgICBfc29ja2V0Lm93bmVyID0gb3duZXI7CiAgfQp9CgpAcGF0Y2gKY2xhc3MgU2VydmVyU29ja2V0IHsKICBAcGF0Y2gKICBzdGF0aWMgRnV0dXJlPFNlcnZlclNvY2tldD4gYmluZChhZGRyZXNzLCBpbnQgcG9ydCwKICAgICAge2ludCBiYWNrbG9nOiAwLCBib29sIHY2T25seTogZmFsc2UsIGJvb2wgc2hhcmVkOiBmYWxzZX0pIHsKICAgIHJldHVybiBfU2VydmVyU29ja2V0LmJpbmQoYWRkcmVzcywgcG9ydCwgYmFja2xvZywgdjZPbmx5LCBzaGFyZWQpOwogIH0KfQoKY2xhc3MgX1NlcnZlclNvY2tldCBleHRlbmRzIFN0cmVhbTxTb2NrZXQ+IGltcGxlbWVudHMgU2VydmVyU29ja2V0IHsKICBmaW5hbCBfc29ja2V0OwoKICBzdGF0aWMgRnV0dXJlPF9TZXJ2ZXJTb2NrZXQ+IGJpbmQoCiAgICAgIGFkZHJlc3MsIGludCBwb3J0LCBpbnQgYmFja2xvZywgYm9vbCB2Nk9ubHksIGJvb2wgc2hhcmVkKSB7CiAgICByZXR1cm4gX1Jhd1NlcnZlclNvY2tldC5iaW5kKGFkZHJlc3MsIHBvcnQsIGJhY2tsb2csIHY2T25seSwgc2hhcmVkKQogICAgICAgIC50aGVuKChzb2NrZXQpID0+IG5ldyBfU2VydmVyU29ja2V0KHNvY2tldCkpOwogIH0KCiAgX1NlcnZlclNvY2tldCh0aGlzLl9zb2NrZXQpOwoKICBTdHJlYW1TdWJzY3JpcHRpb248U29ja2V0PiBsaXN0ZW4odm9pZCBvbkRhdGEoU29ja2V0IGV2ZW50KSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIHJldHVybiBfc29ja2V0Lm1hcDxTb2NrZXQ+KChyYXdTb2NrZXQpID0+IG5ldyBfU29ja2V0KHJhd1NvY2tldCkpLmxpc3RlbigKICAgICAgICBvbkRhdGEsCiAgICAgICAgb25FcnJvcjogb25FcnJvciwKICAgICAgICBvbkRvbmU6IG9uRG9uZSwKICAgICAgICBjYW5jZWxPbkVycm9yOiBjYW5jZWxPbkVycm9yKTsKICB9CgogIGludCBnZXQgcG9ydCA9PiBfc29ja2V0LnBvcnQ7CgogIEludGVybmV0QWRkcmVzcyBnZXQgYWRkcmVzcyA9PiBfc29ja2V0LmFkZHJlc3M7CgogIEZ1dHVyZTxTZXJ2ZXJTb2NrZXQ+IGNsb3NlKCkgPT4KICAgICAgX3NvY2tldC5jbG9zZSgpLnRoZW48U2VydmVyU29ja2V0PigoXykgPT4gdGhpcyk7CgogIHZvaWQgc2V0IF9vd25lcihvd25lcikgewogICAgX3NvY2tldC5fb3duZXIgPSBvd25lcjsKICB9Cn0KCkBwYXRjaApjbGFzcyBTb2NrZXQgewogIEBwYXRjaAogIHN0YXRpYyBGdXR1cmU8U29ja2V0PiBfY29ubmVjdChob3N0LCBpbnQgcG9ydCwKICAgICAge3NvdXJjZUFkZHJlc3MsIER1cmF0aW9uIHRpbWVvdXR9KSB7CiAgICByZXR1cm4gUmF3U29ja2V0LmNvbm5lY3QoaG9zdCwgcG9ydCwKICAgICAgICAgICAgc291cmNlQWRkcmVzczogc291cmNlQWRkcmVzcywgdGltZW91dDogdGltZW91dCkKICAgICAgICAudGhlbigoc29ja2V0KSA9PiBuZXcgX1NvY2tldChzb2NrZXQpKTsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBGdXR1cmU8Q29ubmVjdGlvblRhc2s8U29ja2V0Pj4gX3N0YXJ0Q29ubmVjdChob3N0LCBpbnQgcG9ydCwKICAgICAge3NvdXJjZUFkZHJlc3N9KSB7CiAgICByZXR1cm4gUmF3U29ja2V0LnN0YXJ0Q29ubmVjdChob3N0LCBwb3J0LCBzb3VyY2VBZGRyZXNzOiBzb3VyY2VBZGRyZXNzKQogICAgICAgIC50aGVuKChyYXdUYXNrKSB7CiAgICAgIEZ1dHVyZTxTb2NrZXQ+IHNvY2tldCA9CiAgICAgICAgICByYXdUYXNrLnNvY2tldC50aGVuKChyYXdTb2NrZXQpID0+IG5ldyBfU29ja2V0KHJhd1NvY2tldCkpOwogICAgICByZXR1cm4gbmV3IENvbm5lY3Rpb25UYXNrPFNvY2tldD4uXygKICAgICAgICAgIHNvY2tldDogc29ja2V0LCBvbkNhbmNlbDogcmF3VGFzay5fb25DYW5jZWwpOwogICAgfSk7CiAgfQp9CgpjbGFzcyBfU29ja2V0U3RyZWFtQ29uc3VtZXIgZXh0ZW5kcyBTdHJlYW1Db25zdW1lcjxMaXN0PGludD4+IHsKICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uOwogIGZpbmFsIF9Tb2NrZXQgc29ja2V0OwogIGludCBvZmZzZXQ7CiAgTGlzdDxpbnQ+IGJ1ZmZlcjsKICBib29sIHBhdXNlZCA9IGZhbHNlOwogIENvbXBsZXRlciBzdHJlYW1Db21wbGV0ZXI7CgogIF9Tb2NrZXRTdHJlYW1Db25zdW1lcih0aGlzLnNvY2tldCk7CgogIEZ1dHVyZTxTb2NrZXQ+IGFkZFN0cmVhbShTdHJlYW08TGlzdDxpbnQ+PiBzdHJlYW0pIHsKICAgIHNvY2tldC5fZW5zdXJlUmF3U29ja2V0U3Vic2NyaXB0aW9uKCk7CiAgICBzdHJlYW1Db21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPFNvY2tldD4oKTsKICAgIGlmIChzb2NrZXQuX3JhdyAhPSBudWxsKSB7CiAgICAgIHN1YnNjcmlwdGlvbiA9IHN0cmVhbS5saXN0ZW4oKGRhdGEpIHsKICAgICAgICBhc3NlcnQoIXBhdXNlZCk7CiAgICAgICAgYXNzZXJ0KGJ1ZmZlciA9PSBudWxsKTsKICAgICAgICBidWZmZXIgPSBkYXRhOwogICAgICAgIG9mZnNldCA9IDA7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHdyaXRlKCk7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgc29ja2V0LmRlc3Ryb3koKTsKICAgICAgICAgIHN0b3AoKTsKICAgICAgICAgIGRvbmUoZSk7CiAgICAgICAgfQogICAgICB9LCBvbkVycm9yOiAoZXJyb3IsIFtzdGFja1RyYWNlXSkgewogICAgICAgIHNvY2tldC5kZXN0cm95KCk7CiAgICAgICAgZG9uZShlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIH0sIG9uRG9uZTogKCkgewogICAgICAgIGRvbmUoKTsKICAgICAgfSwgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICB9CiAgICByZXR1cm4gc3RyZWFtQ29tcGxldGVyLmZ1dHVyZTsKICB9CgogIEZ1dHVyZTxTb2NrZXQ+IGNsb3NlKCkgewogICAgc29ja2V0Ll9jb25zdW1lckRvbmUoKTsKICAgIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKHNvY2tldCk7CiAgfQoKICB2b2lkIHdyaXRlKCkgewogICAgaWYgKHN1YnNjcmlwdGlvbiA9PSBudWxsKSByZXR1cm47CiAgICBhc3NlcnQoYnVmZmVyICE9IG51bGwpOwogICAgLy8gV3JpdGUgYXMgbXVjaCBhcyBwb3NzaWJsZS4KICAgIG9mZnNldCArPSBzb2NrZXQuX3dyaXRlKGJ1ZmZlciwgb2Zmc2V0LCBidWZmZXIubGVuZ3RoIC0gb2Zmc2V0KTsKICAgIGlmIChvZmZzZXQgPCBidWZmZXIubGVuZ3RoKSB7CiAgICAgIGlmICghcGF1c2VkKSB7CiAgICAgICAgcGF1c2VkID0gdHJ1ZTsKICAgICAgICBzdWJzY3JpcHRpb24ucGF1c2UoKTsKICAgICAgfQogICAgICBzb2NrZXQuX2VuYWJsZVdyaXRlRXZlbnQoKTsKICAgIH0gZWxzZSB7CiAgICAgIGJ1ZmZlciA9IG51bGw7CiAgICAgIGlmIChwYXVzZWQpIHsKICAgICAgICBwYXVzZWQgPSBmYWxzZTsKICAgICAgICBzdWJzY3JpcHRpb24ucmVzdW1lKCk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgZG9uZShbZXJyb3IsIHN0YWNrVHJhY2VdKSB7CiAgICBpZiAoc3RyZWFtQ29tcGxldGVyICE9IG51bGwpIHsKICAgICAgaWYgKGVycm9yICE9IG51bGwpIHsKICAgICAgICBzdHJlYW1Db21wbGV0ZXIuY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3RyZWFtQ29tcGxldGVyLmNvbXBsZXRlKHNvY2tldCk7CiAgICAgIH0KICAgICAgc3RyZWFtQ29tcGxldGVyID0gbnVsbDsKICAgIH0KICB9CgogIHZvaWQgc3RvcCgpIHsKICAgIGlmIChzdWJzY3JpcHRpb24gPT0gbnVsbCkgcmV0dXJuOwogICAgc3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogICAgc3Vic2NyaXB0aW9uID0gbnVsbDsKICAgIHBhdXNlZCA9IGZhbHNlOwogICAgc29ja2V0Ll9kaXNhYmxlV3JpdGVFdmVudCgpOwogIH0KfQoKY2xhc3MgX1NvY2tldCBleHRlbmRzIFN0cmVhbTxVaW50OExpc3Q+IGltcGxlbWVudHMgU29ja2V0IHsKICBSYXdTb2NrZXQgX3JhdzsgLy8gU2V0IHRvIG51bGwgd2hlbiB0aGUgcmF3IHNvY2tldCBpcyBjbG9zZWQuCiAgYm9vbCBfY2xvc2VkID0gZmFsc2U7IC8vIFNldCB0byB0cnVlIHdoZW4gdGhlIHJhdyBzb2NrZXQgaXMgY2xvc2VkLgogIFN0cmVhbUNvbnRyb2xsZXI8VWludDhMaXN0PiBfY29udHJvbGxlcjsKICBib29sIF9jb250cm9sbGVyQ2xvc2VkID0gZmFsc2U7CiAgX1NvY2tldFN0cmVhbUNvbnN1bWVyIF9jb25zdW1lcjsKICBJT1NpbmsgX3Npbms7CiAgdmFyIF9zdWJzY3JpcHRpb247CiAgdmFyIF9kZXRhY2hSZWFkeTsKCiAgX1NvY2tldCh0aGlzLl9yYXcpIHsKICAgIF9jb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXI8VWludDhMaXN0PigKICAgICAgICBzeW5jOiB0cnVlLAogICAgICAgIG9uTGlzdGVuOiBfb25TdWJzY3JpcHRpb25TdGF0ZUNoYW5nZSwKICAgICAgICBvbkNhbmNlbDogX29uU3Vic2NyaXB0aW9uU3RhdGVDaGFuZ2UsCiAgICAgICAgb25QYXVzZTogX29uUGF1c2VTdGF0ZUNoYW5nZSwKICAgICAgICBvblJlc3VtZTogX29uUGF1c2VTdGF0ZUNoYW5nZSk7CiAgICBfY29uc3VtZXIgPSBuZXcgX1NvY2tldFN0cmVhbUNvbnN1bWVyKHRoaXMpOwogICAgX3NpbmsgPSBuZXcgSU9TaW5rKF9jb25zdW1lcik7CgogICAgLy8gRGlzYWJsZSByZWFkIGV2ZW50cyB1bnRpbCB0aGVyZSBpcyBhIHN1YnNjcmlwdGlvbi4KICAgIF9yYXcucmVhZEV2ZW50c0VuYWJsZWQgPSBmYWxzZTsKCiAgICAvLyBEaXNhYmxlIHdyaXRlIGV2ZW50cyB1bnRpbCB0aGUgY29uc3VtZXIgbmVlZHMgaXQgZm9yIHBlbmRpbmcgd3JpdGVzLgogICAgX3Jhdy53cml0ZUV2ZW50c0VuYWJsZWQgPSBmYWxzZTsKICB9CgogIGZhY3RvcnkgX1NvY2tldC5fd3JpdGVQaXBlKCkgewogICAgcmV0dXJuIG5ldyBfU29ja2V0KG5ldyBfUmF3U29ja2V0Ll93cml0ZVBpcGUoKSk7CiAgfQoKICBmYWN0b3J5IF9Tb2NrZXQuX3JlYWRQaXBlKFtpbnQgZmRdKSB7CiAgICByZXR1cm4gbmV3IF9Tb2NrZXQobmV3IF9SYXdTb2NrZXQuX3JlYWRQaXBlKGZkKSk7CiAgfQoKICAvLyBOb3RlOiB0aGlzIGNvZGUgc2VlbXMgYSBiaXQgc3VzcGljaW91cyBiZWNhdXNlIF9yYXcgY2FuIGJlIF9SYXdTb2NrZXQgYW5kCiAgLy8gaXQgY2FuIGJlIF9SYXdTZWN1cmVTb2NrZXQgYmVjYXVzZSBfU2VjdXJlU29ja2V0IGV4dGVuZHMgX1NvY2tldAogIC8vIGFuZCB0aGVzZSB0d28gdHlwZXMgYXJlIGluY29tcGF0aWJsZSBiZWNhdXNlIF9SYXdTZWN1cmVTb2NrZXQuX3NvY2tldAogIC8vIGlzIFNvY2tldCBhbmQgbm90IF9OYXRpdmVTb2NrZXQuCiAgX05hdGl2ZVNvY2tldCBnZXQgX25hdGl2ZVNvY2tldCA9PiAoX3JhdyBhcyBfUmF3U29ja2V0KS5fc29ja2V0OwoKICBTdHJlYW1TdWJzY3JpcHRpb248VWludDhMaXN0PiBsaXN0ZW4odm9pZCBvbkRhdGEoVWludDhMaXN0IGV2ZW50KSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIHJldHVybiBfY29udHJvbGxlci5zdHJlYW0ubGlzdGVuKG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLCBvbkRvbmU6IG9uRG9uZSwgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgfQoKICBFbmNvZGluZyBnZXQgZW5jb2RpbmcgPT4gX3NpbmsuZW5jb2Rpbmc7CgogIHZvaWQgc2V0IGVuY29kaW5nKEVuY29kaW5nIHZhbHVlKSB7CiAgICBfc2luay5lbmNvZGluZyA9IHZhbHVlOwogIH0KCiAgdm9pZCB3cml0ZShPYmplY3Qgb2JqKSA9PiBfc2luay53cml0ZShvYmopOwoKICB2b2lkIHdyaXRlbG4oW09iamVjdCBvYmogPSAiIl0pID0+IF9zaW5rLndyaXRlbG4ob2JqKTsKCiAgdm9pZCB3cml0ZUNoYXJDb2RlKGludCBjaGFyQ29kZSkgPT4gX3Npbmsud3JpdGVDaGFyQ29kZShjaGFyQ29kZSk7CgogIHZvaWQgd3JpdGVBbGwoSXRlcmFibGUgb2JqZWN0cywgW3NlcCA9ICIiXSkgPT4gX3Npbmsud3JpdGVBbGwob2JqZWN0cywgc2VwKTsKCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGJ5dGVzKSA9PiBfc2luay5hZGQoYnl0ZXMpOwoKICB2b2lkIGFkZEVycm9yKE9iamVjdCBlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3Qgc2VuZCBlcnJvcnMgb24gc29ja2V0cyIpOwogIH0KCiAgRnV0dXJlIGFkZFN0cmVhbShTdHJlYW08TGlzdDxpbnQ+PiBzdHJlYW0pIHsKICAgIHJldHVybiBfc2luay5hZGRTdHJlYW0oc3RyZWFtKTsKICB9CgogIEZ1dHVyZSBmbHVzaCgpID0+IF9zaW5rLmZsdXNoKCk7CgogIEZ1dHVyZSBjbG9zZSgpID0+IF9zaW5rLmNsb3NlKCk7CgogIEZ1dHVyZSBnZXQgZG9uZSA9PiBfc2luay5kb25lOwoKICB2b2lkIGRlc3Ryb3koKSB7CiAgICAvLyBEZXN0cm95IGNhbiBhbHdheXMgYmUgY2FsbGVkIHRvIGdldCByaWQgb2YgYSBzb2NrZXQuCiAgICBpZiAoX3JhdyA9PSBudWxsKSByZXR1cm47CiAgICBfY29uc3VtZXIuc3RvcCgpOwogICAgX2Nsb3NlUmF3U29ja2V0KCk7CiAgICBfY29udHJvbGxlckNsb3NlZCA9IHRydWU7CiAgICBfY29udHJvbGxlci5jbG9zZSgpOwogIH0KCiAgYm9vbCBzZXRPcHRpb24oU29ja2V0T3B0aW9uIG9wdGlvbiwgYm9vbCBlbmFibGVkKSB7CiAgICBpZiAoX3JhdyA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX3Jhdy5zZXRPcHRpb24ob3B0aW9uLCBlbmFibGVkKTsKICB9CgogIFVpbnQ4TGlzdCBnZXRSYXdPcHRpb24oUmF3U29ja2V0T3B0aW9uIG9wdGlvbikgewogICAgaWYgKF9yYXcgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX3Jhdy5nZXRSYXdPcHRpb24ob3B0aW9uKTsKICB9CgogIHZvaWQgc2V0UmF3T3B0aW9uKFJhd1NvY2tldE9wdGlvbiBvcHRpb24pIHsKICAgIF9yYXc/LnNldFJhd09wdGlvbihvcHRpb24pOwogIH0KCiAgaW50IGdldCBwb3J0IHsKICAgIGlmIChfcmF3ID09IG51bGwpIHRocm93IGNvbnN0IFNvY2tldEV4Y2VwdGlvbi5jbG9zZWQoKTsKICAgIDsKICAgIHJldHVybiBfcmF3LnBvcnQ7CiAgfQoKICBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFkZHJlc3MgewogICAgaWYgKF9yYXcgPT0gbnVsbCkgdGhyb3cgY29uc3QgU29ja2V0RXhjZXB0aW9uLmNsb3NlZCgpOwogICAgOwogICAgcmV0dXJuIF9yYXcuYWRkcmVzczsKICB9CgogIGludCBnZXQgcmVtb3RlUG9ydCB7CiAgICBpZiAoX3JhdyA9PSBudWxsKSB0aHJvdyBjb25zdCBTb2NrZXRFeGNlcHRpb24uY2xvc2VkKCk7CiAgICA7CiAgICByZXR1cm4gX3Jhdy5yZW1vdGVQb3J0OwogIH0KCiAgSW50ZXJuZXRBZGRyZXNzIGdldCByZW1vdGVBZGRyZXNzIHsKICAgIGlmIChfcmF3ID09IG51bGwpIHRocm93IGNvbnN0IFNvY2tldEV4Y2VwdGlvbi5jbG9zZWQoKTsKICAgIDsKICAgIHJldHVybiBfcmF3LnJlbW90ZUFkZHJlc3M7CiAgfQoKICBGdXR1cmUgX2RldGFjaFJhdygpIHsKICAgIF9kZXRhY2hSZWFkeSA9IG5ldyBDb21wbGV0ZXIoKTsKICAgIF9zaW5rLmNsb3NlKCk7CiAgICByZXR1cm4gX2RldGFjaFJlYWR5LmZ1dHVyZS50aGVuKChfKSB7CiAgICAgIGFzc2VydChfY29uc3VtZXIuYnVmZmVyID09IG51bGwpOwogICAgICB2YXIgcmF3ID0gX3JhdzsKICAgICAgX3JhdyA9IG51bGw7CiAgICAgIHJldHVybiBbcmF3LCBfc3Vic2NyaXB0aW9uXTsKICAgIH0pOwogIH0KCiAgLy8gRW5zdXJlIGEgc3Vic2NyaXB0aW9uIG9uIHRoZSByYXcgc29ja2V0LiBCb3RoIHRoZSBzdHJlYW0gYW5kIHRoZQogIC8vIGNvbnN1bWVyIG5lZWRzIGEgc3Vic2NyaXB0aW9uIGFzIHRoZXkgc2hhcmUgdGhlIGVycm9yIGFuZCBkb25lCiAgLy8gZXZlbnRzIGZyb20gdGhlIHJhdyBzb2NrZXQuCiAgdm9pZCBfZW5zdXJlUmF3U29ja2V0U3Vic2NyaXB0aW9uKCkgewogICAgaWYgKF9zdWJzY3JpcHRpb24gPT0gbnVsbCAmJiBfcmF3ICE9IG51bGwpIHsKICAgICAgX3N1YnNjcmlwdGlvbiA9IF9yYXcubGlzdGVuKF9vbkRhdGEsCiAgICAgICAgICBvbkVycm9yOiBfb25FcnJvciwgb25Eb25lOiBfb25Eb25lLCBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIH0KICB9CgogIF9jbG9zZVJhd1NvY2tldCgpIHsKICAgIHZhciB0bXAgPSBfcmF3OwogICAgX3JhdyA9IG51bGw7CiAgICBfY2xvc2VkID0gdHJ1ZTsKICAgIHRtcC5jbG9zZSgpOwogIH0KCiAgdm9pZCBfb25TdWJzY3JpcHRpb25TdGF0ZUNoYW5nZSgpIHsKICAgIGlmIChfY29udHJvbGxlci5oYXNMaXN0ZW5lcikgewogICAgICBfZW5zdXJlUmF3U29ja2V0U3Vic2NyaXB0aW9uKCk7CiAgICAgIC8vIEVuYWJsZSByZWFkIGV2ZW50cyBmb3IgcHJvdmlkaW5nIGRhdGEgdG8gc3Vic2NyaXB0aW9uLgogICAgICBpZiAoX3JhdyAhPSBudWxsKSB7CiAgICAgICAgX3Jhdy5yZWFkRXZlbnRzRW5hYmxlZCA9IHRydWU7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIF9jb250cm9sbGVyQ2xvc2VkID0gdHJ1ZTsKICAgICAgaWYgKF9yYXcgIT0gbnVsbCkgewogICAgICAgIF9yYXcuc2h1dGRvd24oU29ja2V0RGlyZWN0aW9uLnJlY2VpdmUpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIF9vblBhdXNlU3RhdGVDaGFuZ2UoKSB7CiAgICBpZiAoX3JhdyAhPSBudWxsKSB7CiAgICAgIF9yYXcucmVhZEV2ZW50c0VuYWJsZWQgPSAhX2NvbnRyb2xsZXIuaXNQYXVzZWQ7CiAgICB9CiAgfQoKICB2b2lkIF9vbkRhdGEoZXZlbnQpIHsKICAgIHN3aXRjaCAoZXZlbnQpIHsKICAgICAgY2FzZSBSYXdTb2NrZXRFdmVudC5yZWFkOgogICAgICAgIGlmIChfcmF3ID09IG51bGwpIGJyZWFrOwogICAgICAgIHZhciBidWZmZXIgPSBfcmF3LnJlYWQoKTsKICAgICAgICBpZiAoYnVmZmVyICE9IG51bGwpIF9jb250cm9sbGVyLmFkZChidWZmZXIpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFJhd1NvY2tldEV2ZW50LndyaXRlOgogICAgICAgIF9jb25zdW1lci53cml0ZSgpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFJhd1NvY2tldEV2ZW50LnJlYWRDbG9zZWQ6CiAgICAgICAgX2NvbnRyb2xsZXJDbG9zZWQgPSB0cnVlOwogICAgICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgfQoKICB2b2lkIF9vbkRvbmUoKSB7CiAgICBpZiAoIV9jb250cm9sbGVyQ2xvc2VkKSB7CiAgICAgIF9jb250cm9sbGVyQ2xvc2VkID0gdHJ1ZTsKICAgICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICAgIH0KICAgIF9jb25zdW1lci5kb25lKCk7CiAgfQoKICB2b2lkIF9vbkVycm9yKGVycm9yLCBzdGFja1RyYWNlKSB7CiAgICBpZiAoIV9jb250cm9sbGVyQ2xvc2VkKSB7CiAgICAgIF9jb250cm9sbGVyQ2xvc2VkID0gdHJ1ZTsKICAgICAgX2NvbnRyb2xsZXIuYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgfQogICAgX2NvbnN1bWVyLmRvbmUoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgaW50IF93cml0ZShMaXN0PGludD4gZGF0YSwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgewogICAgaWYgKF9yYXcgIT0gbnVsbCkgewogICAgICByZXR1cm4gX3Jhdy53cml0ZShkYXRhLCBvZmZzZXQsIGxlbmd0aCk7CiAgICB9CiAgICByZXR1cm4gMDsKICB9CgogIHZvaWQgX2VuYWJsZVdyaXRlRXZlbnQoKSB7CiAgICBpZiAoX3JhdyAhPSBudWxsKSB7CiAgICAgIF9yYXcud3JpdGVFdmVudHNFbmFibGVkID0gdHJ1ZTsKICAgIH0KICB9CgogIHZvaWQgX2Rpc2FibGVXcml0ZUV2ZW50KCkgewogICAgaWYgKF9yYXcgIT0gbnVsbCkgewogICAgICBfcmF3LndyaXRlRXZlbnRzRW5hYmxlZCA9IGZhbHNlOwogICAgfQogIH0KCiAgdm9pZCBfY29uc3VtZXJEb25lKCkgewogICAgaWYgKF9kZXRhY2hSZWFkeSAhPSBudWxsKSB7CiAgICAgIF9kZXRhY2hSZWFkeS5jb21wbGV0ZShudWxsKTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChfcmF3ICE9IG51bGwpIHsKICAgICAgICBfcmF3LnNodXRkb3duKFNvY2tldERpcmVjdGlvbi5zZW5kKTsKICAgICAgICBfZGlzYWJsZVdyaXRlRXZlbnQoKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBzZXQgX293bmVyKG93bmVyKSB7CiAgICAvLyBOb3RlOiBfcmF3IGNhbiBiZSBfUmF3U29ja2V0IGFuZCBfUmF3U2VjdXJlU29ja2V0IHdoaWNoIGFyZSB0d28KICAgIC8vIGluY29tcGF0aWJsZSB0eXBlcy4KICAgIChfcmF3IGFzIGR5bmFtaWMpLl9vd25lciA9IG93bmVyOwogIH0KfQoKQHBhdGNoCmNsYXNzIFJhd0RhdGFncmFtU29ja2V0IHsKICBAcGF0Y2gKICBzdGF0aWMgRnV0dXJlPFJhd0RhdGFncmFtU29ja2V0PiBiaW5kKGhvc3QsIGludCBwb3J0LAogICAgICB7Ym9vbCByZXVzZUFkZHJlc3M6IHRydWUsIGJvb2wgcmV1c2VQb3J0OiBmYWxzZSwgaW50IHR0bDogMX0pIHsKICAgIHJldHVybiBfUmF3RGF0YWdyYW1Tb2NrZXQuYmluZChob3N0LCBwb3J0LCByZXVzZUFkZHJlc3MsIHJldXNlUG9ydCwgdHRsKTsKICB9Cn0KCmNsYXNzIF9SYXdEYXRhZ3JhbVNvY2tldCBleHRlbmRzIFN0cmVhbTxSYXdTb2NrZXRFdmVudD4KICAgIGltcGxlbWVudHMgUmF3RGF0YWdyYW1Tb2NrZXQgewogIF9OYXRpdmVTb2NrZXQgX3NvY2tldDsKICBTdHJlYW1Db250cm9sbGVyPFJhd1NvY2tldEV2ZW50PiBfY29udHJvbGxlcjsKICBib29sIF9yZWFkRXZlbnRzRW5hYmxlZCA9IHRydWU7CiAgYm9vbCBfd3JpdGVFdmVudHNFbmFibGVkID0gdHJ1ZTsKCiAgX1Jhd0RhdGFncmFtU29ja2V0KHRoaXMuX3NvY2tldCkgewogICAgdmFyIHpvbmUgPSBab25lLmN1cnJlbnQ7CiAgICBfY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPFJhd1NvY2tldEV2ZW50PigKICAgICAgICBzeW5jOiB0cnVlLAogICAgICAgIG9uTGlzdGVuOiBfb25TdWJzY3JpcHRpb25TdGF0ZUNoYW5nZSwKICAgICAgICBvbkNhbmNlbDogX29uU3Vic2NyaXB0aW9uU3RhdGVDaGFuZ2UsCiAgICAgICAgb25QYXVzZTogX29uUGF1c2VTdGF0ZUNoYW5nZSwKICAgICAgICBvblJlc3VtZTogX29uUGF1c2VTdGF0ZUNoYW5nZSk7CiAgICBfc29ja2V0LnNldEhhbmRsZXJzKAogICAgICAgIHJlYWQ6ICgpID0+IF9jb250cm9sbGVyLmFkZChSYXdTb2NrZXRFdmVudC5yZWFkKSwKICAgICAgICB3cml0ZTogKCkgewogICAgICAgICAgLy8gVGhlIHdyaXRlIGV2ZW50IGhhbmRsZXIgaXMgYXV0b21hdGljYWxseSBkaXNhYmxlZCBieSB0aGUKICAgICAgICAgIC8vIGV2ZW50IGhhbmRsZXIgd2hlbiBpdCBmaXJlcy4KICAgICAgICAgIHdyaXRlRXZlbnRzRW5hYmxlZCA9IGZhbHNlOwogICAgICAgICAgX2NvbnRyb2xsZXIuYWRkKFJhd1NvY2tldEV2ZW50LndyaXRlKTsKICAgICAgICB9LAogICAgICAgIGNsb3NlZDogKCkgPT4gX2NvbnRyb2xsZXIuYWRkKFJhd1NvY2tldEV2ZW50LnJlYWRDbG9zZWQpLAogICAgICAgIGRlc3Ryb3llZDogKCkgewogICAgICAgICAgX2NvbnRyb2xsZXIuYWRkKFJhd1NvY2tldEV2ZW50LmNsb3NlZCk7CiAgICAgICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgICAgIH0sCiAgICAgICAgZXJyb3I6IHpvbmUuYmluZEJpbmFyeUNhbGxiYWNrR3VhcmRlZCgoZSwgc3QpIHsKICAgICAgICAgIF9jb250cm9sbGVyLmFkZEVycm9yKGUsIHN0KTsKICAgICAgICAgIF9zb2NrZXQuY2xvc2UoKTsKICAgICAgICB9KSk7CiAgfQoKICBzdGF0aWMgRnV0dXJlPFJhd0RhdGFncmFtU29ja2V0PiBiaW5kKAogICAgICBob3N0LCBpbnQgcG9ydCwgYm9vbCByZXVzZUFkZHJlc3MsIGJvb2wgcmV1c2VQb3J0LCBpbnQgdHRsKSB7CiAgICBfdGhyb3dPbkJhZFBvcnQocG9ydCk7CiAgICBfdGhyb3dPbkJhZFR0bCh0dGwpOwogICAgcmV0dXJuIF9OYXRpdmVTb2NrZXQuYmluZERhdGFncmFtKGhvc3QsIHBvcnQsIHJldXNlQWRkcmVzcywgcmV1c2VQb3J0LCB0dGwpCiAgICAgICAgLnRoZW4oKHNvY2tldCkgPT4gbmV3IF9SYXdEYXRhZ3JhbVNvY2tldChzb2NrZXQpKTsKICB9CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxSYXdTb2NrZXRFdmVudD4gbGlzdGVuKHZvaWQgb25EYXRhKFJhd1NvY2tldEV2ZW50IGV2ZW50KSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIHJldHVybiBfY29udHJvbGxlci5zdHJlYW0ubGlzdGVuKG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLCBvbkRvbmU6IG9uRG9uZSwgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgfQoKICBGdXR1cmUgY2xvc2UoKSA9PiBfc29ja2V0LmNsb3NlKCkudGhlbjxSYXdEYXRhZ3JhbVNvY2tldD4oKF8pID0+IHRoaXMpOwoKICBpbnQgc2VuZChMaXN0PGludD4gYnVmZmVyLCBJbnRlcm5ldEFkZHJlc3MgYWRkcmVzcywgaW50IHBvcnQpID0+CiAgICAgIF9zb2NrZXQuc2VuZChidWZmZXIsIDAsIGJ1ZmZlci5sZW5ndGgsIGFkZHJlc3MsIHBvcnQpOwoKICBEYXRhZ3JhbSByZWNlaXZlKCkgewogICAgcmV0dXJuIF9zb2NrZXQucmVjZWl2ZSgpOwogIH0KCiAgdm9pZCBqb2luTXVsdGljYXN0KEludGVybmV0QWRkcmVzcyBncm91cCwgW05ldHdvcmtJbnRlcmZhY2UgaW50ZXJmYWNlXSkgewogICAgX3NvY2tldC5qb2luTXVsdGljYXN0KGdyb3VwLCBpbnRlcmZhY2UpOwogIH0KCiAgdm9pZCBsZWF2ZU11bHRpY2FzdChJbnRlcm5ldEFkZHJlc3MgZ3JvdXAsIFtOZXR3b3JrSW50ZXJmYWNlIGludGVyZmFjZV0pIHsKICAgIF9zb2NrZXQubGVhdmVNdWx0aWNhc3QoZ3JvdXAsIGludGVyZmFjZSk7CiAgfQoKICBib29sIGdldCByZWFkRXZlbnRzRW5hYmxlZCA9PiBfcmVhZEV2ZW50c0VuYWJsZWQ7CiAgdm9pZCBzZXQgcmVhZEV2ZW50c0VuYWJsZWQoYm9vbCB2YWx1ZSkgewogICAgaWYgKHZhbHVlICE9IF9yZWFkRXZlbnRzRW5hYmxlZCkgewogICAgICBfcmVhZEV2ZW50c0VuYWJsZWQgPSB2YWx1ZTsKICAgICAgaWYgKCFfY29udHJvbGxlci5pc1BhdXNlZCkgX3Jlc3VtZSgpOwogICAgfQogIH0KCiAgYm9vbCBnZXQgd3JpdGVFdmVudHNFbmFibGVkID0+IF93cml0ZUV2ZW50c0VuYWJsZWQ7CiAgdm9pZCBzZXQgd3JpdGVFdmVudHNFbmFibGVkKGJvb2wgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSAhPSBfd3JpdGVFdmVudHNFbmFibGVkKSB7CiAgICAgIF93cml0ZUV2ZW50c0VuYWJsZWQgPSB2YWx1ZTsKICAgICAgaWYgKCFfY29udHJvbGxlci5pc1BhdXNlZCkgX3Jlc3VtZSgpOwogICAgfQogIH0KCiAgYm9vbCBnZXQgbXVsdGljYXN0TG9vcGJhY2sgPT4KICAgICAgX3NvY2tldC5nZXRPcHRpb24oU29ja2V0T3B0aW9uLl9pcE11bHRpY2FzdExvb3ApOwogIHZvaWQgc2V0IG11bHRpY2FzdExvb3BiYWNrKGJvb2wgdmFsdWUpID0+CiAgICAgIF9zb2NrZXQuc2V0T3B0aW9uKFNvY2tldE9wdGlvbi5faXBNdWx0aWNhc3RMb29wLCB2YWx1ZSk7CgogIGludCBnZXQgbXVsdGljYXN0SG9wcyA9PiBfc29ja2V0LmdldE9wdGlvbihTb2NrZXRPcHRpb24uX2lwTXVsdGljYXN0SG9wcyk7CiAgdm9pZCBzZXQgbXVsdGljYXN0SG9wcyhpbnQgdmFsdWUpID0+CiAgICAgIF9zb2NrZXQuc2V0T3B0aW9uKFNvY2tldE9wdGlvbi5faXBNdWx0aWNhc3RIb3BzLCB2YWx1ZSk7CgogIE5ldHdvcmtJbnRlcmZhY2UgZ2V0IG11bHRpY2FzdEludGVyZmFjZSA9PiB0aHJvdyAiTm90IGltcGxlbWVudGVkIjsKICB2b2lkIHNldCBtdWx0aWNhc3RJbnRlcmZhY2UoTmV0d29ya0ludGVyZmFjZSB2YWx1ZSkgPT4KICAgICAgdGhyb3cgIk5vdCBpbXBsZW1lbnRlZCI7CgogIGJvb2wgZ2V0IGJyb2FkY2FzdEVuYWJsZWQgPT4gX3NvY2tldC5nZXRPcHRpb24oU29ja2V0T3B0aW9uLl9pcEJyb2FkY2FzdCk7CiAgdm9pZCBzZXQgYnJvYWRjYXN0RW5hYmxlZChib29sIHZhbHVlKSA9PgogICAgICBfc29ja2V0LnNldE9wdGlvbihTb2NrZXRPcHRpb24uX2lwQnJvYWRjYXN0LCB2YWx1ZSk7CgogIGludCBnZXQgcG9ydCA9PiBfc29ja2V0LnBvcnQ7CgogIEludGVybmV0QWRkcmVzcyBnZXQgYWRkcmVzcyA9PiBfc29ja2V0LmFkZHJlc3M7CgogIF9wYXVzZSgpIHsKICAgIF9zb2NrZXQuc2V0TGlzdGVuaW5nKHJlYWQ6IGZhbHNlLCB3cml0ZTogZmFsc2UpOwogIH0KCiAgdm9pZCBfcmVzdW1lKCkgewogICAgX3NvY2tldC5zZXRMaXN0ZW5pbmcocmVhZDogX3JlYWRFdmVudHNFbmFibGVkLCB3cml0ZTogX3dyaXRlRXZlbnRzRW5hYmxlZCk7CiAgfQoKICB2b2lkIF9vblBhdXNlU3RhdGVDaGFuZ2UoKSB7CiAgICBpZiAoX2NvbnRyb2xsZXIuaXNQYXVzZWQpIHsKICAgICAgX3BhdXNlKCk7CiAgICB9IGVsc2UgewogICAgICBfcmVzdW1lKCk7CiAgICB9CiAgfQoKICB2b2lkIF9vblN1YnNjcmlwdGlvblN0YXRlQ2hhbmdlKCkgewogICAgaWYgKF9jb250cm9sbGVyLmhhc0xpc3RlbmVyKSB7CiAgICAgIF9yZXN1bWUoKTsKICAgIH0gZWxzZSB7CiAgICAgIF9zb2NrZXQuY2xvc2UoKTsKICAgIH0KICB9CgogIFVpbnQ4TGlzdCBnZXRSYXdPcHRpb24oUmF3U29ja2V0T3B0aW9uIG9wdGlvbikgPT4KICAgICAgX3NvY2tldC5nZXRSYXdPcHRpb24ob3B0aW9uKTsKICB2b2lkIHNldFJhd09wdGlvbihSYXdTb2NrZXRPcHRpb24gb3B0aW9uKSA9PiBfc29ja2V0LnNldFJhd09wdGlvbihvcHRpb24pOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKRGF0YWdyYW0gX21ha2VEYXRhZ3JhbSgKICAgIFVpbnQ4TGlzdCBkYXRhLCBTdHJpbmcgYWRkcmVzcywgVWludDhMaXN0IGluX2FkZHIsIGludCBwb3J0KSB7CiAgcmV0dXJuIG5ldyBEYXRhZ3JhbShkYXRhLCBuZXcgX0ludGVybmV0QWRkcmVzcyhhZGRyZXNzLCBudWxsLCBpbl9hZGRyKSwgcG9ydCk7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cmluZyBnZXQgX3NlcnZpY2VUeXBlTmFtZTsKCiAgU3RyaW5nIF9zZXJ2aWNlVHlwZShib29sIHJlZikgewogICAgaWYgKHJlZikgcmV0dXJuICJAJF9zZXJ2aWNlVHlwZU5hbWUiOwogICAgcmV0dXJuIF9zZXJ2aWNlVHlwZU5hbWU7CiAgfQp9Ch8ATk48AREBGAE5IBcXOhgEARkBPgEfAR8BIiodBAIBG2RhcnQ6aW8vc2VydmljZV9vYmplY3QuZGFydDhvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvYmluL3NlY3VyZV9zb2NrZXRfcGF0Y2guZGFydJ2xLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvbW1vbl9wYXRjaC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBTZWN1cmVTb2NrZXQgewogIEBwYXRjaAogIGZhY3RvcnkgU2VjdXJlU29ja2V0Ll8oUmF3U2VjdXJlU29ja2V0IHJhd1NvY2tldCkgPT4KICAgICAgbmV3IF9TZWN1cmVTb2NrZXQocmF3U29ja2V0KTsKfQoKQHBhdGNoCmNsYXNzIF9TZWN1cmVGaWx0ZXIgewogIEBwYXRjaAogIGZhY3RvcnkgX1NlY3VyZUZpbHRlci5fKCkgPT4gbmV3IF9TZWN1cmVGaWx0ZXJJbXBsLl8oKTsKfQoKQHBhdGNoCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgWDUwOUNlcnRpZmljYXRlIHsKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgZmFjdG9yeSBYNTA5Q2VydGlmaWNhdGUuXygpID0+IG5ldyBfWDUwOUNlcnRpZmljYXRlSW1wbC5fKCk7Cn0KCmNsYXNzIF9TZWN1cmVTb2NrZXQgZXh0ZW5kcyBfU29ja2V0IGltcGxlbWVudHMgU2VjdXJlU29ja2V0IHsKICBfUmF3U2VjdXJlU29ja2V0IGdldCBfcmF3ID0+IHN1cGVyLl9yYXcgYXMgX1Jhd1NlY3VyZVNvY2tldDsKCiAgX1NlY3VyZVNvY2tldChSYXdTZWN1cmVTb2NrZXQgcmF3KSA6IHN1cGVyKHJhdyk7CgogIHZvaWQgcmVuZWdvdGlhdGUoCiAgICAgIHtib29sIHVzZVNlc3Npb25DYWNoZTogdHJ1ZSwKICAgICAgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGU6IGZhbHNlLAogICAgICBib29sIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZTogZmFsc2V9KSB7CiAgICBfcmF3LnJlbmVnb3RpYXRlKAogICAgICAgIHVzZVNlc3Npb25DYWNoZTogdXNlU2Vzc2lvbkNhY2hlLAogICAgICAgIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZTogcmVxdWVzdENsaWVudENlcnRpZmljYXRlLAogICAgICAgIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZTogcmVxdWlyZUNsaWVudENlcnRpZmljYXRlKTsKICB9CgogIFg1MDlDZXJ0aWZpY2F0ZSBnZXQgcGVlckNlcnRpZmljYXRlIHsKICAgIGlmIChfcmF3ID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoInBlZXJDZXJ0aWZpY2F0ZSBjYWxsZWQgb24gZGVzdHJveWVkIFNlY3VyZVNvY2tldCIpOwogICAgfQogICAgcmV0dXJuIF9yYXcucGVlckNlcnRpZmljYXRlOwogIH0KCiAgU3RyaW5nIGdldCBzZWxlY3RlZFByb3RvY29sIHsKICAgIGlmIChfcmF3ID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoInNlbGVjdGVkUHJvdG9jb2wgY2FsbGVkIG9uIGRlc3Ryb3llZCBTZWN1cmVTb2NrZXQiKTsKICAgIH0KICAgIHJldHVybiBfcmF3LnNlbGVjdGVkUHJvdG9jb2w7CiAgfQp9CgovKioKICogX1NlY3VyZUZpbHRlckltcGwgd3JhcHMgYSBmaWx0ZXIgdGhhdCBlbmNyeXB0cyBhbmQgZGVjcnlwdHMgZGF0YSB0cmF2ZWxsaW5nCiAqIG92ZXIgYW4gZW5jcnlwdGVkIHNvY2tldC4gIFRoZSBmaWx0ZXIgYWxzbyBoYW5kbGVzIHRoZSBoYW5kc2hha2luZwogKiBhbmQgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uLgogKgogKiBUaGUgZmlsdGVyIGV4cG9zZXMgaXRzIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycyBhcyBEYXJ0IG9iamVjdHMgdGhhdAogKiBhcmUgYmFja2VkIGJ5IGFuIGV4dGVybmFsIEMgYXJyYXkgb2YgYnl0ZXMsIHNvIHRoYXQgYm90aCBEYXJ0IGNvZGUgYW5kCiAqIG5hdGl2ZSBjb2RlIGNhbiBhY2Nlc3MgdGhlIHNhbWUgZGF0YS4KICovCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1NlY3VyZUZpbHRlckltcGwgZXh0ZW5kcyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczEKICAgIGltcGxlbWVudHMgX1NlY3VyZUZpbHRlciB7CiAgLy8gUGVyZm9ybWFuY2UgaXMgaW1wcm92ZWQgaWYgYSBmdWxsIGJ1ZmZlciBvZiBwbGFpbnRleHQgZml0cwogIC8vIGluIHRoZSBlbmNyeXB0ZWQgYnVmZmVyLCB3aGVuIGVuY3J5cHRlZC4KICAvLyBTSVpFIGFuZCBFTkNSWVBURURfU0laRSBhcmUgcmVmZXJlbmNlZCBmcm9tIEMrKy4KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgc3RhdGljIGZpbmFsIGludCBTSVpFID0gOCAqIDEwMjQ7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHN0YXRpYyBmaW5hbCBpbnQgRU5DUllQVEVEX1NJWkUgPSAxMCAqIDEwMjQ7CgogIF9TZWN1cmVGaWx0ZXJJbXBsLl8oKSB7CiAgICBidWZmZXJzID0gbmV3IExpc3Q8X0V4dGVybmFsQnVmZmVyPihfUmF3U2VjdXJlU29ja2V0LmJ1ZmZlckNvdW50KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX1Jhd1NlY3VyZVNvY2tldC5idWZmZXJDb3VudDsgKytpKSB7CiAgICAgIGJ1ZmZlcnNbaV0gPSBuZXcgX0V4dGVybmFsQnVmZmVyKAogICAgICAgICAgX1Jhd1NlY3VyZVNvY2tldC5faXNCdWZmZXJFbmNyeXB0ZWQoaSkgPyBFTkNSWVBURURfU0laRSA6IFNJWkUpOwogICAgfQogIH0KCiAgdm9pZCBjb25uZWN0KAogICAgICBTdHJpbmcgaG9zdE5hbWUsCiAgICAgIFNlY3VyaXR5Q29udGV4dCBjb250ZXh0LAogICAgICBib29sIGlzX3NlcnZlciwKICAgICAgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsCiAgICAgIGJvb2wgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlLAogICAgICBVaW50OExpc3QgcHJvdG9jb2xzKSBuYXRpdmUgIlNlY3VyZVNvY2tldF9Db25uZWN0IjsKCiAgdm9pZCBkZXN0cm95KCkgewogICAgYnVmZmVycyA9IG51bGw7CiAgICBfZGVzdHJveSgpOwogIH0KCiAgdm9pZCBfZGVzdHJveSgpIG5hdGl2ZSAiU2VjdXJlU29ja2V0X0Rlc3Ryb3kiOwoKICB2b2lkIGhhbmRzaGFrZSgpIG5hdGl2ZSAiU2VjdXJlU29ja2V0X0hhbmRzaGFrZSI7CgogIHZvaWQgcmVoYW5kc2hha2UoKSA9PiB0aHJvdyBuZXcgVW5pbXBsZW1lbnRlZEVycm9yKCk7CgogIGludCBwcm9jZXNzQnVmZmVyKGludCBidWZmZXJJbmRleCkgPT4gdGhyb3cgbmV3IFVuaW1wbGVtZW50ZWRFcnJvcigpOwoKICBTdHJpbmcgc2VsZWN0ZWRQcm90b2NvbCgpIG5hdGl2ZSAiU2VjdXJlU29ja2V0X0dldFNlbGVjdGVkUHJvdG9jb2wiOwoKICB2b2lkIHJlbmVnb3RpYXRlKGJvb2wgdXNlU2Vzc2lvbkNhY2hlLCBib29sIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgYm9vbCByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUpIG5hdGl2ZSAiU2VjdXJlU29ja2V0X1JlbmVnb3RpYXRlIjsKCiAgdm9pZCBpbml0KCkgbmF0aXZlICJTZWN1cmVTb2NrZXRfSW5pdCI7CgogIFg1MDlDZXJ0aWZpY2F0ZSBnZXQgcGVlckNlcnRpZmljYXRlIG5hdGl2ZSAiU2VjdXJlU29ja2V0X1BlZXJDZXJ0aWZpY2F0ZSI7CgogIHZvaWQgcmVnaXN0ZXJCYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrKEZ1bmN0aW9uIGNhbGxiYWNrKQogICAgICBuYXRpdmUgIlNlY3VyZVNvY2tldF9SZWdpc3RlckJhZENlcnRpZmljYXRlQ2FsbGJhY2siOwoKICB2b2lkIHJlZ2lzdGVySGFuZHNoYWtlQ29tcGxldGVDYWxsYmFjayhGdW5jdGlvbiBoYW5kc2hha2VDb21wbGV0ZUhhbmRsZXIpCiAgICAgIG5hdGl2ZSAiU2VjdXJlU29ja2V0X1JlZ2lzdGVySGFuZHNoYWtlQ29tcGxldGVDYWxsYmFjayI7CgogIC8vIFRoaXMgaXMgYSBzZWN1cml0eSBpc3N1ZSwgYXMgaXQgZXhwb3NlcyBhIHJhdyBwb2ludGVyIHRvIERhcnQgY29kZS4KICBpbnQgX3BvaW50ZXIoKSBuYXRpdmUgIlNlY3VyZVNvY2tldF9GaWx0ZXJQb2ludGVyIjsKCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiZ2V0IikKICBMaXN0PF9FeHRlcm5hbEJ1ZmZlcj4gYnVmZmVyczsKfQoKQHBhdGNoCmNsYXNzIFNlY3VyaXR5Q29udGV4dCB7CiAgQHBhdGNoCiAgZmFjdG9yeSBTZWN1cml0eUNvbnRleHQoe2Jvb2wgd2l0aFRydXN0ZWRSb290czogZmFsc2V9KSB7CiAgICByZXR1cm4gbmV3IF9TZWN1cml0eUNvbnRleHQod2l0aFRydXN0ZWRSb290cyk7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgU2VjdXJpdHlDb250ZXh0IGdldCBkZWZhdWx0Q29udGV4dCB7CiAgICByZXR1cm4gX1NlY3VyaXR5Q29udGV4dC5kZWZhdWx0Q29udGV4dDsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBib29sIGdldCBhbHBuU3VwcG9ydGVkID0+IHRydWU7Cn0KCmNsYXNzIF9TZWN1cml0eUNvbnRleHQgZXh0ZW5kcyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczEKICAgIGltcGxlbWVudHMgU2VjdXJpdHlDb250ZXh0IHsKICBfU2VjdXJpdHlDb250ZXh0KGJvb2wgd2l0aFRydXN0ZWRSb290cykgewogICAgX2NyZWF0ZU5hdGl2ZUNvbnRleHQoKTsKICAgIGlmICh3aXRoVHJ1c3RlZFJvb3RzKSB7CiAgICAgIF90cnVzdEJ1aWx0aW5Sb290cygpOwogICAgfQogIH0KCiAgdm9pZCBfY3JlYXRlTmF0aXZlQ29udGV4dCgpIG5hdGl2ZSAiU2VjdXJpdHlDb250ZXh0X0FsbG9jYXRlIjsKCiAgc3RhdGljIGZpbmFsIFNlY3VyaXR5Q29udGV4dCBkZWZhdWx0Q29udGV4dCA9IG5ldyBfU2VjdXJpdHlDb250ZXh0KHRydWUpOwoKICB2b2lkIHVzZVByaXZhdGVLZXkoU3RyaW5nIGZpbGUsIHtTdHJpbmcgcGFzc3dvcmR9KSB7CiAgICBMaXN0PGludD4gYnl0ZXMgPSAobmV3IEZpbGUoZmlsZSkpLnJlYWRBc0J5dGVzU3luYygpOwogICAgdXNlUHJpdmF0ZUtleUJ5dGVzKGJ5dGVzLCBwYXNzd29yZDogcGFzc3dvcmQpOwogIH0KCiAgdm9pZCB1c2VQcml2YXRlS2V5Qnl0ZXMoTGlzdDxpbnQ+IGtleUJ5dGVzLCB7U3RyaW5nIHBhc3N3b3JkfSkKICAgICAgbmF0aXZlICJTZWN1cml0eUNvbnRleHRfVXNlUHJpdmF0ZUtleUJ5dGVzIjsKCiAgdm9pZCBzZXRUcnVzdGVkQ2VydGlmaWNhdGVzKFN0cmluZyBmaWxlLCB7U3RyaW5nIHBhc3N3b3JkfSkgewogICAgTGlzdDxpbnQ+IGJ5dGVzID0gKG5ldyBGaWxlKGZpbGUpKS5yZWFkQXNCeXRlc1N5bmMoKTsKICAgIHNldFRydXN0ZWRDZXJ0aWZpY2F0ZXNCeXRlcyhieXRlcywgcGFzc3dvcmQ6IHBhc3N3b3JkKTsKICB9CgogIHZvaWQgc2V0VHJ1c3RlZENlcnRpZmljYXRlc0J5dGVzKExpc3Q8aW50PiBjZXJ0Qnl0ZXMsIHtTdHJpbmcgcGFzc3dvcmR9KQogICAgICBuYXRpdmUgIlNlY3VyaXR5Q29udGV4dF9TZXRUcnVzdGVkQ2VydGlmaWNhdGVzQnl0ZXMiOwoKICB2b2lkIHVzZUNlcnRpZmljYXRlQ2hhaW4oU3RyaW5nIGZpbGUsIHtTdHJpbmcgcGFzc3dvcmR9KSB7CiAgICBMaXN0PGludD4gYnl0ZXMgPSAobmV3IEZpbGUoZmlsZSkpLnJlYWRBc0J5dGVzU3luYygpOwogICAgdXNlQ2VydGlmaWNhdGVDaGFpbkJ5dGVzKGJ5dGVzLCBwYXNzd29yZDogcGFzc3dvcmQpOwogIH0KCiAgdm9pZCB1c2VDZXJ0aWZpY2F0ZUNoYWluQnl0ZXMoTGlzdDxpbnQ+IGNoYWluQnl0ZXMsIHtTdHJpbmcgcGFzc3dvcmR9KQogICAgICBuYXRpdmUgIlNlY3VyaXR5Q29udGV4dF9Vc2VDZXJ0aWZpY2F0ZUNoYWluQnl0ZXMiOwoKICB2b2lkIHNldENsaWVudEF1dGhvcml0aWVzKFN0cmluZyBmaWxlLCB7U3RyaW5nIHBhc3N3b3JkfSkgewogICAgTGlzdDxpbnQ+IGJ5dGVzID0gKG5ldyBGaWxlKGZpbGUpKS5yZWFkQXNCeXRlc1N5bmMoKTsKICAgIHNldENsaWVudEF1dGhvcml0aWVzQnl0ZXMoYnl0ZXMsIHBhc3N3b3JkOiBwYXNzd29yZCk7CiAgfQoKICB2b2lkIHNldENsaWVudEF1dGhvcml0aWVzQnl0ZXMoTGlzdDxpbnQ+IGF1dGhDZXJ0Qnl0ZXMsIHtTdHJpbmcgcGFzc3dvcmR9KQogICAgICBuYXRpdmUgIlNlY3VyaXR5Q29udGV4dF9TZXRDbGllbnRBdXRob3JpdGllc0J5dGVzIjsKCiAgdm9pZCBzZXRBbHBuUHJvdG9jb2xzKExpc3Q8U3RyaW5nPiBwcm90b2NvbHMsIGJvb2wgaXNTZXJ2ZXIpIHsKICAgIFVpbnQ4TGlzdCBlbmNvZGVkUHJvdG9jb2xzID0KICAgICAgICBTZWN1cml0eUNvbnRleHQuX3Byb3RvY29sc1RvTGVuZ3RoRW5jb2RpbmcocHJvdG9jb2xzKTsKICAgIF9zZXRBbHBuUHJvdG9jb2xzKGVuY29kZWRQcm90b2NvbHMsIGlzU2VydmVyKTsKICB9CgogIHZvaWQgX3NldEFscG5Qcm90b2NvbHMoVWludDhMaXN0IHByb3RvY29scywgYm9vbCBpc1NlcnZlcikKICAgICAgbmF0aXZlICJTZWN1cml0eUNvbnRleHRfU2V0QWxwblByb3RvY29scyI7CiAgdm9pZCBfdHJ1c3RCdWlsdGluUm9vdHMoKSBuYXRpdmUgIlNlY3VyaXR5Q29udGV4dF9UcnVzdEJ1aWx0aW5Sb290cyI7Cn0KCi8qKgogKiBfWDUwOUNlcnRpZmljYXRlSW1wbCB3cmFwcyBhbiBYNTA5IGNlcnRpZmljYXRlIG9iamVjdCBoZWxkIGJ5IHRoZSBCb3JpbmdTU0wKICogbGlicmFyeS4gSXQgZXhwb3NlcyB0aGUgZmllbGRzIG9mIHRoZSBjZXJ0aWZpY2F0ZSBvYmplY3QuCiAqLwpjbGFzcyBfWDUwOUNlcnRpZmljYXRlSW1wbCBleHRlbmRzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMQogICAgaW1wbGVtZW50cyBYNTA5Q2VydGlmaWNhdGUgewogIC8vIFRoZSBuYXRpdmUgZmllbGQgbXVzdCBiZSBzZXQgbWFudWFsbHkgb24gYSBuZXcgb2JqZWN0LCBpbiBuYXRpdmUgY29kZS4KICAvLyBUaGlzIGlzIGRvbmUgYnkgV3JhcHBlZFg1MDkgaW4gc2VjdXJlX3NvY2tldC5jYy4KICBfWDUwOUNlcnRpZmljYXRlSW1wbC5fKCk7CgogIFVpbnQ4TGlzdCBfY2FjaGVkRGVyOwogIFVpbnQ4TGlzdCBnZXQgX2RlciBuYXRpdmUgIlg1MDlfRGVyIjsKICBVaW50OExpc3QgZ2V0IGRlciB7CiAgICBpZiAoX2NhY2hlZERlciA9PSBudWxsKSB7CiAgICAgIF9jYWNoZWREZXIgPSBfZGVyOwogICAgfQogICAgcmV0dXJuIF9jYWNoZWREZXI7CiAgfQoKICBTdHJpbmcgX2NhY2hlZFBlbTsKICBTdHJpbmcgZ2V0IF9wZW0gbmF0aXZlICJYNTA5X1BlbSI7CiAgU3RyaW5nIGdldCBwZW0gewogICAgaWYgKF9jYWNoZWRQZW0gPT0gbnVsbCkgewogICAgICBfY2FjaGVkUGVtID0gX3BlbTsKICAgIH0KICAgIHJldHVybiBfY2FjaGVkUGVtOwogIH0KCiAgVWludDhMaXN0IF9jYWNoZWRTaGExOwogIFVpbnQ4TGlzdCBnZXQgX3NoYTEgbmF0aXZlICJYNTA5X1NoYTEiOwogIFVpbnQ4TGlzdCBnZXQgc2hhMSB7CiAgICBpZiAoX2NhY2hlZFNoYTEgPT0gbnVsbCkgewogICAgICBfY2FjaGVkU2hhMSA9IF9zaGExOwogICAgfQogICAgcmV0dXJuIF9jYWNoZWRTaGExOwogIH0KCiAgU3RyaW5nIGdldCBzdWJqZWN0IG5hdGl2ZSAiWDUwOV9TdWJqZWN0IjsKICBTdHJpbmcgZ2V0IGlzc3VlciBuYXRpdmUgIlg1MDlfSXNzdWVyIjsKICBEYXRlVGltZSBnZXQgc3RhcnRWYWxpZGl0eSB7CiAgICByZXR1cm4gbmV3IERhdGVUaW1lLmZyb21NaWxsaXNlY29uZHNTaW5jZUVwb2NoKF9zdGFydFZhbGlkaXR5KCksCiAgICAgICAgaXNVdGM6IHRydWUpOwogIH0KCiAgRGF0ZVRpbWUgZ2V0IGVuZFZhbGlkaXR5IHsKICAgIHJldHVybiBuZXcgRGF0ZVRpbWUuZnJvbU1pbGxpc2Vjb25kc1NpbmNlRXBvY2goX2VuZFZhbGlkaXR5KCksIGlzVXRjOiB0cnVlKTsKICB9CgogIGludCBfc3RhcnRWYWxpZGl0eSgpIG5hdGl2ZSAiWDUwOV9TdGFydFZhbGlkaXR5IjsKICBpbnQgX2VuZFZhbGlkaXR5KCkgbmF0aXZlICJYNTA5X0VuZFZhbGlkaXR5IjsKfQqA/QBOTjwBIAEHFQk3JAIBBxYJOgIBBxoYCRw/AgE+PwEzARQjLC8WKjw9BAEoGFAGIQQBIBhRBiIEAgEET0YhA0hKKQQaOR9ALjYcJBwvARpHPShLBgQBEBcfFiUlOgETFBAEATEBNAE4AUgBRwFISAEqAU0BOTwBTD8BSTYBIyECAQcYCTwzBAEJLiwEAQkpAgE4ISwcHBwGBAFBAUwBNzozBAFBMwFAOjwEAUs8AT06OQQBSTkBPjo6BAFNOgFBIT8zBAE9MUgCAQRPPQQ8IUw2HAEYKBYeGQYXBAEVJRMeGQYXBAEZKhcfGwYYBAEsKh9FFgQBHVEEATQwAgEmZGFydDppby1wYXRjaC9zZWN1cmVfc29ja2V0X3BhdGNoLmRhcnQ2b3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2Jpbi9zeW5jX3NvY2tldF9wYXRjaC5kYXJ0puIvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29tbW9uX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIFJhd1N5bmNocm9ub3VzU29ja2V0IHsKICBAcGF0Y2gKICBzdGF0aWMgUmF3U3luY2hyb25vdXNTb2NrZXQgY29ubmVjdFN5bmMoaG9zdCwgaW50IHBvcnQpIHsKICAgIHJldHVybiBfUmF3U3luY2hyb25vdXNTb2NrZXQuY29ubmVjdFN5bmMoaG9zdCwgcG9ydCk7CiAgfQp9CgpjbGFzcyBfUmF3U3luY2hyb25vdXNTb2NrZXQgaW1wbGVtZW50cyBSYXdTeW5jaHJvbm91c1NvY2tldCB7CiAgZmluYWwgX05hdGl2ZVN5bmNocm9ub3VzU29ja2V0IF9zb2NrZXQ7CgogIF9SYXdTeW5jaHJvbm91c1NvY2tldCh0aGlzLl9zb2NrZXQpOwoKICBzdGF0aWMgUmF3U3luY2hyb25vdXNTb2NrZXQgY29ubmVjdFN5bmMoaG9zdCwgaW50IHBvcnQpIHsKICAgIF90aHJvd09uQmFkUG9ydChwb3J0KTsKICAgIHJldHVybiBuZXcgX1Jhd1N5bmNocm9ub3VzU29ja2V0KAogICAgICAgIF9OYXRpdmVTeW5jaHJvbm91c1NvY2tldC5jb25uZWN0U3luYyhob3N0LCBwb3J0KSk7CiAgfQoKICBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFkZHJlc3MgPT4gX3NvY2tldC5hZGRyZXNzOwogIGludCBnZXQgcG9ydCA9PiBfc29ja2V0LnBvcnQ7CiAgSW50ZXJuZXRBZGRyZXNzIGdldCByZW1vdGVBZGRyZXNzID0+IF9zb2NrZXQucmVtb3RlQWRkcmVzczsKICBpbnQgZ2V0IHJlbW90ZVBvcnQgPT4gX3NvY2tldC5yZW1vdGVQb3J0OwoKICBpbnQgYXZhaWxhYmxlKCkgPT4gX3NvY2tldC5hdmFpbGFibGU7CgogIHZvaWQgY2xvc2VTeW5jKCkgPT4gX3NvY2tldC5jbG9zZVN5bmMoKTsKCiAgaW50IHJlYWRJbnRvU3luYyhMaXN0PGludD4gYnVmZmVyLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pID0+CiAgICAgIF9zb2NrZXQucmVhZEludG9TeW5jKGJ1ZmZlciwgc3RhcnQsIGVuZCk7CgogIExpc3Q8aW50PiByZWFkU3luYyhpbnQgYnl0ZXMpID0+IF9zb2NrZXQucmVhZFN5bmMoYnl0ZXMpOwoKICB2b2lkIHNodXRkb3duKFNvY2tldERpcmVjdGlvbiBkaXJlY3Rpb24pID0+IF9zb2NrZXQuc2h1dGRvd24oZGlyZWN0aW9uKTsKCiAgdm9pZCB3cml0ZUZyb21TeW5jKExpc3Q8aW50PiBidWZmZXIsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgPT4KICAgICAgX3NvY2tldC53cml0ZUZyb21TeW5jKGJ1ZmZlciwgc3RhcnQsIGVuZCk7Cn0KCi8vIFRoZSBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczEgY2FuIG5vdCBiZSB1c2VkIHdpdGggYSBtaXhpbiwgZHVlIHRvIG1pc3NpbmcKLy8gaW1wbGljaXQgY29uc3RydWN0b3IuCmNsYXNzIF9OYXRpdmVTeW5jaHJvbm91c1NvY2tldE5hdGl2ZVdyYXBwZXIgZXh0ZW5kcyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczEge30KCi8vIFRoZSBfTmF0aXZlU3luY2hyb25vdXNTb2NrZXQgY2xhc3MgZW5jYXBzdWxhdGVzIGEgc3luY2hyb25vdXMgT1Mgc29ja2V0LgpjbGFzcyBfTmF0aXZlU3luY2hyb25vdXNTb2NrZXQgZXh0ZW5kcyBfTmF0aXZlU3luY2hyb25vdXNTb2NrZXROYXRpdmVXcmFwcGVyIHsKICAvLyBTb2NrZXQgY2xvc2Ugc3RhdGUuCiAgYm9vbCBpc0Nsb3NlZCA9IGZhbHNlOwogIGJvb2wgaXNDbG9zZWRSZWFkID0gZmFsc2U7CiAgYm9vbCBpc0Nsb3NlZFdyaXRlID0gZmFsc2U7CgogIC8vIEhvbGRzIHRoZSBhZGRyZXNzIHVzZWQgdG8gY29ubmVjdCB0aGUgc29ja2V0LgogIEludGVybmV0QWRkcmVzcyBsb2NhbEFkZHJlc3M7CgogIC8vIEhvbGRzIHRoZSBwb3J0IG9mIHRoZSBzb2NrZXQsIDAgaWYgbm90IGtub3duLgogIGludCBsb2NhbFBvcnQgPSAwOwoKICBfUmVhZFdyaXRlUmVzb3VyY2VJbmZvIHJlc291cmNlSW5mbzsKCiAgc3RhdGljIF9OYXRpdmVTeW5jaHJvbm91c1NvY2tldCBjb25uZWN0U3luYyhob3N0LCBpbnQgcG9ydCkgewogICAgaWYgKGhvc3QgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiUGFyYW1ldGVyIGhvc3QgY2Fubm90IGJlIG51bGwiKTsKICAgIH0KICAgIExpc3Q8X0ludGVybmV0QWRkcmVzcz4gYWRkcmVzc2VzID0gbnVsbDsKICAgIHZhciBlcnJvciA9IG51bGw7CiAgICBpZiAoaG9zdCBpcyBfSW50ZXJuZXRBZGRyZXNzKSB7CiAgICAgIGFkZHJlc3NlcyA9IFtob3N0XTsKICAgIH0gZWxzZSB7CiAgICAgIHRyeSB7CiAgICAgICAgYWRkcmVzc2VzID0gbG9va3VwKGhvc3QpOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgZXJyb3IgPSBlOwogICAgICB9CiAgICAgIGlmIChlcnJvciAhPSBudWxsIHx8IGFkZHJlc3NlcyA9PSBudWxsIHx8IGFkZHJlc3Nlcy5pc0VtcHR5KSB7CiAgICAgICAgdGhyb3cgY3JlYXRlRXJyb3IoZXJyb3IsICJGYWlsZWQgaG9zdCBsb29rdXA6ICckaG9zdCciKTsKICAgICAgfQogICAgfQogICAgYXNzZXJ0KGFkZHJlc3NlcyBpcyBMaXN0KTsKICAgIHZhciBpdCA9IGFkZHJlc3Nlcy5pdGVyYXRvcjsKICAgIF9OYXRpdmVTeW5jaHJvbm91c1NvY2tldCBjb25uZWN0TmV4dCgpIHsKICAgICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSB7CiAgICAgICAgLy8gQ291bGQgbm90IGNvbm5lY3QuIFRocm93IHRoZSBmaXJzdCBjb25uZWN0aW9uIGVycm9yIHdlIGVuY291bnRlcmVkLgogICAgICAgIGFzc2VydChlcnJvciAhPSBudWxsKTsKICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgfQogICAgICB2YXIgYWRkcmVzcyA9IGl0LmN1cnJlbnQ7CiAgICAgIHZhciBzb2NrZXQgPSBuZXcgX05hdGl2ZVN5bmNocm9ub3VzU29ja2V0KCk7CiAgICAgIHNvY2tldC5sb2NhbEFkZHJlc3MgPSBhZGRyZXNzOwogICAgICB2YXIgcmVzdWx0ID0gc29ja2V0Ll9uYXRpdmVDcmVhdGVDb25uZWN0U3luYyhhZGRyZXNzLl9pbl9hZGRyLCBwb3J0KTsKICAgICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgICAgLy8gS2VlcCBmaXJzdCBlcnJvciwgaWYgcHJlc2VudC4KICAgICAgICBpZiAoZXJyb3IgPT0gbnVsbCkgewogICAgICAgICAgZXJyb3IgPSBjcmVhdGVFcnJvcihyZXN1bHQsICJDb25uZWN0aW9uIGZhaWxlZCIsIGFkZHJlc3MsIHBvcnQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gY29ubmVjdE5leHQoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBRdWVyeSB0aGUgbG9jYWwgcG9ydCwgZm9yIGVycm9yIG1lc3NhZ2VzLgogICAgICAgIHRyeSB7CiAgICAgICAgICBzb2NrZXQucG9ydDsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICBpZiAoZXJyb3IgPT0gbnVsbCkgewogICAgICAgICAgICBlcnJvciA9IGNyZWF0ZUVycm9yKGUsICJDb25uZWN0aW9uIGZhaWxlZCIsIGFkZHJlc3MsIHBvcnQpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGNvbm5lY3ROZXh0KCk7CiAgICAgICAgfQogICAgICAgIHNldHVwUmVzb3VyY2VJbmZvKHNvY2tldCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHNvY2tldDsKICAgIH0KCiAgICByZXR1cm4gY29ubmVjdE5leHQoKTsKICB9CgogIEludGVybmV0QWRkcmVzcyBnZXQgYWRkcmVzcyA9PiBsb2NhbEFkZHJlc3M7CiAgaW50IGdldCBhdmFpbGFibGUgPT4gX25hdGl2ZUF2YWlsYWJsZSgpOwoKICBpbnQgZ2V0IHBvcnQgewogICAgaWYgKGxvY2FsUG9ydCAhPSAwKSB7CiAgICAgIHJldHVybiBsb2NhbFBvcnQ7CiAgICB9CiAgICBpZiAoaXNDbG9zZWQpIHsKICAgICAgdGhyb3cgY29uc3QgU29ja2V0RXhjZXB0aW9uLmNsb3NlZCgpOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF9uYXRpdmVHZXRQb3J0KCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgcmVzdWx0OwogICAgfQogICAgcmV0dXJuIGxvY2FsUG9ydCA9IHJlc3VsdDsKICB9CgogIEludGVybmV0QWRkcmVzcyBnZXQgcmVtb3RlQWRkcmVzcyB7CiAgICBpZiAoaXNDbG9zZWQpIHsKICAgICAgdGhyb3cgY29uc3QgU29ja2V0RXhjZXB0aW9uLmNsb3NlZCgpOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF9uYXRpdmVHZXRSZW1vdGVQZWVyKCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgcmVzdWx0OwogICAgfQogICAgdmFyIGFkZHIgPSByZXN1bHRbMF07CiAgICByZXR1cm4gbmV3IF9JbnRlcm5ldEFkZHJlc3MoYWRkclsxXSwgbnVsbCwgYWRkclsyXSk7CiAgfQoKICBpbnQgZ2V0IHJlbW90ZVBvcnQgewogICAgaWYgKGlzQ2xvc2VkKSB7CiAgICAgIHRocm93IGNvbnN0IFNvY2tldEV4Y2VwdGlvbi5jbG9zZWQoKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfbmF0aXZlR2V0UmVtb3RlUGVlcigpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IHJlc3VsdDsKICAgIH0KICAgIHJldHVybiByZXN1bHRbMV07CiAgfQoKICB2b2lkIGNsb3NlU3luYygpIHsKICAgIGlmICghaXNDbG9zZWQpIHsKICAgICAgX25hdGl2ZUNsb3NlU3luYygpOwogICAgICBfU29ja2V0UmVzb3VyY2VJbmZvLlNvY2tldENsb3NlZChyZXNvdXJjZUluZm8pOwogICAgICBpc0Nsb3NlZCA9IHRydWU7CiAgICB9CiAgfQoKICAvLyBDcmVhdGUgdGhlIGFwcHJvcHJpYXRlIGVycm9yL2V4Y2VwdGlvbiBmcm9tIGRpZmZlcmVudCByZXR1cm5lZAogIC8vIGVycm9yIG9iamVjdHMuCiAgc3RhdGljIGNyZWF0ZUVycm9yKGVycm9yLCBTdHJpbmcgbWVzc2FnZSwKICAgICAgW0ludGVybmV0QWRkcmVzcyBhZGRyZXNzLCBpbnQgcG9ydF0pIHsKICAgIGlmIChlcnJvciBpcyBPU0Vycm9yKSB7CiAgICAgIHJldHVybiBuZXcgU29ja2V0RXhjZXB0aW9uKG1lc3NhZ2UsCiAgICAgICAgICBvc0Vycm9yOiBlcnJvciwgYWRkcmVzczogYWRkcmVzcywgcG9ydDogcG9ydCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IFNvY2tldEV4Y2VwdGlvbihtZXNzYWdlLCBhZGRyZXNzOiBhZGRyZXNzLCBwb3J0OiBwb3J0KTsKICAgIH0KICB9CgogIHN0YXRpYyBMaXN0PF9JbnRlcm5ldEFkZHJlc3M+IGxvb2t1cChTdHJpbmcgaG9zdCwKICAgICAge0ludGVybmV0QWRkcmVzc1R5cGUgdHlwZTogSW50ZXJuZXRBZGRyZXNzVHlwZS5BTll9KSB7CiAgICB2YXIgcmVzcG9uc2UgPSBfbmF0aXZlTG9va3VwUmVxdWVzdChob3N0LCB0eXBlLl92YWx1ZSk7CiAgICBpZiAocmVzcG9uc2UgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyByZXNwb25zZTsKICAgIH0KICAgIExpc3Q8X0ludGVybmV0QWRkcmVzcz4gYWRkcmVzc2VzID0KICAgICAgICBuZXcgTGlzdDxfSW50ZXJuZXRBZGRyZXNzPihyZXNwb25zZS5sZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXNwb25zZS5sZW5ndGg7ICsraSkgewogICAgICB2YXIgcmVzdWx0ID0gcmVzcG9uc2VbaV07CiAgICAgIGFkZHJlc3Nlc1tpXSA9IG5ldyBfSW50ZXJuZXRBZGRyZXNzKHJlc3VsdFsxXSwgaG9zdCwgcmVzdWx0WzJdKTsKICAgIH0KICAgIHJldHVybiBhZGRyZXNzZXM7CiAgfQoKICBpbnQgcmVhZEludG9TeW5jKExpc3Q8aW50PiBidWZmZXIsIGludCBzdGFydCwgaW50IGVuZCkgewogICAgX2NoZWNrQXZhaWxhYmxlKCk7CiAgICBpZiAoaXNDbG9zZWRSZWFkKSB7CiAgICAgIHRocm93IG5ldyBTb2NrZXRFeGNlcHRpb24oIlNvY2tldCBpcyBjbG9zZWQgZm9yIHJlYWRpbmciKTsKICAgIH0KCiAgICBpZiAoKGJ1ZmZlciBpcyEgTGlzdCkgfHwKICAgICAgICAoKHN0YXJ0ICE9IG51bGwpICYmIChzdGFydCBpcyEgaW50KSkgfHwKICAgICAgICAoKGVuZCAhPSBudWxsKSAmJiAoZW5kIGlzISBpbnQpKSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiSW52YWxpZCBhcmd1bWVudHMgdG8gcmVhZEludG9TeW5jIik7CiAgICB9CiAgICBpZiAoc3RhcnQgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigic3RhcnQgY2Fubm90IGJlIG51bGwiKTsKICAgIH0KICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGJ1ZmZlci5sZW5ndGgpOwogICAgaWYgKGVuZCA9PSBzdGFydCkgewogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfbmF0aXZlUmVhZEludG8oYnVmZmVyLCBzdGFydCwgKGVuZCAtIHN0YXJ0KSk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IFNvY2tldEV4Y2VwdGlvbigicmVhZEludG9TeW5jIGZhaWxlZCIsIG9zRXJyb3I6IHJlc3VsdCk7CiAgICB9CiAgICByZXNvdXJjZUluZm8uYWRkUmVhZChyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIExpc3Q8aW50PiByZWFkU3luYyhpbnQgbGVuKSB7CiAgICBfY2hlY2tBdmFpbGFibGUoKTsKICAgIGlmIChpc0Nsb3NlZFJlYWQpIHsKICAgICAgdGhyb3cgbmV3IFNvY2tldEV4Y2VwdGlvbigiU29ja2V0IGlzIGNsb3NlZCBmb3IgcmVhZGluZyIpOwogICAgfQoKICAgIGlmICgobGVuICE9IG51bGwpICYmIChsZW4gPCAwKSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiSWxsZWdhbCBsZW5ndGggJGxlbiIpOwogICAgfQogICAgaWYgKGxlbiA9PSAwKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF9uYXRpdmVSZWFkKGxlbik7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgcmVzdWx0OwogICAgfQogICAgYXNzZXJ0KHJlc291cmNlSW5mbyAhPSBudWxsKTsKICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgewogICAgICBpZiAocmVzb3VyY2VJbmZvICE9IG51bGwpIHsKICAgICAgICByZXNvdXJjZUluZm8udG90YWxSZWFkICs9IHJlc3VsdC5sZW5ndGg7CiAgICAgIH0KICAgIH0KICAgIGlmIChyZXNvdXJjZUluZm8gIT0gbnVsbCkgewogICAgICByZXNvdXJjZUluZm8uZGlkUmVhZCgpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyB2b2lkIHNldHVwUmVzb3VyY2VJbmZvKF9OYXRpdmVTeW5jaHJvbm91c1NvY2tldCBzb2NrZXQpIHsKICAgIHNvY2tldC5yZXNvdXJjZUluZm8gPSBuZXcgX1NvY2tldFJlc291cmNlSW5mbyhzb2NrZXQpOwogIH0KCiAgdm9pZCBzaHV0ZG93bihTb2NrZXREaXJlY3Rpb24gZGlyZWN0aW9uKSB7CiAgICBpZiAoaXNDbG9zZWQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKICAgICAgY2FzZSBTb2NrZXREaXJlY3Rpb24ucmVjZWl2ZToKICAgICAgICBzaHV0ZG93blJlYWQoKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTb2NrZXREaXJlY3Rpb24uc2VuZDoKICAgICAgICBzaHV0ZG93bldyaXRlKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU29ja2V0RGlyZWN0aW9uLmJvdGg6CiAgICAgICAgY2xvc2VTeW5jKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoZGlyZWN0aW9uKTsKICAgIH0KICB9CgogIHZvaWQgc2h1dGRvd25SZWFkKCkgewogICAgaWYgKGlzQ2xvc2VkIHx8IGlzQ2xvc2VkUmVhZCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoaXNDbG9zZWRXcml0ZSkgewogICAgICBjbG9zZVN5bmMoKTsKICAgIH0gZWxzZSB7CiAgICAgIF9uYXRpdmVTaHV0ZG93blJlYWQoKTsKICAgIH0KICAgIGlzQ2xvc2VkUmVhZCA9IHRydWU7CiAgfQoKICB2b2lkIHNodXRkb3duV3JpdGUoKSB7CiAgICBpZiAoaXNDbG9zZWQgfHwgaXNDbG9zZWRXcml0ZSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoaXNDbG9zZWRSZWFkKSB7CiAgICAgIGNsb3NlU3luYygpOwogICAgfSBlbHNlIHsKICAgICAgX25hdGl2ZVNodXRkb3duV3JpdGUoKTsKICAgIH0KICAgIGlzQ2xvc2VkV3JpdGUgPSB0cnVlOwogIH0KCiAgdm9pZCB3cml0ZUZyb21TeW5jKExpc3Q8aW50PiBidWZmZXIsIGludCBzdGFydCwgaW50IGVuZCkgewogICAgX2NoZWNrQXZhaWxhYmxlKCk7CiAgICBpZiAoaXNDbG9zZWRXcml0ZSkgewogICAgICB0aHJvdyBuZXcgU29ja2V0RXhjZXB0aW9uKCJTb2NrZXQgaXMgY2xvc2VkIGZvciB3cml0aW5nIik7CiAgICB9CiAgICBpZiAoKGJ1ZmZlciBpcyEgTGlzdCkgfHwKICAgICAgICAoKHN0YXJ0ICE9IG51bGwpICYmIChzdGFydCBpcyEgaW50KSkgfHwKICAgICAgICAoKGVuZCAhPSBudWxsKSAmJiAoZW5kIGlzISBpbnQpKSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiSW52YWxpZCBhcmd1bWVudHMgdG8gd3JpdGVGcm9tU3luYyIpOwogICAgfQogICAgaWYgKHN0YXJ0ID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoInN0YXJ0IGNhbm5vdCBiZSBlcXVhbCB0byBudWxsIik7CiAgICB9CgogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgYnVmZmVyLmxlbmd0aCk7CiAgICBpZiAoZW5kID09IHN0YXJ0KSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBfQnVmZmVyQW5kU3RhcnQgYnVmZmVyQW5kU3RhcnQgPQogICAgICAgIF9lbnN1cmVGYXN0QW5kU2VyaWFsaXphYmxlQnl0ZURhdGEoYnVmZmVyLCBzdGFydCwgZW5kKTsKICAgIHZhciByZXN1bHQgPSBfbmF0aXZlV3JpdGUoYnVmZmVyQW5kU3RhcnQuYnVmZmVyLCBidWZmZXJBbmRTdGFydC5zdGFydCwKICAgICAgICBlbmQgLSAoc3RhcnQgLSBidWZmZXJBbmRTdGFydC5zdGFydCkpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBTb2NrZXRFeGNlcHRpb24oIndyaXRlRnJvbVN5bmMgZmFpbGVkIiwgb3NFcnJvcjogcmVzdWx0KTsKICAgIH0KICAgIGFzc2VydChyZXNvdXJjZUluZm8gIT0gbnVsbCk7CiAgICBpZiAocmVzb3VyY2VJbmZvICE9IG51bGwpIHsKICAgICAgcmVzb3VyY2VJbmZvLmFkZFdyaXRlKHJlc3VsdCk7CiAgICB9CiAgfQoKICB2b2lkIF9jaGVja0F2YWlsYWJsZSgpIHsKICAgIGlmIChpc0Nsb3NlZCkgewogICAgICB0aHJvdyBjb25zdCBTb2NrZXRFeGNlcHRpb24uY2xvc2VkKCk7CiAgICB9CiAgfQoKICAvLyBOYXRpdmUgbWV0aG9kIGRlY2xhcmF0aW9ucy4KICBzdGF0aWMgX25hdGl2ZUxvb2t1cFJlcXVlc3QoaG9zdCwgaW50IHR5cGUpCiAgICAgIG5hdGl2ZSAiU3luY2hyb25vdXNTb2NrZXRfTG9va3VwUmVxdWVzdCI7CiAgX25hdGl2ZUNyZWF0ZUNvbm5lY3RTeW5jKGhvc3QsIGludCBwb3J0KQogICAgICBuYXRpdmUgIlN5bmNocm9ub3VzU29ja2V0X0NyZWF0ZUNvbm5lY3RTeW5jIjsKICBfbmF0aXZlQXZhaWxhYmxlKCkgbmF0aXZlICJTeW5jaHJvbm91c1NvY2tldF9BdmFpbGFibGUiOwogIF9uYXRpdmVDbG9zZVN5bmMoKSBuYXRpdmUgIlN5bmNocm9ub3VzU29ja2V0X0Nsb3NlU3luYyI7CiAgaW50IF9uYXRpdmVHZXRQb3J0KCkgbmF0aXZlICJTeW5jaHJvbm91c1NvY2tldF9HZXRQb3J0IjsKICBMaXN0IF9uYXRpdmVHZXRSZW1vdGVQZWVyKCkgbmF0aXZlICJTeW5jaHJvbm91c1NvY2tldF9HZXRSZW1vdGVQZWVyIjsKICBfbmF0aXZlUmVhZChpbnQgbGVuKSBuYXRpdmUgIlN5bmNocm9ub3VzU29ja2V0X1JlYWQiOwogIF9uYXRpdmVSZWFkSW50byhMaXN0PGludD4gYnVmZmVyLCBpbnQgb2Zmc2V0LCBpbnQgYnl0ZXMpCiAgICAgIG5hdGl2ZSAiU3luY2hyb25vdXNTb2NrZXRfUmVhZExpc3QiOwogIF9uYXRpdmVTaHV0ZG93blJlYWQoKSBuYXRpdmUgIlN5bmNocm9ub3VzU29ja2V0X1NodXRkb3duUmVhZCI7CiAgX25hdGl2ZVNodXRkb3duV3JpdGUoKSBuYXRpdmUgIlN5bmNocm9ub3VzU29ja2V0X1NodXRkb3duV3JpdGUiOwogIF9uYXRpdmVXcml0ZShMaXN0PGludD4gYnVmZmVyLCBpbnQgb2Zmc2V0LCBpbnQgYnl0ZXMpCiAgICAgIG5hdGl2ZSAiU3luY2hyb25vdXNTb2NrZXRfV3JpdGVMaXN0IjsKfQqBXwBOTjwBIAEHHQk8OgQCAT4qAScBPBsmOwQBMiA+LAEoASsBQjABPAFLAUQxAgFNGVABTE8ZGR0eATMgATMVAScBQBhABi0WJBoNDCIUEwhFQQgGHyEtHE8fFQggMyVMHykdSwoeDzUOFxYfSAwgCiMIFQYBGgQBLysBERoYBhQsBiMdFAYfBAEmFCwGKR0UBho5BAEXFCwGKR0UBhYEARUVGjYXBgQBRBQsLRwqOQ1JBgQBND08HxYGJzUwIEcGFgQBOxcYQQYBHTAsRAYZNwZBGBAGQB1JBiITBAEgFxhBBgEmNgYUEwYjHRQGIhoiMQgGIB4GEwQBQzsEAS0UDgYZJBgPIRkPIRUPDywGBAEYJA4GGRMNHQYZBAEZJQ4GGBMNHgYaBAE9FxlBBh0wLEUGGUAGAUEYDgYBJUBLLx1KBiIgJQYEARsULAYEASEuMCs0Ozs7SDg7K0FDOCwCASRkYXJ0OmlvLXBhdGNoL3N5bmNfc29ja2V0X3BhdGNoLmRhcnQxb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2lvL2J5dGVzX2J1aWxkZXIuZGFydJWuLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pbzsKCi8qKgogKiBCdWlsZHMgYSBsaXN0IG9mIGJ5dGVzLCBhbGxvd2luZyBieXRlcyBhbmQgbGlzdHMgb2YgYnl0ZXMgdG8gYmUgYWRkZWQgYXQgdGhlCiAqIGVuZC4KICoKICogVXNlZCB0byBlZmZpY2llbnRseSBjb2xsZWN0IGJ5dGVzIGFuZCBsaXN0cyBvZiBieXRlcy4KICovCmFic3RyYWN0IGNsYXNzIEJ5dGVzQnVpbGRlciB7CiAgLyoqCiAgICogQ29uc3RydWN0IGEgbmV3IGVtcHR5IFtCeXRlc0J1aWxkZXJdLgogICAqCiAgICogSWYgW2NvcHldIGlzIHRydWUsIHRoZSBkYXRhIGlzIGFsd2F5cyBjb3BpZWQgd2hlbiBhZGRlZCB0byB0aGUgbGlzdC4gSWYKICAgKiBpdCBbY29weV0gaXMgZmFsc2UsIHRoZSBkYXRhIGlzIG9ubHkgY29waWVkIGlmIG5lZWRlZC4gVGhhdCBtZWFucyB0aGF0IGlmCiAgICogdGhlIGxpc3RzIGFyZSBjaGFuZ2VkIGFmdGVyIGFkZGVkIHRvIHRoZSBbQnl0ZXNCdWlsZGVyXSwgaXQgbWF5IGVmZmVjdCB0aGUKICAgKiBvdXRwdXQuIERlZmF1bHQgaXMgYHRydWVgLgogICAqLwogIGZhY3RvcnkgQnl0ZXNCdWlsZGVyKHtib29sIGNvcHk6IHRydWV9KSB7CiAgICBpZiAoY29weSkgewogICAgICByZXR1cm4gbmV3IF9Db3B5aW5nQnl0ZXNCdWlsZGVyKCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IF9CeXRlc0J1aWxkZXIoKTsKICAgIH0KICB9CgogIC8qKgogICAqIEFwcGVuZHMgW2J5dGVzXSB0byB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgYnVpbGRlci4KICAgKgogICAqIEVhY2ggdmFsdWUgb2YgW2J5dGVzXSB3aWxsIGJlIGJpdC1yZXByZXNlbnRhdGlvbiB0cnVuY2F0ZWQgdG8gdGhlIHJhbmdlCiAgICogMCAuLiAyNTUuCiAgICovCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGJ5dGVzKTsKCiAgLyoqCiAgICogQXBwZW5kIFtieXRlXSB0byB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgYnVpbGRlci4KICAgKgogICAqIFRoZSBbYnl0ZV0gd2lsbCBiZSBiaXQtcmVwcmVzZW50YXRpb24gdHJ1bmNhdGVkIHRvIHRoZSByYW5nZSAwIC4uIDI1NS4KICAgKi8KICB2b2lkIGFkZEJ5dGUoaW50IGJ5dGUpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBjb250ZW50cyBvZiBgdGhpc2AgYW5kIGNsZWFycyBgdGhpc2AuCiAgICoKICAgKiBUaGUgbGlzdCByZXR1cm5lZCBpcyBhIHZpZXcgb2YgdGhlIGludGVybmFsIGJ1ZmZlciwgbGltaXRlZCB0byB0aGUKICAgKiBbbGVuZ3RoXS4KICAgKi8KICBVaW50OExpc3QgdGFrZUJ5dGVzKCk7CgogIC8qKgogICAqIFJldHVybnMgYSBjb3B5IG9mIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSBidWlsZGVyLgogICAqCiAgICogTGVhdmVzIHRoZSBjb250ZW50cyBvZiB0aGUgYnVpbGRlciBpbnRhY3QuCiAgICovCiAgVWludDhMaXN0IHRvQnl0ZXMoKTsKCiAgLyoqCiAgICogVGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVpbGRlci4KICAgKi8KICBpbnQgZ2V0IGxlbmd0aDsKCiAgLyoqCiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGJ1ZmZlciBpcyBlbXB0eS4KICAgKi8KICBib29sIGdldCBpc0VtcHR5OwoKICAvKioKICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYnVmZmVyIGlzIG5vdCBlbXB0eS4KICAgKi8KICBib29sIGdldCBpc05vdEVtcHR5OwoKICAvKioKICAgKiBDbGVhciB0aGUgY29udGVudHMgb2YgdGhlIGJ1aWxkZXIuCiAgICovCiAgdm9pZCBjbGVhcigpOwp9CgpjbGFzcyBfQ29weWluZ0J5dGVzQnVpbGRlciBpbXBsZW1lbnRzIEJ5dGVzQnVpbGRlciB7CiAgLy8gU3RhcnQgd2l0aCAxMDI0IGJ5dGVzLgogIHN0YXRpYyBjb25zdCBpbnQgX2luaXRTaXplID0gMTAyNDsKCiAgLy8gU2FmZSBmb3IgcmV1c2UgYmVjYXVzZSBhIGZpeGVkLWxlbmd0aCBlbXB0eSBsaXN0IGlzIGltbXV0YWJsZS4KICBzdGF0aWMgZmluYWwgX2VtcHR5TGlzdCA9IG5ldyBVaW50OExpc3QoMCk7CgogIGludCBfbGVuZ3RoID0gMDsKICBVaW50OExpc3QgX2J1ZmZlcjsKCiAgX0NvcHlpbmdCeXRlc0J1aWxkZXIoW2ludCBpbml0aWFsQ2FwYWNpdHkgPSAwXSkKICAgICAgOiBfYnVmZmVyID0gKGluaXRpYWxDYXBhY2l0eSA8PSAwKQogICAgICAgICAgICA/IF9lbXB0eUxpc3QKICAgICAgICAgICAgOiBuZXcgVWludDhMaXN0KF9wb3cycm91bmR1cChpbml0aWFsQ2FwYWNpdHkpKTsKCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGJ5dGVzKSB7CiAgICBpbnQgYnl0ZXNMZW5ndGggPSBieXRlcy5sZW5ndGg7CiAgICBpZiAoYnl0ZXNMZW5ndGggPT0gMCkgcmV0dXJuOwogICAgaW50IHJlcXVpcmVkID0gX2xlbmd0aCArIGJ5dGVzTGVuZ3RoOwogICAgaWYgKF9idWZmZXIubGVuZ3RoIDwgcmVxdWlyZWQpIHsKICAgICAgX2dyb3cocmVxdWlyZWQpOwogICAgfQogICAgYXNzZXJ0KF9idWZmZXIubGVuZ3RoID49IHJlcXVpcmVkKTsKICAgIGlmIChieXRlcyBpcyBVaW50OExpc3QpIHsKICAgICAgX2J1ZmZlci5zZXRSYW5nZShfbGVuZ3RoLCByZXF1aXJlZCwgYnl0ZXMpOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBieXRlc0xlbmd0aDsgaSsrKSB7CiAgICAgICAgX2J1ZmZlcltfbGVuZ3RoICsgaV0gPSBieXRlc1tpXTsKICAgICAgfQogICAgfQogICAgX2xlbmd0aCA9IHJlcXVpcmVkOwogIH0KCiAgdm9pZCBhZGRCeXRlKGludCBieXRlKSB7CiAgICBpZiAoX2J1ZmZlci5sZW5ndGggPT0gX2xlbmd0aCkgewogICAgICAvLyBUaGUgZ3JvdyBhbGdvcml0aG0gYWx3YXlzIGF0IGxlYXN0IGRvdWJsZXMuCiAgICAgIC8vIElmIHdlIGFkZGVkIG9uZSB0byBfbGVuZ3RoIGl0IHdvdWxkIHF1YWRydXBsZSB1bm5lY2Vzc2FyaWx5LgogICAgICBfZ3JvdyhfbGVuZ3RoKTsKICAgIH0KICAgIGFzc2VydChfYnVmZmVyLmxlbmd0aCA+IF9sZW5ndGgpOwogICAgX2J1ZmZlcltfbGVuZ3RoXSA9IGJ5dGU7CiAgICBfbGVuZ3RoKys7CiAgfQoKICB2b2lkIF9ncm93KGludCByZXF1aXJlZCkgewogICAgLy8gV2Ugd2lsbCBjcmVhdGUgYSBsaXN0IGluIHRoZSByYW5nZSBvZiAyLTQgdGltZXMgbGFyZ2VyIHRoYW4KICAgIC8vIHJlcXVpcmVkLgogICAgaW50IG5ld1NpemUgPSByZXF1aXJlZCAqIDI7CiAgICBpZiAobmV3U2l6ZSA8IF9pbml0U2l6ZSkgewogICAgICBuZXdTaXplID0gX2luaXRTaXplOwogICAgfSBlbHNlIHsKICAgICAgbmV3U2l6ZSA9IF9wb3cycm91bmR1cChuZXdTaXplKTsKICAgIH0KICAgIHZhciBuZXdCdWZmZXIgPSBuZXcgVWludDhMaXN0KG5ld1NpemUpOwogICAgbmV3QnVmZmVyLnNldFJhbmdlKDAsIF9idWZmZXIubGVuZ3RoLCBfYnVmZmVyKTsKICAgIF9idWZmZXIgPSBuZXdCdWZmZXI7CiAgfQoKICBVaW50OExpc3QgdGFrZUJ5dGVzKCkgewogICAgaWYgKF9sZW5ndGggPT0gMCkgcmV0dXJuIF9lbXB0eUxpc3Q7CiAgICB2YXIgYnVmZmVyID0gbmV3IFVpbnQ4TGlzdC52aWV3KF9idWZmZXIuYnVmZmVyLCAwLCBfbGVuZ3RoKTsKICAgIGNsZWFyKCk7CiAgICByZXR1cm4gYnVmZmVyOwogIH0KCiAgVWludDhMaXN0IHRvQnl0ZXMoKSB7CiAgICBpZiAoX2xlbmd0aCA9PSAwKSByZXR1cm4gX2VtcHR5TGlzdDsKICAgIHJldHVybiBuZXcgVWludDhMaXN0LmZyb21MaXN0KAogICAgICAgIG5ldyBVaW50OExpc3QudmlldyhfYnVmZmVyLmJ1ZmZlciwgMCwgX2xlbmd0aCkpOwogIH0KCiAgaW50IGdldCBsZW5ndGggPT4gX2xlbmd0aDsKCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfbGVuZ3RoID09IDA7CgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX2xlbmd0aCAhPSAwOwoKICB2b2lkIGNsZWFyKCkgewogICAgX2xlbmd0aCA9IDA7CiAgICBfYnVmZmVyID0gX2VtcHR5TGlzdDsKICB9CgogIHN0YXRpYyBpbnQgX3BvdzJyb3VuZHVwKGludCB4KSB7CiAgICBhc3NlcnQoeCA+IDApOwogICAgLS14OwogICAgeCB8PSB4ID4+IDE7CiAgICB4IHw9IHggPj4gMjsKICAgIHggfD0geCA+PiA0OwogICAgeCB8PSB4ID4+IDg7CiAgICB4IHw9IHggPj4gMTY7CiAgICByZXR1cm4geCArIDE7CiAgfQp9CgpjbGFzcyBfQnl0ZXNCdWlsZGVyIGltcGxlbWVudHMgQnl0ZXNCdWlsZGVyIHsKICBpbnQgX2xlbmd0aCA9IDA7CiAgZmluYWwgTGlzdDxVaW50OExpc3Q+IF9jaHVua3MgPSBbXTsKCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGJ5dGVzKSB7CiAgICBVaW50OExpc3QgdHlwZWRCeXRlczsKICAgIGlmIChieXRlcyBpcyBVaW50OExpc3QpIHsKICAgICAgdHlwZWRCeXRlcyA9IGJ5dGVzOwogICAgfSBlbHNlIHsKICAgICAgdHlwZWRCeXRlcyA9IG5ldyBVaW50OExpc3QuZnJvbUxpc3QoYnl0ZXMpOwogICAgfQogICAgX2NodW5rcy5hZGQodHlwZWRCeXRlcyk7CiAgICBfbGVuZ3RoICs9IHR5cGVkQnl0ZXMubGVuZ3RoOwogIH0KCiAgdm9pZCBhZGRCeXRlKGludCBieXRlKSB7CiAgICBfY2h1bmtzLmFkZChuZXcgVWludDhMaXN0KDEpLi5bMF0gPSBieXRlKTsKICAgIF9sZW5ndGgrKzsKICB9CgogIFVpbnQ4TGlzdCB0YWtlQnl0ZXMoKSB7CiAgICBpZiAoX2xlbmd0aCA9PSAwKSByZXR1cm4gX0NvcHlpbmdCeXRlc0J1aWxkZXIuX2VtcHR5TGlzdDsKICAgIGlmIChfY2h1bmtzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHZhciBidWZmZXIgPSBfY2h1bmtzWzBdOwogICAgICBjbGVhcigpOwogICAgICByZXR1cm4gYnVmZmVyOwogICAgfQogICAgdmFyIGJ1ZmZlciA9IG5ldyBVaW50OExpc3QoX2xlbmd0aCk7CiAgICBpbnQgb2Zmc2V0ID0gMDsKICAgIGZvciAodmFyIGNodW5rIGluIF9jaHVua3MpIHsKICAgICAgYnVmZmVyLnNldFJhbmdlKG9mZnNldCwgb2Zmc2V0ICsgY2h1bmsubGVuZ3RoLCBjaHVuayk7CiAgICAgIG9mZnNldCArPSBjaHVuay5sZW5ndGg7CiAgICB9CiAgICBjbGVhcigpOwogICAgcmV0dXJuIGJ1ZmZlcjsKICB9CgogIFVpbnQ4TGlzdCB0b0J5dGVzKCkgewogICAgaWYgKF9sZW5ndGggPT0gMCkgcmV0dXJuIF9Db3B5aW5nQnl0ZXNCdWlsZGVyLl9lbXB0eUxpc3Q7CiAgICB2YXIgYnVmZmVyID0gbmV3IFVpbnQ4TGlzdChfbGVuZ3RoKTsKICAgIGludCBvZmZzZXQgPSAwOwogICAgZm9yICh2YXIgY2h1bmsgaW4gX2NodW5rcykgewogICAgICBidWZmZXIuc2V0UmFuZ2Uob2Zmc2V0LCBvZmZzZXQgKyBjaHVuay5sZW5ndGgsIGNodW5rKTsKICAgICAgb2Zmc2V0ICs9IGNodW5rLmxlbmd0aDsKICAgIH0KICAgIHJldHVybiBidWZmZXI7CiAgfQoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfbGVuZ3RoOwoKICBib29sIGdldCBpc0VtcHR5ID0+IF9sZW5ndGggPT0gMDsKCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfbGVuZ3RoICE9IDA7CgogIHZvaWQgY2xlYXIoKSB7CiAgICBfbGVuZ3RoID0gMDsKICAgIF9jaHVua3MuY2xlYXIoKTsKICB9Cn0KgOsATk48AREBBFAIAzkEHgYrBU1PUCAGLBApDSIGBAEGPQVNDwYdAQY7BUwGGgEGNwVIDwYZAQY8BTAGFwEGKQYSAQYsBhQBBjAGFwEGKAYQAgE1HCUBRC4BExUBMikZPAEeJCIqJRcGKB4yDS4pCAYYBAEbJTVGFgYmHQ8EAR1DESAfGw0nBiw0GQQBGilBDRMEARgpIzkEAR0BJAEnARERGgQBIxMJERERERISBAIBLhMmAR4aHhoNMgYdIgQBGy8PBAEaPh8fDxUGKRQhPR4GDRMEARg+KRQhPR4GEwQBHQEkAScBEREVBAIBGmRhcnQ6aW8vYnl0ZXNfYnVpbGRlci5kYXJ0Km9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pby9jb21tb24uZGFydI7KLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pbzsKCi8vIENvbnN0YW50cyB1c2VkIHdoZW4gd29ya2luZyB3aXRoIG5hdGl2ZSBwb3J0cy4KLy8gVGhlc2UgbXVzdCBtYXRjaCB0aGUgY29uc3RhbnRzIGluIHJ1bnRpbWUvYmluL2RhcnR1dGlscy5oIGNsYXNzIENPYmplY3QuCmNvbnN0IGludCBfc3VjY2Vzc1Jlc3BvbnNlID0gMDsKY29uc3QgaW50IF9pbGxlZ2FsQXJndW1lbnRSZXNwb25zZSA9IDE7CmNvbnN0IGludCBfb3NFcnJvclJlc3BvbnNlID0gMjsKY29uc3QgaW50IF9maWxlQ2xvc2VkUmVzcG9uc2UgPSAzOwoKY29uc3QgaW50IF9lcnJvclJlc3BvbnNlRXJyb3JUeXBlID0gMDsKY29uc3QgaW50IF9vc0Vycm9yUmVzcG9uc2VFcnJvckNvZGUgPSAxOwpjb25zdCBpbnQgX29zRXJyb3JSZXNwb25zZU1lc3NhZ2UgPSAyOwoKLy8gRnVuY3Rpb25zIHVzZWQgdG8gcmVjZWl2ZSBleGNlcHRpb25zIGZyb20gbmF0aXZlIHBvcnRzLgpib29sIF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpID0+CiAgICByZXNwb25zZSBpcyBMaXN0ICYmIHJlc3BvbnNlWzBdICE9IF9zdWNjZXNzUmVzcG9uc2U7CgovKioKICogUmV0dXJucyBhbiBFeGNlcHRpb24gb3IgYW4gRXJyb3IKICovCl9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsIFN0cmluZyBtZXNzYWdlLCBTdHJpbmcgcGF0aCkgewogIGFzc2VydChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSk7CiAgc3dpdGNoIChyZXNwb25zZVtfZXJyb3JSZXNwb25zZUVycm9yVHlwZV0pIHsKICAgIGNhc2UgX2lsbGVnYWxBcmd1bWVudFJlc3BvbnNlOgogICAgICByZXR1cm4gbmV3IEFyZ3VtZW50RXJyb3IoIiRtZXNzYWdlOiAkcGF0aCIpOwogICAgY2FzZSBfb3NFcnJvclJlc3BvbnNlOgogICAgICB2YXIgZXJyID0gbmV3IE9TRXJyb3IocmVzcG9uc2VbX29zRXJyb3JSZXNwb25zZU1lc3NhZ2VdLAogICAgICAgICAgcmVzcG9uc2VbX29zRXJyb3JSZXNwb25zZUVycm9yQ29kZV0pOwogICAgICByZXR1cm4gbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24obWVzc2FnZSwgcGF0aCwgZXJyKTsKICAgIGNhc2UgX2ZpbGVDbG9zZWRSZXNwb25zZToKICAgICAgcmV0dXJuIG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJGaWxlIGNsb3NlZCIsIHBhdGgpOwogICAgZGVmYXVsdDoKICAgICAgcmV0dXJuIG5ldyBFeGNlcHRpb24oIlVua25vd24gZXJyb3IiKTsKICB9Cn0KCi8qKgogKiBCYXNlIGNsYXNzIGZvciBhbGwgSU8gcmVsYXRlZCBleGNlcHRpb25zLgogKi8KYWJzdHJhY3QgY2xhc3MgSU9FeGNlcHRpb24gaW1wbGVtZW50cyBFeGNlcHRpb24gewogIFN0cmluZyB0b1N0cmluZygpID0+ICJJT0V4Y2VwdGlvbiI7Cn0KCi8qKgogICogQW4gW09TRXJyb3JdIG9iamVjdCBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCBhbiBlcnJvciBmcm9tIHRoZQogICogb3BlcmF0aW5nIHN5c3RlbS4KICAqLwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIE9TRXJyb3IgewogIC8qKiBDb25zdGFudCB1c2VkIHRvIGluZGljYXRlIHRoYXQgbm8gT1MgZXJyb3IgY29kZSBpcyBhdmFpbGFibGUuICovCiAgc3RhdGljIGNvbnN0IGludCBub0Vycm9yQ29kZSA9IC0xOwoKICAvLy8gRXJyb3IgbWVzc2FnZSBzdXBwbGllZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gVGhpcyBtYXkgYmUgYG51bGxgIG9yCiAgLy8vIGVtcHR5IGlmIG5vIG1lc3NhZ2UgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBlcnJvci4KICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKCiAgLy8vIEVycm9yIGNvZGUgc3VwcGxpZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uCiAgLy8vCiAgLy8vIFdpbGwgaGF2ZSB0aGUgdmFsdWUgW09TRXJyb3Iubm9FcnJvckNvZGVdIGlmIHRoZXJlIGlzIG5vIGVycm9yIGNvZGUKICAvLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBlcnJvci4KICBmaW5hbCBpbnQgZXJyb3JDb2RlOwoKICAvKiogQ3JlYXRlcyBhbiBPU0Vycm9yIG9iamVjdCBmcm9tIGEgbWVzc2FnZSBhbmQgYW4gZXJyb3JDb2RlLiAqLwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBjb25zdCBPU0Vycm9yKFt0aGlzLm1lc3NhZ2UgPSAiIiwgdGhpcy5lcnJvckNvZGUgPSBub0Vycm9yQ29kZV0pOwoKICAvKiogQ29udmVydHMgYW4gT1NFcnJvciBvYmplY3QgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uICovCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoIk9TIEVycm9yIik7CiAgICBpZiAobWVzc2FnZS5pc05vdEVtcHR5KSB7CiAgICAgIHNiLi53cml0ZSgiOiAiKS4ud3JpdGUobWVzc2FnZSk7CiAgICAgIGlmIChlcnJvckNvZGUgIT0gbm9FcnJvckNvZGUpIHsKICAgICAgICBzYi4ud3JpdGUoIiwgZXJybm8gPSAiKS4ud3JpdGUoZXJyb3JDb2RlLnRvU3RyaW5nKCkpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGVycm9yQ29kZSAhPSBub0Vycm9yQ29kZSkgewogICAgICBzYi4ud3JpdGUoIjogZXJybm8gPSAiKS4ud3JpdGUoZXJyb3JDb2RlLnRvU3RyaW5nKCkpOwogICAgfQogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgovLyBPYmplY3QgZm9yIGhvbGRpbmcgYSBidWZmZXIgYW5kIGFuIG9mZnNldC4KY2xhc3MgX0J1ZmZlckFuZFN0YXJ0IHsKICBMaXN0PGludD4gYnVmZmVyOwogIGludCBzdGFydDsKICBfQnVmZmVyQW5kU3RhcnQodGhpcy5idWZmZXIsIHRoaXMuc3RhcnQpOwp9CgovLyBFbnN1cmUgdGhhdCB0aGUgaW5wdXQgTGlzdCBjYW4gYmUgc2VyaWFsaXplZCB0aHJvdWdoIGEgbmF0aXZlIHBvcnQuCi8vIE9ubHkgSW50OExpc3QgYW5kIFVpbnQ4TGlzdCBMaXN0cyBhcmUgc2VyaWFsaXplZCBkaXJlY3RseS4KLy8gQWxsIG90aGVyIGxpc3RzIGFyZSBmaXJzdCBjb3BpZWQgaW50byBhIFVpbnQ4TGlzdC4gVGhpcyBoYXMgdGhlIGFkZGVkCi8vIGJlbmVmaXQgdGhhdCBpdCBpcyBmYXN0ZXIgdG8gYWNjZXNzIGZyb20gdGhlIEMgY29kZSBhcyB3ZWxsLgpfQnVmZmVyQW5kU3RhcnQgX2Vuc3VyZUZhc3RBbmRTZXJpYWxpemFibGVCeXRlRGF0YSgKICAgIExpc3Q8aW50PiBidWZmZXIsIGludCBzdGFydCwgaW50IGVuZCkgewogIGlmIChidWZmZXIgaXMgVWludDhMaXN0IHx8IGJ1ZmZlciBpcyBJbnQ4TGlzdCkgewogICAgcmV0dXJuIG5ldyBfQnVmZmVyQW5kU3RhcnQoYnVmZmVyLCBzdGFydCk7CiAgfQogIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICB2YXIgbmV3QnVmZmVyID0gbmV3IFVpbnQ4TGlzdChsZW5ndGgpOwogIGludCBqID0gc3RhcnQ7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgaW50IHZhbHVlID0gYnVmZmVyW2pdOwogICAgaWYgKHZhbHVlID09IG51bGwpIHRocm93IEFyZ3VtZW50RXJyb3IoIkxpc3QgZWxlbWVudCBpcyBudWxsIGF0IGluZGV4ICRqIik7CiAgICBuZXdCdWZmZXJbaV0gPSB2YWx1ZTsKICAgIGorKzsKICB9CiAgcmV0dXJuIG5ldyBfQnVmZmVyQW5kU3RhcnQobmV3QnVmZmVyLCAwKTsKfQoKY2xhc3MgX0lPQ3J5cHRvIHsKICBleHRlcm5hbCBzdGF0aWMgVWludDhMaXN0IGdldFJhbmRvbUJ5dGVzKGludCBjb3VudCk7Cn0KdwBOTjwBEQEyTCAoICMBJyknATsjOQEEJARAJi8jMxs/MDoeOw0tBAIBBC0EMiYCAQRCFgUaEEclAUw4GAEzBkohFwFEHEQBQBYqGh4nJj4IKzwGGgQCAS4YFA0sAgFHPklANCwzLwQcKRElG1AaCQQsAgESNwIBE2RhcnQ6aW8vY29tbW9uLmRhcnQxb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2Jpbi9jb21tb25fcGF0Y2guZGFydIcwLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBOb3RlOiB0aGUgVk0gY29uY2F0ZW5hdGVzIGFsbCBwYXRjaCBmaWxlcyBpbnRvIGEgc2luZ2xlIHBhdGNoIGZpbGUuIFRoaXMKLy8vIGZpbGUgaXMgdGhlIGZpcnN0IHBhdGNoIGluICJkYXJ0OmlvIiB3aGljaCBjb250YWlucyBhbGwgdGhlIGltcG9ydHMgdXNlZCBieQovLy8gcGF0Y2hlcyBvZiB0aGF0IGxpYnJhcnkuIFdlIHBsYW4gdG8gY2hhbmdlIHRoaXMgd2hlbiB3ZSBoYXZlIGEgc2hhcmVkIGZyb250Ci8vLyBlbmQgYW5kIHNpbXBseSB1c2UgcGFydHMuCgppbXBvcnQgImRhcnQ6X2ludGVybmFsIiBzaG93IFZNTGlicmFyeUhvb2tzLCBwYXRjaDsKCmltcG9ydCAiZGFydDphc3luYyIKICAgIHNob3cKICAgICAgICBDb21wbGV0ZXIsCiAgICAgICAgRnV0dXJlLAogICAgICAgIFN0cmVhbSwKICAgICAgICBTdHJlYW1Db25zdW1lciwKICAgICAgICBTdHJlYW1Db250cm9sbGVyLAogICAgICAgIFN0cmVhbVN1YnNjcmlwdGlvbiwKICAgICAgICBUaW1lciwKICAgICAgICBab25lLAogICAgICAgIHNjaGVkdWxlTWljcm90YXNrOwoKaW1wb3J0ICJkYXJ0OmNvbGxlY3Rpb24iIHNob3cgSGFzaE1hcDsKCmltcG9ydCAiZGFydDpjb252ZXJ0IiBzaG93IEVuY29kaW5nLCB1dGY4OwoKaW1wb3J0ICJkYXJ0OmRldmVsb3BlciIgc2hvdyByZWdpc3RlckV4dGVuc2lvbjsKCmltcG9ydCAiZGFydDppc29sYXRlIiBzaG93IFJhd1JlY2VpdmVQb3J0LCBSZWNlaXZlUG9ydCwgU2VuZFBvcnQ7CgppbXBvcnQgImRhcnQ6bWF0aCIgc2hvdyBtaW47CgppbXBvcnQgImRhcnQ6bmF0aXZld3JhcHBlcnMiIHNob3cgTmF0aXZlRmllbGRXcmFwcGVyQ2xhc3MxOwoKaW1wb3J0ICJkYXJ0OnR5cGVkX2RhdGEiIHNob3cgVWludDhMaXN0OwoKLy8vIFRoZXNlIGFyZSB0aGUgYWRkaXRpb25hbCBwYXJ0cyBvZiB0aGlzIHBhdGNoIGxpYnJhcnk6Ci8vIHBhcnQgImRpcmVjdG9yeV9wYXRjaC5kYXJ0IjsKLy8gcGFydCAiZXZlbnRoYW5kbGVyX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJmaWxlX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJmaWxlX3N5c3RlbV9lbnRpdHlfcGF0Y2guZGFydCI7Ci8vIHBhcnQgImZpbHRlcl9wYXRjaC5kYXJ0IjsKLy8gcGFydCAiaW9fc2VydmljZV9wYXRjaC5kYXJ0IjsKLy8gcGFydCAicGxhdGZvcm1fcGF0Y2guZGFydCI7Ci8vIHBhcnQgInByb2Nlc3NfcGF0Y2guZGFydCI7Ci8vIHBhcnQgInNvY2tldF9wYXRjaC5kYXJ0IjsKLy8gcGFydCAic3RkaW9fcGF0Y2guZGFydCI7Ci8vIHBhcnQgInNlY3VyZV9zb2NrZXRfcGF0Y2guZGFydCI7Ci8vIHBhcnQgInN5bmNfc29ja2V0X3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIF9JT0NyeXB0byB7CiAgQHBhdGNoCiAgc3RhdGljIFVpbnQ4TGlzdCBnZXRSYW5kb21CeXRlcyhpbnQgY291bnQpIG5hdGl2ZSAiQ3J5cHRvX0dldFJhbmRvbUJ5dGVzIjsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCl9zZXR1cEhvb2tzKCkgewogIFZNTGlicmFyeUhvb2tzLmV2ZW50SGFuZGxlclNlbmREYXRhID0gX0V2ZW50SGFuZGxlci5fc2VuZERhdGE7CiAgVk1MaWJyYXJ5SG9va3MudGltZXJNaWxsaXNlY29uZENsb2NrID0gX0V2ZW50SGFuZGxlci5fdGltZXJNaWxsaXNlY29uZENsb2NrOwp9CkAATk48AU1QUB4BNAEUCRMQEBgaHA8OGwEnASsBMAFCAR0BPAEpATogIxspHSEfHh0cJCIBBxIJTQIBIhBBTwIBH2RhcnQ6aW8tcGF0Y2gvY29tbW9uX3BhdGNoLmRhcnQ0b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2lvL2RhdGFfdHJhbnNmb3JtZXIuZGFydMAAVZUvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmlvOwoKLyoqCiAqIEV4cG9zZXMgWkxpYiBvcHRpb25zIGZvciBpbnB1dCBwYXJhbWV0ZXJzLgogKgogKiBTZWUgaHR0cDovL3d3dy56bGliLm5ldC9tYW51YWwuaHRtbCBmb3IgbW9yZSBkb2N1bWVudGF0aW9uLgogKi8KYWJzdHJhY3QgY2xhc3MgWkxpYk9wdGlvbiB7CiAgLy8vIE1pbmltYWwgdmFsdWUgZm9yIFtaTGliQ29kZWMud2luZG93Qml0c10sIFtaTGliRW5jb2Rlci53aW5kb3dCaXRzXQogIC8vLyBhbmQgW1pMaWJEZWNvZGVyLndpbmRvd0JpdHNdLgogIHN0YXRpYyBjb25zdCBpbnQgbWluV2luZG93Qml0cyA9IDg7CiAgQERlcHJlY2F0ZWQoIlVzZSBtaW5XaW5kb3dCaXRzIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTUlOX1dJTkRPV19CSVRTID0gODsKCiAgLy8vIE1heGltYWwgdmFsdWUgZm9yIFtaTGliQ29kZWMud2luZG93Qml0c10sIFtaTGliRW5jb2Rlci53aW5kb3dCaXRzXQogIC8vLyBhbmQgW1pMaWJEZWNvZGVyLndpbmRvd0JpdHNdLgogIHN0YXRpYyBjb25zdCBpbnQgbWF4V2luZG93Qml0cyA9IDE1OwogIEBEZXByZWNhdGVkKCJVc2UgbWF4V2luZG93Qml0cyBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE1BWF9XSU5ET1dfQklUUyA9IDE1OwoKICAvLy8gRGVmYXVsdCB2YWx1ZSBmb3IgW1pMaWJDb2RlYy53aW5kb3dCaXRzXSwgW1pMaWJFbmNvZGVyLndpbmRvd0JpdHNdCiAgLy8vIGFuZCBbWkxpYkRlY29kZXIud2luZG93Qml0c10uCiAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0V2luZG93Qml0cyA9IDE1OwogIEBEZXByZWNhdGVkKCJVc2UgZGVmYXVsdFdpbmRvd0JpdHMgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBERUZBVUxUX1dJTkRPV19CSVRTID0gMTU7CgogIC8vLyBNaW5pbWFsIHZhbHVlIGZvciBbWkxpYkNvZGVjLmxldmVsXSBhbmQgW1pMaWJFbmNvZGVyLmxldmVsXS4KICBzdGF0aWMgY29uc3QgaW50IG1pbkxldmVsID0gLTE7CiAgQERlcHJlY2F0ZWQoIlVzZSBtaW5MZXZlbCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE1JTl9MRVZFTCA9IC0xOwoKICAvLy8gTWF4aW1hbCB2YWx1ZSBmb3IgW1pMaWJDb2RlYy5sZXZlbF0gYW5kIFtaTGliRW5jb2Rlci5sZXZlbF0KICBzdGF0aWMgY29uc3QgaW50IG1heExldmVsID0gOTsKICBARGVwcmVjYXRlZCgiVXNlIG1heExldmVsIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTUFYX0xFVkVMID0gOTsKCiAgLy8vIERlZmF1bHQgdmFsdWUgZm9yIFtaTGliQ29kZWMubGV2ZWxdIGFuZCBbWkxpYkVuY29kZXIubGV2ZWxdLgogIHN0YXRpYyBjb25zdCBpbnQgZGVmYXVsdExldmVsID0gNjsKICBARGVwcmVjYXRlZCgiVXNlIGRlZmF1bHRMZXZlbCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IERFRkFVTFRfTEVWRUwgPSA2OwoKICAvLy8gTWluaW1hbCB2YWx1ZSBmb3IgW1pMaWJDb2RlYy5tZW1MZXZlbF0gYW5kIFtaTGliRW5jb2Rlci5tZW1MZXZlbF0uCiAgc3RhdGljIGNvbnN0IGludCBtaW5NZW1MZXZlbCA9IDE7CiAgQERlcHJlY2F0ZWQoIlVzZSBtaW5NZW1MZXZlbCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE1JTl9NRU1fTEVWRUwgPSAxOwoKICAvLy8gTWF4aW1hbCB2YWx1ZSBmb3IgW1pMaWJDb2RlYy5tZW1MZXZlbF0gYW5kIFtaTGliRW5jb2Rlci5tZW1MZXZlbF0uCiAgc3RhdGljIGNvbnN0IGludCBtYXhNZW1MZXZlbCA9IDk7CiAgQERlcHJlY2F0ZWQoIlVzZSBtYXhNZW1MZXZlbCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE1BWF9NRU1fTEVWRUwgPSA5OwoKICAvLy8gRGVmYXVsdCB2YWx1ZSBmb3IgW1pMaWJDb2RlYy5tZW1MZXZlbF0gYW5kIFtaTGliRW5jb2Rlci5tZW1MZXZlbF0uCiAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0TWVtTGV2ZWwgPSA4OwogIEBEZXByZWNhdGVkKCJVc2UgZGVmYXVsdE1lbUxldmVsIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgREVGQVVMVF9NRU1fTEVWRUwgPSA4OwoKICAvLy8gUmVjb21tZW5kZWQgc3RyYXRlZ3kgZm9yIGRhdGEgcHJvZHVjZWQgYnkgYSBmaWx0ZXIgKG9yIHByZWRpY3RvcikKICBzdGF0aWMgY29uc3QgaW50IHN0cmF0ZWd5RmlsdGVyZWQgPSAxOwogIEBEZXByZWNhdGVkKCJVc2Ugc3RyYXRlZ3lGaWx0ZXJlZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFNUUkFURUdZX0ZJTFRFUkVEID0gMTsKCiAgLy8vIFVzZSB0aGlzIHN0cmF0ZWd5IHRvIGZvcmNlIEh1ZmZtYW4gZW5jb2Rpbmcgb25seSAobm8gc3RyaW5nIG1hdGNoKQogIHN0YXRpYyBjb25zdCBpbnQgc3RyYXRlZ3lIdWZmbWFuT25seSA9IDI7CiAgQERlcHJlY2F0ZWQoIlVzZSBzdHJhdGVneUh1ZmZtYW5Pbmx5IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgU1RSQVRFR1lfSFVGRk1BTl9PTkxZID0gMjsKCiAgLy8vIFVzZSB0aGlzIHN0cmF0ZWd5IHRvIGxpbWl0IG1hdGNoIGRpc3RhbmNlcyB0byBvbmUgKHJ1bi1sZW5ndGggZW5jb2RpbmcpCiAgc3RhdGljIGNvbnN0IGludCBzdHJhdGVneVJsZSA9IDM7CiAgQERlcHJlY2F0ZWQoIlVzZSBzdHJhdGVneVJsZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFNUUkFURUdZX1JMRSA9IDM7CgogIC8vLyBUaGlzIHN0cmF0ZWd5IHByZXZlbnRzIHRoZSB1c2Ugb2YgZHluYW1pYyBIdWZmbWFuIGNvZGVzLCBhbGxvd2luZyBmb3IgYQogIC8vLyBzaW1wbGVyIGRlY29kZXIKICBzdGF0aWMgY29uc3QgaW50IHN0cmF0ZWd5Rml4ZWQgPSA0OwogIEBEZXByZWNhdGVkKCJVc2Ugc3RyYXRlZ3lGaXhlZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFNUUkFURUdZX0ZJWEVEID0gNDsKCiAgLy8vIFJlY29tbWVuZGVkIHN0cmF0ZWd5IGZvciBub3JtYWwgZGF0YQogIHN0YXRpYyBjb25zdCBpbnQgc3RyYXRlZ3lEZWZhdWx0ID0gMDsKICBARGVwcmVjYXRlZCgiVXNlIHN0cmF0ZWd5RGVmYXVsdCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFNUUkFURUdZX0RFRkFVTFQgPSAwOwp9CgovKioKICogQW4gaW5zdGFuY2Ugb2YgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFtaTGliQ29kZWNdLgogKi8KY29uc3QgWkxpYkNvZGVjIHpsaWIgPSBjb25zdCBaTGliQ29kZWMuX2RlZmF1bHQoKTsKQERlcHJlY2F0ZWQoIlVzZSB6bGliIGluc3RlYWQiKQpjb25zdCBaTGliQ29kZWMgWkxJQiA9IHpsaWI7CgovKioKICogVGhlIFtaTGliQ29kZWNdIGVuY29kZXMgcmF3IGJ5dGVzIHRvIFpMaWIgY29tcHJlc3NlZCBieXRlcyBhbmQgZGVjb2RlcyBaTGliCiAqIGNvbXByZXNzZWQgYnl0ZXMgdG8gcmF3IGJ5dGVzLgogKi8KY2xhc3MgWkxpYkNvZGVjIGV4dGVuZHMgQ29kZWM8TGlzdDxpbnQ+LCBMaXN0PGludD4+IHsKICAvKioKICAgKiBXaGVuIHRydWUsIGBHWmlwYCBmcmFtZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgY29tcHJlc3NlZCBkYXRhLgogICAqLwogIGZpbmFsIGJvb2wgZ3ppcDsKCiAgLyoqCiAgICogVGhlIGNvbXByZXNzaW9uLVtsZXZlbF0gY2FuIGJlIHNldCBpbiB0aGUgcmFuZ2Ugb2YgYC0xLi45YCwgd2l0aCBgNmAgYmVpbmcKICAgKiB0aGUgZGVmYXVsdCBjb21wcmVzc2lvbiBsZXZlbC4gTGV2ZWxzIGFib3ZlIGA2YCB3aWxsIGhhdmUgaGlnaGVyCiAgICogY29tcHJlc3Npb24gcmF0ZXMgYXQgdGhlIGNvc3Qgb2YgbW9yZSBDUFUgYW5kIG1lbW9yeSB1c2FnZS4gTGV2ZWxzIGJlbG93CiAgICogYDZgIHdpbGwgdXNlIGxlc3MgQ1BVIGFuZCBtZW1vcnkgYXQgdGhlIGNvc3Qgb2YgbG93ZXIgY29tcHJlc3Npb24gcmF0ZXMuCiAgICovCiAgZmluYWwgaW50IGxldmVsOwoKICAvKioKICAgKiBTcGVjaWZpZXMgaG93IG11Y2ggbWVtb3J5IHNob3VsZCBiZSBhbGxvY2F0ZWQgZm9yIHRoZSBpbnRlcm5hbCBjb21wcmVzc2lvbgogICAqIHN0YXRlLiBgMWAgdXNlcyBtaW5pbXVtIG1lbW9yeSBidXQgaXMgc2xvdyBhbmQgcmVkdWNlcyBjb21wcmVzc2lvbiByYXRpbzsKICAgKiBgOWAgdXNlcyBtYXhpbXVtIG1lbW9yeSBmb3Igb3B0aW1hbCBzcGVlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYDhgLgogICAqCiAgICogVGhlIG1lbW9yeSByZXF1aXJlbWVudHMgZm9yIGRlZmxhdGUgYXJlIChpbiBieXRlcyk6CiAgICoKICAgKiAgICAgKDEgPDwgKHdpbmRvd0JpdHMgKyAyKSkgKyAgKDEgPDwgKG1lbUxldmVsICsgOSkpCiAgICogdGhhdCBpczogMTI4SyBmb3Igd2luZG93Qml0cyA9IDE1ICsgMTI4SyBmb3IgbWVtTGV2ZWwgPSA4IChkZWZhdWx0IHZhbHVlcykKICAgKi8KICBmaW5hbCBpbnQgbWVtTGV2ZWw7CgogIC8qKgogICAqIFR1bmVzIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0uIFVzZSB0aGUgdmFsdWUgc3RyYXRlZ3lEZWZhdWx0IGZvciBub3JtYWwKICAgKiBkYXRhLCBzdHJhdGVneUZpbHRlcmVkIGZvciBkYXRhIHByb2R1Y2VkIGJ5IGEgZmlsdGVyIChvciBwcmVkaWN0b3IpLAogICAqIHN0cmF0ZWd5SHVmZm1hbk9ubHkgdG8gZm9yY2UgSHVmZm1hbiBlbmNvZGluZyBvbmx5IChubyBzdHJpbmcgbWF0Y2gpLCBvcgogICAqIHN0cmF0ZWd5UmxlIHRvIGxpbWl0IG1hdGNoIGRpc3RhbmNlcyB0byBvbmUgKHJ1bi1sZW5ndGggZW5jb2RpbmcpLgogICAqLwogIGZpbmFsIGludCBzdHJhdGVneTsKCiAgLyoqCiAgICogQmFzZSB0d28gbG9nYXJpdGhtIG9mIHRoZSB3aW5kb3cgc2l6ZSAodGhlIHNpemUgb2YgdGhlIGhpc3RvcnkgYnVmZmVyKS4gSXQKICAgKiBzaG91bGQgYmUgaW4gdGhlIHJhbmdlIDguLjE1LiBMYXJnZXIgdmFsdWVzIHJlc3VsdCBpbiBiZXR0ZXIgY29tcHJlc3Npb24gYXQKICAgKiB0aGUgZXhwZW5zZSBvZiBtZW1vcnkgdXNhZ2UuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDE1CiAgICovCiAgZmluYWwgaW50IHdpbmRvd0JpdHM7CgogIC8qKgogICAqIFdoZW4gdHJ1ZSwgZGVmbGF0ZSBnZW5lcmF0ZXMgcmF3IGRhdGEgd2l0aCBubyB6bGliIGhlYWRlciBvciB0cmFpbGVyLCBhbmQKICAgKiB3aWxsIG5vdCBjb21wdXRlIGFuIGFkbGVyMzIgY2hlY2sgdmFsdWUKICAgKi8KICBmaW5hbCBib29sIHJhdzsKCiAgLyoqCiAgICogSW5pdGlhbCBjb21wcmVzc2lvbiBkaWN0aW9uYXJ5LgogICAqCiAgICogSXQgc2hvdWxkIGNvbnNpc3Qgb2Ygc3RyaW5ncyAoYnl0ZSBzZXF1ZW5jZXMpIHRoYXQgYXJlIGxpa2VseSB0byBiZQogICAqIGVuY291bnRlcmVkIGxhdGVyIGluIHRoZSBkYXRhIHRvIGJlIGNvbXByZXNzZWQsIHdpdGggdGhlIG1vc3QgY29tbW9ubHkgdXNlZAogICAqIHN0cmluZ3MgcHJlZmVyYWJseSBwdXQgdG93YXJkcyB0aGUgZW5kIG9mIHRoZSBkaWN0aW9uYXJ5LiBVc2luZyBhCiAgICogZGljdGlvbmFyeSBpcyBtb3N0IHVzZWZ1bCB3aGVuIHRoZSBkYXRhIHRvIGJlIGNvbXByZXNzZWQgaXMgc2hvcnQgYW5kIGNhbgogICAqIGJlIHByZWRpY3RlZCB3aXRoIGdvb2QgYWNjdXJhY3k7IHRoZSBkYXRhIGNhbiB0aGVuIGJlIGNvbXByZXNzZWQgYmV0dGVyCiAgICogdGhhbiB3aXRoIHRoZSBkZWZhdWx0IGVtcHR5IGRpY3Rpb25hcnkuCiAgICovCiAgZmluYWwgTGlzdDxpbnQ+IGRpY3Rpb25hcnk7CgogIFpMaWJDb2RlYygKICAgICAge3RoaXMubGV2ZWw6IFpMaWJPcHRpb24uZGVmYXVsdExldmVsLAogICAgICB0aGlzLndpbmRvd0JpdHM6IFpMaWJPcHRpb24uZGVmYXVsdFdpbmRvd0JpdHMsCiAgICAgIHRoaXMubWVtTGV2ZWw6IFpMaWJPcHRpb24uZGVmYXVsdE1lbUxldmVsLAogICAgICB0aGlzLnN0cmF0ZWd5OiBaTGliT3B0aW9uLnN0cmF0ZWd5RGVmYXVsdCwKICAgICAgdGhpcy5kaWN0aW9uYXJ5LAogICAgICB0aGlzLnJhdzogZmFsc2UsCiAgICAgIHRoaXMuZ3ppcDogZmFsc2V9KSB7CiAgICBfdmFsaWRhdGVaTGliZUxldmVsKGxldmVsKTsKICAgIF92YWxpZGF0ZVpMaWJNZW1MZXZlbChtZW1MZXZlbCk7CiAgICBfdmFsaWRhdGVaTGliU3RyYXRlZ3koc3RyYXRlZ3kpOwogICAgX3ZhbGlkYXRlWkxpYldpbmRvd0JpdHMod2luZG93Qml0cyk7CiAgfQoKICBjb25zdCBaTGliQ29kZWMuX2RlZmF1bHQoKQogICAgICA6IGxldmVsID0gWkxpYk9wdGlvbi5kZWZhdWx0TGV2ZWwsCiAgICAgICAgd2luZG93Qml0cyA9IFpMaWJPcHRpb24uZGVmYXVsdFdpbmRvd0JpdHMsCiAgICAgICAgbWVtTGV2ZWwgPSBaTGliT3B0aW9uLmRlZmF1bHRNZW1MZXZlbCwKICAgICAgICBzdHJhdGVneSA9IFpMaWJPcHRpb24uc3RyYXRlZ3lEZWZhdWx0LAogICAgICAgIHJhdyA9IGZhbHNlLAogICAgICAgIGd6aXAgPSBmYWxzZSwKICAgICAgICBkaWN0aW9uYXJ5ID0gbnVsbDsKCiAgLyoqCiAgICogR2V0IGEgW1pMaWJFbmNvZGVyXSBmb3IgZW5jb2RpbmcgdG8gYFpMaWJgIGNvbXByZXNzZWQgZGF0YS4KICAgKi8KICBaTGliRW5jb2RlciBnZXQgZW5jb2RlciA9PiBuZXcgWkxpYkVuY29kZXIoCiAgICAgIGd6aXA6IGZhbHNlLAogICAgICBsZXZlbDogbGV2ZWwsCiAgICAgIHdpbmRvd0JpdHM6IHdpbmRvd0JpdHMsCiAgICAgIG1lbUxldmVsOiBtZW1MZXZlbCwKICAgICAgc3RyYXRlZ3k6IHN0cmF0ZWd5LAogICAgICBkaWN0aW9uYXJ5OiBkaWN0aW9uYXJ5LAogICAgICByYXc6IHJhdyk7CgogIC8qKgogICAqIEdldCBhIFtaTGliRGVjb2Rlcl0gZm9yIGRlY29kaW5nIGBaTGliYCBjb21wcmVzc2VkIGRhdGEuCiAgICovCiAgWkxpYkRlY29kZXIgZ2V0IGRlY29kZXIgPT4KICAgICAgbmV3IFpMaWJEZWNvZGVyKHdpbmRvd0JpdHM6IHdpbmRvd0JpdHMsIGRpY3Rpb25hcnk6IGRpY3Rpb25hcnksIHJhdzogcmF3KTsKfQoKLyoqCiAqIEFuIGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBbR1ppcENvZGVjXS4KICovCmNvbnN0IEdaaXBDb2RlYyBnemlwID0gY29uc3QgR1ppcENvZGVjLl9kZWZhdWx0KCk7CkBEZXByZWNhdGVkKCJVc2UgZ3ppcCBpbnN0ZWFkIikKY29uc3QgR1ppcENvZGVjIEdaSVAgPSBnemlwOwoKLyoqCiAqIFRoZSBbR1ppcENvZGVjXSBlbmNvZGVzIHJhdyBieXRlcyB0byBHWmlwIGNvbXByZXNzZWQgYnl0ZXMgYW5kIGRlY29kZXMgR1ppcAogKiBjb21wcmVzc2VkIGJ5dGVzIHRvIHJhdyBieXRlcy4KICoKICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBbWkxpYkNvZGVjXSBhbmQgW0daaXBDb2RlY10gaXMgdGhhdCB0aGUgW0daaXBDb2RlY10KICogd3JhcHMgdGhlIGBaTGliYCBjb21wcmVzc2VkIGJ5dGVzIGluIGBHWmlwYCBmcmFtZXMuCiAqLwpjbGFzcyBHWmlwQ29kZWMgZXh0ZW5kcyBDb2RlYzxMaXN0PGludD4sIExpc3Q8aW50Pj4gewogIC8qKgogICAqIFdoZW4gdHJ1ZSwgYEdaaXBgIGZyYW1lcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBjb21wcmVzc2VkIGRhdGEuCiAgICovCiAgZmluYWwgYm9vbCBnemlwOwoKICAvKioKICAgKiBUaGUgY29tcHJlc3Npb24tW2xldmVsXSBjYW4gYmUgc2V0IGluIHRoZSByYW5nZSBvZiBgLTEuLjlgLCB3aXRoIGA2YCBiZWluZwogICAqIHRoZSBkZWZhdWx0IGNvbXByZXNzaW9uIGxldmVsLiBMZXZlbHMgYWJvdmUgYDZgIHdpbGwgaGF2ZSBoaWdoZXIKICAgKiBjb21wcmVzc2lvbiByYXRlcyBhdCB0aGUgY29zdCBvZiBtb3JlIENQVSBhbmQgbWVtb3J5IHVzYWdlLiBMZXZlbHMgYmVsb3cKICAgKiBgNmAgd2lsbCB1c2UgbGVzcyBDUFUgYW5kIG1lbW9yeSBhdCB0aGUgY29zdCBvZiBsb3dlciBjb21wcmVzc2lvbiByYXRlcy4KICAgKi8KICBmaW5hbCBpbnQgbGV2ZWw7CgogIC8qKgogICAqIFNwZWNpZmllcyBob3cgbXVjaCBtZW1vcnkgc2hvdWxkIGJlIGFsbG9jYXRlZCBmb3IgdGhlIGludGVybmFsIGNvbXByZXNzaW9uCiAgICogc3RhdGUuIGAxYCB1c2VzIG1pbmltdW0gbWVtb3J5IGJ1dCBpcyBzbG93IGFuZCByZWR1Y2VzIGNvbXByZXNzaW9uIHJhdGlvOwogICAqIGA5YCB1c2VzIG1heGltdW0gbWVtb3J5IGZvciBvcHRpbWFsIHNwZWVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgOGAuCiAgICoKICAgKiBUaGUgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgZGVmbGF0ZSBhcmUgKGluIGJ5dGVzKToKICAgKgogICAqICAgICAoMSA8PCAod2luZG93Qml0cyArIDIpKSArICAoMSA8PCAobWVtTGV2ZWwgKyA5KSkKICAgKiB0aGF0IGlzOiAxMjhLIGZvciB3aW5kb3dCaXRzID0gMTUgKyAxMjhLIGZvciBtZW1MZXZlbCA9IDggKGRlZmF1bHQgdmFsdWVzKQogICAqLwogIGZpbmFsIGludCBtZW1MZXZlbDsKCiAgLyoqCiAgICogVHVuZXMgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobS4gVXNlIHRoZSB2YWx1ZQogICAqIFtaTGliT3B0aW9uLnN0cmF0ZWd5RGVmYXVsdF0gZm9yIG5vcm1hbCBkYXRhLAogICAqIFtaTGliT3B0aW9uLnN0cmF0ZWd5RmlsdGVyZWRdIGZvciBkYXRhIHByb2R1Y2VkIGJ5IGEgZmlsdGVyCiAgICogKG9yIHByZWRpY3RvciksIFtaTGliT3B0aW9uLnN0cmF0ZWd5SHVmZm1hbk9ubHldIHRvIGZvcmNlIEh1ZmZtYW4KICAgKiBlbmNvZGluZyBvbmx5IChubyBzdHJpbmcgbWF0Y2gpLCBvciBbWkxpYk9wdGlvbi5zdHJhdGVneVJsZV0gdG8gbGltaXQKICAgKiBtYXRjaCBkaXN0YW5jZXMgdG8gb25lIChydW4tbGVuZ3RoIGVuY29kaW5nKS4KICAgKi8KICBmaW5hbCBpbnQgc3RyYXRlZ3k7CgogIC8qKgogICAqIEJhc2UgdHdvIGxvZ2FyaXRobSBvZiB0aGUgd2luZG93IHNpemUgKHRoZSBzaXplIG9mIHRoZSBoaXN0b3J5IGJ1ZmZlcikuIEl0CiAgICogc2hvdWxkIGJlIGluIHRoZSByYW5nZSBgOC4uMTVgLiBMYXJnZXIgdmFsdWVzIHJlc3VsdCBpbiBiZXR0ZXIgY29tcHJlc3Npb24KICAgKiBhdCB0aGUgZXhwZW5zZSBvZiBtZW1vcnkgdXNhZ2UuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGAxNWAKICAgKi8KICBmaW5hbCBpbnQgd2luZG93Qml0czsKCiAgLyoqCiAgICogSW5pdGlhbCBjb21wcmVzc2lvbiBkaWN0aW9uYXJ5LgogICAqCiAgICogSXQgc2hvdWxkIGNvbnNpc3Qgb2Ygc3RyaW5ncyAoYnl0ZSBzZXF1ZW5jZXMpIHRoYXQgYXJlIGxpa2VseSB0byBiZQogICAqIGVuY291bnRlcmVkIGxhdGVyIGluIHRoZSBkYXRhIHRvIGJlIGNvbXByZXNzZWQsIHdpdGggdGhlIG1vc3QgY29tbW9ubHkgdXNlZAogICAqIHN0cmluZ3MgcHJlZmVyYWJseSBwdXQgdG93YXJkcyB0aGUgZW5kIG9mIHRoZSBkaWN0aW9uYXJ5LiBVc2luZyBhCiAgICogZGljdGlvbmFyeSBpcyBtb3N0IHVzZWZ1bCB3aGVuIHRoZSBkYXRhIHRvIGJlIGNvbXByZXNzZWQgaXMgc2hvcnQgYW5kIGNhbgogICAqIGJlIHByZWRpY3RlZCB3aXRoIGdvb2QgYWNjdXJhY3k7IHRoZSBkYXRhIGNhbiB0aGVuIGJlIGNvbXByZXNzZWQgYmV0dGVyCiAgICogdGhhbiB3aXRoIHRoZSBkZWZhdWx0IGVtcHR5IGRpY3Rpb25hcnkuCiAgICovCiAgZmluYWwgTGlzdDxpbnQ+IGRpY3Rpb25hcnk7CgogIC8qKgogICAqIFdoZW4gdHJ1ZSwgZGVmbGF0ZSBnZW5lcmF0ZXMgcmF3IGRhdGEgd2l0aCBubyB6bGliIGhlYWRlciBvciB0cmFpbGVyLCBhbmQKICAgKiB3aWxsIG5vdCBjb21wdXRlIGFuIGFkbGVyMzIgY2hlY2sgdmFsdWUKICAgKi8KICBmaW5hbCBib29sIHJhdzsKCiAgR1ppcENvZGVjKAogICAgICB7dGhpcy5sZXZlbDogWkxpYk9wdGlvbi5kZWZhdWx0TGV2ZWwsCiAgICAgIHRoaXMud2luZG93Qml0czogWkxpYk9wdGlvbi5kZWZhdWx0V2luZG93Qml0cywKICAgICAgdGhpcy5tZW1MZXZlbDogWkxpYk9wdGlvbi5kZWZhdWx0TWVtTGV2ZWwsCiAgICAgIHRoaXMuc3RyYXRlZ3k6IFpMaWJPcHRpb24uc3RyYXRlZ3lEZWZhdWx0LAogICAgICB0aGlzLmRpY3Rpb25hcnksCiAgICAgIHRoaXMucmF3OiBmYWxzZSwKICAgICAgdGhpcy5nemlwOiB0cnVlfSkgewogICAgX3ZhbGlkYXRlWkxpYmVMZXZlbChsZXZlbCk7CiAgICBfdmFsaWRhdGVaTGliTWVtTGV2ZWwobWVtTGV2ZWwpOwogICAgX3ZhbGlkYXRlWkxpYlN0cmF0ZWd5KHN0cmF0ZWd5KTsKICAgIF92YWxpZGF0ZVpMaWJXaW5kb3dCaXRzKHdpbmRvd0JpdHMpOwogIH0KCiAgY29uc3QgR1ppcENvZGVjLl9kZWZhdWx0KCkKICAgICAgOiBsZXZlbCA9IFpMaWJPcHRpb24uZGVmYXVsdExldmVsLAogICAgICAgIHdpbmRvd0JpdHMgPSBaTGliT3B0aW9uLmRlZmF1bHRXaW5kb3dCaXRzLAogICAgICAgIG1lbUxldmVsID0gWkxpYk9wdGlvbi5kZWZhdWx0TWVtTGV2ZWwsCiAgICAgICAgc3RyYXRlZ3kgPSBaTGliT3B0aW9uLnN0cmF0ZWd5RGVmYXVsdCwKICAgICAgICByYXcgPSBmYWxzZSwKICAgICAgICBnemlwID0gdHJ1ZSwKICAgICAgICBkaWN0aW9uYXJ5ID0gbnVsbDsKCiAgLyoqCiAgICogR2V0IGEgW1pMaWJFbmNvZGVyXSBmb3IgZW5jb2RpbmcgdG8gYEdaaXBgIGNvbXByZXNzZWQgZGF0YS4KICAgKi8KICBaTGliRW5jb2RlciBnZXQgZW5jb2RlciA9PiBuZXcgWkxpYkVuY29kZXIoCiAgICAgIGd6aXA6IHRydWUsCiAgICAgIGxldmVsOiBsZXZlbCwKICAgICAgd2luZG93Qml0czogd2luZG93Qml0cywKICAgICAgbWVtTGV2ZWw6IG1lbUxldmVsLAogICAgICBzdHJhdGVneTogc3RyYXRlZ3ksCiAgICAgIGRpY3Rpb25hcnk6IGRpY3Rpb25hcnksCiAgICAgIHJhdzogcmF3KTsKCiAgLyoqCiAgICogR2V0IGEgW1pMaWJEZWNvZGVyXSBmb3IgZGVjb2RpbmcgYEdaaXBgIGNvbXByZXNzZWQgZGF0YS4KICAgKi8KICBaTGliRGVjb2RlciBnZXQgZGVjb2RlciA9PgogICAgICBuZXcgWkxpYkRlY29kZXIod2luZG93Qml0czogd2luZG93Qml0cywgZGljdGlvbmFyeTogZGljdGlvbmFyeSwgcmF3OiByYXcpOwp9CgovKioKICogVGhlIFtaTGliRW5jb2Rlcl0gZW5jb2RlciBpcyB1c2VkIGJ5IFtaTGliQ29kZWNdIGFuZCBbR1ppcENvZGVjXSB0byBjb21wcmVzcwogKiBkYXRhLgogKi8KY2xhc3MgWkxpYkVuY29kZXIgZXh0ZW5kcyBDb252ZXJ0ZXI8TGlzdDxpbnQ+LCBMaXN0PGludD4+IHsKICAvKioKICAgKiBXaGVuIHRydWUsIGBHWmlwYCBmcmFtZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgY29tcHJlc3NlZCBkYXRhLgogICAqLwogIGZpbmFsIGJvb2wgZ3ppcDsKCiAgLyoqCiAgICogVGhlIGNvbXByZXNzaW9uLVtsZXZlbF0gY2FuIGJlIHNldCBpbiB0aGUgcmFuZ2Ugb2YgYC0xLi45YCwgd2l0aCBgNmAgYmVpbmcKICAgKiB0aGUgZGVmYXVsdCBjb21wcmVzc2lvbiBsZXZlbC4gTGV2ZWxzIGFib3ZlIGA2YCB3aWxsIGhhdmUgaGlnaGVyCiAgICogY29tcHJlc3Npb24gcmF0ZXMgYXQgdGhlIGNvc3Qgb2YgbW9yZSBDUFUgYW5kIG1lbW9yeSB1c2FnZS4gTGV2ZWxzIGJlbG93CiAgICogYDZgIHdpbGwgdXNlIGxlc3MgQ1BVIGFuZCBtZW1vcnkgYXQgdGhlIGNvc3Qgb2YgbG93ZXIgY29tcHJlc3Npb24gcmF0ZXMuCiAgICovCiAgZmluYWwgaW50IGxldmVsOwoKICAvKioKICAgKiBTcGVjaWZpZXMgaG93IG11Y2ggbWVtb3J5IHNob3VsZCBiZSBhbGxvY2F0ZWQgZm9yIHRoZSBpbnRlcm5hbCBjb21wcmVzc2lvbgogICAqIHN0YXRlLiBgMWAgdXNlcyBtaW5pbXVtIG1lbW9yeSBidXQgaXMgc2xvdyBhbmQgcmVkdWNlcyBjb21wcmVzc2lvbiByYXRpbzsKICAgKiBgOWAgdXNlcyBtYXhpbXVtIG1lbW9yeSBmb3Igb3B0aW1hbCBzcGVlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYDhgLgogICAqCiAgICogVGhlIG1lbW9yeSByZXF1aXJlbWVudHMgZm9yIGRlZmxhdGUgYXJlIChpbiBieXRlcyk6CiAgICoKICAgKiAgICAgKDEgPDwgKHdpbmRvd0JpdHMgKyAyKSkgKyAgKDEgPDwgKG1lbUxldmVsICsgOSkpCiAgICogdGhhdCBpczogMTI4SyBmb3Igd2luZG93Qml0cyA9IDE1ICsgMTI4SyBmb3IgbWVtTGV2ZWwgPSA4IChkZWZhdWx0IHZhbHVlcykKICAgKi8KICBmaW5hbCBpbnQgbWVtTGV2ZWw7CgogIC8qKgogICAqIFR1bmVzIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0uIFVzZSB0aGUgdmFsdWUKICAgKiBbWkxpYk9wdGlvbi5zdHJhdGVneURlZmF1bHRdIGZvciBub3JtYWwgZGF0YSwKICAgKiBbWkxpYk9wdGlvbi5zdHJhdGVneUZpbHRlcmVkXSBmb3IgZGF0YSBwcm9kdWNlZCBieSBhIGZpbHRlcgogICAqIChvciBwcmVkaWN0b3IpLCBbWkxpYk9wdGlvbi5zdHJhdGVneUh1ZmZtYW5Pbmx5XSB0byBmb3JjZSBIdWZmbWFuCiAgICogZW5jb2Rpbmcgb25seSAobm8gc3RyaW5nIG1hdGNoKSwgb3IgW1pMaWJPcHRpb24uc3RyYXRlZ3lSbGVdIHRvIGxpbWl0CiAgICogbWF0Y2ggZGlzdGFuY2VzIHRvIG9uZSAocnVuLWxlbmd0aCBlbmNvZGluZykuCiAgICovCiAgZmluYWwgaW50IHN0cmF0ZWd5OwoKICAvKioKICAgKiBCYXNlIHR3byBsb2dhcml0aG0gb2YgdGhlIHdpbmRvdyBzaXplICh0aGUgc2l6ZSBvZiB0aGUgaGlzdG9yeSBidWZmZXIpLiBJdAogICAqIHNob3VsZCBiZSBpbiB0aGUgcmFuZ2UgYDguLjE1YC4gTGFyZ2VyIHZhbHVlcyByZXN1bHQgaW4gYmV0dGVyIGNvbXByZXNzaW9uCiAgICogYXQgdGhlIGV4cGVuc2Ugb2YgbWVtb3J5IHVzYWdlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgMTVgCiAgICovCiAgZmluYWwgaW50IHdpbmRvd0JpdHM7CgogIC8qKgogICAqIEluaXRpYWwgY29tcHJlc3Npb24gZGljdGlvbmFyeS4KICAgKgogICAqIEl0IHNob3VsZCBjb25zaXN0IG9mIHN0cmluZ3MgKGJ5dGUgc2VxdWVuY2VzKSB0aGF0IGFyZSBsaWtlbHkgdG8gYmUKICAgKiBlbmNvdW50ZXJlZCBsYXRlciBpbiB0aGUgZGF0YSB0byBiZSBjb21wcmVzc2VkLCB3aXRoIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQKICAgKiBzdHJpbmdzIHByZWZlcmFibHkgcHV0IHRvd2FyZHMgdGhlIGVuZCBvZiB0aGUgZGljdGlvbmFyeS4gVXNpbmcgYQogICAqIGRpY3Rpb25hcnkgaXMgbW9zdCB1c2VmdWwgd2hlbiB0aGUgZGF0YSB0byBiZSBjb21wcmVzc2VkIGlzIHNob3J0IGFuZCBjYW4KICAgKiBiZSBwcmVkaWN0ZWQgd2l0aCBnb29kIGFjY3VyYWN5OyB0aGUgZGF0YSBjYW4gdGhlbiBiZSBjb21wcmVzc2VkIGJldHRlcgogICAqIHRoYW4gd2l0aCB0aGUgZGVmYXVsdCBlbXB0eSBkaWN0aW9uYXJ5LgogICAqLwogIGZpbmFsIExpc3Q8aW50PiBkaWN0aW9uYXJ5OwoKICAvKioKICAgKiBXaGVuIHRydWUsIGRlZmxhdGUgZ2VuZXJhdGVzIHJhdyBkYXRhIHdpdGggbm8gemxpYiBoZWFkZXIgb3IgdHJhaWxlciwgYW5kCiAgICogd2lsbCBub3QgY29tcHV0ZSBhbiBhZGxlcjMyIGNoZWNrIHZhbHVlCiAgICovCiAgZmluYWwgYm9vbCByYXc7CgogIFpMaWJFbmNvZGVyKAogICAgICB7dGhpcy5nemlwOiBmYWxzZSwKICAgICAgdGhpcy5sZXZlbDogWkxpYk9wdGlvbi5kZWZhdWx0TGV2ZWwsCiAgICAgIHRoaXMud2luZG93Qml0czogWkxpYk9wdGlvbi5kZWZhdWx0V2luZG93Qml0cywKICAgICAgdGhpcy5tZW1MZXZlbDogWkxpYk9wdGlvbi5kZWZhdWx0TWVtTGV2ZWwsCiAgICAgIHRoaXMuc3RyYXRlZ3k6IFpMaWJPcHRpb24uc3RyYXRlZ3lEZWZhdWx0LAogICAgICB0aGlzLmRpY3Rpb25hcnksCiAgICAgIHRoaXMucmF3OiBmYWxzZX0pIHsKICAgIF92YWxpZGF0ZVpMaWJlTGV2ZWwobGV2ZWwpOwogICAgX3ZhbGlkYXRlWkxpYk1lbUxldmVsKG1lbUxldmVsKTsKICAgIF92YWxpZGF0ZVpMaWJTdHJhdGVneShzdHJhdGVneSk7CiAgICBfdmFsaWRhdGVaTGliV2luZG93Qml0cyh3aW5kb3dCaXRzKTsKICB9CgogIC8qKgogICAqIENvbnZlcnQgYSBsaXN0IG9mIGJ5dGVzIHVzaW5nIHRoZSBvcHRpb25zIGdpdmVuIHRvIHRoZSBaTGliRW5jb2RlcgogICAqIGNvbnN0cnVjdG9yLgogICAqLwogIExpc3Q8aW50PiBjb252ZXJ0KExpc3Q8aW50PiBieXRlcykgewogICAgX0J1ZmZlclNpbmsgc2luayA9IG5ldyBfQnVmZmVyU2luaygpOwogICAgc3RhcnRDaHVua2VkQ29udmVyc2lvbihzaW5rKQogICAgICAuLmFkZChieXRlcykKICAgICAgLi5jbG9zZSgpOwogICAgcmV0dXJuIHNpbmsuYnVpbGRlci50YWtlQnl0ZXMoKTsKICB9CgogIC8qKgogICAqIFN0YXJ0IGEgY2h1bmtlZCBjb252ZXJzaW9uIHVzaW5nIHRoZSBvcHRpb25zIGdpdmVuIHRvIHRoZSBbWkxpYkVuY29kZXJdCiAgICogY29uc3RydWN0b3IuIFdoaWxlIGl0IGFjY2VwdHMgYW55IFtTaW5rXSB0YWtpbmcgW0xpc3Q8aW50Pl0ncywKICAgKiB0aGUgb3B0aW1hbCBzaW5rIHRvIGJlIHBhc3NlZCBhcyBbc2lua10gaXMgYSBbQnl0ZUNvbnZlcnNpb25TaW5rXS4KICAgKi8KICBCeXRlQ29udmVyc2lvblNpbmsgc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPExpc3Q8aW50Pj4gc2luaykgewogICAgaWYgKHNpbmsgaXMhIEJ5dGVDb252ZXJzaW9uU2luaykgewogICAgICBzaW5rID0gbmV3IEJ5dGVDb252ZXJzaW9uU2luay5mcm9tKHNpbmspOwogICAgfQogICAgcmV0dXJuIG5ldyBfWkxpYkVuY29kZXJTaW5rLl8oCiAgICAgICAgc2luaywgZ3ppcCwgbGV2ZWwsIHdpbmRvd0JpdHMsIG1lbUxldmVsLCBzdHJhdGVneSwgZGljdGlvbmFyeSwgcmF3KTsKICB9Cn0KCi8qKgogKiBUaGUgW1pMaWJEZWNvZGVyXSBpcyB1c2VkIGJ5IFtaTGliQ29kZWNdIGFuZCBbR1ppcENvZGVjXSB0byBkZWNvbXByZXNzIGRhdGEuCiAqLwpjbGFzcyBaTGliRGVjb2RlciBleHRlbmRzIENvbnZlcnRlcjxMaXN0PGludD4sIExpc3Q8aW50Pj4gewogIC8qKgogICAqIEJhc2UgdHdvIGxvZ2FyaXRobSBvZiB0aGUgd2luZG93IHNpemUgKHRoZSBzaXplIG9mIHRoZSBoaXN0b3J5IGJ1ZmZlcikuIEl0CiAgICogc2hvdWxkIGJlIGluIHRoZSByYW5nZSBgOC4uMTVgLiBMYXJnZXIgdmFsdWVzIHJlc3VsdCBpbiBiZXR0ZXIgY29tcHJlc3Npb24KICAgKiBhdCB0aGUgZXhwZW5zZSBvZiBtZW1vcnkgdXNhZ2UuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGAxNWAuCiAgICovCiAgZmluYWwgaW50IHdpbmRvd0JpdHM7CgogIC8qKgogICAqIEluaXRpYWwgY29tcHJlc3Npb24gZGljdGlvbmFyeS4KICAgKgogICAqIEl0IHNob3VsZCBjb25zaXN0IG9mIHN0cmluZ3MgKGJ5dGUgc2VxdWVuY2VzKSB0aGF0IGFyZSBsaWtlbHkgdG8gYmUKICAgKiBlbmNvdW50ZXJlZCBsYXRlciBpbiB0aGUgZGF0YSB0byBiZSBjb21wcmVzc2VkLCB3aXRoIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQKICAgKiBzdHJpbmdzIHByZWZlcmFibHkgcHV0IHRvd2FyZHMgdGhlIGVuZCBvZiB0aGUgZGljdGlvbmFyeS4gVXNpbmcgYQogICAqIGRpY3Rpb25hcnkgaXMgbW9zdCB1c2VmdWwgd2hlbiB0aGUgZGF0YSB0byBiZSBjb21wcmVzc2VkIGlzIHNob3J0IGFuZCBjYW4KICAgKiBiZSBwcmVkaWN0ZWQgd2l0aCBnb29kIGFjY3VyYWN5OyB0aGUgZGF0YSBjYW4gdGhlbiBiZSBjb21wcmVzc2VkIGJldHRlcgogICAqIHRoYW4gd2l0aCB0aGUgZGVmYXVsdCBlbXB0eSBkaWN0aW9uYXJ5LgogICAqLwogIGZpbmFsIExpc3Q8aW50PiBkaWN0aW9uYXJ5OwoKICAvKioKICAgKiBXaGVuIHRydWUsIGRlZmxhdGUgZ2VuZXJhdGVzIHJhdyBkYXRhIHdpdGggbm8gemxpYiBoZWFkZXIgb3IgdHJhaWxlciwgYW5kCiAgICogd2lsbCBub3QgY29tcHV0ZSBhbiBhZGxlcjMyIGNoZWNrIHZhbHVlCiAgICovCiAgZmluYWwgYm9vbCByYXc7CgogIFpMaWJEZWNvZGVyKAogICAgICB7dGhpcy53aW5kb3dCaXRzOiBaTGliT3B0aW9uLmRlZmF1bHRXaW5kb3dCaXRzLAogICAgICB0aGlzLmRpY3Rpb25hcnksCiAgICAgIHRoaXMucmF3OiBmYWxzZX0pIHsKICAgIF92YWxpZGF0ZVpMaWJXaW5kb3dCaXRzKHdpbmRvd0JpdHMpOwogIH0KCiAgLyoqCiAgICogQ29udmVydCBhIGxpc3Qgb2YgYnl0ZXMgdXNpbmcgdGhlIG9wdGlvbnMgZ2l2ZW4gdG8gdGhlIFtaTGliRGVjb2Rlcl0KICAgKiBjb25zdHJ1Y3Rvci4KICAgKi8KICBMaXN0PGludD4gY29udmVydChMaXN0PGludD4gYnl0ZXMpIHsKICAgIF9CdWZmZXJTaW5rIHNpbmsgPSBuZXcgX0J1ZmZlclNpbmsoKTsKICAgIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oc2luaykKICAgICAgLi5hZGQoYnl0ZXMpCiAgICAgIC4uY2xvc2UoKTsKICAgIHJldHVybiBzaW5rLmJ1aWxkZXIudGFrZUJ5dGVzKCk7CiAgfQoKICAvKioKICAgKiBTdGFydCBhIGNodW5rZWQgY29udmVyc2lvbi4gV2hpbGUgaXQgYWNjZXB0cyBhbnkgW1NpbmtdCiAgICogdGFraW5nIFtMaXN0PGludD5dJ3MsIHRoZSBvcHRpbWFsIHNpbmsgdG8gYmUgcGFzc2VkIGFzIFtzaW5rXSBpcyBhCiAgICogW0J5dGVDb252ZXJzaW9uU2lua10uCiAgICovCiAgQnl0ZUNvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxMaXN0PGludD4+IHNpbmspIHsKICAgIGlmIChzaW5rIGlzISBCeXRlQ29udmVyc2lvblNpbmspIHsKICAgICAgc2luayA9IG5ldyBCeXRlQ29udmVyc2lvblNpbmsuZnJvbShzaW5rKTsKICAgIH0KICAgIHJldHVybiBuZXcgX1pMaWJEZWNvZGVyU2luay5fKHNpbmssIHdpbmRvd0JpdHMsIGRpY3Rpb25hcnksIHJhdyk7CiAgfQp9CgovKioKICogVGhlIFtSYXdaTGliRmlsdGVyXSBjbGFzcyBwcm92aWRlcyBhIGxvdy1sZXZlbCBpbnRlcmZhY2UgdG8gemxpYi4KICovCmFic3RyYWN0IGNsYXNzIFJhd1pMaWJGaWx0ZXIgewogIC8qKgogICAqIFJldHVybnMgYSBhIFtSYXdaTGliRmlsdGVyXSB3aG9zZSBbcHJvY2Vzc10gYW5kIFtwcm9jZXNzZWRdIG1ldGhvZHMKICAgKiBjb21wcmVzcyBkYXRhLgogICAqLwogIGZhY3RvcnkgUmF3WkxpYkZpbHRlci5kZWZsYXRlRmlsdGVyKHsKICAgIGJvb2wgZ3ppcDogZmFsc2UsCiAgICBpbnQgbGV2ZWw6IFpMaWJPcHRpb24uZGVmYXVsdExldmVsLAogICAgaW50IHdpbmRvd0JpdHM6IFpMaWJPcHRpb24uZGVmYXVsdFdpbmRvd0JpdHMsCiAgICBpbnQgbWVtTGV2ZWw6IFpMaWJPcHRpb24uZGVmYXVsdE1lbUxldmVsLAogICAgaW50IHN0cmF0ZWd5OiBaTGliT3B0aW9uLnN0cmF0ZWd5RGVmYXVsdCwKICAgIExpc3Q8aW50PiBkaWN0aW9uYXJ5LAogICAgYm9vbCByYXc6IGZhbHNlLAogIH0pIHsKICAgIHJldHVybiBfbWFrZVpMaWJEZWZsYXRlRmlsdGVyKAogICAgICAgIGd6aXAsIGxldmVsLCB3aW5kb3dCaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3ksIGRpY3Rpb25hcnksIHJhdyk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgYSBbUmF3WkxpYkZpbHRlcl0gd2hvc2UgW3Byb2Nlc3NdIGFuZCBbcHJvY2Vzc2VkXSBtZXRob2RzCiAgICogZGVjb21wcmVzcyBkYXRhLgogICAqLwogIGZhY3RvcnkgUmF3WkxpYkZpbHRlci5pbmZsYXRlRmlsdGVyKHsKICAgIGludCB3aW5kb3dCaXRzOiBaTGliT3B0aW9uLmRlZmF1bHRXaW5kb3dCaXRzLAogICAgTGlzdDxpbnQ+IGRpY3Rpb25hcnksCiAgICBib29sIHJhdzogZmFsc2UsCiAgfSkgewogICAgcmV0dXJuIF9tYWtlWkxpYkluZmxhdGVGaWx0ZXIod2luZG93Qml0cywgZGljdGlvbmFyeSwgcmF3KTsKICB9CgogIC8qKgogICAqIENhbGwgdG8gcHJvY2VzcyBhIGNodW5rIG9mIGRhdGEuIEEgY2FsbCB0byBbcHJvY2Vzc10gc2hvdWxkIG9ubHkgYmUgbWFkZQogICAqIHdoZW4gW3Byb2Nlc3NlZF0gcmV0dXJucyBbOm51bGw6XS4KICAgKi8KICB2b2lkIHByb2Nlc3MoTGlzdDxpbnQ+IGRhdGEsIGludCBzdGFydCwgaW50IGVuZCk7CgogIC8qKgogICAqIEdldCBhIGNodW5rIG9mIHByb2Nlc3NlZCBkYXRhLiBXaGVuIHRoZXJlIGFyZSBubyBtb3JlIGRhdGEgYXZhaWxhYmxlLAogICAqIFtwcm9jZXNzZWRdIHdpbGwgcmV0dXJuIFs6bnVsbDpdLiBTZXQgW2ZsdXNoXSB0byBbOmZhbHNlOl0gZm9yIG5vbi1maW5hbAogICAqIGNhbGxzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2Ugb2Ygc29tZSBmaWx0ZXJzLgogICAqCiAgICogVGhlIGxhc3QgY2FsbCB0byBbcHJvY2Vzc2VkXSBzaG91bGQgaGF2ZSBbZW5kXSBzZXQgdG8gWzp0cnVlOl0uIFRoaXMgd2lsbAogICAqIG1ha2Ugc3VyZSBhbiAnZW5kJyBwYWNrZXQgaXMgd3JpdHRlbiBvbiB0aGUgc3RyZWFtLgogICAqLwogIExpc3Q8aW50PiBwcm9jZXNzZWQoe2Jvb2wgZmx1c2g6IHRydWUsIGJvb2wgZW5kOiBmYWxzZX0pOwoKICBleHRlcm5hbCBzdGF0aWMgUmF3WkxpYkZpbHRlciBfbWFrZVpMaWJEZWZsYXRlRmlsdGVyKAogICAgICBib29sIGd6aXAsCiAgICAgIGludCBsZXZlbCwKICAgICAgaW50IHdpbmRvd0JpdHMsCiAgICAgIGludCBtZW1MZXZlbCwKICAgICAgaW50IHN0cmF0ZWd5LAogICAgICBMaXN0PGludD4gZGljdGlvbmFyeSwKICAgICAgYm9vbCByYXcpOwoKICBleHRlcm5hbCBzdGF0aWMgUmF3WkxpYkZpbHRlciBfbWFrZVpMaWJJbmZsYXRlRmlsdGVyKAogICAgICBpbnQgd2luZG93Qml0cywgTGlzdDxpbnQ+IGRpY3Rpb25hcnksIGJvb2wgcmF3KTsKfQoKY2xhc3MgX0J1ZmZlclNpbmsgZXh0ZW5kcyBCeXRlQ29udmVyc2lvblNpbmsgewogIGZpbmFsIEJ5dGVzQnVpbGRlciBidWlsZGVyID0gbmV3IEJ5dGVzQnVpbGRlcihjb3B5OiBmYWxzZSk7CgogIHZvaWQgYWRkKExpc3Q8aW50PiBjaHVuaykgewogICAgYnVpbGRlci5hZGQoY2h1bmspOwogIH0KCiAgdm9pZCBhZGRTbGljZShMaXN0PGludD4gY2h1bmssIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIGlmIChjaHVuayBpcyBVaW50OExpc3QpIHsKICAgICAgVWludDhMaXN0IGxpc3QgPSBjaHVuazsKICAgICAgYnVpbGRlci5hZGQobmV3IFVpbnQ4TGlzdC52aWV3KGxpc3QuYnVmZmVyLCBzdGFydCwgZW5kIC0gc3RhcnQpKTsKICAgIH0gZWxzZSB7CiAgICAgIGJ1aWxkZXIuYWRkKGNodW5rLnN1Ymxpc3Qoc3RhcnQsIGVuZCkpOwogICAgfQogIH0KCiAgdm9pZCBjbG9zZSgpIHt9Cn0KCmNsYXNzIF9aTGliRW5jb2RlclNpbmsgZXh0ZW5kcyBfRmlsdGVyU2luayB7CiAgX1pMaWJFbmNvZGVyU2luay5fKAogICAgICBCeXRlQ29udmVyc2lvblNpbmsgc2luaywKICAgICAgYm9vbCBnemlwLAogICAgICBpbnQgbGV2ZWwsCiAgICAgIGludCB3aW5kb3dCaXRzLAogICAgICBpbnQgbWVtTGV2ZWwsCiAgICAgIGludCBzdHJhdGVneSwKICAgICAgTGlzdDxpbnQ+IGRpY3Rpb25hcnksCiAgICAgIGJvb2wgcmF3KQogICAgICA6IHN1cGVyKAogICAgICAgICAgICBzaW5rLAogICAgICAgICAgICBSYXdaTGliRmlsdGVyLl9tYWtlWkxpYkRlZmxhdGVGaWx0ZXIoCiAgICAgICAgICAgICAgICBnemlwLCBsZXZlbCwgd2luZG93Qml0cywgbWVtTGV2ZWwsIHN0cmF0ZWd5LCBkaWN0aW9uYXJ5LCByYXcpKTsKfQoKY2xhc3MgX1pMaWJEZWNvZGVyU2luayBleHRlbmRzIF9GaWx0ZXJTaW5rIHsKICBfWkxpYkRlY29kZXJTaW5rLl8oCiAgICAgIEJ5dGVDb252ZXJzaW9uU2luayBzaW5rLCBpbnQgd2luZG93Qml0cywgTGlzdDxpbnQ+IGRpY3Rpb25hcnksIGJvb2wgcmF3KQogICAgICA6IHN1cGVyKHNpbmssCiAgICAgICAgICAgIFJhd1pMaWJGaWx0ZXIuX21ha2VaTGliSW5mbGF0ZUZpbHRlcih3aW5kb3dCaXRzLCBkaWN0aW9uYXJ5LCByYXcpKTsKfQoKY2xhc3MgX0ZpbHRlclNpbmsgZXh0ZW5kcyBCeXRlQ29udmVyc2lvblNpbmsgewogIGZpbmFsIFJhd1pMaWJGaWx0ZXIgX2ZpbHRlcjsKICBmaW5hbCBCeXRlQ29udmVyc2lvblNpbmsgX3Npbms7CiAgYm9vbCBfY2xvc2VkID0gZmFsc2U7CiAgYm9vbCBfZW1wdHkgPSB0cnVlOwoKICBfRmlsdGVyU2luayh0aGlzLl9zaW5rLCB0aGlzLl9maWx0ZXIpOwoKICB2b2lkIGFkZChMaXN0PGludD4gZGF0YSkgewogICAgYWRkU2xpY2UoZGF0YSwgMCwgZGF0YS5sZW5ndGgsIGZhbHNlKTsKICB9CgogIHZvaWQgYWRkU2xpY2UoTGlzdDxpbnQ+IGRhdGEsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIGlmIChfY2xvc2VkKSByZXR1cm47CiAgICBpZiAoZW5kID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoImVuZCIpOwogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgZGF0YS5sZW5ndGgpOwogICAgdHJ5IHsKICAgICAgX2VtcHR5ID0gZmFsc2U7CiAgICAgIF9CdWZmZXJBbmRTdGFydCBidWZmZXJBbmRTdGFydCA9CiAgICAgICAgICBfZW5zdXJlRmFzdEFuZFNlcmlhbGl6YWJsZUJ5dGVEYXRhKGRhdGEsIHN0YXJ0LCBlbmQpOwogICAgICBfZmlsdGVyLnByb2Nlc3MoYnVmZmVyQW5kU3RhcnQuYnVmZmVyLCBidWZmZXJBbmRTdGFydC5zdGFydCwKICAgICAgICAgIGVuZCAtIChzdGFydCAtIGJ1ZmZlckFuZFN0YXJ0LnN0YXJ0KSk7CiAgICAgIExpc3Q8aW50PiBvdXQ7CiAgICAgIHdoaWxlICgob3V0ID0gX2ZpbHRlci5wcm9jZXNzZWQoZmx1c2g6IGZhbHNlKSkgIT0gbnVsbCkgewogICAgICAgIF9zaW5rLmFkZChvdXQpOwogICAgICB9CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIF9jbG9zZWQgPSB0cnVlOwogICAgICByZXRocm93OwogICAgfQoKICAgIGlmIChpc0xhc3QpIGNsb3NlKCk7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgaWYgKF9jbG9zZWQpIHJldHVybjsKICAgIC8vIEJlIHN1cmUgdG8gc2VuZCBwcm9jZXNzIGFuIGVtcHR5IGNodW5rIG9mIGRhdGEuIFdpdGhvdXQgdGhpcywgdGhlIGVtcHR5CiAgICAvLyBtZXNzYWdlIHdvdWxkIG5vdCBoYXZlIGEgR1ppcCBmcmFtZSAoaWYgY29tcHJlc3NlZCB3aXRoIEdaaXApLgogICAgaWYgKF9lbXB0eSkgX2ZpbHRlci5wcm9jZXNzKGNvbnN0IFtdLCAwLCAwKTsKICAgIHRyeSB7CiAgICAgIExpc3Q8aW50PiBvdXQ7CiAgICAgIHdoaWxlICgob3V0ID0gX2ZpbHRlci5wcm9jZXNzZWQoZW5kOiB0cnVlKSkgIT0gbnVsbCkgewogICAgICAgIF9zaW5rLmFkZChvdXQpOwogICAgICB9CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIC8vIFRPRE8oa2V2bW9vKTogbm90IHN1cmUgd2h5IHRoaXMgaXNuJ3QgYSB0cnkvZmluYWxseQogICAgICBfY2xvc2VkID0gdHJ1ZTsKICAgICAgdGhyb3cgZTsKICAgIH0KICAgIF9jbG9zZWQgPSB0cnVlOwogICAgX3NpbmsuY2xvc2UoKTsKICB9Cn0KCnZvaWQgX3ZhbGlkYXRlWkxpYldpbmRvd0JpdHMoaW50IHdpbmRvd0JpdHMpIHsKICBpZiAoWkxpYk9wdGlvbi5taW5XaW5kb3dCaXRzID4gd2luZG93Qml0cyB8fAogICAgICBaTGliT3B0aW9uLm1heFdpbmRvd0JpdHMgPCB3aW5kb3dCaXRzKSB7CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZSgKICAgICAgICB3aW5kb3dCaXRzLCBaTGliT3B0aW9uLm1pbldpbmRvd0JpdHMsIFpMaWJPcHRpb24ubWF4V2luZG93Qml0cyk7CiAgfQp9Cgp2b2lkIF92YWxpZGF0ZVpMaWJlTGV2ZWwoaW50IGxldmVsKSB7CiAgaWYgKFpMaWJPcHRpb24ubWluTGV2ZWwgPiBsZXZlbCB8fCBaTGliT3B0aW9uLm1heExldmVsIDwgbGV2ZWwpIHsKICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGxldmVsLCBaTGliT3B0aW9uLm1pbkxldmVsLCBaTGliT3B0aW9uLm1heExldmVsKTsKICB9Cn0KCnZvaWQgX3ZhbGlkYXRlWkxpYk1lbUxldmVsKGludCBtZW1MZXZlbCkgewogIGlmIChaTGliT3B0aW9uLm1pbk1lbUxldmVsID4gbWVtTGV2ZWwgfHwgWkxpYk9wdGlvbi5tYXhNZW1MZXZlbCA8IG1lbUxldmVsKSB7CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZSgKICAgICAgICBtZW1MZXZlbCwgWkxpYk9wdGlvbi5taW5NZW1MZXZlbCwgWkxpYk9wdGlvbi5tYXhNZW1MZXZlbCk7CiAgfQp9Cgp2b2lkIF92YWxpZGF0ZVpMaWJTdHJhdGVneShpbnQgc3RyYXRlZ3kpIHsKICBjb25zdCBzdHJhdGVnaWVzID0gY29uc3QgPGludD5bCiAgICBaTGliT3B0aW9uLnN0cmF0ZWd5RmlsdGVyZWQsCiAgICBaTGliT3B0aW9uLnN0cmF0ZWd5SHVmZm1hbk9ubHksCiAgICBaTGliT3B0aW9uLnN0cmF0ZWd5UmxlLAogICAgWkxpYk9wdGlvbi5zdHJhdGVneUZpeGVkLAogICAgWkxpYk9wdGlvbi5zdHJhdGVneURlZmF1bHQKICBdOwogIGlmIChzdHJhdGVnaWVzLmluZGV4T2Yoc3RyYXRlZ3kpID09IC0xKSB7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiVW5zdXBwb3J0ZWQgJ3N0cmF0ZWd5JyIpOwogIH0KfQqCowBOTjwBEQEELgM/BBxJJCYrKAFJJCcrKQFJJCsvLQFDIiYjAUIhJiIBQyUqJgFJJCkmAUkkKSYBSSgtKgFIKS4qAUksMS4BTiQpJQFOFiYrJwErKC0pAgEEQQQzIB0BBE8iBDYGRAYTAQZQRk5OBhMBBlBPSgU5BTpQBhYBBk9KTkgGFgEGUFE6BhgBBk8tBhIBBiUFSVFHT00tBh4BDSw1MTEXFxsgJSUpBAEdKTMvLxUWGwEGQQYuExQeGhoeEQEGPgYdUQIBBEEEMyAdAQRPIgNONwQ2BkQGEwEGUEZOTgYTAQZQT0oFOQU6UAYWAQY0M0FHSzMGFgEGUFA/BhgBBiUFSVFHT00tBh4BBk8tBhIBDSw1MTEXFxogJSUpBAEdKTMvLxUVGwEGQQYuEhQeGhoeEQEGPgYdUQIBBFAJBDwGRAYTAQZQRk5OBhMBBlBPSgU5BTpQBhYBBjQzQUdLMwYWAQZQUD8GGAEGJQVJUUdPTS0GHgEGTy0GEgEPGSs1MTEXGiAlJSkEAQZIEgYnKiETESUEAQZNREgGRCcwBiNNBAIBBFAEPAZQUEAGGAEGJQVJUUdPTS0GHgEGTy0GEgEPNhcaKQQBBkoSBicqIRMRJQQBBj1IGwZEJzAGRgQCAQRFBB8GSRQGKBYoMi4uGhUHI0cEAQZJFgYoMhoVB0AEAQZOKAY0AQZLTjMFTzkGPAE4EREWFBQcEQE4NwIBLz4BHhgEAUQeHkgNLgYEARICAS0WHxERFhQUHBAPEjJQAgEtFk8UUAIBLx8iGBYBKQEdKwQBQxk9OQoWJ0BDMRVAGAgSFg8GARkEAREZT0YxChU9GAgSPRYPBhQTBAIBLy8vIEkEAgEmRFEEAgErUCBDBAIBKyIhJBweHwUsNwQCAR1kYXJ0OmlvL2RhdGFfdHJhbnNmb3JtZXIuZGFydC1vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW8vZGlyZWN0b3J5LmRhcnSvqC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuaW87CgovKioKICogQSByZWZlcmVuY2UgdG8gYSBkaXJlY3RvcnkgKG9yIF9mb2xkZXJfKSBvbiB0aGUgZmlsZSBzeXN0ZW0uCiAqCiAqIEEgRGlyZWN0b3J5IGluc3RhbmNlIGlzIGFuIG9iamVjdCBob2xkaW5nIGEgW3BhdGhdIG9uIHdoaWNoIG9wZXJhdGlvbnMgY2FuCiAqIGJlIHBlcmZvcm1lZC4gVGhlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBjYW4gYmUgW2Fic29sdXRlXSBvciByZWxhdGl2ZS4KICogWW91IGNhbiBnZXQgdGhlIHBhcmVudCBkaXJlY3RvcnkgdXNpbmcgdGhlIGdldHRlciBbcGFyZW50XSwKICogYSBwcm9wZXJ0eSBpbmhlcml0ZWQgZnJvbSBbRmlsZVN5c3RlbUVudGl0eV0uCiAqCiAqIEluIGFkZGl0aW9uIHRvIGJlaW5nIHVzZWQgYXMgYW4gaW5zdGFuY2UgdG8gYWNjZXNzIHRoZSBmaWxlIHN5c3RlbSwKICogRGlyZWN0b3J5IGhhcyBhIG51bWJlciBvZiBzdGF0aWMgcHJvcGVydGllcywgc3VjaCBhcyBbc3lzdGVtVGVtcF0sCiAqIHdoaWNoIGdldHMgdGhlIHN5c3RlbSdzIHRlbXBvcmFyeSBkaXJlY3RvcnksIGFuZCB0aGUgZ2V0dGVyIGFuZCBzZXR0ZXIKICogW2N1cnJlbnRdLCB3aGljaCB5b3UgY2FuIHVzZSB0byBhY2Nlc3Mgb3IgY2hhbmdlIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KICoKICogQ3JlYXRlIGEgbmV3IERpcmVjdG9yeSBvYmplY3Qgd2l0aCBhIHBhdGhuYW1lIHRvIGFjY2VzcyB0aGUgc3BlY2lmaWVkCiAqIGRpcmVjdG9yeSBvbiB0aGUgZmlsZSBzeXN0ZW0gZnJvbSB5b3VyIHByb2dyYW0uCiAqCiAqICAgICB2YXIgbXlEaXIgPSBuZXcgRGlyZWN0b3J5KCdteURpcicpOwogKgogKiBNb3N0IG1ldGhvZHMgaW4gdGhpcyBjbGFzcyBvY2N1ciBpbiBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzIHBhaXJzLAogKiBmb3IgZXhhbXBsZSwgW2NyZWF0ZV0gYW5kIFtjcmVhdGVTeW5jXS4KICogVW5sZXNzIHlvdSBoYXZlIGEgc3BlY2lmaWMgcmVhc29uIGZvciB1c2luZyB0aGUgc3luY2hyb25vdXMgdmVyc2lvbgogKiBvZiBhIG1ldGhvZCwgcHJlZmVyIHRoZSBhc3luY2hyb25vdXMgdmVyc2lvbiB0byBhdm9pZCBibG9ja2luZyB5b3VyIHByb2dyYW0uCiAqCiAqICMjIENyZWF0ZSBhIGRpcmVjdG9yeQogKgogKiBUaGUgZm9sbG93aW5nIGNvZGUgc2FtcGxlIGNyZWF0ZXMgYSBkaXJlY3RvcnkgdXNpbmcgdGhlIFtjcmVhdGVdIG1ldGhvZC4KICogQnkgc2V0dGluZyB0aGUgYHJlY3Vyc2l2ZWAgcGFyYW1ldGVyIHRvIHRydWUsIHlvdSBjYW4gY3JlYXRlIHRoZQogKiBuYW1lZCBkaXJlY3RvcnkgYW5kIGFsbCBpdHMgbmVjZXNzYXJ5IHBhcmVudCBkaXJlY3RvcmllcywKICogaWYgdGhleSBkbyBub3QgYWxyZWFkeSBleGlzdC4KICoKICogICAgIGltcG9ydCAnZGFydDppbyc7CiAqCiAqICAgICB2b2lkIG1haW4oKSB7CiAqICAgICAgIC8vIENyZWF0ZXMgZGlyLyBhbmQgZGlyL3N1YmRpci8uCiAqICAgICAgIG5ldyBEaXJlY3RvcnkoJ2Rpci9zdWJkaXInKS5jcmVhdGUocmVjdXJzaXZlOiB0cnVlKQogKiAgICAgICAgIC8vIFRoZSBjcmVhdGVkIGRpcmVjdG9yeSBpcyByZXR1cm5lZCBhcyBhIEZ1dHVyZS4KICogICAgICAgICAudGhlbigoRGlyZWN0b3J5IGRpcmVjdG9yeSkgewogKiAgICAgICAgICAgcHJpbnQoZGlyZWN0b3J5LnBhdGgpOwogKiAgICAgICB9KTsKICogICAgIH0KICoKICogIyMgTGlzdCBhIGRpcmVjdG9yeQogKgogKiBVc2UgdGhlIFtsaXN0XSBvciBbbGlzdFN5bmNdIG1ldGhvZHMgdG8gZ2V0IHRoZSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMKICogY29udGFpbmVkIGJ5IGEgZGlyZWN0b3J5LgogKiBTZXQgYHJlY3Vyc2l2ZWAgdG8gdHJ1ZSB0byByZWN1cnNpdmVseSBsaXN0IGFsbCBzdWJkaXJlY3Rvcmllcy4KICogU2V0IGBmb2xsb3dMaW5rc2AgdG8gdHJ1ZSB0byBmb2xsb3cgc3ltYm9saWMgbGlua3MuCiAqIFRoZSBsaXN0IG1ldGhvZCByZXR1cm5zIGEgW1N0cmVhbV0gdGhhdCBwcm92aWRlcyBGaWxlU3lzdGVtRW50aXR5CiAqIG9iamVjdHMuIFVzZSB0aGUgbGlzdGVuIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHByb2Nlc3MgZWFjaCBvYmplY3QKICogYXMgaXQgYmVjb21lIGF2YWlsYWJsZS4KICoKICogICAgIGltcG9ydCAnZGFydDppbyc7CiAqCiAqICAgICB2b2lkIG1haW4oKSB7CiAqICAgICAgIC8vIEdldCB0aGUgc3lzdGVtIHRlbXAgZGlyZWN0b3J5LgogKiAgICAgICB2YXIgc3lzdGVtVGVtcERpciA9IERpcmVjdG9yeS5zeXN0ZW1UZW1wOwogKgogKiAgICAgICAvLyBMaXN0IGRpcmVjdG9yeSBjb250ZW50cywgcmVjdXJzaW5nIGludG8gc3ViLWRpcmVjdG9yaWVzLAogKiAgICAgICAvLyBidXQgbm90IGZvbGxvd2luZyBzeW1ib2xpYyBsaW5rcy4KICogICAgICAgc3lzdGVtVGVtcERpci5saXN0KHJlY3Vyc2l2ZTogdHJ1ZSwgZm9sbG93TGlua3M6IGZhbHNlKQogKiAgICAgICAgIC5saXN0ZW4oKEZpbGVTeXN0ZW1FbnRpdHkgZW50aXR5KSB7CiAqICAgICAgICAgICBwcmludChlbnRpdHkucGF0aCk7CiAqICAgICAgICAgfSk7CiAqICAgICB9CiAqCiAqICMjIFRoZSB1c2Ugb2YgRnV0dXJlcwogKgogKiBJL08gb3BlcmF0aW9ucyBjYW4gYmxvY2sgYSBwcm9ncmFtIGZvciBzb21lIHBlcmlvZCBvZiB0aW1lIHdoaWxlIGl0IHdhaXRzIGZvcgogKiB0aGUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlLiBUbyBhdm9pZCB0aGlzLCBhbGwKICogbWV0aG9kcyBpbnZvbHZpbmcgSS9PIGhhdmUgYW4gYXN5bmNocm9ub3VzIHZhcmlhbnQgd2hpY2ggcmV0dXJucyBhIFtGdXR1cmVdLgogKiBUaGlzIGZ1dHVyZSBjb21wbGV0ZXMgd2hlbiB0aGUgSS9PIG9wZXJhdGlvbiBmaW5pc2hlcy4gV2hpbGUgdGhlIEkvTwogKiBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MsIHRoZSBEYXJ0IHByb2dyYW0gaXMgbm90IGJsb2NrZWQsCiAqIGFuZCBjYW4gcGVyZm9ybSBvdGhlciBvcGVyYXRpb25zLgogKgogKiBGb3IgZXhhbXBsZSwKICogdGhlIFtleGlzdHNdIG1ldGhvZCwgd2hpY2ggZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBkaXJlY3RvcnkgZXhpc3RzLAogKiByZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZSB1c2luZyBhIEZ1dHVyZS4KICogVXNlIGB0aGVuYCB0byByZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uLCB3aGljaCBpcyBjYWxsZWQgd2hlbgogKiB0aGUgdmFsdWUgaXMgcmVhZHkuCiAqCiAqICAgICBpbXBvcnQgJ2RhcnQ6aW8nOwogKgogKiAgICAgbWFpbigpIHsKICogICAgICAgZmluYWwgbXlEaXIgPSBuZXcgRGlyZWN0b3J5KCdkaXInKTsKICogICAgICAgbXlEaXIuZXhpc3RzKCkudGhlbigoaXNUaGVyZSkgewogKiAgICAgICAgIGlzVGhlcmUgPyBwcmludCgnZXhpc3RzJykgOiBwcmludCgnbm9uLWV4aXN0ZW50Jyk7CiAqICAgICAgIH0pOwogKiAgICAgfQogKgogKgogKiBJbiBhZGRpdGlvbiB0byBleGlzdHMsIHRoZSBbc3RhdF0sIFtyZW5hbWVdLCBhbmQKICogb3RoZXIgbWV0aG9kcywgcmV0dXJuIEZ1dHVyZXMuCiAqCiAqICMjIE90aGVyIHJlc291cmNlcwogKgogKiAqIFtEYXJ0IGJ5IEV4YW1wbGVdKGh0dHBzOi8vd3d3LmRhcnRsYW5nLm9yZy9kYXJ0LWJ5LWV4YW1wbGUvI2ZpbGVzLWRpcmVjdG9yaWVzLWFuZC1zeW1saW5rcykKICogICBwcm92aWRlcyBhZGRpdGlvbmFsIHRhc2stb3JpZW50ZWQgY29kZSBzYW1wbGVzIHRoYXQgc2hvdyBob3cgdG8gdXNlCiAqICAgdmFyaW91cyBBUEkgZnJvbSB0aGUgRGlyZWN0b3J5IGNsYXNzIGFuZCB0aGUgcmVsYXRlZCBbRmlsZV0gY2xhc3MuCiAqCiAqICogW0kvTyBmb3IgQ29tbWFuZC1MaW5lCiAqICAgQXBwc10oaHR0cHM6Ly93d3cuZGFydGxhbmcub3JnL2RvY3MvZGFydC11cC1hbmQtcnVubmluZy9jaDAzLmh0bWwjZGFydGlvLS0taW8tZm9yLWNvbW1hbmQtbGluZS1hcHBzKQogKiAgIGEgc2VjdGlvbiBmcm9tIF9BIFRvdXIgb2YgdGhlIERhcnQgTGlicmFyaWVzXyBjb3ZlcnMgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLgogKgogKiAqIFtXcml0ZSBDb21tYW5kLUxpbmUgQXBwc10oaHR0cHM6Ly93d3cuZGFydGxhbmcub3JnL2RvY3MvdHV0b3JpYWxzL2NtZGxpbmUvKSwKICogICBhIHR1dG9yaWFsIGFib3V0IHdyaXRpbmcgY29tbWFuZC1saW5lIGFwcHMsIGluY2x1ZGVzIGluZm9ybWF0aW9uIGFib3V0CiAqICAgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLgogKi8KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQphYnN0cmFjdCBjbGFzcyBEaXJlY3RvcnkgaW1wbGVtZW50cyBGaWxlU3lzdGVtRW50aXR5IHsKICAvKioKICAgKiBHZXRzIHRoZSBwYXRoIG9mIHRoaXMgZGlyZWN0b3J5LgogICAqLwogIFN0cmluZyBnZXQgcGF0aDsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtEaXJlY3RvcnldIG9iamVjdC4KICAgKgogICAqIElmIFtwYXRoXSBpcyBhIHJlbGF0aXZlIHBhdGgsIGl0IHdpbGwgYmUgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gdGhlCiAgICogY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSAoc2VlIFtEaXJlY3RvcnkuY3VycmVudF0pLCB3aGVuIHVzZWQuCiAgICoKICAgKiBJZiBbcGF0aF0gaXMgYW4gYWJzb2x1dGUgcGF0aCwgaXQgd2lsbCBiZSBpbW11bmUgdG8gY2hhbmdlcyB0byB0aGUKICAgKiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogICAqLwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBmYWN0b3J5IERpcmVjdG9yeShTdHJpbmcgcGF0aCkgewogICAgZmluYWwgSU9PdmVycmlkZXMgb3ZlcnJpZGVzID0gSU9PdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gbmV3IF9EaXJlY3RvcnkocGF0aCk7CiAgICB9CiAgICByZXR1cm4gb3ZlcnJpZGVzLmNyZWF0ZURpcmVjdG9yeShwYXRoKTsKICB9CgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBmYWN0b3J5IERpcmVjdG9yeS5mcm9tUmF3UGF0aChVaW50OExpc3QgcGF0aCkgewogICAgLy8gVE9ETyhia29ueWkpOiBIYW5kbGUgb3ZlcnJpZGVzLgogICAgcmV0dXJuIG5ldyBfRGlyZWN0b3J5LmZyb21SYXdQYXRoKHBhdGgpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlIGEgRGlyZWN0b3J5IG9iamVjdCBmcm9tIGEgVVJJLgogICAqCiAgICogSWYgW3VyaV0gY2Fubm90IHJlZmVyZW5jZSBhIGRpcmVjdG9yeSB0aGlzIHRocm93cyBbVW5zdXBwb3J0ZWRFcnJvcl0uCiAgICovCiAgZmFjdG9yeSBEaXJlY3RvcnkuZnJvbVVyaShVcmkgdXJpKSA9PiBuZXcgRGlyZWN0b3J5KHVyaS50b0ZpbGVQYXRoKCkpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgZGlyZWN0b3J5IG9iamVjdCBwb2ludGluZyB0byB0aGUgY3VycmVudCB3b3JraW5nCiAgICogZGlyZWN0b3J5LgogICAqLwogIHN0YXRpYyBEaXJlY3RvcnkgZ2V0IGN1cnJlbnQgewogICAgZmluYWwgSU9PdmVycmlkZXMgb3ZlcnJpZGVzID0gSU9PdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gX0RpcmVjdG9yeS5jdXJyZW50OwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5nZXRDdXJyZW50RGlyZWN0b3J5KCk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgW1VyaV0gcmVwcmVzZW50aW5nIHRoZSBkaXJlY3RvcnkncyBsb2NhdGlvbi4KICAgKgogICAqIFRoZSByZXR1cm5lZCBVUkkncyBzY2hlbWUgaXMgYWx3YXlzICJmaWxlIiBpZiB0aGUgZW50aXR5J3MgW3BhdGhdIGlzCiAgICogYWJzb2x1dGUsIG90aGVyd2lzZSB0aGUgc2NoZW1lIHdpbGwgYmUgZW1wdHkuCiAgICogVGhlIHJldHVybmVkIFVSSSdzIHBhdGggYWx3YXlzIGVuZHMgaW4gYSBzbGFzaCAoJy8nKS4KICAgKi8KICBVcmkgZ2V0IHVyaTsKCiAgLyoqCiAgICogU2V0cyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBvZiB0aGUgRGFydCBwcm9jZXNzIGluY2x1ZGluZwogICAqIGFsbCBydW5uaW5nIGlzb2xhdGVzLiBUaGUgbmV3IHZhbHVlIHNldCBjYW4gYmUgZWl0aGVyIGEgW0RpcmVjdG9yeV0KICAgKiBvciBhIFtTdHJpbmddLgogICAqCiAgICogVGhlIG5ldyB2YWx1ZSBpcyBwYXNzZWQgdG8gdGhlIE9TJ3Mgc3lzdGVtIGNhbGwgdW5jaGFuZ2VkLCBzbyBhCiAgICogcmVsYXRpdmUgcGF0aCBwYXNzZWQgYXMgdGhlIG5ldyB3b3JraW5nIGRpcmVjdG9yeSB3aWxsIGJlCiAgICogcmVzb2x2ZWQgYnkgdGhlIE9TLgogICAqCiAgICogTm90ZSB0aGF0IHNldHRpbmcgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaXMgYSBzeW5jaHJvbm91cwogICAqIG9wZXJhdGlvbiBhbmQgdGhhdCBpdCBjaGFuZ2VzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBvZiAqYWxsKgogICAqIGlzb2xhdGVzLgogICAqCiAgICogVXNlIHRoaXMgd2l0aCBjYXJlIC0gZXNwZWNpYWxseSB3aGVuIHdvcmtpbmcgd2l0aCBhc3luY2hyb25vdXMKICAgKiBvcGVyYXRpb25zIGFuZCBtdWx0aXBsZSBpc29sYXRlcy4gQ2hhbmdpbmcgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LAogICAqIHdoaWxlIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zIGFyZSBwZW5kaW5nIG9yIHdoZW4gb3RoZXIgaXNvbGF0ZXMKICAgKiBhcmUgd29ya2luZyB3aXRoIHRoZSBmaWxlIHN5c3RlbSwgY2FuIGxlYWQgdG8gdW5leHBlY3RlZCByZXN1bHRzLgogICAqLwogIHN0YXRpYyB2b2lkIHNldCBjdXJyZW50KHBhdGgpIHsKICAgIGZpbmFsIElPT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IElPT3ZlcnJpZGVzLmN1cnJlbnQ7CiAgICBpZiAob3ZlcnJpZGVzID09IG51bGwpIHsKICAgICAgX0RpcmVjdG9yeS5jdXJyZW50ID0gcGF0aDsKICAgICAgcmV0dXJuOwogICAgfQogICAgb3ZlcnJpZGVzLnNldEN1cnJlbnREaXJlY3RvcnkocGF0aCk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIHRoZSBkaXJlY3Rvcnkgd2l0aCB0aGlzIG5hbWUuCiAgICoKICAgKiBJZiBbcmVjdXJzaXZlXSBpcyBmYWxzZSwgb25seSB0aGUgbGFzdCBkaXJlY3RvcnkgaW4gdGhlIHBhdGggaXMKICAgKiBjcmVhdGVkLiBJZiBbcmVjdXJzaXZlXSBpcyB0cnVlLCBhbGwgbm9uLWV4aXN0aW5nIHBhdGggY29tcG9uZW50cwogICAqIGFyZSBjcmVhdGVkLiBJZiB0aGUgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIG5vdGhpbmcgaXMgZG9uZS4KICAgKgogICAqIFJldHVybnMgYSBbOkZ1dHVyZTxEaXJlY3Rvcnk+Ol0gdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGlzCiAgICogZGlyZWN0b3J5IG9uY2UgaXQgaGFzIGJlZW4gY3JlYXRlZC4gSWYgdGhlIGRpcmVjdG9yeSBjYW5ub3QgYmUKICAgKiBjcmVhdGVkIHRoZSBmdXR1cmUgY29tcGxldGVzIHdpdGggYW4gZXhjZXB0aW9uLgogICAqLwogIEZ1dHVyZTxEaXJlY3Rvcnk+IGNyZWF0ZSh7Ym9vbCByZWN1cnNpdmU6IGZhbHNlfSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgY3JlYXRlcyB0aGUgZGlyZWN0b3J5IHdpdGggdGhpcyBuYW1lLgogICAqCiAgICogSWYgW3JlY3Vyc2l2ZV0gaXMgZmFsc2UsIG9ubHkgdGhlIGxhc3QgZGlyZWN0b3J5IGluIHRoZSBwYXRoIGlzCiAgICogY3JlYXRlZC4gSWYgW3JlY3Vyc2l2ZV0gaXMgdHJ1ZSwgYWxsIG5vbi1leGlzdGluZyBwYXRoIGNvbXBvbmVudHMKICAgKiBhcmUgY3JlYXRlZC4gSWYgdGhlIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cyBub3RoaW5nIGlzIGRvbmUuCiAgICoKICAgKiBJZiB0aGUgZGlyZWN0b3J5IGNhbm5vdCBiZSBjcmVhdGVkIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICovCiAgdm9pZCBjcmVhdGVTeW5jKHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KTsKCiAgLyoqCiAgICogR2V0cyB0aGUgc3lzdGVtIHRlbXAgZGlyZWN0b3J5LgogICAqCiAgICogR2V0cyB0aGUgZGlyZWN0b3J5IHByb3ZpZGVkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGZvciBjcmVhdGluZwogICAqIHRlbXBvcmFyeSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgaW4uCiAgICogVGhlIGxvY2F0aW9uIG9mIHRoZSBzeXN0ZW0gdGVtcCBkaXJlY3RvcnkgaXMgcGxhdGZvcm0tZGVwZW5kZW50LAogICAqIGFuZCBtYXkgYmUgc2V0IGJ5IGFuIGVudmlyb25tZW50IHZhcmlhYmxlLgogICAqLwogIHN0YXRpYyBEaXJlY3RvcnkgZ2V0IHN5c3RlbVRlbXAgewogICAgZmluYWwgSU9PdmVycmlkZXMgb3ZlcnJpZGVzID0gSU9PdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gX0RpcmVjdG9yeS5zeXN0ZW1UZW1wOwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5nZXRTeXN0ZW1UZW1wRGlyZWN0b3J5KCk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiB0aGlzIGRpcmVjdG9yeS4gQWRkaXRpb25hbCByYW5kb20KICAgKiBjaGFyYWN0ZXJzIGFyZSBhcHBlbmRlZCB0byBbcHJlZml4XSB0byBwcm9kdWNlIGEgdW5pcXVlIGRpcmVjdG9yeQogICAqIG5hbWUuIElmIFtwcmVmaXhdIGlzIG1pc3Npbmcgb3IgbnVsbCwgdGhlIGVtcHR5IHN0cmluZyBpcyB1c2VkCiAgICogZm9yIFtwcmVmaXhdLgogICAqCiAgICogUmV0dXJucyBhIFs6RnV0dXJlPERpcmVjdG9yeT46XSB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoZSBuZXdseQogICAqIGNyZWF0ZWQgdGVtcG9yYXJ5IGRpcmVjdG9yeS4KICAgKi8KICBGdXR1cmU8RGlyZWN0b3J5PiBjcmVhdGVUZW1wKFtTdHJpbmcgcHJlZml4XSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgY3JlYXRlcyBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gdGhpcyBkaXJlY3RvcnkuCiAgICogQWRkaXRpb25hbCByYW5kb20gY2hhcmFjdGVycyBhcmUgYXBwZW5kZWQgdG8gW3ByZWZpeF0gdG8gcHJvZHVjZQogICAqIGEgdW5pcXVlIGRpcmVjdG9yeSBuYW1lLiBJZiBbcHJlZml4XSBpcyBtaXNzaW5nIG9yIG51bGwsIHRoZSBlbXB0eQogICAqIHN0cmluZyBpcyB1c2VkIGZvciBbcHJlZml4XS4KICAgKgogICAqIFJldHVybnMgdGhlIG5ld2x5IGNyZWF0ZWQgdGVtcG9yYXJ5IGRpcmVjdG9yeS4KICAgKi8KICBEaXJlY3RvcnkgY3JlYXRlVGVtcFN5bmMoW1N0cmluZyBwcmVmaXhdKTsKCiAgRnV0dXJlPFN0cmluZz4gcmVzb2x2ZVN5bWJvbGljTGlua3MoKTsKCiAgU3RyaW5nIHJlc29sdmVTeW1ib2xpY0xpbmtzU3luYygpOwoKICAvKioKICAgKiBSZW5hbWVzIHRoaXMgZGlyZWN0b3J5LiBSZXR1cm5zIGEgWzpGdXR1cmU8RGlyZWN0b3J5PjpdIHRoYXQgY29tcGxldGVzCiAgICogd2l0aCBhIFtEaXJlY3RvcnldIGluc3RhbmNlIGZvciB0aGUgcmVuYW1lZCBkaXJlY3RvcnkuCiAgICoKICAgKiBJZiBuZXdQYXRoIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LCB0aGF0IGRpcmVjdG9yeSBpcwogICAqIHJlcGxhY2VkLiBJZiBuZXdQYXRoIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgZmlsZSwgdGhlIG9wZXJhdGlvbgogICAqIGZhaWxzIGFuZCB0aGUgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGV4Y2VwdGlvbi4KICAgKi8KICBGdXR1cmU8RGlyZWN0b3J5PiByZW5hbWUoU3RyaW5nIG5ld1BhdGgpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IHJlbmFtZXMgdGhpcyBkaXJlY3RvcnkuIFJldHVybnMgYSBbRGlyZWN0b3J5XQogICAqIGluc3RhbmNlIGZvciB0aGUgcmVuYW1lZCBkaXJlY3RvcnkuCiAgICoKICAgKiBJZiBuZXdQYXRoIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LCB0aGF0IGRpcmVjdG9yeSBpcwogICAqIHJlcGxhY2VkLiBJZiBuZXdQYXRoIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgZmlsZSB0aGUgb3BlcmF0aW9uCiAgICogZmFpbHMgYW5kIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICovCiAgRGlyZWN0b3J5IHJlbmFtZVN5bmMoU3RyaW5nIG5ld1BhdGgpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgW0RpcmVjdG9yeV0gaW5zdGFuY2Ugd2hvc2UgcGF0aCBpcyB0aGUgYWJzb2x1dGUgcGF0aCB0byBbdGhpc10uCiAgICoKICAgKiBUaGUgYWJzb2x1dGUgcGF0aCBpcyBjb21wdXRlZCBieSBwcmVmaXhpbmcKICAgKiBhIHJlbGF0aXZlIHBhdGggd2l0aCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSwgYW5kIHJldHVybmluZwogICAqIGFuIGFic29sdXRlIHBhdGggdW5jaGFuZ2VkLgogICAqLwogIERpcmVjdG9yeSBnZXQgYWJzb2x1dGU7CgogIC8qKgogICAqIExpc3RzIHRoZSBzdWItZGlyZWN0b3JpZXMgYW5kIGZpbGVzIG9mIHRoaXMgW0RpcmVjdG9yeV0uCiAgICogT3B0aW9uYWxseSByZWN1cnNlcyBpbnRvIHN1Yi1kaXJlY3Rvcmllcy4KICAgKgogICAqIElmIFtmb2xsb3dMaW5rc10gaXMgZmFsc2UsIHRoZW4gYW55IHN5bWJvbGljIGxpbmtzIGZvdW5kCiAgICogYXJlIHJlcG9ydGVkIGFzIFtMaW5rXSBvYmplY3RzLCByYXRoZXIgdGhhbiBhcyBkaXJlY3RvcmllcyBvciBmaWxlcywKICAgKiBhbmQgYXJlIG5vdCByZWN1cnNlZCBpbnRvLgogICAqCiAgICogSWYgW2ZvbGxvd0xpbmtzXSBpcyB0cnVlLCB0aGVuIHdvcmtpbmcgbGlua3MgYXJlIHJlcG9ydGVkIGFzCiAgICogZGlyZWN0b3JpZXMgb3IgZmlsZXMsIGRlcGVuZGluZyBvbgogICAqIHRoZWlyIHR5cGUsIGFuZCBsaW5rcyB0byBkaXJlY3RvcmllcyBhcmUgcmVjdXJzZWQgaW50by4KICAgKiBCcm9rZW4gbGlua3MgYXJlIHJlcG9ydGVkIGFzIFtMaW5rXSBvYmplY3RzLgogICAqIElmIGEgc3ltYm9saWMgbGluayBtYWtlcyBhIGxvb3AgaW4gdGhlIGZpbGUgc3lzdGVtLCB0aGVuIGEgcmVjdXJzaXZlCiAgICogbGlzdGluZyB3aWxsIG5vdCBmb2xsb3cgYSBsaW5rIHR3aWNlIGluIHRoZQogICAqIHNhbWUgcmVjdXJzaXZlIGRlc2NlbnQsIGJ1dCB3aWxsIHJlcG9ydCBpdCBhcyBhIFtMaW5rXQogICAqIHRoZSBzZWNvbmQgdGltZSBpdCBpcyBzZWVuLgogICAqCiAgICogVGhlIHJlc3VsdCBpcyBhIHN0cmVhbSBvZiBbRmlsZVN5c3RlbUVudGl0eV0gb2JqZWN0cwogICAqIGZvciB0aGUgZGlyZWN0b3JpZXMsIGZpbGVzLCBhbmQgbGlua3MuCiAgICovCiAgU3RyZWFtPEZpbGVTeXN0ZW1FbnRpdHk+IGxpc3QoCiAgICAgIHtib29sIHJlY3Vyc2l2ZTogZmFsc2UsIGJvb2wgZm9sbG93TGlua3M6IHRydWV9KTsKCiAgLyoqCiAgICogTGlzdHMgdGhlIHN1Yi1kaXJlY3RvcmllcyBhbmQgZmlsZXMgb2YgdGhpcyBbRGlyZWN0b3J5XS4KICAgKiBPcHRpb25hbGx5IHJlY3Vyc2VzIGludG8gc3ViLWRpcmVjdG9yaWVzLgogICAqCiAgICogSWYgW2ZvbGxvd0xpbmtzXSBpcyBmYWxzZSwgdGhlbiBhbnkgc3ltYm9saWMgbGlua3MgZm91bmQKICAgKiBhcmUgcmVwb3J0ZWQgYXMgW0xpbmtdIG9iamVjdHMsIHJhdGhlciB0aGFuIGFzIGRpcmVjdG9yaWVzIG9yIGZpbGVzLAogICAqIGFuZCBhcmUgbm90IHJlY3Vyc2VkIGludG8uCiAgICoKICAgKiBJZiBbZm9sbG93TGlua3NdIGlzIHRydWUsIHRoZW4gd29ya2luZyBsaW5rcyBhcmUgcmVwb3J0ZWQgYXMKICAgKiBkaXJlY3RvcmllcyBvciBmaWxlcywgZGVwZW5kaW5nIG9uCiAgICogdGhlaXIgdHlwZSwgYW5kIGxpbmtzIHRvIGRpcmVjdG9yaWVzIGFyZSByZWN1cnNlZCBpbnRvLgogICAqIEJyb2tlbiBsaW5rcyBhcmUgcmVwb3J0ZWQgYXMgW0xpbmtdIG9iamVjdHMuCiAgICogSWYgYSBsaW5rIG1ha2VzIGEgbG9vcCBpbiB0aGUgZmlsZSBzeXN0ZW0sIHRoZW4gYSByZWN1cnNpdmUKICAgKiBsaXN0aW5nIHdpbGwgbm90IGZvbGxvdyBhIGxpbmsgdHdpY2UgaW4gdGhlCiAgICogc2FtZSByZWN1cnNpdmUgZGVzY2VudCwgYnV0IHdpbGwgcmVwb3J0IGl0IGFzIGEgW0xpbmtdCiAgICogdGhlIHNlY29uZCB0aW1lIGl0IGlzIHNlZW4uCiAgICoKICAgKiBSZXR1cm5zIGEgW0xpc3RdIGNvbnRhaW5pbmcgW0ZpbGVTeXN0ZW1FbnRpdHldIG9iamVjdHMgZm9yIHRoZQogICAqIGRpcmVjdG9yaWVzLCBmaWxlcywgYW5kIGxpbmtzLgogICAqLwogIExpc3Q8RmlsZVN5c3RlbUVudGl0eT4gbGlzdFN5bmMoCiAgICAgIHtib29sIHJlY3Vyc2l2ZTogZmFsc2UsIGJvb2wgZm9sbG93TGlua3M6IHRydWV9KTsKCiAgLyoqCiAgICogUmV0dXJucyBhIGh1bWFuIHJlYWRhYmxlIHN0cmluZyBmb3IgdGhpcyBEaXJlY3RvcnkgaW5zdGFuY2UuCiAgICovCiAgU3RyaW5nIHRvU3RyaW5nKCk7Cn0KgVoATk48AREBBEADTko/MQNHRkpLA0kzAysDSytHUAMZA0xEPSEDGQMVKj09KSQNCQMXA0kdQzdFRBsDGQMVKzMDRS5BLyEPCQMZA1ExUEg+JQMQRytEFwMZAxAtKT4NCQMDNCIDFgNhSUgDG2pRA1JMHAQaNwYmBhMBBiMFSkUFSCAGHCM3HSMGLAQBHDInLQQBBisFSwZJAQZAEAYhNx0hBiwEAQY8BUozOwYPAQZGSRQFRT8ZBUZCDwVER0ZHBiI3HSEOBikEAQYrBUVHQwU+RDUGNQEGOQVFR0MFQAYsAQYlBUYpRjAGJDcdJAYvBAEGSEdEEwVDIgYxAQZERkgiBTQGLQEpASUBBkw8BURFNwYsAQZBKQVERCcGKAEGTwUwRyEGGgEGPi8FPkogBUIoPTJKMTwhBTosBiE4AQY+LwU+SiAFQig9MkExPCEFRCQGIzgBBkIGFQIBFmRhcnQ6aW8vZGlyZWN0b3J5LmRhcnQyb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2lvL2RpcmVjdG9yeV9pbXBsLmRhcnS2mi8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuaW87CgpjbGFzcyBfRGlyZWN0b3J5IGV4dGVuZHMgRmlsZVN5c3RlbUVudGl0eSBpbXBsZW1lbnRzIERpcmVjdG9yeSB7CiAgU3RyaW5nIF9wYXRoOwogIFVpbnQ4TGlzdCBfcmF3UGF0aDsKCiAgX0RpcmVjdG9yeShTdHJpbmcgcGF0aCkgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwocGF0aCwgJ3BhdGgnKTsKICAgIF9wYXRoID0gcGF0aDsKICAgIF9yYXdQYXRoID0gRmlsZVN5c3RlbUVudGl0eS5fdG9VdGY4QXJyYXkoX3BhdGgpOwogIH0KCiAgX0RpcmVjdG9yeS5mcm9tUmF3UGF0aChVaW50OExpc3QgcmF3UGF0aCkgewogICAgaWYgKHJhd1BhdGggPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigncmF3UGF0aCBjYW5ub3QgYmUgbnVsbCcpOwogICAgfQogICAgX3Jhd1BhdGggPSBGaWxlU3lzdGVtRW50aXR5Ll90b051bGxUZXJtaW5hdGVkVXRmOEFycmF5KHJhd1BhdGgpOwogICAgX3BhdGggPSBGaWxlU3lzdGVtRW50aXR5Ll90b1N0cmluZ0Zyb21VdGY4QXJyYXkocmF3UGF0aCk7CiAgfQoKICBTdHJpbmcgZ2V0IHBhdGggPT4gX3BhdGg7CgogIGV4dGVybmFsIHN0YXRpYyBfY3VycmVudChfTmFtZXNwYWNlIG5hbWVzcGFjZSk7CiAgZXh0ZXJuYWwgc3RhdGljIF9zZXRDdXJyZW50KF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCk7CiAgZXh0ZXJuYWwgc3RhdGljIF9jcmVhdGVUZW1wKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCk7CiAgZXh0ZXJuYWwgc3RhdGljIFN0cmluZyBfc3lzdGVtVGVtcChfTmFtZXNwYWNlIG5hbWVzcGFjZSk7CiAgZXh0ZXJuYWwgc3RhdGljIF9leGlzdHMoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKTsKICBleHRlcm5hbCBzdGF0aWMgX2NyZWF0ZShfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpOwogIGV4dGVybmFsIHN0YXRpYyBfZGVsZXRlTmF0aXZlKAogICAgICBfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgsIGJvb2wgcmVjdXJzaXZlKTsKICBleHRlcm5hbCBzdGF0aWMgX3JlbmFtZSgKICAgICAgX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoLCBTdHJpbmcgbmV3UGF0aCk7CiAgZXh0ZXJuYWwgc3RhdGljIHZvaWQgX2ZpbGxXaXRoRGlyZWN0b3J5TGlzdGluZygKICAgICAgX05hbWVzcGFjZSBuYW1lc3BhY2UsCiAgICAgIExpc3Q8RmlsZVN5c3RlbUVudGl0eT4gbGlzdCwKICAgICAgVWludDhMaXN0IHJhd1BhdGgsCiAgICAgIGJvb2wgcmVjdXJzaXZlLAogICAgICBib29sIGZvbGxvd0xpbmtzKTsKCiAgc3RhdGljIERpcmVjdG9yeSBnZXQgY3VycmVudCB7CiAgICB2YXIgcmVzdWx0ID0gX2N1cnJlbnQoX05hbWVzcGFjZS5fbmFtZXNwYWNlKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigKICAgICAgICAgICJHZXR0aW5nIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgZmFpbGVkIiwgIiIsIHJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gbmV3IF9EaXJlY3RvcnkocmVzdWx0KTsKICB9CgogIHN0YXRpYyB2b2lkIHNldCBjdXJyZW50KHBhdGgpIHsKICAgIFVpbnQ4TGlzdCBfcmF3UGF0aDsKICAgIGlmIChwYXRoIGlzIF9EaXJlY3RvcnkpIHsKICAgICAgLy8gRm9yIG91ciBpbnRlcm5hbCBEaXJlY3RvcnkgaW1wbGVtZW50YXRpb24sIGdvIGFoZWFkIGFuZCB1c2UgdGhlIHJhdwogICAgICAvLyBwYXRoLgogICAgICBfcmF3UGF0aCA9IHBhdGguX3Jhd1BhdGg7CiAgICB9IGVsc2UgaWYgKHBhdGggaXMgRGlyZWN0b3J5KSB7CiAgICAgIC8vIEZJWE1FKGJrb255aSk6IHBhY2thZ2U6ZmlsZSBwYXNzZXMgaW4gaW5zdGFuY2VzIG9mIGNsYXNzZXMgd2hpY2ggZG8KICAgICAgLy8gbm90IGhhdmUgX3BhdGggZGVmaW5lZCwgc28gd2Ugd2lsbCBmYWxsYmFjayB0byB1c2luZyB0aGUgZXhpc3RpbmcKICAgICAgLy8gcGF0aCBTdHJpbmcgZm9yIG5vdy4KICAgICAgX3Jhd1BhdGggPSBGaWxlU3lzdGVtRW50aXR5Ll90b1V0ZjhBcnJheShwYXRoLnBhdGgpOwogICAgfSBlbHNlIGlmIChwYXRoIGlzIFN0cmluZykgewogICAgICBfcmF3UGF0aCA9IEZpbGVTeXN0ZW1FbnRpdHkuX3RvVXRmOEFycmF5KHBhdGgpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJyR7RXJyb3Iuc2FmZVRvU3RyaW5nKHBhdGgpfSBpcyBub3QgYSBTdHJpbmcgb3InCiAgICAgICAgICAnIERpcmVjdG9yeScpOwogICAgfQogICAgaWYgKCFfRW1iZWRkZXJDb25maWcuX21heUNoZGlyKSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgIlRoaXMgZW1iZWRkZXIgZGlzYWxsb3dzIHNldHRpbmcgRGlyZWN0b3J5LmN1cnJlbnQiKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfc2V0Q3VycmVudChfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoKTsKICAgIGlmIChyZXN1bHQgaXMgQXJndW1lbnRFcnJvcikgdGhyb3cgcmVzdWx0OwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKAogICAgICAgICAgIlNldHRpbmcgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBmYWlsZWQiLCBwYXRoLCByZXN1bHQpOwogICAgfQogIH0KCiAgVXJpIGdldCB1cmkgewogICAgcmV0dXJuIG5ldyBVcmkuZGlyZWN0b3J5KHBhdGgpOwogIH0KCiAgRnV0dXJlPGJvb2w+IGV4aXN0cygpIHsKICAgIHJldHVybiBfRmlsZS5fZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKAogICAgICAgIF9JT1NlcnZpY2UuZGlyZWN0b3J5RXhpc3RzLCBbbnVsbCwgX3Jhd1BhdGhdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uT3JFcnJvckZyb21SZXNwb25zZShyZXNwb25zZSwgIkV4aXN0cyBmYWlsZWQiKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzcG9uc2UgPT0gMTsKICAgIH0pOwogIH0KCiAgYm9vbCBleGlzdHNTeW5jKCkgewogICAgdmFyIHJlc3VsdCA9IF9leGlzdHMoX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBfcmF3UGF0aCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oIkV4aXN0cyBmYWlsZWQiLCBwYXRoLCByZXN1bHQpOwogICAgfQogICAgcmV0dXJuIChyZXN1bHQgPT0gMSk7CiAgfQoKICBEaXJlY3RvcnkgZ2V0IGFic29sdXRlID0+IG5ldyBEaXJlY3RvcnkoX2Fic29sdXRlUGF0aCk7CgogIEZ1dHVyZTxEaXJlY3Rvcnk+IGNyZWF0ZSh7Ym9vbCByZWN1cnNpdmU6IGZhbHNlfSkgewogICAgaWYgKHJlY3Vyc2l2ZSkgewogICAgICByZXR1cm4gZXhpc3RzKCkudGhlbigoZXhpc3RzKSB7CiAgICAgICAgaWYgKGV4aXN0cykgcmV0dXJuIHRoaXM7CiAgICAgICAgaWYgKHBhdGggIT0gcGFyZW50LnBhdGgpIHsKICAgICAgICAgIHJldHVybiBwYXJlbnQuY3JlYXRlKHJlY3Vyc2l2ZTogdHJ1ZSkudGhlbigoXykgewogICAgICAgICAgICByZXR1cm4gY3JlYXRlKCk7CiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGNyZWF0ZSgpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX0ZpbGUuX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZSgKICAgICAgICAgIF9JT1NlcnZpY2UuZGlyZWN0b3J5Q3JlYXRlLCBbbnVsbCwgX3Jhd1BhdGhdKS50aGVuKChyZXNwb25zZSkgewogICAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbk9yRXJyb3JGcm9tUmVzcG9uc2UocmVzcG9uc2UsICJDcmVhdGlvbiBmYWlsZWQiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0pOwogICAgfQogIH0KCiAgdm9pZCBjcmVhdGVTeW5jKHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KSB7CiAgICBpZiAocmVjdXJzaXZlKSB7CiAgICAgIGlmIChleGlzdHNTeW5jKCkpIHJldHVybjsKICAgICAgaWYgKHBhdGggIT0gcGFyZW50LnBhdGgpIHsKICAgICAgICBwYXJlbnQuY3JlYXRlU3luYyhyZWN1cnNpdmU6IHRydWUpOwogICAgICB9CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX2NyZWF0ZShfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigiQ3JlYXRpb24gZmFpbGVkIiwgcGF0aCwgcmVzdWx0KTsKICAgIH0KICB9CgogIHN0YXRpYyBEaXJlY3RvcnkgZ2V0IHN5c3RlbVRlbXAgPT4KICAgICAgbmV3IERpcmVjdG9yeShfc3lzdGVtVGVtcChfTmFtZXNwYWNlLl9uYW1lc3BhY2UpKTsKCiAgRnV0dXJlPERpcmVjdG9yeT4gY3JlYXRlVGVtcChbU3RyaW5nIHByZWZpeF0pIHsKICAgIHByZWZpeCA/Pz0gJyc7CiAgICBpZiAocGF0aCA9PSAnJykgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiRGlyZWN0b3J5LmNyZWF0ZVRlbXAgY2FsbGVkIHdpdGggYW4gZW1wdHkgcGF0aC4gIgogICAgICAgICAgIlRvIHVzZSB0aGUgc3lzdGVtIHRlbXAgZGlyZWN0b3J5LCB1c2UgRGlyZWN0b3J5LnN5c3RlbVRlbXAiKTsKICAgIH0KICAgIFN0cmluZyBmdWxsUHJlZml4OwogICAgLy8gRklYTUUoYmtvbnlpKTogaGVyZSB3ZSdyZSB1c2luZyBgcGF0aGAgZGlyZWN0bHksIHdoaWNoIG1pZ2h0IGNhdXNlCiAgICAvLyBpc3N1ZXMgaWYgaXQgaXMgbm90IFVURi04IGVuY29kZWQuCiAgICBpZiAocGF0aC5lbmRzV2l0aCgnLycpIHx8IChQbGF0Zm9ybS5pc1dpbmRvd3MgJiYgcGF0aC5lbmRzV2l0aCgnXFwnKSkpIHsKICAgICAgZnVsbFByZWZpeCA9ICIkcGF0aCRwcmVmaXgiOwogICAgfSBlbHNlIHsKICAgICAgZnVsbFByZWZpeCA9ICIkcGF0aCR7UGxhdGZvcm0ucGF0aFNlcGFyYXRvcn0kcHJlZml4IjsKICAgIH0KICAgIHJldHVybiBfRmlsZS5fZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKF9JT1NlcnZpY2UuZGlyZWN0b3J5Q3JlYXRlVGVtcCwKICAgICAgICBbbnVsbCwgRmlsZVN5c3RlbUVudGl0eS5fdG9VdGY4QXJyYXkoZnVsbFByZWZpeCldKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uT3JFcnJvckZyb21SZXNwb25zZSgKICAgICAgICAgICAgcmVzcG9uc2UsICJDcmVhdGlvbiBvZiB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZhaWxlZCIpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgRGlyZWN0b3J5KHJlc3BvbnNlKTsKICAgIH0pOwogIH0KCiAgRGlyZWN0b3J5IGNyZWF0ZVRlbXBTeW5jKFtTdHJpbmcgcHJlZml4XSkgewogICAgcHJlZml4ID8/PSAnJzsKICAgIGlmIChwYXRoID09ICcnKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJEaXJlY3RvcnkuY3JlYXRlVGVtcCBjYWxsZWQgd2l0aCBhbiBlbXB0eSBwYXRoLiAiCiAgICAgICAgICAiVG8gdXNlIHRoZSBzeXN0ZW0gdGVtcCBkaXJlY3RvcnksIHVzZSBEaXJlY3Rvcnkuc3lzdGVtVGVtcCIpOwogICAgfQogICAgU3RyaW5nIGZ1bGxQcmVmaXg7CiAgICAvLyBGSVhNRShia29ueWkpOiBoZXJlIHdlJ3JlIHVzaW5nIGBwYXRoYCBkaXJlY3RseSwgd2hpY2ggbWlnaHQgY2F1c2UKICAgIC8vIGlzc3VlcyBpZiBpdCBpcyBub3QgVVRGLTggZW5jb2RlZC4KICAgIGlmIChwYXRoLmVuZHNXaXRoKCcvJykgfHwgKFBsYXRmb3JtLmlzV2luZG93cyAmJiBwYXRoLmVuZHNXaXRoKCdcXCcpKSkgewogICAgICBmdWxsUHJlZml4ID0gIiRwYXRoJHByZWZpeCI7CiAgICB9IGVsc2UgewogICAgICBmdWxsUHJlZml4ID0gIiRwYXRoJHtQbGF0Zm9ybS5wYXRoU2VwYXJhdG9yfSRwcmVmaXgiOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF9jcmVhdGVUZW1wKAogICAgICAgIF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgRmlsZVN5c3RlbUVudGl0eS5fdG9VdGY4QXJyYXkoZnVsbFByZWZpeCkpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKAogICAgICAgICAgIkNyZWF0aW9uIG9mIHRlbXBvcmFyeSBkaXJlY3RvcnkgZmFpbGVkIiwgZnVsbFByZWZpeCwgcmVzdWx0KTsKICAgIH0KICAgIHJldHVybiBuZXcgRGlyZWN0b3J5KHJlc3VsdCk7CiAgfQoKICBGdXR1cmU8RGlyZWN0b3J5PiBfZGVsZXRlKHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KSB7CiAgICByZXR1cm4gX0ZpbGUuX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZSgKICAgICAgICAgICAgX0lPU2VydmljZS5kaXJlY3RvcnlEZWxldGUsIFtudWxsLCBfcmF3UGF0aCwgcmVjdXJzaXZlXSkKICAgICAgICAudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbk9yRXJyb3JGcm9tUmVzcG9uc2UocmVzcG9uc2UsICJEZWxldGlvbiBmYWlsZWQiKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0pOwogIH0KCiAgdm9pZCBfZGVsZXRlU3luYyh7Ym9vbCByZWN1cnNpdmU6IGZhbHNlfSkgewogICAgdmFyIHJlc3VsdCA9IF9kZWxldGVOYXRpdmUoX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBfcmF3UGF0aCwgcmVjdXJzaXZlKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigiRGVsZXRpb24gZmFpbGVkIiwgcGF0aCwgcmVzdWx0KTsKICAgIH0KICB9CgogIEZ1dHVyZTxEaXJlY3Rvcnk+IHJlbmFtZShTdHJpbmcgbmV3UGF0aCkgewogICAgcmV0dXJuIF9GaWxlLl9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoCiAgICAgICAgX0lPU2VydmljZS5kaXJlY3RvcnlSZW5hbWUsIFtudWxsLCBfcmF3UGF0aCwgbmV3UGF0aF0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25PckVycm9yRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAiUmVuYW1lIGZhaWxlZCIpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgRGlyZWN0b3J5KG5ld1BhdGgpOwogICAgfSk7CiAgfQoKICBEaXJlY3RvcnkgcmVuYW1lU3luYyhTdHJpbmcgbmV3UGF0aCkgewogICAgaWYgKG5ld1BhdGggaXMhIFN0cmluZykgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigpOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF9yZW5hbWUoX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBfcmF3UGF0aCwgbmV3UGF0aCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oIlJlbmFtZSBmYWlsZWQiLCBwYXRoLCByZXN1bHQpOwogICAgfQogICAgcmV0dXJuIG5ldyBEaXJlY3RvcnkobmV3UGF0aCk7CiAgfQoKICBTdHJlYW08RmlsZVN5c3RlbUVudGl0eT4gbGlzdCgKICAgICAge2Jvb2wgcmVjdXJzaXZlOiBmYWxzZSwgYm9vbCBmb2xsb3dMaW5rczogdHJ1ZX0pIHsKICAgIHJldHVybiBuZXcgX0FzeW5jRGlyZWN0b3J5TGlzdGVyKAogICAgICAgICAgICAvLyBGSVhNRShia29ueWkpOiBoZXJlIHdlJ3JlIHVzaW5nIGBwYXRoYCBkaXJlY3RseSwgd2hpY2ggbWlnaHQgY2F1c2UgaXNzdWVzCiAgICAgICAgICAgIC8vIGlmIGl0IGlzIG5vdCBVVEYtOCBlbmNvZGVkLgogICAgICAgICAgICBGaWxlU3lzdGVtRW50aXR5Ll90b1V0ZjhBcnJheSgKICAgICAgICAgICAgICAgIEZpbGVTeXN0ZW1FbnRpdHkuX2Vuc3VyZVRyYWlsaW5nUGF0aFNlcGFyYXRvcnMocGF0aCkpLAogICAgICAgICAgICByZWN1cnNpdmUsCiAgICAgICAgICAgIGZvbGxvd0xpbmtzKQogICAgICAgIC5zdHJlYW07CiAgfQoKICBMaXN0PEZpbGVTeXN0ZW1FbnRpdHk+IGxpc3RTeW5jKAogICAgICB7Ym9vbCByZWN1cnNpdmU6IGZhbHNlLCBib29sIGZvbGxvd0xpbmtzOiB0cnVlfSkgewogICAgaWYgKHJlY3Vyc2l2ZSBpcyEgYm9vbCB8fCBmb2xsb3dMaW5rcyBpcyEgYm9vbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigpOwogICAgfQogICAgdmFyIHJlc3VsdCA9IDxGaWxlU3lzdGVtRW50aXR5PltdOwogICAgX2ZpbGxXaXRoRGlyZWN0b3J5TGlzdGluZygKICAgICAgICBfTmFtZXNwYWNlLl9uYW1lc3BhY2UsCiAgICAgICAgcmVzdWx0LAogICAgICAgIC8vIEZJWE1FKGJrb255aSk6IGhlcmUgd2UncmUgdXNpbmcgYHBhdGhgIGRpcmVjdGx5LCB3aGljaCBtaWdodCBjYXVzZSBpc3N1ZXMKICAgICAgICAvLyBpZiBpdCBpcyBub3QgVVRGLTggZW5jb2RlZC4KICAgICAgICBGaWxlU3lzdGVtRW50aXR5Ll90b1V0ZjhBcnJheSgKICAgICAgICAgICAgRmlsZVN5c3RlbUVudGl0eS5fZW5zdXJlVHJhaWxpbmdQYXRoU2VwYXJhdG9ycyhwYXRoKSksCiAgICAgICAgcmVjdXJzaXZlLAogICAgICAgIGZvbGxvd0xpbmtzKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiRGlyZWN0b3J5OiAnJHBhdGgnIjsKCiAgYm9vbCBfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSA9PgogICAgICByZXNwb25zZSBpcyBMaXN0ICYmIHJlc3BvbnNlWzBdICE9IF9zdWNjZXNzUmVzcG9uc2U7CgogIF9leGNlcHRpb25PckVycm9yRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCBTdHJpbmcgbWVzc2FnZSkgewogICAgYXNzZXJ0KF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKTsKICAgIHN3aXRjaCAocmVzcG9uc2VbX2Vycm9yUmVzcG9uc2VFcnJvclR5cGVdKSB7CiAgICAgIGNhc2UgX2lsbGVnYWxBcmd1bWVudFJlc3BvbnNlOgogICAgICAgIHJldHVybiBuZXcgQXJndW1lbnRFcnJvcigpOwogICAgICBjYXNlIF9vc0Vycm9yUmVzcG9uc2U6CiAgICAgICAgdmFyIGVyciA9IG5ldyBPU0Vycm9yKHJlc3BvbnNlW19vc0Vycm9yUmVzcG9uc2VNZXNzYWdlXSwKICAgICAgICAgICAgcmVzcG9uc2VbX29zRXJyb3JSZXNwb25zZUVycm9yQ29kZV0pOwogICAgICAgIHJldHVybiBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbihtZXNzYWdlLCBwYXRoLCBlcnIpOwogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBuZXcgRXhjZXB0aW9uKCJVbmtub3duIGVycm9yIik7CiAgICB9CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBfQXN5bmNEaXJlY3RvcnlMaXN0ZXJPcHMgewogIGV4dGVybmFsIGZhY3RvcnkgX0FzeW5jRGlyZWN0b3J5TGlzdGVyT3BzKGludCBwb2ludGVyKTsKCiAgaW50IGdldFBvaW50ZXIoKTsKfQoKY2xhc3MgX0FzeW5jRGlyZWN0b3J5TGlzdGVyIHsKICBzdGF0aWMgY29uc3QgaW50IGxpc3RGaWxlID0gMDsKICBzdGF0aWMgY29uc3QgaW50IGxpc3REaXJlY3RvcnkgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgbGlzdExpbmsgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgbGlzdEVycm9yID0gMzsKICBzdGF0aWMgY29uc3QgaW50IGxpc3REb25lID0gNDsKCiAgc3RhdGljIGNvbnN0IGludCByZXNwb25zZVR5cGUgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgcmVzcG9uc2VQYXRoID0gMTsKICBzdGF0aWMgY29uc3QgaW50IHJlc3BvbnNlQ29tcGxldGUgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgcmVzcG9uc2VFcnJvciA9IDI7CgogIGZpbmFsIFVpbnQ4TGlzdCByYXdQYXRoOwogIGZpbmFsIGJvb2wgcmVjdXJzaXZlOwogIGZpbmFsIGJvb2wgZm9sbG93TGlua3M7CgogIFN0cmVhbUNvbnRyb2xsZXI8RmlsZVN5c3RlbUVudGl0eT4gY29udHJvbGxlcjsKICBib29sIGNhbmNlbGVkID0gZmFsc2U7CiAgYm9vbCBuZXh0UnVubmluZyA9IGZhbHNlOwogIGJvb2wgY2xvc2VkID0gZmFsc2U7CiAgX0FzeW5jRGlyZWN0b3J5TGlzdGVyT3BzIF9vcHM7CiAgQ29tcGxldGVyIGNsb3NlQ29tcGxldGVyID0gbmV3IENvbXBsZXRlcigpOwoKICBfQXN5bmNEaXJlY3RvcnlMaXN0ZXIodGhpcy5yYXdQYXRoLCB0aGlzLnJlY3Vyc2l2ZSwgdGhpcy5mb2xsb3dMaW5rcykgewogICAgY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPEZpbGVTeXN0ZW1FbnRpdHk+KAogICAgICAgIG9uTGlzdGVuOiBvbkxpc3Rlbiwgb25SZXN1bWU6IG9uUmVzdW1lLCBvbkNhbmNlbDogb25DYW5jZWwsIHN5bmM6IHRydWUpOwogIH0KCiAgLy8gV0FSTklORzoKICAvLyBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBpbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IG9uIHRoZSBuYXRpdmUKICAvLyBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBhc3luYyBkaXJlY3RvcnkgbGlzdGVyIG9wZXJhdGlvbnMuIEl0IHNob3VsZAogIC8vIG9ubHkgYmUgY2FsbGVkIHRvIHBhc3MgdGhlIHBvaW50ZXIgdG8gdGhlIElPIFNlcnZpY2UsIHdoaWNoIHdpbGwgZGVjcmVtZW50CiAgLy8gdGhlIHJlZmVyZW5jZSBjb3VudCB3aGVuIGl0IGlzIGZpbmlzaGVkIHdpdGggaXQuCiAgaW50IF9wb2ludGVyKCkgewogICAgcmV0dXJuIChfb3BzID09IG51bGwpID8gbnVsbCA6IF9vcHMuZ2V0UG9pbnRlcigpOwogIH0KCiAgU3RyZWFtPEZpbGVTeXN0ZW1FbnRpdHk+IGdldCBzdHJlYW0gPT4gY29udHJvbGxlci5zdHJlYW07CgogIHZvaWQgb25MaXN0ZW4oKSB7CiAgICBfRmlsZS5fZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKF9JT1NlcnZpY2UuZGlyZWN0b3J5TGlzdFN0YXJ0LAogICAgICAgIFtudWxsLCByYXdQYXRoLCByZWN1cnNpdmUsIGZvbGxvd0xpbmtzXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKHJlc3BvbnNlIGlzIGludCkgewogICAgICAgIF9vcHMgPSBuZXcgX0FzeW5jRGlyZWN0b3J5TGlzdGVyT3BzKHJlc3BvbnNlKTsKICAgICAgICBuZXh0KCk7CiAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UgaXMgRXJyb3IpIHsKICAgICAgICBjb250cm9sbGVyLmFkZEVycm9yKHJlc3BvbnNlLCByZXNwb25zZS5zdGFja1RyYWNlKTsKICAgICAgICBjbG9zZSgpOwogICAgICB9IGVsc2UgewogICAgICAgIGVycm9yKHJlc3BvbnNlKTsKICAgICAgICBjbG9zZSgpOwogICAgICB9CiAgICB9KTsKICB9CgogIHZvaWQgb25SZXN1bWUoKSB7CiAgICBpZiAoIW5leHRSdW5uaW5nKSB7CiAgICAgIG5leHQoKTsKICAgIH0KICB9CgogIEZ1dHVyZSBvbkNhbmNlbCgpIHsKICAgIGNhbmNlbGVkID0gdHJ1ZTsKICAgIC8vIElmIHdlIGFyZSBhY3RpdmUsIGJ1dCBub3QgcmVxdWVzdGluZywgY2xvc2UuCiAgICBpZiAoIW5leHRSdW5uaW5nKSB7CiAgICAgIGNsb3NlKCk7CiAgICB9CgogICAgcmV0dXJuIGNsb3NlQ29tcGxldGVyLmZ1dHVyZTsKICB9CgogIHZvaWQgbmV4dCgpIHsKICAgIGlmIChjYW5jZWxlZCkgewogICAgICBjbG9zZSgpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoY29udHJvbGxlci5pc1BhdXNlZCB8fCBuZXh0UnVubmluZykgewogICAgICByZXR1cm47CiAgICB9CiAgICB2YXIgcG9pbnRlciA9IF9wb2ludGVyKCk7CiAgICBpZiAocG9pbnRlciA9PSBudWxsKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIG5leHRSdW5uaW5nID0gdHJ1ZTsKICAgIF9JT1NlcnZpY2UuX2Rpc3BhdGNoKF9JT1NlcnZpY2UuZGlyZWN0b3J5TGlzdE5leHQsIFtwb2ludGVyXSkKICAgICAgICAudGhlbigocmVzdWx0KSB7CiAgICAgIG5leHRSdW5uaW5nID0gZmFsc2U7CiAgICAgIGlmIChyZXN1bHQgaXMgTGlzdCkgewogICAgICAgIG5leHQoKTsKICAgICAgICBhc3NlcnQocmVzdWx0Lmxlbmd0aCAlIDIgPT0gMCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGFzc2VydChpICUgMiA9PSAwKTsKICAgICAgICAgIHN3aXRjaCAocmVzdWx0W2krK10pIHsKICAgICAgICAgICAgY2FzZSBsaXN0RmlsZToKICAgICAgICAgICAgICBjb250cm9sbGVyLmFkZChuZXcgRmlsZS5mcm9tUmF3UGF0aChyZXN1bHRbaV0pKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBsaXN0RGlyZWN0b3J5OgogICAgICAgICAgICAgIGNvbnRyb2xsZXIuYWRkKG5ldyBEaXJlY3RvcnkuZnJvbVJhd1BhdGgocmVzdWx0W2ldKSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgbGlzdExpbms6CiAgICAgICAgICAgICAgY29udHJvbGxlci5hZGQobmV3IExpbmsuZnJvbVJhd1BhdGgocmVzdWx0W2ldKSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgbGlzdEVycm9yOgogICAgICAgICAgICAgIGVycm9yKHJlc3VsdFtpXSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgbGlzdERvbmU6CiAgICAgICAgICAgICAgY2FuY2VsZWQgPSB0cnVlOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29udHJvbGxlci5hZGRFcnJvcihuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigiSW50ZXJuYWwgZXJyb3IiKSk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgdm9pZCBfY2xlYW51cCgpIHsKICAgIGNvbnRyb2xsZXIuY2xvc2UoKTsKICAgIGNsb3NlQ29tcGxldGVyLmNvbXBsZXRlKCk7CiAgICBfb3BzID0gbnVsbDsKICB9CgogIHZvaWQgY2xvc2UoKSB7CiAgICBpZiAoY2xvc2VkKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChuZXh0UnVubmluZykgewogICAgICByZXR1cm47CiAgICB9CiAgICBjbG9zZWQgPSB0cnVlOwoKICAgIHZhciBwb2ludGVyID0gX3BvaW50ZXIoKTsKICAgIGlmIChwb2ludGVyID09IG51bGwpIHsKICAgICAgX2NsZWFudXAoKTsKICAgIH0gZWxzZSB7CiAgICAgIF9JT1NlcnZpY2UuX2Rpc3BhdGNoKF9JT1NlcnZpY2UuZGlyZWN0b3J5TGlzdFN0b3AsIFtwb2ludGVyXSkKICAgICAgICAgIC53aGVuQ29tcGxldGUoX2NsZWFudXApOwogICAgfQogIH0KCiAgdm9pZCBlcnJvcihtZXNzYWdlKSB7CiAgICB2YXIgZXJyb3JUeXBlID0gbWVzc2FnZVtyZXNwb25zZUVycm9yXVtfZXJyb3JSZXNwb25zZUVycm9yVHlwZV07CiAgICBpZiAoZXJyb3JUeXBlID09IF9pbGxlZ2FsQXJndW1lbnRSZXNwb25zZSkgewogICAgICBjb250cm9sbGVyLmFkZEVycm9yKG5ldyBBcmd1bWVudEVycm9yKCkpOwogICAgfSBlbHNlIGlmIChlcnJvclR5cGUgPT0gX29zRXJyb3JSZXNwb25zZSkgewogICAgICB2YXIgcmVzcG9uc2VFcnJvckluZm8gPSBtZXNzYWdlW3Jlc3BvbnNlRXJyb3JdOwogICAgICB2YXIgZXJyID0gbmV3IE9TRXJyb3IocmVzcG9uc2VFcnJvckluZm9bX29zRXJyb3JSZXNwb25zZU1lc3NhZ2VdLAogICAgICAgICAgcmVzcG9uc2VFcnJvckluZm9bX29zRXJyb3JSZXNwb25zZUVycm9yQ29kZV0pOwogICAgICB2YXIgZXJyb3JQYXRoID0gbWVzc2FnZVtyZXNwb25zZVBhdGhdOwogICAgICBpZiAoZXJyb3JQYXRoID09IG51bGwpIHsKICAgICAgICBlcnJvclBhdGggPSB1dGY4LmRlY29kZShyYXdQYXRoLCBhbGxvd01hbGZvcm1lZDogdHJ1ZSk7CiAgICAgIH0gZWxzZSBpZiAoZXJyb3JQYXRoIGlzIFVpbnQ4TGlzdCkgewogICAgICAgIGVycm9yUGF0aCA9IHV0ZjguZGVjb2RlKG1lc3NhZ2VbcmVzcG9uc2VQYXRoXSwgYWxsb3dNYWxmb3JtZWQ6IHRydWUpOwogICAgICB9CiAgICAgIGNvbnRyb2xsZXIuYWRkRXJyb3IoCiAgICAgICAgICBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigiRGlyZWN0b3J5IGxpc3RpbmcgZmFpbGVkIiwgZXJyb3JQYXRoLCBlcnIpKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnRyb2xsZXIuYWRkRXJyb3IobmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oIkludGVybmFsIGVycm9yIikpOwogICAgfQogIH0KfQqBwQBOTjwBEQFBEBYBHC4SNQQBLhs5BkU+BAEcATJISDxERCFAG0AyHCMZFhkBITIdJUMGIwQBIhgeTQ8gJE1LHjshNg1PGQYmIkAGPy8dJUUGBAEQJAQBGilIKEgIHAgEARY7HUQGGgQBOgE2FSYhIzsdDhEbCgoNK0oqTAoVCgYEAS0VICEsCAY7HUYGBAElOQEyExZRSQYXSipNIw08BkhNKC1BCCYIBAEuExZRSQYXSipNIw08Bh5LHSVJBiIEATcpRRsoSggTCAQBLkwdRgYEAS0pUShICCUIBAEpHiEGRB1EBiMEASE5JlkrK0cXGREEASM5NiEGJx8fEFUnJ0MTFhMEAS0BJTsBPCgxJSQdQTI8Dy8GBAIBKjoBFAIBHiEmISIhASUlKSYBGxgaATEZHBchLgFKOVEEAQ5LTVA2EzYEATwBFEBDHTcQJjwRDxkRCAgEARQYDgYEARYVNBgPBgEiBAEQFA8OBi4OBh4bDgYYQhkbHBAoMh4hGz8VIEQVGz8VHCAVGx8WDAoPSAgIBAEUGB8RBAEREg4GFw4GEwEeGxINRCMGBAEYRTEwMDZIOS0fQCtOCBtQDUYGBAIBG2RhcnQ6aW8vZGlyZWN0b3J5X2ltcGwuZGFydDNvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW8vZW1iZWRkZXJfY29uZmlnLmRhcnSFKC8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuaW87CgovLy8gRW1iZWRkZXItc3BlY2lmaWMsIGZpbmUtZ3JhaW5lZCBkYXJ0OmlvIGNvbmZpZ3VyYXRpb24uCi8vLwovLy8gVGhpcyBjbGFzcyBjb250YWlucyBwZXItSXNvbGF0ZSBmbGFncyB0aGF0IGFuIGVtYmVkZGVyIGNhbiBzZXQgdG8gcHV0Ci8vLyBmaW5lLWdyYWluZWQgbGltaXRhdGlvbnMgb24gd2hhdCBwcm9jZXNzLXZpc2libGUgb3BlcmF0aW9ucyBJc29sYXRlcyBhcmUKLy8vIHBlcm1pdHRlZCB0byB1c2UgKGUuZy4gZXhpdCgpKS4gQnkgZGVmYXVsdCwgdGhlIHdob2xlIGRhcnQ6aW8gQVBJIGlzCi8vLyBlbmFibGVkLiBXaGVuIGEgZGlzYWxsb3dlZCBvcGVyYXRpb24gaXMgYXR0ZW1wdGVkLCBhbiBgVW5zdXBwb3J0ZWRFcnJvcmAgaXMKLy8vIHRocm93bi4KQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQphYnN0cmFjdCBjbGFzcyBfRW1iZWRkZXJDb25maWcgewogIC8vLyBUaGUgSXNvbGF0ZSBtYXkgc2V0IERpcmVjdG9yeS5jdXJyZW50LgogIHN0YXRpYyBib29sIF9tYXlDaGRpciA9IHRydWU7CgogIC8vLyBUaGUgSXNvbGF0ZSBtYXkgY2FsbCBleGl0KCkuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHN0YXRpYyBib29sIF9tYXlFeGl0ID0gdHJ1ZTsKCiAgLy8gVGhlIElzb2xhdGUgbWF5IHNldCBTdGRpbi5lY2hvTW9kZS4KICBAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpCiAgc3RhdGljIGJvb2wgX21heVNldEVjaG9Nb2RlID0gdHJ1ZTsKCiAgLy8gVGhlIElzb2xhdGUgbWF5IHNldCBTdGRpbi5saW5lTW9kZS4KICBAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpCiAgc3RhdGljIGJvb2wgX21heVNldExpbmVNb2RlID0gdHJ1ZTsKCiAgLy8vIFRoZSBJc29sYXRlIG1heSBjYWxsIHNsZWVwKCkuCiAgQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQogIHN0YXRpYyBib29sIF9tYXlTbGVlcCA9IHRydWU7CgogIC8vIFRPRE8oenJhKTogQ29uc2lkZXIgYWRkaW5nOgogIC8vIC0gYW4gb3B0aW9uIHRvIGRpc2FsbG93IG1vZGlmeWluZyBTZWN1cml0eUNvbnRleHQuZGVmYXVsdENvbnRleHQKICAvLyAtIGFuIG9wdGlvbiB0byBkaXNhbGxvdyBjbG9zaW5nIHN0ZG91dCBhbmQgc3RkZXJyLgp9CigATk48AREBOwRKTUlQDBohLSABIxwfASkcJgEpHCYBJBwgASFGOAIBHGRhcnQ6aW8vZW1iZWRkZXJfY29uZmlnLmRhcnQwb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2lvL2V2ZW50aGFuZGxlci5kYXJ0gVEvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmlvOwoKY2xhc3MgX0V2ZW50SGFuZGxlciB7CiAgZXh0ZXJuYWwgc3RhdGljIHZvaWQgX3NlbmREYXRhKE9iamVjdCBzZW5kZXIsIFNlbmRQb3J0IHNlbmRQb3J0LCBpbnQgZGF0YSk7Cn0KCwBOTjwBEQEWTgIBGWRhcnQ6aW8vZXZlbnRoYW5kbGVyLmRhcnQ3b3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2Jpbi9ldmVudGhhbmRsZXJfcGF0Y2guZGFydIHmLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvbW1vbl9wYXRjaC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBfRXZlbnRIYW5kbGVyIHsKICBAcGF0Y2gKICBzdGF0aWMgdm9pZCBfc2VuZERhdGEoT2JqZWN0IHNlbmRlciwgU2VuZFBvcnQgc2VuZFBvcnQsIGludCBkYXRhKQogICAgICBuYXRpdmUgIkV2ZW50SGFuZGxlcl9TZW5kRGF0YSI7CgogIHN0YXRpYyBpbnQgX3RpbWVyTWlsbGlzZWNvbmRDbG9jaygpCiAgICAgIG5hdGl2ZSAiRXZlbnRIYW5kbGVyX1RpbWVyTWlsbGlzZWNvbmRDbG9jayI7Cn0KEQBOTjwBIAEHFglEJgEmMwIBJWRhcnQ6aW8tcGF0Y2gvZXZlbnRoYW5kbGVyX3BhdGNoLmRhcnQob3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2lvL2ZpbGUuZGFydMAAhQEvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmlvOwoKLyoqCiAqIFRoZSBtb2RlcyBpbiB3aGljaCBhIEZpbGUgY2FuIGJlIG9wZW5lZC4KICovCmNsYXNzIEZpbGVNb2RlIHsKICAvLy8gVGhlIG1vZGUgZm9yIG9wZW5pbmcgYSBmaWxlIG9ubHkgZm9yIHJlYWRpbmcuCiAgc3RhdGljIGNvbnN0IHJlYWQgPSBjb25zdCBGaWxlTW9kZS5faW50ZXJuYWwoMCk7CiAgQERlcHJlY2F0ZWQoIlVzZSByZWFkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBSRUFEID0gcmVhZDsKCiAgLy8vIE1vZGUgZm9yIG9wZW5pbmcgYSBmaWxlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiBUaGUgZmlsZSBpcwogIC8vLyBvdmVyd3JpdHRlbiBpZiBpdCBhbHJlYWR5IGV4aXN0cy4gVGhlIGZpbGUgaXMgY3JlYXRlZCBpZiBpdCBkb2VzIG5vdAogIC8vLyBhbHJlYWR5IGV4aXN0LgogIHN0YXRpYyBjb25zdCB3cml0ZSA9IGNvbnN0IEZpbGVNb2RlLl9pbnRlcm5hbCgxKTsKICBARGVwcmVjYXRlZCgiVXNlIHdyaXRlIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBXUklURSA9IHdyaXRlOwoKICAvLy8gTW9kZSBmb3Igb3BlbmluZyBhIGZpbGUgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgdG8gdGhlCiAgLy8vIGVuZCBvZiBpdC4gVGhlIGZpbGUgaXMgY3JlYXRlZCBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgogIHN0YXRpYyBjb25zdCBhcHBlbmQgPSBjb25zdCBGaWxlTW9kZS5faW50ZXJuYWwoMik7CiAgQERlcHJlY2F0ZWQoIlVzZSBhcHBlbmQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEFQUEVORCA9IGFwcGVuZDsKCiAgLy8vIE1vZGUgZm9yIG9wZW5pbmcgYSBmaWxlIGZvciB3cml0aW5nICpvbmx5Ki4gVGhlIGZpbGUgaXMKICAvLy8gb3ZlcndyaXR0ZW4gaWYgaXQgYWxyZWFkeSBleGlzdHMuIFRoZSBmaWxlIGlzIGNyZWF0ZWQgaWYgaXQgZG9lcyBub3QKICAvLy8gYWxyZWFkeSBleGlzdC4KICBzdGF0aWMgY29uc3Qgd3JpdGVPbmx5ID0gY29uc3QgRmlsZU1vZGUuX2ludGVybmFsKDMpOwogIEBEZXByZWNhdGVkKCJVc2Ugd3JpdGVPbmx5IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBXUklURV9PTkxZID0gd3JpdGVPbmx5OwoKICAvLy8gTW9kZSBmb3Igb3BlbmluZyBhIGZpbGUgZm9yIHdyaXRpbmcgKm9ubHkqIHRvIHRoZQogIC8vLyBlbmQgb2YgaXQuIFRoZSBmaWxlIGlzIGNyZWF0ZWQgaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4KICBzdGF0aWMgY29uc3Qgd3JpdGVPbmx5QXBwZW5kID0gY29uc3QgRmlsZU1vZGUuX2ludGVybmFsKDQpOwogIEBEZXByZWNhdGVkKCJVc2Ugd3JpdGVPbmx5QXBwZW5kIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBXUklURV9PTkxZX0FQUEVORCA9IHdyaXRlT25seUFwcGVuZDsKCiAgZmluYWwgaW50IF9tb2RlOwoKICBjb25zdCBGaWxlTW9kZS5faW50ZXJuYWwodGhpcy5fbW9kZSk7Cn0KCi8vLyBUaGUgbW9kZSBmb3Igb3BlbmluZyBhIGZpbGUgb25seSBmb3IgcmVhZGluZy4KQERlcHJlY2F0ZWQoIlVzZSBGaWxlTW9kZS5yZWFkIGluc3RlYWQiKQpjb25zdCBSRUFEID0gRmlsZU1vZGUucmVhZDsKCi8vLyBUaGUgbW9kZSBmb3Igb3BlbmluZyBhIGZpbGUgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIFRoZSBmaWxlIGlzCi8vLyBvdmVyd3JpdHRlbiBpZiBpdCBhbHJlYWR5IGV4aXN0cy4gVGhlIGZpbGUgaXMgY3JlYXRlZCBpZiBpdCBkb2VzIG5vdAovLy8gYWxyZWFkeSBleGlzdC4KQERlcHJlY2F0ZWQoIlVzZSBGaWxlTW9kZS53cml0ZSBpbnN0ZWFkIikKY29uc3QgV1JJVEUgPSBGaWxlTW9kZS53cml0ZTsKCi8vLyBUaGUgbW9kZSBmb3Igb3BlbmluZyBhIGZpbGUgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgdG8gdGhlCi8vLyBlbmQgb2YgaXQuIFRoZSBmaWxlIGlzIGNyZWF0ZWQgaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4KQERlcHJlY2F0ZWQoIlVzZSBGaWxlTW9kZS5hcHBlbmQgaW5zdGVhZCIpCmNvbnN0IEFQUEVORCA9IEZpbGVNb2RlLmFwcGVuZDsKCi8vLyBNb2RlIGZvciBvcGVuaW5nIGEgZmlsZSBmb3Igd3JpdGluZyAqb25seSouIFRoZSBmaWxlIGlzCi8vLyBvdmVyd3JpdHRlbiBpZiBpdCBhbHJlYWR5IGV4aXN0cy4gVGhlIGZpbGUgaXMgY3JlYXRlZCBpZiBpdCBkb2VzIG5vdAovLy8gYWxyZWFkeSBleGlzdC4KQERlcHJlY2F0ZWQoIlVzZSBGaWxlTW9kZS53cml0ZU9ubHkgaW5zdGVhZCIpCmNvbnN0IFdSSVRFX09OTFkgPSBGaWxlTW9kZS53cml0ZU9ubHk7CgovLy8gTW9kZSBmb3Igb3BlbmluZyBhIGZpbGUgZm9yIHdyaXRpbmcgKm9ubHkqIHRvIHRoZQovLy8gZW5kIG9mIGl0LiBUaGUgZmlsZSBpcyBjcmVhdGVkIGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuCkBEZXByZWNhdGVkKCJVc2UgRmlsZU1vZGUud3JpdGVPbmx5QXBwZW5kIGluc3RlYWQiKQpjb25zdCBXUklURV9PTkxZX0FQUEVORCA9IEZpbGVNb2RlLndyaXRlT25seUFwcGVuZDsKCi8vLyBUeXBlIG9mIGxvY2sgd2hlbiByZXF1ZXN0aW5nIGEgbG9jayBvbiBhIGZpbGUuCmNsYXNzIEZpbGVMb2NrIHsKICAvLy8gU2hhcmVkIGZpbGUgbG9jay4KICBzdGF0aWMgY29uc3Qgc2hhcmVkID0gY29uc3QgRmlsZUxvY2suX2ludGVybmFsKDEpOwogIEBEZXByZWNhdGVkKCJVc2Ugc2hhcmVkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBTSEFSRUQgPSBzaGFyZWQ7CgogIC8vLyBFeGNsdXNpdmUgZmlsZSBsb2NrLgogIHN0YXRpYyBjb25zdCBleGNsdXNpdmUgPSBjb25zdCBGaWxlTG9jay5faW50ZXJuYWwoMik7CiAgQERlcHJlY2F0ZWQoIlVzZSBleGNsdXNpdmUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEVYQ0xVU0lWRSA9IGV4Y2x1c2l2ZTsKCiAgLy8vIEJsb2NraW5nIHNoYXJlZCBmaWxlIGxvY2suCiAgc3RhdGljIGNvbnN0IGJsb2NraW5nU2hhcmVkID0gY29uc3QgRmlsZUxvY2suX2ludGVybmFsKDMpOwogIEBEZXByZWNhdGVkKCJVc2UgYmxvY2tpbmdTaGFyZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEJMT0NLSU5HX1NIQVJFRCA9IGJsb2NraW5nU2hhcmVkOwoKICAvLy8gQmxvY2tpbmcgZXhjbHVzaXZlIGZpbGUgbG9jay4KICBzdGF0aWMgY29uc3QgYmxvY2tpbmdFeGNsdXNpdmUgPSBjb25zdCBGaWxlTG9jay5faW50ZXJuYWwoNCk7CiAgQERlcHJlY2F0ZWQoIlVzZSBibG9ja2luZ0V4Y2x1c2l2ZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQkxPQ0tJTkdfRVhDTFVTSVZFID0gYmxvY2tpbmdFeGNsdXNpdmU7CgogIGZpbmFsIGludCBfdHlwZTsKCiAgY29uc3QgRmlsZUxvY2suX2ludGVybmFsKHRoaXMuX3R5cGUpOwp9CgovKioKICogQSByZWZlcmVuY2UgdG8gYSBmaWxlIG9uIHRoZSBmaWxlIHN5c3RlbS4KICoKICogQSBGaWxlIGluc3RhbmNlIGlzIGFuIG9iamVjdCB0aGF0IGhvbGRzIGEgW3BhdGhdIG9uIHdoaWNoIG9wZXJhdGlvbnMgY2FuCiAqIGJlIHBlcmZvcm1lZC4KICogWW91IGNhbiBnZXQgdGhlIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlIGZpbGUgdXNpbmcgdGhlIGdldHRlciBbcGFyZW50XSwKICogYSBwcm9wZXJ0eSBpbmhlcml0ZWQgZnJvbSBbRmlsZVN5c3RlbUVudGl0eV0uCiAqCiAqIENyZWF0ZSBhIG5ldyBGaWxlIG9iamVjdCB3aXRoIGEgcGF0aG5hbWUgdG8gYWNjZXNzIHRoZSBzcGVjaWZpZWQgZmlsZSBvbiB0aGUKICogZmlsZSBzeXN0ZW0gZnJvbSB5b3VyIHByb2dyYW0uCiAqCiAqICAgICB2YXIgbXlGaWxlID0gbmV3IEZpbGUoJ2ZpbGUudHh0Jyk7CiAqCiAqIFRoZSBGaWxlIGNsYXNzIGNvbnRhaW5zIG1ldGhvZHMgZm9yIG1hbmlwdWxhdGluZyBmaWxlcyBhbmQgdGhlaXIgY29udGVudHMuCiAqIFVzaW5nIG1ldGhvZHMgaW4gdGhpcyBjbGFzcywgeW91IGNhbiBvcGVuIGFuZCBjbG9zZSBmaWxlcywgcmVhZCB0byBhbmQgd3JpdGUKICogZnJvbSB0aGVtLCBjcmVhdGUgYW5kIGRlbGV0ZSB0aGVtLCBhbmQgY2hlY2sgZm9yIHRoZWlyIGV4aXN0ZW5jZS4KICoKICogV2hlbiByZWFkaW5nIG9yIHdyaXRpbmcgYSBmaWxlLCB5b3UgY2FuIHVzZSBzdHJlYW1zICh3aXRoIFtvcGVuUmVhZF0pLAogKiByYW5kb20gYWNjZXNzIG9wZXJhdGlvbnMgKHdpdGggW29wZW5dKSwKICogb3IgY29udmVuaWVuY2UgbWV0aG9kcyBzdWNoIGFzIFtyZWFkQXNTdHJpbmddLAogKgogKiBNb3N0IG1ldGhvZHMgaW4gdGhpcyBjbGFzcyBvY2N1ciBpbiBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzIHBhaXJzLAogKiBmb3IgZXhhbXBsZSwgW3JlYWRBc1N0cmluZ10gYW5kIFtyZWFkQXNTdHJpbmdTeW5jXS4KICogVW5sZXNzIHlvdSBoYXZlIGEgc3BlY2lmaWMgcmVhc29uIGZvciB1c2luZyB0aGUgc3luY2hyb25vdXMgdmVyc2lvbgogKiBvZiBhIG1ldGhvZCwgcHJlZmVyIHRoZSBhc3luY2hyb25vdXMgdmVyc2lvbiB0byBhdm9pZCBibG9ja2luZyB5b3VyIHByb2dyYW0uCiAqCiAqICMjIElmIHBhdGggaXMgYSBsaW5rCiAqCiAqIElmIFtwYXRoXSBpcyBhIHN5bWJvbGljIGxpbmssIHJhdGhlciB0aGFuIGEgZmlsZSwKICogdGhlbiB0aGUgbWV0aG9kcyBvZiBGaWxlIG9wZXJhdGUgb24gdGhlIHVsdGltYXRlIHRhcmdldCBvZiB0aGUKICogbGluaywgZXhjZXB0IGZvciBbZGVsZXRlXSBhbmQgW2RlbGV0ZVN5bmNdLCB3aGljaCBvcGVyYXRlIG9uCiAqIHRoZSBsaW5rLgogKgogKiAjIyBSZWFkIGZyb20gYSBmaWxlCiAqCiAqIFRoZSBmb2xsb3dpbmcgY29kZSBzYW1wbGUgcmVhZHMgdGhlIGVudGlyZSBjb250ZW50cyBmcm9tIGEgZmlsZSBhcyBhIHN0cmluZwogKiB1c2luZyB0aGUgYXN5bmNocm9ub3VzIFtyZWFkQXNTdHJpbmddIG1ldGhvZDoKICoKICogICAgIGltcG9ydCAnZGFydDphc3luYyc7CiAqICAgICBpbXBvcnQgJ2RhcnQ6aW8nOwogKgogKiAgICAgdm9pZCBtYWluKCkgewogKiAgICAgICBuZXcgRmlsZSgnZmlsZS50eHQnKS5yZWFkQXNTdHJpbmcoKS50aGVuKChTdHJpbmcgY29udGVudHMpIHsKICogICAgICAgICBwcmludChjb250ZW50cyk7CiAqICAgICAgIH0pOwogKiAgICAgfQogKgogKiBBIG1vcmUgZmxleGlibGUgYW5kIHVzZWZ1bCB3YXkgdG8gcmVhZCBhIGZpbGUgaXMgd2l0aCBhIFtTdHJlYW1dLgogKiBPcGVuIHRoZSBmaWxlIHdpdGggW29wZW5SZWFkXSwgd2hpY2ggcmV0dXJucyBhIHN0cmVhbSB0aGF0CiAqIHByb3ZpZGVzIHRoZSBkYXRhIGluIHRoZSBmaWxlIGFzIGNodW5rcyBvZiBieXRlcy4KICogTGlzdGVuIHRvIHRoZSBzdHJlYW0gZm9yIGRhdGEgYW5kIHByb2Nlc3MgYXMgbmVlZGVkLgogKiBZb3UgY2FuIHVzZSB2YXJpb3VzIHRyYW5zZm9ybWVycyBpbiBzdWNjZXNzaW9uIHRvIG1hbmlwdWxhdGUgdGhlCiAqIGRhdGEgaW50byB0aGUgcmVxdWlyZWQgZm9ybWF0IG9yIHRvIHByZXBhcmUgaXQgZm9yIG91dHB1dC4KICoKICogWW91IG1pZ2h0IHdhbnQgdG8gdXNlIGEgc3RyZWFtIHRvIHJlYWQgbGFyZ2UgZmlsZXMsCiAqIHRvIG1hbmlwdWxhdGUgdGhlIGRhdGEgd2l0aCB0cmFuc2Zvcm1lcnMsCiAqIG9yIGZvciBjb21wYXRpYmlsaXR5IHdpdGggYW5vdGhlciBBUEksIHN1Y2ggYXMgW1dlYlNvY2tldF1zLgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmlvJzsKICogICAgIGltcG9ydCAnZGFydDpjb252ZXJ0JzsKICogICAgIGltcG9ydCAnZGFydDphc3luYyc7CiAqCiAqICAgICBtYWluKCkgewogKiAgICAgICBmaW5hbCBmaWxlID0gbmV3IEZpbGUoJ2ZpbGUudHh0Jyk7CiAqICAgICAgIFN0cmVhbTxMaXN0PGludD4+IGlucHV0U3RyZWFtID0gZmlsZS5vcGVuUmVhZCgpOwogKgogKiAgICAgICBpbnB1dFN0cmVhbQogKiAgICAgICAgIC50cmFuc2Zvcm0odXRmOC5kZWNvZGVyKSAgICAgICAvLyBEZWNvZGUgYnl0ZXMgdG8gVVRGLTguCiAqICAgICAgICAgLnRyYW5zZm9ybShuZXcgTGluZVNwbGl0dGVyKCkpIC8vIENvbnZlcnQgc3RyZWFtIHRvIGluZGl2aWR1YWwgbGluZXMuCiAqICAgICAgICAgLmxpc3RlbigoU3RyaW5nIGxpbmUpIHsgICAgICAgIC8vIFByb2Nlc3MgcmVzdWx0cy4KICogICAgICAgICAgICAgcHJpbnQoJyRsaW5lOiAke2xpbmUubGVuZ3RofSBieXRlcycpOwogKiAgICAgICAgICAgfSwKICogICAgICAgICAgIG9uRG9uZTogKCkgeyBwcmludCgnRmlsZSBpcyBub3cgY2xvc2VkLicpOyB9LAogKiAgICAgICAgICAgb25FcnJvcjogKGUpIHsgcHJpbnQoZS50b1N0cmluZygpKTsgfSk7CiAqICAgICB9CiAqCiAqICMjIFdyaXRlIHRvIGEgZmlsZQogKgogKiBUbyB3cml0ZSBhIHN0cmluZyB0byBhIGZpbGUsIHVzZSB0aGUgW3dyaXRlQXNTdHJpbmddIG1ldGhvZDoKICoKICogICAgIGltcG9ydCAnZGFydDppbyc7CiAqCiAqICAgICB2b2lkIG1haW4oKSB7CiAqICAgICAgIGZpbmFsIGZpbGVuYW1lID0gJ2ZpbGUudHh0JzsKICogICAgICAgbmV3IEZpbGUoZmlsZW5hbWUpLndyaXRlQXNTdHJpbmcoJ3NvbWUgY29udGVudCcpCiAqICAgICAgICAgLnRoZW4oKEZpbGUgZmlsZSkgewogKiAgICAgICAgICAgLy8gRG8gc29tZXRoaW5nIHdpdGggdGhlIGZpbGUuCiAqICAgICAgICAgfSk7CiAqICAgICB9CiAqCiAqIFlvdSBjYW4gYWxzbyB3cml0ZSB0byBhIGZpbGUgdXNpbmcgYSBbU3RyZWFtXS4gT3BlbiB0aGUgZmlsZSB3aXRoCiAqIFtvcGVuV3JpdGVdLCB3aGljaCByZXR1cm5zIGFuIFtJT1NpbmtdIHRvIHdoaWNoIHlvdSBjYW4gd3JpdGUgZGF0YS4KICogQmUgc3VyZSB0byBjbG9zZSB0aGUgc2luayB3aXRoIHRoZSBbSU9TaW5rLmNsb3NlXSBtZXRob2QuCiAqCiAqICAgICBpbXBvcnQgJ2RhcnQ6aW8nOwogKgogKiAgICAgdm9pZCBtYWluKCkgewogKiAgICAgICB2YXIgZmlsZSA9IG5ldyBGaWxlKCdmaWxlLnR4dCcpOwogKiAgICAgICB2YXIgc2luayA9IGZpbGUub3BlbldyaXRlKCk7CiAqICAgICAgIHNpbmsud3JpdGUoJ0ZJTEUgQUNDRVNTRUQgJHtuZXcgRGF0ZVRpbWUubm93KCl9XG4nKTsKICoKICogICAgICAgLy8gQ2xvc2UgdGhlIElPU2luayB0byBmcmVlIHN5c3RlbSByZXNvdXJjZXMuCiAqICAgICAgIHNpbmsuY2xvc2UoKTsKICogICAgIH0KICoKICogIyMgVGhlIHVzZSBvZiBGdXR1cmVzCiAqCiAqIFRvIGF2b2lkIHVuaW50ZW50aW9uYWwgYmxvY2tpbmcgb2YgdGhlIHByb2dyYW0sCiAqIHNldmVyYWwgbWV0aG9kcyB1c2UgYSBbRnV0dXJlXSB0byByZXR1cm4gYSB2YWx1ZS4gRm9yIGV4YW1wbGUsCiAqIHRoZSBbbGVuZ3RoXSBtZXRob2QsIHdoaWNoIGdldHMgdGhlIGxlbmd0aCBvZiBhIGZpbGUsIHJldHVybnMgYSBGdXR1cmUuCiAqIFVzZSBgdGhlbmAgdG8gcmVnaXN0ZXIgYSBjYWxsYmFjayBmdW5jdGlvbiwgd2hpY2ggaXMgY2FsbGVkIHdoZW4KICogdGhlIHZhbHVlIGlzIHJlYWR5LgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmlvJzsKICoKICogICAgIG1haW4oKSB7CiAqICAgICAgIGZpbmFsIGZpbGUgPSBuZXcgRmlsZSgnZmlsZS50eHQnKTsKICoKICogICAgICAgZmlsZS5sZW5ndGgoKS50aGVuKChsZW4pIHsKICogICAgICAgICBwcmludChsZW4pOwogKiAgICAgICB9KTsKICogICAgIH0KICoKICogSW4gYWRkaXRpb24gdG8gbGVuZ3RoLCB0aGUgW2V4aXN0c10sIFtsYXN0TW9kaWZpZWRdLCBbc3RhdF0sIGFuZAogKiBvdGhlciBtZXRob2RzLCByZXR1cm4gRnV0dXJlcy4KICoKICogIyMgT3RoZXIgcmVzb3VyY2VzCiAqCiAqICogW0RhcnQgYnkgRXhhbXBsZV0oaHR0cHM6Ly93d3cuZGFydGxhbmcub3JnL2RhcnQtYnktZXhhbXBsZS8jZmlsZXMtZGlyZWN0b3JpZXMtYW5kLXN5bWxpbmtzKQogKiAgIHByb3ZpZGVzIGFkZGl0aW9uYWwgdGFzay1vcmllbnRlZCBjb2RlIHNhbXBsZXMgdGhhdCBzaG93IGhvdyB0byB1c2UKICogICB2YXJpb3VzIEFQSSBmcm9tIHRoZSBEaXJlY3RvcnkgY2xhc3MgYW5kIHRoZSByZWxhdGVkIFtGaWxlXSBjbGFzcy4KICoKICogKiBbSS9PIGZvciBDb21tYW5kLUxpbmUKICogICBBcHBzXShodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvZG9jcy9kYXJ0LXVwLWFuZC1ydW5uaW5nL2NoMDMuaHRtbCNkYXJ0aW8tLS1pby1mb3ItY29tbWFuZC1saW5lLWFwcHMpCiAqICAgYSBzZWN0aW9uIGZyb20gX0EgVG91ciBvZiB0aGUgRGFydCBMaWJyYXJpZXNfIGNvdmVycyBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCiAqCiAqICogW1dyaXRlIENvbW1hbmQtTGluZSBBcHBzXShodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvZG9jcy90dXRvcmlhbHMvY21kbGluZS8pLAogKiAgIGEgdHV0b3JpYWwgYWJvdXQgd3JpdGluZyBjb21tYW5kLWxpbmUgYXBwcywgaW5jbHVkZXMgaW5mb3JtYXRpb24gYWJvdXQKICogICBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCiAqLwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmFic3RyYWN0IGNsYXNzIEZpbGUgaW1wbGVtZW50cyBGaWxlU3lzdGVtRW50aXR5IHsKICAvKioKICAgKiBDcmVhdGVzIGEgW0ZpbGVdIG9iamVjdC4KICAgKgogICAqIElmIFtwYXRoXSBpcyBhIHJlbGF0aXZlIHBhdGgsIGl0IHdpbGwgYmUgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gdGhlCiAgICogY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSAoc2VlIFtEaXJlY3RvcnkuY3VycmVudF0pLCB3aGVuIHVzZWQuCiAgICoKICAgKiBJZiBbcGF0aF0gaXMgYW4gYWJzb2x1dGUgcGF0aCwgaXQgd2lsbCBiZSBpbW11bmUgdG8gY2hhbmdlcyB0byB0aGUKICAgKiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogICAqLwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBmYWN0b3J5IEZpbGUoU3RyaW5nIHBhdGgpIHsKICAgIGZpbmFsIElPT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IElPT3ZlcnJpZGVzLmN1cnJlbnQ7CiAgICBpZiAob3ZlcnJpZGVzID09IG51bGwpIHsKICAgICAgcmV0dXJuIG5ldyBfRmlsZShwYXRoKTsKICAgIH0KICAgIHJldHVybiBvdmVycmlkZXMuY3JlYXRlRmlsZShwYXRoKTsKICB9CgogIC8qKgogICAqIENyZWF0ZSBhIEZpbGUgb2JqZWN0IGZyb20gYSBVUkkuCiAgICoKICAgKiBJZiBbdXJpXSBjYW5ub3QgcmVmZXJlbmNlIGEgZmlsZSB0aGlzIHRocm93cyBbVW5zdXBwb3J0ZWRFcnJvcl0uCiAgICovCiAgZmFjdG9yeSBGaWxlLmZyb21VcmkoVXJpIHVyaSkgPT4gbmV3IEZpbGUodXJpLnRvRmlsZVBhdGgoKSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBGaWxlIG9iamVjdCBmcm9tIGEgcmF3IHBhdGgsIHRoYXQgaXMsIGEgc2VxdWVuY2Ugb2YgYnl0ZXMKICAgKiBhcyByZXByZXNlbnRlZCBieSB0aGUgT1MuCiAgICovCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGZhY3RvcnkgRmlsZS5mcm9tUmF3UGF0aChVaW50OExpc3QgcmF3UGF0aCkgewogICAgLy8gVE9ETyhia29ueWkpOiBIYW5kbGUgb3ZlcnJpZGVzLgogICAgcmV0dXJuIG5ldyBfRmlsZS5mcm9tUmF3UGF0aChyYXdQYXRoKTsKICB9CgogIC8qKgogICAqIENyZWF0ZSB0aGUgZmlsZS4gUmV0dXJucyBhIGBGdXR1cmU8RmlsZT5gIHRoYXQgY29tcGxldGVzIHdpdGgKICAgKiB0aGUgZmlsZSB3aGVuIGl0IGhhcyBiZWVuIGNyZWF0ZWQuCiAgICoKICAgKiBJZiBbcmVjdXJzaXZlXSBpcyBmYWxzZSwgdGhlIGRlZmF1bHQsIHRoZSBmaWxlIGlzIGNyZWF0ZWQgb25seSBpZgogICAqIGFsbCBkaXJlY3RvcmllcyBpbiB0aGUgcGF0aCBleGlzdC4gSWYgW3JlY3Vyc2l2ZV0gaXMgdHJ1ZSwgYWxsCiAgICogbm9uLWV4aXN0aW5nIHBhdGggY29tcG9uZW50cyBhcmUgY3JlYXRlZC4KICAgKgogICAqIEV4aXN0aW5nIGZpbGVzIGFyZSBsZWZ0IHVudG91Y2hlZCBieSBbY3JlYXRlXS4gQ2FsbGluZyBbY3JlYXRlXSBvbiBhbgogICAqIGV4aXN0aW5nIGZpbGUgbWlnaHQgZmFpbCBpZiB0aGVyZSBhcmUgcmVzdHJpY3RpdmUgcGVybWlzc2lvbnMgb24KICAgKiB0aGUgZmlsZS4KICAgKgogICAqIENvbXBsZXRlcyB0aGUgZnV0dXJlIHdpdGggYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICAgKi8KICBGdXR1cmU8RmlsZT4gY3JlYXRlKHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBjcmVhdGUgdGhlIGZpbGUuIEV4aXN0aW5nIGZpbGVzIGFyZSBsZWZ0IHVudG91Y2hlZAogICAqIGJ5IFtjcmVhdGVTeW5jXS4gQ2FsbGluZyBbY3JlYXRlU3luY10gb24gYW4gZXhpc3RpbmcgZmlsZSBtaWdodCBmYWlsCiAgICogaWYgdGhlcmUgYXJlIHJlc3RyaWN0aXZlIHBlcm1pc3Npb25zIG9uIHRoZSBmaWxlLgogICAqCiAgICogSWYgW3JlY3Vyc2l2ZV0gaXMgZmFsc2UsIHRoZSBkZWZhdWx0LCB0aGUgZmlsZSBpcyBjcmVhdGVkCiAgICogb25seSBpZiBhbGwgZGlyZWN0b3JpZXMgaW4gdGhlIHBhdGggZXhpc3QuCiAgICogSWYgW3JlY3Vyc2l2ZV0gaXMgdHJ1ZSwgYWxsIG5vbi1leGlzdGluZyBwYXRoIGNvbXBvbmVudHMgYXJlIGNyZWF0ZWQuCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICAgKi8KICB2b2lkIGNyZWF0ZVN5bmMoe2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pOwoKICAvKioKICAgKiBSZW5hbWVzIHRoaXMgZmlsZS4gUmV0dXJucyBhIGBGdXR1cmU8RmlsZT5gIHRoYXQgY29tcGxldGVzCiAgICogd2l0aCBhIFtGaWxlXSBpbnN0YW5jZSBmb3IgdGhlIHJlbmFtZWQgZmlsZS4KICAgKgogICAqIElmIFtuZXdQYXRoXSBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGZpbGUsIHRoYXQgZmlsZSBpcwogICAqIHJlcGxhY2VkLiBJZiBbbmV3UGF0aF0gaWRlbnRpZmllcyBhbiBleGlzdGluZyBkaXJlY3RvcnksIHRoZQogICAqIG9wZXJhdGlvbiBmYWlscyBhbmQgdGhlIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhbiBleGNlcHRpb24uCiAgICovCiAgRnV0dXJlPEZpbGU+IHJlbmFtZShTdHJpbmcgbmV3UGF0aCk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgcmVuYW1lcyB0aGlzIGZpbGUuIFJldHVybnMgYSBbRmlsZV0KICAgKiBpbnN0YW5jZSBmb3IgdGhlIHJlbmFtZWQgZmlsZS4KICAgKgogICAqIElmIFtuZXdQYXRoXSBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGZpbGUsIHRoYXQgZmlsZSBpcwogICAqIHJlcGxhY2VkLiBJZiBbbmV3UGF0aF0gaWRlbnRpZmllcyBhbiBleGlzdGluZyBkaXJlY3RvcnkgdGhlCiAgICogb3BlcmF0aW9uIGZhaWxzIGFuZCBhbiBleGNlcHRpb24gaXMgdGhyb3duLgogICAqLwogIEZpbGUgcmVuYW1lU3luYyhTdHJpbmcgbmV3UGF0aCk7CgogIC8qKgogICAqIENvcHkgdGhpcyBmaWxlLiBSZXR1cm5zIGEgYEZ1dHVyZTxGaWxlPmAgdGhhdCBjb21wbGV0ZXMKICAgKiB3aXRoIGEgW0ZpbGVdIGluc3RhbmNlIGZvciB0aGUgY29waWVkIGZpbGUuCiAgICoKICAgKiBJZiBbbmV3UGF0aF0gaWRlbnRpZmllcyBhbiBleGlzdGluZyBmaWxlLCB0aGF0IGZpbGUgaXMKICAgKiByZXBsYWNlZC4gSWYgW25ld1BhdGhdIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LCB0aGUKICAgKiBvcGVyYXRpb24gZmFpbHMgYW5kIHRoZSBmdXR1cmUgY29tcGxldGVzIHdpdGggYW4gZXhjZXB0aW9uLgogICAqLwogIEZ1dHVyZTxGaWxlPiBjb3B5KFN0cmluZyBuZXdQYXRoKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBjb3B5IHRoaXMgZmlsZS4gUmV0dXJucyBhIFtGaWxlXQogICAqIGluc3RhbmNlIGZvciB0aGUgY29waWVkIGZpbGUuCiAgICoKICAgKiBJZiBbbmV3UGF0aF0gaWRlbnRpZmllcyBhbiBleGlzdGluZyBmaWxlLCB0aGF0IGZpbGUgaXMKICAgKiByZXBsYWNlZC4gSWYgW25ld1BhdGhdIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgZGlyZWN0b3J5IHRoZQogICAqIG9wZXJhdGlvbiBmYWlscyBhbmQgYW4gZXhjZXB0aW9uIGlzIHRocm93bi4KICAgKi8KICBGaWxlIGNvcHlTeW5jKFN0cmluZyBuZXdQYXRoKTsKCiAgLyoqCiAgICogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGZpbGUuIFJldHVybnMgYSBgRnV0dXJlPGludD5gIHRoYXQKICAgKiBjb21wbGV0ZXMgd2l0aCB0aGUgbGVuZ3RoIGluIGJ5dGVzLgogICAqLwogIEZ1dHVyZTxpbnQ+IGxlbmd0aCgpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IGdldCB0aGUgbGVuZ3RoIG9mIHRoZSBmaWxlLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgaW50IGxlbmd0aFN5bmMoKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIFtGaWxlXSBpbnN0YW5jZSB3aG9zZSBwYXRoIGlzIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIFt0aGlzXS4KICAgKgogICAqIFRoZSBhYnNvbHV0ZSBwYXRoIGlzIGNvbXB1dGVkIGJ5IHByZWZpeGluZwogICAqIGEgcmVsYXRpdmUgcGF0aCB3aXRoIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCBhbmQgcmV0dXJuaW5nCiAgICogYW4gYWJzb2x1dGUgcGF0aCB1bmNoYW5nZWQuCiAgICovCiAgRmlsZSBnZXQgYWJzb2x1dGU7CgovKioKICogR2V0IHRoZSBsYXN0LWFjY2Vzc2VkIHRpbWUgb2YgdGhlIGZpbGUuCiAqCiAqIFJldHVybnMgYSBgRnV0dXJlPERhdGVUaW1lPmAgdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGUgZGF0ZSBhbmQgdGltZSB3aGVuIHRoZQogKiBmaWxlIHdhcyBsYXN0IGFjY2Vzc2VkLCBpZiB0aGUgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLgogKgogKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICovCiAgRnV0dXJlPERhdGVUaW1lPiBsYXN0QWNjZXNzZWQoKTsKCi8qKgogKiBHZXQgdGhlIGxhc3QtYWNjZXNzZWQgdGltZSBvZiB0aGUgZmlsZS4KICoKICogUmV0dXJucyB0aGUgZGF0ZSBhbmQgdGltZSB3aGVuIHRoZSBmaWxlIHdhcyBsYXN0IGFjY2Vzc2VkLAogKiBpZiB0aGUgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLiBCbG9ja3MgdW50aWwgdGhlIGluZm9ybWF0aW9uIGNhbiBiZSByZXR1cm5lZAogKiBvciBpdCBpcyBkZXRlcm1pbmVkIHRoYXQgdGhlIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUuCiAqCiAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogKi8KICBEYXRlVGltZSBsYXN0QWNjZXNzZWRTeW5jKCk7CgogIC8qKgogICAqIE1vZGlmaWVzIHRoZSB0aW1lIHRoZSBmaWxlIHdhcyBsYXN0IGFjY2Vzc2VkLgogICAqCiAgICogUmV0dXJucyBhIFtGdXR1cmVdIHRoYXQgY29tcGxldGVzIG9uY2UgdGhlIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSB0aW1lIGNhbm5vdCBiZSBzZXQuCiAgICovCiAgRnV0dXJlIHNldExhc3RBY2Nlc3NlZChEYXRlVGltZSB0aW1lKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBtb2RpZmllcyB0aGUgdGltZSB0aGUgZmlsZSB3YXMgbGFzdCBhY2Nlc3NlZC4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgdGltZSBjYW5ub3QgYmUgc2V0LgogICAqLwogIHZvaWQgc2V0TGFzdEFjY2Vzc2VkU3luYyhEYXRlVGltZSB0aW1lKTsKCi8qKgogKiBHZXQgdGhlIGxhc3QtbW9kaWZpZWQgdGltZSBvZiB0aGUgZmlsZS4KICoKICogUmV0dXJucyBhIGBGdXR1cmU8RGF0ZVRpbWU+YCB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoZSBkYXRlIGFuZCB0aW1lIHdoZW4gdGhlCiAqIGZpbGUgd2FzIGxhc3QgbW9kaWZpZWQsIGlmIHRoZSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUuCiAqCiAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogKi8KICBGdXR1cmU8RGF0ZVRpbWU+IGxhc3RNb2RpZmllZCgpOwoKLyoqCiAqIEdldCB0aGUgbGFzdC1tb2RpZmllZCB0aW1lIG9mIHRoZSBmaWxlLgogKgogKiBSZXR1cm5zIHRoZSBkYXRlIGFuZCB0aW1lIHdoZW4gdGhlIGZpbGUgd2FzIGxhc3QgbW9kaWZpZWQsCiAqIGlmIHRoZSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUuIEJsb2NrcyB1bnRpbCB0aGUgaW5mb3JtYXRpb24gY2FuIGJlIHJldHVybmVkCiAqIG9yIGl0IGlzIGRldGVybWluZWQgdGhhdCB0aGUgaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZS4KICoKICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAqLwogIERhdGVUaW1lIGxhc3RNb2RpZmllZFN5bmMoKTsKCiAgLyoqCiAgICogTW9kaWZpZXMgdGhlIHRpbWUgdGhlIGZpbGUgd2FzIGxhc3QgbW9kaWZpZWQuCiAgICoKICAgKiBSZXR1cm5zIGEgW0Z1dHVyZV0gdGhhdCBjb21wbGV0ZXMgb25jZSB0aGUgb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQuCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIHRpbWUgY2Fubm90IGJlIHNldC4KICAgKi8KICBGdXR1cmUgc2V0TGFzdE1vZGlmaWVkKERhdGVUaW1lIHRpbWUpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IG1vZGlmaWVzIHRoZSB0aW1lIHRoZSBmaWxlIHdhcyBsYXN0IG1vZGlmaWVkLgogICAqCiAgICogSWYgdGhlIGF0dHJpYnV0ZXMgY2Fubm90IGJlIHNldCwgdGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dLgogICAqLwogIHZvaWQgc2V0TGFzdE1vZGlmaWVkU3luYyhEYXRlVGltZSB0aW1lKTsKCiAgLyoqCiAgICogT3BlbiB0aGUgZmlsZSBmb3IgcmFuZG9tIGFjY2VzcyBvcGVyYXRpb25zLiBSZXR1cm5zIGEKICAgKiBgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+YCB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoZSBvcGVuZWQKICAgKiByYW5kb20gYWNjZXNzIGZpbGUuIFtSYW5kb21BY2Nlc3NGaWxlXXMgbXVzdCBiZSBjbG9zZWQgdXNpbmcgdGhlCiAgICogW1JhbmRvbUFjY2Vzc0ZpbGUuY2xvc2VdIG1ldGhvZC4KICAgKgogICAqIEZpbGVzIGNhbiBiZSBvcGVuZWQgaW4gdGhyZWUgbW9kZXM6CiAgICoKICAgKiBbRmlsZU1vZGUucmVhZF06IG9wZW4gdGhlIGZpbGUgZm9yIHJlYWRpbmcuCiAgICoKICAgKiBbRmlsZU1vZGUud3JpdGVdOiBvcGVuIHRoZSBmaWxlIGZvciBib3RoIHJlYWRpbmcgYW5kIHdyaXRpbmcgYW5kCiAgICogdHJ1bmNhdGUgdGhlIGZpbGUgdG8gbGVuZ3RoIHplcm8uIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IHRoZQogICAqIGZpbGUgaXMgY3JlYXRlZC4KICAgKgogICAqIFtGaWxlTW9kZS5hcHBlbmRdOiBzYW1lIGFzIFtGaWxlTW9kZS53cml0ZV0gZXhjZXB0IHRoYXQgdGhlIGZpbGUgaXMKICAgKiBub3QgdHJ1bmNhdGVkLgogICAqLwogIEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPiBvcGVuKHtGaWxlTW9kZSBtb2RlOiBGaWxlTW9kZS5yZWFkfSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgb3BlbiB0aGUgZmlsZSBmb3IgcmFuZG9tIGFjY2VzcyBvcGVyYXRpb25zLiBUaGUKICAgKiByZXN1bHQgaXMgYSBbUmFuZG9tQWNjZXNzRmlsZV0gb24gd2hpY2ggcmFuZG9tIGFjY2VzcyBvcGVyYXRpb25zCiAgICogY2FuIGJlIHBlcmZvcm1lZC4gT3BlbmVkIFtSYW5kb21BY2Nlc3NGaWxlXXMgbXVzdCBiZSBjbG9zZWQgdXNpbmcKICAgKiB0aGUgW1JhbmRvbUFjY2Vzc0ZpbGUuY2xvc2VdIG1ldGhvZC4KICAgKgogICAqIFNlZSBbb3Blbl0gZm9yIGluZm9ybWF0aW9uIG9uIHRoZSBbbW9kZV0gYXJndW1lbnQuCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICAgKi8KICBSYW5kb21BY2Nlc3NGaWxlIG9wZW5TeW5jKHtGaWxlTW9kZSBtb2RlOiBGaWxlTW9kZS5yZWFkfSk7CgogIC8qKgogICAqIENyZWF0ZSBhIG5ldyBpbmRlcGVuZGVudCBbU3RyZWFtXSBmb3IgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZS4KICAgKgogICAqIElmIFtzdGFydF0gaXMgcHJlc2VudCwgdGhlIGZpbGUgd2lsbCBiZSByZWFkIGZyb20gYnl0ZS1vZmZzZXQgW3N0YXJ0XS4KICAgKiBPdGhlcndpc2UgZnJvbSB0aGUgYmVnaW5uaW5nIChpbmRleCAwKS4KICAgKgogICAqIElmIFtlbmRdIGlzIHByZXNlbnQsIG9ubHkgdXAgdG8gYnl0ZS1pbmRleCBbZW5kXSB3aWxsIGJlIHJlYWQuIE90aGVyd2lzZSwKICAgKiB1bnRpbCBlbmQgb2YgZmlsZS4KICAgKgogICAqIEluIG9yZGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHN5c3RlbSByZXNvdXJjZXMgYXJlIGZyZWVkLCB0aGUgc3RyZWFtCiAgICogbXVzdCBiZSByZWFkIHRvIGNvbXBsZXRpb24gb3IgdGhlIHN1YnNjcmlwdGlvbiBvbiB0aGUgc3RyZWFtIG11c3QKICAgKiBiZSBjYW5jZWxsZWQuCiAgICovCiAgU3RyZWFtPExpc3Q8aW50Pj4gb3BlblJlYWQoW2ludCBzdGFydCwgaW50IGVuZF0pOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IGluZGVwZW5kZW50IFtJT1NpbmtdIGZvciB0aGUgZmlsZS4gVGhlCiAgICogW0lPU2lua10gbXVzdCBiZSBjbG9zZWQgd2hlbiBubyBsb25nZXIgdXNlZCwgdG8gZnJlZQogICAqIHN5c3RlbSByZXNvdXJjZXMuCiAgICoKICAgKiBBbiBbSU9TaW5rXSBmb3IgYSBmaWxlIGNhbiBiZSBvcGVuZWQgaW4gdHdvIG1vZGVzOgogICAqCiAgICogKiBbRmlsZU1vZGUud3JpdGVdOiB0cnVuY2F0ZXMgdGhlIGZpbGUgdG8gbGVuZ3RoIHplcm8uCiAgICogKiBbRmlsZU1vZGUuYXBwZW5kXTogc2V0cyB0aGUgaW5pdGlhbCB3cml0ZSBwb3NpdGlvbiB0byB0aGUgZW5kCiAgICogICBvZiB0aGUgZmlsZS4KICAgKgogICAqICBXaGVuIHdyaXRpbmcgc3RyaW5ncyB0aHJvdWdoIHRoZSByZXR1cm5lZCBbSU9TaW5rXSB0aGUgZW5jb2RpbmcKICAgKiAgc3BlY2lmaWVkIHVzaW5nIFtlbmNvZGluZ10gd2lsbCBiZSB1c2VkLiBUaGUgcmV0dXJuZWQgW0lPU2lua10KICAgKiAgaGFzIGFuIGBlbmNvZGluZ2AgcHJvcGVydHkgd2hpY2ggY2FuIGJlIGNoYW5nZWQgYWZ0ZXIgdGhlCiAgICogIFtJT1NpbmtdIGhhcyBiZWVuIGNyZWF0ZWQuCiAgICovCiAgSU9TaW5rIG9wZW5Xcml0ZSh7RmlsZU1vZGUgbW9kZTogRmlsZU1vZGUud3JpdGUsIEVuY29kaW5nIGVuY29kaW5nOiB1dGY4fSk7CgogIC8qKgogICAqIFJlYWQgdGhlIGVudGlyZSBmaWxlIGNvbnRlbnRzIGFzIGEgbGlzdCBvZiBieXRlcy4gUmV0dXJucyBhCiAgICogYEZ1dHVyZTxVaW50OExpc3Q+YCB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoZSBsaXN0IG9mIGJ5dGVzIHRoYXQKICAgKiBpcyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUuCiAgICovCiAgRnV0dXJlPFVpbnQ4TGlzdD4gcmVhZEFzQnl0ZXMoKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSByZWFkIHRoZSBlbnRpcmUgZmlsZSBjb250ZW50cyBhcyBhIGxpc3Qgb2YgYnl0ZXMuCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICAgKi8KICBVaW50OExpc3QgcmVhZEFzQnl0ZXNTeW5jKCk7CgogIC8qKgogICAqIFJlYWQgdGhlIGVudGlyZSBmaWxlIGNvbnRlbnRzIGFzIGEgc3RyaW5nIHVzaW5nIHRoZSBnaXZlbgogICAqIFtFbmNvZGluZ10uCiAgICoKICAgKiBSZXR1cm5zIGEgYEZ1dHVyZTxTdHJpbmc+YCB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoZSBzdHJpbmcgb25jZQogICAqIHRoZSBmaWxlIGNvbnRlbnRzIGhhcyBiZWVuIHJlYWQuCiAgICovCiAgRnV0dXJlPFN0cmluZz4gcmVhZEFzU3RyaW5nKHtFbmNvZGluZyBlbmNvZGluZzogdXRmOH0pOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IHJlYWQgdGhlIGVudGlyZSBmaWxlIGNvbnRlbnRzIGFzIGEgc3RyaW5nIHVzaW5nIHRoZQogICAqIGdpdmVuIFtFbmNvZGluZ10uCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICAgKi8KICBTdHJpbmcgcmVhZEFzU3RyaW5nU3luYyh7RW5jb2RpbmcgZW5jb2Rpbmc6IHV0Zjh9KTsKCiAgLyoqCiAgICogUmVhZCB0aGUgZW50aXJlIGZpbGUgY29udGVudHMgYXMgbGluZXMgb2YgdGV4dCB1c2luZyB0aGUgZ2l2ZW4KICAgKiBbRW5jb2RpbmddLgogICAqCiAgICogUmV0dXJucyBhIGBGdXR1cmU8TGlzdDxTdHJpbmc+PmAgdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGUgbGluZXMKICAgKiBvbmNlIHRoZSBmaWxlIGNvbnRlbnRzIGhhcyBiZWVuIHJlYWQuCiAgICovCiAgRnV0dXJlPExpc3Q8U3RyaW5nPj4gcmVhZEFzTGluZXMoe0VuY29kaW5nIGVuY29kaW5nOiB1dGY4fSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgcmVhZCB0aGUgZW50aXJlIGZpbGUgY29udGVudHMgYXMgbGluZXMgb2YgdGV4dAogICAqIHVzaW5nIHRoZSBnaXZlbiBbRW5jb2RpbmddLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgTGlzdDxTdHJpbmc+IHJlYWRBc0xpbmVzU3luYyh7RW5jb2RpbmcgZW5jb2Rpbmc6IHV0Zjh9KTsKCiAgLyoqCiAgICogV3JpdGUgYSBsaXN0IG9mIGJ5dGVzIHRvIGEgZmlsZS4KICAgKgogICAqIE9wZW5zIHRoZSBmaWxlLCB3cml0ZXMgdGhlIGxpc3Qgb2YgYnl0ZXMgdG8gaXQsIGFuZCBjbG9zZXMgdGhlIGZpbGUuCiAgICogUmV0dXJucyBhIGBGdXR1cmU8RmlsZT5gIHRoYXQgY29tcGxldGVzIHdpdGggdGhpcyBbRmlsZV0gb2JqZWN0IG9uY2UKICAgKiB0aGUgZW50aXJlIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkLgogICAqCiAgICogQnkgZGVmYXVsdCBbd3JpdGVBc0J5dGVzXSBjcmVhdGVzIHRoZSBmaWxlIGZvciB3cml0aW5nIGFuZCB0cnVuY2F0ZXMgdGhlCiAgICogZmlsZSBpZiBpdCBhbHJlYWR5IGV4aXN0cy4gSW4gb3JkZXIgdG8gYXBwZW5kIHRoZSBieXRlcyB0byBhbiBleGlzdGluZwogICAqIGZpbGUsIHBhc3MgW0ZpbGVNb2RlLmFwcGVuZF0gYXMgdGhlIG9wdGlvbmFsIG1vZGUgcGFyYW1ldGVyLgogICAqCiAgICogSWYgdGhlIGFyZ3VtZW50IFtmbHVzaF0gaXMgc2V0IHRvIGB0cnVlYCwgdGhlIGRhdGEgd3JpdHRlbiB3aWxsIGJlCiAgICogZmx1c2hlZCB0byB0aGUgZmlsZSBzeXN0ZW0gYmVmb3JlIHRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzLgogICAqLwogIEZ1dHVyZTxGaWxlPiB3cml0ZUFzQnl0ZXMoTGlzdDxpbnQ+IGJ5dGVzLAogICAgICB7RmlsZU1vZGUgbW9kZTogRmlsZU1vZGUud3JpdGUsIGJvb2wgZmx1c2g6IGZhbHNlfSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgd3JpdGUgYSBsaXN0IG9mIGJ5dGVzIHRvIGEgZmlsZS4KICAgKgogICAqIE9wZW5zIHRoZSBmaWxlLCB3cml0ZXMgdGhlIGxpc3Qgb2YgYnl0ZXMgdG8gaXQgYW5kIGNsb3NlcyB0aGUgZmlsZS4KICAgKgogICAqIEJ5IGRlZmF1bHQgW3dyaXRlQXNCeXRlc1N5bmNdIGNyZWF0ZXMgdGhlIGZpbGUgZm9yIHdyaXRpbmcgYW5kIHRydW5jYXRlcwogICAqIHRoZSBmaWxlIGlmIGl0IGFscmVhZHkgZXhpc3RzLiBJbiBvcmRlciB0byBhcHBlbmQgdGhlIGJ5dGVzIHRvIGFuIGV4aXN0aW5nCiAgICogZmlsZSwgcGFzcyBbRmlsZU1vZGUuYXBwZW5kXSBhcyB0aGUgb3B0aW9uYWwgbW9kZSBwYXJhbWV0ZXIuCiAgICoKICAgKiBJZiB0aGUgW2ZsdXNoXSBhcmd1bWVudCBpcyBzZXQgdG8gYHRydWVgIGRhdGEgd3JpdHRlbiB3aWxsIGJlCiAgICogZmx1c2hlZCB0byB0aGUgZmlsZSBzeXN0ZW0gYmVmb3JlIHJldHVybmluZy4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIHZvaWQgd3JpdGVBc0J5dGVzU3luYyhMaXN0PGludD4gYnl0ZXMsCiAgICAgIHtGaWxlTW9kZSBtb2RlOiBGaWxlTW9kZS53cml0ZSwgYm9vbCBmbHVzaDogZmFsc2V9KTsKCiAgLyoqCiAgICogV3JpdGUgYSBzdHJpbmcgdG8gYSBmaWxlLgogICAqCiAgICogT3BlbnMgdGhlIGZpbGUsIHdyaXRlcyB0aGUgc3RyaW5nIGluIHRoZSBnaXZlbiBlbmNvZGluZywgYW5kIGNsb3NlcyB0aGUKICAgKiBmaWxlLiBSZXR1cm5zIGEgYEZ1dHVyZTxGaWxlPmAgdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGlzIFtGaWxlXSBvYmplY3QKICAgKiBvbmNlIHRoZSBlbnRpcmUgb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQuCiAgICoKICAgKiBCeSBkZWZhdWx0IFt3cml0ZUFzU3RyaW5nXSBjcmVhdGVzIHRoZSBmaWxlIGZvciB3cml0aW5nIGFuZCB0cnVuY2F0ZXMgdGhlCiAgICogZmlsZSBpZiBpdCBhbHJlYWR5IGV4aXN0cy4gSW4gb3JkZXIgdG8gYXBwZW5kIHRoZSBieXRlcyB0byBhbiBleGlzdGluZwogICAqIGZpbGUsIHBhc3MgW0ZpbGVNb2RlLmFwcGVuZF0gYXMgdGhlIG9wdGlvbmFsIG1vZGUgcGFyYW1ldGVyLgogICAqCiAgICogSWYgdGhlIGFyZ3VtZW50IFtmbHVzaF0gaXMgc2V0IHRvIGB0cnVlYCwgdGhlIGRhdGEgd3JpdHRlbiB3aWxsIGJlCiAgICogZmx1c2hlZCB0byB0aGUgZmlsZSBzeXN0ZW0gYmVmb3JlIHRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzLgogICAqCiAgICovCiAgRnV0dXJlPEZpbGU+IHdyaXRlQXNTdHJpbmcoU3RyaW5nIGNvbnRlbnRzLAogICAgICB7RmlsZU1vZGUgbW9kZTogRmlsZU1vZGUud3JpdGUsCiAgICAgIEVuY29kaW5nIGVuY29kaW5nOiB1dGY4LAogICAgICBib29sIGZsdXNoOiBmYWxzZX0pOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IHdyaXRlIGEgc3RyaW5nIHRvIGEgZmlsZS4KICAgKgogICAqIE9wZW5zIHRoZSBmaWxlLCB3cml0ZXMgdGhlIHN0cmluZyBpbiB0aGUgZ2l2ZW4gZW5jb2RpbmcsIGFuZCBjbG9zZXMgdGhlCiAgICogZmlsZS4KICAgKgogICAqIEJ5IGRlZmF1bHQgW3dyaXRlQXNTdHJpbmdTeW5jXSBjcmVhdGVzIHRoZSBmaWxlIGZvciB3cml0aW5nIGFuZAogICAqIHRydW5jYXRlcyB0aGUgZmlsZSBpZiBpdCBhbHJlYWR5IGV4aXN0cy4gSW4gb3JkZXIgdG8gYXBwZW5kIHRoZSBieXRlcwogICAqIHRvIGFuIGV4aXN0aW5nIGZpbGUsIHBhc3MgW0ZpbGVNb2RlLmFwcGVuZF0gYXMgdGhlIG9wdGlvbmFsIG1vZGUKICAgKiBwYXJhbWV0ZXIuCiAgICoKICAgKiBJZiB0aGUgW2ZsdXNoXSBhcmd1bWVudCBpcyBzZXQgdG8gYHRydWVgIGRhdGEgd3JpdHRlbiB3aWxsIGJlCiAgICogZmx1c2hlZCB0byB0aGUgZmlsZSBzeXN0ZW0gYmVmb3JlIHJldHVybmluZy4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIHZvaWQgd3JpdGVBc1N0cmluZ1N5bmMoU3RyaW5nIGNvbnRlbnRzLAogICAgICB7RmlsZU1vZGUgbW9kZTogRmlsZU1vZGUud3JpdGUsCiAgICAgIEVuY29kaW5nIGVuY29kaW5nOiB1dGY4LAogICAgICBib29sIGZsdXNoOiBmYWxzZX0pOwoKICAvKioKICAgKiBHZXQgdGhlIHBhdGggb2YgdGhlIGZpbGUuCiAgICovCiAgU3RyaW5nIGdldCBwYXRoOwp9CgovKioKICogYFJhbmRvbUFjY2Vzc0ZpbGVgIHByb3ZpZGVzIHJhbmRvbSBhY2Nlc3MgdG8gdGhlIGRhdGEgaW4gYQogKiBmaWxlLgogKgogKiBgUmFuZG9tQWNjZXNzRmlsZWAgb2JqZWN0cyBhcmUgb2J0YWluZWQgYnkgY2FsbGluZyB0aGUKICogYG9wZW5gIG1ldGhvZCBvbiBhIFtGaWxlXSBvYmplY3QuCiAqCiAqIEEgYFJhbmRvbUFjY2Vzc0ZpbGVgIGhhdmUgYm90aCBhc3luY2hyb25vdXMgYW5kIHN5bmNocm9ub3VzCiAqIG1ldGhvZHMuIFRoZSBhc3luY2hyb25vdXMgbWV0aG9kcyBhbGwgcmV0dXJuIGEgYEZ1dHVyZWAKICogd2hlcmVhcyB0aGUgc3luY2hyb25vdXMgbWV0aG9kcyB3aWxsIHJldHVybiB0aGUgcmVzdWx0IGRpcmVjdGx5LAogKiBhbmQgYmxvY2sgdGhlIGN1cnJlbnQgaXNvbGF0ZSB1bnRpbCB0aGUgcmVzdWx0IGlzIHJlYWR5LgogKgogKiBBdCBtb3N0IG9uZSBhc3luY2hyb25vdXMgbWV0aG9kIGNhbiBiZSBwZW5kaW5nIG9uIGEgZ2l2ZW4gYFJhbmRvbUFjY2Vzc0ZpbGVgCiAqIGluc3RhbmNlIGF0IHRoZSB0aW1lLiBJZiBhbiBhc3luY2hyb25vdXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIG9uZSBpcwogKiBhbHJlYWR5IGluIHByb2dyZXNzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlzIHRocm93bi4KICoKICogSWYgYW4gYXN5bmNocm9ub3VzIG1ldGhvZCBpcyBwZW5kaW5nIGl0IGlzIGFsc28gbm90IHBvc3NpYmxlIHRvIGNhbGwgYW55CiAqIHN5bmNocm9ub3VzIG1ldGhvZHMuIFRoaXMgd2lsbCBhbHNvIHRocm93IGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dLgogKi8KYWJzdHJhY3QgY2xhc3MgUmFuZG9tQWNjZXNzRmlsZSB7CiAgLyoqCiAgICogQ2xvc2VzIHRoZSBmaWxlLiBSZXR1cm5zIGEgYEZ1dHVyZWAgdGhhdAogICAqIGNvbXBsZXRlcyB3aGVuIGl0IGhhcyBiZWVuIGNsb3NlZC4KICAgKi8KICBGdXR1cmU8dm9pZD4gY2xvc2UoKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBjbG9zZXMgdGhlIGZpbGUuCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICAgKi8KICB2b2lkIGNsb3NlU3luYygpOwoKICAvKioKICAgKiBSZWFkcyBhIGJ5dGUgZnJvbSB0aGUgZmlsZS4gUmV0dXJucyBhIGBGdXR1cmU8aW50PmAgdGhhdAogICAqIGNvbXBsZXRlcyB3aXRoIHRoZSBieXRlLCBvciB3aXRoIC0xIGlmIGVuZC1vZi1maWxlIGhhcyBiZWVuIHJlYWNoZWQuCiAgICovCiAgRnV0dXJlPGludD4gcmVhZEJ5dGUoKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSByZWFkcyBhIHNpbmdsZSBieXRlIGZyb20gdGhlIGZpbGUuIElmIGVuZC1vZi1maWxlCiAgICogaGFzIGJlZW4gcmVhY2hlZCAtMSBpcyByZXR1cm5lZC4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIGludCByZWFkQnl0ZVN5bmMoKTsKCiAgLyoqCiAgICogUmVhZHMgW2J5dGVzXSBieXRlcyBmcm9tIGEgZmlsZSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IGFzIGEgbGlzdCBvZiBieXRlcy4KICAgKi8KICBGdXR1cmU8VWludDhMaXN0PiByZWFkKGludCBieXRlcyk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgcmVhZHMgYSBtYXhpbXVtIG9mIFtieXRlc10gYnl0ZXMgZnJvbSBhIGZpbGUgYW5kCiAgICogcmV0dXJucyB0aGUgcmVzdWx0IGluIGEgbGlzdCBvZiBieXRlcy4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIFVpbnQ4TGlzdCByZWFkU3luYyhpbnQgYnl0ZXMpOwoKICAvKioKICAgKiBSZWFkcyBpbnRvIGFuIGV4aXN0aW5nIFtMaXN0PGludD5dIGZyb20gdGhlIGZpbGUuIElmIFtzdGFydF0gaXMgcHJlc2VudCwKICAgKiB0aGUgYnl0ZXMgd2lsbCBiZSBmaWxsZWQgaW50byBbYnVmZmVyXSBmcm9tIGF0IGluZGV4IFtzdGFydF0sIG90aGVyd2lzZQogICAqIGluZGV4IDAuIElmIFtlbmRdIGlzIHByZXNlbnQsIHRoZSBbZW5kXSAtIFtzdGFydF0gYnl0ZXMgd2lsbCBiZSByZWFkIGludG8KICAgKiBbYnVmZmVyXSwgb3RoZXJ3aXNlIHVwIHRvIFtidWZmZXIubGVuZ3RoXS4gSWYgW2VuZF0gPT0gW3N0YXJ0XSBub3RoaW5nCiAgICogaGFwcGVucy4KICAgKgogICAqIFJldHVybnMgYSBgRnV0dXJlPGludD5gIHRoYXQgY29tcGxldGVzIHdpdGggdGhlIG51bWJlciBvZiBieXRlcyByZWFkLgogICAqLwogIEZ1dHVyZTxpbnQ+IHJlYWRJbnRvKExpc3Q8aW50PiBidWZmZXIsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgcmVhZHMgaW50byBhbiBleGlzdGluZyBbTGlzdDxpbnQ+XSBmcm9tIHRoZSBmaWxlLiBJZiBbc3RhcnRdCiAgICogaXMgcHJlc2VudCwgdGhlIGJ5dGVzIHdpbGwgYmUgZmlsbGVkIGludG8gW2J1ZmZlcl0gZnJvbSBhdCBpbmRleCBbc3RhcnRdLAogICAqIG90aGVyd2lzZSBpbmRleCAwLiAgSWYgW2VuZF0gaXMgcHJlc2VudCwgdGhlIFtlbmRdIC0gW3N0YXJ0XSBieXRlcyB3aWxsIGJlCiAgICogcmVhZCBpbnRvIFtidWZmZXJdLCBvdGhlcndpc2UgdXAgdG8gW2J1ZmZlci5sZW5ndGhdLiBJZiBbZW5kXSA9PSBbc3RhcnRdCiAgICogbm90aGluZyBoYXBwZW5zLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgaW50IHJlYWRJbnRvU3luYyhMaXN0PGludD4gYnVmZmVyLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pOwoKICAvKioKICAgKiBXcml0ZXMgYSBzaW5nbGUgYnl0ZSB0byB0aGUgZmlsZS4gUmV0dXJucyBhCiAgICogYEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPmAgdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGlzCiAgICogUmFuZG9tQWNjZXNzRmlsZSB3aGVuIHRoZSB3cml0ZSBjb21wbGV0ZXMuCiAgICovCiAgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+IHdyaXRlQnl0ZShpbnQgdmFsdWUpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IHdyaXRlcyBhIHNpbmdsZSBieXRlIHRvIHRoZSBmaWxlLiBSZXR1cm5zIHRoZQogICAqIG51bWJlciBvZiBieXRlcyBzdWNjZXNzZnVsbHkgd3JpdHRlbi4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIGludCB3cml0ZUJ5dGVTeW5jKGludCB2YWx1ZSk7CgogIC8qKgogICAqIFdyaXRlcyBmcm9tIGEgW0xpc3Q8aW50Pl0gdG8gdGhlIGZpbGUuIEl0IHdpbGwgcmVhZCB0aGUgYnVmZmVyIGZyb20gaW5kZXgKICAgKiBbc3RhcnRdIHRvIGluZGV4IFtlbmRdLiBJZiBbc3RhcnRdIGlzIG9taXR0ZWQsIGl0J2xsIHN0YXJ0IGZyb20gaW5kZXggMC4KICAgKiBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdCB3aWxsIHdyaXRlIHRvIGVuZCBvZiBbYnVmZmVyXS4KICAgKgogICAqIFJldHVybnMgYSBgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+YCB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoaXMKICAgKiBbUmFuZG9tQWNjZXNzRmlsZV0gd2hlbiB0aGUgd3JpdGUgY29tcGxldGVzLgogICAqLwogIEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPiB3cml0ZUZyb20oTGlzdDxpbnQ+IGJ1ZmZlciwKICAgICAgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSB3cml0ZXMgZnJvbSBhIFtMaXN0PGludD5dIHRvIHRoZSBmaWxlLiBJdCB3aWxsIHJlYWQgdGhlCiAgICogYnVmZmVyIGZyb20gaW5kZXggW3N0YXJ0XSB0byBpbmRleCBbZW5kXS4gSWYgW3N0YXJ0XSBpcyBvbWl0dGVkLCBpdCdsbAogICAqIHN0YXJ0IGZyb20gaW5kZXggMC4gSWYgW2VuZF0gaXMgb21pdHRlZCwgaXQgd2lsbCB3cml0ZSB0byB0aGUgZW5kIG9mCiAgICogW2J1ZmZlcl0uCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICAgKi8KICB2b2lkIHdyaXRlRnJvbVN5bmMoTGlzdDxpbnQ+IGJ1ZmZlciwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKTsKCiAgLyoqCiAgICogV3JpdGVzIGEgc3RyaW5nIHRvIHRoZSBmaWxlIHVzaW5nIHRoZSBnaXZlbiBbRW5jb2RpbmddLiBSZXR1cm5zIGEKICAgKiBgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+YCB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoaXMKICAgKiBSYW5kb21BY2Nlc3NGaWxlIHdoZW4gdGhlIHdyaXRlIGNvbXBsZXRlcy4KICAgKi8KICBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT4gd3JpdGVTdHJpbmcoU3RyaW5nIHN0cmluZywKICAgICAge0VuY29kaW5nIGVuY29kaW5nOiB1dGY4fSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgd3JpdGVzIGEgc2luZ2xlIHN0cmluZyB0byB0aGUgZmlsZSB1c2luZyB0aGUgZ2l2ZW4KICAgKiBbRW5jb2RpbmddLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgdm9pZCB3cml0ZVN0cmluZ1N5bmMoU3RyaW5nIHN0cmluZywge0VuY29kaW5nIGVuY29kaW5nOiB1dGY4fSk7CgogIC8qKgogICAqIEdldHMgdGhlIGN1cnJlbnQgYnl0ZSBwb3NpdGlvbiBpbiB0aGUgZmlsZS4gUmV0dXJucyBhCiAgICogYEZ1dHVyZTxpbnQ+YCB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoZSBwb3NpdGlvbi4KICAgKi8KICBGdXR1cmU8aW50PiBwb3NpdGlvbigpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IGdldHMgdGhlIGN1cnJlbnQgYnl0ZSBwb3NpdGlvbiBpbiB0aGUgZmlsZS4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIGludCBwb3NpdGlvblN5bmMoKTsKCiAgLyoqCiAgICogU2V0cyB0aGUgYnl0ZSBwb3NpdGlvbiBpbiB0aGUgZmlsZS4gUmV0dXJucyBhCiAgICogYEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPmAgdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGlzCiAgICogUmFuZG9tQWNjZXNzRmlsZSB3aGVuIHRoZSBwb3NpdGlvbiBoYXMgYmVlbiBzZXQuCiAgICovCiAgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+IHNldFBvc2l0aW9uKGludCBwb3NpdGlvbik7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgc2V0cyB0aGUgYnl0ZSBwb3NpdGlvbiBpbiB0aGUgZmlsZS4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIHZvaWQgc2V0UG9zaXRpb25TeW5jKGludCBwb3NpdGlvbik7CgogIC8qKgogICAqIFRydW5jYXRlcyAob3IgZXh0ZW5kcykgdGhlIGZpbGUgdG8gW2xlbmd0aF0gYnl0ZXMuIFJldHVybnMgYQogICAqIGBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT5gIHRoYXQgY29tcGxldGVzIHdpdGggdGhpcwogICAqIFJhbmRvbUFjY2Vzc0ZpbGUgd2hlbiB0aGUgdHJ1bmNhdGlvbiBoYXMgYmVlbiBwZXJmb3JtZWQuCiAgICovCiAgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+IHRydW5jYXRlKGludCBsZW5ndGgpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IHRydW5jYXRlcyAob3IgZXh0ZW5kcykgdGhlIGZpbGUgdG8gW2xlbmd0aF0gYnl0ZXMuCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICAgKi8KICB2b2lkIHRydW5jYXRlU3luYyhpbnQgbGVuZ3RoKTsKCiAgLyoqCiAgICogR2V0cyB0aGUgbGVuZ3RoIG9mIHRoZSBmaWxlLiBSZXR1cm5zIGEgYEZ1dHVyZTxpbnQ+YCB0aGF0CiAgICogY29tcGxldGVzIHdpdGggdGhlIGxlbmd0aCBpbiBieXRlcy4KICAgKi8KICBGdXR1cmU8aW50PiBsZW5ndGgoKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBnZXRzIHRoZSBsZW5ndGggb2YgdGhlIGZpbGUuCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICAgKi8KICBpbnQgbGVuZ3RoU3luYygpOwoKICAvKioKICAgKiBGbHVzaGVzIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSB0byBkaXNrLiBSZXR1cm5zIGEKICAgKiBgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+YCB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoaXMKICAgKiBSYW5kb21BY2Nlc3NGaWxlIHdoZW4gdGhlIGZsdXNoIG9wZXJhdGlvbiBjb21wbGV0ZXMuCiAgICovCiAgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+IGZsdXNoKCk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgZmx1c2hlcyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgdG8gZGlzay4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIHZvaWQgZmx1c2hTeW5jKCk7CgogIC8qKgogICAqIExvY2tzIHRoZSBmaWxlIG9yIHBhcnQgb2YgdGhlIGZpbGUuCiAgICoKICAgKiBCeSBkZWZhdWx0IGFuIGV4Y2x1c2l2ZSBsb2NrIHdpbGwgYmUgb2J0YWluZWQsIGJ1dCB0aGF0IGNhbiBiZSBvdmVycmlkZGVuCiAgICogYnkgdGhlIFttb2RlXSBhcmd1bWVudC4KICAgKgogICAqIExvY2tzIHRoZSBieXRlIHJhbmdlIGZyb20gW3N0YXJ0XSB0byBbZW5kXSBvZiB0aGUgZmlsZSwgd2l0aCB0aGUKICAgKiBieXRlIGF0IHBvc2l0aW9uIGBlbmRgIG5vdCBpbmNsdWRlZC4gSWYgbm8gYXJndW1lbnRzIGFyZQogICAqIHNwZWNpZmllZCwgdGhlIGZ1bGwgZmlsZSBpcyBsb2NrZWQsIElmIG9ubHkgYHN0YXJ0YCBpcyBzcGVjaWZpZWQKICAgKiB0aGUgZmlsZSBpcyBsb2NrZWQgZnJvbSBieXRlIHBvc2l0aW9uIGBzdGFydGAgdG8gdGhlIGVuZCBvZiB0aGUKICAgKiBmaWxlLCBubyBtYXR0ZXIgaG93IGxhcmdlIGl0IGdyb3dzLiBJdCBpcyBwb3NzaWJsZSB0byBzcGVjaWZ5IGFuCiAgICogZXhwbGljaXQgdmFsdWUgb2YgYGVuZGAgd2hpY2ggaXMgcGFzdCB0aGUgY3VycmVudCBsZW5ndGggb2YgdGhlIGZpbGUuCiAgICoKICAgKiBUbyBvYnRhaW4gYW4gZXhjbHVzaXZlIGxvY2sgb24gYSBmaWxlIGl0IG11c3QgYmUgb3BlbmVkIGZvciB3cml0aW5nLgogICAqCiAgICogSWYgW21vZGVdIGlzIFtGaWxlTG9jay5leGNsdXNpdmVdIG9yIFtGaWxlTG9jay5zaGFyZWRdLCBhbiBlcnJvciBpcwogICAqIHNpZ25hbGVkIGlmIHRoZSBsb2NrIGNhbm5vdCBiZSBvYnRhaW5lZC4gSWYgW21vZGVdIGlzCiAgICogW0ZpbGVMb2NrLmJsb2NraW5nRXhjbHVzaXZlXSBvciBbRmlsZUxvY2suYmxvY2tpbmdTaGFyZWRdLCB0aGUKICAgKiByZXR1cm5lZCBbRnV0dXJlXSBpcyByZXNvbHZlZCBvbmx5IHdoZW4gdGhlIGxvY2sgaGFzIGJlZW4gb2J0YWluZWQuCiAgICoKICAgKiAqTk9URSogZmlsZSBsb2NraW5nIGRvZXMgaGF2ZSBzbGlnaHQgZGlmZmVyZW5jZXMgaW4gYmVoYXZpb3IgYWNyb3NzCiAgICogcGxhdGZvcm1zOgogICAqCiAgICogT24gTGludXggYW5kIE9TIFggdGhpcyB1c2VzIGFkdmlzb3J5IGxvY2tzLCB3aGljaCBoYXZlIHRoZQogICAqIHN1cnByaXNpbmcgc2VtYW50aWNzIHRoYXQgYWxsIGxvY2tzIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIGZpbGUKICAgKiBhcmUgcmVtb3ZlZCB3aGVuICphbnkqIGZpbGUgZGVzY3JpcHRvciBmb3IgdGhhdCBmaWxlIGlzIGNsb3NlZCBieQogICAqIHRoZSBwcm9jZXNzLiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhY3R1YWxseSBsb2NrIHRoZSBmaWxlIGZvcgogICAqIGFjY2Vzcy4gQWxzbyBub3RlIHRoYXQgYWR2aXNvcnkgbG9ja3MgYXJlIG9uIGEgcHJvY2VzcwogICAqIGxldmVsLiBUaGlzIG1lYW5zIHRoYXQgc2V2ZXJhbCBpc29sYXRlcyBpbiB0aGUgc2FtZSBwcm9jZXNzIGNhbgogICAqIG9idGFpbiBhbiBleGNsdXNpdmUgbG9jayBvbiB0aGUgc2FtZSBmaWxlLgogICAqCiAgICogT24gV2luZG93cyB0aGUgcmVnaW9ucyB1c2VkIGZvciBsb2NrIGFuZCB1bmxvY2sgbmVlZHMgdG8gbWF0Y2guIElmIHRoYXQKICAgKiBpcyBub3QgdGhlIGNhc2UgdW5sb2NraW5nIHdpbGwgcmVzdWx0IGluIHRoZSBPUyBlcnJvciAiVGhlIHNlZ21lbnQgaXMKICAgKiBhbHJlYWR5IHVubG9ja2VkIi4KICAgKi8KICBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT4gbG9jaygKICAgICAgW0ZpbGVMb2NrIG1vZGUgPSBGaWxlTG9jay5leGNsdXNpdmUsIGludCBzdGFydCA9IDAsIGludCBlbmQgPSAtMV0pOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IGxvY2tzIHRoZSBmaWxlIG9yIHBhcnQgb2YgdGhlIGZpbGUuCiAgICoKICAgKiBCeSBkZWZhdWx0IGFuIGV4Y2x1c2l2ZSBsb2NrIHdpbGwgYmUgb2J0YWluZWQsIGJ1dCB0aGF0IGNhbiBiZSBvdmVycmlkZGVuCiAgICogYnkgdGhlIFttb2RlXSBhcmd1bWVudC4KICAgKgogICAqIExvY2tzIHRoZSBieXRlIHJhbmdlIGZyb20gW3N0YXJ0XSB0byBbZW5kXSBvZiB0aGUgZmlsZSAsd2l0aCB0aGUKICAgKiBieXRlIGF0IHBvc2l0aW9uIGBlbmRgIG5vdCBpbmNsdWRlZC4gSWYgbm8gYXJndW1lbnRzIGFyZQogICAqIHNwZWNpZmllZCwgdGhlIGZ1bGwgZmlsZSBpcyBsb2NrZWQsIElmIG9ubHkgYHN0YXJ0YCBpcyBzcGVjaWZpZWQKICAgKiB0aGUgZmlsZSBpcyBsb2NrZWQgZnJvbSBieXRlIHBvc2l0aW9uIGBzdGFydGAgdG8gdGhlIGVuZCBvZiB0aGUKICAgKiBmaWxlLCBubyBtYXR0ZXIgaG93IGxhcmdlIGl0IGdyb3dzLiBJdCBpcyBwb3NzaWJsZSB0byBzcGVjaWZ5IGFuCiAgICogZXhwbGljaXQgdmFsdWUgb2YgYGVuZGAgd2hpY2ggaXMgcGFzdCB0aGUgY3VycmVudCBsZW5ndGggb2YgdGhlIGZpbGUuCiAgICoKICAgKiBUbyBvYnRhaW4gYW4gZXhjbHVzaXZlIGxvY2sgb24gYSBmaWxlIGl0IG11c3QgYmUgb3BlbmVkIGZvciB3cml0aW5nLgogICAqCiAgICogSWYgW21vZGVdIGlzIFtGaWxlTG9jay5leGNsdXNpdmVdIG9yIFtGaWxlTG9jay5zaGFyZWRdLCBhbiBleGNlcHRpb24gaXMKICAgKiB0aHJvd24gaWYgdGhlIGxvY2sgY2Fubm90IGJlIG9idGFpbmVkLiBJZiBbbW9kZV0gaXMKICAgKiBbRmlsZUxvY2suYmxvY2tpbmdFeGNsdXNpdmVdIG9yIFtGaWxlTG9jay5ibG9ja2luZ1NoYXJlZF0sIHRoZQogICAqIGNhbGwgcmV0dXJucyBvbmx5IGFmdGVyIHRoZSBsb2NrIGhhcyBiZWVuIG9idGFpbmVkLgogICAqCiAgICogKk5PVEUqIGZpbGUgbG9ja2luZyBkb2VzIGhhdmUgc2xpZ2h0IGRpZmZlcmVuY2VzIGluIGJlaGF2aW9yIGFjcm9zcwogICAqIHBsYXRmb3JtczoKICAgKgogICAqIE9uIExpbnV4IGFuZCBPUyBYIHRoaXMgdXNlcyBhZHZpc29yeSBsb2Nrcywgd2hpY2ggaGF2ZSB0aGUKICAgKiBzdXJwcmlzaW5nIHNlbWFudGljcyB0aGF0IGFsbCBsb2NrcyBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBmaWxlCiAgICogYXJlIHJlbW92ZWQgd2hlbiAqYW55KiBmaWxlIGRlc2NyaXB0b3IgZm9yIHRoYXQgZmlsZSBpcyBjbG9zZWQgYnkKICAgKiB0aGUgcHJvY2Vzcy4gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgYWN0dWFsbHkgbG9jayB0aGUgZmlsZSBmb3IKICAgKiBhY2Nlc3MuIEFsc28gbm90ZSB0aGF0IGFkdmlzb3J5IGxvY2tzIGFyZSBvbiBhIHByb2Nlc3MKICAgKiBsZXZlbC4gVGhpcyBtZWFucyB0aGF0IHNldmVyYWwgaXNvbGF0ZXMgaW4gdGhlIHNhbWUgcHJvY2VzcyBjYW4KICAgKiBvYnRhaW4gYW4gZXhjbHVzaXZlIGxvY2sgb24gdGhlIHNhbWUgZmlsZS4KICAgKgogICAqIE9uIFdpbmRvd3MgdGhlIHJlZ2lvbnMgdXNlZCBmb3IgbG9jayBhbmQgdW5sb2NrIG5lZWRzIHRvIG1hdGNoLiBJZiB0aGF0CiAgICogaXMgbm90IHRoZSBjYXNlIHVubG9ja2luZyB3aWxsIHJlc3VsdCBpbiB0aGUgT1MgZXJyb3IgIlRoZSBzZWdtZW50IGlzCiAgICogYWxyZWFkeSB1bmxvY2tlZCIuCiAgICoKICAgKi8KICB2b2lkIGxvY2tTeW5jKAogICAgICBbRmlsZUxvY2sgbW9kZSA9IEZpbGVMb2NrLmV4Y2x1c2l2ZSwgaW50IHN0YXJ0ID0gMCwgaW50IGVuZCA9IC0xXSk7CgogIC8qKgogICAqIFVubG9ja3MgdGhlIGZpbGUgb3IgcGFydCBvZiB0aGUgZmlsZS4KICAgKgogICAqIFVubG9ja3MgdGhlIGJ5dGUgcmFuZ2UgZnJvbSBbc3RhcnRdIHRvIFtlbmRdIG9mIHRoZSBmaWxlLCB3aXRoCiAgICogdGhlIGJ5dGUgYXQgcG9zaXRpb24gYGVuZGAgbm90IGluY2x1ZGVkLiBJZiBubyBhcmd1bWVudHMgYXJlCiAgICogc3BlY2lmaWVkLCB0aGUgZnVsbCBmaWxlIGlzIHVubG9ja2VkLCBJZiBvbmx5IGBzdGFydGAgaXMKICAgKiBzcGVjaWZpZWQgdGhlIGZpbGUgaXMgdW5sb2NrZWQgZnJvbSBieXRlIHBvc2l0aW9uIGBzdGFydGAgdG8gdGhlCiAgICogZW5kIG9mIHRoZSBmaWxlLgogICAqCiAgICogKk5PVEUqIGZpbGUgbG9ja2luZyBkb2VzIGhhdmUgc2xpZ2h0IGRpZmZlcmVuY2VzIGluIGJlaGF2aW9yIGFjcm9zcwogICAqIHBsYXRmb3JtczoKICAgKgogICAqIFNlZSBbbG9ja10gZm9yIG1vcmUgZGV0YWlscy4KICAgKi8KICBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT4gdW5sb2NrKFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kID0gLTFdKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSB1bmxvY2tzIHRoZSBmaWxlIG9yIHBhcnQgb2YgdGhlIGZpbGUuCiAgICoKICAgKiBVbmxvY2tzIHRoZSBieXRlIHJhbmdlIGZyb20gW3N0YXJ0XSB0byBbZW5kXSBvZiB0aGUgZmlsZSwgd2l0aAogICAqIHRoZSBieXRlIGF0IHBvc2l0aW9uIGBlbmRgIG5vdCBpbmNsdWRlZC4gSWYgbm8gYXJndW1lbnRzIGFyZQogICAqIHNwZWNpZmllZCwgdGhlIGZ1bGwgZmlsZSBpcyB1bmxvY2tlZCwgSWYgb25seSBgc3RhcnRgIGlzCiAgICogc3BlY2lmaWVkIHRoZSBmaWxlIGlzIHVubG9ja2VkIGZyb20gYnl0ZSBwb3NpdGlvbiBgc3RhcnRgIHRvIHRoZQogICAqIGVuZCBvZiB0aGUgZmlsZS4KICAgKgogICAqICpOT1RFKiBmaWxlIGxvY2tpbmcgZG9lcyBoYXZlIHNsaWdodCBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvciBhY3Jvc3MKICAgKiBwbGF0Zm9ybXM6CiAgICoKICAgKiBTZWUgW2xvY2tTeW5jXSBmb3IgbW9yZSBkZXRhaWxzLgogICAqLwogIHZvaWQgdW5sb2NrU3luYyhbaW50IHN0YXJ0ID0gMCwgaW50IGVuZCA9IC0xXSk7CgogIC8qKgogICAqIFJldHVybnMgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgZm9yIHRoaXMgUmFuZG9tQWNjZXNzRmlsZSBpbnN0YW5jZS4KICAgKi8KICBTdHJpbmcgdG9TdHJpbmcoKTsKCiAgLyoqCiAgICogR2V0cyB0aGUgcGF0aCBvZiB0aGUgZmlsZSB1bmRlcmx5aW5nIHRoaXMgUmFuZG9tQWNjZXNzRmlsZS4KICAgKi8KICBTdHJpbmcgZ2V0IHBhdGg7Cn0KCi8qKgogKiBFeGNlcHRpb24gdGhyb3duIHdoZW4gYSBmaWxlIG9wZXJhdGlvbiBmYWlscy4KICovCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgRmlsZVN5c3RlbUV4Y2VwdGlvbiBpbXBsZW1lbnRzIElPRXhjZXB0aW9uIHsKICAvKioKICAgKiBNZXNzYWdlIGRlc2NyaWJpbmcgdGhlIGVycm9yLiBUaGlzIGRvZXMgbm90IGluY2x1ZGUgYW55IGRldGFpbGVkCiAgICogaW5mb3JtYXRpb24gZm9ybSB0aGUgdW5kZXJseWluZyBPUyBlcnJvci4gQ2hlY2sgW29zRXJyb3JdIGZvcgogICAqIHRoYXQgaW5mb3JtYXRpb24uCiAgICovCiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CgogIC8qKgogICAqIFRoZSBmaWxlIHN5c3RlbSBwYXRoIG9uIHdoaWNoIHRoZSBlcnJvciBvY2N1cnJlZC4gQ2FuIGJlIGBudWxsYAogICAqIGlmIHRoZSBleGNlcHRpb24gZG9lcyBub3QgcmVsYXRlIGRpcmVjdGx5IHRvIGEgZmlsZSBzeXN0ZW0gcGF0aC4KICAgKi8KICBmaW5hbCBTdHJpbmcgcGF0aDsKCiAgLyoqCiAgICogVGhlIHVuZGVybHlpbmcgT1MgZXJyb3IuIENhbiBiZSBgbnVsbGAgaWYgdGhlIGV4Y2VwdGlvbiBpcyBub3QKICAgKiByYWlzZWQgZHVlIHRvIGFuIE9TIGVycm9yLgogICAqLwogIGZpbmFsIE9TRXJyb3Igb3NFcnJvcjsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uIHdpdGggYW4gb3B0aW9uYWwgZXJyb3IgbWVzc2FnZQogICAqIFttZXNzYWdlXSwgb3B0aW9uYWwgZmlsZSBzeXN0ZW0gcGF0aCBbcGF0aF0gYW5kIG9wdGlvbmFsIE9TIGVycm9yCiAgICogW29zRXJyb3JdLgogICAq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IGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pbzsKCi8vIFJlYWQgdGhlIGZpbGUgaW4gYmxvY2tzIG9mIHNpemUgNjRrLgpjb25zdCBpbnQgX2Jsb2NrU2l6ZSA9IDY0ICogMTAyNDsKCmNsYXNzIF9GaWxlU3RyZWFtIGV4dGVuZHMgU3RyZWFtPExpc3Q8aW50Pj4gewogIC8vIFN0cmVhbSBjb250cm9sbGVyLgogIFN0cmVhbUNvbnRyb2xsZXI8VWludDhMaXN0PiBfY29udHJvbGxlcjsKCiAgLy8gSW5mb3JtYXRpb24gYWJvdXQgdGhlIHVuZGVybHlpbmcgZmlsZS4KICBTdHJpbmcgX3BhdGg7CiAgUmFuZG9tQWNjZXNzRmlsZSBfb3BlbmVkRmlsZTsKICBpbnQgX3Bvc2l0aW9uOwogIGludCBfZW5kOwogIGZpbmFsIENvbXBsZXRlciBfY2xvc2VDb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyKCk7CgogIC8vIEhhcyB0aGUgc3RyZWFtIGJlZW4gcGF1c2VkIG9yIHVuc3Vic2NyaWJlZD8KICBib29sIF91bnN1YnNjcmliZWQgPSBmYWxzZTsKCiAgLy8gSXMgdGhlcmUgYSByZWFkIGN1cnJlbnRseSBpbiBwcm9ncmVzcz8KICBib29sIF9yZWFkSW5Qcm9ncmVzcyA9IHRydWU7CiAgYm9vbCBfY2xvc2VkID0gZmFsc2U7CgogIGJvb2wgX2F0RW5kID0gZmFsc2U7CgogIF9GaWxlU3RyZWFtKHRoaXMuX3BhdGgsIHRoaXMuX3Bvc2l0aW9uLCB0aGlzLl9lbmQpIHsKICAgIF9wb3NpdGlvbiA/Pz0gMDsKICB9CgogIF9GaWxlU3RyZWFtLmZvclN0ZGluKCkgOiBfcG9zaXRpb24gPSAwOwoKICBTdHJlYW1TdWJzY3JpcHRpb248VWludDhMaXN0PiBsaXN0ZW4odm9pZCBvbkRhdGEoVWludDhMaXN0IGV2ZW50KSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIF9zZXR1cENvbnRyb2xsZXIoKTsKICAgIHJldHVybiBfY29udHJvbGxlci5zdHJlYW0ubGlzdGVuKG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLCBvbkRvbmU6IG9uRG9uZSwgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgfQoKICB2b2lkIF9zZXR1cENvbnRyb2xsZXIoKSB7CiAgICBfY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPFVpbnQ4TGlzdD4oCiAgICAgICAgc3luYzogdHJ1ZSwKICAgICAgICBvbkxpc3RlbjogX3N0YXJ0LAogICAgICAgIG9uUmVzdW1lOiBfcmVhZEJsb2NrLAogICAgICAgIG9uQ2FuY2VsOiAoKSB7CiAgICAgICAgICBfdW5zdWJzY3JpYmVkID0gdHJ1ZTsKICAgICAgICAgIHJldHVybiBfY2xvc2VGaWxlKCk7CiAgICAgICAgfSk7CiAgfQoKICBGdXR1cmUgX2Nsb3NlRmlsZSgpIHsKICAgIGlmIChfcmVhZEluUHJvZ3Jlc3MgfHwgX2Nsb3NlZCkgewogICAgICByZXR1cm4gX2Nsb3NlQ29tcGxldGVyLmZ1dHVyZTsKICAgIH0KICAgIF9jbG9zZWQgPSB0cnVlOwoKICAgIHZvaWQgZG9uZSgpIHsKICAgICAgX2Nsb3NlQ29tcGxldGVyLmNvbXBsZXRlKCk7CiAgICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICB9CgogICAgX29wZW5lZEZpbGUuY2xvc2UoKS5jYXRjaEVycm9yKF9jb250cm9sbGVyLmFkZEVycm9yKS53aGVuQ29tcGxldGUoZG9uZSk7CiAgICByZXR1cm4gX2Nsb3NlQ29tcGxldGVyLmZ1dHVyZTsKICB9CgogIHZvaWQgX3JlYWRCbG9jaygpIHsKICAgIC8vIERvbid0IHN0YXJ0IGEgbmV3IHJlYWQgaWYgb25lIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MuCiAgICBpZiAoX3JlYWRJblByb2dyZXNzKSByZXR1cm47CiAgICBpZiAoX2F0RW5kKSB7CiAgICAgIF9jbG9zZUZpbGUoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgX3JlYWRJblByb2dyZXNzID0gdHJ1ZTsKICAgIGludCByZWFkQnl0ZXMgPSBfYmxvY2tTaXplOwogICAgaWYgKF9lbmQgIT0gbnVsbCkgewogICAgICByZWFkQnl0ZXMgPSBtaW4ocmVhZEJ5dGVzLCBfZW5kIC0gX3Bvc2l0aW9uKTsKICAgICAgaWYgKHJlYWRCeXRlcyA8IDApIHsKICAgICAgICBfcmVhZEluUHJvZ3Jlc3MgPSBmYWxzZTsKICAgICAgICBpZiAoIV91bnN1YnNjcmliZWQpIHsKICAgICAgICAgIF9jb250cm9sbGVyLmFkZEVycm9yKG5ldyBSYW5nZUVycm9yKCJCYWQgZW5kIHBvc2l0aW9uOiAkX2VuZCIpKTsKICAgICAgICAgIF9jbG9zZUZpbGUoKTsKICAgICAgICAgIF91bnN1YnNjcmliZWQgPSB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICAgIF9vcGVuZWRGaWxlLnJlYWQocmVhZEJ5dGVzKS50aGVuKChibG9jaykgewogICAgICBfcmVhZEluUHJvZ3Jlc3MgPSBmYWxzZTsKICAgICAgaWYgKF91bnN1YnNjcmliZWQpIHsKICAgICAgICBfY2xvc2VGaWxlKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9wb3NpdGlvbiArPSBibG9jay5sZW5ndGg7CiAgICAgIGlmIChibG9jay5sZW5ndGggPCByZWFkQnl0ZXMgfHwgKF9lbmQgIT0gbnVsbCAmJiBfcG9zaXRpb24gPT0gX2VuZCkpIHsKICAgICAgICBfYXRFbmQgPSB0cnVlOwogICAgICB9CiAgICAgIGlmICghX2F0RW5kICYmICFfY29udHJvbGxlci5pc1BhdXNlZCkgewogICAgICAgIF9yZWFkQmxvY2soKTsKICAgICAgfQogICAgICBfY29udHJvbGxlci5hZGQoYmxvY2spOwogICAgICBpZiAoX2F0RW5kKSB7CiAgICAgICAgX2Nsb3NlRmlsZSgpOwogICAgICB9CiAgICB9KS5jYXRjaEVycm9yKChlLCBzKSB7CiAgICAgIGlmICghX3Vuc3Vic2NyaWJlZCkgewogICAgICAgIF9jb250cm9sbGVyLmFkZEVycm9yKGUsIHMpOwogICAgICAgIF9jbG9zZUZpbGUoKTsKICAgICAgICBfdW5zdWJzY3JpYmVkID0gdHJ1ZTsKICAgICAgfQogICAgfSk7CiAgfQoKICB2b2lkIF9zdGFydCgpIHsKICAgIGlmIChfcG9zaXRpb24gPCAwKSB7CiAgICAgIF9jb250cm9sbGVyLmFkZEVycm9yKG5ldyBSYW5nZUVycm9yKCJCYWQgc3RhcnQgcG9zaXRpb246ICRfcG9zaXRpb24iKSk7CiAgICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICAgIF9jbG9zZUNvbXBsZXRlci5jb21wbGV0ZSgpOwogICAgICByZXR1cm47CiAgICB9CgogICAgdm9pZCBvblJlYWR5KFJhbmRvbUFjY2Vzc0ZpbGUgZmlsZSkgewogICAgICBfb3BlbmVkRmlsZSA9IGZpbGU7CiAgICAgIF9yZWFkSW5Qcm9ncmVzcyA9IGZhbHNlOwogICAgICBfcmVhZEJsb2NrKCk7CiAgICB9CgogICAgdm9pZCBvbk9wZW5GaWxlKFJhbmRvbUFjY2Vzc0ZpbGUgZmlsZSkgewogICAgICBpZiAoX3Bvc2l0aW9uID4gMCkgewogICAgICAgIGZpbGUuc2V0UG9zaXRpb24oX3Bvc2l0aW9uKS50aGVuKG9uUmVhZHksIG9uRXJyb3I6IChlLCBzKSB7CiAgICAgICAgICBfY29udHJvbGxlci5hZGRFcnJvcihlLCBzKTsKICAgICAgICAgIF9yZWFkSW5Qcm9ncmVzcyA9IGZhbHNlOwogICAgICAgICAgX2Nsb3NlRmlsZSgpOwogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIG9uUmVhZHkoZmlsZSk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIG9wZW5GYWlsZWQoZXJyb3IsIHN0YWNrVHJhY2UpIHsKICAgICAgX2NvbnRyb2xsZXIuYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgICBfY2xvc2VDb21wbGV0ZXIuY29tcGxldGUoKTsKICAgIH0KCiAgICBpZiAoX3BhdGggIT0gbnVsbCkgewogICAgICBuZXcgRmlsZShfcGF0aCkKICAgICAgICAgIC5vcGVuKG1vZGU6IEZpbGVNb2RlLnJlYWQpCiAgICAgICAgICAudGhlbihvbk9wZW5GaWxlLCBvbkVycm9yOiBvcGVuRmFpbGVkKTsKICAgIH0gZWxzZSB7CiAgICAgIHRyeSB7CiAgICAgICAgb25PcGVuRmlsZShfRmlsZS5fb3BlblN0ZGlvU3luYygwKSk7CiAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICBvcGVuRmFpbGVkKGUsIHMpOwogICAgICB9CiAgICB9CiAgfQp9CgpjbGFzcyBfRmlsZVN0cmVhbUNvbnN1bWVyIGV4dGVuZHMgU3RyZWFtQ29uc3VtZXI8TGlzdDxpbnQ+PiB7CiAgRmlsZSBfZmlsZTsKICBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT4gX29wZW5GdXR1cmU7CgogIF9GaWxlU3RyZWFtQ29uc3VtZXIodGhpcy5fZmlsZSwgRmlsZU1vZGUgbW9kZSkgewogICAgX29wZW5GdXR1cmUgPSBfZmlsZS5vcGVuKG1vZGU6IG1vZGUpOwogIH0KCiAgX0ZpbGVTdHJlYW1Db25zdW1lci5mcm9tU3RkaW8oaW50IGZkKSB7CiAgICBfb3BlbkZ1dHVyZSA9IG5ldyBGdXR1cmUudmFsdWUoX0ZpbGUuX29wZW5TdGRpb1N5bmMoZmQpKTsKICB9CgogIEZ1dHVyZTxGaWxlPiBhZGRTdHJlYW0oU3RyZWFtPExpc3Q8aW50Pj4gc3RyZWFtKSB7CiAgICBDb21wbGV0ZXI8RmlsZT4gY29tcGxldGVyID0gbmV3IENvbXBsZXRlcjxGaWxlPi5zeW5jKCk7CiAgICBfb3BlbkZ1dHVyZS50aGVuKChvcGVuZWRGaWxlKSB7CiAgICAgIHZhciBfc3Vic2NyaXB0aW9uOwogICAgICB2b2lkIGVycm9yKGUsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICAgICAgX3N1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgICAgICBvcGVuZWRGaWxlLmNsb3NlKCk7CiAgICAgICAgY29tcGxldGVyLmNvbXBsZXRlRXJyb3IoZSwgc3RhY2tUcmFjZSk7CiAgICAgIH0KCiAgICAgIF9zdWJzY3JpcHRpb24gPSBzdHJlYW0ubGlzdGVuKChkKSB7CiAgICAgICAgX3N1YnNjcmlwdGlvbi5wYXVzZSgpOwogICAgICAgIHRyeSB7CiAgICAgICAgICBvcGVuZWRGaWxlCiAgICAgICAgICAgICAgLndyaXRlRnJvbShkLCAwLCBkLmxlbmd0aCkKICAgICAgICAgICAgICAudGhlbigoXykgPT4gX3N1YnNjcmlwdGlvbi5yZXN1bWUoKSwgb25FcnJvcjogZXJyb3IpOwogICAgICAgIH0gY2F0Y2ggKGUsIHN0YWNrVHJhY2UpIHsKICAgICAgICAgIGVycm9yKGUsIHN0YWNrVHJhY2UpOwogICAgICAgIH0KICAgICAgfSwgb25Eb25lOiAoKSB7CiAgICAgICAgY29tcGxldGVyLmNvbXBsZXRlKF9maWxlKTsKICAgICAgfSwgb25FcnJvcjogZXJyb3IsIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgfSkuY2F0Y2hFcnJvcihjb21wbGV0ZXIuY29tcGxldGVFcnJvcik7CiAgICByZXR1cm4gY29tcGxldGVyLmZ1dHVyZTsKICB9CgogIEZ1dHVyZTxGaWxlPiBjbG9zZSgpID0+CiAgICAgIF9vcGVuRnV0dXJlLnRoZW4oKG9wZW5lZEZpbGUpID0+IG9wZW5lZEZpbGUuY2xvc2UoKSkudGhlbigoXykgPT4gX2ZpbGUpOwp9CgovLyBDbGFzcyBmb3IgZW5jYXBzdWxhdGluZyB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uIG9mIGZpbGVzLgpjbGFzcyBfRmlsZSBleHRlbmRzIEZpbGVTeXN0ZW1FbnRpdHkgaW1wbGVtZW50cyBGaWxlIHsKICBTdHJpbmcgX3BhdGg7CiAgVWludDhMaXN0IF9yYXdQYXRoOwoKICBfRmlsZShTdHJpbmcgcGF0aCkgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwocGF0aCwgJ3BhdGgnKTsKICAgIF9wYXRoID0gcGF0aDsKICAgIF9yYXdQYXRoID0gRmlsZVN5c3RlbUVudGl0eS5fdG9VdGY4QXJyYXkocGF0aCk7CiAgfQoKICBfRmlsZS5mcm9tUmF3UGF0aChVaW50OExpc3QgcmF3UGF0aCkgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwocmF3UGF0aCwgJ3Jhd1BhdGgnKTsKICAgIF9yYXdQYXRoID0gRmlsZVN5c3RlbUVudGl0eS5fdG9OdWxsVGVybWluYXRlZFV0ZjhBcnJheShyYXdQYXRoKTsKICAgIF9wYXRoID0gRmlsZVN5c3RlbUVudGl0eS5fdG9TdHJpbmdGcm9tVXRmOEFycmF5KHJhd1BhdGgpOwogIH0KCiAgU3RyaW5nIGdldCBwYXRoID0+IF9wYXRoOwoKICAvLyBXQVJOSU5HOgogIC8vIENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGluY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQgb24gdGhlIG5hdGl2ZQogIC8vIG5hbWVzcGFjZSBvYmplY3QuIEl0IHNob3VsZCBvbmx5IGJlIGNhbGxlZCB0byBwYXNzIHRoZSBwb2ludGVyIHRvIHRoZQogIC8vIElPU2VydmljZSwgd2hpY2ggd2lsbCBkZWNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCB3aGVuIGl0IGlzIGZpbmlzaGVkCiAgLy8gd2l0aCBpdC4KICBzdGF0aWMgaW50IF9uYW1lc3BhY2VQb2ludGVyKCkgPT4gX05hbWVzcGFjZS5fbmFtZXNwYWNlUG9pbnRlcjsKCiAgc3RhdGljIEZ1dHVyZSBfZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKGludCByZXF1ZXN0LCBMaXN0IGRhdGEpIHsKICAgIGRhdGFbMF0gPSBfbmFtZXNwYWNlUG9pbnRlcigpOwogICAgcmV0dXJuIF9JT1NlcnZpY2UuX2Rpc3BhdGNoKHJlcXVlc3QsIGRhdGEpOwogIH0KCiAgRnV0dXJlPGJvb2w+IGV4aXN0cygpIHsKICAgIHJldHVybiBfZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKF9JT1NlcnZpY2UuZmlsZUV4aXN0cywgW251bGwsIF9yYXdQYXRoXSkKICAgICAgICAudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwgIkNhbm5vdCBjaGVjayBleGlzdGVuY2UiLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICB9KTsKICB9CgogIGV4dGVybmFsIHN0YXRpYyBfZXhpc3RzKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCk7CgogIGJvb2wgZXhpc3RzU3luYygpIHsKICAgIHZhciByZXN1bHQgPSBfZXhpc3RzKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgpOwogICAgdGhyb3dJZkVycm9yKHJlc3VsdCwgIkNhbm5vdCBjaGVjayBleGlzdGVuY2Ugb2YgZmlsZSIsIHBhdGgpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEZpbGUgZ2V0IGFic29sdXRlID0+IG5ldyBGaWxlKF9hYnNvbHV0ZVBhdGgpOwoKICBGdXR1cmU8RmlsZT4gY3JlYXRlKHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KSB7CiAgICB2YXIgcmVzdWx0ID0KICAgICAgICByZWN1cnNpdmUgPyBwYXJlbnQuY3JlYXRlKHJlY3Vyc2l2ZTogdHJ1ZSkgOiBuZXcgRnV0dXJlLnZhbHVlKG51bGwpOwogICAgcmV0dXJuIHJlc3VsdAogICAgICAgIC50aGVuKChfKSA9PgogICAgICAgICAgICBfZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKF9JT1NlcnZpY2UuZmlsZUNyZWF0ZSwgW251bGwsIF9yYXdQYXRoXSkpCiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsICJDYW5ub3QgY3JlYXRlIGZpbGUiLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0pOwogIH0KCiAgZXh0ZXJuYWwgc3RhdGljIF9jcmVhdGUoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKTsKCiAgZXh0ZXJuYWwgc3RhdGljIF9jcmVhdGVMaW5rKAogICAgICBfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgsIFN0cmluZyB0YXJnZXQpOwoKICBleHRlcm5hbCBzdGF0aWMgX2xpbmtUYXJnZXQoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKTsKCiAgdm9pZCBjcmVhdGVTeW5jKHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KSB7CiAgICBpZiAocmVjdXJzaXZlKSB7CiAgICAgIHBhcmVudC5jcmVhdGVTeW5jKHJlY3Vyc2l2ZTogdHJ1ZSk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX2NyZWF0ZShfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoKTsKICAgIHRocm93SWZFcnJvcihyZXN1bHQsICJDYW5ub3QgY3JlYXRlIGZpbGUiLCBwYXRoKTsKICB9CgogIEZ1dHVyZTxGaWxlPiBfZGVsZXRlKHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KSB7CiAgICBpZiAocmVjdXJzaXZlKSB7CiAgICAgIHJldHVybiBuZXcgRGlyZWN0b3J5KHBhdGgpLmRlbGV0ZShyZWN1cnNpdmU6IHRydWUpLnRoZW4oKF8pID0+IHRoaXMpOwogICAgfQogICAgcmV0dXJuIF9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoX0lPU2VydmljZS5maWxlRGVsZXRlLCBbbnVsbCwgX3Jhd1BhdGhdKQogICAgICAgIC50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAiQ2Fubm90IGRlbGV0ZSBmaWxlIiwgcGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9KTsKICB9CgogIGV4dGVybmFsIHN0YXRpYyBfZGVsZXRlTmF0aXZlKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCk7CgogIGV4dGVybmFsIHN0YXRpYyBfZGVsZXRlTGlua05hdGl2ZShfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpOwoKICB2b2lkIF9kZWxldGVTeW5jKHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KSB7CiAgICBpZiAocmVjdXJzaXZlKSB7CiAgICAgIHJldHVybiBuZXcgRGlyZWN0b3J5LmZyb21SYXdQYXRoKF9yYXdQYXRoKS5kZWxldGVTeW5jKHJlY3Vyc2l2ZTogdHJ1ZSk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX2RlbGV0ZU5hdGl2ZShfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoKTsKICAgIHRocm93SWZFcnJvcihyZXN1bHQsICJDYW5ub3QgZGVsZXRlIGZpbGUiLCBwYXRoKTsKICB9CgogIEZ1dHVyZTxGaWxlPiByZW5hbWUoU3RyaW5nIG5ld1BhdGgpIHsKICAgIHJldHVybiBfZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKAogICAgICAgIF9JT1NlcnZpY2UuZmlsZVJlbmFtZSwgW251bGwsIF9yYXdQYXRoLCBuZXdQYXRoXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZSgKICAgICAgICAgICAgcmVzcG9uc2UsICJDYW5ub3QgcmVuYW1lIGZpbGUgdG8gJyRuZXdQYXRoJyIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgRmlsZShuZXdQYXRoKTsKICAgIH0pOwogIH0KCiAgZXh0ZXJuYWwgc3RhdGljIF9yZW5hbWUoCiAgICAgIF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3Qgb2xkUGF0aCwgU3RyaW5nIG5ld1BhdGgpOwoKICBleHRlcm5hbCBzdGF0aWMgX3JlbmFtZUxpbmsoCiAgICAgIF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3Qgb2xkUGF0aCwgU3RyaW5nIG5ld1BhdGgpOwoKICBGaWxlIHJlbmFtZVN5bmMoU3RyaW5nIG5ld1BhdGgpIHsKICAgIHZhciByZXN1bHQgPSBfcmVuYW1lKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgsIG5ld1BhdGgpOwogICAgdGhyb3dJZkVycm9yKHJlc3VsdCwgIkNhbm5vdCByZW5hbWUgZmlsZSB0byAnJG5ld1BhdGgnIiwgcGF0aCk7CiAgICByZXR1cm4gbmV3IEZpbGUobmV3UGF0aCk7CiAgfQoKICBGdXR1cmU8RmlsZT4gY29weShTdHJpbmcgbmV3UGF0aCkgewogICAgcmV0dXJuIF9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoCiAgICAgICAgX0lPU2VydmljZS5maWxlQ29weSwgW251bGwsIF9yYXdQYXRoLCBuZXdQYXRoXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZSgKICAgICAgICAgICAgcmVzcG9uc2UsICJDYW5ub3QgY29weSBmaWxlIHRvICckbmV3UGF0aCciLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IEZpbGUobmV3UGF0aCk7CiAgICB9KTsKICB9CgogIGV4dGVybmFsIHN0YXRpYyBfY29weSgKICAgICAgX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCBvbGRQYXRoLCBTdHJpbmcgbmV3UGF0aCk7CgogIEZpbGUgY29weVN5bmMoU3RyaW5nIG5ld1BhdGgpIHsKICAgIHZhciByZXN1bHQgPSBfY29weShfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoLCBuZXdQYXRoKTsKICAgIHRocm93SWZFcnJvcihyZXN1bHQsICJDYW5ub3QgY29weSBmaWxlIHRvICckbmV3UGF0aCciLCBwYXRoKTsKICAgIHJldHVybiBuZXcgRmlsZShuZXdQYXRoKTsKICB9CgogIEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPiBvcGVuKHtGaWxlTW9kZSBtb2RlOiBGaWxlTW9kZS5yZWFkfSkgewogICAgaWYgKG1vZGUgIT0gRmlsZU1vZGUucmVhZCAmJgogICAgICAgIG1vZGUgIT0gRmlsZU1vZGUud3JpdGUgJiYKICAgICAgICBtb2RlICE9IEZpbGVNb2RlLmFwcGVuZCAmJgogICAgICAgIG1vZGUgIT0gRmlsZU1vZGUud3JpdGVPbmx5ICYmCiAgICAgICAgbW9kZSAhPSBGaWxlTW9kZS53cml0ZU9ubHlBcHBlbmQpIHsKICAgICAgcmV0dXJuIG5ldyBGdXR1cmUuZXJyb3IoCiAgICAgICAgICBuZXcgQXJndW1lbnRFcnJvcignSW52YWxpZCBmaWxlIG1vZGUgZm9yIHRoaXMgb3BlcmF0aW9uJykpOwogICAgfQogICAgcmV0dXJuIF9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoCiAgICAgICAgX0lPU2VydmljZS5maWxlT3BlbiwgW251bGwsIF9yYXdQYXRoLCBtb2RlLl9tb2RlXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwgIkNhbm5vdCBvcGVuIGZpbGUiLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IF9SYW5kb21BY2Nlc3NGaWxlKHJlc3BvbnNlLCBwYXRoKTsKICAgIH0pOwogIH0KCiAgRnV0dXJlPGludD4gbGVuZ3RoKCkgewogICAgcmV0dXJuIF9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoCiAgICAgICAgX0lPU2VydmljZS5maWxlTGVuZ3RoRnJvbVBhdGgsIFtudWxsLCBfcmF3UGF0aF0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UoCiAgICAgICAgICAgIHJlc3BvbnNlLCAiQ2Fubm90IHJldHJpZXZlIGxlbmd0aCBvZiBmaWxlIiwgcGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgfSk7CiAgfQoKICBleHRlcm5hbCBzdGF0aWMgX2xlbmd0aEZyb21QYXRoKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCk7CgogIGludCBsZW5ndGhTeW5jKCkgewogICAgdmFyIHJlc3VsdCA9IF9sZW5ndGhGcm9tUGF0aChfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoKTsKICAgIHRocm93SWZFcnJvcihyZXN1bHQsICJDYW5ub3QgcmV0cmlldmUgbGVuZ3RoIG9mIGZpbGUiLCBwYXRoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBGdXR1cmU8RGF0ZVRpbWU+IGxhc3RBY2Nlc3NlZCgpIHsKICAgIHJldHVybiBfZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKF9JT1NlcnZpY2UuZmlsZUxhc3RBY2Nlc3NlZCwgW251bGwsIF9yYXdQYXRoXSkKICAgICAgICAudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZSgKICAgICAgICAgICAgcmVzcG9uc2UsICJDYW5ub3QgcmV0cmlldmUgYWNjZXNzIHRpbWUiLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IERhdGVUaW1lLmZyb21NaWxsaXNlY29uZHNTaW5jZUVwb2NoKHJlc3BvbnNlKTsKICAgIH0pOwogIH0KCiAgZXh0ZXJuYWwgc3RhdGljIF9sYXN0QWNjZXNzZWQoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKTsKCiAgRGF0ZVRpbWUgbGFzdEFjY2Vzc2VkU3luYygpIHsKICAgIHZhciBtcyA9IF9sYXN0QWNjZXNzZWQoX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBfcmF3UGF0aCk7CiAgICB0aHJvd0lmRXJyb3IobXMsICJDYW5ub3QgcmV0cmlldmUgYWNjZXNzIHRpbWUiLCBwYXRoKTsKICAgIHJldHVybiBuZXcgRGF0ZVRpbWUuZnJvbU1pbGxpc2Vjb25kc1NpbmNlRXBvY2gobXMpOwogIH0KCiAgRnV0dXJlIHNldExhc3RBY2Nlc3NlZChEYXRlVGltZSB0aW1lKSB7CiAgICBpbnQgbWlsbGlzID0gdGltZS5taWxsaXNlY29uZHNTaW5jZUVwb2NoOwogICAgcmV0dXJuIF9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoCiAgICAgICAgICAgIF9JT1NlcnZpY2UuZmlsZVNldExhc3RBY2Nlc3NlZCwgW251bGwsIF9yYXdQYXRoLCBtaWxsaXNdKQogICAgICAgIC50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAiQ2Fubm90IHNldCBhY2Nlc3MgdGltZSIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfSk7CiAgfQoKICBleHRlcm5hbCBzdGF0aWMgX3NldExhc3RBY2Nlc3NlZCgKICAgICAgX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoLCBpbnQgbWlsbGlzKTsKCiAgdm9pZCBzZXRMYXN0QWNjZXNzZWRTeW5jKERhdGVUaW1lIHRpbWUpIHsKICAgIGludCBtaWxsaXMgPSB0aW1lLm1pbGxpc2Vjb25kc1NpbmNlRXBvY2g7CiAgICB2YXIgcmVzdWx0ID0gX3NldExhc3RBY2Nlc3NlZChfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoLCBtaWxsaXMpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKAogICAgICAgICAgIkZhaWxlZCB0byBzZXQgZmlsZSBhY2Nlc3MgdGltZSIsIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgfQoKICBGdXR1cmU8RGF0ZVRpbWU+IGxhc3RNb2RpZmllZCgpIHsKICAgIHJldHVybiBfZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKF9JT1NlcnZpY2UuZmlsZUxhc3RNb2RpZmllZCwgW251bGwsIF9yYXdQYXRoXSkKICAgICAgICAudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZSgKICAgICAgICAgICAgcmVzcG9uc2UsICJDYW5ub3QgcmV0cmlldmUgbW9kaWZpY2F0aW9uIHRpbWUiLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IERhdGVUaW1lLmZyb21NaWxsaXNlY29uZHNTaW5jZUVwb2NoKHJlc3BvbnNlKTsKICAgIH0pOwogIH0KCiAgZXh0ZXJuYWwgc3RhdGljIF9sYXN0TW9kaWZpZWQoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKTsKCiAgRGF0ZVRpbWUgbGFzdE1vZGlmaWVkU3luYygpIHsKICAgIHZhciBtcyA9IF9sYXN0TW9kaWZpZWQoX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBfcmF3UGF0aCk7CiAgICB0aHJvd0lmRXJyb3IobXMsICJDYW5ub3QgcmV0cmlldmUgbW9kaWZpY2F0aW9uIHRpbWUiLCBwYXRoKTsKICAgIHJldHVybiBuZXcgRGF0ZVRpbWUuZnJvbU1pbGxpc2Vjb25kc1NpbmNlRXBvY2gobXMpOwogIH0KCiAgRnV0dXJlIHNldExhc3RNb2RpZmllZChEYXRlVGltZSB0aW1lKSB7CiAgICBpbnQgbWlsbGlzID0gdGltZS5taWxsaXNlY29uZHNTaW5jZUVwb2NoOwogICAgcmV0dXJuIF9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoCiAgICAgICAgICAgIF9JT1NlcnZpY2UuZmlsZVNldExhc3RNb2RpZmllZCwgW251bGwsIF9yYXdQYXRoLCBtaWxsaXNdKQogICAgICAgIC50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKAogICAgICAgICAgICByZXNwb25zZSwgIkNhbm5vdCBzZXQgbW9kaWZpY2F0aW9uIHRpbWUiLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0pOwogIH0KCiAgZXh0ZXJuYWwgc3RhdGljIF9zZXRMYXN0TW9kaWZpZWQoCiAgICAgIF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCwgaW50IG1pbGxpcyk7CgogIHZvaWQgc2V0TGFzdE1vZGlmaWVkU3luYyhEYXRlVGltZSB0aW1lKSB7CiAgICBpbnQgbWlsbGlzID0gdGltZS5taWxsaXNlY29uZHNTaW5jZUVwb2NoOwogICAgdmFyIHJlc3VsdCA9IF9zZXRMYXN0TW9kaWZpZWQoX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBfcmF3UGF0aCwgbWlsbGlzKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigKICAgICAgICAgICJGYWlsZWQgdG8gc2V0IGZpbGUgbW9kaWZpY2F0aW9uIHRpbWUiLCBwYXRoLCByZXN1bHQpOwogICAgfQogIH0KCiAgZXh0ZXJuYWwgc3RhdGljIF9vcGVuKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCwgaW50IG1vZGUpOwoKICBSYW5kb21BY2Nlc3NGaWxlIG9wZW5TeW5jKHtGaWxlTW9kZSBtb2RlOiBGaWxlTW9kZS5yZWFkfSkgewogICAgaWYgKG1vZGUgIT0gRmlsZU1vZGUucmVhZCAmJgogICAgICAgIG1vZGUgIT0gRmlsZU1vZGUud3JpdGUgJiYKICAgICAgICBtb2RlICE9IEZpbGVNb2RlLmFwcGVuZCAmJgogICAgICAgIG1vZGUgIT0gRmlsZU1vZGUud3JpdGVPbmx5ICYmCiAgICAgICAgbW9kZSAhPSBGaWxlTW9kZS53cml0ZU9ubHlBcHBlbmQpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgZmlsZSBtb2RlIGZvciB0aGlzIG9wZXJhdGlvbicpOwogICAgfQogICAgdmFyIGlkID0gX29wZW4oX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBfcmF3UGF0aCwgbW9kZS5fbW9kZSk7CiAgICB0aHJvd0lmRXJyb3IoaWQsICJDYW5ub3Qgb3BlbiBmaWxlIiwgcGF0aCk7CiAgICByZXR1cm4gbmV3IF9SYW5kb21BY2Nlc3NGaWxlKGlkLCBfcGF0aCk7CiAgfQoKICBleHRlcm5hbCBzdGF0aWMgaW50IF9vcGVuU3RkaW8oaW50IGZkKTsKCiAgc3RhdGljIFJhbmRvbUFjY2Vzc0ZpbGUgX29wZW5TdGRpb1N5bmMoaW50IGZkKSB7CiAgICB2YXIgaWQgPSBfb3BlblN0ZGlvKGZkKTsKICAgIGlmIChpZCA9PSAwKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJDYW5ub3Qgb3BlbiBzdGRpbyBmaWxlIGZvcjogJGZkIik7CiAgICB9CiAgICByZXR1cm4gbmV3IF9SYW5kb21BY2Nlc3NGaWxlKGlkLCAiIik7CiAgfQoKICBTdHJlYW08TGlzdDxpbnQ+PiBvcGVuUmVhZChbaW50IHN0YXJ0LCBpbnQgZW5kXSkgewogICAgcmV0dXJuIG5ldyBfRmlsZVN0cmVhbShwYXRoLCBzdGFydCwgZW5kKTsKICB9CgogIElPU2luayBvcGVuV3JpdGUoe0ZpbGVNb2RlIG1vZGU6IEZpbGVNb2RlLndyaXRlLCBFbmNvZGluZyBlbmNvZGluZzogdXRmOH0pIHsKICAgIGlmIChtb2RlICE9IEZpbGVNb2RlLndyaXRlICYmCiAgICAgICAgbW9kZSAhPSBGaWxlTW9kZS5hcHBlbmQgJiYKICAgICAgICBtb2RlICE9IEZpbGVNb2RlLndyaXRlT25seSAmJgogICAgICAgIG1vZGUgIT0gRmlsZU1vZGUud3JpdGVPbmx5QXBwZW5kKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCdJbnZhbGlkIGZpbGUgbW9kZSBmb3IgdGhpcyBvcGVyYXRpb24nKTsKICAgIH0KICAgIHZhciBjb25zdW1lciA9IG5ldyBfRmlsZVN0cmVhbUNvbnN1bWVyKHRoaXMsIG1vZGUpOwogICAgcmV0dXJuIG5ldyBJT1NpbmsoY29uc3VtZXIsIGVuY29kaW5nOiBlbmNvZGluZyk7CiAgfQoKICBGdXR1cmU8VWludDhMaXN0PiByZWFkQXNCeXRlcygpIHsKICAgIEZ1dHVyZTxVaW50OExpc3Q+IHJlYWREYXRhQ2h1bmtlZChSYW5kb21BY2Nlc3NGaWxlIGZpbGUpIHsKICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgQnl0ZXNCdWlsZGVyKGNvcHk6IGZhbHNlKTsKICAgICAgdmFyIGNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXI8VWludDhMaXN0PigpOwogICAgICB2b2lkIHJlYWQoKSB7CiAgICAgICAgZmlsZS5yZWFkKF9ibG9ja1NpemUpLnRoZW4oKGRhdGEpIHsKICAgICAgICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgYnVpbGRlci5hZGQoZGF0YSk7CiAgICAgICAgICAgIHJlYWQoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbXBsZXRlci5jb21wbGV0ZShidWlsZGVyLnRha2VCeXRlcygpKTsKICAgICAgICAgIH0KICAgICAgICB9LCBvbkVycm9yOiBjb21wbGV0ZXIuY29tcGxldGVFcnJvcik7CiAgICAgIH0KCiAgICAgIHJlYWQoKTsKICAgICAgcmV0dXJuIGNvbXBsZXRlci5mdXR1cmU7CiAgICB9CgogICAgcmV0dXJuIG9wZW4oKS50aGVuKChmaWxlKSB7CiAgICAgIHJldHVybiBmaWxlLmxlbmd0aCgpLnRoZW4oKGxlbmd0aCkgewogICAgICAgIGlmIChsZW5ndGggPT0gMCkgewogICAgICAgICAgLy8gTWF5IGJlIGNoYXJhY3RlciBkZXZpY2UsIHRyeSB0byByZWFkIGl0IGluIGNodW5rcy4KICAgICAgICAgIHJldHVybiByZWFkRGF0YUNodW5rZWQoZmlsZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmaWxlLnJlYWQobGVuZ3RoKTsKICAgICAgfSkud2hlbkNvbXBsZXRlKGZpbGUuY2xvc2UpOwogICAgfSk7CiAgfQoKICBVaW50OExpc3QgcmVhZEFzQnl0ZXNTeW5jKCkgewogICAgdmFyIG9wZW5lZCA9IG9wZW5TeW5jKCk7CiAgICB0cnkgewogICAgICBVaW50OExpc3QgZGF0YTsKICAgICAgdmFyIGxlbmd0aCA9IG9wZW5lZC5sZW5ndGhTeW5jKCk7CiAgICAgIGlmIChsZW5ndGggPT0gMCkgewogICAgICAgIC8vIE1heSBiZSBjaGFyYWN0ZXIgZGV2aWNlLCB0cnkgdG8gcmVhZCBpdCBpbiBjaHVua3MuCiAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgQnl0ZXNCdWlsZGVyKGNvcHk6IGZhbHNlKTsKICAgICAgICBkbyB7CiAgICAgICAgICBkYXRhID0gb3BlbmVkLnJlYWRTeW5jKF9ibG9ja1NpemUpOwogICAgICAgICAgaWYgKGRhdGEubGVuZ3RoID4gMCkgYnVpbGRlci5hZGQoZGF0YSk7CiAgICAgICAgfSB3aGlsZSAoZGF0YS5sZW5ndGggPiAwKTsKICAgICAgICBkYXRhID0gYnVpbGRlci50YWtlQnl0ZXMoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBkYXRhID0gb3BlbmVkLnJlYWRTeW5jKGxlbmd0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGRhdGE7CiAgICB9IGZpbmFsbHkgewogICAgICBvcGVuZWQuY2xvc2VTeW5jKCk7CiAgICB9CiAgfQoKICBTdHJpbmcgX3RyeURlY29kZShMaXN0PGludD4gYnl0ZXMsIEVuY29kaW5nIGVuY29kaW5nKSB7CiAgICB0cnkgewogICAgICByZXR1cm4gZW5jb2RpbmcuZGVjb2RlKGJ5dGVzKTsKICAgIH0gY2F0Y2ggKF8pIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oCiAgICAgICAgICAiRmFpbGVkIHRvIGRlY29kZSBkYXRhIHVzaW5nIGVuY29kaW5nICcke2VuY29kaW5nLm5hbWV9JyIsIHBhdGgpOwogICAgfQogIH0KCiAgRnV0dXJlPFN0cmluZz4gcmVhZEFzU3RyaW5nKHtFbmNvZGluZyBlbmNvZGluZzogdXRmOH0pIHsKICAgIC8vIFRPRE8oZGFydDppbyk6IElmIHRoZSBjaGFuZ2UgaW4gYXN5bmMgc2VtYW50aWNzIHRvIHJ1biBzeW5jaHJvbm91c2x5CiAgICAvLyB1bnRpbCBhd2FpdCBsYW5kcywgdGhpcyBpcyBhcyBlZmZpY2llbnQgYXMKICAgIC8vIHJldHVybiBfdHJ5RGVjb2RlKGF3YWl0IHJlYWRBc0J5dGVzKCksIGVuY29kaW5nKTsKICAgIHZhciBzdGFjayA9IFN0YWNrVHJhY2UuY3VycmVudDsKICAgIHJldHVybiByZWFkQXNCeXRlcygpLnRoZW4oKGJ5dGVzKSB7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIF90cnlEZWNvZGUoYnl0ZXMsIGVuY29kaW5nKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIHJldHVybiBuZXcgRnV0dXJlLmVycm9yKGUsIHN0YWNrKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBTdHJpbmcgcmVhZEFzU3RyaW5nU3luYyh7RW5jb2RpbmcgZW5jb2Rpbmc6IHV0Zjh9KSA9PgogICAgICBfdHJ5RGVjb2RlKHJlYWRBc0J5dGVzU3luYygpLCBlbmNvZGluZyk7CgogIEZ1dHVyZTxMaXN0PFN0cmluZz4+IHJlYWRBc0xpbmVzKHtFbmNvZGluZyBlbmNvZGluZzogdXRmOH0pID0+CiAgICAgIHJlYWRBc1N0cmluZyhlbmNvZGluZzogZW5jb2RpbmcpLnRoZW4oY29uc3QgTGluZVNwbGl0dGVyKCkuY29udmVydCk7CgogIExpc3Q8U3RyaW5nPiByZWFkQXNMaW5lc1N5bmMoe0VuY29kaW5nIGVuY29kaW5nOiB1dGY4fSkgPT4KICAgICAgY29uc3QgTGluZVNwbGl0dGVyKCkuY29udmVydChyZWFkQXNTdHJpbmdTeW5jKGVuY29kaW5nOiBlbmNvZGluZykpOwoKICBGdXR1cmU8RmlsZT4gd3JpdGVBc0J5dGVzKExpc3Q8aW50PiBieXRlcywKICAgICAge0ZpbGVNb2RlIG1vZGU6IEZpbGVNb2RlLndyaXRlLCBib29sIGZsdXNoOiBmYWxzZX0pIHsKICAgIHJldHVybiBvcGVuKG1vZGU6IG1vZGUpLnRoZW4oKGZpbGUpIHsKICAgICAgcmV0dXJuIGZpbGUud3JpdGVGcm9tKGJ5dGVzLCAwLCBieXRlcy5sZW5ndGgpLnRoZW48RmlsZT4oKF8pIHsKICAgICAgICBpZiAoZmx1c2gpIHJldHVybiBmaWxlLmZsdXNoKCkudGhlbigoXykgPT4gdGhpcyk7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0pLndoZW5Db21wbGV0ZShmaWxlLmNsb3NlKTsKICAgIH0pOwogIH0KCiAgdm9pZCB3cml0ZUFzQnl0ZXNTeW5jKExpc3Q8aW50PiBieXRlcywKICAgICAge0ZpbGVNb2RlIG1vZGU6IEZpbGVNb2RlLndyaXRlLCBib29sIGZsdXNoOiBmYWxzZX0pIHsKICAgIFJhbmRvbUFjY2Vzc0ZpbGUgb3BlbmVkID0gb3BlblN5bmMobW9kZTogbW9kZSk7CiAgICB0cnkgewogICAgICBvcGVuZWQud3JpdGVGcm9tU3luYyhieXRlcywgMCwgYnl0ZXMubGVuZ3RoKTsKICAgICAgaWYgKGZsdXNoKSBvcGVuZWQuZmx1c2hTeW5jKCk7CiAgICB9IGZpbmFsbHkgewogICAgICBvcGVuZWQuY2xvc2VTeW5jKCk7CiAgICB9CiAgfQoKICBGdXR1cmU8RmlsZT4gd3JpdGVBc1N0cmluZyhTdHJpbmcgY29udGVudHMsCiAgICAgIHtGaWxlTW9kZSBtb2RlOiBGaWxlTW9kZS53cml0ZSwKICAgICAgRW5jb2RpbmcgZW5jb2Rpbmc6IHV0ZjgsCiAgICAgIGJvb2wgZmx1c2g6IGZhbHNlfSkgewogICAgdHJ5IHsKICAgICAgcmV0dXJuIHdyaXRlQXNCeXRlcyhlbmNvZGluZy5lbmNvZGUoY29udGVudHMpLCBtb2RlOiBtb2RlLCBmbHVzaDogZmx1c2gpOwogICAgfSBjYXRjaCAoZSkgewogICAgICByZXR1cm4gbmV3IEZ1dHVyZS5lcnJvcihlKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVBc1N0cmluZ1N5bmMoU3RyaW5nIGNvbnRlbnRzLAogICAgICB7RmlsZU1vZGUgbW9kZTogRmlsZU1vZGUud3JpdGUsCiAgICAgIEVuY29kaW5nIGVuY29kaW5nOiB1dGY4LAogICAgICBib29sIGZsdXNoOiBmYWxzZX0pIHsKICAgIHdyaXRlQXNCeXRlc1N5bmMoZW5jb2RpbmcuZW5jb2RlKGNvbnRlbnRzKSwgbW9kZTogbW9kZSwgZmx1c2g6IGZsdXNoKTsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJGaWxlOiAnJHBhdGgnIjsKCiAgc3RhdGljIHRocm93SWZFcnJvcihPYmplY3QgcmVzdWx0LCBTdHJpbmcgbXNnLCBTdHJpbmcgcGF0aCkgewogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKG1zZywgcGF0aCwgcmVzdWx0KTsKICAgIH0KICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9SYW5kb21BY2Nlc3NGaWxlT3BzIHsKICBleHRlcm5hbCBmYWN0b3J5IF9SYW5kb21BY2Nlc3NGaWxlT3BzKGludCBwb2ludGVyKTsKCiAgaW50IGdldFBvaW50ZXIoKTsKICBpbnQgY2xvc2UoKTsKICByZWFkQnl0ZSgpOwogIHJlYWQoaW50IGJ5dGVzKTsKICByZWFkSW50byhMaXN0PGludD4gYnVmZmVyLCBpbnQgc3RhcnQsIGludCBlbmQpOwogIHdyaXRlQnl0ZShpbnQgdmFsdWUpOwogIHdyaXRlRnJvbShMaXN0PGludD4gYnVmZmVyLCBpbnQgc3RhcnQsIGludCBlbmQpOwogIHBvc2l0aW9uKCk7CiAgc2V0UG9zaXRpb24oaW50IHBvc2l0aW9uKTsKICB0cnVuY2F0ZShpbnQgbGVuZ3RoKTsKICBsZW5ndGgoKTsKICBmbHVzaCgpOwogIGxvY2soaW50IGxvY2ssIGludCBzdGFydCwgaW50IGVuZCk7Cn0KCmNsYXNzIF9SYW5kb21BY2Nlc3NGaWxlIGltcGxlbWVudHMgUmFuZG9tQWNjZXNzRmlsZSB7CiAgc3RhdGljIGJvb2wgX2Nvbm5lY3RlZFJlc291cmNlSGFuZGxlciA9IGZhbHNlOwoKICBmaW5hbCBTdHJpbmcgcGF0aDsKCiAgYm9vbCBfYXN5bmNEaXNwYXRjaGVkID0gZmFsc2U7CiAgU2VuZFBvcnQgX2ZpbGVTZXJ2aWNlOwoKICBfRmlsZVJlc291cmNlSW5mbyBfcmVzb3VyY2VJbmZvOwogIF9SYW5kb21BY2Nlc3NGaWxlT3BzIF9vcHM7CgogIF9SYW5kb21BY2Nlc3NGaWxlKGludCBwb2ludGVyLCB0aGlzLnBhdGgpIHsKICAgIF9vcHMgPSBuZXcgX1JhbmRvbUFjY2Vzc0ZpbGVPcHMocG9pbnRlcik7CiAgICBfcmVzb3VyY2VJbmZvID0gbmV3IF9GaWxlUmVzb3VyY2VJbmZvKHRoaXMpOwogICAgX21heWJlQ29ubmVjdEhhbmRsZXIoKTsKICB9CgogIHZvaWQgX21heWJlUGVyZm9ybUNsZWFudXAoKSB7CiAgICBpZiAoY2xvc2VkKSB7CiAgICAgIF9GaWxlUmVzb3VyY2VJbmZvLkZpbGVDbG9zZWQoX3Jlc291cmNlSW5mbyk7CiAgICB9CiAgfQoKICBfbWF5YmVDb25uZWN0SGFuZGxlcigpIHsKICAgIGlmICghX2Nvbm5lY3RlZFJlc291cmNlSGFuZGxlcikgewogICAgICAvLyBUT0RPKHJpY293KTogV2UgcHJvYmFibHkgbmVlZCB0byBzZXQgdGhlc2UgaW4gc29tZSBpbml0aWFsaXphdGlvbiBjb2RlLgogICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXNlIGFyZSBhbHdheXMgYXZhaWxhYmxlIGZyb20gdGhlCiAgICAgIC8vIG9ic2VydmF0b3J5IGV2ZW4gaWYgbm8gZmlsZXMgKG9yIHNvY2tldHMgZm9yIHRoZSBzb2NrZXQgb25lcykgYXJlCiAgICAgIC8vIG9wZW4uCiAgICAgIHJlZ2lzdGVyRXh0ZW5zaW9uKAogICAgICAgICAgJ2V4dC5kYXJ0LmlvLmdldE9wZW5GaWxlcycsIF9GaWxlUmVzb3VyY2VJbmZvLmdldE9wZW5GaWxlcyk7CiAgICAgIHJlZ2lzdGVyRXh0ZW5zaW9uKAogICAgICAgICAgJ2V4dC5kYXJ0LmlvLmdldEZpbGVCeUlEJywgX0ZpbGVSZXNvdXJjZUluZm8uZ2V0RmlsZUluZm9NYXBCeUlEKTsKICAgICAgX2Nvbm5lY3RlZFJlc291cmNlSGFuZGxlciA9IHRydWU7CiAgICB9CiAgfQoKICBGdXR1cmU8dm9pZD4gY2xvc2UoKSB7CiAgICByZXR1cm4gX2Rpc3BhdGNoKF9JT1NlcnZpY2UuZmlsZUNsb3NlLCBbbnVsbF0sIG1hcmtDbG9zZWQ6IHRydWUpCiAgICAgICAgLnRoZW4oKHJlc3VsdCkgewogICAgICBpZiAocmVzdWx0ID09IC0xKSB7CiAgICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oIkNhbm5vdCBjbG9zZSBmaWxlIiwgcGF0aCk7CiAgICAgIH0KICAgICAgY2xvc2VkID0gY2xvc2VkIHx8IChyZXN1bHQgPT0gMCk7CiAgICAgIF9tYXliZVBlcmZvcm1DbGVhbnVwKCk7CiAgICB9KTsKICB9CgogIHZvaWQgY2xvc2VTeW5jKCkgewogICAgX2NoZWNrQXZhaWxhYmxlKCk7CiAgICB2YXIgaWQgPSBfb3BzLmNsb3NlKCk7CiAgICBpZiAoaWQgPT0gLTEpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oIkNhbm5vdCBjbG9zZSBmaWxlIiwgcGF0aCk7CiAgICB9CiAgICBjbG9zZWQgPSBjbG9zZWQgfHwgKGlkID09IDApOwogICAgX21heWJlUGVyZm9ybUNsZWFudXAoKTsKICB9CgogIEZ1dHVyZTxpbnQ+IHJlYWRCeXRlKCkgewogICAgcmV0dXJuIF9kaXNwYXRjaChfSU9TZXJ2aWNlLmZpbGVSZWFkQnl0ZSwgW251bGxdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAicmVhZEJ5dGUgZmFpbGVkIiwgcGF0aCk7CiAgICAgIH0KICAgICAgX3Jlc291cmNlSW5mby5hZGRSZWFkKDEpOwogICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICB9KTsKICB9CgogIGludCByZWFkQnl0ZVN5bmMoKSB7CiAgICBfY2hlY2tBdmFpbGFibGUoKTsKICAgIHZhciByZXN1bHQgPSBfb3BzLnJlYWRCeXRlKCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oInJlYWRCeXRlIGZhaWxlZCIsIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgICBfcmVzb3VyY2VJbmZvLmFkZFJlYWQoMSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRnV0dXJlPFVpbnQ4TGlzdD4gcmVhZChpbnQgYnl0ZXMpIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGJ5dGVzLCAnYnl0ZXMnKTsKICAgIHJldHVybiBfZGlzcGF0Y2goX0lPU2VydmljZS5maWxlUmVhZCwgW251bGwsIGJ5dGVzXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwgInJlYWQgZmFpbGVkIiwgcGF0aCk7CiAgICAgIH0KICAgICAgX3Jlc291cmNlSW5mby5hZGRSZWFkKHJlc3BvbnNlWzFdLmxlbmd0aCk7CiAgICAgIFVpbnQ4TGlzdCByZXN1bHQgPSByZXNwb25zZVsxXTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0pOwogIH0KCiAgVWludDhMaXN0IHJlYWRTeW5jKGludCBieXRlcykgewogICAgX2NoZWNrQXZhaWxhYmxlKCk7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChieXRlcywgJ2J5dGVzJyk7CiAgICB2YXIgcmVzdWx0ID0gX29wcy5yZWFkKGJ5dGVzKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigicmVhZFN5bmMgZmFpbGVkIiwgcGF0aCwgcmVzdWx0KTsKICAgIH0KICAgIF9yZXNvdXJjZUluZm8uYWRkUmVhZChyZXN1bHQubGVuZ3RoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBGdXR1cmU8aW50PiByZWFkSW50byhMaXN0PGludD4gYnVmZmVyLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIGlmICgoYnVmZmVyIGlzISBMaXN0KSB8fAogICAgICAgICgoc3RhcnQgIT0gbnVsbCkgJiYgKHN0YXJ0IGlzISBpbnQpKSB8fAogICAgICAgICgoZW5kICE9IG51bGwpICYmIChlbmQgaXMhIGludCkpKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCk7CiAgICB9CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBidWZmZXIubGVuZ3RoKTsKICAgIGlmIChlbmQgPT0gc3RhcnQpIHsKICAgICAgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUoMCk7CiAgICB9CiAgICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICByZXR1cm4gX2Rpc3BhdGNoKF9JT1NlcnZpY2UuZmlsZVJlYWRJbnRvLCBbbnVsbCwgbGVuZ3RoXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwgInJlYWRJbnRvIGZhaWxlZCIsIHBhdGgpOwogICAgICB9CiAgICAgIGludCByZWFkID0gcmVzcG9uc2VbMV07CiAgICAgIExpc3Q8aW50PiBkYXRhID0gcmVzcG9uc2VbMl07CiAgICAgIGJ1ZmZlci5zZXRSYW5nZShzdGFydCwgc3RhcnQgKyByZWFkLCBkYXRhKTsKICAgICAgX3Jlc291cmNlSW5mby5hZGRSZWFkKHJlYWQpOwogICAgICByZXR1cm4gcmVhZDsKICAgIH0pOwogIH0KCiAgaW50IHJlYWRJbnRvU3luYyhMaXN0PGludD4gYnVmZmVyLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIF9jaGVja0F2YWlsYWJsZSgpOwogICAgaWYgKChidWZmZXIgaXMhIExpc3QpIHx8CiAgICAgICAgKChzdGFydCAhPSBudWxsKSAmJiAoc3RhcnQgaXMhIGludCkpIHx8CiAgICAgICAgKChlbmQgIT0gbnVsbCkgJiYgKGVuZCBpcyEgaW50KSkpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoKTsKICAgIH0KICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGJ1ZmZlci5sZW5ndGgpOwogICAgaWYgKGVuZCA9PSBzdGFydCkgewogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfb3BzLnJlYWRJbnRvKGJ1ZmZlciwgc3RhcnQsIGVuZCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oInJlYWRJbnRvIGZhaWxlZCIsIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgICBfcmVzb3VyY2VJbmZvLmFkZFJlYWQocmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT4gd3JpdGVCeXRlKGludCB2YWx1ZSkgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwodmFsdWUsICd2YWx1ZScpOwogICAgcmV0dXJuIF9kaXNwYXRjaChfSU9TZXJ2aWNlLmZpbGVXcml0ZUJ5dGUsIFtudWxsLCB2YWx1ZV0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsICJ3cml0ZUJ5dGUgZmFpbGVkIiwgcGF0aCk7CiAgICAgIH0KICAgICAgX3Jlc291cmNlSW5mby5hZGRXcml0ZSgxKTsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9KTsKICB9CgogIGludCB3cml0ZUJ5dGVTeW5jKGludCB2YWx1ZSkgewogICAgX2NoZWNrQXZhaWxhYmxlKCk7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbCh2YWx1ZSwgJ3ZhbHVlJyk7CiAgICB2YXIgcmVzdWx0ID0gX29wcy53cml0ZUJ5dGUodmFsdWUpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJ3cml0ZUJ5dGUgZmFpbGVkIiwgcGF0aCwgcmVzdWx0KTsKICAgIH0KICAgIF9yZXNvdXJjZUluZm8uYWRkV3JpdGUoMSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+IHdyaXRlRnJvbShMaXN0PGludD4gYnVmZmVyLAogICAgICBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIGlmICgoYnVmZmVyIGlzISBMaXN0KSB8fAogICAgICAgICgoc3RhcnQgIT0gbnVsbCkgJiYgKHN0YXJ0IGlzISBpbnQpKSB8fAogICAgICAgICgoZW5kICE9IG51bGwpICYmIChlbmQgaXMhIGludCkpKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJJbnZhbGlkIGFyZ3VtZW50cyB0byB3cml0ZUZyb20iKTsKICAgIH0KICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGJ1ZmZlci5sZW5ndGgpOwogICAgaWYgKGVuZCA9PSBzdGFydCkgewogICAgICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZSh0aGlzKTsKICAgIH0KICAgIF9CdWZmZXJBbmRTdGFydCByZXN1bHQ7CiAgICB0cnkgewogICAgICByZXN1bHQgPSBfZW5zdXJlRmFzdEFuZFNlcmlhbGl6YWJsZUJ5dGVEYXRhKGJ1ZmZlciwgc3RhcnQsIGVuZCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHJldHVybiBuZXcgRnV0dXJlLmVycm9yKGUpOwogICAgfQoKICAgIExpc3QgcmVxdWVzdCA9IG5ldyBMaXN0KDQpOwogICAgcmVxdWVzdFswXSA9IG51bGw7CiAgICByZXF1ZXN0WzFdID0gcmVzdWx0LmJ1ZmZlcjsKICAgIHJlcXVlc3RbMl0gPSByZXN1bHQuc3RhcnQ7CiAgICByZXF1ZXN0WzNdID0gZW5kIC0gKHN0YXJ0IC0gcmVzdWx0LnN0YXJ0KTsKICAgIHJldHVybiBfZGlzcGF0Y2goX0lPU2VydmljZS5maWxlV3JpdGVGcm9tLCByZXF1ZXN0KS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAid3JpdGVGcm9tIGZhaWxlZCIsIHBhdGgpOwogICAgICB9CiAgICAgIF9yZXNvdXJjZUluZm8uYWRkV3JpdGUoZW5kIC0gKHN0YXJ0IC0gcmVzdWx0LnN0YXJ0KSk7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSk7CiAgfQoKICB2b2lkIHdyaXRlRnJvbVN5bmMoTGlzdDxpbnQ+IGJ1ZmZlciwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSB7CiAgICBfY2hlY2tBdmFpbGFibGUoKTsKICAgIGlmICgoYnVmZmVyIGlzISBMaXN0KSB8fAogICAgICAgICgoc3RhcnQgIT0gbnVsbCkgJiYgKHN0YXJ0IGlzISBpbnQpKSB8fAogICAgICAgICgoZW5kICE9IG51bGwpICYmIChlbmQgaXMhIGludCkpKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJJbnZhbGlkIGFyZ3VtZW50cyB0byB3cml0ZUZyb21TeW5jIik7CiAgICB9CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBidWZmZXIubGVuZ3RoKTsKICAgIGlmIChlbmQgPT0gc3RhcnQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgX0J1ZmZlckFuZFN0YXJ0IGJ1ZmZlckFuZFN0YXJ0ID0KICAgICAgICBfZW5zdXJlRmFzdEFuZFNlcmlhbGl6YWJsZUJ5dGVEYXRhKGJ1ZmZlciwgc3RhcnQsIGVuZCk7CiAgICB2YXIgcmVzdWx0ID0gX29wcy53cml0ZUZyb20oYnVmZmVyQW5kU3RhcnQuYnVmZmVyLCBidWZmZXJBbmRTdGFydC5zdGFydCwKICAgICAgICBlbmQgLSAoc3RhcnQgLSBidWZmZXJBbmRTdGFydC5zdGFydCkpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJ3cml0ZUZyb20gZmFpbGVkIiwgcGF0aCwgcmVzdWx0KTsKICAgIH0KICAgIF9yZXNvdXJjZUluZm8uYWRkV3JpdGUoZW5kIC0gKHN0YXJ0IC0gYnVmZmVyQW5kU3RhcnQuc3RhcnQpKTsKICB9CgogIEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPiB3cml0ZVN0cmluZyhTdHJpbmcgc3RyaW5nLAogICAgICB7RW5jb2RpbmcgZW5jb2Rpbmc6IHV0Zjh9KSB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChlbmNvZGluZywgJ2VuY29kaW5nJyk7CiAgICB2YXIgZGF0YSA9IGVuY29kaW5nLmVuY29kZShzdHJpbmcpOwogICAgcmV0dXJuIHdyaXRlRnJvbShkYXRhLCAwLCBkYXRhLmxlbmd0aCk7CiAgfQoKICB2b2lkIHdyaXRlU3RyaW5nU3luYyhTdHJpbmcgc3RyaW5nLCB7RW5jb2RpbmcgZW5jb2Rpbmc6IHV0Zjh9KSB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChlbmNvZGluZywgJ2VuY29kaW5nJyk7CiAgICB2YXIgZGF0YSA9IGVuY29kaW5nLmVuY29kZShzdHJpbmcpOwogICAgd3JpdGVGcm9tU3luYyhkYXRhLCAwLCBkYXRhLmxlbmd0aCk7CiAgfQoKICBGdXR1cmU8aW50PiBwb3NpdGlvbigpIHsKICAgIHJldHVybiBfZGlzcGF0Y2goX0lPU2VydmljZS5maWxlUG9zaXRpb24sIFtudWxsXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwgInBvc2l0aW9uIGZhaWxlZCIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiByZXNwb25zZTsKICAgIH0pOwogIH0KCiAgaW50IHBvc2l0aW9uU3luYygpIHsKICAgIF9jaGVja0F2YWlsYWJsZSgpOwogICAgdmFyIHJlc3VsdCA9IF9vcHMucG9zaXRpb24oKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigicG9zaXRpb24gZmFpbGVkIiwgcGF0aCwgcmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT4gc2V0UG9zaXRpb24oaW50IHBvc2l0aW9uKSB7CiAgICByZXR1cm4gX2Rpc3BhdGNoKF9JT1NlcnZpY2UuZmlsZVNldFBvc2l0aW9uLCBbbnVsbCwgcG9zaXRpb25dKQogICAgICAgIC50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAic2V0UG9zaXRpb24gZmFpbGVkIiwgcGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9KTsKICB9CgogIHZvaWQgc2V0UG9zaXRpb25TeW5jKGludCBwb3NpdGlvbikgewogICAgX2NoZWNrQXZhaWxhYmxlKCk7CiAgICB2YXIgcmVzdWx0ID0gX29wcy5zZXRQb3NpdGlvbihwb3NpdGlvbik7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oInNldFBvc2l0aW9uIGZhaWxlZCIsIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgfQoKICBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT4gdHJ1bmNhdGUoaW50IGxlbmd0aCkgewogICAgcmV0dXJuIF9kaXNwYXRjaChfSU9TZXJ2aWNlLmZpbGVUcnVuY2F0ZSwgW251bGwsIGxlbmd0aF0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsICJ0cnVuY2F0ZSBmYWlsZWQiLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0pOwogIH0KCiAgdm9pZCB0cnVuY2F0ZVN5bmMoaW50IGxlbmd0aCkgewogICAgX2NoZWNrQXZhaWxhYmxlKCk7CiAgICB2YXIgcmVzdWx0ID0gX29wcy50cnVuY2F0ZShsZW5ndGgpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJ0cnVuY2F0ZSBmYWlsZWQiLCBwYXRoLCByZXN1bHQpOwogICAgfQogIH0KCiAgRnV0dXJlPGludD4gbGVuZ3RoKCkgewogICAgcmV0dXJuIF9kaXNwYXRjaChfSU9TZXJ2aWNlLmZpbGVMZW5ndGgsIFtudWxsXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwgImxlbmd0aCBmYWlsZWQiLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICB9KTsKICB9CgogIGludCBsZW5ndGhTeW5jKCkgewogICAgX2NoZWNrQXZhaWxhYmxlKCk7CiAgICB2YXIgcmVzdWx0ID0gX29wcy5sZW5ndGgoKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigibGVuZ3RoIGZhaWxlZCIsIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+IGZsdXNoKCkgewogICAgcmV0dXJuIF9kaXNwYXRjaChfSU9TZXJ2aWNlLmZpbGVGbHVzaCwgW251bGxdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAiZmx1c2ggZmFpbGVkIiwgcGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9KTsKICB9CgogIHZvaWQgZmx1c2hTeW5jKCkgewogICAgX2NoZWNrQXZhaWxhYmxlKCk7CiAgICB2YXIgcmVzdWx0ID0gX29wcy5mbHVzaCgpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJmbHVzaCBmYWlsZWQiLCBwYXRoLCByZXN1bHQpOwogICAgfQogIH0KCiAgc3RhdGljIGNvbnN0IGludCBsb2NrVW5sb2NrID0gMDsKICAvLyBzdGF0aWMgY29uc3QgaW50IGxvY2tTaGFyZWQgPSAxOwogIC8vIHN0YXRpYyBjb25zdCBpbnQgbG9ja0V4Y2x1c2l2ZSA9IDI7CiAgLy8gc3RhdGljIGNvbnN0IGludCBsb2NrQmxvY2tpbmdTaGFyZWQgPSAzOwogIC8vIHN0YXRpYyBjb25zdCBpbnQgbG9ja0Jsb2NraW5nRXhjbHVzaXZlID0gNDsKCiAgaW50IF9maWxlTG9ja1ZhbHVlKEZpbGVMb2NrIGZsKSA9PiBmbC5fdHlwZTsKCiAgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+IGxvY2soCiAgICAgIFtGaWxlTG9jayBtb2RlID0gRmlsZUxvY2suZXhjbHVzaXZlLCBpbnQgc3RhcnQgPSAwLCBpbnQgZW5kID0gLTFdKSB7CiAgICBpZiAoKG1vZGUgaXMhIEZpbGVMb2NrKSB8fCAoc3RhcnQgaXMhIGludCkgfHwgKGVuZCBpcyEgaW50KSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigpOwogICAgfQogICAgaWYgKChzdGFydCA8IDApIHx8IChlbmQgPCAtMSkgfHwgKChlbmQgIT0gLTEpICYmIChzdGFydCA+PSBlbmQpKSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigpOwogICAgfQogICAgaW50IGxvY2sgPSBfZmlsZUxvY2tWYWx1ZShtb2RlKTsKICAgIHJldHVybiBfZGlzcGF0Y2goX0lPU2VydmljZS5maWxlTG9jaywgW251bGwsIGxvY2ssIHN0YXJ0LCBlbmRdKQogICAgICAgIC50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAnbG9jayBmYWlsZWQnLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0pOwogIH0KCiAgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+IHVubG9jayhbaW50IHN0YXJ0ID0gMCwgaW50IGVuZCA9IC0xXSkgewogICAgaWYgKChzdGFydCBpcyEgaW50KSB8fCAoZW5kIGlzISBpbnQpKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCk7CiAgICB9CiAgICBpZiAoc3RhcnQgPT0gZW5kKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCk7CiAgICB9CiAgICByZXR1cm4gX2Rpc3BhdGNoKF9JT1NlcnZpY2UuZmlsZUxvY2ssIFtudWxsLCBsb2NrVW5sb2NrLCBzdGFydCwgZW5kXSkKICAgICAgICAudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwgJ3VubG9jayBmYWlsZWQnLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0pOwogIH0KCiAgdm9pZCBsb2NrU3luYygKICAgICAgW0ZpbGVMb2NrIG1vZGUgPSBGaWxlTG9jay5leGNsdXNpdmUsIGludCBzdGFydCA9IDAsIGludCBlbmQgPSAtMV0pIHsKICAgIF9jaGVja0F2YWlsYWJsZSgpOwogICAgaWYgKChtb2RlIGlzISBGaWxlTG9jaykgfHwgKHN0YXJ0IGlzISBpbnQpIHx8IChlbmQgaXMhIGludCkpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoKTsKICAgIH0KICAgIGlmICgoc3RhcnQgPCAwKSB8fCAoZW5kIDwgLTEpIHx8ICgoZW5kICE9IC0xKSAmJiAoc3RhcnQgPj0gZW5kKSkpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoKTsKICAgIH0KICAgIGludCBsb2NrID0gX2ZpbGVMb2NrVmFsdWUobW9kZSk7CiAgICB2YXIgcmVzdWx0ID0gX29wcy5sb2NrKGxvY2ssIHN0YXJ0LCBlbmQpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCdsb2NrIGZhaWxlZCcsIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgfQoKICB2b2lkIHVubG9ja1N5bmMoW2ludCBzdGFydCA9IDAsIGludCBlbmQgPSAtMV0pIHsKICAgIF9jaGVja0F2YWlsYWJsZSgpOwogICAgaWYgKChzdGFydCBpcyEgaW50KSB8fCAoZW5kIGlzISBpbnQpKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCk7CiAgICB9CiAgICBpZiAoc3RhcnQgPT0gZW5kKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX29wcy5sb2NrKGxvY2tVbmxvY2ssIHN0YXJ0LCBlbmQpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCd1bmxvY2sgZmFpbGVkJywgcGF0aCwgcmVzdWx0KTsKICAgIH0KICB9CgogIGJvb2wgY2xvc2VkID0gZmFsc2U7CgogIC8vIFdBUk5JTkc6CiAgLy8gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgaW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudCBvbiB0aGUgbmF0aXZlCiAgLy8gb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGUgZmlsZSBvcGVyYXRpb25zLiBJdCBzaG91bGQgb25seSBiZSBjYWxsZWQgdG8KICAvLyBwYXNzIHRoZSBwb2ludGVyIHRvIHRoZSBJTyBTZXJ2aWNlLCB3aGljaCB3aWxsIGRlY3JlbWVudCB0aGUgcmVmZXJlbmNlCiAgLy8gY291bnQgd2hlbiBpdCBpcyBmaW5pc2hlZCB3aXRoIGl0LgogIGludCBfcG9pbnRlcigpID0+IF9vcHMuZ2V0UG9pbnRlcigpOwoKICBGdXR1cmUgX2Rpc3BhdGNoKGludCByZXF1ZXN0LCBMaXN0IGRhdGEsIHtib29sIG1hcmtDbG9zZWQ6IGZhbHNlfSkgewogICAgaWYgKGNsb3NlZCkgewogICAgICByZXR1cm4gbmV3IEZ1dHVyZS5lcnJvcihuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigiRmlsZSBjbG9zZWQiLCBwYXRoKSk7CiAgICB9CiAgICBpZiAoX2FzeW5jRGlzcGF0Y2hlZCkgewogICAgICB2YXIgbXNnID0gIkFuIGFzeW5jIG9wZXJhdGlvbiBpcyBjdXJyZW50bHkgcGVuZGluZyI7CiAgICAgIHJldHVybiBuZXcgRnV0dXJlLmVycm9yKG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKG1zZywgcGF0aCkpOwogICAgfQogICAgaWYgKG1hcmtDbG9zZWQpIHsKICAgICAgLy8gU2V0IGNsb3NlZCB0byB0cnVlIHRvIGVuc3VyZSB0aGF0IG5vIG1vcmUgYXN5bmMgcmVxdWVzdHMgY2FuIGJlIGlzc3VlZAogICAgICAvLyBmb3IgdGhpcyBmaWxlLgogICAgICBjbG9zZWQgPSB0cnVlOwogICAgfQogICAgX2FzeW5jRGlzcGF0Y2hlZCA9IHRydWU7CiAgICBkYXRhWzBdID0gX3BvaW50ZXIoKTsKICAgIHJldHVybiBfSU9TZXJ2aWNlLl9kaXNwYXRjaChy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bGUsIGRpcmVjdG9yeSwgb3IgbGluay4KICoKICogVGhlc2UgY29uc3RhbnRzIGFyZSB1c2VkIGJ5IHRoZSBbRmlsZVN5c3RlbUVudGl0eV0gY2xhc3MKICogdG8gaW5kaWNhdGUgdGhlIG9iamVjdCdzIHR5cGUuCiAqCiAqLwoKY2xhc3MgRmlsZVN5c3RlbUVudGl0eVR5cGUgewogIHN0YXRpYyBjb25zdCBmaWxlID0gY29uc3QgRmlsZVN5c3RlbUVudGl0eVR5cGUuX2ludGVybmFsKDApOwogIEBEZXByZWNhdGVkKCJVc2UgZmlsZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgRklMRSA9IGZpbGU7CgogIHN0YXRpYyBjb25zdCBkaXJlY3RvcnkgPSBjb25zdCBGaWxlU3lzdGVtRW50aXR5VHlwZS5faW50ZXJuYWwoMSk7CiAgQERlcHJlY2F0ZWQoIlVzZSBkaXJlY3RvcnkgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IERJUkVDVE9SWSA9IGRpcmVjdG9yeTsKCiAgc3RhdGljIGNvbnN0IGxpbmsgPSBjb25zdCBGaWxlU3lzdGVtRW50aXR5VHlwZS5faW50ZXJuYWwoMik7CiAgQERlcHJlY2F0ZWQoIlVzZSBsaW5rIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBMSU5LID0gbGluazsKCiAgc3RhdGljIGNvbnN0IG5vdEZvdW5kID0gY29uc3QgRmlsZVN5c3RlbUVudGl0eVR5cGUuX2ludGVybmFsKDMpOwogIEBEZXByZWNhdGVkKCJVc2Ugbm90Rm91bmQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IE5PVF9GT1VORCA9IG5vdEZvdW5kOwoKICBzdGF0aWMgY29uc3QgX3R5cGVMaXN0ID0gY29uc3QgWwogICAgRmlsZVN5c3RlbUVudGl0eVR5cGUuZmlsZSwKICAgIEZpbGVTeXN0ZW1FbnRpdHlUeXBlLmRpcmVjdG9yeSwKICAgIEZpbGVTeXN0ZW1FbnRpdHlUeXBlLmxpbmssCiAgICBGaWxlU3lzdGVtRW50aXR5VHlwZS5ub3RGb3VuZCwKICBdOwogIGZpbmFsIGludCBfdHlwZTsKCiAgY29uc3QgRmlsZVN5c3RlbUVudGl0eVR5cGUuX2ludGVybmFsKHRoaXMuX3R5cGUpOwoKICBzdGF0aWMgRmlsZVN5c3RlbUVudGl0eVR5cGUgX2xvb2t1cChpbnQgdHlwZSkgPT4gX3R5cGVMaXN0W3R5cGVdOwogIFN0cmluZyB0b1N0cmluZygpID0+IGNvbnN0IFsnZmlsZScsICdkaXJlY3RvcnknLCAnbGluaycsICdub3RGb3VuZCddW190eXBlXTsKfQoKLyoqCiAqIEEgRmlsZVN0YXQgb2JqZWN0IHJlcHJlc2VudHMgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBQT1NJWCBzdGF0KCkgZnVuY3Rpb24KICogb24gYSBmaWxlIHN5c3RlbSBvYmplY3QuICBJdCBpcyBhbiBpbW11dGFibGUgb2JqZWN0LCByZXByZXNlbnRpbmcgdGhlCiAqIHNuYXBzaG90dGVkIHZhbHVlcyByZXR1cm5lZCBieSB0aGUgc3RhdCgpIGNhbGwuCiAqLwpjbGFzcyBGaWxlU3RhdCB7CiAgLy8gVGhlc2UgbXVzdCBhZ3JlZSB3aXRoIGVudW0gRmlsZVN0YXQgaW4gZmlsZS5oLgogIHN0YXRpYyBjb25zdCBfdHlwZSA9IDA7CiAgc3RhdGljIGNvbnN0IF9jaGFuZ2VkVGltZSA9IDE7CiAgc3RhdGljIGNvbnN0IF9tb2RpZmllZFRpbWUgPSAyOwogIHN0YXRpYyBjb25zdCBfYWNjZXNzZWRUaW1lID0gMzsKICBzdGF0aWMgY29uc3QgX21vZGUgPSA0OwogIHN0YXRpYyBjb25zdCBfc2l6ZSA9IDU7CgogIHN0YXRpYyBjb25zdCBfbm90Rm91bmQgPSBjb25zdCBGaWxlU3RhdC5faW50ZXJuYWxOb3RGb3VuZCgpOwoKICAvKioKICAgKiBUaGUgdGltZSBvZiB0aGUgbGFzdCBjaGFuZ2UgdG8gdGhlIGRhdGEgb3IgbWV0YWRhdGEgb2YgdGhlIGZpbGUgc3lzdGVtCiAgICogb2JqZWN0LgogICAqCiAgICogT24gV2luZG93cyBwbGF0Zm9ybXMsIHRoaXMgaXMgaW5zdGVhZCB0aGUgZmlsZSBjcmVhdGlvbiB0aW1lLgogICAqLwogIGZpbmFsIERhdGVUaW1lIGNoYW5nZWQ7CgogIC8qKgogICAqIFRoZSB0aW1lIG9mIHRoZSBsYXN0IGNoYW5nZSB0byB0aGUgZGF0YSBvZiB0aGUgZmlsZSBzeXN0ZW0gb2JqZWN0LgogICAqLwogIGZpbmFsIERhdGVUaW1lIG1vZGlmaWVkOwoKICAvKioKICAgKiBUaGUgdGltZSBvZiB0aGUgbGFzdCBhY2Nlc3MgdG8gdGhlIGRhdGEgb2YgdGhlIGZpbGUgc3lzdGVtIG9iamVjdC4KICAgKgogICAqIE9uIFdpbmRvd3MgcGxhdGZvcm1zLCB0aGlzIG1heSBoYXZlIDEgZGF5IGdyYW51bGFyaXR5LCBhbmQgYmUKICAgKiBvdXQgb2YgZGF0ZSBieSBhbiBob3VyLgogICAqLwogIGZpbmFsIERhdGVUaW1lIGFjY2Vzc2VkOwoKICAvKioKICAgKiBUaGUgdHlwZSBvZiB0aGUgdW5kZXJseWluZyBmaWxlIHN5c3RlbSBvYmplY3QuCiAgICoKICAgKiBbRmlsZVN5c3RlbUVudGl0eVR5cGUubm90Rm91bmRdIGlmIFtzdGF0XSBvciBbc3RhdFN5bmNdIGZhaWxlZC4KICAgKi8KICBmaW5hbCBGaWxlU3lzdGVtRW50aXR5VHlwZSB0eXBlOwoKICAvKioKICAgKiBUaGUgbW9kZSBvZiB0aGUgZmlsZSBzeXN0ZW0gb2JqZWN0LgogICAqCiAgICogUGVybWlzc2lvbnMgYXJlIGVuY29kZWQgaW4gdGhlIGxvd2VyIDE2IGJpdHMgb2YgdGhpcyBudW1iZXIsIGFuZCBjYW4gYmUKICAgKiBkZWNvZGVkIHVzaW5nIHRoZSBbbW9kZVN0cmluZ10gZ2V0dGVyLgogICAqLwogIGZpbmFsIGludCBtb2RlOwoKICAvKioKICAgKiBUaGUgc2l6ZSBvZiB0aGUgZmlsZSBzeXN0ZW0gb2JqZWN0LgogICAqLwogIGZpbmFsIGludCBzaXplOwoKICBGaWxlU3RhdC5faW50ZXJuYWwodGhpcy5jaGFuZ2VkLCB0aGlzLm1vZGlmaWVkLCB0aGlzLmFjY2Vzc2VkLCB0aGlzLnR5cGUsCiAgICAgIHRoaXMubW9kZSwgdGhpcy5zaXplKTsKCiAgY29uc3QgRmlsZVN0YXQuX2ludGVybmFsTm90Rm91bmQoKQogICAgICA6IGNoYW5nZWQgPSBudWxsLAogICAgICAgIG1vZGlmaWVkID0gbnVsbCwKICAgICAgICBhY2Nlc3NlZCA9IG51bGwsCiAgICAgICAgdHlwZSA9IEZpbGVTeXN0ZW1FbnRpdHlUeXBlLm5vdEZvdW5kLAogICAgICAgIG1vZGUgPSAwLAogICAgICAgIHNpemUgPSAtMTsKCiAgZXh0ZXJuYWwgc3RhdGljIF9zdGF0U3luYyhfTmFtZXNwYWNlIG5hbWVzcGFjZSwgU3RyaW5nIHBhdGgpOwoKICAvKioKICAgKiBDYWxscyB0aGUgb3BlcmF0aW5nIHN5c3RlbSdzIGBzdGF0KClgIGZ1bmN0aW9uIChvciBlcXVpdmFsZW50KSBvbiBbcGF0aF0uCiAgICoKICAgKiBSZXR1cm5zIGEgW0ZpbGVTdGF0XSBvYmplY3QgY29udGFpbmluZyB0aGUgZGF0YSByZXR1cm5lZCBieSBgc3RhdCgpYC4KICAgKiBJZiB0aGUgY2FsbCBmYWlscywgcmV0dXJucyBhIFtGaWxlU3RhdF0gb2JqZWN0IHdpdGggW0ZpbGVTdGF0LnR5cGVdIHNldCB0bwogICAqIFtGaWxlU3lzdGVtRW50aXR5VHlwZS5ub3RGb3VuZF0gYW5kIHRoZSBvdGhlciBmaWVsZHMgaW52YWxpZC4KICAgKi8KICBzdGF0aWMgRmlsZVN0YXQgc3RhdFN5bmMoU3RyaW5nIHBhdGgpIHsKICAgIGZpbmFsIElPT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IElPT3ZlcnJpZGVzLmN1cnJlbnQ7CiAgICBpZiAob3ZlcnJpZGVzID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9zdGF0U3luY0ludGVybmFsKHBhdGgpOwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5zdGF0U3luYyhwYXRoKTsKICB9CgogIHN0YXRpYyBGaWxlU3RhdCBfc3RhdFN5bmNJbnRlcm5hbChTdHJpbmcgcGF0aCkgewogICAgLy8gVHJhaWxpbmcgcGF0aCBpcyBub3Qgc3VwcG9ydGVkIG9uIFdpbmRvd3MuCiAgICBpZiAoUGxhdGZvcm0uaXNXaW5kb3dzKSB7CiAgICAgIHBhdGggPSBGaWxlU3lzdGVtRW50aXR5Ll90cmltVHJhaWxpbmdQYXRoU2VwYXJhdG9ycyhwYXRoKTsKICAgIH0KICAgIHZhciBkYXRhID0gX3N0YXRTeW5jKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgcGF0aCk7CiAgICBpZiAoZGF0YSBpcyBPU0Vycm9yKSByZXR1cm4gRmlsZVN0YXQuX25vdEZvdW5kOwogICAgcmV0dXJuIG5ldyBGaWxlU3RhdC5faW50ZXJuYWwoCiAgICAgICAgbmV3IERhdGVUaW1lLmZyb21NaWxsaXNlY29uZHNTaW5jZUVwb2NoKGRhdGFbX2NoYW5nZWRUaW1lXSksCiAgICAgICAgbmV3IERhdGVUaW1lLmZyb21NaWxsaXNlY29uZHNTaW5jZUVwb2NoKGRhdGFbX21vZGlmaWVkVGltZV0pLAogICAgICAgIG5ldyBEYXRlVGltZS5mcm9tTWlsbGlzZWNvbmRzU2luY2VFcG9jaChkYXRhW19hY2Nlc3NlZFRpbWVdKSwKICAgICAgICBGaWxlU3lzdGVtRW50aXR5VHlwZS5fbG9va3VwKGRhdGFbX3R5cGVdKSwKICAgICAgICBkYXRhW19tb2RlXSwKICAgICAgICBkYXRhW19zaXplXSk7CiAgfQoKICAvKioKICAgKiBBc3luY2hyb25vdXNseSBjYWxscyB0aGUgb3BlcmF0aW5nIHN5c3RlbSdzIGBzdGF0KClgIGZ1bmN0aW9uIChvcgogICAqIGVxdWl2YWxlbnQpIG9uIFtwYXRoXS4KICAgKgogICAqIFJldHVybnMgYSBbRnV0dXJlXSB3aGljaCBjb21wbGV0ZXMgd2l0aCB0aGUgc2FtZSByZXN1bHRzIGFzIFtzdGF0U3luY10uCiAgICovCiAgc3RhdGljIEZ1dHVyZTxGaWxlU3RhdD4gc3RhdChTdHJpbmcgcGF0aCkgewogICAgZmluYWwgSU9PdmVycmlkZXMgb3ZlcnJpZGVzID0gSU9PdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gX3N0YXQocGF0aCk7CiAgICB9CiAgICByZXR1cm4gb3ZlcnJpZGVzLnN0YXQocGF0aCk7CiAgfQoKICBzdGF0aWMgRnV0dXJlPEZpbGVTdGF0PiBfc3RhdChTdHJpbmcgcGF0aCkgewogICAgLy8gVHJhaWxpbmcgcGF0aCBpcyBub3Qgc3VwcG9ydGVkIG9uIFdpbmRvd3MuCiAgICBpZiAoUGxhdGZvcm0uaXNXaW5kb3dzKSB7CiAgICAgIHBhdGggPSBGaWxlU3lzdGVtRW50aXR5Ll90cmltVHJhaWxpbmdQYXRoU2VwYXJhdG9ycyhwYXRoKTsKICAgIH0KICAgIHJldHVybiBfRmlsZS5fZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKF9JT1NlcnZpY2UuZmlsZVN0YXQsIFtudWxsLCBwYXRoXSkKICAgICAgICAudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgcmV0dXJuIEZpbGVTdGF0Ll9ub3RGb3VuZDsKICAgICAgfQogICAgICAvLyBVbndyYXAgdGhlIHJlYWwgbGlzdCBmcm9tIHRoZSAiSSdtIG5vdCBhbiBlcnJvciIgd3JhcHBlci4KICAgICAgTGlzdCBkYXRhID0gcmVzcG9uc2VbMV07CiAgICAgIHJldHVybiBuZXcgRmlsZVN0YXQuX2ludGVybmFsKAogICAgICAgICAgbmV3IERhdGVUaW1lLmZyb21NaWxsaXNlY29uZHNTaW5jZUVwb2NoKGRhdGFbX2NoYW5nZWRUaW1lXSksCiAgICAgICAgICBuZXcgRGF0ZVRpbWUuZnJvbU1pbGxpc2Vjb25kc1NpbmNlRXBvY2goZGF0YVtfbW9kaWZpZWRUaW1lXSksCiAgICAgICAgICBuZXcgRGF0ZVRpbWUuZnJvbU1pbGxpc2Vjb25kc1NpbmNlRXBvY2goZGF0YVtfYWNjZXNzZWRUaW1lXSksCiAgICAgICAgICBGaWxlU3lzdGVtRW50aXR5VHlwZS5fbG9va3VwKGRhdGFbX3R5cGVdKSwKICAgICAgICAgIGRhdGFbX21vZGVdLAogICAgICAgICAgZGF0YVtfc2l6ZV0pOwogICAgfSk7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiIiIKRmlsZVN0YXQ6IHR5cGUgJHR5cGUKICAgICAgICAgIGNoYW5nZWQgJGNoYW5nZWQKICAgICAgICAgIG1vZGlmaWVkICRtb2RpZmllZAogICAgICAgICAgYWNjZXNzZWQgJGFjY2Vzc2VkCiAgICAgICAgICBtb2RlICR7bW9kZVN0cmluZygpfQogICAgICAgICAgc2l6ZSAkc2l6ZSIiIjsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbW9kZSB2YWx1ZSBhcyBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZy4KICAgKgogICAqIFRoZSBzdHJpbmcgaXMgaW4gdGhlIGZvcm1hdCAicnd4cnd4cnd4IiwgcmVmbGVjdGluZyB0aGUgdXNlciwgZ3JvdXAsIGFuZAogICAqIHdvcmxkIHBlcm1pc3Npb25zIHRvIHJlYWQsIHdyaXRlLCBhbmQgZXhlY3V0ZSB0aGUgZmlsZSBzeXN0ZW0gb2JqZWN0LCB3aXRoCiAgICogIi0iIHJlcGxhY2luZyB0aGUgbGV0dGVyIGZvciBtaXNzaW5nIHBlcm1pc3Npb25zLiAgRXh0cmEgcGVybWlzc2lvbiBiaXRzCiAgICogbWF5IGJlIHJlcHJlc2VudGVkIGJ5IHByZXBlbmRpbmcgIihzdWlkKSIsICIoZ3VpZCkiLCBhbmQvb3IgIihzdGlja3kpIiB0bwogICAqIHRoZSBtb2RlIHN0cmluZy4KICAgKi8KICBTdHJpbmcgbW9kZVN0cmluZygpIHsKICAgIHZhciBwZXJtaXNzaW9ucyA9IG1vZGUgJiAweEZGRjsKICAgIHZhciBjb2RlcyA9IGNvbnN0IFsnLS0tJywgJy0teCcsICctdy0nLCAnLXd4JywgJ3ItLScsICdyLXgnLCAncnctJywgJ3J3eCddOwogICAgdmFyIHJlc3VsdCA9IFtdOwogICAgaWYgKChwZXJtaXNzaW9ucyAmIDB4ODAwKSAhPSAwKSByZXN1bHQuYWRkKCIoc3VpZCkgIik7CiAgICBpZiAoKHBlcm1pc3Npb25zICYgMHg0MDApICE9IDApIHJlc3VsdC5hZGQoIihndWlkKSAiKTsKICAgIGlmICgocGVybWlzc2lvbnMgJiAweDIwMCkgIT0gMCkgcmVzdWx0LmFkZCgiKHN0aWNreSkgIik7CiAgICByZXN1bHQKICAgICAgLi5hZGQoY29kZXNbKHBlcm1pc3Npb25zID4+IDYpICYgMHg3XSkKICAgICAgLi5hZGQoY29kZXNbKHBlcm1pc3Npb25zID4+IDMpICYgMHg3XSkKICAgICAgLi5hZGQoY29kZXNbcGVybWlzc2lvbnMgJiAweDddKTsKICAgIHJldHVybiByZXN1bHQuam9pbigpOwogIH0KfQoKLyoqCiAqIFRoZSBjb21tb24gc3VwZXIgY2xhc3MgZm9yIFtGaWxlXSwgW0RpcmVjdG9yeV0sIGFuZCBbTGlua10gb2JqZWN0cy4KICoKICogW0ZpbGVTeXN0ZW1FbnRpdHldIG9iamVjdHMgYXJlIHJldHVybmVkIGZyb20gZGlyZWN0b3J5IGxpc3RpbmcKICogb3BlcmF0aW9ucy4gVG8gZGV0ZXJtaW5lIGlmIGEgRmlsZVN5c3RlbUVudGl0eSBpcyBhIFtGaWxlXSwgYQogKiBbRGlyZWN0b3J5XSwgb3IgYSBbTGlua10gcGVyZm9ybSBhIHR5cGUgY2hlY2s6CiAqCiAqICAgICBpZiAoZW50aXR5IGlzIEZpbGUpIChlbnRpdHkgYXMgRmlsZSkucmVhZEFzU3RyaW5nU3luYygpOwogKgogKiBZb3UgY2FuIGFsc28gdXNlIHRoZSBbdHlwZV0gb3IgW3R5cGVTeW5jXSBtZXRob2RzIHRvIGRldGVybWluZQogKiB0aGUgdHlwZSBvZiBhIGZpbGUgc3lzdGVtIG9iamVjdC4KICoKICogTW9zdCBtZXRob2RzIGluIHRoaXMgY2xhc3Mgb2NjdXIgaW4gc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91cyBwYWlycywKICogZm9yIGV4YW1wbGUsIFtleGlzdHNdIGFuZCBbZXhpc3RzU3luY10uCiAqIFVubGVzcyB5b3UgaGF2ZSBhIHNwZWNpZmljIHJlYXNvbiBmb3IgdXNpbmcgdGhlIHN5bmNocm9ub3VzIHZlcnNpb24KICogb2YgYSBtZXRob2QsIHByZWZlciB0aGUgYXN5bmNocm9ub3VzIHZlcnNpb24gdG8gYXZvaWQgYmxvY2tpbmcgeW91ciBwcm9ncmFtLgogKgogKiBIZXJlJ3MgdGhlIGV4aXN0cyBtZXRob2QgaW4gYWN0aW9uOgogKgogKiAgICAgZW50aXR5LmV4aXN0cygpLnRoZW4oKGlzVGhlcmUpIHsKICogICAgICAgaXNUaGVyZSA/IHByaW50KCdleGlzdHMnKSA6IHByaW50KCdub24tZXhpc3RlbnQnKTsKICogICAgIH0pOwogKgogKgogKiAjIyBPdGhlciByZXNvdXJjZXMKICoKICogKiBbRGFydCBieQogKiAgIEV4YW1wbGVdKGh0dHBzOi8vd3d3LmRhcnRsYW5nLm9yZy9kYXJ0LWJ5LWV4YW1wbGUvI2ZpbGVzLWRpcmVjdG9yaWVzLWFuZC1zeW1saW5rcykKICogICBwcm92aWRlcyBhZGRpdGlvbmFsIHRhc2stb3JpZW50ZWQgY29kZSBzYW1wbGVzIHRoYXQgc2hvdyBob3cgdG8gdXNlIHZhcmlvdXMKICogICBBUEkgZnJvbSB0aGUgW0RpcmVjdG9yeV0gY2xhc3MgYW5kIHRoZSBbRmlsZV0gY2xhc3MsIGJvdGggc3ViY2xhc3NlcyBvZgogKiAgIEZpbGVTeXN0ZW1FbnRpdHkuCiAqCiAqICogW0kvTyBmb3IgQ29tbWFuZC1MaW5lCiAqICAgQXBwc10oaHR0cHM6Ly93d3cuZGFydGxhbmcub3JnL2RvY3MvZGFydC11cC1hbmQtcnVubmluZy9jaDAzLmh0bWwjZGFydGlvLS0taW8tZm9yLWNvbW1hbmQtbGluZS1hcHBzKSwKICogICBhIHNlY3Rpb24gZnJvbSBfQSBUb3VyIG9mIHRoZSBEYXJ0IExpYnJhcmllc18gY292ZXJzIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KICoKICogKiBbV3JpdGUgQ29tbWFuZC1MaW5lIEFwcHNdKGh0dHBzOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL3R1dG9yaWFscy9jbWRsaW5lLyksCiAqICAgYSB0dXRvcmlhbCBhYm91dCB3cml0aW5nIGNvbW1hbmQtbGluZSBhcHBzLCBpbmNsdWRlcyBpbmZvcm1hdGlvbiBhYm91dAogKiAgIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KICovCmFic3RyYWN0IGNsYXNzIEZpbGVTeXN0ZW1FbnRpdHkgewogIFN0cmluZyBfcGF0aDsKICBVaW50OExpc3QgX3Jhd1BhdGg7CgogIFN0cmluZyBnZXQgcGF0aDsKCiAgLyoqCiAgICogUmV0dXJucyBhIFtVcmldIHJlcHJlc2VudGluZyB0aGUgZmlsZSBzeXN0ZW0gZW50aXR5J3MgbG9jYXRpb24uCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgVVJJJ3Mgc2NoZW1lIGlzIGFsd2F5cyAiZmlsZSIgaWYgdGhlIGVudGl0eSdzIFtwYXRoXSBpcwogICAqIGFic29sdXRlLCBvdGhlcndpc2UgdGhlIHNjaGVtZSB3aWxsIGJlIGVtcHR5LgogICAqLwogIFVyaSBnZXQgdXJpID0+IG5ldyBVcmkuZmlsZShwYXRoKTsKCiAgLyoqCiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGZpbGUgc3lzdGVtIGVudGl0eSB3aXRoIHRoaXMgcGF0aCBleGlzdHMuIFJldHVybnMKICAgKiBhIFs6RnV0dXJlPGJvb2w+Ol0gdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGUgcmVzdWx0LgogICAqCiAgICogU2luY2UgRmlsZVN5c3RlbUVudGl0eSBpcyBhYnN0cmFjdCwgZXZlcnkgRmlsZVN5c3RlbUVudGl0eSBvYmplY3QKICAgKiBpcyBhY3R1YWxseSBhbiBpbnN0YW5jZSBvZiBvbmUgb2YgdGhlIHN1YmNsYXNzZXMgW0ZpbGVdLAogICAqIFtEaXJlY3RvcnldLCBhbmQgW0xpbmtdLiAgQ2FsbGluZyBbZXhpc3RzXSBvbiBhbiBpbnN0YW5jZSBvZiBvbmUKICAgKiBvZiB0aGVzZSBzdWJjbGFzc2VzIGNoZWNrcyB3aGV0aGVyIHRoZSBvYmplY3QgZXhpc3RzIGluIHRoZSBmaWxlCiAgICogc3lzdGVtIG9iamVjdCBleGlzdHMgYW5kIGlzIG9mIHRoZSBjb3JyZWN0IHR5cGUgKGZpbGUsIGRpcmVjdG9yeSwKICAgKiBvciBsaW5rKS4gIFRvIGNoZWNrIHdoZXRoZXIgYSBwYXRoIHBvaW50cyB0byBhbiBvYmplY3Qgb24gdGhlCiAgICogZmlsZSBzeXN0ZW0sIHJlZ2FyZGxlc3Mgb2YgdGhlIG9iamVjdCdzIHR5cGUsIHVzZSB0aGUgW3R5cGVdCiAgICogc3RhdGljIG1ldGhvZC4KICAgKgogICAqLwogIEZ1dHVyZTxib29sPiBleGlzdHMoKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBjaGVja3Mgd2hldGhlciB0aGUgZmlsZSBzeXN0ZW0gZW50aXR5IHdpdGggdGhpcyBwYXRoCiAgICogZXhpc3RzLgogICAqCiAgICogU2luY2UgRmlsZVN5c3RlbUVudGl0eSBpcyBhYnN0cmFjdCwgZXZlcnkgRmlsZVN5c3RlbUVudGl0eSBvYmplY3QKICAgKiBpcyBhY3R1YWxseSBhbiBpbnN0YW5jZSBvZiBvbmUgb2YgdGhlIHN1YmNsYXNzZXMgW0ZpbGVdLAogICAqIFtEaXJlY3RvcnldLCBhbmQgW0xpbmtdLiAgQ2FsbGluZyBbZXhpc3RzU3luY10gb24gYW4gaW5zdGFuY2Ugb2YKICAgKiBvbmUgb2YgdGhlc2Ugc3ViY2xhc3NlcyBjaGVja3Mgd2hldGhlciB0aGUgb2JqZWN0IGV4aXN0cyBpbiB0aGUKICAgKiBmaWxlIHN5c3RlbSBvYmplY3QgZXhpc3RzIGFuZCBpcyBvZiB0aGUgY29ycmVjdCB0eXBlIChmaWxlLAogICAqIGRpcmVjdG9yeSwgb3IgbGluaykuICBUbyBjaGVjayB3aGV0aGVyIGEgcGF0aCBwb2ludHMgdG8gYW4gb2JqZWN0CiAgICogb24gdGhlIGZpbGUgc3lzdGVtLCByZWdhcmRsZXNzIG9mIHRoZSBvYmplY3QncyB0eXBlLCB1c2UgdGhlCiAgICogW3R5cGVTeW5jXSBzdGF0aWMgbWV0aG9kLgogICAqLwogIGJvb2wgZXhpc3RzU3luYygpOwoKICAvKioKICAgKiBSZW5hbWVzIHRoaXMgZmlsZSBzeXN0ZW0gZW50aXR5LgogICAqCiAgICogUmV0dXJucyBhIGBGdXR1cmU8RmlsZVN5c3RlbUVudGl0eT5gIHRoYXQgY29tcGxldGVzIHdpdGggYQogICAqIFtGaWxlU3lzdGVtRW50aXR5XSBpbnN0YW5jZSBmb3IgdGhlIHJlbmFtZWQgZmlsZSBzeXN0ZW0gZW50aXR5LgogICAqCiAgICogSWYgW25ld1BhdGhdIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgZW50aXR5IG9mIHRoZSBzYW1lIHR5cGUsIHRoYXQgZW50aXR5CiAgICogaXMgcmVwbGFjZWQuIElmIFtuZXdQYXRoXSBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGVudGl0eSBvZiBhIGRpZmZlcmVudAogICAqIHR5cGUsIHRoZSBvcGVyYXRpb24gZmFpbHMgYW5kIHRoZSBmdXR1cmUgY29tcGxldGVzIHdpdGggYW4gZXhjZXB0aW9uLgogICAqLwogIEZ1dHVyZTxGaWxlU3lzdGVtRW50aXR5PiByZW5hbWUoU3RyaW5nIG5ld1BhdGgpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IHJlbmFtZXMgdGhpcyBmaWxlIHN5c3RlbSBlbnRpdHkuCiAgICoKICAgKiBSZXR1cm5zIGEgW0ZpbGVTeXN0ZW1FbnRpdHldIGluc3RhbmNlIGZvciB0aGUgcmVuYW1lZCBlbnRpdHkuCiAgICoKICAgKiBJZiBbbmV3UGF0aF0gaWRlbnRpZmllcyBhbiBleGlzdGluZyBlbnRpdHkgb2YgdGhlIHNhbWUgdHlwZSwgdGhhdCBlbnRpdHkKICAgKiBpcyByZXBsYWNlZC4gSWYgW25ld1BhdGhdIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgZW50aXR5IG9mIGEgZGlmZmVyZW50CiAgICogdHlwZSwgdGhlIG9wZXJhdGlvbiBmYWlscyBhbmQgYW4gZXhjZXB0aW9uIGlzIHRocm93bi4KICAgKi8KICBGaWxlU3lzdGVtRW50aXR5IHJlbmFtZVN5bmMoU3RyaW5nIG5ld1BhdGgpOwoKICAvKioKICAgKiBSZXNvbHZlcyB0aGUgcGF0aCBvZiBhIGZpbGUgc3lzdGVtIG9iamVjdCByZWxhdGl2ZSB0byB0aGUKICAgKiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogICAqCiAgICogUmVzb2x2ZXMgYWxsIHN5bWJvbGljIGxpbmtzIG9uIHRoZSBwYXRoIGFuZCByZXNvbHZlcyBhbGwgYC4uYCBhbmQgYC5gIHBhdGgKICAgKiBzZWdtZW50cy4KICAgKgogICAqIFtyZXNvbHZlU3ltYm9saWNMaW5rc10gdXNlcyB0aGUgb3BlcmF0aW5nIHN5c3RlbSdzIG5hdGl2ZQogICAqIGZpbGUgc3lzdGVtIEFQSSB0byByZXNvbHZlIHRoZSBwYXRoLCB1c2luZyB0aGUgYHJlYWxwYXRoYCBmdW5jdGlvbgogICAqIG9uIGxpbnV4IGFuZCBPUyBYLCBhbmQgdGhlIGBHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGVgIGZ1bmN0aW9uIG9uCiAgICogV2luZG93cy4gSWYgdGhlIHBhdGggZG9lcyBub3QgcG9pbnQgdG8gYW4gZXhpc3RpbmcgZmlsZSBzeXN0ZW0gb2JqZWN0LAogICAqIGByZXNvbHZlU3ltYm9saWNMaW5rc2AgdGhyb3dzIGEgYEZpbGVTeXN0ZW1FeGNlcHRpb25gLgogICAqCiAgICogT24gV2luZG93cyB0aGUgYC4uYCBzZWdtZW50cyBhcmUgcmVzb2x2ZWQgX2JlZm9yZV8gcmVzb2x2aW5nIHRoZSBzeW1ib2xpYwogICAqIGxpbmssIGFuZCBvbiBvdGhlciBwbGF0Zm9ybXMgdGhlIHN5bWJvbGljIGxpbmtzIGFyZSBfcmVzb2x2ZWQgdG8gdGhlaXIKICAgKiB0YXJnZXRfIGJlZm9yZSBhcHBseWluZyBhIGAuLmAgdGhhdCBmb2xsb3dzLgogICAqCiAgICogVG8gZW5zdXJlIHRoZSBzYW1lIGJlaGF2aW9yIG9uIGFsbCBwbGF0Zm9ybXMgcmVzb2x2ZSBgLi5gIHNlZ21lbnRzIGJlZm9yZQogICAqIGNhbGxpbmcgYHJlc29sdmVTeW1ib2xpY0xpbmtzYC4gT25lIHdheSBvZiBkb2luZyB0aGlzIGlzIHdpdGggdGhlIGBVcmlgCiAgICogY2xhc3M6CiAgICoKICAgKiAgICAgdmFyIHBhdGggPSBVcmkucGFyc2UoJy4nKS5yZXNvbHZlVXJpKG5ldyBVcmkuZmlsZShpbnB1dCkpLnRvRmlsZVBhdGgoKTsKICAgKiAgICAgaWYgKHBhdGggPT0gJycpIHBhdGggPSAnLic7CiAgICogICAgIG5ldyBGaWxlKHBhdGgpLnJlc29sdmVTeW1ib2xpY0xpbmtzKCkudGhlbigocmVzb2x2ZWQpIHsKICAgKiAgICAgICBwcmludChyZXNvbHZlZCk7CiAgICogICAgIH0pOwogICAqCiAgICogc2luY2UgYFVyaS5yZXNvbHZlYCByZW1vdmVzIGAuLmAgc2VnbWVudHMuIFRoaXMgd2lsbCByZXN1bHQgaW4gdGhlIFdpbmRvd3MKICAgKiBiZWhhdmlvci4KICAgKi8KICBGdXR1cmU8U3RyaW5nPiByZXNvbHZlU3ltYm9saWNMaW5rcygpIHsKICAgIHJldHVybiBfRmlsZS5fZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKAogICAgICAgIF9JT1NlcnZpY2UuZmlsZVJlc29sdmVTeW1ib2xpY0xpbmtzLCBbbnVsbCwgX3Jhd1BhdGhdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKAogICAgICAgICAgICByZXNwb25zZSwgIkNhbm5vdCByZXNvbHZlIHN5bWJvbGljIGxpbmtzIiwgcGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgfSk7CiAgfQoKICAvKioKICAgKiBSZXNvbHZlcyB0aGUgcGF0aCBvZiBhIGZpbGUgc3lzdGVtIG9iamVjdCByZWxhdGl2ZSB0byB0aGUKICAgKiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogICAqCiAgICogUmVzb2x2ZXMgYWxsIHN5bWJvbGljIGxpbmtzIG9uIHRoZSBwYXRoIGFuZCByZXNvbHZlcyBhbGwgYC4uYCBhbmQgYC5gIHBhdGgKICAgKiBzZWdtZW50cy4KICAgKgogICAqIFtyZXNvbHZlU3ltYm9saWNMaW5rc1N5bmNdIHVzZXMgdGhlIG9wZXJhdGluZyBzeXN0ZW0ncyBuYXRpdmUKICAgKiBmaWxlIHN5c3RlbSBBUEkgdG8gcmVzb2x2ZSB0aGUgcGF0aCwgdXNpbmcgdGhlIGByZWFscGF0aGAgZnVuY3Rpb24KICAgKiBvbiBsaW51eCBhbmQgT1MgWCwgYW5kIHRoZSBgR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlYCBmdW5jdGlvbiBvbgogICAqIFdpbmRvd3MuIElmIHRoZSBwYXRoIGRvZXMgbm90IHBvaW50IHRvIGFuIGV4aXN0aW5nIGZpbGUgc3lzdGVtIG9iamVjdCwKICAgKiBgcmVzb2x2ZVN5bWJvbGljTGlua3NTeW5jYCB0aHJvd3MgYSBgRmlsZVN5c3RlbUV4Y2VwdGlvbmAuCiAgICoKICAgKiBPbiBXaW5kb3dzIHRoZSBgLi5gIHNlZ21lbnRzIGFyZSByZXNvbHZlZCBfYmVmb3JlXyByZXNvbHZpbmcgdGhlIHN5bWJvbGljCiAgICogbGluaywgYW5kIG9uIG90aGVyIHBsYXRmb3JtcyB0aGUgc3ltYm9saWMgbGlua3MgYXJlIF9yZXNvbHZlZCB0byB0aGVpcgogICAqIHRhcmdldF8gYmVmb3JlIGFwcGx5aW5nIGEgYC4uYCB0aGF0IGZvbGxvd3MuCiAgICoKICAgKiBUbyBlbnN1cmUgdGhlIHNhbWUgYmVoYXZpb3Igb24gYWxsIHBsYXRmb3JtcyByZXNvbHZlIGAuLmAgc2VnbWVudHMgYmVmb3JlCiAgICogY2FsbGluZyBgcmVzb2x2ZVN5bWJvbGljTGlua3NTeW5jYC4gT25lIHdheSBvZiBkb2luZyB0aGlzIGlzIHdpdGggdGhlIGBVcmlgCiAgICogY2xhc3M6CiAgICoKICAgKiAgICAgdmFyIHBhdGggPSBVcmkucGFyc2UoJy4nKS5yZXNvbHZlVXJpKG5ldyBVcmkuZmlsZShpbnB1dCkpLnRvRmlsZVBhdGgoKTsKICAgKiAgICAgaWYgKHBhdGggPT0gJycpIHBhdGggPSAnLic7CiAgICogICAgIHZhciByZXNvbHZlZCA9IG5ldyBGaWxlKHBhdGgpLnJlc29sdmVTeW1ib2xpY0xpbmtzU3luYygpOwogICAqICAgICBwcmludChyZXNvbHZlZCk7CiAgICoKICAgKiBzaW5jZSBgVXJpLnJlc29sdmVgIHJlbW92ZXMgYC4uYCBzZWdtZW50cy4gVGhpcyB3aWxsIHJlc3VsdCBpbiB0aGUgV2luZG93cwogICAqIGJlaGF2aW9yLgogICAqLwogIFN0cmluZyByZXNvbHZlU3ltYm9saWNMaW5rc1N5bmMoKSB7CiAgICB2YXIgcmVzdWx0ID0gX3Jlc29sdmVTeW1ib2xpY0xpbmtzKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgpOwogICAgX3Rocm93SWZFcnJvcihyZXN1bHQsICJDYW5ub3QgcmVzb2x2ZSBzeW1ib2xpYyBsaW5rcyIsIHBhdGgpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8qKgogICAqIENhbGxzIHRoZSBvcGVyYXRpbmcgc3lzdGVtJ3Mgc3RhdCgpIGZ1bmN0aW9uIG9uIHRoZSBbcGF0aF0gb2YgdGhpcwogICAqIFtGaWxlU3lzdGVtRW50aXR5XS4KICAgKgogICAqIElkZW50aWNhbCB0byBbOkZpbGVTdGF0LnN0YXQodGhpcy5wYXRoKTpdLgogICAqCiAgICogUmV0dXJucyBhIFs6RnV0dXJlPEZpbGVTdGF0PjpdIG9iamVjdCBjb250YWluaW5nIHRoZSBkYXRhIHJldHVybmVkIGJ5CiAgICogc3RhdCgpLgogICAqCiAgICogSWYgdGhlIGNhbGwgZmFpbHMsIGNvbXBsZXRlcyB0aGUgZnV0dXJlIHdpdGggYSBbRmlsZVN0YXRdIG9iamVjdAogICAqIHdpdGggYC50eXBlYCBzZXQgdG8gW0ZpbGVTeXN0ZW1FbnRpdHlUeXBlLm5vdEZvdW5kXSBhbmQgdGhlIG90aGVyIGZpZWxkcwogICAqIGludmFsaWQuCiAgICovCiAgRnV0dXJlPEZpbGVTdGF0PiBzdGF0KCkgPT4gRmlsZVN0YXQuc3RhdChwYXRoKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBjYWxscyB0aGUgb3BlcmF0aW5nIHN5c3RlbSdzIHN0YXQoKSBmdW5jdGlvbiBvbiB0aGUKICAgKiBbcGF0aF0gb2YgdGhpcyBbRmlsZVN5c3RlbUVudGl0eV0uCiAgICoKICAgKiBJZGVudGljYWwgdG8gWzpGaWxlU3RhdC5zdGF0U3luYyh0aGlzLnBhdGgpOl0uCiAgICoKICAgKiBSZXR1cm5zIGEgW0ZpbGVTdGF0XSBvYmplY3QgY29udGFpbmluZyB0aGUgZGF0YSByZXR1cm5lZCBieSBzdGF0KCkuCiAgICoKICAgKiBJZiB0aGUgY2FsbCBmYWlscywgcmV0dXJucyBhIFtGaWxlU3RhdF0gb2JqZWN0IHdpdGggYC50eXBlYCBzZXQgdG8KICAgKiBbRmlsZVN5c3RlbUVudGl0eVR5cGUubm90Rm91bmRdIGFuZCB0aGUgb3RoZXIgZmllbGRzIGludmFsaWQuCiAgICovCiAgRmlsZVN0YXQgc3RhdFN5bmMoKSA9PiBGaWxlU3RhdC5zdGF0U3luYyhwYXRoKTsKCiAgLyoqCiAgICogRGVsZXRlcyB0aGlzIFtGaWxlU3lzdGVtRW50aXR5XS4KICAgKgogICAqIElmIHRoZSBbRmlsZVN5c3RlbUVudGl0eV0gaXMgYSBkaXJlY3RvcnksIGFuZCBpZiBbcmVjdXJzaXZlXSBpcyBmYWxzZSwKICAgKiB0aGUgZGlyZWN0b3J5IG11c3QgYmUgZW1wdHkuIE90aGVyd2lzZSwgaWYgW3JlY3Vyc2l2ZV0gaXMgdHJ1ZSwgdGhlCiAgICogZGlyZWN0b3J5IGFuZCBhbGwgc3ViLWRpcmVjdG9yaWVzIGFuZCBmaWxlcyBpbiB0aGUgZGlyZWN0b3JpZXMgYXJlCiAgICogZGVsZXRlZC4gTGlua3MgYXJlIG5vdCBmb2xsb3dlZCB3aGVuIGRlbGV0aW5nIHJlY3Vyc2l2ZWx5LiBPbmx5IHRoZSBsaW5rCiAgICogaXMgZGVsZXRlZCwgbm90IGl0cyB0YXJnZXQuCiAgICoKICAgKiBJZiBbcmVjdXJzaXZlXSBpcyB0cnVlLCB0aGUgW0ZpbGVTeXN0ZW1FbnRpdHldIGlzIGRlbGV0ZWQgZXZlbiBpZiB0aGUgdHlwZQogICAqIG9mIHRoZSBbRmlsZVN5c3RlbUVudGl0eV0gZG9lc24ndCBtYXRjaCB0aGUgY29udGVudCBvZiB0aGUgZmlsZSBzeXN0ZW0uCiAgICogVGhpcyBiZWhhdmlvciBhbGxvd3MgW2RlbGV0ZV0gdG8gYmUgdXNlZCB0byB1bmNvbmRpdGlvbmFsbHkgZGVsZXRlIGFueSBmaWxlCiAgICogc3lzdGVtIG9iamVjdC4KICAgKgogICAqIFJldHVybnMgYSBbOkZ1dHVyZTxGaWxlU3lzdGVtRW50aXR5PjpdIHRoYXQgY29tcGxldGVzIHdpdGggdGhpcwogICAqIFtGaWxlU3lzdGVtRW50aXR5XSB3aGVuIHRoZSBkZWxldGlvbiBpcyBkb25lLiBJZiB0aGUgW0ZpbGVTeXN0ZW1FbnRpdHldCiAgICogY2Fubm90IGJlIGRlbGV0ZWQsIHRoZSBmdXR1cmUgY29tcGxldGVzIHdpdGggYW4gZXhjZXB0aW9uLgogICAqLwogIEZ1dHVyZTxGaWxlU3lzdGVtRW50aXR5PiBkZWxldGUoe2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pID0+CiAgICAgIF9kZWxldGUocmVjdXJzaXZlOiByZWN1cnNpdmUpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IGRlbGV0ZXMgdGhpcyBbRmlsZVN5c3RlbUVudGl0eV0uCiAgICoKICAgKiBJZiB0aGUgW0ZpbGVTeXN0ZW1FbnRpdHldIGlzIGEgZGlyZWN0b3J5LCBhbmQgaWYgW3JlY3Vyc2l2ZV0gaXMgZmFsc2UsCiAgICogdGhlIGRpcmVjdG9yeSBtdXN0IGJlIGVtcHR5LiBPdGhlcndpc2UsIGlmIFtyZWN1cnNpdmVdIGlzIHRydWUsIHRoZQogICAqIGRpcmVjdG9yeSBhbmQgYWxsIHN1Yi1kaXJlY3RvcmllcyBhbmQgZmlsZXMgaW4gdGhlIGRpcmVjdG9yaWVzIGFyZQogICAqIGRlbGV0ZWQuIExpbmtzIGFyZSBub3QgZm9sbG93ZWQgd2hlbiBkZWxldGluZyByZWN1cnNpdmVseS4gT25seSB0aGUgbGluawogICAqIGlzIGRlbGV0ZWQsIG5vdCBpdHMgdGFyZ2V0LgogICAqCiAgICogSWYgW3JlY3Vyc2l2ZV0gaXMgdHJ1ZSwgdGhlIFtGaWxlU3lzdGVtRW50aXR5XSBpcyBkZWxldGVkIGV2ZW4gaWYgdGhlIHR5cGUKICAgKiBvZiB0aGUgW0ZpbGVTeXN0ZW1FbnRpdHldIGRvZXNuJ3QgbWF0Y2ggdGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUgc3lzdGVtLgogICAqIFRoaXMgYmVoYXZpb3IgYWxsb3dzIFtkZWxldGVTeW5jXSB0byBiZSB1c2VkIHRvIHVuY29uZGl0aW9uYWxseSBkZWxldGUgYW55CiAgICogZmlsZSBzeXN0ZW0gb2JqZWN0LgogICAqCiAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgW0ZpbGVTeXN0ZW1FbnRpdHldIGNhbm5vdCBiZSBkZWxldGVkLgogICAqLwogIHZvaWQgZGVsZXRlU3luYyh7Ym9vbCByZWN1cnNpdmU6IGZhbHNlfSkgPT4gX2RlbGV0ZVN5bmMocmVjdXJzaXZlOiByZWN1cnNpdmUpOwoKICAvKioKICAgKiBTdGFydCB3YXRjaGluZyB0aGUgW0ZpbGVTeXN0ZW1FbnRpdHldIGZvciBjaGFuZ2VzLgogICAqCiAgICogVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgcGxhdGZvcm0tZGVwZW5kZW50IGV2ZW50LWJhc2VkIEFQSXMgZm9yIHJlY2VpdmluZwogICAqIGZpbGUtc3lzdGVtIG5vdGlmaWNhdGlvbnMsIHRodXMgYmVoYXZpb3IgZGVwZW5kcyBvbiB0aGUgcGxhdGZvcm0uCiAgICoKICAgKiAgICogYFdpbmRvd3NgOiBVc2VzIGBSZWFkRGlyZWN0b3J5Q2hhbmdlc1dgLiBUaGUgaW1wbGVtZW50YXRpb24gb25seQogICAqICAgICBzdXBwb3J0cyB3YXRjaGluZyBkaXJlY3Rvcmllcy4gUmVjdXJzaXZlIHdhdGNoaW5nIGlzIHN1cHBvcnRlZC4KICAgKiAgICogYExpbnV4YDogVXNlcyBgaW5vdGlmeWAuIFRoZSBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyB3YXRjaGluZyBib3RoCiAgICogICAgIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4gUmVjdXJzaXZlIHdhdGNoaW5nIGlzIG5vdCBzdXBwb3J0ZWQuCiAgICogICAgIE5vdGU6IFdoZW4gd2F0Y2hpbmcgZmlsZXMgZGlyZWN0bHksIGRlbGV0ZSBldmVudHMgbWlnaHQgbm90IGhhcHBlbgogICAqICAgICBhcyBleHBlY3RlZC4KICAgKiAgICogYE9TIFhgOiBVc2VzIGBGU0V2ZW50c2AuIFRoZSBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyB3YXRjaGluZyBib3RoCiAgICogICAgIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4gUmVjdXJzaXZlIHdhdGNoaW5nIGlzIHN1cHBvcnRlZC4KICAgKgogICAqIFRoZSBzeXN0ZW0gd2lsbCBzdGFydCBsaXN0ZW5pbmcgZm9yIGV2ZW50cyBvbmNlIHRoZSByZXR1cm5lZCBbU3RyZWFtXSBpcwogICAqIGJlaW5nIGxpc3RlbmVkIHRvLCBub3Qgd2hlbiB0aGUgY2FsbCB0byBbd2F0Y2hdIGlzIGlzc3VlZC4KICAgKgogICAqIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBhbiBlbmRsZXNzIGJyb2FkY2FzdCBbU3RyZWFtXSwgdGhhdCBvbmx5IHN0b3BzIHdoZW4KICAgKiBvbmUgb2YgdGhlIGZvbGxvd2luZyBoYXBwZW5zOgogICAqCiAgICogICAqIFRoZSBbU3RyZWFtXSBpcyBjYW5jZWxlZCwgZS5nLiBieSBjYWxsaW5nIGBjYW5jZWxgIG9uIHRoZQogICAqICAgICAgW1N0cmVhbVN1YnNjcmlwdGlvbl0uCiAgICogICAqIFRoZSBbRmlsZVN5c3RlbUVudGl0eV0gYmVpbmcgd2F0Y2hlcywgaXMgZGVsZXRlZC4KICAgKgogICAqIFVzZSBgZXZlbnRzYCB0byBzcGVjaWZ5IHdoYXQgZXZlbnRzIHRvIGxpc3RlbiBmb3IuIFRoZSBjb25zdGFudHMgaW4KICAgKiBbRmlsZVN5c3RlbUV2ZW50XSBjYW4gYmUgb3InZWQgdG9nZXRoZXIgdG8gbWl4IGV2ZW50cy4gRGVmYXVsdCBpcwogICAqIFtGaWxlU3lzdGVtRXZlbnQuQUxMXS4KICAgKgogICAqIEEgbW92ZSBldmVudCBtYXkgYmUgcmVwb3J0ZWQgYXMgc2VwZXJhdGUgZGVsZXRlIGFuZCBjcmVhdGUgZXZlbnRzLgogICAqLwogIFN0cmVhbTxGaWxlU3lzdGVtRXZlbnQ+IHdhdGNoKAogICAgICB7aW50IGV2ZW50czogRmlsZVN5c3RlbUV2ZW50LmFsbCwgYm9vbCByZWN1cnNpdmU6IGZhbHNlfSkgewogICAgLy8gRklYTUUoYmtvbnlpKTogZmluZCBhIHdheSB0byBkbyB0aGlzIHVzaW5nIHRoZSByYXcgcGF0aC4KICAgIGZpbmFsIFN0cmluZyB0cmltbWVkUGF0aCA9IF90cmltVHJhaWxpbmdQYXRoU2VwYXJhdG9ycyhwYXRoKTsKICAgIGZpbmFsIElPT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IElPT3ZlcnJpZGVzLmN1cnJlbnQ7CiAgICBpZiAob3ZlcnJpZGVzID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9GaWxlU3lzdGVtV2F0Y2hlci5fd2F0Y2godHJpbW1lZFBhdGgsIGV2ZW50cywgcmVjdXJzaXZlKTsKICAgIH0KICAgIHJldHVybiBvdmVycmlkZXMuZnNXYXRjaCh0cmltbWVkUGF0aCwgZXZlbnRzLCByZWN1cnNpdmUpOwogIH0KCiAgRnV0dXJlPEZpbGVTeXN0ZW1FbnRpdHk+IF9kZWxldGUoe2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pOwogIHZvaWQgX2RlbGV0ZVN5bmMoe2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pOwoKICBzdGF0aWMgRnV0dXJlPGJvb2w+IF9pZGVudGljYWwoU3RyaW5nIHBhdGgxLCBTdHJpbmcgcGF0aDIpIHsKICAgIHJldHVybiBfRmlsZS5fZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKAogICAgICAgIF9JT1NlcnZpY2UuZmlsZUlkZW50aWNhbCwgW251bGwsIHBhdGgxLCBwYXRoMl0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsCiAgICAgICAgICAgICJFcnJvciBpbiBGaWxlU3lzdGVtRW50aXR5LmlkZW50aWNhbCgkcGF0aDEsICRwYXRoMikiLCAiIik7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgfSk7CiAgfQoKICAvKioKICAgKiBDaGVja3Mgd2hldGhlciB0d28gcGF0aHMgcmVmZXIgdG8gdGhlIHNhbWUgb2JqZWN0IGluIHRoZQogICAqIGZpbGUgc3lzdGVtLgogICAqCiAgICogUmV0dXJucyBhIFs6RnV0dXJlPGJvb2w+Ol0gdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGUgcmVzdWx0LgogICAqCiAgICogQ29tcGFyaW5nIGEgbGluayB0byBpdHMgdGFyZ2V0IHJldHVybnMgZmFsc2UsIGFzIGRvZXMgY29tcGFyaW5nIHR3byBsaW5rcwogICAqIHRoYXQgcG9pbnQgdG8gdGhlIHNhbWUgdGFyZ2V0LiAgVG8gY2hlY2sgdGhlIHRhcmdldCBvZiBhIGxpbmssIHVzZQogICAqIExpbmsudGFyZ2V0IGV4cGxpY2l0bHkgdG8gZmV0Y2ggaXQuICBEaXJlY3RvcnkgbGlua3MgYXBwZWFyaW5nCiAgICogaW5zaWRlIGEgcGF0aCBhcmUgZm9sbG93ZWQsIHRob3VnaCwgdG8gZmluZCB0aGUgZmlsZSBzeXN0ZW0gb2JqZWN0LgogICAqCiAgICogQ29tcGxldGVzIHRoZSByZXR1cm5lZCBGdXR1cmUgd2l0aCBhbiBlcnJvciBpZiBvbmUgb2YgdGhlIHBhdGhzIHBvaW50cwogICAqIHRvIGFuIG9iamVjdCB0aGF0IGRvZXMgbm90IGV4aXN0LgogICAqLwogIHN0YXRpYyBGdXR1cmU8Ym9vbD4gaWRlbnRpY2FsKFN0cmluZyBwYXRoMSwgU3RyaW5nIHBhdGgyKSB7CiAgICBJT092ZXJyaWRlcyBvdmVycmlkZXMgPSBJT092ZXJyaWRlcy5jdXJyZW50OwogICAgaWYgKG92ZXJyaWRlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfaWRlbnRpY2FsKHBhdGgxLCBwYXRoMik7CiAgICB9CiAgICByZXR1cm4gb3ZlcnJpZGVzLmZzZUlkZW50aWNhbChwYXRoMSwgcGF0aDIpOwogIH0KCiAgc3RhdGljIGZpbmFsIFJlZ0V4cCBfYWJzb2x1dGVXaW5kb3dzUGF0aFBhdHRlcm4gPQogICAgICBuZXcgUmVnRXhwKHInXihcXFxcfFthLXpBLVpdOlsvXFxdKScpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgW2Jvb2xdIGluZGljYXRpbmcgd2hldGhlciB0aGlzIG9iamVjdCdzIHBhdGggaXMgYWJzb2x1dGUuCiAgICoKICAgKiBPbiBXaW5kb3dzLCBhIHBhdGggaXMgYWJzb2x1dGUgaWYgaXQgc3RhcnRzIHdpdGggXFxcXCBvciBhIGRyaXZlIGxldHRlcgogICAqIGJldHdlZW4gYSBhbmQgeiAodXBwZXIgb3IgbG93ZXIgY2FzZSkgZm9sbG93ZWQgYnkgOlxcIG9yIDovLgogICAqIE9uIG5vbi1XaW5kb3dzLCBhIHBhdGggaXMgYWJzb2x1dGUgaWYgaXQgc3RhcnRzIHdpdGggLy4KICAgKi8KICBib29sIGdldCBpc0Fic29sdXRlIHsKICAgIGlmIChQbGF0Zm9ybS5pc1dpbmRvd3MpIHsKICAgICAgcmV0dXJuIHBhdGguc3RhcnRzV2l0aChfYWJzb2x1dGVXaW5kb3dzUGF0aFBhdHRlcm4pOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHBhdGguc3RhcnRzV2l0aCgnLycpOwogICAgfQogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIFtGaWxlU3lzdGVtRW50aXR5XSB3aG9zZSBwYXRoIGlzIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIFt0aGlzXS4KICAgKgogICAqIFRoZSB0eXBlIG9mIHRoZSByZXR1cm5lZCBpbnN0YW5jZSBpcyB0aGUgdHlwZSBvZiBbdGhpc10uCiAgICoKICAgKiBUaGUgYWJzb2x1dGUgcGF0aCBpcyBjb21wdXRlZCBieSBwcmVmaXhpbmcKICAgKiBhIHJlbGF0aXZlIHBhdGggd2l0aCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSwgYW5kIHJldHVybmluZwogICAqIGFuIGFic29sdXRlIHBhdGggdW5jaGFuZ2VkLgogICAqLwogIEZpbGVTeXN0ZW1FbnRpdHkgZ2V0IGFic29sdXRlOwoKICBTdHJpbmcgZ2V0IF9hYnNvbHV0ZVBhdGggewogICAgaWYgKGlzQWJzb2x1dGUpIHJldHVybiBwYXRoOwogICAgU3RyaW5nIGN1cnJlbnQgPSBEaXJlY3RvcnkuY3VycmVudC5wYXRoOwogICAgaWYgKGN1cnJlbnQuZW5kc1dpdGgoJy8nKSB8fAogICAgICAgIChQbGF0Zm9ybS5pc1dpbmRvd3MgJiYgY3VycmVudC5lbmRzV2l0aCgnXFwnKSkpIHsKICAgICAgcmV0dXJuICckY3VycmVudCRwYXRoJzsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAnJGN1cnJlbnQke1BsYXRmb3JtLnBhdGhTZXBhcmF0b3J9JHBhdGgnOwogICAgfQogIH0KCiAgVWludDhMaXN0IGdldCBfcmF3QWJzb2x1dGVQYXRoIHsKICAgIGlmIChpc0Fic29sdXRlKSByZXR1cm4gX3Jhd1BhdGg7CiAgICB2YXIgY3VycmVudCA9IERpcmVjdG9yeS5jdXJyZW50Ll9yYXdQYXRoLnRvTGlzdCgpOwogICAgYXNzZXJ0KGN1cnJlbnQubGFzdCA9PSAwKTsKICAgIGN1cnJlbnQucmVtb3ZlTGFzdCgpOyAvLyBSZW1vdmUgbnVsbCB0ZXJtaW5hdG9yLgogICAgaWYgKChjdXJyZW50Lmxhc3QgPT0gJy8nLmNvZGVVbml0QXQoMCkpIHx8CiAgICAgICAgKFBsYXRmb3JtLmlzV2luZG93cyAmJiAoY3VycmVudC5sYXN0ID09ICdcXCcuY29kZVVuaXRBdCgwKSkpKSB7CiAgICAgIGN1cnJlbnQuYWRkQWxsKF9yYXdQYXRoKTsKICAgICAgcmV0dXJuIG5ldyBVaW50OExpc3QuZnJvbUxpc3QoY3VycmVudCk7CiAgICB9IGVsc2UgewogICAgICBjdXJyZW50LmFkZEFsbCh1dGY4LmVuY29kZShQbGF0Zm9ybS5wYXRoU2VwYXJhdG9yKSk7CiAgICAgIGN1cnJlbnQuYWRkQWxsKF9yYXdQYXRoKTsKICAgICAgcmV0dXJuIG5ldyBVaW50OExpc3QuZnJvbUxpc3QoY3VycmVudCk7CiAgICB9CiAgfQoKICBzdGF0aWMgYm9vbCBfaWRlbnRpY2FsU3luYyhTdHJpbmcgcGF0aDEsIFN0cmluZyBwYXRoMikgewogICAgdmFyIHJlc3VsdCA9IF9pZGVudGljYWxOYXRpdmUoX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBwYXRoMSwgcGF0aDIpOwogICAgX3Rocm93SWZFcnJvcihyZXN1bHQsICdFcnJvciBpbiBGaWxlU3lzdGVtRW50aXR5LmlkZW50aWNhbFN5bmMnKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IGNoZWNrcyB3aGV0aGVyIHR3byBwYXRocyByZWZlciB0byB0aGUgc2FtZSBvYmplY3QgaW4gdGhlCiAgICogZmlsZSBzeXN0ZW0uCiAgICoKICAgKiBDb21wYXJpbmcgYSBsaW5rIHRvIGl0cyB0YXJnZXQgcmV0dXJucyBmYWxzZSwgYXMgZG9lcyBjb21wYXJpbmcgdHdvIGxpbmtzCiAgICogdGhhdCBwb2ludCB0byB0aGUgc2FtZSB0YXJnZXQuICBUbyBjaGVjayB0aGUgdGFyZ2V0IG9mIGEgbGluaywgdXNlCiAgICogTGluay50YXJnZXQgZXhwbGljaXRseSB0byBmZXRjaCBpdC4gIERpcmVjdG9yeSBsaW5rcyBhcHBlYXJpbmcKICAgKiBpbnNpZGUgYSBwYXRoIGFyZSBmb2xsb3dlZCwgdGhvdWdoLCB0byBmaW5kIHRoZSBmaWxlIHN5c3RlbSBvYmplY3QuCiAgICoKICAgKiBUaHJvd3MgYW4gZXJyb3IgaWYgb25lIG9mIHRoZSBwYXRocyBwb2ludHMgdG8gYW4gb2JqZWN0IHRoYXQgZG9lcyBub3QKICAgKiBleGlzdC4KICAgKi8KICBzdGF0aWMgYm9vbCBpZGVudGljYWxTeW5jKFN0cmluZyBwYXRoMSwgU3RyaW5nIHBhdGgyKSB7CiAgICBJT092ZXJyaWRlcyBvdmVycmlkZXMgPSBJT092ZXJyaWRlcy5jdXJyZW50OwogICAgaWYgKG92ZXJyaWRlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfaWRlbnRpY2FsU3luYyhwYXRoMSwgcGF0aDIpOwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5mc2VJZGVudGljYWxTeW5jKHBhdGgxLCBwYXRoMik7CiAgfQoKICAvKioKICAgKiBUZXN0IGlmIFt3YXRjaF0gaXMgc3VwcG9ydGVkIG9uIHRoZSBjdXJyZW50IHN5c3RlbS4KICAgKgogICAqIE9TIFggMTAuNiBhbmQgYmVsb3cgaXMgbm90IHN1cHBvcnRlZC4KICAgKi8KICBzdGF0aWMgYm9vbCBnZXQgaXNXYXRjaFN1cHBvcnRlZCB7CiAgICBmaW5hbCBJT092ZXJyaWRlcyBvdmVycmlkZXMgPSBJT092ZXJyaWRlcy5jdXJyZW50OwogICAgaWYgKG92ZXJyaWRlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfRmlsZVN5c3RlbVdhdGNoZXIuaXNTdXBwb3J0ZWQ7CiAgICB9CiAgICByZXR1cm4gb3ZlcnJpZGVzLmZzV2F0Y2hJc1N1cHBvcnRlZCgpOwogIH0KCiAgLy8gVGhlIG5hdGl2ZSBtZXRob2RzIHdoaWNoIGRldGVybWluZSB0eXBlIG9mIHRoZSBGaWxlU3lzdGVtRW50aXR5IHJlcXVpcmUKICAvLyB0aGF0IHRoZSBidWZmZXIgcHJvdmlkZWQgaXMgbnVsbCB0ZXJtaW5hdGVkLgogIHN0YXRpYyBVaW50OExpc3QgX3RvVXRmOEFycmF5KFN0cmluZyBzKSA9PgogICAgICBfdG9OdWxsVGVybWluYXRlZFV0ZjhBcnJheSh1dGY4LmVuY29kZShzKSk7CgogIHN0YXRpYyBVaW50OExpc3QgX3RvTnVsbFRlcm1pbmF0ZWRVdGY4QXJyYXkoVWludDhMaXN0IGwpIHsKICAgIGlmIChsID09IG51bGwpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAobC5pc05vdEVtcHR5ICYmIGwubGFzdCAhPSAwKSB7CiAgICAgIGZpbmFsIHRtcCA9IG5ldyBVaW50OExpc3QobC5sZW5ndGggKyAxKTsKICAgICAgdG1wLnNldFJhbmdlKDAsIGwubGVuZ3RoLCBsKTsKICAgICAgcmV0dXJuIHRtcDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBsOwogICAgfQogIH0KCiAgc3RhdGljIFN0cmluZyBfdG9TdHJpbmdGcm9tVXRmOEFycmF5KFVpbnQ4TGlzdCBsKSB7CiAgICBpZiAobCA9PSBudWxsKSB7CiAgICAgIHJldHVybiAnJzsKICAgIH0KICAgIFVpbnQ4TGlzdCBub25OdWxsVGVybWluYXRlZCA9IGw7CiAgICBpZiAobC5sYXN0ID09IDApIHsKICAgICAgbm9uTnVsbFRlcm1pbmF0ZWQgPSBuZXcgVWludDhMaXN0LnZpZXcobC5idWZmZXIsIDAsIGwubGVuZ3RoIC0gMSk7CiAgICB9CiAgICByZXR1cm4gdXRmOC5kZWNvZGUobm9uTnVsbFRlcm1pbmF0ZWQsIGFsbG93TWFsZm9ybWVkOiB0cnVlKTsKICB9CgogIC8qKgogICAqIEZpbmRzIHRoZSB0eXBlIG9mIGZpbGUgc3lzdGVtIG9iamVjdCB0aGF0IGEgcGF0aCBwb2ludHMgdG8uCiAgICoKICAgKiBSZXR1cm5zIGEgWzpGdXR1cmU8RmlsZVN5c3RlbUVudGl0eVR5cGU+Ol0gdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGUgc2FtZQogICAqIHJlc3VsdHMgYXMgW3R5cGVTeW5jXS4KICAgKi8KICBzdGF0aWMgRnV0dXJlPEZpbGVTeXN0ZW1FbnRpdHlUeXBlPiB0eXBlKFN0cmluZyBwYXRoLAogICAgICB7Ym9vbCBmb2xsb3dMaW5rczogdHJ1ZX0pIHsKICAgIHJldHVybiBfZ2V0VHlwZShfdG9VdGY4QXJyYXkocGF0aCksIGZvbGxvd0xpbmtzKTsKICB9CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgZmluZHMgdGhlIHR5cGUgb2YgZmlsZSBzeXN0ZW0gb2JqZWN0IHRoYXQgYSBwYXRoIHBvaW50cyB0by4KICAgKgogICAqIFJldHVybnMgYSBbRmlsZVN5c3RlbUVudGl0eVR5cGVdLgogICAqCiAgICogUmV0dXJucyBbRmlsZVN5c3RlbUVudGl0eVR5cGUubGlua10gb25seSBpZiBbZm9sbG93TGlua3NdIGlzIGZhbHNlIGFuZCBpZgogICAqIFtwYXRoXSBwb2ludHMgdG8gYSBsaW5rLgogICAqCiAgICogUmV0dXJucyBbRmlsZVN5c3RlbUVudGl0eVR5cGUubm90Rm91bmRdIGlmIFtwYXRoXSBkb2VzIG5vdCBwb2ludCB0byBhIGZpbGUKICAgKiBzeXN0ZW0gb2JqZWN0IG9yIGlmIGFueSBvdGhlciBlcnJvciBvY2N1cnMgaW4gbG9va2luZyB1cCB0aGUgcGF0aC4KICAgKi8KICBzdGF0aWMgRmlsZVN5c3RlbUVudGl0eVR5cGUgdHlwZVN5bmMoU3RyaW5nIHBhdGgsIHtib29sIGZvbGxvd0xpbmtzOiB0cnVlfSkgewogICAgcmV0dXJuIF9nZXRUeXBlU3luYyhfdG9VdGY4QXJyYXkocGF0aCksIGZvbGxvd0xpbmtzKTsKICB9CgogIC8qKgogICAqIENoZWNrcyBpZiB0eXBlKHBhdGgsIGZvbGxvd0xpbmtzOiBmYWxzZSkgcmV0dXJucyBGaWxlU3lzdGVtRW50aXR5VHlwZS5saW5rLgogICAqLwogIHN0YXRpYyBGdXR1cmU8Ym9vbD4gaXNMaW5rKFN0cmluZyBwYXRoKSA9PiBfaXNMaW5rUmF3KF90b1V0ZjhBcnJheShwYXRoKSk7CgogIHN0YXRpYyBGdXR1cmU8Ym9vbD4gX2lzTGlua1JhdyhVaW50OExpc3QgcmF3UGF0aCkgPT4gX2dldFR5cGUocmF3UGF0aCwgZmFsc2UpCiAgICAgIC50aGVuKCh0eXBlKSA9PiAodHlwZSA9PSBGaWxlU3lzdGVtRW50aXR5VHlwZS5saW5rKSk7CgogIC8qKgogICAqIENoZWNrcyBpZiB0eXBlKHBhdGgpIHJldHVybnMgRmlsZVN5c3RlbUVudGl0eVR5cGUuZmlsZS4KICAgKi8KICBzdGF0aWMgRnV0dXJlPGJvb2w+IGlzRmlsZShTdHJpbmcgcGF0aCkgPT4gX2dldFR5cGUoX3RvVXRmOEFycmF5KHBhdGgpLCB0cnVlKQogICAgICAudGhlbigodHlwZSkgPT4gKHR5cGUgPT0gRmlsZVN5c3RlbUVudGl0eVR5cGUuZmlsZSkpOwoKICAvKioKICAgKiBDaGVja3MgaWYgdHlwZShwYXRoKSByZXR1cm5zIEZpbGVTeXN0ZW1FbnRpdHlUeXBlLmRpcmVjdG9yeS4KICAgKi8KICBzdGF0aWMgRnV0dXJlPGJvb2w+IGlzRGlyZWN0b3J5KFN0cmluZyBwYXRoKSA9PgogICAgICBfZ2V0VHlwZShfdG9VdGY4QXJyYXkocGF0aCksIHRydWUpCiAgICAgICAgICAudGhlbigodHlwZSkgPT4gKHR5cGUgPT0gRmlsZVN5c3RlbUVudGl0eVR5cGUuZGlyZWN0b3J5KSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgY2hlY2tzIGlmIHR5cGVTeW5jKHBhdGgsIGZvbGxvd0xpbmtzOiBmYWxzZSkgcmV0dXJucwogICAqIEZpbGVTeXN0ZW1FbnRpdHlUeXBlLmxpbmsuCiAgICovCiAgc3RhdGljIGJvb2wgaXNMaW5rU3luYyhTdHJpbmcgcGF0aCkgPT4gX2lzTGlua1Jhd1N5bmMoX3RvVXRmOEFycmF5KHBhdGgpKTsKCiAgc3RhdGljIGJvb2wgX2lzTGlua1Jhd1N5bmMocmF3UGF0aCkgPT4KICAgICAgKF9nZXRUeXBlU3luYyhyYXdQYXRoLCBmYWxzZSkgPT0gRmlsZVN5c3RlbUVudGl0eVR5cGUubGluayk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgY2hlY2tzIGlmIHR5cGVTeW5jKHBhdGgpIHJldHVybnMKICAgKiBGaWxlU3lzdGVtRW50aXR5VHlwZS5maWxlLgogICAqLwogIHN0YXRpYyBib29sIGlzRmlsZVN5bmMoU3RyaW5nIHBhdGgpID0+CiAgICAgIChfZ2V0VHlwZVN5bmMoX3RvVXRmOEFycmF5KHBhdGgpLCB0cnVlKSA9PSBGaWxlU3lzdGVtRW50aXR5VHlwZS5maWxlKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBjaGVja3MgaWYgdHlwZVN5bmMocGF0aCkgcmV0dXJucwogICAqIEZpbGVTeXN0ZW1FbnRpdHlUeXBlLmRpcmVjdG9yeS4KICAgKi8KICBzdGF0aWMgYm9vbCBpc0RpcmVjdG9yeVN5bmMoU3RyaW5nIHBhdGgpID0+CiAgICAgIChfZ2V0VHlwZVN5bmMoX3RvVXRmOEFycmF5KHBhdGgpLCB0cnVlKSA9PQogICAgICAgICAgRmlsZVN5c3RlbUVudGl0eVR5cGUuZGlyZWN0b3J5KTsKCiAgZXh0ZXJuYWwgc3RhdGljIF9nZXRUeXBlTmF0aXZlKAogICAgICBfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgsIGJvb2wgZm9sbG93TGlua3MpOwogIGV4dGVybmFsIHN0YXRpYyBfaWRlbnRpY2FsTmF0aXZlKAogICAgICBfTmFtZXNwYWNlIG5hbWVzcGFjZSwgU3RyaW5nIHBhdGgxLCBTdHJpbmcgcGF0aDIpOwogIGV4dGVybmFsIHN0YXRpYyBfcmVzb2x2ZVN5bWJvbGljTGlua3MoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCBwYXRoKTsKCiAgLy8gRmluZHMgdGhlIG5leHQtdG8tbGFzdCBjb21wb25lbnQgd2hlbiBkaXZpZGluZyBhdCBwYXRoIHNlcGFyYXRvcnMuCiAgc3RhdGljIGZpbmFsIFJlZ0V4cCBfcGFyZW50UmVnRXhwID0gUGxhdGZvcm0uaXNXaW5kb3dzCiAgICAgID8gbmV3IFJlZ0V4cChyJ1teL1xcXVsvXFxdK1teL1xcXScpCiAgICAgIDogbmV3IFJlZ0V4cChyJ1teL10vK1teL10nKTsKCiAgLyoqCiAgICogUmVtb3ZlcyB0aGUgZmluYWwgcGF0aCBjb21wb25lbnQgb2YgYSBwYXRoLCB1c2luZyB0aGUgcGxhdGZvcm0ncwogICAqIHBhdGggc2VwYXJhdG9yIHRvIHNwbGl0IHRoZSBwYXRoLgogICAqCiAgICogV2lsbCBub3QgcmVtb3ZlIHRoZSByb290IGNvbXBvbmVudCBvZiBhIFdpbmRvd3MgcGF0aCwgbGlrZSAiQzpcXCIgb3IKICAgKiAiXFxcXHNlcnZlcl9uYW1lXFwiLiBJZ25vcmVzIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9ycywgYW5kIGxlYXZlcyBubwogICAqIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9ycy4KICAgKi8KICBzdGF0aWMgU3RyaW5nIHBhcmVudE9mKFN0cmluZyBwYXRoKSB7CiAgICBpbnQgcm9vdEVuZCA9IC0xOwogICAgaWYgKFBsYXRmb3JtLmlzV2luZG93cykgewogICAgICBpZiAocGF0aC5zdGFydHNXaXRoKF9hYnNvbHV0ZVdpbmRvd3NQYXRoUGF0dGVybikpIHsKICAgICAgICAvLyBSb290IGVuZHMgYXQgZmlyc3QgLyBvciBcIGFmdGVyIHRoZSBmaXJzdCB0d28gY2hhcmFjdGVycy4KICAgICAgICByb290RW5kID0gcGF0aC5pbmRleE9mKG5ldyBSZWdFeHAocidbL1xcXScpLCAyKTsKICAgICAgICBpZiAocm9vdEVuZCA9PSAtMSkgcmV0dXJuIHBhdGg7CiAgICAgIH0gZWxzZSBpZiAocGF0aC5zdGFydHNXaXRoKCdcXCcpIHx8IHBhdGguc3RhcnRzV2l0aCgnLycpKSB7CiAgICAgICAgcm9vdEVuZCA9IDA7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAocGF0aC5zdGFydHNXaXRoKCcvJykpIHsKICAgICAgcm9vdEVuZCA9IDA7CiAgICB9CiAgICAvLyBJZ25vcmUgdHJhaWxpbmcgc2xhc2hlcy4KICAgIC8vIEFsbCBub24tdHJpdmlhbCBjYXNlcyBoYXZlIHNlcGFyYXRvcnMgYmV0d2VlbiB0d28gbm9uLXNlcGFyYXRvcnMuCiAgICBpbnQgcG9zID0gcGF0aC5sYXN0SW5kZXhPZihfcGFyZW50UmVnRXhwKTsKICAgIGlmIChwb3MgPiByb290RW5kKSB7CiAgICAgIHJldHVybiBwYXRoLnN1YnN0cmluZygwLCBwb3MgKyAxKTsKICAgIH0gZWxzZSBpZiAocm9vdEVuZCA+IC0xKSB7CiAgICAgIHJldHVybiBwYXRoLnN1YnN0cmluZygwLCByb290RW5kICsgMSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gJy4nOwogICAgfQogIH0KCiAgLyoqCiAgICogVGhlIGRpcmVjdG9yeSBjb250YWluaW5nIFt0aGlzXS4KICAgKi8KICBEaXJlY3RvcnkgZ2V0IHBhcmVudCA9PiBuZXcgRGlyZWN0b3J5KHBhcmVudE9mKHBhdGgpKTsKCiAgc3RhdGljIEZpbGVTeXN0ZW1FbnRpdHlUeXBlIF9nZXRUeXBlU3luY0hlbHBlcigKICAgICAgVWludDhMaXN0IHJhd1BhdGgsIGJvb2wgZm9sbG93TGlua3MpIHsKICAgIHZhciByZXN1bHQgPSBfZ2V0VHlwZU5hdGl2ZShfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIHJhd1BhdGgsIGZvbGxvd0xpbmtzKTsKICAgIF90aHJvd0lmRXJyb3IocmVzdWx0LCAnRXJyb3IgZ2V0dGluZyB0eXBlIG9mIEZpbGVTeXN0ZW1FbnRpdHknKTsKICAgIHJldHVybiBGaWxlU3lzdGVtRW50aXR5VHlwZS5fbG9va3VwKHJlc3VsdCk7CiAgfQoKICBzdGF0aWMgRmlsZVN5c3RlbUVudGl0eVR5cGUgX2dldFR5cGVTeW5jKAogICAgICBVaW50OExpc3QgcmF3UGF0aCwgYm9vbCBmb2xsb3dMaW5rcykgewogICAgSU9PdmVycmlkZXMgb3ZlcnJpZGVzID0gSU9PdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gX2dldFR5cGVTeW5jSGVscGVyKHJhd1BhdGgsIGZvbGxvd0xpbmtzKTsKICAgIH0KICAgIHJldHVybiBvdmVycmlkZXMuZnNlR2V0VHlwZVN5bmMoCiAgICAgICAgdXRmOC5kZWNvZGUocmF3UGF0aCwgYWxsb3dNYWxmb3JtZWQ6IHRydWUpLCBmb2xsb3dMaW5rcyk7CiAgfQoKICBzdGF0aWMgRnV0dXJlPEZpbGVTeXN0ZW1FbnRpdHlUeXBlPiBfZ2V0VHlwZVJlcXVlc3QoCiAgICAgIFVpbnQ4TGlzdCByYXdQYXRoLCBib29sIGZvbGxvd0xpbmtzKSB7CiAgICByZXR1cm4gX0ZpbGUuX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZSgKICAgICAgICBfSU9TZXJ2aWNlLmZpbGVUeXBlLCBbbnVsbCwgcmF3UGF0aCwgZm9sbG93TGlua3NdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAiRXJyb3IgZ2V0dGluZyB0eXBlIiwKICAgICAgICAgICAgdXRmOC5kZWNvZGUocmF3UGF0aCwgYWxsb3dNYWxmb3JtZWQ6IHRydWUpKTsKICAgICAgfQogICAgICByZXR1cm4gRmlsZVN5c3RlbUVudGl0eVR5cGUuX2xvb2t1cChyZXNwb25zZSk7CiAgICB9KTsKICB9CgogIHN0YXRpYyBGdXR1cmU8RmlsZVN5c3RlbUVudGl0eVR5cGU+IF9nZXRUeXBlKAogICAgICBVaW50OExpc3QgcmF3UGF0aCwgYm9vbCBmb2xsb3dMaW5rcykgewogICAgSU9PdmVycmlkZXMgb3ZlcnJpZGVzID0gSU9PdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gX2dldFR5cGVSZXF1ZXN0KHJhd1BhdGgsIGZvbGxvd0xpbmtzKTsKICAgIH0KICAgIHJldHVybiBvdmVycmlkZXMuZnNlR2V0VHlwZSgKICAgICAgICB1dGY4LmRlY29kZShyYXdQYXRoLCBhbGxvd01hbGZvcm1lZDogdHJ1ZSksIGZvbGxvd0xpbmtzKTsKICB9CgogIHN0YXRpYyBfdGhyb3dJZkVycm9yKE9iamVjdCByZXN1bHQsIFN0cmluZyBtc2csIFtTdHJpbmcgcGF0aF0pIHsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbihtc2csIHBhdGgsIHJlc3VsdCk7CiAgICB9IGVsc2UgaWYgKHJlc3VsdCBpcyBBcmd1bWVudEVycm9yKSB7CiAgICAgIHRocm93IHJlc3VsdDsKICAgIH0KICB9CgogIC8vIFRPRE8oYmtvbnlpKTogZmluZCBhIHdheSB0byBkbyB0aGlzIHdpdGggcmF3IHBhdGhzLgogIHN0YXRpYyBTdHJpbmcgX3RyaW1UcmFpbGluZ1BhdGhTZXBhcmF0b3JzKFN0cmluZyBwYXRoKSB7CiAgICAvLyBEb24ndCBoYW5kbGUgYXJndW1lbnQgZXJyb3JzIGhlcmUuCiAgICBpZiAocGF0aCA9PSBudWxsKSByZXR1cm4gcGF0aDsKICAgIGlmIChQbGF0Zm9ybS5pc1dpbmRvd3MpIHsKICAgICAgd2hpbGUgKHBhdGgubGVuZ3RoID4gMSAmJgogICAgICAgICAgKHBhdGguZW5kc1dpdGgoUGxhdGZvcm0ucGF0aFNlcGFyYXRvcikgfHwgcGF0aC5lbmRzV2l0aCgnLycpKSkgewogICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmxlbmd0aCAtIDEpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB3aGlsZSAocGF0aC5sZW5ndGggPiAxICYmIHBhdGguZW5kc1dpdGgoUGxhdGZvcm0ucGF0aFNlcGFyYXRvcikpIHsKICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoMCwgcGF0aC5sZW5ndGggLSAxKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHBhdGg7CiAgfQoKICAvLyBUT0RPKGJrb255aSk6IGZpbmQgYSB3YXkgdG8gZG8gdGhpcyB3aXRoIHJhdyBwYXRocy4KICBzdGF0aWMgU3RyaW5nIF9lbnN1cmVUcmFpbGluZ1BhdGhTZXBhcmF0b3JzKFN0cmluZyBwYXRoKSB7CiAgICAvLyBEb24ndCBoYW5kbGUgYXJndW1lbnQgZXJyb3JzIGhlcmUuCiAgICBpZiAocGF0aCA9PSBudWxsKSByZXR1cm4gcGF0aDsKICAgIGlmIChwYXRoLmlzRW1wdHkpIHBhdGggPSAnLic7CiAgICBpZiAoUGxhdGZvcm0uaXNXaW5kb3dzKSB7CiAgICAgIHdoaWxlICghcGF0aC5lbmRzV2l0aChQbGF0Zm9ybS5wYXRoU2VwYXJhdG9yKSAmJiAhcGF0aC5lbmRzV2l0aCgnLycpKSB7CiAgICAgICAgcGF0aCA9ICIkcGF0aCR7UGxhdGZvcm0ucGF0aFNlcGFyYXRvcn0iOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB3aGlsZSAoIXBhdGguZW5kc1dpdGgoUGxhdGZvcm0ucGF0aFNlcGFyYXRvcikpIHsKICAgICAgICBwYXRoID0gIiRwYXRoJHtQbGF0Zm9ybS5wYXRoU2VwYXJhdG9yfSI7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBwYXRoOwogIH0KfQoKLyoqCiAqIEJhc2UgZXZlbnQgY2xhc3MgZW1pdHRlZCBieSBbRmlsZVN5c3RlbUVudGl0eS53YXRjaF0uCiAqLwpjbGFzcyBGaWxlU3lzdGVtRXZlbnQgewogIC8qKgogICAqIEJpdGZpZWxkIGZvciBbRmlsZVN5c3RlbUVudGl0eS53YXRjaF0sIHRvIGVuYWJsZSBbRmlsZVN5c3RlbUNyZWF0ZUV2ZW50XXMuCiAgICovCiAgc3RhdGljIGNvbnN0IGludCBjcmVhdGUgPSAxIDw8IDA7CiAgQERlcHJlY2F0ZWQoIlVzZSBjcmVhdGUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBDUkVBVEUgPSAxIDw8IDA7CgogIC8qKgogICAqIEJpdGZpZWxkIGZvciBbRmlsZVN5c3RlbUVudGl0eS53YXRjaF0sIHRvIGVuYWJsZSBbRmlsZVN5c3RlbU1vZGlmeUV2ZW50XXMuCiAgICovCiAgc3RhdGljIGNvbnN0IGludCBtb2RpZnkgPSAxIDw8IDE7CiAgQERlcHJlY2F0ZWQoIlVzZSBtb2RpZnkgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBNT0RJRlkgPSAxIDw8IDE7CgogIC8qKgogICAqIEJpdGZpZWxkIGZvciBbRmlsZVN5c3RlbUVudGl0eS53YXRjaF0sIHRvIGVuYWJsZSBbRmlsZVN5c3RlbURlbGV0ZUV2ZW50XXMuCiAgICovCiAgc3RhdGljIGNvbnN0IGludCBkZWxldGUgPSAxIDw8IDI7CiAgQERlcHJlY2F0ZWQoIlVzZSBkZWxldGUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBERUxFVEUgPSAxIDw8IDI7CgogIC8qKgogICAqIEJpdGZpZWxkIGZvciBbRmlsZVN5c3RlbUVudGl0eS53YXRjaF0sIHRvIGVuYWJsZSBbRmlsZVN5c3RlbU1vdmVFdmVudF1zLgogICAqLwogIHN0YXRpYyBjb25zdCBpbnQgbW92ZSA9IDEgPDwgMzsKICBARGVwcmVjYXRlZCgiVXNlIG1vdmUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBNT1ZFID0gMSA8PCAzOwoKICAvKioKICAgKiBCaXRmaWVsZCBmb3IgW0ZpbGVTeXN0ZW1FbnRpdHkud2F0Y2hdLCBmb3IgZW5hYmxpbmcgYWxsIG9mIFtjcmVhdGVdLAogICAqIFttb2RpZnldLCBbZGVsZXRlXSBhbmQgW21vdmVdLgogICAqLwogIHN0YXRpYyBjb25zdCBpbnQgYWxsID0gY3JlYXRlIHwgbW9kaWZ5IHwgZGVsZXRlIHwgbW92ZTsKICBARGVwcmVjYXRlZCgiVXNlIGFsbCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IEFMTCA9IGNyZWF0ZSB8IG1vZGlmeSB8IGRlbGV0ZSB8IG1vdmU7CgogIHN0YXRpYyBjb25zdCBpbnQgX21vZGlmeUF0dHJpYnV0ZXMgPSAxIDw8IDQ7CiAgc3RhdGljIGNvbnN0IGludCBfZGVsZXRlU2VsZiA9IDEgPDwgNTsKICBzdGF0aWMgY29uc3QgaW50IF9pc0RpciA9IDEgPDwgNjsKCiAgLyoqCiAgICogVGhlIHR5cGUgb2YgZXZlbnQuIFNlZSBbRmlsZVN5c3RlbUV2ZW50XSBmb3IgYSBsaXN0IG9mIGV2ZW50cy4KICAgKi8KICBmaW5hbCBpbnQgdHlwZTsKCiAgLyoqCiAgICogVGhlIHBhdGggdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50LgogICAqCiAgICogRGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybSBhbmQgdGhlIEZpbGVTeXN0ZW1FbnRpdHksIHRoZSBwYXRoIG1heSBiZQogICAqIHJlbGF0aXZlLgogICAqLwogIGZpbmFsIFN0cmluZyBwYXRoOwoKICAvKioKICAgKiBJcyBgdHJ1ZWAgaWYgdGhlIGV2ZW50IHRhcmdldCB3YXMgYSBkaXJlY3RvcnkuCiAgICoKICAgKiBOb3RlIHRoYXQgaWYgdGhlIGZpbGUgaGFzIGJlZW4gZGVsZXRlZCBieSB0aGUgdGltZSB0aGUgZXZlbnQgaGFzIGFycml2ZWQsCiAgICogdGhpcyB3aWxsIGFsd2F5cyBiZSBgZmFsc2VgIG9uIFdpbmRvd3MuIEluIHBhcnRpY3VsYXIsIGl0IHdpbGwgYWx3YXlzIGJlCiAgICogYGZhbHNlYCBmb3IgYGRlbGV0ZWAgZXZlbnRzLgogICAqLwogIGZpbmFsIGJvb2wgaXNEaXJlY3Rvcnk7CgogIEZpbGVTeXN0ZW1FdmVudC5fKHRoaXMudHlwZSwgdGhpcy5wYXRoLCB0aGlzLmlzRGlyZWN0b3J5KTsKfQoKLyoqCiAqIEZpbGUgc3lzdGVtIGV2ZW50IGZvciBuZXdseSBjcmVhdGVkIGZpbGUgc3lzdGVtIG9iamVjdHMuCiAqLwpjbGFzcyBGaWxlU3lzdGVtQ3JlYXRlRXZlbnQgZXh0ZW5kcyBGaWxlU3lzdGVtRXZlbnQgewogIEZpbGVTeXN0ZW1DcmVhdGVFdmVudC5fKHBhdGgsIGlzRGlyZWN0b3J5KQogICAgICA6IHN1cGVyLl8oRmlsZVN5c3RlbUV2ZW50LmNyZWF0ZSwgcGF0aCwgaXNEaXJlY3RvcnkpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiRmlsZVN5c3RlbUNyZWF0ZUV2ZW50KCckcGF0aCcpIjsKfQoKLyoqCiAqIEZpbGUgc3lzdGVtIGV2ZW50IGZvciBtb2RpZmljYXRpb25zIG9mIGZpbGUgc3lzdGVtIG9iamVjdHMuCiAqLwpjbGFzcyBGaWxlU3lzdGVtTW9kaWZ5RXZlbnQgZXh0ZW5kcyBGaWxlU3lzdGVtRXZlbnQgewogIC8qKgogICAqIElmIHRoZSBjb250ZW50IHdhcyBjaGFuZ2VkIGFuZCBub3Qgb25seSB0aGUgYXR0cmlidXRlcywgW2NvbnRlbnRDaGFuZ2VkXQogICAqIGlzIGB0cnVlYC4KICAgKi8KICBmaW5hbCBib29sIGNvbnRlbnRDaGFuZ2VkOwoKICBGaWxlU3lzdGVtTW9kaWZ5RXZlbnQuXyhwYXRoLCBpc0RpcmVjdG9yeSwgdGhpcy5jb250ZW50Q2hhbmdlZCkKICAgICAgOiBzdXBlci5fKEZpbGVTeXN0ZW1FdmVudC5tb2RpZnksIHBhdGgsIGlzRGlyZWN0b3J5KTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgIkZpbGVTeXN0ZW1Nb2RpZnlFdmVudCgnJHBhdGgnLCBjb250ZW50Q2hhbmdlZD0kY29udGVudENoYW5nZWQpIjsKfQoKLyoqCiAqIEZpbGUgc3lzdGVtIGV2ZW50IGZvciBkZWxldGlvbiBvZiBmaWxlIHN5c3RlbSBvYmplY3RzLgogKi8KY2xhc3MgRmlsZVN5c3RlbURlbGV0ZUV2ZW50IGV4dGVuZHMgRmlsZVN5c3RlbUV2ZW50IHsKICBGaWxlU3lzdGVtRGVsZXRlRXZlbnQuXyhwYXRoLCBpc0RpcmVjdG9yeSkKICAgICAgOiBzdXBlci5fKEZpbGVTeXN0ZW1FdmVudC5kZWxldGUsIHBhdGgsIGlzRGlyZWN0b3J5KTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkZpbGVTeXN0ZW1EZWxldGVFdmVudCgnJHBhdGgnKSI7Cn0KCi8qKgogKiBGaWxlIHN5c3RlbSBldmVudCBmb3IgbW92aW5nIG9mIGZpbGUgc3lzdGVtIG9iamVjdHMuCiAqLwpjbGFzcyBGaWxlU3lzdGVtTW92ZUV2ZW50IGV4dGVuZHMgRmlsZVN5c3RlbUV2ZW50IHsKICAvKioKICAgKiBJZiB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBpcyBhYmxlIHRvIGlkZW50aWZ5IHRoZSBkZXN0aW5hdGlvbiBvZgogICAqIHRoZSBtb3ZlZCBmaWxlLCBbZGVzdGluYXRpb25dIHdpbGwgYmUgc2V0LiBPdGhlcndpc2UsIGl0IHdpbGwgYmUgYG51bGxgLgogICAqLwogIGZpbmFsIFN0cmluZyBkZXN0aW5hdGlvbjsKCiAgRmlsZVN5c3RlbU1vdmVFdmVudC5fKHBhdGgsIGlzRGlyZWN0b3J5LCB0aGlzLmRlc3RpbmF0aW9uKQogICAgICA6IHN1cGVyLl8oRmlsZVN5c3RlbUV2ZW50Lm1vdmUsIHBhdGgsIGlzRGlyZWN0b3J5KTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgdmFyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGJ1ZmZlci53cml0ZSgiRmlsZVN5c3RlbU1vdmVFdmVudCgnJHBhdGgnIik7CiAgICBpZiAoZGVzdGluYXRpb24gIT0gbnVsbCkgYnVmZmVyLndyaXRlKCIsICckZGVzdGluYXRpb24nIik7CiAgICBidWZmZXIud3JpdGUoJyknKTsKICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9Cn0KCmNsYXNzIF9GaWxlU3lzdGVtV2F0Y2hlciB7CiAgZXh0ZXJuYWwgc3RhdGljIFN0cmVhbTxGaWxlU3lzdGVtRXZlbnQ+IF93YXRjaCgKICAgICAgU3RyaW5nIHBhdGgsIGludCBldmVudHMsIGJvb2wgcmVjdXJzaXZlKTsKICBleHRlcm5hbCBzdGF0aWMgYm9vbCBnZXQgaXNTdXBwb3J0ZWQ7Cn0Kg+wATk48AREBBFEDPCIDBAEdPyIcAUQnJgE/IhwBQyYlASMfJB8jBRMBNAFETwIBBFBJMwQRNBohIiIaGgE/AQZMDQVDBhoBBkgGGwEGSAVDHQYbAQY0BUUGIwEGKQVNLAYSAQYpBhIBTB0BJRgZGS4SEwFAAQZPBUtQQwYqNx0mBiUEATMyHkEGNzQjRUZGMxUWBAEGRxwFTQYuNx0aBiEEAS8yHkEGSxsoIwhDHyVHSEg1FxgIBAEbFRsdHR8ZAQY4BU5QTk8WBhgkUBU7Oz0LLS0nGgQCAQRHA0JBMgNAA0IlA0srR1ADJwMoPAsDAxYDDlhRTRcDG2tRA1JMHAQiEBYBEwEGRQVKMwYlAQZKOAVHPkZGR0NCFAUGGQEGSA0FRz5GRUFHQh8GFQEGJgVARQVOTEsGMwEGNAVDBU5MOwYvAQY/IAVQDwU/SEdMPAVPTDIFT00MBVElQRwNBVAPBiopUSgmPggXCAQBBj8gBVAPBUNIR0xABU9MMgVPUQwFUSVDGgVQDwYmSUITBAEGSBkFMAVLDQVGTg4GMgEGRygFNAVJBUhDBjIBBiYFTElITiEFUE1RFAVFTUAGPiUBBjQFTElITiEFUE1QGQVGBlEBBjgFT0cFSklMRUwWTEEFTkAFTyMFQyA7BUlHHAVIBiFCQEI3HUgGPgQBPS0BPylKKC9ICBcIBAEGPhIFQAVPSERJBUwnBj4xHScGMQQBNC0BBkkFTUI9BhgeOw0jBgQBBk0FPgUwRyEGIQEdIS0hOh4NNwYEASMlNx81L0ggLg07IC4GBAE7SEYTBAEGTBIFT0hESQVLDAY6MR0rBjUEAQY5BSsGJTcdLQYrBAFNMi0yAT0VEwYnLyQSDRAGBAE2FREGJRdJBkEEAQZBBU0cBjgiNgQBBk8FJwVPHgVQSAZQOgQBBlEGTQFQPAEGPQZQPAEGQgYyKUUBBkggBk0BKUMBBjQgBilNAQY0JQYuMSsBIkIkOU8BSDkqIwEGRicFSkofBigWHjpFOShCFQgnEwYgSS8ZKR8tDRIGBAEGJgY5ATItTkUxBAEsLTEdNwYlQgQBNy0pTShFOQg1CAQBMC0xHTQGIUIEAUMdOCoUBgQBOTsqIx4gSzMIDUkzCAYRBAE5PSojIh5OMQgNNzEIBhEEAgEEOQQYBlAGJCQkAQZQBiQkJAEGUAYkJCQBBk4GIiIiAQZKJAY6IToBLykkAQZEBhIBBigFSQ8GFQEGNAVPTiIGGgE9AgEEPAQ2LTwBOQIBBD8ENgZOEAYdAUI8ARdIAgEEOgQ2LTwBOQIBBDgENAZNTgYcAT06ARYlMT8XHgQCARsyMCgCAR9kYXJ0OmlvL2ZpbGVfc3lzdGVtX2VudGl0eS5kYXJ0PW9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9iaW4vZmlsZV9zeXN0ZW1fZW50aXR5X3BhdGNoLmRhcnSC8i8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb21tb25fcGF0Y2guZGFydCI7CgpAcGF0Y2gKY2xhc3MgRmlsZVN0YXQgewogIEBwYXRjaAogIHN0YXRpYyBfc3RhdFN5bmMoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFN0cmluZyBwYXRoKSBuYXRpdmUgIkZpbGVfU3RhdCI7Cn0KCkBwYXRjaApjbGFzcyBGaWxlU3lzdGVtRW50aXR5IHsKICBAcGF0Y2gKICBzdGF0aWMgX2dldFR5cGVOYXRpdmUoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoLAogICAgICBib29sIGZvbGxvd0xpbmtzKSBuYXRpdmUgIkZpbGVfR2V0VHlwZSI7CiAgQHBhdGNoCiAgc3RhdGljIF9pZGVudGljYWxOYXRpdmUoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFN0cmluZyBwYXRoMSwgU3RyaW5nIHBhdGgyKQogICAgICBuYXRpdmUgIkZpbGVfQXJlSWRlbnRpY2FsIjsKICBAcGF0Y2gKICBzdGF0aWMgX3Jlc29sdmVTeW1ib2xpY0xpbmtzKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcGF0aCkKICAgICAgbmF0aXZlICJGaWxlX1Jlc29sdmVTeW1ib2xpY0xpbmtzIjsKfQoaAE5OPAEgAQcRCUoCAQcZCUEvCUwiCUUqAgErZGFydDppby1wYXRjaC9maWxlX3N5c3RlbV9lbnRpdHlfcGF0Y2guZGFydDRvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW8vaW9fcmVzb3VyY2VfaW5mby5kYXJ0of4vLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmlvOwoKYWJzdHJhY3QgY2xhc3MgX0lPUmVzb3VyY2VJbmZvIHsKICBmaW5hbCBTdHJpbmcgdHlwZTsKICBmaW5hbCBpbnQgaWQ7CiAgU3RyaW5nIGdldCBuYW1lOwogIHN0YXRpYyBpbnQgX2NvdW50ID0gMDsKCiAgc3RhdGljIGZpbmFsIFN0b3B3YXRjaCBfc3cgPSBuZXcgU3RvcHdhdGNoKCkuLnN0YXJ0KCk7CiAgc3RhdGljIGZpbmFsIF9zdGFydFRpbWUgPSBuZXcgRGF0ZVRpbWUubm93KCkubWlsbGlzZWNvbmRzU2luY2VFcG9jaDsKCiAgc3RhdGljIGRvdWJsZSBnZXQgdGltZXN0YW1wID0+IF9zdGFydFRpbWUgKyBfc3cuZWxhcHNlZE1pY3Jvc2Vjb25kcyAvIDEwMDA7CgogIF9JT1Jlc291cmNlSW5mbyh0aGlzLnR5cGUpIDogaWQgPSBfSU9SZXNvdXJjZUluZm8uZ2V0TmV4dElEKCk7CgogIC8vLyBHZXQgdGhlIGZ1bGwgc2V0IG9mIHZhbHVlcyBmb3IgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyBub3JtYWxseQogIC8vLyBsb29rZWQgdXAgYmFzZWQgb24gYW4gaWQgZnJvbSBhIHJlZmVyZW5jZVZhbHVlTWFwLgogIE1hcDxTdHJpbmcsIGR5bmFtaWM+IGdldCBmdWxsVmFsdWVNYXA7CgogIC8vLyBUaGUgcmVmZXJlbmNlIG1hcCwgdXNlZCB0byByZXR1cm4gYSBsaXN0IG9mIHZhbHVlcywgZS5nLiwgZ2V0dGluZwogIC8vLyBhbGwgb3BlbiBzb2NrZXRzLiBUaGUgc3RydWN0dXJlIG9mIHRoaXMgaXMgc2hhcmVkIGFtb25nIGFsbCBzdWJjbGFzc2VzLgogIE1hcDxTdHJpbmcsIGR5bmFtaWM+IGdldCByZWZlcmVuY2VWYWx1ZU1hcCA9PiB7CiAgICAgICAgLy8gVGhlIHR5cGUgZm9yIGEgcmVmZXJlbmNlIG9iamVjdCBpcyBwcmVmaXhlZCB3aXRoIEAgaW4gb2JzZXJ2YXRvcnkuCiAgICAgICAgJ3R5cGUnOiAnQCR0eXBlJywKICAgICAgICAnaWQnOiBpZCwKICAgICAgICAnbmFtZSc6IG5hbWUsCiAgICAgIH07CgogIHN0YXRpYyBpbnQgZ2V0TmV4dElEKCkgPT4gX2NvdW50Kys7Cn0KCmFic3RyYWN0IGNsYXNzIF9SZWFkV3JpdGVSZXNvdXJjZUluZm8gZXh0ZW5kcyBfSU9SZXNvdXJjZUluZm8gewogIGludCB0b3RhbFJlYWQ7CiAgaW50IHRvdGFsV3JpdHRlbjsKICBpbnQgcmVhZENvdW50OwogIGludCB3cml0ZUNvdW50OwogIGRvdWJsZSBsYXN0UmVhZDsKICBkb3VibGUgbGFzdFdyaXRlOwoKICAvLyBOb3QgYWxsIGNhbGwgc2l0ZXMgdXNlIHRoaXMuIEluIHNvbWUgY2FzZXMsIGUuZy4sIGEgc29ja2V0LCBhIHJlYWQgZG9lcwogIC8vIG5vdCBhbHdheXMgbWVhbiB0aGF0IHdlIGFjdHVhbGx5IHJlYWQgc29tZSBieXRlcyAod2UgbWF5IGRvIGEgcmVhZCB0byBzZWUKICAvLyBpZiB0aGVyZSBhcmUgc29tZSBieXRlcyBhdmFpbGFibGUpLgogIHZvaWQgYWRkUmVhZChpbnQgYnl0ZXMpIHsKICAgIHRvdGFsUmVhZCArPSBieXRlczsKICAgIHJlYWRDb3VudCsrOwogICAgbGFzdFJlYWQgPSBfSU9SZXNvdXJjZUluZm8udGltZXN0YW1wOwogIH0KCiAgLy8gSW4gY2FzZXMgd2hlcmUgd2UgcmVhZCBidXQgZGlkIG5vdCBuZWNlc3NhcmlseSBnZXQgYW55IGJ5dGVzLCB1c2UgdGhpcyB0bwogIC8vIHVwZGF0ZSB0aGUgcmVhZENvdW50IGFuZCB0aW1lc3RhbXAuIE1hbnVhbGx5IHVwZGF0ZSB0b3RhbFJlYWQgaWYgYW55IGJ5dGVzCiAgLy8gd2hlcmUgYWN0dWFsbHkgcmVhZC4KICB2b2lkIGRpZFJlYWQoKSB7CiAgICBhZGRSZWFkKDApOwogIH0KCiAgdm9pZCBhZGRXcml0ZShpbnQgYnl0ZXMpIHsKICAgIHRvdGFsV3JpdHRlbiArPSBieXRlczsKICAgIHdyaXRlQ291bnQrKzsKICAgIGxhc3RXcml0ZSA9IF9JT1Jlc291cmNlSW5mby50aW1lc3RhbXA7CiAgfQoKICBfUmVhZFdyaXRlUmVzb3VyY2VJbmZvKFN0cmluZyB0eXBlKQogICAgICA6IHRvdGFsUmVhZCA9IDAsCiAgICAgICAgdG90YWxXcml0dGVuID0gMCwKICAgICAgICByZWFkQ291bnQgPSAwLAogICAgICAgIHdyaXRlQ291bnQgPSAwLAogICAgICAgIGxhc3RSZWFkID0gMC4wLAogICAgICAgIGxhc3RXcml0ZSA9IDAuMCwKICAgICAgICBzdXBlcih0eXBlKTsKCiAgTWFwPFN0cmluZywgZHluYW1pYz4gZ2V0IGZ1bGxWYWx1ZU1hcCA9PiB7CiAgICAgICAgJ3R5cGUnOiB0eXBlLAogICAgICAgICdpZCc6IGlkLAogICAgICAgICduYW1lJzogbmFtZSwKICAgICAgICAndG90YWxSZWFkJzogdG90YWxSZWFkLAogICAgICAgICd0b3RhbFdyaXR0ZW4nOiB0b3RhbFdyaXR0ZW4sCiAgICAgICAgJ3JlYWRDb3VudCc6IHJlYWRDb3VudCwKICAgICAgICAnd3JpdGVDb3VudCc6IHdyaXRlQ291bnQsCiAgICAgICAgJ2xhc3RSZWFkJzogbGFzdFJlYWQsCiAgICAgICAgJ2xhc3RXcml0ZSc6IGxhc3RXcml0ZQogICAgICB9Owp9CgpjbGFzcyBfRmlsZVJlc291cmNlSW5mbyBleHRlbmRzIF9SZWFkV3JpdGVSZXNvdXJjZUluZm8gewogIHN0YXRpYyBjb25zdCBTdHJpbmcgX3R5cGUgPSAnX2ZpbGUnOwoKICBmaW5hbCBmaWxlOwoKICBzdGF0aWMgTWFwPGludCwgX0ZpbGVSZXNvdXJjZUluZm8+IG9wZW5GaWxlcyA9CiAgICAgIG5ldyBNYXA8aW50LCBfRmlsZVJlc291cmNlSW5mbz4oKTsKCiAgX0ZpbGVSZXNvdXJjZUluZm8odGhpcy5maWxlKSA6IHN1cGVyKF90eXBlKSB7CiAgICBGaWxlT3BlbmVkKHRoaXMpOwogIH0KCiAgc3RhdGljIEZpbGVPcGVuZWQoX0ZpbGVSZXNvdXJjZUluZm8gaW5mbykgewogICAgYXNzZXJ0KCFvcGVuRmlsZXMuY29udGFpbnNLZXkoaW5mby5pZCkpOwogICAgb3BlbkZpbGVzW2luZm8uaWRdID0gaW5mbzsKICB9CgogIHN0YXRpYyBGaWxlQ2xvc2VkKF9GaWxlUmVzb3VyY2VJbmZvIGluZm8pIHsKICAgIGFzc2VydChvcGVuRmlsZXMuY29udGFpbnNLZXkoaW5mby5pZCkpOwogICAgb3BlbkZpbGVzLnJlbW92ZShpbmZvLmlkKTsKICB9CgogIHN0YXRpYyBJdGVyYWJsZTxNYXA8U3RyaW5nLCBkeW5hbWljPj4gZ2V0T3BlbkZpbGVzTGlzdCgpIHsKICAgIHJldHVybiBuZXcgTGlzdC5mcm9tKG9wZW5GaWxlcy52YWx1ZXMubWFwKChlKSA9PiBlLnJlZmVyZW5jZVZhbHVlTWFwKSk7CiAgfQoKICBzdGF0aWMgRnV0dXJlPFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZT4gZ2V0T3BlbkZpbGVzKGZ1bmN0aW9uLCBwYXJhbXMpIHsKICAgIGFzc2VydChmdW5jdGlvbiA9PSAnZXh0LmRhcnQuaW8uZ2V0T3BlbkZpbGVzJyk7CiAgICB2YXIgZGF0YSA9IHsndHlwZSc6ICdfb3BlbmZpbGVzJywgJ2RhdGEnOiBnZXRPcGVuRmlsZXNMaXN0KCl9OwogICAgdmFyIGpzb25WYWx1ZSA9IGpzb24uZW5jb2RlKGRhdGEpOwogICAgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUobmV3IFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5yZXN1bHQoanNvblZhbHVlKSk7CiAgfQoKICBNYXA8U3RyaW5nLCBkeW5hbWljPiBnZXRGaWxlSW5mb01hcCgpIHsKICAgIHJldHVybiBmdWxsVmFsdWVNYXA7CiAgfQoKICBzdGF0aWMgRnV0dXJlPFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZT4gZ2V0RmlsZUluZm9NYXBCeUlEKGZ1bmN0aW9uLCBwYXJhbXMpIHsKICAgIGFzc2VydChwYXJhbXMuY29udGFpbnNLZXkoJ2lkJykpOwogICAgdmFyIGlkID0gaW50LnBhcnNlKHBhcmFtc1snaWQnXSk7CiAgICB2YXIgcmVzdWx0ID0KICAgICAgICBvcGVuRmlsZXMuY29udGFpbnNLZXkoaWQpID8gb3BlbkZpbGVzW2lkXS5nZXRGaWxlSW5mb01hcCgpIDoge307CiAgICB2YXIganNvblZhbHVlID0ganNvbi5lbmNvZGUocmVzdWx0KTsKICAgIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKG5ldyBTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2UucmVzdWx0KGpzb25WYWx1ZSkpOwogIH0KCiAgU3RyaW5nIGdldCBuYW1lIHsKICAgIHJldHVybiAnJHtmaWxlLnBhdGh9JzsKICB9Cn0KCmNsYXNzIF9Qcm9jZXNzUmVzb3VyY2VJbmZvIGV4dGVuZHMgX0lPUmVzb3VyY2VJbmZvIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF90eXBlID0gJ19wcm9jZXNzJzsKICBmaW5hbCBwcm9jZXNzOwogIGZpbmFsIGRvdWJsZSBzdGFydGVkQXQ7CgogIHN0YXRpYyBNYXA8aW50LCBfUHJvY2Vzc1Jlc291cmNlSW5mbz4gc3RhcnRlZFByb2Nlc3NlcyA9CiAgICAgIG5ldyBNYXA8aW50LCBfUHJvY2Vzc1Jlc291cmNlSW5mbz4oKTsKCiAgX1Byb2Nlc3NSZXNvdXJjZUluZm8odGhpcy5wcm9jZXNzKQogICAgICA6IHN0YXJ0ZWRBdCA9IF9JT1Jlc291cmNlSW5mby50aW1lc3RhbXAsCiAgICAgICAgc3VwZXIoX3R5cGUpIHsKICAgIFByb2Nlc3NTdGFydGVkKHRoaXMpOwogIH0KCiAgU3RyaW5nIGdldCBuYW1lID0+IHByb2Nlc3MuX3BhdGg7CgogIHZvaWQgc3RvcHBlZCgpIHsKICAgIFByb2Nlc3NTdG9wcGVkKHRoaXMpOwogIH0KCiAgTWFwPFN0cmluZywgZHluYW1pYz4gZ2V0IGZ1bGxWYWx1ZU1hcCA9PiB7CiAgICAgICAgJ3R5cGUnOiB0eXBlLAogICAgICAgICdpZCc6IGlkLAogICAgICAgICduYW1lJzogbmFtZSwKICAgICAgICAncGlkJzogcHJvY2Vzcy5waWQsCiAgICAgICAgJ3N0YXJ0ZWRBdCc6IHN0YXJ0ZWRBdCwKICAgICAgICAnYXJndW1lbnRzJzogcHJvY2Vzcy5fYXJndW1lbnRzLAogICAgICAgICd3b3JraW5nRGlyZWN0b3J5JzoKICAgICAgICAgICAgcHJvY2Vzcy5fd29ya2luZ0RpcmVjdG9yeSA9PSBudWxsID8gJy4nIDogcHJvY2Vzcy5fd29ya2luZ0RpcmVjdG9yeSwKICAgICAgfTsKCiAgc3RhdGljIFByb2Nlc3NTdGFydGVkKF9Qcm9jZXNzUmVzb3VyY2VJbmZvIGluZm8pIHsKICAgIGFzc2VydCghc3RhcnRlZFByb2Nlc3Nlcy5jb250YWluc0tleShpbmZvLmlkKSk7CiAgICBzdGFydGVkUHJvY2Vzc2VzW2luZm8uaWRdID0gaW5mbzsKICB9CgogIHN0YXRpYyBQcm9jZXNzU3RvcHBlZChfUHJvY2Vzc1Jlc291cmNlSW5mbyBpbmZvKSB7CiAgICBhc3NlcnQoc3RhcnRlZFByb2Nlc3Nlcy5jb250YWluc0tleShpbmZvLmlkKSk7CiAgICBzdGFydGVkUHJvY2Vzc2VzLnJlbW92ZShpbmZvLmlkKTsKICB9CgogIHN0YXRpYyBJdGVyYWJsZTxNYXA8U3RyaW5nLCBkeW5hbWljPj4gZ2V0U3RhcnRlZFByb2Nlc3Nlc0xpc3QoKSA9PgogICAgICBuZXcgTGlzdC5mcm9tKHN0YXJ0ZWRQcm9jZXNzZXMudmFsdWVzLm1hcCgoZSkgPT4gZS5yZWZlcmVuY2VWYWx1ZU1hcCkpOwoKICBzdGF0aWMgRnV0dXJlPFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZT4gZ2V0U3RhcnRlZFByb2Nlc3NlcygKICAgICAgU3RyaW5nIGZ1bmN0aW9uLCBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtcykgewogICAgYXNzZXJ0KGZ1bmN0aW9uID09ICdleHQuZGFydC5pby5nZXRQcm9jZXNzZXMnKTsKICAgIHZhciBkYXRhID0geyd0eXBlJzogJ19zdGFydGVkcHJvY2Vzc2VzJywgJ2RhdGEnOiBnZXRTdGFydGVkUHJvY2Vzc2VzTGlzdCgpfTsKICAgIHZhciBqc29uVmFsdWUgPSBqc29uLmVuY29kZShkYXRhKTsKICAgIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKG5ldyBTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2UucmVzdWx0KGpzb25WYWx1ZSkpOwogIH0KCiAgc3RhdGljIEZ1dHVyZTxTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2U+IGdldFByb2Nlc3NJbmZvTWFwQnlJZCgKICAgICAgU3RyaW5nIGZ1bmN0aW9uLCBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtcykgewogICAgdmFyIGlkID0gaW50LnBhcnNlKHBhcmFtc1snaWQnXSk7CiAgICB2YXIgcmVzdWx0ID0gc3RhcnRlZFByb2Nlc3Nlcy5jb250YWluc0tleShpZCkKICAgICAgICA/IHN0YXJ0ZWRQcm9jZXNzZXNbaWRdLmZ1bGxWYWx1ZU1hcAogICAgICAgIDoge307CiAgICB2YXIganNvblZhbHVlID0ganNvbi5lbmNvZGUocmVzdWx0KTsKICAgIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKG5ldyBTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2UucmVzdWx0KGpzb25WYWx1ZSkpOwogIH0KfQoKY2xhc3MgX1NvY2tldFJlc291cmNlSW5mbyBleHRlbmRzIF9SZWFkV3JpdGVSZXNvdXJjZUluZm8gewogIHN0YXRpYyBjb25zdCBTdHJpbmcgX3RjcFN0cmluZyA9ICdUQ1AnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX3VkcFN0cmluZyA9ICdVRFAnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX3R5cGUgPSAnX3NvY2tldCc7CgogIGZpbmFsIC8qX05hdGl2ZVNvY2tldHwqLyBzb2NrZXQ7CgogIHN0YXRpYyBNYXA8aW50LCBfU29ja2V0UmVzb3VyY2VJbmZvPiBvcGVuU29ja2V0cyA9CiAgICAgIG5ldyBNYXA8aW50LCBfU29ja2V0UmVzb3VyY2VJbmZvPigpOwoKICBfU29ja2V0UmVzb3VyY2VJbmZvKHRoaXMuc29ja2V0KSA6IHN1cGVyKF90eXBlKSB7CiAgICBTb2NrZXRPcGVuZWQodGhpcyk7CiAgfQoKICBTdHJpbmcgZ2V0IG5hbWUgewogICAgaWYgKHNvY2tldC5pc0xpc3RlbmluZykgewogICAgICByZXR1cm4gJ2xpc3RlbmluZzoke3NvY2tldC5hZGRyZXNzLmhvc3R9OiR7c29ja2V0LnBvcnR9JzsKICAgIH0KICAgIHZhciByZW1vdGUgPSAnJzsKICAgIHRyeSB7CiAgICAgIHZhciByZW1vdGVIb3N0ID0gc29ja2V0LnJlbW90ZUFkZHJlc3MuaG9zdDsKICAgICAgdmFyIHJlbW90ZVBvcnQgPSBzb2NrZXQucmVtb3RlUG9ydDsKICAgICAgcmVtb3RlID0gJyAtPiAkcmVtb3RlSG9zdDokcmVtb3RlUG9ydCc7CiAgICB9IGNhdGNoIChlKSB7fSAvLyBpZ25vcmVkIGlmIHdlIGNhbid0IGdldCB0aGUgaW5mb3JtYXRpb24KICAgIHJldHVybiAnJHtzb2NrZXQuYWRkcmVzcy5ob3N0fToke3NvY2tldC5wb3J0fSRyZW1vdGUnOwogIH0KCiAgc3RhdGljIEl0ZXJhYmxlPE1hcDxTdHJpbmcsIGR5bmFtaWM+PiBnZXRPcGVuU29ja2V0c0xpc3QoKSB7CiAgICByZXR1cm4gbmV3IExpc3QuZnJvbShvcGVuU29ja2V0cy52YWx1ZXMubWFwKChlKSA9PiBlLnJlZmVyZW5jZVZhbHVlTWFwKSk7CiAgfQoKICBNYXA8U3RyaW5nLCBkeW5hbWljPiBnZXRTb2NrZXRJbmZvTWFwKCkgewogICAgdmFyIHJlc3VsdCA9IGZ1bGxWYWx1ZU1hcDsKICAgIHJlc3VsdFsnc29ja2V0VHlwZSddID0gc29ja2V0LmlzVGNwID8gX3RjcFN0cmluZyA6IF91ZHBTdHJpbmc7CiAgICByZXN1bHRbJ2xpc3RlbmluZyddID0gc29ja2V0LmlzTGlzdGVuaW5nOwogICAgcmVzdWx0Wydob3N0J10gPSBzb2NrZXQuYWRkcmVzcy5ob3N0OwogICAgcmVzdWx0Wydwb3J0J10gPSBzb2NrZXQucG9ydDsKICAgIGlmICghc29ja2V0LmlzTGlzdGVuaW5nKSB7CiAgICAgIHRyeSB7CiAgICAgICAgcmVzdWx0WydyZW1vdGVIb3N0J10gPSBzb2NrZXQucmVtb3RlQWRkcmVzcy5ob3N0OwogICAgICAgIHJlc3VsdFsncmVtb3RlUG9ydCddID0gc29ja2V0LnJlbW90ZVBvcnQ7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAvLyBVRFAuCiAgICAgICAgcmVzdWx0WydyZW1vdGVQb3J0J10gPSAnTkEnOwogICAgICAgIHJlc3VsdFsncmVtb3RlSG9zdCddID0gJ05BJzsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmVzdWx0WydyZW1vdGVQb3J0J10gPSAnTkEnOwogICAgICByZXN1bHRbJ3JlbW90ZUhvc3QnXSA9ICdOQSc7CiAgICB9CiAgICByZXN1bHRbJ2FkZHJlc3NUeXBlJ10gPSBzb2NrZXQuYWRkcmVzcy50eXBlLm5hbWU7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIEZ1dHVyZTxTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2U+IGdldFNvY2tldEluZm9NYXBCeUlEKAogICAgICBTdHJpbmcgZnVuY3Rpb24sIE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1zKSB7CiAgICBhc3NlcnQocGFyYW1zLmNvbnRhaW5zS2V5KCdpZCcpKTsKICAgIHZhciBpZCA9IGludC5wYXJzZShwYXJhbXNbJ2lkJ10pOwogICAgdmFyIHJlc3VsdCA9CiAgICAgICAgb3BlblNvY2tldHMuY29udGFpbnNLZXkoaWQpID8gb3BlblNvY2tldHNbaWRdLmdldFNvY2tldEluZm9NYXAoKSA6IHt9OwogICAgdmFyIGpzb25WYWx1ZSA9IGpzb24uZW5jb2RlKHJlc3VsdCk7CiAgICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZShuZXcgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlLnJlc3VsdChqc29uVmFsdWUpKTsKICB9CgogIHN0YXRpYyBGdXR1cmU8U2VydmljZUV4dGVuc2lvblJlc3BvbnNlPiBnZXRPcGVuU29ja2V0cyhmdW5jdGlvbiwgcGFyYW1zKSB7CiAgICBhc3NlcnQoZnVuY3Rpb24gPT0gJ2V4dC5kYXJ0LmlvLmdldE9wZW5Tb2NrZXRzJyk7CiAgICB2YXIgZGF0YSA9IHsndHlwZSc6ICdfb3BlbnNvY2tldHMnLCAnZGF0YSc6IGdldE9wZW5Tb2NrZXRzTGlzdCgpfTsKICAgIHZhciBqc29uVmFsdWUgPSBqc29uLmVuY29kZShkYXRhKTsKICAgIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKG5ldyBTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2UucmVzdWx0KGpzb25WYWx1ZSkpOwogIH0KCiAgc3RhdGljIFNvY2tldE9wZW5lZChfU29ja2V0UmVzb3VyY2VJbmZvIGluZm8pIHsKICAgIGFzc2VydCghb3BlblNvY2tldHMuY29udGFpbnNLZXkoaW5mby5pZCkpOwogICAgb3BlblNvY2tldHNbaW5mby5pZF0gPSBpbmZvOwogIH0KCiAgc3RhdGljIFNvY2tldENsb3NlZChfU29ja2V0UmVzb3VyY2VJbmZvIGluZm8pIHsKICAgIGFzc2VydChvcGVuU29ja2V0cy5jb250YWluc0tleShpbmZvLmlkKSk7CiAgICBvcGVuU29ja2V0cy5yZW1vdmUoaW5mby5pZCk7CiAgfQp9CoEcAE5OPAERASEVEBMZATlHAU4BQQFROSkBSE4yThoSFgkBJgIBQBEUERITFAFNTykcGBEqBAFPUBoTEAQBHRsSKwQBJhcaFxgYGRUBLRYSFiAmICIeHwkCATknAQ4BMSkBMBYEAS4tHwQBLiwfBAE9TAQBSzRDJ00EASoZBAFRJiYRSSlNBAEUGwQCATUqERoBOywBJS8XGgQBJAETGgQBLRYSFhwgKRxRCQE1NCYEATUzJgQBRU4BPzU0USdNBAFBNSYyLA4pTQQCATsqKikBIwE1KwE0GAQBFB5ABhUKMiouPjsEAT9OBAEsH0MuKiIfDDoyFBAlJQgNIyMGNhMEAUA1JiYRTylNBAFNNkcnTQQBMi8hBAEyLiEEAgEdZGFydDppby9pb19yZXNvdXJjZV9pbmZvLmRhcnQrb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2lvL2lvX3NpbmsuZGFydKRfLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pbzsKCi8qKgogKiBBIGNvbWJpbmVkIGJ5dGUgYW5kIHRleHQgb3V0cHV0LgogKgogKiBBbiBbSU9TaW5rXSBjb21iaW5lcyBhIFtTdHJlYW1TaW5rXSBvZiBieXRlcyB3aXRoIGEgW1N0cmluZ1NpbmtdLAogKiBhbmQgYWxsb3dzIGVhc3kgb3V0cHV0IG9mIGJvdGggYnl0ZXMgYW5kIHRleHQuCiAqCiAqIFdyaXRpbmcgdGV4dCAoW3dyaXRlXSkgYW5kIGFkZGluZyBieXRlcyAoW2FkZF0pIG1heSBiZSBpbnRlcmxlYXZlZCBmcmVlbHkuCiAqCiAqIFdoaWxlIGEgc3RyZWFtIGlzIGJlaW5nIGFkZGVkIHVzaW5nIFthZGRTdHJlYW1dLCBhbnkgZnVydGhlciBhdHRlbXB0cwogKiB0byBhZGQgb3Igd3JpdGUgdG8gdGhlIFtJT1NpbmtdIHdpbGwgZmFpbCB1bnRpbCB0aGUgW2FkZFN0cmVhbV0gY29tcGxldGVzLgogKgogKiBJdCBpcyBhbiBlcnJvciB0byBhZGQgZGF0YSB0byB0aGUgW0lPU2lua10gYWZ0ZXIgdGhlIHNpbmsgaXMgY2xvc2VkLgogKi8KYWJzdHJhY3QgY2xhc3MgSU9TaW5rIGltcGxlbWVudHMgU3RyZWFtU2luazxMaXN0PGludD4+LCBTdHJpbmdTaW5rIHsKICAvKioKICAgKiBDcmVhdGUgYW4gW0lPU2lua10gdGhhdCBvdXRwdXRzIHRvIGEgW3RhcmdldF0gW1N0cmVhbUNvbnN1bWVyXSBvZiBieXRlcy4KICAgKgogICAqIFRleHQgd3JpdHRlbiB0byBbU3RyZWFtU2lua10gbWV0aG9kcyBpcyBlbmNvZGVkIHRvIGJ5dGVzIHVzaW5nIFtlbmNvZGluZ10KICAgKiBiZWZvcmUgYmVpbmcgb3V0cHV0IG9uIFt0YXJnZXRdLgogICAqLwogIGZhY3RvcnkgSU9TaW5rKFN0cmVhbUNvbnN1bWVyPExpc3Q8aW50Pj4gdGFyZ2V0LCB7RW5jb2RpbmcgZW5jb2Rpbmc6IHV0Zjh9KSA9PgogICAgICBuZXcgX0lPU2lua0ltcGwodGFyZ2V0LCBlbmNvZGluZyk7CgogIC8qKgogICAqIFRoZSBbRW5jb2RpbmddIHVzZWQgd2hlbiB3cml0aW5nIHN0cmluZ3MuIERlcGVuZGluZyBvbiB0aGUKICAgKiB1bmRlcmx5aW5nIGNvbnN1bWVyIHRoaXMgcHJvcGVydHkgbWlnaHQgYmUgbXV0YWJsZS4KICAgKi8KICBFbmNvZGluZyBlbmNvZGluZzsKCiAgLyoqCiAgICogQWRkcyBieXRlIFtkYXRhXSB0byB0aGUgdGFyZ2V0IGNvbnN1bWVyLCBpZ25vcmluZyBbZW5jb2RpbmddLgogICAqCiAgICogVGhlIFtlbmNvZGluZ10gZG9lcyBub3QgYXBwbHkgdG8gdGhpcyBtZXRob2QsIGFuZCB0aGUgYGRhdGFgIGxpc3QgaXMgcGFzc2VkCiAgICogZGlyZWN0bHkgdG8gdGhlIHRhcmdldCBjb25zdW1lciBhcyBhIHN0cmVhbSBldmVudC4KICAgKgogICAqIFRoaXMgZnVuY3Rpb24gbXVzdCBub3QgYmUgY2FsbGVkIHdoZW4gYSBzdHJlYW0gaXMgY3VycmVudGx5IGJlaW5nIGFkZGVkCiAgICogdXNpbmcgW2FkZFN0cmVhbV0uCiAgICoKICAgKiBUaGlzIG9wZXJhdGlvbiBpcyBub24tYmxvY2tpbmcuIFNlZSBbZmx1c2hdIG9yIFtkb25lXSBmb3IgaG93IHRvIGdldCBhbnkKICAgKiBlcnJvcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgY2FsbC4KICAgKgogICAqIFRoZSBkYXRhIGxpc3Qgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCBhZnRlciBpdCBoYXMgYmVlbiBwYXNzZWQgdG8gYGFkZGAuCiAgICovCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGRhdGEpOwoKICAvKioKICAgKiBDb252ZXJ0cyBbb2JqXSB0byBhIFN0cmluZyBieSBpbnZva2luZyBbT2JqZWN0LnRvU3RyaW5nXSBhbmQKICAgKiBbYWRkXXMgdGhlIGVuY29kaW5nIG9mIHRoZSByZXN1bHQgdG8gdGhlIHRhcmdldCBjb25zdW1lci4KICAgKgogICAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vbi1ibG9ja2luZy4gU2VlIFtmbHVzaF0gb3IgW2RvbmVdIGZvciBob3cgdG8gZ2V0IGFueQogICAqIGVycm9ycyBnZW5lcmF0ZWQgYnkgdGhpcyBjYWxsLgogICAqLwogIHZvaWQgd3JpdGUoT2JqZWN0IG9iaik7CgogIC8qKgogICAqIEl0ZXJhdGVzIG92ZXIgdGhlIGdpdmVuIFtvYmplY3RzXSBhbmQgW3dyaXRlXXMgdGhlbSBpbiBzZXF1ZW5jZS4KICAgKgogICAqIElmIFtzZXBhcmF0b3JdIGlzIHByb3ZpZGVkLCBhIGB3cml0ZWAgd2l0aCB0aGUgYHNlcGFyYXRvcmAgaXMgcGVyZm9ybWVkCiAgICogYmV0d2VlbiBhbnkgdHdvIGVsZW1lbnRzIG9mIG9iamVjdHNgLgogICAqCiAgICogVGhpcyBvcGVyYXRpb24gaXMgbm9uLWJsb2NraW5nLiBTZWUgW2ZsdXNoXSBvciBbZG9uZV0gZm9yIGhvdyB0byBnZXQgYW55CiAgICogZXJyb3JzIGdlbmVyYXRlZCBieSB0aGlzIGNhbGwuCiAgICovCiAgdm9pZCB3cml0ZUFsbChJdGVyYWJsZSBvYmplY3RzLCBbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSk7CgogIC8qKgogICAqIENvbnZlcnRzIFtvYmpdIHRvIGEgU3RyaW5nIGJ5IGludm9raW5nIFtPYmplY3QudG9TdHJpbmddIGFuZAogICAqIHdyaXRlcyB0aGUgcmVzdWx0IHRvIGB0aGlzYCwgZm9sbG93ZWQgYnkgYSBuZXdsaW5lLgogICAqCiAgICogVGhpcyBvcGVyYXRpb24gaXMgbm9uLWJsb2NraW5nLiBTZWUgW2ZsdXNoXSBvciBbZG9uZV0gZm9yIGhvdyB0byBnZXQgYW55CiAgICogZXJyb3JzIGdlbmVyYXRlZCBieSB0aGlzIGNhbGwuCiAgICovCiAgdm9pZCB3cml0ZWxuKFtPYmplY3Qgb2JqID0gIiJdKTsKCiAgLyoqCiAgICogV3JpdGVzIHRoZSBjaGFyYWN0ZXIgb2YgW2NoYXJDb2RlXS4KICAgKgogICAqIFRoaXMgbWV0aG9kIGlzIGVxdWl2YWxlbnQgdG8gYHdyaXRlKG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKSlgLgogICAqCiAgICogVGhpcyBvcGVyYXRpb24gaXMgbm9uLWJsb2NraW5nLiBTZWUgW2ZsdXNoXSBvciBbZG9uZV0gZm9yIGhvdyB0byBnZXQgYW55CiAgICogZXJyb3JzIGdlbmVyYXRlZCBieSB0aGlzIGNhbGwuCiAgICovCiAgdm9pZCB3cml0ZUNoYXJDb2RlKGludCBjaGFyQ29kZSk7CgogIC8qKgogICAqIFBhc3NlcyB0aGUgZXJyb3IgdG8gdGhlIHRhcmdldCBjb25zdW1lciBhcyBhbiBlcnJvciBldmVudC4KICAgKgogICAqIFRoaXMgZnVuY3Rpb24gbXVzdCBub3QgYmUgY2FsbGVkIHdoZW4gYSBzdHJlYW0gaXMgY3VycmVudGx5IGJlaW5nIGFkZGVkCiAgICogdXNpbmcgW2FkZFN0cmVhbV0uCiAgICoKICAgKiBUaGlzIG9wZXJhdGlvbiBpcyBub24tYmxvY2tpbmcuIFNlZSBbZmx1c2hdIG9yIFtkb25lXSBmb3IgaG93IHRvIGdldCBhbnkKICAgKiBlcnJvcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgY2FsbC4KICAgKi8KICB2b2lkIGFkZEVycm9yKGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSk7CgogIC8qKgogICAqIEFkZHMgYWxsIGVsZW1lbnRzIG9mIHRoZSBnaXZlbiBbc3RyZWFtXSB0byBgdGhpc2AuCiAgICoKICAgKiBSZXR1cm5zIGEgW0Z1dHVyZV0gdGhhdCBjb21wbGV0ZXMgd2hlbgogICAqIGFsbCBlbGVtZW50cyBvZiB0aGUgZ2l2ZW4gW3N0cmVhbV0gYXJlIGFkZGVkIHRvIGB0aGlzYC4KICAgKgogICAqIFRoaXMgZnVuY3Rpb24gbXVzdCBub3QgYmUgY2FsbGVkIHdoZW4gYSBzdHJlYW0gaXMgY3VycmVudGx5IGJlaW5nIGFkZGVkCiAgICogdXNpbmcgdGhpcyBmdW5jdGlvbi4KICAgKi8KICBGdXR1cmUgYWRkU3RyZWFtKFN0cmVhbTxMaXN0PGludD4+IHN0cmVhbSk7CgogIC8qKgogICAqIFJldHVybnMgYSBbRnV0dXJlXSB0aGF0IGNvbXBsZXRlcyBvbmNlIGFsbCBidWZmZXJlZCBkYXRhIGlzIGFjY2VwdGVkIGJ5IHRoZQogICAqIHVuZGVybHlpbmcgW1N0cmVhbUNvbnN1bWVyXS4KICAgKgogICAqIFRoaXMgbWV0aG9kIG11c3Qgbm90IGJlIGNhbGxlZCB3aGlsZSBhbiBbYWRkU3RyZWFtXSBpcyBpbmNvbXBsZXRlLgogICAqCiAgICogTk9URTogVGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgYXMgdGhlIGRhdGEgYmVpbmcgZmx1c2hlZCBieSB0aGUKICAgKiBvcGVyYXRpbmcgc3lzdGVtLgogICAqLwogIEZ1dHVyZSBmbHVzaCgpOwoKICAvKioKICAgKiBDbG9zZSB0aGUgdGFyZ2V0IGNvbnN1bWVyLgogICAqCiAgICogTk9URTogV3JpdGVzIHRvIHRoZSBbSU9TaW5rXSBtYXkgYmUgYnVmZmVyZWQsIGFuZCBtYXkgbm90IGJlIGZsdXNoZWQgYnkKICAgKiBhIGNhbGwgdG8gYGNsb3NlKClgLiBUbyBmbHVzaCBhbGwgYnVmZmVyZWQgd3JpdGVzLCBjYWxsIGBmbHVzaCgpYCBiZWZvcmUKICAgKiBjYWxsaW5nIGBjbG9zZSgpYC4KICAgKi8KICBGdXR1cmUgY2xvc2UoKTsKCiAgLyoqCiAgICogR2V0IGEgZnV0dXJlIHRoYXQgd2lsbCBjb21wbGV0ZSB3aGVuIHRoZSBjb25zdW1lciBjbG9zZXMsIG9yIHdoZW4gYW4KICAgKiBlcnJvciBvY2N1cnMuIFRoaXMgZnV0dXJlIGlzIGlkZW50aWNhbCB0byB0aGUgZnV0dXJlIHJldHVybmVkIGJ5CiAgICogW2Nsb3NlXS4KICAgKi8KICBGdXR1cmUgZ2V0IGRvbmU7Cn0KCmNsYXNzIF9TdHJlYW1TaW5rSW1wbDxUPiBpbXBsZW1lbnRzIFN0cmVhbVNpbms8VD4gewogIGZpbmFsIFN0cmVhbUNvbnN1bWVyPFQ+IF90YXJnZXQ7CiAgZmluYWwgQ29tcGxldGVyIF9kb25lQ29tcGxldGVyID0gbmV3IENvbXBsZXRlcigpOwogIFN0cmVhbUNvbnRyb2xsZXI8VD4gX2NvbnRyb2xsZXJJbnN0YW5jZTsKICBDb21wbGV0ZXIgX2NvbnRyb2xsZXJDb21wbGV0ZXI7CiAgYm9vbCBfaXNDbG9zZWQgPSBmYWxzZTsKICBib29sIF9pc0JvdW5kID0gZmFsc2U7CiAgYm9vbCBfaGFzRXJyb3IgPSBmYWxzZTsKCiAgX1N0cmVhbVNpbmtJbXBsKHRoaXMuX3RhcmdldCk7CgogIHZvaWQgYWRkKFQgZGF0YSkgewogICAgaWYgKF9pc0Nsb3NlZCkgewogICAgICB0aHJvdyBTdGF0ZUVycm9yKCJTdHJlYW1TaW5rIGlzIGNsb3NlZCIpOwogICAgfQogICAgX2NvbnRyb2xsZXIuYWRkKGRhdGEpOwogIH0KCiAgdm9pZCBhZGRFcnJvcihlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIGlmIChfaXNDbG9zZWQpIHsKICAgICAgdGhyb3cgU3RhdGVFcnJvcigiU3RyZWFtU2luayBpcyBjbG9zZWQiKTsKICAgIH0KICAgIF9jb250cm9sbGVyLmFkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIEZ1dHVyZSBhZGRTdHJlYW0oU3RyZWFtPFQ+IHN0cmVhbSkgewogICAgaWYgKF9pc0JvdW5kKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJTdHJlYW1TaW5rIGlzIGFscmVhZHkgYm91bmQgdG8gYSBzdHJlYW0iKTsKICAgIH0KICAgIGlmIChfaGFzRXJyb3IpIHJldHVybiBkb25lOwoKICAgIF9pc0JvdW5kID0gdHJ1ZTsKICAgIHZhciBmdXR1cmUgPSBfY29udHJvbGxlckNvbXBsZXRlciA9PSBudWxsCiAgICAgICAgPyBfdGFyZ2V0LmFkZFN0cmVhbShzdHJlYW0pCiAgICAgICAgOiBfY29udHJvbGxlckNvbXBsZXRlci5mdXR1cmUudGhlbigoXykgPT4gX3RhcmdldC5hZGRTdHJlYW0oc3RyZWFtKSk7CiAgICBfY29udHJvbGxlckluc3RhbmNlPy5jbG9zZSgpOwoKICAgIC8vIFdhaXQgZm9yIGFueSBwZW5kaW5nIGV2ZW50cyBpbiBbX2NvbnRyb2xsZXJdIHRvIGJlIGRpc3BhdGNoZWQgYmVmb3JlCiAgICAvLyBhZGRpbmcgW3N0cmVhbV0uCiAgICByZXR1cm4gZnV0dXJlLndoZW5Db21wbGV0ZSgoKSB7CiAgICAgIF9pc0JvdW5kID0gZmFsc2U7CiAgICB9KTsKICB9CgogIEZ1dHVyZSBmbHVzaCgpIHsKICAgIGlmIChfaXNCb3VuZCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiU3RyZWFtU2luayBpcyBib3VuZCB0byBhIHN0cmVhbSIpOwogICAgfQogICAgaWYgKF9jb250cm9sbGVySW5zdGFuY2UgPT0gbnVsbCkgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUodGhpcyk7CiAgICAvLyBBZGRpbmcgYW4gZW1wdHkgc3RyZWFtLWNvbnRyb2xsZXIgd2lsbCByZXR1cm4gYSBmdXR1cmUgdGhhdCB3aWxsIGNvbXBsZXRlCiAgICAvLyB3aGVuIGFsbCBkYXRhIGlzIGRvbmUuCiAgICBfaXNCb3VuZCA9IHRydWU7CiAgICB2YXIgZnV0dXJlID0gX2NvbnRyb2xsZXJDb21wbGV0ZXIuZnV0dXJlOwogICAgX2NvbnRyb2xsZXJJbnN0YW5jZS5jbG9zZSgpOwogICAgcmV0dXJuIGZ1dHVyZS53aGVuQ29tcGxldGUoKCkgewogICAgICBfaXNCb3VuZCA9IGZhbHNlOwogICAgfSk7CiAgfQoKICBGdXR1cmUgY2xvc2UoKSB7CiAgICBpZiAoX2lzQm91bmQpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIlN0cmVhbVNpbmsgaXMgYm91bmQgdG8gYSBzdHJlYW0iKTsKICAgIH0KICAgIGlmICghX2lzQ2xvc2VkKSB7CiAgICAgIF9pc0Nsb3NlZCA9IHRydWU7CiAgICAgIGlmIChfY29udHJvbGxlckluc3RhbmNlICE9IG51bGwpIHsKICAgICAgICBfY29udHJvbGxlckluc3RhbmNlLmNsb3NlKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2Nsb3NlVGFyZ2V0KCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBkb25lOwogIH0KCiAgdm9pZCBfY2xvc2VUYXJnZXQoKSB7CiAgICBfdGFyZ2V0LmNsb3NlKCkudGhlbihfY29tcGxldGVEb25lVmFsdWUsIG9uRXJyb3I6IF9jb21wbGV0ZURvbmVFcnJvcik7CiAgfQoKICBGdXR1cmUgZ2V0IGRvbmUgPT4gX2RvbmVDb21wbGV0ZXIuZnV0dXJlOwoKICB2b2lkIF9jb21wbGV0ZURvbmVWYWx1ZSh2YWx1ZSkgewogICAgaWYgKCFfZG9uZUNvbXBsZXRlci5pc0NvbXBsZXRlZCkgewogICAgICBfZG9uZUNvbXBsZXRlci5jb21wbGV0ZSh2YWx1ZSk7CiAgICB9CiAgfQoKICB2b2lkIF9jb21wbGV0ZURvbmVFcnJvcihlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICBpZiAoIV9kb25lQ29tcGxldGVyLmlzQ29tcGxldGVkKSB7CiAgICAgIF9oYXNFcnJvciA9IHRydWU7CiAgICAgIF9kb25lQ29tcGxldGVyLmNvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgfQogIH0KCiAgU3RyZWFtQ29udHJvbGxlcjxUPiBnZXQgX2NvbnRyb2xsZXIgewogICAgaWYgKF9pc0JvdW5kKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJTdHJlYW1TaW5rIGlzIGJvdW5kIHRvIGEgc3RyZWFtIik7CiAgICB9CiAgICBpZiAoX2lzQ2xvc2VkKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJTdHJlYW1TaW5rIGlzIGNsb3NlZCIpOwogICAgfQogICAgaWYgKF9jb250cm9sbGVySW5zdGFuY2UgPT0gbnVsbCkgewogICAgICBfY29udHJvbGxlckluc3RhbmNlID0gbmV3IFN0cmVhbUNvbnRyb2xsZXI8VD4oc3luYzogdHJ1ZSk7CiAgICAgIF9jb250cm9sbGVyQ29tcGxldGVyID0gbmV3IENvbXBsZXRlcigpOwogICAgICBfdGFyZ2V0LmFkZFN0cmVhbShfY29udHJvbGxlci5zdHJlYW0pLnRoZW4oKF8pIHsKICAgICAgICBpZiAoX2lzQm91bmQpIHsKICAgICAgICAgIC8vIEEgbmV3IHN0cmVhbSB0YWtlcyBvdmVyIC0gZm9yd2FyZCB2YWx1ZXMgdG8gdGhhdCBzdHJlYW0uCiAgICAgICAgICBfY29udHJvbGxlckNvbXBsZXRlci5jb21wbGV0ZSh0aGlzKTsKICAgICAgICAgIF9jb250cm9sbGVyQ29tcGxldGVyID0gbnVsbDsKICAgICAgICAgIF9jb250cm9sbGVySW5zdGFuY2UgPSBudWxsOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBObyBuZXcgc3RyZWFtLCAuY2xvc2Ugd2FzIGNhbGxlZC4gQ2xvc2UgX3RhcmdldC4KICAgICAgICAgIF9jbG9zZVRhcmdldCgpOwogICAgICAgIH0KICAgICAgfSwgb25FcnJvcjogKGVycm9yLCBzdGFja1RyYWNlKSB7CiAgICAgICAgaWYgKF9pc0JvdW5kKSB7CiAgICAgICAgICAvLyBBIG5ldyBzdHJlYW0gdGFrZXMgb3ZlciAtIGZvcndhcmQgZXJyb3JzIHRvIHRoYXQgc3RyZWFtLgogICAgICAgICAgX2NvbnRyb2xsZXJDb21wbGV0ZXIuY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgICAgICBfY29udHJvbGxlckNvbXBsZXRlciA9IG51bGw7CiAgICAgICAgICBfY29udHJvbGxlckluc3RhbmNlID0gbnVsbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gTm8gbmV3IHN0cmVhbS4gTm8gbmVlZCB0byBjbG9zZSB0YXJnZXQsIGFzIGl0IGhhcyBhbHJlYWR5CiAgICAgICAgICAvLyBmYWlsZWQuCiAgICAgICAgICBfY29tcGxldGVEb25lRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gX2NvbnRyb2xsZXJJbnN0YW5jZTsKICB9Cn0KCmNsYXNzIF9JT1NpbmtJbXBsIGV4dGVuZHMgX1N0cmVhbVNpbmtJbXBsPExpc3Q8aW50Pj4gaW1wbGVtZW50cyBJT1NpbmsgewogIEVuY29kaW5nIF9lbmNvZGluZzsKICBib29sIF9lbmNvZGluZ011dGFibGUgPSB0cnVlOwoKICBfSU9TaW5rSW1wbChTdHJlYW1Db25zdW1lcjxMaXN0PGludD4+IHRhcmdldCwgdGhpcy5fZW5jb2RpbmcpIDogc3VwZXIodGFyZ2V0KTsKCiAgRW5jb2RpbmcgZ2V0IGVuY29kaW5nID0+IF9lbmNvZGluZzsKCiAgdm9pZCBzZXQgZW5jb2RpbmcoRW5jb2RpbmcgdmFsdWUpIHsKICAgIGlmICghX2VuY29kaW5nTXV0YWJsZSkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiSU9TaW5rIGVuY29kaW5nIGlzIG5vdCBtdXRhYmxlIik7CiAgICB9CiAgICBfZW5jb2RpbmcgPSB2YWx1ZTsKICB9CgogIHZvaWQgd3JpdGUoT2JqZWN0IG9iaikgewogICAgU3RyaW5nIHN0cmluZyA9ICckb2JqJzsKICAgIGlmIChzdHJpbmcuaXNFbXB0eSkgcmV0dXJuOwogICAgYWRkKF9lbmNvZGluZy5lbmNvZGUoc3RyaW5nKSk7CiAgfQoKICB2b2lkIHdyaXRlQWxsKEl0ZXJhYmxlIG9iamVjdHMsIFtTdHJpbmcgc2VwYXJhdG9yID0gIiJdKSB7CiAgICBJdGVyYXRvciBpdGVyYXRvciA9IG9iamVjdHMuaXRlcmF0b3I7CiAgICBpZiAoIWl0ZXJhdG9yLm1vdmVOZXh0KCkpIHJldHVybjsKICAgIGlmIChzZXBhcmF0b3IuaXNFbXB0eSkgewogICAgICBkbyB7CiAgICAgICAgd3JpdGUoaXRlcmF0b3IuY3VycmVudCk7CiAgICAgIH0gd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGUoaXRlcmF0b3IuY3VycmVudCk7CiAgICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgICAgd3JpdGUoc2VwYXJhdG9yKTsKICAgICAgICB3cml0ZShpdGVyYXRvci5jdXJyZW50KTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCB3cml0ZWxuKFtPYmplY3Qgb2JqZWN0ID0gIiJdKSB7CiAgICB3cml0ZShvYmplY3QpOwogICAgd3JpdGUoIlxuIik7CiAgfQoKICB2b2lkIHdyaXRlQ2hhckNvZGUoaW50IGNoYXJDb2RlKSB7CiAgICB3cml0ZShuZXcgU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpOwogIH0KfQqBPgBOTjwBEQEEJANFMgNOA0lOA0gERQZOBU8mBlEpAQZAOQYVAQZDBVE4BU0YBU4kBU0GHAEGQj8FTiQGGgEGRgVNKwVOJAY8AQZCOQVOJAYjAQYpBU4FTiQGJAEGQAVNGAVOJAYxAQY4BSw9BU0aBi4BBlEiBUgFTRcGEgEGIAVNThgGEgEGSkYOBhMCATQjNCsiGhkaASEBFRUwBhsEATIVMAYtBAEnFEcGIAEVLiROIgFMGCQYCAQBExQ/BkRRHhUuISQYCAQBExQ/BhYYKSUPGAgGEQQBGEsEASwBIycmBgQBOicYNwYEASgUPwYVNAYnQS43GEYvJyYRPhoKKBhGQScmEUcVMQoKBiAEAgFJFiABUQEmASYdPgYXBAEbHCAjBAE9KiYdCyElDR8kGiEIBgQBJxMRBAElLgQCARRkYXJ0OmlvL2lvX3NpbmsuZGFydC5vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW8vaW9fc2VydmljZS5kYXJ0iCcvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmlvOwoKY2xhc3MgX0lPU2VydmljZSB7CiAgLy8gVGhpcyBsaXN0IG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIGxpc3QgaW4gcnVudGltZS9iaW4vaW9fc2VydmljZS5oCiAgc3RhdGljIGNvbnN0IGludCBmaWxlRXhpc3RzID0gMDsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVDcmVhdGUgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZURlbGV0ZSA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlUmVuYW1lID0gMzsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVDb3B5ID0gNDsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVPcGVuID0gNTsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVSZXNvbHZlU3ltYm9saWNMaW5rcyA9IDY7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlQ2xvc2UgPSA3OwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZVBvc2l0aW9uID0gODsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVTZXRQb3NpdGlvbiA9IDk7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlVHJ1bmNhdGUgPSAxMDsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVMZW5ndGggPSAxMTsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVMZW5ndGhGcm9tUGF0aCA9IDEyOwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZUxhc3RBY2Nlc3NlZCA9IDEzOwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZVNldExhc3RBY2Nlc3NlZCA9IDE0OwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZUxhc3RNb2RpZmllZCA9IDE1OwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZVNldExhc3RNb2RpZmllZCA9IDE2OwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZUZsdXNoID0gMTc7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlUmVhZEJ5dGUgPSAxODsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVXcml0ZUJ5dGUgPSAxOTsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVSZWFkID0gMjA7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlUmVhZEludG8gPSAyMTsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVXcml0ZUZyb20gPSAyMjsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVDcmVhdGVMaW5rID0gMjM7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlRGVsZXRlTGluayA9IDI0OwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZVJlbmFtZUxpbmsgPSAyNTsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVMaW5rVGFyZ2V0ID0gMjY7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlVHlwZSA9IDI3OwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZUlkZW50aWNhbCA9IDI4OwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZVN0YXQgPSAyOTsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVMb2NrID0gMzA7CiAgc3RhdGljIGNvbnN0IGludCBzb2NrZXRMb29rdXAgPSAzMTsKICBzdGF0aWMgY29uc3QgaW50IHNvY2tldExpc3RJbnRlcmZhY2VzID0gMzI7CiAgc3RhdGljIGNvbnN0IGludCBzb2NrZXRSZXZlcnNlTG9va3VwID0gMzM7CiAgc3RhdGljIGNvbnN0IGludCBkaXJlY3RvcnlDcmVhdGUgPSAzNDsKICBzdGF0aWMgY29uc3QgaW50IGRpcmVjdG9yeURlbGV0ZSA9IDM1OwogIHN0YXRpYyBjb25zdCBpbnQgZGlyZWN0b3J5RXhpc3RzID0gMzY7CiAgc3RhdGljIGNvbnN0IGludCBkaXJlY3RvcnlDcmVhdGVUZW1wID0gMzc7CiAgc3RhdGljIGNvbnN0IGludCBkaXJlY3RvcnlMaXN0U3RhcnQgPSAzODsKICBzdGF0aWMgY29uc3QgaW50IGRpcmVjdG9yeUxpc3ROZXh0ID0gMzk7CiAgc3RhdGljIGNvbnN0IGludCBkaXJlY3RvcnlMaXN0U3RvcCA9IDQwOwogIHN0YXRpYyBjb25zdCBpbnQgZGlyZWN0b3J5UmVuYW1lID0gNDE7CiAgc3RhdGljIGNvbnN0IGludCBzc2xQcm9jZXNzRmlsdGVyID0gNDI7CgogIGV4dGVybmFsIHN0YXRpYyBGdXR1cmUgX2Rpc3BhdGNoKGludCByZXF1ZXN0LCBMaXN0IGRhdGEpOwp9CjgATk48AREBE04jIyMjISExIiUoJiQsKi0qLSMmJyImJygoKCgiJyIiJi4tKSkpLSwrKykqATwCARdkYXJ0OmlvL2lvX3NlcnZpY2UuZGFydChvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW8vbGluay5kYXJ0qCMvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmlvOwoKLyoqCiAqIFtMaW5rXSBvYmplY3RzIGFyZSByZWZlcmVuY2VzIHRvIGZpbGVzeXN0ZW0gbGlua3MuCiAqCiAqLwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmFic3RyYWN0IGNsYXNzIExpbmsgaW1wbGVtZW50cyBGaWxlU3lzdGVtRW50aXR5IHsKICAvKioKICAgKiBDcmVhdGVzIGEgTGluayBvYmplY3QuCiAgICovCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGZhY3RvcnkgTGluayhTdHJpbmcgcGF0aCkgewogICAgZmluYWwgSU9PdmVycmlkZXMgb3ZlcnJpZGVzID0gSU9PdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gbmV3IF9MaW5rKHBhdGgpOwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5jcmVhdGVMaW5rKHBhdGgpOwogIH0KCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGZhY3RvcnkgTGluay5mcm9tUmF3UGF0aChVaW50OExpc3QgcmF3UGF0aCkgewogICAgLy8gVE9ETyhia29ueWkpOiBoYW5kbGUgb3ZlcnJpZGVzCiAgICByZXR1cm4gbmV3IF9MaW5rLmZyb21SYXdQYXRoKHJhd1BhdGgpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtMaW5rXSBvYmplY3QuCiAgICoKICAgKiBJZiBbcGF0aF0gaXMgYSByZWxhdGl2ZSBwYXRoLCBpdCB3aWxsIGJlIGludGVycHJldGVkIHJlbGF0aXZlIHRvIHRoZQogICAqIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgKHNlZSBbRGlyZWN0b3J5LmN1cnJlbnRdKSwgd2hlbiB1c2VkLgogICAqCiAgICogSWYgW3BhdGhdIGlzIGFuIGFic29sdXRlIHBhdGgsIGl0IHdpbGwgYmUgaW1tdW5lIHRvIGNoYW5nZXMgdG8gdGhlCiAgICogY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KICAgKi8KICBmYWN0b3J5IExpbmsuZnJvbVVyaShVcmkgdXJpKSA9PiBuZXcgTGluayh1cmkudG9GaWxlUGF0aCgpKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIHN5bWJvbGljIGxpbmsuIFJldHVybnMgYSBbOkZ1dHVyZTxMaW5rPjpdIHRoYXQgY29tcGxldGVzIHdpdGgKICAgKiB0aGUgbGluayB3aGVuIGl0IGhhcyBiZWVuIGNyZWF0ZWQuIElmIHRoZSBsaW5rIGV4aXN0cywKICAgKiB0aGUgZnV0dXJlIHdpbGwgY29tcGxldGUgd2l0aCBhbiBlcnJvci4KICAgKgogICAqIElmIFtyZWN1cnNpdmVdIGlzIGZhbHNlLCB0aGUgZGVmYXVsdCwgdGhlIGxpbmsgaXMgY3JlYXRlZAogICAqIG9ubHkgaWYgYWxsIGRpcmVjdG9yaWVzIGluIGl0cyBwYXRoIGV4aXN0LgogICAqIElmIFtyZWN1cnNpdmVdIGlzIHRydWUsIGFsbCBub24tZXhpc3RpbmcgcGF0aAogICAqIGNvbXBvbmVudHMgYXJlIGNyZWF0ZWQuIFRoZSBkaXJlY3RvcmllcyBpbiB0aGUgcGF0aCBvZiBbdGFyZ2V0XSBhcmUKICAgKiBub3QgYWZmZWN0ZWQsIHVubGVzcyB0aGV5IGFyZSBhbHNvIGluIFtwYXRoXS4KICAgKgogICAqIE9uIHRoZSBXaW5kb3dzIHBsYXRmb3JtLCB0aGlzIGNhbGwgd2lsbCBjcmVhdGUgYSB0cnVlIHN5bWJvbGljIGxpbmsKICAgKiBpbnN0ZWFkIG9mIGEgSnVuY3Rpb24uIEluIG9yZGVyIHRvIGNyZWF0ZSBhIHN5bWJvbGljIGxpbmsgb24gV2luZG93cywgRGFydAogICAqIG11c3QgYmUgcnVuIGluIEFkbWluaXN0cmF0b3IgbW9kZSBvciB0aGUgc3lzdGVtIG11c3QgaGF2ZSBEZXZlbG9wZXIgTW9kZQogICAqIGVuYWJsZWQsIG90aGVyd2lzZSBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSB3aWxsIGJlIHJhaXNlZCB3aXRoIAogICAqIGBFUlJPUl9QUklWSUxFR0VfTk9UX0hFTERgIHNldCBhcyB0aGUgZXJybm8gd2hlbiB0aGlzIGNhbGwgaXMgbWFkZS4KICAgKgogICAqIE9uIG90aGVyIHBsYXRmb3JtcywgdGhlIHBvc2l4IHN5bWxpbmsoKSBjYWxsIGlzIHVzZWQgdG8gbWFrZSBhIHN5bWJvbGljCiAgICogbGluayBjb250YWluaW5nIHRoZSBzdHJpbmcgW3RhcmdldF0uICBJZiBbdGFyZ2V0XSBpcyBhIHJlbGF0aXZlIHBhdGgsCiAgICogaXQgd2lsbCBiZSBpbnRlcnByZXRlZCByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGxpbmsuCiAgICovCiAgRnV0dXJlPExpbms+IGNyZWF0ZShTdHJpbmcgdGFyZ2V0LCB7Ym9vbCByZWN1cnNpdmU6IGZhbHNlfSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgY3JlYXRlIHRoZSBsaW5rLiBDYWxsaW5nIFtjcmVhdGVTeW5jXSBvbiBhbiBleGlzdGluZyBsaW5rCiAgICogd2lsbCB0aHJvdyBhbiBleGNlcHRpb24uCiAgICoKICAgKiBJZiBbcmVjdXJzaXZlXSBpcyBmYWxzZSwgdGhlIGRlZmF1bHQsIHRoZSBsaW5rIGlzIGNyZWF0ZWQgb25seSBpZiBhbGwKICAgKiBkaXJlY3RvcmllcyBpbiBpdHMgcGF0aCBleGlzdC4gSWYgW3JlY3Vyc2l2ZV0gaXMgdHJ1ZSwgYWxsCiAgICogbm9uLWV4aXN0aW5nIHBhdGggY29tcG9uZW50cyBhcmUgY3JlYXRlZC4gVGhlIGRpcmVjdG9yaWVzIGluCiAgICogdGhlIHBhdGggb2YgW3RhcmdldF0gYXJlIG5vdCBhZmZlY3RlZCwgdW5sZXNzIHRoZXkgYXJlIGFsc28gaW4gW3BhdGhdLgogICAqCiAgICogT24gdGhlIFdpbmRvd3MgcGxhdGZvcm0sIHRoaXMgY2FsbCB3aWxsIGNyZWF0ZSBhIHRydWUgc3ltYm9saWMgbGluawogICAqIGluc3RlYWQgb2YgYSBKdW5jdGlvbi4gSW4gb3JkZXIgdG8gY3JlYXRlIGEgc3ltYm9saWMgbGluayBvbiBXaW5kb3dzLCBEYXJ0CiAgICogbXVzdCBiZSBydW4gaW4gQWRtaW5pc3RyYXRvciBtb2RlIG9yIHRoZSBzeXN0ZW0gbXVzdCBoYXZlIERldmVsb3BlciBNb2RlCiAgICogZW5hYmxlZCwgb3RoZXJ3aXNlIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIHdpbGwgYmUgcmFpc2VkIHdpdGggCiAgICogYEVSUk9SX1BSSVZJTEVHRV9OT1RfSEVMRGAgc2V0IGFzIHRoZSBlcnJubyB3aGVuIHRoaXMgY2FsbCBpcyBtYWRlLgogICAqCiAgICogT24gb3RoZXIgcGxhdGZvcm1zLCB0aGUgcG9zaXggc3ltbGluaygpIGNhbGwgaXMgdXNlZCB0byBtYWtlIGEgc3ltYm9saWMKICAgKiBsaW5rIGNvbnRhaW5pbmcgdGhlIHN0cmluZyBbdGFyZ2V0XS4gIElmIFt0YXJnZXRdIGlzIGEgcmVsYXRpdmUgcGF0aCwKICAgKiBpdCB3aWxsIGJlIGludGVycHJldGVkIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgbGluay4KICAgKi8KICB2b2lkIGNyZWF0ZVN5bmMoU3RyaW5nIHRhcmdldCwge2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IHVwZGF0ZXMgdGhlIGxpbmsuIENhbGxpbmcgW3VwZGF0ZVN5bmNdIG9uIGEgbm9uLWV4aXN0aW5nIGxpbmsKICAgKiB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbi4KICAgKi8KICB2b2lkIHVwZGF0ZVN5bmMoU3RyaW5nIHRhcmdldCk7CgogIC8qKgogICAqIFVwZGF0ZXMgdGhlIGxpbmsuIFJldHVybnMgYSBbOkZ1dHVyZTxMaW5rPjpdIHRoYXQgY29tcGxldGVzIHdpdGggdGhlCiAgICogbGluayB3aGVuIGl0IGhhcyBiZWVuIHVwZGF0ZWQuICBDYWxsaW5nIFt1cGRhdGVdIG9uIGEgbm9uLWV4aXN0aW5nIGxpbmsKICAgKiB3aWxsIGNvbXBsZXRlIGl0cyByZXR1cm5lZCBmdXR1cmUgd2l0aCBhbiBleGNlcHRpb24uCiAgICovCiAgRnV0dXJlPExpbms+IHVwZGF0ZShTdHJpbmcgdGFyZ2V0KTsKCiAgRnV0dXJlPFN0cmluZz4gcmVzb2x2ZVN5bWJvbGljTGlua3MoKTsKCiAgU3RyaW5nIHJlc29sdmVTeW1ib2xpY0xpbmtzU3luYygpOwoKICAvKioKICAgKiBSZW5hbWVzIHRoaXMgbGluay4gUmV0dXJucyBhIGBGdXR1cmU8TGluaz5gIHRoYXQgY29tcGxldGVzCiAgICogd2l0aCBhIFtMaW5rXSBpbnN0YW5jZSBmb3IgdGhlIHJlbmFtZWQgbGluay4KICAgKgogICAqIElmIFtuZXdQYXRoXSBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGxpbmssIHRoYXQgbGluayBpcwogICAqIHJlcGxhY2VkLiBJZiBbbmV3UGF0aF0gaWRlbnRpZmllcyBhbiBleGlzdGluZyBmaWxlIG9yIGRpcmVjdG9yeSwKICAgKiB0aGUgb3BlcmF0aW9uIGZhaWxzIGFuZCB0aGUgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGV4Y2VwdGlvbi4KICAgKi8KICBGdXR1cmU8TGluaz4gcmVuYW1lKFN0cmluZyBuZXdQYXRoKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSByZW5hbWVzIHRoaXMgbGluay4gUmV0dXJucyBhIFtMaW5rXQogICAqIGluc3RhbmNlIGZvciB0aGUgcmVuYW1lZCBsaW5rLgogICAqCiAgICogSWYgW25ld1BhdGhdIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgbGluaywgdGhhdCBsaW5rIGlzCiAgICogcmVwbGFjZWQuIElmIFtuZXdQYXRoXSBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGZpbGUgb3IgZGlyZWN0b3J5CiAgICogdGhlIG9wZXJhdGlvbiBmYWlscyBhbmQgYW4gZXhjZXB0aW9uIGlzIHRocm93bi4KICAgKi8KICBMaW5rIHJlbmFtZVN5bmMoU3RyaW5nIG5ld1BhdGgpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgW0xpbmtdIGluc3RhbmNlIHdob3NlIHBhdGggaXMgdGhlIGFic29sdXRlIHBhdGggdG8gW3RoaXNdLgogICAqCiAgICogVGhlIGFic29sdXRlIHBhdGggaXMgY29tcHV0ZWQgYnkgcHJlZml4aW5nCiAgICogYSByZWxhdGl2ZSBwYXRoIHdpdGggdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnksIGFuZCByZXR1cm5pbmcKICAgKiBhbiBhYnNvbHV0ZSBwYXRoIHVuY2hhbmdlZC4KICAgKi8KICBMaW5rIGdldCBhYnNvbHV0ZTsKCiAgLyoqCiAgICogR2V0cyB0aGUgdGFyZ2V0IG9mIHRoZSBsaW5rLiBSZXR1cm5zIGEgZnV0dXJlIHRoYXQgY29tcGxldGVzIHdpdGgKICAgKiB0aGUgcGF0aCB0byB0aGUgdGFyZ2V0LgogICAqCiAgICogSWYgdGhlIHJldHVybmVkIHRhcmdldCBpcyBhIHJlbGF0aXZlIHBhdGgsIGl0IGlzIHJlbGF0aXZlIHRvIHRoZQogICAqIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBsaW5rLgogICAqCiAgICogSWYgdGhlIGxpbmsgZG9lcyBub3QgZXhpc3QsIG9yIGlzIG5vdCBhIGxpbmssIHRoZSBmdXR1cmUgY29tcGxldGVzIHdpdGgKICAgKiBhIEZpbGVTeXN0ZW1FeGNlcHRpb24uCiAgICovCiAgRnV0dXJlPFN0cmluZz4gdGFyZ2V0KCk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgZ2V0cyB0aGUgdGFyZ2V0IG9mIHRoZSBsaW5rLiBSZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSB0YXJnZXQuCiAgICoKICAgKiBJZiB0aGUgcmV0dXJuZWQgdGFyZ2V0IGlzIGEgcmVsYXRpdmUgcGF0aCwgaXQgaXMgcmVsYXRpdmUgdG8gdGhlCiAgICogZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGxpbmsuCiAgICoKICAgKiBJZiB0aGUgbGluayBkb2VzIG5vdCBleGlzdCwgb3IgaXMgbm90IGEgbGluaywgdGhyb3dzIGEgRmlsZVN5c3RlbUV4Y2VwdGlvbi4KICAgKi8KICBTdHJpbmcgdGFyZ2V0U3luYygpOwp9CgpjbGFzcyBfTGluayBleHRlbmRzIEZpbGVTeXN0ZW1FbnRpdHkgaW1wbGVtZW50cyBMaW5rIHsKICBTdHJpbmcgX3BhdGg7CiAgVWludDhMaXN0IF9yYXdQYXRoOwoKICBfTGluayhTdHJpbmcgcGF0aCkgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwocGF0aCwgJ3BhdGgnKTsKICAgIF9wYXRoID0gcGF0aDsKICAgIF9yYXdQYXRoID0gRmlsZVN5c3RlbUVudGl0eS5fdG9VdGY4QXJyYXkocGF0aCk7CiAgfQoKICBfTGluay5mcm9tUmF3UGF0aChVaW50OExpc3QgcmF3UGF0aCkgewogICAgX3Jhd1BhdGggPSBGaWxlU3lzdGVtRW50aXR5Ll90b051bGxUZXJtaW5hdGVkVXRmOEFycmF5KHJhd1BhdGgpOwogICAgX3BhdGggPSBGaWxlU3lzdGVtRW50aXR5Ll90b1N0cmluZ0Zyb21VdGY4QXJyYXkocmF3UGF0aCk7CiAgfQoKICBTdHJpbmcgZ2V0IHBhdGggPT4gX3BhdGg7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJMaW5rOiAnJHBhdGgnIjsKCiAgRnV0dXJlPGJvb2w+IGV4aXN0cygpID0+IEZpbGVTeXN0ZW1FbnRpdHkuX2lzTGlua1JhdyhfcmF3UGF0aCk7CgogIGJvb2wgZXhpc3RzU3luYygpID0+IEZpbGVTeXN0ZW1FbnRpdHkuX2lzTGlua1Jhd1N5bmMoX3Jhd1BhdGgpOwoKICBMaW5rIGdldCBhYnNvbHV0ZSA9PiBuZXcgTGluay5mcm9tUmF3UGF0aChfcmF3QWJzb2x1dGVQYXRoKTsKCiAgRnV0dXJlPExpbms+IGNyZWF0ZShTdHJpbmcgdGFyZ2V0LCB7Ym9vbCByZWN1cnNpdmU6IGZhbHNlfSkgewogICAgdmFyIHJlc3VsdCA9CiAgICAgICAgcmVjdXJzaXZlID8gcGFyZW50LmNyZWF0ZShyZWN1cnNpdmU6IHRydWUpIDogbmV3IEZ1dHVyZS52YWx1ZShudWxsKTsKICAgIHJldHVybiByZXN1bHQKICAgICAgICAudGhlbigoXykgPT4gX0ZpbGUuX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZSgKICAgICAgICAgICAgX0lPU2VydmljZS5maWxlQ3JlYXRlTGluaywgW251bGwsIF9yYXdQYXRoLCB0YXJnZXRdKSkKICAgICAgICAudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZSgKICAgICAgICAgICAgcmVzcG9uc2UsICJDYW5ub3QgY3JlYXRlIGxpbmsgdG8gdGFyZ2V0ICckdGFyZ2V0JyIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzOwogICAgfSk7CiAgfQoKICB2b2lkIGNyZWF0ZVN5bmMoU3RyaW5nIHRhcmdldCwge2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pIHsKICAgIGlmIChyZWN1cnNpdmUpIHsKICAgICAgcGFyZW50LmNyZWF0ZVN5bmMocmVjdXJzaXZlOiB0cnVlKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfRmlsZS5fY3JlYXRlTGluayhfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoLCB0YXJnZXQpOwogICAgdGhyb3dJZkVycm9yKHJlc3VsdCwgIkNhbm5vdCBjcmVhdGUgbGluayIsIHBhdGgpOwogIH0KCiAgdm9pZCB1cGRhdGVTeW5jKFN0cmluZyB0YXJnZXQpIHsKICAgIC8vIFRPRE8oMTI0MTQpOiBSZXBsYWNlIHdpdGggYXRvbWljIHVwZGF0ZSwgd2hlcmUgc3VwcG9ydGVkIGJ5IHBsYXRmb3JtLgogICAgLy8gQXRvbWljYWxseSBjaGFuZ2luZyBhIGxpbmsgY2FuIGJlIGRvbmUgYnkgY3JlYXRpbmcgdGhlIG5ldyBsaW5rLCB3aXRoCiAgICAvLyBhIGRpZmZlcmVudCBuYW1lLCBhbmQgdXNpbmcgdGhlIHJlbmFtZSgpIHBvc2l4IGNhbGwgdG8gbW92ZSBpdCB0bwogICAgLy8gdGhlIG9sZCBuYW1lIGF0b21pY2FsbHkuCiAgICBkZWxldGVTeW5jKCk7CiAgICBjcmVhdGVTeW5jKHRhcmdldCk7CiAgfQoKICBGdXR1cmU8TGluaz4gdXBkYXRlKFN0cmluZyB0YXJnZXQpIHsKICAgIC8vIFRPRE8oMTI0MTQpOiBSZXBsYWNlIHdpdGggYXRvbWljIHVwZGF0ZSwgd2hlcmUgc3VwcG9ydGVkIGJ5IHBsYXRmb3JtLgogICAgLy8gQXRvbWljYWxseSBjaGFuZ2luZyBhIGxpbmsgY2FuIGJlIGRvbmUgYnkgY3JlYXRpbmcgdGhlIG5ldyBsaW5rLCB3aXRoCiAgICAvLyBhIGRpZmZlcmVudCBuYW1lLCBhbmQgdXNpbmcgdGhlIHJlbmFtZSgpIHBvc2l4IGNhbGwgdG8gbW92ZSBpdCB0bwogICAgLy8gdGhlIG9sZCBuYW1lIGF0b21pY2FsbHkuCiAgICByZXR1cm4gZGVsZXRlKCkudGhlbjxMaW5rPigoXykgPT4gY3JlYXRlKHRhcmdldCkpOwogIH0KCiAgRnV0dXJlPExpbms+IF9kZWxldGUoe2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pIHsKICAgIGlmIChyZWN1cnNpdmUpIHsKICAgICAgcmV0dXJuIG5ldyBEaXJlY3RvcnkuZnJvbVJhd1BhdGgoX3Jhd1BhdGgpCiAgICAgICAgICAuZGVsZXRlKHJlY3Vyc2l2ZTogdHJ1ZSkKICAgICAgICAgIC50aGVuKChfKSA9PiB0aGlzKTsKICAgIH0KICAgIHJldHVybiBfRmlsZS5fZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKAogICAgICAgIF9JT1NlcnZpY2UuZmlsZURlbGV0ZUxpbmssIFtudWxsLCBfcmF3UGF0aF0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsICJDYW5ub3QgZGVsZXRlIGxpbmsiLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0pOwogIH0KCiAgdm9pZCBfZGVsZXRlU3luYyh7Ym9vbCByZWN1cnNpdmU6IGZhbHNlfSkgewogICAgaWYgKHJlY3Vyc2l2ZSkgewogICAgICByZXR1cm4gbmV3IERpcmVjdG9yeS5mcm9tUmF3UGF0aChfcmF3UGF0aCkuZGVsZXRlU3luYyhyZWN1cnNpdmU6IHRydWUpOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF9GaWxlLl9kZWxldGVMaW5rTmF0aXZlKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgpOwogICAgdGhyb3dJZkVycm9yKHJlc3VsdCwgIkNhbm5vdCBkZWxldGUgbGluayIsIHBhdGgpOwogIH0KCiAgRnV0dXJlPExpbms+IHJlbmFtZShTdHJpbmcgbmV3UGF0aCkgewogICAgcmV0dXJuIF9GaWxlLl9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoCiAgICAgICAgX0lPU2VydmljZS5maWxlUmVuYW1lTGluaywgW251bGwsIF9yYXdQYXRoLCBuZXdQYXRoXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZSgKICAgICAgICAgICAgcmVzcG9uc2UsICJDYW5ub3QgcmVuYW1lIGxpbmsgdG8gJyRuZXdQYXRoJyIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgTGluayhuZXdQYXRoKTsKICAgIH0pOwogIH0KCiAgTGluayByZW5hbWVTeW5jKFN0cmluZyBuZXdQYXRoKSB7CiAgICB2YXIgcmVzdWx0ID0gX0ZpbGUuX3JlbmFtZUxpbmsoX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBfcmF3UGF0aCwgbmV3UGF0aCk7CiAgICB0aHJvd0lmRXJyb3IocmVzdWx0LCAiQ2Fubm90IHJlbmFtZSBsaW5rICckcGF0aCcgdG8gJyRuZXdQYXRoJyIpOwogICAgcmV0dXJuIG5ldyBMaW5rKG5ld1BhdGgpOwogIH0KCiAgRnV0dXJlPFN0cmluZz4gdGFyZ2V0KCkgewogICAgcmV0dXJuIF9GaWxlLl9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoCiAgICAgICAgX0lPU2VydmljZS5maWxlTGlua1RhcmdldCwgW251bGwsIF9yYXdQYXRoXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZSgKICAgICAgICAgICAgcmVzcG9uc2UsICJDYW5ub3QgZ2V0IHRhcmdldCBvZiBsaW5rIiwgcGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgfSk7CiAgfQoKICBTdHJpbmcgdGFyZ2V0U3luYygpIHsKICAgIHZhciByZXN1bHQgPSBfRmlsZS5fbGlua1RhcmdldChfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoKTsKICAgIHRocm93SWZFcnJvcihyZXN1bHQsICJDYW5ub3QgcmVhZCBsaW5rIiwgcGF0aCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIHRocm93SWZFcnJvcihPYmplY3QgcmVzdWx0LCBTdHJpbmcgbXNnLCBbU3RyaW5nIHBhdGggPSAiIl0pIHsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbihtc2csIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgfQoKICBib29sIF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpIHsKICAgIHJldHVybiByZXNwb25zZSBpcyBMaXN0ICYmIHJlc3BvbnNlWzBdICE9IF9zdWNjZXNzUmVzcG9uc2U7CiAgfQoKICBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCBTdHJpbmcgbWVzc2FnZSwgU3RyaW5nIHBhdGgpIHsKICAgIGFzc2VydChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSk7CiAgICBzd2l0Y2ggKHJlc3BvbnNlW19lcnJvclJlc3BvbnNlRXJyb3JUeXBlXSkgewogICAgICBjYXNlIF9pbGxlZ2FsQXJndW1lbnRSZXNwb25zZToKICAgICAgICByZXR1cm4gbmV3IEFyZ3VtZW50RXJyb3IoKTsKICAgICAgY2FzZSBfb3NFcnJvclJlc3BvbnNlOgogICAgICAgIHZhciBlcnIgPSBuZXcgT1NFcnJvcihyZXNwb25zZVtfb3NFcnJvclJlc3BvbnNlTWVzc2FnZV0sCiAgICAgICAgICAgIHJlc3BvbnNlW19vc0Vycm9yUmVzcG9uc2VFcnJvckNvZGVdKTsKICAgICAgICByZXR1cm4gbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24obWVzc2FnZSwgcGF0aCwgZXJyKTsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gbmV3IEV4Y2VwdGlvbigiVW5rbm93biBlcnJvciIpOwogICAgfQogIH0KfQqBLgBOTjwBEQEENgMEGjIGHAYcHjcdHgYnBAEcMCYrBAEGHgVKRQVIIAY/AQZNPC0FPzAzSTMFSVBORUkFTUtLBj8BBk0eBUtAQkwFSVBORUkFTUtLBjsBBlEeBiIBBkpNOgYmASkBJQEGQDIFPEZFBicBBjckBTxFNQYjAQZKBTBHIQYVAQZHHQVGJAVNHAYbAQZQBUYkBVEGFwIBNxAWARcuEjQEASlFPgQBHAEoAUIBQgE/AUARTRIzQhsoJkcIEwgEATwVKgZNNgQBI01NSSASGAQBJ01NSSA3BAEyFTEjHgYpRyhMCBMIBAEuFU4GSzYEASgpUCgmQQggCAQBJE5GHgQBHClHKCY6CBcIBAEYRTQTBAFHHTgGBAEkQAQBQigxJSQdQTI8Dy8GBAIBEWRhcnQ6aW8vbGluay5kYXJ0Mm9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pby9uYW1lc3BhY2VfaW1wbC5kYXJ0hH4vLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmlvOwoKLy8gRWFjaCBJc29sYXRlIG1heSBydW4gaW4gYSBkaWZmZXJlbnQgIm5hbWVzcGFjZSIsIHdoaWNoIHByb3ZpZGVzIHRoZSBzY29wZSBpbgovLyB3aGljaCBmaWxlIHBhdGhzIGFyZSByZXNvbHZlZC4KYWJzdHJhY3QgY2xhc3MgX05hbWVzcGFjZSB7CiAgLy8gVGhpcyBnZXR0ZXIgZG9lcyBub3QgaW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudCBvbiB0aGUgdW5kZXJseWluZyBuYXRpdmUKICAvLyBvYmplY3QuIEl0IGNhbm5vdCBiZSBwYXNzZWQgaW4gYSBkaXNwYXRjaCBtZXNzYWdlIHRvIHRoZSBJT1NlcnZpY2UgdGhyZWFkLgogIGV4dGVybmFsIHN0YXRpYyBfTmFtZXNwYWNlIGdldCBfbmFtZXNwYWNlOwoKICAvLyBUaGlzIGdldHRlciBkb2VzIGluY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQgb24gdGhlIHVuZGVybHlpbmcgbmF0aXZlCiAgLy8gb2JqZWN0LiBJdCBtdXN0IGJlIHBhc3NlZCBpbiBhIGRpc3BhdGNoIG1lc3NhZ2UgdG8gdGhlIElPU2VydmljZSB0aHJlYWQuCiAgZXh0ZXJuYWwgc3RhdGljIGludCBnZXQgX25hbWVzcGFjZVBvaW50ZXI7CgogIC8vIFRoaXMgc2V0cyB1cCB0aGUgSXNvbGF0ZSdzIG5hbWVzcGFjZS4gSXQgc2hvdWxkIGJlIHNldCB1cCBieSB0aGUgZW1iZWRkZXIuCiAgLy8gSWYgaXQgaXMgbm90IHNldCB1cCBieSB0aGUgZW1iZWRkZXIsIHJlbGF0aXZlIHBhdGhzIHdpbGwgYmUgcmVzb2x2ZWQKICAvLyByZWxhdGl2ZSB0byB0aGUgcHJvY2VzcydzIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYW5kIGFic29sdXRlIHBhdGhzIHdpbGwKICAvLyBiZSBsZWZ0IHJlbGF0aXZlIHRvIHRoZSBmaWxlIHN5c3RlbSByb290LgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBleHRlcm5hbCBzdGF0aWMgdm9pZCBfc2V0dXBOYW1lc3BhY2UodmFyIG5hbWVzcGFjZSk7Cn0KGgBOTjwBEQFQIhxQUC0BTE4tAVBKUS8cNwIBG2RhcnQ6aW8vbmFtZXNwYWNlX2ltcGwuZGFydC1vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW8vb3ZlcnJpZGVzLmRhcnS6pS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuaW87CgpmaW5hbCBfaW9PdmVycmlkZXNUb2tlbiA9IG5ldyBPYmplY3QoKTsKCmNvbnN0IF9hc3luY1J1blpvbmVkID0gcnVuWm9uZWQ7CgovLy8gVGhpcyBjbGFzcyBmYWNpbGl0YXRlcyBvdmVycmlkaW5nIHZhcmlvdXMgQVBJcyBvZiBkYXJ0OmlvIHdpdGggbW9jawovLy8gaW1wbGVtZW50YXRpb25zLgovLy8KLy8vIFRoaXMgYWJzdHJhY3QgYmFzZSBjbGFzcyBzaG91bGQgYmUgZXh0ZW5kZWQgd2l0aCBvdmVycmlkZXMgZm9yIHRoZQovLy8gb3BlcmF0aW9ucyBuZWVkZWQgdG8gY29uc3RydWN0IG1vY2tzLiBUaGUgaW1wbGVtZW50YXRpb25zIGluIHRoaXMgYmFzZSBjbGFzcwovLy8gZGVmYXVsdCB0byB0aGUgYWN0dWFsIGRhcnQ6aW8gaW1wbGVtZW50YXRpb24uIEZvciBleGFtcGxlOgovLy8KLy8vIGBgYAovLy8gY2xhc3MgTXlEaXJlY3RvcnkgaW1wbGVtZW50cyBEaXJlY3RvcnkgewovLy8gICAuLi4KLy8vICAgLy8gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIERpcmVjdG9yeSBpbnRlcmZhY2UKLy8vICAgLi4uCi8vLyB9Ci8vLwovLy8gbWFpbigpIHsKLy8vICAgSU9PdmVycmlkZXMucnVuWm9uZWQoKCkgewovLy8gICAgIC4uLgovLy8gICAgIC8vIE9wZXJhdGlvbnMgd2lsbCB1c2UgTXlEaXJlY3RvcnkgaW5zdGVhZCBvZiBkYXJ0OmlvJ3MgRGlyZWN0b3J5Ci8vLyAgICAgLy8gaW1wbGVtZW50YXRpb24gd2hlbmV2ZXIgRGlyZWN0b3J5IGlzIHVzZWQuCi8vLyAgICAgLi4uCi8vLyAgIH0sIGNyZWF0ZURpcmVjdG9yeTogKFN0cmluZyBwYXRoKSA9PiBuZXcgTXlEaXJlY3RvcnkocGF0aCkpOwovLy8gfQovLy8gYGBgCmFic3RyYWN0IGNsYXNzIElPT3ZlcnJpZGVzIHsKICBzdGF0aWMgSU9PdmVycmlkZXMgX2dsb2JhbDsKCiAgc3RhdGljIElPT3ZlcnJpZGVzIGdldCBjdXJyZW50IHsKICAgIHJldHVybiBab25lLmN1cnJlbnRbX2lvT3ZlcnJpZGVzVG9rZW5dID8/IF9nbG9iYWw7CiAgfQoKICAvLy8gVGhlIFtJT092ZXJyaWRlc10gdG8gdXNlIGluIHRoZSByb290IFtab25lXS4KICAvLy8KICAvLy8gVGhlc2UgYXJlIHRoZSBbSU9PdmVycmlkZXNdIHRoYXQgd2lsbCBiZSB1c2VkIGluIHRoZSByb290IFpvbmUsIGFuZCBpbgogIC8vLyBab25lJ3MgdGhhdCBkbyBub3Qgc2V0IFtJT092ZXJyaWRlc10gYW5kIHdob3NlIGFuY2VzdG9ycyB1cCB0byB0aGUgcm9vdAogIC8vLyBab25lIGRvIG5vdCBzZXQgW0lPT3ZlcnJpZGVzXS4KICBzdGF0aWMgc2V0IGdsb2JhbChJT092ZXJyaWRlcyBvdmVycmlkZXMpIHsKICAgIF9nbG9iYWwgPSBvdmVycmlkZXM7CiAgfQoKICAvLy8gUnVucyBbYm9keV0gaW4gYSBmcmVzaCBbWm9uZV0gdXNpbmcgdGhlIHByb3ZpZGVkIG92ZXJyaWRlcy4KICAvLy8KICAvLy8gU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9uIHRoZSBjb3JyZXNwb25kaW5nIG1ldGhvZHMgb2YgSU9PdmVycmlkZXMgZm9yCiAgLy8vIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdGhlIG9wdGlvbmFsIGFyZ3VtZW50cyBkby4KICBzdGF0aWMgUiBydW5ab25lZDxSPihSIGJvZHkoKSwKICAgICAgewogICAgICAvLyBEaXJlY3RvcnkKICAgICAgRGlyZWN0b3J5IEZ1bmN0aW9uKFN0cmluZykgY3JlYXRlRGlyZWN0b3J5LAogICAgICBEaXJlY3RvcnkgRnVuY3Rpb24oKSBnZXRDdXJyZW50RGlyZWN0b3J5LAogICAgICB2b2lkIEZ1bmN0aW9uKFN0cmluZykgc2V0Q3VycmVudERpcmVjdG9yeSwKICAgICAgRGlyZWN0b3J5IEZ1bmN0aW9uKCkgZ2V0U3lzdGVtVGVtcERpcmVjdG9yeSwKCiAgICAgIC8vIEZpbGUKICAgICAgRmlsZSBGdW5jdGlvbihTdHJpbmcpIGNyZWF0ZUZpbGUsCgogICAgICAvLyBGaWxlU3RhdAogICAgICBGdXR1cmU8RmlsZVN0YXQ+IEZ1bmN0aW9uKFN0cmluZykgc3RhdCwKICAgICAgRmlsZVN0YXQgRnVuY3Rpb24oU3RyaW5nKSBzdGF0U3luYywKCiAgICAgIC8vIEZpbGVTeXN0ZW1FbnRpdHkKICAgICAgRnV0dXJlPGJvb2w+IEZ1bmN0aW9uKFN0cmluZywgU3RyaW5nKSBmc2VJZGVudGljYWwsCiAgICAgIGJvb2wgRnVuY3Rpb24oU3RyaW5nLCBTdHJpbmcpIGZzZUlkZW50aWNhbFN5bmMsCiAgICAgIEZ1dHVyZTxGaWxlU3lzdGVtRW50aXR5VHlwZT4gRnVuY3Rpb24oU3RyaW5nLCBib29sKSBmc2VHZXRUeXBlLAogICAgICBGaWxlU3lzdGVtRW50aXR5VHlwZSBGdW5jdGlvbihTdHJpbmcsIGJvb2wpIGZzZUdldFR5cGVTeW5jLAoKICAgICAgLy8gX0ZpbGVTeXN0ZW1XYXRjaGVyCiAgICAgIFN0cmVhbTxGaWxlU3lzdGVtRXZlbnQ+IEZ1bmN0aW9uKFN0cmluZywgaW50LCBib29sKSBmc1dhdGNoLAogICAgICBib29sIEZ1bmN0aW9uKCkgZnNXYXRjaElzU3VwcG9ydGVkLAoKICAgICAgLy8gTGluawogICAgICBMaW5rIEZ1bmN0aW9uKFN0cmluZykgY3JlYXRlTGluaywKCiAgICAgIC8vIFNvY2tldAogICAgICBGdXR1cmU8U29ja2V0PiBGdW5jdGlvbihkeW5hbWljLCBpbnQsCiAgICAgICAgICAgICAge2R5bmFtaWMgc291cmNlQWRkcmVzcywgRHVyYXRpb24gdGltZW91dH0pCiAgICAgICAgICBzb2NrZXRDb25uZWN0LAogICAgICBGdXR1cmU8Q29ubmVjdGlvblRhc2s8U29ja2V0Pj4gRnVuY3Rpb24oZHluYW1pYywgaW50LAogICAgICAgICAgICAgIHtkeW5hbWljIHNvdXJjZUFkZHJlc3N9KQogICAgICAgICAgc29ja2V0U3RhcnRDb25uZWN0LAoKICAgICAgLy8gT3B0aW9uYWwgWm9uZSBwYXJhbWV0ZXJzCiAgICAgIFpvbmVTcGVjaWZpY2F0aW9uIHpvbmVTcGVjaWZpY2F0aW9uLAogICAgICBGdW5jdGlvbiBvbkVycm9yfSkgewogICAgSU9PdmVycmlkZXMgb3ZlcnJpZGVzID0gbmV3IF9JT092ZXJyaWRlc1Njb3BlKAogICAgICAvLyBEaXJlY3RvcnkKICAgICAgY3JlYXRlRGlyZWN0b3J5LAogICAgICBnZXRDdXJyZW50RGlyZWN0b3J5LAogICAgICBzZXRDdXJyZW50RGlyZWN0b3J5LAogICAgICBnZXRTeXN0ZW1UZW1wRGlyZWN0b3J5LAoKICAgICAgLy8gRmlsZQogICAgICBjcmVhdGVGaWxlLAoKICAgICAgLy8gRmlsZVN0YXQKICAgICAgc3RhdCwKICAgICAgc3RhdFN5bmMsCgogICAgICAvLyBGaWxlU3lzdGVtRW50aXR5CiAgICAgIGZzZUlkZW50aWNhbCwKICAgICAgZnNlSWRlbnRpY2FsU3luYywKICAgICAgZnNlR2V0VHlwZSwKICAgICAgZnNlR2V0VHlwZVN5bmMsCgogICAgICAvLyBfRmlsZVN5c3RlbVdhdGNoZXIKICAgICAgZnNXYXRjaCwKICAgICAgZnNXYXRjaElzU3VwcG9ydGVkLAoKICAgICAgLy8gTGluawogICAgICBjcmVhdGVMaW5rLAoKICAgICAgLy8gU29ja2V0CiAgICAgIHNvY2tldENvbm5lY3QsCiAgICAgIHNvY2tldFN0YXJ0Q29ubmVjdCwKICAgICk7CiAgICByZXR1cm4gX2FzeW5jUnVuWm9uZWQ8Uj4oYm9keSwKICAgICAgICB6b25lVmFsdWVzOiB7X2lvT3ZlcnJpZGVzVG9rZW46IG92ZXJyaWRlc30sCiAgICAgICAgem9uZVNwZWNpZmljYXRpb246IHpvbmVTcGVjaWZpY2F0aW9uLAogICAgICAgIG9uRXJyb3I6IG9uRXJyb3IpOwogIH0KCiAgLy8vIFJ1bnMgW2JvZHldIGluIGEgZnJlc2ggW1pvbmVdIHVzaW5nIHRoZSBvdmVycmlkZXMgZm91bmQgaW4gW292ZXJyaWRlc10uCiAgLy8vCiAgLy8vIE5vdGUgdGhhdCBbb3ZlcnJpZGVzXSBzaG91bGQgYmUgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGV4dGVuZHMKICAvLy8gW0lPT3ZlcnJpZGVzXS4KICBzdGF0aWMgUiBydW5XaXRoSU9PdmVycmlkZXM8Uj4oUiBib2R5KCksIElPT3ZlcnJpZGVzIG92ZXJyaWRlcywKICAgICAge1pvbmVTcGVjaWZpY2F0aW9uIHpvbmVTcGVjaWZpY2F0aW9uLCBGdW5jdGlvbiBvbkVycm9yfSkgewogICAgcmV0dXJuIF9hc3luY1J1blpvbmVkPFI+KGJvZHksCiAgICAgICAgem9uZVZhbHVlczoge19pb092ZXJyaWRlc1Rva2VuOiBvdmVycmlkZXN9LAogICAgICAgIHpvbmVTcGVjaWZpY2F0aW9uOiB6b25lU3BlY2lmaWNhdGlvbiwKICAgICAgICBvbkVycm9yOiBvbkVycm9yKTsKICB9CgogIC8vIERpcmVjdG9yeQoKICAvLy8gQ3JlYXRlcyBhIG5ldyBbRGlyZWN0b3J5XSBvYmplY3QgZm9yIHRoZSBnaXZlbiBbcGF0aF0uCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBvdmVycmlkZSBpcyBpbnN0YWxsZWQsIHRoaXMgZnVuY3Rpb24gb3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZgogIC8vLyBgbmV3IERpcmVjdG9yeSgpYCBhbmQgYG5ldyBEaXJlY3RvcnkuZnJvbVVyaSgpYC4KICBEaXJlY3RvcnkgY3JlYXRlRGlyZWN0b3J5KFN0cmluZyBwYXRoKSA9PiBuZXcgX0RpcmVjdG9yeShwYXRoKTsKCiAgLy8vIFJldHVybnMgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBvdmVycmlkZSBpcyBpbnN0YWxsZWQsIHRoaXMgZnVuY3Rpb24gb3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZgogIC8vLyB0aGUgc3RhdGljIGdldHRlciBgRGlyZWN0b3J5LmN1cnJlbnRgCiAgRGlyZWN0b3J5IGdldEN1cnJlbnREaXJlY3RvcnkoKSA9PiBfRGlyZWN0b3J5LmN1cnJlbnQ7CgogIC8vLyBTZXRzIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHRvIGJlIFtwYXRoXS4KICAvLy8KICAvLy8gV2hlbiB0aGlzIG92ZXJyaWRlIGlzIGluc3RhbGxlZCwgdGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlIGJlaGF2aW9yIG9mCiAgLy8vIHRoZSBzZXR0ZXIgYERpcmVjdG9yeS5jdXJyZW50YC4KICB2b2lkIHNldEN1cnJlbnREaXJlY3RvcnkoU3RyaW5nIHBhdGgpIHsKICAgIF9EaXJlY3RvcnkuY3VycmVudCA9IHBhdGg7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgc3lzdGVtIHRlbXBvcmFyeSBkaXJlY3RvcnkuCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBvdmVycmlkZSBpcyBpbnN0YWxsZWQsIHRoaXMgZnVuY3Rpb24gb3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZgogIC8vLyBgRGlyZWN0b3J5LnN5c3RlbVRlbXBgLgogIERpcmVjdG9yeSBnZXRTeXN0ZW1UZW1wRGlyZWN0b3J5KCkgPT4gX0RpcmVjdG9yeS5zeXN0ZW1UZW1wOwoKICAvLyBGaWxlCgogIC8vLyBDcmVhdGVzIGEgbmV3IFtGaWxlXSBvYmplY3QgZm9yIHRoZSBnaXZlbiBbcGF0aF0uCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBvdmVycmlkZSBpcyBpbnN0YWxsZWQsIHRoaXMgZnVuY3Rpb24gb3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZgogIC8vLyBgbmV3IEZpbGUoKWAgYW5kIGBuZXcgRmlsZS5mcm9tVXJpKClgLgogIEZpbGUgY3JlYXRlRmlsZShTdHJpbmcgcGF0aCkgPT4gbmV3IF9GaWxlKHBhdGgpOwoKICAvLyBGaWxlU3RhdAoKICAvLy8gQXN5bmNocm9ub3VzbHkgcmV0dXJucyBbRmlsZVN0YXRdIGluZm9ybWF0aW9uIGZvciBbcGF0aF0uCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBvdmVycmlkZSBpcyBpbnN0YWxsZWQsIHRoaXMgZnVuY3Rpb24gb3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZgogIC8vLyBgRmlsZVN0YXQuc3RhdCgpYC4KICBGdXR1cmU8RmlsZVN0YXQ+IHN0YXQoU3RyaW5nIHBhdGgpIHsKICAgIHJldHVybiBGaWxlU3RhdC5fc3RhdChwYXRoKTsKICB9CgogIC8vLyBSZXR1cm5zIFtGaWxlU3RhdF0gaW5mb3JtYXRpb24gZm9yIFtwYXRoXS4KICAvLy8KICAvLy8gV2hlbiB0aGlzIG92ZXJyaWRlIGlzIGluc3RhbGxlZCwgdGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlIGJlaGF2aW9yIG9mCiAgLy8vIGBGaWxlU3RhdC5zdGF0U3luYygpYC4KICBGaWxlU3RhdCBzdGF0U3luYyhTdHJpbmcgcGF0aCkgewogICAgcmV0dXJuIEZpbGVTdGF0Ll9zdGF0U3luY0ludGVybmFsKHBhdGgpOwogIH0KCiAgLy8gRmlsZVN5c3RlbUVudGl0eQoKICAvLy8gQXN5bmNocm9ub3VzbHkgcmV0dXJucyBgdHJ1ZWAgaWYgW3BhdGgxXSBhbmQgW3BhdGgyXSBhcmUgcGF0aHMgdG8gdGhlCiAgLy8vIHNhbWUgZmlsZSBzeXN0ZW0gb2JqZWN0LgogIC8vLwogIC8vLyBXaGVuIHRoaXMgb3ZlcnJpZGUgaXMgaW5zdGFsbGVkLCB0aGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGUgYmVoYXZpb3Igb2YKICAvLy8gYEZpbGVTeXN0ZW1FbnRpdHkuaWRlbnRpY2FsYC4KICBGdXR1cmU8Ym9vbD4gZnNlSWRlbnRpY2FsKFN0cmluZyBwYXRoMSwgU3RyaW5nIHBhdGgyKSB7CiAgICByZXR1cm4gRmlsZVN5c3RlbUVudGl0eS5faWRlbnRpY2FsKHBhdGgxLCBwYXRoMik7CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW3BhdGgxXSBhbmQgW3BhdGgyXSBhcmUgcGF0aHMgdG8gdGhlCiAgLy8vIHNhbWUgZmlsZSBzeXN0ZW0gb2JqZWN0LgogIC8vLwogIC8vLyBXaGVuIHRoaXMgb3ZlcnJpZGUgaXMgaW5zdGFsbGVkLCB0aGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGUgYmVoYXZpb3Igb2YKICAvLy8gYEZpbGVTeXN0ZW1FbnRpdHkuaWRlbnRpY2FsU3luY2AuCiAgYm9vbCBmc2VJZGVudGljYWxTeW5jKFN0cmluZyBwYXRoMSwgU3RyaW5nIHBhdGgyKSB7CiAgICByZXR1cm4gRmlsZVN5c3RlbUVudGl0eS5faWRlbnRpY2FsU3luYyhwYXRoMSwgcGF0aDIpOwogIH0KCiAgLy8vIEFzeW5jaHJvbm91c2x5IHJldHVybnMgdGhlIFtGaWxlU3lzdGVtRW50aXR5VHlwZV0gZm9yIFtwYXRoXS4KICAvLy8KICAvLy8gV2hlbiB0aGlzIG92ZXJyaWRlIGlzIGluc3RhbGxlZCwgdGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlIGJlaGF2aW9yIG9mCiAgLy8vIGBGaWxlU3lzdGVtRW50aXR5LnR5cGVgLgogIEZ1dHVyZTxGaWxlU3lzdGVtRW50aXR5VHlwZT4gZnNlR2V0VHlwZShTdHJpbmcgcGF0aCwgYm9vbCBmb2xsb3dMaW5rcykgewogICAgcmV0dXJuIEZpbGVTeXN0ZW1FbnRpdHkuX2dldFR5cGVSZXF1ZXN0KHV0ZjguZW5jb2RlKHBhdGgpLCBmb2xsb3dMaW5rcyk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgW0ZpbGVTeXN0ZW1FbnRpdHlUeXBlXSBmb3IgW3BhdGhdLgogIC8vLwogIC8vLyBXaGVuIHRoaXMgb3ZlcnJpZGUgaXMgaW5zdGFsbGVkLCB0aGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGUgYmVoYXZpb3Igb2YKICAvLy8gYEZpbGVTeXN0ZW1FbnRpdHkudHlwZVN5bmNgLgogIEZpbGVTeXN0ZW1FbnRpdHlUeXBlIGZzZUdldFR5cGVTeW5jKFN0cmluZyBwYXRoLCBib29sIGZvbGxvd0xpbmtzKSB7CiAgICByZXR1cm4gRmlsZVN5c3RlbUVudGl0eS5fZ2V0VHlwZVN5bmNIZWxwZXIodXRmOC5lbmNvZGUocGF0aCksIGZvbGxvd0xpbmtzKTsKICB9CgogIC8vIF9GaWxlU3lzdGVtV2F0Y2hlcgoKICAvLy8gUmV0dXJucyBhIFtTdHJlYW1dIG9mIFtGaWxlU3lzdGVtRXZlbnRdcy4KICAvLy8KICAvLy8gV2hlbiB0aGlzIG92ZXJyaWRlIGlzIGluc3RhbGxlZCwgdGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlIGJlaGF2aW9yIG9mCiAgLy8vIGBGaWxlU3lzdGVtRW50aXR5LndhdGNoKClgLgogIFN0cmVhbTxGaWxlU3lzdGVtRXZlbnQ+IGZzV2F0Y2goU3RyaW5nIHBhdGgsIGludCBldmVudHMsIGJvb2wgcmVjdXJzaXZlKSB7CiAgICByZXR1cm4gX0ZpbGVTeXN0ZW1XYXRjaGVyLl93YXRjaChwYXRoLCBldmVudHMsIHJlY3Vyc2l2ZSk7CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgd2hlbiBbRmlsZVN5c3RlbUVudGl0eS53YXRjaF0gaXMgc3VwcG9ydGVkLgogIC8vLwogIC8vLyBXaGVuIHRoaXMgb3ZlcnJpZGUgaXMgaW5zdGFsbGVkLCB0aGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGUgYmVoYXZpb3Igb2YKICAvLy8gYEZpbGVTeXN0ZW1FbnRpdHkuaXNXYXRjaFN1cHBvcnRlZGAuCiAgYm9vbCBmc1dhdGNoSXNTdXBwb3J0ZWQoKSA9PiBfRmlsZVN5c3RlbVdhdGNoZXIuaXNTdXBwb3J0ZWQ7CgogIC8vIExpbmsKCiAgLy8vIFJldHVybnMgYSBuZXcgW0xpbmtdIG9iamVjdCBmb3IgdGhlIGdpdmVuIFtwYXRoXS4KICAvLy8KICAvLy8gV2hlbiB0aGlzIG92ZXJyaWRlIGlzIGluc3RhbGxlZCwgdGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlIGJlaGF2aW9yIG9mCiAgLy8vIGBuZXcgTGluaygpYCBhbmQgYG5ldyBMaW5rLmZyb21VcmkoKWAuCiAgTGluayBjcmVhdGVMaW5rKFN0cmluZyBwYXRoKSA9PiBuZXcgX0xpbmsocGF0aCk7CgogIC8vIFNvY2tldAoKICAvLy8gQXN5bmNocm9ub3VzbHkgcmV0dXJucyBhIFtTb2NrZXRdIGNvbm5lY3RlZCB0byB0aGUgZ2l2ZW4gaG9zdCBhbmQgcG9ydC4KICAvLy8KICAvLy8gV2hlbiB0aGlzIG92ZXJyaWRlIGlzIGluc3RhbGxlZCwgdGhpcyBmdW5jdGlvbnMgb3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZgogIC8vLyBgU29ja2V0LmNvbm5lY3QoLi4uKWAuCiAgRnV0dXJlPFNvY2tldD4gc29ja2V0Q29ubmVjdChob3N0LCBpbnQgcG9ydCwKICAgICAge3NvdXJjZUFkZHJlc3MsIER1cmF0aW9uIHRpbWVvdXR9KSB7CiAgICByZXR1cm4gU29ja2V0Ll9jb25uZWN0KGhvc3QsIHBvcnQsCiAgICAgICAgc291cmNlQWRkcmVzczogc291cmNlQWRkcmVzcywgdGltZW91dDogdGltZW91dCk7CiAgfQoKICAvLy8gQXN5bmNocm9ub3VzbHkgcmV0dXJucyBhIFtDb25uZWN0aW9uVGFza10gdGhhdCBjb25uZWN0cyB0byB0aGUgZ2l2ZW4gaG9zdAogIC8vLyBhbmQgcG9ydCB3aGVuIHN1Y2Nlc3NmdWwuCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBvdmVycmlkZSBpcyBpbnN0YWxsZWQsIHRoaXMgZnVuY3Rpb25zIG92ZXJyaWRlcyB0aGUgYmVoYXZpb3Igb2YKICAvLy8gYFNvY2tldC5zdGFydENvbm5lY3QoLi4uKWAuCiAgRnV0dXJlPENvbm5lY3Rpb25UYXNrPFNvY2tldD4+IHNvY2tldFN0YXJ0Q29ubmVjdChob3N0LCBpbnQgcG9ydCwKICAgICAge3NvdXJjZUFkZHJlc3N9KSB7CiAgICByZXR1cm4gU29ja2V0Ll9zdGFydENvbm5lY3QoaG9zdCwgcG9ydCwgc291cmNlQWRkcmVzczogc291cmNlQWRkcmVzcyk7CiAgfQp9CgpjbGFzcyBfSU9PdmVycmlkZXNTY29wZSBleHRlbmRzIElPT3ZlcnJpZGVzIHsKICBmaW5hbCBJT092ZXJyaWRlcyBfcHJldmlvdXMgPSBJT092ZXJyaWRlcy5jdXJyZW50OwoKICAvLyBEaXJlY3RvcnkKICBEaXJlY3RvcnkgRnVuY3Rpb24oU3RyaW5nKSBfY3JlYXRlRGlyZWN0b3J5OwogIERpcmVjdG9yeSBGdW5jdGlvbigpIF9nZXRDdXJyZW50RGlyZWN0b3J5OwogIHZvaWQgRnVuY3Rpb24oU3RyaW5nKSBfc2V0Q3VycmVudERpcmVjdG9yeTsKICBEaXJlY3RvcnkgRnVuY3Rpb24oKSBfZ2V0U3lzdGVtVGVtcERpcmVjdG9yeTsKCiAgLy8gRmlsZQogIEZpbGUgRnVuY3Rpb24oU3RyaW5nKSBfY3JlYXRlRmlsZTsKCiAgLy8gRmlsZVN0YXQKICBGdXR1cmU8RmlsZVN0YXQ+IEZ1bmN0aW9uKFN0cmluZykgX3N0YXQ7CiAgRmlsZVN0YXQgRnVuY3Rpb24oU3RyaW5nKSBfc3RhdFN5bmM7CgogIC8vIEZpbGVTeXN0ZW1FbnRpdHkKICBGdXR1cmU8Ym9vbD4gRnVuY3Rpb24oU3RyaW5nLCBTdHJpbmcpIF9mc2VJZGVudGljYWw7CiAgYm9vbCBGdW5jdGlvbihTdHJpbmcsIFN0cmluZykgX2ZzZUlkZW50aWNhbFN5bmM7CiAgRnV0dXJlPEZpbGVTeXN0ZW1FbnRpdHlUeXBlPiBGdW5jdGlvbihTdHJpbmcsIGJvb2wpIF9mc2VHZXRUeXBlOwogIEZpbGVTeXN0ZW1FbnRpdHlUeXBlIEZ1bmN0aW9uKFN0cmluZywgYm9vbCkgX2ZzZUdldFR5cGVTeW5jOwoKICAvLyBfRmlsZVN5c3RlbVdhdGNoZXIKICBTdHJlYW08RmlsZVN5c3RlbUV2ZW50PiBGdW5jdGlvbihTdHJpbmcsIGludCwgYm9vbCkgX2ZzV2F0Y2g7CiAgYm9vbCBGdW5jdGlvbigpIF9mc1dhdGNoSXNTdXBwb3J0ZWQ7CgogIC8vIExpbmsKICBMaW5rIEZ1bmN0aW9uKFN0cmluZykgX2NyZWF0ZUxpbms7CgogIC8vIFNvY2tldAogIEZ1dHVyZTxTb2NrZXQ+IEZ1bmN0aW9uKGR5bmFtaWMsIGludCwKICAgICAge2R5bmFtaWMgc291cmNlQWRkcmVzcywgRHVyYXRpb24gdGltZW91dH0pIF9zb2NrZXRDb25uZWN0OwogIEZ1dHVyZTxDb25uZWN0aW9uVGFzazxTb2NrZXQ+PiBGdW5jdGlvbihkeW5hbWljLCBpbnQsIHtkeW5hbWljIHNvdXJjZUFkZHJlc3N9KQogICAgICBfc29ja2V0U3RhcnRDb25uZWN0OwoKICBfSU9PdmVycmlkZXNTY29wZSgKICAgIC8vIERpcmVjdG9yeQogICAgdGhpcy5fY3JlYXRlRGlyZWN0b3J5LAogICAgdGhpcy5fZ2V0Q3VycmVudERpcmVjdG9yeSwKICAgIHRoaXMuX3NldEN1cnJlbnREaXJlY3RvcnksCiAgICB0aGlzLl9nZXRTeXN0ZW1UZW1wRGlyZWN0b3J5LAoKICAgIC8vIEZpbGUKICAgIHRoaXMuX2NyZWF0ZUZpbGUsCgogICAgLy8gRmlsZVN0YXQKICAgIHRoaXMuX3N0YXQsCiAgICB0aGlzLl9zdGF0U3luYywKCiAgICAvLyBGaWxlU3lzdGVtRW50aXR5CiAgICB0aGlzLl9mc2VJZGVudGljYWwsCiAgICB0aGlzLl9mc2VJZGVudGljYWxTeW5jLAogICAgdGhpcy5fZnNlR2V0VHlwZSwKICAgIHRoaXMuX2ZzZUdldFR5cGVTeW5jLAoKICAgIC8vIF9GaWxlU3lzdGVtV2F0Y2hlcgogICAgdGhpcy5fZnNXYXRjaCwKICAgIHRoaXMuX2ZzV2F0Y2hJc1N1cHBvcnRlZCwKCiAgICAvLyBMaW5rCiAgICB0aGlzLl9jcmVhdGVMaW5rLAoKICAgIC8vIFNvY2tldAogICAgdGhpcy5fc29ja2V0Q29ubmVjdCwKICAgIHRoaXMuX3NvY2tldFN0YXJ0Q29ubmVjdCwKICApOwoKICAvLyBEaXJlY3RvcnkKICBAb3ZlcnJpZGUKICBEaXJlY3RvcnkgY3JlYXRlRGlyZWN0b3J5KFN0cmluZyBwYXRoKSB7CiAgICBpZiAoX2NyZWF0ZURpcmVjdG9yeSAhPSBudWxsKSByZXR1cm4gX2NyZWF0ZURpcmVjdG9yeShwYXRoKTsKICAgIGlmIChfcHJldmlvdXMgIT0gbnVsbCkgcmV0dXJuIF9wcmV2aW91cy5jcmVhdGVEaXJlY3RvcnkocGF0aCk7CiAgICByZXR1cm4gc3VwZXIuY3JlYXRlRGlyZWN0b3J5KHBhdGgpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGlyZWN0b3J5IGdldEN1cnJlbnREaXJlY3RvcnkoKSB7CiAgICBpZiAoX2dldEN1cnJlbnREaXJlY3RvcnkgIT0gbnVsbCkgcmV0dXJuIF9nZXRDdXJyZW50RGlyZWN0b3J5KCk7CiAgICBpZiAoX3ByZXZpb3VzICE9IG51bGwpIHJldHVybiBfcHJldmlvdXMuZ2V0Q3VycmVudERpcmVjdG9yeSgpOwogICAgcmV0dXJuIHN1cGVyLmdldEN1cnJlbnREaXJlY3RvcnkoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgc2V0Q3VycmVudERpcmVjdG9yeShTdHJpbmcgcGF0aCkgewogICAgaWYgKF9zZXRDdXJyZW50RGlyZWN0b3J5ICE9IG51bGwpCiAgICAgIF9zZXRDdXJyZW50RGlyZWN0b3J5KHBhdGgpOwogICAgZWxzZSBpZiAoX3ByZXZpb3VzICE9IG51bGwpCiAgICAgIF9wcmV2aW91cy5zZXRDdXJyZW50RGlyZWN0b3J5KHBhdGgpOwogICAgZWxzZQogICAgICBzdXBlci5zZXRDdXJyZW50RGlyZWN0b3J5KHBhdGgpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGlyZWN0b3J5IGdldFN5c3RlbVRlbXBEaXJlY3RvcnkoKSB7CiAgICBpZiAoX2dldFN5c3RlbVRlbXBEaXJlY3RvcnkgIT0gbnVsbCkgcmV0dXJuIF9nZXRTeXN0ZW1UZW1wRGlyZWN0b3J5KCk7CiAgICBpZiAoX3ByZXZpb3VzICE9IG51bGwpIHJldHVybiBfcHJldmlvdXMuZ2V0U3lzdGVtVGVtcERpcmVjdG9yeSgpOwogICAgcmV0dXJuIHN1cGVyLmdldFN5c3RlbVRlbXBEaXJlY3RvcnkoKTsKICB9CgogIC8vIEZpbGUKICBAb3ZlcnJpZGUKICBGaWxlIGNyZWF0ZUZpbGUoU3RyaW5nIHBhdGgpIHsKICAgIGlmIChfY3JlYXRlRmlsZSAhPSBudWxsKSByZXR1cm4gX2NyZWF0ZUZpbGUocGF0aCk7CiAgICBpZiAoX3ByZXZpb3VzICE9IG51bGwpIHJldHVybiBfcHJldmlvdXMuY3JlYXRlRmlsZShwYXRoKTsKICAgIHJldHVybiBzdXBlci5jcmVhdGVGaWxlKHBhdGgpOwogIH0KCiAgLy8gRmlsZVN0YXQKICBAb3ZlcnJpZGUKICBGdXR1cmU8RmlsZVN0YXQ+IHN0YXQoU3RyaW5nIHBhdGgpIHsKICAgIGlmIChfc3RhdCAhPSBudWxsKSByZXR1cm4gX3N0YXQocGF0aCk7CiAgICBpZiAoX3ByZXZpb3VzICE9IG51bGwpIHJldHVybiBfcHJldmlvdXMuc3RhdChwYXRoKTsKICAgIHJldHVybiBzdXBlci5zdGF0KHBhdGgpOwogIH0KCiAgQG92ZXJyaWRlCiAgRmlsZVN0YXQgc3RhdFN5bmMoU3RyaW5nIHBhdGgpIHsKICAgIGlmIChfc3RhdCAhPSBudWxsKSByZXR1cm4gX3N0YXRTeW5jKHBhdGgpOwogICAgaWYgKF9wcmV2aW91cyAhPSBudWxsKSByZXR1cm4gX3ByZXZpb3VzLnN0YXRTeW5jKHBhdGgpOwogICAgcmV0dXJuIHN1cGVyLnN0YXRTeW5jKHBhdGgpOwogIH0KCiAgLy8gRmlsZVN5c3RlbUVudGl0eQogIEBvdmVycmlkZQogIEZ1dHVyZTxib29sPiBmc2VJZGVudGljYWwoU3RyaW5nIHBhdGgxLCBTdHJpbmcgcGF0aDIpIHsKICAgIGlmIChfZnNlSWRlbnRpY2FsICE9IG51bGwpIHJldHVybiBfZnNlSWRlbnRpY2FsKHBhdGgxLCBwYXRoMik7CiAgICBpZiAoX3ByZXZpb3VzICE9IG51bGwpIHJldHVybiBfcHJldmlvdXMuZnNlSWRlbnRpY2FsKHBhdGgxLCBwYXRoMik7CiAgICByZXR1cm4gc3VwZXIuZnNlSWRlbnRpY2FsKHBhdGgxLCBwYXRoMik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGZzZUlkZW50aWNhbFN5bmMoU3RyaW5nIHBhdGgxLCBTdHJpbmcgcGF0aDIpIHsKICAgIGlmIChfZnNlSWRlbnRpY2FsU3luYyAhPSBudWxsKSByZXR1cm4gX2ZzZUlkZW50aWNhbFN5bmMocGF0aDEsIHBhdGgyKTsKICAgIGlmIChfcHJldmlvdXMgIT0gbnVsbCkgcmV0dXJuIF9wcmV2aW91cy5mc2VJZGVudGljYWxTeW5jKHBhdGgxLCBwYXRoMik7CiAgICByZXR1cm4gc3VwZXIuZnNlSWRlbnRpY2FsU3luYyhwYXRoMSwgcGF0aDIpOwogIH0KCiAgQG92ZXJyaWRlCiAgRnV0dXJlPEZpbGVTeXN0ZW1FbnRpdHlUeXBlPiBmc2VHZXRUeXBlKFN0cmluZyBwYXRoLCBib29sIGZvbGxvd0xpbmtzKSB7CiAgICBpZiAoX2ZzZUdldFR5cGUgIT0gbnVsbCkgcmV0dXJuIF9mc2VHZXRUeXBlKHBhdGgsIGZvbGxvd0xpbmtzKTsKICAgIGlmIChfcHJldmlvdXMgIT0gbnVsbCkgcmV0dXJuIF9wcmV2aW91cy5mc2VHZXRUeXBlKHBhdGgsIGZvbGxvd0xpbmtzKTsKICAgIHJldHVybiBzdXBlci5mc2VHZXRUeXBlKHBhdGgsIGZvbGxvd0xpbmtzKTsKICB9CgogIEBvdmVycmlkZQogIEZpbGVTeXN0ZW1FbnRpdHlUeXBlIGZzZUdldFR5cGVTeW5jKFN0cmluZyBwYXRoLCBib29sIGZvbGxvd0xpbmtzKSB7CiAgICBpZiAoX2ZzZUdldFR5cGVTeW5jICE9IG51bGwpIHJldHVybiBfZnNlR2V0VHlwZVN5bmMocGF0aCwgZm9sbG93TGlua3MpOwogICAgaWYgKF9wcmV2aW91cyAhPSBudWxsKSByZXR1cm4gX3ByZXZpb3VzLmZzZUdldFR5cGVTeW5jKHBhdGgsIGZvbGxvd0xpbmtzKTsKICAgIHJldHVybiBzdXBlci5mc2VHZXRUeXBlU3luYyhwYXRoLCBmb2xsb3dMaW5rcyk7CiAgfQoKICAvLyBfRmlsZVN5c3RlbVdhdGNoZXIKICBAb3ZlcnJpZGUKICBTdHJlYW08RmlsZVN5c3RlbUV2ZW50PiBmc1dhdGNoKFN0cmluZyBwYXRoLCBpbnQgZXZlbnRzLCBib29sIHJlY3Vyc2l2ZSkgewogICAgaWYgKF9mc1dhdGNoICE9IG51bGwpIHJldHVybiBfZnNXYXRjaChwYXRoLCBldmVudHMsIHJlY3Vyc2l2ZSk7CiAgICBpZiAoX3ByZXZpb3VzICE9IG51bGwpIHJldHVybiBfcHJldmlvdXMuZnNXYXRjaChwYXRoLCBldmVudHMsIHJlY3Vyc2l2ZSk7CiAgICByZXR1cm4gc3VwZXIuZnNXYXRjaChwYXRoLCBldmVudHMsIHJlY3Vyc2l2ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGZzV2F0Y2hJc1N1cHBvcnRlZCgpIHsKICAgIGlmIChfZnNXYXRjaElzU3VwcG9ydGVkICE9IG51bGwpIHJldHVybiBfZnNXYXRjaElzU3VwcG9ydGVkKCk7CiAgICBpZiAoX3ByZXZpb3VzICE9IG51bGwpIHJldHVybiBfcHJldmlvdXMuZnNXYXRjaElzU3VwcG9ydGVkKCk7CiAgICByZXR1cm4gc3VwZXIuZnNXYXRjaElzU3VwcG9ydGVkKCk7CiAgfQoKICAvLyBMaW5rCiAgQG92ZXJyaWRlCiAgTGluayBjcmVhdGVMaW5rKFN0cmluZyBwYXRoKSB7CiAgICBpZiAoX2NyZWF0ZUxpbmsgIT0gbnVsbCkgcmV0dXJuIF9jcmVhdGVMaW5rKHBhdGgpOwogICAgaWYgKF9wcmV2aW91cyAhPSBudWxsKSByZXR1cm4gX3ByZXZpb3VzLmNyZWF0ZUxpbmsocGF0aCk7CiAgICByZXR1cm4gc3VwZXIuY3JlYXRlTGluayhwYXRoKTsKICB9CgogIC8vIFNvY2tldAogIEBvdmVycmlkZQogIEZ1dHVyZTxTb2NrZXQ+IHNvY2tldENvbm5lY3QoaG9zdCwgaW50IHBvcnQsCiAgICAgIHtzb3VyY2VBZGRyZXNzLCBEdXJhdGlvbiB0aW1lb3V0fSkgewogICAgaWYgKF9zb2NrZXRDb25uZWN0ICE9IG51bGwpIHsKICAgICAgcmV0dXJuIF9zb2NrZXRDb25uZWN0KGhvc3QsIHBvcnQsCiAgICAgICAgICBzb3VyY2VBZGRyZXNzOiBzb3VyY2VBZGRyZXNzLCB0aW1lb3V0OiB0aW1lb3V0KTsKICAgIH0KICAgIGlmIChfcHJldmlvdXMgIT0gbnVsbCkgewogICAgICByZXR1cm4gX3ByZXZpb3VzLnNvY2tldENvbm5lY3QoaG9zdCwgcG9ydCwKICAgICAgICAgIHNvdXJjZUFkZHJlc3M6IHNvdXJjZUFkZHJlc3MsIHRpbWVvdXQ6IHRpbWVvdXQpOwogICAgfQogICAgcmV0dXJuIHN1cGVyLnNvY2tldENvbm5lY3QoaG9zdCwgcG9ydCwKICAgICAgICBzb3VyY2VBZGRyZXNzOiBzb3VyY2VBZGRyZXNzLCB0aW1lb3V0OiB0aW1lb3V0KTsKICB9CgogIEBvdmVycmlkZQogIEZ1dHVyZTxDb25uZWN0aW9uVGFzazxTb2NrZXQ+PiBzb2NrZXRTdGFydENvbm5lY3QoaG9zdCwgaW50IHBvcnQsCiAgICAgIHtzb3VyY2VBZGRyZXNzfSkgewogICAgaWYgKF9zb2NrZXRTdGFydENvbm5lY3QgIT0gbnVsbCkgewogICAgICByZXR1cm4gX3NvY2tldFN0YXJ0Q29ubmVjdChob3N0LCBwb3J0LCBzb3VyY2VBZGRyZXNzOiBzb3VyY2VBZGRyZXNzKTsKICAgIH0KICAgIGlmIChfcHJldmlvdXMgIT0gbnVsbCkgewogICAgICByZXR1cm4gX3ByZXZpb3VzLnNvY2tldFN0YXJ0Q29ubmVjdChob3N0LCBwb3J0LAogICAgICAgICAgc291cmNlQWRkcmVzczogc291cmNlQWRkcmVzcyk7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuc29ja2V0U3RhcnRDb25uZWN0KGhvc3QsIHBvcnQsIHNvdXJjZUFkZHJlc3M6IHNvdXJjZUFkZHJlc3MpOwogIH0KfQqB4wBOTjwBEQEoASEBSBUER1E/BAgtCjYKBgQNIAxKNgxDBggdHgEjNwQBMwZNTiUtGQQBQgZMOCEIEzIwMTMBDigBEi4qARo6NkZCARxDKgEOKAEQLDkZPCceASIrGzMTFxsbHgEOEgESDBABGhQYEhYBHA8aAQ4SARAVGgcjNC4bBAFOBkoVQkEjNC4bBAEPAT0GTzdCAS0GTyw5ATcGTyYqHwQBLgZPHj8BCgE4Bk8tMwEOAUAGTxknIQQBMQZPHSMtBAEWAUwfBk8kOjYEAT0fBk8oNjoEAUQGTx9LTQQBNQZPI0dQBAEYATAGTyJNPwQBQQZPKz8BCgE4Bk8tMwEMAU4GUB0vKyc5BAFQIAZQIkQZSwQCAS41AQ8vLS4wAQolAQ4rJwEWNzNDPwEYQCcBCiUBDChBURsBFREbHx8iAQwWARAQFAEYGBwWGgEaEx4BDBYBDhkeBQEPDCtBQygEAQwkRUMoBAEMKiYiICsJJwQBDCdLRisEAQoMITc+IwQBDgwnKzgdBAEMIy88IQQBFgw6Q0gtBAEMNktMMQQBDEtESzAEAQxHTE80BAEYDE1ETjMEAQweQ0InBAEKDCE3PiMEAQwMLysiKDsGHTE7Bis5BAEMRBknTAYdNikGTwQCARZkYXJ0OmlvL292ZXJyaWRlcy5kYXJ0LG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pby9wbGF0Zm9ybS5kYXJ0newvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmlvOwoKLyoqCiAqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCB0aGUgY3VycmVudCBwcm9ncmFtIGlzIHJ1bm5pbmcuCiAqCiAqIFBsYXRmb3JtIHByb3ZpZGVzIGluZm9ybWF0aW9uIHN1Y2ggYXMgdGhlIG9wZXJhdGluZyBzeXN0ZW0sCiAqIHRoZSBob3N0bmFtZSBvZiB0aGUgY29tcHV0ZXIsIHRoZSB2YWx1ZSBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMsCiAqIHRoZSBwYXRoIHRvIHRoZSBydW5uaW5nIHByb2dyYW0sCiAqIGFuZCBzbyBvbi4KICoKICogIyMgR2V0IHRoZSBVUkkgdG8gdGhlIGN1cnJlbnQgRGFydCBzY3JpcHQKICoKICogVXNlIHRoZSBbc2NyaXB0XSBnZXR0ZXIgdG8gZ2V0IHRoZSBVUkkgdG8gdGhlIGN1cnJlbnRseSBydW5uaW5nCiAqIERhcnQgc2NyaXB0LgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmlvJyBzaG93IFBsYXRmb3JtOwogKgogKiAgICAgdm9pZCBtYWluKCkgewogKiAgICAgICAvLyBHZXQgdGhlIFVSSSBvZiB0aGUgc2NyaXB0IGJlaW5nIHJ1bi4KICogICAgICAgdmFyIHVyaSA9IFBsYXRmb3JtLnNjcmlwdDsKICogICAgICAgLy8gQ29udmVydCB0aGUgVVJJIHRvIGEgcGF0aC4KICogICAgICAgdmFyIHBhdGggPSB1cmkudG9GaWxlUGF0aCgpOwogKiAgICAgfQogKgogKiAjIyBHZXQgdGhlIHZhbHVlIG9mIGFuIGVudmlyb25tZW50IHZhcmlhYmxlCiAqCiAqIFRoZSBbZW52aXJvbm1lbnRdIGdldHRlciByZXR1cm5zIGEgdGhlIG5hbWVzIGFuZCB2YWx1ZXMgb2YgZW52aXJvbm1lbnQKICogdmFyaWFibGVzIGluIGEgW01hcF0gdGhhdCBjb250YWlucyBrZXktdmFsdWUgcGFpcnMgb2Ygc3RyaW5ncy4gVGhlIE1hcCBpcwogKiB1bm1vZGlmaWFibGUuIFRoaXMgc2FtcGxlIHNob3dzIGhvdyB0byBnZXQgdGhlIHZhbHVlIG9mIHRoZSBgUEFUSGAKICogZW52aXJvbm1lbnQgdmFyaWFibGUuCiAqCiAqICAgICBpbXBvcnQgJ2RhcnQ6aW8nIHNob3cgUGxhdGZvcm07CiAqCiAqICAgICB2b2lkIG1haW4oKSB7CiAqICAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52VmFycyA9IFBsYXRmb3JtLmVudmlyb25tZW50OwogKiAgICAgICBwcmludChlbnZWYXJzWydQQVRIJ10pOwogKiAgICAgfQogKgogKiAjIyBEZXRlcm1pbmUgdGhlIE9TCiAqCiAqIFlvdSBjYW4gZ2V0IHRoZSBuYW1lIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGFzIGEgc3RyaW5nIHdpdGggdGhlCiAqIFtvcGVyYXRpbmdTeXN0ZW1dIGdldHRlci4gWW91IGNhbiBhbHNvIHVzZSBvbmUgb2YgdGhlIHN0YXRpYyBib29sZWFuCiAqIGdldHRlcnM6IFtpc01hY09TXSwgW2lzTGludXhdLCBhbmQgW2lzV2luZG93c10uCiAqCiAqICAgICBpbXBvcnQgJ2RhcnQ6aW8nIHNob3cgUGxhdGZvcm0sIHN0ZG91dDsKICoKICogICAgIHZvaWQgbWFpbigpIHsKICogICAgICAgLy8gR2V0IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGFzIGEgc3RyaW5nLgogKiAgICAgICBTdHJpbmcgb3MgPSBQbGF0Zm9ybS5vcGVyYXRpbmdTeXN0ZW07CiAqICAgICAgIC8vIE9yLCB1c2UgYSBwcmVkaWNhdGUgZ2V0dGVyLgogKiAgICAgICBpZiAoUGxhdGZvcm0uaXNNYWNPUykgewogKiAgICAgICAgIHByaW50KCdpcyBhIE1hYycpOwogKiAgICAgICB9IGVsc2UgewogKiAgICAgICAgIHByaW50KCdpcyBub3QgYSBNYWMnKTsKICogICAgICAgfQogKiAgICAgfQogKgogKiAjIyBPdGhlciByZXNvdXJjZXMKICoKICogW0RhcnQgYnkgRXhhbXBsZV0oaHR0cHM6Ly93d3cuZGFydGxhbmcub3JnL2RhcnQtYnktZXhhbXBsZS8jZGFydC1pby1hbmQtY29tbWFuZC1saW5lLWFwcHMpCiAqIHByb3ZpZGVzIGFkZGl0aW9uYWwgdGFzay1vcmllbnRlZCBjb2RlIHNhbXBsZXMgdGhhdCBzaG93IGhvdyB0byB1c2UKICogdmFyaW91cyBBUEkgZnJvbSB0aGUgW2RhcnQ6aW9dIGxpYnJhcnkuCiAqLwpjbGFzcyBQbGF0Zm9ybSB7CiAgc3RhdGljIGZpbmFsIF9udW1iZXJPZlByb2Nlc3NvcnMgPSBfUGxhdGZvcm0ubnVtYmVyT2ZQcm9jZXNzb3JzOwogIHN0YXRpYyBmaW5hbCBfcGF0aFNlcGFyYXRvciA9IF9QbGF0Zm9ybS5wYXRoU2VwYXJhdG9yOwogIHN0YXRpYyBmaW5hbCBfb3BlcmF0aW5nU3lzdGVtID0gX1BsYXRmb3JtLm9wZXJhdGluZ1N5c3RlbTsKICBzdGF0aWMgZmluYWwgX29wZXJhdGluZ1N5c3RlbVZlcnNpb24gPSBfUGxhdGZvcm0ub3BlcmF0aW5nU3lzdGVtVmVyc2lvbjsKICBzdGF0aWMgZmluYWwgX2xvY2FsSG9zdG5hbWUgPSBfUGxhdGZvcm0ubG9jYWxIb3N0bmFtZTsKICBzdGF0aWMgZmluYWwgX3ZlcnNpb24gPSBfUGxhdGZvcm0udmVyc2lvbjsKCiAgLyoqCiAgICogVGhlIG51bWJlciBvZiBpbmRpdmlkdWFsIGV4ZWN1dGlvbiB1bml0cyBvZiB0aGUgbWFjaGluZS4KICAgKi8KICBzdGF0aWMgaW50IGdldCBudW1iZXJPZlByb2Nlc3NvcnMgPT4gX251bWJlck9mUHJvY2Vzc29yczsKCiAgLyoqCiAgICogVGhlIHBhdGggc2VwYXJhdG9yIHVzZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0gdG8gc2VwYXJhdGUKICAgKiBjb21wb25lbnRzIGluIGZpbGUgcGF0aHMuCiAgICovCiAgc3RhdGljIFN0cmluZyBnZXQgcGF0aFNlcGFyYXRvciA9PiBfcGF0aFNlcGFyYXRvcjsKCiAgLyoqCiAgICogR2V0IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGxvY2FsZS4KICAgKi8KICBzdGF0aWMgU3RyaW5nIGdldCBsb2NhbGVOYW1lID0+IF9QbGF0Zm9ybS5sb2NhbGVOYW1lKCk7CgogIC8qKgogICAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvciBwbGF0Zm9ybS4KICAgKi8KICBzdGF0aWMgU3RyaW5nIGdldCBvcGVyYXRpbmdTeXN0ZW0gPT4gX29wZXJhdGluZ1N5c3RlbTsKCiAgLyoqCiAgICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9yIHBsYXRmb3JtLgogICAqLwogIHN0YXRpYyBTdHJpbmcgZ2V0IG9wZXJhdGluZ1N5c3RlbVZlcnNpb24gPT4gX29wZXJhdGluZ1N5c3RlbVZlcnNpb247CgogIC8qKgogICAqIFRoZSBsb2NhbCBob3N0bmFtZSBmb3IgdGhlIHN5c3RlbS4KICAgKi8KICBzdGF0aWMgU3RyaW5nIGdldCBsb2NhbEhvc3RuYW1lID0+IF9sb2NhbEhvc3RuYW1lOwoKICAvKioKICAgKiBXaGV0aGVyIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGlzIGEgdmVyc2lvbiBvZgogICAqIFtMaW51eF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGludXgpLgogICAqCiAgICogVGhpcyB2YWx1ZSBpcyBgZmFsc2VgIGlmIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGlzIGEgc3BlY2lhbGl6ZWQKICAgKiB2ZXJzaW9uIG9mIExpbnV4IHRoYXQgaWRlbnRpZmllcyBpdHNlbGYgYnkgYSBkaWZmZXJlbnQgbmFtZSwKICAgKiBmb3IgZXhhbXBsZSBBbmRyb2lkIChzZWUgW2lzQW5kcm9pZF0pLgogICAqLwogIHN0YXRpYyBmaW5hbCBib29sIGlzTGludXggPSAoX29wZXJhdGluZ1N5c3RlbSA9PSAibGludXgiKTsKCiAgLyoqCiAgICogV2hldGhlciB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpcyBhIHZlcnNpb24gb2YKICAgKiBbbWFjT1NdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01hY09TKS4KICAgKi8KICBzdGF0aWMgZmluYWwgYm9vbCBpc01hY09TID0gKF9vcGVyYXRpbmdTeXN0ZW0gPT0gIm1hY29zIik7CgogIC8qKgogICAqIFdoZXRoZXIgdGhlIG9wZXJhdGluZyBzeXN0ZW0gaXMgYSB2ZXJzaW9uIG9mCiAgICogW01pY3Jvc29mdCBXaW5kb3dzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NaWNyb3NvZnRfV2luZG93cykuCiAgICovCiAgc3RhdGljIGZpbmFsIGJvb2wgaXNXaW5kb3dzID0gKF9vcGVyYXRpbmdTeXN0ZW0gPT0gIndpbmRvd3MiKTsKCiAgLyoqCiAgICogV2hldGhlciB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpcyBhIHZlcnNpb24gb2YKICAgKiBbQW5kcm9pZF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQW5kcm9pZF8lMjhvcGVyYXRpbmdfc3lzdGVtJTI5KS4KICAgKi8KICBzdGF0aWMgZmluYWwgYm9vbCBpc0FuZHJvaWQgPSAoX29wZXJhdGluZ1N5c3RlbSA9PSAiYW5kcm9pZCIpOwoKICAvKioKICAgKiBXaGV0aGVyIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGlzIGEgdmVyc2lvbiBvZgogICAqIFtpT1NdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lPUykuCiAgICovCiAgc3RhdGljIGZpbmFsIGJvb2wgaXNJT1MgPSAoX29wZXJhdGluZ1N5c3RlbSA9PSAiaW9zIik7CgogIC8qKgogICAqIFdoZXRoZXIgdGhlIG9wZXJhdGluZyBzeXN0ZW0gaXMgYSB2ZXJzaW9uIG9mCiAgICogW0Z1Y2hzaWFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dvb2dsZV9GdWNoc2lhKS4KICAgKi8KICBzdGF0aWMgZmluYWwgYm9vbCBpc0Z1Y2hzaWEgPSAoX29wZXJhdGluZ1N5c3RlbSA9PSAiZnVjaHNpYSIpOwoKICAvKioKICAgKiBUaGUgZW52aXJvbm1lbnQgZm9yIHRoaXMgcHJvY2VzcyBhcyBhIG1hcCBmcm9tIHN0cmluZyBrZXkgdG8gc3RyaW5nIHZhbHVlLgogICAqCiAgICogVGhlIG1hcCBpcyB1bm1vZGlmaWFibGUsCiAgICogYW5kIGl0cyBjb250ZW50IGlzIHJldHJpZXZlZCBmcm9tIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uIGl0cyBmaXJzdCB1c2UuCiAgICoKICAgKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgb24gV2luZG93cyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSwKICAgKiBzbyBvbiBXaW5kb3dzIHRoZSBtYXAgaXMgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgd2lsbCBjb252ZXJ0CiAgICogYWxsIGtleXMgdG8gdXBwZXIgY2FzZS4KICAgKiBPbiBvdGhlciBwbGF0Zm9ybXMsIGtleXMgY2FuIGJlIGRpc3Rpbmd1aXNoZWQgYnkgY2FzZS4KICAgKi8KICBzdGF0aWMgTWFwPFN0cmluZywgU3RyaW5nPiBnZXQgZW52aXJvbm1lbnQgPT4gX1BsYXRmb3JtLmVudmlyb25tZW50OwoKICAvKioKICAgKiBUaGUgcGF0aCBvZiB0aGUgZXhlY3V0YWJsZSB1c2VkIHRvIHJ1biB0aGUgc2NyaXB0IGluIHRoaXMgaXNvbGF0ZS4KICAgKgogICAqIFRoZSBsaXRlcmFsIHBhdGggdXNlZCB0byBpZGVudGlmeSB0aGUgc2NyaXB0LgogICAqIFRoaXMgcGF0aCBtaWdodCBiZSByZWxhdGl2ZSBvciBqdXN0IGJlIGEgbmFtZSBmcm9tIHdoaWNoIHRoZSBleGVjdXRhYmxlCiAgICogd2FzIGZvdW5kIGJ5IHNlYXJjaGluZyB0aGUgc3lzdGVtIHBhdGguCiAgICoKICAgKiBVc2UgW3Jlc29sdmVkRXhlY3V0YWJsZV0gdG8gZ2V0IGFuIGFic29sdXRlIHBhdGggdG8gdGhlIGV4ZWN1dGFibGUuCiAgICovCiAgc3RhdGljIFN0cmluZyBnZXQgZXhlY3V0YWJsZSA9PiBfUGxhdGZvcm0uZXhlY3V0YWJsZTsKCiAgLyoqCiAgICogVGhlIHBhdGggb2YgdGhlIGV4ZWN1dGFibGUgdXNlZCB0byBydW4gdGhlIHNjcmlwdCBpbiB0aGlzCiAgICogaXNvbGF0ZSBhZnRlciBpdCBoYXMgYmVlbiByZXNvbHZlZCBieSB0aGUgT1MuCiAgICoKICAgKiBUaGlzIGlzIHRoZSBhYnNvbHV0ZSBwYXRoLCB3aXRoIGFsbCBzeW1saW5rcyByZXNvbHZlZCwgdG8gdGhlCiAgICogZXhlY3V0YWJsZSB1c2VkIHRvIHJ1biB0aGUgc2NyaXB0LgogICAqLwogIHN0YXRpYyBTdHJpbmcgZ2V0IHJlc29sdmVkRXhlY3V0YWJsZSA9PiBfUGxhdGZvcm0ucmVzb2x2ZWRFeGVjdXRhYmxlOwoKICAvKioKICAgKiBUaGUgYWJzb2x1dGUgVVJJIG9mIHRoZSBzY3JpcHQgYmVpbmcgcnVuIGluIHRoaXMgaXNvbGF0ZS4KICAgKgogICAqIElmIHRoZSBzY3JpcHQgYXJndW1lbnQgb24gdGhlIGNvbW1hbmQgbGluZSBpcyByZWxhdGl2ZSwKICAgKiBpdCBpcyByZXNvbHZlZCB0byBhbiBhYnNvbHV0ZSBVUkkgYmVmb3JlIGZldGNoaW5nIHRoZSBzY3JpcHQsIGFuZAogICAqIHRoYXQgYWJzb2x1dGUgVVJJIGlzIHJldHVybmVkLgogICAqCiAgICogVVJJIHJlc29sdXRpb24gb25seSBkb2VzIHN0cmluZyBtYW5pcHVsYXRpb24gb24gdGhlIHNjcmlwdCBwYXRoLCBhbmQgdGhpcwogICAqIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgZmlsZSBzeXN0ZW0ncyBwYXRoIHJlc29sdXRpb24gYmVoYXZpb3IuIEZvcgogICAqIGV4YW1wbGUsIGEgc3ltYm9saWMgbGluayBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSAnLi4nIHdpbGwgbm90IGJlCiAgICogbG9va2VkIHVwLgogICAqCiAgICogSWYgdGhlIGV4ZWN1dGFibGUgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBbc2NyaXB0XSwKICAgKiB0aGUgVVJJIGlzIGVtcHR5LgogICAqLwogIHN0YXRpYyBVcmkgZ2V0IHNjcmlwdCA9PiBfUGxhdGZvcm0uc2NyaXB0OwoKICAvKioKICAgKiBUaGUgZmxhZ3MgcGFzc2VkIHRvIHRoZSBleGVjdXRhYmxlIHVzZWQgdG8gcnVuIHRoZSBzY3JpcHQgaW4gdGhpcyBpc29sYXRlLgogICAqCiAgICogVGhlc2UgYXJlIHRoZSBjb21tYW5kLWxpbmUgZmxhZ3MgdG8gdGhlIGV4ZWN1dGFibGUgdGhhdCBwcmVjZWRlcwogICAqIHRoZSBzY3JpcHQgbmFtZS4KICAgKiBQcm92aWRlcyBhIG5ldyBsaXN0IGV2ZXJ5IHRpbWUgdGhlIHZhbHVlIGlzIHJlYWQuCiAgICovCiAgc3RhdGljIExpc3Q8U3RyaW5nPiBnZXQgZXhlY3V0YWJsZUFyZ3VtZW50cyA9PiBfUGxhdGZvcm0uZXhlY3V0YWJsZUFyZ3VtZW50czsKCiAgLyoqCiAgICogVGhpcyByZXR1cm5zIGBudWxsYCwgYXMgYHBhY2thZ2VzL2AgZGlyZWN0b3JpZXMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQuCiAgICoKICAgKi8KICBARGVwcmVjYXRlZCgncGFja2FnZXMvIGRpcmVjdG9yeSByZXNvbHV0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgaW4gRGFydCAyJykKICBzdGF0aWMgU3RyaW5nIGdldCBwYWNrYWdlUm9vdCA9PiBudWxsOyAvLyBUT0RPKG1mYWlyaHVyc3QpOiByZW1vdmUgdGhpcwoKICAvKioKICAgKiBUaGUgYC0tcGFja2FnZXNgIGZsYWcgcGFzc2VkIHRvIHRoZSBleGVjdXRhYmxlIHVzZWQgdG8gcnVuIHRoZSBzY3JpcHQKICAgKiBpbiB0aGlzIGlzb2xhdGUuCiAgICoKICAgKiBJZiBwcmVzZW50LCBpdCBzcGVjaWZpZXMgYSBmaWxlIGRlc2NyaWJpbmcgaG93IERhcnQgcGFja2FnZXMgYXJlIGxvb2tlZCB1cC4KICAgKgogICAqIElzIGBudWxsYCBpZiB0aGVyZSBpcyBubyBgLS1wYWNrYWdlc2AgZmxhZy4KICAgKi8KICBzdGF0aWMgU3RyaW5nIGdldCBwYWNrYWdlQ29uZmlnID0+IF9QbGF0Zm9ybS5wYWNrYWdlQ29uZmlnOwoKICAvKioKICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgY3VycmVudCBEYXJ0IHJ1bnRpbWUuCiAgICoKICAgKiBUaGUgdmFsdWUgaXMgYSBbc2VtYW50aWMgdmVyc2lvbmluZ10oaHR0cDovL3NlbXZlci5vcmcpCiAgICogc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmVyc2lvbiBvZiB0aGUgY3VycmVudCBEYXJ0IHJ1bnRpbWUsCiAgICogcG9zc2libHkgZm9sbG93ZWQgYnkgd2hpdGVzcGFjZSBhbmQgb3RoZXIgdmVyc2lvbiBhbmQKICAgKiBidWlsZCBkZXRhaWxzLgogICAqLwogIHN0YXRpYyBTdHJpbmcgZ2V0IHZlcnNpb24gPT4gX3ZlcnNpb247Cn0KgOoATk48AREBBE4DP0UkDgMtA0MQAycDFTEkJyYJAy8DSk1GGQMnAxU9IQkDFwNFSDMDLwMVMi8oIR4SIgsJAxYDXkcrBBFDOT1LOS0BBj4GPAEGQR8GNQEGKQY6AQY9BjkBBkwGRwEGKAY1AQYyMwVEQiwGPQEGMjMGPQEGMksGQQEGMk4GQQEGMi8GOQEGMj4GQQEGUAUeTgU8QB08BkcBBkgFM00tBUkGOAEGPzMFQygGSAEGPwU9RyQFT0tHEAU+FwYtAQZQBUYWNwZQAQZOBQZLSgEGSxYFUQUxBj4BBi4FPUI7FAYpAgEVZGFydDppby9wbGF0Zm9ybS5kYXJ0MW9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pby9wbGF0Zm9ybV9pbXBsLmRhcnSWjS8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuaW87CgpjbGFzcyBfUGxhdGZvcm0gewogIGV4dGVybmFsIHN0YXRpYyBpbnQgX251bWJlck9mUHJvY2Vzc29ycygpOwogIGV4dGVybmFsIHN0YXRpYyBTdHJpbmcgX3BhdGhTZXBhcmF0b3IoKTsKICBleHRlcm5hbCBzdGF0aWMgU3RyaW5nIF9vcGVyYXRpbmdTeXN0ZW0oKTsKICBleHRlcm5hbCBzdGF0aWMgX29wZXJhdGluZ1N5c3RlbVZlcnNpb24oKTsKICBleHRlcm5hbCBzdGF0aWMgX2xvY2FsSG9zdG5hbWUoKTsKICBleHRlcm5hbCBzdGF0aWMgX2V4ZWN1dGFibGUoKTsKICBleHRlcm5hbCBzdGF0aWMgX3Jlc29sdmVkRXhlY3V0YWJsZSgpOwoKICAvKioKICAgKiBSZXRyaWV2ZSB0aGUgZW50cmllcyBvZiB0aGUgcHJvY2VzcyBlbnZpcm9ubWVudC4KICAgKgogICAqIFRoZSByZXN1bHQgaXMgYW4gW0l0ZXJhYmxlXSBvZiBzdHJpbmdzLCB3aGVyZSBlYWNoIHN0cmluZyByZXByZXNlbnRzCiAgICogYW4gZW52aXJvbm1lbnQgZW50cnkuCiAgICoKICAgKiBFbnZpcm9ubWVudCBlbnRyaWVzIHNob3VsZCBiZSBzdHJpbmdzIGNvbnRhaW5pbmcKICAgKiBhIG5vbi1lbXB0eSBuYW1lIGFuZCBhIHZhbHVlIHNlcGFyYXRlZCBieSBhICc9JyBjaGFyYWN0ZXIuCiAgICogVGhlIG5hbWUgZG9lcyBub3QgY29udGFpbiBhICc9JyBjaGFyYWN0ZXIsCiAgICogc28gdGhlIG5hbWUgaXMgZXZlcnl0aGluZyB1cCB0byB0aGUgZmlyc3QgJz0nIGNoYXJhY3Rlci4KICAgKiBWYWx1ZXMgYXJlIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0ICc9JyBjaGFyYWN0ZXIuCiAgICogQSB2YWx1ZSBtYXkgY29udGFpbiBmdXJ0aGVyICc9JyBjaGFyYWN0ZXJzLCBhbmQgaXQgbWF5IGJlIGVtcHR5LgogICAqCiAgICogUmV0dXJucyBhbiBbT1NFcnJvcl0gaWYgcmV0cmlldmluZyB0aGUgZW52aXJvbm1lbnQgZmFpbHMuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIF9lbnZpcm9ubWVudCgpOwogIGV4dGVybmFsIHN0YXRpYyBMaXN0PFN0cmluZz4gX2V4ZWN1dGFibGVBcmd1bWVudHMoKTsKICBleHRlcm5hbCBzdGF0aWMgU3RyaW5nIF9wYWNrYWdlUm9vdCgpOyAvLyBUT0RPKG1mYWlyaHVyc3QpOiByZW1vdmUgdGhpcwogIGV4dGVybmFsIHN0YXRpYyBTdHJpbmcgX3BhY2thZ2VDb25maWcoKTsKICBleHRlcm5hbCBzdGF0aWMgU3RyaW5nIF92ZXJzaW9uKCk7CiAgZXh0ZXJuYWwgc3RhdGljIFN0cmluZyBfbG9jYWxlTmFtZSgpOwogIGV4dGVybmFsIHN0YXRpYyBVcmkgX3NjcmlwdCgpOwoKICBzdGF0aWMgU3RyaW5nIGV4ZWN1dGFibGUgPSBfZXhlY3V0YWJsZSgpOwogIHN0YXRpYyBTdHJpbmcgcmVzb2x2ZWRFeGVjdXRhYmxlID0gX3Jlc29sdmVkRXhlY3V0YWJsZSgpOwogIHN0YXRpYyBTdHJpbmcgcGFja2FnZVJvb3Q7IC8vIFRPRE8obWZhaXJodXJzdCk6IHJlbW92ZSB0aGlzCiAgc3RhdGljIFN0cmluZyBwYWNrYWdlQ29uZmlnID0gX3BhY2thZ2VDb25maWcoKTsKCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHN0YXRpYyBTdHJpbmcgRnVuY3Rpb24oKSBfbG9jYWxlQ2xvc3VyZTsKICBzdGF0aWMgU3RyaW5nIGxvY2FsZU5hbWUoKSB7CiAgICBmaW5hbCByZXN1bHQgPSAoX2xvY2FsZUNsb3N1cmUgPT0gbnVsbCkgPyBfbG9jYWxlTmFtZSgpIDogX2xvY2FsZUNsb3N1cmUoKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8gQ2FjaGUgdGhlIE9TIGVudmlyb25tZW50LiBUaGlzIGNhbiBiZSBhbiBPU0Vycm9yIGluc3RhbmNlIGlmCiAgLy8gcmV0cmlldmluZyB0aGUgZW52aXJvbm1lbnQgZmFpbGVkLgogIHN0YXRpYyB2YXIgLypPU0Vycm9yfE1hcDxTdHJpbmcsU3RyaW5nPiovIF9lbnZpcm9ubWVudENhY2hlOwoKICBzdGF0aWMgaW50IGdldCBudW1iZXJPZlByb2Nlc3NvcnMgPT4gX251bWJlck9mUHJvY2Vzc29ycygpOwogIHN0YXRpYyBTdHJpbmcgZ2V0IHBhdGhTZXBhcmF0b3IgPT4gX3BhdGhTZXBhcmF0b3IoKTsKICBzdGF0aWMgU3RyaW5nIGdldCBvcGVyYXRpbmdTeXN0ZW0gPT4gX29wZXJhdGluZ1N5c3RlbSgpOwogIHN0YXRpYyBVcmkgZ2V0IHNjcmlwdCA9PiBfc2NyaXB0KCk7CgogIHN0YXRpYyBTdHJpbmcgX2NhY2hlZE9TVmVyc2lvbjsKICBzdGF0aWMgU3RyaW5nIGdldCBvcGVyYXRpbmdTeXN0ZW1WZXJzaW9uIHsKICAgIGlmIChfY2FjaGVkT1NWZXJzaW9uID09IG51bGwpIHsKICAgICAgdmFyIHJlc3VsdCA9IF9vcGVyYXRpbmdTeXN0ZW1WZXJzaW9uKCk7CiAgICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICAgIHRocm93IHJlc3VsdDsKICAgICAgfQogICAgICBfY2FjaGVkT1NWZXJzaW9uID0gcmVzdWx0OwogICAgfQogICAgcmV0dXJuIF9jYWNoZWRPU1ZlcnNpb247CiAgfQoKICBzdGF0aWMgU3RyaW5nIGdldCBsb2NhbEhvc3RuYW1lIHsKICAgIHZhciByZXN1bHQgPSBfbG9jYWxIb3N0bmFtZSgpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IHJlc3VsdDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0aWMgTGlzdDxTdHJpbmc+IGdldCBleGVjdXRhYmxlQXJndW1lbnRzID0+IF9leGVjdXRhYmxlQXJndW1lbnRzKCk7CgogIHN0YXRpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IGdldCBlbnZpcm9ubWVudCB7CiAgICBpZiAoX2Vudmlyb25tZW50Q2FjaGUgPT0gbnVsbCkgewogICAgICB2YXIgZW52ID0gX2Vudmlyb25tZW50KCk7CiAgICAgIGlmIChlbnYgaXMhIE9TRXJyb3IpIHsKICAgICAgICB2YXIgaXNXaW5kb3dzID0gb3BlcmF0aW5nU3lzdGVtID09ICd3aW5kb3dzJzsKICAgICAgICB2YXIgcmVzdWx0ID0gaXNXaW5kb3dzCiAgICAgICAgICAgID8gbmV3IF9DYXNlSW5zZW5zaXRpdmVTdHJpbmdNYXA8U3RyaW5nPigpCiAgICAgICAgICAgIDogbmV3IE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKICAgICAgICBmb3IgKHZhciBzdHIgaW4gZW52KSB7CiAgICAgICAgICBpZiAoc3RyID09IG51bGwpIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBUaGUgU3RyaW5ncyByZXR1cm5lZCBieSBbX2Vudmlyb25tZW50KCldIGFyZSBleHBlY3RlZCB0byBiZQogICAgICAgICAgLy8gdmFsaWQgZW52aXJvbm1lbnQgZW50cmllcywgYnV0IGV4Y2VwdGlvbnMgaGF2ZSBiZWVuIHNlZW4KICAgICAgICAgIC8vIChlLmcuLCBhbiBlbnRyeSBvZiBqdXN0ICc9JyBoYXMgYmVlbiBzZWVuIG9uIE9TL1gpLgogICAgICAgICAgLy8gSW52YWxpZCBlbnRyaWVzIChsaW5lcyB3aXRob3V0IGEgJz0nIG9yIHdpdGggYW4gZW1wdHkgbmFtZSkKICAgICAgICAgIC8vIGFyZSBkaXNjYXJkZWQuCiAgICAgICAgICB2YXIgZXF1YWxzSW5kZXggPSBzdHIuaW5kZXhPZignPScpOwogICAgICAgICAgaWYgKGVxdWFsc0luZGV4ID4gMCkgewogICAgICAgICAgICByZXN1bHRbc3RyLnN1YnN0cmluZygwLCBlcXVhbHNJbmRleCldID0KICAgICAgICAgICAgICAgIHN0ci5zdWJzdHJpbmcoZXF1YWxzSW5kZXggKyAxKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgX2Vudmlyb25tZW50Q2FjaGUgPSBuZXcgVW5tb2RpZmlhYmxlTWFwVmlldzxTdHJpbmcsIFN0cmluZz4ocmVzdWx0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfZW52aXJvbm1lbnRDYWNoZSA9IGVudjsKICAgICAgfQogICAgfQoKICAgIGlmIChfZW52aXJvbm1lbnRDYWNoZSBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IF9lbnZpcm9ubWVudENhY2hlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIF9lbnZpcm9ubWVudENhY2hlOwogICAgfQogIH0KCiAgc3RhdGljIFN0cmluZyBnZXQgdmVyc2lvbiA9PiBfdmVyc2lvbigpOwp9CgovLyBFbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgb24gV2luZG93cy4gSW4gb3JkZXIKLy8gdG8gcmVmbGVjdCB0aGF0IHdlIHVzZSBhIGNhc2UtaW5zZW5zaXRpdmUgc3RyaW5nIG1hcCBvbiBXaW5kb3dzLgpjbGFzcyBfQ2FzZUluc2Vuc2l0aXZlU3RyaW5nTWFwPFY+IGV4dGVuZHMgTWFwQmFzZTxTdHJpbmcsIFY+IHsKICBmaW5hbCBNYXA8U3RyaW5nLCBWPiBfbWFwID0gbmV3IE1hcDxTdHJpbmcsIFY+KCk7CgogIGJvb2wgY29udGFpbnNLZXkoT2JqZWN0IGtleSkgPT4KICAgICAga2V5IGlzIFN0cmluZyAmJiBfbWFwLmNvbnRhaW5zS2V5KGtleS50b1VwcGVyQ2FzZSgpKTsKICBib29sIGNvbnRhaW5zVmFsdWUoT2JqZWN0IHZhbHVlKSA9PiBfbWFwLmNvbnRhaW5zVmFsdWUodmFsdWUpOwogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgPT4ga2V5IGlzIFN0cmluZyA/IF9tYXBba2V5LnRvVXBwZXJDYXNlKCldIDogbnVsbDsKICB2b2lkIG9wZXJhdG9yIFtdPShTdHJpbmcga2V5LCBWIHZhbHVlKSB7CiAgICBfbWFwW2tleS50b1VwcGVyQ2FzZSgpXSA9IHZhbHVlOwogIH0KCiAgViBwdXRJZkFic2VudChTdHJpbmcga2V5LCBWIGlmQWJzZW50KCkpIHsKICAgIHJldHVybiBfbWFwLnB1dElmQWJzZW50KGtleS50b1VwcGVyQ2FzZSgpLCBpZkFic2VudCk7CiAgfQoKICB2b2lkIGFkZEFsbChNYXA8U3RyaW5nLCBWPiBvdGhlcikgewogICAgb3RoZXIuZm9yRWFjaCgoa2V5LCB2YWx1ZSkgPT4gdGhpc1trZXkudG9VcHBlckNhc2UoKV0gPSB2YWx1ZSk7CiAgfQoKICBWIHJlbW92ZShPYmplY3Qga2V5KSA9PiBrZXkgaXMgU3RyaW5nID8gX21hcC5yZW1vdmUoa2V5LnRvVXBwZXJDYXNlKCkpIDogbnVsbDsKCiAgdm9pZCBjbGVhcigpIHsKICAgIF9tYXAuY2xlYXIoKTsKICB9CgogIHZvaWQgZm9yRWFjaCh2b2lkIGYoU3RyaW5nIGtleSwgViB2YWx1ZSkpIHsKICAgIF9tYXAuZm9yRWFjaChmKTsKICB9CgogIEl0ZXJhYmxlPFN0cmluZz4gZ2V0IGtleXMgPT4gX21hcC5rZXlzOwogIEl0ZXJhYmxlPFY+IGdldCB2YWx1ZXMgPT4gX21hcC52YWx1ZXM7CiAgaW50IGdldCBsZW5ndGggPT4gX21hcC5sZW5ndGg7CiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfbWFwLmlzRW1wdHk7CiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfbWFwLmlzTm90RW1wdHk7CgogIEl0ZXJhYmxlPE1hcEVudHJ5PFN0cmluZywgVj4+IGdldCBlbnRyaWVzID0+IF9tYXAuZW50cmllczsKCiAgTWFwPEsyLCBWMj4gbWFwPEsyLCBWMj4oTWFwRW50cnk8SzIsIFYyPiB0cmFuc2Zvcm0oU3RyaW5nIGtleSwgViB2YWx1ZSkpID0+CiAgICAgIF9tYXAubWFwKHRyYW5zZm9ybSk7CgogIFYgdXBkYXRlKFN0cmluZyBrZXksIFYgdXBkYXRlKFYgdmFsdWUpLCB7ViBpZkFic2VudCgpfSkgPT4KICAgICAgX21hcC51cGRhdGUoa2V5LnRvVXBwZXJDYXNlKCksIHVwZGF0ZSwgaWZBYnNlbnQ6IGlmQWJzZW50KTsKCiAgdm9pZCB1cGRhdGVBbGwoViB1cGRhdGUoU3RyaW5nIGtleSwgViB2YWx1ZSkpIHsKICAgIF9tYXAudXBkYXRlQWxsKHVwZGF0ZSk7CiAgfQoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChTdHJpbmcga2V5LCBWIHZhbHVlKSkgewogICAgX21hcC5yZW1vdmVXaGVyZSh0ZXN0KTsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+IF9tYXAudG9TdHJpbmcoKTsKfQqAtABOTjwBEQESLSstLSQhKQEGNgVKGwU2QDA+OkYFPwYiN0orJSghASw8PjIBHCsfUB0UBhMEAUIoPwE+NzsmASItJC4fFgghBh0EASQjHRQGEwQBSQEvJSAdNh82KR8dFgxJRkFJHC4hNDAMCk0PIQgGASgfDSAGBAErAgFDREA0ASI8QU8rJQQBLDoEASZEBAFRARESBAEuFQQBKikhJCoBPQFOGwE9QgEyHAQBNRwEASgCARpkYXJ0OmlvL3BsYXRmb3JtX2ltcGwuZGFydDNvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvYmluL3BsYXRmb3JtX3BhdGNoLmRhcnSHdy8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb21tb25fcGF0Y2guZGFydCI7CgpAcGF0Y2gKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfUGxhdGZvcm0gewogIEBwYXRjaAogIHN0YXRpYyBpbnQgX251bWJlck9mUHJvY2Vzc29ycygpIG5hdGl2ZSAiUGxhdGZvcm1fTnVtYmVyT2ZQcm9jZXNzb3JzIjsKICBAcGF0Y2gKICBzdGF0aWMgU3RyaW5nIF9wYXRoU2VwYXJhdG9yKCkgbmF0aXZlICJQbGF0Zm9ybV9QYXRoU2VwYXJhdG9yIjsKICBAcGF0Y2gKICBzdGF0aWMgU3RyaW5nIF9vcGVyYXRpbmdTeXN0ZW0oKSBuYXRpdmUgIlBsYXRmb3JtX09wZXJhdGluZ1N5c3RlbSI7CiAgQHBhdGNoCiAgc3RhdGljIF9vcGVyYXRpbmdTeXN0ZW1WZXJzaW9uKCkgbmF0aXZlICJQbGF0Zm9ybV9PcGVyYXRpbmdTeXN0ZW1WZXJzaW9uIjsKICBAcGF0Y2gKICBzdGF0aWMgX2xvY2FsSG9zdG5hbWUoKSBuYXRpdmUgIlBsYXRmb3JtX0xvY2FsSG9zdG5hbWUiOwogIEBwYXRjaAogIHN0YXRpYyBfZXhlY3V0YWJsZSgpIG5hdGl2ZSAiUGxhdGZvcm1fRXhlY3V0YWJsZU5hbWUiOwogIEBwYXRjaAogIHN0YXRpYyBfcmVzb2x2ZWRFeGVjdXRhYmxlKCkgbmF0aXZlICJQbGF0Zm9ybV9SZXNvbHZlZEV4ZWN1dGFibGVOYW1lIjsKICBAcGF0Y2gKICBzdGF0aWMgX2Vudmlyb25tZW50KCkgbmF0aXZlICJQbGF0Zm9ybV9FbnZpcm9ubWVudCI7CiAgQHBhdGNoCiAgc3RhdGljIExpc3Q8U3RyaW5nPiBfZXhlY3V0YWJsZUFyZ3VtZW50cygpCiAgICAgIG5hdGl2ZSAiUGxhdGZvcm1fRXhlY3V0YWJsZUFyZ3VtZW50cyI7CiAgQHBhdGNoCiAgc3RhdGljIFN0cmluZyBfdmVyc2lvbigpIG5hdGl2ZSAiUGxhdGZvcm1fR2V0VmVyc2lvbiI7CgogIEBwYXRjaAogIHN0YXRpYyBTdHJpbmcgX2xvY2FsZU5hbWUoKSBuYXRpdmUgIlBsYXRmb3JtX0xvY2FsZU5hbWUiOwoKICBAcGF0Y2gKICBzdGF0aWMgU3RyaW5nIF9wYWNrYWdlUm9vdCgpID0+IFZNTGlicmFyeUhvb2tzLnBhY2thZ2VSb290U3RyaW5nOwogIEBwYXRjaAogIHN0YXRpYyBTdHJpbmcgX3BhY2thZ2VDb25maWcoKSA9PiBWTUxpYnJhcnlIb29rcy5wYWNrYWdlQ29uZmlnU3RyaW5nOwoKICBAcGF0Y2gKICBzdGF0aWMgVXJpIF9zY3JpcHQoKSA9PiBWTUxpYnJhcnlIb29rcy5wbGF0Zm9ybVNjcmlwdDsKCiAgLy8gVGhpcyBzY3JpcHQgc2luZ2xldG9uIGlzIHdyaXR0ZW4gdG8gYnkgdGhlIGVtYmVkZGVyIGlmIGFwcGxpY2FibGUuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHN0YXRpYyB2b2lkIHNldCBfbmF0aXZlU2NyaXB0KFN0cmluZyBwYXRoKSB7CiAgICBWTUxpYnJhcnlIb29rcy5wbGF0Zm9ybVNjcmlwdCA9ICgoKSB7CiAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoJ2h0dHA6JykgfHwKICAgICAgICAgIHBhdGguc3RhcnRzV2l0aCgnaHR0cHM6JykgfHwKICAgICAgICAgIHBhdGguc3RhcnRzV2l0aCgncGFja2FnZTonKSB8fAogICAgICAgICAgcGF0aC5zdGFydHNXaXRoKCdkYXJ0OicpIHx8CiAgICAgICAgICBwYXRoLnN0YXJ0c1dpdGgoJ2RhdGE6JykgfHwKICAgICAgICAgIHBhdGguc3RhcnRzV2l0aCgnZmlsZTonKSkgewogICAgICAgIHJldHVybiBVcmkucGFyc2UocGF0aCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIFVyaS5iYXNlLnJlc29sdmVVcmkobmV3IFVyaS5maWxlKHBhdGgpKTsKICAgICAgfQogICAgfSk7CiAgfQp9Cj0ATk48ASABBxoSCUkJQglGCU0JOwk5CUkJNwktLQk5AQk8AQlECUgBCTkBSBwvKiYnKSYmJiAPOAgIBAIBIWRhcnQ6aW8tcGF0Y2gvcGxhdGZvcm1fcGF0Y2guZGFydCtvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW8vcHJvY2Vzcy5kYXJ0wABn7S8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuaW87CgovLyBUT0RPKGFnZXIpOiBUaGUgb25seSByZWFzb24gZm9yIHRoaXMgY2xhc3MgaXMgdGhhdCB3ZQovLyBjYW5ub3QgcGF0Y2ggYSB0b3AtbGV2ZWwgYXQgdGhpcyBwb2ludC4KY2xhc3MgX1Byb2Nlc3NVdGlscyB7CiAgZXh0ZXJuYWwgc3RhdGljIHZvaWQgX2V4aXQoaW50IHN0YXR1cyk7CiAgZXh0ZXJuYWwgc3RhdGljIHZvaWQgX3NldEV4aXRDb2RlKGludCBzdGF0dXMpOwogIGV4dGVybmFsIHN0YXRpYyBpbnQgX2dldEV4aXRDb2RlKCk7CiAgZXh0ZXJuYWwgc3RhdGljIHZvaWQgX3NsZWVwKGludCBtaWxsaXMpOwogIGV4dGVybmFsIHN0YXRpYyBpbnQgX3BpZChQcm9jZXNzIHByb2Nlc3MpOwogIGV4dGVybmFsIHN0YXRpYyBTdHJlYW08UHJvY2Vzc1NpZ25hbD4gX3dhdGNoU2lnbmFsKFByb2Nlc3NTaWduYWwgc2lnbmFsKTsKfQoKLyoqCiAqIEV4aXQgdGhlIERhcnQgVk0gcHJvY2VzcyBpbW1lZGlhdGVseSB3aXRoIHRoZSBnaXZlbiBleGl0IGNvZGUuCiAqCiAqIFRoaXMgZG9lcyBub3Qgd2FpdCBmb3IgYW55IGFzeW5jaHJvbm91cyBvcGVyYXRpb25zIHRvIHRlcm1pbmF0ZS4gVXNpbmcKICogW2V4aXRdIGlzIHRoZXJlZm9yZSB2ZXJ5IGxpa2VseSB0byBsb3NlIGRhdGEuCiAqCiAqIFdoaWxlIGRlYnVnZ2luZywgdGhlIFZNIHdpbGwgbm90IHJlc3BlY3QgdGhlIGAtLXBhdXNlLWlzb2xhdGVzLW9uLWV4aXRgCiAqIGZsYWcgaWYgW2V4aXRdIGlzIGNhbGxlZCBhcyBpbnZva2luZyB0aGlzIG1ldGhvZCBjYXVzZXMgdGhlIERhcnQgVk0KICogcHJvY2VzcyB0byBzaHV0ZG93biBpbW1lZGlhdGVseS4gVG8gcHJvcGVybHkgYnJlYWsgb24gZXhpdCwgY29uc2lkZXIKICogY2FsbGluZyBbZGVidWdnZXJdIGZyb20gYGRhcnQ6ZGV2ZWxvcGVyYCBvciBbSXNvbGF0ZS5wYXVzZV0gZnJvbQogKiBgZGFydDppc29sYXRlYCBvbiBbSXNvbGF0ZS5jdXJyZW50XSB0byBwYXVzZSB0aGUgaXNvbGF0ZSBiZWZvcmUKICogaW52b2tpbmcgW2V4aXRdLgogKgogKiBUaGUgaGFuZGxpbmcgb2YgZXhpdCBjb2RlcyBpcyBwbGF0Zm9ybSBzcGVjaWZpYy4KICoKICogT24gTGludXggYW5kIE9TIFggYW4gZXhpdCBjb2RlIGZvciBub3JtYWwgdGVybWluYXRpb24gd2lsbCBhbHdheXMKICogYmUgaW4gdGhlIHJhbmdlIFswLi4yNTVdLiBJZiBhbiBleGl0IGNvZGUgb3V0c2lkZSB0aGlzIHJhbmdlIGlzCiAqIHNldCB0aGUgYWN0dWFsIGV4aXQgY29kZSB3aWxsIGJlIHRoZSBsb3dlciA4IGJpdHMgbWFza2VkIG9mZiBhbmQKICogdHJlYXRlZCBhcyBhbiB1bnNpZ25lZCB2YWx1ZS4gRS5nLiB1c2luZyBhbiBleGl0IGNvZGUgb2YgLTEgd2lsbAogKiByZXN1bHQgaW4gYW4gYWN0dWFsIGV4aXQgY29kZSBvZiAyNTUgYmVpbmcgcmVwb3J0ZWQuCiAqCiAqIE9uIFdpbmRvd3MgdGhlIGV4aXQgY29kZSBjYW4gYmUgc2V0IHRvIGFueSAzMi1iaXQgdmFsdWUuIEhvd2V2ZXIKICogc29tZSBvZiB0aGVzZSB2YWx1ZXMgYXJlIHJlc2VydmVkIGZvciByZXBvcnRpbmcgc3lzdGVtIGVycm9ycyBsaWtlCiAqIGNyYXNoZXMuCiAqCiAqIEJlc2lkZXMgdGhpcyB0aGUgRGFydCBleGVjdXRhYmxlIGl0c2VsZiB1c2VzIGFuIGV4aXQgY29kZSBvZiBgMjU0YAogKiBmb3IgcmVwb3J0aW5nIGNvbXBpbGUgdGltZSBlcnJvcnMgYW5kIGFuIGV4aXQgY29kZSBvZiBgMjU1YCBmb3IKICogcmVwb3J0aW5nIHJ1bnRpbWUgZXJyb3IgKHVuaGFuZGxlZCBleGNlcHRpb24pLgogKgogKiBEdWUgdG8gdGhlc2UgZmFjdHMgaXQgaXMgcmVjb21tZW5kZWQgdG8gb25seSB1c2UgZXhpdCBjb2RlcyBpbiB0aGUKICogcmFuZ2UgWzAuLjEyN10gZm9yIGNvbW11bmljYXRpbmcgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGEgRGFydAogKiBwcm9ncmFtIHRvIHRoZSBzdXJyb3VuZGluZyBlbnZpcm9ubWVudC4gVGhpcyB3aWxsIGF2b2lkIGFueQogKiBjcm9zcy1wbGF0Zm9ybSBpc3N1ZXMuCiAqLwp2b2lkIGV4aXQoaW50IGNvZGUpIHsKICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChjb2RlLCAiY29kZSIpOwogIGlmICghX0VtYmVkZGVyQ29uZmlnLl9tYXlFeGl0KSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiVGhpcyBlbWJlZGRlciBkaXNhbGxvd3MgY2FsbGluZyBkYXJ0OmlvJ3MgZXhpdCgpIik7CiAgfQogIF9Qcm9jZXNzVXRpbHMuX2V4aXQoY29kZSk7Cn0KCi8qKgogKiBTZXQgdGhlIGdsb2JhbCBleGl0IGNvZGUgZm9yIHRoZSBEYXJ0IFZNLgogKgogKiBUaGUgZXhpdCBjb2RlIGlzIGdsb2JhbCBmb3IgdGhlIERhcnQgVk0gYW5kIHRoZSBsYXN0IGFzc2lnbm1lbnQgdG8KICogZXhpdENvZGUgZnJvbSBhbnkgaXNvbGF0ZSBkZXRlcm1pbmVzIHRoZSBleGl0IGNvZGUgb2YgdGhlIERhcnQgVk0KICogb24gbm9ybWFsIHRlcm1pbmF0aW9uLgogKgogKiBEZWZhdWx0IHZhbHVlIGlzIGAwYC4KICoKICogU2VlIFtleGl0XSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY2hvc2UgYSB2YWx1ZSBmb3IgdGhlCiAqIGV4aXQgY29kZS4KICovCnZvaWQgc2V0IGV4aXRDb2RlKGludCBjb2RlKSB7CiAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwoY29kZSwgImNvZGUiKTsKICBfUHJvY2Vzc1V0aWxzLl9zZXRFeGl0Q29kZShjb2RlKTsKfQoKLyoqCiAqIEdldCB0aGUgZ2xvYmFsIGV4aXQgY29kZSBmb3IgdGhlIERhcnQgVk0uCiAqCiAqIFRoZSBleGl0IGNvZGUgaXMgZ2xvYmFsIGZvciB0aGUgRGFydCBWTSBhbmQgdGhlIGxhc3QgYXNzaWdubWVudCB0bwogKiBleGl0Q29kZSBmcm9tIGFueSBpc29sYXRlIGRldGVybWluZXMgdGhlIGV4aXQgY29kZSBvZiB0aGUgRGFydCBWTQogKiBvbiBub3JtYWwgdGVybWluYXRpb24uCiAqCiAqIFNlZSBbZXhpdF0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGNob3NlIGEgdmFsdWUgZm9yIHRoZQogKiBleGl0IGNvZGUuCiAqLwppbnQgZ2V0IGV4aXRDb2RlID0+IF9Qcm9jZXNzVXRpbHMuX2dldEV4aXRDb2RlKCk7CgovKioKICogU2xlZXAgZm9yIHRoZSBkdXJhdGlvbiBzcGVjaWZpZWQgaW4gW2R1cmF0aW9uXS4KICoKICogVXNlIHRoaXMgd2l0aCBjYXJlLCBhcyBubyBhc3luY2hyb25vdXMgb3BlcmF0aW9ucyBjYW4gYmUgcHJvY2Vzc2VkCiAqIGluIGEgaXNvbGF0ZSB3aGlsZSBpdCBpcyBibG9ja2VkIGluIGEgW3NsZWVwXSBjYWxsLgogKi8Kdm9pZCBzbGVlcChEdXJhdGlvbiBkdXJhdGlvbikgewogIGludCBtaWxsaXNlY29uZHMgPSBkdXJhdGlvbi5pbk1pbGxpc2Vjb25kczsKICBpZiAobWlsbGlzZWNvbmRzIDwgMCkgewogICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoInNsZWVwOiBkdXJhdGlvbiBjYW5ub3QgYmUgbmVnYXRpdmUiKTsKICB9CiAgaWYgKCFfRW1iZWRkZXJDb25maWcuX21heVNsZWVwKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiVGhpcyBlbWJlZGRlciBkaXNhbGxvd3MgY2FsbGluZyBkYXJ0OmlvJ3Mgc2xlZXAoKSIpOwogIH0KICBfUHJvY2Vzc1V0aWxzLl9zbGVlcChtaWxsaXNlY29uZHMpOwp9CgovKioKICogUmV0dXJucyB0aGUgUElEIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MuCiAqLwppbnQgZ2V0IHBpZCA9PiBfUHJvY2Vzc1V0aWxzLl9waWQobnVsbCk7CgovKioKICogW1Byb2Nlc3NJbmZvXSBwcm92aWRlcyBtZXRob2RzIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZQogKiBjdXJyZW50IHByb2Nlc3MuCiAqLwpjbGFzcyBQcm9jZXNzSW5mbyB7CiAgLyoqCiAgICogVGhlIGN1cnJlbnQgcmVzaWRlbnQgc2V0IHNpemUgb2YgbWVtb3J5IGZvciB0aGUgcHJvY2Vzcy4KICAgKgogICAqIE5vdGUgdGhhdCB0aGUgbWVhbmluZyBvZiB0aGlzIGZpZWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudC4gRm9yIGV4YW1wbGUsCiAgICogc29tZSBtZW1vcnkgYWNjb3VudGVkIGZvciBoZXJlIG1heSBiZSBzaGFyZWQgd2l0aCBvdGhlciBwcm9jZXNzZXMsIG9yIGlmCiAgICogdGhlIHNhbWUgcGFnZSBpcyBtYXBwZWQgaW50byBhIHByb2Nlc3MncyBhZGRyZXNzIHNwYWNlLCBpdCBtYXkgYmUgY291bnRlZAogICAqIHR3aWNlLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBpbnQgZ2V0IGN1cnJlbnRSc3M7CgogIC8qKgogICAqIFRoZSBoaWdoLXdhdGVybWFyayBpbiBieXRlcyBmb3IgdGhlIHJlc2lkZW50IHNldCBzaXplIG9mIG1lbW9yeSBmb3IgdGhlCiAgICogcHJvY2Vzcy4KICAgKgogICAqIE5vdGUgdGhhdCB0aGUgbWVhbmluZyBvZiB0aGlzIGZpZWxkIGlzIHBsYXRmb3JtIGRlcGVuZGVudC4gRm9yIGV4YW1wbGUsCiAgICogc29tZSBtZW1vcnkgYWNjb3VudGVkIGZvciBoZXJlIG1heSBiZSBzaGFyZWQgd2l0aCBvdGhlciBwcm9jZXNzZXMsIG9yIGlmCiAgICogdGhlIHNhbWUgcGFnZSBpcyBtYXBwZWQgaW50byBhIHByb2Nlc3MncyBhZGRyZXNzIHNwYWNlLCBpdCBtYXkgYmUgY291bnRlZAogICAqIHR3aWNlLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBpbnQgZ2V0IG1heFJzczsKfQoKLyoqCiAqIE1vZGVzIGZvciBydW5uaW5nIGEgbmV3IHByb2Nlc3MuCiAqLwpjbGFzcyBQcm9jZXNzU3RhcnRNb2RlIHsKICAvLy8gTm9ybWFsIGNoaWxkIHByb2Nlc3MuCiAgc3RhdGljIGNvbnN0IG5vcm1hbCA9IGNvbnN0IFByb2Nlc3NTdGFydE1vZGUuX2ludGVybmFsKDApOwogIEBEZXByZWNhdGVkKCJVc2Ugbm9ybWFsIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBOT1JNQUwgPSBub3JtYWw7CgogIC8vLyBTdGRpbyBoYW5kbGVzIGFyZSBpbmhlcml0ZWQgYnkgdGhlIGNoaWxkIHByb2Nlc3MuCiAgc3RhdGljIGNvbnN0IGluaGVyaXRTdGRpbyA9IGNvbnN0IFByb2Nlc3NTdGFydE1vZGUuX2ludGVybmFsKDEpOwogIEBEZXByZWNhdGVkKCJVc2UgaW5oZXJpdFN0ZGlvIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBJTkhFUklUX1NURElPID0gaW5oZXJpdFN0ZGlvOwoKICAvLy8gRGV0YWNoZWQgY2hpbGQgcHJvY2VzcyB3aXRoIG5vIG9wZW4gY29tbXVuaWNhdGlvbiBjaGFubmVsLgogIHN0YXRpYyBjb25zdCBkZXRhY2hlZCA9IGNvbnN0IFByb2Nlc3NTdGFydE1vZGUuX2ludGVybmFsKDIpOwogIEBEZXByZWNhdGVkKCJVc2UgZGV0YWNoZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IERFVEFDSEVEID0gZGV0YWNoZWQ7CgogIC8vLyBEZXRhY2hlZCBjaGlsZCBwcm9jZXNzIHdpdGggc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyIHN0aWxsIG9wZW4KICAvLy8gZm9yIGNvbW11bmljYXRpb24gd2l0aCB0aGUgY2hpbGQuCiAgc3RhdGljIGNvbnN0IGRldGFjaGVkV2l0aFN0ZGlvID0gY29uc3QgUHJvY2Vzc1N0YXJ0TW9kZS5faW50ZXJuYWwoMyk7CiAgQERlcHJlY2F0ZWQoIlVzZSBkZXRhY2hlZFdpdGhTdGRpbyBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgREVUQUNIRURfV0lUSF9TVERJTyA9IGRldGFjaGVkV2l0aFN0ZGlvOwoKICBzdGF0aWMgTGlzdDxQcm9jZXNzU3RhcnRNb2RlPiBnZXQgdmFsdWVzID0+IGNvbnN0IDxQcm9jZXNzU3RhcnRNb2RlPlsKICAgICAgICBub3JtYWwsCiAgICAgICAgaW5oZXJpdFN0ZGlvLAogICAgICAgIGRldGFjaGVkLAogICAgICAgIGRldGFjaGVkV2l0aFN0ZGlvCiAgICAgIF07CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgY29uc3QgWyJub3JtYWwiLCAiaW5oZXJpdFN0ZGlvIiwgImRldGFjaGVkIiwgImRldGFjaGVkV2l0aFN0ZGlvIl1bX21vZGVdOwoKICBmaW5hbCBpbnQgX21vZGU7CiAgY29uc3QgUHJvY2Vzc1N0YXJ0TW9kZS5faW50ZXJuYWwodGhpcy5fbW9kZSk7Cn0KCi8qKgogKiBUaGUgbWVhbnMgdG8gZXhlY3V0ZSBhIHByb2dyYW0uCiAqCiAqIFVzZSB0aGUgc3RhdGljIFtzdGFydF0gYW5kIFtydW5dIG1ldGhvZHMgdG8gc3RhcnQgYSBuZXcgcHJvY2Vzcy4KICogVGhlIHJ1biBtZXRob2QgZXhlY3V0ZXMgdGhlIHByb2Nlc3Mgbm9uLWludGVyYWN0aXZlbHkgdG8gY29tcGxldGlvbi4KICogSW4gY29udHJhc3QsIHRoZSBzdGFydCBtZXRob2QgYWxsb3dzIHlvdXIgY29kZSB0byBpbnRlcmFjdCB3aXRoIHRoZQogKiBydW5uaW5nIHByb2Nlc3MuCiAqCiAqICMjIFN0YXJ0IGEgcHJvY2VzcyB3aXRoIHRoZSBydW4gbWV0aG9kCiAqCiAqIFRoZSBmb2xsb3dpbmcgY29kZSBzYW1wbGUgdXNlcyB0aGUgcnVuIG1ldGhvZCB0byBjcmVhdGUgYSBwcm9jZXNzCiAqIHRoYXQgcnVucyB0aGUgVU5JWCBjb21tYW5kIGBsc2AsIHdoaWNoIGxpc3RzIHRoZSBjb250ZW50cyBvZiBhIGRpcmVjdG9yeS4KICogVGhlIHJ1biBtZXRob2QgY29tcGxldGVzIHdpdGggYSBbUHJvY2Vzc1Jlc3VsdF0gb2JqZWN0IHdoZW4gdGhlIHByb2Nlc3MKICogdGVybWluYXRlcy4gVGhpcyBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIG91dHB1dCBhbmQgZXhpdCBjb2RlIGZyb20gdGhlCiAqIHByb2Nlc3MuIFRoZSBydW4gbWV0aG9kIGRvZXMgbm90IHJldHVybiBhIFByb2Nlc3Mgb2JqZWN0OyB0aGlzIHByZXZlbnRzIHlvdXIKICogY29kZSBmcm9tIGludGVyYWN0aW5nIHdpdGggdGhlIHJ1bm5pbmcgcHJvY2Vzcy4KICoKICogICAgIGltcG9ydCAnZGFydDppbyc7CiAqCiAqICAgICBtYWluKCkgewogKiAgICAgICAvLyBMaXN0IGFsbCBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgaW4gVU5JWC1saWtlIHN5c3RlbXMuCiAqICAgICAgIFByb2Nlc3MucnVuKCdscycsIFsnLWwnXSkudGhlbigoUHJvY2Vzc1Jlc3VsdCByZXN1bHRzKSB7CiAqICAgICAgICAgcHJpbnQocmVzdWx0cy5zdGRvdXQpOwogKiAgICAgICB9KTsKICogICAgIH0KICoKICogIyMgU3RhcnQgYSBwcm9jZXNzIHdpdGggdGhlIHN0YXJ0IG1ldGhvZAogKgogKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgdXNlcyBzdGFydCB0byBjcmVhdGUgdGhlIHByb2Nlc3MuCiAqIFRoZSBzdGFydCBtZXRob2QgcmV0dXJucyBhIFtGdXR1cmVdIGZvciBhIFByb2Nlc3Mgb2JqZWN0LgogKiBXaGVuIHRoZSBmdXR1cmUgY29tcGxldGVzIHRoZSBwcm9jZXNzIGlzIHN0YXJ0ZWQgYW5kCiAqIHlvdXIgY29kZSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUKICogUHJvY2Vzczogd3JpdGluZyB0byBzdGRpbiwgbGlzdGVuaW5nIHRvIHN0ZG91dCwgYW5kIHNvIG9uLgogKgogKiBUaGUgZm9sbG93aW5nIHNhbXBsZSBzdGFydHMgdGhlIFVOSVggYGNhdGAgdXRpbGl0eSwgd2hpY2ggd2hlbiBnaXZlbiBubwogKiBjb21tYW5kLWxpbmUgYXJndW1lbnRzLCBlY2hvcyBpdHMgaW5wdXQuCiAqIFRoZSBwcm9ncmFtIHdyaXRlcyB0byB0aGUgcHJvY2VzcydzIHN0YW5kYXJkIGlucHV0IHN0cmVhbQogKiBhbmQgcHJpbnRzIGRhdGEgZnJvbSBpdHMgc3RhbmRhcmQgb3V0cHV0IHN0cmVhbS4KICoKICogICAgIGltcG9ydCAnZGFydDppbyc7CiAqICAgICBpbXBvcnQgJ2RhcnQ6Y29udmVydCc7CiAqCiAqICAgICBtYWluKCkgewogKiAgICAgICBQcm9jZXNzLnN0YXJ0KCdjYXQnLCBbXSkudGhlbigoUHJvY2VzcyBwcm9jZXNzKSB7CiAqICAgICAgICAgcHJvY2Vzcy5zdGRvdXQKICogICAgICAgICAgICAgLnRyYW5zZm9ybSh1dGY4LmRlY29kZXIpCiAqICAgICAgICAgICAgIC5saXN0ZW4oKGRhdGEpIHsgcHJpbnQoZGF0YSk7IH0pOwogKiAgICAgICAgIHByb2Nlc3Muc3RkaW4ud3JpdGVsbignSGVsbG8sIHdvcmxkIScpOwogKiAgICAgICAgIHByb2Nlc3Muc3RkaW4ud3JpdGVsbignSGVsbG8sIGdhbGF4eSEnKTsKICogICAgICAgICBwcm9jZXNzLnN0ZGluLndyaXRlbG4oJ0hlbGxvLCB1bml2ZXJzZSEnKTsKICogICAgICAgfSk7CiAqICAgICB9CiAqCiAqICMjIFN0YW5kYXJkIEkvTyBzdHJlYW1zCiAqCiAqIEFzIHNlZW4gaW4gdGhlIHByZXZpb3VzIGNvZGUgc2FtcGxlLCB5b3UgY2FuIGludGVyYWN0IHdpdGggdGhlIFByb2Nlc3MncwogKiBzdGFuZGFyZCBvdXRwdXQgc3RyZWFtIHRocm91Z2ggdGhlIGdldHRlciBbc3Rkb3V0XSwKICogYW5kIHlvdSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgUHJvY2VzcydzIHN0YW5kYXJkIGlucHV0IHN0cmVhbSB0aHJvdWdoCiAqIHRoZSBnZXR0ZXIgW3N0ZGluXS4KICogSW4gYWRkaXRpb24sIFByb2Nlc3MgcHJvdmlkZXMgYSBnZXR0ZXIgW3N0ZGVycl0gZm9yIHVzaW5nIHRoZSBQcm9jZXNzJ3MKICogc3RhbmRhcmQgZXJyb3Igc3RyZWFtLgogKgogKiBBIFByb2Nlc3MncyBzdHJlYW1zIGFyZSBkaXN0aW5jdCBmcm9tIHRoZSB0b3AtbGV2ZWwgc3RyZWFtcwogKiBmb3IgdGhlIGN1cnJlbnQgcHJvZ3JhbS4KICoKICogIyMgRXhpdCBjb2RlcwogKgogKiBDYWxsIHRoZSBbZXhpdENvZGVdIG1ldGhvZCB0byBnZXQgdGhlIGV4aXQgY29kZSBvZiB0aGUgcHJvY2Vzcy4KICogVGhlIGV4aXQgY29kZSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcHJvZ3JhbSB0ZXJtaW5hdGVkIHN1Y2Nlc3NmdWxseQogKiAodXN1YWxseSBpbmRpY2F0ZWQgd2l0aCBhbiBleGl0IGNvZGUgb2YgMCkgb3Igd2l0aCBhbiBlcnJvci4KICoKICogSWYgdGhlIHN0YXJ0IG1ldGhvZCBpcyB1c2VkLCB0aGUgZXhpdENvZGUgaXMgYXZhaWxhYmxlIHRocm91Z2ggYSBmdXR1cmUKICogb24gdGhlIFByb2Nlc3Mgb2JqZWN0IChhcyBzaG93biBpbiB0aGUgZXhhbXBsZSBiZWxvdykuCiAqIElmIHRoZSBydW4gbWV0aG9kIGlzIHVzZWQsIHRoZSBleGl0Q29kZSBpcyBhdmFpbGFibGUKICogdGhyb3VnaCBhIGdldHRlciBvbiB0aGUgUHJvY2Vzc1Jlc3VsdCBpbnN0YW5jZS4KICoKICogICAgIGltcG9ydCAnZGFydDppbyc7CiAqCiAqICAgICBtYWluKCkgewogKiAgICAgICBQcm9jZXNzLnN0YXJ0KCdscycsIFsnLWwnXSkudGhlbigocHJvY2VzcykgewogKiAgICAgICAgIC8vIEdldCB0aGUgZXhpdCBjb2RlIGZyb20gdGhlIG5ldyBwcm9jZXNzLgogKiAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUudGhlbigoZXhpdENvZGUpIHsKICogICAgICAgICAgIHByaW50KCdleGl0IGNvZGU6ICRleGl0Q29kZScpOwogKiAgICAgICAgIH0pOwogKiAgICAgICB9KTsKICogICAgIH0KICoKICogIyMgT3RoZXIgcmVzb3VyY2VzCiAqCiAqIFtEYXJ0IGJ5IEV4YW1wbGVdKGh0dHBzOi8vd3d3LmRhcnRsYW5nLm9yZy9kYXJ0LWJ5LWV4YW1wbGUvI2RhcnQtaW8tYW5kLWNvbW1hbmQtbGluZS1hcHBzKQogKiBwcm92aWRlcyBhZGRpdGlvbmFsIHRhc2stb3JpZW50ZWQgY29kZSBzYW1wbGVzIHRoYXQgc2hvdyBob3cgdG8gdXNlCiAqIHZhcmlvdXMgQVBJIGZyb20gdGhlIFtkYXJ0OmlvXSBsaWJyYXJ5LgogKi8KYWJzdHJhY3QgY2xhc3MgUHJvY2VzcyB7CiAgLyoqCiAgICogUmV0dXJucyBhIFs6RnV0dXJlOl0gd2hpY2ggY29tcGxldGVzIHdpdGggdGhlIGV4aXQgY29kZSBvZiB0aGUgcHJvY2VzcwogICAqIHdoZW4gdGhlIHByb2Nlc3MgY29tcGxldGVzLgogICAqCiAgICogVGhlIGhhbmRsaW5nIG9mIGV4aXQgY29kZXMgaXMgcGxhdGZvcm0gc3BlY2lmaWMuCiAgICoKICAgKiBPbiBMaW51eCBhbmQgT1MgWCBhIG5vcm1hbCBleGl0IGNvZGUgd2lsbCBiZSBhIHBvc2l0aXZlIHZhbHVlIGluCiAgICogdGhlIHJhbmdlIFswLi4yNTVdLiBJZiB0aGUgcHJvY2VzcyB3YXMgdGVybWluYXRlZCBkdWUgdG8gYSBzaWduYWwKICAgKiB0aGUgZXhpdCBjb2RlIHdpbGwgYmUgYSBuZWdhdGl2ZSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWy0yNTUuLi0xXSwKICAgKiB3aGVyZSB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIGV4aXQgY29kZSBpcyB0aGUgc2lnbmFsCiAgICogbnVtYmVyLiBGb3IgZXhhbXBsZSwgaWYgYSBwcm9jZXNzIGNyYXNoZXMgZHVlIHRvIGEgc2VnbWVudGF0aW9uCiAgICogdmlvbGF0aW9uIHRoZSBleGl0IGNvZGUgd2lsbCBiZSAtMTEsIGFzIHRoZSBzaWduYWwgU0lHU0VHViBoYXMgdGhlCiAgICogbnVtYmVyIDExLgogICAqCiAgICogT24gV2luZG93cyBhIHByb2Nlc3MgY2FuIHJlcG9ydCBhbnkgMzItYml0IHZhbHVlIGFzIGFuIGV4aXQKICAgKiBjb2RlLiBXaGVuIHJldHVybmluZyB0aGUgZXhpdCBjb2RlIHRoaXMgZXhpdCBjb2RlIGlzIHR1cm5lZCBpbnRvCiAgICogYSBzaWduZWQgdmFsdWUuIFNvbWUgc3BlY2lhbCB2YWx1ZXMgYXJlIHVzZWQgdG8gcmVwb3J0CiAgICogdGVybWluYXRpb24gZHVlIHRvIHNvbWUgc3lzdGVtIGV2ZW50LiBFLmcuIGlmIGEgcHJvY2VzcyBjcmFzaGVzCiAgICogZHVlIHRvIGFuIGFjY2VzcyB2aW9sYXRpb24gdGhlIDMyLWJpdCBleGl0IGNvZGUgaXMgYDB4YzAwMDAwMDVgLAogICAqIHdoaWNoIHdpbGwgYmUgcmV0dXJuZWQgYXMgdGhlIG5lZ2F0aXZlIG51bWJlciBgLTEwNzM3NDE4MTlgLiBUbwogICAqIGdldCB0aGUgb3JpZ2luYWwgMzItYml0IHZhbHVlIHVzZSBgKDB4MTAwMDAwMDAwICsgZXhpdENvZGUpICYKICAgKiAweGZmZmZmZmZmYC4KICAgKgogICAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IFtzdGRvdXRdIGFuZCBbc3RkZXJyXSBoYXZlIGZpbmlzaGVkIHJlcG9ydGluZwogICAqIHRoZSBidWZmZXJlZCBvdXRwdXQgb2YgdGhlIHByb2Nlc3Mgd2hlbiB0aGUgcmV0dXJuZWQgZnV0dXJlIGNvbXBsZXRlcy4KICAgKiBUbyBiZSBzdXJlIHRoYXQgYWxsIG91dHB1dCBpcyBjYXB0dXJlZCwKICAgKiB3YWl0IGZvciB0aGUgZG9uZSBldmVudCBvbiB0aGUgc3RyZWFtcy4KICAgKi8KICBGdXR1cmU8aW50PiBnZXQgZXhpdENvZGU7CgogIC8qKgogICAqIFN0YXJ0cyBhIHByb2Nlc3MgcnVubmluZyB0aGUgW2V4ZWN1dGFibGVdIHdpdGggdGhlIHNwZWNpZmllZAogICAqIFthcmd1bWVudHNdLiBSZXR1cm5zIGEgWzpGdXR1cmU8UHJvY2Vzcz46XSB0aGF0IGNvbXBsZXRlcyB3aXRoIGEKICAgKiBQcm9jZXNzIGluc3RhbmNlIHdoZW4gdGhlIHByb2Nlc3MgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5CiAgICogc3RhcnRlZC4gVGhhdCBbUHJvY2Vzc10gb2JqZWN0IGNhbiBiZSB1c2VkIHRvIGludGVyYWN0IHdpdGggdGhlCiAgICogcHJvY2Vzcy4gSWYgdGhlIHByb2Nlc3MgY2Fubm90IGJlIHN0YXJ0ZWQgdGhlIHJldHVybmVkIFtGdXR1cmVdCiAgICogY29tcGxldGVzIHdpdGggYW4gZXhjZXB0aW9uLgogICAqCiAgICogVXNlIFt3b3JraW5nRGlyZWN0b3J5XSB0byBzZXQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGZvciB0aGUgcHJvY2Vzcy4gTm90ZQogICAqIHRoYXQgdGhlIGNoYW5nZSBvZiBkaXJlY3Rvcnkgb2NjdXJzIGJlZm9yZSBleGVjdXRpbmcgdGhlIHByb2Nlc3Mgb24gc29tZQogICAqIHBsYXRmb3Jtcywgd2hpY2ggbWF5IGhhdmUgaW1wYWN0IHdoZW4gdXNpbmcgcmVsYXRpdmUgcGF0aHMgZm9yIHRoZQogICAqIGV4ZWN1dGFibGUgYW5kIHRoZSBhcmd1bWVudHMuCiAgICoKICAgKiBVc2UgW2Vudmlyb25tZW50XSB0byBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIHByb2Nlc3MuIElmIG5vdAogICAqIHNldCB0aGUgZW52aXJvbm1lbnQgb2YgdGhlIHBhcmVudCBwcm9jZXNzIGlzIGluaGVyaXRlZC4gQ3VycmVudGx5LCBvbmx5CiAgICogVVMtQVNDSUkgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBzdXBwb3J0ZWQgYW5kIGVycm9ycyBhcmUgbGlrZWx5IHRvIG9jY3VyCiAgICogaWYgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgd2l0aCBjb2RlLXBvaW50cyBvdXRzaWRlIHRoZSBVUy1BU0NJSSByYW5nZSBpcwogICAqIHBhc3NlZCBpbi4KICAgKgogICAqIElmIFtpbmNsdWRlUGFyZW50RW52aXJvbm1lbnRdIGlzIGB0cnVlYCwgdGhlIHByb2Nlc3MncyBlbnZpcm9ubWVudCB3aWxsCiAgICogaW5jbHVkZSB0aGUgcGFyZW50IHByb2Nlc3MncyBlbnZpcm9ubWVudCwgd2l0aCBbZW52aXJvbm1lbnRdIHRha2luZwogICAqIHByZWNlZGVuY2UuIERlZmF1bHQgaXMgYHRydWVgLgogICAqCiAgICogSWYgW3J1bkluU2hlbGxdIGlzIGB0cnVlYCwgdGhlIHByb2Nlc3Mgd2lsbCBiZSBzcGF3bmVkIHRocm91Z2ggYSBzeXN0ZW0KICAgKiBzaGVsbC4gT24gTGludXggYW5kIE9TIFgsIFs6L2Jpbi9zaDpdIGlzIHVzZWQsIHdoaWxlCiAgICogWzolV0lORElSJVxzeXN0ZW0zMlxjbWQuZXhlOl0gaXMgdXNlZCBvbiBXaW5kb3dzLgogICAqCiAgICogVXNlcnMgbXVzdCByZWFkIGFsbCBkYXRhIGNvbWluZyBvbiB0aGUgW3N0ZG91dF0gYW5kIFtzdGRlcnJdCiAgICogc3RyZWFtcyBvZiBwcm9jZXNzZXMgc3RhcnRlZCB3aXRoIFs6UHJvY2Vzcy5zdGFydDpdLiBJZiB0aGUgdXNlcgogICAqIGRvZXMgbm90IHJlYWQgYWxsIGRhdGEgb24gdGhlIHN0cmVhbXMgdGhlIHVuZGVybHlpbmcgc3lzdGVtCiAgICogcmVzb3VyY2VzIHdpbGwgbm90IGJlIHJlbGVhc2VkIHNpbmNlIHRoZXJlIGlzIHN0aWxsIHBlbmRpbmcgZGF0YS4KICAgKgogICAqIFRoZSBmb2xsb3dpbmcgY29kZSB1c2VzIGBQcm9jZXNzLnN0YXJ0YCB0byBncmVwIGZvciBgbWFpbmAgaW4gdGhlCiAgICogZmlsZSBgdGVzdC5kYXJ0YCBvbiBMaW51eC4KICAgKgogICAqICAgICBQcm9jZXNzLnN0YXJ0KCdncmVwJywgWyctaScsICdtYWluJywgJ3Rlc3QuZGFydCddKS50aGVuKChwcm9jZXNzKSB7CiAgICogICAgICAgc3Rkb3V0LmFkZFN0cmVhbShwcm9jZXNzLnN0ZG91dCk7CiAgICogICAgICAgc3RkZXJyLmFkZFN0cmVhbShwcm9jZXNzLnN0ZGVycik7CiAgICogICAgIH0pOwogICAqCiAgICogSWYgW21vZGVdIGlzIFtQcm9jZXNzU3RhcnRNb2RlLm5vcm1hbF0gKHRoZSBkZWZhdWx0KSBhIGNoaWxkCiAgICogcHJvY2VzcyB3aWxsIGJlIHN0YXJ0ZWQgd2l0aCBgc3RkaW5gLCBgc3Rkb3V0YCBhbmQgYHN0ZGVycmAKICAgKiBjb25uZWN0ZWQuCiAgICoKICAgKiBJZiBgbW9kZWAgaXMgW1Byb2Nlc3NTdGFydE1vZGUuZGV0YWNoZWRdIGEgZGV0YWNoZWQgcHJvY2VzcyB3aWxsCiAgICogYmUgY3JlYXRlZC4gQSBkZXRhY2hlZCBwcm9jZXNzIGhhcyBubyBjb25uZWN0aW9uIHRvIGl0cyBwYXJlbnQsCiAgICogYW5kIGNhbiBrZWVwIHJ1bm5pbmcgb24gaXRzIG93biB3aGVuIHRoZSBwYXJlbnQgZGllcy4gVGhlIG9ubHkKICAgKiBpbmZvcm1hdGlvbiBhdmFpbGFibGUgZnJvbSBhIGRldGFjaGVkIHByb2Nlc3MgaXMgaXRzIGBwaWRgLiBUaGVyZQogICAqIGlzIG5vIGNvbm5lY3Rpb24gdG8gaXRzIGBzdGRpbmAsIGBzdGRvdXRgIG9yIGBzdGRlcnJgLCBub3Igd2lsbAogICAqIHRoZSBwcm9jZXNzJyBleGl0IGNvZGUgYmVjb21lIGF2YWlsYWJsZSB3aGVuIGl0IHRlcm1pbmF0ZXMuCiAgICoKICAgKiBJZiBgbW9kZWAgaXMgW1Byb2Nlc3NTdGFydE1vZGUuZGV0YWNoZWRXaXRoU3RkaW9dIGEgZGV0YWNoZWQKICAgKiBwcm9jZXNzIHdpbGwgYmUgY3JlYXRlZCB3aGVyZSB0aGUgYHN0ZGluYCwgYHN0ZG91dGAgYW5kIGBzdGRlcnJgCiAgICogYXJlIGNvbm5lY3RlZC4gVGhlIGNyZWF0b3IgY2FuIGNvbW11bmljYXRlIHdpdGggdGhlIGNoaWxkIHRocm91Z2gKICAgKiB0aGVzZS4gVGhlIGRldGFjaGVkIHByb2Nlc3Mgd2lsbCBrZWVwIHJ1bm5pbmcgZXZlbiBpZiB0aGVzZQogICAqIGNvbW11bmljYXRpb24gY2hhbm5lbHMgYXJlIGNsb3NlZC4gVGhlIHByb2Nlc3MnIGV4aXQgY29kZSB3aWxsCiAgICogbm90IGJlY29tZSBhdmFpbGFibGUgd2hlbiBpdCB0ZXJtaW5hdGVkLgogICAqCiAgICogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGBtb2RlYCBpcyBgUHJvY2Vzc1N0YXJ0TW9kZS5ub3JtYWxgLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBGdXR1cmU8UHJvY2Vzcz4gc3RhcnQoCiAgICAgIFN0cmluZyBleGVjdXRhYmxlLCBMaXN0PFN0cmluZz4gYXJndW1lbnRzLAogICAgICB7U3RyaW5nIHdvcmtpbmdEaXJlY3RvcnksCiAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQsCiAgICAgIGJvb2wgaW5jbHVkZVBhcmVudEVudmlyb25tZW50OiB0cnVlLAogICAgICBib29sIHJ1bkluU2hlbGw6IGZhbHNlLAogICAgICBQcm9jZXNzU3RhcnRNb2RlIG1vZGU6IFByb2Nlc3NTdGFydE1vZGUubm9ybWFsfSk7CgogIC8qKgogICAqIFN0YXJ0cyBhIHByb2Nlc3MgYW5kIHJ1bnMgaXQgbm9uLWludGVyYWN0aXZlbHkgdG8gY29tcGxldGlvbi4gVGhlCiAgICogcHJvY2VzcyBydW4gaXMgW2V4ZWN1dGFibGVdIHdpdGggdGhlIHNwZWNpZmllZCBbYXJndW1lbnRzXS4KICAgKgogICAqIFVzZSBbd29ya2luZ0RpcmVjdG9yeV0gdG8gc2V0IHRoZSB3b3JraW5nIGRpcmVjdG9yeSBmb3IgdGhlIHByb2Nlc3MuIE5vdGUKICAgKiB0aGF0IHRoZSBjaGFuZ2Ugb2YgZGlyZWN0b3J5IG9jY3VycyBiZWZvcmUgZXhlY3V0aW5nIHRoZSBwcm9jZXNzIG9uIHNvbWUKICAgKiBwbGF0Zm9ybXMsIHdoaWNoIG1heSBoYXZlIGltcGFjdCB3aGVuIHVzaW5nIHJlbGF0aXZlIHBhdGhzIGZvciB0aGUKICAgKiBleGVjdXRhYmxlIGFuZCB0aGUgYXJndW1lbnRzLgogICAqCiAgICogVXNlIFtlbnZpcm9ubWVudF0gdG8gc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBwcm9jZXNzLiBJZiBub3QKICAgKiBzZXQgdGhlIGVudmlyb25tZW50IG9mIHRoZSBwYXJlbnQgcHJvY2VzcyBpcyBpbmhlcml0ZWQuIEN1cnJlbnRseSwgb25seQogICAqIFVTLUFTQ0lJIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgc3VwcG9ydGVkIGFuZCBlcnJvcnMgYXJlIGxpa2VseSB0byBvY2N1cgogICAqIGlmIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHdpdGggY29kZS1wb2ludHMgb3V0c2lkZSB0aGUgVVMtQVNDSUkgcmFuZ2UgaXMKICAgKiBwYXNzZWQgaW4uCiAgICoKICAgKiBJZiBbaW5jbHVkZVBhcmVudEVudmlyb25tZW50XSBpcyBgdHJ1ZWAsIHRoZSBwcm9jZXNzJ3MgZW52aXJvbm1lbnQgd2lsbAogICAqIGluY2x1ZGUgdGhlIHBhcmVudCBwcm9jZXNzJ3MgZW52aXJvbm1lbnQsIHdpdGggW2Vudmlyb25tZW50XSB0YWtpbmcKICAgKiBwcmVjZWRlbmNlLiBEZWZhdWx0IGlzIGB0cnVlYC4KICAgKgogICAqIElmIFtydW5JblNoZWxsXSBpcyB0cnVlLCB0aGUgcHJvY2VzcyB3aWxsIGJlIHNwYXduZWQgdGhyb3VnaCBhIHN5c3RlbQogICAqIHNoZWxsLiBPbiBMaW51eCBhbmQgT1MgWCwgYC9iaW4vc2hgIGlzIHVzZWQsIHdoaWxlCiAgICogYCVXSU5ESVIlXHN5c3RlbTMyXGNtZC5leGVgIGlzIHVzZWQgb24gV2luZG93cy4KICAgKgogICAqIFRoZSBlbmNvZGluZyB1c2VkIGZvciBkZWNvZGluZyBgc3Rkb3V0YCBhbmQgYHN0ZGVycmAgaW50byB0ZXh0IGlzCiAgICogY29udHJvbGxlZCB0aHJvdWdoIFtzdGRvdXRFbmNvZGluZ10gYW5kIFtzdGRlcnJFbmNvZGluZ10uIFRoZQogICAqIGRlZmF1bHQgZW5jb2RpbmcgaXMgW3N5c3RlbUVuY29kaW5nXS4gSWYgYG51bGxgIGlzIHVzZWQgbm8KICAgKiBkZWNvZGluZyB3aWxsIGhhcHBlbiBhbmQgdGhlIFtQcm9jZXNzUmVzdWx0XSB3aWxsIGhvbGQgYmluYXJ5CiAgICogZGF0YS4KICAgKgogICAqIFJldHVybnMgYSBgRnV0dXJlPFByb2Nlc3NSZXN1bHQ+YCB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoZQogICAqIHJlc3VsdCBvZiBydW5uaW5nIHRoZSBwcm9jZXNzLCBpLmUuLCBleGl0IGNvZGUsIHN0YW5kYXJkIG91dCBhbmQKICAgKiBzdGFuZGFyZCBpbi4KICAgKgogICAqIFRoZSBmb2xsb3dpbmcgY29kZSB1c2VzIGBQcm9jZXNzLnJ1bmAgdG8gZ3JlcCBmb3IgYG1haW5gIGluIHRoZQogICAqIGZpbGUgYHRlc3QuZGFydGAgb24gTGludXguCiAgICoKICAgKiAgICAgUHJvY2Vzcy5ydW4oJ2dyZXAnLCBbJy1pJywgJ21haW4nLCAndGVzdC5kYXJ0J10pLnRoZW4oKHJlc3VsdCkgewogICAqICAgICAgIHN0ZG91dC53cml0ZShyZXN1bHQuc3Rkb3V0KTsKICAgKiAgICAgICBzdGRlcnIud3JpdGUocmVzdWx0LnN0ZGVycik7CiAgICogICAgIH0pOwogICAqLwogIGV4dGVybmFsIHN0YXRpYyBGdXR1cmU8UHJvY2Vzc1Jlc3VsdD4gcnVuKAogICAgICBTdHJpbmcgZXhlY3V0YWJsZSwgTGlzdDxTdHJpbmc+IGFyZ3VtZW50cywKICAgICAge1N0cmluZyB3b3JraW5nRGlyZWN0b3J5LAogICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50LAogICAgICBib29sIGluY2x1ZGVQYXJlbnRFbnZpcm9ubWVudDogdHJ1ZSwKICAgICAgYm9vbCBydW5JblNoZWxsOiBmYWxzZSwKICAgICAgRW5jb2Rpbmcgc3Rkb3V0RW5jb2Rpbmc6IHN5c3RlbUVuY29kaW5nLAogICAgICBFbmNvZGluZyBzdGRlcnJFbmNvZGluZzogc3lzdGVtRW5jb2Rpbmd9KTsKCiAgLyoqCiAgICogU3RhcnRzIGEgcHJvY2VzcyBhbmQgcnVucyBpdCB0byBjb21wbGV0aW9uLiBUaGlzIGlzIGEgc3luY2hyb25vdXMKICAgKiBjYWxsIGFuZCB3aWxsIGJsb2NrIHVudGlsIHRoZSBjaGlsZCBwcm9jZXNzIHRlcm1pbmF0ZXMuCiAgICoKICAgKiBUaGUgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBmb3IgYFByb2Nlc3MucnVuYC4KICAgKgogICAqIFJldHVybnMgYSBgUHJvY2Vzc1Jlc3VsdGAgd2l0aCB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgdGhlIHByb2Nlc3MsCiAgICogaS5lLiwgZXhpdCBjb2RlLCBzdGFuZGFyZCBvdXQgYW5kIHN0YW5kYXJkIGluLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBQcm9jZXNzUmVzdWx0IHJ1blN5bmMoCiAgICAgIFN0cmluZyBleGVjdXRhYmxlLCBMaXN0PFN0cmluZz4gYXJndW1lbnRzLAogICAgICB7U3RyaW5nIHdvcmtpbmdEaXJlY3RvcnksCiAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQsCiAgICAgIGJvb2wgaW5jbHVkZVBhcmVudEVudmlyb25tZW50OiB0cnVlLAogICAgICBib29sIHJ1bkluU2hlbGw6IGZhbHNlLAogICAgICBFbmNvZGluZyBzdGRvdXRFbmNvZGluZzogc3lzdGVtRW5jb2RpbmcsCiAgICAgIEVuY29kaW5nIHN0ZGVyckVuY29kaW5nOiBzeXN0ZW1FbmNvZGluZ30pOwoKICAvKioKICAgKiBLaWxscyB0aGUgcHJvY2VzcyB3aXRoIGlkIFtwaWRdLgogICAqCiAgICogV2hlcmUgcG9zc2libGUsIHNlbmRzIHRoZSBbc2lnbmFsXSB0byB0aGUgcHJvY2VzcyB3aXRoIGlkCiAgICogYHBpZGAuIFRoaXMgaW5jbHVkZXMgTGludXggYW5kIE9TIFguIFRoZSBkZWZhdWx0IHNpZ25hbCBpcwogICAqIFtQcm9jZXNzU2lnbmFsLnNpZ3Rlcm1dIHdoaWNoIHdpbGwgbm9ybWFsbHkgdGVybWluYXRlIHRoZQogICAqIHByb2Nlc3MuCiAgICoKICAgKiBPbiBwbGF0Zm9ybXMgd2l0aG91dCBzaWduYWwgc3VwcG9ydCwgaW5jbHVkaW5nIFdpbmRvd3MsIHRoZSBjYWxsCiAgICoganVzdCB0ZXJtaW5hdGVzIHRoZSBwcm9jZXNzIHdpdGggaWQgYHBpZGAgaW4gYSBwbGF0Zm9ybSBzcGVjaWZpYwogICAqIHdheSwgYW5kIHRoZSBgc2lnbmFsYCBwYXJhbWV0ZXIgaXMgaWdub3JlZC4KICAgKgogICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzaWduYWwgaXMgc3VjY2Vzc2Z1bGx5IGRlbGl2ZXJlZCB0byB0aGUKICAgKiBwcm9jZXNzLiBPdGhlcndpc2UgdGhlIHNpZ25hbCBjb3VsZCBub3QgYmUgc2VudCwgdXN1YWxseSBtZWFuaW5nCiAgICogdGhhdCB0aGUgcHJvY2VzcyBpcyBhbHJlYWR5IGRlYWQuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIGJvb2wga2lsbFBpZChpbnQgcGlkLAogICAgICBbUHJvY2Vzc1NpZ25hbCBzaWduYWwgPSBQcm9jZXNzU2lnbmFsLnNpZ3Rlcm1dKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgc3RhbmRhcmQgb3V0cHV0IHN0cmVhbSBvZiB0aGUgcHJvY2VzcyBhcyBhIFs6U3RyZWFtOl0uCiAgICovCiAgU3RyZWFtPExpc3Q8aW50Pj4gZ2V0IHN0ZG91dDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtIG9mIHRoZSBwcm9jZXNzIGFzIGEgWzpTdHJlYW06XS4KICAgKi8KICBTdHJlYW08TGlzdDxpbnQ+PiBnZXQgc3RkZXJyOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzdGFuZGFyZCBpbnB1dCBzdHJlYW0gb2YgdGhlIHByb2Nlc3MgYXMgYW4gW0lPU2lua10uCiAgICovCiAgSU9TaW5rIGdldCBzdGRpbjsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcHJvY2VzcyBpZCBvZiB0aGUgcHJvY2Vzcy4KICAgKi8KICBpbnQgZ2V0IHBpZDsKCiAgLyoqCiAgICogS2lsbHMgdGhlIHByb2Nlc3MuCiAgICoKICAgKiBXaGVyZSBwb3NzaWJsZSwgc2VuZHMgdGhlIFtzaWduYWxdIHRvIHRoZSBwcm9jZXNzLiBUaGlzIGluY2x1ZGVzCiAgICogTGludXggYW5kIE9TIFguIFRoZSBkZWZhdWx0IHNpZ25hbCBpcyBbUHJvY2Vzc1NpZ25hbC5zaWd0ZXJtXQogICAqIHdoaWNoIHdpbGwgbm9ybWFsbHkgdGVybWluYXRlIHRoZSBwcm9jZXNzLgogICAqCiAgICogT24gcGxhdGZvcm1zIHdpdGhvdXQgc2lnbmFsIHN1cHBvcnQsIGluY2x1ZGluZyBXaW5kb3dzLCB0aGUgY2FsbAogICAqIGp1c3QgdGVybWluYXRlcyB0aGUgcHJvY2VzcyBpbiBhIHBsYXRmb3JtIHNwZWNpZmljIHdheSwgYW5kIHRoZQogICAqIGBzaWduYWxgIHBhcmFtZXRlciBpcyBpZ25vcmVkLgogICAqCiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHNpZ25hbCBpcyBzdWNjZXNzZnVsbHkgZGVsaXZlcmVkIHRvIHRoZQogICAqIHByb2Nlc3MuIE90aGVyd2lzZSB0aGUgc2lnbmFsIGNvdWxkIG5vdCBiZSBzZW50LCB1c3VhbGx5IG1lYW5pbmcKICAgKiB0aGF0IHRoZSBwcm9jZXNzIGlzIGFscmVhZHkgZGVhZC4KICAgKi8KICBib29sIGtpbGwoW1Byb2Nlc3NTaWduYWwgc2lnbmFsID0gUHJvY2Vzc1NpZ25hbC5zaWd0ZXJtXSk7Cn0KCi8qKgogKiBbUHJvY2Vzc1Jlc3VsdF0gcmVwcmVzZW50cyB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgYSBub24taW50ZXJhY3RpdmUKICogcHJvY2VzcyBzdGFydGVkIHdpdGggW1Byb2Nlc3MucnVuXSBvciBbUHJvY2Vzcy5ydW5TeW5jXS4KICovCmNsYXNzIFByb2Nlc3NSZXN1bHQgewogIC8qKgogICAqIEV4aXQgY29kZSBmb3IgdGhlIHByb2Nlc3MuCiAgICoKICAgKiBTZWUgW1Byb2Nlc3MuZXhpdENvZGVdIGZvciBtb3JlIGluZm9ybWF0aW9uIGluIHRoZSBleGl0IGNvZGUKICAgKiB2YWx1ZS4KICAgKi8KICBmaW5hbCBpbnQgZXhpdENvZGU7CgogIC8qKgogICAqIFN0YW5kYXJkIG91dHB1dCBmcm9tIHRoZSBwcm9jZXNzLiBUaGUgdmFsdWUgdXNlZCBmb3IgdGhlCiAgICogYHN0ZG91dEVuY29kaW5nYCBhcmd1bWVudCB0byBgUHJvY2Vzcy5ydW5gIGRldGVybWluZXMgdGhlIHR5cGUuIElmCiAgICogYG51bGxgIHdhcyB1c2VkIHRoaXMgdmFsdWUgaXMgb2YgdHlwZSBgTGlzdDxpbnQ+YCBvdGhlcndpc2UgaXQgaXMKICAgKiBvZiB0eXBlIGBTdHJpbmdgLgogICAqLwogIGZpbmFsIHN0ZG91dDsKCiAgLyoqCiAgICogU3RhbmRhcmQgZXJyb3IgZnJvbSB0aGUgcHJvY2Vzcy4gVGhlIHZhbHVlIHVzZWQgZm9yIHRoZQogICAqIGBzdGRlcnJFbmNvZGluZ2AgYXJndW1lbnQgdG8gYFByb2Nlc3MucnVuYCBkZXRlcm1pbmVzIHRoZSB0eXBlLiBJZgogICAqIGBudWxsYCB3YXMgdXNlZCB0aGlzIHZhbHVlIGlzIG9mIHR5cGUgYExpc3Q8aW50PmAKICAgKiBvdGhlcndpc2UgaXQgaXMgb2YgdHlwZSBgU3RyaW5nYC4KICAgKi8KICBmaW5hbCBzdGRlcnI7CgogIC8qKgogICAqIFByb2Nlc3MgaWQgb2YgdGhlIHByb2Nlc3MuCiAgICovCiAgZmluYWwgaW50IHBpZDsKCiAgUHJvY2Vzc1Jlc3VsdCh0aGlzLnBpZCwgdGhpcy5leGl0Q29kZSwgdGhpcy5zdGRvdXQsIHRoaXMuc3RkZXJyKTsKfQoKLyoqCiAqIE9uIFBvc2l4IHN5c3RlbXMsIFtQcm9jZXNzU2lnbmFsXSBpcyB1c2VkIHRvIHNlbmQgYSBzcGVjaWZpYyBzaWduYWwKICogdG8gYSBjaGlsZCBwcm9jZXNzLCBzZWUgWzpQcm9jZXNzLmtpbGw6XS4KICoKICogU29tZSBbUHJvY2Vzc1NpZ25hbF1zIGNhbiBhbHNvIGJlIHdhdGNoZWQsIGFzIGEgd2F5IHRvIGludGVyY2VwdCB0aGUgZGVmYXVsdAogKiBzaWduYWwgaGFuZGxlciBhbmQgaW1wbGVtZW50IGFub3RoZXIuIFNlZSBbUHJvY2Vzc1NpZ25hbC53YXRjaF0gZm9yIG1vcmUKICogaW5mb3JtYXRpb24uCiAqLwpjbGFzcyBQcm9jZXNzU2lnbmFsIHsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWdodXAgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMSwgIlNJR0hVUCIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ2ludCA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygyLCAiU0lHSU5UIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lncXVpdCA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygzLCAiU0lHUVVJVCIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ2lsbCA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXyg0LCAiU0lHSUxMIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lndHJhcCA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXyg1LCAiU0lHVFJBUCIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ2FicnQgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oNiwgIlNJR0FCUlQiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWdidXMgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oNywgIlNJR0JVUyIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ2ZwZSA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXyg4LCAiU0lHRlBFIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lna2lsbCA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXyg5LCAiU0lHS0lMTCIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ3VzcjEgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMTAsICJTSUdVU1IxIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lnc2VndiA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygxMSwgIlNJR1NFR1YiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWd1c3IyID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDEyLCAiU0lHVVNSMiIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ3BpcGUgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMTMsICJTSUdQSVBFIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lnYWxybSA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygxNCwgIlNJR0FMUk0iKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWd0ZXJtID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDE1LCAiU0lHVEVSTSIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ2NobGQgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMTcsICJTSUdDSExEIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lnY29udCA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygxOCwgIlNJR0NPTlQiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWdzdG9wID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDE5LCAiU0lHU1RPUCIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ3RzdHAgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMjAsICJTSUdUU1RQIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lndHRpbiA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygyMSwgIlNJR1RUSU4iKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWd0dG91ID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDIyLCAiU0lHVFRPVSIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ3VyZyA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygyMywgIlNJR1VSRyIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ3hjcHUgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMjQsICJTSUdYQ1BVIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lneGZzeiA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygyNSwgIlNJR1hGU1oiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWd2dGFscm0gPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMjYsICJTSUdWVEFMUk0iKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWdwcm9mID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDI3LCAiU0lHUFJPRiIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ3dpbmNoID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDI4LCAiU0lHV0lOQ0giKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWdwb2xsID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDI5LCAiU0lHUE9MTCIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ3N5cyA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygzMSwgIlNJR1NZUyIpOwoKICBARGVwcmVjYXRlZCgiVXNlIHNpZ2h1cCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdIVVAgPSBzaWdodXA7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWdpbnQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHSU5UID0gc2lnaW50OwogIEBEZXByZWNhdGVkKCJVc2Ugc2lncXVpdCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdRVUlUID0gc2lncXVpdDsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ2lsbCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdJTEwgPSBzaWdpbGw7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWd0cmFwIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR1RSQVAgPSBzaWd0cmFwOwogIEBEZXByZWNhdGVkKCJVc2Ugc2lnYWJydCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdBQlJUID0gc2lnYWJydDsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ2J1cyBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdCVVMgPSBzaWdidXM7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWdmcGUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHRlBFID0gc2lnZnBlOwogIEBEZXByZWNhdGVkKCJVc2Ugc2lna2lsbCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdLSUxMID0gc2lna2lsbDsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ3VzcjEgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHVVNSMSA9IHNpZ3VzcjE7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWdzZWd2IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR1NFR1YgPSBzaWdzZWd2OwogIEBEZXByZWNhdGVkKCJVc2Ugc2lndXNyMiBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdVU1IyID0gc2lndXNyMjsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ3BpcGUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHUElQRSA9IHNpZ3BpcGU7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWdhbHJtIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR0FMUk0gPSBzaWdhbHJtOwogIEBEZXByZWNhdGVkKCJVc2Ugc2lndGVybSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdURVJNID0gc2lndGVybTsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ2NobGQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHQ0hMRCA9IHNpZ2NobGQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWdjb250IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR0NPTlQgPSBzaWdjb250OwogIEBEZXByZWNhdGVkKCJVc2Ugc2lnc3RvcCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdTVE9QID0gc2lnc3RvcDsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ3RzdHAgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHVFNUUCA9IHNpZ3RzdHA7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWd0dGluIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR1RUSU4gPSBzaWd0dGluOwogIEBEZXByZWNhdGVkKCJVc2Ugc2lndHRvdSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdUVE9VID0gc2lndHRvdTsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ3VyZyBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdVUkcgPSBzaWd1cmc7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWd4Y3B1IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR1hDUFUgPSBzaWd4Y3B1OwogIEBEZXByZWNhdGVkKCJVc2Ugc2lneGZzeiBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdYRlNaID0gc2lneGZzejsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ3Z0YWxybSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdWVEFMUk0gPSBzaWd2dGFscm07CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWdwcm9mIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR1BST0YgPSBzaWdwcm9mOwogIEBEZXByZWNhdGVkKCJVc2Ugc2lnd2luY2ggaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHV0lOQ0ggPSBzaWd3aW5jaDsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ3BvbGwgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHUE9MTCA9IHNpZ3BvbGw7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWdzeXMgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHU1lTID0gc2lnc3lzOwoKICBmaW5hbCBpbnQgX3NpZ25hbE51bWJlcjsKICBmaW5hbCBTdHJpbmcgX25hbWU7CgogIGNvbnN0IFByb2Nlc3NTaWduYWwuXyh0aGlzLl9zaWduYWxOdW1iZXIsIHRoaXMuX25hbWUpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBfbmFtZTsKCiAgLyoqCiAgICogV2F0Y2ggZm9yIHByb2Nlc3Mgc2lnbmFscy4KICAgKgogICAqIFRoZSBmb2xsb3dpbmcgW1Byb2Nlc3NTaWduYWxdcyBjYW4gYmUgbGlzdGVuZWQgdG86CiAgICoKICAgKiAgICogW1Byb2Nlc3NTaWduYWwuc2lnaHVwXS4KICAgKiAgICogW1Byb2Nlc3NTaWduYWwuc2lnaW50XS4gU2lnbmFsIHNlbnQgYnkgZS5nLiBDVFJMLUMuCiAgICogICAqIFtQcm9jZXNzU2lnbmFsLnNpZ3Rlcm1dLiBOb3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MuCiAgICogICAqIFtQcm9jZXNzU2lnbmFsLnNpZ3VzcjFdLiBOb3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MuCiAgICogICAqIFtQcm9jZXNzU2lnbmFsLnNpZ3VzcjJdLiBOb3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MuCiAgICogICAqIFtQcm9jZXNzU2lnbmFsLnNpZ3dpbmNoXS4gTm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzLgogICAqCiAgICogT3RoZXIgc2lnbmFscyBhcmUgZGlzYWxsb3dlZCwgYXMgdGhleSBtYXkgYmUgdXNlZCBieSB0aGUgVk0uCiAgICoKICAgKiBBIHNpZ25hbCBjYW4gYmUgd2F0Y2hlZCBtdWx0aXBsZSB0aW1lcywgZnJvbSBtdWx0aXBsZSBpc29sYXRlcywgd2hlcmUgYWxsCiAgICogY2FsbGJhY2tzIGFyZSBpbnZva2VkIHdoZW4gc2lnbmFsZWQsIGluIG5vIHNwZWNpZmljIG9yZGVyLgogICAqLwogIFN0cmVhbTxQcm9jZXNzU2lnbmFsPiB3YXRjaCgpID0+IF9Qcm9jZXNzVXRpbHMuX3dhdGNoU2lnbmFsKHRoaXMpOwp9CgpjbGFzcyBTaWduYWxFeGNlcHRpb24gaW1wbGVtZW50cyBJT0V4Y2VwdGlvbiB7CiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CiAgZmluYWwgb3NFcnJvcjsKCiAgY29uc3QgU2lnbmFsRXhjZXB0aW9uKHRoaXMubWVzc2FnZSwgW3RoaXMub3NFcnJvcl0pOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICB2YXIgbXNnID0gIiI7CiAgICBpZiAob3NFcnJvciAhPSBudWxsKSB7CiAgICAgIG1zZyA9ICIsIG9zRXJyb3I6ICRvc0Vycm9yIjsKICAgIH0KICAgIHJldHVybiAiU2lnbmFsRXhjZXB0aW9uOiAkbWVzc2FnZSRtc2ciOwogIH0KfQoKY2xhc3MgUHJvY2Vzc0V4Y2VwdGlvbiBpbXBsZW1lbnRzIElPRXhjZXB0aW9uIHsKICAvKioKICAgKiBDb250YWlucyB0aGUgZXhlY3V0YWJsZSBwcm92aWRlZCBmb3IgdGhlIHByb2Nlc3MuCiAgICovCiAgZmluYWwgU3RyaW5nIGV4ZWN1dGFibGU7CgogIC8qKgogICAqIENvbnRhaW5zIHRoZSBhcmd1bWVudHMgcHJvdmlkZWQgZm9yIHRoZSBwcm9jZXNzLgogICAqLwogIGZpbmFsIExpc3Q8U3RyaW5nPiBhcmd1bWVudHM7CgogIC8qKgogICAqIENvbnRhaW5zIHRoZSBzeXN0ZW0gbWVzc2FnZSBmb3IgdGhlIHByb2Nlc3MgZXhjZXB0aW9uIGlmIGFueS4KICAgKi8KICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKCiAgLyoqCiAgICogQ29udGFpbnMgdGhlIE9TIGVycm9yIGNvZGUgZm9yIHRoZSBwcm9jZXNzIGV4Y2VwdGlvbiBpZiBhbnkuCiAgICovCiAgZmluYWwgaW50IGVycm9yQ29kZTsKCiAgY29uc3QgUHJvY2Vzc0V4Y2VwdGlvbih0aGlzLmV4ZWN1dGFibGUsIHRoaXMuYXJndW1lbnRzLAogICAgICBbdGhpcy5tZXNzYWdlID0gIiIsIHRoaXMuZXJyb3JDb2RlID0gMF0pOwogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHZhciBtc2cgPSAobWVzc2FnZSA9PSBudWxsKSA/ICdPUyBlcnJvciBjb2RlOiAkZXJyb3JDb2RlJyA6IG1lc3NhZ2U7CiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cy5qb2luKCcgJyk7CiAgICByZXR1cm4gIlByb2Nlc3NFeGNlcHRpb246ICRtc2dcbiAgQ29tbWFuZDogJGV4ZWN1dGFibGUgJGFyZ3MiOwogIH0KfQqCvgBOTjwBEQE5KxYqMSYrLUwCAQRCA0oxA0tHSERDFAM0A0VDREQ4A0RGDANGQzIDRkE/GgQWLCMgPQQdAgEELQNGRRoDGQNDDgQeLCQCAQQtA0ZFGgNDDgQyAQQzA0Y3BCAuGkMEJCA+BCYCAQQrBCkBBEcUBBQGPgVNTk8MBiYBBk0OBU1OTwwGIgIBBCQEGRw9JCABOEMqLQFBPyYkAUYoSC84AUgQFhIaCRdQARMwAgEEIwNESEcUAyoDRU1LSVAzAxkDEEpCIg0JAywDOz04Iz4DSyw9NAMZHgMQOxooMTM0Ng0JAxsDTDdJF0saAz8cAxEDQ0dAA0s6ODMDGQMQNjYuLA8NCQMWA15HKwQZBkwhBTYFRkdFPUVIEAVBRjxFRkVDEgVOTC0tBhwBBkJGPUVFIgVPTkgjBVBNUU8QBU1JJAVNOjcFQkZBRwVHIAVNLS0NBUJBEAVGRURHRUEFQkZHQUQuBUAGKTEgJyseOAEGR0EFT05IIwVQTVFPEAVNSSQFSzg1BUdDQEMLBT9GEgVFIAVKKCgNBi0xICcrHi8xAQZHPQU2BUc0BikxICcrHi8xAQYmBT9APw4FRkYxBUNGJwYoNwEGSAYgAQZHBiABBkYGFAEGLAYPAQYYBUZDMAVGRSQFQ0YnBj0CAQRGPAQWBiAFQgwGFgEGPkhHFwYQAQY9SDcnBhABBiAGEQFEAgEERy0DUEwQBBZKSkxKTExKSkxNTU1NTU1NTU1NTU1LTU1RTU9NSwEkLiQuJTAkLiUwJTAkLiQuJTAlMCUwJTAlMCUwJTAlMCUwJTAlMCUwJTAkLiUwJTAnNCUwJjIlMCQuARsWATkBHgEGIAU4BSE9PDw8PQVCBU9ABkUCAS8YEQE3ARYSGyMGLAQCATAGNwYbAQY2BiABBkMGGAEGQgYXATowFkkkQwQCARRkYXJ0OmlvL3Byb2Nlc3MuZGFydDhvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW8vc2VjdXJlX3NlcnZlcl9zb2NrZXQuZGFydKqJLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pbzsKCi8qKgogKiBUaGUgW1NlY3VyZVNlcnZlclNvY2tldF0gaXMgYSBzZXJ2ZXIgc29ja2V0LCBwcm92aWRpbmcgYSBzdHJlYW0gb2YgaGlnaC1sZXZlbAogKiBbU29ja2V0XXMuCiAqCiAqIFNlZSBbU2VjdXJlU29ja2V0XSBmb3IgbW9yZSBpbmZvLgogKi8KY2xhc3MgU2VjdXJlU2VydmVyU29ja2V0IGV4dGVuZHMgU3RyZWFtPFNlY3VyZVNvY2tldD4gewogIGZpbmFsIFJhd1NlY3VyZVNlcnZlclNvY2tldCBfc29ja2V0OwoKICBTZWN1cmVTZXJ2ZXJTb2NrZXQuXyh0aGlzLl9zb2NrZXQpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgZnV0dXJlIGZvciBhIFtTZWN1cmVTZXJ2ZXJTb2NrZXRdLiBXaGVuIHRoZSBmdXR1cmUKICAgKiBjb21wbGV0ZXMgdGhlIHNlcnZlciBzb2NrZXQgaXMgYm91bmQgdG8gdGhlIGdpdmVuIFthZGRyZXNzXSBhbmQKICAgKiBbcG9ydF0gYW5kIGhhcyBzdGFydGVkIGxpc3RlbmluZyBvbiBpdC4KICAgKgogICAqIFRoZSBbYWRkcmVzc10gY2FuIGVpdGhlciBiZSBhIFtTdHJpbmddIG9yIGFuCiAgICogW0ludGVybmV0QWRkcmVzc10uIElmIFthZGRyZXNzXSBpcyBhIFtTdHJpbmddLCBbYmluZF0gd2lsbAogICAqIHBlcmZvcm0gYSBbSW50ZXJuZXRBZGRyZXNzLmxvb2t1cF0gYW5kIHVzZSB0aGUgZmlyc3QgdmFsdWUgaW4gdGhlCiAgICogbGlzdC4gVG8gbGlzdGVuIG9uIHRoZSBsb29wYmFjayBhZGFwdGVyLCB3aGljaCB3aWxsIGFsbG93IG9ubHkKICAgKiBpbmNvbWluZyBjb25uZWN0aW9ucyBmcm9tIHRoZSBsb2NhbCBob3N0LCB1c2UgdGhlIHZhbHVlCiAgICogW0ludGVybmV0QWRkcmVzcy5sb29wYmFja0lQdjRdIG9yCiAgICogW0ludGVybmV0QWRkcmVzcy5sb29wYmFja0lQdjZdLiBUbyBhbGxvdyBmb3IgaW5jb21pbmcKICAgKiBjb25uZWN0aW9uIGZyb20gdGhlIG5ldHdvcmsgdXNlIGVpdGhlciBvbmUgb2YgdGhlIHZhbHVlcwogICAqIFtJbnRlcm5ldEFkZHJlc3MuYW55SVB2NF0gb3IgW0ludGVybmV0QWRkcmVzcy5hbnlJUHY2XSB0bwogICAqIGJpbmQgdG8gYWxsIGludGVyZmFjZXMgb3IgdGhlIElQIGFkZHJlc3Mgb2YgYSBzcGVjaWZpYyBpbnRlcmZhY2UuCiAgICoKICAgKiBJZiBbcG9ydF0gaGFzIHRoZSB2YWx1ZSBbOjA6XSBhbiBlcGhlbWVyYWwgcG9ydCB3aWxsIGJlIGNob3NlbiBieQogICAqIHRoZSBzeXN0ZW0uIFRoZSBhY3R1YWwgcG9ydCB1c2VkIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgdGhlCiAgICogW3BvcnRdIGdldHRlci4KICAgKgogICAqIFRoZSBvcHRpb25hbCBhcmd1bWVudCBbYmFja2xvZ10gY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbGlzdGVuCiAgICogYmFja2xvZyBmb3IgdGhlIHVuZGVybHlpbmcgT1MgbGlzdGVuIHNldHVwLiBJZiBbYmFja2xvZ10gaGFzIHRoZQogICAqIHZhbHVlIG9mIFs6MDpdICh0aGUgZGVmYXVsdCkgYSByZWFzb25hYmxlIHZhbHVlIHdpbGwgYmUgY2hvc2VuIGJ5CiAgICogdGhlIHN5c3RlbS4KICAgKgogICAqIEluY29taW5nIGNsaWVudCBjb25uZWN0aW9ucyBhcmUgcHJvbW90ZWQgdG8gc2VjdXJlIGNvbm5lY3Rpb25zLCB1c2luZwogICAqIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUgYW5kIGtleSBzZXQgaW4gW2NvbnRleHRdLgogICAqCiAgICogW2FkZHJlc3NdIG11c3QgYmUgZ2l2ZW4gYXMgYSBudW1lcmljIGFkZHJlc3MsIG5vdCBhIGhvc3QgbmFtZS4KICAgKgogICAqIFRvIHJlcXVlc3Qgb3IgcmVxdWlyZSB0aGF0IGNsaWVudHMgYXV0aGVudGljYXRlIGJ5IHByb3ZpZGluZyBhbiBTU0wgKFRMUykKICAgKiBjbGllbnQgY2VydGlmaWNhdGUsIHNldCB0aGUgb3B0aW9uYWwgcGFyYW1ldGVyIFtyZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGVdCiAgICogb3IgW3JlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZV0gdG8gdHJ1ZS4gIFJlcXVpcmluZyBhIGNlcnRpZmljYXRlIGltcGxpZXMKICAgKiByZXF1ZXN0aW5nIGEgY2VydGlmaWNhdGUsIHNvIHNldHRpbmcgYm90aCBpcyByZWR1bmRhbnQuCiAgICogVG8gY2hlY2sgd2hldGhlciBhIGNsaWVudCBjZXJ0aWZpY2F0ZSB3YXMgcmVjZWl2ZWQsIGNoZWNrCiAgICogU2VjdXJlU29ja2V0LnBlZXJDZXJ0aWZpY2F0ZSBhZnRlciBjb25uZWN0aW5nLiAgSWYgbm8gY2VydGlmaWNhdGUKICAgKiB3YXMgcmVjZWl2ZWQsIHRoZSByZXN1bHQgd2lsbCBiZSBudWxsLgogICAqCiAgICogW3N1cHBvcnRlZFByb3RvY29sc10gaXMgYW4gb3B0aW9uYWwgbGlzdCBvZiBwcm90b2NvbHMgKGluIGRlY3JlYXNpbmcKICAgKiBvcmRlciBvZiBwcmVmZXJlbmNlKSB0byB1c2UgZHVyaW5nIHRoZSBBTFBOIHByb3RvY29sIG5lZ29naWF0aW9uIHdpdGgKICAgKiBjbGllbnRzLiAgRXhhbXBsZSB2YWx1ZXMgYXJlICJodHRwLzEuMSIgb3IgImgyIi4gIFRoZSBzZWxlY3RlZCBwcm90b2NvbAogICAqIGNhbiBiZSBvYnRhaW5lZCB2aWEgW1NlY3VyZVNvY2tldC5zZWxlY3RlZFByb3RvY29sXS4KICAgKgogICAqIFRoZSBvcHRpb25hbCBhcmd1bWVudCBbc2hhcmVkXSBzcGVjaWZpZXMgd2hldGhlciBhZGRpdGlvbmFsCiAgICogU2VjdXJlU2VydmVyU29ja2V0IG9iamVjdHMgY2FuIGJpbmQgdG8gdGhlIHNhbWUgY29tYmluYXRpb24gb2YgYGFkZHJlc3NgLAogICAqIGBwb3J0YCBhbmQgYHY2T25seWAuICBJZiBgc2hhcmVkYCBpcyBgdHJ1ZWAgYW5kIG1vcmUgYFNlY3VyZVNlcnZlclNvY2tldGBzCiAgICogZnJvbSB0aGlzIGlzb2xhdGUgb3Igb3RoZXIgaXNvbGF0ZXMgYXJlIGJvdW5kIHRvIHRoZSBwb3J0LCB0aGVuIHRoZQogICAqIGluY29taW5nIGNvbm5lY3Rpb25zIHdpbGwgYmUgZGlzdHJpYnV0ZWQgYW1vbmcgYWxsIHRoZSBib3VuZAogICAqIGBTZWN1cmVTZXJ2ZXJTb2NrZXRgcy4gQ29ubmVjdGlvbnMgY2FuIGJlIGRpc3RyaWJ1dGVkIG92ZXIgbXVsdGlwbGUKICAgKiBpc29sYXRlcyB0aGlzIHdheS4KICAgKi8KICBzdGF0aWMgRnV0dXJlPFNlY3VyZVNlcnZlclNvY2tldD4gYmluZCgKICAgICAgYWRkcmVzcywgaW50IHBvcnQsIFNlY3VyaXR5Q29udGV4dCBjb250ZXh0LAogICAgICB7aW50IGJhY2tsb2c6IDAsCiAgICAgIGJvb2wgdjZPbmx5OiBmYWxzZSwKICAgICAgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGU6IGZhbHNlLAogICAgICBib29sIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZTogZmFsc2UsCiAgICAgIExpc3Q8U3RyaW5nPiBzdXBwb3J0ZWRQcm90b2NvbHMsCiAgICAgIGJvb2wgc2hhcmVkOiBmYWxzZX0pIHsKICAgIHJldHVybiBSYXdTZWN1cmVTZXJ2ZXJTb2NrZXQKICAgICAgICAuYmluZChhZGRyZXNzLCBwb3J0LCBjb250ZXh0LAogICAgICAgICAgICBiYWNrbG9nOiBiYWNrbG9nLAogICAgICAgICAgICB2Nk9ubHk6IHY2T25seSwKICAgICAgICAgICAgcmVxdWVzdENsaWVudENlcnRpZmljYXRlOiByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsCiAgICAgICAgICAgIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZTogcmVxdWlyZUNsaWVudENlcnRpZmljYXRlLAogICAgICAgICAgICBzdXBwb3J0ZWRQcm90b2NvbHM6IHN1cHBvcnRlZFByb3RvY29scywKICAgICAgICAgICAgc2hhcmVkOiBzaGFyZWQpCiAgICAgICAgLnRoZW4oKHNlcnZlclNvY2tldCkgPT4gbmV3IFNlY3VyZVNlcnZlclNvY2tldC5fKHNlcnZlclNvY2tldCkpOwogIH0KCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFNlY3VyZVNvY2tldD4gbGlzdGVuKHZvaWQgb25EYXRhKFNlY3VyZVNvY2tldCBzb2NrZXQpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgcmV0dXJuIF9zb2NrZXQubWFwKChyYXdTb2NrZXQpID0+IG5ldyBTZWN1cmVTb2NrZXQuXyhyYXdTb2NrZXQpKS5saXN0ZW4oCiAgICAgICAgb25EYXRhLAogICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsCiAgICAgICAgb25Eb25lOiBvbkRvbmUsCiAgICAgICAgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBwb3J0IHVzZWQgYnkgdGhpcyBzb2NrZXQuCiAgICovCiAgaW50IGdldCBwb3J0ID0+IF9zb2NrZXQucG9ydDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgYWRkcmVzcyB1c2VkIGJ5IHRoaXMgc29ja2V0LgogICAqLwogIEludGVybmV0QWRkcmVzcyBnZXQgYWRkcmVzcyA9PiBfc29ja2V0LmFkZHJlc3M7CgogIC8qKgogICAqIENsb3NlcyB0aGUgc29ja2V0LiBUaGUgcmV0dXJuZWQgZnV0dXJlIGNvbXBsZXRlcyB3aGVuIHRoZSBzb2NrZXQKICAgKiBpcyBmdWxseSBjbG9zZWQgYW5kIGlzIG5vIGxvbmdlciBib3VuZC4KICAgKi8KICBGdXR1cmU8U2VjdXJlU2VydmVyU29ja2V0PiBjbG9zZSgpID0+IF9zb2NrZXQuY2xvc2UoKS50aGVuKChfKSA9PiB0aGlzKTsKCiAgdm9pZCBzZXQgX293bmVyKG93bmVyKSB7CiAgICBfc29ja2V0Ll9vd25lciA9IG93bmVyOwogIH0KfQoKLyoqCiAqIFRoZSBSYXdTZWN1cmVTZXJ2ZXJTb2NrZXQgaXMgYSBzZXJ2ZXIgc29ja2V0LCBwcm92aWRpbmcgYSBzdHJlYW0gb2YgbG93LWxldmVsCiAqIFtSYXdTZWN1cmVTb2NrZXRdcy4KICoKICogU2VlIFtSYXdTZWN1cmVTb2NrZXRdIGZvciBtb3JlIGluZm8uCiAqLwpjbGFzcyBSYXdTZWN1cmVTZXJ2ZXJTb2NrZXQgZXh0ZW5kcyBTdHJlYW08UmF3U2VjdXJlU29ja2V0PiB7CiAgZmluYWwgUmF3U2VydmVyU29ja2V0IF9zb2NrZXQ7CiAgU3RyZWFtQ29udHJvbGxlcjxSYXdTZWN1cmVTb2NrZXQ+IF9jb250cm9sbGVyOwogIFN0cmVhbVN1YnNjcmlwdGlvbjxSYXdTb2NrZXQ+IF9zdWJzY3JpcHRpb247CiAgZmluYWwgU2VjdXJpdHlDb250ZXh0IF9jb250ZXh0OwogIGZpbmFsIGJvb2wgcmVxdWVzdENsaWVudENlcnRpZmljYXRlOwogIGZpbmFsIGJvb2wgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlOwogIGZpbmFsIExpc3Q8U3RyaW5nPiBzdXBwb3J0ZWRQcm90b2NvbHM7CiAgYm9vbCBfY2xvc2VkID0gZmFsc2U7CgogIFJhd1NlY3VyZVNlcnZlclNvY2tldC5fKAogICAgICB0aGlzLl9zb2NrZXQsCiAgICAgIHRoaXMuX2NvbnRleHQsCiAgICAgIHRoaXMucmVxdWVzdENsaWVudENlcnRpZmljYXRlLAogICAgICB0aGlzLnJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgdGhpcy5zdXBwb3J0ZWRQcm90b2NvbHMpIHsKICAgIF9jb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXI8UmF3U2VjdXJlU29ja2V0PigKICAgICAgICBzeW5jOiB0cnVlLAogICAgICAgIG9uTGlzdGVuOiBfb25TdWJzY3JpcHRpb25TdGF0ZUNoYW5nZSwKICAgICAgICBvblBhdXNlOiBfb25QYXVzZVN0YXRlQ2hhbmdlLAogICAgICAgIG9uUmVzdW1lOiBfb25QYXVzZVN0YXRlQ2hhbmdlLAogICAgICAgIG9uQ2FuY2VsOiBfb25TdWJzY3JpcHRpb25TdGF0ZUNoYW5nZSk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgZnV0dXJlIGZvciBhIFtSYXdTZWN1cmVTZXJ2ZXJTb2NrZXRdLiBXaGVuIHRoZSBmdXR1cmUKICAgKiBjb21wbGV0ZXMgdGhlIHNlcnZlciBzb2NrZXQgaXMgYm91bmQgdG8gdGhlIGdpdmVuIFthZGRyZXNzXSBhbmQKICAgKiBbcG9ydF0gYW5kIGhhcyBzdGFydGVkIGxpc3RlbmluZyBvbiBpdC4KICAgKgogICAqIFRoZSBbYWRkcmVzc10gY2FuIGVpdGhlciBiZSBhIFtTdHJpbmddIG9yIGFuCiAgICogW0ludGVybmV0QWRkcmVzc10uIElmIFthZGRyZXNzXSBpcyBhIFtTdHJpbmddLCBbYmluZF0gd2lsbAogICAqIHBlcmZvcm0gYSBbSW50ZXJuZXRBZGRyZXNzLmxvb2t1cF0gYW5kIHVzZSB0aGUgZmlyc3QgdmFsdWUgaW4gdGhlCiAgICogbGlzdC4gVG8gbGlzdGVuIG9uIHRoZSBsb29wYmFjayBhZGFwdGVyLCB3aGljaCB3aWxsIGFsbG93IG9ubHkKICAgKiBpbmNvbWluZyBjb25uZWN0aW9ucyBmcm9tIHRoZSBsb2NhbCBob3N0LCB1c2UgdGhlIHZhbHVlCiAgICogW0ludGVybmV0QWRkcmVzcy5sb29wYmFja0lQdjRdIG9yCiAgICogW0ludGVybmV0QWRkcmVzcy5sb29wYmFja0lQdjZdLiBUbyBhbGxvdyBmb3IgaW5jb21pbmcKICAgKiBjb25uZWN0aW9uIGZyb20gdGhlIG5ldHdvcmsgdXNlIGVpdGhlciBvbmUgb2YgdGhlIHZhbHVlcwogICAqIFtJbnRlcm5ldEFkZHJlc3MuYW55SVB2NF0gb3IgW0ludGVybmV0QWRkcmVzcy5hbnlJUHY2XSB0bwogICAqIGJpbmQgdG8gYWxsIGludGVyZmFjZXMgb3IgdGhlIElQIGFkZHJlc3Mgb2YgYSBzcGVjaWZpYyBpbnRlcmZhY2UuCiAgICoKICAgKiBJZiBbcG9ydF0gaGFzIHRoZSB2YWx1ZSBbOjA6XSBhbiBlcGhlbWVyYWwgcG9ydCB3aWxsIGJlIGNob3NlbiBieQogICAqIHRoZSBzeXN0ZW0uIFRoZSBhY3R1YWwgcG9ydCB1c2VkIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgdGhlCiAgICogW3BvcnRdIGdldHRlci4KICAgKgogICAqIFRoZSBvcHRpb25hbCBhcmd1bWVudCBbYmFja2xvZ10gY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbGlzdGVuCiAgICogYmFja2xvZyBmb3IgdGhlIHVuZGVybHlpbmcgT1MgbGlzdGVuIHNldHVwLiBJZiBbYmFja2xvZ10gaGFzIHRoZQogICAqIHZhbHVlIG9mIFs6MDpdICh0aGUgZGVmYXVsdCkgYSByZWFzb25hYmxlIHZhbHVlIHdpbGwgYmUgY2hvc2VuIGJ5CiAgICogdGhlIHN5c3RlbS4KICAgKgogICAqIEluY29taW5nIGNsaWVudCBjb25uZWN0aW9ucyBhcmUgcHJvbW90ZWQgdG8gc2VjdXJlIGNvbm5lY3Rpb25zLAogICAqIHVzaW5nIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUgYW5kIGtleSBzZXQgaW4gW2NvbnRleHRdLgogICAqCiAgICogW2FkZHJlc3NdIG11c3QgYmUgZ2l2ZW4gYXMgYSBudW1lcmljIGFkZHJlc3MsIG5vdCBhIGhvc3QgbmFtZS4KICAgKgogICAqIFRvIHJlcXVlc3Qgb3IgcmVxdWlyZSB0aGF0IGNsaWVudHMgYXV0aGVudGljYXRlIGJ5IHByb3ZpZGluZyBhbiBTU0wgKFRMUykKICAgKiBjbGllbnQgY2VydGlmaWNhdGUsIHNldCB0aGUgb3B0aW9uYWwgcGFyYW1ldGVycyByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUgb3IKICAgKiByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUgdG8gdHJ1ZS4gIFJlcXVpcmUgaW1wbGllcyByZXF1ZXN0LCBzbyBvbmUgZG9lc24ndAogICAqIG5lZWQgdG8gc3BlY2lmeSBib3RoLiAgVG8gY2hlY2sgd2hldGhlciBhIGNsaWVudCBjZXJ0aWZpY2F0ZSB3YXMgcmVjZWl2ZWQsCiAgICogY2hlY2sgU2VjdXJlU29ja2V0LnBlZXJDZXJ0aWZpY2F0ZSBhZnRlciBjb25uZWN0aW5nLiAgSWYgbm8gY2VydGlmaWNhdGUKICAgKiB3YXMgcmVjZWl2ZWQsIHRoZSByZXN1bHQgd2lsbCBiZSBudWxsLgogICAqCiAgICogW3N1cHBvcnRlZFByb3RvY29sc10gaXMgYW4gb3B0aW9uYWwgbGlzdCBvZiBwcm90b2NvbHMgKGluIGRlY3JlYXNpbmcKICAgKiBvcmRlciBvZiBwcmVmZXJlbmNlKSB0byB1c2UgZHVyaW5nIHRoZSBBTFBOIHByb3RvY29sIG5lZ290aWF0aW9uIHdpdGgKICAgKiBjbGllbnRzLiAgRXhhbXBsZSB2YWx1ZXMgYXJlICJodHRwLzEuMSIgb3IgImgyIi4gIFRoZSBzZWxlY3RlZCBwcm90b2NvbAogICAqIGNhbiBiZSBvYnRhaW5lZCB2aWEgW1Jhd1NlY3VyZVNvY2tldC5zZWxlY3RlZFByb3RvY29sXS4KICAgKgogICAqIFRoZSBvcHRpb25hbCBhcmd1bWVudCBbc2hhcmVkXSBzcGVjaWZpZXMgd2hldGhlciBhZGRpdGlvbmFsCiAgICogUmF3U2VjdXJlU2VydmVyU29ja2V0IG9iamVjdHMgY2FuIGJpbmQgdG8gdGhlIHNhbWUgY29tYmluYXRpb24gb2YKICAgKiBgYWRkcmVzc2AsIGBwb3J0YCBhbmQgYHY2T25seWAuICBJZiBgc2hhcmVkYCBpcyBgdHJ1ZWAgYW5kIG1vcmUKICAgKiBgUmF3U2VjdXJlU2VydmVyU29ja2V0YHMgZnJvbSB0aGlzIGlzb2xhdGUgb3Igb3RoZXIgaXNvbGF0ZXMgYXJlIGJvdW5kIHRvCiAgICogdGhlIHBvcnQsIHRoZW4gdGhlIGluY29taW5nIGNvbm5lY3Rpb25zIHdpbGwgYmUgZGlzdHJpYnV0ZWQgYW1vbmcgYWxsIHRoZQogICAqIGJvdW5kIGBSYXdTZWN1cmVTZXJ2ZXJTb2NrZXRgcy4gQ29ubmVjdGlvbnMgY2FuIGJlIGRpc3RyaWJ1dGVkIG92ZXIKICAgKiBtdWx0aXBsZSBpc29sYXRlcyB0aGlzIHdheS4KICAgKi8KICBzdGF0aWMgRnV0dXJlPFJhd1NlY3VyZVNlcnZlclNvY2tldD4gYmluZCgKICAgICAgYWRkcmVzcywgaW50IHBvcnQsIFNlY3VyaXR5Q29udGV4dCBjb250ZXh0LAogICAgICB7aW50IGJhY2tsb2c6IDAsCiAgICAgIGJvb2wgdjZPbmx5OiBmYWxzZSwKICAgICAgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGU6IGZhbHNlLAogICAgICBib29sIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZTogZmFsc2UsCiAgICAgIExpc3Q8U3RyaW5nPiBzdXBwb3J0ZWRQcm90b2NvbHMsCiAgICAgIGJvb2wgc2hhcmVkOiBmYWxzZX0pIHsKICAgIHJldHVybiBSYXdTZXJ2ZXJTb2NrZXQKICAgICAgICAuYmluZChhZGRyZXNzLCBwb3J0LCBiYWNrbG9nOiBiYWNrbG9nLCB2Nk9ubHk6IHY2T25seSwgc2hhcmVkOiBzaGFyZWQpCiAgICAgICAgLnRoZW4oKHNlcnZlclNvY2tldCkgPT4gbmV3IFJhd1NlY3VyZVNlcnZlclNvY2tldC5fKAogICAgICAgICAgICBzZXJ2ZXJTb2NrZXQsCiAgICAgICAgICAgIGNvbnRleHQsCiAgICAgICAgICAgIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgICAgICAgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlLAogICAgICAgICAgICBzdXBwb3J0ZWRQcm90b2NvbHMpKTsKICB9CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxSYXdTZWN1cmVTb2NrZXQ+IGxpc3Rlbih2b2lkIG9uRGF0YShSYXdTZWN1cmVTb2NrZXQgcyksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICByZXR1cm4gX2NvbnRyb2xsZXIuc3RyZWFtLmxpc3RlbihvbkRhdGEsCiAgICAgICAgb25FcnJvcjogb25FcnJvciwgb25Eb25lOiBvbkRvbmUsIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcG9ydCB1c2VkIGJ5IHRoaXMgc29ja2V0LgogICAqLwogIGludCBnZXQgcG9ydCA9PiBfc29ja2V0LnBvcnQ7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGFkZHJlc3MgdXNlZCBieSB0aGlzIHNvY2tldC4KICAgKi8KICBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFkZHJlc3MgPT4gX3NvY2tldC5hZGRyZXNzOwoKICAvKioKICAgKiBDbG9zZXMgdGhlIHNvY2tldC4gVGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMgd2hlbiB0aGUgc29ja2V0CiAgICogaXMgZnVsbHkgY2xvc2VkIGFuZCBpcyBubyBsb25nZXIgYm91bmQuCiAgICovCiAgRnV0dXJlPFJhd1NlY3VyZVNlcnZlclNvY2tldD4gY2xvc2UoKSB7CiAgICBfY2xvc2VkID0gdHJ1ZTsKICAgIHJldHVybiBfc29ja2V0LmNsb3NlKCkudGhlbigoXykgPT4gdGhpcyk7CiAgfQoKICB2b2lkIF9vbkRhdGEoUmF3U29ja2V0IGNvbm5lY3Rpb24pIHsKICAgIHZhciByZW1vdGVQb3J0OwogICAgdHJ5IHsKICAgICAgcmVtb3RlUG9ydCA9IGNvbm5lY3Rpb24ucmVtb3RlUG9ydDsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgLy8gSWYgY29ubmVjdGlvbiBpcyBhbHJlYWR5IGNsb3NlZCwgcmVtb3RlUG9ydCB0aHJvd3MgYW4gZXhjZXB0aW9uLgogICAgICAvLyBEbyBub3RoaW5nIC0gY29ubmVjdGlvbiBpcyBjbG9zZWQuCiAgICAgIHJldHVybjsKICAgIH0KICAgIF9SYXdTZWN1cmVTb2NrZXQKICAgICAgICAuY29ubmVjdChjb25uZWN0aW9uLmFkZHJlc3MsIHJlbW90ZVBvcnQsCiAgICAgICAgICAgIGNvbnRleHQ6IF9jb250ZXh0LAogICAgICAgICAgICBpc19zZXJ2ZXI6IHRydWUsCiAgICAgICAgICAgIHNvY2tldDogY29ubmVjdGlvbiwKICAgICAgICAgICAgcmVxdWVzdENsaWVudENlcnRpZmljYXRlOiByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsCiAgICAgICAgICAgIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZTogcmVxdWlyZUNsaWVudENlcnRpZmljYXRlLAogICAgICAgICAgICBzdXBwb3J0ZWRQcm90b2NvbHM6IHN1cHBvcnRlZFByb3RvY29scykKICAgICAgICAudGhlbigoUmF3U2VjdXJlU29ja2V0IHNlY3VyZUNvbm5lY3Rpb24pIHsKICAgICAgaWYgKF9jbG9zZWQpIHsKICAgICAgICBzZWN1cmVDb25uZWN0aW9uLmNsb3NlKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2NvbnRyb2xsZXIuYWRkKHNlY3VyZUNvbm5lY3Rpb24pOwogICAgICB9CiAgICB9KS5jYXRjaEVycm9yKChlLCBzKSB7CiAgICAgIGlmICghX2Nsb3NlZCkgewogICAgICAgIF9jb250cm9sbGVyLmFkZEVycm9yKGUsIHMpOwogICAgICB9CiAgICB9KTsKICB9CgogIHZvaWQgX29uUGF1c2VTdGF0ZUNoYW5nZSgpIHsKICAgIGlmIChfY29udHJvbGxlci5pc1BhdXNlZCkgewogICAgICBfc3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgICB9IGVsc2UgewogICAgICBfc3Vic2NyaXB0aW9uLnJlc3VtZSgpOwogICAgfQogIH0KCiAgdm9pZCBfb25TdWJzY3JpcHRpb25TdGF0ZUNoYW5nZSgpIHsKICAgIGlmIChfY29udHJvbGxlci5oYXNMaXN0ZW5lcikgewogICAgICBfc3Vic2NyaXB0aW9uID0gX3NvY2tldC5saXN0ZW4oX29uRGF0YSwKICAgICAgICAgIG9uRXJyb3I6IF9jb250cm9sbGVyLmFkZEVycm9yLCBvbkRvbmU6IF9jb250cm9sbGVyLmNsb3NlKTsKICAgIH0gZWxzZSB7CiAgICAgIGNsb3NlKCk7CiAgICB9CiAgfQoKICB2b2lkIHNldCBfb3duZXIob3duZXIpIHsKICAgIChfc29ja2V0IGFzIGR5bmFtaWMpLl9vd25lciA9IG93bmVyOwogIH0KfQqBJQBOTjwBEQEEUQ4DJQQ4JwEmAQZCRS0FMkBHRD0nOz4/RwVHQRQFR0ZHEQVLNgVEBU9PTT0/RywFSktNOgVBT1BJQkkYBioyFxosLCcdISYeHEBANBxJBAFMP00QGhgnBAEGKwYgAQYuBjIBBkYtBksBGxwEAgEEURcDKAQ+ITEvIicnKRgBGxQVJSUhORQuJicvBAEGRUUtBTJAR0Q9Jzs+P0cFR0EUBUdGRxEFRTwFRAVPUVBQTSwFSktNPQVBR0VPT0khBi0yFxosLCcdG089GhUmJiIEAU0/LUkEAQYrBiABBi4GMgEGRi0GKhQuBAEnFAoqEkosDgYVMR8dIEBANDMVIg8rCBsWJAgIBAEfIB0NHgYEASYjLkUNDwYEARspBAIBIWRhcnQ6aW8vc2VjdXJlX3NlcnZlcl9zb2NrZXQuZGFydDFvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW8vc2VjdXJlX3NvY2tldC5kYXJ0wACu6i8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuaW87CgovKioKICogQSBoaWdoLWxldmVsIGNsYXNzIGZvciBjb21tdW5pY2F0aW5nIHNlY3VyZWx5IG92ZXIgYSBUQ1Agc29ja2V0LCB1c2luZwogKiBUTFMgYW5kIFNTTC4gVGhlIFtTZWN1cmVTb2NrZXRdIGV4cG9zZXMgYm90aCBhIFtTdHJlYW1dIGFuZCBhbgogKiBbSU9TaW5rXSBpbnRlcmZhY2UsIG1ha2luZyBpdCBpZGVhbCBmb3IgdXNpbmcgdG9nZXRoZXIgd2l0aAogKiBvdGhlciBbU3RyZWFtXXMuCiAqLwphYnN0cmFjdCBjbGFzcyBTZWN1cmVTb2NrZXQgaW1wbGVtZW50cyBTb2NrZXQgewogIGV4dGVybmFsIGZhY3RvcnkgU2VjdXJlU29ja2V0Ll8oUmF3U2VjdXJlU29ja2V0IHJhd1NvY2tldCk7CgogIC8qKgogICAqIENvbnN0cnVjdHMgYSBuZXcgc2VjdXJlIGNsaWVudCBzb2NrZXQgYW5kIGNvbm5lY3RzIGl0IHRvIHRoZSBnaXZlbgogICAqIFtob3N0XSBvbiBwb3J0IFtwb3J0XS4gVGhlIHJldHVybmVkIEZ1dHVyZSB3aWxsIGNvbXBsZXRlIHdpdGggYQogICAqIFtTZWN1cmVTb2NrZXRdIHRoYXQgaXMgY29ubmVjdGVkIGFuZCByZWFkeSBmb3Igc3Vic2NyaXB0aW9uLgogICAqCiAgICogVGhlIGNlcnRpZmljYXRlIHByb3ZpZGVkIGJ5IHRoZSBzZXJ2ZXIgaXMgY2hlY2tlZAogICAqIHVzaW5nIHRoZSB0cnVzdGVkIGNlcnRpZmljYXRlcyBzZXQgaW4gdGhlIFNlY3VyaXR5Q29udGV4dCBvYmplY3QuCiAgICogVGhlIGRlZmF1bHQgU2VjdXJpdHlDb250ZXh0IG9iamVjdCBjb250YWlucyBhIGJ1aWx0LWluIHNldCBvZiB0cnVzdGVkCiAgICogcm9vdCBjZXJ0aWZpY2F0ZXMgZm9yIHdlbGwta25vd24gY2VydGlmaWNhdGUgYXV0aG9yaXRpZXMuCiAgICoKICAgKiBbb25CYWRDZXJ0aWZpY2F0ZV0gaXMgYW4gb3B0aW9uYWwgaGFuZGxlciBmb3IgdW52ZXJpZmlhYmxlIGNlcnRpZmljYXRlcy4KICAgKiBUaGUgaGFuZGxlciByZWNlaXZlcyB0aGUgW1g1MDlDZXJ0aWZpY2F0ZV0sIGFuZCBjYW4gaW5zcGVjdCBpdCBhbmQKICAgKiBkZWNpZGUgKG9yIGxldCB0aGUgdXNlciBkZWNpZGUpIHdoZXRoZXIgdG8gYWNjZXB0CiAgICogdGhlIGNvbm5lY3Rpb24gb3Igbm90LiAgVGhlIGhhbmRsZXIgc2hvdWxkIHJldHVybiB0cnVlCiAgICogdG8gY29udGludWUgdGhlIFtTZWN1cmVTb2NrZXRdIGNvbm5lY3Rpb24uCiAgICoKICAgKiBbc3VwcG9ydGVkUHJvdG9jb2xzXSBpcyBhbiBvcHRpb25hbCBsaXN0IG9mIHByb3RvY29scyAoaW4gZGVjcmVhc2luZwogICAqIG9yZGVyIG9mIHByZWZlcmVuY2UpIHRvIHVzZSBkdXJpbmcgdGhlIEFMUE4gcHJvdG9jb2wgbmVnb3RpYXRpb24gd2l0aCB0aGUKICAgKiBzZXJ2ZXIuICBFeGFtcGxlIHZhbHVlcyBhcmUgImh0dHAvMS4xIiBvciAiaDIiLiAgVGhlIHNlbGVjdGVkIHByb3RvY29sCiAgICogY2FuIGJlIG9idGFpbmVkIHZpYSBbU2VjdXJlU29ja2V0LnNlbGVjdGVkUHJvdG9jb2xdLgogICAqCiAgICogVGhlIGFyZ3VtZW50IFt0aW1lb3V0XSBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIG1heGltdW0gYWxsb3dlZCB0aW1lIHRvIHdhaXQKICAgKiBmb3IgYSBjb25uZWN0aW9uIHRvIGJlIGVzdGFibGlzaGVkLiBJZiBbdGltZW91dF0gaXMgbG9uZ2VyIHRoYW4gdGhlIHN5c3RlbQogICAqIGxldmVsIHRpbWVvdXQgZHVyYXRpb24sIGEgdGltZW91dCBtYXkgb2NjdXIgc29vbmVyIHRoYW4gc3BlY2lmaWVkIGluCiAgICogW3RpbWVvdXRdLiBPbiB0aW1lb3V0LCBhIFtTb2NrZXRFeGNlcHRpb25dIGlzIHRocm93biBhbmQgYWxsIG9uZ29pbmcKICAgKiBjb25uZWN0aW9uIGF0dGVtcHRzIHRvIFtob3N0XSBhcmUgY2FuY2VsbGVkLgoKICAgKi8KICBzdGF0aWMgRnV0dXJlPFNlY3VyZVNvY2tldD4gY29ubmVjdChob3N0LCBpbnQgcG9ydCwKICAgICAge1NlY3VyaXR5Q29udGV4dCBjb250ZXh0LAogICAgICBib29sIG9uQmFkQ2VydGlmaWNhdGUoWDUwOUNlcnRpZmljYXRlIGNlcnRpZmljYXRlKSwKICAgICAgTGlzdDxTdHJpbmc+IHN1cHBvcnRlZFByb3RvY29scywKICAgICAgRHVyYXRpb24gdGltZW91dH0pIHsKICAgIHJldHVybiBSYXdTZWN1cmVTb2NrZXQuY29ubmVjdChob3N0LCBwb3J0LAogICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0LAogICAgICAgICAgICBvbkJhZENlcnRpZmljYXRlOiBvbkJhZENlcnRpZmljYXRlLAogICAgICAgICAgICBzdXBwb3J0ZWRQcm90b2NvbHM6IHN1cHBvcnRlZFByb3RvY29scywKICAgICAgICAgICAgdGltZW91dDogdGltZW91dCkKICAgICAgICAudGhlbigocmF3U29ja2V0KSA9PiBuZXcgU2VjdXJlU29ja2V0Ll8ocmF3U29ja2V0KSk7CiAgfQoKICAvLy8gTGlrZSBbY29ubmVjdF0sIGJ1dCByZXR1cm5zIGEgW0Z1dHVyZV0gdGhhdCBjb21wbGV0ZXMgd2l0aCBhCiAgLy8vIFtDb25uZWN0aW9uVGFza10gdGhhdCBjYW4gYmUgY2FuY2VsbGVkIGlmIHRoZSBbU2VjdXJlU29ja2V0XSBpcyBubwogIC8vLyBsb25nZXIgbmVlZGVkLgogIHN0YXRpYyBGdXR1cmU8Q29ubmVjdGlvblRhc2s8U2VjdXJlU29ja2V0Pj4gc3RhcnRDb25uZWN0KGhvc3QsIGludCBwb3J0LAogICAgICB7U2VjdXJpdHlDb250ZXh0IGNvbnRleHQsCiAgICAgIGJvb2wgb25CYWRDZXJ0aWZpY2F0ZShYNTA5Q2VydGlmaWNhdGUgY2VydGlmaWNhdGUpLAogICAgICBMaXN0PFN0cmluZz4gc3VwcG9ydGVkUHJvdG9jb2xzfSkgewogICAgcmV0dXJuIFJhd1NlY3VyZVNvY2tldC5zdGFydENvbm5lY3QoaG9zdCwgcG9ydCwKICAgICAgICAgICAgY29udGV4dDogY29udGV4dCwKICAgICAgICAgICAgb25CYWRDZXJ0aWZpY2F0ZTogb25CYWRDZXJ0aWZpY2F0ZSwKICAgICAgICAgICAgc3VwcG9ydGVkUHJvdG9jb2xzOiBzdXBwb3J0ZWRQcm90b2NvbHMpCiAgICAgICAgLnRoZW4oKHJhd1N0YXRlKSB7CiAgICAgIEZ1dHVyZTxTZWN1cmVTb2NrZXQ+IHNvY2tldCA9CiAgICAgICAgICByYXdTdGF0ZS5zb2NrZXQudGhlbigocmF3U29ja2V0KSA9PiBuZXcgU2VjdXJlU29ja2V0Ll8ocmF3U29ja2V0KSk7CiAgICAgIHJldHVybiBuZXcgQ29ubmVjdGlvblRhc2s8U2VjdXJlU29ja2V0Pi5fKAogICAgICAgICAgc29ja2V0OiBzb2NrZXQsIG9uQ2FuY2VsOiByYXdTdGF0ZS5fb25DYW5jZWwpOwogICAgfSk7CiAgfQoKICAvKioKICAgKiBUYWtlcyBhbiBhbHJlYWR5IGNvbm5lY3RlZCBbc29ja2V0XSBhbmQgc3RhcnRzIGNsaWVudCBzaWRlIFRMUwogICAqIGhhbmRzaGFrZSB0byBtYWtlIHRoZSBjb21tdW5pY2F0aW9uIHNlY3VyZS4gV2hlbiB0aGUgcmV0dXJuZWQKICAgKiBmdXR1cmUgY29tcGxldGVzIHRoZSBbU2VjdXJlU29ja2V0XSBoYXMgY29tcGxldGVkIHRoZSBUTFMKICAgKiBoYW5kc2hha2UuIFVzaW5nIHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgdGhhdCB0aGUgb3RoZXIgZW5kIG9mIHRoZQogICAqIGNvbm5lY3Rpb24gaXMgcHJlcGFyZWQgZm9yIFRMUyBoYW5kc2hha2UuCiAgICoKICAgKiBJZiB0aGUgW3NvY2tldF0gYWxyZWFkeSBoYXMgYSBzdWJzY3JpcHRpb24sIHRoaXMgc3Vic2NyaXB0aW9uCiAgICogd2lsbCBubyBsb25nZXIgcmVjZWl2ZSBhbmQgZXZlbnRzLiBJbiBtb3N0IGNhc2VzIGNhbGxpbmcKICAgKiBgcGF1c2VgIG9uIHRoaXMgc3Vic2NyaXB0aW9uIGJlZm9yZSBzdGFydGluZyBUTFMgaGFuZHNoYWtlIGlzCiAgICogdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLgogICAqCiAgICogVGhlIGdpdmVuIFtzb2NrZXRdIGlzIGNsb3NlZCBhbmQgbWF5IG5vdCBiZSB1c2VkIGFueW1vcmUuCiAgICoKICAgKiBJZiB0aGUgW2hvc3RdIGFyZ3VtZW50IGlzIHBhc3NlZCBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGhvc3QgbmFtZQogICAqIGZvciB0aGUgVExTIGhhbmRzaGFrZS4gSWYgW2hvc3RdIGlzIG5vdCBwYXNzZWQgdGhlIGhvc3QgbmFtZSBmcm9tCiAgICogdGhlIFtzb2NrZXRdIHdpbGwgYmUgdXNlZC4gVGhlIFtob3N0XSBjYW4gYmUgZWl0aGVyIGEgW1N0cmluZ10gb3IKICAgKiBhbiBbSW50ZXJuZXRBZGRyZXNzXS4KICAgKgogICAqIFtzdXBwb3J0ZWRQcm90b2NvbHNdIGlzIGFuIG9wdGlvbmFsIGxpc3Qgb2YgcHJvdG9jb2xzIChpbiBkZWNyZWFzaW5nCiAgICogb3JkZXIgb2YgcHJlZmVyZW5jZSkgdG8gdXNlIGR1cmluZyB0aGUgQUxQTiBwcm90b2NvbCBuZWdvdGlhdGlvbiB3aXRoIHRoZQogICAqIHNlcnZlci4gIEV4YW1wbGUgdmFsdWVzIGFyZSAiaHR0cC8xLjEiIG9yICJoMiIuICBUaGUgc2VsZWN0ZWQgcHJvdG9jb2wKICAgKiBjYW4gYmUgb2J0YWluZWQgdmlhIFtTZWN1cmVTb2NrZXQuc2VsZWN0ZWRQcm90b2NvbF0uCiAgICoKICAgKiBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBfbm90XyBjYXVzZSBhIEROUyBob3N0IGxvb2t1cC4gSWYgdGhlCiAgICogW2hvc3RdIHBhc3NlZCBpcyBhIFtTdHJpbmddIHRoZSBbSW50ZXJuZXRBZGRyZXNzXSBmb3IgdGhlCiAgICogcmVzdWx0aW5nIFtTZWN1cmVTb2NrZXRdIHdpbGwgaGF2ZSB0aGUgcGFzc2VkIGluIFtob3N0XSBhcyBpdHMKICAgKiBob3N0IHZhbHVlIGFuZCB0aGUgaW50ZXJuZXQgYWRkcmVzcyBvZiB0aGUgYWxyZWFkeSBjb25uZWN0ZWQKICAgKiBzb2NrZXQgYXMgaXRzIGFkZHJlc3MgdmFsdWUuCiAgICoKICAgKiBTZWUgW2Nvbm5lY3RdIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBhcmd1bWVudHMuCiAgICoKICAgKi8KICBzdGF0aWMgRnV0dXJlPFNlY3VyZVNvY2tldD4gc2VjdXJlKFNvY2tldCBzb2NrZXQsCiAgICAgIHtob3N0LAogICAgICBTZWN1cml0eUNvbnRleHQgY29udGV4dCwKICAgICAgYm9vbCBvbkJhZENlcnRpZmljYXRlKFg1MDlDZXJ0aWZpY2F0ZSBjZXJ0aWZpY2F0ZSksCiAgICAgIEBTaW5jZSgiMi42IikgTGlzdDxTdHJpbmc+IHN1cHBvcnRlZFByb3RvY29sc30pIHsKICAgIHJldHVybiAoKHNvY2tldCBhcyBkeW5hbWljIC8qX1NvY2tldCovKS5fZGV0YWNoUmF3KCkgYXMgRnV0dXJlKQogICAgICAgIC50aGVuPFJhd1NlY3VyZVNvY2tldD4oKGRldGFjaGVkUmF3KSB7CiAgICAgIHJldHVybiBSYXdTZWN1cmVTb2NrZXQuc2VjdXJlKGRldGFjaGVkUmF3WzBdIGFzIFJhd1NvY2tldCwKICAgICAgICAgIHN1YnNjcmlwdGlvbjogZGV0YWNoZWRSYXdbMV0gYXMgU3RyZWFtU3Vic2NyaXB0aW9uPFJhd1NvY2tldEV2ZW50PiwKICAgICAgICAgIGhvc3Q6IGhvc3QsCiAgICAgICAgICBjb250ZXh0OiBjb250ZXh0LAogICAgICAgICAgb25CYWRDZXJ0aWZpY2F0ZTogb25CYWRDZXJ0aWZpY2F0ZSwKICAgICAgICAgIHN1cHBvcnRlZFByb3RvY29sczogc3VwcG9ydGVkUHJvdG9jb2xzKTsKICAgIH0pLnRoZW48U2VjdXJlU29ja2V0PigocmF3KSA9PiBuZXcgU2VjdXJlU29ja2V0Ll8ocmF3KSk7CiAgfQoKICAvKioKICAgKiBUYWtlcyBhbiBhbHJlYWR5IGNvbm5lY3RlZCBbc29ja2V0XSBhbmQgc3RhcnRzIHNlcnZlciBzaWRlIFRMUwogICAqIGhhbmRzaGFrZSB0byBtYWtlIHRoZSBjb21tdW5pY2F0aW9uIHNlY3VyZS4gV2hlbiB0aGUgcmV0dXJuZWQKICAgKiBmdXR1cmUgY29tcGxldGVzIHRoZSBbU2VjdXJlU29ja2V0XSBoYXMgY29tcGxldGVkIHRoZSBUTFMKICAgKiBoYW5kc2hha2UuIFVzaW5nIHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgdGhhdCB0aGUgb3RoZXIgZW5kIG9mIHRoZQogICAqIGNvbm5lY3Rpb24gaXMgZ29pbmcgdG8gc3RhcnQgdGhlIFRMUyBoYW5kc2hha2UuCiAgICoKICAgKiBJZiB0aGUgW3NvY2tldF0gYWxyZWFkeSBoYXMgYSBzdWJzY3JpcHRpb24sIHRoaXMgc3Vic2NyaXB0aW9uCiAgICogd2lsbCBubyBsb25nZXIgcmVjZWl2ZSBhbmQgZXZlbnRzLiBJbiBtb3N0IGNhc2VzIGNhbGxpbmcKICAgKiBbOnBhdXNlOl0gb24gdGhpcyBzdWJzY3JpcHRpb24gYmVmb3JlIHN0YXJ0aW5nIFRMUyBoYW5kc2hha2UgaXMKICAgKiB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uCiAgICoKICAgKiBJZiBzb21lIG9mIHRoZSBkYXRhIG9mIHRoZSBUTFMgaGFuZHNoYWtlIGhhcyBhbHJlYWR5IGJlZW4gcmVhZAogICAqIGZyb20gdGhlIHNvY2tldCB0aGlzIGRhdGEgY2FuIGJlIHBhc3NlZCBpbiB0aGUgW2J1ZmZlcmVkRGF0YV0KICAgKiBwYXJhbWV0ZXIuIFRoaXMgZGF0YSB3aWxsIGJlIHByb2Nlc3NlZCBiZWZvcmUgYW55IG90aGVyIGRhdGEKICAgKiBhdmFpbGFibGUgb24gdGhlIHNvY2tldC4KICAgKgogICAqIFNlZSBbU2VjdXJlU2VydmVyU29ja2V0LmJpbmRdIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZQogICAqIGFyZ3VtZW50cy4KICAgKgogICAqLwogIHN0YXRpYyBGdXR1cmU8U2VjdXJlU29ja2V0PiBzZWN1cmVTZXJ2ZXIoCiAgICAgIFNvY2tldCBzb2NrZXQsIFNlY3VyaXR5Q29udGV4dCBjb250ZXh0LAogICAgICB7TGlzdDxpbnQ+IGJ1ZmZlcmVkRGF0YSwKICAgICAgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGU6IGZhbHNlLAogICAgICBib29sIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZTogZmFsc2UsCiAgICAgIExpc3Q8U3RyaW5nPiBzdXBwb3J0ZWRQcm90b2NvbHN9KSB7CiAgICByZXR1cm4gKChzb2NrZXQgYXMgZHluYW1pYyAvKl9Tb2NrZXQqLykuX2RldGFjaFJhdygpIGFzIEZ1dHVyZSkKICAgICAgICAudGhlbjxSYXdTZWN1cmVTb2NrZXQ+KChkZXRhY2hlZFJhdykgewogICAgICByZXR1cm4gUmF3U2VjdXJlU29ja2V0LnNlY3VyZVNlcnZlcihkZXRhY2hlZFJhd1swXSBhcyBSYXdTb2NrZXQsIGNvbnRleHQsCiAgICAgICAgICBzdWJzY3JpcHRpb246IGRldGFjaGVkUmF3WzFdIGFzIFN0cmVhbVN1YnNjcmlwdGlvbjxSYXdTb2NrZXRFdmVudD4sCiAgICAgICAgICBidWZmZXJlZERhdGE6IGJ1ZmZlcmVkRGF0YSwKICAgICAgICAgIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZTogcmVxdWVzdENsaWVudENlcnRpZmljYXRlLAogICAgICAgICAgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlOiByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUsCiAgICAgICAgICBzdXBwb3J0ZWRQcm90b2NvbHM6IHN1cHBvcnRlZFByb3RvY29scyk7CiAgICB9KS50aGVuPFNlY3VyZVNvY2tldD4oKHJhdykgPT4gbmV3IFNlY3VyZVNvY2tldC5fKHJhdykpOwogIH0KCiAgLyoqCiAgICogR2V0IHRoZSBwZWVyIGNlcnRpZmljYXRlIGZvciBhIGNvbm5lY3RlZCBTZWN1cmVTb2NrZXQuICBJZiB0aGlzCiAgICogU2VjdXJlU29ja2V0IGlzIHRoZSBzZXJ2ZXIgZW5kIG9mIGEgc2VjdXJlIHNvY2tldCBjb25uZWN0aW9uLAogICAqIFtwZWVyQ2VydGlmaWNhdGVdIHdpbGwgcmV0dXJuIHRoZSBjbGllbnQgY2VydGlmaWNhdGUsIG9yIG51bGwsIGlmIG5vCiAgICogY2xpZW50IGNlcnRpZmljYXRlIHdhcyByZWNlaXZlZC4gIElmIGl0IGlzIHRoZSBjbGllbnQgZW5kLAogICAqIFtwZWVyQ2VydGlmaWNhdGVdIHdpbGwgcmV0dXJuIHRoZSBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZS4KICAgKi8KICBYNTA5Q2VydGlmaWNhdGUgZ2V0IHBlZXJDZXJ0aWZpY2F0ZTsKCiAgLyoqCiAgICogVGhlIHByb3RvY29sIHdoaWNoIHdhcyBzZWxlY3RlZCBkdXJpbmcgQUxQTiBwcm90b2NvbCBuZWdvdGlhdGlvbi4KICAgKgogICAqIFJldHVybnMgbnVsbCBpZiBvbmUgb2YgdGhlIHBlZXJzIGRvZXMgbm90IGhhdmUgc3VwcG9ydCBmb3IgQUxQTiwgZGlkIG5vdAogICAqIHNwZWNpZnkgYSBsaXN0IG9mIHN1cHBvcnRlZCBBTFBOIHByb3RvY29scyBvciB0aGVyZSB3YXMgbm8gY29tbW9uCiAgICogcHJvdG9jb2wgYmV0d2VlbiBjbGllbnQgYW5kIHNlcnZlci4KICAgKi8KICBTdHJpbmcgZ2V0IHNlbGVjdGVkUHJvdG9jb2w7CgogIC8qKgogICAqIFJlbmVnb3RpYXRlIGFuIGV4aXN0aW5nIHNlY3VyZSBjb25uZWN0aW9uLCByZW5ld2luZyB0aGUgc2Vzc2lvbiBrZXlzCiAgICogYW5kIHBvc3NpYmx5IGNoYW5naW5nIHRoZSBjb25uZWN0aW9uIHByb3BlcnRpZXMuCiAgICoKICAgKiBUaGlzIHJlcGVhdHMgdGhlIFNTTCBvciBUTFMgaGFuZHNoYWtlLCB3aXRoIG9wdGlvbnMgdGhhdCBhbGxvdyBjbGVhcmluZwogICAqIHRoZSBzZXNzaW9uIGNhY2hlIGFuZCByZXF1ZXN0aW5nIGEgY2xpZW50IGNlcnRpZmljYXRlLgogICAqLwogIHZvaWQgcmVuZWdvdGlhdGUoCiAgICAgIHtib29sIHVzZVNlc3Npb25DYWNoZTogdHJ1ZSwKICAgICAgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGU6IGZhbHNlLAogICAgICBib29sIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZTogZmFsc2V9KTsKfQoKLyoqCiAqIFJhd1NlY3VyZVNvY2tldCBwcm92aWRlcyBhIHNlY3VyZSAoU1NMIG9yIFRMUykgbmV0d29yayBjb25uZWN0aW9uLgogKiBDbGllbnQgY29ubmVjdGlvbnMgdG8gYSBzZXJ2ZXIgYXJlIHByb3ZpZGVkIGJ5IGNhbGxpbmcKICogUmF3U2VjdXJlU29ja2V0LmNvbm5lY3QuICBBIHNlY3VyZSBzZXJ2ZXIsIGNyZWF0ZWQgd2l0aAogKiBbUmF3U2VjdXJlU2VydmVyU29ja2V0XSwgYWxzbyByZXR1cm5zIFJhd1NlY3VyZVNvY2tldCBvYmplY3RzIHJlcHJlc2VudGluZwogKiB0aGUgc2VydmVyIGVuZCBvZiBhIHNlY3VyZSBjb25uZWN0aW9uLgogKiBUaGUgY2VydGlmaWNhdGUgcHJvdmlkZWQgYnkgdGhlIHNlcnZlciBpcyBjaGVja2VkCiAqIHVzaW5nIHRoZSB0cnVzdGVkIGNlcnRpZmljYXRlcyBzZXQgaW4gdGhlIFNlY3VyaXR5Q29udGV4dCBvYmplY3QuCiAqIFRoZSBkZWZhdWx0IFtTZWN1cml0eUNvbnRleHRdIG9iamVjdCBjb250YWlucyBhIGJ1aWx0LWluIHNldCBvZiB0cnVzdGVkCiAqIHJvb3QgY2VydGlmaWNhdGVzIGZvciB3ZWxsLWtub3duIGNlcnRpZmljYXRlIGF1dGhvcml0aWVzLgogKi8KYWJzdHJhY3QgY2xhc3MgUmF3U2VjdXJlU29ja2V0IGltcGxlbWVudHMgUmF3U29ja2V0IHsKICAvKioKICAgKiBDb25zdHJ1Y3RzIGEgbmV3IHNlY3VyZSBjbGllbnQgc29ja2V0IGFuZCBjb25uZWN0IGl0IHRvIHRoZSBnaXZlbgogICAqIGhvc3Qgb24gdGhlIGdpdmVuIHBvcnQuIFRoZSByZXR1cm5lZCBbRnV0dXJlXSBpcyBjb21wbGV0ZWQgd2l0aCB0aGUKICAgKiBSYXdTZWN1cmVTb2NrZXQgd2hlbiBpdCBpcyBjb25uZWN0ZWQgYW5kIHJlYWR5IGZvciBzdWJzY3JpcHRpb24uCiAgICoKICAgKiBUaGUgY2VydGlmaWNhdGUgcHJvdmlkZWQgYnkgdGhlIHNlcnZlciBpcyBjaGVja2VkIHVzaW5nIHRoZSB0cnVzdGVkCiAgICogY2VydGlmaWNhdGVzIHNldCBpbiB0aGUgU2VjdXJpdHlDb250ZXh0IG9iamVjdCBJZiBhIGNlcnRpZmljYXRlIGFuZCBrZXkgYXJlCiAgICogc2V0IG9uIHRoZSBjbGllbnQsIHVzaW5nIFtTZWN1cml0eUNvbnRleHQudXNlQ2VydGlmaWNhdGVDaGFpbl0gYW5kCiAgICogW1NlY3VyaXR5Q29udGV4dC51c2VQcml2YXRlS2V5XSwgYW5kIHRoZSBzZXJ2ZXIgYXNrcyBmb3IgYSBjbGllbnQKICAgKiBjZXJ0aWZpY2F0ZSwgdGhlbiB0aGF0IGNsaWVudCBjZXJ0aWZpY2F0ZSBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIuCiAgICoKICAgKiBbb25CYWRDZXJ0aWZpY2F0ZV0gaXMgYW4gb3B0aW9uYWwgaGFuZGxlciBmb3IgdW52ZXJpZmlhYmxlIGNlcnRpZmljYXRlcy4KICAgKiBUaGUgaGFuZGxlciByZWNlaXZlcyB0aGUgW1g1MDlDZXJ0aWZpY2F0ZV0sIGFuZCBjYW4gaW5zcGVjdCBpdCBhbmQKICAgKiBkZWNpZGUgKG9yIGxldCB0aGUgdXNlciBkZWNpZGUpIHdoZXRoZXIgdG8gYWNjZXB0CiAgICogdGhlIGNvbm5lY3Rpb24gb3Igbm90LiAgVGhlIGhhbmRsZXIgc2hvdWxkIHJldHVybiB0cnVlCiAgICogdG8gY29udGludWUgdGhlIFtSYXdTZWN1cmVTb2NrZXRdIGNvbm5lY3Rpb24uCiAgICoKICAgKiBbc3VwcG9ydGVkUHJvdG9jb2xzXSBpcyBhbiBvcHRpb25hbCBsaXN0IG9mIHByb3RvY29scyAoaW4gZGVjcmVhc2luZwogICAqIG9yZGVyIG9mIHByZWZlcmVuY2UpIHRvIHVzZSBkdXJpbmcgdGhlIEFMUE4gcHJvdG9jb2wgbmVnb3RpYXRpb24gd2l0aCB0aGUKICAgKiBzZXJ2ZXIuICBFeGFtcGxlIHZhbHVlcyBhcmUgImh0dHAvMS4xIiBvciAiaDIiLiAgVGhlIHNlbGVjdGVkIHByb3RvY29sCiAgICogY2FuIGJlIG9idGFpbmVkIHZpYSBbUmF3U2VjdXJlU29ja2V0LnNlbGVjdGVkUHJvdG9jb2xdLgogICAqLwogIHN0YXRpYyBGdXR1cmU8UmF3U2VjdXJlU29ja2V0PiBjb25uZWN0KGhvc3QsIGludCBwb3J0LAogICAgICB7U2VjdXJpdHlDb250ZXh0IGNvbnRleHQsCiAgICAgIGJvb2wgb25CYWRDZXJ0aWZpY2F0ZShYNTA5Q2VydGlmaWNhdGUgY2VydGlmaWNhdGUpLAogICAgICBMaXN0PFN0cmluZz4gc3VwcG9ydGVkUHJvdG9jb2xzLAogICAgICBEdXJhdGlvbiB0aW1lb3V0fSkgewogICAgX1Jhd1NlY3VyZVNvY2tldC5fdmVyaWZ5RmllbGRzKAogICAgICAgIGhvc3QsIHBvcnQsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIG9uQmFkQ2VydGlmaWNhdGUpOwogICAgcmV0dXJuIFJhd1NvY2tldC5jb25uZWN0KGhvc3QsIHBvcnQsIHRpbWVvdXQ6IHRpbWVvdXQpLnRoZW4oKHNvY2tldCkgewogICAgICByZXR1cm4gc2VjdXJlKHNvY2tldCwKICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQsCiAgICAgICAgICBvbkJhZENlcnRpZmljYXRlOiBvbkJhZENlcnRpZmljYXRlLAogICAgICAgICAgc3VwcG9ydGVkUHJvdG9jb2xzOiBzdXBwb3J0ZWRQcm90b2NvbHMpOwogICAgfSk7CiAgfQoKICAvLy8gTGlrZSBbY29ubmVjdF0sIGJ1dCByZXR1cm5zIGEgW0Z1dHVyZV0gdGhhdCBjb21wbGV0ZXMgd2l0aCBhCiAgLy8vIFtDb25uZWN0aW9uVGFza10gdGhhdCBjYW4gYmUgY2FuY2VsbGVkIGlmIHRoZSBbUmF3U2VjdXJlU29ja2V0XSBpcyBubwogIC8vLyBsb25nZXIgbmVlZGVkLgogIHN0YXRpYyBGdXR1cmU8Q29ubmVjdGlvblRhc2s8UmF3U2VjdXJlU29ja2V0Pj4gc3RhcnRDb25uZWN0KGhvc3QsIGludCBwb3J0LAogICAgICB7U2VjdXJpdHlDb250ZXh0IGNvbnRleHQsCiAgICAgIGJvb2wgb25CYWRDZXJ0aWZpY2F0ZShYNTA5Q2VydGlmaWNhdGUgY2VydGlmaWNhdGUpLAogICAgICBMaXN0PFN0cmluZz4gc3VwcG9ydGVkUHJvdG9jb2xzfSkgewogICAgcmV0dXJuIFJhd1NvY2tldC5zdGFydENvbm5lY3QoaG9zdCwgcG9ydCkKICAgICAgICAudGhlbigoQ29ubmVjdGlvblRhc2s8UmF3U29ja2V0PiByYXdTdGF0ZSkgewogICAgICBGdXR1cmU8UmF3U2VjdXJlU29ja2V0PiBzb2NrZXQgPSByYXdTdGF0ZS5zb2NrZXQudGhlbigocmF3U29ja2V0KSB7CiAgICAgICAgcmV0dXJuIHNlY3VyZShyYXdTb2NrZXQsCiAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQsCiAgICAgICAgICAgIG9uQmFkQ2VydGlmaWNhdGU6IG9uQmFkQ2VydGlmaWNhdGUsCiAgICAgICAgICAgIHN1cHBvcnRlZFByb3RvY29sczogc3VwcG9ydGVkUHJvdG9jb2xzKTsKICAgICAgfSk7CiAgICAgIHJldHVybiBuZXcgQ29ubmVjdGlvblRhc2s8UmF3U2VjdXJlU29ja2V0Pi5fKAogICAgICAgICAgc29ja2V0OiBzb2NrZXQsIG9uQ2FuY2VsOiByYXdTdGF0ZS5fb25DYW5jZWwpOwogICAgfSk7CiAgfQoKICAvKioKICAgKiBUYWtlcyBhbiBhbHJlYWR5IGNvbm5lY3RlZCBbc29ja2V0XSBhbmQgc3RhcnRzIGNsaWVudCBzaWRlIFRMUwogICAqIGhhbmRzaGFrZSB0byBtYWtlIHRoZSBjb21tdW5pY2F0aW9uIHNlY3VyZS4gV2hlbiB0aGUgcmV0dXJuZWQKICAgKiBmdXR1cmUgY29tcGxldGVzIHRoZSBbUmF3U2VjdXJlU29ja2V0XSBoYXMgY29tcGxldGVkIHRoZSBUTFMKICAgKiBoYW5kc2hha2UuIFVzaW5nIHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgdGhhdCB0aGUgb3RoZXIgZW5kIG9mIHRoZQogICAqIGNvbm5lY3Rpb24gaXMgcHJlcGFyZWQgZm9yIFRMUyBoYW5kc2hha2UuCiAgICoKICAgKiBJZiB0aGUgW3NvY2tldF0gYWxyZWFkeSBoYXMgYSBzdWJzY3JpcHRpb24sIHBhc3MgdGhlIGV4aXN0aW5nCiAgICogc3Vic2NyaXB0aW9uIGluIHRoZSBbc3Vic2NyaXB0aW9uXSBwYXJhbWV0ZXIuIFRoZSBbc2VjdXJlXQogICAqIG9wZXJhdGlvbiB3aWxsIHRha2Ugb3ZlciB0aGUgc3Vic2NyaXB0aW9uIGJ5IHJlcGxhY2luZyB0aGUKICAgKiBoYW5kbGVycyB3aXRoIGl0IG93biBzZWN1cmUgcHJvY2Vzc2luZy4gVGhlIGNhbGxlciBtdXN0IG5vdCB0b3VjaAogICAqIHRoaXMgc3Vic2NyaXB0aW9uIGFueW1vcmUuIFBhc3NpbmcgYSBwYXVzZWQgc3Vic2NyaXB0aW9uIGlzIGFuCiAgICogZXJyb3IuCiAgICoKICAgKiBJZiB0aGUgW2hvc3RdIGFyZ3VtZW50IGlzIHBhc3NlZCBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGhvc3QgbmFtZQogICAqIGZvciB0aGUgVExTIGhhbmRzaGFrZS4gSWYgW2hvc3RdIGlzIG5vdCBwYXNzZWQgdGhlIGhvc3QgbmFtZSBmcm9tCiAgICogdGhlIFtzb2NrZXRdIHdpbGwgYmUgdXNlZC4gVGhlIFtob3N0XSBjYW4gYmUgZWl0aGVyIGEgW1N0cmluZ10gb3IKICAgKiBhbiBbSW50ZXJuZXRBZGRyZXNzXS4KICAgKgogICAqIFtzdXBwb3J0ZWRQcm90b2NvbHNdIGlzIGFuIG9wdGlvbmFsIGxpc3Qgb2YgcHJvdG9jb2xzIChpbiBkZWNyZWFzaW5nCiAgICogb3JkZXIgb2YgcHJlZmVyZW5jZSkgdG8gdXNlIGR1cmluZyB0aGUgQUxQTiBwcm90b2NvbCBuZWdvdGlhdGlvbiB3aXRoIHRoZQogICAqIHNlcnZlci4gIEV4YW1wbGUgdmFsdWVzIGFyZSAiaHR0cC8xLjEiIG9yICJoMiIuICBUaGUgc2VsZWN0ZWQgcHJvdG9jb2wKICAgKiBjYW4gYmUgb2J0YWluZWQgdmlhIFtTZWN1cmVTb2NrZXQuc2VsZWN0ZWRQcm90b2NvbF0uCiAgICoKICAgKiBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBfbm90XyBjYXVzZSBhIEROUyBob3N0IGxvb2t1cC4gSWYgdGhlCiAgICogW2hvc3RdIHBhc3NlZCBpcyBhIFtTdHJpbmddIHRoZSBbSW50ZXJuZXRBZGRyZXNzXSBmb3IgdGhlCiAgICogcmVzdWx0aW5nIFtTZWN1cmVTb2NrZXRdIHdpbGwgaGF2ZSB0aGlzIHBhc3NlZCBpbiBbaG9zdF0gYXMgaXRzCiAgICogaG9zdCB2YWx1ZSBhbmQgdGhlIGludGVybmV0IGFkZHJlc3Mgb2YgdGhlIGFscmVhZHkgY29ubmVjdGVkCiAgICogc29ja2V0IGFzIGl0cyBhZGRyZXNzIHZhbHVlLgogICAqCiAgICogU2VlIFtjb25uZWN0XSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgYXJndW1lbnRzLgogICAqCiAgICovCiAgc3RhdGljIEZ1dHVyZTxSYXdTZWN1cmVTb2NrZXQ+IHNlY3VyZShSYXdTb2NrZXQgc29ja2V0LAogICAgICB7U3RyZWFtU3Vic2NyaXB0aW9uPFJhd1NvY2tldEV2ZW50PiBzdWJzY3JpcHRpb24sCiAgICAgIGhvc3QsCiAgICAgIFNlY3VyaXR5Q29udGV4dCBjb250ZXh0LAogICAgICBib29sIG9uQmFkQ2VydGlmaWNhdGUoWDUwOUNlcnRpZmljYXRlIGNlcnRpZmljYXRlKSwKICAgICAgTGlzdDxTdHJpbmc+IHN1cHBvcnRlZFByb3RvY29sc30pIHsKICAgIHNvY2tldC5yZWFkRXZlbnRzRW5hYmxlZCA9IGZhbHNlOwogICAgc29ja2V0LndyaXRlRXZlbnRzRW5hYmxlZCA9IGZhbHNlOwogICAgcmV0dXJuIF9SYXdTZWN1cmVTb2NrZXQuY29ubmVjdCgKICAgICAgICBob3N0ICE9IG51bGwgPyBob3N0IDogc29ja2V0LmFkZHJlc3MuaG9zdCwgc29ja2V0LnBvcnQsCiAgICAgICAgaXNfc2VydmVyOiBmYWxzZSwKICAgICAgICBzb2NrZXQ6IHNvY2tldCwKICAgICAgICBzdWJzY3JpcHRpb246IHN1YnNjcmlwdGlvbiwKICAgICAgICBjb250ZXh0OiBjb250ZXh0LAogICAgICAgIG9uQmFkQ2VydGlmaWNhdGU6IG9uQmFkQ2VydGlmaWNhdGUsCiAgICAgICAgc3VwcG9ydGVkUHJvdG9jb2xzOiBzdXBwb3J0ZWRQcm90b2NvbHMpOwogIH0KCiAgLyoqCiAgICogVGFrZXMgYW4gYWxyZWFkeSBjb25uZWN0ZWQgW3NvY2tldF0gYW5kIHN0YXJ0cyBzZXJ2ZXIgc2lkZSBUTFMKICAgKiBoYW5kc2hha2UgdG8gbWFrZSB0aGUgY29tbXVuaWNhdGlvbiBzZWN1cmUuIFdoZW4gdGhlIHJldHVybmVkCiAgICogZnV0dXJlIGNvbXBsZXRlcyB0aGUgW1Jhd1NlY3VyZVNvY2tldF0gaGFzIGNvbXBsZXRlZCB0aGUgVExTCiAgICogaGFuZHNoYWtlLiBVc2luZyB0aGlzIGZ1bmN0aW9uIHJlcXVpcmVzIHRoYXQgdGhlIG90aGVyIGVuZCBvZiB0aGUKICAgKiBjb25uZWN0aW9uIGlzIGdvaW5nIHRvIHN0YXJ0IHRoZSBUTFMgaGFuZHNoYWtlLgogICAqCiAgICogSWYgdGhlIFtzb2NrZXRdIGFscmVhZHkgaGFzIGEgc3Vic2NyaXB0aW9uLCBwYXNzIHRoZSBleGlzdGluZwogICAqIHN1YnNjcmlwdGlvbiBpbiB0aGUgW3N1YnNjcmlwdGlvbl0gcGFyYW1ldGVyLiBUaGUgW3NlY3VyZVNlcnZlcl0KICAgKiBvcGVyYXRpb24gd2lsbCB0YWtlIG92ZXIgdGhlIHN1YnNjcmlwdGlvbiBieSByZXBsYWNpbmcgdGhlCiAgICogaGFuZGxlcnMgd2l0aCBpdCBvd24gc2VjdXJlIHByb2Nlc3NpbmcuIFRoZSBjYWxsZXIgbXVzdCBub3QgdG91Y2gKICAgKiB0aGlzIHN1YnNjcmlwdGlvbiBhbnltb3JlLiBQYXNzaW5nIGEgcGF1c2VkIHN1YnNjcmlwdGlvbiBpcyBhbgogICAqIGVycm9yLgogICAqCiAgICogSWYgc29tZSBvZiB0aGUgZGF0YSBvZiB0aGUgVExTIGhhbmRzaGFrZSBoYXMgYWxyZWFkeSBiZWVuIHJlYWQKICAgKiBmcm9tIHRoZSBzb2NrZXQgdGhpcyBkYXRhIGNhbiBiZSBwYXNzZWQgaW4gdGhlIFtidWZmZXJlZERhdGFdCiAgICogcGFyYW1ldGVyLiBUaGlzIGRhdGEgd2lsbCBiZSBwcm9jZXNzZWQgYmVmb3JlIGFueSBvdGhlciBkYXRhCiAgICogYXZhaWxhYmxlIG9uIHRoZSBzb2NrZXQuCiAgICoKICAgKiBTZWUgW1Jhd1NlY3VyZVNlcnZlclNvY2tldC5iaW5kXSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUKICAgKiBhcmd1bWVudHMuCiAgICoKICAgKi8KICBzdGF0aWMgRnV0dXJlPFJhd1NlY3VyZVNvY2tldD4gc2VjdXJlU2VydmVyKAogICAgICBSYXdTb2NrZXQgc29ja2V0LCBTZWN1cml0eUNvbnRleHQgY29udGV4dCwKICAgICAge1N0cmVhbVN1YnNjcmlwdGlvbjxSYXdTb2NrZXRFdmVudD4gc3Vic2NyaXB0aW9uLAogICAgICBMaXN0PGludD4gYnVmZmVyZWREYXRhLAogICAgICBib29sIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZTogZmFsc2UsCiAgICAgIGJvb2wgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlOiBmYWxzZSwKICAgICAgTGlzdDxTdHJpbmc+IHN1cHBvcnRlZFByb3RvY29sc30pIHsKICAgIHNvY2tldC5yZWFkRXZlbnRzRW5hYmxlZCA9IGZhbHNlOwogICAgc29ja2V0LndyaXRlRXZlbnRzRW5hYmxlZCA9IGZhbHNlOwogICAgcmV0dXJuIF9SYXdTZWN1cmVTb2NrZXQuY29ubmVjdChzb2NrZXQuYWRkcmVzcywgc29ja2V0LnJlbW90ZVBvcnQsCiAgICAgICAgY29udGV4dDogY29udGV4dCwKICAgICAgICBpc19zZXJ2ZXI6IHRydWUsCiAgICAgICAgc29ja2V0OiBzb2NrZXQsCiAgICAgICAgc3Vic2NyaXB0aW9uOiBzdWJzY3JpcHRpb24sCiAgICAgICAgYnVmZmVyZWREYXRhOiBidWZmZXJlZERhdGEsCiAgICAgICAgcmVxdWVzdENsaWVudENlcnRpZmljYXRlOiByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsCiAgICAgICAgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlOiByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUsCiAgICAgICAgc3VwcG9ydGVkUHJvdG9jb2xzOiBzdXBwb3J0ZWRQcm90b2NvbHMpOwogIH0KCiAgLyoqCiAgICogUmVuZWdvdGlhdGUgYW4gZXhpc3Rpbmcgc2VjdXJlIGNvbm5lY3Rpb24sIHJlbmV3aW5nIHRoZSBzZXNzaW9uIGtleXMKICAgKiBhbmQgcG9zc2libHkgY2hhbmdpbmcgdGhlIGNvbm5lY3Rpb24gcHJvcGVydGllcy4KICAgKgogICAqIFRoaXMgcmVwZWF0cyB0aGUgU1NMIG9yIFRMUyBoYW5kc2hha2UsIHdpdGggb3B0aW9ucyB0aGF0IGFsbG93IGNsZWFyaW5nCiAgICogdGhlIHNlc3Npb24gY2FjaGUgYW5kIHJlcXVlc3RpbmcgYSBjbGllbnQgY2VydGlmaWNhdGUuCiAgICovCiAgdm9pZCByZW5lZ290aWF0ZSgKICAgICAge2Jvb2wgdXNlU2Vzc2lvbkNhY2hlOiB0cnVlLAogICAgICBib29sIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZTogZmFsc2UsCiAgICAgIGJvb2wgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlOiBmYWxzZX0pOwoKICAvKioKICAgKiBHZXQgdGhlIHBlZXIgY2VydGlmaWNhdGUgZm9yIGEgY29ubmVjdGVkIFJhd1NlY3VyZVNvY2tldC4gIElmIHRoaXMKICAgKiBSYXdTZWN1cmVTb2NrZXQgaXMgdGhlIHNlcnZlciBlbmQgb2YgYSBzZWN1cmUgc29ja2V0IGNvbm5lY3Rpb24sCiAgICogW3BlZXJDZXJ0aWZpY2F0ZV0gd2lsbCByZXR1cm4gdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSwgb3IgbnVsbCwgaWYgbm8KICAgKiBjbGllbnQgY2VydGlmaWNhdGUgd2FzIHJlY2VpdmVkLiAgSWYgaXQgaXMgdGhlIGNsaWVudCBlbmQsCiAgICogW3BlZXJDZXJ0aWZpY2F0ZV0gd2lsbCByZXR1cm4gdGhlIHNlcnZlcidzIGNlcnRpZmljYXRlLgogICAqLwogIFg1MDlDZXJ0aWZpY2F0ZSBnZXQgcGVlckNlcnRpZmljYXRlOwoKICAvKioKICAgKiBUaGUgcHJvdG9jb2wgd2hpY2ggd2FzIHNlbGVjdGVkIGR1cmluZyBwcm90b2NvbCBuZWdvdGlhdGlvbi4KICAgKgogICAqIFJldHVybnMgbnVsbCBpZiBvbmUgb2YgdGhlIHBlZXJzIGRvZXMgbm90IGhhdmUgc3VwcG9ydCBmb3IgQUxQTiwgZGlkIG5vdAogICAqIHNwZWNpZnkgYSBsaXN0IG9mIHN1cHBvcnRlZCBBTFBOIHByb3RvY29scyBvciB0aGVyZSB3YXMgbm8gY29tbW9uCiAgICogcHJvdG9jb2wgYmV0d2VlbiBjbGllbnQgYW5kIHNlcnZlci4KICAgKi8KICBTdHJpbmcgZ2V0IHNlbGVjdGVkUHJvdG9jb2w7Cn0KCi8qKgogKiBYNTA5Q2VydGlmaWNhdGUgcmVwcmVzZW50cyBhbiBTU0wgY2VydGlmaWNhdGUsIHdpdGggYWNjZXNzb3JzIHRvCiAqIGdldCB0aGUgZmllbGRzIG9mIHRoZSBjZXJ0aWZpY2F0ZS4KICovCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKYWJzdHJhY3QgY2xhc3MgWDUwOUNlcnRpZmljYXRlIHsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgZXh0ZXJuYWwgZmFjdG9yeSBYNTA5Q2VydGlmaWNhdGUuXygpOwoKICAvLy8gVGhlIERFUiBlbmNvZGVkIGJ5dGVzIG9mIHRoZSBjZXJ0aWZpY2F0ZS4KICBVaW50OExpc3QgZ2V0IGRlcjsKCiAgLy8vIFRoZSBQRU0gZW5jb2RlZCBTdHJpbmcgb2YgdGhlIGNlcnRpZmljYXRlLgogIFN0cmluZyBnZXQgcGVtOwoKICAvLy8gVGhlIFNIQTEgaGFzaCBvZiB0aGUgY2VydGlmaWNhdGUuCiAgVWludDhMaXN0IGdldCBzaGExOwoKICBTdHJpbmcgZ2V0IHN1YmplY3Q7CiAgU3RyaW5nIGdldCBpc3N1ZXI7CiAgRGF0ZVRpbWUgZ2V0IHN0YXJ0VmFsaWRpdHk7CiAgRGF0ZVRpbWUgZ2V0IGVuZFZhbGlkaXR5Owp9CgpjbGFzcyBfRmlsdGVyU3RhdHVzIHsKICBib29sIHByb2dyZXNzID0gZmFsc2U7IC8vIFRoZSBmaWx0ZXIgcmVhZCBvciB3cm90ZSBkYXRhIHRvIHRoZSBidWZmZXJzLgogIGJvb2wgcmVhZEVtcHR5ID0gdHJ1ZTsgLy8gVGhlIHJlYWQgYnVmZmVycyBhbmQgZGVjcnlwdGlvbiBmaWx0ZXIgYXJlIGVtcHR5LgogIGJvb2wgd3JpdGVFbXB0eSA9IHRydWU7IC8vIFRoZSB3cml0ZSBidWZmZXJzIGFuZCBlbmNyeXB0aW9uIGZpbHRlciBhcmUgZW1wdHkuCiAgLy8gVGhlc2UgYXJlIHNldCBpZiBhIGJ1ZmZlciBjaGFuZ2VzIHN0YXRlIGZyb20gZW1wdHkgb3IgZnVsbC4KICBib29sIHJlYWRQbGFpbnRleHROb0xvbmdlckVtcHR5ID0gZmFsc2U7CiAgYm9vbCB3cml0ZVBsYWludGV4dE5vTG9uZ2VyRnVsbCA9IGZhbHNlOwogIGJvb2wgcmVhZEVuY3J5cHRlZE5vTG9uZ2VyRnVsbCA9IGZhbHNlOwogIGJvb2wgd3JpdGVFbmNyeXB0ZWROb0xvbmdlckVtcHR5ID0gZmFsc2U7CgogIF9GaWx0ZXJTdGF0dXMoKTsKfQoKY2xhc3MgX1Jhd1NlY3VyZVNvY2tldCBleHRlbmRzIFN0cmVhbTxSYXdTb2NrZXRFdmVudD4KICAgIGltcGxlbWVudHMgUmF3U2VjdXJlU29ja2V0IHsKICAvLyBTdGF0dXMgc3RhdGVzCiAgc3RhdGljIGNvbnN0IGludCBoYW5kc2hha2VTdGF0dXMgPSAyMDE7CiAgc3RhdGljIGNvbnN0IGludCBjb25uZWN0ZWRTdGF0dXMgPSAyMDI7CiAgc3RhdGljIGNvbnN0IGludCBjbG9zZWRTdGF0dXMgPSAyMDM7CgogIC8vIEJ1ZmZlciBpZGVudGlmaWVycy4KICAvLyBUaGVzZSBtdXN0IGFncmVlIHdpdGggdGhvc2UgaW4gdGhlIG5hdGl2ZSBDKysgaW1wbGVtZW50YXRpb24uCiAgc3RhdGljIGNvbnN0IGludCByZWFkUGxhaW50ZXh0SWQgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgd3JpdGVQbGFpbnRleHRJZCA9IDE7CiAgc3RhdGljIGNvbnN0IGludCByZWFkRW5jcnlwdGVkSWQgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgd3JpdGVFbmNyeXB0ZWRJZCA9IDM7CiAgc3RhdGljIGNvbnN0IGludCBidWZmZXJDb3VudCA9IDQ7CgogIC8vIElzIGEgYnVmZmVyIGlkZW50aWZpZXIgZm9yIGFuIGVuY3J5cHRlZCBidWZmZXI/CiAgc3RhdGljIGJvb2wgX2lzQnVmZmVyRW5jcnlwdGVkKGludCBpZGVudGlmaWVyKSA9PgogICAgICBpZGVudGlmaWVyID49IHJlYWRFbmNyeXB0ZWRJZDsKCiAgUmF3U29ja2V0IF9zb2NrZXQ7CiAgZmluYWwgQ29tcGxldGVyPF9SYXdTZWN1cmVTb2NrZXQ+IF9oYW5kc2hha2VDb21wbGV0ZSA9CiAgICAgIG5ldyBDb21wbGV0ZXI8X1Jhd1NlY3VyZVNvY2tldD4oKTsKICBTdHJlYW1Db250cm9sbGVyPFJhd1NvY2tldEV2ZW50PiBfY29udHJvbGxlcjsKICBTdHJlYW08UmF3U29ja2V0RXZlbnQ+IF9zdHJlYW07CiAgU3RyZWFtU3Vic2NyaXB0aW9uPFJhd1NvY2tldEV2ZW50PiBfc29ja2V0U3Vic2NyaXB0aW9uOwogIExpc3Q8aW50PiBfYnVmZmVyZWREYXRhOwogIGludCBfYnVmZmVyZWREYXRhSW5kZXggPSAwOwogIGZpbmFsIEludGVybmV0QWRkcmVzcyBhZGRyZXNzOwogIGZpbmFsIGJvb2wgaXNfc2VydmVyOwogIFNlY3VyaXR5Q29udGV4dCBjb250ZXh0OwogIGZpbmFsIGJvb2wgcmVxdWVzdENsaWVudENlcnRpZmljYXRlOwogIGZpbmFsIGJvb2wgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlOwogIGZpbmFsIEZ1bmN0aW9uIG9uQmFkQ2VydGlmaWNhdGU7CgogIHZhciBfc3RhdHVzID0gaGFuZHNoYWtlU3RhdHVzOwogIGJvb2wgX3dyaXRlRXZlbnRzRW5hYmxlZCA9IHRydWU7CiAgYm9vbCBfcmVhZEV2ZW50c0VuYWJsZWQgPSB0cnVlOwogIGludCBfcGF1c2VDb3VudCA9IDA7CiAgYm9vbCBfcGVuZGluZ1JlYWRFdmVudCA9IGZhbHNlOwogIGJvb2wgX3NvY2tldENsb3NlZFJlYWQgPSBmYWxzZTsgLy8gVGhlIG5ldHdvcmsgc29ja2V0IGlzIGNsb3NlZCBmb3IgcmVhZGluZy4KICBib29sIF9zb2NrZXRDbG9zZWRXcml0ZSA9IGZhbHNlOyAvLyBUaGUgbmV0d29yayBzb2NrZXQgaXMgY2xvc2VkIGZvciB3cml0aW5nLgogIGJvb2wgX2Nsb3NlZFJlYWQgPSBmYWxzZTsgLy8gVGhlIHNlY3VyZSBzb2NrZXQgaGFzIGZpcmVkIGFuIG9uQ2xvc2VkIGV2ZW50LgogIGJvb2wgX2Nsb3NlZFdyaXRlID0gZmFsc2U7IC8vIFRoZSBzZWN1cmUgc29ja2V0IGhhcyBiZWVuIGNsb3NlZCBmb3Igd3JpdGluZy4KICAvLyBUaGUgbmV0d29yayBzb2NrZXQgaXMgZ29uZS4KICBDb21wbGV0ZXI8UmF3U2VjdXJlU29ja2V0PiBfY2xvc2VDb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPFJhd1NlY3VyZVNvY2tldD4oKTsKICBfRmlsdGVyU3RhdHVzIF9maWx0ZXJTdGF0dXMgPSBuZXcgX0ZpbHRlclN0YXR1cygpOwogIGJvb2wgX2Nvbm5lY3RQZW5kaW5nID0gdHJ1ZTsKICBib29sIF9maWx0ZXJQZW5kaW5nID0gZmFsc2U7CiAgYm9vbCBfZmlsdGVyQWN0aXZlID0gZmFsc2U7CgogIF9TZWN1cmVGaWx0ZXIgX3NlY3VyZUZpbHRlciA9IG5ldyBfU2VjdXJlRmlsdGVyLl8oKTsKICBTdHJpbmcgX3NlbGVjdGVkUHJvdG9jb2w7CgogIHN0YXRpYyBGdXR1cmU8X1Jhd1NlY3VyZVNvY2tldD4gY29ubmVjdCgKICAgICAgZHluYW1pYyAvKlN0cmluZ3xJbnRlcm5ldEFkZHJlc3MqLyBob3N0LCBpbnQgcmVxdWVzdGVkUG9ydCwKICAgICAge2Jvb2wgaXNfc2VydmVyLAogICAgICBTZWN1cml0eUNvbnRleHQgY29udGV4dCwKICAgICAgUmF3U29ja2V0IHNvY2tldCwKICAgICAgU3RyZWFtU3Vic2NyaXB0aW9uPFJhd1NvY2tldEV2ZW50PiBzdWJzY3JpcHRpb24sCiAgICAgIExpc3Q8aW50PiBidWZmZXJlZERhdGEsCiAgICAgIGJvb2wgcmVxdWVzdENsaWVudENlcnRpZmljYXRlOiBmYWxzZSwKICAgICAgYm9vbCByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGU6IGZhbHNlLAogICAgICBib29sIG9uQmFkQ2VydGlmaWNhdGUoWDUwOUNlcnRpZmljYXRlIGNlcnRpZmljYXRlKSwKICAgICAgTGlzdDxTdHJpbmc+IHN1cHBvcnRlZFByb3RvY29sc30pIHsKICAgIF92ZXJpZnlGaWVsZHMoaG9zdCwgcmVxdWVzdGVkUG9ydCwgaXNfc2VydmVyLCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsCiAgICAgICAgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlLCBvbkJhZENlcnRpZmljYXRlKTsKICAgIGlmIChob3N0IGlzIEludGVybmV0QWRkcmVzcykgaG9zdCA9IGhvc3QuaG9zdDsKICAgIEludGVybmV0QWRkcmVzcyBhZGRyZXNzID0gc29ja2V0LmFkZHJlc3M7CiAgICBpZiAoaG9zdCAhPSBudWxsKSB7CiAgICAgIGFkZHJlc3MgPSBJbnRlcm5ldEFkZHJlc3MuX2Nsb25lV2l0aE5ld0hvc3QoYWRkcmVzcywgaG9zdCk7CiAgICB9CiAgICByZXR1cm4gbmV3IF9SYXdTZWN1cmVTb2NrZXQoCiAgICAgICAgICAgIGFkZHJlc3MsCiAgICAgICAgICAgIHJlcXVlc3RlZFBvcnQsCiAgICAgICAgICAgIGlzX3NlcnZlciwKICAgICAgICAgICAgY29udGV4dCwKICAgICAgICAgICAgc29ja2V0LAogICAgICAgICAgICBzdWJzY3JpcHRpb24sCiAgICAgICAgICAgIGJ1ZmZlcmVkRGF0YSwKICAgICAgICAgICAgcmVxdWVzdENsaWVudENlcnRpZmljYXRlLAogICAgICAgICAgICByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUsCiAgICAgICAgICAgIG9uQmFkQ2VydGlmaWNhdGUsCiAgICAgICAgICAgIHN1cHBvcnRlZFByb3RvY29scykKICAgICAgICAuX2hhbmRzaGFrZUNvbXBsZXRlCiAgICAgICAgLmZ1dHVyZTsKICB9CgogIF9SYXdTZWN1cmVTb2NrZXQoCiAgICAgIHRoaXMuYWRkcmVzcywKICAgICAgaW50IHJlcXVlc3RlZFBvcnQsCiAgICAgIHRoaXMuaXNfc2VydmVyLAogICAgICB0aGlzLmNvbnRleHQsCiAgICAgIHRoaXMuX3NvY2tldCwKICAgICAgdGhpcy5fc29ja2V0U3Vic2NyaXB0aW9uLAogICAgICB0aGlzLl9idWZmZXJlZERhdGEsCiAgICAgIHRoaXMucmVxdWVzdENsaWVudENlcnRpZmljYXRlLAogICAgICB0aGlzLnJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgdGhpcy5vbkJhZENlcnRpZmljYXRlLAogICAgICBMaXN0PFN0cmluZz4gc3VwcG9ydGVkUHJvdG9jb2xzKSB7CiAgICBjb250ZXh0ID8/PSBTZWN1cml0eUNvbnRleHQuZGVmYXVsdENvbnRleHQ7CiAgICBfY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPFJhd1NvY2tldEV2ZW50PigKICAgICAgICBzeW5jOiB0cnVlLAogICAgICAgIG9uTGlzdGVuOiBfb25TdWJzY3JpcHRpb25TdGF0ZUNoYW5nZSwKICAgICAgICBvblBhdXNlOiBfb25QYXVzZVN0YXRlQ2hhbmdlLAogICAgICAgIG9uUmVzdW1lOiBfb25QYXVzZVN0YXRlQ2hhbmdlLAogICAgICAgIG9uQ2FuY2VsOiBfb25TdWJzY3JpcHRpb25TdGF0ZUNoYW5nZSk7CiAgICBfc3RyZWFtID0gX2NvbnRyb2xsZXIuc3RyZWFtOwogICAgLy8gVGhyb3cgYW4gQXJndW1lbnRFcnJvciBpZiBhbnkgZmllbGQgaXMgaW52YWxpZC4gIEFmdGVyIHRoaXMsIGFsbAogICAgLy8gZXJyb3JzIHdpbGwgYmUgcmVwb3J0ZWQgdGhyb3VnaCB0aGUgZnV0dXJlIG9yIHRoZSBzdHJlYW0uCiAgICBfc2VjdXJlRmlsdGVyLmluaXQoKTsKICAgIF9zZWN1cmVGaWx0ZXIKICAgICAgICAucmVnaXN0ZXJIYW5kc2hha2VDb21wbGV0ZUNhbGxiYWNrKF9zZWN1cmVIYW5kc2hha2VDb21wbGV0ZUhhbmRsZXIpOwogICAgaWYgKG9uQmFkQ2VydGlmaWNhdGUgIT0gbnVsbCkgewogICAgICBfc2VjdXJlRmlsdGVyLnJlZ2lzdGVyQmFkQ2VydGlmaWNhdGVDYWxsYmFjayhfb25CYWRDZXJ0aWZpY2F0ZVdyYXBwZXIpOwogICAgfQogICAgX3NvY2tldC5yZWFkRXZlbnRzRW5hYmxlZCA9IHRydWU7CiAgICBfc29ja2V0LndyaXRlRXZlbnRzRW5hYmxlZCA9IGZhbHNlOwogICAgaWYgKF9zb2NrZXRTdWJzY3JpcHRpb24gPT0gbnVsbCkgewogICAgICAvLyBJZiBhIGN1cnJlbnQgc3Vic2NyaXB0aW9uIGlzIHByb3ZpZGVkIHVzZSB0aGlzIG90aGVyd2lzZQogICAgICAvLyBjcmVhdGUgYSBuZXcgb25lLgogICAgICBfc29ja2V0U3Vic2NyaXB0aW9uID0gX3NvY2tldC5saXN0ZW4oX2V2ZW50RGlzcGF0Y2hlciwKICAgICAgICAgIG9uRXJyb3I6IF9yZXBvcnRFcnJvciwgb25Eb25lOiBfZG9uZUhhbmRsZXIpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKF9zb2NrZXRTdWJzY3JpcHRpb24uaXNQYXVzZWQpIHsKICAgICAgICBfc29ja2V0LmNsb3NlKCk7CiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIlN1YnNjcmlwdGlvbiBwYXNzZWQgdG8gVExTIHVwZ3JhZGUgaXMgcGF1c2VkIik7CiAgICAgIH0KICAgICAgLy8gSWYgd2UgYXJlIHVwZ3JhZGluZyBhIHNvY2tldCB0aGF0IGlzIGFscmVhZHkgY2xvc2VkIGZvciByZWFkLAogICAgICAvLyByZXBvcnQgYW4gZXJyb3IgYXMgaWYgd2UgcmVjZWl2ZWQgcmVhZENsb3NlZCBkdXJpbmcgdGhlIGhhbmRzaGFrZS4KICAgICAgZHluYW1pYyBzID0gX3NvY2tldDsgLy8gQ2FzdCB0byBkeW5hbWljIHRvIGF2b2lkIHdhcm5pbmcuCiAgICAgIGlmIChzLl9zb2NrZXQuY2xvc2VkUmVhZEV2ZW50U2VudCkgewogICAgICAgIF9ldmVudERpc3BhdGNoZXIoUmF3U29ja2V0RXZlbnQucmVhZENsb3NlZCk7CiAgICAgIH0KICAgICAgX3NvY2tldFN1YnNjcmlwdGlvbgogICAgICAgIC4ub25EYXRhKF9ldmVudERpc3BhdGNoZXIpCiAgICAgICAgLi5vbkVycm9yKF9yZXBvcnRFcnJvcikKICAgICAgICAuLm9uRG9uZShfZG9uZUhhbmRsZXIpOwogICAgfQogICAgdHJ5IHsKICAgICAgdmFyIGVuY29kZWRQcm90b2NvbHMgPQogICAgICAgICAgU2VjdXJpdHlDb250ZXh0Ll9wcm90b2NvbHNUb0xlbmd0aEVuY29kaW5nKHN1cHBvcnRlZFByb3RvY29scyk7CiAgICAgIF9zZWN1cmVGaWx0ZXIuY29ubmVjdCgKICAgICAgICAgIGFkZHJlc3MuaG9zdCwKICAgICAgICAgIGNvbnRleHQsCiAgICAgICAgICBpc19zZXJ2ZXIsCiAgICAgICAgICByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUgfHwgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlLAogICAgICAgICAgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlLAogICAgICAgICAgZW5jb2RlZFByb3RvY29scyk7CiAgICAgIF9zZWN1cmVIYW5kc2hha2UoKTsKICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgX3JlcG9ydEVycm9yKGUsIHMpOwogICAgfQogIH0KCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFJhd1NvY2tldEV2ZW50PiBsaXN0ZW4odm9pZCBvbkRhdGEoUmF3U29ja2V0RXZlbnQgZGF0YSksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICBfc2VuZFdyaXRlRXZlbnQoKTsKICAgIHJldHVybiBfc3RyZWFtLmxpc3RlbihvbkRhdGEsCiAgICAgICAgb25FcnJvcjogb25FcnJvciwgb25Eb25lOiBvbkRvbmUsIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwogIH0KCiAgc3RhdGljIHZvaWQgX3ZlcmlmeUZpZWxkcygKICAgICAgaG9zdCwKICAgICAgaW50IHJlcXVlc3RlZFBvcnQsCiAgICAgIGJvb2wgaXNfc2VydmVyLAogICAgICBib29sIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgYm9vbCByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUsCiAgICAgIEZ1bmN0aW9uIG9uQmFkQ2VydGlmaWNhdGUpIHsKICAgIGlmIChob3N0IGlzISBTdHJpbmcgJiYgaG9zdCBpcyEgSW50ZXJuZXRBZGRyZXNzKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJob3N0IGlzIG5vdCBhIFN0cmluZyBvciBhbiBJbnRlcm5ldEFkZHJlc3MiKTsKICAgIH0KICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKHJlcXVlc3RlZFBvcnQsICJyZXF1ZXN0ZWRQb3J0Iik7CiAgICBpZiAocmVxdWVzdGVkUG9ydCA8IDAgfHwgcmVxdWVzdGVkUG9ydCA+IDY1NTM1KSB7CiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoInJlcXVlc3RlZFBvcnQgaXMgbm90IGluIHRoZSByYW5nZSAwLi42NTUzNSIpOwogICAgfQogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwoCiAgICAgICAgcmVxdWVzdENsaWVudENlcnRpZmljYXRlLCAicmVxdWVzdENsaWVudENlcnRpZmljYXRlIik7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbCgKICAgICAgICByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUsICJyZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUiKTsKICB9CgogIGludCBnZXQgcG9ydCA9PiBfc29ja2V0LnBvcnQ7CgogIEludGVybmV0QWRkcmVzcyBnZXQgcmVtb3RlQWRkcmVzcyA9PiBfc29ja2V0LnJlbW90ZUFkZHJlc3M7CgogIGludCBnZXQgcmVtb3RlUG9ydCA9PiBfc29ja2V0LnJlbW90ZVBvcnQ7CgogIHZvaWQgc2V0IF9vd25lcihvd25lcikgewogICAgKF9zb2NrZXQgYXMgZHluYW1pYykuX293bmVyID0gb3duZXI7CiAgfQoKICBpbnQgYXZhaWxhYmxlKCkgewogICAgcmV0dXJuIF9zdGF0dXMgIT0gY29ubmVjdGVkU3RhdHVzCiAgICAgICAgPyAwCiAgICAgICAgOiBfc2VjdXJlRmlsdGVyLmJ1ZmZlcnNbcmVhZFBsYWludGV4dElkXS5sZW5ndGg7CiAgfQoKICBGdXR1cmU8UmF3U2VjdXJlU29ja2V0PiBjbG9zZSgpIHsKICAgIHNodXRkb3duKFNvY2tldERpcmVjdGlvbi5ib3RoKTsKICAgIHJldHVybiBfY2xvc2VDb21wbGV0ZXIuZnV0dXJlOwogIH0KCiAgdm9pZCBfY29tcGxldGVDbG9zZUNvbXBsZXRlcihbUmF3U29ja2V0IGR1bW15XSkgewogICAgaWYgKCFfY2xvc2VDb21wbGV0ZXIuaXNDb21wbGV0ZWQpIF9jbG9zZUNvbXBsZXRlci5jb21wbGV0ZSh0aGlzKTsKICB9CgogIHZvaWQgX2Nsb3NlKCkgewogICAgX2Nsb3NlZFdyaXRlID0gdHJ1ZTsKICAgIF9jbG9zZWRSZWFkID0gdHJ1ZTsKICAgIGlmIChfc29ja2V0ICE9IG51bGwpIHsKICAgICAgX3NvY2tldC5jbG9zZSgpLnRoZW4oX2NvbXBsZXRlQ2xvc2VDb21wbGV0ZXIpOwogICAgfSBlbHNlIHsKICAgICAgX2NvbXBsZXRlQ2xvc2VDb21wbGV0ZXIoKTsKICAgIH0KICAgIF9zb2NrZXRDbG9zZWRXcml0ZSA9IHRydWU7CiAgICBfc29ja2V0Q2xvc2VkUmVhZCA9IHRydWU7CiAgICBpZiAoIV9maWx0ZXJBY3RpdmUgJiYgX3NlY3VyZUZpbHRlciAhPSBudWxsKSB7CiAgICAgIF9zZWN1cmVGaWx0ZXIuZGVzdHJveSgpOwogICAgICBfc2VjdXJlRmlsdGVyID0gbnVsbDsKICAgIH0KICAgIGlmIChfc29ja2V0U3Vic2NyaXB0aW9uICE9IG51bGwpIHsKICAgICAgX3NvY2tldFN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgIH0KICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICBfc3RhdHVzID0gY2xvc2VkU3RhdHVzOwogIH0KCiAgdm9pZCBzaHV0ZG93bihTb2NrZXREaXJlY3Rpb24gZGlyZWN0aW9uKSB7CiAgICBpZiAoZGlyZWN0aW9uID09IFNvY2tldERpcmVjdGlvbi5zZW5kIHx8CiAgICAgICAgZGlyZWN0aW9uID09IFNvY2tldERpcmVjdGlvbi5ib3RoKSB7CiAgICAgIF9jbG9zZWRXcml0ZSA9IHRydWU7CiAgICAgIGlmIChfZmlsdGVyU3RhdHVzLndyaXRlRW1wdHkpIHsKICAgICAgICBfc29ja2V0LnNodXRkb3duKFNvY2tldERpcmVjdGlvbi5zZW5kKTsKICAgICAgICBfc29ja2V0Q2xvc2VkV3JpdGUgPSB0cnVlOwogICAgICAgIGlmIChfY2xvc2VkUmVhZCkgewogICAgICAgICAgX2Nsb3NlKCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoZGlyZWN0aW9uID09IFNvY2tldERpcmVjdGlvbi5yZWNlaXZlIHx8CiAgICAgICAgZGlyZWN0aW9uID09IFNvY2tldERpcmVjdGlvbi5ib3RoKSB7CiAgICAgIF9jbG9zZWRSZWFkID0gdHJ1ZTsKICAgICAgX3NvY2tldENsb3NlZFJlYWQgPSB0cnVlOwogICAgICBfc29ja2V0LnNodXRkb3duKFNvY2tldERpcmVjdGlvbi5yZWNlaXZlKTsKICAgICAgaWYgKF9zb2NrZXRDbG9zZWRXcml0ZSkgewogICAgICAgIF9jbG9zZSgpOwogICAgICB9CiAgICB9CiAgfQoKICBib29sIGdldCB3cml0ZUV2ZW50c0VuYWJsZWQgPT4gX3dyaXRlRXZlbnRzRW5hYmxlZDsKCiAgdm9pZCBzZXQgd3JpdGVFdmVudHNFbmFibGVkKGJvb2wgdmFsdWUpIHsKICAgIF93cml0ZUV2ZW50c0VuYWJsZWQgPSB2YWx1ZTsKICAgIGlmICh2YWx1ZSkgewogICAgICBUaW1lci5ydW4oKCkgPT4gX3NlbmRXcml0ZUV2ZW50KCkpOwogICAgfQogIH0KCiAgYm9vbCBnZXQgcmVhZEV2ZW50c0VuYWJsZWQgPT4gX3JlYWRFdmVudHNFbmFibGVkOwoKICB2b2lkIHNldCByZWFkRXZlbnRzRW5hYmxlZChib29sIHZhbHVlKSB7CiAgICBfcmVhZEV2ZW50c0VuYWJsZWQgPSB2YWx1ZTsKICAgIF9zY2hlZHVsZVJlYWRFdmVudCgpOwogIH0KCiAgVWludDhMaXN0IHJlYWQoW2ludCBsZW5ndGhdKSB7CiAgICBpZiAobGVuZ3RoICE9IG51bGwgJiYgKGxlbmd0aCBpcyEgaW50IHx8IGxlbmd0aCA8IDApKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKAogICAgICAgICAgIkludmFsaWQgbGVuZ3RoIHBhcmFtZXRlciBpbiBTZWN1cmVTb2NrZXQucmVhZCAobGVuZ3RoOiAkbGVuZ3RoKSIpOwogICAgfQogICAgaWYgKF9jbG9zZWRSZWFkKSB7CiAgICAgIHRocm93IG5ldyBTb2NrZXRFeGNlcHRpb24oIlJlYWRpbmcgZnJvbSBhIGNsb3NlZCBzb2NrZXQiKTsKICAgIH0KICAgIGlmIChfc3RhdHVzICE9IGNvbm5lY3RlZFN0YXR1cykgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfc2VjdXJlRmlsdGVyLmJ1ZmZlcnNbcmVhZFBsYWludGV4dElkXS5yZWFkKGxlbmd0aCk7CiAgICBfc2NoZWR1bGVGaWx0ZXIoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBXcml0ZSB0aGUgZGF0YSB0byB0aGUgc29ja2V0LCBhbmQgc2NoZWR1bGUgdGhlIGZpbHRlciB0byBlbmNyeXB0IGl0LgogIGludCB3cml0ZShMaXN0PGludD4gZGF0YSwgW2ludCBvZmZzZXQsIGludCBieXRlc10pIHsKICAgIGlmIChieXRlcyAhPSBudWxsICYmIChieXRlcyBpcyEgaW50IHx8IGJ5dGVzIDwgMCkpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAiSW52YWxpZCBieXRlcyBwYXJhbWV0ZXIgaW4gU2VjdXJlU29ja2V0LnJlYWQgKGJ5dGVzOiAkYnl0ZXMpIik7CiAgICB9CiAgICBpZiAob2Zmc2V0ICE9IG51bGwgJiYgKG9mZnNldCBpcyEgaW50IHx8IG9mZnNldCA8IDApKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKAogICAgICAgICAgIkludmFsaWQgb2Zmc2V0IHBhcmFtZXRlciBpbiBTZWN1cmVTb2NrZXQucmVhZCAob2Zmc2V0OiAkb2Zmc2V0KSIpOwogICAgfQogICAgaWYgKF9jbG9zZWRXcml0ZSkgewogICAgICBfY29udHJvbGxlci5hZGRFcnJvcihuZXcgU29ja2V0RXhjZXB0aW9uKCJXcml0aW5nIHRvIGEgY2xvc2VkIHNvY2tldCIpKTsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBpZiAoX3N0YXR1cyAhPSBjb25uZWN0ZWRTdGF0dXMpIHJldHVybiAwOwogICAgb2Zmc2V0ID8/PSAwOwogICAgYnl0ZXMgPz89IGRhdGEubGVuZ3RoIC0gb2Zmc2V0OwoKICAgIGludCB3cml0dGVuID0KICAgICAgICBfc2VjdXJlRmlsdGVyLmJ1ZmZlcnNbd3JpdGVQbGFpbnRleHRJZF0ud3JpdGUoZGF0YSwgb2Zmc2V0LCBieXRlcyk7CiAgICBpZiAod3JpdHRlbiA+IDApIHsKICAgICAgX2ZpbHRlclN0YXR1cy53cml0ZUVtcHR5ID0gZmFsc2U7CiAgICB9CiAgICBfc2NoZWR1bGVGaWx0ZXIoKTsKICAgIHJldHVybiB3cml0dGVuOwogIH0KCiAgWDUwOUNlcnRpZmljYXRlIGdldCBwZWVyQ2VydGlmaWNhdGUgPT4gX3NlY3VyZUZpbHRlci5wZWVyQ2VydGlmaWNhdGU7CgogIFN0cmluZyBnZXQgc2VsZWN0ZWRQcm90b2NvbCA9PiBfc2VsZWN0ZWRQcm90b2NvbDsKCiAgYm9vbCBfb25CYWRDZXJ0aWZpY2F0ZVdyYXBwZXIoWDUwOUNlcnRpZmljYXRlIGNlcnRpZmljYXRlKSB7CiAgICBpZiAob25CYWRDZXJ0aWZpY2F0ZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICB2YXIgcmVzdWx0ID0gb25CYWRDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZSk7CiAgICBpZiAocmVzdWx0IGlzIGJvb2wpIHJldHVybiByZXN1bHQ7CiAgICB0aHJvdyBuZXcgSGFuZHNoYWtlRXhjZXB0aW9uKAogICAgICAgICJvbkJhZENlcnRpZmljYXRlIGNhbGxiYWNrIHJldHVybmVkIG5vbi1ib29sZWFuICRyZXN1bHQiKTsKICB9CgogIGJvb2wgc2V0T3B0aW9uKFNvY2tldE9wdGlvbiBvcHRpb24sIGJvb2wgZW5hYmxlZCkgewogICAgaWYgKF9zb2NrZXQgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIF9zb2NrZXQuc2V0T3B0aW9uKG9wdGlvbiwgZW5hYmxlZCk7CiAgfQoKICBVaW50OExpc3QgZ2V0UmF3T3B0aW9uKFJhd1NvY2tldE9wdGlvbiBvcHRpb24pIHsKICAgIHJldHVybiBfc29ja2V0Py5nZXRSYXdPcHRpb24ob3B0aW9uKTsKICB9CgogIHZvaWQgc2V0UmF3T3B0aW9uKFJhd1NvY2tldE9wdGlvbiBvcHRpb24pIHsKICAgIF9zb2NrZXQ/LnNldFJhd09wdGlvbihvcHRpb24pOwogIH0KCiAgdm9pZCBfZXZlbnREaXNwYXRjaGVyKFJhd1NvY2tldEV2ZW50IGV2ZW50KSB7CiAgICB0cnkgewogICAgICBpZiAoZXZlbnQgPT0gUmF3U29ja2V0RXZlbnQucmVhZCkgewogICAgICAgIF9yZWFkSGFuZGxlcigpOwogICAgICB9IGVsc2UgaWYgKGV2ZW50ID09IFJhd1NvY2tldEV2ZW50LndyaXRlKSB7CiAgICAgICAgX3dyaXRlSGFuZGxlcigpOwogICAgICB9IGVsc2UgaWYgKGV2ZW50ID09IFJhd1NvY2tldEV2ZW50LnJlYWRDbG9zZWQpIHsKICAgICAgICBfY2xvc2VIYW5kbGVyKCk7CiAgICAgIH0KICAgIH0gY2F0Y2ggKGUsIHN0YWNrVHJhY2UpIHsKICAgICAgX3JlcG9ydEVycm9yKGUsIHN0YWNrVHJhY2UpOwogICAgfQogIH0KCiAgdm9pZCBfcmVhZEhhbmRsZXIoKSB7CiAgICBfcmVhZFNvY2tldCgpOwogICAgX3NjaGVkdWxlRmlsdGVyKCk7CiAgfQoKICB2b2lkIF93cml0ZUhhbmRsZXIoKSB7CiAgICBfd3JpdGVTb2NrZXQoKTsKICAgIF9zY2hlZHVsZUZpbHRlcigpOwogIH0KCiAgdm9pZCBfZG9uZUhhbmRsZXIoKSB7CiAgICBpZiAoX2ZpbHRlclN0YXR1cy5yZWFkRW1wdHkpIHsKICAgICAgX2Nsb3NlKCk7CiAgICB9CiAgfQoKICB2b2lkIF9yZXBvcnRFcnJvcihlLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgaWYgKF9zdGF0dXMgPT0gY2xvc2VkU3RhdHVzKSB7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZiAoX2Nvbm5lY3RQZW5kaW5nKSB7CiAgICAgIC8vIF9jb25uZWN0UGVuZGluZyBpcyB0cnVlIHVudGlsIHRoZSBoYW5kc2hha2UgaGFzIGNvbXBsZXRlZCwgYW5kIHRoZQogICAgICAvLyBfaGFuZHNoYWtlQ29tcGxldGUgZnV0dXJlIHJldHVybmVkIGZyb20gU2VjdXJlU29ja2V0LmNvbm5lY3QgaGFzCiAgICAgIC8vIGNvbXBsZXRlZC4gIEJlZm9yZSB0aGlzIHBvaW50LCB3ZSBtdXN0IGNvbXBsZXRlIGl0IHdpdGggYW4gZXJyb3IuCiAgICAgIF9oYW5kc2hha2VDb21wbGV0ZS5jb21wbGV0ZUVycm9yKGUsIHN0YWNrVHJhY2UpOwogICAgfSBlbHNlIHsKICAgICAgX2NvbnRyb2xsZXIuYWRkRXJyb3IoZSwgc3RhY2tUcmFjZSk7CiAgICB9CiAgICBfY2xvc2UoKTsKICB9CgogIHZvaWQgX2Nsb3NlSGFuZGxlcigpIHsKICAgIGlmIChfc3RhdHVzID09IGNvbm5lY3RlZFN0YXR1cykgewogICAgICBpZiAoX2Nsb3NlZFJlYWQpIHJldHVybjsKICAgICAgX3NvY2tldENsb3NlZFJlYWQgPSB0cnVlOwogICAgICBpZiAoX2ZpbHRlclN0YXR1cy5yZWFkRW1wdHkpIHsKICAgICAgICBfY2xvc2VkUmVhZCA9IHRydWU7CiAgICAgICAgX2NvbnRyb2xsZXIuYWRkKFJhd1NvY2tldEV2ZW50LnJlYWRDbG9zZWQpOwogICAgICAgIGlmIChfc29ja2V0Q2xvc2VkV3JpdGUpIHsKICAgICAgICAgIF9jbG9zZSgpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBfc2NoZWR1bGVGaWx0ZXIoKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChfc3RhdHVzID09IGhhbmRzaGFrZVN0YXR1cykgewogICAgICBfc29ja2V0Q2xvc2VkUmVhZCA9IHRydWU7CiAgICAgIGlmIChfZmlsdGVyU3RhdHVzLnJlYWRFbXB0eSkgewogICAgICAgIF9yZXBvcnRFcnJvcigKICAgICAgICAgICAgbmV3IEhhbmRzaGFrZUV4Y2VwdGlvbignQ29ubmVjdGlvbiB0ZXJtaW5hdGVkIGR1cmluZyBoYW5kc2hha2UnKSwKICAgICAgICAgICAgbnVsbCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX3NlY3VyZUhhbmRzaGFrZSgpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIF9zZWN1cmVIYW5kc2hha2UoKSB7CiAgICB0cnkgewogICAgICBfc2VjdXJlRmlsdGVyLmhhbmRzaGFrZSgpOwogICAgICBfZmlsdGVyU3RhdHVzLndyaXRlRW1wdHkgPSBmYWxzZTsKICAgICAgX3JlYWRTb2NrZXQoKTsKICAgICAgX3dyaXRlU29ja2V0KCk7CiAgICAgIF9zY2hlZHVsZUZpbHRlcigpOwogICAgfSBjYXRjaCAoZSwgc3RhY2tUcmFjZSkgewogICAgICBfcmVwb3J0RXJyb3IoZSwgc3RhY2tUcmFjZSk7CiAgICB9CiAgfQoKICB2b2lkIHJlbmVnb3RpYXRlKAogICAgICB7Ym9vbCB1c2VTZXNzaW9uQ2FjaGU6IHRydWUsCiAgICAgIGJvb2wgcmVxdWVzdENsaWVudENlcnRpZmljYXRlOiBmYWxzZSwKICAgICAgYm9vbCByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGU6IGZhbHNlfSkgewogICAgaWYgKF9zdGF0dXMgIT0gY29ubmVjdGVkU3RhdHVzKSB7CiAgICAgIHRocm93IG5ldyBIYW5kc2hha2VFeGNlcHRpb24oCiAgICAgICAgICAiQ2FsbGVkIHJlbmVnb3RpYXRlIG9uIGEgbm9uLWNvbm5lY3RlZCBzb2NrZXQiKTsKICAgIH0KICAgIF9zZWN1cmVGaWx0ZXIucmVuZWdvdGlhdGUoCiAgICAgICAgdXNlU2Vzc2lvbkNhY2hlLCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSk7CiAgICBfc3RhdHVzID0gaGFuZHNoYWtlU3RhdHVzOwogICAgX2ZpbHRlclN0YXR1cy53cml0ZUVtcHR5ID0gZmFsc2U7CiAgICBfc2NoZWR1bGVGaWx0ZXIoKTsKICB9CgogIHZvaWQgX3NlY3VyZUhhbmRzaGFrZUNvbXBsZXRlSGFuZGxlcigpIHsKICAgIF9zdGF0dXMgPSBjb25uZWN0ZWRTdGF0dXM7CiAgICBpZiAoX2Nvbm5lY3RQZW5kaW5nKSB7CiAgICAgIF9jb25uZWN0UGVuZGluZyA9IGZhbHNlOwogICAgICB0cnkgewogICAgICAgIF9zZWxlY3RlZFByb3RvY29sID0gX3NlY3VyZUZpbHRlci5zZWxlY3RlZFByb3RvY29sKCk7CiAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB1c2VyIGNvZGUgdG8gcnVuIHN5bmNocm9ub3VzbHkgaW4gdGhpcyBjYWxsYmFjay4KICAgICAgICBUaW1lci5ydW4oKCkgPT4gX2hhbmRzaGFrZUNvbXBsZXRlLmNvbXBsZXRlKHRoaXMpKTsKICAgICAgfSBjYXRjaCAoZXJyb3IsIHN0YWNrKSB7CiAgICAgICAgX2hhbmRzaGFrZUNvbXBsZXRlLmNvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBfb25QYXVzZVN0YXRlQ2hhbmdlKCkgewogICAgaWYgKF9jb250cm9sbGVyLmlzUGF1c2VkKSB7CiAgICAgIF9wYXVzZUNvdW50Kys7CiAgICB9IGVsc2UgewogICAgICBfcGF1c2VDb3VudC0tOwogICAgICBpZiAoX3BhdXNlQ291bnQgPT0gMCkgewogICAgICAgIF9zY2hlZHVsZVJlYWRFdmVudCgpOwogICAgICAgIF9zZW5kV3JpdGVFdmVudCgpOyAvLyBDYW4gc2VuZCBldmVudCBzeW5jaHJvbm91c2x5LgogICAgICB9CiAgICB9CgogICAgaWYgKCFfc29ja2V0Q2xvc2VkUmVhZCB8fCAhX3NvY2tldENsb3NlZFdyaXRlKSB7CiAgICAgIGlmIChfY29udHJvbGxlci5pc1BhdXNlZCkgewogICAgICAgIF9zb2NrZXRTdWJzY3JpcHRpb24ucGF1c2UoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfc29ja2V0U3Vic2NyaXB0aW9uLnJlc3VtZSgpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIF9vblN1YnNjcmlwdGlvblN0YXRlQ2hhbmdlKCkgewogICAgaWYgKF9jb250cm9sbGVyLmhhc0xpc3RlbmVyKSB7CiAgICAgIC8vIFRPRE8oYWpvaG5zZW4pOiBEbyBzb21ldGhpbmcgaGVyZT8KICAgIH0KICB9CgogIHZvaWQgX3NjaGVkdWxlRmlsdGVyKCkgewogICAgX2ZpbHRlclBlbmRpbmcgPSB0cnVlOwogICAgX3RyeUZpbHRlcigpOwogIH0KCiAgdm9pZCBfdHJ5RmlsdGVyKCkgewogICAgaWYgKF9zdGF0dXMgPT0gY2xvc2VkU3RhdHVzKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChfZmlsdGVyUGVuZGluZyAmJiAhX2ZpbHRlckFjdGl2ZSkgewogICAgICBfZmlsdGVyQWN0aXZlID0gdHJ1ZTsKICAgICAgX2ZpbHRlclBlbmRpbmcgPSBmYWxzZTsKICAgICAgX3B1c2hBbGxGaWx0ZXJTdGFnZXMoKS50aGVuKChzdGF0dXMpIHsKICAgICAgICBfZmlsdGVyU3RhdHVzID0gc3RhdHVzOwogICAgICAgIF9maWx0ZXJBY3RpdmUgPSBmYWxzZTsKICAgICAgICBpZiAoX3N0YXR1cyA9PSBjbG9zZWRTdGF0dXMpIHsKICAgICAgICAgIF9zZWN1cmVGaWx0ZXIuZGVzdHJveSgpOwogICAgICAgICAgX3NlY3VyZUZpbHRlciA9IG51bGw7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIF9zb2NrZXQucmVhZEV2ZW50c0VuYWJsZWQgPSB0cnVlOwogICAgICAgIGlmIChfZmlsdGVyU3RhdHVzLndyaXRlRW1wdHkgJiYgX2Nsb3NlZFdyaXRlICYmICFfc29ja2V0Q2xvc2VkV3JpdGUpIHsKICAgICAgICAgIC8vIENoZWNrcyBmb3IgYW5kIGhhbmRsZXMgYWxsIGNhc2VzIG9mIHBhcnRpYWxseSBjbG9zZWQgc29ja2V0cy4KICAgICAgICAgIHNodXRkb3duKFNvY2tldERpcmVjdGlvbi5zZW5kKTsKICAgICAgICAgIGlmIChfc3RhdHVzID09IGNsb3NlZFN0YXR1cykgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChfZmlsdGVyU3RhdHVzLnJlYWRFbXB0eSAmJiBfc29ja2V0Q2xvc2VkUmVhZCAmJiAhX2Nsb3NlZFJlYWQpIHsKICAgICAgICAgIGlmIChfc3RhdHVzID09IGhhbmRzaGFrZVN0YXR1cykgewogICAgICAgICAgICBfc2VjdXJlRmlsdGVyLmhhbmRzaGFrZSgpOwogICAgICAgICAgICBpZiAoX3N0YXR1cyA9PSBoYW5kc2hha2VTdGF0dXMpIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgSGFuZHNoYWtlRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAnQ29ubmVjdGlvbiB0ZXJtaW5hdGVkIGR1cmluZyBoYW5kc2hha2UnKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgX2Nsb3NlSGFuZGxlcigpOwogICAgICAgIH0KICAgICAgICBpZiAoX3N0YXR1cyA9PSBjbG9zZWRTdGF0dXMpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKF9maWx0ZXJTdGF0dXMucHJvZ3Jlc3MpIHsKICAgICAgICAgIF9maWx0ZXJQZW5kaW5nID0gdHJ1ZTsKICAgICAgICAgIGlmIChfZmlsdGVyU3RhdHVzLndyaXRlRW5jcnlwdGVkTm9Mb25nZXJFbXB0eSkgewogICAgICAgICAgICBfd3JpdGVTb2NrZXQoKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChfZmlsdGVyU3RhdHVzLndyaXRlUGxhaW50ZXh0Tm9Mb25nZXJGdWxsKSB7CiAgICAgICAgICAgIF9zZW5kV3JpdGVFdmVudCgpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKF9maWx0ZXJTdGF0dXMucmVhZEVuY3J5cHRlZE5vTG9uZ2VyRnVsbCkgewogICAgICAgICAgICBfcmVhZFNvY2tldCgpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKF9maWx0ZXJTdGF0dXMucmVhZFBsYWludGV4dE5vTG9uZ2VyRW1wdHkpIHsKICAgICAgICAgICAgX3NjaGVkdWxlUmVhZEV2ZW50KCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoX3N0YXR1cyA9PSBoYW5kc2hha2VTdGF0dXMpIHsKICAgICAgICAgICAgX3NlY3VyZUhhbmRzaGFrZSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBfdHJ5RmlsdGVyKCk7CiAgICAgIH0pLmNhdGNoRXJyb3IoX3JlcG9ydEVycm9yKTsKICAgIH0KICB9CgogIExpc3Q8aW50PiBfcmVhZFNvY2tldE9yQnVmZmVyZWREYXRhKGludCBieXRlcykgewogICAgaWYgKF9idWZmZXJlZERhdGEgIT0gbnVsbCkgewogICAgICBpZiAoYnl0ZXMgPiBfYnVmZmVyZWREYXRhLmxlbmd0aCAtIF9idWZmZXJlZERhdGFJbmRleCkgewogICAgICAgIGJ5dGVzID0gX2J1ZmZlcmVkRGF0YS5sZW5ndGggLSBfYnVmZmVyZWREYXRhSW5kZXg7CiAgICAgIH0KICAgICAgdmFyIHJlc3VsdCA9CiAgICAgICAgICBfYnVmZmVyZWREYXRhLnN1Ymxpc3QoX2J1ZmZlcmVkRGF0YUluZGV4LCBfYnVmZmVyZWREYXRhSW5kZXggKyBieXRlcyk7CiAgICAgIF9idWZmZXJlZERhdGFJbmRleCArPSBieXRlczsKICAgICAgaWYgKF9idWZmZXJlZERhdGEubGVuZ3RoID09IF9idWZmZXJlZERhdGFJbmRleCkgewogICAgICAgIF9idWZmZXJlZERhdGEgPSBudWxsOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9IGVsc2UgaWYgKCFfc29ja2V0Q2xvc2VkUmVhZCkgewogICAgICByZXR1cm4gX3NvY2tldC5yZWFkKGJ5dGVzKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgdm9pZCBfcmVhZFNvY2tldCgpIHsKICAgIGlmIChfc3RhdHVzID09IGNsb3NlZFN0YXR1cykgcmV0dXJuOwogICAgdmFyIGJ1ZmZlciA9IF9zZWN1cmVGaWx0ZXIuYnVmZmVyc1tyZWFkRW5jcnlwdGVkSWRdOwogICAgaWYgKGJ1ZmZlci53cml0ZUZyb21Tb3VyY2UoX3JlYWRTb2NrZXRPckJ1ZmZlcmVkRGF0YSkgPiAwKSB7CiAgICAgIF9maWx0ZXJTdGF0dXMucmVhZEVtcHR5ID0gZmFsc2U7CiAgICB9IGVsc2UgewogICAgICBfc29ja2V0LnJlYWRFdmVudHNFbmFibGVkID0gZmFsc2U7CiAgICB9CiAgfQoKICB2b2lkIF93cml0ZVNvY2tldCgpIHsKICAgIGlmIChfc29ja2V0Q2xvc2VkV3JpdGUpIHJldHVybjsKICAgIHZhciBidWZmZXIgPSBfc2VjdXJlRmlsdGVyLmJ1ZmZlcnNbd3JpdGVFbmNyeXB0ZWRJZF07CiAgICBpZiAoYnVmZmVyLnJlYWRUb1NvY2tldChfc29ja2V0KSkgewogICAgICAvLyBSZXR1cm5zIHRydWUgaWYgYmxvY2tlZAogICAgICBfc29ja2V0LndyaXRlRXZlbnRzRW5hYmxlZCA9IHRydWU7CiAgICB9CiAgfQoKICAvLyBJZiBhIHJlYWQgZXZlbnQgc2hvdWxkIGJlIHNlbnQsIGFkZCBpdCB0byB0aGUgY29udHJvbGxlci4KICBfc2NoZWR1bGVSZWFkRXZlbnQoKSB7CiAgICBpZiAoIV9wZW5kaW5nUmVhZEV2ZW50ICYmCiAgICAgICAgX3JlYWRFdmVudHNFbmFibGVkICYmCiAgICAgICAgX3BhdXNlQ291bnQgPT0gMCAmJgogICAgICAgIF9zZWN1cmVGaWx0ZXIgIT0gbnVsbCAmJgogICAgICAgICFfc2VjdXJlRmlsdGVyLmJ1ZmZlcnNbcmVhZFBsYWludGV4dElkXS5pc0VtcHR5KSB7CiAgICAgIF9wZW5kaW5nUmVhZEV2ZW50ID0gdHJ1ZTsKICAgICAgVGltZXIucnVuKF9zZW5kUmVhZEV2ZW50KTsKICAgIH0KICB9CgogIF9zZW5kUmVhZEV2ZW50KCkgewogICAgX3BlbmRpbmdSZWFkRXZlbnQgPSBmYWxzZTsKICAgIGlmIChfc3RhdHVzICE9IGNsb3NlZFN0YXR1cyAmJgogICAgICAgIF9yZWFkRXZlbnRzRW5hYmxlZCAmJgogICAgICAgIF9wYXVzZUNvdW50ID09IDAgJiYKICAgICAgICBfc2VjdXJlRmlsdGVyICE9IG51bGwgJiYKICAgICAgICAhX3NlY3VyZUZpbHRlci5idWZmZXJzW3JlYWRQbGFpbnRleHRJZF0uaXNFbXB0eSkgewogICAgICBfY29udHJvbGxlci5hZGQoUmF3U29ja2V0RXZlbnQucmVhZCk7CiAgICAgIF9zY2hlZHVsZVJlYWRFdmVudCgpOwogICAgfQogIH0KCiAgLy8gSWYgYSB3cml0ZSBldmVudCBzaG91bGQgYmUgc2VudCwgYWRkIGl0IHRvIHRoZSBjb250cm9sbGVyLgogIF9zZW5kV3JpdGVFdmVudCgpIHsKICAgIGlmICghX2Nsb3NlZFdyaXRlICYmCiAgICAgICAgX3dyaXRlRXZlbnRzRW5hYmxlZCAmJgogICAgICAgIF9wYXVzZUNvdW50ID09IDAgJiYKICAgICAgICBfc2VjdXJlRmlsdGVyICE9IG51bGwgJiYKICAgICAgICBfc2VjdXJlRmlsdGVyLmJ1ZmZlcnNbd3JpdGVQbGFpbnRleHRJZF0uZnJlZSA+IDApIHsKICAgICAgX3dyaXRlRXZlbnRzRW5hYmxlZCA9IGZhbHNlOwogICAgICBfY29udHJvbGxlci5hZGQoUmF3U29ja2V0RXZlbnQud3JpdGUpOwogICAgfQogIH0KCiAgRnV0dXJlPF9GaWx0ZXJTdGF0dXM+IF9wdXNoQWxsRmlsdGVyU3RhZ2VzKCkgewogICAgYm9vbCB3YXNJbkhhbmRzaGFrZSA9IF9zdGF0dXMgIT0gY29ubmVjdGVkU3RhdHVzOwogICAgTGlzdCBhcmdzID0gbmV3IExpc3QoMiArIGJ1ZmZlckNvdW50ICogMik7CiAgICBhcmdzWzBdID0gX3NlY3VyZUZpbHRlci5fcG9pbnRlcigpOwogICAgYXJnc1sxXSA9IHdhc0luSGFuZHNoYWtlOwogICAgdmFyIGJ1ZnMgPSBfc2VjdXJlRmlsdGVyLmJ1ZmZlcnM7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZmZlckNvdW50OyArK2kpIHsKICAgICAgYXJnc1syICogaSArIDJdID0gYnVmc1tpXS5zdGFydDsKICAgICAgYXJnc1syICogaSArIDNdID0gYnVmc1tpXS5lbmQ7CiAgICB9CgogICAgcmV0dXJuIF9JT1NlcnZpY2UuX2Rpc3BhdGNoKF9JT1NlcnZpY2Uuc3NsUHJvY2Vzc0ZpbHRlciwgYXJncykKICAgICAgICAudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKHJlc3BvbnNlLmxlbmd0aCA9PSAyKSB7CiAgICAgICAgaWYgKHdhc0luSGFuZHNoYWtlKSB7CiAgICAgICAgICAvLyBJZiB3ZSdyZSBpbiBoYW5kc2hha2UsIHRocm93IGEgaGFuZHNoYWtlIGVycm9yLgogICAgICAgICAgX3JlcG9ydEVycm9yKAogICAgICAgICAgICAgIG5ldyBIYW5kc2hha2VFeGNlcHRpb24oJyR7cmVzcG9uc2VbMV19IGVycm9yICR7cmVzcG9uc2VbMF19JyksCiAgICAgICAgICAgICAgbnVsbCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIElmIHdlJ3JlIGNvbm5lY3RlZCwgdGhyb3cgYSBUTFMgZXJyb3IuCiAgICAgICAgICBfcmVwb3J0RXJyb3IoCiAgICAgICAgICAgICAgbmV3IFRsc0V4Y2VwdGlvbignJHtyZXNwb25zZVsxXX0gZXJyb3IgJHtyZXNwb25zZVswXX0nKSwgbnVsbCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGludCBzdGFydChpbnQgaW5kZXgpID0+IHJlc3BvbnNlWzIgKiBpbmRleF07CiAgICAgIGludCBlbmQoaW50IGluZGV4KSA9PiByZXNwb25zZVsyICogaW5kZXggKyAxXTsKCiAgICAgIF9GaWx0ZXJTdGF0dXMgc3RhdHVzID0gbmV3IF9GaWx0ZXJTdGF0dXMoKTsKICAgICAgLy8gQ29tcHV0ZSB3cml0ZUVtcHR5IGFzICJ3cml0ZSBwbGFpbnRleHQgYnVmZmVyIGFuZCB3cml0ZSBlbmNyeXB0ZWQKICAgICAgLy8gYnVmZmVyIHdlcmUgZW1wdHkgd2hlbiB3ZSBzdGFydGVkIGFuZCBhcmUgZW1wdHkgbm93Ii4KICAgICAgc3RhdHVzLndyaXRlRW1wdHkgPSBidWZzW3dyaXRlUGxhaW50ZXh0SWRdLmlzRW1wdHkgJiYKICAgICAgICAgIHN0YXJ0KHdyaXRlRW5jcnlwdGVkSWQpID09IGVuZCh3cml0ZUVuY3J5cHRlZElkKTsKICAgICAgLy8gSWYgd2Ugd2VyZSBpbiBoYW5kc2hha2Ugd2hlbiB0aGlzIHN0YXJ0ZWQsIF93cml0ZUVtcHR5IG1heSBiZSBmYWxzZQogICAgICAvLyBiZWNhdXNlIHRoZSBoYW5kc2hha2Ugd3JvdGUgZGF0YSBhZnRlciB3ZSBjaGVja2VkLgogICAgICBpZiAod2FzSW5IYW5kc2hha2UpIHN0YXR1cy53cml0ZUVtcHR5ID0gZmFsc2U7CgogICAgICAvLyBDb21wdXRlIHJlYWRFbXB0eSBhcyAiYm90aCByZWFkIGJ1ZmZlcnMgd2VyZSBlbXB0eSB3aGVuIHdlIHN0YXJ0ZWQKICAgICAgLy8gYW5kIGFyZSBlbXB0eSBub3ciLgogICAgICBzdGF0dXMucmVhZEVtcHR5ID0gYnVmc1tyZWFkRW5jcnlwdGVkSWRdLmlzRW1wdHkgJiYKICAgICAgICAgIHN0YXJ0KHJlYWRQbGFpbnRleHRJZCkgPT0gZW5kKHJlYWRQbGFpbnRleHRJZCk7CgogICAgICBfRXh0ZXJuYWxCdWZmZXIgYnVmZmVyID0gYnVmc1t3cml0ZVBsYWludGV4dElkXTsKICAgICAgaW50IG5ld19zdGFydCA9IHN0YXJ0KHdyaXRlUGxhaW50ZXh0SWQpOwogICAgICBpZiAobmV3X3N0YXJ0ICE9IGJ1ZmZlci5zdGFydCkgewogICAgICAgIHN0YXR1cy5wcm9ncmVzcyA9IHRydWU7CiAgICAgICAgaWYgKGJ1ZmZlci5mcmVlID09IDApIHsKICAgICAgICAgIHN0YXR1cy53cml0ZVBsYWludGV4dE5vTG9uZ2VyRnVsbCA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGJ1ZmZlci5zdGFydCA9IG5ld19zdGFydDsKICAgICAgfQogICAgICBidWZmZXIgPSBidWZzW3JlYWRFbmNyeXB0ZWRJZF07CiAgICAgIG5ld19zdGFydCA9IHN0YXJ0KHJlYWRFbmNyeXB0ZWRJZCk7CiAgICAgIGlmIChuZXdfc3RhcnQgIT0gYnVmZmVyLnN0YXJ0KSB7CiAgICAgICAgc3RhdHVzLnByb2dyZXNzID0gdHJ1ZTsKICAgICAgICBpZiAoYnVmZmVyLmZyZWUgPT0gMCkgewogICAgICAgICAgc3RhdHVzLnJlYWRFbmNyeXB0ZWROb0xvbmdlckZ1bGwgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBidWZmZXIuc3RhcnQgPSBuZXdfc3RhcnQ7CiAgICAgIH0KICAgICAgYnVmZmVyID0gYnVmc1t3cml0ZUVuY3J5cHRlZElkXTsKICAgICAgaW50IG5ld19lbmQgPSBlbmQod3JpdGVFbmNyeXB0ZWRJZCk7CiAgICAgIGlmIChuZXdfZW5kICE9IGJ1ZmZlci5lbmQpIHsKICAgICAgICBzdGF0dXMucHJvZ3Jlc3MgPSB0cnVlOwogICAgICAgIGlmIChidWZmZXIubGVuZ3RoID09IDApIHsKICAgICAgICAgIHN0YXR1cy53cml0ZUVuY3J5cHRlZE5vTG9uZ2VyRW1wdHkgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBidWZmZXIuZW5kID0gbmV3X2VuZDsKICAgICAgfQogICAgICBidWZmZXIgPSBidWZzW3JlYWRQbGFpbnRleHRJZF07CiAgICAgIG5ld19lbmQgPSBlbmQocmVhZFBsYWludGV4dElkKTsKICAgICAgaWYgKG5ld19lbmQgIT0gYnVmZmVyLmVuZCkgewogICAgICAgIHN0YXR1cy5wcm9ncmVzcyA9IHRydWU7CiAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPT0gMCkgewogICAgICAgICAgc3RhdHVzLnJlYWRQbGFpbnRleHROb0xvbmdlckVtcHR5ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgYnVmZmVyLmVuZCA9IG5ld19lbmQ7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0YXR1czsKICAgIH0pOwogIH0KfQoKLyoqCiAqIEEgY2lyY3VsYXIgYnVmZmVyIGJhY2tlZCBieSBhbiBleHRlcm5hbCBieXRlIGFycmF5LiAgQWNjZXNzZWQgZnJvbQogKiBib3RoIEMrKyBhbmQgRGFydCBjb2RlIGluIGFuIHVuc3luY2hyb25pemVkIHdheSwgd2l0aCBvbmUgcmVhZGluZwogKiBhbmQgb25lIHdyaXRpbmcuICBBbGwgdXBkYXRlcyB0byBzdGFydCBhbmQgZW5kIGFyZSBkb25lIGJ5IERhcnQgY29kZS4KICovCmNsYXNzIF9FeHRlcm5hbEJ1ZmZlciB7CiAgLy8gVGhpcyB3aWxsIGJlIGFuIEV4dGVybmFsQnl0ZUFycmF5LCBiYWNrZWQgYnkgQyBhbGxvY2F0ZWQgZGF0YS4KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJzZXQiKQogIExpc3Q8aW50PiBkYXRhOwoKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgaW50IHN0YXJ0OwoKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgaW50IGVuZDsKCiAgZmluYWwgc2l6ZTsKCiAgX0V4dGVybmFsQnVmZmVyKHRoaXMuc2l6ZSkgewogICAgc3RhcnQgPSBlbmQgPSBzaXplIH4vIDI7CiAgfQoKICB2b2lkIGFkdmFuY2VTdGFydChpbnQgYnl0ZXMpIHsKICAgIGFzc2VydChzdGFydCA+IGVuZCB8fCBzdGFydCArIGJ5dGVzIDw9IGVuZCk7CiAgICBzdGFydCArPSBieXRlczsKICAgIGlmIChzdGFydCA+PSBzaXplKSB7CiAgICAgIHN0YXJ0IC09IHNpemU7CiAgICAgIGFzc2VydChzdGFydCA8PSBlbmQpOwogICAgICBhc3NlcnQoc3RhcnQgPCBzaXplKTsKICAgIH0KICB9CgogIHZvaWQgYWR2YW5jZUVuZChpbnQgYnl0ZXMpIHsKICAgIGFzc2VydChzdGFydCA8PSBlbmQgfHwgc3RhcnQgPiBlbmQgKyBieXRlcyk7CiAgICBlbmQgKz0gYnl0ZXM7CiAgICBpZiAoZW5kID49IHNpemUpIHsKICAgICAgZW5kIC09IHNpemU7CiAgICAgIGFzc2VydChlbmQgPCBzdGFydCk7CiAgICAgIGFzc2VydChlbmQgPCBzaXplKTsKICAgIH0KICB9CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gZW5kID09IHN0YXJ0OwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBzdGFydCA+IGVuZCA/IHNpemUgKyBlbmQgLSBzdGFydCA6IGVuZCAtIHN0YXJ0OwoKICBpbnQgZ2V0IGxpbmVhckxlbmd0aCA9PiBzdGFydCA+IGVuZCA/IHNpemUgLSBzdGFydCA6IGVuZCAtIHN0YXJ0OwoKICBpbnQgZ2V0IGZyZWUgPT4gc3RhcnQgPiBlbmQgPyBzdGFydCAtIGVuZCAtIDEgOiBzaXplICsgc3RhcnQgLSBlbmQgLSAxOwoKICBpbnQgZ2V0IGxpbmVhckZyZWUgewogICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gc3RhcnQgLSBlbmQgLSAxOwogICAgaWYgKHN0YXJ0ID09IDApIHJldHVybiBzaXplIC0gZW5kIC0gMTsKICAgIHJldHVybiBzaXplIC0gZW5kOwogIH0KCiAgVWludDhMaXN0IHJlYWQoaW50IGJ5dGVzKSB7CiAgICBpZiAoYnl0ZXMgPT0gbnVsbCkgewogICAgICBieXRlcyA9IGxlbmd0aDsKICAgIH0gZWxzZSB7CiAgICAgIGJ5dGVzID0gbWluKGJ5dGVzLCBsZW5ndGgpOwogICAgfQogICAgaWYgKGJ5dGVzID09IDApIHJldHVybiBudWxsOwogICAgVWludDhMaXN0IHJlc3VsdCA9IG5ldyBVaW50OExpc3QoYnl0ZXMpOwogICAgaW50IGJ5dGVzUmVhZCA9IDA7CiAgICAvLyBMb29wIG92ZXIgemVybywgb25lLCBvciB0d28gbGluZWFyIGRhdGEgcmFuZ2VzLgogICAgd2hpbGUgKGJ5dGVzUmVhZCA8IGJ5dGVzKSB7CiAgICAgIGludCB0b1JlYWQgPSBtaW4oYnl0ZXMgLSBieXRlc1JlYWQsIGxpbmVhckxlbmd0aCk7CiAgICAgIHJlc3VsdC5zZXRSYW5nZShieXRlc1JlYWQsIGJ5dGVzUmVhZCArIHRvUmVhZCwgZGF0YSwgc3RhcnQpOwogICAgICBhZHZhbmNlU3RhcnQodG9SZWFkKTsKICAgICAgYnl0ZXNSZWFkICs9IHRvUmVhZDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBpbnQgd3JpdGUoTGlzdDxpbnQ+IGlucHV0RGF0YSwgaW50IG9mZnNldCwgaW50IGJ5dGVzKSB7CiAgICBpZiAoYnl0ZXMgPiBmcmVlKSB7CiAgICAgIGJ5dGVzID0gZnJlZTsKICAgIH0KICAgIGludCB3cml0dGVuID0gMDsKICAgIGludCB0b1dyaXRlID0gbWluKGJ5dGVzLCBsaW5lYXJGcmVlKTsKICAgIC8vIExvb3Agb3ZlciB6ZXJvLCBvbmUsIG9yIHR3byBsaW5lYXIgZGF0YSByYW5nZXMuCiAgICB3aGlsZSAodG9Xcml0ZSA+IDApIHsKICAgICAgZGF0YS5zZXRSYW5nZShlbmQsIGVuZCArIHRvV3JpdGUsIGlucHV0RGF0YSwgb2Zmc2V0KTsKICAgICAgYWR2YW5jZUVuZCh0b1dyaXRlKTsKICAgICAgb2Zmc2V0ICs9IHRvV3JpdGU7CiAgICAgIHdyaXR0ZW4gKz0gdG9Xcml0ZTsKICAgICAgdG9Xcml0ZSA9IG1pbihieXRlcyAtIHdyaXR0ZW4sIGxpbmVhckZyZWUpOwogICAgfQogICAgcmV0dXJuIHdyaXR0ZW47CiAgfQoKICBpbnQgd3JpdGVGcm9tU291cmNlKExpc3Q8aW50PiBnZXREYXRhKGludCByZXF1ZXN0ZWQpKSB7CiAgICBpbnQgd3JpdHRlbiA9IDA7CiAgICBpbnQgdG9Xcml0ZSA9IGxpbmVhckZyZWU7CiAgICAvLyBMb29wIG92ZXIgemVybywgb25lLCBvciB0d28gbGluZWFyIGRhdGEgcmFuZ2VzLgogICAgd2hpbGUgKHRvV3JpdGUgPiAwKSB7CiAgICAgIC8vIFNvdXJjZSByZXR1cm5zIGF0IG1vc3QgdG9Xcml0ZSBieXRlcywgYW5kIGl0IHJldHVybnMgbnVsbCB3aGVuIGVtcHR5LgogICAgICB2YXIgaW5wdXREYXRhID0gZ2V0RGF0YSh0b1dyaXRlKTsKICAgICAgaWYgKGlucHV0RGF0YSA9PSBudWxsIHx8IGlucHV0RGF0YS5sZW5ndGggPT0gMCkgYnJlYWs7CiAgICAgIHZhciBsZW4gPSBpbnB1dERhdGEubGVuZ3RoOwogICAgICBkYXRhLnNldFJhbmdlKGVuZCwgZW5kICsgbGVuLCBpbnB1dERhdGEpOwogICAgICBhZHZhbmNlRW5kKGxlbik7CiAgICAgIHdyaXR0ZW4gKz0gbGVuOwogICAgICB0b1dyaXRlID0gbGluZWFyRnJlZTsKICAgIH0KICAgIHJldHVybiB3cml0dGVuOwogIH0KCiAgYm9vbCByZWFkVG9Tb2NrZXQoUmF3U29ja2V0IHNvY2tldCkgewogICAgLy8gTG9vcCBvdmVyIHplcm8sIG9uZSwgb3IgdHdvIGxpbmVhciBkYXRhIHJhbmdlcy4KICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIHZhciB0b1dyaXRlID0gbGluZWFyTGVuZ3RoOwogICAgICBpZiAodG9Xcml0ZSA9PSAwKSByZXR1cm4gZmFsc2U7CiAgICAgIGludCBieXRlcyA9IHNvY2tldC53cml0ZShkYXRhLCBzdGFydCwgdG9Xcml0ZSk7CiAgICAgIGFkdmFuY2VTdGFydChieXRlcyk7CiAgICAgIGlmIChieXRlcyA8IHRvV3JpdGUpIHsKICAgICAgICAvLyBUaGUgc29ja2V0IGhhcyBibG9ja2VkIHdoaWxlIHdlIGhhdmUgZGF0YSB0byB3cml0ZS4KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogIH0KfQoKYWJzdHJhY3QgY2xhc3MgX1NlY3VyZUZpbHRlciB7CiAgZXh0ZXJuYWwgZmFjdG9yeSBfU2VjdXJlRmlsdGVyLl8oKTsKCiAgdm9pZCBjb25uZWN0KAogICAgICBTdHJpbmcgaG9zdE5hbWUsCiAgICAgIFNlY3VyaXR5Q29udGV4dCBjb250ZXh0LAogICAgICBib29sIGlzX3NlcnZlciwKICAgICAgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsCiAgICAgIGJvb2wgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlLAogICAgICBVaW50OExpc3QgcHJvdG9jb2xzKTsKICB2b2lkIGRlc3Ryb3koKTsKICB2b2lkIGhhbmRzaGFrZSgpOwogIFN0cmluZyBzZWxlY3RlZFByb3RvY29sKCk7CiAgdm9pZCByZWhhbmRzaGFrZSgpOwogIHZvaWQgcmVuZWdvdGlhdGUoYm9vbCB1c2VTZXNzaW9uQ2FjaGUsIGJvb2wgcmVxdWVzdENsaWVudENlcnRpZmljYXRlLAogICAgICBib29sIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSk7CiAgdm9pZCBpbml0KCk7CiAgWDUwOUNlcnRpZmljYXRlIGdldCBwZWVyQ2VydGlmaWNhdGU7CiAgaW50IHByb2Nlc3NCdWZmZXIoaW50IGJ1ZmZlckluZGV4KTsKICB2b2lkIHJlZ2lzdGVyQmFkQ2VydGlmaWNhdGVDYWxsYmFjayhGdW5jdGlvbiBjYWxsYmFjayk7CiAgdm9pZCByZWdpc3RlckhhbmRzaGFrZUNvbXBsZXRlQ2FsbGJhY2soRnVuY3Rpb24gaGFuZHNoYWtlQ29tcGxldGVIYW5kbGVyKTsKCiAgLy8gVGhpcyBjYWxsIG1heSBjYXVzZSBhIHJlZmVyZW5jZSBjb3VudGVkIHBvaW50ZXIgaW4gdGhlIG5hdGl2ZQogIC8vIGltcGxlbWVudGF0aW9uIHRvIGJlIHJldGFpbmVkLiBJdCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgcmVzdWx0aW5nCiAgLy8gdmFsdWUgaXMgcGFzc2VkIHRvIHRoZSBJTyBzZXJ2aWNlIHRocm91Z2ggYSBjYWxsIHRvIGRpc3BhdGNoKCkuCiAgaW50IF9wb2ludGVyKCk7CgogIExpc3Q8X0V4dGVybmFsQnVmZmVyPiBnZXQgYnVmZmVyczsKfQoKLyoqIEEgc2VjdXJlIG5ldHdvcmtpbmcgZXhjZXB0aW9uIGNhdXNlZCBieSBhIGZhaWx1cmUgaW4gdGhlCiAqICBUTFMvU1NMIHByb3RvY29sLgogKi8KY2xhc3MgVGxzRXhjZXB0aW9uIGltcGxlbWVudHMgSU9FeGNlcHRpb24gewogIGZpbmFsIFN0cmluZyB0eXBlOwogIGZpbmFsIFN0cmluZyBtZXNzYWdlOwogIGZpbmFsIE9TRXJyb3Igb3NFcnJvcjsKCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGNvbnN0IFRsc0V4Y2VwdGlvbihbU3RyaW5nIG1lc3NhZ2UgPSAiIiwgT1NFcnJvciBvc0Vycm9yXSkKICAgICAgOiB0aGlzLl8oIlRsc0V4Y2VwdGlvbiIsIG1lc3NhZ2UsIG9zRXJyb3IpOwoKICBjb25zdCBUbHNFeGNlcHRpb24uXyh0aGlzLnR5cGUsIHRoaXMubWVzc2FnZSwgdGhpcy5vc0Vycm9yKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUodHlwZSk7CiAgICBpZiAobWVzc2FnZS5pc05vdEVtcHR5KSB7CiAgICAgIHNiLndyaXRlKCI6ICRtZXNzYWdlIik7CiAgICAgIGlmIChvc0Vycm9yICE9IG51bGwpIHsKICAgICAgICBzYi53cml0ZSgiICgkb3NFcnJvcikiKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChvc0Vycm9yICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoIjogJG9zRXJyb3IiKTsKICAgIH0KICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKLyoqCiAqIEFuIGV4Y2VwdGlvbiB0aGF0IGhhcHBlbnMgaW4gdGhlIGhhbmRzaGFrZSBwaGFzZSBvZiBlc3RhYmxpc2hpbmcKICogYSBzZWN1cmUgbmV0d29yayBjb25uZWN0aW9uLgogKi8KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBIYW5kc2hha2VFeGNlcHRpb24gZXh0ZW5kcyBUbHNFeGNlcHRpb24gewogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBjb25zdCBIYW5kc2hha2VFeGNlcHRpb24oW1N0cmluZyBtZXNzYWdlID0gIiIsIE9TRXJyb3Igb3NFcnJvcl0pCiAgICAgIDogc3VwZXIuXygiSGFuZHNoYWtlRXhjZXB0aW9uIiwgbWVzc2FnZSwgb3NFcnJvcik7Cn0KCi8qKgogKiBBbiBleGNlcHRpb24gdGhhdCBoYXBwZW5zIGluIHRoZSBoYW5kc2hha2UgcGhhc2Ugb2YgZXN0YWJsaXNoaW5nCiAqIGEgc2VjdXJlIG5ldHdvcmsgY29ubmVjdGlvbiwgd2hlbiBsb29raW5nIHVwIG9yIHZlcmlmeWluZyBhCiAqIGNlcnRpZmljYXRlLgogKi8KY2xhc3MgQ2VydGlmaWNhdGVFeGNlcHRpb24gZXh0ZW5kcyBUbHNFeGNlcHRpb24gewogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBjb25zdCBDZXJ0aWZpY2F0ZUV4Y2VwdGlvbihbU3RyaW5nIG1lc3NhZ2UgPSAiIiwgT1NFcnJvciBvc0Vycm9yXSkKICAgICAgOiBzdXBlci5fKCJDZXJ0aWZpY2F0ZUV4Y2VwdGlvbiIsIG1lc3NhZ2UsIG9zRXJyb3IpOwp9CoUpAE5OPAERAQRKQj8UBDA+AQZIRUIFN0dLPwVOSDc8MAVKT0w6BVBQSkoyAQY2IDonGy8eMDQePQQBQ0kVSyA6KjQeMDQbJE4xOQgEAQZEQz9HLwVDPkMcBT8FR0dHGwVKT0w6BUY/REIiBToFBjQNHzo4RC9BThYcLjM9BAEGREM/RzUFQz5FHAVEQ0IeBT8QBQYsLh8sLCpEL1BOJj4+Mz0EAQZFQ0pAPQYnAQZHBU5HKQYfAQZKNgVNPAYUIywuAgEERjo7Tio1RUs9BDYGR0lGBUlRSEdGBU5INzwzBUpPTD0GOSA6JxskPEscHC4zCAQBQ0wVTiA6Ki41SiEeMDUKNDkIBAEGRENCRy8FQ0BAR0QMBUdHRxsFSk9MOgVGP0VCIgU6BQY6OAwfOiomJyVAGhgkGiwxBAEGRENCRzUFQ0ZAR0QMBURDQh4FQhAFBi8xOB4sLComJ0caGRgkJDw8MQQBBko2BU08BhQjLC4BBkhGSkA9BicBBkIFTkcpBh8CAQREJgQaIRwoATAVATESASgWARYVHhwCARZKTlBBKysqLAETAgE2IRMqKicBGUMoKSgpJAE1NCUBFTkpMCI6Gx4hGBsnJyMBISMiFyJPUE5PIVE1Hx8eATccAStCFx8YNx4sLDoqTDUzLhhCBiEVGxcVFBoaJiYeIBwRBAEUFBkWFBQgGiUlHSkwOBQuJicvIkhBGhJNJE4GJignQhs9OA0qGVEIR0xAKzUIGiMgIAYKHUodGBMVQCQdGhUaBgQBTj8XIkkEAR0MGRYlJSM3TQZANkkGID8gPwQBIAE+ASwBGykEARQmDDkEASQkIwQBNEYEARIZGBs1DSEGHx4zHxwGJyQGGRwEAS0tLRsmMCMbFAoIBjAtGiAxIBIIBgQBNgEsIREqBgQBNAErIBoEASE8H04GF0EGJhMGRhcTBAFKNzkfSwY8H04GGE8QBi4SJAESTBcoBhcUBAFIATQBPzAwJyJDBAE2Jy8EATMqBAEuIwQBMAoqGDIZNxkIHiMGBAEYExcEARkUFwQBGCMQBgQBMiMOIkxKSzcNKwYOBAEZJh8gJRw0IhQKDxsILSAlFk4TDxwIBgQBHAohKBUWGR4jBgQBFCMsLyYkOwYfTh8mFwQBKx8bHww+SjwfOAgGBAEfIBUNFR4ePAgGATUiJQ8mCAYEASYjLAYEARsbEgQBFiMOBiwcHi0gHycjIBIKKk9LKikUDApMLCcuLD0ODBsKJxIKJiE7HAw6Hww5Gww6IgwsIAwKFiMGBAEzIT87CBNRIzgeCBUlIg0TBgQBFyk5QScNKQYEARgkOighKQYEAT8ZHh4cITsgIQYEARUfIx4cITssHAYEAUAWGR8cITwjLQYEATE2LygeJiwnJQYBQxsiHj0YTRURNBhOCggzNQEySz88PE08NQFMHTo6ATcvJyAgNAoiCCYqJyAgMwoiCCcrIyAiNQoeCCYmIyAiNAoeCBUIBAIBBEZFSQQYRCMSARwNARwLAQ4BHx0EASExFBkVHBwGBAEfMRIXExsaBgQBJAFEAUQBSgEXLSsXBAEeGRYNIgYhLRc3IDlDHBsGEwQBOhgUBhUqNxo8GxkaMgYUBAE6FR43Gk8oPSIwFxYcBhQEASg3EyImNhsdPxUIBgQCAR8mARAXHxYlJRwSFB0WSCYPJyY6TQFDUEUSASUCAT0WBCwVGBkBHD0yAT8BFioUHh4dIQgiHgYaBAIBBEQgBBowHEM5AgEERD8QBDIcRTsCARpkYXJ0OmlvL3NlY3VyZV9zb2NrZXQuZGFydDRvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW8vc2VjdXJpdHlfY29udGV4dC5kYXJ0q8QvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmlvOwoKLyoqCiAqIFRoZSBvYmplY3QgY29udGFpbmluZyB0aGUgY2VydGlmaWNhdGVzIHRvIHRydXN0IHdoZW4gbWFraW5nCiAqIGEgc2VjdXJlIGNsaWVudCBjb25uZWN0aW9uLCBhbmQgdGhlIGNlcnRpZmljYXRlIGNoYWluIGFuZAogKiBwcml2YXRlIGtleSB0byBzZXJ2ZSBmcm9tIGEgc2VjdXJlIHNlcnZlci4KICoKICogVGhlIFtTZWN1cmVTb2NrZXRdICBhbmQgW1NlY3VyZVNlcnZlclNvY2tldF0gY2xhc3NlcyB0YWtlIGEgU2VjdXJpdHlDb250ZXh0CiAqIGFzIGFuIGFyZ3VtZW50IHRvIHRoZWlyIGNvbm5lY3QgYW5kIGJpbmQgbWV0aG9kcy4KICoKICogQ2VydGlmaWNhdGVzIGFuZCBrZXlzIGNhbiBiZSBhZGRlZCB0byBhIFNlY3VyaXR5Q29udGV4dCBmcm9tIGVpdGhlciBQRU0KICogb3IgUEtDUzEyIGNvbnRhaW5lcnMuCiAqCiAqIGlPUyBub3RlOiBTb21lIG1ldGhvZHMgdG8gYWRkLCByZW1vdmUsIGFuZCBpbnNwZWN0IGNlcnRpZmljYXRlcyBhcmUgbm90IHlldAogKiBpbXBsZW1lbnRlZC4gSG93ZXZlciwgdGhlIHBsYXRmb3JtJ3MgYnVpbHQtaW4gdHJ1c3RlZCBjZXJ0aWZpY2F0ZXMgY2FuCiAqIGJlIHVzZWQsIGJ5IHdheSBvZiBbU2VjdXJpdHlDb250ZXh0LmRlZmF1bHRDb250ZXh0XS4KICovCmFic3RyYWN0IGNsYXNzIFNlY3VyaXR5Q29udGV4dCB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBbU2VjdXJpdHlDb250ZXh0XS4KICAgKgogICAqIEJ5IGRlZmF1bHQsIHRoZSBjcmVhdGVkIFtTZWN1cml0eUNvbnRleHRdIGNvbnRhaW5zIG5vIGtleXMgb3IgY2VydGlmaWNhdGVzLgogICAqIFRoZXNlIGNhbiBiZSBhZGRlZCBieSBjYWxsaW5nIHRoZSBtZXRob2RzIG9mIHRoaXMgY2xhc3MuCiAgICoKICAgKiBJZiBgd2l0aFRydXN0ZWRSb290c2AgaXMgcGFzc2VkIGFzIGB0cnVlYCwgdGhlIFtTZWN1cml0eUNvbnRleHRdIHdpbGwgYmUKICAgKiBzZWVkZWQgYnkgdGhlIHRydXN0ZWQgcm9vdCBjZXJ0aWZpY2F0ZXMgcHJvdmlkZWQgYXMgZXhwbGFpbmVkIGJlbG93LiBUbwogICAqIG9idGFpbiBhIFtTZWN1cml0eUNvbnRleHRdIGNvbnRhaW5pbmcgdHJ1c3RlZCByb290IGNlcnRpZmljYXRlcywKICAgKiBbU2VjdXJpdHlDb250ZXh0LmRlZmF1bHRDb250ZXh0XSBpcyB1c3VhbGx5IHN1ZmZpY2llbnQsIGFuZCBzaG91bGQKICAgKiBiZSB1c2VkIGluc3RlYWQuIEhvd2V2ZXIsIGlmIHRoZSBbU2VjdXJpdHlDb250ZXh0XSBjb250YWluaW5nIHRoZSB0cnVzdGVkCiAgICogcm9vdCBjZXJ0aWZpY2F0ZXMgbXVzdCBiZSBtb2RpZmllZCBwZXItY29ubmVjdGlvbiwgdGhlbiBgd2l0aFRydXN0ZWRSb290c2AKICAgKiBzaG91bGQgYmUgdXNlZC4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IFNlY3VyaXR5Q29udGV4dCh7Ym9vbCB3aXRoVHJ1c3RlZFJvb3RzOiBmYWxzZX0pOwoKICAvKioKICAgKiBTZWN1cmUgbmV0d29ya2luZyBjbGFzc2VzIHdpdGggYW4gb3B0aW9uYWwgYGNvbnRleHRgIHBhcmFtZXRlcgogICAqIHVzZSB0aGUgW2RlZmF1bHRDb250ZXh0XSBvYmplY3QgaWYgdGhlIHBhcmFtZXRlciBpcyBvbWl0dGVkLgogICAqIFRoaXMgb2JqZWN0IGNhbiBhbHNvIGJlIGFjY2Vzc2VkLCBhbmQgbW9kaWZpZWQsIGRpcmVjdGx5LgogICAqIEVhY2ggaXNvbGF0ZSBoYXMgYSBkaWZmZXJlbnQgW2RlZmF1bHRDb250ZXh0XSBvYmplY3QuCiAgICogVGhlIFtkZWZhdWx0Q29udGV4dF0gb2JqZWN0IHVzZXMgYSBsaXN0IG9mIHdlbGwta25vd24gdHJ1c3RlZAogICAqIGNlcnRpZmljYXRlIGF1dGhvcml0aWVzIGFzIGl0cyB0cnVzdGVkIHJvb3RzLiBPbiBMaW51eCBhbmQgV2luZG93cywgdGhpcwogICAqIGxpc3QgaXMgdGFrZW4gZnJvbSBNb3ppbGxhLCB3aG8gbWFpbnRhaW5zIGl0IGFzIHBhcnQgb2YgRmlyZWZveC4gT24sCiAgICogTWFjT1MsIGlPUywgYW5kIEFuZHJvaWQsIHRoaXMgbGlzdCBjb21lcyBmcm9tIHRoZSB0cnVzdGVkIGNlcnRpZmljYXRlcwogICAqIHN0b3JlcyBidWlsdCBpbiB0byB0aGUgcGxhdGZvcm1zLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBTZWN1cml0eUNvbnRleHQgZ2V0IGRlZmF1bHRDb250ZXh0OwoKICAvKioKICAgKiBTZXRzIHRoZSBwcml2YXRlIGtleSBmb3IgYSBzZXJ2ZXIgY2VydGlmaWNhdGUgb3IgY2xpZW50IGNlcnRpZmljYXRlLgogICAqCiAgICogQSBzZWN1cmUgY29ubmVjdGlvbiB1c2luZyB0aGlzIFNlY3VyaXR5Q29udGV4dCB3aWxsIHVzZSB0aGlzIGtleSB3aXRoCiAgICogdGhlIHNlcnZlciBvciBjbGllbnQgY2VydGlmaWNhdGUgdG8gc2lnbiBhbmQgZGVjcnlwdCBtZXNzYWdlcy4KICAgKiBbZmlsZV0gaXMgdGhlIHBhdGggdG8gYSBQRU0gb3IgUEtDUzEyIGZpbGUgY29udGFpbmluZyBhbiBlbmNyeXB0ZWQKICAgKiBwcml2YXRlIGtleSwgZW5jcnlwdGVkIHdpdGggW3Bhc3N3b3JkXS4gQXNzdW1pbmcgaXQgaXMgd2VsbC1mb3JtYXR0ZWQsIGFsbAogICAqIG90aGVyIGNvbnRlbnRzIG9mIFtmaWxlXSBhcmUgaWdub3JlZC4gQW4gdW5lbmNyeXB0ZWQgZmlsZSBjYW4gYmUgdXNlZCwKICAgKiBidXQgdGhpcyBpcyBub3QgdXN1YWwuCiAgICoKICAgKiBOQjogVGhpcyBmdW5jdGlvbiBjYWxscyBbRmlsZS5yZWFkQXNCeXRlc1N5bmNdLCBhbmQgd2lsbCBibG9jayBvbiBmaWxlIElPLgogICAqIFByZWZlciB1c2luZyBbdXNlUHJpdmF0ZUtleUJ5dGVzXS4KICAgKgogICAqIGlPUyBub3RlOiBPbmx5IFBLQ1MxMiBkYXRhIGlzIHN1cHBvcnRlZC4gSXQgc2hvdWxkIGNvbnRhaW4gYm90aCB0aGUgcHJpdmF0ZQogICAqIGtleSBhbmQgdGhlIGNlcnRpZmljYXRlIGNoYWluLiBPbiBpT1Mgb25lIGNhbGwgdG8gW3VzZVByaXZhdGVLZXldIHdpdGggdGhpcwogICAqIGRhdGEgaXMgdXNlZCBpbnN0ZWFkIG9mIHR3byBjYWxscyB0byBbdXNlQ2VydGlmaWNhdGVDaGFpbl0gYW5kCiAgICogW3VzZVByaXZhdGVLZXldLgogICAqLwogIHZvaWQgdXNlUHJpdmF0ZUtleShTdHJpbmcgZmlsZSwge1N0cmluZyBwYXNzd29yZH0pOwoKICAvKioKICAgKiBTZXRzIHRoZSBwcml2YXRlIGtleSBmb3IgYSBzZXJ2ZXIgY2VydGlmaWNhdGUgb3IgY2xpZW50IGNlcnRpZmljYXRlLgogICAqCiAgICogTGlrZSBbdXNlUHJpdmF0ZUtleV0sIGJ1dCB0YWtlcyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgYXMgYSBsaXN0CiAgICogb2YgYnl0ZXMuCiAgICovCiAgdm9pZCB1c2VQcml2YXRlS2V5Qnl0ZXMoTGlzdDxpbnQ+IGtleUJ5dGVzLCB7U3RyaW5nIHBhc3N3b3JkfSk7CgogIC8qKgogICAqIFNldHMgdGhlIHNldCBvZiB0cnVzdGVkIFg1MDkgY2VydGlmaWNhdGVzIHVzZWQgYnkgW1NlY3VyZVNvY2tldF0KICAgKiBjbGllbnQgY29ubmVjdGlvbnMsIHdoZW4gY29ubmVjdGluZyB0byBhIHNlY3VyZSBzZXJ2ZXIuCiAgICoKICAgKiBbZmlsZV0gaXMgdGhlIHBhdGggdG8gYSBQRU0gb3IgUEtDUzEyIGZpbGUgY29udGFpbmluZyBYNTA5IGNlcnRpZmljYXRlcywKICAgKiB1c3VhbGx5IHJvb3QgY2VydGlmaWNhdGVzIGZyb20gY2VydGlmaWNhdGUgYXV0aG9yaXRpZXMuIEZvciBQS0NTMTIgZmlsZXMsCiAgICogW3Bhc3N3b3JkXSBpcyB0aGUgcGFzc3dvcmQgZm9yIHRoZSBmaWxlLiBGb3IgUEVNIGZpbGVzLCBbcGFzc3dvcmRdIGlzCiAgICogaWdub3JlZC4gQXNzdW1pbmcgaXQgaXMgd2VsbC1mb3JtYXR0ZWQsIGFsbCBvdGhlciBjb250ZW50cyBvZiBbZmlsZV0gYXJlCiAgICogaWdub3JlZC4KICAgKgogICAqIE5COiBUaGlzIGZ1bmN0aW9uIGNhbGxzIFtGaWxlLnJlYWRBc0J5dGVzU3luY10sIGFuZCB3aWxsIGJsb2NrIG9uIGZpbGUgSU8uCiAgICogUHJlZmVyIHVzaW5nIFtzZXRUcnVzdGVkQ2VydGlmaWNhdGVzQnl0ZXNdLgogICAqCiAgICogaU9TIG5vdGU6IE9uIGlPUywgdGhpcyBjYWxsIHRha2VzIG9ubHkgdGhlIGJ5dGVzIGZvciBhIHNpbmdsZSBERVIKICAgKiBlbmNvZGVkIFg1MDkgY2VydGlmaWNhdGUuIEl0IG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgdG8gYWRkCiAgICogbXVsdGlwbGUgdHJ1c3RlZCBjZXJ0aWZpY2F0ZXMgdG8gdGhlIGNvbnRleHQuIEEgREVSIGVuY29kZWQgY2VydGlmaWNhdGUKICAgKiBjYW4gYmUgb2J0YWluZWQgZnJvbSBhIFBFTSBlbmNvZGVkIGNlcnRpZmljYXRlIGJ5IHVzaW5nIHRoZSBvcGVuc3NsIHRvb2w6CiAgICoKICAgKiAgICQgb3BlbnNzbCB4NTA5IC1vdXRmb3JtIGRlciAtaW4gY2VydC5wZW0gLW91dCBjZXJ0LmRlcgogICAqLwogIHZvaWQgc2V0VHJ1c3RlZENlcnRpZmljYXRlcyhTdHJpbmcgZmlsZSwge1N0cmluZyBwYXNzd29yZH0pOwoKICAvKioKICAgKiBTZXRzIHRoZSBzZXQgb2YgdHJ1c3RlZCBYNTA5IGNlcnRpZmljYXRlcyB1c2VkIGJ5IFtTZWN1cmVTb2NrZXRdCiAgICogY2xpZW50IGNvbm5lY3Rpb25zLCB3aGVuIGNvbm5lY3RpbmcgdG8gYSBzZWN1cmUgc2VydmVyLgogICAqCiAgICogTGlrZSBbc2V0VHJ1c3RlZENlcnRpZmljYXRlc10gYnV0IHRha2VzIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4KICAgKi8KICB2b2lkIHNldFRydXN0ZWRDZXJ0aWZpY2F0ZXNCeXRlcyhMaXN0PGludD4gY2VydEJ5dGVzLCB7U3RyaW5nIHBhc3N3b3JkfSk7CgogIC8qKgogICAqIFNldHMgdGhlIGNoYWluIG9mIFg1MDkgY2VydGlmaWNhdGVzIHNlcnZlZCBieSBbU2VjdXJlU2VydmVyU29ja2V0XQogICAqIHdoZW4gbWFraW5nIHNlY3VyZSBjb25uZWN0aW9ucywgaW5jbHVkaW5nIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUuCiAgICoKICAgKiBbZmlsZV0gaXMgYSBQRU0gb3IgUEtDUzEyIGZpbGUgY29udGFpbmluZyBYNTA5IGNlcnRpZmljYXRlcywgc3RhcnRpbmcgd2l0aAogICAqIHRoZSByb290IGF1dGhvcml0eSBhbmQgaW50ZXJtZWRpYXRlIGF1dGhvcml0aWVzIGZvcm1pbmcgdGhlIHNpZ25lZAogICAqIGNoYWluIHRvIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUsIGFuZCBlbmRpbmcgd2l0aCB0aGUgc2VydmVyIGNlcnRpZmljYXRlLgogICAqIFRoZSBwcml2YXRlIGtleSBmb3IgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSBpcyBzZXQgYnkgW3VzZVByaXZhdGVLZXldLiBGb3IKICAgKiBQS0NTMTIgZmlsZXMsIFtwYXNzd29yZF0gaXMgdGhlIHBhc3N3b3JkIGZvciB0aGUgZmlsZS4gRm9yIFBFTSBmaWxlcywKICAgKiBbcGFzc3dvcmRdIGlzIGlnbm9yZWQuIEFzc3VtaW5nIGl0IGlzIHdlbGwtZm9ybWF0dGVkLCBhbGwKICAgKiBvdGhlciBjb250ZW50cyBvZiBbZmlsZV0gYXJlIGlnbm9yZWQuCiAgICoKICAgKiBOQjogVGhpcyBmdW5jdGlvbiBjYWxscyBbRmlsZS5yZWFkQXNCeXRlc1N5bmNdLCBhbmQgd2lsbCBibG9jayBvbiBmaWxlIElPLgogICAqIFByZWZlciB1c2luZyBbdXNlQ2VydGlmaWNhdGVDaGFpbkJ5dGVzXS4KICAgKgogICAqIGlPUyBub3RlOiBBcyBub3RlZCBhYm92ZSwgW3VzZVByaXZhdGVLZXldIGRvZXMgdGhlIGpvYiBvZiBib3RoCiAgICogdGhhdCBjYWxsIGFuZCB0aGlzIG9uZS4gT24gaU9TLCB0aGlzIGNhbGwgaXMgYSBuby1vcC4KICAgKi8KICB2b2lkIHVzZUNlcnRpZmljYXRlQ2hhaW4oU3RyaW5nIGZpbGUsIHtTdHJpbmcgcGFzc3dvcmR9KTsKCiAgLyoqCiAgICogU2V0cyB0aGUgY2hhaW4gb2YgWDUwOSBjZXJ0aWZpY2F0ZXMgc2VydmVkIGJ5IFtTZWN1cmVTZXJ2ZXJTb2NrZXRdCiAgICogd2hlbiBtYWtpbmcgc2VjdXJlIGNvbm5lY3Rpb25zLCBpbmNsdWRpbmcgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZS4KICAgKgogICAqIExpa2UgW3VzZUNlcnRpZmljYXRlQ2hhaW5dIGJ1dCB0YWtlcyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUuCiAgICovCiAgdm9pZCB1c2VDZXJ0aWZpY2F0ZUNoYWluQnl0ZXMoTGlzdDxpbnQ+IGNoYWluQnl0ZXMsIHtTdHJpbmcgcGFzc3dvcmR9KTsKCiAgLyoqCiAgICogU2V0cyB0aGUgbGlzdCBvZiBhdXRob3JpdHkgbmFtZXMgdGhhdCBhIFtTZWN1cmVTZXJ2ZXJTb2NrZXRdIHdpbGwgYWR2ZXJ0aXNlCiAgICogYXMgYWNjZXB0ZWQgd2hlbiByZXF1ZXN0aW5nIGEgY2xpZW50IGNlcnRpZmljYXRlIGZyb20gYSBjb25uZWN0aW5nCiAgICogY2xpZW50LgogICAqCiAgICogW2ZpbGVdIGlzIGEgUEVNIG9yIFBLQ1MxMiBmaWxlIGNvbnRhaW5pbmcgdGhlIGFjY2VwdGVkIHNpZ25pbmcKICAgKiBhdXRob3JpdHkgY2VydGlmaWNhdGVzIC0gdGhlIGF1dGhvcml0eSBuYW1lcyBhcmUgZXh0cmFjdGVkIGZyb20gdGhlCiAgICogY2VydGlmaWNhdGVzLiBGb3IgUEtDUzEyIGZpbGVzLCBbcGFzc3dvcmRdIGlzIHRoZSBwYXNzd29yZCBmb3IgdGhlIGZpbGUuCiAgICogRm9yIFBFTSBmaWxlcywgW3Bhc3N3b3JkXSBpcyBpZ25vcmVkLiBBc3N1bWluZyBpdCBpcyB3ZWxsLWZvcm1hdHRlZCwgYWxsCiAgICogb3RoZXIgY29udGVudHMgb2YgW2ZpbGVdIGFyZSBpZ25vcmVkLgogICAqCiAgICogTkI6IFRoaXMgZnVuY3Rpb24gY2FsbHMgW0ZpbGUucmVhZEFzQnl0ZXNTeW5jXSwgYW5kIHdpbGwgYmxvY2sgb24gZmlsZSBJTy4KICAgKiBQcmVmZXIgdXNpbmcgW3NldENsaWVudEF1dGhvcml0aWVzQnl0ZXNdLgogICAqCiAgICogaU9TIG5vdGU6IFRoaXMgY2FsbCBpcyBub3Qgc3VwcG9ydGVkLgogICAqLwogIHZvaWQgc2V0Q2xpZW50QXV0aG9yaXRpZXMoU3RyaW5nIGZpbGUsIHtTdHJpbmcgcGFzc3dvcmR9KTsKCiAgLyoqCiAgICogU2V0cyB0aGUgbGlzdCBvZiBhdXRob3JpdHkgbmFtZXMgdGhhdCBhIFtTZWN1cmVTZXJ2ZXJTb2NrZXRdIHdpbGwgYWR2ZXJ0aXNlCiAgICogYXMgYWNjZXB0ZWQsIHdoZW4gcmVxdWVzdGluZyBhIGNsaWVudCBjZXJ0aWZpY2F0ZSBmcm9tIGEgY29ubmVjdGluZwogICAqIGNsaWVudC4KICAgKgogICAqIExpa2UgW3NldENsaWVudEF1dGhvcml0aWVzXSBidXQgdGFrZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLgogICAqLwogIHZvaWQgc2V0Q2xpZW50QXV0aG9yaXRpZXNCeXRlcyhMaXN0PGludD4gYXV0aENlcnRCeXRlcywge1N0cmluZyBwYXNzd29yZH0pOwoKICAvKioKICAgKiBXaGV0aGVyIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBBTFBOLiBUaGlzIGFsd2F5cyByZXR1cm5zIHRydWUgYW5kIHdpbGwgYmUKICAgKiByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuCiAgICovCiAgQGRlcHJlY2F0ZWQKICBleHRlcm5hbCBzdGF0aWMgYm9vbCBnZXQgYWxwblN1cHBvcnRlZDsKCiAgLyoqCiAgICogU2V0cyB0aGUgbGlzdCBvZiBhcHBsaWNhdGlvbi1sZXZlbCBwcm90b2NvbHMgc3VwcG9ydGVkIGJ5IGEgY2xpZW50CiAgICogY29ubmVjdGlvbiBvciBzZXJ2ZXIgY29ubmVjdGlvbi4gVGhlIEFMUE4gKGFwcGxpY2F0aW9uIGxldmVsIHByb3RvY29sCiAgICogbmVnb3RpYXRpb24pIGV4dGVuc2lvbiB0byBUTFMgYWxsb3dzIGEgY2xpZW50IHRvIHNlbmQgYSBsaXN0IG9mCiAgICogcHJvdG9jb2xzIGluIHRoZSBUTFMgY2xpZW50IGhlbGxvIG1lc3NhZ2UsIGFuZCB0aGUgc2VydmVyIHRvIHBpY2sKICAgKiBvbmUgYW5kIHNlbmQgdGhlIHNlbGVjdGVkIG9uZSBiYWNrIGluIGl0cyBzZXJ2ZXIgaGVsbG8gbWVzc2FnZS4KICAgKgogICAqIFNlcGFyYXRlIGxpc3RzIG9mIHByb3RvY29scyBjYW4gYmUgc2VudCBmb3IgY2xpZW50IGNvbm5lY3Rpb25zIGFuZAogICAqIGZvciBzZXJ2ZXIgY29ubmVjdGlvbnMsIHVzaW5nIHRoZSBzYW1lIFNlY3VyaXR5Q29udGV4dC4gIFRoZSBbaXNTZXJ2ZXJdCiAgICogYm9vbGVhbiBhcmd1bWVudCBzcGVjaWZpZXMgd2hldGhlciB0byBzZXQgdGhlIGxpc3QgZm9yIHNlcnZlciBjb25uZWN0aW9ucwogICAqIG9yIGNsaWVudCBjb25uZWN0aW9ucy4KICAgKi8KICB2b2lkIHNldEFscG5Qcm90b2NvbHMoTGlzdDxTdHJpbmc+IHByb3RvY29scywgYm9vbCBpc1NlcnZlcik7CgogIC8vLyBFbmNvZGVzIGEgc2V0IG9mIHN1cHBvcnRlZCBwcm90b2NvbHMgZm9yIEFMUE4vTlBOIHVzYWdlLgogIC8vLwogIC8vLyBUaGUgYHByb3RvY29sc2AgbGlzdCBpcyBleHBlY3RlZCB0byBjb250YWluIHByb3RvY29scyBpbiBkZXNjZW5kaW5nIG9yZGVyCiAgLy8vIG9mIHByZWZlcmVuY2UuCiAgLy8vCiAgLy8vIFNlZSBSRkMgNzMwMSAoaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzczMDEpIGZvciB0aGUgZW5jb2Rpbmcgb2YKICAvLy8gYExpc3Q8U3RyaW5nPiBwcm90b2NvbHNgOgogIC8vLyAgICAgb3BhcXVlIFByb3RvY29sTmFtZTwxLi4yXjgtMT47CiAgLy8vCiAgLy8vICAgICBzdHJ1Y3QgewogIC8vLyAgICAgICAgIFByb3RvY29sTmFtZSBwcm90b2NvbF9uYW1lX2xpc3Q8Mi4uMl4xNi0xPgogIC8vLyAgICAgfSBQcm90b2NvbE5hbWVMaXN0OwogIC8vLwogIC8vLyBUaGUgZW5jb2Rpbmcgb2YgdGhlIG9wYXF1ZSBgUHJvdG9jb2xOYW1lPGxvd2VyLi51cHBlcj5gIHZlY3RvciBpcwogIC8vLyBkZXNjcmliZWQgaW4gUkZDIDIyNDY6IDQuMyBWZWN0b3JzLgogIC8vLwogIC8vLyBOb3RlOiBFdmVuIHRob3VnaCB0aGlzIGVuY29kaW5nIHNjaGVtZSB3b3VsZCBhbGxvdyBhIHRvdGFsCiAgLy8vIGBQcm90b2NvbE5hbWVMaXN0YCBsZW5ndGggb2YgNjU1MzUsIHRoaXMgbGltaXQgY2Fubm90IGJlIHJlYWNoZWQuIFRlc3RpbmcKICAvLy8gc2hvd2VkIHRoYXQgbW9yZSB0aGFuIH4gMl4xNCAgYnl0ZXMgd2lsbCBmYWlsIHRvIG5lZ290aWF0ZSBhIHByb3RvY29sLgogIC8vLyBXZSB3aWxsIGJlIGNvbnNlcnZhdGl2ZSBhbmQgc3VwcG9ydCBvbmx5IG1lc3NhZ2VzIHVwIHRvICgxPDwxMyktMSBieXRlcy4KICBzdGF0aWMgVWludDhMaXN0IF9wcm90b2NvbHNUb0xlbmd0aEVuY29kaW5nKExpc3Q8U3RyaW5nPiBwcm90b2NvbHMpIHsKICAgIGlmIChwcm90b2NvbHMgPT0gbnVsbCB8fCBwcm90b2NvbHMubGVuZ3RoID09IDApIHsKICAgICAgcmV0dXJuIG5ldyBVaW50OExpc3QoMCk7CiAgICB9CiAgICBpbnQgcHJvdG9jb2xzTGVuZ3RoID0gcHJvdG9jb2xzLmxlbmd0aDsKCiAgICAvLyBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBieXRlcyB3ZSB3aWxsIG5lZWQgaWYgaXQgaXMgQVNDSUkuCiAgICBpbnQgZXhwZWN0ZWRMZW5ndGggPSBwcm90b2NvbHNMZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb3RvY29sc0xlbmd0aDsgaSsrKSB7CiAgICAgIGludCBsZW5ndGggPSBwcm90b2NvbHNbaV0ubGVuZ3RoOwogICAgICBpZiAobGVuZ3RoID4gMCAmJiBsZW5ndGggPD0gMjU1KSB7CiAgICAgICAgZXhwZWN0ZWRMZW5ndGggKz0gbGVuZ3RoOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKAogICAgICAgICAgICAnTGVuZ3RoIG9mIHByb3RvY29sIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAyNTUgKHdhczogJGxlbmd0aCkuJyk7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoZXhwZWN0ZWRMZW5ndGggPj0gKDEgPDwgMTMpKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKAogICAgICAgICAgJ1RoZSBtYXhpbXVtIG1lc3NhZ2UgbGVuZ3RoIHN1cHBvcnRlZCBpcyAyXjEzLTEuJyk7CiAgICB9CgogICAgLy8gVHJ5IGVuY29kaW5nIHRoZSBgTGlzdDxTdHJpbmc+IHByb3RvY29sc2AgYXJyYXkgdXNpbmcgZmFzdCBBU0NJSSBwYXRoLgogICAgdmFyIGJ5dGVzID0gbmV3IFVpbnQ4TGlzdChleHBlY3RlZExlbmd0aCk7CiAgICBpbnQgYnl0ZXNPZmZzZXQgPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcm90b2NvbHNMZW5ndGg7IGkrKykgewogICAgICBTdHJpbmcgcHJvdG8gPSBwcm90b2NvbHNbaV07CgogICAgICAvLyBBZGQgbGVuZ3RoIGJ5dGUuCiAgICAgIGJ5dGVzW2J5dGVzT2Zmc2V0KytdID0gcHJvdG8ubGVuZ3RoOwogICAgICBpbnQgYml0cyA9IDA7CgogICAgICAvLyBBZGQgcHJvdG9jb2wgYnl0ZXMuCiAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcHJvdG8ubGVuZ3RoOyBqKyspIHsKICAgICAgICB2YXIgY2hhciA9IHByb3RvLmNvZGVVbml0QXQoaik7CiAgICAgICAgYml0cyB8PSBjaGFyOwogICAgICAgIGJ5dGVzW2J5dGVzT2Zmc2V0KytdID0gY2hhciAmIDB4ZmY7CiAgICAgIH0KCiAgICAgIC8vIEdvIHNsb3cgY2FzZSBpZiB3ZSBoYXZlIGVuY291bnRlcmVkIGFueXRoaW5nIG5vbi1hc2NpaS4KICAgICAgaWYgKGJpdHMgPiAweDdmKSB7CiAgICAgICAgcmV0dXJuIF9wcm90b2NvbHNUb0xlbmd0aEVuY29kaW5nTm9uQXNjaWlCYWlsb3V0KHByb3RvY29scyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBieXRlczsKICB9CgogIHN0YXRpYyBVaW50OExpc3QgX3Byb3RvY29sc1RvTGVuZ3RoRW5jb2RpbmdOb25Bc2NpaUJhaWxvdXQoCiAgICAgIExpc3Q8U3RyaW5nPiBwcm90b2NvbHMpIHsKICAgIHZvaWQgYWRkUHJvdG9jb2woTGlzdDxpbnQ+IG91dEJ5dGVzLCBTdHJpbmcgcHJvdG9jb2wpIHsKICAgICAgdmFyIHByb3RvY29sQnl0ZXMgPSB1dGY4LmVuY29kZShwcm90b2NvbCk7CiAgICAgIHZhciBsZW4gPSBwcm90b2NvbEJ5dGVzLmxlbmd0aDsKCiAgICAgIGlmIChsZW4gPiAyNTUpIHsKICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigKICAgICAgICAgICAgJ0xlbmd0aCBvZiBwcm90b2NvbCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMjU1ICh3YXM6ICRsZW4pJyk7CiAgICAgIH0KICAgICAgLy8gQWRkIGxlbmd0aCBieXRlLgogICAgICBvdXRCeXRlcy5hZGQobGVuKTsKCiAgICAgIC8vIEFkZCBwcm90b2NvbCBieXRlcy4KICAgICAgb3V0Qnl0ZXMuYWRkQWxsKHByb3RvY29sQnl0ZXMpOwogICAgfQoKICAgIExpc3Q8aW50PiBieXRlcyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm90b2NvbHMubGVuZ3RoOyBpKyspIHsKICAgICAgYWRkUHJvdG9jb2woYnl0ZXMsIHByb3RvY29sc1tpXSk7CiAgICB9CgogICAgaWYgKGJ5dGVzLmxlbmd0aCA+PSAoMSA8PCAxMykpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAnVGhlIG1heGltdW0gbWVzc2FnZSBsZW5ndGggc3VwcG9ydGVkIGlzIDJeMTMtMS4nKTsKICAgIH0KCiAgICByZXR1cm4gbmV3IFVpbnQ4TGlzdC5mcm9tTGlzdChieXRlcyk7CiAgfQp9CoEdAE5OPAERAQQ/PS4DTzUDSxkDT0o4BCEGJgVRPgVOTUZIT1AVBkQBBkRCPztDTkpMJwY2AQZKBUtESFBMHAVQKAVRUUQWBjYBBkoFSA8GQgEGRj0FTk9LTg4FUDEFR0ZNTwU+Bj8BBkY9BUcGTAEGSEcFUEhOT0s/KwVQLgVEOwY8AQZIRwVEBkoBBlFIDQVESU5OKwVQLwUrBj0BBlFJDQVFBk4BBk4iBg4qAQZIS0VHRQVITU8cBkABPwZQFQZNICkGEzkeBkgqBkFQTU9INh8GLAFCKjAoKSIPIU0IBgEnHz4GAU4vGTAjARorFAEdLygWLAgBQRlFCAYSBAE+IDwxJgEXIUkIGhkBHSYGARoxKAYBJR8+BgEqBAIBHWRhcnQ6aW8vc2VjdXJpdHlfY29udGV4dC5kYXJ0Km9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pby9zb2NrZXQuZGFydMAAgNkvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmlvOwoKLyoqCiAqIFtJbnRlcm5ldEFkZHJlc3NUeXBlXSBpcyB0aGUgdHlwZSBhbiBbSW50ZXJuZXRBZGRyZXNzXS4gQ3VycmVudGx5LAogKiBJUCB2ZXJzaW9uIDQgKElQdjQpIGFuZCBJUCB2ZXJzaW9uIDYgKElQdjYpIGFyZSBzdXBwb3J0ZWQuCiAqLwpjbGFzcyBJbnRlcm5ldEFkZHJlc3NUeXBlIHsKICBzdGF0aWMgY29uc3QgSW50ZXJuZXRBZGRyZXNzVHlwZSBJUHY0ID0gY29uc3QgSW50ZXJuZXRBZGRyZXNzVHlwZS5fKDApOwogIHN0YXRpYyBjb25zdCBJbnRlcm5ldEFkZHJlc3NUeXBlIElQdjYgPSBjb25zdCBJbnRlcm5ldEFkZHJlc3NUeXBlLl8oMSk7CiAgc3RhdGljIGNvbnN0IEludGVybmV0QWRkcmVzc1R5cGUgYW55ID0gY29uc3QgSW50ZXJuZXRBZGRyZXNzVHlwZS5fKC0xKTsKCiAgQERlcHJlY2F0ZWQoIlVzZSBJUHY0IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBJbnRlcm5ldEFkZHJlc3NUeXBlIElQX1Y0ID0gSVB2NDsKICBARGVwcmVjYXRlZCgiVXNlIElQdjYgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEludGVybmV0QWRkcmVzc1R5cGUgSVBfVjYgPSBJUHY2OwogIEBEZXByZWNhdGVkKCJVc2UgYW55IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBJbnRlcm5ldEFkZHJlc3NUeXBlIEFOWSA9IGFueTsKCiAgZmluYWwgaW50IF92YWx1ZTsKCiAgY29uc3QgSW50ZXJuZXRBZGRyZXNzVHlwZS5fKHRoaXMuX3ZhbHVlKTsKCiAgZmFjdG9yeSBJbnRlcm5ldEFkZHJlc3NUeXBlLl9mcm9tKGludCB2YWx1ZSkgewogICAgaWYgKHZhbHVlID09IDApIHJldHVybiBJUHY0OwogICAgaWYgKHZhbHVlID09IDEpIHJldHVybiBJUHY2OwogICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkludmFsaWQgdHlwZTogJHZhbHVlIik7CiAgfQoKICAvKioKICAgKiBHZXQgdGhlIG5hbWUgb2YgdGhlIHR5cGUsIGUuZy4gIklQdjQiIG9yICJJUHY2Ii4KICAgKi8KICBTdHJpbmcgZ2V0IG5hbWUgewogICAgc3dpdGNoIChfdmFsdWUpIHsKICAgICAgY2FzZSAtMToKICAgICAgICByZXR1cm4gIkFOWSI7CiAgICAgIGNhc2UgMDoKICAgICAgICByZXR1cm4gIklQdjQiOwogICAgICBjYXNlIDE6CiAgICAgICAgcmV0dXJuICJJUHY2IjsKICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiSW52YWxpZCBJbnRlcm5ldEFkZHJlc3MiKTsKICAgIH0KICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJJbnRlcm5ldEFkZHJlc3NUeXBlOiAkbmFtZSI7Cn0KCi8qKgogKiBBbiBpbnRlcm5ldCBhZGRyZXNzLgogKgogKiBUaGlzIG9iamVjdCBob2xkcyBhbiBpbnRlcm5ldCBhZGRyZXNzLiBJZiB0aGlzIGludGVybmV0IGFkZHJlc3MKICogaXMgdGhlIHJlc3VsdCBvZiBhIEROUyBsb29rdXAsIHRoZSBhZGRyZXNzIGFsc28gaG9sZHMgdGhlIGhvc3RuYW1lCiAqIHVzZWQgdG8gbWFrZSB0aGUgbG9va3VwLgogKiBBbiBJbnRlcm5ldCBhZGRyZXNzIGNvbWJpbmVkIHdpdGggYSBwb3J0IG51bWJlciByZXByZXNlbnRzIGFuCiAqIGVuZHBvaW50IHRvIHdoaWNoIGEgc29ja2V0IGNhbiBjb25uZWN0IG9yIGEgbGlzdGVuaW5nIHNvY2tldCBjYW4KICogYmluZC4KICovCmFic3RyYWN0IGNsYXNzIEludGVybmV0QWRkcmVzcyB7CiAgLyoqCiAgICogSVAgdmVyc2lvbiA0IGxvb3BiYWNrIGFkZHJlc3MuIFVzZSB0aGlzIGFkZHJlc3Mgd2hlbiBsaXN0ZW5pbmcgb24KICAgKiBvciBjb25uZWN0aW5nIHRvIHRoZSBsb29wYmFjayBhZGFwdGVyIHVzaW5nIElQIHZlcnNpb24gNCAoSVB2NCkuCiAgICovCiAgc3RhdGljIEludGVybmV0QWRkcmVzcyBnZXQgbG9vcGJhY2tJUHY0ID0+IExPT1BCQUNLX0lQX1Y0OwogIEBEZXByZWNhdGVkKCJVc2UgbG9vcGJhY2tJUHY0IGluc3RlYWQiKQogIGV4dGVybmFsIHN0YXRpYyBJbnRlcm5ldEFkZHJlc3MgZ2V0IExPT1BCQUNLX0lQX1Y0OwoKICAvKioKICAgKiBJUCB2ZXJzaW9uIDYgbG9vcGJhY2sgYWRkcmVzcy4gVXNlIHRoaXMgYWRkcmVzcyB3aGVuIGxpc3RlbmluZyBvbgogICAqIG9yIGNvbm5lY3RpbmcgdG8gdGhlIGxvb3BiYWNrIGFkYXB0ZXIgdXNpbmcgSVAgdmVyc2lvbiA2IChJUHY2KS4KICAgKi8KICBzdGF0aWMgSW50ZXJuZXRBZGRyZXNzIGdldCBsb29wYmFja0lQdjYgPT4gTE9PUEJBQ0tfSVBfVjY7CiAgQERlcHJlY2F0ZWQoIlVzZSBsb29wYmFja0lQdjYgaW5zdGVhZCIpCiAgZXh0ZXJuYWwgc3RhdGljIEludGVybmV0QWRkcmVzcyBnZXQgTE9PUEJBQ0tfSVBfVjY7CgogIC8qKgogICAqIElQIHZlcnNpb24gNCBhbnkgYWRkcmVzcy4gVXNlIHRoaXMgYWRkcmVzcyB3aGVuIGxpc3RlbmluZyBvbgogICAqIGFsbCBhZGFwdGVycyBJUCBhZGRyZXNzZXMgdXNpbmcgSVAgdmVyc2lvbiA0IChJUHY0KS4KICAgKi8KICBzdGF0aWMgSW50ZXJuZXRBZGRyZXNzIGdldCBhbnlJUHY0ID0+IEFOWV9JUF9WNDsKICBARGVwcmVjYXRlZCgiVXNlIGFueUlQdjQgaW5zdGVhZCIpCiAgZXh0ZXJuYWwgc3RhdGljIEludGVybmV0QWRkcmVzcyBnZXQgQU5ZX0lQX1Y0OwoKICAvKioKICAgKiBJUCB2ZXJzaW9uIDYgYW55IGFkZHJlc3MuIFVzZSB0aGlzIGFkZHJlc3Mgd2hlbiBsaXN0ZW5pbmcgb24KICAgKiBhbGwgYWRhcHRlcnMgSVAgYWRkcmVzc2VzIHVzaW5nIElQIHZlcnNpb24gNiAoSVB2NikuCiAgICovCiAgc3RhdGljIEludGVybmV0QWRkcmVzcyBnZXQgYW55SVB2NiA9PiBBTllfSVBfVjY7CiAgQERlcHJlY2F0ZWQoIlVzZSBhbnlJUHY2IGluc3RlYWQiKQogIGV4dGVybmFsIHN0YXRpYyBJbnRlcm5ldEFkZHJlc3MgZ2V0IEFOWV9JUF9WNjsKCiAgLyoqCiAgICogVGhlIFt0eXBlXSBvZiB0aGUgW0ludGVybmV0QWRkcmVzc10gc3BlY2lmaWVkIHdoYXQgSVAgcHJvdG9jb2wuCiAgICovCiAgSW50ZXJuZXRBZGRyZXNzVHlwZSBnZXQgdHlwZTsKCiAgLyoqCiAgICogVGhlIG51bWVyaWMgYWRkcmVzcyBvZiB0aGUgaG9zdC4gRm9yIElQdjQgYWRkcmVzc2VzIHRoaXMgaXMgdXNpbmcKICAgKiB0aGUgZG90dGVkLWRlY2ltYWwgbm90YXRpb24uIEZvciBJUHY2IGl0IGlzIHVzaW5nIHRoZQogICAqIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLgogICAqLwogIFN0cmluZyBnZXQgYWRkcmVzczsKCiAgLyoqCiAgICogVGhlIGhvc3QgdXNlZCB0byBsb29rdXAgdGhlIGFkZHJlc3MuIElmIHRoZXJlIGlzIG5vIGhvc3QKICAgKiBhc3NvY2lhdGVkIHdpdGggdGhlIGFkZHJlc3MgdGhpcyByZXR1cm5zIHRoZSBudW1lcmljIGFkZHJlc3MuCiAgICovCiAgU3RyaW5nIGdldCBob3N0OwoKICAvKioKICAgKiBHZXQgdGhlIHJhdyBhZGRyZXNzIG9mIHRoaXMgW0ludGVybmV0QWRkcmVzc10uIFRoZSByZXN1bHQgaXMgZWl0aGVyIGEKICAgKiA0IG9yIDE2IGJ5dGUgbG9uZyBsaXN0LiBUaGUgcmV0dXJuZWQgbGlzdCBpcyBhIGNvcHksIG1ha2luZyBpdCBwb3NzaWJsZQogICAqIHRvIGNoYW5nZSB0aGUgbGlzdCB3aXRob3V0IG1vZGlmeWluZyB0aGUgW0ludGVybmV0QWRkcmVzc10uCiAgICovCiAgVWludDhMaXN0IGdldCByYXdBZGRyZXNzOwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIFtJbnRlcm5ldEFkZHJlc3NdIGlzIGEgbG9vcGJhY2sgYWRkcmVzcy4KICAgKi8KICBib29sIGdldCBpc0xvb3BiYWNrOwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIFtJbnRlcm5ldEFkZHJlc3NdcyBzY29wZSBpcyBhIGxpbmstbG9jYWwuCiAgICovCiAgYm9vbCBnZXQgaXNMaW5rTG9jYWw7CgogIC8qKgogICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgW0ludGVybmV0QWRkcmVzc11zIHNjb3BlIGlzIG11bHRpY2FzdC4KICAgKi8KICBib29sIGdldCBpc011bHRpY2FzdDsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBbSW50ZXJuZXRBZGRyZXNzXSBmcm9tIGEgbnVtZXJpYyBhZGRyZXNzLgogICAqCiAgICogSWYgdGhlIGFkZHJlc3MgaW4gW2FkZHJlc3NdIGlzIG5vdCBhIG51bWVyaWMgSVB2NAogICAqIChkb3R0ZWQtZGVjaW1hbCBub3RhdGlvbikgb3IgSVB2NiAoaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24pLgogICAqIGFkZHJlc3MgW0FyZ3VtZW50RXJyb3JdIGlzIHRocm93bi4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IEludGVybmV0QWRkcmVzcyhTdHJpbmcgYWRkcmVzcyk7CgogIC8qKgogICAqIFBlcmZvcm0gYSByZXZlcnNlIGRucyBsb29rdXAgb24gdGhlIFthZGRyZXNzXSwgY3JlYXRpbmcgYSBuZXcKICAgKiBbSW50ZXJuZXRBZGRyZXNzXSB3aGVyZSB0aGUgaG9zdCBmaWVsZCBzZXQgdG8gdGhlIHJlc3VsdC4KICAgKi8KICBGdXR1cmU8SW50ZXJuZXRBZGRyZXNzPiByZXZlcnNlKCk7CgogIC8qKgogICAqIExvb2t1cCBhIGhvc3QsIHJldHVybmluZyBhIEZ1dHVyZSBvZiBhIGxpc3Qgb2YKICAgKiBbSW50ZXJuZXRBZGRyZXNzXXMuIElmIFt0eXBlXSBpcyBbSW50ZXJuZXRBZGRyZXNzVHlwZS5BTlldLCBpdAogICAqIHdpbGwgbG9va3VwIGJvdGggSVAgdmVyc2lvbiA0IChJUHY0KSBhbmQgSVAgdmVyc2lvbiA2IChJUHY2KQogICAqIGFkZHJlc3Nlcy4gSWYgW3R5cGVdIGlzIGVpdGhlciBbSW50ZXJuZXRBZGRyZXNzVHlwZS5JUHY0XSBvcgogICAqIFtJbnRlcm5ldEFkZHJlc3NUeXBlLklQdjZdIGl0IHdpbGwgb25seSBsb29rdXAgYWRkcmVzc2VzIG9mIHRoZQogICAqIHNwZWNpZmllZCB0eXBlLiBUaGUgb3JkZXIgb2YgdGhlIGxpc3QgY2FuLCBhbmQgbW9zdCBsaWtlbHkgd2lsbCwKICAgKiBjaGFuZ2Ugb3ZlciB0aW1lLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBGdXR1cmU8TGlzdDxJbnRlcm5ldEFkZHJlc3M+PiBsb29rdXAoU3RyaW5nIGhvc3QsCiAgICAgIHtJbnRlcm5ldEFkZHJlc3NUeXBlIHR5cGU6IEludGVybmV0QWRkcmVzc1R5cGUuYW55fSk7CgogIC8qKgogICAqIENsb25lcyB0aGUgZ2l2ZW4gW2FkZHJlc3NdIHdpdGggdGhlIG5ldyBbaG9zdF0uCiAgICoKICAgKiBUaGUgW2FkZHJlc3NdIG11c3QgYmUgYW4gW0ludGVybmV0QWRkcmVzc10gdGhhdCB3YXMgY3JlYXRlZCB3aXRoIG9uZQogICAqIG9mIHRoZSBzdGF0aWMgbWV0aG9kcyBvZiB0aGlzIGNsYXNzLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBJbnRlcm5ldEFkZHJlc3MgX2Nsb25lV2l0aE5ld0hvc3QoCiAgICAgIEludGVybmV0QWRkcmVzcyBhZGRyZXNzLCBTdHJpbmcgaG9zdCk7Cn0KCi8qKgogKiBBIFtOZXR3b3JrSW50ZXJmYWNlXSByZXByZXNlbnRzIGFuIGFjdGl2ZSBuZXR3b3JrIGludGVyZmFjZSBvbiB0aGUgY3VycmVudAogKiBzeXN0ZW0uIEl0IGNvbnRhaW5zIGEgbGlzdCBvZiBbSW50ZXJuZXRBZGRyZXNzXWVzIHRoYXQgYXJlIGJvdW5kIHRvIHRoZQogKiBpbnRlcmZhY2UuCiAqLwphYnN0cmFjdCBjbGFzcyBOZXR3b3JrSW50ZXJmYWNlIHsKICAvKioKICAgKiBHZXQgdGhlIG5hbWUgb2YgdGhlIFtOZXR3b3JrSW50ZXJmYWNlXS4KICAgKi8KICBTdHJpbmcgZ2V0IG5hbWU7CgogIC8qKgogICAqIEdldCB0aGUgaW5kZXggb2YgdGhlIFtOZXR3b3JrSW50ZXJmYWNlXS4KICAgKi8KICBpbnQgZ2V0IGluZGV4OwoKICAvKioKICAgKiBHZXQgYSBsaXN0IG9mIFtJbnRlcm5ldEFkZHJlc3NdZXMgY3VycmVudGx5IGJvdW5kIHRvIHRoaXMKICAgKiBbTmV0d29ya0ludGVyZmFjZV0uCiAgICovCiAgTGlzdDxJbnRlcm5ldEFkZHJlc3M+IGdldCBhZGRyZXNzZXM7CgogIC8qKgogICAqIFdoZXRoZXIgW2xpc3RdIGlzIHN1cHBvcnRlZC4KICAgKgogICAqIFtsaXN0XSBpcyBjdXJyZW50bHkgdW5zdXBwb3J0ZWQgb24gQW5kcm9pZC4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgYm9vbCBnZXQgbGlzdFN1cHBvcnRlZDsKCiAgLyoqCiAgICogUXVlcnkgdGhlIHN5c3RlbSBmb3IgW05ldHdvcmtJbnRlcmZhY2Vdcy4KICAgKgogICAqIElmIFtpbmNsdWRlTG9vcGJhY2tdIGlzIGB0cnVlYCwgdGhlIHJldHVybmVkIGxpc3Qgd2lsbCBpbmNsdWRlIHRoZQogICAqIGxvb3BiYWNrIGRldmljZS4gRGVmYXVsdCBpcyBgZmFsc2VgLgogICAqCiAgICogSWYgW2luY2x1ZGVMaW5rTG9jYWxdIGlzIGB0cnVlYCwgdGhlIGxpc3Qgb2YgYWRkcmVzc2VzIG9mIHRoZSByZXR1cm5lZAogICAqIFtOZXR3b3JrSW50ZXJmYWNlXXMsIG1heSBpbmNsdWRlIGxpbmsgbG9jYWwgYWRkcmVzc2VzLiBEZWZhdWx0IGlzIGBmYWxzZWAuCiAgICoKICAgKiBJZiBbdHlwZV0gaXMgZWl0aGVyIFtJbnRlcm5ldEFkZHJlc3NUeXBlLklQdjRdIG9yCiAgICogW0ludGVybmV0QWRkcmVzc1R5cGUuSVB2Nl0gaXQgd2lsbCBvbmx5IGxvb2t1cCBhZGRyZXNzZXMgb2YgdGhlCiAgICogc3BlY2lmaWVkIHR5cGUuIERlZmF1bHQgaXMgW0ludGVybmV0QWRkcmVzc1R5cGUuYW55XS4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgRnV0dXJlPExpc3Q8TmV0d29ya0ludGVyZmFjZT4+IGxpc3QoCiAgICAgIHtib29sIGluY2x1ZGVMb29wYmFjazogZmFsc2UsCiAgICAgIGJvb2wgaW5jbHVkZUxpbmtMb2NhbDogZmFsc2UsCiAgICAgIEludGVybmV0QWRkcmVzc1R5cGUgdHlwZTogSW50ZXJuZXRBZGRyZXNzVHlwZS5hbnl9KTsKfQoKLyoqCiAqIEEgW1Jhd1NlcnZlclNvY2tldF0gcmVwcmVzZW50cyBhIGxpc3RlbmluZyBzb2NrZXQsIGFuZCBwcm92aWRlcyBhCiAqIHN0cmVhbSBvZiBsb3ctbGV2ZWwgW1Jhd1NvY2tldF0gb2JqZWN0cywgb25lIGZvciBlYWNoIGNvbm5lY3Rpb24KICogbWFkZSB0byB0aGUgbGlzdGVuaW5nIHNvY2tldC4KICoKICogU2VlIFtSYXdTb2NrZXRdIGZvciBtb3JlIGluZm8uCiAqLwphYnN0cmFjdCBjbGFzcyBSYXdTZXJ2ZXJTb2NrZXQgaW1wbGVtZW50cyBTdHJlYW08UmF3U29ja2V0PiB7CiAgLyoqCiAgICogUmV0dXJucyBhIGZ1dHVyZSBmb3IgYSBbOlJhd1NlcnZlclNvY2tldDpdLiBXaGVuIHRoZSBmdXR1cmUKICAgKiBjb21wbGV0ZXMgdGhlIHNlcnZlciBzb2NrZXQgaXMgYm91bmQgdG8gdGhlIGdpdmVuIFthZGRyZXNzXSBhbmQKICAgKiBbcG9ydF0gYW5kIGhhcyBzdGFydGVkIGxpc3RlbmluZyBvbiBpdC4KICAgKgogICAqIFRoZSBbYWRkcmVzc10gY2FuIGVpdGhlciBiZSBhIFtTdHJpbmddIG9yIGFuCiAgICogW0ludGVybmV0QWRkcmVzc10uIElmIFthZGRyZXNzXSBpcyBhIFtTdHJpbmddLCBbYmluZF0gd2lsbAogICAqIHBlcmZvcm0gYSBbSW50ZXJuZXRBZGRyZXNzLmxvb2t1cF0gYW5kIHVzZSB0aGUgZmlyc3QgdmFsdWUgaW4gdGhlCiAgICogbGlzdC4gVG8gbGlzdGVuIG9uIHRoZSBsb29wYmFjayBhZGFwdGVyLCB3aGljaCB3aWxsIGFsbG93IG9ubHkKICAgKiBpbmNvbWluZyBjb25uZWN0aW9ucyBmcm9tIHRoZSBsb2NhbCBob3N0LCB1c2UgdGhlIHZhbHVlCiAgICogW0ludGVybmV0QWRkcmVzcy5sb29wYmFja0lQdjRdIG9yCiAgICogW0ludGVybmV0QWRkcmVzcy5sb29wYmFja0lQdjZdLiBUbyBhbGxvdyBmb3IgaW5jb21pbmcKICAgKiBjb25uZWN0aW9uIGZyb20gdGhlIG5ldHdvcmsgdXNlIGVpdGhlciBvbmUgb2YgdGhlIHZhbHVlcwogICAqIFtJbnRlcm5ldEFkZHJlc3MuYW55SVB2NF0gb3IgW0ludGVybmV0QWRkcmVzcy5hbnlJUHY2XSB0bwogICAqIGJpbmQgdG8gYWxsIGludGVyZmFjZXMgb3IgdGhlIElQIGFkZHJlc3Mgb2YgYSBzcGVjaWZpYyBpbnRlcmZhY2UuCiAgICoKICAgKiBJZiBhbiBJUCB2ZXJzaW9uIDYgKElQdjYpIGFkZHJlc3MgaXMgdXNlZCwgYm90aCBJUCB2ZXJzaW9uIDYKICAgKiAoSVB2NikgYW5kIHZlcnNpb24gNCAoSVB2NCkgY29ubmVjdGlvbnMgd2lsbCBiZSBhY2NlcHRlZC4gVG8KICAgKiByZXN0cmljdCB0aGlzIHRvIHZlcnNpb24gNiAoSVB2Nikgb25seSwgdXNlIFt2Nk9ubHldIHRvIHNldAogICAqIHZlcnNpb24gNiBvbmx5LgogICAqCiAgICogSWYgW3BvcnRdIGhhcyB0aGUgdmFsdWUgWzowOl0gYW4gZXBoZW1lcmFsIHBvcnQgd2lsbAogICAqIGJlIGNob3NlbiBieSB0aGUgc3lzdGVtLiBUaGUgYWN0dWFsIHBvcnQgdXNlZCBjYW4gYmUgcmV0cmlldmVkCiAgICogdXNpbmcgdGhlIFs6cG9ydDpdIGdldHRlci4KICAgKgogICAqIFRoZSBvcHRpb25hbCBhcmd1bWVudCBbYmFja2xvZ10gY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbGlzdGVuCiAgICogYmFja2xvZyBmb3IgdGhlIHVuZGVybHlpbmcgT1MgbGlzdGVuIHNldHVwLiBJZiBbYmFja2xvZ10gaGFzIHRoZQogICAqIHZhbHVlIG9mIFs6MDpdICh0aGUgZGVmYXVsdCkgYSByZWFzb25hYmxlIHZhbHVlIHdpbGwgYmUgY2hvc2VuIGJ5CiAgICogdGhlIHN5c3RlbS4KICAgKgogICAqIFRoZSBvcHRpb25hbCBhcmd1bWVudCBbc2hhcmVkXSBzcGVjaWZpZXMgd2hldGhlciBhZGRpdGlvbmFsIFJhd1NlcnZlclNvY2tldAogICAqIG9iamVjdHMgY2FuIGJpbmQgdG8gdGhlIHNhbWUgY29tYmluYXRpb24gb2YgYGFkZHJlc3NgLCBgcG9ydGAgYW5kIGB2Nk9ubHlgLgogICAqIElmIGBzaGFyZWRgIGlzIGB0cnVlYCBhbmQgbW9yZSBgUmF3U2VydmVyU29ja2V0YHMgZnJvbSB0aGlzIGlzb2xhdGUgb3IKICAgKiBvdGhlciBpc29sYXRlcyBhcmUgYm91bmQgdG8gdGhlIHBvcnQsIHRoZW4gdGhlIGluY29taW5nIGNvbm5lY3Rpb25zIHdpbGwgYmUKICAgKiBkaXN0cmlidXRlZCBhbW9uZyBhbGwgdGhlIGJvdW5kIGBSYXdTZXJ2ZXJTb2NrZXRgcy4gQ29ubmVjdGlvbnMgY2FuIGJlCiAgICogZGlzdHJpYnV0ZWQgb3ZlciBtdWx0aXBsZSBpc29sYXRlcyB0aGlzIHdheS4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgRnV0dXJlPFJhd1NlcnZlclNvY2tldD4gYmluZChhZGRyZXNzLCBpbnQgcG9ydCwKICAgICAge2ludCBiYWNrbG9nOiAwLCBib29sIHY2T25seTogZmFsc2UsIGJvb2wgc2hhcmVkOiBmYWxzZX0pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBwb3J0IHVzZWQgYnkgdGhpcyBzb2NrZXQuCiAgICovCiAgaW50IGdldCBwb3J0OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBhZGRyZXNzIHVzZWQgYnkgdGhpcyBzb2NrZXQuCiAgICovCiAgSW50ZXJuZXRBZGRyZXNzIGdldCBhZGRyZXNzOwoKICAvKioKICAgKiBDbG9zZXMgdGhlIHNvY2tldC4gVGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMgd2hlbiB0aGUgc29ja2V0CiAgICogaXMgZnVsbHkgY2xvc2VkIGFuZCBpcyBubyBsb25nZXIgYm91bmQuCiAgICovCiAgRnV0dXJlPFJhd1NlcnZlclNvY2tldD4gY2xvc2UoKTsKfQoKLyoqCiAqIEEgW1NlcnZlclNvY2tldF0gcmVwcmVzZW50cyBhIGxpc3RlbmluZyBzb2NrZXQsIGFuZCBwcm92aWRlcyBhCiAqIHN0cmVhbSBvZiBbU29ja2V0XSBvYmplY3RzLCBvbmUgZm9yIGVhY2ggY29ubmVjdGlvbiBtYWRlIHRvIHRoZQogKiBsaXN0ZW5pbmcgc29ja2V0LgogKgogKiBTZWUgW1NvY2tldF0gZm9yIG1vcmUgaW5mby4KICovCmFic3RyYWN0IGNsYXNzIFNlcnZlclNvY2tldCBpbXBsZW1lbnRzIFN0cmVhbTxTb2NrZXQ+IHsKICAvKioKICAgKiBSZXR1cm5zIGEgZnV0dXJlIGZvciBhIFs6U2VydmVyU29ja2V0Ol0uIFdoZW4gdGhlIGZ1dHVyZQogICAqIGNvbXBsZXRlcyB0aGUgc2VydmVyIHNvY2tldCBpcyBib3VuZCB0byB0aGUgZ2l2ZW4gW2FkZHJlc3NdIGFuZAogICAqIFtwb3J0XSBhbmQgaGFzIHN0YXJ0ZWQgbGlzdGVuaW5nIG9uIGl0LgogICAqCiAgICogVGhlIFthZGRyZXNzXSBjYW4gZWl0aGVyIGJlIGEgW1N0cmluZ10gb3IgYW4KICAgKiBbSW50ZXJuZXRBZGRyZXNzXS4gSWYgW2FkZHJlc3NdIGlzIGEgW1N0cmluZ10sIFtiaW5kXSB3aWxsCiAgICogcGVyZm9ybSBhIFtJbnRlcm5ldEFkZHJlc3MubG9va3VwXSBhbmQgdXNlIHRoZSBmaXJzdCB2YWx1ZSBpbiB0aGUKICAgKiBsaXN0LiBUbyBsaXN0ZW4gb24gdGhlIGxvb3BiYWNrIGFkYXB0ZXIsIHdoaWNoIHdpbGwgYWxsb3cgb25seQogICAqIGluY29taW5nIGNvbm5lY3Rpb25zIGZyb20gdGhlIGxvY2FsIGhvc3QsIHVzZSB0aGUgdmFsdWUKICAgKiBbSW50ZXJuZXRBZGRyZXNzLmxvb3BiYWNrSVB2NF0gb3IKICAgKiBbSW50ZXJuZXRBZGRyZXNzLmxvb3BiYWNrSVB2Nl0uIFRvIGFsbG93IGZvciBpbmNvbWluZwogICAqIGNvbm5lY3Rpb24gZnJvbSB0aGUgbmV0d29yayB1c2UgZWl0aGVyIG9uZSBvZiB0aGUgdmFsdWVzCiAgICogW0ludGVybmV0QWRkcmVzcy5hbnlJUHY0XSBvciBbSW50ZXJuZXRBZGRyZXNzLmFueUlQdjZdIHRvCiAgICogYmluZCB0byBhbGwgaW50ZXJmYWNlcyBvciB0aGUgSVAgYWRkcmVzcyBvZiBhIHNwZWNpZmljIGludGVyZmFjZS4KICAgKgogICAqIElmIGFuIElQIHZlcnNpb24gNiAoSVB2NikgYWRkcmVzcyBpcyB1c2VkLCBib3RoIElQIHZlcnNpb24gNgogICAqIChJUHY2KSBhbmQgdmVyc2lvbiA0IChJUHY0KSBjb25uZWN0aW9ucyB3aWxsIGJlIGFjY2VwdGVkLiBUbwogICAqIHJlc3RyaWN0IHRoaXMgdG8gdmVyc2lvbiA2IChJUHY2KSBvbmx5LCB1c2UgW3Y2T25seV0gdG8gc2V0CiAgICogdmVyc2lvbiA2IG9ubHkuCiAgICoKICAgKiBJZiBbcG9ydF0gaGFzIHRoZSB2YWx1ZSBbOjA6XSBhbiBlcGhlbWVyYWwgcG9ydCB3aWxsIGJlIGNob3NlbiBieQogICAqIHRoZSBzeXN0ZW0uIFRoZSBhY3R1YWwgcG9ydCB1c2VkIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgdGhlCiAgICogW3BvcnRdIGdldHRlci4KICAgKgogICAqIFRoZSBvcHRpb25hbCBhcmd1bWVudCBbYmFja2xvZ10gY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbGlzdGVuCiAgICogYmFja2xvZyBmb3IgdGhlIHVuZGVybHlpbmcgT1MgbGlzdGVuIHNldHVwLiBJZiBbYmFja2xvZ10gaGFzIHRoZQogICAqIHZhbHVlIG9mIFs6MDpdICh0aGUgZGVmYXVsdCkgYSByZWFzb25hYmxlIHZhbHVlIHdpbGwgYmUgY2hvc2VuIGJ5CiAgICogdGhlIHN5c3RlbS4KICAgKgogICAqIFRoZSBvcHRpb25hbCBhcmd1bWVudCBbc2hhcmVkXSBzcGVjaWZpZXMgd2hldGhlciBhZGRpdGlvbmFsIFNlcnZlclNvY2tldAogICAqIG9iamVjdHMgY2FuIGJpbmQgdG8gdGhlIHNhbWUgY29tYmluYXRpb24gb2YgYGFkZHJlc3NgLCBgcG9ydGAgYW5kIGB2Nk9ubHlgLgogICAqIElmIGBzaGFyZWRgIGlzIGB0cnVlYCBhbmQgbW9yZSBgU2VydmVyU29ja2V0YHMgZnJvbSB0aGlzIGlzb2xhdGUgb3Igb3RoZXIKICAgKiBpc29sYXRlcyBhcmUgYm91bmQgdG8gdGhlIHBvcnQsIHRoZW4gdGhlIGluY29taW5nIGNvbm5lY3Rpb25zIHdpbGwgYmUKICAgKiBkaXN0cmlidXRlZCBhbW9uZyBhbGwgdGhlIGJvdW5kIGBTZXJ2ZXJTb2NrZXRgcy4gQ29ubmVjdGlvbnMgY2FuIGJlCiAgICogZGlzdHJpYnV0ZWQgb3ZlciBtdWx0aXBsZSBpc29sYXRlcyB0aGlzIHdheS4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgRnV0dXJlPFNlcnZlclNvY2tldD4gYmluZChhZGRyZXNzLCBpbnQgcG9ydCwKICAgICAge2ludCBiYWNrbG9nOiAwLCBib29sIHY2T25seTogZmFsc2UsIGJvb2wgc2hhcmVkOiBmYWxzZX0pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBwb3J0IHVzZWQgYnkgdGhpcyBzb2NrZXQuCiAgICovCiAgaW50IGdldCBwb3J0OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBhZGRyZXNzIHVzZWQgYnkgdGhpcyBzb2NrZXQuCiAgICovCiAgSW50ZXJuZXRBZGRyZXNzIGdldCBhZGRyZXNzOwoKICAvKioKICAgKiBDbG9zZXMgdGhlIHNvY2tldC4gVGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMgd2hlbiB0aGUgc29ja2V0CiAgICogaXMgZnVsbHkgY2xvc2VkIGFuZCBpcyBubyBsb25nZXIgYm91bmQuCiAgICovCiAgRnV0dXJlPFNlcnZlclNvY2tldD4gY2xvc2UoKTsKfQoKLyoqCiAqIFRoZSBbU29ja2V0RGlyZWN0aW9uXSBpcyB1c2VkIGFzIGEgcGFyYW1ldGVyIHRvIFtTb2NrZXQuY2xvc2VdIGFuZAogKiBbUmF3U29ja2V0LmNsb3NlXSB0byBjbG9zZSBhIHNvY2tldCBpbiB0aGUgc3BlY2lmaWVkIGRpcmVjdGlvbihzKS4KICovCmNsYXNzIFNvY2tldERpcmVjdGlvbiB7CiAgc3RhdGljIGNvbnN0IFNvY2tldERpcmVjdGlvbiByZWNlaXZlID0gY29uc3QgU29ja2V0RGlyZWN0aW9uLl8oMCk7CiAgc3RhdGljIGNvbnN0IFNvY2tldERpcmVjdGlvbiBzZW5kID0gY29uc3QgU29ja2V0RGlyZWN0aW9uLl8oMSk7CiAgc3RhdGljIGNvbnN0IFNvY2tldERpcmVjdGlvbiBib3RoID0gY29uc3QgU29ja2V0RGlyZWN0aW9uLl8oMik7CgogIEBEZXByZWNhdGVkKCJVc2UgcmVjZWl2ZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgU29ja2V0RGlyZWN0aW9uIFJFQ0VJVkUgPSByZWNlaXZlOwogIEBEZXByZWNhdGVkKCJVc2Ugc2VuZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgU29ja2V0RGlyZWN0aW9uIFNFTkQgPSBzZW5kOwogIEBEZXByZWNhdGVkKCJVc2UgYm90aCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgU29ja2V0RGlyZWN0aW9uIEJPVEggPSBib3RoOwoKICBmaW5hbCBfdmFsdWU7CgogIGNvbnN0IFNvY2tldERpcmVjdGlvbi5fKHRoaXMuX3ZhbHVlKTsKfQoKLyoqCiAqIFRoZSBbU29ja2V0T3B0aW9uXSBpcyB1c2VkIGFzIGEgcGFyYW1ldGVyIHRvIFtTb2NrZXQuc2V0T3B0aW9uXSBhbmQKICogW1Jhd1NvY2tldC5zZXRPcHRpb25dIHRvIHNldCBjdXN0b21pemUgdGhlIGJlaGF2aW91ciBvZiB0aGUgdW5kZXJseWluZwogKiBzb2NrZXQuCiAqLwpjbGFzcyBTb2NrZXRPcHRpb24gewogIC8qKgogICAqIEVuYWJsZSBvciBkaXNhYmxlIG5vLWRlbGF5IG9uIHRoZSBzb2NrZXQuIElmIHRjcE5vRGVsYXkgaXMgZW5hYmxlZCwgdGhlCiAgICogc29ja2V0IHdpbGwgbm90IGJ1ZmZlciBkYXRhIGludGVybmFsbHksIGJ1dCBpbnN0ZWFkIHdyaXRlIGVhY2ggZGF0YSBjaHVuawogICAqIGFzIGFuIGluZGl2aWR1YWwgVENQIHBhY2tldC4KICAgKgogICAqIHRjcE5vRGVsYXkgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KICAgKi8KICBzdGF0aWMgY29uc3QgU29ja2V0T3B0aW9uIHRjcE5vRGVsYXkgPSBjb25zdCBTb2NrZXRPcHRpb24uXygwKTsKICBARGVwcmVjYXRlZCgiVXNlIHRjcE5vRGVsYXkgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFNvY2tldE9wdGlvbiBUQ1BfTk9ERUxBWSA9IHRjcE5vRGVsYXk7CgogIHN0YXRpYyBjb25zdCBTb2NrZXRPcHRpb24gX2lwTXVsdGljYXN0TG9vcCA9IGNvbnN0IFNvY2tldE9wdGlvbi5fKDEpOwogIHN0YXRpYyBjb25zdCBTb2NrZXRPcHRpb24gX2lwTXVsdGljYXN0SG9wcyA9IGNvbnN0IFNvY2tldE9wdGlvbi5fKDIpOwogIHN0YXRpYyBjb25zdCBTb2NrZXRPcHRpb24gX2lwTXVsdGljYXN0SWYgPSBjb25zdCBTb2NrZXRPcHRpb24uXygzKTsKICBzdGF0aWMgY29uc3QgU29ja2V0T3B0aW9uIF9pcEJyb2FkY2FzdCA9IGNvbnN0IFNvY2tldE9wdGlvbi5fKDQpOwoKICBmaW5hbCBfdmFsdWU7CgogIGNvbnN0IFNvY2tldE9wdGlvbi5fKHRoaXMuX3ZhbHVlKTsKfQoKLy8gTXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCBlbnVtIGluIHNvY2tldC5jYwplbnVtIF9SYXdTb2NrZXRPcHRpb25zIHsKICBTT0xfU09DS0VULCAvLyAwCiAgSVBQUk9UT19JUCwgLy8gMQogIElQX01VTFRJQ0FTVF9JRiwgLy8gMgogIElQUFJPVE9fSVBWNiwgLy8gMwogIElQVjZfTVVMVElDQVNUX0lGLCAvLyA0CiAgSVBQUk9UT19UQ1AsIC8vIDUKICBJUFBST1RPX1VEUCwgLy8gNgp9CgovLy8gVGhlIFtSYXdTb2NrZXRPcHRpb25dIGlzIHVzZWQgYXMgYSBwYXJhbWV0ZXIgdG8gW1NvY2tldC5zZXRSYXdPcHRpb25dIGFuZAovLy8gW1Jhd1NvY2tldC5zZXRSYXdPcHRpb25dIHRvIHNldCBjdXN0b21pemUgdGhlIGJlaGF2aW91ciBvZiB0aGUgdW5kZXJseWluZwovLy8gc29ja2V0LgovLy8KLy8vIEl0IGFsbG93cyBmb3IgZmluZSBncmFpbmVkIGNvbnRyb2wgb2YgdGhlIHNvY2tldCBvcHRpb25zLCBhbmQgaXRzIHZhbHVlcyB3aWxsCi8vLyBiZSBwYXNzZWQgdG8gdGhlIHVuZGVybHlpbmcgcGxhdGZvcm0ncyBpbXBsZW1lbnRhdGlvbiBvZiBzZXRzb2Nrb3B0IGFuZAovLy8gZ2V0c29ja29wdC4KQFNpbmNlKCIyLjIiKQpjbGFzcyBSYXdTb2NrZXRPcHRpb24gewogIC8vLyBDcmVhdGVzIGEgUmF3U29ja2V0T3B0aW9uIGZvciBnZXRSYXdPcHRpb24gYW5kU2V0UmF3T3B0aW9uLgogIC8vLwogIC8vLyBBbGwgYXJndW1lbnRzIGFyZSByZXF1aXJlZCBhbmQgbXVzdCBub3QgYmUgbnVsbC4KICAvLy8KICAvLy8gVGhlIGxldmVsIGFuZCBvcHRpb24gYXJndW1lbnRzIGNvcnJlc3BvbmQgdG8gbGV2ZWwgYW5kIG9wdG5hbWUgYXJndW1lbnRzCiAgLy8vIG9uIHRoZSBnZXQvc2V0c29ja29wdCBuYXRpdmUgY2FsbHMuCiAgLy8vCiAgLy8vIFRoZSB2YWx1ZSBhcmd1bWVudCBhbmQgaXRzIGxlbmd0aCBjb3JyZXNwb25kIHRvIHRoZSBvcHR2YWwgYW5kIGxlbmd0aAogIC8vLyBhcmd1bWVudHMgb24gdGhlIG5hdGl2ZSBjYWxsLgogIC8vLwogIC8vLyBGb3IgYSBbZ2V0UmF3T3B0aW9uXSBjYWxsLCB0aGUgdmFsdWUgcGFyYW1ldGVyIHdpbGwgYmUgdXBkYXRlZCBhZnRlciBhCiAgLy8vIHN1Y2Nlc3NmdWwgY2FsbCAoYWx0aG91Z2ggaXRzIGxlbmd0aCB3aWxsIG5vdCBiZSBjaGFuZ2VkKS4KICAvLy8KICAvLy8gRm9yIGEgW3NldFJhd09wdGlvbl0gY2FsbCwgdGhlIHZhbHVlIHBhcmFtZXRlciB3aWxsIGJlIHVzZWQgc2V0IHRoZQogIC8vLyBvcHRpb24uCiAgY29uc3QgUmF3U29ja2V0T3B0aW9uKHRoaXMubGV2ZWwsIHRoaXMub3B0aW9uLCB0aGlzLnZhbHVlKTsKCiAgLy8vIENvbnZlbmllbmNlIGNvbnN0cnVjdG9yIGZvciBjcmVhdGluZyBhbiBpbnQgYmFzZWQgUmF3U29ja2V0T3B0aW9uLgogIGZhY3RvcnkgUmF3U29ja2V0T3B0aW9uLmZyb21JbnQoaW50IGxldmVsLCBpbnQgb3B0aW9uLCBpbnQgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7CiAgICAgIHZhbHVlID0gMDsKICAgIH0KICAgIGZpbmFsIFVpbnQ4TGlzdCBsaXN0ID0gVWludDhMaXN0KDQpOwogICAgZmluYWwgYnVmZmVyID0gQnl0ZURhdGEudmlldyhsaXN0LmJ1ZmZlcik7CiAgICBidWZmZXIuc2V0SW50MzIoMCwgdmFsdWUpOwogICAgcmV0dXJuIFJhd1NvY2tldE9wdGlvbihsZXZlbCwgb3B0aW9uLCBsaXN0KTsKICB9CgogIC8vLyBDb252ZW5pZW5jZSBjb25zdHJ1Y3RvciBmb3IgY3JlYXRpbmcgYSBib29sIGJhc2VkIFJhd1NvY2tldE9wdGlvbi4KICBmYWN0b3J5IFJhd1NvY2tldE9wdGlvbi5mcm9tQm9vbChpbnQgbGV2ZWwsIGludCBvcHRpb24sIGJvb2wgdmFsdWUpID0+CiAgICAgIFJhd1NvY2tldE9wdGlvbi5mcm9tSW50KGxldmVsLCBvcHRpb24sIHZhbHVlID09IHRydWUgPyAxIDogMCk7CgogIC8vLyBUaGUgbGV2ZWwgZm9yIHRoZSBvcHRpb24gdG8gc2V0IG9yIGdldC4KICAvLy8KICAvLy8gU2VlIGFsc286CiAgLy8vICAgKiBbUmF3U29ja2V0T3B0aW9uLmxldmVsU29ja2V0XQogIC8vLyAgICogW1Jhd1NvY2tldE9wdGlvbi5sZXZlbElQdjRdCiAgLy8vICAgKiBbUmF3U29ja2V0T3B0aW9uLmxldmVsSVB2Nl0KICAvLy8gICAqIFtSYXdTb2NrZXRPcHRpb24ubGV2ZWxUY3BdCiAgLy8vICAgKiBbUmF3U29ja2V0T3B0aW9uLmxldmVsVWRwXQogIGZpbmFsIGludCBsZXZlbDsKCiAgLy8vIFRoZSBvcHRpb24gdG8gc2V0IG9yIGdldC4KICBmaW5hbCBpbnQgb3B0aW9uOwoKICAvLy8gVGhlIHJhdyBkYXRhIHRvIHNldCwgb3IgdGhlIGFycmF5IHRvIHdyaXRlIHRoZSBjdXJyZW50IG9wdGlvbiB2YWx1ZSBpbnRvLgogIC8vLwogIC8vLyBUaGlzIGxpc3QgbXVzdCBiZSB0aGUgY29ycmVjdCBsZW5ndGggZm9yIHRoZSBleHBlY3RlZCBvcHRpb24uIEZvciBtb3N0CiAgLy8vIG9wdGlvbnMgdGhhdCB0YWtlIGludCBvciBib29sIHZhbHVlcywgdGhlIGxlbmd0aCBzaG91bGQgYmUgNC4gRm9yIG9wdGlvbnMKICAvLy8gdGhhdCBleHBlY3QgYSBzdHJ1Y3QgKHN1Y2ggYXMgYW4gaW5fYWRkcl90KSwgdGhlIGxlbmd0aCBzaG91bGQgYmUgdGhlCiAgLy8vIGNvcnJlY3QgbGVuZ3RoIGZvciB0aGF0IHN0cnVjdC4KICBmaW5hbCBVaW50OExpc3QgdmFsdWU7CgogIC8vLyBTb2NrZXQgbGV2ZWwgb3B0aW9uIGZvciBTT0xfU09DS0VULgogIHN0YXRpYyBpbnQgZ2V0IGxldmVsU29ja2V0ID0+CiAgICAgIF9nZXRPcHRpb25WYWx1ZShfUmF3U29ja2V0T3B0aW9ucy5TT0xfU09DS0VULmluZGV4KTsKCiAgLy8vIFNvY2tldCBsZXZlbCBvcHRpb24gZm9yIElQUFJPVE9fSVAuCiAgc3RhdGljIGludCBnZXQgbGV2ZWxJUHY0ID0+CiAgICAgIF9nZXRPcHRpb25WYWx1ZShfUmF3U29ja2V0T3B0aW9ucy5JUFBST1RPX0lQLmluZGV4KTsKCiAgLy8vIFNvY2tldCBvcHRpb24gZm9yIElQX01VTFRJQ0FTVF9JRi4KICBzdGF0aWMgaW50IGdldCBJUHY0TXVsdGljYXN0SW50ZXJmYWNlID0+CiAgICAgIF9nZXRPcHRpb25WYWx1ZShfUmF3U29ja2V0T3B0aW9ucy5JUF9NVUxUSUNBU1RfSUYuaW5kZXgpOwoKICAvLy8gU29ja2V0IGxldmVsIG9wdGlvbiBmb3IgSVBQUk9UT19JUFY2LgogIHN0YXRpYyBpbnQgZ2V0IGxldmVsSVB2NiA9PgogICAgICBfZ2V0T3B0aW9uVmFsdWUoX1Jhd1NvY2tldE9wdGlvbnMuSVBQUk9UT19JUFY2LmluZGV4KTsKCiAgLy8vIFNvY2tldCBvcHRpb24gZm9yIElQVjZfTVVMVElDQVNUX0lGLgogIHN0YXRpYyBpbnQgZ2V0IElQdjZNdWx0aWNhc3RJbnRlcmZhY2UgPT4KICAgICAgX2dldE9wdGlvblZhbHVlKF9SYXdTb2NrZXRPcHRpb25zLklQVjZfTVVMVElDQVNUX0lGLmluZGV4KTsKCiAgLy8vIFNvY2tldCBsZXZlbCBvcHRpb24gZm9yIElQUFJPVE9fVENQLgogIHN0YXRpYyBpbnQgZ2V0IGxldmVsVGNwID0+CiAgICAgIF9nZXRPcHRpb25WYWx1ZShfUmF3U29ja2V0T3B0aW9ucy5JUFBST1RPX1RDUC5pbmRleCk7CgogIC8vLyBTb2NrZXQgbGV2ZWwgb3B0aW9uIGZvciBJUFBST1RPX1VEUC4KICBzdGF0aWMgaW50IGdldCBsZXZlbFVkcCA9PgogICAgICBfZ2V0T3B0aW9uVmFsdWUoX1Jhd1NvY2tldE9wdGlvbnMuSVBQUk9UT19VRFAuaW5kZXgpOwoKICBleHRlcm5hbCBzdGF0aWMgaW50IF9nZXRPcHRpb25WYWx1ZShpbnQga2V5KTsKfQoKLyoqCiAqIEV2ZW50cyBmb3IgdGhlIFtSYXdTb2NrZXRdLgogKi8KY2xhc3MgUmF3U29ja2V0RXZlbnQgewogIHN0YXRpYyBjb25zdCBSYXdTb2NrZXRFdmVudCByZWFkID0gY29uc3QgUmF3U29ja2V0RXZlbnQuXygwKTsKICBzdGF0aWMgY29uc3QgUmF3U29ja2V0RXZlbnQgd3JpdGUgPSBjb25zdCBSYXdTb2NrZXRFdmVudC5fKDEpOwogIHN0YXRpYyBjb25zdCBSYXdTb2NrZXRFdmVudCByZWFkQ2xvc2VkID0gY29uc3QgUmF3U29ja2V0RXZlbnQuXygyKTsKICBzdGF0aWMgY29uc3QgUmF3U29ja2V0RXZlbnQgY2xvc2VkID0gY29uc3QgUmF3U29ja2V0RXZlbnQuXygzKTsKCiAgQERlcHJlY2F0ZWQoIlVzZSByZWFkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBSYXdTb2NrZXRFdmVudCBSRUFEID0gcmVhZDsKICBARGVwcmVjYXRlZCgiVXNlIHdyaXRlIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBSYXdTb2NrZXRFdmVudCBXUklURSA9IHdyaXRlOwogIEBEZXByZWNhdGVkKCJVc2UgcmVhZENsb3NlZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUmF3U29ja2V0RXZlbnQgUkVBRF9DTE9TRUQgPSByZWFkQ2xvc2VkOwogIEBEZXByZWNhdGVkKCJVc2UgY2xvc2VkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBSYXdTb2NrZXRFdmVudCBDTE9TRUQgPSBjbG9zZWQ7CgogIGZpbmFsIGludCBfdmFsdWU7CgogIGNvbnN0IFJhd1NvY2tldEV2ZW50Ll8odGhpcy5fdmFsdWUpOwogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiBjb25zdCBbCiAgICAgICdSYXdTb2NrZXRFdmVudC5yZWFkJywKICAgICAgJ1Jhd1NvY2tldEV2ZW50LndyaXRlJywKICAgICAgJ1Jhd1NvY2tldEV2ZW50LnJlYWRDbG9zZWQnLAogICAgICAnUmF3U29ja2V0RXZlbnQuY2xvc2VkJwogICAgXVtfdmFsdWVdOwogIH0KfQoKLy8vIFJldHVybmVkIGJ5IHRoZSBgc3RhcnRDb25uZWN0YCBtZXRob2RzIG9uIGNsaWVudC1zaWRlIHNvY2tldCB0eXBlcyBgU2AsCi8vLyBgQ29ubmVjdGlvblRhc2s8Uz5gIGFsbG93cyBjYW5jZWxsaW5nIGFuIGF0dGVtcHQgdG8gY29ubmVjdCB0byBhIGhvc3QuCmNsYXNzIENvbm5lY3Rpb25UYXNrPFM+IHsKICAvLy8gQSBgRnV0dXJlYCB0aGF0IGNvbXBsZXRlcyB3aXRoIHZhbHVlIHRoYXQgYFMuY29ubmVjdCgpYCB3b3VsZCByZXR1cm4KICAvLy8gdW5sZXNzIFtjYW5jZWxdIGlzIGNhbGxlZCBvbiB0aGlzIFtDb25uZWN0aW9uVGFza10uCiAgLy8vCiAgLy8vIElmIFtjYW5jZWxdIGlzIGNhbGxlZCwgdGhlIGBGdXR1cmVgIGNvbXBsZXRlcyB3aXRoIGEgW1NvY2tldEV4Y2VwdGlvbl0KICAvLy8gZXJyb3Igd2hvc2UgbWVzc2FnZSBpbmRpY2F0ZXMgdGhhdCB0aGUgY29ubmVjdGlvbiBhdHRlbXB0IHdhcyBjYW5jZWxsZWQuCiAgZmluYWwgRnV0dXJlPFM+IHNvY2tldDsKICBmaW5hbCB2b2lkIEZ1bmN0aW9uKCkgX29uQ2FuY2VsOwoKICBDb25uZWN0aW9uVGFzay5fKHtGdXR1cmU8Uz4gc29ja2V0LCB2b2lkIEZ1bmN0aW9uKCkgb25DYW5jZWx9KQogICAgICA6IGFzc2VydChzb2NrZXQgIT0gbnVsbCksCiAgICAgICAgYXNzZXJ0KG9uQ2FuY2VsICE9IG51bGwpLAogICAgICAgIHRoaXMuc29ja2V0ID0gc29ja2V0LAogICAgICAgIHRoaXMuX29uQ2FuY2VsID0gb25DYW5jZWw7CgogIC8vLyBDYW5jZWxzIHRoZSBjb25uZWN0aW9uIGF0dGVtcHQuCiAgLy8vCiAgLy8vIFRoaXMgYWxzbyBjYXVzZXMgdGhlIFtzb2NrZXRdIGBGdXR1cmVgIHRvIGNvbXBsZXRlIHdpdGggYQogIC8vLyBbU29ja2V0RXhjZXB0aW9uXSBlcnJvci4KICB2b2lkIGNhbmNlbCgpIHsKICAgIF9vbkNhbmNlbCgpOwogIH0KfQoKLyoqCiAqIEEgW1Jhd1NvY2tldF0gaXMgYW4gdW5idWZmZXJlZCBpbnRlcmZhY2UgdG8gYSBUQ1Agc29ja2V0LgogKgogKiBUaGUgcmF3IHNvY2tldCBkZWxpdmVycyB0aGUgZGF0YSBzdHJlYW0gaW4gdGhlIHNhbWUgY2h1bmtzIGFzIHRoZSB1bmRlcmx5aW5nCiAqIG9wZXJhdGluZyBzeXN0ZW0uCiAqCiAqIEl0IGlzIG5vdCB0aGUgc2FtZSBhcyBhCiAqIFtQT1NJWCByYXcgc29ja2V0XShodHRwOi8vbWFuNy5vcmcvbGludXgvbWFuLXBhZ2VzL21hbjcvcmF3LjcuaHRtbCkuCiAqLwphYnN0cmFjdCBjbGFzcyBSYXdTb2NrZXQgaW1wbGVtZW50cyBTdHJlYW08UmF3U29ja2V0RXZlbnQ+IHsKICAvKioKICAgKiBTZXQgb3IgZ2V0LCBpZiB0aGUgW1Jhd1NvY2tldF0gc2hvdWxkIGxpc3RlbiBmb3IgW1Jhd1NvY2tldEV2ZW50LnJlYWRdCiAgICogZXZlbnRzLiBEZWZhdWx0IGlzIFs6dHJ1ZTpdLgogICAqLwogIGJvb2wgcmVhZEV2ZW50c0VuYWJsZWQ7CgogIC8qKgogICAqIFNldCBvciBnZXQsIGlmIHRoZSBbUmF3U29ja2V0XSBzaG91bGQgbGlzdGVuIGZvciBbUmF3U29ja2V0RXZlbnQud3JpdGVdCiAgICogZXZlbnRzLiBEZWZhdWx0IGlzIFs6dHJ1ZTpdLgogICAqIFRoaXMgaXMgYSBvbmUtc2hvdCBsaXN0ZW5lciwgYW5kIHdyaXRlRXZlbnRzRW5hYmxlZCBtdXN0IGJlIHNldAogICAqIHRvIHRydWUgYWdhaW4gdG8gcmVjZWl2ZSBhbm90aGVyIHdyaXRlIGV2ZW50LgogICAqLwogIGJvb2wgd3JpdGVFdmVudHNFbmFibGVkOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IHNvY2tldCBjb25uZWN0aW9uIHRvIHRoZSBob3N0IGFuZCBwb3J0IGFuZCByZXR1cm5zIGEgW0Z1dHVyZV0KICAgKiB0aGF0IHdpbGwgY29tcGxldGUgd2l0aCBlaXRoZXIgYSBbUmF3U29ja2V0XSBvbmNlIGNvbm5lY3RlZCBvciBhbiBlcnJvcgogICAqIGlmIHRoZSBob3N0LWxvb2t1cCBvciBjb25uZWN0aW9uIGZhaWxlZC4KICAgKgogICAqIFtob3N0XSBjYW4gZWl0aGVyIGJlIGEgW1N0cmluZ10gb3IgYW4gW0ludGVybmV0QWRkcmVzc10uIElmIFtob3N0XSBpcyBhCiAgICogW1N0cmluZ10sIFtjb25uZWN0XSB3aWxsIHBlcmZvcm0gYSBbSW50ZXJuZXRBZGRyZXNzLmxvb2t1cF0gYW5kIHRyeQogICAqIGFsbCByZXR1cm5lZCBbSW50ZXJuZXRBZGRyZXNzXWVzLCB1bnRpbCBjb25uZWN0ZWQuIFVubGVzcyBhCiAgICogY29ubmVjdGlvbiB3YXMgZXN0YWJsaXNoZWQsIHRoZSBlcnJvciBmcm9tIHRoZSBmaXJzdCBmYWlsaW5nIGNvbm5lY3Rpb24gaXMKICAgKiByZXR1cm5lZC4KICAgKgogICAqIFRoZSBhcmd1bWVudCBbc291cmNlQWRkcmVzc10gY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbG9jYWwKICAgKiBhZGRyZXNzIHRvIGJpbmQgd2hlbiBtYWtpbmcgdGhlIGNvbm5lY3Rpb24uIGBzb3VyY2VBZGRyZXNzYCBjYW4gZWl0aGVyCiAgICogYmUgYSBgU3RyaW5nYCBvciBhbiBgSW50ZXJuZXRBZGRyZXNzYC4gSWYgYSBgU3RyaW5nYCBpcyBwYXNzZWQgaXQgbXVzdAogICAqIGhvbGQgYSBudW1lcmljIElQIGFkZHJlc3MuCiAgICoKICAgKiBUaGUgYXJndW1lbnQgW3RpbWVvdXRdIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgbWF4aW11bSBhbGxvd2VkIHRpbWUgdG8gd2FpdAogICAqIGZvciBhIGNvbm5lY3Rpb24gdG8gYmUgZXN0YWJsaXNoZWQuIElmIFt0aW1lb3V0XSBpcyBsb25nZXIgdGhhbiB0aGUgc3lzdGVtCiAgICogbGV2ZWwgdGltZW91dCBkdXJhdGlvbiwgYSB0aW1lb3V0IG1heSBvY2N1ciBzb29uZXIgdGhhbiBzcGVjaWZpZWQgaW4KICAgKiBbdGltZW91dF0uIE9uIHRpbWVvdXQsIGEgW1NvY2tldEV4Y2VwdGlvbl0gaXMgdGhyb3duIGFuZCBhbGwgb25nb2luZwogICAqIGNvbm5lY3Rpb24gYXR0ZW1wdHMgdG8gW2hvc3RdIGFyZSBjYW5jZWxsZWQuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxSYXdTb2NrZXQ+IGNvbm5lY3QoaG9zdCwgaW50IHBvcnQsCiAgICAgIHtzb3VyY2VBZGRyZXNzLCBEdXJhdGlvbiB0aW1lb3V0fSk7CgogIC8vLyBMaWtlIFtjb25uZWN0XSwgYnV0IHJldHVybnMgYSBbRnV0dXJlXSB0aGF0IGNvbXBsZXRlcyB3aXRoIGEKICAvLy8gW0Nvbm5lY3Rpb25UYXNrXSB0aGF0IGNhbiBiZSBjYW5jZWxsZWQgaWYgdGhlIFtSYXdTb2NrZXRdIGlzIG5vCiAgLy8vIGxvbmdlciBuZWVkZWQuCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxDb25uZWN0aW9uVGFzazxSYXdTb2NrZXQ+PiBzdGFydENvbm5lY3QoaG9zdCwgaW50IHBvcnQsCiAgICAgIHtzb3VyY2VBZGRyZXNzfSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIG51bWJlciBvZiByZWNlaXZlZCBhbmQgbm9uLXJlYWQgYnl0ZXMgaW4gdGhlIHNvY2tldCB0aGF0CiAgICogY2FuIGJlIHJlYWQuCiAgICovCiAgaW50IGF2YWlsYWJsZSgpOwoKICAvKioKICAgKiBSZWFkIHVwIHRvIFtsZW5dIGJ5dGVzIGZyb20gdGhlIHNvY2tldC4gVGhpcyBmdW5jdGlvbiBpcwogICAqIG5vbi1ibG9ja2luZyBhbmQgd2lsbCBvbmx5IHJldHVybiBkYXRhIGlmIGRhdGEgaXMgYXZhaWxhYmxlLiBUaGUKICAgKiBudW1iZXIgb2YgYnl0ZXMgcmVhZCBjYW4gYmUgbGVzcyB0aGVuIFtsZW5dIGlmIGZld2VyIGJ5dGVzIGFyZQogICAqIGF2YWlsYWJsZSBmb3IgaW1tZWRpYXRlIHJlYWRpbmcuIElmIG5vIGRhdGEgaXMgYXZhaWxhYmxlIFs6bnVsbDpdCiAgICogaXMgcmV0dXJuZWQuCiAgICovCiAgVWludDhMaXN0IHJlYWQoW2ludCBsZW5dKTsKCiAgLyoqCiAgICogV3JpdGVzIHVwIHRvIFtjb3VudF0gYnl0ZXMgb2YgdGhlIGJ1ZmZlciBmcm9tIFtvZmZzZXRdIGJ1ZmZlciBvZmZzZXQgdG8KICAgKiB0aGUgc29ja2V0LiBUaGUgbnVtYmVyIG9mIHN1Y2Nlc3NmdWxseSB3cml0dGVuIGJ5dGVzIGlzIHJldHVybmVkLiBUaGlzCiAgICogZnVuY3Rpb24gaXMgbm9uLWJsb2NraW5nIGFuZCB3aWxsIG9ubHkgd3JpdGUgZGF0YSBpZiBidWZmZXIgc3BhY2UgaXMKICAgKiBhdmFpbGFibGUgaW4gdGhlIHNvY2tldC4KICAgKgogICAqIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBbb2Zmc2V0XSBpcyAwLCBhbmQgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIFtjb3VudF0gaXMKICAgKiBbOmJ1ZmZlci5sZW5ndGggLSBvZmZzZXQ6XS4KICAgKi8KICBpbnQgd3JpdGUoTGlzdDxpbnQ+IGJ1ZmZlciwgW2ludCBvZmZzZXQsIGludCBjb3VudF0pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBwb3J0IHVzZWQgYnkgdGhpcyBzb2NrZXQuCiAgICovCiAgaW50IGdldCBwb3J0OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSByZW1vdGUgcG9ydCBjb25uZWN0ZWQgdG8gYnkgdGhpcyBzb2NrZXQuCiAgICovCiAgaW50IGdldCByZW1vdGVQb3J0OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBbSW50ZXJuZXRBZGRyZXNzXSB1c2VkIHRvIGNvbm5lY3QgdGhpcyBzb2NrZXQuCiAgICovCiAgSW50ZXJuZXRBZGRyZXNzIGdldCBhZGRyZXNzOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSByZW1vdGUgW0ludGVybmV0QWRkcmVzc10gY29ubmVjdGVkIHRvIGJ5IHRoaXMgc29ja2V0LgogICAqLwogIEludGVybmV0QWRkcmVzcyBnZXQgcmVtb3RlQWRkcmVzczsKCiAgLyoqCiAgICogQ2xvc2VzIHRoZSBzb2NrZXQuIFJldHVybnMgYSBGdXR1cmUgdGhhdCBjb21wbGV0ZXMgd2l0aCBbdGhpc10gd2hlbiB0aGUKICAgKiB1bmRlcmx5aW5nIGNvbm5lY3Rpb24gaXMgY29tcGxldGVseSBkZXN0cm95ZWQuCiAgICoKICAgKiBDYWxsaW5nIFtjbG9zZV0gd2lsbCBuZXZlciB0aHJvdyBhbiBleGNlcHRpb24KICAgKiBhbmQgY2FsbGluZyBpdCBzZXZlcmFsIHRpbWVzIGlzIHN1cHBvcnRlZC4gQ2FsbGluZyBbY2xvc2VdIGNhbiByZXN1bHQgaW4KICAgKiBhIFtSYXdTb2NrZXRFdmVudC5yZWFkQ2xvc2VkXSBldmVudC4KICAgKi8KICBGdXR1cmU8UmF3U29ja2V0PiBjbG9zZSgpOwoKICAvKioKICAgKiBTaHV0ZG93biB0aGUgc29ja2V0IGluIHRoZSBbZGlyZWN0aW9uXS4gQ2FsbGluZyBbc2h1dGRvd25dIHdpbGwgbmV2ZXIKICAgKiB0aHJvdyBhbiBleGNlcHRpb24gYW5kIGNhbGxpbmcgaXQgc2V2ZXJhbCB0aW1lcyBpcyBzdXBwb3J0ZWQuIENhbGxpbmcKICAgKiBzaHV0ZG93biB3aXRoIGVpdGhlciBbU29ja2V0RGlyZWN0aW9uLmJvdGhdIG9yIFtTb2NrZXREaXJlY3Rpb24ucmVjZWl2ZV0KICAgKiBjYW4gcmVzdWx0IGluIGEgW1Jhd1NvY2tldEV2ZW50LnJlYWRDbG9zZWRdIGV2ZW50LgogICAqLwogIHZvaWQgc2h1dGRvd24oU29ja2V0RGlyZWN0aW9uIGRpcmVjdGlvbik7CgogIC8qKgogICAqIFVzZSBbc2V0T3B0aW9uXSB0byBjdXN0b21pemUgdGhlIFtSYXdTb2NrZXRdLiBTZWUgW1NvY2tldE9wdGlvbl0gZm9yCiAgICogYXZhaWxhYmxlIG9wdGlvbnMuCiAgICoKICAgKiBSZXR1cm5zIFs6dHJ1ZTpdIGlmIHRoZSBvcHRpb24gd2FzIHNldCBzdWNjZXNzZnVsbHksIGZhbHNlIG90aGVyd2lzZS4KICAgKi8KICBib29sIHNldE9wdGlvbihTb2NrZXRPcHRpb24gb3B0aW9uLCBib29sIGVuYWJsZWQpOwoKICAvKioKICAgKiBVc2UgW2dldFJhd09wdGlvbl0gdG8gZ2V0IGxvdyBsZXZlbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgW1Jhd1NvY2tldF0uIFNlZQogICAqIFtSYXdTb2NrZXRPcHRpb25dIGZvciBhdmFpbGFibGUgb3B0aW9ucy4KICAgKgogICAqIFJldHVybnMgdGhlIFtSYXdTb2NrZXRPcHRpb24udmFsdWVdIG9uIHN1Y2Nlc3MuCiAgICoKICAgKiBUaHJvd3MgYW4gW09TRXJyb3JdIG9uIGZhaWx1cmUuCiAgICovCiAgQFNpbmNlKCIyLjIiKQogIFVpbnQ4TGlzdCBnZXRSYXdPcHRpb24oUmF3U29ja2V0T3B0aW9uIG9wdGlvbik7CgogIC8qKgogICAqIFVzZSBbc2V0UmF3T3B0aW9uXSB0byBjdXN0b21pemUgdGhlIFtSYXdTb2NrZXRdLiBTZWUgW1Jhd1NvY2tldE9wdGlvbl0gZm9yCiAgICogYXZhaWxhYmxlIG9wdGlvbnMuCiAgICoKICAgKiBUaHJvd3MgYW4gW09TRXJyb3JdIG9uIGZhaWx1cmUuCiAgICovCiAgQFNpbmNlKCIyLjIiKQogIHZvaWQgc2V0UmF3T3B0aW9uKFJhd1NvY2tldE9wdGlvbiBvcHRpb24pOwp9CgovKioKICogQSBoaWdoLWxldmVsIGNsYXNzIGZvciBjb21tdW5pY2F0aW5nIG92ZXIgYSBUQ1Agc29ja2V0LgogKgogKiBUaGUgW1NvY2tldF0gZXhwb3NlcyBib3RoIGEgW1N0cmVhbV0gYW5kIGEgW0lPU2lua10gaW50ZXJmYWNlLCBtYWtpbmcgaXQKICogaWRlYWwgZm9yIHVzaW5nIHRvZ2V0aGVyIHdpdGggb3RoZXIgW1N0cmVhbV1zLgogKi8KYWJzdHJhY3QgY2xhc3MgU29ja2V0IGltcGxlbWVudHMgU3RyZWFtPFVpbnQ4TGlzdD4sIElPU2luayB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBzb2NrZXQgY29ubmVjdGlvbiB0byB0aGUgaG9zdCBhbmQgcG9ydCBhbmQgcmV0dXJucyBhIFtGdXR1cmVdCiAgICogdGhhdCB3aWxsIGNvbXBsZXRlIHdpdGggZWl0aGVyIGEgW1NvY2tldF0gb25jZSBjb25uZWN0ZWQgb3IgYW4gZXJyb3IKICAgKiBpZiB0aGUgaG9zdC1sb29rdXAgb3IgY29ubmVjdGlvbiBmYWlsZWQuCiAgICoKICAgKiBbaG9zdF0gY2FuIGVpdGhlciBiZSBhIFtTdHJpbmddIG9yIGFuIFtJbnRlcm5ldEFkZHJlc3NdLiBJZiBbaG9zdF0gaXMgYQogICAqIFtTdHJpbmddLCBbY29ubmVjdF0gd2lsbCBwZXJmb3JtIGEgW0ludGVybmV0QWRkcmVzcy5sb29rdXBdIGFuZCB0cnkKICAgKiBhbGwgcmV0dXJuZWQgW0ludGVybmV0QWRkcmVzc11lcywgdW50aWwgY29ubmVjdGVkLiBVbmxlc3MgYQogICAqIGNvbm5lY3Rpb24gd2FzIGVzdGFibGlzaGVkLCB0aGUgZXJyb3IgZnJvbSB0aGUgZmlyc3QgZmFpbGluZyBjb25uZWN0aW9uIGlzCiAgICogcmV0dXJuZWQuCiAgICoKICAgKiBUaGUgYXJndW1lbnQgW3NvdXJjZUFkZHJlc3NdIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGxvY2FsCiAgICogYWRkcmVzcyB0byBiaW5kIHdoZW4gbWFraW5nIHRoZSBjb25uZWN0aW9uLiBgc291cmNlQWRkcmVzc2AgY2FuIGVpdGhlcgogICAqIGJlIGEgYFN0cmluZ2Agb3IgYW4gYEludGVybmV0QWRkcmVzc2AuIElmIGEgYFN0cmluZ2AgaXMgcGFzc2VkIGl0IG11c3QKICAgKiBob2xkIGEgbnVtZXJpYyBJUCBhZGRyZXNzLgogICAqCiAgICogVGhlIGFyZ3VtZW50IFt0aW1lb3V0XSBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIG1heGltdW0gYWxsb3dlZCB0aW1lIHRvIHdhaXQKICAgKiBmb3IgYSBjb25uZWN0aW9uIHRvIGJlIGVzdGFibGlzaGVkLiBJZiBbdGltZW91dF0gaXMgbG9uZ2VyIHRoYW4gdGhlIHN5c3RlbQogICAqIGxldmVsIHRpbWVvdXQgZHVyYXRpb24sIGEgdGltZW91dCBtYXkgb2NjdXIgc29vbmVyIHRoYW4gc3BlY2lmaWVkIGluCiAgICogW3RpbWVvdXRdLiBPbiB0aW1lb3V0LCBhIFtTb2NrZXRFeGNlcHRpb25dIGlzIHRocm93biBhbmQgYWxsIG9uZ29pbmcKICAgKiBjb25uZWN0aW9uIGF0dGVtcHRzIHRvIFtob3N0XSBhcmUgY2FuY2VsbGVkLgogICAqLwogIHN0YXRpYyBGdXR1cmU8U29ja2V0PiBjb25uZWN0KGhvc3QsIGludCBwb3J0LAogICAgICB7c291cmNlQWRkcmVzcywgRHVyYXRpb24gdGltZW91dH0pIHsKICAgIGZpbmFsIElPT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IElPT3ZlcnJpZGVzLmN1cnJlbnQ7CiAgICBpZiAob3ZlcnJpZGVzID09IG51bGwpIHsKICAgICAgcmV0dXJuIFNvY2tldC5fY29ubmVjdChob3N0LCBwb3J0LAogICAgICAgICAgc291cmNlQWRkcmVzczogc291cmNlQWRkcmVzcywgdGltZW91dDogdGltZW91dCk7CiAgICB9CiAgICByZXR1cm4gb3ZlcnJpZGVzLnNvY2tldENvbm5lY3QoaG9zdCwgcG9ydCwKICAgICAgICBzb3VyY2VBZGRyZXNzOiBzb3VyY2VBZGRyZXNzLCB0aW1lb3V0OiB0aW1lb3V0KTsKICB9CgogIC8vLyBMaWtlIFtjb25uZWN0XSwgYnV0IHJldHVybnMgYSBbRnV0dXJlXSB0aGF0IGNvbXBsZXRlcyB3aXRoIGEKICAvLy8gW0Nvbm5lY3Rpb25UYXNrXSB0aGF0IGNhbiBiZSBjYW5jZWxsZWQgaWYgdGhlIFtTb2NrZXRdIGlzIG5vCiAgLy8vIGxvbmdlciBuZWVkZWQuCiAgc3RhdGljIEZ1dHVyZTxDb25uZWN0aW9uVGFzazxTb2NrZXQ+PiBzdGFydENvbm5lY3QoaG9zdCwgaW50IHBvcnQsCiAgICAgIHtzb3VyY2VBZGRyZXNzfSkgewogICAgZmluYWwgSU9PdmVycmlkZXMgb3ZlcnJpZGVzID0gSU9PdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gU29ja2V0Ll9zdGFydENvbm5lY3QoaG9zdCwgcG9ydCwgc291cmNlQWRkcmVzczogc291cmNlQWRkcmVzcyk7CiAgICB9CiAgICByZXR1cm4gb3ZlcnJpZGVzLnNvY2tldFN0YXJ0Q29ubmVjdChob3N0LCBwb3J0LAogICAgICAgIHNvdXJjZUFkZHJlc3M6IHNvdXJjZUFkZHJlc3MpOwogIH0KCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxTb2NrZXQ+IF9jb25uZWN0KGhvc3QsIGludCBwb3J0LAogICAgICB7c291cmNlQWRkcmVzcywgRHVyYXRpb24gdGltZW91dH0pOwoKICBleHRlcm5hbCBzdGF0aWMgRnV0dXJlPENvbm5lY3Rpb25UYXNrPFNvY2tldD4+IF9zdGFydENvbm5lY3QoaG9zdCwgaW50IHBvcnQsCiAgICAgIHtzb3VyY2VBZGRyZXNzfSk7CgogIC8qKgogICAqIERlc3Ryb3kgdGhlIHNvY2tldCBpbiBib3RoIGRpcmVjdGlvbnMuIENhbGxpbmcgW2Rlc3Ryb3ldIHdpbGwgbWFrZSB0aGUKICAgKiBzZW5kIGEgY2xvc2UgZXZlbnQgb24gdGhlIHN0cmVhbSBhbmQgd2lsbCBubyBsb25nZXIgcmVhY3Qgb24gZGF0YSBiZWluZwogICAqIHBpcGVkIHRvIGl0LgogICAqCiAgICogQ2FsbCBbY2xvc2VdKGluaGVyaXRlZCBmcm9tIFtJT1NpbmtdKSB0byBvbmx5IGNsb3NlIHRoZSBbU29ja2V0XQogICAqIGZvciBzZW5kaW5nIGRhdGEuCiAgICovCiAgdm9pZCBkZXN0cm95KCk7CgogIC8qKgogICAqIFVzZSBbc2V0T3B0aW9uXSB0byBjdXN0b21pemUgdGhlIFtSYXdTb2NrZXRdLiBTZWUgW1NvY2tldE9wdGlvbl0gZm9yCiAgICogYXZhaWxhYmxlIG9wdGlvbnMuCiAgICoKICAgKiBSZXR1cm5zIFs6dHJ1ZTpdIGlmIHRoZSBvcHRpb24gd2FzIHNldCBzdWNjZXNzZnVsbHksIGZhbHNlIG90aGVyd2lzZS4KICAgKi8KICBib29sIHNldE9wdGlvbihTb2NrZXRPcHRpb24gb3B0aW9uLCBib29sIGVuYWJsZWQpOwoKICAvKioKICAgKiBVc2UgW2dldFJhd09wdGlvbl0gdG8gZ2V0IGxvdyBsZXZlbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgW1Jhd1NvY2tldF0uIFNlZQogICAqIFtSYXdTb2NrZXRPcHRpb25dIGZvciBhdmFpbGFibGUgb3B0aW9ucy4KICAgKgogICAqIFJldHVybnMgdGhlIFtSYXdTb2NrZXRPcHRpb24udmFsdWVdIG9uIHN1Y2Nlc3MuCiAgICoKICAgKiBUaHJvd3MgYW4gW09TRXJyb3JdIG9uIGZhaWx1cmUuCiAgICovCiAgVWludDhMaXN0IGdldFJhd09wdGlvbihSYXdTb2NrZXRPcHRpb24gb3B0aW9uKTsKCiAgLyoqCiAgICogVXNlIFtzZXRSYXdPcHRpb25dIHRvIGN1c3RvbWl6ZSB0aGUgW1Jhd1NvY2tldF0uIFNlZSBbUmF3U29ja2V0T3B0aW9uXSBmb3IKICAgKiBhdmFpbGFibGUgb3B0aW9ucy4KICAgKgogICAqIFRocm93cyBhbiBbT1NFcnJvcl0gb24gZmFpbHVyZS4KICAgKi8KICB2b2lkIHNldFJhd09wdGlvbihSYXdTb2NrZXRPcHRpb24gb3B0aW9uKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcG9ydCB1c2VkIGJ5IHRoaXMgc29ja2V0LgogICAqLwogIGludCBnZXQgcG9ydDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcmVtb3RlIHBvcnQgY29ubmVjdGVkIHRvIGJ5IHRoaXMgc29ja2V0LgogICAqLwogIGludCBnZXQgcmVtb3RlUG9ydDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgW0ludGVybmV0QWRkcmVzc10gdXNlZCB0byBjb25uZWN0IHRoaXMgc29ja2V0LgogICAqLwogIEludGVybmV0QWRkcmVzcyBnZXQgYWRkcmVzczsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcmVtb3RlIFtJbnRlcm5ldEFkZHJlc3NdIGNvbm5lY3RlZCB0byBieSB0aGlzIHNvY2tldC4KICAgKi8KICBJbnRlcm5ldEFkZHJlc3MgZ2V0IHJlbW90ZUFkZHJlc3M7CgogIEZ1dHVyZSBjbG9zZSgpOwoKICBGdXR1cmUgZ2V0IGRvbmU7Cn0KCi8qKgogKiBEYXRhZ3JhbSBwYWNrYWdlLiBEYXRhIHNlbnQgdG8gYW5kIHJlY2VpdmVkIGZyb20gZGF0YWdyYW0gc29ja2V0cwogKiBjb250YWlucyB0aGUgaW50ZXJuZXQgYWRkcmVzcyBhbmQgcG9ydCBvZiB0aGUgZGVzdGluYXRpb24gb3Igc291cmNlCiAqIHRvZ2V0ZXIgd2l0aCB0aGUgZGF0YS4KICovCmNsYXNzIERhdGFncmFtIHsKICBVaW50OExpc3QgZGF0YTsKICBJbnRlcm5ldEFkZHJlc3MgYWRkcmVzczsKICBpbnQgcG9ydDsKCiAgRGF0YWdyYW0odGhpcy5kYXRhLCB0aGlzLmFkZHJlc3MsIHRoaXMucG9ydCk7Cn0KCi8qKgogKiBBIFtSYXdEYXRhZ3JhbVNvY2tldF0gaXMgYW4gdW5idWZmZXJlZCBpbnRlcmZhY2UgdG8gYSBVRFAgc29ja2V0LgogKgogKiBUaGUgcmF3IGRhdGFncmFtIHNvY2tldCBkZWxpdmVycyB0aGUgZGF0YWdyYW1zIGluIHRoZSBzYW1lIGNodW5rcyBhcyB0aGUKICogdW5kZXJseWluZyBvcGVyYXRpbmcgc3lzdGVtLiBJdCdzIGEgW1N0cmVhbV0gb2YgW1Jhd1NvY2tldEV2ZW50XXMuCiAqCiAqIE5vdGUgdGhhdCB0aGUgZXZlbnQgW1Jhd1NvY2tldEV2ZW50LnJlYWRDbG9zZWRdIHdpbGwgbmV2ZXIgYmUKICogcmVjZWl2ZWQgYXMgYW4gVURQIHNvY2tldCBjYW5ub3QgYmUgY2xvc2VkIGJ5IGEgcmVtb3RlIHBlZXIuCiAqCiAqIEl0IGlzIG5vdCB0aGUgc2FtZSBhcyBhCiAqIFtQT1NJWCByYXcgc29ja2V0XShodHRwOi8vbWFuNy5vcmcvbGludXgvbWFuLXBhZ2VzL21hbjcvcmF3LjcuaHRtbCkuCiAqLwphYnN0cmFjdCBjbGFzcyBSYXdEYXRhZ3JhbVNvY2tldCBleHRlbmRzIFN0cmVhbTxSYXdTb2NrZXRFdmVudD4gewogIC8qKgogICAqIFNldCBvciBnZXQsIGlmIHRoZSBbUmF3RGF0YWdyYW1Tb2NrZXRdIHNob3VsZCBsaXN0ZW4gZm9yCiAgICogW1Jhd1NvY2tldEV2ZW50LnJlYWRdIGV2ZW50cy4gRGVmYXVsdCBpcyBbOnRydWU6XS4KICAgKi8KICBib29sIHJlYWRFdmVudHNFbmFibGVkOwoKICAvKioKICAgKiBTZXQgb3IgZ2V0LCBpZiB0aGUgW1Jhd0RhdGFncmFtU29ja2V0XSBzaG91bGQgbGlzdGVuIGZvcgogICAqIFtSYXdTb2NrZXRFdmVudC53cml0ZV0gZXZlbnRzLiBEZWZhdWx0IGlzIFs6dHJ1ZTpdLiAgVGhpcyBpcyBhCiAgICogb25lLXNob3QgbGlzdGVuZXIsIGFuZCB3cml0ZUV2ZW50c0VuYWJsZWQgbXVzdCBiZSBzZXQgdG8gdHJ1ZQogICAqIGFnYWluIHRvIHJlY2VpdmUgYW5vdGhlciB3cml0ZSBldmVudC4KICAgKi8KICBib29sIHdyaXRlRXZlbnRzRW5hYmxlZDsKCiAgLyoqCiAgICogU2V0IG9yIGdldCwgd2hldGhlciBtdWx0aWNhc3QgdHJhZmZpYyBpcyBsb29wZWQgYmFjayB0byB0aGUgaG9zdC4KICAgKgogICAqIEJ5IGRlZmF1bHQgbXVsdGljYXN0IGxvb3BiYWNrIGlzIGVuYWJsZWQuCiAgICovCiAgYm9vbCBtdWx0aWNhc3RMb29wYmFjazsKCiAgLyoqCiAgICogU2V0IG9yIGdldCwgdGhlIG1heGltdW0gbmV0d29yayBob3BzIGZvciBtdWx0aWNhc3QgcGFja2FnZXMKICAgKiBvcmlnaW5hdGluZyBmcm9tIHRoaXMgc29ja2V0LgogICAqCiAgICogRm9yIElQdjQgdGhpcyBpcyByZWZlcnJlZCB0byBhcyBUVEwgKHRpbWUgdG8gbGl2ZSkuCiAgICoKICAgKiBCeSBkZWZhdWx0IHRoaXMgdmFsdWUgaXMgMSBjYXVzaW5nIG11bHRpY2FzdCB0cmFmZmljIHRvIHN0YXkgb24KICAgKiB0aGUgbG9jYWwgbmV0d29yay4KICAgKi8KICBpbnQgbXVsdGljYXN0SG9wczsKCiAgLyoqCiAgICogU2V0IG9yIGdldCwgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHVzZWQgZm9yIG91dGdvaW5nIG11bHRpY2FzdCBwYWNrYWdlcy4KICAgKgogICAqIEEgdmFsdWUgb2YgYG51bGxgaW5kaWNhdGUgdGhhdCB0aGUgc3lzdGVtIGNob29zZXMgdGhlIG5ldHdvcmsKICAgKiBpbnRlcmZhY2UgdG8gdXNlLgogICAqCiAgICogQnkgZGVmYXVsdCB0aGlzIHZhbHVlIGlzIGBudWxsYAogICAqLwogIEBEZXByZWNhdGVkKCJUaGlzIHByb3BlcnR5IGlzIG5vdCBpbXBsZW1lbnRlZC4gVXNlIGdldFJhd09wdGlvbiBhbmQgIgogICAgICAic2V0UmF3T3B0aW9uIGluc3RlYWQuIikKICBOZXR3b3JrSW50ZXJmYWNlIG11bHRpY2FzdEludGVyZmFjZTsKCiAgLyoqCiAgICogU2V0IG9yIGdldCwgd2hldGhlciBJUHY0IGJyb2FkY2FzdCBpcyBlbmFibGVkLgogICAqCiAgICogSVB2NCBicm9hZGNhc3QgbmVlZHMgdG8gYmUgZW5hYmxlZCBieSB0aGUgc2VuZGVyIGZvciBzZW5kaW5nIElQdjQKICAgKiBicm9hZGNhc3QgcGFja2FnZXMuIEJ5IGRlZmF1bHQgSVB2NCBicm9hZGNhc3QgaXMgZGlzYWJsZWQuCiAgICoKICAgKiBGb3IgSVB2NiB0aGVyZSBpcyBubyBnZW5lcmFsIGJyb2FkY2FzdCBtZWNoYW5pc20uIFVzZSBtdWx0aWNhc3QKICAgKiBpbnN0ZWFkLgogICAqLwogIGJvb2wgYnJvYWRjYXN0RW5hYmxlZDsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyByYXcgZGF0YWdyYW0gc29ja2V0IGJpbmRpbmcgaXQgdG8gYW4gYWRkcmVzcyBhbmQKICAgKiBwb3J0LgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBGdXR1cmU8UmF3RGF0YWdyYW1Tb2NrZXQ+IGJpbmQoaG9zdCwgaW50IHBvcnQsCiAgICAgIHtib29sIHJldXNlQWRkcmVzczogdHJ1ZSwgYm9vbCByZXVzZVBvcnQ6IGZhbHNlLCBpbnQgdHRsOiAxfSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHBvcnQgdXNlZCBieSB0aGlzIHNvY2tldC4KICAgKi8KICBpbnQgZ2V0IHBvcnQ7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGFkZHJlc3MgdXNlZCBieSB0aGlzIHNvY2tldC4KICAgKi8KICBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFkZHJlc3M7CgogIC8qKgogICAqIENsb3NlIHRoZSBkYXRhZ3JhbSBzb2NrZXQuCiAgICovCiAgdm9pZCBjbG9zZSgpOwoKICAvKioKICAgKiBTZW5kIGEgZGF0YWdyYW0uCiAgICoKICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4gVGhpcyB3aWxsIGFsd2F5cyBiZSBlaXRoZXIKICAgKiB0aGUgc2l6ZSBvZiBbYnVmZmVyXSBvciBgMGAuCiAgICovCiAgaW50IHNlbmQoTGlzdDxpbnQ+IGJ1ZmZlciwgSW50ZXJuZXRBZGRyZXNzIGFkZHJlc3MsIGludCBwb3J0KTsKCiAgLyoqCiAgICogUmVjZWl2ZSBhIGRhdGFncmFtLiBJZiB0aGVyZSBhcmUgbm8gZGF0YWdyYW1zIGF2YWlsYWJsZSBgbnVsbGAgaXMKICAgKiByZXR1cm5lZC4KICAgKgogICAqIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgZGF0YWdyYW0gdGhhdCBjYW4gYmUgcmVjZWl2ZWQgaXMgNjU1MDMgYnl0ZXMuCiAgICovCiAgRGF0YWdyYW0gcmVjZWl2ZSgpOwoKICAvKioKICAgKiBKb2luIGEgbXVsdGljYXN0IGdyb3VwLgogICAqCiAgICogSWYgYW4gZXJyb3Igb2NjdXIgd2hlbiB0cnlpbmcgdG8gam9pbiB0aGUgbXVsdGljYXN0IGdyb3VwIGFuCiAgICogZXhjZXB0aW9uIGlzIHRocm93bi4KICAgKi8KICB2b2lkIGpvaW5NdWx0aWNhc3QoSW50ZXJuZXRBZGRyZXNzIGdyb3VwLCBbTmV0d29ya0ludGVyZmFjZSBpbnRlcmZhY2VdKTsKCiAgLyoqCiAgICogTGVhdmUgYSBtdWx0aWNhc3QgZ3JvdXAuCiAgICoKICAgKiBJZiBhbiBlcnJvciBvY2N1ciB3aGVuIHRyeWluZyB0byBqb2luIHRoZSBtdWx0aWNhc2UgZ3JvdXAgYW4KICAgKiBleGNlcHRpb24gaXMgdGhyb3duLgogICAqLwogIHZvaWQgbGVhdmVNdWx0aWNhc3QoSW50ZXJuZXRBZGRyZXNzIGdyb3VwLCBbTmV0d29ya0ludGVyZmFjZSBpbnRlcmZhY2VdKTsKCiAgLyoqCiAgICogVXNlIFtnZXRSYXdPcHRpb25dIHRvIGdldCBsb3cgbGV2ZWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFtSYXdTb2NrZXRdLiBTZWUKICAgKiBbUmF3U29ja2V0T3B0aW9uXSBmb3IgYXZhaWxhYmxlIG9wdGlvbnMuCiAgICoKICAgKiBSZXR1cm5zIFtSYXdTb2NrZXRPcHRpb24udmFsdWVdIG9uIHN1Y2Nlc3MuCiAgICoKICAgKiBUaHJvd3MgYW4gW09TRXJyb3JdIG9uIGZhaWx1cmUuCiAgICovCiAgVWludDhMaXN0IGdldFJhd09wdGlvbihSYXdTb2NrZXRPcHRpb24gb3B0aW9uKTsKCiAgLyoqCiAgICogVXNlIFtzZXRSYXdPcHRpb25dIHRvIGN1c3RvbWl6ZSB0aGUgW1Jhd1NvY2tldF0uIFNlZSBbUmF3U29ja2V0T3B0aW9uXSBmb3IKICAgKiBhdmFpbGFibGUgb3B0aW9ucy4KICAgKgogICAqIFRocm93cyBhbiBbT1NFcnJvcl0gb24gZmFpbHVyZS4KICAgKi8KICB2b2lkIHNldFJhd09wdGlvbihSYXdTb2NrZXRPcHRpb24gb3B0aW9uKTsKfQoKY2xhc3MgU29ja2V0RXhjZXB0aW9uIGltcGxlbWVudHMgSU9FeGNlcHRpb24gewogIGZpbmFsIFN0cmluZyBtZXNzYWdlOwogIGZpbmFsIE9TRXJyb3Igb3NFcnJvcjsKICBmaW5hbCBJbnRlcm5ldEFkZHJlc3MgYWRkcmVzczsKICBmaW5hbCBpbnQgcG9ydDsKCiAgY29uc3QgU29ja2V0RXhjZXB0aW9uKHRoaXMubWVzc2FnZSwge3RoaXMub3NFcnJvciwgdGhpcy5hZGRyZXNzLCB0aGlzLnBvcnR9KTsKICBjb25zdCBTb2NrZXRFeGNlcHRpb24uY2xvc2VkKCkKICAgICAgOiBtZXNzYWdlID0gJ1NvY2tldCBoYXMgYmVlbiBjbG9z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Y2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pbzsKCmNvbnN0IGludCBfc3RkaW9IYW5kbGVUeXBlVGVybWluYWwgPSAwOwpjb25zdCBpbnQgX3N0ZGlvSGFuZGxlVHlwZVBpcGUgPSAxOwpjb25zdCBpbnQgX3N0ZGlvSGFuZGxlVHlwZUZpbGUgPSAyOwpjb25zdCBpbnQgX3N0ZGlvSGFuZGxlVHlwZVNvY2tldCA9IDM7CmNvbnN0IGludCBfc3RkaW9IYW5kbGVUeXBlT3RoZXIgPSA0OwoKY2xhc3MgX1N0ZFN0cmVhbSBleHRlbmRzIFN0cmVhbTxMaXN0PGludD4+IHsKICBmaW5hbCBTdHJlYW08TGlzdDxpbnQ+PiBfc3RyZWFtOwoKICBfU3RkU3RyZWFtKHRoaXMuX3N0cmVhbSk7CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxMaXN0PGludD4+IGxpc3Rlbih2b2lkIG9uRGF0YShMaXN0PGludD4gZXZlbnQpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgcmV0dXJuIF9zdHJlYW0ubGlzdGVuKG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLCBvbkRvbmU6IG9uRG9uZSwgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgfQp9CgovKioKICogW1N0ZGluXSBhbGxvd3MgYm90aCBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzIHJlYWRzIGZyb20gdGhlIHN0YW5kYXJkCiAqIGlucHV0IHN0cmVhbS4KICoKICogTWl4aW5nIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgcmVhZHMgaXMgdW5kZWZpbmVkLgogKi8KY2xhc3MgU3RkaW4gZXh0ZW5kcyBfU3RkU3RyZWFtIGltcGxlbWVudHMgU3RyZWFtPExpc3Q8aW50Pj4gewogIGludCBfZmQ7CgogIFN0ZGluLl8oU3RyZWFtPExpc3Q8aW50Pj4gc3RyZWFtLCB0aGlzLl9mZCkgOiBzdXBlcihzdHJlYW0pOwoKICAvKioKICAgKiBSZWFkIGEgbGluZSBmcm9tIHN0ZGluLgogICAqCiAgICogQmxvY2tzIHVudGlsIGEgZnVsbCBsaW5lIGlzIGF2YWlsYWJsZS4KICAgKgogICAqIExpbmVzIG15IGJlIHRlcm1pbmF0ZWQgYnkgZWl0aGVyIGA8Q1I+PExGPmAgb3IgYDxMRj5gLiBPbiBXaW5kb3dzIGluIGNhc2VzCiAgICogd2hlcmUgdGhlIFtzdGRpb1R5cGVdIG9mIHN0ZGluIGlzIFtTdGRpb1R5cGUudGVybWltYWxdIHRoZSB0ZXJtaW5hdG9yIG1heQogICAqIGFsc28gYmUgYSBzaW5nbGUgYDxDUj5gLgogICAqCiAgICogSW5wdXQgYnl0ZXMgYXJlIGNvbnZlcnRlZCB0byBhIHN0cmluZyBieSBbZW5jb2RpbmddLgogICAqIElmIFtlbmNvZGluZ10gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gW3N5c3RlbUVuY29kaW5nXS4KICAgKgogICAqIElmIFtyZXRhaW5OZXdsaW5lc10gaXMgYGZhbHNlYCwgdGhlIHJldHVybmVkIFN0cmluZyB3aWxsIG5vdCBpbmNsdWRlIHRoZQogICAqIGZpbmFsIGxpbmUgdGVybWluYXRvci4gSWYgYHRydWVgLCB0aGUgcmV0dXJuZWQgU3RyaW5nIHdpbGwgaW5jbHVkZSB0aGUgbGluZQogICAqIHRlcm1pbmF0b3IuIERlZmF1bHQgaXMgYGZhbHNlYC4KICAgKgogICAqIElmIGVuZC1vZi1maWxlIGlzIHJlYWNoZWQgYWZ0ZXIgYW55IGJ5dGVzIGhhdmUgYmVlbiByZWFkIGZyb20gc3RkaW4sCiAgICogdGhhdCBkYXRhIGlzIHJldHVybmVkIHdpdGhvdXQgYSBsaW5lIHRlcm1pbmF0b3IuCiAgICogUmV0dXJucyBgbnVsbGAgaWYgbm8gYnl0ZXMgcHJlY2VkZWQgdGhlIGVuZCBvZiBpbnB1dC4KICAgKi8KICBTdHJpbmcgcmVhZExpbmVTeW5jKAogICAgICB7RW5jb2RpbmcgZW5jb2Rpbmc6IHN5c3RlbUVuY29kaW5nLCBib29sIHJldGFpbk5ld2xpbmVzOiBmYWxzZX0pIHsKICAgIGNvbnN0IENSID0gMTM7CiAgICBjb25zdCBMRiA9IDEwOwogICAgZmluYWwgTGlzdDxpbnQ+IGxpbmUgPSA8aW50PltdOwogICAgLy8gT24gV2luZG93cywgaWYgbGluZU1vZGUgaXMgZGlzYWJsZWQsIG9ubHkgQ1IgaXMgcmVjZWl2ZWQuCiAgICBib29sIGNySXNOZXdsaW5lID0gUGxhdGZvcm0uaXNXaW5kb3dzICYmCiAgICAgICAgKHN0ZGlvVHlwZShzdGRpbikgPT0gU3RkaW9UeXBlLnRlcm1pbmFsKSAmJgogICAgICAgICFsaW5lTW9kZTsKICAgIGlmIChyZXRhaW5OZXdsaW5lcykgewogICAgICBpbnQgYnl0ZTsKICAgICAgZG8gewogICAgICAgIGJ5dGUgPSByZWFkQnl0ZVN5bmMoKTsKICAgICAgICBpZiAoYnl0ZSA8IDApIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBsaW5lLmFkZChieXRlKTsKICAgICAgfSB3aGlsZSAoYnl0ZSAhPSBMRiAmJiAhKGJ5dGUgPT0gQ1IgJiYgY3JJc05ld2xpbmUpKTsKICAgICAgaWYgKGxpbmUuaXNFbXB0eSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGNySXNOZXdsaW5lKSB7CiAgICAgIC8vIENSIGFuZCBMRiBhcmUgYm90aCBsaW5lIHRlcm1pbmF0b3JzLCBuZWl0aGVyIGlzIHJldGFpbmVkLgogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIGludCBieXRlID0gcmVhZEJ5dGVTeW5jKCk7CiAgICAgICAgaWYgKGJ5dGUgPCAwKSB7CiAgICAgICAgICBpZiAobGluZS5pc0VtcHR5KSByZXR1cm4gbnVsbDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAoYnl0ZSA9PSBMRiB8fCBieXRlID09IENSKSBicmVhazsKICAgICAgICBsaW5lLmFkZChieXRlKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgLy8gQ2FzZSBoYXZpbmcgdG8gaGFuZGxlIENSIExGIGFzIGEgc2luZ2xlIHVucmV0YWluZWQgbGluZSB0ZXJtaW5hdG9yLgogICAgICBvdXRlcjoKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBpbnQgYnl0ZSA9IHJlYWRCeXRlU3luYygpOwogICAgICAgIGlmIChieXRlID09IExGKSBicmVhazsKICAgICAgICBpZiAoYnl0ZSA9PSBDUikgewogICAgICAgICAgZG8gewogICAgICAgICAgICBieXRlID0gcmVhZEJ5dGVTeW5jKCk7CiAgICAgICAgICAgIGlmIChieXRlID09IExGKSBicmVhayBvdXRlcjsKCiAgICAgICAgICAgIGxpbmUuYWRkKENSKTsKICAgICAgICAgIH0gd2hpbGUgKGJ5dGUgPT0gQ1IpOwogICAgICAgICAgLy8gRmFsbCB0aHJvdWdoIGFuZCBoYW5kbGUgbm9uLUNSIGNoYXJhY3Rlci4KICAgICAgICB9CiAgICAgICAgaWYgKGJ5dGUgPCAwKSB7CiAgICAgICAgICBpZiAobGluZS5pc0VtcHR5KSByZXR1cm4gbnVsbDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBsaW5lLmFkZChieXRlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGVuY29kaW5nLmRlY29kZShsaW5lKTsKICB9CgogIC8qKgogICAqIENoZWNrIGlmIGVjaG8gbW9kZSBpcyBlbmFibGVkIG9uIFtzdGRpbl0uCiAgICovCiAgZXh0ZXJuYWwgYm9vbCBnZXQgZWNob01vZGU7CgogIC8qKgogICAqIEVuYWJsZSBvciBkaXNhYmxlIGVjaG8gbW9kZSBvbiBbc3RkaW5dLgogICAqCiAgICogSWYgZGlzYWJsZWQsIGlucHV0IGZyb20gdG8gY29uc29sZSB3aWxsIG5vdCBiZSBlY2hvZWQuCiAgICoKICAgKiBEZWZhdWx0IGRlcGVuZHMgb24gdGhlIHBhcmVudCBwcm9jZXNzLCBidXQgdXN1YWxseSBlbmFibGVkLgogICAqCiAgICogT24gV2luZG93cyB0aGlzIG1vZGUgY2FuIG9ubHkgYmUgZW5hYmxlZCBpZiBbbGluZU1vZGVdIGlzIGVuYWJsZWQgYXMgd2VsbC4KICAgKi8KICBleHRlcm5hbCB2b2lkIHNldCBlY2hvTW9kZShib29sIGVuYWJsZWQpOwoKICAvKioKICAgKiBDaGVjayBpZiBsaW5lIG1vZGUgaXMgZW5hYmxlZCBvbiBbc3RkaW5dLgogICAqLwogIGV4dGVybmFsIGJvb2wgZ2V0IGxpbmVNb2RlOwoKICAvKioKICAgKiBFbmFibGUgb3IgZGlzYWJsZSBsaW5lIG1vZGUgb24gW3N0ZGluXS4KICAgKgogICAqIElmIGVuYWJsZWQsIGNoYXJhY3RlcnMgYXJlIGRlbGF5ZWQgdW50aWwgYSBuZXctbGluZSBjaGFyYWN0ZXIgaXMgZW50ZXJlZC4KICAgKiBJZiBkaXNhYmxlZCwgY2hhcmFjdGVycyB3aWxsIGJlIGF2YWlsYWJsZSBhcyB0eXBlZC4KICAgKgogICAqIERlZmF1bHQgZGVwZW5kcyBvbiB0aGUgcGFyZW50IHByb2Nlc3MsIGJ1dCB1c3VhbGx5IGVuYWJsZWQuCiAgICoKICAgKiBPbiBXaW5kb3dzIHRoaXMgbW9kZSBjYW4gb25seSBiZSBkaXNhYmxlZCBpZiBbZWNob01vZGVdIGlzIGRpc2FibGVkIGFzIHdlbGwuCiAgICovCiAgZXh0ZXJuYWwgdm9pZCBzZXQgbGluZU1vZGUoYm9vbCBlbmFibGVkKTsKCiAgLyoqCiAgICAqIFdoZXRoZXIgY29ubmVjdGVkIHRvIGEgdGVybWluYWwgdGhhdCBzdXBwb3J0cyBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMuCiAgICAqCiAgICAqIE5vdCBhbGwgdGVybWluYWxzIGFyZSByZWNvZ25pemVkLCBhbmQgbm90IGFsbCByZWNvZ25pemVkIHRlcm1pbmFscyBjYW4KICAgICogcmVwb3J0IHdoZXRoZXIgdGhleSBzdXBwb3J0IEFOU0kgZXNjYXBlIHNlcXVlbmNlcywgc28gdGhpcyB2YWx1ZSBpcyBhCiAgICAqIGJlc3QtZWZmb3J0IGF0dGVtcHQgYXQgZGV0ZWN0aW5nIHRoZSBzdXBwb3J0LgogICAgKgogICAgKiBUaGUgYWN0dWFsIGVzY2FwZSBzZXF1ZW5jZSBzdXBwb3J0IG1heSBkaWZmZXIgYmV0d2VlbiB0ZXJtaW5hbHMsCiAgICAqIHdpdGggc29tZSB0ZXJtaW5hbHMgc3VwcG9ydGluZyBtb3JlIGVzY2FwZSBzZXF1ZW5jZXMgdGhhbiBvdGhlcnMsCiAgICAqIGFuZCBzb21lIHRlcm1pbmFscyBldmVuIGRpZmZlcmluZyBpbiBiZWhhdmlvciBmb3IgdGhlIHNhbWUgZXNjYXBlCiAgICAqIHNlcXVlbmNlLgogICAgKgogICAgKiBUaGUgQU5TSSBjb2xvciBzZWxlY3Rpb24gaXMgZ2VuZXJhbGx5IHN1cHBvcnRlZC4KICAgICoKICAgICogQ3VycmVudGx5LCBhIGBURVJNYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBjb250YWluaW5nIHRoZSBzdHJpbmcgYHh0ZXJtYAogICAgKiB3aWxsIGJlIHRha2VuIGFzIGV2aWRlbmNlIHRoYXQgQU5TSSBlc2NhcGUgc2VxdWVuY2VzIGFyZSBzdXBwb3J0ZWQuCiAgICAqIE9uIFdpbmRvd3MsIG9ubHkgdmVyc2lvbnMgb2YgV2luZG93cyAxMCBhZnRlciB2LjE1MTEKICAgICogKCJUSDIiLCBPUyBidWlsZCAxMDU4Nikgd2lsbCBiZSBkZXRlY3RlZCBhcyBzdXBwb3J0aW5nIHRoZSBvdXRwdXQgb2YKICAgICogQU5TSSBlc2NhcGUgc2VxdWVuY2VzLCBhbmQgb25seSB2ZXJzaW9ucyBhZnRlciB2LjE2MDcgKCJBbm5pdmVyc2FyeQogICAgKiBVcGRhdGUiLCBPUyBidWlsZCAxNDM5Mykgd2lsbCBiZSBkZXRlY3RlZCBhcyBzdXBwb3J0aW5nIHRoZSBpbnB1dCBvZgogICAgKiBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMuCiAgICAqLwogIGV4dGVybmFsIGJvb2wgZ2V0IHN1cHBvcnRzQW5zaUVzY2FwZXM7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgcmVhZCBhIGJ5dGUgZnJvbSBzdGRpbi4gVGhpcyBjYWxsIHdpbGwgYmxvY2sgdW50aWwgYSBieXRlIGlzCiAgICogYXZhaWxhYmxlLgogICAqCiAgICogSWYgYXQgZW5kIG9mIGZpbGUsIC0xIGlzIHJldHVybmVkLgogICAqLwogIGV4dGVybmFsIGludCByZWFkQnl0ZVN5bmMoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGEgdGVybWluYWwgYXR0YWNoZWQgdG8gc3RkaW4uCiAgICovCiAgYm9vbCBnZXQgaGFzVGVybWluYWwgewogICAgdHJ5IHsKICAgICAgcmV0dXJuIHN0ZGlvVHlwZSh0aGlzKSA9PSBTdGRpb1R5cGUudGVybWluYWw7CiAgICB9IG9uIEZpbGVTeXN0ZW1FeGNlcHRpb24gY2F0Y2ggKF8pIHsKICAgICAgLy8gSWYgc3RkaW9UeXBlIHRocm93cyBhIEZpbGVTeXN0ZW1FeGNlcHRpb24sIHRoZW4gaXQgaXMgbm90IGhvb2tlZCB1cCB0bwogICAgICAvLyBhIHRlcm1pbmFsLCBwcm9iYWJseSBiZWNhdXNlIGl0IGlzIGNsb3NlZCwgYnV0IGxldCBvdGhlciBleGNlcHRpb24KICAgICAgLy8gdHlwZXMgYnViYmxlIHVwLgogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9CgovKioKICogW1N0ZG91dF0gcmVwcmVzZW50cyB0aGUgW0lPU2lua10gZm9yIGVpdGhlciBgc3Rkb3V0YCBvciBgc3RkZXJyYC4KICoKICogSXQgcHJvdmlkZXMgYSAqYmxvY2tpbmcqIGBJT1NpbmtgLCBzbyB1c2luZyB0aGlzIHRvIHdyaXRlIHdpbGwgYmxvY2sgdW50aWwKICogdGhlIG91dHB1dCBpcyB3cml0dGVuLgogKgogKiBJbiBzb21lIHNpdHVhdGlvbnMgdGhpcyBibG9ja2luZyBiZWhhdmlvciBpcyB1bmRlc2lyYWJsZSBhcyBpdCBkb2VzIG5vdAogKiBwcm92aWRlIHRoZSBzYW1lIG5vbi1ibG9ja2luZyBiZWhhdmlvciBhcyBkYXJ0OmlvIGluIGdlbmVyYWwgZXhwb3Nlcy4KICogVXNlIHRoZSBwcm9wZXJ0eSBbbm9uQmxvY2tpbmddIHRvIGdldCBhbiBgSU9TaW5rYCB3aGljaCBoYXMgdGhlIG5vbi1ibG9ja2luZwogKiBiZWhhdmlvci4KICoKICogVGhpcyBjbGFzcyBjYW4gYWxzbyBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgYHN0ZG91dGAgb3IgYHN0ZGVycmAgaXMKICogY29ubmVjdGVkIHRvIGEgdGVybWluYWwgYW5kIHF1ZXJ5IHNvbWUgdGVybWluYWwgcHJvcGVydGllcy4KICoKICogVGhlIFthZGRFcnJvcl0gQVBJIGlzIGluaGVyaXRlZCBmcm9tICBbU3RyZWFtU2lua10gYW5kIGNhbGxpbmcgaXQgd2lsbCByZXN1bHQKICogaW4gYW4gdW5oYW5kbGVkIGFzeW5jaHJvbm91cyBlcnJvciB1bmxlc3MgdGhlcmUgaXMgYW4gZXJyb3IgaGFuZGxlciBvbgogKiBbZG9uZV0uCiAqLwpjbGFzcyBTdGRvdXQgZXh0ZW5kcyBfU3RkU2luayBpbXBsZW1lbnRzIElPU2luayB7CiAgZmluYWwgaW50IF9mZDsKICBJT1NpbmsgX25vbkJsb2NraW5nOwoKICBTdGRvdXQuXyhJT1Npbmsgc2luaywgdGhpcy5fZmQpIDogc3VwZXIoc2luayk7CgogIC8qKgogICAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhIHRlcm1pbmFsIGF0dGFjaGVkIHRvIHN0ZG91dC4KICAgKi8KICBib29sIGdldCBoYXNUZXJtaW5hbCA9PiBfaGFzVGVybWluYWwoX2ZkKTsKCiAgLyoqCiAgICogR2V0IHRoZSBudW1iZXIgb2YgY29sdW1ucyBvZiB0aGUgdGVybWluYWwuCiAgICoKICAgKiBJZiBubyB0ZXJtaW5hbCBpcyBhdHRhY2hlZCB0byBzdGRvdXQsIGEgW1N0ZG91dEV4Y2VwdGlvbl0gaXMgdGhyb3duLiBTZWUKICAgKiBbaGFzVGVybWluYWxdIGZvciBtb3JlIGluZm8uCiAgICovCiAgaW50IGdldCB0ZXJtaW5hbENvbHVtbnMgPT4gX3Rlcm1pbmFsQ29sdW1ucyhfZmQpOwoKICAvKioKICAgKiBHZXQgdGhlIG51bWJlciBvZiBsaW5lcyBvZiB0aGUgdGVybWluYWwuCiAgICoKICAgKiBJZiBubyB0ZXJtaW5hbCBpcyBhdHRhY2hlZCB0byBzdGRvdXQsIGEgW1N0ZG91dEV4Y2VwdGlvbl0gaXMgdGhyb3duLiBTZWUKICAgKiBbaGFzVGVybWluYWxdIGZvciBtb3JlIGluZm8uCiAgICovCiAgaW50IGdldCB0ZXJtaW5hbExpbmVzID0+IF90ZXJtaW5hbExpbmVzKF9mZCk7CgogIC8qKgogICAgKiBXaGV0aGVyIGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsIHRoYXQgc3VwcG9ydHMgQU5TSSBlc2NhcGUgc2VxdWVuY2VzLgogICAgKgogICAgKiBOb3QgYWxsIHRlcm1pbmFscyBhcmUgcmVjb2duaXplZCwgYW5kIG5vdCBhbGwgcmVjb2duaXplZCB0ZXJtaW5hbHMgY2FuCiAgICAqIHJlcG9ydCB3aGV0aGVyIHRoZXkgc3VwcG9ydCBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMsIHNvIHRoaXMgdmFsdWUgaXMgYQogICAgKiBiZXN0LWVmZm9ydCBhdHRlbXB0IGF0IGRldGVjdGluZyB0aGUgc3VwcG9ydC4KICAgICoKICAgICogVGhlIGFjdHVhbCBlc2NhcGUgc2VxdWVuY2Ugc3VwcG9ydCBtYXkgZGlmZmVyIGJldHdlZW4gdGVybWluYWxzLAogICAgKiB3aXRoIHNvbWUgdGVybWluYWxzIHN1cHBvcnRpbmcgbW9yZSBlc2NhcGUgc2VxdWVuY2VzIHRoYW4gb3RoZXJzLAogICAgKiBhbmQgc29tZSB0ZXJtaW5hbHMgZXZlbiBkaWZmZXJpbmcgaW4gYmVoYXZpb3IgZm9yIHRoZSBzYW1lIGVzY2FwZQogICAgKiBzZXF1ZW5jZS4KICAgICoKICAgICogVGhlIEFOU0kgY29sb3Igc2VsZWN0aW9uIGlzIGdlbmVyYWxseSBzdXBwb3J0ZWQuCiAgICAqCiAgICAqIEN1cnJlbnRseSwgYSBgVEVSTWAgZW52aXJvbm1lbnQgdmFyaWFibGUgY29udGFpbmluZyB0aGUgc3RyaW5nIGB4dGVybWAKICAgICogd2lsbCBiZSB0YWtlbiBhcyBldmlkZW5jZSB0aGF0IEFOU0kgZXNjYXBlIHNlcXVlbmNlcyBhcmUgc3VwcG9ydGVkLgogICAgKiBPbiBXaW5kb3dzLCBvbmx5IHZlcnNpb25zIG9mIFdpbmRvd3MgMTAgYWZ0ZXIgdi4xNTExCiAgICAqICgiVEgyIiwgT1MgYnVpbGQgMTA1ODYpIHdpbGwgYmUgZGV0ZWN0ZWQgYXMgc3VwcG9ydGluZyB0aGUgb3V0cHV0IG9mCiAgICAqIEFOU0kgZXNjYXBlIHNlcXVlbmNlcywgYW5kIG9ubHkgdmVyc2lvbnMgYWZ0ZXIgdi4xNjA3ICgiQW5uaXZlcnNhcnkKICAgICogVXBkYXRlIiwgT1MgYnVpbGQgMTQzOTMpIHdpbGwgYmUgZGV0ZWN0ZWQgYXMgc3VwcG9ydGluZyB0aGUgaW5wdXQgb2YKICAgICogQU5TSSBlc2NhcGUgc2VxdWVuY2VzLgogICAgKi8KICBib29sIGdldCBzdXBwb3J0c0Fuc2lFc2NhcGVzID0+IF9zdXBwb3J0c0Fuc2lFc2NhcGVzKF9mZCk7CgogIGV4dGVybmFsIGJvb2wgX2hhc1Rlcm1pbmFsKGludCBmZCk7CiAgZXh0ZXJuYWwgaW50IF90ZXJtaW5hbENvbHVtbnMoaW50IGZkKTsKICBleHRlcm5hbCBpbnQgX3Rlcm1pbmFsTGluZXMoaW50IGZkKTsKICBleHRlcm5hbCBzdGF0aWMgYm9vbCBfc3VwcG9ydHNBbnNpRXNjYXBlcyhpbnQgZmQpOwoKICAvKioKICAgKiBHZXQgYSBub24tYmxvY2tpbmcgYElPU2lua2AuCiAgICovCiAgSU9TaW5rIGdldCBub25CbG9ja2luZyB7CiAgICBfbm9uQmxvY2tpbmcgPz89IG5ldyBJT1NpbmsobmV3IF9GaWxlU3RyZWFtQ29uc3VtZXIuZnJvbVN0ZGlvKF9mZCkpOwogICAgcmV0dXJuIF9ub25CbG9ja2luZzsKICB9Cn0KCmNsYXNzIFN0ZG91dEV4Y2VwdGlvbiBpbXBsZW1lbnRzIElPRXhjZXB0aW9uIHsKICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKICBmaW5hbCBPU0Vycm9yIG9zRXJyb3I7CgogIGNvbnN0IFN0ZG91dEV4Y2VwdGlvbih0aGlzLm1lc3NhZ2UsIFt0aGlzLm9zRXJyb3JdKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICJTdGRvdXRFeGNlcHRpb246ICRtZXNzYWdlJHtvc0Vycm9yID09IG51bGwgPyAiIiA6ICIsICRvc0Vycm9yIn0iOwogIH0KfQoKY2xhc3MgU3RkaW5FeGNlcHRpb24gaW1wbGVtZW50cyBJT0V4Y2VwdGlvbiB7CiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CiAgZmluYWwgT1NFcnJvciBvc0Vycm9yOwoKICBjb25zdCBTdGRpbkV4Y2VwdGlvbih0aGlzLm1lc3NhZ2UsIFt0aGlzLm9zRXJyb3JdKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICJTdGRpbkV4Y2VwdGlvbjogJG1lc3NhZ2Uke29zRXJyb3IgPT0gbnVsbCA/ICIiIDogIiwgJG9zRXJyb3IifSI7CiAgfQp9CgpjbGFzcyBfU3RkQ29uc3VtZXIgaW1wbGVtZW50cyBTdHJlYW1Db25zdW1lcjxMaXN0PGludD4+IHsKICBmaW5hbCBfZmlsZTsKCiAgX1N0ZENvbnN1bWVyKGludCBmZCkgOiBfZmlsZSA9IF9GaWxlLl9vcGVuU3RkaW9TeW5jKGZkKTsKCiAgRnV0dXJlIGFkZFN0cmVhbShTdHJlYW08TGlzdDxpbnQ+PiBzdHJlYW0pIHsKICAgIHZhciBjb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyKCk7CiAgICB2YXIgc3ViOwogICAgc3ViID0gc3RyZWFtLmxpc3RlbigoZGF0YSkgewogICAgICB0cnkgewogICAgICAgIF9maWxlLndyaXRlRnJvbVN5bmMoZGF0YSk7CiAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICBzdWIuY2FuY2VsKCk7CiAgICAgICAgY29tcGxldGVyLmNvbXBsZXRlRXJyb3IoZSwgcyk7CiAgICAgIH0KICAgIH0sCiAgICAgICAgb25FcnJvcjogY29tcGxldGVyLmNvbXBsZXRlRXJyb3IsCiAgICAgICAgb25Eb25lOiBjb21wbGV0ZXIuY29tcGxldGUsCiAgICAgICAgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICByZXR1cm4gY29tcGxldGVyLmZ1dHVyZTsKICB9CgogIEZ1dHVyZSBjbG9zZSgpIHsKICAgIF9maWxlLmNsb3NlU3luYygpOwogICAgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUoKTsKICB9Cn0KCmNsYXNzIF9TdGRTaW5rIGltcGxlbWVudHMgSU9TaW5rIHsKICBmaW5hbCBJT1NpbmsgX3Npbms7CgogIF9TdGRTaW5rKHRoaXMuX3NpbmspOwoKICBFbmNvZGluZyBnZXQgZW5jb2RpbmcgPT4gX3NpbmsuZW5jb2Rpbmc7CiAgdm9pZCBzZXQgZW5jb2RpbmcoRW5jb2RpbmcgZW5jb2RpbmcpIHsKICAgIF9zaW5rLmVuY29kaW5nID0gZW5jb2Rpbmc7CiAgfQoKICB2b2lkIHdyaXRlKG9iamVjdCkgewogICAgX3Npbmsud3JpdGUob2JqZWN0KTsKICB9CgogIHZvaWQgd3JpdGVsbihbb2JqZWN0ID0gIiJdKSB7CiAgICBfc2luay53cml0ZWxuKG9iamVjdCk7CiAgfQoKICB2b2lkIHdyaXRlQWxsKG9iamVjdHMsIFtzZXAgPSAiIl0pIHsKICAgIF9zaW5rLndyaXRlQWxsKG9iamVjdHMsIHNlcCk7CiAgfQoKICB2b2lkIGFkZChMaXN0PGludD4gZGF0YSkgewogICAgX3NpbmsuYWRkKGRhdGEpOwogIH0KCiAgdm9pZCBhZGRFcnJvcihlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIF9zaW5rLmFkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIHZvaWQgd3JpdGVDaGFyQ29kZShpbnQgY2hhckNvZGUpIHsKICAgIF9zaW5rLndyaXRlQ2hhckNvZGUoY2hhckNvZGUpOwogIH0KCiAgRnV0dXJlIGFkZFN0cmVhbShTdHJlYW08TGlzdDxpbnQ+PiBzdHJlYW0pID0+IF9zaW5rLmFkZFN0cmVhbShzdHJlYW0pOwogIEZ1dHVyZSBmbHVzaCgpID0+IF9zaW5rLmZsdXNoKCk7CiAgRnV0dXJlIGNsb3NlKCkgPT4gX3NpbmsuY2xvc2UoKTsKICBGdXR1cmUgZ2V0IGRvbmUgPT4gX3NpbmsuZG9uZTsKfQoKLy8vIFRoZSB0eXBlIG9mIG9iamVjdCBhIHN0YW5kYXJkIElPIHN0cmVhbSBpcyBhdHRhY2hlZCB0by4KY2xhc3MgU3RkaW9UeXBlIHsKICBzdGF0aWMgY29uc3QgU3RkaW9UeXBlIHRlcm1pbmFsID0gY29uc3QgU3RkaW9UeXBlLl8oInRlcm1pbmFsIik7CiAgc3RhdGljIGNvbnN0IFN0ZGlvVHlwZSBwaXBlID0gY29uc3QgU3RkaW9UeXBlLl8oInBpcGUiKTsKICBzdGF0aWMgY29uc3QgU3RkaW9UeXBlIGZpbGUgPSBjb25zdCBTdGRpb1R5cGUuXygiZmlsZSIpOwogIHN0YXRpYyBjb25zdCBTdGRpb1R5cGUgb3RoZXIgPSBjb25zdCBTdGRpb1R5cGUuXygib3RoZXIiKTsKCiAgQERlcHJlY2F0ZWQoIlVzZSB0ZXJtaW5hbCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgU3RkaW9UeXBlIFRFUk1JTkFMID0gdGVybWluYWw7CiAgQERlcHJlY2F0ZWQoIlVzZSBwaXBlIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBTdGRpb1R5cGUgUElQRSA9IHBpcGU7CiAgQERlcHJlY2F0ZWQoIlVzZSBmaWxlIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBTdGRpb1R5cGUgRklMRSA9IGZpbGU7CiAgQERlcHJlY2F0ZWQoIlVzZSBvdGhlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgU3RkaW9UeXBlIE9USEVSID0gb3RoZXI7CgogIGZpbmFsIFN0cmluZyBuYW1lOwogIGNvbnN0IFN0ZGlvVHlwZS5fKHRoaXMubmFtZSk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIlN0ZGlvVHlwZTogJG5hbWUiOwp9CgpTdGRpbiBfc3RkaW47ClN0ZG91dCBfc3Rkb3V0OwpTdGRvdXQgX3N0ZGVycjsKCi8vIFRoZXNlIG1heSBiZSBzZXQgdG8gZGlmZmVyZW50IHZhbHVlcyBieSB0aGUgZW1iZWRkZXIgYnkgY2FsbGluZwovLyBfc2V0U3RkaW9GRHMgd2hlbiBpbml0aWFsaXppbmcgZGFydDppby4KaW50IF9zdGRpbkZEID0gMDsKaW50IF9zdGRvdXRGRCA9IDE7CmludCBfc3RkZXJyRkQgPSAyOwoKQHByYWdtYSgndm06ZW50cnktcG9pbnQnLCAnY2FsbCcpCnZvaWQgX3NldFN0ZGlvRkRzKGludCBzdGRpbiwgaW50IHN0ZG91dCwgaW50IHN0ZGVycikgewogIF9zdGRpbkZEID0gc3RkaW47CiAgX3N0ZG91dEZEID0gc3Rkb3V0OwogIF9zdGRlcnJGRCA9IHN0ZGVycjsKfQoKLy8vIFRoZSBzdGFuZGFyZCBpbnB1dCBzdHJlYW0gb2YgZGF0YSByZWFkIGJ5IHRoaXMgcHJvZ3JhbS4KU3RkaW4gZ2V0IHN0ZGluIHsKICBfc3RkaW4gPz89IF9TdGRJT1V0aWxzLl9nZXRTdGRpb0lucHV0U3RyZWFtKF9zdGRpbkZEKTsKICByZXR1cm4gX3N0ZGluOwp9CgovLy8gVGhlIHN0YW5kYXJkIG91dHB1dCBzdHJlYW0gb2YgZGF0YSB3cml0dGVuIGJ5IHRoaXMgcHJvZ3JhbS4KLy8vCi8vLyBUaGUgYGFkZEVycm9yYCBBUEkgaXMgaW5oZXJpdGVkIGZyb20gIGBTdHJlYW1TaW5rYCBhbmQgY2FsbGluZyBpdCB3aWxsCi8vLyByZXN1bHQgaW4gYW4gdW5oYW5kbGVkIGFzeW5jaHJvbm91cyBlcnJvciB1bmxlc3MgdGhlcmUgaXMgYW4gZXJyb3IgaGFuZGxlcgovLy8gb24gYGRvbmVgLgpTdGRvdXQgZ2V0IHN0ZG91dCB7CiAgX3N0ZG91dCA/Pz0gX1N0ZElPVXRpbHMuX2dldFN0ZGlvT3V0cHV0U3RyZWFtKF9zdGRvdXRGRCk7CiAgcmV0dXJuIF9zdGRvdXQ7Cn0KCi8vLyBUaGUgc3RhbmRhcmQgb3V0cHV0IHN0cmVhbSBvZiBlcnJvcnMgd3JpdHRlbiBieSB0aGlzIHByb2dyYW0uCi8vLwovLy8gVGhlIGBhZGRFcnJvcmAgQVBJIGlzIGluaGVyaXRlZCBmcm9tICBgU3RyZWFtU2lua2AgYW5kIGNhbGxpbmcgaXQgd2lsbAovLy8gcmVzdWx0IGluIGFuIHVuaGFuZGxlZCBhc3luY2hyb25vdXMgZXJyb3IgdW5sZXNzIHRoZXJlIGlzIGFuIGVycm9yIGhhbmRsZXIKLy8vIG9uIGBkb25lYC4KU3Rkb3V0IGdldCBzdGRlcnIgewogIF9zdGRlcnIgPz89IF9TdGRJT1V0aWxzLl9nZXRTdGRpb091dHB1dFN0cmVhbShfc3RkZXJyRkQpOwogIHJldHVybiBfc3RkZXJyOwp9CgovLy8gRm9yIGEgc3RyZWFtLCByZXR1cm5zIHdoZXRoZXIgaXQgaXMgYXR0YWNoZWQgdG8gYSBmaWxlLCBwaXBlLCB0ZXJtaW5hbCwgb3IKLy8vIHNvbWV0aGluZyBlbHNlLgpTdGRpb1R5cGUgc3RkaW9UeXBlKG9iamVjdCkgewogIGlmIChvYmplY3QgaXMgX1N0ZFN0cmVhbSkgewogICAgb2JqZWN0ID0gb2JqZWN0Ll9zdHJlYW07CiAgfSBlbHNlIGlmIChvYmplY3QgPT0gc3Rkb3V0IHx8IG9iamVjdCA9PSBzdGRlcnIpIHsKICAgIGludCBzdGRpb2ZkID0gb2JqZWN0ID09IHN0ZG91dCA/IF9zdGRvdXRGRCA6IF9zdGRlcnJGRDsKICAgIHN3aXRjaCAoX1N0ZElPVXRpbHMuX2dldFN0ZGlvSGFuZGxlVHlwZShzdGRpb2ZkKSkgewogICAgICBjYXNlIF9zdGRpb0hhbmRsZVR5cGVUZXJtaW5hbDoKICAgICAgICByZXR1cm4gU3RkaW9UeXBlLnRlcm1pbmFsOwogICAgICBjYXNlIF9zdGRpb0hhbmRsZVR5cGVQaXBlOgogICAgICAgIHJldHVybiBTdGRpb1R5cGUucGlwZTsKICAgICAgY2FzZSBfc3RkaW9IYW5kbGVUeXBlRmlsZToKICAgICAgICByZXR1cm4gU3RkaW9UeXBlLmZpbGU7CiAgICB9CiAgfQogIGlmIChvYmplY3QgaXMgX0ZpbGVTdHJlYW0pIHsKICAgIHJldHVybiBTdGRpb1R5cGUuZmlsZTsKICB9CiAgaWYgKG9iamVjdCBpcyBTb2NrZXQpIHsKICAgIGludCBzb2NrZXRUeXBlID0gX1N0ZElPVXRpbHMuX3NvY2tldFR5cGUob2JqZWN0KTsKICAgIGlmIChzb2NrZXRUeXBlID09IG51bGwpIHJldHVybiBTdGRpb1R5cGUub3RoZXI7CiAgICBzd2l0Y2ggKHNvY2tldFR5cGUpIHsKICAgICAgY2FzZSBfc3RkaW9IYW5kbGVUeXBlVGVybWluYWw6CiAgICAgICAgcmV0dXJuIFN0ZGlvVHlwZS50ZXJtaW5hbDsKICAgICAgY2FzZSBfc3RkaW9IYW5kbGVUeXBlUGlwZToKICAgICAgICByZXR1cm4gU3RkaW9UeXBlLnBpcGU7CiAgICAgIGNhc2UgX3N0ZGlvSGFuZGxlVHlwZUZpbGU6CiAgICAgICAgcmV0dXJuIFN0ZGlvVHlwZS5maWxlOwogICAgfQogIH0KICBpZiAob2JqZWN0IGlzIF9JT1NpbmtJbXBsKSB7CiAgICB0cnkgewogICAgICBpZiAob2JqZWN0Ll90YXJnZXQgaXMgX0ZpbGVTdHJlYW1Db25zdW1lcikgewogICAgICAgIHJldHVybiBTdGRpb1R5cGUuZmlsZTsKICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICAvLyBPbmx5IHRoZSBpbnRlcmZhY2UgaW1wbGVtZW50ZWQsIF9zaW5rIG5vdCBhdmFpbGFibGUuCiAgICB9CiAgfQogIHJldHVybiBTdGRpb1R5cGUub3RoZXI7Cn0KCmNsYXNzIF9TdGRJT1V0aWxzIHsKICBleHRlcm5hbCBzdGF0aWMgX2dldFN0ZGlvT3V0cHV0U3RyZWFtKGludCBmZCk7CiAgZXh0ZXJuYWwgc3RhdGljIFN0ZGluIF9nZXRTdGRpb0lucHV0U3RyZWFtKGludCBmZCk7CgogIC8vLyBSZXR1cm5zIHRoZSBzb2NrZXQgdHlwZSBvciBgbnVsbGAgaWYgW3NvY2tldF0gaXMgbm90IGEgYnVpbHRpbiBzb2NrZXQuCiAgZXh0ZXJuYWwgc3RhdGljIGludCBfc29ja2V0VHlwZShTb2NrZXQgc29ja2V0KTsKICBleHRlcm5hbCBzdGF0aWMgX2dldFN0ZGlvSGFuZGxlVHlwZShpbnQgZmQpOwp9CoHiAE5OPAERASgkJCYlAS0jARwBRT8iSQQCAQRMEQM7BD4LAT8BBh0FLAVQTx4FOkAFTlElBUo2OwYXSRMTJEEtNBMaEAsfGBEKGDwaFQgeQxUjGCkRCi0YCA1NDRUjHxoPIykBGiA3ChgpEQoYCAYiBAEGLwYeAQYtBTwFQQVQBiwBBi8GHgEGLQVPOQVBBVIGLAEGSwZNTDQGR0hIEAY3Bk1KO0tKSx0HKQEGUBAFKAYfAQY8BhkKNClQTBoUBgQCAQRFA04aA0tJUA0DSD8DUUoLBDIRFwExAQY9Bi0BBjAFTiIGNAEGLgVOIgYwAQZLBk1MNAZHSEgQBjcGTUo7S0pLHQc9ASYpJzUBBiIGG0kZBAIBLxgZATcBFk4EAgEuGBkBNgEWTQQCAToPATsBLyUNIQwjFxYnCAcqJB4dBAETFx8EAgEjFgEYASspHwQBFxkEASAbBAEnIgQBHRUEATInBAElIwQBSSMjIQIBPBJDOzs9ASYuIiYiJiMoARUgKwIBDhAQAUMrEhMTASI3FBYWAgE8EjkRAgFABEtPDxQ8EgIBQgRLTw8UPBICAU8UHh4dNTw4JSMhHyEfBgQfGwQaNjQaJSMhHyEfBgQfCjMfCBI+BgQaAgEUMTYBTTIvAgESZGFydDppby9zdGRpby5kYXJ0MG9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9iaW4vc3RkaW9fcGF0Y2guZGFydJHjLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvbW1vbl9wYXRjaC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBfU3RkSU9VdGlscyB7CiAgQHBhdGNoCiAgc3RhdGljIFN0ZGluIF9nZXRTdGRpb0lucHV0U3RyZWFtKGludCBmZCkgewogICAgc3dpdGNoIChfZ2V0U3RkaW9IYW5kbGVUeXBlKGZkKSkgewogICAgICBjYXNlIF9zdGRpb0hhbmRsZVR5cGVUZXJtaW5hbDoKICAgICAgY2FzZSBfc3RkaW9IYW5kbGVUeXBlUGlwZToKICAgICAgY2FzZSBfc3RkaW9IYW5kbGVUeXBlU29ja2V0OgogICAgICAgIHJldHVybiBuZXcgU3RkaW4uXyhuZXcgX1NvY2tldC5fcmVhZFBpcGUoZmQpLCBmZCk7CiAgICAgIGNhc2UgX3N0ZGlvSGFuZGxlVHlwZUZpbGU6CiAgICAgICAgcmV0dXJuIG5ldyBTdGRpbi5fKG5ldyBfRmlsZVN0cmVhbS5mb3JTdGRpbigpLCBmZCk7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oCiAgICAgICAgICAgICJDb3VsZG4ndCBkZXRlcm1pbmUgZmlsZSB0eXBlIG9mIHN0ZGluIChmZCAkZmQpIik7CiAgICB9CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgX2dldFN0ZGlvT3V0cHV0U3RyZWFtKGludCBmZCkgewogICAgc3dpdGNoIChfZ2V0U3RkaW9IYW5kbGVUeXBlKGZkKSkgewogICAgICBjYXNlIF9zdGRpb0hhbmRsZVR5cGVUZXJtaW5hbDoKICAgICAgY2FzZSBfc3RkaW9IYW5kbGVUeXBlUGlwZToKICAgICAgY2FzZSBfc3RkaW9IYW5kbGVUeXBlU29ja2V0OgogICAgICBjYXNlIF9zdGRpb0hhbmRsZVR5cGVGaWxlOgogICAgICAgIHJldHVybiBuZXcgU3Rkb3V0Ll8obmV3IElPU2luayhuZXcgX1N0ZENvbnN1bWVyKGZkKSksIGZkKTsKICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigKICAgICAgICAgICAgIkNvdWxkbid0IGRldGVybWluZSBmaWxlIHR5cGUgb2Ygc3RkaW8gaGFuZGxlIChmZCAkZmQpIik7CiAgICB9CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgaW50IF9zb2NrZXRUeXBlKFNvY2tldCBzb2NrZXQpIHsKICAgIGlmIChzb2NrZXQgaXMgX1NvY2tldCkgcmV0dXJuIF9uYXRpdmVTb2NrZXRUeXBlKHNvY2tldC5fbmF0aXZlU29ja2V0KTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgc3RhdGljIGludCBfbmF0aXZlU29ja2V0VHlwZShfTmF0aXZlU29ja2V0IG5hdGl2ZVNvY2tldCkgewogICAgdmFyIHJlc3VsdCA9IF9nZXRTb2NrZXRUeXBlKG5hdGl2ZVNvY2tldCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oIkVycm9yIHJldHJpZXZpbmcgc29ja2V0IHR5cGUiLCAiIiwgcmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgX2dldFN0ZGlvSGFuZGxlVHlwZShpbnQgZmQpIG5hdGl2ZSAiRmlsZV9HZXRTdGRpb0hhbmRsZVR5cGUiOwp9CgpAcGF0Y2gKY2xhc3MgU3RkaW4gewogIEBwYXRjaAogIGludCByZWFkQnl0ZVN5bmMoKSB7CiAgICB2YXIgcmVzdWx0ID0gX3JlYWRCeXRlKF9mZCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IFN0ZGluRXhjZXB0aW9uKCJFcnJvciByZWFkaW5nIGJ5dGUgZnJvbSBzdGRpbiIsIHJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQHBhdGNoCiAgYm9vbCBnZXQgZWNob01vZGUgewogICAgdmFyIHJlc3VsdCA9IF9lY2hvTW9kZShfZmQpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBTdGRpbkV4Y2VwdGlvbigiRXJyb3IgZ2V0dGluZyB0ZXJtaW5hbCBlY2hvIG1vZGUiLCByZXN1bHQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBwYXRjaAogIHZvaWQgc2V0IGVjaG9Nb2RlKGJvb2wgZW5hYmxlZCkgewogICAgaWYgKCFfRW1iZWRkZXJDb25maWcuX21heVNldEVjaG9Nb2RlKSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgIlRoaXMgZW1iZWRkZXIgZGlzYWxsb3dzIHNldHRpbmcgU3RkaW4uZWNob01vZGUiKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfc2V0RWNob01vZGUoX2ZkLCBlbmFibGVkKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgU3RkaW5FeGNlcHRpb24oIkVycm9yIHNldHRpbmcgdGVybWluYWwgZWNobyBtb2RlIiwgcmVzdWx0KTsKICAgIH0KICB9CgogIEBwYXRjaAogIGJvb2wgZ2V0IGxpbmVNb2RlIHsKICAgIHZhciByZXN1bHQgPSBfbGluZU1vZGUoX2ZkKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgU3RkaW5FeGNlcHRpb24oIkVycm9yIGdldHRpbmcgdGVybWluYWwgbGluZSBtb2RlIiwgcmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAcGF0Y2gKICB2b2lkIHNldCBsaW5lTW9kZShib29sIGVuYWJsZWQpIHsKICAgIGlmICghX0VtYmVkZGVyQ29uZmlnLl9tYXlTZXRMaW5lTW9kZSkgewogICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAgICJUaGlzIGVtYmVkZGVyIGRpc2FsbG93cyBzZXR0aW5nIFN0ZGluLmxpbmVNb2RlIik7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX3NldExpbmVNb2RlKF9mZCwgZW5hYmxlZCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IFN0ZGluRXhjZXB0aW9uKCJFcnJvciBzZXR0aW5nIHRlcm1pbmFsIGxpbmUgbW9kZSIsIHJlc3VsdCk7CiAgICB9CiAgfQoKICBAcGF0Y2gKICBib29sIGdldCBzdXBwb3J0c0Fuc2lFc2NhcGVzIHsKICAgIHZhciByZXN1bHQgPSBfc3VwcG9ydHNBbnNpRXNjYXBlcyhfZmQpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBTdGRpbkV4Y2VwdGlvbigiRXJyb3IgZGV0ZXJtaW5pbmcgQU5TSSBzdXBwb3J0IiwgcmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0aWMgX2VjaG9Nb2RlKGludCBmZCkgbmF0aXZlICJTdGRpbl9HZXRFY2hvTW9kZSI7CiAgc3RhdGljIF9zZXRFY2hvTW9kZShpbnQgZmQsIGJvb2wgZW5hYmxlZCkgbmF0aXZlICJTdGRpbl9TZXRFY2hvTW9kZSI7CiAgc3RhdGljIF9saW5lTW9kZShpbnQgZmQpIG5hdGl2ZSAiU3RkaW5fR2V0TGluZU1vZGUiOwogIHN0YXRpYyBfc2V0TGluZU1vZGUoaW50IGZkLCBib29sIGVuYWJsZWQpIG5hdGl2ZSAiU3RkaW5fU2V0TGluZU1vZGUiOwogIHN0YXRpYyBfcmVhZEJ5dGUoaW50IGZkKSBuYXRpdmUgIlN0ZGluX1JlYWRCeXRlIjsKICBzdGF0aWMgX3N1cHBvcnRzQW5zaUVzY2FwZXMoaW50IGZkKSBuYXRpdmUgIlN0ZGluX0Fuc2lTdXBwb3J0ZWQiOwp9CgpAcGF0Y2gKY2xhc3MgU3Rkb3V0IHsKICBAcGF0Y2gKICBib29sIF9oYXNUZXJtaW5hbChpbnQgZmQpIHsKICAgIHRyeSB7CiAgICAgIF90ZXJtaW5hbFNpemUoZmQpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gY2F0Y2ggKF8pIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KCiAgQHBhdGNoCiAgaW50IF90ZXJtaW5hbENvbHVtbnMoaW50IGZkKSA9PiBfdGVybWluYWxTaXplKGZkKVswXTsKICBAcGF0Y2gKICBpbnQgX3Rlcm1pbmFsTGluZXMoaW50IGZkKSA9PiBfdGVybWluYWxTaXplKGZkKVsxXTsKCiAgc3RhdGljIExpc3QgX3Rlcm1pbmFsU2l6ZShpbnQgZmQpIHsKICAgIHZhciBzaXplID0gX2dldFRlcm1pbmFsU2l6ZShmZCk7CiAgICBpZiAoc2l6ZSBpcyEgTGlzdCkgewogICAgICB0aHJvdyBuZXcgU3Rkb3V0RXhjZXB0aW9uKCJDb3VsZCBub3QgZ2V0IHRlcm1pbmFsIHNpemUiLCBzaXplKTsKICAgIH0KICAgIHJldHVybiBzaXplOwogIH0KCiAgc3RhdGljIF9nZXRUZXJtaW5hbFNpemUoaW50IGZkKSBuYXRpdmUgIlN0ZG91dF9HZXRUZXJtaW5hbFNpemUiOwoKICBAcGF0Y2gKICBzdGF0aWMgYm9vbCBfc3VwcG9ydHNBbnNpRXNjYXBlcyhpbnQgZmQpIHsKICAgIHZhciByZXN1bHQgPSBfZ2V0QW5zaVN1cHBvcnRlZChmZCk7CiAgICBpZiAocmVzdWx0IGlzISBib29sKSB7CiAgICAgIHRocm93IG5ldyBTdGRvdXRFeGNlcHRpb24oIkVycm9yIGRldGVybWluaW5nIEFOU0kgc3VwcG9ydCIsIHJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIF9nZXRBbnNpU3VwcG9ydGVkKGludCBmZCkgbmF0aXZlICJTdGRvdXRfQW5zaVN1cHBvcnRlZCI7Cn0KCl9nZXRTdGRpb0hhbmRsZShfTmF0aXZlU29ja2V0IHNvY2tldCwgaW50IG51bSkgbmF0aXZlICJTb2NrZXRfR2V0U3RkaW9IYW5kbGUiOwpfZ2V0U29ja2V0VHlwZShfTmF0aXZlU29ja2V0IG5hdGl2ZVNvY2tldCkgbmF0aXZlICJTb2NrZXRfR2V0VHlwZSI7CoCoAE5OPAEgAQcUCS4nJSEjOyE8Dyc/BgQBCSknJSEjIUMPJ0YGBAEJKksRBAE9Lx1RBhMEAQlHAgEHDgkXIR1JBhMEAQkWIR1MBhMEAQkkLCI9Bi0dTAYEAQkWIR1MBhMEAQkkLCI9Bi0dTAYEAQkhLB1KBhMEATdIN0g0RAIBBw8JHgoZExIUBgQBCTgJNgEmJRlGBhEEAUMBCS0oG0sGEwQBQgIBT0QBHmRhcnQ6aW8tcGF0Y2gvc3RkaW9fcGF0Y2guZGFydDZvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW8vc3RyaW5nX3RyYW5zZm9ybWVyLmRhcnSN2i8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuaW87CgovLy8gVGhlIGN1cnJlbnQgc3lzdGVtIGVuY29kaW5nLgovLy8KLy8vIFRoaXMgaXMgdXNlZCBmb3IgY29udmVydGluZyBmcm9tIGJ5dGVzIHRvIGFuZCBmcm9tIFN0cmluZ3Mgd2hlbgovLy8gY29tbXVuaWNhdGluZyBvbiBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIuCi8vLwovLy8gT24gV2luZG93cyB0aGlzIHdpbGwgdXNlIHRoZSBjdXJyZW50bHkgYWN0aXZlIGNvZGUgcGFnZSBmb3IgdGhlIGNvbnZlcnNpb24uCi8vLyBPbiBhbGwgb3RoZXIgc3lzdGVtcyBpdCB3aWxsIGFsd2F5cyB1c2UgVVRGLTguCmNvbnN0IFN5c3RlbUVuY29kaW5nIHN5c3RlbUVuY29kaW5nID0gY29uc3QgU3lzdGVtRW5jb2RpbmcoKTsKQERlcHJlY2F0ZWQoIlVzZSBzeXN0ZW1FbmNvZGluZyBpbnN0ZWFkIikKY29uc3QgU3lzdGVtRW5jb2RpbmcgU1lTVEVNX0VOQ09ESU5HID0gY29uc3QgU3lzdGVtRW5jb2RpbmcoKTsKCi8vLyBUaGUgc3lzdGVtIGVuY29kaW5nIGlzIHRoZSBjdXJyZW50IGNvZGUgcGFnZSBvbiBXaW5kb3dzIGFuZCBVVEYtOCBvbiBMaW51eAovLy8gYW5kIE1hYy4KY2xhc3MgU3lzdGVtRW5jb2RpbmcgZXh0ZW5kcyBFbmNvZGluZyB7CiAgLy8vIENyZWF0ZXMgYSBjb25zdCBTeXN0ZW1FbmNvZGluZy4KICAvLy8KICAvLy8gVXNlcnMgc2hvdWxkIHVzZSB0aGUgdG9wLWxldmVsIGNvbnN0YW50LCBbc3lzdGVtRW5jb2RpbmddLgogIGNvbnN0IFN5c3RlbUVuY29kaW5nKCk7CgogIFN0cmluZyBnZXQgbmFtZSA9PiAnc3lzdGVtJzsKCiAgTGlzdDxpbnQ+IGVuY29kZShTdHJpbmcgaW5wdXQpID0+IGVuY29kZXIuY29udmVydChpbnB1dCk7CiAgU3RyaW5nIGRlY29kZShMaXN0PGludD4gZW5jb2RlZCkgPT4gZGVjb2Rlci5jb252ZXJ0KGVuY29kZWQpOwoKICBDb252ZXJ0ZXI8U3RyaW5nLCBMaXN0PGludD4+IGdldCBlbmNvZGVyIHsKICAgIGlmIChQbGF0Zm9ybS5vcGVyYXRpbmdTeXN0ZW0gPT0gIndpbmRvd3MiKSB7CiAgICAgIHJldHVybiBjb25zdCBfV2luZG93c0NvZGVQYWdlRW5jb2RlcigpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGNvbnN0IFV0ZjhFbmNvZGVyKCk7CiAgICB9CiAgfQoKICBDb252ZXJ0ZXI8TGlzdDxpbnQ+LCBTdHJpbmc+IGdldCBkZWNvZGVyIHsKICAgIGlmIChQbGF0Zm9ybS5vcGVyYXRpbmdTeXN0ZW0gPT0gIndpbmRvd3MiKSB7CiAgICAgIHJldHVybiBjb25zdCBfV2luZG93c0NvZGVQYWdlRGVjb2RlcigpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGNvbnN0IFV0ZjhEZWNvZGVyKCk7CiAgICB9CiAgfQp9CgpjbGFzcyBfV2luZG93c0NvZGVQYWdlRW5jb2RlciBleHRlbmRzIENvbnZlcnRlcjxTdHJpbmcsIExpc3Q8aW50Pj4gewogIGNvbnN0IF9XaW5kb3dzQ29kZVBhZ2VFbmNvZGVyKCk7CgogIExpc3Q8aW50PiBjb252ZXJ0KFN0cmluZyBpbnB1dCkgewogICAgTGlzdDxpbnQ+IGVuY29kZWQgPSBfZW5jb2RlU3RyaW5nKGlucHV0KTsKICAgIGlmIChlbmNvZGVkID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBjaGFyYWN0ZXIgZm9yIGVuY29kaW5nIik7CiAgICB9CiAgICByZXR1cm4gZW5jb2RlZDsKICB9CgogIC8qKgogICAqIFN0YXJ0cyBhIGNodW5rZWQgY29udmVyc2lvbi4KICAgKi8KICBTdHJpbmdDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8TGlzdDxpbnQ+PiBzaW5rKSB7CiAgICByZXR1cm4gbmV3IF9XaW5kb3dzQ29kZVBhZ2VFbmNvZGVyU2luayhzaW5rKTsKICB9CgogIGV4dGVybmFsIHN0YXRpYyBMaXN0PGludD4gX2VuY29kZVN0cmluZyhTdHJpbmcgc3RyaW5nKTsKfQoKY2xhc3MgX1dpbmRvd3NDb2RlUGFnZUVuY29kZXJTaW5rIGV4dGVuZHMgU3RyaW5nQ29udmVyc2lvblNpbmtCYXNlIHsKICAvLyBUT0RPKGZsb2l0c2NoKTogcHJvdmlkZSBtb3JlIGVmZmljaWVudCBjb252ZXJzaW9ucyB3aGVuIHRoZSBpbnB1dCBpcwogIC8vIG5vdCBhIFN0cmluZy4KCiAgZmluYWwgU2luazxMaXN0PGludD4+IF9zaW5rOwoKICBfV2luZG93c0NvZGVQYWdlRW5jb2RlclNpbmsodGhpcy5fc2luayk7CgogIHZvaWQgY2xvc2UoKSB7CiAgICBfc2luay5jbG9zZSgpOwogIH0KCiAgdm9pZCBhZGQoU3RyaW5nIHN0cmluZykgewogICAgTGlzdDxpbnQ+IGVuY29kZWQgPSBfV2luZG93c0NvZGVQYWdlRW5jb2Rlci5fZW5jb2RlU3RyaW5nKHN0cmluZyk7CiAgICBpZiAoZW5jb2RlZCA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oIkludmFsaWQgY2hhcmFjdGVyIGZvciBlbmNvZGluZyIpOwogICAgfQogICAgX3NpbmsuYWRkKGVuY29kZWQpOwogIH0KCiAgdm9pZCBhZGRTbGljZShTdHJpbmcgc291cmNlLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBpZiAoc3RhcnQgIT0gMCB8fCBlbmQgIT0gc291cmNlLmxlbmd0aCkgewogICAgICBzb3VyY2UgPSBzb3VyY2Uuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpOwogICAgfQogICAgYWRkKHNvdXJjZSk7CiAgICBpZiAoaXNMYXN0KSBjbG9zZSgpOwogIH0KfQoKY2xhc3MgX1dpbmRvd3NDb2RlUGFnZURlY29kZXIgZXh0ZW5kcyBDb252ZXJ0ZXI8TGlzdDxpbnQ+LCBTdHJpbmc+IHsKICBjb25zdCBfV2luZG93c0NvZGVQYWdlRGVjb2RlcigpOwoKICBTdHJpbmcgY29udmVydChMaXN0PGludD4gaW5wdXQpIHsKICAgIHJldHVybiBfZGVjb2RlQnl0ZXMoaW5wdXQpOwogIH0KCiAgLyoqCiAgICogU3RhcnRzIGEgY2h1bmtlZCBjb252ZXJzaW9uLgogICAqLwogIEJ5dGVDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8U3RyaW5nPiBzaW5rKSB7CiAgICByZXR1cm4gbmV3IF9XaW5kb3dzQ29kZVBhZ2VEZWNvZGVyU2luayhzaW5rKTsKICB9CgogIGV4dGVybmFsIHN0YXRpYyBTdHJpbmcgX2RlY29kZUJ5dGVzKExpc3Q8aW50PiBieXRlcyk7Cn0KCmNsYXNzIF9XaW5kb3dzQ29kZVBhZ2VEZWNvZGVyU2luayBleHRlbmRzIEJ5dGVDb252ZXJzaW9uU2lua0Jhc2UgewogIC8vIFRPRE8oZmxvaXRzY2gpOiBwcm92aWRlIG1vcmUgZWZmaWNpZW50IGNvbnZlcnNpb25zIHdoZW4gdGhlIGlucHV0IGlzCiAgLy8gYSBzbGljZS4KCiAgZmluYWwgU2luazxTdHJpbmc+IF9zaW5rOwoKICBfV2luZG93c0NvZGVQYWdlRGVjb2RlclNpbmsodGhpcy5fc2luayk7CgogIHZvaWQgY2xvc2UoKSB7CiAgICBfc2luay5jbG9zZSgpOwogIH0KCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGJ5dGVzKSB7CiAgICBfc2luay5hZGQoX1dpbmRvd3NDb2RlUGFnZURlY29kZXIuX2RlY29kZUJ5dGVzKGJ5dGVzKSk7CiAgfQp9CoCEAE5OPAERASEERC8EUDM+Kj8BTw0oJgZBGgEfATxAAS0xLg0iBgQBLTEuDSIGBAIBRSMBJC4bQwYUBAEGIgZGMgQBOgIBRUoTAR8BKwEREwQBHEcbQwYYBAFCLi0GERkEAgFFIwEkIAQBBiIGQTIEATgCAUNKDgEcASsBERMEAR48BAIBH2RhcnQ6aW8vc3RyaW5nX3RyYW5zZm9ybWVyLmRhcnQvb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2lvL3N5bmNfc29ja2V0LmRhcnSP0i8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuaW87CgovKioKICogQSBsb3ctbGV2ZWwgY2xhc3MgZm9yIGNvbW11bmljYXRpbmcgc3luY2hyb25vdXNseSBvdmVyIGEgVENQIHNvY2tldC4KICoKICogV2FybmluZzogW1Jhd1N5bmNocm9ub3VzU29ja2V0XSBzaG91bGQgcHJvYmFibHkgb25seSBiZSB1c2VkIHRvIGNvbm5lY3QgdG8KICogJ2xvY2FsaG9zdCcuIFRoZSBvcGVyYXRpb25zIGJlbG93IHdpbGwgYmxvY2sgdGhlIGNhbGxpbmcgdGhyZWFkIHRvIHdhaXQgZm9yCiAqIGEgcmVzcG9uc2UgZnJvbSB0aGUgbmV0d29yay4gVGhlIHRocmVhZCBjYW4gcHJvY2VzcyBubyBvdGhlciBldmVudHMgd2hpbGUKICogd2FpdGluZyBmb3IgdGhlc2Ugb3BlcmF0aW9ucyB0byBjb21wbGV0ZS4gW1Jhd1N5bmNocm9ub3VzU29ja2V0XSBpcyBub3QKICogc3VpdGFibGUgZm9yIGFwcGxpY2F0aW9ucyB0aGF0IHJlcXVpcmUgaGlnaCBwZXJmb3JtYW5jZSBvciBhc3luY2hyb25vdXMgSS9PCiAqIHN1Y2ggYXMgYSBzZXJ2ZXIuIEluc3RlYWQgc3VjaCBhcHBsaWNhdGlvbnMgc2hvdWxkIHVzZSB0aGUgbm9uLWJsb2NraW5nCiAqIHNvY2tldHMgYW5kIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zIGluIHRoZSBTb2NrZXQgb3IgUmF3U29ja2V0IGNsYXNzZXMuCiAqLwphYnN0cmFjdCBjbGFzcyBSYXdTeW5jaHJvbm91c1NvY2tldCB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBzb2NrZXQgY29ubmVjdGlvbiBhbmQgcmV0dXJucyBhIFtSYXdTeW5jaHJvbm91c1NvY2tldF0uCiAgICoKICAgKiBbaG9zdF0gY2FuIGVpdGhlciBiZSBhIFtTdHJpbmddIG9yIGFuIFtJbnRlcm5ldEFkZHJlc3NdLiBJZiBbaG9zdF0gaXMgYQogICAqIFtTdHJpbmddLCBbY29ubmVjdFN5bmNdIHdpbGwgcGVyZm9ybSBhIFtJbnRlcm5ldEFkZHJlc3MubG9va3VwXSBhbmQgdHJ5CiAgICogYWxsIHJldHVybmVkIFtJbnRlcm5ldEFkZHJlc3NdZXMsIHVudGlsIGNvbm5lY3RlZC4gVW5sZXNzIGEKICAgKiBjb25uZWN0aW9uIHdhcyBlc3RhYmxpc2hlZCwgdGhlIGVycm9yIGZyb20gdGhlIGZpcnN0IGZhaWxpbmcgY29ubmVjdGlvbiBpcwogICAqIHJldHVybmVkLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBSYXdTeW5jaHJvbm91c1NvY2tldCBjb25uZWN0U3luYyhob3N0LCBpbnQgcG9ydCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIG51bWJlciBvZiByZWNlaXZlZCBhbmQgdW5yZWFkIGJ5dGVzIGluIHRoZSBzb2NrZXQgdGhhdCBjYW4gYmUKICAgKiByZWFkLgogICAqLwogIGludCBhdmFpbGFibGUoKTsKCiAgLyoqCiAgICogQ2xvc2VzIHRoZSBbUmF3U3luY2hyb25vdXNTb2NrZXRdLgogICAqCiAgICogT25jZSBbY2xvc2VTeW5jXSBoYXMgYmVlbiBjYWxsZWQsIGF0dGVtcHRpbmcgdG8gY2FsbCBbcmVhZFN5bmNdLAogICAqIFtyZWFkSW50b1N5bmNdLCBbd3JpdGVGcm9tU3luY10sIFtyZW1vdGVBZGRyZXNzXSwgYW5kIFtyZW1vdGVQb3J0XSB3aWxsCiAgICogY2F1c2UgYSBbU29ja2V0RXhjZXB0aW9uXSB0byBiZSB0aHJvd24uCiAgICovCiAgdm9pZCBjbG9zZVN5bmMoKTsKCiAgLyoqCiAgICogUmVhZHMgaW50byBhbiBleGlzdGluZyBbTGlzdDxpbnQ+XSBmcm9tIHRoZSBzb2NrZXQgaW50byB0aGUgcmFuZ2U6CiAgICogW1tzdGFydF0sW2VuZF0pLgogICAqCiAgICogUmVhZHMgaW50byBhbiBleGlzdGluZyBbTGlzdDxpbnQ+XSBmcm9tIHRoZSBzb2NrZXQuIElmIFtzdGFydF0gaXMgcHJlc2VudCwKICAgKiB0aGUgYnl0ZXMgd2lsbCBiZSBmaWxsZWQgaW50byBbYnVmZmVyXSBmcm9tIGluZGV4IFtzdGFydF0sIG90aGVyd2lzZSBpbmRleAogICAqIDAuIElmIFtlbmRdIGlzIHByZXNlbnQsIFtlbmRdIC0gW3N0YXJ0XSBieXRlcyB3aWxsIGJlIHJlYWQgaW50byBbYnVmZmVyXSwKICAgKiBvdGhlcndpc2UgdXAgdG8gW2J1ZmZlci5sZW5ndGhdLiBJZiBbZW5kXSA9PSBbc3RhcnRdLCBubyBieXRlcyBhcmUgcmVhZC4KICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZC4KICAgKi8KICBpbnQgcmVhZEludG9TeW5jKExpc3Q8aW50PiBidWZmZXIsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSk7CgogIC8qKgogICAqIFJlYWRzIHVwIHRvIFtieXRlc10gYnl0ZXMgZnJvbSB0aGUgc29ja2V0LgogICAqCiAgICogQmxvY2tzIGFuZCB3YWl0cyBmb3IgYSByZXNwb25zZSBvZiB1cCB0byBhIHNwZWNpZmllZCBudW1iZXIgb2YgYnl0ZXMKICAgKiBzZW50IGJ5IHRoZSBzb2NrZXQuIFtieXRlc10gc3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0bwogICAqIGJlIHJlYWQuIFJldHVybnMgdGhlIGxpc3Qgb2YgYnl0ZXMgcmVhZCwgd2hpY2ggY291bGQgYmUgbGVzcyB0aGFuIHRoZQogICAqIHZhbHVlIHNwZWNpZmllZCBieSBbYnl0ZXNdLgogICAqLwogIExpc3Q8aW50PiByZWFkU3luYyhpbnQgYnl0ZXMpOwoKICAvKioKICAgKiBTaHV0ZG93biBhIHNvY2tldCBpbiB0aGUgcHJvdmlkZWQgZGlyZWN0aW9uLgogICAqCiAgICogQ2FsbGluZyBzaHV0ZG93biB3aWxsIG5ldmVyIHRocm93IGFuIGV4Y2VwdGlvbiBhbmQgY2FsbGluZyBpdCBzZXZlcmFsIHRpbWVzCiAgICogaXMgc3VwcG9ydGVkLiBJZiBib3RoIFtTb2NrZXREaXJlY3Rpb24uUkVDRUlWRV0gYW5kIFtTb2NrZXREaXJlY3Rpb24uU0VORF0KICAgKiBkaXJlY3Rpb25zIGFyZSBjbG9zZWQsIHRoZSBzb2NrZXQgaXMgY2xvc2VkIGNvbXBsZXRlbHksIHRoZSBzYW1lIGFzIGlmCiAgICogW2Nsb3NlU3luY10gaGFzIGJlZW4gY2FsbGVkLgogICAqLwogIHZvaWQgc2h1dGRvd24oU29ja2V0RGlyZWN0aW9uIGRpcmVjdGlvbik7CgogIC8qKgogICAqIFdyaXRlcyBkYXRhIGZyb20gYSBzcGVjaWZpZWQgcmFuZ2UgaW4gYSBbTGlzdDxpbnQ+XSB0byB0aGUgc29ja2V0LgogICAqCiAgICogV3JpdGVzIGludG8gdGhlIHNvY2tldCBmcm9tIGEgW0xpc3Q8aW50Pl0uIElmIFtzdGFydF0gaXMgcHJlc2VudCwgdGhlIGJ5dGVzCiAgICogd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBzb2NrZXQgc3RhcnRpbmcgZnJvbSBpbmRleCBbc3RhcnRdLiBJZiBbc3RhcnRdIGlzCiAgICogbm90IHByZXNlbnQsIHRoZSBieXRlcyB3aWxsIGJlIHdyaXR0ZW4gc3RhcnRpbmcgZnJvbSBpbmRleCAwLiBJZiBbZW5kXSBpcwogICAqIHByZXNlbnQsIHRoZSBbZW5kXSAtIFtzdGFydF0gYnl0ZXMgd2lsbCBiZSB3cml0dGVuIGludG8gdGhlIHNvY2tldCBzdGFydGluZwogICAqIGF0IGluZGV4IFtzdGFydF0uIElmIFtlbmRdIGlzIG5vdCBwcm92aWRlZCwgW2J1ZmZlci5sZW5ndGhdIGVsZW1lbnRzIHdpbGwKICAgKiBiZSB3cml0dGVuIHRvIHRoZSBzb2NrZXQgc3RhcnRpbmcgZnJvbSBpbmRleCBbc3RhcnRdLiBJZiBbZW5kXSA9PSBbc3RhcnRdLAogICAqIG5vdGhpbmcgaGFwcGVucy4KICAgKi8KICB2b2lkIHdyaXRlRnJvbVN5bmMoTGlzdDxpbnQ+IGJ1ZmZlciwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKTsKCiAgLyoqCiAgICogVGhlIHBvcnQgdXNlZCBieSB0aGlzIHNvY2tldC4KICAgKi8KICBpbnQgZ2V0IHBvcnQ7CgogIC8qKgogICAqIFRoZSByZW1vdGUgcG9ydCBjb25uZWN0ZWQgdG8gYnkgdGhpcyBzb2NrZXQuCiAgICovCiAgaW50IGdldCByZW1vdGVQb3J0OwoKICAvKioKICAgKiBUaGUgW0ludGVybmV0QWRkcmVzc10gdXNlZCB0byBjb25uZWN0IHRoaXMgc29ja2V0LgogICAqLwogIEludGVybmV0QWRkcmVzcyBnZXQgYWRkcmVzczsKCiAgLyoqCiAgICogVGhlIHJlbW90ZSBbSW50ZXJuZXRBZGRyZXNzXSBjb25uZWN0ZWQgdG8gYnkgdGhpcyBzb2NrZXQuCiAgICovCiAgSW50ZXJuZXRBZGRyZXNzIGdldCByZW1vdGVBZGRyZXNzOwp9Cm8ATk48AREBBEgDTk9NS09LSwQmBksFTU1BUA8GRAEGTwsGEwEGKAVGTS0GFAEGSBYFUFBPTicGQAEGMAVKSkshBiEBBjIFUVBMIgYsAQZIBVFOT1FPUBYGQgEGIwYQAQYyBhYBBjgGHwEGPwYlAgEYZGFydDppby9zeW5jX3NvY2tldC5kYXJ0KG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jbGkvY2xpLmRhcnSBPy8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8ge0BjYXRlZ29yeSBWTX0KbGlicmFyeSBkYXJ0LmNsaTsKCmltcG9ydCAnZGFydDphc3luYyc7CmltcG9ydCAnZGFydDptYXRoJzsKCnBhcnQgJ3dhaXRfZm9yLmRhcnQnOwoNAE5OPAETEgEVFAEWAQhkYXJ0OmNsaS1vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY2xpL3dhaXRfZm9yLmRhcnSYXS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY2xpOwoKLyoqCiAqIFN5bmNocm9ub3VzbHkgYmxvY2tzIHRoZSBjYWxsaW5nIGlzb2xhdGUgdG8gd2FpdCBmb3IgYXN5bmNocm9ub3VzIGV2ZW50cyB0bwogKiBjb21wbGV0ZS4KICoKICogSWYgdGhlIFt0aW1lb3V0XSBwYXJhbWV0ZXIgaXMgc3VwcGxpZWQsIFt3YWl0Rm9yRXZlbnRdIHdpbGwgcmV0dXJuIGFmdGVyCiAqIHRoZSBzcGVjaWZpZWQgdGltZW91dCBldmVuIGlmIG5vIGV2ZW50cyBoYXZlIG9jY3VycmVkLgogKgogKiBUaGlzIGNhbGwgZG9lcyB0aGUgZm9sbG93aW5nOgogKiAtIHN1c3BlbmRzIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBzdGFjaywKICogLSBydW5zIHRoZSBtaWNyb3Rhc2sgcXVldWUgdW50aWwgaXQgaXMgZW1wdHksCiAqIC0gd2FpdHMgdW50aWwgdGhlIG1lc3NhZ2UgcXVldWUgaXMgbm90IGVtcHR5LAogKiAtIGhhbmRsZXMgbWVzc2FnZXMgb24gdGhlIG1lc3NhZ2UgcXVldWUsIHBsdXMgdGhlaXIgYXNzb2NpYXRlZCBtaWNyb3Rhc2tzLAogKiAgIHVudGlsIHRoZSBtZXNzYWdlIHF1ZXVlIGlzIGVtcHR5LAogKiAtIHJlc3VtZXMgdGhlIG9yaWdpbmFsIHN0YWNrLgogKgogKiBUaGlzIGZ1bmN0aW9uIGJyZWFrcyB0aGUgdXN1YWwgcHJvbWlzZSBvZmZlcmVkIGJ5IERhcnQgc2VtYW50aWNzIHRoYXQKICogbWVzc2FnZSBoYW5kbGVycyBhbmQgbWljcm90YXNrcyBydW4gdG8gY29tcGxldGlvbiBiZWZvcmUgdGhlIG5leHQgbWVzc2FnZQogKiBoYW5kbGVyIG9yIG1pY3JvdGFzayBiZWdpbnMgdG8gcnVuLiBPZiBwYXJ0aWN1bGFyIG5vdGUgaXMgdGhhdCB1c2Ugb2YgdGhpcwogKiBmdW5jdGlvbiBpbiBhIGZpbmFsbHkgYmxvY2sgd2lsbCBhbGxvdyBtaWNyb3Rhc2tzIGFuZCBtZXNzYWdlIGhhbmRsZXJzIHRvCiAqIHJ1biBiZWZvcmUgYWxsIGZpbmFsbHkgYmxvY2tzIGZvciBhbiBleGNlcHRpb24gaGF2ZSBjb21wbGV0ZWQsIHBvc3NpYmx5CiAqIGJyZWFraW5nIGludmFyaWFudHMgaW4geW91ciBwcm9ncmFtLgogKgogKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc3luY2hyb25vdXNseSB0aHJvdyB0aGUgZmlyc3QgdW5oYW5kbGVkIGV4Y2VwdGlvbiBpdAogKiBlbmNvdW50ZXJzIGluIHJ1bm5pbmcgdGhlIG1pY3JvdGFza3MgYW5kIG1lc3NhZ2UgaGFuZGxlcnMgYXMgdGhvdWdoIHRoZQogKiB0aHJvd2luZyBtaWNyb3Rhc2sgb3IgbWVzc2FnZSBoYW5kbGVyIHdhcyB0aGUgb25seSBEYXJ0IGludm9jYXRpb24gb24gdGhlCiAqIHN0YWNrLiBUaGF0IGlzLCB1bmhhbmRsZWQgZXhjZXB0aW9ucyBpbiBhIG1pY3JvdGFzayBvciBtZXNzYWdlIGhhbmRsZXIgd2lsbAogKiBza2lwIG92ZXIgc3RhY2tzIHN1c3BlbmRlZCBpbiBhIGNhbGwgdG8gW3dhaXRGb3JFdmVudF0uCiAqCiAqIENhbGxzIHRvIHRoaXMgZnVuY3Rpb24gbWF5IGJlIG5lc3RlZC4gRWFybGllciBpbnZvY2F0aW9ucyB3aWxsIG5vdAogKiBiZSBhYmxlIHRvIGNvbXBsZXRlIHVudGlsIHN1YnNlcXVlbnQgb25lcyBkby4gTWVzc2FnZXMgdGhhdCBhcnJpdmUgYWZ0ZXIKICogYSBzdWJzZXF1ZW50IGludm9jYXRpb24gYXJlICJjb25zdW1lZCIgYnkgdGhhdCBpbnZvY2F0aW9uLCBhbmQgZG8gbm90CiAqIHVuYmxvY2sgYW4gZWFybGllciBpbnZvY2F0aW9uLiBQbGVhc2UgYmUgYXdhcmUgdGhhdCBuZXN0aW5nIGNhbGxzIHRvCiAqIFt3YWl0Rm9yRXZlbnRdIGNhbiBsZWFkIHRvIGRlYWRsb2NrIHdoZW4gc3Vic2VxdWVudCBjYWxscyBibG9jayB0byB3YWl0IGZvcgogKiBhIGNvbmRpdGlvbiB0aGF0IGlzIG9ubHkgc2F0aXNmaWVkIGFmdGVyIGFuIGVhcmxpZXIgY2FsbCByZXR1cm5zLgogKgogKiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgY2FsbCBpcyBvbmx5IGF2YWlsYWJsZSBpbiB0aGUgc3RhbmRhbG9uZSBjb21tYW5kLWxpbmUKICogRGFydCBWTS4gRnVydGhlciwgYmVjYXVzZSBpdCBzdXNwZW5kcyB0aGUgY3VycmVudCBleGVjdXRpb24gc3RhY2sgdW50aWwgdGhlCiAqIG1lc3NhZ2UgcXVldWUgaXMgZW1wdHksIGV2ZW4gd2hlbiBydW5uaW5nIGluIHRoZSBzdGFuZGFsb25lIGNvbW1hbmQtbGluZSBWTQogKiB0aGVyZSBleGlzdHMgYSByaXNrIHRoYXQgdGhlIGN1cnJlbnQgZXhlY3V0aW9uIHN0YWNrIHdpbGwgYmUgc3RhcnZlZC4KICovCmV4dGVybmFsIHZvaWQgX3dhaXRGb3JFdmVudChpbnQgdGltZW91dE1pbGxpcyk7CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCnZvaWQgRnVuY3Rpb24oaW50KSBfZ2V0V2FpdEZvckV2ZW50KCkgPT4gX3dhaXRGb3JFdmVudDsKCi8vIFRoaXMgc2hvdWxkIGJlIHNldCBmcm9tIEMrKyBjb2RlIGJ5IHRoZSBlbWJlZGRlciB0byB3aXJlIHVwIHdhaXRGb3IoKSB0byB0aGUKLy8gbmF0aXZlIGltcGxlbWVudGF0aW9uLiBJbiB0aGUgc3RhbmRhbG9uZSBWTSB0aGlzIGlzIHNldCB0byBfd2FpdEZvckV2ZW50KCkKLy8gYWJvdmUuIElmIGl0IGlzIG51bGwsIGNhbGxpbmcgd2FpdEZvcigpIHdpbGwgdGhyb3cgYW4gVW5zdXBwb3J0ZWRFcnJvci4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQp2b2lkIEZ1bmN0aW9uKGludCkgX3dhaXRGb3JFdmVudENsb3N1cmU7CgpjbGFzcyBfV2FpdEZvclV0aWxzIHsKICBzdGF0aWMgdm9pZCB3YWl0Rm9yRXZlbnQoe0R1cmF0aW9uIHRpbWVvdXR9KSB7CiAgICBpZiAoX3dhaXRGb3JFdmVudENsb3N1cmUgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigid2FpdEZvciBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZW1iZWRkZXIiKTsKICAgIH0KICAgIF93YWl0Rm9yRXZlbnRDbG9zdXJlKHRpbWVvdXQgPT0gbnVsbCA/IDAgOiBtYXgoMSwgdGltZW91dC5pbk1pbGxpc2Vjb25kcykpOwogIH0KfQoKLyoqCiAqIFN1c3BlbmRzIHRoZSBzdGFjaywgcnVucyBtaWNyb3Rhc2tzLCBhbmQgaGFuZGxlcyBpbmNvbWluZyBldmVudHMgdW50aWwKICogW2Z1dHVyZV0gY29tcGxldGVzLgogKgogKiBXQVJOSU5HOiBFWFBFUklNRU5UQUwuIFVTRSBBVCBZT1VSIE9XTiBSSVNLLgogKgogKiBUaGlzIGNhbGwgZG9lcyB0aGUgZm9sbG93aW5nOgogKiAtIFdoaWxlIFtmdXR1cmVdIGlzIG5vdCBjb21wbGV0ZWQ6CiAqICAgLSBzdXNwZW5kcyB0aGUgY3VycmVudCBleGVjdXRpb24gc3RhY2ssCiAqICAgLSBydW5zIHRoZSBtaWNyb3Rhc2sgcXVldWUgdW50aWwgaXQgaXMgZW1wdHksCiAqICAgLSB3YWl0cyB1bnRpbCB0aGUgbWVzc2FnZSBxdWV1ZSBpcyBub3QgZW1wdHksCiAqICAgLSBoYW5kbGVzIG1lc3NhZ2VzIG9uIHRoZSBtZXNzYWdlIHF1ZXVlLCBwbHVzIHRoZWlyIGFzc29jaWF0ZWQgbWljcm90YXNrcywKICogICAgIHVudGlsIHRoZSBtZXNzYWdlIHF1ZXVlIGlzIGVtcHR5LAogKiAgIC0gcmVzdW1lcyB0aGUgb3JpZ2luYWwgc3RhY2suCiAqCiAqIFRoaXMgZnVuY3Rpb24gYnJlYWtzIHRoZSB1c3VhbCBwcm9taXNlIG9mZmVyZWQgYnkgRGFydCBzZW1hbnRpY3MgdGhhdAogKiBtZXNzYWdlIGhhbmRsZXJzIGFuZCBtaWNyb3Rhc2tzIHJ1biB0byBjb21wbGV0aW9uIGJlZm9yZSB0aGUgbmV4dCBtZXNzYWdlCiAqIGhhbmRsZXIgb3IgbWljcm90YXNrIGJlZ2lucyB0byBydW4uIE9mIHBhcnRpY3VsYXIgbm90ZSBpcyB0aGF0IHVzZSBvZiB0aGlzCiAqIGZ1bmN0aW9uIGluIGEgZmluYWxseSBibG9jayB3aWxsIGFsbG93IG1pY3JvdGFza3MgYW5kIG1lc3NhZ2UgaGFuZGxlcnMgdG8KICogcnVuIGJlZm9yZSBhbGwgZmluYWxseSBibG9ja3MgZm9yIGFuIGV4Y2VwdGlvbiBoYXZlIGNvbXBsZXRlZCwgcG9zc2libHkKICogYnJlYWtpbmcgaW52YXJpYW50cyBpbiB5b3VyIHByb2dyYW0uCiAqCiAqIFVzZSBvZiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjb25zaWRlcmVkIGEgbGFzdCByZXNvcnQgd2hlbiBpdCBpcyBub3QKICogcG9zc2libGUgdG8gY29udmVydCBhIERhcnQgcHJvZ3JhbSBlbnRpcmVseSB0byBhbiBhc3luY2hyb25vdXMgc3R5bGUgdXNpbmcKICogYGFzeW5jYCBhbmQgYGF3YWl0YC4KICoKICogSWYgdGhlIFtGdXR1cmVdIGNvbXBsZXRlcyBub3JtYWxseSwgaXRzIHJlc3VsdCBpcyByZXR1cm5lZC4gSWYgdGhlIFtGdXR1cmVdCiAqIGNvbXBsZXRlcyB3aXRoIGFuIGVycm9yLCB0aGUgZXJyb3IgYW5kIHN0YWNrIHRyYWNlIGFyZSB3cmFwcGVkIGluIGFuCiAqIFtBc3luY0Vycm9yXSBhbmQgdGhyb3duLiBJZiBhIG1pY3JvdGFzayBvciBtZXNzYWdlIGhhbmRsZXIgcnVuIGR1cmluZyB0aGlzCiAqIGNhbGwgcmVzdWx0cyBpbiBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uLCB0aGF0IGV4Y2VwdGlvbiB3aWxsIGJlIHByb3BhZ2F0ZWQKICogYXMgdGhvdWdoIHRoZSBtaWNyb3Rhc2sgb3IgbWVzc2FnZSBoYW5kbGVyIHdhcyB0aGUgb25seSBEYXJ0IGludm9jYXRpb24gb24KICogdGhlIHN0YWNrLiBUaGF0IGlzLCB1bmhhbmRsZWQgZXhjZXB0aW9ucyBpbiBhIG1pY3JvdGFzayBvciBtZXNzYWdlIGhhbmRsZXIKICogd2lsbCBza2lwIG92ZXIgc3RhY2tzIHN1c3BlbmRlZCBpbiBhIGNhbGwgdG8gW3dhaXRGb3JdLgogKgogKiBJZiB0aGUgb3B0aW9uYWwgYHRpbWVvdXRgIHBhcmFtZXRlciBpcyBwYXNzZWQsIFt3YWl0Rm9yXSB0aHJvd3MgYQogKiBbVGltZW91dEV4Y2VwdGlvbl0gaWYgdGhlIFtGdXR1cmVdIGlzIG5vdCBjb21wbGV0ZWQgd2l0aGluIHRoZSBzcGVjaWZpZWQKICogcGVyaW9kLgogKgogKiBDYWxscyB0byBbd2FpdEZvcl0gbWF5IGJlIG5lc3RlZC4gRWFybGllciBpbnZvY2F0aW9ucyB3aWxsIG5vdCBjb21wbGV0ZQogKiB1bnRpbCBzdWJzZXF1ZW50IG9uZXMgZG8sIGJ1dCB0aGUgY29tcGxldGlvbiBvZiBhIHN1YnNlcXVlbnQgaW52b2NhdGlvbiB3aWxsCiAqIGNhdXNlIHRoZSBwcmV2aW91cyBpbnZvY2F0aW9uIHRvIHdha2UgdXAgYW5kIGNoZWNrIGl0cyBbRnV0dXJlXSBmb3IKICogY29tcGxldGlvbi4KICoKICogUGxlYXNlIGJlIGF3YXJlIHRoYXQgbmVzdGluZyBjYWxscyB0byBbd2FpdEZvcl0gY2FuIGxlYWQgdG8gZGVhZGxvY2sgaWYKICogc3Vic2VxdWVudCBjYWxscyBibG9jayB3YWl0aW5nIGZvciBhIGNvbmRpdGlvbiB0aGF0IGlzIG9ubHkgc2F0aXNmaWVkIHdoZW4KICogYW4gZWFybGllciBjYWxsIHJldHVybnMuCiAqLwpUIHdhaXRGb3I8VD4oRnV0dXJlPFQ+IGZ1dHVyZSwge0R1cmF0aW9uIHRpbWVvdXR9KSB7CiAgVCByZXN1bHQ7CiAgYm9vbCBmdXR1cmVDb21wbGV0ZWQgPSBmYWxzZTsKICBPYmplY3QgZXJyb3I7CiAgU3RhY2tUcmFjZSBzdGFja3RyYWNlOwogIGZ1dHVyZS50aGVuKChyKSB7CiAgICBmdXR1cmVDb21wbGV0ZWQgPSB0cnVlOwogICAgcmVzdWx0ID0gcjsKICB9LCBvbkVycm9yOiAoZSwgc3QpIHsKICAgIGVycm9yID0gZTsKICAgIHN0YWNrdHJhY2UgPSBzdDsKICB9KTsKCiAgU3RvcHdhdGNoIHM7CiAgaWYgKHRpbWVvdXQgIT0gbnVsbCkgewogICAgcyA9IG5ldyBTdG9wd2F0Y2goKS4uc3RhcnQoKTsKICB9CiAgVGltZXIucnVuKCgpIHt9KTsgLy8gRW51c3JlIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBtZXNzYWdlLgogIHdoaWxlICghZnV0dXJlQ29tcGxldGVkICYmIChlcnJvciA9PSBudWxsKSkgewogICAgRHVyYXRpb24gcmVtYWluaW5nOwogICAgaWYgKHRpbWVvdXQgIT0gbnVsbCkgewogICAgICBpZiAocy5lbGFwc2VkID49IHRpbWVvdXQpIHsKICAgICAgICB0aHJvdyBuZXcgVGltZW91dEV4Y2VwdGlvbigid2FpdEZvcigpIHRpbWVkIG91dCIsIHRpbWVvdXQpOwogICAgICB9CiAgICAgIHJlbWFpbmluZyA9IHRpbWVvdXQgLSBzLmVsYXBzZWQ7CiAgICB9CiAgICBfV2FpdEZvclV0aWxzLndhaXRGb3JFdmVudCh0aW1lb3V0OiByZW1haW5pbmcpOwogIH0KICBpZiAodGltZW91dCAhPSBudWxsKSB7CiAgICBzLnN0b3AoKTsKICB9CiAgVGltZXIucnVuKCgpIHt9KTsgLy8gRW5zdXJlIHRoYXQgcHJldmlvdXMgY2FsbHMgdG8gd2FpdEZvciBhcmUgd29rZW4gdXAuCgogIGlmIChlcnJvciAhPSBudWxsKSB7CiAgICB0aHJvdyBuZXcgQXN5bmNFcnJvcihlcnJvciwgc3RhY2t0cmFjZSk7CiAgfQoKICByZXR1cm4gcmVzdWx0Owp9CoCaAE5OPAESAQRPDQNMOgMhKzExTichA0lNTk1LKANLS01POwNGTElIT0UDT09PSQQwARo4AVBOSxopARYxKE8GUAQCAQRKFwMwAyEmLTMzUCkjA0lNTk1LKANKThgDT0hOTU5OOwNFTAsDS1BHDwNLThwENQwgEBkUHBAYDxUGAQ8ZIgQ9MBgbIkQIJwY0BBkOBEsBFy0EARECARZkYXJ0OmNsaS93YWl0X2Zvci5kYXJ0Lm9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9iaW4vY2xpX3BhdGNoLmRhcnSBRi8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgImRhcnQ6X2ludGVybmFsIiBzaG93IHBhdGNoOwoKQHBhdGNoCnZvaWQgX3dhaXRGb3JFdmVudChpbnQgdGltZW91dE1pbGxpcykgbmF0aXZlICJDTElfV2FpdEZvckV2ZW50IjsKCgBOTjwBJAEHQQEdZGFydDpjbGktcGF0Y2gvY2xpX3BhdGNoLmRhcnQqb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL3dhc20vd2FzbS5kYXJ0gYIvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIHtAY2F0ZWdvcnkgVk19Ci8vLyB7QG5vZG9jfQpsaWJyYXJ5IGRhcnQud2FzbTsKCmludCBjYWxsV2FzbShTdHJpbmcgbmFtZSwgaW50IGFyZykgewogIHJldHVybiBfY2FsbFdhc20obmFtZSwgYXJnKTsKfQoKZXh0ZXJuYWwgaW50IF9jYWxsV2FzbShTdHJpbmcgbmFtZSwgaW50IGFyZyk7Cg8ATk48ARMNEwElHwIBLgEJZGFydDp3YXNtL29yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvd2FzbV9wYXRjaC5kYXJ0gUUvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIgc2hvdyBwYXRjaDsKCkBwYXRjaAppbnQgX2NhbGxXYXNtKFN0cmluZyBuYW1lLCBpbnQgYXJnKSBuYXRpdmUgIldhc21fY2FsbEZ1bmN0aW9uIjsKCgBOTjwBJAEHQAEfZGFydDp3YXNtLXBhdGNoL3dhc21fcGF0Y2guZGFydCpvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9jb3JlLmRhcnSZ7S8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovKioKICoKICogQnVpbHQtaW4gdHlwZXMsIGNvbGxlY3Rpb25zLAogKiBhbmQgb3RoZXIgY29yZSBmdW5jdGlvbmFsaXR5IGZvciBldmVyeSBEYXJ0IHByb2dyYW0uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBhdXRvbWF0aWNhbGx5IGltcG9ydGVkLgogKgogKiBTb21lIGNsYXNzZXMgaW4gdGhpcyBsaWJyYXJ5LAogKiBzdWNoIGFzIFtTdHJpbmddIGFuZCBbbnVtXSwKICogc3VwcG9ydCBEYXJ0J3MgYnVpbHQtaW4gZGF0YSB0eXBlcy4KICogT3RoZXIgY2xhc3Nlcywgc3VjaCBhcyBbTGlzdF0gYW5kIFtNYXBdLCBwcm92aWRlIGRhdGEgc3RydWN0dXJlcwogKiBmb3IgbWFuYWdpbmcgY29sbGVjdGlvbnMgb2Ygb2JqZWN0cy4KICogQW5kIHN0aWxsIG90aGVyIGNsYXNzZXMgcmVwcmVzZW50IGNvbW1vbmx5IHVzZWQgdHlwZXMgb2YgZGF0YQogKiBzdWNoIGFzIFVSSXMsIGRhdGVzIGFuZCB0aW1lcywgYW5kIGVycm9ycy4KICoKICogIyMgTnVtYmVycyBhbmQgYm9vbGVhbnMKICoKICogW2ludF0gYW5kIFtkb3VibGVdIHByb3ZpZGUgc3VwcG9ydCBmb3IgRGFydCdzIGJ1aWx0LWluIG51bWVyaWNhbCBkYXRhIHR5cGVzOgogKiBpbnRlZ2VycyBhbmQgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBudW1iZXJzLCByZXNwZWN0aXZlbHkuCiAqIEFuIG9iamVjdCBvZiB0eXBlIFtib29sXSBpcyBlaXRoZXIgdHJ1ZSBvciBmYWxzZS4KICogVmFyaWFibGVzIG9mIHRoZXNlIHR5cGVzIGNhbiBiZSBjb25zdHJ1Y3RlZCBmcm9tIGxpdGVyYWxzOgogKgogKiAgICAgaW50IG1lYW5pbmdPZkxpZmUgPSA0MjsKICogICAgIGRvdWJsZSB2YWx1ZU9mUGkgID0gMy4xNDE1OTI7CiAqICAgICBib29sIHZpc2libGUgICAgICA9IHRydWU7CiAqCiAqICMjIFN0cmluZ3MgYW5kIHJlZ3VsYXIgZXhwcmVzc2lvbnMKICoKICogQSBbU3RyaW5nXSBpcyBpbW11dGFibGUgYW5kIHJlcHJlc2VudHMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzLgogKgogKiAgICAgU3RyaW5nIHNoYWtlc3BlYXJlUXVvdGUgPSAiQWxsIHRoZSB3b3JsZCdzIGEgc3RhZ2UsIC4uLiI7CiAqCiAqIFtTdHJpbmdCdWZmZXJdIHByb3ZpZGVzIGEgd2F5IHRvIGNvbnN0cnVjdCBzdHJpbmdzIGVmZmljaWVudGx5LgogKgogKiAgICAgU3RyaW5nQnVmZmVyIG1vcmVTaGFrZXNwZWFyZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICogICAgIG1vcmVTaGFrZXNwZWFyZS53cml0ZSgnQW5kIGFsbCB0aGUgbWVuIGFuZCB3b21lbiAnKTsKICogICAgIG1vcmVTaGFrZXNwZWFyZS53cml0ZSgnbWVyZWx5IHBsYXllcnM7IC4uLicpOwogKgogKiBUaGUgU3RyaW5nIGFuZCBTdHJpbmdCdWZmZXIgY2xhc3NlcyBpbXBsZW1lbnQgc3RyaW5nIGNvbmNhdGVuYXRpb24sCiAqIGludGVycG9sYXRpb24sIGFuZCBvdGhlciBzdHJpbmcgbWFuaXB1bGF0aW9uIGZlYXR1cmVzLgogKgogKiAgICAgU3RyaW5nIHBoaWxvc29waHkgPSAnTGl2ZSBvbiAnOwogKiAgICAgU3RyaW5nIGdldCBwYWxpbmRyb21lID0+IHBoaWxvc29waHkgKyBwaGlsb3NvcGh5LnNwbGl0KCcnKS5yZXZlcnNlZC5qb2luKCk7CiAqCiAqIFtSZWdFeHBdIGltcGxlbWVudHMgRGFydCByZWd1bGFyIGV4cHJlc3Npb25zLAogKiB3aGljaCBwcm92aWRlIGEgZ3JhbW1hciBmb3IgbWF0Y2hpbmcgcGF0dGVybnMgd2l0aGluIHRleHQuCiAqIEZvciBleGFtcGxlLCBoZXJlJ3MgYSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBtYXRjaGVzCiAqIGEgc3RyaW5nIG9mIG9uZSBvciBtb3JlIGRpZ2l0czoKICoKICogICAgIHZhciBudW1iZXJzID0gbmV3IFJlZ0V4cChyJ1xkKycpOwogKgogKiBEYXJ0IHJlZ3VsYXIgZXhwcmVzc2lvbnMgaGF2ZSB0aGUgc2FtZSBzeW50YXggYW5kIHNlbWFudGljcyBhcwogKiBKYXZhU2NyaXB0IHJlZ3VsYXIgZXhwcmVzc2lvbnMuIFNlZQogKiA8aHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtMTUuMTA+CiAqIGZvciB0aGUgc3BlY2lmaWNhdGlvbiBvZiBKYXZhU2NyaXB0IHJlZ3VsYXIgZXhwcmVzc2lvbnMuCiAqCiAqICMjIENvbGxlY3Rpb25zCiAqCiAqIFRoZSBkYXJ0OmNvcmUgbGlicmFyeSBwcm92aWRlcyBiYXNpYyBjb2xsZWN0aW9ucywKICogc3VjaCBhcyBbTGlzdF0sIFtNYXBdLCBhbmQgW1NldF0uCiAqCiAqIEEgTGlzdCBpcyBhbiBvcmRlcmVkIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cywgd2l0aCBhIGxlbmd0aC4KICogTGlzdHMgYXJlIHNvbWV0aW1lcyBjYWxsZWQgYXJyYXlzLgogKiBVc2UgYSBMaXN0IHdoZW4geW91IG5lZWQgdG8gYWNjZXNzIG9iamVjdHMgYnkgaW5kZXguCiAqCiAqICAgICBMaXN0IHN1cGVyaGVyb2VzID0gWyAnQmF0bWFuJywgJ1N1cGVybWFuJywgJ0hhcnJ5IFBvdHRlcicgXTsKICoKICogQSBTZXQgaXMgYW4gdW5vcmRlcmVkIGNvbGxlY3Rpb24gb2YgdW5pcXVlIG9iamVjdHMuCiAqIFlvdSBjYW5ub3QgZ2V0IGFuIGl0ZW0gYnkgaW5kZXggKHBvc2l0aW9uKS4KICogQWRkaW5nIGEgZHVwbGljYXRlIGl0ZW0gaGFzIG5vIGVmZmVjdC4KICoKICogICAgIFNldCB2aWxsYWlucyA9IG5ldyBTZXQoKTsKICogICAgIHZpbGxhaW5zLmFkZCgnSm9rZXInKTsKICogICAgIHZpbGxhaW5zLmFkZEFsbCggWydMZXggTHV0aGVyJywgJ1ZvbGRlbW9ydCddICk7CiAqCiAqIEEgTWFwIGlzIGFuIHVub3JkZXJlZCBjb2xsZWN0aW9uIG9mIGtleS12YWx1ZSBwYWlycy4KICogTWFwcyBhcmUgc29tZXRpbWVzIGNhbGxlZCBhc3NvY2lhdGl2ZSBhcnJheXMgYmVjYXVzZQogKiBtYXBzIGFzc29jaWF0ZSBhIGtleSB0byBzb21lIHZhbHVlIGZvciBlYXN5IHJldHJpZXZhbC4KICogS2V5cyBhcmUgdW5pcXVlLgogKiBVc2UgYSBNYXAgd2hlbiB5b3UgbmVlZCB0byBhY2Nlc3Mgb2JqZWN0cwogKiBieSBhIHVuaXF1ZSBpZGVudGlmaWVyLgogKgogKiAgICAgTWFwIHNpZGVraWNrcyA9IHsgJ0JhdG1hbic6ICdSb2JpbicsCiAqICAgICAgICAgICAgICAgICAgICAgICAnU3VwZXJtYW4nOiAnTG9pcyBMYW5lJywKICogICAgICAgICAgICAgICAgICAgICAgICdIYXJyeSBQb3R0ZXInOiAnUm9uIGFuZCBIZXJtaW9uZScgfTsKICoKICogSW4gYWRkaXRpb24gdG8gdGhlc2UgY2xhc3NlcywKICogZGFydDpjb3JlIGNvbnRhaW5zIFtJdGVyYWJsZV0sCiAqIGFuIGludGVyZmFjZSB0aGF0IGRlZmluZXMgZnVuY3Rpb25hbGl0eQogKiBjb21tb24gaW4gY29sbGVjdGlvbnMgb2Ygb2JqZWN0cy4KICogRXhhbXBsZXMgaW5jbHVkZSB0aGUgYWJpbGl0eQogKiB0byBydW4gYSBmdW5jdGlvbiBvbiBlYWNoIGVsZW1lbnQgaW4gdGhlIGNvbGxlY3Rpb24sCiAqIHRvIGFwcGx5IGEgdGVzdCB0byBlYWNoIGVsZW1lbnQsCiAqIHRvIHJldHJpZXZlIGFuIG9iamVjdCwgYW5kIHRvIGRldGVybWluZSBsZW5ndGguCiAqCiAqIEl0ZXJhYmxlIGlzIGltcGxlbWVudGVkIGJ5IExpc3QgYW5kIFNldCwKICogYW5kIHVzZWQgYnkgTWFwIGZvciBpdHMga2V5cyBhbmQgdmFsdWVzLgogKgogKiBGb3Igb3RoZXIga2luZHMgb2YgY29sbGVjdGlvbnMsIGNoZWNrIG91dCB0aGUKICogYGRhcnQ6Y29sbGVjdGlvbmAgbGlicmFyeS4KICoKICogIyMgRGF0ZSBhbmQgdGltZQogKgogKiBVc2UgW0RhdGVUaW1lXSB0byByZXByZXNlbnQgYSBwb2ludCBpbiB0aW1lCiAqIGFuZCBbRHVyYXRpb25dIHRvIHJlcHJlc2VudCBhIHNwYW4gb2YgdGltZS4KICoKICogWW91IGNhbiBjcmVhdGUgRGF0ZVRpbWUgb2JqZWN0cyB3aXRoIGNvbnN0cnVjdG9ycwogKiBvciBieSBwYXJzaW5nIGEgY29ycmVjdGx5IGZvcm1hdHRlZCBzdHJpbmcuCiAqCiAqICAgICBEYXRlVGltZSBub3cgPSBuZXcgRGF0ZVRpbWUubm93KCk7CiAqICAgICBEYXRlVGltZSBiZXJsaW5XYWxsRmVsbCA9IG5ldyBEYXRlVGltZSgxOTg5LCAxMSwgOSk7CiAqICAgICBEYXRlVGltZSBtb29uTGFuZGluZyA9IERhdGVUaW1lLnBhcnNlKCIxOTY5LTA3LTIwIik7CiAqCiAqIENyZWF0ZSBhIER1cmF0aW9uIG9iamVjdCBzcGVjaWZ5aW5nIHRoZSBpbmRpdmlkdWFsIHRpbWUgdW5pdHMuCiAqCiAqICAgICBEdXJhdGlvbiB0aW1lUmVtYWluaW5nID0gbmV3IER1cmF0aW9uKGhvdXJzOjU2LCBtaW51dGVzOjE0KTsKICoKICogSW4gYWRkaXRpb24gdG8gRGF0ZVRpbWUgYW5kIER1cmF0aW9uLAogKiBkYXJ0OmNvcmUgY29udGFpbnMgdGhlIFtTdG9wd2F0Y2hdIGNsYXNzIGZvciBtZWFzdXJpbmcgZWxhcHNlZCB0aW1lLgogKgogKiAjIyBVcmkKICoKICogQSBbVXJpXSBvYmplY3QgcmVwcmVzZW50cyBhIHVuaWZvcm0gcmVzb3VyY2UgaWRlbnRpZmllciwKICogd2hpY2ggaWRlbnRpZmllcyBhIHJlc291cmNlIG9uIHRoZSB3ZWIuCiAqCiAqICAgICBVcmkgZGFydGxhbmcgPSBVcmkucGFyc2UoJ2h0dHA6Ly9kYXJ0bGFuZy5vcmcvJyk7CiAqCiAqICMjIEVycm9ycwogKgogKiBUaGUgW0Vycm9yXSBjbGFzcyByZXByZXNlbnRzIHRoZSBvY2N1cnJlbmNlIG9mIGFuIGVycm9yCiAqIGR1cmluZyBydW50aW1lLgogKiBTdWJjbGFzc2VzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IHNwZWNpZmljIGtpbmRzIG9mIGVycm9ycy4KICoKICogIyMgT3RoZXIgZG9jdW1lbnRhdGlvbgogKgogKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gdXNlIHRoZSBidWlsdC1pbiB0eXBlcywgcmVmZXIgdG8gW0J1aWx0LWluCiAqIFR5cGVzXShodHRwOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL2RhcnQtdXAtYW5kLXJ1bm5pbmcvY29udGVudHMvY2gwMi5odG1sI2J1aWx0LWluLXR5cGVzKQogKiBpbiBDaGFwdGVyIDIgb2YKICogW0RhcnQ6IFVwIGFuZCBSdW5uaW5nXShodHRwOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL2RhcnQtdXAtYW5kLXJ1bm5pbmcvKS4KICoKICogQWxzbywgc2VlIFtkYXJ0OmNvcmUgLSBOdW1iZXJzLCBDb2xsZWN0aW9ucywgU3RyaW5ncywgYW5kCiAqIE1vcmVdKGh0dHBzOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL2RhcnQtdXAtYW5kLXJ1bm5pbmcvY2gwMy5odG1sI2RhcnRjb3JlLS0tbnVtYmVycy1jb2xsZWN0aW9ucy1zdHJpbmdzLWFuZC1tb3JlKQogKiBmb3IgbW9yZSBjb3ZlcmFnZSBvZiBjbGFzc2VzIGluIHRoaXMgcGFja2FnZS4KICoKICogVGhlCiAqIFtEYXJ0IExhbmd1YWdlIFNwZWNpZmljYXRpb25dKGh0dHA6Ly93d3cuZGFydGxhbmcub3JnL2RvY3Mvc3BlYy8pCiAqIHByb3ZpZGVzIHRlY2huaWNhbCBkZXRhaWxzLgogKgogKiB7QGNhdGVnb3J5IENvcmV9CiAqLwpsaWJyYXJ5IGRhcnQuY29yZTsKCmltcG9ydCAiZGFydDpjb2xsZWN0aW9uIjsKaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIgaGlkZSBTeW1ib2wsIExpbmtlZExpc3QsIExpbmtlZExpc3RFbnRyeTsKaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIgYXMgaW50ZXJuYWwgc2hvdyBTeW1ib2w7CmltcG9ydCAiZGFydDpjb252ZXJ0IgogICAgc2hvdwogICAgICAgIGFzY2lpLAogICAgICAgIGJhc2U2NCwKICAgICAgICBCYXNlNjRDb2RlYywKICAgICAgICBFbmNvZGluZywKICAgICAgICBsYXRpbjEsCiAgICAgICAgU3RyaW5nQ29udmVyc2lvblNpbmssCiAgICAgICAgdXRmODsKaW1wb3J0ICJkYXJ0Om1hdGgiIHNob3cgUmFuZG9tOyAvLyBVc2VkIGJ5IExpc3Quc2h1ZmZsZS4KaW1wb3J0ICJkYXJ0OnR5cGVkX2RhdGEiIHNob3cgVWludDhMaXN0LCBVaW50MTZMaXN0LCBFbmRpYW47CgpAU2luY2UoIjIuMSIpCmV4cG9ydCAiZGFydDphc3luYyIgc2hvdyBGdXR1cmUsIFN0cmVhbTsKCnBhcnQgImFubm90YXRpb25zLmRhcnQiOwpwYXJ0ICJiaWdpbnQuZGFydCI7CnBhcnQgImJvb2wuZGFydCI7CnBhcnQgImNvbXBhcmFibGUuZGFydCI7CnBhcnQgImRhdGVfdGltZS5kYXJ0IjsKcGFydCAiZG91YmxlLmRhcnQiOwpwYXJ0ICJkdXJhdGlvbi5kYXJ0IjsKcGFydCAiZXJyb3JzLmRhcnQiOwpwYXJ0ICJleGNlcHRpb25zLmRhcnQiOwpwYXJ0ICJleHBhbmRvLmRhcnQiOwpwYXJ0ICJmdW5jdGlvbi5kYXJ0IjsKcGFydCAiaWRlbnRpY2FsLmRhcnQiOwpwYXJ0ICJpbnQuZGFydCI7CnBhcnQgImludm9jYXRpb24uZGFydCI7CnBhcnQgIml0ZXJhYmxlLmRhcnQiOwpwYXJ0ICJpdGVyYXRvci5kYXJ0IjsKcGFydCAibGlzdC5kYXJ0IjsKcGFydCAibWFwLmRhcnQiOwpwYXJ0ICJudWxsLmRhcnQiOwpwYXJ0ICJudW0uZGFydCI7CnBhcnQgIm9iamVjdC5kYXJ0IjsKcGFydCAicGF0dGVybi5kYXJ0IjsKcGFydCAicHJpbnQuZGFydCI7CnBhcnQgInJlZ2V4cC5kYXJ0IjsKcGFydCAic2V0LmRhcnQiOwpwYXJ0ICJzaW5rLmRhcnQiOwpwYXJ0ICJzdGFja3RyYWNlLmRhcnQiOwpwYXJ0ICJzdG9wd2F0Y2guZGFydCI7CnBhcnQgInN0cmluZy5kYXJ0IjsKcGFydCAic3RyaW5nX2J1ZmZlci5kYXJ0IjsKcGFydCAic3RyaW5nX3NpbmsuZGFydCI7CnBhcnQgInN5bWJvbC5kYXJ0IjsKcGFydCAidHlwZS5kYXJ0IjsKcGFydCAidXJpLmRhcnQiOwqA0gBOTjwBBAMgOAMrAyEfJ0QoQS4DGwNQRzU+Ax8lIQMmA0QDQQNDAzo8NQNHOgMnUwMxPjkjAykDQic7PAMSAzUlAz4mOANEAzcvKgMhHjcDODg6FC0bAywyPwMhIislIDgkMwMsLAMxHgMUAy8vAzUvAyo8PANCA0QDKUgDCgM8KwM5Aw0DOxNAAxoDUF4TTgM9djEDB0UfAxQEEwEaQjEWCQ8QFRIQHg45PQEOKQEZFBIYFxQWFBgVFhcRGBYWEhESERQVExQREhgXFBsZFBIRAQlkYXJ0OmNvcmUwb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvY29tcGFyYWJsZS5kYXJ0jlUvLyBDb3B5cmlnaHQgKGMpIDIwMTEsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogVGhlIHNpZ25hdHVyZSBvZiBhIGdlbmVyaWMgY29tcGFyaXNvbiBmdW5jdGlvbi4KICoKICogQSBjb21wYXJpc29uIGZ1bmN0aW9uIHJlcHJlc2VudHMgYW4gb3JkZXJpbmcgb24gYSB0eXBlIG9mIG9iamVjdHMuCiAqIEEgdG90YWwgb3JkZXJpbmcgb24gYSB0eXBlIG1lYW5zIHRoYXQgZm9yIHR3byB2YWx1ZXMsIGVpdGhlciB0aGV5CiAqIGFyZSBlcXVhbCBvciBvbmUgaXMgZ3JlYXRlciB0aGFuIHRoZSBvdGhlciAoYW5kIHRoZSBsYXR0ZXIgbXVzdCB0aGVuIGJlCiAqIHNtYWxsZXIgdGhhbiB0aGUgZm9ybWVyKS4KICoKICogQSBbQ29tcGFyYXRvcl0gZnVuY3Rpb24gcmVwcmVzZW50cyBzdWNoIGEgdG90YWwgb3JkZXJpbmcgYnkgcmV0dXJuaW5nCiAqCiAqICogYSBuZWdhdGl2ZSBpbnRlZ2VyIGlmIFthXSBpcyBzbWFsbGVyIHRoYW4gW2JdLAogKiAqIHplcm8gaWYgW2FdIGlzIGVxdWFsIHRvIFtiXSwgYW5kCiAqICogYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIFthXSBpcyBncmVhdGVyIHRoYW4gW2JdLgogKi8KdHlwZWRlZiBDb21wYXJhdG9yPFQ+ID0gaW50IEZ1bmN0aW9uKFQgYSwgVCBiKTsKCi8qKgogKiBJbnRlcmZhY2UgdXNlZCBieSB0eXBlcyB0aGF0IGhhdmUgYW4gaW50cmluc2ljIG9yZGVyaW5nLgogKgogKiBUaGUgW2NvbXBhcmVUb10gb3BlcmF0aW9uIGRlZmluZXMgYSB0b3RhbCBvcmRlcmluZyBvZiBvYmplY3RzLAogKiB3aGljaCBjYW4gYmUgdXNlZCBmb3Igb3JkZXJpbmcgYW5kIHNvcnRpbmcuCiAqCiAqIFRoZSBbQ29tcGFyYWJsZV0gaW50ZXJmYWNlIHNob3VsZCBiZSB1c2VkIGZvciB0aGUgbmF0dXJhbCBvcmRlcmluZyBvZiBhIHR5cGUuCiAqIElmIGEgdHlwZSBjYW4gYmUgb3JkZXJlZCBpbiBtb3JlIHRoYW4gb25lIHdheSwKICogYW5kIG5vbmUgb2YgdGhlbSBpcyB0aGUgb2J2aW91cyBuYXR1cmFsIG9yZGVyaW5nLAogKiB0aGVuIGl0IG1pZ2h0IGJlIGJldHRlciBub3QgdG8gdXNlIHRoZSBbQ29tcGFyYWJsZV0gaW50ZXJmYWNlLAogKiBhbmQgdG8gcHJvdmlkZSBzZXBhcmF0ZSBbQ29tcGFyYXRvcl1zIGluc3RlYWQuCiAqCiAqIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlIG9yZGVyIG9mIGEgW0NvbXBhcmFibGVdIGFncmVlcwogKiB3aXRoIGl0cyBvcGVyYXRvciBbb3BlcmF0b3IgPT1dIGVxdWFsaXR5IChgYS5jb21wYXJlVG8oYikgPT0gMGAgaWZmIGBhID09IGJgKSwKICogYnV0IHRoaXMgaXMgbm90IGEgcmVxdWlyZW1lbnQuCiAqIEZvciBleGFtcGxlLCBbZG91YmxlXSBhbmQgW0RhdGVUaW1lXSBoYXZlIGBjb21wYXJlVG9gIG1ldGhvZHMKICogdGhhdCBkbyBub3QgYWdyZWUgd2l0aCBvcGVyYXRvciBbb3BlcmF0b3IgPT1dLgogKiBGb3IgZG91YmxlcyB0aGUgW2NvbXBhcmVUb10gbWV0aG9kIGlzIG1vcmUgcHJlY2lzZSB0aGFuIHRoZSBlcXVhbGl0eSwKICogYW5kIGZvciBbRGF0ZVRpbWVdIGl0IGlzIGxlc3MgcHJlY2lzZS4KICoKICogRXhhbXBsZXM6CiAqCiAqICAgICAgKDAuMCkuY29tcGFyZVRvKC0wLjApOyAgLy8gPT4gMQogKiAgICAgIDAuMCA9PSAtMC4wOyAgICAgICAgICAgIC8vID0+IHRydWUKICogICAgICB2YXIgZHQgPSBuZXcgRGF0ZVRpbWUubm93KCk7CiAqICAgICAgdmFyIGR0MiA9IGR0LnRvVXRjKCk7CiAqICAgICAgZHQgPT0gZHQyOyAgICAgICAgICAgICAgLy8gPT4gZmFsc2UKICogICAgICBkdC5jb21wYXJlVG8oZHQyKTsgICAgICAvLyA9PiAwCiAqCiAqIFRoZSBbQ29tcGFyYWJsZV0gaW50ZXJmYWNlIGRvZXMgbm90IGltcGx5IHRoZSBleGlzdGVuY2UKICogb2YgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzIGA8YCwgYDw9YCwgYD5gIGFuZCBgPj1gLgogKiBUaGVzZSBzaG91bGQgb25seSBiZSBkZWZpbmVkCiAqIGlmIHRoZSBvcmRlcmluZyBpcyBhIGxlc3MtdGhhbi9ncmVhdGVyLXRoYW4gb3JkZXJpbmcsCiAqIHRoYXQgaXMsIGFuIG9yZGVyaW5nIHdoZXJlIHlvdSB3b3VsZCBuYXR1cmFsbHkKICogdXNlIHRoZSB3b3JkcyAibGVzcyB0aGFuIiBhYm91dCB0aGUgb3JkZXIgb2YgdHdvIGVsZW1lbnRzLgogKgogKiBJZiB0aGUgZXF1YWxpdHkgb3BlcmF0b3IgYW5kIFtjb21wYXJlVG9dIGRpc2FncmVlLAogKiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMgc2hvdWxkIGZvbGxvdyB0aGUgZXF1YWxpdHkgb3BlcmF0b3IsCiAqIGFuZCB3aWxsIGxpa2VseSBhbHNvIGRpc2FncmVlIHdpdGggW2NvbXBhcmVUb10uCiAqIE90aGVyd2lzZSB0aGV5IHNob3VsZCBtYXRjaCB0aGUgW2NvbXBhcmVUb10gbWV0aG9kLAogKiBzbyB0aGF0IGBhIDwgYmAgaWZmIGBhLmNvbXBhcmVUbyhiKSA8IDBgLgogKgogKiBUaGUgW2RvdWJsZV0gY2xhc3MgZGVmaW5lcyBjb21wYXJpc29uIG9wZXJhdG9ycwogKiB0aGF0IGFyZSBjb21wYXRpYmxlIHdpdGggZXF1YWxpdHkuCiAqIFRoZSBvcGVyYXRvcnMgZGlmZmVyIGZyb20gYGRvdWJsZS5jb21wYXJlVG9gIG9uIC0wLjAgYW5kIE5hTi4KICoKICogVGhlIFtEYXRlVGltZV0gY2xhc3MgaGFzIG5vIGNvbXBhcmlzb24gb3BlcmF0b3JzLCBpbnN0ZWFkIGl0IGhhcyB0aGUgbW9yZQogKiBwcmVjaXNlbHkgbmFtZWQgW0RhdGVUaW1lLmlzQmVmb3JlXSBhbmQgW0RhdGVUaW1lLmlzQWZ0ZXJdLgogKi8KYWJzdHJhY3QgY2xhc3MgQ29tcGFyYWJsZTxUPiB7CiAgLyoqCiAgICogQ29tcGFyZXMgdGhpcyBvYmplY3QgdG8gYW5vdGhlciBbQ29tcGFyYWJsZV0KICAgKgogICAqIFJldHVybnMgYSB2YWx1ZSBsaWtlIGEgW0NvbXBhcmF0b3JdIHdoZW4gY29tcGFyaW5nIGB0aGlzYCB0byBbb3RoZXJdLgogICAqIFRoYXQgaXMsIGl0IHJldHVybnMgYSBuZWdhdGl2ZSBpbnRlZ2VyIGlmIGB0aGlzYCBpcyBvcmRlcmVkIGJlZm9yZSBbb3RoZXJdLAogICAqIGEgcG9zaXRpdmUgaW50ZWdlciBpZiBgdGhpc2AgaXMgb3JkZXJlZCBhZnRlciBbb3RoZXJdLAogICAqIGFuZCB6ZXJvIGlmIGB0aGlzYCBhbmQgW290aGVyXSBhcmUgb3JkZXJlZCB0b2dldGhlci4KICAgKgogICAqIFRoZSBbb3RoZXJdIGFyZ3VtZW50IG11c3QgYmUgYSB2YWx1ZSB0aGF0IGlzIGNvbXBhcmFibGUgdG8gdGhpcyBvYmplY3QuCiAgICovCiAgaW50IGNvbXBhcmVUbyhUIG90aGVyKTsKCiAgLyoqCiAgICogQSBbQ29tcGFyYXRvcl0gdGhhdCBjb21wYXJlcyBvbmUgY29tcGFyYWJsZSB0byBhbm90aGVyLgogICAqCiAgICogSXQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGBhLmNvbXBhcmVUbyhiKWAuCiAgICoKICAgKiBUaGlzIHV0aWxpdHkgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgZGVmYXVsdCBjb21wYXJhdG9yCiAgICogZm9yIG9yZGVyaW5nIGNvbGxlY3Rpb25zLCBmb3IgZXhhbXBsZSBpbiB0aGUgW0xpc3RdIHNvcnQgZnVuY3Rpb24uCiAgICovCiAgc3RhdGljIGludCBjb21wYXJlKENvbXBhcmFibGUgYSwgQ29tcGFyYWJsZSBiKSA9PiBhLmNvbXBhcmVUbyhiKTsKfQpgAE5OPAETAQQzA0ZFSx0DSQM0JjQEMAEEPANCLwNRMjVCMgM9UiJBMkkqAw0DKCslHiwoAzs4IDkyPgM2QTM3LQMzJkEDTT8EHwYyBUtRPDoFTQYaAQY9BTAFPUgGRAIBGWRhcnQ6Y29yZS9jb21wYXJhYmxlLmRhcnQub3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvaXRlcmFibGUuZGFydMAAYswvLyBDb3B5cmlnaHQgKGMpIDIwMTEsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogQSBjb2xsZWN0aW9uIG9mIHZhbHVlcywgb3IgImVsZW1lbnRzIiwgdGhhdCBjYW4gYmUgYWNjZXNzZWQgc2VxdWVudGlhbGx5LgogKgogKiBUaGUgZWxlbWVudHMgb2YgdGhlIGl0ZXJhYmxlIGFyZSBhY2Nlc3NlZCBieSBnZXR0aW5nIGFuIFtJdGVyYXRvcl0KICogdXNpbmcgdGhlIFtpdGVyYXRvcl0gZ2V0dGVyLCBhbmQgdXNpbmcgaXQgdG8gc3RlcCB0aHJvdWdoIHRoZSB2YWx1ZXMuCiAqIFN0ZXBwaW5nIHdpdGggdGhlIGl0ZXJhdG9yIGlzIGRvbmUgYnkgY2FsbGluZyBbSXRlcmF0b3IubW92ZU5leHRdLAogKiBhbmQgaWYgdGhlIGNhbGwgcmV0dXJucyBgdHJ1ZWAsCiAqIHRoZSBpdGVyYXRvciBoYXMgbm93IG1vdmVkIHRvIHRoZSBuZXh0IGVsZW1lbnQsCiAqIHdoaWNoIGlzIHRoZW4gYXZhaWxhYmxlIGFzIFtJdGVyYXRvci5jdXJyZW50XS4KICogSWYgdGhlIGNhbGwgcmV0dXJucyBgZmFsc2VgLCB0aGVyZSBhcmUgbm8gbW9yZSBlbGVtZW50cywKICogYW5kIGBpdGVyYXRvci5jdXJyZW50YCByZXR1cm5zIGBudWxsYC4KICoKICogWW91IGNhbiBjcmVhdGUgbW9yZSB0aGFuIG9uZSBpdGVyYXRvciBmcm9tIHRoZSBzYW1lIGBJdGVyYWJsZWAuCiAqIEVhY2ggdGltZSBgaXRlcmF0b3JgIGlzIHJlYWQsIGl0IHJldHVybnMgYSBuZXcgaXRlcmF0b3IsCiAqIGFuZCBkaWZmZXJlbnQgaXRlcmF0b3JzIGNhbiBiZSBzdGVwcGVkIHRocm91Z2ggaW5kZXBlbmRlbnRseSwKICogZWFjaCBnaXZpbmcgYWNjZXNzIHRvIGFsbCB0aGUgZWxlbWVudHMgb2YgdGhlIGl0ZXJhYmxlLgogKiBUaGUgaXRlcmF0b3JzIG9mIHRoZSBzYW1lIGl0ZXJhYmxlICpzaG91bGQqIHByb3ZpZGUgdGhlIHNhbWUgdmFsdWVzCiAqIGluIHRoZSBzYW1lIG9yZGVyICh1bmxlc3MgdGhlIHVuZGVybHlpbmcgY29sbGVjdGlvbiBpcyBtb2RpZmllZCBiZXR3ZWVuCiAqIHRoZSBpdGVyYXRpb25zLCB3aGljaCBzb21lIGNvbGxlY3Rpb25zIGFsbG93KS4KICoKICogWW91IGNhbiBhbHNvIGl0ZXJhdGUgb3ZlciB0aGUgZWxlbWVudHMgb2YgYW4gYEl0ZXJhYmxlYAogKiB1c2luZyB0aGUgZm9yLWluIGxvb3AgY29uc3RydWN0LCB3aGljaCB1c2VzIHRoZSBgaXRlcmF0b3JgIGdldHRlciBiZWhpbmQgdGhlCiAqIHNjZW5lcy4KICogRm9yIGV4YW1wbGUsIHlvdSBjYW4gaXRlcmF0ZSBvdmVyIGFsbCBvZiB0aGUga2V5cyBvZiBhIFtNYXBdLAogKiBiZWNhdXNlIGBNYXBgIGtleXMgYXJlIGl0ZXJhYmxlLgogKgogKiAgICAgTWFwIGtpZHNCb29rcyA9IHsnTWF0aWxkYSc6ICdSb2FsZCBEYWhsJywKICogICAgICAgICAgICAgICAgICAgICAgJ0dyZWVuIEVnZ3MgYW5kIEhhbSc6ICdEciBTZXVzcycsCiAqICAgICAgICAgICAgICAgICAgICAgICdXaGVyZSB0aGUgV2lsZCBUaGluZ3MgQXJlJzogJ01hdXJpY2UgU2VuZGFrJ307CiAqICAgICBmb3IgKHZhciBib29rIGluIGtpZHNCb29rcy5rZXlzKSB7CiAqICAgICAgIHByaW50KCckYm9vayB3YXMgd3JpdHRlbiBieSAke2tpZHNCb29rc1tib29rXX0nKTsKICogICAgIH0KICoKICogVGhlIFtMaXN0XSBhbmQgW1NldF0gY2xhc3NlcyBhcmUgYm90aCBgSXRlcmFibGVgLAogKiBhcyBhcmUgbW9zdCBjbGFzc2VzIGluIHRoZSBgZGFydDpjb2xsZWN0aW9uYCBsaWJyYXJ5LgogKgogKiBTb21lIFtJdGVyYWJsZV0gY29sbGVjdGlvbnMgY2FuIGJlIG1vZGlmaWVkLgogKiBBZGRpbmcgYW4gZWxlbWVudCB0byBhIGBMaXN0YCBvciBgU2V0YCB3aWxsIGNoYW5nZSB3aGljaCBlbGVtZW50cyBpdAogKiBjb250YWlucywgYW5kIGFkZGluZyBhIG5ldyBrZXkgdG8gYSBgTWFwYCBjaGFuZ2VzIHRoZSBlbGVtZW50cyBvZiBbTWFwLmtleXNdLgogKiBJdGVyYXRvcnMgY3JlYXRlZCBhZnRlciB0aGUgY2hhbmdlIHdpbGwgcHJvdmlkZSB0aGUgbmV3IGVsZW1lbnRzLCBhbmQgbWF5CiAqIG9yIG1heSBub3QgcHJlc2VydmUgdGhlIG9yZGVyIG9mIGV4aXN0aW5nIGVsZW1lbnRzCiAqIChmb3IgZXhhbXBsZSwgYSBbSGFzaFNldF0gbWF5IGNvbXBsZXRlbHkgY2hhbmdlIGl0cyBvcmRlciB3aGVuIGEgc2luZ2xlCiAqIGVsZW1lbnQgaXMgYWRkZWQpLgogKgogKiBDaGFuZ2luZyBhIGNvbGxlY3Rpb24gKndoaWxlKiBpdCBpcyBiZWluZyBpdGVyYXRlZAogKiBpcyBnZW5lcmFsbHkgKm5vdCogYWxsb3dlZC4KICogRG9pbmcgc28gd2lsbCBicmVhayB0aGUgaXRlcmF0aW9uLCB3aGljaCBpcyB0eXBpY2FsbHkgc2lnbmFsbGVkCiAqIGJ5IHRocm93aW5nIGEgW0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcl0KICogdGhlIG5leHQgdGltZSBbSXRlcmF0b3IubW92ZU5leHRdIGlzIGNhbGxlZC4KICogVGhlIGN1cnJlbnQgdmFsdWUgb2YgW0l0ZXJhdG9yLmN1cnJlbnRdIGdldHRlcgogKiBzaG91bGQgbm90IGJlIGFmZmVjdGVkIGJ5IHRoZSBjaGFuZ2UgaW4gdGhlIGNvbGxlY3Rpb24sCiAqIHRoZSBgY3VycmVudGAgdmFsdWUgd2FzIHNldCBieSB0aGUgcHJldmlvdXMgY2FsbCB0byBbSXRlcmF0b3IubW92ZU5leHRdLgogKgogKiBTb21lIGl0ZXJhYmxlcyBjb21wdXRlIHRoZWlyIGVsZW1lbnRzIGR5bmFtaWNhbGx5IGV2ZXJ5IHRpbWUgdGhleSBhcmUKICogaXRlcmF0ZWQsIGxpa2UgdGhlIG9uZSByZXR1cm5lZCBieSBbSXRlcmFibGUuZ2VuZXJhdGVdIG9yIHRoZSBpdGVyYWJsZQogKiByZXR1cm5lZCBieSBhIGBzeW5jKmAgZ2VuZXJhdG9yIGZ1bmN0aW9uLiBJZiB0aGUgY29tcHV0YXRpb24gZG9lc24ndCBkZXBlbmQKICogb24gb3RoZXIgb2JqZWN0cyB0aGF0IG1heSBjaGFuZ2UsIHRoZW4gdGhlIGdlbmVyYXRlZCBzZXF1ZW5jZSBzaG91bGQgYmUKICogdGhlIHNhbWUgb25lIGV2ZXJ5IHRpbWUgaXQncyBpdGVyYXRlZC4KICoKICogVGhlIG1lbWJlcnMgb2YgYEl0ZXJhYmxlYCwgb3RoZXIgdGhhbiBgaXRlcmF0b3JgIGl0c2VsZiwKICogd29yayBieSBsb29raW5nIGF0IHRoZSBlbGVtZW50cyBvZiB0aGUgaXRlcmFibGUuCiAqIFRoaXMgY2FuIGJlIGltcGxlbWVudGVkIGJ5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgW2l0ZXJhdG9yXSwgYnV0IHNvbWUgY2xhc3NlcwogKiBtYXkgaGF2ZSBtb3JlIGVmZmljaWVudCB3YXlzIG9mIGZpbmRpbmcgdGhlIHJlc3VsdAogKiAobGlrZSBbbGFzdF0gb3IgW2xlbmd0aF0gb24gYSBbTGlzdF0sIG9yIFtjb250YWluc10gb24gYSBbU2V0XSkuCiAqCiAqIFRoZSBtZXRob2RzIHRoYXQgcmV0dXJuIGFub3RoZXIgYEl0ZXJhYmxlYCAobGlrZSBbbWFwXSBhbmQgW3doZXJlXSkKICogYXJlIGFsbCAqbGF6eSogLSB0aGV5IHdpbGwgaXRlcmF0ZSB0aGUgb3JpZ2luYWwgKGFzIG5lY2Vzc2FyeSkKICogZXZlcnkgdGltZSB0aGUgcmV0dXJuZWQgaXRlcmFibGUgaXMgaXRlcmF0ZWQsIGFuZCBub3QgYmVmb3JlLgogKgogKiBTaW5jZSBhbiBpdGVyYWJsZSBtYXkgYmUgaXRlcmF0ZWQgbW9yZSB0aGFuIG9uY2UsIGl0J3Mgbm90IHJlY29tbWVuZGVkIHRvCiAqIGhhdmUgZGV0ZWN0YWJsZSBzaWRlLWVmZmVjdHMgaW4gdGhlIGl0ZXJhdG9yLgogKiBGb3IgbWV0aG9kcyBsaWtlIFttYXBdIGFuZCBbd2hlcmVdLCB0aGUgcmV0dXJuZWQgaXRlcmFibGUgd2lsbCBleGVjdXRlIHRoZQogKiBhcmd1bWVudCBmdW5jdGlvbiBvbiBldmVyeSBpdGVyYXRpb24sIHNvIHRob3NlIGZ1bmN0aW9ucyBzaG91bGQgYWxzbyBub3QKICogaGF2ZSBzaWRlIGVmZmVjdHMuCiAqLwphYnN0cmFjdCBjbGFzcyBJdGVyYWJsZTxFPiB7CiAgLy8gVE9ETyhscm4pOiBXaGVuIHdlIGFsbG93IGZvcndhcmRpbmcgY29uc3QgY29uc3RydWN0b3JzIHRocm91Z2gKICAvLyBtaXhpbiBhcHBsaWNhdGlvbnMsIG1ha2UgdGhpcyBjbGFzcyBpbXBsZW1lbnQgW0l0ZXJhYmxlTWl4aW5dLgogIGNvbnN0IEl0ZXJhYmxlKCk7CgogIC8qKgogICAqIENyZWF0ZXMgYW4gYEl0ZXJhYmxlYCB3aGljaCBnZW5lcmF0ZXMgaXRzIGVsZW1lbnRzIGR5bmFtaWNhbGx5LgogICAqCiAgICogVGhlIGdlbmVyYXRlZCBpdGVyYWJsZSBoYXMgW2NvdW50XSBlbGVtZW50cywKICAgKiBhbmQgdGhlIGVsZW1lbnQgYXQgaW5kZXggYG5gIGlzIGNvbXB1dGVkIGJ5IGNhbGxpbmcgYGdlbmVyYXRvcihuKWAuCiAgICogVmFsdWVzIGFyZSBub3QgY2FjaGVkLCBzbyBlYWNoIGl0ZXJhdGlvbiBjb21wdXRlcyB0aGUgdmFsdWVzIGFnYWluLgogICAqCiAgICogSWYgW2dlbmVyYXRvcl0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYW4gaWRlbnRpdHkgZnVuY3Rpb24KICAgKiBvbiBpbnRlZ2VycyBgKGludCB4KSA9PiB4YCwgc28gaXQgbWF5IG9ubHkgYmUgb21pdHRlZCBpZiB0aGUgdHlwZQogICAqIHBhcmFtZXRlciBhbGxvd3MgaW50ZWdlciB2YWx1ZXMuIFRoYXQgaXMsIGlmIFtFXSBpcyBhIHN1cGVyLXR5cGUKICAgKiBvZiBbaW50XS4KICAgKgogICAqIEFzIGFuIGBJdGVyYWJsZWAsIGBuZXcgSXRlcmFibGUuZ2VuZXJhdGUobiwgZ2VuZXJhdG9yKSlgIGlzIGVxdWl2YWxlbnQgdG8KICAgKiBgY29uc3QgWzAsIC4uLiwgbiAtIDFdLm1hcChnZW5lcmF0b3IpYC4KICAgKi8KICBmYWN0b3J5IEl0ZXJhYmxlLmdlbmVyYXRlKGludCBjb3VudCwgW0UgZ2VuZXJhdG9yKGludCBpbmRleCldKSB7CiAgICBpZiAoY291bnQgPD0gMCkgcmV0dXJuIEVtcHR5SXRlcmFibGU8RT4oKTsKICAgIHJldHVybiBfR2VuZXJhdG9ySXRlcmFibGU8RT4oY291bnQsIGdlbmVyYXRvcik7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGFuIGVtcHR5IGl0ZXJhYmxlLgogICAqCiAgICogVGhlIGVtcHR5IGl0ZXJhYmxlIGhhcyBubyBlbGVtZW50cywgYW5kIGl0ZXJhdGluZyBpdCBhbHdheXMgc3RvcHMKICAgKiBpbW1lZGlhdGVseS4KICAgKi8KICBjb25zdCBmYWN0b3J5IEl0ZXJhYmxlLmVtcHR5KCkgPSBFbXB0eUl0ZXJhYmxlPEU+OwoKICAvKioKICAgKiBBZGFwdHMgW3NvdXJjZV0gdG8gYmUgYW4gYEl0ZXJhYmxlPFQ+YC4KICAgKgogICAqIEFueSB0aW1lIHRoZSBpdGVyYWJsZSB3b3VsZCBwcm9kdWNlIGFuIGVsZW1lbnQgdGhhdCBpcyBub3QgYSBbVF0sCiAgICogdGhlIGVsZW1lbnQgYWNjZXNzIHdpbGwgdGhyb3cuIElmIGFsbCBlbGVtZW50cyBvZiBbc291cmNlXSBhcmUgYWN0dWFsbHkKICAgKiBpbnN0YW5jZXMgb2YgW1RdLCBvciBpZiBvbmx5IGVsZW1lbnRzIHRoYXQgYXJlIGFjdHVhbGx5IGluc3RhbmNlcyBvZiBbVF0KICAgKiBhcmUgYWNjZXNzZWQsIHRoZW4gdGhlIHJlc3VsdGluZyBpdGVyYWJsZSBjYW4gYmUgdXNlZCBhcyBhbiBgSXRlcmFibGU8VD5gLgogICAqLwogIHN0YXRpYyBJdGVyYWJsZTxUPiBjYXN0RnJvbTxTLCBUPihJdGVyYWJsZTxTPiBzb3VyY2UpID0+CiAgICAgIENhc3RJdGVyYWJsZTxTLCBUPihzb3VyY2UpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGBJdGVyYXRvcmAgdGhhdCBhbGxvd3MgaXRlcmF0aW5nIHRoZSBlbGVtZW50cyBvZiB0aGlzCiAgICogYEl0ZXJhYmxlYC4KICAgKgogICAqIEl0ZXJhYmxlIGNsYXNzZXMgbWF5IHNwZWNpZnkgdGhlIGl0ZXJhdGlvbiBvcmRlciBvZiB0aGVpciBlbGVtZW50cwogICAqIChmb3IgZXhhbXBsZSBbTGlzdF0gYWx3YXlzIGl0ZXJhdGUgaW4gaW5kZXggb3JkZXIpLAogICAqIG9yIHRoZXkgbWF5IGxlYXZlIGl0IHVuc3BlY2lmaWVkIChmb3IgZXhhbXBsZSBhIGhhc2gtYmFzZWQgW1NldF0KICAgKiBtYXkgaXRlcmF0ZSBpbiBhbnkgb3JkZXIpLgogICAqCiAgICogRWFjaCB0aW1lIGBpdGVyYXRvcmAgaXMgcmVhZCwgaXQgcmV0dXJucyBhIG5ldyBpdGVyYXRvciwKICAgKiB3aGljaCBjYW4gYmUgdXNlZCB0byBpdGVyYXRlIHRocm91Z2ggYWxsIHRoZSBlbGVtZW50cyBhZ2Fpbi4KICAgKiBUaGUgaXRlcmF0b3JzIG9mIHRoZSBzYW1lIGl0ZXJhYmxlIGNhbiBiZSBzdGVwcGVkIHRocm91Z2ggaW5kZXBlbmRlbnRseSwKICAgKiBidXQgc2hvdWxkIHJldHVybiB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBvcmRlciwKICAgKiBhcyBsb25nIGFzIHRoZSB1bmRlcmx5aW5nIGNvbGxlY3Rpb24gaXNuJ3QgY2hhbmdlZC4KICAgKgogICAqIE1vZGlmeWluZyB0aGUgY29sbGVjdGlvbiBtYXkgY2F1c2UgbmV3IGl0ZXJhdG9ycyB0byBwcm9kdWNlCiAgICogZGlmZmVyZW50IGVsZW1lbnRzLCBhbmQgbWF5IGNoYW5nZSB0aGUgb3JkZXIgb2YgZXhpc3RpbmcgZWxlbWVudHMuCiAgICogQSBbTGlzdF0gc3BlY2lmaWVzIGl0cyBpdGVyYXRpb24gb3JkZXIgcHJlY2lzZWx5LAogICAqIHNvIG1vZGlmeWluZyB0aGUgbGlzdCBjaGFuZ2VzIHRoZSBpdGVyYXRpb24gb3JkZXIgcHJlZGljdGFibHkuCiAgICogQSBoYXNoLWJhc2VkIFtTZXRdIG1heSBjaGFuZ2UgaXRzIGl0ZXJhdGlvbiBvcmRlciBjb21wbGV0ZWx5CiAgICogd2hlbiBhZGRpbmcgYSBuZXcgZWxlbWVudCB0byB0aGUgc2V0LgogICAqCiAgICogTW9kaWZ5aW5nIHRoZSB1bmRlcmx5aW5nIGNvbGxlY3Rpb24gYWZ0ZXIgY3JlYXRpbmcgdGhlIG5ldyBpdGVyYXRvcgogICAqIG1heSBjYXVzZSBhbiBlcnJvciB0aGUgbmV4dCB0aW1lIFtJdGVyYXRvci5tb3ZlTmV4dF0gaXMgY2FsbGVkCiAgICogb24gdGhhdCBpdGVyYXRvci4KICAgKiBBbnkgKm1vZGlmaWFibGUqIGl0ZXJhYmxlIGNsYXNzIHNob3VsZCBzcGVjaWZ5IHdoaWNoIG9wZXJhdGlvbnMgd2lsbAogICAqIGJyZWFrIGl0ZXJhdGlvbi4KICAgKi8KICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3I7CgogIC8qKgogICAqIFByb3ZpZGVzIGEgdmlldyBvZiB0aGlzIGl0ZXJhYmxlIGFzIGFuIGl0ZXJhYmxlIG9mIFtSXSBpbnN0YW5jZXMuCiAgICoKICAgKiBJZiB0aGlzIGl0ZXJhYmxlIG9ubHkgY29udGFpbnMgaW5zdGFuY2VzIG9mIFtSXSwgYWxsIG9wZXJhdGlvbnMKICAgKiB3aWxsIHdvcmsgY29ycmVjdGx5LiBJZiBhbnkgb3BlcmF0aW9uIHRyaWVzIHRvIGFjY2VzcyBhbiBlbGVtZW50CiAgICogdGhhdCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgW1JdLCB0aGUgYWNjZXNzIHdpbGwgdGhyb3cgaW5zdGVhZC4KICAgKgogICAqIFdoZW4gdGhlIHJldHVybmVkIGl0ZXJhYmxlIGNyZWF0ZXMgYSBuZXcgb2JqZWN0IHRoYXQgZGVwZW5kcyBvbgogICAqIHRoZSB0eXBlIFtSXSwgZS5nLiwgZnJvbSBbdG9MaXN0XSwgaXQgd2lsbCBoYXZlIGV4YWN0bHkgdGhlIHR5cGUgW1JdLgogICAqLwogIEl0ZXJhYmxlPFI+IGNhc3Q8Uj4oKSA9PiBJdGVyYWJsZS5jYXN0RnJvbTxFLCBSPih0aGlzKTsKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsYXp5IGNvbmNhdGVudGF0aW9uIG9mIHRoaXMgaXRlcmFibGUgYW5kIFtvdGhlcl0uCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgaXRlcmFibGUgd2lsbCBwcm92aWRlIHRoZSBzYW1lIGVsZW1lbnRzIGFzIHRoaXMgaXRlcmFibGUsCiAgICogYW5kLCBhZnRlciB0aGF0LCB0aGUgZWxlbWVudHMgb2YgW290aGVyXSwgaW4gdGhlIHNhbWUgb3JkZXIgYXMgaW4gdGhlCiAgICogb3JpZ2luYWwgaXRlcmFibGVzLgogICAqLwogIEl0ZXJhYmxlPEU+IGZvbGxvd2VkQnkoSXRlcmFibGU8RT4gb3RoZXIpIHsKICAgIGlmICh0aGlzIGlzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEU+KSB7CiAgICAgIHJldHVybiBGb2xsb3dlZEJ5SXRlcmFibGU8RT4uZmlyc3RFZmZpY2llbnQodGhpcywgb3RoZXIpOwogICAgfQogICAgcmV0dXJuIEZvbGxvd2VkQnlJdGVyYWJsZTxFPih0aGlzLCBvdGhlcik7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGxhenkgW0l0ZXJhYmxlXSB3aXRoIGVsZW1lbnRzIHRoYXQgYXJlIGNyZWF0ZWQgYnkKICAgKiBjYWxsaW5nIGBmYCBvbiBlYWNoIGVsZW1lbnQgb2YgdGhpcyBgSXRlcmFibGVgIGluIGl0ZXJhdGlvbiBvcmRlci4KICAgKgogICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSB2aWV3IG9mIHRoZSBtYXBwZWQgZWxlbWVudHMuIEFzIGxvbmcgYXMgdGhlCiAgICogcmV0dXJuZWQgW0l0ZXJhYmxlXSBpcyBub3QgaXRlcmF0ZWQgb3ZlciwgdGhlIHN1cHBsaWVkIGZ1bmN0aW9uIFtmXSB3aWxsCiAgICogbm90IGJlIGludm9rZWQuIFRoZSB0cmFuc2Zvcm1lZCBlbGVtZW50cyB3aWxsIG5vdCBiZSBjYWNoZWQuIEl0ZXJhdGluZwogICAqIG11bHRpcGxlIHRpbWVzIG92ZXIgdGhlIHJldHVybmVkIFtJdGVyYWJsZV0gd2lsbCBpbnZva2UgdGhlIHN1cHBsaWVkCiAgICogZnVuY3Rpb24gW2ZdIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzYW1lIGVsZW1lbnQuCiAgICoKICAgKiBNZXRob2RzIG9uIHRoZSByZXR1cm5lZCBpdGVyYWJsZSBhcmUgYWxsb3dlZCB0byBvbWl0IGNhbGxpbmcgYGZgCiAgICogb24gYW55IGVsZW1lbnQgd2hlcmUgdGhlIHJlc3VsdCBpc24ndCBuZWVkZWQuCiAgICogRm9yIGV4YW1wbGUsIFtlbGVtZW50QXRdIG1heSBjYWxsIGBmYCBvbmx5IG9uY2UuCiAgICovCiAgSXRlcmFibGU8VD4gbWFwPFQ+KFQgZihFIGUpKSA9PiBNYXBwZWRJdGVyYWJsZTxFLCBUPih0aGlzLCBmKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBsYXp5IFtJdGVyYWJsZV0gd2l0aCBhbGwgZWxlbWVudHMgdGhhdCBzYXRpc2Z5IHRoZQogICAqIHByZWRpY2F0ZSBbdGVzdF0uCiAgICoKICAgKiBUaGUgbWF0Y2hpbmcgZWxlbWVudHMgaGF2ZSB0aGUgc2FtZSBvcmRlciBpbiB0aGUgcmV0dXJuZWQgaXRlcmFibGUKICAgKiBhcyB0aGV5IGhhdmUgaW4gW2l0ZXJhdG9yXS4KICAgKgogICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSB2aWV3IG9mIHRoZSBtYXBwZWQgZWxlbWVudHMuCiAgICogQXMgbG9uZyBhcyB0aGUgcmV0dXJuZWQgW0l0ZXJhYmxlXSBpcyBub3QgaXRlcmF0ZWQgb3ZlciwKICAgKiB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gW3Rlc3RdIHdpbGwgbm90IGJlIGludm9rZWQuCiAgICogSXRlcmF0aW5nIHdpbGwgbm90IGNhY2hlIHJlc3VsdHMsIGFuZCB0aHVzIGl0ZXJhdGluZyBtdWx0aXBsZSB0aW1lcyBvdmVyCiAgICogdGhlIHJldHVybmVkIFtJdGVyYWJsZV0gbWF5IGludm9rZSB0aGUgc3VwcGxpZWQKICAgKiBmdW5jdGlvbiBbdGVzdF0gbXVsdGlwbGUgdGltZXMgb24gdGhlIHNhbWUgZWxlbWVudC4KICAgKi8KICBJdGVyYWJsZTxFPiB3aGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gV2hlcmVJdGVyYWJsZTxFPih0aGlzLCB0ZXN0KTsKCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBsYXp5IFtJdGVyYWJsZV0gd2l0aCBhbGwgZWxlbWVudHMgdGhhdCBoYXZlIHR5cGUgW1RdLgogICAqCiAgICogVGhlIG1hdGNoaW5nIGVsZW1lbnRzIGhhdmUgdGhlIHNhbWUgb3JkZXIgaW4gdGhlIHJldHVybmVkIGl0ZXJhYmxlCiAgICogYXMgdGhleSBoYXZlIGluIFtpdGVyYXRvcl0uCiAgICoKICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgdmlldyBvZiB0aGUgbWFwcGVkIGVsZW1lbnRzLgogICAqIEl0ZXJhdGluZyB3aWxsIG5vdCBjYWNoZSByZXN1bHRzLCBhbmQgdGh1cyBpdGVyYXRpbmcgbXVsdGlwbGUgdGltZXMgb3ZlcgogICAqIHRoZSByZXR1cm5lZCBbSXRlcmFibGVdIG1heSB5aWVsZCBkaWZmZXJlbnQgcmVzdWx0cywKICAgKiBpZiB0aGUgdW5kZXJseWluZyBlbGVtZW50cyBjaGFuZ2UgYmV0d2VlbiBpdGVyYXRpb25zLgogICAqLwogIEl0ZXJhYmxlPFQ+IHdoZXJlVHlwZTxUPigpID0+IFdoZXJlVHlwZUl0ZXJhYmxlPFQ+KHRoaXMpOwoKICAvKioKICAgKiBFeHBhbmRzIGVhY2ggZWxlbWVudCBvZiB0aGlzIFtJdGVyYWJsZV0gaW50byB6ZXJvIG9yIG1vcmUgZWxlbWVudHMuCiAgICoKICAgKiBUaGUgcmVzdWx0aW5nIEl0ZXJhYmxlIHJ1bnMgdGhyb3VnaCB0aGUgZWxlbWVudHMgcmV0dXJuZWQKICAgKiBieSBbZl0gZm9yIGVhY2ggZWxlbWVudCBvZiB0aGlzLCBpbiBpdGVyYXRpb24gb3JkZXIuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgW0l0ZXJhYmxlXSBpcyBsYXp5LCBhbmQgY2FsbHMgW2ZdIGZvciBlYWNoIGVsZW1lbnQKICAgKiBvZiB0aGlzIGV2ZXJ5IHRpbWUgaXQncyBpdGVyYXRlZC4KICAgKgogICAqIEV4YW1wbGU6CiAgICoKICAgKiAgICAgdmFyIHBhaXJzID0gW1sxLCAyXSwgWzMsIDRdXTsKICAgKiAgICAgdmFyIGZsYXR0ZW5lZCA9IHBhaXJzLmV4cGFuZCgocGFpcikgPT4gcGFpcikudG9MaXN0KCk7CiAgICogICAgIHByaW50KGZsYXR0ZW5lZCk7IC8vID0+IFsxLCAyLCAzLCA0XTsKICAgKgogICAqICAgICB2YXIgaW5wdXQgPSBbMSwgMiwgM107CiAgICogICAgIHZhciBkdXBsaWNhdGVkID0gaW5wdXQuZXhwYW5kKChpKSA9PiBbaSwgaV0pLnRvTGlzdCgpOwogICAqICAgICBwcmludChkdXBsaWNhdGVkKTsgLy8gPT4gWzEsIDEsIDIsIDIsIDMsIDNdCiAgICoKICAgKi8KICBJdGVyYWJsZTxUPiBleHBhbmQ8VD4oSXRlcmFibGU8VD4gZihFIGVsZW1lbnQpKSA9PgogICAgICBFeHBhbmRJdGVyYWJsZTxFLCBUPih0aGlzLCBmKTsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBjb2xsZWN0aW9uIGNvbnRhaW5zIGFuIGVsZW1lbnQgZXF1YWwgdG8gW2VsZW1lbnRdLgogICAqCiAgICogVGhpcyBvcGVyYXRpb24gd2lsbCBjaGVjayBlYWNoIGVsZW1lbnQgaW4gb3JkZXIgZm9yIGJlaW5nIGVxdWFsIHRvCiAgICogW2VsZW1lbnRdLCB1bmxlc3MgaXQgaGFzIGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIGZpbmQgYW4gZWxlbWVudAogICAqIGVxdWFsIHRvIFtlbGVtZW50XS4KICAgKgogICAqIFRoZSBlcXVhbGl0eSB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIFtlbGVtZW50XSBpcyBlcXVhbCB0byBhbiBlbGVtZW50IG9mCiAgICogdGhlIGl0ZXJhYmxlIGRlZmF1bHRzIHRvIHRoZSBbT2JqZWN0Lj09XSBvZiB0aGUgZWxlbWVudC4KICAgKgogICAqIFNvbWUgdHlwZXMgb2YgaXRlcmFibGUgbWF5IGhhdmUgYSBkaWZmZXJlbnQgZXF1YWxpdHkgdXNlZCBmb3IgaXRzIGVsZW1lbnRzLgogICAqIEZvciBleGFtcGxlLCBhIFtTZXRdIG1heSBoYXZlIGEgY3VzdG9tIGVxdWFsaXR5CiAgICogKHNlZSBbU2V0LmlkZW50aXR5XSkgdGhhdCBpdHMgYGNvbnRhaW5zYCB1c2VzLgogICAqIExpa2V3aXNlIHRoZSBgSXRlcmFibGVgIHJldHVybmVkIGJ5IGEgW01hcC5rZXlzXSBjYWxsCiAgICogc2hvdWxkIHVzZSB0aGUgc2FtZSBlcXVhbGl0eSB0aGF0IHRoZSBgTWFwYCB1c2VzIGZvciBrZXlzLgogICAqLwogIGJvb2wgY29udGFpbnMoT2JqZWN0IGVsZW1lbnQpIHsKICAgIGZvciAoRSBlIGluIHRoaXMpIHsKICAgICAgaWYgKGUgPT0gZWxlbWVudCkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvKioKICAgKiBBcHBsaWVzIHRoZSBmdW5jdGlvbiBbZl0gdG8gZWFjaCBlbGVtZW50IG9mIHRoaXMgY29sbGVjdGlvbiBpbiBpdGVyYXRpb24KICAgKiBvcmRlci4KICAgKi8KICB2b2lkIGZvckVhY2godm9pZCBmKEUgZWxlbWVudCkpIHsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIGYoZWxlbWVudCk7CiAgfQoKICAvKioKICAgKiBSZWR1Y2VzIGEgY29sbGVjdGlvbiB0byBhIHNpbmdsZSB2YWx1ZSBieSBpdGVyYXRpdmVseSBjb21iaW5pbmcgZWxlbWVudHMKICAgKiBvZiB0aGUgY29sbGVjdGlvbiB1c2luZyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24uCiAgICoKICAgKiBUaGUgaXRlcmFibGUgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBlbGVtZW50LgogICAqIElmIGl0IGhhcyBvbmx5IG9uZSBlbGVtZW50LCB0aGF0IGVsZW1lbnQgaXMgcmV0dXJuZWQuCiAgICoKICAgKiBPdGhlcndpc2UgdGhpcyBtZXRob2Qgc3RhcnRzIHdpdGggdGhlIGZpcnN0IGVsZW1lbnQgZnJvbSB0aGUgaXRlcmF0b3IsCiAgICogYW5kIHRoZW4gY29tYmluZXMgaXQgd2l0aCB0aGUgcmVtYWluaW5nIGVsZW1lbnRzIGluIGl0ZXJhdGlvbiBvcmRlciwKICAgKiBhcyBpZiBieToKICAgKgogICAqICAgICBFIHZhbHVlID0gaXRlcmFibGUuZmlyc3Q7CiAgICogICAgIGl0ZXJhYmxlLnNraXAoMSkuZm9yRWFjaCgoZWxlbWVudCkgewogICAqICAgICAgIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgZWxlbWVudCk7CiAgICogICAgIH0pOwogICAqICAgICByZXR1cm4gdmFsdWU7CiAgICoKICAgKiBFeGFtcGxlIG9mIGNhbGN1bGF0aW5nIHRoZSBzdW0gb2YgYW4gaXRlcmFibGU6CiAgICoKICAgKiAgICAgaXRlcmFibGUucmVkdWNlKCh2YWx1ZSwgZWxlbWVudCkgPT4gdmFsdWUgKyBlbGVtZW50KTsKICAgKgogICAqLwogIEUgcmVkdWNlKEUgY29tYmluZShFIHZhbHVlLCBFIGVsZW1lbnQpKSB7CiAgICBJdGVyYXRvcjxFPiBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3I7CiAgICBpZiAoIWl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB9CiAgICBFIHZhbHVlID0gaXRlcmF0b3IuY3VycmVudDsKICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgaXRlcmF0b3IuY3VycmVudCk7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICAvKioKICAgKiBSZWR1Y2VzIGEgY29sbGVjdGlvbiB0byBhIHNpbmdsZSB2YWx1ZSBieSBpdGVyYXRpdmVseSBjb21iaW5pbmcgZWFjaAogICAqIGVsZW1lbnQgb2YgdGhlIGNvbGxlY3Rpb24gd2l0aCBhbiBleGlzdGluZyB2YWx1ZQogICAqCiAgICogVXNlcyBbaW5pdGlhbFZhbHVlXSBhcyB0aGUgaW5pdGlhbCB2YWx1ZSwKICAgKiB0aGVuIGl0ZXJhdGVzIHRocm91Z2ggdGhlIGVsZW1lbnRzIGFuZCB1cGRhdGVzIHRoZSB2YWx1ZSB3aXRoCiAgICogZWFjaCBlbGVtZW50IHVzaW5nIHRoZSBbY29tYmluZV0gZnVuY3Rpb24sIGFzIGlmIGJ5OgogICAqCiAgICogICAgIHZhciB2YWx1ZSA9IGluaXRpYWxWYWx1ZTsKICAgKiAgICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAqICAgICAgIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgZWxlbWVudCk7CiAgICogICAgIH0KICAgKiAgICAgcmV0dXJuIHZhbHVlOwogICAqCiAgICogRXhhbXBsZSBvZiBjYWxjdWxhdGluZyB0aGUgc3VtIG9mIGFuIGl0ZXJhYmxlOgogICAqCiAgICogICAgIGl0ZXJhYmxlLmZvbGQoMCwgKHByZXYsIGVsZW1lbnQpID0+IHByZXYgKyBlbGVtZW50KTsKICAgKgogICAqLwogIFQgZm9sZDxUPihUIGluaXRpYWxWYWx1ZSwgVCBjb21iaW5lKFQgcHJldmlvdXNWYWx1ZSwgRSBlbGVtZW50KSkgewogICAgdmFyIHZhbHVlID0gaW5pdGlhbFZhbHVlOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgdmFsdWUgPSBjb21iaW5lKHZhbHVlLCBlbGVtZW50KTsKICAgIHJldHVybiB2YWx1ZTsKICB9CgogIC8qKgogICAqIENoZWNrcyB3aGV0aGVyIGV2ZXJ5IGVsZW1lbnQgb2YgdGhpcyBpdGVyYWJsZSBzYXRpc2ZpZXMgW3Rlc3RdLgogICAqCiAgICogQ2hlY2tzIGV2ZXJ5IGVsZW1lbnQgaW4gaXRlcmF0aW9uIG9yZGVyLCBhbmQgcmV0dXJucyBgZmFsc2VgIGlmCiAgICogYW55IG9mIHRoZW0gbWFrZSBbdGVzdF0gcmV0dXJuIGBmYWxzZWAsIG90aGVyd2lzZSByZXR1cm5zIGB0cnVlYC4KICAgKi8KICBib29sIGV2ZXJ5KGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICghdGVzdChlbGVtZW50KSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvKioKICAgKiBDb252ZXJ0cyBlYWNoIGVsZW1lbnQgdG8gYSBbU3RyaW5nXSBhbmQgY29uY2F0ZW5hdGVzIHRoZSBzdHJpbmdzLgogICAqCiAgICogSXRlcmF0ZXMgdGhyb3VnaCBlbGVtZW50cyBvZiB0aGlzIGl0ZXJhYmxlLAogICAqIGNvbnZlcnRzIGVhY2ggb25lIHRvIGEgW1N0cmluZ10gYnkgY2FsbGluZyBbT2JqZWN0LnRvU3RyaW5nXSwKICAgKiBhbmQgdGhlbiBjb25jYXRlbmF0ZXMgdGhlIHN0cmluZ3MsIHdpdGggdGhlCiAgICogW3NlcGFyYXRvcl0gc3RyaW5nIGludGVybGVhdmVkIGJldHdlZW4gdGhlIGVsZW1lbnRzLgogICAqLwogIFN0cmluZyBqb2luKFtTdHJpbmcgc2VwYXJhdG9yID0gIiJdKSB7CiAgICBJdGVyYXRvcjxFPiBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3I7CiAgICBpZiAoIWl0ZXJhdG9yLm1vdmVOZXh0KCkpIHJldHVybiAiIjsKICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBTdHJpbmdCdWZmZXIoKTsKICAgIGlmIChzZXBhcmF0b3IgPT0gbnVsbCB8fCBzZXBhcmF0b3IgPT0gIiIpIHsKICAgICAgZG8gewogICAgICAgIGJ1ZmZlci53cml0ZSgiJHtpdGVyYXRvci5jdXJyZW50fSIpOwogICAgICB9IHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKTsKICAgIH0gZWxzZSB7CiAgICAgIGJ1ZmZlci53cml0ZSgiJHtpdGVyYXRvci5jdXJyZW50fSIpOwogICAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICAgIGJ1ZmZlci53cml0ZShzZXBhcmF0b3IpOwogICAgICAgIGJ1ZmZlci53cml0ZSgiJHtpdGVyYXRvci5jdXJyZW50fSIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICAvKioKICAgKiBDaGVja3Mgd2hldGhlciBhbnkgZWxlbWVudCBvZiB0aGlzIGl0ZXJhYmxlIHNhdGlzZmllcyBbdGVzdF0uCiAgICoKICAgKiBDaGVja3MgZXZlcnkgZWxlbWVudCBpbiBpdGVyYXRpb24gb3JkZXIsIGFuZCByZXR1cm5zIGB0cnVlYCBpZgogICAqIGFueSBvZiB0aGVtIG1ha2UgW3Rlc3RdIHJldHVybiBgdHJ1ZWAsIG90aGVyd2lzZSByZXR1cm5zIGZhbHNlLgogICAqLwogIGJvb2wgYW55KGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYSBbTGlzdF0gY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcyBbSXRlcmFibGVdLgogICAqCiAgICogVGhlIGVsZW1lbnRzIGFyZSBpbiBpdGVyYXRpb24gb3JkZXIuCiAgICogVGhlIGxpc3QgaXMgZml4ZWQtbGVuZ3RoIGlmIFtncm93YWJsZV0gaXMgZmFsc2UuCiAgICovCiAgTGlzdDxFPiB0b0xpc3Qoe2Jvb2wgZ3Jvd2FibGUgPSB0cnVlfSkgewogICAgcmV0dXJuIExpc3Q8RT4uZnJvbSh0aGlzLCBncm93YWJsZTogZ3Jvd2FibGUpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtTZXRdIGNvbnRhaW5pbmcgdGhlIHNhbWUgZWxlbWVudHMgYXMgdGhpcyBpdGVyYWJsZS4KICAgKgogICAqIFRoZSBzZXQgbWF5IGNvbnRhaW4gZmV3ZXIgZWxlbWVudHMgdGhhbiB0aGUgaXRlcmFibGUsCiAgICogaWYgdGhlIGl0ZXJhYmxlIGNvbnRhaW5zIGFuIGVsZW1lbnQgbW9yZSB0aGFuIG9uY2UsCiAgICogb3IgaXQgY29udGFpbnMgb25lIG9yIG1vcmUgZWxlbWVudHMgdGhhdCBhcmUgZXF1YWwuCiAgICogVGhlIG9yZGVyIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUgc2V0IGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIHRoZSBzYW1lCiAgICogYXMgZm9yIHRoZSBpdGVyYWJsZS4KICAgKi8KICBTZXQ8RT4gdG9TZXQoKSA9PiBTZXQ8RT4uZnJvbSh0aGlzKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIFt0aGlzXS4KICAgKgogICAqIENvdW50aW5nIGFsbCBlbGVtZW50cyBtYXkgaW52b2x2ZSBpdGVyYXRpbmcgdGhyb3VnaCBhbGwgZWxlbWVudHMgYW5kIGNhbgogICAqIHRoZXJlZm9yZSBiZSBzbG93LgogICAqIFNvbWUgaXRlcmFibGVzIGhhdmUgYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gZmluZCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLgogICAqLwogIGludCBnZXQgbGVuZ3RoIHsKICAgIGFzc2VydCh0aGlzIGlzISBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZSk7CiAgICBpbnQgY291bnQgPSAwOwogICAgSXRlcmF0b3IgaXQgPSBpdGVyYXRvcjsKICAgIHdoaWxlIChpdC5tb3ZlTmV4dCgpKSB7CiAgICAgIGNvdW50Kys7CiAgICB9CiAgICByZXR1cm4gY291bnQ7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGVyZSBhcmUgbm8gZWxlbWVudHMgaW4gdGhpcyBjb2xsZWN0aW9uLgogICAqCiAgICogTWF5IGJlIGNvbXB1dGVkIGJ5IGNoZWNraW5nIGlmIGBpdGVyYXRvci5tb3ZlTmV4dCgpYCByZXR1cm5zIGBmYWxzZWAuCiAgICovCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiAhaXRlcmF0b3IubW92ZU5leHQoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBlbGVtZW50IGluIHRoaXMgY29sbGVjdGlvbi4KICAgKgogICAqIE1heSBiZSBjb21wdXRlZCBieSBjaGVja2luZyBpZiBgaXRlcmF0b3IubW92ZU5leHQoKWAgcmV0dXJucyBgdHJ1ZWAuCiAgICovCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiAhaXNFbXB0eTsKCiAgLyoqCiAgICogUmV0dXJucyBhIGxhenkgaXRlcmFibGUgb2YgdGhlIFtjb3VudF0gZmlyc3QgZWxlbWVudHMgb2YgdGhpcyBpdGVyYWJsZS4KICAgKgogICAqIFRoZSByZXR1cm5lZCBgSXRlcmFibGVgIG1heSBjb250YWluIGZld2VyIHRoYW4gYGNvdW50YCBlbGVtZW50cywgaWYgYHRoaXNgCiAgICogY29udGFpbnMgZmV3ZXIgdGhhbiBgY291bnRgIGVsZW1lbnRzLgogICAqCiAgICogVGhlIGVsZW1lbnRzIGNhbiBiZSBjb21wdXRlZCBieSBzdGVwcGluZyB0aHJvdWdoIFtpdGVyYXRvcl0gdW50aWwgW2NvdW50XQogICAqIGVsZW1lbnRzIGhhdmUgYmVlbiBzZWVuLgogICAqCiAgICogVGhlIGBjb3VudGAgbXVzdCBub3QgYmUgbmVnYXRpdmUuCiAgICovCiAgSXRlcmFibGU8RT4gdGFrZShpbnQgY291bnQpIHsKICAgIHJldHVybiBUYWtlSXRlcmFibGU8RT4odGhpcywgY291bnQpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIGxhenkgaXRlcmFibGUgb2YgdGhlIGxlYWRpbmcgZWxlbWVudHMgc2F0aXNmeWluZyBbdGVzdF0uCiAgICoKICAgKiBUaGUgZmlsdGVyaW5nIGhhcHBlbnMgbGF6aWx5LiBFdmVyeSBuZXcgaXRlcmF0b3Igb2YgdGhlIHJldHVybmVkCiAgICogaXRlcmFibGUgc3RhcnRzIGl0ZXJhdGluZyBvdmVyIHRoZSBlbGVtZW50cyBvZiBgdGhpc2AuCiAgICoKICAgKiBUaGUgZWxlbWVudHMgY2FuIGJlIGNvbXB1dGVkIGJ5IHN0ZXBwaW5nIHRocm91Z2ggW2l0ZXJhdG9yXSB1bnRpbCBhbgogICAqIGVsZW1lbnQgaXMgZm91bmQgd2hlcmUgYHRlc3QoZWxlbWVudClgIGlzIGZhbHNlLiBBdCB0aGF0IHBvaW50LAogICAqIHRoZSByZXR1cm5lZCBpdGVyYWJsZSBzdG9wcyAoaXRzIGBtb3ZlTmV4dCgpYCByZXR1cm5zIGZhbHNlKS4KICAgKi8KICBJdGVyYWJsZTxFPiB0YWtlV2hpbGUoYm9vbCB0ZXN0KEUgdmFsdWUpKSB7CiAgICByZXR1cm4gVGFrZVdoaWxlSXRlcmFibGU8RT4odGhpcywgdGVzdCk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGFuIFtJdGVyYWJsZV0gdGhhdCBwcm92aWRlcyBhbGwgYnV0IHRoZSBmaXJzdCBbY291bnRdIGVsZW1lbnRzLgogICAqCiAgICogV2hlbiB0aGUgcmV0dXJuZWQgaXRlcmFibGUgaXMgaXRlcmF0ZWQsIGl0IHN0YXJ0cyBpdGVyYXRpbmcgb3ZlciBgdGhpc2AsCiAgICogZmlyc3Qgc2tpcHBpbmcgcGFzdCB0aGUgaW5pdGlhbCBbY291bnRdIGVsZW1lbnRzLgogICAqIElmIGB0aGlzYCBoYXMgZmV3ZXIgdGhhbiBgY291bnRgIGVsZW1lbnRzLCB0aGVuIHRoZSByZXN1bHRpbmcgSXRlcmFibGUgaXMKICAgKiBlbXB0eS4KICAgKiBBZnRlciB0aGF0LCB0aGUgcmVtYWluaW5nIGVsZW1lbnRzIGFyZSBpdGVyYXRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcwogICAqIGluIHRoaXMgaXRlcmFibGUuCiAgICoKICAgKiBTb21lIGl0ZXJhYmxlcyBtYXkgYmUgYWJsZSB0byBmaW5kIGxhdGVyIGVsZW1lbnRzIHdpdGhvdXQgZmlyc3QgaXRlcmF0aW5nCiAgICogdGhyb3VnaCBlYXJsaWVyIGVsZW1lbnRzLCBmb3IgZXhhbXBsZSB3aGVuIGl0ZXJhdGluZyBhIFtMaXN0XS4KICAgKiBTdWNoIGl0ZXJhYmxlcyBhcmUgYWxsb3dlZCB0byBpZ25vcmUgdGhlIGluaXRpYWwgc2tpcHBlZCBlbGVtZW50cy4KICAgKgogICAqIFRoZSBbY291bnRdIG11c3Qgbm90IGJlIG5lZ2F0aXZlLgogICAqLwogIEl0ZXJhYmxlPEU+IHNraXAoaW50IGNvdW50KSB7CiAgICByZXR1cm4gU2tpcEl0ZXJhYmxlPEU+KHRoaXMsIGNvdW50KTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYW4gYEl0ZXJhYmxlYCB0aGF0IHNraXBzIGxlYWRpbmcgZWxlbWVudHMgd2hpbGUgW3Rlc3RdIGlzIHNhdGlzZmllZC4KICAgKgogICAqIFRoZSBmaWx0ZXJpbmcgaGFwcGVucyBsYXppbHkuIEV2ZXJ5IG5ldyBbSXRlcmF0b3JdIG9mIHRoZSByZXR1cm5lZAogICAqIGl0ZXJhYmxlIGl0ZXJhdGVzIG92ZXIgYWxsIGVsZW1lbnRzIG9mIGB0aGlzYC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBpdGVyYWJsZSBwcm92aWRlcyBlbGVtZW50cyBieSBpdGVyYXRpbmcgdGhpcyBpdGVyYWJsZSwKICAgKiBidXQgc2tpcHBpbmcgb3ZlciBhbGwgaW5pdGlhbCBlbGVtZW50cyB3aGVyZSBgdGVzdChlbGVtZW50KWAgcmV0dXJucwogICAqIHRydWUuIElmIGFsbCBlbGVtZW50cyBzYXRpc2Z5IGB0ZXN0YCB0aGUgcmVzdWx0aW5nIGl0ZXJhYmxlIGlzIGVtcHR5LAogICAqIG90aGVyd2lzZSBpdCBpdGVyYXRlcyB0aGUgcmVtYWluaW5nIGVsZW1lbnRzIGluIHRoZWlyIG9yaWdpbmFsIG9yZGVyLAogICAqIHN0YXJ0aW5nIHdpdGggdGhlIGZpcnN0IGVsZW1lbnQgZm9yIHdoaWNoIGB0ZXN0KGVsZW1lbnQpYCByZXR1cm5zIGBmYWxzZWAuCiAgICovCiAgSXRlcmFibGU8RT4gc2tpcFdoaWxlKGJvb2wgdGVzdChFIHZhbHVlKSkgewogICAgcmV0dXJuIFNraXBXaGlsZUl0ZXJhYmxlPEU+KHRoaXMsIHRlc3QpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudC4KICAgKgogICAqIFRocm93cyBhIFtTdGF0ZUVycm9yXSBpZiBgdGhpc2AgaXMgZW1wdHkuCiAgICogT3RoZXJ3aXNlIHJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGl0ZXJhdGlvbiBvcmRlciwKICAgKiBlcXVpdmFsZW50IHRvIGB0aGlzLmVsZW1lbnRBdCgwKWAuCiAgICovCiAgRSBnZXQgZmlyc3QgewogICAgSXRlcmF0b3I8RT4gaXQgPSBpdGVyYXRvcjsKICAgIGlmICghaXQubW92ZU5leHQoKSkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIH0KICAgIHJldHVybiBpdC5jdXJyZW50OwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbGFzdCBlbGVtZW50LgogICAqCiAgICogVGhyb3dzIGEgW1N0YXRlRXJyb3JdIGlmIGB0aGlzYCBpcyBlbXB0eS4KICAgKiBPdGhlcndpc2UgbWF5IGl0ZXJhdGUgdGhyb3VnaCB0aGUgZWxlbWVudHMgYW5kIHJldHVybnMgdGhlIGxhc3Qgb25lCiAgICogc2Vlbi4KICAgKiBTb21lIGl0ZXJhYmxlcyBtYXkgaGF2ZSBtb3JlIGVmZmljaWVudCB3YXlzIHRvIGZpbmQgdGhlIGxhc3QgZWxlbWVudAogICAqIChmb3IgZXhhbXBsZSBhIGxpc3QgY2FuIGRpcmVjdGx5IGFjY2VzcyB0aGUgbGFzdCBlbGVtZW50LAogICAqIHdpdGhvdXQgaXRlcmF0aW5nIHRocm91Z2ggdGhlIHByZXZpb3VzIG9uZXMpLgogICAqLwogIEUgZ2V0IGxhc3QgewogICAgSXRlcmF0b3I8RT4gaXQgPSBpdGVyYXRvcjsKICAgIGlmICghaXQubW92ZU5leHQoKSkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIH0KICAgIEUgcmVzdWx0OwogICAgZG8gewogICAgICByZXN1bHQgPSBpdC5jdXJyZW50OwogICAgfSB3aGlsZSAoaXQubW92ZU5leHQoKSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogQ2hlY2tzIHRoYXQgdGhpcyBpdGVyYWJsZSBoYXMgb25seSBvbmUgZWxlbWVudCwgYW5kIHJldHVybnMgdGhhdCBlbGVtZW50LgogICAqCiAgICogVGhyb3dzIGEgW1N0YXRlRXJyb3JdIGlmIGB0aGlzYCBpcyBlbXB0eSBvciBoYXMgbW9yZSB0aGFuIG9uZSBlbGVtZW50LgogICAqLwogIEUgZ2V0IHNpbmdsZSB7CiAgICBJdGVyYXRvcjxFPiBpdCA9IGl0ZXJhdG9yOwogICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIEUgcmVzdWx0ID0gaXQuY3VycmVudDsKICAgIGlmIChpdC5tb3ZlTmV4dCgpKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IHNhdGlzZmllcyB0aGUgZ2l2ZW4gcHJlZGljYXRlIFt0ZXN0XS4KICAgKgogICAqIEl0ZXJhdGVzIHRocm91Z2ggZWxlbWVudHMgYW5kIHJldHVybnMgdGhlIGZpcnN0IHRvIHNhdGlzZnkgW3Rlc3RdLgogICAqCiAgICogSWYgbm8gZWxlbWVudCBzYXRpc2ZpZXMgW3Rlc3RdLCB0aGUgcmVzdWx0IG9mIGludm9raW5nIHRoZSBbb3JFbHNlXQogICAqIGZ1bmN0aW9uIGlzIHJldHVybmVkLgogICAqIElmIFtvckVsc2VdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHRocm93aW5nIGEgW1N0YXRlRXJyb3JdLgogICAqLwogIEUgZmlyc3RXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwge0Ugb3JFbHNlKCl9KSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsYXN0IGVsZW1lbnQgdGhhdCBzYXRpc2ZpZXMgdGhlIGdpdmVuIHByZWRpY2F0ZSBbdGVzdF0uCiAgICoKICAgKiBBbiBpdGVyYWJsZSB0aGF0IGNhbiBhY2Nlc3MgaXRzIGVsZW1lbnRzIGRpcmVjdGx5IG1heSBjaGVjayBpdHMKICAgKiBlbGVtZW50cyBpbiBhbnkgb3JkZXIgKGZvciBleGFtcGxlIGEgbGlzdCBzdGFydHMgYnkgY2hlY2tpbmcgdGhlCiAgICogbGFzdCBlbGVtZW50IGFuZCB0aGVuIG1vdmVzIHRvd2FyZHMgdGhlIHN0YXJ0IG9mIHRoZSBsaXN0KS4KICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpdGVyYXRlcyBlbGVtZW50cyBpbiBpdGVyYXRpb24gb3JkZXIsCiAgICogY2hlY2tzIGB0ZXN0KGVsZW1lbnQpYCBmb3IgZWFjaCwKICAgKiBhbmQgZmluYWxseSByZXR1cm5zIHRoYXQgbGFzdCBvbmUgdGhhdCBtYXRjaGVkLgogICAqCiAgICogSWYgbm8gZWxlbWVudCBzYXRpc2ZpZXMgW3Rlc3RdLCB0aGUgcmVzdWx0IG9mIGludm9raW5nIHRoZSBbb3JFbHNlXQogICAqIGZ1bmN0aW9uIGlzIHJldHVybmVkLgogICAqIElmIFtvckVsc2VdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHRocm93aW5nIGEgW1N0YXRlRXJyb3JdLgogICAqLwogIEUgbGFzdFdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCB7RSBvckVsc2UoKX0pIHsKICAgIEUgcmVzdWx0OwogICAgYm9vbCBmb3VuZE1hdGNoaW5nID0gZmFsc2U7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgcmVzdWx0ID0gZWxlbWVudDsKICAgICAgICBmb3VuZE1hdGNoaW5nID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHJldHVybiByZXN1bHQ7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgc2luZ2xlIGVsZW1lbnQgdGhhdCBzYXRpc2ZpZXMgW3Rlc3RdLgogICAqCiAgICogQ2hlY2tzIGVsZW1lbnRzIHRvIHNlZSBpZiBgdGVzdChlbGVtZW50KWAgcmV0dXJucyB0cnVlLgogICAqIElmIGV4YWN0bHkgb25lIGVsZW1lbnQgc2F0aXNmaWVzIFt0ZXN0XSwgdGhhdCBlbGVtZW50IGlzIHJldHVybmVkLgogICAqIElmIG1vcmUgdGhhbiBvbmUgbWF0Y2hpbmcgZWxlbWVudCBpcyBmb3VuZCwgdGhyb3dzIFtTdGF0ZUVycm9yXS4KICAgKiBJZiBubyBtYXRjaGluZyBlbGVtZW50IGlzIGZvdW5kLCByZXR1cm5zIHRoZSByZXN1bHQgb2YgW29yRWxzZV0uCiAgICogSWYgW29yRWxzZV0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGhyb3dpbmcgYSBbU3RhdGVFcnJvcl0uCiAgICovCiAgRSBzaW5nbGVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwge0Ugb3JFbHNlKCl9KSB7CiAgICBFIHJlc3VsdDsKICAgIGJvb2wgZm91bmRNYXRjaGluZyA9IGZhbHNlOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAodGVzdChlbGVtZW50KSkgewogICAgICAgIGlmIChmb3VuZE1hdGNoaW5nKSB7CiAgICAgICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICAgICAgfQogICAgICAgIHJlc3VsdCA9IGVsZW1lbnQ7CiAgICAgICAgZm91bmRNYXRjaGluZyA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIGlmIChmb3VuZE1hdGNoaW5nKSByZXR1cm4gcmVzdWx0OwogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIFtpbmRleF10aCBlbGVtZW50LgogICAqCiAgICogVGhlIFtpbmRleF0gbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kIGxlc3MgdGhhbiBbbGVuZ3RoXS4KICAgKiBJbmRleCB6ZXJvIHJlcHJlc2VudHMgdGhlIGZpcnN0IGVsZW1lbnQgKHNvIGBpdGVyYWJsZS5lbGVtZW50QXQoMClgIGlzCiAgICogZXF1aXZhbGVudCB0byBgaXRlcmFibGUuZmlyc3RgKS4KICAgKgogICAqIE1heSBpdGVyYXRlIHRocm91Z2ggdGhlIGVsZW1lbnRzIGluIGl0ZXJhdGlvbiBvcmRlciwgaWdub3JpbmcgdGhlCiAgICogZmlyc3QgW2luZGV4XSBlbGVtZW50cyBhbmQgdGhlbiByZXR1cm5pbmcgdGhlIG5leHQuCiAgICogU29tZSBpdGVyYWJsZXMgbWF5IGhhdmUgbW9yZSBhIGVmZmljaWVudCB3YXkgdG8gZmluZCB0aGUgZWxlbWVudC4KICAgKi8KICBFIGVsZW1lbnRBdChpbnQgaW5kZXgpIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGluZGV4LCAiaW5kZXgiKTsKICAgIFJhbmdlRXJyb3IuY2hlY2tOb3ROZWdhdGl2ZShpbmRleCwgImluZGV4Iik7CiAgICBpbnQgZWxlbWVudEluZGV4ID0gMDsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKGluZGV4ID09IGVsZW1lbnRJbmRleCkgcmV0dXJuIGVsZW1lbnQ7CiAgICAgIGVsZW1lbnRJbmRleCsrOwogICAgfQogICAgdGhyb3cgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4IiwgbnVsbCwgZWxlbWVudEluZGV4KTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgKHNvbWUgb2YpIHRoZSBlbGVtZW50cyBvZiBgdGhpc2AuCiAgICoKICAgKiBFbGVtZW50cyBhcmUgcmVwcmVzZW50ZWQgYnkgdGhlaXIgb3duIGB0b1N0cmluZ2AgcmVzdWx0cy4KICAgKgogICAqIFRoZSBkZWZhdWx0IHJlcHJlc2VudGF0aW9uIGFsd2F5cyBjb250YWlucyB0aGUgZmlyc3QgdGhyZWUgZWxlbWVudHMuCiAgICogSWYgdGhlcmUgYXJlIGxlc3MgdGhhbiBhIGh1bmRyZWQgZWxlbWVudHMgaW4gdGhlIGl0ZXJhYmxlLCBpdCBhbHNvCiAgICogY29udGFpbnMgdGhlIGxhc3QgdHdvIGVsZW1lbnRzLgogICAqCiAgICogSWYgdGhlIHJlc3VsdGluZyBzdHJpbmcgaXNuJ3QgYWJvdmUgODAgY2hhcmFjdGVycywgbW9yZSBlbGVtZW50cyBhcmUKICAgKiBpbmNsdWRlZCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgaXRlcmFibGUuCiAgICoKICAgKiBUaGUgY29udmVyc2lvbiBtYXkgb21pdCBjYWxsaW5nIGB0b1N0cmluZ2Agb24gc29tZSBlbGVtZW50cyBpZiB0aGV5CiAgICogYXJlIGtub3duIHRvIG5vdCBvY2N1ciBpbiB0aGUgb3V0cHV0LCBhbmQgaXQgbWF5IHN0b3AgaXRlcmF0aW5nIGFmdGVyCiAgICogYSBodW5kcmVkIGVsZW1lbnRzLgogICAqLwogIFN0cmluZyB0b1N0cmluZygpID0+IEl0ZXJhYmxlQmFzZS5pdGVyYWJsZVRvU2hvcnRTdHJpbmcodGhpcywgJygnLCAnKScpOwp9Cgp0eXBlZGVmIF9HZW5lcmF0b3I8RT4gPSBFIEZ1bmN0aW9uKGludCBpbmRleCk7CgpjbGFzcyBfR2VuZXJhdG9ySXRlcmFibGU8RT4gZXh0ZW5kcyBMaXN0SXRlcmFibGU8RT4gewogIC8vLyBUaGUgbGVuZ3RoIG9mIHRoZSBnZW5lcmF0ZWQgaXRlcmFibGUuCiAgZmluYWwgaW50IGxlbmd0aDsKCiAgLy8vIFRoZSBmdW5jdGlvbiBtYXBwaW5nIGluZGljZXMgdG8gdmFsdWVzLgogIGZpbmFsIF9HZW5lcmF0b3I8RT4gX2dlbmVyYXRvcjsKCiAgLy8vIENyZWF0ZXMgdGhlIGdlbmVyYXRlZCBpdGVyYWJsZS4KICAvLy8KICAvLy8gSWYgW2dlbmVyYXRvcl0gaXMgYG51bGxgLCBpdCBpcyBjaGVja2VkIHRoYXQgYGludGAgaXMgYXNzaWduYWJsZSB0byBbRV0uCiAgX0dlbmVyYXRvckl0ZXJhYmxlKHRoaXMubGVuZ3RoLCBFIGdlbmVyYXRvcihpbnQgaW5kZXgpKQogICAgICA6IC8vIFRoZSBgYXNgIGJlbG93IGlzIHVzZWQg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dGNoIGluICJkYXJ0OmNvcmUiIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgaW1wb3J0cwovLy8gdXNlZCBieSBwYXRjaGVzIG9mIHRoYXQgbGlicmFyeS4gV2UgcGxhbiB0byBjaGFuZ2UgdGhpcyB3aGVuIHdlIGhhdmUgYQovLy8gc2hhcmVkIGZyb250IGVuZCBhbmQgc2ltcGx5IHVzZSBwYXJ0cy4KCmltcG9ydCAiZGFydDpfaW50ZXJuYWwiIGFzIGludGVybmFsIHNob3cgU3ltYm9sOwoKaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIKICAgIHNob3cKICAgICAgICBDbGFzc0lELAogICAgICAgIENvZGVVbml0cywKICAgICAgICBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZSwKICAgICAgICBGaXhlZExlbmd0aExpc3RCYXNlLAogICAgICAgIEl0ZXJhYmxlRWxlbWVudEVycm9yLAogICAgICAgIExpc3RJdGVyYXRvciwKICAgICAgICBMaXN0cywKICAgICAgICBQT1dFUlNfT0ZfVEVOLAogICAgICAgIFN1Ykxpc3RJdGVyYWJsZSwKICAgICAgICBVbm1vZGlmaWFibGVMaXN0QmFzZSwKICAgICAgICBpczY0Qml0LAogICAgICAgIG1ha2VGaXhlZExpc3RVbm1vZGlmaWFibGUsCiAgICAgICAgbWFrZUxpc3RGaXhlZExlbmd0aCwKICAgICAgICBwYXRjaCwKICAgICAgICB1bnNhZmVDYXN0OwoKaW1wb3J0ICJkYXJ0OmFzeW5jIiBzaG93IENvbXBsZXRlciwgRnV0dXJlLCBUaW1lcjsKCmltcG9ydCAiZGFydDpjb2xsZWN0aW9uIgogICAgc2hvdwogICAgICAgIEhhc2hNYXAsCiAgICAgICAgSXRlcmFibGVCYXNlLAogICAgICAgIExpbmtlZEhhc2hNYXAsCiAgICAgICAgTGlua2VkTGlzdCwKICAgICAgICBMaW5rZWRMaXN0RW50cnksCiAgICAgICAgTGlzdEJhc2UsCiAgICAgICAgTWFwQmFzZSwKICAgICAgICBNYXBzLAogICAgICAgIFVubW9kaWZpYWJsZU1hcEJhc2UsCiAgICAgICAgVW5tb2RpZmlhYmxlTWFwVmlldzsKCmltcG9ydCAiZGFydDpjb252ZXJ0IiBzaG93IGFzY2lpLCBFbmNvZGluZywganNvbiwgbGF0aW4xLCB1dGY4OwoKaW1wb3J0ICJkYXJ0Omlzb2xhdGUiIHNob3cgSXNvbGF0ZTsKCmltcG9ydCAiZGFydDptYXRoIiBzaG93IFJhbmRvbTsKCmltcG9ydCAiZGFydDp0eXBlZF9kYXRhIgogICAgc2hvdyBFbmRpYW4sIFVpbnQ4TGlzdCwgSW50NjRMaXN0LCBVaW50MTZMaXN0LCBVaW50MzJMaXN0OwoKLy8vIFRoZXNlIGFyZSB0aGUgYWRkaXRpb25hbCBwYXJ0cyBvZiB0aGlzIHBhdGNoIGxpYnJhcnk6Ci8vIHBhcnQgImFycmF5LmRhcnQiOwovLyBwYXJ0ICJhcnJheV9wYXRjaC5kYXJ0IjsKLy8gcGFydCAiYmlnaW50X3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJib29sX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJkYXRlX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJkb3VibGUuZGFydCI7Ci8vIHBhcnQgImRvdWJsZV9wYXRjaC5kYXJ0IjsKLy8gcGFydCAiZXJyb3JzX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJleHBhbmRvX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJmdW5jdGlvbi5kYXJ0IjsKLy8gcGFydCAiZnVuY3Rpb25fcGF0Y2guZGFydCI7Ci8vIHBhcnQgImdyb3dhYmxlX2FycmF5LmRhcnQiOwovLyBwYXJ0ICJpZGVudGljYWxfcGF0Y2guZGFydCI7Ci8vIHBhcnQgImltbXV0YWJsZV9tYXAuZGFydCI7Ci8vIHBhcnQgImludGVnZXJzLmRhcnQiOwovLyBwYXJ0ICJpbnRlZ2Vyc19wYXRjaC5kYXJ0IjsKLy8gcGFydCAiaW52b2NhdGlvbl9taXJyb3JfcGF0Y2guZGFydCI7Ci8vIHBhcnQgImxpYl9wcmVmaXguZGFydCI7Ci8vIHBhcnQgIm1hcF9wYXRjaC5kYXJ0IjsKLy8gcGFydCAibnVsbF9wYXRjaC5kYXJ0IjsKLy8gcGFydCAib2JqZWN0X3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJyZWdleHBfcGF0Y2guZGFydCI7Ci8vIHBhcnQgInN0YWNrdHJhY2UuZGFydCI7Ci8vIHBhcnQgInN0b3B3YXRjaF9wYXRjaC5kYXJ0IjsKLy8gcGFydCAic3RyaW5nX2J1ZmZlcl9wYXRjaC5kYXJ0IjsKLy8gcGFydCAic3RyaW5nX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJ0eXBlX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJ1cmlfcGF0Y2guZGFydCI7Ci8vIHBhcnQgIndlYWtfcHJvcGVydHkuZGFydCI7CgpAcGF0Y2gKY2xhc3MgbnVtIHsKICBudW0gX2FkZEZyb21JbnRlZ2VyKGludCBvdGhlcik7CiAgbnVtIF9zdWJGcm9tSW50ZWdlcihpbnQgb3RoZXIpOwogIG51bSBfbXVsRnJvbUludGVnZXIoaW50IG90aGVyKTsKICBpbnQgX3RydW5jRGl2RnJvbUludGVnZXIoaW50IG90aGVyKTsKICBudW0gX21vZHVsb0Zyb21JbnRlZ2VyKGludCBvdGhlcik7CiAgbnVtIF9yZW1haW5kZXJGcm9tSW50ZWdlcihpbnQgb3RoZXIpOwogIGJvb2wgX2dyZWF0ZXJUaGFuRnJvbUludGVnZXIoaW50IG90aGVyKTsKICBib29sIF9lcXVhbFRvSW50ZWdlcihpbnQgb3RoZXIpOwp9CgovLyBfU3luY0l0ZXJhYmxlIGFuZCBfc3luY0l0ZXJhdG9yIGFyZSB1c2VkIGJ5IHRoZSBjb21waWxlciB0bwovLyBpbXBsZW1lbnQgc3luYyogZ2VuZXJhdG9yIGZ1bmN0aW9ucy4gQSBzeW5jKiBnZW5lcmF0b3IgYWxsb2NhdGVzCi8vIGFuZCByZXR1cm5zIGEgbmV3IF9TeW5jSXRlcmFibGUgb2JqZWN0LgoKdHlwZWRlZiBib29sIF9TeW5jR2VuZXJhdG9yQ2FsbGJhY2s8VD4oX1N5bmNJdGVyYXRvcjxUPiBpdGVyYXRvcik7CgpjbGFzcyBfU3luY0l0ZXJhYmxlPFQ+IGV4dGVuZHMgSXRlcmFibGVCYXNlPFQ+IHsKICAvLyBfbW92ZU5leHRGbiBpcyB0aGUgY2xvc3VyaXplZCBib2R5IG9mIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24uCiAgZmluYWwgX1N5bmNHZW5lcmF0b3JDYWxsYmFjazxUPiBfbW92ZU5leHRGbjsKCiAgY29uc3QgX1N5bmNJdGVyYWJsZSh0aGlzLl9tb3ZlTmV4dEZuKTsKCiAgSXRlcmF0b3I8VD4gZ2V0IGl0ZXJhdG9yIHsKICAgIC8vIE5vdGU6IF9DbG9zdXJlLl9jbG9uZSByZXR1cm5zIF9DbG9zdXJlIHdoaWNoIGlzIG5vdCByZWxhdGVkIHRvCiAgICAvLyBfU3luY0dlbmVyYXRvckNhbGxiYWNrLCB3aGljaCBtZWFucyB3ZSBuZWVkIGV4cGxpY2l0IGNhc3QuCiAgICByZXR1cm4gbmV3IF9TeW5jSXRlcmF0b3I8VD4odW5zYWZlQ2FzdDxfU3luY0dlbmVyYXRvckNhbGxiYWNrPFQ+PigKICAgICAgICB1bnNhZmVDYXN0PF9DbG9zdXJlPihfbW92ZU5leHRGbikuX2Nsb25lKCkpKTsKICB9Cn0KCmNsYXNzIF9TeW5jSXRlcmF0b3I8VD4gaW1wbGVtZW50cyBJdGVyYXRvcjxUPiB7CiAgX1N5bmNHZW5lcmF0b3JDYWxsYmFjazxUPiBfbW92ZU5leHRGbjsKICBJdGVyYXRvcjxUPiBfeWllbGRFYWNoSXRlcmF0b3I7CgogIC8vIFRoZXNlIHR3byBmaWVsZHMgYXJlIHNldCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgdGhlIHlpZWxkIGFuZCB5aWVsZCoKICAvLyBzdGF0ZW1lbnQuCiAgVCBfY3VycmVudDsKICBJdGVyYWJsZTxUPiBfeWllbGRFYWNoSXRlcmFibGU7CgogIFQgZ2V0IGN1cnJlbnQgPT4KICAgICAgX3lpZWxkRWFjaEl0ZXJhdG9yICE9IG51bGwgPyBfeWllbGRFYWNoSXRlcmF0b3IuY3VycmVudCA6IF9jdXJyZW50OwoKICBfU3luY0l0ZXJhdG9yKHRoaXMuX21vdmVOZXh0Rm4pOwoKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKF9tb3ZlTmV4dEZuID09IG51bGwpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgd2hpbGUgKHRydWUpIHsKICAgICAgaWYgKF95aWVsZEVhY2hJdGVyYXRvciAhPSBudWxsKSB7CiAgICAgICAgaWYgKF95aWVsZEVhY2hJdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgX3lpZWxkRWFjaEl0ZXJhdG9yID0gbnVsbDsKICAgICAgfQogICAgICAvLyBfbW92ZU5leHRGbigpIHdpbGwgdXBkYXRlIHRoZSB2YWx1ZXMgb2YgX3lpZWxkRWFjaEl0ZXJhYmxlCiAgICAgIC8vICBhbmQgX2N1cnJlbnQuCiAgICAgIGlmICghX21vdmVOZXh0Rm4odGhpcykpIHsKICAgICAgICBfbW92ZU5leHRGbiA9IG51bGw7CiAgICAgICAgX2N1cnJlbnQgPSBudWxsOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBpZiAoX3lpZWxkRWFjaEl0ZXJhYmxlICE9IG51bGwpIHsKICAgICAgICAvLyBTcGVjIG1hbmRhdGVzOiBpdCBpcyBhIGR5bmFtaWMgZXJyb3IgaWYgdGhlIGNsYXNzIG9mIFt0aGUgb2JqZWN0CiAgICAgICAgLy8gcmV0dXJuZWQgYnkgeWllbGQqXSBkb2VzIG5vdCBpbXBsZW1lbnQgSXRlcmFibGUuCiAgICAgICAgX3lpZWxkRWFjaEl0ZXJhdG9yID0gX3lpZWxkRWFjaEl0ZXJhYmxlLml0ZXJhdG9yOwogICAgICAgIF95aWVsZEVhY2hJdGVyYWJsZSA9IG51bGw7CiAgICAgICAgX2N1cnJlbnQgPSBudWxsOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KfQoKQHBhdGNoCmNsYXNzIFN0YWNrVHJhY2UgewogIEBwYXRjaAogIHN0YXRpYyBTdGFja1RyYWNlIGdldCBjdXJyZW50IG5hdGl2ZSAiU3RhY2tUcmFjZV9jdXJyZW50IjsKfQqAqABOTjwBTUpLKwExARgJERMhHR4WDxcZHhEjHQ8UATMBGQkRFhcUGRIRDh0dAUABJAEgARk/AToWHB0bGxcdHR4ZHx8gHhkfKBsaGx0dGyAkHRsaHgEHDCIiIiclKCsjAgE/RCsBQwExQy8BKQEdRkJHNgQCATApIgFJEA4iARNKASMBFB8UBhMoLRcKIwhEGCAcGRYIKEw8OiMZEggTBgQCAQcTCT0CAR9kYXJ0OmNvcmUtcGF0Y2gvY29yZV9wYXRjaC5kYXJ0Km9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvYXJyYXkuZGFydJ0gLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9MaXN0PEU+IGV4dGVuZHMgRml4ZWRMZW5ndGhMaXN0QmFzZTxFPiB7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfTGlzdCkKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBmYWN0b3J5IF9MaXN0KGxlbmd0aCkgbmF0aXZlICJMaXN0X2FsbG9jYXRlIjsKCiAgRSBvcGVyYXRvciBbXShpbnQgaW5kZXgpIG5hdGl2ZSAiTGlzdF9nZXRJbmRleGVkIjsKCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBFIHZhbHVlKSB7CiAgICBfc2V0SW5kZXhlZChpbmRleCwgdmFsdWUpOwogIH0KCiAgdm9pZCBfc2V0SW5kZXhlZChpbnQgaW5kZXgsIEUgdmFsdWUpIG5hdGl2ZSAiTGlzdF9zZXRJbmRleGVkIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBnZXQgbGVuZ3RoIG5hdGl2ZSAiTGlzdF9nZXRMZW5ndGgiOwoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBMaXN0IF9zbGljZShpbnQgc3RhcnQsIGludCBjb3VudCwgYm9vbCBuZWVkc1R5cGVBcmd1bWVudCkgewogICAgaWYgKGNvdW50IDw9IDY0KSB7CiAgICAgIGZpbmFsIHJlc3VsdCA9IG5lZWRzVHlwZUFyZ3VtZW50ID8gbmV3IF9MaXN0PEU+KGNvdW50KSA6IG5ldyBfTGlzdChjb3VudCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgcmVzdWx0W2ldID0gdGhpc1tzdGFydCArIGldOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX3NsaWNlSW50ZXJuYWwoc3RhcnQsIGNvdW50LCBuZWVkc1R5cGVBcmd1bWVudCk7CiAgICB9CiAgfQoKICBMaXN0IF9zbGljZUludGVybmFsKGludCBzdGFydCwgaW50IGNvdW50LCBib29sIG5lZWRzVHlwZUFyZ3VtZW50KQogICAgICBuYXRpdmUgIkxpc3Rfc2xpY2UiOwoKICAvLyBMaXN0IGludGVyZmFjZS4KICB2b2lkIHNldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgSXRlcmFibGU8RT4gaXRlcmFibGUsIFtpbnQgc2tpcENvdW50ID0gMF0pIHsKICAgIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPiB0aGlzLmxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShzdGFydCwgMCwgdGhpcy5sZW5ndGgpOwogICAgfQogICAgaWYgKGVuZCA8IHN0YXJ0IHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGVuZCwgc3RhcnQsIHRoaXMubGVuZ3RoKTsKICAgIH0KICAgIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIGlmIChsZW5ndGggPT0gMCkgcmV0dXJuOwogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBpdGVyYWJsZSkpIHsKICAgICAgTGlzdHMuY29weSh0aGlzLCBza2lwQ291bnQsIHRoaXMsIHN0YXJ0LCBsZW5ndGgpOwogICAgfSBlbHNlIGlmIChDbGFzc0lELmdldElEKGl0ZXJhYmxlKSA9PSBDbGFzc0lELmNpZEFycmF5KSB7CiAgICAgIGZpbmFsIF9MaXN0PEU+IGl0ZXJhYmxlQXNMaXN0ID0gaXRlcmFibGU7CiAgICAgIExpc3RzLmNvcHkoaXRlcmFibGVBc0xpc3QsIHNraXBDb3VudCwgdGhpcywgc3RhcnQsIGxlbmd0aCk7CiAgICB9IGVsc2UgaWYgKGl0ZXJhYmxlIGlzIExpc3Q8RT4pIHsKICAgICAgTGlzdHMuY29weShpdGVyYWJsZSwgc2tpcENvdW50LCB0aGlzLCBzdGFydCwgbGVuZ3RoKTsKICAgIH0gZWxzZSB7CiAgICAgIEl0ZXJhdG9yIGl0ID0gaXRlcmFibGUuaXRlcmF0b3I7CiAgICAgIHdoaWxlIChza2lwQ291bnQgPiAwKSB7CiAgICAgICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSByZXR1cm47CiAgICAgICAgc2tpcENvdW50LS07CiAgICAgIH0KICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHJldHVybjsKICAgICAgICB0aGlzW2ldID0gaXQuY3VycmVudDsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBzZXRBbGwoaW50IGluZGV4LCBJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IHRoaXMubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGluZGV4LCAwLCB0aGlzLmxlbmd0aCwgImluZGV4Iik7CiAgICB9CiAgICBMaXN0PEU+IGl0ZXJhYmxlQXNMaXN0OwogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBpdGVyYWJsZSkpIHsKICAgICAgaXRlcmFibGVBc0xpc3QgPSB0aGlzOwogICAgfSBlbHNlIGlmIChDbGFzc0lELmdldElEKGl0ZXJhYmxlKSA9PSBDbGFzc0lELmNpZEFycmF5KSB7CiAgICAgIGl0ZXJhYmxlQXNMaXN0ID0gaXRlcmFibGU7CiAgICB9IGVsc2UgaWYgKGl0ZXJhYmxlIGlzIExpc3Q8RT4pIHsKICAgICAgaXRlcmFibGVBc0xpc3QgPSBpdGVyYWJsZTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAodmFyIHZhbHVlIGluIGl0ZXJhYmxlKSB7CiAgICAgICAgdGhpc1tpbmRleCsrXSA9IHZhbHVlOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGludCBsZW5ndGggPSBpdGVyYWJsZUFzTGlzdC5sZW5ndGg7CiAgICBpZiAoaW5kZXggKyBsZW5ndGggPiB0aGlzLmxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShpbmRleCArIGxlbmd0aCwgMCwgdGhpcy5sZW5ndGgpOwogICAgfQogICAgTGlzdHMuY29weShpdGVyYWJsZUFzTGlzdCwgMCwgdGhpcywgaW5kZXgsIGxlbmd0aCk7CiAgfQoKICBMaXN0PEU+IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pIHsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIGlmIChsZW5ndGggPT0gMCkgcmV0dXJuIDxFPltdOwogICAgdmFyIHJlc3VsdCA9IG5ldyBfR3Jvd2FibGVMaXN0PEU+Ll93aXRoRGF0YShfc2xpY2Uoc3RhcnQsIGxlbmd0aCwgZmFsc2UpKTsKICAgIHJlc3VsdC5fc2V0TGVuZ3RoKGxlbmd0aCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8gSXRlcmFibGUgaW50ZXJmYWNlLgoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICB2b2lkIGZvckVhY2goZihFIGVsZW1lbnQpKSB7CiAgICBmaW5hbCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgZih0aGlzW2ldKTsKICAgIH0KICB9CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciB7CiAgICByZXR1cm4gbmV3IF9GaXhlZFNpemVBcnJheUl0ZXJhdG9yPEU+KHRoaXMpOwogIH0KCiAgRSBnZXQgZmlyc3QgewogICAgaWYgKGxlbmd0aCA+IDApIHJldHVybiB0aGlzWzBdOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIGdldCBsYXN0IHsKICAgIGlmIChsZW5ndGggPiAwKSByZXR1cm4gdGhpc1tsZW5ndGggLSAxXTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBnZXQgc2luZ2xlIHsKICAgIGlmIChsZW5ndGggPT0gMSkgcmV0dXJuIHRoaXNbMF07CiAgICBpZiAobGVuZ3RoID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vTWFueSgpOwogIH0KCiAgTGlzdDxFPiB0b0xpc3Qoe2Jvb2wgZ3Jvd2FibGU6IHRydWV9KSB7CiAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBpZiAobGVuZ3RoID4gMCkgewogICAgICB2YXIgcmVzdWx0ID0gX3NsaWNlKDAsIGxlbmd0aCwgIWdyb3dhYmxlKTsKICAgICAgaWYgKGdyb3dhYmxlKSB7CiAgICAgICAgcmVzdWx0ID0gbmV3IF9Hcm93YWJsZUxpc3Q8RT4uX3dpdGhEYXRhKHJlc3VsdCkuLl9zZXRMZW5ndGgobGVuZ3RoKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgLy8gX0dyb3dhYmxlTGlzdC5fd2l0aERhdGEgbXVzdCBub3QgYmUgY2FsbGVkIHdpdGggZW1wdHkgbGlzdC4KICAgIHJldHVybiBncm93YWJsZSA/IDxFPltdIDogbmV3IExpc3Q8RT4oMCk7CiAgfQp9CgovLyBUaGlzIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGNsYXNzIGFzIF9MaXN0LCBidXQgaXQgZG9lcyBub3QKLy8gcGVybWl0IGFueSBtb2RpZmljYXRpb24gb2YgYXJyYXkgZWxlbWVudHMgZnJvbSBEYXJ0IGNvZGUuIFdlIHVzZQovLyB0aGlzIGNsYXNzIGZvciBhcnJheXMgY29uc3RydWN0ZWQgZnJvbSBEYXJ0IGFycmF5IGxpdGVyYWxzLgovLyBUT0RPKGhhdXNuZXIpOiBXZSBzaG91bGQgY29uc2lkZXIgdGhlIHRyYWRlLW9mZnMgYmV0d2VlbiB0d28KLy8gY2xhc3NlcyAoYW5kIGlubGluZSBjYWNoZSBtaXNzZXMpIHZlcnN1cyBhIGZpZWxkIGluIHRoZSBuYXRpdmUKLy8gaW1wbGVtZW50YXRpb24gKGNoZWNrcyB3aGVuIG1vZGlmeWluZykuIFdlIHNob3VsZCBrZWVwIHdhdGNoaW5nCi8vIHRoZSBpbmxpbmUgY2FjaGUgbWlzc2VzLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9JbW11dGFibGVMaXN0PEU+IGV4dGVuZHMgVW5tb2RpZmlhYmxlTGlzdEJhc2U8RT4gewogIGZhY3RvcnkgX0ltbXV0YWJsZUxpc3QuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIkltbXV0YWJsZUFycmF5IGNhbiBvbmx5IGJlIGFsbG9jYXRlZCBieSB0aGUgVk0iKTsKICB9CgogIGZhY3RvcnkgX0ltbXV0YWJsZUxpc3QuX2Zyb20oTGlzdCBmcm9tLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKQogICAgICBuYXRpdmUgIkltbXV0YWJsZUxpc3RfZnJvbSI7CgogIEUgb3BlcmF0b3IgW10oaW50IGluZGV4KSBuYXRpdmUgIkxpc3RfZ2V0SW5kZXhlZCI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgZ2V0IGxlbmd0aCBuYXRpdmUgIkxpc3RfZ2V0TGVuZ3RoIjsKCiAgTGlzdDxFPiBzdWJsaXN0KGludCBzdGFydCwgW2ludCBlbmRdKSB7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICBpZiAobGVuZ3RoID09IDApIHJldHVybiA8RT5bXTsKICAgIExpc3QgbGlzdCA9IG5ldyBfTGlzdChsZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBsaXN0W2ldID0gdGhpc1tzdGFydCArIGldOwogICAgfQogICAgdmFyIHJlc3VsdCA9IG5ldyBfR3Jvd2FibGVMaXN0PEU+Ll93aXRoRGF0YShsaXN0KTsKICAgIHJlc3VsdC5fc2V0TGVuZ3RoKGxlbmd0aCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8gQ29sbGVjdGlvbiBpbnRlcmZhY2UuCgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgZm9yRWFjaChmKEUgZWxlbWVudCkpIHsKICAgIGZpbmFsIGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBmKHRoaXNbaV0pOwogICAgfQogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yIHsKICAgIHJldHVybiBuZXcgX0ZpeGVkU2l6ZUFycmF5SXRlcmF0b3I8RT4odGhpcyk7CiAgfQoKICBFIGdldCBmaXJzdCB7CiAgICBpZiAobGVuZ3RoID4gMCkgcmV0dXJuIHRoaXNbMF07CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgZ2V0IGxhc3QgewogICAgaWYgKGxlbmd0aCA+IDApIHJldHVybiB0aGlzW2xlbmd0aCAtIDFdOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIGdldCBzaW5nbGUgewogICAgaWYgKGxlbmd0aCA9PSAxKSByZXR1cm4gdGhpc1swXTsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgfQoKICBMaXN0PEU+IHRvTGlzdCh7Ym9vbCBncm93YWJsZTogdHJ1ZX0pIHsKICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGlmIChsZW5ndGggPiAwKSB7CiAgICAgIExpc3QgbGlzdCA9IGdyb3dhYmxlID8gbmV3IF9MaXN0KGxlbmd0aCkgOiBuZXcgX0xpc3Q8RT4obGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIGxpc3RbaV0gPSB0aGlzW2ldOwogICAgICB9CiAgICAgIGlmICghZ3Jvd2FibGUpIHJldHVybiBsaXN0OwogICAgICB2YXIgcmVzdWx0ID0gbmV3IF9Hcm93YWJsZUxpc3Q8RT4uX3dpdGhEYXRhKGxpc3QpOwogICAgICByZXN1bHQuX3NldExlbmd0aChsZW5ndGgpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgcmV0dXJuIGdyb3dhYmxlID8gPEU+W10gOiBuZXcgX0xpc3Q8RT4oMCk7CiAgfQp9CgovLyBJdGVyYXRvciBmb3IgYXJyYXlzIHdpdGggZml4ZWQgc2l6ZS4KY2xhc3MgX0ZpeGVkU2l6ZUFycmF5SXRlcmF0b3I8RT4gaW1wbGVtZW50cyBJdGVyYXRvcjxFPiB7CiAgZmluYWwgTGlzdDxFPiBfYXJyYXk7CiAgZmluYWwgaW50IF9sZW5ndGg7IC8vIENhY2hlIGFycmF5IGxlbmd0aCBmb3IgZmFzdGVyIGFjY2Vzcy4KICBpbnQgX2luZGV4OwogIEUgX2N1cnJlbnQ7CgogIF9GaXhlZFNpemVBcnJheUl0ZXJhdG9yKExpc3Q8RT4gYXJyYXkpCiAgICAgIDogX2FycmF5ID0gYXJyYXksCiAgICAgICAgX2xlbmd0aCA9IGFycmF5Lmxlbmd0aCwKICAgICAgICBfaW5kZXggPSAwIHsKICAgIGFzc2VydChhcnJheSBpcyBfTGlzdDxFPiB8fCBhcnJheSBpcyBfSW1tdXRhYmxlTGlzdDxFPik7CiAgfQoKICBFIGdldCBjdXJyZW50ID0+IF9jdXJyZW50OwoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKF9pbmRleCA+PSBfbGVuZ3RoKSB7CiAgICAgIF9jdXJyZW50ID0gbnVsbDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgX2N1cnJlbnQgPSBfYXJyYXlbX2luZGV4XTsKICAgIF9pbmRleCsrOwogICAgcmV0dXJuIHRydWU7CiAgfQp9CoEEAE5OPAEeARowKR4wATUBKh8EAUEBNB4qAR4+F1EwJQgVDT4GBAFEGwEVUSw5Biw7Bh4dJTg+MEImPA0nHiQVCCokHggGBAExLEIGHCUdPiEmIQ0kHwgOBigoQgY4BAEqPx4jTx8TBAEZAR4fICcSBgQBHh0xBAEQJCwEAQ8tLAQBESU9KgQBKh4WMRZNCBUGQy4EAgFARD9AQkMcGjotIDsEAUIjATUBNB4qASo/HiMjJyEGNx8TBAEbAR4fICcSBgQBHh0xBAEQJCwEAQ8tLAQBESU9KgQBKh4WRykbCCI5IRUGLwQCASg6GD4ODgEpGCAVPQQBHQEeFB0XFAYfDhEEAgEaZGFydDpjb3JlLXBhdGNoL2FycmF5LmRhcnQxb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9iaWdpbnRfcGF0Y2guZGFydMABfR4vLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiBkYXJ0LmNvcmU7CgovLyBDb3B5cmlnaHQgMjAwOSBUaGUgR28gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUKLy8gbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLyoKICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDUgIFRvbSBXdQogKiBDb3B5cmlnaHQgKGMpIDIwMTIgQWRhbSBTaW5nZXIgKGFkYW1Ac29sdnIuaW8pCiAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwogKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwogKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCiAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwogKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKgogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQogKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICoKICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUy1JUyIgQU5EIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCiAqIEVYUFJFU1MsIElNUExJRUQgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkKICogV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogKgogKiBJTiBOTyBFVkVOVCBTSEFMTCBUT00gV1UgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwKICogSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBLSU5ELCBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCiAqIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgT1IgTk9UIEFEVklTRUQgT0YKICogVEhFIFBPU1NJQklMSVRZIE9GIERBTUFHRSwgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBBUklTSU5HIE9VVAogKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogKgogKiBJbiBhZGRpdGlvbiwgdGhlIGZvbGxvd2luZyBjb25kaXRpb24gYXBwbGllczoKICoKICogQWxsIHJlZGlzdHJpYnV0aW9ucyBtdXN0IHJldGFpbiBhbiBpbnRhY3QgY29weSBvZiB0aGlzIGNvcHlyaWdodCBub3RpY2UKICogYW5kIGRpc2NsYWltZXIuCiAqLwoKQHBhdGNoCmNsYXNzIEJpZ0ludCBpbXBsZW1lbnRzIENvbXBhcmFibGU8QmlnSW50PiB7CiAgQHBhdGNoCiAgc3RhdGljIEJpZ0ludCBnZXQgemVybyA9PiBfQmlnSW50SW1wbC56ZXJvOwogIEBwYXRjaAogIHN0YXRpYyBCaWdJbnQgZ2V0IG9uZSA9PiBfQmlnSW50SW1wbC5vbmU7CiAgQHBhdGNoCiAgc3RhdGljIEJpZ0ludCBnZXQgdHdvID0+IF9CaWdJbnRJbXBsLnR3bzsKCiAgQHBhdGNoCiAgc3RhdGljIEJpZ0ludCBwYXJzZShTdHJpbmcgc291cmNlLCB7aW50IHJhZGl4fSkgPT4KICAgICAgX0JpZ0ludEltcGwucGFyc2Uoc291cmNlLCByYWRpeDogcmFkaXgpOwoKICBAcGF0Y2gKICBzdGF0aWMgQmlnSW50IHRyeVBhcnNlKFN0cmluZyBzb3VyY2UsIHtpbnQgcmFkaXh9KSA9PgogICAgICBfQmlnSW50SW1wbC5fdHJ5UGFyc2Uoc291cmNlLCByYWRpeDogcmFkaXgpOwoKICBAcGF0Y2gKICBmYWN0b3J5IEJpZ0ludC5mcm9tKG51bSB2YWx1ZSkgPT4gbmV3IF9CaWdJbnRJbXBsLmZyb20odmFsdWUpOwp9CgppbnQgX21heChpbnQgYSwgaW50IGIpID0+IGEgPiBiID8gYSA6IGI7CmludCBfbWluKGludCBhLCBpbnQgYikgPT4gYSA8IGIgPyBhIDogYjsKCi8vLyBBbGxvY2F0ZSBhIG5ldyBkaWdpdHMgbGlzdCBvZiBldmVuIGxlbmd0aC4KVWludDMyTGlzdCBfbmV3RGlnaXRzKGludCBsZW5ndGgpID0+IG5ldyBVaW50MzJMaXN0KGxlbmd0aCArIChsZW5ndGggJiAxKSk7CgovKioKICogQW4gaW1wbGVtZW50YXRpb24gZm9yIHRoZSBhcmJpdHJhcmlseSBsYXJnZSBpbnRlZ2VyLgogKgogKiBUaGUgaW50ZWdlciBudW1iZXIgaXMgcmVwcmVzZW50ZWQgYnkgYSBzaWduLCBhbiBhcnJheSBvZiAzMi1iaXQgdW5zaWduZWQKICogaW50ZWdlcnMgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQsIGFuZCBhIG51bWJlciBvZiB1c2VkIGRpZ2l0cyBpbiB0aGF0IGFycmF5LgogKi8KY2xhc3MgX0JpZ0ludEltcGwgaW1wbGVtZW50cyBCaWdJbnQgewogIC8vIEJpdHMgcGVyIGRpZ2l0LgogIHN0YXRpYyBjb25zdCBpbnQgX2RpZ2l0Qml0cyA9IDMyOwogIHN0YXRpYyBjb25zdCBpbnQgX2RpZ2l0QmFzZSA9IDEgPDwgX2RpZ2l0Qml0czsKICBzdGF0aWMgY29uc3QgaW50IF9kaWdpdE1hc2sgPSAoMSA8PCBfZGlnaXRCaXRzKSAtIDE7CgogIC8vIEJpdHMgcGVyIGhhbGYgZGlnaXQuCiAgc3RhdGljIGNvbnN0IGludCBfaGFsZkRpZ2l0Qml0cyA9IF9kaWdpdEJpdHMgPj4gMTsKICBzdGF0aWMgY29uc3QgaW50IF9oYWxmRGlnaXRNYXNrID0gKDEgPDwgX2hhbGZEaWdpdEJpdHMpIC0gMTsKCiAgc3RhdGljIGZpbmFsIF9CaWdJbnRJbXBsIHplcm8gPSBuZXcgX0JpZ0ludEltcGwuX2Zyb21JbnQoMCk7CiAgc3RhdGljIGZpbmFsIF9CaWdJbnRJbXBsIG9uZSA9IG5ldyBfQmlnSW50SW1wbC5fZnJvbUludCgxKTsKICBzdGF0aWMgZmluYWwgX0JpZ0ludEltcGwgdHdvID0gbmV3IF9CaWdJbnRJbXBsLl9mcm9tSW50KDIpOwoKICBzdGF0aWMgZmluYWwgX0JpZ0ludEltcGwgX21pbnVzT25lID0gLW9uZTsKICBzdGF0aWMgZmluYWwgX0JpZ0ludEltcGwgX29uZURpZ2l0TWFzayA9IG5ldyBfQmlnSW50SW1wbC5fZnJvbUludChfZGlnaXRNYXNrKTsKICBzdGF0aWMgZmluYWwgX0JpZ0ludEltcGwgX3R3b0RpZ2l0TWFzayA9IChvbmUgPDwgKDIgKiBfZGlnaXRCaXRzKSkgLSBvbmU7CiAgc3RhdGljIGZpbmFsIF9CaWdJbnRJbXBsIF9vbmVCaWxsaW9uID0gbmV3IF9CaWdJbnRJbXBsLl9mcm9tSW50KDEwMDAwMDAwMDApOwogIHN0YXRpYyBjb25zdCBpbnQgX21pbkludCA9IC0weDgwMDAwMDAwMDAwMDAwMDA7CiAgc3RhdGljIGNvbnN0IGludCBfbWF4SW50ID0gMHg3ZmZmZmZmZmZmZmZmZmZmOwoKICAvLyBSZXN1bHQgY2FjaGUgZm9yIGxhc3QgX2RpdlJlbSBjYWxsLgogIC8vIFJlc3VsdCBjYWNoZSBmb3IgbGFzdCBfZGl2UmVtIGNhbGwuCiAgc3RhdGljIFVpbnQzMkxpc3QgX2xhc3REaXZpZGVuZERpZ2l0czsKICBzdGF0aWMgaW50IF9sYXN0RGl2aWRlbmRVc2VkOwogIHN0YXRpYyBVaW50MzJMaXN0IF9sYXN0RGl2aXNvckRpZ2l0czsKICBzdGF0aWMgaW50IF9sYXN0RGl2aXNvclVzZWQ7CiAgc3RhdGljIFVpbnQzMkxpc3QgX2xhc3RRdW9SZW1EaWdpdHM7CiAgc3RhdGljIGludCBfbGFzdFF1b1JlbVVzZWQ7CiAgc3RhdGljIGludCBfbGFzdFJlbVVzZWQ7CiAgc3RhdGljIGludCBfbGFzdFJlbV9uc2g7CgogIC8vLyBXaGV0aGVyIHRoaXMgYmlnaW50IGlzIG5lZ2F0aXZlLgogIGZpbmFsIGJvb2wgX2lzTmVnYXRpdmU7CgogIC8vLyBUaGUgdW5zaWduZWQgZGlnaXRzIG9mIHRoaXMgYmlnaW50LgogIC8vLwogIC8vLyBUaGUgbGVhc3Qgc2lnbmlmaWNhbnQgZGlnaXQgaXMgaW4gc2xvdCAwLgogIC8vLyBUaGUgbGlzdCBtYXkgaGF2ZSBtb3JlIGRpZ2l0cyB0aGFuIG5lZWRlZC4gVGhhdCBpcywgYF9kaWdpdHMubGVuZ3RoYCBtYXkKICAvLy8gYmUgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIGBfdXNlZGAuCiAgLy8vIEFsc28sIGBfZGlnaXRzLmxlbmd0aGAgbXVzdCBhbHdheXMgYmUgZXZlbiwgYmVjYXVzZSBpbnRyaW5zaWNzIG9uIDY0LWJpdAogIC8vLyBwbGF0Zm9ybXMgbWF5IHByb2Nlc3MgYSBkaWdpdCBwYWlyIGFzIGEgNjQtYml0IHZhbHVlLgogIGZpbmFsIFVpbnQzMkxpc3QgX2RpZ2l0czsKCiAgLy8vIFRoZSBudW1iZXIgb2YgdXNlZCBlbnRyaWVzIGluIFtfZGlnaXRzXS4KICAvLy8KICAvLy8gVG8gYXZvaWQgcmVhbGxvY2F0aW5nIFtVaW50MzJMaXN0XXMsIGxpc3RzIHRoYXQgYXJlIHRvbyBiaWcgYXJlIG5vdAogIC8vLyByZXBsYWNlZCwgYnV0IGBfdXNlZGAgcmVmbGVjdHMgdGhlIHNtYWxsZXIgbnVtYmVyIG9mIGRpZ2l0cyBhY3R1YWxseSB1c2VkLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgZnVuY3Rpb25zIHNob3J0ZW5pbmcgYW4gZXhpc3RpbmcgbGlzdCBvZiBkaWdpdHMgdG8gYSBzbWFsbGVyCiAgLy8vIGBfdXNlZGAgbnVtYmVyIG9mIGRpZ2l0cyBtdXN0IGVuc3VyZSB0aGF0IHRoZSBoaWdoZXJtb3N0IHBhaXIgb2YgZGlnaXRzCiAgLy8vIGlzIGNvcnJlY3Qgd2hlbiByZWFkIGFzIGEgNjQtYml0IHZhbHVlIGJ5IGludHJpbnNpY3MuIFRoZXJlZm9yZSwgaWYgdGhlCiAgLy8vIHNtYWxsZXIgJ191c2VkJyBudW1iZXIgaXMgb2RkLCB0aGUgaGlnaCBkaWdpdCBvZiB0aGF0IHBhaXIgbXVzdCBiZQogIC8vLyBleHBsaWNpdGx5IGNsZWFyZWQsIGkuZS4gX2RpZ2l0c1tfdXNlZF0gPSAwLCB3aGljaCBjYW5ub3QgcmVzdWx0IGluIGFuCiAgLy8vIG91dCBvZiBib3VuZHMgYWNjZXNzLCBzaW5jZSB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGlzIGd1YXJhbnRlZWQgdG8gYmUKICAvLy8gZXZlbi4KICBmaW5hbCBpbnQgX3VzZWQ7CgogIC8qKgogICAqIFBhcnNlcyBbc291cmNlXSBhcyBhLCBwb3NzaWJseSBzaWduZWQsIGludGVnZXIgbGl0ZXJhbCBhbmQgcmV0dXJucyBpdHMKICAgKiB2YWx1ZS4KICAgKgogICAqIFRoZSBbc291cmNlXSBtdXN0IGJlIGEgbm9uLWVtcHR5IHNlcXVlbmNlIG9mIGJhc2UtW3JhZGl4XSBkaWdpdHMsCiAgICogb3B0aW9uYWxseSBwcmVmaXhlZCB3aXRoIGEgbWludXMgb3IgcGx1cyBzaWduICgnLScgb3IgJysnKS4KICAgKgogICAqIFRoZSBbcmFkaXhdIG11c3QgYmUgaW4gdGhlIHJhbmdlIDIuLjM2LiBUaGUgZGlnaXRzIHVzZWQgYXJlCiAgICogZmlyc3QgdGhlIGRlY2ltYWwgZGlnaXRzIDAuLjksIGFuZCB0aGVuIHRoZSBsZXR0ZXJzICdhJy4uJ3onIHdpdGgKICAgKiB2YWx1ZXMgMTAgdGhyb3VnaCAzNS4gQWxzbyBhY2NlcHRzIHVwcGVyLWNhc2UgbGV0dGVycyB3aXRoIHRoZSBzYW1lCiAgICogdmFsdWVzIGFzIHRoZSBsb3dlci1jYXNlIG9uZXMuCiAgICoKICAgKiBJZiBubyBbcmFkaXhdIGlzIGdpdmVuIHRoZW4gaXQgZGVmYXVsdHMgdG8gMTAuIEluIHRoaXMgY2FzZSwgdGhlIFtzb3VyY2VdCiAgICogZGlnaXRzIG1heSBhbHNvIHN0YXJ0IHdpdGggYDB4YCwgaW4gd2hpY2ggY2FzZSB0aGUgbnVtYmVyIGlzIGludGVycHJldGVkCiAgICogYXMgYSBoZXhhZGVjaW1hbCBsaXRlcmFsLCB3aGljaCBlZmZlY3RpdmVseSBtZWFucyB0aGF0IHRoZSBgMHhgIGlzIGlnbm9yZWQKICAgKiBhbmQgdGhlIHJhZGl4IGlzIGluc3RlYWQgc2V0IHRvIDE2LgogICAqCiAgICogRm9yIGFueSBpbnQgYG5gIGFuZCByYWRpeCBgcmAsIGl0IGlzIGd1YXJhbnRlZWQgdGhhdAogICAqIGBuID09IGludC5wYXJzZShuLnRvUmFkaXhTdHJpbmcociksIHJhZGl4OiByKWAuCiAgICoKICAgKiBUaHJvd3MgYSBbRm9ybWF0RXhjZXB0aW9uXSBpZiB0aGUgW3NvdXJjZV0gaXMgbm90IGEgdmFsaWQgaW50ZWdlciBsaXRlcmFsLAogICAqIG9wdGlvbmFsbHkgcHJlZml4ZWQgYnkgYSBzaWduLgogICAqLwogIHN0YXRpYyBfQmlnSW50SW1wbCBwYXJzZShTdHJpbmcgc291cmNlLCB7aW50IHJhZGl4fSkgewogICAgdmFyIHJlc3VsdCA9IF90cnlQYXJzZShzb3VyY2UsIHJhZGl4OiByYWRpeCk7CiAgICBpZiAocmVzdWx0ID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigiQ291bGQgbm90IHBhcnNlIEJpZ0ludCIsIHNvdXJjZSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIFBhcnNlcyBhIGRlY2ltYWwgYmlnaW50IGxpdGVyYWwuCiAgLy8vCiAgLy8vIFRoZSBbc291cmNlXSBtdXN0IG5vdCBjb250YWluIGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZS4KICBzdGF0aWMgX0JpZ0ludEltcGwgX3BhcnNlRGVjaW1hbChTdHJpbmcgc291cmNlLCBib29sIGlzTmVnYXRpdmUpIHsKICAgIGNvbnN0IF8wID0gNDg7CgogICAgaW50IHBhcnQgPSAwOwogICAgX0JpZ0ludEltcGwgcmVzdWx0ID0gemVybzsKICAgIC8vIFJlYWQgaW4gdGhlIHNvdXJjZSA5IGRpZ2l0cyBhdCBhIHRpbWUuCiAgICAvLyBUaGUgZmlyc3QgcGFydCBtYXkgaGF2ZSBhIGZldyBsZWFkaW5nIHZpcnR1YWwgJzAncyB0byBtYWtlIHRoZSByZW1haW5pbmcKICAgIC8vIHBhcnRzIGFsbCBoYXZlIGV4YWN0bHkgOSBkaWdpdHMuCiAgICBpbnQgZGlnaXRJblBhcnRDb3VudCA9IDkgLSBzb3VyY2UubGVuZ3RoLnJlbWFpbmRlcig5KTsKICAgIGlmIChkaWdpdEluUGFydENvdW50ID09IDkpIGRpZ2l0SW5QYXJ0Q291bnQgPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspIHsKICAgICAgcGFydCA9IHBhcnQgKiAxMCArIHNvdXJjZS5jb2RlVW5pdEF0KGkpIC0gXzA7CiAgICAgIGlmICgrK2RpZ2l0SW5QYXJ0Q291bnQgPT0gOSkgewogICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIF9vbmVCaWxsaW9uICsgbmV3IF9CaWdJbnRJbXBsLl9mcm9tSW50KHBhcnQpOwogICAgICAgIHBhcnQgPSAwOwogICAgICAgIGRpZ2l0SW5QYXJ0Q291bnQgPSAwOwogICAgICB9CiAgICB9CiAgICBpZiAoaXNOZWdhdGl2ZSkgcmV0dXJuIC1yZXN1bHQ7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgZ2l2ZW4gc291cmNlIGRpZ2l0LgogIC8vLwogIC8vLyBTb3VyY2UgZGlnaXRzIGJldHdlZW4gIjAiIGFuZCAiOSIgKGluY2x1c2l2ZSkgcmV0dXJuIHRoZWlyIGRlY2ltYWwgdmFsdWUuCiAgLy8vCiAgLy8vIFNvdXJjZSBkaWdpdHMgYmV0d2VlbiAiYSIgYW5kICJ6Iiwgb3IgIkEiIGFuZCAiWiIgKGluY2x1c2l2ZSkgcmV0dXJuCiAgLy8vIDEwICsgdGhlaXIgcG9zaXRpb24gaW4gdGhlIEFTQ0lJIGFscGhhYmV0LgogIC8vLwogIC8vLyBUaGUgaW5jb21pbmcgW2NvZGVVbml0XSBtdXN0IGJlIGFuIEFTQ0lJIGNvZGUtdW5pdC4KICBzdGF0aWMgaW50IF9jb2RlVW5pdFRvUmFkaXhWYWx1ZShpbnQgY29kZVVuaXQpIHsKICAgIC8vIFdlIGtub3cgdGhhdCB0aGUgY2hhcmFjdGVycyBtdXN0IGJlIEFTQ0lJIGFzIG90aGVyd2lzZSB0aGUKICAgIC8vIHJlZ2V4cCB3b3VsZG4ndCBoYXZlIG1hdGNoZWQuIExvd2VyY2FzaW5nIGJ5IGRvaW5nIGB8IDB4MjBgIGlzIHRodXMKICAgIC8vIGd1YXJhbnRlZWQgdG8gYmUgYSBzYWZlIG9wZXJhdGlvbiwgc2luY2UgaXQgcHJlc2VydmVzIGRpZ2l0cwogICAgLy8gYW5kIGxvd2VyLWNhc2VzIEFTQ0lJIGxldHRlcnMuCiAgICBjb25zdCBpbnQgXzAgPSA0ODsKICAgIGNvbnN0IGludCBfOSA9IDU3OwogICAgY29uc3QgaW50IF9hID0gOTc7CiAgICBpZiAoXzAgPD0gY29kZVVuaXQgJiYgY29kZVVuaXQgPD0gXzkpIHJldHVybiBjb2RlVW5pdCAtIF8wOwogICAgY29kZVVuaXQgfD0gMHgyMDsKICAgIHZhciByZXN1bHQgPSBjb2RlVW5pdCAtIF9hICsgMTA7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIFBhcnNlcyB0aGUgZ2l2ZW4gW3NvdXJjZV0gc3RyaW5nLCBzdGFydGluZyBhdCBbc3RhcnRQb3NdLCBhcyBhIGhleAogIC8vLyBsaXRlcmFsLgogIC8vLwogIC8vLyBJZiBbaXNOZWdhdGl2ZV0gaXMgdHJ1ZSwgbmVnYXRlcyB0aGUgcmVzdWx0IGJlZm9yZSByZXR1cm5pbmcgaXQuCiAgLy8vCiAgLy8vIFRoZSBbc291cmNlXSAoc3Vic3RyaW5nKSBtdXN0IGJlIGEgdmFsaWQgaGV4IGxpdGVyYWwuCiAgc3RhdGljIF9CaWdJbnRJbXBsIF9wYXJzZUhleChTdHJpbmcgc291cmNlLCBpbnQgc3RhcnRQb3MsIGJvb2wgaXNOZWdhdGl2ZSkgewogICAgaW50IGhleENoYXJzUGVyRGlnaXQgPSBfZGlnaXRCaXRzIH4vIDQ7CiAgICBpbnQgc291cmNlTGVuZ3RoID0gc291cmNlLmxlbmd0aCAtIHN0YXJ0UG9zOwogICAgaW50IHVzZWQgPSAoc291cmNlTGVuZ3RoICsgaGV4Q2hhcnNQZXJEaWdpdCAtIDEpIH4vIGhleENoYXJzUGVyRGlnaXQ7CiAgICB2YXIgZGlnaXRzID0gX25ld0RpZ2l0cyh1c2VkKTsKCiAgICBpbnQgbGFzdERpZ2l0TGVuZ3RoID0gc291cmNlTGVuZ3RoIC0gKHVzZWQgLSAxKSAqIGhleENoYXJzUGVyRGlnaXQ7CiAgICBpbnQgZGlnaXRJbmRleCA9IHVzZWQgLSAxOwogICAgaW50IGkgPSBzdGFydFBvczsKICAgIGludCBkaWdpdCA9IDA7CiAgICBmb3IgKGludCBqID0gMDsgaiA8IGxhc3REaWdpdExlbmd0aDsgaisrKSB7CiAgICAgIHZhciB2YWx1ZSA9IF9jb2RlVW5pdFRvUmFkaXhWYWx1ZShzb3VyY2UuY29kZVVuaXRBdChpKyspKTsKICAgICAgaWYgKHZhbHVlID49IDE2KSByZXR1cm4gbnVsbDsKICAgICAgZGlnaXQgPSBkaWdpdCAqIDE2ICsgdmFsdWU7CiAgICB9CiAgICBkaWdpdHNbZGlnaXRJbmRleC0tXSA9IGRpZ2l0OwoKICAgIHdoaWxlIChpIDwgc291cmNlLmxlbmd0aCkgewogICAgICBkaWdpdCA9IDA7CiAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgaGV4Q2hhcnNQZXJEaWdpdDsgaisrKSB7CiAgICAgICAgdmFyIHZhbHVlID0gX2NvZGVVbml0VG9SYWRpeFZhbHVlKHNvdXJjZS5jb2RlVW5pdEF0KGkrKykpOwogICAgICAgIGlmICh2YWx1ZSA+PSAxNikgcmV0dXJuIG51bGw7CiAgICAgICAgZGlnaXQgPSBkaWdpdCAqIDE2ICsgdmFsdWU7CiAgICAgIH0KICAgICAgZGlnaXRzW2RpZ2l0SW5kZXgtLV0gPSBkaWdpdDsKICAgIH0KICAgIGlmICh1c2VkID09IDEgJiYgZGlnaXRzWzBdID09IDApIHJldHVybiB6ZXJvOwogICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKGlzTmVnYXRpdmUsIHVzZWQsIGRpZ2l0cyk7CiAgfQoKICAvLy8gUGFyc2VzIHRoZSBnaXZlbiBbc291cmNlXSBhcyBhIFtyYWRpeF0gbGl0ZXJhbC4KICAvLy8KICAvLy8gVGhlIFtzb3VyY2VdIHdpbGwgYmUgY2hlY2tlZCBmb3IgaW52YWxpZCBjaGFyYWN0ZXJzLiBJZiBpdCBpcyBpbnZhbGlkLAogIC8vLyB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYG51bGxgLgogIHN0YXRpYyBfQmlnSW50SW1wbCBfcGFyc2VSYWRpeChTdHJpbmcgc291cmNlLCBpbnQgcmFkaXgsIGJvb2wgaXNOZWdhdGl2ZSkgewogICAgdmFyIHJlc3VsdCA9IHplcm87CiAgICB2YXIgYmFzZSA9IG5ldyBfQmlnSW50SW1wbC5fZnJvbUludChyYWRpeCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7IGkrKykgewogICAgICB2YXIgdmFsdWUgPSBfY29kZVVuaXRUb1JhZGl4VmFsdWUoc291cmNlLmNvZGVVbml0QXQoaSkpOwogICAgICBpZiAodmFsdWUgPj0gcmFkaXgpIHJldHVybiBudWxsOwogICAgICByZXN1bHQgPSByZXN1bHQgKiBiYXNlICsgbmV3IF9CaWdJbnRJbXBsLl9mcm9tSW50KHZhbHVlKTsKICAgIH0KICAgIGlmIChpc05lZ2F0aXZlKSByZXR1cm4gLXJlc3VsdDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gVHJpZXMgdG8gcGFyc2UgdGhlIGdpdmVuIFtzb3VyY2VdIGFzIGEgW3JhZGl4XSBsaXRlcmFsLgogIC8vLwogIC8vLyBSZXR1cm5zIHRoZSBwYXJzZWQgYmlnIGludGVnZXIsIG9yIGBudWxsYCBpZiBpdCBmYWlsZWQuCiAgLy8vCiAgLy8vIElmIHRoZSBbcmFkaXhdIGlzIGBudWxsYCBhY2NlcHRzIGRlY2ltYWwgbGl0ZXJhbHMgb3IgYDB4YCBoZXggbGl0ZXJhbHMuCiAgc3RhdGljIF9CaWdJbnRJbXBsIF90cnlQYXJzZShTdHJpbmcgc291cmNlLCB7aW50IHJhZGl4fSkgewogICAgaWYgKHNvdXJjZSA9PSAiIikgcmV0dXJuIG51bGw7CgogICAgdmFyIHJlID0gbmV3IFJlZ0V4cChyJ15ccyooWystXT8pKCgweFthLWYwLTldKyl8KFxkKyl8KFthLXowLTldKykpXHMqJCcsCiAgICAgICAgY2FzZVNlbnNpdGl2ZTogZmFsc2UpOwogICAgdmFyIG1hdGNoID0gcmUuZmlyc3RNYXRjaChzb3VyY2UpOwogICAgaW50IHNpZ25JbmRleCA9IDE7CiAgICBpbnQgaGV4SW5kZXggPSAzOwogICAgaW50IGRlY2ltYWxJbmRleCA9IDQ7CiAgICBpbnQgbm9uRGVjaW1hbEhleEluZGV4ID0gNTsKICAgIGlmIChtYXRjaCA9PSBudWxsKSByZXR1cm4gbnVsbDsKCiAgICBib29sIGlzTmVnYXRpdmUgPSBtYXRjaFtzaWduSW5kZXhdID09ICItIjsKCiAgICBTdHJpbmcgZGVjaW1hbE1hdGNoID0gbWF0Y2hbZGVjaW1hbEluZGV4XTsKICAgIFN0cmluZyBoZXhNYXRjaCA9IG1hdGNoW2hleEluZGV4XTsKICAgIFN0cmluZyBub25EZWNpbWFsTWF0Y2ggPSBtYXRjaFtub25EZWNpbWFsSGV4SW5kZXhdOwoKICAgIGlmIChyYWRpeCA9PSBudWxsKSB7CiAgICAgIGlmIChkZWNpbWFsTWF0Y2ggIT0gbnVsbCkgewogICAgICAgIC8vIENhbm5vdCBmYWlsIGJlY2F1c2Ugd2Uga25vdyB0aGF0IHRoZSBkaWdpdHMgYXJlIGFsbCBkZWNpbWFsLgogICAgICAgIHJldHVybiBfcGFyc2VEZWNpbWFsKGRlY2ltYWxNYXRjaCwgaXNOZWdhdGl2ZSk7CiAgICAgIH0KICAgICAgaWYgKGhleE1hdGNoICE9IG51bGwpIHsKICAgICAgICAvLyBDYW5ub3QgZmFpbCBiZWNhdXNlIHdlIGtub3cgdGhhdCB0aGUgZGlnaXRzIGFyZSBhbGwgaGV4LgogICAgICAgIHJldHVybiBfcGFyc2VIZXgoaGV4TWF0Y2gsIDIsIGlzTmVnYXRpdmUpOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGlmIChyYWRpeCBpcyEgaW50KSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKHJhZGl4LCAncmFkaXgnLCAnaXMgbm90IGFuIGludGVnZXInKTsKICAgIH0KICAgIGlmIChyYWRpeCA8IDIgfHwgcmFkaXggPiAzNikgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShyYWRpeCwgMiwgMzYsICdyYWRpeCcpOwogICAgfQogICAgaWYgKHJhZGl4ID09IDEwICYmIGRlY2ltYWxNYXRjaCAhPSBudWxsKSB7CiAgICAgIHJldHVybiBfcGFyc2VEZWNpbWFsKGRlY2ltYWxNYXRjaCwgaXNOZWdhdGl2ZSk7CiAgICB9CiAgICBpZiAocmFkaXggPT0gMTYgJiYgKGRlY2ltYWxNYXRjaCAhPSBudWxsIHx8IG5vbkRlY2ltYWxNYXRjaCAhPSBudWxsKSkgewogICAgICByZXR1cm4gX3BhcnNlSGV4KGRlY2ltYWxNYXRjaCA/PyBub25EZWNpbWFsTWF0Y2gsIDAsIGlzTmVnYXRpdmUpOwogICAgfQoKICAgIHJldHVybiBfcGFyc2VSYWRpeCgKICAgICAgICBkZWNpbWFsTWF0Y2ggPz8gbm9uRGVjaW1hbE1hdGNoID8/IGhleE1hdGNoLCByYWRpeCwgaXNOZWdhdGl2ZSk7CiAgfQoKICAvLy8gRmluZHMgdGhlIGFtb3VudCBzaWduaWZpY2FudCBkaWdpdHMgaW4gdGhlIHByb3ZpZGVkIFtkaWdpdHNdIGFycmF5LgogIHN0YXRpYyBpbnQgX25vcm1hbGl6ZShpbnQgdXNlZCwgVWludDMyTGlzdCBkaWdpdHMpIHsKICAgIHdoaWxlICh1c2VkID4gMCAmJiBkaWdpdHNbdXNlZCAtIDFdID09IDApIHVzZWQtLTsKICAgIHJldHVybiB1c2VkOwogIH0KCiAgLy8vIEZhY3RvcnkgcmV0dXJuaW5nIGFuIGluc3RhbmNlIGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIGZpZWxkIHZhbHVlcy4KICAvLy8gSWYgdGhlIFtkaWdpdHNdIGFycmF5IGNvbnRhaW5zIGxlYWRpbmcgMHMsIHRoZSBbdXNlZF0gdmFsdWUgaXMgYWRqdXN0ZWQKICAvLy8gYWNjb3JkaW5nbHkuIFRoZSBbZGlnaXRzXSBhcnJheSBpcyBub3QgbW9kaWZpZWQuCiAgX0JpZ0ludEltcGwuXyhib29sIGlzTmVnYXRpdmUsIGludCB1c2VkLCBVaW50MzJMaXN0IGRpZ2l0cykKICAgICAgOiB0aGlzLl9ub3JtYWxpemVkKGlzTmVnYXRpdmUsIF9ub3JtYWxpemUodXNlZCwgZGlnaXRzKSwgZGlnaXRzKTsKCiAgX0JpZ0ludEltcGwuX25vcm1hbGl6ZWQoYm9vbCBpc05lZ2F0aXZlLCB0aGlzLl91c2VkLCB0aGlzLl9kaWdpdHMpCiAgICAgIDogX2lzTmVnYXRpdmUgPSBfdXNlZCA9PSAwID8gZmFsc2UgOiBpc05lZ2F0aXZlIHsKICAgIGFzc2VydChfZGlnaXRzLmxlbmd0aC5pc0V2ZW4pOwogICAgYXNzZXJ0KF91c2VkLmlzRXZlbiB8fCBfZGlnaXRzW191c2VkXSA9PSAwKTsgLy8gTGVhZGluZyB6ZXJvIGZvciA2NC1iaXQuCiAgfQoKICAvLy8gV2hldGhlciB0aGlzIGJpZyBpbnRlZ2VyIGlzIHplcm8uCiAgYm9vbCBnZXQgX2lzWmVybyA9PiBfdXNlZCA9PSAwOwoKICAvLy8gQWxsb2NhdGVzIGFuIGFycmF5IG9mIHRoZSBnaXZlbiBbbGVuZ3RoXSBhbmQgY29waWVzIHRoZSBbZGlnaXRzXSBpbiB0aGUKICAvLy8gcmFuZ2UgW2Zyb21dIHRvIFt0by0xXSwgc3RhcnRpbmcgYXQgaW5kZXggMCwgZm9sbG93ZWQgYnkgbGVhZGluZyB6ZXJvCiAgLy8vIGRpZ2l0cy4KICBzdGF0aWMgVWludDMyTGlzdCBfY2xvbmVEaWdpdHMoCiAgICAgIFVpbnQzMkxpc3QgZGlnaXRzLCBpbnQgZnJvbSwgaW50IHRvLCBpbnQgbGVuZ3RoKSB7CiAgICB2YXIgcmVzdWx0RGlnaXRzID0gX25ld0RpZ2l0cyhsZW5ndGgpOwogICAgdmFyIG4gPSB0byAtIGZyb207CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgewogICAgICByZXN1bHREaWdpdHNbaV0gPSBkaWdpdHNbZnJvbSArIGldOwogICAgfQogICAgcmV0dXJuIHJlc3VsdERpZ2l0czsKICB9CgogIC8vLyBBbGxvY2F0ZXMgYSBiaWcgaW50ZWdlciBmcm9tIHRoZSBwcm92aWRlZCBbdmFsdWVdIG51bWJlci4KICBmYWN0b3J5IF9CaWdJbnRJbXBsLmZyb20obnVtIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT0gMCkgcmV0dXJuIHplcm87CiAgICBpZiAodmFsdWUgPT0gMSkgcmV0dXJuIG9uZTsKICAgIGlmICh2YWx1ZSA9PSAyKSByZXR1cm4gdHdvOwoKICAgIGlmICh2YWx1ZS5hYnMoKSA8IDB4MTAwMDAwMDAwKQogICAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl9mcm9tSW50KHZhbHVlLnRvSW50KCkpOwogICAgaWYgKHZhbHVlIGlzIGRvdWJsZSkgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fZnJvbURvdWJsZSh2YWx1ZSk7CiAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl9mcm9tSW50KHZhbHVlKTsKICB9CgogIGZhY3RvcnkgX0JpZ0ludEltcGwuX2Zyb21JbnQoaW50IHZhbHVlKSB7CiAgICBib29sIGlzTmVnYXRpdmUgPSB2YWx1ZSA8IDA7CiAgICBhc3NlcnQoX2RpZ2l0Qml0cyA9PSAzMik7CiAgICB2YXIgZGlnaXRzID0gX25ld0RpZ2l0cygyKTsKICAgIGlmIChpc05lZ2F0aXZlKSB7CiAgICAgIC8vIEhhbmRsZSB0aGUgbWluIDY0LWJpdCB2YWx1ZSBkaWZmZXJlbnRseSwgc2luY2UgaXRzIG5lZ2F0aW9uIGlzIG5vdAogICAgICAvLyBwb3NpdGl2ZS4KICAgICAgaWYgKHZhbHVlID09IF9taW5JbnQpIHsKICAgICAgICBkaWdpdHNbMV0gPSAweDgwMDAwMDAwOwogICAgICAgIHJldHVybiBuZXcgX0JpZ0ludEltcGwuXyh0cnVlLCAyLCBkaWdpdHMpOwogICAgICB9CiAgICAgIHZhbHVlID0gLXZhbHVlOwogICAgfQogICAgaWYgKHZhbHVlIDwgX2RpZ2l0QmFzZSkgewogICAgICBkaWdpdHNbMF0gPSB2YWx1ZTsKICAgICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKGlzTmVnYXRpdmUsIDEsIGRpZ2l0cyk7CiAgICB9CiAgICBkaWdpdHNbMF0gPSB2YWx1ZSAmIF9kaWdpdE1hc2s7CiAgICBkaWdpdHNbMV0gPSB2YWx1ZSA+PiBfZGlnaXRCaXRzOwogICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKGlzTmVnYXRpdmUsIDIsIGRpZ2l0cyk7CiAgfQoKICAvLy8gQW4gOC1ieXRlIFVpbnQ4TGlzdCB3ZSBjYW4gcmV1c2UgZm9yIFtfZnJvbURvdWJsZV0gdG8gYXZvaWQgZ2VuZXJhdGluZwogIC8vLyBnYXJiYWdlLgogIHN0YXRpYyBmaW5hbCBVaW50OExpc3QgX2JpdHNGb3JGcm9tRG91YmxlID0gbmV3IFVpbnQ4TGlzdCg4KTsKCiAgZmFjdG9yeSBfQmlnSW50SW1wbC5fZnJvbURvdWJsZShkb3VibGUgdmFsdWUpIHsKICAgIGNvbnN0IGludCBleHBvbmVudEJpYXMgPSAxMDc1OwoKICAgIGlmICh2YWx1ZS5pc05hTiB8fCB2YWx1ZS5pc0luZmluaXRlKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJWYWx1ZSBtdXN0IGJlIGZpbml0ZTogJHZhbHVlIik7CiAgICB9CiAgICBib29sIGlzTmVnYXRpdmUgPSB2YWx1ZSA8IDA7CiAgICBpZiAoaXNOZWdhdGl2ZSkgdmFsdWUgPSAtdmFsdWU7CgogICAgdmFsdWUgPSB2YWx1ZS5mbG9vclRvRG91YmxlKCk7CiAgICBpZiAodmFsdWUgPT0gMCkgcmV0dXJuIHplcm87CgogICAgdmFyIGJpdHMgPSBfYml0c0ZvckZyb21Eb3VibGU7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewogICAgICBiaXRzW2ldID0gMDsKICAgIH0KICAgIGJpdHMuYnVmZmVyLmFzQnl0ZURhdGEoKS5zZXRGbG9hdDY0KDAsIHZhbHVlLCBFbmRpYW4ubGl0dGxlKTsKICAgIC8vIFRoZSBleHBvbmVudCBpcyBpbiBiaXRzIDUzLi42My4KICAgIHZhciBiaWFzZWRFeHBvbmVudCA9IChiaXRzWzddIDw8IDQpICsgKGJpdHNbNl0gPj4gNCk7CiAgICB2YXIgZXhwb25lbnQgPSBiaWFzZWRFeHBvbmVudCAtIGV4cG9uZW50QmlhczsKCiAgICBhc3NlcnQoX2RpZ2l0Qml0cyA9PSAzMik7CiAgICAvLyBUaGUgc2lnbmlmaWNhbnQgYml0cyBhcmUgaW4gMCAuLiA1Mi4KICAgIHZhciB1bnNoaWZ0ZWREaWdpdHMgPSBfbmV3RGlnaXRzKDIpOwogICAgdW5zaGlmdGVkRGlnaXRzWzBdID0KICAgICAgICAoYml0c1szXSA8PCAyNCkgKyAoYml0c1syXSA8PCAxNikgKyAoYml0c1sxXSA8PCA4KSArIGJpdHNbMF07CiAgICAvLyBEb24ndCBmb3JnZXQgdG8gYWRkIHRoZSBoaWRkZW4gYml0LgogICAgdW5zaGlmdGVkRGlnaXRzWzFdID0KICAgICAgICAoKDB4MTAgfCAoYml0c1s2XSAmIDB4RikpIDw8IDE2KSArIChiaXRzWzVdIDw8IDgpICsgYml0c1s0XTsKCiAgICB2YXIgdW5zaGlmdGVkQmlnID0gbmV3IF9CaWdJbnRJbXBsLl9ub3JtYWxpemVkKGZhbHNlLCAyLCB1bnNoaWZ0ZWREaWdpdHMpOwogICAgX0JpZ0ludEltcGwgYWJzUmVzdWx0ID0gdW5zaGlmdGVkQmlnOwogICAgaWYgKGV4cG9uZW50IDwgMCkgewogICAgICBhYnNSZXN1bHQgPSB1bnNoaWZ0ZWRCaWcgPj4gLWV4cG9uZW50OwogICAgfSBlbHNlIGlmIChleHBvbmVudCA+IDApIHsKICAgICAgYWJzUmVzdWx0ID0gdW5zaGlmdGVkQmlnIDw8IGV4cG9uZW50OwogICAgfQogICAgaWYgKGlzTmVnYXRpdmUpIHJldHVybiAtYWJzUmVzdWx0OwogICAgcmV0dXJuIGFic1Jlc3VsdDsKICB9CgogIC8qKgogICAqIFJldHVybiB0aGUgbmVnYXRpdmUgdmFsdWUgb2YgdGhpcyBpbnRlZ2VyLgogICAqCiAgICogVGhlIHJlc3VsdCBvZiBuZWdhdGluZyBhbiBpbnRlZ2VyIGFsd2F5cyBoYXMgdGhlIG9wcG9zaXRlIHNpZ24sIGV4Y2VwdAogICAqIGZvciB6ZXJvLCB3aGljaCBpcyBpdHMgb3duIG5lZ2F0aW9uLgogICAqLwogIF9CaWdJbnRJbXBsIG9wZXJhdG9yIC0oKSB7CiAgICBpZiAoX3VzZWQgPT0gMCkgcmV0dXJuIHRoaXM7CiAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl8oIV9pc05lZ2F0aXZlLCBfdXNlZCwgX2RpZ2l0cyk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGlzIGludGVnZXIuCiAgICoKICAgKiBGb3IgYW55IGludGVnZXIgYHhgLCB0aGUgcmVzdWx0IGlzIHRoZSBzYW1lIGFzIGB4IDwgMCA/IC14IDogeGAuCiAgICovCiAgX0JpZ0ludEltcGwgYWJzKCkgPT4gX2lzTmVnYXRpdmUgPyAtdGhpcyA6IHRoaXM7CgogIC8vLyBSZXR1cm5zIHRoaXMgPDwgbipfZGlnaXRCaXRzLgogIF9CaWdJbnRJbXBsIF9kbFNoaWZ0KGludCBuKSB7CiAgICBmaW5hbCB1c2VkID0gX3VzZWQ7CiAgICBpZiAodXNlZCA9PSAwKSB7CiAgICAgIHJldHVybiB6ZXJvOwogICAgfQogICAgZmluYWwgcmVzdWx0VXNlZCA9IHVzZWQgKyBuOwogICAgZmluYWwgZGlnaXRzID0gX2RpZ2l0czsKICAgIGZpbmFsIHJlc3VsdERpZ2l0cyA9IF9uZXdEaWdpdHMocmVzdWx0VXNlZCk7CiAgICBmb3IgKGludCBpID0gdXNlZCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpICsgbl0gPSBkaWdpdHNbaV07CiAgICB9CiAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl8oX2lzTmVnYXRpdmUsIHJlc3VsdFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgfQoKICAvLy8gU2FtZSBhcyBbX2RsU2hpZnRdIGJ1dCB3b3JrcyBvbiB0aGUgZGVjb21wb3NlZCBiaWcgaW50ZWdlcnMuCiAgLy8vCiAgLy8vIFJldHVybnMgYHJlc3VsdFVzZWRgLgogIC8vLwogIC8vLyBgcmVzdWx0RGlnaXRzWzAuLnJlc3VsdFVzZWQtMV0gPSB4RGlnaXRzWzAuLnhVc2VkLTFdIDw8IG4qX2RpZ2l0Qml0c2AuCiAgc3RhdGljIGludCBfZGxTaGlmdERpZ2l0cygKICAgICAgVWludDMyTGlzdCB4RGlnaXRzLCBpbnQgeFVzZWQsIGludCBuLCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgaWYgKHhVc2VkID09IDApIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBpZiAobiA9PSAwICYmIGlkZW50aWNhbChyZXN1bHREaWdpdHMsIHhEaWdpdHMpKSB7CiAgICAgIHJldHVybiB4VXNlZDsKICAgIH0KICAgIGZpbmFsIHJlc3VsdFVzZWQgPSB4VXNlZCArIG47CiAgICBhc3NlcnQocmVzdWx0RGlnaXRzLmxlbmd0aCA+PSByZXN1bHRVc2VkICsgKHJlc3VsdFVzZWQgJiAxKSk7CiAgICBmb3IgKGludCBpID0geFVzZWQgLSAxOyBpID49IDA7IGktLSkgewogICAgICByZXN1bHREaWdpdHNbaSArIG5dID0geERpZ2l0c1tpXTsKICAgIH0KICAgIGZvciAoaW50IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gMDsKICAgIH0KICAgIGlmIChyZXN1bHRVc2VkLmlzT2RkKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tyZXN1bHRVc2VkXSA9IDA7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0VXNlZDsKICB9CgogIC8vLyBSZXR1cm5zIGB0aGlzID4+IG4qX2RpZ2l0Qml0c2AuCiAgX0JpZ0ludEltcGwgX2RyU2hpZnQoaW50IG4pIHsKICAgIGZpbmFsIHVzZWQgPSBfdXNlZDsKICAgIGlmICh1c2VkID09IDApIHsKICAgICAgcmV0dXJuIHplcm87CiAgICB9CiAgICBmaW5hbCByZXN1bHRVc2VkID0gdXNlZCAtIG47CiAgICBpZiAocmVzdWx0VXNlZCA8PSAwKSB7CiAgICAgIHJldHVybiBfaXNOZWdhdGl2ZSA/IF9taW51c09uZSA6IHplcm87CiAgICB9CiAgICBmaW5hbCBkaWdpdHMgPSBfZGlnaXRzOwogICAgZmluYWwgcmVzdWx0RGlnaXRzID0gX25ld0RpZ2l0cyhyZXN1bHRVc2VkKTsKICAgIGZvciAodmFyIGkgPSBuOyBpIDwgdXNlZDsgaSsrKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpIC0gbl0gPSBkaWdpdHNbaV07CiAgICB9CiAgICBmaW5hbCByZXN1bHQgPSBuZXcgX0JpZ0ludEltcGwuXyhfaXNOZWdhdGl2ZSwgcmVzdWx0VXNlZCwgcmVzdWx0RGlnaXRzKTsKICAgIGlmIChfaXNOZWdhdGl2ZSkgewogICAgICAvLyBSb3VuZCBkb3duIGlmIGFueSBiaXQgd2FzIHNoaWZ0ZWQgb3V0LgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGlmIChkaWdpdHNbaV0gIT0gMCkgewogICAgICAgICAgcmV0dXJuIHJlc3VsdCAtIG9uZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gU2FtZSBhcyBbX2RyU2hpZnRdIGJ1dCB3b3JrcyBvbiB0aGUgZGVjb21wb3NlZCBiaWcgaW50ZWdlcnMuCiAgLy8vCiAgLy8vIFJldHVybnMgYHJlc3VsdFVzZWRgLgogIC8vLwogIC8vLyBgcmVzdWx0RGlnaXRzWzAuLnJlc3VsdFVzZWQtMV0gPSB4RGlnaXRzWzAuLnhVc2VkLTFdID4+IG4qX2RpZ2l0Qml0c2AuCiAgc3RhdGljIGludCBfZHJTaGlmdERpZ2l0cygKICAgICAgVWludDMyTGlzdCB4RGlnaXRzLCBpbnQgeFVzZWQsIGludCBuLCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgZmluYWwgcmVzdWx0VXNlZCA9IHhVc2VkIC0gbjsKICAgIGlmIChyZXN1bHRVc2VkIDw9IDApIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBhc3NlcnQocmVzdWx0RGlnaXRzLmxlbmd0aCA+PSByZXN1bHRVc2VkICsgKHJlc3VsdFVzZWQgJiAxKSk7CiAgICBmb3IgKHZhciBpID0gbjsgaSA8IHhVc2VkOyBpKyspIHsKICAgICAgcmVzdWx0RGlnaXRzW2kgLSBuXSA9IHhEaWdpdHNbaV07CiAgICB9CiAgICBpZiAocmVzdWx0VXNlZC5pc09kZCkgewogICAgICByZXN1bHREaWdpdHNbcmVzdWx0VXNlZF0gPSAwOwogICAgfQogICAgcmV0dXJuIHJlc3VsdFVzZWQ7CiAgfQoKICAvLy8gU2hpZnRzIHRoZSBkaWdpdHMgb2YgW3hEaWdpdHNdIGludG8gdGhlIHJpZ2h0IHBsYWNlIGluIFtyZXN1bHREaWdpdHNdLgogIC8vLwogIC8vLyBgcmVzdWx0RGlnaXRzW2RzLi54VXNlZCtkc10gPSB4RGlnaXRzWzAuLnhVc2VkLTFdIDw8IChuICUgX2RpZ2l0Qml0cylgCiAgLy8vICAgd2hlcmUgYGRzID0gbiB+LyBfZGlnaXRCaXRzYAogIC8vLwogIC8vLyBEb2VzICpub3QqIGNsZWFyIGRpZ2l0cyBiZWxvdyBkcy4KICAvLy8KICAvLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW50cmluc2lmaWVkLgogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgc3RhdGljIHZvaWQgX2xzaCgKICAgICAgVWludDMyTGlzdCB4RGlnaXRzLCBpbnQgeFVzZWQsIGludCBuLCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgYXNzZXJ0KHhVc2VkID4gMCk7CiAgICBmaW5hbCBkaWdpdFNoaWZ0ID0gbiB+LyBfZGlnaXRCaXRzOwogICAgZmluYWwgYml0U2hpZnQgPSBuICUgX2RpZ2l0Qml0czsKICAgIGZpbmFsIGNhcnJ5Qml0U2hpZnQgPSBfZGlnaXRCaXRzIC0gYml0U2hpZnQ7CiAgICBmaW5hbCBiaXRNYXNrID0gKDEgPDwgY2FycnlCaXRTaGlmdCkgLSAxOwogICAgdmFyIGNhcnJ5ID0gMDsKICAgIGZvciAoaW50IGkgPSB4VXNlZCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIGZpbmFsIGRpZ2l0ID0geERpZ2l0c1tpXTsKICAgICAgcmVzdWx0RGlnaXRzW2kgKyBkaWdpdFNoaWZ0ICsgMV0gPSAoZGlnaXQgPj4gY2FycnlCaXRTaGlmdCkgfCBjYXJyeTsKICAgICAgY2FycnkgPSAoZGlnaXQgJiBiaXRNYXNrKSA8PCBiaXRTaGlmdDsKICAgIH0KICAgIHJlc3VsdERpZ2l0c1tkaWdpdFNoaWZ0XSA9IGNhcnJ5OwogIH0KCiAgLyoqCiAgICogU2hpZnQgdGhlIGJpdHMgb2YgdGhpcyBpbnRlZ2VyIHRvIHRoZSBsZWZ0IGJ5IFtzaGlmdEFtb3VudF0uCiAgICoKICAgKiBTaGlmdGluZyB0byB0aGUgbGVmdCBtYWtlcyB0aGUgbnVtYmVyIGxhcmdlciwgZWZmZWN0aXZlbHkgbXVsdGlwbHlpbmcKICAgKiB0aGUgbnVtYmVyIGJ5IGBwb3coMiwgc2hpZnRJbmRleClgLgogICAqCiAgICogVGhlcmUgaXMgbm8gbGltaXQgb24gdGhlIHNpemUgb2YgdGhlIHJlc3VsdC4gSXQgbWF5IGJlIHJlbGV2YW50IHRvCiAgICogbGltaXQgaW50ZXJtZWRpYXRlIHZhbHVlcyBieSB1c2luZyB0aGUgImFuZCIgb3BlcmF0b3Igd2l0aCBhIHN1aXRhYmxlCiAgICogbWFzay4KICAgKgogICAqIEl0IGlzIGFuIGVycm9yIGlmIFtzaGlmdEFtb3VudF0gaXMgbmVnYXRpdmUuCiAgICovCiAgX0JpZ0ludEltcGwgb3BlcmF0b3IgPDwoaW50IHNoaWZ0QW1vdW50KSB7CiAgICBpZiAoc2hpZnRBbW91bnQgPCAwKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJzaGlmdC1hbW91bnQgbXVzdCBiZSBwb3NpdGl2ZSAkc2hpZnRBbW91bnQiKTsKICAgIH0KICAgIGlmIChfaXNaZXJvKSByZXR1cm4gdGhpczsKICAgIGZpbmFsIGRpZ2l0U2hpZnQgPSBzaGlmdEFtb3VudCB+LyBfZGlnaXRCaXRzOwogICAgZmluYWwgYml0U2hpZnQgPSBzaGlmdEFtb3VudCAlIF9kaWdpdEJpdHM7CiAgICBpZiAoYml0U2hpZnQgPT0gMCkgewogICAgICByZXR1cm4gX2RsU2hpZnQoZGlnaXRTaGlmdCk7CiAgICB9CiAgICAvLyBOZWVkIG9uZSBleHRyYSBkaWdpdCB0byBob2xkIGJpdHMgc2hpZnRlZCBieSBiaXRTaGlmdC4KICAgIHZhciByZXN1bHRVc2VkID0gX3VzZWQgKyBkaWdpdFNoaWZ0ICsgMTsKICAgIC8vIFRoZSA2NC1iaXQgaW50cmluc2ljIHJlcXVpcmVzIG9uZSBleHRyYSBwYWlyIHRvIHdvcmsgd2l0aC4KICAgIHZhciByZXN1bHREaWdpdHMgPSBfbmV3RGlnaXRzKHJlc3VsdFVzZWQgKyAxKTsKICAgIF9sc2goX2RpZ2l0cywgX3VzZWQsIHNoaWZ0QW1vdW50LCByZXN1bHREaWdpdHMpOwogICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKF9pc05lZ2F0aXZlLCByZXN1bHRVc2VkLCByZXN1bHREaWdpdHMpOwogIH0KCiAgLy8vIHJlc3VsdERpZ2l0c1swLi5yZXN1bHRVc2VkLTFdID0geERpZ2l0c1swLi54VXNlZC0xXSA8PCBuLgogIC8vLyBSZXR1cm5zIHJlc3VsdFVzZWQuCiAgc3RhdGljIGludCBfbFNoaWZ0RGlnaXRzKAogICAgICBVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCwgaW50IG4sIFVpbnQzMkxpc3QgcmVzdWx0RGlnaXRzKSB7CiAgICBmaW5hbCBkaWdpdHNTaGlmdCA9IG4gfi8gX2RpZ2l0Qml0czsKICAgIGZpbmFsIGJpdFNoaWZ0ID0gbiAlIF9kaWdpdEJpdHM7CiAgICBpZiAoYml0U2hpZnQgPT0gMCkgewogICAgICByZXR1cm4gX2RsU2hpZnREaWdpdHMoeERpZ2l0cywgeFVzZWQsIGRpZ2l0c1NoaWZ0LCByZXN1bHREaWdpdHMpOwogICAgfQogICAgLy8gTmVlZCBvbmUgZXh0cmEgZGlnaXQgdG8gaG9sZCBiaXRzIHNoaWZ0ZWQgYnkgYml0U2hpZnQuCiAgICB2YXIgcmVzdWx0VXNlZCA9IHhVc2VkICsgZGlnaXRzU2hpZnQgKyAxOwogICAgLy8gVGhlIDY0LWJpdCBpbnRyaW5zaWMgcmVxdWlyZXMgb25lIGV4dHJhIHBhaXIgdG8gd29yayB3aXRoLgogICAgYXNzZXJ0KHJlc3VsdERpZ2l0cy5sZW5ndGggPj0gcmVzdWx0VXNlZCArIDIgLSAocmVzdWx0VXNlZCAmIDEpKTsKICAgIF9sc2goeERpZ2l0cywgeFVzZWQsIG4sIHJlc3VsdERpZ2l0cyk7CiAgICB2YXIgaSA9IGRpZ2l0c1NoaWZ0OwogICAgd2hpbGUgKC0taSA+PSAwKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpXSA9IDA7CiAgICB9CiAgICBpZiAocmVzdWx0RGlnaXRzW3Jlc3VsdFVzZWQgLSAxXSA9PSAwKSB7CiAgICAgIHJlc3VsdFVzZWQtLTsgLy8gQ2xhbXAgcmVzdWx0LgogICAgfSBlbHNlIGlmIChyZXN1bHRVc2VkLmlzT2RkKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tyZXN1bHRVc2VkXSA9IDA7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0VXNlZDsKICB9CgogIC8vLyByZXN1bHREaWdpdHNbMC4ucmVzdWx0VXNlZC0xXSA9IHhEaWdpdHNbMC4ueFVzZWQtMV0gPj4gbi4KICAvLy8KICAvLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW50cmluc2lmaWVkLgogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgc3RhdGljIHZvaWQgX3JzaCgKICAgICAgVWludDMyTGlzdCB4RGlnaXRzLCBpbnQgeFVzZWQsIGludCBuLCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgYXNzZXJ0KHhVc2VkID4gMCk7CiAgICBmaW5hbCBkaWdpdHNTaGlmdCA9IG4gfi8gX2RpZ2l0Qml0czsKICAgIGZpbmFsIGJpdFNoaWZ0ID0gbiAlIF9kaWdpdEJpdHM7CiAgICBmaW5hbCBjYXJyeUJpdFNoaWZ0ID0gX2RpZ2l0Qml0cyAtIGJpdFNoaWZ0OwogICAgZmluYWwgYml0TWFzayA9ICgxIDw8IGJpdFNoaWZ0KSAtIDE7CiAgICB2YXIgY2FycnkgPSB4RGlnaXRzW2RpZ2l0c1NoaWZ0XSA+PiBiaXRTaGlmdDsKICAgIGZpbmFsIGxhc3QgPSB4VXNlZCAtIGRpZ2l0c1NoaWZ0IC0gMTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGFzdDsgaSsrKSB7CiAgICAgIGZpbmFsIGRpZ2l0ID0geERpZ2l0c1tpICsgZGlnaXRzU2hpZnQgKyAxXTsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gKChkaWdpdCAmIGJpdE1hc2spIDw8IGNhcnJ5Qml0U2hpZnQpIHwgY2Fycnk7CiAgICAgIGNhcnJ5ID0gZGlnaXQgPj4gYml0U2hpZnQ7CiAgICB9CiAgICByZXN1bHREaWdpdHNbbGFzdF0gPSBjYXJyeTsKICB9CgogIC8qKgogICAqIFNoaWZ0IHRoZSBiaXRzIG9mIHRoaXMgaW50ZWdlciB0byB0aGUgcmlnaHQgYnkgW3NoaWZ0QW1vdW50XS4KICAgKgogICAqIFNoaWZ0aW5nIHRvIHRoZSByaWdodCBtYWtlcyB0aGUgbnVtYmVyIHNtYWxsZXIgYW5kIGRyb3BzIHRoZSBsZWFzdAogICAqIHNpZ25pZmljYW50IGJpdHMsIGVmZmVjdGl2ZWx5IGRvaW5nIGFuIGludGVnZXIgZGl2aXNpb24gYnkKICAgKmBwb3coMiwgc2hpZnRJbmRleClgLgogICAqCiAgICogSXQgaXMgYW4gZXJyb3IgaWYgW3NoaWZ0QW1vdW50XSBpcyBuZWdhdGl2ZS4KICAgKi8KICBfQmlnSW50SW1wbCBvcGVyYXRvciA+PihpbnQgc2hpZnRBbW91bnQpIHsKICAgIGlmIChzaGlmdEFtb3VudCA8IDApIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoInNoaWZ0LWFtb3VudCBtdXN0IGJlIHBvc2l0aXZlICRzaGlmdEFtb3VudCIpOwogICAgfQogICAgaWYgKF9pc1plcm8pIHJldHVybiB0aGlzOwogICAgZmluYWwgZGlnaXRTaGlmdCA9IHNoaWZ0QW1vdW50IH4vIF9kaWdpdEJpdHM7CiAgICBmaW5hbCBiaXRTaGlmdCA9IHNoaWZ0QW1vdW50ICUgX2RpZ2l0Qml0czsKICAgIGlmIChiaXRTaGlmdCA9PSAwKSB7CiAgICAgIHJldHVybiBfZHJTaGlmdChkaWdpdFNoaWZ0KTsKICAgIH0KICAgIGZpbmFsIHVzZWQgPSBfdXNlZDsKICAgIGZpbmFsIHJlc3VsdFVzZWQgPSB1c2VkIC0gZGlnaXRTaGlmdDsKICAgIGlmIChyZXN1bHRVc2VkIDw9IDApIHsKICAgICAgcmV0dXJuIF9pc05lZ2F0aXZlID8gX21pbnVzT25lIDogemVybzsKICAgIH0KICAgIGZpbmFsIGRpZ2l0cyA9IF9kaWdpdHM7CiAgICBmaW5hbCByZXN1bHREaWdpdHMgPSBfbmV3RGlnaXRzKHJlc3VsdFVzZWQpOwogICAgX3JzaChkaWdpdHMsIHVzZWQsIHNoaWZ0QW1vdW50LCByZXN1bHREaWdpdHMpOwogICAgZmluYWwgcmVzdWx0ID0gbmV3IF9CaWdJbnRJbXBsLl8oX2lzTmVnYXRpdmUsIHJlc3VsdFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgICBpZiAoX2lzTmVnYXRpdmUpIHsKICAgICAgLy8gUm91bmQgZG93biBpZiBhbnkgYml0IHdhcyBzaGlmdGVkIG91dC4KICAgICAgaWYgKChkaWdpdHNbZGlnaXRTaGlmdF0gJiAoKDEgPDwgYml0U2hpZnQpIC0gMSkpICE9IDApIHsKICAgICAgICByZXR1cm4gcmVzdWx0IC0gb25lOwogICAgICB9CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlnaXRTaGlmdDsgaSsrKSB7CiAgICAgICAgaWYgKGRpZ2l0c1tpXSAhPSAwKSB7CiAgICAgICAgICByZXR1cm4gcmVzdWx0IC0gb25lOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyByZXN1bHREaWdpdHNbMC4ucmVzdWx0VXNlZC0xXSA9IHhEaWdpdHNbMC4ueFVzZWQtMV0gPj4gbi4KICAvLy8gUmV0dXJucyByZXN1bHRVc2VkLgogIHN0YXRpYyBpbnQgX3JTaGlmdERpZ2l0cygKICAgICAgVWludDMyTGlzdCB4RGlnaXRzLCBpbnQgeFVzZWQsIGludCBuLCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgZmluYWwgZGlnaXRTaGlmdCA9IG4gfi8gX2RpZ2l0Qml0czsKICAgIGZpbmFsIGJpdFNoaWZ0ID0gbiAlIF9kaWdpdEJpdHM7CiAgICBpZiAoYml0U2hpZnQgPT0gMCkgewogICAgICByZXR1cm4gX2RyU2hpZnREaWdpdHMoeERpZ2l0cywgeFVzZWQsIGRpZ2l0U2hpZnQsIHJlc3VsdERpZ2l0cyk7CiAgICB9CiAgICB2YXIgcmVzdWx0VXNlZCA9IHhVc2VkIC0gZGlnaXRTaGlmdDsKICAgIGlmIChyZXN1bHRVc2VkIDw9IDApIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBhc3NlcnQocmVzdWx0RGlnaXRzLmxlbmd0aCA+PSByZXN1bHRVc2VkICsgKHJlc3VsdFVzZWQgJiAxKSk7CiAgICBfcnNoKHhEaWdpdHMsIHhVc2VkLCBuLCByZXN1bHREaWdpdHMpOwogICAgaWYgKHJlc3VsdERpZ2l0c1tyZXN1bHRVc2VkIC0gMV0gPT0gMCkgewogICAgICByZXN1bHRVc2VkLS07IC8vIENsYW1wIHJlc3VsdC4KICAgIH0gZWxzZSBpZiAocmVzdWx0VXNlZC5pc09kZCkgewogICAgICByZXN1bHREaWdpdHNbcmVzdWx0VXNlZF0gPSAwOwogICAgfQogICAgcmV0dXJuIHJlc3VsdFVzZWQ7CiAgfQoKICAvLy8gQ29tcGFyZXMgdGhpcyB0byBbb3RoZXJdIHRha2luZyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYm90aCBvcGVyYW5kcy4KICAvLy8KICAvLy8gUmV0dXJucyAwIGlmIGFicyh0aGlzKSA9PSBhYnMob3RoZXIpOyBhIHBvc2l0aXZlIG51bWJlciBpZgogIC8vLyBhYnModGhpcykgPiBhYnMob3RoZXIpOyBhbmQgYSBuZWdhdGl2ZSBudW1iZXIgaWYgYWJzKHRoaXMpIDwgYWJzKG90aGVyKS4KICBpbnQgX2Fic0NvbXBhcmUoQmlnSW50IGJpZ0ludCkgewogICAgX0JpZ0ludEltcGwgb3RoZXIgPSBiaWdJbnQ7CiAgICByZXR1cm4gX2NvbXBhcmVEaWdpdHMoX2RpZ2l0cywgX3VzZWQsIG90aGVyLl9kaWdpdHMsIG90aGVyLl91c2VkKTsKICB9CgogIC8qKgogICAqIENvbXBhcmVzIHRoaXMgdG8gYG90aGVyYC4KICAgKgogICAqIFJldHVybnMgYSBuZWdhdGl2ZSBudW1iZXIgaWYgYHRoaXNgIGlzIGxlc3MgdGhhbiBgb3RoZXJgLCB6ZXJvIGlmIHRoZXkgYXJlCiAgICogZXF1YWwsIGFuZCBhIHBvc2l0aXZlIG51bWJlciBpZiBgdGhpc2AgaXMgZ3JlYXRlciB0aGFuIGBvdGhlcmAuCiAgICovCiAgaW50IGNvbXBhcmVUbyhCaWdJbnQgYmlnSW50KSB7CiAgICBfQmlnSW50SW1wbCBvdGhlciA9IGJpZ0ludDsKICAgIGlmIChfaXNOZWdhdGl2ZSA9PSBvdGhlci5faXNOZWdhdGl2ZSkgewogICAgICB2YXIgcmVzdWx0ID0gX2Fic0NvbXBhcmUob3RoZXIpOwogICAgICAvLyBVc2UgMCAtIHJlc3VsdCB0byBhdm9pZCBuZWdhdGl2ZSB6ZXJvIGluIEphdmFTY3JpcHQuCiAgICAgIHJldHVybiBfaXNOZWdhdGl2ZSA/IDAgLSByZXN1bHQgOiByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gX2lzTmVnYXRpdmUgPyAtMSA6IDE7CiAgfQoKICAvLy8gQ29tcGFyZXMgYGRpZ2l0c1swLi51c2VkLTFdYCB3aXRoIGBvdGhlckRpZ2l0c1swLi5vdGhlclVzZWQtMV1gLgogIC8vLwogIC8vLyBSZXR1cm5zIDAgaWYgZXF1YWw7IGEgcG9zaXRpdmUgbnVtYmVyIGlmIGxhcmdlcjsKICAvLy8gYW5kIGEgbmVnYXRpdmUgbnVtYmVyIGlmIHNtYWxsZXIuCiAgc3RhdGljIGludCBfY29tcGFyZURpZ2l0cygKICAgICAgVWludDMyTGlzdCBkaWdpdHMsIGludCB1c2VkLCBVaW50MzJMaXN0IG90aGVyRGlnaXRzLCBpbnQgb3RoZXJVc2VkKSB7CiAgICB2YXIgcmVzdWx0ID0gdXNlZCAtIG90aGVyVXNlZDsKICAgIGlmIChyZXN1bHQgPT0gMCkgewogICAgICBmb3IgKGludCBpID0gdXNlZCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgcmVzdWx0ID0gZGlnaXRzW2ldIC0gb3RoZXJEaWdpdHNbaV07CiAgICAgICAgaWYgKHJlc3VsdCAhPSAwKSByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIHJlc3VsdERpZ2l0c1swLi51c2VkXSA9IGRpZ2l0c1swLi51c2VkLTFdICsgb3RoZXJEaWdpdHNbMC4ub3RoZXJVc2VkLTFdLgogIC8vLyB1c2VkID49IG90aGVyVXNlZCA+IDAuCiAgLy8vCiAgLy8vIE5vdGU6IFRoaXMgZnVuY3Rpb24gbWF5IGJlIGludHJpbnNpZmllZC4KICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIHN0YXRpYyB2b2lkIF9hYnNBZGQoVWludDMyTGlzdCBkaWdpdHMsIGludCB1c2VkLCBVaW50MzJMaXN0IG90aGVyRGlnaXRzLAogICAgICBpbnQgb3RoZXJVc2VkLCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgYXNzZXJ0KHVzZWQgPj0gb3RoZXJVc2VkICYmIG90aGVyVXNlZCA+IDApOwogICAgdmFyIGNhcnJ5ID0gMDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3RoZXJVc2VkOyBpKyspIHsKICAgICAgY2FycnkgKz0gZGlnaXRzW2ldICsgb3RoZXJEaWdpdHNbaV07CiAgICAgIHJlc3VsdERpZ2l0c1tpXSA9IGNhcnJ5ICYgX2RpZ2l0TWFzazsKICAgICAgY2FycnkgPj49IF9kaWdpdEJpdHM7CiAgICB9CiAgICBmb3IgKHZhciBpID0gb3RoZXJVc2VkOyBpIDwgdXNlZDsgaSsrKSB7CiAgICAgIGNhcnJ5ICs9IGRpZ2l0c1tpXTsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gY2FycnkgJiBfZGlnaXRNYXNrOwogICAgICBjYXJyeSA+Pj0gX2RpZ2l0Qml0czsKICAgIH0KICAgIHJlc3VsdERpZ2l0c1t1c2VkXSA9IGNhcnJ5OwogIH0KCiAgLy8vIHJlc3VsdERpZ2l0c1swLi51c2VkLTFdID0gZGlnaXRzWzAuLnVzZWQtMV0gLSBvdGhlckRpZ2l0c1swLi5vdGhlclVzZWQtMV0uCiAgLy8vIHVzZWQgPj0gb3RoZXJVc2VkID4gMC4KICAvLy8KICAvLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW50cmluc2lmaWVkLgogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgc3RhdGljIHZvaWQgX2Fic1N1YihVaW50MzJMaXN0IGRpZ2l0cywgaW50IHVzZWQsIFVpbnQzMkxpc3Qgb3RoZXJEaWdpdHMsCiAgICAgIGludCBvdGhlclVzZWQsIFVpbnQzMkxpc3QgcmVzdWx0RGlnaXRzKSB7CiAgICBhc3NlcnQodXNlZCA+PSBvdGhlclVzZWQgJiYgb3RoZXJVc2VkID4gMCk7CiAgICB2YXIgY2FycnkgPSAwOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvdGhlclVzZWQ7IGkrKykgewogICAgICBjYXJyeSArPSBkaWdpdHNbaV0gLSBvdGhlckRpZ2l0c1tpXTsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gY2FycnkgJiBfZGlnaXRNYXNrOwogICAgICBjYXJyeSA+Pj0gX2RpZ2l0Qml0czsKICAgIH0KICAgIGZvciAodmFyIGkgPSBvdGhlclVzZWQ7IGkgPCB1c2VkOyBpKyspIHsKICAgICAgY2FycnkgKz0gZGlnaXRzW2ldOwogICAgICByZXN1bHREaWdpdHNbaV0gPSBjYXJyeSAmIF9kaWdpdE1hc2s7CiAgICAgIGNhcnJ5ID4+PSBfZGlnaXRCaXRzOwogICAgfQogIH0KCiAgLy8vIFJldHVybnMgYGFicyh0aGlzKSArIGFicyhvdGhlcilgIHdpdGggc2lnbiBzZXQgYWNjb3JkaW5nIHRvIFtpc05lZ2F0aXZlXS4KICBfQmlnSW50SW1wbCBfYWJzQWRkU2V0U2lnbihfQmlnSW50SW1wbCBvdGhlciwgYm9vbCBpc05lZ2F0aXZlKSB7CiAgICB2YXIgdXNlZCA9IF91c2VkOwogICAgdmFyIG90aGVyVXNlZCA9IG90aGVyLl91c2VkOwogICAgaWYgKHVzZWQgPCBvdGhlclVzZWQpIHsKICAgICAgcmV0dXJuIG90aGVyLl9hYnNBZGRTZXRTaWduKHRoaXMsIGlzTmVnYXRpdmUpOwogICAgfQogICAgaWYgKHVzZWQgPT0gMCkgewogICAgICBhc3NlcnQoIWlzTmVnYXRpdmUpOwogICAgICByZXR1cm4gemVybzsKICAgIH0KICAgIGlmIChvdGhlclVzZWQgPT0gMCkgewogICAgICByZXR1cm4gX2lzTmVnYXRpdmUgPT0gaXNOZWdhdGl2ZSA/IHRoaXMgOiAtdGhpczsKICAgIH0KICAgIHZhciByZXN1bHRVc2VkID0gdXNlZCArIDE7CiAgICB2YXIgcmVzdWx0RGlnaXRzID0gX25ld0RpZ2l0cyhyZXN1bHRVc2VkKTsKICAgIF9hYnNBZGQoX2RpZ2l0cywgdXNlZCwgb3RoZXIuX2RpZ2l0cywgb3RoZXJVc2VkLCByZXN1bHREaWdpdHMpOwogICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKGlzTmVnYXRpdmUsIHJlc3VsdFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgfQoKICAvLy8gUmV0dXJucyBgYWJzKHRoaXMpIC0gYWJzKG90aGVyKWAgd2l0aCBzaWduIHNldCBhY2NvcmRpbmcgdG8gW2lzTmVnYXRpdmVdLgogIC8vLwogIC8vLyBSZXF1aXJlbWVudDogYGFicyh0aGlzKSA+PSBhYnMob3RoZXIpYC4KICBfQmlnSW50SW1wbCBfYWJzU3ViU2V0U2lnbihfQmlnSW50SW1wbCBvdGhlciwgYm9vbCBpc05lZ2F0aXZlKSB7CiAgICBhc3NlcnQoX2Fic0NvbXBhcmUob3RoZXIpID49IDApOwogICAgdmFyIHVzZWQgPSBfdXNlZDsKICAgIGlmICh1c2VkID09IDApIHsKICAgICAgYXNzZXJ0KCFpc05lZ2F0aXZlKTsKICAgICAgcmV0dXJuIHplcm87CiAgICB9CiAgICB2YXIgb3RoZXJVc2VkID0gb3RoZXIuX3VzZWQ7CiAgICBpZiAob3RoZXJVc2VkID09IDApIHsKICAgICAgcmV0dXJuIF9pc05lZ2F0aXZlID09IGlzTmVnYXRpdmUgPyB0aGlzIDogLXRoaXM7CiAgICB9CiAgICB2YXIgcmVzdWx0RGlnaXRzID0gX25ld0RpZ2l0cyh1c2VkKTsKICAgIF9hYnNTdWIoX2RpZ2l0cywgdXNlZCwgb3RoZXIuX2RpZ2l0cywgb3RoZXJVc2VkLCByZXN1bHREaWdpdHMpOwogICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKGlzTmVnYXRpdmUsIHVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgfQoKICAvLy8gUmV0dXJucyBgYWJzKHRoaXMpICYgYWJzKG90aGVyKWAgd2l0aCBzaWduIHNldCBhY2NvcmRpbmcgdG8gW2lzTmVnYXRpdmVdLgogIF9CaWdJbnRJbXBsIF9hYnNBbmRTZXRTaWduKF9CaWdJbnRJbXBsIG90aGVyLCBib29sIGlzTmVnYXRpdmUpIHsKICAgIHZhciByZXN1bHRVc2VkID0gX21pbihfdXNlZCwgb3RoZXIuX3VzZWQpOwogICAgdmFyIGRpZ2l0cyA9IF9kaWdpdHM7CiAgICB2YXIgb3RoZXJEaWdpdHMgPSBvdGhlci5fZGlnaXRzOwogICAgdmFyIHJlc3VsdERpZ2l0cyA9IF9uZXdEaWdpdHMocmVzdWx0VXNlZCk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdFVzZWQ7IGkrKykgewogICAgICByZXN1bHREaWdpdHNbaV0gPSBkaWdpdHNbaV0gJiBvdGhlckRpZ2l0c1tpXTsKICAgIH0KICAgIHJldHVybiBuZXcgX0JpZ0ludEltcGwuXyhpc05lZ2F0aXZlLCByZXN1bHRVc2VkLCByZXN1bHREaWdpdHMpOwogIH0KCiAgLy8vIFJldHVybnMgYGFicyh0aGlzKSAmfiBhYnMob3RoZXIpYCB3aXRoIHNpZ24gc2V0IGFjY29yZGluZyB0byBbaXNOZWdhdGl2ZV0uCiAgX0JpZ0ludEltcGwgX2Fic0FuZE5vdFNldFNpZ24oX0JpZ0ludEltcGwgb3RoZXIsIGJvb2wgaXNOZWdhdGl2ZSkgewogICAgdmFyIHJlc3VsdFVzZWQgPSBfdXNlZDsKICAgIHZhciBkaWdpdHMgPSBfZGlnaXRzOwogICAgdmFyIG90aGVyRGlnaXRzID0gb3RoZXIuX2RpZ2l0czsKICAgIHZhciByZXN1bHREaWdpdHMgPSBfbmV3RGlnaXRzKHJlc3VsdFVzZWQpOwogICAgdmFyIG0gPSBfbWluKHJlc3VsdFVzZWQsIG90aGVyLl91c2VkKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbTsgaSsrKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpXSA9IGRpZ2l0c1tpXSAmIH5vdGhlckRpZ2l0c1tpXTsKICAgIH0KICAgIGZvciAodmFyIGkgPSBtOyBpIDwgcmVzdWx0VXNlZDsgaSsrKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpXSA9IGRpZ2l0c1tpXTsKICAgIH0KICAgIHJldHVybiBuZXcgX0JpZ0ludEltcGwuXyhpc05lZ2F0aXZlLCByZXN1bHRVc2VkLCByZXN1bHREaWdpdHMpOwogIH0KCiAgLy8vIFJldHVybnMgYGFicyh0aGlzKSB8IGFicyhvdGhlcilgIHdpdGggc2lnbiBzZXQgYWNjb3JkaW5nIHRvIFtpc05lZ2F0aXZlXS4KICBfQmlnSW50SW1wbCBfYWJzT3JTZXRTaWduKF9CaWdJbnRJbXBsIG90aGVyLCBib29sIGlzTmVnYXRpdmUpIHsKICAgIHZhciB1c2VkID0gX3VzZWQ7CiAgICB2YXIgb3RoZXJVc2VkID0gb3RoZXIuX3VzZWQ7CiAgICB2YXIgcmVzdWx0VXNlZCA9IF9tYXgodXNlZCwgb3RoZXJVc2VkKTsKICAgIHZhciBkaWdpdHMgPSBfZGlnaXRzOwogICAgdmFyIG90aGVyRGlnaXRzID0gb3RoZXIuX2RpZ2l0czsKICAgIHZhciByZXN1bHREaWdpdHMgPSBfbmV3RGlnaXRzKHJlc3VsdFVzZWQpOwogICAgdmFyIGwsIG07CiAgICBpZiAodXNlZCA8IG90aGVyVXNlZCkgewogICAgICBsID0gb3RoZXI7CiAgICAgIG0gPSB1c2VkOwogICAgfSBlbHNlIHsKICAgICAgbCA9IHRoaXM7CiAgICAgIG0gPSBvdGhlclVzZWQ7CiAgICB9CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG07IGkrKykgewogICAgICByZXN1bHREaWdpdHNbaV0gPSBkaWdpdHNbaV0gfCBvdGhlckRpZ2l0c1tpXTsKICAgIH0KICAgIHZhciBsRGlnaXRzID0gbC5fZGlnaXRzOwogICAgZm9yICh2YXIgaSA9IG07IGkgPCByZXN1bHRVc2VkOyBpKyspIHsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gbERpZ2l0c1tpXTsKICAgIH0KICAgIHJldHVybiBuZXcgX0JpZ0ludEltcGwuXyhpc05lZ2F0aXZlLCByZXN1bHRVc2VkLCByZXN1bHREaWdpdHMpOwogIH0KCiAgLy8vIFJldHVybnMgYGFicyh0aGlzKSBeIGFicyhvdGhlcilgIHdpdGggc2lnbiBzZXQgYWNjb3JkaW5nIHRvIFtpc05lZ2F0aXZlXS4KICBfQmlnSW50SW1wbCBfYWJzWG9yU2V0U2lnbihfQmlnSW50SW1wbCBvdGhlciwgYm9vbCBpc05lZ2F0aXZlKSB7CiAgICB2YXIgdXNlZCA9IF91c2VkOwogICAgdmFyIG90aGVyVXNlZCA9IG90aGVyLl91c2VkOwogICAgdmFyIHJlc3VsdFVzZWQgPSBfbWF4KHVzZWQsIG90aGVyVXNlZCk7CiAgICB2YXIgZGlnaXRzID0gX2RpZ2l0czsKICAgIHZhciBvdGhlckRpZ2l0cyA9IG90aGVyLl9kaWdpdHM7CiAgICB2YXIgcmVzdWx0RGlnaXRzID0gX25ld0RpZ2l0cyhyZXN1bHRVc2VkKTsKICAgIHZhciBsLCBtOwogICAgaWYgKHVzZWQgPCBvdGhlclVzZWQpIHsKICAgICAgbCA9IG90aGVyOwogICAgICBtID0gdXNlZDsKICAgIH0gZWxzZSB7CiAgICAgIGwgPSB0aGlzOwogICAgICBtID0gb3RoZXJVc2VkOwogICAgfQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtOyBpKyspIHsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gZGlnaXRzW2ldIF4gb3RoZXJEaWdpdHNbaV07CiAgICB9CiAgICB2YXIgbERpZ2l0cyA9IGwuX2RpZ2l0czsKICAgIGZvciAodmFyIGkgPSBtOyBpIDwgcmVzdWx0VXNlZDsgaSsrKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpXSA9IGxEaWdpdHNbaV07CiAgICB9CiAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl8oaXNOZWdhdGl2ZSwgcmVzdWx0VXNlZCwgcmVzdWx0RGlnaXRzKTsKICB9CgogIC8qKgogICAqIEJpdC13aXNlIGFuZCBvcGVyYXRvci4KICAgKgogICAqIFRyZWF0aW5nIGJvdGggYHRoaXNgIGFuZCBbb3RoZXJdIGFzIHN1ZmZpY2llbnRseSBsYXJnZSB0d28ncyBjb21wb25lbnQKICAgKiBpbnRlZ2VycywgdGhlIHJlc3VsdCBpcyBhIG51bWJlciB3aXRoIG9ubHkgdGhlIGJpdHMgc2V0IHRoYXQgYXJlIHNldCBpbgogICAqIGJvdGggYHRoaXNgIGFuZCBbb3RoZXJdCiAgICoKICAgKiBPZiBib3RoIG9wZXJhbmRzIGFyZSBuZWdhdGl2ZSwgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgb3RoZXJ3aXNlCiAgICogdGhlIHJlc3VsdCBpcyBub24tbmVnYXRpdmUuCiAgICovCiAgX0JpZ0ludEltcGwgb3BlcmF0b3IgJihCaWdJbnQgYmlnSW50KSB7CiAgICBfQmlnSW50SW1wbCBvdGhlciA9IGJpZ0ludDsKICAgIGlmIChfaXNaZXJvIHx8IG90aGVyLl9pc1plcm8pIHJldHVybiB6ZXJvOwogICAgaWYgKF9pc05lZ2F0aXZlID09IG90aGVyLl9pc05lZ2F0aXZlKSB7CiAgICAgIGlmIChfaXNOZWdhdGl2ZSkgewogICAgICAgIC8vICgtdGhpcykgJiAoLW90aGVyKSA9PSB+KHRoaXMtMSkgJiB+KG90aGVyLTEpCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgID09IH4oKHRoaXMtMSkgfCAob3RoZXItMSkpCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgID09IC0oKCh0aGlzLTEpIHwgKG90aGVyLTEpKSArIDEpCiAgICAgICAgX0JpZ0ludEltcGwgdGhpczEgPSBfYWJzU3ViU2V0U2lnbihvbmUsIHRydWUpOwogICAgICAgIF9CaWdJbnRJbXBsIG90aGVyMSA9IG90aGVyLl9hYnNTdWJTZXRTaWduKG9uZSwgdHJ1ZSk7CiAgICAgICAgLy8gUmVzdWx0IGNhbm5vdCBiZSB6ZXJvIGlmIHRoaXMgYW5kIG90aGVyIGFyZSBuZWdhdGl2ZS4KICAgICAgICByZXR1cm4gdGhpczEuX2Fic09yU2V0U2lnbihvdGhlcjEsIHRydWUpLl9hYnNBZGRTZXRTaWduKG9uZSwgdHJ1ZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIF9hYnNBbmRTZXRTaWduKG90aGVyLCBmYWxzZSk7CiAgICB9CiAgICAvLyBfaXNOZWdhdGl2ZSAhPSBvdGhlci5faXNOZWdhdGl2ZQogICAgdmFyIHAsIG47CiAgICBpZiAoX2lzTmVnYXRpdmUpIHsKICAgICAgcCA9IG90aGVyOwogICAgICBuID0gdGhpczsKICAgIH0gZWxzZSB7CiAgICAgIC8vICYgaXMgc3ltbWV0cmljLgogICAgICBwID0gdGhpczsKICAgICAgbiA9IG90aGVyOwogICAgfQogICAgLy8gcCAmICgtbikgPT0gcCAmIH4obi0xKSA9PSBwICZ+IChuLTEpCiAgICB2YXIgbjEgPSBuLl9hYnNTdWJTZXRTaWduKG9uZSwgZmFsc2UpOwogICAgcmV0dXJuIHAuX2Fic0FuZE5vdFNldFNpZ24objEsIGZhbHNlKTsKICB9CgogIC8qKgogICAqIEJpdC13aXNlIG9yIG9wZXJhdG9yLgogICAqCiAgICogVHJlYXRpbmcgYm90aCBgdGhpc2AgYW5kIFtvdGhlcl0gYXMgc3VmZmljaWVudGx5IGxhcmdlIHR3bydzIGNvbXBvbmVudAogICAqIGludGVnZXJzLCB0aGUgcmVzdWx0IGlzIGEgbnVtYmVyIHdpdGggdGhlIGJpdHMgc2V0IHRoYXQgYXJlIHNldCBpbiBlaXRoZXIKICAgKiBvZiBgdGhpc2AgYW5kIFtvdGhlcl0KICAgKgogICAqIElmIGJvdGggb3BlcmFuZHMgYXJlIG5vbi1uZWdhdGl2ZSwgdGhlIHJlc3VsdCBpcyBub24tbmVnYXRpdmUsCiAgICogb3RoZXJ3aXNlIHRoZSByZXN1bHQgdXMgbmVnYXRpdmUuCiAgICovCiAgX0JpZ0ludEltcGwgb3BlcmF0b3IgfChCaWdJbnQgYmlnSW50KSB7CiAgICBfQmlnSW50SW1wbCBvdGhlciA9IGJpZ0ludDsKICAgIGlmIChfaXNaZXJvKSByZXR1cm4gb3RoZXI7CiAgICBpZiAob3RoZXIuX2lzWmVybykgcmV0dXJuIHRoaXM7CiAgICBpZiAoX2lzTmVnYXRpdmUgPT0gb3RoZXIuX2lzTmVnYXRpdmUpIHsKICAgICAgaWYgKF9pc05lZ2F0aXZlKSB7CiAgICAgICAgLy8gKC10aGlzKSB8ICgtb3RoZXIpID09IH4odGhpcy0xKSB8IH4ob3RoZXItMSkKICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgPT0gfigodGhpcy0xKSAmIChvdGhlci0xKSkKICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgPT0gLSgoKHRoaXMtMSkgJiAob3RoZXItMSkpICsgMSkKICAgICAgICB2YXIgdGhpczEgPSBfYWJzU3ViU2V0U2lnbihvbmUsIHRydWUpOwogICAgICAgIHZhciBvdGhlcjEgPSBvdGhlci5fYWJzU3ViU2V0U2lnbihvbmUsIHRydWUpOwogICAgICAgIC8vIFJlc3VsdCBjYW5ub3QgYmUgemVybyBpZiB0aGlzIGFuZCBhIGFyZSBuZWdhdGl2ZS4KICAgICAgICByZXR1cm4gdGhpczEuX2Fic0FuZFNldFNpZ24ob3RoZXIxLCB0cnVlKS5fYWJzQWRkU2V0U2lnbihvbmUsIHRydWUpOwogICAgICB9CiAgICAgIHJldHVybiBfYWJzT3JTZXRTaWduKG90aGVyLCBmYWxzZSk7CiAgICB9CiAgICAvLyBfbmVnICE9IGEuX25lZwogICAgdmFyIHAsIG47CiAgICBpZiAoX2lzTmVnYXRpdmUpIHsKICAgICAgcCA9IG90aGVyOwogICAgICBuID0gdGhpczsKICAgIH0gZWxzZSB7CiAgICAgIC8vIHwgaXMgc3ltbWV0cmljLgogICAgICBwID0gdGhpczsKICAgICAgbiA9IG90aGVyOwogICAgfQogICAgLy8gcCB8ICgtbikgPT0gcCB8IH4obi0xKSA9PSB+KChuLTEpICZ+IHApID09IC0ofigobi0xKSAmfiBwKSArIDEpCiAgICB2YXIgbjEgPSBuLl9hYnNTdWJTZXRTaWduKG9uZSwgdHJ1ZSk7CiAgICAvLyBSZXN1bHQgY2Fubm90IGJlIHplcm8gaWYgb25seSBvbmUgb2YgdGhpcyBvciBhIGlzIG5lZ2F0aXZlLgogICAgcmV0dXJuIG4xLl9hYnNBbmROb3RTZXRTaWduKHAsIHRydWUpLl9hYnNBZGRTZXRTaWduKG9uZSwgdHJ1ZSk7CiAgfQoKICAvKioKICAgKiBCaXQtd2lzZSBleGNsdXNpdmUtb3Igb3BlcmF0b3IuCiAgICoKICAgKiBUcmVhdGluZyBib3RoIGB0aGlzYCBhbmQgW290aGVyXSBhcyBzdWZmaWNpZW50bHkgbGFyZ2UgdHdvJ3MgY29tcG9uZW50CiAgICogaW50ZWdlcnMsIHRoZSByZXN1bHQgaXMgYSBudW1iZXIgd2l0aCB0aGUgYml0cyBzZXQgdGhhdCBhcmUgc2V0IGluIG9uZSwKICAgKiBidXQgbm90IGJvdGgsIG9mIGB0aGlzYCBhbmQgW290aGVyXQogICAqCiAgICogSWYgdGhlIG9wZXJhbmRzIGhhdmUgdGhlIHNhbWUgc2lnbiwgdGhlIHJlc3VsdCBpcyBub24tbmVnYXRpdmUsCiAgICogb3RoZXJ3aXNlIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUuCiAgICovCiAgX0JpZ0ludEltcGwgb3BlcmF0b3IgXihCaWdJbnQgYmlnSW50KSB7CiAgICBfQmlnSW50SW1wbCBvdGhlciA9IGJpZ0ludDsKICAgIGlmIChfaXNaZXJvKSByZXR1cm4gb3RoZXI7CiAgICBpZiAob3RoZXIuX2lzWmVybykgcmV0dXJuIHRoaXM7CiAgICBpZiAoX2lzTmVnYXRpdmUgPT0gb3RoZXIuX2lzTmVnYXRpdmUpIHsKICAgICAgaWYgKF9pc05lZ2F0aXZlKSB7CiAgICAgICAgLy8gKC10aGlzKSBeICgtb3RoZXIpID09IH4odGhpcy0xKSBeIH4ob3RoZXItMSkgPT0gKHRoaXMtMSkgXiAob3RoZXItMSkKICAgICAgICB2YXIgdGhpczEgPSBfYWJzU3ViU2V0U2lnbihvbmUsIHRydWUpOwogICAgICAgIHZhciBvdGhlcjEgPSBvdGhlci5fYWJzU3ViU2V0U2lnbihvbmUsIHRydWUpOwogICAgICAgIHJldHVybiB0aGlzMS5fYWJzWG9yU2V0U2lnbihvdGhlcjEsIGZhbHNlKTsKICAgICAgfQogICAgICByZXR1cm4gX2Fic1hvclNldFNpZ24ob3RoZXIsIGZhbHNlKTsKICAgIH0KICAgIC8vIF9pc05lZ2F0aXZlICE9IGEuX2lzTmVnYXRpdmUKICAgIHZhciBwLCBuOwogICAgaWYgKF9pc05lZ2F0aXZlKSB7CiAgICAgIHAgPSBvdGhlcjsKICAgICAgbiA9IHRoaXM7CiAgICB9IGVsc2UgewogICAgICAvLyBeIGlzIHN5bW1ldHJpYy4KICAgICAgcCA9IHRoaXM7CiAgICAgIG4gPSBvdGhlcjsKICAgIH0KICAgIC8vIHAgXiAoLW4pID09IHAgXiB+KG4tMSkgPT0gfihwIF4gKG4tMSkpID09IC0oKHAgXiAobi0xKSkgKyAxKQogICAgdmFyIG4xID0gbi5fYWJzU3ViU2V0U2lnbihvbmUsIHRydWUpOwogICAgLy8gUmVzdWx0IGNhbm5vdCBiZSB6ZXJvIGlmIG9ubHkgb25lIG9mIHRoaXMgb3IgYSBpcyBuZWdhdGl2ZS4KICAgIHJldHVybiBwLl9hYnNYb3JTZXRTaWduKG4xLCB0cnVlKS5fYWJzQWRkU2V0U2lnbihvbmUsIHRydWUpOwogIH0KCiAgLyoqCiAgICogVGhlIGJpdC13aXNlIG5lZ2F0ZSBvcGVyYXRvci4KICAgKgogICAqIFRyZWF0aW5nIGB0aGlzYCBhcyBhIHN1ZmZpY2llbnRseSBsYXJnZSB0d28ncyBjb21wb25lbnQgaW50ZWdlciwKICAgKiB0aGUgcmVzdWx0IGlzIGEgbnVtYmVyIHdpdGggdGhlIG9wcG9zaXRlIGJpdHMgc2V0LgogICAqCiAgICogVGhpcyBtYXBzIGFueSBpbnRlZ2VyIGB4YCB0byBgLXggLSAxYC4KICAgKi8KICBfQmlnSW50SW1wbCBvcGVyYXRvciB+KCkgewogICAgaWYgKF9pc1plcm8pIHJldHVybiBfbWludXNPbmU7CiAgICBpZiAoX2lzTmVnYXRpdmUpIHsKICAgICAgLy8gfigtdGhpcykgPT0gfih+KHRoaXMtMSkpID09IHRoaXMtMQogICAgICByZXR1cm4gX2Fic1N1YlNldFNpZ24ob25lLCBmYWxzZSk7CiAgICB9CiAgICAvLyB+dGhpcyA9PSAtdGhpcy0xID09IC0odGhpcysxKQogICAgLy8gUmVzdWx0IGNhbm5vdCBiZSB6ZXJvIGlmIHRoaXMgaXMgcG9zaXRpdmUuCiAgICByZXR1cm4gX2Fic0FkZFNldFNpZ24ob25lLCB0cnVlKTsKICB9CgogIC8vLyBBZGRpdGlvbiBvcGVyYXRvci4KICBfQmlnSW50SW1wbCBvcGVyYXRvciArKEJpZ0ludCBiaWdJbnQpIHsKICAgIF9CaWdJbnRJbXBsIG90aGVyID0gYmlnSW50OwogICAgaWYgKF9pc1plcm8pIHJldHVybiBvdGhlcjsKICAgIGlmIChvdGhlci5faXNaZXJvKSByZXR1cm4gdGhpczsKICAgIHZhciBpc05lZ2F0aXZlID0gX2lzTmVnYXRpdmU7CiAgICBpZiAoaXNOZWdhdGl2ZSA9PSBvdGhlci5faXNOZWdhdGl2ZSkgewogICAgICAvLyB0aGlzICsgb3RoZXIgPT0gdGhpcyArIG90aGVyCiAgICAgIC8vICgtdGhpcykgKyAoLW90aGVyKSA9PSAtKHRoaXMgKyBvdGhlcikKICAgICAgcmV0dXJuIF9hYnNBZGRTZXRTaWduKG90aGVyLCBpc05lZ2F0aXZlKTsKICAgIH0KICAgIC8vIHRoaXMgKyAoLW90aGVyKSA9PSB0aGlzIC0gb3RoZXIgPT0gLSh0aGlzIC0gb3RoZXIpCiAgICAvLyAoLXRoaXMpICsgb3RoZXIgPT0gb3RoZXIgLSB0aGlzID09IC0odGhpcyAtIG90aGVyKQogICAgaWYgKF9hYnNDb21wYXJlKG90aGVyKSA+PSAwKSB7CiAgICAgIHJldHVybiBfYWJzU3ViU2V0U2lnbihvdGhlciwgaXNOZWdhdGl2ZSk7CiAgICB9CiAgICByZXR1cm4gb3RoZXIuX2Fic1N1YlNldFNpZ24odGhpcywgIWlzTmVnYXRpdmUpOwogIH0KCiAgLy8vIFN1YnRyYWN0aW9uIG9wZXJhdG9yLgogIF9CaWdJbnRJbXBsIG9wZXJhdG9yIC0oQmlnSW50IGJpZ0ludCkgewogICAgX0JpZ0ludEltcGwgb3RoZXIgPSBiaWdJbnQ7CiAgICBpZiAoX2lzWmVybykgcmV0dXJuIC1vdGhlcjsKICAgIGlmIChvdGhlci5faXNaZXJvKSByZXR1cm4gdGhpczsKICAgIHZhciBpc05lZ2F0aXZlID0gX2lzTmVnYXRpdmU7CiAgICBpZiAoaXNOZWdhdGl2ZSAhPSBvdGhlci5faXNOZWdhdGl2ZSkgewogICAgICAvLyB0aGlzIC0gKC1vdGhlcikgPT0gdGhpcyArIG90aGVyCiAgICAgIC8vICgtdGhpcykgLSBvdGhlciA9PSAtKHRoaXMgKyBvdGhlcikKICAgICAgcmV0dXJuIF9hYnNBZGRTZXRTaWduKG90aGVyLCBpc05lZ2F0aXZlKTsKICAgIH0KICAgIC8vIHRoaXMgLSBvdGhlciA9PSB0aGlzIC0gYSA9PSAtKHRoaXMgLSBvdGhlcikKICAgIC8vICgtdGhpcykgLSAoLW90aGVyKSA9PSBvdGhlciAtIHRoaXMgPT0gLSh0aGlzIC0gb3RoZXIpCiAgICBpZiAoX2Fic0NvbXBhcmUob3RoZXIpID49IDApIHsKICAgICAgcmV0dXJuIF9hYnNTdWJTZXRTaWduKG90aGVyLCBpc05lZ2F0aXZlKTsKICAgIH0KICAgIHJldHVybiBvdGhlci5fYWJzU3ViU2V0U2lnbih0aGlzLCAhaXNOZWdhdGl2ZSk7CiAgfQoKICAvLy8gTXVsdGlwbGllcyBgeERpZ2l0c1t4SW5kZXhdYCB3aXRoIGBtdWx0aXBsaWNhbmREaWdpdHNgIGFuZCBhZGRzIHRoZSByZXN1bHQKICAvLy8gdG8gYGFjY3VtdWxhdG9yRGlnaXRzYC4KICAvLy8KICAvLy8gVGhlIGBtdWx0aXBsaWNhbmREaWdpdHNgIGluIHRoZSByYW5nZSBgaWAgdG8gYGlgK2BuYC0xIGFyZSB0aGUKICAvLy8gbXVsdGlwbGljYW5kIGRpZ2l0cy4KICAvLy8KICAvLy8gVGhlIGBhY2N1bXVsYXRvckRpZ2l0c2AgaW4gdGhlIHJhbmdlIGBqYCB0byBgamArYG5gLTEgYXJlIHRoZSBhY2N1bXVsYXRvcgogIC8vLyBkaWdpdHMuCiAgLy8vCiAgLy8vIENvbmNyZXRlbHk6CiAgLy8vIGBhY2N1bXVsYXRvckRpZ2l0c1tqLi5qK25dICs9IHhEaWdpdHNbeEluZGV4XSAqIG1fZGlnaXRzW2kuLmkrbi0xXWAuCiAgLy8vIFJldHVybnMgMS4KICAvLy8KICAvLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW50cmluc2lmaWVkLiBJbnRyaW5zaWNzIG9uIDY0LWJpdCBwbGF0Zm9ybXMKICAvLy8gcHJvY2VzcyBkaWdpdCBwYWlycyBhdCBldmVuIGluZGljZXMgYW5kIHJldHVybnMgMi4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBzdGF0aWMgaW50IF9tdWxBZGQoCiAgICAgIFVpbnQzMkxpc3QgeERpZ2l0cywKICAgICAgaW50IHhJbmRleCwKICAgICAgVWludDMyTGlzdCBtdWx0aXBsaWNhbmREaWdpdHMsCiAgICAgIGludCBpLAogICAgICBVaW50MzJMaXN0IGFjY3VtdWxhdG9yRGlnaXRzLAogICAgICBpbnQgaiwKICAgICAgaW50IG4pIHsKICAgIGludCB4ID0geERpZ2l0c1t4SW5kZXhdOwogICAgaWYgKHggPT0gMCkgewogICAgICAvLyBOby1vcCBpZiB4IGlzIDAuCiAgICAgIHJldHVybiAxOwogICAgfQogICAgaW50IGNhcnJ5ID0gMDsKICAgIGludCB4bCA9IHggJiBfaGFsZkRpZ2l0TWFzazsKICAgIGludCB4aCA9IHggPj4gX2hhbGZEaWdpdEJpdHM7CiAgICB3aGlsZSAoLS1uID49IDApIHsKICAgICAgaW50IG1sID0gbXVsdGlwbGljYW5kRGlnaXRzW2ldICYgX2hhbGZEaWdpdE1hc2s7CiAgICAgIGludCBtaCA9IG11bHRpcGxpY2FuZERpZ2l0c1tpKytdID4+IF9oYWxmRGlnaXRCaXRzOwogICAgICBpbnQgcGggPSB4aCAqIG1sICsgbWggKiB4bDsKICAgICAgaW50IHBsID0geGwgKiBtbCArCiAgICAgICAgICAoKHBoICYgX2hhbGZEaWdpdE1hc2spIDw8IF9oYWxmRGlnaXRCaXRzKSArCiAgICAgICAgICBhY2N1bXVsYXRvckRpZ2l0c1tqXSArCiAgICAgICAgICBjYXJyeTsKICAgICAgY2FycnkgPSAocGwgPj4gX2RpZ2l0Qml0cykgKyAocGggPj4gX2hhbGZEaWdpdEJpdHMpICsgeGggKiBtaDsKICAgICAgYWNjdW11bGF0b3JEaWdpdHNbaisrXSA9IHBsICYgX2RpZ2l0TWFzazsKICAgIH0KICAgIHdoaWxlIChjYXJyeSAhPSAwKSB7CiAgICAgIGludCBsID0gYWNjdW11bGF0b3JEaWdpdHNbal0gKyBjYXJyeTsKICAgICAgY2FycnkgPSBsID4+IF9kaWdpdEJpdHM7CiAgICAgIGFjY3VtdWxhdG9yRGlnaXRzW2orK10gPSBsICYgX2RpZ2l0TWFzazsKICAgIH0KICAgIHJldHVybiAxOwogIH0KCiAgLy8vIE11bHRpcGxpZXMgYHhEaWdpdHNbaV1gIHdpdGggYHhEaWdpdHNgIGFuZCBhZGRzIHRoZSByZXN1bHQgdG8KICAvLy8gYGFjY3VtdWxhdG9yRGlnaXRzYC4KICAvLy8KICAvLy8gVGhlIGB4RGlnaXRzYCBpbiB0aGUgcmFuZ2UgYGlgIHRvIGB1c2VkYC0xIGFyZSB0aGUgbXVsdGlwbGljYW5kIGRpZ2l0cy4KICAvLy8KICAvLy8gVGhlIGBhY2N1bXVsYXRvckRpZ2l0c2AgaW4gdGhlIHJhbmdlIDIqYGlgIHRvIGBpYCtgdXNlZGAtMSBhcmUgdGhlCiAgLy8vIGFjY3VtdWxhdG9yIGRpZ2l0cy4KICAvLy8KICAvLy8gQ29uY3JldGVseToKICAvLy8gYGFjY3VtdWxhdG9yRGlnaXRzWzIqaS4uaSt1c2VkLTFdICs9IHhEaWdpdHNbaV0qeERpZ2l0c1tpXSArCiAgLy8vIDIqeERpZ2l0c1tpXSp4RGlnaXRzW2krMS4udXNlZC0xXWAuCiAgLy8vIFJldHVybnMgMS4KICAvLy8KICAvLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW50cmluc2lmaWVkLiBJbnRyaW5zaWNzIG9uIDY0LWJpdCBwbGF0Zm9ybXMKICAvLy8gcHJvY2VzcyBkaWdpdCBwYWlycyBhdCBldmVuIGluZGljZXMgYW5kIHJldHVybnMgMi4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBzdGF0aWMgaW50IF9zcXJBZGQoCiAgICAgIFVpbnQzMkxpc3QgeERpZ2l0cywgaW50IGksIFVpbnQzMkxpc3QgYWNjdWx1bWF0b3JEaWdpdHMsIGludCB1c2VkKSB7CiAgICBpbnQgeCA9IHhEaWdpdHNbaV07CiAgICBpZiAoeCA9PSAwKSByZXR1cm4gMTsKICAgIGludCBqID0gMiAqIGk7CiAgICBpbnQgY2FycnkgPSAwOwogICAgaW50IHhsID0geCAmIF9oYWxmRGlnaXRNYXNrOwogICAgaW50IHhoID0geCA+PiBfaGFsZkRpZ2l0Qml0czsKICAgIGludCBwaCA9IDIgKiB4aCAqIHhsOwogICAgaW50IHBsID0geGwgKiB4bCArCiAgICAgICAgKChwaCAmIF9oYWxmRGlnaXRNYXNrKSA8PCBfaGFsZkRpZ2l0Qml0cykgKwogICAgICAgIGFjY3VsdW1hdG9yRGlnaXRzW2pdOwogICAgY2FycnkgPSAocGwgPj4gX2RpZ2l0Qml0cykgKyAocGggPj4gX2hhbGZEaWdpdEJpdHMpICsgeGggKiB4aDsKICAgIGFjY3VsdW1hdG9yRGlnaXRzW2pdID0gcGwgJiBfZGlnaXRNYXNrOwogICAgeCA8PD0gMTsKICAgIHhsID0geCAmIF9oYWxmRGlnaXRNYXNrOwogICAgeGggPSB4ID4+IF9oYWxmRGlnaXRCaXRzOwogICAgaW50IG4gPSB1c2VkIC0gaSAtIDE7CiAgICBpbnQgayA9IGkgKyAxOwogICAgaisrOwogICAgd2hpbGUgKC0tbiA+PSAwKSB7CiAgICAgIGludCBsID0geERpZ2l0c1trXSAmIF9oYWxmRGlnaXRNYXNrOwogICAgICBpbnQgaCA9IHhEaWdpdHNbaysrXSA+PiBfaGFsZkRpZ2l0Qml0czsKICAgICAgaW50IHBoID0geGggKiBsICsgaCAqIHhsOwogICAgICBpbnQgcGwgPSB4bCAqIGwgKwogICAgICAgICAgKChwaCAmIF9oYWxmRGlnaXRNYXNrKSA8PCBfaGFsZkRpZ2l0Qml0cykgKwogICAgICAgICAgYWNjdWx1bWF0b3JEaWdpdHNbal0gKwogICAgICAgICAgY2Fycnk7CiAgICAgIGNhcnJ5ID0gKHBsID4+IF9kaWdpdEJpdHMpICsgKHBoID4+IF9oYWxmRGlnaXRCaXRzKSArIHhoICogaDsKICAgICAgYWNjdWx1bWF0b3JEaWdpdHNbaisrXSA9IHBsICYgX2RpZ2l0TWFzazsKICAgIH0KICAgIGNhcnJ5ICs9IGFjY3VsdW1hdG9yRGlnaXRzW2kgKyB1c2VkXTsKICAgIGlmIChjYXJyeSA+PSBfZGlnaXRCYXNlKSB7CiAgICAgIGFjY3VsdW1hdG9yRGlnaXRzW2kgKyB1c2VkXSA9IGNhcnJ5IC0gX2RpZ2l0QmFzZTsKICAgICAgYWNjdWx1bWF0b3JEaWdpdHNbaSArIHVzZWQgKyAxXSA9IDE7CiAgICB9IGVsc2UgewogICAgICBhY2N1bHVtYXRvckRpZ2l0c1tpICsgdXNlZF0gPSBjYXJyeTsKICAgIH0KICAgIHJldHVybiAxOwogIH0KCiAgLy8vIE11bHRpcGxpY2F0aW9uIG9wZXJhdG9yLgogIF9CaWdJbnRJbXBsIG9wZXJhdG9yICooQmlnSW50IGJpZ0ludCkgewogICAgX0JpZ0ludEltcGwgb3RoZXIgPSBiaWdJbnQ7CiAgICB2YXIgdXNlZCA9IF91c2VkOwogICAgdmFyIG90aGVyVXNlZCA9IG90aGVyLl91c2VkOwogICAgaWYgKHVzZWQgPT0gMCB8fCBvdGhlclVzZWQgPT0gMCkgewogICAgICByZXR1cm4gemVybzsKICAgIH0KICAgIHZhciByZXN1bHRVc2VkID0gdXNlZCArIG90aGVyVXNlZDsKICAgIHZhciBkaWdpdHMgPSBfZGlnaXRzOwogICAgdmFyIG90aGVyRGlnaXRzID0gb3RoZXIuX2RpZ2l0czsKICAgIHZhciByZXN1bHREaWdpdHMgPSBfbmV3RGlnaXRzKHJlc3VsdFVzZWQpOwogICAgdmFyIGkgPSAwOwogICAgd2hpbGUgKGkgPCBvdGhlclVzZWQpIHsKICAgICAgaSArPSBfbXVsQWRkKG90aGVyRGlnaXRzLCBpLCBkaWdpdHMsIDAsIHJlc3VsdERpZ2l0cywgaSwgdXNlZCk7CiAgICB9CiAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl8oCiAgICAgICAgX2lzTmVnYXRpdmUgIT0gb3RoZXIuX2lzTmVnYXRpdmUsIHJlc3VsdFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgfQoKICAvLyByZXN1bHREaWdpdHNbMC4ucmVzdWx0VXNlZC0xXSA9CiAgLy8gICAgIHhEaWdpdHNbMC4ueFVzZWQtMV0qb3RoZXJEaWdpdHNbMC4ub3RoZXJVc2VkLTFdLgogIC8vIFJldHVybnMgcmVzdWx0VXNlZCA9IHhVc2VkICsgb3RoZXJVc2VkLgogIHN0YXRpYyBpbnQgX211bERpZ2l0cyhVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCwgVWludDMyTGlzdCBvdGhlckRpZ2l0cywKICAgICAgaW50IG90aGVyVXNlZCwgVWludDMyTGlzdCByZXN1bHREaWdpdHMpIHsKICAgIHZhciByZXN1bHRVc2VkID0geFVzZWQgKyBvdGhlclVzZWQ7CiAgICB2YXIgaSA9IHJlc3VsdFVzZWQgKyAocmVzdWx0VXNlZCAmIDEpOwogICAgYXNzZXJ0KHJlc3VsdERpZ2l0cy5sZW5ndGggPj0gaSk7CiAgICB3aGlsZSAoLS1pID49IDApIHsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gMDsKICAgIH0KICAgIGkgPSAwOwogICAgd2hpbGUgKGkgPCBvdGhlclVzZWQpIHsKICAgICAgaSArPSBfbXVsQWRkKG90aGVyRGlnaXRzLCBpLCB4RGlnaXRzLCAwLCByZXN1bHREaWdpdHMsIGksIHhVc2VkKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRVc2VkOwogIH0KCiAgLy8gcmVzdWx0RGlnaXRzWzAuLnJlc3VsdFVzZWQtMV0gPSB4RGlnaXRzWzAuLnhVc2VkLTFdXjIuCiAgLy8gUmV0dXJucyByZXN1bHRVc2VkID0gMip4VXNlZC4KICBzdGF0aWMgaW50IF9zcXJEaWdpdHMoCiAgICAgIFVpbnQzMkxpc3QgeERpZ2l0cywgaW50IHhVc2VkLCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgdmFyIHJlc3VsdFVzZWQgPSAyICogeFVzZWQ7CiAgICBhc3NlcnQocmVzdWx0RGlnaXRzLmxlbmd0aCA+PSByZXN1bHRVc2VkKTsKICAgIC8vIFNpbmNlIHJlc3VsdFVzZWQgaXMgZXZlbiwgbm8gbmVlZCBmb3IgYSBsZWFkaW5nIHplcm8gZm9yCiAgICAvLyA2NC1iaXQgcHJvY2Vzc2luZy4KICAgIHZhciBpID0gcmVzdWx0VXNlZDsKICAgIHdoaWxlICgtLWkgPj0gMCkgewogICAgICByZXN1bHREaWdpdHNbaV0gPSAwOwogICAgfQogICAgaSA9IDA7CiAgICB3aGlsZSAoaSA8IHhVc2VkIC0gMSkgewogICAgICBpICs9IF9zcXJBZGQoeERpZ2l0cywgaSwgcmVzdWx0RGlnaXRzLCB4VXNlZCk7CiAgICB9CiAgICAvLyBUaGUgbGFzdCBzdGVwIGlzIGFscmVhZHkgZG9uZSBpZiBkaWdpdCBwYWlycyB3ZXJlIHByb2Nlc3NlZCBhYm92ZS4KICAgIGlmIChpIDwgeFVzZWQpIHsKICAgICAgX211bEFkZCh4RGlnaXRzLCBpLCB4RGlnaXRzLCBpLCByZXN1bHREaWdpdHMsIDIgKiBpLCAxKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRVc2VkOwogIH0KCiAgLy8gSW5kaWNlcyBvZiB0aGUgYXJndW1lbnRzIG9mIF9lc3RpbWF0ZVF1b3RpZW50RGlnaXQuCiAgLy8gRm9yIDY0LWJpdCBwcm9jZXNzaW5nIGJ5IGludHJpbnNpY3Mgb24gNjQtYml0IHBsYXRmb3JtcywgdGhlIHRvcCBkaWdpdCBwYWlyCiAgLy8gb2YgdGhlIGRpdmlzb3IgaXMgcHJvdmlkZWQgaW4gdGhlIGFyZ3MgYXJyYXksIGFuZCBhIDY0LWJpdCBlc3RpbWF0ZWQKICAvLyBxdW90aWVudCBpcyByZXR1cm5lZC4gSG93ZXZlciwgb24gMzItYml0IHBsYXRmb3JtcywgdGhlIGxvdyAzMi1iaXQgZGlnaXQgaXMKICAvLyBpZ25vcmVkIGFuZCBvbmx5IG9uZSAzMi1iaXQgZGlnaXQgaXMgcmV0dXJuZWQgYXMgdGhlIGVzdGltYXRlZCBxdW90aWVudC4KICBzdGF0aWMgY29uc3QgaW50IF9kaXZpc29yTG93VG9wRGlnaXQgPSAwOyAvLyBMb3cgZGlnaXQgb2YgdG9wIHBhaXIgb2YgZGl2aXNvci4KICBzdGF0aWMgY29uc3QgaW50IF9kaXZpc29yVG9wRGlnaXQgPSAxOyAvLyBUb3AgZGlnaXQgb2YgZGl2aXNvci4KICBzdGF0aWMgY29uc3QgaW50IF9xdW90aWVudERpZ2l0ID0gMjsgLy8gRXN0aW1hdGVkIHF1b3RpZW50LgogIHN0YXRpYyBjb25zdCBpbnQgX3F1b3RpZW50SGlnaERpZ2l0ID0gMzsgLy8gSGlnaCBkaWdpdCBvZiBlc3RpbWF0ZWQgcXVvdGllbnQuCgogIC8vLyBFc3RpbWF0ZSBgYXJnc1tfcXVvdGllbnREaWdpdF0gPSBkaWdpdHNbaS0xLi5pXSB+LyBhcmdzW19kaXZpc29yVG9wRGlnaXRdYAogIC8vLyBSZXR1cm5zIDEuCiAgLy8vCiAgLy8vIE5vdGU6IFRoaXMgZnVuY3Rpb24gbWF5IGJlIGludHJpbnNpZmllZC4gSW50cmluc2ljcyBvbiA2NC1iaXQgcGxhdGZvcm1zCiAgLy8vIHByb2Nlc3MgYSBkaWdpdCBwYWlyIChpIGFsd2F5cyBvZGQpOgogIC8vLyBFc3RpbWF0ZSBgYXJnc1tfcXVvdGllbnREaWdpdC4uX3F1b3RpZW50SGlnaERpZ2l0XSA9IGRpZ2l0c1tpLTMuLmldIH4vCiAgLy8vIGFyZ3NbX2Rpdmlzb3JMb3dUb3BEaWdpdC4uX2Rpdmlzb3JUb3BEaWdpdF1gLgogIC8vLyBSZXR1cm5zIDIuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgc3RhdGljIGludCBfZXN0aW1hdGVRdW90aWVudERpZ2l0KFVpbnQzMkxpc3QgYXJncywgVWludDMyTGlzdCBkaWdpdHMsIGludCBpKSB7CiAgICAvLyBWZXJpZnkgdGhhdCBkaWdpdCBwYWlycyBhcmUgYWNjZXNzaWJsZSBmb3IgNjQtYml0IHByb2Nlc3NpbmcuCiAgICBhc3NlcnQoZGlnaXRzLmxlbmd0aCA+PSA0KTsKICAgIGlmIChkaWdpdHNbaV0gPT0gYXJnc1tfZGl2aXNvclRvcERpZ2l0XSkgewogICAgICBhcmdzW19xdW90aWVudERpZ2l0XSA9IF9kaWdpdE1hc2s7CiAgICB9IGVsc2UgewogICAgICAvLyBDaG9wIG9mZiBvbmUgYml0LCBzaW5jZSBhIE1pbnQgY2Fubm90IGhvbGQgMiBkaWdpdHMuCiAgICAgIHZhciBxdW90aWVudERpZ2l0ID0KICAgICAgICAgICgoZGlnaXRzW2ldIDw8IChfZGlnaXRCaXRzIC0gMSkpIHwgKGRpZ2l0c1tpIC0gMV0gPj4gMSkpIH4vCiAgICAgICAgICAgICAgKGFyZ3NbX2Rpdmlzb3JUb3BEaWdpdF0gPj4gMSk7CiAgICAgIGlmIChxdW90aWVudERpZ2l0ID4gX2RpZ2l0TWFzaykgewogICAgICAgIGFyZ3NbX3F1b3RpZW50RGlnaXRdID0gX2RpZ2l0TWFzazsKICAgICAgfSBlbHNlIHsKICAgICAgICBhcmdzW19xdW90aWVudERpZ2l0XSA9IHF1b3RpZW50RGlnaXQ7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAxOwogIH0KCiAgLy8vIFJldHVybnMgYHRydW5jKHRoaXMgLyBvdGhlcilgLCB3aXRoIGBvdGhlciAhPSAwYC4KICBfQmlnSW50SW1wbCBfZGl2KEJpZ0ludCBiaWdJbnQpIHsKICAgIF9CaWdJbnRJbXBsIG90aGVyID0gYmlnSW50OwogICAgYXNzZXJ0KG90aGVyLl91c2VkID4gMCk7CiAgICBpZiAoX3VzZWQgPCBvdGhlci5fdXNlZCkgewogICAgICByZXR1cm4gemVybzsKICAgIH0KICAgIF9kaXZSZW0ob3RoZXIpOwogICAgLy8gUmV0dXJuIHF1b3RpZW50LCBpLmUuCiAgICAvLyBfbGFzdFF1b1JlbV9kaWdpdHNbX2xhc3RSZW1fdXNlZC4uX2xhc3RRdW9SZW1fdXNlZC0xXSB3aXRoIHByb3BlciBzaWduLgogICAgdmFyIGxhc3RRdW9fdXNlZCA9IF9sYXN0UXVvUmVtVXNlZCAtIF9sYXN0UmVtVXNlZDsKICAgIHZhciBxdW9fZGlnaXRzID0gX2Nsb25lRGlnaXRzKAogICAgICAgIF9sYXN0UXVvUmVtRGlnaXRzLCBfbGFzdFJlbVVzZWQsIF9sYXN0UXVvUmVtVXNlZCwgbGFzdFF1b191c2VkKTsKICAgIHZhciBxdW8gPSBuZXcgX0JpZ0ludEltcGwuXyhmYWxzZSwgbGFzdFF1b191c2VkLCBxdW9fZGlnaXRzKTsKICAgIGlmICgoX2lzTmVnYXRpdmUgIT0gb3RoZXIuX2lzTmVnYXRpdmUpICYmIChxdW8uX3VzZWQgPiAwKSkgewogICAgICBxdW8gPSAtcXVvOwogICAgfQogICAgcmV0dXJuIHF1bzsKICB9CgogIC8vLyBSZXR1cm5zIGB0aGlzIC0gb3RoZXIgKiB0cnVuYyh0aGlzIC8gb3RoZXIpYCwgd2l0aCBgb3RoZXIgIT0gMGAuCiAgX0JpZ0ludEltcGwgX3JlbShCaWdJbnQgYmlnSW50KSB7CiAgICBfQmlnSW50SW1wbCBvdGhlciA9IGJpZ0ludDsKICAgIGFzc2VydChvdGhlci5fdXNlZCA+IDApOwogICAgaWYgKF91c2VkIDwgb3RoZXIuX3VzZWQpIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICBfZGl2UmVtKG90aGVyKTsKICAgIC8vIFJldHVybiByZW1haW5kZXIsIGkuZS4KICAgIC8vIGRlbm9ybWFsaXplZCBfbGFzdFF1b1JlbV9kaWdpdHNbMC4uX2xhc3RSZW1fdXNlZC0xXSB3aXRoIHByb3BlciBzaWduLgogICAgdmFyIHJlbURpZ2l0cyA9CiAgICAgICAgX2Nsb25lRGlnaXRzKF9sYXN0UXVvUmVtRGlnaXRzLCAwLCBfbGFzdFJlbVVzZWQsIF9sYXN0UmVtVXNlZCk7CiAgICB2YXIgcmVtID0gbmV3IF9CaWdJbnRJbXBsLl8oZmFsc2UsIF9sYXN0UmVtVXNlZCwgcmVtRGlnaXRzKTsKICAgIGlmIChfbGFzdFJlbV9uc2ggPiAwKSB7CiAgICAgIHJlbSA9IHJlbSA+PiBfbGFzdFJlbV9uc2g7IC8vIERlbm9ybWFsaXplIHJlbWFpbmRlci4KICAgIH0KICAgIGlmIChfaXNOZWdhdGl2ZSAmJiAocmVtLl91c2VkID4gMCkpIHsKICAgICAgcmVtID0gLXJlbTsKICAgIH0KICAgIHJldHVybiByZW07CiAgfQoKICAvLy8gQ29tcHV0ZXMgdGhpcyB+LyBvdGhlciBhbmQgdGhpcy5yZW1haW5kZXIob3RoZXIpLgogIC8vLwogIC8vLyBTdG9yZXMgdGhlIHJlc3VsdCBpbiBbX2xhc3RRdW9SZW1EaWdpdHNdLCBbX2xhc3RRdW9SZW1Vc2VkXSBhbmQKICAvLy8gW19sYXN0UmVtVXNlZF0uIFRoZSBbX2xhc3RRdW9SZW1EaWdpdHNdIGNvbnRhaW5zIHRoZSBkaWdpdHMgb2YgKmJvdGgqLCB0aGUKICAvLy8gcXVvdGllbnQgYW5kIHRoZSByZW1haW5kZXIuCiAgLy8vCiAgLy8vIENhY2hlcyB0aGUgaW5wdXQgdG8gYXZvaWQgZG9pbmcgdGhlIHdvcmsgYWdhaW4gd2hlbiB1c2VycyB3cml0ZQogIC8vLyBgYSB+LyBiYCBmb2xsb3dlZCBieSBhIGBhICUgYmAuCiAgdm9pZCBfZGl2UmVtKF9CaWdJbnRJbXBsIG90aGVyKSB7CiAgICAvLyBDaGVjayBpZiByZXN1bHQgaXMgYWxyZWFkeSBjYWNoZWQuCiAgICBpZiAoKHRoaXMuX3VzZWQgPT0gX2xhc3REaXZpZGVuZFVzZWQpICYmCiAgICAgICAgKG90aGVyLl91c2VkID09IF9sYXN0RGl2aXNvclVzZWQpICYmCiAgICAgICAgaWRlbnRpY2FsKHRoaXMuX2RpZ2l0cywgX2xhc3REaXZpZGVuZERpZ2l0cykgJiYKICAgICAgICBpZGVudGljYWwob3RoZXIuX2RpZ2l0cywgX2xhc3REaXZpc29yRGlnaXRzKSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBhc3NlcnQoX3VzZWQgPj0gb3RoZXIuX3VzZWQpOwoKICAgIHZhciBuc2ggPSBfZGlnaXRCaXRzIC0gb3RoZXIuX2RpZ2l0c1tvdGhlci5fdXNlZCAtIDFdLmJpdExlbmd0aDsKICAgIC8vIEZvciA2NC1iaXQgcHJvY2Vzc2luZywgbWFrZSBzdXJlIG90aGVyIGhhcyBhbiBldmVuIG51bWJlciBvZiBkaWdpdHMuCiAgICBpZiAob3RoZXIuX3VzZWQuaXNPZGQpIHsKICAgICAgbnNoICs9IF9kaWdpdEJpdHM7CiAgICB9CiAgICAvLyBDb25jYXRlbmF0ZWQgcG9zaXRpdmUgcXVvdGllbnQgYW5kIG5vcm1hbGl6ZWQgcG9zaXRpdmUgcmVtYWluZGVyLgogICAgLy8gVGhlIHJlc3VsdERpZ2l0cyBjYW4gaGF2ZSBhdCBtb3N0IG9uZSBtb3JlIGRpZ2l0IHRoYW4gdGhlIGRpdmlkZW5kLgogICAgVWludDMyTGlzdCByZXN1bHREaWdpdHM7CiAgICBpbnQgcmVzdWx0VXNlZDsKICAgIC8vIE5vcm1hbGl6ZWQgcG9zaXRpdmUgZGl2aXNvciAocmVmZXJyZWQgdG8gYXMgJ3knKS4KICAgIC8vIFRoZSBub3JtYWxpemVkIGRpdmlzb3IgaGFzIHRoZSBtb3N0LXNpZ25pZmljYW50IGJpdCBvZiBpdHMgbW9zdAogICAgLy8gc2lnbmlmaWNhbnQgZGlnaXQgc2V0LgogICAgLy8gVGhpcyBtYWtlcyBlc3RpbWF0aW5nIHRoZSBxdW90aWVudCBlYXNpZXIuCiAgICBVaW50MzJMaXN0IHlEaWdpdHM7CiAgICBpbnQgeVVzZWQ7CiAgICBpZiAobnNoID4gMCkgewogICAgICAvLyBFeHRyYSBkaWdpdHMgZm9yIG5vcm1hbGl6YXRpb24sIGFsc28gdXNlZCBmb3IgcG9zc2libGUgX211bEFkZCBjYXJyeS4KICAgICAgdmFyIG51bUV4dHJhRGlnaXRzID0gKG5zaCArIF9kaWdpdEJpdHMgLSAxKSB+LyBfZGlnaXRCaXRzICsgMTsKICAgICAgeURpZ2l0cyA9IF9uZXdEaWdpdHMob3RoZXIuX3VzZWQgKyBudW1FeHRyYURpZ2l0cyk7CiAgICAgIHlVc2VkID0gX2xTaGlmdERpZ2l0cyhvdGhlci5fZGlnaXRzLCBvdGhlci5fdXNlZCwgbnNoLCB5RGlnaXRzKTsKICAgICAgcmVzdWx0RGlnaXRzID0gX25ld0RpZ2l0cyhfdXNlZCArIG51bUV4dHJhRGlnaXRzKTsKICAgICAgcmVzdWx0VXNlZCA9IF9sU2hpZnREaWdpdHMoX2RpZ2l0cywgX3VzZWQsIG5zaCwgcmVzdWx0RGlnaXRzKTsKICAgIH0gZWxzZSB7CiAgICAgIHlEaWdpdHMgPSBvdGhlci5fZGlnaXRzOwogICAgICB5VXNlZCA9IG90aGVyLl91c2VkOwogICAgICAvLyBFeHRyYSBkaWdpdCB0byBob2xkIHBvc3NpYmxlIF9tdWxBZGQgY2FycnkuCiAgICAgIHJlc3VsdERpZ2l0cyA9IF9jbG9uZURpZ2l0cyhfZGlnaXRzLCAwLCBfdXNlZCwgX3VzZWQgKyAxKTsKICAgICAgcmVzdWx0VXNlZCA9IF91c2VkOwogICAgfQogICAgVWludDMyTGlzdCBhcmdzID0gX25ld0RpZ2l0cyg0KTsKICAgIGFyZ3NbX2Rpdmlzb3JMb3dUb3BEaWdpdF0gPSB5RGlnaXRzW3lVc2VkIC0gMl07CiAgICBhcmdzW19kaXZpc29yVG9wRGlnaXRdID0geURpZ2l0c1t5VXNlZCAtIDFdOwogICAgLy8gRm9yIDY0LWJpdCBwcm9jZXNzaW5nLCBtYWtlIHN1cmUgeVVzZWQsIGksIGFuZCBqIGFyZSBldmVuLgogICAgYXNzZXJ0KHlVc2VkLmlzRXZlbik7CiAgICB2YXIgaSA9IHJlc3VsdFVzZWQgKyAocmVzdWx0VXNlZCAmIDEpOwogICAgdmFyIGogPSBpIC0geVVzZWQ7CiAgICAvLyB0bXBEaWdpdHMgaXMgYSB0ZW1wb3JhcnkgYXJyYXkgb2YgaSAoZXZlbiByZXN1bHRVc2VkKSBkaWdpdHMuCiAgICB2YXIgdG1wRGlnaXRzID0gX25ld0RpZ2l0cyhpKTsKICAgIHZhciB0bXBVc2VkID0gX2RsU2hpZnREaWdpdHMoeURpZ2l0cywgeVVzZWQsIGosIHRtcERpZ2l0cyk7CiAgICAvLyBFeHBsaWNpdCBmaXJzdCBkaXZpc2lvbiBzdGVwIGluIGNhc2Ugbm9ybWFsaXplZCBkaXZpZGVuZCBpcyBsYXJnZXIgb3IKICAgIC8vIGVxdWFsIHRvIHNoaWZ0ZWQgbm9ybWFsaXplZCBkaXZpc29yLgogICAgaWYgKF9jb21wYXJlRGlnaXRzKHJlc3VsdERpZ2l0cywgcmVzdWx0VXNlZCwgdG1wRGlnaXRzLCB0bXBVc2VkKSA+PSAwKSB7CiAgICAgIGFzc2VydChpID09IHJlc3VsdFVzZWQpOwogICAgICByZXN1bHREaWdpdHNbcmVzdWx0VXNlZCsrXSA9IDE7IC8vIFF1b3RpZW50ID0gMS4KICAgICAgLy8gU3VidHJhY3QgZGl2aXNvciBmcm9tIHJlbWFpbmRlci4KICAgICAgX2Fic1N1YihyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQsIHRtcERpZ2l0cywgdG1wVXNlZCwgcmVzdWx0RGlnaXRzKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIEFjY291bnQgZm9yIHBvc3NpYmxlIGNhcnJ5IGluIF9tdWxBZGQgc3RlcC4KICAgICAgcmVzdWx0RGlnaXRzW3Jlc3VsdFVzZWQrK10gPSAwOwogICAgfQogICAgaWYgKHJlc3VsdFVzZWQuaXNPZGQpIHsKICAgICAgcmVzdWx0RGlnaXRzW3Jlc3VsdFVzZWRdID0gMDsgLy8gTGVhZGluZyB6ZXJvIGZvciA2NC1iaXQgcHJvY2Vzc2luZy4KICAgIH0KICAgIC8vIE5lZ2F0ZSB5IHNvIHdlIGNhbiBsYXRlciB1c2UgX211bEFkZCBpbnN0ZWFkIG9mIG5vbi1leGlzdGVudCBfbXVsU3ViLgogICAgdmFyIG55RGlnaXRzID0gX25ld0RpZ2l0cyh5VXNlZCArIDIpOwogICAgbnlEaWdpdHNbeVVzZWRdID0gMTsKICAgIF9hYnNTdWIobnlEaWdpdHMsIHlVc2VkICsgMSwgeURpZ2l0cywgeVVzZWQsIG55RGlnaXRzKTsKICAgIC8vIG55RGlnaXRzIGlzIHJlYWQtb25seSBhbmQgaGFzIHlVc2VkIGRpZ2l0cyAocG9zc2libHkgaW5jbHVkaW5nIHNldmVyYWwKICAgIC8vIGxlYWRpbmcgemVyb3MpIHBsdXMgYSBsZWFkaW5nIHplcm8gZm9yIDY0LWJpdCBwcm9jZXNzaW5nLgogICAgLy8gcmVzdWx0RGlnaXRzIGlzIG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24uCiAgICAvLyByZXN1bHREaWdpdHNbMC4ueVVzZWQtMV0gaXMgdGhlIGN1cnJlbnQgcmVtYWluZGVyLgogICAgLy8gcmVzdWx0RGlnaXRzW3lVc2VkLi5yZXN1bHRVc2VkLTFdIGlzIHRoZSBjdXJyZW50IHF1b3RpZW50LgogICAgLS1pOwogICAgd2hpbGUgKGogPiAwKSB7CiAgICAgIHZhciBkMCA9IF9lc3RpbWF0ZVF1b3RpZW50RGlnaXQoYXJncywgcmVzdWx0RGlnaXRzLCBpKTsKICAgICAgaiAtPSBkMDsKICAgICAgdmFyIGQxID0KICAgICAgICAgIF9tdWxBZGQoYXJncywgX3F1b3RpZW50RGlnaXQsIG55RGlnaXRzLCAwLCByZXN1bHREaWdpdHMsIGosIHlVc2VkKTsKICAgICAgLy8gX2VzdGltYXRlUXVvdGllbnREaWdpdCBhbmQgX211bEFkZCBtdXN0IGFncmVlIG9uIHRoZSBudW1iZXIgb2YgZGlnaXRzCiAgICAgIC8vIHRvIHByb2Nlc3MuCiAgICAgIGFzc2VydChkMCA9PSBkMSk7CiAgICAgIGlmIChkMCA9PSAxKSB7CiAgICAgICAgaWYgKHJlc3VsdERpZ2l0c1tpXSA8IGFyZ3NbX3F1b3RpZW50RGlnaXRdKSB7CiAgICAgICAgICAvLyBSZXVzaW5nIHRoZSBhbHJlYWR5IGV4aXN0aW5nIHRtcERpZ2l0cyBhcnJheS4KICAgICAgICAgIHZhciB0bXBVc2VkID0gX2RsU2hpZnREaWdpdHMobnlEaWdpdHMsIHlVc2VkLCBqLCB0bXBEaWdpdHMpOwogICAgICAgICAgX2Fic1N1YihyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQsIHRtcERpZ2l0cywgdG1wVXNlZCwgcmVzdWx0RGlnaXRzKTsKICAgICAgICAgIHdoaWxlIChyZXN1bHREaWdpdHNbaV0gPCAtLWFyZ3NbX3F1b3RpZW50RGlnaXRdKSB7CiAgICAgICAgICAgIF9hYnNTdWIocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkLCB0bXBEaWdpdHMsIHRtcFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGFzc2VydChkMCA9PSAyKTsKICAgICAgICBhc3NlcnQocmVzdWx0RGlnaXRzW2ldIDw9IGFyZ3NbX3F1b3RpZW50SGlnaERpZ2l0XSk7CiAgICAgICAgaWYgKHJlc3VsdERpZ2l0c1tpXSA8IGFyZ3NbX3F1b3RpZW50SGlnaERpZ2l0XSB8fAogICAgICAgICAgICByZXN1bHREaWdpdHNbaSAtIDFdIDwgYXJnc1tfcXVvdGllbnREaWdpdF0pIHsKICAgICAgICAgIC8vIFJldXNpbmcgdGhlIGFscmVhZHkgZXhpc3RpbmcgdG1wRGlnaXRzIGFycmF5LgogICAgICAgICAgdmFyIHRtcFVzZWQgPSBfZGxTaGlmdERpZ2l0cyhueURpZ2l0cywgeVVzZWQsIGosIHRtcERpZ2l0cyk7CiAgICAgICAgICBfYWJzU3ViKHJlc3VsdERpZ2l0cywgcmVzdWx0VXNlZCwgdG1wRGlnaXRzLCB0bXBVc2VkLCByZXN1bHREaWdpdHMpOwogICAgICAgICAgaWYgKGFyZ3NbX3F1b3RpZW50RGlnaXRdID09IDApIHsKICAgICAgICAgICAgLS1hcmdzW19xdW90aWVudEhpZ2hEaWdpdF07CiAgICAgICAgICB9CiAgICAgICAgICAtLWFyZ3NbX3F1b3RpZW50RGlnaXRdOwogICAgICAgICAgYXNzZXJ0KHJlc3VsdERpZ2l0c1tpXSA8PSBhcmdzW19xdW90aWVudEhpZ2hEaWdpdF0pOwogICAgICAgICAgd2hpbGUgKHJlc3VsdERpZ2l0c1tpXSA8IGFyZ3NbX3F1b3RpZW50SGlnaERpZ2l0XSB8fAogICAgICAgICAgICAgIHJlc3VsdERpZ2l0c1tpIC0gMV0gPCBhcmdzW19xdW90aWVudERpZ2l0XSkgewogICAgICAgICAgICBfYWJzU3ViKHJlc3VsdERpZ2l0cywgcmVzdWx0VXNlZCwgdG1wRGlnaXRzLCB0bXBVc2VkLCByZXN1bHREaWdpdHMpOwogICAgICAgICAgICBpZiAoYXJnc1tfcXVvdGllbnREaWdpdF0gPT0gMCkgewogICAgICAgICAgICAgIC0tYXJnc1tfcXVvdGllbnRIaWdoRGlnaXRdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC0tYXJnc1tfcXVvdGllbnREaWdpdF07CiAgICAgICAgICAgIGFzc2VydChyZXN1bHREaWdpdHNbaV0gPD0gYXJnc1tfcXVvdGllbnRIaWdoRGlnaXRdKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaSAtPSBkMDsKICAgIH0KICAgIC8vIENhY2hlIHJlc3VsdC4KICAgIF9sYXN0RGl2aWRlbmREaWdpdHMgPSBfZGlnaXRzOwogICAgX2xhc3REaXZpZGVuZFVzZWQgPSBfdXNlZDsKICAgIF9sYXN0RGl2aXNvckRpZ2l0cyA9IG90aGVyLl9kaWdpdHM7CiAgICBfbGFzdERpdmlzb3JVc2VkID0gb3RoZXIuX3VzZWQ7CiAgICBfbGFzdFF1b1JlbURpZ2l0cyA9IHJlc3VsdERpZ2l0czsKICAgIF9sYXN0UXVvUmVtVXNlZCA9IHJlc3VsdFVzZWQ7CiAgICBfbGFzdFJlbVVzZWQgPSB5VXNlZDsKICAgIF9sYXN0UmVtX25zaCA9IG5zaDsKICB9CgogIC8vIEN1c3RvbWl6ZWQgdmVyc2lvbiBvZiBfcmVtKCkgbWluaW1pemluZyBhbGxvY2F0aW9ucyBmb3IgdXNlIGluIHJlZHVjdGlvbi4KICAvLyBJbnB1dDoKICAvLyAgIHhEaWdpdHNbMC4ueFVzZWQtMV06IHBvc2l0aXZlIGRpdmlkZW5kLgogIC8vICAgeURpZ2l0c1swLi55VXNlZC0xXTogbm9ybWFsaXplZCBwb3NpdGl2ZSBkaXZpc29yLgogIC8vICAgbnlEaWdpdHNbMC4ueVVzZWQtMV06IG5lZ2F0ZWQgeURpZ2l0cy4KICAvLyAgIG5zaDogbm9ybWFsaXphdGlvbiBzaGlmdCBhbW91bnQuCiAgLy8gICBhcmdzOiB0b3AgeSBkaWdpdChzKSBhbmQgcGxhY2UgaG9sZGVyIGZvciBlc3RpbWF0ZWQgcXVvdGllbnQgZGlnaXQocykuCiAgLy8gICB0bXBEaWdpdHM6IHRlbXAgYXJyYXkgb2YgMip5VXNlZCBkaWdpdHMuCiAgLy8gICByZXN1bHREaWdpdHM6IHJlc3VsdCBkaWdpdHMgYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIHRlbXBvcmFyaWx5IGhvbGQKICAvLyAgICAgICAgICAgICAgICAgY29uY2F0ZW5hdGVkIHF1b3RpZW50IGFuZCBub3JtYWxpemVkIHJlbWFpbmRlci4KICAvLyBPdXRwdXQ6CiAgLy8gICByZXN1bHREaWdpdHNbMC4ucmVzdWx0VXNlZC0xXTogcG9zaXRpdmUgcmVtYWluZGVyLgogIC8vIFJldHVybnMgcmVzdWx0VXNlZC4KICBzdGF0aWMgaW50IF9yZW1EaWdpdHMoCiAgICAgIFVpbnQzMkxpc3QgeERpZ2l0cywKICAgICAgaW50IHhVc2VkLAogICAgICBVaW50MzJMaXN0IHlEaWdpdHMsCiAgICAgIGludCB5VXNlZCwKICAgICAgVWludDMyTGlzdCBueURpZ2l0cywKICAgICAgaW50IG5zaCwKICAgICAgVWludDMyTGlzdCBhcmdzLAogICAgICBVaW50MzJMaXN0IHRtcERpZ2l0cywKICAgICAgVWludDMyTGlzdCByZXN1bHREaWdpdHMpIHsKICAgIC8vIEluaXRpYWxpemUgcmVzdWx0RGlnaXRzIHRvIG5vcm1hbGl6ZWQgcG9zaXRpdmUgZGl2aWRlbmQuCiAgICB2YXIgcmVzdWx0VXNlZCA9IF9sU2hpZnREaWdpdHMoeERpZ2l0cywgeFVzZWQsIG5zaCwgcmVzdWx0RGlnaXRzKTsKICAgIC8vIEZvciA2NC1iaXQgcHJvY2Vzc2luZywgbWFrZSBzdXJlIHlVc2VkLCBpLCBhbmQgaiBhcmUgZXZlbi4KICAgIGFzc2VydCh5VXNlZC5pc0V2ZW4pOwogICAgdmFyIGkgPSByZXN1bHRVc2VkICsgKHJlc3VsdFVzZWQgJiAxKTsKICAgIHZhciBqID0gaSAtIHlVc2VkOwogICAgdmFyIHRtcFVzZWQgPSBfZGxTaGlmdERpZ2l0cyh5RGlnaXRzLCB5VXNlZCwgaiwgdG1wRGlnaXRzKTsKICAgIC8vIEV4cGxpY2l0IGZpcnN0IGRpdmlzaW9uIHN0ZXAgaW4gY2FzZSBub3JtYWxpemVkIGRpdmlkZW5kIGlzIGxhcmdlciBvcgogICAgLy8gZXF1YWwgdG8gc2hpZnRlZCBub3JtYWxpemVkIGRpdmlzb3IuCiAgICBpZiAoX2NvbXBhcmVEaWdpdHMocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkLCB0bXBEaWdpdHMsIHRtcFVzZWQpID49IDApIHsKICAgICAgYXNzZXJ0KGkgPT0gcmVzdWx0VXNlZCk7CiAgICAgIHJlc3VsdERpZ2l0c1tyZXN1bHRVc2VkKytdID0gMTsgLy8gUXVvdGllbnQgPSAxLgogICAgICAvLyBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcmVtYWluZGVyLgogICAgICBfYWJzU3ViKHJlc3VsdERpZ2l0cywgcmVzdWx0VXNlZCwgdG1wRGlnaXRzLCB0bXBVc2VkLCByZXN1bHREaWdpdHMpOwogICAgfSBlbHNlIHsKICAgICAgLy8gQWNjb3VudCBmb3IgcG9zc2libGUgY2FycnkgaW4gX211bEFkZCBzdGVwLgogICAgICByZXN1bHREaWdpdHNbcmVzdWx0VXNlZCsrXSA9IDA7CiAgICB9CiAgICBpZiAocmVzdWx0VXNlZC5pc09kZCkgewogICAgICByZXN1bHREaWdpdHNbcmVzdWx0VXNlZF0gPSAwOyAvLyBMZWFkaW5nIHplcm8gZm9yIDY0LWJpdCBwcm9jZXNzaW5nLgogICAgfQogICAgLy8gTmVnYXRlZCB5RGlnaXRzIHBhc3NlZCBpbiBueURpZ2l0cyBhbGxvdyB0aGUgdXNlIG9mIF9tdWxBZGQgaW5zdGVhZCBvZgogICAgLy8gdW5pbXBsZW1lbnRlZCBfbXVsU3ViLgogICAgLy8gbnlEaWdpdHMgaXMgcmVhZC1vbmx5IGFuZCBoYXMgeVVzZWQgZGlnaXRzIChwb3NzaWJseSBpbmNsdWRpbmcgc2V2ZXJhbAogICAgLy8gbGVhZGluZyB6ZXJvcykgcGx1cyBhIGxlYWRpbmcgemVybyBmb3IgNjQtYml0IHByb2Nlc3NpbmcuCiAgICAvLyByZXN1bHREaWdpdHMgaXMgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbi4KICAgIC8vIHJlc3VsdERpZ2l0c1swLi55VXNlZC0xXSBpcyB0aGUgY3VycmVudCByZW1haW5kZXIuCiAgICAvLyByZXN1bHREaWdpdHNbeVVzZWQuLnJlc3VsdFVzZWQtMV0gaXMgdGhlIGN1cnJlbnQgcXVvdGllbnQuCiAgICAtLWk7CiAgICB3aGlsZSAoaiA+IDApIHsKICAgICAgdmFyIGQwID0gX2VzdGltYXRlUXVvdGllbnREaWdpdChhcmdzLCByZXN1bHREaWdpdHMsIGkpOwogICAgICBqIC09IGQwOwogICAgICB2YXIgZDEgPQogICAgICAgICAgX211bEFkZChhcmdzLCBfcXVvdGllbnREaWdpdCwgbnlEaWdpdHMsIDAsIHJlc3VsdERpZ2l0cywgaiwgeVVzZWQpOwogICAgICAvLyBfZXN0aW1hdGVRdW90aWVudERpZ2l0IGFuZCBfbXVsQWRkIG11c3QgYWdyZWUgb24gdGhlIG51bWJlciBvZiBkaWdpdHMKICAgICAgLy8gdG8gcHJvY2Vzcy4KICAgICAgYXNzZXJ0KGQwID09IGQxKTsKICAgICAgaWYgKGQwID09IDEpIHsKICAgICAgICBpZiAocmVzdWx0RGlnaXRzW2ldIDwgYXJnc1tfcXVvdGllbnREaWdpdF0pIHsKICAgICAgICAgIHZhciB0bXBVc2VkID0gX2RsU2hpZnREaWdpdHMobnlEaWdpdHMsIHlVc2VkLCBqLCB0bXBEaWdpdHMpOwogICAgICAgICAgX2Fic1N1YihyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQsIHRtcERpZ2l0cywgdG1wVXNlZCwgcmVzdWx0RGlnaXRzKTsKICAgICAgICAgIHdoaWxlIChyZXN1bHREaWdpdHNbaV0gPCAtLWFyZ3NbX3F1b3RpZW50RGlnaXRdKSB7CiAgICAgICAgICAgIF9hYnNTdWIocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkLCB0bXBEaWdpdHMsIHRtcFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGFzc2VydChkMCA9PSAyKTsKICAgICAgICBhc3NlcnQocmVzdWx0RGlnaXRzW2ldIDw9IGFyZ3NbX3F1b3RpZW50SGlnaERpZ2l0XSk7CiAgICAgICAgaWYgKChyZXN1bHREaWdpdHNbaV0gPCBhcmdzW19xdW90aWVudEhpZ2hEaWdpdF0pIHx8CiAgICAgICAgICAgIChyZXN1bHREaWdpdHNbaSAtIDFdIDwgYXJnc1tfcXVvdGllbnREaWdpdF0pKSB7CiAgICAgICAgICB2YXIgdG1wVXNlZCA9IF9kbFNoaWZ0RGlnaXRzKG55RGlnaXRzLCB5VXNlZCwgaiwgdG1wRGlnaXRzKTsKICAgICAgICAgIF9hYnNTdWIocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkLCB0bXBEaWdpdHMsIHRtcFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgICAgICAgICBpZiAoYXJnc1tfcXVvdGllbnREaWdpdF0gPT0gMCkgewogICAgICAgICAgICAtLWFyZ3NbX3F1b3RpZW50SGlnaERpZ2l0XTsKICAgICAgICAgIH0KICAgICAgICAgIC0tYXJnc1tfcXVvdGllbnREaWdpdF07CiAgICAgICAgICBhc3NlcnQocmVzdWx0RGlnaXRzW2ldIDw9IGFyZ3NbX3F1b3RpZW50SGlnaERpZ2l0XSk7CiAgICAgICAgICB3aGlsZSAoKHJlc3VsdERpZ2l0c1tpXSA8IGFyZ3NbX3F1b3RpZW50SGlnaERpZ2l0XSkgfHwKICAgICAgICAgICAgICAocmVzdWx0RGlnaXRzW2kgLSAxXSA8IGFyZ3NbX3F1b3RpZW50RGlnaXRdKSkgewogICAgICAgICAgICBfYWJzU3ViKHJlc3VsdERpZ2l0cywgcmVzdWx0VXNlZCwgdG1wRGlnaXRzLCB0bXBVc2VkLCByZXN1bHREaWdpdHMpOwogICAgICAgICAgICBpZiAoYXJnc1tfcXVvdGllbnREaWdpdF0gPT0gMCkgewogICAgICAgICAgICAgIC0tYXJnc1tfcXVvdGllbnRIaWdoRGlnaXRdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC0tYXJnc1tfcXVvdGllbnREaWdpdF07CiAgICAgICAgICAgIGFzc2VydChyZXN1bHREaWdpdHNbaV0gPD0gYXJnc1tfcXVvdGllbnRIaWdoRGlnaXRdKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaSAtPSBkMDsKICAgIH0KICAgIC8vIFJldHVybiByZW1haW5kZXIsIGkuZS4gZGVub3JtYWxpemVkIHJlc3VsdERpZ2l0c1swLi55VXNlZC0xXS4KICAgIHJlc3VsdFVzZWQgPSB5VXNlZDsKICAgIGlmIChuc2ggPiAwKSB7CiAgICAgIC8vIERlbm9ybWFsaXplIHJlbWFpbmRlci4KICAgICAgcmVzdWx0VXNlZCA9IF9yU2hpZnREaWdpdHMocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkLCBuc2gsIHJlc3VsdERpZ2l0cyk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0VXNlZDsKICB9CgogIGludCBnZXQgaGFzaENvZGUgewogICAgLy8gVGhpcyBpcyB0aGUgW0plbmtpbnMgaGFzaCBmdW5jdGlvbl1bMV0gYnV0IHVzaW5nIG1hc2tpbmcgdG8ga2VlcAogICAgLy8gdmFsdWVzIGluIFNNSSByYW5nZS4KICAgIC8vCiAgICAvLyBbMV06IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSmVua2luc19oYXNoX2Z1bmN0aW9uCgogICAgaW50IGNvbWJpbmUoaW50IGhhc2gsIGludCB2YWx1ZSkgewogICAgICBoYXNoID0gMHgxZmZmZmZmZiAmIChoYXNoICsgdmFsdWUpOwogICAgICBoYXNoID0gMHgxZmZmZmZmZiAmIChoYXNoICsgKCgweDAwMDdmZmZmICYgaGFzaCkgPDwgMTApKTsKICAgICAgcmV0dXJuIGhhc2ggXiAoaGFzaCA+PiA2KTsKICAgIH0KCiAgICBpbnQgZmluaXNoKGludCBoYXNoKSB7CiAgICAgIGhhc2ggPSAweDFmZmZmZmZmICYgKGhhc2ggKyAoKDB4MDNmZmZmZmYgJiBoYXNoKSA8PCAzKSk7CiAgICAgIGhhc2ggPSBoYXNoIF4gKGhhc2ggPj4gMTEpOwogICAgICByZXR1cm4gMHgxZmZmZmZmZiAmIChoYXNoICsgKCgweDAwMDAzZmZmICYgaGFzaCkgPDwgMTUpKTsKICAgIH0KCiAgICBpZiAoX2lzWmVybykgcmV0dXJuIDY3MDc7IC8vIEp1c3QgYSByYW5kb20gbnVtYmVyLgogICAgdmFyIGhhc2ggPSBfaXNOZWdhdGl2ZSA/IDgzNTg1IDogNDI5Njg5OyAvLyBBbHNvIHJhbmRvbS4KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX3VzZWQ7IGkrKykgewogICAgICBoYXNoID0gY29tYmluZShoYXNoLCBfZGlnaXRzW2ldKTsKICAgIH0KICAgIHJldHVybiBmaW5pc2goaGFzaCk7CiAgfQoKICAvKioKICAgKiBUZXN0IHdoZXRoZXIgdGhpcyB2YWx1ZSBpcyBudW1lcmljYWxseSBlcXVhbCB0byBgb3RoZXJgLgogICAqCiAgICogSWYgW290aGVyXSBpcyBhIFtfQmlnSW50SW1wbF0gcmV0dXJucyB3aGV0aGVyIHRoZSB0d28gb3BlcmFuZHMgaGF2ZSB0aGUKICAgKiBzYW1lIHZhbHVlLgogICAqCiAgICogUmV0dXJucyBmYWxzZSBpZiBgb3RoZXJgIGlzIG5vdCBhIFtfQmlnSW50SW1wbF0uCiAgICovCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpID0+CiAgICAgIG90aGVyIGlzIF9CaWdJbnRJbXBsICYmIGNvbXBhcmVUbyhvdGhlcikgPT0gMDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbWluaW11bSBudW1iZXIgb2YgYml0cyByZXF1aXJlZCB0byBzdG9yZSB0aGlzIGJpZyBpbnRlZ2VyLgogICAqCiAgICogVGhlIG51bWJlciBvZiBiaXRzIGV4Y2x1ZGVzIHRoZSBzaWduIGJpdCwgd2hpY2ggZ2l2ZXMgdGhlIG5hdHVyYWwgbGVuZ3RoCiAgICogZm9yIG5vbi1uZWdhdGl2ZSAodW5zaWduZWQpIHZhbHVlcy4gIE5lZ2F0aXZlIHZhbHVlcyBhcmUgY29tcGxlbWVudGVkIHRvCiAgICogcmV0dXJuIHRoZSBiaXQgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGJpdCB0aGF0IGRpZmZlcnMgZnJvbSB0aGUgc2lnbiBiaXQuCiAgICoKICAgKiBUbyBmaW5kIHRoZSBudW1iZXIgb2YgYml0cyBuZWVkZWQgdG8gc3RvcmUgdGhlIHZhbHVlIGFzIGEgc2lnbmVkIHZhbHVlLAogICAqIGFkZCBvbmUsIGkuZS4gdXNlIGB4LmJpdExlbmd0aCArIDFgLgogICAqCiAgICogYGBgCiAgICogeC5iaXRMZW5ndGggPT0gKC14LTEpLmJpdExlbmd0aAogICAqCiAgICogbmV3IEJpZ0ludC5mcm9tKDMpLmJpdExlbmd0aCA9PSAyOyAgIC8vIDAwMDAwMDExCiAgICogbmV3IEJpZ0ludC5mcm9tKDIpLmJpdExlbmd0aCA9PSAyOyAgIC8vIDAwMDAwMDEwCiAgICogbmV3IEJpZ0ludC5mcm9tKDEpLmJpdExlbmd0aCA9PSAxOyAgIC8vIDAwMDAwMDAxCiAgICogbmV3IEJpZ0ludC5mcm9tKDApLmJpdExlbmd0aCA9PSAwOyAgIC8vIDAwMDAwMDAwCiAgICogbmV3IEJpZ0ludC5mcm9tKC0xKS5iaXRMZW5ndGggPT0gMDsgIC8vIDExMTExMTExCiAgICogbmV3IEJpZ0ludC5mcm9tKC0yKS5iaXRMZW5ndGggPT0gMTsgIC8vIDExMTExMTEwCiAgICogbmV3IEJpZ0ludC5mcm9tKC0zKS5iaXRMZW5ndGggPT0gMjsgIC8vIDExMTExMTAxCiAgICogbmV3IEJpZ0ludC5mcm9tKC00KS5iaXRMZW5ndGggPT0gMjsgIC8vIDExMTExMTAwCiAgICogYGBgCiAgICovCiAgaW50IGdldCBiaXRMZW5ndGggewogICAgaWYgKF91c2VkID09IDApIHJldHVybiAwOwogICAgaWYgKF9pc05lZ2F0aXZlKSByZXR1cm4gKH50aGlzKS5iaXRMZW5ndGg7CiAgICByZXR1cm4gX2RpZ2l0Qml0cyAqIChfdXNlZCAtIDEpICsgX2RpZ2l0c1tfdXNlZCAtIDFdLmJpdExlbmd0aDsKICB9CgogIC8qKgogICAqIFRydW5jYXRpbmcgZGl2aXNpb24gb3BlcmF0b3IuCiAgICoKICAgKiBQZXJmb3JtcyBhIHRydW5jYXRpbmcgaW50ZWdlciBkaXZpc2lvbiwgd2hlcmUgdGhlIHJlbWFpbmRlciBpcyBkaXNjYXJkZWQuCiAgICoKICAgKiBUaGUgcmVtYWluZGVyIGNhbiBiZSBjb21wdXRlZCB1c2luZyB0aGUgW3JlbWFpbmRlcl0gbWV0aG9kLgogICAqCiAgICogRXhhbXBsZXM6CiAgICogYGBgCiAgICogdmFyIHNldmVuID0gbmV3IEJpZ0ludC5mcm9tKDcpOwogICAqIHZhciB0aHJlZSA9IG5ldyBCaWdJbnQuZnJvbSgzKTsKICAgKiBzZXZlbiB+LyB0aHJlZTsgICAgLy8gPT4gMgogICAqICgtc2V2ZW4pIH4vIHRocmVlOyAvLyA9PiAtMgogICAqIHNldmVuIH4vIC10aHJlZTsgICAvLyA9PiAtMgogICAqIHNldmVuLnJlbWFpbmRlcih0aHJlZSk7ICAgIC8vID0+IDEKICAgKiAoLXNldmVuKS5yZW1haW5kZXIodGhyZWUpOyAvLyA9PiAtMQogICAqIHNldmVuLnJlbWFpbmRlcigtdGhyZWUpOyAgIC8vID0+IDEKICAgKiBgYGAKICAgKi8KICBfQmlnSW50SW1wbCBvcGVyYXRvciB+LyhCaWdJbnQgYmlnSW50KSB7CiAgICBfQmlnSW50SW1wbCBvdGhlciA9IGJpZ0ludDsKICAgIGlmIChvdGhlci5fdXNlZCA9PSAwKSB7CiAgICAgIHRocm93IGNvbnN0IEludGVnZXJEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbigpOwogICAgfQogICAgcmV0dXJuIF9kaXYob3RoZXIpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcmVtYWluZGVyIG9mIHRoZSB0cnVuY2F0aW5nIGRpdmlzaW9uIG9mIGB0aGlzYCBieSBbb3RoZXJdLgogICAqCiAgICogVGhlIHJlc3VsdCBgcmAgb2YgdGhpcyBvcGVyYXRpb24gc2F0aXNmaWVzOgogICAqIGB0aGlzID09ICh0aGlzIH4vIG90aGVyKSAqIG90aGVyICsgcmAuCiAgICogQXMgYSBjb25zZXF1ZW5jZSB0aGUgcmVtYWluZGVyIGByYCBoYXMgdGhlIHNhbWUgc2lnbiBhcyB0aGUgZGl2aWRlciBgdGhpc2AuCiAgICovCiAgX0JpZ0ludEltcGwgcmVtYWluZGVyKEJpZ0ludCBiaWdJbnQpIHsKICAgIF9CaWdJbnRJbXBsIG90aGVyID0gYmlnSW50OwogICAgaWYgKG90aGVyLl91c2VkID09IDApIHsKICAgICAgdGhyb3cgY29uc3QgSW50ZWdlckRpdmlzaW9uQnlaZXJvRXhjZXB0aW9uKCk7CiAgICB9CiAgICByZXR1cm4gX3JlbShvdGhlcik7CiAgfQoKICAvLy8gRGl2aXNpb24gb3BlcmF0b3IuCiAgZG91YmxlIG9wZXJhdG9yIC8oQmlnSW50IG90aGVyKSA9PiB0aGlzLnRvRG91YmxlKCkgLyBvdGhlci50b0RvdWJsZSgpOwoKICAvKiogUmVsYXRpb25hbCBsZXNzIHRoYW4gb3BlcmF0b3IuICovCiAgYm9vbCBvcGVyYXRvciA8KEJpZ0ludCBvdGhlcikgPT4gY29tcGFyZVRvKG90aGVyKSA8IDA7CgogIC8qKiBSZWxhdGlvbmFsIGxlc3MgdGhhbiBvciBlcXVhbCBvcGVyYXRvci4gKi8KICBib29sIG9wZXJhdG9yIDw9KEJpZ0ludCBvdGhlcikgPT4gY29tcGFyZVRvKG90aGVyKSA8PSAwOwoKICAvKiogUmVsYXRpb25hbCBncmVhdGVyIHRoYW4gb3BlcmF0b3IuICovCiAgYm9vbCBvcGVyYXRvciA+KEJpZ0ludCBvdGhlcikgPT4gY29tcGFyZVRvKG90aGVyKSA+IDA7CgogIC8qKiBSZWxhdGlvbmFsIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCBvcGVyYXRvci4gKi8KICBib29sIG9wZXJhdG9yID49KEJpZ0ludCBvdGhlcikgPT4gY29tcGFyZVRvKG90aGVyKSA+PSAwOwoKICAvKioKICAgKiBFdWNsaWRlYW4gbW9kdWxvIG9wZXJhdG9yLgogICAqCiAgICogUmV0dXJucyB0aGUgcmVtYWluZGVyIG9mIHRoZSBFdWNsaWRlYW4gZGl2aXNpb24uIFRoZSBFdWNsaWRlYW4gZGl2aXNpb24gb2YKICAgKiB0d28gaW50ZWdlcnMgYGFgIGFuZCBgYmAgeWllbGRzIHR3byBpbnRlZ2VycyBgcWAgYW5kIGByYCBzdWNoIHRoYXQKICAgKiBgYSA9PSBiICogcSArIHJgIGFuZCBgMCA8PSByIDwgYi5hYnMoKWAuCiAgICoKICAgKiBUaGUgc2lnbiBvZiB0aGUgcmV0dXJuZWQgdmFsdWUgYHJgIGlzIGFsd2F5cyBwb3NpdGl2ZS4KICAgKgogICAqIFNlZSBbcmVtYWluZGVyXSBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGUgdHJ1bmNhdGluZyBkaXZpc2lvbi4KICAgKi8KICBfQmlnSW50SW1wbCBvcGVyYXRvciAlKEJpZ0ludCBiaWdJbnQpIHsKICAgIF9CaWdJbnRJbXBsIG90aGVyID0gYmlnSW50OwogICAgaWYgKG90aGVyLl91c2VkID09IDApIHsKICAgICAgdGhyb3cgY29uc3QgSW50ZWdlckRpdmlzaW9uQnlaZXJvRXhjZXB0aW9uKCk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX3JlbShvdGhlcik7CiAgICBpZiAocmVzdWx0Ll9pc05lZ2F0aXZlKSB7CiAgICAgIGlmIChvdGhlci5faXNOZWdhdGl2ZSkgewogICAgICAgIHJlc3VsdCA9IHJlc3VsdCAtIG90aGVyOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIG90aGVyOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgc2lnbiBvZiB0aGlzIGJpZyBpbnRlZ2VyLgogICAqCiAgICogUmV0dXJucyAwIGZvciB6ZXJvLCAtMSBmb3IgdmFsdWVzIGxlc3MgdGhhbiB6ZXJvIGFuZAogICAqICsxIGZvciB2YWx1ZXMgZ3JlYXRlciB0aGFuIHplcm8uCiAgICovCiAgaW50IGdldCBzaWduIHsKICAgIGlmIChfdXNlZCA9PSAwKSByZXR1cm4gMDsKICAgIHJldHVybiBfaXNOZWdhdGl2ZSA/IC0xIDogMTsKICB9CgogIC8vLyBXaGV0aGVyIHRoaXMgYmlnIGludGVnZXIgaXMgZXZlbi4KICBib29sIGdldCBpc0V2ZW4gPT4gX3VzZWQgPT0gMCB8fCAoX2RpZ2l0c1swXSAmIDEpID09IDA7CgogIC8vLyBXaGV0aGVyIHRoaXMgYmlnIGludGVnZXIgaXMgb2RkLgogIGJvb2wgZ2V0IGlzT2RkID0+ICFpc0V2ZW47CgogIC8vLyBXaGV0aGVyIHRoaXMgbnVtYmVyIGlzIG5lZ2F0aXZlLgogIGJvb2wgZ2V0IGlzTmVnYXRpdmUgPT4gX2lzTmVnYXRpdmU7CgogIF9CaWdJbnRJbXBsIHBvdyhpbnQgZXhwb25lbnQpIHsKICAgIGlmIChleHBvbmVudCA8IDApIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkV4cG9uZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlOiAkZXhwb25lbnQiKTsKICAgIH0KICAgIGlmIChleHBvbmVudCA9PSAwKSByZXR1cm4gb25lOwoKICAgIC8vIEV4cG9uZW50aWF0aW9uIGJ5IHNxdWFyaW5nLgogICAgdmFyIHJlc3VsdCA9IG9uZTsKICAgIHZhciBiYXNlID0gdGhpczsKICAgIHdoaWxlIChleHBvbmVudCAhPSAwKSB7CiAgICAgIGlmICgoZXhwb25lbnQgJiAxKSA9PSAxKSB7CiAgICAgICAgcmVzdWx0ICo9IGJhc2U7CiAgICAgIH0KICAgICAgZXhwb25lbnQgPj49IDE7CiAgICAgIC8vIFNraXAgdW5uZWNlc3Nhcnkgb3BlcmF0aW9uLgogICAgICBpZiAoZXhwb25lbnQgIT0gMCkgewogICAgICAgIGJhc2UgKj0gYmFzZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhpcyBpbnRlZ2VyIHRvIHRoZSBwb3dlciBvZiBbZXhwb25lbnRdIG1vZHVsbyBbbW9kdWx1c10uCiAgICoKICAgKiBUaGUgW2V4cG9uZW50XSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBhbmQgW21vZHVsdXNdIG11c3QgYmUKICAgKiBwb3NpdGl2ZS4KICAgKi8KICBfQmlnSW50SW1wbCBtb2RQb3coQmlnSW50IGJpZ0V4cG9uZW50LCBCaWdJbnQgYmlnTW9kdWx1cykgewogICAgX0JpZ0ludEltcGwgZXhwb25lbnQgPSBiaWdFeHBvbmVudDsKICAgIF9CaWdJbnRJbXBsIG1vZHVsdXMgPSBiaWdNb2R1bHVzOwogICAgaWYgKGV4cG9uZW50Ll9pc05lZ2F0aXZlKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJleHBvbmVudCBtdXN0IGJlIHBvc2l0aXZlOiAkZXhwb25lbnQiKTsKICAgIH0KICAgIGlmIChtb2R1bHVzIDw9IHplcm8pIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIm1vZHVsdXMgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZTogJG1vZHVsdXMiKTsKICAgIH0KICAgIGlmIChleHBvbmVudC5faXNaZXJvKSByZXR1cm4gb25lOwoKICAgIGZpbmFsIGV4cG9uZW50Qml0bGVuID0gZXhwb25lbnQuYml0TGVuZ3RoOwogICAgaWYgKGV4cG9uZW50Qml0bGVuIDw9IDApIHJldHVybiBvbmU7CiAgICBmaW5hbCBib29sIGNhbm5vdFVzZU1vbnRnb21lcnkgPSBtb2R1bHVzLmlzRXZlbiB8fCBhYnMoKSA+PSBtb2R1bHVzOwogICAgaWYgKGNhbm5vdFVzZU1vbnRnb21lcnkgfHwgZXhwb25lbnRCaXRsZW4gPCA2NCkgewogICAgICBfQmlnSW50UmVkdWN0aW9uIHogPSAoY2Fubm90VXNlTW9udGdvbWVyeSB8fCBleHBvbmVudEJpdGxlbiA8IDgpCiAgICAgICAgICA/IG5ldyBfQmlnSW50Q2xhc3NpY1JlZHVjdGlvbihtb2R1bHVzKQogICAgICAgICAgOiBuZXcgX0JpZ0ludE1vbnRnb21lcnlSZWR1Y3Rpb24obW9kdWx1cyk7CiAgICAgIHZhciByZXN1bHREaWdpdHMgPSBfbmV3RGlnaXRzKDIgKiB6Ll9ub3JtTW9kdWx1c1VzZWQgKyAyKTsKICAgICAgdmFyIHJlc3VsdDJEaWdpdHMgPSBfbmV3RGlnaXRzKDIgKiB6Ll9ub3JtTW9kdWx1c1VzZWQgKyAyKTsKICAgICAgdmFyIGdEaWdpdHMgPSBfbmV3RGlnaXRzKHouX25vcm1Nb2R1bHVzVXNlZCk7CiAgICAgIHZhciBnVXNlZCA9IHouX2NvbnZlcnQodGhpcywgZ0RpZ2l0cyk7CiAgICAgIC8vIEluaXRpYWxpemUgcmVzdWx0IHdpdGggZy4KICAgICAgLy8gQ29weSBsZWFkaW5nIHplcm8gaWYgYW55LgogICAgICBmb3IgKGludCBqID0gZ1VzZWQgKyAoZ1VzZWQgJiAxKSAtIDE7IGogPj0gMDsgai0tKSB7CiAgICAgICAgcmVzdWx0RGlnaXRzW2pdID0gZ0RpZ2l0c1tqXTsKICAgICAgfQogICAgICB2YXIgcmVzdWx0VXNlZCA9IGdVc2VkOwogICAgICB2YXIgcmVzdWx0MlVzZWQ7CiAgICAgIGZvciAoaW50IGkgPSBleHBvbmVudEJpdGxlbiAtIDI7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgcmVzdWx0MlVzZWQgPSB6Ll9zcXIocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkLCByZXN1bHQyRGlnaXRzKTsKICAgICAgICBpZiAoZXhwb25lbnQuX2RpZ2l0c1tpIH4vIF9kaWdpdEJpdHNdICYgKDEgPDwgKGkgJSBfZGlnaXRCaXRzKSkgIT0gMCkgewogICAgICAgICAgcmVzdWx0VXNlZCA9CiAgICAgICAgICAgICAgei5fbXVsKHJlc3VsdDJEaWdpdHMsIHJlc3VsdDJVc2VkLCBnRGlnaXRzLCBnVXNlZCwgcmVzdWx0RGlnaXRzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gU3dhcCByZXN1bHQgYW5kIHJlc3VsdDIuCiAgICAgICAgICB2YXIgdG1wRGlnaXRzID0gcmVzdWx0RGlnaXRzOwogICAgICAgICAgdmFyIHRtcFVzZWQgPSByZXN1bHRVc2VkOwogICAgICAgICAgcmVzdWx0RGlnaXRzID0gcmVzdWx0MkRpZ2l0czsKICAgICAgICAgIHJlc3VsdFVzZWQgPSByZXN1bHQyVXNlZDsKICAgICAgICAgIHJlc3VsdDJEaWdpdHMgPSB0bXBEaWdpdHM7CiAgICAgICAgICByZXN1bHQyVXNlZCA9IHRtcFVzZWQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB6Ll9yZXZlcnQocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkKTsKICAgIH0KICAgIHZhciBrOwogICAgaWYgKGV4cG9uZW50Qml0bGVuIDwgMTgpCiAgICAgIGsgPSAxOwogICAgZWxzZSBpZiAoZXhwb25lbnRCaXRsZW4gPCA0OCkKICAgICAgayA9IDM7CiAgICBlbHNlIGlmIChleHBvbmVudEJpdGxlbiA8IDE0NCkKICAgICAgayA9IDQ7CiAgICBlbHNlIGlmIChleHBvbmVudEJpdGxlbiA8IDc2OCkKICAgICAgayA9IDU7CiAgICBlbHNlCiAgICAgIGsgPSA2OwogICAgX0JpZ0ludFJlZHVjdGlvbiB6ID0gbmV3IF9CaWdJbnRNb250Z29tZXJ5UmVkdWN0aW9uKG1vZHVsdXMpOwogICAgdmFyIG4gPSAzOwogICAgZmluYWwgazEgPSBrIC0gMTsKICAgIGZpbmFsIGttID0gKDEgPDwgaykgLSAxOwogICAgTGlzdCBnRGlnaXRzID0gbmV3IExpc3Qoa20gKyAxKTsKICAgIExpc3QgZ1VzZWQgPSBuZXcgTGlzdChrbSArIDEpOwogICAgZ0RpZ2l0c1sxXSA9IF9uZXdEaWdpdHMoei5fbm9ybU1vZHVsdXNVc2VkKTsKICAgIGdVc2VkWzFdID0gei5fY29udmVydCh0aGlzLCBnRGlnaXRzWzFdKTsKICAgIGlmIChrID4gMSkgewogICAgICB2YXIgZzJEaWdpdHMgPSBfbmV3RGlnaXRzKDIgKiB6Ll9ub3JtTW9kdWx1c1VzZWQgKyAyKTsKICAgICAgdmFyIGcyVXNlZCA9IHouX3NxcihnRGlnaXRzWzFdLCBnVXNlZFsxXSwgZzJEaWdpdHMpOwogICAgICB3aGlsZSAobiA8PSBrbSkgewogICAgICAgIGdEaWdpdHNbbl0gPSBfbmV3RGlnaXRzKDIgKiB6Ll9ub3JtTW9kdWx1c1VzZWQgKyAyKTsKICAgICAgICBnVXNlZFtuXSA9CiAgICAgICAgICAgIHouX211bChnMkRpZ2l0cywgZzJVc2VkLCBnRGlnaXRzW24gLSAyXSwgZ1VzZWRbbiAtIDJdLCBnRGlnaXRzW25dKTsKICAgICAgICBuICs9IDI7CiAgICAgIH0KICAgIH0KICAgIHZhciB3OwogICAgdmFyIGlzT25lID0gdHJ1ZTsKICAgIHZhciByZXN1bHREaWdpdHMgPSBvbmUuX2RpZ2l0czsKICAgIHZhciByZXN1bHRVc2VkID0gb25lLl91c2VkOwogICAgdmFyIHJlc3VsdDJEaWdpdHMgPSBfbmV3RGlnaXRzKDIgKiB6Ll9ub3JtTW9kdWx1c1VzZWQgKyAyKTsKICAgIHZhciByZXN1bHQyVXNlZDsKICAgIHZhciBleHBvbmVudERpZ2l0cyA9IGV4cG9uZW50Ll9kaWdpdHM7CiAgICB2YXIgaiA9IGV4cG9uZW50Ll91c2VkIC0gMTsKICAgIHZhciBpID0gZXhwb25lbnREaWdpdHNbal0uYml0TGVuZ3RoIC0gMTsKICAgIHdoaWxlIChqID49IDApIHsKICAgICAgaWYgKGkgPj0gazEpIHsKICAgICAgICB3ID0gKGV4cG9uZW50RGlnaXRzW2pdID4+IChpIC0gazEpKSAmIGttOwogICAgICB9IGVsc2UgewogICAgICAgIHcgPSAoZXhwb25lbnREaWdpdHNbal0gJiAoKDEgPDwgKGkgKyAxKSkgLSAxKSkgPDwgKGsxIC0gaSk7CiAgICAgICAgaWYgKGogPiAwKSB7CiAgICAgICAgICB3IHw9IGV4cG9uZW50RGlnaXRzW2ogLSAxXSA+PiAoX2RpZ2l0Qml0cyArIGkgLSBrMSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIG4gPSBrOwogICAgICB3aGlsZSAoKHcgJiAxKSA9PSAwKSB7CiAgICAgICAgdyA+Pj0gMTsKICAgICAgICAtLW47CiAgICAgIH0KICAgICAgaWYgKChpIC09IG4pIDwgMCkgewogICAgICAgIGkgKz0gX2RpZ2l0Qml0czsKICAgICAgICAtLWo7CiAgICAgIH0KICAgICAgaWYgKGlzT25lKSB7CiAgICAgICAgLy8gciA9PSAxLCBkb24ndCBib3RoZXIgc3F1YXJpbmcgb3IgbXVsdGlwbHlpbmcgaXQuCiAgICAgICAgcmVzdWx0RGlnaXRzID0gX25ld0RpZ2l0cygyICogei5fbm9ybU1vZHVsdXNVc2VkICsgMik7CiAgICAgICAgcmVzdWx0VXNlZCA9IGdVc2VkW3ddOwogICAgICAgIHZhciBnd0RpZ2l0cyA9IGdEaWdpdHNbd107CiAgICAgICAgdmFyIHJpID0gcmVzdWx0VXNlZCArIChyZXN1bHRVc2VkICYgMSk7IC8vIENvcHkgbGVhZGluZyB6ZXJvIGlmIGFueS4KICAgICAgICB3aGlsZSAoLS1yaSA+PSAwKSB7CiAgICAgICAgICByZXN1bHREaWdpdHNbcmldID0gZ3dEaWdpdHNbcmldOwogICAgICAgIH0KICAgICAgICBpc09uZSA9IGZhbHNlOwogICAgICB9IGVsc2UgewogICAgICAgIHdoaWxlIChuID4gMSkgewogICAgICAgICAgcmVzdWx0MlVzZWQgPSB6Ll9zcXIocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkLCByZXN1bHQyRGlnaXRzKTsKICAgICAgICAgIHJlc3VsdFVzZWQgPSB6Ll9zcXIocmVzdWx0MkRpZ2l0cywgcmVzdWx0MlVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgICAgICAgICBuIC09IDI7CiAgICAgICAgfQogICAgICAgIGlmIChuID4gMCkgewogICAgICAgICAgcmVzdWx0MlVzZWQgPSB6Ll9zcXIocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkLCByZXN1bHQyRGlnaXRzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIHN3YXBEaWdpdHMgPSByZXN1bHREaWdpdHM7CiAgICAgICAgICB2YXIgc3dhcFVzZWQgPSByZXN1bHRVc2VkOwogICAgICAgICAgcmVzdWx0RGlnaXRzID0gcmVzdWx0MkRpZ2l0czsKICAgICAgICAgIHJlc3VsdFVzZWQgPSByZXN1bHQyVXNlZDsKICAgICAgICAgIHJlc3VsdDJEaWdpdHMgPSBzd2FwRGlnaXRzOwogICAgICAgICAgcmVzdWx0MlVzZWQgPSBzd2FwVXNlZDsKICAgICAgICB9CiAgICAgICAgcmVzdWx0VXNlZCA9IHouX211bCgKICAgICAgICAgICAgcmVzdWx0MkRpZ2l0cywgcmVzdWx0MlVzZWQsIGdEaWdpdHNbd10sIGdVc2VkW3ddLCByZXN1bHREaWdpdHMpOwogICAgICB9CiAgICAgIHdoaWxlIChqID49IDAgJiYgKGV4cG9uZW50RGlnaXRzW2pdICYgKDEgPDwgaSkpID09IDApIHsKICAgICAgICByZXN1bHQyVXNlZCA9IHouX3NxcihyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQsIHJlc3VsdDJEaWdpdHMpOwogICAgICAgIHZhciBzd2FwRGlnaXRzID0gcmVzdWx0RGlnaXRzOwogICAgICAgIHZhciBzd2FwVXNlZCA9IHJlc3VsdFVzZWQ7CiAgICAgICAgcmVzdWx0RGlnaXRzID0gcmVzdWx0MkRpZ2l0czsKICAgICAgICByZXN1bHRVc2VkID0gcmVzdWx0MlVzZWQ7CiAgICAgICAgcmVzdWx0MkRpZ2l0cyA9IHN3YXBEaWdpdHM7CiAgICAgICAgcmVzdWx0MlVzZWQgPSBzd2FwVXNlZDsKICAgICAgICBpZiAoLS1pIDwgMCkgewogICAgICAgICAgaSA9IF9kaWdpdEJpdHMgLSAxOwogICAgICAgICAgLS1qOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgYXNzZXJ0KCFpc09uZSk7CiAgICByZXR1cm4gei5fcmV2ZXJ0KHJlc3VsdERpZ2l0cywgcmVzdWx0VXNlZCk7CiAgfQoKICAvLyBJZiBpbnYgaXMgZmFsc2UsIHJldHVybnMgZ2NkKHgsIHkpLgogIC8vIElmIGludiBpcyB0cnVlIGFuZCBnY2QoeCwgeSkgPSAxLCByZXR1cm5zIGQsIHNvIHRoYXQgYyp4ICsgZCp5ID0gMS4KICAvLyBJZiBpbnYgaXMgdHJ1ZSBhbmQgZ2NkKHgsIHkpICE9IDEsIHRocm93cyBFeGNlcHRpb24oIk5vdCBjb3ByaW1lIikuCiAgc3RhdGljIF9CaWdJbnRJbXBsIF9iaW5hcnlHY2QoX0JpZ0ludEltcGwgeCwgX0JpZ0ludEltcGwgeSwgYm9vbCBpbnYpIHsKICAgIHZhciB4RGlnaXRzID0geC5fZGlnaXRzOwogICAgdmFyIHlEaWdpdHMgPSB5Ll9kaWdpdHM7CiAgICB2YXIgeFVzZWQgPSB4Ll91c2VkOwogICAgdmFyIHlVc2VkID0geS5fdXNlZDsKICAgIHZhciBtYXhVc2VkID0gX21heCh4VXNlZCwgeVVzZWQpOwogICAgZmluYWwgbWF4TGVuID0gbWF4VXNlZCArIChtYXhVc2VkICYgMSk7CiAgICB4RGlnaXRzID0gX2Nsb25lRGlnaXRzKHhEaWdpdHMsIDAsIHhVc2VkLCBtYXhMZW4pOwogICAgeURpZ2l0cyA9IF9jbG9uZURpZ2l0cyh5RGlnaXRzLCAwLCB5VXNlZCwgbWF4TGVuKTsKICAgIGludCBzaGlmdEFtb3VudCA9IDA7CiAgICBpZiAoaW52KSB7CiAgICAgIGlmICgoeVVzZWQgPT0gMSkgJiYgKHlEaWdpdHNbMF0gPT0gMSkpIHJldHVybiBvbmU7CiAgICAgIGlmICgoeVVzZWQgPT0gMCkgfHwgKHlEaWdpdHNbMF0uaXNFdmVuICYmIHhEaWdpdHNbMF0uaXNFdmVuKSkgewogICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIk5vdCBjb3ByaW1lIik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmICh4Ll9pc1plcm8pIHsKICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZSgwLCAidGhpcyIsICJtdXN0IG5vdCBiZSB6ZXJvIik7CiAgICAgIH0KICAgICAgaWYgKHkuX2lzWmVybykgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKDAsICJvdGhlciIsICJtdXN0IG5vdCBiZSB6ZXJvIik7CiAgICAgIH0KICAgICAgaWYgKCgoeFVzZWQgPT0gMSkgJiYgKHhEaWdpdHNbMF0gPT0gMSkpIHx8CiAgICAgICAgICAoKHlVc2VkID09IDEpICYmICh5RGlnaXRzWzBdID09IDEpKSkgcmV0dXJuIG9uZTsKICAgICAgd2hpbGUgKCgoeERpZ2l0c1swXSAmIDEpID09IDApICYmICgoeURpZ2l0c1swXSAmIDEpID09IDApKSB7CiAgICAgICAgX3JzaCh4RGlnaXRzLCB4VXNlZCwgMSwgeERpZ2l0cyk7CiAgICAgICAgX3JzaCh5RGlnaXRzLCB5VXNlZCwgMSwgeURpZ2l0cyk7CiAgICAgICAgc2hpZnRBbW91bnQrKzsKICAgICAgfQogICAgICBpZiAoc2hpZnRBbW91bnQgPj0gX2RpZ2l0Qml0cykgewogICAgICAgIHZhciBkaWdpdFNoaWZ0QW1vdW50ID0gc2hpZnRBbW91bnQgfi8gX2RpZ2l0Qml0czsKICAgICAgICB4VXNlZCAtPSBkaWdpdFNoaWZ0QW1vdW50OwogICAgICAgIHlVc2VkIC09IGRpZ2l0U2hpZnRBbW91bnQ7CiAgICAgICAgbWF4VXNlZCAtPSBkaWdpdFNoaWZ0QW1vdW50OwogICAgICB9CiAgICAgIGlmICgoeURpZ2l0c1swXSAmIDEpID09IDEpIHsKICAgICAgICAvLyBTd2FwIHggYW5kIHkuCiAgICAgICAgdmFyIHRtcERpZ2l0cyA9IHhEaWdpdHM7CiAgICAgICAgdmFyIHRtcFVzZWQgPSB4VXNlZDsKICAgICAgICB4RGlnaXRzID0geURpZ2l0czsKICAgICAgICB4VXNlZCA9IHlVc2VkOwogICAgICAgIHlEaWdpdHMgPSB0bXBEaWdpdHM7CiAgICAgICAgeVVzZWQgPSB0bXBVc2VkOwogICAgICB9CiAgICB9CiAgICB2YXIgdURpZ2l0cyA9IF9jbG9uZURpZ2l0cyh4RGlnaXRzLCAwLCB4VXNlZCwgbWF4TGVuKTsKICAgIHZhciB2RGlnaXRzID0gX2Nsb25lRGlnaXRzKHlEaWdpdHMsIDAsIHlVc2VkLCBtYXhMZW4gKyAyKTsgLy8gKzIgZm9yIGxzaC4KICAgIGZpbmFsIGJvb2wgYWMgPSAoeERpZ2l0c1swXSAmIDEpID09IDA7CgogICAgLy8gVmFyaWFibGVzIGEsIGIsIGMsIGFuZCBkIHJlcXVpcmUgb25lIG1vcmUgZGlnaXQuCiAgICBmaW5hbCBhYmNkVXNlZCA9IG1heFVzZWQgKyAxOwogICAgZmluYWwgYWJjZExlbiA9IGFiY2RVc2VkICsgKGFiY2RVc2VkICYgMSkgKyAyOyAvLyArMiB0byBzYXRpc2Z5IF9hYnNBZGQuCiAgICB2YXIgYURpZ2l0cywgYkRpZ2l0cywgY0RpZ2l0cywgZERpZ2l0czsKICAgIGJvb2wgYUlzTmVnYXRpdmUsIGJJc05lZ2F0aXZlLCBjSXNOZWdhdGl2ZSwgZElzTmVnYXRpdmU7CiAgICBpZiAoYWMpIHsKICAgICAgYURpZ2l0cyA9IF9uZXdEaWdpdHMoYWJjZExlbik7CiAgICAgIGFJc05lZ2F0aXZlID0gZmFsc2U7CiAgICAgIGFEaWdpdHNbMF0gPSAxOwogICAgICBjRGlnaXRzID0gX25ld0RpZ2l0cyhhYmNkTGVuKTsKICAgICAgY0lzTmVnYXRpdmUgPSBmYWxzZTsKICAgIH0KICAgIGJEaWdpdHMgPSBfbmV3RGlnaXRzKGFiY2RMZW4pOwogICAgYklzTmVnYXRpdmUgPSBmYWxzZTsKICAgIGREaWdpdHMgPSBfbmV3RGlnaXRzKGFiY2RMZW4pOwogICAgZElzTmVnYXRpdmUgPSBmYWxzZTsKICAgIGREaWdpdHNbMF0gPSAxOwoKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIHdoaWxlICgodURpZ2l0c1swXSAmIDEpID09IDApIHsKICAgICAgICBfcnNoKHVEaWdpdHMsIG1heFVzZWQsIDEsIHVEaWdpdHMpOwogICAgICAgIGlmIChhYykgewogICAgICAgICAgaWYgKCgoYURpZ2l0c1swXSAmIDEpID09IDEpIHx8ICgoYkRpZ2l0c1swXSAmIDEpID09IDEpKSB7CiAgICAgICAgICAgIC8vIGEgKz0geQogICAgICAgICAgICBpZiAoYUlzTmVnYXRpdmUpIHsKICAgICAgICAgICAgICBpZiAoKGFEaWdpdHNbbWF4VXNlZF0gIT0gMCkgfHwKICAgICAgICAgICAgICAgICAgKF9jb21wYXJlRGlnaXRzKGFEaWdpdHMsIG1heFVzZWQsIHlEaWdpdHMsIG1heFVzZWQpKSA+IDApIHsKICAgICAgICAgICAgICAgIF9hYnNTdWIoYURpZ2l0cywgYWJjZFVzZWQsIHlEaWdpdHMsIG1heFVzZWQsIGFEaWdpdHMpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBfYWJzU3ViKHlEaWdpdHMsIG1heFVzZWQsIGFEaWdpdHMsIG1heFVzZWQsIGFEaWdpdHMpOwogICAgICAgICAgICAgICAgYUlzTmVnYXRpdmUgPSBmYWxzZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX2Fic0FkZChhRGlnaXRzLCBhYmNkVXNlZCwgeURpZ2l0cywgbWF4VXNlZCwgYURpZ2l0cyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gYiAtPSB4CiAgICAgICAgICAgIGlmIChiSXNOZWdhdGl2ZSkgewogICAgICAgICAgICAgIF9hYnNBZGQoYkRpZ2l0cywgYWJjZFVzZWQsIHhEaWdpdHMsIG1heFVzZWQsIGJEaWdpdHMpOwogICAgICAgICAgICB9IGVsc2UgaWYgKChiRGlnaXRzW21heFVzZWRdICE9IDApIHx8CiAgICAgICAgICAgICAgICAoX2NvbXBhcmVEaWdpdHMoYkRpZ2l0cywgbWF4VXNlZCwgeERpZ2l0cywgbWF4VXNlZCkgPiAwKSkgewogICAgICAgICAgICAgIF9hYnNTdWIoYkRpZ2l0cywgYWJjZFVzZWQsIHhEaWdpdHMsIG1heFVzZWQsIGJEaWdpdHMpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIF9hYnNTdWIoeERpZ2l0cywgbWF4VXNlZCwgYkRpZ2l0cywgbWF4VXNlZCwgYkRpZ2l0cyk7CiAgICAgICAgICAgICAgYklzTmVnYXRpdmUgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBfcnNoKGFEaWdpdHMsIGFiY2RVc2VkLCAxLCBhRGlnaXRzKTsKICAgICAgICB9IGVsc2UgaWYgKChiRGlnaXRzWzBdICYgMSkgPT0gMSkgewogICAgICAgICAgLy8gYiAtPSB4CiAgICAgICAgICBpZiAoYklzTmVnYXRpdmUpIHsKICAgICAgICAgICAgX2Fic0FkZChiRGlnaXRzLCBhYmNkVXNlZCwgeERpZ2l0cywgbWF4VXNlZCwgYkRpZ2l0cyk7CiAgICAgICAgICB9IGVsc2UgaWYgKChiRGlnaXRzW21heFVzZWRdICE9IDApIHx8CiAgICAgICAgICAgICAgKF9jb21wYXJlRGlnaXRzKGJEaWdpdHMsIG1heFVzZWQsIHhEaWdpdHMsIG1heFVzZWQpID4gMCkpIHsKICAgICAgICAgICAgX2Fic1N1YihiRGlnaXRzLCBhYmNkVXNlZCwgeERpZ2l0cywgbWF4VXNlZCwgYkRpZ2l0cyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfYWJzU3ViKHhEaWdpdHMsIG1heFVzZWQsIGJEaWdpdHMsIG1heFVzZWQsIGJEaWdpdHMpOwogICAgICAgICAgICBiSXNOZWdhdGl2ZSA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIF9yc2goYkRpZ2l0cywgYWJjZFVzZWQsIDEsIGJEaWdpdHMpOwogICAgICB9CiAgICAgIHdoaWxlICgodkRpZ2l0c1swXSAmIDEpID09IDApIHsKICAgICAgICBfcnNoKHZEaWdpdHMsIG1heFVzZWQsIDEsIHZEaWdpdHMpOwogICAgICAgIGlmIChhYykgewogICAgICAgICAgaWYgKCgoY0RpZ2l0c1swXSAmIDEpID09IDEpIHx8ICgoZERpZ2l0c1swXSAmIDEpID09IDEpKSB7CiAgICAgICAgICAgIC8vIGMgKz0geQogICAgICAgICAgICBpZiAoY0lzTmVnYXRpdmUpIHsKICAgICAgICAgICAgICBpZiAoKGNEaWdpdHNbbWF4VXNlZF0gIT0gMCkgfHwKICAgICAgICAgICAgICAgICAgKF9jb21wYXJlRGlnaXRzKGNEaWdpdHMsIG1heFVzZWQsIHlEaWdpdHMsIG1heFVzZWQpID4gMCkpIHsKICAgICAgICAgICAgICAgIF9hYnNTdWIoY0RpZ2l0cywgYWJjZFVzZWQsIHlEaWdpdHMsIG1heFVzZWQsIGNEaWdpdHMpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBfYWJzU3ViKHlEaWdpdHMsIG1heFVzZWQsIGNEaWdpdHMsIG1heFVzZWQsIGNEaWdpdHMpOwogICAgICAgICAgICAgICAgY0lzTmVnYXRpdmUgPSBmYWxzZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX2Fic0FkZChjRGlnaXRzLCBhYmNkVXNlZCwgeURpZ2l0cywgbWF4VXNlZCwgY0RpZ2l0cyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gZCAtPSB4CiAgICAgICAgICAgIGlmIChkSXNOZWdhdGl2ZSkgewogICAgICAgICAgICAgIF9hYnNBZGQoZERpZ2l0cywgYWJjZFVzZWQsIHhEaWdpdHMsIG1heFVzZWQsIGREaWdpdHMpOwogICAgICAgICAgICB9IGVsc2UgaWYgKChkRGlnaXRzW21heFVzZWRdICE9IDApIHx8CiAgICAgICAgICAgICAgICAoX2NvbXBhcmVEaWdpdHMoZERpZ2l0cywgbWF4VXNlZCwgeERpZ2l0cywgbWF4VXNlZCkgPiAwKSkgewogICAgICAgICAgICAgIF9hYnNTdWIoZERpZ2l0cywgYWJjZFVzZWQsIHhEaWdpdHMsIG1heFVzZWQsIGREaWdpdHMpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIF9hYnNTdWIoeERpZ2l0cywgbWF4VXNlZCwgZERpZ2l0cywgbWF4VXNlZCwgZERpZ2l0cyk7CiAgICAgICAgICAgICAgZElzTmVnYXRpdmUgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBfcnNoKGNEaWdpdHMsIGFiY2RVc2VkLCAxLCBjRGlnaXRzKTsKICAgICAgICB9IGVsc2UgaWYgKChkRGlnaXRzWzBdICYgMSkgPT0gMSkgewogICAgICAgICAgLy8gZCAtPSB4CiAgICAgICAgICBpZiAoZElzTmVnYXRpdmUpIHsKICAgICAgICAgICAgX2Fic0FkZChkRGlnaXRzLCBhYmNkVXNlZCwgeERpZ2l0cywgbWF4VXNlZCwgZERpZ2l0cyk7CiAgICAgICAgICB9IGVsc2UgaWYgKChkRGlnaXRzW21heFVzZWRdICE9IDApIHx8CiAgICAgICAgICAgICAgKF9jb21wYXJlRGlnaXRzKGREaWdpdHMsIG1heFVzZWQsIHhEaWdpdHMsIG1heFVzZWQpID4gMCkpIHsKICAgICAgICAgICAgX2Fic1N1YihkRGlnaXRzLCBhYmNkVXNlZCwgeERpZ2l0cywgbWF4VXNlZCwgZERpZ2l0cyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfYWJzU3ViKHhEaWdpdHMsIG1heFVzZWQsIGREaWdpdHMsIG1heFVzZWQsIGREaWdpdHMpOwogICAgICAgICAgICBkSXNOZWdhdGl2ZSA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIF9yc2goZERpZ2l0cywgYWJjZFVzZWQsIDEsIGREaWdpdHMpOwogICAgICB9CiAgICAgIGlmIChfY29tcGFyZURpZ2l0cyh1RGlnaXRzLCBtYXhVc2VkLCB2RGlnaXRzLCBtYXhVc2VkKSA+PSAwKSB7CiAgICAgICAgLy8gdSAtPSB2CiAgICAgICAgX2Fic1N1Yih1RGlnaXRzLCBtYXhVc2VkLCB2RGlnaXRzLCBtYXhVc2VkLCB1RGlnaXRzKTsKICAgICAgICBpZiAoYWMpIHsKICAgICAgICAgIC8vIGEgLT0gYwogICAgICAgICAgaWYgKGFJc05lZ2F0aXZlID09IGNJc05lZ2F0aXZlKSB7CiAgICAgICAgICAgIHZhciBhX2NtcF9jID0gX2NvbXBhcmVEaWdpdHMoYURpZ2l0cywgYWJjZFVzZWQsIGNEaWdpdHMsIGFiY2RVc2VkKTsKICAgICAgICAgICAgaWYgKGFfY21wX2MgPiAwKSB7CiAgICAgICAgICAgICAgX2Fic1N1YihhRGlnaXRzLCBhYmNkVXNlZCwgY0RpZ2l0cywgYWJjZFVzZWQsIGFEaWdpdHMpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIF9hYnNTdWIoY0RpZ2l0cywgYWJjZFVzZWQsIGFEaWdpdHMsIGFiY2RVc2VkLCBhRGlnaXRzKTsKICAgICAgICAgICAgICBhSXNOZWdhdGl2ZSA9ICFhSXNOZWdhdGl2ZSAmJiAoYV9jbXBfYyAhPSAwKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX2Fic0FkZChhRGlnaXRzLCBhYmNkVXNlZCwgY0RpZ2l0cywgYWJjZFVzZWQsIGFEaWdpdHMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBiIC09IGQKICAgICAgICBpZiAoYklzTmVnYXRpdmUgPT0gZElzTmVnYXRpdmUpIHsKICAgICAgICAgIHZhciBiX2NtcF9kID0gX2NvbXBhcmVEaWdpdHMoYkRpZ2l0cywgYWJjZFVzZWQsIGREaWdpdHMsIGFiY2RVc2VkKTsKICAgICAgICAgIGlmIChiX2NtcF9kID4gMCkgewogICAgICAgICAgICBfYWJzU3ViKGJEaWdpdHMsIGFiY2RVc2VkLCBkRGlnaXRzLCBhYmNkVXNlZCwgYkRpZ2l0cyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfYWJzU3ViKGREaWdpdHMsIGFiY2RVc2VkLCBiRGlnaXRzLCBhYmNkVXNlZCwgYkRpZ2l0cyk7CiAgICAgICAgICAgIGJJc05lZ2F0aXZlID0gIWJJc05lZ2F0aXZlICYmIChiX2NtcF9kICE9IDApOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfYWJzQWRkKGJEaWdpdHMsIGFiY2RVc2VkLCBkRGlnaXRzLCBhYmNkVXNlZCwgYkRpZ2l0cyk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIC8vIHYgLT0gdQogICAgICAgIF9hYnNTdWIodkRpZ2l0cywgbWF4VXNlZCwgdURpZ2l0cywgbWF4VXNlZCwgdkRpZ2l0cyk7CiAgICAgICAgaWYgKGFjKSB7CiAgICAgICAgICAvLyBjIC09IGEKICAgICAgICAgIGlmIChjSXNOZWdhdGl2ZSA9PSBhSXNOZWdhdGl2ZSkgewogICAgICAgICAgICB2YXIgY19jbXBfYSA9IF9jb21wYXJlRGlnaXRzKGNEaWdpdHMsIGFiY2RVc2VkLCBhRGlnaXRzLCBhYmNkVXNlZCk7CiAgICAgICAgICAgIGlmIChjX2NtcF9hID4gMCkgewogICAgICAgICAgICAgIF9hYnNTdWIoY0RpZ2l0cywgYWJjZFVzZWQsIGFEaWdpdHMsIGFiY2RVc2VkLCBjRGlnaXRzKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBfYWJzU3ViKGFEaWdpdHMsIGFiY2RVc2VkLCBjRGlnaXRzLCBhYmNkVXNlZCwgY0RpZ2l0cyk7CiAgICAgICAgICAgICAgY0lzTmVnYXRpdmUgPSAhY0lzTmVnYXRpdmUgJiYgKGNfY21wX2EgIT0gMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9hYnNBZGQoY0RpZ2l0cywgYWJjZFVzZWQsIGFEaWdpdHMsIGFiY2RVc2VkLCBjRGlnaXRzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gZCAtPSBiCiAgICAgICAgaWYgKGRJc05lZ2F0aXZlID09IGJJc05lZ2F0aXZlKSB7CiAgICAgICAgICB2YXIgZF9jbXBfYiA9IF9jb21wYXJlRGlnaXRzKGREaWdpdHMsIGFiY2RVc2VkLCBiRGlnaXRzLCBhYmNkVXNlZCk7CiAgICAgICAgICBpZiAoZF9jbXBfYiA+IDApIHsKICAgICAgICAgICAgX2Fic1N1YihkRGlnaXRzLCBhYmNkVXNlZCwgYkRpZ2l0cywgYWJjZFVzZWQsIGREaWdpdHMpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX2Fic1N1YihiRGlnaXRzLCBhYmNkVXNlZCwgZERpZ2l0cywgYWJjZFVzZWQsIGREaWdpdHMpOwogICAgICAgICAgICBkSXNOZWdhdGl2ZSA9ICFkSXNOZWdhdGl2ZSAmJiAoZF9jbXBfYiAhPSAwKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgX2Fic0FkZChkRGlnaXRzLCBhYmNkVXNlZCwgYkRpZ2l0cywgYWJjZFVzZWQsIGREaWdpdHMpOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyBFeGl0IGxvb3AgaWYgdSA9PSAwLgogICAgICB2YXIgaSA9IG1heFVzZWQ7CiAgICAgIHdoaWxlICgoaSA+IDApICYmICh1RGlnaXRzW2kgLSAxXSA9PSAwKSkgLS1pOwogICAgICBpZiAoaSA9PSAwKSBicmVhazsKICAgIH0KICAgIGlmICghaW52KSB7CiAgICAgIGlmIChzaGlmdEFtb3VudCA+IDApIHsKICAgICAgICBtYXhVc2VkID0gX2xTaGlmdERpZ2l0cyh2RGlnaXRzLCBtYXhVc2VkLCBzaGlmdEFtb3VudCwgdkRpZ2l0cyk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKGZhbHNlLCBtYXhVc2VkLCB2RGlnaXRzKTsKICAgIH0KICAgIC8vIE5vIGludmVyc2UgaWYgdiAhPSAxLgogICAgdmFyIGkgPSBtYXhVc2VkIC0gMTsKICAgIHdoaWxlICgoaSA+IDApICYmICh2RGlnaXRzW2ldID09IDApKSAtLWk7CiAgICBpZiAoKGkgIT0gMCkgfHwgKHZEaWdpdHNbMF0gIT0gMSkpIHsKICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiTm90IGNvcHJpbWUiKTsKICAgIH0KCiAgICBpZiAoZElzTmVnYXRpdmUpIHsKICAgICAgd2hpbGUgKChkRGlnaXRzW21heFVzZWRdICE9IDApIHx8CiAgICAgICAgICAoX2NvbXBhcmVEaWdpdHMoZERpZ2l0cywgbWF4VXNlZCwgeERpZ2l0cywgbWF4VXNlZCkgPiAwKSkgewogICAgICAgIC8vIGQgKz0geCwgZCBzdGlsbCBuZWdhdGl2ZQogICAgICAgIF9hYnNTdWIoZERpZ2l0cywgYWJjZFVzZWQsIHhEaWdpdHMsIG1heFVzZWQsIGREaWdpdHMpOwogICAgICB9CiAgICAgIC8vIGQgKz0geAogICAgICBfYWJzU3ViKHhEaWdpdHMsIG1heFVzZWQsIGREaWdpdHMsIG1heFVzZWQsIGREaWdpdHMpOwogICAgICBkSXNOZWdhdGl2ZSA9IGZhbHNlOwogICAgfSBlbHNlIHsKICAgICAgd2hpbGUgKChkRGlnaXRzW21heFVzZWRdICE9IDApIHx8CiAgICAgICAgICAoX2NvbXBhcmVEaWdpdHMoZERpZ2l0cywgbWF4VXNlZCwgeERpZ2l0cywgbWF4VXNlZCkgPj0gMCkpIHsKICAgICAgICAvLyBkIC09IHgKICAgICAgICBfYWJzU3ViKGREaWdpdHMsIGFiY2RVc2VkLCB4RGlnaXRzLCBtYXhVc2VkLCBkRGlnaXRzKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKGZhbHNlLCBtYXhVc2VkLCBkRGlnaXRzKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIG1vZHVsYXIgbXVsdGlwbGljYXRpdmUgaW52ZXJzZSBvZiB0aGlzIGJpZyBpbnRlZ2VyCiAgICogbW9kdWxvIFttb2R1bHVzXS4KICAgKgogICAqIFRoZSBbbW9kdWx1c10gbXVzdCBiZSBwb3NpdGl2ZS4KICAgKgogICAqIEl0IGlzIGFuIGVycm9yIGlmIG5vIG1vZHVsYXIgaW52ZXJzZSBleGlzdHMuCiAgICovCiAgLy8gUmV0dXJucyAxL3RoaXMgJSBtb2R1bHVzLCB3aXRoIG1vZHVsdXMgPiAwLgogIF9CaWdJbnRJbXBsIG1vZEludmVyc2UoQmlnSW50IGJpZ0ludCkgewogICAgX0JpZ0ludEltcGwgbW9kdWx1cyA9IGJpZ0ludDsKICAgIGlmIChtb2R1bHVzIDw9IHplcm8pIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIk1vZHVsdXMgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZTogJG1vZHVsdXMiKTsKICAgIH0KICAgIGlmIChtb2R1bHVzID09IG9uZSkgcmV0dXJuIHplcm87CiAgICB2YXIgdG1wID0gdGhpczsKICAgIGlmICh0bXAuX2lzTmVnYXRpdmUgfHwgKHRtcC5fYWJzQ29tcGFyZShtb2R1bHVzKSA+PSAwKSkgewogICAgICB0bXAgJT0gbW9kdWx1czsKICAgIH0KICAgIHJldHVybiBfYmluYXJ5R2NkKG1vZHVsdXMsIHRtcCwgdHJ1ZSk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiB0aGlzIGJpZyBpbnRlZ2VyIGFuZCBbb3RoZXJdLgogICAqCiAgICogSWYgZWl0aGVyIG51bWJlciBpcyBub24temVybywgdGhlIHJlc3VsdCBpcyB0aGUgbnVtZXJpY2FsbHkgZ3JlYXRlc3QKICAgKiBpbnRlZ2VyIGRpdmlkaW5nIGJvdGggYHRoaXNgIGFuZCBgb3RoZXJgLgogICAqCiAgICogVGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIGlzIGluZGVwZW5kZW50IG9mIHRoZSBvcmRlciwKICAgKiBzbyBgeC5nY2QoeSlgIGlzICBhbHdheXMgdGhlIHNhbWUgYXMgYHkuZ2NkKHgpYC4KICAgKgogICAqIEZvciBhbnkgaW50ZWdlciBgeGAsIGB4LmdjZCh4KWAgaXMgYHguYWJzKClgLgogICAqCiAgICogSWYgYm90aCBgdGhpc2AgYW5kIGBvdGhlcmAgaXMgemVybywgdGhlIHJlc3VsdCBpcyBhbHNvIHplcm8uCiAgICovCiAgX0JpZ0ludEltcGwgZ2NkKEJpZ0ludCBiaWdJbnQpIHsKICAgIF9CaWdJbnRJbXBsIG90aGVyID0gYmlnSW50OwogICAgaWYgKF9pc1plcm8pIHJldHVybiBvdGhlci5hYnMoKTsKICAgIGlmIChvdGhlci5faXNaZXJvKSByZXR1cm4gdGhpcy5hYnMoKTsKICAgIHJldHVybiBfYmluYXJ5R2NkKHRoaXMsIG90aGVyLCBmYWxzZSk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsZWFzdCBzaWduaWZpY2FudCBbd2lkdGhdIGJpdHMgb2YgdGhpcyBiaWcgaW50ZWdlciBhcyBhCiAgICogbm9uLW5lZ2F0aXZlIG51bWJlciAoaS5lLiB1bnNpZ25lZCByZXByZXNlbnRhdGlvbikuICBUaGUgcmV0dXJuZWQgdmFsdWUgaGFzCiAgICogemVyb3MgaW4gYWxsIGJpdCBwb3NpdGlvbnMgaGlnaGVyIHRoYW4gW3dpZHRoXS4KICAgKgogICAqIGBgYAogICAqIG5ldyBCaWdJbnQuZnJvbSgtMSkudG9VbnNpZ25lZCg1KSA9PSAzMSAgIC8vIDExMTExMTExICAtPiAgMDAwMTExMTEKICAgKiBgYGAKICAgKgogICAqIFRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1c2VkIHRvIHNpbXVsYXRlIGFyaXRobWV0aWMgZnJvbSBsb3cgbGV2ZWwgbGFuZ3VhZ2VzLgogICAqIEZvciBleGFtcGxlLCB0byBpbmNyZW1lbnQgYW4gOCBiaXQgcXVhbnRpdHk6CiAgICoKICAgKiBgYGAKICAgKiBxID0gKHEgKyAxKS50b1Vuc2lnbmVkKDgpOwogICAqIGBgYAogICAqCiAgICogYHFgIHdpbGwgY291bnQgZnJvbSBgMGAgdXAgdG8gYDI1NWAgYW5kIHRoZW4gd3JhcCBhcm91bmQgdG8gYDBgLgogICAqCiAgICogSWYgdGhlIGlucHV0IGZpdHMgaW4gW3dpZHRoXSBiaXRzIHdpdGhvdXQgdHJ1bmNhdGlvbiwgdGhlIHJlc3VsdCBpcyB0aGUKICAgKiBzYW1lIGFzIHRoZSBpbnB1dC4gIFRoZSBtaW5pbXVtIHdpZHRoIG5lZWRlZCB0byBhdm9pZCB0cnVuY2F0aW9uIG9mIGB4YCBpcwogICAqIGdpdmVuIGJ5IGB4LmJpdExlbmd0aGAsIGkuZS4KICAgKgogICAqIGBgYAogICAqIHggPT0geC50b1Vuc2lnbmVkKHguYml0TGVuZ3RoKTsKICAgKiBgYGAKICAgKi8KICBfQmlnSW50SW1wbCB0b1Vuc2lnbmVkKGludCB3aWR0aCkgewogICAgcmV0dXJuIHRoaXMgJiAoKG9uZSA8PCB3aWR0aCkgLSBvbmUpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgW3dpZHRoXSBiaXRzIG9mIHRoaXMgaW50ZWdlciwgZXh0ZW5kaW5nIHRoZQogICAqIGhpZ2hlc3QgcmV0YWluZWQgYml0IHRvIHRoZSBzaWduLiAgVGhpcyBpcyB0aGUgc2FtZSBhcyB0cnVuY2F0aW5nIHRoZSB2YWx1ZQogICAqIHRvIGZpdCBpbiBbd2lkdGhdIGJpdHMgdXNpbmcgYW4gc2lnbmVkIDItcyBjb21wbGVtZW50IHJlcHJlc2VudGF0aW9uLiAgVGhlCiAgICogcmV0dXJuZWQgdmFsdWUgaGFzIHRoZSBzYW1lIGJpdCB2YWx1ZSBpbiBhbGwgcG9zaXRpb25zIGhpZ2hlciB0aGFuIFt3aWR0aF0uCiAgICoKICAgKiBgYGAKICAgKiB2YXIgYmlnMTUgPSBuZXcgQmlnSW50LmZyb20oMTUpOwogICAqIHZhciBiaWcxNiA9IG5ldyBCaWdJbnQuZnJvbSgxNik7CiAgICogdmFyIGJpZzIzOSA9IG5ldyBCaWdJbnQuZnJvbSgyMzkpOwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWLS1zaWduIGJpdC1WCiAgICogYmlnMTYudG9TaWduZWQoNSkgPT0gLWJpZzE2ICAgLy8gIDAwMDEwMDAwIC0+IDExMTEwMDAwCiAgICogYmlnMjM5LnRvU2lnbmVkKDUpID09IGJpZzE1ICAgLy8gIDExMTAxMTExIC0+IDAwMDAxMTExCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgIF4KICAgKiBgYGAKICAgKgogICAqIFRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1c2VkIHRvIHNpbXVsYXRlIGFyaXRobWV0aWMgZnJvbSBsb3cgbGV2ZWwgbGFuZ3VhZ2VzLgogICAqIEZvciBleGFtcGxlLCB0byBpbmNyZW1lbnQgYW4gOCBiaXQgc2lnbmVkIHF1YW50aXR5OgogICAqCiAgICogYGBgCiAgICogcSA9IChxICsgMSkudG9TaWduZWQoOCk7CiAgICogYGBgCiAgICoKICAgKiBgcWAgd2lsbCBjb3VudCBmcm9tIGAwYCB1cCB0byBgMTI3YCwgd3JhcCB0byBgLTEyOGAgYW5kIGNvdW50IGJhY2sgdXAgdG8KICAgKiBgMTI3YC4KICAgKgogICAqIElmIHRoZSBpbnB1dCB2YWx1ZSBmaXRzIGluIFt3aWR0aF0gYml0cyB3aXRob3V0IHRydW5jYXRpb24sIHRoZSByZXN1bHQgaXMKICAgKiB0aGUgc2FtZSBhcyB0aGUgaW5wdXQuICBUaGUgbWluaW11bSB3aWR0aCBuZWVkZWQgdG8gYXZvaWQgdHJ1bmNhdGlvbiBvZiBgeGAKICAgKiBpcyBgeC5iaXRMZW5ndGggKyAxYCwgaS5lLgogICAqCiAgICogYGBgCiAgICogeCA9PSB4LnRvU2lnbmVkKHguYml0TGVuZ3RoICsgMSk7CiAgICogYGBgCiAgICovCiAgX0JpZ0ludEltcGwgdG9TaWduZWQoaW50IHdpZHRoKSB7CiAgICAvLyBUaGUgdmFsdWUgb2YgYmluYXJ5IG51bWJlciB3ZWlnaHRzIGVhY2ggYml0IGJ5IGEgcG93ZXIgb2YgdHdvLiAgVGhlCiAgICAvLyB0d29zLWNvbXBsZW1lbnQgdmFsdWUgd2VpZ2h0cyB0aGUgc2lnbiBiaXQgbmVnYXRpdmVseS4gIFdlIGNvbXB1dGUgdGhlCiAgICAvLyB2YWx1ZSBvZiB0aGUgbmVnYXRpdmUgd2VpZ2h0aW5nIGJ5IGlzb2xhdGluZyB0aGUgc2lnbiBiaXQgd2l0aCB0aGUKICAgIC8vIGNvcnJlY3QgcG93ZXIgb2YgdHdvIHdlaWdodGluZyBhbmQgc3VidHJhY3RpbmcgaXQgZnJvbSB0aGUgdmFsdWUgb2YgdGhlCiAgICAvLyBsb3dlciBiaXRzLgogICAgdmFyIHNpZ25NYXNrID0gb25lIDw8ICh3aWR0aCAtIDEpOwogICAgcmV0dXJuICh0aGlzICYgKHNpZ25NYXNrIC0gb25lKSkgLSAodGhpcyAmIHNpZ25NYXNrKTsKICB9CgogIGJvb2wgZ2V0IGlzVmFsaWRJbnQgewogICAgYXNzZXJ0KF9kaWdpdEJpdHMgPT0gMzIpOwogICAgcmV0dXJuIF91c2VkIDwgMiB8fAogICAgICAgIChfdXNlZCA9PSAyICYmCiAgICAgICAgICAgIChfZGlnaXRzWzFdIDwgMHg4MDAwMDAwMCB8fAogICAgICAgICAgICAgICAgKF9pc05lZ2F0aXZlICYmIF9kaWdpdHNbMV0gPT0gMHg4MDAwMDAwMCAmJiBfZGlnaXRzWzBdID09IDApKSk7CiAgfQoKICBpbnQgdG9JbnQoKSB7CiAgICBhc3NlcnQoX2RpZ2l0Qml0cyA9PSAzMik7CiAgICBpZiAoX3VzZWQgPT0gMCkgcmV0dXJuIDA7CiAgICBpZiAoX3VzZWQgPT0gMSkgcmV0dXJuIF9pc05lZ2F0aXZlID8gLV9kaWdpdHNbMF0gOiBfZGlnaXRzWzBdOwogICAgaWYgKF91c2VkID09IDIgJiYgX2RpZ2l0c1sxXSA8IDB4ODAwMDAwMDApIHsKICAgICAgdmFyIHJlc3VsdCA9IChfZGlnaXRzWzFdIDw8IF9kaWdpdEJpdHMpIHwgX2RpZ2l0c1swXTsKICAgICAgcmV0dXJuIF9pc05lZ2F0aXZlID8gLXJlc3VsdCA6IHJlc3VsdDsKICAgIH0KICAgIHJldHVybiBfaXNOZWdhdGl2ZSA/IF9taW5JbnQgOiBfbWF4SW50OwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGlzIFtfQmlnSW50SW1wbF0gYXMgYSBbZG91YmxlXS4KICAgKgogICAqIElmIHRoZSBudW1iZXIgaXMgbm90IHJlcHJlc2VudGFibGUgYXMgYSBbZG91YmxlXSwgYW4KICAgKiBhcHByb3hpbWF0aW9uIGlzIHJldHVybmVkLiBGb3IgbnVtZXJpY2FsbHkgbGFyZ2UgaW50ZWdlcnMsIHRoZQogICAqIGFwcHJveGltYXRpb24gbWF5IGJlIGluZmluaXRlLgogICAqLwogIGRvdWJsZSB0b0RvdWJsZSgpIHsKICAgIGNvbnN0IGludCBleHBvbmVudEJpYXMgPSAxMDc1OwogICAgLy8gVGhlcmUgYXJlIDExIGJpdHMgZm9yIHRoZSBleHBvbmVudC4KICAgIC8vIDIwNDcgKGFsbCBiaXRzIHNldCB0byAxKSBpcyByZXNlcnZlZCBmb3IgaW5maW5pdHkgYW5kIE5hTi4KICAgIC8vIFdoZW4gc3RvcmluZyB0aGUgZXhwb25lbnQgaW4gdGhlIDExIGJpdHMsIGl0IGlzIGJpYXNlZCBieSBleHBvbmVudEJpYXMKICAgIC8vIHRvIHN1cHBvcnQgbmVnYXRpdmUgZXhwb25lbnRzLgogICAgY29uc3QgaW50IG1heERvdWJsZUV4cG9uZW50ID0gMjA0NiAtIGV4cG9uZW50QmlhczsKICAgIGlmIChfaXNaZXJvKSByZXR1cm4gMC4wOwoKICAgIC8vIFdlIGZpbGwgdGhlIDUzIGJpdHMgbGl0dGxlLWVuZGlhbi4KICAgIHZhciByZXN1bHRCaXRzID0gbmV3IFVpbnQ4TGlzdCg4KTsKCiAgICB2YXIgbGVuZ3RoID0gX2RpZ2l0Qml0cyAqIChfdXNlZCAtIDEpICsgX2RpZ2l0c1tfdXNlZCAtIDFdLmJpdExlbmd0aDsKICAgIGlmIChsZW5ndGggPiBtYXhEb3VibGVFeHBvbmVudCArIDUzKSB7CiAgICAgIHJldHVybiBfaXNOZWdhdGl2ZSA/IGRvdWJsZS5uZWdhdGl2ZUluZmluaXR5IDogZG91YmxlLmluZmluaXR5OwogICAgfQoKICAgIC8vIFRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBpcyBmb3IgdGhlIHNpZ24uCiAgICBpZiAoX2lzTmVnYXRpdmUpIHJlc3VsdEJpdHNbN10gPSAweDgwOwoKICAgIC8vIFdyaXRlIHRoZSBleHBvbmVudCBpbnRvIGJpdHMgMS4uMTI6CiAgICB2YXIgYmlhc2VkRXhwb25lbnQgPSBsZW5ndGggLSA1MyArIGV4cG9uZW50QmlhczsKICAgIHJlc3VsdEJpdHNbNl0gPSAoYmlhc2VkRXhwb25lbnQgJiAweEYpIDw8IDQ7CiAgICByZXN1bHRCaXRzWzddIHw9IGJpYXNlZEV4cG9uZW50ID4+IDQ7CgogICAgaW50IGNhY2hlZEJpdHMgPSAwOwogICAgaW50IGNhY2hlZEJpdHNMZW5ndGggPSAwOwogICAgaW50IGRpZ2l0SW5kZXggPSBfdXNlZCAtIDE7CiAgICBpbnQgcmVhZEJpdHMoaW50IG4pIHsKICAgICAgLy8gRW5zdXJlIHRoYXQgd2UgaGF2ZSBlbm91Z2ggYml0cyBpbiBbY2FjaGVkQml0c10uCiAgICAgIHdoaWxlIChjYWNoZWRCaXRzTGVuZ3RoIDwgbikgewogICAgICAgIGludCBuZXh0RGlnaXQ7CiAgICAgICAgaW50IG5leHREaWdpdExlbmd0aCA9IF9kaWdpdEJpdHM7IC8vIE1heSBnZXQgdXBkYXRlZC4KICAgICAgICBpZiAoZGlnaXRJbmRleCA8IDApIHsKICAgICAgICAgIG5leHREaWdpdCA9IDA7CiAgICAgICAgICBkaWdpdEluZGV4LS07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG5leHREaWdpdCA9IF9kaWdpdHNbZGlnaXRJbmRleF07CiAgICAgICAgICBpZiAoZGlnaXRJbmRleCA9PSBfdXNlZCAtIDEpIG5leHREaWdpdExlbmd0aCA9IG5leHREaWdpdC5iaXRMZW5ndGg7CiAgICAgICAgICBkaWdpdEluZGV4LS07CiAgICAgICAgfQogICAgICAgIGNhY2hlZEJpdHMgPSAoY2FjaGVkQml0cyA8PCBuZXh0RGlnaXRMZW5ndGgpICsgbmV4dERpZ2l0OwogICAgICAgIGNhY2hlZEJpdHNMZW5ndGggKz0gbmV4dERpZ2l0TGVuZ3RoOwogICAgICB9CiAgICAgIC8vIFJlYWQgdGhlIHRvcCBbbl0gYml0cy4KICAgICAgdmFyIHJlc3VsdCA9IGNhY2hlZEJpdHMgPj4gKGNhY2hlZEJpdHNMZW5ndGggLSBuKTsKICAgICAgLy8gUmVtb3ZlIHRoZSBiaXRzIGZyb20gdGhlIGNhY2hlLgogICAgICBjYWNoZWRCaXRzIC09IHJlc3VsdCA8PCAoY2FjaGVkQml0c0xlbmd0aCAtIG4pOwogICAgICBjYWNoZWRCaXRzTGVuZ3RoIC09IG47CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgLy8gVGhlIGZpcnN0IGxlYWRpbmcgMSBiaXQgaXMgaW1wbGljaXQgaW4gdGhlIGRvdWJsZS1yZXByZXNlbnRhdGlvbiBhbmQgY2FuCiAgICAvLyBiZSBkaXNjYXJkZWQuCiAgICB2YXIgbGVhZGluZ0JpdHMgPSByZWFkQml0cyg1KSAmIDB4RjsKICAgIHJlc3VsdEJpdHNbNl0gfD0gbGVhZGluZ0JpdHM7CgogICAgZm9yIChpbnQgaSA9IDU7IGkgPj0gMDsgaS0tKSB7CiAgICAgIC8vIEdldCB0aGUgcmVtYWluaW5nIDQ4IGJpdHMuCiAgICAgIHJlc3VsdEJpdHNbaV0gPSByZWFkQml0cyg4KTsKICAgIH0KCiAgICB2b2lkIHJvdW5kVXAoKSB7CiAgICAgIC8vIFNpbXBseSBjb25zaXN0cyBvZiBhZGRpbmcgMSB0byB0aGUgd2hvbGUgNjQgYml0ICJudW1iZXIiLgogICAgICAvLyBJdCB3aWxsIHVwZGF0ZSB0aGUgZXhwb25lbnQsIGlmIG5lY2Vzc2FyeS4KICAgICAgLy8gSXQgbWlnaHQgZXZlbiByb3VuZCB1cCB0byBpbmZpbml0eSAod2hpY2ggaXMgd2hhdCB3ZSB3YW50KS4KICAgICAgdmFyIGNhcnJ5ID0gMTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKICAgICAgICBpZiAoY2FycnkgPT0gMCkgYnJlYWs7CiAgICAgICAgdmFyIHN1bSA9IHJlc3VsdEJpdHNbaV0gKyBjYXJyeTsKICAgICAgICByZXN1bHRCaXRzW2ldID0gc3VtICYgMHhGRjsKICAgICAgICBjYXJyeSA9IHN1bSA+PiA4OwogICAgICB9CiAgICB9CgogICAgaWYgKHJlYWRCaXRzKDEpID09IDEpIHsKICAgICAgaWYgKHJlc3VsdEJpdHNbMF0uaXNPZGQpIHsKICAgICAgICAvLyBSb3VuZHMgdG8gZXZlbiBhbGwgdGhlIHRpbWUuCiAgICAgICAgcm91bmRVcCgpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFJvdW5kIHVwLCBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgb3RoZXIgZGlnaXQgdGhhdCBpcyBub3QgMC4KICAgICAgICBpZiAoY2FjaGVkQml0cyAhPSAwKSB7CiAgICAgICAgICAvLyBUaGVyZSBpcyBhbHJlYWR5IG9uZSBpbiB0aGUgY2FjaGVkQml0cy4KICAgICAgICAgIHJvdW5kVXAoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZm9yIChpbnQgaSA9IGRpZ2l0SW5kZXg7IGRpZ2l0SW5kZXggPj0gMDsgaS0tKSB7CiAgICAgICAgICAgIGlmIChfZGlnaXRzW2ldICE9IDApIHsKICAgICAgICAgICAgICByb3VuZFVwKCk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHRCaXRzLmJ1ZmZlci5hc0J5dGVEYXRhKCkuZ2V0RmxvYXQ2NCgwLCBFbmRpYW4ubGl0dGxlKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBTdHJpbmctcmVwcmVzZW50YXRpb24gb2YgdGhpcyBpbnRlZ2VyLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmluZyBpcyBwYXJzYWJsZSBieSBbcGFyc2VdLgogICAqIEZvciBhbnkgYF9CaWdJbnRJbXBsYCBgaWAsIGl0IGlzIGd1YXJhbnRlZWQgdGhhdAogICAqIGBpID09IF9CaWdJbnRJbXBsLnBhcnNlKGkudG9TdHJpbmcoKSlgLgogICAqLwogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGlmIChfdXNlZCA9PSAwKSByZXR1cm4gIjAiOwogICAgaWYgKF91c2VkID09IDEpIHsKICAgICAgaWYgKF9pc05lZ2F0aXZlKSByZXR1cm4gKC1fZGlnaXRzWzBdKS50b1N0cmluZygpOwogICAgICByZXR1cm4gX2RpZ2l0c1swXS50b1N0cmluZygpOwogICAgfQoKICAgIC8vIEdlbmVyYXRlIGluIGNodW5rcyBvZiA5IGRpZ2l0cy4KICAgIC8vIFRoZSBjaHVua3MgYXJlIGluIHJldmVyc2VkIG9yZGVyLgogICAgdmFyIGRlY2ltYWxEaWdpdENodW5rcyA9IDxTdHJpbmc+W107CiAgICB2YXIgcmVzdCA9IGlzTmVnYXRpdmUgPyAtdGhpcyA6IHRoaXM7CiAgICB3aGlsZSAocmVzdC5fdXNlZCA+IDEpIHsKICAgICAgdmFyIGRpZ2l0czkgPSByZXN0LnJlbWFpbmRlcihfb25lQmlsbGlvbikudG9TdHJpbmcoKTsKICAgICAgZGVjaW1hbERpZ2l0Q2h1bmtzLmFkZChkaWdpdHM5KTsKICAgICAgdmFyIHplcm9zID0gOSAtIGRpZ2l0czkubGVuZ3RoOwogICAgICBpZiAoemVyb3MgPT0gOCkgewogICAgICAgIGRlY2ltYWxEaWdpdENodW5rcy5hZGQoIjAwMDAwMDAwIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHplcm9zID49IDQpIHsKICAgICAgICAgIHplcm9zIC09IDQ7CiAgICAgICAgICBkZWNpbWFsRGlnaXRDaHVua3MuYWRkKCIwMDAwIik7CiAgICAgICAgfQogICAgICAgIGlmICh6ZXJvcyA+PSAyKSB7CiAgICAgICAgICB6ZXJvcyAtPSAyOwogICAgICAgICAgZGVjaW1hbERpZ2l0Q2h1bmtzLmFkZCgiMDAiKTsKICAgICAgICB9CiAgICAgICAgaWYgKHplcm9zID49IDEpIHsKICAgICAgICAgIGRlY2ltYWxEaWdpdENodW5rcy5hZGQoIjAiKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmVzdCA9IHJlc3Qgfi8gX29uZUJpbGxpb247CiAgICB9CiAgICBkZWNpbWFsRGlnaXRDaHVua3MuYWRkKHJlc3QuX2RpZ2l0c1swXS50b1N0cmluZygpKTsKICAgIGlmIChfaXNOZWdhdGl2ZSkgZGVjaW1hbERpZ2l0Q2h1bmtzLmFkZCgiLSIpOwogICAgcmV0dXJuIGRlY2ltYWxEaWdpdENodW5rcy5yZXZlcnNlZC5qb2luKCk7CiAgfQoKICBpbnQgX3RvUmFkaXhDb2RlVW5pdChpbnQgZGlnaXQpIHsKICAgIGNvbnN0IGludCBfMCA9IDQ4OwogICAgY29uc3QgaW50IF9hID0gOTc7CiAgICBpZiAoZGlnaXQgPCAxMCkgcmV0dXJuIF8wICsgZGlnaXQ7CiAgICByZXR1cm4gX2EgKyBkaWdpdCAtIDEwOwogIH0KCiAgLyoqCiAgICogQ29udmVydHMgW3RoaXNdIHRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGluIHRoZSBnaXZlbiBbcmFkaXhdLgogICAqCiAgICogSW4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiwgbG93ZXItY2FzZSBsZXR0ZXJzIGFyZSB1c2VkIGZvciBkaWdpdHMgYWJvdmUKICAgKiAnOScsIHdpdGggJ2EnIGJlaW5nIDEwIGFuICd6JyBiZWluZyAzNS4KICAgKgogICAqIFRoZSBbcmFkaXhdIGFyZ3VtZW50IG11c3QgYmUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgMiB0byAzNi4KICAgKi8KICBTdHJpbmcgdG9SYWRpeFN0cmluZyhpbnQgcmFkaXgpIHsKICAgIGlmIChyYWRpeCA+IDM2KSB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShyYWRpeCwgMiwgMzYpOwoKICAgIGlmIChfdXNlZCA9PSAwKSByZXR1cm4gIjAiOwoKICAgIGlmIChfdXNlZCA9PSAxKSB7CiAgICAgIHZhciBkaWdpdFN0cmluZyA9IF9kaWdpdHNbMF0udG9SYWRpeFN0cmluZyhyYWRpeCk7CiAgICAgIGlmIChfaXNOZWdhdGl2ZSkgcmV0dXJuICItIiArIGRpZ2l0U3RyaW5nOwogICAgICByZXR1cm4gZGlnaXRTdHJpbmc7CiAgICB9CgogICAgaWYgKHJhZGl4ID09IDE2KSByZXR1cm4gX3RvSGV4U3RyaW5nKCk7CgogICAgdmFyIGJhc2UgPSBuZXcgX0JpZ0ludEltcGwuX2Zyb21JbnQocmFkaXgpOwogICAgdmFyIHJldmVyc2VkRGlnaXRDb2RlVW5pdHMgPSA8aW50PltdOwogICAgdmFyIHJlc3QgPSB0aGlzLmFicygpOwogICAgd2hpbGUgKCFyZXN0Ll9pc1plcm8pIHsKICAgICAgdmFyIGRpZ2l0ID0gcmVzdC5yZW1haW5kZXIoYmFzZSkudG9JbnQoKTsKICAgICAgcmVzdCA9IHJlc3Qgfi8gYmFzZTsKICAgICAgcmV2ZXJzZWREaWdpdENvZGVVbml0cy5hZGQoX3RvUmFkaXhDb2RlVW5pdChkaWdpdCkpOwogICAgfQogICAgdmFyIGRpZ2l0U3RyaW5nID0gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKHJldmVyc2VkRGlnaXRDb2RlVW5pdHMucmV2ZXJzZWQpOwogICAgaWYgKF9pc05lZ2F0aXZlKSByZXR1cm4gIi0iICsgZGlnaXRTdHJpbmc7CiAgICByZXR1cm4gZGlnaXRTdHJpbmc7CiAgfQoKICBTdHJpbmcgX3RvSGV4U3RyaW5nKCkgewogICAgdmFyIGNoYXJzID0gPGludD5bXTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX3VzZWQgLSAxOyBpKyspIHsKICAgICAgaW50IGNodW5rID0gX2RpZ2l0c1tpXTsKICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAoX2RpZ2l0Qml0cyB+LyA0KTsgaisrKSB7CiAgICAgICAgY2hhcnMuYWRkKF90b1JhZGl4Q29kZVVuaXQoY2h1bmsgJiAweEYpKTsKICAgICAgICBjaHVuayA+Pj0gNDsKICAgICAgfQogICAgfQogICAgdmFyIG1zYkNodW5rID0gX2RpZ2l0c1tfdXNlZCAtIDFdOwogICAgd2hpbGUgKG1zYkNodW5rICE9IDApIHsKICAgICAgY2hhcnMuYWRkKF90b1JhZGl4Q29kZVVuaXQobXNiQ2h1bmsgJiAweEYpKTsKICAgICAgbXNiQ2h1bmsgPj49IDQ7CiAgICB9CiAgICBpZiAoX2lzTmVnYXRpdmUpIHsKICAgICAgY29uc3QgX2Rhc2ggPSA0NTsKICAgICAgY2hhcnMuYWRkKF9kYXNoKTsKICAgIH0KICAgIHJldHVybiBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoY2hhcnMucmV2ZXJzZWQpOwogIH0KfQoKLy8gSW50ZXJmYWNlIGZvciBtb2R1bGFyIHJlZHVjdGlvbi4KYWJzdHJhY3QgY2xhc3MgX0JpZ0ludFJlZHVjdGlvbiB7CiAgaW50IGdldCBfbm9ybU1vZHVsdXNVc2VkOwogIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGRpZ2l0cyB1c2VkIGJ5IHJlc3VsdERpZ2l0cy4KICBpbnQgX2NvbnZlcnQoX0JpZ0ludEltcGwgeCwgVWludDMyTGlzdCByZXN1bHREaWdpdHMpOwogIGludCBfbXVsKFVpbnQzMkxpc3QgeERpZ2l0cywgaW50IHhVc2VkLCBVaW50MzJMaXN0IHlEaWdpdHMsIGludCB5VXNlZCwKICAgICAgVWludDMyTGlzdCByZXN1bHREaWdpdHMpOwogIGludCBfc3FyKFVpbnQzMkxpc3QgeERpZ2l0cywgaW50IHhVc2VkLCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cyk7CgogIC8vIFJldHVybiB4IHJldmVydGVkIHRvIF9CaWdJbnRJbXBsLgogIF9CaWdJbnRJbXBsIF9yZXZlcnQoVWludDMyTGlzdCB4RGlnaXRzLCBpbnQgeFVzZWQpOwp9CgovLyBNb250Z29tZXJ5IHJlZHVjdGlvbiBvbiBfQmlnSW50SW1wbC4KY2xhc3MgX0JpZ0ludE1vbnRnb21lcnlSZWR1Y3Rpb24gaW1wbGVtZW50cyBfQmlnSW50UmVkdWN0aW9uIHsKICBmaW5hbCBfQmlnSW50SW1wbCBfbW9kdWx1czsKICBpbnQgX25vcm1Nb2R1bHVzVXNlZDsgLy8gRXZlbiBpZiBwcm9jZXNzaW5nIDY0LWJpdCAoZGlnaXQgcGFpcnMpLgogIFVpbnQzMkxpc3QgX21vZHVsdXNEaWdpdHM7CiAgVWludDMyTGlzdCBfYXJnczsKICBpbnQgX2RpZ2l0c1BlclN0ZXA7IC8vIE51bWJlciBvZiBkaWdpdHMgcHJvY2Vzc2VkIGluIG9uZSBzdGVwLiAxIG9yIDIuCiAgc3RhdGljIGNvbnN0IGludCBfeERpZ2l0ID0gMDsgLy8gSW5kZXggb2YgZGlnaXQgb2YgeC4KICBzdGF0aWMgY29uc3QgaW50IF94SGlnaERpZ2l0ID0gMTsgLy8gSW5kZXggb2YgaGlnaCBkaWdpdCBvZiB4ICg2NC1iaXQgb25seSkuCiAgc3RhdGljIGNvbnN0IGludCBfcmhvRGlnaXQgPSAyOyAvLyBJbmRleCBvZiBkaWdpdCBvZiByaG8uCiAgc3RhdGljIGNvbnN0IGludCBfcmhvSGlnaERpZ2l0ID0gMzsgLy8gSW5kZXggb2YgaGlnaCBkaWdpdCBvZiByaG8gKDY0LWJpdCkuCiAgc3RhdGljIGNvbnN0IGludCBfbXVEaWdpdCA9IDQ7IC8vIEluZGV4IG9mIG11LgogIHN0YXRpYyBjb25zdCBpbnQgX211SGlnaERpZ2l0ID0gNTsgLy8gSW5kZXggb2YgaGlnaCAzMi1iaXRzIG9mIG11ICg2NC1iaXQpLgoKICBfQmlnSW50TW9udGdvbWVyeVJlZHVjdGlvbih0aGlzLl9tb2R1bHVzKSB7CiAgICBfbW9kdWx1c0RpZ2l0cyA9IF9tb2R1bHVzLl9kaWdpdHM7CiAgICBfYXJncyA9IF9uZXdEaWdpdHMoNik7CiAgICAvLyBEZXRlcm1pbmUgaWYgd2UgY2FuIHByb2Nlc3MgZGlnaXQgcGFpcnMgYnkgY2FsbGluZyBhbiBpbnRyaW5zaWMuCiAgICBfZGlnaXRzUGVyU3RlcCA9IF9tdWxNb2QoX2FyZ3MsIF9hcmdzLCAwKTsKICAgIF9hcmdzW194RGlnaXRdID0gX21vZHVsdXNEaWdpdHNbMF07CiAgICBpZiAoX2RpZ2l0c1BlclN0ZXAgPT0gMSkgewogICAgICBfbm9ybU1vZHVsdXNVc2VkID0gX21vZHVsdXMuX3VzZWQ7CiAgICAgIF9pbnZEaWdpdChfYXJncyk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoX2RpZ2l0c1BlclN0ZXAgPT0gMik7CiAgICAgIF9ub3JtTW9kdWx1c1VzZWQgPSBfbW9kdWx1cy5fdXNlZCArIChfbW9kdWx1cy5fdXNlZCAmIDEpOwogICAgICBfYXJnc1tfeEhpZ2hEaWdpdF0gPSBfbW9kdWx1c0RpZ2l0c1sxXTsKICAgICAgX2ludkRpZ2l0UGFpcihfYXJncyk7CiAgICB9CiAgfQoKICAvLyBDYWxjdWxhdGVzIC0xL3ggJSBfZGlnaXRCYXNlLCB4IGlzIDMyLWJpdCBkaWdpdC4KICAvLyAgICAgICAgIHh5ID09IDEgKG1vZCBtKQogIC8vICAgICAgICAgeHkgPSAgMStrbQogIC8vICAgeHkoMi14eSkgPSAoMStrbSkoMS1rbSkKICAvLyB4KHkoMi14eSkpID0gMS1rXjIgbV4yCiAgLy8geCh5KDIteHkpKSA9PSAxIChtb2QgbV4yKQogIC8vIGlmIHkgaXMgMS94IG1vZCBtLCB0aGVuIHkoMi14eSkgaXMgMS94IG1vZCBtXjIKICAvLyBTaG91bGQgcmVkdWNlIHggYW5kIHkoMi14eSkgYnkgbV4yIGF0IGVhY2ggc3RlcCB0byBrZWVwIHNpemUgYm91bmRlZC4KICAvLwogIC8vIE9wZXJhdGlvbjoKICAvLyAgIGFyZ3NbX3Job0RpZ2l0XSA9IDEvYXJnc1tfeERpZ2l0XSBtb2QgX2RpZ2l0QmFzZS4KICBzdGF0aWMgdm9pZCBfaW52RGlnaXQoVWludDMyTGlzdCBhcmdzKSB7CiAgICB2YXIgeCA9IGFyZ3NbX3hEaWdpdF07CiAgICB2YXIgeSA9IHggJiAzOyAvLyB5ID09IDEveCBtb2QgMl4yCiAgICB5ID0gKHkgKiAoMiAtICh4ICYgMHhmKSAqIHkpKSAmIDB4ZjsgLy8geSA9PSAxL3ggbW9kIDJeNAogICAgeSA9ICh5ICogKDIgLSAoeCAmIDB4ZmYpICogeSkpICYgMHhmZjsgLy8geSA9PSAxL3ggbW9kIDJeOAogICAgeSA9ICh5ICogKDIgLSAoKCh4ICYgMHhmZmZmKSAqIHkpICYgMHhmZmZmKSkpICYgMHhmZmZmOyAvLyB5ID09IDEveCBtb2QgMl4xNgogICAgeSA9ICh5ICogKDIgLSB4ICogeSAlIF9CaWdJbnRJbXBsLl9kaWdpdEJhc2UpKSAlIF9CaWdJbnRJbXBsLl9kaWdpdEJhc2U7CiAgICAvLyB5ID09IDEveCBtb2QgX2RpZ2l0QmFzZQogICAgeSA9IC15OyAvLyBXZSByZWFsbHkgd2FudCB0aGUgbmVnYXRpdmUgaW52ZXJzZS4KICAgIGFyZ3NbX3Job0RpZ2l0XSA9IHkgJiBfQmlnSW50SW1wbC5fZGlnaXRNYXNrOwogICAgYXNzZXJ0KCgoeCAqIHkpICYgX0JpZ0ludEltcGwuX2RpZ2l0TWFzaykgPT0gX0JpZ0ludEltcGwuX2RpZ2l0TWFzayk7CiAgfQoKICAvLyBDYWxjdWxhdGVzIC0xL3ggJSBfZGlnaXRCYXNlXjIsIHggaXMgYSBwYWlyIG9mIDMyLWJpdCBkaWdpdHMuCiAgLy8gT3BlcmF0aW9uOgogIC8vICAgYXJnc1tfcmhvRGlnaXQuLl9yaG9IaWdoRGlnaXRdID0KICAvLyAgICAgMS9hcmdzW194RGlnaXQuLl94SGlnaERpZ2l0XSBtb2QgX2RpZ2l0QmFzZV4yLgogIHN0YXRpYyB2b2lkIF9pbnZEaWdpdFBhaXIoVWludDMyTGlzdCBhcmdzKSB7CiAgICB2YXIgeGwgPSBhcmdzW194RGlnaXRdOyAvLyBMb3dlciAzMi1iaXQgZGlnaXQgb2YgeC4KICAgIHZhciB5ID0geGwgJiAzOyAvLyB5ID09IDEveCBtb2QgMl4yCiAgICB5ID0gKHkgKiAoMiAtICh4bCAmIDB4ZikgKiB5KSkgJiAweGY7IC8vIHkgPT0gMS94IG1vZCAyXjQKICAgIHkgPSAoeSAqICgyIC0gKHhsICYgMHhmZikgKiB5KSkgJiAweGZmOyAvLyB5ID09IDEveCBtb2QgMl44CiAgICB5ID0gKHkgKiAoMiAtICgoKHhsICYgMHhmZmZmKSAqIHkpICYgMHhmZmZmKSkpICYgMHhmZmZmOwogICAgLy8geSA9PSAxL3ggbW9kIDJeMTYKICAgIHkgPSAoeSAqICgyIC0gKCh4bCAqIHkpICYgMHhmZmZmZmZmZikpKSAmIDB4ZmZmZmZmZmY7IC8vIHkgPT0gMS94IG1vZCAyXjMyCiAgICB2YXIgeCA9IChhcmdzW194SGlnaERpZ2l0XSA8PCBfQmlnSW50SW1wbC5fZGlnaXRCaXRzKSB8IHhsOwogICAgeSAqPSAyIC0geCAqIHk7IC8vIE1hc2tpbmcgd2l0aCAyXjY0LTEgaXMgaW1wbGllZCBieSA2NC1iaXQgYXJpdGhtZXRpYy4KICAgIC8vIHkgPT0gMS94IG1vZCBfZGlnaXRCYXNlXjIKICAgIHkgPSAteTsgLy8gV2UgcmVhbGx5IHdhbnQgdGhlIG5lZ2F0aXZlIGludmVyc2UuCiAgICBhcmdzW19yaG9EaWdpdF0gPSB5ICYgX0JpZ0ludEltcGwuX2RpZ2l0TWFzazsKICAgIGFyZ3NbX3Job0hpZ2hEaWdpdF0gPQogICAgICAgICh5ID4+IF9CaWdJbnRJbXBsLl9kaWdpdEJpdHMpICYgX0JpZ0ludEltcGwuX2RpZ2l0TWFzazsKICAgIGFzc2VydCh4ICogeSA9PSAtMSk7CiAgfQoKICAvLyBPcGVyYXRpb246CiAgLy8gICBhcmdzW19tdURpZ2l0XSA9IGFyZ3NbX3Job0RpZ2l0XSpkaWdpdHNbaV0gbW9kIF9kaWdpdEJhc2UuCiAgLy8gICBSZXR1cm5zIDEuCiAgLy8gTm90ZTogSW50cmluc2ljcyBvbiA2NC1iaXQgcGxhdGZvcm1zIHByb2Nlc3MgZGlnaXQgcGFpcnMgYXQgZXZlbiBpbmRpY2VzOgogIC8vICAgYXJnc1tfbXVEaWdpdC4uX211SGlnaERpZ2l0XSA9CiAgLy8gICAgIGFyZ3NbX3Job0RpZ2l0Li5fcmhvSGlnaERpZ2l0XSAqIGRpZ2l0c1tpLi5pKzFdIG1vZCBfZGlnaXRCYXNlXjIuCiAgLy8gICBSZXR1cm5zIDIuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgc3RhdGljIGludCBfbXVsTW9kKFVpbnQzMkxpc3QgYXJncywgVWludDMyTGlzdCBkaWdpdHMsIGludCBpKSB7CiAgICB2YXIgcmhvbCA9IGFyZ3NbX3Job0RpZ2l0XSAmIF9CaWdJbnRJbXBsLl9oYWxmRGlnaXRNYXNrOwogICAgdmFyIHJob2ggPSBhcmdzW19yaG9EaWdpdF0gPj4gX0JpZ0ludEltcGwuX2hhbGZEaWdpdEJpdHM7CiAgICB2YXIgZGggPSBkaWdpdHNbaV0gPj4gX0JpZ0ludEltcGwuX2hhbGZEaWdpdEJpdHM7CiAgICB2YXIgZGwgPSBkaWdpdHNbaV0gJiBfQmlnSW50SW1wbC5faGFsZkRpZ2l0TWFzazsKICAgIGFyZ3NbX211RGlnaXRdID0gKGRsICogcmhvbCArCiAgICAgICAgICAgICgoKGRsICogcmhvaCArIGRoICogcmhvbCkgJiBfQmlnSW50SW1wbC5faGFsZkRpZ2l0TWFzaykgPDwKICAgICAgICAgICAgICAgIF9CaWdJbnRJbXBsLl9oYWxmRGlnaXRCaXRzKSkgJgogICAgICAgIF9CaWdJbnRJbXBsLl9kaWdpdE1hc2s7CiAgICByZXR1cm4gMTsKICB9CgogIC8vIHJlc3VsdCA9IHgqUiBtb2QgX21vZHVsdXMuCiAgLy8gUmV0dXJucyByZXN1bHRVc2VkLgogIGludCBfY29udmVydChfQmlnSW50SW1wbCB4LCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgLy8gTW9udGdvbWVyeSByZWR1Y3Rpb24gb25seSB3b3JrcyBpZiBhYnMoeCkgPCBfbW9kdWx1cy4KICAgIGFzc2VydCh4LmFicygpIDwgX21vZHVsdXMpOwogICAgYXNzZXJ0KF9kaWdpdHNQZXJTdGVwID09IDEgfHwgX25vcm1Nb2R1bHVzVXNlZC5pc0V2ZW4pOwogICAgdmFyIHJlc3VsdCA9IHguYWJzKCkuX2RsU2hpZnQoX25vcm1Nb2R1bHVzVXNlZCkuX3JlbShfbW9kdWx1cyk7CiAgICBpZiAoeC5faXNOZWdhdGl2ZSAmJiAhcmVzdWx0Ll9pc05lZ2F0aXZlICYmIHJlc3VsdC5fdXNlZCA+IDApIHsKICAgICAgcmVzdWx0ID0gX21vZHVsdXMgLSByZXN1bHQ7CiAgICB9CiAgICB2YXIgdXNlZCA9IHJlc3VsdC5fdXNlZDsKICAgIHZhciBkaWdpdHMgPSByZXN1bHQuX2RpZ2l0czsKICAgIHZhciBpID0gdXNlZCArICh1c2VkICYgMSk7CiAgICB3aGlsZSAoLS1pID49IDApIHsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gZGlnaXRzW2ldOwogICAgfQogICAgcmV0dXJuIHVzZWQ7CiAgfQoKICBfQmlnSW50SW1wbCBfcmV2ZXJ0KFVpbnQzMkxpc3QgeERpZ2l0cywgaW50IHhVc2VkKSB7CiAgICAvLyBSZXNlcnZlIGVub3VnaCBkaWdpdHMgZm9yIG1vZHVsdXMgc3F1YXJpbmcgYW5kIGFjY3VtdWxhdG9yIGNhcnJ5LgogICAgdmFyIHJlc3VsdERpZ2l0cyA9IF9uZXdEaWdpdHMoMiAqIF9ub3JtTW9kdWx1c1VzZWQgKyAyKTsKICAgIHZhciBpID0geFVzZWQgKyAoeFVzZWQgJiAxKTsKICAgIHdoaWxlICgtLWkgPj0gMCkgewogICAgICByZXN1bHREaWdpdHNbaV0gPSB4RGlnaXRzW2ldOwogICAgfQogICAgdmFyIHJlc3VsdFVzZWQgPSBfcmVkdWNlKHJlc3VsdERpZ2l0cywgeFVzZWQpOwogICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKGZhbHNlLCByZXN1bHRVc2VkLCByZXN1bHREaWdpdHMpOwogIH0KCiAgLy8geCA9IHgvUiBtb2QgX21vZHVsdXMuCiAgLy8gUmV0dXJucyB4VXNlZC4KICBpbnQgX3JlZHVjZShVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCkgewogICAgd2hpbGUgKHhVc2VkIDwgMiAqIF9ub3JtTW9kdWx1c1VzZWQgKyAyKSB7CiAgICAgIC8vIFBhZCB4IHNvIF9tdWxBZGQgaGFzIGVub3VnaCByb29tIGxhdGVyIGZvciBhIHBvc3NpYmxlIGNhcnJ5LgogICAgICB4RGlnaXRzW3hVc2VkKytdID0gMDsKICAgIH0KICAgIHZhciBpID0gMDsKICAgIHdoaWxlIChpIDwgX25vcm1Nb2R1bHVzVXNlZCkgewogICAgICB2YXIgZCA9IF9tdWxNb2QoX2FyZ3MsIHhEaWdpdHMsIGkpOwogICAgICBhc3NlcnQoZCA9PSBfZGlnaXRzUGVyU3RlcCk7CiAgICAgIGQgPSBfQmlnSW50SW1wbC5fbXVsQWRkKAogICAgICAgICAgX2FyZ3MsIF9tdURpZ2l0LCBfbW9kdWx1c0RpZ2l0cywgMCwgeERpZ2l0cywgaSwgX25vcm1Nb2R1bHVzVXNlZCk7CiAgICAgIGFzc2VydChkID09IF9kaWdpdHNQZXJTdGVwKTsKICAgICAgaSArPSBkOwogICAgfQogICAgLy8gQ2xhbXAgeC4KICAgIHdoaWxlICh4VXNlZCA+IDAgJiYgeERpZ2l0c1t4VXNlZCAtIDFdID09IDApIHsKICAgICAgLS14VXNlZDsKICAgIH0KICAgIHhVc2VkID0gX0JpZ0ludEltcGwuX2RyU2hpZnREaWdpdHMoeERpZ2l0cywgeFVzZWQsIGksIHhEaWdpdHMpOwogICAgaWYgKF9CaWdJbnRJbXBsLl9jb21wYXJlRGlnaXRzKAogICAgICAgICAgICB4RGlnaXRzLCB4VXNlZCwgX21vZHVsdXNEaWdpdHMsIF9ub3JtTW9kdWx1c1VzZWQpID49CiAgICAgICAgMCkgewogICAgICBfQmlnSW50SW1wbC5fYWJzU3ViKAogICAgICAgICAgeERpZ2l0cywgeFVzZWQsIF9tb2R1bHVzRGlnaXRzLCBfbm9ybU1vZHVsdXNVc2VkLCB4RGlnaXRzKTsKICAgIH0KICAgIC8vIENsYW1wIHguCiAgICB3aGlsZSAoeFVzZWQgPiAwICYmIHhEaWdpdHNbeFVzZWQgLSAxXSA9PSAwKSB7CiAgICAgIC0teFVzZWQ7CiAgICB9CiAgICByZXR1cm4geFVzZWQ7CiAgfQoKICBpbnQgX3NxcihVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCwgVWludDMyTGlzdCByZXN1bHREaWdpdHMpIHsKICAgIHZhciByZXN1bHRVc2VkID0gX0JpZ0ludEltcGwuX3NxckRpZ2l0cyh4RGlnaXRzLCB4VXNlZCwgcmVzdWx0RGlnaXRzKTsKICAgIHJldHVybiBfcmVkdWNlKHJlc3VsdERpZ2l0cywgcmVzdWx0VXNlZCk7CiAgfQoKICBpbnQgX211bChVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCwgVWludDMyTGlzdCB5RGlnaXRzLCBpbnQgeVVzZWQsCiAgICAgIFVpbnQzMkxpc3QgcmVzdWx0RGlnaXRzKSB7CiAgICB2YXIgcmVzdWx0VXNlZCA9CiAgICAgICAgX0JpZ0ludEltcGwuX211bERpZ2l0cyh4RGlnaXRzLCB4VXNlZCwgeURpZ2l0cywgeVVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgICByZXR1cm4gX3JlZHVjZShyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQpOwogIH0KfQoKLy8gTW9kdWxhciByZWR1Y3Rpb24gdXNpbmcgImNsYXNzaWMiIGFsZ29yaXRobS4KY2xhc3MgX0JpZ0ludENsYXNzaWNSZWR1Y3Rpb24gaW1wbGVtZW50cyBfQmlnSW50UmVkdWN0aW9uIHsKICBmaW5hbCBfQmlnSW50SW1wbCBfbW9kdWx1czsgLy8gTW9kdWx1cy4KICBpbnQgX25vcm1Nb2R1bHVzVXNlZDsKICBfQmlnSW50SW1wbCBfbm9ybU1vZHVsdXM7IC8vIE5vcm1hbGl6ZWQgX21vZHVsdXMuCiAgVWludDMyTGlzdCBfbm9ybU1vZHVsdXNEaWdpdHM7CiAgVWludDMyTGlzdCBfbmVnTm9ybU1vZHVsdXNEaWdpdHM7IC8vIE5lZ2F0ZWQgX25vcm1Nb2R1bHVzIGRpZ2l0cy4KICBpbnQgX21vZHVsdXNOc2g7IC8vIE5vcm1hbGl6YXRpb24gc2hpZnQgYW1vdW50LgogIFVpbnQzMkxpc3QgX2FyZ3M7IC8vIFRvcCBfbm9ybU1vZHVsdXMgZGlnaXQocykgYW5kIHBsYWNlIGhvbGRlciBmb3IgZXN0aW1hdGVkCiAgLy8gcXVvdGllbnQgZGlnaXQocykuCiAgVWludDMyTGlzdCBfdG1wRGlnaXRzOyAvLyBUZW1wb3JhcnkgZGlnaXRzIHVzZWQgZHVyaW5nIHJlZHVjdGlvbi4KCiAgX0JpZ0ludENsYXNzaWNSZWR1Y3Rpb24odGhpcy5fbW9kdWx1cykgewogICAgLy8gUHJlcHJvY2VzcyBhcmd1bWVudHMgdG8gX3JlbURpZ2l0cy4KICAgIHZhciBuc2ggPQogICAgICAgIF9CaWdJbnRJbXBsLl9kaWdpdEJpdHMgLSBfbW9kdWx1cy5fZGlnaXRzW19tb2R1bHVzLl91c2VkIC0gMV0uYml0TGVuZ3RoOwogICAgLy8gRm9yIDY0LWJpdCBwcm9jZXNzaW5nLCBtYWtlIHN1cmUgX25lZ05vcm1Nb2R1bHVzRGlnaXRzIGhhcyBhbiBldmVuIG51bWJlcgogICAgLy8gb2YgZGlnaXRzLgogICAgaWYgKF9tb2R1bHVzLl91c2VkLmlzT2RkKSB7CiAgICAgIG5zaCArPSBfQmlnSW50SW1wbC5fZGlnaXRCaXRzOwogICAgfQogICAgX21vZHVsdXNOc2ggPSBuc2g7CiAgICBfbm9ybU1vZHVsdXMgPSBfbW9kdWx1cyA8PCBuc2g7CiAgICBfbm9ybU1vZHVsdXNVc2VkID0gX25vcm1Nb2R1bHVzLl91c2VkOwogICAgX25vcm1Nb2R1bHVzRGlnaXRzID0gX25vcm1Nb2R1bHVzLl9kaWdpdHM7CiAgICBhc3NlcnQoX25vcm1Nb2R1bHVzVXNlZC5pc0V2ZW4pOwogICAgX2FyZ3MgPSBfbmV3RGlnaXRzKDQpOwogICAgX2FyZ3NbX0JpZ0ludEltcGwuX2Rpdmlzb3JMb3dUb3BEaWdpdF0gPQogICAgICAgIF9ub3JtTW9kdWx1c0RpZ2l0c1tfbm9ybU1vZHVsdXNVc2VkIC0gMl07CiAgICBfYXJnc1tfQmlnSW50SW1wbC5fZGl2aXNvclRvcERpZ2l0XSA9CiAgICAgICAgX25vcm1Nb2R1bHVzRGlnaXRzW19ub3JtTW9kdWx1c1VzZWQgLSAxXTsKICAgIC8vIE5lZ2F0ZSBfbm9ybU1vZHVsdXMgc28gd2UgY2FuIHVzZSBfbXVsQWRkIGluc3RlYWQgb2YKICAgIC8vIHVuaW1wbGVtZW50ZWQgIF9tdWxTdWIuCiAgICB2YXIgbmVnTm9ybU1vZHVsdXMgPQogICAgICAgIF9CaWdJbnRJbXBsLm9uZS5fZGxTaGlmdChfbm9ybU1vZHVsdXNVc2VkKSAtIF9ub3JtTW9kdWx1czsKICAgIGlmIChuZWdOb3JtTW9kdWx1cy5fdXNlZCA8IF9ub3JtTW9kdWx1c1VzZWQpIHsKICAgICAgX25lZ05vcm1Nb2R1bHVzRGlnaXRzID0gX0JpZ0ludEltcGwuX2Nsb25lRGlnaXRzKAogICAgICAgICAgbmVnTm9ybU1vZHVsdXMuX2RpZ2l0cywgMCwgX25vcm1Nb2R1bHVzVXNlZCwgX25vcm1Nb2R1bHVzVXNlZCk7CiAgICB9IGVsc2UgewogICAgICBfbmVnTm9ybU1vZHVsdXNEaWdpdHMgPSBuZWdOb3JtTW9kdWx1cy5fZGlnaXRzOwogICAgfQogICAgLy8gX25lZ05vcm1Nb2R1bHVzRGlnaXRzIGlzIHJlYWQtb25seSBhbmQgaGFzIF9ub3JtTW9kdWx1c1VzZWQgZGlnaXRzIChwb3NzaWJseQogICAgLy8gaW5jbHVkaW5nIHNldmVyYWwgbGVhZGluZyB6ZXJvcykgcGx1cyBhIGxlYWRpbmcgemVybyBmb3IgNjQtYml0CiAgICAvLyBwcm9jZXNzaW5nLgogICAgX3RtcERpZ2l0cyA9IF9uZXdEaWdpdHMoMiAqIF9ub3JtTW9kdWx1c1VzZWQpOwogIH0KCiAgaW50IF9jb252ZXJ0KF9CaWdJbnRJbXBsIHgsIFVpbnQzMkxpc3QgcmVzdWx0RGlnaXRzKSB7CiAgICB2YXIgZGlnaXRzOwogICAgdmFyIHVzZWQ7CiAgICBpZiAoeC5faXNOZWdhdGl2ZSB8fCB4Ll9hYnNDb21wYXJlKF9tb2R1bHVzKSA+PSAwKSB7CiAgICAgIHZhciByZW1haW5kZXIgPSB4Ll9yZW0oX21vZHVsdXMpOwogICAgICBpZiAoeC5faXNOZWdhdGl2ZSAmJiByZW1haW5kZXIuX3VzZWQgPiAwKSB7CiAgICAgICAgYXNzZXJ0KHJlbWFpbmRlci5faXNOZWdhdGl2ZSk7CiAgICAgICAgcmVtYWluZGVyICs9IF9tb2R1bHVzOwogICAgICB9CiAgICAgIGFzc2VydCghcmVtYWluZGVyLl9pc05lZ2F0aXZlKTsKICAgICAgdXNlZCA9IHJlbWFpbmRlci5fdXNlZDsKICAgICAgZGlnaXRzID0gcmVtYWluZGVyLl9kaWdpdHM7CiAgICB9IGVsc2UgewogICAgICB1c2VkID0geC5fdXNlZDsKICAgICAgZGlnaXRzID0geC5fZGlnaXRzOwogICAgfQogICAgdmFyIGkgPSB1c2VkICsgKHVzZWQgJiAxKTsgLy8gQ29weSBsZWFkaW5nIHplcm8gaWYgYW55LgogICAgd2hpbGUgKC0taSA+PSAwKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpXSA9IGRpZ2l0c1tpXTsKICAgIH0KICAgIHJldHVybiB1c2VkOwogIH0KCiAgX0JpZ0ludEltcGwgX3JldmVydChVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCkgewogICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKGZhbHNlLCB4VXNlZCwgeERpZ2l0cyk7CiAgfQoKICBpbnQgX3JlZHVjZShVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCkgewogICAgaWYgKHhVc2VkIDwgX21vZHVsdXMuX3VzZWQpIHsKICAgICAgcmV0dXJuIHhVc2VkOwogICAgfQogICAgLy8gVGhlIGZ1bmN0aW9uIF9CaWdJbnRJbXBsLl9yZW1EaWdpdHMoLi4uKSBpcyBvcHRpbWl6ZWQgZm9yIHJlZHVjdGlvbiBhbmQKICAgIC8vIGVxdWl2YWxlbnQgdG8gY2FsbGluZwogICAgLy8gJ2NvbnZlcnQocmV2ZXJ0KHhEaWdpdHMsIHhVc2VkKS5fcmVtKF9ub3JtTW9kdWx1cyksIHhEaWdpdHMpOycKICAgIHJldHVybiBfQmlnSW50SW1wbC5fcmVtRGlnaXRzKAogICAgICAgIHhEaWdpdHMsCiAgICAgICAgeFVzZWQsCiAgICAgICAgX25vcm1Nb2R1bHVzRGlnaXRzLAogICAgICAgIF9ub3JtTW9kdWx1c1VzZWQsCiAgICAgICAgX25lZ05vcm1Nb2R1bHVzRGlnaXRzLAogICAgICAgIF9tb2R1bHVzTnNoLAogICAgICAgIF9hcmdzLAogICAgICAgIF90bXBEaWdpdHMsCiAgICAgICAgeERpZ2l0cyk7CiAgfQoKICBpbnQgX3NxcihVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCwgVWludDMyTGlzdCByZXN1bHREaWdpdHMpIHsKICAgIHZhciByZXN1bHRVc2VkID0gX0JpZ0ludEltcGwuX3NxckRpZ2l0cyh4RGlnaXRzLCB4VXNlZCwgcmVzdWx0RGlnaXRzKTsKICAgIHJldHVybiBfcmVkdWNlKHJlc3VsdERpZ2l0cywgcmVzdWx0VXNlZCk7CiAgfQoKICBpbnQgX211bChVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCwgVWlu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c2hDb2RlIG5hdGl2ZSAiRG91YmxlX2hhc2hDb2RlIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRG91YmxlKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgZG91YmxlIG9wZXJhdG9yICsobnVtIG90aGVyKSB7CiAgICByZXR1cm4gX2FkZChvdGhlci50b0RvdWJsZSgpKTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0RvdWJsZSkKICBkb3VibGUgX2FkZChkb3VibGUgb3RoZXIpIG5hdGl2ZSAiRG91YmxlX2FkZCI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0RvdWJsZSkKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIGRvdWJsZSBvcGVyYXRvciAtKG51bSBvdGhlcikgewogICAgcmV0dXJuIF9zdWIob3RoZXIudG9Eb3VibGUoKSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9Eb3VibGUpCiAgZG91YmxlIF9zdWIoZG91YmxlIG90aGVyKSBuYXRpdmUgIkRvdWJsZV9zdWIiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9Eb3VibGUpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBkb3VibGUgb3BlcmF0b3IgKihudW0gb3RoZXIpIHsKICAgIHJldHVybiBfbXVsKG90aGVyLnRvRG91YmxlKCkpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRG91YmxlKQogIGRvdWJsZSBfbXVsKGRvdWJsZSBvdGhlcikgbmF0aXZlICJEb3VibGVfbXVsIjsKCiAgaW50IG9wZXJhdG9yIH4vKG51bSBvdGhlcikgewogICAgcmV0dXJuIF90cnVuY19kaXYob3RoZXIudG9Eb3VibGUoKSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIGludCBfdHJ1bmNfZGl2KGRvdWJsZSBvdGhlcikgbmF0aXZlICJEb3VibGVfdHJ1bmNfZGl2IjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRG91YmxlKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgZG91YmxlIG9wZXJhdG9yIC8obnVtIG90aGVyKSB7CiAgICByZXR1cm4gX2RpdihvdGhlci50b0RvdWJsZSgpKTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0RvdWJsZSkKICBkb3VibGUgX2Rpdihkb3VibGUgb3RoZXIpIG5hdGl2ZSAiRG91YmxlX2RpdiI7CgogIGRvdWJsZSBvcGVyYXRvciAlKG51bSBvdGhlcikgewogICAgcmV0dXJuIF9tb2R1bG8ob3RoZXIudG9Eb3VibGUoKSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9Eb3VibGUpCiAgZG91YmxlIF9tb2R1bG8oZG91YmxlIG90aGVyKSBuYXRpdmUgIkRvdWJsZV9tb2R1bG8iOwoKICBkb3VibGUgcmVtYWluZGVyKG51bSBvdGhlcikgewogICAgcmV0dXJuIF9yZW1haW5kZXIob3RoZXIudG9Eb3VibGUoKSk7CiAgfQoKICBkb3VibGUgX3JlbWFpbmRlcihkb3VibGUgb3RoZXIpIG5hdGl2ZSAiRG91YmxlX3JlbWFpbmRlciI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0RvdWJsZSkKICBkb3VibGUgb3BlcmF0b3IgLSgpIG5hdGl2ZSAiRG91YmxlX2ZsaXBTaWduQml0IjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpIHsKICAgIHJldHVybiAob3RoZXIgaXMgbnVtKSAmJiBfZXF1YWwob3RoZXIudG9Eb3VibGUoKSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgYm9vbCBfZXF1YWwoZG91YmxlIG90aGVyKSBuYXRpdmUgIkRvdWJsZV9lcXVhbCI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIGJvb2wgX2VxdWFsVG9JbnRlZ2VyKGludCBvdGhlcikgbmF0aXZlICJEb3VibGVfZXF1YWxUb0ludGVnZXIiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBib29sIG9wZXJhdG9yIDwobnVtIG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIgPiB0aGlzOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgYm9vbCBvcGVyYXRvciA+KG51bSBvdGhlcikgewogICAgcmV0dXJuIF9ncmVhdGVyVGhhbihvdGhlci50b0RvdWJsZSgpKTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBib29sIF9ncmVhdGVyVGhhbihkb3VibGUgb3RoZXIpIG5hdGl2ZSAiRG91YmxlX2dyZWF0ZXJUaGFuIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgYm9vbCBvcGVyYXRvciA+PShudW0gb3RoZXIpIHsKICAgIHJldHVybiAodGhpcyA9PSBvdGhlcikgfHwgKHRoaXMgPiBvdGhlcik7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBib29sIG9wZXJhdG9yIDw9KG51bSBvdGhlcikgewogICAgcmV0dXJuICh0aGlzID09IG90aGVyKSB8fCAodGhpcyA8IG90aGVyKTsKICB9CgogIGRvdWJsZSBfYWRkRnJvbUludGVnZXIoaW50IG90aGVyKSB7CiAgICByZXR1cm4gbmV3IF9Eb3VibGUuZnJvbUludGVnZXIob3RoZXIpLl9hZGQodGhpcyk7CiAgfQoKICBkb3VibGUgX3N1YkZyb21JbnRlZ2VyKGludCBvdGhlcikgewogICAgcmV0dXJuIG5ldyBfRG91YmxlLmZyb21JbnRlZ2VyKG90aGVyKS5fc3ViKHRoaXMpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19Eb3VibGUiKQogIGRvdWJsZSBfbXVsRnJvbUludGVnZXIoaW50IG90aGVyKSB7CiAgICByZXR1cm4gbmV3IF9Eb3VibGUuZnJvbUludGVnZXIob3RoZXIpLl9tdWwodGhpcyk7CiAgfQoKICBpbnQgX3RydW5jRGl2RnJvbUludGVnZXIoaW50IG90aGVyKSB7CiAgICByZXR1cm4gbmV3IF9Eb3VibGUuZnJvbUludGVnZXIob3RoZXIpLl90cnVuY19kaXYodGhpcyk7CiAgfQoKICBkb3VibGUgX21vZHVsb0Zyb21JbnRlZ2VyKGludCBvdGhlcikgewogICAgcmV0dXJuIG5ldyBfRG91YmxlLmZyb21JbnRlZ2VyKG90aGVyKS5fbW9kdWxvKHRoaXMpOwogIH0KCiAgZG91YmxlIF9yZW1haW5kZXJGcm9tSW50ZWdlcihpbnQgb3RoZXIpIHsKICAgIHJldHVybiBuZXcgX0RvdWJsZS5mcm9tSW50ZWdlcihvdGhlcikuX3JlbWFpbmRlcih0aGlzKTsKICB9CgogIGJvb2wgX2dyZWF0ZXJUaGFuRnJvbUludGVnZXIoaW50IG90aGVyKQogICAgICBuYXRpdmUgIkRvdWJsZV9ncmVhdGVyVGhhbkZyb21JbnRlZ2VyIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIGJvb2wgZ2V0IGlzTmVnYXRpdmUgbmF0aXZlICJEb3VibGVfZ2V0SXNOZWdhdGl2ZSI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIGJvb2wgZ2V0IGlzSW5maW5pdGUgbmF0aXZlICJEb3VibGVfZ2V0SXNJbmZpbml0ZSI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIGJvb2wgZ2V0IGlzTmFOIG5hdGl2ZSAiRG91YmxlX2dldElzTmFOIjsKICBib29sIGdldCBpc0Zpbml0ZSA9PiAhaXNJbmZpbml0ZSAmJiAhaXNOYU47IC8vIENhbiBiZSBvcHRpbWl6ZWQuCgogIGRvdWJsZSBhYnMoKSB7CiAgICAvLyBIYW5kbGUgbmVnYXRpdmUgMC4wLgogICAgaWYgKHRoaXMgPT0gMC4wKSByZXR1cm4gMC4wOwogICAgcmV0dXJuIHRoaXMgPCAwLjAgPyAtdGhpcyA6IHRoaXM7CiAgfQoKICBkb3VibGUgZ2V0IHNpZ24gewogICAgaWYgKHRoaXMgPiAwLjApIHJldHVybiAxLjA7CiAgICBpZiAodGhpcyA8IDAuMCkgcmV0dXJuIC0xLjA7CiAgICByZXR1cm4gdGhpczsgLy8gKy8tMC4wIG9yIE5hTi4KICB9CgogIGludCByb3VuZCgpID0+IHJvdW5kVG9Eb3VibGUoKS50b0ludCgpOwogIGludCBmbG9vcigpID0+IGZsb29yVG9Eb3VibGUoKS50b0ludCgpOwogIGludCBjZWlsKCkgPT4gY2VpbFRvRG91YmxlKCkudG9JbnQoKTsKICBpbnQgdHJ1bmNhdGUoKSA9PiB0cnVuY2F0ZVRvRG91YmxlKCkudG9JbnQoKTsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRG91YmxlKQogIGRvdWJsZSByb3VuZFRvRG91YmxlKCkgbmF0aXZlICJEb3VibGVfcm91bmQiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0RvdWJsZSkKICBkb3VibGUgZmxvb3JUb0RvdWJsZSgpIG5hdGl2ZSAiRG91YmxlX2Zsb29yIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9Eb3VibGUpCiAgZG91YmxlIGNlaWxUb0RvdWJsZSgpIG5hdGl2ZSAiRG91YmxlX2NlaWwiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0RvdWJsZSkKICBkb3VibGUgdHJ1bmNhdGVUb0RvdWJsZSgpIG5hdGl2ZSAiRG91YmxlX3RydW5jYXRlIjsKCiAgbnVtIGNsYW1wKG51bSBsb3dlckxpbWl0LCBudW0gdXBwZXJMaW1pdCkgewogICAgaWYgKGxvd2VyTGltaXQgaXMhIG51bSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZShsb3dlckxpbWl0LCAibG93ZXJMaW1pdCIsICJub3QgYSBudW1iZXIiKTsKICAgIH0KICAgIGlmICh1cHBlckxpbWl0IGlzISBudW0pIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUodXBwZXJMaW1pdCwgInVwcGVyTGltaXQiLCAibm90IGEgbnVtYmVyIik7CiAgICB9CgogICAgaWYgKGxvd2VyTGltaXQuY29tcGFyZVRvKHVwcGVyTGltaXQpID4gMCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihsb3dlckxpbWl0KTsKICAgIH0KICAgIGlmIChsb3dlckxpbWl0LmlzTmFOKSByZXR1cm4gbG93ZXJMaW1pdDsKICAgIGlmICh0aGlzLmNvbXBhcmVUbyhsb3dlckxpbWl0KSA8IDApIHJldHVybiBsb3dlckxpbWl0OwogICAgaWYgKHRoaXMuY29tcGFyZVRvKHVwcGVyTGltaXQpID4gMCkgcmV0dXJuIHVwcGVyTGltaXQ7CiAgICByZXR1cm4gdGhpczsKICB9CgogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgaW50IHRvSW50KCkgbmF0aXZlICJEb3VibGVfdG9JbnQiOwoKICBkb3VibGUgdG9Eb3VibGUoKSB7CiAgICByZXR1cm4gdGhpczsKICB9CgogIHN0YXRpYyBjb25zdCBpbnQgQ0FDSEVfU0laRV9MT0cyID0gMzsKICBzdGF0aWMgY29uc3QgaW50IENBQ0hFX0xFTkdUSCA9IDEgPDwgKENBQ0hFX1NJWkVfTE9HMiArIDEpOwogIHN0YXRpYyBjb25zdCBpbnQgQ0FDSEVfTUFTSyA9IENBQ0hFX0xFTkdUSCAtIDE7CiAgLy8gRWFjaCBrZXkgKGRvdWJsZSkgZm9sbG93ZWQgYnkgaXRzIHRvU3RyaW5nIHJlc3VsdC4KICBzdGF0aWMgZmluYWwgTGlzdCBfY2FjaGUgPSBuZXcgTGlzdChDQUNIRV9MRU5HVEgpOwogIHN0YXRpYyBpbnQgX2NhY2hlRXZpY3RJbmRleCA9IDA7CgogIFN0cmluZyBfdG9TdHJpbmcoKSBuYXRpdmUgIkRvdWJsZV90b1N0cmluZyI7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIC8vIFRPRE8oa29kYSk6IENvbnNpZGVyIHN0YXJ0aW5nIGF0IG1vc3QgcmVjZW50bHkgaW5zZXJ0ZWQuCiAgICBmb3IgKGludCBpID0gMDsgaSA8IENBQ0hFX0xFTkdUSDsgaSArPSAyKSB7CiAgICAgIC8vIE5lZWQgJ2lkZW50aWNhbCcgdG8gaGFuZGxlIG5lZ2F0aXZlIHplcm8sIGV0Yy4KICAgICAgaWYgKGlkZW50aWNhbChfY2FjaGVbaV0sIHRoaXMpKSB7CiAgICAgICAgcmV0dXJuIF9jYWNoZVtpICsgMV07CiAgICAgIH0KICAgIH0KICAgIC8vIFRPRE8oa29kYSk6IENvbnNpZGVyIG9wdGltaXppbmcgYWxsIHNtYWxsIGludGVncmFsIHZhbHVlcy4KICAgIGlmIChpZGVudGljYWwoMC4wLCB0aGlzKSkgewogICAgICByZXR1cm4gIjAuMCI7CiAgICB9CiAgICBTdHJpbmcgcmVzdWx0ID0gX3RvU3RyaW5nKCk7CiAgICAvLyBSZXBsYWNlIHRoZSBsZWFzdCByZWNlbnRseSBpbnNlcnRlZCBlbnRyeS4KICAgIF9jYWNoZVtfY2FjaGVFdmljdEluZGV4XSA9IHRoaXM7CiAgICBfY2FjaGVbX2NhY2hlRXZpY3RJbmRleCArIDFdID0gcmVzdWx0OwogICAgX2NhY2hlRXZpY3RJbmRleCA9IChfY2FjaGVFdmljdEluZGV4ICsgMikgJiBDQUNIRV9NQVNLOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFN0cmluZyB0b1N0cmluZ0FzRml4ZWQoaW50IGZyYWN0aW9uRGlnaXRzKSB7CiAgICAvLyBTZWUgRUNNQVNjcmlwdC0yNjIsIDE1LjcuNC41IGZvciBkZXRhaWxzLgoKICAgIGlmIChmcmFjdGlvbkRpZ2l0cyBpcyEgaW50KSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKAogICAgICAgICAgZnJhY3Rpb25EaWdpdHMsICJmcmFjdGlvbkRpZ2l0cyIsICJub3QgYW4gaW50ZWdlciIpOwogICAgfQogICAgLy8gU3RlcCAyLgogICAgaWYgKGZyYWN0aW9uRGlnaXRzIDwgMCB8fCBmcmFjdGlvbkRpZ2l0cyA+IDIwKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGZyYWN0aW9uRGlnaXRzLCAwLCAyMCwgImZyYWN0aW9uRGlnaXRzIik7CiAgICB9CgogICAgLy8gU3RlcCAzLgogICAgZG91YmxlIHggPSB0aGlzOwoKICAgIC8vIFN0ZXAgNC4KICAgIGlmIChpc05hTikgcmV0dXJuICJOYU4iOwoKICAgIC8vIFN0ZXAgNSBhbmQgNiBza2lwcGVkLiBXaWxsIGJlIGRlYWx0IHdpdGggYnkgbmF0aXZlIGZ1bmN0aW9uLgoKICAgIC8vIFN0ZXAgNy4KICAgIGlmICh4ID49IDFlMjEgfHwgeCA8PSAtMWUyMSkgewogICAgICByZXR1cm4geC50b1N0cmluZygpOwogICAgfQoKICAgIHJldHVybiBfdG9TdHJpbmdBc0ZpeGVkKGZyYWN0aW9uRGlnaXRzKTsKICB9CgogIFN0cmluZyBfdG9TdHJpbmdBc0ZpeGVkKGludCBmcmFjdGlvbkRpZ2l0cykgbmF0aXZlICJEb3VibGVfdG9TdHJpbmdBc0ZpeGVkIjsKCiAgU3RyaW5nIHRvU3RyaW5nQXNFeHBvbmVudGlhbChbaW50IGZyYWN0aW9uRGlnaXRzXSkgewogICAgLy8gU2VlIEVDTUFTY3JpcHQtMjYyLCAxNS43LjQuNiBmb3IgZGV0YWlscy4KCiAgICAvLyBUaGUgRWNtYVNjcmlwdCBzcGVjaWZpY2F0aW9uIGNoZWNrcyBmb3IgTmFOIGFuZCBJbmZpbml0eSBiZWZvcmUgbG9va2luZwogICAgLy8gYXQgdGhlIGZyYWN0aW9uRGlnaXRzLiBJbiBEYXJ0IHdlIGFyZSBjb25zaXN0ZW50IHdpdGggdG9TdHJpbmdBc0ZpeGVkIGFuZAogICAgLy8gbG9vayBhdCB0aGUgZnJhY3Rpb25EaWdpdHMgZmlyc3QuCgogICAgLy8gU3RlcCA3LgogICAgaWYgKGZyYWN0aW9uRGlnaXRzICE9IG51bGwpIHsKICAgICAgaWYgKGZyYWN0aW9uRGlnaXRzIGlzISBpbnQpIHsKICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZSgKICAgICAgICAgICAgZnJhY3Rpb25EaWdpdHMsICJmcmFjdGlvbkRpZ2l0cyIsICJub3QgYW4gaW50ZWdlciIpOwogICAgICB9CiAgICAgIGlmIChmcmFjdGlvbkRpZ2l0cyA8IDAgfHwgZnJhY3Rpb25EaWdpdHMgPiAyMCkgewogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGZyYWN0aW9uRGlnaXRzLCAwLCAyMCwgImZyYWN0aW9uRGlnaXRzIik7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoaXNOYU4pIHJldHVybiAiTmFOIjsKICAgIGlmICh0aGlzID09IGRvdWJsZS5pbmZpbml0eSkgcmV0dXJuICJJbmZpbml0eSI7CiAgICBpZiAodGhpcyA9PSAtZG91YmxlLmluZmluaXR5KSByZXR1cm4gIi1JbmZpbml0eSI7CgogICAgLy8gVGhlIGRhcnQgZnVuY3Rpb24gcHJpbnRzIHRoZSBzaG9ydGVzdCByZXByZXNlbnRhdGlvbiB3aGVuIGZyYWN0aW9uRGlnaXRzCiAgICAvLyBlcXVhbHMgbnVsbC4gVGhlIG5hdGl2ZSBmdW5jdGlvbiB3YW50cyAtMSBpbnN0ZWFkLgogICAgZnJhY3Rpb25EaWdpdHMgPSAoZnJhY3Rpb25EaWdpdHMgPT0gbnVsbCkgPyAtMSA6IGZyYWN0aW9uRGlnaXRzOwoKICAgIHJldHVybiBfdG9TdHJpbmdBc0V4cG9uZW50aWFsKGZyYWN0aW9uRGlnaXRzKTsKICB9CgogIFN0cmluZyBfdG9TdHJpbmdBc0V4cG9uZW50aWFsKGludCBmcmFjdGlvbkRpZ2l0cykKICAgICAgbmF0aXZlICJEb3VibGVfdG9TdHJpbmdBc0V4cG9uZW50aWFsIjsKCiAgU3RyaW5nIHRvU3RyaW5nQXNQcmVjaXNpb24oaW50IHByZWNpc2lvbikgewogICAgLy8gU2VlIEVDTUFTY3JpcHQtMjYyLCAxNS43LjQuNyBmb3IgZGV0YWlscy4KCiAgICAvLyBUaGUgRWNtYVNjcmlwdCBzcGVjaWZpY2F0aW9uIGNoZWNrcyBmb3IgTmFOIGFuZCBJbmZpbml0eSBiZWZvcmUgbG9va2luZwogICAgLy8gYXQgdGhlIGZyYWN0aW9uRGlnaXRzLiBJbiBEYXJ0IHdlIGFyZSBjb25zaXN0ZW50IHdpdGggdG9TdHJpbmdBc0ZpeGVkIGFuZAogICAgLy8gbG9vayBhdCB0aGUgZnJhY3Rpb25EaWdpdHMgZmlyc3QuCgogICAgaWYgKHByZWNpc2lvbiBpcyEgaW50KSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKHByZWNpc2lvbiwgInByZWNpc2lvbiIsICJub3QgYW4gaW50ZWdlciIpOwogICAgfQogICAgLy8gU3RlcCA4LgogICAgaWYgKHByZWNpc2lvbiA8IDEgfHwgcHJlY2lzaW9uID4gMjEpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UocHJlY2lzaW9uLCAxLCAyMSwgInByZWNpc2lvbiIpOwogICAgfQoKICAgIGlmIChpc05hTikgcmV0dXJuICJOYU4iOwogICAgaWYgKHRoaXMgPT0gZG91YmxlLmluZmluaXR5KSByZXR1cm4gIkluZmluaXR5IjsKICAgIGlmICh0aGlzID09IC1kb3VibGUuaW5maW5pdHkpIHJldHVybiAiLUluZmluaXR5IjsKCiAgICByZXR1cm4gX3RvU3RyaW5nQXNQcmVjaXNpb24ocHJlY2lzaW9uKTsKICB9CgogIFN0cmluZyBfdG9TdHJpbmdBc1ByZWNpc2lvbihpbnQgZnJhY3Rpb25EaWdpdHMpCiAgICAgIG5hdGl2ZSAiRG91YmxlX3RvU3RyaW5nQXNQcmVjaXNpb24iOwoKICAvLyBPcmRlciBpczogTmFOID4gSW5maW5pdHkgPiAuLi4gPiAwLjAgPiAtMC4wID4gLi4uID4gLUluZmluaXR5LgogIGludCBjb21wYXJlVG8obnVtIG90aGVyKSB7CiAgICBjb25zdCBpbnQgRVFVQUwgPSAwLCBMRVNTID0gLTEsIEdSRUFURVIgPSAxOwogICAgaWYgKHRoaXMgPCBvdGhlcikgewogICAgICByZXR1cm4gTEVTUzsKICAgIH0gZWxzZSBpZiAodGhpcyA+IG90aGVyKSB7CiAgICAgIHJldHVybiBHUkVBVEVSOwogICAgfSBlbHNlIGlmICh0aGlzID09IG90aGVyKSB7CiAgICAgIGlmICh0aGlzID09IDAuMCkgewogICAgICAgIGJvb2wgdGhpc0lzTmVnYXRpdmUgPSBpc05lZ2F0aXZlOwogICAgICAgIGJvb2wgb3RoZXJJc05lZ2F0aXZlID0gb3RoZXIuaXNOZWdhdGl2ZTsKICAgICAgICBpZiAodGhpc0lzTmVnYXRpdmUgPT0gb3RoZXJJc05lZ2F0aXZlKSB7CiAgICAgICAgICByZXR1cm4gRVFVQUw7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzSXNOZWdhdGl2ZSA/IExFU1MgOiBHUkVBVEVSOwogICAgICB9IGVsc2UgaWYgKG90aGVyIGlzIGludCkgewogICAgICAgIC8vIENvbXBhcmUgYXMgaW50ZWdlcnMgYXMgaXQgaXMgbW9yZSBwcmVjaXNlIGlmIHRoZSBpbnRlZ2VyIHZhbHVlIGlzCiAgICAgICAgLy8gb3V0c2lkZSBvZiBNSU5fRVhBQ1RfSU5UX1RPX0RPVUJMRS4uTUFYX0VYQUNUX0lOVF9UT19ET1VCTEUgcmFuZ2UuCiAgICAgICAgY29uc3QgaW50IE1BWF9FWEFDVF9JTlRfVE9fRE9VQkxFID0gOTAwNzE5OTI1NDc0MDk5MjsgLy8gMl41My4KICAgICAgICBjb25zdCBpbnQgTUlOX0VYQUNUX0lOVF9UT19ET1VCTEUgPSAtTUFYX0VYQUNUX0lOVF9UT19ET1VCTEU7CiAgICAgICAgaWYgKChNSU5fRVhBQ1RfSU5UX1RPX0RPVUJMRSA8PSBvdGhlcikgJiYKICAgICAgICAgICAgKG90aGVyIDw9IE1BWF9FWEFDVF9JTlRfVE9fRE9VQkxFKSkgewogICAgICAgICAgcmV0dXJuIEVRVUFMOwogICAgICAgIH0KICAgICAgICBjb25zdCBib29sIGxpbWl0SW50c1RvNjRCaXRzID0gKCgxIDw8IDY0KSA9PSAwKTsKICAgICAgICBpZiAobGltaXRJbnRzVG82NEJpdHMpIHsKICAgICAgICAgIC8vIFdpdGggaW50ZWdlcnMgbGltaXRlZCB0byA2NCBiaXRzLCBkb3VibGUudG9JbnQoKSBjbGFtcHMKICAgICAgICAgIC8vIGRvdWJsZSB2YWx1ZSB0byBmaXQgaW50byB0aGUgTUlOX0lOVDY0Li5NQVhfSU5UNjQgcmFuZ2UuCiAgICAgICAgICAvLyBNQVhfSU5UNjQgaXMgbm90IHByZWNpc2VseSByZXByZXNlbnRhYmxlIGFzIGRvdWJsZSwgc28KICAgICAgICAgIC8vIGludGVnZXJzIG5lYXIgTUFYX0lOVDY0IGNvbXBhcmUgYXMgZXF1YWwgdG8gKE1BWF9JTlQ2NCArIDEpIHdoZW4KICAgICAgICAgIC8vIHJlcHJlc2VudGVkIGFzIGRvdWJsZXMuCiAgICAgICAgICAvLyBUaGVyZSBpcyBubyBzaW1pbGFyIHByb2JsZW0gd2l0aCBNSU5fSU5UNjQgYXMgaXQgaXMgcHJlY2lzZWx5CiAgICAgICAgICAvLyByZXByZXNlbnRhYmxlIGFzIGRvdWJsZS4KICAgICAgICAgIGNvbnN0IGRvdWJsZSBtYXhJbnQ2NFBsdXMxQXNEb3VibGUgPSA5MjIzMzcyMDM2ODU0Nzc1ODA4LjA7CiAgICAgICAgICBpZiAodGhpcyA+PSBtYXhJbnQ2NFBsdXMxQXNEb3VibGUpIHsKICAgICAgICAgICAgcmV0dXJuIEdSRUFURVI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0b0ludCgpLmNvbXBhcmVUbyhvdGhlcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIEVRVUFMOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGlzTmFOKSB7CiAgICAgIHJldHVybiBvdGhlci5pc05hTiA/IEVRVUFMIDogR1JFQVRFUjsKICAgIH0gZWxzZSB7CiAgICAgIC8vIE90aGVyIGlzIE5hTi4KICAgICAgcmV0dXJuIExFU1M7CiAgICB9CiAgfQp9CoFtAE5OPAEeARoiK0wBLTYBKx0hIwQBKzEBKx0hIwQBKzEBKx0hIwQBKzEBHykEASk6ASsdISMEASsxASEmBAErNwEgKQQBPQErMwEoHSM3BAEoMyhCASgdHxkEASgdHysEASg/ASgdIC4EASgdIC4EASY2BAEmNgQBNyY2BAEoPAQBKTkEASw8BAEqLgEoNSg1KCtDAREcISYEARQgISMEASoqKDABKzArMCsuKzYBLh5PBh5PBgEwKwYtOzsRBAEpJQEWEQQBKD4yODUjAS8BFkAwOCgeCAZCIBQGITIlKzwTBAEvMQEiJT8GDzVLBgEPFQEPHQFEAQ8jGwYBLQQBTwE3MQFPUSkBDyIkJ0EIN00IBgEdNDYBUDpFATMEATQtAS4xAU9RKQEdTwYPK0EGAR00NgEsBAEyKwFEHTEYEx8WIBkqMTEYCjAhTU5HRjIyGAo5IUVGRE4lSyZGLxwMCikPFggYLA0XEwYEAgEbZGFydDpjb3JlLXBhdGNoL2RvdWJsZS5kYXJ0LW9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvZnVuY3Rpb24uZGFydIdlLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9DbG9zdXJlIGltcGxlbWVudHMgRnVuY3Rpb24gewogIGZhY3RvcnkgX0Nsb3N1cmUuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSBuYXRpdmUgIkNsb3N1cmVfZXF1YWxzIjsKCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICBfaGFzaCA/Pz0gX2NvbXB1dGVIYXNoKCk7CiAgICByZXR1cm4gX2hhc2g7CiAgfQoKICBfQ2xvc3VyZSBnZXQgY2FsbCA9PiB0aGlzOwoKICBfQ2xvc3VyZSBfY2xvbmUoKSBuYXRpdmUgIkNsb3N1cmVfY2xvbmUiOwoKICBpbnQgX2NvbXB1dGVIYXNoKCkgbmF0aXZlICJDbG9zdXJlX2NvbXB1dGVIYXNoIjsKCiAgLy8gTm8gaW5zdGFuY2UgZmllbGRzIHNob3VsZCBiZSBkZWNsYXJlZCBiZWZvcmUgdGhlIGZvbGxvd2luZyBmaWVsZHMgd2hvc2UKICAvLyBvZmZzZXRzIG11c3QgYmUgaWRlbnRpY2FsIGluIERhcnQgYW5kIEMrKy4KCiAgLy8gVGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIGRlY2xhcmVkIGJvdGggaW4gcmF3X29iamVjdC5oIChmb3IgZGlyZWN0IGFjY2VzcwogIC8vIGZyb20gQysrIGNvZGUpIGFuZCBhbHNvIGhlcmUgc28gdGhhdCB0aGUgb2Zmc2V0LXRvLWZpZWxkIG1hcCB1c2VkIGJ5CiAgLy8gZGVmZXJyZWQgb2JqZWN0cyBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4KICAvLyBDYXV0aW9uOiBUaGVzZSBmaWVsZHMgYXJlIG5vdCBEYXJ0IGluc3RhbmNlcywgYnV0IFZNIG9iamVjdHMuIFRoZWlyIERhcnQKICAvLyBuYW1lcyBkbyBub3QgbmVlZCB0byBtYXRjaCB0aGUgQysrIG5hbWVzLCBidXQgdGhleSBtdXN0IGJlIHByaXZhdGUuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHZhciBfaW5zdGFudGlhdG9yX3R5cGVfYXJndW1lbnRzOwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICB2YXIgX2Z1bmN0aW9uX3R5cGVfYXJndW1lbnRzOwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICB2YXIgX2RlbGF5ZWRfdHlwZV9hcmd1bWVudHM7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHZhciBfZnVuY3Rpb247CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHZhciBfY29udGV4dDsKCiAgLy8gTm90ZTogX0Nsb3N1cmUgb2JqZWN0cyBhcmUgY3JlYXRlZCBieSBWTSAibWFnaWNhbGx5Iiwgd2l0aG91dCBpbnZva2luZwogIC8vIGNvbnN0cnVjdG9yLiBTbywgX0Nsb3N1cmUgZGVmYXVsdCBjb25zdHJ1Y3RvciBpcyBuZXZlciBjb21waWxlZCBhbmQKICAvLyBkZXRlY3Rpb24gb2YgZGVmYXVsdC1pbml0aWFsaXplZCBmaWVsZHMgaXMgbm90IHBlcmZvcm1lZC4KICAvLyBBcyBhIGNvbnNlcXVlbmNlLCBWTSBpbmNvcnJlY3RseSBhc3N1bWVzIHRoYXQgX2hhc2ggZmllbGQgaXMgbm90CiAgLy8gbnVsbGFibGUgYW5kIG1heSBpbmNvcnJlY3RseSByZW1vdmUgJ2lmIChfaGFzaCA9PSBudWxsKScgaW4gZ2V0Omhhc2hDb2RlLgogIC8vIFRoaXMgaW5pdGlhbGl6ZXIgbWFrZXMgX2hhc2ggZmllbGQgbnVsbGFibGUgZXZlbiB3aXRob3V0IGNvbnN0cnVjdG9yCiAgLy8gY29tcGlsYXRpb24uCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHZhciBfaGFzaCA9IG51bGw7Cn0KOABOTjwBHgEaJScZBAE6ARUeEgQBHQEsATMBTTABT0ovTkkcJBwgHB8cERwQAUxJP0ZPShIcFAIBHWRhcnQ6Y29yZS1wYXRjaC9mdW5jdGlvbi5kYXJ0M29yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvZ3Jvd2FibGVfYXJyYXkuZGFydK3LLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9Hcm93YWJsZUxpc3Q8VD4gZXh0ZW5kcyBMaXN0QmFzZTxUPiB7CiAgdm9pZCBpbnNlcnQoaW50IGluZGV4LCBUIGVsZW1lbnQpIHsKICAgIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPiBsZW5ndGgpKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGluZGV4LCAwLCBsZW5ndGgpOwogICAgfQogICAgaWYgKGluZGV4ID09IHRoaXMubGVuZ3RoKSB7CiAgICAgIGFkZChlbGVtZW50KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaW50IG9sZExlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgLy8gV2UgYXJlIG1vZGlmeWluZyB0aGUgbGVuZ3RoIGp1c3QgYmVsb3cgdGhlIGlzLWNoZWNrLiBXaXRob3V0IHRoZSBjaGVjawogICAgLy8gQXJyYXkuY29weSBjb3VsZCB0aHJvdyBhbiBleGNlcHRpb24sIGxlYXZpbmcgdGhlIGxpc3QgaW4gYSBiYWQgc3RhdGUKICAgIC8vICh3aXRoIGEgbGVuZ3RoIHRoYXQgaGFzIGJlZW4gaW5jcmVhc2VkLCBidXQgd2l0aG91dCBhIG5ldyBlbGVtZW50KS4KICAgIGlmIChpbmRleCBpcyEgaW50KSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihpbmRleCk7CiAgICB0aGlzLmxlbmd0aCsrOwogICAgTGlzdHMuY29weSh0aGlzLCBpbmRleCwgdGhpcywgaW5kZXggKyAxLCBvbGRMZW5ndGggLSBpbmRleCk7CiAgICB0aGlzW2luZGV4XSA9IGVsZW1lbnQ7CiAgfQoKICBUIHJlbW92ZUF0KGludCBpbmRleCkgewogICAgdmFyIHJlc3VsdCA9IHRoaXNbaW5kZXhdOwogICAgaW50IG5ld0xlbmd0aCA9IHRoaXMubGVuZ3RoIC0gMTsKICAgIGlmIChpbmRleCA8IG5ld0xlbmd0aCkgewogICAgICBMaXN0cy5jb3B5KHRoaXMsIGluZGV4ICsgMSwgdGhpcywgaW5kZXgsIG5ld0xlbmd0aCAtIGluZGV4KTsKICAgIH0KICAgIHRoaXMubGVuZ3RoID0gbmV3TGVuZ3RoOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGJvb2wgcmVtb3ZlKE9iamVjdCBlbGVtZW50KSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRoaXNbaV0gPT0gZWxlbWVudCkgewogICAgICAgIHJlbW92ZUF0KGkpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB2b2lkIGluc2VydEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPFQ+IGl0ZXJhYmxlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGluZGV4LCAwLCBsZW5ndGgpOwogICAgfQogICAgLy8gVE9ETyhmbG9pdHNjaCk6IHdlIGNhbiBwcm9iYWJseSBkZXRlY3QgbW9yZSBjYXNlcy4KICAgIGlmIChpdGVyYWJsZSBpcyEgTGlzdCAmJiBpdGVyYWJsZSBpcyEgU2V0ICYmIGl0ZXJhYmxlIGlzISBTdWJMaXN0SXRlcmFibGUpIHsKICAgICAgaXRlcmFibGUgPSBpdGVyYWJsZS50b0xpc3QoKTsKICAgIH0KICAgIGludCBpbnNlcnRpb25MZW5ndGggPSBpdGVyYWJsZS5sZW5ndGg7CiAgICAvLyBUaGVyZSBtaWdodCBiZSBlcnJvcnMgYWZ0ZXIgdGhlIGxlbmd0aCBjaGFuZ2UsIGluIHdoaWNoIGNhc2UgdGhlIGxpc3QKICAgIC8vIHdpbGwgZW5kIHVwIGJlaW5nIG1vZGlmaWVkIGJ1dCB0aGUgb3BlcmF0aW9uIG5vdCBjb21wbGV0ZS4gVW5sZXNzIHdlCiAgICAvLyBhbHdheXMgZ28gdGhyb3VnaCBhICJ0b0xpc3QiIHdlIGNhbid0IHJlYWxseSBhdm9pZCB0aGF0LgogICAgdGhpcy5sZW5ndGggKz0gaW5zZXJ0aW9uTGVuZ3RoOwogICAgc2V0UmFuZ2UoaW5kZXggKyBpbnNlcnRpb25MZW5ndGgsIHRoaXMubGVuZ3RoLCB0aGlzLCBpbmRleCk7CiAgICBzZXRBbGwoaW5kZXgsIGl0ZXJhYmxlKTsKICB9CgogIHZvaWQgc2V0QWxsKGludCBpbmRleCwgSXRlcmFibGU8VD4gaXRlcmFibGUpIHsKICAgIGlmIChpdGVyYWJsZSBpcyBMaXN0KSB7CiAgICAgIHNldFJhbmdlKGluZGV4LCBpbmRleCArIGl0ZXJhYmxlLmxlbmd0aCwgaXRlcmFibGUpOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChUIGVsZW1lbnQgaW4gaXRlcmFibGUpIHsKICAgICAgICB0aGlzW2luZGV4KytdID0gZWxlbWVudDsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCByZW1vdmVSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgIExpc3RzLmNvcHkodGhpcywgZW5kLCB0aGlzLCBzdGFydCwgdGhpcy5sZW5ndGggLSBlbmQpOwogICAgdGhpcy5sZW5ndGggPSB0aGlzLmxlbmd0aCAtIChlbmQgLSBzdGFydCk7CiAgfQoKICBMaXN0PFQ+IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pIHsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIGlmIChsZW5ndGggPT0gMCkgcmV0dXJuIDxUPltdOwogICAgTGlzdCBsaXN0ID0gbmV3IF9MaXN0KGxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGxpc3RbaV0gPSB0aGlzW3N0YXJ0ICsgaV07CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gbmV3IF9Hcm93YWJsZUxpc3Q8VD4uX3dpdGhEYXRhKGxpc3QpOwogICAgcmVzdWx0Ll9zZXRMZW5ndGgobGVuZ3RoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBmYWN0b3J5IF9Hcm93YWJsZUxpc3QoaW50IGxlbmd0aCkgewogICAgdmFyIGRhdGEgPSBfYWxsb2NhdGVEYXRhKGxlbmd0aCk7CiAgICB2YXIgcmVzdWx0ID0gbmV3IF9Hcm93YWJsZUxpc3Q8VD4uX3dpdGhEYXRhKGRhdGEpOwogICAgaWYgKGxlbmd0aCA+IDApIHsKICAgICAgcmVzdWx0Ll9zZXRMZW5ndGgobGVuZ3RoKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBmYWN0b3J5IF9Hcm93YWJsZUxpc3Qud2l0aENhcGFjaXR5KGludCBjYXBhY2l0eSkgewogICAgdmFyIGRhdGEgPSBfYWxsb2NhdGVEYXRhKGNhcGFjaXR5KTsKICAgIHJldHVybiBuZXcgX0dyb3dhYmxlTGlzdDxUPi5fd2l0aERhdGEoZGF0YSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9Hcm93YWJsZUxpc3QpCiAgZmFjdG9yeSBfR3Jvd2FibGVMaXN0Ll93aXRoRGF0YShfTGlzdCBkYXRhKSBuYXRpdmUgIkdyb3dhYmxlTGlzdF9hbGxvY2F0ZSI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgZ2V0IF9jYXBhY2l0eSBuYXRpdmUgIkdyb3dhYmxlTGlzdF9nZXRDYXBhY2l0eSI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgZ2V0IGxlbmd0aCBuYXRpdmUgIkdyb3dhYmxlTGlzdF9nZXRMZW5ndGgiOwoKICB2b2lkIHNldCBsZW5ndGgoaW50IG5ld19sZW5ndGgpIHsKICAgIGludCBvbGRfY2FwYWNpdHkgPSBfY2FwYWNpdHk7CiAgICBpbnQgbmV3X2NhcGFjaXR5ID0gbmV3X2xlbmd0aDsKICAgIGlmIChuZXdfY2FwYWNpdHkgPiBvbGRfY2FwYWNpdHkpIHsKICAgICAgX2dyb3cobmV3X2NhcGFjaXR5KTsKICAgICAgX3NldExlbmd0aChuZXdfbGVuZ3RoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gV2UgYXJlIHNocmlua2luZy4gUGljayB0aGUgbWV0aG9kIHdoaWNoIGhhcyBmZXdlciB3cml0ZXMuCiAgICAvLyBJbiB0aGUgc2hyaW5rLXRvLWZpdCBwYXRoLCB3ZSB3cml0ZSB8bmV3X2NhcGFjaXR5ICsgbmV3X2xlbmd0aHwgd29yZHMKICAgIC8vIChudWxsIGluaXQgKyBjb3B5KS4KICAgIC8vIEluIHRoZSBub24tc2hyaW5rLXRvLWZpdCBwYXRoLCB3ZSB3cml0ZSB8bGVuZ3RoIC0gbmV3X2xlbmd0aHwgd29yZHMKICAgIC8vIChudWxsIG92ZXJ3cml0ZSkuCiAgICBmaW5hbCBib29sIHNob3VsZFNocmlua1RvRml0ID0KICAgICAgICAobmV3X2NhcGFjaXR5ICsgbmV3X2xlbmd0aCkgPCAobGVuZ3RoIC0gbmV3X2xlbmd0aCk7CiAgICBpZiAoc2hvdWxkU2hyaW5rVG9GaXQpIHsKICAgICAgX3NocmluayhuZXdfY2FwYWNpdHksIG5ld19sZW5ndGgpOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChpbnQgaSA9IG5ld19sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIHRoaXNbaV0gPSBudWxsOwogICAgICB9CiAgICB9CiAgICBfc2V0TGVuZ3RoKG5ld19sZW5ndGgpOwogIH0KCiAgdm9pZCBfc2V0TGVuZ3RoKGludCBuZXdfbGVuZ3RoKSBuYXRpdmUgIkdyb3dhYmxlTGlzdF9zZXRMZW5ndGgiOwoKICB2b2lkIF9zZXREYXRhKF9MaXN0IGFycmF5KSBuYXRpdmUgIkdyb3dhYmxlTGlzdF9zZXREYXRhIjsKCiAgVCBvcGVyYXRvciBbXShpbnQgaW5kZXgpIG5hdGl2ZSAiR3Jvd2FibGVMaXN0X2dldEluZGV4ZWQiOwoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIFQgdmFsdWUpIHsKICAgIF9zZXRJbmRleGVkKGluZGV4LCB2YWx1ZSk7CiAgfQoKICB2b2lkIF9zZXRJbmRleGVkKGludCBpbmRleCwgVCB2YWx1ZSkgbmF0aXZlICJHcm93YWJsZUxpc3Rfc2V0SW5kZXhlZCI7CgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgYWRkKFQgdmFsdWUpIHsKICAgIHZhciBsZW4gPSBsZW5ndGg7CiAgICBpZiAobGVuID09IF9jYXBhY2l0eSkgewogICAgICBfZ3JvdyhfbmV4dENhcGFjaXR5KGxlbikpOwogICAgfQogICAgX3NldExlbmd0aChsZW4gKyAxKTsKICAgIHRoaXNbbGVuXSA9IHZhbHVlOwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8VD4gaXRlcmFibGUpIHsKICAgIHZhciBsZW4gPSBsZW5ndGg7CiAgICBmaW5hbCBjaWQgPSBDbGFzc0lELmdldElEKGl0ZXJhYmxlKTsKICAgIGZpbmFsIGlzVk1MaXN0ID0gKGNpZCA9PSBDbGFzc0lELmNpZEFycmF5KSB8fAogICAgICAgIChjaWQgPT0gQ2xhc3NJRC5jaWRHcm93YWJsZU9iamVjdEFycmF5KSB8fAogICAgICAgIChjaWQgPT0gQ2xhc3NJRC5jaWRJbW11dGFibGVBcnJheSk7CiAgICBpZiAoaXNWTUxpc3QgfHwgKGl0ZXJhYmxlIGlzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlKSkgewogICAgICB2YXIgY2FwID0gX2NhcGFjaXR5OwogICAgICAvLyBQcmVncm93IGlmIHdlIGtub3cgaXRlcmFibGUubGVuZ3RoLgogICAgICB2YXIgaXRlckxlbiA9IGl0ZXJhYmxlLmxlbmd0aDsKICAgICAgdmFyIG5ld0xlbiA9IGxlbiArIGl0ZXJMZW47CiAgICAgIGlmIChuZXdMZW4gPiBjYXApIHsKICAgICAgICBkbyB7CiAgICAgICAgICBjYXAgPSBfbmV4dENhcGFjaXR5KGNhcCk7CiAgICAgICAgfSB3aGlsZSAobmV3TGVuID4gY2FwKTsKICAgICAgICBfZ3JvdyhjYXApOwogICAgICB9CiAgICAgIGlmIChpc1ZNTGlzdCkgewogICAgICAgIGlmIChpZGVudGljYWwoaXRlcmFibGUsIHRoaXMpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICAgIH0KICAgICAgICB0aGlzLl9zZXRMZW5ndGgobmV3TGVuKTsKICAgICAgICBmaW5hbCBMaXN0QmFzZTxUPiBpdGVyYWJsZUFzTGlzdCA9IGl0ZXJhYmxlOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlckxlbjsgaSsrKSB7CiAgICAgICAgICB0aGlzW2xlbisrXSA9IGl0ZXJhYmxlQXNMaXN0W2ldOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICAgIEl0ZXJhdG9yIGl0ID0gaXRlcmFibGUuaXRlcmF0b3I7CiAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHJldHVybjsKICAgIGRvIHsKICAgICAgd2hpbGUgKGxlbiA8IF9jYXBhY2l0eSkgewogICAgICAgIGludCBuZXdMZW4gPSBsZW4gKyAxOwogICAgICAgIHRoaXMuX3NldExlbmd0aChuZXdMZW4pOwogICAgICAgIHRoaXNbbGVuXSA9IGl0LmN1cnJlbnQ7CiAgICAgICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSByZXR1cm47CiAgICAgICAgaWYgKHRoaXMubGVuZ3RoICE9IG5ld0xlbikgdGhyb3cgbmV3IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgICBsZW4gPSBuZXdMZW47CiAgICAgIH0KICAgICAgX2dyb3coX25leHRDYXBhY2l0eShfY2FwYWNpdHkpKTsKICAgIH0gd2hpbGUgKHRydWUpOwogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgVCByZW1vdmVMYXN0KCkgewogICAgdmFyIGxlbiA9IGxlbmd0aCAtIDE7CiAgICB2YXIgZWxlbSA9IHRoaXNbbGVuXTsKICAgIHRoaXMubGVuZ3RoID0gbGVuOwogICAgcmV0dXJuIGVsZW07CiAgfQoKICBUIGdldCBmaXJzdCB7CiAgICBpZiAobGVuZ3RoID4gMCkgcmV0dXJuIHRoaXNbMF07CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIFQgZ2V0IGxhc3QgewogICAgaWYgKGxlbmd0aCA+IDApIHJldHVybiB0aGlzW2xlbmd0aCAtIDFdOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBUIGdldCBzaW5nbGUgewogICAgaWYgKGxlbmd0aCA9PSAxKSByZXR1cm4gdGhpc1swXTsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgfQoKICAvLyBTaGFyZWQgYXJyYXkgdXNlZCBhcyBiYWNraW5nIGZvciBuZXcgZW1wdHkgZ3Jvd2FibGUgYXJyYXlzLgogIHN0YXRpYyBmaW5hbCBfTGlzdCBfZW1wdHlMaXN0ID0gbmV3IF9MaXN0KDApOwoKICBzdGF0aWMgX0xpc3QgX2FsbG9jYXRlRGF0YShpbnQgY2FwYWNpdHkpIHsKICAgIGlmIChjYXBhY2l0eSA9PSAwKSB7CiAgICAgIC8vIFVzZSBzaGFyZWQgZW1wdHkgbGlzdCBhcyBiYWNraW5nLgogICAgICByZXR1cm4gX2VtcHR5TGlzdDsKICAgIH0KICAgIC8vIFJvdW5kIHVwIHNpemUgdG8gdGhlIG5leHQgb2RkIG51bWJlciwgc2luY2UgdGhpcyBpcyBmcmVlCiAgICAvLyBiZWNhdXNlIG9mIGFsaWdubWVudCByZXF1aXJlbWVudHMgb2YgdGhlIEdDLgogICAgcmV0dXJuIG5ldyBfTGlzdChjYXBhY2l0eSB8IDEpOwogIH0KCiAgLy8gR3JvdyBmcm9tIDAgdG8gMywgYW5kIHRoZW4gZG91YmxlICsgMS4KICBpbnQgX25leHRDYXBhY2l0eShpbnQgb2xkX2NhcGFjaXR5KSA9PiAob2xkX2NhcGFjaXR5ICogMikgfCAzOwoKICB2b2lkIF9ncm93KGludCBuZXdfY2FwYWNpdHkpIHsKICAgIHZhciBuZXdEYXRhID0gX2FsbG9jYXRlRGF0YShuZXdfY2FwYWNpdHkpOwogICAgLy8gVGhpcyBpcyBhIHdvcmstYXJvdW5kIGZvciBkYXJ0YnVnLmNvbS8zMDA5MDogYXJyYXktYm91bmQtY2hlY2sKICAgIC8vIGdlbmVyYWxpemF0aW9uIGNhdXNlcyBleGNlc3NpdmUgZGVvcHRpbWl6YXRpb25zIGJlY2F1c2UgaXQKICAgIC8vIGhvaXN0cyBDaGVja0FycmF5Qm91bmQoaSwgLi4uKSBvdXQgb2YgdGhlIGxvb3AgYmVsb3cgYW5kIHR1cm5zIGl0CiAgICAvLyBpbnRvIENoZWNrQXJyYXlCb3VuZChsZW5ndGggLSAxLCAuLi4pLiBXaGljaCBkZW9wdGltaXplcwogICAgLy8gaWYgbGVuZ3RoID09IDAuIEhvd2V2ZXIgdGhlIGxvb3AgaXRzZWxmIGRvZXMgbm90IGV4ZWN1dGUKICAgIC8vIGlmIGxlbmd0aCA9PSAwLgogICAgaWYgKGxlbmd0aCA+IDApIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIG5ld0RhdGFbaV0gPSB0aGlzW2ldOwogICAgICB9CiAgICB9CiAgICBfc2V0RGF0YShuZXdEYXRhKTsKICB9CgogIHZvaWQgX3NocmluayhpbnQgbmV3X2NhcGFjaXR5LCBpbnQgbmV3X2xlbmd0aCkgewogICAgdmFyIG5ld0RhdGEgPSBfYWxsb2NhdGVEYXRhKG5ld19jYXBhY2l0eSk7CiAgICAvLyBUaGlzIGlzIGEgd29yay1hcm91bmQgZm9yIGRhcnRidWcuY29tLzMwMDkwLiBTZWUgdGhlIGNvbW1lbnQgaW4gX2dyb3cuCiAgICBpZiAobmV3X2xlbmd0aCA+IDApIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZXdfbGVuZ3RoOyBpKyspIHsKICAgICAgICBuZXdEYXRhW2ldID0gdGhpc1tpXTsKICAgICAgfQogICAgfQogICAgX3NldERhdGEobmV3RGF0YSk7CiAgfQoKICAvLyBJdGVyYWJsZSBpbnRlcmZhY2UuCgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgZm9yRWFjaChmKFQgZWxlbWVudCkpIHsKICAgIGludCBpbml0aWFsTGVuZ3RoID0gbGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBmKHRoaXNbaV0pOwogICAgICBpZiAobGVuZ3RoICE9IGluaXRpYWxMZW5ndGgpIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICB9CiAgfQoKICBTdHJpbmcgam9pbihbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSkgewogICAgZmluYWwgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgaWYgKGxlbmd0aCA9PSAwKSByZXR1cm4gIiI7CiAgICBpZiAobGVuZ3RoID09IDEpIHJldHVybiAiJHt0aGlzWzBdfSI7CiAgICBpZiAoc2VwYXJhdG9yLmlzTm90RW1wdHkpIHJldHVybiBfam9pbldpdGhTZXBhcmF0b3Ioc2VwYXJhdG9yKTsKICAgIHZhciBpID0gMDsKICAgIHZhciBjb2RlVW5pdENvdW50ID0gMDsKICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7CiAgICAgIGZpbmFsIGVsZW1lbnQgPSB0aGlzW2ldOwogICAgICAvLyBXaGlsZSBsaXN0IGNvbnRhaW5zIG9uZS1ieXRlIHN0cmluZ3MuCiAgICAgIGlmIChlbGVtZW50IGlzIF9PbmVCeXRlU3RyaW5nKSB7CiAgICAgICAgY29kZVVuaXRDb3VudCArPSBlbGVtZW50Lmxlbmd0aDsKICAgICAgICBpKys7CiAgICAgICAgLy8gTG9vcCBiYWNrIHdoaWxlIHN0cmluZ3MgYXJlIG9uZS1ieXRlIHN0cmluZ3MuCiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgLy8gT3RoZXJ3aXNlLCBuZXZlciBsb29wIGJhY2sgdG8gdGhlIG91dGVyIGxvb3AsIGFuZAogICAgICAvLyBoYW5kbGUgdGhlIHJlbWFpbmluZyBzdHJpbmdzIGJlbG93LgoKICAgICAgLy8gTG9vcCB3aGlsZSBlbGVtZW50cyBhcmUgc3RyaW5ncywKICAgICAgZmluYWwgaW50IGZpcnN0Tm9uT25lQnl0ZVN0cmluZ0xpbWl0ID0gaTsKICAgICAgdmFyIG5leHRFbGVtZW50ID0gZWxlbWVudDsKICAgICAgd2hpbGUgKG5leHRFbGVtZW50IGlzIFN0cmluZykgewogICAgICAgIGkrKzsKICAgICAgICBpZiAoaSA9PSBsZW5ndGgpIHsKICAgICAgICAgIHJldHVybiBfU3RyaW5nQmFzZS5fY29uY2F0UmFuZ2VOYXRpdmUodGhpcywgMCwgbGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgbmV4dEVsZW1lbnQgPSB0aGlzW2ldOwogICAgICB9CgogICAgICAvLyBOb3QgYWxsIGVsZW1lbnRzIGFyZSBzdHJpbmdzLCBzbyBhbGxvY2F0ZSBhIG5ldyBiYWNraW5nIGFycmF5LgogICAgICBmaW5hbCBsaXN0ID0gbmV3IF9MaXN0KGxlbmd0aCk7CiAgICAgIGZvciAoaW50IGNvcHlJbmRleCA9IDA7IGNvcHlJbmRleCA8IGk7IGNvcHlJbmRleCsrKSB7CiAgICAgICAgbGlzdFtjb3B5SW5kZXhdID0gdGhpc1tjb3B5SW5kZXhdOwogICAgICB9CiAgICAgIC8vIElzIG5vbi16ZXJvIGlmIGxpc3QgY29udGFpbnMgYSBub24tb25lYnl0ZSBzdHJpbmcuCiAgICAgIHZhciBvbmVieXRlQ2FuYXJ5ID0gaSAtIGZpcnN0Tm9uT25lQnl0ZVN0cmluZ0xpbWl0OwogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIGZpbmFsIFN0cmluZyBlbGVtZW50U3RyaW5nID0gIiRuZXh0RWxlbWVudCI7CiAgICAgICAgb25lYnl0ZUNhbmFyeSB8PQogICAgICAgICAgICAoQ2xhc3NJRC5nZXRJRChlbGVtZW50U3RyaW5nKSBeIENsYXNzSUQuY2lkT25lQnl0ZVN0cmluZyk7CiAgICAgICAgbGlzdFtpXSA9IGVsZW1lbnRTdHJpbmc7CiAgICAgICAgY29kZVVuaXRDb3VudCArPSBlbGVtZW50U3RyaW5nLmxlbmd0aDsKICAgICAgICBpKys7CiAgICAgICAgaWYgKGkgPT0gbGVuZ3RoKSBicmVhazsKICAgICAgICBuZXh0RWxlbWVudCA9IHRoaXNbaV07CiAgICAgIH0KICAgICAgaWYgKG9uZWJ5dGVDYW5hcnkgPT0gMCkgewogICAgICAgIC8vIEFsbCBlbGVtZW50cyByZXR1cm5lZCBhIG9uZS1ieXRlIHN0cmluZyBmcm9tIHRvU3RyaW5nLgogICAgICAgIHJldHVybiBfT25lQnl0ZVN0cmluZy5fY29uY2F0QWxsKGxpc3QsIGNvZGVVbml0Q291bnQpOwogICAgICB9CiAgICAgIHJldHVybiBfU3RyaW5nQmFzZS5fY29uY2F0UmFuZ2VOYXRpdmUobGlzdCwgMCwgbGVuZ3RoKTsKICAgIH0KICAgIC8vIEFsbCBlbGVtZW50cyB3ZXJlIG9uZS1ieXRlIHN0cmluZ3MuCiAgICByZXR1cm4gX09uZUJ5dGVTdHJpbmcuX2NvbmNhdEFsbCh0aGlzLCBjb2RlVW5pdENvdW50KTsKICB9CgogIFN0cmluZyBfam9pbldpdGhTZXBhcmF0b3IoU3RyaW5nIHNlcGFyYXRvcikgewogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGJ1ZmZlci53cml0ZSh0aGlzWzBdKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykgewogICAgICBidWZmZXIud3JpdGUoc2VwYXJhdG9yKTsKICAgICAgYnVmZmVyLndyaXRlKHRoaXNbaV0pOwogICAgfQogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgVCBlbGVtZW50QXQoaW50IGluZGV4KSB7CiAgICByZXR1cm4gdGhpc1tpbmRleF07CiAgfQoKICBib29sIGdldCBpc0VtcHR5IHsKICAgIHJldHVybiB0aGlzLmxlbmd0aCA9PSAwOwogIH0KCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiAhaXNFbXB0eTsKCiAgdm9pZCBjbGVhcigpIHsKICAgIHRoaXMubGVuZ3RoID0gMDsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+IExpc3RCYXNlLmxpc3RUb1N0cmluZyh0aGlzKTsKCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgSXRlcmF0b3I8VD4gZ2V0IGl0ZXJhdG9yIHsKICAgIHJldHVybiBuZXcgTGlzdEl0ZXJhdG9yPFQ+KHRoaXMpOwogIH0KCiAgTGlzdDxUPiB0b0xpc3Qoe2Jvb2wgZ3Jvd2FibGU6IHRydWV9KSB7CiAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBpZiAobGVuZ3RoID4gMCkgewogICAgICBMaXN0IGxpc3QgPSBncm93YWJsZSA/IG5ldyBfTGlzdChsZW5ndGgpIDogbmV3IF9MaXN0PFQ+KGxlbmd0aCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICBsaXN0W2ldID0gdGhpc1tpXTsKICAgICAgfQogICAgICBpZiAoIWdyb3dhYmxlKSByZXR1cm4gbGlzdDsKICAgICAgdmFyIHJlc3VsdCA9IG5ldyBfR3Jvd2FibGVMaXN0PFQ+Ll93aXRoRGF0YShsaXN0KTsKICAgICAgcmVzdWx0Ll9zZXRMZW5ndGgobGVuZ3RoKTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIHJldHVybiBncm93YWJsZSA/IDxUPltdIDogbmV3IExpc3Q8VD4oMCk7CiAgfQoKICBTZXQ8VD4gdG9TZXQoKSB7CiAgICByZXR1cm4gbmV3IFNldDxUPi5mcm9tKHRoaXMpOwogIH0KfQqBjABOTjwBHgEaLSYrNAYgFA4GIU5MSzcTQRsEARoeJR1DBh0TBAEgLCAVFQgGEgQBNCc0BjpRJAYrTUxAJEEdBAExHDoNJCEIBgQBKTk7LwQBKj8eIyMnIQY3HxMEASYmNxYhBhMEATUoMQQBMU4BNB43ATQeMgEkIiMnGx4OBkFNG0sZIz0dKQ0yGAgGHAQBQwE8AT0BKh8EAUkBJB4WFhwhBhkXBAEmFikyMyw9Gy0lIhoNJCAUCBYpNwohNSwrChAIBiUgCSAeISAkUBYIJxQEAR4TGhoXEQQBECQsBAEPLSwEARElPSoEAUEwAS0ZKxkGQDQkBAEsQQEhL0ZCSUBAFxYpHggGFwQBMy9OGi0eCAYXBAEZAR4fICcSUAYEASkkICpEDxsZHy8nKQ05Egg7LQEqMCEmDRtCCh8IAUgmPCsIPDoVNRlHIS8NIB8IIEI/CD4GKzsEATAuGywfHQYeBAEbGAQBFR0EASMBERUEATQBHh0mBAEqHhZHKRsIIjkhFQYuBAETIgQCASNkYXJ0OmNvcmUtcGF0Y2gvZ3Jvd2FibGVfYXJyYXkuZGFydDJvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL2ltbXV0YWJsZV9tYXAuZGFydJWdLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgovLy8gSW1tdXRhYmxlIG1hcCBjbGFzcyBmb3IgY29tcGlsZXIgZ2VuZXJhdGVkIG1hcCBsaXRlcmFscy4KLy8gVE9ETyhscm4pOiBFeHRlbmQgTWFwQmFzZSB3aXRoIFVubW9kaWZpYWJsZU1hcE1peGluIHdoZW4gbWl4aW5zCi8vIHN1cHBvcnQgZm9yd2FyZGluZyBjb25zdCBjb25zdHJ1Y3RvcnMuCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0ltbXV0YWJsZU1hcDxLLCBWPiBpbXBsZW1lbnRzIE1hcDxLLCBWPiB7CiAgZmluYWwgX0ltbXV0YWJsZUxpc3QgX2t2UGFpcnM7CgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBjb25zdCBfSW1tdXRhYmxlTWFwLl9jcmVhdGUoX0ltbXV0YWJsZUxpc3Qga2V5VmFsdWVQYWlycykKICAgICAgOiBfa3ZQYWlycyA9IGtleVZhbHVlUGFpcnM7CgogIE1hcDxLMiwgVjI+IGNhc3Q8SzIsIFYyPigpID0+IE1hcC5jYXN0RnJvbTxLLCBWLCBLMiwgVjI+KHRoaXMpOwogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgewogICAgLy8gVG8gcHJlc2VydmUgdGhlIGtleS12YWx1ZSBvcmRlciBvZiB0aGUgbWFwIGxpdGVyYWwsIHRoZSBrZXlzIGFyZQogICAgLy8gbm90IHNvcnRlZC4gTmVlZCB0byBkbyBsaW5lYXIgc2VhcmNoIG9yIGltcGxlbWVudCBhbiBhZGRpdGlvbmFsCiAgICAvLyBsb29rdXAgdGFibGUuCiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9rdlBhaXJzLmxlbmd0aCAtIDE7IGkgKz0gMikgewogICAgICBpZiAoa2V5ID09IF9rdlBhaXJzW2ldKSB7CiAgICAgICAgcmV0dXJuIF9rdlBhaXJzW2kgKyAxXTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBib29sIGdldCBpc0VtcHR5IHsKICAgIHJldHVybiBfa3ZQYWlycy5sZW5ndGggPT0gMDsKICB9CgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gIWlzRW1wdHk7CgogIGludCBnZXQgbGVuZ3RoIHsKICAgIHJldHVybiBfa3ZQYWlycy5sZW5ndGggfi8gMjsKICB9CgogIHZvaWQgZm9yRWFjaCh2b2lkIGYoSyBrZXksIFYgdmFsdWUpKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9rdlBhaXJzLmxlbmd0aDsgaSArPSAyKSB7CiAgICAgIGYoX2t2UGFpcnNbaV0sIF9rdlBhaXJzW2kgKyAxXSk7CiAgICB9CiAgfQoKICBJdGVyYWJsZTxLPiBnZXQga2V5cyB7CiAgICByZXR1cm4gbmV3IF9JbW11dGFibGVNYXBLZXlJdGVyYWJsZTxLPih0aGlzKTsKICB9CgogIEl0ZXJhYmxlPFY+IGdldCB2YWx1ZXMgewogICAgcmV0dXJuIG5ldyBfSW1tdXRhYmxlTWFwVmFsdWVJdGVyYWJsZTxWPih0aGlzKTsKICB9CgogIGJvb2wgY29udGFpbnNLZXkoT2JqZWN0IGtleSkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfa3ZQYWlycy5sZW5ndGg7IGkgKz0gMikgewogICAgICBpZiAoa2V5ID09IF9rdlBhaXJzW2ldKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgY29udGFpbnNWYWx1ZShPYmplY3QgdmFsdWUpIHsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgX2t2UGFpcnMubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgaWYgKHZhbHVlID09IF9rdlBhaXJzW2ldKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KEsga2V5LCBWIHZhbHVlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHNldCB2YWx1ZSBpbiB1bm1vZGlmaWFibGUgTWFwIik7CiAgfQoKICB2b2lkIGFkZEFsbChNYXA8SywgVj4gb3RoZXIpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3Qgc2V0IHZhbHVlIGluIHVubW9kaWZpYWJsZSBNYXAiKTsKICB9CgogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBzZXQgdmFsdWUgaW4gdW5tb2RpZmlhYmxlIE1hcCIpOwogIH0KCiAgdm9pZCBjbGVhcigpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgY2xlYXIgdW5tb2RpZmlhYmxlIE1hcCIpOwogIH0KCiAgViByZW1vdmUoT2JqZWN0IGtleSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSB1bm1vZGlmaWFibGUgTWFwIik7CiAgfQoKICBJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZ2V0IGVudHJpZXMgPT4KICAgICAgbmV3IF9JbW11dGFibGVNYXBFbnRyeUl0ZXJhYmxlPEssIFY+KHRoaXMpOwoKICBNYXA8SzIsIFYyPiBtYXA8SzIsIFYyPihNYXBFbnRyeTxLMiwgVjI+IGYoSyBrZXksIFYgdmFsdWUpKSB7CiAgICB2YXIgcmVzdWx0ID0gPEsyLCBWMj57fTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX2t2UGFpcnMubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgdmFyIGVudHJ5ID0gZihfa3ZQYWlyc1tpXSwgX2t2UGFpcnNbaSArIDFdKTsKICAgICAgcmVzdWx0W2VudHJ5LmtleV0gPSBlbnRyeS52YWx1ZTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIGFkZEVudHJpZXMoSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IG5ld0VudHJpZXMpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBNYXAiKTsKICB9CgogIFYgdXBkYXRlKEsga2V5LCBWIHVwZGF0ZShWIHZhbHVlKSwge1YgaWZBYnNlbnQoKX0pIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBNYXAiKTsKICB9CgogIHZvaWQgdXBkYXRlQWxsKFYgdXBkYXRlKEsga2V5LCBWIHZhbHVlKSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgYW4gdW5tb2RpZmlhYmxlIE1hcCIpOwogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHByZWRpY2F0ZShLIGtleSwgViB2YWx1ZSkpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBNYXAiKTsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+IE1hcEJhc2UubWFwVG9TdHJpbmcodGhpcyk7Cn0KCmNsYXNzIF9JbW11dGFibGVNYXBLZXlJdGVyYWJsZTxFPiBleHRlbmRzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEU+IHsKICBmaW5hbCBfSW1tdXRhYmxlTWFwIF9tYXA7CiAgX0ltbXV0YWJsZU1hcEtleUl0ZXJhYmxlKHRoaXMuX21hcCk7CgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciB7CiAgICByZXR1cm4gbmV3IF9JbW11dGFibGVNYXBLZXlJdGVyYXRvcjxFPihfbWFwKTsKICB9CgogIGludCBnZXQgbGVuZ3RoID0+IF9tYXAubGVuZ3RoOwp9CgpjbGFzcyBfSW1tdXRhYmxlTWFwVmFsdWVJdGVyYWJsZTxFPiBleHRlbmRzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEU+IHsKICBmaW5hbCBfSW1tdXRhYmxlTWFwIF9tYXA7CiAgX0ltbXV0YWJsZU1hcFZhbHVlSXRlcmFibGUodGhpcy5fbWFwKTsKCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yIHsKICAgIHJldHVybiBuZXcgX0ltbXV0YWJsZU1hcFZhbHVlSXRlcmF0b3I8RT4oX21hcCk7CiAgfQoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfbWFwLmxlbmd0aDsKfQoKY2xhc3MgX0ltbXV0YWJsZU1hcEVudHJ5SXRlcmFibGU8SywgVj4KICAgIGV4dGVuZHMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IHsKICBmaW5hbCBfSW1tdXRhYmxlTWFwIF9tYXA7CiAgX0ltbXV0YWJsZU1hcEVudHJ5SXRlcmFibGUodGhpcy5fbWFwKTsKCiAgSXRlcmF0b3I8TWFwRW50cnk8SywgVj4+IGdldCBpdGVyYXRvciB7CiAgICByZXR1cm4gbmV3IF9JbW11dGFibGVNYXBFbnRyeUl0ZXJhdG9yPEssIFY+KF9tYXApOwogIH0KCiAgaW50IGdldCBsZW5ndGggPT4gX21hcC5sZW5ndGg7Cn0KCmNsYXNzIF9JbW11dGFibGVNYXBLZXlJdGVyYXRvcjxFPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPEU+IHsKICBfSW1tdXRhYmxlTWFwIF9tYXA7CiAgaW50IF9uZXh0SW5kZXggPSAwOwogIEUgX2N1cnJlbnQ7CgogIF9JbW11dGFibGVNYXBLZXlJdGVyYXRvcih0aGlzLl9tYXApOwoKICBib29sIG1vdmVOZXh0KCkgewogICAgaW50IG5ld0luZGV4ID0gX25leHRJbmRleDsKICAgIGlmIChuZXdJbmRleCA8IF9tYXAubGVuZ3RoKSB7CiAgICAgIF9uZXh0SW5kZXggPSBuZXdJbmRleCArIDE7CiAgICAgIF9jdXJyZW50ID0gX21hcC5fa3ZQYWlyc1tuZXdJbmRleCAqIDJdOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIF9jdXJyZW50ID0gbnVsbDsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEUgZ2V0IGN1cnJlbnQgPT4gX2N1cnJlbnQ7Cn0KCmNsYXNzIF9JbW11dGFibGVNYXBWYWx1ZUl0ZXJhdG9yPEU+IGltcGxlbWVudHMgSXRlcmF0b3I8RT4gewogIF9JbW11dGFibGVNYXAgX21hcDsKICBpbnQgX25leHRJbmRleCA9IDA7CiAgRSBfY3VycmVudDsKCiAgX0ltbXV0YWJsZU1hcFZhbHVlSXRlcmF0b3IodGhpcy5fbWFwKTsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGludCBuZXdJbmRleCA9IF9uZXh0SW5kZXg7CiAgICBpZiAobmV3SW5kZXggPCBfbWFwLmxlbmd0aCkgewogICAgICBfbmV4dEluZGV4ID0gbmV3SW5kZXggKyAxOwogICAgICBfY3VycmVudCA9IF9tYXAuX2t2UGFpcnNbbmV3SW5kZXggKiAyICsgMV07CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgX2N1cnJlbnQgPSBudWxsOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgRSBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKfQoKY2xhc3MgX0ltbXV0YWJsZU1hcEVudHJ5SXRlcmF0b3I8SywgVj4gaW1wbGVtZW50cyBJdGVyYXRvcjxNYXBFbnRyeTxLLCBWPj4gewogIF9JbW11dGFibGVNYXAgX21hcDsKICBpbnQgX25leHRJbmRleCA9IDA7CiAgTWFwRW50cnk8SywgVj4gX2N1cnJlbnQ7CgogIF9JbW11dGFibGVNYXBFbnRyeUl0ZXJhdG9yKHRoaXMuX21hcCk7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpbnQgbmV3SW5kZXggPSBfbmV4dEluZGV4OwogICAgaWYgKG5ld0luZGV4IDwgX21hcC5sZW5ndGgpIHsKICAgICAgX25leHRJbmRleCA9IG5ld0luZGV4ICsgMTsKICAgICAgX2N1cnJlbnQgPSBuZXcgTWFwRW50cnk8SywgVj4oCiAgICAgICAgICBfbWFwLl9rdlBhaXJzW25ld0luZGV4ICogMl0sIF9tYXAuX2t2UGFpcnNbbmV3SW5kZXggKiAyICsgMV0pOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIF9jdXJyZW50ID0gbnVsbDsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIE1hcEVudHJ5PEssIFY+IGdldCBjdXJyZW50ID0+IF9jdXJyZW50Owp9CoDeAE5OPAEeAT1DKhoxIQEcPCIBQh5IRxU3ICAIBhEEARUhBAEjARMhBAEpMycGBAEZMgQBGzQEASEzIBUIBhIEASUzIhUIBhIEASZIBAEhSAQBJ0gEARFBBAEZRwQBKjIBQB0zMycGEwQBOUUEATdFBAEtRQQBNUUEATICAUccJwEdMgQBIQIBSRwpAR00BAEhAgEnNhwpASo3BAEhAgE7FhYOAScBFB8iIS4TBhUSBAEdAgE9FhYOASkBFB8iITITBhUSBAEdAgFNFhYbASkBFB8iISVJEwYVEgQBKgIBImRhcnQ6Y29yZS1wYXRjaC9pbW11dGFibGVfbWFwLmRhcnQtb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9pbnRlZ2Vycy5kYXJ0wABa0y8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKYWJzdHJhY3QgY2xhc3MgX0ludGVnZXJJbXBsZW1lbnRhdGlvbiBpbXBsZW1lbnRzIGludCB7CiAgQHByYWdtYSgidm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlIikKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIG51bSBvcGVyYXRvciArKG51bSBvdGhlcikgPT4gb3RoZXIuX2FkZEZyb21JbnRlZ2VyKHRoaXMpOwogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBudW0gb3BlcmF0b3IgLShudW0gb3RoZXIpID0+IG90aGVyLl9zdWJGcm9tSW50ZWdlcih0aGlzKTsKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgbnVtIG9wZXJhdG9yICoobnVtIG90aGVyKSA9PiBvdGhlci5fbXVsRnJvbUludGVnZXIodGhpcyk7CgogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBpbnQgb3BlcmF0b3Igfi8obnVtIG90aGVyKSB7CiAgICBpZiAoKG90aGVyIGlzIGludCkgJiYgKG90aGVyID09IDApKSB7CiAgICAgIHRocm93IGNvbnN0IEludGVnZXJEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbigpOwogICAgfQogICAgcmV0dXJuIG90aGVyLl90cnVuY0RpdkZyb21JbnRlZ2VyKHRoaXMpOwogIH0KCiAgZG91YmxlIG9wZXJhdG9yIC8obnVtIG90aGVyKSB7CiAgICByZXR1cm4gdGhpcy50b0RvdWJsZSgpIC8gb3RoZXIudG9Eb3VibGUoKTsKICB9CgogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgbnVtIG9wZXJhdG9yICUobnVtIG90aGVyKSB7CiAgICBpZiAoKG90aGVyIGlzIGludCkgJiYgKG90aGVyID09IDApKSB7CiAgICAgIHRocm93IGNvbnN0IEludGVnZXJEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbigpOwogICAgfQogICAgcmV0dXJuIG90aGVyLl9tb2R1bG9Gcm9tSW50ZWdlcih0aGlzKTsKICB9CgogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBpbnQgb3BlcmF0b3IgLSgpIHsKICAgIHJldHVybiAwIC0gdGhpczsKICB9CgogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBpbnQgb3BlcmF0b3IgJihpbnQgb3RoZXIpID0+IG90aGVyLl9iaXRBbmRGcm9tSW50ZWdlcih0aGlzKTsKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgaW50IG9wZXJhdG9yIHwoaW50IG90aGVyKSA9PiBvdGhlci5fYml0T3JGcm9tSW50ZWdlcih0aGlzKTsKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgaW50IG9wZXJhdG9yIF4oaW50IG90aGVyKSA9PiBvdGhlci5fYml0WG9yRnJvbUludGVnZXIodGhpcyk7CgogIG51bSByZW1haW5kZXIobnVtIG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIuX3JlbWFpbmRlckZyb21JbnRlZ2VyKHRoaXMpOwogIH0KCiAgQHByYWdtYSgidm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlIikKICBpbnQgX2JpdEFuZEZyb21TbWkoX1NtaSBvdGhlcikgbmF0aXZlICJJbnRlZ2VyX2JpdEFuZEZyb21JbnRlZ2VyIjsKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIGludCBfYml0QW5kRnJvbUludGVnZXIoaW50IG90aGVyKSBuYXRpdmUgIkludGVnZXJfYml0QW5kRnJvbUludGVnZXIiOwogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgaW50IF9iaXRPckZyb21JbnRlZ2VyKGludCBvdGhlcikgbmF0aXZlICJJbnRlZ2VyX2JpdE9yRnJvbUludGVnZXIiOwogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgaW50IF9iaXRYb3JGcm9tSW50ZWdlcihpbnQgb3RoZXIpIG5hdGl2ZSAiSW50ZWdlcl9iaXRYb3JGcm9tSW50ZWdlciI7CiAgQHByYWdtYSgidm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlIikKICBpbnQgX3NockZyb21JbnRlZ2VyKGludCBvdGhlcikgbmF0aXZlICJJbnRlZ2VyX3NockZyb21JbnRlZ2VyIjsKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIGludCBfc2hsRnJvbUludGVnZXIoaW50IG90aGVyKSBuYXRpdmUgIkludGVnZXJfc2hsRnJvbUludGVnZXIiOwogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgaW50IF9hZGRGcm9tSW50ZWdlcihpbnQgb3RoZXIpIG5hdGl2ZSAiSW50ZWdlcl9hZGRGcm9tSW50ZWdlciI7CiAgQHByYWdtYSgidm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlIikKICBpbnQgX3N1YkZyb21JbnRlZ2VyKGludCBvdGhlcikgbmF0aXZlICJJbnRlZ2VyX3N1YkZyb21JbnRlZ2VyIjsKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIGludCBfbXVsRnJvbUludGVnZXIoaW50IG90aGVyKSBuYXRpdmUgIkludGVnZXJfbXVsRnJvbUludGVnZXIiOwogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgaW50IF90cnVuY0RpdkZyb21JbnRlZ2VyKGludCBvdGhlcikgbmF0aXZlICJJbnRlZ2VyX3RydW5jRGl2RnJvbUludGVnZXIiOwogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgaW50IF9tb2R1bG9Gcm9tSW50ZWdlcihpbnQgb3RoZXIpIG5hdGl2ZSAiSW50ZWdlcl9tb2R1bG9Gcm9tSW50ZWdlciI7CiAgaW50IF9yZW1haW5kZXJGcm9tSW50ZWdlcihpbnQgb3RoZXIpIHsKICAgIHJldHVybiBvdGhlciAtIChvdGhlciB+LyB0aGlzKSAqIHRoaXM7CiAgfQoKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgaW50IG9wZXJhdG9yID4+KGludCBvdGhlcikgPT4gb3RoZXIuX3NockZyb21JbnRlZ2VyKHRoaXMpOwogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBpbnQgb3BlcmF0b3IgPDwoaW50IG90aGVyKSA9PiBvdGhlci5fc2hsRnJvbUludGVnZXIodGhpcyk7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIGJvb2wgb3BlcmF0b3IgPChudW0gb3RoZXIpIHsKICAgIHJldHVybiBvdGhlciA+IHRoaXM7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBib29sIG9wZXJhdG9yID4obnVtIG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIuX2dyZWF0ZXJUaGFuRnJvbUludGVnZXIodGhpcyk7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBib29sIG9wZXJhdG9yID49KG51bSBvdGhlcikgewogICAgcmV0dXJuICh0aGlzID09IG90aGVyKSB8fCAodGhpcyA+IG90aGVyKTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIGJvb2wgb3BlcmF0b3IgPD0obnVtIG90aGVyKSB7CiAgICByZXR1cm4gKHRoaXMgPT0gb3RoZXIpIHx8ICh0aGlzIDwgb3RoZXIpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIGJvb2wgX2dyZWF0ZXJUaGFuRnJvbUludGVnZXIoaW50IG90aGVyKQogICAgICBuYXRpdmUgIkludGVnZXJfZ3JlYXRlclRoYW5Gcm9tSW50ZWdlciI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMgbnVtKSB7CiAgICAgIHJldHVybiBvdGhlci5fZXF1YWxUb0ludGVnZXIodGhpcyk7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgYm9vbCBfZXF1YWxUb0ludGVnZXIoaW50IG90aGVyKSBuYXRpdmUgIkludGVnZXJfZXF1YWxUb0ludGVnZXIiOwogIGludCBhYnMoKSB7CiAgICByZXR1cm4gdGhpcyA8IDAgPyAtdGhpcyA6IHRoaXM7CiAgfQoKICBpbnQgZ2V0IHNpZ24gewogICAgcmV0dXJuICh0aGlzID4gMCkgPyAxIDogKHRoaXMgPCAwKSA/IC0xIDogMDsKICB9CgogIGJvb2wgZ2V0IGlzRXZlbiA9PiAoKHRoaXMgJiAxKSA9PSAwKTsKICBib29sIGdldCBpc09kZCA9PiAhaXNFdmVuOwogIGJvb2wgZ2V0IGlzTmFOID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzTmVnYXRpdmUgPT4gdGhpcyA8IDA7CiAgYm9vbCBnZXQgaXNJbmZpbml0ZSA9PiBmYWxzZTsKICBib29sIGdldCBpc0Zpbml0ZSA9PiB0cnVlOwoKICBpbnQgdG9VbnNpZ25lZChpbnQgd2lkdGgpIHsKICAgIHJldHVybiB0aGlzICYgKCgxIDw8IHdpZHRoKSAtIDEpOwogIH0KCiAgaW50IHRvU2lnbmVkKGludCB3aWR0aCkgewogICAgLy8gVGhlIHZhbHVlIG9mIGJpbmFyeSBudW1iZXIgd2VpZ2h0cyBlYWNoIGJpdCBieSBhIHBvd2VyIG9mIHR3by4gIFRoZQogICAgLy8gdHdvcy1jb21wbGVtZW50IHZhbHVlIHdlaWdodHMgdGhlIHNpZ24gYml0IG5lZ2F0aXZlbHkuICBXZSBjb21wdXRlIHRoZQogICAgLy8gdmFsdWUgb2YgdGhlIG5lZ2F0aXZlIHdlaWdodGluZyBieSBpc29sYXRpbmcgdGhlIHNpZ24gYml0IHdpdGggdGhlCiAgICAvLyBjb3JyZWN0IHBvd2VyIG9mIHR3byB3ZWlnaHRpbmcgYW5kIHN1YnRyYWN0aW5nIGl0IGZyb20gdGhlIHZhbHVlIG9mIHRoZQogICAgLy8gbG93ZXIgYml0cy4KICAgIGludCBzaWduTWFzayA9IDEgPDwgKHdpZHRoIC0gMSk7CiAgICByZXR1cm4gKHRoaXMgJiAoc2lnbk1hc2sgLSAxKSkgLSAodGhpcyAmIHNpZ25NYXNrKTsKICB9CgogIGludCBjb21wYXJlVG8obnVtIG90aGVyKSB7CiAgICBjb25zdCBpbnQgRVFVQUwgPSAwLCBMRVNTID0gLTEsIEdSRUFURVIgPSAxOwogICAgaWYgKG90aGVyIGlzIGRvdWJsZSkgewogICAgICBjb25zdCBpbnQgTUFYX0VYQUNUX0lOVF9UT19ET1VCTEUgPSA5MDA3MTk5MjU0NzQwOTkyOyAvLyAyXjUzLgogICAgICBjb25zdCBpbnQgTUlOX0VYQUNUX0lOVF9UT19ET1VCTEUgPSAtTUFYX0VYQUNUX0lOVF9UT19ET1VCTEU7CiAgICAgIGNvbnN0IGJvb2wgbGltaXRJbnRzVG82NEJpdHMgPSAoKDEgPDwgNjQpID09IDApOwogICAgICBpZiAobGltaXRJbnRzVG82NEJpdHMpIHsKICAgICAgICAvLyBXaXRoIGludGVnZXJzIGxpbWl0ZWQgdG8gNjQgYml0cywgZG91YmxlLnRvSW50KCkgY2xhbXBzCiAgICAgICAgLy8gZG91YmxlIHZhbHVlIHRvIGZpdCBpbnRvIHRoZSBNSU5fSU5UNjQuLk1BWF9JTlQ2NCByYW5nZS4KICAgICAgICAvLyBDaGVjayBpZiB0aGUgZG91YmxlIHZhbHVlIGlzIG91dHNpZGUgb2YgdGhpcyByYW5nZS4KICAgICAgICAvLyBUaGlzIGNoZWNrIGhhbmRsZXMgKy8taW5maW5pdHkgYXMgd2VsbC4KICAgICAgICBjb25zdCBkb3VibGUgbWluSW50NjRBc0RvdWJsZSA9IC05MjIzMzcyMDM2ODU0Nzc1ODA4LjA7CiAgICAgICAgLy8gTUFYX0lOVDY0IGlzIG5vdCBwcmVjaXNlbHkgcmVwcmVzZW50YWJsZSBpbiBkb3VibGVzLCBzbwogICAgICAgIC8vIGNoZWNrIGFnYWluc3QgKE1BWF9JTlQ2NCArIDEpLgogICAgICAgIGNvbnN0IGRvdWJsZSBtYXhJbnQ2NFBsdXMxQXNEb3VibGUgPSA5MjIzMzcyMDM2ODU0Nzc1ODA4LjA7CiAgICAgICAgaWYgKG90aGVyIDwgbWluSW50NjRBc0RvdWJsZSkgewogICAgICAgICAgcmV0dXJuIEdSRUFURVI7CiAgICAgICAgfSBlbHNlIGlmIChvdGhlciA+PSBtYXhJbnQ2NFBsdXMxQXNEb3VibGUpIHsKICAgICAgICAgIHJldHVybiBMRVNTOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAob3RoZXIuaXNJbmZpbml0ZSkgewogICAgICAgICAgcmV0dXJuIG90aGVyLmlzTmVnYXRpdmUgPyBHUkVBVEVSIDogTEVTUzsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKG90aGVyLmlzTmFOKSB7CiAgICAgICAgcmV0dXJuIExFU1M7CiAgICAgIH0KICAgICAgaWYgKE1JTl9FWEFDVF9JTlRfVE9fRE9VQkxFIDw9IHRoaXMgJiYgdGhpcyA8PSBNQVhfRVhBQ1RfSU5UX1RPX0RPVUJMRSkgewogICAgICAgIC8vIExldCB0aGUgZG91YmxlIGltcGxlbWVudGF0aW9uIGRlYWwgd2l0aCAtMC4wLgogICAgICAgIHJldHVybiAtKG90aGVyLmNvbXBhcmVUbyh0aGlzLnRvRG91YmxlKCkpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBJZiBhYnMob3RoZXIpID4gTUFYX0VYQUNUX0lOVF9UT19ET1VCTEUsIHRoZW4gb3RoZXIgaGFzIGFuIGludGVnZXIKICAgICAgICAvLyB2YWx1ZSAobm8gYml0cyBiZWxvdyB0aGUgZGVjaW1hbCBwb2ludCkuCiAgICAgICAgb3RoZXIgPSBvdGhlci50b0ludCgpOwogICAgICB9CiAgICB9CiAgICBpZiAodGhpcyA8IG90aGVyKSB7CiAgICAgIHJldHVybiBMRVNTOwogICAgfSBlbHNlIGlmICh0aGlzID4gb3RoZXIpIHsKICAgICAgcmV0dXJuIEdSRUFURVI7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gRVFVQUw7CiAgICB9CiAgfQoKICBpbnQgcm91bmQoKSB7CiAgICByZXR1cm4gdGhpczsKICB9CgogIGludCBmbG9vcigpIHsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgaW50IGNlaWwoKSB7CiAgICByZXR1cm4gdGhpczsKICB9CgogIGludCB0cnVuY2F0ZSgpIHsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgZG91YmxlIHJvdW5kVG9Eb3VibGUoKSB7CiAgICByZXR1cm4gdGhpcy50b0RvdWJsZSgpOwogIH0KCiAgZG91YmxlIGZsb29yVG9Eb3VibGUoKSB7CiAgICByZXR1cm4gdGhpcy50b0RvdWJsZSgpOwogIH0KCiAgZG91YmxlIGNlaWxUb0RvdWJsZSgpIHsKICAgIHJldHVybiB0aGlzLnRvRG91YmxlKCk7CiAgfQoKICBkb3VibGUgdHJ1bmNhdGVUb0RvdWJsZSgpIHsKICAgIHJldHVybiB0aGlzLnRvRG91YmxlKCk7CiAgfQoKICBudW0gY2xhbXAobnVtIGxvd2VyTGltaXQsIG51bSB1cHBlckxpbWl0KSB7CiAgICBpZiAobG93ZXJMaW1pdCBpcyEgbnVtKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKGxvd2VyTGltaXQsICJsb3dlckxpbWl0IiwgIm5vdCBhIG51bWJlciIpOwogICAgfQogICAgaWYgKHVwcGVyTGltaXQgaXMhIG51bSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZSh1cHBlckxpbWl0LCAidXBwZXJMaW1pdCIsICJub3QgYSBudW1iZXIiKTsKICAgIH0KCiAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGludGVnZXJzLgogICAgaWYgKGxvd2VyTGltaXQgaXMgaW50ICYmIHVwcGVyTGltaXQgaXMgaW50ICYmIGxvd2VyTGltaXQgPD0gdXBwZXJMaW1pdCkgewogICAgICBpZiAodGhpcyA8IGxvd2VyTGltaXQpIHJldHVybiBsb3dlckxpbWl0OwogICAgICBpZiAodGhpcyA+IHVwcGVyTGltaXQpIHJldHVybiB1cHBlckxpbWl0OwogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIC8vIEdlbmVyaWMgY2FzZSBpbnZvbHZpbmcgZG91YmxlcywgYW5kIGludmFsaWQgaW50ZWdlciByYW5nZXMuCiAgICBpZiAobG93ZXJMaW1pdC5jb21wYXJlVG8odXBwZXJMaW1pdCkgPiAwKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKGxvd2VyTGltaXQpOwogICAgfQogICAgaWYgKGxvd2VyTGltaXQuaXNOYU4pIHJldHVybiBsb3dlckxpbWl0OwogICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IG5lZWQgdG8gY2FyZSBmb3IgLTAuMCBmb3IgdGhlIGxvd2VyIGxpbWl0LgogICAgaWYgKHRoaXMgPCBsb3dlckxpbWl0KSByZXR1cm4gbG93ZXJMaW1pdDsKICAgIGlmICh0aGlzLmNvbXBhcmVUbyh1cHBlckxpbWl0KSA+IDApIHJldHVybiB1cHBlckxpbWl0OwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICBpbnQgdG9JbnQoKSB7CiAgICByZXR1cm4gdGhpczsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0RvdWJsZSkKICBkb3VibGUgdG9Eb3VibGUoKSB7CiAgICByZXR1cm4gbmV3IF9Eb3VibGUuZnJvbUludGVnZXIodGhpcyk7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmdBc0ZpeGVkKGludCBmcmFjdGlvbkRpZ2l0cykgewogICAgcmV0dXJuIHRoaXMudG9Eb3VibGUoKS50b1N0cmluZ0FzRml4ZWQoZnJhY3Rpb25EaWdpdHMpOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nQXNFeHBvbmVudGlhbChbaW50IGZyYWN0aW9uRGlnaXRzXSkgewogICAgcmV0dXJuIHRoaXMudG9Eb3VibGUoKS50b1N0cmluZ0FzRXhwb25lbnRpYWwoZnJhY3Rpb25EaWdpdHMpOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nQXNQcmVjaXNpb24oaW50IHByZWNpc2lvbikgewogICAgcmV0dXJuIHRoaXMudG9Eb3VibGUoKS50b1N0cmluZ0FzUHJlY2lzaW9uKHByZWNpc2lvbik7CiAgfQoKICBzdGF0aWMgY29uc3QgX2RpZ2l0cyA9ICIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOwoKICBTdHJpbmcgdG9SYWRpeFN0cmluZyhpbnQgcmFkaXgpIHsKICAgIGlmIChyYWRpeCA8IDIgfHwgMzYgPCByYWRpeCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShyYWRpeCwgMiwgMzYsICJyYWRpeCIpOwogICAgfQogICAgaWYgKHJhZGl4ICYgKHJhZGl4IC0gMSkgPT0gMCkgewogICAgICByZXR1cm4gX3RvUG93MlN0cmluZyhyYWRpeCk7CiAgICB9CiAgICBpZiAocmFkaXggPT0gMTApIHJldHVybiB0aGlzLnRvU3RyaW5nKCk7CiAgICBmaW5hbCBib29sIGlzTmVnYXRpdmUgPSB0aGlzIDwgMDsKICAgIGludCB2YWx1ZSA9IGlzTmVnYXRpdmUgPyAtdGhpcyA6IHRoaXM7CiAgICBpZiAodmFsdWUgPCAwKSB7CiAgICAgIC8vIFdpdGggaW50ZWdlcnMgbGltaXRlZCB0byA2NCBiaXRzLCB0aGUgdmFsdWUKICAgICAgLy8gTUlOX0lOVDY0ID0gLTB4ODAwMDAwMDAwMDAwMDAwMCBvdmVyZmxvd3MgYXQgbmVnYXRpb246CiAgICAgIC8vIC1NSU5fSU5UNjQgPT0gTUlOX0lOVDY0LCBzbyBpdCByZXF1aXJlcyBzcGVjaWFsIGhhbmRsaW5nLgogICAgICByZXR1cm4gX21pbkludDY0VG9SYWRpeFN0cmluZyhyYWRpeCk7CiAgICB9CiAgICBMaXN0IHRlbXAgPSBuZXcgTGlzdCgpOwogICAgZG8gewogICAgICBpbnQgZGlnaXQgPSB2YWx1ZSAlIHJhZGl4OwogICAgICB2YWx1ZSB+Lz0gcmFkaXg7CiAgICAgIHRlbXAuYWRkKF9kaWdpdHMuY29kZVVuaXRBdChkaWdpdCkpOwogICAgfSB3aGlsZSAodmFsdWUgPiAwKTsKICAgIGlmIChpc05lZ2F0aXZlKSB0ZW1wLmFkZCgweDJkKTsgLy8gJy0nLgoKICAgIF9PbmVCeXRlU3RyaW5nIHN0cmluZyA9IF9PbmVCeXRlU3RyaW5nLl9hbGxvY2F0ZSh0ZW1wLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMCwgaiA9IHRlbXAubGVuZ3RoOyBqID4gMDsgaSsrKSB7CiAgICAgIHN0cmluZy5fc2V0QXQoaSwgdGVtcFstLWpdKTsKICAgIH0KICAgIHJldHVybiBzdHJpbmc7CiAgfQoKICBTdHJpbmcgX3RvUG93MlN0cmluZyhpbnQgcmFkaXgpIHsKICAgIGludCB2YWx1ZSA9IHRoaXM7CiAgICBpZiAodmFsdWUgPT0gMCkgcmV0dXJuICIwIjsKICAgIGFzc2VydChyYWRpeCAmIChyYWRpeCAtIDEpID09IDApOwogICAgdmFyIG5lZ2F0aXZlID0gdmFsdWUgPCAwOwogICAgdmFyIGJpdHNQZXJEaWdpdCA9IHJhZGl4LmJpdExlbmd0aCAtIDE7CiAgICB2YXIgbGVuZ3RoID0gMDsKICAgIGlmIChuZWdhdGl2ZSkgewogICAgICB2YWx1ZSA9IC12YWx1ZTsKICAgICAgbGVuZ3RoID0gMTsKICAgICAgaWYgKHZhbHVlIDwgMCkgewogICAgICAgIC8vIFdpdGggaW50ZWdlcnMgbGltaXRlZCB0byA2NCBiaXRzLCB0aGUgdmFsdWUKICAgICAgICAvLyBNSU5fSU5UNjQgPSAtMHg4MDAwMDAwMDAwMDAwMDAwIG92ZXJmbG93cyBhdCBuZWdhdGlvbjoKICAgICAgICAvLyAtTUlOX0lOVDY0ID09IE1JTl9JTlQ2NCwgc28gaXQgcmVxdWlyZXMgc3BlY2lhbCBoYW5kbGluZy4KICAgICAgICByZXR1cm4gX21pbkludDY0VG9SYWRpeFN0cmluZyhyYWRpeCk7CiAgICAgIH0KICAgIH0KICAgIC8vIEludGVnZXIgZGl2aXNpb24sIHJvdW5kaW5nIHVwLCB0byBmaW5kIG51bWJlciBvZiBfZGlnaXRzLgogICAgbGVuZ3RoICs9ICh2YWx1ZS5iaXRMZW5ndGggKyBiaXRzUGVyRGlnaXQgLSAxKSB+LyBiaXRzUGVyRGlnaXQ7CiAgICBfT25lQnl0ZVN0cmluZyBzdHJpbmcgPSBfT25lQnl0ZVN0cmluZy5fYWxsb2NhdGUobGVuZ3RoKTsKICAgIHN0cmluZy5fc2V0QXQoMCwgMHgyZCk7IC8vICctJy4gSXMgb3ZlcndyaXR0ZW4gaWYgbm90IG5lZ2F0aXZlLgogICAgdmFyIG1hc2sgPSByYWRpeCAtIDE7CiAgICBkbyB7CiAgICAgIHN0cmluZy5fc2V0QXQoLS1sZW5ndGgsIF9kaWdpdHMuY29kZVVuaXRBdCh2YWx1ZSAmIG1hc2spKTsKICAgICAgdmFsdWUgPj49IGJpdHNQZXJEaWdpdDsKICAgIH0gd2hpbGUgKHZhbHVlID4gMCk7CiAgICByZXR1cm4gc3RyaW5nOwogIH0KCiAgLy8vIENvbnZlcnRzIG5lZ2F0aXZlIHZhbHVlIHRvIHJhZGl4IHN0cmluZy4KICAvLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGhhbmRsZSBjb3JuZXIgY2FzZSBvZgogIC8vLyBNSU5fSU5UNjQgPSAtMHg4MDAwMDAwMDAwMDAwMDAwLgogIFN0cmluZyBfbWluSW50NjRUb1JhZGl4U3RyaW5nKGludCByYWRpeCkgewogICAgTGlzdCB0ZW1wID0gbmV3IExpc3QoKTsKICAgIGludCB2YWx1ZSA9IHRoaXM7CiAgICBhc3NlcnQodmFsdWUgPCAwKTsKICAgIGRvIHsKICAgICAgaW50IGRpZ2l0ID0gLXZhbHVlLnJlbWFpbmRlcihyYWRpeCk7CiAgICAgIHZhbHVlIH4vPSByYWRpeDsKICAgICAgdGVtcC5hZGQoX2RpZ2l0cy5jb2RlVW5pdEF0KGRpZ2l0KSk7CiAgICB9IHdoaWxlICh2YWx1ZSAhPSAwKTsKICAgIHRlbXAuYWRkKDB4MmQpOyAvLyAnLScuCgogICAgX09uZUJ5dGVTdHJpbmcgc3RyaW5nID0gX09uZUJ5dGVTdHJpbmcuX2FsbG9jYXRlKHRlbXAubGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwLCBqID0gdGVtcC5sZW5ndGg7IGogPiAwOyBpKyspIHsKICAgICAgc3RyaW5nLl9zZXRBdChpLCB0ZW1wWy0tal0pOwogICAgfQogICAgcmV0dXJuIHN0cmluZzsKICB9CgogIC8vIFJldHVybnMgcG93KHRoaXMsIGUpICUgbS4KICBpbnQgbW9kUG93KGludCBlLCBpbnQgbSkgewogICAgaWYgKGUgaXMhIGludCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZShlLCAiZXhwb25lbnQiLCAibm90IGFuIGludGVnZXIiKTsKICAgIH0KICAgIGlmIChtIGlzISBpbnQpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUobSwgIm1vZHVsdXMiLCAibm90IGFuIGludGVnZXIiKTsKICAgIH0KICAgIGlmIChlIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoZSwgMCwgbnVsbCwgImV4cG9uZW50Iik7CiAgICBpZiAobSA8PSAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShtLCAxLCBudWxsLCAibW9kdWx1cyIpOwogICAgaWYgKGUgPT0gMCkgcmV0dXJuIDE7CgogICAgLy8gVGhpcyBpcyBmbG9vcihzcXJ0KDJeNjMpKS4KICAgIGNvbnN0IGludCBtYXhWYWx1ZVRoYXRDYW5CZVNxdWFyZWRXaXRob3V0VHJ1bmNhdGlvbiA9IDMwMzcwMDA0OTk7CiAgICBpZiAobSA+IG1heFZhbHVlVGhhdENhbkJlU3F1YXJlZFdpdGhvdXRUcnVuY2F0aW9uKSB7CiAgICAgIC8vIFVzZSBCaWdJbnQgdmVyc2lvbiB0byBhdm9pZCB0cnVuY2F0aW9uIGluIG11bHRpcGxpY2F0aW9ucyBiZWxvdy4KICAgICAgcmV0dXJuIEJpZ0ludC5mcm9tKHRoaXMpLm1vZFBvdyhCaWdJbnQuZnJvbShlKSwgQmlnSW50LmZyb20obSkpLnRvSW50KCk7CiAgICB9CgogICAgaW50IGIgPSB0aGlzOwogICAgaWYgKGIgPCAwIHx8IGIgPiBtKSB7CiAgICAgIGIgJT0gbTsKICAgIH0KICAgIGludCByID0gMTsKICAgIHdoaWxlIChlID4gMCkgewogICAgICBpZiAoZS5pc09kZCkgewogICAgICAgIHIgPSAociAqIGIpICUgbTsKICAgICAgfQogICAgICBlID4+PSAxOwogICAgICBiID0gKGIgKiBiKSAlIG07CiAgICB9CiAgICByZXR1cm4gcjsKICB9CgogIC8vIElmIGludiBpcyBmYWxzZSwgcmV0dXJucyBnY2QoeCwgeSkuCiAgLy8gSWYgaW52IGlzIHRydWUgYW5kIGdjZCh4LCB5KSA9IDEsIHJldHVybnMgZCwgc28gdGhhdCBjKnggKyBkKnkgPSAxLgogIC8vIElmIGludiBpcyB0cnVlIGFuZCBnY2QoeCwgeSkgIT0gMSwgdGhyb3dzIEV4Y2VwdGlvbigiTm90IGNvcHJpbWUiKS4KICBzdGF0aWMgaW50IF9iaW5hcnlHY2QoaW50IHgsIGludCB5LCBib29sIGludikgewogICAgaW50IHMgPSAwOwogICAgaWYgKCFpbnYpIHsKICAgICAgd2hpbGUgKHguaXNFdmVuICYmIHkuaXNFdmVuKSB7CiAgICAgICAgeCA+Pj0gMTsKICAgICAgICB5ID4+PSAxOwogICAgICAgIHMrKzsKICAgICAgfQogICAgICBpZiAoeS5pc09kZCkgewogICAgICAgIHZhciB0ID0geDsKICAgICAgICB4ID0geTsKICAgICAgICB5ID0gdDsKICAgICAgfQogICAgfQogICAgZmluYWwgYm9vbCBhYyA9IHguaXNFdmVuOwogICAgaW50IHUgPSB4OwogICAgaW50IHYgPSB5OwogICAgaW50IGEgPSAxLCBiID0gMCwgYyA9IDAsIGQgPSAxOwogICAgZG8gewogICAgICB3aGlsZSAodS5pc0V2ZW4pIHsKICAgICAgICB1ID4+PSAxOwogICAgICAgIGlmIChhYykgewogICAgICAgICAgaWYgKCFhLmlzRXZlbiB8fCAhYi5pc0V2ZW4pIHsKICAgICAgICAgICAgYSArPSB5OwogICAgICAgICAgICBiIC09IHg7CiAgICAgICAgICB9CiAgICAgICAgICBhID4+PSAxOwogICAgICAgIH0gZWxzZSBpZiAoIWIuaXNFdmVuKSB7CiAgICAgICAgICBiIC09IHg7CiAgICAgICAgfQogICAgICAgIGIgPj49IDE7CiAgICAgIH0KICAgICAgd2hpbGUgKHYuaXNFdmVuKSB7CiAgICAgICAgdiA+Pj0gMTsKICAgICAgICBpZiAoYWMpIHsKICAgICAgICAgIGlmICghYy5pc0V2ZW4gfHwgIWQuaXNFdmVuKSB7CiAgICAgICAgICAgIGMgKz0geTsKICAgICAgICAgICAgZCAtPSB4OwogICAgICAgICAgfQogICAgICAgICAgYyA+Pj0gMTsKICAgICAgICB9IGVsc2UgaWYgKCFkLmlzRXZlbikgewogICAgICAgICAgZCAtPSB4OwogICAgICAgIH0KICAgICAgICBkID4+PSAxOwogICAgICB9CiAgICAgIGlmICh1ID49IHYpIHsKICAgICAgICB1IC09IHY7CiAgICAgICAgaWYgKGFjKSBhIC09IGM7CiAgICAgICAgYiAtPSBkOwogICAgICB9IGVsc2UgewogICAgICAgIHYgLT0gdTsKICAgICAgICBpZiAoYWMpIGMgLT0gYTsKICAgICAgICBkIC09IGI7CiAgICAgIH0KICAgIH0gd2hpbGUgKHUgIT0gMCk7CiAgICBpZiAoIWludikgcmV0dXJuIHYgPDwgczsKICAgIGlmICh2ICE9IDEpIHsKICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiTm90IGNvcHJpbWUiKTsKICAgIH0KICAgIGlmIChkIDwgMCkgewogICAgICBkICs9IHg7CiAgICAgIGlmIChkIDwgMCkgZCArPSB4OwogICAgfSBlbHNlIGlmIChkID4geCkgewogICAgICBkIC09IHg7CiAgICAgIGlmIChkID4geCkgZCAtPSB4OwogICAgfQogICAgcmV0dXJuIGQ7CiAgfQoKICAvLyBSZXR1cm5zIDEvdGhpcyAlIG0sIHdpdGggbSA+IDAuCiAgaW50IG1vZEludmVyc2UoaW50IG0pIHsKICAgIGlmIChtIGlzISBpbnQpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUobSwgIm1vZHVsdXMiLCAibm90IGFuIGludGVnZXIiKTsKICAgIH0KICAgIGlmIChtIDw9IDApIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKG0sIDEsIG51bGwsICJtb2R1bHVzIik7CiAgICBpZiAobSA9PSAxKSByZXR1cm4gMDsKICAgIGludCB0ID0gdGhpczsKICAgIGlmICgodCA8IDApIHx8ICh0ID49IG0pKSB0ICU9IG07CiAgICBpZiAodCA9PSAxKSByZXR1cm4gMTsKICAgIGlmICgodCA9PSAwKSB8fCAodC5pc0V2ZW4gJiYgbS5pc0V2ZW4pKSB7CiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIk5vdCBjb3ByaW1lIik7CiAgICB9CiAgICByZXR1cm4gX2JpbmFyeUdjZChtLCB0LCB0cnVlKTsKICB9CgogIC8vIFJldHVybnMgZ2NkIG9mIGFicyh0aGlzKSBhbmQgYWJzKG90aGVyKS4KICBpbnQgZ2NkKGludCBvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBpbnQpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUob3RoZXIsICJvdGhlciIsICJub3QgYW4gaW50ZWdlciIpOwogICAgfQogICAgaW50IHggPSB0aGlzLmFicygpOwogICAgaW50IHkgPSBvdGhlci5hYnMoKTsKICAgIGlmICh4ID09IDApIHJldHVybiB5OwogICAgaWYgKHkgPT0gMCkgcmV0dXJuIHg7CiAgICBpZiAoKHggPT0gMSkgfHwgKHkgPT0gMSkpIHJldHVybiAxOwogICAgcmV0dXJuIF9iaW5hcnlHY2QoeCwgeSwgZmFsc2UpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfU21pIGV4dGVuZHMgX0ludGVnZXJJbXBsZW1lbnRhdGlvbiB7CiAgZmFjdG9yeSBfU21pLl91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHRoaXM7CiAgaW50IGdldCBfaWRlbnRpdHlIYXNoQ29kZSA9PiB0aGlzOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBpbnQgb3BlcmF0b3IgfigpIG5hdGl2ZSAiU21pX2JpdE5lZ2F0ZSI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBnZXQgYml0TGVuZ3RoIG5hdGl2ZSAiU21pX2JpdExlbmd0aCI7CgogIGludCBvcGVyYXRvciAmKGludCBvdGhlcikgPT4gb3RoZXIuX2JpdEFuZEZyb21TbWkodGhpcyk7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBpbnQgX2JpdEFuZEZyb21TbWkoX1NtaSBvdGhlcikgbmF0aXZlICJTbWlfYml0QW5kRnJvbVNtaSI7CgogIC8qKgogICAqIFRoZSBkaWdpdHMgb2YgJzAwJywgJzAxJywgLi4uICc5OScgYXMgYSBzaW5nbGUgYXJyYXkuCiAgICoKICAgKiBHZXQgdGhlIGRpZ2l0cyBvZiBgbmAsIHdpdGggYDAgPD0gbiA8IDEwMGAsIGFzCiAgICogYF9kaWdpdFRhYmxlW24gKiAyXWAgYW5kIGBfZGlnaXRUYWJsZVtuICogMiArIDFdYC4KICAgKi8KICBzdGF0aWMgY29uc3QgX2RpZ2l0VGFibGUgPSBjb25zdCBbCiAgICAweDMwLCAweDMwLCAweDMwLCAweDMxLCAweDMwLCAweDMyLCAweDMwLCAweDMzLCAvLwogICAgMHgzMCwgMHgzNCwgMHgzMCwgMHgzNSwgMHgzMCwgMHgzNiwgMHgzMCwgMHgzNywgLy8KICAgIDB4MzAsIDB4MzgsIDB4MzAsIDB4MzksIDB4MzEsIDB4MzAsIDB4MzEsIDB4MzEsIC8vCiAgICAweDMxLCAweDMyLCAweDMxLCAweDMzLCAweDMxLCAweDM0LCAweDMxLCAweDM1LCAvLwogICAgMHgzMSwgMHgzNiwgMHgzMSwgMHgzNywgMHgzMSwgMHgzOCwgMHgzMSwgMHgzOSwgLy8KICAgIDB4MzIsIDB4MzAsIDB4MzIsIDB4MzEsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzMsIC8vCiAgICAweDMyLCAweDM0LCAweDMyLCAweDM1LCAweDMyLCAweDM2LCAweDMyLCAweDM3LCAvLwogICAgMHgzMiwgMHgzOCwgMHgzMiwgMHgzOSwgMHgzMywgMHgzMCwgMHgzMywgMHgzMSwgLy8KICAgIDB4MzMsIDB4MzIsIDB4MzMsIDB4MzMsIDB4MzMsIDB4MzQsIDB4MzMsIDB4MzUsIC8vCiAgICAweDMzLCAweDM2LCAweDMzLCAweDM3LCAweDMzLCAweDM4LCAweDMzLCAweDM5LCAvLwogICAgMHgzNCwgMHgzMCwgMHgzNCwgMHgzMSwgMHgzNCwgMHgzMiwgMHgzNCwgMHgzMywgLy8KICAgIDB4MzQsIDB4MzQsIDB4MzQsIDB4MzUsIDB4MzQsIDB4MzYsIDB4MzQsIDB4MzcsIC8vCiAgICAweDM0LCAweDM4LCAweDM0LCAweDM5LCAweDM1LCAweDMwLCAweDM1LCAweDMxLCAvLwogICAgMHgzNSwgMHgzMiwgMHgzNSwgMHgzMywgMHgzNSwgMHgzNCwgMHgzNSwgMHgzNSwgLy8KICAgIDB4MzUsIDB4MzYsIDB4MzUsIDB4MzcsIDB4MzUsIDB4MzgsIDB4MzUsIDB4MzksIC8vCiAgICAweDM2LCAweDMwLCAweDM2LCAweDMxLCAweDM2LCAweDMyLCAweDM2LCAweDMzLCAvLwogICAgMHgzNiwgMHgzNCwgMHgzNiwgMHgzNSwgMHgzNiwgMHgzNiwgMHgzNiwgMHgzNywgLy8KICAgIDB4MzYsIDB4MzgsIDB4MzYsIDB4MzksIDB4MzcsIDB4MzAsIDB4MzcsIDB4MzEsIC8vCiAgICAweDM3LCAweDMyLCAweDM3LCAweDMzLCAweDM3LCAweDM0LCAweDM3LCAweDM1LCAvLwogICAgMHgzNywgMHgzNiwgMHgzNywgMHgzNywgMHgzNywgMHgzOCwgMHgzNywgMHgzOSwgLy8KICAgIDB4MzgsIDB4MzAsIDB4MzgsIDB4MzEsIDB4MzgsIDB4MzIsIDB4MzgsIDB4MzMsIC8vCiAgICAweDM4LCAweDM0LCAweDM4LCAweDM1LCAweDM4LCAweDM2LCAweDM4LCAweDM3LCAvLwogICAgMHgzOCwgMHgzOCwgMHgzOCwgMHgzOSwgMHgzOSwgMHgzMCwgMHgzOSwgMHgzMSwgLy8KICAgIDB4MzksIDB4MzIsIDB4MzksIDB4MzMsIDB4MzksIDB4MzQsIDB4MzksIDB4MzUsIC8vCiAgICAweDM5LCAweDM2LCAweDM5LCAweDM3LCAweDM5LCAweDM4LCAweDM5LCAweDM5LCAvLwogIF07CgogIC8qKgogICAqIFJlc3VsdCBvZiBpbnQudG9TdHJpbmcgZm9yIC05OSwgLTk4LCAuLi4sIDk4LCA5OS4KICAgKi8KICBzdGF0aWMgY29uc3QgX3NtYWxsTG9va3VwVGFibGUgPSBjb25zdCBbCiAgICAiLTk5IiwgIi05OCIsICItOTciLCAiLTk2IiwgIi05NSIsICItOTQiLCAiLTkzIiwgIi05MiIsICItOTEiLCAiLTkwIiwgLy8KICAgICItODkiLCAiLTg4IiwgIi04NyIsICItODYiLCAiLTg1IiwgIi04NCIsICItODMiLCAiLTgyIiwgIi04MSIsICItODAiLCAvLwogICAgIi03OSIsICItNzgiLCAiLTc3IiwgIi03NiIsICItNzUiLCAiLTc0IiwgIi03MyIsICItNzIiLCAiLTcxIiwgIi03MCIsIC8vCiAgICAiLTY5IiwgIi02OCIsICItNjciLCAiLTY2IiwgIi02NSIsICItNjQiLCAiLTYzIiwgIi02MiIsICItNjEiLCAiLTYwIiwgLy8KICAgICItNTkiLCAiLTU4IiwgIi01NyIsICItNTYiLCAiLTU1IiwgIi01NCIsICItNTMiLCAiLTUyIiwgIi01MSIsICItNTAiLCAvLwogICAgIi00OSIsICItNDgiLCAiLTQ3IiwgIi00NiIsICItNDUiLCAiLTQ0IiwgIi00MyIsICItNDIiLCAiLTQxIiwgIi00MCIsIC8vCiAgICAiLTM5IiwgIi0zOCIsICItMzciLCAiLTM2IiwgIi0zNSIsICItMzQiLCAiLTMzIiwgIi0zMiIsICItMzEiLCAiLTMwIiwgLy8KICAgICItMjkiLCAiLTI4IiwgIi0yNyIsICItMjYiLCAiLTI1IiwgIi0yNCIsICItMjMiLCAiLTIyIiwgIi0yMSIsICItMjAiLCAvLwogICAgIi0xOSIsICItMTgiLCAiLTE3IiwgIi0xNiIsICItMTUiLCAiLTE0IiwgIi0xMyIsICItMTIiLCAiLTExIiwgIi0xMCIsIC8vCiAgICAiLTkiLCAiLTgiLCAiLTciLCAiLTYiLCAiLTUiLCAiLTQiLCAiLTMiLCAiLTIiLCAiLTEiLCAiMCIsIC8vCiAgICAiMSIsICIyIiwgIjMiLCAiNCIsICI1IiwgIjYiLCAiNyIsICI4IiwgIjkiLCAiMTAiLCAvLwogICAgIjExIiwgIjEyIiwgIjEzIiwgIjE0IiwgIjE1IiwgIjE2IiwgIjE3IiwgIjE4IiwgIjE5IiwgIjIwIiwgLy8KICAgICIyMSIsICIyMiIsICIyMyIsICIyNCIsICIyNSIsICIyNiIsICIyNyIsICIyOCIsICIyOSIsICIzMCIsIC8vCiAgICAiMzEiLCAiMzIiLCAiMzMiLCAiMzQiLCAiMzUiLCAiMzYiLCAiMzciLCAiMzgiLCAiMzkiLCAiNDAiLCAvLwogICAgIjQxIiwgIjQyIiwgIjQzIiwgIjQ0IiwgIjQ1IiwgIjQ2IiwgIjQ3IiwgIjQ4IiwgIjQ5IiwgIjUwIiwgLy8KICAgICI1MSIsICI1MiIsICI1MyIsICI1NCIsICI1NSIsICI1NiIsICI1NyIsICI1OCIsICI1OSIsICI2MCIsIC8vCiAgICAiNjEiLCAiNjIiLCAiNjMiLCAiNjQiLCAiNjUiLCAiNjYiLCAiNjciLCAiNjgiLCAiNjkiLCAiNzAiLCAvLwogICAgIjcxIiwgIjcyIiwgIjczIiwgIjc0IiwgIjc1IiwgIjc2IiwgIjc3IiwgIjc4IiwgIjc5IiwgIjgwIiwgLy8KICAgICI4MSIsICI4MiIsICI4MyIsICI4NCIsICI4NSIsICI4NiIsICI4NyIsICI4OCIsICI4OSIsICI5MCIsIC8vCiAgICAiOTEiLCAiOTIiLCAiOTMiLCAiOTQiLCAiOTUiLCAiOTYiLCAiOTciLCAiOTgiLCAiOTkiIC8vCiAgXTsKCiAgLy8gUG93ZXJzIG9mIDEwIGFib3ZlIDEwMDAwMDAgYXJlIGluZGlzdGluZ3Vpc2hhYmxlIGJ5IGV5ZS4KICBzdGF0aWMgY29uc3QgaW50IF9QT1dfMTBfNyA9IDEwMDAwMDAwOwogIHN0YXRpYyBjb25zdCBpbnQgX1BPV18xMF84ID0gMTAwMDAwMDAwOwogIHN0YXRpYyBjb25zdCBpbnQgX1BPV18xMF85ID0gMTAwMDAwMDAwMDsKCiAgLy8gRmluZCB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgZGlnaXRzIGluIGEgcG9zaXRpdmUgc21pLgogIC8vIE5ldmVyIGNhbGxlZCB3aXRoIG51bWJlcnMgPCAxMDAuIFRoZXNlIGFyZSBoYW5kbGVkIGJlZm9yZSBjYWxsaW5nLgogIHN0YXRpYyBpbnQgX3Bvc2l0aXZlQmFzZTEwTGVuZ3RoKHZhciBzbWkpIHsKICAgIC8vIEEgcG9zaXRpdmUgc21pIGhhcyBsZW5ndGggPD0gMTkgaWYgNjMtYml0LCAgPD0xMCBpZiAzMS1iaXQuCiAgICAvLyBBdm9pZCBjb21wYXJpbmcgYSAzMS1iaXQgc21pIHRvIGEgbm9uLXNtaS4KICAgIGlmIChzbWkgPCAxMDAwKSByZXR1cm4gMzsKICAgIGlmIChzbWkgPCAxMDAwMCkgcmV0dXJuIDQ7CiAgICBpZiAoc21pIDwgX1BPV18xMF83KSB7CiAgICAgIGlmIChzbWkgPCAxMDAwMDApIHJldHVybiA1OwogICAgICBpZiAoc21pIDwgMTAwMDAwMCkgcmV0dXJuIDY7CiAgICAgIHJldHVybiA3OwogICAgfQogICAgaWYgKHNtaSA8IF9QT1dfMTBfOCkgcmV0dXJuIDg7CiAgICBpZiAoc21pIDwgX1BPV18xMF85KSByZXR1cm4gOTsKICAgIHNtaSA9IHNtaSB+LyBfUE9XXzEwXzk7CiAgICAvLyBIYW5kbGUgbnVtYmVycyA8IDEwMCBiZWZvcmUgY2FsbGluZyByZWN1cnNpdmVseS4KICAgIGlmIChzbWkgPCAxMCkgcmV0dXJuIDEwOwogICAgaWYgKHNtaSA8IDEwMCkgcmV0dXJuIDExOwogICAgcmV0dXJuIDkgKyBfcG9zaXRpdmVCYXNlMTBMZW5ndGgoc21pKTsKICB9CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGlmICh0aGlzIDwgMTAwICYmIHRoaXMgPiAtMTAwKSByZXR1cm4gX3NtYWxsTG9va3VwVGFibGVbdGhpcyArIDk5XTsKICAgIGlmICh0aGlzIDwgMCkgcmV0dXJuIF9uZWdhdGl2ZVRvU3RyaW5nKHRoaXMpOwogICAgLy8gSW5zcGlyZWQgYnkgQW5kcmVpIEFsZXhhbmRyZXNjdTogIlRocmVlIE9wdGltaXphdGlvbiBUaXBzIGZvciBDKysiCiAgICAvLyBBdm9pZCBleHBlbnNpdmUgcmVtYWluZGVyIG9wZXJhdGlvbiBieSBkb2luZyBpdCBvbiBtb3JlIHRoYW4KICAgIC8vIG9uZSBkaWdpdCBhdCBhIHRpbWUuCiAgICBjb25zdCBpbnQgRElHSVRfWkVSTyA9IDB4MzA7CiAgICBpbnQgbGVuZ3RoID0gX3Bvc2l0aXZlQmFzZTEwTGVuZ3RoKHRoaXMpOwogICAgX09uZUJ5dGVTdHJpbmcgcmVzdWx0ID0gX09uZUJ5dGVTdHJpbmcuX2FsbG9jYXRlKGxlbmd0aCk7CiAgICBpbnQgaW5kZXggPSBsZW5ndGggLSAxOwogICAgdmFyIHNtaSA9IHRoaXM7CiAgICBkbyB7CiAgICAgIC8vIFR3byBkaWdpdHMgYXQgYSB0aW1lLgogICAgICB2YXIgdHdvRGlnaXRzID0gc21pLnJlbWFpbmRlcigxMDApOwogICAgICBzbWkgPSBzbWkgfi8gMTAwOwogICAgICBpbnQgZGlnaXRJbmRleCA9IHR3b0RpZ2l0cyAqIDI7CiAgICAgIHJlc3VsdC5fc2V0QXQoaW5kZXgsIF9kaWdpdFRhYmxlW2RpZ2l0SW5kZXggKyAxXSk7CiAgICAgIHJlc3VsdC5fc2V0QXQoaW5kZXggLSAxLCBfZGlnaXRUYWJsZVtkaWdpdEluZGV4XSk7CiAgICAgIGluZGV4IC09IDI7CiAgICB9IHdoaWxlIChzbWkgPj0gMTAwKTsKICAgIGlmIChzbWkgPCAxMCkgewogICAgICAvLyBDaGFyYWN0ZXIgY29kZSBmb3IgJzAnLgogICAgICByZXN1bHQuX3NldEF0KGluZGV4LCBESUdJVF9aRVJPICsgc21pKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIE5vIHJlbWFpbmRlciBmb3IgdGhpcyBjYXNlLgogICAgICBpbnQgZGlnaXRJbmRleCA9IHNtaSAqIDI7CiAgICAgIHJlc3VsdC5fc2V0QXQoaW5kZXgsIF9kaWdpdFRhYmxlW2RpZ2l0SW5kZXggKyAxXSk7CiAgICAgIHJlc3VsdC5fc2V0QXQoaW5kZXggLSAxLCBfZGlnaXRUYWJsZVtkaWdpdEluZGV4XSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8gRmluZCB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgZGlnaXRzIGluIGEgbmVnYXRpdmUgc21pLgogIC8vIE5ldmVyIGNhbGxlZCB3aXRoIG51bWJlcnMgPiAtMTAwLiBUaGVzZSBhcmUgaGFuZGxlZCBiZWZvcmUgY2FsbGluZy4KICBzdGF0aWMgaW50IF9uZWdhdGl2ZUJhc2UxMExlbmd0aCh2YXIgbmVnU21pKSB7CiAgICAvLyBBIG5lZ2F0aXZlIHNtaSBoYXMgbGVuZ3RoIDw9IDE5IGlmIDYzLWJpdCwgPD0xMCBpZiAzMS1iaXQuCiAgICAvLyBBdm9pZCBjb21wYXJpbmcgYSAzMS1iaXQgc21pIHRvIGEgbm9uLXNtaS4KICAgIGlmIChuZWdTbWkgPiAtMTAwMCkgcmV0dXJuIDM7CiAgICBpZiAobmVnU21pID4gLTEwMDAwKSByZXR1cm4gNDsKICAgIGlmIChuZWdTbWkgPiAtX1BPV18xMF83KSB7CiAgICAgIGlmIChuZWdTbWkgPiAtMTAwMDAwKSByZXR1cm4gNTsKICAgICAgaWYgKG5lZ1NtaSA+IC0xMDAwMDAwKSByZXR1cm4gNjsKICAgICAgcmV0dXJuIDc7CiAgICB9CiAgICBpZiAobmVnU21pID4gLV9QT1dfMTBfOCkgcmV0dXJuIDg7CiAgICBpZiAobmVnU21pID4gLV9QT1dfMTBfOSkgcmV0dXJuIDk7CiAgICBuZWdTbWkgPSBuZWdTbWkgfi8gX1BPV18xMF85OwogICAgLy8gSGFuZGxlIG51bWJlcnMgPiAtMTAwIGJlZm9yZSBjYWxsaW5nIHJlY3Vyc2l2ZWx5LgogICAgaWYgKG5lZ1NtaSA+IC0xMCkgcmV0dXJuIDEwOwogICAgaWYgKG5lZ1NtaSA+IC0xMDApIHJldHVybiAxMTsKICAgIHJldHVybiA5ICsgX25lZ2F0aXZlQmFzZTEwTGVuZ3RoKG5lZ1NtaSk7CiAgfQoKICAvLyBDb252ZXJ0IGEgbmVnYXRpdmUgc21pIHRvIGEgc3RyaW5nLgogIC8vIERvZXNuJ3QgbmVnYXRlIHRoZSBzbWkgdG8gYXZvaWQgbmVnYXRpbmcgdGhlIG1vc3QgbmVnYXRpdmUgc21pLCB3aGljaAogIC8vIHdvdWxkIGJlY29tZSBhIG5vbi1zbWkuCiAgc3RhdGljIFN0cmluZyBfbmVnYXRpdmVUb1N0cmluZyhpbnQgbmVnU21pKSB7CiAgICAvLyBDaGFyYWN0ZXIgY29kZSBmb3IgJy0nCiAgICBjb25zdCBpbnQgTUlOVVNfU0lHTiA9IDB4MmQ7CiAgICAvLyBDaGFyYWN0ZXIgY29kZSBmb3IgJzAnLgogICAgY29uc3QgaW50IERJR0lUX1pFUk8gPSAweDMwOwogICAgaWYgKG5lZ1NtaSA+IC0xMCkgewogICAgICByZXR1cm4gX09uZUJ5dGVTdHJpbmcuX2FsbG9jYXRlKDIpCiAgICAgICAgLi5fc2V0QXQoMCwgTUlOVVNfU0lHTikKICAgICAgICAuLl9zZXRBdCgxLCBESUdJVF9aRVJPIC0gbmVnU21pKTsKICAgIH0KICAgIGlmIChuZWdTbWkgPiAtMTAwKSB7CiAgICAgIGludCBkaWdpdEluZGV4ID0gMiAqIC1uZWdTbWk7CiAgICAgIHJldHVybiBfT25lQnl0ZVN0cmluZy5fYWxsb2NhdGUoMykKICAgICAgICAuLl9zZXRBdCgwLCBNSU5VU19TSUdOKQogICAgICAgIC4uX3NldEF0KDEsIF9kaWdpdFRhYmxlW2RpZ2l0SW5kZXhdKQogICAgICAgIC4uX3NldEF0KDIsIF9kaWdpdFRhYmxlW2RpZ2l0SW5kZXggKyAxXSk7CiAgICB9CiAgICAvLyBOdW1iZXIgb2YgZGlnaXRzLCBub3QgaW5jbHVkaW5nIG1pbnVzLgogICAgaW50IGRpZ2l0Q291bnQgPSBfbmVnYXRpdmVCYXNlMTBMZW5ndGgobmVnU21pKTsKICAgIF9PbmVCeXRlU3RyaW5nIHJlc3VsdCA9IF9PbmVCeXRlU3RyaW5nLl9hbGxvY2F0ZShkaWdpdENvdW50ICsgMSk7CiAgICByZXN1bHQuX3NldEF0KDAsIE1JTlVTX1NJR04pOyAvLyAnLScuCiAgICBpbnQgaW5kZXggPSBkaWdpdENvdW50OwogICAgZG8gewogICAgICB2YXIgdHdvRGlnaXRzID0gbmVnU21pLnJlbWFpbmRlcigxMDApOwogICAgICBuZWdTbWkgPSBuZWdTbWkgfi8gMTAwOwogICAgICBpbnQgZGlnaXRJbmRleCA9IC10d29EaWdpdHMgKiAyOwogICAgICByZXN1bHQuX3NldEF0KGluZGV4LCBfZGlnaXRUYWJsZVtkaWdpdEluZGV4ICsgMV0pOwogICAgICByZXN1bHQuX3NldEF0KGluZGV4IC0gMSwgX2RpZ2l0VGFibGVbZGlnaXRJbmRleF0pOwogICAgICBpbmRleCAtPSAyOwogICAgfSB3aGlsZSAobmVnU21pIDw9IC0xMDApOwogICAgaWYgKG5lZ1NtaSA+IC0xMCkgewogICAgICByZXN1bHQuX3NldEF0KGluZGV4LCBESUdJVF9aRVJPIC0gbmVnU21pKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIE5vIHJlbWFpbmRlciBuZWNlc3NhcnkgZm9yIHRoaXMgY2FzZS4KICAgICAgaW50IGRpZ2l0SW5kZXggPSAtbmVnU21pICogMjsKICAgICAgcmVzdWx0Ll9zZXRBdChpbmRleCwgX2RpZ2l0VGFibGVbZGlnaXRJbmRleCArIDFdKTsKICAgICAgcmVzdWx0Ll9zZXRBdChpbmRleCAtIDEsIF9kaWdpdFRhYmxlW2RpZ2l0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YC4KY2xhc3MgX0ludm9jYXRpb25NaXJyb3IgaW1wbGVtZW50cyBJbnZvY2F0aW9uIHsKICAvLyBDb25zdGFudHMgZGVzY3JpYmluZyB0aGUgaW52b2NhdGlvbiBraW5kLgogIC8vIF9GSUVMRCBjYW5ub3QgYmUgZ2VuZXJhdGVkIGJ5IHJlZ3VsYXIgaW52b2NhdGlvbiBtaXJyb3JzLgogIHN0YXRpYyBjb25zdCBpbnQgX01FVEhPRCA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBfR0VUVEVSID0gMTsKICBzdGF0aWMgY29uc3QgaW50IF9TRVRURVIgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgX0ZJRUxEID0gMzsKICBzdGF0aWMgY29uc3QgaW50IF9MT0NBTF9WQVIgPSA0OwogIHN0YXRpYyBjb25zdCBpbnQgX0tJTkRfU0hJRlQgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgX0tJTkRfQklUUyA9IDM7CiAgc3RhdGljIGNvbnN0IGludCBfS0lORF9NQVNLID0gKDEgPDwgX0tJTkRfQklUUykgLSAxOwoKICAvLyBUaGVzZSB2YWx1ZXMsIGV4Y2VwdCBfRFlOQU1JQyBhbmQgX1NVUEVSLCBhcmUgb25seSB1c2VkIHdoZW4gdGhyb3dpbmcKICAvLyBOb1N1Y2hNZXRob2RFcnJvciBmb3IgY29tcGlsZS10aW1lIHJlc29sdXRpb24gZmFpbHVyZXMuCiAgc3RhdGljIGNvbnN0IGludCBfRFlOQU1JQyA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBfU1VQRVIgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRJQyA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBfQ09OU1RSVUNUT1IgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgX1RPUF9MRVZFTCA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBfTEVWRUxfU0hJRlQgPSBfS0lORF9CSVRTOwogIHN0YXRpYyBjb25zdCBpbnQgX0xFVkVMX0JJVFMgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgX0xFVkVMX01BU0sgPSAoMSA8PCBfTEVWRUxfQklUUykgLSAxOwoKICAvLyBBcmd1bWVudHNEZXNjcmlwdG9yIGxheW91dC4gS2VlcCBpbiBzeW5jIHdpdGggZW51bSBpbiBkYXJ0X2VudHJ5LmguCiAgc3RhdGljIGNvbnN0IGludCBfVFlQRV9BUkdTX0xFTiA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBfQ09VTlQgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgX1BPU0lUSU9OQUxfQ09VTlQgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgX0ZJUlNUX05BTUVEX0VOVFJZID0gMzsKCiAgLy8gSW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludm9jYXRpb24gbWlycm9yLgogIFN0cmluZyBfZnVuY3Rpb25OYW1lOwogIExpc3QgX2FyZ3VtZW50c0Rlc2NyaXB0b3I7CiAgTGlzdCBfYXJndW1lbnRzOwogIGJvb2wgX2lzU3VwZXJJbnZvY2F0aW9uOwogIGludCBfZGVsYXllZFR5cGVBcmd1bWVudHNMZW47CgogIC8vIEV4dGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnZvY2F0aW9uIG1pcnJvcjsgcG9wdWxhdGVkIG9uIGRlbWFuZC4KICBTeW1ib2wgX21lbWJlck5hbWU7CiAgaW50IF90eXBlOwogIExpc3Q8VHlwZT4gX3R5cGVBcmd1bWVudHM7CiAgTGlzdCBfcG9zaXRpb25hbEFyZ3VtZW50czsKICBNYXA8U3ltYm9sLCBkeW5hbWljPiBfbmFtZWRBcmd1bWVudHM7CgogIF9JbnZvY2F0aW9uTWlycm9yLl93aXRoVHlwZSh0aGlzLl9tZW1iZXJOYW1lLCB0aGlzLl90eXBlLCB0aGlzLl90eXBlQXJndW1lbnRzLAogICAgICB0aGlzLl9wb3NpdGlvbmFsQXJndW1lbnRzLCB0aGlzLl9uYW1lZEFyZ3VtZW50cykgewogICAgX3R5cGVBcmd1bWVudHMgPz89IGNvbnN0IDxUeXBlPltdOwogICAgX3Bvc2l0aW9uYWxBcmd1bWVudHMgPz89IGNvbnN0IFtdOwogICAgX25hbWVkQXJndW1lbnRzID8/PSBjb25zdCB7fTsKICB9CgogIHZvaWQgX3NldE1lbWJlck5hbWVBbmRUeXBlKCkgewogICAgX3R5cGUgPz89IDA7CiAgICBpZiAoX2Z1bmN0aW9uTmFtZS5zdGFydHNXaXRoKCJnZXQ6IikpIHsKICAgICAgX3R5cGUgfD0gX0dFVFRFUjsKICAgICAgX21lbWJlck5hbWUgPSBuZXcgaW50ZXJuYWwuU3ltYm9sLnVudmFsaWRhdGVkKF9mdW5jdGlvbk5hbWUuc3Vic3RyaW5nKDQpKTsKICAgIH0gZWxzZSBpZiAoX2Z1bmN0aW9uTmFtZS5zdGFydHNXaXRoKCJzZXQ6IikpIHsKICAgICAgX3R5cGUgfD0gX1NFVFRFUjsKICAgICAgX21lbWJlck5hbWUgPQogICAgICAgICAgbmV3IGludGVybmFsLlN5bWJvbC51bnZhbGlkYXRlZChfZnVuY3Rpb25OYW1lLnN1YnN0cmluZyg0KSArICI9Iik7CiAgICB9IGVsc2UgewogICAgICBfdHlwZSB8PQogICAgICAgICAgX2lzU3VwZXJJbnZvY2F0aW9uID8gKF9TVVBFUiA8PCBfTEVWRUxfU0hJRlQpIHwgX01FVEhPRCA6IF9NRVRIT0Q7CiAgICAgIF9tZW1iZXJOYW1lID0gbmV3IGludGVybmFsLlN5bWJvbC51bnZhbGlkYXRlZChfZnVuY3Rpb25OYW1lKTsKICAgIH0KICB9CgogIFN5bWJvbCBnZXQgbWVtYmVyTmFtZSB7CiAgICBpZiAoX21lbWJlck5hbWUgPT0gbnVsbCkgewogICAgICBfc2V0TWVtYmVyTmFtZUFuZFR5cGUoKTsKICAgIH0KICAgIHJldHVybiBfbWVtYmVyTmFtZTsKICB9CgogIGludCBnZXQgX3R5cGVBcmdzTGVuIHsKICAgIGludCB0eXBlQXJnc0xlbiA9IF9hcmd1bWVudHNEZXNjcmlwdG9yW19UWVBFX0FSR1NfTEVOXTsKICAgIHJldHVybiB0eXBlQXJnc0xlbiA9PSAwID8gX2RlbGF5ZWRUeXBlQXJndW1lbnRzTGVuIDogdHlwZUFyZ3NMZW47CiAgfQoKICBMaXN0PFR5cGU+IGdldCB0eXBlQXJndW1lbnRzIHsKICAgIGlmIChfdHlwZUFyZ3VtZW50cyA9PSBudWxsKSB7CiAgICAgIGlmIChfdHlwZUFyZ3NMZW4gPT0gMCkgewogICAgICAgIHJldHVybiBfdHlwZUFyZ3VtZW50cyA9IGNvbnN0IDxUeXBlPltdOwogICAgICB9CiAgICAgIC8vIEEgVHlwZUFyZ3VtZW50cyBvYmplY3QgZG9lcyBub3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgRGFydCBjbGFzcyBhbmQKICAgICAgLy8gY2Fubm90IGJlIGFjY2Vzc2VkIGFzIGFuIGFycmF5IGluIERhcnQuIFRoZXJlZm9yZSwgd2UgbmVlZCBhIG5hdGl2ZQogICAgICAvLyBjYWxsIHRvIHVucGFjayB0aGUgaW5kaXZpZHVhbCB0eXBlcyBpbnRvIGEgbGlzdC4KICAgICAgX3R5cGVBcmd1bWVudHMgPSBfdW5wYWNrVHlwZUFyZ3VtZW50cyhfYXJndW1lbnRzWzBdLCBfdHlwZUFyZ3NMZW4pOwogICAgfQogICAgcmV0dXJuIF90eXBlQXJndW1lbnRzOwogIH0KCiAgLy8gVW5wYWNrIHRoZSBnaXZlbiBUeXBlQXJndW1lbnRzIG9iamVjdCBpbnRvIGEgbmV3IGxpc3Qgb2YgaW5kaXZpZHVhbCB0eXBlcy4KICBzdGF0aWMgTGlzdDxUeXBlPiBfdW5wYWNrVHlwZUFyZ3VtZW50cyh0eXBlQXJndW1lbnRzLCBpbnQgbnVtVHlwZUFyZ3VtZW50cykKICAgICAgbmF0aXZlICJJbnZvY2F0aW9uTWlycm9yX3VucGFja1R5cGVBcmd1bWVudHMiOwoKICBMaXN0IGdldCBwb3NpdGlvbmFsQXJndW1lbnRzIHsKICAgIGlmIChfcG9zaXRpb25hbEFyZ3VtZW50cyA9PSBudWxsKSB7CiAgICAgIC8vIFRoZSBhcmd1bWVudCBkZXNjcmlwdG9yIGNvdW50cyB0aGUgcmVjZWl2ZXIsIGJ1dCBub3QgdGhlIHR5cGUgYXJndW1lbnRzCiAgICAgIC8vIGFzIHBvc2l0aW9uYWwgYXJndW1lbnRzLgogICAgICBpbnQgbnVtUG9zaXRpb25hbEFyZ3VtZW50cyA9IF9hcmd1bWVudHNEZXNjcmlwdG9yW19QT1NJVElPTkFMX0NPVU5UXSAtIDE7CiAgICAgIGlmIChudW1Qb3NpdGlvbmFsQXJndW1lbnRzID09IDApIHsKICAgICAgICByZXR1cm4gX3Bvc2l0aW9uYWxBcmd1bWVudHMgPSBjb25zdCBbXTsKICAgICAgfQogICAgICAvLyBFeGNsdWRlIHJlY2VpdmVyIGFuZCB0eXBlIGFyZ3MgaW4gdGhlIHJldHVybmVkIGxpc3QuCiAgICAgIGludCByZWNlaXZlckluZGV4ID0gX3R5cGVBcmdzTGVuID4gMCA/IDEgOiAwOwogICAgICBfcG9zaXRpb25hbEFyZ3VtZW50cyA9IG5ldyBfSW1tdXRhYmxlTGlzdC5fZnJvbSgKICAgICAgICAgIF9hcmd1bWVudHMsIHJlY2VpdmVySW5kZXggKyAxLCBudW1Qb3NpdGlvbmFsQXJndW1lbnRzKTsKICAgIH0KICAgIHJldHVybiBfcG9zaXRpb25hbEFyZ3VtZW50czsKICB9CgogIE1hcDxTeW1ib2wsIGR5bmFtaWM+IGdldCBuYW1lZEFyZ3VtZW50cyB7CiAgICBpZiAoX25hbWVkQXJndW1lbnRzID09IG51bGwpIHsKICAgICAgaW50IG51bUFyZ3VtZW50cyA9IF9hcmd1bWVudHNEZXNjcmlwdG9yW19DT1VOVF0gLSAxOyAvLyBFeGNsdWRlIHJlY2VpdmVyLgogICAgICBpbnQgbnVtUG9zaXRpb25hbEFyZ3VtZW50cyA9IF9hcmd1bWVudHNEZXNjcmlwdG9yW19QT1NJVElPTkFMX0NPVU5UXSAtIDE7CiAgICAgIGludCBudW1OYW1lZEFyZ3VtZW50cyA9IG51bUFyZ3VtZW50cyAtIG51bVBvc2l0aW9uYWxBcmd1bWVudHM7CiAgICAgIGlmIChudW1OYW1lZEFyZ3VtZW50cyA9PSAwKSB7CiAgICAgICAgcmV0dXJuIF9uYW1lZEFyZ3VtZW50cyA9IGNvbnN0IHt9OwogICAgICB9CiAgICAgIGludCByZWNlaXZlckluZGV4ID0gX3R5cGVBcmdzTGVuID4gMCA/IDEgOiAwOwogICAgICBfbmFtZWRBcmd1bWVudHMgPSBuZXcgTWFwPFN5bWJvbCwgZHluYW1pYz4oKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1OYW1lZEFyZ3VtZW50czsgaSsrKSB7CiAgICAgICAgaW50IG5hbWVkRW50cnlJbmRleCA9IF9GSVJTVF9OQU1FRF9FTlRSWSArIDIgKiBpOwogICAgICAgIFN0cmluZyBhcmdfbmFtZSA9IF9hcmd1bWVudHNEZXNjcmlwdG9yW25hbWVkRW50cnlJbmRleF07CiAgICAgICAgdmFyIGFyZ192YWx1ZSA9IF9hcmd1bWVudHNbCiAgICAgICAgICAgIHJlY2VpdmVySW5kZXggKyBfYXJndW1lbnRzRGVzY3JpcHRvcltuYW1lZEVudHJ5SW5kZXggKyAxXV07CiAgICAgICAgX25hbWVkQXJndW1lbnRzW25ldyBpbnRlcm5hbC5TeW1ib2wudW52YWxpZGF0ZWQoYXJnX25hbWUpXSA9IGFyZ192YWx1ZTsKICAgICAgfQogICAgICBfbmFtZWRBcmd1bWVudHMgPSBuZXcgTWFwLnVubW9kaWZpYWJsZShfbmFtZWRBcmd1bWVudHMpOwogICAgfQogICAgcmV0dXJuIF9uYW1lZEFyZ3VtZW50czsKICB9CgogIGJvb2wgZ2V0IGlzTWV0aG9kIHsKICAgIGlmIChfdHlwZSA9PSBudWxsKSB7CiAgICAgIF9zZXRNZW1iZXJOYW1lQW5kVHlwZSgpOwogICAgfQogICAgcmV0dXJuIChfdHlwZSAmIF9LSU5EX01BU0spID09IF9NRVRIT0Q7CiAgfQoKICBib29sIGdldCBpc0FjY2Vzc29yIHsKICAgIGlmIChfdHlwZSA9PSBudWxsKSB7CiAgICAgIF9zZXRNZW1iZXJOYW1lQW5kVHlwZSgpOwogICAgfQogICAgcmV0dXJuIChfdHlwZSAmIF9LSU5EX01BU0spICE9IF9NRVRIT0Q7CiAgfQoKICBib29sIGdldCBpc0dldHRlciB7CiAgICBpZiAoX3R5cGUgPT0gbnVsbCkgewogICAgICBfc2V0TWVtYmVyTmFtZUFuZFR5cGUoKTsKICAgIH0KICAgIHJldHVybiAoX3R5cGUgJiBfS0lORF9NQVNLKSA9PSBfR0VUVEVSOwogIH0KCiAgYm9vbCBnZXQgaXNTZXR0ZXIgewogICAgaWYgKF90eXBlID09IG51bGwpIHsKICAgICAgX3NldE1lbWJlck5hbWVBbmRUeXBlKCk7CiAgICB9CiAgICByZXR1cm4gKF90eXBlICYgX0tJTkRfTUFTSykgPT0gX1NFVFRFUjsKICB9CgogIF9JbnZvY2F0aW9uTWlycm9yKHRoaXMuX2Z1bmN0aW9uTmFtZSwgdGhpcy5fYXJndW1lbnRzRGVzY3JpcHRvciwKICAgICAgdGhpcy5fYXJndW1lbnRzLCB0aGlzLl9pc1N1cGVySW52b2NhdGlvbiwgdGhpcy5fdHlwZSwKICAgICAgW3RoaXMuX2RlbGF5ZWRUeXBlQXJndW1lbnRzTGVuID0gMF0pOwoKICBfSW52b2NhdGlvbk1pcnJvci5fd2l0aG91dFR5cGUodGhpcy5fZnVuY3Rpb25OYW1lLCB0aGlzLl90eXBlQXJndW1lbnRzLAogICAgICB0aGlzLl9wb3NpdGlvbmFsQXJndW1lbnRzLCB0aGlzLl9uYW1lZEFyZ3VtZW50cywgdGhpcy5faXNTdXBlckludm9jYXRpb24sCiAgICAgIFt0aGlzLl9kZWxheWVkVHlwZUFyZ3VtZW50c0xlbiA9IDBdKTsKCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgc3RhdGljIF9hbGxvY2F0ZUludm9jYXRpb25NaXJyb3IoU3RyaW5nIGZ1bmN0aW9uTmFtZSwKICAgICAgTGlzdCBhcmd1bWVudHNEZXNjcmlwdG9yLCBMaXN0IGFyZ3VtZW50cywgYm9vbCBpc1N1cGVySW52b2NhdGlvbiwKICAgICAgW2ludCB0eXBlID0gbnVsbF0pIHsKICAgIHJldHVybiBuZXcgX0ludm9jYXRpb25NaXJyb3IoCiAgICAgICAgZnVuY3Rpb25OYW1lLCBhcmd1bWVudHNEZXNjcmlwdG9yLCBhcmd1bWVudHMsIGlzU3VwZXJJbnZvY2F0aW9uLCB0eXBlKTsKICB9CgogIC8vIFRoaXMgZmFjdG9yeSBpcyB1c2VkIHdoZW4gY3JlYXRpbmcgYW4gYEludm9jYXRpb25gIGZvciBhIGNsb3N1cmUgY2FsbCB3aGljaAogIC8vIG1heSBoYXZlIGRlbGF5ZWQgdHlwZSBhcmd1bWVudHMuIEluIHRoYXQgY2FzZSwgdGhlIGFyZ3VtZW50cyBkZXNjcmlwdG9yIHdpbGwKICAvLyBpbmRpY2F0ZSAwIHR5cGUgYXJndW1lbnRzLCBidXQgdGhlIGFjdHVhbCBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHMgYXJlCiAgLy8gcGFzc2VkIGluIGBkZWxheWVkVHlwZUFyZ3VtZW50c0xlbmAuIElmIGFueSB0eXBlIGFyZ3VtZW50cyBhcmUgYXZhaWxhYmxlLAogIC8vIHRoZSB0eXBlIGFyZ3VtZW50cyB2ZWN0b3Igd2lsbCBiZSB0aGUgZmlyc3QgZW50cnkgaW4gYGFyZ3VtZW50c2AuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgc3RhdGljIF9hbGxvY2F0ZUludm9jYXRpb25NaXJyb3JGb3JDbG9zdXJlKAogICAgICBTdHJpbmcgZnVuY3Rpb25OYW1lLAogICAgICBMaXN0IGFyZ3VtZW50c0Rlc2NyaXB0b3IsCiAgICAgIExpc3QgYXJndW1lbnRzLAogICAgICBpbnQgdHlwZSwKICAgICAgaW50IGRlbGF5ZWRUeXBlQXJndW1lbnRzTGVuKSB7CiAgICByZXR1cm4gbmV3IF9JbnZvY2F0aW9uTWlycm9yKGZ1bmN0aW9uTmFtZSwgYXJndW1lbnRzRGVzY3JpcHRvciwgYXJndW1lbnRzLAogICAgICAgIGZhbHNlLCB0eXBlLCBkZWxheWVkVHlwZUFyZ3VtZW50c0xlbik7CiAgfQp9CoDMAE5OPAEeAT9GJDAvPyAgIB8jJCM3AUs9IR8gJSMuJDkBSScfKisBNxgdExsgAUwWDR0dKAFROScnIgQBIREsGFEzGBRNDQ9NRAYEARofHwYYBAEZPEYEASEiHzAITU06SgYbBAFQTjUBIShRIlApMAg+NDdCBiEEASwjUFBFJCsINDQ0OkEkSFAIPwYcBAEWGR8GLAQBGBkfBiwEARYZHwYsBAEWGR8GLAQBQzwsAUpQLAEkOEgbIlAEAVFSTE9HJC4bIBYQJU8vBAIBLGRhcnQ6Y29yZS1wYXRjaC9pbnZvY2F0aW9uX21pcnJvcl9wYXRjaC5kYXJ0L29yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvbGliX3ByZWZpeC5kYXJ0jB4vLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCi8vIFRoaXMgdHlwZSBjb3JyZXNwb25kcyB0byB0aGUgVk0taW50ZXJuYWwgY2xhc3MgTGlicmFyeVByZWZpeC4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfTGlicmFyeVByZWZpeCB7CiAgZmFjdG9yeSBfTGlicmFyeVByZWZpeC5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KCiAgYm9vbCBfbG9hZCgpIG5hdGl2ZSAiTGlicmFyeVByZWZpeF9sb2FkIjsKICBPYmplY3QgX2xvYWRFcnJvcigpIG5hdGl2ZSAiTGlicmFyeVByZWZpeF9sb2FkRXJyb3IiOwogIGJvb2wgaXNMb2FkZWQoKSBuYXRpdmUgIkxpYnJhcnlQcmVmaXhfaXNMb2FkZWQiOwogIGJvb2wgX2ludmFsaWRhdGVEZXBlbmRlbnRDb2RlKCkKICAgICAgbmF0aXZlICJMaWJyYXJ5UHJlZml4X2ludmFsaWRhdGVEZXBlbmRlbnRDb2RlIjsKCiAgbG9hZExpYnJhcnkoKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9vdXRzdGFuZGluZ0xvYWRSZXF1ZXN0cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoX291dHN0YW5kaW5nTG9hZFJlcXVlc3RzW2ldWzBdID09IHRoaXMpIHsKICAgICAgICByZXR1cm4gX291dHN0YW5kaW5nTG9hZFJlcXVlc3RzW2ldWzFdLmZ1dHVyZTsKICAgICAgfQogICAgfQoKICAgIHZhciBjb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPGJvb2w+KCk7CiAgICB2YXIgcGFpciA9IG5ldyBMaXN0KCk7CiAgICBwYWlyLmFkZCh0aGlzKTsKICAgIHBhaXIuYWRkKGNvbXBsZXRlcik7CiAgICBfb3V0c3RhbmRpbmdMb2FkUmVxdWVzdHMuYWRkKHBhaXIpOwogICAgVGltZXIucnVuKCgpIHsKICAgICAgdmFyIGhhc0NvbXBsZXRlZCA9IHRoaXMuX2xvYWQoKTsKICAgICAgLy8gTG9hZGluZyBjYW4gY29tcGxldGUgaW1tZWRpYXRlbHksIGZvciBleGFtcGxlIHdoZW4gdGhlIHNhbWUKICAgICAgLy8gbGlicmFyeSBoYXMgYmVlbiBsb2FkZWQgZWFnZXJseSBvciB0aHJvdWdoIGFub3RoZXIgZGVmZXJyZWQKICAgICAgLy8gcHJlZml4LiBJZiB0aGF0IGlzIHRoZSBjYXNlLCB3ZSBtdXN0IGludmFsaWRhdGUgdGhlIGRlcGVuZGVudAogICAgICAvLyBjb2RlIGFuZCBjb21wbGV0ZSB0aGUgZnV0dXJlIG5vdyBzaW5jZSB0aGVyZSB3aWxsIGJlIG5vIGNhbGxiYWNrCiAgICAgIC8vIGZyb20gdGhlIFZNLgogICAgICBpZiAoaGFzQ29tcGxldGVkICYmICFjb21wbGV0ZXIuaXNDb21wbGV0ZWQpIHsKICAgICAgICBfaW52YWxpZGF0ZURlcGVuZGVudENvZGUoKTsKICAgICAgICBjb21wbGV0ZXIuY29tcGxldGUodHJ1ZSk7CiAgICAgICAgX291dHN0YW5kaW5nTG9hZFJlcXVlc3RzLnJlbW92ZShwYWlyKTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gY29tcGxldGVyLmZ1dHVyZTsKICB9Cn0KCi8vIEEgbGlzdCBvZiB0d28gZWxlbWVudCBsaXN0cy4gVGhlIGZpcnN0IGVsZW1lbnQgaXMgdGhlIF9MaWJyYXJ5UHJlZml4LiBUaGUKLy8gc2Vjb25kIGVsZW1lbnQgaXMgdGhlIENvbXBsZXRlciBmb3IgdGhlIGxvYWQgcmVxdWVzdC4KdmFyIF9vdXRzdGFuZGluZ0xvYWRSZXF1ZXN0cyA9IG5ldyBMaXN0PExpc3Q+KCk7CgovLyBDYWxsZWQgZnJvbSB0aGUgVk0gd2hlbiBhbiBvdXRzdGFuZGluZyBsb2FkIHJlcXVlc3QgaGFzIGZpbmlzaGVkLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKX2NvbXBsZXRlRGVmZXJyZWRMb2FkcygpIHsKICAvLyBEZXRlcm1pbmUgd2hpY2ggb3V0c3RhbmRpbmcgbG9hZCByZXF1ZXN0cyBoYXZlIGNvbXBsZXRlZCBhbmQgY29tcGxldGUKICAvLyB0aGVpciBjb21wbGV0ZXIgKHdpdGggYW4gZXJyb3Igb3IgdHJ1ZSkuIEZvciBvdXRzdGFuZGluZyBsb2FkIHJlcXVlc3RzCiAgLy8gd2hpY2ggaGF2ZSBub3QgY29tcGxldGVkLCByZW1lbWJlciB0aGVtIGZvciBuZXh0IHRpbWUgaW4KICAvLyBzdGlsbE91dHN0YW5kaW5nTG9hZFJlcXVlc3RzLgogIHZhciBzdGlsbE91dHN0YW5kaW5nTG9hZFJlcXVlc3RzID0gbmV3IExpc3Q8TGlzdD4oKTsKCiAgLy8gTWFrZSBhIGNvcHkgb2YgdGhlIG91dHN0YW5kaW5nUmVxdWVzdHMgYmVjYXVzZSB0aGUgY2FsbCB0byBfbG9hZCBiZWxvdwogIC8vIG1heSByZWN1cnNpdmVseSB0cmlnZ2VyIGFub3RoZXIgY2FsbCB0byB8X2NvbXBsZXRlRGVmZXJyZWRMb2Fkc3wsIHdoaWNoCiAgLy8gY2FuIGNhdXNlIHxfb3V0c3RhbmRpbmdMb2FkUmVxdWVzdHN8IHRvIGJlIG1vZGlmaWVkLgogIHZhciBvdXRzdGFuZGluZ1JlcXVlc3RzID0gX291dHN0YW5kaW5nTG9hZFJlcXVlc3RzLnRvTGlzdCgpOwogIGZvciAoaW50IGkgPSAwOyBpIDwgb3V0c3RhbmRpbmdSZXF1ZXN0cy5sZW5ndGg7IGkrKykgewogICAgdmFyIHByZWZpeCA9IG91dHN0YW5kaW5nUmVxdWVzdHNbaV1bMF07CiAgICB2YXIgY29tcGxldGVyID0gb3V0c3RhbmRpbmdSZXF1ZXN0c1tpXVsxXTsKICAgIHZhciBlcnJvciA9IHByZWZpeC5fbG9hZEVycm9yKCk7CiAgICBpZiAoY29tcGxldGVyLmlzQ29tcGxldGVkKSB7CiAgICAgIC8vIEFscmVhZHkgY29tcGxldGVkLiBTa2lwLgogICAgICBjb250aW51ZTsKICAgIH0KICAgIGlmIChlcnJvciAhPSBudWxsKSB7CiAgICAgIGNvbXBsZXRlci5jb21wbGV0ZUVycm9yKGVycm9yKTsKICAgIH0gZWxzZSBpZiAocHJlZml4Ll9sb2FkKCkpIHsKICAgICAgcHJlZml4Ll9pbnZhbGlkYXRlRGVwZW5kZW50Q29kZSgpOwogICAgICBjb21wbGV0ZXIuY29tcGxldGUodHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICBzdGlsbE91dHN0YW5kaW5nTG9hZFJlcXVlc3RzLmFkZChvdXRzdGFuZGluZ1JlcXVlc3RzW2ldKTsKICAgIH0KICB9CiAgX291dHN0YW5kaW5nTG9hZFJlcXVlc3RzID0gc3RpbGxPdXRzdGFuZGluZ0xvYWRSZXF1ZXN0czsKfQpWAE5OPAEeAUEaFy0ZBAEsODMiNgESQDQ2CAYBKxsUGSgTJ0VFR0oWNCQiLwgIHQQCAU05MQFFIhtLTD4jNwFMTTo/OSwvJSEiEAYZJiEpIA1ABgQ7AgEfZGFydDpjb3JlLXBhdGNoL2xpYl9wcmVmaXguZGFydDFvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL3JlZ2V4cF9wYXRjaC5kYXJ0tRIvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBSZWdFeHAgewogIEBwYXRjaAogIGZhY3RvcnkgUmVnRXhwKFN0cmluZyBzb3VyY2UsCiAgICAgIHtib29sIG11bHRpTGluZTogZmFsc2UsCiAgICAgIGJvb2wgY2FzZVNlbnNpdGl2ZTogdHJ1ZSwKICAgICAgYm9vbCB1bmljb2RlOiBmYWxzZSwKICAgICAgYm9vbCBkb3RBbGw6IGZhbHNlfSkgewogICAgX1JlZ0V4cEhhc2hLZXkga2V5ID0KICAgICAgICBuZXcgX1JlZ0V4cEhhc2hLZXkoc291cmNlLCBtdWx0aUxpbmUsIGNhc2VTZW5zaXRpdmUsIHVuaWNvZGUsIGRvdEFsbCk7CiAgICBfUmVnRXhwSGFzaFZhbHVlIHZhbHVlID0gX2NhY2hlW2tleV07CgogICAgaWYgKHZhbHVlID09IG51bGwpIHsKICAgICAgaWYgKF9jYWNoZS5sZW5ndGggPiBfTUFYX0NBQ0hFX1NJWkUpIHsKICAgICAgICBfUmVnRXhwSGFzaEtleSBsYXN0S2V5ID0gX3JlY2VudGx5VXNlZC5sYXN0OwogICAgICAgIF9yZWNlbnRseVVzZWQucmVtb3ZlKGxhc3RLZXkpOwogICAgICAgIF9jYWNoZS5yZW1vdmUobGFzdEtleSk7CiAgICAgIH0KCiAgICAgIHZhbHVlID0gbmV3IF9SZWdFeHBIYXNoVmFsdWUoCiAgICAgICAgICBuZXcgX1JlZ0V4cChzb3VyY2UsCiAgICAgICAgICAgICAgbXVsdGlMaW5lOiBtdWx0aUxpbmUsCiAgICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZTogY2FzZVNlbnNpdGl2ZSwKICAgICAgICAgICAgICB1bmljb2RlOiB1bmljb2RlLAogICAgICAgICAgICAgIGRvdEFsbDogZG90QWxsKSwKICAgICAgICAgIGtleSk7CiAgICAgIF9jYWNoZVtrZXldID0gdmFsdWU7CiAgICB9IGVsc2UgewogICAgICB2YWx1ZS5rZXkudW5saW5rKCk7CiAgICB9CgogICAgYXNzZXJ0KHZhbHVlICE9IG51bGwpOwoKICAgIF9yZWNlbnRseVVzZWQuYWRkRmlyc3QodmFsdWUua2V5KTsKICAgIGFzc2VydChfcmVjZW50bHlVc2VkLmxlbmd0aCA9PSBfY2FjaGUubGVuZ3RoKTsKCiAgICAvLyBUT0RPKHplcm55KTogV2UgbWlnaHQgbm90IHdhbnQgdG8gY2Fub25pY2FsaXplIHJlZ2V4cCBvYmplY3RzLgogICAgcmV0dXJuIHZhbHVlLnJlZ2V4cDsKICB9CgogIC8qKgogICAqIEZpbmRzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgUmVnRXhwLXNpZ25pZmljYW50IGNoYXIgaW4gW3RleHRdLgogICAqCiAgICogU3RhcnRzIGxvb2tpbmcgZnJvbSBbc3RhcnRdLiBSZXR1cm5zIGB0ZXh0Lmxlbmd0aGAgaWYgbm8gY2hhcmFjdGVyCiAgICogaXMgZm91bmQgdGhhdCBoYXMgc3BlY2lhbCBtZWFuaW5nIGluIFJlZ0V4cCBzeW50YXguCiAgICovCiAgc3RhdGljIGludCBfZmluZEVzY2FwZUNoYXIoU3RyaW5nIHRleHQsIGludCBzdGFydCkgewogICAgLy8gVGFibGUgd2hlcmUgZWFjaCBjaGFyYWN0ZXIgaW4gdGhlIHJhbmdlIFUrMDAwMCB0byBVKzAwN2YgaXMgcmVwcmVzZW50ZWQKICAgIC8vIGJ5IHdoZXRoZXIgaXQgbmVlZHMgdG8gYmUgZXNjYXBlZCBpbiBhIHJlZ2V4cC4KICAgIC8vIFRoZSBceDAwIGNoYXJhY3RlcnMgbWVhbnMgZXNjYWNwZWQsIGFuZCBceDAxIG1lYW5zIG5vbi1lc2NhcGVkLgogICAgY29uc3QgZXNjYXBlcyA9CiAgICAgICAgIlx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDEiCiAgICAgICAgIlx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDEiCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICQgICAgICAgICAgICAgICAoICAgKSAgICogICArICAgICAgICAgICAuCiAgICAgICAgIlx4MDFceDAxXHgwMVx4MDFceDAwXHgwMVx4MDFceDAxXHgwMFx4MDBceDAwXHgwMFx4MDFceDAxXHgwMFx4MDEiCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPwogICAgICAgICJceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAwIgogICAgICAgICJceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxIgogICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyAgIFwgICBdICAgXgogICAgICAgICJceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDBceDAwXHgwMFx4MDBceDAxIgogICAgICAgICJceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxIgogICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgIHwgICB9CiAgICAgICAgIlx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMFx4MDBceDAwXHgwMVx4MDEiOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgdGV4dC5sZW5ndGg7IGkrKykgewogICAgICBpbnQgY2hhciA9IHRleHQuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGNoYXIgPD0gMHg3ZiAmJiBlc2NhcGVzLmNvZGVVbml0QXQoY2hhcikgPT0gMCkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gdGV4dC5sZW5ndGg7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgU3RyaW5nIGVzY2FwZShTdHJpbmcgdGV4dCkgewogICAgaW50IGVzY2FwZUNoYXJJbmRleCA9IF9maW5kRXNjYXBlQ2hhcih0ZXh0LCAwKTsKICAgIC8vIElmIHRoZSB0ZXh0IGNvbnRhaW5zIG5vIGNoYXJhY3RlcnMgbmVlZGluZyBlc2NhcGUsIHJldHVybiBpdCBkaXJlY3RseS4KICAgIGlmIChlc2NhcGVDaGFySW5kZXggPT0gdGV4dC5sZW5ndGgpIHJldHVybiB0ZXh0OwoKICAgIHZhciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBpbnQgcHJldmlvdXNTbGljZUVuZEluZGV4ID0gMDsKICAgIGRvIHsKICAgICAgLy8gQ29weSBjaGFyYWN0ZXJzIGZyb20gcHJldmlvdXMgZXNjYXBlIHRvIGN1cnJlbnQgZXNjYXBlIGludG8gcmVzdWx0LgogICAgICAvLyBUaGlzIGluY2x1ZGVzIHRoZSBwcmV2aW91c2x5IGVzY2FwZWQgY2hhcmFjdGVyLgogICAgICBidWZmZXIud3JpdGUodGV4dC5zdWJzdHJpbmcocHJldmlvdXNTbGljZUVuZEluZGV4LCBlc2NhcGVDaGFySW5kZXgpKTsKICAgICAgLy8gUHJlcGFyZSB0aGUgY3VycmVudCBjaGFyYWN0ZXIgdG8gYmUgZXNjYXBlZCBieSBwcmVmaXhpbmcgaXQgd2l0aCBhICdcJy4KICAgICAgYnVmZmVyLndyaXRlKHIiXCIpOwogICAgICBwcmV2aW91c1NsaWNlRW5kSW5kZXggPSBlc2NhcGVDaGFySW5kZXg7CiAgICAgIGVzY2FwZUNoYXJJbmRleCA9IF9maW5kRXNjYXBlQ2hhcih0ZXh0LCBlc2NhcGVDaGFySW5kZXggKyAxKTsKICAgIH0gd2hpbGUgKGVzY2FwZUNoYXJJbmRleCA8IHRleHQubGVuZ3RoKTsKICAgIC8vIENvcHkgdGFpbCBvZiBzdHJpbmcgaW50byByZXN1bHQuCiAgICBidWZmZXIud3JpdGUodGV4dC5zdWJzdHJpbmcocHJldmlvdXNTbGljZUVuZEluZGV4LCBlc2NhcGVDaGFySW5kZXgpKTsKICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3RzIGFyZSBzdG9yZWQgaW4gYSBjYWNoZSBvZiB1cCB0byBfTUFYX0NBQ0hFX1NJWkUKICAvLyBlbGVtZW50cyB1c2luZyBhbiBMUlUgZXZpY3Rpb24gc3RyYXRlZ3kuCiAgLy8gVE9ETyh6ZXJueSk6IERvIG5vdCBpbXBvc2UgYSBmaXhlZCBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIGNhY2hlZCBvYmplY3RzLgogIC8vIE90aGVyIHBvc3NpYmlsaXRpZXMgY291bGQgYmUgbGltaXRpbmcgYnkgdGhlIHNpemUgb2YgdGhlIHJlZ2V4cCBvYmplY3RzLAogIC8vIG9yIGltcG9zaW5nIGEgbG93ZXIgdGltZSBib3VuZCBmb3IgdGhlIG1vc3QgcmVjZW50IHVzZSB1bmRlciB3aGljaCBhIHJlZ2V4cAogIC8vIG1heSBub3QgYmUgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZS4KICAvLyBUT0RPKHplcm55KTogVXNlIHNlbGYtc2l6aW5nIGNhY2hlIHNpbWlsYXIgdG8gX0FjY2Vzc29yQ2FjaGUgaW4KICAvLyBtaXJyb3JzX2ltcGwuZGFydC4KICBzdGF0aWMgY29uc3QgaW50IF9NQVhfQ0FDSEVfU0laRSA9IDI1NjsKICBzdGF0aWMgZmluYWwgTWFwPF9SZWdFeHBIYXNoS2V5LCBfUmVnRXhwSGFzaFZhbHVlPiBfY2FjaGUgPQogICAgICBuZXcgSGFzaE1hcDxfUmVnRXhwSGFzaEtleSwgX1JlZ0V4cEhhc2hWYWx1ZT4oKTsKICBzdGF0aWMgZmluYWwgTGlua2VkTGlzdDxfUmVnRXhwSGFzaEtleT4gX3JlY2VudGx5VXNlZCA9CiAgICAgIG5ldyBMaW5rZWRMaXN0PF9SZWdFeHBIYXNoS2V5PigpOwoKICBpbnQgZ2V0IF9ncm91cENvdW50OwogIEl0ZXJhYmxlPFN0cmluZz4gZ2V0IF9ncm91cE5hbWVzOwogIGludCBfZ3JvdXBOYW1lSW5kZXgoU3RyaW5nIG5hbWUpOwp9CgovLyBSZXByZXNlbnRzIGJvdGggYSBrZXkgaW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBjYWNoZSBhcyB3ZWxsIGFzIGl0cwovLyBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHRoZSBMUlUgbGlzdC4KY2xhc3MgX1JlZ0V4cEhhc2hLZXkgZXh0ZW5kcyBMaW5rZWRMaXN0RW50cnk8X1JlZ0V4cEhhc2hLZXk+IHsKICBmaW5hbCBTdHJpbmcgcGF0dGVybjsKICBmaW5hbCBib29sIG11bHRpTGluZTsKICBmaW5hbCBib29sIGNhc2VTZW5zaXRpdmU7CiAgZmluYWwgYm9vbCB1bmljb2RlOwogIGZpbmFsIGJvb2wgZG90QWxsOwoKICBfUmVnRXhwSGFzaEtleSh0aGlzLnBhdHRlcm4sIHRoaXMubXVsdGlMaW5lLCB0aGlzLmNhc2VTZW5zaXRpdmUsIHRoaXMudW5pY29kZSwKICAgICAgdGhpcy5kb3RBbGwpOwoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHBhdHRlcm4uaGFzaENvZGU7CiAgYm9vbCBvcGVyYXRvciA9PSh0aGF0KSB7CiAgICByZXR1cm4gKHRoYXQgaXMgX1JlZ0V4cEhhc2hLZXkpICYmCiAgICAgICAgKHRoaXMucGF0dGVybiA9PSB0aGF0LnBhdHRlcm4pICYmCiAgICAgICAgKHRoaXMubXVsdGlMaW5lID09IHRoYXQubXVsdGlMaW5lKSAmJgogICAgICAgICh0aGlzLmNhc2VTZW5zaXRpdmUgPT0gdGhhdC5jYXNlU2Vuc2l0aXZlKSAmJgogICAgICAgICh0aGlzLnVuaWNvZGUgPT0gdGhhdC51bmljb2RlKSAmJgogICAgICAgICh0aGlzLmRvdEFsbCA9PSB0aGF0LmRvdEFsbCk7CiAgfQp9CgovLyBSZXByZXNlbnRzIGEgdmFsdWUgaW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBjYWNoZS4gQ29udGFpbnMgYSBwb2ludGVyCi8vIGJhY2sgdG8gdGhlIGtleSBpbiBvcmRlciB0byBhY2Nlc3MgdGhlIGNvcnJlc3BvbmRpbmcgTFJVIGVudHJ5LgpjbGFzcyBfUmVnRXhwSGFzaFZhbHVlIHsKICBmaW5hbCBfUmVnRXhwIHJlZ2V4cDsKICBmaW5hbCBfUmVnRXhwSGFzaEtleSBrZXk7CgogIF9SZWdFeHBIYXNoVmFsdWUodGhpcy5yZWdleHAsIHRoaXMua2V5KTsKfQoKY2xhc3MgX1JlZ0V4cE1hdGNoIGltcGxlbWVudHMgUmVnRXhwTWF0Y2ggewogIF9SZWdFeHBNYXRjaC5fKHRoaXMuX3JlZ2V4cCwgdGhpcy5pbnB1dCwgdGhpcy5fbWF0Y2gpOwoKICBpbnQgZ2V0IHN0YXJ0ID0+IF9zdGFydCgwKTsKICBpbnQgZ2V0IGVuZCA9PiBfZW5kKDApOwoKICBpbnQgX3N0YXJ0KGludCBncm91cElkeCkgewogICAgcmV0dXJuIF9tYXRjaFsoZ3JvdXBJZHggKiBfTUFUQ0hfUEFJUildOwogIH0KCiAgaW50IF9lbmQoaW50IGdyb3VwSWR4KSB7CiAgICByZXR1cm4gX21hdGNoWyhncm91cElkeCAqIF9NQVRDSF9QQUlSKSArIDFdOwogIH0KCiAgU3RyaW5nIGdyb3VwKGludCBncm91cElkeCkgewogICAgaWYgKGdyb3VwSWR4IDwgMCB8fCBncm91cElkeCA+IF9yZWdleHAuX2dyb3VwQ291bnQpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IudmFsdWUoZ3JvdXBJZHgpOwogICAgfQogICAgaW50IHN0YXJ0SW5kZXggPSBfc3RhcnQoZ3JvdXBJZHgpOwogICAgaW50IGVuZEluZGV4ID0gX2VuZChncm91cElkeCk7CiAgICBpZiAoc3RhcnRJbmRleCA9PSAtMSkgewogICAgICBhc3NlcnQoZW5kSW5kZXggPT0gLTEpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHJldHVybiBpbnB1dC5fc3Vic3RyaW5nVW5jaGVja2VkKHN0YXJ0SW5kZXgsIGVuZEluZGV4KTsKICB9CgogIFN0cmluZyBvcGVyYXRvciBbXShpbnQgZ3JvdXBJZHgpIHsKICAgIHJldHVybiB0aGlzLmdyb3VwKGdyb3VwSWR4KTsKICB9CgogIExpc3Q8U3RyaW5nPiBncm91cHMoTGlzdDxpbnQ+IGdyb3Vwc1NwZWMpIHsKICAgIHZhciBncm91cHNMaXN0ID0gbmV3IExpc3Q8U3RyaW5nPihncm91cHNTcGVjLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGdyb3Vwc1NwZWMubGVuZ3RoOyBpKyspIHsKICAgICAgZ3JvdXBzTGlzdFtpXSA9IGdyb3VwKGdyb3Vwc1NwZWNbaV0pOwogICAgfQogICAgcmV0dXJuIGdyb3Vwc0xpc3Q7CiAgfQoKICBpbnQgZ2V0IGdyb3VwQ291bnQgPT4gX3JlZ2V4cC5fZ3JvdXBDb3VudDsKCiAgUGF0dGVybiBnZXQgcGF0dGVybiA9PiBfcmVnZXhwOwoKICBTdHJpbmcgbmFtZWRHcm91cChTdHJpbmcgbmFtZSkgewogICAgdmFyIGlkeCA9IF9yZWdleHAuX2dyb3VwTmFtZUluZGV4KG5hbWUpOwogICAgaWYgKGlkeCA8IDApIHsKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcigiTm90IGEgY2FwdHVyZSBncm91cCBuYW1lOiAke25hbWV9Iik7CiAgICB9CiAgICByZXR1cm4gZ3JvdXAoaWR4KTsKICB9CgogIEl0ZXJhYmxlPFN0cmluZz4gZ2V0IGdyb3VwTmFtZXMgewogICAgcmV0dXJuIF9yZWdleHAuX2dyb3VwTmFtZXM7CiAgfQoKICBmaW5hbCBSZWdFeHAgX3JlZ2V4cDsKICBmaW5hbCBTdHJpbmcgaW5wdXQ7CiAgZmluYWwgTGlzdDxpbnQ+IF9tYXRjaDsKICBzdGF0aWMgY29uc3QgaW50IF9NQVRDSF9QQUlSID0gMjsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfUmVnRXhwIGltcGxlbWVudHMgUmVnRXhwIHsKICBmYWN0b3J5IF9SZWdFeHAoU3RyaW5nIHBhdHRlcm4sCiAgICAgIHtib29sIG11bHRpTGluZTogZmFsc2UsCiAgICAgIGJvb2wgY2FzZVNlbnNpdGl2ZTogdHJ1ZSwKICAgICAgYm9vbCB1bmljb2RlOiBmYWxzZSwKICAgICAgYm9vbCBkb3RBbGw6IGZhbHNlfSkgbmF0aXZlICJSZWdFeHBfZmFjdG9yeSI7CgogIFJlZ0V4cE1hdGNoIGZpcnN0TWF0Y2goU3RyaW5nIHN0cikgewogICAgaWYgKHN0ciBpcyEgU3RyaW5nKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihzdHIpOwogICAgTGlzdCBtYXRjaCA9IF9FeGVjdXRlTWF0Y2goc3RyLCAwKTsKICAgIGlmIChtYXRjaCA9PSBudWxsKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIG5ldyBfUmVnRXhwTWF0Y2guXyh0aGlzLCBzdHIsIG1hdGNoKTsKICB9CgogIEl0ZXJhYmxlPFJlZ0V4cE1hdGNoPiBhbGxNYXRjaGVzKFN0cmluZyBzdHJpbmcsIFtpbnQgc3RhcnQgPSAwXSkgewogICAgaWYgKHN0cmluZyBpcyEgU3RyaW5nKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihzdHJpbmcpOwogICAgaWYgKHN0YXJ0IGlzISBpbnQpIHRocm93IG5ldyBBcmd1bWVudEVycm9yKHN0YXJ0KTsKICAgIGlmICgwID4gc3RhcnQgfHwgc3RhcnQgPiBzdHJpbmcubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKHN0YXJ0LCAwLCBzdHJpbmcubGVuZ3RoKTsKICAgIH0KICAgIHJldHVybiBuZXcgX0FsbE1hdGNoZXNJdGVyYWJsZSh0aGlzLCBzdHJpbmcsIHN0YXJ0KTsKICB9CgogIFJlZ0V4cE1hdGNoIG1hdGNoQXNQcmVmaXgoU3RyaW5nIHN0cmluZywgW2ludCBzdGFydCA9IDBdKSB7CiAgICBpZiAoc3RyaW5nIGlzISBTdHJpbmcpIHRocm93IG5ldyBBcmd1bWVudEVycm9yKHN0cmluZyk7CiAgICBpZiAoc3RhcnQgaXMhIGludCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Ioc3RhcnQpOwogICAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+IHN0cmluZy5sZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2Uoc3RhcnQsIDAsIHN0cmluZy5sZW5ndGgpOwogICAgfQogICAgTGlzdDxpbnQ+IGxpc3QgPSBfRXhlY3V0ZU1hdGNoU3RpY2t5KHN0cmluZywgc3RhcnQpOwogICAgaWYgKGxpc3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gbmV3IF9SZWdFeHBNYXRjaC5fKHRoaXMsIHN0cmluZywgbGlzdCk7CiAgfQoKICBib29sIGhhc01hdGNoKFN0cmluZyBzdHIpIHsKICAgIGlmIChzdHIgaXMhIFN0cmluZykgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Ioc3RyKTsKICAgIExpc3QgbWF0Y2ggPSBfRXhlY3V0ZU1hdGNoKHN0ciwgMCk7CiAgICByZXR1cm4gKG1hdGNoID09IG51bGwpID8gZmFsc2UgOiB0cnVlOwogIH0KCiAgU3RyaW5nIHN0cmluZ01hdGNoKFN0cmluZyBzdHIpIHsKICAgIGlmIChzdHIgaXMhIFN0cmluZykgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Ioc3RyKTsKICAgIExpc3QgbWF0Y2ggPSBfRXhlY3V0ZU1hdGNoKHN0ciwgMCk7CiAgICBpZiAobWF0Y2ggPT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHJldHVybiBzdHIuX3N1YnN0cmluZ1VuY2hlY2tlZChtYXRjaFswXSwgbWF0Y2hbMV0pOwogIH0KCiAgU3RyaW5nIGdldCBwYXR0ZXJuIG5hdGl2ZSAiUmVnRXhwX2dldFBhdHRlcm4iOwoKICBib29sIGdldCBpc011bHRpTGluZSBuYXRpdmUgIlJlZ0V4cF9nZXRJc011bHRpTGluZSI7CgogIGJvb2wgZ2V0IGlzQ2FzZVNlbnNpdGl2ZSBuYXRpdmUgIlJlZ0V4cF9nZXRJc0Nhc2VTZW5zaXRpdmUiOwoKICBib29sIGdldCBpc1VuaWNvZGUgbmF0aXZlICJSZWdFeHBfZ2V0SXNVbmljb2RlIjsKCiAgYm9vbCBnZXQgaXNEb3RBbGwgbmF0aXZlICJSZWdFeHBfZ2V0SXNEb3RBbGwiOwoKICBpbnQgZ2V0IF9ncm91cENvdW50IG5hdGl2ZSAiUmVnRXhwX2dldEdyb3VwQ291bnQiOwoKICAvLyBSZXR1cm5zIGEgTGlzdCBbU3RyaW5nLCBpbnQsIFN0cmluZywgaW50LCAuLi5dIHdoZXJlIGVhY2gKICAvLyBTdHJpbmcgaXMgdGhlIG5hbWUgb2YgYSBjYXB0dXJlIGdyb3VwIGFuZCB0aGUgZm9sbG93aW5nCiAgLy8gaW50IGlzIHRoYXQgY2FwdHVyZSBncm91cCdzIGluZGV4LgogIExpc3QgZ2V0IF9ncm91cE5hbWVMaXN0IG5hdGl2ZSAiUmVnRXhwX2dldEdyb3VwTmFtZU1hcCI7CgogIEl0ZXJhYmxlPFN0cmluZz4gZ2V0IF9ncm91cE5hbWVzIHN5bmMqIHsKICAgIGZpbmFsIG5hbWVMaXN0ID0gX2dyb3VwTmFtZUxpc3Q7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVMaXN0Lmxlbmd0aDsgaSArPSAyKSB7CiAgICAgIHlpZWxkIG5hbWVMaXN0W2ldIGFzIFN0cmluZzsKICAgIH0KICB9CgogIGludCBfZ3JvdXBOYW1lSW5kZXgoU3RyaW5nIG5hbWUpIHsKICAgIHZhciBuYW1lTGlzdCA9IF9ncm91cE5hbWVMaXN0OwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lTGlzdC5sZW5ndGg7IGkgKz0gMikgewogICAgICBpZiAobmFtZSA9PSBuYW1lTGlzdFtpXSkgewogICAgICAgIHJldHVybiBuYW1lTGlzdFtpICsgMV07CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIC8vIEJ5dGUgbWFwIG9mIG9uZSBieXRlIGNoYXJhY3RlcnMgd2l0aCBhIDB4ZmYgaWYgdGhlIGNoYXJhY3RlciBpcyBhIHdvcmQKICAvLyBjaGFyYWN0ZXIgKGRpZ2l0LCBsZXR0ZXIgb3IgdW5kZXJzY29yZSkgYW5kIDB4MDAgb3RoZXJ3aXNlLgogIC8vIFVzZWQgYnkgZ2VuZXJhdGVkIFJlZ0V4cCBjb2RlLgogIHN0YXRpYyBjb25zdCBMaXN0PGludD4gX3dvcmRDaGFyYWN0ZXJNYXAgPSBjb25zdCA8aW50PlsKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCgogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvLyAnMCcgLSAnNycKICAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8vICc4JyAtICc5JwoKICAgIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIC8vICdBJyAtICdHJwogICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgLy8gJ0gnIC0gJ08nCiAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvLyAnUCcgLSAnVycKICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIC8vICdYJyAtICdaJywgJ18nCgogICAgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgLy8gJ2EnIC0gJ2cnCiAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvLyAnaCcgLSAnbycKICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIC8vICdwJyAtICd3JwogICAgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gJ3gnIC0gJ3onCiAgICAvLyBMYXRpbi0xIHJhbmdlCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAoKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCgogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogIF07CgogIExpc3QgX0V4ZWN1dGVNYXRjaChTdHJpbmcgc3RyLCBpbnQgc3RhcnRfaW5kZXgpIG5hdGl2ZSAiUmVnRXhwX0V4ZWN1dGVNYXRjaCI7CgogIExpc3QgX0V4ZWN1dGVNYXRjaFN0aWNreShTdHJpbmcgc3RyLCBpbnQgc3RhcnRfaW5kZXgpCiAgICAgIG5hdGl2ZSAiUmVnRXhwX0V4ZWN1dGVNYXRjaFN0aWNreSI7Cn0KCmNsYXNzIF9BbGxNYXRjaGVzSXRlcmFibGUgZXh0ZW5kcyBJdGVyYWJsZUJhc2U8UmVnRXhwTWF0Y2g+IHsKICBmaW5hbCBfUmVnRXhwIF9yZTsKICBmaW5hbCBTdHJpbmcgX3N0cjsKICBmaW5hbCBpbnQgX3N0YXJ0OwoKICBfQWxsTWF0Y2hlc0l0ZXJhYmxlKHRoaXMuX3JlLCB0aGlzLl9zdHIsIHRoaXMuX3N0YXJ0KTsKCiAgSXRlcmF0b3I8UmVnRXhwTWF0Y2g+IGdldCBpdGVyYXRvciA9PgogICAgICBuZXcgX0FsbE1hdGNoZXNJdGVyYXRvcihfcmUsIF9zdHIsIF9zdGFydCk7Cn0KCmNsYXNzIF9BbGxNYXRjaGVzSXRlcmF0b3IgaW1wbGVtZW50cyBJdGVyYXRvcjxSZWdFeHBNYXRjaD4gewogIGZpbmFsIFN0cmluZyBfc3RyOwogIGludCBfbmV4dEluZGV4OwogIF9SZWdFeHAgX3JlOwogIFJlZ0V4cE1hdGNoIF9jdXJyZW50OwoKICBfQWxsTWF0Y2hlc0l0ZXJhdG9yKHRoaXMuX3JlLCB0aGlzLl9zdHIsIHRoaXMuX25leHRJbmRleCk7CgogIFJlZ0V4cE1hdGNoIGdldCBjdXJyZW50ID0+IF9jdXJyZW50OwoKICBzdGF0aWMgYm9vbCBfaXNMZWFkU3Vycm9nYXRlKGludCBjKSB7CiAgICByZXR1cm4gYyA+PSAweGQ4MDAgJiYgYyA8PSAweGRiZmY7CiAgfQoKICBzdGF0aWMgYm9vbCBfaXNUcmFpbFN1cnJvZ2F0ZShpbnQgYykgewogICAgcmV0dXJuIGMgPj0gMHhkYzAwICYmIGMgPD0gMHhkZmZmOwogIH0KCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChfcmUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOyAvLyBDbGVhcmVkIGFmdGVyIGEgZmFpbGVkIG1hdGNoLgogICAgaWYgKF9uZXh0SW5kZXggPD0gX3N0ci5sZW5ndGgpIHsKICAgICAgdmFyIG1hdGNoID0gX3JlLl9FeGVjdXRlTWF0Y2goX3N0ciwgX25leHRJbmRleCk7CiAgICAgIGlmIChtYXRjaCAhPSBudWxsKSB7CiAgICAgICAgX2N1cnJlbnQgPSBuZXcgX1JlZ0V4cE1hdGNoLl8oX3JlLCBfc3RyLCBtYXRjaCk7CiAgICAgICAgX25leHRJbmRleCA9IF9jdXJyZW50LmVuZDsKICAgICAgICBpZiAoX25leHRJbmRleCA9PSBfY3VycmVudC5zdGFydCkgewogICAgICAgICAgLy8gWmVyby13aWR0aCBtYXRjaC4gQWR2YW5jZSBieSBvbmUgbW9yZSwgdW5sZXNzIHRoZSByZWdleHAKICAgICAgICAgIC8vIGlzIGluIHVuaWNvZGUgbW9kZSBhbmQgaXQgd291bGQgcHV0IHVzIHdpdGhpbiBhIHN1cnJvZ2F0ZQogICAgICAgICAgLy8gcGFpci4gSW4gdGhhdCBjYXNlLCBhZHZhbmNlIHBhc3QgdGhlIGNvZGUgcG9pbnQgYXMgYSB3aG9sZS4KICAgICAgICAgIGlmIChfcmUuaXNVbmljb2RlICYmCiAgICAgICAgICAgICAgX25leHRJbmRleCArIDEgPCBfc3RyLmxlbmd0aCAmJgogICAgICAgICAgICAgIF9pc0xlYWRTdXJyb2dhdGUoX3N0ci5jb2RlVW5pdEF0KF9uZXh0SW5kZXgpKSAmJgogICAgICAgICAgICAgIF9pc1RyYWlsU3Vycm9nYXRlKF9zdHIuY29kZVVuaXRBdChfbmV4dEluZGV4ICsgMSkpKSB7CiAgICAgICAgICAgIF9uZXh0SW5kZXgrKzsKICAgICAgICAgIH0KICAgICAgICAgIF9uZXh0SW5kZXgrKzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIF9jdXJyZW50ID0gbnVsbDsKICAgIF9yZSA9IG51bGw7CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CoGVAE5OPAEeAQcPCSAeIBsdGU8qARktNScgCAEkHiQsIB8QGw0aBgEbASczAUYZBAEGRQVIOQY3TzZHFEtLRUtJS0tFS0tBTDAlQwYYBAEJJjRONQElIwlNOUxRGi9ELShKHgQBTy5PTlEoRRgqPjc6KAEXJCQCAUgoPxgYHBYVAVEUASgbJyouNiomBAIBSkMZGBwBKwIBLDkBHhoBHS0EARsxBAEfOiwGJyMcHhMGPAQBJSEEAS46MiwGFwQBLQEiASMtE0AGFwQBJCAEARgWGiQCARoiIh4gGzQBJzYoGRMGMQQBRTw3LjsGOQQBPjw3LjsGOSMzBAEeNigrBAEjNigZEwY4BAExATcBPwEzATEBNQE/PSg7ASslMyMGBAElIzMhIAgGDwQBTEEkOjQ0NDQBNDRBQQFBQUFGAUFBQUEVNDQ0NAE0NDQ0ATQ0NDQBNDQ0NAUBUAE4KgIBPhUVFAE5ASgyAgE9FRIPGAE9AScBKCcEASknBAEURCU3GzkjLEZHSR8uP0QaDBgKFQgGFRASBAIBIWRhcnQ6Y29yZS1wYXRjaC9yZWdleHBfcGF0Y2guZGFydC9vcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL3N0YWNrdHJhY2UuZGFydIGYLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgovLy8gVk0gaW50ZXJuYWwgU3RhY2tUcmFjZSBpbXBsZW1lbnRhdGlvbi4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfU3RhY2tUcmFjZSBpbXBsZW1lbnRzIFN0YWNrVHJhY2UgewogIC8vIHRvU3RyaW5nKCkgaXMgb3ZlcnJpZGRlbiBvbiB0aGUgQysrIHNpZGUuCn0KDQBOTjwBHgErGiovAgEfZGFydDpjb3JlLXBhdGNoL3N0YWNrdHJhY2UuZGFydDFvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL3N0cmluZ19wYXRjaC5kYXJ0wAC2NC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKY29uc3QgaW50IF9tYXhBc2NpaSA9IDB4N2Y7CmNvbnN0IGludCBfbWF4TGF0aW4xID0gMHhmZjsKY29uc3QgaW50IF9tYXhVdGYxNiA9IDB4ZmZmZjsKY29uc3QgaW50IF9tYXhVbmljb2RlID0gMHgxMGZmZmY7CgpAcGF0Y2gKY2xhc3MgU3RyaW5nIHsKICBAcGF0Y2gKICBmYWN0b3J5IFN0cmluZy5mcm9tQ2hhckNvZGVzKEl0ZXJhYmxlPGludD4gY2hhckNvZGVzLAogICAgICBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIGlmIChjaGFyQ29kZXMgaXMhIEl0ZXJhYmxlKQogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZShjaGFyQ29kZXMsICJjaGFyQ29kZXMiKTsKICAgIGlmIChzdGFydCBpcyEgaW50KSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZShzdGFydCwgInN0YXJ0Iik7CiAgICBpZiAoZW5kICE9IG51bGwgJiYgZW5kIGlzISBpbnQpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKGVuZCwgImVuZCIpOwogICAgcmV0dXJuIF9TdHJpbmdCYXNlLmNyZWF0ZUZyb21DaGFyQ29kZXMoY2hhckNvZGVzLCBzdGFydCwgZW5kLCBudWxsKTsKICB9CgogIEBwYXRjaAogIGZhY3RvcnkgU3RyaW5nLmZyb21DaGFyQ29kZShpbnQgY2hhckNvZGUpIHsKICAgIGlmIChjaGFyQ29kZSA+PSAwKSB7CiAgICAgIGlmIChjaGFyQ29kZSA8PSAweGZmKSB7CiAgICAgICAgcmV0dXJuIF9PbmVCeXRlU3RyaW5nLl9hbGxvY2F0ZSgxKS4uX3NldEF0KDAsIGNoYXJDb2RlKTsKICAgICAgfQogICAgICBpZiAoY2hhckNvZGUgPD0gMHhmZmZmKSB7CiAgICAgICAgcmV0dXJuIF9TdHJpbmdCYXNlLl9jcmVhdGVGcm9tQ29kZVBvaW50cygKICAgICAgICAgICAgbmV3IF9MaXN0KDEpLi5bMF0gPSBjaGFyQ29kZSwgMCwgMSk7CiAgICAgIH0KICAgICAgaWYgKGNoYXJDb2RlIDw9IDB4MTBmZmZmKSB7CiAgICAgICAgdmFyIGxvdyA9IDB4REMwMCB8IChjaGFyQ29kZSAmIDB4M2ZmKTsKICAgICAgICBpbnQgYml0cyA9IGNoYXJDb2RlIC0gMHgxMDAwMDsKICAgICAgICB2YXIgaGlnaCA9IDB4RDgwMCB8IChiaXRzID4+IDEwKTsKICAgICAgICByZXR1cm4gX1N0cmluZ0Jhc2UuX2NyZWF0ZUZyb21Db2RlUG9pbnRzKAogICAgICAgICAgICBuZXcgX0xpc3QoMikKICAgICAgICAgICAgICAuLlswXSA9IGhpZ2gKICAgICAgICAgICAgICAuLlsxXSA9IGxvdywKICAgICAgICAgICAgMCwKICAgICAgICAgICAgMik7CiAgICAgIH0KICAgIH0KICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGNoYXJDb2RlLCAwLCAweDEwZmZmZik7CiAgfQoKICBAcGF0Y2gKICBjb25zdCBmYWN0b3J5IFN0cmluZy5mcm9tRW52aXJvbm1lbnQoU3RyaW5nIG5hbWUsIHtTdHJpbmcgZGVmYXVsdFZhbHVlfSkKICAgICAgbmF0aXZlICJTdHJpbmdfZnJvbUVudmlyb25tZW50IjsKCiAgYm9vbCBnZXQgX2lzT25lQnl0ZTsKICBTdHJpbmcgX3N1YnN0cmluZ1VuY2hlY2tlZChpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4KTsKfQoKLyoqCiAqIFtfU3RyaW5nQmFzZV0gY29udGFpbnMgY29tbW9uIG1ldGhvZHMgdXNlZCBieSBjb25jcmV0ZSBTdHJpbmcKICogaW1wbGVtZW50YXRpb25zLCBlLmcuLCBfT25lQnl0ZVN0cmluZy4KICovCmFic3RyYWN0IGNsYXNzIF9TdHJpbmdCYXNlIGltcGxlbWVudHMgU3RyaW5nIHsKICBib29sIF9pc1doaXRlc3BhY2UoaW50IGNvZGVVbml0KTsKCiAgLy8gQ29uc3RhbnRzIHVzZWQgYnkgcmVwbGFjZUFsbCBlbmNvZGluZyBvZiBzdHJpbmcgc2xpY2VzIGJldHdlZW4gbWF0Y2hlcy4KICAvLyBBIHN0cmluZyBzbGljZSAoc3RhcnQrbGVuZ3RoKSBpcyBlbmNvZGVkIGluIGEgc2luZ2xlIFNtaSB0byBzYXZlIG1lbW9yeQogIC8vIG92ZXJoZWFkIGluIHRoZSBjb21tb24gY2FzZS4KICAvLyBXZSB1c2UgZmV3ZXIgYml0cyBmb3IgbGVuZ3RoICgxMSBiaXRzKSB0aGFuIGZvciB0aGUgc3RhcnQgaW5kZXggKDE5KyBiaXRzKS4KICAvLyBGb3IgbG9uZyBzdHJpbmdzLCBpdCdzIHBvc3NpYmxlIHRvIGhhdmUgbWFueSBsYXJnZSBpbmRpY2VzLAogIC8vIGJ1dCBpdCdzIHVubGlrZWx5IHRvIGhhdmUgbWFueSBsb25nIGxlbmd0aHMgc2luY2Ugc2xpY2VzIGRvbid0IG92ZXJsYXAuCiAgLy8gSWYgdGhlcmUgYXJlIGZldyBtYXRjaGVzIGluIGEgbG9uZyBzdHJpbmcsIHRoZW4gdGhlcmUgYXJlIGZldyBsb25nIHNsaWNlcywKICAvLyBhbmQgaWYgdGhlcmUgYXJlIG1hbnkgbWF0Y2hlcywgdGhlcmUnbGwgbGlrZWx5IGJlIG1hbnkgc2hvcnQgc2xpY2VzLgogIC8vCiAgLy8gRW5jb2RpbmcgaXM6IDAoKHN0YXJ0IDw8IF9sZW5ndGhCaXRzKSB8IGxlbmd0aCkKCiAgLy8gTnVtYmVyIG9mIGJpdHMgdXNlZCBieSBsZW5ndGguCiAgLy8gVGhpcyBpcyB0aGUgc2hpZnQgdXNlZCB0byBlbmNvZGUgYW5kIGRlY29kZSB0aGUgc3RhcnQgaW5kZXguCiAgc3RhdGljIGNvbnN0IGludCBfbGVuZ3RoQml0cyA9IDExOwogIC8vIFRoZSBtYXhpbWFsIGFsbG93ZWQgbGVuZ3RoIHZhbHVlIGluIGFuIGVuY29kZWQgc2xpY2UuCiAgc3RhdGljIGNvbnN0IGludCBfbWF4TGVuZ3RoVmFsdWUgPSAoMSA8PCBfbGVuZ3RoQml0cykgLSAxOwogIC8vIE1hc2sgb2YgbGVuZ3RoIGluIGVuY29kZWQgc21pIHZhbHVlLgogIHN0YXRpYyBjb25zdCBpbnQgX2xlbmd0aE1hc2sgPSBfbWF4TGVuZ3RoVmFsdWU7CiAgc3RhdGljIGNvbnN0IGludCBfc3RhcnRCaXRzID0gX21heFVuc2lnbmVkU21pQml0cyAtIF9sZW5ndGhCaXRzOwogIC8vIE1heGltYWwgYWxsb3dlZCBzdGFydCBpbmRleCB2YWx1ZSBpbiBhbiBlbmNvZGVkIHNsaWNlLgogIHN0YXRpYyBjb25zdCBpbnQgX21heFN0YXJ0VmFsdWUgPSAoMSA8PCBfc3RhcnRCaXRzKSAtIDE7CiAgLy8gV2UgcGljayAzMCBhcyBhIHNhZmUgbG93ZXIgYm91bmQgb24gYXZhaWxhYmxlIGJpdHMgaW4gYSBuZWdhdGl2ZSBzbWkuCiAgLy8gVE9ETyhscm4pOiBDb25zaWRlciBhbGxvd2luZyBtb3JlIGJpdHMgZm9yIHN0YXJ0IG9uIDY0LWJpdCBzeXN0ZW1zLgogIHN0YXRpYyBjb25zdCBpbnQgX21heFVuc2lnbmVkU21pQml0cyA9IDMwOwoKICAvLyBGb3IgbG9uZ2VyIHN0cmluZ3MsIGNhbGxpbmcgaW50byBDKysgdG8gY3JlYXRlIHRoZSByZXN1bHQgb2YgYQogIC8vIFtyZXBsYWNlQWxsXSBpcyBmYXN0ZXIgdGhhbiBbX2pvaW5SZXBsYWNlQWxsT25lQnl0ZVJlc3VsdF0uCiAgLy8gVE9ETyhscm4pOiBTZWUgaWYgdGhpcyBsaW1pdCBjYW4gYmUgdHdlYWtlZC4KICBzdGF0aWMgY29uc3QgaW50IF9tYXhKb2luUmVwbGFjZU9uZUJ5dGVTdHJpbmdMZW5ndGggPSA1MDA7CgogIGZhY3RvcnkgX1N0cmluZ0Jhc2UuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIl9TdHJpbmdCYXNlIGNhbid0IGJlIGluc3RhbmlhdGVkIik7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgaW50IGdldCBoYXNoQ29kZSBuYXRpdmUgIlN0cmluZ19nZXRIYXNoQ29kZSI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBpbnQgZ2V0IF9pZGVudGl0eUhhc2hDb2RlIG5hdGl2ZSAiU3RyaW5nX2dldEhhc2hDb2RlIjsKCiAgYm9vbCBnZXQgX2lzT25lQnl0ZSB7CiAgICAvLyBBbHRlcm5hdGl2ZWx5IHJldHVybiBmYWxzZSBhbmQgb3ZlcnJpZGUgaXQgb24gb25lLWJ5dGUgc3RyaW5nIGNsYXNzZXMuCiAgICBpbnQgaWQgPSBDbGFzc0lELmdldElEKHRoaXMpOwogICAgcmV0dXJuIGlkID09IENsYXNzSUQuY2lkT25lQnl0ZVN0cmluZyB8fAogICAgICAgIGlkID09IENsYXNzSUQuY2lkRXh0ZXJuYWxPbmVCeXRlU3RyaW5nOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlIHRoZSBtb3N0IGVmZmljaWVudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHNwZWNpZmllZAogICAqIFtjaGFyQ29kZXNdLgogICAqCiAgICogT25seSB1c2VzIHRoZSBjaGFyYWN0ZXIgY29kZXMgYmV0d2VlbiBpbmRleCBbc3RhcnRdIGFuZCBpbmRleCBbZW5kXSBvZgogICAqIGBjaGFyQ29kZXNgLiBUaGV5IG11c3Qgc2F0aXNmeSBgMCA8PSBzdGFydCA8PSBlbmQgPD0gY2hhckNvZGVzLmxlbmd0aGAuCiAgICoKICAgKiBUaGUgW2xpbWl0XSBpcyBhbiB1cHBlciBsaW1pdCBvbiB0aGUgY2hhcmFjdGVyIGNvZGVzIGluIHRoZSBpdGVyYWJsZS4KICAgKiBJdCdzIGBudWxsYCBpZiB1bmtub3duLgogICAqLwogIHN0YXRpYyBTdHJpbmcgY3JlYXRlRnJvbUNoYXJDb2RlcygKICAgICAgSXRlcmFibGU8aW50PiBjaGFyQ29kZXMsIGludCBzdGFydCwgaW50IGVuZCwgaW50IGxpbWl0KSB7CiAgICBpZiAoc3RhcnQgPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgic3RhcnQiKTsKICAgIGlmIChjaGFyQ29kZXMgPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoY2hhckNvZGVzKTsKICAgIC8vIFRPRE8oc3JkamFuKTogQWxzbyBza2lwIGNvcHlpbmcgb2Ygd2lkZSB0eXBlZCBhcnJheXMuCiAgICBmaW5hbCBjY2lkID0gQ2xhc3NJRC5nZXRJRChjaGFyQ29kZXMpOwogICAgaWYgKChjY2lkICE9IENsYXNzSUQuY2lkQXJyYXkpICYmCiAgICAgICAgKGNjaWQgIT0gQ2xhc3NJRC5jaWRHcm93YWJsZU9iamVjdEFycmF5KSAmJgogICAgICAgIChjY2lkICE9IENsYXNzSUQuY2lkSW1tdXRhYmxlQXJyYXkpKSB7CiAgICAgIGlmIChjaGFyQ29kZXMgaXMgVWludDhMaXN0KSB7CiAgICAgICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgY2hhckNvZGVzLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIF9jcmVhdGVPbmVCeXRlU3RyaW5nKGNoYXJDb2Rlcywgc3RhcnQsIGVuZCAtIHN0YXJ0KTsKICAgICAgfSBlbHNlIGlmIChjaGFyQ29kZXMgaXMhIFVpbnQxNkxpc3QpIHsKICAgICAgICByZXR1cm4gX2NyZWF0ZVN0cmluZ0Zyb21JdGVyYWJsZShjaGFyQ29kZXMsIHN0YXJ0LCBlbmQpOwogICAgICB9CiAgICB9CiAgICBpbnQgY29kZUNvdW50ID0gY2hhckNvZGVzLmxlbmd0aDsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGNvZGVDb3VudCk7CiAgICBmaW5hbCBsZW4gPSBlbmQgLSBzdGFydDsKICAgIGlmIChsZW4gPT0gMCkgcmV0dXJuICIiOwogICAgbGltaXQgPz89IF9zY2FuQ29kZVVuaXRzKGNoYXJDb2Rlcywgc3RhcnQsIGVuZCk7CiAgICBpZiAobGltaXQgPCAwKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKGNoYXJDb2Rlcyk7CiAgICB9CiAgICBpZiAobGltaXQgPD0gX21heExhdGluMSkgewogICAgICByZXR1cm4gX2NyZWF0ZU9uZUJ5dGVTdHJpbmcoY2hhckNvZGVzLCBzdGFydCwgbGVuKTsKICAgIH0KICAgIGlmIChsaW1pdCA8PSBfbWF4VXRmMTYpIHsKICAgICAgcmV0dXJuIF9Ud29CeXRlU3RyaW5nLl9hbGxvY2F0ZUZyb21Ud29CeXRlTGlzdChjaGFyQ29kZXMsIHN0YXJ0LCBlbmQpOwogICAgfQogICAgLy8gVE9ETyhscm4pOiBDb25zaWRlciBwYXNzaW5nIGxpbWl0IHRvIF9jcmVhdGVGcm9tQ29kZVBvaW50cywgYmVjYXVzZQogICAgLy8gdGhlIGZ1bmN0aW9uIGlzIGN1cnJlbnRseSBmdWxseSBnZW5lcmljIGFuZCBkb2Vzbid0IGtub3cgdGhhdCBpdHMKICAgIC8vIGNoYXJDb2RlcyBhcmUgbm90IGFsbCBMYXRpbi0xIG9yIFV0Zi0xNi4KICAgIHJldHVybiBfY3JlYXRlRnJvbUNvZGVQb2ludHMoY2hhckNvZGVzLCBzdGFydCwgZW5kKTsKICB9CgogIHN0YXRpYyBpbnQgX3NjYW5Db2RlVW5pdHMoTGlzdDxpbnQ+IGNoYXJDb2RlcywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBpbnQgYml0cyA9IDA7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICBpbnQgY29kZSA9IGNoYXJDb2Rlc1tpXTsKICAgICAgaWYgKGNvZGUgaXMhIF9TbWkpIHRocm93IG5ldyBBcmd1bWVudEVycm9yKGNoYXJDb2Rlcyk7CiAgICAgIGJpdHMgfD0gY29kZTsKICAgIH0KICAgIHJldHVybiBiaXRzOwogIH0KCiAgc3RhdGljIFN0cmluZyBfY3JlYXRlU3RyaW5nRnJvbUl0ZXJhYmxlKAogICAgICBJdGVyYWJsZTxpbnQ+IGNoYXJDb2RlcywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICAvLyBUcmVhdCBjaGFyQ29kZXMgYXMgSXRlcmFibGUuCiAgICBpZiAoY2hhckNvZGVzIGlzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlKSB7CiAgICAgIGludCBsZW5ndGggPSBjaGFyQ29kZXMubGVuZ3RoOwogICAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBsZW5ndGgpOwogICAgICBmaW5hbCBjaGFyQ29kZUxpc3QgPQogICAgICAgICAgbmV3IExpc3Q8aW50Pi5mcm9tKGNoYXJDb2Rlcy50YWtlKGVuZCkuc2tpcChzdGFydCksIGdyb3dhYmxlOiBmYWxzZSk7CiAgICAgIHJldHVybiBjcmVhdGVGcm9tQ2hhckNvZGVzKGNoYXJDb2RlTGlzdCwgMCwgY2hhckNvZGVMaXN0Lmxlbmd0aCwgbnVsbCk7CiAgICB9CiAgICAvLyBEb24ndCBrbm93IGxlbmd0aCBvZiBpdGVyYWJsZSwgc28gaXRlcmF0ZSBhbmQgc2VlIGlmIGFsbCB0aGUgdmFsdWVzCiAgICAvLyBhcmUgdGhlcmUuCiAgICBpZiAoc3RhcnQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShzdGFydCwgMCwgY2hhckNvZGVzLmxlbmd0aCk7CiAgICB2YXIgaXQgPSBjaGFyQ29kZXMuaXRlcmF0b3I7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0YXJ0OyBpKyspIHsKICAgICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSB7CiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2Uoc3RhcnQsIDAsIGkpOwogICAgICB9CiAgICB9CiAgICBMaXN0PGludD4gY2hhckNvZGVMaXN0OwogICAgaW50IGJpdHMgPSAwOyAvLyBCaXR3aXNlLW9yIG9mIGFsbCBjaGFyIGNvZGVzIGluIGxpc3QuCiAgICBpZiAoZW5kID09IG51bGwpIHsKICAgICAgdmFyIGxpc3QgPSA8aW50PltdOwogICAgICB3aGlsZSAoaXQubW92ZU5leHQoKSkgewogICAgICAgIGludCBjb2RlID0gaXQuY3VycmVudDsKICAgICAgICBiaXRzIHw9IGNvZGU7CiAgICAgICAgbGlzdC5hZGQoY29kZSk7CiAgICAgIH0KICAgICAgY2hhckNvZGVMaXN0ID0gbWFrZUxpc3RGaXhlZExlbmd0aDxpbnQ+KGxpc3QpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKGVuZCA8IHN0YXJ0KSB7CiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoZW5kLCBzdGFydCwgY2hhckNvZGVzLmxlbmd0aCk7CiAgICAgIH0KICAgICAgaW50IGxlbiA9IGVuZCAtIHN0YXJ0OwogICAgICBjaGFyQ29kZUxpc3QgPSBuZXcgTGlzdDxpbnQ+KGxlbik7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGVuZCwgc3RhcnQsIHN0YXJ0ICsgaSk7CiAgICAgICAgfQogICAgICAgIGludCBjb2RlID0gaXQuY3VycmVudDsKICAgICAgICBiaXRzIHw9IGNvZGU7CiAgICAgICAgY2hhckNvZGVMaXN0W2ldID0gY29kZTsKICAgICAgfQogICAgfQogICAgaW50IGxlbmd0aCA9IGNoYXJDb2RlTGlzdC5sZW5ndGg7CiAgICBpZiAoYml0cyA8IDApIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoY2hhckNvZGVzKTsKICAgIH0KICAgIGJvb2wgaXNPbmVCeXRlU3RyaW5nID0gKGJpdHMgPD0gX21heExhdGluMSk7CiAgICBpZiAoaXNPbmVCeXRlU3RyaW5nKSB7CiAgICAgIHJldHVybiBfY3JlYXRlT25lQnl0ZVN0cmluZyhjaGFyQ29kZUxpc3QsIDAsIGxlbmd0aCk7CiAgICB9CiAgICByZXR1cm4gY3JlYXRlRnJvbUNoYXJDb2RlcyhjaGFyQ29kZUxpc3QsIDAsIGxlbmd0aCwgYml0cyk7CiAgfQoKICAvLyBJbmxpbmluZyBpcyBkaXNhYmxlZCBhcyBhIHdvcmthcm91bmQgdG8gaHR0cDovL2RhcnRidWcuY29tLzM3ODAwLgogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgc3RhdGljIFN0cmluZyBfY3JlYXRlT25lQnl0ZVN0cmluZyhMaXN0PGludD4gY2hhckNvZGVzLCBpbnQgc3RhcnQsIGludCBsZW4pIHsKICAgIC8vIEl0J3MgYWx3YXlzIGZhc3RlciB0byBkbyB0aGlzIGluIERhcnQgdGhhbiB0byBjYWxsIGludG8gdGhlIHJ1bnRpbWUuCiAgICB2YXIgcyA9IF9PbmVCeXRlU3RyaW5nLl9hbGxvY2F0ZShsZW4pOwoKICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgX1VpbnQ4QXJyYXlWaWV3LgogICAgaWYgKGNoYXJDb2RlcyBpcyBVaW50OExpc3QpIHsKICAgICAgaWYgKHN0YXJ0ID49IDAgJiYgbGVuID49IDApIHsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICBzLl9zZXRBdChpLCBjaGFyQ29kZXNbc3RhcnQgKyBpXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzOwogICAgICB9CiAgICB9CgogICAgLy8gRmFsbCB0aHJvdWdoIHRvIG5vcm1hbCBjYXNlLgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICBzLl9zZXRBdChpLCBjaGFyQ29kZXNbc3RhcnQgKyBpXSk7CiAgICB9CiAgICByZXR1cm4gczsKICB9CgogIHN0YXRpYyBTdHJpbmcgX2NyZWF0ZUZyb21Db2RlUG9pbnRzKExpc3Q8aW50PiBjb2RlUG9pbnRzLCBpbnQgc3RhcnQsIGludCBlbmQpCiAgICAgIG5hdGl2ZSAiU3RyaW5nQmFzZV9jcmVhdGVGcm9tQ29kZVBvaW50cyI7CgogIFN0cmluZyBvcGVyYXRvciBbXShpbnQgaW5kZXgpIG5hdGl2ZSAiU3RyaW5nX2NoYXJBdCI7CgogIGludCBjb2RlVW5pdEF0KGludCBpbmRleCk7IC8vIEltcGxlbWVudGVkIGluIHRoZSBzdWJjbGFzc2VzLgoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IGdldCBsZW5ndGggbmF0aXZlICJTdHJpbmdfZ2V0TGVuZ3RoIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIGJvb2wgZ2V0IGlzRW1wdHkgewogICAgcmV0dXJuIHRoaXMubGVuZ3RoID09IDA7CiAgfQoKICBib29sIGdldCBpc05vdEVtcHR5ID0+ICFpc0VtcHR5OwoKICBTdHJpbmcgb3BlcmF0b3IgKyhTdHJpbmcgb3RoZXIpIG5hdGl2ZSAiU3RyaW5nX2NvbmNhdCI7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChvdGhlciBpcyBTdHJpbmcgJiYgdGhpcy5sZW5ndGggPT0gb3RoZXIubGVuZ3RoKSB7CiAgICAgIGZpbmFsIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgaWYgKHRoaXMuY29kZVVuaXRBdChpKSAhPSBvdGhlci5jb2RlVW5pdEF0KGkpKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgaW50IGNvbXBhcmVUbyhTdHJpbmcgb3RoZXIpIHsKICAgIGludCB0aGlzTGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBpbnQgb3RoZXJMZW5ndGggPSBvdGhlci5sZW5ndGg7CiAgICBpbnQgbGVuID0gKHRoaXNMZW5ndGggPCBvdGhlckxlbmd0aCkgPyB0aGlzTGVuZ3RoIDogb3RoZXJMZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIGludCB0aGlzQ29kZVVuaXQgPSB0aGlzLmNvZGVVbml0QXQoaSk7CiAgICAgIGludCBvdGhlckNvZGVVbml0ID0gb3RoZXIuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKHRoaXNDb2RlVW5pdCA8IG90aGVyQ29kZVVuaXQpIHsKICAgICAgICByZXR1cm4gLTE7CiAgICAgIH0KICAgICAgaWYgKHRoaXNDb2RlVW5pdCA+IG90aGVyQ29kZVVuaXQpIHsKICAgICAgICByZXR1cm4gMTsKICAgICAgfQogICAgfQogICAgaWYgKHRoaXNMZW5ndGggPCBvdGhlckxlbmd0aCkgcmV0dXJuIC0xOwogICAgaWYgKHRoaXNMZW5ndGggPiBvdGhlckxlbmd0aCkgcmV0dXJuIDE7CiAgICByZXR1cm4gMDsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBib29sIF9zdWJzdHJpbmdNYXRjaGVzKGludCBzdGFydCwgU3RyaW5nIG90aGVyKSB7CiAgICBpZiAob3RoZXIuaXNFbXB0eSkgcmV0dXJuIHRydWU7CiAgICBmaW5hbCBsZW4gPSBvdGhlci5sZW5ndGg7CiAgICBpZiAoKHN0YXJ0IDwgMCkgfHwgKHN0YXJ0ICsgbGVuID4gdGhpcy5sZW5ndGgpKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgaWYgKHRoaXMuY29kZVVuaXRBdChpICsgc3RhcnQpICE9IG90aGVyLmNvZGVVbml0QXQoaSkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgYm9vbCBlbmRzV2l0aChTdHJpbmcgb3RoZXIpIHsKICAgIHJldHVybiBfc3Vic3RyaW5nTWF0Y2hlcyh0aGlzLmxlbmd0aCAtIG90aGVyLmxlbmd0aCwgb3RoZXIpOwogIH0KCiAgYm9vbCBzdGFydHNXaXRoKFBhdHRlcm4gcGF0dGVybiwgW2ludCBpbmRleCA9IDBdKSB7CiAgICBpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID4gdGhpcy5sZW5ndGgpKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGluZGV4LCAwLCB0aGlzLmxlbmd0aCk7CiAgICB9CiAgICBpZiAocGF0dGVybiBpcyBTdHJpbmcpIHsKICAgICAgcmV0dXJuIF9zdWJzdHJpbmdNYXRjaGVzKGluZGV4LCBwYXR0ZXJuKTsKICAgIH0KICAgIHJldHVybiBwYXR0ZXJuLm1hdGNoQXNQcmVmaXgodGhpcywgaW5kZXgpICE9IG51bGw7CiAgfQoKICBpbnQgaW5kZXhPZihQYXR0ZXJuIHBhdHRlcm4sIFtpbnQgc3RhcnQgPSAwXSkgewogICAgaWYgKChzdGFydCA8IDApIHx8IChzdGFydCA+IHRoaXMubGVuZ3RoKSkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShzdGFydCwgMCwgdGhpcy5sZW5ndGgsICJzdGFydCIpOwogICAgfQogICAgaWYgKHBhdHRlcm4gaXMgU3RyaW5nKSB7CiAgICAgIFN0cmluZyBvdGhlciA9IHBhdHRlcm47CiAgICAgIGludCBtYXhJbmRleCA9IHRoaXMubGVuZ3RoIC0gb3RoZXIubGVuZ3RoOwogICAgICAvLyBUT0RPOiBVc2UgYW4gZWZmaWNpZW50IHN0cmluZyBzZWFyY2ggKGUuZy4gQk1IKS4KICAgICAgZm9yIChpbnQgaW5kZXggPSBzdGFydDsgaW5kZXggPD0gbWF4SW5kZXg7IGluZGV4KyspIHsKICAgICAgICBpZiAoX3N1YnN0cmluZ01hdGNoZXMoaW5kZXgsIG90aGVyKSkgewogICAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gLTE7CiAgICB9CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPD0gdGhpcy5sZW5ndGg7IGkrKykgewogICAgICAvLyBUT0RPKDExMjc2KTsgVGhpcyBoYXMgcXVhZHJhdGljIGJlaGF2aW9yIGJlY2F1c2UgbWF0Y2hBc1ByZWZpeCB0cmllcwogICAgICAvLyB0byBmaW5kIGEgbGF0ZXIgbWF0Y2ggdG9vLiBPcHRpbWl6ZSBtYXRjaEFzUHJlZml4IHRvIGF2b2lkIHRoaXMuCiAgICAgIGlmIChwYXR0ZXJuLm1hdGNoQXNQcmVmaXgodGhpcywgaSkgIT0gbnVsbCkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBpbnQgbGFzdEluZGV4T2YoUGF0dGVybiBwYXR0ZXJuLCBbaW50IHN0YXJ0ID0gbnVsbF0pIHsKICAgIGlmIChzdGFydCA9PSBudWxsKSB7CiAgICAgIHN0YXJ0ID0gdGhpcy5sZW5ndGg7CiAgICB9IGVsc2UgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+IHRoaXMubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKHN0YXJ0LCAwLCB0aGlzLmxlbmd0aCk7CiAgICB9CiAgICBpZiAocGF0dGVybiBpcyBTdHJpbmcpIHsKICAgICAgU3RyaW5nIG90aGVyID0gcGF0dGVybjsKICAgICAgaW50IG1heEluZGV4ID0gdGhpcy5sZW5ndGggLSBvdGhlci5sZW5ndGg7CiAgICAgIGlmIChtYXhJbmRleCA8IHN0YXJ0KSBzdGFydCA9IG1heEluZGV4OwogICAgICBmb3IgKGludCBpbmRleCA9IHN0YXJ0OyBpbmRleCA+PSAwOyBpbmRleC0tKSB7CiAgICAgICAgaWYgKF9zdWJzdHJpbmdNYXRjaGVzKGluZGV4LCBvdGhlcikpIHsKICAgICAgICAgIHJldHVybiBpbmRleDsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpID49IDA7IGktLSkgewogICAgICAvLyBUT0RPKDExMjc2KTsgVGhpcyBoYXMgcXVhZHJhdGljIGJlaGF2aW9yIGJlY2F1c2UgbWF0Y2hBc1ByZWZpeCB0cmllcwogICAgICAvLyB0byBmaW5kIGEgbGF0ZXIgbWF0Y2ggdG9vLiBPcHRpbWl6ZSBtYXRjaEFzUHJlZml4IHRvIGF2b2lkIHRoaXMuCiAgICAgIGlmIChwYXR0ZXJuLm1hdGNoQXNQcmVmaXgodGhpcywgaSkgIT0gbnVsbCkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBTdHJpbmcgc3Vic3RyaW5nKGludCBzdGFydEluZGV4LCBbaW50IGVuZEluZGV4XSkgewogICAgZW5kSW5kZXggPz89IHRoaXMubGVuZ3RoOwoKICAgIGlmICgoc3RhcnRJbmRleCA8IDApIHx8IChzdGFydEluZGV4ID4gdGhpcy5sZW5ndGgpKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnZhbHVlKHN0YXJ0SW5kZXgpOwogICAgfQogICAgaWYgKChlbmRJbmRleCA8IDApIHx8IChlbmRJbmRleCA+IHRoaXMubGVuZ3RoKSkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci52YWx1ZShlbmRJbmRleCk7CiAgICB9CiAgICBpZiAoc3RhcnRJbmRleCA+IGVuZEluZGV4KSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnZhbHVlKHN0YXJ0SW5kZXgpOwogICAgfQogICAgcmV0dXJuIF9zdWJzdHJpbmdVbmNoZWNrZWQoc3RhcnRJbmRleCwgZW5kSW5kZXgpOwogIH0KCiAgU3RyaW5nIF9zdWJzdHJpbmdVbmNoZWNrZWQoaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCkgewogICAgYXNzZXJ0KGVuZEluZGV4ICE9IG51bGwpOwogICAgYXNzZXJ0KChzdGFydEluZGV4ID49IDApICYmIChzdGFydEluZGV4IDw9IHRoaXMubGVuZ3RoKSk7CiAgICBhc3NlcnQoKGVuZEluZGV4ID49IDApICYmIChlbmRJbmRleCA8PSB0aGlzLmxlbmd0aCkpOwogICAgYXNzZXJ0KHN0YXJ0SW5kZXggPD0gZW5kSW5kZXgpOwoKICAgIGlmIChzdGFydEluZGV4ID09IGVuZEluZGV4KSB7CiAgICAgIHJldHVybiAiIjsKICAgIH0KICAgIGlmICgoc3RhcnRJbmRleCA9PSAwKSAmJiAoZW5kSW5kZXggPT0gdGhpcy5sZW5ndGgpKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgaWYgKChzdGFydEluZGV4ICsgMSkgPT0gZW5kSW5kZXgpIHsKICAgICAgcmV0dXJuIHRoaXNbc3RhcnRJbmRleF07CiAgICB9CiAgICByZXR1cm4gX3N1YnN0cmluZ1VuY2hlY2tlZE5hdGl2ZShzdGFydEluZGV4LCBlbmRJbmRleCk7CiAgfQoKICBTdHJpbmcgX3N1YnN0cmluZ1VuY2hlY2tlZE5hdGl2ZShpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4KQogICAgICBuYXRpdmUgIlN0cmluZ0Jhc2Vfc3Vic3RyaW5nVW5jaGVja2VkIjsKCiAgLy8gQ2hlY2tzIGZvciBvbmUtYnl0ZSB3aGl0ZXNwYWNlcyBvbmx5LgogIHN0YXRpYyBib29sIF9pc09uZUJ5dGVXaGl0ZXNwYWNlKGludCBjb2RlVW5pdCkgewogICAgaWYgKGNvZGVVbml0IDw9IDMyKSB7CiAgICAgIHJldHVybiAoKGNvZGVVbml0ID09IDMyKSB8fCAvLyBTcGFjZS4KICAgICAgICAgICgoY29kZVVuaXQgPD0gMTMpICYmIChjb2RlVW5pdCA+PSA5KSkpOyAvLyBDUiwgTEYsIFRBQiwgZXRjLgogICAgfQogICAgcmV0dXJuIChjb2RlVW5pdCA9PSAweDg1KSB8fCAoY29kZVVuaXQgPT0gMHhBMCk7IC8vIE5FTCwgTkJTUC4KICB9CgogIC8vIENoYXJhY3RlcnMgd2l0aCBXaGl0ZXNwYWNlIHByb3BlcnR5IChVbmljb2RlIDYuMykuCiAgLy8gMDAwOS4uMDAwRCAgICA7IFdoaXRlX1NwYWNlICMgQ2MgICAgICAgPGNvbnRyb2wtMDAwOT4uLjxjb250cm9sLTAwMEQ+CiAgLy8gMDAyMCAgICAgICAgICA7IFdoaXRlX1NwYWNlICMgWnMgICAgICAgU1BBQ0UKICAvLyAwMDg1ICAgICAgICAgIDsgV2hpdGVfU3BhY2UgIyBDYyAgICAgICA8Y29udHJvbC0wMDg1PgogIC8vIDAwQTAgICAgICAgICAgOyBXaGl0ZV9TcGFjZSAjIFpzICAgICAgIE5PLUJSRUFLIFNQQUNFCiAgLy8gMTY4MCAgICAgICAgICA7IFdoaXRlX1NwYWNlICMgWnMgICAgICAgT0dIQU0gU1BBQ0UgTUFSSwogIC8vIDIwMDAuLjIwMEEgICAgOyBXaGl0ZV9TcGFjZSAjIFpzICAgICAgIEVOIFFVQUQuLkhBSVIgU1BBQ0UKICAvLyAyMDI4ICAgICAgICAgIDsgV2hpdGVfU3BhY2UgIyBabCAgICAgICBMSU5FIFNFUEFSQVRPUgogIC8vIDIwMjkgICAgICAgICAgOyBXaGl0ZV9TcGFjZSAjIFpwICAgICAgIFBBUkFHUkFQSCBTRVBBUkFUT1IKICAvLyAyMDJGICAgICAgICAgIDsgV2hpdGVfU3BhY2UgIyBacyAgICAgICBOQVJST1cgTk8tQlJFQUsgU1BBQ0UKICAvLyAyMDVGICAgICAgICAgIDsgV2hpdGVfU3BhY2UgIyBacyAgICAgICBNRURJVU0gTUFUSEVNQVRJQ0FMIFNQQUNFCiAgLy8gMzAwMCAgICAgICAgICA7IFdoaXRlX1NwYWNlICMgWnMgICAgICAgSURFT0dSQVBISUMgU1BBQ0UKICAvLwogIC8vIEJPTTogMHhGRUZGCiAgc3RhdGljIGJvb2wgX2lzVHdvQnl0ZVdoaXRlc3BhY2UoaW50IGNvZGVVbml0KSB7CiAgICBpZiAoY29kZVVuaXQgPD0gMzIpIHsKICAgICAgcmV0dXJuIChjb2RlVW5pdCA9PSAzMikgfHwgKChjb2RlVW5pdCA8PSAxMykgJiYgKGNvZGVVbml0ID49IDkpKTsKICAgIH0KICAgIGlmIChjb2RlVW5pdCA8IDB4ODUpIHJldHVybiBmYWxzZTsKICAgIGlmICgoY29kZVVuaXQgPT0gMHg4NSkgfHwgKGNvZGVVbml0ID09IDB4QTApKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiAoY29kZVVuaXQgPD0gMHgyMDBBKQogICAgICAgID8gKChjb2RlVW5pdCA9PSAweDE2ODApIHx8ICgweDIwMDAgPD0gY29kZVVuaXQpKQogICAgICAgIDogKChjb2RlVW5pdCA9PSAweDIwMjgpIHx8CiAgICAgICAgICAgIChjb2RlVW5pdCA9PSAweDIwMjkpIHx8CiAgICAgICAgICAgIChjb2RlVW5pdCA9PSAweDIwMkYpIHx8CiAgICAgICAgICAgIChjb2RlVW5pdCA9PSAweDIwNUYpIHx8CiAgICAgICAgICAgIChjb2RlVW5pdCA9PSAweDMwMDApIHx8CiAgICAgICAgICAgIChjb2RlVW5pdCA9PSAweEZFRkYpKTsKICB9CgogIGludCBfZmlyc3ROb25XaGl0ZXNwYWNlKCkgewogICAgZmluYWwgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBpbnQgZmlyc3QgPSAwOwogICAgZm9yICg7IGZpcnN0IDwgbGVuOyBmaXJzdCsrKSB7CiAgICAgIGlmICghX2lzV2hpdGVzcGFjZSh0aGlzLmNvZGVVbml0QXQoZmlyc3QpKSkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmlyc3Q7CiAgfQoKICBpbnQgX2xhc3ROb25XaGl0ZXNwYWNlKCkgewogICAgaW50IGxhc3QgPSB0aGlzLmxlbmd0aCAtIDE7CiAgICBmb3IgKDsgbGFzdCA+PSAwOyBsYXN0LS0pIHsKICAgICAgaWYgKCFfaXNXaGl0ZXNwYWNlKHRoaXMuY29kZVVuaXRBdChsYXN0KSkpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGxhc3Q7CiAgfQoKICBTdHJpbmcgdHJpbSgpIHsKICAgIGZpbmFsIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgaW50IGZpcnN0ID0gX2ZpcnN0Tm9uV2hpdGVzcGFjZSgpOwogICAgaWYgKGxlbiA9PSBmaXJzdCkgewogICAgICAvLyBTdHJpbmcgY29udGFpbnMgb25seSB3aGl0ZXNwYWNlcy4KICAgICAgcmV0dXJuICIiOwogICAgfQogICAgaW50IGxhc3QgPSBfbGFzdE5vbldoaXRlc3BhY2UoKSArIDE7CiAgICBpZiAoKGZpcnN0ID09IDApICYmIChsYXN0ID09IGxlbikpIHsKICAgICAgLy8gUmV0dXJucyB0aGlzIHN0cmluZyBzaW5jZSBpdCBkb2VzIG5vdCBoYXZlIGxlYWRpbmcgb3IgdHJhaWxpbmcKICAgICAgLy8gd2hpdGVzcGFjZXMuCiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgcmV0dXJuIF9zdWJzdHJpbmdVbmNoZWNrZWQoZmlyc3QsIGxhc3QpOwogIH0KCiAgU3RyaW5nIHRyaW1MZWZ0KCkgewogICAgZmluYWwgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBpbnQgZmlyc3QgPSAwOwogICAgZm9yICg7IGZpcnN0IDwgbGVuOyBmaXJzdCsrKSB7CiAgICAgIGlmICghX2lzV2hpdGVzcGFjZSh0aGlzLmNvZGVVbml0QXQoZmlyc3QpKSkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBpZiAobGVuID09IGZpcnN0KSB7CiAgICAgIC8vIFN0cmluZyBjb250YWlucyBvbmx5IHdoaXRlc3BhY2VzLgogICAgICByZXR1cm4gIiI7CiAgICB9CiAgICBpZiAoZmlyc3QgPT0gMCkgewogICAgICAvLyBSZXR1cm5zIHRoaXMgc3RyaW5nIHNpbmNlIGl0IGRvZXMgbm90IGhhdmUgbGVhZGluZyBvciB0cmFpbGluZwogICAgICAvLyB3aGl0ZXNwYWNlcy4KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICByZXR1cm4gX3N1YnN0cmluZ1VuY2hlY2tlZChmaXJzdCwgbGVuKTsKICB9CgogIFN0cmluZyB0cmltUmlnaHQoKSB7CiAgICBmaW5hbCBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGludCBsYXN0ID0gbGVuIC0gMTsKICAgIGZvciAoOyBsYXN0ID49IDA7IGxhc3QtLSkgewogICAgICBpZiAoIV9pc1doaXRlc3BhY2UodGhpcy5jb2RlVW5pdEF0KGxhc3QpKSkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBpZiAobGFzdCA9PSAtMSkgewogICAgICAvLyBTdHJpbmcgY29udGFpbnMgb25seSB3aGl0ZXNwYWNlcy4KICAgICAgcmV0dXJuICIiOwogICAgfQogICAgaWYgKGxhc3QgPT0gKGxlbiAtIDEpKSB7CiAgICAgIC8vIFJldHVybnMgdGhpcyBzdHJpbmcgc2luY2UgaXQgZG9lcyBub3QgaGF2ZSB0cmFpbGluZyB3aGl0ZXNwYWNlcy4KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICByZXR1cm4gX3N1YnN0cmluZ1VuY2hlY2tlZCgwLCBsYXN0ICsgMSk7CiAgfQoKICBTdHJpbmcgb3BlcmF0b3IgKihpbnQgdGltZXMpIHsKICAgIGlmICh0aW1lcyA8PSAwKSByZXR1cm4gIiI7CiAgICBpZiAodGltZXMgPT0gMSkgcmV0dXJuIHRoaXM7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcih0aGlzKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgdGltZXM7IGkrKykgewogICAgICBidWZmZXIud3JpdGUodGhpcyk7CiAgICB9CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICBTdHJpbmcgcGFkTGVmdChpbnQgd2lkdGgsIFtTdHJpbmcgcGFkZGluZyA9ICcgJ10pIHsKICAgIGludCBkZWx0YSA9IHdpZHRoIC0gdGhpcy5sZW5ndGg7CiAgICBpZiAoZGVsdGEgPD0gMCkgcmV0dXJuIHRoaXM7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWx0YTsgaSsrKSB7CiAgICAgIGJ1ZmZlci53cml0ZShwYWRkaW5nKTsKICAgIH0KICAgIGJ1ZmZlci53cml0ZSh0aGlzKTsKICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIFN0cmluZyBwYWRSaWdodChpbnQgd2lkdGgsIFtTdHJpbmcgcGFkZGluZyA9ICcgJ10pIHsKICAgIGludCBkZWx0YSA9IHdpZHRoIC0gdGhpcy5sZW5ndGg7CiAgICBpZiAoZGVsdGEgPD0gMCkgcmV0dXJuIHRoaXM7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcih0aGlzKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVsdGE7IGkrKykgewogICAgICBidWZmZXIud3JpdGUocGFkZGluZyk7CiAgICB9CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICBib29sIGNvbnRhaW5zKFBhdHRlcm4gcGF0dGVybiwgW2ludCBzdGFydEluZGV4ID0gMF0pIHsKICAgIGlmIChwYXR0ZXJuIGlzIFN0cmluZykgewogICAgICBpZiAoc3RhcnRJbmRleCA8IDAgfHwgc3RhcnRJbmRleCA+IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2Uoc3RhcnRJbmRleCwgMCwgdGhpcy5sZW5ndGgpOwogICAgICB9CiAgICAgIHJldHVybiBpbmRleE9mKHBhdHRlcm4sIHN0YXJ0SW5kZXgpID49IDA7CiAgICB9CiAgICByZXR1cm4gcGF0dGVybi5hbGxNYXRjaGVzKHRoaXMuc3Vic3RyaW5nKHN0YXJ0SW5kZXgpKS5pc05vdEVtcHR5OwogIH0KCiAgU3RyaW5nIHJlcGxhY2VGaXJzdChQYXR0ZXJuIHBhdHRlcm4sIFN0cmluZyByZXBsYWNlbWVudCwKICAgICAgW2ludCBzdGFydEluZGV4ID0gMF0pIHsKICAgIGlmIChwYXR0ZXJuIGlzISBQYXR0ZXJuKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCIke3BhdHRlcm59IGlzIG5vdCBhIFBhdHRlcm4iKTsKICAgIH0KICAgIGlmIChyZXBsYWNlbWVudCBpcyEgU3RyaW5nKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCIke3JlcGxhY2VtZW50fSBpcyBub3QgYSBTdHJpbmciKTsKICAgIH0KICAgIGlmIChzdGFydEluZGV4IGlzISBpbnQpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIiR7c3RhcnRJbmRleH0gaXMgbm90IGFuIGludCIpOwogICAgfQogICAgUmFuZ2VFcnJvci5jaGVja1ZhbHVlSW5JbnRlcnZhbChzdGFydEluZGV4LCAwLCB0aGlzLmxlbmd0aCwgInN0YXJ0SW5kZXgiKTsKICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gc3RhcnRJbmRleCA9PSAwCiAgICAgICAgPyBwYXR0ZXJuLmFsbE1hdGNoZXModGhpcykuaXRlcmF0b3IKICAgICAgICA6IHBhdHRlcm4uYWxsTWF0Y2hlcyh0aGlzLCBzdGFydEluZGV4KS5pdGVyYXRvcjsKICAgIGlmICghaXRlcmF0b3IubW92ZU5leHQoKSkgcmV0dXJuIHRoaXM7CiAgICBNYXRjaCBtYXRjaCA9IGl0ZXJhdG9yLmN1cnJlbnQ7CiAgICByZXR1cm4gcmVwbGFjZVJhbmdlKG1hdGNoLnN0YXJ0LCBtYXRjaC5lbmQsIHJlcGxhY2VtZW50KTsKICB9CgogIFN0cmluZyByZXBsYWNlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBTdHJpbmcgcmVwbGFjZW1lbnQpIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGxlbmd0aCk7CiAgICBib29sIHJlcGxhY2VtZW50SXNPbmVCeXRlID0gcmVwbGFjZW1lbnQuX2lzT25lQnl0ZTsKICAgIGlmIChzdGFydCA9PSAwICYmIGVuZCA9PSBsZW5ndGgpIHJldHVybiByZXBsYWNlbWVudDsKICAgIGludCByZXBsYWNlbWVudExlbmd0aCA9IHJlcGxhY2VtZW50Lmxlbmd0aDsKICAgIGludCB0b3RhbExlbmd0aCA9IHN0YXJ0ICsgKGxlbmd0aCAtIGVuZCkgKyByZXBsYWNlbWVudExlbmd0aDsKICAgIGlmIChyZXBsYWNlbWVudElzT25lQnl0ZSAmJiB0aGlzLl9pc09uZUJ5dGUpIHsKICAgICAgdmFyIHJlc3VsdCA9IF9PbmVCeXRlU3RyaW5nLl9hbGxvY2F0ZSh0b3RhbExlbmd0aCk7CiAgICAgIGludCBpbmRleCA9IDA7CiAgICAgIGluZGV4ID0gcmVzdWx0Ll9zZXRSYW5nZShpbmRleCwgdGhpcywgMCwgc3RhcnQpOwogICAgICBpbmRleCA9IHJlc3VsdC5fc2V0UmFuZ2Uoc3RhcnQsIHJlcGxhY2VtZW50LCAwLCByZXBsYWNlbWVudExlbmd0aCk7CiAgICAgIHJlc3VsdC5fc2V0UmFuZ2UoaW5kZXgsIHRoaXMsIGVuZCwgbGVuZ3RoKTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIExpc3Qgc2xpY2VzID0gW107CiAgICBfYWRkUmVwbGFjZVNsaWNlKHNsaWNlcywgMCwgc3RhcnQpOwogICAgaWYgKHJlcGxhY2VtZW50Lmxlbmd0aCA+IDApIHNsaWNlcy5hZGQocmVwbGFjZW1lbnQpOwogICAgX2FkZFJlcGxhY2VTbGljZShzbGljZXMsIGVuZCwgbGVuZ3RoKTsKICAgIHJldHVybiBfam9pblJlcGxhY2VBbGxSZXN1bHQoCiAgICAgICAgdGhpcywgc2xpY2VzLCB0b3RhbExlbmd0aCwgcmVwbGFjZW1lbnRJc09uZUJ5dGUpOwogIH0KCiAgc3RhdGljIGludCBfYWRkUmVwbGFjZVNsaWNlKExpc3QgbWF0Y2hlcywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICBpZiAobGVuZ3RoID4gMCkgewogICAgICBpZiAobGVuZ3RoIDw9IF9tYXhMZW5ndGhWYWx1ZSAmJiBzdGFydCA8PSBfbWF4U3RhcnRWYWx1ZSkgewogICAgICAgIG1hdGNoZXMuYWRkKC0oKHN0YXJ0IDw8IF9sZW5ndGhCaXRzKSB8IGxlbmd0aCkpOwogICAgICB9IGVsc2UgewogICAgICAgIG1hdGNoZXMuYWRkKHN0YXJ0KTsKICAgICAgICBtYXRjaGVzLmFkZChlbmQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbGVuZ3RoOwogIH0KCiAgU3RyaW5nIHJlcGxhY2VBbGwoUGF0dGVybiBwYXR0ZXJuLCBTdHJpbmcgcmVwbGFjZW1lbnQpIHsKICAgIGlmIChwYXR0ZXJuID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoInBhdHRlcm4iKTsKICAgIGlmIChyZXBsYWNlbWVudCA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci5ub3ROdWxsKCJyZXBsYWNlbWVudCIpOwoKICAgIGludCBzdGFydEluZGV4ID0gMDsKICAgIC8vIFN0cmluZyBmcmFnbWVudHMgdGhhdCByZXBsYWNlIHRoZSB0aGUgcHJlZml4IFt0aGlzXSB1cCB0byBbc3RhcnRJbmRleF0uCiAgICBMaXN0IG1hdGNoZXMgPSBbXTsKICAgIGludCBsZW5ndGggPSAwOyAvLyBMZW5ndGggb2YgYWxsIGZyYWdtZW50cy4KICAgIGludCByZXBsYWNlbWVudExlbmd0aCA9IHJlcGxhY2VtZW50Lmxlbmd0aDsKCiAgICBpZiAocmVwbGFjZW1lbnRMZW5ndGggPT0gMCkgewogICAgICBmb3IgKE1hdGNoIG1hdGNoIGluIHBhdHRlcm4uYWxsTWF0Y2hlcyh0aGlzKSkgewogICAgICAgIGxlbmd0aCArPSBfYWRkUmVwbGFjZVNsaWNlKG1hdGNoZXMsIHN0YXJ0SW5kZXgsIG1hdGNoLnN0YXJ0KTsKICAgICAgICBzdGFydEluZGV4ID0gbWF0Y2guZW5kOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBmb3IgKE1hdGNoIG1hdGNoIGluIHBhdHRlcm4uYWxsTWF0Y2hlcyh0aGlzKSkgewogICAgICAgIGxlbmd0aCArPSBfYWRkUmVwbGFjZVNsaWNlKG1hdGNoZXMsIHN0YXJ0SW5kZXgsIG1hdGNoLnN0YXJ0KTsKICAgICAgICBtYXRjaGVzLmFkZChyZXBsYWNlbWVudCk7CiAgICAgICAgbGVuZ3RoICs9IHJlcGxhY2VtZW50TGVuZ3RoOwogICAgICAgIHN0YXJ0SW5kZXggPSBtYXRjaC5lbmQ7CiAgICAgIH0KICAgIH0KICAgIC8vIE5vIG1hdGNoLCBvciBhIHplcm8tbGVuZ3RoIG1hdGNoIGF0IHN0YXJ0IHdpdGggemVyby1sZW5ndGggcmVwbGFjZW1lbnQuCiAgICBpZiAoc3RhcnRJbmRleCA9PSAwICYmIGxlbmd0aCA9PSAwKSByZXR1cm4gdGhpczsKICAgIGxlbmd0aCArPSBfYWRkUmVwbGFjZVNsaWNlKG1hdGNoZXMsIHN0YXJ0SW5kZXgsIHRoaXMubGVuZ3RoKTsKICAgIGJvb2wgcmVwbGFjZW1lbnRJc09uZUJ5dGUgPSByZXBsYWNlbWVudC5faXNPbmVCeXRlOwogICAgaWYgKHJlcGxhY2VtZW50SXNPbmVCeXRlICYmCiAgICAgICAgbGVuZ3RoIDwgX21heEpvaW5SZXBsYWNlT25lQnl0ZVN0cmluZ0xlbmd0aCAmJgogICAgICAgIHRoaXMuX2lzT25lQnl0ZSkgewogICAgICAvLyBUT0RPKGxybik6IElzIHRoZXJlIGEgY3V0LW9mZiBwb2ludCwgb3IgaXMgcnVudGltZSBhbHdheXMgZmFzdGVyPwogICAgICByZXR1cm4gX2pvaW5SZXBsYWNlQWxsT25lQnl0ZVJlc3VsdCh0aGlzLCBtYXRjaGVzLCBsZW5ndGgpOwogICAgfQogICAgcmV0dXJuIF9qb2luUmVwbGFjZUFsbFJlc3VsdCh0aGlzLCBtYXRjaGVzLCBsZW5ndGgsIHJlcGxhY2VtZW50SXNPbmVCeXRlKTsKICB9CgogIC8qKgogICAqIEFzIFtfam9pblJlcGxhY2VBbGxSZXN1bHRdLCBidXQga25vd2luZyB0aGF0IHRoZSByZXN1bHQKICAgKiBpcyBhbHdheXMgYSBbX09uZUJ5dGVTdHJpbmddLgogICAqLwogIHN0YXRpYyBTdHJpbmcgX2pvaW5SZXBsYWNlQWxsT25lQnl0ZVJlc3VsdCgKICAgICAgU3RyaW5nIGJhc2UsIExpc3QgbWF0Y2hlcywgaW50IGxlbmd0aCkgewogICAgX09uZUJ5dGVTdHJpbmcgcmVzdWx0ID0gX09uZUJ5dGVTdHJpbmcuX2FsbG9jYXRlKGxlbmd0aCk7CiAgICBpbnQgd3JpdGVJbmRleCA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG1hdGNoZXMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGVudHJ5ID0gbWF0Y2hlc1tpXTsKICAgICAgaWYgKGVudHJ5IGlzIF9TbWkpIHsKICAgICAgICBpbnQgc2xpY2VTdGFydCA9IGVudHJ5OwogICAgICAgIGludCBzbGljZUVuZDsKICAgICAgICBpZiAoc2xpY2VTdGFydCA8IDApIHsKICAgICAgICAgIGludCBiaXRzID0gLXNsaWNlU3RhcnQ7CiAgICAgICAgICBpbnQgc2xpY2VMZW5ndGggPSBiaXRzICYgX2xlbmd0aE1hc2s7CiAgICAgICAgICBzbGljZVN0YXJ0ID0gYml0cyA+PiBfbGVuZ3RoQml0czsKICAgICAgICAgIHNsaWNlRW5kID0gc2xpY2VTdGFydCArIHNsaWNlTGVuZ3RoOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpKys7CiAgICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aXRoIHZhbGlkIG1hdGNoZXMgbGlzdHMuCiAgICAgICAgICAvLyBJZiB0aGUgbGlzdCBpcyBzaG9ydCwgb3Igc2xpY2VFbmQgaXMgbm90IGFuIGludGVnZXIsIG9uZSBvZgogICAgICAgICAgLy8gdGhlIG5leHQgZmV3IGxpbmVzIHdpbGwgdGhyb3cgYW55d2F5LgogICAgICAgICAgYXNzZXJ0KGkgPCBtYXRjaGVzLmxlbmd0aCk7CiAgICAgICAgICBzbGljZUVuZCA9IG1hdGNoZXNbaV07CiAgICAgICAgfQogICAgICAgIGZvciAoaW50IGogPSBzbGljZVN0YXJ0OyBqIDwgc2xpY2VFbmQ7IGorKykgewogICAgICAgICAgcmVzdWx0Ll9zZXRBdCh3cml0ZUluZGV4KyssIGJhc2UuY29kZVVuaXRBdChqKSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIC8vIFJlcGxhY2VtZW50IGlzIGEgb25lLWJ5dGUgc3RyaW5nLgogICAgICAgIFN0cmluZyByZXBsYWNlbWVudCA9IGVudHJ5OwogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVwbGFjZW1lbnQubGVuZ3RoOyBqKyspIHsKICAgICAgICAgIHJlc3VsdC5fc2V0QXQod3JpdGVJbmRleCsrLCByZXBsYWNlbWVudC5jb2RlVW5pdEF0KGopKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzc2VydCh3cml0ZUluZGV4ID09IGxlbmd0aCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogQ29tYmluZSB0aGUgcmVzdWx0cyBvZiBhIFtyZXBsYWNlQWxsXSBtYXRjaCBpbnRvIGEgbmV3IHN0cmluZy4KICAgKgogICAqIFRoZSBbbWF0Y2hlc10gbGlzdHMgY29udGFpbnMgU21pIGluZGV4IHBhaXJzIHJlcHJlc2VudGluZyBzbGljZXMgb2YKICAgKiBbYmFzZV0gYW5kIFtTdHJpbmddcyB0byBiZSBwdXQgaW4gYmV0d2VlbiB0aGUgc2xpY2VzLgogICAqCiAgICogVGhlIHRvdGFsIFtsZW5ndGhdIG9mIHRoZSByZXN1bHRpbmcgc3RyaW5nIGlzIGtub3duLCBhcyBpcwogICAqIHdoZXRoZXIgdGhlIHJlcGxhY2VtZW50IHN0cmluZ3MgYXJlIG9uZS1ieXRlIHN0cmluZ3MuCiAgICogSWYgdGhleSBhcmUsIHRoZW4gd2UgaGF2ZSB0byBjaGVjayB0aGUgYmFzZSBzdHJpbmcgc2xpY2VzIHRvIGtub3cKICAgKiB3aGV0aGVyIHRoZSByZXN1bHQgbXVzdCBiZSBhIG9uZS1ieXRlIHN0cmluZy4KICAgKi8KICBzdGF0aWMgU3RyaW5nCiAgICAgIF9qb2luUmVwbGFjZUFsbFJlc3VsdChTdHJpbmcgYmFzZSwgTGlzdCBtYXRjaGVzLCBpbnQgbGVuZ3RoLAogICAgICAgICAgYm9vbCByZXBsYWNlbWVudFN0cmluZ3NBcmVPbmVCeXRlKQogICAgICBuYXRpdmUgIlN0cmluZ0Jhc2Vfam9pblJlcGxhY2VBbGxSZXN1bHQiOwoKICBTdHJpbmcgcmVwbGFjZUFsbE1hcHBlZChQYXR0ZXJuIHBhdHRlcm4sIFN0cmluZyByZXBsYWNlKE1hdGNoIG1hdGNoKSkgewogICAgaWYgKHBhdHRlcm4gPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgicGF0dGVybiIpOwogICAgaWYgKHJlcGxhY2UgPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgicmVwbGFjZSIpOwogICAgTGlzdCBtYXRjaGVzID0gW107CiAgICBpbnQgbGVuZ3RoID0gMDsKICAgIGludCBzdGFydEluZGV4ID0gMDsKICAgIGJvb2wgcmVwbGFjZW1lbnRTdHJpbmdzQXJlT25lQnl0ZSA9IHRydWU7CiAgICBmb3IgKE1hdGNoIG1hdGNoIGluIHBhdHRlcm4uYWxsTWF0Y2hlcyh0aGlzKSkgewogICAgICBsZW5ndGggKz0gX2FkZFJlcGxhY2VTbGljZShtYXRjaGVzLCBzdGFydEluZGV4LCBtYXRjaC5zdGFydCk7CiAgICAgIHZhciByZXBsYWNlbWVudCA9ICIke3JlcGxhY2UobWF0Y2gpfSI7CiAgICAgIG1hdGNoZXMuYWRkKHJlcGxhY2VtZW50KTsKICAgICAgbGVuZ3RoICs9IHJlcGxhY2VtZW50Lmxlbmd0aDsKICAgICAgcmVwbGFjZW1lbnRTdHJpbmdzQXJlT25lQnl0ZSA9CiAgICAgICAgICByZXBsYWNlbWVudFN0cmluZ3NBcmVPbmVCeXRlICYmIHJlcGxhY2VtZW50Ll9pc09uZUJ5dGU7CiAgICAgIHN0YXJ0SW5kZXggPSBtYXRjaC5lbmQ7CiAgICB9CiAgICBpZiAobWF0Y2hlcy5pc0VtcHR5KSByZXR1cm4gdGhpczsKICAgIGxlbmd0aCArPSBfYWRkUmVwbGFjZVNsaWNlKG1hdGNoZXMsIHN0YXJ0SW5kZXgsIHRoaXMubGVuZ3RoKTsKICAgIGlmIChyZXBsYWNlbWVudFN0cmluZ3NBcmVPbmVCeXRlICYmCiAgICAgICAgbGVuZ3RoIDwgX21heEpvaW5SZXBsYWNlT25lQnl0ZVN0cmluZ0xlbmd0aCAmJgogICAgICAgIHRoaXMuX2lzT25lQnl0ZSkgewogICAgICByZXR1cm4gX2pvaW5SZXBsYWNlQWxsT25lQnl0ZVJlc3VsdCh0aGlzLCBtYXRjaGVzLCBsZW5ndGgpOwogICAgfQogICAgcmV0dXJuIF9qb2luUmVwbGFjZUFsbFJlc3VsdCgKICAgICAgICB0aGlzLCBtYXRjaGVzLCBsZW5ndGgsIHJlcGxhY2VtZW50U3RyaW5nc0FyZU9uZUJ5dGUpOwogIH0KCiAgU3RyaW5nIHJlcGxhY2VGaXJzdE1hcHBlZChQYXR0ZXJuIHBhdHRlcm4sIFN0cmluZyByZXBsYWNlKE1hdGNoIG1hdGNoKSwKICAgICAgW2ludCBzdGFydEluZGV4ID0gMF0pIHsKICAgIGlmIChwYXR0ZXJuID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoInBhdHRlcm4iKTsKICAgIGlmIChyZXBsYWNlID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoInJlcGxhY2UiKTsKICAgIGlmIChzdGFydEluZGV4ID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoInN0YXJ0SW5kZXgiKTsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWx1ZUluSW50ZXJ2YWwoc3RhcnRJbmRleCwgMCwgdGhpcy5sZW5ndGgsICJzdGFydEluZGV4Iik7CgogICAgdmFyIG1hdGNoZXMgPSBwYXR0ZXJuLmFsbE1hdGNoZXModGhpcywgc3RhcnRJbmRleCkuaXRlcmF0b3I7CiAgICBpZiAoIW1hdGNoZXMubW92ZU5leHQoKSkgcmV0dXJuIHRoaXM7CiAgICB2YXIgbWF0Y2ggPSBtYXRjaGVzLmN1cnJlbnQ7CiAgICB2YXIgcmVwbGFjZW1lbnQgPSAiJHtyZXBsYWNlKG1hdGNoKX0iOwogICAgcmV0dXJuIHJlcGxhY2VSYW5nZShtYXRjaC5zdGFydCwgbWF0Y2guZW5kLCByZXBsYWNlbWVudCk7CiAgfQoKICBzdGF0aWMgU3RyaW5nIF9tYXRjaFN0cmluZyhNYXRjaCBtYXRjaCkgPT4gbWF0Y2hbMF07CiAgc3RhdGljIFN0cmluZyBfc3RyaW5nSWRlbnRpdHkoU3RyaW5nIHN0cmluZykgPT4gc3RyaW5nOwoKICBTdHJpbmcgX3NwbGl0TWFwSm9pbkVtcHR5U3RyaW5nKAogICAgICBTdHJpbmcgb25NYXRjaChNYXRjaCBtYXRjaCksIFN0cmluZyBvbk5vbk1hdGNoKFN0cmluZyBub25NYXRjaCkpIHsKICAgIC8vIFBhdHRlcm4gaXMgdGhlIGVtcHR5IHN0cmluZy4KICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBpbnQgaSA9IDA7CiAgICBidWZmZXIud3JpdGUob25Ob25NYXRjaCgiIikpOwogICAgd2hpbGUgKGkgPCBsZW5ndGgpIHsKICAgICAgYnVmZmVyLndyaXRlKG9uTWF0Y2gobmV3IF9TdHJpbmdNYXRjaChpLCB0aGlzLCAiIikpKTsKICAgICAgLy8gU3BlY2lhbCBjYXNlIHRvIGF2b2lkIHNwbGl0dGluZyBhIHN1cnJvZ2F0ZSBwYWlyLgogICAgICBpbnQgY29kZSA9IHRoaXMuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKChjb2RlICYgfjB4M0ZGKSA9PSAweEQ4MDAgJiYgbGVuZ3RoID4gaSArIDEpIHsKICAgICAgICAvLyBMZWFkaW5nIHN1cnJvZ2F0ZTsKICAgICAgICBjb2RlID0gdGhpcy5jb2RlVW5pdEF0KGkgKyAxKTsKICAgICAgICBpZiAoKGNvZGUgJiB+MHgzRkYpID09IDB4REMwMCkgewogICAgICAgICAgLy8gTWF0Y2hpbmcgdHJhaWxpbmcgc3Vycm9nYXRlLgogICAgICAgICAgYnVmZmVyLndyaXRlKG9uTm9uTWF0Y2godGhpcy5zdWJzdHJpbmcoaSwgaSArIDIpKSk7CiAgICAgICAgICBpICs9IDI7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYnVmZmVyLndyaXRlKG9uTm9uTWF0Y2godGhpc1tpXSkpOwogICAgICBpKys7CiAgICB9CiAgICBidWZmZXIud3JpdGUob25NYXRjaChuZXcgX1N0cmluZ01hdGNoKGksIHRoaXMsICIiKSkpOwogICAgYnVmZmVyLndyaXRlKG9uTm9uTWF0Y2goIiIpKTsKICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIFN0cmluZyBzcGxpdE1hcEpvaW4oUGF0dGVybiBwYXR0ZXJuLAogICAgICB7U3RyaW5nIG9uTWF0Y2goTWF0Y2ggbWF0Y2gpLCBTdHJpbmcgb25Ob25NYXRjaChTdHJpbmcgbm9uTWF0Y2gpfSkgewogICAgaWYgKHBhdHRlcm4gaXMhIFBhdHRlcm4pIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIiR7cGF0dGVybn0gaXMgbm90IGEgUGF0dGVybiIpOwogICAgfQogICAgb25NYXRjaCA/Pz0gX21hdGNoU3RyaW5nOwogICAgb25Ob25NYXRjaCA/Pz0gX3N0cmluZ0lkZW50aXR5OwogICAgaWYgKHBhdHRlcm4gaXMgU3RyaW5nKSB7CiAgICAgIFN0cmluZyBzdHJpbmdQYXR0ZXJuID0gcGF0dGVybjsKICAgICAgaWYgKHN0cmluZ1BhdHRlcm4uaXNFbXB0eSkgewogICAgICAgIHJldHVybiBfc3BsaXRNYXBKb2luRW1wdHlTdHJpbmcob25NYXRjaCwgb25Ob25NYXRjaCk7CiAgICAgIH0KICAgIH0KICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBpbnQgc3RhcnRJbmRleCA9IDA7CiAgICBmb3IgKE1hdGNoIG1hdGNoIGluIHBhdHRlcm4uYWxsTWF0Y2hlcyh0aGlzKSkgewogICAgICBidWZmZXIud3JpdGUob25Ob25NYXRjaCh0aGlzLnN1YnN0cmluZyhzdGFydEluZGV4LCBtYXRjaC5zdGFydCkpKTsKICAgICAgYnVmZmVyLndyaXRlKG9uTWF0Y2gobWF0Y2gpLnRvU3RyaW5nKCkpOwogICAgICBzdGFydEluZGV4ID0gbWF0Y2guZW5kOwogICAgfQogICAgYnVmZmVyLndyaXRlKG9uTm9uTWF0Y2godGhpcy5zdWJzdHJpbmcoc3RhcnRJbmRleCkpKTsKICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIC8vIENvbnZlcnQgc2luZ2xlIG9iamVjdCB0byBzdHJpbmcuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgc3RhdGljIFN0cmluZyBfaW50ZXJwb2xhdGVTaW5nbGUoT2JqZWN0IG8pIHsKICAgIGlmIChvIGlzIFN0cmluZykgcmV0dXJuIG87CiAgICBmaW5hbCBzID0gby50b1N0cmluZygpOwogICAgaWYgKHMgaXMhIFN0cmluZykgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihzKTsKICAgIH0KICAgIHJldHVybiBzOwogIH0KCiAgLyoqCiAgICogQ29udmVydCBhbGwgb2JqZWN0cyBpbiBbdmFsdWVzXSB0byBzdHJpbmdzIGFuZCBjb25jYXQgdGhlbQogICAqIGludG8gYSByZXN1bHQgc3RyaW5nLgogICAqIE1vZGlmaWVzIHRoZSBpbnB1dCBsaXN0IGlmIGl0IGNvbnRhaW5zIG5vbi1gU3RyaW5nYCB2YWx1ZXMuCiAgICovCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgc3RhdGljIFN0cmluZyBfaW50ZXJwb2xhdGUoZmluYWwgTGlzdCB2YWx1ZXMpIHsKICAgIGZpbmFsIG51bVZhbHVlcyA9IHZhbHVlcy5sZW5ndGg7CiAgICBpbnQgdG90YWxMZW5ndGggPSAwOwogICAgaW50IGkgPSAwOwogICAgd2hpbGUgKGkgPCBudW1WYWx1ZXMpIHsKICAgICAgZmluYWwgZSA9IHZhbHVlc1tpXTsKICAgICAgZmluYWwgcyA9IGUudG9TdHJpbmcoKTsKICAgICAgdmFsdWVzW2ldID0gczsKICAgICAgaWYgKENsYXNzSUQuZ2V0SUQocykgPT0gQ2xhc3NJRC5jaWRPbmVCeXRlU3RyaW5nKSB7CiAgICAgICAgdG90YWxMZW5ndGggKz0gcy5sZW5ndGg7CiAgICAgICAgaSsrOwogICAgICB9IGVsc2UgaWYgKHMgaXMhIFN0cmluZykgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKHMpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIEhhbmRsZSByZW1haW5pbmcgZWxlbWVudHMgd2l0aG91dCBjaGVja2luZyBmb3Igb25lLWJ5dGUtbmVzcy4KICAgICAgICB3aGlsZSAoKytpIDwgbnVtVmFsdWVzKSB7CiAgICAgICAgICBmaW5hbCBlID0gdmFsdWVzW2ldOwogICAgICAgICAgZmluYWwgcyA9IGUudG9TdHJpbmcoKTsKICAgICAgICAgIHZhbHVlc1tpXSA9IHM7CiAgICAgICAgICBpZiAocyBpcyEgU3RyaW5nKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKHMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gX2NvbmNhdFJhbmdlTmF0aXZlKHZhbHVlcywgMCwgbnVtVmFsdWVzKTsKICAgICAgfQogICAgfQogICAgLy8gQWxsIHN0cmluZ3Mgd2VyZSBvbmUtYnl0ZSBzdHJpbmdzLgogICAgcmV0dXJuIF9PbmVCeXRlU3RyaW5nLl9jb25jYXRBbGwodmFsdWVzLCB0b3RhbExlbmd0aCk7CiAgfQoKICBJdGVyYWJsZTxNYXRjaD4gYWxsTWF0Y2hlcyhTdHJpbmcgc3RyaW5nLCBbaW50IHN0YXJ0ID0gMF0pIHsKICAgIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPiBzdHJpbmcubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKHN0YXJ0LCAwLCBzdHJpbmcubGVuZ3RoLCAic3RhcnQiKTsKICAgIH0KICAgIHJldHVybiBuZXcgX1N0cmluZ0FsbE1hdGNoZXNJdGVyYWJsZShzdHJpbmcsIHRoaXMsIHN0YXJ0KTsKICB9CgogIE1hdGNoIG1hdGNoQXNQcmVmaXgoU3RyaW5nIHN0cmluZywgW2ludCBzdGFydCA9IDBdKSB7CiAgICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID4gc3RyaW5nLmxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShzdGFydCwgMCwgc3RyaW5nLmxlbmd0aCk7CiAgICB9CiAgICBpZiAoc3RhcnQgKyB0aGlzLmxlbmd0aCA+IHN0cmluZy5sZW5ndGgpIHJldHVybiBudWxsOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChzdHJpbmcuY29kZVVuaXRBdChzdGFydCArIGkpICE9IHRoaXMuY29kZVVuaXRBdChpKSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IF9TdHJpbmdNYXRjaChzdGFydCwgc3RyaW5nLCB0aGlzKTsKICB9CgogIExpc3Q8U3RyaW5nPiBzcGxpdChQYXR0ZXJuIHBhdHRlcm4pIHsKICAgIGlmICgocGF0dGVybiBpcyBTdHJpbmcpICYmIHBhdHRlcm4uaXNFbXB0eSkgewogICAgICBMaXN0PFN0cmluZz4gcmVzdWx0ID0gbmV3IExpc3Q8U3RyaW5nPih0aGlzLmxlbmd0aCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykgewogICAgICAgIHJlc3VsdFtpXSA9IHRoaXNbaV07CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gcGF0dGVybi5hbGxNYXRjaGVzKHRoaXMpLml0ZXJhdG9yOwogICAgaWYgKGxlbmd0aCA9PSAwICYmIGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgLy8gQSBtYXRjaGVkIGVtcHR5IHN0cmluZyBpbnB1dCByZXR1cm5zIHRoZSBlbXB0eSBsaXN0LgogICAgICByZXR1cm4gPFN0cmluZz5bXTsKICAgIH0KICAgIExpc3Q8U3RyaW5nPiByZXN1bHQgPSBuZXcgTGlzdDxTdHJpbmc+KCk7CiAgICBpbnQgc3RhcnRJbmRleCA9IDA7CiAgICBpbnQgcHJldmlvdXNJbmRleCA9IDA7CiAgICAvLyAncGF0dGVybicgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZCBjb3JyZWN0bHkgYW5kIHRoZXJlZm9yZSB3ZSBjYW5ub3QKICAgIC8vIGNhbGwgX3N1YnN0cmluZ1VuaGNoZWNrZWQgdW5sZXNzIGl0IGlzIGEgdHJ1c3R3b3J0aHkgdHlwZSAoZS5nLiBTdHJpbmcpLgogICAgd2hpbGUgKHRydWUpIHsKICAgICAgaWYgKHN0YXJ0SW5kZXggPT0gbGVuZ3RoIHx8ICFpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgICAgcmVzdWx0LmFkZCh0aGlzLnN1YnN0cmluZyhwcmV2aW91c0luZGV4LCBsZW5ndGgpKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBNYXRjaCBtYXRjaCA9IGl0ZXJhdG9yLmN1cnJlbnQ7CiAgICAgIGlmIChtYXRjaC5zdGFydCA9PSBsZW5ndGgpIHsKICAgICAgICByZXN1bHQuYWRkKHRoaXMuc3Vic3RyaW5nKHByZXZpb3VzSW5kZXgsIGxlbmd0aCkpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGludCBlbmRJbmRleCA9IG1hdGNoLmVuZDsKICAgICAgaWYgKHN0YXJ0SW5kZXggPT0gZW5kSW5kZXggJiYgZW5kSW5kZXggPT0gcHJldmlvdXNJbmRleCkgewogICAgICAgICsrc3RhcnRJbmRleDsgLy8gZW1wdHkgbWF0Y2gsIGFkdmFuY2UgYW5kIHJlc3RhcnQKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICByZXN1bHQuYWRkKHRoaXMuc3Vic3RyaW5nKHByZXZpb3VzSW5kZXgsIG1hdGNoLnN0YXJ0KSk7CiAgICAgIHN0YXJ0SW5kZXggPSBwcmV2aW91c0luZGV4ID0gZW5kSW5kZXg7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgTGlzdDxpbnQ+IGdldCBjb2RlVW5pdHMgPT4gbmV3IENvZGVVbml0cyh0aGlzKTsKCiAgUnVuZXMgZ2V0IHJ1bmVzID0+IG5ldyBSdW5lcyh0aGlzKTsKCiAgU3RyaW5nIHRvVXBwZXJDYXNlKCkgbmF0aXZlICJTdHJpbmdfdG9VcHBlckNhc2UiOwoKICBTdHJpbmcgdG9Mb3dlckNhc2UoKSBuYXRpdmUgIlN0cmluZ190b0xvd2VyQ2FzZSI7CgogIC8vIENvbmNhdGVuYXRlIFsnc3RhcnQnLCAnZW5kJ1sgZWxlbWVudHMgb2YgJ3N0cmluZ3MnLgogIHN0YXRpYyBTdHJpbmcgX2NvbmNhdFJhbmdlKExpc3Q8U3RyaW5nPiBzdHJpbmdzLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIGlmICgoZW5kIC0gc3RhcnQpID09IDEpIHsKICAgICAgcmV0dXJuIHN0cmluZ3Nbc3RhcnRdOwogICAgfQogICAgcmV0dXJuIF9jb25jYXRSYW5nZU5hdGl2ZShzdHJpbmdzLCBzdGFydCwgZW5kKTsKICB9CgogIC8vIENhbGwgdGhpcyBtZXRob2QgaWYgYWxsIGVsZW1lbnRzIG9mIFtzdHJpbmdzXSBhcmUga25vd24gdG8gYmUgc3RyaW5ncwogIC8vIGJ1dCBub3QgYWxsIGFyZSBrbm93biB0byBiZSBPbmVCeXRlU3RyaW5nKHMpLgogIHN0YXRpYyBTdHJpbmcgX2NvbmNhdFJhbmdlTmF0aXZlKExpc3Qgc3RyaW5ncywgaW50IHN0YXJ0LCBpbnQgZW5kKQogICAgICBuYXRpdmUgIlN0cmluZ19jb25jYXRSYW5nZSI7Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX09uZUJ5dGVTdHJpbmcgZXh0ZW5kcyBfU3RyaW5nQmFzZSB7CiAgZmFjdG9yeSBfT25lQnl0ZVN0cmluZy5fdW5pbnN0YW50aWFibGUoKSB7IHRocm93ICJVbnJlYWNoYWJsZSI7IH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBnZXQgaGFzaENvZGUgbmF0aXZlICJTdHJpbmdfZ2V0SGFzaENvZGUiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgaW50IGNvZGVVbml0QXQoaW50IGluZGV4KSBuYXRpdmUgIlN0cmluZ19jb2RlVW5pdEF0IjsKCiAgYm9vbCBfaXNXaGl0ZXNwYWNlKGludCBjb2RlVW5pdCkgewogICAgcmV0dXJuIF9TdHJpbmdCYXNlLl9pc09uZUJ5dGVXaGl0ZXNwYWNlKGNvZGVVbml0KTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgewogICAgcmV0dXJuIHN1cGVyID09IG90aGVyOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfT25lQnl0ZVN0cmluZykKICBTdHJpbmcgX3N1YnN0cmluZ1VuY2hlY2tlZE5hdGl2ZShpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4KQogICAgICBuYXRpdmUgIk9uZUJ5dGVTdHJpbmdfc3Vic3RyaW5nVW5jaGVja2VkIjsKCiAgTGlzdDxTdHJpbmc+IF9zcGxpdFdpdGhDaGFyQ29kZShpbnQgY2hhckNvZGUpCiAgICAgIG5hdGl2ZSAiT25lQnl0ZVN0cmluZ19zcGxpdFdpdGhDaGFyQ29kZSI7CgogIExpc3Q8U3RyaW5nPiBzcGxpdChQYXR0ZXJuIHBhdHRlcm4pIHsKICAgIC8vIFRPRE8odmVnb3JvdikgaW52ZXN0aWdhdGUgaWYgdGhpcyBjYW4gYmUgcmV3cml0dGVuIGFzIGBpcyBfT25lQnl0ZVN0cmluZ2AKICAgIC8vIGNoZWNrIHdpdGhvdXQgcGVyZm9ybWFuY2UgcGVuYWx0eS4gRnJvbnQtZW5kIHdvdWxkIHRoZW4gcHJvbW90ZQogICAgLy8gcGF0dGVybiB2YXJpYWJsZSB0byBfT25lQnl0ZVN0cmluZy4KICAgIGlmIChDbGFzc0lELmdldElEKHBhdHRlcm4pID09IENsYXNzSUQuY2lkT25lQnl0ZVN0cmluZykgewogICAgICBmaW5hbCBTdHJpbmcgcGF0dGVybkFzU3RyaW5nID0gcGF0dGVybjsKICAgICAgaWYgKHBhdHRlcm5Bc1N0cmluZy5sZW5ndGggPT0gMSkgewogICAgICAgIHJldHVybiBfc3BsaXRXaXRoQ2hhckNvZGUocGF0dGVybkFzU3RyaW5nLmNvZGVVbml0QXQoMCkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3VwZXIuc3BsaXQocGF0dGVybik7CiAgfQoKICAvLyBBbGwgZWxlbWVudCBvZiAnc3RyaW5ncycgbXVzdCBiZSBPbmVCeXRlU3RyaW5ncy4KICBzdGF0aWMgX2NvbmNhdEFsbChMaXN0IHN0cmluZ3MsIGludCB0b3RhbExlbmd0aCkgewogICAgaWYgKHRvdGFsTGVuZ3RoID4gMTI4KSB7CiAgICAgIC8vIE5hdGl2ZSBpcyBxdWlja2VyLgogICAgICByZXR1cm4gX1N0cmluZ0Jhc2UuX2NvbmNhdFJhbmdlTmF0aXZlKHN0cmluZ3MsIDAsIHN0cmluZ3MubGVuZ3RoKTsKICAgIH0KICAgIGZpbmFsIHJlcyA9IF9PbmVCeXRlU3RyaW5nLl9hbGxvY2F0ZSh0b3RhbExlbmd0aCk7CiAgICBmaW5hbCBzdHJpbmdzTGVuZ3RoID0gc3RyaW5ncy5sZW5ndGg7CiAgICBpbnQgckl4ID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyaW5nc0xlbmd0aDsgaSsrKSB7CiAgICAgIGZpbmFsIF9PbmVCeXRlU3RyaW5nIGUgPSBzdHJpbmdzW2ldOwogICAgICBmaW5hbCBlTGVuZ3RoID0gZS5sZW5ndGg7CiAgICAgIGZvciAoaW50IHMgPSAwOyBzIDwgZUxlbmd0aDsgcysrKSB7CiAgICAgICAgcmVzLl9zZXRBdChySXgrKywgZS5jb2RlVW5pdEF0KHMpKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlczsKICB9CgogIGludCBpbmRleE9mKFBhdHRlcm4gcGF0dGVybiwgW2ludCBzdGFydCA9IDBdKSB7CiAgICAvLyBTcGVjaWFsaXplIGZvciBzaW5nbGUgY2hhcmFjdGVyIHBhdHRlcm4uCiAgICBmaW5hbCBwQ2lkID0gQ2xhc3NJRC5nZXRJRChwYXR0ZXJuKTsKICAgIGlmICgocENpZCA9PSBDbGFzc0lELmNpZE9uZUJ5dGVTdHJpbmcpIHx8CiAgICAgICAgKHBDaWQgPT0gQ2xhc3NJRC5jaWRUd29CeXRlU3RyaW5nKSB8fAogICAgICAgIChwQ2lkID09IENsYXNzSUQuY2lkRXh0ZXJuYWxPbmVCeXRlU3RyaW5nKSkgewogICAgICBmaW5hbCBTdHJpbmcgcGF0dGVybkFzU3RyaW5nID0gcGF0dGVybjsKICAgICAgZmluYWwgbGVuID0gdGhpcy5sZW5ndGg7CiAgICAgIGlmICgocGF0dGVybkFzU3RyaW5nLmxlbmd0aCA9PSAxKSAmJiAoc3RhcnQgPj0gMCkgJiYgKHN0YXJ0IDwgbGVuKSkgewogICAgICAgIGZpbmFsIHBhdHRlcm5DdTAgPSBwYXR0ZXJuQXNTdHJpbmcuY29kZVVuaXRBdCgwKTsKICAgICAgICBpZiAocGF0dGVybkN1MCA+IDB4RkYpIHsKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgIGlmICh0aGlzLmNvZGVVbml0QXQoaSkgPT0gcGF0dGVybkN1MCkgewogICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIC0xOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3VwZXIuaW5kZXhPZihwYXR0ZXJuLCBzdGFydCk7CiAgfQoKICBib29sIGNvbnRhaW5zKFBhdHRlcm4gcGF0dGVybiwgW2ludCBzdGFydCA9IDBdKSB7CiAgICBmaW5hbCBwQ2lkID0gQ2xhc3NJRC5nZXRJRChwYXR0ZXJuKTsKICAgIGlmICgocENpZCA9PSBDbGFzc0lELmNpZE9uZUJ5dGVTdHJpbmcpIHx8CiAgICAgICAgKHBDaWQgPT0gQ2xhc3NJRC5jaWRUd29CeXRlU3RyaW5nKSB8fAogICAgICAgIChwQ2lkID09IENsYXNzSUQuY2lkRXh0ZXJuYWxPbmVCeXRlU3RyaW5nKSkgewogICAgICBmaW5hbCBTdHJpbmcgcGF0dGVybkFzU3RyaW5nID0gcGF0dGVybjsKICAgICAgZmluYWwgbGVuID0gdGhpcy5sZW5ndGg7CiAgICAgIGlmICgocGF0dGVybkFzU3RyaW5nLmxlbmd0aCA9PSAxKSAmJiAoc3RhcnQgPj0gMCkgJiYgKHN0YXJ0IDwgbGVuKSkgewogICAgICAgIGZpbmFsIHBhdHRlcm5DdTAgPSBwYXR0ZXJuQXNTdHJpbmcuY29kZVVuaXRBdCgwKTsKICAgICAgICBpZiAocGF0dGVybkN1MCA+IDB4RkYpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgIGlmICh0aGlzLmNvZGVVbml0QXQoaSkgPT0gcGF0dGVybkN1MCkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3VwZXIuY29udGFpbnMocGF0dGVybiwgc3RhcnQpOwogIH0KCiAgU3RyaW5nIG9wZXJhdG9yICooaW50IHRpbWVzKSB7CiAgICBpZiAodGltZXMgPD0gMCkgcmV0dXJuICIiOwogICAgaWYgKHRpbWVzID09IDEpIHJldHVybiB0aGlzOwogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgaWYgKHRoaXMuaXNFbXB0eSkgcmV0dXJuIHRoaXM7IC8vIERvbid0IGNsb25lIGVtcHR5IHN0cmluZy4KICAgIF9PbmVCeXRlU3RyaW5nIHJlc3VsdCA9IF9PbmVCeXRlU3RyaW5nLl9hbGxvY2F0ZShsZW5ndGggKiB0aW1lcyk7CiAgICBpbnQgaW5kZXggPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aW1lczsgaSsrKSB7CiAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspIHsKICAgICAgICByZXN1bHQuX3NldEF0KGluZGV4KyssIHRoaXMuY29kZVVuaXRBdChqKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBTdHJpbmcgcGFkTGVmdChpbnQgd2lkdGgsIFtTdHJpbmcgcGFkZGluZyA9ICcgJ10pIHsKICAgIGludCBwYWRDaWQgPSBDbGFzc0lELmdldElEKHBhZGRpbmcpOwogICAgaWYgKChwYWRDaWQgIT0gQ2xhc3NJRC5jaWRPbmVCeXRlU3RyaW5nKSAmJgogICAgICAgIChwYWRDaWQgIT0gQ2xhc3NJRC5jaWRFeHRlcm5hbE9uZUJ5dGVTdHJpbmcpKSB7CiAgICAgIHJldHVybiBzdXBlci5wYWRMZWZ0KHdpZHRoLCBwYWRkaW5nKTsKICAgIH0KICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGludCBkZWx0YSA9IHdpZHRoIC0gbGVuZ3RoOwogICAgaWYgKGRlbHRhIDw9IDApIHJldHVybiB0aGlzOwogICAgaW50IHBhZExlbmd0aCA9IHBhZGRpbmcubGVuZ3RoOwogICAgaW50IHJlc3VsdExlbmd0aCA9IHBhZExlbmd0aCAqIGRlbHRhICsgbGVuZ3RoOwogICAgX09uZUJ5dGVTdHJpbmcgcmVzdWx0ID0gX09uZUJ5dGVTdHJpbmcuX2FsbG9jYXRlKHJlc3VsdExlbmd0aCk7CiAgICBpbnQgaW5kZXggPSAwOwogICAgaWYgKHBhZExlbmd0aCA9PSAxKSB7CiAgICAgIGludCBwYWRDaGFyID0gcGFkZGluZy5jb2RlVW5pdEF0KDApOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlbHRhOyBpKyspIHsKICAgICAgICByZXN1bHQuX3NldEF0KGluZGV4KyssIHBhZENoYXIpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlbHRhOyBpKyspIHsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHBhZExlbmd0aDsgaisrKSB7CiAgICAgICAgICByZXN1bHQuX3NldEF0KGluZGV4KyssIHBhZGRpbmcuY29kZVVuaXRBdChqKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHJlc3VsdC5fc2V0QXQoaW5kZXgrKywgdGhpcy5jb2RlVW5pdEF0KGkpKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBTdHJpbmcgcGFkUmlnaHQoaW50IHdpZHRoLCBbU3RyaW5nIHBhZGRpbmcgPSAnICddKSB7CiAgICBpbnQgcGFkQ2lkID0gQ2xhc3NJRC5nZXRJRChwYWRkaW5nKTsKICAgIGlmICgocGFkQ2lkICE9IENsYXNzSUQuY2lkT25lQnl0ZVN0cmluZykgJiYKICAgICAgICAocGFkQ2lkICE9IENsYXNzSUQuY2lkRXh0ZXJuYWxPbmVCeXRlU3RyaW5nKSkgewogICAgICByZXR1cm4gc3VwZXIucGFkUmlnaHQod2lkdGgsIHBhZGRpbmcpOwogICAgfQogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgaW50IGRlbHRhID0gd2lkdGggLSBsZW5ndGg7CiAgICBpZiAoZGVsdGEgPD0gMCkgcmV0dXJuIHRoaXM7CiAgICBpbnQgcGFkTGVuZ3RoID0gcGFkZGluZy5sZW5ndGg7CiAgICBpbnQgcmVzdWx0TGVuZ3RoID0gbGVuZ3RoICsgcGFkTGVuZ3RoICogZGVsdGE7CiAgICBfT25lQnl0ZVN0cmluZyByZXN1bHQgPSBfT25lQnl0ZVN0cmluZy5fYWxsb2NhdGUocmVzdWx0TGVuZ3RoKTsKICAgIGludCBpbmRleCA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHJlc3VsdC5fc2V0QXQoaW5kZXgrKywgdGhpcy5jb2RlVW5pdEF0KGkpKTsKICAgIH0KICAgIGlmIChwYWRMZW5ndGggPT0gMSkgewogICAgICBpbnQgcGFkQ2hhciA9IHBhZGRpbmcuY29kZVVuaXRBdCgwKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWx0YTsgaSsrKSB7CiAgICAgICAgcmVzdWx0Ll9zZXRBdChpbmRleCsrLCBwYWRDaGFyKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWx0YTsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBwYWRMZW5ndGg7IGorKykgewogICAgICAgICAgcmVzdWx0Ll9zZXRBdChpbmRleCsrLCBwYWRkaW5nLmNvZGVVbml0QXQoaikpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIExvd2VyLWNhc2UgY29udmVyc2lvbiB0YWJsZSBmb3IgTGF0aW4tMSBhcyBzdHJpbmcuCiAgLy8gVXBwZXItY2FzZSByYW5nZXM6IDB4NDEtMHg1YSAoJ0EnIC0gJ1onKSwgMHhjMC0weGQ2LCAweGQ4LTB4ZGUuCiAgLy8gQ29udmVyc2lvbiB0byBsb3dlciBjYXNlIHBlcmZvcm1lZCBieSBhZGRpbmcgMHgyMC4KICBzdGF0aWMgY29uc3QgX0xDX1RBQkxFID0KICAgICAgIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiCiAgICAgICJceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmIgogICAgICAiXHgyMFx4MjFceDIyXHgyM1x4MjRceDI1XHgyNlx4MjdceDI4XHgyOVx4MmFceDJiXHgyY1x4MmRceDJlXHgyZiIKICAgICAgIlx4MzBceDMxXHgzMlx4MzNceDM0XHgzNVx4MzZceDM3XHgzOFx4MzlceDNhXHgzYlx4M2NceDNkXHgzZVx4M2YiCiAgICAgICJceDQwXHg2MVx4NjJceDYzXHg2NFx4NjVceDY2XHg2N1x4NjhceDY5XHg2YVx4NmJceDZjXHg2ZFx4NmVceDZmIgogICAgICAiXHg3MFx4NzFceDcyXHg3M1x4NzRceDc1XHg3Nlx4NzdceDc4XHg3OVx4N2FceDViXHg1Y1x4NWRceDVlXHg1ZiIKICAgICAgIlx4NjBceDYxXHg2Mlx4NjNceDY0XHg2NVx4NjZceDY3XHg2OFx4NjlceDZhXHg2Ylx4NmNceDZkXHg2ZVx4NmYiCiAgICAgICJceDcwXHg3MVx4NzJceDczXHg3NFx4NzVceDc2XHg3N1x4NzhceDc5XHg3YVx4N2JceDdjXHg3ZFx4N2VceDdmIgogICAgICAiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4ZiIKICAgICAgIlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWYiCiAgICAgICJceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmIgogICAgICAiXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZiIKICAgICAgIlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWYiCiAgICAgICJceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhkN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGRmIgogICAgICAiXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZiIKICAgICAgIlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYiOwoKICAvLyBVcHBlci1jYXNlIGNvbnZlcnNpb24gdGFibGUgZm9yIExhdGluLTEgYXMgc3RyaW5nLgogIC8vIExvd2VyLWNhc2UgcmFuZ2VzOiAweDYxLTB4N2EgKCdhJyAtICd6JyksIDB4ZTAtMHhmZi4KICAvLyBUaGUgY2hhcmFjdGVycyAweGI1ICjCtSkgYW5kIDB4ZmYgKMO/KSBoYXZlIHVwcGVyIGNhc2UgdmFyaWFudHMKICAvLyB0aGF0IGFyZSBub3QgTGF0aW4tMS4gVGhlc2UgYXJlIGJvdGggbWFya2VkIGFzIDB4MDAgaW4gdGhlIHRhYmxlLgogIC8vIFRoZSBHZXJtYW4gInNoYXJwIHMiIFx4ZGYgKMOfKSBzaG91bGQgYmUgY29udmVydGVkIGludG8gdHdvIGNoYXJhY3RlcnMgKFNTKSwKICAvLyBhbmQgaXMgYWxzbyBtYXJrZWQgd2l0aCAweDAwLgogIC8vIENvbnZlcnNpb24gdG8gbG93ZXIgY2FzZSBwZXJmb3JtZWQgYnkgc3VidHJhY3RpbmcgMHgyMC4KICBzdGF0aWMgY29uc3QgX1VDX1RBQkxFID0KICAgICAgIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiCiAgICAgICJceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmIgogICAgICAiXHgyMFx4MjFceDIyXHgyM1x4MjRceDI1XHgyNlx4MjdceDI4XHgyOVx4MmFceDJiXHgyY1x4MmRceDJlXHgyZiIKICAgICAgIlx4MzBceDMxXHgzMlx4MzNceDM0XHgzNVx4MzZceDM3XHgzOFx4MzlceDNhXHgzYlx4M2NceDNkXHgzZVx4M2YiCiAgICAgICJceDQwXHg0MVx4NDJceDQzXHg0NFx4NDVceDQ2XHg0N1x4NDhceDQ5XHg0YVx4NGJceDRjXHg0ZFx4NGVceDRmIgogICAgICAiXHg1MFx4NTFceDUyXHg1M1x4NTRceDU1XHg1Nlx4NTdceDU4XHg1OVx4NWFceDViXHg1Y1x4NWRceDVlXHg1ZiIKICAgICAgIlx4NjBceDQxXHg0Mlx4NDNceDQ0XHg0NVx4NDZceDQ3XHg0OFx4NDlceDRhXHg0Ylx4NGNceDRkXHg0ZVx4NGYiCiAgICAgICJceDUwXHg1MVx4NTJceDUzXHg1NFx4NTVceDU2XHg1N1x4NThceDU5XHg1YVx4N2JceDdjXHg3ZFx4N2VceDdmIgogICAgICAiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4ZiIKICAgICAgIlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWYiCiAgICAgICJceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmIgogICAgICAiXHhiMFx4YjFceGIyXHhiM1x4YjRceDAwXHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZiIKICAgICAgIlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2YiCiAgICAgICJceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceDAwIgogICAgICAiXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZiIKICAgICAgIlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGY3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4MDAiOwoKICBTdHJpbmcgdG9Mb3dlckNhc2UoKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHsKICAgICAgZmluYWwgYyA9IHRoaXMuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGMgPT0gX0xDX1RBQkxFLmNvZGVVbml0QXQoYykpIGNvbnRpbnVlOwogICAgICAvLyBVcHBlci1jYXNlIGNoYXJhY3RlciBmb3VuZC4KICAgICAgZmluYWwgcmVzdWx0ID0gX2FsbG9jYXRlKHRoaXMubGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBpOyBqKyspIHsKICAgICAgICByZXN1bHQuX3NldEF0KGosIHRoaXMuY29kZVVuaXRBdChqKSk7CiAgICAgIH0KICAgICAgZm9yIChpbnQgaiA9IGk7IGogPCB0aGlzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgcmVzdWx0Ll9zZXRBdChqLCBfTENfVEFCTEUuY29kZVVuaXRBdCh0aGlzLmNvZGVVbml0QXQoaikpKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgcmV0dXJuIHRoaXM7CiAgfQoKICBTdHJpbmcgdG9VcHBlckNhc2UoKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHsKICAgICAgZmluYWwgYyA9IHRoaXMuY29kZVVuaXRBdChpKTsKICAgICAgLy8gQ29udGludWUgbG9vcCBpZiBjaGFyYWN0ZXIgaXMgdW5jaGFuZ2VkIGJ5IHVwcGVyLWNhc2UgY29udmVyc2lvbi4KICAgICAgaWYgKGMgPT0gX1VDX1RBQkxFLmNvZGVVbml0QXQoYykpIGNvbnRpbnVlOwoKICAgICAgLy8gQ2hlY2sgcmVzdCBvZiBzdHJpbmcgZm9yIGNoYXJhY3RlcnMgdGhhdCBkbyBub3QgY29udmVydCB0bwogICAgICAvLyBzaW5nbGUtY2hhcmFjdGVycyBpbiB0aGUgTGF0aW4tMSByYW5nZS4KICAgICAgZm9yIChpbnQgaiA9IGk7IGogPCB0aGlzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgZmluYWwgYyA9IHRoaXMuY29kZVVuaXRBdChqKTsKICAgICAgICBpZiAoKF9VQ19UQUJMRS5jb2RlVW5pdEF0KGMpID09IDB4MDApICYmIChjICE9IDB4MDApKSB7CiAgICAgICAgICAvLyBXZSB1c2UgdGhlIDB4MDAgdmFsdWUgZm9yIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiB0aGUgbnVsbCBjaGFyYWN0ZXIsCiAgICAgICAgICAvLyB0aGF0IGRvbid0IGNvbnZlcnQgdG8gYSBzaW5nbGUgTGF0aW4tMSBjaGFyYWN0ZXIgd2hlbiB1cHBlci1jYXNlZC4KICAgICAgICAgIC8vIEluIHRoYXQgY2FzZSwgY2FsbCB0aGUgZ2VuZXJpYyBzdXBlci1jbGFzcyBtZXRob2QuCiAgICAgICAgICByZXR1cm4gc3VwZXIudG9VcHBlckNhc2UoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gU29tZSBsb3dlci1jYXNlIGNoYXJhY3RlcnMgZm91bmQsIGJ1dCBhbGwgdXBwZXItY2FzZSB0byBzaW5nbGUgTGF0aW4tMQogICAgICAvLyBjaGFyYWN0ZXJzLgogICAgICBmaW5hbCByZXN1bHQgPSBfYWxsb2NhdGUodGhpcy5sZW5ndGgpOwogICAgICBmb3IgKGludCBqID0gMDsgaiA8IGk7IGorKykgewogICAgICAgIHJlc3VsdC5fc2V0QXQoaiwgdGhpcy5jb2RlVW5pdEF0KGopKTsKICAgICAgfQogICAgICBmb3IgKGludCBqID0gaTsgaiA8IHRoaXMubGVuZ3RoOyBqKyspIHsKICAgICAgICByZXN1bHQuX3NldEF0KGosIF9VQ19UQUJMRS5jb2RlVW5pdEF0KHRoaXMuY29kZVVuaXRBdChqKSkpOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8vIEFsbG9jYXRlcyBhIHN0cmluZyBvZiBnaXZlbiBsZW5ndGgsIGV4cGVjdGluZyBpdHMgY29udGVudCB0byBiZQogIC8vIHNldCB1c2luZyBfc2V0QXQuCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfT25lQnl0ZVN0cmluZykKICBzdGF0aWMgX09uZUJ5dGVTdHJpbmcgX2FsbG9jYXRlKGludCBsZW5ndGgpIG5hdGl2ZSAiT25lQnl0ZVN0cmluZ19hbGxvY2F0ZSI7CgogIHN0YXRpYyBfT25lQnl0ZVN0cmluZyBfYWxsb2NhdGVGcm9tT25lQnl0ZUxpc3QoTGlzdDxpbnQ+IGxpc3QsIGludCBzdGFydCwKICAgICAgaW50IGVuZCkgbmF0aXZlICJPbmVCeXRlU3RyaW5nX2FsbG9jYXRlRnJvbU9uZUJ5dGVMaXN0IjsKCiAgLy8gVGhpcyBpcyBpbnRlcm5hbCBoZWxwZXIgbWV0aG9kLiBDb2RlIHBvaW50IHZhbHVlIG11c3QgYmUgYSB2YWxpZAogIC8vIExhdGluMSB2YWx1ZSAoMC4uMHhGRiksIGluZGV4IG11c3QgYmUgdmFsaWQuCiAgdm9pZCBfc2V0QXQoaW50IGluZGV4LCBpbnQgY29kZVBvaW50KSBuYXRpdmUgIk9uZUJ5dGVTdHJpbmdfc2V0QXQiOwoKICAvLyBTaG91bGQgYmUgb3B0aW1pemFibGUgdG8gYSBtZW1vcnkgbW92ZS4KICAvLyBBY2NlcHRzIGJvdGggX09uZUJ5dGVTdHJpbmcgYW5kIF9FeHRlcm5hbE9uZUJ5dGVTdHJpbmcgYXMgYXJndW1lbnQuCiAgLy8gUmV0dXJucyBpbmRleCBhZnRlciBsYXN0IGNoYXJhY3RlciB3cml0dGVuLgogIGludCBfc2V0UmFuZ2UoaW50IGluZGV4LCBTdHJpbmcgb25lQnl0ZVN0cmluZywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBhc3NlcnQob25lQnl0ZVN0cmluZy5faXNPbmVCeXRlKTsKICAgIGFzc2VydCgwIDw9IHN0YXJ0KTsKICAgIGFzc2VydChzdGFydCA8PSBlbmQpOwogICAgYXNzZXJ0KGVuZCA8PSBvbmVCeXRlU3RyaW5nLmxlbmd0aCk7CiAgICBhc3NlcnQoMCA8PSBpbmRleCk7CiAgICBhc3NlcnQoaW5kZXggKyAoZW5kIC0gc3RhcnQpIDw9IGxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICBfc2V0QXQoaW5kZXgsIG9uZUJ5dGVTdHJpbmcuY29kZVVuaXRBdChpKSk7CiAgICAgIGluZGV4ICs9IDE7CiAgICB9CiAgICByZXR1cm4gaW5kZXg7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9Ud29CeXRlU3RyaW5nIGV4dGVuZHMgX1N0cmluZ0Jhc2UgewogIGZhY3RvcnkgX1R3b0J5dGVTdHJpbmcuX3VuaW5zdGFudGlhYmxlKCkgeyB0aHJvdyAiVW5yZWFjaGFibGUiOyB9CgogIHN0YXRpYyBTdHJpbmcgX2FsbG9jYXRlRnJvbVR3b0J5dGVMaXN0KExpc3Q8aW50PiBsaXN0LCBpbnQgc3RhcnQsIGludCBlbmQpCiAgICAgIG5hdGl2ZSAiVHdvQnl0ZVN0cmluZ19hbGxvY2F0ZUZyb21Ud29CeXRlTGlzdCI7CgogIGJvb2wgX2lzV2hpdGVzcGFjZShpbnQgY29kZVVuaXQpIHsKICAgIHJldHVybiBfU3RyaW5nQmFzZS5faXNUd29CeXRlV2hpdGVzcGFjZShjb2RlVW5pdCk7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgaW50IGNvZGVVbml0QXQoaW50IGluZGV4KSBuYXRpdmUgIlN0cmluZ19jb2RlVW5pdEF0IjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICByZXR1cm4gc3VwZXIgPT0gb3RoZXI7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9FeHRlcm5hbE9uZUJ5dGVTdHJpbmcgZXh0ZW5kcyBfU3RyaW5nQmFzZSB7CiAgZmFjdG9yeSBfRXh0ZXJuYWxPbmVCeXRlU3RyaW5nLl91bmluc3RhbnRpYWJsZSgpIHsgdGhyb3cgIlVucmVhY2hhYmxlIjsgfQoKICBib29sIF9pc1doaXRlc3BhY2UoaW50IGNvZGVVbml0KSB7CiAgICByZXR1cm4gX1N0cmluZ0Jhc2UuX2lzT25lQnl0ZVdoaXRlc3BhY2UoY29kZVVuaXQpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBjb2RlVW5pdEF0KGludCBpbmRleCkgbmF0aXZlICJTdHJpbmdfY29kZVVuaXRBdCI7CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICByZXR1cm4gc3VwZXIgPT0gb3RoZXI7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9FeHRlcm5hbFR3b0J5dGVTdHJpbmcgZXh0ZW5kcyBfU3RyaW5nQmFzZSB7CiAgZmFjdG9yeSBfRXh0ZXJuYWxUd29CeXRlU3RyaW5nLl91bmluc3RhbnRpYWJsZSgpIHsgdGhyb3cgIlVucmVhY2hhYmxlIjsgfQoKICBib29sIF9pc1doaXRlc3BhY2UoaW50IGNvZGVVbml0KSB7CiAgICByZXR1cm4gX1N0cmluZ0Jhc2UuX2lzVHdvQnl0ZVdoaXRlc3BhY2UoY29kZVVuaXQpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBjb2RlVW5pdEF0KGludCBpbmRleCkgbmF0aXZlICJTdHJpbmdfY29kZVVuaXRBdCI7CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICByZXR1cm4gc3VwZXIgPT0gb3RoZXI7CiAgfQp9CgpjbGFzcyBfU3RyaW5nTWF0Y2ggaW1wbGVtZW50cyBNYXRjaCB7CiAgY29uc3QgX1N0cmluZ01hdGNoKHRoaXMuc3RhcnQsIHRoaXMuaW5wdXQsIHRoaXMucGF0dGVybik7CgogIGludCBnZXQgZW5kID0+IHN0YXJ0ICsgcGF0dGVybi5sZW5ndGg7CiAgU3RyaW5nIG9wZXJhdG9yIFtdKGludCBnKSA9PiBncm91cChnKTsKICBpbnQgZ2V0IGdyb3VwQ291bnQgPT4gMDsKCiAgU3RyaW5nIGdyb3VwKGludCBncm91cCkgewogICAgaWYgKGdyb3VwICE9IDApIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IudmFsdWUoZ3JvdXApOwogICAgfQogICAgcmV0dXJuIHBhdHRlcm47CiAgfQoKICBMaXN0PFN0cmluZz4gZ3JvdXBzKExpc3Q8aW50PiBncm91cHMpIHsKICAgIExpc3Q8U3RyaW5nPiByZXN1bHQgPSBuZXcgTGlzdDxTdHJpbmc+KCk7CiAgICBmb3IgKGludCBnIGluIGdyb3VwcykgewogICAgICByZXN1bHQuYWRkKGdyb3VwKGcpKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBmaW5hbCBpbnQgc3RhcnQ7CiAgZmluYWwgU3RyaW5nIGlucHV0OwogIGZpbmFsIFN0cmluZyBwYXR0ZXJuOwp9CgpjbGFzcyBfU3RyaW5nQWxsTWF0Y2hlc0l0ZXJhYmxlIGV4dGVuZHMgSXRlcmFibGU8TWF0Y2g+IHsKICBmaW5hbCBTdHJpbmcgX2lucHV0OwogIGZpbmFsIFN0cmluZyBfcGF0dGVybjsKICBmaW5hbCBpbnQgX2luZGV4OwoKICBfU3RyaW5nQWxsTWF0Y2hlc0l0ZXJhYmxlKHRoaXMuX2lucHV0LCB0aGlzLl9wYXR0ZXJuLCB0aGlzLl9pbmRleCk7CgogIEl0ZXJhdG9yPE1hdGNoPiBnZXQgaXRlcmF0b3IgPT4KICAgICAgbmV3IF9TdHJpbmdBbGxNYXRjaGVzSXRlcmF0b3IoX2lucHV0LCBfcGF0dGVybiwgX2luZGV4KTsKCiAgTWF0Y2ggZ2V0IGZpcnN0IHsKICAgIGludCBpbmRleCA9IF9pbnB1dC5pbmRleE9mKF9wYXR0ZXJuLCBfaW5kZXgpOwogICAgaWYgKGluZGV4ID49IDApIHsKICAgICAgcmV0dXJuIG5ldyBfU3RyaW5nTWF0Y2goaW5kZXgsIF9pbnB1dCwgX3BhdHRlcm4pOwogICAgfQogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQp9CgpjbGFzcyBfU3RyaW5nQWxsTWF0Y2hlc0l0ZXJhdG9yIGltcGxlbWVudHMgSXRlcmF0b3I8TWF0Y2g+IHsKICBmaW5hbCBTdHJpbmcgX2lucHV0OwogIGZpbmFsIFN0cmluZyBfcGF0dGVybjsKICBpbnQgX2luZGV4OwogIE1hdGNoIF9jdXJyZW50OwoKICBfU3RyaW5nQWxsTWF0Y2hlc0l0ZXJhdG9yKHRo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AUUXMk8BTD8BRjJGAS1JMUcmGBopGC0oMhIGEgQCARorRAFNNgElNwQBNDgBKCMbBAIBGjNMASU3BAE0OAEjGwQCARozTAElNwQBNDgBIxsEAgEmPAEpKRsBHBYpBhQEASouHBwGEwQBExYYAgE6FxkUAUYBIj8BFDIWOAYsBAIBPRcZDhIBRgEUNBcUBjIVIhcUBic6OB4SEQQBIQIBIWRhcnQ6Y29yZS1wYXRjaC9zdHJpbmdfcGF0Y2guZGFydC9vcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL3R5cGVfcGF0Y2guZGFydIQnLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgovLyBUaGVzZSBEYXJ0IGNsYXNzZXMgY29ycmVzcG9uZCB0byB0aGUgVk0gaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gY2xhc3Nlcy4KCi8vIEVxdWl2YWxlbnQgb2YgUmF3QWJzdHJhY3RUeXBlLgphYnN0cmFjdCBjbGFzcyBfQWJzdHJhY3RUeXBlIGltcGxlbWVudHMgVHlwZSB7CiAgU3RyaW5nIHRvU3RyaW5nKCkgbmF0aXZlICJBYnN0cmFjdFR5cGVfdG9TdHJpbmciOwp9CgovLyBFcXVpdmFsZW50IG9mIFJhd1R5cGUuCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1R5cGUgZXh0ZW5kcyBfQWJzdHJhY3RUeXBlIHsKICBmYWN0b3J5IF9UeXBlLl91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgaW50IGdldCBoYXNoQ29kZSBuYXRpdmUgIlR5cGVfZ2V0SGFzaENvZGUiOwp9CgovLyBFcXVpdmFsZW50IG9mIFJhd1R5cGVSZWYuCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1R5cGVSZWYgZXh0ZW5kcyBfQWJzdHJhY3RUeXBlIHsKICBmYWN0b3J5IF9UeXBlUmVmLl91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQp9CgovLyBFcXVpdmFsZW50IG9mIFJhd1R5cGVQYXJhbWV0ZXIuCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1R5cGVQYXJhbWV0ZXIgZXh0ZW5kcyBfQWJzdHJhY3RUeXBlIHsKICBmYWN0b3J5IF9UeXBlUGFyYW1ldGVyLl91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQp9CikATk48AR4BTAEiLzQCARoaJCQZBAE0LgIBHRonJxkEAgEjGi0tGQQCAR9kYXJ0OmNvcmUtcGF0Y2gvdHlwZV9wYXRjaC5kYXJ0Mm9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvd2Vha19wcm9wZXJ0eS5kYXJ0gpAvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1dlYWtQcm9wZXJ0eSB7CiAgZmFjdG9yeSBfV2Vha1Byb3BlcnR5KGtleSwgdmFsdWUpID0+IF9uZXcoa2V5LCB2YWx1ZSk7CgogIGdldCBrZXkgPT4gX2dldEtleSgpOwogIGdldCB2YWx1ZSA9PiBfZ2V0VmFsdWUoKTsKICBzZXQgdmFsdWUodmFsdWUpID0+IF9zZXRWYWx1ZSh2YWx1ZSk7CgogIHN0YXRpYyBfV2Vha1Byb3BlcnR5IF9uZXcoa2V5LCB2YWx1ZSkgbmF0aXZlICJXZWFrUHJvcGVydHlfbmV3IjsKCiAgX2dldEtleSgpIG5hdGl2ZSAiV2Vha1Byb3BlcnR5X2dldEtleSI7CiAgX2dldFZhbHVlKCkgbmF0aXZlICJXZWFrUHJvcGVydHlfZ2V0VmFsdWUiOwogIF9zZXRWYWx1ZSh2YWx1ZSkgbmF0aXZlICJXZWFrUHJvcGVydHlfc2V0VmFsdWUiOwp9ChYATk48AR4BGhY5ARgcKAFDASouMwIBImRhcnQ6Y29yZS1wYXRjaC93ZWFrX3Byb3BlcnR5LmRhcnQxb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvYW5ub3RhdGlvbnMuZGFydKNzLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIFRoZSBhbm5vdGF0aW9uIGBARGVwcmVjYXRlZCgnbWlncmF0aW9uJylgIG1hcmtzIGEgZmVhdHVyZSBhcyBkZXByZWNhdGVkLgogKgogKiBUaGUgYW5ub3RhdGlvbiBbZGVwcmVjYXRlZF0gaXMgYSBzaG9ydGhhbmQgZm9yIGRlcHJlY2F0aW5nIHVudGlsCiAqIGFuIHVuc3BlY2lmaWVkICJuZXh0IHJlbGVhc2UiIHdpdGhvdXQgbWlncmF0aW9uIGluc3RydWN0aW9ucy4KICoKICogVGhlIGludGVudCBvZiB0aGUgYEBEZXByZWNhdGVkYCBhbm5vdGF0aW9uIGlzIHRvIGluZm9ybSB1c2VycyBvZiBhIGZlYXR1cmUKICogdGhhdCB0aGV5IHNob3VsZCBjaGFuZ2UgdGhlaXIgY29kZSwgZXZlbiBpZiBpdCBpcyBjdXJyZW50bHkgc3RpbGwgd29ya2luZwogKiBjb3JyZWN0bHkuCiAqCiAqIEEgZGVwcmVjYXRlZCBmZWF0dXJlIGlzIHNjaGVkdWxlZCB0byBiZSByZW1vdmVkIGF0IGEgbGF0ZXIgdGltZSwgcG9zc2libHkKICogc3BlY2lmaWVkIGluIFttZXNzYWdlXS4gQSBkZXByZWNhdGVkIGZlYXR1cmUgc2hvdWxkIG5vdCBiZSB1c2VkLCBjb2RlIHVzaW5nCiAqIGl0IHdpbGwgYnJlYWsgYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLiBJZiBleGlzdGluZyBjb2RlIGlzIHVzaW5nIHRoZQogKiBmZWF0dXJlIGl0IHNob3VsZCBiZSByZXdyaXR0ZW4gdG8gbm90IHVzZSB0aGUgZGVwcmVjYXRlZCBmZWF0dXJlLgogKgogKiBBIGRlcHJlY2F0ZWQgZmVhdHVyZSBzaG91bGQgZG9jdW1lbnQgaG93IHRoZSBzYW1lIGVmZmVjdCBjYW4gYmUgYWNoaWV2ZWQgaW4KICogW21lc3NhZ2VdLCBzbyB0aGUgcHJvZ3JhbW1lciBrbm93cyBob3cgdG8gcmV3cml0ZSB0aGUgY29kZS4KICoKICogVGhlIGBARGVwcmVjYXRlZGAgYW5ub3RhdGlvbiBhcHBsaWVzIHRvIGxpYnJhcmllcywgdG9wLWxldmVsIGRlY2xhcmF0aW9ucwogKiAodmFyaWFibGVzLCBnZXR0ZXJzLCBzZXR0ZXJzLCBmdW5jdGlvbnMsIGNsYXNzZXMgYW5kIHR5cGVkZWZzKSwKICogY2xhc3MtbGV2ZWwgZGVjbGFyYXRpb25zICh2YXJpYWJsZXMsIGdldHRlcnMsIHNldHRlcnMsIG1ldGhvZHMsIG9wZXJhdG9ycyBvcgogKiBjb25zdHJ1Y3RvcnMsIHdoZXRoZXIgc3RhdGljIG9yIG5vdCksIG5hbWVkIG9wdGlvbmFsIGFyZ3VtZW50cyBhbmQKICogdHJhaWxpbmcgb3B0aW9uYWwgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLgogKgogKiBEZXByZWNhdGlvbiBpcyB0cmFuc2l0aXZlOgogKgogKiAgLSBJZiBhIGxpYnJhcnkgaXMgZGVwcmVjYXRlZCwgc28gaXMgZXZlcnkgbWVtYmVyIG9mIGl0LgogKiAgLSBJZiBhIGNsYXNzIGlzIGRlcHJlY2F0ZWQsIHNvIGlzIGV2ZXJ5IG1lbWJlciBvZiBpdC4KICogIC0gSWYgYSB2YXJpYWJsZSBpcyBkZXByZWNhdGVkLCBzbyBhcmUgaXRzIGltcGxpY2l0IGdldHRlciBhbmQgc2V0dGVyLgogKgogKgogKiBBIHRvb2wgdGhhdCBwcm9jZXNzZXMgRGFydCBzb3VyY2UgY29kZSBtYXkgcmVwb3J0IHdoZW46CiAqCiAqIC0gdGhlIGNvZGUgaW1wb3J0cyBhIGRlcHJlY2F0ZWQgbGlicmFyeS4KICogLSB0aGUgY29kZSBleHBvcnRzIGEgZGVwcmVjYXRlZCBsaWJyYXJ5LCBvciBhbnkgZGVwcmVjYXRlZCBtZW1iZXIgb2YKICogIMKgYSBub24tZGVwcmVjYXRlZCBsaWJyYXJ5LgogKiAtIHRoZSBjb2RlIHJlZmVycyBzdGF0aWNhbGx5IHRvIGEgZGVwcmVjYXRlZCBkZWNsYXJhdGlvbi4KICogLSB0aGUgY29kZSBkeW5hbWljYWxseSB1c2VzIGEgbWVtYmVyIG9mIGFuIG9iamVjdCB3aXRoIGEgc3RhdGljYWxseSBrbm93bgogKiAgIHR5cGUsIHdoZXJlIHRoZSBtZW1iZXIgaXMgZGVwcmVjYXRlZCBvbiB0aGUgc3RhdGljIHR5cGUgb2YgdGhlIG9iamVjdC4KICogLSB0aGUgY29kZSBkeW5hbWljYWxseSBjYWxscyBhIG1ldGhvZCB3aXRoIGFuIGFyZ3VtZW50IHdoZXJlIHRoZQogKiAgIGNvcnJlc3BvbmRpbmcgb3B0aW9uYWwgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgb24gdGhlIG9iamVjdCdzIHN0YXRpYyB0eXBlLgogKgogKgogKiBJZiB0aGUgZGVwcmVjYXRlZCB1c2UgaXMgaW5zaWRlIGEgbGlicmFyeSwgY2xhc3Mgb3IgbWV0aG9kIHdoaWNoIGlzIGl0c2VsZgogKiBkZXByZWNhdGVkLCB0aGUgdG9vbCBzaG91bGQgbm90IGJvdGhlciB0aGUgdXNlciBhYm91dCBpdC4KICogQSBkZXByZWNhdGVkIGZlYXR1cmUgaXMgZXhwZWN0ZWQgdG8gdXNlIG90aGVyIGRlcHJlY2F0ZWQgZmVhdHVyZXMuCiAqLwpjbGFzcyBEZXByZWNhdGVkIHsKICAvKioKICAgKiBNZXNzYWdlIHByb3ZpZGVkIHRvIHRoZSB1c2VyIHdoZW4gdGhleSB1c2UgdGhlIGRlcHJlY2F0ZWQgZmVhdHVyZS4KICAgKgogICAqIFRoZSBtZXNzYWdlIHNob3VsZCBleHBsYWluIGhvdyB0byBtaWdyYXRlIGF3YXkgZnJvbSB0aGUgZmVhdHVyZSBpZiBhbgogICAqIGFsdGVybmF0aXZlIGlzIGF2YWlsYWJsZSwgYW5kIHdoZW4gdGhlIGRlcHJlY2F0ZWQgZmVhdHVyZSBpcyBleHBlY3RlZCB0byBiZQogICAqIHJlbW92ZWQuCiAgICovCiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CgogIC8qKgogICAqIENyZWF0ZSBhIGRlcHJlY2F0aW9uIGFubm90YXRpb24gd2hpY2ggc3BlY2lmaWVzIHRoZSBtaWdyYXRpb24gcGF0aCBhbmQKICAgKiBleHBpcmF0aW9uIG9mIHRoZSBhbm5vdGF0ZWQgZmVhdHVyZS4KICAgKgogICAqIFRoZSBbbWVzc2FnZV0gYXJndW1lbnQgc2hvdWxkIGJlIHJlYWRhYmxlIGJ5IHByb2dyYW1tZXJzLCBhbmQgc2hvdWxkIHN0YXRlCiAgICogYW4gYWx0ZXJuYXRpdmUgZmVhdHVyZSAoaWYgYXZhaWxhYmxlKSBhcyB3ZWxsIGFzIHdoZW4gYW4gYW5ub3RhdGVkIGZlYXR1cmUKICAgKiBpcyBleHBlY3RlZCB0byBiZSByZW1vdmVkLgogICAqLwogIGNvbnN0IERlcHJlY2F0ZWQodGhpcy5tZXNzYWdlKTsKCiAgQERlcHJlY2F0ZWQoJ1VzZSBgbWVzc2FnZWAgaW5zdGVhZC4gV2lsbCBiZSByZW1vdmVkIGluIERhcnQgMy4wLjAnKQogIFN0cmluZyBnZXQgZXhwaXJlcyA9PiBtZXNzYWdlOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiRGVwcmVjYXRlZCBmZWF0dXJlOiAkbWVzc2FnZSI7Cn0KCi8qKgogKiBNYXJrcyBhIGZlYXR1cmUgYXMgW0RlcHJlY2F0ZWRdIHVudGlsIHRoZSBuZXh0IHJlbGVhc2UuCiAqLwpjb25zdCBEZXByZWNhdGVkIGRlcHJlY2F0ZWQgPSBEZXByZWNhdGVkKCJuZXh0IHJlbGVhc2UiKTsKCmNsYXNzIF9PdmVycmlkZSB7CiAgY29uc3QgX092ZXJyaWRlKCk7Cn0KCi8qKgogKiBUaGUgYW5ub3RhdGlvbiBgQG92ZXJyaWRlYCBtYXJrcyBhbiBpbnN0YW5jZSBtZW1iZXIgYXMgb3ZlcnJpZGluZyBhCiAqIHN1cGVyY2xhc3MgbWVtYmVyIHdpdGggdGhlIHNhbWUgbmFtZS4KICoKICogVGhlIGFubm90YXRpb24gYXBwbGllcyB0byBpbnN0YW5jZSBtZXRob2RzLCBnZXR0ZXJzIGFuZCBzZXR0ZXJzLCBhbmQgdG8KICogaW5zdGFuY2UgZmllbGRzLCB3aGVyZSBpdCBtZWFucyB0aGF0IHRoZSBpbXBsaWNpdCBnZXR0ZXIgYW5kIHNldHRlciBvZiB0aGUKICogZmllbGQgaXMgbWFya2VkIGFzIG92ZXJyaWRpbmcsIGJ1dCB0aGUgZmllbGQgaXRzZWxmIGlzIG5vdC4KICoKICogVGhlIGludGVudCBvZiB0aGUgYEBvdmVycmlkZWAgbm90YXRpb24gaXMgdG8gY2F0Y2ggc2l0dWF0aW9ucyB3aGVyZSBhCiAqIHN1cGVyY2xhc3MgcmVuYW1lcyBhIG1lbWJlciwgYW5kIGFuIGluZGVwZW5kZW50IHN1YmNsYXNzIHdoaWNoIHVzZWQgdG8KICogb3ZlcnJpZGUgdGhlIG1lbWJlciwgY291bGQgc2lsZW50bHkgY29udGludWUgd29ya2luZyB1c2luZyB0aGUKICogc3VwZXJjbGFzcyBpbXBsZW1lbnRhdGlvbi4KICoKICogVGhlIGVkaXRvciwgb3IgYSBzaW1pbGFyIHRvb2wgYWltZWQgYXQgdGhlIHByb2dyYW1tZXIsIG1heSByZXBvcnQgaWYgbm8KICogZGVjbGFyYXRpb24gb2YgYW4gYW5ub3RhdGVkIG1lbWJlciBpcyBpbmhlcml0ZWQgYnkgdGhlIGNsYXNzIGZyb20gZWl0aGVyIGEKICogc3VwZXJjbGFzcyBvciBhbiBpbnRlcmZhY2UuCiAqCiAqIFVzZSB0aGUgYEBvdmVycmlkZWAgYW5ub3RhdGlvbiBqdWRpY2lvdXNseSBhbmQgb25seSBmb3IgbWV0aG9kcyB3aGVyZQogKiB0aGUgc3VwZXJjbGFzcyBpcyBub3QgdW5kZXIgdGhlIHByb2dyYW1tZXIncyBjb250cm9sLCB0aGUgc3VwZXJjbGFzcyBpcyBpbiBhCiAqIGRpZmZlcmVudCBsaWJyYXJ5IG9yIHBhY2thZ2UsIGFuZCBpdCBpcyBub3QgY29uc2lkZXJlZCBzdGFibGUuCiAqIEluIGFueSBjYXNlLCB0aGUgdXNlIG9mIGBAb3ZlcnJpZGVgIGlzIG9wdGlvbmFsLgogKgogKiBGb3IgZXhhbXBsZSwgdGhlIGFubm90YXRpb24gaXMgaW50ZW50aW9uYWxseSBub3QgdXNlZCBpbiB0aGUgRGFydCBwbGF0Zm9ybQogKiBsaWJyYXJpZXMsIHNpbmNlIHRoZXkgb25seSBkZXBlbmQgb24gdGhlbXNlbHZlcy4KICovCmNvbnN0IE9iamVjdCBvdmVycmlkZSA9IF9PdmVycmlkZSgpOwoKLyoqCiAqIEFuIGFubm90YXRpb24gY2xhc3MgdGhhdCB3YXMgdXNlZCBkdXJpbmcgZGV2ZWxvcG1lbnQgb2YgRGFydCAyLgogKgogKiBTaG91bGQgbm90IGJlIHVzZWQgYW55IG1vcmUuCiAqLwpAZGVwcmVjYXRlZApjbGFzcyBQcm92aXNpb25hbCB7CiAgU3RyaW5nIGdldCBtZXNzYWdlID0+IG51bGw7CiAgY29uc3QgUHJvdmlzaW9uYWwoe1N0cmluZyBtZXNzYWdlfSk7Cn0KCi8qKgogKiBBbiBhbm5vdGF0aW9uIHRoYXQgd2FzIHVzZWQgZHVyaW5nIGRldmVsb3BtZW50IG9mIERhcnQgMi4KICoKICogU2hvdWxkIG5vdCBiZSB1c2VkIGFueSBtb3JlLgogKi8KQGRlcHJlY2F0ZWQKY29uc3QgTnVsbCBwcm92aXNpb25hbCA9IG51bGw7CgpjbGFzcyBfUHJveHkgewogIGNvbnN0IF9Qcm94eSgpOwp9CgovKioKICogVGhpcyBhbm5vdGF0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBEYXJ0IDIuCiAqCiAqIERhcnQgMiBoYXMgYSBtb3JlIHJlc3RyaWN0aXZlIHR5cGUgc3lzdGVtIHRoYW4gRGFydCAxLCBhbmQgaXQgcmVxdWlyZXMKICogbWV0aG9kIGFjY2VzcyB0byBiZSBlaXRoZXIgdGhyb3VnaCBhIGtub3duIGludGVyZmFjZSBvciBieSB1c2luZwogKiBkeW5hbWljIGludm9jYXRpb25zLiBUaGUgb3JpZ2luYWwgaW50ZW50IG9mIGBAcHJveHlgICh0byBpbXBsZW1lbnQgYSBjbGFzcwogKiB0aGF0IGlzbid0IGtub3duIHN0YXRpY2FsbHksIGFzIGRvY3VtZW50ZWQgYXQgdGhlIGVuZCBvZiB0aGlzIHRleHQpLAogKiBpcyBub3Qgc3VwcG9ydGVkIGJ5IERhcnQgMi4KICogVG8gY29udGludWUgdG8gcGVyZm9ybSBkeW5hbWljIGludm9jYXRpb25zIG9uIGFuIG9iamVjdCwKICogaXQgc2hvdWxkIGJlIGFjY2Vzc2VkIHRocm91Z2ggYSByZWZlcmVuY2Ugb2YgdHlwZSBgZHluYW1pY2AuCiAqCiAqIFRoZSBhbm5vdGF0aW9uIGBAcHJveHlgIG1hcmtzIGEgY2xhc3MgYXMgaW1wbGVtZW50aW5nIG1lbWJlcnMgZHluYW1pY2FsbHkKICogdGhyb3VnaCBgbm9TdWNoTWV0aG9kYC4KICoKICogVGhlIGFubm90YXRpb24gYXBwbGllcyB0byBhbnkgY2xhc3MuIEl0IGlzIGluaGVyaXRlZCBieSBzdWJjbGFzc2VzIGZyb20gYm90aAogKiBzdXBlcmNsYXNzIGFuZCBpbnRlcmZhY2VzLgogKgogKiBJZiBhIGNsYXNzIGlzIGFubm90YXRlZCB3aXRoIGBAcHJveHlgLCBvciBpdCBpbXBsZW1lbnRzIGFueSBjbGFzcyB0aGF0IGlzCiAqIGFubm90YXRlZCwgdGhlbiBhbGwgbWVtYmVyIGFjY2Vzc2VzIGFyZSBhbGxvd2VkIG9uIGFuIG9iamVjdCBvZiB0aGF0IHR5cGUuCiAqIEFzIHN1Y2gsIGl0IGlzIG5vdCBhIHN0YXRpYyB0eXBlIHdhcm5pbmcgdG8gYWNjZXNzIGFueSBtZW1iZXIgb2YgdGhlIG9iamVjdAogKiB3aGljaCBpcyBub3QgaW1wbGVtZW50ZWQgYnkgdGhlIGNsYXNzLCBvciB0byBjYWxsIGEgbWV0aG9kIHdpdGggYSBkaWZmZXJlbnQKICogbnVtYmVyIG9mIHBhcmFtZXRlcnMgdGhhbiBpdCBpcyBkZWNsYXJlZCB3aXRoLgogKgogKiBUaGUgYW5ub3RhdGlvbiBkb2VzIG5vdCBjaGFuZ2Ugd2hpY2ggY2xhc3NlcyB0aGUgYW5ub3RhdGVkIGNsYXNzIGltcGxlbWVudHMsCiAqIGFuZCBkb2VzIG5vdCBwcmV2ZW50IHN0YXRpYyB3YXJuaW5ncyBmb3IgYXNzaWduaW5nIGFuIG9iamVjdCB0byBhIHZhcmlhYmxlCiAqIHdpdGggYSBzdGF0aWMgdHlwZSBub3QgaW1wbGVtZW50ZWQgYnkgdGhlIG9iamVjdC4KICoKICogVGhlIHN1cHByZXNzaW9uIG9mIHdhcm5pbmdzIG9ubHkgYWZmZWN0IHN0YXRpYyB0eXBlIHdhcm5pbmdzIGFib3V0CiAqIG1lbWJlciBhY2Nlc3MuCiAqIFRoZSBydW50aW1lIHR5cGUgb2YgdGhlIG9iamVjdCBpcyB1bmFmZmVjdGVkLgogKiBJdCBpcyBub3QgY29uc2lkZXJlZCB0byBpbXBsZW1lbnQgYW55IHNwZWNpYWwgaW50ZXJmYWNlcywKICogc28gYXNzaWduaW5nIGl0IHRvIGEgdHlwZWQgdmFyaWFibGUgbWF5IGZhaWwgaW4gY2hlY2tlZCBtb2RlLAogKiBhbmQgdGVzdGluZyBpdCB3aXRoIHRoZSBgaXNgIG9wZXJhdG9yCiAqIHdpbGwgb25seSByZXR1cm4gdHJ1ZSBmb3IgdHlwZXMgaXQgYWN0dWFsbHkgaW1wbGVtZW50cyBvciBleHRlbmRzLgogKiBBY2Nlc3NpbmcgYSBtZW1iZXIgd2hpY2ggaXNuJ3QgaW1wbGVtZW50ZWQgYnkgdGhlIGNsYXNzCiAqIHdpbGwgY2F1c2UgdGhlIGBub1N1Y2hNZXRob2RgIG1ldGhvZCB0byBiZSBjYWxsZWQgbm9ybWFsbHksCiAqIHRoZSBgQHByb3h5YCBhbm5vdGF0aW9uIG1lcmVseSBzdGF0ZXMgdGhlIGludGVudCB0byBoYW5kbGUgKHNvbWUgb2YpIHRob3NlCiAqIGBub1N1Y2hNZXRob2RgIGNhbGxzIGdyYWNlZnVsbHkuCiAqCiAqIEEgY2xhc3MgdGhhdCBtYXJrZWQgYXMgYEBwcm94eWAgc2hvdWxkIG92ZXJyaWRlIHRoZSBgbm9TdWNoTWV0aG9kYAogKiBkZWNsYXJlZCBvbiBbT2JqZWN0XS4KICoKICogVGhlIGludGVudCBvZiB0aGUgYEBwcm94eWAgbm90YXRpb24gaXMgdG8gY3JlYXRlIG9iamVjdHMgdGhhdCBpbXBsZW1lbnQgYQogKiB0eXBlIChvciBtdWx0aXBsZSB0eXBlcykgdGhhdCBhcmUgbm90IGtub3duIGF0IGNvbXBpbGUgdGltZS4gSWYgdGhlIHR5cGVzCiAqIGFyZSBrbm93biBhdCBjb21waWxlIHRpbWUsIGEgY2xhc3MgY2FuIGJlIHdyaXR0ZW4gdGhhdCBpbXBsZW1lbnRzIHRoZXNlCiAqIHR5cGVzLgogKi8KQGRlcHJlY2F0ZWQKY29uc3QgT2JqZWN0IHByb3h5ID0gX1Byb3h5KCk7CgovKioKICogQSBoaW50IHRvIHRvb2xzLgogKgogKiBUb29scyB0aGF0IHdvcmsgd2l0aCBEYXJ0IHByb2dyYW1zIG1heSBhY2NlcHQgaGludHMgdG8gZ3VpZGUgdGhlaXIgYmVoYXZpb3IKICogYXMgYHByYWdtYWAgYW5ub3RhdGlvbnMgb24gZGVjbGFyYXRpb25zLgogKiBFYWNoIHRvb2wgZGVjaWRlcyB3aGljaCBoaW50cyBpdCBhY2NlcHRzLCB3aGF0IHRoZXkgbWVhbiwgYW5kIHdoZXRoZXIgYW5kCiAqIGhvdyB0aGV5IGFwcGx5IHRvIHN1Yi1wYXJ0cyBvZiB0aGUgYW5ub3RhdGVkIGVudGl0eS4KICoKICogVG9vbHMgdGhhdCByZWNvZ25pemUgcHJhZ21hIGhpbnRzIHNob3VsZCBwaWNrIGEgcHJhZ21hIHByZWZpeCB0byBpZGVudGlmeQogKiB0aGUgdG9vbC4gVGhleSBzaG91bGQgcmVjb2duaXplIGFueSBoaW50IHdpdGggYSBbbmFtZV0gc3RhcnRpbmcgd2l0aCB0aGVpcgogKiBwcmVmaXggZm9sbG93ZWQgYnkgYDpgIGFzIGlmIGl0IHdhcyBpbnRlbmRlZCBmb3IgdGhhdCB0b29sLiBBIGhpbnQgd2l0aCBhCiAqIHByZWZpeCBmb3IgYW5vdGhlciB0b29sIHNob3VsZCBiZSBpZ25vcmVkICh1bmxlc3MgY29tcGF0aWJpbGl0eSB3aXRoIHRoYXQKICogb3RoZXIgdG9vbCBpcyBhIGdvYWwpLgogKgogKiBBIHRvb2wgbWF5IHJlY29nbml6ZSB1bnByZWZpeGVkIG5hbWVzIGFzIHdlbGwsIGlmIHRoZXkgd291bGQgcmVjb2duaXplIHRoYXQKICogbmFtZSB3aXRoIHRoZWlyIG93biBwcmVmaXggaW4gZnJvbnQuCiAqCiAqIElmIHRoZSBoaW50IGNhbiBiZSBwYXJhbWV0ZXJpemVkLCBhbiBleHRyYSBbb3B0aW9uc10gb2JqZWN0IGNhbiBiZSBhZGRlZCBhcyB3ZWxsLgogKgogKiBGb3IgZXhhbXBsZToKICoKICogYGBgZGFydAogKiBAcHJhZ21hKCdUb29sOnByYWdtYS1uYW1lJywgW3BhcmFtMSwgcGFyYW0yLCAuLi5dKQogKiBjbGFzcyBGb28geyB9CiAqCiAqIEBwcmFnbWEoJ090aGVyVG9vbDpvdGhlci1wcmFnbWEnKQogKiB2b2lkIGZvbygpIHsgfQogKiBgYGAKICoKICogSGVyZSBjbGFzcyBGb28gaXMgYW5ub3RhdGVkIHdpdGggYSBUb29sIHNwZWNpZmljIHByYWdtYSAncHJhZ21hLW5hbWUnIGFuZAogKiBmdW5jdGlvbiBmb28gaXMgYW5ub3RhdGVkIHdpdGggYSBwcmFnbWEgJ290aGVyLXByYWdtYScgc3BlY2lmaWMgdG8gT3RoZXJUb29sLgogKgogKi8KQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQpjbGFzcyBwcmFnbWEgewogIC8qKgogICAqIFRoZSBuYW1lIG9mIHRoZSBoaW50LgogICAqCiAgICogQSBzdHJpbmcgdGhhdCBpcyByZWNvZ25pemVkIGJ5IG9uZSBvciBtb3JlIHRvb2xzLCBvciBzdWNoIGEgc3RyaW5nIHByZWZpeGVkCiAgICogYnkgYSB0b29sIGlkZW50aWZpZXIgYW5kIGEgY29sb24sIHdoaWNoIGlzIG9ubHkgcmVjb2duaXplZCBieSB0aGF0CiAgICogcGFydGljdWxhciB0b29sLgogICAqLwogIGZpbmFsIFN0cmluZyBuYW1lOwoKICAvKiogT3B0aW9uYWwgZXh0cmEgZGF0YSBwYXJhbWV0ZXJpemluZyB0aGUgaGludC4gKi8KICBmaW5hbCBPYmplY3Qgb3B0aW9uczsKCiAgLyoqIENyZWF0ZXMgYSBoaW50IG5hbWVkIFtuYW1lXSB3aXRoIG9wdGlvbmFsIFtvcHRpb25zXS4gKi8KICBjb25zdCBmYWN0b3J5IHByYWdtYShTdHJpbmcgbmFtZSwgW09iamVjdCBvcHRpb25zXSkgPSBwcmFnbWEuXzsKCiAgY29uc3QgcHJhZ21hLl8odGhpcy5uYW1lLCBbdGhpcy5vcHRpb25zXSk7Cn0KgPIATk48ARMBBEwDREEDTk0OA01PTEUDTz8DTUNQRiwDHgM8OkoDAzsDLEgfPU1MRFEDA049RgQTBkgFS1EOBhgBBkwqBVBQIAYiAUYhATcCAQQ7BDoBEhUCAQRHKQNLTj8DSUpCHgNLTh8DSVBCNANONAQlAQRDAyAEDBQeJwIBBD0DIAQMHwEPEgIBBEADSkROSB88QANNGwNQHgNNTk9PMgNQTjUDRhIxPUEpRjs/TiQDRhkDTU1LCgQMHwEEFANPLE04A01OTU0aA08oA1UDEAMLNhEDJRIHA01RAwQaDwYbBVFIFgYVATYYAT5CAS0CARpkYXJ0OmNvcmUvYW5ub3RhdGlvbnMuZGFydCxvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9iaWdpbnQuZGFydLGULy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIEFuIGFyYml0cmFyaWx5IGxhcmdlIGludGVnZXIuCiAqLwphYnN0cmFjdCBjbGFzcyBCaWdJbnQgaW1wbGVtZW50cyBDb21wYXJhYmxlPEJpZ0ludD4gewogIGV4dGVybmFsIHN0YXRpYyBCaWdJbnQgZ2V0IHplcm87CiAgZXh0ZXJuYWwgc3RhdGljIEJpZ0ludCBnZXQgb25lOwogIGV4dGVybmFsIHN0YXRpYyBCaWdJbnQgZ2V0IHR3bzsKCiAgLyoqCiAgICogUGFyc2VzIFtzb3VyY2VdIGFzIGEsIHBvc3NpYmx5IHNpZ25lZCwgaW50ZWdlciBsaXRlcmFsIGFuZCByZXR1cm5zIGl0cwogICAqIHZhbHVlLgogICAqCiAgICogVGhlIFtzb3VyY2VdIG11c3QgYmUgYSBub24tZW1wdHkgc2VxdWVuY2Ugb2YgYmFzZS1bcmFkaXhdIGRpZ2l0cywKICAgKiBvcHRpb25hbGx5IHByZWZpeGVkIHdpdGggYSBtaW51cyBvciBwbHVzIHNpZ24gKCctJyBvciAnKycpLgogICAqCiAgICogVGhlIFtyYWRpeF0gbXVzdCBiZSBpbiB0aGUgcmFuZ2UgMi4uMzYuIFRoZSBkaWdpdHMgdXNlZCBhcmUKICAgKiBmaXJzdCB0aGUgZGVjaW1hbCBkaWdpdHMgMC4uOSwgYW5kIHRoZW4gdGhlIGxldHRlcnMgJ2EnLi4neicgd2l0aAogICAqIHZhbHVlcyAxMCB0aHJvdWdoIDM1LiBBbHNvIGFjY2VwdHMgdXBwZXItY2FzZSBsZXR0ZXJzIHdpdGggdGhlIHNhbWUKICAgKiB2YWx1ZXMgYXMgdGhlIGxvd2VyLWNhc2Ugb25lcy4KICAgKgogICAqIElmIG5vIFtyYWRpeF0gaXMgZ2l2ZW4gdGhlbiBpdCBkZWZhdWx0cyB0byAxMC4gSW4gdGhpcyBjYXNlLCB0aGUgW3NvdXJjZV0KICAgKiBkaWdpdHMgbWF5IGFsc28gc3RhcnQgd2l0aCBgMHhgLCBpbiB3aGljaCBjYXNlIHRoZSBudW1iZXIgaXMgaW50ZXJwcmV0ZWQKICAgKiBhcyBhIGhleGFkZWNpbWFsIGxpdGVyYWwsIHdoaWNoIGVmZmVjdGl2ZWx5IG1lYW5zIHRoYXQgdGhlIGAweGAgaXMgaWdub3JlZAogICAqIGFuZCB0aGUgcmFkaXggaXMgaW5zdGVhZCBzZXQgdG8gMTYuCiAgICoKICAgKiBGb3IgYW55IGludCBgbmAgYW5kIHJhZGl4IGByYCwgaXQgaXMgZ3VhcmFudGVlZCB0aGF0CiAgICogYG4gPT0gaW50LnBhcnNlKG4udG9SYWRpeFN0cmluZyhyKSwgcmFkaXg6IHIpYC4KICAgKgogICAqIFRocm93cyBhIFtGb3JtYXRFeGNlcHRpb25dIGlmIHRoZSBbc291cmNlXSBpcyBub3QgYSB2YWxpZCBpbnRlZ2VyIGxpdGVyYWwsCiAgICogb3B0aW9uYWxseSBwcmVmaXhlZCBieSBhIHNpZ24uCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEJpZ0ludCBwYXJzZShTdHJpbmcgc291cmNlLCB7aW50IHJhZGl4fSk7CgogIC8qKgogICAqIFBhcnNlcyBbc291cmNlXSBhcyBhLCBwb3NzaWJseSBzaWduZWQsIGludGVnZXIgbGl0ZXJhbCBhbmQgcmV0dXJucyBpdHMKICAgKiB2YWx1ZS4KICAgKgogICAqIEFzIFtwYXJzZV0gZXhjZXB0IHRoYXQgdGhpcyBtZXRob2QgcmV0dXJucyBgbnVsbGAgaWYgdGhlIGlucHV0IGlzIG5vdAogICAqIHZhbGlkCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEJpZ0ludCB0cnlQYXJzZShTdHJpbmcgc291cmNlLCB7aW50IHJhZGl4fSk7CgogIC8vLyBBbGxvY2F0ZXMgYSBiaWcgaW50ZWdlciBmcm9tIHRoZSBwcm92aWRlZCBbdmFsdWVdIG51bWJlci4KICBleHRlcm5hbCBmYWN0b3J5IEJpZ0ludC5mcm9tKG51bSB2YWx1ZSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoaXMgaW50ZWdlci4KICAgKgogICAqIEZvciBhbnkgaW50ZWdlciBgeGAsIHRoZSByZXN1bHQgaXMgdGhlIHNhbWUgYXMgYHggPCAwID8gLXggOiB4YC4KICAgKi8KICBCaWdJbnQgYWJzKCk7CgogIC8qKgogICAqIFJldHVybiB0aGUgbmVnYXRpdmUgdmFsdWUgb2YgdGhpcyBpbnRlZ2VyLgogICAqCiAgICogVGhlIHJlc3VsdCBvZiBuZWdhdGluZyBhbiBpbnRlZ2VyIGFsd2F5cyBoYXMgdGhlIG9wcG9zaXRlIHNpZ24sIGV4Y2VwdAogICAqIGZvciB6ZXJvLCB3aGljaCBpcyBpdHMgb3duIG5lZ2F0aW9uLgogICAqLwogIEJpZ0ludCBvcGVyYXRvciAtKCk7CgogIC8vLyBBZGRpdGlvbiBvcGVyYXRvci4KICBCaWdJbnQgb3BlcmF0b3IgKyhCaWdJbnQgb3RoZXIpOwoKICAvLy8gU3VidHJhY3Rpb24gb3BlcmF0b3IuCiAgQmlnSW50IG9wZXJhdG9yIC0oQmlnSW50IG90aGVyKTsKCiAgLy8vIE11bHRpcGxpY2F0aW9uIG9wZXJhdG9yLgogIEJpZ0ludCBvcGVyYXRvciAqKEJpZ0ludCBvdGhlcik7CgogIC8vLyBEaXZpc2lvbiBvcGVyYXRvci4KICBkb3VibGUgb3BlcmF0b3IgLyhCaWdJbnQgb3RoZXIpOwoKICAvKioKICAgKiBUcnVuY2F0aW5nIGRpdmlzaW9uIG9wZXJhdG9yLgogICAqCiAgICogUGVyZm9ybXMgYSB0cnVuY2F0aW5nIGludGVnZXIgZGl2aXNpb24sIHdoZXJlIHRoZSByZW1haW5kZXIgaXMgZGlzY2FyZGVkLgogICAqCiAgICogVGhlIHJlbWFpbmRlciBjYW4gYmUgY29tcHV0ZWQgdXNpbmcgdGhlIFtyZW1haW5kZXJdIG1ldGhvZC4KICAgKgogICAqIEV4YW1wbGVzOgogICAqIGBgYAogICAqIHZhciBzZXZlbiA9IG5ldyBCaWdJbnQuZnJvbSg3KTsKICAgKiB2YXIgdGhyZWUgPSBuZXcgQmlnSW50LmZyb20oMyk7CiAgICogc2V2ZW4gfi8gdGhyZWU7ICAgIC8vID0+IDIKICAgKiAoLXNldmVuKSB+LyB0aHJlZTsgLy8gPT4gLTIKICAgKiBzZXZlbiB+LyAtdGhyZWU7ICAgLy8gPT4gLTIKICAgKiBzZXZlbi5yZW1haW5kZXIodGhyZWUpOyAgICAvLyA9PiAxCiAgICogKC1zZXZlbikucmVtYWluZGVyKHRocmVlKTsgLy8gPT4gLTEKICAgKiBzZXZlbi5yZW1haW5kZXIoLXRocmVlKTsgICAvLyA9PiAxCiAgICogYGBgCiAgICovCiAgQmlnSW50IG9wZXJhdG9yIH4vKEJpZ0ludCBvdGhlcik7CgogIC8qKgogICAqIEV1Y2xpZGVhbiBtb2R1bG8gb3BlcmF0b3IuCiAgICoKICAgKiBSZXR1cm5zIHRoZSByZW1haW5kZXIgb2YgdGhlIEV1Y2xpZGVhbiBkaXZpc2lvbi4gVGhlIEV1Y2xpZGVhbiBkaXZpc2lvbiBvZgogICAqIHR3byBpbnRlZ2VycyBgYWAgYW5kIGBiYCB5aWVsZHMgdHdvIGludGVnZXJzIGBxYCBhbmQgYHJgIHN1Y2ggdGhhdAogICAqIGBhID09IGIgKiBxICsgcmAgYW5kIGAwIDw9IHIgPCBiLmFicygpYC4KICAgKgogICAqIFRoZSBzaWduIG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBgcmAgaXMgYWx3YXlzIHBvc2l0aXZlLgogICAqCiAgICogU2VlIFtyZW1haW5kZXJdIGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSB0cnVuY2F0aW5nIGRpdmlzaW9uLgogICAqLwogIEJpZ0ludCBvcGVyYXRvciAlKEJpZ0ludCBvdGhlcik7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHJlbWFpbmRlciBvZiB0aGUgdHJ1bmNhdGluZyBkaXZpc2lvbiBvZiBgdGhpc2AgYnkgW290aGVyXS4KICAgKgogICAqIFRoZSByZXN1bHQgYHJgIG9mIHRoaXMgb3BlcmF0aW9uIHNhdGlzZmllczoKICAgKiBgdGhpcyA9PSAodGhpcyB+LyBvdGhlcikgKiBvdGhlciArIHJgLgogICAqIEFzIGEgY29uc2VxdWVuY2UgdGhlIHJlbWFpbmRlciBgcmAgaGFzIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRpdmlkZXIgYHRoaXNgLgogICAqLwogIEJpZ0ludCByZW1haW5kZXIoQmlnSW50IG90aGVyKTsKCiAgLyoqCiAgICogU2hpZnQgdGhlIGJpdHMgb2YgdGhpcyBpbnRlZ2VyIHRvIHRoZSBsZWZ0IGJ5IFtzaGlmdEFtb3VudF0uCiAgICoKICAgKiBTaGlmdGluZyB0byB0aGUgbGVmdCBtYWtlcyB0aGUgbnVtYmVyIGxhcmdlciwgZWZmZWN0aXZlbHkgbXVsdGlwbHlpbmcKICAgKiB0aGUgbnVtYmVyIGJ5IGBwb3coMiwgc2hpZnRJbmRleClgLgogICAqCiAgICogVGhlcmUgaXMgbm8gbGltaXQgb24gdGhlIHNpemUgb2YgdGhlIHJlc3VsdC4gSXQgbWF5IGJlIHJlbGV2YW50IHRvCiAgICogbGltaXQgaW50ZXJtZWRpYXRlIHZhbHVlcyBieSB1c2luZyB0aGUgImFuZCIgb3BlcmF0b3Igd2l0aCBhIHN1aXRhYmxlCiAgICogbWFzay4KICAgKgogICAqIEl0IGlzIGFuIGVycm9yIGlmIFtzaGlmdEFtb3VudF0gaXMgbmVnYXRpdmUuCiAgICovCiAgQmlnSW50IG9wZXJhdG9yIDw8KGludCBzaGlmdEFtb3VudCk7CgogIC8qKgogICAqIFNoaWZ0IHRoZSBiaXRzIG9mIHRoaXMgaW50ZWdlciB0byB0aGUgcmlnaHQgYnkgW3NoaWZ0QW1vdW50XS4KICAgKgogICAqIFNoaWZ0aW5nIHRvIHRoZSByaWdodCBtYWtlcyB0aGUgbnVtYmVyIHNtYWxsZXIgYW5kIGRyb3BzIHRoZSBsZWFzdAogICAqIHNpZ25pZmljYW50IGJpdHMsIGVmZmVjdGl2ZWx5IGRvaW5nIGFuIGludGVnZXIgZGl2aXNpb24gYnkKICAgKmBwb3coMiwgc2hpZnRJbmRleClgLgogICAqCiAgICogSXQgaXMgYW4gZXJyb3IgaWYgW3NoaWZ0QW1vdW50XSBpcyBuZWdhdGl2ZS4KICAgKi8KICBCaWdJbnQgb3BlcmF0b3IgPj4oaW50IHNoaWZ0QW1vdW50KTsKCiAgLyoqCiAgICogQml0LXdpc2UgYW5kIG9wZXJhdG9yLgogICAqCiAgICogVHJlYXRpbmcgYm90aCBgdGhpc2AgYW5kIFtvdGhlcl0gYXMgc3VmZmljaWVudGx5IGxhcmdlIHR3bydzIGNvbXBvbmVudAogICAqIGludGVnZXJzLCB0aGUgcmVzdWx0IGlzIGEgbnVtYmVyIHdpdGggb25seSB0aGUgYml0cyBzZXQgdGhhdCBhcmUgc2V0IGluCiAgICogYm90aCBgdGhpc2AgYW5kIFtvdGhlcl0KICAgKgogICAqIE9mIGJvdGggb3BlcmFuZHMgYXJlIG5lZ2F0aXZlLCB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLCBvdGhlcndpc2UKICAgKiB0aGUgcmVzdWx0IGlzIG5vbi1uZWdhdGl2ZS4KICAgKi8KICBCaWdJbnQgb3BlcmF0b3IgJihCaWdJbnQgb3RoZXIpOwoKICAvKioKICAgKiBCaXQtd2lzZSBvciBvcGVyYXRvci4KICAgKgogICAqIFRyZWF0aW5nIGJvdGggYHRoaXNgIGFuZCBbb3RoZXJdIGFzIHN1ZmZpY2llbnRseSBsYXJnZSB0d28ncyBjb21wb25lbnQKICAgKiBpbnRlZ2VycywgdGhlIHJlc3VsdCBpcyBhIG51bWJlciB3aXRoIHRoZSBiaXRzIHNldCB0aGF0IGFyZSBzZXQgaW4gZWl0aGVyCiAgICogb2YgYHRoaXNgIGFuZCBbb3RoZXJdCiAgICoKICAgKiBJZiBib3RoIG9wZXJhbmRzIGFyZSBub24tbmVnYXRpdmUsIHRoZSByZXN1bHQgaXMgbm9uLW5lZ2F0aXZlLAogICAqIG90aGVyd2lzZSB0aGUgcmVzdWx0IHVzIG5lZ2F0aXZlLgogICAqLwogIEJpZ0ludCBvcGVyYXRvciB8KEJpZ0ludCBvdGhlcik7CgogIC8qKgogICAqIEJpdC13aXNlIGV4Y2x1c2l2ZS1vciBvcGVyYXRvci4KICAgKgogICAqIFRyZWF0aW5nIGJvdGggYHRoaXNgIGFuZCBbb3RoZXJdIGFzIHN1ZmZpY2llbnRseSBsYXJnZSB0d28ncyBjb21wb25lbnQKICAgKiBpbnRlZ2VycywgdGhlIHJlc3VsdCBpcyBhIG51bWJlciB3aXRoIHRoZSBiaXRzIHNldCB0aGF0IGFyZSBzZXQgaW4gb25lLAogICAqIGJ1dCBub3QgYm90aCwgb2YgYHRoaXNgIGFuZCBbb3RoZXJdCiAgICoKICAgKiBJZiB0aGUgb3BlcmFuZHMgaGF2ZSB0aGUgc2FtZSBzaWduLCB0aGUgcmVzdWx0IGlzIG5vbi1uZWdhdGl2ZSwKICAgKiBvdGhlcndpc2UgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZS4KICAgKi8KICBCaWdJbnQgb3BlcmF0b3IgXihCaWdJbnQgb3RoZXIpOwoKICAvKioKICAgKiBUaGUgYml0LXdpc2UgbmVnYXRlIG9wZXJhdG9yLgogICAqCiAgICogVHJlYXRpbmcgYHRoaXNgIGFzIGEgc3VmZmljaWVudGx5IGxhcmdlIHR3bydzIGNvbXBvbmVudCBpbnRlZ2VyLAogICAqIHRoZSByZXN1bHQgaXMgYSBudW1iZXIgd2l0aCB0aGUgb3Bwb3NpdGUgYml0cyBzZXQuCiAgICoKICAgKiBUaGlzIG1hcHMgYW55IGludGVnZXIgYHhgIHRvIGAteCAtIDFgLgogICAqLwogIEJpZ0ludCBvcGVyYXRvciB+KCk7CgogIC8qKiBSZWxhdGlvbmFsIGxlc3MgdGhhbiBvcGVyYXRvci4gKi8KICBib29sIG9wZXJhdG9yIDwoQmlnSW50IG90aGVyKTsKCiAgLyoqIFJlbGF0aW9uYWwgbGVzcyB0aGFuIG9yIGVxdWFsIG9wZXJhdG9yLiAqLwogIGJvb2wgb3BlcmF0b3IgPD0oQmlnSW50IG90aGVyKTsKCiAgLyoqIFJlbGF0aW9uYWwgZ3JlYXRlciB0aGFuIG9wZXJhdG9yLiAqLwogIGJvb2wgb3BlcmF0b3IgPihCaWdJbnQgb3RoZXIpOwoKICAvKiogUmVsYXRpb25hbCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgb3BlcmF0b3IuICovCiAgYm9vbCBvcGVyYXRvciA+PShCaWdJbnQgb3RoZXIpOwoKICAvKioKICAgKiBDb21wYXJlcyB0aGlzIHRvIGBvdGhlcmAuCiAgICoKICAgKiBSZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyIGlmIGB0aGlzYCBpcyBsZXNzIHRoYW4gYG90aGVyYCwgemVybyBpZiB0aGV5IGFyZQogICAqIGVxdWFsLCBhbmQgYSBwb3NpdGl2ZSBudW1iZXIgaWYgYHRoaXNgIGlzIGdyZWF0ZXIgdGhhbiBgb3RoZXJgLgogICAqLwogIGludCBjb21wYXJlVG8oQmlnSW50IG90aGVyKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbWluaW11bSBudW1iZXIgb2YgYml0cyByZXF1aXJlZCB0byBzdG9yZSB0aGlzIGJpZyBpbnRlZ2VyLgogICAqCiAgICogVGhlIG51bWJlciBvZiBiaXRzIGV4Y2x1ZGVzIHRoZSBzaWduIGJpdCwgd2hpY2ggZ2l2ZXMgdGhlIG5hdHVyYWwgbGVuZ3RoCiAgICogZm9yIG5vbi1uZWdhdGl2ZSAodW5zaWduZWQpIHZhbHVlcy4gIE5lZ2F0aXZlIHZhbHVlcyBhcmUgY29tcGxlbWVudGVkIHRvCiAgICogcmV0dXJuIHRoZSBiaXQgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGJpdCB0aGF0IGRpZmZlcnMgZnJvbSB0aGUgc2lnbiBiaXQuCiAgICoKICAgKiBUbyBmaW5kIHRoZSBudW1iZXIgb2YgYml0cyBuZWVkZWQgdG8gc3RvcmUgdGhlIHZhbHVlIGFzIGEgc2lnbmVkIHZhbHVlLAogICAqIGFkZCBvbmUsIGkuZS4gdXNlIGB4LmJpdExlbmd0aCArIDFgLgogICAqCiAgICogYGBgCiAgICogeC5iaXRMZW5ndGggPT0gKC14LTEpLmJpdExlbmd0aAogICAqCiAgICogbmV3IEJpZ0ludC5mcm9tKDMpLmJpdExlbmd0aCA9PSAyOyAgIC8vIDAwMDAwMDExCiAgICogbmV3IEJpZ0ludC5mcm9tKDIpLmJpdExlbmd0aCA9PSAyOyAgIC8vIDAwMDAwMDEwCiAgICogbmV3IEJpZ0ludC5mcm9tKDEpLmJpdExlbmd0aCA9PSAxOyAgIC8vIDAwMDAwMDAxCiAgICogbmV3IEJpZ0ludC5mcm9tKDApLmJpdExlbmd0aCA9PSAwOyAgIC8vIDAwMDAwMDAwCiAgICogbmV3IEJpZ0ludC5mcm9tKC0xKS5iaXRMZW5ndGggPT0gMDsgIC8vIDExMTExMTExCiAgICogbmV3IEJpZ0ludC5mcm9tKC0yKS5iaXRMZW5ndGggPT0gMTsgIC8vIDExMTExMTEwCiAgICogbmV3IEJpZ0ludC5mcm9tKC0zKS5iaXRMZW5ndGggPT0gMjsgIC8vIDExMTExMTAxCiAgICogbmV3IEJpZ0ludC5mcm9tKC00KS5iaXRMZW5ndGggPT0gMjsgIC8vIDExMTExMTAwCiAgICogYGBgCiAgICovCiAgaW50IGdldCBiaXRMZW5ndGg7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHNpZ24gb2YgdGhpcyBiaWcgaW50ZWdlci4KICAgKgogICAqIFJldHVybnMgMCBmb3IgemVybywgLTEgZm9yIHZhbHVlcyBsZXNzIHRoYW4gemVybyBhbmQKICAgKiArMSBmb3IgdmFsdWVzIGdyZWF0ZXIgdGhhbiB6ZXJvLgogICAqLwogIGludCBnZXQgc2lnbjsKCiAgLy8vIFdoZXRoZXIgdGhpcyBiaWcgaW50ZWdlciBpcyBldmVuLgogIGJvb2wgZ2V0IGlzRXZlbjsKCiAgLy8vIFdoZXRoZXIgdGhpcyBiaWcgaW50ZWdlciBpcyBvZGQuCiAgYm9vbCBnZXQgaXNPZGQ7CgogIC8vLyBXaGV0aGVyIHRoaXMgbnVtYmVyIGlzIG5lZ2F0aXZlLgogIGJvb2wgZ2V0IGlzTmVnYXRpdmU7CgogIC8qKgogICAqIFJldHVybnMgYHRoaXNgIHRvIHRoZSBwb3dlciBvZiBbZXhwb25lbnRdLgogICAqCiAgICogUmV0dXJucyBbb25lXSBpZiB0aGUgW2V4cG9uZW50XSBlcXVhbHMgMC4KICAgKgogICAqIFRoZSBbZXhwb25lbnRdIG11c3Qgb3RoZXJ3aXNlIGJlIHBvc2l0aXZlLgogICAqCiAgICogVGhlIHJlc3VsdCBpcyBhbHdheXMgZXF1YWwgdG8gdGhlIG1hdGhlbWF0aWNhbCByZXN1bHQgb2YgdGhpcyB0byB0aGUgcG93ZXIKICAgKiBbZXhwb25lbnRdLCBvbmx5IGxpbWl0ZWQgYnkgdGhlIGF2YWlsYWJsZSBtZW1vcnkuCiAgICovCiAgQmlnSW50IHBvdyhpbnQgZXhwb25lbnQpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoaXMgaW50ZWdlciB0byB0aGUgcG93ZXIgb2YgW2V4cG9uZW50XSBtb2R1bG8gW21vZHVsdXNdLgogICAqCiAgICogVGhlIFtleHBvbmVudF0gbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kIFttb2R1bHVzXSBtdXN0IGJlCiAgICogcG9zaXRpdmUuCiAgICovCiAgQmlnSW50IG1vZFBvdyhCaWdJbnQgZXhwb25lbnQsIEJpZ0ludCBtb2R1bHVzKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbW9kdWxhciBtdWx0aXBsaWNhdGl2ZSBpbnZlcnNlIG9mIHRoaXMgYmlnIGludGVnZXIKICAgKiBtb2R1bG8gW21vZHVsdXNdLgogICAqCiAgICogVGhlIFttb2R1bHVzXSBtdXN0IGJlIHBvc2l0aXZlLgogICAqCiAgICogSXQgaXMgYW4gZXJyb3IgaWYgbm8gbW9kdWxhciBpbnZlcnNlIGV4aXN0cy4KICAgKi8KICAvLyBSZXR1cm5zIDEvdGhpcyAlIG1vZHVsdXMsIHdpdGggbW9kdWx1cyA+IDAuCiAgQmlnSW50IG1vZEludmVyc2UoQmlnSW50IG1vZHVsdXMpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiB0aGlzIGJpZyBpbnRlZ2VyIGFuZCBbb3RoZXJdLgogICAqCiAgICogSWYgZWl0aGVyIG51bWJlciBpcyBub24temVybywgdGhlIHJlc3VsdCBpcyB0aGUgbnVtZXJpY2FsbHkgZ3JlYXRlc3QKICAgKiBpbnRlZ2VyIGRpdmlkaW5nIGJvdGggYHRoaXNgIGFuZCBgb3RoZXJgLgogICAqCiAgICogVGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIGlzIGluZGVwZW5kZW50IG9mIHRoZSBvcmRlciwKICAgKiBzbyBgeC5nY2QoeSlgIGlzICBhbHdheXMgdGhlIHNhbWUgYXMgYHkuZ2NkKHgpYC4KICAgKgogICAqIEZvciBhbnkgaW50ZWdlciBgeGAsIGB4LmdjZCh4KWAgaXMgYHguYWJzKClgLgogICAqCiAgICogSWYgYm90aCBgdGhpc2AgYW5kIGBvdGhlcmAgaXMgemVybywgdGhlIHJlc3VsdCBpcyBhbHNvIHplcm8uCiAgICovCiAgQmlnSW50IGdjZChCaWdJbnQgb3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsZWFzdCBzaWduaWZpY2FudCBbd2lkdGhdIGJpdHMgb2YgdGhpcyBiaWcgaW50ZWdlciBhcyBhCiAgICogbm9uLW5lZ2F0aXZlIG51bWJlciAoaS5lLiB1bnNpZ25lZCByZXByZXNlbnRhdGlvbikuICBUaGUgcmV0dXJuZWQgdmFsdWUgaGFzCiAgICogemVyb3MgaW4gYWxsIGJpdCBwb3NpdGlvbnMgaGlnaGVyIHRoYW4gW3dpZHRoXS4KICAgKgogICAqIGBgYAogICAqIG5ldyBCaWdJbnQuZnJvbSgtMSkudG9VbnNpZ25lZCg1KSA9PSAzMSAgIC8vIDExMTExMTExICAtPiAgMDAwMTExMTEKICAgKiBgYGAKICAgKgogICAqIFRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1c2VkIHRvIHNpbXVsYXRlIGFyaXRobWV0aWMgZnJvbSBsb3cgbGV2ZWwgbGFuZ3VhZ2VzLgogICAqIEZvciBleGFtcGxlLCB0byBpbmNyZW1lbnQgYW4gOCBiaXQgcXVhbnRpdHk6CiAgICoKICAgKiBgYGAKICAgKiBxID0gKHEgKyAxKS50b1Vuc2lnbmVkKDgpOwogICAqIGBgYAogICAqCiAgICogYHFgIHdpbGwgY291bnQgZnJvbSBgMGAgdXAgdG8gYDI1NWAgYW5kIHRoZW4gd3JhcCBhcm91bmQgdG8gYDBgLgogICAqCiAgICogSWYgdGhlIGlucHV0IGZpdHMgaW4gW3dpZHRoXSBiaXRzIHdpdGhvdXQgdHJ1bmNhdGlvbiwgdGhlIHJlc3VsdCBpcyB0aGUKICAgKiBzYW1lIGFzIHRoZSBpbnB1dC4gIFRoZSBtaW5pbXVtIHdpZHRoIG5lZWRlZCB0byBhdm9pZCB0cnVuY2F0aW9uIG9mIGB4YCBpcwogICAqIGdpdmVuIGJ5IGB4LmJpdExlbmd0aGAsIGkuZS4KICAgKgogICAqIGBgYAogICAqIHggPT0geC50b1Vuc2lnbmVkKHguYml0TGVuZ3RoKTsKICAgKiBgYGAKICAgKi8KICBCaWdJbnQgdG9VbnNpZ25lZChpbnQgd2lkdGgpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsZWFzdCBzaWduaWZpY2FudCBbd2lkdGhdIGJpdHMgb2YgdGhpcyBpbnRlZ2VyLCBleHRlbmRpbmcgdGhlCiAgICogaGlnaGVzdCByZXRhaW5lZCBiaXQgdG8gdGhlIHNpZ24uICBUaGlzIGlzIHRoZSBzYW1lIGFzIHRydW5jYXRpbmcgdGhlIHZhbHVlCiAgICogdG8gZml0IGluIFt3aWR0aF0gYml0cyB1c2luZyBhbiBzaWduZWQgMi1zIGNvbXBsZW1lbnQgcmVwcmVzZW50YXRpb24uICBUaGUKICAgKiByZXR1cm5lZCB2YWx1ZSBoYXMgdGhlIHNhbWUgYml0IHZhbHVlIGluIGFsbCBwb3NpdGlvbnMgaGlnaGVyIHRoYW4gW3dpZHRoXS4KICAgKgogICAqIGBgYAogICAqIHZhciBiaWcxNSA9IG5ldyBCaWdJbnQuZnJvbSgxNSk7CiAgICogdmFyIGJpZzE2ID0gbmV3IEJpZ0ludC5mcm9tKDE2KTsKICAgKiB2YXIgYmlnMjM5ID0gbmV3IEJpZ0ludC5mcm9tKDIzOSk7CiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYtLXNpZ24gYml0LVYKICAgKiBiaWcxNi50b1NpZ25lZCg1KSA9PSAtYmlnMTYgICAvLyAgMDAwMTAwMDAgLT4gMTExMTAwMDAKICAgKiBiaWcyMzkudG9TaWduZWQoNSkgPT0gYmlnMTUgICAvLyAgMTExMDExMTEgLT4gMDAwMDExMTEKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgXgogICAqIGBgYAogICAqCiAgICogVGhpcyBvcGVyYXRpb24gY2FuIGJlIHVzZWQgdG8gc2ltdWxhdGUgYXJpdGhtZXRpYyBmcm9tIGxvdyBsZXZlbCBsYW5ndWFnZXMuCiAgICogRm9yIGV4YW1wbGUsIHRvIGluY3JlbWVudCBhbiA4IGJpdCBzaWduZWQgcXVhbnRpdHk6CiAgICoKICAgKiBgYGAKICAgKiBxID0gKHEgKyAxKS50b1NpZ25lZCg4KTsKICAgKiBgYGAKICAgKgogICAqIGBxYCB3aWxsIGNvdW50IGZyb20gYDBgIHVwIHRvIGAxMjdgLCB3cmFwIHRvIGAtMTI4YCBhbmQgY291bnQgYmFjayB1cCB0bwogICAqIGAxMjdgLgogICAqCiAgICogSWYgdGhlIGlucHV0IHZhbHVlIGZpdHMgaW4gW3dpZHRoXSBiaXRzIHdpdGhvdXQgdHJ1bmNhdGlvbiwgdGhlIHJlc3VsdCBpcwogICAqIHRoZSBzYW1lIGFzIHRoZSBpbnB1dC4gIFRoZSBtaW5pbXVtIHdpZHRoIG5lZWRlZCB0byBhdm9pZCB0cnVuY2F0aW9uIG9mIGB4YAogICAqIGlzIGB4LmJpdExlbmd0aCArIDFgLCBpLmUuCiAgICoKICAgKiBgYGAKICAgKiB4ID09IHgudG9TaWduZWQoeC5iaXRMZW5ndGggKyAxKTsKICAgKiBgYGAKICAgKi8KICBCaWdJbnQgdG9TaWduZWQoaW50IHdpZHRoKTsKCiAgLyoqCiAgICogV2hldGhlciB0aGlzIGJpZyBpbnRlZ2VyIGNhbiBiZSByZXByZXNlbnRlZCBhcyBhbiBgaW50YCB3aXRob3V0IGxvc2luZwogICAqIHByZWNpc2lvbi4KICAgKgogICAqIFdhcm5pbmc6IHRoaXMgZnVuY3Rpb24gbWF5IGdpdmUgYSBkaWZmZXJlbnQgcmVzdWx0IG9uCiAgICogZGFydDJqcywgZGV2IGNvbXBpbGVyLCBhbmQgdGhlIFZNLCBkdWUgdG8gdGhlIGRpZmZlcmVuY2VzIGluCiAgICogaW50ZWdlciBwcmVjaXNpb24uCiAgICovCiAgYm9vbCBnZXQgaXNWYWxpZEludDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGlzIFtCaWdJbnRdIGFzIGFuIFtpbnRdLgogICAqCiAgICogSWYgdGhlIG51bWJlciBkb2VzIG5vdCBmaXQsIGNsYW1wcyB0byB0aGUgbWF4IChvciBtaW4pCiAgICogaW50ZWdlci4KICAgKgogICAqIFdhcm5pbmc6IHRoZSBjbGFtcGluZyBiZWhhdmVzIGRpZmZlcmVudGx5IG9uIGRhcnQyanMsIGRldgogICAqIGNvbXBpbGVyLCBhbmQgdGhlIFZNLCBkdWUgdG8gdGhlIGRpZmZlcmVuY2VzIGluIGludGVnZXIKICAgKiBwcmVjaXNpb24uCiAgICovCiAgaW50IHRvSW50KCk7CgogIC8qKgogICAqIFJldHVybnMgdGhpcyBbQmlnSW50XSBhcyBhIFtkb3VibGVdLgogICAqCiAgICogSWYgdGhlIG51bWJlciBpcyBub3QgcmVwcmVzZW50YWJsZSBhcyBhIFtkb3VibGVdLCBhbgogICAqIGFwcHJveGltYXRpb24gaXMgcmV0dXJuZWQuIEZvciBudW1lcmljYWxseSBsYXJnZSBpbnRlZ2VycywgdGhlCiAgICogYXBwcm94aW1hdGlvbiBtYXkgYmUgaW5maW5pdGUuCiAgICovCiAgZG91YmxlIHRvRG91YmxlKCk7CgogIC8qKgogICAqIFJldHVybnMgYSBTdHJpbmctcmVwcmVzZW50YXRpb24gb2YgdGhpcyBpbnRlZ2VyLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmluZyBpcyBwYXJzYWJsZSBieSBbcGFyc2VdLgogICAqIEZvciBhbnkgYEJpZ0ludGAgYGlgLCBpdCBpcyBndWFyYW50ZWVkIHRoYXQKICAgKiBgaSA9PSBCaWdJbnQucGFyc2UoaS50b1N0cmluZygpKWAuCiAgICovCiAgU3RyaW5nIHRvU3RyaW5nKCk7CgogIC8qKgogICAqIENvbnZlcnRzIFt0aGlzXSB0byBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBpbiB0aGUgZ2l2ZW4gW3JhZGl4XS4KICAgKgogICAqIEluIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24sIGxvd2VyLWNhc2UgbGV0dGVycyBhcmUgdXNlZCBmb3IgZGlnaXRzIGFib3ZlCiAgICogJzknLCB3aXRoICdhJyBiZWluZyAxMCBhbiAneicgYmVpbmcgMzUuCiAgICoKICAgKiBUaGUgW3JhZGl4XSBhcmd1bWVudCBtdXN0IGJlIGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIDIgdG8gMzYuCiAgICovCiAgU3RyaW5nIHRvUmFkaXhTdHJpbmcoaW50IHJhZGl4KTsKfQqBoABOTjwBEwEEIQQ2IyIiAQZMDAVHQQVBR0kkBU9OUCkFOjUFUCQGPAEGTAwFSwsGPwFAKwEGMQVGBhABBjAFTCoGFwEZIwEcIwEfIwEZIwEGIwVPBUEFDwklJSAhISgpKAkGJAEGIAVQSC4FPAVDBiMBBkwFMSxRBiIBBkIFSykFSEsLBTIGJwEGQwVIQBoFMgYnAQYcBUxNHQVGIQYjAQYbBUxPGwVEJwYjAQYlBUxNKQVFJwYjAQYjBUY4BSwGFwEoIQExIgErIQE0IgEGHwVQRQYfAQZMBU5OTgVNKgUJJQU2NjY2NjY2NgkGFQEGKwU6JgYQASgTAScSAScXAQYwBS8FMAVQNwYcAQZHBT8PBjIBBkQXBSUFMgYxJQEGSgVKLwU+NgUzBUIGHAEGSVE1BQlJCQVRMgUJIAkFRgVNUCIFCSUJBiABBk9RUFEFCSYmKDg8PDgJBVE5BQkeCQVODAVPUSAFCScJBh4BBkwQBTtCGAYXAQYoBTwOBT89EAYPAQYqBTpEJAYVAQY2BTExKAYVAQZGBVAtBUMGIwIBFWRhcnQ6Y29yZS9iaWdpbnQuZGFydCpvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9ib29sLmRhcnSKvS8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBUaGUgcmVzZXJ2ZWQgd29yZHMgYHRydWVgIGFuZCBgZmFsc2VgIGRlbm90ZSBvYmplY3RzIHRoYXQgYXJlIHRoZSBvbmx5IHR3bwogKiBpbnN0YW5jZXMgb2YgdGhpcyBjbGFzcy4KICoKICogSXQgaXMgYSBjb21waWxlLXRpbWUgZXJyb3IgZm9yIGEgY2xhc3MgdG8gYXR0ZW1wdCB0byBleHRlbmQgb3IgaW1wbGVtZW50CiAqIGJvb2wuCiAqLwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIGJvb2wgewogIC8qKgogICAqIFJldHVybnMgdGhlIGJvb2xlYW4gdmFsdWUgb2YgdGhlIGVudmlyb25tZW50IGRlY2xhcmF0aW9uIFtuYW1lXS4KICAgKgogICAqIFRoZSBib29sZWFuIHZhbHVlIG9mIHRoZSBkZWNsYXJhdGlvbiBpcyBgdHJ1ZWAgaWYgdGhlIGRlY2xhcmVkIHZhbHVlIGlzCiAgICogdGhlIHN0cmluZyBgInRydWUiYCwgYW5kIGBmYWxzZWAgaWYgdGhlIHZhbHVlIGlzIGAiZmFsc2UiYC4KICAgKgogICAqIEluIGFsbCBvdGhlciBjYXNlcywgaW5jbHVkaW5nIHdoZW4gdGhlcmUgaXMgbm8gZGVjbGFyYXRpb24gZm9yIGBuYW1lYCwKICAgKiB0aGUgcmVzdWx0IGlzIHRoZSBbZGVmYXVsdFZhbHVlXS4KICAgKgogICAqIFRoZSByZXN1bHQgaXMgdGhlIHNhbWUgYXMgd291bGQgYmUgcmV0dXJuZWQgYnk6CiAgICogYGBgZGFydAogICAqIChjb25zdCBTdHJpbmcuZnJvbUVudmlyb25tZW50KG5hbWUpID09ICJ0cnVlIikKICAgKiAgICAgPyB0cnVlCiAgICogICAgIDogKGNvbnN0IFN0cmluZy5mcm9tRW52aXJvbm1lbnQobmFtZSkgPT0gImZhbHNlIikKICAgKiAgICAgICAgID8gZmFsc2UKICAgKiAgICAgICAgIDogZGVmYXVsdFZhbHVlCiAgICogYGBgCiAgICogRXhhbXBsZToKICAgKiBgYGBkYXJ0CiAgICogY29uc3QgbG9nZ2luZ0ZsYWcgPSBjb25zdCBib29sLmZyb21FbnZpcm9ubWVudCgibG9nZ2luZyIpOwogICAqIGBgYAogICAqIElmIHlvdSB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCB0cnV0aC1zdHJpbmcgdGhhbiBgInRydWUiYCwgeW91IGNhbiB1c2UgdGhlCiAgICogW1N0cmluZy5mcm9tRW52aXJvbm1lbnRdIGNvbnN0cnVjdG9yIGRpcmVjdGx5OgogICAqIGBgYGRhcnQKICAgKiBjb25zdCBpc0xvZ2dpbmdPbiA9IChjb25zdCBTdHJpbmcuZnJvbUVudmlyb25tZW50KCJsb2dnaW5nIikgPT0gIm9uIik7CiAgICogYGBgCiAgICovCiAgLy8gVGhlIC5mcm9tRW52aXJvbm1lbnQoKSBjb25zdHJ1Y3RvcnMgYXJlIHNwZWNpYWwgaW4gdGhhdCB3ZSBkbyBub3Qgd2FudAogIC8vIHVzZXJzIHRvIGNhbGwgdGhlbSB1c2luZyAibmV3Ii4gV2UgcHJvaGliaXQgdGhhdCBieSBnaXZpbmcgdGhlbSBib2RpZXMKICAvLyB0aGF0IHRocm93LCBldmVuIHRob3VnaCBjb25zdCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBhbGxvd2VkIHRvIGhhdmUgYm9kaWVzLgogIC8vIERpc2FibGUgdGhvc2Ugc3RhdGljIGVycm9ycy4KICAvL2lnbm9yZTogY29uc3RfY29uc3RydWN0b3Jfd2l0aF9ib2R5CiAgLy9pZ25vcmU6IGNvbnN0X2ZhY3RvcnkKICBleHRlcm5hbCBjb25zdCBmYWN0b3J5IGJvb2wuZnJvbUVudmlyb25tZW50KFN0cmluZyBuYW1lLAogICAgICB7Ym9vbCBkZWZhdWx0VmFsdWUgPSBmYWxzZX0pOwoKICBleHRlcm5hbCBpbnQgZ2V0IGhhc2hDb2RlOwoKICAvLy8gVGhlIGxvZ2ljYWwgY29uanVuY3Rpb24gKCJhbmQiKSBvZiB0aGlzIGFuZCBbb3RoZXJdLgogIC8vLwogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBib3RoIHRoaXMgYW5kIFtvdGhlcl0gYXJlIGB0cnVlYCwgYW5kIGBmYWxzZWAgb3RoZXJ3aXNlLgogIC8vVE9ETyhscm4pOiBSZW1vdmUgImFzIGJvb2wiIGluIERhcnQgMi4KICBAU2luY2UoIjIuMSIpCiAgYm9vbCBvcGVyYXRvciAmKGJvb2wgb3RoZXIpID0+IChvdGhlciBhcyBib29sKSAmJiB0aGlzOwoKICAvLy8gVGhlIGxvZ2ljYWwgZGlzanVuY3Rpb24gKCJpbmNsdXNpdmUgb3IiKSBvZiB0aGlzIGFuZCBbb3RoZXJdLgogIC8vLwogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBlaXRoZXIgdGhpcyBvciBbb3RoZXJdIGlzIGB0cnVlYCwgYW5kIGBmYWxzZWAgb3RoZXJ3aXNlLgogIEBTaW5jZSgiMi4xIikKICBib29sIG9wZXJhdG9yIHwoYm9vbCBvdGhlcikgPT4gKG90aGVyIGFzIGJvb2wpIHx8IHRoaXM7CgogIC8vLyBUaGUgbG9naWNhbCBleGNsdXNpdmUgZGlzanVuY3Rpb24gKCJleGNsdXNpdmUgb3IiKSBvZiB0aGlzIGFuZCBbb3RoZXJdLgogIC8vLwogIC8vLyBSZXR1cm5zIHdoZXRoZXIgdGhpcyBhbmQgW290aGVyXSBhcmUgbmVpdGhlciBib3RoIGB0cnVlYCBub3IgYm90aCBgZmFsc2VgLgogIEBTaW5jZSgiMi4xIikKICBib29sIG9wZXJhdG9yIF4oYm9vbCBvdGhlcikgPT4gIShvdGhlciBhcyBib29sKSA9PSB0aGlzOwoKICAvKioKICAgKiBSZXR1cm5zIGVpdGhlciBgInRydWUiYCBmb3IgYHRydWVgIGFuZCBgImZhbHNlImAgZm9yIGBmYWxzZWAuCiAgICovCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuIHRoaXMgPyAidHJ1ZSIgOiAiZmFsc2UiOwogIH0KfQpRAE5OPAETAQROHANMCQQaDQZGBU1BBUwnBTUNNBA7FRwJDg1ACVA0DUwJBkxMUCIoGjskAR0BOwZRKxA6AUQGURA6AU4GURA7AQZDBhYkBAIBE2RhcnQ6Y29yZS9ib29sLmRhcnQvb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9ib29sX3BhdGNoLmRhcnSCDC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKQHBhdGNoCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgYm9vbCB7CiAgQHBhdGNoCiAgY29uc3QgZmFjdG9yeSBib29sLmZyb21FbnZpcm9ubWVudChTdHJpbmcgbmFtZSwge2Jvb2wgZGVmYXVsdFZhbHVlOiBmYWxzZX0pCiAgICAgIG5hdGl2ZSAiQm9vbF9mcm9tRW52aXJvbm1lbnQiOwoKICBAcGF0Y2gKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHRoaXMgPyAxMjMxIDogMTIzNzsKCiAgaW50IGdldCBfaWRlbnRpdHlIYXNoQ29kZSA9PiB0aGlzID8gMTIzMSA6IDEyMzc7Cn0KFABOTjwBHgEHGg0JTiUBCSoBMwIBH2RhcnQ6Y29yZS1wYXRjaC9ib29sX3BhdGNoLmRhcnQvb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvZGF0ZV90aW1lLmRhcnTAAGvyLy8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIEFuIGluc3RhbnQgaW4gdGltZSwgc3VjaCBhcyBKdWx5IDIwLCAxOTY5LCA4OjE4cG0gR01ULgogKgogKiBEYXRlVGltZXMgY2FuIHJlcHJlc2VudCB0aW1lIHZhbHVlcyB0aGF0IGFyZSBhdCBhIGRpc3RhbmNlIG9mIGF0IG1vc3QKICogMTAwLDAwMCwwMDAgZGF5cyBmcm9tIGVwb2NoICgxOTcwLTAxLTAxIFVUQyk6IC0yNzE4MjEtMDQtMjAgdG8gMjc1NzYwLTA5LTEzLgogKgogKiBDcmVhdGUgYSBEYXRlVGltZSBvYmplY3QgYnkgdXNpbmcgb25lIG9mIHRoZSBjb25zdHJ1Y3RvcnMKICogb3IgYnkgcGFyc2luZyBhIGNvcnJlY3RseSBmb3JtYXR0ZWQgc3RyaW5nLAogKiB3aGljaCBjb21wbGllcyB3aXRoIGEgc3Vic2V0IG9mIElTTyA4NjAxLgogKiBOb3RlIHRoYXQgaG91cnMgYXJlIHNwZWNpZmllZCBiZXR3ZWVuIDAgYW5kIDIzLAogKiBhcyBpbiBhIDI0LWhvdXIgY2xvY2suCiAqIEZvciBleGFtcGxlOgogKgogKiBgYGAKICogdmFyIG5vdyA9IG5ldyBEYXRlVGltZS5ub3coKTsKICogdmFyIGJlcmxpbldhbGxGZWxsID0gbmV3IERhdGVUaW1lLnV0YygxOTg5LCAxMSwgOSk7CiAqIHZhciBtb29uTGFuZGluZyA9IERhdGVUaW1lLnBhcnNlKCIxOTY5LTA3LTIwIDIwOjE4OjA0WiIpOyAgLy8gODoxOHBtCiAqIGBgYAogKgogKiBBIERhdGVUaW1lIG9iamVjdCBpcyBhbmNob3JlZCBlaXRoZXIgaW4gdGhlIFVUQyB0aW1lIHpvbmUKICogb3IgaW4gdGhlIGxvY2FsIHRpbWUgem9uZSBvZiB0aGUgY3VycmVudCBjb21wdXRlcgogKiB3aGVuIHRoZSBvYmplY3QgaXMgY3JlYXRlZC4KICoKICogT25jZSBjcmVhdGVkLCBuZWl0aGVyIHRoZSB2YWx1ZSBub3IgdGhlIHRpbWUgem9uZQogKiBvZiBhIERhdGVUaW1lIG9iamVjdCBtYXkgYmUgY2hhbmdlZC4KICoKICogWW91IGNhbiB1c2UgcHJvcGVydGllcyB0byBnZXQKICogdGhlIGluZGl2aWR1YWwgdW5pdHMgb2YgYSBEYXRlVGltZSBvYmplY3QuCiAqCiAqIGBgYAogKiBhc3NlcnQoYmVybGluV2FsbEZlbGwubW9udGggPT0gMTEpOwogKiBhc3NlcnQobW9vbkxhbmRpbmcuaG91ciA9PSAyMCk7CiAqIGBgYAogKgogKiBGb3IgY29udmVuaWVuY2UgYW5kIHJlYWRhYmlsaXR5LAogKiB0aGUgRGF0ZVRpbWUgY2xhc3MgcHJvdmlkZXMgYSBjb25zdGFudCBmb3IgZWFjaCBkYXkgYW5kIG1vbnRoCiAqIG5hbWUgLSBmb3IgZXhhbXBsZSwgW2F1Z3VzdF0gYW5kIFtmcmlkYXldLgogKiBZb3UgY2FuIHVzZSB0aGVzZSBjb25zdGFudHMgdG8gaW1wcm92ZSBjb2RlIHJlYWRhYmlsaXR5OgogKgogKiBgYGAKICogdmFyIGJlcmxpbldhbGxGZWxsID0gbmV3IERhdGVUaW1lLnV0YygxOTg5LCBEYXRlVGltZS5ub3ZlbWJlciwgOSk7CiAqIGFzc2VydChiZXJsaW5XYWxsRmVsbC53ZWVrZGF5ID09IERhdGVUaW1lLnRodXJzZGF5KTsKICogYGBgCiAqCiAqIERheSBhbmQgbW9udGggdmFsdWVzIGJlZ2luIGF0IDEsIGFuZCB0aGUgd2VlayBzdGFydHMgb24gTW9uZGF5LgogKiBUaGF0IGlzLCB0aGUgY29uc3RhbnRzIFtqYW51YXJ5XSBhbmQgW21vbmRheV0gYXJlIGJvdGggMS4KICoKICogIyMgV29ya2luZyB3aXRoIFVUQyBhbmQgbG9jYWwgdGltZQogKgogKiBBIERhdGVUaW1lIG9iamVjdCBpcyBpbiB0aGUgbG9jYWwgdGltZSB6b25lCiAqIHVubGVzcyBleHBsaWNpdGx5IGNyZWF0ZWQgaW4gdGhlIFVUQyB0aW1lIHpvbmUuCiAqCiAqIGBgYAogKiB2YXIgZERheSA9IG5ldyBEYXRlVGltZS51dGMoMTk0NCwgNiwgNik7CiAqIGBgYAogKgogKiBVc2UgW2lzVXRjXSB0byBkZXRlcm1pbmUgd2hldGhlciBhIERhdGVUaW1lIG9iamVjdCBpcyBiYXNlZCBpbiBVVEMuCiAqIFVzZSB0aGUgbWV0aG9kcyBbdG9Mb2NhbF0gYW5kIFt0b1V0Y10KICogdG8gZ2V0IHRoZSBlcXVpdmFsZW50IGRhdGUvdGltZSB2YWx1ZSBzcGVjaWZpZWQgaW4gdGhlIG90aGVyIHRpbWUgem9uZS4KICogVXNlIFt0aW1lWm9uZU5hbWVdIHRvIGdldCBhbiBhYmJyZXZpYXRlZCBuYW1lIG9mIHRoZSB0aW1lIHpvbmUKICogZm9yIHRoZSBEYXRlVGltZSBvYmplY3QuCiAqIFRvIGZpbmQgdGhlIGRpZmZlcmVuY2UKICogYmV0d2VlbiBVVEMgYW5kIHRoZSB0aW1lIHpvbmUgb2YgYSBEYXRlVGltZSBvYmplY3QKICogY2FsbCBbdGltZVpvbmVPZmZzZXRdLgogKgogKiAjIyBDb21wYXJpbmcgRGF0ZVRpbWUgb2JqZWN0cwogKgogKiBUaGUgRGF0ZVRpbWUgY2xhc3MgY29udGFpbnMgc2V2ZXJhbCBoYW5keSBtZXRob2RzLAogKiBzdWNoIGFzIFtpc0FmdGVyXSwgW2lzQmVmb3JlXSwgYW5kIFtpc0F0U2FtZU1vbWVudEFzXSwKICogZm9yIGNvbXBhcmluZyBEYXRlVGltZSBvYmplY3RzLgogKgogKiBgYGAKICogYXNzZXJ0KGJlcmxpbldhbGxGZWxsLmlzQWZ0ZXIobW9vbkxhbmRpbmcpID09IHRydWUpOwogKiBhc3NlcnQoYmVybGluV2FsbEZlbGwuaXNCZWZvcmUobW9vbkxhbmRpbmcpID09IGZhbHNlKTsKICogYGBgCiAqCiAqICMjIFVzaW5nIERhdGVUaW1lIHdpdGggRHVyYXRpb24KICoKICogVXNlIHRoZSBbYWRkXSBhbmQgW3N1YnRyYWN0XSBtZXRob2RzIHdpdGggYSBbRHVyYXRpb25dIG9iamVjdAogKiB0byBjcmVhdGUgYSBuZXcgRGF0ZVRpbWUgb2JqZWN0IGJhc2VkIG9uIGFub3RoZXIuCiAqIEZvciBleGFtcGxlLCB0byBmaW5kIHRoZSBkYXRlIHRoYXQgaXMgc2l4dHkgZGF5cyAoMjQgKiA2MCBob3VycykgYWZ0ZXIgdG9kYXksCiAqIHdyaXRlOgogKgogKiBgYGAKICogdmFyIG5vdyA9IG5ldyBEYXRlVGltZS5ub3coKTsKICogdmFyIHNpeHR5RGF5c0Zyb21Ob3cgPSBub3cuYWRkKG5ldyBEdXJhdGlvbihkYXlzOiA2MCkpOwogKiBgYGAKICoKICogVG8gZmluZCBvdXQgaG93IG11Y2ggdGltZSBpcyBiZXR3ZWVuIHR3byBEYXRlVGltZSBvYmplY3RzIHVzZQogKiBbZGlmZmVyZW5jZV0sIHdoaWNoIHJldHVybnMgYSBbRHVyYXRpb25dIG9iamVjdDoKICoKICogYGBgCiAqIHZhciBkaWZmZXJlbmNlID0gYmVybGluV2FsbEZlbGwuZGlmZmVyZW5jZShtb29uTGFuZGluZyk7CiAqIGFzc2VydChkaWZmZXJlbmNlLmluRGF5cyA9PSA3NDE2KTsKICogYGBgCiAqCiAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGRhdGVzIGluIGRpZmZlcmVudCB0aW1lIHpvbmVzCiAqIGlzIGp1c3QgdGhlIG51bWJlciBvZiBuYW5vc2Vjb25kcyBiZXR3ZWVuIHRoZSB0d28gcG9pbnRzIGluIHRpbWUuCiAqIEl0IGRvZXNuJ3QgdGFrZSBjYWxlbmRhciBkYXlzIGludG8gYWNjb3VudC4KICogVGhhdCBtZWFucyB0aGF0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIG1pZG5pZ2h0cyBpbiBsb2NhbCB0aW1lIG1heSBiZQogKiBsZXNzIHRoYW4gMjQgaG91cnMgdGltZXMgdGhlIG51bWJlciBvZiBkYXlzIGJldHdlZW4gdGhlbSwKICogaWYgdGhlcmUgaXMgYSBkYXlsaWdodCBzYXZpbmcgY2hhbmdlIGluIGJldHdlZW4uCiAqIElmIHRoZSBkaWZmZXJlbmNlIGFib3ZlIGlzIGNhbGN1bGF0ZWQgdXNpbmcgQXVzdHJhbGlhbiBsb2NhbCB0aW1lLCB0aGUKICogZGlmZmVyZW5jZSBpcyA3NDE1IGRheXMgYW5kIDIzIGhvdXJzLCB3aGljaCBpcyBvbmx5IDc0MTUgd2hvbGUgZGF5cyBhcwogKiByZXBvcnRlZCBieSBgaW5EYXlzYC4KICoKICogIyMgT3RoZXIgcmVzb3VyY2VzCiAqCiAqIFNlZSBbRHVyYXRpb25dIHRvIHJlcHJlc2VudCBhIHNwYW4gb2YgdGltZS4KICogU2VlIFtTdG9wd2F0Y2hdIHRvIG1lYXN1cmUgdGltZXNwYW5zLgogKgogKiBUaGUgRGF0ZVRpbWUgY2xhc3MgZG9lcyBub3QgcHJvdmlkZSBpbnRlcm5hdGlvbmFsaXphdGlvbi4KICogVG8gaW50ZXJuYXRpb25hbGl6ZSB5b3VyIGNvZGUsIHVzZQogKiB0aGUgW2ludGxdKGh0dHBzOi8vcHViLmRhcnRsYW5nLm9yZy9wYWNrYWdlcy9pbnRsKSBwYWNrYWdlLgogKgogKi8KY2xhc3MgRGF0ZVRpbWUgaW1wbGVtZW50cyBDb21wYXJhYmxlPERhdGVUaW1lPiB7CiAgLy8gV2Vla2RheSBjb25zdGFudHMgdGhhdCBhcmUgcmV0dXJuZWQgYnkgW3dlZWtkYXldIG1ldGhvZDoKICBzdGF0aWMgY29uc3QgaW50IG1vbmRheSA9IDE7CiAgc3RhdGljIGNvbnN0IGludCB0dWVzZGF5ID0gMjsKICBzdGF0aWMgY29uc3QgaW50IHdlZG5lc2RheSA9IDM7CiAgc3RhdGljIGNvbnN0IGludCB0aHVyc2RheSA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBmcmlkYXkgPSA1OwogIHN0YXRpYyBjb25zdCBpbnQgc2F0dXJkYXkgPSA2OwogIHN0YXRpYyBjb25zdCBpbnQgc3VuZGF5ID0gNzsKICBzdGF0aWMgY29uc3QgaW50IGRheXNQZXJXZWVrID0gNzsKCiAgLy8gTW9udGggY29uc3RhbnRzIHRoYXQgYXJlIHJldHVybmVkIGJ5IHRoZSBbbW9udGhdIGdldHRlci4KICBzdGF0aWMgY29uc3QgaW50IGphbnVhcnkgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgZmVicnVhcnkgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgbWFyY2ggPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgYXByaWwgPSA0OwogIHN0YXRpYyBjb25zdCBpbnQgbWF5ID0gNTsKICBzdGF0aWMgY29uc3QgaW50IGp1bmUgPSA2OwogIHN0YXRpYyBjb25zdCBpbnQganVseSA9IDc7CiAgc3RhdGljIGNvbnN0IGludCBhdWd1c3QgPSA4OwogIHN0YXRpYyBjb25zdCBpbnQgc2VwdGVtYmVyID0gOTsKICBzdGF0aWMgY29uc3QgaW50IG9jdG9iZXIgPSAxMDsKICBzdGF0aWMgY29uc3QgaW50IG5vdmVtYmVyID0gMTE7CiAgc3RhdGljIGNvbnN0IGludCBkZWNlbWJlciA9IDEyOwogIHN0YXRpYyBjb25zdCBpbnQgbW9udGhzUGVyWWVhciA9IDEyOwoKICAvKioKICAgKiBUaGUgdmFsdWUgb2YgdGhpcyBEYXRlVGltZS4KICAgKgogICAqIFRoZSBjb250ZW50IG9mIHRoaXMgZmllbGQgaXMgaW1wbGVtZW50YXRpb24gZGVwZW5kZW50LiBPbiBKYXZhU2NyaXB0IGl0IGlzCiAgICogZXF1YWwgdG8gW21pbGxpc2Vjb25kc1NpbmNlRXBvY2hdLiBPbiB0aGUgVk0gaXQgaXMgZXF1YWwgdG8KICAgKiBbbWljcm9zZWNvbmRzU2luY2VFcG9jaF0uCiAgICovCiAgZmluYWwgaW50IF92YWx1ZTsKCiAgLyoqCiAgICogVHJ1ZSBpZiB0aGlzIFtEYXRlVGltZV0gaXMgc2V0IHRvIFVUQyB0aW1lLgogICAqCiAgICogYGBgCiAgICogdmFyIGREYXkgPSBuZXcgRGF0ZVRpbWUudXRjKDE5NDQsIDYsIDYpOwogICAqIGFzc2VydChkRGF5LmlzVXRjKTsKICAgKiBgYGAKICAgKgogICAqLwogIGZpbmFsIGJvb2wgaXNVdGM7CgogIC8qKgogICAqIENvbnN0cnVjdHMgYSBbRGF0ZVRpbWVdIGluc3RhbmNlIHNwZWNpZmllZCBpbiB0aGUgbG9jYWwgdGltZSB6b25lLgogICAqCiAgICogRm9yIGV4YW1wbGUsCiAgICogdG8gY3JlYXRlIGEgbmV3IERhdGVUaW1lIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIDd0aCBvZiBTZXB0ZW1iZXIgMjAxNywKICAgKiA1OjMwcG0KICAgKgogICAqIGBgYAogICAqIHZhciBkZW50aXN0QXBwb2ludG1lbnQgPSBuZXcgRGF0ZVRpbWUoMjAxNywgOSwgNywgMTcsIDMwKTsKICAgKiBgYGAKICAgKi8KICBEYXRlVGltZShpbnQgeWVhciwKICAgICAgW2ludCBtb250aCA9IDEsCiAgICAgIGludCBkYXkgPSAxLAogICAgICBpbnQgaG91ciA9IDAsCiAgICAgIGludCBtaW51dGUgPSAwLAogICAgICBpbnQgc2Vjb25kID0gMCwKICAgICAgaW50IG1pbGxpc2Vjb25kID0gMCwKICAgICAgaW50IG1pY3Jvc2Vjb25kID0gMF0pCiAgICAgIDogdGhpcy5faW50ZXJuYWwoeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kLAogICAgICAgICAgICBtaWNyb3NlY29uZCwgZmFsc2UpOwoKICAvKioKICAgKiBDb25zdHJ1Y3RzIGEgW0RhdGVUaW1lXSBpbnN0YW5jZSBzcGVjaWZpZWQgaW4gdGhlIFVUQyB0aW1lIHpvbmUuCiAgICoKICAgKiBgYGAKICAgKiB2YXIgbW9vbkxhbmRpbmcgPSBuZXcgRGF0ZVRpbWUudXRjKDE5NjksIDcsIDIwLCAyMCwgMTgsIDA0KTsKICAgKiBgYGAKICAgKgogICAqIFdoZW4gZGVhbGluZyB3aXRoIGRhdGVzIG9yIGhpc3RvcmljIGV2ZW50cyBwcmVmZXIgdG8gdXNlIFVUQyBEYXRlVGltZXMsCiAgICogc2luY2UgdGhleSBhcmUgdW5hZmZlY3RlZCBieSBkYXlsaWdodC1zYXZpbmcgY2hhbmdlcyBhbmQgYXJlIHVuYWZmZWN0ZWQKICAgKiBieSB0aGUgbG9jYWwgdGltZXpvbmUuCiAgICovCiAgRGF0ZVRpbWUudXRjKGludCB5ZWFyLAogICAgICBbaW50IG1vbnRoID0gMSwKICAgICAgaW50IGRheSA9IDEsCiAgICAgIGludCBob3VyID0gMCwKICAgICAgaW50IG1pbnV0ZSA9IDAsCiAgICAgIGludCBzZWNvbmQgPSAwLAogICAgICBpbnQgbWlsbGlzZWNvbmQgPSAwLAogICAgICBpbnQgbWljcm9zZWNvbmQgPSAwXSkKICAgICAgOiB0aGlzLl9pbnRlcm5hbCh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQsCiAgICAgICAgICAgIG1pY3Jvc2Vjb25kLCB0cnVlKTsKCiAgLyoqCiAgICogQ29uc3RydWN0cyBhIFtEYXRlVGltZV0gaW5zdGFuY2Ugd2l0aCBjdXJyZW50IGRhdGUgYW5kIHRpbWUgaW4gdGhlCiAgICogbG9jYWwgdGltZSB6b25lLgogICAqCiAgICogYGBgCiAgICogdmFyIHRoaXNJbnN0YW50ID0gbmV3IERhdGVUaW1lLm5vdygpOwogICAqIGBgYAogICAqLwogIERhdGVUaW1lLm5vdygpIDogdGhpcy5fbm93KCk7CgogIC8qKgogICAqIENvbnN0cnVjdHMgYSBuZXcgW0RhdGVUaW1lXSBpbnN0YW5jZSBiYXNlZCBvbiBbZm9ybWF0dGVkU3RyaW5nXS4KICAgKgogICAqIFRoZSBbZm9ybWF0dGVkU3RyaW5nXSBtdXN0IG5vdCBiZSBgbnVsbGAuCiAgICogVGhyb3dzIGEgW0Zvcm1hdEV4Y2VwdGlvbl0gaWYgdGhlIGlucHV0IHN0cmluZyBjYW5ub3QgYmUgcGFyc2VkLgogICAqCiAgICogVGhlIGZ1bmN0aW9uIHBhcnNlcyBhIHN1YnNldCBvZiBJU08gODYwMQogICAqIHdoaWNoIGluY2x1ZGVzIHRoZSBzdWJzZXQgYWNjZXB0ZWQgYnkgUkZDIDMzMzkuCiAgICoKICAgKiBUaGUgYWNjZXB0ZWQgaW5wdXRzIGFyZSBjdXJyZW50bHk6CiAgICoKICAgKiAqIEEgZGF0ZTogQSBzaWduZWQgZm91ci10by1zaXggZGlnaXQgeWVhciwgdHdvIGRpZ2l0IG1vbnRoIGFuZAogICAqICAgdHdvIGRpZ2l0IGRheSwgb3B0aW9uYWxseSBzZXBhcmF0ZWQgYnkgYC1gIGNoYXJhY3RlcnMuCiAgICogICBFeGFtcGxlczogIjE5NzAwMTAxIiwgIi0wMDA0LTEyLTI0IiwgIjgxMDMwLTA0LTAxIi4KICAgKiAqIEFuIG9wdGlvbmFsIHRpbWUgcGFydCwgc2VwYXJhdGVkIGZyb20gdGhlIGRhdGUgYnkgZWl0aGVyIGBUYCBvciBhIHNwYWNlLgogICAqICAgVGhlIHRpbWUgcGFydCBpcyBhIHR3byBkaWdpdCBob3VyLAogICAqICAgdGhlbiBvcHRpb25hbGx5IGEgdHdvIGRpZ2l0IG1pbnV0ZXMgdmFsdWUsCiAgICogICB0aGVuIG9wdGlvbmFsbHkgYSB0d28gZGlnaXQgc2Vjb25kcyB2YWx1ZSwgYW5kCiAgICogICB0aGVuIG9wdGlvbmFsbHkgYSAnLicgb3IgJywnIGZvbGxvd2VkIGJ5IGEgb25lLXRvLXNpeCBkaWdpdCBzZWNvbmQgZnJhY3Rpb24uCiAgICogICBUaGUgbWludXRlcyBhbmQgc2Vjb25kcyBtYXkgYmUgc2VwYXJhdGVkIGZyb20gdGhlIHByZXZpb3VzIHBhcnRzIGJ5IGEKICAgKiAgICc6Jy4KICAgKiAgIEV4YW1wbGVzOiAiMTIiLCAiMTI6MzA6MjQuMTI0IiwgIjEyOjMwOjI0LDEyNCIsICIxMjMwMTAuNTAiLgogICAqICogQW4gb3B0aW9uYWwgdGltZS16b25lIG9mZnNldCBwYXJ0LAogICAqICAgcG9zc2libHkgc2VwYXJhdGVkIGZyb20gdGhlIHByZXZpb3VzIGJ5IGEgc3BhY2UuCiAgICogICBUaGUgdGltZSB6b25lIGlzIGVpdGhlciAneicgb3IgJ1onLCBvciBpdCBpcyBhIHNpZ25lZCB0d28gZGlnaXQgaG91cgogICAqICAgcGFydCBhbmQgYW4gb3B0aW9uYWwgdHdvIGRpZ2l0IG1pbnV0ZSBwYXJ0LiBUaGUgc2lnbiBtdXN0IGJlIGVpdGhlcgogICAqICAgIisiIG9yICItIiwgYW5kIGNhbiBub3QgYmUgb21pdHRlZC4KICAgKiAgIFRoZSBtaW51dGVzIG1heSBiZSBzZXBhcmF0ZWQgZnJvbSB0aGUgaG91cnMgYnkgYSAnOicuCiAgICogICBFeGFtcGxlczogIloiLCAiLTEwIiwgIiswMTozMCIsICIrMTEzMCIuCiAgICoKICAgKiBUaGlzIGluY2x1ZGVzIHRoZSBvdXRwdXQgb2YgYm90aCBbdG9TdHJpbmddIGFuZCBbdG9Jc284NjAxU3RyaW5nXSwgd2hpY2gKICAgKiB3aWxsIGJlIHBhcnNlZCBiYWNrIGludG8gYSBgRGF0ZVRpbWVgIG9iamVjdCB3aXRoIHRoZSBzYW1lIHRpbWUgYXMgdGhlCiAgICogb3JpZ2luYWwuCiAgICoKICAgKiBUaGUgcmVzdWx0IGlzIGFsd2F5cyBpbiBlaXRoZXIgbG9jYWwgdGltZSBvciBVVEMuCiAgICogSWYgYSB0aW1lIHpvbmUgb2Zmc2V0IG90aGVyIHRoYW4gVVRDIGlzIHNwZWNpZmllZCwKICAgKiB0aGUgdGltZSBpcyBjb252ZXJ0ZWQgdG8gdGhlIGVxdWl2YWxlbnQgVVRDIHRpbWUuCiAgICoKICAgKiBFeGFtcGxlcyBvZiBhY2NlcHRlZCBzdHJpbmdzOgogICAqCiAgICogKiBgIjIwMTItMDItMjcgMTM6Mjc6MDAiYAogICAqICogYCIyMDEyLTAyLTI3IDEzOjI3OjAwLjEyMzQ1NnoiYAogICAqICogYCIyMDEyLTAyLTI3IDEzOjI3OjAwLDEyMzQ1NnoiYAogICAqICogYCIyMDEyMDIyNyAxMzoyNzowMCJgCiAgICogKiBgIjIwMTIwMjI3VDEzMjcwMCJgCiAgICogKiBgIjIwMTIwMjI3ImAKICAgKiAqIGAiKzIwMTIwMjI3ImAKICAgKiAqIGAiMjAxMi0wMi0yN1QxNFoiYAogICAqICogYCIyMDEyLTAyLTI3VDE0KzAwOjAwImAKICAgKiAqIGAiLTEyMzQ1MDEwMSAwMDowMDowMCBaImA6IGluIHRoZSB5ZWFyIC0xMjM0NS4KICAgKiAqIGAiMjAwMi0wMi0yN1QxNDowMDowMC0wNTAwImA6IFNhbWUgYXMgYCIyMDAyLTAyLTI3VDE5OjAwOjAwWiJgCiAgICovCiAgLy8gVE9ETyhscm4pOiByZXN0cmljdCBpbmNvcnJlY3QgdmFsdWVzIGxpa2UgIDIwMDMtMDItMjlUNTA6NzA6ODAuCiAgLy8gT3Igbm90LCB0aGF0IG1heSBiZSBhIGJyZWFraW5nIGNoYW5nZS4KICBzdGF0aWMgRGF0ZVRpbWUgcGFyc2UoU3RyaW5nIGZvcm1hdHRlZFN0cmluZykgewogICAgdmFyIHJlID0gX3BhcnNlRm9ybWF0OwogICAgTWF0Y2ggbWF0Y2ggPSByZS5maXJzdE1hdGNoKGZvcm1hdHRlZFN0cmluZyk7CiAgICBpZiAobWF0Y2ggIT0gbnVsbCkgewogICAgICBpbnQgcGFyc2VJbnRPclplcm8oU3RyaW5nIG1hdGNoZWQpIHsKICAgICAgICBpZiAobWF0Y2hlZCA9PSBudWxsKSByZXR1cm4gMDsKICAgICAgICByZXR1cm4gaW50LnBhcnNlKG1hdGNoZWQpOwogICAgICB9CgogICAgICAvLyBQYXJzZXMgZnJhY3Rpb25hbCBzZWNvbmQgZGlnaXRzIG9mICcuKFxkezEsNn0pJyBpbnRvIHRoZSBjb21iaW5lZAogICAgICAvLyBtaWNyb3NlY29uZHMuCiAgICAgIGludCBwYXJzZU1pbGxpQW5kTWljcm9zZWNvbmRzKFN0cmluZyBtYXRjaGVkKSB7CiAgICAgICAgaWYgKG1hdGNoZWQgPT0gbnVsbCkgcmV0dXJuIDA7CiAgICAgICAgaW50IGxlbmd0aCA9IG1hdGNoZWQubGVuZ3RoOwogICAgICAgIGFzc2VydChsZW5ndGggPj0gMSk7CiAgICAgICAgYXNzZXJ0KGxlbmd0aCA8PSA2KTsKCiAgICAgICAgaW50IHJlc3VsdCA9IDA7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspIHsKICAgICAgICAgIHJlc3VsdCAqPSAxMDsKICAgICAgICAgIGlmIChpIDwgbWF0Y2hlZC5sZW5ndGgpIHsKICAgICAgICAgICAgcmVzdWx0ICs9IG1hdGNoZWQuY29kZVVuaXRBdChpKSBeIDB4MzA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KCiAgICAgIGludCB5ZWFycyA9IGludC5wYXJzZShtYXRjaFsxXSk7CiAgICAgIGludCBtb250aCA9IGludC5wYXJzZShtYXRjaFsyXSk7CiAgICAgIGludCBkYXkgPSBpbnQucGFyc2UobWF0Y2hbM10pOwogICAgICBpbnQgaG91ciA9IHBhcnNlSW50T3JaZXJvKG1hdGNoWzRdKTsKICAgICAgaW50IG1pbnV0ZSA9IHBhcnNlSW50T3JaZXJvKG1hdGNoWzVdKTsKICAgICAgaW50IHNlY29uZCA9IHBhcnNlSW50T3JaZXJvKG1hdGNoWzZdKTsKICAgICAgYm9vbCBhZGRPbmVNaWxsaXNlY29uZCA9IGZhbHNlOwogICAgICBpbnQgbWlsbGlBbmRNaWNyb3NlY29uZHMgPSBwYXJzZU1pbGxpQW5kTWljcm9zZWNvbmRzKG1hdGNoWzddKTsKICAgICAgaW50IG1pbGxpc2Vjb25kID0KICAgICAgICAgIG1pbGxpQW5kTWljcm9zZWNvbmRzIH4vIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1Blck1pbGxpc2Vjb25kOwogICAgICBpbnQgbWljcm9zZWNvbmQgPQogICAgICAgICAgbWlsbGlBbmRNaWNyb3NlY29uZHMucmVtYWluZGVyKER1cmF0aW9uLm1pY3Jvc2Vjb25kc1Blck1pbGxpc2Vjb25kKTsKICAgICAgYm9vbCBpc1V0YyA9IGZhbHNlOwogICAgICBpZiAobWF0Y2hbOF0gIT0gbnVsbCkgewogICAgICAgIC8vIHRpbWV6b25lIHBhcnQKICAgICAgICBpc1V0YyA9IHRydWU7CiAgICAgICAgaWYgKG1hdGNoWzldICE9IG51bGwpIHsKICAgICAgICAgIC8vIHRpbWV6b25lIG90aGVyIHRoYW4gJ1onIGFuZCAneicuCiAgICAgICAgICBpbnQgc2lnbiA9IChtYXRjaFs5XSA9PSAnLScpID8gLTEgOiAxOwogICAgICAgICAgaW50IGhvdXJEaWZmZXJlbmNlID0gaW50LnBhcnNlKG1hdGNoWzEwXSk7CiAgICAgICAgICBpbnQgbWludXRlRGlmZmVyZW5jZSA9IHBhcnNlSW50T3JaZXJvKG1hdGNoWzExXSk7CiAgICAgICAgICBtaW51dGVEaWZmZXJlbmNlICs9IDYwICogaG91ckRpZmZlcmVuY2U7CiAgICAgICAgICBtaW51dGUgLT0gc2lnbiAqIG1pbnV0ZURpZmZlcmVuY2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIGludCB2YWx1ZSA9IF9icm9rZW5Eb3duRGF0ZVRvVmFsdWUoeWVhcnMsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwKICAgICAgICAgIHNlY29uZCwgbWlsbGlzZWNvbmQsIG1pY3Jvc2Vjb25kLCBpc1V0Yyk7CiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7CiAgICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKCJUaW1lIG91dCBvZiByYW5nZSIsIGZvcm1hdHRlZFN0cmluZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIERhdGVUaW1lLl93aXRoVmFsdWUodmFsdWUsIGlzVXRjOiBpc1V0Yyk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oIkludmFsaWQgZGF0ZSBmb3JtYXQiLCBmb3JtYXR0ZWRTdHJpbmcpOwogICAgfQogIH0KCiAgLyoqCiAgICogQ29uc3RydWN0cyBhIG5ldyBbRGF0ZVRpbWVdIGluc3RhbmNlIGJhc2VkIG9uIFtmb3JtYXR0ZWRTdHJpbmddLgogICAqCiAgICogV29ya3MgbGlrZSBbcGFyc2VdIGV4Y2VwdCB0aGF0IHRoaXMgZnVuY3Rpb24gcmV0dXJucyBgbnVsbGAKICAgKiB3aGVyZSBbcGFyc2VdIHdvdWxkIHRocm93IGEgW0Zvcm1hdEV4Y2VwdGlvbl0uCiAgICovCiAgc3RhdGljIERhdGVUaW1lIHRyeVBhcnNlKFN0cmluZyBmb3JtYXR0ZWRTdHJpbmcpIHsKICAgIC8vIFRPRE86IE9wdGltaXplIHRvIGF2b2lkIHRocm93aW5nLgogICAgdHJ5IHsKICAgICAgcmV0dXJuIHBhcnNlKGZvcm1hdHRlZFN0cmluZyk7CiAgICB9IG9uIEZvcm1hdEV4Y2VwdGlvbiB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgc3RhdGljIGNvbnN0IGludCBfbWF4TWlsbGlzZWNvbmRzU2luY2VFcG9jaCA9IDg2NDAwMDAwMDAwMDAwMDA7CgogIC8qKgogICAqIENvbnN0cnVjdHMgYSBuZXcgW0RhdGVUaW1lXSBpbnN0YW5jZQogICAqIHdpdGggdGhlIGdpdmVuIFttaWxsaXNlY29uZHNTaW5jZUVwb2NoXS4KICAgKgogICAqIElmIFtpc1V0Y10gaXMgZmFsc2UgdGhlbiB0aGUgZGF0ZSBpcyBpbiB0aGUgbG9jYWwgdGltZSB6b25lLgogICAqCiAgICogVGhlIGNvbnN0cnVjdGVkIFtEYXRlVGltZV0gcmVwcmVzZW50cwogICAqIDE5NzAtMDEtMDFUMDA6MDA6MDBaICsgW21pbGxpc2Vjb25kc1NpbmNlRXBvY2hdIG1zIGluIHRoZSBnaXZlbgogICAqIHRpbWUgem9uZSAobG9jYWwgb3IgVVRDKS4KICAgKi8KICBleHRlcm5hbCBEYXRlVGltZS5mcm9tTWlsbGlzZWNvbmRzU2luY2VFcG9jaChpbnQgbWlsbGlzZWNvbmRzU2luY2VFcG9jaCwKICAgICAge2Jvb2wgaXNVdGMgPSBmYWxzZX0pOwoKICAvKioKICAgKiBDb25zdHJ1Y3RzIGEgbmV3IFtEYXRlVGltZV0gaW5zdGFuY2UKICAgKiB3aXRoIHRoZSBnaXZlbiBbbWljcm9zZWNvbmRzU2luY2VFcG9jaF0uCiAgICoKICAgKiBJZiBbaXNVdGNdIGlzIGZhbHNlIHRoZW4gdGhlIGRhdGUgaXMgaW4gdGhlIGxvY2FsIHRpbWUgem9uZS4KICAgKgogICAqIFRoZSBjb25zdHJ1Y3RlZCBbRGF0ZVRpbWVdIHJlcHJlc2VudHMKICAgKiAxOTcwLTAxLTAxVDAwOjAwOjAwWiArIFttaWNyb3NlY29uZHNTaW5jZUVwb2NoXSB1cyBpbiB0aGUgZ2l2ZW4KICAgKiB0aW1lIHpvbmUgKGxvY2FsIG9yIFVUQykuCiAgICovCiAgZXh0ZXJuYWwgRGF0ZVRpbWUuZnJvbU1pY3Jvc2Vjb25kc1NpbmNlRXBvY2goaW50IG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2gsCiAgICAgIHtib29sIGlzVXRjID0gZmFsc2V9KTsKCiAgLyoqCiAgICogQ29uc3RydWN0cyBhIG5ldyBbRGF0ZVRpbWVdIGluc3RhbmNlIHdpdGggdGhlIGdpdmVuIHZhbHVlLgogICAqCiAgICogSWYgW2lzVXRjXSBpcyBmYWxzZSB0aGVuIHRoZSBkYXRlIGlzIGluIHRoZSBsb2NhbCB0aW1lIHpvbmUuCiAgICovCiAgRGF0ZVRpbWUuX3dpdGhWYWx1ZSh0aGlzLl92YWx1ZSwge3RoaXMuaXNVdGN9KSB7CiAgICBpZiAobWlsbGlzZWNvbmRzU2luY2VFcG9jaC5hYnMoKSA+IF9tYXhNaWxsaXNlY29uZHNTaW5jZUVwb2NoIHx8CiAgICAgICAgKG1pbGxpc2Vjb25kc1NpbmNlRXBvY2guYWJzKCkgPT0gX21heE1pbGxpc2Vjb25kc1NpbmNlRXBvY2ggJiYKICAgICAgICAgICAgbWljcm9zZWNvbmQgIT0gMCkpIHsKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcigKICAgICAgICAgICJEYXRlVGltZSBpcyBvdXRzaWRlIHZhbGlkIHJhbmdlOiAkbWlsbGlzZWNvbmRzU2luY2VFcG9jaCIpOwogICAgfQogICAgaWYgKGlzVXRjID09IG51bGwpIHsKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcigiJ2lzVXRjJyBmbGFnIG1heSBub3QgYmUgJ251bGwnIik7CiAgICB9CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgW290aGVyXSBpcyBhIFtEYXRlVGltZV0gYXQgdGhlIHNhbWUgbW9tZW50IGFuZCBpbiB0aGUKICAgKiBzYW1lIHRpbWUgem9uZSAoVVRDIG9yIGxvY2FsKS4KICAgKgogICAqIGBgYAogICAqIHZhciBkRGF5VXRjID0gbmV3IERhdGVUaW1lLnV0YygxOTQ0LCA2LCA2KTsKICAgKiB2YXIgZERheUxvY2FsID0gZERheVV0Yy50b0xvY2FsKCk7CiAgICoKICAgKiAvLyBUaGVzZSB0d28gZGF0ZXMgYXJlIGF0IHRoZSBzYW1lIG1vbWVudCwgYnV0IGFyZSBpbiBkaWZmZXJlbnQgem9uZXMuCiAgICogYXNzZXJ0KGREYXlVdGMgIT0gZERheUxvY2FsKTsKICAgKiBgYGAKICAgKgogICAqIFNlZSBbaXNBdFNhbWVNb21lbnRBc10gZm9yIGEgY29tcGFyaXNvbiB0aGF0IGNvbXBhcmVzIG1vbWVudHMgaW4gdGltZQogICAqIGluZGVwZW5kZW50bHkgb2YgdGhlaXIgem9uZXMuCiAgICovCiAgZXh0ZXJuYWwgYm9vbCBvcGVyYXRvciA9PShkeW5hbWljIG90aGVyKTsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIFt0aGlzXSBvY2N1cnMgYmVmb3JlIFtvdGhlcl0uCiAgICoKICAgKiBUaGUgY29tcGFyaXNvbiBpcyBpbmRlcGVuZGVudAogICAqIG9mIHdoZXRoZXIgdGhlIHRpbWUgaXMgaW4gVVRDIG9yIGluIHRoZSBsb2NhbCB0aW1lIHpvbmUuCiAgICoKICAgKiBgYGAKICAgKiB2YXIgbm93ID0gbmV3IERhdGVUaW1lLm5vdygpOwogICAqIHZhciBlYXJsaWVyID0gbm93LnN1YnRyYWN0KGNvbnN0IER1cmF0aW9uKHNlY29uZHM6IDUpKTsKICAgKiBhc3NlcnQoZWFybGllci5pc0JlZm9yZShub3cpKTsKICAgKiBhc3NlcnQoIW5vdy5pc0JlZm9yZShub3cpKTsKICAgKgogICAqIC8vIFRoaXMgcmVsYXRpb24gc3RheXMgdGhlIHNhbWUsIGV2ZW4gd2hlbiBjaGFuZ2luZyB0aW1lem9uZXMuCiAgICogYXNzZXJ0KGVhcmxpZXIuaXNCZWZvcmUobm93LnRvVXRjKCkpKTsKICAgKiBhc3NlcnQoZWFybGllci50b1V0YygpLmlzQmVmb3JlKG5vdykpOwogICAqCiAgICogYXNzZXJ0KCFub3cudG9VdGMoKS5pc0JlZm9yZShub3cpKTsKICAgKiBhc3NlcnQoIW5vdy5pc0JlZm9yZShub3cudG9VdGMoKSkpOwogICAqIGBgYAogICAqLwogIGV4dGVybmFsIGJvb2wgaXNCZWZvcmUoRGF0ZVRpbWUgb3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgW3RoaXNdIG9jY3VycyBhZnRlciBbb3RoZXJdLgogICAqCiAgICogVGhlIGNvbXBhcmlzb24gaXMgaW5kZXBlbmRlbnQKICAgKiBvZiB3aGV0aGVyIHRoZSB0aW1lIGlzIGluIFVUQyBvciBpbiB0aGUgbG9jYWwgdGltZSB6b25lLgogICAqCiAgICogYGBgCiAgICogdmFyIG5vdyA9IG5ldyBEYXRlVGltZS5ub3coKTsKICAgKiB2YXIgbGF0ZXIgPSBub3cuYWRkKGNvbnN0IER1cmF0aW9uKHNlY29uZHM6IDUpKTsKICAgKiBhc3NlcnQobGF0ZXIuaXNBZnRlcihub3cpKTsKICAgKiBhc3NlcnQoIW5vdy5pc0JlZm9yZShub3cpKTsKICAgKgogICAqIC8vIFRoaXMgcmVsYXRpb24gc3RheXMgdGhlIHNhbWUsIGV2ZW4gd2hlbiBjaGFuZ2luZyB0aW1lem9uZXMuCiAgICogYXNzZXJ0KGxhdGVyLmlzQWZ0ZXIobm93LnRvVXRjKCkpKTsKICAgKiBhc3NlcnQobGF0ZXIudG9VdGMoKS5pc0FmdGVyKG5vdykpOwogICAqCiAgICogYXNzZXJ0KCFub3cudG9VdGMoKS5pc0JlZm9yZShub3cpKTsKICAgKiBhc3NlcnQoIW5vdy5pc0JlZm9yZShub3cudG9VdGMoKSkpOwogICAqIGBgYAogICAqLwogIGV4dGVybmFsIGJvb2wgaXNBZnRlcihEYXRlVGltZSBvdGhlcik7CgogIC8qKgogICAqIFJldHVybnMgdHJ1ZSBpZiBbdGhpc10gb2NjdXJzIGF0IHRoZSBzYW1lIG1vbWVudCBhcyBbb3RoZXJdLgogICAqCiAgICogVGhlIGNvbXBhcmlzb24gaXMgaW5kZXBlbmRlbnQgb2Ygd2hldGhlciB0aGUgdGltZSBpcyBpbiBVVEMgb3IgaW4gdGhlIGxvY2FsCiAgICogdGltZSB6b25lLgogICAqCiAgICogYGBgCiAgICogdmFyIG5vdyA9IG5ldyBEYXRlVGltZS5ub3coKTsKICAgKiB2YXIgbGF0ZXIgPSBub3cuYWRkKGNvbnN0IER1cmF0aW9uKHNlY29uZHM6IDUpKTsKICAgKiBhc3NlcnQoIWxhdGVyLmlzQXRTYW1lTW9tZW50QXMobm93KSk7CiAgICogYXNzZXJ0KG5vdy5pc0F0U2FtZU1vbWVudEFzKG5vdykpOwogICAqCiAgICogLy8gVGhpcyByZWxhdGlvbiBzdGF5cyB0aGUgc2FtZSwgZXZlbiB3aGVuIGNoYW5naW5nIHRpbWV6b25lcy4KICAgKiBhc3NlcnQoIWxhdGVyLmlzQXRTYW1lTW9tZW50QXMobm93LnRvVXRjKCkpKTsKICAgKiBhc3NlcnQoIWxhdGVyLnRvVXRjKCkuaXNBdFNhbWVNb21lbnRBcyhub3cpKTsKICAgKgogICAqIGFzc2VydChub3cudG9VdGMoKS5pc0F0U2FtZU1vbWVudEFzKG5vdykpOwogICAqIGFzc2VydChub3cuaXNBdFNhbWVNb21lbnRBcyhub3cudG9VdGMoKSkpOwogICAqIGBgYAogICAqLwogIGV4dGVybmFsIGJvb2wgaXNBdFNhbWVNb21lbnRBcyhEYXRlVGltZSBvdGhlcik7CgogIC8qKgogICAqIENvbXBhcmVzIHRoaXMgRGF0ZVRpbWUgb2JqZWN0IHRvIFtvdGhlcl0sCiAgICogcmV0dXJuaW5nIHplcm8gaWYgdGhlIHZhbHVlcyBhcmUgZXF1YWwuCiAgICoKICAgKiBSZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUgaWYgdGhpcyBEYXRlVGltZSBbaXNCZWZvcmVdIFtvdGhlcl0uIEl0IHJldHVybnMgMAogICAqIGlmIGl0IFtpc0F0U2FtZU1vbWVudEFzXSBbb3RoZXJdLCBhbmQgcmV0dXJucyBhIHBvc2l0aXZlIHZhbHVlIG90aGVyd2lzZQogICAqICh3aGVuIHRoaXMgW2lzQWZ0ZXJdIFtvdGhlcl0pLgogICAqLwogIGV4dGVybmFsIGludCBjb21wYXJlVG8oRGF0ZVRpbWUgb3RoZXIpOwoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IChfdmFsdWUgXiAoX3ZhbHVlID4+IDMwKSkgJiAweDNGRkZGRkZGOwoKICAvKioKICAgKiBSZXR1cm5zIHRoaXMgRGF0ZVRpbWUgdmFsdWUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZS4KICAgKgogICAqIFJldHVybnMgW3RoaXNdIGlmIGl0IGlzIGFscmVhZHkgaW4gdGhlIGxvY2FsIHRpbWUgem9uZS4KICAgKiBPdGhlcndpc2UgdGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0bzoKICAgKgogICAqIGBgYAogICAqIG5ldyBEYXRlVGltZS5mcm9tTWljcm9zZWNvbmRzU2luY2VFcG9jaChtaWNyb3NlY29uZHNTaW5jZUVwb2NoLAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1V0YzogZmFsc2UpCiAgICogYGBgCiAgICovCiAgRGF0ZVRpbWUgdG9Mb2NhbCgpIHsKICAgIGlmIChpc1V0YykgewogICAgICByZXR1cm4gRGF0ZVRpbWUuX3dpdGhWYWx1ZShfdmFsdWUsIGlzVXRjOiBmYWxzZSk7CiAgICB9CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhpcyBEYXRlVGltZSB2YWx1ZSBpbiB0aGUgVVRDIHRpbWUgem9uZS4KICAgKgogICAqIFJldHVybnMgW3RoaXNdIGlmIGl0IGlzIGFscmVhZHkgaW4gVVRDLgogICAqIE90aGVyd2lzZSB0aGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvOgogICAqCiAgICogYGBgCiAgICogbmV3IERhdGVUaW1lLmZyb21NaWNyb3NlY29uZHNTaW5jZUVwb2NoKG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2gsCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVXRjOiB0cnVlKQogICAqIGBgYAogICAqLwogIERhdGVUaW1lIHRvVXRjKCkgewogICAgaWYgKGlzVXRjKSByZXR1cm4gdGhpczsKICAgIHJldHVybiBEYXRlVGltZS5fd2l0aFZhbHVlKF92YWx1ZSwgaXNVdGM6IHRydWUpOwogIH0KCiAgc3RhdGljIFN0cmluZyBfZm91ckRpZ2l0cyhpbnQgbikgewogICAgaW50IGFic04gPSBuLmFicygpOwogICAgU3RyaW5nIHNpZ24gPSBuIDwgMCA/ICItIiA6ICIiOwogICAgaWYgKGFic04gPj0gMTAwMCkgcmV0dXJuICIkbiI7CiAgICBpZiAoYWJzTiA+PSAxMDApIHJldHVybiAiJHtzaWdufTAkYWJzTiI7CiAgICBpZiAoYWJzTiA+PSAxMCkgcmV0dXJuICIke3NpZ259MDAkYWJzTiI7CiAgICByZXR1cm4gIiR7c2lnbn0wMDAkYWJzTiI7CiAgfQoKICBzdGF0aWMgU3RyaW5nIF9zaXhEaWdpdHMoaW50IG4pIHsKICAgIGFzc2VydChuIDwgLTk5OTkgfHwgbiA+IDk5OTkpOwogICAgaW50IGFic04gPSBuLmFicygpOwogICAgU3RyaW5nIHNpZ24gPSBuIDwgMCA/ICItIiA6ICIrIjsKICAgIGlmIChhYnNOID49IDEwMDAwMCkgcmV0dXJuICIkc2lnbiRhYnNOIjsKICAgIHJldHVybiAiJHtzaWdufTAkYWJzTiI7CiAgfQoKICBzdGF0aWMgU3RyaW5nIF90aHJlZURpZ2l0cyhpbnQgbikgewogICAgaWYgKG4gPj0gMTAwKSByZXR1cm4gIiR7bn0iOwogICAgaWYgKG4gPj0gMTApIHJldHVybiAiMCR7bn0iOwogICAgcmV0dXJuICIwMCR7bn0iOwogIH0KCiAgc3RhdGljIFN0cmluZyBfdHdvRGlnaXRzKGludCBuKSB7CiAgICBpZiAobiA+PSAxMCkgcmV0dXJuICIke259IjsKICAgIHJldHVybiAiMCR7bn0iOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZyBmb3IgdGhpcyBpbnN0YW5jZS4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJpbmcgaXMgY29uc3RydWN0ZWQgZm9yIHRoZSB0aW1lIHpvbmUgb2YgdGhpcyBpbnN0YW5jZS4KICAgKiBUaGUgYHRvU3RyaW5nKClgIG1ldGhvZCBwcm92aWRlcyBhIHNpbXBseSBmb3JtYXR0ZWQgc3RyaW5nLgogICAqIEl0IGRvZXMgbm90IHN1cHBvcnQgaW50ZXJuYXRpb25hbGl6ZWQgc3RyaW5ncy4KICAgKiBVc2UgdGhlIFtpbnRsXShodHRwczovL3B1Yi5kYXJ0bGFuZy5vcmcvcGFja2FnZXMvaW50bCkgcGFja2FnZQogICAqIGF0IHRoZSBwdWIgc2hhcmVkIHBhY2thZ2VzIHJlcG8uCiAgICoKICAgKiBUaGUgcmVzdWx0aW5nIHN0cmluZyBjYW4gYmUgcGFyc2VkIGJhY2sgdXNpbmcgW3BhcnNlXS4KICAgKi8KICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmcgeSA9IF9mb3VyRGlnaXRzKHllYXIpOwogICAgU3RyaW5nIG0gPSBfdHdvRGlnaXRzKG1vbnRoKTsKICAgIFN0cmluZyBkID0gX3R3b0RpZ2l0cyhkYXkpOwogICAgU3RyaW5nIGggPSBfdHdvRGlnaXRzKGhvdXIpOwogICAgU3RyaW5nIG1pbiA9IF90d29EaWdpdHMobWludXRlKTsKICAgIFN0cmluZyBzZWMgPSBfdHdvRGlnaXRzKHNlY29uZCk7CiAgICBTdHJpbmcgbXMgPSBfdGhyZWVEaWdpdHMobWlsbGlzZWNvbmQpOwogICAgU3RyaW5nIHVzID0gbWljcm9zZWNvbmQgPT0gMCA/ICIiIDogX3RocmVlRGlnaXRzKG1pY3Jvc2Vjb25kKTsKICAgIGlmIChpc1V0YykgewogICAgICByZXR1cm4gIiR5LSRtLSRkICRoOiRtaW46JHNlYy4kbXMke3VzfVoiOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICIkeS0kbS0kZCAkaDokbWluOiRzZWMuJG1zJHVzIjsKICAgIH0KICB9CgogIC8qKgogICAqIFJldHVybnMgYW4gSVNPLTg2MDEgZnVsbC1wcmVjaXNpb24gZXh0ZW5kZWQgZm9ybWF0IHJlcHJlc2VudGF0aW9uLgogICAqCiAgICogVGhlIGZvcm1hdCBpcyBgeXl5eS1NTS1kZFRISDptbTpzcy5tbW11dXVaYCBmb3IgVVRDIHRpbWUsIGFuZAogICAqIGB5eXl5LU1NLWRkVEhIOm1tOnNzLm1tbXV1dWAgKG5vIHRyYWlsaW5nICJaIikgZm9yIGxvY2FsL25vbi1VVEMgdGltZSwKICAgKiB3aGVyZToKICAgKgogICAqICogYHl5eXlgIGlzIGEsIHBvc3NpYmx5IG5lZ2F0aXZlLCBmb3VyIGRpZ2l0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyLAogICAqICAgaWYgdGhlIHllYXIgaXMgaW4gdGhlIHJhbmdlIC05OTk5IHRvIDk5OTksCiAgICogICBvdGhlcndpc2UgaXQgaXMgYSBzaWduZWQgc2l4IGRpZ2l0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyLgogICAqICogYE1NYCBpcyB0aGUgbW9udGggaW4gdGhlIHJhbmdlIDAxIHRvIDEyLAogICAqICogYGRkYCBpcyB0aGUgZGF5IG9mIHRoZSBtb250aCBpbiB0aGUgcmFuZ2UgMDEgdG8gMzEsCiAgICogKiBgSEhgIGFyZSBob3VycyBpbiB0aGUgcmFuZ2UgMDAgdG8gMjMsCiAgICogKiBgbW1gIGFyZSBtaW51dGVzIGluIHRoZSByYW5nZSAwMCB0byA1OSwKICAgKiAqIGBzc2AgYXJlIHNlY29uZHMgaW4gdGhlIHJhbmdlIDAwIHRvIDU5IChubyBsZWFwIHNlY29uZHMpLAogICAqICogYG1tbWAgYXJlIG1pbGxpc2Vjb25kcyBpbiB0aGUgcmFuZ2UgMDAwIHRvIDk5OSwgYW5kCiAgICogKiBgdXV1YCBhcmUgbWljcm9zZWNvbmRzIGluIHRoZSByYW5nZSAwMDEgdG8gOTk5LiBJZiBbbWljcm9zZWNvbmRdIGVxdWFscwogICAqICAgMCwgdGhlbiB0aGlzIHBhcnQgaXMgb21pdHRlZC4KICAgKgogICAqIFRoZSByZXN1bHRpbmcgc3RyaW5nIGNhbiBiZSBwYXJzZWQgYmFjayB1c2luZyBbcGFyc2VdLgogICAqLwogIFN0cmluZyB0b0lzbzg2MDFTdHJpbmcoKSB7CiAgICBTdHJpbmcgeSA9CiAgICAgICAgKHllYXIgPj0gLTk5OTkgJiYgeWVhciA8PSA5OTk5KSA/IF9mb3VyRGlnaXRzKHllYXIpIDogX3NpeERpZ2l0cyh5ZWFyKTsKICAgIFN0cmluZyBtID0gX3R3b0RpZ2l0cyhtb250aCk7CiAgICBTdHJpbmcgZCA9IF90d29EaWdpdHMoZGF5KTsKICAgIFN0cmluZyBoID0gX3R3b0RpZ2l0cyhob3VyKTsKICAgIFN0cmluZyBtaW4gPSBfdHdvRGlnaXRzKG1pbnV0ZSk7CiAgICBTdHJpbmcgc2VjID0gX3R3b0RpZ2l0cyhzZWNvbmQpOwogICAgU3RyaW5nIG1zID0gX3RocmVlRGlnaXRzKG1pbGxpc2Vjb25kKTsKICAgIFN0cmluZyB1cyA9IG1pY3Jvc2Vjb25kID09IDAgPyAiIiA6IF90aHJlZURpZ2l0cyhtaWNyb3NlY29uZCk7CiAgICBpZiAoaXNVdGMpIHsKICAgICAgcmV0dXJuICIkeS0kbS0ke2R9VCRoOiRtaW46JHNlYy4kbXMke3VzfVoiOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICIkeS0kbS0ke2R9VCRoOiRtaW46JHNlYy4kbXMkdXMiOwogICAgfQogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBbRGF0ZVRpbWVdIGluc3RhbmNlIHdpdGggW2R1cmF0aW9uXSBhZGRlZCB0byBbdGhpc10uCiAgICoKICAgKiBgYGAKICAgKiB2YXIgdG9kYXkgPSBuZXcgRGF0ZVRpbWUubm93KCk7CiAgICogdmFyIGZpZnR5RGF5c0Zyb21Ob3cgPSB0b2RheS5hZGQobmV3IER1cmF0aW9uKGRheXM6IDUwKSk7CiAgICogYGBgCiAgICoKICAgKiBOb3RpY2UgdGhhdCB0aGUgZHVyYXRpb24gYmVpbmcgYWRkZWQgaXMgYWN0dWFsbHkgNTAgKiAyNCAqIDYwICogNjAKICAgKiBzZWNvbmRzLiBJZiB0aGUgcmVzdWx0aW5nIGBEYXRlVGltZWAgaGFzIGEgZGlmZmVyZW50IGRheWxpZ2h0IHNhdmluZyBvZmZzZXQKICAgKiB0aGFuIGB0aGlzYCwgdGhlbiB0aGUgcmVzdWx0IHdvbid0IGhhdmUgdGhlIHNhbWUgdGltZS1vZi1kYXkgYXMgYHRoaXNgLCBhbmQKICAgKiBtYXkgbm90IGV2ZW4gaGl0IHRoZSBjYWxlbmRhciBkYXRlIDUwIGRheXMgbGF0ZXIuCiAgICoKICAgKiBCZSBjYXJlZnVsIHdoZW4gd29ya2luZyB3aXRoIGRhdGVzIGluIGxvY2FsIHRpbWUuCiAgICovCiAgZXh0ZXJuYWwgRGF0ZVRpbWUgYWRkKER1cmF0aW9uIGR1cmF0aW9uKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBbRGF0ZVRpbWVdIGluc3RhbmNlIHdpdGggW2R1cmF0aW9uXSBzdWJ0cmFjdGVkIGZyb20gW3RoaXNdLgogICAqCiAgICogYGBgCiAgICogRGF0ZVRpbWUgdG9kYXkgPSBuZXcgRGF0ZVRpbWUubm93KCk7CiAgICogRGF0ZVRpbWUgZmlmdHlEYXlzQWdvID0gdG9kYXkuc3VidHJhY3QobmV3IER1cmF0aW9uKGRheXM6IDUwKSk7CiAgICogYGBgCiAgICoKICAgKiBOb3RpY2UgdGhhdCB0aGUgZHVyYXRpb24gYmVpbmcgc3VidHJhY3RlZCBpcyBhY3R1YWxseSA1MCAqIDI0ICogNjAgKiA2MAogICAqIHNlY29uZHMuIElmIHRoZSByZXN1bHRpbmcgYERhdGVUaW1lYCBoYXMgYSBkaWZmZXJlbnQgZGF5bGlnaHQgc2F2aW5nIG9mZnNldAogICAqIHRoYW4gYHRoaXNgLCB0aGVuIHRoZSByZXN1bHQgd29uJ3QgaGF2ZSB0aGUgc2FtZSB0aW1lLW9mLWRheSBhcyBgdGhpc2AsIGFuZAogICAqIG1heSBub3QgZXZlbiBoaXQgdGhlIGNhbGVuZGFyIGRhdGUgNTAgZGF5cyBlYXJsaWVyLgogICAqCiAgICogQmUgY2FyZWZ1bCB3aGVuIHdvcmtpbmcgd2l0aCBkYXRlcyBpbiBsb2NhbCB0aW1lLgogICAqLwogIGV4dGVybmFsIERhdGVUaW1lIHN1YnRyYWN0KER1cmF0aW9uIGR1cmF0aW9uKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIFtEdXJhdGlvbl0gd2l0aCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFt0aGlzXSBhbmQgW290aGVyXS4KICAgKgogICAqIGBgYAogICAqIHZhciBiZXJsaW5XYWxsRmVsbCA9IG5ldyBEYXRlVGltZS51dGMoMTk4OSwgRGF0ZVRpbWUubm92ZW1iZXIsIDkpOwogICAqIHZhciBkRGF5ID0gbmV3IERhdGVUaW1lLnV0YygxOTQ0LCBEYXRlVGltZS5qdW5lLCA2KTsKICAgKgogICAqIER1cmF0aW9uIGRpZmZlcmVuY2UgPSBiZXJsaW5XYWxsRmVsbC5kaWZmZXJlbmNlKGREYXkpOwogICAqIGFzc2VydChkaWZmZXJlbmNlLmluRGF5cyA9PSAxNjU5Mik7CiAgICogYGBgCiAgICoKICAgKiBUaGUgZGlmZmVyZW5jZSBpcyBtZWFzdXJlZCBpbiBzZWNvbmRzIGFuZCBmcmFjdGlvbnMgb2Ygc2Vjb25kcy4KICAgKiBUaGUgZGlmZmVyZW5jZSBhYm92ZSBjb3VudHMgdGhlIG51bWJlciBvZiBmcmFjdGlvbmFsIHNlY29uZHMgYmV0d2VlbgogICAqIG1pZG5pZ2h0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhvc2UgZGF0ZXMuCiAgICogSWYgdGhlIGRhdGVzIGFib3ZlIGhhZCBiZWVuIGluIGxvY2FsIHRpbWUsIG5vdCBVVEMsIHRoZW4gdGhlIGRpZmZlcmVuY2UKICAgKiBiZXR3ZWVuIHR3byBtaWRuaWdodHMgbWF5IG5vdCBiZSBhIG11bHRpcGxlIG9mIDI0IGhvdXJzIGR1ZSB0byBkYXlsaWdodAogICAqIHNhdmluZyBkaWZmZXJlbmNlcy4KICAgKgogICAqIEZvciBleGFtcGxlLCBpbiBBdXN0cmFsaWEsIHNpbWlsYXIgY29kZSB1c2luZyBsb2NhbCB0aW1lIGluc3RlYWQgb2YgVVRDOgogICAqCiAgICogYGBgCiAgICogdmFyIGJlcmxpbldhbGxGZWxsID0gbmV3IERhdGVUaW1lKDE5ODksIERhdGVUaW1lLm5vdmVtYmVyLCA5KTsKICAgKiB2YXIgZERheSA9IG5ldyBEYXRlVGltZSgxOTQ0LCBEYXRlVGltZS5qdW5lLCA2KTsKICAgKiBEdXJhdGlvbiBkaWZmZXJlbmNlID0gYmVybGluV2FsbEZlbGwuZGlmZmVyZW5jZShkRGF5KTsKICAgKiBhc3NlcnQoZGlmZmVyZW5jZS5pbkRheXMgPT0gMTY1OTIpOwogICAqIGBgYAogICAqIHdpbGwgZmFpbCBiZWNhdXNlIHRoZSBkaWZmZXJlbmNlIGlzIGFjdHVhbGx5IDE2NTkxIGRheXMgYW5kIDIzIGhvdXJzLCBhbmQKICAgKiBbRHVyYXRpb24uaW5EYXlzXSBvbmx5IHJldHVybnMgdGhlIG51bWJlciBvZiB3aG9sZSBkYXlzLgogICAqLwogIGV4dGVybmFsIER1cmF0aW9uIGRpZmZlcmVuY2UoRGF0ZVRpbWUgb3RoZXIpOwoKICBleHRlcm5hbCBEYXRlVGltZS5faW50ZXJuYWwoaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSwgaW50IGhvdXIsCiAgICAgIGludCBtaW51dGUsIGludCBzZWNvbmQsIGludCBtaWxsaXNlY29uZCwgaW50IG1pY3Jvc2Vjb25kLCBib29sIGlzVXRjKTsKCiAgZXh0ZXJuYWwgRGF0ZVRpbWUuX25vdygpOwoKICAvLy8gUmV0dXJucyB0aGUgdGltZSBhcyB2YWx1ZSAobWlsbGlzZWNvbmQgb3IgbWljcm9zZWNvbmQgc2luY2UgZXBvY2gpLCBvcgogIC8vLyBudWxsIGlmIHRoZSB2YWx1ZXMgYXJlIG91dCBvZiByYW5nZS4KICBleHRlcm5hbCBzdGF0aWMgaW50IF9icm9rZW5Eb3duRGF0ZVRvVmFsdWUoCiAgICAgIGludCB5ZWFyLAogICAgICBpbnQgbW9udGgsCiAgICAgIGludCBkYXksCiAgICAgIGludCBob3VyLAogICAgICBpbnQgbWludXRlLAogICAgICBpbnQgc2Vjb25kLAogICAgICBpbnQgbWlsbGlzZWNvbmQsCiAgICAgIGludCBtaWNyb3NlY29uZCwKICAgICAgYm9vbCBpc1V0Yyk7CgogIC8qKgogICAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlCiAgICogdGhlICJVbml4IGVwb2NoIiAxOTcwLTAxLTAxVDAwOjAwOjAwWiAoVVRDKS4KICAgKgogICAqIFRoaXMgdmFsdWUgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIHRpbWUgem9uZS4KICAgKgogICAqIFRoaXMgdmFsdWUgaXMgYXQgbW9zdAogICAqIDgsNjQwLDAwMCwwMDAsMDAwLDAwMG1zICgxMDAsMDAwLDAwMCBkYXlzKSBmcm9tIHRoZSBVbml4IGVwb2NoLgogICAqIEluIG90aGVyIHdvcmRzOiBgbWlsbGlzZWNvbmRzU2luY2VFcG9jaC5hYnMoKSA8PSA4NjQwMDAwMDAwMDAwMDAwYC4KICAgKi8KICBleHRlcm5hbCBpbnQgZ2V0IG1pbGxpc2Vjb25kc1NpbmNlRXBvY2g7CgogIC8qKgogICAqIFRoZSBudW1iZXIgb2YgbWljcm9zZWNvbmRzIHNpbmNlCiAgICogdGhlICJVbml4IGVwb2NoIiAxOTcwLTAxLTAxVDAwOjAwOjAwWiAoVVRDKS4KICAgKgogICAqIFRoaXMgdmFsdWUgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIHRpbWUgem9uZS4KICAgKgogICAqIFRoaXMgdmFsdWUgaXMgYXQgbW9zdAogICAqIDgsNjQwLDAwMCwwMDAsMDAwLDAwMCwwMDB1cyAoMTAwLDAwMCwwMDAgZGF5cykgZnJvbSB0aGUgVW5peCBlcG9jaC4KICAgKiBJbiBvdGhlciB3b3JkczogYG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2guYWJzKCkgPD0gODY0MDAwMDAwMDAwMDAwMDAwMGAuCiAgICoKICAgKiBOb3RlIHRoYXQgdGhpcyB2YWx1ZSBkb2VzIG5vdCBmaXQgaW50byA1MyBiaXRzICh0aGUgc2l6ZSBvZiBhIElFRUUgZG91YmxlKS4KICAgKiBBIEphdmFTY3JpcHQgbnVtYmVyIGlzIG5vdCBhYmxlIHRvIGhvbGQgdGhpcyB2YWx1ZS4KICAgKi8KICBleHRlcm5hbCBpbnQgZ2V0IG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2g7CgogIC8qKgogICAqIFRoZSB0aW1lIHpvbmUgbmFtZS4KICAgKgogICAqIFRoaXMgdmFsdWUgaXMgcHJvdmlkZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0gYW5kIG1heSBiZSBhbgogICAqIGFiYnJldmlhdGlvbiBvciBhIGZ1bGwgbmFtZS4KICAgKgogICAqIEluIHRoZSBicm93c2VyIG9yIG9uIFVuaXgtbGlrZSBzeXN0ZW1zIGNvbW1vbmx5IHJldHVybnMgYWJicmV2aWF0aW9ucywKICAgKiBzdWNoIGFzICJDRVQiIG9yICJDRVNUIi4gT24gV2luZG93cyByZXR1cm5zIHRoZSBmdWxsIG5hbWUsIGZvciBleGFtcGxlCiAgICogIlBhY2lmaWMgU3RhbmRhcmQgVGltZSIuCiAgICovCiAgZXh0ZXJuYWwgU3RyaW5nIGdldCB0aW1lWm9uZU5hbWU7CgogIC8qKgogICAqIFRoZSB0aW1lIHpvbmUgb2Zmc2V0LCB3aGljaAogICAqIGlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gbG9jYWwgdGltZSBhbmQgVVRDLgogICAqCiAgICogVGhlIG9mZnNldCBpcyBwb3NpdGl2ZSBmb3IgdGltZSB6b25lcyBlYXN0IG9mIFVUQy4KICAgKgogICAqIE5vdGUsIHRoYXQgSmF2YVNjcmlwdCwgUHl0aG9uIGFuZCBDIHJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFVUQyBhbmQKICAgKiBsb2NhbCB0aW1lLiBKYXZhLCBDIyBhbmQgUnVieSByZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBsb2NhbCB0aW1lIGFuZAogICAqIFVUQy4KICAgKi8KICBleHRlcm5hbCBEdXJhdGlvbiBnZXQgdGltZVpvbmVPZmZzZXQ7CgogIC8qKgogICAqIFRoZSB5ZWFyLgogICAqCiAgICogYGBgCiAgICogdmFyIG1vb25MYW5kaW5nID0gRGF0ZVRpbWUucGFyc2UoIjE5NjktMDctMjAgMjA6MTg6MDRaIik7CiAgICogYXNzZXJ0KG1vb25MYW5kaW5nLnllYXIgPT0gMTk2OSk7CiAgICogYGBgCiAgICovCiAgZXh0ZXJuYWwgaW50IGdldCB5ZWFyOwoKICAvKioKICAgKiBUaGUgbW9udGggWzEuLjEyXS4KICAgKgogICAqIGBgYAogICAqIHZhciBtb29uTGFuZGluZyA9IERhdGVUaW1lLnBhcnNlKCIxOTY5LTA3LTIwIDIwOjE4OjA0WiIpOwogICAqIGFzc2VydChtb29uTGFuZGluZy5tb250aCA9PSA3KTsKICAgKiBhc3NlcnQobW9vbkxhbmRpbmcubW9udGggPT0gRGF0ZVRpbWUuanVseSk7CiAgICogYGBgCiAgICovCiAgZXh0ZXJuYWwgaW50IGdldCBtb250aDsKCiAgLyoqCiAgICogVGhlIGRheSBvZiB0aGUgbW9udGggWzEuLjMxXS4KICAgKgogICAqIGBgYAogICAqIHZhciBtb29uTGFuZGluZyA9IERhdGVUaW1lLnBhcnNlKCIxOTY5LTA3LTIwIDIwOjE4OjA0WiIpOwogICAqIGFzc2VydChtb29uTGFuZGluZy5kYXkgPT0gMjApOwogICAqIGBgYAogICAqLwogIGV4dGVybmFsIGludCBnZXQgZGF5OwoKICAvKioKICAgKiBUaGUgaG91ciBvZiB0aGUgZGF5LCBleHByZXNzZWQgYXMgaW4gYSAyNC1ob3VyIGNsb2NrIFswLi4yM10uCiAgICoKICAgKiBgYGAKICAgKiB2YXIgbW9vbkxhbmRpbmcgPSBEYXRlVGltZS5wYXJzZSgiMTk2OS0wNy0yMCAyMDoxODowNFoiKTsKICAgKiBhc3NlcnQobW9vbkxhbmRpbmcuaG91ciA9PSAyMCk7CiAgICogYGBgCiAgICovCiAgZXh0ZXJuYWwgaW50IGdldCBob3VyOwoKICAvKioKICAgKiBUaGUgbWludXRlIFswLi4uNTldLgogICAqCiAgICogYGBgCiAgICogdmFyIG1vb25MYW5kaW5nID0gRGF0ZVRpbWUucGFyc2UoIjE5NjktMDctMjAgMjA6MTg6MDRaIik7CiAgICogYXNzZXJ0KG1vb25MYW5kaW5nLm1pbnV0ZSA9PSAxOCk7CiAgICogYGBgCiAgICovCiAgZXh0ZXJuYWwgaW50IGdldCBtaW51dGU7CgogIC8qKgogICAqIFRoZSBzZWNvbmQgWzAuLi41OV0uCiAgICoKICAgKiBgYGAKICAgKiB2YXIgbW9vbkxhbmRpbmcgPSBEYXRlVGltZS5wYXJzZSgiMTk2OS0wNy0yMCAyMDoxODowNFoiKTsKICAgKiBhc3NlcnQobW9vbkxhbmRpbmcuc2Vjb25kID09IDQpOwogICAqIGBgYAogICAqLwogIGV4dGVybmFsIGludCBnZXQgc2Vjb25kOwoKICAvKioKICAgKiBUaGUgbWlsbGlzZWNvbmQgWzAuLi45OTldLgogICAqCiAgICogYGBgCiAgICogdmFyIG1vb25MYW5kaW5nID0gRGF0ZVRpbWUucGFyc2UoIjE5NjktMDctMjAgMjA6MTg6MDRaIik7CiAgICogYXNzZXJ0KG1vb25MYW5kaW5nLm1pbGxpc2Vjb25kID09IDApOwogICAqIGBgYAogICAqLwogIGV4dGVybmFsIGludCBnZXQgbWlsbGlzZWNvbmQ7CgogIC8qKgogICAqIFRoZSBtaWNyb3NlY29uZCBbMC4uLjk5OV0uCiAgICoKICAgKiBgYGAKICAgKiB2YXIgbW9vbkxhbmRpbmcgPSBEYXRlVGltZS5wYXJzZSgiMTk2OS0wNy0yMCAyMDoxODowNFoiKTsKICAgKiBhc3NlcnQobW9vbkxhbmRpbmcubWljcm9zZWNvbmQgPT0gMCk7CiAgICogYGBgCiAgICovCiAgZXh0ZXJuYWwgaW50IGdldCBtaWNyb3NlY29uZDsKCiAgLyoqCiAgICogVGhlIGRheSBvZiB0aGUgd2VlayBbbW9uZGF5XS4uW3N1bmRheV0uCiAgICoKICAgKiBJbiBhY2NvcmRhbmNlIHdpdGggSVNPIDg2MDEKICAgKiBhIHdlZWsgc3RhcnRzIHdpdGggTW9uZGF5LCB3aGljaCBoYXMgdGhlIHZhbHVlIDEuCiAgICoKICAgKiBgYGAKICAgKiB2YXIgbW9vbkxhbmRpbmcgPSBEYXRlVGltZS5wYXJzZSgiMTk2OS0wNy0yMCAyMDoxODowNFoiKTsKICAgKiBhc3NlcnQobW9vbkxhbmRpbmcud2Vla2RheSA9PSA3KTsKICAgKiBhc3NlcnQobW9vbkxhbmRpbmcud2Vla2RheSA9PSBEYXRlVGltZS5zdW5kYXkpOwogICAqIGBgYAogICAqLwogIGV4dGVybmFsIGludCBnZXQgd2Vla2RheTsKCiAgLyoKICAgKiBkYXRlIDo6PSB5ZWFyZGF0ZSB0aW1lX29wdCB0aW1lem9uZV9vcHQKICAgKiB5ZWFyZGF0ZSA6Oj0geWVhciBjb2xvbl9vcHQgbW9udGggY29sb25fb3B0IGRheQogICAqIHllYXIgOjo9IHNpZ25fb3B0IGRpZ2l0ezQsNn0KICAgKiBjb2xvbl9vcHQgOjogPGVtcHR5PiB8ICc6JwogICAqIHNpZ24gOjo9ICcrJyB8ICctJwogICAqIHNpZ25fb3B0IDo6PSAgPGVtcHR5PiB8IHNpZ24KICAgKiBtb250aCA6Oj0gZGlnaXR7Mn0KICAgKiBkYXkgOjo9IGRpZ2l0ezJ9CiAgICogdGltZV9vcHQgOjo9IDxlbXB0eT4gfCAoJyAnIHwgJ1QnKSBob3VyIG1pbnV0ZXNfb3B0CiAgICogbWludXRlc19vcHQgOjo9IDxlbXB0eT4gfCBjb2xvbl9vcHQgZGlnaXR7Mn0gc2Vjb25kc19vcHQKICAgKiBzZWNvbmRzX29wdCA6Oj0gPGVtcHR5PiB8IGNvbG9uX29wdCBkaWdpdHsyfSBtaWxsaXNfb3B0CiAgICogbWljcm9zX29wdCA6Oj0gPGVtcHR5PiB8ICgnLicgfCAnLCcpIGRpZ2l0ezEsNn0KICAgKiB0aW1lem9uZV9vcHQgOjo9IDxlbXB0eT4gfCBzcGFjZV9vcHQgdGltZXpvbmUKICAgKiBzcGFjZV9vcHQgOjogJyAnIHwgPGVtcHR5PgogICAqIHRpbWV6b25lIDo6PSAneicgfCAnWicgfCBzaWduIGRpZ2l0ezJ9IHRpbWV6b25lbWluc19vcHQKICAgKiB0aW1lem9uZW1pbnNfb3B0IDo6PSA8ZW1wdHk+IHwgY29sb25fb3B0IGRpZ2l0ezJ9CiAgICovCiAgc3RhdGljIGZpbmFsIFJlZ0V4cCBfcGFyc2VGb3JtYXQgPSBSZWdFeHAoCiAgICAgIHInXihbKy1dP1xkezQsNn0pLT8oXGRcZCktPyhcZFxkKScgLy8gRGF5IHBhcnQuCiAgICAgIHInKD86WyBUXShcZFxkKSg/Ojo/KFxkXGQpKD86Oj8oXGRcZCkoPzpbLixdKFxkezEsNn0pKT8pPyk/JyAvLyBUaW1lIHBhcnQuCiAgICAgIHInKCA/W3paXXwgPyhbLStdKShcZFxkKSg/Ojo/KFxkXGQpKT8pPyk/JCcpOyAvLyBUaW1lem9uZSBwYXJ0Lgp9CoNrAE5OPAETAQQ6A0lQAz0vLTMaEAMHITdIBwM9NR8DNSgDIS4DBycjBwMkQS48AwdGOAcDQz0DJgMvMwMHLAcDRylLQhwaNhoDIQM2OiMDBzg6BwMjA0E1UQoDByE7BwNBNAMHPCYHAzxFL009NEpKGQMWAy8pAz0mPwMEMT4fICIhHyEfJAE+ICEeHhwdHR8iISIiJwEGIQVQQR8GFAEGMQUJLhkJBQYUAQZIBRJNDAUJQAkGFRYTFBYWGxxMIQEGRgUJQgkFTU0cBhkWExQWFhscTCABBkgWBQkrCQYgAQZGBS9GBS41BSgFRD47UCoyNlRNDEQqOExLKz0wBU5MDwU3ODcFIwUfJycdGxQVGh82RgZFLDIbMhkrJyMIAUsXNiclHR0BGCYYJDQMChcIAScnJSstLSZGGEcYTxoeGRYgLjE1PDMtCghKNBtFCDcNRQYEAQZGBUE0BjUpCiUbEwYEAUIBBiouBUIFK0UfBksdAQYqLgVCBStFHwZLHQEGQAVCBjNFRyEbRwYZPQYEAQZLJAUJMSgFTCMJBUsjBiwBBjMFIz4FCSM9JCEFRCwsBSkpCQYqAQYyBSM+BQkjNiEhBUQpKQUpKQkGKQEGQgVREAUJIzYrKAVEMzMFMDAJBjIBBi8tBVBOJAYqAT4BBjkFPS0FCUU7CQYXETgGEQQBBjcFLS0FCUU6CQYVHDUEASUYJCMtLR4EASQjGCUtHAQBJiEhFQQBJCAUBAEGOAVMQTREJgU8BhYiIiAhJSUrQxEwDS0GBAEGSAVDTAwFTjJGMDstL0E7TyUFPAYdD1AiICElJStDETINLwYEAQZIBQklPwkFSFFRNwU3BiwBBk8FCSpFCQVNUVE5BTcGMQEGSgUJSDoFPCkJBUVKL01NGQVOBQlENjwpCU8+BjABRk0BHAFNKy4QEQ8QEhIXFxMBBiYyBTEFG0VJBisBBiYyBTEFG0lMBVE5BisBBhkFQiIFTEweBiQBBiEzBTgFT1AKBigBBg8FCT8nCQYZAQYYBQk/JTEJBhoBBiMFCT8kCQYYAQZDBQk/JQkGGQEGGgUJPycJBhsBBhoFCT8mCQYbAQYgBQk/KwkGIAEGIAUJPysJBiABBi0FITcFCT8nNQkGHAEFLTUiIBgiGBY5Pj01MyA9NwYtNlFGAgEYZGFydDpjb3JlL2RhdGVfdGltZS5kYXJ0L29yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvZGF0ZV9wYXRjaC5kYXJ0vfUvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCi8vIFZNIGltcGxlbWVudGF0aW9uIG9mIERhdGVUaW1lLgpAcGF0Y2gKY2xhc3MgRGF0ZVRpbWUgewogIC8vIE5hdGl2ZXMuCiAgLy8gVGhlIG5hdGl2ZXMgaGF2ZSBiZWVuIG1vdmVkIHVwIGhlcmUgdG8gd29yayBhcm91bmQgSXNzdWUgMTA0MDEuCiAgc3RhdGljIGludCBfZ2V0Q3VycmVudE1pY3JvcygpIG5hdGl2ZSAiRGF0ZVRpbWVfY3VycmVudFRpbWVNaWNyb3MiOwoKICBzdGF0aWMgU3RyaW5nIF90aW1lWm9uZU5hbWVGb3JDbGFtcGVkU2Vjb25kcyhpbnQgc2Vjb25kc1NpbmNlRXBvY2gpCiAgICAgIG5hdGl2ZSAiRGF0ZVRpbWVfdGltZVpvbmVOYW1lIjsKCiAgc3RhdGljIGludCBfdGltZVpvbmVPZmZzZXRJblNlY29uZHNGb3JDbGFtcGVkU2Vjb25kcyhpbnQgc2Vjb25kc1NpbmNlRXBvY2gpCiAgICAgIG5hdGl2ZSAiRGF0ZVRpbWVfdGltZVpvbmVPZmZzZXRJblNlY29uZHMiOwoKICBzdGF0aWMgaW50IF9sb2NhbFRpbWVab25lQWRqdXN0bWVudEluU2Vjb25kcygpCiAgICAgIG5hdGl2ZSAiRGF0ZVRpbWVfbG9jYWxUaW1lWm9uZUFkanVzdG1lbnRJblNlY29uZHMiOwoKICBzdGF0aWMgY29uc3QgX01JQ1JPU0VDT05EX0lOREVYID0gMDsKICBzdGF0aWMgY29uc3QgX01JTExJU0VDT05EX0lOREVYID0gMTsKICBzdGF0aWMgY29uc3QgX1NFQ09ORF9JTkRFWCA9IDI7CiAgc3RhdGljIGNvbnN0IF9NSU5VVEVfSU5ERVggPSAzOwogIHN0YXRpYyBjb25zdCBfSE9VUl9JTkRFWCA9IDQ7CiAgc3RhdGljIGNvbnN0IF9EQVlfSU5ERVggPSA1OwogIHN0YXRpYyBjb25zdCBfV0VFS0RBWV9JTkRFWCA9IDY7CiAgc3RhdGljIGNvbnN0IF9NT05USF9JTkRFWCA9IDc7CiAgc3RhdGljIGNvbnN0IF9ZRUFSX0lOREVYID0gODsKCiAgTGlzdCBfX3BhcnRzOwoKICBAcGF0Y2gKICBEYXRlVGltZS5mcm9tTWlsbGlzZWNvbmRzU2luY2VFcG9jaChpbnQgbWlsbGlzZWNvbmRzU2luY2VFcG9jaCwKICAgICAge2Jvb2wgaXNVdGM6IGZhbHNlfSkKICAgICAgOiB0aGlzLl93aXRoVmFsdWUoCiAgICAgICAgICAgIG1pbGxpc2Vjb25kc1NpbmNlRXBvY2ggKiBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJNaWxsaXNlY29uZCwKICAgICAgICAgICAgaXNVdGM6IGlzVXRjKTsKCiAgQHBhdGNoCiAgRGF0ZVRpbWUuZnJvbU1pY3Jvc2Vjb25kc1NpbmNlRXBvY2goaW50IG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2gsCiAgICAgIHtib29sIGlzVXRjOiBmYWxzZX0pCiAgICAgIDogdGhpcy5fd2l0aFZhbHVlKG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2gsIGlzVXRjOiBpc1V0Yyk7CgogIEBwYXRjaAogIERhdGVUaW1lLl9pbnRlcm5hbChpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5LCBpbnQgaG91ciwgaW50IG1pbnV0ZSwKICAgICAgaW50IHNlY29uZCwgaW50IG1pbGxpc2Vjb25kLCBpbnQgbWljcm9zZWNvbmQsIGJvb2wgaXNVdGMpCiAgICAgIDogdGhpcy5pc1V0YyA9IGlzVXRjLAogICAgICAgIHRoaXMuX3ZhbHVlID0gX2Jyb2tlbkRvd25EYXRlVG9WYWx1ZSh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsCiAgICAgICAgICAgIHNlY29uZCwgbWlsbGlzZWNvbmQsIG1pY3Jvc2Vjb25kLCBpc1V0YykgewogICAgaWYgKF92YWx1ZSA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigpOwogICAgaWYgKGlzVXRjID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCk7CiAgfQoKICBAcGF0Y2gKICBEYXRlVGltZS5fbm93KCkKICAgICAgOiBpc1V0YyA9IGZhbHNlLAogICAgICAgIF92YWx1ZSA9IF9nZXRDdXJyZW50TWljcm9zKCk7CgogIEBwYXRjaAogIFN0cmluZyBnZXQgdGltZVpvbmVOYW1lIHsKICAgIGlmIChpc1V0YykgcmV0dXJuICJVVEMiOwogICAgcmV0dXJuIF90aW1lWm9uZU5hbWUobWljcm9zZWNvbmRzU2luY2VFcG9jaCk7CiAgfQoKICBAcGF0Y2gKICBEdXJhdGlvbiBnZXQgdGltZVpvbmVPZmZzZXQgewogICAgaWYgKGlzVXRjKSByZXR1cm4gbmV3IER1cmF0aW9uKCk7CiAgICBpbnQgb2Zmc2V0SW5TZWNvbmRzID0gX3RpbWVab25lT2Zmc2V0SW5TZWNvbmRzKG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2gpOwogICAgcmV0dXJuIG5ldyBEdXJhdGlvbihzZWNvbmRzOiBvZmZzZXRJblNlY29uZHMpOwogIH0KCiAgQHBhdGNoCiAgYm9vbCBvcGVyYXRvciA9PShkeW5hbWljIG90aGVyKSA9PgogICAgICBvdGhlciBpcyBEYXRlVGltZSAmJgogICAgICBfdmFsdWUgPT0gb3RoZXIubWljcm9zZWNvbmRzU2luY2VFcG9jaCAmJgogICAgICBpc1V0YyA9PSBvdGhlci5pc1V0YzsKCiAgQHBhdGNoCiAgYm9vbCBpc0JlZm9yZShEYXRlVGltZSBvdGhlcikgPT4gX3ZhbHVlIDwgb3RoZXIubWljcm9zZWNvbmRzU2luY2VFcG9jaDsKCiAgQHBhdGNoCiAgYm9vbCBpc0FmdGVyKERhdGVUaW1lIG90aGVyKSA9PiBfdmFsdWUgPiBvdGhlci5taWNyb3NlY29uZHNTaW5jZUVwb2NoOwoKICBAcGF0Y2gKICBib29sIGlzQXRTYW1lTW9tZW50QXMoRGF0ZVRpbWUgb3RoZXIpID0+CiAgICAgIF92YWx1ZSA9PSBvdGhlci5taWNyb3NlY29uZHNTaW5jZUVwb2NoOwoKICBAcGF0Y2gKICBpbnQgY29tcGFyZVRvKERhdGVUaW1lIG90aGVyKSA9PgogICAgICBfdmFsdWUuY29tcGFyZVRvKG90aGVyLm1pY3Jvc2Vjb25kc1NpbmNlRXBvY2gpOwoKICAvKiogVGhlIGZpcnN0IGxpc3QgY29udGFpbnMgdGhlIGRheXMgdW50aWwgZWFjaCBtb250aCBpbiBub24tbGVhcCB5ZWFycy4gVGhlCiAgICAqIHNlY29uZCBsaXN0IGNvbnRhaW5zIHRoZSBkYXlzIGluIGxlYXAgeWVhcnMuICovCiAgc3RhdGljIGNvbnN0IExpc3Q8TGlzdDxpbnQ+PiBfREFZU19VTlRJTF9NT05USCA9IGNvbnN0IFsKICAgIGNvbnN0IFswLCAzMSwgNTksIDkwLCAxMjAsIDE1MSwgMTgxLCAyMTIsIDI0MywgMjczLCAzMDQsIDMzNF0sCiAgICBjb25zdCBbMCwgMzEsIDYwLCA5MSwgMTIxLCAxNTIsIDE4MiwgMjEzLCAyNDQsIDI3NCwgMzA1LCAzMzVdCiAgXTsKCiAgc3RhdGljIExpc3QgX2NvbXB1dGVVcHBlclBhcnQoaW50IGxvY2FsTWljcm9zKSB7CiAgICBjb25zdCBpbnQgREFZU19JTl80X1lFQVJTID0gNCAqIDM2NSArIDE7CiAgICBjb25zdCBpbnQgREFZU19JTl8xMDBfWUVBUlMgPSAyNSAqIERBWVNfSU5fNF9ZRUFSUyAtIDE7CiAgICBjb25zdCBpbnQgREFZU19JTl80MDBfWUVBUlMgPSA0ICogREFZU19JTl8xMDBfWUVBUlMgKyAxOwogICAgY29uc3QgaW50IERBWVNfMTk3MF9UT18yMDAwID0gMzAgKiAzNjUgKyA3OwogICAgY29uc3QgaW50IERBWVNfT0ZGU0VUID0KICAgICAgICAxMDAwICogREFZU19JTl80MDBfWUVBUlMgKyA1ICogREFZU19JTl80MDBfWUVBUlMgLSBEQVlTXzE5NzBfVE9fMjAwMDsKICAgIGNvbnN0IGludCBZRUFSU19PRkZTRVQgPSA0MDAwMDA7CgogICAgaW50IHJlc3VsdFllYXIgPSAwOwogICAgaW50IHJlc3VsdE1vbnRoID0gMDsKICAgIGludCByZXN1bHREYXkgPSAwOwoKICAgIC8vIEFsd2F5cyByb3VuZCBkb3duLgogICAgZmluYWwgaW50IGRheXNTaW5jZTE5NzAgPQogICAgICAgIF9mbG9vcmVkRGl2aXNpb24obG9jYWxNaWNyb3MsIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1BlckRheSk7CiAgICBpbnQgZGF5cyA9IGRheXNTaW5jZTE5NzA7CiAgICBkYXlzICs9IERBWVNfT0ZGU0VUOwogICAgcmVzdWx0WWVhciA9IDQwMCAqIChkYXlzIH4vIERBWVNfSU5fNDAwX1lFQVJTKSAtIFlFQVJTX09GRlNFVDsKICAgIGRheXMgPSBkYXlzLnJlbWFpbmRlcihEQVlTX0lOXzQwMF9ZRUFSUyk7CiAgICBkYXlzLS07CiAgICBpbnQgeWQxID0gZGF5cyB+LyBEQVlTX0lOXzEwMF9ZRUFSUzsKICAgIGRheXMgPSBkYXlzLnJlbWFpbmRlcihEQVlTX0lOXzEwMF9ZRUFSUyk7CiAgICByZXN1bHRZZWFyICs9IDEwMCAqIHlkMTsKICAgIGRheXMrKzsKICAgIGludCB5ZDIgPSBkYXlzIH4vIERBWVNfSU5fNF9ZRUFSUzsKICAgIGRheXMgPSBkYXlzLnJlbWFpbmRlcihEQVlTX0lOXzRfWUVBUlMpOwogICAgcmVzdWx0WWVhciArPSA0ICogeWQyOwogICAgZGF5cy0tOwogICAgaW50IHlkMyA9IGRheXMgfi8gMzY1OwogICAgZGF5cyA9IGRheXMucmVtYWluZGVyKDM2NSk7CiAgICByZXN1bHRZZWFyICs9IHlkMzsKCiAgICBib29sIGlzTGVhcCA9ICh5ZDEgPT0gMCB8fCB5ZDIgIT0gMCkgJiYgeWQzID09IDA7CiAgICBpZiAoaXNMZWFwKSBkYXlzKys7CgogICAgTGlzdDxpbnQ+IGRheXNVbnRpbE1vbnRoID0gX0RBWVNfVU5USUxfTU9OVEhbaXNMZWFwID8gMSA6IDBdOwogICAgZm9yIChyZXN1bHRNb250aCA9IDEyOwogICAgICAgIGRheXNVbnRpbE1vbnRoW3Jlc3VsdE1vbnRoIC0gMV0gPiBkYXlzOwogICAgICAgIHJlc3VsdE1vbnRoLS0pIHsKICAgICAgLy8gRG8gbm90aGluZy4KICAgIH0KICAgIHJlc3VsdERheSA9IGRheXMgLSBkYXlzVW50aWxNb250aFtyZXN1bHRNb250aCAtIDFdICsgMTsKCiAgICBpbnQgcmVzdWx0TWljcm9zZWNvbmQgPSBsb2NhbE1pY3JvcyAlIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1Blck1pbGxpc2Vjb25kOwogICAgaW50IHJlc3VsdE1pbGxpc2Vjb25kID0KICAgICAgICBfZmxvb3JlZERpdmlzaW9uKGxvY2FsTWljcm9zLCBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJNaWxsaXNlY29uZCkgJQogICAgICAgICAgICBEdXJhdGlvbi5taWxsaXNlY29uZHNQZXJTZWNvbmQ7CiAgICBpbnQgcmVzdWx0U2Vjb25kID0KICAgICAgICBfZmxvb3JlZERpdmlzaW9uKGxvY2FsTWljcm9zLCBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJTZWNvbmQpICUKICAgICAgICAgICAgRHVyYXRpb24uc2Vjb25kc1Blck1pbnV0ZTsKCiAgICBpbnQgcmVzdWx0TWludXRlID0KICAgICAgICBfZmxvb3JlZERpdmlzaW9uKGxvY2FsTWljcm9zLCBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJNaW51dGUpOwogICAgcmVzdWx0TWludXRlICU9IER1cmF0aW9uLm1pbnV0ZXNQZXJIb3VyOwoKICAgIGludCByZXN1bHRIb3VyID0KICAgICAgICBfZmxvb3JlZERpdmlzaW9uKGxvY2FsTWljcm9zLCBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJIb3VyKTsKICAgIHJlc3VsdEhvdXIgJT0gRHVyYXRpb24uaG91cnNQZXJEYXk7CgogICAgLy8gSW4gYWNjb3JkYW5jZSB3aXRoIElTTyA4NjAxIGEgd2VlawogICAgLy8gc3RhcnRzIHdpdGggTW9uZGF5LiBNb25kYXkgaGFzIHRoZSB2YWx1ZSAxIHVwIHRvIFN1bmRheSB3aXRoIDcuCiAgICAvLyAxOTcwLTEtMSB3YXMgYSBUaHVyc2RheS4KICAgIGludCByZXN1bHRXZWVrZGF5ID0gKChkYXlzU2luY2UxOTcwICsgRGF0ZVRpbWUudGh1cnNkYXkgLSBEYXRlVGltZS5tb25kYXkpICUKICAgICAgICAgICAgRGF0ZVRpbWUuZGF5c1BlcldlZWspICsKICAgICAgICBEYXRlVGltZS5tb25kYXk7CgogICAgTGlzdCBsaXN0ID0gbmV3IExpc3QoX1lFQVJfSU5ERVggKyAxKTsKICAgIGxpc3RbX01JQ1JPU0VDT05EX0lOREVYXSA9IHJlc3VsdE1pY3Jvc2Vjb25kOwogICAgbGlzdFtfTUlMTElTRUNPTkRfSU5ERVhdID0gcmVzdWx0TWlsbGlzZWNvbmQ7CiAgICBsaXN0W19TRUNPTkRfSU5ERVhdID0gcmVzdWx0U2Vjb25kOwogICAgbGlzdFtfTUlOVVRFX0lOREVYXSA9IHJlc3VsdE1pbnV0ZTsKICAgIGxpc3RbX0hPVVJfSU5ERVhdID0gcmVzdWx0SG91cjsKICAgIGxpc3RbX0RBWV9JTkRFWF0gPSByZXN1bHREYXk7CiAgICBsaXN0W19XRUVLREFZX0lOREVYXSA9IHJlc3VsdFdlZWtkYXk7CiAgICBsaXN0W19NT05USF9JTkRFWF0gPSByZXN1bHRNb250aDsKICAgIGxpc3RbX1lFQVJfSU5ERVhdID0gcmVzdWx0WWVhcjsKICAgIHJldHVybiBsaXN0OwogIH0KCiAgZ2V0IF9wYXJ0cyB7CiAgICBfX3BhcnRzID8/PSBfY29tcHV0ZVVwcGVyUGFydChfbG9jYWxEYXRlSW5VdGNNaWNyb3MpOwogICAgcmV0dXJuIF9fcGFydHM7CiAgfQoKICBAcGF0Y2gKICBEYXRlVGltZSBhZGQoRHVyYXRpb24gZHVyYXRpb24pIHsKICAgIHJldHVybiBuZXcgRGF0ZVRpbWUuX3dpdGhWYWx1ZShfdmFsdWUgKyBkdXJhdGlvbi5pbk1pY3Jvc2Vjb25kcywKICAgICAgICBpc1V0YzogaXNVdGMpOwogIH0KCiAgQHBhdGNoCiAgRGF0ZVRpbWUgc3VidHJhY3QoRHVyYXRpb24gZHVyYXRpb24pIHsKICAgIHJldHVybiBuZXcgRGF0ZVRpbWUuX3dpdGhWYWx1ZShfdmFsdWUgLSBkdXJhdGlvbi5pbk1pY3Jvc2Vjb25kcywKICAgICAgICBpc1V0YzogaXNVdGMpOwogIH0KCiAgQHBhdGNoCiAgRHVyYXRpb24gZGlmZmVyZW5jZShEYXRlVGltZSBvdGhlcikgewogICAgcmV0dXJuIG5ldyBEdXJhdGlvbihtaWNyb3NlY29uZHM6IF92YWx1ZSAtIG90aGVyLl92YWx1ZSk7CiAgfQoKICBAcGF0Y2gKICBpbnQgZ2V0IG1pbGxpc2Vjb25kc1NpbmNlRXBvY2ggPT4KICAgICAgX3ZhbHVlIH4vIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1Blck1pbGxpc2Vjb25kOwoKICBAcGF0Y2gKICBpbnQgZ2V0IG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2ggPT4gX3ZhbHVlOwoKICBAcGF0Y2gKICBpbnQgZ2V0IG1pY3Jvc2Vjb25kID0+IF9wYXJ0c1tfTUlDUk9TRUNPTkRfSU5ERVhdOwoKICBAcGF0Y2gKICBpbnQgZ2V0IG1pbGxpc2Vjb25kID0+IF9wYXJ0c1tfTUlMTElTRUNPTkRfSU5ERVhdOwoKICBAcGF0Y2gKICBpbnQgZ2V0IHNlY29uZCA9PiBfcGFydHNbX1NFQ09ORF9JTkRFWF07CgogIEBwYXRjaAogIGludCBnZXQgbWludXRlID0+IF9wYXJ0c1tfTUlOVVRFX0lOREVYXTsKCiAgQHBhdGNoCiAgaW50IGdldCBob3VyID0+IF9wYXJ0c1tfSE9VUl9JTkRFWF07CgogIEBwYXRjaAogIGludCBnZXQgZGF5ID0+IF9wYXJ0c1tfREFZX0lOREVYXTsKCiAgQHBhdGNoCiAgaW50IGdldCB3ZWVrZGF5ID0+IF9wYXJ0c1tfV0VFS0RBWV9JTkRFWF07CgogIEBwYXRjaAogIGludCBnZXQgbW9udGggPT4gX3BhcnRzW19NT05USF9JTkRFWF07CgogIEBwYXRjaAogIGludCBnZXQgeWVhciA9PiBfcGFydHNbX1lFQVJfSU5ERVhdOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBhbW91bnQgb2YgbWljcm9zZWNvbmRzIGluIFVUQyB0aGF0IHJlcHJlc2VudCB0aGUgc2FtZSB2YWx1ZXMKICAgKiBhcyBbdGhpc10uCiAgICoKICAgKiBTYXkgYHRgIGlzIHRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiwgdGhlbgogICAqICogYHRoaXMueWVhciA9PSBuZXcgRGF0ZVRpbWUuZnJvbU1pY3Jvc2Vjb25kc1NpbmNlRXBvY2godCwgdHJ1ZSkueWVhcmAsCiAgICogKiBgdGhpcy5tb250aCA9PSBuZXcgRGF0ZVRpbWUuZnJvbU1pY3Jvc2Vjb25kc1NpbmNlRXBvY2godCwgdHJ1ZSkubW9udGhgLAogICAqICogYHRoaXMuZGF5ID09IG5ldyBEYXRlVGltZS5mcm9tTWljcm9zZWNvbmRzU2luY2VFcG9jaCh0LCB0cnVlKS5kYXlgLAogICAqICogYHRoaXMuaG91ciA9PSBuZXcgRGF0ZVRpbWUuZnJvbU1pY3Jvc2Vjb25kc1NpbmNlRXBvY2godCwgdHJ1ZSkuaG91cmAsCiAgICogKiAuLi4KICAgKgogICAqIERheWxpZ2h0IHNhdmluZ3MgaXMgY29tcHV0ZWQgYXMgaWYgdGhlIGRhdGUgd2FzIGNvbXB1dGVkIGluIFsxOTcwLi4yMDM3XS4KICAgKiBJZiBbdGhpc10gbGllcyBvdXRzaWRlIHRoaXMgcmFuZ2UgdGhlbiBpdCBpcyBhIHllYXIgd2l0aCBzaW1pbGFyCiAgICogcHJvcGVydGllcyAobGVhcCB5ZWFyLCB3ZWVrZGF5cykgaXMgdXNlZCBpbnN0ZWFkLgogICAqLwogIGludCBnZXQgX2xvY2FsRGF0ZUluVXRjTWljcm9zIHsKICAgIGludCBtaWNyb3MgPSBfdmFsdWU7CiAgICBpZiAoaXNVdGMpIHJldHVybiBtaWNyb3M7CiAgICBpbnQgb2Zmc2V0ID0KICAgICAgICBfdGltZVpvbmVPZmZzZXRJblNlY29uZHMobWljcm9zKSAqIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1BlclNlY29uZDsKICAgIHJldHVybiBtaWNyb3MgKyBvZmZzZXQ7CiAgfQoKICBzdGF0aWMgaW50IF9mbG9vcmVkRGl2aXNpb24oaW50IGEsIGludCBiKSB7CiAgICByZXR1cm4gKGEgLSAoYSA8IDAgPyBiIC0gMSA6IDApKSB+LyBiOwogIH0KCiAgLy8gUmV0dXJucyB0aGUgZGF5cyBzaW5jZSAxOTcwIGZvciB0aGUgc3RhcnQgb2YgdGhlIGdpdmVuIFt5ZWFyXS4KICAvLyBbeWVhcl0gbWF5IGJlIGJlZm9yZSBlcG9jaC4KICBzdGF0aWMgaW50IF9kYXlGcm9tWWVhcihpbnQgeWVhcikgewogICAgcmV0dXJuIDM2NSAqICh5ZWFyIC0gMTk3MCkgKwogICAgICAgIF9mbG9vcmVkRGl2aXNpb24oeWVhciAtIDE5NjksIDQpIC0KICAgICAgICBfZmxvb3JlZERpdmlzaW9uKHllYXIgLSAxOTAxLCAxMDApICsKICAgICAgICBfZmxvb3JlZERpdmlzaW9uKHllYXIgLSAxNjAxLCA0MDApOwogIH0KCiAgc3RhdGljIGJvb2wgX2lzTGVhcFllYXIoeSkgewogICAgLy8gKHkgJSAxNiA9PSAwKSBtYXRjaGVzIG11bHRpcGxlcyBvZiA0MDAsIGFuZCBpcyBmYXN0ZXIgdGhhbiAlIDQwMC4KICAgIHJldHVybiAoeSAlIDQgPT0gMCkgJiYgKCh5ICUgMTYgPT0gMCkgfHwgKHkgJSAxMDAgIT0gMCkpOwogIH0KCiAgLy8vIENvbnZlcnRzIHRoZSBnaXZlbiBicm9rZW4gZG93biBkYXRlIHRvIG1pY3Jvc2Vjb25kcy4KICBAcGF0Y2gKICBzdGF0aWMgaW50IF9icm9rZW5Eb3duRGF0ZVRvVmFsdWUoaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSwgaW50IGhvdXIsCiAgICAgIGludCBtaW51dGUsIGludCBzZWNvbmQsIGludCBtaWxsaXNlY29uZCwgaW50IG1pY3Jvc2Vjb25kLCBib29sIGlzVXRjKSB7CiAgICAvLyBTaW1wbGlmeSBjYWxjdWxhdGlvbnMgYnkgd29ya2luZyB3aXRoIHplcm8tYmFzZWQgbW9udGguCiAgICAtLW1vbnRoOwogICAgLy8gRGVhbCB3aXRoIHVuZGVyIGFuZCBvdmVyZmxvdy4KICAgIGlmIChtb250aCA+PSAxMikgewogICAgICB5ZWFyICs9IG1vbnRoIH4vIDEyOwogICAgICBtb250aCA9IG1vbnRoICUgMTI7CiAgICB9IGVsc2UgaWYgKG1vbnRoIDwgMCkgewogICAgICBpbnQgcmVhbE1vbnRoID0gbW9udGggJSAxMjsKICAgICAgeWVhciArPSAobW9udGggLSByZWFsTW9udGgpIH4vIDEyOwogICAgICBtb250aCA9IHJlYWxNb250aDsKICAgIH0KCiAgICAvLyBGaXJzdCBjb21wdXRlIHRoZSBzZWNvbmRzIGluIFVUQywgaW5kZXBlbmRlbnQgb2YgdGhlIFtpc1V0Y10gZmxhZy4gSWYKICAgIC8vIG5lY2Vzc2FyeSB3ZSB3aWxsIGFkZCB0aGUgdGltZS16b25lIG9mZnNldCBsYXRlciBvbi4KICAgIGludCBkYXlzID0gZGF5IC0gMTsKICAgIGRheXMgKz0gX0RBWVNfVU5USUxfTU9OVEhbX2lzTGVhcFllYXIoeWVhcikgPyAxIDogMF1bbW9udGhdOwogICAgZGF5cyArPSBfZGF5RnJvbVllYXIoeWVhcik7CiAgICBpbnQgbWljcm9zZWNvbmRzU2luY2VFcG9jaCA9IGRheXMgKiBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJEYXkgKwogICAgICAgIGhvdXIgKiBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJIb3VyICsKICAgICAgICBtaW51dGUgKiBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJNaW51dGUgKwogICAgICAgIHNlY29uZCAqIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1BlclNlY29uZCArCiAgICAgICAgbWlsbGlzZWNvbmQgKiBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJNaWxsaXNlY29uZCArCiAgICAgICAgbWljcm9zZWNvbmQ7CgogICAgLy8gU2luY2UgW190aW1lWm9uZU9mZnNldEluU2Vjb25kc10gd2lsbCBjcmFzaCBpZiB0aGUgaW5wdXQgaXMgZmFyIG91dCBvZgogICAgLy8gdGhlIHZhbGlkIHJhbmdlIHdlIGRvIGEgcHJlbGltaW5hcnkgdGVzdCB0aGF0IHdlZWRzIG91dCB2YWx1ZXMgdGhhdCBjYW4KICAgIC8vIG5vdCBiZWNvbWUgdmFsaWQgZXZlbiB3aXRoIHRpbWV6b25lIGFkanVzdG1lbnRzLgogICAgLy8gVGhlIHRpbWV6b25lIGFkanVzdG1lbnQgaXMgYWx3YXlzIGxlc3MgdGhhbiBhIGRheSwgc28gYWRkaW5nIGEgc2VjdXJpdHkKICAgIC8vIG1hcmdpbiBvZiBvbmUgZGF5IHNob3VsZCBiZSBlbm91Z2guCiAgICBpZiAobWljcm9zZWNvbmRzU2luY2VFcG9jaC5hYnMoKSA+CiAgICAgICAgX21heE1pbGxpc2Vjb25kc1NpbmNlRXBvY2ggKiAxMDAwICsgRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyRGF5KSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGlmICghaXNVdGMpIHsKICAgICAgLy8gTm90ZSB0aGF0IHdlIGNhbid0IGxpdGVyYWxseSBmb2xsb3cgdGhlIEVDTUFTY3JpcHQgc3BlYyAod2hpY2ggdGhpcwogICAgICAvLyBjb2RlIGlzIGJhc2VkIG9uKSwgYmVjYXVzZSBpdCBsZWFkcyB0byBpbmNvcnJlY3QgY29tcHV0YXRpb25zIGF0CiAgICAgIC8vIHRoZSBEU1QgdHJhbnNpdGlvbiBwb2ludHMuCiAgICAgIC8vCiAgICAgIC8vIFNlZSBWOCdzIGNvbW1lbnQgaGVyZToKICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Y4L3Y4L2Jsb2IvMDg5ZGQ3ZDI0NDdkNmVhZjU3YzhiYTZkOGYzNzk1N2YzYTI2OTc3Ny9zcmMvZGF0ZS5oI0wxMTgKCiAgICAgIC8vIFdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBsb2NhbCB0aW1lem9uZSBhZGp1c3RtZW50IGJlZm9yZSBhc2tpbmcgZm9yIHRoZQogICAgICAvLyBjb3JyZWN0IHpvbmUgb2Zmc2V0LgogICAgICBpbnQgYWRqdXN0bWVudCA9CiAgICAgICAgICBfbG9jYWxUaW1lWm9uZUFkanVzdG1lbnRJblNlY29uZHMoKSAqIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1BlclNlY29uZDsKICAgICAgLy8gVGhlIGFkanVzdG1lbnQgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIGFjdHVhbCBkYXRlIGFuZCBvZiB0aGUgZGF5bGlnaHQKICAgICAgLy8gc2F2aW5nIHRpbWUuIEl0IGlzIHBvc2l0aXZlIGVhc3Qgb2YgdGhlIFByaW1lIE1lcmlkaWFuIGFuZCBuZWdhdGl2ZQogICAgICAvLyB3ZXN0IG9mIGl0LCBlLmcuIC0yODgwMCBzZWMgZm9yIEFtZXJpY2EvTG9zX0FuZ2VsZXMgdGltZXpvbmUuCgogICAgICAvLyBXZSByZW1vdmUgb25lIGhvdXIgdG8gZW5zdXJlIHRoYXQgd2UgaGF2ZSB0aGUgY29ycmVjdCBvZmZzZXQgYXQKICAgICAgLy8gRFNUIHRyYW5zaXRpb25pbmcgcG9pbnRzLiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHNvbHV0aW9uIGFuZCBvbmx5CiAgICAgIC8vIGNvcnJlY3QgaW4gdGltZXpvbmVzIHRoYXQgc2hpZnQgZm9yIGV4YWN0bHkgb25lIGhvdXIuCiAgICAgIGFkanVzdG1lbnQgKz0gRHVyYXRpb24ubWljcm9zZWNvbmRzUGVySG91cjsKICAgICAgaW50IHpvbmVPZmZzZXQgPQogICAgICAgICAgX3RpbWVab25lT2Zmc2V0SW5TZWNvbmRzKG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2ggLSBhZGp1c3RtZW50KTsKCiAgICAgIC8vIFRoZSB6b25lT2Zmc2V0IGRlcGVuZHMgb24gdGhlIGFjdHVhbCBkYXRlIGFuZCByZWZsZWN0cyBhbnkgZGF5bGlnaHQKICAgICAgLy8gc2F2aW5nIHRpbWUgYW5kL29yIGhpc3RvcmljYWwgZGV2aWF0aW9uIHJlbGF0aXZlIHRvIFVUQyB0aW1lLgogICAgICAvLyBJdCBpcyBwb3NpdGl2ZSBlYXN0IG9mIHRoZSBQcmltZSBNZXJpZGlhbiBhbmQgbmVnYXRpdmUgd2VzdCBvZiBpdCwKICAgICAgLy8gZS5nLiAtMjUyMDAgc2VjIGZvciBBbWVyaWNhL0xvc19BbmdlbGVzIHRpbWV6b25lIGR1cmluZyBEU1QuCiAgICAgIG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2ggLT0gem9uZU9mZnNldCAqIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1BlclNlY29uZDsKICAgICAgLy8gVGhlIHJlc3VsdGluZyBtaWNyb3NlY29uZHNTaW5jZUVwb2NoIHZhbHVlIGlzIHRoZXJlZm9yZSB0aGUgY2FsY3VsYXRlZAogICAgICAvLyBVVEMgdmFsdWUgZGVjcmVhc2VkIGJ5IGEgKHBvc2l0aXZlIGlmIGVhc3Qgb2YgR01UKSB0aW1lem9uZSBhZGp1c3RtZW50CiAgICAgIC8vIGFuZCBkZWNyZWFzZWQgYnkgdHlwaWNhbGx5IG9uZSBob3VyIGlmIERTVCBpcyBpbiBlZmZlY3QuCiAgICB9CiAgICBpZiAobWljcm9zZWNvbmRzU2luY2VFcG9jaC5hYnMoKSA+CiAgICAgICAgX21heE1pbGxpc2Vjb25kc1NpbmNlRXBvY2ggKiBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJNaWxsaXNlY29uZCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHJldHVybiBtaWNyb3NlY29uZHNTaW5jZUVwb2NoOwogIH0KCiAgc3RhdGljIGludCBfd2Vla0RheSh5KSB7CiAgICAvLyAxLzEvMTk3MCB3YXMgYSBUaHVyc2RheS4KICAgIHJldHVybiAoX2RheUZyb21ZZWFyKHkpICsgNCkgJSA3OwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIHllYXIgaW4gdGhlIHJhbmdlIDIwMDgtMjAzNSBtYXRjaGluZwogICAqICogbGVhcCB5ZWFyLCBhbmQKICAgKiAqIHdlZWsgZGF5IG9mIGZpcnN0IGRheS4KICAgKgogICAqIExlYXAgc2Vjb25kcyBhcmUgaWdub3JlZC4KICAgKiBBZGFwdGVkIGZyb20gVjgncyBkYXRlIGltcGxlbWVudGF0aW9uLiBTZWUgRUNNQSAyNjIgLSAxNS45LjEuOS4KICAgKi8KICBzdGF0aWMgaW50IF9lcXVpdmFsZW50WWVhcihpbnQgeWVhcikgewogICAgLy8gUmV0dXJucyB5ZWFyIHkgc28gdGhhdCBfd2Vla0RheSh5KSA9PSBfd2Vla0RheSh5ZWFyKS4KICAgIC8vIF93ZWVrRGF5IHJldHVybnMgdGhlIHdlZWsgZGF5IChpbiByYW5nZSAwIC0gNikuCiAgICAvLyAxLzEvMTk1NiB3YXMgYSBTdW5kYXkgKGkuZS4gd2Vla2RheSAwKS4gMTk1NiB3YXMgYSBsZWFwLXllYXIuCiAgICAvLyAxLzEvMTk2NyB3YXMgYSBTdW5kYXkgKGkuZS4gd2Vla2RheSAwKS4KICAgIC8vIFdpdGhvdXQgbGVhcCB5ZWFycyBhIHN1YnNlcXVlbnQgeWVhciBoYXMgYSB3ZWVrIGRheSArIDEgKGZvciBleGFtcGxlCiAgICAvLyAxLzEvMTk2OCB3YXMgYSBNb25kYXkpLiBXaXRoIGxlYXAteWVhcnMgaXQganVtcHMgb3ZlciBvbmUgd2VlayBkYXkKICAgIC8vIChlLmcuIDEvMS8xOTU3IHdhcyBhIFR1ZXNkYXkpLgogICAgLy8gQWZ0ZXIgMTIgeWVhcnMgdGhlIHdlZWtkYXlzIGhhdmUgYWR2YW5jZWQgYnkgMTIgZGF5cyArIDMgbGVhcCBkYXlzID0KICAgIC8vIDE1IGRheXMuIDE1ICUgNyA9IDEuIFNvIGFmdGVyIDEyIHllYXJzIHRoZSB3ZWVrIGRheSBoYXMgYWx3YXlzCiAgICAvLyAobm93IGluZGVwZW5kZW50bHkgb2YgbGVhcC15ZWFycykgYWR2YW5jZWQgYnkgb25lLgogICAgLy8gd2Vla0RheSAqIDEyIGdpdmVzIHRodXMgYSB5ZWFyIHN0YXJ0aW5nIHdpdGggdGhlIHdhbnRlZCB3ZWVrRGF5LgogICAgaW50IHJlY2VudFllYXIgPSAoX2lzTGVhcFllYXIoeWVhcikgPyAxOTU2IDogMTk2NykgKyAoX3dlZWtEYXkoeWVhcikgKiAxMik7CiAgICAvLyBDbG9zZSB0byB0aGUgeWVhciAyMDA4IHRoZSBjYWxlbmRhciBjeWNsZXMgZXZlcnkgNCAqIDcgeWVhcnMgKDQgZm9yIHRoZQogICAgLy8gbGVhcCB5ZWFycywgNyBmb3IgdGhlIHdlZWtkYXlzKS4KICAgIC8vIEZpbmQgdGhlIHllYXIgaW4gdGhlIHJhbmdlIDIwMDguLjIwMzcgdGhhdCBpcyBlcXVpdmFsZW50IG1vZCAyOC4KICAgIHJldHVybiAyMDA4ICsgKHJlY2VudFllYXIgLSAyMDA4KSAlIDI4OwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgVVRDIHllYXIgZm9yIHRoZSBjb3JyZXNwb25kaW5nIFtzZWNvbmRzU2luY2VFcG9jaF0uCiAgICogSXQgaXMgcmVsYXRpdmVseSBmYXN0IGZvciB2YWx1ZXMgaW4gdGhlIHJhbmdlIDAgdG8geWVhciAyMDk4LgogICAqCiAgICogQ29kZSBpcyBhZGFwdGVkIGZyb20gVjguCiAgICovCiAgc3RhdGljIGludCBfeWVhcnNGcm9tU2Vjb25kc1NpbmNlRXBvY2goaW50IHNlY29uZHNTaW5jZUVwb2NoKSB7CiAgICBjb25zdCBpbnQgREFZU19JTl80X1lFQVJTID0gNCAqIDM2NSArIDE7CiAgICBjb25zdCBpbnQgREFZU19JTl8xMDBfWUVBUlMgPSAyNSAqIERBWVNfSU5fNF9ZRUFSUyAtIDE7CiAgICBjb25zdCBpbnQgREFZU19ZRUFSXzIwOTggPSBEQVlTX0lOXzEwMF9ZRUFSUyArIDYgKiBEQVlTX0lOXzRfWUVBUlM7CgogICAgaW50IGRheXMgPSBzZWNvbmRzU2luY2VFcG9jaCB+LyBEdXJhdGlvbi5zZWNvbmRzUGVyRGF5OwogICAgaWYgKGRheXMgPiAwICYmIGRheXMgPCBEQVlTX1lFQVJfMjA5OCkgewogICAgICAvLyBBY2NvcmRpbmcgdG8gVjggdGhpcyBmYXN0IGNhc2Ugd29ya3MgZm9yIGRhdGVzIGZyb20gMTk3MCB0byAyMDk5LgogICAgICByZXR1cm4gMTk3MCArICg0ICogZGF5cyArIDIpIH4vIERBWVNfSU5fNF9ZRUFSUzsKICAgIH0KICAgIGludCBtaWNyb3MgPSBzZWNvbmRzU2luY2VFcG9jaCAqIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1BlclNlY29uZDsKICAgIHJldHVybiBfY29tcHV0ZVVwcGVyUGFydChtaWNyb3MpW19ZRUFSX0lOREVYXTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBkYXRlIGluIHNlY29uZHMgdGhhdCBpcyBlcXVpdmFsZW50IHRvIHRoZSBnaXZlbgogICAqIGRhdGUgaW4gbWljcm9zZWNvbmRzIFttaWNyb3NlY29uZHNTaW5jZUVwb2NoXS4gQW4gZXF1aXZhbGVudAogICAqIGRhdGUgaGFzIHRoZSBzYW1lIGZpZWxkcyAoYG1vbnRoYCwgYGRheWAsIGV0Yy4pIGFzIHRoZSBnaXZlbgogICAqIGRhdGUsIGJ1dCB0aGUgYHllYXJgIGlzIGluIHRoZSByYW5nZSBbMTkwMS4uMjAzOF0uCiAgICoKICAgKiAqIFRoZSB0aW1lIHNpbmNlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHllYXIgaXMgdGhlIHNhbWUuCiAgICogKiBJZiB0aGUgZ2l2ZW4gZGF0ZSBpcyBpbiBhIGxlYXAgeWVhciB0aGVuIHRoZSByZXR1cm5lZAogICAqICAgc2Vjb25kcyBhcmUgaW4gYSBsZWFwIHllYXIsIHRvby4KICAgKiAqIFRoZSB3ZWVrIGRheSBvZiBnaXZlbiBkYXRlIGlzIHRoZSBzYW1lIGFzIHRoZSBvbmUgZm9yIHRoZQogICAqICAgcmV0dXJuZWQgZGF0ZS4KICAgKi8KICBzdGF0aWMgaW50IF9lcXVpdmFsZW50U2Vjb25kcyhpbnQgbWljcm9zZWNvbmRzU2luY2VFcG9jaCkgewogICAgY29uc3QgaW50IENVVF9PRkZfU0VDT05EUyA9IDB4N0ZGRkZGRkY7CgogICAgaW50IHNlY29uZHNTaW5jZUVwb2NoID0gX2Zsb29yZWREaXZpc2lvbigKICAgICAgICBtaWNyb3NlY29uZHNTaW5jZUVwb2NoLCBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJTZWNvbmQpOwoKICAgIGlmIChzZWNvbmRzU2luY2VFcG9jaC5hYnMoKSA+IENVVF9PRkZfU0VDT05EUykgewogICAgICBpbnQgeWVhciA9IF95ZWFyc0Zyb21TZWNvbmRzU2luY2VFcG9jaChzZWNvbmRzU2luY2VFcG9jaCk7CiAgICAgIGludCBkYXlzID0gX2RheUZyb21ZZWFyKHllYXIpOwogICAgICBpbnQgZXF1aXZhbGVudFllYXIgPSBfZXF1aXZhbGVudFllYXIoeWVhcik7CiAgICAgIGludCBlcXVpdmFsZW50RGF5cyA9IF9kYXlGcm9tWWVhcihlcXVpdmFsZW50WWVhcik7CiAgICAgIGludCBkaWZmRGF5cyA9IGVxdWl2YWxlbnREYXlzIC0gZGF5czsKICAgICAgc2Vjb25kc1NpbmNlRXBvY2ggKz0gZGlmZkRheXMgKiBEdXJhdGlvbi5zZWNvbmRzUGVyRGF5OwogICAgfQogICAgcmV0dXJuIHNlY29uZHNTaW5jZUVwb2NoOwogIH0KCiAgc3RhdGljIGludCBfdGltZVpvbmVPZmZzZXRJblNlY29uZHMoaW50IG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2gpIHsKICAgIGludCBlcXVpdmFsZW50U2Vjb25kcyA9IF9lcXVpdmFsZW50U2Vjb25kcyhtaWNyb3NlY29uZHNTaW5jZUVwb2NoKTsKICAgIHJldHVybiBfdGltZVpvbmVPZmZzZXRJblNlY29uZHNGb3JDbGFtcGVkU2Vjb25kcyhlcXVpdmFsZW50U2Vjb25kcyk7CiAgfQoKICBzdGF0aWMgU3RyaW5nIF90aW1lWm9uZU5hbWUoaW50IG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2gpIHsKICAgIGludCBlcXVpdmFsZW50U2Vjb25kcyA9IF9lcXVpdmFsZW50U2Vjb25kcyhtaWNyb3NlY29uZHNTaW5jZUVwb2NoKTsKICAgIHJldHVybiBfdGltZVpvbmVOYW1lRm9yQ2xhbXBlZFNlY29uZHMoZXF1aXZhbGVudFNlY29uZHMpOwogIH0KfQqBwABOTjwBHgEiBxEORUYBRiYBTjEBMToBJyciIiAfIyEgARABCUIbGUobAQlCGz8BCUlAHE03MzIEAQkSFyYBCRwdMgQBCSAmTDMEAQklGzAcAQlKAQlJAQkrLgEJIzYBTzY7Q0IFATMtPD0wHE4lARgZFwEaHkQeGUMuDCkuHQwnLBsMGyAXATYYAUIbMBkVBjwBTxxNLBdIJwEXRy0BFUUoASpHIFEkGQErMjIoKCQiKiYkEQQBDzoUBAEJJEUXBAEJKUUXBAEJKD4EAQkkNQEJLAEJNQEJNQEJKwEJKwEJJwEJJQEJLQEJKQEJJwEGThAFMk1PS00LBU9GNwYiGR4RSxwEAS4rBAFEISYhKy0sBAEfST4EATsJTE4/DSUXGxocIikZBgFNPBhBIEYuMjI8FQFOTzhPKydLEwYBEk1KJAkgYAFPHhdQTk1HAUlJPzIXSQFNR0xGTVBQQgYnTBMGIwQBGyAmBAEGNBYeBR9FBik9N0UvTEomTEY6SFBPKEgsBAEGRUMFHgZCLTxIATwtSzcGRTMEAQY/QkI4BT09KEEWBj4sAS5BATVBJTI5LD4GHgQBREhJBAE8SD4EAgEfZGFydDpjb3JlLXBhdGNoL2RhdGVfcGF0Y2guZGFydCxvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9kb3VibGUuZGFydJwRLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKLy8gVE9ETzogQ29udmVydCB0aGlzIGFic3RyYWN0IGNsYXNzIGludG8gYSBjb25jcmV0ZSBjbGFzcyBkb3VibGUKLy8gdGhhdCB1c2VzIHRoZSBwYXRjaCBjbGFzcyBmdW5jdGlvbmFsaXR5IHRvIGFjY291bnQgZm9yIHRoZQovLyBkaWZmZXJlbnQgcGxhdGZvcm0gaW1wbGVtZW50YXRpb25zLgoKLyoqCiAqIEEgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBudW1iZXIuCiAqCiAqIFJlcHJlc2VudGF0aW9uIG9mIERhcnQgZG91YmxlcyBjb250YWluaW5nIGRvdWJsZSBzcGVjaWZpYyBjb25zdGFudHMKICogYW5kIG9wZXJhdGlvbnMgYW5kIHNwZWNpYWxpemF0aW9ucyBvZiBvcGVyYXRpb25zIGluaGVyaXRlZCBmcm9tCiAqIFtudW1dLiBEYXJ0IGRvdWJsZXMgYXJlIDY0LWJpdCBmbG9hdGluZy1wb2ludCBudW1iZXJzIGFzIHNwZWNpZmllZCBpbiB0aGUKICogSUVFRSA3NTQgc3RhbmRhcmQuCiAqCiAqIFRoZSBbZG91YmxlXSB0eXBlIGlzIGNvbnRhZ2lvdXMuIE9wZXJhdGlvbnMgb24gW2RvdWJsZV1zIHJldHVybgogKiBbZG91YmxlXSByZXN1bHRzLgogKgogKiBJdCBpcyBhIGNvbXBpbGUtdGltZSBlcnJvciBmb3IgYSBjbGFzcyB0byBhdHRlbXB0IHRvIGV4dGVuZCBvciBpbXBsZW1lbnQKICogZG91YmxlLgogKi8KYWJzdHJhY3QgY2xhc3MgZG91YmxlIGV4dGVuZHMgbnVtIHsKICBzdGF0aWMgY29uc3QgZG91YmxlIG5hbiA9IDAuMCAvIDAuMDsKICBzdGF0aWMgY29uc3QgZG91YmxlIGluZmluaXR5ID0gMS4wIC8gMC4wOwogIHN0YXRpYyBjb25zdCBkb3VibGUgbmVnYXRpdmVJbmZpbml0eSA9IC1pbmZpbml0eTsKICBzdGF0aWMgY29uc3QgZG91YmxlIG1pblBvc2l0aXZlID0gNWUtMzI0OwogIHN0YXRpYyBjb25zdCBkb3VibGUgbWF4RmluaXRlID0gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7CgogIGRvdWJsZSByZW1haW5kZXIobnVtIG90aGVyKTsKCiAgLyoqIEFkZGl0aW9uIG9wZXJhdG9yLiAqLwogIGRvdWJsZSBvcGVyYXRvciArKG51bSBvdGhlcik7CgogIC8qKiBTdWJ0cmFjdGlvbiBvcGVyYXRvci4gKi8KICBkb3VibGUgb3BlcmF0b3IgLShudW0gb3RoZXIpOwoKICAvKiogTXVsdGlwbGljYXRpb24gb3BlcmF0b3IuICovCiAgZG91YmxlIG9wZXJhdG9yICoobnVtIG90aGVyKTsKCiAgZG91YmxlIG9wZXJhdG9yICUobnVtIG90aGVyKTsKCiAgLyoqIERpdmlzaW9uIG9wZXJhdG9yLiAqLwogIGRvdWJsZSBvcGVyYXRvciAvKG51bSBvdGhlcik7CgogIC8qKgogICAqIFRydW5jYXRpbmcgZGl2aXNpb24gb3BlcmF0b3IuCiAgICoKICAgKiBUaGUgcmVzdWx0IG9mIHRoZSB0cnVuY2F0aW5nIGRpdmlzaW9uIGBhIH4vIGJgIGlzIGVxdWl2YWxlbnQgdG8KICAgKiBgKGEgLyBiKS50cnVuY2F0ZSgpYC4KICAgKi8KICBpbnQgb3BlcmF0b3Igfi8obnVtIG90aGVyKTsKCiAgLyoqIE5lZ2F0ZSBvcGVyYXRvci4gKi8KICBkb3VibGUgb3BlcmF0b3IgLSgpOwoKICAvKiogUmV0dXJucyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhpcyBbZG91YmxlXS4gKi8KICBkb3VibGUgYWJzKCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHNpZ24gb2YgdGhlIGRvdWJsZSdzIG51bWVyaWNhbCB2YWx1ZS4KICAgKgogICAqIFJldHVybnMgLTEuMCBpZiB0aGUgdmFsdWUgaXMgbGVzcyB0aGFuIHplcm8sCiAgICogKzEuMCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIHplcm8sCiAgICogYW5kIHRoZSB2YWx1ZSBpdHNlbGYgaWYgaXQgaXMgLTAuMCwgMC4wIG9yIE5hTi4KICAgKi8KICBkb3VibGUgZ2V0IHNpZ247CgogIC8qKgogICAqIFJldHVybnMgdGhlIGludGVnZXIgY2xvc2VzdCB0byBgdGhpc2AuCiAgICoKICAgKiBSb3VuZHMgYXdheSBmcm9tIHplcm8gd2hlbiB0aGVyZSBpcyBubyBjbG9zZXN0IGludGVnZXI6CiAgICogIGAoMy41KS5yb3VuZCgpID09IDRgIGFuZCBgKC0zLjUpLnJvdW5kKCkgPT0gLTRgLgogICAqCiAgICogSWYgYHRoaXNgIGlzIG5vdCBmaW5pdGUgKGBOYU5gIG9yIGluZmluaXR5KSwgdGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXS4KICAgKi8KICBpbnQgcm91bmQoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZ3JlYXRlc3QgaW50ZWdlciBubyBncmVhdGVyIHRoYW4gYHRoaXNgLgogICAqCiAgICogSWYgYHRoaXNgIGlzIG5vdCBmaW5pdGUgKGBOYU5gIG9yIGluZmluaXR5KSwgdGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXS4KICAgKi8KICBpbnQgZmxvb3IoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbGVhc3QgaW50ZWdlciBubyBzbWFsbGVyIHRoYW4gYHRoaXNgLgogICAqCiAgICogSWYgYHRoaXNgIGlzIG5vdCBmaW5pdGUgKGBOYU5gIG9yIGluZmluaXR5KSwgdGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXS4KICAgKi8KICBpbnQgY2VpbCgpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBpbnRlZ2VyIG9idGFpbmVkIGJ5IGRpc2NhcmRpbmcgYW55IGZyYWN0aW9uYWwKICAgKiBkaWdpdHMgZnJvbSBgdGhpc2AuCiAgICoKICAgKiBJZiBgdGhpc2AgaXMgbm90IGZpbml0ZSAoYE5hTmAgb3IgaW5maW5pdHkpLCB0aHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdLgogICAqLwogIGludCB0cnVuY2F0ZSgpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBpbnRlZ2VyIGRvdWJsZSB2YWx1ZSBjbG9zZXN0IHRvIGB0aGlzYC4KICAgKgogICAqIFJvdW5kcyBhd2F5IGZyb20gemVybyB3aGVuIHRoZXJlIGlzIG5vIGNsb3Nlc3QgaW50ZWdlcjoKICAgKiAgYCgzLjUpLnJvdW5kVG9Eb3VibGUoKSA9PSA0YCBhbmQgYCgtMy41KS5yb3VuZFRvRG91YmxlKCkgPT0gLTRgLgogICAqCiAgICogSWYgdGhpcyBpcyBhbHJlYWR5IGFuIGludGVnZXIgdmFsdWVkIGRvdWJsZSwgaW5jbHVkaW5nIGAtMC4wYCwgb3IgaXQgaXMgbm90CiAgICogYSBmaW5pdGUgdmFsdWUsIHRoZSB2YWx1ZSBpcyByZXR1cm5lZCB1bm1vZGlmaWVkLgogICAqCiAgICogRm9yIHRoZSBwdXJwb3NlIG9mIHJvdW5kaW5nLCBgLTAuMGAgaXMgY29uc2lkZXJlZCB0byBiZSBiZWxvdyBgMC4wYCwKICAgKiBhbmQgYC0wLjBgIGlzIHRoZXJlZm9yZSBjb25zaWRlcmVkIGNsb3NlciB0byBuZWdhdGl2ZSBudW1iZXJzIHRoYW4gYDAuMGAuCiAgICogVGhpcyBtZWFucyB0aGF0IGZvciBhIHZhbHVlLCBgZGAgaW4gdGhlIHJhbmdlIGAtMC41IDwgZCA8IDAuMGAsCiAgICogdGhlIHJlc3VsdCBpcyBgLTAuMGAuCiAgICovCiAgZG91YmxlIHJvdW5kVG9Eb3VibGUoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZ3JlYXRlc3QgaW50ZWdlciBkb3VibGUgdmFsdWUgbm8gZ3JlYXRlciB0aGFuIGB0aGlzYC4KICAgKgogICAqIElmIHRoaXMgaXMgYWxyZWFkeSBhbiBpbnRlZ2VyIHZhbHVlZCBkb3VibGUsIGluY2x1ZGluZyBgLTAuMGAsIG9yIGl0IGlzIG5vdAogICAqIGEgZmluaXRlIHZhbHVlLCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQgdW5tb2RpZmllZC4KICAgKgogICAqIEZvciB0aGUgcHVycG9zZSBvZiByb3VuZGluZywgYC0wLjBgIGlzIGNvbnNpZGVyZWQgdG8gYmUgYmVsb3cgYDAuMGAuCiAgICogQSBudW1iZXIgYGRgIGluIHRoZSByYW5nZSBgMC4wIDwgZCA8IDEuMGAgd2lsbCByZXR1cm4gYDAuMGAuCiAgICovCiAgZG91YmxlIGZsb29yVG9Eb3VibGUoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbGVhc3QgaW50ZWdlciBkb3VibGUgdmFsdWUgbm8gc21hbGxlciB0aGFuIGB0aGlzYC4KICAgKgogICAqIElmIHRoaXMgaXMgYWxyZWFkeSBhbiBpbnRlZ2VyIHZhbHVlZCBkb3VibGUsIGluY2x1ZGluZyBgLTAuMGAsIG9yIGl0IGlzIG5vdAogICAqIGEgZmluaXRlIHZhbHVlLCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQgdW5tb2RpZmllZC4KICAgKgogICAqIEZvciB0aGUgcHVycG9zZSBvZiByb3VuZGluZywgYC0wLjBgIGlzIGNvbnNpZGVyZWQgdG8gYmUgYmVsb3cgYDAuMGAuCiAgICogQSBudW1iZXIgYGRgIGluIHRoZSByYW5nZSBgLTEuMCA8IGQgPCAwLjBgIHdpbGwgcmV0dXJuIGAtMC4wYC4KICAgKi8KICBkb3VibGUgY2VpbFRvRG91YmxlKCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGludGVnZXIgZG91YmxlIHZhbHVlIG9idGFpbmVkIGJ5IGRpc2NhcmRpbmcgYW55IGZyYWN0aW9uYWwKICAgKiBkaWdpdHMgZnJvbSBgdGhpc2AuCiAgICoKICAgKiBJZiB0aGlzIGlzIGFscmVhZHkgYW4gaW50ZWdlciB2YWx1ZWQgZG91YmxlLCBpbmNsdWRpbmcgYC0wLjBgLCBvciBpdCBpcyBub3QKICAgKiBhIGZpbml0ZSB2YWx1ZSwgdGhlIHZhbHVlIGlzIHJldHVybmVkIHVubW9kaWZpZWQuCiAgICoKICAgKiBGb3IgdGhlIHB1cnBvc2Ugb2Ygcm91bmRpbmcsIGAtMC4wYCBpcyBjb25zaWRlcmVkIHRvIGJlIGJlbG93IGAwLjBgLgogICAqIEEgbnVtYmVyIGBkYCBpbiB0aGUgcmFuZ2UgYC0xLjAgPCBkIDwgMC4wYCB3aWxsIHJldHVybiBgLTAuMGAsIGFuZAogICAqIGluIHRoZSByYW5nZSBgMC4wIDwgZCA8IDEuMGAgaXQgd2lsbCByZXR1cm4gMC4wLgogICAqLwogIGRvdWJsZSB0cnVuY2F0ZVRvRG91YmxlKCk7CgogIC8qKgogICAqIFByb3ZpZGUgYSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIFtkb3VibGVdIHZhbHVlLgogICAqCiAgICogVGhlIHJlcHJlc2VudGF0aW9uIGlzIGEgbnVtYmVyIGxpdGVyYWwgc3VjaCB0aGF0IHRoZSBjbG9zZXN0IGRvdWJsZSB2YWx1ZQogICAqIHRvIHRoZSByZXByZXNlbnRhdGlvbidzIG1hdGhlbWF0aWNhbCB2YWx1ZSBpcyB0aGlzIFtkb3VibGVdLgogICAqCiAgICogUmV0dXJucyAiTmFOIiBmb3IgdGhlIE5vdC1hLU51bWJlciB2YWx1ZS4KICAgKiBSZXR1cm5zICJJbmZpbml0eSIgYW5kICItSW5maW5pdHkiIGZvciBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgSW5maW5pdHkuCiAgICogUmV0dXJucyAiLTAuMCIgZm9yIG5lZ2F0aXZlIHplcm8uCiAgICoKICAgKiBGb3IgYWxsIGRvdWJsZXMsIGBkYCwgY29udmVydGluZyB0byBhIHN0cmluZyBhbmQgcGFyc2luZyB0aGUgc3RyaW5nIGJhY2sKICAgKiBnaXZlcyB0aGUgc2FtZSB2YWx1ZSBhZ2FpbjogYGQgPT0gZG91YmxlLnBhcnNlKGQudG9TdHJpbmcoKSlgIChleGNlcHQgd2hlbgogICAqIGBkYCBpcyBOYU4pLgogICAqLwogIFN0cmluZyB0b1N0cmluZygpOwoKICAvKioKICAgKiBQYXJzZSBbc291cmNlXSBhcyBhbiBkb3VibGUgbGl0ZXJhbCBhbmQgcmV0dXJuIGl0cyB2YWx1ZS4KICAgKgogICAqIEFjY2VwdHMgYW4gb3B0aW9uYWwgc2lnbiAoYCtgIG9yIGAtYCkgZm9sbG93ZWQgYnkgZWl0aGVyIHRoZSBjaGFyYWN0ZXJzCiAgICogIkluZmluaXR5IiwgdGhlIGNoYXJhY3RlcnMgIk5hTiIgb3IgYSBmbG9hdGluZy1wb2ludCByZXByZXNlbnRhdGlvbi4KICAgKiBBIGZsb2F0aW5nLXBvaW50IHJlcHJlc2VudGF0aW9uIGlzIGNvbXBvc2VkIG9mIGEgbWFudGlzc2EgYW5kIGFuIG9wdGlvbmFsCiAgICogZXhwb25lbnQgcGFydC4gVGhlIG1hbnRpc3NhIGlzIGVpdGhlciBhIGRlY2ltYWwgcG9pbnQgKGAuYCkgZm9sbG93ZWQgYnkgYQogICAqIHNlcXVlbmNlIG9mIChkZWNpbWFsKSBkaWdpdHMsIG9yIGEgc2VxdWVuY2Ugb2YgZGlnaXRzCiAgICogb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhIGRlY2ltYWwgcG9pbnQgYW5kIG9wdGlvbmFsbHkgbW9yZSBkaWdpdHMuIFRoZQogICAqIChvcHRpb25hbCkgZXhwb25lbnQgcGFydCBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVyICJlIiBvciAiRSIsIGFuIG9wdGlvbmFsCiAgICogc2lnbiwgYW5kIG9uZSBvciBtb3JlIGRpZ2l0cy4KICAgKiBUaGUgW3NvdXJjZV0gbXVzdCBub3QgYmUgYG51bGxgLgogICAqCiAgICogTGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBpcyBpZ25vcmVkLgogICAqCiAgICogSWYgdGhlIFtzb3VyY2VdIHN0cmluZyBpcyBub3QgYSB2YWxpZCBkb3VibGUgbGl0ZXJhbCwgdGhlIFtvbkVycm9yXQogICAqIGlzIGNhbGxlZCB3aXRoIHRoZSBbc291cmNlXSBhcyBhcmd1bWVudCwgYW5kIGl0cyByZXR1cm4gdmFsdWUgaXMKICAgKiB1c2VkIGluc3RlYWQuIElmIG5vIGBvbkVycm9yYCBpcyBwcm92aWRlZCwgYSBbRm9ybWF0RXhjZXB0aW9uXQogICAqIGlzIHRocm93biBpbnN0ZWFkLgogICAqCiAgICogVGhlIFtvbkVycm9yXSBmdW5jdGlvbiBpcyBvbmx5IGludm9rZWQgaWYgW3NvdXJjZV0gaXMgYSBbU3RyaW5nXSB3aXRoIGFuCiAgICogaW52YWxpZCBmb3JtYXQuIEl0IGlzIG5vdCBpbnZva2VkIGlmIFtzb3VyY2VdIGlzIGBudWxsYC4KICAgKgogICAqIEV4YW1wbGVzIG9mIGFjY2VwdGVkIHN0cmluZ3M6CiAgICoKICAgKiAgICAgIjMuMTQiCiAgICogICAgICIgIDMuMTQgXHhBMCIKICAgKiAgICAgIjAuIgogICAqICAgICAiLjAiCiAgICogICAgICItMS5lMyIKICAgKiAgICAgIjEyMzRFKzciCiAgICogICAgICIrLjEyZS05IgogICAqICAgICAiLU5hTiIKICAgKgogICAqIFRoZSBbb25FcnJvcl0gcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4KICAgKiBJbnN0ZWFkIG9mIGBkb3VibGUucGFyc2Uoc3RyaW5nLCAoc3RyaW5nKSB7IC4uLiB9KWAsCiAgICogeW91IHNob3VsZCB1c2UgYGRvdWJsZS50cnlQYXJzZShzdHJpbmcpID8/ICguLi4pYC4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgZG91YmxlIHBhcnNlKFN0cmluZyBzb3VyY2UsCiAgICAgIFtAZGVwcmVjYXRlZCBkb3VibGUgb25FcnJvcihTdHJpbmcgc291cmNlKV0pOwoKICAvKioKICAgKiBQYXJzZSBbc291cmNlXSBhcyBhbiBkb3VibGUgbGl0ZXJhbCBhbmQgcmV0dXJuIGl0cyB2YWx1ZS4KICAgKgogICAqIExpa2UgW3BhcnNlXSBleGNlcHQgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYG51bGxgIGZvciBpbnZhbGlkIGlucHV0cwogICAqIGluc3RlYWQgb2YgdGhyb3dpbmcsIGFuZCB0aGUgW3NvdXJjZV0gbXVzdCBzdGlsbCBub3QgYmUgYG51bGxgLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBkb3VibGUgdHJ5UGFyc2UoU3RyaW5nIHNvdXJjZSk7Cn0KgNwATk48ARMBQj4nAQQtA0dDTRYDQxUDTAsEJCcsNCw7AR8BHCABHyABIiABIAEcIAEGIwVFGwYeARoXATYQAQY3BTItNQYTAQYsBT03BVAGDwEGOgVQBg8BBjcFUAYOAQY/GQVQBhIBBjkFPUcFUTcFSk9FGwYaAQZHBVE3BUpCBhoBBkQFUTcFSkQGGQEGTBkFUTcFSkg2Bh0BBjYFT0IFL0wnBU5QEgYVAQY/BU1KT087TFAjJgUxBUlGRBgFTj4FIwUQFw4OERMTEAVAOjgGLjQBBj8FTkUGMgIBFWRhcnQ6Y29yZS9kb3VibGUuZGFydDFvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL2RvdWJsZV9wYXRjaC5kYXJ0jq0vLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCi8vIFZNIGltcGxlbWVudGF0aW9uIG9mIGRvdWJsZS4KCkBwYXRjaApjbGFzcyBkb3VibGUgewogIHN0YXRpYyBkb3VibGUgX25hdGl2ZVBhcnNlKFN0cmluZyBzdHIsIGludCBzdGFydCwgaW50IGVuZCkKICAgICAgbmF0aXZlICJEb3VibGVfcGFyc2UiOwoKICBzdGF0aWMgZG91YmxlIF90cnlQYXJzZURvdWJsZSh2YXIgc3RyLCB2YXIgc3RhcnQsIHZhciBlbmQpIHsKICAgIGFzc2VydChzdGFydCA8IGVuZCk7CiAgICBjb25zdCBpbnQgX0RPVCA9IDB4MmU7IC8vICcuJwogICAgY29uc3QgaW50IF9aRVJPID0gMHgzMDsgLy8gJzAnCiAgICBjb25zdCBpbnQgX01JTlVTID0gMHgyZDsgLy8gJy0nCiAgICBjb25zdCBpbnQgX04gPSAweDRlOyAvLyAnTicKICAgIGNvbnN0IGludCBfYSA9IDB4NjE7IC8vICdhJwogICAgY29uc3QgaW50IF9JID0gMHg0OTsgLy8gJ0knCiAgICBjb25zdCBpbnQgX2UgPSAweDY1OyAvLyAnZScKICAgIGludCBleHBvbmVudCA9IDA7CiAgICAvLyBTZXQgdG8gbm9uLXplcm8gaWYgYSBkaWdpdCBpcyBzZWVuLiBBdm9pZHMgYWNjZXB0aW5nICIuIi4KICAgIGJvb2wgZGlnaXRzU2VlbiA9IGZhbHNlOwogICAgLy8gQWRkZWQgdG8gZXhwb25lbnQgZm9yIGVhY2ggZGlnaXQuIFNldCB0byAtMSB3aGVuIHNlZWluZyAnLicuCiAgICBpbnQgZXhwb25lbnREZWx0YSA9IDA7CiAgICBkb3VibGUgZG91YmxlVmFsdWUgPSAwLjA7CiAgICBkb3VibGUgc2lnbiA9IDEuMDsKICAgIGludCBmaXJzdENoYXIgPSBzdHIuY29kZVVuaXRBdChzdGFydCk7CiAgICBpZiAoZmlyc3RDaGFyID09IF9NSU5VUykgewogICAgICBzaWduID0gLTEuMDsKICAgICAgc3RhcnQrKzsKICAgICAgaWYgKHN0YXJ0ID09IGVuZCkgcmV0dXJuIG51bGw7CiAgICAgIGZpcnN0Q2hhciA9IHN0ci5jb2RlVW5pdEF0KHN0YXJ0KTsKICAgIH0KICAgIGlmIChmaXJzdENoYXIgPT0gX0kpIHsKICAgICAgaWYgKGVuZCA9PSBzdGFydCArIDggJiYgc3RyLnN0YXJ0c1dpdGgoIm5maW5pdHkiLCBzdGFydCArIDEpKSB7CiAgICAgICAgcmV0dXJuIHNpZ24gKiBkb3VibGUuaW5maW5pdHk7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAoZmlyc3RDaGFyID09IF9OKSB7CiAgICAgIGlmIChlbmQgPT0gc3RhcnQgKyAzICYmCiAgICAgICAgICBzdHIuY29kZVVuaXRBdChzdGFydCArIDEpID09IF9hICYmCiAgICAgICAgICBzdHIuY29kZVVuaXRBdChzdGFydCArIDIpID09IF9OKSB7CiAgICAgICAgcmV0dXJuIGRvdWJsZS5uYW47CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgaW50IGZpcnN0RGlnaXQgPSBmaXJzdENoYXIgXiBfWkVSTzsKICAgIGlmIChmaXJzdERpZ2l0IDw9IDkpIHsKICAgICAgc3RhcnQrKzsKICAgICAgZG91YmxlVmFsdWUgPSBmaXJzdERpZ2l0LnRvRG91YmxlKCk7CiAgICAgIGRpZ2l0c1NlZW4gPSB0cnVlOwogICAgfQogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgaW50IGMgPSBzdHIuY29kZVVuaXRBdChpKTsKICAgICAgaW50IGRpZ2l0ID0gYyBeIF9aRVJPOyAvLyAnMCctJzknIGNoYXJhY3RlcnMgYXJlIG5vdyAwLTkgaW50ZWdlcnMuCiAgICAgIGlmIChkaWdpdCA8PSA5KSB7CiAgICAgICAgZG91YmxlVmFsdWUgPSAxMC4wICogZG91YmxlVmFsdWUgKyBkaWdpdDsKICAgICAgICAvLyBEb3VibGVzIGF0IG9yIGFib3ZlIHRoaXMgdmFsdWUgKDIqKjUzKSBtaWdodCBoYXZlIGxvc3QgcHJlY2lzc2lvbi4KICAgICAgICBjb25zdCBkb3VibGUgTUFYX0VYQUNUX0RPVUJMRSA9IDkwMDcxOTkyNTQ3NDA5OTIuMDsKICAgICAgICBpZiAoZG91YmxlVmFsdWUgPj0gTUFYX0VYQUNUX0RPVUJMRSkgcmV0dXJuIG51bGw7CiAgICAgICAgZXhwb25lbnQgKz0gZXhwb25lbnREZWx0YTsKICAgICAgICBkaWdpdHNTZWVuID0gdHJ1ZTsKICAgICAgfSBlbHNlIGlmIChjID09IF9ET1QgJiYgZXhwb25lbnREZWx0YSA9PSAwKSB7CiAgICAgICAgZXhwb25lbnREZWx0YSA9IC0xOwogICAgICB9IGVsc2UgaWYgKChjIHwgMHgyMCkgPT0gX2UpIHsKICAgICAgICBpKys7CiAgICAgICAgaWYgKGkgPT0gZW5kKSByZXR1cm4gbnVsbDsKICAgICAgICAvLyBpbnQuX3RyeVBhcnNlU21pIHRyZWF0cyBpdHMgZW5kIGFyZ3VtZW50IGFzIGluY2x1c2l2ZS4KICAgICAgICBpbnQgZXhwUGFydCA9IGludC5fdHJ5UGFyc2VTbWkoc3RyLCBpLCBlbmQgLSAxKTsKICAgICAgICBpZiAoZXhwUGFydCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICBleHBvbmVudCArPSBleHBQYXJ0OwogICAgICAgIGJyZWFrOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgICBpZiAoIWRpZ2l0c1NlZW4pIHJldHVybiBudWxsOyAvLyBObyBkaWdpdHMuCiAgICBpZiAoZXhwb25lbnQgPT0gMCkgcmV0dXJuIHNpZ24gKiBkb3VibGVWYWx1ZTsKICAgIGNvbnN0IFAxMCA9IFBPV0VSU19PRl9URU47IC8vIEZyb20gc2hhcmVkIGxpYnJhcnkKICAgIGlmIChleHBvbmVudCA8IDApIHsKICAgICAgaW50IG5lZ0V4cG9uZW50ID0gLWV4cG9uZW50OwogICAgICBpZiAobmVnRXhwb25lbnQgPj0gUDEwLmxlbmd0aCkgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiBzaWduICogKGRvdWJsZVZhbHVlIC8gUDEwW25lZ0V4cG9uZW50XSk7CiAgICB9CiAgICBpZiAoZXhwb25lbnQgPj0gUDEwLmxlbmd0aCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gc2lnbiAqIChkb3VibGVWYWx1ZSAqIFAxMFtleHBvbmVudF0pOwogIH0KCiAgc3RhdGljIGRvdWJsZSBfcGFyc2UodmFyIHN0cikgewogICAgaW50IGxlbiA9IHN0ci5sZW5ndGg7CiAgICBpbnQgc3RhcnQgPSBzdHIuX2ZpcnN0Tm9uV2hpdGVzcGFjZSgpOwogICAgaWYgKHN0YXJ0ID09IGxlbikgcmV0dXJuIG51bGw7IC8vIEFsbCB3aGl0ZXNwYWNlLgogICAgaW50IGVuZCA9IHN0ci5fbGFzdE5vbldoaXRlc3BhY2UoKSArIDE7CiAgICBhc3NlcnQoc3RhcnQgPCBlbmQpOwogICAgdmFyIHJlc3VsdCA9IF90cnlQYXJzZURvdWJsZShzdHIsIHN0YXJ0LCBlbmQpOwogICAgaWYgKHJlc3VsdCAhPSBudWxsKSByZXR1cm4gcmVzdWx0OwogICAgcmV0dXJuIF9uYXRpdmVQYXJzZShzdHIsIHN0YXJ0LCBlbmQpOwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIGRvdWJsZSBwYXJzZShTdHJpbmcgc291cmNlLAogICAgICBbQGRlcHJlY2F0ZWQgZG91YmxlIG9uRXJyb3IoU3RyaW5nIHNvdXJjZSldKSB7CiAgICB2YXIgcmVzdWx0ID0gX3BhcnNlKHNvdXJjZSk7CiAgICBpZiAocmVzdWx0ID09IG51bGwpIHsKICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBkb3VibGUiLCBzb3VyY2UpOwogICAgICByZXR1cm4gb25FcnJvcihzb3VyY2UpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBkb3VibGUgdHJ5UGFyc2UoU3RyaW5nIHNvdXJjZSkgPT4gX3BhcnNlKHNvdXJjZSk7Cn0KeABOTjwBHgEgAQcPPR0BPxkiIyQgICAgFkEdRBseFysfEw8lKQYbRicIEwYbHi0tGwgTBgEoGw8rGQYoIUkYMk48OiMbNBwlDSNCOSodDw8VCAYwMjYYIzI2Bi0xBAEiGis2LBkzJyoEAQklNSEaUB4GEwQBCTsCASFkYXJ0OmNvcmUtcGF0Y2gvZG91YmxlX3BhdGNoLmRhcnQub3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvZHVyYXRpb24uZGFydKagLy8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIEEgc3BhbiBvZiB0aW1lLCBzdWNoIGFzIDI3IGRheXMsIDQgaG91cnMsIDEyIG1pbnV0ZXMsIGFuZCAzIHNlY29uZHMuCiAqCiAqIEEgYER1cmF0aW9uYCByZXByZXNlbnRzIGEgZGlmZmVyZW5jZSBmcm9tIG9uZSBwb2ludCBpbiB0aW1lIHRvIGFub3RoZXIuIFRoZQogKiBkdXJhdGlvbiBtYXkgYmUgIm5lZ2F0aXZlIiBpZiB0aGUgZGlmZmVyZW5jZSBpcyBmcm9tIGEgbGF0ZXIgdGltZSB0byBhbgogKiBlYXJsaWVyLgogKgogKiBEdXJhdGlvbnMgYXJlIGNvbnRleHQgaW5kZXBlbmRlbnQuIEZvciBleGFtcGxlLCBhIGR1cmF0aW9uIG9mIDIgZGF5cyBpcwogKiBhbHdheXMgNDggaG91cnMsIGV2ZW4gd2hlbiBpdCBpcyBhZGRlZCB0byBhIGBEYXRlVGltZWAganVzdCB3aGVuIHRoZQogKiB0aW1lIHpvbmUgaXMgYWJvdXQgdG8gZG8gYSBkYXlsaWdodC1zYXZpbmdzIHN3aXRjaC4gKFNlZSBbRGF0ZVRpbWUuYWRkXSkuCiAqCiAqIERlc3BpdGUgdGhlIHNhbWUgbmFtZSwgYSBgRHVyYXRpb25gIG9iamVjdCBkb2VzIG5vdCBpbXBsZW1lbnQgIkR1cmF0aW9ucyIKICogYXMgc3BlY2lmaWVkIGJ5IElTTyA4NjAxLiBJbiBwYXJ0aWN1bGFyLCBhIGR1cmF0aW9uIG9iamVjdCBkb2VzIG5vdCBrZWVwCiAqIHRyYWNrIG9mIHRoZSBpbmRpdmlkdWFsbHkgcHJvdmlkZWQgbWVtYmVycyAoc3VjaCBhcyAiZGF5cyIgb3IgImhvdXJzIiksIGJ1dAogKiBvbmx5IHVzZXMgdGhlc2UgYXJndW1lbnRzIHRvIGNvbXB1dGUgdGhlIGxlbmd0aCBvZiB0aGUgY29ycmVzcG9uZGluZyB0aW1lCiAqIGludGVydmFsLgogKgogKiBUbyBjcmVhdGUgYSBuZXcgRHVyYXRpb24gb2JqZWN0LCB1c2UgdGhpcyBjbGFzcydzIHNpbmdsZSBjb25zdHJ1Y3RvcgogKiBnaXZpbmcgdGhlIGFwcHJvcHJpYXRlIGFyZ3VtZW50czoKICogYGBgZGFydAogKiBEdXJhdGlvbiBmYXN0ZXN0TWFyYXRob24gPSBuZXcgRHVyYXRpb24oaG91cnM6MiwgbWludXRlczozLCBzZWNvbmRzOjIpOwogKiBgYGAKICogVGhlIFtEdXJhdGlvbl0gaXMgdGhlIHN1bSBvZiBhbGwgaW5kaXZpZHVhbCBwYXJ0cy4KICogVGhpcyBtZWFucyB0aGF0IGluZGl2aWR1YWwgcGFydHMgY2FuIGJlIGxhcmdlciB0aGFuIHRoZSBuZXh0LWJpZ2dlciB1bml0LgogKiBGb3IgZXhhbXBsZSwgW2luTWludXRlc10gY2FuIGJlIGdyZWF0ZXIgdGhhbiA1OS4KICogYGBgZGFydAogKiBhc3NlcnQoZmFzdGVzdE1hcmF0aG9uLmluTWludXRlcyA9PSAxMjMpOwogKiBgYGAKICogQWxsIGluZGl2aWR1YWwgcGFydHMgYXJlIGFsbG93ZWQgdG8gYmUgbmVnYXRpdmUuCiAqCiAqIFVzZSBvbmUgb2YgdGhlIHByb3BlcnRpZXMsIHN1Y2ggYXMgW2luRGF5c10sCiAqIHRvIHJldHJpZXZlIHRoZSBpbnRlZ2VyIHZhbHVlIG9mIHRoZSBEdXJhdGlvbiBpbiB0aGUgc3BlY2lmaWVkIHRpbWUgdW5pdC4KICogTm90ZSB0aGF0IHRoZSByZXR1cm5lZCB2YWx1ZSBpcyByb3VuZGVkIGRvd24uCiAqIEZvciBleGFtcGxlLAogKiBgYGBkYXJ0CiAqIER1cmF0aW9uIGFMb25nV2Vla2VuZCA9IG5ldyBEdXJhdGlvbihob3Vyczo4OCk7CiAqIGFzc2VydChhTG9uZ1dlZWtlbmQuaW5EYXlzID09IDMpOwogKiBgYGAKICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIGNvbGxlY3Rpb24gb2YgYXJpdGhtZXRpYwogKiBhbmQgY29tcGFyaXNvbiBvcGVyYXRvcnMsCiAqIHBsdXMgYSBzZXQgb2YgY29uc3RhbnRzIHVzZWZ1bCBmb3IgY29udmVydGluZyB0aW1lIHVuaXRzLgogKgogKiBTZWUgW0RhdGVUaW1lXSB0byByZXByZXNlbnQgYSBwb2ludCBpbiB0aW1lLgogKiBTZWUgW1N0b3B3YXRjaF0gdG8gbWVhc3VyZSB0aW1lLXNwYW5zLgogKi8KY2xhc3MgRHVyYXRpb24gaW1wbGVtZW50cyBDb21wYXJhYmxlPER1cmF0aW9uPiB7CiAgc3RhdGljIGNvbnN0IGludCBtaWNyb3NlY29uZHNQZXJNaWxsaXNlY29uZCA9IDEwMDA7CiAgc3RhdGljIGNvbnN0IGludCBtaWxsaXNlY29uZHNQZXJTZWNvbmQgPSAxMDAwOwogIHN0YXRpYyBjb25zdCBpbnQgc2Vjb25kc1Blck1pbnV0ZSA9IDYwOwogIHN0YXRpYyBjb25zdCBpbnQgbWludXRlc1BlckhvdXIgPSA2MDsKICBzdGF0aWMgY29uc3QgaW50IGhvdXJzUGVyRGF5ID0gMjQ7CgogIHN0YXRpYyBjb25zdCBpbnQgbWljcm9zZWNvbmRzUGVyU2Vjb25kID0KICAgICAgbWljcm9zZWNvbmRzUGVyTWlsbGlzZWNvbmQgKiBtaWxsaXNlY29uZHNQZXJTZWNvbmQ7CiAgc3RhdGljIGNvbnN0IGludCBtaWNyb3NlY29uZHNQZXJNaW51dGUgPQogICAgICBtaWNyb3NlY29uZHNQZXJTZWNvbmQgKiBzZWNvbmRzUGVyTWludXRlOwogIHN0YXRpYyBjb25zdCBpbnQgbWljcm9zZWNvbmRzUGVySG91ciA9IG1pY3Jvc2Vjb25kc1Blck1pbnV0ZSAqIG1pbnV0ZXNQZXJIb3VyOwogIHN0YXRpYyBjb25zdCBpbnQgbWljcm9zZWNvbmRzUGVyRGF5ID0gbWljcm9zZWNvbmRzUGVySG91ciAqIGhvdXJzUGVyRGF5OwoKICBzdGF0aWMgY29uc3QgaW50IG1pbGxpc2Vjb25kc1Blck1pbnV0ZSA9CiAgICAgIG1pbGxpc2Vjb25kc1BlclNlY29uZCAqIHNlY29uZHNQZXJNaW51dGU7CiAgc3RhdGljIGNvbnN0IGludCBtaWxsaXNlY29uZHNQZXJIb3VyID0gbWlsbGlzZWNvbmRzUGVyTWludXRlICogbWludXRlc1BlckhvdXI7CiAgc3RhdGljIGNvbnN0IGludCBtaWxsaXNlY29uZHNQZXJEYXkgPSBtaWxsaXNlY29uZHNQZXJIb3VyICogaG91cnNQZXJEYXk7CgogIHN0YXRpYyBjb25zdCBpbnQgc2Vjb25kc1BlckhvdXIgPSBzZWNvbmRzUGVyTWludXRlICogbWludXRlc1BlckhvdXI7CiAgc3RhdGljIGNvbnN0IGludCBzZWNvbmRzUGVyRGF5ID0gc2Vjb25kc1BlckhvdXIgKiBob3Vyc1BlckRheTsKCiAgc3RhdGljIGNvbnN0IGludCBtaW51dGVzUGVyRGF5ID0gbWludXRlc1BlckhvdXIgKiBob3Vyc1BlckRheTsKCiAgc3RhdGljIGNvbnN0IER1cmF0aW9uIHplcm8gPSBEdXJhdGlvbihzZWNvbmRzOiAwKTsKCiAgLyoKICAgKiBUaGUgdmFsdWUgb2YgdGhpcyBEdXJhdGlvbiBvYmplY3QgaW4gbWljcm9zZWNvbmRzLgogICAqLwogIGZpbmFsIGludCBfZHVyYXRpb247CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgRHVyYXRpb24gb2JqZWN0IHdob3NlIHZhbHVlCiAgICogaXMgdGhlIHN1bSBvZiBhbGwgaW5kaXZpZHVhbCBwYXJ0cy4KICAgKgogICAqIEluZGl2aWR1YWwgcGFydHMgY2FuIGJlIGxhcmdlciB0aGFuIHRoZSBuZXh0LWJpZ2dlciB1bml0LgogICAqIEZvciBleGFtcGxlLCBbaG91cnNdIGNhbiBiZSBncmVhdGVyIHRoYW4gMjMuCiAgICoKICAgKiBBbGwgaW5kaXZpZHVhbCBwYXJ0cyBhcmUgYWxsb3dlZCB0byBiZSBuZWdhdGl2ZS4KICAgKiBBbGwgYXJndW1lbnRzIGFyZSAwIGJ5IGRlZmF1bHQuCiAgICovCiAgY29uc3QgRHVyYXRpb24oCiAgICAgIHtpbnQgZGF5cyA9IDAsCiAgICAgIGludCBob3VycyA9IDAsCiAgICAgIGludCBtaW51dGVzID0gMCwKICAgICAgaW50IHNlY29uZHMgPSAwLAogICAgICBpbnQgbWlsbGlzZWNvbmRzID0gMCwKICAgICAgaW50IG1pY3Jvc2Vjb25kcyA9IDB9KQogICAgICA6IHRoaXMuX21pY3Jvc2Vjb25kcyhtaWNyb3NlY29uZHNQZXJEYXkgKiBkYXlzICsKICAgICAgICAgICAgbWljcm9zZWNvbmRzUGVySG91ciAqIGhvdXJzICsKICAgICAgICAgICAgbWljcm9zZWNvbmRzUGVyTWludXRlICogbWludXRlcyArCiAgICAgICAgICAgIG1pY3Jvc2Vjb25kc1BlclNlY29uZCAqIHNlY29uZHMgKwogICAgICAgICAgICBtaWNyb3NlY29uZHNQZXJNaWxsaXNlY29uZCAqIG1pbGxpc2Vjb25kcyArCiAgICAgICAgICAgIG1pY3Jvc2Vjb25kcyk7CgogIC8vIEZhc3QgcGF0aCBpbnRlcm5hbCBkaXJlY3QgY29uc3RydWN0b3IgdG8gYXZvaWRzIHRoZSBvcHRpb25hbCBhcmd1bWVudHMgYW5kCiAgLy8gW19taWNyb3NlY29uZHNdIHJlY29tcHV0YXRpb24uCiAgY29uc3QgRHVyYXRpb24uX21pY3Jvc2Vjb25kcyh0aGlzLl9kdXJhdGlvbik7CgogIC8qKgogICAqIEFkZHMgdGhpcyBEdXJhdGlvbiBhbmQgW290aGVyXSBhbmQKICAgKiByZXR1cm5zIHRoZSBzdW0gYXMgYSBuZXcgRHVyYXRpb24gb2JqZWN0LgogICAqLwogIER1cmF0aW9uIG9wZXJhdG9yICsoRHVyYXRpb24gb3RoZXIpIHsKICAgIHJldHVybiBEdXJhdGlvbi5fbWljcm9zZWNvbmRzKF9kdXJhdGlvbiArIG90aGVyLl9kdXJhdGlvbik7CiAgfQoKICAvKioKICAgKiBTdWJ0cmFjdHMgW290aGVyXSBmcm9tIHRoaXMgRHVyYXRpb24gYW5kCiAgICogcmV0dXJucyB0aGUgZGlmZmVyZW5jZSBhcyBhIG5ldyBEdXJhdGlvbiBvYmplY3QuCiAgICovCiAgRHVyYXRpb24gb3BlcmF0b3IgLShEdXJhdGlvbiBvdGhlcikgewogICAgcmV0dXJuIER1cmF0aW9uLl9taWNyb3NlY29uZHMoX2R1cmF0aW9uIC0gb3RoZXIuX2R1cmF0aW9uKTsKICB9CgogIC8qKgogICAqIE11bHRpcGxpZXMgdGhpcyBEdXJhdGlvbiBieSB0aGUgZ2l2ZW4gW2ZhY3Rvcl0gYW5kIHJldHVybnMgdGhlIHJlc3VsdAogICAqIGFzIGEgbmV3IER1cmF0aW9uIG9iamVjdC4KICAgKgogICAqIE5vdGUgdGhhdCB3aGVuIFtmYWN0b3JdIGlzIGEgZG91YmxlLCBhbmQgdGhlIGR1cmF0aW9uIGlzIGdyZWF0ZXIgdGhhbgogICAqIDUzIGJpdHMsIHByZWNpc2lvbiBpcyBsb3N0IGJlY2F1c2Ugb2YgZG91YmxlLXByZWNpc2lvbiBhcml0aG1ldGljLgogICAqLwogIER1cmF0aW9uIG9wZXJhdG9yICoobnVtIGZhY3RvcikgewogICAgcmV0dXJuIER1cmF0aW9uLl9taWNyb3NlY29uZHMoKF9kdXJhdGlvbiAqIGZhY3Rvcikucm91bmQoKSk7CiAgfQoKICAvKioKICAgKiBEaXZpZGVzIHRoaXMgRHVyYXRpb24gYnkgdGhlIGdpdmVuIFtxdW90aWVudF0gYW5kIHJldHVybnMgdGhlIHRydW5jYXRlZAogICAqIHJlc3VsdCBhcyBhIG5ldyBEdXJhdGlvbiBvYmplY3QuCiAgICoKICAgKiBUaHJvd3MgYW4gW0ludGVnZXJEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbl0gaWYgW3F1b3RpZW50XSBpcyBgMGAuCiAgICovCiAgRHVyYXRpb24gb3BlcmF0b3Igfi8oaW50IHF1b3RpZW50KSB7CiAgICAvLyBCeSBkb2luZyB0aGUgY2hlY2sgaGVyZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gIn4vIiBiZWxvdyB3ZSBnZXQgdGhlCiAgICAvLyBleGNlcHRpb24gZXZlbiB3aXRoIGRhcnQyanMuCiAgICBpZiAocXVvdGllbnQgPT0gMCkgdGhyb3cgSW50ZWdlckRpdmlzaW9uQnlaZXJvRXhjZXB0aW9uKCk7CiAgICByZXR1cm4gRHVyYXRpb24uX21pY3Jvc2Vjb25kcyhfZHVyYXRpb24gfi8gcXVvdGllbnQpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRHVyYXRpb24KICAgKiBpcyBsZXNzIHRoYW4gdGhlIHZhbHVlIG9mIFtvdGhlcl0uCiAgICovCiAgYm9vbCBvcGVyYXRvciA8KER1cmF0aW9uIG90aGVyKSA9PiB0aGlzLl9kdXJhdGlvbiA8IG90aGVyLl9kdXJhdGlvbjsKCiAgLyoqCiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRHVyYXRpb24KICAgKiBpcyBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIG9mIFtvdGhlcl0uCiAgICovCiAgYm9vbCBvcGVyYXRvciA+KER1cmF0aW9uIG90aGVyKSA9PiB0aGlzLl9kdXJhdGlvbiA+IG90aGVyLl9kdXJhdGlvbjsKCiAgLyoqCiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRHVyYXRpb24KICAgKiBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIFtvdGhlcl0uCiAgICovCiAgYm9vbCBvcGVyYXRvciA8PShEdXJhdGlvbiBvdGhlcikgPT4gdGhpcy5fZHVyYXRpb24gPD0gb3RoZXIuX2R1cmF0aW9uOwoKICAvKioKICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEdXJhdGlvbgogICAqIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgdmFsdWUgb2YgW290aGVyXS4KICAgKi8KICBib29sIG9wZXJhdG9yID49KER1cmF0aW9uIG90aGVyKSA9PiB0aGlzLl9kdXJhdGlvbiA+PSBvdGhlci5fZHVyYXRpb247CgogIC8qKgogICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB3aG9sZSBkYXlzIHNwYW5uZWQgYnkgdGhpcyBEdXJhdGlvbi4KICAgKi8KICBpbnQgZ2V0IGluRGF5cyA9PiBfZHVyYXRpb24gfi8gRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyRGF5OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygd2hvbGUgaG91cnMgc3Bhbm5lZCBieSB0aGlzIER1cmF0aW9uLgogICAqCiAgICogVGhlIHJldHVybmVkIHZhbHVlIGNhbiBiZSBncmVhdGVyIHRoYW4gMjMuCiAgICovCiAgaW50IGdldCBpbkhvdXJzID0+IF9kdXJhdGlvbiB+LyBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJIb3VyOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygd2hvbGUgbWludXRlcyBzcGFubmVkIGJ5IHRoaXMgRHVyYXRpb24uCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgdmFsdWUgY2FuIGJlIGdyZWF0ZXIgdGhhbiA1OS4KICAgKi8KICBpbnQgZ2V0IGluTWludXRlcyA9PiBfZHVyYXRpb24gfi8gRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyTWludXRlOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygd2hvbGUgc2Vjb25kcyBzcGFubmVkIGJ5IHRoaXMgRHVyYXRpb24uCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgdmFsdWUgY2FuIGJlIGdyZWF0ZXIgdGhhbiA1OS4KICAgKi8KICBpbnQgZ2V0IGluU2Vjb25kcyA9PiBfZHVyYXRpb24gfi8gRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyU2Vjb25kOwoKICAvKioKICAgKiBSZXR1cm5zIG51bWJlciBvZiB3aG9sZSBtaWxsaXNlY29uZHMgc3Bhbm5lZCBieSB0aGlzIER1cmF0aW9uLgogICAqCiAgICogVGhlIHJldHVybmVkIHZhbHVlIGNhbiBiZSBncmVhdGVyIHRoYW4gOTk5LgogICAqLwogIGludCBnZXQgaW5NaWxsaXNlY29uZHMgPT4gX2R1cmF0aW9uIH4vIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1Blck1pbGxpc2Vjb25kOwoKICAvKioKICAgKiBSZXR1cm5zIG51bWJlciBvZiB3aG9sZSBtaWNyb3NlY29uZHMgc3Bhbm5lZCBieSB0aGlzIER1cmF0aW9uLgogICAqLwogIGludCBnZXQgaW5NaWNyb3NlY29uZHMgPT4gX2R1cmF0aW9uOwoKICAvKioKICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIFtEdXJhdGlvbl0gaGFzIHRoZSBzYW1lIHZhbHVlIGFzIFtvdGhlcl0uCiAgICovCiAgYm9vbCBvcGVyYXRvciA9PShkeW5hbWljIG90aGVyKSA9PgogICAgICBvdGhlciBpcyBEdXJhdGlvbiAmJiBfZHVyYXRpb24gPT0gb3RoZXIuaW5NaWNyb3NlY29uZHM7CgogIGludCBnZXQgaGFzaENvZGUgPT4gX2R1cmF0aW9uLmhhc2hDb2RlOwoKICAvKioKICAgKiBDb21wYXJlcyB0aGlzIFtEdXJhdGlvbl0gdG8gW290aGVyXSwgcmV0dXJuaW5nIHplcm8gaWYgdGhlIHZhbHVlcyBhcmUgZXF1YWwuCiAgICoKICAgKiBSZXR1cm5zIGEgbmVnYXRpdmUgaW50ZWdlciBpZiB0aGlzIGBEdXJhdGlvbmAgaXMgc2hvcnRlciB0aGFuCiAgICogW290aGVyXSwgb3IgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIGl0IGlzIGxvbmdlci4KICAgKgogICAqIEEgbmVnYXRpdmUgYER1cmF0aW9uYCBpcyBhbHdheXMgY29uc2lkZXJlZCBzaG9ydGVyIHRoYW4gYSBwb3NpdGl2ZSBvbmUuCiAgICoKICAgKiBJdCBpcyBhbHdheXMgdGhlIGNhc2UgdGhhdCBgZHVyYXRpb24xLmNvbXBhcmVUbyhkdXJhdGlvbjIpIDwgMGAgaWZmCiAgICogYChzb21lRGF0ZSArIGR1cmF0aW9uMSkuY29tcGFyZVRvKHNvbWVEYXRlICsgZHVyYXRpb24yKSA8IDBgLgogICAqLwogIGludCBjb21wYXJlVG8oRHVyYXRpb24gb3RoZXIpID0+IF9kdXJhdGlvbi5jb21wYXJlVG8ob3RoZXIuX2R1cmF0aW9uKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGBEdXJhdGlvbmAuCiAgICoKICAgKiBSZXR1cm5zIGEgc3RyaW5nIHdpdGggaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGFuZCBtaWNyb3NlY29uZHMsIGluIHRoZQogICAqIGZvbGxvd2luZyBmb3JtYXQ6IGBISDpNTTpTUy5tbW1tbW1gLiBGb3IgZXhhbXBsZSwKICAgKgogICAqICAgICB2YXIgZCA9IG5ldyBEdXJhdGlvbihkYXlzOjEsIGhvdXJzOjEsIG1pbnV0ZXM6MzMsIG1pY3Jvc2Vjb25kczogNTAwKTsKICAgKiAgICAgZC50b1N0cmluZygpOyAgLy8gIjI1OjMzOjAwLjAwMDUwMCIKICAgKi8KICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmcgc2l4RGlnaXRzKGludCBuKSB7CiAgICAgIGlmIChuID49IDEwMDAwMCkgcmV0dXJuICIkbiI7CiAgICAgIGlmIChuID49IDEwMDAwKSByZXR1cm4gIjAkbiI7CiAgICAgIGlmIChuID49IDEwMDApIHJldHVybiAiMDAkbiI7CiAgICAgIGlmIChuID49IDEwMCkgcmV0dXJuICIwMDAkbiI7CiAgICAgIGlmIChuID49IDEwKSByZXR1cm4gIjAwMDAkbiI7CiAgICAgIHJldHVybiAiMDAwMDAkbiI7CiAgICB9CgogICAgU3RyaW5nIHR3b0RpZ2l0cyhpbnQgbikgewogICAgICBpZiAobiA+PSAxMCkgcmV0dXJuICIkbiI7CiAgICAgIHJldHVybiAiMCRuIjsKICAgIH0KCiAgICBpZiAoaW5NaWNyb3NlY29uZHMgPCAwKSB7CiAgICAgIHJldHVybiAiLSR7LXRoaXN9IjsKICAgIH0KICAgIFN0cmluZyB0d29EaWdpdE1pbnV0ZXMgPSB0d29EaWdpdHMoaW5NaW51dGVzLnJlbWFpbmRlcihtaW51dGVzUGVySG91cikpOwogICAgU3RyaW5nIHR3b0RpZ2l0U2Vjb25kcyA9IHR3b0RpZ2l0cyhpblNlY29uZHMucmVtYWluZGVyKHNlY29uZHNQZXJNaW51dGUpKTsKICAgIFN0cmluZyBzaXhEaWdpdFVzID0KICAgICAgICBzaXhEaWdpdHMoaW5NaWNyb3NlY29uZHMucmVtYWluZGVyKG1pY3Jvc2Vjb25kc1BlclNlY29uZCkpOwogICAgcmV0dXJuICIkaW5Ib3VyczokdHdvRGlnaXRNaW51dGVzOiR0d29EaWdpdFNlY29uZHMuJHNpeERpZ2l0VXMiOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgYER1cmF0aW9uYCBpcyBuZWdhdGl2ZS4KICAgKgogICAqIEEgbmVnYXRpdmUgYER1cmF0aW9uYCByZXByZXNlbnRzIHRoZSBkaWZmZXJlbmNlIGZyb20gYSBsYXRlciB0aW1lIHRvIGFuCiAgICogZWFybGllciB0aW1lLgogICAqLwogIGJvb2wgZ2V0IGlzTmVnYXRpdmUgPT4gX2R1cmF0aW9uIDwgMDsKCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBgRHVyYXRpb25gIHJlcHJlc2VudGluZyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhpcwogICAqIGBEdXJhdGlvbmAuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgYER1cmF0aW9uYCBoYXMgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoaXMgb25lLCBidXQgaXMgYWx3YXlzCiAgICogcG9zaXRpdmUuCiAgICovCiAgRHVyYXRpb24gYWJzKCkgPT4gRHVyYXRpb24uX21pY3Jvc2Vjb25kcyhfZHVyYXRpb24uYWJzKCkpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGBEdXJhdGlvbmAgcmVwcmVzZW50aW5nIHRoaXMgYER1cmF0aW9uYCBuZWdhdGVkLgogICAqCiAgICogVGhlIHJldHVybmVkIGBEdXJhdGlvbmAgaGFzIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGlzIG9uZSwgYnV0IHdpbGwgaGF2ZSB0aGUKICAgKiBvcHBvc2l0ZSBzaWduIG9mIHRoaXMgb25lLgogICAqLwogIC8vIFVzaW5nIHN1YnRyYWN0aW9uIGhlbHBzIGRhcnQyanMgYXZvaWQgbmVnYXRpdmUgemVyb3MuCiAgRHVyYXRpb24gb3BlcmF0b3IgLSgpID0+IER1cmF0aW9uLl9taWNyb3NlY29uZHMoMCAtIF9kdXJhdGlvbik7Cn0KgScATk48ARMBBEgDT0sMA0tITQNNTE9NDQNIJQtLBzZNNAstBzQDME0xEAszJQcyHT0DMCoEMTYxKiglASs6KzBRSwErMFFLAUdBAUEBNQEFOAYXAQYvKQU/MgU2JQYSFRUXFxwdNyouLjgbAVAkMAEGKC8GKEAEAQYuNgYoQAQBBksfBUtIBiRBBAEGTSYFRgYnSyQ/OgQBBjIoBkcBBjIrBkcBBjI0BkkBBjI3BkkBBkAGPgEGQQUwBkABBkMFMAZEAQZDBTAGRAEGRAUxBk4BBkQGJwEGRgYlPgEqAQZSBUM1BU0FSUMGSQEGOQVNNwVPLQYWHiQkJCQkGAYBHiAUBgEeGgZNTxhERQQBBjIFTRMGKAEGRhEFTA8GPQEGRAVQIAY7QgIBF2RhcnQ6Y29yZS9kdXJhdGlvbi5kYXJ0LG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb3JlL2Vycm9ycy5kYXJ0wABL/S8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBFcnJvciBvYmplY3RzIHRocm93biBpbiB0aGUgY2FzZSBvZiBhIHByb2dyYW0gZmFpbHVyZS4KICoKICogQW4gYEVycm9yYCBvYmplY3QgcmVwcmVzZW50cyBhIHByb2dyYW0gZmFpbHVyZSB0aGF0IHRoZSBwcm9ncmFtbWVyCiAqIHNob3VsZCBoYXZlIGF2b2lkZWQuCiAqCiAqIEV4YW1wbGVzIGluY2x1ZGUgY2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggaW52YWxpZCBhcmd1bWVudHMsCiAqIG9yIGV2ZW4gd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywKICogb3IgY2FsbGluZyBpdCBhdCBhIHRpbWUgd2hlbiBpdCBpcyBub3QgYWxsb3dlZC4KICoKICogVGhlc2UgYXJlIG5vdCBlcnJvcnMgdGhhdCBhIGNhbGxlciBzaG91bGQgZXhwZWN0IG9yIGNhdGNoIC0KICogaWYgdGhleSBvY2N1ciwgdGhlIHByb2dyYW0gaXMgZXJyb25lb3VzLAogKiBhbmQgdGVybWluYXRpbmcgdGhlIHByb2dyYW0gbWF5IGJlIHRoZSBzYWZlc3QgcmVzcG9uc2UuCiAqCiAqIFdoZW4gZGVjaWRpbmcgdGhhdCBhIGZ1bmN0aW9uIHRocm93cyBhbiBlcnJvciwKICogdGhlIGNvbmRpdGlvbnMgd2hlcmUgaXQgaGFwcGVucyBzaG91bGQgYmUgY2xlYXJseSBkZXNjcmliZWQsCiAqIGFuZCB0aGV5IHNob3VsZCBiZSBkZXRlY3RhYmxlIGFuZCBwcmVkaWN0YWJsZSwKICogc28gdGhlIHByb2dyYW1tZXIgdXNpbmcgdGhlIGZ1bmN0aW9uIGNhbiBhdm9pZCB0cmlnZ2VyaW5nIHRoZSBlcnJvci4KICoKICogU3VjaCBkZXNjcmlwdGlvbnMgb2Z0ZW4gdXNlcyB3b3JkcyBsaWtlCiAqICJtdXN0IiBvciAibXVzdCBub3QiIHRvIGRlc2NyaWJlIHRoZSBjb25kaXRpb24sCiAqIGFuZCBpZiB5b3Ugc2VlIHdvcmRzIGxpa2UgdGhhdCBpbiBhIGZ1bmN0aW9uJ3MgZG9jdW1lbnRhdGlvbiwKICogdGhlbiBub3Qgc2F0aXNmeWluZyB0aGUgcmVxdWlyZW1lbnQKICogaXMgdmVyeSBsaWtlbHkgdG8gY2F1c2UgYW4gZXJyb3IgdG8gYmUgdGhyb3duLgogKgogKiBFeGFtcGxlIChmcm9tIFtTdHJpbmcuY29udGFpbnNdKToKICoKICogICAgICAgIGBzdGFydEluZGV4YCBtdXN0IG5vdCBiZSBuZWdhdGl2ZSBvciBncmVhdGVyIHRoYW4gYGxlbmd0aGAuCiAqCiAqIEluIHRoaXMgY2FzZSwgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd24gaWYgYHN0YXJ0SW5kZXhgIGlzIG5lZ2F0aXZlCiAqIG9yIHRvbyBsYXJnZS4KICoKICogSWYgdGhlIGNvbmRpdGlvbnMgYXJlIG5vdCBkZXRlY3RhYmxlIGJlZm9yZSBjYWxsaW5nIGEgZnVuY3Rpb24sCiAqIHRoZSBjYWxsZWQgZnVuY3Rpb24gc2hvdWxkIG5vdCB0aHJvdyBhbiBgRXJyb3JgLgogKiBJdCBtYXkgc3RpbGwgdGhyb3cgYSB2YWx1ZSwKICogYnV0IHRoZSBjYWxsZXIgd2lsbCBoYXZlIHRvIGNhdGNoIHRoZSB0aHJvd24gdmFsdWUsCiAqIGVmZmVjdGl2ZWx5IG1ha2luZyBpdCBhbiBhbHRlcm5hdGl2ZSByZXN1bHQgcmF0aGVyIHRoYW4gYW4gZXJyb3IuCiAqIFRoZSB0aHJvd24gb2JqZWN0IGNhbiBjaG9vc2UgdG8gaW1wbGVtZW50IFtFeGNlcHRpb25dCiAqIHRvIGRvY3VtZW50IHRoYXQgaXQgcmVwcmVzZW50cyBhbiBleGNlcHRpb25hbCwgYnV0IG5vdCBlcnJvbmVvdXMsIG9jY3VycmVuY2UsCiAqIGJ1dCBpdCBoYXMgbm8gb3RoZXIgZWZmZWN0IHRoYW4gZG9jdW1lbnRhdGlvbi4KICoKICogQWxsIG5vbi1gbnVsbGAgdmFsdWVzIGNhbiBiZSB0aHJvd24gaW4gRGFydC4KICogT2JqZWN0cyBleHRlbmRpbmcgYEVycm9yYCBhcmUgaGFuZGxlZCBzcGVjaWFsbHk6CiAqIFRoZSBmaXJzdCB0aW1lIHRoZXkgYXJlIHRocm93biwKICogdGhlIHN0YWNrIHRyYWNlIGF0IHRoZSB0aHJvdyBwb2ludCBpcyByZWNvcmRlZAogKiBhbmQgc3RvcmVkIGluIHRoZSBlcnJvciBvYmplY3QuCiAqIEl0IGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgdGhlIFtzdGFja1RyYWNlXSBnZXR0ZXIuCiAqIEFuIGVycm9yIG9iamVjdCB0aGF0IG1lcmVseSBpbXBsZW1lbnRzIGBFcnJvcmAsIGFuZCBkb2Vzbid0IGV4dGVuZCBpdCwKICogd2lsbCBub3Qgc3RvcmUgdGhlIHN0YWNrIHRyYWNlIGF1dG9tYXRpY2FsbHkuCiAqCiAqIEVycm9yIG9iamVjdHMgYXJlIGFsc28gdXNlZCBmb3Igc3lzdGVtIHdpZGUgZmFpbHVyZXMKICogbGlrZSBzdGFjayBvdmVyZmxvdyBvciBhbiBvdXQtb2YtbWVtb3J5IHNpdHVhdGlvbi4KICoKICogU2luY2UgZXJyb3JzIGFyZSBub3QgY3JlYXRlZCB0byBiZSBjYXVnaHQsCiAqIHRoZXJlIGlzIG5vIG5lZWQgZm9yIHN1YmNsYXNzZXMgdG8gZGlzdGluZ3Vpc2ggdGhlIGVycm9ycy4KICogSW5zdGVhZCBzdWJjbGFzc2VzIGhhdmUgYmVlbiBjcmVhdGVkIGluIG9yZGVyIHRvIG1ha2UgZ3JvdXBzCiAqIG9mIHJlbGF0ZWQgZXJyb3JzIGVhc3kgdG8gY3JlYXRlIHdpdGggY29uc2lzdGVudCBlcnJvciBtZXNzYWdlcy4KICogRm9yIGV4YW1wbGUsIHRoZSBbU3RyaW5nLmNvbnRhaW5zXSBtZXRob2Qgd2lsbCB1c2UgYSBbUmFuZ2VFcnJvcl0KICogaWYgaXRzIGBzdGFydEluZGV4YCBpc24ndCBpbiB0aGUgcmFuZ2UgYDAuLmxlbmd0aGAsCiAqIHdoaWNoIGlzIGVhc2lseSBjcmVhdGVkIGJ5IGBuZXcgUmFuZ2VFcnJvci5yYW5nZShzdGFydEluZGV4LCAwLCBsZW5ndGgpYC4KICovCmNsYXNzIEVycm9yIHsKICBFcnJvcigpOyAvLyBQcmV2ZW50IHVzZSBhcyBtaXhpbi4KCiAgLyoqCiAgICogU2FmZWx5IGNvbnZlcnQgYSB2YWx1ZSB0byBhIFtTdHJpbmddIGRlc2NyaXB0aW9uLgogICAqCiAgICogVGhlIGNvbnZlcnNpb24gaXMgZ3VhcmFudGVlZCB0byBub3QgdGhyb3csIHNvIGl0IHdvbid0IHVzZSB0aGUgb2JqZWN0J3MKICAgKiB0b1N0cmluZyBtZXRob2QuCiAgICovCiAgc3RhdGljIFN0cmluZyBzYWZlVG9TdHJpbmcoT2JqZWN0IG9iamVjdCkgewogICAgaWYgKG9iamVjdCBpcyBudW0gfHwgb2JqZWN0IGlzIGJvb2wgfHwgbnVsbCA9PSBvYmplY3QpIHsKICAgICAgcmV0dXJuIG9iamVjdC50b1N0cmluZygpOwogICAgfQogICAgaWYgKG9iamVjdCBpcyBTdHJpbmcpIHsKICAgICAgcmV0dXJuIF9zdHJpbmdUb1NhZmVTdHJpbmcob2JqZWN0KTsKICAgIH0KICAgIHJldHVybiBfb2JqZWN0VG9TdHJpbmcob2JqZWN0KTsKICB9CgogIC8qKiBDb252ZXJ0IHN0cmluZyB0byBhIHZhbGlkIHN0cmluZyBsaXRlcmFsIHdpdGggbm8gY29udHJvbCBjaGFyYWN0ZXJzLiAqLwogIGV4dGVybmFsIHN0YXRpYyBTdHJpbmcgX3N0cmluZ1RvU2FmZVN0cmluZyhTdHJpbmcgc3RyaW5nKTsKCiAgZXh0ZXJuYWwgc3RhdGljIFN0cmluZyBfb2JqZWN0VG9TdHJpbmcoT2JqZWN0IG9iamVjdCk7CgogIGV4dGVybmFsIFN0YWNrVHJhY2UgZ2V0IHN0YWNrVHJhY2U7Cn0KCi8qKgogKiBFcnJvciB0aHJvd24gYnkgdGhlIHJ1bnRpbWUgc3lzdGVtIHdoZW4gYW4gYXNzZXJ0IHN0YXRlbWVudCBmYWlscy4KICovCmNsYXNzIEFzc2VydGlvbkVycm9yIGV4dGVuZHMgRXJyb3IgewogIC8qKiBNZXNzYWdlIGRlc2NyaWJpbmcgdGhlIGFzc2VydGlvbiBlcnJvci4gKi8KICBmaW5hbCBPYmplY3QgbWVzc2FnZTsKICBBc3NlcnRpb25FcnJvcihbdGhpcy5tZXNzYWdlXSk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkFzc2VydGlvbiBmYWlsZWQiOwp9CgovKioKICogRXJyb3IgdGhyb3duIGJ5IHRoZSBydW50aW1lIHN5c3RlbSB3aGVuIGEgdHlwZSBhc3NlcnRpb24gZmFpbHMuCiAqLwpjbGFzcyBUeXBlRXJyb3IgZXh0ZW5kcyBBc3NlcnRpb25FcnJvciB7fQoKLyoqCiAqIEVycm9yIHRocm93biBieSB0aGUgcnVudGltZSBzeXN0ZW0gd2hlbiBhIGNhc3Qgb3BlcmF0aW9uIGZhaWxzLgogKi8KY2xhc3MgQ2FzdEVycm9yIGV4dGVuZHMgRXJyb3Ige30KCi8qKgogKiBFcnJvciB0aHJvd24gd2hlbiBhdHRlbXB0aW5nIHRvIHRocm93IFs6bnVsbDpdLgogKi8KY2xhc3MgTnVsbFRocm93bkVycm9yIGV4dGVuZHMgRXJyb3IgewogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBOdWxsVGhyb3duRXJyb3IoKTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiVGhyb3cgb2YgbnVsbC4iOwp9CgovKioKICogRXJyb3IgdGhyb3duIHdoZW4gYSBmdW5jdGlvbiBpcyBwYXNzZWQgYW4gdW5hY2NlcHRhYmxlIGFyZ3VtZW50LgogKi8KY2xhc3MgQXJndW1lbnRFcnJvciBleHRlbmRzIEVycm9yIHsKICAvKiogV2hldGhlciB2YWx1ZSB3YXMgcHJvdmlkZWQuICovCiAgZmluYWwgYm9vbCBfaGFzVmFsdWU7CiAgLyoqIFRoZSBpbnZhbGlkIHZhbHVlLiAqLwogIGZpbmFsIGludmFsaWRWYWx1ZTsKICAvKiogTmFtZSBvZiB0aGUgaW52YWxpZCBhcmd1bWVudCwgaWYgYXZhaWxhYmxlLiAqLwogIGZpbmFsIFN0cmluZyBuYW1lOwogIC8qKiBNZXNzYWdlIGRlc2NyaWJpbmcgdGhlIHByb2JsZW0uICovCiAgZmluYWwgbWVzc2FnZTsKCiAgLyoqCiAgICogVGhlIFttZXNzYWdlXSBkZXNjcmliZXMgdGhlIGVycm9uZW91cyBhcmd1bWVudC4KICAgKgogICAqIEV4aXN0aW5nIGNvZGUgbWF5IGJlIHVzaW5nIGBtZXNzYWdlYCB0byBob2xkIHRoZSBpbnZhbGlkIHZhbHVlLgogICAqIElmIHRoZSBgbWVzc2FnZWAgaXMgbm90IGEgW1N0cmluZ10sIGl0IGlzIGFzc3VtZWQgdG8gYmUgYSB2YWx1ZSBpbnN0ZWFkCiAgICogb2YgYSBtZXNzYWdlLgogICAqLwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBBcmd1bWVudEVycm9yKFt0aGlzLm1lc3NhZ2VdKQogICAgICA6IGludmFsaWRWYWx1ZSA9IG51bGwsCiAgICAgICAgX2hhc1ZhbHVlID0gZmFsc2UsCiAgICAgICAgbmFtZSA9IG51bGw7CgogIC8qKgogICAqIENyZWF0ZXMgZXJyb3IgY29udGFpbmluZyB0aGUgaW52YWxpZCBbdmFsdWVdLgogICAqCiAgICogQSBtZXNzYWdlIGlzIGJ1aWx0IGJ5IHN1ZmZpeGluZyB0aGUgW21lc3NhZ2VdIGFyZ3VtZW50IHdpdGgKICAgKiB0aGUgW25hbWVdIGFyZ3VtZW50IChpZiBwcm92aWRlZCkgYW5kIHRoZSB2YWx1ZS4gRXhhbXBsZQogICAqCiAgICogICAgIkludmFsaWQgYXJndW1lbnQgKGZvbyk6IG51bGwiCiAgICoKICAgKiBUaGUgYG5hbWVgIHNob3VsZCBtYXRjaCB0aGUgYXJndW1lbnQgbmFtZSBvZiB0aGUgZnVuY3Rpb24sIGJ1dCBpZgogICAqIHRoZSBmdW5jdGlvbiBpcyBhIG1ldGhvZCBpbXBsZW1lbnRpbmcgYW4gaW50ZXJmYWNlLCBhbmQgaXRzIGFyZ3VtZW50CiAgICogbmFtZXMgZGlmZmVyIGZyb20gdGhlIGludGVyZmFjZSwgaXQgbWlnaHQgYmUgbW9yZSB1c2VmdWwgdG8gdXNlIHRoZQogICAqIGludGVyZmFjZSBtZXRob2QncyBhcmd1bWVudCBuYW1lIChvciBqdXN0IHJlbmFtZSBhcmd1bWVudHMgdG8gbWF0Y2gpLgogICAqLwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBBcmd1bWVudEVycm9yLnZhbHVlKHZhbHVlLCBbdGhpcy5uYW1lLCB0aGlzLm1lc3NhZ2VdKQogICAgICA6IGludmFsaWRWYWx1ZSA9IHZhbHVlLAogICAgICAgIF9oYXNWYWx1ZSA9IHRydWU7CgogIC8qKgogICAqIENyZWF0ZSBhbiBhcmd1bWVudCBlcnJvciBmb3IgYSBgbnVsbGAgYXJndW1lbnQgdGhhdCBtdXN0IG5vdCBiZSBgbnVsbGAuCiAgICovCiAgQXJndW1lbnRFcnJvci5ub3ROdWxsKFt0aGlzLm5hbWVdKQogICAgICA6IF9oYXNWYWx1ZSA9IGZhbHNlLAogICAgICAgIG1lc3NhZ2UgPSAiTXVzdCBub3QgYmUgbnVsbCIsCiAgICAgICAgaW52YWxpZFZhbHVlID0gbnVsbDsKCiAgLyoqCiAgICogVGhyb3dzIGlmIFthcmd1bWVudF0gaXMgYG51bGxgLgogICAqLwogIEBTaW5jZSgiMi4xIikKICBzdGF0aWMgdm9pZCBjaGVja05vdE51bGwoT2JqZWN0IGFyZ3VtZW50LCBbU3RyaW5nIG5hbWVdKSB7CiAgICBpZiAoYXJndW1lbnQgPT0gbnVsbCkgdGhyb3cgQXJndW1lbnRFcnJvci5ub3ROdWxsKG5hbWUpOwogIH0KCiAgLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgdG9TdHJpbmcgb3ZlcnJpZGRlbiBpbiBzdWJjbGFzc2VzLgogIFN0cmluZyBnZXQgX2Vycm9yTmFtZSA9PiAiSW52YWxpZCBhcmd1bWVudCR7IV9oYXNWYWx1ZSA/ICIocykiIDogIiJ9IjsKICBTdHJpbmcgZ2V0IF9lcnJvckV4cGxhbmF0aW9uID0+ICIiOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmcgbmFtZVN0cmluZyA9ICIiOwogICAgaWYgKG5hbWUgIT0gbnVsbCkgewogICAgICBuYW1lU3RyaW5nID0gIiAoJG5hbWUpIjsKICAgIH0KICAgIHZhciBtZXNzYWdlID0gKHRoaXMubWVzc2FnZSA9PSBudWxsKSA/ICIiIDogIjogJHt0aGlzLm1lc3NhZ2V9IjsKICAgIFN0cmluZyBwcmVmaXggPSAiJF9lcnJvck5hbWUkbmFtZVN0cmluZyRtZXNzYWdlIjsKICAgIGlmICghX2hhc1ZhbHVlKSByZXR1cm4gcHJlZml4OwogICAgLy8gSWYgd2Uga25vdyB0aGUgaW52YWxpZCB2YWx1ZSwgd2UgY2FuIHRyeSB0byBkZXNjcmliZSB0aGUgcHJvYmxlbS4KICAgIFN0cmluZyBleHBsYW5hdGlvbiA9IF9lcnJvckV4cGxhbmF0aW9uOwogICAgU3RyaW5nIGVycm9yVmFsdWUgPSBFcnJvci5zYWZlVG9TdHJpbmcoaW52YWxpZFZhbHVlKTsKICAgIHJldHVybiAiJHByZWZpeCRleHBsYW5hdGlvbjogJGVycm9yVmFsdWUiOwogIH0KfQoKLyoqCiAqIEVycm9yIHRocm93biBkdWUgdG8gYW4gaW5kZXggYmVpbmcgb3V0c2lkZSBhIHZhbGlkIHJhbmdlLgogKi8KY2xhc3MgUmFuZ2VFcnJvciBleHRlbmRzIEFyZ3VtZW50RXJyb3IgewogIC8qKiBUaGUgbWluaW11bSB2YWx1ZSB0aGF0IFt2YWx1ZV0gaXMgYWxsb3dlZCB0byBhc3N1bWUuICovCiAgZmluYWwgbnVtIHN0YXJ0OwogIC8qKiBUaGUgbWF4aW11bSB2YWx1ZSB0aGF0IFt2YWx1ZV0gaXMgYWxsb3dlZCB0byBhc3N1bWUuICovCiAgZmluYWwgbnVtIGVuZDsKCiAgLy8gVE9ETyhscm4pOiBUaGlzIGNvbnN0cnVjdG9yIHNob3VsZCBiZSBjYWxsZWQgb25seSB3aXRoIHN0cmluZyB2YWx1ZXMuCiAgLy8gSXQgY3VycmVudGx5IGlzbid0IGluIGFsbCBjYXNlcy4KICAvKioKICAgKiBDcmVhdGUgYSBuZXcgW1JhbmdlRXJyb3JdIHdpdGggdGhlIGdpdmVuIFttZXNzYWdlXS4KICAgKi8KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgUmFuZ2VFcnJvcih2YXIgbWVzc2FnZSkKICAgICAgOiBzdGFydCA9IG51bGwsCiAgICAgICAgZW5kID0gbnVsbCwKICAgICAgICBzdXBlcihtZXNzYWdlKTsKCiAgLyoqCiAgICogQ3JlYXRlIGEgbmV3IFtSYW5nZUVycm9yXSB3aXRoIGEgbWVzc2FnZSBmb3IgdGhlIGdpdmVuIFt2YWx1ZV0uCiAgICoKICAgKiBBbiBvcHRpb25hbCBbbmFtZV0gY2FuIHNwZWNpZnkgdGhlIGFyZ3VtZW50IG5hbWUgdGhhdCBoYXMgdGhlCiAgICogaW52YWxpZCB2YWx1ZSwgYW5kIHRoZSBbbWVzc2FnZV0gY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGVycm9yCiAgICogZGVzY3JpcHRpb24uCiAgICovCiAgUmFuZ2VFcnJvci52YWx1ZShudW0gdmFsdWUsIFtTdHJpbmcgbmFtZSwgU3RyaW5nIG1lc3NhZ2VdKQogICAgICA6IHN0YXJ0ID0gbnVsbCwKICAgICAgICBlbmQgPSBudWxsLAogICAgICAgIHN1cGVyLnZhbHVlKAogICAgICAgICAgICB2YWx1ZSwgbmFtZSwgKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIlZhbHVlIG5vdCBpbiByYW5nZSIpOwoKICAvKioKICAgKiBDcmVhdGUgYSBuZXcgW1JhbmdlRXJyb3JdIGZvciBhIHZhbHVlIGJlaW5nIG91dHNpZGUgdGhlIHZhbGlkIHJhbmdlLgogICAqCiAgICogVGhlIGFsbG93ZWQgcmFuZ2UgaXMgZnJvbSBbbWluVmFsdWVdIHRvIFttYXhWYWx1ZV0sIGluY2x1c2l2ZS4KICAgKiBJZiBgbWluVmFsdWVgIG9yIGBtYXhWYWx1ZWAgYXJlIGBudWxsYCwgdGhlIHJhbmdlIGlzIGluZmluaXRlIGluCiAgICogdGhhdCBkaXJlY3Rpb24uCiAgICoKICAgKiBGb3IgYSByYW5nZSBmcm9tIDAgdG8gdGhlIGxlbmd0aCBvZiBzb21ldGhpbmcsIGVuZCBleGNsdXNpdmUsIHVzZQogICAqIFtSYW5nZUVycm9yLmluZGV4XS4KICAgKgogICAqIEFuIG9wdGlvbmFsIFtuYW1lXSBjYW4gc3BlY2lmeSB0aGUgYXJndW1lbnQgbmFtZSB0aGF0IGhhcyB0aGUKICAgKiBpbnZhbGlkIHZhbHVlLCBhbmQgdGhlIFttZXNzYWdlXSBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZXJyb3IKICAgKiBkZXNjcmlwdGlvbi4KICAgKi8KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgUmFuZ2VFcnJvci5yYW5nZShudW0gaW52YWxpZFZhbHVlLCBpbnQgbWluVmFsdWUsIGludCBtYXhWYWx1ZSwKICAgICAgW1N0cmluZyBuYW1lLCBTdHJpbmcgbWVzc2FnZV0pCiAgICAgIDogc3RhcnQgPSBtaW5WYWx1ZSwKICAgICAgICBlbmQgPSBtYXhWYWx1ZSwKICAgICAgICBzdXBlci52YWx1ZSgKICAgICAgICAgICAgaW52YWxpZFZhbHVlLCBuYW1lLCAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAiSW52YWxpZCB2YWx1ZSIpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IFtSYW5nZUVycm9yXSBzdGF0aW5nIHRoYXQgW2luZGV4XSBpcyBub3QgYSB2YWxpZCBpbmRleAogICAqIGludG8gW2luZGV4YWJsZV0uCiAgICoKICAgKiBBbiBvcHRpb25hbCBbbmFtZV0gY2FuIHNwZWNpZnkgdGhlIGFyZ3VtZW50IG5hbWUgdGhhdCBoYXMgdGhlCiAgICogaW52YWxpZCB2YWx1ZSwgYW5kIHRoZSBbbWVzc2FnZV0gY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGVycm9yCiAgICogZGVzY3JpcHRpb24uCiAgICoKICAgKiBUaGUgW2xlbmd0aF0gaXMgdGhlIGxlbmd0aCBvZiBbaW5kZXhhYmxlXSBhdCB0aGUgdGltZSBvZiB0aGUgZXJyb3IuCiAgICogSWYgYGxlbmd0aGAgaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYGluZGV4YWJsZS5sZW5ndGhgLgogICAqLwogIGZhY3RvcnkgUmFuZ2VFcnJvci5pbmRleChpbnQgaW5kZXgsIGR5bmFtaWMgaW5kZXhhYmxlLAogICAgICBbU3RyaW5nIG5hbWUsIFN0cmluZyBtZXNzYWdlLCBpbnQgbGVuZ3RoXSkgPSBJbmRleEVycm9yOwoKICAvKioKICAgKiBDaGVjayB0aGF0IGEgW3ZhbHVlXSBsaWVzIGluIGEgc3BlY2lmaWMgaW50ZXJ2YWwuCiAgICoKICAgKiBUaHJvd3MgaWYgW3ZhbHVlXSBpcyBub3QgaW4gdGhlIGludGVydmFsLgogICAqIFRoZSBpbnRlcnZhbCBpcyBmcm9tIFttaW5WYWx1ZV0gdG8gW21heFZhbHVlXSwgYm90aCBpbmNsdXNpdmUuCiAgICovCiAgc3RhdGljIHZvaWQgY2hlY2tWYWx1ZUluSW50ZXJ2YWwoaW50IHZhbHVlLCBpbnQgbWluVmFsdWUsIGludCBtYXhWYWx1ZSwKICAgICAgW1N0cmluZyBuYW1lLCBTdHJpbmcgbWVzc2FnZV0pIHsKICAgIGlmICh2YWx1ZSA8IG1pblZhbHVlIHx8IHZhbHVlID4gbWF4VmFsdWUpIHsKICAgICAgdGhyb3cgUmFuZ2VFcnJvci5yYW5nZSh2YWx1ZSwgbWluVmFsdWUsIG1heFZhbHVlLCBuYW1lLCBtZXNzYWdlKTsKICAgIH0KICB9CgogIC8qKgogICAqIENoZWNrIHRoYXQgYSB2YWx1ZSBpcyBhIHZhbGlkIGluZGV4IGludG8gYW4gaW5kZXhhYmxlIG9iamVjdC4KICAgKgogICAqIFRocm93cyBpZiBbaW5kZXhdIGlzIG5vdCBhIHZhbGlkIGluZGV4IGludG8gW2luZGV4YWJsZV0uCiAgICoKICAgKiBBbiBpbmRleGFibGUgb2JqZWN0IGlzIG9uZSB0aGF0IGhhcyBhIGBsZW5ndGhgIGFuZCBhIGFuZCBpbmRleC1vcGVyYXRvcgogICAqIGBbXWAgdGhhdCBhY2NlcHRzIGFuIGluZGV4IGlmIGAwIDw9IGluZGV4IDwgbGVuZ3RoYC4KICAgKgogICAqIElmIFtsZW5ndGhdIGlzIHByb3ZpZGVkLCBpdCBpcyB1c2VkIGFzIHRoZSBsZW5ndGggb2YgdGhlIGluZGV4YWJsZSBvYmplY3QsCiAgICogb3RoZXJ3aXNlIHRoZSBsZW5ndGggaXMgZm91bmQgYXMgYGluZGV4YWJsZS5sZW5ndGhgLgogICAqLwogIHN0YXRpYyB2b2lkIGNoZWNrVmFsaWRJbmRleChpbnQgaW5kZXgsIGR5bmFtaWMgaW5kZXhhYmxlLAogICAgICBbU3RyaW5nIG5hbWUsIGludCBsZW5ndGgsIFN0cmluZyBtZXNzYWdlXSkgewogICAgbGVuZ3RoID8/PSBpbmRleGFibGUubGVuZ3RoOwogICAgLy8gQ29tcGFyaW5nIHdpdGggYDBgIGFzIHJlY2VpdmVyIHByb2R1Y2VzIGJldHRlciBkYXJ0MmpzIHR5cGUgaW5mZXJlbmNlLgogICAgaWYgKDAgPiBpbmRleCB8fCBpbmRleCA+PSBsZW5ndGgpIHsKICAgICAgbmFtZSA/Pz0gImluZGV4IjsKICAgICAgdGhyb3cgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgaW5kZXhhYmxlLCBuYW1lLCBtZXNzYWdlLCBsZW5ndGgpOwogICAgfQogIH0KCiAgLyoqCiAgICogQ2hlY2sgdGhhdCBhIHJhbmdlIHJlcHJlc2VudHMgYSBzbGljZSBvZiBhbiBpbmRleGFibGUgb2JqZWN0LgogICAqCiAgICogVGhyb3dzIGlmIHRoZSByYW5nZSBpcyBub3QgdmFsaWQgZm9yIGFuIGluZGV4YWJsZSBvYmplY3Qgd2l0aAogICAqIHRoZSBnaXZlbiBbbGVuZ3RoXS4KICAgKiBBIHJhbmdlIGlzIHZhbGlkIGZvciBhbiBpbmRleGFibGUgb2JqZWN0IHdpdGggYSBnaXZlbiBbbGVuZ3RoXQogICAqCiAgICogaWYgYDAgPD0gW3N0YXJ0XSA8PSBbZW5kXSA8PSBbbGVuZ3RoXWAuCiAgICogQW4gYGVuZGAgb2YgYG51bGxgIGlzIGNvbnNpZGVyZWQgZXF1aXZhbGVudCB0byBgbGVuZ3RoYC4KICAgKgogICAqIFRoZSBbc3RhcnROYW1lXSBhbmQgW2VuZE5hbWVdIGRlZmF1bHRzIHRvIGAic3RhcnQiYCBhbmQgYCJlbmQiYCwKICAgKiByZXNwZWN0aXZlbHkuCiAgICoKICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgYGVuZGAgdmFsdWUsIHdoaWNoIGlzIGBsZW5ndGhgIGlmIGBlbmRgIGlzIGBudWxsYCwKICAgKiBhbmQgYGVuZGAgb3RoZXJ3aXNlLgogICAqLwogIHN0YXRpYyBpbnQgY2hlY2tWYWxpZFJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgaW50IGxlbmd0aCwKICAgICAgW1N0cmluZyBzdGFydE5hbWUsIFN0cmluZyBlbmROYW1lLCBTdHJpbmcgbWVzc2FnZV0pIHsKICAgIC8vIENvbXBhcmluZyB3aXRoIGAwYCBhcyByZWNlaXZlciBwcm9kdWNlcyBiZXR0ZXIgZGFydDJqcyB0eXBlIGluZmVyZW5jZS4KICAgIC8vIERpdHRvIGBzdGFydCA+IGVuZGAgYmVsb3cuCiAgICBpZiAoMCA+IHN0YXJ0IHx8IHN0YXJ0ID4gbGVuZ3RoKSB7CiAgICAgIHN0YXJ0TmFtZSA/Pz0gInN0YXJ0IjsKICAgICAgdGhyb3cgUmFuZ2VFcnJvci5yYW5nZShzdGFydCwgMCwgbGVuZ3RoLCBzdGFydE5hbWUsIG1lc3NhZ2UpOwogICAgfQogICAgaWYgKGVuZCAhPSBudWxsKSB7CiAgICAgIGlmIChzdGFydCA+IGVuZCB8fCBlbmQgPiBsZW5ndGgpIHsKICAgICAgICBlbmROYW1lID8/PSAiZW5kIjsKICAgICAgICB0aHJvdyBSYW5nZUVycm9yLnJhbmdlKGVuZCwgc3RhcnQsIGxlbmd0aCwgZW5kTmFtZSwgbWVzc2FnZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGVuZDsKICAgIH0KICAgIHJldHVybiBsZW5ndGg7CiAgfQoKICAvKioKICAgKiBDaGVjayB0aGF0IGFuIGludGVnZXIgdmFsdWUgaXNuJ3QgbmVnYXRpdmUuCiAgICoKICAgKiBUaHJvd3MgaWYgdGhlIHZhbHVlIGlzIG5lZ2F0aXZlLgogICAqLwogIHN0YXRpYyB2b2lkIGNoZWNrTm90TmVnYXRpdmUoaW50IHZhbHVlLCBbU3RyaW5nIG5hbWUsIFN0cmluZyBtZXNzYWdlXSkgewogICAgaWYgKHZhbHVlIDwgMCkgdGhyb3cgUmFuZ2VFcnJvci5yYW5nZSh2YWx1ZSwgMCwgbnVsbCwgbmFtZSwgbWVzc2FnZSk7CiAgfQoKICBTdHJpbmcgZ2V0IF9lcnJvck5hbWUgPT4gIlJhbmdlRXJyb3IiOwogIFN0cmluZyBnZXQgX2Vycm9yRXhwbGFuYXRpb24gewogICAgYXNzZXJ0KF9oYXNWYWx1ZSk7CiAgICBTdHJpbmcgZXhwbGFuYXRpb24gPSAiIjsKICAgIGlmIChzdGFydCA9PSBudWxsKSB7CiAgICAgIGlmIChlbmQgIT0gbnVsbCkgewogICAgICAgIGV4cGxhbmF0aW9uID0gIjogTm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byAkZW5kIjsKICAgICAgfQogICAgICAvLyBJZiBib3RoIGFyZSBudWxsLCB3ZSBkb24ndCBhZGQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgbGltaXRzLgogICAgfSBlbHNlIGlmIChlbmQgPT0gbnVsbCkgewogICAgICBleHBsYW5hdGlvbiA9ICI6IE5vdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJHN0YXJ0IjsKICAgIH0gZWxzZSBpZiAoZW5kID4gc3RhcnQpIHsKICAgICAgZXhwbGFuYXRpb24gPSAiOiBOb3QgaW4gcmFuZ2UgJHN0YXJ0Li4kZW5kLCBpbmNsdXNpdmUiOwogICAgfSBlbHNlIGlmIChlbmQgPCBzdGFydCkgewogICAgICBleHBsYW5hdGlvbiA9ICI6IFZhbGlkIHZhbHVlIHJhbmdlIGlzIGVtcHR5IjsKICAgIH0gZWxzZSB7CiAgICAgIC8vIGVuZCA9PSBzdGFydC4KICAgICAgZXhwbGFuYXRpb24gPSAiOiBPbmx5IHZhbGlkIHZhbHVlIGlzICRzdGFydCI7CiAgICB9CiAgICByZXR1cm4gZXhwbGFuYXRpb247CiAgfQp9CgovKioKICogQSBzcGVjaWFsaXplZCBbUmFuZ2VFcnJvcl0gdXNlZCB3aGVuIGFuIGluZGV4IGlzIG5vdCBpbiB0aGUgcmFuZ2UKICogYDAuLmluZGV4YWJsZS5sZW5ndGgtMWAuCiAqCiAqIEFsc28gY29udGFpbnMgdGhlIGluZGV4YWJsZSBvYmplY3QsIGl0cyBsZW5ndGggYXQgdGhlIHRpbWUgb2YgdGhlIGVycm9yLAogKiBhbmQgdGhlIGludmFsaWQgaW5kZXggaXRzZWxmLgogKi8KY2xhc3MgSW5kZXhFcnJvciBleHRlbmRzIEFyZ3VtZW50RXJyb3IgaW1wbGVtZW50cyBSYW5nZUVycm9yIHsKICAvKiogVGhlIGluZGV4YWJsZSBvYmplY3QgdGhhdCBbaW52YWxpZFZhbHVlXSB3YXMgbm90IGEgdmFsaWQgaW5kZXggaW50by4gKi8KICBmaW5hbCBpbmRleGFibGU7CiAgLyoqIFRoZSBsZW5ndGggb2YgW2luZGV4YWJsZV0gYXQgdGhlIHRpbWUgb2YgdGhlIGVycm9yLiAqLwogIGZpbmFsIGludCBsZW5ndGg7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgW0luZGV4RXJyb3JdIHN0YXRpbmcgdGhhdCBbaW52YWxpZFZhbHVlXSBpcyBub3QgYSB2YWxpZCBpbmRleAogICAqIGludG8gW2luZGV4YWJsZV0uCiAgICoKICAgKiBUaGUgW2xlbmd0aF0gaXMgdGhlIGxlbmd0aCBvZiBbaW5kZXhhYmxlXSBhdCB0aGUgdGltZSBvZiB0aGUgZXJyb3IuCiAgICogSWYgYGxlbmd0aGAgaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYGluZGV4YWJsZS5sZW5ndGhgLgogICAqCiAgICogVGhlIG1lc3NhZ2UgaXMgdXNlZCBhcyBwYXJ0IG9mIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVycm9yLgogICAqLwogIEluZGV4RXJyb3IoaW50IGludmFsaWRWYWx1ZSwgZHluYW1pYyBpbmRleGFibGUsCiAgICAgIFtTdHJpbmcgbmFtZSwgU3RyaW5nIG1lc3NhZ2UsIGludCBsZW5ndGhdKQogICAgICA6IHRoaXMuaW5kZXhhYmxlID0gaW5kZXhhYmxlLAogICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoID8/IGluZGV4YWJsZS5sZW5ndGgsCiAgICAgICAgc3VwZXIudmFsdWUoaW52YWxpZFZhbHVlLCBuYW1lLAogICAgICAgICAgICAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAiSW5kZXggb3V0IG9mIHJhbmdlIik7CgogIC8vIEdldHRlcnMgaW5oZXJpdGVkIGZyb20gUmFuZ2VFcnJvci4KICBpbnQgZ2V0IHN0YXJ0ID0+IDA7CiAgaW50IGdldCBlbmQgPT4gbGVuZ3RoIC0gMTsKCiAgU3RyaW5nIGdldCBfZXJyb3JOYW1lID0+ICJSYW5nZUVycm9yIjsKICBTdHJpbmcgZ2V0IF9lcnJvckV4cGxhbmF0aW9uIHsKICAgIGFzc2VydChfaGFzVmFsdWUpOwogICAgaW50IGludmFsaWRWYWx1ZSA9IHRoaXMuaW52YWxpZFZhbHVlOwogICAgaWYgKGludmFsaWRWYWx1ZSA8IDApIHsKICAgICAgcmV0dXJuICI6IGluZGV4IG11c3Qgbm90IGJlIG5lZ2F0aXZlIjsKICAgIH0KICAgIGlmIChsZW5ndGggPT0gMCkgewogICAgICByZXR1cm4gIjogbm8gaW5kaWNlcyBhcmUgdmFsaWQiOwogICAgfQogICAgcmV0dXJuICI6IGluZGV4IHNob3VsZCBiZSBsZXNzIHRoYW4gJGxlbmd0aCI7CiAgfQp9CgovKioKICogRXJyb3IgdGhyb3duIHdoZW4gY29udHJvbCByZWFjaGVzIHRoZSBlbmQgb2YgYSBzd2l0Y2ggY2FzZS4KICoKICogVGhlIERhcnQgc3BlY2lmaWNhdGlvbiByZXF1aXJlcyB0aGlzIGVycm9yIHRvIGJlIHRocm93biB3aGVuCiAqIGNvbnRyb2wgcmVhY2hlcyB0aGUgZW5kIG9mIGEgc3dpdGNoIGNhc2UgKGV4Y2VwdCB0aGUgbGFzdCBjYXNlCiAqIG9mIGEgc3dpdGNoKSB3aXRob3V0IG1lZXRpbmcgYSBicmVhayBvciBzaW1pbGFyIGVuZCBvZiB0aGUgY29udHJvbAogKiBmbG93LgogKi8KY2xhc3MgRmFsbFRocm91Z2hFcnJvciBleHRlbmRzIEVycm9yIHsKICBGYWxsVGhyb3VnaEVycm9yKCk7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGV4dGVybmFsIEZhbGxUaHJvdWdoRXJyb3IuX2NyZWF0ZShTdHJpbmcgdXJsLCBpbnQgbGluZSk7CgogIGV4dGVybmFsIFN0cmluZyB0b1N0cmluZygpOwp9CgovKioKICogRXJyb3IgdGhyb3duIHdoZW4gdHJ5aW5nIHRvIGluc3RhbnRpYXRlIGFuIGFic3RyYWN0IGNsYXNzLgogKi8KY2xhc3MgQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHsKICBmaW5hbCBTdHJpbmcgX2NsYXNzTmFtZTsKICBBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkVycm9yKFN0cmluZyBjbGFzc05hbWUpIDogX2NsYXNzTmFtZSA9IGNsYXNzTmFtZTsKCiAgZXh0ZXJuYWwgU3RyaW5nIHRvU3RyaW5nKCk7Cn0KCi8qKgogKiBFcnJvciB0aHJvd24gYnkgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgWzpub1N1Y2hNZXRob2Q6XSBvbiBbT2JqZWN0XS4KICovCmNsYXNzIE5vU3VjaE1ldGhvZEVycm9yIGV4dGVuZHMgRXJyb3IgewogIC8qKgogICAqIENyZWF0ZSBhIFtOb1N1Y2hNZXRob2RFcnJvcl0gY29ycmVzcG9uZGluZyB0byBhIGZhaWxlZCBtZXRob2QgY2FsbC4KICAgKgogICAqIFRoZSBbcmVjZWl2ZXJdIGlzIHRoZSByZWNlaXZlciBvZiB0aGUgbWV0aG9kIGNhbGwuCiAgICogVGhhdCBpcywgdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHdhcyBhdHRlbXB0ZWQgY2FsbGVkLgogICAqCiAgICogVGhlIFtpbnZvY2F0aW9uXSByZXByZXNlbnRzIHRoZSBtZXRob2QgY2FsbCB0aGF0IGZhaWxlZC4gSXQKICAgKiBzaG91bGQgbm90IGJlIGBudWxsYC4KICAgKi8KICBleHRlcm5hbCBOb1N1Y2hNZXRob2RFcnJvci53aXRoSW52b2NhdGlvbigKICAgICAgT2JqZWN0IHJlY2VpdmVyLCBJbnZvY2F0aW9uIGludm9jYXRpb24pOwoKICAvLyBEZXByZWNhdGVkIGNvbnN0cnVjdG9yIHRvIGJlIHJlbW92ZWQgYWZ0ZXIgZGFydDJqcyB1cGRhdGVzIHRvIHRoZSBhYm92ZS4KICAvKioKICAgKiBDcmVhdGUgYSBbTm9TdWNoTWV0aG9kRXJyb3JdIGNvcnJlc3BvbmRpbmcgdG8gYSBmYWlsZWQgbWV0aG9kIGNhbGwuCiAgICoKICAgKiBUaGUgW3JlY2VpdmVyXSBpcyB0aGUgcmVjZWl2ZXIgb2YgdGhlIG1ldGhvZCBjYWxsLgogICAqIFRoYXQgaXMsIHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCB3YXMgYXR0ZW1wdGVkIGNhbGxlZC4KICAgKiBJZiB0aGUgcmVjZWl2ZXIgaXMgYG51bGxgLCBpdCBpcyBpbnRlcnByZXRlZCBhcyBhIGNhbGwgdG8gYSB0b3AtbGV2ZWwKICAgKiBmdW5jdGlvbiBvZiBhIGxpYnJhcnkuCiAgICoKICAgKiBUaGUgW21lbWJlck5hbWVdIGlzIGEgW1N5bWJvbF0gcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBjYWxsZWQgbWV0aG9kCiAgICogb3IgYWNjZXNzb3IuIEl0IHNob3VsZCBub3QgYmUgYG51bGxgLgogICAqCiAgICogVGhlIFtwb3NpdGlvbmFsQXJndW1lbnRzXSBpcyBhIGxpc3Qgb2YgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzIHRoYXQgdGhlCiAgICogbWV0aG9kIHdhcyBjYWxsZWQgd2l0aC4gSWYgYG51bGxgLCBpdCBpcyBjb25zaWRlcmVkIGVxdWl2YWxlbnQgdG8gdGhlCiAgICogZW1wdHkgbGlzdC4KICAgKgogICAqIFRoZSBbbmFtZWRBcmd1bWVudHNdIGlzIGEgbWFwIGZyb20gW1N5bWJvbF1zIHRvIHRoZSB2YWx1ZXMgb2YgbmFtZWQKICAgKiBhcmd1bWVudHMgdGhhdCB0aGUgbWV0aG9kIHdhcyBjYWxsZWQgd2l0aC4KICAgKgogICAqIFRoaXMgY29uc3RydWN0b3IgZG9lcyBub3QgaGFuZGxlIHR5cGUgYXJndW1lbnRzLgogICAqIFRvIGluY2x1ZGUgdHlwZSB2YXJpYWJsZXMsIGNyZWF0ZSBhbiBbSW52b2NhdGlvbl0gYW5kIHVzZQogICAqIFtOb1N1Y2hNZXRob2RFcnJvci53aXRoSW52b2NhdGlvbl0uCiAgICovCiAgQERlcHJlY2F0ZWQoIlVzZSBOb1N1Y2hNZXRob2Qud2l0aEludm9jYXRpb24gaW5zdGVhZCIpCiAgZXh0ZXJuYWwgTm9TdWNoTWV0aG9kRXJyb3IoT2JqZWN0IHJlY2VpdmVyLCBTeW1ib2wgbWVtYmVyTmFtZSwKICAgICAgTGlzdCBwb3NpdGlvbmFsQXJndW1lbnRzLCBNYXA8U3ltYm9sLCBkeW5hbWljPiBuYW1lZEFyZ3VtZW50cywKICAgICAgW0BkZXByZWNhdGVkIExpc3QgZXhpc3RpbmdBcmd1bWVudE5hbWVzXSk7CgogIGV4dGVybmFsIFN0cmluZyB0b1N0cmluZygpOwp9CgovKioKICogVGhlIG9wZXJhdGlvbiB3YXMgbm90IGFsbG93ZWQgYnkgdGhlIG9iamVjdC4KICoKICogVGhpcyBbRXJyb3JdIGlzIHRocm93biB3aGVuIGFuIGluc3RhbmNlIGNhbm5vdCBpbXBsZW1lbnQgb25lIG9mIHRoZSBtZXRob2RzCiAqIGluIGl0cyBzaWduYXR1cmUuCiAqLwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIFVuc3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIFVuc3VwcG9ydGVkRXJyb3IodGhpcy5tZXNzYWdlKTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiVW5zdXBwb3J0ZWQgb3BlcmF0aW9uOiAkbWVzc2FnZSI7Cn0KCi8qKgogKiBUaHJvd24gYnkgb3BlcmF0aW9ucyB0aGF0IGhhdmUgbm90IGJlZW4gaW1wbGVtZW50ZWQgeWV0LgogKgogKiBUaGlzIFtFcnJvcl0gaXMgdGhyb3duIGJ5IHVuZmluaXNoZWQgY29kZSB0aGF0IGhhc24ndCB5ZXQgaW1wbGVtZW50ZWQKICogYWxsIHRoZSBmZWF0dXJlcyBpdCBuZWVkcy4KICoKICogSWYgYSBjbGFzcyBpcyBub3QgaW50ZW5kaW5nIHRvIGltcGxlbWVudCB0aGUgZmVhdHVyZSwgaXQgc2hvdWxkIHRocm93CiAqIGFuIFtVbnN1cHBvcnRlZEVycm9yXSBpbnN0ZWFkLiBUaGlzIGVycm9yIGlzIG9ubHkgaW50ZW5kZWQgZm9yCiAqIHVzZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAqLwpjbGFzcyBVbmltcGxlbWVudGVkRXJyb3IgZXh0ZW5kcyBFcnJvciBpbXBsZW1lbnRzIFVuc3VwcG9ydGVkRXJyb3IgewogIGZpbmFsIFN0cmluZyBtZXNzYWdlOwogIFVuaW1wbGVtZW50ZWRFcnJvcihbdGhpcy5tZXNzYWdlXSk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gKHRoaXMubWVzc2FnZSAhPSBudWxsCiAgICAgID8gIlVuaW1wbGVtZW50ZWRFcnJvcjogJG1lc3NhZ2UiCiAgICAgIDogIlVuaW1wbGVtZW50ZWRFcnJvciIpOwp9CgovKioKICogVGhlIG9wZXJhdGlvbiB3YXMgbm90IGFsbG93ZWQgYnkgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIG9iamVjdC4KICoKICogVGhpcyBpcyBhIGdlbmVyaWMgZXJyb3IgdXNlZCBmb3IgYSB2YXJpZXR5IG9mIGRpZmZlcmVudCBlcnJvbmVvdXMKICogYWN0aW9ucy4gVGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGRlc2NyaXB0aXZlLgogKi8KY2xhc3MgU3RhdGVFcnJvciBleHRlbmRzIEVycm9yIHsKICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKICBTdGF0ZUVycm9yKHRoaXMubWVzc2FnZSk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkJhZCBzdGF0ZTogJG1lc3NhZ2UiOwp9CgovKioKICogRXJyb3Igb2NjdXJyaW5nIHdoZW4gYSBjb2xsZWN0aW9uIGlzIG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24uCiAqCiAqIFNvbWUgbW9kaWZpY2F0aW9ucyBtYXkgYmUgYWxsb3dlZCBmb3Igc29tZSBjb2xsZWN0aW9ucywgc28gZWFjaCBjb2xsZWN0aW9uCiAqIChbSXRlcmFibGVdIG9yIHNpbWlsYXIgY29sbGVjdGlvbiBvZiB2YWx1ZXMpIHNob3VsZCBkZWNsYXJlIHdoaWNoIG9wZXJhdGlvbnMKICogYXJlIGFsbG93ZWQgZHVyaW5nIGFuIGl0ZXJhdGlvbi4KICovCmNsYXNzIENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHsKICAvKiogVGhlIG9iamVjdCB0aGF0IHdhcyBtb2RpZmllZCBpbiBhbiBpbmNvbXBhdGlibGUgd2F5LiAqLwogIGZpbmFsIE9iamVjdCBtb2RpZmllZE9iamVjdDsKCiAgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKFt0aGlzLm1vZGlmaWVkT2JqZWN0XSk7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGlmIChtb2RpZmllZE9iamVjdCA9PSBudWxsKSB7CiAgICAgIHJldHVybiAiQ29uY3VycmVudCBtb2RpZmljYXRpb24gZHVyaW5nIGl0ZXJhdGlvbi4iOwogICAgfQogICAgcmV0dXJuICJDb25jdXJyZW50IG1vZGlmaWNhdGlvbiBkdXJpbmcgaXRlcmF0aW9uOiAiCiAgICAgICAgIiR7RXJyb3Iuc2FmZVRvU3RyaW5nKG1vZGlmaWVkT2JqZWN0KX0uIjsKICB9Cn0KCmNsYXNzIE91dE9mTWVtb3J5RXJyb3IgaW1wbGVtZW50cyBFcnJvciB7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGNvbnN0IE91dE9mTWVtb3J5RXJyb3IoKTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiT3V0IG9mIE1lbW9yeSI7CgogIFN0YWNrVHJhY2UgZ2V0IHN0YWNrVHJhY2UgPT4gbnVsbDsKfQoKY2xhc3MgU3RhY2tPdmVyZmxvd0Vycm9yIGltcGxlbWVudHMgRXJyb3IgewogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBjb25zdCBTdGFja092ZXJmbG93RXJyb3IoKTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiU3RhY2sgT3ZlcmZsb3ciOwoKICBTdGFja1RyYWNlIGdldCBzdGFja1RyYWNlID0+IG51bGw7Cn0KCi8qKgogKiBFcnJvciB0aHJvd24gd2hlbiBhIGxhemlseSBpbml0aWFsaXplZCB2YXJpYWJsZSBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQuCiAqCiAqIEEgc3RhdGljL2xpYnJhcnkgdmFyaWFibGUgd2l0aCBhbiBpbml0aWFsaXplciBleHByZXNzaW9uIGlzIGluaXRpYWxpemVkCiAqIHRoZSBmaXJzdCB0aW1lIGl0IGlzIHJlYWQuIElmIGV2YWx1YXRpbmcgdGhlIGluaXRpYWxpemVyIGV4cHJlc3Npb24gY2F1c2VzCiAqIGFub3RoZXIgcmVhZCBvZiB0aGUgdmFyaWFibGUsIHRoaXMgZXJyb3IgaXMgdGhyb3duLgogKi8KY2xhc3MgQ3ljbGljSW5pdGlhbGl6YXRpb25FcnJvciBleHRlbmRzIEVycm9yIHsKICBmaW5hbCBTdHJpbmcgdmFyaWFibGVOYW1lOwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBDeWNsaWNJbml0aWFsaXphdGlvbkVycm9yKFt0aGlzLnZhcmlhYmxlTmFtZV0pOwogIFN0cmluZyB0b1N0cmluZygpID0+IHZhcmlhYmxlTmFtZSA9PSBudWxsCiAgICAgID8gIlJlYWRpbmcgc3RhdGljIHZhcmlhYmxlIGR1cmluZyBpdHMgaW5pdGlhbGl6YXRpb24iCiAgICAgIDogIlJlYWRpbmcgc3RhdGljIHZhcmlhYmxlICckdmFyaWFibGVOYW1lJyBkdXJpbmcgaXRzIGluaXRpYWxpemF0aW9uIjsKfQqCTgBOTjwBEwEEOgNGGAM/LzMDPyw7AzJAMkgDKzNBJzIDJQNGA0URA0M0HzdFOVEyAzA0IzIjNkoxAzg2Ay4+QERFN00EDiQBBjcFTRYGLj0gBhwqBiQEAU49ATkBJgIBBEYEJTEYIisCAQRDBCoBBEMEIQEEMwQmHBUpAgEERAQkJRgcFjUVKREBBjUFRU0TBhwgHRsVAQYzBUE+BScFR0pJSwYcOB4aAQZNBiUbJh0BBiUGED09BAE9SSYBFhwYHwZFNiNJLDovBAIBBD0EKT4TPhEBSyYGOQYcGhYUGAEGRQVDRRIGPRYUFU4BBkoFREYVBUcZBUNFEgYcQSUaGBVQAQZKFwVDRRIFSUAGOT8BBjcFL0QGSicwSAYEAQZDBT4FTToFUDoGPDMhTigYRwYEAQZDBUMZRAUtPgVGEwVLGgY9PE4iJx1EBhcpG0YIEgYTBAEGMQUmBktKBAEpIRcdGRk6CEUePR4+HjQNFzQGGAQCAQRFHANMIQQ/ThM9FAEGURcFSUAFTAYyMSQyKEEBKBYdASkhFyocLQYXJwYyBAIBBD8DQEJGCQQnFhw7AR4CAQQ+BDYbTgEeAgEETwQoBkkFOEMFQRsGLS8BTgZJBThDSxwFTysFTksRBUkwBTY/KQY5QUUxAR4CAQQwA08VBBonGBwiOgIBBDwDSR4DSUIbBEUYJi0nHwIBBEUDRS8EIRgcLgIBBEMDTlAkBDI+HwE2ARYiOgY4MgQCASocHCgBJQIBLBweKQElAgEESgNLTjcEMB0cMiw8TQIBFWRhcnQ6Y29yZS9lcnJvcnMuZGFydDBvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9leGNlcHRpb25zLmRhcnSXji8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8vIEV4Y2VwdGlvbnMgYXJlIHRocm93biBlaXRoZXIgYnkgdGhlIFZNIG9yIGZyb20gRGFydCBjb2RlLgoKLyoqCiAqIEEgbWFya2VyIGludGVyZmFjZSBpbXBsZW1lbnRlZCBieSBhbGwgY29yZSBsaWJyYXJ5IGV4Y2VwdGlvbnMuCiAqCiAqIEFuIFtFeGNlcHRpb25dIGlzIGludGVuZGVkIHRvIGNvbnZleSBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciBhYm91dCBhIGZhaWx1cmUsCiAqIHNvIHRoYXQgdGhlIGVycm9yIGNhbiBiZSBhZGRyZXNzZWQgcHJvZ3JhbW1hdGljYWxseS4gSXQgaXMgaW50ZW5kZWQgdG8gYmUKICogY2F1Z2h0LCBhbmQgaXQgc2hvdWxkIGNvbnRhaW4gdXNlZnVsIGRhdGEgZmllbGRzLgogKgogKiBDcmVhdGluZyBpbnN0YW5jZXMgb2YgW0V4Y2VwdGlvbl0gZGlyZWN0bHkgd2l0aCBbOm5ldyBFeGNlcHRpb24oIm1lc3NhZ2UiKTpdCiAqIGlzIGRpc2NvdXJhZ2VkLCBhbmQgb25seSBpbmNsdWRlZCBhcyBhIHRlbXBvcmFyeSBtZWFzdXJlIGR1cmluZyBkZXZlbG9wbWVudCwKICogdW50aWwgdGhlIGFjdHVhbCBleGNlcHRpb25zIHVzZWQgYnkgYSBsaWJyYXJ5IGFyZSBkb25lLgogKi8KYWJzdHJhY3QgY2xhc3MgRXhjZXB0aW9uIHsKICBmYWN0b3J5IEV4Y2VwdGlvbihbdmFyIG1lc3NhZ2VdKSA9PiBfRXhjZXB0aW9uKG1lc3NhZ2UpOwp9CgovKiogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBbRXhjZXB0aW9uXSB3aGljaCBjYXJyaWVzIGEgbWVzc2FnZS4gKi8KY2xhc3MgX0V4Y2VwdGlvbiBpbXBsZW1lbnRzIEV4Y2VwdGlvbiB7CiAgZmluYWwgbWVzc2FnZTsKCiAgX0V4Y2VwdGlvbihbdGhpcy5tZXNzYWdlXSk7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGlmIChtZXNzYWdlID09IG51bGwpIHJldHVybiAiRXhjZXB0aW9uIjsKICAgIHJldHVybiAiRXhjZXB0aW9uOiAkbWVzc2FnZSI7CiAgfQp9CgovKioKICogRXhjZXB0aW9uIHRocm93biB3aGVuIGEgc3RyaW5nIG9yIHNvbWUgb3RoZXIgZGF0YSBkb2VzIG5vdCBoYXZlIGFuIGV4cGVjdGVkCiAqIGZvcm1hdCBhbmQgY2Fubm90IGJlIHBhcnNlZCBvciBwcm9jZXNzZWQuCiAqLwpjbGFzcyBGb3JtYXRFeGNlcHRpb24gaW1wbGVtZW50cyBFeGNlcHRpb24gewogIC8qKgogICAqIEEgbWVzc2FnZSBkZXNjcmliaW5nIHRoZSBmb3JtYXQgZXJyb3IuCiAgICovCiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CgogIC8qKgogICAqIFRoZSBhY3R1YWwgc291cmNlIGlucHV0IHdoaWNoIGNhdXNlZCB0aGUgZXJyb3IuCiAgICoKICAgKiBUaGlzIGlzIHVzdWFsbHkgYSBbU3RyaW5nXSwgYnV0IGNhbiBiZSBvdGhlciB0eXBlcyB0b28uCiAgICogSWYgaXQgaXMgYSBzdHJpbmcsIHBhcnRzIG9mIGl0IG1heSBiZSBpbmNsdWRlZCBpbiB0aGUgW3RvU3RyaW5nXSBtZXNzYWdlLgogICAqCiAgICogVGhlIHNvdXJjZSBpcyBgbnVsbGAgaWYgb21pdHRlZCBvciB1bmtub3duLgogICAqLwogIGZpbmFsIHNvdXJjZTsKCiAgLyoqCiAgICogVGhlIG9mZnNldCBpbiBbc291cmNlXSB3aGVyZSB0aGUgZXJyb3Igd2FzIGRldGVjdGVkLgogICAqCiAgICogQSB6ZXJvLWJhc2VkIG9mZnNldCBpbnRvIHRoZSBzb3VyY2UgdGhhdCBtYXJrcyB0aGUgZm9ybWF0IGVycm9yIGNhdXNpbmcKICAgKiB0aGlzIGV4Y2VwdGlvbiB0byBiZSBjcmVhdGVkLiBJZiBgc291cmNlYCBpcyBhIHN0cmluZywgdGhpcyBzaG91bGQgYmUgYQogICAqIHN0cmluZyBpbmRleCBpbiB0aGUgcmFuZ2UgYDAgPD0gb2Zmc2V0IDw9IHNvdXJjZS5sZW5ndGhgLgogICAqCiAgICogSWYgaW5wdXQgaXMgYSBzdHJpbmcsIHRoZSBbdG9TdHJpbmddIG1ldGhvZCBtYXkgcmVwcmVzZW50IHRoaXMgb2Zmc2V0IGFzCiAgICogYSBsaW5lIGFuZCBjaGFyYWN0ZXIgcG9zaXRpb24uIFRoZSBvZmZzZXQgc2hvdWxkIGJlIGluc2lkZSB0aGUgc3RyaW5nLAogICAqIG9yIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZy4KICAgKgogICAqIE1heSBiZSBvbWl0dGVkLiBJZiBwcmVzZW50LCBbc291cmNlXSBzaG91bGQgYWxzbyBiZSBwcmVzZW50IGlmIHBvc3NpYmxlLgogICAqLwogIGZpbmFsIGludCBvZmZzZXQ7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgRm9ybWF0RXhjZXB0aW9uIHdpdGggYW4gb3B0aW9uYWwgZXJyb3IgW21lc3NhZ2VdLgogICAqCiAgICogT3B0aW9uYWxseSBhbHNvIHN1cHBseSB0aGUgYWN0dWFsIFtzb3VyY2VdIHdpdGggdGhlIGluY29ycmVjdCBmb3JtYXQsCiAgICogYW5kIHRoZSBbb2Zmc2V0XSBpbiB0aGUgZm9ybWF0IHdoZXJlIGEgcHJvYmxlbSB3YXMgZGV0ZWN0ZWQuCiAgICovCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGNvbnN0IEZvcm1hdEV4Y2VwdGlvbihbdGhpcy5tZXNzYWdlID0gIiIsIHRoaXMuc291cmNlLCB0aGlzLm9mZnNldF0pOwoKICAvKioKICAgKiBSZXR1cm5zIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdCBleGNlcHRpb24uCiAgICoKICAgKiBUaGUgZGVzY3JpcHRpb24gYWx3YXlzIGNvbnRhaW5zIHRoZSBbbWVzc2FnZV0uCiAgICoKICAgKiBJZiBbc291cmNlXSBpcyBwcmVzZW50IGFuZCBpcyBhIHN0cmluZywgdGhlIGRlc2NyaXB0aW9uIHdpbGwgY29udGFpbgogICAqIChhdCBsZWFzdCBhIHBhcnQgb2YpIHRoZSBzb3VyY2UuCiAgICogSWYgW29mZnNldF0gaXMgYWxzbyBwcm92aWRlZCwgdGhlIHBhcnQgb2YgdGhlIHNvdXJjZSBpbmNsdWRlZCB3aWxsCiAgICogY29udGFpbiB0aGF0IG9mZnNldCwgYW5kIHRoZSBvZmZzZXQgd2lsbCBiZSBtYXJrZWQuCiAgICoKICAgKiBJZiB0aGUgc291cmNlIGlzIGEgc3RyaW5nIGFuZCBpdCBjb250YWlucyBhIGxpbmUgYnJlYWsgYmVmb3JlIG9mZnNldCwKICAgKiBvbmx5IHRoZSBsaW5lIGNvbnRhaW5pbmcgb2Zmc2V0IHdpbGwgYmUgaW5jbHVkZWQsIGFuZCBpdHMgbGluZSBudW1iZXIKICAgKiB3aWxsIGFsc28gYmUgcGFydCBvZiB0aGUgZGVzY3JpcHRpb24uIExpbmUgYW5kIGNoYXJhY3RlciBvZmZzZXRzIGFyZQogICAqIDEtYmFzZWQuCiAgICovCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nIHJlcG9ydCA9ICJGb3JtYXRFeGNlcHRpb24iOwogICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCAmJiAiIiAhPSBtZXNzYWdlKSB7CiAgICAgIHJlcG9ydCA9ICIkcmVwb3J0OiAkbWVzc2FnZSI7CiAgICB9CiAgICBpbnQgb2Zmc2V0ID0gdGhpcy5vZmZzZXQ7CiAgICBPYmplY3Qgb2JqZWN0U291cmNlID0gdGhpcy5zb3VyY2U7CiAgICBpZiAob2JqZWN0U291cmNlIGlzIFN0cmluZykgewogICAgICBTdHJpbmcgc291cmNlID0gb2JqZWN0U291cmNlOwogICAgICBpZiAob2Zmc2V0ICE9IG51bGwgJiYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gc291cmNlLmxlbmd0aCkpIHsKICAgICAgICBvZmZzZXQgPSBudWxsOwogICAgICB9CiAgICAgIC8vIFNvdXJjZSBpcyBzdHJpbmcgYW5kIG9mZnNldCBpcyBudWxsIG9yIHZhbGlkLgogICAgICBpZiAob2Zmc2V0ID09IG51bGwpIHsKICAgICAgICBpZiAoc291cmNlLmxlbmd0aCA+IDc4KSB7CiAgICAgICAgICBzb3VyY2UgPSBzb3VyY2Uuc3Vic3RyaW5nKDAsIDc1KSArICIuLi4iOwogICAgICAgIH0KICAgICAgICByZXR1cm4gIiRyZXBvcnRcbiRzb3VyY2UiOwogICAgICB9CiAgICAgIGludCBsaW5lTnVtID0gMTsKICAgICAgaW50IGxpbmVTdGFydCA9IDA7CiAgICAgIGJvb2wgcHJldmlvdXNDaGFyV2FzQ1IgPSBmYWxzZTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykgewogICAgICAgIGludCBjaGFyID0gc291cmNlLmNvZGVVbml0QXQoaSk7CiAgICAgICAgaWYgKGNoYXIgPT0gMHgwYSkgewogICAgICAgICAgaWYgKGxpbmVTdGFydCAhPSBpIHx8ICFwcmV2aW91c0NoYXJXYXNDUikgewogICAgICAgICAgICBsaW5lTnVtKys7CiAgICAgICAgICB9CiAgICAgICAgICBsaW5lU3RhcnQgPSBpICsgMTsKICAgICAgICAgIHByZXZpb3VzQ2hhcldhc0NSID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIGlmIChjaGFyID09IDB4MGQpIHsKICAgICAgICAgIGxpbmVOdW0rKzsKICAgICAgICAgIGxpbmVTdGFydCA9IGkgKyAxOwogICAgICAgICAgcHJldmlvdXNDaGFyV2FzQ1IgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAobGluZU51bSA+IDEpIHsKICAgICAgICByZXBvcnQgKz0gIiAoYXQgbGluZSAkbGluZU51bSwgY2hhcmFjdGVyICR7b2Zmc2V0IC0gbGluZVN0YXJ0ICsgMX0pXG4iOwogICAgICB9IGVsc2UgewogICAgICAgIHJlcG9ydCArPSAiIChhdCBjaGFyYWN0ZXIgJHtvZmZzZXQgKyAxfSlcbiI7CiAgICAgIH0KICAgICAgaW50IGxpbmVFbmQgPSBzb3VyY2UubGVuZ3RoOwogICAgICBmb3IgKGludCBpID0gb2Zmc2V0OyBpIDwgc291cmNlLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaW50IGNoYXIgPSBzb3VyY2UuY29kZVVuaXRBdChpKTsKICAgICAgICBpZiAoY2hhciA9PSAweDBhIHx8IGNoYXIgPT0gMHgwZCkgewogICAgICAgICAgbGluZUVuZCA9IGk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgaW50IGxlbmd0aCA9IGxpbmVFbmQgLSBsaW5lU3RhcnQ7CiAgICAgIGludCBzdGFydCA9IGxpbmVTdGFydDsKICAgICAgaW50IGVuZCA9IGxpbmVFbmQ7CiAgICAgIFN0cmluZyBwcmVmaXggPSAiIjsKICAgICAgU3RyaW5nIHBvc3RmaXggPSAiIjsKICAgICAgaWYgKGxlbmd0aCA+IDc4KSB7CiAgICAgICAgLy8gQ2FuJ3Qgc2hvdyBlbnRpcmUgbGluZS4gVHJ5IHRvIGFuY2hvciBhdCB0aGUgbmVhcmVzdCBlbmQsIGlmCiAgICAgICAgLy8gb25lIGlzIHdpdGhpbiByZWFjaC4KICAgICAgICBpbnQgaW5kZXggPSBvZmZzZXQgLSBsaW5lU3RhcnQ7CiAgICAgICAgaWYgKGluZGV4IDwgNzUpIHsKICAgICAgICAgIGVuZCA9IHN0YXJ0ICsgNzU7CiAgICAgICAgICBwb3N0Zml4ID0gIi4uLiI7CiAgICAgICAgfSBlbHNlIGlmIChlbmQgLSBvZmZzZXQgPCA3NSkgewogICAgICAgICAgc3RhcnQgPSBlbmQgLSA3NTsKICAgICAgICAgIHByZWZpeCA9ICIuLi4iOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBOZWl0aGVyIGVuZCBpcyBuZWFyLCBqdXN0IHBpY2sgYW4gYXJlYSBhcm91bmQgdGhlIG9mZnNldC4KICAgICAgICAgIHN0YXJ0ID0gb2Zmc2V0IC0gMzY7CiAgICAgICAgICBlbmQgPSBvZmZzZXQgKyAzNjsKICAgICAgICAgIHByZWZpeCA9IHBvc3RmaXggPSAiLi4uIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgU3RyaW5nIHNsaWNlID0gc291cmNlLnN1YnN0cmluZyhzdGFydCwgZW5kKTsKICAgICAgaW50IG1hcmtPZmZzZXQgPSBvZmZzZXQgLSBzdGFydCArIHByZWZpeC5sZW5ndGg7CiAgICAgIHJldHVybiAiJHJlcG9ydCRwcmVmaXgkc2xpY2UkcG9zdGZpeFxuJHsiICIgKiBtYXJrT2Zmc2V0fV5cbiI7CiAgICB9IGVsc2UgewogICAgICAvLyBUaGUgc291cmNlIGlzIG5vdCBhIHN0cmluZy4KICAgICAgaWYgKG9mZnNldCAhPSBudWxsKSB7CiAgICAgICAgcmVwb3J0ICs9ICIgKGF0IG9mZnNldCAkb2Zmc2V0KSI7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlcG9ydDsKICAgIH0KICB9Cn0KCi8vIEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBkb2luZyBpbnRlZ2VyIGRpdmlzaW9uIHdpdGggYSB6ZXJvIGRpdmlzb3IuCmNsYXNzIEludGVnZXJEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbiBpbXBsZW1lbnRzIEV4Y2VwdGlvbiB7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGNvbnN0IEludGVnZXJEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbigpOwogIFN0cmluZyB0b1N0cmluZygpID0+ICJJbnRlZ2VyRGl2aXNpb25CeVplcm9FeGNlcHRpb24iOwp9CoC6AE5OPAETAT0BBEIDUU01A1BQOwQbOwIBRigRAR4BFi0iBAIBBE8tBC0GLAYYAQY1BT1PBTEGEAEGOgVNTT8FTkwiBU4GFAEGRQVLQgYcSAEGNAU0BUomSDkFS0tKDgYWJywkBh4nIiRGFwg3HCI0CiMIFxkmKSkcNhcMHSUjFR0kCggZUA81CCM1KSwXEQoIKB0ZGhsZSCAoGhwbKBwaEUcfHSQKCDM3RQ0lHCoIFQYEAgFFPBwqOQIBGWRhcnQ6Y29yZS9leGNlcHRpb25zLmRhcnQtb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvZXhwYW5kby5kYXJ0iIgvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogQW4gW0V4cGFuZG9dIGFsbG93cyBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gb2JqZWN0cy4KICoKICogRG9lcyBub3Qgd29yayBvbiBudW1iZXJzLCBzdHJpbmdzLCBib29sZWFucyBvciBudWxsLgogKgogKiBBbiBgRXhwYW5kb2AgZG9lcyBub3QgaG9sZCBvbiB0byB0aGUgYWRkZWQgcHJvcGVydHkgdmFsdWUgYWZ0ZXIgYW4gb2JqZWN0CiAqIGJlY29tZXMgaW5hY2Nlc3NpYmxlLgogKgogKiBTaW5jZSB5b3UgY2FuIGFsd2F5cyBjcmVhdGUgYSBuZXcgbnVtYmVyIHRoYXQgaXMgaWRlbnRpY2FsIHRvIGFuIGV4aXN0aW5nCiAqIG51bWJlciwgaXQgbWVhbnMgdGhhdCBhbiBleHBhbmRvIHByb3BlcnR5IG9uIGEgbnVtYmVyIGNvdWxkIG5ldmVyIGJlCiAqIHJlbGVhc2VkLiBUbyBhdm9pZCB0aGlzLCBleHBhbmRvIHByb3BlcnRpZXMgY2Fubm90IGJlIGFkZGVkIHRvIG51bWJlcnMuCiAqIFRoZSBzYW1lIGFyZ3VtZW50IGFwcGxpZXMgdG8gc3RyaW5ncywgYm9vbGVhbnMgYW5kIG51bGwsIHdoaWNoIGFsc28gaGF2ZQogKiBsaXRlcmFscyB0aGF0IGV2YWx1YXRlIHRvIGlkZW50aWNhbCB2YWx1ZXMgd2hlbiB0aGV5IG9jY3VyIG1vcmUgdGhhbiBvbmNlLgogKgogKiBUaGVyZSBpcyBubyByZXN0cmljdGlvbiBvbiBvdGhlciBjbGFzc2VzLCBldmVuIGZvciBjb21waWxlIHRpbWUgY29uc3RhbnQKICogb2JqZWN0cy4gQmUgY2FyZWZ1bCBpZiBhZGRpbmcgZXhwYW5kbyBwcm9wZXJ0aWVzIHRvIGNvbXBpbGUgdGltZSBjb25zdGFudHMsCiAqIHNpbmNlIHRoZXkgd2lsbCBzdGF5IGFsaXZlIGZvcmV2ZXIuCiAqLwpjbGFzcyBFeHBhbmRvPFQ+IHsKICAvKioKICAgKiBUaGUgbmFtZSBvZiB0aGUgdGhpcyBbRXhwYW5kb10gYXMgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4gSWYKICAgKiBubyBuYW1lIHdhcyBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLCB0aGUgbmFtZSBpcyBbOm51bGw6XS4KICAgKi8KICBmaW5hbCBTdHJpbmcgbmFtZTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBbRXhwYW5kb10uIFRoZSBvcHRpb25hbCBuYW1lIGlzIG9ubHkgdXNlZCBmb3IKICAgKiBkZWJ1Z2dpbmcgcHVycG9zZXMgYW5kIGNyZWF0aW5nIHR3byBkaWZmZXJlbnQgW0V4cGFuZG9dcyB3aXRoIHRoZQogICAqIHNhbWUgbmFtZSB5aWVsZHMgdHdvIFtFeHBhbmRvXXMgdGhhdCB3b3JrIG9uIGRpZmZlcmVudCBwcm9wZXJ0aWVzCiAgICogb2YgdGhlIG9iamVjdHMgdGhleSBhcmUgdXNlZCBvbi4KICAgKi8KICBleHRlcm5hbCBFeHBhbmRvKFtTdHJpbmcgbmFtZV0pOwoKICAvKioKICAgKiBFeHBhbmRvIHRvU3RyaW5nIG1ldGhvZCBvdmVycmlkZS4KICAgKi8KICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiRXhwYW5kbzokbmFtZSI7CgogIC8qKgogICAqIEdldHMgdGhlIHZhbHVlIG9mIHRoaXMgW0V4cGFuZG9dJ3MgcHJvcGVydHkgb24gdGhlIGdpdmVuCiAgICogb2JqZWN0LiBJZiB0aGUgb2JqZWN0IGhhc24ndCBiZWVuIGV4cGFuZGVkLCB0aGUgbWV0aG9kIHJldHVybnMKICAgKiBbOm51bGw6XS4KICAgKgogICAqIFRoZSBvYmplY3QgbXVzdCBub3QgYmUgYSBudW1iZXIsIGEgc3RyaW5nLCBhIGJvb2xlYW4gb3IgbnVsbC4KICAgKi8KICBleHRlcm5hbCBUIG9wZXJhdG9yIFtdKE9iamVjdCBvYmplY3QpOwoKICAvKioKICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGlzIFtFeHBhbmRvXSdzIHByb3BlcnR5IG9uIHRoZSBnaXZlbgogICAqIG9iamVjdC4gUHJvcGVydGllcyBjYW4gZWZmZWN0aXZlbHkgYmUgcmVtb3ZlZCBhZ2FpbiBieSBzZXR0aW5nCiAgICogdGhlaXIgdmFsdWUgdG8gbnVsbC4KICAgKgogICAqIFRoZSBvYmplY3QgbXVzdCBub3QgYmUgYSBudW1iZXIsIGEgc3RyaW5nLCBhIGJvb2xlYW4gb3IgbnVsbC4KICAgKi8KICBleHRlcm5hbCB2b2lkIG9wZXJhdG9yIFtdPShPYmplY3Qgb2JqZWN0LCBUIHZhbHVlKTsKfQpAAE5OPAETAQQ5AzgDTRkDTUhLTE4DTE8nBBMGRUIGFQEGQUdHJgYjAQYnBigBBj5EDwVDBikBBj5EGgVDBjYCARZkYXJ0OmNvcmUvZXhwYW5kby5kYXJ0Mm9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvZXhwYW5kb19wYXRjaC5kYXJ0j2YvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBFeHBhbmRvPFQ+IHsKICBAcGF0Y2gKICBFeHBhbmRvKFtTdHJpbmcgbmFtZV0pCiAgICAgIDogbmFtZSA9IG5hbWUsCiAgICAgICAgX2RhdGEgPSBuZXcgTGlzdChfbWluU2l6ZSksCiAgICAgICAgX3VzZWQgPSAwOwoKICBzdGF0aWMgY29uc3QgX21pblNpemUgPSA4OwogIHN0YXRpYyBmaW5hbCBfZGVsZXRlZEVudHJ5ID0gbmV3IF9XZWFrUHJvcGVydHkobnVsbCwgbnVsbCk7CgogIEBwYXRjaAogIFQgb3BlcmF0b3IgW10oT2JqZWN0IG9iamVjdCkgewogICAgX2NoZWNrVHlwZShvYmplY3QpOwoKICAgIHZhciBtYXNrID0gX3NpemUgLSAxOwogICAgdmFyIGlkeCA9IG9iamVjdC5faWRlbnRpdHlIYXNoQ29kZSAmIG1hc2s7CiAgICB2YXIgd3AgPSBfZGF0YVtpZHhdOwoKICAgIHdoaWxlICh3cCAhPSBudWxsKSB7CiAgICAgIGlmIChpZGVudGljYWwod3Aua2V5LCBvYmplY3QpKSB7CiAgICAgICAgcmV0dXJuIHdwLnZhbHVlOwogICAgICB9IGVsc2UgaWYgKHdwLmtleSA9PSBudWxsKSB7CiAgICAgICAgLy8gVGhpcyBlbnRyeSBoYXMgYmVlbiBjbGVhcmVkIGJ5IHRoZSBHQy4KICAgICAgICBfZGF0YVtpZHhdID0gX2RlbGV0ZWRFbnRyeTsKICAgICAgfQogICAgICBpZHggPSAoaWR4ICsgMSkgJiBtYXNrOwogICAgICB3cCA9IF9kYXRhW2lkeF07CiAgICB9CgogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAcGF0Y2gKICB2b2lkIG9wZXJhdG9yIFtdPShPYmplY3Qgb2JqZWN0LCBUIHZhbHVlKSB7CiAgICBfY2hlY2tUeXBlKG9iamVjdCk7CgogICAgdmFyIG1hc2sgPSBfc2l6ZSAtIDE7CiAgICB2YXIgaWR4ID0gb2JqZWN0Ll9pZGVudGl0eUhhc2hDb2RlICYgbWFzazsKICAgIHZhciBlbXB0eV9pZHggPSAtMTsKICAgIHZhciB3cCA9IF9kYXRhW2lkeF07CgogICAgd2hpbGUgKHdwICE9IG51bGwpIHsKICAgICAgaWYgKGlkZW50aWNhbCh3cC5rZXksIG9iamVjdCkpIHsKICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICAgICAgLy8gVXBkYXRlIHRoZSBhc3NvY2lhdGVkIHZhbHVlLgogICAgICAgICAgd3AudmFsdWUgPSB2YWx1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gTWFyayB0aGUgZW50cnkgYXMgZGVsZXRlZC4KICAgICAgICAgIF9kYXRhW2lkeF0gPSBfZGVsZXRlZEVudHJ5OwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0gZWxzZSBpZiAoKGVtcHR5X2lkeCA8IDApICYmIGlkZW50aWNhbCh3cCwgX2RlbGV0ZWRFbnRyeSkpIHsKICAgICAgICBlbXB0eV9pZHggPSBpZHg7IC8vIEluc2VydCBhdCB0aGlzIGxvY2F0aW9uIGlmIG5vdCBmb3VuZC4KICAgICAgfSBlbHNlIGlmICh3cC5rZXkgPT0gbnVsbCkgewogICAgICAgIC8vIFRoaXMgZW50cnkgaGFzIGJlZW4gY2xlYXJlZCBieSB0aGUgR0MuCiAgICAgICAgX2RhdGFbaWR4XSA9IF9kZWxldGVkRW50cnk7CiAgICAgICAgaWYgKGVtcHR5X2lkeCA8IDApIHsKICAgICAgICAgIGVtcHR5X2lkeCA9IGlkeDsgLy8gSW5zZXJ0IGF0IHRoaXMgbG9jYXRpb24gaWYgbm90IGZvdW5kLgogICAgICAgIH0KICAgICAgfQogICAgICBpZHggPSAoaWR4ICsgMSkgJiBtYXNrOwogICAgICB3cCA9IF9kYXRhW2lkeF07CiAgICB9CgogICAgaWYgKHZhbHVlID09IG51bGwpIHsKICAgICAgLy8gTm90IGVudGVyaW5nIGEgbnVsbCB2YWx1ZS4gV2UganVzdCBuZWVkZWQgdG8gbWFrZSBzdXJlIHRvIGNsZWFyIGFuCiAgICAgIC8vIGV4aXN0aW5nIHZhbHVlIGlmIGl0IGV4aXN0ZWQuCiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoZW1wdHlfaWR4ID49IDApIHsKICAgICAgLy8gV2Ugd2lsbCBiZSByZXVzaW5nIHRoZSBlbXB0eSBzbG90IGJlbG93LgogICAgICBfdXNlZC0tOwogICAgICBpZHggPSBlbXB0eV9pZHg7CiAgICB9CgogICAgaWYgKF91c2VkIDwgX2xpbWl0KSB7CiAgICAgIF9kYXRhW2lkeF0gPSBuZXcgX1dlYWtQcm9wZXJ0eShvYmplY3QsIHZhbHVlKTsKICAgICAgX3VzZWQrKzsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIEdyb3cvcmVhbGxvY2F0ZSBpZiB0b28gbWFueSBzbG90cyBoYXZlIGJlZW4gdXNlZC4KICAgIF9yZWhhc2goKTsKICAgIHRoaXNbb2JqZWN0XSA9IHZhbHVlOyAvLyBSZWN1cnNpdmVseSBhZGQgdGhlIHZhbHVlLgogIH0KCiAgX3JlaGFzaCgpIHsKICAgIC8vIERldGVybWluZSB0aGUgcG9wdWxhdGlvbiBjb3VudCBvZiB0aGUgbWFwIHRvIGFsbG9jYXRlIGFuIGFwcHJvcHJpYXRlbHkKICAgIC8vIHNpemVkIG1hcCBiZWxvdy4KICAgIHZhciBjb3VudCA9IDA7CiAgICB2YXIgb2xkX2RhdGEgPSBfZGF0YTsKICAgIHZhciBsZW4gPSBvbGRfZGF0YS5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIHZhciBlbnRyeSA9IG9sZF9kYXRhW2ldOwogICAgICBpZiAoKGVudHJ5ICE9IG51bGwpICYmIChlbnRyeS5rZXkgIT0gbnVsbCkpIHsKICAgICAgICAvLyBPbmx5IGNvdW50IG5vbi1jbGVhcmVkIGVudHJpZXMuCiAgICAgICAgY291bnQrKzsKICAgICAgfQogICAgfQoKICAgIHZhciBuZXdfc2l6ZSA9IF9zaXplOwogICAgaWYgKGNvdW50IDw9IChuZXdfc2l6ZSA+PiAyKSkgewogICAgICBuZXdfc2l6ZSA9IG5ld19zaXplID4+IDE7CiAgICB9IGVsc2UgaWYgKGNvdW50ID4gKG5ld19zaXplID4+IDEpKSB7CiAgICAgIG5ld19zaXplID0gbmV3X3NpemUgPDwgMTsKICAgIH0KICAgIG5ld19zaXplID0gKG5ld19zaXplIDwgX21pblNpemUpID8gX21pblNpemUgOiBuZXdfc2l6ZTsKCiAgICAvLyBSZXNldCB0aGUgbWFwcGluZ3MgdG8gZW1wdHkgc28gdGhhdCB3ZSBjYW4ganVzdCBhZGQgdGhlIGV4aXN0aW5nCiAgICAvLyB2YWxpZCBlbnRyaWVzLgogICAgX2RhdGEgPSBuZXcgTGlzdChuZXdfc2l6ZSk7CiAgICBfdXNlZCA9IDA7CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvbGRfZGF0YS5sZW5ndGg7IGkrKykgewogICAgICB2YXIgZW50cnkgPSBvbGRfZGF0YVtpXTsKICAgICAgaWYgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgZW50cnkua2V5IGlzIG5vdCBjbGVhcmVkIGJldHdlZW4gY2hlY2tpbmcgZm9yIGl0IGFuZAogICAgICAgIC8vIGluc2VydGluZyBpdCBpbnRvIHRoZSBuZXcgdGFibGUuCiAgICAgICAgdmFyIHZhbCA9IGVudHJ5LnZhbHVlOwogICAgICAgIHZhciBrZXkgPSBlbnRyeS5rZXk7CiAgICAgICAgaWYgKGtleSAhPSBudWxsKSB7CiAgICAgICAgICB0aGlzW2tleV0gPSB2YWw7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBzdGF0aWMgX2NoZWNrVHlwZShvYmplY3QpIHsKICAgIGlmICgob2JqZWN0ID09IG51bGwpIHx8CiAgICAgICAgKG9iamVjdCBpcyBib29sKSB8fAogICAgICAgIChvYmplY3QgaXMgbnVtKSB8fAogICAgICAgIChvYmplY3QgaXMgU3RyaW5nKSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZShvYmplY3QsCiAgICAgICAgICAiRXhwYW5kb3MgYXJlIG5vdCBhbGxvd2VkIG9uIHN0cmluZ3MsIG51bWJlcnMsIGJvb2xlYW5zIG9yIG51bGwiKTsKICAgIH0KICB9CgogIGdldCBfc2l6ZSA9PiBfZGF0YS5sZW5ndGg7CiAgZ2V0IF9saW1pdCA9PiAoMyAqIChfc2l6ZSB+LyA0KSk7CgogIExpc3QgX2RhdGE7CiAgaW50IF91c2VkOyAvLyBOdW1iZXIgb2YgdXNlZCAoYWN0aXZlIGFuZCBkZWxldGVkKSBzbG90cy4KfQqAmQBOTjwBHgEHEwkZFSQTAR0+AQkhGAEaLxkBGScZIzIkCB4XBgERBAEJLhgBGi8YGQEZJx0qHBEoJgoQREIjMiQdRAoIHhcGARlMJw4GARoyDxcGARo1Dw4GATkPOAQBDk4YExofJB80KxEIBgEaJCAqIAY8AUgWIA8BMB8bUCwfHRsbCggGBAEeHBwbHixNBgQBHSQBDjsCASJkYXJ0OmNvcmUtcGF0Y2gvZXhwYW5kb19wYXRjaC5kYXJ0Lm9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb3JlL2Z1bmN0aW9uLmRhcnSJoS8vIENvcHlyaWdodCAoYykgMjAxMSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIGZ1bmN0aW9uIHR5cGVzLgogKgogKiBBIGZ1bmN0aW9uIHZhbHVlLCBvciBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHdpdGggYSAiY2FsbCIgbWV0aG9kLCBpcyBhCiAqIHN1YnR5cGUgb2YgYSBmdW5jdGlvbiB0eXBlLCBhbmQgYXMgc3VjaCwgYSBzdWJ0eXBlIG9mIFtGdW5jdGlvbl0uCiAqLwphYnN0cmFjdCBjbGFzcyBGdW5jdGlvbiB7CiAgLyoqCiAgICogRHluYW1pY2FsbHkgY2FsbCBbZnVuY3Rpb25dIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudHMuCiAgICoKICAgKiBBY3RzIHRoZSBzYW1lIGFzIGNhbGxpbmcgZnVuY3Rpb24gd2l0aCBwb3NpdGlvbmFsIGFyZ3VtZW50cwogICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGVsZW1lbnRzIG9mIFtwb3NpdGlvbmFsQXJndW1lbnRzXSBhbmQKICAgKiBuYW1lZCBhcmd1bWVudHMgY29ycmVzcG9uZGluZyB0byB0aGUgZWxlbWVudHMgb2YgW25hbWVkQXJndW1lbnRzXS4KICAgKgogICAqIFRoaXMgaW5jbHVkZXMgZ2l2aW5nIHRoZSBzYW1lIGVycm9ycyBpZiBbZnVuY3Rpb25dIGlzbid0IGNhbGxhYmxlIG9yCiAgICogaWYgaXQgZXhwZWN0cyBkaWZmZXJlbnQgcGFyYW1ldGVycy4KICAgKgogICAqIEV4YW1wbGU6CiAgICogYGBgCiAgICogRnVuY3Rpb24uYXBwbHkoZm9vLCBbMSwyLDNdLCB7I2Y6IDQsICNnOiA1fSk7CiAgICogYGBgCiAgICoKICAgKiBnaXZlcyBleGFjdGx5IHRoZSBzYW1lIHJlc3VsdCBhcwogICAqIGBgYAogICAqIGZvbygxLCAyLCAzLCBmOiA0LCBnOiA1KS4KICAgKiBgYGAKICAgKgogICAqIElmIFtwb3NpdGlvbmFsQXJndW1lbnRzXSBpcyBudWxsLCBpdCdzIGNvbnNpZGVyZWQgYW4gZW1wdHkgbGlzdC4KICAgKiBJZiBbbmFtZWRBcmd1bWVudHNdIGlzIG9taXR0ZWQgb3IgbnVsbCwgaXQgaXMgY29uc2lkZXJlZCBhbiBlbXB0eSBtYXAuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIGFwcGx5KEZ1bmN0aW9uIGZ1bmN0aW9uLCBMaXN0IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIFtNYXA8U3ltYm9sLCBkeW5hbWljPiBuYW1lZEFyZ3VtZW50c10pOwoKICAvKioKICAgKiBSZXR1cm5zIGEgaGFzaCBjb2RlIHZhbHVlIHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIGBvcGVyYXRvcj09YC4KICAgKi8KICBpbnQgZ2V0IGhhc2hDb2RlOwoKICAvKioKICAgKiBUZXN0IHdoZXRoZXIgYW5vdGhlciBvYmplY3QgaXMgZXF1YWwgdG8gdGhpcyBmdW5jdGlvbi4KICAgKgogICAqIFN5c3RlbS1jcmVhdGVkIGZ1bmN0aW9uIG9iamVjdHMgYXJlIG9ubHkgZXF1YWwgdG8gb3RoZXIgZnVuY3Rpb25zLgogICAqCiAgICogVHdvIGZ1bmN0aW9uIG9iamVjdHMgYXJlIGtub3duIHRvIHJlcHJlc2VudCB0aGUgc2FtZSBmdW5jdGlvbiBpZgogICAqCiAgICogLSBJdCBpcyB0aGUgc2FtZSBvYmplY3QuIFN0YXRpYyBhbmQgdG9wLWxldmVsIGZ1bmN0aW9ucyBhcmUgY29tcGlsZSB0aW1lCiAgICogICBjb25zdGFudHMgd2hlbiB1c2VkIGFzIHZhbHVlcywgc28gcmVmZXJyaW5nIHRvIHRoZSBzYW1lIGZ1bmN0aW9uIHR3aWNlCiAgICogICBhbHdheXMgZ2l2ZSB0aGUgc2FtZSBvYmplY3QsCiAgICogLSBvciBpZiB0aGV5IHJlZmVyIHRvIHRoZSBzYW1lIG1lbWJlciBtZXRob2QgZXh0cmFjdGVkIGZyb20gdGhlIHNhbWUgb2JqZWN0LgogICAqICAgRXh0cmFjdGluZyBhIG1lbWJlciBtZXRob2QgYXMgYSBmdW5jdGlvbiB2YWx1ZSB0d2ljZSBnaXZlcyBlcXVhbCwgYnV0CiAgICogICBub3QgbmVjZXNzYXJpbHkgaWRlbnRpY2FsLCBmdW5jdGlvbiB2YWx1ZXMuCiAgICoKICAgKiBGdW5jdGlvbiBleHByZXNzaW9ucyBuZXZlciBnaXZlIHJpc2UgdG8gZXF1YWwgZnVuY3Rpb24gb2JqZWN0cy4gRWFjaCB0aW1lCiAgICogYSBmdW5jdGlvbiBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCwgaXQgY3JlYXRlcyBhIG5ldyBjbG9zdXJlIHZhbHVlIHRoYXQKICAgKiBpcyBub3Qga25vd24gdG8gYmUgZXF1YWwgdG8gb3RoZXIgY2xvc3VyZXMgY3JlYXRlZCBieSB0aGUgc2FtZSBleHByZXNzaW9uLgogICAqCiAgICogQ2xhc3NlcyBpbXBsZW1lbnRpbmcgYEZ1bmN0aW9uYCBieSBoYXZpbmcgYSBgY2FsbGAgbWV0aG9kIHNob3VsZCBoYXZlIHRoZWlyCiAgICogb3duIGBvcGVyYXRvcj09YCBhbmQgYGhhc2hDb2RlYCBkZXBlbmRpbmcgb24gdGhlIG9iamVjdC4KICAgKi8KICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcik7Cn0KRQBOTjwBEwEEKgNKRQQaBj8FQUBIBUopBQ4JMwkFJgkfCQVGTAZFLgEGRQYUAQY8BUgFRgVOTiRSTTMFT01QBVE+BiICARdkYXJ0OmNvcmUvZnVuY3Rpb24uZGFydDNvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL2Z1bmN0aW9uX3BhdGNoLmRhcnSFOS8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIEZ1bmN0aW9uIHsKICAvLyBUT0RPKHJlZ2lzKTogUGFzcyB0eXBlIGFyZ3VtZW50cyB0byBnZW5lcmljIGZ1bmN0aW9ucy4gV2FpdCBmb3IgQVBJIHNwZWMuCiAgc3RhdGljIF9hcHBseShMaXN0IGFyZ3VtZW50cywgTGlzdCBuYW1lcykgbmF0aXZlICJGdW5jdGlvbl9hcHBseSI7CgogIEBwYXRjaAogIHN0YXRpYyBhcHBseShGdW5jdGlvbiBmdW5jdGlvbiwgTGlzdCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBbTWFwPFN5bWJvbCwgZHluYW1pYz4gbmFtZWRBcmd1bWVudHNdKSB7CiAgICBpbnQgbnVtUG9zaXRpb25hbEFyZ3VtZW50cyA9IDEgKyAvLyBGdW5jdGlvbiBpcyBmaXJzdCBpbXBsaWNpdCBhcmd1bWVudC4KICAgICAgICAocG9zaXRpb25hbEFyZ3VtZW50cyAhPSBudWxsID8gcG9zaXRpb25hbEFyZ3VtZW50cy5sZW5ndGggOiAwKTsKICAgIGludCBudW1OYW1lZEFyZ3VtZW50cyA9IG5hbWVkQXJndW1lbnRzICE9IG51bGwgPyBuYW1lZEFyZ3VtZW50cy5sZW5ndGggOiAwOwogICAgaW50IG51bUFyZ3VtZW50cyA9IG51bVBvc2l0aW9uYWxBcmd1bWVudHMgKyBudW1OYW1lZEFyZ3VtZW50czsKICAgIExpc3QgYXJndW1lbnRzID0gbmV3IExpc3QobnVtQXJndW1lbnRzKTsKICAgIGFyZ3VtZW50c1swXSA9IGZ1bmN0aW9uOwogICAgYXJndW1lbnRzLnNldFJhbmdlKDEsIG51bVBvc2l0aW9uYWxBcmd1bWVudHMsIHBvc2l0aW9uYWxBcmd1bWVudHMpOwogICAgTGlzdCBuYW1lcyA9IG5ldyBMaXN0KG51bU5hbWVkQXJndW1lbnRzKTsKICAgIGludCBhcmd1bWVudEluZGV4ID0gbnVtUG9zaXRpb25hbEFyZ3VtZW50czsKICAgIGludCBuYW1lSW5kZXggPSAwOwogICAgaWYgKG51bU5hbWVkQXJndW1lbnRzID4gMCkgewogICAgICBuYW1lZEFyZ3VtZW50cy5mb3JFYWNoKChuYW1lLCB2YWx1ZSkgewogICAgICAgIGFyZ3VtZW50c1thcmd1bWVudEluZGV4KytdID0gdmFsdWU7CiAgICAgICAgbmFtZXNbbmFtZUluZGV4KytdID0gaW50ZXJuYWwuU3ltYm9sLmdldE5hbWUobmFtZSk7CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIF9hcHBseShhcmd1bWVudHMsIG5hbWVzKTsKICB9Cn0KIwBOTjwBHgEHEU9FAQk8L01IUEMtHUguMBchLSw8CgYlBAIBI2RhcnQ6Y29yZS1wYXRjaC9mdW5jdGlvbl9wYXRjaC5kYXJ0KW9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb3JlL2ludC5kYXJ0risvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogQW4gaW50ZWdlciBudW1iZXIuCiAqCiAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIGBpbnRgIGlzIDY0LWJpdCB0d28ncyBjb21wbGVtZW50IGludGVnZXJzCiAqIHdpdGggb3BlcmF0aW9ucyB0aGF0IHdyYXAgdG8gdGhhdCByYW5nZSBvbiBvdmVyZmxvdy4KICoKICogKipOb3RlOioqIFdoZW4gY29tcGlsaW5nIHRvIEphdmFTY3JpcHQsIGludGVnZXJzIGFyZSByZXN0cmljdGVkIHRvIHZhbHVlcwogKiB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBleGFjdGx5IGJ5IGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgdmFsdWVzLgogKiBUaGUgYXZhaWxhYmxlIGludGVnZXIgdmFsdWVzIGluY2x1ZGUgYWxsIGludGVnZXJzIGJldHdlZW4gLTJeNTMgYW5kIDJeNTMsCiAqIGFuZCBzb21lIGludGVnZXJzIHdpdGggbGFyZ2VyIG1hZ25pdHVkZS4gVGhhdCBpbmNsdWRlcyBzb21lIGludGVnZXJzIGxhcmdlcgogKiB0aGFuIDJeNjMuCiAqIFRoZSBiZWhhdmlvciBvZiB0aGUgb3BlcmF0b3JzIGFuZCBtZXRob2RzIGluIHRoZSBbaW50XQogKiBjbGFzcyB0aGVyZWZvcmUgc29tZXRpbWVzIGRpZmZlcnMgYmV0d2VlbiB0aGUgRGFydCBWTSBhbmQgRGFydCBjb2RlCiAqIGNvbXBpbGVkIHRvIEphdmFTY3JpcHQuIEZvciBleGFtcGxlLCB0aGUgYml0d2lzZSBvcGVyYXRvcnMgdHJ1bmNhdGUgdGhlaXIKICogb3BlcmFuZHMgdG8gMzItYml0IGludGVnZXJzIHdoZW4gY29tcGlsZWQgdG8gSmF2YVNjcmlwdC4KICoKICogQ2xhc3NlcyBjYW5ub3QgZXh0ZW5kLCBpbXBsZW1lbnQsIG9yIG1peCBpbiBgaW50YC4KICovCmFic3RyYWN0IGNsYXNzIGludCBleHRlbmRzIG51bSB7CiAgLyoqCiAgICogUmV0dXJucyB0aGUgaW50ZWdlciB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZW52aXJvbm1lbnQgZGVjbGFyYXRpb24gW25hbWVdLgogICAqCiAgICogVGhlIHJlc3VsdCBpcyB0aGUgc2FtZSBhcyB3b3VsZCBiZSByZXR1cm5lZCBieToKICAgKiBgYGAKICAgKiBpbnQudHJ5UGFyc2UoY29uc3QgU3RyaW5nLmZyb21FbnZpcm9ubWVudChuYW1lLCBkZWZhdWx0VmFsdWU6ICIiKSkKICAgKiAgICAgPz8gZGVmYXVsdFZhbHVlCiAgICogYGBgCiAgICogRXhhbXBsZToKICAgKiBgYGAKICAgKiBjb25zdCBpbnQuZnJvbUVudmlyb25tZW50KCJkZWZhdWx0UG9ydCIsIGRlZmF1bHRWYWx1ZTogODApCiAgICogYGBgCiAgICovCiAgLy8gVGhlIC5mcm9tRW52aXJvbm1lbnQoKSBjb25zdHJ1Y3RvcnMgYXJlIHNwZWNpYWwgaW4gdGhhdCB3ZSBkbyBub3Qgd2FudAogIC8vIHVzZXJzIHRvIGNhbGwgdGhlbSB1c2luZyAibmV3Ii4gV2UgcHJvaGliaXQgdGhhdCBieSBnaXZpbmcgdGhlbSBib2RpZXMKICAvLyB0aGF0IHRocm93LCBldmVuIHRob3VnaCBjb25zdCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBhbGxvd2VkIHRvIGhhdmUgYm9kaWVzLgogIC8vIERpc2FibGUgdGhvc2Ugc3RhdGljIGVycm9ycy4KICAvL2lnbm9yZTogY29uc3RfY29uc3RydWN0b3Jfd2l0aF9ib2R5CiAgLy9pZ25vcmU6IGNvbnN0X2ZhY3RvcnkKICBleHRlcm5hbCBjb25zdCBmYWN0b3J5IGludC5mcm9tRW52aXJvbm1lbnQoU3RyaW5nIG5hbWUsIHtpbnQgZGVmYXVsdFZhbHVlfSk7CgogIC8qKgogICAqIEJpdC13aXNlIGFuZCBvcGVyYXRvci4KICAgKgogICAqIFRyZWF0aW5nIGJvdGggYHRoaXNgIGFuZCBbb3RoZXJdIGFzIHN1ZmZpY2llbnRseSBsYXJnZSB0d28ncyBjb21wb25lbnQKICAgKiBpbnRlZ2VycywgdGhlIHJlc3VsdCBpcyBhIG51bWJlciB3aXRoIG9ubHkgdGhlIGJpdHMgc2V0IHRoYXQgYXJlIHNldCBpbgogICAqIGJvdGggYHRoaXNgIGFuZCBbb3RoZXJdCiAgICoKICAgKiBPZiBib3RoIG9wZXJhbmRzIGFyZSBuZWdhdGl2ZSwgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgb3RoZXJ3aXNlCiAgICogdGhlIHJlc3VsdCBpcyBub24tbmVnYXRpdmUuCiAgICovCiAgaW50IG9wZXJhdG9yICYoaW50IG90aGVyKTsKCiAgLyoqCiAgICogQml0LXdpc2Ugb3Igb3BlcmF0b3IuCiAgICoKICAgKiBUcmVhdGluZyBib3RoIGB0aGlzYCBhbmQgW290aGVyXSBhcyBzdWZmaWNpZW50bHkgbGFyZ2UgdHdvJ3MgY29tcG9uZW50CiAgICogaW50ZWdlcnMsIHRoZSByZXN1bHQgaXMgYSBudW1iZXIgd2l0aCB0aGUgYml0cyBzZXQgdGhhdCBhcmUgc2V0IGluIGVpdGhlcgogICAqIG9mIGB0aGlzYCBhbmQgW290aGVyXQogICAqCiAgICogSWYgYm90aCBvcGVyYW5kcyBhcmUgbm9uLW5lZ2F0aXZlLCB0aGUgcmVzdWx0IGlzIG5vbi1uZWdhdGl2ZSwKICAgKiBvdGhlcndpc2UgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZS4KICAgKi8KICBpbnQgb3BlcmF0b3IgfChpbnQgb3RoZXIpOwoKICAvKioKICAgKiBCaXQtd2lzZSBleGNsdXNpdmUtb3Igb3BlcmF0b3IuCiAgICoKICAgKiBUcmVhdGluZyBib3RoIGB0aGlzYCBhbmQgW290aGVyXSBhcyBzdWZmaWNpZW50bHkgbGFyZ2UgdHdvJ3MgY29tcG9uZW50CiAgICogaW50ZWdlcnMsIHRoZSByZXN1bHQgaXMgYSBudW1iZXIgd2l0aCB0aGUgYml0cyBzZXQgdGhhdCBhcmUgc2V0IGluIG9uZSwKICAgKiBidXQgbm90IGJvdGgsIG9mIGB0aGlzYCBhbmQgW290aGVyXQogICAqCiAgICogSWYgdGhlIG9wZXJhbmRzIGhhdmUgdGhlIHNhbWUgc2lnbiwgdGhlIHJlc3VsdCBpcyBub24tbmVnYXRpdmUsCiAgICogb3RoZXJ3aXNlIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUuCiAgICovCiAgaW50IG9wZXJhdG9yIF4oaW50IG90aGVyKTsKCiAgLyoqCiAgICogVGhlIGJpdC13aXNlIG5lZ2F0ZSBvcGVyYXRvci4KICAgKgogICAqIFRyZWF0aW5nIGB0aGlzYCBhcyBhIHN1ZmZpY2llbnRseSBsYXJnZSB0d28ncyBjb21wb25lbnQgaW50ZWdlciwKICAgKiB0aGUgcmVzdWx0IGlzIGEgbnVtYmVyIHdpdGggdGhlIG9wcG9zaXRlIGJpdHMgc2V0LgogICAqCiAgICogVGhpcyBtYXBzIGFueSBpbnRlZ2VyIGB4YCB0byBgLXggLSAxYC4KICAgKi8KICBpbnQgb3BlcmF0b3IgfigpOwoKICAvKioKICAgKiBTaGlmdCB0aGUgYml0cyBvZiB0aGlzIGludGVnZXIgdG8gdGhlIGxlZnQgYnkgW3NoaWZ0QW1vdW50XS4KICAgKgogICAqIFNoaWZ0aW5nIHRvIHRoZSBsZWZ0IG1ha2VzIHRoZSBudW1iZXIgbGFyZ2VyLCBlZmZlY3RpdmVseSBtdWx0aXBseWluZwogICAqIHRoZSBudW1iZXIgYnkgYHBvdygyLCBzaGlmdEluZGV4KWAuCiAgICoKICAgKiBUaGVyZSBpcyBubyBsaW1pdCBvbiB0aGUgc2l6ZSBvZiB0aGUgcmVzdWx0LiBJdCBtYXkgYmUgcmVsZXZhbnQgdG8KICAgKiBsaW1pdCBpbnRlcm1lZGlhdGUgdmFsdWVzIGJ5IHVzaW5nIHRoZSAiYW5kIiBvcGVyYXRvciB3aXRoIGEgc3VpdGFibGUKICAgKiBtYXNrLgogICAqCiAgICogSXQgaXMgYW4gZXJyb3IgaWYgW3NoaWZ0QW1vdW50XSBpcyBuZWdhdGl2ZS4KICAgKi8KICBpbnQgb3BlcmF0b3IgPDwoaW50IHNoaWZ0QW1vdW50KTsKCiAgLyoqCiAgICogU2hpZnQgdGhlIGJpdHMgb2YgdGhpcyBpbnRlZ2VyIHRvIHRoZSByaWdodCBieSBbc2hpZnRBbW91bnRdLgogICAqCiAgICogU2hpZnRpbmcgdG8gdGhlIHJpZ2h0IG1ha2VzIHRoZSBudW1iZXIgc21hbGxlciBhbmQgZHJvcHMgdGhlIGxlYXN0CiAgICogc2lnbmlmaWNhbnQgYml0cywgZWZmZWN0aXZlbHkgZG9pbmcgYW4gaW50ZWdlciBkaXZpc2lvbiBieQogICAqYHBvdygyLCBzaGlmdEluZGV4KWAuCiAgICoKICAgKiBJdCBpcyBhbiBlcnJvciBpZiBbc2hpZnRBbW91bnRdIGlzIG5lZ2F0aXZlLgogICAqLwogIGludCBvcGVyYXRvciA+PihpbnQgc2hpZnRBbW91bnQpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoaXMgaW50ZWdlciB0byB0aGUgcG93ZXIgb2YgW2V4cG9uZW50XSBtb2R1bG8gW21vZHVsdXNdLgogICAqCiAgICogVGhlIFtleHBvbmVudF0gbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kIFttb2R1bHVzXSBtdXN0IGJlCiAgICogcG9zaXRpdmUuCiAgICovCiAgaW50IG1vZFBvdyhpbnQgZXhwb25lbnQsIGludCBtb2R1bHVzKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbW9kdWxhciBtdWx0aXBsaWNhdGl2ZSBpbnZlcnNlIG9mIHRoaXMgaW50ZWdlcgogICAqIG1vZHVsbyBbbW9kdWx1c10uCiAgICoKICAgKiBUaGUgW21vZHVsdXNdIG11c3QgYmUgcG9zaXRpdmUuCiAgICoKICAgKiBJdCBpcyBhbiBlcnJvciBpZiBubyBtb2R1bGFyIGludmVyc2UgZXhpc3RzLgogICAqLwogIGludCBtb2RJbnZlcnNlKGludCBtb2R1bHVzKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3Igb2YgdGhpcyBpbnRlZ2VyIGFuZCBbb3RoZXJdLgogICAqCiAgICogSWYgZWl0aGVyIG51bWJlciBpcyBub24temVybywgdGhlIHJlc3VsdCBpcyB0aGUgbnVtZXJpY2FsbHkgZ3JlYXRlc3QKICAgKiBpbnRlZ2VyIGRpdmlkaW5nIGJvdGggYHRoaXNgIGFuZCBgb3RoZXJgLgogICAqCiAgICogVGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIGlzIGluZGVwZW5kZW50IG9mIHRoZSBvcmRlciwKICAgKiBzbyBgeC5nY2QoeSlgIGlzICBhbHdheXMgdGhlIHNhbWUgYXMgYHkuZ2NkKHgpYC4KICAgKgogICAqIEZvciBhbnkgaW50ZWdlciBgeGAsIGB4LmdjZCh4KWAgaXMgYHguYWJzKClgLgogICAqCiAgICogSWYgYm90aCBgdGhpc2AgYW5kIGBvdGhlcmAgaXMgemVybywgdGhlIHJlc3VsdCBpcyBhbHNvIHplcm8uCiAgICovCiAgaW50IGdjZChpbnQgb3RoZXIpOwoKICAvKiogUmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoaXMgaW50ZWdlciBpcyBldmVuLiAqLwogIGJvb2wgZ2V0IGlzRXZlbjsKCiAgLyoqIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGlzIGludGVnZXIgaXMgb2RkLiAqLwogIGJvb2wgZ2V0IGlzT2RkOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBtaW5pbXVtIG51bWJlciBvZiBiaXRzIHJlcXVpcmVkIHRvIHN0b3JlIHRoaXMgaW50ZWdlci4KICAgKgogICAqIFRoZSBudW1iZXIgb2YgYml0cyBleGNsdWRlcyB0aGUgc2lnbiBiaXQsIHdoaWNoIGdpdmVzIHRoZSBuYXR1cmFsIGxlbmd0aAogICAqIGZvciBub24tbmVnYXRpdmUgKHVuc2lnbmVkKSB2YWx1ZXMuICBOZWdhdGl2ZSB2YWx1ZXMgYXJlIGNvbXBsZW1lbnRlZCB0bwogICAqIHJldHVybiB0aGUgYml0IHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBiaXQgdGhhdCBkaWZmZXJzIGZyb20gdGhlIHNpZ24gYml0LgogICAqCiAgICogVG8gZmluZCB0aGUgbnVtYmVyIG9mIGJpdHMgbmVlZGVkIHRvIHN0b3JlIHRoZSB2YWx1ZSBhcyBhIHNpZ25lZCB2YWx1ZSwKICAgKiBhZGQgb25lLCBpLmUuIHVzZSBgeC5iaXRMZW5ndGggKyAxYC4KICAgKiBgYGAKICAgKiB4LmJpdExlbmd0aCA9PSAoLXgtMSkuYml0TGVuZ3RoCiAgICoKICAgKiAzLmJpdExlbmd0aCA9PSAyOyAgICAgLy8gMDAwMDAwMTEKICAgKiAyLmJpdExlbmd0aCA9PSAyOyAgICAgLy8gMDAwMDAwMTAKICAgKiAxLmJpdExlbmd0aCA9PSAxOyAgICAgLy8gMDAwMDAwMDEKICAgKiAwLmJpdExlbmd0aCA9PSAwOyAgICAgLy8gMDAwMDAwMDAKICAgKiAoLTEpLmJpdExlbmd0aCA9PSAwOyAgLy8gMTExMTExMTEKICAgKiAoLTIpLmJpdExlbmd0aCA9PSAxOyAgLy8gMTExMTExMTAKICAgKiAoLTMpLmJpdExlbmd0aCA9PSAyOyAgLy8gMTExMTExMDEKICAgKiAoLTQpLmJpdExlbmd0aCA9PSAyOyAgLy8gMTExMTExMDAKICAgKiBgYGAKICAgKi8KICBpbnQgZ2V0IGJpdExlbmd0aDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgW3dpZHRoXSBiaXRzIG9mIHRoaXMgaW50ZWdlciBhcyBhCiAgICogbm9uLW5lZ2F0aXZlIG51bWJlciAoaS5lLiB1bnNpZ25lZCByZXByZXNlbnRhdGlvbikuICBUaGUgcmV0dXJuZWQgdmFsdWUgaGFzCiAgICogemVyb3MgaW4gYWxsIGJpdCBwb3NpdGlvbnMgaGlnaGVyIHRoYW4gW3dpZHRoXS4KICAgKiBgYGAKICAgKiAoLTEpLnRvVW5zaWduZWQoNSkgPT0gMzEgICAvLyAxMTExMTExMSAgLT4gIDAwMDExMTExCiAgICogYGBgCiAgICogVGhpcyBvcGVyYXRpb24gY2FuIGJlIHVzZWQgdG8gc2ltdWxhdGUgYXJpdGhtZXRpYyBmcm9tIGxvdyBsZXZlbCBsYW5ndWFnZXMuCiAgICogRm9yIGV4YW1wbGUsIHRvIGluY3JlbWVudCBhbiA4IGJpdCBxdWFudGl0eToKICAgKiBgYGAKICAgKiBxID0gKHEgKyAxKS50b1Vuc2lnbmVkKDgpOwogICAqIGBgYAogICAqIGBxYCB3aWxsIGNvdW50IGZyb20gYDBgIHVwIHRvIGAyNTVgIGFuZCB0aGVuIHdyYXAgYXJvdW5kIHRvIGAwYC4KICAgKgogICAqIElmIHRoZSBpbnB1dCBmaXRzIGluIFt3aWR0aF0gYml0cyB3aXRob3V0IHRydW5jYXRpb24sIHRoZSByZXN1bHQgaXMgdGhlCiAgICogc2FtZSBhcyB0aGUgaW5wdXQuICBUaGUgbWluaW11bSB3aWR0aCBuZWVkZWQgdG8gYXZvaWQgdHJ1bmNhdGlvbiBvZiBgeGAgaXMKICAgKiBnaXZlbiBieSBgeC5iaXRMZW5ndGhgLCBpLmUuCiAgICogYGBgCiAgICogeCA9PSB4LnRvVW5zaWduZWQoeC5iaXRMZW5ndGgpOwogICAqIGBgYAogICAqLwogIGludCB0b1Vuc2lnbmVkKGludCB3aWR0aCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGxlYXN0IHNpZ25pZmljYW50IFt3aWR0aF0gYml0cyBvZiB0aGlzIGludGVnZXIsIGV4dGVuZGluZyB0aGUKICAgKiBoaWdoZXN0IHJldGFpbmVkIGJpdCB0byB0aGUgc2lnbi4gIFRoaXMgaXMgdGhlIHNhbWUgYXMgdHJ1bmNhdGluZyB0aGUgdmFsdWUKICAgKiB0byBmaXQgaW4gW3dpZHRoXSBiaXRzIHVzaW5nIGFuIHNpZ25lZCAyLXMgY29tcGxlbWVudCByZXByZXNlbnRhdGlvbi4gIFRoZQogICAqIHJldHVybmVkIHZhbHVlIGhhcyB0aGUgc2FtZSBiaXQgdmFsdWUgaW4gYWxsIHBvc2l0aW9ucyBoaWdoZXIgdGhhbiBbd2lkdGhdLgogICAqCiAgICogYGBgCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYtLXNpZ24gYml0LVYKICAgKiAxNi50b1NpZ25lZCg1KSA9PSAtMTYgICAvLyAgMDAwMTAwMDAgLT4gMTExMTAwMDAKICAgKiAyMzkudG9TaWduZWQoNSkgPT0gMTUgICAvLyAgMTExMDExMTEgLT4gMDAwMDExMTEKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgXgogICAqIGBgYAogICAqIFRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1c2VkIHRvIHNpbXVsYXRlIGFyaXRobWV0aWMgZnJvbSBsb3cgbGV2ZWwgbGFuZ3VhZ2VzLgogICAqIEZvciBleGFtcGxlLCB0byBpbmNyZW1lbnQgYW4gOCBiaXQgc2lnbmVkIHF1YW50aXR5OgogICAqIGBgYAogICAqIHEgPSAocSArIDEpLnRvU2lnbmVkKDgpOwogICAqIGBgYAogICAqIGBxYCB3aWxsIGNvdW50IGZyb20gYDBgIHVwIHRvIGAxMjdgLCB3cmFwIHRvIGAtMTI4YCBhbmQgY291bnQgYmFjayB1cCB0bwogICAqIGAxMjdgLgogICAqCiAgICogSWYgdGhlIGlucHV0IHZhbHVlIGZpdHMgaW4gW3dpZHRoXSBiaXRzIHdpdGhvdXQgdHJ1bmNhdGlvbiwgdGhlIHJlc3VsdCBpcwogICAqIHRoZSBzYW1lIGFzIHRoZSBpbnB1dC4gIFRoZSBtaW5pbXVtIHdpZHRoIG5lZWRlZCB0byBhdm9pZCB0cnVuY2F0aW9uIG9mIGB4YAogICAqIGlzIGB4LmJpdExlbmd0aCArIDFgLCBpLmUuCiAgICogYGBgCiAgICogeCA9PSB4LnRvU2lnbmVkKHguYml0TGVuZ3RoICsgMSk7CiAgICogYGBgCiAgICovCiAgaW50IHRvU2lnbmVkKGludCB3aWR0aCk7CgogIC8qKgogICAqIFJldHVybiB0aGUgbmVnYXRpdmUgdmFsdWUgb2YgdGhpcyBpbnRlZ2VyLgogICAqCiAgICogVGhlIHJlc3VsdCBvZiBuZWdhdGluZyBhbiBpbnRlZ2VyIGFsd2F5cyBoYXMgdGhlIG9wcG9zaXRlIHNpZ24sIGV4Y2VwdAogICAqIGZvciB6ZXJvLCB3aGljaCBpcyBpdHMgb3duIG5lZ2F0aW9uLgogICAqLwogIGludCBvcGVyYXRvciAtKCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoaXMgaW50ZWdlci4KICAgKgogICAqIEZvciBhbnkgaW50ZWdlciBgeGAsIHRoZSByZXN1bHQgaXMgdGhlIHNhbWUgYXMgYHggPCAwID8gLXggOiB4YC4KICAgKi8KICBpbnQgYWJzKCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHNpZ24gb2YgdGhpcyBpbnRlZ2VyLgogICAqCiAgICogUmV0dXJucyAwIGZvciB6ZXJvLCAtMSBmb3IgdmFsdWVzIGxlc3MgdGhhbiB6ZXJvIGFuZAogICAqICsxIGZvciB2YWx1ZXMgZ3JlYXRlciB0aGFuIHplcm8uCiAgICovCiAgaW50IGdldCBzaWduOwoKICAvKiogUmV0dXJucyBgdGhpc2AuICovCiAgaW50IHJvdW5kKCk7CgogIC8qKiBSZXR1cm5zIGB0aGlzYC4gKi8KICBpbnQgZmxvb3IoKTsKCiAgLyoqIFJldHVybnMgYHRoaXNgLiAqLwogIGludCBjZWlsKCk7CgogIC8qKiBSZXR1cm5zIGB0aGlzYC4gKi8KICBpbnQgdHJ1bmNhdGUoKTsKCiAgLyoqIFJldHVybnMgYHRoaXMudG9Eb3VibGUoKWAuICovCiAgZG91YmxlIHJvdW5kVG9Eb3VibGUoKTsKCiAgLyoqIFJldHVybnMgYHRoaXMudG9Eb3VibGUoKWAuICovCiAgZG91YmxlIGZsb29yVG9Eb3VibGUoKTsKCiAgLyoqIFJldHVybnMgYHRoaXMudG9Eb3VibGUoKWAuICovCiAgZG91YmxlIGNlaWxUb0RvdWJsZSgpOwoKICAvKiogUmV0dXJucyBgdGhpcy50b0RvdWJsZSgpYC4gKi8KICBkb3VibGUgdHJ1bmNhdGVUb0RvdWJsZSgpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgaW50ZWdlci4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJpbmcgaXMgcGFyc2FibGUgYnkgW3BhcnNlXS4KICAgKiBGb3IgYW55IGBpbnRgIGBpYCwgaXQgaXMgZ3VhcmFudGVlZCB0aGF0CiAgICogYGkgPT0gaW50LnBhcnNlKGkudG9TdHJpbmcoKSlgLgogICAqLwogIFN0cmluZyB0b1N0cmluZygpOwoKICAvKioKICAgKiBDb252ZXJ0cyBbdGhpc10gdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaW4gdGhlIGdpdmVuIFtyYWRpeF0uCiAgICoKICAgKiBJbiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uLCBsb3dlci1jYXNlIGxldHRlcnMgYXJlIHVzZWQgZm9yIGRpZ2l0cyBhYm92ZQogICAqICc5Jywgd2l0aCAnYScgYmVpbmcgMTAgYW4gJ3onIGJlaW5nIDM1LgogICAqCiAgICogVGhlIFtyYWRpeF0gYXJndW1lbnQgbXVzdCBiZSBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSAyIHRvIDM2LgogICAqLwogIFN0cmluZyB0b1JhZGl4U3RyaW5nKGludCByYWRpeCk7CgogIC8qKgogICAqIFBhcnNlIFtzb3VyY2VdIGFzIGEsIHBvc3NpYmx5IHNpZ25lZCwgaW50ZWdlciBsaXRlcmFsIGFuZCByZXR1cm4gaXRzIHZhbHVlLgogICAqCiAgICogVGhlIFtzb3VyY2VdIG11c3QgYmUgYSBub24tZW1wdHkgc2VxdWVuY2Ugb2YgYmFzZS1bcmFkaXhdIGRpZ2l0cywKICAgKiBvcHRpb25hbGx5IHByZWZpeGVkIHdpdGggYSBtaW51cyBvciBwbHVzIHNpZ24gKCctJyBvciAnKycpLgogICAqIEl0IG11c3Qgbm90IGJlIGBudWxsYC4KICAgKgogICAqIFRoZSBbcmFkaXhdIG11c3QgYmUgaW4gdGhlIHJhbmdlIDIuLjM2LiBUaGUgZGlnaXRzIHVzZWQgYXJlCiAgICogZmlyc3QgdGhlIGRlY2ltYWwgZGlnaXRzIDAuLjksIGFuZCB0aGVuIHRoZSBsZXR0ZXJzICdhJy4uJ3onIHdpdGgKICAgKiB2YWx1ZXMgMTAgdGhyb3VnaCAzNS4gQWxzbyBhY2NlcHRzIHVwcGVyLWNhc2UgbGV0dGVycyB3aXRoIHRoZSBzYW1lCiAgICogdmFsdWVzIGFzIHRoZSBsb3dlci1jYXNlIG9uZXMuCiAgICoKICAgKiBJZiBubyBbcmFkaXhdIGlzIGdpdmVuIHRoZW4gaXQgZGVmYXVsdHMgdG8gMTAuIEluIHRoaXMgY2FzZSwgdGhlIFtzb3VyY2VdCiAgICogZGlnaXRzIG1heSBhbHNvIHN0YXJ0IHdpdGggYDB4YCwgaW4gd2hpY2ggY2FzZSB0aGUgbnVtYmVyIGlzIGludGVycHJldGVkCiAgICogYXMgYSBoZXhhZGVjaW1hbCBpbnRlZ2VyIGxpdGVyYWwsCiAgICogV2hlbiBgaW50YCBpcyBpbXBsZW1lbnRlZCBieSA2NC1iaXQgc2lnbmVkIGludGVnZXJzLAogICAqIGhleGFkZWNpbWFsIGludGVnZXIgbGl0ZXJhbHMgbWF5IHJlcHJlc2VudCB2YWx1ZXMgbGFyZ2VyIHRoYW4KICAgKiAyPHN1cD42Mzwvc3VwPiwgaW4gd2hpY2ggY2FzZSB0aGUgdmFsdWUgaXMgcGFyc2VkIGFzIGlmIGl0IGlzIGFuCiAgICogKnVuc2lnbmVkKiBudW1iZXIsIGFuZCB0aGUgcmVzdWx0aW5nIHZhbHVlIGlzIHRoZSBjb3JyZXNwb25kaW5nCiAgICogc2lnbmVkIGludGVnZXIgdmFsdWUuCiAgICoKICAgKiBGb3IgYW55IGludCBgbmAgYW5kIHZhbGlkIHJhZGl4IGByYCwgaXQgaXMgZ3VhcmFudGVlZCB0aGF0CiAgICogYG4gPT0gaW50LnBhcnNlKG4udG9SYWRpeFN0cmluZyhyKSwgcmFkaXg6IHIpYC4KICAgKgogICAqIElmIHRoZSBbc291cmNlXSBzdHJpbmcgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGludGVnZXIgbGl0ZXJhbCwKICAgKiBvcHRpb25hbGx5IHByZWZpeGVkIGJ5IGEgc2lnbiwgYSBbRm9ybWF0RXhjZXB0aW9uXSBpcyB0aHJvd24KICAgKiAodW5sZXNzIHRoZSBkZXByZWNhdGVkIFtvbkVycm9yXSBwYXJhbWV0ZXIgaXMgdXNlZCwgc2VlIGJlbG93KS4KICAgKgogICAqIEluc3RlYWQgb2YgdGhyb3dpbmcgYW5kIGltbWVkaWF0ZWx5IGNhdGNoaW5nIHRoZSBbRm9ybWF0RXhjZXB0aW9uXSwKICAgKiBpbnN0ZWFkIHVzZSBbdHJ5UGFyc2VdIHRvIGhhbmRsZSBhIHBhcnNpbmcgZXJyb3IuCiAgICogRXhhbXBsZToKICAgKiBgYGBkYXJ0CiAgICogdmFyIHZhbHVlID0gaW50LnRyeVBhcnNlKHRleHQpOwogICAqIGlmICh2YWx1ZSA9PSBudWxsKSAuLi4gaGFuZGxlIHRoZSBwcm9ibGVtCiAgICogYGBgCiAgICoKICAgKiBUaGUgW29uRXJyb3JdIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQuCiAgICogSW5zdGVhZCBvZiBgaW50LnBhcnNlKHN0cmluZywgb25FcnJvcjogKHN0cmluZykgPT4gLi4uKWAsCiAgICogeW91IHNob3VsZCB1c2UgYGludC50cnlQYXJzZShzdHJpbmcpID8/ICguLi4pYC4KICAgKgogICAqIFdoZW4gdGhlIHNvdXJjZSBzdHJpbmcgaXMgbm90IHZhbGlkIGFuZCBbb25FcnJvcl0gaXMgcHJvdmlkZWQsCiAgICogd2hlbmV2ZXIgYSBbRm9ybWF0RXhjZXB0aW9uXSB3b3VsZCBiZSB0aHJvd24sCiAgICogW29uRXJyb3JdIGlzIGluc3RlYWQgY2FsbGVkIHdpdGggW3NvdXJjZV0gYXMgYXJndW1lbnQsCiAgICogYW5kIHRoZSByZXN1bHQgb2YgdGhhdCBjYWxsIGlzIHJldHVybmVkIGJ5IFtwYXJzZV0uCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIGludCBwYXJzZShTdHJpbmcgc291cmNlLAogICAgICB7aW50IHJhZGl4LCBAZGVwcmVjYXRlZCBpbnQgb25FcnJvcihTdHJpbmcgc291cmNlKX0pOwoKICAvKioKICAgKiBQYXJzZSBbc291cmNlXSBhcyBhLCBwb3NzaWJseSBzaWduZWQsIGludGVnZXIgbGl0ZXJhbCBhbmQgcmV0dXJuIGl0cyB2YWx1ZS4KICAgKgogICAqIExpa2UgW3BhcnNlXSBleGNlcHQgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYG51bGxgIHdoZXJlIGEKICAgKiBzaW1pbGFyIGNhbGwgdG8gW3BhcnNlXSB3b3VsZCB0aHJvdyBhIFtGb3JtYXRFeGNlcHRpb25dLAogICAqIGFuZCB0aGUgW3NvdXJjZV0gbXVzdCBzdGlsbCBub3QgYmUgYG51bGxgLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBpbnQgdHJ5UGFyc2UoU3RyaW5nIHNvdXJjZSwge2ludCByYWRpeH0pOwp9CoFlAE5OPAETAQQWA0s4A01OTU8OOkdNPAM2BCEGTAU1CUgZCQ4JQAkGTExQIigaTwEGHAVMTR0FRiEGHQEGGwVMTxsFRCcGHQEGJQVMTSkFRScGHQEGIwVGOAUsBhQBBkIFSykFSEsLBTIGJAEGQwVIQBoFMgYkAQZHBT8PBikBBkAXBSUFMgYfAQZGBUovBT42BTMFQgYWATsTAToSAQZIBU5OTgVNKgklBScnJycnJycnCQYVAQZFUTUJOglRMgkgCUYFTVAiCSUJBh0BBk9RUFEFCTI2NjIJUTkJHglODAVPUSAJJwkGGwEGMAVMKgYUAQYxBUYGDQEGJwU6JgYQARkPARkPARkOARkSASQaASQaASQZASQdAQY2BTEuJQYVAQZGBVAtBUMGIwEGUQVHQRwFQUdJJAVPTic6Q0ZFGwVANQVGQkUFSTcODSUvCQVAPzUFRDM8OQYrPAEGUQVDPjAGPAIBEmRhcnQ6Y29yZS9pbnQuZGFydDNvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL2ludGVnZXJzX3BhdGNoLmRhcnSsIy8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKLy8vIFZNIGltcGxlbWVudGF0aW9uIG9mIGludC4KQHBhdGNoCmNsYXNzIGludCB7CiAgQHBhdGNoCiAgY29uc3QgZmFjdG9yeSBpbnQuZnJvbUVudmlyb25tZW50KFN0cmluZyBuYW1lLCB7aW50IGRlZmF1bHRWYWx1ZX0pCiAgICAgIG5hdGl2ZSAiSW50ZWdlcl9mcm9tRW52aXJvbm1lbnQiOwoKICBpbnQgX2JpdEFuZEZyb21TbWkoX1NtaSBvdGhlcik7CiAgaW50IF9iaXRBbmRGcm9tSW50ZWdlcihpbnQgb3RoZXIpOwogIGludCBfYml0T3JGcm9tSW50ZWdlcihpbnQgb3RoZXIpOwogIGludCBfYml0WG9yRnJvbUludGVnZXIoaW50IG90aGVyKTsKICBpbnQgX3NockZyb21JbnRlZ2VyKGludCBvdGhlcik7CiAgaW50IF9zaGxGcm9tSW50ZWdlcihpbnQgb3RoZXIpOwoKICBzdGF0aWMgaW50IF90cnlQYXJzZVNtaShTdHJpbmcgc3RyLCBpbnQgZmlyc3QsIGludCBsYXN0KSB7CiAgICBhc3NlcnQoZmlyc3QgPD0gbGFzdCk7CiAgICB2YXIgaXggPSBmaXJzdDsKICAgIHZhciBzaWduID0gMTsKICAgIHZhciBjID0gc3RyLmNvZGVVbml0QXQoaXgpOwogICAgLy8gQ2hlY2sgZm9yIGxlYWRpbmcgJysnIG9yICctJy4KICAgIGlmICgoYyA9PSAweDJiKSB8fCAoYyA9PSAweDJkKSkgewogICAgICBpeCsrOwogICAgICBzaWduID0gMHgyYyAtIGM7IC8vIC0xIGZvciAnLScsICsxIGZvciAnKycuCiAgICAgIGlmIChpeCA+IGxhc3QpIHsKICAgICAgICByZXR1cm4gbnVsbDsgLy8gRW1wdHkuCiAgICAgIH0KICAgIH0KICAgIHZhciBzbWlMaW1pdCA9IGlzNjRCaXQgPyAxOCA6IDk7CiAgICBpZiAoKGxhc3QgLSBpeCkgPj0gc21pTGltaXQpIHsKICAgICAgcmV0dXJuIG51bGw7IC8vIE1heSBub3QgZml0IGludG8gYSBTbWkuCiAgICB9CiAgICB2YXIgcmVzdWx0ID0gMDsKICAgIGZvciAoaW50IGkgPSBpeDsgaSA8PSBsYXN0OyBpKyspIHsKICAgICAgdmFyIGMgPSAweDMwIF4gc3RyLmNvZGVVbml0QXQoaSk7CiAgICAgIGlmICg5IDwgYykgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIHJlc3VsdCA9IDEwICogcmVzdWx0ICsgYzsKICAgIH0KICAgIHJldHVybiBzaWduICogcmVzdWx0OwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIGludCBwYXJzZShTdHJpbmcgc291cmNlLCB7aW50IHJhZGl4LCBpbnQgb25FcnJvcihTdHJpbmcgc291cmNlKX0pIHsKICAgIGlmIChzb3VyY2UgPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIlRoZSBzb3VyY2UgbXVzdCBub3QgYmUgbnVsbCIpOwogICAgaWYgKHNvdXJjZS5pc0VtcHR5KSB7CiAgICAgIHJldHVybiBfdGhyb3dGb3JtYXRFeGNlcHRpb24ob25FcnJvciwgc291cmNlLCAwLCByYWRpeCwgbnVsbCk7CiAgICB9CiAgICBpZiAocmFkaXggPT0gbnVsbCB8fCByYWRpeCA9PSAxMCkgewogICAgICAvLyBUcnkgcGFyc2luZyBpbW1lZGlhdGVseSwgd2l0aG91dCB0cmltbWluZyB3aGl0ZXNwYWNlLgogICAgICBpbnQgcmVzdWx0ID0gX3RyeVBhcnNlU21pKHNvdXJjZSwgMCwgc291cmNlLmxlbmd0aCAtIDEpOwogICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHJldHVybiByZXN1bHQ7CiAgICB9IGVsc2UgaWYgKHJhZGl4IDwgMiB8fCByYWRpeCA+IDM2KSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJSYWRpeCAkcmFkaXggbm90IGluIHJhbmdlIDIuLjM2Iik7CiAgICB9CiAgICAvLyBTcGxpdCBoZXJlIHNvIGltcHJvdmUgb2RkcyBvZiBwYXJzZSBiZWluZyBpbmxpbmVkIGFuZCB0aGUgY2hlY2tzIG9taXR0ZWQuCiAgICByZXR1cm4gX3BhcnNlKHNvdXJjZSwgcmFkaXgsIG9uRXJyb3IpOwogIH0KCiAgc3RhdGljIGludCBfcGFyc2UoX1N0cmluZ0Jhc2Ugc291cmNlLCBpbnQgcmFkaXgsIG9uRXJyb3IpIHsKICAgIGludCBlbmQgPSBzb3VyY2UuX2xhc3ROb25XaGl0ZXNwYWNlKCkgKyAxOwogICAgaWYgKGVuZCA9PSAwKSB7CiAgICAgIHJldHVybiBfdGhyb3dGb3JtYXRFeGNlcHRpb24ob25FcnJvciwgc291cmNlLCBzb3VyY2UubGVuZ3RoLCByYWRpeCwgbnVsbCk7CiAgICB9CiAgICBpbnQgc3RhcnQgPSBzb3VyY2UuX2ZpcnN0Tm9uV2hpdGVzcGFjZSgpOwoKICAgIGludCBmaXJzdCA9IHNvdXJjZS5jb2RlVW5pdEF0KHN0YXJ0KTsKICAgIGludCBzaWduID0gMTsKICAgIGlmIChmaXJzdCA9PSAweDJiIC8qICsgKi8gfHwgZmlyc3QgPT0gMHgyZCAvKiAtICovKSB7CiAgICAgIHNpZ24gPSAweDJjIC0gZmlyc3Q7IC8vIC0xIGlmICctJywgKzEgaWYgJysnLgogICAgICBzdGFydCsrOwogICAgICBpZiAoc3RhcnQgPT0gZW5kKSB7CiAgICAgICAgcmV0dXJuIF90aHJvd0Zvcm1hdEV4Y2VwdGlvbihvbkVycm9yLCBzb3VyY2UsIGVuZCwgcmFkaXgsIG51bGwpOwogICAgICB9CiAgICAgIGZpcnN0ID0gc291cmNlLmNvZGVVbml0QXQoc3RhcnQpOwogICAgfQogICAgaWYgKHJhZGl4ID09IG51bGwpIHsKICAgICAgLy8gY2hlY2sgZm9yIDB4IHByZWZpeC4KICAgICAgaW50IGluZGV4ID0gc3RhcnQ7CiAgICAgIGlmIChmaXJzdCA9PSAweDMwIC8qIDAgKi8pIHsKICAgICAgICBpbmRleCsrOwogICAgICAgIGlmIChpbmRleCA9PSBlbmQpIHJldHVybiAwOwogICAgICAgIGZpcnN0ID0gc291cmNlLmNvZGVVbml0QXQoaW5kZXgpOwogICAgICAgIGlmICgoZmlyc3QgfCAweDIwKSA9PSAweDc4IC8qIHggKi8pIHsKICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgICBpZiAoaW5kZXggPT0gZW5kKSB7CiAgICAgICAgICAgIHJldHVybiBfdGhyb3dGb3JtYXRFeGNlcHRpb24ob25FcnJvciwgc291cmNlLCBpbmRleCwgbnVsbCwgbnVsbCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gX3BhcnNlUmFkaXgoc291cmNlLCAxNiwgaW5kZXgsIGVuZCwgc2lnbiwgc2lnbiA+IDAsIG9uRXJyb3IpOwogICAgICAgIH0KICAgICAgfQogICAgICByYWRpeCA9IDEwOwogICAgfQogICAgcmV0dXJuIF9wYXJzZVJhZGl4KHNvdXJjZSwgcmFkaXgsIHN0YXJ0LCBlbmQsIHNpZ24sIGZhbHNlLCBvbkVycm9yKTsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBpbnQgdHJ5UGFyc2UoU3RyaW5nIHNvdXJjZSwge2ludCByYWRpeH0pIHsKICAgIGlmIChzb3VyY2UgPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIlRoZSBzb3VyY2UgbXVzdCBub3QgYmUgbnVsbCIpOwogICAgaWYgKHNvdXJjZS5pc0VtcHR5KSByZXR1cm4gbnVsbDsKICAgIGlmIChyYWRpeCA9PSBudWxsIHx8IHJhZGl4ID09IDEwKSB7CiAgICAgIC8vIFRyeSBwYXJzaW5nIGltbWVkaWF0ZWx5LCB3aXRob3V0IHRyaW1taW5nIHdoaXRlc3BhY2UuCiAgICAgIGludCByZXN1bHQgPSBfdHJ5UGFyc2VTbWkoc291cmNlLCAwLCBzb3VyY2UubGVuZ3RoIC0gMSk7CiAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgcmV0dXJuIHJlc3VsdDsKICAgIH0gZWxzZSBpZiAocmFkaXggPCAyIHx8IHJhZGl4ID4gMzYpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlJhZGl4ICRyYWRpeCBub3QgaW4gcmFuZ2UgMi4uMzYiKTsKICAgIH0KICAgIHRyeSB7CiAgICAgIHJldHVybiBfcGFyc2Uoc291cmNlLCByYWRpeCwgX2tOdWxsKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICBzdGF0aWMgTnVsbCBfa051bGwoXykgPT4gbnVsbDsKCiAgc3RhdGljIGludCBfdGhyb3dGb3JtYXRFeGNlcHRpb24ob25FcnJvciwgc291cmNlLCBpbmRleCwgcmFkaXgsIG1lc3NhZ2UpIHsKICAgIGlmIChvbkVycm9yICE9IG51bGwpIHJldHVybiBvbkVycm9yKHNvdXJjZSk7CiAgICBpZiAobWVzc2FnZSAhPSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24obWVzc2FnZSwgc291cmNlLCBpbmRleCk7CiAgICB9CiAgICBpZiAocmFkaXggPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKCJJbnZhbGlkIG51bWJlciIsIHNvdXJjZSwgaW5kZXgpOwogICAgfQogICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCByYWRpeC0kcmFkaXggbnVtYmVyIiwgc291cmNlLCBpbmRleCk7CiAgfQoKICBzdGF0aWMgaW50IF9wYXJzZVJhZGl4KFN0cmluZyBzb3VyY2UsIGludCByYWRpeCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgc2lnbiwKICAgICAgYm9vbCBhbGxvd1U2NCwgb25FcnJvcikgewogICAgaW50IHRhYmxlSW5kZXggPSAocmFkaXggLSAyKSAqIDQgKyAoaXM2NEJpdCA/IDIgOiAwKTsKICAgIGludCBibG9ja1NpemUgPSBfUEFSU0VfTElNSVRTW3RhYmxlSW5kZXhdOwogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgaWYgKGxlbmd0aCA8PSBibG9ja1NpemUpIHsKICAgICAgX1NtaSBzbWkgPSBfcGFyc2VCbG9jayhzb3VyY2UsIHJhZGl4LCBzdGFydCwgZW5kKTsKICAgICAgaWYgKHNtaSA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIF90aHJvd0Zvcm1hdEV4Y2VwdGlvbihvbkVycm9yLCBzb3VyY2UsIHN0YXJ0LCByYWRpeCwgbnVsbCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHNpZ24gKiBzbWk7CiAgICB9CgogICAgLy8gT2Z0ZW4gY2hlYXBlciB0aGFuOiBpbnQgc21hbGxCbG9ja1NpemUgPSBsZW5ndGggJSBibG9ja1NpemU7CiAgICAvLyBiZWNhdXNlIGRpZ2l0IGNvdW50IGdlbmVyYWxseSB0ZW5kcyB0b3dhcmRzIHNtYWxsZXIuIHJhdGhlcgogICAgLy8gdGhhbiBsYXJnZXIuCiAgICBpbnQgc21hbGxCbG9ja1NpemUgPSBsZW5ndGg7CiAgICB3aGlsZSAoc21hbGxCbG9ja1NpemUgPj0gYmxvY2tTaXplKSBzbWFsbEJsb2NrU2l6ZSAtPSBibG9ja1NpemU7CiAgICBpbnQgcmVzdWx0ID0gMDsKICAgIGlmIChzbWFsbEJsb2NrU2l6ZSA+IDApIHsKICAgICAgaW50IGJsb2NrRW5kID0gc3RhcnQgKyBzbWFsbEJsb2NrU2l6ZTsKICAgICAgX1NtaSBzbWkgPSBfcGFyc2VCbG9jayhzb3VyY2UsIHJhZGl4LCBzdGFydCwgYmxvY2tFbmQpOwogICAgICBpZiAoc21pID09IG51bGwpIHsKICAgICAgICByZXR1cm4gX3Rocm93Rm9ybWF0RXhjZXB0aW9uKG9uRXJyb3IsIHNvdXJjZSwgc3RhcnQsIHJhZGl4LCBudWxsKTsKICAgICAgfQogICAgICByZXN1bHQgPSBzaWduICogc21pOwogICAgICBzdGFydCA9IGJsb2NrRW5kOwogICAgfQogICAgaW50IG11bHRpcGxpZXIgPSBfUEFSU0VfTElNSVRTW3RhYmxlSW5kZXggKyAxXTsKICAgIGludCBwb3NpdGl2ZU92ZXJmbG93TGltaXQgPSAwOwogICAgaW50IG5lZ2F0aXZlT3ZlcmZsb3dMaW1pdCA9IDA7CiAgICB0YWJsZUluZGV4ID0gdGFibGVJbmRleCA8PCAxOyAvLyBwcmUtbXVsdGlwbHkgYnkgMiBmb3Igc2ltcGxlciBpbmRleGluZwogICAgcG9zaXRpdmVPdmVyZmxvd0xpbWl0ID0gX2ludDY0T3ZlcmZsb3dMaW1pdHNbdGFibGVJbmRleF07CiAgICBpZiAocG9zaXRpdmVPdmVyZmxvd0xpbWl0ID09IDApIHsKICAgICAgcG9zaXRpdmVPdmVyZmxvd0xpbWl0ID0gX2luaXRJbnQ2NE92ZXJmbG93TGltaXRzKHRhYmxlSW5kZXgsIG11bHRpcGxpZXIpOwogICAgfQogICAgbmVnYXRpdmVPdmVyZmxvd0xpbWl0ID0gX2ludDY0T3ZlcmZsb3dMaW1pdHNbdGFibGVJbmRleCArIDFdOwogICAgaW50IGJsb2NrRW5kID0gc3RhcnQgKyBibG9ja1NpemU7CiAgICBkbyB7CiAgICAgIF9TbWkgc21pID0gX3BhcnNlQmxvY2soc291cmNlLCByYWRpeCwgc3RhcnQsIGJsb2NrRW5kKTsKICAgICAgaWYgKHNtaSA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIF90aHJvd0Zvcm1hdEV4Y2VwdGlvbihvbkVycm9yLCBzb3VyY2UsIHN0YXJ0LCByYWRpeCwgbnVsbCk7CiAgICAgIH0KICAgICAgaWYgKHJlc3VsdCA+PSBwb3NpdGl2ZU92ZXJmbG93TGltaXQpIHsKICAgICAgICBpZiAoKHJlc3VsdCA+IHBvc2l0aXZlT3ZlcmZsb3dMaW1pdCkgfHwKICAgICAgICAgICAgKHNtaSA+IF9pbnQ2NE92ZXJmbG93TGltaXRzW3RhYmxlSW5kZXggKyAyXSkpIHsKICAgICAgICAgIC8vIEFsdGhvdWdoIHRoZSB1bnNpZ25lZCBvdmVyZmxvdyBsaW1pdHMgZG8gbm90IGRlcGVuZCBvbiB0aGUKICAgICAgICAgIC8vIHBsYXRmb3JtLCB0aGUgbXVsdGlwbGllciBhbmQgYmxvY2sgc2l6ZSwgd2hpY2ggYXJlIHVzZWQgdG8KICAgICAgICAgIC8vIGNvbXB1dGUgaXQsIGRvLgogICAgICAgICAgaW50IFggPSBpczY0Qml0ID8gMSA6IDA7CiAgICAgICAgICBpZiAoYWxsb3dVNjQgJiYKICAgICAgICAgICAgICAhKHJlc3VsdCA+PSBfaW50NjRVbnNpZ25lZE92ZXJmbG93TGltaXRzW1hdICYmCiAgICAgICAgICAgICAgICAgIChyZXN1bHQgPiBfaW50NjRVbnNpZ25lZE92ZXJmbG93TGltaXRzW1hdIHx8CiAgICAgICAgICAgICAgICAgICAgICBzbWkgPiBfaW50NjRVbnNpZ25lZFNtaU92ZXJmbG93TGltaXRzW1hdKSkgJiYKICAgICAgICAgICAgICBibG9ja0VuZCArIGJsb2NrU2l6ZSA+IGVuZCkgewogICAgICAgICAgICByZXR1cm4gKHJlc3VsdCAqIG11bHRpcGxpZXIpICsgc21pOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIF90aHJvd0Zvcm1hdEV4Y2VwdGlvbihvbkVycm9yLCBzb3VyY2UsIG51bGwsIHJhZGl4LAogICAgICAgICAgICAgICJQb3NpdGl2ZSBpbnB1dCBleGNlZWRzIHRoZSBsaW1pdCBvZiBpbnRlZ2VyIik7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHJlc3VsdCA8PSBuZWdhdGl2ZU92ZXJmbG93TGltaXQpIHsKICAgICAgICBpZiAoKHJlc3VsdCA8IG5lZ2F0aXZlT3ZlcmZsb3dMaW1pdCkgfHwKICAgICAgICAgICAgKHNtaSA+IF9pbnQ2NE92ZXJmbG93TGltaXRzW3RhYmxlSW5kZXggKyAzXSkpIHsKICAgICAgICAgIHJldHVybiBfdGhyb3dGb3JtYXRFeGNlcHRpb24ob25FcnJvciwgc291cmNlLCBudWxsLCByYWRpeCwKICAgICAgICAgICAgICAiTmVnYXRpdmUgaW5wdXQgZXhjZWVkcyB0aGUgbGltaXQgb2YgaW50ZWdlciIpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXN1bHQgPSAocmVzdWx0ICogbXVsdGlwbGllcikgKyAoc2lnbiAqIHNtaSk7CiAgICAgIHN0YXJ0ID0gYmxvY2tFbmQ7CiAgICAgIGJsb2NrRW5kID0gc3RhcnQgKyBibG9ja1NpemU7CiAgICB9IHdoaWxlIChibG9ja0VuZCA8PSBlbmQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIFBhcnNlIGJsb2NrIG9mIGRpZ2l0cyBpbnRvIGEgU21pLgogIHN0YXRpYyBfU21pIF9wYXJzZUJsb2NrKFN0cmluZyBzb3VyY2UsIGludCByYWRpeCwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBfU21pIHJlc3VsdCA9IDA7CiAgICBpZiAocmFkaXggPD0gMTApIHsKICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgICBpbnQgZGlnaXQgPSBzb3VyY2UuY29kZVVuaXRBdChpKSBeIDB4MzA7CiAgICAgICAgaWYgKGRpZ2l0ID49IHJhZGl4KSByZXR1cm4gbnVsbDsKICAgICAgICByZXN1bHQgPSByYWRpeCAqIHJlc3VsdCArIGRpZ2l0OwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICAgIGludCBjaGFyID0gc291cmNlLmNvZGVVbml0QXQoaSk7CiAgICAgICAgaW50IGRpZ2l0ID0gY2hhciBeIDB4MzA7CiAgICAgICAgaWYgKGRpZ2l0ID4gOSkgewogICAgICAgICAgZGlnaXQgPSAoY2hhciB8IDB4MjApIC0gKDB4NjEgLSAxMCk7CiAgICAgICAgICBpZiAoZGlnaXQgPCAxMCB8fCBkaWdpdCA+PSByYWRpeCkgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIHJlc3VsdCA9IHJhZGl4ICogcmVzdWx0ICsgZGlnaXQ7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBGb3IgZWFjaCByYWRpeCwgMi0zNiwgaG93IG1hbnkgZGlnaXRzIGFyZSBndWFyYW50ZWVkIHRvIGZpdCBpbiBhIHNtaSwKICAvLyBhbmQgbWFnbml0dWRlIG9mIHN1Y2ggYSBibG9jayAocmFkaXggKiogZGlnaXQtY291bnQpLgogIC8vIDMyLWJpdCBsaW1pdC9tdWx0aXBsaWVyIGF0IChyYWRpeCAtIDIpKjQsIDY0LWJpdCBsaW1pdCBhdCAocmFkaXgtMikqNCsyCiAgc3RhdGljIGNvbnN0IF9QQVJTRV9MSU1JVFMgPSBjb25zdCBbCiAgICAzMCwgMTA3Mzc0MTgyNCwgNjIsIDQ2MTE2ODYwMTg0MjczODc5MDQsIC8vIHJhZGl4OiAyCiAgICAxOCwgMzg3NDIwNDg5LCAzOSwgNDA1MjU1NTE1MzAxODk3NjI2NywKICAgIDE1LCAxMDczNzQxODI0LCAzMCwgMTE1MjkyMTUwNDYwNjg0Njk3NiwKICAgIDEyLCAyNDQxNDA2MjUsIDI2LCAxNDkwMTE2MTE5Mzg0NzY1NjI1LCAvLyAgcmFkaXg6IDUKICAgIDExLCAzNjI3OTcwNTYsIDIzLCA3ODk3MzAyMjMwNTM2MDI4MTYsCiAgICAxMCwgMjgyNDc1MjQ5LCAyMiwgMzkwOTgyMTA0ODU4Mjk4ODA0OSwKICAgIDEwLCAxMDczNzQxODI0LCAyMCwgMTE1MjkyMTUwNDYwNjg0Njk3NiwKICAgIDksIDM4NzQyMDQ4OSwgMTksIDEzNTA4NTE3MTc2NzI5OTIwODksCiAgICA5LCAxMDAwMDAwMDAwLCAxOCwgMTAwMDAwMDAwMDAwMDAwMDAwMCwgLy8gIHJhZGl4OiAxMAogICAgOCwgMjE0MzU4ODgxLCAxNywgNTA1NDQ3MDI4NDk5MjkzNzcxLAogICAgOCwgNDI5OTgxNjk2LCAxNywgMjIxODYxMTEwNjc0MDQzNjk5MiwKICAgIDgsIDgxNTczMDcyMSwgMTYsIDY2NTQxNjYwOTE4MzE3OTg0MSwKICAgIDcsIDEwNTQxMzUwNCwgMTYsIDIxNzc5NTMzMzc4MDkzNzExMzYsCiAgICA3LCAxNzA4NTkzNzUsIDE1LCA0Mzc4OTM4OTAzODA4NTkzNzUsIC8vICAgIHJhZGl4OiAxNQogICAgNywgMjY4NDM1NDU2LCAxNSwgMTE1MjkyMTUwNDYwNjg0Njk3NiwKICAgIDcsIDQxMDMzODY3MywgMTUsIDI4NjI0MjMwNTE1MDk4MTU3OTMsCiAgICA3LCA2MTIyMjAwMzIsIDE0LCAzNzQ4MTMzNjc1ODIwODEwMjQsCiAgICA3LCA4OTM4NzE3MzksIDE0LCA3OTkwMDY2ODU3ODI4ODQxMjEsCiAgICA2LCA2NDAwMDAwMCwgMTQsIDE2Mzg0MDAwMDAwMDAwMDAwMDAsIC8vICAgIHJhZGl4OiAyMAogICAgNiwgODU3NjYxMjEsIDE0LCAzMjQzOTE5OTMyNTIxNTA4NjgxLAogICAgNiwgMTEzMzc5OTA0LCAxMywgMjgyODEwMDU3ODgzMDgyNzUyLAogICAgNiwgMTQ4MDM1ODg5LCAxMywgNTA0MDM2MzYxOTM2NDY3MzgzLAogICAgNiwgMTkxMTAyOTc2LCAxMywgODc2NDg4MzM4NDY1MzU3ODI0LAogICAgNiwgMjQ0MTQwNjI1LCAxMywgMTQ5MDExNjExOTM4NDc2NTYyNSwgLy8gICByYWRpeDogMjUKICAgIDYsIDMwODkxNTc3NiwgMTMsIDI0ODExNTI4NzMyMDM3MzY1NzYsCiAgICA2LCAzODc0MjA0ODksIDEzLCA0MDUyNTU1MTUzMDE4OTc2MjY3LAogICAgNiwgNDgxODkwMzA0LCAxMiwgMjMyMjE4MjY1MDg5MjEyNDE2LAogICAgNiwgNTk0ODIzMzIxLCAxMiwgMzUzODE0NzgzMjA1NDY5MDQxLAogICAgNiwgNzI5MDAwMDAwLCAxMiwgNTMxNDQxMDAwMDAwMDAwMDAwLCAvLyAgICByYWRpeDogMzAKICAgIDYsIDg4NzUwMzY4MSwgMTIsIDc4NzY2Mjc4Mzc4ODU0OTc2MSwKICAgIDYsIDEwNzM3NDE4MjQsIDEyLCAxMTUyOTIxNTA0NjA2ODQ2OTc2LAogICAgNSwgMzkxMzUzOTMsIDEyLCAxNjY3ODg5NTE0OTUyOTg0OTYxLAogICAgNSwgNDU0MzU0MjQsIDEyLCAyMzg2NDIwNjgzNjkzMTAxMDU2LAogICAgNSwgNTI1MjE4NzUsIDEyLCAzMzc5MjIwNTA4MDU2NjQwNjI1LCAvLyAgICByYWRpeDogMzUKICAgIDUsIDYwNDY2MTc2LCAxMSwgMTMxNjIxNzAzODQyMjY3MTM2LAogIF07CgogIHN0YXRpYyBjb25zdCBfbWF4SW50NjQgPSAweDdmZmZmZmZmZmZmZmZmZmY7CiAgc3RhdGljIGNvbnN0IF9taW5JbnQ2NCA9IC0weDgwMDAwMDAwMDAwMDAwMDA7CgogIHN0YXRpYyBjb25zdCBfaW50NjRVbnNpZ25lZE92ZXJmbG93TGltaXRzID0gY29uc3QgWzB4ZmZmZmZmZmZmLCAweGZdOwogIHN0YXRpYyBjb25zdCBfaW50NjRVbnNpZ25lZFNtaU92ZXJmbG93TGltaXRzID0gY29uc3QgWwogICAgMHhmZmZmZmZmLAogICAgMHhmZmZmZmZmZmZmZmZmZmYKICBdOwoKICAvLy8gQ2FsY3VsYXRpb24gb2YgdGhlIGV4cHJlc3Npb24KICAvLy8KICAvLy8gICByZXN1bHQgPSAocmVzdWx0ICogbXVsdGlwbGllcikgKyAoc2lnbiAqIHNtaSkKICAvLy8KICAvLy8gaW4gYF9wYXJzZVJhZGl4KClgIG1heSBvdmVyZmxvdyA2NC1iaXQgaW50ZWdlcnMuIEluIHN1Y2ggY2FzZSwKICAvLy8gYGludC5wYXJzZSgpYCBzaG91bGQgc3RvcCB3aXRoIGFuIGVycm9yLgogIC8vLwogIC8vLyBUaGlzIHRhYmxlIGlzIGxhemlseSBmaWxsZWQgd2l0aCBpbnQ2NCBvdmVyZmxvdyBsaW1pdHMgZm9yIHJlc3VsdCBhbmQgc21pLgogIC8vLyBGb3IgZWFjaCBtdWx0aXBsaWVyIGZyb20gYF9QQVJTRV9MSU1JVFNbdGFibGVJbmRleCArIDFdYCB0aGlzIHRhYmxlCiAgLy8vIGNvbnRhaW5zCiAgLy8vCiAgLy8vICogYFt0YWJsZUluZGV4KjJdYCA9IHBvc2l0aXZlIGxpbWl0IGZvciByZXN1bHQKICAvLy8gKiBgW3RhYmxlSW5kZXgqMiArIDFdYCA9IG5lZ2F0aXZlIGxpbWl0IGZvciByZXN1bHQKICAvLy8gKiBgW3RhYmxlSW5kZXgqMiArIDJdYCA9IGxpbWl0IGZvciBzbWkgaWYgcmVzdWx0IGlzIGV4YWN0bHkgYXQgcG9zaXRpdmUgbGltaXQKICAvLy8gKiBgW3RhYmxlSW5kZXgqMiArIDNdYCA9IGxpbWl0IGZvciBzbWkgaWYgcmVzdWx0IGlzIGV4YWN0bHkgYXQgbmVnYXRpdmUgbGltaXQKICBzdGF0aWMgZmluYWwgSW50NjRMaXN0IF9pbnQ2NE92ZXJmbG93TGltaXRzID0KICAgICAgbmV3IEludDY0TGlzdChfUEFSU0VfTElNSVRTLmxlbmd0aCAqIDIpOwoKICBzdGF0aWMgaW50IF9pbml0SW50NjRPdmVyZmxvd0xpbWl0cyhpbnQgdGFibGVJbmRleCwgaW50IG11bHRpcGxpZXIpIHsKICAgIF9pbnQ2NE92ZXJmbG93TGltaXRzW3RhYmxlSW5kZXhdID0gX21heEludDY0IH4vIG11bHRpcGxpZXI7CiAgICBfaW50NjRPdmVyZmxvd0xpbWl0c1t0YWJsZUluZGV4ICsgMV0gPSBfbWluSW50NjQgfi8gbXVsdGlwbGllcjsKICAgIF9pbnQ2NE92ZXJmbG93TGltaXRzW3RhYmxlSW5kZXggKyAyXSA9IF9tYXhJbnQ2NC5yZW1haW5kZXIobXVsdGlwbGllcik7CiAgICBfaW50NjRPdmVyZmxvd0xpbWl0c1t0YWJsZUluZGV4ICsgM10gPSAtKF9taW5JbnQ2NC5yZW1haW5kZXIobXVsdGlwbGllcikpOwogICAgcmV0dXJuIF9pbnQ2NE92ZXJmbG93TGltaXRzW3RhYmxlSW5kZXhdOwogIH0KfQqBNABOTjwBHgEeBwwJRSgBIiUkJSIiAT0bFBIgJSYMMhcfCAYlIy4GFCcoExUIIAYaBAEJTVAaRQYoPz8pKj8GUSsEAT4vFFEGLgEqEjo0DxpJCCgGGR4ZIxEkKi4THk4MTwoIEgZJBAEJNFAlKD8/KSo/BgosEhMGBAEhAU0xGzkGGUIGTQQBUSA6Lx4fORlLCBkGAURDFCFFFB4tPhlLCBsYBjQjI0w+JlAGQiYJPhlLCC0wPEhIHSMaPT9ELDAMRT4KNDA8RT4KCDUYJB8TBAEnShUXKjEpKQgNKikhGS85CikIBhMEAUs7TSc5LC05KywtKzoqKyorOisrKio6KioqKjorKyoqOiosKio6KQUBLzABSDkPFgUBJAY2BkUvBlFKDwY1OVRUMC8BSEBETE8tBAIBI2RhcnQ6Y29yZS1wYXRjaC9pbnRlZ2Vyc19wYXRjaC5kYXJ0MG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb3JlL2ludm9jYXRpb24uZGFydJUXLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIFJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnZvY2F0aW9uIG9mIGEgbWVtYmVyIG9uIGFuIG9iamVjdC4KICoKICogVGhpcyBpcyB0aGUgdHlwZSBvZiBvYmplY3RzIHBhc3NlZCB0byBbT2JqZWN0Lm5vU3VjaE1ldGhvZF0gd2hlbgogKiBhbiBvYmplY3QgZG9lc24ndCBzdXBwb3J0IHRoZSBtZW1iZXIgaW52b2NhdGlvbiB0aGF0IHdhcyBhdHRlbXB0ZWQKICogb24gaXQuCiAqLwphYnN0cmFjdCBjbGFzcyBJbnZvY2F0aW9uIHsKICBJbnZvY2F0aW9uKCk7CgogIC8qKgogICAqIENyZWF0ZXMgYW4gaW52b2NhdGlvbiBjb3JyZXNwb25kaW5nIHRvIGEgbWV0aG9kIGludm9jYXRpb24uCiAgICoKICAgKiBUaGUgbWV0aG9kIGludm9jYXRpb24gaGFzIG5vIHR5cGUgYXJndW1lbnRzLgogICAqIElmIHRoZSBuYW1lZCBhcmd1bWVudHMgYXJlIG9taXR0ZWQsIHRoZXkgZGVmYXVsdCB0byBubyBuYW1lZCBhcmd1bWVudHMuCiAgICovCiAgZmFjdG9yeSBJbnZvY2F0aW9uLm1ldGhvZCgKICAgICAgICAgIFN5bWJvbCBtZW1iZXJOYW1lLCBJdGVyYWJsZTxPYmplY3Q+IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgICAgICBbTWFwPFN5bWJvbCwgT2JqZWN0PiBuYW1lZEFyZ3VtZW50c10pID0+CiAgICAgIF9JbnZvY2F0aW9uLm1ldGhvZChtZW1iZXJOYW1lLCBudWxsLCBwb3NpdGlvbmFsQXJndW1lbnRzLCBuYW1lZEFyZ3VtZW50cyk7CgogIC8qKgogICAqIENyZWF0ZXMgYW4gaW52b2NhdGlvbiBjb3JyZXNwb25kaW5nIHRvIGEgZ2VuZXJpYyBtZXRob2QgaW52b2NhdGlvbi4KICAgKgogICAqIElmIFt0eXBlQXJndW1lbnRzXSBpcyBgbnVsbGAgb3IgZW1wdHksIHRoZSBjb25zdHJ1Y3RvciBpcyBlcXVpdmFsZW50IHRvCiAgICogY2FsbGluZyBbSW52b2NhdGlvbi5tZXRob2RdIHdpdGggdGhlIHJlbWFpbmluZyBhcmd1bWVudHMuCiAgICogQWxsIHRoZSBpbmRpdmlkdWFsIHR5cGUgYXJndW1lbnRzIG11c3QgYmUgbm9uLW51bGwuCiAgICoKICAgKiBJZiB0aGUgbmFtZWQgYXJndW1lbnRzIGFyZSBvbWl0dGVkLCB0aGV5IGRlZmF1bHQgdG8gbm8gbmFtZWQgYXJndW1lbnRzLgogICAqLwogIGZhY3RvcnkgSW52b2NhdGlvbi5nZW5lcmljTWV0aG9kKFN5bWJvbCBtZW1iZXJOYW1lLAogICAgICAgICAgSXRlcmFibGU8VHlwZT4gdHlwZUFyZ3VtZW50cywgSXRlcmFibGU8T2JqZWN0PiBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICAgICAgW01hcDxTeW1ib2wsIE9iamVjdD4gbmFtZWRBcmd1bWVudHNdKSA9PgogICAgICBfSW52b2NhdGlvbi5tZXRob2QoCiAgICAgICAgICBtZW1iZXJOYW1lLCB0eXBlQXJndW1lbnRzLCBwb3NpdGlvbmFsQXJndW1lbnRzLCBuYW1lZEFyZ3VtZW50cyk7CgogIC8qKgogICAqIENyZWF0ZXMgYW4gaW52b2NhdGlvbiBjb3JyZXNwb25kaW5nIHRvIGEgZ2V0dGVyIGludm9jYXRpb24uCiAgICovCiAgZmFjdG9yeSBJbnZvY2F0aW9uLmdldHRlcihTeW1ib2wgbmFtZSkgPSBfSW52b2NhdGlvbi5nZXR0ZXI7CgogIC8qKgogICAqIENyZWF0ZXMgYW4gaW52b2NhdGlvbiBjb3JyZXNwb25kaW5nIHRvIGEgc2V0dGVyIGludm9jYXRpb24uCiAgICoKICAgKiBUaGlzIGNvbnN0cnVjdG9yIGFjY2VwdHMgYW55IFtTeW1ib2xdIGFzIFttZW1iZXJOYW1lXSwgYnV0IHJlbWVtYmVyIHRoYXQKICAgKiAqYWN0dWFsIHNldHRlciBuYW1lcyogZW5kIGluIGA9YCwgc28gdGhlIGludm9jYXRpb24gY29ycmVzcG9uZGluZwogICAqIHRvIGBvYmplY3QubWVtYmVyID0gdmFsdWVgIGlzCiAgICogYGBgZGFydAogICAqIEludm9jYXRpb24uc2V0dGVyKGNvbnN0IFN5bWJvbCgibWVtYmVyPSIpLCB2YWx1ZSkKICAgKiBgYGAKICAgKi8KICBmYWN0b3J5IEludm9jYXRpb24uc2V0dGVyKFN5bWJvbCBtZW1iZXJOYW1lLCBPYmplY3QgYXJndW1lbnQpID0KICAgICAgX0ludm9jYXRpb24uc2V0dGVyOwoKICAvKiogVGhlIG5hbWUgb2YgdGhlIGludm9rZWQgbWVtYmVyLiAqLwogIFN5bWJvbCBnZXQgbWVtYmVyTmFtZTsKCiAgLyoqCiAgICogQW4gdW5tb2RpZmlhYmxlIHZpZXcgb2YgdGhlIHR5cGUgYXJndW1lbnRzIG9mIHRoZSBjYWxsLgogICAqCiAgICogSWYgdGhlIG1lbWJlciBpcyBhIGdldHRlciwgc2V0dGVyIG9yIG9wZXJhdG9yLAogICAqIHRoZSB0eXBlIGFyZ3VtZW50IGxpc3QgaXMgYWx3YXlzIGVtcHR5LgogICAqLwogIExpc3Q8VHlwZT4gZ2V0IHR5cGVBcmd1bWVudHMgPT4gY29uc3QgPFR5cGU+W107CgogIC8qKgogICAqIEFuIHVubW9kaWZpYWJsZSB2aWV3IG9mIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBvZiB0aGUgY2FsbC4KICAgKgogICAqIElmIHRoZSBtZW1iZXIgaXMgYSBnZXR0ZXIsIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBsaXN0IGlzCiAgICogYWx3YXlzIGVtcHR5LgogICAqLwogIExpc3Q8ZHluYW1pYz4gZ2V0IHBvc2l0aW9uYWxBcmd1bWVudHM7CgogIC8qKgogICAqIEFuIHVubW9kaWZpYWJsZSB2aWV3IG9mIHRoZSBuYW1lZCBhcmd1bWVudHMgb2YgdGhlIGNhbGwuCiAgICoKICAgKiBJZiB0aGUgbWVtYmVyIGlzIGEgZ2V0dGVyLCBzZXR0ZXIgb3Igb3BlcmF0b3IsCiAgICogdGhlIG5hbWVkIGFyZ3VtZW50cyBtYXAgaXMgYWx3YXlzIGVtcHR5LgogICAqLwogIE1hcDxTeW1ib2wsIGR5bmFtaWM+IGdldCBuYW1lZEFyZ3VtZW50czsKCiAgLyoqIFdoZXRoZXIgdGhlIGludm9jYXRpb24gd2FzIGEgbWV0aG9kIGNhbGwuICovCiAgYm9vbCBnZXQgaXNNZXRob2Q7CgogIC8qKgogICAqIFdoZXRoZXIgdGhlIGludm9jYXRpb24gd2FzIGEgZ2V0dGVyIGNhbGwuCiAgICogSWYgc28sIGFsbCB0aHJlZSB0eXBlcyBvZiBhcmd1bWVudHMgbGlzdHMgYXJlIGVtcHR5LgogICAqLwogIGJvb2wgZ2V0IGlzR2V0dGVyOwoKICAvKioKICAgKiBXaGV0aGVyIHRoZSBpbnZvY2F0aW9uIHdhcyBhIHNldHRlciBjYWxsLgogICAqCiAgICogSWYgc28sIFtwb3NpdGlvbmFsQXJndW1lbnRzXSBoYXMgZXhhY3RseSBvbmUgcG9zaXRpb25hbAogICAqIGFyZ3VtZW50LCBbbmFtZWRBcmd1bWVudHNdIGlzIGVtcHR5LCBhbmQgdHlwZUFyZ3VtZW50cyBpcwogICAqIGVtcHR5LgogICAqLwogIGJvb2wgZ2V0IGlzU2V0dGVyOwoKICAvKiogV2hldGhlciB0aGUgaW52b2NhdGlvbiB3YXMgYSBnZXR0ZXIgb3IgYSBzZXR0ZXIgY2FsbC4gKi8KICBib29sIGdldCBpc0FjY2Vzc29yID0+IGlzR2V0dGVyIHx8IGlzU2V0dGVyOwp9CgovKiogSW1wbGVtZW50YXRpb24gb2YgW0ludm9jYXRpb25dIHVzZWQgYnkgaXRzIGZhY3RvcnkgY29uc3RydWN0b3JzLiAqLwpjbGFzcyBfSW52b2NhdGlvbiBpbXBsZW1lbnRzIEludm9jYXRpb24gewogIGZpbmFsIFN5bWJvbCBtZW1iZXJOYW1lOwogIGZpbmFsIExpc3Q8VHlwZT4gdHlwZUFyZ3VtZW50czsKICAvLyBQb3NpdGlvbmFsIGFyZ3VtZW50cyBpcyBgbnVsbGAgZm9yIGdldHRlcnMgb25seS4KICBmaW5hbCBMaXN0PE9iamVjdD4gX3Bvc2l0aW9uYWw7CiAgLy8gTmFtZWQgYXJndW1lbnRzIGlzIGBudWxsYCBmb3IgYWNjZXNzb3JzIG9ubHkuCiAgZmluYWwgTWFwPFN5bWJvbCwgT2JqZWN0PiBfbmFtZWQ7CgogIF9JbnZvY2F0aW9uLm1ldGhvZCh0aGlzLm1lbWJlck5hbWUsIEl0ZXJhYmxlPFR5cGU+IHR5cGVzLAogICAgICBJdGVyYWJsZTxPYmplY3Q+IHBvc2l0aW9uYWwsIE1hcDxTeW1ib2wsIE9iamVjdD4gbmFtZWQpCiAgICAgIDogdHlwZUFyZ3VtZW50cyA9IF9lbnN1cmVOb25OdWxsVHlwZXMoX21ha2VVbm1vZGlmaWFibGU8VHlwZT4odHlwZXMpKSwKICAgICAgICBfcG9zaXRpb25hbCA9IF9tYWtlVW5tb2RpZmlhYmxlPE9iamVjdD4ocG9zaXRpb25hbCkgPz8gY29uc3QgPE9iamVjdD5bXSwKICAgICAgICBfbmFtZWQgPSAobmFtZWQgPT0gbnVsbCB8fCBuYW1lZC5pc0VtcHR5KQogICAgICAgICAgICA/IGNvbnN0IDxTeW1ib2wsIE9iamVjdD57fQogICAgICAgICAgICA6IE1hcDxTeW1ib2wsIE9iamVjdD4udW5tb2RpZmlhYmxlKG5hbWVkKTsKCiAgX0ludm9jYXRpb24uZ2V0dGVyKHRoaXMubWVtYmVyTmFtZSkKICAgICAgOiB0eXBlQXJndW1lbnRzID0gY29uc3QgPFR5cGU+W10sCiAgICAgICAgX3Bvc2l0aW9uYWwgPSBudWxsLAogICAgICAgIF9uYW1lZCA9IG51bGw7CgogIF9JbnZvY2F0aW9uLnNldHRlcih0aGlzLm1lbWJlck5hbWUsIE9iamVjdCBhcmd1bWVudCkKICAgICAgOiB0eXBlQXJndW1lbnRzID0gY29uc3QgPFR5cGU+W10sCiAgICAgICAgX3Bvc2l0aW9uYWwgPSBMaXN0PE9iamVjdD4udW5tb2RpZmlhYmxlKFthcmd1bWVudF0pLAogICAgICAgIF9uYW1lZCA9IG51bGw7CgogIExpc3Q8ZHluYW1pYz4gZ2V0IHBvc2l0aW9uYWxBcmd1bWVudHMgPT4gX3Bvc2l0aW9uYWwgPz8gY29uc3QgPE9iamVjdD5bXTsKCiAgTWFwPFN5bWJvbCwgZHluYW1pYz4gZ2V0IG5hbWVkQXJndW1lbnRzID0+IF9uYW1lZCA/PyBjb25zdCA8U3ltYm9sLCBPYmplY3Q+e307CgogIGJvb2wgZ2V0IGlzTWV0aG9kID0+IF9uYW1lZCAhPSBudWxsOwogIGJvb2wgZ2V0IGlzR2V0dGVyID0+IF9wb3NpdGlvbmFsID09IG51bGw7CiAgYm9vbCBnZXQgaXNTZXR0ZXIgPT4gX3Bvc2l0aW9uYWwgIT0gbnVsbCAmJiBfbmFtZWQgPT0gbnVsbDsKICBib29sIGdldCBpc0FjY2Vzc29yID0+IF9uYW1lZCA9PSBudWxsOwoKICAvLy8gQ2hlY2tzIHRoYXQgdGhlIGVsZW1lbnRzIG9mIFt0eXBlc10gYXJlIG5vdCBudWxsLgogIHN0YXRpYyBMaXN0PFR5cGU+IF9lbnN1cmVOb25OdWxsVHlwZXMoTGlzdDxUeXBlPiB0eXBlcykgewogICAgaWYgKHR5cGVzID09IG51bGwpIHJldHVybiBjb25zdCA8VHlwZT5bXTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHR5cGVzW2ldID09IG51bGwpIHsKICAgICAgICB0aHJvdyBBcmd1bWVudEVycm9yKAogICAgICAgICAgICAiVHlwZSBhcmd1bWVudHMgbXVzdCBiZSBub24tbnVsbCwgd2FzIG51bGwgYXQgaW5kZXggJGkuIik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0eXBlczsKICB9CgogIHN0YXRpYyBMaXN0PFQ+IF9tYWtlVW5tb2RpZmlhYmxlPFQ+KEl0ZXJhYmxlPFQ+IGVsZW1lbnRzKSB7CiAgICBpZiAoZWxlbWVudHMgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gTGlzdDxUPi51bm1vZGlmaWFibGUoZWxlbWVudHMpOwogIH0KfQqApABOTjwBEwEEPgNERgoEHBABBkEFMk0GHUMzUQEGSQVNPzkFTQY2TjMaSwEGQQY/AQZBBU5HIw03CQZCGgEpGQEGPQU0LQYyAQZDBUETBikBBj4FNC4GKwEzFQEGLzoGFQEGLwU9PwwGFQE/LwIBSCobIjYiMyQBPD5NUTInNwEmKBwXATcoPRcBTAFRAScsPikBODwuLR4dRwgGEgQBPicrBAIBGWRhcnQ6Y29yZS9pbnZvY2F0aW9uLmRhcnQub3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvaXRlcmF0b3IuZGFydIjTLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIEFuIGludGVyZmFjZSBmb3IgZ2V0dGluZyBpdGVtcywgb25lIGF0IGEgdGltZSwgZnJvbSBhbiBvYmplY3QuCiAqCiAqIFRoZSBmb3ItaW4gY29uc3RydWN0IHRyYW5zcGFyZW50bHkgdXNlcyBgSXRlcmF0b3JgIHRvIHRlc3QgZm9yIHRoZSBlbmQKICogb2YgdGhlIGl0ZXJhdGlvbiwgYW5kIHRvIGdldCBlYWNoIGl0ZW0gKG9yIF9lbGVtZW50XykuCiAqCiAqIElmIHRoZSBvYmplY3QgaXRlcmF0ZWQgb3ZlciBpcyBjaGFuZ2VkIGR1cmluZyB0aGUgaXRlcmF0aW9uLCB0aGUKICogYmVoYXZpb3IgaXMgdW5zcGVjaWZpZWQuCiAqCiAqIFRoZSBgSXRlcmF0b3JgIGlzIGluaXRpYWxseSBwb3NpdGlvbmVkIGJlZm9yZSB0aGUgZmlyc3QgZWxlbWVudC4KICogQmVmb3JlIGFjY2Vzc2luZyB0aGUgZmlyc3QgZWxlbWVudCB0aGUgaXRlcmF0b3IgbXVzdCB0aHVzIGJlIGFkdmFuY2VkIHVzaW5nCiAqIFttb3ZlTmV4dF0gdG8gcG9pbnQgdG8gdGhlIGZpcnN0IGVsZW1lbnQuCiAqIElmIG5vIGVsZW1lbnQgaXMgbGVmdCwgdGhlbiBbbW92ZU5leHRdIHJldHVybnMgZmFsc2UsIFtjdXJyZW50XQogKiByZXR1cm5zIGBudWxsYCwgYW5kIGFsbCBmdXJ0aGVyIGNhbGxzIHRvIFttb3ZlTmV4dF0gd2lsbCBhbHNvIHJldHVybiBmYWxzZS4KICoKICogQSB0eXBpY2FsIHVzYWdlIG9mIGFuIEl0ZXJhdG9yIGxvb2tzIGFzIGZvbGxvd3M6CiAqCiAqICAgICB2YXIgaXQgPSBvYmouaXRlcmF0b3I7CiAqICAgICB3aGlsZSAoaXQubW92ZU5leHQoKSkgewogKiAgICAgICB1c2UoaXQuY3VycmVudCk7CiAqICAgICB9CiAqCiAqICoqU2VlIGFsc286KioKICogW0l0ZXJhdGlvbl0oaHR0cDovL3d3dy5kYXJ0bGFuZy5vcmcvZG9jcy9kYXJ0LXVwLWFuZC1ydW5uaW5nL2NvbnRlbnRzL2NoMDMuaHRtbCNpdGVyYXRpb24pCiAqIGluIHRoZSBbbGlicmFyeSB0b3VyXShodHRwOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL2RhcnQtdXAtYW5kLXJ1bm5pbmcvY29udGVudHMvY2gwMy5odG1sKQogKi8KYWJzdHJhY3QgY2xhc3MgSXRlcmF0b3I8RT4gewogIC8qKgogICAqIE1vdmVzIHRvIHRoZSBuZXh0IGVsZW1lbnQuCiAgICoKICAgKiBSZXR1cm5zIHRydWUgaWYgW2N1cnJlbnRdIGNvbnRhaW5zIHRoZSBuZXh0IGVsZW1lbnQuCiAgICogUmV0dXJucyBmYWxzZSBpZiBubyBlbGVtZW50cyBhcmUgbGVmdC4KICAgKgogICAqIEl0IGlzIHNhZmUgdG8gaW52b2tlIFttb3ZlTmV4dF0gZXZlbiB3aGVuIHRoZSBpdGVyYXRvciBpcyBhbHJlYWR5CiAgICogcG9zaXRpb25lZCBhZnRlciB0aGUgbGFzdCBlbGVtZW50LgogICAqIEluIHRoaXMgY2FzZSBbbW92ZU5leHRdIHJldHVybnMgZmFsc2UgYWdhaW4gYW5kIGhhcyBubyBlZmZlY3QuCiAgICoKICAgKiBBIGNhbGwgdG8gYG1vdmVOZXh0YCBtYXkgdGhyb3cgaWYgaXRlcmF0aW9uIGhhcyBiZWVuIGJyb2tlbiBieQogICAqIGNoYW5naW5nIHRoZSB1bmRlcmx5aW5nIGNvbGxlY3Rpb24uCiAgICovCiAgYm9vbCBtb3ZlTmV4dCgpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGVsZW1lbnQuCiAgICoKICAgKiBSZXR1cm5zIGBudWxsYCBpZiB0aGUgaXRlcmF0b3IgaGFzIG5vdCB5ZXQgYmVlbiBtb3ZlZCB0byB0aGUgZmlyc3QKICAgKiBlbGVtZW50LCBvciBpZiB0aGUgaXRlcmF0b3IgaGFzIGJlZW4gbW92ZWQgcGFzdCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZQogICAqIFtJdGVyYWJsZV0uCiAgICoKICAgKiBUaGUgYGN1cnJlbnRgIGdldHRlciBzaG91bGQga2VlcCBpdHMgdmFsdWUgdW50aWwgdGhlIG5leHQgY2FsbCB0bwogICAqIFttb3ZlTmV4dF0sIGV2ZW4gaWYgYW4gdW5kZXJseWluZyBjb2xsZWN0aW9uIGNoYW5nZXMuCiAgICogQWZ0ZXIgYSBzdWNjZXNzZnVsIGNhbGwgdG8gYG1vdmVOZXh0YCwgdGhlIHVzZXIgZG9lc24ndCBuZWVkIHRvIGNhY2hlCiAgICogdGhlIGN1cnJlbnQgdmFsdWUsIGJ1dCBjYW4ga2VlcCByZWFkaW5nIGl0IGZyb20gdGhlIGl0ZXJhdG9yLgogICAqLwogIEUgZ2V0IGN1cnJlbnQ7Cn0KQABOTjwBEwEEQgNKOgNEHANETy1DTwM0Ax4fGgkDEV5eBB0GIAU6LAVHKEQFRCkGEwEGIgVITREFRztLQwYRAgEXZGFydDpjb3JlL2l0ZXJhdG9yLmRhcnQqb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvbGlzdC5kYXJ0wABhWS8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBBbiBpbmRleGFibGUgY29sbGVjdGlvbiBvZiBvYmplY3RzIHdpdGggYSBsZW5ndGguCiAqCiAqIFN1YmNsYXNzZXMgb2YgdGhpcyBjbGFzcyBpbXBsZW1lbnQgZGlmZmVyZW50IGtpbmRzIG9mIGxpc3RzLgogKiBUaGUgbW9zdCBjb21tb24ga2luZHMgb2YgbGlzdHMgYXJlOgogKgogKiAqIEZpeGVkLWxlbmd0aCBsaXN0LgogKiAgIEFuIGVycm9yIG9jY3VycyB3aGVuIGF0dGVtcHRpbmcgdG8gdXNlIG9wZXJhdGlvbnMKICogICB0aGF0IGNhbiBjaGFuZ2UgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdC4KICoKICogKiBHcm93YWJsZSBsaXN0LiBGdWxsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBUEkgZGVmaW5lZCBpbiB0aGlzIGNsYXNzLgogKgogKiBUaGUgZGVmYXVsdCBncm93YWJsZSBsaXN0LCBhcyByZXR1cm5lZCBieSBgbmV3IExpc3QoKWAgb3IgYFtdYCwga2VlcHMKICogYW4gaW50ZXJuYWwgYnVmZmVyLCBhbmQgZ3Jvd3MgdGhhdCBidWZmZXIgd2hlbiBuZWNlc3NhcnkuIFRoaXMgZ3VhcmFudGVlcwogKiB0aGF0IGEgc2VxdWVuY2Ugb2YgW2FkZF0gb3BlcmF0aW9ucyB3aWxsIGVhY2ggZXhlY3V0ZSBpbiBhbW9ydGl6ZWQgY29uc3RhbnQKICogdGltZS4gU2V0dGluZyB0aGUgbGVuZ3RoIGRpcmVjdGx5IG1heSB0YWtlIHRpbWUgcHJvcG9ydGlvbmFsIHRvIHRoZSBuZXcKICogbGVuZ3RoLCBhbmQgbWF5IGNoYW5nZSB0aGUgaW50ZXJuYWwgY2FwYWNpdHkgc28gdGhhdCBhIGZvbGxvd2luZyBhZGQKICogb3BlcmF0aW9uIHdpbGwgbmVlZCB0byBpbW1lZGlhdGVseSBpbmNyZWFzZSB0aGUgYnVmZmVyIGNhcGFjaXR5LgogKiBPdGhlciBsaXN0IGltcGxlbWVudGF0aW9ucyBtYXkgaGF2ZSBkaWZmZXJlbnQgcGVyZm9ybWFuY2UgYmVoYXZpb3IuCiAqCiAqIFRoZSBmb2xsb3dpbmcgY29kZSBpbGx1c3RyYXRlcyB0aGF0IHNvbWUgTGlzdCBpbXBsZW1lbnRhdGlvbnMgc3VwcG9ydAogKiBvbmx5IGEgc3Vic2V0IG9mIHRoZSBBUEkuCiAqCiAqICAgICBMaXN0PGludD4gZml4ZWRMZW5ndGhMaXN0ID0gbmV3IExpc3QoNSk7CiAqICAgICBmaXhlZExlbmd0aExpc3QubGVuZ3RoID0gMDsgIC8vIEVycm9yCiAqICAgICBmaXhlZExlbmd0aExpc3QuYWRkKDQ5OSk7ICAgIC8vIEVycm9yCiAqICAgICBmaXhlZExlbmd0aExpc3RbMF0gPSA4NzsKICogICAgIExpc3Q8aW50PiBncm93YWJsZUxpc3QgPSBbMSwgMl07CiAqICAgICBncm93YWJsZUxpc3QubGVuZ3RoID0gMDsKICogICAgIGdyb3dhYmxlTGlzdC5hZGQoNDk5KTsKICogICAgIGdyb3dhYmxlTGlzdFswXSA9IDg3OwogKgogKiBMaXN0cyBhcmUgW0l0ZXJhYmxlXS4gSXRlcmF0aW9uIG9jY3VycyBvdmVyIHZhbHVlcyBpbiBpbmRleCBvcmRlci4gQ2hhbmdpbmcKICogdGhlIHZhbHVlcyBkb2VzIG5vdCBhZmZlY3QgaXRlcmF0aW9uLCBidXQgY2hhbmdpbmcgdGhlIHZhbGlkCiAqIGluZGljZXMmbWRhc2g7dGhhdCBpcywgY2hhbmdpbmcgdGhlIGxpc3QncyBsZW5ndGgmbWRhc2g7YmV0d2VlbiBpdGVyYXRpb24KICogc3RlcHMgY2F1c2VzIGEgW0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcl0uIFRoaXMgbWVhbnMgdGhhdCBvbmx5IGdyb3dhYmxlCiAqIGxpc3RzIGNhbiB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IuIElmIHRoZSBsZW5ndGggY2hhbmdlcwogKiB0ZW1wb3JhcmlseSBhbmQgaXMgcmVzdG9yZWQgYmVmb3JlIGNvbnRpbnVpbmcgdGhlIGl0ZXJhdGlvbiwgdGhlIGl0ZXJhdG9yCiAqIGRvZXMgbm90IGRldGVjdCBpdC4KICoKICogSXQgaXMgZ2VuZXJhbGx5IG5vdCBhbGxvd2VkIHRvIG1vZGlmeSB0aGUgbGlzdCdzIGxlbmd0aCAoYWRkaW5nIG9yIHJlbW92aW5nCiAqIGVsZW1lbnRzKSB3aGlsZSBhbiBvcGVyYXRpb24gb24gdGhlIGxpc3QgaXMgYmVpbmcgcGVyZm9ybWVkLAogKiBmb3IgZXhhbXBsZSBkdXJpbmcgYSBjYWxsIHRvIFtmb3JFYWNoXSBvciBbc29ydF0uCiAqIENoYW5naW5nIHRoZSBsaXN0J3MgbGVuZ3RoIHdoaWxlIGl0IGlzIGJlaW5nIGl0ZXJhdGVkLCBlaXRoZXIgYnkgaXRlcmF0aW5nIGl0CiAqIGRpcmVjdGx5IG9yIHRocm91Z2ggaXRlcmF0aW5nIGFuIFtJdGVyYWJsZV0gdGhhdCBpcyBiYWNrZWQgYnkgdGhlIGxpc3QsIHdpbGwKICogYnJlYWsgdGhlIGl0ZXJhdGlvbi4KICovCmFic3RyYWN0IGNsYXNzIExpc3Q8RT4gaW1wbGVtZW50cyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxFPiB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIGxpc3Qgb2YgdGhlIGdpdmVuIGxlbmd0aC4KICAgKgogICAqIFRoZSBjcmVhdGVkIGxpc3QgaXMgZml4ZWQtbGVuZ3RoIGlmIFtsZW5ndGhdIGlzIHByb3ZpZGVkLgogICAqCiAgICogICAgIExpc3QgZml4ZWRMZW5ndGhMaXN0ID0gbmV3IExpc3QoMyk7CiAgICogICAgIGZpeGVkTGVuZ3RoTGlzdC5sZW5ndGg7ICAgICAvLyAzCiAgICogICAgIGZpeGVkTGVuZ3RoTGlzdC5sZW5ndGggPSAxOyAvLyBFcnJvcgogICAqCiAgICogVGhlIGxpc3QgaGFzIGxlbmd0aCAwIGFuZCBpcyBncm93YWJsZSBpZiBbbGVuZ3RoXSBpcyBvbWl0dGVkLgogICAqCiAgICogICAgIExpc3QgZ3Jvd2FibGVMaXN0ID0gbmV3IExpc3QoKTsKICAgKiAgICAgZ3Jvd2FibGVMaXN0Lmxlbmd0aDsgLy8gMDsKICAgKiAgICAgZ3Jvd2FibGVMaXN0Lmxlbmd0aCA9IDM7CiAgICoKICAgKiBUbyBjcmVhdGUgYSBncm93YWJsZSBsaXN0IHdpdGggYSBnaXZlbiBsZW5ndGgsIGp1c3QgYXNzaWduIHRoZSBsZW5ndGgKICAgKiByaWdodCBhZnRlciBjcmVhdGlvbjoKICAgKgogICAqICAgICBMaXN0IGdyb3dhYmxlTGlzdCA9IG5ldyBMaXN0KCkuLmxlbmd0aCA9IDUwMDsKICAgKgogICAqIFRoZSBbbGVuZ3RoXSBtdXN0IG5vdCBiZSBuZWdhdGl2ZSBvciBudWxsLCBpZiBpdCBpcyBwcm92aWRlZC4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IExpc3QoW2ludCBsZW5ndGhdKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIGxpc3Qgb2YgdGhlIGdpdmVuIGxlbmd0aCB3aXRoIFtmaWxsXSBhdCBlYWNoIHBvc2l0aW9uLgogICAqCiAgICogVGhlIFtsZW5ndGhdIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlci4KICAgKgogICAqIEV4YW1wbGU6CiAgICogYGBgZGFydAogICAqIG5ldyBMaXN0PGludD4uZmlsbGVkKDMsIDAsIGdyb3dhYmxlOiB0cnVlKTsgLy8gWzAsIDAsIDBdCiAgICogYGBgCiAgICoKICAgKiBUaGUgY3JlYXRlZCBsaXN0IGlzIGZpeGVkLWxlbmd0aCBpZiBbZ3Jvd2FibGVdIGlzIGZhbHNlICh0aGUgZGVmYXVsdCkKICAgKiBhbmQgZ3Jvd2FibGUgaWYgW2dyb3dhYmxlXSBpcyB0cnVlLgogICAqIElmIHRoZSBsaXN0IGlzIGdyb3dhYmxlLCBjaGFuZ2luZyBpdHMgbGVuZ3RoIHdpbGwgbm90IGluaXRpYWxpemUgbmV3CiAgICogZW50cmllcyB3aXRoIFtmaWxsXS4KICAgKiBBZnRlciBiZWluZyBjcmVhdGVkIGFuZCBmaWxsZWQsIHRoZSBsaXN0IGlzIG5vIGRpZmZlcmVudCBmcm9tIGFueSBvdGhlcgogICAqIGdyb3dhYmxlIG9yIGZpeGVkLWxlbmd0aCBsaXN0IGNyZWF0ZWQgdXNpbmcgW0xpc3RdLgogICAqCiAgICogQWxsIGVsZW1lbnRzIG9mIHRoZSByZXR1cm5lZCBsaXN0IHNoYXJlIHRoZSBzYW1lIFtmaWxsXSB2YWx1ZS4KICAgKiBgYGAKICAgKiB2YXIgc2hhcmVkID0gbmV3IExpc3QuZmlsbGVkKDMsIFtdKTsKICAgKiBzaGFyZWRbMF0uYWRkKDQ5OSk7CiAgICogcHJpbnQoc2hhcmVkKTsgIC8vID0+IFtbNDk5XSwgWzQ5OV0sIFs0OTldXQogICAqIGBgYAogICAqCiAgICogWW91IGNhbiB1c2UgW0xpc3QuZ2VuZXJhdGVdIHRvIGNyZWF0ZSBhIGxpc3Qgd2l0aCBhIG5ldyBvYmplY3QgYXQKICAgKiBlYWNoIHBvc2l0aW9uLgogICAqIGBgYAogICAqIHZhciB1bmlxdWUgPSBuZXcgTGlzdC5nZW5lcmF0ZSgzLCAoXykgPT4gW10pOwogICAqIHVuaXF1ZVswXS5hZGQoNDk5KTsKICAgKiBwcmludCh1bmlxdWUpOyAvLyA9PiBbWzQ5OV0sIFtdLCBbXV0KICAgKiBgYGAKICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IExpc3QuZmlsbGVkKGludCBsZW5ndGgsIEUgZmlsbCwge2Jvb2wgZ3Jvd2FibGUgPSBmYWxzZX0pOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbGlzdCBjb250YWluaW5nIGFsbCBbZWxlbWVudHNdLgogICAqCiAgICogVGhlIFtJdGVyYXRvcl0gb2YgW2VsZW1lbnRzXSBwcm92aWRlcyB0aGUgb3JkZXIgb2YgdGhlIGVsZW1lbnRzLgogICAqCiAgICogQWxsIHRoZSBbZWxlbWVudHNdIHNob3VsZCBiZSBpbnN0YW5jZXMgb2YgW0VdLgogICAqIFRoZSBgZWxlbWVudHNgIGl0ZXJhYmxlIGl0c2VsZiBtYXkgaGF2ZSBhbnkgZWxlbWVudCB0eXBlLCBzbyB0aGlzCiAgICogY29uc3RydWN0b3IgY2FuIGJlIHVzZWQgdG8gZG93bi1jYXN0IGEgYExpc3RgLCBmb3IgZXhhbXBsZSBhczoKICAgKiBgYGBkYXJ0CiAgICogTGlzdDxTdXBlclR5cGU+IHN1cGVyTGlzdCA9IC4uLjsKICAgKiBMaXN0PFN1YlR5cGU+IHN1Ykxpc3QgPQogICAqICAgICBuZXcgTGlzdDxTdWJUeXBlPi5mcm9tKHN1cGVyTGlzdC53aGVyZVR5cGU8U3ViVHlwZT4oKSk7CiAgICogYGBgCiAgICoKICAgKiBUaGlzIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSBncm93YWJsZSBsaXN0IHdoZW4gW2dyb3dhYmxlXSBpcyB0cnVlOwogICAqIG90aGVyd2lzZSwgaXQgcmV0dXJucyBhIGZpeGVkLWxlbmd0aCBsaXN0LgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgTGlzdC5mcm9tKEl0ZXJhYmxlIGVsZW1lbnRzLCB7Ym9vbCBncm93YWJsZSA9IHRydWV9KTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIGxpc3QgZnJvbSBbZWxlbWVudHNdLgogICAqCiAgICogVGhlIFtJdGVyYXRvcl0gb2YgW2VsZW1lbnRzXSBwcm92aWRlcyB0aGUgb3JkZXIgb2YgdGhlIGVsZW1lbnRzLgogICAqCiAgICogVGhpcyBjb25zdHJ1Y3RvciBjcmVhdGVzIGEgZ3Jvd2FibGUgbGlzdCB3aGVuIFtncm93YWJsZV0gaXMgdHJ1ZTsKICAgKiBvdGhlcndpc2UsIGl0IHJldHVybnMgYSBmaXhlZC1sZW5ndGggbGlzdC4KICAgKi8KICBmYWN0b3J5IExpc3Qub2YoSXRlcmFibGU8RT4gZWxlbWVudHMsIHtib29sIGdyb3dhYmxlID0gdHJ1ZX0pID0+CiAgICAgIExpc3Q8RT4uZnJvbShlbGVtZW50cywgZ3Jvd2FibGU6IGdyb3dhYmxlKTsKCiAgLyoqCiAgICogR2VuZXJhdGVzIGEgbGlzdCBvZiB2YWx1ZXMuCiAgICoKICAgKiBDcmVhdGVzIGEgbGlzdCB3aXRoIFtsZW5ndGhdIHBvc2l0aW9ucyBhbmQgZmlsbHMgaXQgd2l0aCB2YWx1ZXMgY3JlYXRlZCBieQogICAqIGNhbGxpbmcgW2dlbmVyYXRvcl0gZm9yIGVhY2ggaW5kZXggaW4gdGhlIHJhbmdlIGAwYCAuLiBgbGVuZ3RoIC0gMWAKICAgKiBpbiBpbmNyZWFzaW5nIG9yZGVyLgogICAqCiAgICogICAgIG5ldyBMaXN0PGludD4uZ2VuZXJhdGUoMywgKGludCBpbmRleCkgPT4gaW5kZXggKiBpbmRleCk7IC8vIFswLCAxLCA0XQogICAqCiAgICogVGhlIGNyZWF0ZWQgbGlzdCBpcyBmaXhlZC1sZW5ndGggdW5sZXNzIFtncm93YWJsZV0gaXMgdHJ1ZS4KICAgKi8KICBmYWN0b3J5IExpc3QuZ2VuZXJhdGUoaW50IGxlbmd0aCwgRSBnZW5lcmF0b3IoaW50IGluZGV4KSwKICAgICAge2Jvb2wgZ3Jvd2FibGUgPSB0cnVlfSkgewogICAgTGlzdDxFPiByZXN1bHQ7CiAgICBpZiAoZ3Jvd2FibGUpIHsKICAgICAgcmVzdWx0ID0gPEU+W10uLmxlbmd0aCA9IGxlbmd0aDsKICAgIH0gZWxzZSB7CiAgICAgIHJlc3VsdCA9IExpc3Q8RT4obGVuZ3RoKTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgcmVzdWx0W2ldID0gZ2VuZXJhdG9yKGkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYW4gdW5tb2RpZmlhYmxlIGxpc3QgY29udGFpbmluZyBhbGwgW2VsZW1lbnRzXS4KICAgKgogICAqIFRoZSBbSXRlcmF0b3JdIG9mIFtlbGVtZW50c10gcHJvdmlkZXMgdGhlIG9yZGVyIG9mIHRoZSBlbGVtZW50cy4KICAgKgogICAqIEFuIHVubW9kaWZpYWJsZSBsaXN0IGNhbm5vdCBoYXZlIGl0cyBsZW5ndGggb3IgZWxlbWVudHMgY2hhbmdlZC4KICAgKiBJZiB0aGUgZWxlbWVudHMgYXJlIHRoZW1zZWx2ZXMgaW1tdXRhYmxlLCB0aGVuIHRoZSByZXN1bHRpbmcgbGlzdAogICAqIGlzIGFsc28gaW1tdXRhYmxlLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgTGlzdC51bm1vZGlmaWFibGUoSXRlcmFibGUgZWxlbWVudHMpOwoKICAvKioKICAgKiBBZGFwdHMgW3NvdXJjZV0gdG8gYmUgYSBgTGlzdDxUPmAuCiAgICoKICAgKiBBbnkgdGltZSB0aGUgbGlzdCB3b3VsZCBwcm9kdWNlIGFuIGVsZW1lbnQgdGhhdCBpcyBub3QgYSBbVF0sCiAgICogdGhlIGVsZW1lbnQgYWNjZXNzIHdpbGwgdGhyb3cuCiAgICoKICAgKiBBbnkgdGltZSBhIFtUXSB2YWx1ZSBpcyBhdHRlbXB0ZWQgc3RvcmVkIGludG8gdGhlIGFkYXB0ZWQgbGlzdCwKICAgKiB0aGUgc3RvcmUgd2lsbCB0aHJvdyB1bmxlc3MgdGhlIHZhbHVlIGlzIGFsc28gYW4gaW5zdGFuY2Ugb2YgW1NdLgogICAqCiAgICogSWYgYWxsIGFjY2Vzc2VkIGVsZW1lbnRzIG9mIFtzb3VyY2VdIGFyZSBhY3R1YWxseSBpbnN0YW5jZXMgb2YgW1RdLAogICAqIGFuZCBpZiBhbGwgZWxlbWVudHMgc3RvcmVkIGludG8gdGhlIHJldHVybmVkIGxpc3QgYXJlIGFjdHVhbGx5IGluc3RhbmNlCiAgICogb2YgW1NdLAogICAqIHRoZW4gdGhlIHJldHVybmVkIGxpc3QgY2FuIGJlIHVzZWQgYXMgYSBgTGlzdDxUPmAuCiAgICovCiAgc3RhdGljIExpc3Q8VD4gY2FzdEZyb208UywgVD4oTGlzdDxTPiBzb3VyY2UpID0+IENhc3RMaXN0PFMsIFQ+KHNvdXJjZSk7CgogIC8qKgogICAqIENvcHkgYSByYW5nZSBvZiBvbmUgbGlzdCBpbnRvIGFub3RoZXIgbGlzdC4KICAgKgogICAqIFRoaXMgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IG1ldGhvZHMgbGlrZQogICAqIFtzZXRSYW5nZV0uCiAgICoKICAgKiBUaGUgcmFuZ2UgZnJvbSBbc3RhcnRdIHRvIFtlbmRdIG11c3QgYmUgYSB2YWxpZCByYW5nZSBvZiBbc291cmNlXSwKICAgKiBhbmQgdGhlcmUgbXVzdCBiZSByb29tIGZvciBgZW5kIC0gc3RhcnRgIGVsZW1lbnRzIGZyb20gcG9zaXRpb24gW2F0XS4KICAgKiBJZiBbc3RhcnRdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHplcm8uCiAgICogSWYgW2VuZF0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gW3NvdXJjZS5sZW5ndGhdLgogICAqCiAgICogSWYgW3NvdXJjZV0gYW5kIFt0YXJnZXRdIGlzIHRoZSBzYW1lIGxpc3QsIG92ZXJsYXBwaW5nIHNvdXJjZSBhbmQgdGFyZ2V0CiAgICogcmFuZ2VzIGFyZSByZXNwZWN0ZWQgc28gdGhhdCB0aGUgdGFyZ2V0IHJhbmdlIGVuZHMgdXAgY29udGFpbmluZyB0aGUKICAgKiBpbml0aWFsIGNvbnRlbnQgb2YgdGhlIHNvdXJjZSByYW5nZS4KICAgKiBPdGhlcndpc2UgdGhlIG9yZGVyIG9mIGVsZW1lbnQgY29weWluZyBpcyBub3QgZ3VhcmFudGVlZC4KICAgKi8KICBzdGF0aWMgdm9pZCBjb3B5UmFuZ2U8VD4oTGlzdDxUPiB0YXJnZXQsIGludCBhdCwgTGlzdDxUPiBzb3VyY2UsCiAgICAgIFtpbnQgc3RhcnQsIGludCBlbmRdKSB7CiAgICBzdGFydCA/Pz0gMDsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHNvdXJjZS5sZW5ndGgpOwogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgaWYgKHRhcmdldC5sZW5ndGggPCBhdCArIGxlbmd0aCkgewogICAgICB0aHJvdyBBcmd1bWVudEVycm9yLnZhbHVlKHRhcmdldCwgInRhcmdldCIsCiAgICAgICAgICAiTm90IGJpZyBlbm91Z2ggdG8gaG9sZCAkbGVuZ3RoIGVsZW1lbnRzIGF0IHBvc2l0aW9uICRhdCIpOwogICAgfQogICAgaWYgKCFpZGVudGljYWwoc291cmNlLCB0YXJnZXQpIHx8IHN0YXJ0ID49IGF0KSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICB0YXJnZXRbYXQgKyBpXSA9IHNvdXJjZVtzdGFydCArIGldOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBmb3IgKGludCBpID0gbGVuZ3RoOyAtLWkgPj0gMDspIHsKICAgICAgICB0YXJnZXRbYXQgKyBpXSA9IHNvdXJjZVtzdGFydCArIGldOwogICAgICB9CiAgICB9CiAgfQoKICAvKioKICAgKiBXcml0ZSB0aGUgZWxlbWVudHMgb2YgYW4gaXRlcmFibGUgaW50byBhIGxpc3QuCiAgICoKICAgKiBUaGlzIGlzIGEgdXRpbGl0eSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBtZXRob2RzIGxpa2UKICAgKiBbc2V0QWxsXS4KICAgKgogICAqIFRoZSBlbGVtZW50cyBvZiBbc291cmNlXSBhcmUgd3JpdHRlbiBpbnRvIFt0YXJnZXRdIGZyb20gcG9zaXRpb24gW2F0XS4KICAgKiBUaGUgW3NvdXJjZV0gbXVzdCBub3QgY29udGFpbiBtb3JlIGVsZW1lbnRzIGFmdGVyIHdyaXRpbmcgdGhlIGxhc3QKICAgKiBwb3NpdGlvbiBvZiBbdGFyZ2V0XS4KICAgKgogICAqIElmIHRoZSBzb3VyY2UgaXMgYSBsaXN0LCB0aGUgW2NvcHlSYW5nZV0gZnVuY3Rpb24gaXMgbGlrZWx5IHRvIGJlIG1vcmUKICAgKiBlZmZpY2llbnQuCiAgICovCiAgc3RhdGljIHZvaWQgd3JpdGVJdGVyYWJsZTxUPihMaXN0PFQ+IHRhcmdldCwgaW50IGF0LCBJdGVyYWJsZTxUPiBzb3VyY2UpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWx1ZUluSW50ZXJ2YWwoYXQsIDAsIHRhcmdldC5sZW5ndGgsICJhdCIpOwogICAgaW50IGluZGV4ID0gYXQ7CiAgICBpbnQgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0Lmxlbmd0aDsKICAgIGZvciAodmFyIGVsZW1lbnQgaW4gc291cmNlKSB7CiAgICAgIGlmIChpbmRleCA9PSB0YXJnZXRMZW5ndGgpIHsKICAgICAgICB0aHJvdyBJbmRleEVycm9yKHRhcmdldExlbmd0aCwgdGFyZ2V0KTsKICAgICAgfQogICAgICB0YXJnZXRbaW5kZXhdID0gZWxlbWVudDsKICAgICAgaW5kZXgrKzsKICAgIH0KICB9CgogIC8qKgogICAqIFJldHVybnMgYSB2aWV3IG9mIHRoaXMgbGlzdCBhcyBhIGxpc3Qgb2YgW1JdIGluc3RhbmNlcy4KICAgKgogICAqIElmIHRoaXMgbGlzdCBjb250YWlucyBvbmx5IGluc3RhbmNlcyBvZiBbUl0sIGFsbCByZWFkIG9wZXJhdGlvbnMKICAgKiB3aWxsIHdvcmsgY29ycmVjdGx5LiBJZiBhbnkgb3BlcmF0aW9uIHRyaWVzIHRvIGFjY2VzcyBhbiBlbGVtZW50CiAgICogdGhhdCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgW1JdLCB0aGUgYWNjZXNzIHdpbGwgdGhyb3cgaW5zdGVhZC4KICAgKgogICAqIEVsZW1lbnRzIGFkZGVkIHRvIHRoZSBsaXN0IChlLmcuLCBieSB1c2luZyBbYWRkXSBvciBbYWRkQWxsXSkKICAgKiBtdXN0IGJlIGluc3RhbmNlIG9mIFtSXSB0byBiZSB2YWxpZCBhcmd1bWVudHMgdG8gdGhlIGFkZGluZyBmdW5jdGlvbiwKICAgKiBhbmQgdGhleSBtdXN0IGJlIGluc3RhbmNlcyBvZiBbRV0gYXMgd2VsbCB0byBiZSBhY2NlcHRlZCBieQogICAqIHRoaXMgbGlzdCBhcyB3ZWxsLgogICAqCiAgICogVHlwaWNhbGx5IGltcGxlbWVudGVkIGFzIGBMaXN0LmNhc3RGcm9tPEUsIFI+KHRoaXMpYC4KICAgKi8KICBMaXN0PFI+IGNhc3Q8Uj4oKTsKICAvKioKICAgKiBSZXR1cm5zIHRoZSBvYmplY3QgYXQgdGhlIGdpdmVuIFtpbmRleF0gaW4gdGhlIGxpc3QKICAgKiBvciB0aHJvd3MgYSBbUmFuZ2VFcnJvcl0gaWYgW2luZGV4XSBpcyBvdXQgb2YgYm91bmRzLgogICAqLwogIEUgb3BlcmF0b3IgW10oaW50IGluZGV4KTsKCiAgLyoqCiAgICogU2V0cyB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIFtpbmRleF0gaW4gdGhlIGxpc3QgdG8gW3ZhbHVlXQogICAqIG9yIHRocm93cyBhIFtSYW5nZUVycm9yXSBpZiBbaW5kZXhdIGlzIG91dCBvZiBib3VuZHMuCiAgICovCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBFIHZhbHVlKTsKCiAgLyoqCiAgICogVXBkYXRlcyB0aGUgZmlyc3QgcG9zaXRpb24gb2YgdGhlIGxpc3QgdG8gY29udGFpbiBbdmFsdWVdLgogICAqCiAgICogRXF1aXZhbGVudCB0byBgdGhlTGlzdFswXSA9IHZhbHVlO2AuCiAgICoKICAgKiBUaGUgbGlzdCBtdXN0IGJlIG5vbi1lbXB0eS4KICAgKi8KICB2b2lkIHNldCBmaXJzdChFIHZhbHVlKTsKCiAgLyoqCiAgICogVXBkYXRlcyB0aGUgbGFzdCBwb3NpdGlvbiBvZiB0aGUgbGlzdCB0byBjb250YWluIFt2YWx1ZV0uCiAgICoKICAgKiBFcXVpdmFsZW50IHRvIGB0aGVMaXN0W3RoZUxpc3QubGVuZ3RoIC0gMV0gPSB2YWx1ZTtgLgogICAqCiAgICogVGhlIGxpc3QgbXVzdCBiZSBub24tZW1wdHkuCiAgICovCiAgdm9pZCBzZXQgbGFzdChFIHZhbHVlKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhpcyBsaXN0LgogICAqCiAgICogVGhlIHZhbGlkIGluZGljZXMgZm9yIGEgbGlzdCBhcmUgYDBgIHRocm91Z2ggYGxlbmd0aCAtIDFgLgogICAqLwogIGludCBnZXQgbGVuZ3RoOwoKICAvKioKICAgKiBDaGFuZ2VzIHRoZSBsZW5ndGggb2YgdGhpcyBsaXN0LgogICAqCiAgICogSWYgW25ld0xlbmd0aF0gaXMgZ3JlYXRlciB0aGFuCiAgICogdGhlIGN1cnJlbnQgbGVuZ3RoLCBlbnRyaWVzIGFyZSBpbml0aWFsaXplZCB0byBbOm51bGw6XS4KICAgKgogICAqIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0gaWYgdGhlIGxpc3QgaXMgZml4ZWQtbGVuZ3RoLgogICAqLwogIHNldCBsZW5ndGgoaW50IG5ld0xlbmd0aCk7CgogIC8qKgogICAqIEFkZHMgW3ZhbHVlXSB0byB0aGUgZW5kIG9mIHRoaXMgbGlzdCwKICAgKiBleHRlbmRpbmcgdGhlIGxlbmd0aCBieSBvbmUuCiAgICoKICAgKiBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdIGlmIHRoZSBsaXN0IGlzIGZpeGVkLWxlbmd0aC4KICAgKi8KICB2b2lkIGFkZChFIHZhbHVlKTsKCiAgLyoqCiAgICogQXBwZW5kcyBhbGwgb2JqZWN0cyBvZiBbaXRlcmFibGVdIHRvIHRoZSBlbmQgb2YgdGhpcyBsaXN0LgogICAqCiAgICogRXh0ZW5kcyB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGJ5IHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiBbaXRlcmFibGVdLgogICAqIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0gaWYgdGhpcyBsaXN0IGlzIGZpeGVkLWxlbmd0aC4KICAgKi8KICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBpdGVyYWJsZSk7CgogIC8qKgogICAqIFJldHVybnMgYW4gW0l0ZXJhYmxlXSBvZiB0aGUgb2JqZWN0cyBpbiB0aGlzIGxpc3QgaW4gcmV2ZXJzZSBvcmRlci4KICAgKi8KICBJdGVyYWJsZTxFPiBnZXQgcmV2ZXJzZWQ7CgogIC8qKgogICAqIFNvcnRzIHRoaXMgbGlzdCBhY2NvcmRpbmcgdG8gdGhlIG9yZGVyIHNwZWNpZmllZCBieSB0aGUgW2NvbXBhcmVdIGZ1bmN0aW9uLgogICAqCiAgICogVGhlIFtjb21wYXJlXSBmdW5jdGlvbiBtdXN0IGFjdCBhcyBhIFtDb21wYXJhdG9yXS4KICAgKgogICAqICAgICBMaXN0PFN0cmluZz4gbnVtYmVycyA9IFsndHdvJywgJ3RocmVlJywgJ2ZvdXInXTsKICAgKiAgICAgLy8gU29ydCBmcm9tIHNob3J0ZXN0IHRvIGxvbmdlc3QuCiAgICogICAgIG51bWJlcnMuc29ydCgoYSwgYikgPT4gYS5sZW5ndGguY29tcGFyZVRvKGIubGVuZ3RoKSk7CiAgICogICAgIHByaW50KG51bWJlcnMpOyAgLy8gW3R3bywgZm91ciwgdGhyZWVdCiAgICoKICAgKiBUaGUgZGVmYXVsdCBMaXN0IGltcGxlbWVudGF0aW9ucyB1c2UgW0NvbXBhcmFibGUuY29tcGFyZV0gaWYKICAgKiBbY29tcGFyZV0gaXMgb21pdHRlZC4KICAgKgogICAqICAgICBMaXN0PGludD4gbnVtcyA9IFsxMywgMiwgLTExXTsKICAgKiAgICAgbnVtcy5zb3J0KCk7CiAgICogICAgIHByaW50KG51bXMpOyAgLy8gWy0xMSwgMiwgMTNdCiAgICoKICAgKiBBIFtDb21wYXJhdG9yXSBtYXkgY29tcGFyZSBvYmplY3RzIGFzIGVxdWFsIChyZXR1cm4gemVybyksIGV2ZW4gaWYgdGhleQogICAqIGFyZSBkaXN0aW5jdCBvYmplY3RzLgogICAqIFRoZSBzb3J0IGZ1bmN0aW9uIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIHN0YWJsZSwgc28gZGlzdGluY3Qgb2JqZWN0cwogICAqIHRoYXQgY29tcGFyZSBhcyBlcXVhbCBtYXkgb2NjdXIgaW4gYW55IG9yZGVyIGluIHRoZSByZXN1bHQ6CiAgICoKICAgKiAgICAgTGlzdDxTdHJpbmc+IG51bWJlcnMgPSBbJ29uZScsICd0d28nLCAndGhyZWUnLCAnZm91ciddOwogICAqICAgICBudW1iZXJzLnNvcnQoKGEsIGIpID0+IGEubGVuZ3RoLmNvbXBhcmVUbyhiLmxlbmd0aCkpOwogICAqICAgICBwcmludChudW1iZXJzKTsgIC8vIFtvbmUsIHR3bywgZm91ciwgdGhyZWVdIE9SIFt0d28sIG9uZSwgZm91ciwgdGhyZWVdCiAgICovCiAgdm9pZCBzb3J0KFtpbnQgY29tcGFyZShFIGEsIEUgYildKTsKCiAgLyoqCiAgICogU2h1ZmZsZXMgdGhlIGVsZW1lbnRzIG9mIHRoaXMgbGlzdCByYW5kb21seS4KICAgKi8KICB2b2lkIHNodWZmbGUoW1JhbmRvbSByYW5kb21dKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZmlyc3QgaW5kZXggb2YgW2VsZW1lbnRdIGluIHRoaXMgbGlzdC4KICAgKgogICAqIFNlYXJjaGVzIHRoZSBsaXN0IGZyb20gaW5kZXggW3N0YXJ0XSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LgogICAqIFRoZSBmaXJzdCB0aW1lIGFuIG9iamVjdCBbOm86XSBpcyBlbmNvdW50ZXJlZCBzbyB0aGF0IFs6byA9PSBlbGVtZW50Ol0sCiAgICogdGhlIGluZGV4IG9mIFs6bzpdIGlzIHJldHVybmVkLgogICAqCiAgICogICAgIExpc3Q8U3RyaW5nPiBub3RlcyA9IFsnZG8nLCAncmUnLCAnbWknLCAncmUnXTsKICAgKiAgICAgbm90ZXMuaW5kZXhPZigncmUnKTsgICAgLy8gMQogICAqICAgICBub3Rlcy5pbmRleE9mKCdyZScsIDIpOyAvLyAzCiAgICoKICAgKiBSZXR1cm5zIC0xIGlmIFtlbGVtZW50XSBpcyBub3QgZm91bmQuCiAgICoKICAgKiAgICAgbm90ZXMuaW5kZXhPZignZmEnKTsgICAgLy8gLTEKICAgKi8KICBpbnQgaW5kZXhPZihFIGVsZW1lbnQsIFtpbnQgc3RhcnQgPSAwXSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGZpcnN0IGluZGV4IGluIHRoZSBsaXN0IHRoYXQgc2F0aXNmaWVzIHRoZSBwcm92aWRlZCBbdGVzdF0uCiAgICoKICAgKiBTZWFyY2hlcyB0aGUgbGlzdCBmcm9tIGluZGV4IFtzdGFydF0gdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4KICAgKiBUaGUgZmlyc3QgdGltZSBhbiBvYmplY3QgYG9gIGlzIGVuY291bnRlcmVkIHNvIHRoYXQgYHRlc3QobylgIGlzIHRydWUsCiAgICogdGhlIGluZGV4IG9mIGBvYCBpcyByZXR1cm5lZC4KICAgKgogICAqIGBgYAogICAqIExpc3Q8U3RyaW5nPiBub3RlcyA9IFsnZG8nLCAncmUnLCAnbWknLCAncmUnXTsKICAgKiBub3Rlcy5pbmRleFdoZXJlKChub3RlKSA9PiBub3RlLnN0YXJ0c1dpdGgoJ3InKSk7ICAgICAgIC8vIDEKICAgKiBub3Rlcy5pbmRleFdoZXJlKChub3RlKSA9PiBub3RlLnN0YXJ0c1dpdGgoJ3InKSwgMik7ICAgIC8vIDMKICAgKiBgYGAKICAgKgogICAqIFJldHVybnMgLTEgaWYgW2VsZW1lbnRdIGlzIG5vdCBmb3VuZC4KICAgKiBgYGAKICAgKiBub3Rlcy5pbmRleFdoZXJlKChub3RlKSA9PiBub3RlLnN0YXJ0c1dpdGgoJ2snKSk7ICAgIC8vIC0xCiAgICogYGBgCiAgICovCiAgaW50IGluZGV4V2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIFtpbnQgc3RhcnQgPSAwXSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGxhc3QgaW5kZXggaW4gdGhlIGxpc3QgdGhhdCBzYXRpc2ZpZXMgdGhlIHByb3ZpZGVkIFt0ZXN0XS4KICAgKgogICAqIFNlYXJjaGVzIHRoZSBsaXN0IGZyb20gaW5kZXggW3N0YXJ0XSB0byAwLgogICAqIFRoZSBmaXJzdCB0aW1lIGFuIG9iamVjdCBgb2AgaXMgZW5jb3VudGVyZWQgc28gdGhhdCBgdGVzdChvKWAgaXMgdHJ1ZSwKICAgKiB0aGUgaW5kZXggb2YgYG9gIGlzIHJldHVybmVkLgogICAqCiAgICogYGBgCiAgICogTGlzdDxTdHJpbmc+IG5vdGVzID0gWydkbycsICdyZScsICdtaScsICdyZSddOwogICAqIG5vdGVzLmxhc3RJbmRleFdoZXJlKChub3RlKSA9PiBub3RlLnN0YXJ0c1dpdGgoJ3InKSk7ICAgICAgIC8vIDMKICAgKiBub3Rlcy5sYXN0SW5kZXhXaGVyZSgobm90ZSkgPT4gbm90ZS5zdGFydHNXaXRoKCdyJyksIDIpOyAgICAvLyAxCiAgICogYGBgCiAgICoKICAgKiBSZXR1cm5zIC0xIGlmIFtlbGVtZW50XSBpcyBub3QgZm91bmQuCiAgICogYGBgCiAgICogbm90ZXMubGFzdEluZGV4V2hlcmUoKG5vdGUpID0+IG5vdGUuc3RhcnRzV2l0aCgnaycpKTsgICAgLy8gLTEKICAgKiBgYGAKICAgKi8KICBpbnQgbGFzdEluZGV4V2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIFtpbnQgc3RhcnRdKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbGFzdCBpbmRleCBvZiBbZWxlbWVudF0gaW4gdGhpcyBsaXN0LgogICAqCiAgICogU2VhcmNoZXMgdGhlIGxpc3QgYmFja3dhcmRzIGZyb20gaW5kZXggW3N0YXJ0XSB0byAwLgogICAqCiAgICogVGhlIGZpcnN0IHRpbWUgYW4gb2JqZWN0IFs6bzpdIGlzIGVuY291bnRlcmVkIHNvIHRoYXQgWzpvID09IGVsZW1lbnQ6XSwKICAgKiB0aGUgaW5kZXggb2YgWzpvOl0gaXMgcmV0dXJuZWQuCiAgICoKICAgKiAgICAgTGlzdDxTdHJpbmc+IG5vdGVzID0gWydkbycsICdyZScsICdtaScsICdyZSddOwogICAqICAgICBub3Rlcy5sYXN0SW5kZXhPZigncmUnLCAyKTsgLy8gMQogICAqCiAgICogSWYgW3N0YXJ0XSBpcyBub3QgcHJvdmlkZWQsIHRoaXMgbWV0aG9kIHNlYXJjaGVzIGZyb20gdGhlIGVuZCBvZiB0aGUKICAgKiBsaXN0Li9SZXR1cm5zCiAgICoKICAgKiAgICAgbm90ZXMubGFzdEluZGV4T2YoJ3JlJyk7ICAvLyAzCiAgICoKICAgKiBSZXR1cm5zIC0xIGlmIFtlbGVtZW50XSBpcyBub3QgZm91bmQuCiAgICoKICAgKiAgICAgbm90ZXMubGFzdEluZGV4T2YoJ2ZhJyk7ICAvLyAtMQogICAqLwogIGludCBsYXN0SW5kZXhPZihFIGVsZW1lbnQsIFtpbnQgc3RhcnRdKTsKCiAgLyoqCiAgICogUmVtb3ZlcyBhbGwgb2JqZWN0cyBmcm9tIHRoaXMgbGlzdDsKICAgKiB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGJlY29tZXMgemVyby4KICAgKgogICAqIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0sIGFuZCByZXRhaW5zIGFsbCBvYmplY3RzLCBpZiB0aGlzCiAgICogaXMgYSBmaXhlZC1sZW5ndGggbGlzdC4KICAgKi8KICB2b2lkIGNsZWFyKCk7CgogIC8qKgogICAqIEluc2VydHMgdGhlIG9iamVjdCBhdCBwb3NpdGlvbiBbaW5kZXhdIGluIHRoaXMgbGlzdC4KICAgKgogICAqIFRoaXMgaW5jcmVhc2VzIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QgYnkgb25lIGFuZCBzaGlmdHMgYWxsIG9iamVjdHMKICAgKiBhdCBvciBhZnRlciB0aGUgaW5kZXggdG93YXJkcyB0aGUgZW5kIG9mIHRoZSBsaXN0LgogICAqCiAgICogVGhlIGxpc3QgbXVzdCBiZSBncm93YWJsZS4KICAgKiBUaGUgW2luZGV4XSB2YWx1ZSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBhbmQgbm8gZ3JlYXRlciB0aGFuIFtsZW5ndGhdLgogICAqLwogIHZvaWQgaW5zZXJ0KGludCBpbmRleCwgRSBlbGVtZW50KTsKCiAgLyoqCiAgICogSW5zZXJ0cyBhbGwgb2JqZWN0cyBvZiBbaXRlcmFibGVdIGF0IHBvc2l0aW9uIFtpbmRleF0gaW4gdGhpcyBsaXN0LgogICAqCiAgICogVGhpcyBpbmNyZWFzZXMgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCBieSB0aGUgbGVuZ3RoIG9mIFtpdGVyYWJsZV0gYW5kCiAgICogc2hpZnRzIGFsbCBsYXRlciBvYmplY3RzIHRvd2FyZHMgdGhlIGVuZCBvZiB0aGUgbGlzdC4KICAgKgogICAqIFRoZSBsaXN0IG11c3QgYmUgZ3Jvd2FibGUuCiAgICogVGhlIFtpbmRleF0gdmFsdWUgbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kIG5vIGdyZWF0ZXIgdGhhbiBbbGVuZ3RoXS4KICAgKi8KICB2b2lkIGluc2VydEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKTsKCiAgLyoqCiAgICogT3ZlcndyaXRlcyBvYmplY3RzIG9mIGB0aGlzYCB3aXRoIHRoZSBvYmplY3RzIG9mIFtpdGVyYWJsZV0sIHN0YXJ0aW5nCiAgICogYXQgcG9zaXRpb24gW2luZGV4XSBpbiB0aGlzIGxpc3QuCiAgICoKICAgKiAgICAgTGlzdDxTdHJpbmc+IGxpc3QgPSBbJ2EnLCAnYicsICdjJ107CiAgICogICAgIGxpc3Quc2V0QWxsKDEsIFsnYmVlJywgJ3NlYSddKTsKICAgKiAgICAgbGlzdC5qb2luKCcsICcpOyAvLyAnYSwgYmVlLCBzZWEnCiAgICoKICAgKiBUaGlzIG9wZXJhdGlvbiBkb2VzIG5vdCBpbmNyZWFzZSB0aGUgbGVuZ3RoIG9mIGB0aGlzYC4KICAgKgogICAqIFRoZSBbaW5kZXhdIG11c3QgYmUgbm9uLW5lZ2F0aXZlIGFuZCBubyBncmVhdGVyIHRoYW4gW2xlbmd0aF0uCiAgICoKICAgKiBUaGUgW2l0ZXJhYmxlXSBtdXN0IG5vdCBoYXZlIG1vcmUgZWxlbWVudHMgdGhhbiB3aGF0IGNhbiBmaXQgZnJvbSBbaW5kZXhdCiAgICogdG8gW2xlbmd0aF0uCiAgICoKICAgKiBJZiBgaXRlcmFibGVgIGlzIGJhc2VkIG9uIHRoaXMgbGlzdCwgaXRzIHZhbHVlcyBtYXkgY2hhbmdlIC9kdXJpbmcvIHRoZQogICAqIGBzZXRBbGxgIG9wZXJhdGlvbi4KICAgKi8KICB2b2lkIHNldEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKTsKCiAgLyoqCiAgICogUmVtb3ZlcyB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBbdmFsdWVdIGZyb20gdGhpcyBsaXN0LgogICAqCiAgICogUmV0dXJucyB0cnVlIGlmIFt2YWx1ZV0gd2FzIGluIHRoZSBsaXN0LCBmYWxzZSBvdGhlcndpc2UuCiAgICoKICAgKiAgICAgTGlzdDxTdHJpbmc+IHBhcnRzID0gWydoZWFkJywgJ3Nob3VsZGVycycsICdrbmVlcycsICd0b2VzJ107CiAgICogICAgIHBhcnRzLnJlbW92ZSgnaGVhZCcpOyAvLyB0cnVlCiAgICogICAgIHBhcnRzLmpvaW4oJywgJyk7ICAgICAvLyAnc2hvdWxkZXJzLCBrbmVlcywgdG9lcycKICAgKgogICAqIFRoZSBtZXRob2QgaGFzIG5vIGVmZmVjdCBpZiBbdmFsdWVdIHdhcyBub3QgaW4gdGhlIGxpc3QuCiAgICoKICAgKiAgICAgLy8gTm90ZTogJ2hlYWQnIGhhcyBhbHJlYWR5IGJlZW4gcmVtb3ZlZC4KICAgKiAgICAgcGFydHMucmVtb3ZlKCdoZWFkJyk7IC8vIGZhbHNlCiAgICogICAgIHBhcnRzLmpvaW4oJywgJyk7ICAgICAvLyAnc2hvdWxkZXJzLCBrbmVlcywgdG9lcycKICAgKgogICAqIEFuIFtVbnN1cHBvcnRlZEVycm9yXSBvY2N1cnMgaWYgdGhlIGxpc3QgaXMgZml4ZWQtbGVuZ3RoLgogICAqLwogIGJvb2wgcmVtb3ZlKE9iamVjdCB2YWx1ZSk7CgogIC8qKgogICAqIFJlbW92ZXMgdGhlIG9iamVjdCBhdCBwb3NpdGlvbiBbaW5kZXhdIGZyb20gdGhpcyBsaXN0LgogICAqCiAgICogVGhpcyBtZXRob2QgcmVkdWNlcyB0aGUgbGVuZ3RoIG9mIGB0aGlzYCBieSBvbmUgYW5kIG1vdmVzIGFsbCBsYXRlciBvYmplY3RzCiAgICogZG93biBieSBvbmUgcG9zaXRpb24uCiAgICoKICAgKiBSZXR1cm5zIHRoZSByZW1vdmVkIG9iamVjdC4KICAgKgogICAqIFRoZSBbaW5kZXhdIG11c3QgYmUgaW4gdGhlIHJhbmdlIGAwIOKJpCBpbmRleCA8IGxlbmd0aGAuCiAgICoKICAgKiBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdIGlmIHRoaXMgaXMgYSBmaXhlZC1sZW5ndGggbGlzdC4gSW4gdGhhdCBjYXNlCiAgICogdGhlIGxpc3QgaXMgbm90IG1vZGlmaWVkLgogICAqLwogIEUgcmVtb3ZlQXQoaW50IGluZGV4KTsKCiAgLyoqCiAgICogUG9wcyBhbmQgcmV0dXJucyB0aGUgbGFzdCBvYmplY3QgaW4gdGhpcyBsaXN0LgogICAqCiAgICogVGhlIGxpc3QgbXVzdCBub3QgYmUgZW1wdHkuCiAgICoKICAgKiBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdIGlmIHRoaXMgaXMgYSBmaXhlZC1sZW5ndGggbGlzdC4KICAgKi8KICBFIHJlbW92ZUxhc3QoKTsKCiAgLyoqCiAgICogUmVtb3ZlcyBhbGwgb2JqZWN0cyBmcm9tIHRoaXMgbGlzdCB0aGF0IHNhdGlzZnkgW3Rlc3RdLgogICAqCiAgICogQW4gb2JqZWN0IFs6bzpdIHNhdGlzZmllcyBbdGVzdF0gaWYgWzp0ZXN0KG8pOl0gaXMgdHJ1ZS4KICAgKgogICAqICAgICBMaXN0PFN0cmluZz4gbnVtYmVycyA9IFsnb25lJywgJ3R3bycsICd0aHJlZScsICdmb3VyJ107CiAgICogICAgIG51bWJlcnMucmVtb3ZlV2hlcmUoKGl0ZW0pID0+IGl0ZW0ubGVuZ3RoID09IDMpOwogICAqICAgICBudW1iZXJzLmpvaW4oJywgJyk7IC8vICd0aHJlZSwgZm91cicKICAgKgogICAqIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0gaWYgdGhpcyBpcyBhIGZpeGVkLWxlbmd0aCBsaXN0LgogICAqLwogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpOwoKICAvKioKICAgKiBSZW1vdmVzIGFsbCBvYmplY3RzIGZyb20gdGhpcyBsaXN0IHRoYXQgZmFpbCB0byBzYXRpc2Z5IFt0ZXN0XS4KICAgKgogICAqIEFuIG9iamVjdCBbOm86XSBzYXRpc2ZpZXMgW3Rlc3RdIGlmIFs6dGVzdChvKTpdIGlzIHRydWUuCiAgICoKICAgKiAgICAgTGlzdDxTdHJpbmc+IG51bWJlcnMgPSBbJ29uZScsICd0d28nLCAndGhyZWUnLCAnZm91ciddOwogICAqICAgICBudW1iZXJzLnJldGFpbldoZXJlKChpdGVtKSA9PiBpdGVtLmxlbmd0aCA9PSAzKTsKICAgKiAgICAgbnVtYmVycy5qb2luKCcsICcpOyAvLyAnb25lLCB0d28nCiAgICoKICAgKiBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdIGlmIHRoaXMgaXMgYSBmaXhlZC1sZW5ndGggbGlzdC4KICAgKi8KICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGlzIGxpc3QgYW5kIFtvdGhlcl0uCiAgICoKICAgKiBSZXR1cm5zIGEgbmV3IGxpc3QgY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcyBsaXN0IGZvbGxvd2VkIGJ5CiAgICogdGhlIGVsZW1lbnRzIG9mIFtvdGhlcl0uCiAgICoKICAgKiBUaGUgZGVmYXVsdCBiZWhhdmlvciBpcyB0byByZXR1cm4gYSBub3JtYWwgZ3Jvd2FibGUgbGlzdC4KICAgKiBTb21lIGxpc3QgdHlwZXMgbWF5IGNob29zZSB0byByZXR1cm4gYSBsaXN0IG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhlbXNlbHZlcwogICAqIChzZWUgW1VpbnQ4TGlzdC4rXSk7CiAgICovCiAgTGlzdDxFPiBvcGVyYXRvciArKExpc3Q8RT4gb3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGxpc3QgY29udGFpbmluZyB0aGUgZWxlbWVudHMgYmV0d2VlbiBbc3RhcnRdIGFuZCBbZW5kXS4KICAgKgogICAqIFRoZSBuZXcgbGlzdCBpcyBhIGBMaXN0PEU+YCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBvZiB0aGlzIGxpc3QgYXQKICAgKiBwb3NpdGlvbnMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIFtzdGFydF0gYW5kIGxlc3MgdGhhbiBbZW5kXSBpbiB0aGUgc2FtZQogICAqIG9yZGVyIGFzIHRoZXkgb2NjdXIgaW4gdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHZhciBjb2xvcnMgPSBbInJlZCIsICJncmVlbiIsICJibHVlIiwgIm9yYW5nZSIsICJwaW5rIl07CiAgICogcHJpbnQoY29sb3JzLnN1Ymxpc3QoMSwgMykpOyAvLyBbZ3JlZW4sIGJsdWVdCiAgICogYGBgCiAgICoKICAgKiBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byB0aGUgW2xlbmd0aF0gb2YgdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHByaW50KGNvbG9ycy5zdWJsaXN0KDEpKTsgLy8gW2dyZWVuLCBibHVlLCBvcmFuZ2UsIHBpbmtdCiAgICogYGBgCiAgICoKICAgKiBUaGUgYHN0YXJ0YCBhbmQgYGVuZGAgcG9zaXRpb25zIG11c3Qgc2F0aXNmeSB0aGUgcmVsYXRpb25zCiAgICogMCDiiaQgYHN0YXJ0YCDiiaQgYGVuZGAg4omkIGB0aGlzLmxlbmd0aGAKICAgKiBJZiBgZW5kYCBpcyBlcXVhbCB0byBgc3RhcnRgLCB0aGVuIHRoZSByZXR1cm5lZCBsaXN0IGlzIGVtcHR5LgogICAqLwogIExpc3Q8RT4gc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSk7CgogIC8qKgogICAqIFJldHVybnMgYW4gW0l0ZXJhYmxlXSB0aGF0IGl0ZXJhdGVzIG92ZXIgdGhlIG9iamVjdHMgaW4gdGhlIHJhbmdlCiAgICogW3N0YXJ0XSBpbmNsdXNpdmUgdG8gW2VuZF0gZXhjbHVzaXZlLgogICAqCiAgICogVGhlIHByb3ZpZGVkIHJhbmdlLCBnaXZlbiBieSBbc3RhcnRdIGFuZCBbZW5kXSwgbXVzdCBiZSB2YWxpZCBhdCB0aGUgdGltZQogICAqIG9mIHRoZSBjYWxsLgogICAqCiAgICogQSByYW5nZSBmcm9tIFtzdGFydF0gdG8gW2VuZF0gaXMgdmFsaWQgaWYgYDAgPD0gc3RhcnQgPD0gZW5kIDw9IGxlbmAsIHdoZXJlCiAgICogYGxlbmAgaXMgdGhpcyBsaXN0J3MgYGxlbmd0aGAuIFRoZSByYW5nZSBzdGFydHMgYXQgYHN0YXJ0YCBhbmQgaGFzIGxlbmd0aAogICAqIGBlbmQgLSBzdGFydGAuIEFuIGVtcHR5IHJhbmdlICh3aXRoIGBlbmQgPT0gc3RhcnRgKSBpcyB2YWxpZC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBbSXRlcmFibGVdIGJlaGF2ZXMgbGlrZSBgc2tpcChzdGFydCkudGFrZShlbmQgLSBzdGFydClgLgogICAqIFRoYXQgaXMsIGl0IGRvZXMgKm5vdCogdGhyb3cgaWYgdGhpcyBsaXN0IGNoYW5nZXMgc2l6ZS4KICAgKgogICAqICAgICBMaXN0PFN0cmluZz4gY29sb3JzID0gWydyZWQnLCAnZ3JlZW4nLCAnYmx1ZScsICdvcmFuZ2UnLCAncGluayddOwogICAqICAgICBJdGVyYWJsZTxTdHJpbmc+IHJhbmdlID0gY29sb3JzLmdldFJhbmdlKDEsIDQpOwogICAqICAgICByYW5nZS5qb2luKCcsICcpOyAgLy8gJ2dyZWVuLCBibHVlLCBvcmFuZ2UnCiAgICogICAgIGNvbG9ycy5sZW5ndGggPSAzOwogICAqICAgICByYW5nZS5qb2luKCcsICcpOyAgLy8gJ2dyZWVuLCBibHVlJwogICAqLwogIEl0ZXJhYmxlPEU+IGdldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCk7CgogIC8qKgogICAqIENvcGllcyB0aGUgb2JqZWN0cyBvZiBbaXRlcmFibGVdLCBza2lwcGluZyBbc2tpcENvdW50XSBvYmplY3RzIGZpcnN0LAogICAqIGludG8gdGhlIHJhbmdlIFtzdGFydF0sIGluY2x1c2l2ZSwgdG8gW2VuZF0sIGV4Y2x1c2l2ZSwgb2YgdGhlIGxpc3QuCiAgICoKICAgKiAgICAgTGlzdDxpbnQ+IGxpc3QxID0gWzEsIDIsIDMsIDRdOwogICAqICAgICBMaXN0PGludD4gbGlzdDIgPSBbNSwgNiwgNywgOCwgOV07CiAgICogICAgIC8vIENvcGllcyB0aGUgNHRoIGFuZCA1dGggaXRlbXMgaW4gbGlzdDIgYXMgdGhlIDJuZCBhbmQgM3JkIGl0ZW1zCiAgICogICAgIC8vIG9mIGxpc3QxLgogICAqICAgICBsaXN0MS5zZXRSYW5nZSgxLCAzLCBsaXN0MiwgMyk7CiAgICogICAgIGxpc3QxLmpvaW4oJywgJyk7IC8vICcxLCA4LCA5LCA0JwogICAqCiAgICogVGhlIHByb3ZpZGVkIHJhbmdlLCBnaXZlbiBieSBbc3RhcnRdIGFuZCBbZW5kXSwgbXVzdCBiZSB2YWxpZC4KICAgKiBBIHJhbmdlIGZyb20gW3N0YXJ0XSB0byBbZW5kXSBpcyB2YWxpZCBpZiBgMCA8PSBzdGFydCA8PSBlbmQgPD0gbGVuYCwgd2hlcmUKICAgKiBgbGVuYCBpcyB0aGlzIGxpc3QncyBgbGVuZ3RoYC4gVGhlIHJhbmdlIHN0YXJ0cyBhdCBgc3RhcnRgIGFuZCBoYXMgbGVuZ3RoCiAgICogYGVuZCAtIHN0YXJ0YC4gQW4gZW1wdHkgcmFuZ2UgKHdpdGggYGVuZCA9PSBzdGFydGApIGlzIHZhbGlkLgogICAqCiAgICogVGhlIFtpdGVyYWJsZV0gbXVzdCBoYXZlIGVub3VnaCBvYmplY3RzIHRvIGZpbGwgdGhlIHJhbmdlIGZyb20gYHN0YXJ0YAogICAqIHRvIGBlbmRgIGFmdGVyIHNraXBwaW5nIFtza2lwQ291bnRdIG9iamVjdHMuCiAgICoKICAgKiBJZiBgaXRlcmFibGVgIGlzIHRoaXMgbGlzdCwgdGhlIG9wZXJhdGlvbiBjb3BpZXMgdGhlIGVsZW1lbnRzCiAgICogb3JpZ2luYWxseSBpbiB0aGUgcmFuZ2UgZnJvbSBgc2tpcENvdW50YCB0byBgc2tpcENvdW50ICsgKGVuZCAtIHN0YXJ0KWAgdG8KICAgKiB0aGUgcmFuZ2UgYHN0YXJ0YCB0byBgZW5kYCwgZXZlbiBpZiB0aGUgdHdvIHJhbmdlcyBvdmVybGFwLgogICAqCiAgICogSWYgYGl0ZXJhYmxlYCBkZXBlbmRzIG9uIHRoaXMgbGlzdCBpbiBzb21lIG90aGVyIHdheSwgbm8gZ3VhcmFudGVlcyBhcmUKICAgKiBtYWRlLgogICAqLwogIHZvaWQgc2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZTxFPiBpdGVyYWJsZSwgW2ludCBza2lwQ291bnQgPSAwXSk7CgogIC8qKgogICAqIFJlbW92ZXMgdGhlIG9iamVjdHMgaW4gdGhlIHJhbmdlIFtzdGFydF0gaW5jbHVzaXZlIHRvIFtlbmRdIGV4Y2x1c2l2ZS4KICAgKgogICAqIFRoZSBwcm92aWRlZCByYW5nZSwgZ2l2ZW4gYnkgW3N0YXJ0XSBhbmQgW2VuZF0sIG11c3QgYmUgdmFsaWQuCiAgICogQSByYW5nZSBmcm9tIFtzdGFydF0gdG8gW2VuZF0gaXMgdmFsaWQgaWYgYDAgPD0gc3RhcnQgPD0gZW5kIDw9IGxlbmAsIHdoZXJlCiAgICogYGxlbmAgaXMgdGhpcyBsaXN0J3MgYGxlbmd0aGAuIFRoZSByYW5nZSBzdGFydHMgYXQgYHN0YXJ0YCBhbmQgaGFzIGxlbmd0aAogICAqIGBlbmQgLSBzdGFydGAuIEFuIGVtcHR5IHJhbmdlICh3aXRoIGBlbmQgPT0gc3RhcnRgKSBpcyB2YWxpZC4KICAgKgogICAqIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0gaWYgdGhpcyBpcyBhIGZpeGVkLWxlbmd0aCBsaXN0LiBJbiB0aGF0IGNhc2UKICAgKiB0aGUgbGlzdCBpcyBub3QgbW9kaWZpZWQuCiAgICovCiAgdm9pZCByZW1vdmVSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpOwoKICAvKioKICAgKiBTZXRzIHRoZSBvYmplY3RzIGluIHRoZSByYW5nZSBbc3RhcnRdIGluY2x1c2l2ZSB0byBbZW5kXSBleGNsdXNpdmUKICAgKiB0byB0aGUgZ2l2ZW4gW2ZpbGxWYWx1ZV0uCiAgICoKICAgKiBUaGUgcHJvdmlkZWQgcmFuZ2UsIGdpdmVuIGJ5IFtzdGFydF0gYW5kIFtlbmRdLCBtdXN0IGJlIHZhbGlkLgogICAqIEEgcmFuZ2UgZnJvbSBbc3RhcnRdIHRvIFtlbmRdIGlzIHZhbGlkIGlmIGAwIDw9IHN0YXJ0IDw9IGVuZCA8PSBsZW5gLCB3aGVyZQogICAqIGBsZW5gIGlzIHRoaXMgbGlzdCdzIGBsZW5ndGhgLiBUaGUgcmFuZ2Ugc3RhcnRzIGF0IGBzdGFydGAgYW5kIGhhcyBsZW5ndGgKICAgKiBgZW5kIC0gc3RhcnRgLiBBbiBlbXB0eSByYW5nZSAod2l0aCBgZW5kID09IHN0YXJ0YCkgaXMgdmFsaWQuCiAgICoKICAgKiBFeGFtcGxlOgogICAqIGBgYGRhcnQKICAgKiAgTGlzdDxpbnQ+IGxpc3QgPSBuZXcgTGlzdCgzKTsKICAgKiAgICAgbGlzdC5maWxsUmFuZ2UoMCwgMiwgMSk7CiAgICogICAgIHByaW50KGxpc3QpOyAvLyAgWzEsIDEsIG51bGxdCiAgICogYGBgCiAgICoKICAgKi8KICB2b2lkIGZpbGxSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIFtFIGZpbGxWYWx1ZV0pOwoKICAvKioKICAgKiBSZW1vdmVzIHRoZSBvYmplY3RzIGluIHRoZSByYW5nZSBbc3RhcnRdIGluY2x1c2l2ZSB0byBbZW5kXSBleGNsdXNpdmUKICAgKiBhbmQgaW5zZXJ0cyB0aGUgY29udGVudHMgb2YgW3JlcGxhY2VtZW50XSBpbiBpdHMgcGxhY2UuCiAgICoKICAgKiAgICAgTGlzdDxpbnQ+IGxpc3QgPSBbMSwgMiwgMywgNCwgNV07CiAgICogICAgIGxpc3QucmVwbGFjZVJhbmdlKDEsIDQsIFs2LCA3XSk7CiAgICogICAgIGxpc3Quam9pbignLCAnKTsgLy8gJzEsIDYsIDcsIDUnCiAgICoKICAgKiBUaGUgcHJvdmlkZWQgcmFuZ2UsIGdpdmVuIGJ5IFtzdGFydF0gYW5kIFtlbmRdLCBtdXN0IGJlIHZhbGlkLgogICAqIEEgcmFuZ2UgZnJvbSBbc3RhcnRdIHRvIFtlbmRdIGlzIHZhbGlkIGlmIGAwIDw9IHN0YXJ0IDw9IGVuZCA8PSBsZW5gLCB3aGVyZQogICAqIGBsZW5gIGlzIHRoaXMgbGlzdCdzIGBsZW5ndGhgLiBUaGUgcmFuZ2Ugc3RhcnRzIGF0IGBzdGFydGAgYW5kIGhhcyBsZW5ndGgKICAgKiBgZW5kIC0gc3RhcnRgLiBBbiBlbXB0eSByYW5nZSAod2l0aCBgZW5kID09IHN0YXJ0YCkgaXMgdmFsaWQuCiAgICoKICAgKiBUaGlzIG1ldGhvZCBkb2VzIG5vdCB3b3JrIG9uIGZpeGVkLWxlbmd0aCBsaXN0cywgZXZlbiB3aGVuIFtyZXBsYWNlbWVudF0KICAgKiBoYXMgdGhlIHNhbWUgbnVtYmVyIG9mIGVsZW1lbnRzIGFzIHRoZSByZXBsYWNlZCByYW5nZS4gSW4gdGhhdCBjYXNlIHVzZQogICAqIFtzZXRSYW5nZV0gaW5zdGVhZC4KICAgKi8KICB2b2lkIHJlcGxhY2VSYW5nZShpbnQgc3RhcnQsIGlu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cGF0Y2guZGFydCI7CgpAcGF0Y2gKY2xhc3MgTGlzdDxFPiB7CiAgQHBhdGNoCiAgZmFjdG9yeSBMaXN0KFtpbnQgbGVuZ3RoXSkgbmF0aXZlICJMaXN0X25ldyI7CgogIEBwYXRjaAogIGZhY3RvcnkgTGlzdC5maWxsZWQoaW50IGxlbmd0aCwgRSBmaWxsLCB7Ym9vbCBncm93YWJsZTogZmFsc2V9KSB7CiAgICAvLyBBbGwgZXJyb3IgaGFuZGxpbmcgb24gdGhlIGxlbmd0aCBwYXJhbWV0ZXIgaXMgZG9uZSBhdCB0aGUgaW1wbGVtZW50YXRpb24KICAgIC8vIG9mIG5ldyBfTGlzdC4KICAgIHZhciByZXN1bHQgPSBncm93YWJsZSA/IG5ldyBfR3Jvd2FibGVMaXN0PEU+KGxlbmd0aCkgOiBuZXcgX0xpc3Q8RT4obGVuZ3RoKTsKICAgIGlmIChmaWxsICE9IG51bGwpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIHJlc3VsdFtpXSA9IGZpbGw7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAcGF0Y2gKICBmYWN0b3J5IExpc3QuZnJvbShJdGVyYWJsZSBlbGVtZW50cywge2Jvb2wgZ3Jvd2FibGU6IHRydWV9KSB7CiAgICBpZiAoZWxlbWVudHMgaXMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4pIHsKICAgICAgaW50IGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDsKICAgICAgdmFyIGxpc3QgPSBncm93YWJsZSA/IG5ldyBfR3Jvd2FibGVMaXN0PEU+KGxlbmd0aCkgOiBuZXcgX0xpc3Q8RT4obGVuZ3RoKTsKICAgICAgaWYgKGxlbmd0aCA+IDApIHsKICAgICAgICAvLyBBdm9pZCBjcmVhdGluZyBpdGVyYXRvciB1bmxlc3MgbmVjZXNzYXJ5LgogICAgICAgIGludCBpID0gMDsKICAgICAgICBmb3IgKHZhciBlbGVtZW50IGluIGVsZW1lbnRzKSB7CiAgICAgICAgICBsaXN0W2krK10gPSBlbGVtZW50OwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbGlzdDsKICAgIH0KICAgIC8vIElmIGVsZW1lbnRzIGlzIGFuIEl0ZXJhYmxlPEU+LCB3ZSB3b24ndCBuZWVkIGEgdHlwZS10ZXN0IGZvciBlYWNoCiAgICAvLyBlbGVtZW50LiBJbiB0aGUgImNvbW1vbiBjYXNlIiB0aGF0IGVsZW1lbnRzIGlzIGFuIEl0ZXJhYmxlPEU+LCB0aGlzCiAgICAvLyByZXBsYWNlcyBhIHR5cGUtdGVzdCBvbiBldmVyeSBlbGVtZW50IHdpdGggYSBzaW5nbGUgdHlwZS10ZXN0IGJlZm9yZQogICAgLy8gc3RhcnRpbmcgdGhlIGxvb3AuCiAgICBpZiAoZWxlbWVudHMgaXMgSXRlcmFibGU8RT4pIHsKICAgICAgTGlzdDxFPiBsaXN0ID0gbmV3IF9Hcm93YWJsZUxpc3Q8RT4oMCk7CiAgICAgIGZvciAoRSBlIGluIGVsZW1lbnRzKSB7CiAgICAgICAgbGlzdC5hZGQoZSk7CiAgICAgIH0KICAgICAgaWYgKGdyb3dhYmxlKSByZXR1cm4gbGlzdDsKICAgICAgcmV0dXJuIG1ha2VMaXN0Rml4ZWRMZW5ndGgobGlzdCk7CiAgICB9IGVsc2UgewogICAgICBMaXN0PEU+IGxpc3QgPSBuZXcgX0dyb3dhYmxlTGlzdDxFPigwKTsKICAgICAgZm9yIChFIGUgaW4gZWxlbWVudHMpIHsKICAgICAgICBsaXN0LmFkZChlKTsKICAgICAgfQogICAgICBpZiAoZ3Jvd2FibGUpIHJldHVybiBsaXN0OwogICAgICByZXR1cm4gbWFrZUxpc3RGaXhlZExlbmd0aChsaXN0KTsKICAgIH0KICB9CgogIEBwYXRjaAogIGZhY3RvcnkgTGlzdC51bm1vZGlmaWFibGUoSXRlcmFibGUgZWxlbWVudHMpIHsKICAgIGZpbmFsIHJlc3VsdCA9IG5ldyBMaXN0PEU+LmZyb20oZWxlbWVudHMsIGdyb3dhYmxlOiBmYWxzZSk7CiAgICByZXR1cm4gbWFrZUZpeGVkTGlzdFVubW9kaWZpYWJsZShyZXN1bHQpOwogIH0KCiAgLy8gRmFjdG9yeSBjb25zdHJ1Y3RpbmcgYSBtdXRhYmxlIExpc3QgZnJvbSBhIHBhcnNlciBnZW5lcmF0ZWQgTGlzdCBsaXRlcmFsLgogIC8vIFtlbGVtZW50c10gY29udGFpbnMgZWxlbWVudHMgdGhhdCBhcmUgYWxyZWFkeSB0eXBlIGNoZWNrZWQuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgZmFjdG9yeSBMaXN0Ll9mcm9tTGl0ZXJhbChMaXN0IGVsZW1lbnRzKSB7CiAgICBpZiAoZWxlbWVudHMuaXNFbXB0eSkgewogICAgICByZXR1cm4gbmV3IF9Hcm93YWJsZUxpc3Q8RT4oMCk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gbmV3IF9Hcm93YWJsZUxpc3Q8RT4uX3dpdGhEYXRhKGVsZW1lbnRzKTsKICAgIHJlc3VsdC5fc2V0TGVuZ3RoKGVsZW1lbnRzLmxlbmd0aCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQpPAE5OPAEeAQcQCTABCURQFVEYKRoIBhMEAQlAMiRRGDUTKB8KCBMGSUtMGiMuHhUIISgNLh4VCCEoBgQBCTFALgQBT0EkLRwmBjsoEwQCASBkYXJ0OmNvcmUtcGF0Y2gvYXJyYXlfcGF0Y2guZGFydClvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9tYXAuZGFydLRnLy8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIEEgY29sbGVjdGlvbiBvZiBrZXkvdmFsdWUgcGFpcnMsIGZyb20gd2hpY2ggeW91IHJldHJpZXZlIGEgdmFsdWUKICogdXNpbmcgaXRzIGFzc29jaWF0ZWQga2V5LgogKgogKiBUaGVyZSBpcyBhIGZpbml0ZSBudW1iZXIgb2Yga2V5cyBpbiB0aGUgbWFwLAogKiBhbmQgZWFjaCBrZXkgaGFzIGV4YWN0bHkgb25lIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBpdC4KICoKICogTWFwcywgYW5kIHRoZWlyIGtleXMgYW5kIHZhbHVlcywgY2FuIGJlIGl0ZXJhdGVkLgogKiBUaGUgb3JkZXIgb2YgaXRlcmF0aW9uIGlzIGRlZmluZWQgYnkgdGhlIGluZGl2aWR1YWwgdHlwZSBvZiBtYXAuCiAqIEV4YW1wbGVzOgogKgogKiAqIFRoZSBwbGFpbiBbSGFzaE1hcF0gaXMgdW5vcmRlcmVkIChubyBvcmRlciBpcyBndWFyYW50ZWVkKSwKICogKiB0aGUgW0xpbmtlZEhhc2hNYXBdIGl0ZXJhdGVzIGluIGtleSBpbnNlcnRpb24gb3JkZXIsCiAqICogYW5kIGEgc29ydGVkIG1hcCBsaWtlIFtTcGxheVRyZWVNYXBdIGl0ZXJhdGVzIHRoZSBrZXlzIGluIHNvcnRlZCBvcmRlci4KICoKICogSXQgaXMgZ2VuZXJhbGx5IG5vdCBhbGxvd2VkIHRvIG1vZGlmeSB0aGUgbWFwIChhZGQgb3IgcmVtb3ZlIGtleXMpIHdoaWxlCiAqIGFuIG9wZXJhdGlvbiBpcyBiZWluZyBwZXJmb3JtZWQgb24gdGhlIG1hcCwgZm9yIGV4YW1wbGUgaW4gZnVuY3Rpb25zIGNhbGxlZAogKiBkdXJpbmcgYSBbZm9yRWFjaF0gb3IgW3B1dElmQWJzZW50XSBjYWxsLgogKiBNb2RpZnlpbmcgdGhlIG1hcCB3aGlsZSBpdGVyYXRpbmcgdGhlIGtleXMgb3IgdmFsdWVzCiAqIG1heSBhbHNvIGJyZWFrIHRoZSBpdGVyYXRpb24uCiAqCiAqIEl0IGlzIGdlbmVyYWxseSBub3QgYWxsb3dlZCB0byBtb2RpZnkgdGhlIGVxdWFsaXR5IG9mIGtleXMgKGFuZCB0aHVzIG5vdAogKiB0aGVpciBoYXNoY29kZSkgd2hpbGUgdGhleSBhcmUgaW4gdGhlIG1hcC4gU29tZSBzcGVjaWFsaXplZCBzdWJ0eXBlcyBtYXkgYmUKICogbW9yZSBwZXJtaXNzaXZlLCBpbiB3aGljaCBjYXNlIHRoZXkgc2hvdWxkIGRvY3VtZW50IHRoaXMgYmVoYXZpb3IuCiAqLwphYnN0cmFjdCBjbGFzcyBNYXA8SywgVj4gewogIC8qKgogICAqIENyZWF0ZXMgYSBNYXAgaW5zdGFuY2Ugd2l0aCB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiwgW0xpbmtlZEhhc2hNYXBdLgogICAqCiAgICogVGhpcyBjb25zdHJ1Y3RvciBpcyBlcXVpdmFsZW50IHRvIHRoZSBub24tY29uc3QgbWFwIGxpdGVyYWwgYDxLLFY+e31gLgogICAqCiAgICogQSBgTGlua2VkSGFzaE1hcGAgcmVxdWlyZXMgdGhlIGtleXMgdG8gaW1wbGVtZW50IGNvbXBhdGlibGUKICAgKiBgb3BlcmF0b3I9PWAgYW5kIGBoYXNoQ29kZWAsIGFuZCBpdCBhbGxvd3MgbnVsbCBhcyBhIGtleS4KICAgKiBJdCBpdGVyYXRlcyBpbiBrZXkgaW5zZXJ0aW9uIG9yZGVyLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgTWFwKCk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbTGlua2VkSGFzaE1hcF0gaW5zdGFuY2UgdGhhdCBjb250YWlucyBhbGwga2V5L3ZhbHVlIHBhaXJzIG9mCiAgICogW290aGVyXS4KICAgKgogICAqIFRoZSBrZXlzIG11c3QgYWxsIGJlIGluc3RhbmNlcyBvZiBbS10gYW5kIHRoZSB2YWx1ZXMgb2YgW1ZdLgogICAqIFRoZSBbb3RoZXJdIG1hcCBpdHNlbGYgY2FuIGhhdmUgYW55IHR5cGUuCiAgICoKICAgKiBBIGBMaW5rZWRIYXNoTWFwYCByZXF1aXJlcyB0aGUga2V5cyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZQogICAqIGBvcGVyYXRvcj09YCBhbmQgYGhhc2hDb2RlYCwgYW5kIGl0IGFsbG93cyBgbnVsbGAgYXMgYSBrZXkuCiAgICogSXQgaXRlcmF0ZXMgaW4ga2V5IGluc2VydGlvbiBvcmRlci4KICAgKi8KICBmYWN0b3J5IE1hcC5mcm9tKE1hcCBvdGhlcikgPSBMaW5rZWRIYXNoTWFwPEssIFY+LmZyb207CgogIC8qKgogICAqIENyZWF0ZXMgYSBbTGlua2VkSGFzaE1hcF0gd2l0aCB0aGUgc2FtZSBrZXlzIGFuZCB2YWx1ZXMgYXMgW290aGVyXS4KICAgKgogICAqIEEgYExpbmtlZEhhc2hNYXBgIHJlcXVpcmVzIHRoZSBrZXlzIHRvIGltcGxlbWVudCBjb21wYXRpYmxlCiAgICogYG9wZXJhdG9yPT1gIGFuZCBgaGFzaENvZGVgLCBhbmQgaXQgYWxsb3dzIGBudWxsYCBhcyBhIGtleS4KICAgKiBJdCBpdGVyYXRlcyBpbiBrZXkgaW5zZXJ0aW9uIG9yZGVyLgogICAqLwogIGZhY3RvcnkgTWFwLm9mKE1hcDxLLCBWPiBvdGhlcikgPSBMaW5rZWRIYXNoTWFwPEssIFY+Lm9mOwoKICAvKioKICAgKiBDcmVhdGVzIGFuIHVubW9kaWZpYWJsZSBoYXNoIGJhc2VkIG1hcCBjb250YWluaW5nIHRoZSBlbnRyaWVzIG9mIFtvdGhlcl0uCiAgICoKICAgKiBUaGUga2V5cyBtdXN0IGFsbCBiZSBpbnN0YW5jZXMgb2YgW0tdIGFuZCB0aGUgdmFsdWVzIG9mIFtWXS4KICAgKiBUaGUgW290aGVyXSBtYXAgaXRzZWxmIGNhbiBoYXZlIGFueSB0eXBlLgogICAqCiAgICogVGhlIG1hcCByZXF1aXJlcyB0aGUga2V5cyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZQogICAqIGBvcGVyYXRvcj09YCBhbmQgYGhhc2hDb2RlYCwgYW5kIGl0IGFsbG93cyBgbnVsbGAgYXMgYSBrZXkuCiAgICogVGhlIGNyZWF0ZWQgbWFwIGl0ZXJhdGVzIGtleXMgaW4gYSBmaXhlZCBvcmRlciwKICAgKiBwcmVzZXJ2aW5nIHRoZSBvcmRlciBwcm92aWRlZCBieSBbb3RoZXJdLgogICAqCiAgICogVGhlIHJlc3VsdGluZyBtYXAgYmVoYXZlcyBsaWtlIHRoZSByZXN1bHQgb2YgW01hcC5mcm9tXSwKICAgKiBleGNlcHQgdGhhdCB0aGUgbWFwIHJldHVybmVkIGJ5IHRoaXMgY29uc3RydWN0b3IgaXMgbm90IG1vZGlmaWFibGUuCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBNYXAudW5tb2RpZmlhYmxlKE1hcCBvdGhlcik7CgogIC8qKgogICAqIENyZWF0ZXMgYW4gaWRlbnRpdHkgbWFwIHdpdGggdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24sIFtMaW5rZWRIYXNoTWFwXS4KICAgKgogICAqIEFuIGlkZW50aXR5IG1hcCB1c2VzIFtpZGVudGljYWxdIGZvciBlcXVhbGl0eSBhbmQgW2lkZW50aXR5SGFzaENvZGVdCiAgICogZm9yIGhhc2ggY29kZXMgb2Yga2V5cyBpbnN0ZWFkIG9mIHRoZSBpbnRyaW5zaWMgW09iamVjdC5vcGVyYXRvcj09XSBhbmQKICAgKiBbT2JqZWN0Lmhhc2hDb2RlXSBvZiB0aGUga2V5cy4KICAgKgogICAqIFRoZSByZXR1cm5lZCBtYXAgYWxsb3dzIGBudWxsYCBhcyBhIGtleS4KICAgKiBJdCBpdGVyYXRlcyBpbiBrZXkgaW5zZXJ0aW9uIG9yZGVyLgogICAqLwogIGZhY3RvcnkgTWFwLmlkZW50aXR5KCkgPSBMaW5rZWRIYXNoTWFwPEssIFY+LmlkZW50aXR5OwoKICAvKioKICAgKiBDcmVhdGVzIGEgTWFwIGluc3RhbmNlIGluIHdoaWNoIHRoZSBrZXlzIGFuZCB2YWx1ZXMgYXJlIGNvbXB1dGVkIGZyb20gdGhlCiAgICogW2l0ZXJhYmxlXS4KICAgKgogICAqIFRoZSBjcmVhdGVkIG1hcCBpcyBhIFtMaW5rZWRIYXNoTWFwXS4KICAgKiBBIGBMaW5rZWRIYXNoTWFwYCByZXF1aXJlcyB0aGUga2V5cyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZQogICAqIGBvcGVyYXRvcj09YCBhbmQgYGhhc2hDb2RlYCwgYW5kIGl0IGFsbG93cyBudWxsIGFzIGEga2V5LgogICAqIEl0IGl0ZXJhdGVzIGluIGtleSBpbnNlcnRpb24gb3JkZXIuCiAgICoKICAgKiBGb3IgZWFjaCBlbGVtZW50IG9mIHRoZSBbaXRlcmFibGVdIHRoaXMgY29uc3RydWN0b3IgY29tcHV0ZXMgYSBrZXkvdmFsdWUKICAgKiBwYWlyLCBieSBhcHBseWluZyBba2V5XSBhbmQgW3ZhbHVlXSByZXNwZWN0aXZlbHkuCiAgICoKICAgKiBUaGUgZXhhbXBsZSBiZWxvdyBjcmVhdGVzIGEgbmV3IE1hcCBmcm9tIGEgTGlzdC4gVGhlIGtleXMgb2YgYG1hcGAgYXJlCiAgICogYGxpc3RgIHZhbHVlcyBjb252ZXJ0ZWQgdG8gc3RyaW5ncywgYW5kIHRoZSB2YWx1ZXMgb2YgdGhlIGBtYXBgIGFyZSB0aGUKICAgKiBzcXVhcmVzIG9mIHRoZSBgbGlzdGAgdmFsdWVzOgogICAqCiAgICogICAgIExpc3Q8aW50PiBsaXN0ID0gWzEsIDIsIDNdOwogICAqICAgICBNYXA8U3RyaW5nLCBpbnQ+IG1hcCA9IG5ldyBNYXAuZnJvbUl0ZXJhYmxlKGxpc3QsCiAgICogICAgICAgICBrZXk6IChpdGVtKSA9PiBpdGVtLnRvU3RyaW5nKCksCiAgICogICAgICAgICB2YWx1ZTogKGl0ZW0pID0+IGl0ZW0gKiBpdGVtKTsKICAgKgogICAqICAgICBtYXBbJzEnXSArIG1hcFsnMiddOyAvLyAxICsgNAogICAqICAgICBtYXBbJzMnXSAtIG1hcFsnMiddOyAvLyA5IC0gNAogICAqCiAgICogSWYgbm8gdmFsdWVzIGFyZSBzcGVjaWZpZWQgZm9yIFtrZXldIGFuZCBbdmFsdWVdIHRoZSBkZWZhdWx0IGlzIHRoZQogICAqIGlkZW50aXR5IGZ1bmN0aW9uLgogICAqCiAgICogSW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCB0aGUga2V5cyBhbmQgY29ycmVzcG9uZGluZyB2YWx1ZXMgb2YgYG1hcGAKICAgKiBhcmUgYGxpc3RgIHZhbHVlczoKICAgKgogICAqICAgICBtYXAgPSBuZXcgTWFwLmZyb21JdGVyYWJsZShsaXN0KTsKICAgKiAgICAgbWFwWzFdICsgbWFwWzJdOyAvLyAxICsgMgogICAqICAgICBtYXBbM10gLSBtYXBbMl07IC8vIDMgLSAyCiAgICoKICAgKiBUaGUga2V5cyBjb21wdXRlZCBieSB0aGUgc291cmNlIFtpdGVyYWJsZV0gZG8gbm90IG5lZWQgdG8gYmUgdW5pcXVlLiBUaGUKICAgKiBsYXN0IG9jY3VycmVuY2Ugb2YgYSBrZXkgd2lsbCBzaW1wbHkgb3ZlcndyaXRlIGFueSBwcmV2aW91cyB2YWx1ZS4KICAgKi8KICBmYWN0b3J5IE1hcC5mcm9tSXRlcmFibGUoSXRlcmFibGUgaXRlcmFibGUsCiAgICAgIHtLIGtleShlbGVtZW50KSwgViB2YWx1ZShlbGVtZW50KX0pID0gTGlua2VkSGFzaE1hcDxLLCBWPi5mcm9tSXRlcmFibGU7CgogIC8qKgogICAqIENyZWF0ZXMgYSBNYXAgaW5zdGFuY2UgYXNzb2NpYXRpbmcgdGhlIGdpdmVuIFtrZXlzXSB0byBbdmFsdWVzXS4KICAgKgogICAqIFRoZSBjcmVhdGVkIG1hcCBpcyBhIFtMaW5rZWRIYXNoTWFwXS4KICAgKiBBIGBMaW5rZWRIYXNoTWFwYCByZXF1aXJlcyB0aGUga2V5cyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZQogICAqIGBvcGVyYXRvcj09YCBhbmQgYGhhc2hDb2RlYCwgYW5kIGl0IGFsbG93cyBudWxsIGFzIGEga2V5LgogICAqIEl0IGl0ZXJhdGVzIGluIGtleSBpbnNlcnRpb24gb3JkZXIuCiAgICoKICAgKiBUaGlzIGNvbnN0cnVjdG9yIGl0ZXJhdGVzIG92ZXIgW2tleXNdIGFuZCBbdmFsdWVzXSBhbmQgbWFwcyBlYWNoIGVsZW1lbnQgb2YKICAgKiBba2V5c10gdG8gdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiBbdmFsdWVzXS4KICAgKgogICAqICAgICBMaXN0PFN0cmluZz4gbGV0dGVycyA9IFsnYicsICdjJ107CiAgICogICAgIExpc3Q8U3RyaW5nPiB3b3JkcyA9IFsnYmFkJywgJ2NhdCddOwogICAqICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCA9IG5ldyBNYXAuZnJvbUl0ZXJhYmxlcyhsZXR0ZXJzLCB3b3Jkcyk7CiAgICogICAgIG1hcFsnYiddICsgbWFwWydjJ107ICAvLyBiYWRjYXQKICAgKgogICAqIElmIFtrZXlzXSBjb250YWlucyB0aGUgc2FtZSBvYmplY3QgbXVsdGlwbGUgdGltZXMsIHRoZSBsYXN0IG9jY3VycmVuY2UKICAgKiBvdmVyd3JpdGVzIHRoZSBwcmV2aW91cyB2YWx1ZS4KICAgKgogICAqIFRoZSB0d28gW0l0ZXJhYmxlXXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aC4KICAgKi8KICBmYWN0b3J5IE1hcC5mcm9tSXRlcmFibGVzKEl0ZXJhYmxlPEs+IGtleXMsIEl0ZXJhYmxlPFY+IHZhbHVlcykgPQogICAgICBMaW5rZWRIYXNoTWFwPEssIFY+LmZyb21JdGVyYWJsZXM7CgogIC8qKgogICAqIEFkYXB0cyBbc291cmNlXSB0byBiZSBhIGBNYXA8SzIsIFYyPmAuCiAgICoKICAgKiBBbnkgdGltZSB0aGUgc2V0IHdvdWxkIHByb2R1Y2UgYSBrZXkgb3IgdmFsdWUgdGhhdCBpcyBub3QgYSBbSzJdIG9yIFtWMl0sCiAgICogdGhlIGFjY2VzcyB3aWxsIHRocm93LgogICAqCiAgICogQW55IHRpbWUgW0syXSBrZXkgb3IgW1YyXSB2YWx1ZSBpcyBhdHRlbXB0ZWQgYWRkZWQgaW50byB0aGUgYWRhcHRlZCBtYXAsCiAgICogdGhlIHN0b3JlIHdpbGwgdGhyb3cgdW5sZXNzIHRoZSBrZXkgaXMgYWxzbyBhbiBpbnN0YW5jZSBvZiBbS10gYW5kCiAgICogdGhlIHZhbHVlIGlzIGFsc28gYW4gaW5zdGFuY2Ugb2YgW1ZdLgogICAqCiAgICogSWYgYWxsIGFjY2Vzc2VkIGVudHJpZXMgb2YgW3NvdXJjZV0gYXJlIGhhdmUgW0syXSBrZXlzIGFuZCBbVjJdIHZhbHVlcwogICAqIGFuZCBpZiBhbGwgZW50cmllcyBhZGRlZCB0byB0aGUgcmV0dXJuZWQgbWFwIGhhdmUgW0tdIGtleXMgYW5kIFtWXV0gdmFsdWVzLAogICAqIHRoZW4gdGhlIHJldHVybmVkIG1hcCBjYW4gYmUgdXNlZCBhcyBhIGBNYXA8SzIsIFYyPmAuCiAgICovCiAgc3RhdGljIE1hcDxLMiwgVjI+IGNhc3RGcm9tPEssIFYsIEsyLCBWMj4oTWFwPEssIFY+IHNvdXJjZSkgPT4KICAgICAgQ2FzdE1hcDxLLCBWLCBLMiwgVjI+KHNvdXJjZSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgbWFwIGFuZCBhZGRzIGFsbCBlbnRyaWVzLgogICAqCiAgICogUmV0dXJucyBhIG5ldyBgTWFwPEssIFY+YCB3aGVyZSBhbGwgZW50cmllcyBvZiBbZW50cmllc10KICAgKiBoYXZlIGJlZW4gYWRkZWQgaW4gaXRlcmF0aW9uIG9yZGVyLgogICAqCiAgICogSWYgbXVsdGlwbGUgW2VudHJpZXNdIGhhdmUgdGhlIHNhbWUga2V5LAogICAqIGxhdGVyIG9jY3VycmVuY2VzIG92ZXJ3cml0ZSB0aGUgZWFybGllciBvbmVzLgogICAqLwogIGZhY3RvcnkgTWFwLmZyb21FbnRyaWVzKEl0ZXJhYmxlPE1hcEVudHJ5PEssIFY+PiBlbnRyaWVzKSA9PgogICAgICA8SywgVj57fS4uYWRkRW50cmllcyhlbnRyaWVzKTsKCiAgLyoqCiAgICogUHJvdmlkZXMgYSB2aWV3IG9mIHRoaXMgbWFwIGFzIGhhdmluZyBbUktdIGtleXMgYW5kIFtSVl0gaW5zdGFuY2VzLAogICAqIGlmIG5lY2Vzc2FyeS4KICAgKgogICAqIElmIHRoaXMgbWFwIGlzIGFscmVhZHkgYSBgTWFwPFJLLCBSVj5gLCBpdCBpcyByZXR1cm5lZCB1bmNoYW5nZWQuCiAgICoKICAgKiBJZiB0aGlzIHNldCBjb250YWlucyBvbmx5IGtleXMgb2YgdHlwZSBbUktdIGFuZCB2YWx1ZXMgb2YgdHlwZSBbUlZdLAogICAqIGFsbCByZWFkIG9wZXJhdGlvbnMgd2lsbCB3b3JrIGNvcnJlY3RseS4KICAgKiBJZiBhbnkgb3BlcmF0aW9uIGV4cG9zZXMgYSBub24tW1JLXSBrZXkgb3Igbm9uLVtSVl0gdmFsdWUsCiAgICogdGhlIG9wZXJhdGlvbiB3aWxsIHRocm93IGluc3RlYWQuCiAgICoKICAgKiBFbnRyaWVzIGFkZGVkIHRvIHRoZSBtYXAgbXVzdCBiZSB2YWxpZCBmb3IgYm90aCBhIGBNYXA8SywgVj5gIGFuZCBhCiAgICogYE1hcDxSSywgUlY+YC4KICAgKi8KICBNYXA8UkssIFJWPiBjYXN0PFJLLCBSVj4oKTsKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBtYXAgY29udGFpbnMgdGhlIGdpdmVuIFt2YWx1ZV0uCiAgICoKICAgKiBSZXR1cm5zIHRydWUgaWYgYW55IG9mIHRoZSB2YWx1ZXMgaW4gdGhlIG1hcCBhcmUgZXF1YWwgdG8gYHZhbHVlYAogICAqIGFjY29yZGluZyB0byB0aGUgYD09YCBvcGVyYXRvci4KICAgKi8KICBib29sIGNvbnRhaW5zVmFsdWUoT2JqZWN0IHZhbHVlKTsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgbWFwIGNvbnRhaW5zIHRoZSBnaXZlbiBba2V5XS4KICAgKgogICAqIFJldHVybnMgdHJ1ZSBpZiBhbnkgb2YgdGhlIGtleXMgaW4gdGhlIG1hcCBhcmUgZXF1YWwgdG8gYGtleWAKICAgKiBhY2NvcmRpbmcgdG8gdGhlIGVxdWFsaXR5IHVzZWQgYnkgdGhlIG1hcC4KICAgKi8KICBib29sIGNvbnRhaW5zS2V5KE9iamVjdCBrZXkpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIFtrZXldIG9yIG51bGwgaWYgW2tleV0gaXMgbm90IGluIHRoZSBtYXAuCiAgICoKICAgKiBTb21lIG1hcHMgYWxsb3cga2V5cyB0byBoYXZlIGBudWxsYCBhcyBhIHZhbHVlLgogICAqIEZvciB0aG9zZSBtYXBzLCBhIGxvb2t1cCB1c2luZyB0aGlzIG9wZXJhdG9yIGNhbm5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIGEKICAgKiBrZXkgbm90IGJlaW5nIGluIHRoZSBtYXAgYW5kIHRoZSBrZXkgaGF2aW5nIGEgYG51bGxgIHZhbHVlLgogICAqIE1ldGhvZHMgbGlrZSBbY29udGFpbnNLZXldIG9yIFtwdXRJZkFic2VudF0gY2FuIGJlIHVzZWQgaWYgdGhlIGRpc3RpbmN0aW9uCiAgICogaXMgaW1wb3J0YW50LgogICAqLwogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSk7CgogIC8qKgogICAqIEFzc29jaWF0ZXMgdGhlIFtrZXldIHdpdGggdGhlIGdpdmVuIFt2YWx1ZV0uCiAgICoKICAgKiBJZiB0aGUga2V5IHdhcyBhbHJlYWR5IGluIHRoZSBtYXAsIGl0cyBhc3NvY2lhdGVkIHZhbHVlIGlzIGNoYW5nZWQuCiAgICogT3RoZXJ3aXNlIHRoZSBrZXkvdmFsdWUgcGFpciBpcyBhZGRlZCB0byB0aGUgbWFwLgogICAqLwogIHZvaWQgb3BlcmF0b3IgW109KEsga2V5LCBWIHZhbHVlKTsKCiAgLyoqCiAgICogVGhlIG1hcCBlbnRyaWVzIG9mIFt0aGlzXS4KICAgKi8KICBJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZ2V0IGVudHJpZXM7CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgbWFwIHdoZXJlIGFsbCBlbnRyaWVzIG9mIHRoaXMgbWFwIGFyZSB0cmFuc2Zvcm1lZCBieQogICAqIHRoZSBnaXZlbiBbZl0gZnVuY3Rpb24uCiAgICovCiAgTWFwPEsyLCBWMj4gbWFwPEsyLCBWMj4oTWFwRW50cnk8SzIsIFYyPiBmKEsga2V5LCBWIHZhbHVlKSk7CgogIC8qKgogICAqIEFkZHMgYWxsIGtleS92YWx1ZSBwYWlycyBvZiBbbmV3RW50cmllc10gdG8gdGhpcyBtYXAuCiAgICoKICAgKiBJZiBhIGtleSBvZiBbbmV3RW50cmllc10gaXMgYWxyZWFkeSBpbiB0aGlzIG1hcCwKICAgKiB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpcyBvdmVyd3JpdHRlbi4KICAgKgogICAqIFRoZSBvcGVyYXRpb24gaXMgZXF1aXZhbGVudCB0byBkb2luZyBgdGhpc1tlbnRyeS5rZXldID0gZW50cnkudmFsdWVgCiAgICogZm9yIGVhY2ggW01hcEVudHJ5XSBvZiB0aGUgaXRlcmFibGUuCiAgICovCiAgdm9pZCBhZGRFbnRyaWVzKEl0ZXJhYmxlPE1hcEVudHJ5PEssIFY+PiBuZXdFbnRyaWVzKTsKCiAgLyoqCiAgICogVXBkYXRlcyB0aGUgdmFsdWUgZm9yIHRoZSBwcm92aWRlZCBba2V5XS4KICAgKgogICAqIFJldHVybnMgdGhlIG5ldyB2YWx1ZSBvZiB0aGUga2V5LgogICAqCiAgICogSWYgdGhlIGtleSBpcyBwcmVzZW50LCBpbnZva2VzIFt1cGRhdGVdIHdpdGggdGhlIGN1cnJlbnQgdmFsdWUgYW5kIHN0b3JlcwogICAqIHRoZSBuZXcgdmFsdWUgaW4gdGhlIG1hcC4KICAgKgogICAqIElmIHRoZSBrZXkgaXMgbm90IHByZXNlbnQgYW5kIFtpZkFic2VudF0gaXMgcHJvdmlkZWQsIGNhbGxzIFtpZkFic2VudF0KICAgKiBhbmQgYWRkcyB0aGUga2V5IHdpdGggdGhlIHJldHVybmVkIHZhbHVlIHRvIHRoZSBtYXAuCiAgICoKICAgKiBJdCdzIGFuIGVycm9yIGlmIHRoZSBrZXkgaXMgbm90IHByZXNlbnQgYW5kIFtpZkFic2VudF0gaXMgbm90IHByb3ZpZGVkLgogICAqLwogIFYgdXBkYXRlKEsga2V5LCBWIHVwZGF0ZShWIHZhbHVlKSwge1YgaWZBYnNlbnQoKX0pOwoKICAvKioKICAgKiBVcGRhdGVzIGFsbCB2YWx1ZXMuCiAgICoKICAgKiBJdGVyYXRlcyBvdmVyIGFsbCBlbnRyaWVzIGluIHRoZSBtYXAgYW5kIHVwZGF0ZXMgdGhlbSB3aXRoIHRoZSByZXN1bHQKICAgKiBvZiBpbnZva2luZyBbdXBkYXRlXS4KICAgKi8KICB2b2lkIHVwZGF0ZUFsbChWIHVwZGF0ZShLIGtleSwgViB2YWx1ZSkpOwoKICAvKioKICAgKiBSZW1vdmVzIGFsbCBlbnRyaWVzIG9mIHRoaXMgbWFwIHRoYXQgc2F0aXNmeSB0aGUgZ2l2ZW4gW3ByZWRpY2F0ZV0uCiAgICovCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHByZWRpY2F0ZShLIGtleSwgViB2YWx1ZSkpOwoKICAvKioKICAgKiBMb29rIHVwIHRoZSB2YWx1ZSBvZiBba2V5XSwgb3IgYWRkIGEgbmV3IHZhbHVlIGlmIGl0IGlzbid0IHRoZXJlLgogICAqCiAgICogUmV0dXJucyB0aGUgdmFsdWUgYXNzb2NpYXRlZCB0byBba2V5XSwgaWYgdGhlcmUgaXMgb25lLgogICAqIE90aGVyd2lzZSBjYWxscyBbaWZBYnNlbnRdIHRvIGdldCBhIG5ldyB2YWx1ZSwgYXNzb2NpYXRlcyBba2V5XSB0bwogICAqIHRoYXQgdmFsdWUsIGFuZCB0aGVuIHJldHVybnMgdGhlIG5ldyB2YWx1ZS4KICAgKgogICAqICAgICBNYXA8U3RyaW5nLCBpbnQ+IHNjb3JlcyA9IHsnQm9iJzogMzZ9OwogICAqICAgICBmb3IgKHZhciBrZXkgaW4gWydCb2InLCAnUm9oYW4nLCAnU29waGVuYSddKSB7CiAgICogICAgICAgc2NvcmVzLnB1dElmQWJzZW50KGtleSwgKCkgPT4ga2V5Lmxlbmd0aCk7CiAgICogICAgIH0KICAgKiAgICAgc2NvcmVzWydCb2InXTsgICAgICAvLyAzNgogICAqICAgICBzY29yZXNbJ1JvaGFuJ107ICAgIC8vICA1CiAgICogICAgIHNjb3Jlc1snU29waGVuYSddOyAgLy8gIDcKICAgKgogICAqIENhbGxpbmcgW2lmQWJzZW50XSBtdXN0IG5vdCBhZGQgb3IgcmVtb3ZlIGtleXMgZnJvbSB0aGUgbWFwLgogICAqLwogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSk7CgogIC8qKgogICAqIEFkZHMgYWxsIGtleS92YWx1ZSBwYWlycyBvZiBbb3RoZXJdIHRvIHRoaXMgbWFwLgogICAqCiAgICogSWYgYSBrZXkgb2YgW290aGVyXSBpcyBhbHJlYWR5IGluIHRoaXMgbWFwLCBpdHMgdmFsdWUgaXMgb3ZlcndyaXR0ZW4uCiAgICoKICAgKiBUaGUgb3BlcmF0aW9uIGlzIGVxdWl2YWxlbnQgdG8gZG9pbmcgYHRoaXNba2V5XSA9IHZhbHVlYCBmb3IgZWFjaCBrZXkKICAgKiBhbmQgYXNzb2NpYXRlZCB2YWx1ZSBpbiBvdGhlci4gSXQgaXRlcmF0ZXMgb3ZlciBbb3RoZXJdLCB3aGljaCBtdXN0CiAgICogdGhlcmVmb3JlIG5vdCBjaGFuZ2UgZHVyaW5nIHRoZSBpdGVyYXRpb24uCiAgICovCiAgdm9pZCBhZGRBbGwoTWFwPEssIFY+IG90aGVyKTsKCiAgLyoqCiAgICogUmVtb3ZlcyBba2V5XSBhbmQgaXRzIGFzc29jaWF0ZWQgdmFsdWUsIGlmIHByZXNlbnQsIGZyb20gdGhlIG1hcC4KICAgKgogICAqIFJldHVybnMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBga2V5YCBiZWZvcmUgaXQgd2FzIHJlbW92ZWQuCiAgICogUmV0dXJucyBgbnVsbGAgaWYgYGtleWAgd2FzIG5vdCBpbiB0aGUgbWFwLgogICAqCiAgICogTm90ZSB0aGF0IHZhbHVlcyBjYW4gYmUgYG51bGxgIGFuZCBhIHJldHVybmVkIGBudWxsYCB2YWx1ZSBkb2Vzbid0CiAgICogYWx3YXlzIG1lYW4gdGhhdCB0aGUga2V5IHdhcyBhYnNlbnQuCiAgICovCiAgViByZW1vdmUoT2JqZWN0IGtleSk7CgogIC8qKgogICAqIFJlbW92ZXMgYWxsIHBhaXJzIGZyb20gdGhlIG1hcC4KICAgKgogICAqIEFmdGVyIHRoaXMsIHRoZSBtYXAgaXMgZW1wdHkuCiAgICovCiAgdm9pZCBjbGVhcigpOwoKICAvKioKICAgKiBBcHBsaWVzIFtmXSB0byBlYWNoIGtleS92YWx1ZSBwYWlyIG9mIHRoZSBtYXAuCiAgICoKICAgKiBDYWxsaW5nIGBmYCBtdXN0IG5vdCBhZGQgb3IgcmVtb3ZlIGtleXMgZnJvbSB0aGUgbWFwLgogICAqLwogIHZvaWQgZm9yRWFjaCh2b2lkIGYoSyBrZXksIFYgdmFsdWUpKTsKCiAgLyoqCiAgICogVGhlIGtleXMgb2YgW3RoaXNdLgogICAqCiAgICogVGhlIHJldHVybmVkIGl0ZXJhYmxlIGhhcyBlZmZpY2llbnQgYGxlbmd0aGAgYW5kIGBjb250YWluc2Agb3BlcmF0aW9ucywKICAgKiBiYXNlZCBvbiBbbGVuZ3RoXSBhbmQgW2NvbnRhaW5zS2V5XSBvZiB0aGUgbWFwLgogICAqCiAgICogVGhlIG9yZGVyIG9mIGl0ZXJhdGlvbiBpcyBkZWZpbmVkIGJ5IHRoZSBpbmRpdmlkdWFsIGBNYXBgIGltcGxlbWVudGF0aW9uLAogICAqIGJ1dCBtdXN0IGJlIGNvbnNpc3RlbnQgYmV0d2VlbiBjaGFuZ2VzIHRvIHRoZSBtYXAuCiAgICoKICAgKiBNb2RpZnlpbmcgdGhlIG1hcCB3aGlsZSBpdGVyYXRpbmcgdGhlIGtleXMKICAgKiBtYXkgYnJlYWsgdGhlIGl0ZXJhdGlvbi4KICAgKi8KICBJdGVyYWJsZTxLPiBnZXQga2V5czsKCiAgLyoqCiAgICogVGhlIHZhbHVlcyBvZiBbdGhpc10uCiAgICoKICAgKiBUaGUgdmFsdWVzIGFyZSBpdGVyYXRlZCBpbiB0aGUgb3JkZXIgb2YgdGhlaXIgY29ycmVzcG9uZGluZyBrZXlzLgogICAqIFRoaXMgbWVhbnMgdGhhdCBpdGVyYXRpbmcgW2tleXNdIGFuZCBbdmFsdWVzXSBpbiBwYXJhbGxlbCB3aWxsCiAgICogcHJvdmlkZSBtYXRjaGluZyBwYWlycyBvZiBrZXlzIGFuZCB2YWx1ZXMuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgaXRlcmFibGUgaGFzIGFuIGVmZmljaWVudCBgbGVuZ3RoYCBtZXRob2QgYmFzZWQgb24gdGhlCiAgICogW2xlbmd0aF0gb2YgdGhlIG1hcC4gSXRzIFtJdGVyYWJsZS5jb250YWluc10gbWV0aG9kIGlzIGJhc2VkIG9uCiAgICogYD09YCBjb21wYXJpc29uLgogICAqCiAgICogTW9kaWZ5aW5nIHRoZSBtYXAgd2hpbGUgaXRlcmF0aW5nIHRoZQogICAqIHZhbHVlcyBtYXkgYnJlYWsgdGhlIGl0ZXJhdGlvbi4KICAgKi8KICBJdGVyYWJsZTxWPiBnZXQgdmFsdWVzOwoKICAvKioKICAgKiBUaGUgbnVtYmVyIG9mIGtleS92YWx1ZSBwYWlycyBpbiB0aGUgbWFwLgogICAqLwogIGludCBnZXQgbGVuZ3RoOwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgbm8ga2V5L3ZhbHVlIHBhaXIgaW4gdGhlIG1hcC4KICAgKi8KICBib29sIGdldCBpc0VtcHR5OwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGtleS92YWx1ZSBwYWlyIGluIHRoZSBtYXAuCiAgICovCiAgYm9vbCBnZXQgaXNOb3RFbXB0eTsKfQoKLyoqCiAqIEEga2V5L3ZhbHVlIHBhaXIgcmVwcmVzZW50aW5nIGFuIGVudHJ5IGluIGEgW01hcF0uCiAqLwpjbGFzcyBNYXBFbnRyeTxLLCBWPiB7CiAgLyoqIFRoZSBrZXkgb2YgdGhlIGVudHJ5LiAqLwogIGZpbmFsIEsga2V5OwoKICAvKiogVGhlIHZhbHVlIGFzc29jaWF0ZWQgdG8gW2tleV0gaW4gdGhlIG1hcC4gKi8KICBmaW5hbCBWIHZhbHVlOwoKICAvKiogQ3JlYXRlcyBhbiBlbnRyeSB3aXRoIFtrZXldIGFuZCBbdmFsdWVdLiAqLwogIGNvbnN0IGZhY3RvcnkgTWFwRW50cnkoSyBrZXksIFYgdmFsdWUpID0gTWFwRW50cnk8SywgVj4uXzsKCiAgY29uc3QgTWFwRW50cnkuXyh0aGlzLmtleSwgdGhpcy52YWx1ZSk7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJNYXBFbnRyeSgka2V5OiAkdmFsdWUpIjsKfQqBlgBOTjwBEwEERB0DMDoDNUQNA0A6TQNMTy04IQNMT0YEGwZOBUwFQT8pBhoBBk0OBUIvBUFBKQY6AQZJBUFBKQY8AQZPBUIvBTdBNS8FPkkGMAEGTwVKTSQFLikGOQEGTxEFK0E/KQVONwVMTSMFJTstLAUnJwVJGAVKGAUrIyMFTkgGLk4BBkYFK0E/KQVRNgUsLkopBUwkBTQGRCkBBiwFTxwFTkgrBUxROwZBJQEGLQU+KQUuMwY/JQEGSRMFRwVKLkAnBUkUBh4GOgVHJQYkAQY4BUMwBiABBk8FNU9BUBMGHQEGMgVJNwYlAQYgBigBBkgdBj8BBjsFNi0FSioGOAEGLwUnBU8fBUw6BU0GNgEGGQVLGwYsAQZJBjQBBkcFPUgxBTA4NgsjIyMFQgYmAQY2BUsFS0kwBiABBkcFRDEFSCoGGAEGJQUjBhABBjQFOwYoAQYZBU01BU84BTAeBhgBBhsFR0QwBUlFFgUrJQYaAQYvBhIBBjwGFAEGRgYXAgEENgQXHw8BMxEBMj0BKgExAgESZGFydDpjb3JlL21hcC5kYXJ0Lm9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvbWFwX3BhdGNoLmRhcnSD4S8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIE1hcDxLLCBWPiB7CiAgLy8gRmFjdG9yeSBjb25zdHJ1Y3RpbmcgYSBNYXAgZnJvbSBhIHBhcnNlciBnZW5lcmF0ZWQgTWFwIGxpdGVyYWwuCiAgLy8gW2VsZW1lbnRzXSBjb250YWlucyBuIGtleS12YWx1ZSBwYWlycy4KICAvLyBUaGUga2V5cyBhcmUgYXQgcG9zaXRpb24gMipuIGFuZCBhcmUgYWxyZWFkeSB0eXBlIGNoZWNrZWQgYnkgdGhlIHBhcnNlcgogIC8vIGluIGNoZWNrZWQgbW9kZS4KICAvLyBUaGUgdmFsdWVzIGFyZSBhdCBwb3NpdGlvbiAyKm4rMSBhbmQgYXJlIG5vdCB5ZXQgdHlwZSBjaGVja2VkLgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQogIGZhY3RvcnkgTWFwLl9mcm9tTGl0ZXJhbChMaXN0IGVsZW1lbnRzKSB7CiAgICB2YXIgbWFwID0gbmV3IExpbmtlZEhhc2hNYXA8SywgVj4oKTsKICAgIHZhciBsZW4gPSBlbGVtZW50cy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMTsgaSA8IGxlbjsgaSArPSAyKSB7CiAgICAgIG1hcFtlbGVtZW50c1tpIC0gMV1dID0gZWxlbWVudHNbaV07CiAgICB9CiAgICByZXR1cm4gbWFwOwogIH0KCiAgQHBhdGNoCiAgZmFjdG9yeSBNYXAudW5tb2RpZmlhYmxlKE1hcCBvdGhlcikgewogICAgcmV0dXJuIG5ldyBVbm1vZGlmaWFibGVNYXBWaWV3PEssIFY+KG5ldyBNYXA8SywgVj4uZnJvbShvdGhlcikpOwogIH0KCiAgQHBhdGNoCiAgZmFjdG9yeSBNYXAoKSA9PiBuZXcgTGlua2VkSGFzaE1hcDxLLCBWPigpOwp9CiEATk48AR4BBxJFLE0WRCQsKR8nKgYQBAEJKEUEAQkuAgEeZGFydDpjb3JlLXBhdGNoL21hcF9wYXRjaC5kYXJ0Km9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb3JlL251bGwuZGFydIKgLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIFRoZSByZXNlcnZlZCB3b3JkIFs6bnVsbDpdIGRlbm90ZXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhlIHNvbGUgaW5zdGFuY2Ugb2YgCiAqIHRoaXMgY2xhc3MuCiAqIAogKiBJdCBpcyBhIGNvbXBpbGUtdGltZSBlcnJvciBmb3IgYSBjbGFzcyB0byBhdHRlbXB0IHRvIGV4dGVuZCBvciBpbXBsZW1lbnQKICogTnVsbC4KICovCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgTnVsbCB7CiAgZmFjdG9yeSBOdWxsLl91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoJ2NsYXNzIE51bGwgY2Fubm90IGJlIGluc3RhbnRpYXRlZCcpOwogIH0KCiAgZXh0ZXJuYWwgaW50IGdldCBoYXNoQ29kZTsKCiAgLyoqIFJldHVybnMgdGhlIHN0cmluZyBgIm51bGwiYC4gKi8KICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAibnVsbCI7Cn0KGgBOTjwBEwEETg8ETAkEGg0jQQQBHQEmHwIBE2RhcnQ6Y29yZS9udWxsLmRhcnQvb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9udWxsX3BhdGNoLmRhcnSBzi8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKQHBhdGNoCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgTnVsbCB7CiAgc3RhdGljIGNvbnN0IF9IQVNIX0NPREUgPSAyMDExOyAvLyBUaGUgeWVhciBEYXJ0IHdhcyBhbm5vdW5jZWQgYW5kIGEgcHJpbWUuCgogIEBwYXRjaAogIGludCBnZXQgaGFzaENvZGUgPT4gX0hBU0hfQ09ERTsKCiAgaW50IGdldCBfaWRlbnRpdHlIYXNoQ29kZSA9PiBfSEFTSF9DT0RFOwp9ChIATk48AR4BBxoNTgEJIgErAgEfZGFydDpjb3JlLXBhdGNoL251bGxfcGF0Y2guZGFydClvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9udW0uZGFydMAARNYvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogQW4gaW50ZWdlciBvciBmbG9hdGluZy1wb2ludCBudW1iZXIuCiAqCiAqIEl0IGlzIGEgY29tcGlsZS10aW1lIGVycm9yIGZvciBhbnkgdHlwZSBvdGhlciB0aGFuIFtpbnRdIG9yIFtkb3VibGVdCiAqIHRvIGF0dGVtcHQgdG8gZXh0ZW5kIG9yIGltcGxlbWVudCBudW0uCiAqLwphYnN0cmFjdCBjbGFzcyBudW0gaW1wbGVtZW50cyBDb21wYXJhYmxlPG51bT4gewogIC8qKgogICAqIFRlc3Qgd2hldGhlciB0aGlzIHZhbHVlIGlzIG51bWVyaWNhbGx5IGVxdWFsIHRvIGBvdGhlcmAuCiAgICoKICAgKiBJZiBib3RoIG9wZXJhbmRzIGFyZSBkb3VibGVzLCB0aGV5IGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUKICAgKiByZXByZXNlbnRhdGlvbiwgZXhjZXB0IHRoYXQ6CiAgICoKICAgKiAgICogemVybyBhbmQgbWludXMgemVybyAoMC4wIGFuZCAtMC4wKSBhcmUgY29uc2lkZXJlZCBlcXVhbC4gVGhleQogICAqICAgICBib3RoIGhhdmUgdGhlIG51bWVyaWNhbCB2YWx1ZSB6ZXJvLgogICAqICAgKiBOYU4gaXMgbm90IGVxdWFsIHRvIGFueXRoaW5nLCBpbmNsdWRpbmcgTmFOLiBJZiBlaXRoZXIgb3BlcmFuZCBpcwogICAqICAgICBOYU4sIHRoZSByZXN1bHQgaXMgYWx3YXlzIGZhbHNlLgogICAqCiAgICogSWYgb25lIG9wZXJhbmQgaXMgYSBkb3VibGUgYW5kIHRoZSBvdGhlciBpcyBhbiBpbnQsIHRoZXkgYXJlIGVxdWFsIGlmCiAgICogdGhlIGRvdWJsZSBoYXMgYW4gaW50ZWdlciB2YWx1ZSAoZmluaXRlIHdpdGggbm8gZnJhY3Rpb25hbCBwYXJ0KSBhbmQKICAgKiBgaWRlbnRpY2FsKGRvdWJsZVZhbHVlLnRvSW50KCksIGludFZhbHVlKWAgaXMgdHJ1ZS4KICAgKgogICAqIElmIGJvdGggb3BlcmFuZHMgYXJlIGludGVnZXJzLCB0aGV5IGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgdmFsdWUuCiAgICoKICAgKiBSZXR1cm5zIGZhbHNlIGlmIGBvdGhlcmAgaXMgbm90IGEgW251bV0uCiAgICoKICAgKiBOb3RpY2UgdGhhdCB0aGUgYmVoYXZpb3IgZm9yIE5hTiBpcyBub24tcmVmbGV4aXZlLiBUaGlzIG1lYW5zIHRoYXQKICAgKiBlcXVhbGl0eSBvZiBkb3VibGUgdmFsdWVzIGlzIG5vdCBhIHByb3BlciBlcXVhbGl0eSByZWxhdGlvbiwgYXMgaXMKICAgKiBvdGhlcndpc2UgcmVxdWlyZWQgb2YgYG9wZXJhdG9yPT1gLiBVc2luZyBOYU4gaW4sIGUuZy4sIGEgW0hhc2hTZXRdCiAgICogd2lsbCBmYWlsIHRvIHdvcmsuIFRoZSBiZWhhdmlvciBpcyB0aGUgc3RhbmRhcmQgSUVFRS03NTQgZXF1YWxpdHkgb2YKICAgKiBkb3VibGVzLgogICAqCiAgICogSWYgeW91IGNhbiBhdm9pZCBOYU4gdmFsdWVzLCB0aGUgcmVtYWluaW5nIGRvdWJsZXMgZG8gaGF2ZSBhIHByb3BlcgogICAqIGVxdWFsaXR5IHJlbGF0aW9uLCBhbmQgY2FuIGJlIHVzZWQgc2FmZWx5LgogICAqCiAgICogVXNlIFtjb21wYXJlVG9dIGZvciBhIGNvbXBhcmlzb24gdGhhdCBkaXN0aW5ndWlzaGVzIHplcm8gYW5kIG1pbnVzIHplcm8sCiAgICogYW5kIHRoYXQgY29uc2lkZXJzIE5hTiB2YWx1ZXMgYXMgZXF1YWwuCiAgICovCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgaGFzaCBjb2RlIGZvciBhIG51bWVyaWNhbCB2YWx1ZS4KICAgKgogICAqIFRoZSBoYXNoIGNvZGUgaXMgY29tcGF0aWJsZSB3aXRoIGVxdWFsaXR5LiBJdCByZXR1cm5zIHRoZSBzYW1lIHZhbHVlCiAgICogZm9yIGFuIFtpbnRdIGFuZCBhIFtkb3VibGVdIHdpdGggdGhlIHNhbWUgbnVtZXJpY2FsIHZhbHVlLCBhbmQgdGhlcmVmb3JlCiAgICogdGhlIHNhbWUgdmFsdWUgZm9yIHRoZSBkb3VibGVzIHplcm8gYW5kIG1pbnVzIHplcm8uCiAgICoKICAgKiBObyBndWFyYW50ZWVzIGFyZSBtYWRlIGFib3V0IHRoZSBoYXNoIGNvZGUgb2YgTmFOIHZhbHVlcy4KICAgKi8KICBpbnQgZ2V0IGhhc2hDb2RlOwoKICAvKioKICAgKiBDb21wYXJlcyB0aGlzIHRvIGBvdGhlcmAuCiAgICoKICAgKiBSZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyIGlmIGB0aGlzYCBpcyBsZXNzIHRoYW4gYG90aGVyYCwgemVybyBpZiB0aGV5IGFyZQogICAqIGVxdWFsLCBhbmQgYSBwb3NpdGl2ZSBudW1iZXIgaWYgYHRoaXNgIGlzIGdyZWF0ZXIgdGhhbiBgb3RoZXJgLgogICAqCiAgICogVGhlIG9yZGVyaW5nIHJlcHJlc2VudGVkIGJ5IHRoaXMgbWV0aG9kIGlzIGEgdG90YWwgb3JkZXJpbmcgb2YgW251bV0KICAgKiB2YWx1ZXMuIEFsbCBkaXN0aW5jdCBkb3VibGVzIGFyZSBub24tZXF1YWwsIGFzIGFyZSBhbGwgZGlzdGluY3QgaW50ZWdlcnMsCiAgICogYnV0IGludGVnZXJzIGFyZSBlcXVhbCB0byBkb3VibGVzIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBudW1lcmljYWwKICAgKiB2YWx1ZS4KICAgKgogICAqIEZvciBkb3VibGVzLCB0aGUgYGNvbXBhcmVUb2Agb3BlcmF0aW9uIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBwYXJ0aWFsCiAgICogb3JkZXJpbmcgZ2l2ZW4gYnkgW29wZXJhdG9yPT1dLCBbb3BlcmF0b3I8XSBhbmQgW29wZXJhdG9yPl0uIEZvciBleGFtcGxlLAogICAqIElFRUUgZG91YmxlcyBpbXBvc2UgdGhhdCBgMC4wID09IC0wLjBgIGFuZCBhbGwgY29tcGFyaXNvbiBvcGVyYXRpb25zIG9uCiAgICogTmFOIHJldHVybiBmYWxzZS4KICAgKgogICAqIFRoaXMgZnVuY3Rpb24gaW1wb3NlcyBhIGNvbXBsZXRlIG9yZGVyaW5nIGZvciBkb3VibGVzLiBXaGVuIHVzaW5nCiAgICogYGNvbXBhcmVUb2AgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGhvbGQ6CiAgICoKICAgKiAtIEFsbCBOYU4gdmFsdWVzIGFyZSBjb25zaWRlcmVkIGVxdWFsLCBhbmQgZ3JlYXRlciB0aGFuIGFueSBudW1lcmljIHZhbHVlLgogICAqIC0gLTAuMCBpcyBsZXNzIHRoYW4gMC4wIChhbmQgdGhlIGludGVnZXIgMCksIGJ1dCBncmVhdGVyIHRoYW4gYW55IG5vbi16ZXJvCiAgICogICAgbmVnYXRpdmUgdmFsdWUuCiAgICogLSBOZWdhdGl2ZSBpbmZpbml0eSBpcyBsZXNzIHRoYW4gYWxsIG90aGVyIHZhbHVlcyBhbmQgcG9zaXRpdmUgaW5maW5pdHkgaXMKICAgKiAgIGdyZWF0ZXIgdGhhbiBhbGwgbm9uLU5hTiB2YWx1ZXMuCiAgICogLSBBbGwgb3RoZXIgdmFsdWVzIGFyZSBjb21wYXJlZCB1c2luZyB0aGVpciBudW1lcmljIHZhbHVlLgogICAqCiAgICogRXhhbXBsZXM6CiAgICogYGBgCiAgICogcHJpbnQoMS5jb21wYXJlVG8oMikpOyAvLyA9PiAtMQogICAqIHByaW50KDIuY29tcGFyZVRvKDEpKTsgLy8gPT4gMQogICAqIHByaW50KDEuY29tcGFyZVRvKDEpKTsgLy8gPT4gMAogICAqCiAgICogLy8gVGhlIGZvbGxvd2luZyBjb21wYXJpc29ucyB5aWVsZCBkaWZmZXJlbnQgcmVzdWx0cyB0aGFuIHRoZQogICAqIC8vIGNvcnJlc3BvbmRpbmcgY29tcGFyaXNvbiBvcGVyYXRvcnMuCiAgICogcHJpbnQoKC0wLjApLmNvbXBhcmVUbygwLjApKTsgIC8vID0+IC0xCiAgICogcHJpbnQoZG91YmxlLm5hbi5jb21wYXJlVG8oZG91YmxlLm5hbikpOyAgLy8gPT4gMAogICAqIHByaW50KGRvdWJsZS5pbmZpbml0eS5jb21wYXJlVG8oZG91YmxlLm5hbikpOyAvLyA9PiAtMQogICAqCiAgICogLy8gLTAuMCwgYW5kIE5hTiBjb21wYXJpc29uIG9wZXJhdG9ycyBoYXZlIHJ1bGVzIGltcG9zZWQgYnkgdGhlIElFRUUKICAgKiAvLyBzdGFuZGFyZC4KICAgKiBwcmludCgtMC4wID09IDAuMCk7IC8vID0+IHRydWUKICAgKiBwcmludChkb3VibGUubmFuID09IGRvdWJsZS5uYW4pOyAgLy8gPT4gZmFsc2UKICAgKiBwcmludChkb3VibGUuaW5maW5pdHkgPCBkb3VibGUubmFuKTsgIC8vID0+IGZhbHNlCiAgICogcHJpbnQoZG91YmxlLm5hbiA8IGRvdWJsZS5pbmZpbml0eSk7ICAvLyA9PiBmYWxzZQogICAqIHByaW50KGRvdWJsZS5uYW4gPT0gZG91YmxlLmluZmluaXR5KTsgIC8vID0+IGZhbHNlCiAgICogYGBgCiAgICovCiAgaW50IGNvbXBhcmVUbyhudW0gb3RoZXIpOwoKICAvKiogQWRkaXRpb24gb3BlcmF0b3IuICovCiAgbnVtIG9wZXJhdG9yICsobnVtIG90aGVyKTsKCiAgLyoqIFN1YnRyYWN0aW9uIG9wZXJhdG9yLiAqLwogIG51bSBvcGVyYXRvciAtKG51bSBvdGhlcik7CgogIC8qKiBNdWx0aXBsaWNhdGlvbiBvcGVyYXRvci4gKi8KICBudW0gb3BlcmF0b3IgKihudW0gb3RoZXIpOwoKICAvKioKICAgKiBFdWNsaWRlYW4gbW9kdWxvIG9wZXJhdG9yLgogICAqCiAgICogUmV0dXJucyB0aGUgcmVtYWluZGVyIG9mIHRoZSBFdWNsaWRlYW4gZGl2aXNpb24uIFRoZSBFdWNsaWRlYW4gZGl2aXNpb24gb2YKICAgKiB0d28gaW50ZWdlcnMgYGFgIGFuZCBgYmAgeWllbGRzIHR3byBpbnRlZ2VycyBgcWAgYW5kIGByYCBzdWNoIHRoYXQKICAgKiBgYSA9PSBiICogcSArIHJgIGFuZCBgMCA8PSByIDwgYi5hYnMoKWAuCiAgICoKICAgKiBUaGUgRXVjbGlkZWFuIGRpdmlzaW9uIGlzIG9ubHkgZGVmaW5lZCBmb3IgaW50ZWdlcnMsIGJ1dCBjYW4gYmUgZWFzaWx5CiAgICogZXh0ZW5kZWQgdG8gd29yayB3aXRoIGRvdWJsZXMuIEluIHRoYXQgY2FzZSBgcmAgbWF5IGhhdmUgYSBub24taW50ZWdlcgogICAqIHZhbHVlLCBidXQgaXQgc3RpbGwgdmVyaWZpZXMgYDAgPD0gciA8IHxifGAuCiAgICoKICAgKiBUaGUgc2lnbiBvZiB0aGUgcmV0dXJuZWQgdmFsdWUgYHJgIGlzIGFsd2F5cyBwb3NpdGl2ZS4KICAgKgogICAqIFNlZSBbcmVtYWluZGVyXSBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGUgdHJ1bmNhdGluZyBkaXZpc2lvbi4KICAgKi8KICBudW0gb3BlcmF0b3IgJShudW0gb3RoZXIpOwoKICAvKiogRGl2aXNpb24gb3BlcmF0b3IuICovCiAgZG91YmxlIG9wZXJhdG9yIC8obnVtIG90aGVyKTsKCiAgLyoqCiAgICogVHJ1bmNhdGluZyBkaXZpc2lvbiBvcGVyYXRvci4KICAgKgogICAqIElmIGVpdGhlciBvcGVyYW5kIGlzIGEgW2RvdWJsZV0gdGhlbiB0aGUgcmVzdWx0IG9mIHRoZSB0cnVuY2F0aW5nIGRpdmlzaW9uCiAgICogYGEgfi8gYmAgaXMgZXF1aXZhbGVudCB0byBgKGEgLyBiKS50cnVuY2F0ZSgpLnRvSW50KClgLgogICAqCiAgICogSWYgYm90aCBvcGVyYW5kcyBhcmUgW2ludF1zIHRoZW4gYGEgfi8gYmAgcGVyZm9ybXMgdGhlIHRydW5jYXRpbmcKICAgKiBpbnRlZ2VyIGRpdmlzaW9uLgogICAqLwogIGludCBvcGVyYXRvciB+LyhudW0gb3RoZXIpOwoKICAvKiogTmVnYXRlIG9wZXJhdG9yLiAqLwogIG51bSBvcGVyYXRvciAtKCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHJlbWFpbmRlciBvZiB0aGUgdHJ1bmNhdGluZyBkaXZpc2lvbiBvZiBgdGhpc2AgYnkgW290aGVyXS4KICAgKgogICAqIFRoZSByZXN1bHQgYHJgIG9mIHRoaXMgb3BlcmF0aW9uIHNhdGlzZmllczoKICAgKiBgdGhpcyA9PSAodGhpcyB+LyBvdGhlcikgKiBvdGhlciArIHJgLgogICAqIEFzIGEgY29uc2VxdWVuY2UgdGhlIHJlbWFpbmRlciBgcmAgaGFzIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRpdmlkZXIgYHRoaXNgLgogICAqLwogIG51bSByZW1haW5kZXIobnVtIG90aGVyKTsKCiAgLyoqIFJlbGF0aW9uYWwgbGVzcyB0aGFuIG9wZXJhdG9yLiAqLwogIGJvb2wgb3BlcmF0b3IgPChudW0gb3RoZXIpOwoKICAvKiogUmVsYXRpb25hbCBsZXNzIHRoYW4gb3IgZXF1YWwgb3BlcmF0b3IuICovCiAgYm9vbCBvcGVyYXRvciA8PShudW0gb3RoZXIpOwoKICAvKiogUmVsYXRpb25hbCBncmVhdGVyIHRoYW4gb3BlcmF0b3IuICovCiAgYm9vbCBvcGVyYXRvciA+KG51bSBvdGhlcik7CgogIC8qKiBSZWxhdGlvbmFsIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCBvcGVyYXRvci4gKi8KICBib29sIG9wZXJhdG9yID49KG51bSBvdGhlcik7CgogIC8qKiBUcnVlIGlmIHRoZSBudW1iZXIgaXMgdGhlIGRvdWJsZSBOb3QtYS1OdW1iZXIgdmFsdWU7IG90aGVyd2lzZSwgZmFsc2UuICovCiAgYm9vbCBnZXQgaXNOYU47CgogIC8qKgogICAqIFRydWUgaWYgdGhlIG51bWJlciBpcyBuZWdhdGl2ZTsgb3RoZXJ3aXNlLCBmYWxzZS4KICAgKgogICAqIE5lZ2F0aXZlIG51bWJlcnMgYXJlIHRob3NlIGxlc3MgdGhhbiB6ZXJvLCBhbmQgdGhlIGRvdWJsZSBgLTAuMGAuCiAgICovCiAgYm9vbCBnZXQgaXNOZWdhdGl2ZTsKCiAgLyoqCiAgICogVHJ1ZSBpZiB0aGUgbnVtYmVyIGlzIHBvc2l0aXZlIGluZmluaXR5IG9yIG5lZ2F0aXZlIGluZmluaXR5OyBvdGhlcndpc2UsCiAgICogZmFsc2UuCiAgICovCiAgYm9vbCBnZXQgaXNJbmZpbml0ZTsKCiAgLyoqCiAgICogVHJ1ZSBpZiB0aGUgbnVtYmVyIGlzIGZpbml0ZTsgb3RoZXJ3aXNlLCBmYWxzZS4KICAgKgogICAqIFRoZSBvbmx5IG5vbi1maW5pdGUgbnVtYmVycyBhcmUgTmFOLCBwb3NpdGl2ZSBpbmZpbml0eSwgYW5kCiAgICogbmVnYXRpdmUgaW5maW5pdHkuCiAgICovCiAgYm9vbCBnZXQgaXNGaW5pdGU7CgogIC8qKiBSZXR1cm5zIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGlzIFtudW1dLiAqLwogIG51bSBhYnMoKTsKCiAgLyoqCiAgICogUmV0dXJucyBtaW51cyBvbmUsIHplcm8gb3IgcGx1cyBvbmUgZGVwZW5kaW5nIG9uIHRoZSBzaWduIGFuZAogICAqIG51bWVyaWNhbCB2YWx1ZSBvZiB0aGUgbnVtYmVyLgogICAqCiAgICogUmV0dXJucyBtaW51cyBvbmUgaWYgdGhlIG51bWJlciBpcyBsZXNzIHRoYW4gemVybywKICAgKiBwbHVzIG9uZSBpZiB0aGUgbnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLAogICAqIGFuZCB6ZXJvIGlmIHRoZSBudW1iZXIgaXMgZXF1YWwgdG8gemVyby4KICAgKgogICAqIFJldHVybnMgTmFOIGlmIHRoZSBudW1iZXIgaXMgdGhlIGRvdWJsZSBOYU4gdmFsdWUuCiAgICoKICAgKiBSZXR1cm5zIGEgbnVtYmVyIG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhpcyBudW1iZXIuCiAgICogRm9yIGRvdWJsZXMsIGAtMC4wLnNpZ24gPT0gLTAuMGAuCgogICAqIFRoZSByZXN1bHQgc2F0aXNmaWVzOgogICAqCiAgICogICAgIG4gPT0gbi5zaWduICogbi5hYnMoKQogICAqCiAgICogZm9yIGFsbCBudW1iZXJzIGBuYCAoZXhjZXB0IE5hTiwgYmVjYXVzZSBOYU4gaXNuJ3QgYD09YCB0byBpdHNlbGYpLgogICAqLwogIG51bSBnZXQgc2lnbjsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgaW50ZWdlciBjbG9zZXN0IHRvIGB0aGlzYC4KICAgKgogICAqIFJvdW5kcyBhd2F5IGZyb20gemVybyB3aGVuIHRoZXJlIGlzIG5vIGNsb3Nlc3QgaW50ZWdlcjoKICAgKiAgYCgzLjUpLnJvdW5kKCkgPT0gNGAgYW5kIGAoLTMuNSkucm91bmQoKSA9PSAtNGAuCiAgICoKICAgKiBJZiBgdGhpc2AgaXMgbm90IGZpbml0ZSAoYE5hTmAgb3IgaW5maW5pdHkpLCB0aHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdLgogICAqLwogIGludCByb3VuZCgpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBncmVhdGVzdCBpbnRlZ2VyIG5vIGdyZWF0ZXIgdGhhbiBgdGhpc2AuCiAgICoKICAgKiBJZiBgdGhpc2AgaXMgbm90IGZpbml0ZSAoYE5hTmAgb3IgaW5maW5pdHkpLCB0aHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdLgogICAqLwogIGludCBmbG9vcigpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsZWFzdCBpbnRlZ2VyIG5vIHNtYWxsZXIgdGhhbiBgdGhpc2AuCiAgICoKICAgKiBJZiBgdGhpc2AgaXMgbm90IGZpbml0ZSAoYE5hTmAgb3IgaW5maW5pdHkpLCB0aHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdLgogICAqLwogIGludCBjZWlsKCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGludGVnZXIgb2J0YWluZWQgYnkgZGlzY2FyZGluZyBhbnkgZnJhY3Rpb25hbAogICAqIGRpZ2l0cyBmcm9tIGB0aGlzYC4KICAgKgogICAqIElmIGB0aGlzYCBpcyBub3QgZmluaXRlIChgTmFOYCBvciBpbmZpbml0eSksIHRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0uCiAgICovCiAgaW50IHRydW5jYXRlKCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGRvdWJsZSBpbnRlZ2VyIHZhbHVlIGNsb3Nlc3QgdG8gYHRoaXNgLgogICAqCiAgICogUm91bmRzIGF3YXkgZnJvbSB6ZXJvIHdoZW4gdGhlcmUgaXMgbm8gY2xvc2VzdCBpbnRlZ2VyOgogICAqICBgKDMuNSkucm91bmRUb0RvdWJsZSgpID09IDRgIGFuZCBgKC0zLjUpLnJvdW5kVG9Eb3VibGUoKSA9PSAtNGAuCiAgICoKICAgKiBJZiB0aGlzIGlzIGFscmVhZHkgYW4gaW50ZWdlciB2YWx1ZWQgZG91YmxlLCBpbmNsdWRpbmcgYC0wLjBgLCBvciBpdCBpcyBhCiAgICogbm9uLWZpbml0ZSBkb3VibGUgdmFsdWUsIHRoZSB2YWx1ZSBpcyByZXR1cm5lZCB1bm1vZGlmaWVkLgogICAqCiAgICogRm9yIHRoZSBwdXJwb3NlIG9mIHJvdW5kaW5nLCBgLTAuMGAgaXMgY29uc2lkZXJlZCB0byBiZSBiZWxvdyBgMC4wYCwKICAgKiBhbmQgYC0wLjBgIGlzIHRoZXJlZm9yZSBjb25zaWRlcmVkIGNsb3NlciB0byBuZWdhdGl2ZSBudW1iZXJzIHRoYW4gYDAuMGAuCiAgICogVGhpcyBtZWFucyB0aGF0IGZvciBhIHZhbHVlLCBgZGAgaW4gdGhlIHJhbmdlIGAtMC41IDwgZCA8IDAuMGAsCiAgICogdGhlIHJlc3VsdCBpcyBgLTAuMGAuCiAgICoKICAgKiBUaGUgcmVzdWx0IGlzIGFsd2F5cyBhIGRvdWJsZS4KICAgKiBJZiB0aGlzIGlzIGEgbnVtZXJpY2FsbHkgbGFyZ2UgaW50ZWdlciwgdGhlIHJlc3VsdCBtYXkgYmUgYW4gaW5maW5pdGUKICAgKiBkb3VibGUuCiAgICovCiAgZG91YmxlIHJvdW5kVG9Eb3VibGUoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZ3JlYXRlc3QgZG91YmxlIGludGVnZXIgdmFsdWUgbm8gZ3JlYXRlciB0aGFuIGB0aGlzYC4KICAgKgogICAqIElmIHRoaXMgaXMgYWxyZWFkeSBhbiBpbnRlZ2VyIHZhbHVlZCBkb3VibGUsIGluY2x1ZGluZyBgLTAuMGAsIG9yIGl0IGlzIGEKICAgKiBub24tZmluaXRlIGRvdWJsZSB2YWx1ZSwgdGhlIHZhbHVlIGlzIHJldHVybmVkIHVubW9kaWZpZWQuCiAgICoKICAgKiBGb3IgdGhlIHB1cnBvc2Ugb2Ygcm91bmRpbmcsIGAtMC4wYCBpcyBjb25zaWRlcmVkIHRvIGJlIGJlbG93IGAwLjBgLgogICAqIEEgbnVtYmVyIGBkYCBpbiB0aGUgcmFuZ2UgYDAuMCA8IGQgPCAxLjBgIHdpbGwgcmV0dXJuIGAwLjBgLgogICAqCiAgICogVGhlIHJlc3VsdCBpcyBhbHdheXMgYSBkb3VibGUuCiAgICogSWYgdGhpcyBpcyBhIG51bWVyaWNhbGx5IGxhcmdlIGludGVnZXIsIHRoZSByZXN1bHQgbWF5IGJlIGFuIGluZmluaXRlCiAgICogZG91YmxlLgogICAqLwogIGRvdWJsZSBmbG9vclRvRG91YmxlKCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGxlYXN0IGRvdWJsZSBpbnRlZ2VyIHZhbHVlIG5vIHNtYWxsZXIgdGhhbiBgdGhpc2AuCiAgICoKICAgKiBJZiB0aGlzIGlzIGFscmVhZHkgYW4gaW50ZWdlciB2YWx1ZWQgZG91YmxlLCBpbmNsdWRpbmcgYC0wLjBgLCBvciBpdCBpcyBhCiAgICogbm9uLWZpbml0ZSBkb3VibGUgdmFsdWUsIHRoZSB2YWx1ZSBpcyByZXR1cm5lZCB1bm1vZGlmaWVkLgogICAqCiAgICogRm9yIHRoZSBwdXJwb3NlIG9mIHJvdW5kaW5nLCBgLTAuMGAgaXMgY29uc2lkZXJlZCB0byBiZSBiZWxvdyBgMC4wYC4KICAgKiBBIG51bWJlciBgZGAgaW4gdGhlIHJhbmdlIGAtMS4wIDwgZCA8IDAuMGAgd2lsbCByZXR1cm4gYC0wLjBgLgogICAqCiAgICogVGhlIHJlc3VsdCBpcyBhbHdheXMgYSBkb3VibGUuCiAgICogSWYgdGhpcyBpcyBhIG51bWVyaWNhbGx5IGxhcmdlIGludGVnZXIsIHRoZSByZXN1bHQgbWF5IGJlIGFuIGluZmluaXRlCiAgICogZG91YmxlLgogICAqLwogIGRvdWJsZSBjZWlsVG9Eb3VibGUoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZG91YmxlIGludGVnZXIgdmFsdWUgb2J0YWluZWQgYnkgZGlzY2FyZGluZyBhbnkgZnJhY3Rpb25hbAogICAqIGRpZ2l0cyBmcm9tIHRoZSBkb3VibGUgdmFsdWUgb2YgYHRoaXNgLgogICAqCiAgICogSWYgdGhpcyBpcyBhbHJlYWR5IGFuIGludGVnZXIgdmFsdWVkIGRvdWJsZSwgaW5jbHVkaW5nIGAtMC4wYCwgb3IgaXQgaXMgYQogICAqIG5vbi1maW5pdGUgZG91YmxlIHZhbHVlLCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQgdW5tb2RpZmllZC4KICAgKgogICAqIEZvciB0aGUgcHVycG9zZSBvZiByb3VuZGluZywgYC0wLjBgIGlzIGNvbnNpZGVyZWQgdG8gYmUgYmVsb3cgYDAuMGAuCiAgICogQSBudW1iZXIgYGRgIGluIHRoZSByYW5nZSBgLTEuMCA8IGQgPCAwLjBgIHdpbGwgcmV0dXJuIGAtMC4wYCwgYW5kCiAgICogaW4gdGhlIHJhbmdlIGAwLjAgPCBkIDwgMS4wYCBpdCB3aWxsIHJldHVybiAwLjAuCiAgICoKICAgKiBUaGUgcmVzdWx0IGlzIGFsd2F5cyBhIGRvdWJsZS4KICAgKiBJZiB0aGlzIGlzIGEgbnVtZXJpY2FsbHkgbGFyZ2UgaW50ZWdlciwgdGhlIHJlc3VsdCBtYXkgYmUgYW4gaW5maW5pdGUKICAgKiBkb3VibGUuCiAgICovCiAgZG91YmxlIHRydW5jYXRlVG9Eb3VibGUoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGlzIFtudW1dIGNsYW1wZWQgdG8gYmUgaW4gdGhlIHJhbmdlIFtsb3dlckxpbWl0XS1bdXBwZXJMaW1pdF0uCiAgICoKICAgKiBUaGUgY29tcGFyaXNvbiBpcyBkb25lIHVzaW5nIFtjb21wYXJlVG9dIGFuZCB0aGVyZWZvcmUgdGFrZXMgYC0wLjBgIGludG8KICAgKiBhY2NvdW50LiBUaGlzIGFsc28gaW1wbGllcyB0aGF0IFtkb3VibGUubmFuXSBpcyB0cmVhdGVkIGFzIHRoZSBtYXhpbWFsCiAgICogZG91YmxlIHZhbHVlLgogICAqCiAgICogVGhlIGFyZ3VtZW50cyBbbG93ZXJMaW1pdF0gYW5kIFt1cHBlckxpbWl0XSBtdXN0IGZvcm0gYSB2YWxpZCByYW5nZSB3aGVyZQogICAqIGBsb3dlckxpbWl0LmNvbXBhcmVUbyh1cHBlckxpbWl0KSA8PSAwYC4KICAgKi8KICBudW0gY2xhbXAobnVtIGxvd2VyTGltaXQsIG51bSB1cHBlckxpbWl0KTsKCiAgLyoqIFRydW5jYXRlcyB0aGlzIFtudW1dIHRvIGFuIGludGVnZXIgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBhcyBhbiBbaW50XS4gKi8KICBpbnQgdG9JbnQoKTsKCiAgLyoqCiAgICogUmV0dXJuIHRoaXMgW251bV0gYXMgYSBbZG91YmxlXS4KICAgKgogICAqIElmIHRoZSBudW1iZXIgaXMgbm90IHJlcHJlc2VudGFibGUgYXMgYSBbZG91YmxlXSwgYW4KICAgKiBhcHByb3hpbWF0aW9uIGlzIHJldHVybmVkLiBGb3IgbnVtZXJpY2FsbHkgbGFyZ2UgaW50ZWdlcnMsIHRoZQogICAqIGFwcHJveGltYXRpb24gbWF5IGJlIGluZmluaXRlLgogICAqLwogIGRvdWJsZSB0b0RvdWJsZSgpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgZGVjaW1hbC1wb2ludCBzdHJpbmctcmVwcmVzZW50YXRpb24gb2YgYHRoaXNgLgogICAqCiAgICogQ29udmVydHMgYHRoaXNgIHRvIGEgW2RvdWJsZV0gYmVmb3JlIGNvbXB1dGluZyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgogICAqCiAgICogSWYgdGhlIGFic29sdXRlIHZhbHVlIG9mIGB0aGlzYCBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIGAxMF4yMWAgdGhlbiB0aGlzCiAgICogbWV0aG9kcyByZXR1cm5zIGFuIGV4cG9uZW50aWFsIHJlcHJlc2VudGF0aW9uIGNvbXB1dGVkIGJ5CiAgICogYHRoaXMudG9TdHJpbmdBc0V4cG9uZW50aWFsKClgLiBPdGhlcndpc2UgdGhlIHJlc3VsdAogICAqIGlzIHRoZSBjbG9zZXN0IHN0cmluZyByZXByZXNlbnRhdGlvbiB3aXRoIGV4YWN0bHkgW2ZyYWN0aW9uRGlnaXRzXSBkaWdpdHMKICAgKiBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC4gSWYgW2ZyYWN0aW9uRGlnaXRzXSBlcXVhbHMgMCB0aGVuIHRoZSBkZWNpbWFsCiAgICogcG9pbnQgaXMgb21pdHRlZC4KICAgKgogICAqIFRoZSBwYXJhbWV0ZXIgW2ZyYWN0aW9uRGlnaXRzXSBtdXN0IGJlIGFuIGludGVnZXIgc2F0aXNmeWluZzoKICAgKiBgMCA8PSBmcmFjdGlvbkRpZ2l0cyA8PSAyMGAuCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgICAxLnRvU3RyaW5nQXNGaXhlZCgzKTsgIC8vIDEuMDAwCiAgICogICAgICg0MzIxLjEyMzQ1Njc4KS50b1N0cmluZ0FzRml4ZWQoMyk7ICAvLyA0MzIxLjEyMwogICAqICAgICAoNDMyMS4xMjM0NTY3OCkudG9TdHJpbmdBc0ZpeGVkKDUpOyAgLy8gNDMyMS4xMjM0NgogICAqICAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEudG9TdHJpbmdBc0ZpeGVkKDMpOyAgLy8gMTIzNDU2Nzg5MDEyMzQ1NjgzOTY4LjAwMAogICAqICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwLnRvU3RyaW5nQXNGaXhlZCgzKTsgLy8gMWUrMjEKICAgKiAgICAgNS4yNS50b1N0cmluZ0FzRml4ZWQoMCk7IC8vIDUKICAgKi8KICBTdHJpbmcgdG9TdHJpbmdBc0ZpeGVkKGludCBmcmFjdGlvbkRpZ2l0cyk7CgogIC8qKgogICAqIFJldHVybnMgYW4gZXhwb25lbnRpYWwgc3RyaW5nLXJlcHJlc2VudGF0aW9uIG9mIGB0aGlzYC4KICAgKgogICAqIENvbnZlcnRzIGB0aGlzYCB0byBhIFtkb3VibGVdIGJlZm9yZSBjb21wdXRpbmcgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbi4KICAgKgogICAqIElmIFtmcmFjdGlvbkRpZ2l0c10gaXMgZ2l2ZW4gdGhlbiBpdCBtdXN0IGJlIGFuIGludGVnZXIgc2F0aXNmeWluZzoKICAgKiBgMCA8PSBmcmFjdGlvbkRpZ2l0cyA8PSAyMGAuIEluIHRoaXMgY2FzZSB0aGUgc3RyaW5nIGNvbnRhaW5zIGV4YWN0bHkKICAgKiBbZnJhY3Rpb25EaWdpdHNdIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LiBPdGhlcndpc2UsIHdpdGhvdXQgdGhlIHBhcmFtZXRlciwKICAgKiB0aGUgcmV0dXJuZWQgc3RyaW5nIHVzZXMgdGhlIHNob3J0ZXN0IG51bWJlciBvZiBkaWdpdHMgdGhhdCBhY2N1cmF0ZWx5CiAgICogcmVwcmVzZW50IFt0aGlzXS4KICAgKgogICAqIElmIFtmcmFjdGlvbkRpZ2l0c10gZXF1YWxzIDAgdGhlbiB0aGUgZGVjaW1hbCBwb2ludCBpcyBvbWl0dGVkLgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgIDEudG9TdHJpbmdBc0V4cG9uZW50aWFsKCk7ICAgICAgIC8vIDFlKzAKICAgKiAgICAgMS50b1N0cmluZ0FzRXhwb25lbnRpYWwoMyk7ICAgICAgLy8gMS4wMDBlKzAKICAgKiAgICAgMTIzNDU2LnRvU3RyaW5nQXNFeHBvbmVudGlhbCgpOyAgLy8gMS4yMzQ1NmUrNQogICAqICAgICAxMjM0NTYudG9TdHJpbmdBc0V4cG9uZW50aWFsKDMpOyAvLyAxLjIzNWUrNQogICAqICAgICAxMjMudG9TdHJpbmdBc0V4cG9uZW50aWFsKDApOyAgICAvLyAxZSsyCiAgICovCiAgU3RyaW5nIHRvU3RyaW5nQXNFeHBvbmVudGlhbChbaW50IGZyYWN0aW9uRGlnaXRzXSk7CgogIC8qKgogICAqIENvbnZlcnRzIGB0aGlzYCB0byBhIGRvdWJsZSBhbmQgcmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiB3aXRoCiAgICogZXhhY3RseSBbcHJlY2lzaW9uXSBzaWduaWZpY2FudCBkaWdpdHMuCiAgICoKICAgKiBUaGUgcGFyYW1ldGVyIFtwcmVjaXNpb25dIG11c3QgYmUgYW4gaW50ZWdlciBzYXRpc2Z5aW5nOgogICAqIGAxIDw9IHByZWNpc2lvbiA8PSAyMWAuCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgICAxLnRvU3RyaW5nQXNQcmVjaXNpb24oMik7ICAgICAgIC8vIDEuMAogICAqICAgICAxZTE1LnRvU3RyaW5nQXNQcmVjaXNpb24oMyk7ICAgIC8vIDEuMDBlKzE1CiAgICogICAgIDEyMzQ1NjcudG9TdHJpbmdBc1ByZWNpc2lvbigzKTsgLy8gMS4yM2UrNgogICAqICAgICAxMjM0NTY3LnRvU3RyaW5nQXNQcmVjaXNpb24oOSk7IC8vIDEyMzQ1NjcuMDAKICAgKiAgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAudG9TdHJpbmdBc1ByZWNpc2lvbigyMCk7IC8vIDEyMzQ1Njc4OTAxMjM0NTY3MTY4CiAgICogICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwLnRvU3RyaW5nQXNQcmVjaXNpb24oMTQpOyAvLyAxLjIzNDU2Nzg5MDEyMzVlKzE5CiAgICogICAgIDAuMDAwMDAwMTIzNDUudG9TdHJpbmdBc1ByZWNpc2lvbigxNSk7IC8vIDEuMjM0NTAwMDAwMDAwMDBlLTcKICAgKiAgICAgMC4wMDAwMDEyMzQ1LnRvU3RyaW5nQXNQcmVjaXNpb24oMTUpOyAgLy8gMC4wMDAwMDEyMzQ1MDAwMDAwMDAwMAogICAqLwogIFN0cmluZyB0b1N0cmluZ0FzUHJlY2lzaW9uKGludCBwcmVjaXNpb24pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzaG9ydGVzdCBzdHJpbmcgdGhhdCBjb3JyZWN0bHkgcmVwcmVzZW50IHRoZSBpbnB1dCBudW1iZXIuCiAgICoKICAgKiBBbGwgW2RvdWJsZV1zIGluIHRoZSByYW5nZSBgMTBeLTZgIChpbmNsdXNpdmUpIHRvIGAxMF4yMWAgKGV4Y2x1c2l2ZSkKICAgKiBhcmUgY29udmVydGVkIHRvIHRoZWlyIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gd2l0aCBhdCBsZWFzdCBvbmUgZGlnaXQKICAgKiBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC4gRm9yIGFsbCBvdGhlciBkb3VibGVzLAogICAqIGV4Y2VwdCBmb3Igc3BlY2lhbCB2YWx1ZXMgbGlrZSBgTmFOYCBvciBgSW5maW5pdHlgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGFuCiAgICogZXhwb25lbnRpYWwgcmVwcmVzZW50YXRpb24gKHNlZSBbdG9TdHJpbmdBc0V4cG9uZW50aWFsXSkuCiAgICoKICAgKiBSZXR1cm5zIGAiTmFOImAgZm9yIFtkb3VibGUubmFuXSwgYCJJbmZpbml0eSJgIGZvciBbZG91YmxlLmluZmluaXR5XSwgYW5kCiAgICogYCItSW5maW5pdHkiYCBmb3IgW2RvdWJsZS5uZWdhdGl2ZUluZmluaXR5XS4KICAgKgogICAqIEFuIFtpbnRdIGlzIGNvbnZlcnRlZCB0byBhIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gd2l0aCBubyBkZWNpbWFsIHBvaW50LgogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICAgKDAuMDAwMDAxKS50b1N0cmluZygpOyAgLy8gIjAuMDAwMDAxIgogICAqICAgICAoMC4wMDAwMDAxKS50b1N0cmluZygpOyAvLyAiMWUtNyIKICAgKiAgICAgKDExMTExMTExMTExMTExMTExMTExMS4wKS50b1N0cmluZygpOyAgLy8gIjExMTExMTExMTExMTExMTExMDAwMC4wIgogICAqICAgICAoMTAwMDAwMDAwMDAwMDAwMDAwMDAwLjApLnRvU3RyaW5nKCk7ICAvLyAiMTAwMDAwMDAwMDAwMDAwMDAwMDAwLjAiCiAgICogICAgICgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjApLnRvU3RyaW5nKCk7IC8vICIxZSsyMSIKICAgKiAgICAgKDExMTExMTExMTExMTExMTExMTExMTEuMCkudG9TdHJpbmcoKTsgLy8gIjEuMTExMTExMTExMTExMTExMWUrMjEiCiAgICogICAgIDEudG9TdHJpbmcoKTsgLy8gIjEiCiAgICogICAgIDExMTExMTExMTExMTExMTExMTExMS50b1N0cmluZygpOyAgLy8gIjExMTExMTExMTExMTExMTExMDAwMCIKICAgKiAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwLnRvU3RyaW5nKCk7ICAvLyAiMTAwMDAwMDAwMDAwMDAwMDAwMDAwIgogICAqICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwLnRvU3RyaW5nKCk7IC8vICIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgogICAqICAgICAxMTExMTExMTExMTExMTExMTExMTExLnRvU3RyaW5nKCk7IC8vICIxMTExMTExMTExMTExMTExMTExMTExIgogICAqICAgICAxLjIzNGU1LnRvU3RyaW5nKCk7ICAgLy8gMTIzNDAwCiAgICogICAgIDEyMzQuNWU2LnRvU3RyaW5nKCk7ICAvLyAxMjM0NTAwMDAwCiAgICogICAgIDEyLjM0NWU2Ny50b1N0cmluZygpOyAvLyAxLjIzNDVlKzY4CiAgICoKICAgKiBOb3RlOiB0aGUgY29udmVyc2lvbiBtYXkgcm91bmQgdGhlIG91dHB1dCBpZiB0aGUgcmV0dXJuZWQgc3RyaW5nCiAgICogaXMgYWNjdXJhdGUgZW5vdWdoIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBpbnB1dC1udW1iZXIuCiAgICogRm9yIGV4YW1wbGUgdGhlIG1vc3QgcHJlY2lzZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgW2RvdWJsZV0gYDllNTlgIGVxdWFscwogICAqIGAiODk5OTk5OTk5OTk5OTk5OTE4NzY3MjI5NDQ5NzE3NjE5OTUzODEwMTMxMjczNjc0NjkwNjU2MjA2ODQ4ImAsIGJ1dAogICAqIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHNob3J0ZXIgKGJ1dCBzdGlsbCB1bmlxdWVseSBpZGVudGlmeWluZykgYCI5ZTU5ImAuCiAgICoKICAgKi8KICBTdHJpbmcgdG9TdHJpbmcoKTsKCiAgLyoqCiAgICogUGFyc2VzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBudW1iZXIgbGl0ZXJhbCBpbnRvIGEgbnVtYmVyLgogICAqCiAgICogVGhlIG1ldGhvZCBmaXJzdCB0cmllcyB0byByZWFkIHRoZSBbaW5wdXRdIGFzIGludGVnZXIgKHNpbWlsYXIgdG8KICAgKiBbaW50LnBhcnNlXSB3aXRob3V0IGEgcmFkaXgpLgogICAqIElmIHRoYXQgZmFpbHMsIGl0IHRyaWVzIHRvIHBhcnNlIHRoZSBbaW5wdXRdIGFzIGEgZG91YmxlIChzaW1pbGFyIHRvCiAgICogW2RvdWJsZS5wYXJzZV0pLgogICAqIElmIHRoYXQgZmFpbHMsIHRvbywgaXQgaW52b2tlcyBbb25FcnJvcl0gd2l0aCBbaW5wdXRdLCBhbmQgdGhlIHJlc3VsdAogICAqIG9mIHRoYXQgaW52b2NhdGlvbiBiZWNvbWVzIHRoZSByZXN1bHQgb2YgY2FsbGluZyBgcGFyc2VgLgogICAqCiAgICogSWYgbm8gW29uRXJyb3JdIGlzIHN1cHBsaWVkLCBpdCBkZWZhdWx0cyB0byBhIGZ1bmN0aW9uIHRoYXQgdGhyb3dzIGEKICAgKiBbRm9ybWF0RXhjZXB0aW9uXS4KICAgKgogICAqIEZvciBhbnkgbnVtYmVyIGBuYCwgdGhpcyBmdW5jdGlvbiBzYXRpc2ZpZXMKICAgKiBgaWRlbnRpY2FsKG4sIG51bS5wYXJzZShuLnRvU3RyaW5nKCkpKWAgKGV4Y2VwdCB3aGVuIGBuYCBpcyBhIE5hTiBgZG91YmxlYAogICAqIHdpdGggYSBwYXlsb2FkKS4KICAgKgogICAqIFRoZSBbb25FcnJvcl0gcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4KICAgKiBJbnN0ZWFkIG9mIGBudW0ucGFyc2Uoc3RyaW5nLCAoc3RyaW5nKSB7IC4uLiB9KWAsCiAgICogeW91IHNob3VsZCB1c2UgYG51bS50cnlQYXJzZShzdHJpbmcpID8/ICguLi4pYC4KICAgKi8KICBzdGF0aWMgbnVtIHBhcnNlKFN0cmluZyBpbnB1dCwgW0BkZXByZWNhdGVkIG51bSBvbkVycm9yKFN0cmluZyBpbnB1dCldKSB7CiAgICBudW0gcmVzdWx0ID0gdHJ5UGFyc2UoaW5wdXQpOwogICAgaWYgKHJlc3VsdCAhPSBudWxsKSByZXR1cm4gcmVzdWx0OwogICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKGlucHV0KTsKICAgIHJldHVybiBvbkVycm9yKGlucHV0KTsKICB9CgogIC8qKgogICAqIFBhcnNlcyBhIHN0cmluZyBjb250YWluaW5nIGEgbnVtYmVyIGxpdGVyYWwgaW50byBhIG51bWJlci4KICAgKgogICAqIExpa2UgW3BhcnNlXSBleGNlcHQgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYG51bGxgIGZvciBpbnZhbGlkIGlucHV0cwogICAqIGluc3RlYWQgb2YgdGhyb3dpbmcuCiAgICovCiAgc3RhdGljIG51bSB0cnlQYXJzZShTdHJpbmcgaW5wdXQpIHsKICAgIFN0cmluZyBzb3VyY2UgPSBpbnB1dC50cmltKCk7CiAgICAvLyBUT0RPKGxybik6IE9wdGltaXplIHRvIGRldGVjdCBmb3JtYXQgYW5kIHJlc3VsdCB0eXBlIGluIG9uZSBjaGVjay4KICAgIHJldHVybiBpbnQudHJ5UGFyc2Uoc291cmNlKSA/PyBkb3VibGUudHJ5UGFyc2Uoc291cmNlKTsKICB9CgogIC8qKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBbcGFyc2VdLiAqLwogIHN0YXRpYyBpbnQgX3JldHVybkludE51bGwoU3RyaW5nIF8pID0+IG51bGw7CiAgc3RhdGljIGRvdWJsZSBfcmV0dXJuRG91YmxlTnVsbChTdHJpbmcgXykgPT4gbnVsbDsKfQqB7wBOTjwBEwEEKANIKgQwBj4FSCIFRy1LKgVLSjkFUAUuBUhISUoOBUkwBU4tBiIBBjAFSk45BT8GFAEGHwVQRQVKT0cMBUpPTRcFRzAFUFAYUChABQ8JJSQkBUMsLTc8BUoSJDM3NzgJBhwBHB0BHx0BIh0BBiAFUEguBUxMMgU8BUMGHQEcIAEGIwVQPQVHFwYeARoUAQZMBTEsUQYcASgeATEfASseATQfAVASAQY3BUcGFwEGTgwGFwEGNQVBGAYVATMNAQZDJAU4Mi4FOAU3JwEbBR8FSQYQAQYsBT03BVAGDwEGOgVQBg8BBjcFUAYOAQY/GQVQBhIBBjkFPUcFT0AFSk9FGwUkSw0GGgEGRwVPQAVKQgUkSw0GGgEGRAVPQAVKRAUkSw0GGQEGTC0FT0AFSkg2BSRLDQYdAQZOBU5MEwVPLgYtAVAPAQYmBTpEJAYVAQY+BU8FTj86T0wXBUMiBQ8FKTo8UT0nBi4BBj0FTwVJS1FMFwVFDwUyNjg2MgY2AQZKLQU+HQUPBTA1NDdPTkdKBi0BBkwFS0s1UD8FTzIFTgUPBS8rTU07TB5HR0hIKS0tBUY/T0tQBQYVAQZABUcjShZLPwVKGAUxUBYFQDc1BkwiJzcbBAEGQAVOGgYmIko8BAEnLzUCARJkYXJ0OmNvcmUvbnVtLmRhcnQsb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvb2JqZWN0LmRhcnSQfy8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIERhcnQgb2JqZWN0cy4KICoKICogQmVjYXVzZSBPYmplY3QgaXMgdGhlIHJvb3Qgb2YgdGhlIERhcnQgY2xhc3MgaGllcmFyY2h5LAogKiBldmVyeSBvdGhlciBEYXJ0IGNsYXNzIGlzIGEgc3ViY2xhc3Mgb2YgT2JqZWN0LgogKgogKiBXaGVuIHlvdSBkZWZpbmUgYSBjbGFzcywgeW91IHNob3VsZCBvdmVycmlkZSBbdG9TdHJpbmddCiAqIHRvIHJldHVybiBhIHN0cmluZyBkZXNjcmliaW5nIGFuIGluc3RhbmNlIG9mIHRoYXQgY2xhc3MuCiAqIFlvdSBtaWdodCBhbHNvIG5lZWQgdG8gZGVmaW5lIFtoYXNoQ29kZV0gYW5kIFtvcGVyYXRvciA9PV0sIGFzIGRlc2NyaWJlZCBpbiB0aGUKICogW0ltcGxlbWVudGluZyBtYXAKICoga2V5c10oaHR0cHM6Ly93d3cuZGFydGxhbmcub3JnL2RvY3MvZGFydC11cC1hbmQtcnVubmluZy9jaDAzLmh0bWwjaW1wbGVtZW50aW5nLW1hcC1rZXlzKQogKiBzZWN0aW9uIG9mIHRoZSBbbGlicmFyeQogKiB0b3VyXShodHRwOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL2RhcnQtdXAtYW5kLXJ1bm5pbmcvY29udGVudHMvY2gwMy5odG1sKS4KICovCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgT2JqZWN0IHsKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IFtPYmplY3RdIGluc3RhbmNlLgogICAqCiAgICogW09iamVjdF0gaW5zdGFuY2VzIGhhdmUgbm8gbWVhbmluZ2Z1bCBzdGF0ZSwgYW5kIGFyZSBvbmx5IHVzZWZ1bAogICAqIHRocm91Z2ggdGhlaXIgaWRlbnRpdHkuIEFuIFtPYmplY3RdIGluc3RhbmNlIGlzIGVxdWFsIHRvIGl0c2VsZgogICAqIG9ubHkuCiAgICovCiAgY29uc3QgT2JqZWN0KCk7CgogIC8qKgogICAqIFRoZSBlcXVhbGl0eSBvcGVyYXRvci4KICAgKgogICAqIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBhbGwgW09iamVjdF1zIGlzIHRvIHJldHVybiB0cnVlIGlmIGFuZAogICAqIG9ubHkgaWYgYHRoaXNgIGFuZCBbb3RoZXJdIGFyZSB0aGUgc2FtZSBvYmplY3QuCiAgICoKICAgKiBPdmVycmlkZSB0aGlzIG1ldGhvZCB0byBzcGVjaWZ5IGEgZGlmZmVyZW50IGVxdWFsaXR5IHJlbGF0aW9uIG9uCiAgICogYSBjbGFzcy4gVGhlIG92ZXJyaWRpbmcgbWV0aG9kIG11c3Qgc3RpbGwgYmUgYW4gZXF1aXZhbGVuY2UgcmVsYXRpb24uCiAgICogVGhhdCBpcywgaXQgbXVzdCBiZToKICAgKgogICAqICAqIFRvdGFsOiBJdCBtdXN0IHJldHVybiBhIGJvb2xlYW4gZm9yIGFsbCBhcmd1bWVudHMuIEl0IHNob3VsZCBuZXZlciB0aHJvdwogICAqICAgIG9yIHJldHVybiBgbnVsbGAuCiAgICoKICAgKiAgKiBSZWZsZXhpdmU6IEZvciBhbGwgb2JqZWN0cyBgb2AsIGBvID09IG9gIG11c3QgYmUgdHJ1ZS4KICAgKgogICAqICAqIFN5bW1ldHJpYzogRm9yIGFsbCBvYmplY3RzIGBvMWAgYW5kIGBvMmAsIGBvMSA9PSBvMmAgYW5kIGBvMiA9PSBvMWAgbXVzdAogICAqICAgIGVpdGhlciBib3RoIGJlIHRydWUsIG9yIGJvdGggYmUgZmFsc2UuCiAgICoKICAgKiAgKiBUcmFuc2l0aXZlOiBGb3IgYWxsIG9iamVjdHMgYG8xYCwgYG8yYCwgYW5kIGBvM2AsIGlmIGBvMSA9PSBvMmAgYW5kCiAgICogICAgYG8yID09IG8zYCBhcmUgdHJ1ZSwgdGhlbiBgbzEgPT0gbzNgIG11c3QgYmUgdHJ1ZS4KICAgKgogICAqIFRoZSBtZXRob2Qgc2hvdWxkIGFsc28gYmUgY29uc2lzdGVudCBvdmVyIHRpbWUsCiAgICogc28gd2hldGhlciB0d28gb2JqZWN0cyBhcmUgZXF1YWwgc2hvdWxkIG9ubHkgY2hhbmdlCiAgICogaWYgYXQgbGVhc3Qgb25lIG9mIHRoZSBvYmplY3RzIHdhcyBtb2RpZmllZC4KICAgKgogICAqIElmIGEgc3ViY2xhc3Mgb3ZlcnJpZGVzIHRoZSBlcXVhbGl0eSBvcGVyYXRvciBpdCBzaG91bGQgb3ZlcnJpZGUKICAgKiB0aGUgW2hhc2hDb2RlXSBtZXRob2QgYXMgd2VsbCB0byBtYWludGFpbiBjb25zaXN0ZW5jeS4KICAgKi8KICBleHRlcm5hbCBib29sIG9wZXJhdG9yID09KG90aGVyKTsKCiAgLyoqCiAgICogVGhlIGhhc2ggY29kZSBmb3IgdGhpcyBvYmplY3QuCiAgICoKICAgKiBBIGhhc2ggY29kZSBpcyBhIHNpbmdsZSBpbnRlZ2VyIHdoaWNoIHJlcHJlc2VudHMgdGhlIHN0YXRlIG9mIHRoZSBvYmplY3QKICAgKiB0aGF0IGFmZmVjdHMgW29wZXJhdG9yID09XSBjb21wYXJpc29ucy4KICAgKgogICAqIEFsbCBvYmplY3RzIGhhdmUgaGFzaCBjb2Rlcy4KICAgKiBUaGUgZGVmYXVsdCBoYXNoIGNvZGUgcmVwcmVzZW50cyBvbmx5IHRoZSBpZGVudGl0eSBvZiB0aGUgb2JqZWN0LAogICAqIHRoZSBzYW1lIHdheSBhcyB0aGUgZGVmYXVsdCBbb3BlcmF0b3IgPT1dIGltcGxlbWVudGF0aW9uIG9ubHkgY29uc2lkZXJzIG9iamVjdHMKICAgKiBlcXVhbCBpZiB0aGV5IGFyZSBpZGVudGljYWwgKHNlZSBbaWRlbnRpdHlIYXNoQ29kZV0pLgogICAqCiAgICogSWYgW29wZXJhdG9yID09XSBpcyBvdmVycmlkZGVuIHRvIHVzZSB0aGUgb2JqZWN0IHN0YXRlIGluc3RlYWQsCiAgICogdGhlIGhhc2ggY29kZSBtdXN0IGFsc28gYmUgY2hhbmdlZCB0byByZXByZXNlbnQgdGhhdCBzdGF0ZS4KICAgKgogICAqIEhhc2ggY29kZXMgbXVzdCBiZSB0aGUgc2FtZSBmb3Igb2JqZWN0cyB0aGF0IGFyZSBlcXVhbCB0byBlYWNoIG90aGVyCiAgICogYWNjb3JkaW5nIHRvIFtvcGVyYXRvciA9PV0uCiAgICogVGhlIGhhc2ggY29kZSBvZiBhbiBvYmplY3Qgc2hvdWxkIG9ubHkgY2hhbmdlIGlmIHRoZSBvYmplY3QgY2hhbmdlcwogICAqIGluIGEgd2F5IHRoYXQgYWZmZWN0cyBlcXVhbGl0eS4KICAgKiBUaGVyZSBhcmUgbm8gZnVydGhlciByZXF1aXJlbWVudHMgZm9yIHRoZSBoYXNoIGNvZGVzLgogICAqIFRoZXkgbmVlZCBub3QgYmUgY29uc2lzdGVudCBiZXR3ZWVuIGV4ZWN1dGlvbnMgb2YgdGhlIHNhbWUgcHJvZ3JhbQogICAqIGFuZCB0aGVyZSBhcmUgbm8gZGlzdHJpYnV0aW9uIGd1YXJhbnRlZXMuCiAgICoKICAgKiBPYmplY3RzIHRoYXQgYXJlIG5vdCBlcXVhbCBhcmUgYWxsb3dlZCB0byBoYXZlIHRoZSBzYW1lIGhhc2ggY29kZSwKICAgKiBpdCBpcyBldmVuIHRlY2huaWNhbGx5IGFsbG93ZWQgdGhhdCBhbGwgaW5zdGFuY2VzIGhhdmUgdGhlIHNhbWUgaGFzaCBjb2RlLAogICAqIGJ1dCBpZiBjbGFzaGVzIGhhcHBlbiB0b28gb2Z0ZW4sIGl0IG1heSByZWR1Y2UgdGhlIGVmZmljaWVuY3kgb2YgaGFzaC1iYXNlZAogICAqIGRhdGEgc3RydWN0dXJlcyBsaWtlIFtIYXNoU2V0XSBvciBbSGFzaE1hcF0uCiAgICoKICAgKiBJZiBhIHN1YmNsYXNzIG92ZXJyaWRlcyBbaGFzaENvZGVdLCBpdCBzaG91bGQgb3ZlcnJpZGUgdGhlCiAgICogW29wZXJhdG9yID09XSBvcGVyYXRvciBhcyB3ZWxsIHRvIG1haW50YWluIGNvbnNpc3RlbmN5LgogICAqLwogIGV4dGVybmFsIGludCBnZXQgaGFzaENvZGU7CgogIC8qKgogICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuCiAgICovCiAgZXh0ZXJuYWwgU3RyaW5nIHRvU3RyaW5nKCk7CgogIC8qKgogICAqIEludm9rZWQgd2hlbiBhIG5vbi1leGlzdGVudCBtZXRob2Qgb3IgcHJvcGVydHkgaXMgYWNjZXNzZWQuCiAgICoKICAgKiBDbGFzc2VzIGNhbiBvdmVycmlkZSBbbm9TdWNoTWV0aG9kXSB0byBwcm92aWRlIGN1c3RvbSBiZWhhdmlvci4KICAgKgogICAqIElmIGEgdmFsdWUgaXMgcmV0dXJuZWQsIGl0IGJlY29tZXMgdGhlIHJlc3VsdCBvZiB0aGUgb3JpZ2luYWwgaW52b2NhdGlvbi4KICAgKgogICAqIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIHRocm93IGEgW05vU3VjaE1ldGhvZEVycm9yXS4KICAgKi8KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgZXh0ZXJuYWwgZHluYW1pYyBub1N1Y2hNZXRob2QoSW52b2NhdGlvbiBpbnZvY2F0aW9uKTsKCiAgLyoqCiAgICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcnVudGltZSB0eXBlIG9mIHRoZSBvYmplY3QuCiAgICovCiAgZXh0ZXJuYWwgVHlwZSBnZXQgcnVudGltZVR5cGU7Cn0KdQBOTjwBEwEEKAM7MwM7PFMVXBtPBBoPBiYFRkULBhIBBhwFRTUFRksaBVEaBT8FUS8FTDsFNTkyBUY8BiQBBiQFTi0FIkdVOwVFQQVKIUklO0gvBUhQUTIFQD0GHQEGNQYeAQZBBUUFTwU9Bhw4AQY5BiECARVkYXJ0OmNvcmUvb2JqZWN0LmRhcnQxb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9vYmplY3RfcGF0Y2guZGFydIpWLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgpAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCmludCBfZ2V0SGFzaChvYmopIG5hdGl2ZSAiT2JqZWN0X2dldEhhc2giOwp2b2lkIF9zZXRIYXNoKG9iaiwgaGFzaCkgbmF0aXZlICJPYmplY3Rfc2V0SGFzaCI7CgpAcGF0Y2gKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBPYmplY3QgewogIC8vIFRoZSBWTSBoYXMgaXRzIG93biBpbXBsZW1lbnRhdGlvbiBvZiBlcXVhbHMuCiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIG5hdGl2ZSAiT2JqZWN0X2VxdWFscyI7CgogIC8vIEhlbHBlcnMgdXNlZCB0byBpbXBsZW1lbnQgaGFzaENvZGUuIElmIGEgaGFzaENvZGUgaXMgdXNlZCwgd2UgcmVtZW1iZXIgaXQKICAvLyBpbiBhIHdlYWsgdGFibGUgaW4gdGhlIFZNICgzMiBiaXQpIG9yIGluIHRoZSBoZWFkZXIgb2YgdGhlIG9iamVjdCAoNjQKICAvLyBiaXQpLiBBIG5ldyBoYXNoQ29kZSB2YWx1ZSBpcyBjYWxjdWxhdGVkIHVzaW5nIGEgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCiAgc3RhdGljIGZpbmFsIF9oYXNoQ29kZVJuZCA9IG5ldyBSYW5kb20oKTsKCiAgc3RhdGljIGludCBfb2JqZWN0SGFzaENvZGUob2JqKSB7CiAgICB2YXIgcmVzdWx0ID0gX2dldEhhc2gob2JqKTsKICAgIGlmIChyZXN1bHQgPT0gMCkgewogICAgICAvLyBXZSB3YW50IHRoZSBoYXNoIHRvIGJlIGEgU21pIHZhbHVlIGdyZWF0ZXIgdGhhbiAwLgogICAgICByZXN1bHQgPSBfaGFzaENvZGVSbmQubmV4dEludCgweDQwMDAwMDAwKTsKICAgICAgZG8gewogICAgICAgIHJlc3VsdCA9IF9oYXNoQ29kZVJuZC5uZXh0SW50KDB4NDAwMDAwMDApOwogICAgICB9IHdoaWxlIChyZXN1bHQgPT0gMCk7CiAgICAgIF9zZXRIYXNoKG9iaiwgcmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAcGF0Y2gKICBpbnQgZ2V0IGhhc2hDb2RlID0+IF9vYmplY3RIYXNoQ29kZSh0aGlzKTsKICBpbnQgZ2V0IF9pZGVudGl0eUhhc2hDb2RlID0+IF9vYmplY3RIYXNoQ29kZSh0aGlzKTsKCiAgQHBhdGNoCiAgU3RyaW5nIHRvU3RyaW5nKCkgbmF0aXZlICJPYmplY3RfdG9TdHJpbmciOwogIC8vIEEgc3RhdGljYWxseSBkaXNwYXRjaGVkIHZlcnNpb24gb2YgT2JqZWN0LnRvU3RyaW5nLgogIHN0YXRpYyBTdHJpbmcgX3RvU3RyaW5nKG9iaikgbmF0aXZlICJPYmplY3RfdG9TdHJpbmciOwoKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKICBkeW5hbWljIG5vU3VjaE1ldGhvZChJbnZvY2F0aW9uIGludm9jYXRpb24pIHsKICAgIC8vIFRPRE8ocmVnaXMpOiBSZW1vdmUgdGVtcCBjb25zdHJ1Y3RvciBpZGVudGlmaWVyICd3aXRoSW52b2NhdGlvbicuCiAgICB0aHJvdyBuZXcgTm9TdWNoTWV0aG9kRXJyb3Iud2l0aEludm9jYXRpb24odGhpcywgaW52b2NhdGlvbik7CiAgfQoKICBAcGF0Y2gKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1R5cGUiKQogIFR5cGUgZ2V0IHJ1bnRpbWVUeXBlIG5hdGl2ZSAiT2JqZWN0X3J1bnRpbWVUeXBlIjsKCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIHN0YXRpYyBib29sIF9oYXZlU2FtZVJ1bnRpbWVUeXBlKGEsIGIpIG5hdGl2ZSAiT2JqZWN0X2hhdmVTYW1lUnVudGltZVR5cGUiOwoKICAvLyBDYWxsIHRoaXMgZnVuY3Rpb24gaW5zdGVhZCBvZiBpbmxpbmluZyBpbnN0YW5jZW9mLCB0aHVzIGNvbGxlY3RpbmcKICAvLyB0eXBlIGZlZWRiYWNrIGFuZCByZWR1Y2luZyBjb2RlIHNpemUgb2YgdW5vcHRpbWl6ZWQgY29kZS4KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKICBib29sIF9pbnN0YW5jZU9mKGluc3RhbnRpYXRvclR5cGVBcmd1bWVudHMsIGZ1bmN0aW9uVHlwZUFyZ3VtZW50cywgdHlwZSkKICAgICAgbmF0aXZlICJPYmplY3RfaW5zdGFuY2VPZiI7CgogIC8vIEdyb3VwIG9mIGZ1bmN0aW9ucyBmb3IgaW1wbGVtZW50aW5nIGZhc3Qgc2ltcGxlIGluc3RhbmNlIG9mLgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQogIGJvb2wgX3NpbXBsZUluc3RhbmNlT2YodHlwZSkgbmF0aXZlICJPYmplY3Rfc2ltcGxlSW5zdGFuY2VPZiI7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgYm9vbCBfc2ltcGxlSW5zdGFuY2VPZlRydWUodHlwZSkgPT4gdHJ1ZTsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKICBib29sIF9zaW1wbGVJbnN0YW5jZU9mRmFsc2UodHlwZSkgPT4gZmFsc2U7Cn0KTQBOTjwBHgEyKzIBBxoPMgkoHjIBT0tPLAEkIBc8MQszHR0GEwQBCS02AQkuOTkBCSQwSUIEAQk1NAEkKE4BSD8kSyIBQiRBJCwkLgIBIWRhcnQ6Y29yZS1wYXRjaC9vYmplY3RfcGF0Y2guZGFydC1vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9wYXR0ZXJuLmRhcnSP0C8vIENvcHlyaWdodCAoYykgMjAxMSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBBbiBpbnRlcmZhY2UgZm9yIGJhc2ljIHNlYXJjaGVzIHdpdGhpbiBzdHJpbmdzLgogKi8KYWJzdHJhY3QgY2xhc3MgUGF0dGVybiB7CiAgLy8gTk9URTogV2hlbiB1c2luZyAic3RhcnQiIGluZGV4IGZyb20gdGhlIGxhbmd1YWdlIGxpYnJhcnksIGNhbGwKICAvLyB3aXRob3V0IGFuIGFyZ3VtZW50IGlmIHN0YXJ0IGlzIHplcm8uIFRoaXMgYWxsb3dzIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CiAgLy8gd2l0aCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIG9sZGVyIGludGVyZmFjZSB0aGF0IGRpZG4ndCBoYXZlIHRoZSBzdGFydAogIC8vIGluZGV4IGFyZ3VtZW50LgogIC8qKgogICAqIE1hdGNoIHRoaXMgcGF0dGVybiBhZ2FpbnN0IHRoZSBzdHJpbmcgcmVwZWF0ZWRseS4KICAgKgogICAqIElmIFtzdGFydF0gaXMgcHJvdmlkZWQsIG1hdGNoaW5nIHdpbGwgc3RhcnQgYXQgdGhhdCBpbmRleC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBpdGVyYWJsZSBsYXppbHkgY29tcHV0ZXMgYWxsIHRoZSBub24tb3ZlcmxhcHBpbmcgbWF0Y2hlcwogICAqIG9mIHRoZSBwYXR0ZXJuIG9uIHRoZSBzdHJpbmcsIG9yZGVyZWQgYnkgc3RhcnQgaW5kZXguCiAgICogSWYgYSB1c2VyIG9ubHkgcmVxdWVzdHMgdGhlIGZpcnN0CiAgICogbWF0Y2gsIHRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBjb21wdXRlIGFsbCBwb3NzaWJsZSBtYXRjaGVzLgogICAqCiAgICogVGhlIG1hdGNoZXMgYXJlIGZvdW5kIGJ5IHJlcGVhdGVkbHkgZmluZGluZyB0aGUgZmlyc3QgbWF0Y2gKICAgKiBvZiB0aGUgcGF0dGVybiBvbiB0aGUgc3RyaW5nLCBzdGFydGluZyBmcm9tIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzCiAgICogbWF0Y2gsIGFuZCBpbml0aWFsbHkgc3RhcnRpbmcgZnJvbSBpbmRleCB6ZXJvLgogICAqCiAgICogSWYgdGhlIHBhdHRlcm4gbWF0Y2hlcyB0aGUgZW1wdHkgc3RyaW5nIGF0IHNvbWUgcG9pbnQsIHRoZSBuZXh0CiAgICogbWF0Y2ggaXMgZm91bmQgYnkgc3RhcnRpbmcgYXQgdGhlIHByZXZpb3VzIG1hdGNoJ3MgZW5kIHBsdXMgb25lLgogICAqLwogIEl0ZXJhYmxlPE1hdGNoPiBhbGxNYXRjaGVzKFN0cmluZyBzdHJpbmcsIFtpbnQgc3RhcnQgPSAwXSk7CgogIC8qKgogICAqIE1hdGNoIHRoaXMgcGF0dGVybiBhZ2FpbnN0IHRoZSBzdGFydCBvZiBgc3RyaW5nYC4KICAgKgogICAqIElmIFtzdGFydF0gaXMgcHJvdmlkZWQsIGl0IG11c3QgYmUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgYDBgIC4uCiAgICogYHN0cmluZy5sZW5ndGhgLiBJbiB0aGF0IGNhc2UsIHRoaXMgcGF0dGVuIGlzIHRlc3RlZCBhZ2FpbnN0IHRoZQogICAqIHN0cmluZyBhdCB0aGUgW3N0YXJ0XSBwb3NpdGlvbi4gVGhhdCBpcywgYSBbTWF0Y2hdIGlzIHJldHVybmVkIGlmIHRoZQogICAqIHBhdHRlcm4gY2FuIG1hdGNoIGEgcGFydCBvZiB0aGUgc3RyaW5nIHN0YXJ0aW5nIGZyb20gcG9zaXRpb24gW3N0YXJ0XS4KICAgKiBSZXR1cm5zIGBudWxsYCBpZiB0aGUgcGF0dGVybiBkb2Vzbid0IG1hdGNoLgogICAqLwogIE1hdGNoIG1hdGNoQXNQcmVmaXgoU3RyaW5nIHN0cmluZywgW2ludCBzdGFydCA9IDBdKTsKfQoKLyoqCiAqIEEgcmVzdWx0IGZyb20gc2VhcmNoaW5nIHdpdGhpbiBhIHN0cmluZy4KICoKICogQSBNYXRjaCBvciBhbiBbSXRlcmFibGVdIG9mIE1hdGNoIG9iamVjdHMgaXMgcmV0dXJuZWQgZnJvbSBbUGF0dGVybl0KICogbWF0Y2hpbmcgbWV0aG9kcy4KICoKICogVGhlIGZvbGxvd2luZyBleGFtcGxlIGZpbmRzIGFsbCBtYXRjaGVzIG9mIGEgW1JlZ0V4cF0gaW4gYSBbU3RyaW5nXQogKiBhbmQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgcmV0dXJuZWQgaXRlcmFibGUgb2YgTWF0Y2ggb2JqZWN0cy4KICoKICogICAgIFJlZ0V4cCBleHAgPSBuZXcgUmVnRXhwKHIiKFx3KykiKTsKICogICAgIFN0cmluZyBzdHIgPSAiUGFyc2UgbXkgc3RyaW5nIjsKICogICAgIEl0ZXJhYmxlPE1hdGNoPiBtYXRjaGVzID0gZXhwLmFsbE1hdGNoZXMoc3RyKTsKICogICAgIGZvciAoTWF0Y2ggbSBpbiBtYXRjaGVzKSB7CiAqICAgICAgIFN0cmluZyBtYXRjaCA9IG0uZ3JvdXAoMCk7CiAqICAgICAgIHByaW50KG1hdGNoKTsKICogICAgIH0KICoKICogVGhlIG91dHB1dCBvZiB0aGUgZXhhbXBsZSBpczoKICoKICogICAgIFBhcnNlCiAqICAgICBteQogKiAgICAgc3RyaW5nCiAqCiAqIFNvbWUgcGF0dGVybnMsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW4gcGFydGljdWxhciwgbWF5IHJlY29yZCBzdWJzdHJpbmdzCiAqIHRoYXQgd2VyZSBwYXJ0IG9mIHRoZSBtYXRjaGluZy4gVGhlc2UgYXJlIGNhbGxlZCBfZ3JvdXBzXyBpbiB0aGUgTWF0Y2gKICogb2JqZWN0LiBTb21lIHBhdHRlcm5zIG1heSBuZXZlciBoYXZlIGFueSBncm91cHMsIGFuZCB0aGVpciBtYXRjaGVzIGFsd2F5cwogKiBoYXZlIHplcm8gW2dyb3VwQ291bnRdLgogKi8KYWJzdHJhY3QgY2xhc3MgTWF0Y2ggewogIC8qKgogICAqIFJldHVybnMgdGhlIGluZGV4IGluIHRoZSBzdHJpbmcgd2hlcmUgdGhlIG1hdGNoIHN0YXJ0cy4KICAgKi8KICBpbnQgZ2V0IHN0YXJ0OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBpbmRleCBpbiB0aGUgc3RyaW5nIGFmdGVyIHRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUKICAgKiBtYXRjaC4KICAgKi8KICBpbnQgZ2V0IGVuZDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgc3RyaW5nIG1hdGNoZWQgYnkgdGhlIGdpdmVuIFtncm91cF0uCiAgICoKICAgKiBJZiBbZ3JvdXBdIGlzIDAsIHJldHVybnMgdGhlIG1hdGNoIG9mIHRoZSBwYXR0ZXJuLgogICAqCiAgICogVGhlIHJlc3VsdCBtYXkgYmUgYG51bGxgIGlmIHRoZSBwYXR0ZXJuIGRpZG4ndCBhc3NpZ24gYSB2YWx1ZSB0byBpdAogICAqIGFzIHBhcnQgb2YgdGhpcyBtYXRjaC4KICAgKi8KICBTdHJpbmcgZ3JvdXAoaW50IGdyb3VwKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgc3RyaW5nIG1hdGNoZWQgYnkgdGhlIGdpdmVuIFtncm91cF0uCiAgICoKICAgKiBJZiBbZ3JvdXBdIGlzIDAsIHJldHVybnMgdGhlIG1hdGNoIG9mIHRoZSBwYXR0ZXJuLgogICAqCiAgICogU2hvcnQgYWxpYXMgZm9yIFtNYXRjaC5ncm91cF0uCiAgICovCiAgU3RyaW5nIG9wZXJhdG9yIFtdKGludCBncm91cCk7CgogIC8qKgogICAqIFJldHVybnMgYSBsaXN0IG9mIHRoZSBncm91cHMgd2l0aCB0aGUgZ2l2ZW4gaW5kaWNlcy4KICAgKgogICAqIFRoZSBsaXN0IGNvbnRhaW5zIHRoZSBzdHJpbmdzIHJldHVybmVkIGJ5IFtncm91cF0gZm9yIGVhY2ggaW5kZXggaW4KICAgKiBbZ3JvdXBJbmRpY2VzXS4KICAgKi8KICBMaXN0PFN0cmluZz4gZ3JvdXBzKExpc3Q8aW50PiBncm91cEluZGljZXMpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2FwdHVyZWQgZ3JvdXBzIGluIHRoZSBtYXRjaC4KICAgKgogICAqIFNvbWUgcGF0dGVybnMgbWF5IGNhcHR1cmUgcGFydHMgb2YgdGhlIGlucHV0IHRoYXQgd2FzIHVzZWQgdG8KICAgKiBjb21wdXRlIHRoZSBmdWxsIG1hdGNoLiBUaGlzIGlzIHRoZSBudW1iZXIgb2YgY2FwdHVyZWQgZ3JvdXBzLAogICAqIHdoaWNoIGlzIGFsc28gdGhlIG1heGltYWwgYWxsb3dlZCBhcmd1bWVudCB0byB0aGUgW2dyb3VwXSBtZXRob2QuCiAgICovCiAgaW50IGdldCBncm91cENvdW50OwoKICAvKioKICAgKiBUaGUgc3RyaW5nIG9uIHdoaWNoIHRoaXMgbWF0Y2ggd2FzIGNvbXB1dGVkLgogICAqLwogIFN0cmluZyBnZXQgaW5wdXQ7CgogIC8qKgogICAqIFRoZSBwYXR0ZXJuIHVzZWQgdG8gc2VhcmNoIGluIFtpbnB1dF0uCiAgICovCiAgUGF0dGVybiBnZXQgcGF0dGVybjsKfQqAhQBOTjwBEwEEMwQZRE9MFQY3BUAFSzsnQwVBSTQFRUYGPgEGNwVHRktMMgY3AgEELANIFQNHQAMqJzYiJBcJAyEDDQoOA0tKTRsEFwY9BhEBBkUMBg8BBjYFOAVJHAYbAQY2BTgFJAYhAQY6BUkVBi8BBjkFQ0RHBhYBBjIGFAEGLAYXAgEWZGFydDpjb3JlL3BhdHRlcm4uZGFydCxvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9yZWdleHAuZGFydJkgLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIEEgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4uCiAqCiAqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgYXJlIFtQYXR0ZXJuXXMsIGFuZCBjYW4gYXMgc3VjaCBiZSB1c2VkIHRvIG1hdGNoIHN0cmluZ3MKICogb3IgcGFydHMgb2Ygc3RyaW5ncy4KICoKICogRGFydCByZWd1bGFyIGV4cHJlc3Npb25zIGhhdmUgdGhlIHNhbWUgc3ludGF4IGFuZCBzZW1hbnRpY3MgYXMKICogSmF2YVNjcmlwdCByZWd1bGFyIGV4cHJlc3Npb25zLiBTZWUKICogPGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi85LjAvI3NlYy1yZWdleHAtcmVndWxhci1leHByZXNzaW9uLW9iamVjdHM+CiAqIGZvciB0aGUgc3BlY2lmaWNhdGlvbiBvZiBKYXZhU2NyaXB0IHJlZ3VsYXIgZXhwcmVzc2lvbnMuCiAqCiAqIFtmaXJzdE1hdGNoXSBpcyB0aGUgbWFpbiBpbXBsZW1lbnRhdGlvbiBtZXRob2QgdGhhdCBhcHBsaWVzIGEgcmVndWxhcgogKiBleHByZXNzaW9uIHRvIGEgc3RyaW5nIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBbUmVnRXhwTWF0Y2hdLiBBbGwKICogb3RoZXIgbWV0aG9kcyBpbiBbUmVnRXhwXSBjYW4gYnVpbGQgb24gaXQuCiAqCiAqIFVzZSBbYWxsTWF0Y2hlc10gdG8gbG9vayBmb3IgYWxsIG1hdGNoZXMgb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gaW4KICogYSBzdHJpbmcuCiAqCiAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBmaW5kcyBhbGwgbWF0Y2hlcyBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBpbgogKiBhIHN0cmluZy4KICogYGBgZGFydAogKiBSZWdFeHAgZXhwID0gbmV3IFJlZ0V4cChyIihcdyspIik7CiAqIFN0cmluZyBzdHIgPSAiUGFyc2UgbXkgc3RyaW5nIjsKICogSXRlcmFibGU8UmVnRXhwTWF0Y2g+IG1hdGNoZXMgPSBleHAuYWxsTWF0Y2hlcyhzdHIpOwogKiBgYGAKICoKICogTm90ZSB0aGUgdXNlIG9mIGEgX3JhdyBzdHJpbmdfIChhIHN0cmluZyBwcmVmaXhlZCB3aXRoIGByYCkKICogaW4gdGhlIGV4YW1wbGUgYWJvdmUuIFVzZSBhIHJhdyBzdHJpbmcgdG8gdHJlYXQgZWFjaCBjaGFyYWN0ZXIgaW4gYSBzdHJpbmcKICogYXMgYSBsaXRlcmFsIGNoYXJhY3Rlci4KICovCmFic3RyYWN0IGNsYXNzIFJlZ0V4cCBpbXBsZW1lbnRzIFBhdHRlcm4gewogIC8qKgogICAqIENvbnN0cnVjdHMgYSByZWd1bGFyIGV4cHJlc3Npb24uCiAgICoKICAgKiBUaHJvd3MgYSBbRm9ybWF0RXhjZXB0aW9uXSBpZiBbc291cmNlXSBpcyBub3QgdmFsaWQgcmVndWxhcgogICAqIGV4cHJlc3Npb24gc3ludGF4LgogICAqCiAgICogSWYgYG11bHRpTGluZWAgaXMgZW5hYmxlZCwgdGhlbiBgXmAgYW5kIGAkYCB3aWxsIG1hdGNoIHRoZSBiZWdpbm5pbmcgYW5kCiAgICogZW5kIG9mIGEgX2xpbmVfLCBpbiBhZGRpdGlvbiB0byBtYXRjaGluZyBiZWdpbm5pbmcgYW5kIGVuZCBvZiBpbnB1dCwKICAgKiByZXNwZWN0aXZlbHkuCiAgICoKICAgKiBJZiBgY2FzZVNlbnNpdGl2ZWAgaXMgZGlzYWJsZWQsIHRoZW4gY2FzZSBpcyBpZ25vcmVkLgogICAqCiAgICogSWYgYHVuaWNvZGVgIGlzIGVuYWJsZWQsIHRoZW4gdGhlIHBhdHRlcm4gaXMgdHJlYXRlZCBhcyBhIFVuaWNvZGUKICAgKiBwYXR0ZXJuIGFzIGRlc2NyaWJlZCBieSB0aGUgRUNNQVNjcmlwdCBzdGFuZGFyZC4KICAgKgogICAqIElmIGBkb3RBbGxgIGlzIGVuYWJsZWQsIHRoZW4gdGhlIGAuYCBwYXR0ZXJuIHdpbGwgbWF0Y2ggX2FsbF8gY2hhcmFjdGVycywKICAgKiBpbmNsdWRpbmcgbGluZSB0ZXJtaW5hdG9ycy4KICAgKgogICAqIEV4YW1wbGU6CiAgICoKICAgKiBgYGBkYXJ0CiAgICogdmFyIHdvcmRQYXR0ZXJuID0gUmVnRXhwKHIiKFx3KykiKTsKICAgKiB2YXIgYnJhY2tldGVkTnVtYmVyVmFsdWUgPSBSZWdFeHAoIiRrZXk6IFxcW1xcZCtcXF0iKTsKICAgKiBgYGAKICAgKgogICAqIE5vdGljZSB0aGUgdXNlIG9mIGEgX3JhdyBzdHJpbmdfIGluIHRoZSBmaXJzdCBleGFtcGxlLCBhbmQgYSByZWd1bGFyCiAgICogc3RyaW5nIGluIHRoZSBzZWNvbmQuIEJlY2F1c2Ugb2YgdGhlIG1hbnkgY2hhcmFjdGVyIGNsYXNzZXMgdXNlZCBpbgogICAqIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIGl0IGlzIGNvbW1vbiB0byB1c2UgYSByYXcgc3RyaW5nIGhlcmUsIHVubGVzcyBzdHJpbmcKICAgKiBpbnRlcnBvbGF0aW9uIGlzIHJlcXVpcmVkLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgUmVnRXhwKFN0cmluZyBzb3VyY2UsCiAgICAgIHtib29sIG11bHRpTGluZSA9IGZhbHNlLAogICAgICBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlLAogICAgICBAU2luY2UoIjIuNCIpIGJvb2wgdW5pY29kZSA9IGZhbHNlLAogICAgICBAU2luY2UoIjIuNCIpIGJvb2wgZG90QWxsID0gZmFsc2V9KTsKCiAgLyoqCiAgICogUmV0dXJucyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IG1hdGNoZXMgW3RleHRdLgogICAqCiAgICogSWYgW3RleHRdIGNvbnRhaW5zIGNoYXJhY3RlcnMgdGhhdCBhcmUgbWVhbmluZ2Z1bCBpbiByZWd1bGFyIGV4cHJlc3Npb25zLAogICAqIHRoZSByZXN1bHRpbmcgcmVndWxhciBleHByZXNzaW9uIHdpbGwgbWF0Y2ggdGhvc2UgY2hhcmFjdGVycyBsaXRlcmFsbHkuCiAgICogSWYgW3RleHRdIGNvbnRhaW5zIG5vIGNoYXJhY3RlcnMgdGhhdCBoYXZlIHNwZWNpYWwgbWVhbmluZyBpbiBhIHJlZ3VsYXIKICAgKiBleHByZXNzaW9uLCBpdCBpcyByZXR1cm5lZCB1bm1vZGlmaWVkLgogICAqCiAgICogVGhlIGNoYXJhY3RlcnMgdGhhdCBoYXZlIHNwZWNpYWwgbWVhbmluZyBpbiByZWd1bGFyIGV4cHJlc3Npb25zIGFyZToKICAgKiBgKGAsIGApYCwgYFtgLCBgXWAsIGB7YCwgYH1gLCBgKmAsIGArYCwgYD9gLCBgLmAsIGBeYCwgYCRgLCBgfGAgYW5kIGBcYC4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgU3RyaW5nIGVzY2FwZShTdHJpbmcgdGV4dCk7CgogIC8qKgogICAqIFNlYXJjaGVzIGZvciB0aGUgZmlyc3QgbWF0Y2ggb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbgogICAqIGluIHRoZSBzdHJpbmcgW2lucHV0XS4gUmV0dXJucyBgbnVsbGAgaWYgdGhlcmUgaXMgbm8gbWF0Y2guCiAgICovCiAgUmVnRXhwTWF0Y2ggZmlyc3RNYXRjaChTdHJpbmcgaW5wdXQpOwoKICAvKioKICAgKiBSZXR1cm5zIGFuIGl0ZXJhYmxlIG9mIHRoZSBtYXRjaGVzIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gb24gW2lucHV0XS4KICAgKgogICAqIElmIFtzdGFydF0gaXMgcHJvdmlkZWQsIG9ubHkgc3RhcnQgbG9va2luZyBmb3IgbWF0Y2hlcyBhdCBgc3RhcnRgLgogICAqLwogIEl0ZXJhYmxlPFJlZ0V4cE1hdGNoPiBhbGxNYXRjaGVzKFN0cmluZyBpbnB1dCwgW2ludCBzdGFydCA9IDBdKTsKCiAgLyoqCiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gaGFzIGEgbWF0Y2ggaW4gdGhlIHN0cmluZyBbaW5wdXRdLgogICAqLwogIGJvb2wgaGFzTWF0Y2goU3RyaW5nIGlucHV0KTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZmlyc3Qgc3Vic3RyaW5nIG1hdGNoIG9mIHRoaXMgcmVndWxhciBleHByZXNzaW9uIGluIFtpbnB1dF0uCiAgICovCiAgU3RyaW5nIHN0cmluZ01hdGNoKFN0cmluZyBpbnB1dCk7CgogIC8qKgogICAqIFRoZSBzb3VyY2UgcmVndWxhciBleHByZXNzaW9uIHN0cmluZyB1c2VkIHRvIGNyZWF0ZSB0aGlzIGBSZWdFeHBgLgogICAqLwogIFN0cmluZyBnZXQgcGF0dGVybjsKCiAgLyoqCiAgICogV2hldGhlciB0aGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGVzIG11bHRpcGxlIGxpbmVzLgogICAqCiAgICogSWYgdGhlIHJlZ2V4cCBkb2VzIG1hdGNoIG11bHRpcGxlIGxpbmVzLCB0aGUgIl4iIGFuZCAiJCIgY2hhcmFjdGVycwogICAqIG1hdGNoIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBsaW5lcy4gSWYgbm90LCB0aGUgY2hhcmFjdGVyIG1hdGNoIHRoZQogICAqIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBpbnB1dC4KICAgKi8KICBib29sIGdldCBpc011bHRpTGluZTsKCiAgLyoqCiAgICogV2hldGhlciB0aGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBjYXNlIHNlbnNpdGl2ZS4KICAgKgogICAqIElmIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gaXMgbm90IGNhc2Ugc2Vuc2l0aXZlLCBpdCB3aWxsIG1hdGNoIGFuIGlucHV0CiAgICogbGV0dGVyIHdpdGggYSBwYXR0ZXJuIGxldHRlciBldmVuIGlmIHRoZSB0d28gbGV0dGVycyBhcmUgZGlmZmVyZW50IGNhc2UKICAgKiB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBsZXR0ZXIuCiAgICovCiAgYm9vbCBnZXQgaXNDYXNlU2Vuc2l0aXZlOwoKICAvKioKICAgKiBXaGV0aGVyIHRoaXMgcmVndWxhciBleHByZXNzaW9uIGlzIGluIFVuaWNvZGUgbW9kZS4KICAgKgogICAqIEluIFVuaWNvZGUgbW9kZSwgVVRGLTE2IHN1cnJvZ2F0ZSBwYWlycyBpbiB0aGUgb3JpZ2luYWwgc3RyaW5nIHdpbGwgYmUKICAgKiB0cmVhdGVkIGFzIGEgc2luZ2xlIGNvZGUgcG9pbnQgYW5kIHdpbGwgbm90IG1hdGNoIHNlcGFyYXRlbHkuIE90aGVyd2lzZSwKICAgKiB0aGUgdGFyZ2V0IHN0cmluZyB3aWxsIGJlIHRyZWF0ZWQgcHVyZWx5IGFzIGEgc2VxdWVuY2Ugb2YgaW5kaXZpZHVhbCBjb2RlCiAgICogdW5pdHMgYW5kIHN1cnJvZ2F0ZXMgd2lsbCBub3QgYmUgdHJlYXRlZCBzcGVjaWFsbHkuCiAgICoKICAgKiBJbiBVbmljb2RlIG1vZGUsIHRoZSBzeW50YXggb2YgdGhlIFJlZ0V4cCBwYXR0ZXJuIGlzIG1vcmUgcmVzdHJpY3RlZCwgYnV0CiAgICogc29tZSBwYXR0ZXJuIGZlYXR1cmVzLCBsaWtlIFVuaWNvZGUgcHJvcGVydHkgZXNjYXBlcywgYXJlIG9ubHkgYXZhaWxhYmxlIGluCiAgICogdGhpcyBtb2RlLgogICAqLwogIEBTaW5jZSgiMi40IikKICBib29sIGdldCBpc1VuaWNvZGU7CgogIC8qKgogICAqIFdoZXRoZXIgIi4iIGluIHRoaXMgcmVndWxhciBleHByZXNzaW9uIG1hdGNoZXMgbGluZSB0ZXJtaW5hdG9ycy4KICAgKgogICAqIFdoZW4gZmFsc2UsIHRoZSAiLiIgY2hhcmFjdGVyIG1hdGNoZXMgYSBzaW5nbGUgY2hhcmFjdGVyLCB1bmxlc3MgdGhhdAogICAqIGNoYXJhY3RlciBpcyBhIGxpbmUgdGVybWluYXRvci4gV2hlbiB0cnVlLCB0aGVuIHRoZSAiLiIgY2hhcmFjdGVyIHdpbGwKICAgKiBtYXRjaCBhbnkgc2luZ2xlIGNoYXJhY3RlciBpbmNsdWRpbmcgbGluZSB0ZXJtaW5hdG9ycy4KICAgKgogICAqIFRoaXMgZmVhdHVyZSBpcyBkaXN0aW5jdCBmcm9tIFtpc011bHRpbGluZV0sIGFzIHRoZXkgYWZmZWN0IHRoZSBiZWhhdmlvcgogICAqIG9mIGRpZmZlcmVudCBwYXR0ZXJuIGNoYXJhY3RlcnMsIGFuZCBzbyB0aGV5IGNhbiBiZSB1c2VkIHRvZ2V0aGVyIG9yCiAgICogc2VwYXJhdGVseS4KICAgKi8KICBAU2luY2UoIjIuNCIpCiAgYm9vbCBnZXQgaXNEb3RBbGw7Cn0KCi8qKgogKiBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaC4KICoKICogUmVndWxhciBleHByZXNzaW9uIG1hdGNoZXMgYXJlIFtNYXRjaF1lcywgYnV0IGFsc28gaW5jbHVkZSB0aGUgYWJpbGl0eQogKiB0byByZXRyaWV2ZSB0aGUgbmFtZXMgZm9yIGFueSBuYW1lZCBjYXB0dXJlIGdyb3VwcyBhbmQgdG8gcmV0cmlldmUKICogbWF0Y2hlcyBmb3IgbmFtZWQgY2FwdHVyZSBncm91cHMgYnkgbmFtZSBpbnN0ZWFkIG9mIHRoZWlyIGluZGV4LgogKi8KQFNpbmNlKCIyLjMiKQphYnN0cmFjdCBjbGFzcyBSZWdFeHBNYXRjaCBpbXBsZW1lbnRzIE1hdGNoIHsKICAvKioKICAgKiBUaGUgc3RyaW5nIG1hdGNoZWQgYnkgdGhlIGdyb3VwIG5hbWVkIFtuYW1lXS4KICAgKgogICAqIFJldHVybnMgdGhlIHN0cmluZyBtYXRjaGVkIGJ5IHRoZSBjYXB0dXJlIGdyb3VwIG5hbWVkIFtuYW1lXSwgb3IKICAgKiBgbnVsbGAgaWYgbm8gc3RyaW5nIHdhcyBtYXRjaGVkIGJ5IHRoYXQgY2FwdHVyZSBncm91cCBhcyBwYXJ0IG9mCiAgICogdGhpcyBtYXRjaC4KICAgKgogICAqIFRoZSBbbmFtZV0gbXVzdCBiZSB0aGUgbmFtZSBvZiBhIG5hbWVkIGNhcHR1cmUgZ3JvdXAgaW4gdGhlIHJlZ3VsYXIKICAgKiBleHByZXNzaW9uIGNyZWF0aW5nIHRoaXMgbWF0Y2ggKHRoYXQgaXMsIHRoZSBuYW1lIG11c3QgYmUgaW4KICAgKiBbZ3JvdXBOYW1lc10pLgogICAqLwogIFN0cmluZyBuYW1lZEdyb3VwKFN0cmluZyBuYW1lKTsKCiAgLyoqCiAgICogVGhlIG5hbWVzIG9mIHRoZSBjYXB0dXJlZCBncm91cHMgaW4gdGhlIG1hdGNoLgogICAqLwogIEl0ZXJhYmxlPFN0cmluZz4gZ2V0IGdyb3VwTmFtZXM7Cn0KgL8ATk48ARMBBCEDUBgDQidYPANJQy4DRw0DRg0LJiM4BwM/ThsEKwYmBUEYBU5KEwU7BUc2BU8hBQ4FDSk8CQVKSU8gBikfISorAQY3BU9NTSwFSk4GLgEGPEEGKAEGTgVIBkMBBk8GHwEGTgYkAQZIBhYBBj0FSUslBhgBBjgFTU0iBhwBBjkFTE5POQVPURAGEBYBBkYFS0w8BU5KEQYQFQIBBB8DSkZEBA4uBjMFRkYRBUlCFAYiAQY0BiMCARVkYXJ0OmNvcmUvcmVnZXhwLmRhcnQpb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvc2V0LmRhcnSlNy8vIENvcHlyaWdodCAoYykgMjAxMSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBBIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cyBpbiB3aGljaCBlYWNoIG9iamVjdCBjYW4gb2NjdXIgb25seSBvbmNlLgogKgogKiBUaGF0IGlzLCBmb3IgZWFjaCBvYmplY3Qgb2YgdGhlIGVsZW1lbnQgdHlwZSwgdGhlIG9iamVjdCBpcyBlaXRoZXIgY29uc2lkZXJlZAogKiB0byBiZSBpbiB0aGUgc2V0LCBvciB0byBfbm90XyBiZSBpbiB0aGUgc2V0LgogKgogKiBTZXQgaW1wbGVtZW50YXRpb25zIG1heSBjb25zaWRlciBzb21lIGVsZW1lbnRzIGluZGlzdGluZ3Vpc2hhYmxlLiBUaGVzZQogKiBlbGVtZW50cyBhcmUgdHJlYXRlZCBhcyBiZWluZyB0aGUgc2FtZSBmb3IgYW55IG9wZXJhdGlvbiBvbiB0aGUgc2V0LgogKgogKiBUaGUgZGVmYXVsdCBbU2V0XSBpbXBsZW1lbnRhdGlvbiwgW0xpbmtlZEhhc2hTZXRdLCBjb25zaWRlcnMgb2JqZWN0cwogKiBpbmRpc3Rpbmd1aXNoYWJsZSBpZiB0aGV5IGFyZSBlcXVhbCB3aXRoIHJlZ2FyZCB0bwogKiBvcGVyYXRvciBbT2JqZWN0Lj09XS4KICoKICogSXRlcmF0aW5nIG92ZXIgZWxlbWVudHMgb2YgYSBzZXQgbWF5IGJlIGVpdGhlciB1bm9yZGVyZWQKICogb3Igb3JkZXJlZCBpbiBzb21lIHdheS4gRXhhbXBsZXM6CiAqCiAqICogQSBbSGFzaFNldF0gaXMgdW5vcmRlcmVkLCB3aGljaCBtZWFucyB0aGF0IGl0cyBpdGVyYXRpb24gb3JkZXIgaXMKICogICB1bnNwZWNpZmllZCwKICogKiBbTGlua2VkSGFzaFNldF0gaXRlcmF0ZXMgaW4gdGhlIGluc2VydGlvbiBvcmRlciBvZiBpdHMgZWxlbWVudHMsIGFuZAogKiAqIGEgc29ydGVkIHNldCBsaWtlIFtTcGxheVRyZWVTZXRdIGl0ZXJhdGVzIHRoZSBlbGVtZW50cyBpbiBzb3J0ZWQgb3JkZXIuCiAqCiAqIEl0IGlzIGdlbmVyYWxseSBub3QgYWxsb3dlZCB0byBtb2RpZnkgdGhlIHNldCAoYWRkIG9yIHJlbW92ZSBlbGVtZW50cykgd2hpbGUKICogYW4gb3BlcmF0aW9uIG9uIHRoZSBzZXQgaXMgYmVpbmcgcGVyZm9ybWVkLCBmb3IgZXhhbXBsZSBkdXJpbmcgYSBjYWxsIHRvCiAqIFtmb3JFYWNoXSBvciBbY29udGFpbnNBbGxdLiBOb3IgaXMgaXQgYWxsb3dlZCB0byBtb2RpZnkgdGhlIHNldCB3aGlsZQogKiBpdGVyYXRpbmcgZWl0aGVyIHRoZSBzZXQgaXRzZWxmIG9yIGFueSBbSXRlcmFibGVdIHRoYXQgaXMgYmFja2VkIGJ5IHRoZSBzZXQsCiAqIHN1Y2ggYXMgdGhlIG9uZXMgcmV0dXJuZWQgYnkgbWV0aG9kcyBsaWtlIFt3aGVyZV0gYW5kIFttYXBdLgogKgogKiBJdCBpcyBnZW5lcmFsbHkgbm90IGFsbG93ZWQgdG8gbW9kaWZ5IHRoZSBlcXVhbGl0eSBvZiBlbGVtZW50cyAoYW5kIHRodXMgbm90CiAqIHRoZWlyIGhhc2hjb2RlKSB3aGlsZSB0aGV5IGFyZSBpbiB0aGUgc2V0LiBTb21lIHNwZWNpYWxpemVkIHN1YnR5cGVzIG1heSBiZQogKiBtb3JlIHBlcm1pc3NpdmUsIGluIHdoaWNoIGNhc2UgdGhleSBzaG91bGQgZG9jdW1lbnQgdGhpcyBiZWhhdmlvci4KICovCmFic3RyYWN0IGNsYXNzIFNldDxFPiBleHRlbmRzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEU+IHsKICAvKioKICAgKiBDcmVhdGVzIGFuIGVtcHR5IFtTZXRdLgogICAqCiAgICogVGhlIGNyZWF0ZWQgW1NldF0gaXMgYSBwbGFpbiBbTGlua2VkSGFzaFNldF0uCiAgICogQXMgc3VjaCwgaXQgY29uc2lkZXJzIGVsZW1lbnRzIHRoYXQgYXJlIGVxdWFsICh1c2luZyBbb3BlcmF0b3IgPT1dKSB0byBiZQogICAqIGluZGlzdGluZ3Vpc2hhYmxlLCBhbmQgcmVxdWlyZXMgdGhlbSB0byBoYXZlIGEgY29tcGF0aWJsZQogICAqIFtPYmplY3QuaGFzaENvZGVdIGltcGxlbWVudGF0aW9uLgogICAqCiAgICogVGhlIHNldCBpcyBlcXVpdmFsZW50IHRvIG9uZSBjcmVhdGVkIGJ5IGBuZXcgTGlua2VkSGFzaFNldDxFPigpYC4KICAgKi8KICBmYWN0b3J5IFNldCgpID0gTGlua2VkSGFzaFNldDxFPjsKCiAgLyoqCiAgICogQ3JlYXRlcyBhbiBlbXB0eSBpZGVudGl0eSBbU2V0XS4KICAgKgogICAqIFRoZSBjcmVhdGVkIFtTZXRdIGlzIGEgW0xpbmtlZEhhc2hTZXRdIHRoYXQgdXNlcyBpZGVudGl0eSBhcyBlcXVhbGl0eQogICAqIHJlbGF0aW9uLgogICAqCiAgICogVGhlIHNldCBpcyBlcXVpdmFsZW50IHRvIG9uZSBjcmVhdGVkIGJ5IGBuZXcgTGlua2VkSGFzaFNldDxFPi5pZGVudGl0eSgpYC4KICAgKi8KICBmYWN0b3J5IFNldC5pZGVudGl0eSgpID0gTGlua2VkSGFzaFNldDxFPi5pZGVudGl0eTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtTZXRdIHRoYXQgY29udGFpbnMgYWxsIFtlbGVtZW50c10uCiAgICoKICAgKiBBbGwgdGhlIFtlbGVtZW50c10gc2hvdWxkIGJlIGluc3RhbmNlcyBvZiBbRV0uCiAgICogVGhlIGBlbGVtZW50c2AgaXRlcmFibGUgaXRzZWxmIGNhbiBoYXZlIGFueSB0eXBlLAogICAqIHNvIHRoaXMgY29uc3RydWN0b3IgY2FuIGJlIHVzZWQgdG8gZG93bi1jYXN0IGEgYFNldGAsIGZvciBleGFtcGxlIGFzOgogICAqCiAgICogICAgIFNldDxTdXBlclR5cGU+IHN1cGVyU2V0ID0gLi4uOwogICAqICAgICBTZXQ8U3ViVHlwZT4gc3ViU2V0ID0KICAgKiAgICAgICAgIG5ldyBTZXQ8U3ViVHlwZT4uZnJvbShzdXBlclNldC53aGVyZSgoZSkgPT4gZSBpcyBTdWJUeXBlKSk7CiAgICoKICAgKiBUaGUgY3JlYXRlZCBbU2V0XSBpcyBhIFtMaW5rZWRIYXNoU2V0XS4gQXMgc3VjaCwgaXQgY29uc2lkZXJzIGVsZW1lbnRzIHRoYXQKICAgKiBhcmUgZXF1YWwgKHVzaW5nIFtvcGVyYXRvciA9PV0pIHRvIGJlIGluZGlzdGluZ3Vpc2hhYmxlLCBhbmQgcmVxdWlyZXMgdGhlbSB0bwogICAqIGhhdmUgYSBjb21wYXRpYmxlIFtPYmplY3QuaGFzaENvZGVdIGltcGxlbWVudGF0aW9uLgogICAqCiAgICogVGhlIHNldCBpcyBlcXVpdmFsZW50IHRvIG9uZSBjcmVhdGVkIGJ5CiAgICogYG5ldyBMaW5rZWRIYXNoU2V0PEU+LmZyb20oZWxlbWVudHMpYC4KICAgKi8KICBmYWN0b3J5IFNldC5mcm9tKEl0ZXJhYmxlIGVsZW1lbnRzKSA9IExpbmtlZEhhc2hTZXQ8RT4uZnJvbTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtTZXRdIGZyb20gW2VsZW1lbnRzXS4KICAgKgogICAqIFRoZSBjcmVhdGVkIFtTZXRdIGlzIGEgW0xpbmtlZEhhc2hTZXRdLiBBcyBzdWNoLCBpdCBjb25zaWRlcnMgZWxlbWVudHMgdGhhdAogICAqIGFyZSBlcXVhbCAodXNpbmcgW29wZXJhdG9yID09XSkgdG8gYmUgaW5kaXN0aW5ndWlzaGFibGUsIGFuZCByZXF1aXJlcyB0aGVtIHRvCiAgICogaGF2ZSBhIGNvbXBhdGlibGUgW09iamVjdC5oYXNoQ29kZV0gaW1wbGVtZW50YXRpb24uCiAgICoKICAgKiBUaGUgc2V0IGlzIGVxdWl2YWxlbnQgdG8gb25lIGNyZWF0ZWQgYnkKICAgKiBgbmV3IExpbmtlZEhhc2hTZXQ8RT4ub2YoZWxlbWVudHMpYC4KICAgKi8KICBmYWN0b3J5IFNldC5vZihJdGVyYWJsZTxFPiBlbGVtZW50cykgPSBMaW5rZWRIYXNoU2V0PEU+Lm9mOwoKICAvKioKICAgKiBBZGFwdHMgW3NvdXJjZV0gdG8gYmUgYSBgU2V0PFQ+YC4KICAgKgogICAqIElmIFtuZXdTZXRdIGlzIHByb3ZpZGVkLCBpdCBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgbmV3IHNldHMgcmV0dXJuZWQKICAgKiBieSBbdG9TZXRdLCBbdW5pb25dLCBhbmQgaXMgYWxzbyB1c2VkIGZvciBbaW50ZXJzZWN0aW9uXSBhbmQgW2RpZmZlcmVuY2VdLgogICAqIElmIFtuZXdTZXRdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGNyZWF0aW5nIGEgbmV3IHNldCB1c2luZyB0aGUKICAgKiBkZWZhdWx0IFtTZXRdIGNvbnN0cnVjdG9yLCBhbmQgW2ludGVyc2VjdGlvbl0gYW5kIFtkaWZmZXJlbmNlXQogICAqIHJldHVybnMgYW4gYWRhcHRlZCB2ZXJzaW9uIG9mIGNhbGxpbmcgdGhlIHNhbWUgbWV0aG9kIG9uIHRoZSBzb3VyY2UuCiAgICoKICAgKiBBbnkgdGltZSB0aGUgc2V0IHdvdWxkIHByb2R1Y2UgYW4gZWxlbWVudCB0aGF0IGlzIG5vdCBhIFtUXSwKICAgKiB0aGUgZWxlbWVudCBhY2Nlc3Mgd2lsbCB0aHJvdy4KICAgKgogICAqIEFueSB0aW1lIGEgW1RdIHZhbHVlIGlzIGF0dGVtcHRlZCBhZGRlZCBpbnRvIHRoZSBhZGFwdGVkIHNldCwKICAgKiB0aGUgc3RvcmUgd2lsbCB0aHJvdyB1bmxlc3MgdGhlIHZhbHVlIGlzIGFsc28gYW4gaW5zdGFuY2Ugb2YgW1NdLgogICAqCiAgICogSWYgYWxsIGFjY2Vzc2VkIGVsZW1lbnRzIG9mIFtzb3VyY2VdIGFyZSBhY3R1YWxseSBpbnN0YW5jZXMgb2YgW1RdLAogICAqIGFuZCBpZiBhbGwgZWxlbWVudHMgYWRkZWQgdG8gdGhlIHJldHVybmVkIHNldCBhcmUgYWN0dWFsbHkgaW5zdGFuY2UKICAgKiBvZiBbU10sCiAgICogdGhlbiB0aGUgcmV0dXJuZWQgc2V0IGNhbiBiZSB1c2VkIGFzIGEgYFNldDxUPmAuCiAgICovCiAgc3RhdGljIFNldDxUPiBjYXN0RnJvbTxTLCBUPihTZXQ8Uz4gc291cmNlLCB7U2V0PFI+IEZ1bmN0aW9uPFI+KCkgbmV3U2V0fSkgPT4KICAgICAgQ2FzdFNldDxTLCBUPihzb3VyY2UsIG5ld1NldCk7CgogIC8qKgogICAqIFByb3ZpZGVzIGEgdmlldyBvZiB0aGlzIHNldCBhcyBhIHNldCBvZiBbUl0gaW5zdGFuY2VzLgogICAqCiAgICogSWYgdGhpcyBzZXQgY29udGFpbnMgb25seSBpbnN0YW5jZXMgb2YgW1JdLCBhbGwgcmVhZCBvcGVyYXRpb25zCiAgICogd2lsbCB3b3JrIGNvcnJlY3RseS4gSWYgYW55IG9wZXJhdGlvbiB0cmllcyB0byBhY2Nlc3MgYW4gZWxlbWVudAogICAqIHRoYXQgaXMgbm90IGFuIGluc3RhbmNlIG9mIFtSXSwgdGhlIGFjY2VzcyB3aWxsIHRocm93IGluc3RlYWQuCiAgICoKICAgKiBFbGVtZW50cyBhZGRlZCB0byB0aGUgc2V0IChlLmcuLCBieSB1c2luZyBbYWRkXSBvciBbYWRkQWxsXSkKICAgKiBtdXN0IGJlIGluc3RhbmNlIG9mIFtSXSB0byBiZSB2YWxpZCBhcmd1bWVudHMgdG8gdGhlIGFkZGluZyBmdW5jdGlvbiwKICAgKiBhbmQgdGhleSBtdXN0IGJlIGluc3RhbmNlcyBvZiBbRV0gYXMgd2VsbCB0byBiZSBhY2NlcHRlZCBieQogICAqIHRoaXMgc2V0IGFzIHdlbGwuCiAgICovCiAgU2V0PFI+IGNhc3Q8Uj4oKTsKICAvKioKICAgKiBQcm92aWRlcyBhbiBpdGVyYXRvciB0aGF0IGl0ZXJhdGVzIG92ZXIgdGhlIGVsZW1lbnRzIG9mIHRoaXMgc2V0LgogICAqCiAgICogVGhlIG9yZGVyIG9mIGl0ZXJhdGlvbiBpcyBkZWZpbmVkIGJ5IHRoZSBpbmRpdmlkdWFsIGBTZXRgIGltcGxlbWVudGF0aW9uLAogICAqIGJ1dCBtdXN0IGJlIGNvbnNpc3RlbnQgYmV0d2VlbiBjaGFuZ2VzIHRvIHRoZSBzZXQuCiAgICovCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yOwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgW3ZhbHVlXSBpcyBpbiB0aGUgc2V0LgogICAqLwogIGJvb2wgY29udGFpbnMoT2JqZWN0IHZhbHVlKTsKCiAgLyoqCiAgICogQWRkcyBbdmFsdWVdIHRvIHRoZSBzZXQuCiAgICoKICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBbdmFsdWVdIChvciBhbiBlcXVhbCB2YWx1ZSkgd2FzIG5vdCB5ZXQgaW4gdGhlIHNldC4KICAgKiBPdGhlcndpc2UgcmV0dXJucyBgZmFsc2VgIGFuZCB0aGUgc2V0IGlzIG5vdCBjaGFuZ2VkLgogICAqCiAgICogRXhhbXBsZToKICAgKgogICAqICAgICB2YXIgc2V0ID0gbmV3IFNldCgpOwogICAqICAgICB2YXIgdGltZTEgPSBuZXcgRGF0ZVRpbWUuZnJvbU1pbGxpc2Vjb25kc1NpbmNlRXBvY2goMCk7CiAgICogICAgIHZhciB0aW1lMiA9IG5ldyBEYXRlVGltZS5mcm9tTWlsbGlzZWNvbmRzU2luY2VFcG9jaCgwKTsKICAgKiAgICAgLy8gdGltZTEgYW5kIHRpbWUyIGFyZSBlcXVhbCwgYnV0IG5vdCBpZGVudGljYWwuCiAgICogICAgIEV4cGVjdC5pc1RydWUodGltZTEgPT0gdGltZTIpOwogICAqICAgICBFeHBlY3QuaXNGYWxzZShpZGVudGljYWwodGltZTEsIHRpbWUyKSk7CiAgICogICAgIHNldC5hZGQodGltZTEpOyAgLy8gPT4gdHJ1ZS4KICAgKiAgICAgLy8gQSB2YWx1ZSBlcXVhbCB0byB0aW1lMiBleGlzdHMgYWxyZWFkeSBpbiB0aGUgc2V0LCBhbmQgdGhlIGNhbGwgdG8KICAgKiAgICAgLy8gYWRkIGRvZXNuJ3QgY2hhbmdlIHRoZSBzZXQuCiAgICogICAgIHNldC5hZGQodGltZTIpOyAgLy8gPT4gZmFsc2UuCiAgICogICAgIEV4cGVjdC5pc1RydWUoc2V0Lmxlbmd0aCA9PSAxKTsKICAgKiAgICAgRXhwZWN0LmlzVHJ1ZShpZGVudGljYWwodGltZTEsIHNldC5maXJzdCkpOwogICAqLwogIGJvb2wgYWRkKEUgdmFsdWUpOwoKICAvKioKICAgKiBBZGRzIGFsbCBbZWxlbWVudHNdIHRvIHRoaXMgU2V0LgogICAqCiAgICogRXF1aXZhbGVudCB0byBhZGRpbmcgZWFjaCBlbGVtZW50IGluIFtlbGVtZW50c10gdXNpbmcgW2FkZF0sCiAgICogYnV0IHNvbWUgY29sbGVjdGlvbnMgbWF5IGJlIGFibGUgdG8gb3B0aW1pemUgaXQuCiAgICovCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gZWxlbWVudHMpOwoKICAvKioKICAgKiBSZW1vdmVzIFt2YWx1ZV0gZnJvbSB0aGUgc2V0LiBSZXR1cm5zIHRydWUgaWYgW3ZhbHVlXSB3YXMKICAgKiBpbiB0aGUgc2V0LiBSZXR1cm5zIGZhbHNlIG90aGVyd2lzZS4gVGhlIG1ldGhvZCBoYXMgbm8gZWZmZWN0CiAgICogaWYgW3ZhbHVlXSB2YWx1ZSB3YXMgbm90IGluIHRoZSBzZXQuCiAgICovCiAgYm9vbCByZW1vdmUoT2JqZWN0IHZhbHVlKTsKCiAgLyoqCiAgICogSWYgYW4gb2JqZWN0IGVxdWFsIHRvIFtvYmplY3RdIGlzIGluIHRoZSBzZXQsIHJldHVybiBpdC4KICAgKgogICAqIENoZWNrcyB3aGV0aGVyIFtvYmplY3RdIGlzIGluIHRoZSBzZXQsIGxpa2UgW2NvbnRhaW5zXSwgYW5kIGlmIHNvLAogICAqIHJldHVybnMgdGhlIG9iamVjdCBpbiB0aGUgc2V0LCBvdGhlcndpc2UgcmV0dXJucyBgbnVsbGAuCiAgICoKICAgKiBJZiB0aGUgZXF1YWxpdHkgcmVsYXRpb24gdXNlZCBieSB0aGUgc2V0IGlzIG5vdCBpZGVudGl0eSwKICAgKiB0aGVuIHRoZSByZXR1cm5lZCBvYmplY3QgbWF5IG5vdCBiZSAqaWRlbnRpY2FsKiB0byBbb2JqZWN0XS4KICAgKiBTb21lIHNldCBpbXBsZW1lbnRhdGlvbnMgbWF5IG5vdCBiZSBhYmxlIHRvIGltcGxlbWVudCB0aGlzIG1ldGhvZC4KICAgKiBJZiB0aGUgW2NvbnRhaW5zXSBtZXRob2QgaXMgY29tcHV0ZWQsCiAgICogcmF0aGVyIHRoYW4gYmVpbmcgYmFzZWQgb24gYW4gYWN0dWFsIG9iamVjdCBpbnN0YW5jZSwKICAgKiB0aGVuIHRoZXJlIG1heSBub3QgYmUgYSBzcGVjaWZpYyBvYmplY3QgaW5zdGFuY2UgcmVwcmVzZW50aW5nIHRoZQogICAqIHNldCBlbGVtZW50LgogICAqLwogIEUgbG9va3VwKE9iamVjdCBvYmplY3QpOwoKICAvKioKICAgKiBSZW1vdmVzIGVhY2ggZWxlbWVudCBvZiBbZWxlbWVudHNdIGZyb20gdGhpcyBzZXQuCiAgICovCiAgdm9pZCByZW1vdmVBbGwoSXRlcmFibGU8T2JqZWN0PiBlbGVtZW50cyk7CgogIC8qKgogICAqIFJlbW92ZXMgYWxsIGVsZW1lbnRzIG9mIHRoaXMgc2V0IHRoYXQgYXJlIG5vdCBlbGVtZW50cyBpbiBbZWxlbWVudHNdLgogICAqCiAgICogQ2hlY2tzIGZvciBlYWNoIGVsZW1lbnQgb2YgW2VsZW1lbnRzXSB3aGV0aGVyIHRoZXJlIGlzIGFuIGVsZW1lbnQgaW4gdGhpcwogICAqIHNldCB0aGF0IGlzIGVxdWFsIHRvIGl0IChhY2NvcmRpbmcgdG8gYHRoaXMuY29udGFpbnNgKSwgYW5kIGlmIHNvLCB0aGUKICAgKiBlcXVhbCBlbGVtZW50IGluIHRoaXMgc2V0IGlzIHJldGFpbmVkLCBhbmQgZWxlbWVudHMgdGhhdCBhcmUgbm90IGVxdWFsCiAgICogdG8gYW55IGVsZW1lbnQgaW4gYGVsZW1lbnRzYCBhcmUgcmVtb3ZlZC4KICAgKi8KICB2b2lkIHJldGFpbkFsbChJdGVyYWJsZTxPYmplY3Q+IGVsZW1lbnRzKTsKCiAgLyoqCiAgICogUmVtb3ZlcyBhbGwgZWxlbWVudHMgb2YgdGhpcyBzZXQgdGhhdCBzYXRpc2Z5IFt0ZXN0XS4KICAgKi8KICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKTsKCiAgLyoqCiAgICogUmVtb3ZlcyBhbGwgZWxlbWVudHMgb2YgdGhpcyBzZXQgdGhhdCBmYWlsIHRvIHNhdGlzZnkgW3Rlc3RdLgogICAqLwogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpOwoKICAvKioKICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBTZXQgY29udGFpbnMgYWxsIHRoZSBlbGVtZW50cyBvZiBbb3RoZXJdLgogICAqLwogIGJvb2wgY29udGFpbnNBbGwoSXRlcmFibGU8T2JqZWN0PiBvdGhlcik7CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgc2V0IHdoaWNoIGlzIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGlzIHNldCBhbmQgW290aGVyXS4KICAgKgogICAqIFRoYXQgaXMsIHRoZSByZXR1cm5lZCBzZXQgY29udGFpbnMgYWxsIHRoZSBlbGVtZW50cyBvZiB0aGlzIFtTZXRdIHRoYXQKICAgKiBhcmUgYWxzbyBlbGVtZW50cyBvZiBbb3RoZXJdIGFjY29yZGluZyB0byBgb3RoZXIuY29udGFpbnNgLgogICAqLwogIFNldDxFPiBpbnRlcnNlY3Rpb24oU2V0PE9iamVjdD4gb3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IHNldCB3aGljaCBjb250YWlucyBhbGwgdGhlIGVsZW1lbnRzIG9mIHRoaXMgc2V0IGFuZCBbb3RoZXJdLgogICAqCiAgICogVGhhdCBpcywgdGhlIHJldHVybmVkIHNldCBjb250YWlucyBhbGwgdGhlIGVsZW1lbnRzIG9mIHRoaXMgW1NldF0gYW5kCiAgICogYWxsIHRoZSBlbGVtZW50cyBvZiBbb3RoZXJdLgogICAqLwogIFNldDxFPiB1bmlvbihTZXQ8RT4gb3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IHNldCB3aXRoIHRoZSBlbGVtZW50cyBvZiB0aGlzIHRoYXQgYXJlIG5vdCBpbiBbb3RoZXJdLgogICAqCiAgICogVGhhdCBpcywgdGhlIHJldHVybmVkIHNldCBjb250YWlucyBhbGwgdGhlIGVsZW1lbnRzIG9mIHRoaXMgW1NldF0gdGhhdAogICAqIGFyZSBub3QgZWxlbWVudHMgb2YgW290aGVyXSBhY2NvcmRpbmcgdG8gYG90aGVyLmNvbnRhaW5zYC4KICAgKi8KICBTZXQ8RT4gZGlmZmVyZW5jZShTZXQ8T2JqZWN0PiBvdGhlcik7CgogIC8qKgogICAqIFJlbW92ZXMgYWxsIGVsZW1lbnRzIGluIHRoZSBzZXQuCiAgICovCiAgdm9pZCBjbGVhcigpOwoKICAvKiBDcmVhdGVzIGEgW1NldF0gd2l0aCB0aGUgc2FtZSBlbGVtZW50cyBhbmQgYmVoYXZpb3IgYXMgdGhpcyBgU2V0YC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzZXQgYmVoYXZlcyB0aGUgc2FtZSBhcyB0aGlzIHNldAogICAqIHdpdGggcmVnYXJkIHRvIGFkZGluZyBhbmQgcmVtb3ZpbmcgZWxlbWVudHMuCiAgICogSXQgaW5pdGlhbGx5IGNvbnRhaW5zIHRoZSBzYW1lIGVsZW1lbnRzLgogICAqIElmIHRoaXMgc2V0IHNwZWNpZmllcyBhbiBvcmRlcmluZyBvZiB0aGUgZWxlbWVudHMsCiAgICogdGhlIHJldHVybmVkIHNldCB3aWxsIGhhdmUgdGhlIHNhbWUgb3JkZXIuCiAgICovCiAgU2V0PEU+IHRvU2V0KCk7Cn0KgQoATk48ARMBBEUDUTADS0gDSDYZAzwlA0cSSk0DUExJUEADUE9GBDsGHQUzTz8nBUcGJAEGJgVLDwVQBjYBBjMFNDdLBSgfSQVRUzkFLSwGPwEGJgVRUzkFLSoGPgEGJwVJUElESgVCJAVDRwVJSQ02BlAlAQY8BUVGRAVCS0EXBhQGRwVPOAYcAQYsBh8BBh4FSzsFDgUeQUE6KDImTignKTUGFQEGJgVCNgYlAQY/QyoGHQEGPgVIPgU/QkgrO0cSBhsBBjcGLQEGSwVPTEwvBi0BBjsGKgEGQwYqAQZEBiwBBk8FTEEGKgEGUAVLIgYeAQZKBUxABigBBiYGEAFIBTMyLjgwBhICARJkYXJ0OmNvcmUvc2V0LmRhcnQqb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvc2luay5kYXJ0gyYvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogQSBnZW5lcmljIGRlc3RpbmF0aW9uIGZvciBkYXRhLgogKgogKiBNdWx0aXBsZSBkYXRhIHZhbHVlcyBjYW4gYmUgcHV0IGludG8gYSBzaW5rLCBhbmQgd2hlbiBubyBtb3JlIGRhdGEgaXMKICogYXZhaWxhYmxlLCB0aGUgc2luayBzaG91bGQgYmUgY2xvc2VkLgogKgogKiBUaGlzIGlzIGEgZ2VuZXJpYyBpbnRlcmZhY2UgdGhhdCBvdGhlciBkYXRhIHJlY2VpdmVycyBjYW4gaW1wbGVtZW50LgogKi8KYWJzdHJhY3QgY2xhc3MgU2luazxUPiB7CiAgLyoqCiAgICogQWRkcyBbZGF0YV0gdG8gdGhlIHNpbmsuCiAgICoKICAgKiBNdXN0IG5vdCBiZSBjYWxsZWQgYWZ0ZXIgYSBjYWxsIHRvIFtjbG9zZV0uCiAgICovCiAgdm9pZCBhZGQoVCBkYXRhKTsKCiAgLyoqCiAgICogQ2xvc2VzIHRoZSBzaW5rLgogICAqCiAgICogVGhlIFthZGRdIG1ldGhvZCBtdXN0IG5vdCBiZSBjYWxsZWQgYWZ0ZXIgdGhpcyBtZXRob2QuCiAgICoKICAgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIG1vcmUgdGhhbiBvbmNlIGlzIGFsbG93ZWQsIGJ1dCBkb2VzIG5vdGhpbmcuCiAgICovCiAgdm9pZCBjbG9zZSgpOwp9CiEATk48ARMBBCMDSSkDSAQZBh4FMQYUAQYWBTwFRgYQAgETZGFydDpjb3JlL3NpbmsuZGFydDBvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9zdGFja3RyYWNlLmRhcnSHui8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBBbiBpbnRlcmZhY2UgaW1wbGVtZW50ZWQgYnkgYWxsIHN0YWNrIHRyYWNlIG9iamVjdHMuCiAqCiAqIEEgW1N0YWNrVHJhY2VdIGlzIGludGVuZGVkIHRvIGNvbnZleSBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciBhYm91dCB0aGUgY2FsbAogKiBzZXF1ZW5jZSB0aGF0IHRyaWdnZXJlZCBhbiBleGNlcHRpb24uCiAqCiAqIFRoZXNlIG9iamVjdHMgYXJlIGNyZWF0ZWQgYnkgdGhlIHJ1bnRpbWUsIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBjcmVhdGUKICogdGhlbSBwcm9ncmFtbWF0aWNhbGx5LgogKi8KYWJzdHJhY3QgY2xhc3MgU3RhY2tUcmFjZSB7CiAgU3RhY2tUcmFjZSgpOyAvLyBJbiBjYXNlIGV4aXN0aW5nIGNsYXNzZXMgZXh0ZW5kIFN0YWNrVHJhY2UuCgogIC8qKgogICAqIENyZWF0ZSBhIGBTdGFja1RyYWNlYCBvYmplY3QgZnJvbSBbc3RhY2tUcmFjZVN0cmluZ10uCiAgICoKICAgKiBUaGUgY3JlYXRlZCBzdGFjayB0cmFjZSB3aWxsIGhhdmUgYSBgdG9TdHJpbmdgIG1ldGhvZCByZXR1cm5pbmcKICAgKiBgc3RhY2tUcmFjZVN0cmluZ2AuCiAgICoKICAgKiBUaGUgYHN0YWNrVHJhY2VTdHJpbmdgIGNhbiBiZSBhIHN0cmluZyByZXR1cm5lZCBieSBzb21lIG90aGVyCiAgICogc3RhY2sgdHJhY2UsIG9yIGl0IGNhbiBiZSBhbnkgc3RyaW5nIGF0IGFsbC4KICAgKiBJZiB0aGUgc3RyaW5nIGRvZXNuJ3QgbG9vayBsaWtlIGEgc3RhY2sgdHJhY2UsIGNvZGUgdGhhdCBpbnRlcnByZXRzCiAgICogc3RhY2sgdHJhY2VzIGlzIGxpa2VseSB0byBmYWlsLCBzbyBmYWtlIHN0YWNrIHRyYWNlcyBzaG91bGQgYmUgdXNlZAogICAqIHdpdGggY2FyZS4KICAgKi8KICBmYWN0b3J5IFN0YWNrVHJhY2UuZnJvbVN0cmluZyhTdHJpbmcgc3RhY2tUcmFjZVN0cmluZykgPSBfU3RyaW5nU3RhY2tUcmFjZTsKCiAgLyoqCiAgICogUmV0dXJucyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IHN0YWNrIHRyYWNlLgogICAqCiAgICogVGhpcyBpcyBzaW1pbGFyIHRvIHdoYXQgY2FuIGJlIGFjaGlldmVkIGJ5IGRvaW5nOgogICAqCiAgICogICAgIHRyeSB7IHRocm93IDA7IH0gY2F0Y2ggKF8sIHN0YWNrKSB7IHJldHVybiBzdGFjazsgfQogICAqCiAgICogVGhlIGdldHRlciBhY2hpZXZlcyB0aGlzIHdpdGhvdXQgdGhyb3dpbmcsIGV4Y2VwdCBvbiBwbGF0Zm9ybXMgdGhhdAogICAqIGhhdmUgbm8gb3RoZXIgd2F5IHRvIGdldCBhIHN0YWNrIHRyYWNlLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBTdGFja1RyYWNlIGdldCBjdXJyZW50OwoKICAvKioKICAgKiBSZXR1cm5zIGEgW1N0cmluZ10gcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0YWNrIHRyYWNlLgogICAqCiAgICogVGhlIHN0cmluZyByZXByZXNlbnRzIHRoZSBmdWxsIHN0YWNrIHRyYWNlIHN0YXJ0aW5nIGZyb20KICAgKiB0aGUgcG9pbnQgd2hlcmUgYSB0aHJvdyBvY2N1cnJlZCB0byB0aGUgdG9wIG9mIHRoZSBjdXJyZW50IGNhbGwgc2VxdWVuY2UuCiAgICoKICAgKiBUaGUgZXhhY3QgZm9ybWF0IG9mIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMgbm90IGZpbmFsLgogICAqLwogIFN0cmluZyB0b1N0cmluZygpOwp9CgpjbGFzcyBfU3RyaW5nU3RhY2tUcmFjZSBpbXBsZW1lbnRzIFN0YWNrVHJhY2UgewogIGZpbmFsIFN0cmluZyBfc3RhY2tUcmFjZTsKICBfU3RyaW5nU3RhY2tUcmFjZSh0aGlzLl9zdGFja1RyYWNlKTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBfc3RhY2tUcmFjZTsKfQo+AE5OPAETAQQ4A08pA0oaBBw/AQY7BUUZBUMySUkQBk4BBjoFNwU9BUktBioBBjsFPk8FQQYVAgEwHCckAgEZZGFydDpjb3JlL3N0YWNrdHJhY2UuZGFydC9vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9zdG9wd2F0Y2guZGFydIwCLy8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIEEgc2ltcGxlIHN0b3B3YXRjaCBpbnRlcmZhY2UgdG8gbWVhc3VyZSBlbGFwc2VkIHRpbWUuCiAqLwpjbGFzcyBTdG9wd2F0Y2ggewogIC8qKgogICAqIENhY2hlZCBmcmVxdWVuY3kgb2YgdGhlIHN5c3RlbSBpbiBIeiAodGlja3MgcGVyIHNlY29uZCkuCiAgICoKICAgKiBNdXN0IGJlIGluaXRpYWxpemVkIGluIFtfaW5pdFRpY2tlcl07CiAgICovCiAgc3RhdGljIGludCBfZnJlcXVlbmN5OwoKICAvLyBUaGUgX3N0YXJ0IGFuZCBfc3RvcCBmaWVsZHMgY2FwdHVyZSB0aGUgdGltZSB3aGVuIFtzdGFydF0gYW5kIFtzdG9wXQogIC8vIGFyZSBjYWxsZWQgcmVzcGVjdGl2ZWx5LgogIC8vIElmIF9zdG9wIGlzIG51bGwsIHRoZSBzdG9wd2F0Y2ggaXMgcnVubmluZy4KICBpbnQgX3N0YXJ0ID0gMDsKICBpbnQgX3N0b3AgPSAwOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW1N0b3B3YXRjaF0gaW4gc3RvcHBlZCBzdGF0ZSB3aXRoIGEgemVybyBlbGFwc2VkIGNvdW50LgogICAqCiAgICogVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byBzdGFydCBhIFtTdG9wd2F0Y2hdCiAgICogaW1tZWRpYXRlbHkgYWZ0ZXIgYWxsb2NhdGlvbi4KICAgKiBgYGAKICAgKiB2YXIgc3RvcHdhdGNoID0gbmV3IFN0b3B3YXRjaCgpLi5zdGFydCgpOwogICAqIGBgYAogICAqLwogIFN0b3B3YXRjaCgpIHsKICAgIGlmIChfZnJlcXVlbmN5ID09IG51bGwpIF9pbml0VGlja2VyKCk7CiAgfQoKICAvKioKICAgKiBGcmVxdWVuY3kgb2YgdGhlIGVsYXBzZWQgY291bnRlciBpbiBIei4KICAgKi8KICBpbnQgZ2V0IGZyZXF1ZW5jeSA9PiBfZnJlcXVlbmN5OwoKICAvKioKICAgKiBTdGFydHMgdGhlIFtTdG9wd2F0Y2hdLgogICAqCiAgICogVGhlIFtlbGFwc2VkXSBjb3VudCBpcyBpbmNyZWFzaW5nIG1vbm90b25pY2FsbHkuIElmIHRoZSBbU3RvcHdhdGNoXSBoYXMKICAgKiBiZWVuIHN0b3BwZWQsIHRoZW4gY2FsbGluZyBzdGFydCBhZ2FpbiByZXN0YXJ0cyBpdCB3aXRob3V0IHJlc2V0dGluZyB0aGUKICAgKiBbZWxhcHNlZF0gY291bnQuCiAgICoKICAgKiBJZiB0aGUgW1N0b3B3YXRjaF0gaXMgY3VycmVudGx5IHJ1bm5pbmcsIHRoZW4gY2FsbGluZyBzdGFydCBkb2VzIG5vdGhpbmcuCiAgICovCiAgdm9pZCBzdGFydCgpIHsKICAgIGlmIChfc3RvcCAhPSBudWxsKSB7CiAgICAgIC8vIChSZSlzdGFydCB0aGlzIHN0b3B3YXRjaC4KICAgICAgLy8gRG9uJ3QgY291bnQgdGhlIHRpbWUgd2hpbGUgdGhlIHN0b3B3YXRjaCBoYXMgYmVlbiBzdG9wcGVkLgogICAgICBfc3RhcnQgKz0gX25vdygpIC0gX3N0b3A7CiAgICAgIF9zdG9wID0gbnVsbDsKICAgIH0KICB9CgogIC8qKgogICAqIFN0b3BzIHRoZSBbU3RvcHdhdGNoXS4KICAgKgogICAqIFRoZSBbZWxhcHNlZFRpY2tzXSBjb3VudCBzdG9wcyBpbmNyZWFzaW5nIGFmdGVyIHRoaXMgY2FsbC4gSWYgdGhlCiAgICogW1N0b3B3YXRjaF0gaXMgY3VycmVudGx5IG5vdCBydW5uaW5nLCB0aGVuIGNhbGxpbmcgdGhpcyBtZXRob2QgaGFzIG5vCiAgICogZWZmZWN0LgogICAqLwogIHZvaWQgc3RvcCgpIHsKICAgIF9zdG9wID8/PSBfbm93KCk7CiAgfQoKICAvKioKICAgKiBSZXNldHMgdGhlIFtlbGFwc2VkXSBjb3VudCB0byB6ZXJvLgogICAqCiAgICogVGhpcyBtZXRob2QgZG9lcyBub3Qgc3RvcCBvciBzdGFydCB0aGUgW1N0b3B3YXRjaF0uCiAgICovCiAgdm9pZCByZXNldCgpIHsKICAgIF9zdGFydCA9IF9zdG9wID8/IF9ub3coKTsKICB9CgogIC8qKgogICAqIFRoZSBlbGFwc2VkIG51bWJlciBvZiBjbG9jayB0aWNrcyBzaW5jZSBjYWxsaW5nIFtzdGFydF0gd2hpbGUgdGhlCiAgICogW1N0b3B3YXRjaF0gaXMgcnVubmluZy4KICAgKgogICAqIFRoaXMgaXMgdGhlIGVsYXBzZWQgbnVtYmVyIG9mIGNsb2NrIHRpY2tzIGJldHdlZW4gY2FsbGluZyBbc3RhcnRdIGFuZAogICAqIGNhbGxpbmcgW3N0b3BdLgogICAqCiAgICogSXMgMCBpZiB0aGUgW1N0b3B3YXRjaF0gaGFzIG5ldmVyIGJlZW4gc3RhcnRlZC4KICAgKgogICAqIFRoZSBlbGFwc2VkIG51bWJlciBvZiBjbG9jayB0aWNrcyBpbmNyZWFzZXMgYnkgW2ZyZXF1ZW5jeV0gZXZlcnkgc2Vjb25kLgogICAqLwogIGludCBnZXQgZWxhcHNlZFRpY2tzIHsKICAgIHJldHVybiAoX3N0b3AgPz8gX25vdygpKSAtIF9zdGFydDsKICB9CgogIC8qKgogICAqIFRoZSBbZWxhcHNlZFRpY2tzXSBjb3VudGVyIGNvbnZlcnRlZCB0byBhIFtEdXJhdGlvbl0uCiAgICovCiAgRHVyYXRpb24gZ2V0IGVsYXBzZWQgewogICAgcmV0dXJuIER1cmF0aW9uKG1pY3Jvc2Vjb25kczogZWxhcHNlZE1pY3Jvc2Vjb25kcyk7CiAgfQoKICAvKioKICAgKiBUaGUgW2VsYXBzZWRUaWNrc10gY291bnRlciBjb252ZXJ0ZWQgdG8gbWljcm9zZWNvbmRzLgogICAqLwogIGV4dGVybmFsIGludCBnZXQgZWxhcHNlZE1pY3Jvc2Vjb25kczsKCiAgLyoqCiAgICogVGhlIFtlbGFwc2VkVGlja3NdIGNvdW50ZXIgY29udmVydGVkIHRvIG1pbGxpc2Vjb25kcy4KICAgKi8KICBleHRlcm5hbCBpbnQgZ2V0IGVsYXBzZWRNaWxsaXNlY29uZHM7CgogIC8qKgogICAqIFdoZXRoZXIgdGhlIFtTdG9wd2F0Y2hdIGlzIGN1cnJlbnRseSBydW5uaW5nLgogICAqLwogIGJvb2wgZ2V0IGlzUnVubmluZyA9PiBfc3RvcCA9PSBudWxsOwoKICAvKioKICAgKiBJbml0aWFsaXplcyB0aGUgdGltZS1tZWFzdXJpbmcgc3lzdGVtLiAqTXVzdCogaW5pdGlhbGl6ZSB0aGUgW19mcmVxdWVuY3ldCiAgICogdmFyaWFibGUuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIHZvaWQgX2luaXRUaWNrZXIoKTsKICBleHRlcm5hbCBzdGF0aWMgaW50IF9ub3coKTsKfQp9AE5OPAETAQQ5BBIGPgUrBhkBSh4xEhEBBkcFPCMJLwkGECsEAQYtBiMBBh0FTU4WBU8GERkjRCAUBgQBBhwFR0sNBhAWBAEGKQU5BhEeBAEGRx0FSxUFNQVOBhknBAEGOwYZOAQBBjsGKAEGOwYoAQYzBicBBk8PBiYeAgEYZGFydDpjb3JlL3N0b3B3YXRjaC5kYXJ0NG9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvc3RvcHdhdGNoX3BhdGNoLmRhcnSHIi8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIFN0b3B3YXRjaCB7CiAgc3RhdGljIGNvbnN0IF9tYXhJbnQgPSAweDdGRkZGRkZGRkZGRkZGRkY7CgogIEBwYXRjaAogIHN0YXRpYyB2b2lkIF9pbml0VGlja2VyKCkgewogICAgaWYgKF9mcmVxdWVuY3kgPT0gbnVsbCkgewogICAgICBfZnJlcXVlbmN5ID0gX2NvbXB1dGVGcmVxdWVuY3koKTsKICAgIH0KICB9CgogIC8vIFJldHVybnMgdGhlIGN1cnJlbnQgY2xvY2sgdGljay4KICBAcGF0Y2gKICBzdGF0aWMgaW50IF9ub3coKSBuYXRpdmUgIlN0b3B3YXRjaF9ub3ciOwoKICAvLyBSZXR1cm5zIHRoZSBmcmVxdWVuY3kgb2YgY2xvY2sgdGlja3MgaW4gSHouCiAgc3RhdGljIGludCBfY29tcHV0ZUZyZXF1ZW5jeSgpIG5hdGl2ZSAiU3RvcHdhdGNoX2ZyZXF1ZW5jeSI7CgogIEBwYXRjaAogIGludCBnZXQgZWxhcHNlZE1pY3Jvc2Vjb25kcyB7CiAgICBpbnQgdGlja3MgPSBlbGFwc2VkVGlja3M7CiAgICAvLyBTcGVjaWFsIGNhc2UgdGhlIG1vcmUgbGlrZWx5IGZyZXF1ZW5jaWVzIHRvIGF2b2lkIGRpdmlzaW9uLAogICAgLy8gb3IgZGl2aWRlIGJ5IGEga25vd24gdmFsdWUuCiAgICBpZiAoX2ZyZXF1ZW5jeSA9PSAxMDAwMDAwMDAwKSByZXR1cm4gdGlja3Mgfi8gMTAwMDsKICAgIGlmIChfZnJlcXVlbmN5ID09IDEwMDAwMDApIHJldHVybiB0aWNrczsKICAgIGlmIChfZnJlcXVlbmN5ID09IDEwMDApIHJldHVybiB0aWNrcyAqIDEwMDA7CiAgICBpZiAodGlja3MgPD0gKF9tYXhJbnQgfi8gMTAwMDAwMCkpIHsKICAgICAgcmV0dXJuICh0aWNrcyAqIDEwMDAwMDApIH4vIF9mcmVxdWVuY3k7CiAgICB9CiAgICAvLyBNdWx0aXBsaWNhdGlvbiB3b3VsZCBoYXZlIG92ZXJmbG93ZWQuCiAgICBpbnQgdGlja3NQZXJTZWNvbmQgPSB0aWNrcyB+LyBfZnJlcXVlbmN5OwogICAgaW50IHJlbWFpbmluZ1RpY2tzID0gdGlja3MucmVtYWluZGVyKF9mcmVxdWVuY3kpOwogICAgcmV0dXJuIHRpY2tzUGVyU2Vjb25kICogMTAwMDAwMCArIChyZW1haW5pbmdUaWNrcyAqIDEwMDAwMDApIH4vIF9mcmVxdWVuY3k7CiAgfQoKICBAcGF0Y2gKICBpbnQgZ2V0IGVsYXBzZWRNaWxsaXNlY29uZHMgewogICAgaW50IHRpY2tzID0gZWxhcHNlZFRpY2tzOwogICAgaWYgKF9mcmVxdWVuY3kgPT0gMTAwMDAwMDAwMCkgcmV0dXJuIHRpY2tzIH4vIDEwMDAwMDA7CiAgICBpZiAoX2ZyZXF1ZW5jeSA9PSAxMDAwMDAwKSByZXR1cm4gdGlja3Mgfi8gMTAwMDsKICAgIGlmIChfZnJlcXVlbmN5ID09IDEwMDApIHJldHVybiB0aWNrczsKICAgIGlmICh0aWNrcyA8PSAoX21heEludCB+LyAxMDAwKSkgewogICAgICByZXR1cm4gKHRpY2tzICogMTAwMCkgfi8gX2ZyZXF1ZW5jeTsKICAgIH0KICAgIC8vIE11bHRpcGxpY2F0aW9uIHdvdWxkIGhhdmUgb3ZlcmZsb3dlZC4KICAgIGludCB0aWNrc1BlclNlY29uZCA9IHRpY2tzIH4vIF9mcmVxdWVuY3k7CiAgICBpbnQgcmVtYWluaW5nVGlja3MgPSB0aWNrcy5yZW1haW5kZXIoX2ZyZXF1ZW5jeSk7CiAgICByZXR1cm4gdGlja3NQZXJTZWNvbmQgKiAxMDAwICsgKHJlbWFpbmluZ1RpY2tzICogMTAwMCkgfi8gX2ZyZXF1ZW5jeTsKICB9Cn0KOgBOTjwBHgEHEi0BCR4eKAYEASUJLAExPwEJIB5DIzgtMSkuBi0uNlAEAQkgHjs1KiYrBi0uNkoEAgEkZGFydDpjb3JlLXBhdGNoL3N0b3B3YXRjaF9wYXRjaC5kYXJ0LG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb3JlL3N0cmluZy5kYXJ0wABx9C8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBBIHNlcXVlbmNlIG9mIFVURi0xNiBjb2RlIHVuaXRzLgogKgogKiBTdHJpbmdzIGFyZSBtYWlubHkgdXNlZCB0byByZXByZXNlbnQgdGV4dC4gQSBjaGFyYWN0ZXIgbWF5IGJlIHJlcHJlc2VudGVkIGJ5CiAqIG11bHRpcGxlIGNvZGUgcG9pbnRzLCBlYWNoIGNvZGUgcG9pbnQgY29uc2lzdGluZyBvZiBvbmUgb3IgdHdvIGNvZGUKICogdW5pdHMuIEZvciBleGFtcGxlIHRoZSBQYXB1YSBOZXcgR3VpbmVhIGZsYWcgY2hhcmFjdGVyIHJlcXVpcmVzIGZvdXIgY29kZQogKiB1bml0cyB0byByZXByZXNlbnQgdHdvIGNvZGUgcG9pbnRzLCBidXQgc2hvdWxkIGJlIHRyZWF0ZWQgbGlrZSBhIHNpbmdsZQogKiBjaGFyYWN0ZXI6ICLwn4e18J+HrCIuIFBsYXRmb3JtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IHRoZSBmbGFnIGNoYXJhY3RlciBtYXkgc2hvdwogKiB0aGUgbGV0dGVycyAiUEciIGluc3RlYWQuIElmIHRoZSBjb2RlIHBvaW50cyBhcmUgc3dhcHBlZCwgaXQgaW5zdGVhZCBiZWNvbWVzCiAqIHRoZSBHdWFkZWxvdXBlIGZsYWcgIvCfh6zwn4e1IiAoIkdQIikuCiAqCiAqIEEgc3RyaW5nIGNhbiBiZSBlaXRoZXIgc2luZ2xlIG9yIG11bHRpbGluZS4gU2luZ2xlIGxpbmUgc3RyaW5ncyBhcmUKICogd3JpdHRlbiB1c2luZyBtYXRjaGluZyBzaW5nbGUgb3IgZG91YmxlIHF1b3RlcywgYW5kIG11bHRpbGluZSBzdHJpbmdzIGFyZQogKiB3cml0dGVuIHVzaW5nIHRyaXBsZSBxdW90ZXMuIFRoZSBmb2xsb3dpbmcgYXJlIGFsbCB2YWxpZCBEYXJ0IHN0cmluZ3M6CiAqCiAqICAgICAnU2luZ2xlIHF1b3Rlcyc7CiAqICAgICAiRG91YmxlIHF1b3RlcyI7CiAqICAgICAnRG91YmxlIHF1b3RlcyBpbiAic2luZ2xlIiBxdW90ZXMnOwogKiAgICAgIlNpbmdsZSBxdW90ZXMgaW4gJ2RvdWJsZScgcXVvdGVzIjsKICoKICogICAgICcnJ0EKICogICAgIG11bHRpbGluZQogKiAgICAgc3RyaW5nJycnOwogKgogKiAgICAgIiIiCiAqICAgICBBbm90aGVyCiAqICAgICBtdWx0aWxpbmUKICogICAgIHN0cmluZyIiIjsKICoKICogU3RyaW5ncyBhcmUgaW1tdXRhYmxlLiBBbHRob3VnaCB5b3UgY2Fubm90IGNoYW5nZSBhIHN0cmluZywgeW91IGNhbiBwZXJmb3JtCiAqIGFuIG9wZXJhdGlvbiBvbiBhIHN0cmluZyBhbmQgYXNzaWduIHRoZSByZXN1bHQgdG8gYSBuZXcgc3RyaW5nOgogKgogKiAgICAgdmFyIHN0cmluZyA9ICdEYXJ0IGlzIGZ1bic7CiAqICAgICB2YXIgbmV3U3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZygwLCA1KTsKICoKICogWW91IGNhbiB1c2UgdGhlIHBsdXMgKGArYCkgb3BlcmF0b3IgdG8gY29uY2F0ZW5hdGUgc3RyaW5nczoKICoKICogICAgICdEYXJ0ICcgKyAnaXMgJyArICdmdW4hJzsgLy8gJ0RhcnQgaXMgZnVuIScKICoKICogWW91IGNhbiBhbHNvIHVzZSBhZGphY2VudCBzdHJpbmcgbGl0ZXJhbHMgZm9yIGNvbmNhdGVuYXRpb246CiAqCiAqICAgICAnRGFydCAnICdpcyAnICdmdW4hJzsgICAgLy8gJ0RhcnQgaXMgZnVuIScKICoKICogWW91IGNhbiB1c2UgYCR7fWAgdG8gaW50ZXJwb2xhdGUgdGhlIHZhbHVlIG9mIERhcnQgZXhwcmVzc2lvbnMKICogd2l0aGluIHN0cmluZ3MuIFRoZSBjdXJseSBicmFjZXMgY2FuIGJlIG9taXR0ZWQgd2hlbiBldmFsdWF0aW5nIGlkZW50aWZpZXJzOgogKgogKiAgICAgc3RyaW5nID0gJ2RhcnRsYW5nJzsKICogICAgICckc3RyaW5nIGhhcyAke3N0cmluZy5sZW5ndGh9IGxldHRlcnMnOyAvLyAnZGFydGxhbmcgaGFzIDggbGV0dGVycycKICoKICogQSBzdHJpbmcgaXMgcmVwcmVzZW50ZWQgYnkgYSBzZXF1ZW5jZSBvZiBVbmljb2RlIFVURi0xNiBjb2RlIHVuaXRzCiAqIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgW2NvZGVVbml0QXRdIG9yIHRoZSBbY29kZVVuaXRzXSBtZW1iZXJzOgogKgogKiAgICAgc3RyaW5nID0gJ0RhcnQnOwogKiAgICAgc3RyaW5nLmNvZGVVbml0QXQoMCk7IC8vIDY4CiAqICAgICBzdHJpbmcuY29kZVVuaXRzOyAgICAgLy8gWzY4LCA5NywgMTE0LCAxMTZdCiAqCiAqIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgY29kZSB1bml0cyBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIGluZGV4CiAqIG9wZXJhdG9yOgogKgogKiAgICAgc3RyaW5nWzBdOyAgICAgICAgICAgIC8vICdEJwogKgogKiBUaGUgY2hhcmFjdGVycyBvZiBhIHN0cmluZyBhcmUgZW5jb2RlZCBpbiBVVEYtMTYuIERlY29kaW5nIFVURi0xNiwgd2hpY2gKICogY29tYmluZXMgc3Vycm9nYXRlIHBhaXJzLCB5aWVsZHMgVW5pY29kZSBjb2RlIHBvaW50cy4gRm9sbG93aW5nIGEgc2ltaWxhcgogKiB0ZXJtaW5vbG9neSB0byBHbywgd2UgdXNlIHRoZSBuYW1lICdydW5lJyBmb3IgYW4gaW50ZWdlciByZXByZXNlbnRpbmcgYQogKiBVbmljb2RlIGNvZGUgcG9pbnQuIFVzZSB0aGUgW3J1bmVzXSBwcm9wZXJ0eSB0byBnZXQgdGhlIHJ1bmVzIG9mIGEgc3RyaW5nOgogKgogKiAgICAgc3RyaW5nLnJ1bmVzLnRvTGlzdCgpOyAvLyBbNjgsIDk3LCAxMTQsIDExNl0KICoKICogRm9yIGEgY2hhcmFjdGVyIG91dHNpZGUgdGhlIEJhc2ljIE11bHRpbGluZ3VhbCBQbGFuZSAocGxhbmUgMCkgdGhhdCBpcwogKiBjb21wb3NlZCBvZiBhIHN1cnJvZ2F0ZSBwYWlyLCBbcnVuZXNdIGNvbWJpbmVzIHRoZSBwYWlyIGFuZCByZXR1cm5zIGEKICogc2luZ2xlIGludGVnZXIuICBGb3IgZXhhbXBsZSwgdGhlIFVuaWNvZGUgY2hhcmFjdGVyIGZvciBhCiAqIG11c2ljYWwgRy1jbGVmICgn8J2EnicpIHdpdGggcnVuZSB2YWx1ZSAweDFEMTFFIGNvbnNpc3RzIG9mIGEgVVRGLTE2IHN1cnJvZ2F0ZQogKiBwYWlyOiBgMHhEODM0YCBhbmQgYDB4REQxRWAuIFVzaW5nIFtjb2RlVW5pdHNdIHJldHVybnMgdGhlIHN1cnJvZ2F0ZSBwYWlyLAogKiBhbmQgdXNpbmcgYHJ1bmVzYCByZXR1cm5zIHRoZWlyIGNvbWJpbmVkIHZhbHVlOgogKgogKiAgICAgdmFyIGNsZWYgPSAnXHV7MUQxMUV9JzsKICogICAgIGNsZWYuY29kZVVuaXRzOyAgICAgICAgIC8vIFsweEQ4MzQsIDB4REQxRV0KICogICAgIGNsZWYucnVuZXMudG9MaXN0KCk7ICAgIC8vIFsweDFEMTFFXQogKgogKiBUaGUgU3RyaW5nIGNsYXNzIGNhbiBub3QgYmUgZXh0ZW5kZWQgb3IgaW1wbGVtZW50ZWQuIEF0dGVtcHRpbmcgdG8gZG8gc28KICogeWllbGRzIGEgY29tcGlsZS10aW1lIGVycm9yLgogKgogKiAjIyBPdGhlciByZXNvdXJjZXMKICoKICogU2VlIFtTdHJpbmdCdWZmZXJdIHRvIGVmZmljaWVudGx5IGJ1aWxkIGEgc3RyaW5nIGluY3JlbWVudGFsbHkuIFNlZQogKiBbUmVnRXhwXSB0byB3b3JrIHdpdGggcmVndWxhciBleHByZXNzaW9ucy4KICoKICogQWxzbyBzZWU6CiAqCiAqICogW0RhcnQgQ29va2Jvb2tdKGh0dHBzOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL2Nvb2tib29rLyNzdHJpbmdzKQogKiAgIGZvciBTdHJpbmcgZXhhbXBsZXMgYW5kIHJlY2lwZXMuCiAqICogW0RhcnQgVXAgYW5kIFJ1bm5pbmddKGh0dHBzOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL2RhcnQtdXAtYW5kLXJ1bm5pbmcvY2gwMy5odG1sI3N0cmluZ3MtYW5kLXJlZ3VsYXItZXhwcmVzc2lvbnMpCiAqLwphYnN0cmFjdCBjbGFzcyBTdHJpbmcgaW1wbGVtZW50cyBDb21wYXJhYmxlPFN0cmluZz4sIFBhdHRlcm4gewogIC8qKgogICAqIEFsbG9jYXRlcyBhIG5ldyBTdHJpbmcgZm9yIHRoZSBzcGVjaWZpZWQgW2NoYXJDb2Rlc10uCiAgICoKICAgKiBUaGUgW2NoYXJDb2Rlc10gY2FuIGJlIFVURi0xNiBjb2RlIHVuaXRzIG9yIHJ1bmVzLiBJZiBhIGNoYXItY29kZSB2YWx1ZSBpcwogICAqIDE2LWJpdCwgaXQgaXMgY29waWVkIHZlcmJhdGltOgogICAqCiAgICogICAgIG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhbNjhdKTsgLy8gJ0QnCiAgICoKICAgKiBJZiBhIGNoYXItY29kZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gMTYtYml0cywgaXQgaXMgZGVjb21wb3NlZCBpbnRvIGEKICAgKiBzdXJyb2dhdGUgcGFpcjoKICAgKgogICAqICAgICB2YXIgY2xlZiA9IG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhbMHgxRDExRV0pOwogICAqICAgICBjbGVmLmNvZGVVbml0QXQoMCk7IC8vIDB4RDgzNAogICAqICAgICBjbGVmLmNvZGVVbml0QXQoMSk7IC8vIDB4REQxRQogICAqCiAgICogSWYgW3N0YXJ0XSBhbmQgW2VuZF0gaXMgcHJvdmlkZWQsIG9ubHkgdGhlIHZhbHVlcyBvZiBbY2hhckNvZGVzXQogICAqIGF0IHBvc2l0aW9ucyBmcm9tIGBzdGFydGAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCBgZW5kYCwgYXJlIHVzZWQuCiAgICogVGhlIGBzdGFydGAgYW5kIGBlbmRgIHZhbHVlcyBtdXN0IHNhdGlzZnkKICAgKiBgMCA8PSBzdGFydCA8PSBlbmQgPD0gY2hhckNvZGVzLmxlbmd0aGAuCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBTdHJpbmcuZnJvbUNoYXJDb2RlcyhJdGVyYWJsZTxpbnQ+IGNoYXJDb2RlcywKICAgICAgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKTsKCiAgLyoqCiAgICogQWxsb2NhdGVzIGEgbmV3IFN0cmluZyBmb3IgdGhlIHNwZWNpZmllZCBbY2hhckNvZGVdLgogICAqCiAgICogSWYgdGhlIFtjaGFyQ29kZV0gY2FuIGJlIHJlcHJlc2VudGVkIGJ5IGEgc2luZ2xlIFVURi0xNiBjb2RlIHVuaXQsIHRoZSBuZXcKICAgKiBzdHJpbmcgY29udGFpbnMgYSBzaW5nbGUgY29kZSB1bml0LiBPdGhlcndpc2UsIHRoZSBbbGVuZ3RoXSBpcyAyIGFuZAogICAqIHRoZSBjb2RlIHVuaXRzIGZvcm0gYSBzdXJyb2dhdGUgcGFpci4gU2VlIGRvY3VtZW50YXRpb24gZm9yCiAgICogW2Zyb21DaGFyQ29kZXNdLgogICAqCiAgICogQ3JlYXRpbmcgYSBTdHJpbmcgd2l0aCBoYWxmIG9mIGEgc3Vycm9nYXRlIHBhaXIgaXMgYWxsb3dlZC4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IFN0cmluZy5mcm9tQ2hhckNvZGUoaW50IGNoYXJDb2RlKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCBkZWNsYXJhdGlvbiBbbmFtZV0uCiAgICoKICAgKiBFbnZpcm9ubWVudCBkZWNsYXJhdGlvbnMgYXJlIHByb3ZpZGVkIGJ5IHRoZSBzdXJyb3VuZGluZyBzeXN0ZW0gY29tcGlsaW5nCiAgICogb3IgcnVubmluZyB0aGUgRGFydCBwcm9ncmFtLiBEZWNsYXJhdGlvbnMgbWFwIGEgc3RyaW5nIGtleSB0byBhIHN0cmluZwogICAqIHZhbHVlLgogICAqCiAgICogSWYgW25hbWVdIGlzIG5vdCBkZWNsYXJlZCBpbiB0aGUgZW52aXJvbm1lbnQsIHRoZSByZXN1bHQgaXMgaW5zdGVhZAogICAqIFtkZWZhdWx0VmFsdWVdLgogICAqCiAgICogRXhhbXBsZSBvZiBnZXR0aW5nIGEgdmFsdWU6CiAgICoKICAgKiAgICAgY29uc3QgU3RyaW5nLmZyb21FbnZpcm9ubWVudCgiZGVmYXVsdEZsb28iLCBkZWZhdWx0VmFsdWU6ICJubyBmbG9vIikKICAgKgogICAqIEV4YW1wbGUgb2YgY2hlY2tpbmcgd2hldGhlciBhIGRlY2xhcmF0aW9uIGlzIHRoZXJlIGF0IGFsbDoKICAgKgogICAqICAgICB2YXIgaXNEZWNsYXJlZCA9IGNvbnN0IFN0cmluZy5mcm9tRW52aXJvbm1lbnQoIm1heWJlRGVjbGFyZWQiKSAhPSBudWxsOwogICAqLwogIC8vIFRoZSAuZnJvbUVudmlyb25tZW50KCkgY29uc3RydWN0b3JzIGFyZSBzcGVjaWFsIGluIHRoYXQgd2UgZG8gbm90IHdhbnQKICAvLyB1c2VycyB0byBjYWxsIHRoZW0gdXNpbmcgIm5ldyIuIFdlIHByb2hpYml0IHRoYXQgYnkgZ2l2aW5nIHRoZW0gYm9kaWVzCiAgLy8gdGhhdCB0aHJvdywgZXZlbiB0aG91Z2ggY29uc3QgY29uc3RydWN0b3JzIGFyZSBub3QgYWxsb3dlZCB0byBoYXZlIGJvZGllcy4KICAvLyBEaXNhYmxlIHRob3NlIHN0YXRpYyBlcnJvcnMuCiAgLy9pZ25vcmU6IGNvbnN0X2NvbnN0cnVjdG9yX3dpdGhfYm9keQogIC8vaWdub3JlOiBjb25zdF9mYWN0b3J5CiAgZXh0ZXJuYWwgY29uc3QgZmFjdG9yeSBTdHJpbmcuZnJvbUVudmlyb25tZW50KFN0cmluZyBuYW1lLAogICAgICB7U3RyaW5nIGRlZmF1bHRWYWx1ZX0pOwoKICAvKioKICAgKiBHZXRzIHRoZSBjaGFyYWN0ZXIgKGFzIGEgc2luZ2xlLWNvZGUtdW5pdCBbU3RyaW5nXSkgYXQgdGhlIGdpdmVuIFtpbmRleF0uCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgc3RyaW5nIHJlcHJlc2VudHMgZXhhY3RseSBvbmUgVVRGLTE2IGNvZGUgdW5pdCwgd2hpY2ggbWF5IGJlCiAgICogaGFsZiBvZiBhIHN1cnJvZ2F0ZSBwYWlyLiBBIHNpbmdsZSBtZW1iZXIgb2YgYSBzdXJyb2dhdGUgcGFpciBpcyBhbgogICAqIGludmFsaWQgVVRGLTE2IHN0cmluZzoKICAgKgogICAqICAgICB2YXIgY2xlZiA9ICdcdXsxRDExRX0nOwogICAqICAgICAvLyBUaGVzZSByZXByZXNlbnQgaW52YWxpZCBVVEYtMTYgc3RyaW5ncy4KICAgKiAgICAgY2xlZlswXS5jb2RlVW5pdHM7ICAgICAgLy8gWzB4RDgzNF0KICAgKiAgICAgY2xlZlsxXS5jb2RlVW5pdHM7ICAgICAgLy8gWzB4REQxRV0KICAgKgogICAqIFRoaXMgbWV0aG9kIGlzIGVxdWl2YWxlbnQgdG8KICAgKiBgbmV3IFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5jb2RlVW5pdEF0KGluZGV4KSlgLgogICAqLwogIFN0cmluZyBvcGVyYXRvciBbXShpbnQgaW5kZXgpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSAxNi1iaXQgVVRGLTE2IGNvZGUgdW5pdCBhdCB0aGUgZ2l2ZW4gW2luZGV4XS4KICAgKi8KICBpbnQgY29kZVVuaXRBdChpbnQgaW5kZXgpOwoKICAvKioKICAgKiBUaGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuCiAgICoKICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgVVRGLTE2IGNvZGUgdW5pdHMgaW4gdGhpcyBzdHJpbmcuIFRoZSBudW1iZXIKICAgKiBvZiBbcnVuZXNdIG1pZ2h0IGJlIGZld2VyLCBpZiB0aGUgc3RyaW5nIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3V0c2lkZQogICAqIHRoZSBCYXNpYyBNdWx0aWxpbmd1YWwgUGxhbmUgKHBsYW5lIDApOgogICAqCiAgICogICAgICdEYXJ0Jy5sZW5ndGg7ICAgICAgICAgIC8vIDQKICAgKiAgICAgJ0RhcnQnLnJ1bmVzLmxlbmd0aDsgICAgLy8gNAogICAqCiAgICogICAgIHZhciBjbGVmID0gJ1x1ezFEMTFFfSc7CiAgICogICAgIGNsZWYubGVuZ3RoOyAgICAgICAgICAgIC8vIDIKICAgKiAgICAgY2xlZi5ydW5lcy5sZW5ndGg7ICAgICAgLy8gMQogICAqLwogIGludCBnZXQgbGVuZ3RoOwoKICAvKioKICAgKiBSZXR1cm5zIGEgaGFzaCBjb2RlIGRlcml2ZWQgZnJvbSB0aGUgY29kZSB1bml0cyBvZiB0aGUgc3RyaW5nLgogICAqCiAgICogVGhpcyBpcyBjb21wYXRpYmxlIHdpdGggW29wZXJhdG9yID09XS4gU3RyaW5ncyB3aXRoIHRoZSBzYW1lIHNlcXVlbmNlCiAgICogb2YgY29kZSB1bml0cyBoYXZlIHRoZSBzYW1lIGhhc2ggY29kZS4KICAgKi8KICBpbnQgZ2V0IGhhc2hDb2RlOwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgb3RoZXIgaXMgYSBgU3RyaW5nYCB3aXRoIHRoZSBzYW1lIHNlcXVlbmNlIG9mIGNvZGUgdW5pdHMuCiAgICoKICAgKiBUaGlzIG1ldGhvZCBjb21wYXJlcyBlYWNoIGluZGl2aWR1YWwgY29kZSB1bml0IG9mIHRoZSBzdHJpbmdzLgogICAqIEl0IGRvZXMgbm90IGNoZWNrIGZvciBVbmljb2RlIGVxdWl2YWxlbmNlLgogICAqIEZvciBleGFtcGxlLCBib3RoIHRoZSBmb2xsb3dpbmcgc3RyaW5ncyByZXByZXNlbnQgdGhlIHN0cmluZyAnQW3DqWxpZScsCiAgICogYnV0IGR1ZSB0byB0aGVpciBkaWZmZXJlbnQgZW5jb2RpbmcsIGFyZSBub3QgZXF1YWw6CiAgICoKICAgKiAgICAgJ0FtXHhlOWxpZScgPT0gJ0FtZVx1ezMwMX1saWUnOyAvLyBmYWxzZQogICAqCiAgICogVGhlIGZpcnN0IHN0cmluZyBlbmNvZGVzICfDqScgYXMgYSBzaW5nbGUgdW5pY29kZSBjb2RlIHVuaXQgKGFsc28KICAgKiBhIHNpbmdsZSBydW5lKSwgd2hlcmVhcyB0aGUgc2Vjb25kIHN0cmluZyBlbmNvZGVzIGl0IGFzICdlJyB3aXRoIHRoZQogICAqIGNvbWJpbmluZyBhY2NlbnQgY2hhcmFjdGVyICfil4zMgScuCiAgICovCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpOwoKICAvKioKICAgKiBDb21wYXJlcyB0aGlzIHN0cmluZyB0byBbb3RoZXJdLgogICAqCiAgICogUmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlIGlmIGB0aGlzYCBpcyBvcmRlcmVkIGJlZm9yZSBgb3RoZXJgLAogICAqIGEgcG9zaXRpdmUgdmFsdWUgaWYgYHRoaXNgIGlzIG9yZGVyZWQgYWZ0ZXIgYG90aGVyYCwKICAgKiBvciB6ZXJvIGlmIGB0aGlzYCBhbmQgYG90aGVyYCBhcmUgZXF1aXZhbGVudC4KICAgKgogICAqIFRoZSBvcmRlcmluZyBpcyB0aGUgc2FtZSBhcyB0aGUgb3JkZXJpbmcgb2YgdGhlIGNvZGUgcG9pbnRzIGF0IHRoZSBmaXJzdAogICAqIHBvc2l0aW9uIHdoZXJlIHRoZSB0d28gc3RyaW5ncyBkaWZmZXIuCiAgICogSWYgb25lIHN0cmluZyBpcyBhIHByZWZpeCBvZiB0aGUgb3RoZXIsCiAgICogdGhlbiB0aGUgc2hvcnRlciBzdHJpbmcgaXMgb3JkZXJlZCBiZWZvcmUgdGhlIGxvbmdlciBzdHJpbmcuCiAgICogSWYgdGhlIHN0cmluZ3MgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGNvbnRlbnQsIHRoZXkgYXJlIGVxdWl2YWxlbnQgd2l0aAogICAqIHJlZ2FyZCB0byB0aGUgb3JkZXJpbmcuCiAgICogT3JkZXJpbmcgZG9lcyBub3QgY2hlY2sgZm9yIFVuaWNvZGUgZXF1aXZhbGVuY2UuCiAgICogVGhlIGNvbXBhcmlzb24gaXMgY2FzZSBzZW5zaXRpdmUuCiAgICovCiAgaW50IGNvbXBhcmVUbyhTdHJpbmcgb3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBzdHJpbmcgZW5kcyB3aXRoIFtvdGhlcl0uIEZvciBleGFtcGxlOgogICAqCiAgICogICAgICdEYXJ0Jy5lbmRzV2l0aCgndCcpOyAvLyB0cnVlCiAgICovCiAgYm9vbCBlbmRzV2l0aChTdHJpbmcgb3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBzdHJpbmcgc3RhcnRzIHdpdGggYSBtYXRjaCBvZiBbcGF0dGVybl0uCiAgICoKICAgKiAgICAgdmFyIHN0cmluZyA9ICdEYXJ0JzsKICAgKiAgICAgc3RyaW5nLnN0YXJ0c1dpdGgoJ0QnKTsgICAgICAgICAgICAgICAgICAgICAgIC8vIHRydWUKICAgKiAgICAgc3RyaW5nLnN0YXJ0c1dpdGgobmV3IFJlZ0V4cChyJ1tBLVpdW2Etel0nKSk7IC8vIHRydWUKICAgKgogICAqIElmIFtpbmRleF0gaXMgcHJvdmlkZWQsIHRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgc3Vic3RyaW5nIHN0YXJ0aW5nCiAgICogYXQgdGhhdCBpbmRleCBzdGFydHMgd2l0aCBhIG1hdGNoIG9mIFtwYXR0ZXJuXToKICAgKgogICAqICAgICBzdHJpbmcuc3RhcnRzV2l0aCgnYXJ0JywgMSk7ICAgICAgICAgICAgICAgICAgLy8gdHJ1ZQogICAqICAgICBzdHJpbmcuc3RhcnRzV2l0aChuZXcgUmVnRXhwKHInXHd7M30nKSk7ICAgICAgLy8gdHJ1ZQogICAqCiAgICogW2luZGV4XSBtdXN0IG5vdCBiZSBuZWdhdGl2ZSBvciBncmVhdGVyIHRoYW4gW2xlbmd0aF0uCiAgICoKICAgKiBBIFtSZWdFeHBdIGNvbnRhaW5pbmcgJ14nIGRvZXMgbm90IG1hdGNoIGlmIHRoZSBbaW5kZXhdIGlzIGdyZWF0ZXIgdGhhbgogICAqIHplcm8uIFRoZSBwYXR0ZXJuIHdvcmtzIG9uIHRoZSBzdHJpbmcgYXMgYSB3aG9sZSwgYW5kIGRvZXMgbm90IGV4dHJhY3QKICAgKiBhIHN1YnN0cmluZyBzdGFydGluZyBhdCBbaW5kZXhdIGZpcnN0OgogICAqCiAgICogICAgIHN0cmluZy5zdGFydHNXaXRoKG5ldyBSZWdFeHAocideYXJ0JyksIDEpOyAgICAvLyBmYWxzZQogICAqICAgICBzdHJpbmcuc3RhcnRzV2l0aChuZXcgUmVnRXhwKHInYXJ0JyksIDEpOyAgICAgLy8gdHJ1ZQogICAqLwogIGJvb2wgc3RhcnRzV2l0aChQYXR0ZXJuIHBhdHRlcm4sIFtpbnQgaW5kZXggPSAwXSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBtYXRjaCBvZiBbcGF0dGVybl0gaW4gdGhpcyBzdHJpbmcsCiAgICogc3RhcnRpbmcgYXQgW3N0YXJ0XSwgaW5jbHVzaXZlOgogICAqCiAgICogICAgIHZhciBzdHJpbmcgPSAnRGFydGlzYW5zJzsKICAgKiAgICAgc3RyaW5nLmluZGV4T2YoJ2FydCcpOyAgICAgICAgICAgICAgICAgICAgIC8vIDEKICAgKiAgICAgc3RyaW5nLmluZGV4T2YobmV3IFJlZ0V4cChyJ1tBLVpdW2Etel0nKSk7IC8vIDAKICAgKgogICAqIFJldHVybnMgLTEgaWYgbm8gbWF0Y2ggaXMgZm91bmQ6CiAgICoKICAgKiAgICAgc3RyaW5nLmluZGV4T2YobmV3IFJlZ0V4cChyJ2RhcnQnKSk7ICAgICAgIC8vIC0xCiAgICoKICAgKiBbc3RhcnRdIG11c3QgYmUgbm9uLW5lZ2F0aXZlIGFuZCBub3QgZ3JlYXRlciB0aGFuIFtsZW5ndGhdLgogICAqLwogIGludCBpbmRleE9mKFBhdHRlcm4gcGF0dGVybiwgW2ludCBzdGFydF0pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGFzdCBtYXRjaCBbcGF0dGVybl0gaW4gdGhpcyBzdHJpbmcsIHNlYXJjaGluZwogICAqIGJhY2t3YXJkIHN0YXJ0aW5nIGF0IFtzdGFydF0sIGluY2x1c2l2ZToKICAgKgogICAqICAgICB2YXIgc3RyaW5nID0gJ0RhcnRpc2Fucyc7CiAgICogICAgIHN0cmluZy5sYXN0SW5kZXhPZignYScpOyAgICAgICAgICAgICAgICAgICAgLy8gNgogICAqICAgICBzdHJpbmcubGFzdEluZGV4T2YobmV3IFJlZ0V4cChyJ2EocnxuKScpKTsgIC8vIDYKICAgKgogICAqIFJldHVybnMgLTEgaWYgW3BhdHRlcm5dIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiB0aGlzIHN0cmluZy4KICAgKgogICAqICAgICBzdHJpbmcubGFzdEluZGV4T2YobmV3IFJlZ0V4cChyJ0RBUlQnKSk7ICAgIC8vIC0xCiAgICoKICAgKiBUaGUgW3N0YXJ0XSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBhbmQgbm90IGdyZWF0ZXIgdGhhbiBbbGVuZ3RoXS4KICAgKi8KICBpbnQgbGFzdEluZGV4T2YoUGF0dGVybiBwYXR0ZXJuLCBbaW50IHN0YXJ0XSk7CgogIC8qKgogICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHN0cmluZyBpcyBlbXB0eS4KICAgKi8KICBib29sIGdldCBpc0VtcHR5OwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBzdHJpbmcgaXMgbm90IGVtcHR5LgogICAqLwogIGJvb2wgZ2V0IGlzTm90RW1wdHk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgc3RyaW5nIGJ5IGNvbmNhdGVuYXRpbmcgdGhpcyBzdHJpbmcgd2l0aCBbb3RoZXJdLgogICAqCiAgICogICAgICdkYXJ0JyArICdsYW5nJzsgLy8gJ2RhcnRsYW5nJwogICAqLwogIFN0cmluZyBvcGVyYXRvciArKFN0cmluZyBvdGhlcik7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHN1YnN0cmluZyBvZiB0aGlzIHN0cmluZyB0aGF0IGV4dGVuZHMgZnJvbSBbc3RhcnRJbmRleF0sCiAgICogaW5jbHVzaXZlLCB0byBbZW5kSW5kZXhdLCBleGNsdXNpdmUuCiAgICoKICAgKiAgICAgdmFyIHN0cmluZyA9ICdkYXJ0bGFuZyc7CiAgICogICAgIHN0cmluZy5zdWJzdHJpbmcoMSk7ICAgIC8vICdhcnRsYW5nJwogICAqICAgICBzdHJpbmcuc3Vic3RyaW5nKDEsIDQpOyAvLyAnYXJ0JwogICAqLwogIFN0cmluZyBzdWJzdHJpbmcoaW50IHN0YXJ0SW5kZXgsIFtpbnQgZW5kSW5kZXhdKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgc3RyaW5nIHdpdGhvdXQgYW55IGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UuCiAgICoKICAgKiBJZiB0aGUgc3RyaW5nIGNvbnRhaW5zIGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZSwgYSBuZXcgc3RyaW5nIHdpdGggbm8KICAgKiBsZWFkaW5nIGFuZCBubyB0cmFpbGluZyB3aGl0ZXNwYWNlIGlzIHJldHVybmVkOgogICAqIGBgYGRhcnQKICAgKiAnXHREYXJ0IGlzIGZ1blxuJy50cmltKCk7IC8vICdEYXJ0IGlzIGZ1bicKICAgKiBgYGAKICAgKiBPdGhlcndpc2UsIHRoZSBvcmlnaW5hbCBzdHJpbmcgaXRzZWxmIGlzIHJldHVybmVkOgogICAqIGBgYGRhcnQKICAgKiB2YXIgc3RyMSA9ICdEYXJ0JzsKICAgKiB2YXIgc3RyMiA9IHN0cjEudHJpbSgpOwogICAqIGlkZW50aWNhbChzdHIxLCBzdHIyKTsgICAgLy8gdHJ1ZQogICAqIGBgYAogICAqIFdoaXRlc3BhY2UgaXMgZGVmaW5lZCBieSB0aGUgVW5pY29kZSBXaGl0ZV9TcGFjZSBwcm9wZXJ0eSAoYXMgZGVmaW5lZCBpbgogICAqIHZlcnNpb24gNi4yIG9yIGxhdGVyKSBhbmQgdGhlIEJPTSBjaGFyYWN0ZXIsIDB4RkVGRi4KICAgKgogICAqIEhlcmUgaXMgdGhlIGxpc3Qgb2YgdHJpbW1lZCBjaGFyYWN0ZXJzIGFjY29yZGluZyB0byBVbmljb2RlIHZlcnNpb24gNi4zOgogICAqIGBgYAogICAqICAgICAwMDA5Li4wMDBEICAgIDsgV2hpdGVfU3BhY2UgIyBDYyAgIDxjb250cm9sLTAwMDk+Li48Y29udHJvbC0wMDBEPgogICAqICAgICAwMDIwICAgICAgICAgIDsgV2hpdGVfU3BhY2UgIyBacyAgIFNQQUNFCiAgICogICAgIDAwODUgICAgICAgICAgOyBXaGl0ZV9TcGFjZSAjIENjICAgPGNvbnRyb2wtMDA4NT4KICAgKiAgICAgMDBBMCAgICAgICAgICA7IFdoaXRlX1NwYWNlICMgWnMgICBOTy1CUkVBSyBTUEFDRQogICAqICAgICAxNjgwICAgICAgICAgIDsgV2hpdGVfU3BhY2UgIyBacyAgIE9HSEFNIFNQQUNFIE1BUksKICAgKiAgICAgMjAwMC4uMjAwQSAgICA7IFdoaXRlX1NwYWNlICMgWnMgICBFTiBRVUFELi5IQUlSIFNQQUNFCiAgICogICAgIDIwMjggICAgICAgICAgOyBXaGl0ZV9TcGFjZSAjIFpsICAgTElORSBTRVBBUkFUT1IKICAgKiAgICAgMjAyOSAgICAgICAgICA7IFdoaXRlX1NwYWNlICMgWnAgICBQQVJBR1JBUEggU0VQQVJBVE9SCiAgICogICAgIDIwMkYgICAgICAgICAgOyBXaGl0ZV9TcGFjZSAjIFpzICAgTkFSUk9XIE5PLUJSRUFLIFNQQUNFCiAgICogICAgIDIwNUYgICAgICAgICAgOyBXaGl0ZV9TcGFjZSAjIFpzICAgTUVESVVNIE1BVEhFTUFUSUNBTCBTUEFDRQogICAqICAgICAzMDAwICAgICAgICAgIDsgV2hpdGVfU3BhY2UgIyBacyAgIElERU9HUkFQSElDIFNQQUNFCiAgICoKICAgKiAgICAgRkVGRiAgICAgICAgICA7IEJPTSAgICAgICAgICAgICAgICBaRVJPIFdJRFRIIE5PX0JSRUFLIFNQQUNFCiAgICogYGBgCiAgICogU29tZSBsYXRlciB2ZXJzaW9ucyBvZiBVbmljb2RlIGRvIG5vdCBpbmNsdWRlIFUrMDA4NSBhcyBhIHdoaXRlc3BhY2UKICAgKiBjaGFyYWN0ZXIuIFdoZXRoZXIgaXQgaXMgdHJpbW1lZCBkZXBlbmRzIG9uIHRoZSBVbmljb2RlIHZlcnNpb24KICAgKiB1c2VkIGJ5IHRoZSBzeXN0ZW0uCiAgICovCiAgU3RyaW5nIHRyaW0oKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgc3RyaW5nIHdpdGhvdXQgYW55IGxlYWRpbmcgd2hpdGVzcGFjZS4KICAgKgogICAqIEFzIFt0cmltXSwgYnV0IG9ubHkgcmVtb3ZlcyBsZWFkaW5nIHdoaXRlc3BhY2UuCiAgICovCiAgU3RyaW5nIHRyaW1MZWZ0KCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHN0cmluZyB3aXRob3V0IGFueSB0cmFpbGluZyB3aGl0ZXNwYWNlLgogICAqCiAgICogQXMgW3RyaW1dLCBidXQgb25seSByZW1vdmVzIHRyYWlsaW5nIHdoaXRlc3BhY2UuCiAgICovCiAgU3RyaW5nIHRyaW1SaWdodCgpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IHN0cmluZyBieSBjb25jYXRlbmF0aW5nIHRoaXMgc3RyaW5nIHdpdGggaXRzZWxmIGEgbnVtYmVyCiAgICogb2YgdGltZXMuCiAgICoKICAgKiBUaGUgcmVzdWx0IG9mIGBzdHIgKiBuYCBpcyBlcXVpdmFsZW50IHRvCiAgICogYHN0ciArIHN0ciArIC4uLmAobiB0aW1lcylgLi4uICsgc3RyYC4KICAgKgogICAqIFJldHVybnMgYW4gZW1wdHkgc3RyaW5nIGlmIFt0aW1lc10gaXMgemVybyBvciBuZWdhdGl2ZS4KICAgKi8KICBTdHJpbmcgb3BlcmF0b3IgKihpbnQgdGltZXMpOwoKICAvKioKICAgKiBQYWRzIHRoaXMgc3RyaW5nIG9uIHRoZSBsZWZ0IGlmIGl0IGlzIHNob3J0ZXIgdGhhbiBbd2lkdGhdLgogICAqCiAgICogUmV0dXJuIGEgbmV3IHN0cmluZyB0aGF0IHByZXBlbmRzIFtwYWRkaW5nXSBvbnRvIHRoaXMgc3RyaW5nCiAgICogb25lIHRpbWUgZm9yIGVhY2ggcG9zaXRpb24gdGhlIGxlbmd0aCBpcyBsZXNzIHRoYW4gW3dpZHRoXS4KICAgKgogICAqIElmIFt3aWR0aF0gaXMgYWxyZWFkeSBzbWFsbGVyIHRoYW4gb3IgZXF1YWwgdG8gYHRoaXMubGVuZ3RoYCwKICAgKiBubyBwYWRkaW5nIGlzIGFkZGVkLiBBIG5lZ2F0aXZlIGB3aWR0aGAgaXMgdHJlYXRlZCBhcyB6ZXJvLgogICAqCiAgICogSWYgW3BhZGRpbmddIGhhcyBsZW5ndGggZGlmZmVyZW50IGZyb20gMSwgdGhlIHJlc3VsdCB3aWxsIG5vdAogICAqIGhhdmUgbGVuZ3RoIGB3aWR0aGAuIFRoaXMgbWF5IGJlIHVzZWZ1bCBmb3IgY2FzZXMgd2hlcmUgdGhlCiAgICogcGFkZGluZyBpcyBhIGxvbmdlciBzdHJpbmcgcmVwcmVzZW50aW5nIGEgc2luZ2xlIGNoYXJhY3RlciwgbGlrZQogICAqIGAiJm5ic3A7ImAgb3IgYCJcdXsxMDAwMn1gIi4KICAgKiBJbiB0aGF0IGNhc2UsIHRoZSB1c2VyIHNob3VsZCBtYWtlIHN1cmUgdGhhdCBgdGhpcy5sZW5ndGhgIGlzCiAgICogdGhlIGNvcnJlY3QgbWVhc3VyZSBvZiB0aGUgc3RyaW5ncyBsZW5ndGguCiAgICovCiAgU3RyaW5nIHBhZExlZnQoaW50IHdpZHRoLCBbU3RyaW5nIHBhZGRpbmcgPSAnICddKTsKCiAgLyoqCiAgICogUGFkcyB0aGlzIHN0cmluZyBvbiB0aGUgcmlnaHQgaWYgaXQgaXMgc2hvcnRlciB0aGFuIFt3aWR0aF0uCiAgICoKICAgKiBSZXR1cm4gYSBuZXcgc3RyaW5nIHRoYXQgYXBwZW5kcyBbcGFkZGluZ10gYWZ0ZXIgdGhpcyBzdHJpbmcKICAgKiBvbmUgdGltZSBmb3IgZWFjaCBwb3NpdGlvbiB0aGUgbGVuZ3RoIGlzIGxlc3MgdGhhbiBbd2lkdGhdLgogICAqCiAgICogSWYgW3dpZHRoXSBpcyBhbHJlYWR5IHNtYWxsZXIgdGhhbiBvciBlcXVhbCB0byBgdGhpcy5sZW5ndGhgLAogICAqIG5vIHBhZGRpbmcgaXMgYWRkZWQuIEEgbmVnYXRpdmUgYHdpZHRoYCBpcyB0cmVhdGVkIGFzIHplcm8uCiAgICoKICAgKiBJZiBbcGFkZGluZ10gaGFzIGxlbmd0aCBkaWZmZXJlbnQgZnJvbSAxLCB0aGUgcmVzdWx0IHdpbGwgbm90CiAgICogaGF2ZSBsZW5ndGggYHdpZHRoYC4gVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBjYXNlcyB3aGVyZSB0aGUKICAgKiBwYWRkaW5nIGlzIGEgbG9uZ2VyIHN0cmluZyByZXByZXNlbnRpbmcgYSBzaW5nbGUgY2hhcmFjdGVyLCBsaWtlCiAgICogYCImbmJzcDsiYCBvciBgIlx1ezEwMDAyfWAiLgogICAqIEluIHRoYXQgY2FzZSwgdGhlIHVzZXIgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IGB0aGlzLmxlbmd0aGAgaXMKICAgKiB0aGUgY29ycmVjdCBtZWFzdXJlIG9mIHRoZSBzdHJpbmdzIGxlbmd0aC4KICAgKi8KICBTdHJpbmcgcGFkUmlnaHQoaW50IHdpZHRoLCBbU3RyaW5nIHBhZGRpbmcgPSAnICddKTsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgc3RyaW5nIGNvbnRhaW5zIGEgbWF0Y2ggb2YgW290aGVyXToKICAgKgogICAqICAgICB2YXIgc3RyaW5nID0gJ0RhcnQgc3RyaW5ncyc7CiAgICogICAgIHN0cmluZy5jb250YWlucygnRCcpOyAgICAgICAgICAgICAgICAgICAgIC8vIHRydWUKICAgKiAgICAgc3RyaW5nLmNvbnRhaW5zKG5ldyBSZWdFeHAocidbQS1aXScpKTsgICAgLy8gdHJ1ZQogICAqCiAgICogSWYgW3N0YXJ0SW5kZXhdIGlzIHByb3ZpZGVkLCB0aGlzIG1ldGhvZCBtYXRjaGVzIG9ubHkgYXQgb3IgYWZ0ZXIgdGhhdAogICAqIGluZGV4OgogICAqCiAgICogICAgIHN0cmluZy5jb250YWlucygnWCcsIDEpOyAgICAgICAgICAgICAgICAgIC8vIGZhbHNlCiAgICogICAgIHN0cmluZy5jb250YWlucyhuZXcgUmVnRXhwKHInW0EtWl0nKSwgMSk7IC8vIGZhbHNlCiAgICoKICAgKiBbc3RhcnRJbmRleF0gbXVzdCBub3QgYmUgbmVnYXRpdmUgb3IgZ3JlYXRlciB0aGFuIFtsZW5ndGhdLgogICAqLwogIGJvb2wgY29udGFpbnMoUGF0dGVybiBvdGhlciwgW2ludCBzdGFydEluZGV4ID0gMF0pOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IHN0cmluZyBpbiB3aGljaCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBbZnJvbV0gaW4gdGhpcyBzdHJpbmcKICAgKiBpcyByZXBsYWNlZCB3aXRoIFt0b10sIHN0YXJ0aW5nIGZyb20gW3N0YXJ0SW5kZXhdOgogICAqCiAgICogICAgICcwLjAwMDEnLnJlcGxhY2VGaXJzdChuZXcgUmVnRXhwKHInMCcpLCAnJyk7IC8vICcuMDAwMScKICAgKiAgICAgJzAuMDAwMScucmVwbGFjZUZpcnN0KG5ldyBSZWdFeHAocicwJyksICc3JywgMSk7IC8vICcwLjcwMDEnCiAgICovCiAgU3RyaW5nIHJlcGxhY2VGaXJzdChQYXR0ZXJuIGZyb20sIFN0cmluZyB0bywgW2ludCBzdGFydEluZGV4ID0gMF0pOwoKICAvKioKICAgKiBSZXBsYWNlIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIFtmcm9tXSBpbiB0aGlzIHN0cmluZy4KICAgKgogICAqIFJldHVybnMgYSBuZXcgc3RyaW5nLCB3aGljaCBpcyB0aGlzIHN0cmluZwogICAqIGV4Y2VwdCB0aGF0IHRoZSBmaXJzdCBtYXRjaCBvZiBbZnJvbV0sIHN0YXJ0aW5nIGZyb20gW3N0YXJ0SW5kZXhdLAogICAqIGlzIHJlcGxhY2VkIGJ5IHRoZSByZXN1bHQgb2YgY2FsbGluZyBbcmVwbGFjZV0gd2l0aCB0aGUgbWF0Y2ggb2JqZWN0LgogICAqCiAgICogVGhlIG9wdGlvbmFsIFtzdGFydEluZGV4XSBpcyBieSBkZWZhdWx0IHNldCB0byAwLiBJZiBwcm92aWRlZCwgaXQgbXVzdCBiZQogICAqIGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIGBbMCAuLiBsZW5dYCwgd2hlcmUgYGxlbmAgaXMgdGhpcyBzdHJpbmcncyBsZW5ndGguCiAgICovCiAgU3RyaW5nIHJlcGxhY2VGaXJzdE1hcHBlZChQYXR0ZXJuIGZyb20sIFN0cmluZyByZXBsYWNlKE1hdGNoIG1hdGNoKSwKICAgICAgW2ludCBzdGFydEluZGV4ID0gMF0pOwoKICAvKioKICAgKiBSZXBsYWNlcyBhbGwgc3Vic3RyaW5ncyB0aGF0IG1hdGNoIFtmcm9tXSB3aXRoIFtyZXBsYWNlXS4KICAgKgogICAqIFJldHVybnMgYSBuZXcgc3RyaW5nIGluIHdoaWNoIHRoZSBub24tb3ZlcmxhcHBpbmcgc3Vic3RyaW5ncyBtYXRjaGluZwogICAqIFtmcm9tXSAodGhlIG9uZXMgaXRlcmF0ZWQgYnkgYGZyb20uYWxsTWF0Y2hlcyh0aGlzU3RyaW5nKWApIGFyZSByZXBsYWNlZAogICAqIGJ5IHRoZSBsaXRlcmFsIHN0cmluZyBbcmVwbGFjZV0uCiAgICoKICAgKiAgICAgJ3Jlc3VtZScucmVwbGFjZUFsbChuZXcgUmVnRXhwKHInZScpLCAnw6knKTsgLy8gJ3LDqXN1bcOpJwogICAqCiAgICogTm90aWNlIHRoYXQgdGhlIFtyZXBsYWNlXSBzdHJpbmcgaXMgbm90IGludGVycHJldGVkLiBJZiB0aGUgcmVwbGFjZW1lbnQKICAgKiBkZXBlbmRzIG9uIHRoZSBtYXRjaCAoZm9yIGV4YW1wbGUgb24gYSBbUmVnRXhwXSdzIGNhcHR1cmUgZ3JvdXBzKSwgdXNlCiAgICogdGhlIFtyZXBsYWNlQWxsTWFwcGVkXSBtZXRob2QgaW5zdGVhZC4KICAgKi8KICBTdHJpbmcgcmVwbGFjZUFsbChQYXR0ZXJuIGZyb20sIFN0cmluZyByZXBsYWNlKTsKCiAgLyoqCiAgICogUmVwbGFjZSBhbGwgc3Vic3RyaW5ncyB0aGF0IG1hdGNoIFtmcm9tXSBieSBhIHN0cmluZyBjb21wdXRlZCBmcm9tIHRoZQogICAqIG1hdGNoLgogICAqCiAgICogUmV0dXJucyBhIG5ldyBzdHJpbmcgaW4gd2hpY2ggdGhlIG5vbi1vdmVybGFwcGluZyBzdWJzdHJpbmdzIHRoYXQgbWF0Y2gKICAgKiBbZnJvbV0gKHRoZSBvbmVzIGl0ZXJhdGVkIGJ5IGBmcm9tLmFsbE1hdGNoZXModGhpc1N0cmluZylgKSBhcmUgcmVwbGFjZWQKICAgKiBieSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgW3JlcGxhY2VdIG9uIHRoZSBjb3JyZXNwb25kaW5nIFtNYXRjaF0gb2JqZWN0LgogICAqCiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byByZXBsYWNlIG1hdGNoZXMgd2l0aCBuZXcgY29udGVudCB0aGF0IGRlcGVuZHMgb24gdGhlCiAgICogbWF0Y2gsIHVubGlrZSBbcmVwbGFjZUFsbF0gd2hlcmUgdGhlIHJlcGxhY2VtZW50IHN0cmluZyBpcyBhbHdheXMgdGhlIHNhbWUuCiAgICoKICAgKiBUaGUgW3JlcGxhY2VdIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBbTWF0Y2hdIGdlbmVyYXRlZAogICAqIGJ5IHRoZSBwYXR0ZXJuLCBhbmQgaXRzIHJlc3VsdCBpcyB1c2VkIGFzIHJlcGxhY2VtZW50LgogICAqCiAgICogVGhlIGZ1bmN0aW9uIGRlZmluZWQgYmVsb3cgY29udmVydHMgZWFjaCB3b3JkIGluIGEgc3RyaW5nIHRvIHNpbXBsaWZpZWQKICAgKiAncGlnIGxhdGluJyB1c2luZyBbcmVwbGFjZUFsbE1hcHBlZF06CiAgICoKICAgKiAgICAgcGlnTGF0aW4oU3RyaW5nIHdvcmRzKSA9PiB3b3Jkcy5yZXBsYWNlQWxsTWFwcGVkKAogICAqICAgICAgICAgbmV3IFJlZ0V4cChyJ1xiKFx3Kj8pKFthZWlvdV1cdyopJywgY2FzZVNlbnNpdGl2ZTogZmFsc2UpLAogICAqICAgICAgICAgKE1hdGNoIG0pID0+ICIke21bMl19JHttWzFdfSR7bVsxXS5pc0VtcHR5ID8gJ3dheScgOiAnYXknfSIpOwogICAqCiAgICogICAgIHBpZ0xhdGluKCdJIGhhdmUgYSBzZWNyZXQgbm93IScpOyAvLyAnSXdheSBhdmVoYXkgYXdheSBlY3JldHNheSBvd25heSEnCiAgICovCiAgU3RyaW5nIHJlcGxhY2VBbGxNYXBwZWQoUGF0dGVybiBmcm9tLCBTdHJpbmcgcmVwbGFjZShNYXRjaCBtYXRjaCkpOwoKICAvKioKICAgKiBSZXBsYWNlcyB0aGUgc3Vic3RyaW5nIGZyb20gW3N0YXJ0XSB0byBbZW5kXSB3aXRoIFtyZXBsYWNlbWVudF0uCiAgICoKICAgKiBSZXR1cm5zIGEgbmV3IHN0cmluZyBlcXVpdmFsZW50IHRvOgogICAqCiAgICogICAgIHRoaXMuc3Vic3RyaW5nKDAsIHN0YXJ0KSArIHJlcGxhY2VtZW50ICsgdGhpcy5zdWJzdHJpbmcoZW5kKQogICAqCiAgICogVGhlIFtzdGFydF0gYW5kIFtlbmRdIGluZGljZXMgbXVzdCBzcGVjaWZ5IGEgdmFsaWQgcmFuZ2Ugb2YgdGhpcyBzdHJpbmcuCiAgICogVGhhdCBpcyBgMCA8PSBzdGFydCA8PSBlbmQgPD0gdGhpcy5sZW5ndGhgLgogICAqIElmIFtlbmRdIGlzIGBudWxsYCwgaXQgZGVmYXVsdHMgdG8gW2xlbmd0aF0uCiAgICovCiAgU3RyaW5nIHJlcGxhY2VSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIFN0cmluZyByZXBsYWNlbWVudCk7CgogIC8qKgogICAqIFNwbGl0cyB0aGUgc3RyaW5nIGF0IG1hdGNoZXMgb2YgW3BhdHRlcm5dIGFuZCByZXR1cm5zIGEgbGlzdCBvZiBzdWJzdHJpbmdzLgogICAqCiAgICogRmluZHMgYWxsIHRoZSBtYXRjaGVzIG9mIGBwYXR0ZXJuYCBpbiB0aGlzIHN0cmluZywKICAgKiBhbmQgcmV0dXJucyB0aGUgbGlzdCBvZiB0aGUgc3Vic3RyaW5ncyBiZXR3ZWVuIHRoZSBtYXRjaGVzLgogICAqCiAgICogICAgIHZhciBzdHJpbmcgPSAiSGVsbG8gd29ybGQhIjsKICAgKiAgICAgc3RyaW5nLnNwbGl0KCIgIik7ICAgICAgICAgICAgICAgICAgICAgIC8vIFsnSGVsbG8nLCAnd29ybGQhJ107CiAgICoKICAgKiBFbXB0eSBtYXRjaGVzIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgc3RyaW5ncyBhcmUgaWdub3JlZCwKICAgKiBhbmQgc28gYXJlIGVtcHR5IG1hdGNoZXMgcmlnaHQgYWZ0ZXIgYW5vdGhlciBtYXRjaC4KICAgKgogICAqICAgICB2YXIgc3RyaW5nID0gImFiYmEiOwogICAqICAgICBzdHJpbmcuc3BsaXQobmV3IFJlZ0V4cChyImIqIikpOyAgICAgICAgLy8gWydhJywgJ2EnXQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90IFsnJywgJ2EnLCAnYScsICcnXQogICAqCiAgICogSWYgdGhpcyBzdHJpbmcgaXMgZW1wdHksIHRoZSByZXN1bHQgaXMgYW4gZW1wdHkgbGlzdCBpZiBgcGF0dGVybmAgbWF0Y2hlcwogICAqIHRoZSBlbXB0eSBzdHJpbmcsIGFuZCBpdCBpcyBgWyIiXWAgaWYgdGhlIHBhdHRlcm4gZG9lc24ndCBtYXRjaC4KICAgKgogICAqICAgICB2YXIgc3RyaW5nID0gJyc7CiAgICogICAgIHN0cmluZy5zcGxpdCgnJyk7ICAgICAgICAgICAgICAgICAgICAgICAvLyBbXQogICAqICAgICBzdHJpbmcuc3BsaXQoImEiKTsgICAgICAgICAgICAgICAgICAgICAgLy8gWycnXQogICAqCiAgICogU3BsaXR0aW5nIHdpdGggYW4gZW1wdHkgcGF0dGVybiBzcGxpdHMgdGhlIHN0cmluZyBpbnRvIHNpbmdsZS1jb2RlIHVuaXQKICAgKiBzdHJpbmdzLgogICAqCiAgICogICAgIHZhciBzdHJpbmcgPSAnUHViJzsKICAgKiAgICAgc3RyaW5nLnNwbGl0KCcnKTsgICAgICAgICAgICAgICAgICAgICAgIC8vIFsnUCcsICd1JywgJ2InXQogICAqCiAgICogICAgIHN0cmluZy5jb2RlVW5pdHMubWFwKCh1bml0KSB7CiAgICogICAgICAgcmV0dXJuIG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlKHVuaXQpOwogICAqICAgICB9KS50b0xpc3QoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWydQJywgJ3UnLCAnYiddCiAgICoKICAgKiBTcGxpdHRpbmcgaGFwcGVucyBhdCBVVEYtMTYgY29kZSB1bml0IGJvdW5kYXJpZXMsCiAgICogYW5kIG5vdCBhdCBydW5lIGJvdW5kYXJpZXM6CiAgICoKICAgKiAgICAgLy8gU3RyaW5nIG1hZGUgdXAgb2YgdHdvIGNvZGUgdW5pdHMsIGJ1dCBvbmUgcnVuZS4KICAgKiAgICAgc3RyaW5nID0gJ1x1ezFEMTFFfSc7CiAgICogICAgIHN0cmluZy5zcGxpdCgnJykubGVuZ3RoOyAgICAgICAgICAgICAgICAgLy8gMiBzdXJyb2dhdGUgdmFsdWVzCiAgICoKICAgKiBUbyBnZXQgYSBsaXN0IG9mIHN0cmluZ3MgY29udGFpbmluZyB0aGUgaW5kaXZpZHVhbCBydW5lcyBvZiBhIHN0cmluZywKICAgKiB5b3Ugc2hvdWxkIG5vdCB1c2Ugc3BsaXQuIFlvdSBjYW4gaW5zdGVhZCBtYXAgZWFjaCBydW5lIHRvIGEgc3RyaW5nCiAgICogYXMgZm9sbG93czoKICAgKgogICAqICAgICBzdHJpbmcucnVuZXMubWFwKChydW5lKSA9PiBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZShydW5lKSkudG9MaXN0KCk7CiAgICovCiAgTGlzdDxTdHJpbmc+IHNwbGl0KFBhdHRlcm4gcGF0dGVybik7CgogIC8qKgogICAqIFNwbGl0cyB0aGUgc3RyaW5nLCBjb252ZXJ0cyBpdHMgcGFydHMsIGFuZCBjb21iaW5lcyB0aGVtIGludG8gYSBuZXcKICAgKiBzdHJpbmcuCiAgICoKICAgKiBbcGF0dGVybl0gaXMgdXNlZCB0byBzcGxpdCB0aGUgc3RyaW5nIGludG8gcGFydHMgYW5kIHNlcGFyYXRpbmcgbWF0Y2hlcy4KICAgKgogICAqIEVhY2ggbWF0Y2ggaXMgY29udmVydGVkIHRvIGEgc3RyaW5nIGJ5IGNhbGxpbmcgW29uTWF0Y2hdLiBJZiBbb25NYXRjaF0KICAgKiBpcyBvbWl0dGVkLCB0aGUgbWF0Y2hlZCBzdHJpbmcgaXMgdXNlZC4KICAgKgogICAqIEVhY2ggbm9uLW1hdGNoZWQgcGFydCBpcyBjb252ZXJ0ZWQgYnkgYSBjYWxsIHRvIFtvbk5vbk1hdGNoXS4gSWYKICAgKiBbb25Ob25NYXRjaF0gaXMgb21pdHRlZCwgdGhlIG5vbi1tYXRjaGluZyBwYXJ0IGlzIHVzZWQuCiAgICoKICAgKiBUaGVuIGFsbCB0aGUgY29udmVydGVkIHBhcnRzIGFyZSBjb21iaW5lZCBpbnRvIHRoZSByZXN1bHRpbmcgc3RyaW5nLgogICAqCiAgICogICAgICdFYXRzIHNob290cyBsZWF2ZXMnLnNwbGl0TWFwSm9pbigobmV3IFJlZ0V4cChyJ3Nob290cycpKSwKICAgKiAgICAgICAgIG9uTWF0Y2g6ICAgIChtKSA9PiAnJHttLmdyb3VwKDApfScsCiAgICogICAgICAgICBvbk5vbk1hdGNoOiAobikgPT4gJyonKTsgLy8gKnNob290cyoKICAgKi8KICBTdHJpbmcgc3BsaXRNYXBKb2luKFBhdHRlcm4gcGF0dGVybiwKICAgICAge1N0cmluZyBvbk1hdGNoKE1hdGNoIG1hdGNoKSwgU3RyaW5nIG9uTm9uTWF0Y2goU3RyaW5nIG5vbk1hdGNoKX0pOwoKICAvKioKICAgKiBSZXR1cm5zIGFuIHVubW9kaWZpYWJsZSBsaXN0IG9mIHRoZSBVVEYtMTYgY29kZSB1bml0cyBvZiB0aGlzIHN0cmluZy4KICAgKi8KICBMaXN0PGludD4gZ2V0IGNvZGVVbml0czsKCiAgLyoqCiAgICogUmV0dXJucyBhbiBbSXRlcmFibGVdIG9mIFVuaWNvZGUgY29kZS1wb2ludHMgb2YgdGhpcyBzdHJpbmcuCiAgICoKICAgKiBJZiB0aGUgc3RyaW5nIGNvbnRhaW5zIHN1cnJvZ2F0ZSBwYWlycywgdGhleSBhcmUgY29tYmluZWQgYW5kIHJldHVybmVkCiAgICogYXMgb25lIGludGVnZXIgYnkgdGhpcyBpdGVyYXRvci4gVW5tYXRjaGVkIHN1cnJvZ2F0ZSBoYWx2ZXMgYXJlIHRyZWF0ZWQKICAgKiBsaWtlIHZhbGlkIDE2LWJpdCBjb2RlLXVuaXRzLgogICAqLwogIFJ1bmVzIGdldCBydW5lczsKCiAgLyoqCiAgICogQ29udmVydHMgYWxsIGNoYXJhY3RlcnMgaW4gdGhpcyBzdHJpbmcgdG8gbG93ZXIgY2FzZS4KICAgKiBJZiB0aGUgc3RyaW5nIGlzIGFscmVhZHkgaW4gYWxsIGxvd2VyIGNhc2UsIHRoaXMgbWV0aG9kIHJldHVybnMgWzp0aGlzOl0uCiAgICoKICAgKiAgICAgJ0FMUEhBQkVUJy50b0xvd2VyQ2FzZSgpOyAvLyAnYWxwaGFiZXQnCiAgICogICAgICdhYmMnLnRvTG93ZXJDYXNlKCk7ICAgICAgLy8gJ2FiYycKICAgKgogICAqIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgbGFuZ3VhZ2UgaW5kZXBlbmRlbnQgVW5pY29kZSBtYXBwaW5nIGFuZCB0aHVzIG9ubHkKICAgKiB3b3JrcyBpbiBzb21lIGxhbmd1YWdlcy4KICAgKi8KICAvLyBUT0RPKGZsb2l0c2NoKTogZG9jdW1lbnQgYmV0dGVyLiAoU2VlIEVjbWFTY3JpcHQgZm9yIGRlc2NyaXB0aW9uKS4KICBTdHJpbmcgdG9Mb3dlckNhc2UoKTsKCiAgLyoqCiAgICogQ29udmVydHMgYWxsIGNoYXJhY3RlcnMgaW4gdGhpcyBzdHJpbmcgdG8gdXBwZXIgY2FzZS4KICAgKiBJZiB0aGUgc3RyaW5nIGlzIGFscmVhZHkgaW4gYWxsIHVwcGVyIGNhc2UsIHRoaXMgbWV0aG9kIHJldHVybnMgWzp0aGlzOl0uCiAgICoKICAgKiAgICAgJ2FscGhhYmV0Jy50b1VwcGVyQ2FzZSgpOyAvLyAnQUxQSEFCRVQnCiAgICogICAgICdBQkMnLnRvVXBwZXJDYXNlKCk7ICAgICAgLy8gJ0FCQycKICAgKgogICAqIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgbGFuZ3VhZ2UgaW5kZXBlbmRlbnQgVW5pY29kZSBtYXBwaW5nIGFuZCB0aHVzIG9ubHkKICAgKiB3b3JrcyBpbiBzb21lIGxhbmd1YWdlcy4KICAgKi8KICAvLyBUT0RPKGZsb2l0c2NoKTogZG9jdW1lbnQgYmV0dGVyLiAoU2VlIEVjbWFTY3JpcHQgZm9yIGRlc2NyaXB0aW9uKS4KICBTdHJpbmcgdG9VcHBlckNhc2UoKTsKfQoKLyoqCiAqIFRoZSBydW5lcyAoaW50ZWdlciBVbmljb2RlIGNvZGUgcG9pbnRzKSBvZiBhIFtTdHJpbmddLgogKi8KY2xhc3MgUnVuZXMgZXh0ZW5kcyBJdGVyYWJsZTxpbnQ+IHsKICBmaW5hbCBTdHJpbmcgc3RyaW5nOwogIFJ1bmVzKHRoaXMuc3RyaW5nKTsKCiAgUnVuZUl0ZXJhdG9yIGdldCBpdGVyYXRvciA9PiBSdW5lSXRlcmF0b3Ioc3RyaW5nKTsKCiAgaW50IGdldCBsYXN0IHsKICAgIGlmIChzdHJpbmcubGVuZ3RoID09IDApIHsKICAgICAgdGhyb3cgU3RhdGVFcnJvcignTm8gZWxlbWVudHMuJyk7CiAgICB9CiAgICBpbnQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDsKICAgIGludCBjb2RlID0gc3RyaW5nLmNvZGVVbml0QXQobGVuZ3RoIC0gMSk7CiAgICBpZiAoX2lzVHJhaWxTdXJyb2dhdGUoY29kZSkgJiYgc3RyaW5nLmxlbmd0aCA+IDEpIHsKICAgICAgaW50IHByZXZpb3VzQ29kZSA9IHN0cmluZy5jb2RlVW5pdEF0KGxlbmd0aCAtIDIpOwogICAgICBpZiAoX2lzTGVhZFN1cnJvZ2F0ZShwcmV2aW91c0NvZGUpKSB7CiAgICAgICAgcmV0dXJuIF9jb21iaW5lU3Vycm9nYXRlUGFpcihwcmV2aW91c0NvZGUsIGNvZGUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gY29kZTsKICB9Cn0KCi8vIElzIHRoZW4gY29kZSAoYSAxNi1iaXQgdW5zaWduZWQgaW50ZWdlcikgYSBVVEYtMTYgbGVhZCBzdXJyb2dhdGUuCmJvb2wgX2lzTGVhZFN1cnJvZ2F0ZShpbnQgY29kZSkgPT4gKGNvZGUgJiAweEZDMDApID09IDB4RDgwMDsKCi8vIElzIHRoZW4gY29kZSAoYSAxNi1iaXQgdW5zaWduZWQgaW50ZWdlcikgYSBVVEYtMTYgdHJhaWwgc3Vycm9nYXRlLgpib29sIF9pc1RyYWlsU3Vycm9nYXRlKGludCBjb2RlKSA9PiAoY29kZSAmIDB4RkMwMCkgPT0gMHhEQzAwOwoKLy8gQ29tYmluZSBhIGxlYWQgYW5kIGEgdHJhaWwgc3Vycm9nYXRlIHZhbHVlIGludG8gYSBzaW5nbGUgY29kZSBwb2ludC4KaW50IF9jb21iaW5lU3Vycm9nYXRlUGFpcihpbnQgc3RhcnQsIGludCBlbmQpIHsKICByZXR1cm4gMHgxMDAwMCArICgoc3RhcnQgJiAweDNGRikgPDwgMTApICsgKGVuZCAmIDB4M0ZGKTsKfQoKLyoqIFtJdGVyYXRvcl0gZm9yIHJlYWRpbmcgcnVuZXMgKGludGVnZXIgVW5pY29kZSBjb2RlIHBvaW50cykgb3V0IG9mIGEgRGFydAogICogc3RyaW5nLgogICovCmNsYXNzIFJ1bmVJdGVyYXRvciBpbXBsZW1lbnRzIEJpZGlyZWN0aW9uYWxJdGVyYXRvcjxpbnQ+IHsKICAvKiogU3RyaW5nIGJlaW5nIGl0ZXJhdGVkLiAqLwogIGZpbmFsIFN0cmluZyBzdHJpbmc7CiAgLyoqIFBvc2l0aW9uIGJlZm9yZSB0aGUgY3VycmVudCBjb2RlIHBvaW50LiAqLwogIGludCBfcG9zaXRpb247CiAgLyoqIFBvc2l0aW9uIGFmdGVyIHRoZSBjdXJyZW50IGNvZGUgcG9pbnQuICovCiAgaW50IF9uZXh0UG9zaXRpb247CiAgLyoqCiAgICogQ3VycmVudCBjb2RlIHBvaW50LgogICAqCiAgICogSWYgdGhlIGl0ZXJhdG9yIGhhcyBoaXQgZWl0aGVyIGVuZCwgdGhlIFtfY3VycmVudENvZGVQb2ludF0gaXMgbnVsbAogICAqIGFuZCBbOiBfcG9zaXRpb24gPT0gX25leHRQb3NpdGlvbiA6XS4KICAgKi8KICBpbnQgX2N1cnJlbnRDb2RlUG9pbnQ7CgogIC8qKiBDcmVhdGUgYW4gaXRlcmF0b3IgcG9zaXRpb25lZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcuICovCiAgUnVuZUl0ZXJhdG9yKFN0cmluZyBzdHJpbmcpCiAgICAgIDogdGhpcy5zdHJpbmcgPSBzdHJpbmcsCiAgICAgICAgX3Bvc2l0aW9uID0gMCwKICAgICAgICBfbmV4dFBvc2l0aW9uID0gMDsKCiAgLyoqCiAgICogQ3JlYXRlIGFuIGl0ZXJhdG9yIHBvc2l0aW9uZWQgYmVmb3JlIHRoZSBbaW5kZXhddGggY29kZSB1bml0IG9mIHRoZSBzdHJpbmcuCiAgICoKICAgKiBXaGVuIGNyZWF0ZWQsIHRoZXJlIGlzIG5vIFtjdXJyZW50XSB2YWx1ZS4KICAgKiBBIFttb3ZlTmV4dF0gd2lsbCB1c2UgdGhlIHJ1bmUgc3RhcnRpbmcgYXQgW2luZGV4XSB0aGUgY3VycmVudCB2YWx1ZSwKICAgKiBhbmQgYSBbbW92ZVByZXZpb3VzXSB3aWxsIHVzZSB0aGUgcnVuZSBlbmRpbmcganVzdCBiZWZvcmUgW2luZGV4XSBhcyB0aGUKICAgKiB0aGUgY3VycmVudCB2YWx1ZS4KICAgKgogICAqIFRoZSBbaW5kZXhdIHBvc2l0aW9uIG11c3Qgbm90IGJlIGluIHRoZSBtaWRkbGUgb2YgYSBzdXJyb2dhdGUgcGFpci4KICAgKi8KICBSdW5lSXRlcmF0b3IuYXQoU3RyaW5nIHN0cmluZywgaW50IGluZGV4KQogICAgICA6IHN0cmluZyA9IHN0cmluZywKICAgICAgICBfcG9zaXRpb24gPSBpbmRleCwKICAgICAgICBfbmV4dFBvc2l0aW9uID0gaW5kZXggewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbHVlSW5JbnRlcnZhbChpbmRleCwgMCwgc3RyaW5nLmxlbmd0aCk7CiAgICBfY2hlY2tTcGxpdFN1cnJvZ2F0ZShpbmRleCk7CiAgfQoKICAvKiogVGhyb3cgYW4gZXJyb3IgaWYgdGhlIGluZGV4IGlzIGluIHRoZSBtaWRkbGUgb2YgYSBzdXJyb2dhdGUgcGFpci4gKi8KICB2b2lkIF9jaGVja1NwbGl0U3Vycm9nYXRlKGludCBpbmRleCkgewogICAgaWYgKGluZGV4ID4gMCAmJgogICAgICAgIGluZGV4IDwgc3RyaW5nLmxlbmd0aCAmJgogICAgICAgIF9pc0xlYWRTdXJyb2dhdGUoc3RyaW5nLmNvZGVVbml0QXQoaW5kZXggLSAxKSkgJiYKICAgICAgICBfaXNUcmFpbFN1cnJvZ2F0ZShzdHJpbmcuY29kZVVuaXRBdChpbmRleCkpKSB7CiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoJ0luZGV4IGluc2lkZSBzdXJyb2dhdGUgcGFpcjogJGluZGV4Jyk7CiAgICB9CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCBydW5lIGluIHRoZSBzdHJpbmcuCiAgICoKICAgKiBSZXR1cm5zIG51bGwgaWYgdGhlIFtjdXJyZW50XSBydW5lIGlzIG51bGwuCiAgICovCiAgaW50IGdldCByYXdJbmRleCA9PiAoX3Bvc2l0aW9uICE9IF9uZXh0UG9zaXRpb24pID8gX3Bvc2l0aW9uIDogbnVsbDsKCiAgLyoqCiAgICogUmVzZXRzIHRoZSBpdGVyYXRvciB0byB0aGUgcnVuZSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4IG9mIHRoZSBzdHJpbmcuCiAgICoKICAgKiBTZXR0aW5nIGEgbmVnYXRpdmUgW3Jhd0luZGV4XSwgb3Igb25lIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0bwogICAqIFs6c3RyaW5nLmxlbmd0aDpdLAogICAqIGlzIGFuIGVycm9yLiBTbyBpcyBzZXR0aW5nIGl0IGluIHRoZSBtaWRkbGUgb2YgYSBzdXJyb2dhdGUgcGFpci4KICAgKgogICAqIFNldHRpbmcgdGhlIHBvc2l0aW9uIHRvIHRoZSBlbmQgb2YgdGhlbiBzdHJpbmcgd2lsbCBzZXQgW2N1cnJlbnRdIHRvIG51bGwuCiAgICovCiAgdm9pZCBzZXQgcmF3SW5kZXgoaW50IHJhd0luZGV4KSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRJbmRleChyYXdJbmRleCwgc3RyaW5nLCAicmF3SW5kZXgiKTsKICAgIHJlc2V0KHJhd0luZGV4KTsKICAgIG1vdmVOZXh0KCk7CiAgfQoKICAvKioKICAgKiBSZXNldHMgdGhlIGl0ZXJhdG9yIHRvIHRoZSBnaXZlbiBpbmRleCBpbnRvIHRoZSBzdHJpbmcuCiAgICoKICAgKiBBZnRlciB0aGlzIHRoZSBbY3VycmVudF0gdmFsdWUgaXMgdW5zZXQuCiAgICogWW91IG11c3QgY2FsbCBbbW92ZU5leHRdIG1ha2UgdGhlIHJ1bmUgYXQgdGhlIHBvc2l0aW9uIGN1cnJlbnQsCiAgICogb3IgW21vdmVQcmV2aW91c10gZm9yIHRoZSBsYXN0IHJ1bmUgYmVmb3JlIHRoZSBwb3NpdGlvbi4KICAgKgogICAqIFNldHRpbmcgYSBuZWdhdGl2ZSBbcmF3SW5kZXhdLCBvciBvbmUgZ3JlYXRlciB0aGFuIFs6c3RyaW5nLmxlbmd0aDpdLAogICAqIGlzIGFuIGVycm9yLiBTbyBpcyBzZXR0aW5nIGl0IGluIHRoZSBtaWRkbGUgb2YgYSBzdXJyb2dhdGUgcGFpci4KICAgKi8KICB2b2lkIHJlc2V0KFtpbnQgcmF3SW5kZXggPSAwXSkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbHVlSW5JbnRlcnZhbChyYXdJbmRleCwgMCwgc3RyaW5nLmxlbmd0aCwgInJhd0luZGV4Iik7CiAgICBfY2hlY2tTcGxpdFN1cnJvZ2F0ZShyYXdJbmRleCk7CiAgICBfcG9zaXRpb24gPSBfbmV4dFBvc2l0aW9uID0gcmF3SW5kZXg7CiAgICBfY3VycmVudENvZGVQb2ludCA9IG51bGw7CiAgfQoKICAvKiogVGhlIHJ1bmUgKGludGVnZXIgVW5pY29kZSBjb2RlIHBvaW50KSBzdGFydGluZyBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiBpbgogICAqICB0aGUgc3RyaW5nLgogICAqLwogIGludCBnZXQgY3VycmVudCA9PiBfY3VycmVudENvZGVQb2ludDsKCiAgLyoqCiAgICogVGhlIG51bWJlciBvZiBjb2RlIHVuaXRzIGNvbXByaXNpbmcgdGhlIGN1cnJlbnQgcnVuZS4KICAgKgogICAqIFJldHVybnMgemVybyBpZiB0aGVyZSBpcyBubyBjdXJyZW50IHJ1bmUgKFtjdXJyZW50XSBpcyBudWxsKS4KICAgKi8KICBpbnQgZ2V0IGN1cnJlbnRTaXplID0+IF9uZXh0UG9zaXRpb24gLSBfcG9zaXRpb247CgogIC8qKgogICAqIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgcnVuZS4KICAgKgogICAqIEZvciBydW5lcyBvdXRzaWRlIHRoZSBiYXNpYyBtdWx0aWxpbmd1YWwgcGxhbmUsIHRoaXMgd2lsbCBiZQogICAqIGEgU3RyaW5nIG9mIGxlbmd0aCAyLCBjb250YWluaW5nIHR3byBjb2RlIHVuaXRzLgogICAqCiAgICogUmV0dXJucyBudWxsIGlmIFtjdXJyZW50XSBpcyBudWxsLgogICAqLwogIFN0cmluZyBnZXQgY3VycmVudEFzU3RyaW5nIHsKICAgIGlmIChfcG9zaXRpb24gPT0gX25leHRQb3NpdGlvbikgcmV0dXJuIG51bGw7CiAgICBpZiAoX3Bvc2l0aW9uICsgMSA9PSBfbmV4dFBvc2l0aW9uKSByZXR1cm4gc3RyaW5nW19wb3NpdGlvbl07CiAgICByZXR1cm4gc3RyaW5nLnN1YnN0cmluZyhfcG9zaXRpb24sIF9uZXh0UG9zaXRpb24pOwogIH0KCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIF9wb3NpdGlvbiA9IF9uZXh0UG9zaXRpb247CiAgICBpZiAoX3Bvc2l0aW9uID09IHN0cmluZy5sZW5ndGgpIHsKICAgICAgX2N1cnJlbnRDb2RlUG9pbnQgPSBudWxsOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpbnQgY29kZVVuaXQgPSBzdHJpbmcuY29kZVVuaXRBdChfcG9zaXRpb24pOwogICAgaW50IG5leHRQb3NpdGlvbiA9IF9wb3NpdGlvbiArIDE7CiAgICBpZiAoX2lzTGVhZFN1cnJvZ2F0ZShjb2RlVW5pdCkgJiYgbmV4dFBvc2l0aW9uIDwgc3RyaW5nLmxlbmd0aCkgewogICAgICBpbnQgbmV4dENvZGVVbml0ID0gc3RyaW5nLmNvZGVVbml0QXQobmV4dFBvc2l0aW9uKTsKICAgICAgaWYgKF9pc1RyYWlsU3Vycm9nYXRlKG5leHRDb2RlVW5pdCkpIHsKICAgICAgICBfbmV4dFBvc2l0aW9uID0gbmV4dFBvc2l0aW9uICsgMTsKICAgICAgICBfY3VycmVudENvZGVQb2ludCA9IF9jb21iaW5lU3Vycm9nYXRlUGFpcihjb2RlVW5pdCwgbmV4dENvZGVVbml0KTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgX25leHRQb3NpdGlvbiA9IG5leHRQb3NpdGlvbjsKICAgIF9jdXJyZW50Q29kZVBvaW50ID0gY29kZVVu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YXRlbmF0aW5nIHN0cmluZ3MgZWZmaWNpZW50bHkuCiAqCiAqIEFsbG93cyBmb3IgdGhlIGluY3JlbWVudGFsIGJ1aWxkaW5nIG9mIGEgc3RyaW5nIHVzaW5nIHdyaXRlKigpIG1ldGhvZHMuCiAqIFRoZSBzdHJpbmdzIGFyZSBjb25jYXRlbmF0ZWQgdG8gYSBzaW5nbGUgc3RyaW5nIG9ubHkgd2hlbiBbdG9TdHJpbmddIGlzCiAqIGNhbGxlZC4KICovCmNsYXNzIFN0cmluZ0J1ZmZlciBpbXBsZW1lbnRzIFN0cmluZ1NpbmsgewogIC8qKiBDcmVhdGVzIHRoZSBzdHJpbmcgYnVmZmVyIHdpdGggYW4gaW5pdGlhbCBjb250ZW50LiAqLwogIGV4dGVybmFsIFN0cmluZ0J1ZmZlcihbT2JqZWN0IGNvbnRlbnQgPSAiIl0pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGNvbnRlbnQgdGhhdCBoYXMgYmVlbiBhY2N1bXVsYXRlZCBzbyBmYXIuCiAgICogVGhpcyBpcyBhIGNvbnN0YW50LXRpbWUgb3BlcmF0aW9uLgogICAqLwogIGV4dGVybmFsIGludCBnZXQgbGVuZ3RoOwoKICAvKiogUmV0dXJucyB3aGV0aGVyIHRoZSBidWZmZXIgaXMgZW1wdHkuIFRoaXMgaXMgYSBjb25zdGFudC10aW1lIG9wZXJhdGlvbi4gKi8KICBib29sIGdldCBpc0VtcHR5ID0+IGxlbmd0aCA9PSAwOwoKICAvKioKICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGJ1ZmZlciBpcyBub3QgZW1wdHkuIFRoaXMgaXMgYSBjb25zdGFudC10aW1lCiAgICogb3BlcmF0aW9uLgogICAqLwogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gIWlzRW1wdHk7CgogIC8vLyBBZGRzIHRoZSBjb250ZW50cyBvZiBbb2JqXSwgY29udmVydGVkIHRvIGEgc3RyaW5nLCB0byB0aGUgYnVmZmVyLgogIGV4dGVybmFsIHZvaWQgd3JpdGUoT2JqZWN0IG9iaik7CgogIC8vLyBBZGRzIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgW2NoYXJDb2RlXSB0byB0aGUgYnVmZmVyLgogIGV4dGVybmFsIHZvaWQgd3JpdGVDaGFyQ29kZShpbnQgY2hhckNvZGUpOwoKICBleHRlcm5hbCB2b2lkIHdyaXRlQWxsKEl0ZXJhYmxlIG9iamVjdHMsIFtTdHJpbmcgc2VwYXJhdG9yID0gIiJdKTsKCiAgZXh0ZXJuYWwgdm9pZCB3cml0ZWxuKFtPYmplY3Qgb2JqID0gIiJdKTsKCiAgLyoqCiAgICogQ2xlYXJzIHRoZSBzdHJpbmcgYnVmZmVyLgogICAqLwogIGV4dGVybmFsIHZvaWQgY2xlYXIoKTsKCiAgLy8vIFJldHVybnMgdGhlIGNvbnRlbnRzIG9mIGJ1ZmZlciBhcyBhIGNvbmNhdGVuYXRlZCBzdHJpbmcuCiAgZXh0ZXJuYWwgU3RyaW5nIHRvU3RyaW5nKCk7Cn0KNABOTjwBEwEEMgNLSwsEKzwwAQZJKAYbAVEjAQZGEAYjAUgjAUItAUUBLAEGHwYZAT8eAgEcZGFydDpjb3JlL3N0cmluZ19idWZmZXIuZGFydDhvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL3N0cmluZ19idWZmZXJfcGF0Y2guZGFydJZaLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgpAcGF0Y2gKY2xhc3MgU3RyaW5nQnVmZmVyIHsKICBzdGF0aWMgY29uc3QgaW50IF9CVUZGRVJfU0laRSA9IDY0OwogIHN0YXRpYyBjb25zdCBpbnQgX1BBUlRTX1RPX0NPTVBBQ1QgPSAxMjg7CiAgc3RhdGljIGNvbnN0IGludCBfUEFSVFNfVE9fQ09NUEFDVF9TSVpFX0xJTUlUID0gX1BBUlRTX1RPX0NPTVBBQ1QgKiA4OwoKICAvKioKICAgKiBXaGVuIHN0cmluZ3MgYXJlIHdyaXR0ZW4gdG8gdGhlIHN0cmluZyBidWZmZXIsIHdlIGFkZCB0aGVtIHRvIGEKICAgKiBsaXN0IG9mIHN0cmluZyBwYXJ0cy4KICAgKi8KICBMaXN0PFN0cmluZz4gX3BhcnRzOwoKICAvKioKICAgICogVG90YWwgbnVtYmVyIG9mIGNvZGUgdW5pdHMgaW4gdGhlIHN0cmluZyBwYXJ0cy4gRG9lcyBub3QgaW5jbHVkZQogICAgKiB0aGUgY29kZSB1bml0cyBhZGRlZCB0byB0aGUgYnVmZmVyLgogICAgKi8KICBpbnQgX3BhcnRzQ29kZVVuaXRzID0gMDsKCiAgLyoqCiAgICogVG8gcHJlc2VydmUgbWVtb3J5LCB3ZSBzb21ldGltZXMgY29tcGFjdCB0aGUgcGFydHMuIFRoaXMgY29tYmluZXMKICAgKiBzZXZlcmFsIHNtYWxsZXIgcGFydHMgaW50byBhIHNpbmdsZSBsYXJnZXIgcGFydCB0byBjdXQgZG93biBvbiB0aGUKICAgKiBjb3N0IHRoYXQgY29tZXMgZnJvbSB0aGUgcGVyLW9iamVjdCBtZW1vcnkgb3ZlcmhlYWQuIFdlIGtlZXAgdHJhY2sKICAgKiBvZiB0aGUgbGFzdCBpbmRleCB3aGVyZSB3ZSBlbmRlZCBvdXIgY29tcGFjdGlvbiBhbmQgdGhlIG51bWJlciBvZgogICAqIGNvZGUgdW5pdHMgYWRkZWQgc2luY2UgdGhlIGxhc3QgY29tcGFjdGlvbi4KICAgKi8KICBpbnQgX3BhcnRzQ29tcGFjdGlvbkluZGV4ID0gMDsKICBpbnQgX3BhcnRzQ29kZVVuaXRzU2luY2VDb21wYWN0aW9uID0gMDsKCiAgLyoqCiAgICogVGhlIGJ1ZmZlciBpcyB1c2VkIHRvIGJ1aWxkIHVwIGEgc3RyaW5nIGZyb20gY29kZSB1bml0cy4gSXQgaXMKICAgKiB1c2VkIHdoZW4gd3JpdGluZyBzaG9ydCBzdHJpbmdzIG9yIGluZGl2aWR1YWwgY2hhciBjb2RlcyB0byB0aGUKICAgKiBidWZmZXIuIFRoZSBidWZmZXIgaXMgYWxsb2NhdGVkIG9uIGRlbWFuZC4KICAgKi8KICBVaW50MTZMaXN0IF9idWZmZXI7CiAgaW50IF9idWZmZXJQb3NpdGlvbiA9IDA7CgogIC8qKgogICAqIENvbGxlY3RzIHRoZSBhcHByb3hpbWF0ZSBtYXhpbWFsIG1hZ25pdHVkZSBvZiB0aGUgY29kZSB1bml0cyBhZGRlZAogICAqIHRvIHRoZSBidWZmZXIuCiAgICoKICAgKiBUaGUgdmFsdWUgb2YgZWFjaCBhZGRlZCBjb2RlIHVuaXQgaXMgb3InZWQgd2l0aCB0aGlzIHZhcmlhYmxlLCBzbyB0aGUKICAgKiBtb3N0IHNpZ25pZmljYW50IGJpdCBzZXQgaW4gYW55IGNvZGUgdW5pdCBpcyBhbHNvIHNldCBpbiB0aGlzIHZhbHVlLgogICAqIElmIGJlbG93IDI1NiwgdGhlIHN0cmluZyBpbiB0aGUgYnVmZmVyIGlzIGEgTGF0aW4tMSBzdHJpbmcuCiAgICovCiAgaW50IF9idWZmZXJDb2RlVW5pdE1hZ25pdHVkZSA9IDA7CgogIC8vLyBDcmVhdGVzIHRoZSBzdHJpbmcgYnVmZmVyIHdpdGggYW4gaW5pdGlhbCBjb250ZW50LgogIEBwYXRjaAogIFN0cmluZ0J1ZmZlcihbT2JqZWN0IGNvbnRlbnQgPSAiIl0pIHsKICAgIHdyaXRlKGNvbnRlbnQpOwogIH0KCiAgQHBhdGNoCiAgaW50IGdldCBsZW5ndGggPT4gX3BhcnRzQ29kZVVuaXRzICsgX2J1ZmZlclBvc2l0aW9uOwoKICBAcGF0Y2gKICB2b2lkIHdyaXRlKE9iamVjdCBvYmopIHsKICAgIFN0cmluZyBzdHIgPSAnJG9iaic7CiAgICBpZiAoc3RyLmlzRW1wdHkpIHJldHVybjsKICAgIF9jb25zdW1lQnVmZmVyKCk7CiAgICBfYWRkUGFydChzdHIpOwogIH0KCiAgQHBhdGNoCiAgdm9pZCB3cml0ZUNoYXJDb2RlKGludCBjaGFyQ29kZSkgewogICAgaWYgKGNoYXJDb2RlIDw9IDB4RkZGRikgewogICAgICBpZiAoY2hhckNvZGUgPCAwKSB7CiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoY2hhckNvZGUsIDAsIDB4MTBGRkZGKTsKICAgICAgfQogICAgICBfZW5zdXJlQ2FwYWNpdHkoMSk7CiAgICAgIF9idWZmZXJbX2J1ZmZlclBvc2l0aW9uKytdID0gY2hhckNvZGU7CiAgICAgIF9idWZmZXJDb2RlVW5pdE1hZ25pdHVkZSB8PSBjaGFyQ29kZTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChjaGFyQ29kZSA+IDB4MTBGRkZGKSB7CiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoY2hhckNvZGUsIDAsIDB4MTBGRkZGKTsKICAgICAgfQogICAgICBfZW5zdXJlQ2FwYWNpdHkoMik7CiAgICAgIGludCBiaXRzID0gY2hhckNvZGUgLSAweDEwMDAwOwogICAgICBfYnVmZmVyW19idWZmZXJQb3NpdGlvbisrXSA9IDB4RDgwMCB8IChiaXRzID4+IDEwKTsKICAgICAgX2J1ZmZlcltfYnVmZmVyUG9zaXRpb24rK10gPSAweERDMDAgfCAoYml0cyAmIDB4M0ZGKTsKICAgICAgX2J1ZmZlckNvZGVVbml0TWFnbml0dWRlIHw9IDB4RkZGRjsKICAgIH0KICB9CgogIEBwYXRjaAogIHZvaWQgd3JpdGVBbGwoSXRlcmFibGUgb2JqZWN0cywgW1N0cmluZyBzZXBhcmF0b3IgPSAiIl0pIHsKICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gb2JqZWN0cy5pdGVyYXRvcjsKICAgIGlmICghaXRlcmF0b3IubW92ZU5leHQoKSkgcmV0dXJuOwogICAgaWYgKHNlcGFyYXRvci5pc0VtcHR5KSB7CiAgICAgIGRvIHsKICAgICAgICB3cml0ZShpdGVyYXRvci5jdXJyZW50KTsKICAgICAgfSB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZShpdGVyYXRvci5jdXJyZW50KTsKICAgICAgd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgICB3cml0ZShzZXBhcmF0b3IpOwogICAgICAgIHdyaXRlKGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgICB9CiAgICB9CiAgfQoKICBAcGF0Y2gKICB2b2lkIHdyaXRlbG4oW09iamVjdCBvYmogPSAiIl0pIHsKICAgIHdyaXRlKG9iaik7CiAgICB3cml0ZSgiXG4iKTsKICB9CgogIC8qKiBNYWtlcyB0aGUgYnVmZmVyIGVtcHR5LiAqLwogIEBwYXRjaAogIHZvaWQgY2xlYXIoKSB7CiAgICBfcGFydHMgPSBudWxsOwogICAgX3BhcnRzQ29kZVVuaXRzID0gX2J1ZmZlclBvc2l0aW9uID0gX2J1ZmZlckNvZGVVbml0TWFnbml0dWRlID0gMDsKICB9CgogIC8qKiBSZXR1cm5zIHRoZSBjb250ZW50cyBvZiBidWZmZXIgYXMgYSBzdHJpbmcuICovCiAgQHBhdGNoCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgX2NvbnN1bWVCdWZmZXIoKTsKICAgIHJldHVybiAoX3BhcnRzQ29kZVVuaXRzID09IDApCiAgICAgICAgPyAiIgogICAgICAgIDogX1N0cmluZ0Jhc2UuX2NvbmNhdFJhbmdlKF9wYXJ0cywgMCwgX3BhcnRzLmxlbmd0aCk7CiAgfQoKICAvKiogRW5zdXJlcyB0aGF0IHRoZSBidWZmZXIgaGFzIGVub3VnaCBjYXBhY2l0eSB0byBhZGQgbiBjb2RlIHVuaXRzLiAqLwogIHZvaWQgX2Vuc3VyZUNhcGFjaXR5KGludCBuKSB7CiAgICBpZiAoX2J1ZmZlciA9PSBudWxsKSB7CiAgICAgIF9idWZmZXIgPSBuZXcgVWludDE2TGlzdChfQlVGRkVSX1NJWkUpOwogICAgfSBlbHNlIGlmIChfYnVmZmVyUG9zaXRpb24gKyBuID4gX2J1ZmZlci5sZW5ndGgpIHsKICAgICAgX2NvbnN1bWVCdWZmZXIoKTsKICAgIH0KICB9CgogIC8qKgogICAqIENvbnN1bWVzIHRoZSBjb250ZW50IG9mIHRoZSBidWZmZXIgYnkgdHVybmluZyBpdCBpbnRvIGEgc3RyaW5nCiAgICogYW5kIGFkZGluZyBpdCBhcyBhIHBhcnQuIEFmdGVyIGNhbGxpbmcgdGhpcyB0aGUgYnVmZmVyIHBvc2l0aW9uCiAgICogd2lsbCBiZSByZXNldCB0byB6ZXJvLgogICAqLwogIHZvaWQgX2NvbnN1bWVCdWZmZXIoKSB7CiAgICBpZiAoX2J1ZmZlclBvc2l0aW9uID09IDApIHJldHVybjsKICAgIGJvb2wgaXNMYXRpbjEgPSBfYnVmZmVyQ29kZVVuaXRNYWduaXR1ZGUgPD0gMHhGRjsKICAgIFN0cmluZyBzdHIgPSBfY3JlYXRlKF9idWZmZXIsIF9idWZmZXJQb3NpdGlvbiwgaXNMYXRpbjEpOwogICAgX2J1ZmZlclBvc2l0aW9uID0gX2J1ZmZlckNvZGVVbml0TWFnbml0dWRlID0gMDsKICAgIF9hZGRQYXJ0KHN0cik7CiAgfQoKICAvKioKICAgKiBBZGRzIGEgbmV3IHBhcnQgdG8gdGhpcyBzdHJpbmcgYnVmZmVyIGFuZCBrZWVwcyB0cmFjayBvZiBob3cKICAgKiBtYW55IGNvZGUgdW5pdHMgYXJlIGNvbnRhaW5lZCBpbiB0aGUgcGFydHMuCiAgICovCiAgdm9pZCBfYWRkUGFydChTdHJpbmcgc3RyKSB7CiAgICBpbnQgbGVuZ3RoID0gc3RyLmxlbmd0aDsKICAgIF9wYXJ0c0NvZGVVbml0cyArPSBsZW5ndGg7CiAgICBfcGFydHNDb2RlVW5pdHNTaW5jZUNvbXBhY3Rpb24gKz0gbGVuZ3RoOwoKICAgIGlmIChfcGFydHMgPT0gbnVsbCkgewogICAgICAvLyBFbXBpcmljYWxseSB0aGlzIGlzIGEgZ29vZCBjYXBhY2l0eSB0byBtaW5pbWl6ZSB0b3RhbCBieXRlcyBhbGxvY2F0ZWQuCiAgICAgIF9wYXJ0cyA9IG5ldyBfR3Jvd2FibGVMaXN0LndpdGhDYXBhY2l0eSgxMCkuLmFkZChzdHIpOwogICAgfSBlbHNlIHsKICAgICAgX3BhcnRzLmFkZChzdHIpOwogICAgICBpbnQgcGFydHNTaW5jZUNvbXBhY3Rpb24gPSBfcGFydHMubGVuZ3RoIC0gX3BhcnRzQ29tcGFjdGlvbkluZGV4OwogICAgICBpZiAocGFydHNTaW5jZUNvbXBhY3Rpb24gPT0gX1BBUlRTX1RPX0NPTVBBQ1QpIHsKICAgICAgICBfY29tcGFjdCgpOwogICAgICB9CiAgICB9CiAgfQoKICAvKioKICAgKiBDb21wYWN0cyB0aGUgbGFzdCBOIHBhcnRzIGlmIHRoZWlyIGF2ZXJhZ2Ugc2l6ZSBhbGxvd3MgdXMgdG8gc2F2ZSBhCiAgICogbG90IG9mIG1lbW9yeSBieSB0dXJuaW5nIHRoZW0gYWxsIGludG8gYSBzaW5nbGUgcGFydC4KICAgKi8KICB2b2lkIF9jb21wYWN0KCkgewogICAgaWYgKF9wYXJ0c0NvZGVVbml0c1NpbmNlQ29tcGFjdGlvbiA8IF9QQVJUU19UT19DT01QQUNUX1NJWkVfTElNSVQpIHsKICAgICAgU3RyaW5nIGNvbXBhY3RlZCA9IF9TdHJpbmdCYXNlLl9jb25jYXRSYW5nZSgKICAgICAgICAgIF9wYXJ0cywKICAgICAgICAgIF9wYXJ0c0NvbXBhY3Rpb25JbmRleCwgLy8gU3RhcnQKICAgICAgICAgIF9wYXJ0c0NvbXBhY3Rpb25JbmRleCArIF9QQVJUU19UT19DT01QQUNUIC8vIEVuZAogICAgICAgICAgKTsKICAgICAgX3BhcnRzLmxlbmd0aCA9IF9wYXJ0cy5sZW5ndGggLSBfUEFSVFNfVE9fQ09NUEFDVDsKICAgICAgX3BhcnRzLmFkZChjb21wYWN0ZWQpOwogICAgfQogICAgX3BhcnRzQ29kZVVuaXRzU2luY2VDb21wYWN0aW9uID0gMDsKICAgIF9wYXJ0c0NvbXBhY3Rpb25JbmRleCA9IF9wYXJ0cy5sZW5ndGg7CiAgfQoKICAvKioKICAgKiBDcmVhdGUgYSBbU3RyaW5nXSBmcm9tIHRoZSBVRlQtMTYgY29kZSB1bml0cyBpbiBidWZmZXIuCiAgICovCiAgc3RhdGljIFN0cmluZyBfY3JlYXRlKFVpbnQxNkxpc3QgYnVmZmVyLCBpbnQgbGVuZ3RoLCBib29sIGlzTGF0aW4xKQogICAgICBuYXRpdmUgIlN0cmluZ0J1ZmZlcl9jcmVhdGVTdHJpbmdGcm9tVWludDE2QXJyYXkiOwp9CoDGAE5OPAEeAQcVJixJAQZFGwYXAQZHKgcbAQZHSEhHMQYhKgEGREUwBhYbAQZIFAVLSkEGJAE5CSgUBAEJNwEJGxkdFhMEAQklHho7CBotLA0hOwgaJTo8KgYEAQk9KiYdCyElDR8kGiEIBgQBCSQQEQQBIQkRE0YEATUJFhYiDT4EAUogGy43GAYEAQZERRwGGiY2PjQTBAEGQjEGHh0fLgEaUD0NF0g3FAgGBAEGSTsGFEkzEio7DTkdBigrBAEGPQZGOQIBKGRhcnQ6Y29yZS1wYXRjaC9zdHJpbmdfYnVmZmVyX3BhdGNoLmRhcnQxb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvc3RyaW5nX3NpbmsuZGFydIN3Ly8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKYWJzdHJhY3QgY2xhc3MgU3RyaW5nU2luayB7CiAgLyoqCiAgICogQ29udmVydHMgW29ial0gdG8gYSBTdHJpbmcgYnkgaW52b2tpbmcgW09iamVjdC50b1N0cmluZ10gYW5kIAogICAqIGFkZHMgdGhlIHJlc3VsdCB0byBgdGhpc2AuCiAgICovCiAgdm9pZCB3cml0ZShPYmplY3Qgb2JqKTsKCiAgLyoqCiAgICogSXRlcmF0ZXMgb3ZlciB0aGUgZ2l2ZW4gW29iamVjdHNdIGFuZCBbd3JpdGVdcyB0aGVtIGluIHNlcXVlbmNlLgogICAqLwogIHZvaWQgd3JpdGVBbGwoSXRlcmFibGUgb2JqZWN0cywgW1N0cmluZyBzZXBhcmF0b3IgPSAiIl0pOwoKICAvKioKICAgKiBDb252ZXJ0cyBbb2JqXSB0byBhIFN0cmluZyBieSBpbnZva2luZyBbT2JqZWN0LnRvU3RyaW5nXSBhbmQgCiAgICogYWRkcyB0aGUgcmVzdWx0IHRvIGB0aGlzYCwgZm9sbG93ZWQgYnkgYSBuZXdsaW5lLgogICAqLwogIHZvaWQgd3JpdGVsbihbT2JqZWN0IG9iaiA9ICIiXSk7CgogIC8qKgogICAqIFdyaXRlcyB0aGUgW2NoYXJDb2RlXSB0byBgdGhpc2AuCiAgICoKICAgKiBUaGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIGB3cml0ZShuZXcgU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpYC4KICAgKi8KICB2b2lkIHdyaXRlQ2hhckNvZGUoaW50IGNoYXJDb2RlKTsKfQohAE5OPAETARwGQyAGGgEGRgY8AQZDNwYjAQYmBU4GJAIBGmRhcnQ6Y29yZS9zdHJpbmdfc2luay5kYXJ0LG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb3JlL3N5bWJvbC5kYXJ0jlYvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovLy8gT3BhcXVlIG5hbWUgdXNlZCBieSBtaXJyb3JzLCBpbnZvY2F0aW9ucyBhbmQgW0Z1bmN0aW9uLmFwcGx5XS4KYWJzdHJhY3QgY2xhc3MgU3ltYm9sIHsKICAvKiogVGhlIHN5bWJvbCBjb3JyZXNwb25kaW5nIHRvIHRoZSBuYW1lIG9mIHRoZSB1bmFyeSBtaW51cyBvcGVyYXRvci4gKi8KICBzdGF0aWMgY29uc3QgU3ltYm9sIHVuYXJ5TWludXMgPSBTeW1ib2woInVuYXJ5LSIpOwoKICAvKioKICAgKiBUaGUgZW1wdHkgc3ltYm9sLgogICAqCiAgICogVGhlIGVtcHR5IHN5bWJvbCBpcyB0aGUgbmFtZSBvZiBsaWJyYXJpZXMgd2l0aCBubyBsaWJyYXJ5IGRlY2xhcmF0aW9uLAogICAqIGFuZCB0aGUgYmFzZS1uYW1lIG9mIHRoZSB1bm5hbWVkIGNvbnN0cnVjdG9yLgogICAqLwogIHN0YXRpYyBjb25zdCBTeW1ib2wgZW1wdHkgPSBTeW1ib2woIiIpOwoKICAvKioKICAgKiBDb25zdHJ1Y3RzIGEgbmV3IFtTeW1ib2xdIHJlcHJlc2VudGluZyB0aGUgcHJvdmlkZWQgbmFtZS4KICAgKgogICAqIFRoZSBuYW1lIG11c3QgYmUgYSB2YWxpZCBwdWJsaWMgRGFydCBtZW1iZXIgbmFtZSwKICAgKiBwdWJsaWMgY29uc3RydWN0b3IgbmFtZSwgb3IgbGlicmFyeSBuYW1lLCBvcHRpb25hbGx5IHF1YWxpZmllZC4KICAgKgogICAqIEEgcXVhbGlmaWVkIG5hbWUgaXMgYSB2YWxpZCBuYW1lIHByZWNlZGVkIGJ5IGEgcHVibGljIGlkZW50aWZpZXIgbmFtZQogICAqIGFuZCBhICdgLmAnLCBlLmcuLCBgZm9vLmJhci5iYXo9YCBpcyBhIHF1YWxpZmllZCB2ZXJzaW9uIG9mIGBiYXo9YC4KICAgKiBUaGF0IG1lYW5zIHRoYXQgdGhlIGNvbnRlbnQgb2YgdGhlIFtuYW1lXSBTdHJpbmcgbXVzdCBiZSBlaXRoZXIKICAgKgogICAqICogYSB2YWxpZCBwdWJsaWMgRGFydCBpZGVudGlmaWVyCiAgICogICAodGhhdCBpcywgYW4gaWRlbnRpZmllciBub3Qgc3RhcnRpbmcgd2l0aCAiYF9gIiksCiAgICogKiBzdWNoIGFuIGlkZW50aWZpZXIgZm9sbG93ZWQgYnkgIj0iIChhIHNldHRlciBuYW1lKSwKICAgKiAqIHRoZSBuYW1lIG9mIGEgZGVjbGFyYWJsZSBvcGVyYXRvcgogICAqICAgKG9uZSBvZiAiYCtgIiwgImAtYCIsICJgKmAiLCAiYC9gIiwgImAlYCIsICJgfi9gIiwgImAmYCIsICJgfGAiLAogICAqICAgImBeYCIsICJgfmAiLCAiYDw8YCIsICJgPj5gIiwgImA8YCIsICJgPD1gIiwgImA+YCIsICJgPj1gIiwgImA9PWAiLAogICAqICAgImBbXWAiLCAiYFtdPWAiLCBvciAiYHVuYXJ5LWAiKSwKICAgKiAqIGFueSBvZiB0aGUgYWJvdmUgcHJlY2VkZWQgYnkgYW55IG51bWJlciBvZiBxdWFsaWZpZXJzLAogICAqICAgd2hlcmUgYSBxdWFsaWZpZXIgaXMgYSBub24tcHJpdmF0ZSBpZGVudGlmaWVyIGZvbGxvd2VkIGJ5ICdgLmAnLAogICAqICogb3IgdGhlIGVtcHR5IHN0cmluZyAodGhlIGRlZmF1bHQgbmFtZSBvZiBhIGxpYnJhcnkgd2l0aCBubyBsaWJyYXJ5CiAgICogICBuYW1lIGRlY2xhcmF0aW9uKS4KICAgKgogICAqIFN5bWJvbCBpbnN0YW5jZXMgY3JlYXRlZCBmcm9tIHRoZSBzYW1lIFtuYW1lXSBhcmUgZXF1YWwsCiAgICogYnV0IG5vdCBuZWNlc3NhcmlseSBpZGVudGljYWwsIGJ1dCBzeW1ib2xzIGNyZWF0ZWQgYXMgY29tcGlsZS10aW1lCiAgICogY29uc3RhbnRzIGFyZSBjYW5vbmljYWxpemVkLCBhcyBhbGwgb3RoZXIgY29uc3RhbnQgb2JqZWN0IGNyZWF0aW9ucy4KICAgKgogICAqIGBgYGRhcnQKICAgKiBhc3NlcnQobmV3IFN5bWJvbCgiZm9vIikgPT0gbmV3IFN5bWJvbCgiZm9vIikpOwogICAqIGFzc2VydChpZGVudGljYWwoY29uc3QgU3ltYm9sKCJmb28iKSwgY29uc3QgU3ltYm9sKCJmb28iKSkpOwogICAqIGBgYAogICAqCiAgICogSWYgW25hbWVdIGlzIGEgc2luZ2xlIGlkZW50aWZpZXIgdGhhdCBkb2VzIG5vdCBzdGFydCB3aXRoIGFuIHVuZGVyc2NvcmUsCiAgICogb3IgaXQgaXMgYSBxdWFsaWZpZWQgaWRlbnRpZmllciwKICAgKiBvciBpdCBpcyBhbiBvcGVyYXRvciBuYW1lIGRpZmZlcmVudCBmcm9tIGB1bmFyeS1gLAogICAqIHRoZW4gdGhlIHJlc3VsdCBvZiBgY29uc3QgU3ltYm9sKG5hbWUpYCBpcyB0aGUgc2FtZSBpbnN0YW5jZSB0aGF0CiAgICogdGhlIHN5bWJvbCBsaXRlcmFsIGNyZWF0ZWQgYnkgcHJlZml4aW5nIGAjYCB0byB0aGUgY29udGVudCBvZiBbbmFtZV0KICAgKiB3b3VsZCBldmFsdWF0ZSB0by4KICAgKgogICAqIGBgYGRhcnQKICAgKiBhc3NlcnQobmV3IFN5bWJvbCgiZm9vIikgPT0gI2Zvbyk7CiAgICogYXNzZXJ0KG5ldyBTeW1ib2woIltdPSIpID09ICNbXT1dKTsKICAgKiBhc3NlcnQobmV3IFN5bWJvbCgiZm9vLmJhciIpID09ICNmb28uYmFyKTsKICAgKiBhc3NlcnQoaWRlbnRpY2FsKGNvbnN0IFN5bWJvbCgiZm9vIiksICNmb28pKTsKICAgKiBhc3NlcnQoaWRlbnRpY2FsKGNvbnN0IFN5bWJvbCgiW109IiksICNbXT1dKSk7CiAgICogYXNzZXJ0KGlkZW50aWNhbChjb25zdCBTeW1ib2woImZvby5iYXIiKSwgI2Zvby5iYXIpKTsKICAgKiBgYGAKICAgKgogICAqIFRoaXMgY29uc3RydWN0b3IgY2Fubm90IGNyZWF0ZSBhIFtTeW1ib2xdIGluc3RhbmNlIHRoYXQgaXMgZXF1YWwgdG8KICAgKiBhIHByaXZhdGUgc3ltYm9sIGxpdGVyYWwgbGlrZSBgI19mb29gLgogICAqIGBgYGRhcnQKICAgKiBjb25zdCBTeW1ib2woIl9mb28iKSAvLyBJbnZhbGlkCiAgICogYGBgCiAgICoKICAgKiBUaGUgY3JlYXRlZCBpbnN0YW5jZSBvdmVycmlkZXMgW09iamVjdC49PV0uCiAgICoKICAgKiBUaGUgZm9sbG93aW5nIHRleHQgaXMgbm9uLW5vcm1hdGl2ZToKICAgKgogICAqIENyZWF0aW5nIG5vbi1jb25zdCBTeW1ib2wgaW5zdGFuY2VzIG1heSByZXN1bHQgaW4gbGFyZ2VyIG91dHB1dC4gIElmCiAgICogcG9zc2libGUsIHVzZSBgTWlycm9yc1VzZWRgIGZyb20gImRhcnQ6bWlycm9ycyIgdG8gc3BlY2lmeSB3aGljaCBuYW1lcwogICAqIG1pZ2h0IGJlIHBhc3NlZCB0byB0aGlzIGNvbnN0cnVjdG9yLgogICAqLwogIGNvbnN0IGZhY3RvcnkgU3ltYm9sKFN0cmluZyBuYW1lKSA9IGludGVybmFsLlN5bWJvbDsKCiAgLyoqCiAgICogUmV0dXJucyBhIGhhc2ggY29kZSBjb21wYXRpYmxlIHdpdGggW29wZXJhdG9yPT1dLgogICAqCiAgICogRXF1YWwgc3ltYm9scyBoYXZlIHRoZSBzYW1lIGhhc2ggY29kZS4KICAgKi8KICBpbnQgZ2V0IGhhc2hDb2RlOwoKICAvKioKICAgKiBTeW1ib2xzIGFyZSBlcXVhbCB0byBvdGhlciBzeW1ib2xzIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgc2FtZSBtZW1iZXIgbmFtZS4KICAgKgogICAqIFF1YWxpZmllZCBtZW1iZXIgbmFtZXMsIGxpa2UgYCNmb28uYmFyYCBhcmUgZXF1YWwgb25seSBpZiB0aGV5IGhhdmUgdGhlCiAgICogc2FtZSBpZGVudGlmaWVycyBiZWZvcmUgdGhlIHNhbWUgZmluYWwgbWVtYmVyIG5hbWUuCiAgICovCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcik7Cn0KYwBOTjwBEwFDGEs1AQYXBUwzBioBBj8FN0UFS0lFBSY5OylISyg+SEoaBT5ISgUNNUIJBU4mOEdKGAUNKCkwMzQ7CQVJLA0lCQUxBSoFSkwqBjcBBjcFLAYUAQZRBU05BhsCARVkYXJ0OmNvcmUvc3ltYm9sLmRhcnQqb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvdHlwZS5kYXJ0gTEvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogUnVudGltZSByZXByZXNlbnRhdGlvbiBvZiBhIHR5cGUuCiAqLwphYnN0cmFjdCBjbGFzcyBUeXBlIHt9CgwATk48ARMBBCUEFwETZGFydDpjb3JlL3R5cGUuZGFydClvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS91cmkuZGFydMAClIIvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovLyBGcmVxdWVudGx5IHVzZWQgY2hhcmFjdGVyIGNvZGVzLgpjb25zdCBpbnQgX1NQQUNFID0gMHgyMDsKY29uc3QgaW50IF9QRVJDRU5UID0gMHgyNTsKY29uc3QgaW50IF9BTVBFUlNBTkQgPSAweDI2Owpjb25zdCBpbnQgX1BMVVMgPSAweDJCOwpjb25zdCBpbnQgX0RPVCA9IDB4MkU7CmNvbnN0IGludCBfU0xBU0ggPSAweDJGOwpjb25zdCBpbnQgX0NPTE9OID0gMHgzQTsKY29uc3QgaW50IF9FUVVBTFMgPSAweDNkOwpjb25zdCBpbnQgX1VQUEVSX0NBU0VfQSA9IDB4NDE7CmNvbnN0IGludCBfVVBQRVJfQ0FTRV9aID0gMHg1QTsKY29uc3QgaW50IF9MRUZUX0JSQUNLRVQgPSAweDVCOwpjb25zdCBpbnQgX0JBQ0tTTEFTSCA9IDB4NUM7CmNvbnN0IGludCBfUklHSFRfQlJBQ0tFVCA9IDB4NUQ7CmNvbnN0IGludCBfTE9XRVJfQ0FTRV9BID0gMHg2MTsKY29uc3QgaW50IF9MT1dFUl9DQVNFX0YgPSAweDY2Owpjb25zdCBpbnQgX0xPV0VSX0NBU0VfWiA9IDB4N0E7Cgpjb25zdCBTdHJpbmcgX2hleERpZ2l0cyA9ICIwMTIzNDU2Nzg5QUJDREVGIjsKCi8qKgogKiBBIHBhcnNlZCBVUkksIHN1Y2ggYXMgYSBVUkwuCiAqCiAqICoqU2VlIGFsc286KioKICoKICogKiBbVVJJc11bdXJpc10gaW4gdGhlIFtsaWJyYXJ5IHRvdXJdW2xpYnRvdXJdCiAqICogW1JGQy0zOTg2XShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2KQogKgogKiBbdXJpc106IGh0dHBzOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL2RhcnQtdXAtYW5kLXJ1bm5pbmcvY2gwMy5odG1sI3VyaXMKICogW2xpYnRvdXJdOiBodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvZG9jcy9kYXJ0LXVwLWFuZC1ydW5uaW5nL2NvbnRlbnRzL2NoMDMuaHRtbAogKi8KYWJzdHJhY3QgY2xhc3MgVXJpIHsKICAvKioKICAgKiBSZXR1cm5zIHRoZSBuYXR1cmFsIGJhc2UgVVJJIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS4KICAgKgogICAqIFdoZW4gcnVubmluZyBpbiBhIGJyb3dzZXIgdGhpcyBpcyB0aGUgY3VycmVudCBVUkwgb2YgdGhlIGN1cnJlbnQgcGFnZQogICAqIChmcm9tIGB3aW5kb3cubG9jYXRpb24uaHJlZmApLgogICAqCiAgICogV2hlbiBub3QgcnVubmluZyBpbiBhIGJyb3dzZXIgdGhpcyBpcyB0aGUgZmlsZSBVUkkgcmVmZXJlbmNpbmcKICAgKiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgVXJpIGdldCBiYXNlOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IFVSSSBmcm9tIGl0cyBjb21wb25lbnRzLgogICAqCiAgICogRWFjaCBjb21wb25lbnQgaXMgc2V0IHRocm91Z2ggYSBuYW1lZCBhcmd1bWVudC4gQW55IG51bWJlciBvZgogICAqIGNvbXBvbmVudHMgY2FuIGJlIHByb3ZpZGVkLiBUaGUgW3BhdGhdIGFuZCBbcXVlcnldIGNvbXBvbmVudHMgY2FuIGJlIHNldAogICAqIHVzaW5nIGVpdGhlciBvZiB0d28gZGlmZmVyZW50IG5hbWVkIGFyZ3VtZW50cy4KICAgKgogICAqIFRoZSBzY2hlbWUgY29tcG9uZW50IGlzIHNldCB0aHJvdWdoIFtzY2hlbWVdLiBUaGUgc2NoZW1lIGlzCiAgICogbm9ybWFsaXplZCB0byBhbGwgbG93ZXJjYXNlIGxldHRlcnMuIElmIHRoZSBzY2hlbWUgaXMgb21pdHRlZCBvciBlbXB0eSwKICAgKiB0aGUgVVJJIHdpbGwgbm90IGhhdmUgYSBzY2hlbWUgcGFydC4KICAgKgogICAqIFRoZSB1c2VyIGluZm8gcGFydCBvZiB0aGUgYXV0aG9yaXR5IGNvbXBvbmVudCBpcyBzZXQgdGhyb3VnaAogICAqIFt1c2VySW5mb10uIEl0IGRlZmF1bHRzIHRvIHRoZSBlbXB0eSBzdHJpbmcsIHdoaWNoIHdpbGwgYmUgb21pdHRlZAogICAqIGZyb20gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgVVJJLgogICAqCiAgICogVGhlIGhvc3QgcGFydCBvZiB0aGUgYXV0aG9yaXR5IGNvbXBvbmVudCBpcyBzZXQgdGhyb3VnaAogICAqIFtob3N0XS4gVGhlIGhvc3QgY2FuIGVpdGhlciBiZSBhIGhvc3RuYW1lLCBhbiBJUHY0IGFkZHJlc3Mgb3IgYW4KICAgKiBJUHY2IGFkZHJlc3MsIGNvbnRhaW5lZCBpbiAnWycgYW5kICddJy4gSWYgdGhlIGhvc3QgY29udGFpbnMgYQogICAqICc6JyBjaGFyYWN0ZXIsIHRoZSAnWycgYW5kICddJyBhcmUgYWRkZWQgaWYgbm90IGFscmVhZHkgcHJvdmlkZWQuCiAgICogVGhlIGhvc3QgaXMgbm9ybWFsaXplZCB0byBhbGwgbG93ZXJjYXNlIGxldHRlcnMuCiAgICoKICAgKiBUaGUgcG9ydCBwYXJ0IG9mIHRoZSBhdXRob3JpdHkgY29tcG9uZW50IGlzIHNldCB0aHJvdWdoCiAgICogW3BvcnRdLgogICAqIElmIFtwb3J0XSBpcyBvbWl0dGVkIG9yIGBudWxsYCwgaXQgaW1wbGllcyB0aGUgZGVmYXVsdCBwb3J0IGZvcgogICAqIHRoZSBVUkkncyBzY2hlbWUsIGFuZCBpcyBlcXVpdmFsZW50IHRvIHBhc3NpbmcgdGhhdCBwb3J0IGV4cGxpY2l0bHkuCiAgICogVGhlIHJlY29nbml6ZWQgc2NoZW1lcywgYW5kIHRoZWlyIGRlZmF1bHQgcG9ydHMsIGFyZSAiaHR0cCIgKDgwKSBhbmQKICAgKiAiaHR0cHMiICg0NDMpLiBBbGwgb3RoZXIgc2NoZW1lcyBhcmUgY29uc2lkZXJlZCBhcyBoYXZpbmcgemVybyBhcyB0aGUKICAgKiBkZWZhdWx0IHBvcnQuCiAgICoKICAgKiBJZiBhbnkgb2YgYHVzZXJJbmZvYCwgYGhvc3RgIG9yIGBwb3J0YCBhcmUgcHJvdmlkZWQsCiAgICogdGhlIFVSSSBoYXMgYW4gYXV0aG9yaXR5IGFjY29yZGluZyB0byBbaGFzQXV0aG9yaXR5XS4KICAgKgogICAqIFRoZSBwYXRoIGNvbXBvbmVudCBpcyBzZXQgdGhyb3VnaCBlaXRoZXIgW3BhdGhdIG9yCiAgICogW3BhdGhTZWdtZW50c10uCiAgICogV2hlbiBbcGF0aF0gaXMgdXNlZCwgaXQgc2hvdWxkIGJlIGEgdmFsaWQgVVJJIHBhdGgsCiAgICogYnV0IGludmFsaWQgY2hhcmFjdGVycywgZXhjZXB0IHRoZSBnZW5lcmFsIGRlbGltaXRlcnMgJzovQFtdPyMnLAogICAqIHdpbGwgYmUgZXNjYXBlZCBpZiBuZWNlc3NhcnkuCiAgICogV2hlbiBbcGF0aFNlZ21lbnRzXSBpcyB1c2VkLCBlYWNoIG9mIHRoZSBwcm92aWRlZCBzZWdtZW50cwogICAqIGlzIGZpcnN0IHBlcmNlbnQtZW5jb2RlZCBhbmQgdGhlbiBqb2luZWQgdXNpbmcgdGhlIGZvcndhcmQgc2xhc2gKICAgKiBzZXBhcmF0b3IuCiAgICoKICAgKiBUaGUgcGVyY2VudC1lbmNvZGluZyBvZiB0aGUgcGF0aCBzZWdtZW50cyBlbmNvZGVzIGFsbAogICAqIGNoYXJhY3RlcnMgZXhjZXB0IGZvciB0aGUgdW5yZXNlcnZlZCBjaGFyYWN0ZXJzIGFuZCB0aGUgZm9sbG93aW5nCiAgICogbGlzdCBvZiBjaGFyYWN0ZXJzOiBgISQmJygpKissOz06QGAuIElmIHRoZSBvdGhlciBjb21wb25lbnRzCiAgICogbmVjZXNzaXRhdGUgYW4gYWJzb2x1dGUgcGF0aCwgYSBsZWFkaW5nIHNsYXNoIGAvYCBpcyBwcmVwZW5kZWQgaWYKICAgKiBub3QgYWxyZWFkeSB0aGVyZS4KICAgKgogICAqIFRoZSBxdWVyeSBjb21wb25lbnQgaXMgc2V0IHRocm91Z2ggZWl0aGVyIFtxdWVyeV0gb3IgW3F1ZXJ5UGFyYW1ldGVyc10uCiAgICogV2hlbiBbcXVlcnldIGlzIHVzZWQsIHRoZSBwcm92aWRlZCBzdHJpbmcgc2hvdWxkIGJlIGEgdmFsaWQgVVJJIHF1ZXJ5LAogICAqIGJ1dCBpbnZhbGlkIGNoYXJhY3RlcnMsIG90aGVyIHRoYW4gZ2VuZXJhbCBkZWxpbWl0ZXJzLAogICAqIHdpbGwgYmUgZXNjYXBlZCBpZiBuZWNlc3NhcnkuCiAgICogV2hlbiBbcXVlcnlQYXJhbWV0ZXJzXSBpcyB1c2VkIHRoZSBxdWVyeSBpcyBidWlsdCBmcm9tIHRoZQogICAqIHByb3ZpZGVkIG1hcC4gRWFjaCBrZXkgYW5kIHZhbHVlIGluIHRoZSBtYXAgaXMgcGVyY2VudC1lbmNvZGVkCiAgICogYW5kIGpvaW5lZCB1c2luZyBlcXVhbCBhbmQgYW1wZXJzYW5kIGNoYXJhY3RlcnMuCiAgICogQSB2YWx1ZSBpbiB0aGUgbWFwIG11c3QgYmUgZWl0aGVyIGEgc3RyaW5nLCBvciBhbiBbSXRlcmFibGVdIG9mIHN0cmluZ3MsCiAgICogd2hlcmUgdGhlIGxhdHRlciBjb3JyZXNwb25kcyB0byBtdWx0aXBsZSB2YWx1ZXMgZm9yIHRoZSBzYW1lIGtleS4KICAgKgogICAqIFRoZSBwZXJjZW50LWVuY29kaW5nIG9mIHRoZSBrZXlzIGFuZCB2YWx1ZXMgZW5jb2RlcyBhbGwgY2hhcmFjdGVycwogICAqIGV4Y2VwdCBmb3IgdGhlIHVucmVzZXJ2ZWQgY2hhcmFjdGVycywgYW5kIHJlcGxhY2VzIHNwYWNlcyB3aXRoIGArYC4KICAgKiBJZiBgcXVlcnlgIGlzIHRoZSBlbXB0eSBzdHJpbmcsIGl0IGlzIGVxdWl2YWxlbnQgdG8gb21pdHRpbmcgaXQuCiAgICogVG8gaGF2ZSBhbiBhY3R1YWwgZW1wdHkgcXVlcnkgcGFydCwKICAgKiB1c2UgYW4gZW1wdHkgbWFwIGZvciBgcXVlcnlQYXJhbWV0ZXJzYC4KICAgKgogICAqIElmIGJvdGggYHF1ZXJ5YCBhbmQgYHF1ZXJ5UGFyYW1ldGVyc2AgYXJlIG9taXR0ZWQgb3IgYG51bGxgLAogICAqIHRoZSBVUkkgaGFzIG5vIHF1ZXJ5IHBhcnQuCiAgICoKICAgKiBUaGUgZnJhZ21lbnQgY29tcG9uZW50IGlzIHNldCB0aHJvdWdoIFtmcmFnbWVudF0uCiAgICogSXQgc2hvdWxkIGJlIGEgdmFsaWQgVVJJIGZyYWdtZW50LCBidXQgaW52YWxpZCBjaGFyYWN0ZXJzIG90aGVyIHRoYW4KICAgKiBnZW5lcmFsIGRlbGltaXRlcnMsIGFyZSBlc2NhcGVkIGlmIG5lY2Vzc2FyeS4KICAgKiBJZiBgZnJhZ21lbnRgIGlzIG9taXR0ZWQgb3IgYG51bGxgLCB0aGUgVVJJIGhhcyBubyBmcmFnbWVudCBwYXJ0LgogICAqLwogIGZhY3RvcnkgVXJpKAogICAgICB7U3RyaW5nIHNjaGVtZSwKICAgICAgU3RyaW5nIHVzZXJJbmZvLAogICAgICBTdHJpbmcgaG9zdCwKICAgICAgaW50IHBvcnQsCiAgICAgIFN0cmluZyBwYXRoLAogICAgICBJdGVyYWJsZTxTdHJpbmc+IHBhdGhTZWdtZW50cywKICAgICAgU3RyaW5nIHF1ZXJ5LAogICAgICBNYXA8U3RyaW5nLCBkeW5hbWljIC8qU3RyaW5nfEl0ZXJhYmxlPFN0cmluZz4qLyA+IHF1ZXJ5UGFyYW1ldGVycywKICAgICAgU3RyaW5nIGZyYWdtZW50fSkgPSBfVXJpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IGBodHRwYCBVUkkgZnJvbSBhdXRob3JpdHksIHBhdGggYW5kIHF1ZXJ5LgogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiBgYGAKICAgKiAvLyBodHRwOi8vZXhhbXBsZS5vcmcvcGF0aD9xPWRhcnQuCiAgICogbmV3IFVyaS5odHRwKCJleGFtcGxlLm9yZyIsICIvcGF0aCIsIHsgInEiIDogImRhcnQiIH0pOwogICAqCiAgICogLy8gaHR0cDovL3VzZXI6cGFzc0Bsb2NhbGhvc3Q6ODA4MAogICAqIG5ldyBVcmkuaHR0cCgidXNlcjpwYXNzQGxvY2FsaG9zdDo4MDgwIiwgIiIpOwogICAqCiAgICogLy8gaHR0cDovL2V4YW1wbGUub3JnL2ElMjBiCiAgICogbmV3IFVyaS5odHRwKCJleGFtcGxlLm9yZyIsICJhIGIiKTsKICAgKgogICAqIC8vIGh0dHA6Ly9leGFtcGxlLm9yZy9hJTI1MkYKICAgKiBuZXcgVXJpLmh0dHAoImV4YW1wbGUub3JnIiwgIi9hJTJGIik7CiAgICogYGBgCiAgICoKICAgKiBUaGUgYHNjaGVtZWAgaXMgYWx3YXlzIHNldCB0byBgaHR0cGAuCiAgICoKICAgKiBUaGUgYHVzZXJJbmZvYCwgYGhvc3RgIGFuZCBgcG9ydGAgY29tcG9uZW50cyBhcmUgc2V0IGZyb20gdGhlCiAgICogW2F1dGhvcml0eV0gYXJndW1lbnQuIElmIGBhdXRob3JpdHlgIGlzIGBudWxsYCBvciBlbXB0eSwKICAgKiB0aGUgY3JlYXRlZCBgVXJpYCBoYXMgbm8gYXV0aG9yaXR5LCBhbmQgaXNuJ3QgZGlyZWN0bHkgdXNhYmxlCiAgICogYXMgYW4gSFRUUCBVUkwsIHdoaWNoIG11c3QgaGF2ZSBhIG5vbi1lbXB0eSBob3N0LgogICAqCiAgICogVGhlIGBwYXRoYCBjb21wb25lbnQgaXMgc2V0IGZyb20gdGhlIFt1bmVuY29kZWRQYXRoXQogICAqIGFyZ3VtZW50LiBUaGUgcGF0aCBwYXNzZWQgbXVzdCBub3QgYmUgZW5jb2RlZCBhcyB0aGlzIGNvbnN0cnVjdG9yCiAgICogZW5jb2RlcyB0aGUgcGF0aC4KICAgKgogICAqIFRoZSBgcXVlcnlgIGNvbXBvbmVudCBpcyBzZXQgZnJvbSB0aGUgb3B0aW9uYWwgW3F1ZXJ5UGFyYW1ldGVyc10KICAgKiBhcmd1bWVudC4KICAgKi8KICBmYWN0b3J5IFVyaS5odHRwKFN0cmluZyBhdXRob3JpdHksIFN0cmluZyB1bmVuY29kZWRQYXRoLAogICAgICBbTWFwPFN0cmluZywgU3RyaW5nPiBxdWVyeVBhcmFtZXRlcnNdKSA9IF9VcmkuaHR0cDsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBgaHR0cHNgIFVSSSBmcm9tIGF1dGhvcml0eSwgcGF0aCBhbmQgcXVlcnkuCiAgICoKICAgKiBUaGlzIGNvbnN0cnVjdG9yIGlzIHRoZSBzYW1lIGFzIFtVcmkuaHR0cF0gZXhjZXB0IGZvciB0aGUgc2NoZW1lCiAgICogd2hpY2ggaXMgc2V0IHRvIGBodHRwc2AuCiAgICovCiAgZmFjdG9yeSBVcmkuaHR0cHMoU3RyaW5nIGF1dGhvcml0eSwgU3RyaW5nIHVuZW5jb2RlZFBhdGgsCiAgICAgIFtNYXA8U3RyaW5nLCBTdHJpbmc+IHF1ZXJ5UGFyYW1ldGVyc10pID0gX1VyaS5odHRwczsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBmaWxlIFVSSSBmcm9tIGFuIGFic29sdXRlIG9yIHJlbGF0aXZlIGZpbGUgcGF0aC4KICAgKgogICAqIFRoZSBmaWxlIHBhdGggaXMgcGFzc2VkIGluIFtwYXRoXS4KICAgKgogICAqIFRoaXMgcGF0aCBpcyBpbnRlcnByZXRlZCB1c2luZyBlaXRoZXIgV2luZG93cyBvciBub24tV2luZG93cwogICAqIHNlbWFudGljcy4KICAgKgogICAqIFdpdGggbm9uLVdpbmRvd3Mgc2VtYW50aWNzIHRoZSBzbGFzaCAoYC9gKSBpcyB1c2VkIHRvIHNlcGFyYXRlCiAgICogcGF0aCBzZWdtZW50cyBpbiB0aGUgaW5wdXQgW3BhdGhdLgogICAqCiAgICogV2l0aCBXaW5kb3dzIHNlbWFudGljcywgYmFja3NsYXNoIChgXGApIGFuZCBmb3J3YXJkLXNsYXNoIChgL2ApCiAgICogYXJlIHVzZWQgdG8gc2VwYXJhdGUgcGF0aCBzZWdtZW50cyBpbiB0aGUgaW5wdXQgW3BhdGhdLAogICAqIGV4Y2VwdCBpZiB0aGUgcGF0aCBzdGFydHMgd2l0aCBgXFw/XGAgaW4gd2hpY2ggY2FzZQogICAqIG9ubHkgYmFja3NsYXNoIChgXGApIHNlcGFyYXRlcyBwYXRoIHNlZ21lbnRzIGluIFtwYXRoXS4KICAgKgogICAqIElmIHRoZSBwYXRoIHN0YXJ0cyB3aXRoIGEgcGF0aCBzZXBhcmF0b3IsIGFuIGFic29sdXRlIFVSSSAod2l0aCB0aGUKICAgKiBgZmlsZWAgc2NoZW1lIGFuZCBhbiBlbXB0eSBhdXRob3JpdHkpIGlzIGNyZWF0ZWQuCiAgICogT3RoZXJ3aXNlIGEgcmVsYXRpdmUgVVJJIHJlZmVyZW5jZSB3aXRoIG5vIHNjaGVtZSBvciBhdXRob3JpdHkgaXMgY3JlYXRlZC4KICAgKiBPbmUgZXhjZXB0aW9uIGZyb20gdGhpcyBydWxlIGlzIHRoYXQgd2hlbiBXaW5kb3dzIHNlbWFudGljcyBpcyB1c2VkCiAgICogYW5kIHRoZSBwYXRoIHN0YXJ0cyB3aXRoIGEgZHJpdmUgbGV0dGVyIGZvbGxvd2VkIGJ5IGEgY29sb24gKCI6IikgYW5kIGEKICAgKiBwYXRoIHNlcGFyYXRvciwgdGhlbiBhbiBhYnNvbHV0ZSBVUkkgaXMgY3JlYXRlZC4KICAgKgogICAqIFRoZSBkZWZhdWx0IGZvciB3aGV0aGVyIHRvIHVzZSBXaW5kb3dzIG9yIG5vbi1XaW5kb3dzIHNlbWFudGljcwogICAqIGRldGVybWluZWQgZnJvbSB0aGUgcGxhdGZvcm0gRGFydCBpcyBydW5uaW5nIG9uLiBXaGVuIHJ1bm5pbmcgaW4KICAgKiB0aGUgc3RhbmRhbG9uZSBWTSwgdGhpcyBpcyBkZXRlY3RlZCBieSB0aGUgVk0gYmFzZWQgb24gdGhlCiAgICogb3BlcmF0aW5nIHN5c3RlbS4gV2hlbiBydW5uaW5nIGluIGEgYnJvd3NlciBub24tV2luZG93cyBzZW1hbnRpY3MKICAgKiBpcyBhbHdheXMgdXNlZC4KICAgKgogICAqIFRvIG92ZXJyaWRlIHRoZSBhdXRvbWF0aWMgZGV0ZWN0aW9uIG9mIHdoaWNoIHNlbWFudGljcyB0byB1c2UgcGFzcwogICAqIGEgdmFsdWUgZm9yIFt3aW5kb3dzXS4gUGFzc2luZyBgdHJ1ZWAgd2lsbCB1c2UgV2luZG93cwogICAqIHNlbWFudGljcyBhbmQgcGFzc2luZyBgZmFsc2VgIHdpbGwgdXNlIG5vbi1XaW5kb3dzIHNlbWFudGljcy4KICAgKgogICAqIEV4YW1wbGVzIHVzaW5nIG5vbi1XaW5kb3dzIHNlbWFudGljczoKICAgKgogICAqIGBgYAogICAqIC8vIHh4eC95eXkKICAgKiBuZXcgVXJpLmZpbGUoInh4eC95eXkiLCB3aW5kb3dzOiBmYWxzZSk7CiAgICoKICAgKiAvLyB4eHgveXl5LwogICAqIG5ldyBVcmkuZmlsZSgieHh4L3l5eS8iLCB3aW5kb3dzOiBmYWxzZSk7CiAgICoKICAgKiAvLyBmaWxlOi8vL3h4eC95eXkKICAgKiBuZXcgVXJpLmZpbGUoIi94eHgveXl5Iiwgd2luZG93czogZmFsc2UpOwogICAqCiAgICogLy8gZmlsZTovLy94eHgveXl5LwogICAqIG5ldyBVcmkuZmlsZSgiL3h4eC95eXkvIiwgd2luZG93czogZmFsc2UpOwogICAqCiAgICogLy8gQyUzQQogICAqIG5ldyBVcmkuZmlsZSgiQzoiLCB3aW5kb3dzOiBmYWxzZSk7CiAgICogYGBgCiAgICoKICAgKiBFeGFtcGxlcyB1c2luZyBXaW5kb3dzIHNlbWFudGljczoKICAgKgogICAqIGBgYAogICAqIC8vIHh4eC95eXkKICAgKiBuZXcgVXJpLmZpbGUociJ4eHhceXl5Iiwgd2luZG93czogdHJ1ZSk7CiAgICoKICAgKiAvLyB4eHgveXl5LwogICAqIG5ldyBVcmkuZmlsZShyInh4eFx5eXlcIiwgd2luZG93czogdHJ1ZSk7CiAgICoKICAgKiBmaWxlOi8vL3h4eC95eXkKICAgKiBuZXcgVXJpLmZpbGUociJceHh4XHl5eSIsIHdpbmRvd3M6IHRydWUpOwogICAqCiAgICogZmlsZTovLy94eHgveXl5LwogICAqIG5ldyBVcmkuZmlsZShyIlx4eHhceXl5LyIsIHdpbmRvd3M6IHRydWUpOwogICAqCiAgICogLy8gZmlsZTovLy9DOi94eHgveXl5CiAgICogbmV3IFVyaS5maWxlKHIiQzpceHh4XHl5eSIsIHdpbmRvd3M6IHRydWUpOwogICAqCiAgICogLy8gVGhpcyB0aHJvd3MgYW4gZXJyb3IuIEEgcGF0aCB3aXRoIGEgZHJpdmUgbGV0dGVyLCBidXQgbm8gZm9sbG93aW5nCiAgICogLy8gcGF0aCwgaXMgbm90IGFsbG93ZWQuCiAgICogbmV3IFVyaS5maWxlKHIiQzoiLCB3aW5kb3dzOiB0cnVlKTsKICAgKgogICAqIC8vIFRoaXMgdGhyb3dzIGFuIGVycm9yLiBBIHBhdGggd2l0aCBhIGRyaXZlIGxldHRlciBpcyBub3QgYWJzb2x1dGUuCiAgICogbmV3IFVyaS5maWxlKHIiQzp4eHhceXl5Iiwgd2luZG93czogdHJ1ZSk7CiAgICoKICAgKiAvLyBmaWxlOi8vc2VydmVyL3NoYXJlL2ZpbGUKICAgKiBuZXcgVXJpLmZpbGUociJcXHNlcnZlclxzaGFyZVxmaWxlIiwgd2luZG93czogdHJ1ZSk7CiAgICogYGBgCiAgICoKICAgKiBJZiB0aGUgcGF0aCBwYXNzZWQgaXMgbm90IGEgdmFsaWQgZmlsZSBwYXRoLCBhbiBlcnJvciBpcyB0aHJvd24uCiAgICovCiAgZmFjdG9yeSBVcmkuZmlsZShTdHJpbmcgcGF0aCwge2Jvb2wgd2luZG93c30pID0gX1VyaS5maWxlOwoKICAvKioKICAgKiBMaWtlIFtVcmkuZmlsZV0gZXhjZXB0IHRoYXQgYSBub24tZW1wdHkgVVJJIHBhdGggZW5kcyBpbiBhIHNsYXNoLgogICAqCiAgICogSWYgW3BhdGhdIGlzIG5vdCBlbXB0eSwgYW5kIGl0IGRvZXNuJ3QgZW5kIGluIGEgZGlyZWN0b3J5IHNlcGFyYXRvciwKICAgKiB0aGVuIGEgc2xhc2ggaXMgYWRkZWQgdG8gdGhlIHJldHVybmVkIFVSSSdzIHBhdGguCiAgICogSW4gYWxsIG90aGVyIGNhc2VzLCB0aGUgcmVzdWx0IGlzIHRoZSBzYW1lIGFzIHJldHVybmVkIGJ5IGBVcmkuZmlsZWAuCiAgICovCiAgZmFjdG9yeSBVcmkuZGlyZWN0b3J5KFN0cmluZyBwYXRoLCB7Ym9vbCB3aW5kb3dzfSkgPSBfVXJpLmRpcmVjdG9yeTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIGBkYXRhOmAgVVJJIGNvbnRhaW5pbmcgdGhlIFtjb250ZW50XSBzdHJpbmcuCiAgICoKICAgKiBDb252ZXJ0cyB0aGUgY29udGVudCB0byBhIGJ5dGVzIHVzaW5nIFtlbmNvZGluZ10gb3IgdGhlIGNoYXJzZXQgc3BlY2lmaWVkCiAgICogaW4gW3BhcmFtZXRlcnNdIChkZWZhdWx0aW5nIHRvIFVTLUFTQ0lJIGlmIG5vdCBzcGVjaWZpZWQgb3IgdW5yZWNvZ25pemVkKSwKICAgKiB0aGVuIGVuY29kZXMgdGhlIGJ5dGVzIGludG8gdGhlIHJlc3VsdGluZyBkYXRhIFVSSS4KICAgKgogICAqIERlZmF1bHRzIHRvIGVuY29kaW5nIHVzaW5nIHBlcmNlbnQtZW5jb2RpbmcgKGFueSBub24tQVNDSUkgb3Igbm9uLVVSSS12YWxpZAogICAqIGJ5dGVzIGlzIHJlcGxhY2VkIGJ5IGEgcGVyY2VudCBlbmNvZGluZykuIElmIFtiYXNlNjRdIGlzIHRydWUsIHRoZSBieXRlcwogICAqIGFyZSBpbnN0ZWFkIGVuY29kZWQgdXNpbmcgW2Jhc2U2NF0uCiAgICoKICAgKiBJZiBbZW5jb2RpbmddIGlzIG5vdCBwcm92aWRlZCBhbmQgW3BhcmFtZXRlcnNdIGhhcyBhIGBjaGFyc2V0YCBlbnRyeSwKICAgKiB0aGF0IG5hbWUgaXMgbG9va2VkIHVwIHVzaW5nIFtFbmNvZGluZy5nZXRCeU5hbWVdLAogICAqIGFuZCBpZiB0aGUgbG9va3VwIHJldHVybnMgYW4gZW5jb2RpbmcsIHRoYXQgZW5jb2RpbmcgaXMgdXNlZCB0byBjb252ZXJ0CiAgICogW2NvbnRlbnRdIHRvIGJ5dGVzLgogICAqIElmIHByb3ZpZGluZyBib3RoIGFuIFtlbmNvZGluZ10gYW5kIGEgY2hhcnNldCBpbiBbcGFyYW1ldGVyc10sIHRoZXkgc2hvdWxkCiAgICogYWdyZWUsIG90aGVyd2lzZSBkZWNvZGluZyB3b24ndCBiZSBhYmxlIHRvIHVzZSB0aGUgY2hhcnNldCBwYXJhbWV0ZXIKICAgKiB0byBkZXRlcm1pbmUgdGhlIGVuY29kaW5nLgogICAqCiAgICogSWYgW21pbWVUeXBlXSBhbmQvb3IgW3BhcmFtZXRlcnNdIGFyZSBzdXBwbGllZCwgdGhleSBhcmUgYWRkZWQgdG8gdGhlCiAgICogY3JlYXRlZCBVUkkuIElmIGFueSBvZiB0aGVzZSBjb250YWluIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGFsbG93ZWQKICAgKiBpbiB0aGUgZGF0YSBVUkksIHRoZSBjaGFyYWN0ZXIgaXMgcGVyY2VudC1lc2NhcGVkLiBJZiB0aGUgY2hhcmFjdGVyIGlzCiAgICogbm9uLUFTQ0lJLCBpdCBpcyBmaXJzdCBVVEYtOCBlbmNvZGVkIGFuZCB0aGVuIHRoZSBieXRlcyBhcmUgcGVyY2VudAogICAqIGVuY29kZWQuIEFuIG9taXR0ZWQgW21pbWVUeXBlXSBpbiBhIGRhdGEgVVJJIG1lYW5zIGB0ZXh0L3BsYWluYCwganVzdAogICAqIGFzIGFuIG9taXR0ZWQgYGNoYXJzZXRgIHBhcmFtZXRlciBkZWZhdWx0cyB0byBtZWFuaW5nIGBVUy1BU0NJSWAuCiAgICoKICAgKiBUbyByZWFkIHRoZSBjb250ZW50IGJhY2ssIHVzZSBbVXJpRGF0YS5jb250ZW50QXNTdHJpbmddLgogICAqLwogIGZhY3RvcnkgVXJpLmRhdGFGcm9tU3RyaW5nKFN0cmluZyBjb250ZW50LAogICAgICB7U3RyaW5nIG1pbWVUeXBlLAogICAgICBFbmNvZGluZyBlbmNvZGluZywKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBwYXJhbWV0ZXJzLAogICAgICBib29sIGJhc2U2NCA9IGZhbHNlfSkgewogICAgVXJpRGF0YSBkYXRhID0gVXJpRGF0YS5mcm9tU3RyaW5nKGNvbnRlbnQsCiAgICAgICAgbWltZVR5cGU6IG1pbWVUeXBlLAogICAgICAgIGVuY29kaW5nOiBlbmNvZGluZywKICAgICAgICBwYXJhbWV0ZXJzOiBwYXJhbWV0ZXJzLAogICAgICAgIGJhc2U2NDogYmFzZTY0KTsKICAgIHJldHVybiBkYXRhLnVyaTsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYSBgZGF0YTpgIFVSSSBjb250YWluaW5nIGFuIGVuY29kaW5nIG9mIFtieXRlc10uCiAgICoKICAgKiBEZWZhdWx0cyB0byBCYXNlNjQgZW5jb2RpbmcgdGhlIGJ5dGVzLCBidXQgaWYgW3BlcmNlbnRFbmNvZGVkXQogICAqIGlzIGB0cnVlYCwgdGhlIGJ5dGVzIHdpbGwgaW5zdGVhZCBiZSBwZXJjZW50IGVuY29kZWQgKGFueSBub24tQVNDSUkKICAgKiBvciBub24tdmFsaWQtQVNDSUktY2hhcmFjdGVyIGJ5dGUgaXMgcmVwbGFjZWQgYnkgYSBwZXJjZW50IGVuY29kaW5nKS4KICAgKgogICAqIFRvIHJlYWQgdGhlIGJ5dGVzIGJhY2ssIHVzZSBbVXJpRGF0YS5jb250ZW50QXNCeXRlc10uCiAgICoKICAgKiBJdCBkZWZhdWx0cyB0byBoYXZpbmcgdGhlIG1pbWUtdHlwZSBgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtYC4KICAgKiBUaGUgW21pbWVUeXBlXSBhbmQgW3BhcmFtZXRlcnNdIGFyZSBhZGRlZCB0byB0aGUgY3JlYXRlZCBVUkkuCiAgICogSWYgYW55IG9mIHRoZXNlIGNvbnRhaW4gY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgYWxsb3dlZAogICAqIGluIHRoZSBkYXRhIFVSSSwgdGhlIGNoYXJhY3RlciBpcyBwZXJjZW50LWVzY2FwZWQuIElmIHRoZSBjaGFyYWN0ZXIgaXMKICAgKiBub24tQVNDSUksIGl0IGlzIGZpcnN0IFVURi04IGVuY29kZWQgYW5kIHRoZW4gdGhlIGJ5dGVzIGFyZSBwZXJjZW50CiAgICogZW5jb2RlZC4KICAgKi8KICBmYWN0b3J5IFVyaS5kYXRhRnJvbUJ5dGVzKExpc3Q8aW50PiBieXRlcywKICAgICAge21pbWVUeXBlID0gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIsCiAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1ldGVycywKICAgICAgcGVyY2VudEVuY29kZWQgPSBmYWxzZX0pIHsKICAgIFVyaURhdGEgZGF0YSA9IFVyaURhdGEuZnJvbUJ5dGVzKGJ5dGVzLAogICAgICAgIG1pbWVUeXBlOiBtaW1lVHlwZSwKICAgICAgICBwYXJhbWV0ZXJzOiBwYXJhbWV0ZXJzLAogICAgICAgIHBlcmNlbnRFbmNvZGVkOiBwZXJjZW50RW5jb2RlZCk7CiAgICByZXR1cm4gZGF0YS51cmk7CiAgfQoKICAvKioKICAgKiBUaGUgc2NoZW1lIGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAqCiAgICogUmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nIGlmIHRoZXJlIGlzIG5vIHNjaGVtZSBjb21wb25lbnQuCiAgICoKICAgKiBBIFVSSSBzY2hlbWUgaXMgY2FzZSBpbnNlbnNpdGl2ZS4KICAgKiBUaGUgcmV0dXJuZWQgc2NoZW1lIGlzIGNhbm9uaWNhbGl6ZWQgdG8gbG93ZXJjYXNlIGxldHRlcnMuCiAgICovCiAgU3RyaW5nIGdldCBzY2hlbWU7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGF1dGhvcml0eSBjb21wb25lbnQuCiAgICoKICAgKiBUaGUgYXV0aG9yaXR5IGlzIGZvcm1hdHRlZCBmcm9tIHRoZSBbdXNlckluZm9dLCBbaG9zdF0gYW5kIFtwb3J0XQogICAqIHBhcnRzLgogICAqCiAgICogUmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nIGlmIHRoZXJlIGlzIG5vIGF1dGhvcml0eSBjb21wb25lbnQuCiAgICovCiAgU3RyaW5nIGdldCBhdXRob3JpdHk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHVzZXIgaW5mbyBwYXJ0IG9mIHRoZSBhdXRob3JpdHkgY29tcG9uZW50LgogICAqCiAgICogUmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nIGlmIHRoZXJlIGlzIG5vIHVzZXIgaW5mbyBpbiB0aGUKICAgKiBhdXRob3JpdHkgY29tcG9uZW50LgogICAqLwogIFN0cmluZyBnZXQgdXNlckluZm87CgogIC8qKgogICAqIFJldHVybnMgdGhlIGhvc3QgcGFydCBvZiB0aGUgYXV0aG9yaXR5IGNvbXBvbmVudC4KICAgKgogICAqIFJldHVybnMgdGhlIGVtcHR5IHN0cmluZyBpZiB0aGVyZSBpcyBubyBhdXRob3JpdHkgY29tcG9uZW50IGFuZAogICAqIGhlbmNlIG5vIGhvc3QuCiAgICoKICAgKiBJZiB0aGUgaG9zdCBpcyBhbiBJUCB2ZXJzaW9uIDYgYWRkcmVzcywgdGhlIHN1cnJvdW5kaW5nIGBbYCBhbmQgYF1gIGlzCiAgICogcmVtb3ZlZC4KICAgKgogICAqIFRoZSBob3N0IHN0cmluZyBpcyBjYXNlLWluc2Vuc2l0aXZlLgogICAqIFRoZSByZXR1cm5lZCBob3N0IG5hbWUgaXMgY2Fub25pY2FsaXplZCB0byBsb3dlci1jYXNlCiAgICogd2l0aCB1cHBlci1jYXNlIHBlcmNlbnQtZXNjYXBlcy4KICAgKi8KICBTdHJpbmcgZ2V0IGhvc3Q7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHBvcnQgcGFydCBvZiB0aGUgYXV0aG9yaXR5IGNvbXBvbmVudC4KICAgKgogICAqIFJldHVybnMgdGhlIGRlZmF1bHQgcG9ydCBpZiB0aGVyZSBpcyBubyBwb3J0IG51bWJlciBpbiB0aGUgYXV0aG9yaXR5CiAgICogY29tcG9uZW50LiBUaGF0J3MgODAgZm9yIGh0dHAsIDQ0MyBmb3IgaHR0cHMsIGFuZCAwIGZvciBldmVyeXRoaW5nIGVsc2UuCiAgICovCiAgaW50IGdldCBwb3J0OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBwYXRoIGNvbXBvbmVudC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBwYXRoIGlzIGVuY29kZWQuIFRvIGdldCBkaXJlY3QgYWNjZXNzIHRvIHRoZSBkZWNvZGVkCiAgICogcGF0aCB1c2UgW3BhdGhTZWdtZW50c10uCiAgICoKICAgKiBSZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcgaWYgdGhlcmUgaXMgbm8gcGF0aCBjb21wb25lbnQuCiAgICovCiAgU3RyaW5nIGdldCBwYXRoOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBxdWVyeSBjb21wb25lbnQuIFRoZSByZXR1cm5lZCBxdWVyeSBpcyBlbmNvZGVkLiBUbyBnZXQKICAgKiBkaXJlY3QgYWNjZXNzIHRvIHRoZSBkZWNvZGVkIHF1ZXJ5IHVzZSBbcXVlcnlQYXJhbWV0ZXJzXS4KICAgKgogICAqIFJldHVybnMgdGhlIGVtcHR5IHN0cmluZyBpZiB0aGVyZSBpcyBubyBxdWVyeSBjb21wb25lbnQuCiAgICovCiAgU3RyaW5nIGdldCBxdWVyeTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZnJhZ21lbnQgaWRlbnRpZmllciBjb21wb25lbnQuCiAgICoKICAgKiBSZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcgaWYgdGhlcmUgaXMgbm8gZnJhZ21lbnQgaWRlbnRpZmllcgogICAqIGNvbXBvbmVudC4KICAgKi8KICBTdHJpbmcgZ2V0IGZyYWdtZW50OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBVUkkgcGF0aCBzcGxpdCBpbnRvIGl0cyBzZWdtZW50cy4gRWFjaCBvZiB0aGUgc2VnbWVudHMgaW4gdGhlCiAgICogcmV0dXJuZWQgbGlzdCBoYXZlIGJlZW4gZGVjb2RlZC4gSWYgdGhlIHBhdGggaXMgZW1wdHkgdGhlIGVtcHR5IGxpc3Qgd2lsbAogICAqIGJlIHJldHVybmVkLiBBIGxlYWRpbmcgc2xhc2ggYC9gIGRvZXMgbm90IGFmZmVjdCB0aGUgc2VnbWVudHMgcmV0dXJuZWQuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgbGlzdCBpcyB1bm1vZGlmaWFibGUgYW5kIHdpbGwgdGhyb3cgW1Vuc3VwcG9ydGVkRXJyb3JdIG9uIGFueQogICAqIGNhbGxzIHRoYXQgd291bGQgbXV0YXRlIGl0LgogICAqLwogIExpc3Q8U3RyaW5nPiBnZXQgcGF0aFNlZ21lbnRzOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBVUkkgcXVlcnkgc3BsaXQgaW50byBhIG1hcCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzCiAgICogc3BlY2lmaWVkIGZvciBGT1JNIHBvc3QgaW4gdGhlIFtIVE1MIDQuMDEgc3BlY2lmaWNhdGlvbiBzZWN0aW9uCiAgICogMTcuMTMuNF0oaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9pbnRlcmFjdC9mb3Jtcy5odG1sI2gtMTcuMTMuNCAiSFRNTCA0LjAxIHNlY3Rpb24gMTcuMTMuNCIpLgogICAqIEVhY2gga2V5IGFuZCB2YWx1ZSBpbiB0aGUgcmV0dXJuZWQgbWFwIGhhcyBiZWVuIGRlY29kZWQuCiAgICogSWYgdGhlcmUgaXMgbm8gcXVlcnkgdGhlIGVtcHR5IG1hcCBpcyByZXR1cm5lZC4KICAgKgogICAqIEtleXMgaW4gdGhlIHF1ZXJ5IHN0cmluZyB0aGF0IGhhdmUgbm8gdmFsdWUgYXJlIG1hcHBlZCB0byB0aGUKICAgKiBlbXB0eSBzdHJpbmcuCiAgICogSWYgYSBrZXkgb2NjdXJzIG1vcmUgdGhhbiBvbmNlIGluIHRoZSBxdWVyeSBzdHJpbmcsIGl0IGlzIG1hcHBlZCB0bwogICAqIGFuIGFyYml0cmFyeSBjaG9pY2Ugb2YgcG9zc2libGUgdmFsdWUuCiAgICogVGhlIFtxdWVyeVBhcmFtZXRlcnNBbGxdIGdldHRlciBjYW4gcHJvdmlkZSBhIG1hcAogICAqIHRoYXQgbWFwcyBrZXlzIHRvIGFsbCBvZiB0aGVpciB2YWx1ZXMuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgbWFwIGlzIHVubW9kaWZpYWJsZS4KICAgKi8KICBNYXA8U3RyaW5nLCBTdHJpbmc+IGdldCBxdWVyeVBhcmFtZXRlcnM7CgogIC8qKgogICAqIFJldHVybnMgdGhlIFVSSSBxdWVyeSBzcGxpdCBpbnRvIGEgbWFwIGFjY29yZGluZyB0byB0aGUgcnVsZXMKICAgKiBzcGVjaWZpZWQgZm9yIEZPUk0gcG9zdCBpbiB0aGUgW0hUTUwgNC4wMSBzcGVjaWZpY2F0aW9uIHNlY3Rpb24KICAgKiAxNy4xMy40XShodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2ludGVyYWN0L2Zvcm1zLmh0bWwjaC0xNy4xMy40ICJIVE1MIDQuMDEgc2VjdGlvbiAxNy4xMy40IikuCiAgICogRWFjaCBrZXkgYW5kIHZhbHVlIGluIHRoZSByZXR1cm5lZCBtYXAgaGFzIGJlZW4gZGVjb2RlZC4gSWYgdGhlcmUgaXMgbm8KICAgKiBxdWVyeSB0aGUgZW1wdHkgbWFwIGlzIHJldHVybmVkLgogICAqCiAgICogS2V5cyBhcmUgbWFwcGVkIHRvIGxpc3RzIG9mIHRoZWlyIHZhbHVlcy4gSWYgYSBrZXkgb2NjdXJzIG9ubHkgb25jZSwKICAgKiBpdHMgdmFsdWUgaXMgYSBzaW5nbGV0b24gbGlzdC4gSWYgYSBrZXkgb2NjdXJzIHdpdGggbm8gdmFsdWUsIHRoZQogICAqIGVtcHR5IHN0cmluZyBpcyB1c2VkIGFzIHRoZSB2YWx1ZSBmb3IgdGhhdCBvY2N1cnJlbmNlLgogICAqCiAgICogVGhlIHJldHVybmVkIG1hcCBhbmQgdGhlIGxpc3RzIGl0IGNvbnRhaW5zIGFyZSB1bm1vZGlmaWFibGUuCiAgICovCiAgTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBnZXQgcXVlcnlQYXJhbWV0ZXJzQWxsOwoKICAvKioKICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIFVSSSBpcyBhYnNvbHV0ZS4KICAgKgogICAqIEEgVVJJIGlzIGFuIGFic29sdXRlIFVSSSBpbiB0aGUgc2Vuc2Ugb2YgUkZDIDM5ODYgaWYgaXQgaGFzIGEgc2NoZW1lCiAgICogYW5kIG5vIGZyYWdtZW50LgogICAqLwogIGJvb2wgZ2V0IGlzQWJzb2x1dGU7CgogIC8qKgogICAqIFJldHVybnMgd2hldGhlciB0aGUgVVJJIGhhcyBhIFtzY2hlbWVdIGNvbXBvbmVudC4KICAgKi8KICBib29sIGdldCBoYXNTY2hlbWUgPT4gc2NoZW1lLmlzTm90RW1wdHk7CgogIC8qKgogICAqIFJldHVybnMgd2hldGhlciB0aGUgVVJJIGhhcyBhbiBbYXV0aG9yaXR5XSBjb21wb25lbnQuCiAgICovCiAgYm9vbCBnZXQgaGFzQXV0aG9yaXR5OwoKICAvKioKICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIFVSSSBoYXMgYW4gZXhwbGljaXQgcG9ydC4KICAgKgogICAqIElmIHRoZSBwb3J0IG51bWJlciBpcyB0aGUgZGVmYXVsdCBwb3J0IG51bWJlcgogICAqICh6ZXJvIGZvciB1bnJlY29nbml6ZWQgc2NoZW1lcywgd2l0aCBodHRwICg4MCkgYW5kIGh0dHBzICg0NDMpIGJlaW5nCiAgICogcmVjb2duaXplZCksCiAgICogdGhlbiB0aGUgcG9ydCBpcyBtYWRlIGltcGxpY2l0IGFuZCBvbWl0dGVkIGZyb20gdGhlIFVSSS4KICAgKi8KICBib29sIGdldCBoYXNQb3J0OwoKICAvKioKICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIFVSSSBoYXMgYSBxdWVyeSBwYXJ0LgogICAqLwogIGJvb2wgZ2V0IGhhc1F1ZXJ5OwoKICAvKioKICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIFVSSSBoYXMgYSBmcmFnbWVudCBwYXJ0LgogICAqLwogIGJvb2wgZ2V0IGhhc0ZyYWdtZW50OwoKICAvKioKICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIFVSSSBoYXMgYW4gZW1wdHkgcGF0aC4KICAgKi8KICBib29sIGdldCBoYXNFbXB0eVBhdGg7CgogIC8qKgogICAqIFJldHVybnMgd2hldGhlciB0aGUgVVJJIGhhcyBhbiBhYnNvbHV0ZSBwYXRoIChzdGFydGluZyB3aXRoICcvJykuCiAgICovCiAgYm9vbCBnZXQgaGFzQWJzb2x1dGVQYXRoOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBvcmlnaW4gb2YgdGhlIFVSSSBpbiB0aGUgZm9ybSBzY2hlbWU6Ly9ob3N0OnBvcnQgZm9yIHRoZQogICAqIHNjaGVtZXMgaHR0cCBhbmQgaHR0cHMuCiAgICoKICAgKiBJdCBpcyBhbiBlcnJvciBpZiB0aGUgc2NoZW1lIGlzIG5vdCAiaHR0cCIgb3IgImh0dHBzIiwgb3IgaWYgdGhlIGhvc3QgbmFtZQogICAqIGlzIG1pc3Npbmcgb3IgZW1wdHkuCiAgICoKICAgKiBTZWU6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvV0QtaHRtbDUtMjAxMTA0MDUvb3JpZ2luLTAuaHRtbCNvcmlnaW4KICAgKi8KICBTdHJpbmcgZ2V0IG9yaWdpbjsKCiAgLy8vIFdoZXRoZXIgdGhlIHNjaGVtZSBvZiB0aGlzIFtVcmldIGlzIFtzY2hlbWVdLgogIC8vLwogIC8vLyBUaGUgW3NjaGVtZV0gc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBvbmUgcmV0dXJuZWQgYnkgW1VyaS5zY2hlbWVdLAogIC8vLyBidXQgZG9lc24ndCBoYXZlIHRvIGJlIGNhc2Utbm9ybWFsaXplZCB0byBsb3dlci1jYXNlIGNoYXJhY3RlcnMuCiAgLy8vCiAgLy8vIEV4YW1wbGU6CiAgLy8vIGBgYGRhcnQKICAvLy8gdmFyIHVyaSA9IFVyaS5wYXJzZSgiaHR0cDovL2V4YW1wbGUuY29tLyIpOwogIC8vLyBwcmludCh1cmkuaXNTY2hlbWUoIkhUVFAiKSk7ICAvLyBQcmludHMgdHJ1ZS4KICAvLy8gYGBgCiAgLy8vCiAgLy8vIEEgYG51bGxgIG9yIGVtcHR5IFtzY2hlbWVdIHN0cmluZyBtYXRjaGVzIGEgVVJJIHdpdGggbm8gc2NoZW1lCiAgLy8vIChvbmUgd2hlcmUgW2hhc1NjaGVtZV0gcmV0dXJucyBmYWxzZSkuCiAgYm9vbCBpc1NjaGVtZShTdHJpbmcgc2NoZW1lKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZmlsZSBwYXRoIGZyb20gYSBmaWxlIFVSSS4KICAgKgogICAqIFRoZSByZXR1cm5lZCBwYXRoIGhhcyBlaXRoZXIgV2luZG93cyBvciBub24tV2luZG93cwogICAqIHNlbWFudGljcy4KICAgKgogICAqIEZvciBub24tV2luZG93cyBzZW1hbnRpY3MgdGhlIHNsYXNoICgiLyIpIGlzIHVzZWQgdG8gc2VwYXJhdGUKICAgKiBwYXRoIHNlZ21lbnRzLgogICAqCiAgICogRm9yIFdpbmRvd3Mgc2VtYW50aWNzIHRoZSBiYWNrc2xhc2ggKCJcXCIpIHNlcGFyYXRvciBpcyB1c2VkIHRvCiAgICogc2VwYXJhdGUgcGF0aCBzZWdtZW50cy4KICAgKgogICAqIElmIHRoZSBVUkkgaXMgYWJzb2x1dGUgdGhlIHBhdGggc3RhcnRzIHdpdGggYSBwYXRoIHNlcGFyYXRvcgogICAqIHVubGVzcyBXaW5kb3dzIHNlbWFudGljcyBpcyB1c2VkIGFuZCB0aGUgZmlyc3QgcGF0aCBzZWdtZW50IGlzIGEKICAgKiBkcml2ZSBsZXR0ZXIuIFdoZW4gV2luZG93cyBzZW1hbnRpY3MgaXMgdXNlZCBhIGhvc3QgY29tcG9uZW50IGluCiAgICogdGhlIHVyaSBpbiBpbnRlcnByZXRlZCBhcyBhIGZpbGUgc2VydmVyIGFuZCBhIFVOQyBwYXRoIGlzCiAgICogcmV0dXJuZWQuCiAgICoKICAgKiBUaGUgZGVmYXVsdCBmb3Igd2hldGhlciB0byB1c2UgV2luZG93cyBvciBub24tV2luZG93cyBzZW1hbnRpY3MKICAgKiBkZXRlcm1pbmVkIGZyb20gdGhlIHBsYXRmb3JtIERhcnQgaXMgcnVubmluZyBvbi4gV2hlbiBydW5uaW5nIGluCiAgICogdGhlIHN0YW5kYWxvbmUgVk0gdGhpcyBpcyBkZXRlY3RlZCBieSB0aGUgVk0gYmFzZWQgb24gdGhlCiAgICogb3BlcmF0aW5nIHN5c3RlbS4gV2hlbiBydW5uaW5nIGluIGEgYnJvd3NlciBub24tV2luZG93cyBzZW1hbnRpY3MKICAgKiBpcyBhbHdheXMgdXNlZC4KICAgKgogICAqIFRvIG92ZXJyaWRlIHRoZSBhdXRvbWF0aWMgZGV0ZWN0aW9uIG9mIHdoaWNoIHNlbWFudGljcyB0byB1c2UgcGFzcwogICAqIGEgdmFsdWUgZm9yIFt3aW5kb3dzXS4gUGFzc2luZyBgdHJ1ZWAgd2lsbCB1c2UgV2luZG93cwogICAqIHNlbWFudGljcyBhbmQgcGFzc2luZyBgZmFsc2VgIHdpbGwgdXNlIG5vbi1XaW5kb3dzIHNlbWFudGljcy4KICAgKgogICAqIElmIHRoZSBVUkkgZW5kcyB3aXRoIGEgc2xhc2ggKGkuZS4gdGhlIGxhc3QgcGF0aCBjb21wb25lbnQgaXMKICAgKiBlbXB0eSkgdGhlIHJldHVybmVkIGZpbGUgcGF0aCB3aWxsIGFsc28gZW5kIHdpdGggYSBzbGFzaC4KICAgKgogICAqIFdpdGggV2luZG93cyBzZW1hbnRpY3MgVVJJcyBzdGFydGluZyB3aXRoIGEgZHJpdmUgbGV0dGVyIGNhbm5vdAogICAqIGJlIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRyaXZlIG9uIHRoZSBkZXNpZ25hdGVkIGRyaXZlLiBUaGF0IGlzCiAgICogZm9yIHRoZSBVUkkgYGZpbGU6Ly8vYzphYmNgIGNhbGxpbmcgYHRvRmlsZVBhdGhgIHdpbGwgdGhyb3cgYXMgYQogICAqIHBhdGggc2VnbWVudCBjYW5ub3QgY29udGFpbiBjb2xvbiBvbiBXaW5kb3dzLgogICAqCiAgICogRXhhbXBsZXMgdXNpbmcgbm9uLVdpbmRvd3Mgc2VtYW50aWNzIChyZXN1bHRpbmcgb2YgY2FsbGluZwogICAqIHRvRmlsZVBhdGggaW4gY29tbWVudCk6CiAgICoKICAgKiAgICAgVXJpLnBhcnNlKCJ4eHgveXl5Iik7ICAvLyB4eHgveXl5CiAgICogICAgIFVyaS5wYXJzZSgieHh4L3l5eS8iKTsgIC8vIHh4eC95eXkvCiAgICogICAgIFVyaS5wYXJzZSgiZmlsZTovLy94eHgveXl5Iik7ICAvLyAveHh4L3l5eQogICAqICAgICBVcmkucGFyc2UoImZpbGU6Ly8veHh4L3l5eS8iKTsgIC8vIC94eHgveXl5LwogICAqICAgICBVcmkucGFyc2UoImZpbGU6Ly8vQzoiKTsgIC8vIC9DOgogICAqICAgICBVcmkucGFyc2UoImZpbGU6Ly8vQzphIik7ICAvLyAvQzphCiAgICoKICAgKiBFeGFtcGxlcyB1c2luZyBXaW5kb3dzIHNlbWFudGljcyAocmVzdWx0aW5nIFVSSSBpbiBjb21tZW50KToKICAgKgogICAqICAgICBVcmkucGFyc2UoInh4eC95eXkiKTsgIC8vIHh4eFx5eXkKICAgKiAgICAgVXJpLnBhcnNlKCJ4eHgveXl5LyIpOyAgLy8geHh4XHl5eVwKICAgKiAgICAgVXJpLnBhcnNlKCJmaWxlOi8vL3h4eC95eXkiKTsgIC8vIFx4eHhceXl5CiAgICogICAgIFVyaS5wYXJzZSgiZmlsZTovLy94eHgveXl5LyIpOyAgLy8gXHh4eFx5eXlcCiAgICogICAgIFVyaS5wYXJzZSgiZmlsZTovLy9DOi94eHgveXl5Iik7ICAvLyBDOlx4eHhceXl5CiAgICogICAgIFVyaS5wYXJzZSgiZmlsZTpDOnh4eC95eXkiKTsgIC8vIFRocm93cyBhcyBhIHBhdGggc2VnbWVudAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW5ub3QgY29udGFpbiBjb2xvbiBvbiBXaW5kb3dzLgogICAqICAgICBVcmkucGFyc2UoImZpbGU6Ly9zZXJ2ZXIvc2hhcmUvZmlsZSIpOyAgLy8gXFxzZXJ2ZXJcc2hhcmVcZmlsZQogICAqCiAgICogSWYgdGhlIFVSSSBpcyBub3QgYSBmaWxlIFVSSSBjYWxsaW5nIHRoaXMgdGhyb3dzCiAgICogW1Vuc3VwcG9ydGVkRXJyb3JdLgogICAqCiAgICogSWYgdGhlIFVSSSBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgZmlsZSBwYXRoIGNhbGxpbmcgdGhpcyB0aHJvd3MKICAgKiBbVW5zdXBwb3J0ZWRFcnJvcl0uCiAgICovCiAgLy8gVE9ETyhscm4pOiBEZXByZWNhdGUgYW5kIG1vdmUgZnVuY3Rpb25hbGl0eSB0byBGaWxlIGNsYXNzIG9yIHNpbWlsYXIuCiAgLy8gVGhlIGNvcmUgbGlicmFyaWVzIHNob3VsZCBub3Qgd29ycnkgYWJvdXQgdGhlIHBsYXRmb3JtLgogIFN0cmluZyB0b0ZpbGVQYXRoKHtib29sIHdpbmRvd3N9KTsKCiAgLyoqCiAgICogQWNjZXNzIHRoZSBzdHJ1Y3R1cmUgb2YgYSBgZGF0YTpgIFVSSS4KICAgKgogICAqIFJldHVybnMgYSBbVXJpRGF0YV0gb2JqZWN0IGZvciBgZGF0YTpgIFVSSXMgYW5kIGBudWxsYCBmb3IgYWxsIG90aGVyCiAgICogVVJJcy4KICAgKiBUaGUgW1VyaURhdGFdIG9iamVjdCBjYW4gYmUgdXNlZCB0byBhY2Nlc3MgdGhlIG1lZGlhIHR5cGUgYW5kIGRhdGEKICAgKiBvZiBhIGBkYXRhOmAgVVJJLgogICAqLwogIFVyaURhdGEgZ2V0IGRhdGE7CgogIC8vLyBSZXR1cm5zIGEgaGFzaCBjb2RlIGNvbXB1dGVkIGFzIGB0b1N0cmluZygpLmhhc2hDb2RlYC4KICAvLy8KICAvLy8gVGhpcyBndWFyYW50ZWVzIHRoYXQgVVJJcyB3aXRoIHRoZSBzYW1lIG5vcm1hbGl6ZWQKICBpbnQgZ2V0IGhhc2hDb2RlOwoKICAvLy8gQSBVUkkgaXMgZXF1YWwgdG8gYW5vdGhlciBVUkkgd2l0aCB0aGUgc2FtZSBub3JtYWxpemVkIHJlcHJlc2VudGF0aW9uLgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKTsKCiAgLy8vIFJldHVybnMgdGhlIG5vcm1hbGl6ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBVUkkuCiAgU3RyaW5nIHRvU3RyaW5nKCk7CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgYFVyaWAgYmFzZWQgb24gdGhpcyBvbmUsIGJ1dCB3aXRoIHNvbWUgcGFydHMgcmVwbGFjZWQuCiAgICoKICAgKiBUaGlzIG1ldGhvZCB0YWtlcyB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHRoZSBbbmV3IFVyaV0gY29uc3RydWN0b3IsCiAgICogYW5kIHRoZXkgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nLgogICAqCiAgICogQXQgbW9zdCBvbmUgb2YgW3BhdGhdIGFuZCBbcGF0aFNlZ21lbnRzXSBtdXN0IGJlIHByb3ZpZGVkLgogICAqIExpa2V3aXNlLCBhdCBtb3N0IG9uZSBvZiBbcXVlcnldIGFuZCBbcXVlcnlQYXJhbWV0ZXJzXSBtdXN0IGJlIHByb3ZpZGVkLgogICAqCiAgICogRWFjaCBwYXJ0IHRoYXQgaXMgbm90IHByb3ZpZGVkIHdpbGwgZGVmYXVsdCB0byB0aGUgY29ycmVzcG9uZGluZwogICAqIHZhbHVlIGZyb20gdGhpcyBgVXJpYCBpbnN0ZWFkLgogICAqCiAgICogVGhpcyBtZXRob2QgaXMgZGlmZmVyZW50IGZyb20gW1VyaS5yZXNvbHZlXSB3aGljaCBvdmVycmlkZXMgaW4gYQogICAqIGhpZXJhcmNoaWNhbCBtYW5uZXIsCiAgICogYW5kIGNhbiBpbnN0ZWFkIHJlcGxhY2UgZWFjaCBwYXJ0IG9mIGEgYFVyaWAgaW5kaXZpZHVhbGx5LgogICAqCiAgICogRXhhbXBsZToKICAgKgogICAqICAgICBVcmkgdXJpMSA9IFVyaS5wYXJzZSgiYTovL2JAYzo0L2QvZT9mI2ciKTsKICAgKiAgICAgVXJpIHVyaTIgPSB1cmkxLnJlcGxhY2Uoc2NoZW1lOiAiQSIsIHBhdGg6ICJEL0UvRSIsIGZyYWdtZW50OiAiRyIpOwogICAqICAgICBwcmludCh1cmkyKTsgIC8vIHByaW50cyAiYTovL2JAYzo0L0QvRS9FP2YjRyIKICAgKgogICAqIFRoaXMgbWV0aG9kIGFjdHMgc2ltaWxhcmx5IHRvIHVzaW5nIHRoZSBgbmV3IFVyaWAgY29uc3RydWN0b3Igd2l0aAogICAqIHNvbWUgb2YgdGhlIGFyZ3VtZW50cyB0YWtlbiBmcm9tIHRoaXMgYFVyaWAuIEV4YW1wbGU6CiAgICoKICAgKiAgICAgVXJpIHVyaTMgPSBuZXcgVXJpKAogICAqICAgICAgICAgc2NoZW1lOiAiQSIsCiAgICogICAgICAgICB1c2VySW5mbzogdXJpMS51c2VySW5mbywKICAgKiAgICAgICAgIGhvc3Q6IHVyaTEuaG9zdCwKICAgKiAgICAgICAgIHBvcnQ6IHVyaTEucG9ydCwKICAgKiAgICAgICAgIHBhdGg6ICJEL0UvRSIsCiAgICogICAgICAgICBxdWVyeTogdXJpMS5xdWVyeSwKICAgKiAgICAgICAgIGZyYWdtZW50OiAiRyIpOwogICAqICAgICBwcmludCh1cmkzKTsgIC8vIHByaW50cyAiYTovL2JAYzo0L0QvRS9FP2YjRyIKICAgKiAgICAgcHJpbnQodXJpMiA9PSB1cmkzKTsgIC8vIHByaW50cyB0cnVlLgogICAqCiAgICogVXNpbmcgdGhpcyBtZXRob2QgY2FuIGJlIHNlZW4gYXMgYSBzaG9ydGhhbmQgZm9yIHRoZSBgVXJpYCBjb25zdHJ1Y3RvcgogICAqIGNhbGwgYWJvdmUsIGJ1dCBtYXkgYWxzbyBiZSBzbGlnaHRseSBmYXN0ZXIgYmVjYXVzZSB0aGUgcGFydHMgdGFrZW4KICAgKiBmcm9tIHRoaXMgYFVyaWAgbmVlZCBub3QgYmUgY2hlY2tlZCBmb3IgdmFsaWRpdHkgYWdhaW4uCiAgICovCiAgVXJpIHJlcGxhY2UoCiAgICAgIHtTdHJpbmcgc2NoZW1lLAogICAgICBTdHJpbmcgdXNlckluZm8sCiAgICAgIFN0cmluZyBob3N0LAogICAgICBpbnQgcG9ydCwKICAgICAgU3RyaW5nIHBhdGgsCiAgICAgIEl0ZXJhYmxlPFN0cmluZz4gcGF0aFNlZ21lbnRzLAogICAgICBTdHJpbmcgcXVlcnksCiAgICAgIE1hcDxTdHJpbmcsIGR5bmFtaWMgLypTdHJpbmd8SXRlcmFibGU8U3RyaW5nPiovID4gcXVlcnlQYXJhbWV0ZXJzLAogICAgICBTdHJpbmcgZnJhZ21lbnR9KTsKCiAgLyoqCiAgICogUmV0dXJucyBhIGBVcmlgIHRoYXQgZGlmZmVycyBmcm9tIHRoaXMgb25seSBpbiBub3QgaGF2aW5nIGEgZnJhZ21lbnQuCiAgICoKICAgKiBJZiB0aGlzIGBVcmlgIGRvZXMgbm90IGhhdmUgYSBmcmFnbWVudCwgaXQgaXMgaXRzZWxmIHJldHVybmVkLgogICAqLwogIFVyaSByZW1vdmVGcmFnbWVudCgpOwoKICAvKioKICAgKiBSZXNvbHZlIFtyZWZlcmVuY2VdIGFzIGFuIFVSSSByZWxhdGl2ZSB0byBgdGhpc2AuCiAgICoKICAgKiBGaXJzdCB0dXJuIFtyZWZlcmVuY2VdIGludG8gYSBVUkkgdXNpbmcgW1VyaS5wYXJzZV0uIFRoZW4gcmVzb2x2ZSB0aGUKICAgKiByZXN1bHRpbmcgVVJJIHJlbGF0aXZlIHRvIGB0aGlzYC4KICAgKgogICAqIFJldHVybnMgdGhlIHJlc29sdmVkIFVSSS4KICAgKgogICAqIFNlZSBbcmVzb2x2ZVVyaV0gZm9yIGRldGFpbHMuCiAgICovCiAgVXJpIHJlc29sdmUoU3RyaW5nIHJlZmVyZW5jZSk7CgogIC8qKgogICAqIFJlc29sdmUgW3JlZmVyZW5jZV0gYXMgYW4gVVJJIHJlbGF0aXZlIHRvIGB0aGlzYC4KICAgKgogICAqIFJldHVybnMgdGhlIHJlc29sdmVkIFVSSS4KICAgKgogICAqIFRoZSBhbGdvcml0aG0gIlRyYW5zZm9ybSBSZWZlcmVuY2UiIGZvciByZXNvbHZpbmcgYSByZWZlcmVuY2UgaXMgZGVzY3JpYmVkCiAgICogaW4gW1JGQy0zOTg2IFNlY3Rpb24gNV0oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTUgIlJGQy0xMTIzIikuCiAgICoKICAgKiBVcGRhdGVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgYmFzZSBVUkkgaXMganVzdCBhIHJlbGF0aXZlIHBhdGggLQogICAqIHRoYXQgaXM6IHdoZW4gaXQgaGFzIG5vIHNjaGVtZSBhbmQgbm8gYXV0aG9yaXR5IGFuZCB0aGUgcGF0aCBkb2VzIG5vdCBzdGFydAogICAqIHdpdGggYSBzbGFzaC4KICAgKiBJbiB0aGF0IGNhc2UsIHRoZSBwYXRocyBhcmUgY29tYmluZWQgd2l0aG91dCByZW1vdmluZyBsZWFkaW5nICIuLiIsIGFuZAogICAqIGFuIGVtcHR5IHBhdGggaXMgbm90IGNvbnZlcnRlZCB0byAiLyIuCiAgICovCiAgVXJpIHJlc29sdmVVcmkoVXJpIHJlZmVyZW5jZSk7CgogIC8qKgogICAqIFJldHVybnMgYSBVUkkgd2hlcmUgdGhlIHBhdGggaGFzIGJlZW4gbm9ybWFsaXplZC4KICAgKgogICAqIEEgbm9ybWFsaXplZCBwYXRoIGRvZXMgbm90IGNvbnRhaW4gYC5gIHNlZ21lbnRzIG9yIG5vbi1sZWFkaW5nIGAuLmAKICAgKiBzZWdtZW50cy4KICAgKiBPbmx5IGEgcmVsYXRpdmUgcGF0aCB3aXRoIG5vIHNjaGVtZSBvciBhdXRob3JpdHkgbWF5IGNvbnRhaW4KICAgKiBsZWFkaW5nIGAuLmAgc2VnbWVudHMsCiAgICogYSBwYXRoIHRoYXQgc3RhcnRzIHdpdGggYC9gIHdpbGwgYWxzbyBkcm9wIGFueSBsZWFkaW5nIGAuLmAgc2VnbWVudHMuCiAgICoKICAgKiBUaGlzIHVzZXMgdGhlIHNhbWUgbm9ybWFsaXphdGlvbiBzdHJhdGVneSBhcyBgbmV3IFVyaSgpLnJlc29sdmUodGhpcylgLgogICAqCiAgICogRG9lcyBub3QgY2hhbmdlIGFueSBwYXJ0IG9mIHRoZSBVUkkgZXhjZXB0IHRoZSBwYXRoLgogICAqCiAgICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgYFVyaWAgYWx3YXlzIG5vcm1hbGl6ZXMgcGF0aHMsIHNvIGNhbGxpbmcKICAgKiB0aGlzIGZ1bmN0aW9uIGhhcyBubyBlZmZlY3QuCiAgICovCiAgVXJpIG5vcm1hbGl6ZVBhdGgoKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBgVXJpYCBvYmplY3QgYnkgcGFyc2luZyBhIFVSSSBzdHJpbmcuCiAgICoKICAgKiBJZiBbc3RhcnRdIGFuZCBbZW5kXSBhcmUgcHJvdmlkZWQsIHRoZXkgbXVzdCBzcGVjaWZ5IGEgdmFsaWQgc3Vic3RyaW5nCiAgICogb2YgW3VyaV0sIGFuZCBvbmx5IHRoZSBzdWJzdHJpbmcgZnJvbSBgc3RhcnRgIHRvIGBlbmRgIGlzIHBhcnNlZCBhcyBhIFVSSS4KICAgKgogICAqIFRoZSBbdXJpXSBtdXN0IG5vdCBiZSBgbnVsbGAuCiAgICogSWYgdGhlIFt1cmldIHN0cmluZyBpcyBub3QgdmFsaWQgYXMgYSBVUkkgb3IgVVJJIHJlZmVyZW5jZSwKICAgKiBhIFtGb3JtYXRFeGNlcHRpb25dIGlzIHRocm93bi4KICAgKi8KICBzdGF0aWMgVXJpIHBhcnNlKFN0cmluZyB1cmksIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgLy8gVGhpcyBwYXJzaW5nIHdpbGwgbm90IHZhbGlkYXRlIHBlcmNlbnQtZW5jb2RpbmcsIElQdjYsIGV0Yy4KICAgIC8vIFdoZW4gZG9uZSBzcGxpdHRpbmcgaW50byBwYXJ0cywgaXQgd2lsbCBjYWxsLCBlLmcuLCBbX21ha2VGcmFnbWVudF0KICAgIC8vIHRvIGRvIHRoZSBmaW5hbCBwYXJzaW5nLgogICAgLy8KICAgIC8vIEltcG9ydGFudCBwYXJ0cyBvZiB0aGUgUkZDIDM5ODYgdXNlZCBoZXJlOgogICAgLy8gVVJJICAgICAgICAgICA9IHNjaGVtZSAiOiIgaGllci1wYXJ0IFsgIj8iIHF1ZXJ5IF0gWyAiIyIgZnJhZ21lbnQgXQogICAgLy8KICAgIC8vIGhpZXItcGFydCAgICAgPSAiLy8iIGF1dGhvcml0eSBwYXRoLWFiZW1wdHkKICAgIC8vICAgICAgICAgICAgICAgLyBwYXRoLWFic29sdXRlCiAgICAvLyAgICAgICAgICAgICAgIC8gcGF0aC1yb290bGVzcwogICAgLy8gICAgICAgICAgICAgICAvIHBhdGgtZW1wdHkKICAgIC8vCiAgICAvLyBVUkktcmVmZXJlbmNlID0gVVJJIC8gcmVsYXRpdmUtcmVmCiAgICAvLwogICAgLy8gYWJzb2x1dGUtVVJJICA9IHNjaGVtZSAiOiIgaGllci1wYXJ0IFsgIj8iIHF1ZXJ5IF0KICAgIC8vCiAgICAvLyByZWxhdGl2ZS1yZWYgID0gcmVsYXRpdmUtcGFydCBbICI/IiBxdWVyeSBdIFsgIiMiIGZyYWdtZW50IF0KICAgIC8vCiAgICAvLyByZWxhdGl2ZS1wYXJ0ID0gIi8vIiBhdXRob3JpdHkgcGF0aC1hYmVtcHR5CiAgICAvLyAgICAgICAgICAgICAgIC8gcGF0aC1hYnNvbHV0ZQogICAgLy8gICAgICAgICAgICAgICAvIHBhdGgtbm9zY2hlbWUKICAgIC8vICAgICAgICAgICAgICAgLyBwYXRoLWVtcHR5CiAgICAvLwogICAgLy8gc2NoZW1lICAgICAgICA9IEFMUEhBICooIEFMUEhBIC8gRElHSVQgLyAiKyIgLyAiLSIgLyAiLiIgKQogICAgLy8KICAgIC8vIGF1dGhvcml0eSAgICAgPSBbIHVzZXJpbmZvICJAIiBdIGhvc3QgWyAiOiIgcG9ydCBdCiAgICAvLyB1c2VyaW5mbyAgICAgID0gKiggdW5yZXNlcnZlZCAvIHBjdC1lbmNvZGVkIC8gc3ViLWRlbGltcyAvICI6IiApCiAgICAvLyBob3N0ICAgICAgICAgID0gSVAtbGl0ZXJhbCAvIElQdjRhZGRyZXNzIC8gcmVnLW5hbWUKICAgIC8vIElQLWxpdGVyYWwgICAgPSAiWyIgKCBJUHY2YWRkcmVzcyAvIElQdjZhZGRyeiAvIElQdkZ1dHVyZSApICJdIgogICAgLy8gSVB2NmFkZHJ6ICAgICA9IElQdjZhZGRyZXNzICIlMjUiIFpvbmVJRAogICAgLy8gWm9uZUlEICAgICAgICA9IDEqKCB1bnJlc2VydmVkIC8gcGN0LWVuY29kZWQgKQogICAgLy8gcG9ydCAgICAgICAgICA9ICpESUdJVAogICAgLy8gcmVnLW5hbWUgICAgICA9ICooIHVucmVzZXJ2ZWQgLyBwY3QtZW5jb2RlZCAvIHN1Yi1kZWxpbXMgKQogICAgLy8KICAgIC8vIHBhdGggICAgICAgICAgPSBwYXRoLWFiZW1wdHkgICAgOyBiZWdpbnMgd2l0aCAiLyIgb3IgaXMgZW1wdHkKICAgIC8vICAgICAgICAgICAgICAgLyBwYXRoLWFic29sdXRlICAgOyBiZWdpbnMgd2l0aCAiLyIgYnV0IG5vdCAiLy8iCiAgICAvLyAgICAgICAgICAgICAgIC8gcGF0aC1ub3NjaGVtZSAgIDsgYmVnaW5zIHdpdGggYSBub24tY29sb24gc2VnbWVudAogICAgLy8gICAgICAgICAgICAgICAvIHBhdGgtcm9vdGxlc3MgICA7IGJlZ2lucyB3aXRoIGEgc2VnbWVudAogICAgLy8gICAgICAgICAgICAgICAvIHBhdGgtZW1wdHkgICAgICA7IHplcm8gY2hhcmFjdGVycwogICAgLy8KICAgIC8vIHBhdGgtYWJlbXB0eSAgPSAqKCAiLyIgc2VnbWVudCApCiAgICAvLyBwYXRoLWFic29sdXRlID0gIi8iIFsgc2VnbWVudC1ueiAqKCAiLyIgc2VnbWVudCApIF0KICAgIC8vIHBhdGgtbm9zY2hlbWUgPSBzZWdtZW50LW56LW5jICooICIvIiBzZWdtZW50ICkKICAgIC8vIHBhdGgtcm9vdGxlc3MgPSBzZWdtZW50LW56ICooICIvIiBzZWdtZW50ICkKICAgIC8vIHBhdGgtZW1wdHkgICAgPSAwPHBjaGFyPgogICAgLy8KICAgIC8vIHNlZ21lbnQgICAgICAgPSAqcGNoYXIKICAgIC8vIHNlZ21lbnQtbnogICAgPSAxKnBjaGFyCiAgICAvLyBzZWdtZW50LW56LW5jID0gMSooIHVucmVzZXJ2ZWQgLyBwY3QtZW5jb2RlZCAvIHN1Yi1kZWxpbXMgLyAiQCIgKQogICAgLy8gICAgICAgICAgICAgICA7IG5vbi16ZXJvLWxlbmd0aCBzZWdtZW50IHdpdGhvdXQgYW55IGNvbG9uICI6IgogICAgLy8KICAgIC8vIHBjaGFyICAgICAgICAgPSB1bnJlc2VydmVkIC8gcGN0LWVuY29kZWQgLyBzdWItZGVsaW1zIC8gIjoiIC8gIkAiCiAgICAvLwogICAgLy8gcXVlcnkgICAgICAgICA9ICooIHBjaGFyIC8gIi8iIC8gIj8iICkKICAgIC8vCiAgICAvLyBmcmFnbWVudCAgICAgID0gKiggcGNoYXIgLyAiLyIgLyAiPyIgKQogICAgZW5kID8/PSB1cmkubGVuZ3RoOwoKICAgIC8vIFNwZWNpYWwgY2FzZSBkYXRhOlVSSXMuIElnbm9yZSBjYXNlIHdoZW4gdGVzdGluZy4KICAgIGlmIChlbmQgPj0gc3RhcnQgKyA1KSB7CiAgICAgIGludCBkYXRhRGVsdGEgPSBfc3RhcnRzV2l0aERhdGEodXJpLCBzdGFydCk7CiAgICAgIGlmIChkYXRhRGVsdGEgPT0gMCkgewogICAgICAgIC8vIFRoZSBjYXNlIGlzIHJpZ2h0LgogICAgICAgIGlmIChzdGFydCA+IDAgfHwgZW5kIDwgdXJpLmxlbmd0aCkgdXJpID0gdXJpLnN1YnN0cmluZyhzdGFydCwgZW5kKTsKICAgICAgICByZXR1cm4gVXJpRGF0YS5fcGFyc2UodXJpLCA1LCBudWxsKS51cmk7CiAgICAgIH0gZWxzZSBpZiAoZGF0YURlbHRhID09IDB4MjApIHsKICAgICAgICByZXR1cm4gVXJpRGF0YS5fcGFyc2UodXJpLnN1YnN0cmluZyhzdGFydCArIDUsIGVuZCksIDAsIG51bGwpLnVyaTsKICAgICAgfQogICAgICAvLyBPdGhlcndpc2UgdGhlIFVSSSBkb2Vzbid0IHN0YXJ0IHdpdGggImRhdGE6IiBvciBhbnkgY2FzZSB2YXJpYW50IG9mIGl0LgogICAgfQoKICAgIC8vIFRoZSBmb2xsb3dpbmcgaW5kZXgtbm9ybWFsaXphdGlvbiBiZWxvbmdzIHdpdGggdGhlIHNjYW5uaW5nLCBidXQgaXMKICAgIC8vIGVhc2llciB0byBkbyBoZXJlIGJlY2F1c2Ugd2UgYWxyZWFkeSBoYXZlIGV4dHJhY3RlZCB2YXJpYWJsZXMgZnJvbSB0aGUKICAgIC8vIGluZGljZXMgbGlzdC4KICAgIHZhciBpbmRpY2VzID0gTGlzdDxpbnQ+KDgpOwoKICAgIC8vIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZWFjaCBwb3NpdGlvbi4KICAgIC8vIFRoZSB2YWx1ZSB3aWxsIGVpdGhlciBiZSBjb3JyZWN0IGluIHNvbWUgY2FzZXMgd2hlcmUgaXQgaXNuJ3Qgc2V0CiAgICAvLyBieSB0aGUgc2Nhbm5lciwgb3IgaXQgaXMgY2xlYXJseSByZWNvZ25pemFibGUgYXMgYW4gdW5zZXQgdmFsdWUuCiAgICBpbmRpY2VzCiAgICAgIC4uWzBdID0gMAogICAgICAuLltfc2NoZW1lRW5kSW5kZXhdID0gc3RhcnQgLSAxCiAgICAgIC4uW19ob3N0U3RhcnRJbmRleF0gPSBzdGFydCAtIDEKICAgICAgLi5bX25vdFNpbXBsZUluZGV4XSA9IHN0YXJ0IC0gMQogICAgICAuLltfcG9ydFN0YXJ0SW5kZXhdID0gc3RhcnQKICAgICAgLi5bX3BhdGhTdGFydEluZGV4XSA9IHN0YXJ0CiAgICAgIC4uW19xdWVyeVN0YXJ0SW5kZXhdID0gZW5kCiAgICAgIC4uW19mcmFnbWVudFN0YXJ0SW5kZXhdID0gZW5kOwogICAgdmFyIHN0YXRlID0gX3NjYW4odXJpLCBzdGFydCwgZW5kLCBfdXJpU3RhcnQsIGluZGljZXMpOwogICAgLy8gU29tZSBzdGF0ZXMgdGhhdCBzaG91bGQgYmUgbm9uLXNpbXBsZSwgYnV0IHRoZSBVUkkgZW5kZWQgZWFybHkuCiAgICAvLyBQYXRocyB0aGF0IGVuZCBhdCBhICIuLiIgbXVzdCBiZSBub3JtYWxpemVkIHRvIGVuZCBpbiAiLi4vIi4KICAgIGlmIChzdGF0ZSA+PSBfbm9uU2ltcGxlRW5kU3RhdGVzKSB7CiAgICAgIGluZGljZXNbX25vdFNpbXBsZUluZGV4XSA9IGVuZDsKICAgIH0KICAgIGludCBzY2hlbWVFbmQgPSBpbmRpY2VzW19zY2hlbWVFbmRJbmRleF07CiAgICBpZiAoc2NoZW1lRW5kID49IHN0YXJ0KSB7CiAgICAgIC8vIFJlc2NhbiB0aGUgc2NoZW1lIHBhcnQgbm93IHRoYXQgd2Uga25vdyBpdCdzIG5vdCBhIHBhdGguCiAgICAgIHN0YXRlID0gX3NjYW4odXJpLCBzdGFydCwgc2NoZW1lRW5kLCBfc2NoZW1lU3RhcnQsIGluZGljZXMpOwogICAgICBpZiAoc3RhdGUgPT0gX3NjaGVtZVN0YXJ0KSB7CiAgICAgICAgLy8gRW1wdHkgc2NoZW1lLgogICAgICAgIGluZGljZXNbX25vdFNpbXBsZUluZGV4XSA9IHNjaGVtZUVuZDsKICAgICAgfQogICAgfQogICAgLy8gVGhlIHJldHVybmVkIHBvc2l0aW9ucyBhcmUgbGltaXRlZCBieSB0aGUgc2Nhbm5lcnMgYWJpbGl0eSB0byB3cml0ZSBvbmx5CiAgICAvLyBvbmUgcG9zaXRpb24gcGVyIGNoYXJhY3RlciwgYW5kIG9ubHkgdGhlIGN1cnJlbnQgcG9zaXRpb24uCiAgICAvLyBTY2FubmluZyBmcm9tIGxlZnQgdG8gcmlnaHQsIHdlIG9ubHkga25vdyB3aGV0aGVyIHNvbWV0aGluZyBpcyBhIHNjaGVtZQogICAgLy8gb3IgYSBwYXRoIHdoZW4gd2Ugc2VlIGEgYDpgIG9yIGAvYCwgYW5kIGxpa2V3aXNlIHdlIG9ubHkga25vdyBpZiB0aGUgZmlyc3QKICAgIC8vIGAvYCBpcyBwYXJ0IG9mIHRoZSBwYXRoIG9yIGlzIGxlYWRpbmcgYW4gYXV0aG9yaXR5IGNvbXBvbmVudCB3aGVuIHdlIHNlZQogICAgLy8gdGhlIG5leHQgY2hhcmFjdGVyLgoKICAgIGludCBob3N0U3RhcnQgPSBpbmRpY2VzW19ob3N0U3RhcnRJbmRleF0gKyAxOwogICAgaW50IHBvcnRTdGFydCA9IGluZGljZXNbX3BvcnRTdGFydEluZGV4XTsKICAgIGludCBwYXRoU3RhcnQgPSBpbmRpY2VzW19wYXRoU3RhcnRJbmRleF07CiAgICBpbnQgcXVlcnlTdGFydCA9IGluZGljZXNbX3F1ZXJ5U3RhcnRJbmRleF07CiAgICBpbnQgZnJhZ21lbnRTdGFydCA9IGluZGljZXNbX2ZyYWdtZW50U3RhcnRJbmRleF07CgogICAgLy8gV2UgbWF5IGRpc2NvdmVyIHNjaGVtZSB3aGlsZSBoYW5kbGluZyBzcGVjaWFsIGNhc2VzLgogICAgU3RyaW5nIHNjaGVtZTsKCiAgICAvLyBEZXJpdmUgc29tZSBwb3NpdGlvbnMgdGhhdCB3ZXJlbid0IHNldCB0byBub3JtYWxpemUgdGhlIGluZGljZXMuCiAgICBpZiAoZnJhZ21lbnRTdGFydCA8IHF1ZXJ5U3RhcnQpIHF1ZXJ5U3RhcnQgPSBmcmFnbWVudFN0YXJ0OwogICAgLy8gSWYgcGF0aFN0YXJ0IGlzbid0IHNldCAoaXQncyBiZWZvcmUgc2NoZW1lIGVuZCBvciBob3N0IHN0YXJ0KSwgdGhlbgogICAgLy8gdGhlIHBhdGggaXMgZW1wdHksIG9yIHRoZXJlIGlzIG5vIGF1dGhvcml0eSBwYXJ0IGFuZCB0aGUgcGF0aAogICAgLy8gc3RhcnRzIHdpdGggYSBub24tc2ltcGxlIGNoYXJhY3Rlci4KICAgIGlmIChwYXRoU3RhcnQgPCBob3N0U3RhcnQpIHsKICAgICAgLy8gVGhlcmUgaXMgYW4gYXV0aG9yaXR5LCBidXQgbm8gcGF0aC4gVGhlIHBhdGggd291bGQgc3RhcnQgd2l0aCBgL2AKICAgICAgLy8gaWYgaXQgd2FzIHRoZXJlLgogICAgICBwYXRoU3RhcnQgPSBxdWVyeVN0YXJ0OwogICAgfSBlbHNlIGlmIChwYXRoU3RhcnQgPD0gc2NoZW1lRW5kKSB7CiAgICAgIC8vIFRoZXJlIGlzIGEgc2NoZW1lLCBidXQgbm8gYXV0aG9yaXR5LgogICAgICBwYXRoU3RhcnQgPSBzY2hlbWVFbmQgKyAxOwogICAgfQogICAgLy8gSWYgdGhlcmUgaXMgYW4gYXV0aG9yaXR5IHdpdGggbm8gcG9ydCwgc2V0IHRoZSBwb3J0IHBvc2l0aW9uCiAgICAvLyB0byBiZSBhdCB0aGUgZW5kIG9mIHRoZSBhdXRob3JpdHkgKGVxdWFsIHRvIHBhdGhTdGFydCkuCiAgICAvLyBUaGlzIGFsc28gaGFuZGxlcyBhICI6IiBpbiBhIHVzZXItaW5mbyBjb21wb25lbnQgaW5jb3JyZWN0bHkgc2V0dGluZwogICAgLy8gdGhlIHBvcnQgc3RhcnQgcG9zaXRpb24uCiAgICBpZiAocG9ydFN0YXJ0IDwgaG9zdFN0YXJ0KSBwb3J0U3RhcnQgPSBwYXRoU3RhcnQ7CgogICAgYXNzZXJ0KGhvc3RTdGFydCA9PSBzdGFydCB8fCBzY2hlbWVFbmQgPD0gaG9zdFN0YXJ0KTsKICAgIGFzc2VydChob3N0U3RhcnQgPD0gcG9ydFN0YXJ0KTsKICAgIGFzc2VydChzY2hlbWVFbmQgPD0gcGF0aFN0YXJ0KTsKICAgIGFzc2VydChwb3J0U3RhcnQgPD0gcGF0aFN0YXJ0KTsKICAgIGFzc2VydChwYXRoU3RhcnQgPD0gcXVlcnlTdGFydCk7CiAgICBhc3NlcnQocXVlcnlTdGFydCA8PSBmcmFnbWVudFN0YXJ0KTsKCiAgICBib29sIGlzU2ltcGxlID0gaW5kaWNlc1tfbm90U2ltcGxlSW5kZXhdIDwgc3RhcnQ7CgogICAgaWYgKGlzU2ltcGxlKSB7CiAgICAgIC8vIENoZWNrL2RvIG5vcm1hbGl6YXRpb25zIHRoYXQgd2VyZW4ndCBkZXRlY3RlZCBieSB0aGUgc2Nhbm5lci4KICAgICAgLy8gVGhpcyBpbmNsdWRlcyByZW1vdmFsIG9mIGVtcHR5IHBvcnQgb3IgdXNlckluZm8sCiAgICAgIC8vIG9yIHNjaGVtZSBzcGVjaWZpYyBwb3J0IGFuZCBwYXRoIG5vcm1hbGl6YXRpb25zLgogICAgICBpZiAoaG9zdFN0YXJ0ID4gc2NoZW1lRW5kICsgMykgewogICAgICAgIC8vIEFsd2F5cyBiZSBub24tc2ltcGxlIGlmIFVSSSBjb250YWlucyB1c2VyLWluZm8uCiAgICAgICAgLy8gVGhlIHNjYW5uZXIgZG9lc24ndCBzZXQgdGhlIG5vdC1zaW1wbGUgcG9zaXRpb24gaW4gdGhpcyBjYXNlIGJlY2F1c2UKICAgICAgICAvLyBpdCdzIHNldHRpbmcgdGhlIGhvc3Qtc3RhcnQgcG9zaXRpb24gaW5zdGVhZC4KICAgICAgICBpc1NpbXBsZSA9IGZhbHNlOwogICAgICB9IGVsc2UgaWYgKHBvcnRTdGFydCA+IHN0YXJ0ICYmIHBvcnRTdGFydCArIDEgPT0gcGF0aFN0YXJ0KSB7CiAgICAgICAgLy8gSWYgdGhlIHBvcnQgaXMgZW1wdHksIGl0IHNob3VsZCBiZSBvbWl0dGVkLgogICAgICAgIC8vIFBhdGhvbG9naWNhbCBjYXNlLCBkb24ndCBib3RoZXIgY29ycmVjdGluZyBpdC4KICAgICAgICBpc1NpbXBsZSA9IGZhbHNlOwogICAgICB9IGVsc2UgaWYgKHF1ZXJ5U3RhcnQgPCBlbmQgJiYKICAgICAgICAgICAgICAocXVlcnlTdGFydCA9PSBwYXRoU3RhcnQgKyAyICYmCiAgICAgICAgICAgICAgICAgIHVyaS5zdGFydHNXaXRoKCIuLiIsIHBhdGhTdGFydCkpIHx8CiAgICAgICAgICAocXVlcnlTdGFydCA+IHBhdGhTdGFydCArIDIgJiYKICAgICAgICAgICAgICB1cmkuc3RhcnRzV2l0aCgiLy4uIiwgcXVlcnlTdGFydCAtIDMpKSkgewogICAgICAgIC8vIFRoZSBwYXRoIGVuZHMgaW4gYSAiLi4iIHNlZ21lbnQuIFRoaXMgc2hvdWxkIGJlIG5vcm1hbGl6ZWQgdG8gIi4uLyIuCiAgICAgICAgLy8gV2UgZGlkbid0IGRldGVjdCB0aGlzIHdoaWxlIHNjYW5uaW5nIGJlY2F1c2UgYSBxdWVyeSBvciBmcmFnbWVudCB3YXMKICAgICAgICAvLyBkZXRlY3RlZCBhdCB0aGUgc2FtZSB0aW1lICh3aGljaCBpcyB3aHkgd2Ugb25seSBuZWVkIHRvIGNoZWNrIHRoaXMKICAgICAgICAvLyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgYWZ0ZXIgdGhlIHBhdGgpLgogICAgICAgIGlzU2ltcGxlID0gZmFsc2U7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gVGhlcmUgYXJlIGEgZmV3IHNjaGVtZS1iYXNlZCBub3JtYWxpemF0aW9ucyB0aGF0CiAgICAgICAgLy8gdGhlIHNjYW5uZXIgY291bGRuJ3QgY2hlY2suCiAgICAgICAgLy8gVGhhdCBtZWFucyB0aGF0IHRoZSBpbnB1dCBpcyB2ZXJ5IGNsb3NlIHRvIHNpbXBsZSwgc28ganVzdCBkbwogICAgICAgIC8vIHRoZSBub3JtYWxpemF0aW9ucy4KICAgICAgICBpZiAoc2NoZW1lRW5kID09IHN0YXJ0ICsgNCkgewogICAgICAgICAgLy8gRG8gc2NoZW1lIGJhc2VkIG5vcm1hbGl6YXRpb25zIGZvciBmaWxlLCBodHRwLgogICAgICAgICAgaWYgKHVyaS5zdGFydHNXaXRoKCJmaWxlIiwgc3RhcnQpKSB7CiAgICAgICAgICAgIHNjaGVtZSA9ICJmaWxlIjsKICAgICAgICAgICAgaWYgKGhvc3RTdGFydCA8PSBzdGFydCkgewogICAgICAgICAgICAgIC8vIEZpbGUgVVJJcyBzaG91bGQgaGF2ZSBhbiBhdXRob3JpdHkuCiAgICAgICAgICAgICAgLy8gUGF0aHMgYWZ0ZXIgYW4gYXV0aG9yaXR5IHNob3VsZCBiZSBhYnNvbHV0ZS4KICAgICAgICAgICAgICBTdHJpbmcgc2NoZW1lQXV0aCA9ICJmaWxlOi8vIjsKICAgICAgICAgICAgICBpbnQgZGVsdGEgPSAyOwogICAgICAgICAgICAgIGlmICghdXJpLnN0YXJ0c1dpdGgoIi8iLCBwYXRoU3RhcnQpKSB7CiAgICAgICAgICAgICAgICBzY2hlbWVBdXRoID0gImZpbGU6Ly8vIjsKICAgICAgICAgICAgICAgIGRlbHRhID0gMzsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdXJpID0gc2NoZW1lQXV0aCArIHVyaS5zdWJzdHJpbmcocGF0aFN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgIHNjaGVtZUVuZCAtPSBzdGFydDsKICAgICAgICAgICAgICBob3N0U3RhcnQgPSA3OwogICAgICAgICAgICAgIHBvcnRTdGFydCA9IDc7CiAgICAgICAgICAgICAgcGF0aFN0YXJ0ID0gNzsKICAgICAgICAgICAgICBxdWVyeVN0YXJ0ICs9IGRlbHRhIC0gc3RhcnQ7CiAgICAgICAgICAgICAgZnJhZ21lbnRTdGFydCArPSBkZWx0YSAtIHN0YXJ0OwogICAgICAgICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICAgICAgICBlbmQgPSB1cmkubGVuZ3RoOwogICAgICAgICAgICB9IGVsc2UgaWYgKHBhdGhTdGFydCA9PSBxdWVyeVN0YXJ0KSB7CiAgICAgICAgICAgICAgLy8gVXJpIGhhcyBhdXRob3JpdHkgYW5kIGVtcHR5IHBhdGguIEFkZCAiLyIgYXMgcGF0aC4KICAgICAgICAgICAgICBpZiAoc3RhcnQgPT0gMCAmJiBlbmQgPT0gdXJpLmxlbmd0aCkgewogICAgICAgICAgICAgICAgdXJpID0gdXJpLnJlcGxhY2VSYW5nZShwYXRoU3RhcnQsIHF1ZXJ5U3RhcnQsICIvIik7CiAgICAgICAgICAgICAgICBxdWVyeVN0YXJ0ICs9IDE7CiAgICAgICAgICAgICAgICBmcmFnbWVudFN0YXJ0ICs9IDE7CiAgICAgICAgICAgICAgICBlbmQgKz0gMTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdXJpID0gIiR7dXJpLnN1YnN0cmluZyhzdGFydCwgcGF0aFN0YXJ0KX0vIgogICAgICAgICAgICAgICAgICAgICIke3VyaS5zdWJzdHJpbmcocXVlcnlTdGFydCwgZW5kKX0iOwogICAgICAgICAgICAgICAgc2NoZW1lRW5kIC09IHN0YXJ0OwogICAgICAgICAgICAgICAgaG9zdFN0YXJ0IC09IHN0YXJ0OwogICAgICAgICAgICAgICAgcG9ydFN0YXJ0IC09IHN0YXJ0OwogICAgICAgICAgICAgICAgcGF0aFN0YXJ0IC09IHN0YXJ0OwogICAgICAgICAgICAgICAgcXVlcnlTdGFydCArPSAxIC0gc3RhcnQ7CiAgICAgICAgICAgICAgICBmcmFnbWVudFN0YXJ0ICs9IDEgLSBzdGFydDsKICAgICAgICAgICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICAgICAgICAgIGVuZCA9IHVyaS5sZW5ndGg7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKHVyaS5zdGFydHNXaXRoKCJodHRwIiwgc3RhcnQpKSB7CiAgICAgICAgICAgIHNjaGVtZSA9ICJodHRwIjsKICAgICAgICAgICAgLy8gSFRUUCBVUklzIHNob3VsZCBub3QgaGF2ZSBhbiBleHBsaWNpdCBwb3J0IG9mIDgwLgogICAgICAgICAgICBpZiAocG9ydFN0YXJ0ID4gc3RhcnQgJiYKICAgICAgICAgICAgICAgIHBvcnRTdGFydCArIDMgPT0gcGF0aFN0YXJ0ICYmCiAgICAgICAgICAgICAgICB1cmkuc3RhcnRzV2l0aCgiODAiLCBwb3J0U3RhcnQgKyAxKSkgewogICAgICAgICAgICAgIGlmIChzdGFydCA9PSAwICYmIGVuZCA9PSB1cmkubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICB1cmkgPSB1cmkucmVwbGFjZVJhbmdlKHBvcnRTdGFydCwgcGF0aFN0YXJ0LCAiIik7CiAgICAgICAgICAgICAgICBwYXRoU3RhcnQgLT0gMzsKICAgICAgICAgICAgICAgIHF1ZXJ5U3RhcnQgLT0gMzsKICAgICAgICAgICAgICAgIGZyYWdtZW50U3RhcnQgLT0gMzsKICAgICAgICAgICAgICAgIGVuZCAtPSAzOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB1cmkgPSB1cmkuc3Vic3RyaW5nKHN0YXJ0LCBwb3J0U3RhcnQpICsKICAgICAgICAgICAgICAgICAgICB1cmkuc3Vic3RyaW5nKHBhdGhTdGFydCwgZW5kKTsKICAgICAgICAgICAgICAgIHNjaGVtZUVuZCAtPSBzdGFydDsKICAgICAgICAgICAgICAgIGhvc3RTdGFydCAtPSBzdGFydDsKICAgICAgICAgICAgICAgIHBvcnRTdGFydCAtPSBzdGFydDsKICAgICAgICAgICAgICAgIHBhdGhTdGFydCAtPSAzICsgc3RhcnQ7CiAgICAgICAgICAgICAgICBxdWVyeVN0YXJ0IC09IDMgKyBzdGFydDsKICAgICAgICAgICAgICAgIGZyYWdtZW50U3RhcnQgLT0gMyArIHN0YXJ0OwogICAgICAgICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgICAgICAgICAgZW5kID0gdXJpLmxlbmd0aDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHNjaGVtZUVuZCA9PSBzdGFydCArIDUgJiYgdXJpLnN0YXJ0c1dpdGgoImh0dHBzIiwgc3RhcnQpKSB7CiAgICAgICAgICBzY2hlbWUgPSAiaHR0cHMiOwogICAgICAgICAgLy8gSFRUUFMgVVJJcyBzaG91bGQgbm90IGhhdmUgYW4gZXhwbGljaXQgcG9ydCBvZiA0NDMuCiAgICAgICAgICBpZiAocG9ydFN0YXJ0ID4gc3RhcnQgJiYKICAgICAgICAgICAgICBwb3J0U3RhcnQgKyA0ID09IHBhdGhTdGFydCAmJgogICAgICAgICAgICAgIHVyaS5zdGFydHNXaXRoKCI0NDMiLCBwb3J0U3RhcnQgKyAxKSkgewogICAgICAgICAgICBpZiAoc3RhcnQgPT0gMCAmJiBlbmQgPT0gdXJpLmxlbmd0aCkgewogICAgICAgICAgICAgIHVyaSA9IHVyaS5yZXBsYWNlUmFuZ2UocG9ydFN0YXJ0LCBwYXRoU3RhcnQsICIiKTsKICAgICAgICAgICAgICBwYXRoU3RhcnQgLT0gNDsKICAgICAgICAgICAgICBxdWVyeVN0YXJ0IC09IDQ7CiAgICAgICAgICAgICAgZnJhZ21lbnRTdGFydCAtPSA0OwogICAgICAgICAgICAgIGVuZCAtPSAzOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHVyaSA9IHVyaS5zdWJzdHJpbmcoc3RhcnQsIHBvcnRTdGFydCkgKwogICAgICAgICAgICAgICAgICB1cmkuc3Vic3RyaW5nKHBhdGhTdGFydCwgZW5kKTsKICAgICAgICAgICAgICBzY2hlbWVFbmQgLT0gc3RhcnQ7CiAgICAgICAgICAgICAgaG9zdFN0YXJ0IC09IHN0YXJ0OwogICAgICAgICAgICAgIHBvcnRTdGFydCAtPSBzdGFydDsKICAgICAgICAgICAgICBwYXRoU3RhcnQgLT0gNCArIHN0YXJ0OwogICAgICAgICAgICAgIHF1ZXJ5U3RhcnQgLT0gNCArIHN0YXJ0OwogICAgICAgICAgICAgIGZyYWdtZW50U3RhcnQgLT0gNCArIHN0YXJ0OwogICAgICAgICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICAgICAgICBlbmQgPSB1cmkubGVuZ3RoOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgaWYgKGlzU2ltcGxlKSB7CiAgICAgIGlmIChzdGFydCA+IDAgfHwgZW5kIDwgdXJpLmxlbmd0aCkgewogICAgICAgIHVyaSA9IHVyaS5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7CiAgICAgICAgc2NoZW1lRW5kIC09IHN0YXJ0OwogICAgICAgIGhvc3RTdGFydCAtPSBzdGFydDsKICAgICAgICBwb3J0U3RhcnQgLT0gc3RhcnQ7CiAgICAgICAgcGF0aFN0YXJ0IC09IHN0YXJ0OwogICAgICAgIHF1ZXJ5U3RhcnQgLT0gc3RhcnQ7CiAgICAgICAgZnJhZ21lbnRTdGFydCAtPSBzdGFydDsKICAgICAgfQogICAgICByZXR1cm4gX1NpbXBsZVVyaSh1cmksIHNjaGVtZUVuZCwgaG9zdFN0YXJ0LCBwb3J0U3RhcnQsIHBhdGhTdGFydCwKICAgICAgICAgIHF1ZXJ5U3RhcnQsIGZyYWdtZW50U3RhcnQsIHNjaGVtZSk7CiAgICB9CgogICAgcmV0dXJuIF9Vcmkubm90U2ltcGxlKHVyaSwgc3RhcnQsIGVuZCwgc2NoZW1lRW5kLCBob3N0U3RhcnQsIHBvcnRTdGFydCwKICAgICAgICBwYXRoU3RhcnQsIHF1ZXJ5U3RhcnQsIGZyYWdtZW50U3RhcnQsIHNjaGVtZSk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IGBVcmlgIG9iamVjdCBieSBwYXJzaW5nIGEgVVJJIHN0cmluZy4KICAgKgogICAqIElmIFtzdGFydF0gYW5kIFtlbmRdIGFyZSBwcm92aWRlZCwgdGhleSBtdXN0IHNwZWNpZnkgYSB2YWxpZCBzdWJzdHJpbmcKICAgKiBvZiBbdXJpXSwgYW5kIG9ubHkgdGhlIHN1YnN0cmluZyBmcm9tIGBzdGFydGAgdG8gYGVuZGAgaXMgcGFyc2VkIGFzIGEgVVJJLgogICAqIFRoZSBbdXJpXSBtdXN0IG5vdCBiZSBgbnVsbGAuCiAgICoKICAgKiBSZXR1cm5zIGBudWxsYCBpZiB0aGUgW3VyaV0gc3RyaW5nIGlzIG5vdCB2YWxpZCBhcyBhIFVSSSBvciBVUkkgcmVmZXJlbmNlLgogICAqLwogIHN0YXRpYyBVcmkgdHJ5UGFyc2UoU3RyaW5nIHVyaSwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSB7CiAgICAvLyBUT0RPOiBPcHRpbWl6ZSB0byBhdm9pZCB0aHJvd2luZy1hbmQtcmVjYXRjaGluZy4KICAgIHRyeSB7CiAgICAgIHJldHVybiBwYXJzZSh1cmksIHN0YXJ0LCBlbmQpOwogICAgfSBvbiBGb3JtYXRFeGNlcHRpb24gewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIC8qKgogICAqIEVuY29kZSB0aGUgc3RyaW5nIFtjb21wb25lbnRdIHVzaW5nIHBlcmNlbnQtZW5jb2RpbmcgdG8gbWFrZSBpdAogICAqIHNhZmUgZm9yIGxpdGVyYWwgdXNlIGFzIGEgVVJJIGNvbXBvbmVudC4KICAgKgogICAqIEFsbCBjaGFyYWN0ZXJzIGV4Y2VwdCB1cHBlcmNhc2UgYW5kIGxvd2VyY2FzZSBsZXR0ZXJzLCBkaWdpdHMgYW5kCiAgICogdGhlIGNoYXJhY3RlcnMgYC1fLiF+KicoKWAgYXJlIHBlcmNlbnQtZW5jb2RlZC4gVGhpcyBpcyB0aGUKICAgKiBzZXQgb2YgY2hhcmFjdGVycyBzcGVjaWZpZWQgaW4gUkZDIDIzOTYgYW5kIHRoZSB3aGljaCBpcwogICAqIHNwZWNpZmllZCBmb3IgdGhlIGVuY29kZVVyaUNvbXBvbmVudCBpbiBFQ01BLTI2MiB2ZXJzaW9uIDUuMS4KICAgKgogICAqIFdoZW4gbWFudWFsbHkgZW5jb2RpbmcgcGF0aCBzZWdtZW50cyBvciBxdWVyeSBjb21wb25lbnRzIHJlbWVtYmVyCiAgICogdG8gZW5jb2RlIGVhY2ggcGFydCBzZXBhcmF0ZWx5IGJlZm9yZSBidWlsZGluZyB0aGUgcGF0aCBvciBxdWVyeQogICAqIHN0cmluZy4KICAgKgogICAqIEZvciBlbmNvZGluZyB0aGUgcXVlcnkgcGFydCBjb25zaWRlciB1c2luZwogICAqIFtlbmNvZGVRdWVyeUNvbXBvbmVudF0uCiAgICoKICAgKiBUbyBhdm9pZCB0aGUgbmVlZCBmb3IgZXhwbGljaXRseSBlbmNvZGluZyB1c2UgdGhlIFtwYXRoU2VnbWVudHNdCiAgICogYW5kIFtxdWVyeVBhcmFtZXRlcnNdIG9wdGlvbmFsIG5hbWVkIGFyZ3VtZW50cyB3aGVuIGNvbnN0cnVjdGluZwogICAqIGEgW1VyaV0uCiAgICovCiAgc3RhdGljIFN0cmluZyBlbmNvZGVDb21wb25lbnQoU3RyaW5nIGNvbXBvbmVudCkgewogICAgcmV0dXJuIF9VcmkuX3VyaUVuY29kZShfVXJpLl91bnJlc2VydmVkMjM5NlRhYmxlLCBjb21wb25lbnQsIHV0ZjgsIGZhbHNlKTsKICB9CgogIC8qKgogICAqIEVuY29kZSB0aGUgc3RyaW5nIFtjb21wb25lbnRdIGFjY29yZGluZyB0byB0aGUgSFRNTCA0LjAxIHJ1bGVzCiAgICogZm9yIGVuY29kaW5nIHRoZSBwb3N0aW5nIG9mIGEgSFRNTCBmb3JtIGFzIGEgcXVlcnkgc3RyaW5nCiAgICogY29tcG9uZW50LgogICAqCiAgICogRW5jb2RlIHRoZSBzdHJpbmcgW2NvbXBvbmVudF0gYWNjb3JkaW5nIHRvIHRoZSBIVE1MIDQuMDEgcnVsZXMKICAgKiBmb3IgZW5jb2RpbmcgdGhlIHBvc3Rpbmcgb2YgYSBIVE1MIGZvcm0gYXMgYSBxdWVyeSBzdHJpbmcKICAgKiBjb21wb25lbnQuCgogICAqIFRoZSBjb21wb25lbnQgaXMgZmlyc3QgZW5jb2RlZCB0byBieXRlcyB1c2luZyBbZW5jb2RpbmddLgogICAqIFRoZSBkZWZhdWx0IGlzIHRvIHVzZSBbdXRmOF0gZW5jb2RpbmcsIHdoaWNoIHByZXNlcnZlcyBhbGwKICAgKiB0aGUgY2hhcmFjdGVycyB0aGF0IGRvbid0IG5lZWQgZW5jb2RpbmcuCgogICAqIFRoZW4gdGhlIHJlc3VsdGluZyBieXRlcyBhcmUgInBlcmNlbnQtZW5jb2RlZCIuIFRoaXMgdHJhbnNmb3JtcwogICAqIHNwYWNlcyAoVSswMDIwKSB0byBhIHBsdXMgc2lnbiAoJysnKSBhbmQgYWxsIGJ5dGVzIHRoYXQgYXJlIG5vdAogICAqIHRoZSBBU0NJSSBkZWNpbWFsIGRpZ2l0cywgbGV0dGVycyBvciBvbmUgb2YgJy0uX34nIGFyZSB3cml0dGVuIGFzCiAgICogYSBwZXJjZW50IHNpZ24gJyUnIGZvbGxvd2VkIGJ5IHRoZSB0d28tZGlnaXQgaGV4YWRlY2ltYWwKICAgKiByZXByZXNlbnRhdGlvbiBvZiB0aGUgYnl0ZS4KCiAgICogTm90ZSB0aGF0IHRoZSBzZXQgb2YgY2hhcmFjdGVycyB3aGljaCBhcmUgcGVyY2VudC1lbmNvZGVkIGlzIGEKICAgKiBzdXBlcnNldCBvZiB3aGF0IEhUTUwgNC4wMSByZXF1aXJlcywgc2luY2UgaXQgcmVmZXJzIHRvIFJGQyAxNzM4CiAgICogZm9yIHJlc2VydmVkIGNoYXJhY3RlcnMuCiAgICoKICAgKiBXaGVuIG1hbnVhbGx5IGVuY29kaW5nIHF1ZXJ5IGNvbXBvbmVudHMgcmVtZW1iZXIgdG8gZW5jb2RlIGVhY2gKICAgKiBwYXJ0IHNlcGFyYXRlbHkgYmVmb3JlIGJ1aWxkaW5nIHRoZSBxdWVyeSBzdHJpbmcuCiAgICoKICAgKiBUbyBhdm9pZCB0aGUgbmVlZCBmb3IgZXhwbGljaXRseSBlbmNvZGluZyB0aGUgcXVlcnkgdXNlIHRoZQogICAqIFtxdWVyeVBhcmFtZXRlcnNdIG9wdGlvbmFsIG5hbWVkIGFyZ3VtZW50cyB3aGVuIGNvbnN0cnVjdGluZyBhCiAgICogW1VyaV0uCiAgICoKICAgKiBTZWUgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQwMS9pbnRlcmFjdC9mb3Jtcy5odG1sI2gtMTcuMTMuNC4yIGZvciBtb3JlCiAgICogZGV0YWlscy4KICAgKi8KICBzdGF0aWMgU3RyaW5nIGVuY29kZVF1ZXJ5Q29tcG9uZW50KFN0cmluZyBjb21wb25lbnQsCiAgICAgIHtFbmNvZGluZyBlbmNvZGluZyA9IHV0Zjh9KSB7CiAgICByZXR1cm4gX1VyaS5fdXJpRW5jb2RlKF9VcmkuX3VucmVzZXJ2ZWRUYWJsZSwgY29tcG9uZW50LCBlbmNvZGluZywgdHJ1ZSk7CiAgfQoKICAvKioKICAgKiBEZWNvZGVzIHRoZSBwZXJjZW50LWVuY29kaW5nIGluIFtlbmNvZGVkQ29tcG9uZW50XS4KICAgKgogICAqIE5vdGUgdGhhdCBkZWNvZGluZyBhIFVSSSBjb21wb25lbnQgbWlnaHQgY2hhbmdlIGl0cyBtZWFuaW5nIGFzCiAgICogc29tZSBvZiB0aGUgZGVjb2RlZCBjaGFyYWN0ZXJzIGNvdWxkIGJlIGNoYXJhY3RlcnMgd2l0aCBhcmUKICAgKiBkZWxpbWl0ZXJzIGZvciBhIGdpdmVuIFVSSSBjb21wb25lbnQgdHlwZS4gQWx3YXlzIHNwbGl0IGEgVVJJCiAgICogY29tcG9uZW50IHVzaW5nIHRoZSBkZWxpbWl0ZXJzIGZvciB0aGUgY29tcG9uZW50IGJlZm9yZSBkZWNvZGluZwogICAqIHRoZSBpbmRpdmlkdWFsIHBhcnRzLgogICAqCiAgICogRm9yIGhhbmRsaW5nIHRoZSBbcGF0aF0gYW5kIFtxdWVyeV0gY29tcG9uZW50cyBjb25zaWRlciB1c2luZwogICAqIFtwYXRoU2VnbWVudHNdIGFuZCBbcXVlcnlQYXJhbWV0ZXJzXSB0byBnZXQgdGhlIHNlcGFyYXRlZCBhbmQKICAgKiBkZWNvZGVkIGNvbXBvbmVudC4KICAgKi8KICBzdGF0aWMgU3RyaW5nIGRlY29kZUNvbXBvbmVudChTdHJpbmcgZW5jb2RlZENvbXBvbmVudCkgewogICAgcmV0dXJuIF9VcmkuX3VyaURlY29kZSgKICAgICAgICBlbmNvZGVkQ29tcG9uZW50LCAwLCBlbmNvZGVkQ29tcG9uZW50Lmxlbmd0aCwgdXRmOCwgZmFsc2UpOwogIH0KCiAgLyoqCiAgICogRGVjb2RlcyB0aGUgcGVyY2VudC1lbmNvZGluZyBpbiBbZW5jb2RlZENvbXBvbmVudF0sIGNvbnZlcnRpbmcKICAgKiBwbHVzZXMgdG8gc3BhY2VzLgogICAqCiAgICogSXQgd2lsbCBjcmVhdGUgYSBieXRlLWxpc3Qgb2YgdGhlIGRlY29kZWQgY2hhcmFjdGVycywgYW5kIHRoZW4gdXNlCiAgICogW2VuY29kaW5nXSB0byBkZWNvZGUgdGhlIGJ5dGUtbGlzdCB0byBhIFN0cmluZy4gVGhlIGRlZmF1bHQgZW5jb2RpbmcgaXMKICAgKiBVVEYtOC4KICAgKi8KICBzdGF0aWMgU3RyaW5nIGRlY29kZVF1ZXJ5Q29tcG9uZW50KFN0cmluZyBlbmNvZGVkQ29tcG9uZW50LAogICAgICB7RW5jb2RpbmcgZW5jb2RpbmcgPSB1dGY4fSkgewogICAgcmV0dXJuIF9VcmkuX3VyaURlY29kZSgKICAgICAgICBlbmNvZGVkQ29tcG9uZW50LCAwLCBlbmNvZGVkQ29tcG9uZW50Lmxlbmd0aCwgZW5jb2RpbmcsIHRydWUpOwogIH0KCiAgLyoqCiAgICogRW5jb2RlIHRoZSBzdHJpbmcgW3VyaV0gdXNpbmcgcGVyY2VudC1lbmNvZGluZyB0byBtYWtlIGl0CiAgICogc2FmZSBmb3IgbGl0ZXJhbCB1c2UgYXMgYSBmdWxsIFVSSS4KICAgKgogICAqIEFsbCBjaGFyYWN0ZXJzIGV4Y2VwdCB1cHBlcmNhc2UgYW5kIGxvd2VyY2FzZSBsZXR0ZXJzLCBkaWdpdHMgYW5kCiAgICogdGhlIGNoYXJhY3RlcnMgYCEjJCYnKCkqKywtLi86Oz0/QF9+YCBhcmUgcGVyY2VudC1lbmNvZGVkLiBUaGlzCiAgICogaXMgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHNwZWNpZmllZCBpbiBpbiBFQ01BLTI2MiB2ZXJzaW9uIDUuMSBmb3IKICAgKiB0aGUgZW5jb2RlVVJJIGZ1bmN0aW9uIC4KICAgKi8KICBzdGF0aWMgU3RyaW5nIGVuY29kZUZ1bGwoU3RyaW5nIHVyaSkgewogICAgcmV0dXJuIF9VcmkuX3VyaUVuY29kZShfVXJpLl9lbmNvZGVGdWxsVGFibGUsIHVyaSwgdXRmOCwgZmFsc2UpOwogIH0KCiAgLyoqCiAgICogRGVjb2RlcyB0aGUgcGVyY2VudC1lbmNvZGluZyBpbiBbdXJpXS4KICAgKgogICAqIE5vdGUgdGhhdCBkZWNvZGluZyBhIGZ1bGwgVVJJIG1pZ2h0IGNoYW5nZSBpdHMgbWVhbmluZyBhcyBzb21lIG9mCiAgICogdGhlIGRlY29kZWQgY2hhcmFjdGVycyBjb3VsZCBiZSByZXNlcnZlZCBjaGFyYWN0ZXJzLiBJbiBtb3N0CiAgICogY2FzZXMgYW4gZW5jb2RlZCBVUkkgc2hvdWxkIGJlIHBhcnNlZCBpbnRvIGNvbXBvbmVudHMgdXNpbmcKICAgKiBbVXJpLnBhcnNlXSBiZWZvcmUgZGVjb2RpbmcgdGhlIHNlcGFyYXRlIGNvbXBvbmVudHMuCiAgICovCiAgc3RhdGljIFN0cmluZyBkZWNvZGVGdWxsKFN0cmluZyB1cmkpIHsKICAgIHJldHVybiBfVXJpLl91cmlEZWNvZGUodXJpLCAwLCB1cmkubGVuZ3RoLCB1dGY4LCBmYWxzZSk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBbcXVlcnldIHNwbGl0IGludG8gYSBtYXAgYWNjb3JkaW5nIHRvIHRoZSBydWxlcwogICAqIHNwZWNpZmllZCBmb3IgRk9STSBwb3N0IGluIHRoZSBbSFRNTCA0LjAxIHNwZWNpZmljYXRpb24gc2VjdGlvbgogICAqIDE3LjEzLjRdKGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvaW50ZXJhY3QvZm9ybXMuaHRtbCNoLTE3LjEzLjQgIkhUTUwgNC4wMSBzZWN0aW9uIDE3LjEzLjQiKS4KICAgKiBFYWNoIGtleSBhbmQgdmFsdWUgaW4gdGhlIHJldHVybmVkIG1hcCBoYXMgYmVlbiBkZWNvZGVkLiBJZiB0aGUgW3F1ZXJ5XQogICAqIGlzIHRoZSBlbXB0eSBzdHJpbmcgYW4gZW1wdHkgbWFwIGlzIHJldHVybmVkLgogICAqCiAgICogS2V5cyBpbiB0aGUgcXVlcnkgc3RyaW5nIHRoYXQgaGF2ZSBubyB2YWx1ZSBhcmUgbWFwcGVkIHRvIHRoZQogICAqIGVtcHR5IHN0cmluZy4KICAgKgogICAqIEVhY2ggcXVlcnkgY29tcG9uZW50IHdpbGwgYmUgZGVjb2RlZCB1c2luZyBbZW5jb2RpbmddLiBUaGUgZGVmYXVsdCBlbmNvZGluZwogICAqIGlzIFVURi04LgogICAqLwogIHN0YXRpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IHNwbGl0UXVlcnlTdHJpbmcoU3RyaW5nIHF1ZXJ5LAogICAgICB7RW5jb2RpbmcgZW5jb2RpbmcgPSB1dGY4fSkgewogICAgcmV0dXJuIHF1ZXJ5LnNwbGl0KCImIikuZm9sZCh7fSwgKG1hcCwgZWxlbWVudCkgewogICAgICBpbnQgaW5kZXggPSBlbGVtZW50LmluZGV4T2YoIj0iKTsKICAgICAgaWYgKGluZGV4ID09IC0xKSB7CiAgICAgICAgaWYgKGVsZW1lbnQgIT0gIiIpIHsKICAgICAgICAgIG1hcFtkZWNvZGVRdWVyeUNvbXBvbmVudChlbGVtZW50LCBlbmNvZGluZzogZW5jb2RpbmcpXSA9ICIiOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChpbmRleCAhPSAwKSB7CiAgICAgICAgdmFyIGtleSA9IGVsZW1lbnQuc3Vic3RyaW5nKDAsIGluZGV4KTsKICAgICAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnN1YnN0cmluZyhpbmRleCArIDEpOwogICAgICAgIG1hcFtkZWNvZGVRdWVyeUNvbXBvbmVudChrZXksIGVuY29kaW5nOiBlbmNvZGluZyldID0KICAgICAgICAgICAgZGVjb2RlUXVlcnlDb21wb25lbnQodmFsdWUsIGVuY29kaW5nOiBlbmNvZGluZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIG1hcDsKICAgIH0pOwogIH0KCiAgLyoqCiAgICogUGFyc2UgdGhlIFtob3N0XSBhcyBhbiBJUCB2ZXJzaW9uIDQgKElQdjQpIGFkZHJlc3MsIHJldHVybmluZyB0aGUgYWRkcmVzcwogICAqIGFzIGEgbGlzdCBvZiA0IGJ5dGVzIGluIG5ldHdvcmsgYnl0ZSBvcmRlciAoYmlnIGVuZGlhbikuCiAgICoKICAgKiBUaHJvd3MgYSBbRm9ybWF0RXhjZXB0aW9uXSBpZiBbaG9zdF0gaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzCiAgICogcmVwcmVzZW50YXRpb24uCiAgICovCiAgc3RhdGljIExpc3Q8aW50PiBwYXJzZUlQdjRBZGRyZXNzKFN0cmluZyBob3N0KSA9PgogICAgICBfcGFyc2VJUHY0QWRkcmVzcyhob3N0LCAwLCBob3N0Lmxlbmd0aCk7CgogIC8vLyBJbXBsZW1lbnRhdGlvbiBvZiBbcGFyc2VJUHY0QWRkcmVzc10gdGhhdCBjYW4gd29yayBvbiBhIHN1YnN0cmluZy4KICBzdGF0aWMgTGlzdDxpbnQ+IF9wYXJzZUlQdjRBZGRyZXNzKFN0cmluZyBob3N0LCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIHZvaWQgZXJyb3IoU3RyaW5nIG1zZywgaW50IHBvc2l0aW9uKSB7CiAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbignSWxsZWdhbCBJUHY0IGFkZHJlc3MsICRtc2cnLCBob3N0LCBwb3NpdGlvbik7CiAgICB9CgogICAgdmFyIHJlc3VsdCA9IFVpbnQ4TGlzdCg0KTsKICAgIGludCBwYXJ0SW5kZXggPSAwOwogICAgaW50IHBhcnRTdGFydCA9IHN0YXJ0OwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgaW50IGNoYXIgPSBob3N0LmNvZGVVbml0QXQoaSk7CiAgICAgIGlmIChjaGFyICE9IF9ET1QpIHsKICAgICAgICBpZiAoY2hhciBeIDB4MzAgPiA5KSB7CiAgICAgICAgICAvLyBGYWlsIG9uIGEgbm9uLWRpZ2l0IGNoYXJhY3Rlci4KICAgICAgICAgIGVycm9yKCJpbnZhbGlkIGNoYXJhY3RlciIsIGkpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAocGFydEluZGV4ID09IDMpIHsKICAgICAgICAgIGVycm9yKCdJUHY0IGFkZHJlc3Mgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSA0IHBhcnRzJywgaSk7CiAgICAgICAgfQogICAgICAgIGludCBwYXJ0ID0gaW50LnBhcnNlKGhvc3Quc3Vic3RyaW5nKHBhcnRTdGFydCwgaSkpOwogICAgICAgIGlmIChwYXJ0ID4gMjU1KSB7CiAgICAgICAgICBlcnJvcigiZWFjaCBwYXJ0IG11c3QgYmUgaW4gdGhlIHJhbmdlIDAuLjI1NSIsIHBhcnRTdGFydCk7CiAgICAgICAgfQogICAgICAgIHJlc3VsdFtwYXJ0SW5kZXgrK10gPSBwYXJ0OwogICAgICAgIHBhcnRTdGFydCA9IGkgKyAxOwogICAgICB9CiAgICB9CgogICAgaWYgKHBhcnRJbmRleCAhPSAzKSB7CiAgICAgIGVycm9yKCdJUHY0IGFkZHJlc3Mgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSA0IHBhcnRzJywgZW5kKTsKICAgIH0KCiAgICBpbnQgcGFydCA9IGludC5wYXJzZShob3N0LnN1YnN0cmluZyhwYXJ0U3RhcnQsIGVuZCkpOwogICAgaWYgKHBhcnQgPiAyNTUpIHsKICAgICAgZXJyb3IoImVhY2ggcGFydCBtdXN0IGJlIGluIHRoZSByYW5nZSAwLi4yNTUiLCBwYXJ0U3RhcnQpOwogICAgfQogICAgcmVzdWx0W3BhcnRJbmRleF0gPSBwYXJ0OwoKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvKioKICAgKiBQYXJzZSB0aGUgW2hvc3RdIGFzIGFuIElQIHZlcnNpb24gNiAoSVB2NikgYWRkcmVzcywgcmV0dXJuaW5nIHRoZSBhZGRyZXNzCiAgICogYXMgYSBsaXN0IG9mIDE2IGJ5dGVzIGluIG5ldHdvcmsgYnl0ZSBvcmRlciAoYmlnIGVuZGlhbikuCiAgICoKICAgKiBUaHJvd3MgYSBbRm9ybWF0RXhjZXB0aW9uXSBpZiBbaG9zdF0gaXMgbm90IGEgdmFsaWQgSVB2NiBhZGRyZXNzCiAgICogcmVwcmVzZW50YXRpb24uCiAgICoKICAgKiBBY3RzIG9uIHRoZSBzdWJzdHJpbmcgZnJvbSBbc3RhcnRdIHRvIFtlbmRdLiBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdAogICAqIGRlZmF1bHRzIG90IHRoZSBlbmQgb2YgdGhlIHN0cmluZy4KICAgKgogICAqIFNvbWUgZXhhbXBsZXMgb2YgSVB2NiBhZGRyZXNzZXM6CiAgICogICogYDo6MWAKICAgKiAgKiBgRkVEQzpCQTk4Ojc2NTQ6MzIxMDpGRURDOkJBOTg6NzY1NDozMjEwYAogICAqICAqIGAzZmZlOjJhMDA6MTAwOjcwMzE6OjFgCiAgICogICogYDo6RkZGRjoxMjkuMTQ0LjUyLjM4YAogICAqICAqIGAyMDEwOjgzNkI6NDE3OTo6ODM2Qjo0MTc5YAogICAqLwogIHN0YXRpYyBMaXN0PGludD4gcGFyc2VJUHY2QWRkcmVzcyhTdHJpbmcgaG9zdCwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSB7CiAgICBlbmQgPz89IGhvc3QubGVuZ3RoOwogICAgLy8gQW4gSVB2NiBhZGRyZXNzIGNvbnNpc3RzIG9mIGV4YWN0bHkgOCBwYXJ0cyBvZiAxLTQgaGV4IGRpZ2l0cywgc2VwYXJhdGVkCiAgICAvLyBieSBgOmAncywgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbnM6CiAgICAvLwogICAgLy8gIC0gT25lIChhbmQgb25seSBvbmUpIHdpbGRjYXJkIChgOjpgKSBtYXkgYmUgcHJlc2VudCwgcmVwcmVzZW50aW5nIGEgZmlsbAogICAgLy8gICAgb2YgMCdzLiBUaGUgSVB2NiBgOjpgIGlzIHRodXMgMTYgYnl0ZXMgb2YgYDBgLgogICAgLy8gIC0gVGhlIGxhc3QgdHdvIHBhcnRzIG1heSBiZSByZXBsYWNlZCBieSBhbiBJUHY0ICJkb3R0ZWQtcXVhZCIgYWRkcmVzcy4KCiAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHJlcG9ydGluZyBhIGJhZGx5IGZvcm1hdHRlZCBJUHY2IGFkZHJlc3MuCiAgICB2b2lkIGVycm9yKFN0cmluZyBtc2csIFtwb3NpdGlvbl0pIHsKICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKCdJbGxlZ2FsIElQdjYgYWRkcmVzcywgJG1zZycsIGhvc3QsIHBvc2l0aW9uKTsKICAgIH0KCiAgICAvLyBQYXJzZSBhIGhleCBibG9jay4KICAgIGludCBwYXJzZUhleChpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgICAgaWYgKGVuZCAtIHN0YXJ0ID4gNCkgewogICAgICAgIGVycm9yKCdhbiBJUHY2IHBhcnQgY2FuIG9ubHkgY29udGFpbiBhIG1heGltdW0gb2YgNCBoZXggZGlnaXRzJywgc3RhcnQpOwogICAgICB9CiAgICAgIGludCB2YWx1ZSA9IGludC5wYXJzZShob3N0LnN1YnN0cmluZyhzdGFydCwgZW5kKSwgcmFkaXg6IDE2KTsKICAgICAgaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+IDB4RkZGRikgewogICAgICAgIGVycm9yKCdlYWNoIHBhcnQgbXVzdCBiZSBpbiB0aGUgcmFuZ2Ugb2YgYDB4MC4uMHhGRkZGYCcsIHN0YXJ0KTsKICAgICAgfQogICAgICByZXR1cm4gdmFsdWU7CiAgICB9CgogICAgaWYgKGhvc3QubGVuZ3RoIDwgMikgZXJyb3IoJ2FkZHJlc3MgaXMgdG9vIHNob3J0Jyk7CiAgICBMaXN0PGludD4gcGFydHMgPSBbXTsKICAgIGJvb2wgd2lsZGNhcmRTZWVuID0gZmFsc2U7CiAgICAvLyBTZXQgaWYgc2VlaW5nIGEgIi4iLCBzdWdnZXN0aW5nIHRoYXQgdGhlcmUgaXMgYW4gSVB2NCBhZGRyZXNzLgogICAgYm9vbCBzZWVuRG90ID0gZmFsc2U7CiAgICBpbnQgcGFydFN0YXJ0ID0gc3RhcnQ7CiAgICAvLyBQYXJzZSBhbGwgcGFydHMsIGV4Y2VwdCBhIHBvdGVudGlhbCBsYXN0IG9uZS4KICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIGludCBjaGFyID0gaG9zdC5jb2RlVW5pdEF0KGkpOwogICAgICBpZiAoY2hhciA9PSBfQ09MT04pIHsKICAgICAgICBpZiAoaSA9PSBzdGFydCkgewogICAgICAgICAgLy8gSWYgd2Ugc2VlIGEgYDpgIGluIHRoZSBiZWdpbm5pbmcsIGV4cGVjdCB3aWxkY2FyZC4KICAgICAgICAgIGkrKzsKICAgICAgICAgIGlmIChob3N0LmNvZGVVbml0QXQoaSkgIT0gX0NPTE9OKSB7CiAgICAgICAgICAgIGVycm9yKCdpbnZhbGlkIHN0YXJ0IGNvbG9uLicsIGkpOwogICAgICAgICAgfQogICAgICAgICAgcGFydFN0YXJ0ID0gaTsKICAgICAgICB9CiAgICAgICAgaWYgKGkgPT0gcGFydFN0YXJ0KSB7CiAgICAgICAgICAvLyBXaWxkY2FyZC4gV2Ugb25seSBhbGxvdyBvbmUuCiAgICAgICAgICBpZiAod2lsZGNhcmRTZWVuKSB7CiAgICAgICAgICAgIGVycm9yKCdvbmx5IG9uZSB3aWxkY2FyZCBgOjpgIGlzIGFsbG93ZWQnLCBpKTsKICAgICAgICAgIH0KICAgICAgICAgIHdpbGRjYXJkU2VlbiA9IHRydWU7CiAgICAgICAgICBwYXJ0cy5hZGQoLTEpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBGb3VuZCBhIHNpbmdsZSBjb2xvbi4gUGFyc2UgW3BhcnRTdGFydC4uaV0gYXMgYSBoZXggZW50cnkuCiAgICAgICAgICBwYXJ0cy5hZGQocGFyc2VIZXgocGFydFN0YXJ0LCBpKSk7CiAgICAgICAgfQogICAgICAgIHBhcnRTdGFydCA9IGkgKyAxOwogICAgICB9IGVsc2UgaWYgKGNoYXIgPT0gX0RPVCkgewogICAgICAgIHNlZW5Eb3QgPSB0cnVlOwogICAgICB9CiAgICB9CiAgICBpZiAocGFydHMubGVuZ3RoID09IDApIGVycm9yKCd0b28gZmV3IHBhcnRzJyk7CiAgICBib29sIGF0RW5kID0gKHBhcnRTdGFydCA9PSBlbmQpOwogICAgYm9vbCBpc0xhc3RXaWxkY2FyZCA9IChwYXJ0cy5sYXN0ID09IC0xKTsKICAgIGlmIChhdEVuZCAmJiAhaXNMYXN0V2lsZGNhcmQpIHsKICAgICAgZXJyb3IoJ2V4cGVjdGVkIGEgcGFydCBhZnRlciBsYXN0IGA6YCcsIGVuZCk7CiAgICB9CiAgICBpZiAoIWF0RW5kKSB7CiAgICAgIGlmICghc2VlbkRvdCkgewogICAgICAgIHBhcnRzLmFkZChwYXJzZUhleChwYXJ0U3RhcnQsIGVuZCkpOwogICAgICB9IGVsc2UgewogICAgICAgIExpc3Q8aW50PiBsYXN0ID0gX3BhcnNlSVB2NEFkZHJlc3MoaG9zdCwgcGFydFN0YXJ0LCBlbmQpOwogICAgICAgIHBhcnRzLmFkZChsYXN0WzBdIDw8IDggfCBsYXN0WzFdKTsKICAgICAgICBwYXJ0cy5hZGQobGFzdFsyXSA8PCA4IHwgbGFzdFszXSk7CiAgICAgIH0KICAgIH0KICAgIGlmICh3aWxkY2FyZFNlZW4pIHsKICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDcpIHsKICAgICAgICBlcnJvcignYW4gYWRkcmVzcyB3aXRoIGEgd2lsZGNhcmQgbXVzdCBoYXZlIGxlc3MgdGhhbiA3IHBhcnRzJyk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAocGFydHMubGVuZ3RoICE9IDgpIHsKICAgICAgZXJyb3IoJ2FuIGFkZHJlc3Mgd2l0aG91dCBhIHdpbGRjYXJkIG11c3QgY29udGFpbiBleGFjdGx5IDggcGFydHMnKTsKICAgIH0KICAgIExpc3Q8aW50PiBieXRlcyA9IFVpbnQ4TGlzdCgxNik7CiAgICBmb3IgKGludCBpID0gMCwgaW5kZXggPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHsKICAgICAgaW50IHZhbHVlID0gcGFydHNbaV07CiAgICAgIGlmICh2YWx1ZSA9PSAtMSkgewogICAgICAgIGludCB3aWxkQ2FyZExlbmd0aCA9IDkgLSBwYXJ0cy5sZW5ndGg7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB3aWxkQ2FyZExlbmd0aDsgaisrKSB7CiAgICAgICAgICBieXRlc1tpbmRleF0gPSAwOwogICAgICAgICAgYnl0ZXNbaW5kZXggKyAxXSA9IDA7CiAgICAgICAgICBpbmRleCArPSAyOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBieXRlc1tpbmRleF0gPSB2YWx1ZSA+PiA4OwogICAgICAgIGJ5dGVzW2luZGV4ICsgMV0gPSB2YWx1ZSAmIDB4ZmY7CiAgICAgICAgaW5kZXggKz0gMjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGJ5dGVzOwogIH0KfQoKY2xhc3MgX1VyaSBpbXBsZW1lbnRzIFVyaSB7CiAgLy8gV2UgcmVwcmVzZW50IHRoZSBtaXNzaW5nIHNjaGVtZSBhcyBhbiBlbXB0eSBzdHJpbmcuCiAgLy8gQSB2YWxpZCBzY2hlbWUgY2Fubm90IGJlIGVtcHR5LgogIGZpbmFsIFN0cmluZyBzY2hlbWU7CgogIC8qKgogICAqIFRoZSB1c2VyLWluZm8gcGFydCBvZiB0aGUgYXV0aG9yaXR5LgogICAqCiAgICogRG9lcyBub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhbiBlbXB0eSB1c2VyLWluZm8gYW5kIGFuIGFic2VudCBvbmUuCiAgICogVGhlIHZhbHVlIGlzIGFsd2F5cyBub24tbnVsbC4KICAgKiBJcyBjb25zaWRlcmVkIGFic2VudCBpZiBbX2hvc3RdIGlzIGBudWxsYC4KICAgKi8KICBmaW5hbCBTdHJpbmcgX3VzZXJJbmZvOwoKICAvKioKICAgKiBUaGUgaG9zdCBuYW1lIG9mIHRoZSBVUkkuCiAgICoKICAgKiBTZXQgdG8gYG51bGxgIGlmIHRoZXJlIGlzIG5vIGF1dGhvcml0eSBpbiB0aGUgVVJJLgogICAqIFRoZSBob3N0IG5hbWUgaXMgdGhlIG9ubHkgbWFuZGF0b3J5IHBhcnQgb2YgYW4gYXV0aG9yaXR5LCBzbyB3ZSB1c2UKICAgKiBpdCB0byBtYXJrIHdoZXRoZXIgYW4gYXV0aG9yaXR5IHBhcnQgd2FzIHByZXNlbnQgb3Igbm90LgogICAqLwogIGZpbmFsIFN0cmluZyBfaG9zdDsKCiAgLyoqCiAgICogVGhlIHBvcnQgbnVtYmVyIHBhcnQgb2YgdGhlIGF1dGhvcml0eS4KICAgKgogICAqIFRoZSBwb3J0LiBTZXQgdG8gbnVsbCBpZiB0aGVyZSBpcyBubyBwb3J0LiBOb3JtYWxpemVkIHRvIG51bGwgaWYKICAgKiB0aGUgcG9ydCBpcyB0aGUgZGVmYXVsdCBwb3J0IGZvciB0aGUgc2NoZW1lLgogICAqLwogIGludCBfcG9ydDsKCiAgLyoqCiAgICogVGhlIHBhdGggb2YgdGhlIFVSSS4KICAgKgogICAqIEFsd2F5cyBub24tbnVsbC4KICAgKi8KICBmaW5hbCBTdHJpbmcgcGF0aDsKCiAgLy8gVGhlIHF1ZXJ5IGNvbnRlbnQsIG9yIG51bGwgaWYgdGhlcmUgaXMgbm8gcXVlcnkuCiAgZmluYWwgU3RyaW5nIF9xdWVyeTsKCiAgLy8gVGhlIGZyYWdtZW50IGNvbnRlbnQsIG9yIG51bGwgaWYgdGhlcmUgaXMgbm8gZnJhZ21lbnQuCiAgZmluYWwgU3RyaW5nIF9mcmFnbWVudDsKCiAgLyoqCiAgICogQ2FjaGUgdGhlIGNvbXB1dGVkIHJldHVybiB2YWx1ZSBvZiBbcGF0aFNlZ21lbnRzXS4KICAgKi8KICBMaXN0PFN0cmluZz4gX3BhdGhTZWdtZW50czsKCiAgLyoqCiAgICogQ2FjaGUgb2YgdGhlIGZ1bGwgbm9ybWFsaXplZCB0ZXh0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBVUkkuCiAgICovCiAgU3RyaW5nIF90ZXh0OwoKICAvKioKICAgKiBDYWNoZSBvZiB0aGUgaGFzaENvZGUgb2YgW190ZXh0XS4KICAgKgogICAqIElzIG51bGwgdW50aWwgY29tcHV0ZWQuCiAgICovCiAgaW50IF9oYXNoQ29kZUNhY2hlOwoKICAvKioKICAgKiBDYWNoZSB0aGUgY29tcHV0ZWQgcmV0dXJuIHZhbHVlIG9mIFtxdWVyeVBhcmFtZXRlcnNdLgogICAqLwogIE1hcDxTdHJpbmcsIFN0cmluZz4gX3F1ZXJ5UGFyYW1ldGVyczsKICBNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IF9xdWVyeVBhcmFtZXRlckxpc3RzOwoKICAvLy8gSW50ZXJuYWwgbm9uLXZlcmlmeWluZyBjb25zdHJ1Y3Rvci4gT25seSBjYWxsIHdpdGggdmFsaWRhdGVkIGFyZ3VtZW50cy4KICAvLy8KICAvLy8gVGhlIGNvbXBvbmVudHMgbXVzdCBiZSBwcm9wZXJseSBub3JtYWxpemVkLgogIC8vLwogIC8vLyBVc2UgYG51bGxgIGZvciBbX2hvc3RdIGlmIHRoZXJlIGlzIG5vIGF1dGhvcml0eS4gSW4gdGhhdCBjYXNlLCBhbHdheXMKICAvLy8gcGFzcyBgbnVsbGAgZm9yIFtfcG9ydF0gYW5kIFtfdXNlckluZm9dIGFzIHdlbGwuCiAgLy8vCiAgLy8vIFVzZSBgbnVsbGAgZm9yIFtfcG9ydF0sIFtfdXNlckluZm9dLCBbX3F1ZXJ5XSBhbmQgW19mcmFnbWVudF0gaWYgdGhlcmUgaXMKICAvLy8gY29tcG9uZW50IG9mIHRoYXQgdHlwZS4KICAvLy8KICAvLy8gVGhlIFtwYXRoXSBhbmQgW3NjaGVtZV0gYXJlIG5ldmVyIGVtcHR5LgogIF9VcmkuX2ludGVybmFsKHRoaXMuc2NoZW1lLCB0aGlzLl91c2VySW5mbywgdGhpcy5faG9zdCwgdGhpcy5fcG9ydCwgdGhpcy5wYXRoLAogICAgICB0aGlzLl9xdWVyeSwgdGhpcy5fZnJhZ21lbnQpOwoKICAvLy8gQ3JlYXRlIGEgW19VcmldIGZyb20gcGFydHMgb2YgW3VyaV0uCiAgLy8vCiAgLy8vIFRoZSBwYXJhbWV0ZXJzIHNwZWNpZnkgdGhlIHN0YXJ0L2VuZCBvZiBwYXJ0aWN1bGFyIGNvbXBvbmVudHMgb2YgdGhlIFVSSS4KICAvLy8gVGhlIFtzY2hlbWVdIG1heSBjb250YWluIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIG5vcm1hbGl6ZWQgc2NoZW1lCiAgLy8vIGNvbXBvbmVudCBpZiBvbmUgaGFzIGFscmVhZHkgYmVlbiBkaXNjb3ZlcmVkLgogIGZhY3RvcnkgX1VyaS5ub3RTaW1wbGUoCiAgICAgIFN0cmluZyB1cmksCiAgICAgIGludCBzdGFydCwKICAgICAgaW50IGVuZCwKICAgICAgaW50IHNjaGVtZUVuZCwKICAgICAgaW50IGhvc3RTdGFydCwKICAgICAgaW50IHBvcnRTdGFydCwKICAgICAgaW50IHBhdGhTdGFydCwKICAgICAgaW50IHF1ZXJ5U3RhcnQsCiAgICAgIGludCBmcmFnbWVudFN0YXJ0LAogICAgICBTdHJpbmcgc2NoZW1lKSB7CiAgICBpZiAoc2NoZW1lID09IG51bGwpIHsKICAgICAgc2NoZW1lID0gIiI7CiAgICAgIGlmIChzY2hlbWVFbmQgPiBzdGFydCkgewogICAgICAgIHNjaGVtZSA9IF9tYWtlU2NoZW1lKHVyaSwgc3RhcnQsIHNjaGVtZUVuZCk7CiAgICAgIH0gZWxzZSBpZiAoc2NoZW1lRW5kID09IHN0YXJ0KSB7CiAgICAgICAgX2ZhaWwodXJpLCBzdGFydCwgIkludmFsaWQgZW1wdHkgc2NoZW1lIik7CiAgICAgIH0KICAgIH0KICAgIFN0cmluZyB1c2VySW5mbyA9ICIiOwogICAgU3RyaW5nIGhvc3Q7CiAgICBpbnQgcG9ydDsKICAgIGlmIChob3N0U3RhcnQgPiBzdGFydCkgewogICAgICBpbnQgdXNlckluZm9TdGFydCA9IHNjaGVtZUVuZCArIDM7CiAgICAgIGlmICh1c2VySW5mb1N0YXJ0IDwgaG9zdFN0YXJ0KSB7CiAgICAgICAgdXNlckluZm8gPSBfbWFrZVVzZXJJbmZvKHVyaSwgdXNlckluZm9TdGFydCwgaG9zdFN0YXJ0IC0gMSk7CiAgICAgIH0KICAgICAgaG9zdCA9IF9tYWtlSG9zdCh1cmksIGhvc3RTdGFydCwgcG9ydFN0YXJ0LCBmYWxzZSk7CiAgICAgIGlmIChwb3J0U3RhcnQgKyAxIDwgcGF0aFN0YXJ0KSB7CiAgICAgICAgLy8gU2hvdWxkIHRocm93IGJlY2F1c2UgaW52YWxpZC4KICAgICAgICBwb3J0ID0gaW50LnBhcnNlKHVyaS5zdWJzdHJpbmcocG9ydFN0YXJ0ICsgMSwgcGF0aFN0YXJ0KSwgb25FcnJvcjogKF8pIHsKICAgICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBwb3J0IiwgdXJpLCBwb3J0U3RhcnQgKyAxKTsKICAgICAgICB9KTsKICAgICAgICBwb3J0ID0gX21ha2VQb3J0KHBvcnQsIHNjaGVtZSk7CiAgICAgIH0KICAgIH0KICAgIFN0cmluZyBwYXRoID0KICAgICAgICBfbWFrZVBhdGgodXJpLCBwYXRoU3RhcnQsIHF1ZXJ5U3RhcnQsIG51bGwsIHNjaGVtZSwgaG9zdCAhPSBudWxsKTsKICAgIFN0cmluZyBxdWVyeTsKICAgIGlmIChxdWVyeVN0YXJ0IDwgZnJhZ21lbnRTdGFydCkgewogICAgICBxdWVyeSA9IF9tYWtlUXVlcnkodXJpLCBxdWVyeVN0YXJ0ICsgMSwgZnJhZ21lbnRTdGFydCwgbnVsbCk7CiAgICB9CiAgICBTdHJpbmcgZnJhZ21lbnQ7CiAgICBpZiAoZnJhZ21lbnRTdGFydCA8IGVuZCkgewogICAgICBmcmFnbWVudCA9IF9tYWtlRnJhZ21lbnQodXJpLCBmcmFnbWVudFN0YXJ0ICsgMSwgZW5kKTsKICAgIH0KICAgIHJldHVybiBfVXJpLl9pbnRlcm5hbChzY2hlbWUsIHVzZXJJbmZvLCBob3N0LCBwb3J0LCBwYXRoLCBxdWVyeSwgZnJhZ21lbnQpOwogIH0KCiAgLy8vIEltcGxlbWVudGF0aW9uIG9mIFtVcmkuVXJpXS4KICBmYWN0b3J5IF9VcmkoCiAgICAgIHtTdHJpbmcgc2NoZW1lLAogICAgICBTdHJpbmcgdXNlckluZm8sCiAgICAgIFN0cmluZyBob3N0LAogICAgICBpbnQgcG9ydCwKICAgICAgU3RyaW5nIHBhdGgsCiAgICAgIEl0ZXJhYmxlPFN0cmluZz4gcGF0aFNlZ21lbnRzLAogICAgICBTdHJpbmcgcXVlcnksCiAgICAgIE1hcDxTdHJpbmcsIGR5bmFtaWMgLypTdHJpbmd8SXRlcmFibGU8U3RyaW5nPiovID4gcXVlcnlQYXJhbWV0ZXJzLAogICAgICBTdHJpbmcgZnJhZ21lbnR9KSB7CiAgICBzY2hlbWUgPSBfbWFrZVNjaGVtZShzY2hlbWUsIDAsIF9zdHJpbmdPck51bGxMZW5ndGgoc2NoZW1lKSk7CiAgICB1c2VySW5mbyA9IF9tYWtlVXNlckluZm8odXNlckluZm8sIDAsIF9zdHJpbmdPck51bGxMZW5ndGgodXNlckluZm8pKTsKICAgIGhvc3QgPSBfbWFrZUhvc3QoaG9zdCwgMCwgX3N0cmluZ09yTnVsbExlbmd0aChob3N0KSwgZmFsc2UpOwogICAgLy8gU3BlY2lhbCBjYXNlIHRoaXMgY29uc3RydWN0b3IgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgogICAgaWYgKHF1ZXJ5ID09ICIiKSBxdWVyeSA9IG51bGw7CiAgICBxdWVyeSA9IF9tYWtlUXVlcnkocXVlcnksIDAsIF9zdHJpbmdPck51bGxMZW5ndGgocXVlcnkpLCBxdWVyeVBhcmFtZXRlcnMpOwogICAgZnJhZ21lbnQgPSBfbWFrZUZyYWdtZW50KGZyYWdtZW50LCAwLCBfc3RyaW5nT3JOdWxsTGVuZ3RoKGZyYWdtZW50KSk7CiAgICBwb3J0ID0gX21ha2VQb3J0KHBvcnQsIHNjaGVtZSk7CiAgICBib29sIGlzRmlsZSA9IChzY2hlbWUgPT0gImZpbGUiKTsKICAgIGlmIChob3N0ID09IG51bGwgJiYgKHVzZXJJbmZvLmlzTm90RW1wdHkgfHwgcG9ydCAhPSBudWxsIHx8IGlzRmlsZSkpIHsKICAgICAgaG9zdCA9ICIiOwogICAgfQogICAgYm9vbCBoYXNBdXRob3JpdHkgPSAoaG9zdCAhPSBudWxsKTsKICAgIHBhdGggPSBfbWFrZVBhdGgoCiAgICAgICAgcGF0aCwgMCwgX3N0cmluZ09yTnVsbExlbmd0aChwYXRoKSwgcGF0aFNlZ21lbnRzLCBzY2hlbWUsIGhhc0F1dGhvcml0eSk7CiAgICBpZiAoc2NoZW1lLmlzRW1wdHkgJiYgaG9zdCA9PSBudWxsICYmICFwYXRoLnN0YXJ0c1dpdGgoJy8nKSkgewogICAgICBib29sIGFsbG93U2NoZW1lID0gc2NoZW1lLmlzTm90RW1wdHkgfHwgaG9zdCAhPSBudWxsOwogICAgICBwYXRoID0gX25vcm1hbGl6ZVJlbGF0aXZlUGF0aChwYXRoLCBhbGxvd1NjaGVtZSk7CiAgICB9IGVsc2UgewogICAgICBwYXRoID0gX3JlbW92ZURvdFNlZ21lbnRzKHBhdGgpOwogICAgfQogICAgaWYgKGhvc3QgPT0gbnVsbCAmJiBwYXRoLnN0YXJ0c1dpdGgoIi8vIikpIHsKICAgICAgaG9zdCA9ICIiOwogICAgfQogICAgcmV0dXJuIF9VcmkuX2ludGVybmFsKHNjaGVtZSwgdXNlckluZm8sIGhvc3QsIHBvcnQsIHBhdGgsIHF1ZXJ5LCBmcmFnbWVudCk7CiAgfQoKICAvLy8gSW1wbGVtZW50YXRpb24gb2YgW1VyaS5odHRwXS4KICBmYWN0b3J5IF9VcmkuaHR0cChTdHJpbmcgYXV0aG9yaXR5LCBTdHJpbmcgdW5lbmNvZGVkUGF0aCwKICAgICAgW01hcDxTdHJpbmcsIFN0cmluZz4gcXVlcnlQYXJhbWV0ZXJzXSkgewogICAgcmV0dXJuIF9tYWtlSHR0cFVyaSgiaHR0cCIsIGF1dGhvcml0eSwgdW5lbmNvZGVkUGF0aCwgcXVlcnlQYXJhbWV0ZXJzKTsKICB9CgogIC8vLyBJbXBsZW1lbnRhdGlvbiBvZiBbVXJpLmh0dHBzXS4KICBmYWN0b3J5IF9VcmkuaHR0cHMoU3RyaW5nIGF1dGhvcml0eSwgU3RyaW5nIHVuZW5jb2RlZFBhdGgsCiAgICAgIFtNYXA8U3RyaW5nLCBTdHJpbmc+IHF1ZXJ5UGFyYW1ldGVyc10pIHsKICAgIHJldHVybiBfbWFrZUh0dHBVcmkoImh0dHBzIiwgYXV0aG9yaXR5LCB1bmVuY29kZWRQYXRoLCBxdWVyeVBhcmFtZXRlcnMpOwogIH0KCiAgU3RyaW5nIGdldCBhdXRob3JpdHkgewogICAgaWYgKCFoYXNBdXRob3JpdHkpIHJldHVybiAiIjsKICAgIHZhciBzYiA9IFN0cmluZ0J1ZmZlcigpOwogICAgX3dyaXRlQXV0aG9yaXR5KHNiKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgU3RyaW5nIGdldCB1c2VySW5mbyA9PiBfdXNlckluZm87CgogIFN0cmluZyBnZXQgaG9zdCB7CiAgICBpZiAoX2hvc3QgPT0gbnVsbCkgcmV0dXJuICIiOwogICAgaWYgKF9ob3N0LnN0YXJ0c1dpdGgoJ1snKSkgewogICAgICByZXR1cm4gX2hvc3Quc3Vic3RyaW5nKDEsIF9ob3N0Lmxlbmd0aCAtIDEpOwogICAgfQogICAgcmV0dXJuIF9ob3N0OwogIH0KCiAgaW50IGdldCBwb3J0IHsKICAgIGlmIChfcG9ydCA9PSBudWxsKSByZXR1cm4gX2RlZmF1bHRQb3J0KHNjaGVtZSk7CiAgICByZXR1cm4gX3BvcnQ7CiAgfQoKICAvLyBUaGUgZGVmYXVsdCBwb3J0IGZvciB0aGUgc2NoZW1lIG9mIHRoaXMgVXJpLgogIHN0YXRpYyBpbnQgX2RlZmF1bHRQb3J0KFN0cmluZyBzY2hlbWUpIHsKICAgIGlmIChzY2hlbWUgPT0gImh0dHAiKSByZXR1cm4gODA7CiAgICBpZiAoc2NoZW1lID09ICJodHRwcyIpIHJldHVybiA0NDM7CiAgICByZXR1cm4gMDsKICB9CgogIFN0cmluZyBnZXQgcXVlcnkgPT4gX3F1ZXJ5ID8/ICIiOwoKICBTdHJpbmcgZ2V0IGZyYWdtZW50ID0+IF9mcmFnbWVudCA/PyAiIjsKCiAgYm9vbCBpc1NjaGVtZShTdHJpbmcgc2NoZW1lKSB7CiAgICBTdHJpbmcgdGhpc1NjaGVtZSA9IHRoaXMuc2NoZW1lOwogICAgaWYgKHNjaGVtZSA9PSBudWxsKSByZXR1cm4gdGhpc1NjaGVtZS5pc0VtcHR5OwogICAgaWYgKHNjaGVtZS5sZW5ndGggIT0gdGhpc1NjaGVtZS5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBfY29tcGFyZVNjaGVtZShzY2hlbWUsIHRoaXNTY2hlbWUpOwogIH0KCiAgLy8vIENvbXBhcmVzIHNjaGVtZSBjaGFyYWN0ZXJzIGluIFtzY2hlbWVdIGFuZCBhdCB0aGUgc3RhcnQgb2YgW3VyaV0uCiAgLy8vCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtzY2hlbWVdIHJlcHJlc2VudHMgdGhlIHNhbWUgc2NoZW1lIGFzIHRoZSBzdGFydCBvZgogIC8vLyBbdXJpXS4gVGhhdCBtZWFucyBoYXZpbmcgdGhlIHNhbWUgY2hhcmFjdGVycywgYnV0IHBvc3NpYmx5IGRpZmZlcmVudCBjYXNlCiAgLy8vIGZvciBsZXR0ZXJzLgogIC8vLwogIC8vLyBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgY2hlY2sgdGhhdCB0aGUgY2hhcmFjdGVycyBhcmUgdmFsaWQgVVJJIHNjaGVtZQogIC8vLyBjaGFyYWN0ZXJzLiBUaGUgW3VyaV0gaXMgYXNzdW1lZCB0byBiZSB2YWxpZCwgc28gaWYgW3NjaGVtZV0gbWF0Y2hlcwogIC8vLyBpdCwgaXQgaGFzIHRvIGJlIHZhbGlkIHRvby4KICAvLy8KICAvLy8gVGhlIGxlbmd0aCBzaG91bGQgYmUgdGVzdGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sCiAgLy8vIHNvIHRoZSBzY2hlbWUgcGFydCBvZiBbdXJpXSBpcyBrbm93biB0byBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyBbc2NoZW1lXS4KICBzdGF0aWMgYm9vbCBfY29tcGFyZVNjaGVtZShTdHJpbmcgc2NoZW1lLCBTdHJpbmcgdXJpKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHNjaGVtZS5sZW5ndGg7IGkrKykgewogICAgICBpbnQgc2NoZW1lQ2hhciA9IHNjaGVtZS5jb2RlVW5pdEF0KGkpOwogICAgICBpbnQgdXJpQ2hhciA9IHVyaS5jb2RlVW5pdEF0KGkpOwogICAgICBpbnQgZGVsdGEgPSBzY2hlbWVDaGFyIF4gdXJpQ2hhcjsKICAgICAgaWYgKGRlbHRhICE9IDApIHsKICAgICAgICBpZiAoZGVsdGEgPT0gMHgyMCkgewogICAgICAgICAgLy8gTWlnaHQgYmUgYSBjYXNlIGRpZmZlcmVuY2UuCiAgICAgICAgICBpbnQgbG93ZXJDaGFyID0gdXJpQ2hhciB8IGRlbHRhOwogICAgICAgICAgaWYgKDB4NjEgLyphKi8gPD0gbG93ZXJDaGFyICYmIGxvd2VyQ2hhciA8PSAweDdhIC8qeiovKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgLy8gUmVwb3J0IGEgcGFyc2UgZmFpbHVyZS4KICBzdGF0aWMgdm9pZCBfZmFpbChTdHJpbmcgdXJpLCBpbnQgaW5kZXgsIFN0cmluZyBtZXNzYWdlKSB7CiAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24obWVzc2FnZSwgdXJpLCBpbmRleCk7CiAgfQoKICBzdGF0aWMgVXJpIF9tYWtlSHR0cFVyaShTdHJpbmcgc2NoZW1lLCBTdHJpbmcgYXV0aG9yaXR5LCBTdHJpbmcgdW5lbmNvZGVkUGF0aCwKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBxdWVyeVBhcmFtZXRlcnMpIHsKICAgIHZhciB1c2VySW5mbyA9ICIiOwogICAgU3RyaW5nIGhvc3Q7CiAgICBpbnQgcG9ydDsKCiAgICBpZiAoYXV0aG9yaXR5ICE9IG51bGwgJiYgYXV0aG9yaXR5LmlzTm90RW1wdHkpIHsKICAgICAgdmFyIGhvc3RTdGFydCA9IDA7CiAgICAgIC8vIFNwbGl0IG9mZiB0aGUgdXNlciBpbmZvLgogICAgICBib29sIGhhc1VzZXJJbmZvID0gZmFsc2U7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXV0aG9yaXR5Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgY29uc3QgaW50IGF0U2lnbiA9IDB4NDA7CiAgICAgICAgaWYgKGF1dGhvcml0eS5jb2RlVW5pdEF0KGkpID09IGF0U2lnbikgewogICAgICAgICAgaGFzVXNlckluZm8gPSB0cnVlOwogICAgICAgICAgdXNlckluZm8gPSBhdXRob3JpdHkuc3Vic3RyaW5nKDAsIGkpOwogICAgICAgICAgaG9zdFN0YXJ0ID0gaSArIDE7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFyIGhvc3RFbmQgPSBob3N0U3RhcnQ7CiAgICAgIGlmIChob3N0U3RhcnQgPCBhdXRob3JpdHkubGVuZ3RoICYmCiAgICAgICAgICBhdXRob3JpdHkuY29kZVVuaXRBdChob3N0U3RhcnQpID09IF9MRUZUX0JSQUNLRVQpIHsKICAgICAgICAvLyBJUHY2IGhvc3QuCiAgICAgICAgaW50IGVzY2FwZUZvclpvbmVJRCA9IC0xOwogICAgICAgIGZvciAoOyBob3N0RW5kIDwgYXV0aG9yaXR5Lmxlbmd0aDsgaG9zdEVuZCsrKSB7CiAgICAgICAgICBpbnQgY2hhciA9IGF1dGhvcml0eS5jb2RlVW5pdEF0KGhvc3RFbmQpOwogICAgICAgICAgaWYgKGNoYXIgPT0gX1BFUkNFTlQgJiYgZXNjYXBlRm9yWm9uZUlEIDwgMCkgewogICAgICAgICAgICBlc2NhcGVGb3Jab25lSUQgPSBob3N0RW5kOwogICAgICAgICAgICBpZiAoYXV0aG9yaXR5LnN0YXJ0c1dpdGgoIjI1IiwgaG9zdEVuZCArIDEpKSB7CiAgICAgICAgICAgICAgaG9zdEVuZCArPSAyOyAvLyBNaWdodCBhcyB3ZWxsIHNraXAgdGhlIGFscmVhZHkgY2hlY2tlZCBlc2NhcGUuCiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAoY2hhciA9PSBfUklHSFRfQlJBQ0tFVCkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGhvc3RFbmQgPT0gYXV0aG9yaXR5Lmxlbmd0aCkgewogICAgICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKAogICAgICAgICAgICAgICJJbnZhbGlkIElQdjYgaG9zdCBlbnRyeS4iLCBhdXRob3JpdHksIGhvc3RTdGFydCk7CiAgICAgICAgfQogICAgICAgIFVyaS5wYXJzZUlQdjZBZGRyZXNzKGF1dGhvcml0eSwgaG9zdFN0YXJ0ICsgMSwKICAgICAgICAgICAgKGVzY2FwZUZvclpvbmVJRCA8IDApID8gaG9zdEVuZCA6IGVzY2FwZUZvclpvbmVJRCk7CiAgICAgICAgaG9zdEVuZCsrOyAvLyBTa2lwIHRoZSBjbG9zaW5nIGJyYWNrZXQuCiAgICAgICAgaWYgKGhvc3RFbmQgIT0gYXV0aG9yaXR5Lmxlbmd0aCAmJgogICAgICAgICAgICBhdXRob3JpdHkuY29kZVVuaXRBdChob3N0RW5kKSAhPSBfQ09MT04pIHsKICAgICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBlbmQgb2YgYXV0aG9yaXR5IiwgYXV0aG9yaXR5LCBob3N0RW5kKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gU3BsaXQgaG9zdCBhbmQgcG9ydC4KICAgICAgYm9vbCBoYXNQb3J0ID0gZmFsc2U7CiAgICAgIGZvciAoOyBob3N0RW5kIDwgYXV0aG9yaXR5Lmxlbmd0aDsgaG9zdEVuZCsrKSB7CiAgICAgICAgaWYgKGF1dGhvcml0eS5jb2RlVW5pdEF0KGhvc3RFbmQpID09IF9DT0xPTikgewogICAgICAgICAgdmFyIHBvcnRTdHJpbmcgPSBhdXRob3JpdHkuc3Vic3RyaW5nKGhvc3RFbmQgKyAxKTsKICAgICAgICAgIC8vIFdlIGFsbG93IHRoZSBlbXB0eSBwb3J0IC0gZmFsbGluZyBiYWNrIHRvIGluaXRpYWwgdmFsdWUuCiAgICAgICAgICBpZiAocG9ydFN0cmluZy5pc05vdEVtcHR5KSBwb3J0ID0gaW50LnBhcnNlKHBvcnRTdHJpbmcpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGhvc3QgPSBhdXRob3JpdHkuc3Vic3RyaW5nKGhvc3RTdGFydCwgaG9zdEVuZCk7CiAgICB9CiAgICByZXR1cm4gVXJpKAogICAgICAgIHNjaGVtZTogc2NoZW1lLAogICAgICAgIHVzZXJJbmZvOiB1c2VySW5mbywKICAgICAgICBob3N0OiBob3N0LAogICAgICAgIHBvcnQ6IHBvcnQsCiAgICAgICAgcGF0aFNlZ21lbnRzOiB1bmVuY29kZWRQYXRoLnNwbGl0KCIvIiksCiAgICAgICAgcXVlcnlQYXJhbWV0ZXJzOiBxdWVyeVBhcmFtZXRlcnMpOwogIH0KCiAgLy8vIEltcGxlbWVudGF0aW9uIG9mIFtVcmkuZmlsZV0uCiAgZmFjdG9yeSBfVXJpLmZpbGUoU3RyaW5nIHBhdGgsIHtib29sIHdpbmRvd3N9KSB7CiAgICB3aW5kb3dzID0gKHdpbmRvd3MgPT0gbnVsbCkgPyBfVXJpLl9pc1dpbmRvd3MgOiB3aW5kb3dzOwogICAgcmV0dXJuIHdpbmRvd3MKICAgICAgICA/IF9tYWtlV2luZG93c0ZpbGVVcmwocGF0aCwgZmFsc2UpCiAgICAgICAgOiBfbWFrZUZpbGVVcmkocGF0aCwgZmFsc2UpOwogIH0KCiAgLy8vIEltcGxlbWVudGF0aW9uIG9mIFtVcmkuZGlyZWN0b3J5XS4KICBmYWN0b3J5IF9VcmkuZGlyZWN0b3J5KFN0cmluZyBwYXRoLCB7Ym9vbCB3aW5kb3dzfSkgewogICAgd2luZG93cyA9ICh3aW5kb3dzID09IG51bGwpID8gX1VyaS5faXNXaW5kb3dzIDogd2luZG93czsKICAgIHJldHVybiB3aW5kb3dzID8gX21ha2VXaW5kb3dzRmlsZVVybChwYXRoLCB0cnVlKSA6IF9tYWtlRmlsZVVyaShwYXRoLCB0cnVlKTsKICB9CgogIC8vLyBVc2VkIGludGVybmFsbHkgaW4gcGF0aC1yZWxhdGVkIGNvbnN0cnVjdG9ycy4KICBleHRlcm5hbCBzdGF0aWMgYm9vbCBnZXQgX2lzV2luZG93czsKCiAgc3RhdGljIF9jaGVja05vbldpbmRvd3NQYXRoUmVzZXJ2ZWRDaGFyYWN0ZXJzKAogICAgICBMaXN0PFN0cmluZz4gc2VnbWVudHMsIGJvb2wgYXJndW1lbnRFcnJvcikgewogICAgc2VnbWVudHMuZm9yRWFjaCgoc2VnbWVudCkgewogICAgICBpZiAoc2VnbWVudC5jb250YWlucygiLyIpKSB7CiAgICAgICAgaWYgKGFyZ3VtZW50RXJyb3IpIHsKICAgICAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoIklsbGVnYWwgcGF0aCBjaGFyYWN0ZXIgJHNlZ21lbnQiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiSWxsZWdhbCBwYXRoIGNoYXJhY3RlciAkc2VnbWVudCIpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfQoKICBzdGF0aWMgX2NoZWNrV2luZG93c1BhdGhSZXNlcnZlZENoYXJhY3RlcnMoCiAgICAgIExpc3Q8U3RyaW5nPiBzZWdtZW50cywgYm9vbCBhcmd1bWVudEVycm9yLAogICAgICBbaW50IGZpcnN0U2VnbWVudCA9IDBdKSB7CiAgICBmb3IgKHZhciBzZWdtZW50IGluIHNlZ21lbnRzLnNraXAoZmlyc3RTZWdtZW50KSkgewogICAgICBpZiAoc2VnbWVudC5jb250YWlucyhSZWdFeHAocidbIiovOjw+P1xcfF0nKSkpIHsKICAgICAgICBpZiAoYXJndW1lbnRFcnJvcikgewogICAgICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcigiSWxsZWdhbCBjaGFyYWN0ZXIgaW4gcGF0aCIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKCJJbGxlZ2FsIGNoYXJhY3RlciBpbiBwYXRoOiAkc2VnbWVudCIpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgc3RhdGljIF9jaGVja1dpbmRvd3NEcml2ZUxldHRlcihpbnQgY2hhckNvZGUsIGJvb2wgYXJndW1lbnRFcnJvcikgewogICAgaWYgKChfVVBQRVJfQ0FTRV9BIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IF9VUFBFUl9DQVNFX1opIHx8CiAgICAgICAgKF9MT1dFUl9DQVNFX0EgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gX0xPV0VSX0NBU0VfWikpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGFyZ3VtZW50RXJyb3IpIHsKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcigKICAgICAgICAgICJJbGxlZ2FsIGRyaXZlIGxldHRlciAiICsgU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAgICJJbGxlZ2FsIGRyaXZlIGxldHRlciAiICsgU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpOwogICAgfQogIH0KCiAgc3RhdGljIF9tYWtlRmlsZVVyaShTdHJpbmcgcGF0aCwgYm9vbCBzbGFzaFRlcm1pbmF0ZWQpIHsKICAgIGNvbnN0IFN0cmluZyBzZXAgPSAiLyI7CiAgICB2YXIgc2VnbWVudHMgPSBwYXRoLnNwbGl0KHNlcCk7CiAgICBpZiAoc2xhc2hUZXJtaW5hdGVkICYmIHNlZ21lbnRzLmlzTm90RW1wdHkgJiYgc2VnbWVudHMubGFzdC5pc05vdEVtcHR5KSB7CiAgICAgIHNlZ21lbnRzLmFkZCgiIik7IC8vIEV4dHJhIHNlcGFyYXRvciBhdCBlbmQuCiAgICB9CiAgICBpZiAocGF0aC5zdGFydHNXaXRoKHNlcCkpIHsKICAgICAgLy8gQWJzb2x1dGUgZmlsZTovLyBVUkkuCiAgICAgIHJldHVybiBVcmkoc2NoZW1lOiAiZmlsZSIsIHBhdGhTZWdtZW50czogc2VnbWVudHMpOwogICAgfSBlbHNlIHsKICAgICAgLy8gUmVsYXRpdmUgVVJJLgogICAgICByZXR1cm4gVXJpKHBhdGhTZWdtZW50czogc2VnbWVudHMpOwogICAgfQogIH0KCiAgc3RhdGljIF9tYWtlV2luZG93c0ZpbGVVcmwoU3RyaW5nIHBhdGgsIGJvb2wgc2xhc2hUZXJtaW5hdGVkKSB7CiAgICBpZiAocGF0aC5zdGFydHNXaXRoKHIiXFw/XCIpKSB7CiAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgociJVTkNcIiwgNCkpIHsKICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlUmFuZ2UoMCwgNywgcidcJyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDQpOwogICAgICAgIGlmIChwYXRoLmxlbmd0aCA8IDMgfHwKICAgICAgICAgICAgcGF0aC5jb2RlVW5pdEF0KDEpICE9IF9DT0xPTiB8fAogICAgICAgICAgICBwYXRoLmNvZGVVbml0QXQoMikgIT0gX0JBQ0tTTEFTSCkgewogICAgICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcigKICAgICAgICAgICAgICByIldpbmRvd3MgcGF0aHMgd2l0aCBcXD9cIHByZWZpeCBtdXN0IGJlIGFic29sdXRlIik7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICBwYXRoID0gcGF0aC5yZXBsYWNlQWxsKCIvIiwgcidcJyk7CiAgICB9CiAgICBjb25zdCBTdHJpbmcgc2VwID0gcidcJzsKICAgIGlmIChwYXRoLmxlbmd0aCA+IDEgJiYgcGF0aC5jb2RlVW5pdEF0KDEpID09IF9DT0xPTikgewogICAgICBfY2hlY2tXaW5kb3dzRHJpdmVMZXR0ZXIocGF0aC5jb2RlVW5pdEF0KDApLCB0cnVlKTsKICAgICAgaWYgKHBhdGgubGVuZ3RoID09IDIgfHwgcGF0aC5jb2RlVW5pdEF0KDIpICE9IF9CQUNLU0xBU0gpIHsKICAgICAgICB0aHJvdyBBcmd1bWVudEVycm9yKCJXaW5kb3dzIHBhdGhzIHdpdGggZHJpdmUgbGV0dGVyIG11c3QgYmUgYWJzb2x1dGUiKTsKICAgICAgfQogICAgICAvLyBBYnNvbHV0ZSBmaWxlOi8vQzovIFVSSS4KICAgICAgdmFyIHBhdGhTZWdtZW50cyA9IHBhdGguc3BsaXQoc2VwKTsKICAgICAgaWYgKHNsYXNoVGVybWluYXRlZCAmJiBwYXRoU2VnbWVudHMubGFzdC5pc05vdEVtcHR5KSB7CiAgICAgICAgcGF0aFNlZ21lbnRzLmFkZCgiIik7IC8vIEV4dHJhIHNlcGFyYXRvciBhdCBlbmQuCiAgICAgIH0KICAgICAgX2NoZWNrV2luZG93c1BhdGhSZXNlcnZlZENoYXJhY3RlcnMocGF0aFNlZ21lbnRzLCB0cnVlLCAxKTsKICAgICAgcmV0dXJuIFVyaShzY2hlbWU6ICJmaWxlIiwgcGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMpOwogICAgfQoKICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoc2VwKSkgewogICAgICBpZiAocGF0aC5zdGFydHNXaXRoKHNlcCwgMSkpIHsKICAgICAgICAvLyBBYnNvbHV0ZSBmaWxlOi8vIFVSSSB3aXRoIGhvc3QuCiAgICAgICAgaW50IHBhdGhTdGFydCA9IHBhdGguaW5kZXhPZihyJ1wnLCAyKTsKICAgICAgICBTdHJpbmcgaG9zdFBhcnQgPQogICAgICAgICAgICAocGF0aFN0YXJ0IDwgMCkgPyBwYXRoLnN1YnN0cmluZygyKSA6IHBhdGguc3Vic3RyaW5nKDIsIHBhdGhTdGFydCk7CiAgICAgICAgU3RyaW5nIHBhdGhQYXJ0ID0gKHBhdGhTdGFydCA8IDApID8gIiIgOiBwYXRoLnN1YnN0cmluZyhwYXRoU3RhcnQgKyAxKTsKICAgICAgICB2YXIgcGF0aFNlZ21lbnRzID0gcGF0aFBhcnQuc3BsaXQoc2VwKTsKICAgICAgICBfY2hlY2tXaW5kb3dzUGF0aFJlc2VydmVkQ2hhcmFjdGVycyhwYXRoU2VnbWVudHMsIHRydWUpOwogICAgICAgIGlmIChzbGFzaFRlcm1pbmF0ZWQgJiYgcGF0aFNlZ21lbnRzLmxhc3QuaXNOb3RFbXB0eSkgewogICAgICAgICAgcGF0aFNlZ21lbnRzLmFkZCgiIik7IC8vIEV4dHJhIHNlcGFyYXRvciBhdCBlbmQuCiAgICAgICAgfQogICAgICAgIHJldHVybiBVcmkoc2NoZW1lOiAiZmlsZSIsIGhvc3Q6IGhvc3RQYXJ0LCBwYXRoU2VnbWVudHM6IHBhdGhTZWdtZW50cyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gQWJzb2x1dGUgZmlsZTovLyBVUkkuCiAgICAgICAgdmFyIHBhdGhTZWdtZW50cyA9IHBhdGguc3BsaXQoc2VwKTsKICAgICAgICBpZiAoc2xhc2hUZXJtaW5hdGVkICYmIHBhdGhTZWdtZW50cy5sYXN0LmlzTm90RW1wdHkpIHsKICAgICAgICAgIHBhdGhTZWdtZW50cy5hZGQoIiIpOyAvLyBFeHRyYSBzZXBhcmF0b3IgYXQgZW5kLgogICAgICAgIH0KICAgICAgICBfY2hlY2tXaW5kb3dzUGF0aFJlc2VydmVkQ2hhcmFjdGVycyhwYXRoU2VnbWVudHMsIHRydWUpOwogICAgICAgIHJldHVybiBVcmkoc2NoZW1lOiAiZmlsZSIsIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgLy8gUmVsYXRpdmUgVVJJLgogICAgICB2YXIgcGF0aFNlZ21lbnRzID0gcGF0aC5zcGxpdChzZXApOwogICAgICBfY2hlY2tXaW5kb3dzUGF0aFJlc2VydmVkQ2hhcmFjdGVycyhwYXRoU2VnbWVudHMsIHRydWUpOwogICAgICBpZiAoc2xhc2hUZXJtaW5hdGVkICYmCiAgICAgICAgICBwYXRoU2VnbWVudHMuaXNOb3RFbXB0eSAmJgogICAgICAgICAgcGF0aFNlZ21lbnRzLmxhc3QuaXNOb3RFbXB0eSkgewogICAgICAgIHBhdGhTZWdtZW50cy5hZGQoIiIpOyAvLyBFeHRyYSBzZXBhcmF0b3IgYXQgZW5kLgogICAgICB9CiAgICAgIHJldHVybiBVcmkocGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMpOwogICAgfQogIH0KCiAgVXJpIHJlcGxhY2UoCiAgICAgIHtTdHJpbmcgc2NoZW1lLAogICAgICBTdHJpbmcgdXNlckluZm8sCiAgICAgIFN0cmluZyBob3N0LAogICAgICBpbnQgcG9ydCwKICAgICAgU3RyaW5nIHBhdGgsCiAgICAgIEl0ZXJhYmxlPFN0cmluZz4gcGF0aFNlZ21lbnRzLAogICAgICBTdHJpbmcgcXVlcnksCiAgICAgIE1hcDxTdHJpbmcsIGR5bmFtaWMgLypTdHJpbmd8SXRlcmFibGU8U3RyaW5nPiovID4gcXVlcnlQYXJhbWV0ZXJzLAogICAgICBTdHJpbmcgZnJhZ21lbnR9KSB7CiAgICAvLyBTZXQgdG8gdHJ1ZSBpZiB0aGUgc2NoZW1lIGhhcyAocG90ZW50aWFsbHkpIGNoYW5nZWQuCiAgICAvLyBJbiB0aGF0IGNhc2UsIHRoZSBkZWZhdWx0IHBvcnQgbWF5IGFsc28gaGF2ZSBjaGFuZ2VkIGFuZCB3ZSBuZWVkCiAgICAvLyB0byBjaGVjayBldmVuIHRoZSBleGlzdGluZyBwb3J0LgogICAgYm9vbCBzY2hlbWVDaGFuZ2VkID0gZmFsc2U7CiAgICBpZiAoc2NoZW1lICE9IG51bGwpIHsKICAgICAgc2NoZW1lID0gX21ha2VTY2hlbWUoc2NoZW1lLCAwLCBzY2hlbWUubGVuZ3RoKTsKICAgICAgc2NoZW1lQ2hhbmdlZCA9IChzY2hlbWUgIT0gdGhpcy5zY2hlbWUpOwogICAgfSBlbHNlIHsKICAgICAgc2NoZW1lID0gdGhpcy5zY2hlbWU7CiAgICB9CiAgICBib29sIGlzRmlsZSA9IChzY2hlbWUgPT0gImZpbGUiKTsKICAgIGlmICh1c2VySW5mbyAhPSBudWxsKSB7CiAgICAgIHVzZXJJbmZvID0gX21ha2VVc2VySW5mbyh1c2VySW5mbywgMCwgdXNlckluZm8ubGVuZ3RoKTsKICAgIH0gZWxzZSB7CiAgICAgIHVzZXJJbmZvID0gdGhpcy5fdXNlckluZm87CiAgICB9CiAgICBpZiAocG9ydCAhPSBudWxsKSB7CiAgICAgIHBvcnQgPSBfbWFrZVBvcnQocG9ydCwgc2NoZW1lKTsKICAgIH0gZWxzZSB7CiAgICAgIHBvcnQgPSB0aGlzLl9wb3J0OwogICAgICBpZiAoc2NoZW1lQ2hhbmdlZCkgewogICAgICAgIC8vIFRoZSBkZWZhdWx0IHBvcnQgbWlnaHQgaGF2ZSBjaGFuZ2VkLgogICAgICAgIHBvcnQgPSBfbWFrZVBvcnQocG9ydCwgc2NoZW1lKTsKICAgICAgfQogICAgfQogICAgaWYgKGhvc3QgIT0gbnVsbCkgewogICAgICBob3N0ID0gX21ha2VIb3N0KGhvc3QsIDAsIGhvc3QubGVuZ3RoLCBmYWxzZSk7CiAgICB9IGVsc2UgaWYgKHRoaXMuaGFzQXV0aG9yaXR5KSB7CiAgICAgIGhvc3QgPSB0aGlzLl9ob3N0OwogICAgfSBlbHNlIGlmICh1c2VySW5mby5pc05vdEVtcHR5IHx8IHBvcnQgIT0gbnVsbCB8fCBpc0ZpbGUpIHsKICAgICAgaG9zdCA9ICIiOwogICAgfQoKICAgIGJvb2wgaGFzQXV0aG9yaXR5ID0gaG9zdCAhPSBudWxsOwogICAgaWYgKHBhdGggIT0gbnVsbCB8fCBwYXRoU2VnbWVudHMgIT0gbnVsbCkgewogICAgICBwYXRoID0gX21ha2VQYXRoKHBhdGgsIDAsIF9zdHJpbmdPck51bGxMZW5ndGgocGF0aCksIHBhdGhTZWdtZW50cywgc2NoZW1lLAogICAgICAgICAgaGFzQXV0aG9yaXR5KTsKICAgIH0gZWxzZSB7CiAgICAgIHBhdGggPSB0aGlzLnBhdGg7CiAgICAgIGlmICgoaXNGaWxlIHx8IChoYXNBdXRob3JpdHkgJiYgIXBhdGguaXNFbXB0eSkpICYmCiAgICAgICAgICAhcGF0aC5zdGFydHNXaXRoKCcvJykpIHsKICAgICAgICBwYXRoID0gIi8iICsgcGF0aDsKICAgICAgfQogICAgfQoKICAgIGlmIChxdWVyeSAhPSBudWxsIHx8IHF1ZXJ5UGFyYW1ldGVycyAhPSBudWxsKSB7CiAgICAgIHF1ZXJ5ID0gX21ha2VRdWVyeShxdWVyeSwgMCwgX3N0cmluZ09yTnVsbExlbmd0aChxdWVyeSksIHF1ZXJ5UGFyYW1ldGVycyk7CiAgICB9IGVsc2UgewogICAgICBxdWVyeSA9IHRoaXMuX3F1ZXJ5OwogICAgfQoKICAgIGlmIChmcmFnbWVudCAhPSBudWxsKSB7CiAgICAgIGZyYWdtZW50ID0gX21ha2VGcmFnbWVudChmcmFnbWVudCwgMCwgZnJhZ21lbnQubGVuZ3RoKTsKICAgIH0gZWxzZSB7CiAgICAgIGZyYWdtZW50ID0gdGhpcy5fZnJhZ21lbnQ7CiAgICB9CgogICAgcmV0dXJuIF9VcmkuX2ludGVybmFsKHNjaGVtZSwgdXNlckluZm8sIGhvc3QsIHBvcnQsIHBhdGgsIHF1ZXJ5LCBmcmFnbWVudCk7CiAgfQoKICBVcmkgcmVtb3ZlRnJhZ21lbnQoKSB7CiAgICBpZiAoIXRoaXMuaGFzRnJhZ21lbnQpIHJldHVybiB0aGlzOwogICAgcmV0dXJuIF9VcmkuX2ludGVybmFsKHNjaGVtZSwgX3VzZXJJbmZvLCBfaG9zdCwgX3BvcnQsIHBhdGgsIF9xdWVyeSwgbnVsbCk7CiAgfQoKICBMaXN0PFN0cmluZz4gZ2V0IHBhdGhTZWdtZW50cyB7CiAgICB2YXIgcmVzdWx0ID0gX3BhdGhTZWdtZW50czsKICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgcmV0dXJuIHJlc3VsdDsKCiAgICB2YXIgcGF0aFRvU3BsaXQgPSBwYXRoOwogICAgaWYgKHBhdGhUb1NwbGl0LmlzTm90RW1wdHkgJiYgcGF0aFRvU3BsaXQuY29kZVVuaXRBdCgwKSA9PSBfU0xBU0gpIHsKICAgICAgcGF0aFRvU3BsaXQgPSBwYXRoVG9TcGxpdC5zdWJzdHJpbmcoMSk7CiAgICB9CiAgICByZXN1bHQgPSAocGF0aFRvU3BsaXQgPT0gIiIpCiAgICAgICAgPyBjb25zdCA8U3RyaW5nPltdCiAgICAgICAgOiBMaXN0PFN0cmluZz4udW5tb2RpZmlhYmxlKAogICAgICAgICAgICBwYXRoVG9TcGxpdC5zcGxpdCgiLyIpLm1hcChVcmkuZGVjb2RlQ29tcG9uZW50KSk7CiAgICBfcGF0aFNlZ21lbnRzID0gcmVzdWx0OwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0IHF1ZXJ5UGFyYW1ldGVycyB7CiAgICBfcXVlcnlQYXJhbWV0ZXJzID8/PQogICAgICAgIFVubW9kaWZpYWJsZU1hcFZpZXc8U3RyaW5nLCBTdHJpbmc+KFVyaS5zcGxpdFF1ZXJ5U3RyaW5nKHF1ZXJ5KSk7CiAgICByZXR1cm4gX3F1ZXJ5UGFyYW1ldGVyczsKICB9CgogIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gZ2V0IHF1ZXJ5UGFyYW1ldGVyc0FsbCB7CiAgICBpZiAoX3F1ZXJ5UGFyYW1ldGVyTGlzdHMgPT0gbnVsbCkgewogICAgICBNYXAgcXVlcnlQYXJhbWV0ZXJMaXN0cyA9IF9zcGxpdFF1ZXJ5U3RyaW5nQWxsKHF1ZXJ5KTsKICAgICAgZm9yICh2YXIga2V5IGluIHF1ZXJ5UGFyYW1ldGVyTGlzdHMua2V5cykgewogICAgICAgIHF1ZXJ5UGFyYW1ldGVyTGlzdHNba2V5XSA9CiAgICAgICAgICAgIExpc3Q8U3RyaW5nPi51bm1vZGlmaWFibGUocXVlcnlQYXJhbWV0ZXJMaXN0c1trZXldKTsKICAgICAgfQogICAgICBfcXVlcnlQYXJhbWV0ZXJMaXN0cyA9CiAgICAgICAgICBNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+LnVubW9kaWZpYWJsZShxdWVyeVBhcmFtZXRlckxpc3RzKTsKICAgIH0KICAgIHJldHVybiBfcXVlcnlQYXJhbWV0ZXJMaXN0czsKICB9CgogIFVyaSBub3JtYWxpemVQYXRoKCkgewogICAgU3RyaW5nIHBhdGggPSBfbm9ybWFsaXplUGF0aCh0aGlzLnBhdGgsIHNjaGVtZSwgaGFzQXV0aG9yaXR5KTsKICAgIGlmIChpZGVudGljYWwocGF0aCwgdGhpcy5wYXRoKSkgcmV0dXJuIHRoaXM7CiAgICByZXR1cm4gdGhpcy5yZXBsYWNlKHBhdGg6IHBhdGgpOwogIH0KCiAgc3RhdGljIGludCBfbWFrZVBvcnQoaW50IHBvcnQsIFN0cmluZyBzY2hlbWUpIHsKICAgIC8vIFBlcmZvcm0gc2NoZW1lIHNwZWNpZmljIG5vcm1hbGl6YXRpb24uCiAgICBpZiAocG9ydCAhPSBudWxsICYmIHBvcnQgPT0gX2RlZmF1bHRQb3J0KHNjaGVtZSkpIHJldHVybiBudWxsOwogICAgcmV0dXJuIHBvcnQ7CiAgfQoKICAvKioKICAgKiBDaGVjayBhbmQgbm9ybWFsaXplIGEgaG9zdCBuYW1lLgogICAqCiAgICogSWYgdGhlIGhvc3QgbmFtZSBzdGFydHMgYW5kIGVuZHMgd2l0aCAnWycgYW5kICddJywgaXQgaXMgY29uc2lkZXJlZCBhbgogICAqIElQdjYgYWRkcmVzcy4gSWYgW3N0cmljdElQdjZdIGlzIGZhbHNlLCB0aGUgYWRkcmVzcyBpcyBhbHNvIGNvbnNpZGVyZWQKICAgKiBhbiBJUHY2IGFkZHJlc3MgaWYgaXQgY29udGFpbnMgYW55ICc6JyBjaGFyYWN0ZXIuCiAgICoKICAgKiBJZiBpdCBpcyBub3QgYW4gSVB2NiBhZGRyZXNzLCBpdCBpcyBjYXNlLSBhbmQgZXNjYXBlLW5vcm1hbGl6ZWQuCiAgICogVGhpcyBlc2NhcGVzIGFsbCBjaGFyYWN0ZXJzIG5vdCB2YWxpZCBpbiBhIHJlZy1uYW1lLAogICAqIGFuZCBjb252ZXJ0cyBhbGwgbm9uLWVzY2FwZSB1cHBlci1jYXNlIGxldHRlcnMgdG8gbG93ZXItY2FzZS4KICAgKi8KICBzdGF0aWMgU3RyaW5nIF9tYWtlSG9zdChTdHJpbmcgaG9zdCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIHN0cmljdElQdjYpIHsKICAgIC8vIFRPRE8obHJuKTogU2hvdWxkIHdlIG5vcm1hbGl6ZSBJUHY2IGFkZHJlc3NlcyBhY2NvcmRpbmcgdG8gUkZDIDU5NTI/CiAgICBpZiAoaG9zdCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGlmIChzdGFydCA9PSBlbmQpIHJldHVybiAiIjsKICAgIC8vIEhvc3QgaXMgYW4gSVB2NiBhZGRyZXNzIGlmIGl0IHN0YXJ0cyB3aXRoICdbJyBvciBjb250YWlucyBhIGNvbG9uLgogICAgaWYgKGhvc3QuY29kZVVuaXRBdChzdGFydCkgPT0gX0xFRlRfQlJBQ0tFVCkgewogICAgICBpZiAoaG9zdC5jb2RlVW5pdEF0KGVuZCAtIDEpICE9IF9SSUdIVF9CUkFDS0VUKSB7CiAgICAgICAgX2ZhaWwoaG9zdCwgc3RhcnQsICdNaXNzaW5nIGVuZCBgXWAgdG8gbWF0Y2ggYFtgIGluIGhvc3QnKTsKICAgICAgfQogICAgICBTdHJpbmcgem9uZUlEID0gIiI7CiAgICAgIGludCBpbmRleCA9IF9jaGVja1pvbmVJRChob3N0LCBzdGFydCArIDEsIGVuZCAtIDEpOwogICAgICBpZiAoaW5kZXggPCBlbmQgLSAxKSB7CiAgICAgICAgaW50IHpvbmVJRHN0YXJ0ID0KICAgICAgICAgICAgKGhvc3Quc3RhcnRzV2l0aCgiMjUiLCBpbmRleCArIDEpKSA/IGluZGV4ICsgMyA6IGluZGV4ICsgMTsKICAgICAgICB6b25lSUQgPSBfbm9ybWFsaXplWm9uZUlEKGhvc3QsIHpvbmVJRHN0YXJ0LCBlbmQgLSAxLCAiJTI1Iik7CiAgICAgIH0KICAgICAgVXJpLnBhcnNlSVB2NkFkZHJlc3MoaG9zdCwgc3RhcnQgKyAxLCBpbmRleCk7CiAgICAgIC8vIFJGQyA1OTUyIHJlcXVpcmVzIGhleCBkaWdpdHMgdG8gYmUgbG93ZXIgY2FzZS4KICAgICAgcmV0dXJuIGhvc3Quc3Vic3RyaW5nKHN0YXJ0LCBpbmRleCkudG9Mb3dlckNhc2UoKSArIHpvbmVJRCArICddJzsKICAgIH0KICAgIGlmICghc3RyaWN0SVB2NikgewogICAgICAvLyBUT0RPKGxybik6IHNraXAgaWYgdG9vIHNob3J0IHRvIGJlIGEgdmFsaWQgSVB2NiBhZGRyZXNzPwogICAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICAgIGlmIChob3N0LmNvZGVVbml0QXQoaSkgPT0gX0NPTE9OKSB7CiAgICAgICAgICBTdHJpbmcgem9uZUlEID0gIiI7CiAgICAgICAgICBpbnQgaW5kZXggPSBfY2hlY2tab25lSUQoaG9zdCwgc3RhcnQsIGVuZCk7CiAgICAgICAgICBpZiAoaW5kZXggPCBlbmQpIHsKICAgICAgICAgICAgaW50IHpvbmVJRHN0YXJ0ID0KICAgICAgICAgICAgICAgIChob3N0LnN0YXJ0c1dpdGgoIjI1IiwgaW5kZXggKyAxKSkgPyBpbmRleCArIDMgOiBpbmRleCArIDE7CiAgICAgICAgICAgIHpvbmVJRCA9IF9ub3JtYWxpemVab25lSUQoaG9zdCwgem9uZUlEc3RhcnQsIGVuZCwgIiUyNSIpOwogICAgICAgICAgfQogICAgICAgICAgVXJpLnBhcnNlSVB2NkFkZHJlc3MoaG9zdCwgc3RhcnQsIGluZGV4KTsKICAgICAgICAgIHJldHVybiAnWyR7aG9zdC5zdWJzdHJpbmcoc3RhcnQsIGluZGV4KX0nICsgem9uZUlEICsgJ10nOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIF9ub3JtYWxpemVSZWdOYW1lKGhvc3QsIHN0YXJ0LCBlbmQpOwogIH0KCiAgLy8gUkZDIDY4NzQgY2hlY2sgZm9yIFpvbmVJRAogIC8vIFJldHVybiB0aGUgaW5kZXggb2YgZmlyc3QgYXBwZWFyZWQgYCVgLgogIHN0YXRpYyBpbnQgX2NoZWNrWm9uZUlEKFN0cmluZyBob3N0LCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIGludCBpbmRleCA9IGhvc3QuaW5kZXhPZignJScsIHN0YXJ0KTsKICAgIGluZGV4ID0gKGluZGV4ID49IHN0YXJ0ICYmIGluZGV4IDwgZW5kKSA/IGluZGV4IDogZW5kOwogICAgcmV0dXJuIGluZGV4OwogIH0KCiAgc3RhdGljIGJvb2wgX2lzWm9uZUlEQ2hhcihpbnQgY2hhcikgewogICAgcmV0dXJuIGNoYXIgPCAxMjcgJiYgKF96b25lSURUYWJsZVtjaGFyID4+IDRdICYgKDEgPDwgKGNoYXIgJiAweGYpKSkgIT0gMDsKICB9CgogIC8qKgogICAqIFZhbGlkYXRlcyBhbmQgZG9lcyBjYXNlLSBhbmQgcGVyY2VudC1lbmNvZGluZyBub3JtYWxpemF0aW9uLgogICAqCiAgICogVGhlIHNhbWUgYXMgW19ub3JtYWxpemVPclN1YnN0cmluZ10KICAgKiBleGNlcHQgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjb252ZXJ0IGNoYXJhY3RlcnMgdG8gbG93ZXIgY2FzZS4KICAgKiBUaGUgW2hvc3RdIG11c3QgYmUgYW4gUkZDNjg3NCAiWm9uZUlEIi4KICAgKiBab25lSUQgPSAxKih1bnJlc2VydmVkIC8gcGN0LWVuY29kZWQpCiAgICovCiAgc3RhdGljIFN0cmluZyBfbm9ybWFsaXplWm9uZUlEKFN0cmluZyBob3N0LCBpbnQgc3RhcnQsIGludCBlbmQsCiAgICAgIFtTdHJpbmcgcHJlZml4ID0gJyddKSB7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyOwogICAgaWYgKHByZWZpeCAhPSAnJykgewogICAgICBidWZmZXIgPSBTdHJpbmdCdWZmZXIocHJlZml4KTsKICAgIH0KICAgIGludCBzZWN0aW9uU3RhcnQgPSBzdGFydDsKICAgIGludCBpbmRleCA9IHN0YXJ0OwogICAgLy8gV2hldGhlciBhbGwgY2hhcmFjdGVycyBiZXR3ZWVuIHNlY3Rpb25TdGFydCBhbmQgaW5kZXggYXJlIG5vcm1hbGl6ZWQsCiAgICBib29sIGlzTm9ybWFsaXplZCA9IHRydWU7CgogICAgd2hpbGUgKGluZGV4IDwgZW5kKSB7CiAgICAgIGludCBjaGFyID0gaG9zdC5jb2RlVW5pdEF0KGluZGV4KTsKICAgICAgaWYgKGNoYXIgPT0gX1BFUkNFTlQpIHsKICAgICAgICBTdHJpbmcgcmVwbGFjZW1lbnQgPSBfbm9ybWFsaXplRXNjYXBlKGhvc3QsIGluZGV4LCB0cnVlKTsKICAgICAgICBpZiAocmVwbGFjZW1lbnQgPT0gbnVsbCAmJiBpc05vcm1hbGl6ZWQpIHsKICAgICAgICAgIGluZGV4ICs9IDM7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgYnVmZmVyID8/PSBTdHJpbmdCdWZmZXIoKTsKICAgICAgICBTdHJpbmcgc2xpY2UgPSBob3N0LnN1YnN0cmluZyhzZWN0aW9uU3RhcnQsIGluZGV4KTsKICAgICAgICBidWZmZXIud3JpdGUoc2xpY2UpOwogICAgICAgIGludCBzb3VyY2VMZW5ndGggPSAzOwogICAgICAgIGlmIChyZXBsYWNlbWVudCA9PSBudWxsKSB7CiAgICAgICAgICByZXBsYWNlbWVudCA9IGhvc3Quc3Vic3RyaW5nKGluZGV4LCBpbmRleCArIDMpOwogICAgICAgIH0gZWxzZSBpZiAocmVwbGFjZW1lbnQgPT0gIiUiKSB7CiAgICAgICAgICBfZmFpbChob3N0LCBpbmRleCwgIlpvbmVJRCBzaG91bGQgbm90IGNvbnRhaW4gJSBhbnltb3JlIik7CiAgICAgICAgfQogICAgICAgIGJ1ZmZlci53cml0ZShyZXBsYWNlbWVudCk7CiAgICAgICAgaW5kZXggKz0gc291cmNlTGVuZ3RoOwogICAgICAgIHNlY3Rpb25TdGFydCA9IGluZGV4OwogICAgICAgIGlzTm9ybWFsaXplZCA9IHRydWU7CiAgICAgIH0gZWxzZSBpZiAoX2lzWm9uZUlEQ2hhcihjaGFyKSkgewogICAgICAgIGlmIChpc05vcm1hbGl6ZWQgJiYgX1VQUEVSX0NBU0VfQSA8PSBjaGFyICYmIF9VUFBFUl9DQVNFX1ogPj0gY2hhcikgewogICAgICAgICAgLy8gUHV0IGluaXRpYWwgc2xpY2UgaW4gYnVmZmVyIGFuZCBjb250aW51ZSBpbiBub24tbm9ybWFsaXplZCBtb2RlCiAgICAgICAgICBidWZmZXIgPz89IFN0cmluZ0J1ZmZlcigpOwogICAgICAgICAgaWYgKHNlY3Rpb25TdGFydCA8IGluZGV4KSB7CiAgICAgICAgICAgIGJ1ZmZlci53cml0ZShob3N0LnN1YnN0cmluZyhzZWN0aW9uU3RhcnQsIGluZGV4KSk7CiAgICAgICAgICAgIHNlY3Rpb25TdGFydCA9IGluZGV4OwogICAgICAgICAgfQogICAgICAgICAgaXNOb3JtYWxpemVkID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGluZGV4Kys7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW50IHNvdXJjZUxlbmd0aCA9IDE7CiAgICAgICAgaWYgKChjaGFyICYgMHhGQzAwKSA9PSAweEQ4MDAgJiYgKGluZGV4ICsgMSkgPCBlbmQpIHsKICAgICAgICAgIGludCB0YWlsID0gaG9zdC5jb2RlVW5pdEF0KGluZGV4ICsgMSk7CiAgICAgICAgICBpZiAoKHRhaWwgJiAweEZDMDApID09IDB4REMwMCkgewogICAgICAgICAgICBjaGFyID0gMHgxMDAwMCB8ICgoY2hhciAmIDB4M2ZmKSA8PCAxMCkgfCAodGFpbCAmIDB4M2ZmKTsKICAgICAgICAgICAgc291cmNlTGVuZ3RoID0gMjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnVmZmVyID8/PSBTdHJpbmdCdWZmZXIoKTsKICAgICAgICBTdHJpbmcgc2xpY2UgPSBob3N0LnN1YnN0cmluZyhzZWN0aW9uU3RhcnQsIGluZGV4KTsKICAgICAgICBidWZmZXIud3JpdGUoc2xpY2UpOwogICAgICAgIGJ1ZmZlci53cml0ZShfZXNjYXBlQ2hhcihjaGFyKSk7CiAgICAgICAgaW5kZXggKz0gc291cmNlTGVuZ3RoOwogICAgICAgIHNlY3Rpb25TdGFydCA9IGluZGV4OwogICAgICB9CiAgICB9CiAgICBpZiAoYnVmZmVyID09IG51bGwpIHJldHVybiBob3N0LnN1YnN0cmluZyhzdGFydCwgZW5kKTsKICAgIGlmIChzZWN0aW9uU3RhcnQgPCBlbmQpIHsKICAgICAgU3RyaW5nIHNsaWNlID0gaG9zdC5zdWJzdHJpbmcoc2VjdGlvblN0YXJ0LCBlbmQpOwogICAgICBidWZmZXIud3JpdGUoc2xpY2UpOwogICAgfQogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgc3RhdGljIGJvb2wgX2lzUmVnTmFtZUNoYXIoaW50IGNoYXIpIHsKICAgIHJldHVybiBjaGFyIDwgMTI3ICYmIChfcmVnTmFtZVRhYmxlW2NoYXIgPj4gNF0gJiAoMSA8PCAoY2hhciAmIDB4ZikpKSAhPSAwOwogIH0KCiAgLyoqCiAgICogVmFsaWRhdGVzIGFuZCBkb2VzIGNhc2UtIGFuZCBwZXJjZW50LWVuY29kaW5nIG5vcm1hbGl6YXRpb24uCiAgICoKICAgKiBUaGUgW2hvc3RdIG11c3QgYmUgYW4gUkZDMzk4NiAicmVnLW5hbWUiLiBJdCBpcyBjb252ZXJ0ZWQKICAgKiB0byBsb3dlciBjYXNlLCBhbmQgcGVyY2VudCBlc2NhcGVzIGFyZSBjb252ZXJ0ZWQgdG8gZWl0aGVyCiAgICogbG93ZXIgY2FzZSB1bnJlc2VydmVkIGNoYXJhY3RlcnMgb3IgdXBwZXIgY2FzZSBlc2NhcGVzLgogICAqLwogIHN0YXRpYyBTdHJpbmcgX25vcm1hbGl6ZVJlZ05hbWUoU3RyaW5nIGhvc3QsIGludCBzdGFydCwgaW50IGVuZCkgewogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKICAgIGludCBzZWN0aW9uU3RhcnQgPSBzdGFydDsKICAgIGludCBpbmRleCA9IHN0YXJ0OwogICAgLy8gV2hldGhlciBhbGwgY2hhcmFjdGVycyBiZXR3ZWVuIHNlY3Rpb25TdGFydCBhbmQgaW5kZXggYXJlIG5vcm1hbGl6ZWQsCiAgICBib29sIGlzTm9ybWFsaXplZCA9IHRydWU7CgogICAgd2hpbGUgKGluZGV4IDwgZW5kKSB7CiAgICAgIGludCBjaGFyID0gaG9zdC5jb2RlVW5pdEF0KGluZGV4KTsKICAgICAgaWYgKGNoYXIgPT0gX1BFUkNFTlQpIHsKICAgICAgICAvLyBUaGUgX3JlZ05hbWVUYWJsZSBjb250YWlucyAiJSIsIHNvIHdlIGNoZWNrIHRoYXQgZmlyc3QuCiAgICAgICAgU3RyaW5nIHJlcGxhY2VtZW50ID0gX25vcm1hbGl6ZUVzY2FwZShob3N0LCBpbmRleCwgdHJ1ZSk7CiAgICAgICAgaWYgKHJlcGxhY2VtZW50ID09IG51bGwgJiYgaXNOb3JtYWxpemVkKSB7CiAgICAgICAgICBpbmRleCArPSAzOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGJ1ZmZlciA/Pz0gU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgU3RyaW5nIHNsaWNlID0gaG9zdC5zdWJzdHJpbmcoc2VjdGlvblN0YXJ0LCBpbmRleCk7CiAgICAgICAgaWYgKCFpc05vcm1hbGl6ZWQpIHNsaWNlID0gc2xpY2UudG9Mb3dlckNhc2UoKTsKICAgICAgICBidWZmZXIud3JpdGUoc2xpY2UpOwogICAgICAgIGludCBzb3VyY2VMZW5ndGggPSAzOwogICAgICAgIGlmIChyZXBsYWNlbWVudCA9PSBudWxsKSB7CiAgICAgICAgICByZXBsYWNlbWVudCA9IGhvc3Quc3Vic3RyaW5nKGluZGV4LCBpbmRleCArIDMpOwogICAgICAgIH0gZWxzZSBpZiAocmVwbGFjZW1lbnQgPT0gIiUiKSB7CiAgICAgICAgICByZXBsYWNlbWVudCA9ICIlMjUiOwogICAgICAgICAgc291cmNlTGVuZ3RoID0gMTsKICAgICAgICB9CiAgICAgICAgYnVmZmVyLndyaXRlKHJlcGxhY2VtZW50KTsKICAgICAgICBpbmRleCArPSBzb3VyY2VMZW5ndGg7CiAgICAgICAgc2VjdGlvblN0YXJ0ID0gaW5kZXg7CiAgICAgICAgaXNOb3JtYWxpemVkID0gdHJ1ZTsKICAgICAgfSBlbHNlIGlmIChfaXNSZWdOYW1lQ2hhcihjaGFyKSkgewogICAgICAgIGlmIChpc05vcm1hbGl6ZWQgJiYgX1VQUEVSX0NBU0VfQSA8PSBjaGFyICYmIF9VUFBFUl9DQVNFX1ogPj0gY2hhcikgewogICAgICAgICAgLy8gUHV0IGluaXRpYWwgc2xpY2UgaW4gYnVmZmVyIGFuZCBjb250aW51ZSBpbiBub24tbm9ybWFsaXplZCBtb2RlCiAgICAgICAgICBidWZmZXIgPz89IFN0cmluZ0J1ZmZlcigpOwogICAgICAgICAgaWYgKHNlY3Rpb25TdGFydCA8IGluZGV4KSB7CiAgICAgICAgICAgIGJ1ZmZlci53cml0ZShob3N0LnN1YnN0cmluZyhzZWN0aW9uU3RhcnQsIGluZGV4KSk7CiAgICAgICAgICAgIHNlY3Rpb25TdGFydCA9IGluZGV4OwogICAgICAgICAgfQogICAgICAgICAgaXNOb3JtYWxpemVkID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGluZGV4Kys7CiAgICAgIH0gZWxzZSBpZiAoX2lzR2VuZXJhbERlbGltaXRlcihjaGFyKSkgewogICAgICAgIF9mYWlsKGhvc3QsIGluZGV4LCAiSW52YWxpZCBjaGFyYWN0ZXIiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbnQgc291cmNlTGVuZ3RoID0gMTsKICAgICAgICBpZiAoKGNoYXIgJiAweEZDMDApID09IDB4RDgwMCAmJiAoaW5kZXggKyAxKSA8IGVuZCkgewogICAgICAgICAgaW50IHRhaWwgPSBob3N0LmNvZGVVbml0QXQoaW5kZXggKyAxKTsKICAgICAgICAgIGlmICgodGFpbCAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7CiAgICAgICAgICAgIGNoYXIgPSAweDEwMDAwIHwgKChjaGFyICYgMHgzZmYpIDw8IDEwKSB8ICh0YWlsICYgMHgzZmYpOwogICAgICAgICAgICBzb3VyY2VMZW5ndGggPSAyOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBidWZmZXIgPz89IFN0cmluZ0J1ZmZlcigpOwogICAgICAgIFN0cmluZyBzbGljZSA9IGhvc3Quc3Vic3RyaW5nKHNlY3Rpb25TdGFydCwgaW5kZXgpOwogICAgICAgIGlmICghaXNOb3JtYWxpemVkKSBzbGljZSA9IHNsaWNlLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgYnVmZmVyLndyaXRlKHNsaWNlKTsKICAgICAgICBidWZmZXIud3JpdGUoX2VzY2FwZUNoYXIoY2hhcikpOwogICAgICAgIGluZGV4ICs9IHNvdXJjZUxlbmd0aDsKICAgICAgICBzZWN0aW9uU3RhcnQgPSBpbmRleDsKICAgICAgfQogICAgfQogICAgaWYgKGJ1ZmZlciA9PSBudWxsKSByZXR1cm4gaG9zdC5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7CiAgICBpZiAoc2VjdGlvblN0YXJ0IDwgZW5kKSB7CiAgICAgIFN0cmluZyBzbGljZSA9IGhvc3Quc3Vic3RyaW5nKHNlY3Rpb25TdGFydCwgZW5kKTsKICAgICAgaWYgKCFpc05vcm1hbGl6ZWQpIHNsaWNlID0gc2xpY2UudG9Mb3dlckNhc2UoKTsKICAgICAgYnVmZmVyLndyaXRlKHNsaWNlKTsKICAgIH0KICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIC8qKgogICAqIFZhbGlkYXRlcyBzY2hlbWUgY2hhcmFjdGVycyBhbmQgZG9lcyBjYXNlLW5vcm1hbGl6YXRpb24uCiAgICoKICAgKiBTY2hlbWVzIGFyZSBjb252ZXJ0ZWQgdG8gbG93ZXIgY2FzZS4gVGhleSBjYW5ub3QgY29udGFpbiBlc2NhcGVzLgogICAqLwogIHN0YXRpYyBTdHJpbmcgX21ha2VTY2hlbWUoU3RyaW5nIHNjaGVtZSwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBpZiAoc3RhcnQgPT0gZW5kKSByZXR1cm4gIiI7CiAgICBmaW5hbCBpbnQgZmlyc3RDb2RlVW5pdCA9IHNjaGVtZS5jb2RlVW5pdEF0KHN0YXJ0KTsKICAgIGlmICghX2lzQWxwaGFiZXRpY0NoYXJhY3RlcihmaXJzdENvZGVVbml0KSkgewogICAgICBfZmFpbChzY2hlbWUsIHN0YXJ0LCAiU2NoZW1lIG5vdCBzdGFydGluZyB3aXRoIGFscGhhYmV0aWMgY2hhcmFjdGVyIik7CiAgICB9CiAgICBib29sIGNvbnRhaW5zVXBwZXJDYXNlID0gZmFsc2U7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICBmaW5hbCBpbnQgY29kZVVuaXQgPSBzY2hlbWUuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKCFfaXNTY2hlbWVDaGFyYWN0ZXIoY29kZVVuaXQpKSB7CiAgICAgICAgX2ZhaWwoc2NoZW1lLCBpLCAiSWxsZWdhbCBzY2hlbWUgY2hhcmFjdGVyIik7CiAgICAgIH0KICAgICAgaWYgKF9VUFBFUl9DQVNFX0EgPD0gY29kZVVuaXQgJiYgY29kZVVuaXQgPD0gX1VQUEVSX0NBU0VfWikgewogICAgICAgIGNvbnRhaW5zVXBwZXJDYXNlID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgc2NoZW1lID0gc2NoZW1lLnN1YnN0cmluZyhzdGFydCwgZW5kKTsKICAgIGlmIChjb250YWluc1VwcGVyQ2FzZSkgc2NoZW1lID0gc2NoZW1lLnRvTG93ZXJDYXNlKCk7CiAgICByZXR1cm4gX2Nhbm9uaWNhbGl6ZVNjaGVtZShzY2hlbWUpOwogIH0KCiAgLy8gQ2Fub25pY2FsaXplIGEgZmV3IG9mdGVuLXVzZWQgc2NoZW1lIHN0cmluZ3MuCiAgLy8KICAvLyBUaGlzIGltcHJvdmVzIG1lbW9yeSB1c2FnZSBhbmQgbWFrZXMgY29tcGFyaXNvbiBmYXN0ZXIuCiAgc3RhdGljIFN0cmluZyBfY2Fub25pY2FsaXplU2NoZW1lKFN0cmluZyBzY2hlbWUpIHsKICAgIGlmIChzY2hlbWUgPT0gImh0dHAiKSByZXR1cm4gImh0dHAiOwogICAgaWYgKHNjaGVtZSA9PSAiZmlsZSIpIHJldHVybiAiZmlsZSI7CiAgICBpZiAoc2NoZW1lID09ICJodHRwcyIpIHJldHVybiAiaHR0cHMiOwogICAgaWYgKHNjaGVtZSA9PSAicGFja2FnZSIpIHJldHVybiAicGFja2FnZSI7CiAgICByZXR1cm4gc2NoZW1lOwogIH0KCiAgc3RhdGljIFN0cmluZyBfbWFrZVVzZXJJbmZvKFN0cmluZyB1c2VySW5mbywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBpZiAodXNlckluZm8gPT0gbnVsbCkgcmV0dXJuICIiOwogICAgcmV0dXJuIF9ub3JtYWxpemVPclN1YnN0cmluZyh1c2VySW5mbywgc3RhcnQsIGVuZCwgX3VzZXJpbmZvVGFibGUpOwogIH0KCiAgc3RhdGljIFN0cmluZyBfbWFrZVBhdGgoU3RyaW5nIHBhdGgsIGludCBzdGFydCwgaW50IGVuZCwKICAgICAgSXRlcmFibGU8U3RyaW5nPiBwYXRoU2VnbWVudHMsIFN0cmluZyBzY2hlbWUsIGJvb2wgaGFzQXV0aG9yaXR5KSB7CiAgICBib29sIGlzRmlsZSA9IChzY2hlbWUgPT0gImZpbGUiKTsKICAgIGJvb2wgZW5zdXJlTGVhZGluZ1NsYXNoID0gaXNGaWxlIHx8IGhhc0F1dGhvcml0eTsKICAgIGlmIChwYXRoID09IG51bGwgJiYgcGF0aFNlZ21lbnRzID09IG51bGwpIHJldHVybiBpc0ZpbGUgPyAiLyIgOiAiIjsKICAgIGlmIChwYXRoICE9IG51bGwgJiYgcGF0aFNlZ21lbnRzICE9IG51bGwpIHsKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcignQm90aCBwYXRoIGFuZCBwYXRoU2VnbWVudHMgc3BlY2lmaWVkJyk7CiAgICB9CiAgICBTdHJpbmcgcmVzdWx0OwogICAgaWYgKHBhdGggIT0gbnVsbCkgewogICAgICByZXN1bHQgPSBfbm9ybWFsaXplT3JTdWJzdHJpbmcocGF0aCwgc3RhcnQsIGVuZCwgX3BhdGhDaGFyT3JTbGFzaFRhYmxlLAogICAgICAgICAgZXNjYXBlRGVsaW1pdGVyczogdHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICByZXN1bHQgPSBwYXRoU2VnbWVudHMKICAgICAgICAgIC5tYXAoKHMpID0+IF91cmlFbmNvZGUoX3BhdGhDaGFyVGFibGUsIHMsIHV0ZjgsIGZhbHNlKSkKICAgICAgICAgIC5qb2luKCIvIik7CiAgICB9CiAgICBpZiAocmVzdWx0LmlzRW1wdHkpIHsKICAgICAgaWYgKGlzRmlsZSkgcmV0dXJuICIvIjsKICAgIH0gZWxzZSBpZiAoZW5zdXJlTGVhZGluZ1NsYXNoICYmICFyZXN1bHQuc3RhcnRzV2l0aCgnLycpKSB7CiAgICAgIHJlc3VsdCA9ICIvIiArIHJlc3VsdDsKICAgIH0KICAgIHJlc3VsdCA9IF9ub3JtYWxpemVQYXRoKHJlc3VsdCwgc2NoZW1lLCBoYXNBdXRob3JpdHkpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBQZXJmb3JtcyBwYXRoIG5vcm1hbGl6YXRpb24gKHJlbW92ZSBkb3Qgc2VnbWVudHMpIG9uIGEgcGF0aC4KICAvLy8KICAvLy8gSWYgdGhlIFVSSSBoYXMgbmVpdGhlciBzY2hlbWUgbm9yIGF1dGhvcml0eSwgaXQncyBjb25zaWRlcmVkIGEKICAvLy8gInB1cmUgcGF0aCIgYW5kIG5vcm1hbGl6YXRpb24gd29uJ3QgcmVtb3ZlIGxlYWRpbmcgIi4uIiBzZWdtZW50cy4KICAvLy8gT3RoZXJ3aXNlIGl0IGZvbGxvd3MgdGhlIFJGQyAzOTg2ICJyZW1vdmUgZG90IHNlZ21lbnRzIiBhbGdvcml0aG0uCiAgc3RhdGljIFN0cmluZyBfbm9ybWFsaXplUGF0aChTdHJpbmcgcGF0aCwgU3RyaW5nIHNjaGVtZSwgYm9vbCBoYXNBdXRob3JpdHkpIHsKICAgIGlmIChzY2hlbWUuaXNFbXB0eSAmJiAhaGFzQXV0aG9yaXR5ICYmICFwYXRoLnN0YXJ0c1dpdGgoJy8nKSkgewogICAgICByZXR1cm4gX25vcm1hbGl6ZVJlbGF0aXZlUGF0aChwYXRoLCBzY2hlbWUuaXNOb3RFbXB0eSB8fCBoYXNBdXRob3JpdHkpOwogICAgfQogICAgcmV0dXJuIF9yZW1vdmVEb3RTZWdtZW50cyhwYXRoKTsKICB9CgogIHN0YXRpYyBTdHJpbmcgX21ha2VRdWVyeShTdHJpbmcgcXVlcnksIGludCBzdGFydCwgaW50IGVuZCwKICAgICAgTWFwPFN0cmluZywgZHluYW1pYyAvKlN0cmluZ3xJdGVyYWJsZTxTdHJpbmc+Ki8gPiBxdWVyeVBhcmFtZXRlcnMpIHsKICAgIGlmIChxdWVyeSAhPSBudWxsKSB7CiAgICAgIGlmIChxdWVyeVBhcmFtZXRlcnMgIT0gbnVsbCkgewogICAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoJ0JvdGggcXVlcnkgYW5kIHF1ZXJ5UGFyYW1ldGVycyBzcGVjaWZpZWQnKTsKICAgICAgfQogICAgICByZXR1cm4gX25vcm1hbGl6ZU9yU3Vic3RyaW5nKHF1ZXJ5LCBzdGFydCwgZW5kLCBfcXVlcnlDaGFyVGFibGUsCiAgICAgICAgICBlc2NhcGVEZWxpbWl0ZXJzOiB0cnVlKTsKICAgIH0KICAgIGlmIChxdWVyeVBhcmFtZXRlcnMgPT0gbnVsbCkgcmV0dXJuIG51bGw7CgogICAgdmFyIHJlc3VsdCA9IFN0cmluZ0J1ZmZlcigpOwogICAgdmFyIHNlcGFyYXRvciA9ICIiOwoKICAgIHZvaWQgd3JpdGVQYXJhbWV0ZXIoU3RyaW5nIGtleSwgU3RyaW5nIHZhbHVlKSB7CiAgICAgIHJlc3VsdC53cml0ZShzZXBhcmF0b3IpOwogICAgICBzZXBhcmF0b3IgPSAiJiI7CiAgICAgIHJlc3VsdC53cml0ZShVcmkuZW5jb2RlUXVlcnlDb21wb25lbnQoa2V5KSk7CiAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlLmlzTm90RW1wdHkpIHsKICAgICAgICByZXN1bHQud3JpdGUoIj0iKTsKICAgICAgICByZXN1bHQud3JpdGUoVXJpLmVuY29kZVF1ZXJ5Q29tcG9uZW50KHZhbHVlKSk7CiAgICAgIH0KICAgIH0KCiAgICBxdWVyeVBhcmFtZXRlcnMuZm9yRWFjaCgoa2V5LCB2YWx1ZSkgewogICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSBpcyBTdHJpbmcpIHsKICAgICAgICB3cml0ZVBhcmFtZXRlcihrZXksIHZhbHVlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBJdGVyYWJsZSB2YWx1ZXMgPSB2YWx1ZTsKICAgICAgICBmb3IgKFN0cmluZyB2YWx1ZSBpbiB2YWx1ZXMpIHsKICAgICAgICAgIHdyaXRlUGFyYW1ldGVyKGtleSwgdmFsdWUpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiAgfQoKICBzdGF0aWMgU3RyaW5nIF9tYWtlRnJhZ21lbnQoU3RyaW5nIGZyYWdtZW50LCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIGlmIChmcmFnbWVudCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfbm9ybWFsaXplT3JTdWJzdHJpbmcoZnJhZ21lbnQsIHN0YXJ0LCBlbmQsIF9xdWVyeUNoYXJUYWJsZSwKICAgICAgICBlc2NhcGVEZWxpbWl0ZXJzOiB0cnVlKTsKICB9CgogIC8qKgogICAqIFBlcmZvcm1zIFJGQyAzOTg2IFBlcmNlbnQtRW5jb2RpbmcgTm9ybWFsaXphdGlvbi4KICAgKgogICAqIFJldHVybnMgYSByZXBsYWNlbWVudCBzdHJpbmcgdGhhdCBzaG91bGQgYmUgcmVwbGFjZSB0aGUgb3JpZ2luYWwgZXNjYXBlLgogICAqIFJldHVybnMgbnVsbCBpZiBubyByZXBsYWNlbWVudCBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgZXNjYXBlIGlzCiAgICogbm90IGZvciBhbiB1bnJlc2VydmVkIGNoYXJhY3RlciBhbmQgaXMgYWxyZWFkeSBub24tbG93ZXItY2FzZS4KICAgKgogICAqIFJldHVybnMgIiUiIGlmIHRoZSBlc2NhcGUgaXMgaW52YWxpZCAobm90IHR3byB2YWxpZCBoZXggZGlnaXRzIGZvbGxvd2luZwogICAqIHRoZSBwZXJjZW50IHNpZ24pLiBUaGUgY2FsbGluZyBjb2RlIHNob3VsZCByZXBsYWNlIHRoZSBwZXJjZW50CiAgICogc2lnbiB3aXRoICIlMjUiLCBidXQgbGVhdmUgdGhlIGZvbGxvd2luZyB0d28gY2hhcmFjdGVycyB1bm1vZGlmaWVkLgogICAqCiAgICogSWYgW2xvd2VyQ2FzZV0gaXMgdHJ1ZSwgYSBzaW5nbGUgY2hhcmFjdGVyIHJldHVybmVkIGlzIGFsd2F5cyBsb3dlciBjYXNlLAogICAqLwogIHN0YXRpYyBTdHJpbmcgX25vcm1hbGl6ZUVzY2FwZShTdHJpbmcgc291cmNlLCBpbnQgaW5kZXgsIGJvb2wgbG93ZXJDYXNlKSB7CiAgICBhc3NlcnQoc291cmNlLmNvZGVVbml0QXQoaW5kZXgpID09IF9QRVJDRU5UKTsKICAgIGlmIChpbmRleCArIDIgPj0gc291cmNlLmxlbmd0aCkgewogICAgICByZXR1cm4gIiUiOyAvLyBNYXJrcyB0aGUgZXNjYXBlIGFzIGludmFsaWQuCiAgICB9CiAgICBpbnQgZmlyc3REaWdpdCA9IHNvdXJjZS5jb2RlVW5pdEF0KGluZGV4ICsgMSk7CiAgICBpbnQgc2Vjb25kRGlnaXQgPSBzb3VyY2UuY29kZVVuaXRBdChpbmRleCArIDIpOwogICAgaW50IGZpcnN0RGlnaXRWYWx1ZSA9IGhleERpZ2l0VmFsdWUoZmlyc3REaWdpdCk7CiAgICBpbnQgc2Vjb25kRGlnaXRWYWx1ZSA9IGhleERpZ2l0VmFsdWUoc2Vjb25kRGlnaXQpOwogICAgaWYgKGZpcnN0RGlnaXRWYWx1ZSA8IDAgfHwgc2Vjb25kRGlnaXRWYWx1ZSA8IDApIHsKICAgICAgcmV0dXJuICIlIjsgLy8gTWFya3MgdGhlIGVzY2FwZSBhcyBpbnZhbGlkLgogICAgfQogICAgaW50IHZhbHVlID0gZmlyc3REaWdpdFZhbHVlICogMTYgKyBzZWNvbmREaWdpdFZhbHVlOwogICAgaWYgKF9pc1VucmVzZXJ2ZWRDaGFyKHZhbHVlKSkgewogICAgICBpZiAobG93ZXJDYXNlICYmIF9VUFBFUl9DQVNFX0EgPD0gdmFsdWUgJiYgX1VQUEVSX0NBU0VfWiA+PSB2YWx1ZSkgewogICAgICAgIHZhbHVlIHw9IDB4MjA7CiAgICAgIH0KICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodmFsdWUpOwogICAgfQogICAgaWYgKGZpcnN0RGlnaXQgPj0gX0xPV0VSX0NBU0VfQSB8fCBzZWNvbmREaWdpdCA+PSBfTE9XRVJfQ0FTRV9BKSB7CiAgICAgIC8vIEVpdGhlciBkaWdpdCBpcyBsb3dlciBjYXNlLgogICAgICByZXR1cm4gc291cmNlLnN1YnN0cmluZyhpbmRleCwgaW5kZXggKyAzKS50b1VwcGVyQ2FzZSgpOwogICAgfQogICAgLy8gRXNjYXBlIGlzIHJldGFpbmVkLCBhbmQgaXMgYWxyZWFkeSBub24tbG93ZXIgY2FzZSwgc28gcmV0dXJuIG51bGwgdG8KICAgIC8vIHJlcHJlc2VudCAibm8gcmVwbGFjZW1lbnQgbmVjZXNzYXJ5Ii4KICAgIHJldHVybiBudWxsOwogIH0KCiAgc3RhdGljIFN0cmluZyBfZXNjYXBlQ2hhcihpbnQgY2hhcikgewogICAgYXNzZXJ0KGNoYXIgPD0gMHgxMGZmZmYpOyAvLyBJdCdzIGEgdmFsaWQgdW5pY29kZSBjb2RlIHBvaW50LgogICAgTGlzdDxpbnQ+IGNvZGVVbml0czsKICAgIGlmIChjaGFyIDwgMHg4MCkgewogICAgICAvLyBBU0NJSSwgYSBzaW5nbGUgcGVyY2VudCBlbmNvZGVkIHNlcXVlbmNlLgogICAgICBjb2RlVW5pdHMgPSBMaXN0KDMpOwogICAgICBjb2RlVW5pdHNbMF0gPSBfUEVSQ0VOVDsKICAgICAgY29kZVVuaXRzWzFdID0gX2hleERpZ2l0cy5jb2RlVW5pdEF0KGNoYXIgPj4gNCk7CiAgICAgIGNvZGVVbml0c1syXSA9IF9oZXhEaWdpdHMuY29kZVVuaXRBdChjaGFyICYgMHhmKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIERvIFVURi04IGVuY29kaW5nIG9mIGNoYXJhY3RlciwgdGhlbiBwZXJjZW50IGVuY29kZSBieXRlcy4KICAgICAgaW50IGZsYWcgPSAweGMwOyAvLyBUaGUgaGlnaC1iaXQgbWFya2VycyBvbiB0aGUgZmlyc3QgYnl0ZSBvZiBVVEYtOC4KICAgICAgaW50IGVuY29kZWRCeXRlcyA9IDI7CiAgICAgIGlmIChjaGFyID4gMHg3ZmYpIHsKICAgICAgICBmbGFnID0gMHhlMDsKICAgICAgICBlbmNvZGVkQnl0ZXMgPSAzOwogICAgICAgIGlmIChjaGFyID4gMHhmZmZmKSB7CiAgICAgICAgICBlbmNvZGVkQnl0ZXMgPSA0OwogICAgICAgICAgZmxhZyA9IDB4ZjA7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvZGVVbml0cyA9IExpc3QoMyAqIGVuY29kZWRCeXRlcyk7CiAgICAgIGludCBpbmRleCA9IDA7CiAgICAgIHdoaWxlICgtLWVuY29kZWRCeXRlcyA+PSAwKSB7CiAgICAgICAgaW50IGJ5dGUgPSAoKGNoYXIgPj4gKDYgKiBlbmNvZGVkQnl0ZXMpKSAmIDB4M2YpIHwgZmxhZzsKICAgICAgICBjb2RlVW5pdHNbaW5kZXhdID0gX1BFUkNFTlQ7CiAgICAgICAgY29kZVVuaXRzW2luZGV4ICsgMV0gPSBfaGV4RGlnaXRzLmNvZGVVbml0QXQoYnl0ZSA+PiA0KTsKICAgICAgICBjb2RlVW5pdHNbaW5kZXggKyAyXSA9IF9oZXhEaWdpdHMuY29kZVVuaXRBdChieXRlICYgMHhmKTsKICAgICAgICBpbmRleCArPSAzOwogICAgICAgIGZsYWcgPSAweDgwOyAvLyBGb2xsb3dpbmcgYnl0ZXMgaGF2ZSBvbmx5IGhpZ2ggYml0IHNldC4KICAgICAgfQogICAgfQogICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGVzKGNvZGVVbml0cyk7CiAgfQoKICAvKioKICAgKiBOb3JtYWxpemVzIHVzaW5nIFtfbm9ybWFsaXplXSBvciByZXR1cm5zIHN1YnN0cmluZyBvZiBvcmlnaW5hbC4KICAgKgogICAqIElmIFtfbm9ybWFsaXplXSByZXR1cm5zIGBudWxsYCAob3JpZ2luYWwgY29udGVudCBpcyBhbHJlYWR5IG5vcm1hbGl6ZWQpLAogICAqIHRoaXMgbWV0aG9kcyByZXR1cm5zIHRoZSBzdWJzdHJpbmcgaWYgW2NvbXBvbmVudF0gZnJvbSBbc3RhcnRdIHRvIFtlbmRdLgogICAqLwogIHN0YXRpYyBTdHJpbmcgX25vcm1hbGl6ZU9yU3Vic3RyaW5nKAogICAgICBTdHJpbmcgY29tcG9uZW50LCBpbnQgc3RhcnQsIGludCBlbmQsIExpc3Q8aW50PiBjaGFyVGFibGUsCiAgICAgIHtib29sIGVzY2FwZURlbGltaXRlcnMgPSBmYWxzZX0pIHsKICAgIHJldHVybiBfbm9ybWFsaXplKGNvbXBvbmVudCwgc3RhcnQsIGVuZCwgY2hhclRhYmxlLAogICAgICAgICAgICBlc2NhcGVEZWxpbWl0ZXJzOiBlc2NhcGVEZWxpbWl0ZXJzKSA/PwogICAgICAgIGNvbXBvbmVudC5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7CiAgfQoKICAvKioKICAgKiBSdW5zIHRocm91Z2ggY29tcG9uZW50IGNoZWNraW5nIHRoYXQgZWFjaCBjaGFyYWN0ZXIgaXMgdmFsaWQgYW5kCiAgICogbm9ybWFsaXplIHBlcmNlbnQgZXNjYXBlcy4KICAgKgogICAqIFVzZXMgW2NoYXJUYWJsZV0gdG8gY2hlY2sgaWYgYSBub24tYCVgIGNoYXJhY3RlciBpcyBhbGxvd2VkLgogICAqIEVhY2ggYCVgIGNoYXJhY3RlciBtdXN0IGJlIGZvbGxvd2VkIGJ5IHR3byBoZXggZGlnaXRzLgogICAqIElmIHRoZSBoZXgtZGlnaXRzIGFyZSBsb3dlciBjYXNlIGxldHRlcnMsIHRoZXkgYXJlIGNvbnZlcnRlZCB0bwogICAqIHVwcGVyIGNhc2UuCiAgICoKICAgKiBSZXR1cm5zIGBudWxsYCBpZiB0aGUgb3JpZ2luYWwgY29udGVudCB3YXMgYWxyZWFkeSBub3JtYWxpemVkLgogICAqLwogIHN0YXRpYyBTdHJpbmcgX25vcm1hbGl6ZSgKICAgICAgU3RyaW5nIGNvbXBvbmVudCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBMaXN0PGludD4gY2hhclRhYmxlLAogICAgICB7Ym9vbCBlc2NhcGVEZWxpbWl0ZXJzID0gZmFsc2V9KSB7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyOwogICAgaW50IHNlY3Rpb25TdGFydCA9IHN0YXJ0OwogICAgaW50IGluZGV4ID0gc3RhcnQ7CiAgICAvLyBMb29wIHdoaWxlIGNoYXJhY3RlcnMgYXJlIHZhbGlkIGFuZCBlc2NhcGVzIGNvcnJlY3QgYW5kIHVwcGVyLWNhc2UuCiAgICB3aGlsZSAoaW5kZXggPCBlbmQpIHsKICAgICAgaW50IGNoYXIgPSBjb21wb25lbnQuY29kZVVuaXRBdChpbmRleCk7CiAgICAgIGlmIChjaGFyIDwgMTI3ICYmIChjaGFyVGFibGVbY2hhciA+PiA0XSAmICgxIDw8IChjaGFyICYgMHgwZikpKSAhPSAwKSB7CiAgICAgICAgaW5kZXgrKzsKICAgICAgfSBlbHNlIHsKICAgICAgICBTdHJpbmcgcmVwbGFjZW1lbnQ7CiAgICAgICAgaW50IHNvdXJjZUxlbmd0aDsKICAgICAgICBpZiAoY2hhciA9PSBfUEVSQ0VOVCkgewogICAgICAgICAgcmVwbGFjZW1lbnQgPSBfbm9ybWFsaXplRXNjYXBlKGNvbXBvbmVudCwgaW5kZXgsIGZhbHNlKTsKICAgICAgICAgIC8vIFJldHVybnMgbnVsbCBpZiB3ZSBzaG91bGQga2VlcCB0aGUgZXhpc3RpbmcgZXNjYXBlLgogICAgICAgICAgaWYgKHJlcGxhY2VtZW50ID09IG51bGwpIHsKICAgICAgICAgICAgaW5kZXggKz0gMzsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBSZXR1cm5zICIlIiBpZiB3ZSBzaG91bGQgZXNjYXBlIHRoZSBleGlzdGluZyBwZXJjZW50LgogICAgICAgICAgaWYgKCIlIiA9PSByZXBsYWNlbWVudCkgewogICAgICAgICAgICByZXBsYWNlbWVudCA9ICIlMjUiOwogICAgICAgICAgICBzb3VyY2VMZW5ndGggPSAxOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc291cmNlTGVuZ3RoID0gMzsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKCFlc2NhcGVEZWxpbWl0ZXJzICYmIF9pc0dlbmVyYWxEZWxpbWl0ZXIoY2hhcikpIHsKICAgICAgICAgIF9mYWlsKGNvbXBvbmVudCwgaW5kZXgsICJJbnZhbGlkIGNoYXJhY3RlciIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzb3VyY2VMZW5ndGggPSAxOwogICAgICAgICAgaWYgKChjaGFyICYgMHhGQzAwKSA9PSAweEQ4MDApIHsKICAgICAgICAgICAgLy8gUG9zc2libGUgbGVhZCBzdXJyb2dhdGUuCiAgICAgICAgICAgIGlmIChpbmRleCArIDEgPCBlbmQpIHsKICAgICAgICAgICAgICBpbnQgdGFpbCA9IGNvbXBvbmVudC5jb2RlVW5pdEF0KGluZGV4ICsgMSk7CiAgICAgICAgICAgICAgaWYgKCh0YWlsICYgMHhGQzAwKSA9PSAweERDMDApIHsKICAgICAgICAgICAgICAgIC8vIFRhaWwgc3Vycm9nYXRlLgogICAgICAgICAgICAgICAgc291cmNlTGVuZ3RoID0gMjsKICAgICAgICAgICAgICAgIGNoYXIgPSAweDEwMDAwIHwgKChjaGFyICYgMHgzZmYpIDw8IDEwKSB8ICh0YWlsICYgMHgzZmYpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmVwbGFjZW1lbnQgPSBfZXNjYXBlQ2hhcihjaGFyKTsKICAgICAgICB9CiAgICAgICAgYnVmZmVyID8/PSBTdHJpbmdCdWZmZXIoKTsKICAgICAgICBidWZmZXIud3JpdGUoY29tcG9uZW50LnN1YnN0cmluZyhzZWN0aW9uU3RhcnQsIGluZGV4KSk7CiAgICAgICAgYnVmZmVyLndyaXRlKHJlcGxhY2VtZW50KTsKICAgICAgICBpbmRleCArPSBzb3VyY2VMZW5ndGg7CiAgICAgICAgc2VjdGlvblN0YXJ0ID0gaW5kZXg7CiAgICAgIH0KICAgIH0KICAgIGlmIChidWZmZXIgPT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmIChzZWN0aW9uU3RhcnQgPCBlbmQpIHsKICAgICAgYnVmZmVyLndyaXRlKGNvbXBvbmVudC5zdWJzdHJpbmcoc2VjdGlvblN0YXJ0LCBlbmQpKTsKICAgIH0KICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIHN0YXRpYyBib29sIF9pc1NjaGVtZUNoYXJhY3RlcihpbnQgY2gpIHsKICAgIHJldHVybiBjaCA8IDEyOCAmJiAoKF9zY2hlbWVUYWJsZVtjaCA+PiA0XSAmICgxIDw8IChjaCAmIDB4MGYpKSkgIT0gMCk7CiAgfQoKICBzdGF0aWMgYm9vbCBfaXNHZW5lcmFsRGVsaW1pdGVyKGludCBjaCkgewogICAgcmV0dXJuIGNoIDw9IF9SSUdIVF9CUkFDS0VUICYmCiAgICAgICAgKChfZ2VuRGVsaW1pdGVyc1RhYmxlW2NoID4+IDRdICYgKDEgPDwgKGNoICYgMHgwZikpKSAhPSAwKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgd2hldGhlciB0aGUgVVJJIGlzIGFic29sdXRlLgogICAqLwogIGJvb2wgZ2V0IGlzQWJzb2x1dGUgPT4gc2NoZW1lICE9ICIiICYmIGZyYWdtZW50ID09ICIiOwoKICBTdHJpbmcgX21lcmdlUGF0aHMoU3RyaW5nIGJhc2UsIFN0cmluZyByZWZlcmVuY2UpIHsKICAgIC8vIE9wdGltaXplIGZvciB0aGUgY2FzZTogYWJzb2x1dGUgYmFzZSwgcmVmZXJlbmNlIGJlZ2lubmluZyB3aXRoICIuLi8iLgogICAgaW50IGJhY2tDb3VudCA9IDA7CiAgICBpbnQgcmVmU3RhcnQgPSAwOwogICAgLy8gQ291bnQgbnVtYmVyIG9mICIuLi8iIGF0IGJlZ2lubmluZyBvZiByZWZlcmVuY2UuCiAgICB3aGlsZSAocmVmZXJlbmNlLnN0YXJ0c1dpdGgoIi4uLyIsIHJlZlN0YXJ0KSkgewogICAgICByZWZTdGFydCArPSAzOwogICAgICBiYWNrQ291bnQrKzsKICAgIH0KCiAgICAvLyBEcm9wIGxhc3Qgc2VnbWVudCAtIGV2ZXJ5dGhpbmcgYWZ0ZXIgbGFzdCAnLycgb2YgYmFzZS4KICAgIGludCBiYXNlRW5kID0gYmFzZS5sYXN0SW5kZXhPZignLycpOwogICAgLy8gRHJvcCBleHRyYSBzZWdtZW50cyBmb3IgZWFjaCBsZWFkaW5nICIuLi8iIG9mIHJlZmVyZW5jZS4KICAgIHdoaWxlIChiYXNlRW5kID4gMCAmJiBiYWNrQ291bnQgPiAwKSB7CiAgICAgIGludCBuZXdFbmQgPSBiYXNlLmxhc3RJbmRleE9mKCcvJywgYmFzZUVuZCAtIDEpOwogICAgICBpZiAobmV3RW5kIDwgMCkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGludCBkZWx0YSA9IGJhc2VFbmQgLSBuZXdFbmQ7CiAgICAgIC8vIElmIHdlIHNlZSBhICIuIiBvciAiLi4iIHNlZ21lbnQgaW4gYmFzZSwgc3RvcCBoZXJlIGFuZCBsZXQKICAgICAgLy8gX3JlbW92ZURvdFNlZ21lbnRzIGhhbmRsZSBpdC4KICAgICAgaWYgKChkZWx0YSA9PSAyIHx8IGRlbHRhID09IDMpICYmCiAgICAgICAgICBiYXNlLmNvZGVVbml0QXQobmV3RW5kICsgMSkgPT0gX0RPVCAmJgogICAgICAgICAgKGRlbHRhID09IDIgfHwgYmFzZS5jb2RlVW5pdEF0KG5ld0VuZCArIDIpID09IF9ET1QpKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgYmFzZUVuZCA9IG5ld0VuZDsKICAgICAgYmFja0NvdW50LS07CiAgICB9CiAgICByZXR1cm4gYmFzZS5yZXBsYWNlUmFuZ2UoCiAgICAgICAgYmFzZUVuZCArIDEsIG51bGwsIHJlZmVyZW5jZS5zdWJzdHJpbmcocmVmU3RhcnQgLSAzICogYmFja0NvdW50KSk7CiAgfQoKICAvLy8gTWFrZSBhIGd1ZXNzIGF0IHdoZXRoZXIgYSBwYXRoIGNvbnRhaW5zIGEgYC4uYCBvciBgLmAgc2VnbWVudC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIHByaW1pdGl2ZSB0ZXN0IHRoYXQgY2FuIGNhdXNlIGZhbHNlIHBvc2l0aXZlcy4KICAvLy8gSXQncyBvbmx5IHVzZWQgdG8gYXZvaWQgYSBtb3JlIGV4cGVuc2l2ZSBvcGVyYXRpb24gaW4gdGhlIGNhc2Ugd2hlcmUKICAvLy8gaXQncyBub3QgbmVjZXNzYXJ5LgogIHN0YXRpYyBib29sIF9tYXlDb250YWluRG90U2VnbWVudHMoU3RyaW5nIHBhdGgpIHsKICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoJy4nKSkgcmV0dXJuIHRydWU7CiAgICBpbnQgaW5kZXggPSBwYXRoLmluZGV4T2YoIi8uIik7CiAgICByZXR1cm4gaW5kZXggIT0gLTE7CiAgfQoKICAvLy8gUmVtb3ZlcyAnLicgYW5kICcuLicgc2VnbWVudHMgZnJvbSBhIHBhdGguCiAgLy8vCiAgLy8vIEZvbGxvd3MgdGhlIFJGQyAyOTg2ICJyZW1vdmUgZG90IHNlZ21lbnRzIiBhbGdvcml0aG0uCiAgLy8vIFRoaXMgYWxnb3JpdGhtIGlzIG9ubHkgdXNlZCBvbiBwYXRocyBvZiBVUklzIHdpdGggYSBzY2hlbWUsCiAgLy8vIGFuZCBpdCB0cmVhdHMgdGhlIHBhdGggYXMgaWYgaXQgaXMgYWJzb2x1dGUgKGxlYWRpbmcgJy4uJyBhcmUgcmVtb3ZlZCkuCiAgc3RhdGljIFN0cmluZyBfcmVtb3ZlRG90U2VnbWVudHMoU3RyaW5nIHBhdGgpIHsKICAgIGlmICghX21heUNvbnRhaW5Eb3RTZWdtZW50cyhwYXRoKSkgcmV0dXJuIHBhdGg7CiAgICBhc3NlcnQocGF0aC5pc05vdEVtcHR5KTsgLy8gQW4gZW1wdHkgcGF0aCB3b3VsZCBub3QgaGF2ZSBkb3Qgc2VnbWVudHMuCiAgICBMaXN0PFN0cmluZz4gb3V0cHV0ID0gW107CiAgICBib29sIGFwcGVuZFNsYXNoID0gZmFsc2U7CiAgICBmb3IgKFN0cmluZyBzZWdtZW50IGluIHBhdGguc3BsaXQoIi8iKSkgewogICAgICBhcHBlbmRTbGFzaCA9IGZhbHNlOwogICAgICBpZiAoc2VnbWVudCA9PSAiLi4iKSB7CiAgICAgICAgaWYgKG91dHB1dC5pc05vdEVtcHR5KSB7CiAgICAgICAgICBvdXRwdXQucmVtb3ZlTGFzdCgpOwogICAgICAgICAgaWYgKG91dHB1dC5pc0VtcHR5KSB7CiAgICAgICAgICAgIG91dHB1dC5hZGQoIiIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhcHBlbmRTbGFzaCA9IHRydWU7CiAgICAgIH0gZWxzZSBpZiAoIi4iID09IHNlZ21lbnQpIHsKICAgICAgICBhcHBlbmRTbGFzaCA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb3V0cHV0LmFkZChzZWdtZW50KTsKICAgICAgfQogICAgfQogICAgaWYgKGFwcGVuZFNsYXNoKSBvdXRwdXQuYWRkKCIiKTsKICAgIHJldHVybiBvdXRwdXQuam9pbigiLyIpOwogIH0KCiAgLy8vIFJlbW92ZXMgYWxsIGAuYCBzZWdtZW50cyBhbmQgYW55IG5vbi1sZWFkaW5nIGAuLmAgc2VnbWVudHMuCiAgLy8vCiAgLy8vIElmIHRoZSBwYXRoIHN0YXJ0cyB3aXRoIHNvbWV0aGluZyB0aGF0IGxvb2tzIGxpa2UgYSBzY2hlbWUsCiAgLy8vIGFuZCBbYWxsb3dTY2hlbWVdIGlzIGZhbHNlLCB0aGUgY29sb24gaXMgZXNjYXBlZC4KICAvLy8KICAvLy8gUmVtb3ZpbmcgdGhlICIuLiIgZnJvbSBhICJiYXIvZm9vLy4uIiBzZXF1ZW5jZSByZXN1bHRzIGluICJiYXIvIgogIC8vLyAodHJhaWxpbmcgIi8iKS4gSWYgdGhlIGVudGlyZSBwYXRoIGlzIHJlbW92ZWQgKGJlY2F1c2UgaXQgY29udGFpbnMgYXMKICAvLy8gbWFueSAiLi4iIHNlZ21lbnRzIGFzIHJlYWwgc2VnbWVudHMpLCB0aGUgcmVzdWx0IGlzICIuLyIuCiAgLy8vIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gYW4gZW1wdHkgc3RyaW5nLCB3aGljaCByZXByZXNlbnRzICJubyBwYXRoIiwKICAvLy8gd2hlbiB5b3UgcmVzb2x2ZSBpdCBhZ2FpbnN0IGEgYmFzZSBVUkkgd2l0aCBhIHBhdGggd2l0aCBhIG5vbi1lbXB0eQogIC8vLyBmaW5hbCBzZWdtZW50LgogIHN0YXRpYyBTdHJpbmcgX25vcm1hbGl6ZVJlbGF0aXZlUGF0aChTdHJpbmcgcGF0aCwgYm9vbCBhbGxvd1NjaGVtZSkgewogICAgYXNzZXJ0KCFwYXRoLnN0YXJ0c1dpdGgoJy8nKSk7IC8vIE9ubHkgZ2V0IGNhbGxlZCBmb3IgcmVsYXRpdmUgcGF0aHMuCiAgICBpZiAoIV9tYXlDb250YWluRG90U2VnbWVudHMocGF0aCkpIHsKICAgICAgaWYgKCFhbGxvd1NjaGVtZSkgcGF0aCA9IF9lc2NhcGVTY2hlbWUocGF0aCk7CiAgICAgIHJldHVybiBwYXRoOwogICAgfQogICAgYXNzZXJ0KHBhdGguaXNOb3RFbXB0eSk7IC8vIEFuIGVtcHR5IHBhdGggd291bGQgbm90IGhhdmUgZG90IHNlZ21lbnRzLgogICAgTGlzdDxTdHJpbmc+IG91dHB1dCA9IFtdOwogICAgYm9vbCBhcHBlbmRTbGFzaCA9IGZhbHNlOwogICAgZm9yIChTdHJpbmcgc2VnbWVudCBpbiBwYXRoLnNwbGl0KCIvIikpIHsKICAgICAgYXBwZW5kU2xhc2ggPSBmYWxzZTsKICAgICAgaWYgKCIuLiIgPT0gc2VnbWVudCkgewogICAgICAgIGlmICghb3V0cHV0LmlzRW1wdHkgJiYgb3V0cHV0Lmxhc3QgIT0gIi4uIikgewogICAgICAgICAgb3V0cHV0LnJlbW92ZUxhc3QoKTsKICAgICAgICAgIGFwcGVuZFNsYXNoID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgb3V0cHV0LmFkZCgiLi4iKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoIi4iID09IHNlZ21lbnQpIHsKICAgICAgICBhcHBlbmRTbGFzaCA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb3V0cHV0LmFkZChzZWdtZW50KTsKICAgICAgfQogICAgfQogICAgaWYgKG91dHB1dC5pc0VtcHR5IHx8IChvdXRwdXQubGVuZ3RoID09IDEgJiYgb3V0cHV0WzBdLmlzRW1wdHkpKSB7CiAgICAgIHJldHVybiAiLi8iOwogICAgfQogICAgaWYgKGFwcGVuZFNsYXNoIHx8IG91dHB1dC5sYXN0ID09ICcuLicpIG91dHB1dC5hZGQoIiIpOwogICAgaWYgKCFhbGxvd1NjaGVtZSkgb3V0cHV0WzBdID0gX2VzY2FwZVNjaGVtZShvdXRwdXRbMF0pOwogICAgcmV0dXJuIG91dHB1dC5qb2luKCIvIik7CiAgfQoKICAvLy8gSWYgW3BhdGhdIHN0YXJ0cyB3aXRoIGEgdmFsaWQgc2NoZW1lLCBlc2NhcGUgdGhlIHBlcmNlbnQuCiAgc3RhdGljIFN0cmluZyBfZXNjYXBlU2NoZW1lKFN0cmluZyBwYXRoKSB7CiAgICBpZiAocGF0aC5sZW5ndGggPj0gMiAmJiBfaXNBbHBoYWJldGljQ2hhcmFjdGVyKHBhdGguY29kZVVuaXRBdCgwKSkpIHsKICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaW50IGNoYXIgPSBwYXRoLmNvZGVVbml0QXQoaSk7CiAgICAgICAgaWYgKGNoYXIgPT0gX0NPTE9OKSB7CiAgICAgICAgICByZXR1cm4gIiR7cGF0aC5zdWJzdHJpbmcoMCwgaSl9JTNBJHtwYXRoLnN1YnN0cmluZyhpICsgMSl9IjsKICAgICAgICB9CiAgICAgICAgaWYgKGNoYXIgPiAxMjcgfHwKICAgICAgICAgICAgKChfc2NoZW1lVGFibGVbY2hhciA+PiA0XSAmICgxIDw8IChjaGFyICYgMHgwZikpKSA9PSAwKSkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gcGF0aDsKICB9CgogIFVyaSByZXNvbHZlKFN0cmluZyByZWZlcmVuY2UpIHsKICAgIHJldHVybiByZXNvbHZlVXJpKFVyaS5wYXJzZShyZWZlcmVuY2UpKTsKICB9CgogIFVyaSByZXNvbHZlVXJpKFVyaSByZWZlcmVuY2UpIHsKICAgIC8vIEZyb20gUkZDIDM5ODYuCiAgICBTdHJpbmcgdGFyZ2V0U2NoZW1lOwogICAgU3RyaW5nIHRhcmdldFVzZXJJbmZvID0gIiI7CiAgICBTdHJpbmcgdGFyZ2V0SG9zdDsKICAgIGludCB0YXJnZXRQb3J0OwogICAgU3RyaW5nIHRhcmdldFBhdGg7CiAgICBTdHJpbmcgdGFyZ2V0UXVlcnk7CiAgICBpZiAocmVmZXJlbmNlLnNjaGVtZS5pc05vdEVtcHR5KSB7CiAgICAgIHRhcmdldFNjaGVtZSA9IHJlZmVyZW5jZS5zY2hlbWU7CiAgICAgIGlmIChyZWZlcmVuY2UuaGFzQXV0aG9yaXR5KSB7CiAgICAgICAgdGFyZ2V0VXNlckluZm8gPSByZWZlcmVuY2UudXNlckluZm87CiAgICAgICAgdGFyZ2V0SG9zdCA9IHJlZmVyZW5jZS5ob3N0OwogICAgICAgIHRhcmdldFBvcnQgPSByZWZlcmVuY2UuaGFzUG9ydCA/IHJlZmVyZW5jZS5wb3J0IDogbnVsbDsKICAgICAgfQogICAgICB0YXJnZXRQYXRoID0gX3JlbW92ZURvdFNlZ21lbnRzKHJlZmVyZW5jZS5wYXRoKTsKICAgICAgaWYgKHJlZmVyZW5jZS5oYXNRdWVyeSkgewogICAgICAgIHRhcmdldFF1ZXJ5ID0gcmVmZXJlbmNlLnF1ZXJ5OwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB0YXJnZXRTY2hlbWUgPSB0aGlzLnNjaGVtZTsKICAgICAgaWYgKHJlZmVyZW5jZS5oYXNBdXRob3JpdHkpIHsKICAgICAgICB0YXJnZXRVc2VySW5mbyA9IHJlZmVyZW5jZS51c2VySW5mbzsKICAgICAgICB0YXJnZXRIb3N0ID0gcmVmZXJlbmNlLmhvc3Q7CiAgICAgICAgdGFyZ2V0UG9ydCA9CiAgICAgICAgICAgIF9tYWtlUG9ydChyZWZlcmVuY2UuaGFzUG9ydCA/IHJlZmVyZW5jZS5wb3J0IDogbnVsbCwgdGFyZ2V0U2NoZW1lKTsKICAgICAgICB0YXJnZXRQYXRoID0gX3JlbW92ZURvdFNlZ21lbnRzKHJlZmVyZW5jZS5wYXRoKTsKICAgICAgICBpZiAocmVmZXJlbmNlLmhhc1F1ZXJ5KSB0YXJnZXRRdWVyeSA9IHJlZmVyZW5jZS5xdWVyeTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0YXJnZXRVc2VySW5mbyA9IHRoaXMuX3VzZXJJbmZvOwogICAgICAgIHRhcmdldEhvc3QgPSB0aGlzLl9ob3N0OwogICAgICAgIHRhcmdldFBvcnQgPSB0aGlzLl9wb3J0OwogICAgICAgIGlmIChyZWZlcmVuY2UucGF0aCA9PSAiIikgewogICAgICAgICAgdGFyZ2V0UGF0aCA9IHRoaXMucGF0aDsKICAgICAgICAgIGlmIChyZWZlcmVuY2UuaGFzUXVlcnkpIHsKICAgICAgICAgICAgdGFyZ2V0UXVlcnkgPSByZWZlcmVuY2UucXVlcnk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0YXJnZXRRdWVyeSA9IHRoaXMuX3F1ZXJ5OwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAocmVmZXJlbmNlLmhhc0Fic29sdXRlUGF0aCkgewogICAgICAgICAgICB0YXJnZXRQYXRoID0gX3JlbW92ZURvdFNlZ21lbnRzKHJlZmVyZW5jZS5wYXRoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIFJGQyAzOTg2IGJlaGF2aW9yIGZvciBtZXJnaW5nLgogICAgICAgICAgICBpZiAodGhpcy5oYXNFbXB0eVBhdGgpIHsKICAgICAgICAgICAgICBpZiAoIXRoaXMuaGFzQXV0aG9yaXR5KSB7CiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaGFzU2NoZW1lKSB7CiAgICAgICAgICAgICAgICAgIC8vIEtlZXAgdGhlIHBhdGggcmVsYXRpdmUgaWYgbm8gc2NoZW1lIG9yIGF1dGhvcml0eS4KICAgICAgICAgICAgICAgICAgdGFyZ2V0UGF0aCA9IHJlZmVyZW5jZS5wYXRoOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGxlYWRpbmcgZG90LXNlZ21lbnRzIGlmIHRoZSBwYXRoIGlzIHB1dAogICAgICAgICAgICAgICAgICAvLyBiZW5lYXRoIGEgc2NoZW1lLgogICAgICAgICAgICAgICAgICB0YXJnZXRQYXRoID0gX3JlbW92ZURvdFNlZ21lbnRzKHJlZmVyZW5jZS5wYXRoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gUkZDIGFsZ29yaXRobSBmb3IgYmFzZSB3aXRoIGF1dGhvcml0eSBhbmQgZW1wdHkgcGF0aC4KICAgICAgICAgICAgICAgIHRhcmdldFBhdGggPSBfcmVtb3ZlRG90U2VnbWVudHMoIi8iICsgcmVmZXJlbmNlLnBhdGgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB2YXIgbWVyZ2VkUGF0aCA9IF9tZXJnZVBhdGhzKHRoaXMucGF0aCwgcmVmZXJlbmNlLnBhdGgpOwogICAgICAgICAgICAgIGlmICh0aGlzLmhhc1NjaGVtZSB8fCB0aGlzLmhhc0F1dGhvcml0eSB8fCB0aGlzLmhhc0Fic29sdXRlUGF0aCkgewogICAgICAgICAgICAgICAgdGFyZ2V0UGF0aCA9IF9yZW1vdmVEb3RTZWdtZW50cyhtZXJnZWRQYXRoKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gTm9uLVJGQyAzOTg2IGJlaGF2aW9yLgogICAgICAgICAgICAgICAgLy8gSWYgYm90aCBiYXNlIGFuZCByZWZlcmVuY2UgYXJlIHJlbGF0aXZlIHBhdGhzLAogICAgICAgICAgICAgICAgLy8gYWxsb3cgdGhlIG1lcmdlZCBwYXRoIHRvIHN0YXJ0IHdpdGggIi4uIi4KICAgICAgICAgICAgICAgIC8vIFRoZSBSRkMgb25seSBzcGVjaWZpZXMgdGhlIGNhc2Ugd2hlcmUgdGhlIGJhc2UgaGFzIGEgc2NoZW1lLgogICAgICAgICAgICAgICAgdGFyZ2V0UGF0aCA9IF9ub3JtYWxpemVSZWxhdGl2ZVBhdGgoCiAgICAgICAgICAgICAgICAgICAgbWVyZ2VkUGF0aCwgdGhpcy5oYXNTY2hlbWUgfHwgdGhpcy5oYXNBdXRob3JpdHkpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHJlZmVyZW5jZS5oYXNRdWVyeSkgdGFyZ2V0UXVlcnkgPSByZWZlcmVuY2UucXVlcnk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBTdHJpbmcgZnJhZ21lbnQgPSByZWZlcmVuY2UuaGFzRnJhZ21lbnQgPyByZWZlcmVuY2UuZnJhZ21lbnQgOiBudWxsOwogICAgcmV0dXJuIF9VcmkuX2ludGVybmFsKHRhcmdldFNjaGVtZSwgdGFyZ2V0VXNlckluZm8sIHRhcmdldEhvc3QsIHRhcmdldFBvcnQsCiAgICAgICAgdGFyZ2V0UGF0aCwgdGFyZ2V0UXVlcnksIGZyYWdtZW50KTsKICB9CgogIGJvb2wgZ2V0IGhhc1NjaGVtZSA9PiBzY2hlbWUuaXNOb3RFbXB0eTsKCiAgYm9vbCBnZXQgaGFzQXV0aG9yaXR5ID0+IF9ob3N0ICE9IG51bGw7CgogIGJvb2wgZ2V0IGhhc1BvcnQgPT4gX3BvcnQgIT0gbnVsbDsKCiAgYm9vbCBnZXQgaGFzUXVlcnkgPT4gX3F1ZXJ5ICE9IG51bGw7CgogIGJvb2wgZ2V0IGhhc0ZyYWdtZW50ID0+IF9mcmFnbWVudCAhPSBudWxsOwoKICBib29sIGdldCBoYXNFbXB0eVBhdGggPT4gcGF0aC5pc0VtcHR5OwoKICBib29sIGdldCBoYXNBYnNvbHV0ZVBhdGggPT4gcGF0aC5zdGFydHNXaXRoKCcvJyk7CgogIFN0cmluZyBnZXQgb3JpZ2luIHsKICAgIGlmIChzY2hlbWUgPT0gIiIpIHsKICAgICAgdGhyb3cgU3RhdGVFcnJvcigiQ2Fubm90IHVzZSBvcmlnaW4gd2l0aG91dCBhIHNjaGVtZTogJHRoaXMiKTsKICAgIH0KICAgIGlmIChzY2hlbWUgIT0gImh0dHAiICYmIHNjaGVtZSAhPSAiaHR0cHMiKSB7CiAgICAgIHRocm93IFN0YXRlRXJyb3IoCiAgICAgICAgICAiT3JpZ2luIGlzIG9ubHkgYXBwbGljYWJsZSBzY2hlbWVzIGh0dHAgYW5kIGh0dHBzOiAkdGhpcyIpOwogICAgfQogICAgaWYgKF9ob3N0ID09IG51bGwgfHwgX2hvc3QgPT0gIiIpIHsKICAgICAgdGhyb3cgU3RhdGVFcnJvcigKICAgICAgICAgICJBICRzY2hlbWU6IFVSSSBzaG91bGQgaGF2ZSBhIG5vbi1lbXB0eSBob3N0IG5hbWU6ICR0aGlzIik7CiAgICB9CiAgICBpZiAoX3BvcnQgPT0gbnVsbCkgcmV0dXJuICIkc2NoZW1lOi8vJF9ob3N0IjsKICAgIHJldHVybiAiJHNjaGVtZTovLyRfaG9zdDokX3BvcnQiOwogIH0KCiAgU3RyaW5nIHRvRmlsZVBhdGgoe2Jvb2wgd2luZG93c30pIHsKICAgIGlmIChzY2hlbWUgIT0gIiIgJiYgc2NoZW1lICE9ICJmaWxlIikgewogICAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgZXh0cmFjdCBhIGZpbGUgcGF0aCBmcm9tIGEgJHNjaGVtZSBVUkkiKTsKICAgIH0KICAgIGlmIChxdWVyeSAhPSAiIikgewogICAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgIkNhbm5vdCBleHRyYWN0IGEgZmlsZSBwYXRoIGZyb20gYSBVUkkgd2l0aCBhIHF1ZXJ5IGNvbXBvbmVudCIpOwogICAgfQogICAgaWYgKGZyYWdtZW50ICE9ICIiKSB7CiAgICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAiQ2Fubm90IGV4dHJhY3QgYSBmaWxlIHBhdGggZnJvbSBhIFVSSSB3aXRoIGEgZnJhZ21lbnQgY29tcG9uZW50Iik7CiAgICB9CiAgICB3aW5kb3dzID8/PSBfaXNXaW5kb3dzOwogICAgcmV0dXJuIHdpbmRvd3MgPyBfdG9XaW5kb3dzRmlsZVBhdGgodGhpcykgOiBfdG9GaWxlUGF0aCgpOwogIH0KCiAgU3RyaW5nIF90b0ZpbGVQYXRoKCkgewogICAgaWYgKGhhc0F1dGhvcml0eSAmJiBob3N0ICE9ICIiKSB7CiAgICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAiQ2Fubm90IGV4dHJhY3QgYSBub24tV2luZG93cyBmaWxlIHBhdGggZnJvbSBhIGZpbGUgVVJJICIKICAgICAgICAgICJ3aXRoIGFuIGF1dGhvcml0eSIpOwogICAgfQogICAgLy8gVXNlIHBhdGggc2VnbWVudHMgdG8gaGF2ZSBhbnkgZXNjYXBlcyB1bmVzY2FwZWQuCiAgICB2YXIgcGF0aFNlZ21lbnRzID0gdGhpcy5wYXRoU2VnbWVudHM7CiAgICBfY2hlY2tOb25XaW5kb3dzUGF0aFJlc2VydmVkQ2hhcmFjdGVycyhwYXRoU2VnbWVudHMsIGZhbHNlKTsKICAgIHZhciByZXN1bHQgPSBTdHJpbmdCdWZmZXIoKTsKICAgIGlmIChoYXNBYnNvbHV0ZVBhdGgpIHJlc3VsdC53cml0ZSgiLyIpOwogICAgcmVzdWx0LndyaXRlQWxsKHBhdGhTZWdtZW50cywgIi8iKTsKICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKICB9CgogIHN0YXRpYyBTdHJpbmcgX3RvV2luZG93c0ZpbGVQYXRoKFVyaSB1cmkpIHsKICAgIGJvb2wgaGFzRHJpdmVMZXR0ZXIgPSBmYWxzZTsKICAgIHZhciBzZWdtZW50cyA9IHVyaS5wYXRoU2VnbWVudHM7CiAgICBpZiAoc2VnbWVudHMubGVuZ3RoID4gMCAmJgogICAgICAgIHNlZ21lbnRzWzBdLmxlbmd0aCA9PSAyICYmCiAgICAgICAgc2VnbWVudHNbMF0uY29kZVVuaXRBdCgxKSA9PSBfQ09MT04pIHsKICAgICAgX2NoZWNrV2luZG93c0RyaXZlTGV0dGVyKHNlZ21lbnRzWzBdLmNvZGVVbml0QXQoMCksIGZhbHNlKTsKICAgICAgX2NoZWNrV2luZG93c1BhdGhSZXNlcnZlZENoYXJhY3RlcnMoc2VnbWVudHMsIGZhbHNlLCAxKTsKICAgICAgaGFzRHJpdmVMZXR0ZXIgPSB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgX2NoZWNrV2luZG93c1BhdGhSZXNlcnZlZENoYXJhY3RlcnMoc2VnbWVudHMsIGZhbHNlLCAwKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBTdHJpbmdCdWZmZXIoKTsKICAgIGlmICh1cmkuaGFzQWJzb2x1dGVQYXRoICYmICFoYXNEcml2ZUxldHRlcikgcmVzdWx0LndyaXRlKHIiXCIpOwogICAgaWYgKHVyaS5oYXNBdXRob3JpdHkpIHsKICAgICAgdmFyIGhvc3QgPSB1cmkuaG9zdDsKICAgICAgaWYgKGhvc3QuaXNOb3RFbXB0eSkgewogICAgICAgIHJlc3VsdC53cml0ZShyIlwiKTsKICAgICAgICByZXN1bHQud3JpdGUoaG9zdCk7CiAgICAgICAgcmVzdWx0LndyaXRlKHIiXCIpOwogICAgICB9CiAgICB9CiAgICByZXN1bHQud3JpdGVBbGwoc2VnbWVudHMsIHIiXCIpOwogICAgaWYgKGhhc0RyaXZlTGV0dGVyICYmIHNlZ21lbnRzLmxlbmd0aCA9PSAxKSByZXN1bHQud3JpdGUociJcIik7CiAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiAgfQoKICBib29sIGdldCBfaXNQYXRoQWJzb2x1dGUgewogICAgcmV0dXJuIHBhdGggIT0gbnVsbCAmJiBwYXRoLnN0YXJ0c1dpdGgoJy8nKTsKICB9CgogIHZvaWQgX3dyaXRlQXV0aG9yaXR5KFN0cmluZ1Npbmsgc3MpIHsKICAgIGlmIChfdXNlckluZm8uaXNOb3RFbXB0eSkgewogICAgICBzcy53cml0ZShfdXNlckluZm8pOwogICAgICBzcy53cml0ZSgiQCIpOwogICAgfQogICAgaWYgKF9ob3N0ICE9IG51bGwpIHNzLndyaXRlKF9ob3N0KTsKICAgIGlmIChfcG9ydCAhPSBudWxsKSB7CiAgICAgIHNzLndyaXRlKCI6Iik7CiAgICAgIHNzLndyaXRlKF9wb3J0KTsKICAgIH0KICB9CgogIC8qKgogICAqIEFjY2VzcyB0aGUgc3RydWN0dXJlIG9mIGEgYGRhdGE6YCBVUkkuCiAgICoKICAgKiBSZXR1cm5zIGEgW1VyaURhdGFdIG9iamVjdCBmb3IgYGRhdGE6YCBVUklzIGFuZCBgbnVsbGAgZm9yIGFsbCBvdGhlcgogICAqIFVSSXMuCiAgICogVGhlIFtVcmlEYXRhXSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSBtZWRpYSB0eXBlIGFuZCBkYXRhCiAgICogb2YgYSBgZGF0YTpgIFVSSS4KICAgKi8KICBVcmlEYXRhIGdldCBkYXRhID0+IChzY2hlbWUgPT0gImRhdGEiKSA/IFVyaURhdGEuZnJvbVVyaSh0aGlzKSA6IG51bGw7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiBfdGV4dCA/Pz0gX2luaXRpYWxpemVUZXh0KCk7CiAgfQoKICBTdHJpbmcgX2luaXRpYWxpemVUZXh0KCkgewogICAgYXNzZXJ0KF90ZXh0ID09IG51bGwpOwogICAgU3RyaW5nQnVmZmVyIHNiID0gU3RyaW5nQnVmZmVyKCk7CiAgICBpZiAoc2NoZW1lLmlzTm90RW1wdHkpIHNiLi53cml0ZShzY2hlbWUpLi53cml0ZSgiOiIpOwogICAgaWYgKGhhc0F1dGhvcml0eSB8fCAoc2NoZW1lID09ICJmaWxlIikpIHsKICAgICAgLy8gRmlsZSBVUklTIGFsd2F5cyBoYXZlIHRoZSBhdXRob3JpdHksIGV2ZW4gaWYgaXQgaXMgZW1wdHkuCiAgICAgIC8vIFRoZSBlbXB0eSBVUkkgbWVhbnMgImxvY2FsaG9zdCIuCiAgICAgIHNiLndyaXRlKCIvLyIpOwogICAgICBfd3JpdGVBdXRob3JpdHkoc2IpOwogICAgfQogICAgc2Iud3JpdGUocGF0aCk7CiAgICBpZiAoX3F1ZXJ5ICE9IG51bGwpIHNiLi53cml0ZSgiPyIpLi53cml0ZShfcXVlcnkpOwogICAgaWYgKF9mcmFnbWVudCAhPSBudWxsKSBzYi4ud3JpdGUoIiMiKS4ud3JpdGUoX2ZyYWdtZW50KTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBvdGhlciBpcyBVcmkgJiYKICAgICAgICBzY2hlbWUgPT0gb3RoZXIuc2NoZW1lICYmCiAgICAgICAgaGFzQXV0aG9yaXR5ID09IG90aGVyLmhhc0F1dGhvcml0eSAmJgogICAgICAgIHVzZXJJbmZvID09IG90aGVyLnVzZXJJbmZvICYmCiAgICAgICAgaG9zdCA9PSBvdGhlci5ob3N0ICYmCiAgICAgICAgcG9ydCA9PSBvdGhlci5wb3J0ICYmCiAgICAgICAgcGF0aCA9PSBvdGhlci5wYXRoICYmCiAgICAgICAgaGFzUXVlcnkgPT0gb3RoZXIuaGFzUXVlcnkgJiYKICAgICAgICBxdWVyeSA9PSBvdGhlci5xdWVyeSAmJgogICAgICAgIGhhc0ZyYWdtZW50ID09IG90aGVyLmhhc0ZyYWdtZW50ICYmCiAgICAgICAgZnJhZ21lbnQgPT0gb3RoZXIuZnJhZ21lbnQ7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiBfaGFzaENvZGVDYWNoZSA/Pz0gdG9TdHJpbmcoKS5oYXNoQ29kZTsKICB9CgogIHN0YXRpYyBMaXN0PFN0cmluZz4gX2NyZWF0ZUxpc3QoKSA9PiA8U3RyaW5nPltdOwoKICBzdGF0aWMgTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBfc3BsaXRRdWVyeVN0cmluZ0FsbChTdHJpbmcgcXVlcnksCiAgICAgIHtFbmNvZGluZyBlbmNvZGluZyA9IHV0Zjh9KSB7CiAgICB2YXIgcmVzdWx0ID0gPFN0cmluZywgTGlzdDxTdHJpbmc+Pnt9OwogICAgaW50IGkgPSAwOwogICAgaW50IHN0YXJ0ID0gMDsKICAgIGludCBlcXVhbHNJbmRleCA9IC0xOwoKICAgIHZvaWQgcGFyc2VQYWlyKGludCBzdGFydCwgaW50IGVxdWFsc0luZGV4LCBpbnQgZW5kKSB7CiAgICAgIFN0cmluZyBrZXk7CiAgICAgIFN0cmluZyB2YWx1ZTsKICAgICAgaWYgKHN0YXJ0ID09IGVuZCkgcmV0dXJuOwogICAgICBpZiAoZXF1YWxzSW5kZXggPCAwKSB7CiAgICAgICAga2V5ID0gX3VyaURlY29kZShxdWVyeSwgc3RhcnQsIGVuZCwgZW5jb2RpbmcsIHRydWUpOwogICAgICAgIHZhbHVlID0gIiI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAga2V5ID0gX3VyaURlY29kZShxdWVyeSwgc3RhcnQsIGVxdWFsc0luZGV4LCBlbmNvZGluZywgdHJ1ZSk7CiAgICAgICAgdmFsdWUgPSBfdXJpRGVjb2RlKHF1ZXJ5LCBlcXVhbHNJbmRleCArIDEsIGVuZCwgZW5jb2RpbmcsIHRydWUpOwogICAgICB9CiAgICAgIHJlc3VsdC5wdXRJZkFic2VudChrZXksIF9jcmVhdGVMaXN0KS5hZGQodmFsdWUpOwogICAgfQoKICAgIHdoaWxlIChpIDwgcXVlcnkubGVuZ3RoKSB7CiAgICAgIGludCBjaGFyID0gcXVlcnkuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGNoYXIgPT0gX0VRVUFMUykgewogICAgICAgIGlmIChlcXVhbHNJbmRleCA8IDApIGVxdWFsc0luZGV4ID0gaTsKICAgICAgfSBlbHNlIGlmIChjaGFyID09IF9BTVBFUlNBTkQpIHsKICAgICAgICBwYXJzZVBhaXIoc3RhcnQsIGVxdWFsc0luZGV4LCBpKTsKICAgICAgICBzdGFydCA9IGkgKyAxOwogICAgICAgIGVxdWFsc0luZGV4ID0gLTE7CiAgICAgIH0KICAgICAgaSsrOwogICAgfQogICAgcGFyc2VQYWlyKHN0YXJ0LCBlcXVhbHNJbmRleCwgaSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgZXh0ZXJuYWwgc3RhdGljIFN0cmluZyBfdXJpRW5jb2RlKExpc3Q8aW50PiBjYW5vbmljYWxUYWJsZSwgU3RyaW5nIHRleHQsCiAgICAgIEVuY29kaW5nIGVuY29kaW5nLCBib29sIHNwYWNlVG9QbHVzKTsKCiAgLyoqCiAgICogQ29udmVydCBhIGJ5dGUgKDIgY2hhcmFjdGVyIGhleCBzZXF1ZW5jZSkgaW4gc3RyaW5nIFtzXSBzdGFydGluZwogICAqIGF0IHBvc2l0aW9uIFtwb3NdIHRvIGl0cyBvcmRpbmFsIHZhbHVlCiAgICovCiAgc3RhdGljIGludCBfaGV4Q2hhclBhaXJUb0J5dGUoU3RyaW5nIHMsIGludCBwb3MpIHsKICAgIGludCBieXRlID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAgICAgIHZhciBjaGFyQ29kZSA9IHMuY29kZVVuaXRBdChwb3MgKyBpKTsKICAgICAgaWYgKDB4MzAgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gMHgzOSkgewogICAgICAgIGJ5dGUgPSBieXRlICogMTYgKyBjaGFyQ29kZSAtIDB4MzA7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gQ2hlY2sgcmFuZ2VzIEEtRiAoMHg0MS0weDQ2KSBhbmQgYS1mICgweDYxLTB4NjYpLgogICAgICAgIGNoYXJDb2RlIHw9IDB4MjA7CiAgICAgICAgaWYgKDB4NjEgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gMHg2NikgewogICAgICAgICAgYnl0ZSA9IGJ5dGUgKiAxNiArIGNoYXJDb2RlIC0gMHg1NzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcigiSW52YWxpZCBVUkwgZW5jb2RpbmciKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBieXRlOwogIH0KCiAgLyoqCiAgICogVXJpLWRlY29kZSBhIHBlcmNlbnQtZW5jb2RlZCBzdHJpbmcuCiAgICoKICAgKiBJdCB1bmVzY2FwZXMgdGhlIHN0cmluZyBbdGV4dF0gYW5kIHJldHVybnMgdGhlIHVuZXNjYXBlZCBzdHJpbmcuCiAgICoKICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gdGhlIEphdmFTY3JpcHQtZnVuY3Rpb24gYGRlY29kZVVSSWAuCiAgICoKICAgKiBJZiBbcGx1c1RvU3BhY2VdIGlzIGB0cnVlYCwgcGx1cyBjaGFyYWN0ZXJzIHdpbGwgYmUgY29udmVydGVkIHRvIHNwYWNlcy4KICAgKgogICAqIFRoZSBkZWNvZGVyIHdpbGwgY3JlYXRlIGEgYnl0ZS1saXN0IG9mIHRoZSBwZXJjZW50LWVuY29kZWQgcGFydHMsIGFuZCB0aGVuCiAgICogZGVjb2RlIHRoZSBieXRlLWxpc3QgdXNpbmcgW2VuY29kaW5nXS4gVGhlIGRlZmF1bHQgZW5jb2RpbmdzIFVURi04LgogICAqLwogIHN0YXRpYyBTdHJpbmcgX3VyaURlY29kZSgKICAgICAgU3RyaW5nIHRleHQsIGludCBzdGFydCwgaW50IGVuZCwgRW5jb2RpbmcgZW5jb2RpbmcsIGJvb2wgcGx1c1RvU3BhY2UpIHsKICAgIGFzc2VydCgwIDw9IHN0YXJ0KTsKICAgIGFzc2VydChzdGFydCA8PSBlbmQpOwogICAgYXNzZXJ0KGVuZCA8PSB0ZXh0Lmxlbmd0aCk7CiAgICBhc3NlcnQoZW5jb2RpbmcgIT0gbnVsbCk7CiAgICAvLyBGaXJzdCBjaGVjayB3aGV0aGVyIHRoZXJlIGlzIGFueSBjaGFyYWN0ZXJzIHdoaWNoIG5lZWQgc3BlY2lhbCBoYW5kbGluZy4KICAgIGJvb2wgc2ltcGxlID0gdHJ1ZTsKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIHZhciBjb2RlVW5pdCA9IHRleHQuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGNvZGVVbml0ID4gMTI3IHx8CiAgICAgICAgICBjb2RlVW5pdCA9PSBfUEVSQ0VOVCB8fAogICAgICAgICAgKHBsdXNUb1NwYWNlICYmIGNvZGVVbml0ID09IF9QTFVTKSkgewogICAgICAgIHNpbXBsZSA9IGZhbHNlOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBMaXN0PGludD4gYnl0ZXM7CiAgICBpZiAoc2ltcGxlKSB7CiAgICAgIGlmICh1dGY4ID09IGVuY29kaW5nIHx8IGxhdGluMSA9PSBlbmNvZGluZyB8fCBhc2NpaSA9PSBlbmNvZGluZykgewogICAgICAgIHJldHVybiB0ZXh0LnN1YnN0cmluZyhzdGFydCwgZW5kKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBieXRlcyA9IHRleHQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpLmNvZGVVbml0czsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgYnl0ZXMgPSBMaXN0KCk7CiAgICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgICAgdmFyIGNvZGVVbml0ID0gdGV4dC5jb2RlVW5pdEF0KGkpOwogICAgICAgIGlmIChjb2RlVW5pdCA+IDEyNykgewogICAgICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcigiSWxsZWdhbCBwZXJjZW50IGVuY29kaW5nIGluIFVSSSIpOwogICAgICAgIH0KICAgICAgICBpZiAoY29kZVVuaXQgPT0gX1BFUkNFTlQpIHsKICAgICAgICAgIGlmIChpICsgMyA+IHRleHQubGVuZ3RoKSB7CiAgICAgICAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoJ1RydW5jYXRlZCBVUkknKTsKICAgICAgICAgIH0KICAgICAgICAgIGJ5dGVzLmFkZChfaGV4Q2hhclBhaXJUb0J5dGUodGV4dCwgaSArIDEpKTsKICAgICAgICAgIGkgKz0gMjsKICAgICAgICB9IGVsc2UgaWYgKHBsdXNUb1NwYWNlICYmIGNvZGVVbml0ID09IF9QTFVTKSB7CiAgICAgICAgICBieXRlcy5hZGQoX1NQQUNFKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYnl0ZXMuYWRkKGNvZGVVbml0KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBlbmNvZGluZy5kZWNvZGUoYnl0ZXMpOwogIH0KCiAgc3RhdGljIGJvb2wgX2lzQWxwaGFiZXRpY0NoYXJhY3RlcihpbnQgY29kZVVuaXQpIHsKICAgIHZhciBsb3dlckNhc2UgPSBjb2RlVW5pdCB8IDB4MjA7CiAgICByZXR1cm4gKF9MT1dFUl9DQVNFX0EgPD0gbG93ZXJDYXNlICYmIGxvd2VyQ2FzZSA8PSBfTE9XRVJfQ0FTRV9aKTsKICB9CgogIHN0YXRpYyBib29sIF9pc1VucmVzZXJ2ZWRDaGFyKGludCBjaGFyKSB7CiAgICByZXR1cm4gY2hhciA8IDEyNyAmJgogICAgICAgICgoX3VucmVzZXJ2ZWRUYWJsZVtjaGFyID4+IDRdICYgKDEgPDwgKGNoYXIgJiAweDBmKSkpICE9IDApOwogIH0KCiAgLy8gVGFibGVzIG9mIGNoYXItY29kZXMgb3JnYW5pemVkIGFzIGEgYml0IHZlY3RvciBvZiAxMjggYml0cyB3aGVyZQogIC8vIGVhY2ggYml0IGluZGljYXRlIHdoZXRoZXIgYSBjaGFyYWN0ZXIgY29kZSBvbiB0aGUgMC0xMjcgbmVlZHMgdG8KICAvLyBiZSBlc2NhcGVkIG9yIG5vdC4KCiAgLy8gVGhlIHVucmVzZXJ2ZWQgY2hhcmFjdGVycyBvZiBSRkMgMzk4Ni4KICBzdGF0aWMgY29uc3QgX3VucmVzZXJ2ZWRUYWJsZSA9IDxpbnQ+WwogICAgLy8gICAgICAgICAgICAgICAgICAgICBMU0IgICAgICAgICAgICBNU0IKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKICAgIDB4MDAwMCwgLy8gMHgwMCAtIDB4MGYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIDB4MDAwMCwgLy8gMHgxMCAtIDB4MWYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLgogICAgMHg2MDAwLCAvLyAweDIwIC0gMHgyZiAgMDAwMDAwMDAwMDAwMDExMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgMDEyMzQ1Njc4OQogICAgMHgwM2ZmLCAvLyAweDMwIC0gMHgzZiAgMTExMTExMTExMTAwMDAwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgIEFCQ0RFRkdISUpLTE1OTwogICAgMHhmZmZlLCAvLyAweDQwIC0gMHg0ZiAgMDExMTExMTExMTExMTExMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgUFFSU1RVVldYWVogICAgXwogICAgMHg4N2ZmLCAvLyAweDUwIC0gMHg1ZiAgMTExMTExMTExMTEwMDAwMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGFiY2RlZmdoaWprbG1ubwogICAgMHhmZmZlLCAvLyAweDYwIC0gMHg2ZiAgMDExMTExMTExMTExMTExMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgcHFyc3R1dnd4eXogICB+CiAgICAweDQ3ZmYsIC8vIDB4NzAgLSAweDdmICAxMTExMTExMTExMTAwMDEwCiAgXTsKCiAgLy8gVGhlIHVucmVzZXJ2ZWQgY2hhcmFjdGVycyBvZiBSRkMgMjM5Ni4KICBzdGF0aWMgY29uc3QgX3VucmVzZXJ2ZWQyMzk2VGFibGUgPSA8aW50PlsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgTFNCICAgICAgICAgICAgTVNCCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8CiAgICAweDAwMDAsIC8vIDB4MDAgLSAweDBmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAweDAwMDAsIC8vIDB4MTAgLSAweDFmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgISAgICAgJygpKiAgLS4KICAgIDB4Njc4MiwgLy8gMHgyMCAtIDB4MmYgIDAxMDAwMDAxMTExMDAxMTAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIDAxMjM0NTY3ODkKICAgIDB4MDNmZiwgLy8gMHgzMCAtIDB4M2YgIDExMTExMTExMTEwMDAwMDAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBBQkNERUZHSElKS0xNTk8KICAgIDB4ZmZmZSwgLy8gMHg0MCAtIDB4NGYgIDAxMTExMTExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIFBRUlNUVVZXWFlaICAgIF8KICAgIDB4ODdmZiwgLy8gMHg1MCAtIDB4NWYgIDExMTExMTExMTExMDAwMDEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBhYmNkZWZnaGlqa2xtbm8KICAgIDB4ZmZmZSwgLy8gMHg2MCAtIDB4NmYgIDAxMTExMTExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHBxcnN0dXZ3eHl6ICAgfgogICAgMHg0N2ZmLCAvLyAweDcwIC0gMHg3ZiAgMTExMTExMTExMTEwMDAxMAogIF07CgogIC8vIFRhYmxlIG9mIHJlc2VydmVkIGNoYXJhY3RlcnMgc3BlY2lmaWVkIGJ5IEVDTUFTY3JpcHQgNS4KICBzdGF0aWMgY29uc3QgX2VuY29kZUZ1bGxUYWJsZSA9IDxpbnQ+WwogICAgLy8gICAgICAgICAgICAgICAgICAgICBMU0IgICAgICAgICAgICBNU0IKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKICAgIDB4MDAwMCwgLy8gMHgwMCAtIDB4MGYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIDB4MDAwMCwgLy8gMHgxMCAtIDB4MWYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAhICMkICYnKCkqKywtLi8KICAgIDB4ZmZkYSwgLy8gMHgyMCAtIDB4MmYgIDAxMDExMDExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIDAxMjM0NTY3ODk6OyA9ID8KICAgIDB4YWZmZiwgLy8gMHgzMCAtIDB4M2YgIDExMTExMTExMTExMTAxMDEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIEBBQkNERUZHSElKS0xNTk8KICAgIDB4ZmZmZiwgLy8gMHg0MCAtIDB4NGYgIDExMTExMTExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIFBRUlNUVVZXWFlaICAgIF8KICAgIDB4ODdmZiwgLy8gMHg1MCAtIDB4NWYgIDExMTExMTExMTExMDAwMDEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBhYmNkZWZnaGlqa2xtbm8KICAgIDB4ZmZmZSwgLy8gMHg2MCAtIDB4NmYgIDAxMTExMTExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHBxcnN0dXZ3eHl6ICAgfgogICAgMHg0N2ZmLCAvLyAweDcwIC0gMHg3ZiAgMTExMTExMTExMTEwMDAxMAogIF07CgogIC8vIENoYXJhY3RlcnMgYWxsb3dlZCBpbiB0aGUgc2NoZW1lLgogIHN0YXRpYyBjb25zdCBfc2NoZW1lVGFibGUgPSA8aW50PlsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgTFNCICAgICAgICAgICAgTVNCCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8CiAgICAweDAwMDAsIC8vIDB4MDAgLSAweDBmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAweDAwMDAsIC8vIDB4MTAgLSAweDFmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgLS4KICAgIDB4NjgwMCwgLy8gMHgyMCAtIDB4MmYgIDAwMDAwMDAwMDAwMTAxMTAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIDAxMjM0NTY3ODkKICAgIDB4MDNmZiwgLy8gMHgzMCAtIDB4M2YgIDExMTExMTExMTEwMDAwMDAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBBQkNERUZHSElKS0xNTk8KICAgIDB4ZmZmZSwgLy8gMHg0MCAtIDB4NGYgIDAxMTExMTExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIFBRUlNUVVZXWFlaCiAgICAweDA3ZmYsIC8vIDB4NTAgLSAweDVmICAxMTExMTExMTExMTAwMDAxCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgYWJjZGVmZ2hpamtsbW5vCiAgICAweGZmZmUsIC8vIDB4NjAgLSAweDZmICAwMTExMTExMTExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBwcXJzdHV2d3h5egogICAgMHgwN2ZmLCAvLyAweDcwIC0gMHg3ZiAgMTExMTExMTExMTEwMDAxMAogIF07CgogIC8vIENoYXJhY3RlcnMgYWxsb3dlZCBpbiBzY2hlbWUgZXhjZXB0IGZvciB1cHBlciBjYXNlIGxldHRlcnMuCiAgc3RhdGljIGNvbnN0IF9zY2hlbWVMb3dlclRhYmxlID0gPGludD5bCiAgICAvLyAgICAgICAgICAgICAgICAgICAgIExTQiAgICAgICAgICAgIE1TQgogICAgLy8gICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAogICAgMHgwMDAwLCAvLyAweDAwIC0gMHgwZiAgMDAwMDAwMDAwMDAwMDAwMAogICAgMHgwMDAwLCAvLyAweDEwIC0gMHgxZiAgMDAwMDAwMDAwMDAwMDAwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC0uCiAgICAweDY4MDAsIC8vIDB4MjAgLSAweDJmICAwMDAwMDAwMDAwMDEwMTEwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAwMTIzNDU2Nzg5CiAgICAweDAzZmYsIC8vIDB4MzAgLSAweDNmICAxMTExMTExMTExMDAwMDAwCiAgICAvLwogICAgMHgwMDAwLCAvLyAweDQwIC0gMHg0ZiAgMDExMTExMTExMTExMTExMQogICAgLy8KICAgIDB4MDAwMCwgLy8gMHg1MCAtIDB4NWYgIDExMTExMTExMTExMDAwMDEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBhYmNkZWZnaGlqa2xtbm8KICAgIDB4ZmZmZSwgLy8gMHg2MCAtIDB4NmYgIDAxMTExMTExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHBxcnN0dXZ3eHl6CiAgICAweDA3ZmYsIC8vIDB4NzAgLSAweDdmICAxMTExMTExMTExMTAwMDEwCiAgXTsKCiAgLy8gU3ViIGRlbGltaXRlciBjaGFyYWN0ZXJzIGNvbWJpbmVkIHdpdGggdW5yZXNlcnZlZCBhcyBvZiAzOTg2LgogIC8vIHN1Yi1kZWxpbXMgID0gIiEiIC8gIiQiIC8gIiYiIC8gIiciIC8gIigiIC8gIikiCiAgLy8gICAgICAgICAvICIqIiAvICIrIiAvICIsIiAvICI7IiAvICI9IgogIC8vIFJGQyAzOTg2IHNlY3Rpb24gMi4zLgogIC8vIHVucmVzZXJ2ZWQgID0gQUxQSEEgLyBESUdJVCAvICItIiAvICIuIiAvICJfIiAvICJ+IgogIHN0YXRpYyBjb25zdCBfc3ViRGVsaW1pdGVyc1RhYmxlID0gPGludD5bCiAgICAvLyAgICAgICAgICAgICAgICAgICAgIExTQiAgICAgICAgICAgIE1TQgogICAgLy8gICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAogICAgMHgwMDAwLCAvLyAweDAwIC0gMHgwZiAgMDAwMDAwMDAwMDAwMDAwMAogICAgMHgwMDAwLCAvLyAweDEwIC0gMHgxZiAgMDAwMDAwMDAwMDAwMDAwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgICEgICQgJicoKSorLC0uCiAgICAweDdmZDIsIC8vIDB4MjAgLSAweDJmICAwMTAwMTAxMTExMTExMTEwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAwMTIzNDU2Nzg5IDsgPQogICAgMHgyYmZmLCAvLyAweDMwIC0gMHgzZiAgMTExMTExMTExMTAxMDEwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgIEFCQ0RFRkdISUpLTE1OTwogICAgMHhmZmZlLCAvLyAweDQwIC0gMHg0ZiAgMDExMTExMTExMTExMTExMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgUFFSU1RVVldYWVogICAgXwogICAgMHg4N2ZmLCAvLyAweDUwIC0gMHg1ZiAgMTExMTExMTExMTEwMDAwMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGFiY2RlZmdoaWprbG1ubwogICAgMHhmZmZlLCAvLyAweDYwIC0gMHg2ZiAgMDExMTExMTExMTExMTExMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgcHFyc3R1dnd4eXogICB+CiAgICAweDQ3ZmYsIC8vIDB4NzAgLSAweDdmICAxMTExMTExMTExMTAwMDEwCiAgXTsKCiAgLy8gR2VuZXJhbCBkZWxpbWl0ZXIgY2hhcmFjdGVycywgUkZDIDM5ODYgc2VjdGlvbiAyLjIuCiAgLy8gZ2VuLWRlbGltcyAgPSAiOiIgLyAiLyIgLyAiPyIgLyAiIyIgLyAiWyIgLyAiXSIgLyAiQCIKICAvLwogIHN0YXRpYyBjb25zdCBfZ2VuRGVsaW1pdGVyc1RhYmxlID0gPGludD5bCiAgICAvLyAgICAgICAgICAgICAgICAgICAgIExTQiAgICAgICAgICAgIE1TQgogICAgLy8gICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAogICAgMHgwMDAwLCAvLyAweDAwIC0gMHgwZiAgMDAwMDAwMDAwMDAwMDAwMAogICAgMHgwMDAwLCAvLyAweDEwIC0gMHgxZiAgMDAwMDAwMDAwMDAwMDAwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgLwogICAgMHg4MDA4LCAvLyAweDIwIC0gMHgyZiAgMDAwMTAwMDAwMDAwMDAwMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgPwogICAgMHg4NDAwLCAvLyAweDMwIC0gMHgzZiAgMDAwMDAwMDAwMDEwMDAwMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgQAogICAgMHgwMDAxLCAvLyAweDQwIC0gMHg0ZiAgMTAwMDAwMDAwMDAwMDAwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIF0KICAgIDB4MjgwMCwgLy8gMHg1MCAtIDB4NWYgIDAwMDAwMDAwMDAwMTAxMDAKICAgIC8vCiAgICAweDAwMDAsIC8vIDB4NjAgLSAweDZmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAvLwogICAgMHgwMDAwLCAvLyAweDcwIC0gMHg3ZiAgMDAwMDAwMDAwMDAwMDAwMAogIF07CgogIC8vIENoYXJhY3RlcnMgYWxsb3dlZCBpbiB0aGUgdXNlcmluZm8gYXMgb2YgUkZDIDM5ODYuCiAgLy8gUkZDIDM5ODYgQXBwZW5kaXggQQogIC8vIHVzZXJpbmZvID0gKiggdW5yZXNlcnZlZCAvIHBjdC1lbmNvZGVkIC8gc3ViLWRlbGltcyAvICc6JykKICBzdGF0aWMgY29uc3QgX3VzZXJpbmZvVGFibGUgPSA8aW50PlsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgTFNCICAgICAgICAgICAgTVNCCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8CiAgICAweDAwMDAsIC8vIDB4MDAgLSAweDBmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAweDAwMDAsIC8vIDB4MTAgLSAweDFmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgISAgJCAmJygpKissLS4KICAgIDB4N2ZkMiwgLy8gMHgyMCAtIDB4MmYgIDAxMDAxMDExMTExMTExMTAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIDAxMjM0NTY3ODk6OyA9CiAgICAweDJmZmYsIC8vIDB4MzAgLSAweDNmICAxMTExMTExMTExMTEwMTAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgQUJDREVGR0hJSktMTU5PCiAgICAweGZmZmUsIC8vIDB4NDAgLSAweDRmICAwMTExMTExMTExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBQUVJTVFVWV1hZWiAgICBfCiAgICAweDg3ZmYsIC8vIDB4NTAgLSAweDVmICAxMTExMTExMTExMTAwMDAxCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgYWJjZGVmZ2hpamtsbW5vCiAgICAweGZmZmUsIC8vIDB4NjAgLSAweDZmICAwMTExMTExMTExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBwcXJzdHV2d3h5eiAgIH4KICAgIDB4NDdmZiwgLy8gMHg3MCAtIDB4N2YgIDExMTExMTExMTExMDAwMTAKICBdOwoKICAvLyBDaGFyYWN0ZXJzIGFsbG93ZWQgaW4gdGhlIHJlZy1uYW1lIGFzIG9mIFJGQyAzOTg2LgogIC8vIFJGQyAzOTg2IEFwcGVuZGl4IEEKICAvLyByZWctbmFtZSA9ICooIHVucmVzZXJ2ZWQgLyBwY3QtZW5jb2RlZCAvIHN1Yi1kZWxpbXMgKQogIHN0YXRpYyBjb25zdCBfcmVnTmFtZVRhYmxlID0gPGludD5bCiAgICAvLyAgICAgICAgICAgICAgICAgICAgIExTQiAgICAgICAgICAgIE1TQgogICAgLy8gICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAogICAgMHgwMDAwLCAvLyAweDAwIC0gMHgwZiAgMDAwMDAwMDAwMDAwMDAwMAogICAgMHgwMDAwLCAvLyAweDEwIC0gMHgxZiAgMDAwMDAwMDAwMDAwMDAwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgICEgICQlJicoKSorLC0uCiAgICAweDdmZjIsIC8vIDB4MjAgLSAweDJmICAwMTAwMTExMTExMTExMTEwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAwMTIzNDU2Nzg5IDsgPQogICAgMHgyYmZmLCAvLyAweDMwIC0gMHgzZiAgMTExMTExMTExMTAxMDEwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgIEFCQ0RFRkdISUpLTE1OTwogICAgMHhmZmZlLCAvLyAweDQwIC0gMHg0ZiAgMDExMTExMTExMTExMTExMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgUFFSU1RVVldYWVogICAgXwogICAgMHg4N2ZmLCAvLyAweDUwIC0gMHg1ZiAgMTExMTExMTExMTEwMDAwMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGFiY2RlZmdoaWprbG1ubwogICAgMHhmZmZlLCAvLyAweDYwIC0gMHg2ZiAgMDExMTExMTExMTExMTExMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgcHFyc3R1dnd4eXogICB+CiAgICAweDQ3ZmYsIC8vIDB4NzAgLSAweDdmICAxMTExMTExMTExMTAwMDEwCiAgXTsKCiAgLy8gQ2hhcmFjdGVycyBhbGxvd2VkIGluIHRoZSBwYXRoIGFzIG9mIFJGQyAzOTg2LgogIC8vIFJGQyAzOTg2IHNlY3Rpb24gMy4zLgogIC8vIHBjaGFyID0gdW5yZXNlcnZlZCAvIHBjdC1lbmNvZGVkIC8gc3ViLWRlbGltcyAvICI6IiAvICJAIgogIHN0YXRpYyBjb25zdCBfcGF0aENoYXJUYWJsZSA9IDxpbnQ+WwogICAgLy8gICAgICAgICAgICAgICAgICAgICBMU0IgICAgICAgICAgICBNU0IKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKICAgIDB4MDAwMCwgLy8gMHgwMCAtIDB4MGYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIDB4MDAwMCwgLy8gMHgxMCAtIDB4MWYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAhICAkICYnKCkqKywtLgogICAgMHg3ZmQyLCAvLyAweDIwIC0gMHgyZiAgMDEwMDEwMTExMTExMTExMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgMDEyMzQ1Njc4OTo7ID0KICAgIDB4MmZmZiwgLy8gMHgzMCAtIDB4M2YgIDExMTExMTExMTExMTAxMDAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIEBBQkNERUZHSElKS0xNTk8KICAgIDB4ZmZmZiwgLy8gMHg0MCAtIDB4NGYgIDExMTExMTExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIFBRUlNUVVZXWFlaICAgIF8KICAgIDB4ODdmZiwgLy8gMHg1MCAtIDB4NWYgIDExMTExMTExMTExMDAwMDEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBhYmNkZWZnaGlqa2xtbm8KICAgIDB4ZmZmZSwgLy8gMHg2MCAtIDB4NmYgIDAxMTExMTExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHBxcnN0dXZ3eHl6ICAgfgogICAgMHg0N2ZmLCAvLyAweDcwIC0gMHg3ZiAgMTExMTExMTExMTEwMDAxMAogIF07CgogIC8vIENoYXJhY3RlcnMgYWxsb3dlZCBpbiB0aGUgcGF0aCBhcyBvZiBSRkMgMzk4Ni4KICAvLyBSRkMgMzk4NiBzZWN0aW9uIDMuMyAqYW5kKiBzbGFzaC4KICBzdGF0aWMgY29uc3QgX3BhdGhDaGFyT3JTbGFzaFRhYmxlID0gWwogICAgLy8gICAgICAgICAgICAgICAgICAgICBMU0IgICAgICAgICAgICBNU0IKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKICAgIDB4MDAwMCwgLy8gMHgwMCAtIDB4MGYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIDB4MDAwMCwgLy8gMHgxMCAtIDB4MWYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAhICAkICYnKCkqKywtLi8KICAgIDB4ZmZkMiwgLy8gMHgyMCAtIDB4MmYgIDAxMDAxMDExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIDAxMjM0NTY3ODk6OyA9CiAgICAweDJmZmYsIC8vIDB4MzAgLSAweDNmICAxMTExMTExMTExMTEwMTAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBAQUJDREVGR0hJSktMTU5PCiAgICAweGZmZmYsIC8vIDB4NDAgLSAweDRmICAxMTExMTExMTExMTExMTExCgogICAgLy8gICAgICAgICAgICAgICAgICAgICAgUFFSU1RVVldYWVogICAgXwogICAgMHg4N2ZmLCAvLyAweDUwIC0gMHg1ZiAgMTExMTExMTExMTEwMDAwMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGFiY2RlZmdoaWprbG1ubwogICAgMHhmZmZlLCAvLyAweDYwIC0gMHg2ZiAgMDExMTExMTExMTExMTExMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgcHFyc3R1dnd4eXogICB+CiAgICAweDQ3ZmYsIC8vIDB4NzAgLSAweDdmICAxMTExMTExMTExMTAwMDEwCiAgXTsKCiAgLy8gQ2hhcmFjdGVycyBhbGxvd2VkIGluIHRoZSBxdWVyeSBhcyBvZiBSRkMgMzk4Ni4KICAvLyBSRkMgMzk4NiBzZWN0aW9uIDMuNC4KICAvLyBxdWVyeSA9ICooIHBjaGFyIC8gIi8iIC8gIj8iICkKICBzdGF0aWMgY29uc3QgX3F1ZXJ5Q2hhclRhYmxlID0gWwogICAgLy8gICAgICAgICAgICAgICAgICAgICBMU0IgICAgICAgICAgICBNU0IKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKICAgIDB4MDAwMCwgLy8gMHgwMCAtIDB4MGYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIDB4MDAwMCwgLy8gMHgxMCAtIDB4MWYgIDAwMDAwMDAwMDAwMDAwMDAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAhICAkICYnKCkqKywtLi8KICAgIDB4ZmZkMiwgLy8gMHgyMCAtIDB4MmYgIDAxMDAxMDExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIDAxMjM0NTY3ODk6OyA9ID8KICAgIDB4YWZmZiwgLy8gMHgzMCAtIDB4M2YgIDExMTExMTExMTExMTAxMDEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIEBBQkNERUZHSElKS0xNTk8KICAgIDB4ZmZmZiwgLy8gMHg0MCAtIDB4NGYgIDExMTExMTExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIFBRUlNUVVZXWFlaICAgIF8KICAgIDB4ODdmZiwgLy8gMHg1MCAtIDB4NWYgIDExMTExMTExMTExMDAwMDEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBhYmNkZWZnaGlqa2xtbm8KICAgIDB4ZmZmZSwgLy8gMHg2MCAtIDB4NmYgIDAxMTExMTExMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHBxcnN0dXZ3eHl6ICAgfgogICAgMHg0N2ZmLCAvLyAweDcwIC0gMHg3ZiAgMTExMTExMTExMTEwMDAxMAogIF07CgogIC8vIENoYXJhY3RlcnMgYWxsb3dlZCBpbiB0aGUgWm9uZUlEIGFzIG9mIFJGQyA2ODc0LgogIC8vIFpvbmVJRCA9IDEqKCB1bnJlc2VydmVkIC8gcGN0LWVuY29kZWQgKQogIHN0YXRpYyBjb25zdCBfem9uZUlEVGFibGUgPSA8aW50PlsKICAgIC8vICAgICAgICAgICAgICAgICAgICAgTFNCICAgICAgICAgICAgTVNCCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8CiAgICAweDAwMDAsIC8vIDB4MDAgLSAweDBmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAweDAwMDAsIC8vIDB4MTAgLSAweDFmICAwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgISAgJCUmJygpKissLS4KICAgIDB4NjAwMCwgLy8gMHgyMCAtIDB4MmYgIDAwMDAwMDAwMDAwMDAxMTAKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIDAxMjM0NTY3ODkgOyA9CiAgICAweDAzZmYsIC8vIDB4MzAgLSAweDNmICAxMTExMTExMTExMDAwMDAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgQUJDREVGR0hJSktMTU5PCiAgICAweGZmZmUsIC8vIDB4NDAgLSAweDRmICAwMTExMTExMTExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBQUVJTVFVWV1hZWiAgICBfCiAgICAweDg3ZmYsIC8vIDB4NTAgLSAweDVmICAxMTExMTExMTExMTAwMDAxCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgYWJjZGVmZ2hpamtsbW5vCiAgICAweGZmZmUsIC8vIDB4NjAgLSAweDZmICAwMTExMTExMTExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBwcXJzdHV2d3h5eiAgIH4KICAgIDB4NDdmZiwgLy8gMHg3MCAtIDB4N2YgIDExMTExMTExMTExMDAwMTAKICBdOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBEYXRhIFVSSQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLyoqCiAqIEEgd2F5IHRvIGFjY2VzcyB0aGUgc3RydWN0dXJlIG9mIGEgYGRhdGE6YCBVUkkuCiAqCiAqIERhdGEgVVJJcyBhcmUgbm9uLWhpZXJhcmNoaWNhbCBVUklzIHRoYXQgY2FuIGNvbnRhaW4gYW55IGJpbmFyeSBkYXRhLgogKiBUaGV5IGFyZSBkZWZpbmVkIGJ5IFtSRkMgMjM5N10oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzIzOTcpLgogKgogKiBUaGlzIGNsYXNzIGFsbG93cyBwYXJzaW5nIHRoZSBVUkkgdGV4dCBhbmQgZXh0cmFjdGluZyBpbmRpdmlkdWFsIHBhcnRzIG9mIHRoZQogKiBVUkksIGFzIHdlbGwgYXMgYnVpbGRpbmcgdGhlIFVSSSB0ZXh0IGZyb20gc3RydWN0dXJlZCBwYXJ0cy4KICovCmNsYXNzIFVyaURhdGEgewogIHN0YXRpYyBjb25zdCBpbnQgX25vU2NoZW1lID0gLTE7CiAgLyoqCiAgICogQ29udGFpbnMgdGhlIHRleHQgY29udGVudCBvZiBhIGBkYXRhOmAgVVJJLCB3aXRoIG9yIHdpdGhvdXQgYQogICAqIGxlYWRpbmcgYGRhdGE6YC4KICAgKgogICAqIElmIFtfc2VwYXJhdG9ySW5kaWNlc10gc3RhcnRzIHdpdGggYDRgICh0aGUgaW5kZXggb2YgdGhlIGA6YCksIHRoZW4KICAgKiB0aGVyZSBpcyBhIGxlYWRpbmcgYGRhdGE6YCwgb3RoZXJ3aXNlIFtfc2VwYXJhdG9ySW5kaWNlc10gc3RhcnRzIHdpdGgKICAgKiBgLTFgLgogICAqLwogIGZpbmFsIFN0cmluZyBfdGV4dDsKCiAgLyoqCiAgICogTGlzdCBvZiB0aGUgc2VwYXJhdG9ycyAoJzsnLCAnPScgYW5kICcsJykgaW4gdGhlIHRleHQuCiAgICoKICAgKiBTdGFydHMgd2l0aCB0aGUgaW5kZXggb2YgdGhlIGA6YCBpbiBgZGF0YTpgIG9mIHRoZSBtaW1lVHlwZS4KICAgKiBUaGF0IGlzIGFsd2F5cyBlaXRoZXIgLTEgb3IgNCwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYF90ZXh0YCBpbmNsdWRlcyB0aGUKICAgKiBgZGF0YTpgIHNjaGVtZSBvciBub3QuCiAgICoKICAgKiBUaGUgZmlyc3Qgc3BlcGFyYXRvciBlbmRzIHRoZSBtaW1lIHR5cGUuIFdlIGRvbid0IGJvdGhlciB3aXRoIGZpbmRpbmcKICAgKiB0aGUgJy8nIGluc2lkZSB0aGUgbWltZSB0eXBlLgogICAqCiAgICogRWFjaCB0d28gc2VwYXJhdG9ycyBhZnRlciB0aGF0IG1hcmtzIGEgcGFyYW1ldGVyIGtleSBhbmQgdmFsdWUuCiAgICoKICAgKiBJZiB0aGVyZSBpcyBhIHNpbmdsZSBzZXBhcmF0b3IgbGVmdCwgaXQgZW5kcyB0aGUgImJhc2U2NCIgbWFya2VyLgogICAqCiAgICogU28gdGhlIGZvbGxvd2luZyBzZXBhcmF0b3JzIGFyZSBmb3VuZCBmb3IgYSB0ZXh0OgogICAqIGBgYAogICAqIGRhdGE6dGV4dC9wbGFpbjtmb289YmFyO2Jhc2U2NCxBUkdMRUJBUkdMRT0KICAgKiAgICAgXiAgICAgICAgICBeICAgXiAgIF4gICAgICBeCiAgICogYGBgCiAgICovCiAgZmluYWwgTGlzdDxpbnQ+IF9zZXBhcmF0b3JJbmRpY2VzOwoKICAvKioKICAgKiBDYWNoZSBvZiB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IFt1cmldLgogICAqLwogIFVyaSBfdXJpQ2FjaGU7CgogIFVyaURhdGEuXyh0aGlzLl90ZXh0LCB0aGlzLl9zZXBhcmF0b3JJbmRpY2VzLCB0aGlzLl91cmlDYWNoZSk7CgogIC8vIEF2b2lkIHNoYWRvd2luZyBieSBhcmd1bWVudC4KICBzdGF0aWMgY29uc3QgQmFzZTY0Q29kZWMgX2Jhc2U2NCA9IGJhc2U2NDsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIGBkYXRhOmAgVVJJIGNvbnRhaW5pbmcgdGhlIFtjb250ZW50XSBzdHJpbmcuCiAgICoKICAgKiBFcXVpdmFsZW50IHRvIGBuZXcgVXJpLmRhdGFGcm9tU3RyaW5nKC4uLikuZGF0YWAsIGJ1dCBtYXkKICAgKiBiZSBtb3JlIGVmZmljaWVudCBpZiB0aGUgW3VyaV0gaXRzZWxmIGlzbid0IHVzZWQuCiAgICovCiAgZmFjdG9yeSBVcmlEYXRhLmZyb21TdHJpbmcoU3RyaW5nIGNvbnRlbnQsCiAgICAgIHtTdHJpbmcgbWltZVR5cGUsCiAgICAgIEVuY29kaW5nIGVuY29kaW5nLAogICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtZXRlcnMsCiAgICAgIGJvb2wgYmFzZTY0ID0gZmFsc2V9KSB7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gU3RyaW5nQnVmZmVyKCk7CiAgICBMaXN0PGludD4gaW5kaWNlcyA9IFtfbm9TY2hlbWVdOwogICAgU3RyaW5nIGNoYXJzZXROYW1lOwogICAgU3RyaW5nIGVuY29kaW5nTmFtZTsKICAgIGlmIChwYXJhbWV0ZXJzICE9IG51bGwpIGNoYXJzZXROYW1lID0gcGFyYW1ldGVyc1siY2hhcnNldCJdOwogICAgaWYgKGVuY29kaW5nID09IG51bGwpIHsKICAgICAgaWYgKGNoYXJzZXROYW1lICE9IG51bGwpIHsKICAgICAgICBlbmNvZGluZyA9IEVuY29kaW5nLmdldEJ5TmFtZShjaGFyc2V0TmFtZSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoY2hhcnNldE5hbWUgPT0gbnVsbCkgewogICAgICAvLyBOb24tbnVsbCBvbmx5IGlmIHBhcmFtZXRlcnMgZG9lcyBub3QgY29udGFpbiAiY2hhcnNldCIuCiAgICAgIGVuY29kaW5nTmFtZSA9IGVuY29kaW5nLm5hbWU7CiAgICB9CiAgICBlbmNvZGluZyA/Pz0gYXNjaWk7CiAgICBfd3JpdGVVcmkobWltZVR5cGUsIGVuY29kaW5nTmFtZSwgcGFyYW1ldGVycywgYnVmZmVyLCBpbmRpY2VzKTsKICAgIGluZGljZXMuYWRkKGJ1ZmZlci5sZW5ndGgpOwogICAgaWYgKGJhc2U2NCkgewogICAgICBidWZmZXIud3JpdGUoJztiYXNlNjQsJyk7CiAgICAgIGluZGljZXMuYWRkKGJ1ZmZlci5sZW5ndGggLSAxKTsKICAgICAgYnVmZmVyLndyaXRlKGVuY29kaW5nLmZ1c2UoX2Jhc2U2NCkuZW5jb2RlKGNvbnRlbnQpKTsKICAgIH0gZWxzZSB7CiAgICAgIGJ1ZmZlci53cml0ZSgnLCcpOwogICAgICBfdXJpRW5jb2RlQnl0ZXMoX3VyaWNUYWJsZSwgZW5jb2RpbmcuZW5jb2RlKGNvbnRlbnQpLCBidWZmZXIpOwogICAgfQogICAgcmV0dXJuIFVyaURhdGEuXyhidWZmZXIudG9TdHJpbmcoKSwgaW5kaWNlcywgbnVsbCk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgYGRhdGE6YCBVUkkgY29udGFpbmluZyBhbiBlbmNvZGluZyBvZiBbYnl0ZXNdLgogICAqCiAgICogRXF1aXZhbGVudCB0byBgbmV3IFVyaS5kYXRhRnJvbUJ5dGVzKC4uLikuZGF0YWAsIGJ1dCBtYXkKICAgKiBiZSBtb3JlIGVmZmljaWVudCBpZiB0aGUgW3VyaV0gaXRzZWxmIGlzbid0IHVzZWQuCiAgICovCiAgZmFjdG9yeSBVcmlEYXRhLmZyb21CeXRlcyhMaXN0PGludD4gYnl0ZXMsCiAgICAgIHttaW1lVHlwZSA9ICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLAogICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtZXRlcnMsCiAgICAgIHBlcmNlbnRFbmNvZGVkID0gZmFsc2V9KSB7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gU3RyaW5nQnVmZmVyKCk7CiAgICBMaXN0PGludD4gaW5kaWNlcyA9IFtfbm9TY2hlbWVdOwogICAgX3dyaXRlVXJpKG1pbWVUeXBlLCBudWxsLCBwYXJhbWV0ZXJzLCBidWZmZXIsIGluZGljZXMpOwogICAgaW5kaWNlcy5hZGQoYnVmZmVyLmxlbmd0aCk7CiAgICBpZiAocGVyY2VudEVuY29kZWQpIHsKICAgICAgYnVmZmVyLndyaXRlKCcsJyk7CiAgICAgIF91cmlFbmNvZGVCeXRlcyhfdXJpY1RhYmxlLCBieXRlcywgYnVmZmVyKTsKICAgIH0gZWxzZSB7CiAgICAgIGJ1ZmZlci53cml0ZSgnO2Jhc2U2NCwnKTsKICAgICAgaW5kaWNlcy5hZGQoYnVmZmVyLmxlbmd0aCAtIDEpOwogICAgICBfYmFzZTY0LmVuY29kZXIKICAgICAgICAgIC5zdGFydENodW5rZWRDb252ZXJzaW9uKFN0cmluZ0NvbnZlcnNpb25TaW5rLmZyb21TdHJpbmdTaW5rKGJ1ZmZlcikpCiAgICAgICAgICAuYWRkU2xpY2UoYnl0ZXMsIDAsIGJ5dGVzLmxlbmd0aCwgdHJ1ZSk7CiAgICB9CgogICAgcmV0dXJuIFVyaURhdGEuXyhidWZmZXIudG9TdHJpbmcoKSwgaW5kaWNlcywgbnVsbCk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgYERhdGFVcmlgIGZyb20gYSBbVXJpXSB3aGljaCBtdXN0IGhhdmUgYGRhdGFgIGFzIFtVcmkuc2NoZW1lXS4KICAgKgogICAqIFRoZSBbdXJpXSBtdXN0IGhhdmUgc2NoZW1lIGBkYXRhYCBhbmQgbm8gYXV0aG9yaXR5IG9yIGZyYWdtZW50LAogICAqIGFuZCB0aGUgcGF0aCAoY29uY2F0ZW5hdGVkIHdpdGggdGhlIHF1ZXJ5LCBpZiB0aGVyZSBpcyBvbmUpIG11c3QgYmUgdmFsaWQKICAgKiBhcyBkYXRhIFVSSSBjb250ZW50IHdpdGggdGhlIHNhbWUgcnVsZXMgYXMgW3BhcnNlXS4KICAgKi8KICBmYWN0b3J5IFVyaURhdGEuZnJvbVVyaShVcmkgdXJpKSB7CiAgICBpZiAodXJpLnNjaGVtZSAhPSAiZGF0YSIpIHsKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvci52YWx1ZSh1cmksICJ1cmkiLCAiU2NoZW1lIG11c3QgYmUgJ2RhdGEnIik7CiAgICB9CiAgICBpZiAodXJpLmhhc0F1dGhvcml0eSkgewogICAgICB0aHJvdyBBcmd1bWVudEVycm9yLnZhbHVlKHVyaSwgInVyaSIsICJEYXRhIHVyaSBtdXN0IG5vdCBoYXZlIGF1dGhvcml0eSIpOwogICAgfQogICAgaWYgKHVyaS5oYXNGcmFnbWVudCkgewogICAgICB0aHJvdyBBcmd1bWVudEVycm9yLnZhbHVlKAogICAgICAgICAgdXJpLCAidXJpIiwgIkRhdGEgdXJpIG11c3Qgbm90IGhhdmUgYSBmcmFnbWVudCBwYXJ0Iik7CiAgICB9CiAgICBpZiAoIXVyaS5oYXNRdWVyeSkgewogICAgICByZXR1cm4gX3BhcnNlKHVyaS5wYXRoLCAwLCB1cmkpOwogICAgfQogICAgLy8gSW5jbHVkZXMgcGF0aCBhbmQgcXVlcnkgKGFuZCBsZWFkaW5nICJkYXRhOiIpLgogICAgcmV0dXJuIF9wYXJzZSgiJHVyaSIsIDUsIHVyaSk7CiAgfQoKICAvKioKICAgKiBXcml0ZXMgdGhlIGluaXRpYWwgcGFydCBvZiBhIGBkYXRhOmAgdXJpLCBmcm9tIGFmdGVyIHRoZSAiZGF0YToiCiAgICogdW50aWwganVzdCBiZWZvcmUgdGhlICcsJyBiZWZvcmUgdGhlIGRhdGEsIG9yIGJlZm9yZSBhIGA7YmFzZTY0LGAKICAgKiBtYXJrZXIuCiAgICoKICAgKiBPZiBhbiBbaW5kaWNlc10gbGlzdCBpcyBwYXNzZWQsIHNlcGFyYXRvciBpbmRpY2VzIGFyZSBzdG9yZWQgaW4gdGhhdAogICAqIGxpc3QuCiAgICovCiAgc3RhdGljIHZvaWQgX3dyaXRlVXJpKFN0cmluZyBtaW1lVHlwZSwgU3RyaW5nIGNoYXJzZXROYW1lLAogICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtZXRlcnMsIFN0cmluZ0J1ZmZlciBidWZmZXIsIExpc3QgaW5kaWNlcykgewogICAgaWYgKG1pbWVUeXBlID09IG51bGwgfHwgbWltZVR5cGUgPT0gInRleHQvcGxhaW4iKSB7CiAgICAgIG1pbWVUeXBlID0gIiI7CiAgICB9CiAgICBpZiAobWltZVR5cGUuaXNFbXB0eSB8fCBpZGVudGljYWwobWltZVR5cGUsICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKSkgewogICAgICBidWZmZXIud3JpdGUobWltZVR5cGUpOyAvLyBDb21tb24gY2FzZXMgbmVlZCBubyBlc2NhcGluZy4KICAgIH0gZWxzZSB7CiAgICAgIGludCBzbGFzaEluZGV4ID0gX3ZhbGlkYXRlTWltZVR5cGUobWltZVR5cGUpOwogICAgICBpZiAoc2xhc2hJbmRleCA8IDApIHsKICAgICAgICB0aHJvdyBBcmd1bWVudEVycm9yLnZhbHVlKG1pbWVUeXBlLCAibWltZVR5cGUiLCAiSW52YWxpZCBNSU1FIHR5cGUiKTsKICAgICAgfQogICAgICBidWZmZXIud3JpdGUoX1VyaS5fdXJpRW5jb2RlKAogICAgICAgICAgX3Rva2VuQ2hhclRhYmxlLCBtaW1lVHlwZS5zdWJzdHJpbmcoMCwgc2xhc2hJbmRleCksIHV0ZjgsIGZhbHNlKSk7CiAgICAgIGJ1ZmZlci53cml0ZSgiLyIpOwogICAgICBidWZmZXIud3JpdGUoX1VyaS5fdXJpRW5jb2RlKAogICAgICAgICAgX3Rva2VuQ2hhclRhYmxlLCBtaW1lVHlwZS5zdWJzdHJpbmcoc2xhc2hJbmRleCArIDEpLCB1dGY4LCBmYWxzZSkpOwogICAgfQogICAgaWYgKGNoYXJzZXROYW1lICE9IG51bGwpIHsKICAgICAgaWYgKGluZGljZXMgIT0gbnVsbCkgewogICAgICAgIGluZGljZXMuLmFkZChidWZmZXIubGVuZ3RoKS4uYWRkKGJ1ZmZlci5sZW5ndGggKyA4KTsKICAgICAgfQogICAgICBidWZmZXIud3JpdGUoIjtjaGFyc2V0PSIpOwogICAgICBidWZmZXIud3JpdGUoX1VyaS5fdXJpRW5jb2RlKF90b2tlbkNoYXJUYWJsZSwgY2hhcnNldE5hbWUsIHV0ZjgsIGZhbHNlKSk7CiAgICB9CiAgICBwYXJhbWV0ZXJzPy5mb3JFYWNoKChrZXksIHZhbHVlKSB7CiAgICAgIGlmIChrZXkuaXNFbXB0eSkgewogICAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IudmFsdWUoIiIsICJQYXJhbWV0ZXIgbmFtZXMgbXVzdCBub3QgYmUgZW1wdHkiKTsKICAgICAgfQogICAgICBpZiAodmFsdWUuaXNFbXB0eSkgewogICAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IudmFsdWUoCiAgICAgICAgICAgICIiLCAiUGFyYW1ldGVyIHZhbHVlcyBtdXN0IG5vdCBiZSBlbXB0eSIsICdwYXJhbWV0ZXJzWyIka2V5Il0nKTsKICAgICAgfQogICAgICBpZiAoaW5kaWNlcyAhPSBudWxsKSBpbmRpY2VzLmFkZChidWZmZXIubGVuZ3RoKTsKICAgICAgYnVmZmVyLndyaXRlKCc7Jyk7CiAgICAgIC8vIEVuY29kZSBhbnkgbm9uLVJGQzIwNDUtdG9rZW4gY2hhcmFjdGVyIGFuZCBib3RoICclJyBhbmQgJyMnLgogICAgICBidWZmZXIud3JpdGUoX1VyaS5fdXJpRW5jb2RlKF90b2tlbkNoYXJUYWJsZSwga2V5LCB1dGY4LCBmYWxzZSkpOwogICAgICBpZiAoaW5kaWNlcyAhPSBudWxsKSBpbmRpY2VzLmFkZChidWZmZXIubGVuZ3RoKTsKICAgICAgYnVmZmVyLndyaXRlKCc9Jyk7CiAgICAgIGJ1ZmZlci53cml0ZShfVXJpLl91cmlFbmNvZGUoX3Rva2VuQ2hhclRhYmxlLCB2YWx1ZSwgdXRmOCwgZmFsc2UpKTsKICAgIH0pOwogIH0KCiAgLyoqCiAgICogQ2hlY2tzIG1pbWVUeXBlIGlzIHZhbGlkLWlzaCAoYHRva2VuICcvJyB0b2tlbmApLgogICAqCiAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHNsYXNoLCBvciAtMSBpZiB0aGUgbWltZSB0eXBlIGlzIG5vdAogICAqIGNvbnNpZGVyZWQgdmFsaWQuCiAgICoKICAgKiBDdXJyZW50bHkgb25seSBsb29rcyBmb3Igc2xhc2hlcywgYWxsIG90aGVyIGNoYXJhY3RlcnMgd2lsbCBiZQogICAqIHBlcmNlbnQtZW5jb2RlZCBhcyBVVEYtOCBpZiBuZWNlc3NhcnkuCiAgICovCiAgc3RhdGljIGludCBfdmFsaWRhdGVNaW1lVHlwZShTdHJpbmcgbWltZVR5cGUpIHsKICAgIGludCBzbGFzaEluZGV4ID0gLTE7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG1pbWVUeXBlLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBjaGFyID0gbWltZVR5cGUuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGNoYXIgIT0gX1NMQVNIKSBjb250aW51ZTsKICAgICAgaWYgKHNsYXNoSW5kZXggPCAwKSB7CiAgICAgICAgc2xhc2hJbmRleCA9IGk7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgcmV0dXJuIHNsYXNoSW5kZXg7CiAgfQoKICAvKioKICAgKiBQYXJzZXMgYSBzdHJpbmcgYXMgYSBgZGF0YWAgVVJJLgogICAqCiAgICogVGhlIHN0cmluZyBtdXN0IGhhdmUgdGhlIGZvcm1hdDoKICAgKgogICAqIGBgYAogICAqICdkYXRhOicgKHR5cGUgJy8nIHN1YnR5cGUpPyAoJzsnIGF0dHJpYnV0ZSAnPScgdmFsdWUpKiAoJztiYXNlNjQnKT8gJywnIGRhdGEKICAgKiBgYGBgCiAgICoKICAgKiB3aGVyZSBgdHlwZWAsIGBzdWJ0eXBlYCwgYGF0dHJpYnV0ZWAgYW5kIGB2YWx1ZWAgYXJlIHNwZWNpZmllZCBpbiBSRkMtMjA0NSwKICAgKiBhbmQgYGRhdGFgIGlzIGEgc2VxdWVuY2Ugb2YgVVJJLWNoYXJhY3RlcnMgKFJGQy0yMzk2IGB1cmljYCkuCiAgICoKICAgKiBUaGlzIG1lYW5zIHRoYXQgYWxsIHRoZSBjaGFyYWN0ZXJzIG11c3QgYmUgQVNDSUksIGJ1dCB0aGUgVVJJIG1heSBjb250YWluCiAgICogcGVyY2VudC1lc2NhcGVzIGZvciBub24tQVNDSUkgYnl0ZSB2YWx1ZXMgdGhhdCBuZWVkIGFuIGludGVycHJldGF0aW9uCiAgICogdG8gYmUgY29udmVydGVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIHN0cmluZy4KICAgKgogICAqIFBhcnNpbmcgY2hlY2tzIHRoYXQgQmFzZTY0IGVuY29kZWQgZGF0YSBpcyB2YWxpZCwgYW5kIGl0IG5vcm1hbGl6ZXMgaXQKICAgKiB0byB1c2UgdGhlIGRlZmF1bHQgQmFzZTY0IGFscGhhYmV0IGFuZCB0byB1c2UgcGFkZGluZy4KICAgKiBOb24tQmFzZTY0IGRhdGEgaXMgZXNjYXBlZCB1c2luZyBwZXJjZW50LWVzY2FwZXMgYXMgbmVjZXNzYXJ5IHRvIG1ha2UKICAgKiBpdCB2YWxpZCwgYW5kIGV4aXN0aW5nIGVzY2FwZXMgYXJlIGNhc2Ugbm9ybWFsaXplZC4KICAgKgogICAqIEFjY2Vzc2luZyB0aGUgaW5kaXZpZHVhbCBwYXJ0cyBtYXkgZmFpbCBsYXRlciBpZiB0aGV5IHR1cm4gb3V0IHRvIGhhdmUKICAgKiBjb250ZW50IHRoYXQgY2FuJ3QgYmUgZGVjb2RlZCBzdWNjZXNzZnVsbHkgYXMgYSBzdHJpbmcsIGZvciBleGFtcGxlIGlmCiAgICogZXhpc3RpbmcgcGVyY2VudCBlc2NhcGVzIHJlcHJlc2VudCBieXRlcyB0aGF0IGNhbm5vdCBiZSBkZWNvZGVkCiAgICogYnkgdGhlIGNob3NlbiBbRW5jb2RpbmddIChzZWUgW2NvbnRlbnRBc1N0cmluZ10pLgogICAqCiAgICogQSBbRm9ybWF0RXhjZXB0aW9uXSBpcyB0aHJvd24gaWYgW3VyaV0gaXMgbm90IGEgdmFsaWQgZGF0YSBVUkkuCiAgICovCiAgc3RhdGljIFVyaURhdGEgcGFyc2UoU3RyaW5nIHVyaSkgewogICAgaWYgKHVyaS5sZW5ndGggPj0gNSkgewogICAgICBpbnQgZGF0YURlbHRhID0gX3N0YXJ0c1dpdGhEYXRhKHVyaSwgMCk7CiAgICAgIGlmIChkYXRhRGVsdGEgPT0gMCkgewogICAgICAgIC8vIEV4YWN0IG1hdGNoIG9uICJkYXRhOiIuCiAgICAgICAgcmV0dXJuIF9wYXJzZSh1cmksIDUsIG51bGwpOwogICAgICB9CiAgICAgIGlmIChkYXRhRGVsdGEgPT0gMHgyMCkgewogICAgICAgIC8vIFN0YXJ0cyB3aXRoIGEgbm9uLW5vcm1hbGl6ZWQgImRhdGEiIHNjaGVtZSBjb250YWluaW5nIHVwcGVyLWNhc2UKICAgICAgICAvLyBsZXR0ZXJzLiBQYXJzZSBhbnl3YXksIGJ1dCB0aHJvdyBhd2F5IHRoZSBzY2hlbWUuCiAgICAgICAgcmV0dXJuIF9wYXJzZSh1cmkuc3Vic3RyaW5nKDUpLCAwLCBudWxsKTsKICAgICAgfQogICAgfQogICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKCJEb2VzIG5vdCBzdGFydCB3aXRoICdkYXRhOiciLCB1cmksIDApOwogIH0KCiAgLyoqCiAgICogVGhlIFtVcmldIHRoYXQgdGhpcyBgVXJpRGF0YWAgaXMgZ2l2aW5nIGFjY2VzcyB0by4KICAgKgogICAqIFJldHVybnMgYSBgVXJpYCB3aXRoIHNjaGVtZSBgZGF0YWAgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhlIGRhdGEgVVJJCiAgICogYXMgcGF0aC4KICAgKi8KICBVcmkgZ2V0IHVyaSB7CiAgICBpZiAoX3VyaUNhY2hlICE9IG51bGwpIHJldHVybiBfdXJpQ2FjaGU7CiAgICBTdHJpbmcgcGF0aCA9IF90ZXh0OwogICAgU3RyaW5nIHF1ZXJ5OwogICAgaW50IGNvbG9uSW5kZXggPSBfc2VwYXJhdG9ySW5kaWNlc1swXTsKICAgIGludCBxdWVyeUluZGV4ID0gX3RleHQuaW5kZXhPZignPycsIGNvbG9uSW5kZXggKyAxKTsKICAgIGludCBlbmQgPSBfdGV4dC5sZW5ndGg7CiAgICBpZiAocXVlcnlJbmRleCA+PSAwKSB7CiAgICAgIHF1ZXJ5ID0gX1VyaS5fbm9ybWFsaXplT3JTdWJzdHJpbmcoCiAgICAgICAgICBfdGV4dCwgcXVlcnlJbmRleCArIDEsIGVuZCwgX1VyaS5fcXVlcnlDaGFyVGFibGUpOwogICAgICBlbmQgPSBxdWVyeUluZGV4OwogICAgfQogICAgcGF0aCA9IF9VcmkuX25vcm1hbGl6ZU9yU3Vic3RyaW5nKAogICAgICAgIF90ZXh0LCBjb2xvbkluZGV4ICsgMSwgZW5kLCBfVXJpLl9wYXRoQ2hhck9yU2xhc2hUYWJsZSk7CiAgICBfdXJpQ2FjaGUgPSBfRGF0YVVyaSh0aGlzLCBwYXRoLCBxdWVyeSk7CiAgICByZXR1cm4gX3VyaUNhY2hlOwogIH0KCiAgLyoqCiAgICogVGhlIE1JTUUgdHlwZSBvZiB0aGUgZGF0YSBVUkkuCiAgICoKICAgKiBBIGRhdGEgVVJJIGNvbnNpc3RzIG9mIGEgIm1lZGlhIHR5cGUiIGZvbGxvd2VkIGJ5IGRhdGEuCiAgICogVGhlIG1lZGlhIHR5cGUgc3RhcnRzIHdpdGggYSBNSU1FIHR5cGUgYW5kIGNhbiBiZSBmb2xsb3dlZCBieQogICAqIGV4dHJhIHBhcmFtZXRlcnMuCiAgICogSWYgdGhlIE1JTUUgdHlwZSByZXByZXNlbnRhdGlvbiBpbiB0aGUgVVJJIHRleHQgY29udGFpbnMgVVJJIGVzY2FwZXMsCiAgICogdGhleSBhcmUgdW5lc2NhcGVkIGluIHRoZSByZXR1cm5lZCBzdHJpbmcuCiAgICogSWYgdGhlIHZhbHVlIGNvbnRhaW4gbm9uLUFTQ0lJIHBlcmNlbnQgZXNjYXBlcywgdGhleSBhcmUgZGVjb2RlZCBhcyBVVEYtOC4KICAgKgogICAqIEV4YW1wbGU6CiAgICoKICAgKiAgICAgZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgsSGVsbG8lMjBXb3JsZCEKICAgKgogICAqIFRoaXMgZGF0YSBVUkkgaGFzIHRoZSBtZWRpYSB0eXBlIGB0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLThgLCB3aGljaCBpcyB0aGUKICAgKiBNSU1FIHR5cGUgYHRleHQvcGxhaW5gIHdpdGggdGhlIHBhcmFtZXRlciBgY2hhcnNldGAgd2l0aCB2YWx1ZSBgdXRmLThgLgogICAqIFNlZSBbUkZDIDIwNDVdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMDQ1KSBmb3IgbW9yZSBkZXRhaWwuCiAgICoKICAgKiBJZiB0aGUgZmlyc3QgcGFydCBvZiB0aGUgZGF0YSBVUkkgaXMgZW1wdHksIGl0IGRlZmF1bHRzIHRvIGB0ZXh0L3BsYWluYC4KICAgKi8KICBTdHJpbmcgZ2V0IG1pbWVUeXBlIHsKICAgIGludCBzdGFydCA9IF9zZXBhcmF0b3JJbmRpY2VzWzBdICsgMTsKICAgIGludCBlbmQgPSBfc2VwYXJhdG9ySW5kaWNlc1sxXTsKICAgIGlmIChzdGFydCA9PSBlbmQpIHJldHVybiAidGV4dC9wbGFpbiI7CiAgICByZXR1cm4gX1VyaS5fdXJpRGVjb2RlKF90ZXh0LCBzdGFydCwgZW5kLCB1dGY4LCBmYWxzZSk7CiAgfQoKICAvKioKICAgKiBUaGUgY2hhcnNldCBwYXJhbWV0ZXIgb2YgdGhlIG1lZGlhIHR5cGUuCiAgICoKICAgKiBJZiB0aGUgcGFyYW1ldGVycyBvZiB0aGUgbWVkaWEgdHlwZSBjb250YWlucyBhIGBjaGFyc2V0YCBwYXJhbWV0ZXIKICAgKiB0aGVuIHRoaXMgcmV0dXJucyBpdHMgdmFsdWUsIG90aGVyd2lzZSBpdCByZXR1cm5zIGBVUy1BU0NJSWAsCiAgICogd2hpY2ggaXMgdGhlIGRlZmF1bHQgY2hhcnNldCBmb3IgZGF0YSBVUklzLgogICAqIElmIHRoZSB2YWx1ZSBjb250YWluIG5vbi1BU0NJSSBwZXJjZW50IGVzY2FwZXMsIHRoZXkgYXJlIGRlY29kZWQgYXMgVVRGLTguCiAgICoKICAgKiBJZiB0aGUgTUlNRSB0eXBlIHJlcHJlc2VudGF0aW9uIGluIHRoZSBVUkkgdGV4dCBjb250YWlucyBVUkkgZXNjYXBlcywKICAgKiB0aGV5IGFyZSB1bmVzY2FwZWQgaW4gdGhlIHJldHVybmVkIHN0cmluZy4KICAgKi8KICBTdHJpbmcgZ2V0IGNoYXJzZXQgewogICAgaW50IHBhcmFtZXRlclN0YXJ0ID0gMTsKICAgIGludCBwYXJhbWV0ZXJFbmQgPSBfc2VwYXJhdG9ySW5kaWNlcy5sZW5ndGggLSAxOyAvLyBUaGUgJywnIGJlZm9yZSBkYXRhLgogICAgaWYgKGlzQmFzZTY0KSB7CiAgICAgIC8vIFRoZXJlIGlzIGEgIjtiYXNlNjQiIHNlcGFyYXRvciwgc28gc3VidHJhY3Qgb25lIGZvciB0aGF0IGFzIHdlbGwuCiAgICAgIHBhcmFtZXRlckVuZCAtPSAxOwogICAgfQogICAgZm9yIChpbnQgaSA9IHBhcmFtZXRlclN0YXJ0OyBpIDwgcGFyYW1ldGVyRW5kOyBpICs9IDIpIHsKICAgICAgdmFyIGtleVN0YXJ0ID0gX3NlcGFyYXRvckluZGljZXNbaV0gKyAxOwogICAgICB2YXIga2V5RW5kID0gX3NlcGFyYXRvckluZGljZXNbaSArIDFdOwogICAgICBpZiAoa2V5RW5kID09IGtleVN0YXJ0ICsgNyAmJiBfdGV4dC5zdGFydHNXaXRoKCJjaGFyc2V0Iiwga2V5U3RhcnQpKSB7CiAgICAgICAgcmV0dXJuIF9VcmkuX3VyaURlY29kZSgKICAgICAgICAgICAgX3RleHQsIGtleUVuZCArIDEsIF9zZXBhcmF0b3JJbmRpY2VzW2kgKyAyXSwgdXRmOCwgZmFsc2UpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gIlVTLUFTQ0lJIjsKICB9CgogIC8qKgogICAqIFdoZXRoZXIgdGhlIGRhdGEgaXMgQmFzZTY0IGVuY29kZWQgb3Igbm90LgogICAqLwogIGJvb2wgZ2V0IGlzQmFzZTY0ID0+IF9zZXBhcmF0b3JJbmRpY2VzLmxlbmd0aC5pc09kZDsKCiAgLyoqCiAgICogVGhlIGNvbnRlbnQgcGFydCBvZiB0aGUgZGF0YSBVUkksIGFzIGl0cyBhY3R1YWwgcmVwcmVzZW50YXRpb24uCiAgICoKICAgKiBUaGlzIHN0cmluZyBtYXkgY29udGFpbiBwZXJjZW50IGVzY2FwZXMuCiAgICovCiAgU3RyaW5nIGdldCBjb250ZW50VGV4dCA9PiBfdGV4dC5zdWJzdHJpbmcoX3NlcGFyYXRvckluZGljZXMubGFzdCArIDEpOwoKICAvKioKICAgKiBUaGUgY29udGVudCBwYXJ0IG9mIHRoZSBkYXRhIFVSSSBhcyBieXRlcy4KICAgKgogICAqIElmIHRoZSBkYXRhIGlzIEJhc2U2NCBlbmNvZGVkLCBpdCB3aWxsIGJlIGRlY29kZWQgdG8gYnl0ZXMuCiAgICoKICAgKiBJZiB0aGUgZGF0YSBpcyBub3QgQmFzZTY0IGVuY29kZWQsIGl0IHdpbGwgYmUgZGVjb2RlZCBieSB1bmVzY2FwaW5nCiAgICogcGVyY2VudC1lc2NhcGVkIGNoYXJhY3RlcnMgYW5kIHJldHVybmluZyBieXRlIHZhbHVlcyBvZiBlYWNoIHVuZXNjYXBlZAogICAqIGNoYXJhY3Rlci4gVGhlIGJ5dGVzIHdpbGwgbm90IGJlLCBlLmcuLCBVVEYtOCBkZWNvZGVkLgogICAqLwogIFVpbnQ4TGlzdCBjb250ZW50QXNCeXRlcygpIHsKICAgIFN0cmluZyB0ZXh0ID0gX3RleHQ7CiAgICBpbnQgc3RhcnQgPSBfc2VwYXJhdG9ySW5kaWNlcy5sYXN0ICsgMTsKICAgIGlmIChpc0Jhc2U2NCkgewogICAgICByZXR1cm4gYmFzZTY0LmRlY29kZXIuY29udmVydCh0ZXh0LCBzdGFydCk7CiAgICB9CgogICAgLy8gTm90IGJhc2U2NCwgZG8gcGVyY2VudC1kZWNvZGluZyBhbmQgcmV0dXJuIHRoZSByZW1haW5pbmcgYnl0ZXMuCiAgICAvLyBDb21wdXRlIHJlc3VsdCBzaXplLgogICAgY29uc3QgaW50IHBlcmNlbnQgPSAweDI1OwogICAgaW50IGxlbmd0aCA9IHRleHQubGVuZ3RoIC0gc3RhcnQ7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBjb2RlVW5pdCA9IHRleHQuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGNvZGVVbml0ID09IHBlcmNlbnQpIHsKICAgICAgICBpICs9IDI7CiAgICAgICAgbGVuZ3RoIC09IDI7CiAgICAgIH0KICAgIH0KICAgIC8vIEZpbGwgcmVzdWx0IGFycmF5LgogICAgVWludDhMaXN0IHJlc3VsdCA9IFVpbnQ4TGlzdChsZW5ndGgpOwogICAgaWYgKGxlbmd0aCA9PSB0ZXh0Lmxlbmd0aCkgewogICAgICByZXN1bHQuc2V0UmFuZ2UoMCwgbGVuZ3RoLCB0ZXh0LmNvZGVVbml0cywgc3RhcnQpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgaW50IGluZGV4ID0gMDsKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGNvZGVVbml0ID0gdGV4dC5jb2RlVW5pdEF0KGkpOwogICAgICBpZiAoY29kZVVuaXQgIT0gcGVyY2VudCkgewogICAgICAgIHJlc3VsdFtpbmRleCsrXSA9IGNvZGVVbml0OwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChpICsgMiA8IHRleHQubGVuZ3RoKSB7CiAgICAgICAgICBpbnQgYnl0ZSA9IHBhcnNlSGV4Qnl0ZSh0ZXh0LCBpICsgMSk7CiAgICAgICAgICBpZiAoYnl0ZSA+PSAwKSB7CiAgICAgICAgICAgIHJlc3VsdFtpbmRleCsrXSA9IGJ5dGU7CiAgICAgICAgICAgIGkgKz0gMjsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBwZXJjZW50IGVzY2FwZSIsIHRleHQsIGkpOwogICAgICB9CiAgICB9CiAgICBhc3NlcnQoaW5kZXggPT0gcmVzdWx0Lmxlbmd0aCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIHN0cmluZyBjcmVhdGVkIGZyb20gdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEgVVJJLgogICAqCiAgICogSWYgdGhlIGNvbnRlbnQgaXMgQmFzZTY0IGVuY29kZWQsIGl0IHdpbGwgYmUgZGVjb2RlZCB0byBieXRlcyBhbmQgdGhlbgogICAqIGRlY29kZWQgdG8gYSBzdHJpbmcgdXNpbmcgW2VuY29kaW5nXS4KICAgKiBJZiBlbmNvZGluZyBpcyBvbWl0dGVkLCB0aGUgdmFsdWUgb2YgYSBgY2hhcnNldGAgcGFyYW1ldGVyIGlzIHVzZWQKICAgKiBpZiBpdCBpcyByZWNvZ25pemVkIGJ5IFtFbmNvZGluZy5nZXRCeU5hbWVdLCBvdGhlcndpc2UgaXQgZGVmYXVsdHMgdG8KICAgKiB0aGUgW2FzY2lpXSBlbmNvZGluZywgd2hpY2ggaXMgdGhlIGRlZmF1bHQgZW5jb2RpbmcgZm9yIGRhdGEgVVJJcwogICAqIHRoYXQgZG8gbm90IHNwZWNpZnkgYW4gZW5jb2RpbmcuCiAgICoKICAgKiBJZiB0aGUgY29udGVudCBpcyBub3QgQmFzZTY0IGVuY29kZWQsIGl0IHdpbGwgZmlyc3QgaGF2ZSBwZXJjZW50LWVzY2FwZXMKICAgKiBjb252ZXJ0ZWQgdG8gYnl0ZXMgYW5kIHRoZW4gdGhlIGNoYXJhY3RlciBjb2RlcyBhbmQgYnl0ZSB2YWx1ZXMgYXJlCiAgICogZGVjb2RlZCB1c2luZyBbZW5jb2RpbmddLgogICAqLwogIFN0cmluZyBjb250ZW50QXNTdHJpbmcoe0VuY29kaW5nIGVuY29kaW5nfSkgewogICAgaWYgKGVuY29kaW5nID09IG51bGwpIHsKICAgICAgdmFyIGNoYXJzZXQgPSB0aGlzLmNoYXJzZXQ7IC8vIFJldHVybnMgIlVTLUFTQ0lJIiBpZiBub3QgcHJlc2VudC4KICAgICAgZW5jb2RpbmcgPSBFbmNvZGluZy5nZXRCeU5hbWUoY2hhcnNldCk7CiAgICAgIGlmIChlbmNvZGluZyA9PSBudWxsKSB7CiAgICAgICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiVW5rbm93biBjaGFyc2V0OiAkY2hhcnNldCIpOwogICAgICB9CiAgICB9CiAgICBTdHJpbmcgdGV4dCA9IF90ZXh0OwogICAgaW50IHN0YXJ0ID0gX3NlcGFyYXRvckluZGljZXMubGFzdCArIDE7CiAgICBpZiAoaXNCYXNlNjQpIHsKICAgICAgdmFyIGNvbnZlcnRlciA9IGJhc2U2NC5kZWNvZGVyLmZ1c2UoZW5jb2RpbmcuZGVjb2Rlcik7CiAgICAgIHJldHVybiBjb252ZXJ0ZXIuY29udmVydCh0ZXh0LnN1YnN0cmluZyhzdGFydCkpOwogICAgfQogICAgcmV0dXJuIF9VcmkuX3VyaURlY29kZSh0ZXh0LCBzdGFydCwgdGV4dC5sZW5ndGgsIGVuY29kaW5nLCBmYWxzZSk7CiAgfQoKICAvKioKICAgKiBBIG1hcCByZXByZXNlbnRpbmcgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIG1lZGlhIHR5cGUuCiAgICoKICAgKiBBIGRhdGEgVVJJIG1heSBjb250YWluIHBhcmFtZXRlcnMgYmV0d2VlbiB0aGUgTUlNRSB0eXBlIGFuZCB0aGUKICAgKiBkYXRhLiBUaGlzIGNvbnZlcnRzIHRoZXNlIHBhcmFtZXRlcnMgdG8gYSBtYXAgZnJvbSBwYXJhbWV0ZXIgbmFtZQogICAqIHRvIHBhcmFtZXRlciB2YWx1ZS4KICAgKiBUaGUgbWFwIG9ubHkgY29udGFpbnMgcGFyYW1ldGVycyB0aGF0IGFjdHVhbGx5IG9jY3VyIGluIHRoZSBVUkkuCiAgICogVGhlIGBjaGFyc2V0YCBwYXJhbWV0ZXIgaGFzIGEgZGVmYXVsdCB2YWx1ZSBldmVuIGlmIGl0IGRvZXNuJ3Qgb2NjdXIKICAgKiBpbiB0aGUgVVJJLCB3aGljaCBpcyByZWZsZWN0ZWQgYnkgdGhlIFtjaGFyc2V0XSBnZXR0ZXIuIFRoaXMgbWVhbnMgdGhhdAogICAqIFtjaGFyc2V0XSBtYXkgcmV0dXJuIGEgdmFsdWUgZXZlbiBpZiBgcGFyYW1ldGVyc1siY2hhcnNldCJdYCBpcyBgbnVsbGAuCiAgICoKICAgKiBJZiB0aGUgdmFsdWVzIGNvbnRhaW4gbm9uLUFTQ0lJIHZhbHVlcyBvciBwZXJjZW50IGVzY2FwZXMsCiAgICogdGhleSBhcmUgZGVjb2RlZCBhcyBVVEYtOC4KICAgKi8KICBNYXA8U3RyaW5nLCBTdHJpbmc+IGdldCBwYXJhbWV0ZXJzIHsKICAgIHZhciByZXN1bHQgPSA8U3RyaW5nLCBTdHJpbmc+e307CiAgICBmb3IgKGludCBpID0gMzsgaSA8IF9zZXBhcmF0b3JJbmRpY2VzLmxlbmd0aDsgaSArPSAyKSB7CiAgICAgIHZhciBzdGFydCA9IF9zZXBhcmF0b3JJbmRpY2VzW2kgLSAyXSArIDE7CiAgICAgIHZhciBlcXVhbHMgPSBfc2VwYXJhdG9ySW5kaWNlc1tpIC0gMV07CiAgICAgIHZhciBlbmQgPSBfc2VwYXJhdG9ySW5kaWNlc1tpXTsKICAgICAgU3RyaW5nIGtleSA9IF9VcmkuX3VyaURlY29kZShfdGV4dCwgc3RhcnQsIGVxdWFscywgdXRmOCwgZmFsc2UpOwogICAgICBTdHJpbmcgdmFsdWUgPSBfVXJpLl91cmlEZWNvZGUoX3RleHQsIGVxdWFscyArIDEsIGVuZCwgdXRmOCwgZmFsc2UpOwogICAgICByZXN1bHRba2V5XSA9IHZhbHVlOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBVcmlEYXRhIF9wYXJzZShTdHJpbmcgdGV4dCwgaW50IHN0YXJ0LCBVcmkgc291cmNlVXJpKSB7CiAgICBhc3NlcnQoc3RhcnQgPT0gMCB8fCBzdGFydCA9PSA1KTsKICAgIGFzc2VydCgoc3RhcnQgPT0gNSkgPT0gdGV4dC5zdGFydHNXaXRoKCJkYXRhOiIpKTsKCiAgICAvLy8gQ2hhcmFjdGVyIGNvZGVzLgogICAgY29uc3QgaW50IGNvbW1hID0gMHgyYzsKICAgIGNvbnN0IGludCBzbGFzaCA9IDB4MmY7CiAgICBjb25zdCBpbnQgc2VtaWNvbG9uID0gMHgzYjsKICAgIGNvbnN0IGludCBlcXVhbHMgPSAweDNkOwogICAgTGlzdDxpbnQ+IGluZGljZXMgPSBbc3RhcnQgLSAxXTsKICAgIGludCBzbGFzaEluZGV4ID0gLTE7CiAgICB2YXIgY2hhcjsKICAgIGludCBpID0gc3RhcnQ7CiAgICBmb3IgKDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHsKICAgICAgY2hhciA9IHRleHQuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGNoYXIgPT0gY29tbWEgfHwgY2hhciA9PSBzZW1pY29sb24pIGJyZWFrOwogICAgICBpZiAoY2hhciA9PSBzbGFzaCkgewogICAgICAgIGlmIChzbGFzaEluZGV4IDwgMCkgewogICAgICAgICAgc2xhc2hJbmRleCA9IGk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKCJJbnZhbGlkIE1JTUUgdHlwZSIsIHRleHQsIGkpOwogICAgICB9CiAgICB9CiAgICBpZiAoc2xhc2hJbmRleCA8IDAgJiYgaSA+IHN0YXJ0KSB7CiAgICAgIC8vIEFuIGVtcHR5IE1JTUUgdHlwZSBpcyBhbGxvd2VkLCBidXQgaWYgbm9uLWVtcHR5IGl0IG11c3QgY29udGFpbgogICAgICAvLyBleGFjdGx5IG9uZSBzbGFzaC4KICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKCJJbnZhbGlkIE1JTUUgdHlwZSIsIHRleHQsIGkpOwogICAgfQogICAgd2hpbGUgKGNoYXIgIT0gY29tbWEpIHsKICAgICAgLy8gUGFyc2UgcGFyYW1ldGVycyBhbmQvb3IgImJhc2U2NCIuCiAgICAgIGluZGljZXMuYWRkKGkpOwogICAgICBpKys7CiAgICAgIGludCBlcXVhbHNJbmRleCA9IC0xOwogICAgICBmb3IgKDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHsKICAgICAgICBjaGFyID0gdGV4dC5jb2RlVW5pdEF0KGkpOwogICAgICAgIGlmIChjaGFyID09IGVxdWFscykgewogICAgICAgICAgaWYgKGVxdWFsc0luZGV4IDwgMCkgZXF1YWxzSW5kZXggPSBpOwogICAgICAgIH0gZWxzZSBpZiAoY2hhciA9PSBzZW1pY29sb24gfHwgY2hhciA9PSBjb21tYSkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChlcXVhbHNJbmRleCA+PSAwKSB7CiAgICAgICAgaW5kaWNlcy5hZGQoZXF1YWxzSW5kZXgpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIEhhdmUgdG8gYmUgZmluYWwgImJhc2U2NCIuCiAgICAgICAgdmFyIGxhc3RTZXBhcmF0b3IgPSBpbmRpY2VzLmxhc3Q7CiAgICAgICAgaWYgKGNoYXIgIT0gY29tbWEgfHwKICAgICAgICAgICAgaSAhPSBsYXN0U2VwYXJhdG9yICsgNyAvKiAiYmFzZTY0LCIubGVuZ3RoICovIHx8CiAgICAgICAgICAgICF0ZXh0LnN0YXJ0c1dpdGgoImJhc2U2NCIsIGxhc3RTZXBhcmF0b3IgKyAxKSkgewogICAgICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKCJFeHBlY3RpbmcgJz0nIiwgdGV4dCwgaSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBpbmRpY2VzLmFkZChpKTsKICAgIGJvb2wgaXNCYXNlNjQgPSBpbmRpY2VzLmxlbmd0aC5pc09kZDsKICAgIGlmIChpc0Jhc2U2NCkgewogICAgICB0ZXh0ID0gYmFzZTY0Lm5vcm1hbGl6ZSh0ZXh0LCBpICsgMSwgdGV4dC5sZW5ndGgpOwogICAgfSBlbHNlIHsKICAgICAgLy8gVmFsaWRhdGUgImRhdGEiIHBhcnQsIG11c3Qgb25seSBjb250YWluIFJGQyAyMzk2ICd1cmljJyBjaGFyYWN0ZXJzCiAgICAgIC8vIChyZXNlcnZlZCwgdW5yZXNlcnZlZCwgb3IgZXNjYXBlIHNlcXVlbmNlcykuCiAgICAgIC8vIE5vcm1hbGl6ZSB0byB0aGlzICh0aHJvd3Mgb24gYSBmcmFnbWVudCBzZXBhcmF0b3IpLgogICAgICB2YXIgZGF0YSA9IF9VcmkuX25vcm1hbGl6ZSh0ZXh0LCBpICsgMSwgdGV4dC5sZW5ndGgsIF91cmljVGFibGUsCiAgICAgICAgICBlc2NhcGVEZWxpbWl0ZXJzOiB0cnVlKTsKICAgICAgaWYgKGRhdGEgIT0gbnVsbCkgewogICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2VSYW5nZShpICsgMSwgdGV4dC5sZW5ndGgsIGRhdGEpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gVXJpRGF0YS5fKHRleHQsIGluZGljZXMsIHNvdXJjZVVyaSk7CiAgfQoKICAvKioKICAgKiBMaWtlIFtVcmkuX3VyaUVuY29kZV0gYnV0IHRha2VzIHRoZSBpbnB1dCBhcyBieXRlcywgbm90IGEgc3RyaW5nLgogICAqCiAgICogRW5jb2RlcyBpbnRvIFtidWZmZXJdIGluc3RlYWQgb2YgY3JlYXRpbmcgaXRzIG93biBidWZmZXIuCiAgICovCiAgc3RhdGljIHZvaWQgX3VyaUVuY29kZUJ5dGVzKAogICAgICBMaXN0PGludD4gY2Fub25pY2FsVGFibGUsIExpc3Q8aW50PiBieXRlcywgU3RyaW5nU2luayBidWZmZXIpIHsKICAgIC8vIEVuY29kZSB0aGUgc3RyaW5nIGludG8gYnl0ZXMgdGhlbiBnZW5lcmF0ZSBhbiBBU0NJSSBvbmx5IHN0cmluZwogICAgLy8gYnkgcGVyY2VudCBlbmNvZGluZyBzZWxlY3RlZCBieXRlcy4KICAgIGludCBieXRlT3IgPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykgewogICAgICBpbnQgYnl0ZSA9IGJ5dGVzW2ldOwogICAgICBieXRlT3IgfD0gYnl0ZTsKICAgICAgaWYgKGJ5dGUgPCAxMjggJiYKICAgICAgICAgICgoY2Fub25pY2FsVGFibGVbYnl0ZSA+PiA0XSAmICgxIDw8IChieXRlICYgMHgwZikpKSAhPSAwKSkgewogICAgICAgIGJ1ZmZlci53cml0ZUNoYXJDb2RlKGJ5dGUpOwogICAgICB9IGVsc2UgewogICAgICAgIGJ1ZmZlci53cml0ZUNoYXJDb2RlKF9QRVJDRU5UKTsKICAgICAgICBidWZmZXIud3JpdGVDaGFyQ29kZShfaGV4RGlnaXRzLmNvZGVVbml0QXQoYnl0ZSA+PiA0KSk7CiAgICAgICAgYnVmZmVyLndyaXRlQ2hhckNvZGUoX2hleERpZ2l0cy5jb2RlVW5pdEF0KGJ5dGUgJiAweDBmKSk7CiAgICAgIH0KICAgIH0KICAgIGlmICgoYnl0ZU9yICYgfjB4RkYpICE9IDApIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBieXRlID0gYnl0ZXNbaV07CiAgICAgICAgaWYgKGJ5dGUgPCAwIHx8IGJ5dGUgPiAyNTUpIHsKICAgICAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IudmFsdWUoYnl0ZSwgIm5vbi1ieXRlIHZhbHVlIik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PgogICAgICAoX3NlcGFyYXRvckluZGljZXNbMF0gPT0gX25vU2NoZW1lKSA/ICJkYXRhOiRfdGV4dCIgOiBfdGV4dDsKCiAgLy8gVGFibGUgb2YgdGhlIGB0b2tlbmAgY2hhcmFjdGVycyBvZiBSRkMgMjA0NSBpbiBhIFVSSS4KICAvLwogIC8vIEEgdG9rZW4gaXMgYW55IFVTLUFTQ0lJIGNoYXJhY3RlciBleGNlcHQgU1BBQ0UsIGNvbnRyb2wgY2hhcmFjdGVycyBhbmQKICAvLyBgdHNwZWNpYWxgIGNoYXJhY3RlcnMuIFRoZSBgdHNwZWNpYWxgIGNhdGVnb3J5IGlzOgogIC8vICcoJywgJyknLCAnPCcsICc+JywgJ0AnLCAnLCcsICc7JywgJzonLCAnXCcsICciJywgJy8nLCAnWywgJ10nLCAnPycsICc9Jy4KICAvLwogIC8vIEluIGEgZGF0YSBVUkksIHdlIGFsc28gbmVlZCB0byBlc2NhcGUgJyUnIGFuZCAnIycgY2hhcmFjdGVycy4KICBzdGF0aWMgY29uc3QgX3Rva2VuQ2hhclRhYmxlID0gWwogICAgLy8gICAgICAgICAgICAgICAgICAgICBMU0IgICAgICAgICAgICAgTVNCCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAogICAgMHgwMDAwLCAvLyAweDAwIC0gMHgwZiAgMDAwMDAwMDAgMDAwMDAwMDAKICAgIDB4MDAwMCwgLy8gMHgxMCAtIDB4MWYgIDAwMDAwMDAwIDAwMDAwMDAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgISAgJCAmJyAgICorIC0uCiAgICAweDZjZDIsIC8vIDB4MjAgLSAweDJmICAwMTAwMTAxMSAwMDExMDExMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgMDEyMzQ1NjcgODkKICAgIDB4MDNmZiwgLy8gMHgzMCAtIDB4M2YgIDExMTExMTExIDExMDAwMDAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgQUJDREVGRyBISUpLTE1OTwogICAgMHhmZmZlLCAvLyAweDQwIC0gMHg0ZiAgMDExMTExMTEgMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIFBRUlNUVVZXIFhZWiAgIF5fCiAgICAweGM3ZmYsIC8vIDB4NTAgLSAweDVmICAxMTExMTExMSAxMTEwMDAxMQogICAgLy8gICAgICAgICAgICAgICAgICAgICAgYGFiY2RlZmcgaGlqa2xtbm8KICAgIDB4ZmZmZiwgLy8gMHg2MCAtIDB4NmYgIDExMTExMTExIDExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBwcXJzdHV2dyB4eXp7fH1+CiAgICAweDdmZmYsIC8vIDB4NzAgLSAweDdmICAxMTExMTExMSAxMTExMTExMAogIF07CgogIC8vIEFsbCBub24tZXNjYXBlIFJGQy0yMzk2IHVyaWMgY2hhcmFjdGVycy4KICAvLwogIC8vICB1cmljICAgICAgICA9ICByZXNlcnZlZCB8IHVucmVzZXJ2ZWQgfCBlc2NhcGVkCiAgLy8gIHJlc2VydmVkICAgID0gICI7IiB8ICIvIiB8ICI/IiB8ICI6IiB8ICJAIiB8ICImIiB8ICI9IiB8ICIrIiB8ICIkIiB8ICIsIgogIC8vICB1bnJlc2VydmVkICA9ICBhbHBoYW51bSB8IG1hcmsKICAvLyAgbWFyayAgICAgICAgPSAgIi0iIHwgIl8iIHwgIi4iIHwgIiEiIHwgIn4iIHwgIioiIHwgIiciIHwgIigiIHwgIikiCiAgLy8KICAvLyBUaGlzIGlzIHRoZSBzYW1lIGNoYXJhY3RlcnMgYXMgaW4gYSBVUkkgcXVlcnkgKHdoaWNoIGlzIFVSSSBwY2hhciBwbHVzICc/JykKICBzdGF0aWMgY29uc3QgX3VyaWNUYWJsZSA9IF9VcmkuX3F1ZXJ5Q2hhclRhYmxlOwoKICAvLyBDaGFyYWN0ZXJzIGFsbG93ZWQgaW4gYmFzZS02NCBlbmNvZGluZyAoYWxwaGFudW1lcmljLCAnLycsICcrJyBhbmQgJz0nKS4KICBzdGF0aWMgY29uc3QgX2Jhc2U2NFRhYmxlID0gWwogICAgLy8gICAgICAgICAgICAgICAgICAgICBMU0IgICAgICAgICAgICAgTVNCCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAogICAgMHgwMDAwLCAvLyAweDAwIC0gMHgwZiAgMDAwMDAwMDAgMDAwMDAwMDAKICAgIDB4MDAwMCwgLy8gMHgxMCAtIDB4MWYgIDAwMDAwMDAwIDAwMDAwMDAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICAgLwogICAgMHg4ODAwLCAvLyAweDIwIC0gMHgyZiAgMDAwMDAwMDAgMDAwMTAwMDEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIDAxMjM0NTY3IDg5CiAgICAweDAzZmYsIC8vIDB4MzAgLSAweDNmICAxMTExMTExMSAxMTAwMDAwMAogICAgLy8gICAgICAgICAgICAgICAgICAgICAgIEFCQ0RFRkcgSElKS0xNTk8KICAgIDB4ZmZmZSwgLy8gMHg0MCAtIDB4NGYgIDAxMTExMTExIDExMTExMTExCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBQUVJTVFVWVyBYWVoKICAgIDB4MDdmZiwgLy8gMHg1MCAtIDB4NWYgIDExMTExMTExIDExMTAwMDAwCiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgYWJjZGVmZyBoaWprbG1ubwogICAgMHhmZmZlLCAvLyAweDYwIC0gMHg2ZiAgMDExMTExMTEgMTExMTExMTEKICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHBxcnN0dXZ3IHh5egogICAgMHgwN2ZmLCAvLyAweDcwIC0gMHg3ZiAgMTExMTExMTEgMTExMDAwMDAKICBdOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDb25zdGFudHMgdXNlZCB0byByZWFkIHRoZSBzY2FubmVyIHJlc3VsdC4KLy8gVGhlIGluZGljZXMgcG9pbnRzIGludG8gdGhlIHRhYmxlIGZpbGxlZCBieSBbX3NjYW5dIHdoaWNoIGNvbnRhaW5zCi8vIHJlY29nbml6ZWQgcG9zaXRpb25zIGluIHRoZSBzY2FubmVkIFVSSS4KLy8gVGhlIGAwYCBpbmRleCBpcyBvbmx5IHVzZWQgaW50ZXJuYWxseS4KCi8vLyBJbmRleCBvZiB0aGUgcG9zaXRpb24gb2YgdGhhdCBgOmAgYWZ0ZXIgYSBzY2hlbWUuCmNvbnN0IGludCBfc2NoZW1lRW5kSW5kZXggPSAxOwoKLy8vIEluZGV4IG9mIHRoZSBwb3NpdGlvbiBvZiB0aGUgY2hhcmFjdGVyIGp1c3QgYmVmb3JlIHRoZSBob3N0IG5hbWUuCmNvbnN0IGludCBfaG9zdFN0YXJ0SW5kZXggPSAyOwoKLy8vIEluZGV4IG9mIHRoZSBwb3NpdGlvbiBvZiB0aGUgYDpgIGJlZm9yZSBhIHBvcnQgdmFsdWUuCmNvbnN0IGludCBfcG9ydFN0YXJ0SW5kZXggPSAzOwoKLy8vIEluZGV4IG9mIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgcGF0aC4KY29uc3QgaW50IF9wYXRoU3RhcnRJbmRleCA9IDQ7CgovLy8gSW5kZXggb2YgdGhlIHBvc2l0aW9uIG9mIHRoZSBgP2AgYmVmb3JlIGEgcXVlcnkuCmNvbnN0IGludCBfcXVlcnlTdGFydEluZGV4ID0gNTsKCi8vLyBJbmRleCBvZiB0aGUgcG9zaXRpb24gb2YgdGhlIGAjYCBiZWZvcmUgYSBmcmFnbWVudC4KY29uc3QgaW50IF9mcmFnbWVudFN0YXJ0SW5kZXggPSA2OwoKLy8vIEluZGV4IG9mIGEgcG9zaXRpb24gd2hlcmUgdGhlIFVSSSB3YXMgZGV0ZXJtaW5lZCB0byBiZSAibm9uLXNpbXBsZSIuCmNvbnN0IGludCBfbm90U2ltcGxlSW5kZXggPSA3OwoKLy8gSW5pdGlhbCBzdGF0ZSBmb3Igc2Nhbm5lci4KY29uc3QgaW50IF91cmlTdGFydCA9IDAwOwoKLy8gSWYgc2Nhbm5pbmcgb2YgYSBVUkkgdGVybWluYXRlcyBpbiB0aGlzIHN0YXRlIG9yIGFib3ZlLAovLyBjb25zaWRlciB0aGUgVVJJIG5vbi1zaW1wbGUKY29uc3QgaW50IF9ub25TaW1wbGVFbmRTdGF0ZXMgPSAxNDsKCi8vIEluaXRpYWwgc3RhdGUgZm9yIHNjaGVtZSB2YWxpZGF0aW9uLgpjb25zdCBpbnQgX3NjaGVtZVN0YXJ0ID0gMjA7CgovLy8gVHJhbnNpdGlvbiB0YWJsZXMgdXNlZCB0byBzY2FuIGEgVVJJIHRvIGRldGVybWluZSBpdHMgc3RydWN0dXJlLgovLy8KLy8vIFRoZSB0YWJsZXMgcmVwcmVzZW50IGEgc3RhdGUgbWFjaGluZSB3aXRoIG91dHB1dC4KLy8vCi8vLyBUbyBzY2FuIHRoZSBVUkksIHN0YXJ0IGluIHRoZSBbX3VyaVN0YXJ0XSBzdGF0ZSwgdGhlbiByZWFkIGVhY2ggY2hhcmFjdGVyCi8vLyBvZiB0aGUgVVJJIGluIG9yZGVyLCBmcm9tIHN0YXJ0IHRvIGVuZCwgYW5kIGZvciBlYWNoIGNoYXJhY3RlciBwZXJmb3JtIGEKLy8vIHRyYW5zaXRpb24gdG8gYSBuZXcgc3RhdGUgd2hpbGUgd3JpdGluZyB0aGUgY3VycmVudCBwb3NpdGlvbiBpbnRvIHRoZSBvdXRwdXQKLy8vIGJ1ZmZlciBhdCBhIGRlc2lnbmF0ZWQgaW5kZXguCi8vLwovLy8gRWFjaCBzdGF0ZSwgcmVwcmVzZW50ZWQgYnkgYW4gaW50ZWdlciB3aGljaCBpcyBhbiBpbmRleCBpbnRvCi8vLyBbX3NjYW5uZXJUYWJsZXNdLCBoYXMgYSBzZXQgb2YgdHJhbnNpdGlvbnMsIG9uZSBmb3IgZWFjaCBjaGFyYWN0ZXIuCi8vLyBUaGUgdHJhbnNpdGlvbnMgYXJlIGVuY29kZWQgYXMgYSA1LWJpdCBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgbmV4dCBzdGF0ZQovLy8gYW5kIGEgMy1iaXQgaW5kZXggaW50byB0aGUgb3V0cHV0IHRhYmxlLgovLy8KLy8vIEZvciBVUkkgc2Nhbm5pbmcsIG9ubHkgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgVSswMDIwIHRocm91Z2ggVSswMDdFIGFyZQovLy8gaW50ZXJlc3RpbmcsIGFsbCBjaGFyYWN0ZXJzIG91dHNpZGUgdGhhdCByYW5nZSBhcmUgdHJlYXRlZCB0aGUgc2FtZS4KLy8vIFRoZSB0YWJsZXMgb25seSBjb250YWluIDk2IGVudHJpZXMsIHJlcHJlc2VudGluZyB0aGF0IGNoYXJhY3RlcnMgaW4gdGhlCi8vLyBpbnRlcmVzdGluZyByYW5nZSwgcGx1cyBvbmUgbW9yZSB0byByZXByZXNlbnQgYWxsIHZhbHVlcyBvdXRzaWRlIHRoZSByYW5nZS4KLy8vIFRoZSBjaGFyYWN0ZXIgZW50cmllcyBhcmUgc3RvcmVkIGluIG9uZSBgVWludDhMaXN0YCBwZXIgc3RhdGUsIHdpdGggdGhlCi8vLyB0cmFuc2l0aW9uIGZvciBhIGNoYXJhY3RlciBhdCBwb3NpdGlvbiBgY2hhcmFjdGVyIF4gMHg2MGAsCi8vLyB3aGljaCBtYXBzIHRoZSByYW5nZSBVKzAwMjAgLi4gVSswMDdGIGludG8gcG9zaXRpb25zIDAgLi4gOTUuCi8vLyBBbGwgcmVtYWluaW5nIGNoYXJhY3RlcnMgYXJlIG1hcHBlZCB0byBwb3NpdGlvbiAzMSAoYDB4N2YgXiAweDYwYCkgd2hpY2gKLy8vIHJlcHJlc2VudHMgdGhlIHRyYW5zaXRpb24gZm9yIGFsbCByZW1haW5pbmcgY2hhcmFjdGVycy4KZmluYWwgTGlzdDxVaW50OExpc3Q+IF9zY2FubmVyVGFibGVzID0gX2NyZWF0ZVRhYmxlcygpOwoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDb2RlIHRvIGNyZWF0ZSB0aGUgVVJJIHNjYW5uZXIgdGFibGUuCgovLy8gQ3JlYXRlcyB0aGUgdGFibGVzIGZvciBbX3NjYW5uZXJUYWJsZXNdIHVzZWQgYnkgW1VyaS5wYXJzZV0uCi8vLwovLy8gU2VlIFtfc2Nhbm5lclRhYmxlc10gZm9yIHRoZSBnZW5lcmF0ZWQgZm9ybWF0LgovLy8KLy8vIFRoZSBjb25jcmV0ZSB0YWJsZXMgYXJlIGNob3NlbiBhcyBhIHRyYWRlLW9mZiBiZXR3ZWVuIHRoZSBudW1iZXIgb2Ygc3RhdGVzCi8vLyBuZWVkZWQgYW5kIHRoZSBwcmVjaXNpb24gb2YgdGhlIHJlc3VsdC4KLy8vIFRoaXMgYWxsb3dzIGRlZmluaXRlbHkgcmVjb2duaXppbmcgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZSBVUkkKLy8vIChwcmVzZW5jZSBhbmQgbG9jYXRpb24gb2Ygc2NoZW1lLCB1c2VyLWluZm8sIGhvc3QsIHBvcnQsIHBhdGgsIHF1ZXJ5IGFuZAovLy8gZnJhZ21lbnQpIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgZGV0ZWN0aW5nIHRoYXQgc29tZSBjb21wb25lbnRzIGFyZSBub3QKLy8vIGluIGNhbm9uaWNhbCBmb3JtIChhbnl0aGluZyBjb250YWluaW5nIGEgYCVgLCBhIGhvc3QtbmFtZSBjb250YWluaW5nIGEKLy8vIGNhcGl0YWwgbGV0dGVyKS4gU2luY2UgdGhlIHNjYW5uZXIgZG9lc24ndCBrbm93IHdoZXRoZXIgc29tZXRoaW5nIGlzIGEKLy8vIHNjaGVtZSBvciBhIHBhdGggdW50aWwgaXQgc2VlcyBgOmAsIG9yIHVzZXItaW5mbyBvciBob3N0IHVudGlsIGl0IHNlZXMKLy8vIGEgYEBgLCBhIHNlY29uZCBwYXNzIGlzIG5lZWRlZCB0byB2YWxpZGF0ZSB0aGUgc2NoZW1lIGFuZCBhbnkgdXNlci1pbmZvCi8vLyBpcyBjb25zaWRlcmVkIG5vbi1jYW5vbmljYWwgYnkgZGVmYXVsdC4KLy8vCi8vLyBUaGUgc3RhdGVzIChzdGFydGluZyBmcm9tIFtfdXJpU3RhcnRdKSB3cml0ZSBwb3NpdGlvbnMgd2hpbGUgc2Nhbm5pbmcKLy8vIGEgc3RyaW5nIGZyb20gYHN0YXJ0YCB0byBgZW5kYCBhcyBmb2xsb3dzOgovLy8KLy8vIC0gW19zY2hlbWVFbmRJbmRleF06IFNob3VsZCBiZSBpbml0aWFsaXplZCB0byBgc3RhcnQtMWAuCi8vLyAgIElmIHRoZSBVUkkgaGFzIGEgc2NoZW1lLCBpdCBpcyBzZXQgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSBgOmAgYWZ0ZXIKLy8vICAgdGhlIHNjaGVtZS4KLy8vIC0gW19ob3N0U3RhcnRJbmRleF06IFNob3VsZCBiZSBpbml0aWFsaXplZCB0byBgc3RhcnQgLSAxYC4KLy8vICAgSWYgdGhlIFVSSSBoYXMgYW4gYXV0aG9yaXR5LCBpdCBpcyBzZXQgdG8gdGhlIGNoYXJhY3RlciBiZWZvcmUgdGhlCi8vLyAgIGhvc3QgbmFtZSAtIGVpdGhlciB0aGUgc2Vjb25kIGAvYCBpbiB0aGUgYC8vYCBsZWFkaW5nIHRoZSBhdXRob3JpdHksCi8vLyAgIG9yIHRoZSBgQGAgYWZ0ZXIgYSB1c2VyLWluZm8uIENvbXBhcmluZyB0aGlzIHZhbHVlIHRvIHRoZSBzY2hlbWUgZW5kCi8vLyAgIHBvc2l0aW9uIGNhbiBiZSB1c2VkIHRvIGRldGVjdCB0aGF0IHRoZXJlIGlzIGEgdXNlci1pbmZvIGNvbXBvbmVudC4KLy8vIC0gW19wb3J0U3RhcnRJbmRleF06IFNob3VsZCBiZSBpbml0aWFsaXplZCB0byBgc3RhcnRgLgovLy8gICBTZXQgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0IGA6YCBpbiBhbiBhdXRob3JpdHksIGFuZCB1bmNoYW5nZWQKLy8vICAgaWYgdGhlcmUgaXMgbm8gYXV0aG9yaXR5IG9yIG5vIGA6YCBpbiBhbiBhdXRob3JpdHkuCi8vLyAgIElmIHRoaXMgcG9zaXRpb24gaXMgYWZ0ZXIgdGhlIGhvc3Qgc3RhcnQsIHRoZXJlIGlzIGEgcG9ydCwgb3RoZXJ3aXNlIGl0Ci8vLyAgIGlzIGp1c3QgbWFya2luZyBhIGNvbG9uIGluIHRoZSB1c2VyLWluZm8gY29tcG9uZW50LgovLy8gLSBbX3BhdGhTdGFydEluZGV4XTogU2hvdWxkIGJlIGluaXRpYWxpemVkIHRvIGBzdGFydGAuCi8vLyAgIElzIHNldCB0byB0aGUgZmlyc3QgcGF0aCBjaGFyYWN0ZXIgdW5sZXNzIHRoZSBwYXRoIGlzIGVtcHR5LgovLy8gICBJZiB0aGUgcGF0aCBpcyBlbXB0eSwgdGhlIHBvc2l0aW9uIGlzIGVpdGhlciB1bmNoYW5nZWQgKGBzdGFydGApIG9yCi8vLyAgIHRoZSBmaXJzdCBzbGFzaCBvZiBhbiBhdXRob3JpdHkuIFNvLCBpZiB0aGUgcGF0aCBzdGFydCBpcyBiZWZvcmUgYQovLy8gICBob3N0IHN0YXJ0IG9yIHNjaGVtZSBlbmQsIHRoZSBwYXRoIGlzIGVtcHR5LgovLy8gLSBbX3F1ZXJ5U3RhcnRJbmRleF06IFNob3VsZCBiZSBpbml0aWFsaXplZCB0byBgZW5kYC4KLy8vICAgVGhlIHBvc2l0aW9uIG9mIHRoZSBgP2AgbGVhZGluZyBhIHF1ZXJ5IGlmIHRoZSBVUkkgY29udGFpbnMgYSBxdWVyeS4KLy8vIC0gW19mcmFnbWVudFN0YXJ0SW5kZXhdOiBTaG91bGQgYmUgaW5pdGlhbGl6ZWQgdG8gYGVuZGAuCi8vLyAgIFRoZSBwb3NpdGlvbiBvZiB0aGUgYCNgIGxlYWRpbmcgYSBmcmFnbWVudCBpZiB0aGUgVVJJIGNvbnRhaW5zIGEgZnJhZ21lbnQuCi8vLyAtIFtfbm90U2ltcGxlSW5kZXhdOiBTaG91bGQgYmUgaW5pdGlhbGl6ZWQgdG8gYHN0YXJ0IC0gMWAuCi8vLyAgIFNldCB0byBhbm90aGVyIHZhbHVlIGlmIHRoZSBVUkkgaXMgY29uc2lkZXJlZCAibm90IHNpbXBsZSIuCi8vLyAgIFRoaXMgaXMgZWxhYm9yYXRlZCBiZWxvdy4KLy8vCi8vLyAjIFNpbXBsZSBVUklzCi8vLyBBIFVSSSBpcyBjb25zaWRlcmVkICJzaW1wbGUiIGlmIGl0IGlzIGluIGEgbm9ybWFsaXplZCBmb3JtIGNvbnRhaW5pbmcgbm8KLy8vIGVzY2FwZXMuIFRoaXMgYWxsb3dzIHVzIHRvIHNraXAgbm9ybWFsaXphdGlvbiBhbmQgY2hlY2tpbmcgd2hldGhlciBlc2NhcGVzCi8vLyBhcmUgdmFsaWQsIGFuZCB0byBleHRyYWN0IGNvbXBvbmVudHMgd2l0aG91dCB3b3JyeWluZyBhYm91dCB1bmVzY2FwaW5nLgovLy8KLy8vIFRoZSBzY2FubmVyIGNvbXB1dGVzIGEgY29uc2VydmF0aXZlIGFwcHJveGltYXRpb24gb2YgYmVpbmcgInNpbXBsZSIuCi8vLyBJdCByZWplY3RzIGFueSBVUkkgd2l0aCBhbiBlc2NhcGUsIHdpdGggYSB1c2VyLWluZm8gY29tcG9uZW50IChtYWlubHkKLy8vIGJlY2F1c2UgdGhleSBhcmUgcmFyZSBhbmQgd291bGQgaW5jcmVhc2UgdGhlIG51bWJlciBvZiBzdGF0ZXMgaW4gdGhlCi8vLyBzY2FubmVyIHNpZ25pZmljYW50bHkpLCB3aXRoIGFuIElQVjYgaG9zdCBvciB3aXRoIGEgY2FwaXRhbCBsZXR0ZXIgaW4KLy8vIHRoZSBzY2hlbWUgb3IgaG9zdCBuYW1lICh0aGUgc2NoZW1lIGlzIGhhbmRsZWQgaW4gYSBzZWNvbmQgc2NhbiB1c2luZwovLy8gYSBzZXBhcmF0ZSB0d28tc3RhdGUgdGFibGUpLgovLy8gRnVydGhlciwgcGF0aHMgY29udGFpbmluZyBgLi5gIG9yIGAuYCBwYXRoIHNlZ21lbnRzIGFyZSBjb25zaWRlcmVkCi8vLyBub24tc2ltcGxlIGV4Y2VwdCBmb3IgcHVyZSByZWxhdGl2ZSBwYXRocyAobm8gc2NoZW1lIG9yIGF1dGhvcml0eSkgc3RhcnRpbmcKLy8vIHdpdGggYSBzZXF1ZW5jZSBvZiAiLi4vIiBzZWdtZW50cy4KLy8vCi8vLyBUaGUgdHJhbnNpdGlvbiB0YWJsZXMgY2Fubm90IGRldGVjdCBhIHRyYWlsaW5nICIuLiIgaW4gdGhlIHBhdGgsCi8vLyBmb2xsb3dlZCBieSBhIHF1ZXJ5IG9yIGZyYWdtZW50LCBiZWNhdXNlIHRoZSBzZWdtZW50IGlzIG5vdCBrbm93biB0byBiZQovLy8gY29tcGxldGUgdW50aWwgd2UgYXJlIHBhc3QgaXQsIGFuZCB3ZSB0aGVuIG5lZWQgdG8gc3RvcmUgdGhlIHF1ZXJ5L2ZyYWdtZW50Ci8vLyBzdGFydCBpbnN0ZWFkLiBUaGlzIGNhc3QgaXMgY2hlY2tlZCBtYW51YWxseSBwb3N0LXNjYW5uaW5nIChzdWNoIGEgcGF0aAovLy8gbmVlZHMgdG8gYmUgbm9ybWFsaXplZCB0byBlbmQgaW4gIi4uLyIsIHNvIHRoZSBVUkkgc2hvdWxkbid0IGJlIGNvbnNpZGVyZWQKLy8vIHNpbXBsZSkuCkxpc3Q8VWludDhMaXN0PiBfY3JlYXRlVGFibGVzKCkgewogIC8vIFRPRE8obHJuKTogVXNlIGEgcHJlY29tcHV0ZWQgdGFibGUuCgogIC8vIFRvdGFsIG51bWJlciBvZiBzdGF0ZXMgZm9yIHRoZSBzY2FubmVyLgogIGNvbnN0IGludCBzdGF0ZUNvdW50ID0gMjI7CgogIC8vIFN0YXRlcyB1c2VkIHRvIHNjYW4gYSBVUkkgZnJvbSBzY3JhdGNoLgogIGNvbnN0IGludCBzY2hlbWVPclBhdGggPSAwMTsKICBjb25zdCBpbnQgYXV0aE9yUGF0aCA9IDAyOwogIGNvbnN0IGludCBhdXRoT3JQYXRoU2xhc2ggPSAwMzsKICBjb25zdCBpbnQgdWluZm9Pckhvc3QwID0gMDQ7CiAgY29uc3QgaW50IHVpbmZvT3JIb3N0ID0gMDU7CiAgY29uc3QgaW50IHVpbmZvT3JQb3J0MCA9IDA2OwogIGNvbnN0IGludCB1aW5mb09yUG9ydCA9IDA3OwogIGNvbnN0IGludCBpcHY2SG9zdCA9IDA4OwogIGNvbnN0IGludCByZWxQYXRoU2VnID0gMDk7CiAgY29uc3QgaW50IHBhdGhTZWcgPSAxMDsKICBjb25zdCBpbnQgcGF0aCA9IDExOwogIGNvbnN0IGludCBxdWVyeSA9IDEyOwogIGNvbnN0IGludCBmcmFnbWVudCA9IDEzOwogIGNvbnN0IGludCBzY2hlbWVPclBhdGhEb3QgPSAxNDsKICBjb25zdCBpbnQgc2NoZW1lT3JQYXRoRG90MiA9IDE1OwogIGNvbnN0IGludCByZWxQYXRoU2VnRG90ID0gMTY7CiAgY29uc3QgaW50IHJlbFBhdGhTZWdEb3QyID0gMTc7CiAgY29uc3QgaW50IHBhdGhTZWdEb3QgPSAxODsKICBjb25zdCBpbnQgcGF0aFNlZ0RvdDIgPSAxOTsKCiAgLy8gU3RhdGVzIHVzZWQgdG8gdmFsaWRhdGUgYSBzY2hlbWUgYWZ0ZXIgaXRzIGVuZCBwb3NpdGlvbiBoYXMgYmVlbiBmb3VuZC4KICBjb25zdCBpbnQgc2NoZW1lMCA9IF9zY2hlbWVTdGFydDsKICBjb25zdCBpbnQgc2NoZW1lID0gMjE7CgogIC8vIENvbnN0YW50cyBlbmNvZGluZyB0aGUgd3JpdGUtaW5kZXggZm9yIHRoZSBzdGF0ZSB0cmFuc2l0aW9uIGludG8gdGhlIHRvcCA1CiAgLy8gYml0cyBvZiBhIGJ5dGUuCiAgY29uc3QgaW50IHNjaGVtZUVuZCA9IF9zY2hlbWVFbmRJbmRleCA8PCA1OwogIGNvbnN0IGludCBob3N0U3RhcnQgPSBfaG9zdFN0YXJ0SW5kZXggPDwgNTsKICBjb25zdCBpbnQgcG9ydFN0YXJ0ID0gX3BvcnRTdGFydEluZGV4IDw8IDU7CiAgY29uc3QgaW50IHBhdGhTdGFydCA9IF9wYXRoU3RhcnRJbmRleCA8PCA1OwogIGNvbnN0IGludCBxdWVyeVN0YXJ0ID0gX3F1ZXJ5U3RhcnRJbmRleCA8PCA1OwogIGNvbnN0IGludCBmcmFnbWVudFN0YXJ0ID0gX2ZyYWdtZW50U3RhcnRJbmRleCA8PCA1OwogIGNvbnN0IGludCBub3RTaW1wbGUgPSBfbm90U2ltcGxlSW5kZXggPDwgNTsKCiAgLy8vIFRoZSBgdW5yZXNlcnZlZGAgY2hhcmFjdGVycyBvZiBSRkMgMzk4Ni4KICBjb25zdCB1bnJlc2VydmVkID0KICAgICAgIjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LS5ffiI7CgogIC8vLyBUaGUgYHN1Yi1kZWxpbWAgY2hhcmFjdGVycyBvZiBSRkMgMzk4Ni4KICBjb25zdCBzdWJEZWxpbXMgPSByIiEkJicoKSorLDs9IjsKICAvLyBUaGUgYHBjaGFyYCBjaGFyYWN0ZXJzIG9mIFJGQyAzOTg2OiBjaGFyYWN0ZXJzIHRoYXQgbWF5IG9jY3VyIGluIGEgcGF0aCwKICAvLyBleGNsdWRpbmcgZXNjYXBlcy4KICBjb25zdCBwY2hhciA9ICIkdW5yZXNlcnZlZCRzdWJEZWxpbXMiOwoKICB2YXIgdGFibGVzID0gTGlzdDxVaW50OExpc3Q+LmdlbmVyYXRlKHN0YXRlQ291bnQsIChfKSA9PiBVaW50OExpc3QoOTYpKTsKCiAgLy8gSGVscGVyIGZ1bmN0aW9uIHdoaWNoIGluaXRpYWxpemUgdGhlIHRhYmxlIGZvciBbc3RhdGVdIHdpdGggYSBkZWZhdWx0CiAgLy8gdHJhbnNpdGlvbiBhbmQgcmV0dXJucyB0aGUgdGFibGUuCiAgVWludDhMaXN0IGJ1aWxkKHN0YXRlLCBkZWZhdWx0VHJhbnNpdGlvbikgPT4KICAgICAgdGFibGVzW3N0YXRlXS4uZmlsbFJhbmdlKDAsIDk2LCBkZWZhdWx0VHJhbnNpdGlvbik7CgogIC8vIEhlbHBlciBmdW5jdGlvbiB3aGljaCBzZXRzIHRoZSB0cmFuc2l0aW9uIGZvciBlYWNoIGNoYXJhY3RlciBpbiBbY2hhcnNdCiAgLy8gdG8gW3RyYW5zaXRpb25dIGluIHRoZSBbdGFyZ2V0XSB0YWJsZS4KICAvLyBUaGUgW2NoYXJzXSBzdHJpbmcgbXVzdCBjb250YWluIG9ubHkgY2hhcmFjdGVycyBpbiB0aGUgVSswMDIwIC4uIFUrMDA3RQogIC8vIHJhbmdlLgogIHZvaWQgc2V0Q2hhcnMoVWludDhMaXN0IHRhcmdldCwgU3RyaW5nIGNoYXJzLCBpbnQgdHJhbnNpdGlvbikgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgY2hhciA9IGNoYXJzLmNvZGVVbml0QXQoaSk7CiAgICAgIHRhcmdldFtjaGFyIF4gMHg2MF0gPSB0cmFuc2l0aW9uOwogICAgfQogIH0KCiAgLy8vIEhlbHBlciBmdW5jdGlvbiB3aGljaCBzZXRzIHRoZSB0cmFuc2l0aW9uIGZvciBhbGwgY2hhcmFjdGVycyBpbiB0aGUKICAvLy8gcmFuZ2UgZnJvbSBgcmFuZ2VbMF1gIHRvIGByYW5nZVsxXWAgdG8gW3RyYW5zaXRpb25dIGluIHRoZSBbdGFyZ2V0XSB0YWJsZS4KICAvLy8KICAvLy8gVGhlIFtyYW5nZV0gbXVzdCBiZSBhIHR3by1jaGFyYWN0ZXIgc3RyaW5nIHdoZXJlIGJvdGggY2hhcmFjdGVycyBhcmUgaW4KICAvLy8gdGhlIFUrMDAyMCAuLiBVKzAwN0UgcmFuZ2UgYW5kIHRoZSBmb3JtZXIgY2hhcmFjdGVyIG11c3QgaGF2ZSBhIGxvd2VyCiAgLy8vIGNvZGUgcG9pbnQgdGhhbiB0aGUgbGF0dGVyLgogIHZvaWQgc2V0UmFuZ2UoVWludDhMaXN0IHRhcmdldCwgU3RyaW5nIHJhbmdlLCBpbnQgdHJhbnNpdGlvbikgewogICAgZm9yIChpbnQgaSA9IHJhbmdlLmNvZGVVbml0QXQoMCksIG4gPSByYW5nZS5jb2RlVW5pdEF0KDEpOyBpIDw9IG47IGkrKykgewogICAgICB0YXJnZXRbaSBeIDB4NjBdID0gdHJhbnNpdGlvbjsKICAgIH0KICB9CgogIC8vIENyZWF0ZSB0aGUgdHJhbnNpdGlvbnMgZm9yIGVhY2ggc3RhdGUuCiAgdmFyIGI7CgogIC8vIFZhbGlkYXRlIGFzIHBhdGgsIGlmIGl0IGlzIGEgc2NoZW1lLCB3ZSBoYW5kbGUgaXQgbGF0ZXIuCiAgYiA9IGJ1aWxkKF91cmlTdGFydCwgc2NoZW1lT3JQYXRoIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCBwY2hhciwgc2NoZW1lT3JQYXRoKTsKICBzZXRDaGFycyhiLCAiLiIsIHNjaGVtZU9yUGF0aERvdCk7CiAgc2V0Q2hhcnMoYiwgIjoiLCBhdXRoT3JQYXRoIHwgc2NoZW1lRW5kKTsgLy8gSGFuZGxlIGxhdGVyLgogIHNldENoYXJzKGIsICIvIiwgYXV0aE9yUGF0aFNsYXNoKTsKICBzZXRDaGFycyhiLCAiPyIsIHF1ZXJ5IHwgcXVlcnlTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIiMiLCBmcmFnbWVudCB8IGZyYWdtZW50U3RhcnQpOwoKICBiID0gYnVpbGQoc2NoZW1lT3JQYXRoRG90LCBzY2hlbWVPclBhdGggfCBub3RTaW1wbGUpOwogIHNldENoYXJzKGIsIHBjaGFyLCBzY2hlbWVPclBhdGgpOwogIHNldENoYXJzKGIsICIuIiwgc2NoZW1lT3JQYXRoRG90Mik7CiAgc2V0Q2hhcnMoYiwgJzonLCBhdXRoT3JQYXRoIHwgc2NoZW1lRW5kKTsKICBzZXRDaGFycyhiLCAiLyIsIHBhdGhTZWcgfCBub3RTaW1wbGUpOwogIHNldENoYXJzKGIsICI/IiwgcXVlcnkgfCBxdWVyeVN0YXJ0KTsKICBzZXRDaGFycyhiLCAiIyIsIGZyYWdtZW50IHwgZnJhZ21lbnRTdGFydCk7CgogIGIgPSBidWlsZChzY2hlbWVPclBhdGhEb3QyLCBzY2hlbWVPclBhdGggfCBub3RTaW1wbGUpOwogIHNldENoYXJzKGIsIHBjaGFyLCBzY2hlbWVPclBhdGgpOwogIHNldENoYXJzKGIsICIlIiwgc2NoZW1lT3JQYXRoIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCAnOicsIGF1dGhPclBhdGggfCBzY2hlbWVFbmQpOwogIHNldENoYXJzKGIsICIvIiwgcmVsUGF0aFNlZyk7CiAgc2V0Q2hhcnMoYiwgIj8iLCBxdWVyeSB8IHF1ZXJ5U3RhcnQpOwogIHNldENoYXJzKGIsICIjIiwgZnJhZ21lbnQgfCBmcmFnbWVudFN0YXJ0KTsKCiAgYiA9IGJ1aWxkKHNjaGVtZU9yUGF0aCwgc2NoZW1lT3JQYXRoIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCBwY2hhciwgc2NoZW1lT3JQYXRoKTsKICBzZXRDaGFycyhiLCAnOicsIGF1dGhPclBhdGggfCBzY2hlbWVFbmQpOwogIHNldENoYXJzKGIsICIvIiwgcGF0aFNlZyk7CiAgc2V0Q2hhcnMoYiwgIj8iLCBxdWVyeSB8IHF1ZXJ5U3RhcnQpOwogIHNldENoYXJzKGIsICIjIiwgZnJhZ21lbnQgfCBmcmFnbWVudFN0YXJ0KTsKCiAgYiA9IGJ1aWxkKGF1dGhPclBhdGgsIHBhdGggfCBub3RTaW1wbGUpOwogIHNldENoYXJzKGIsIHBjaGFyLCBwYXRoIHwgcGF0aFN0YXJ0KTsKICBzZXRDaGFycyhiLCAiLyIsIGF1dGhPclBhdGhTbGFzaCB8IHBhdGhTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIi4iLCBwYXRoU2VnRG90IHwgcGF0aFN0YXJ0KTsKICBzZXRDaGFycyhiLCAiPyIsIHF1ZXJ5IHwgcXVlcnlTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIiMiLCBmcmFnbWVudCB8IGZyYWdtZW50U3RhcnQpOwoKICBiID0gYnVpbGQoYXV0aE9yUGF0aFNsYXNoLCBwYXRoIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCBwY2hhciwgcGF0aCk7CiAgc2V0Q2hhcnMoYiwgIi8iLCB1aW5mb09ySG9zdDAgfCBob3N0U3RhcnQpOwogIHNldENoYXJzKGIsICIuIiwgcGF0aFNlZ0RvdCk7CiAgc2V0Q2hhcnMoYiwgIj8iLCBxdWVyeSB8IHF1ZXJ5U3RhcnQpOwogIHNldENoYXJzKGIsICIjIiwgZnJhZ21lbnQgfCBmcmFnbWVudFN0YXJ0KTsKCiAgYiA9IGJ1aWxkKHVpbmZvT3JIb3N0MCwgdWluZm9Pckhvc3QgfCBub3RTaW1wbGUpOwogIHNldENoYXJzKGIsIHBjaGFyLCB1aW5mb09ySG9zdCk7CiAgc2V0UmFuZ2UoYiwgIkFaIiwgdWluZm9Pckhvc3QgfCBub3RTaW1wbGUpOwogIHNldENoYXJzKGIsICI6IiwgdWluZm9PclBvcnQwIHwgcG9ydFN0YXJ0KTsKICBzZXRDaGFycyhiLCAiQCIsIHVpbmZvT3JIb3N0MCB8IGhvc3RTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIlsiLCBpcHY2SG9zdCB8IG5vdFNpbXBsZSk7CiAgc2V0Q2hhcnMoYiwgIi8iLCBwYXRoU2VnIHwgcGF0aFN0YXJ0KTsKICBzZXRDaGFycyhiLCAiPyIsIHF1ZXJ5IHwgcXVlcnlTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIiMiLCBmcmFnbWVudCB8IGZyYWdtZW50U3RhcnQpOwoKICBiID0gYnVpbGQodWluZm9Pckhvc3QsIHVpbmZvT3JIb3N0IHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCBwY2hhciwgdWluZm9Pckhvc3QpOwogIHNldFJhbmdlKGIsICJBWiIsIHVpbmZvT3JIb3N0IHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCAiOiIsIHVpbmZvT3JQb3J0MCB8IHBvcnRTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIkAiLCB1aW5mb09ySG9zdDAgfCBob3N0U3RhcnQpOwogIHNldENoYXJzKGIsICIvIiwgcGF0aFNlZyB8IHBhdGhTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIj8iLCBxdWVyeSB8IHF1ZXJ5U3RhcnQpOwogIHNldENoYXJzKGIsICIjIiwgZnJhZ21lbnQgfCBmcmFnbWVudFN0YXJ0KTsKCiAgYiA9IGJ1aWxkKHVpbmZvT3JQb3J0MCwgdWluZm9PclBvcnQgfCBub3RTaW1wbGUpOwogIHNldFJhbmdlKGIsICIxOSIsIHVpbmZvT3JQb3J0KTsKICBzZXRDaGFycyhiLCAiQCIsIHVpbmZvT3JIb3N0MCB8IGhvc3RTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIi8iLCBwYXRoU2VnIHwgcGF0aFN0YXJ0KTsKICBzZXRDaGFycyhiLCAiPyIsIHF1ZXJ5IHwgcXVlcnlTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIiMiLCBmcmFnbWVudCB8IGZyYWdtZW50U3RhcnQpOwoKICBiID0gYnVpbGQodWluZm9PclBvcnQsIHVpbmZvT3JQb3J0IHwgbm90U2ltcGxlKTsKICBzZXRSYW5nZShiLCAiMDkiLCB1aW5mb09yUG9ydCk7CiAgc2V0Q2hhcnMoYiwgIkAiLCB1aW5mb09ySG9zdDAgfCBob3N0U3RhcnQpOwogIHNldENoYXJzKGIsICIvIiwgcGF0aFNlZyB8IHBhdGhTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIj8iLCBxdWVyeSB8IHF1ZXJ5U3RhcnQpOwogIHNldENoYXJzKGIsICIjIiwgZnJhZ21lbnQgfCBmcmFnbWVudFN0YXJ0KTsKCiAgYiA9IGJ1aWxkKGlwdjZIb3N0LCBpcHY2SG9zdCk7CiAgc2V0Q2hhcnMoYiwgIl0iLCB1aW5mb09ySG9zdCk7CgogIGIgPSBidWlsZChyZWxQYXRoU2VnLCBwYXRoIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCBwY2hhciwgcGF0aCk7CiAgc2V0Q2hhcnMoYiwgIi4iLCByZWxQYXRoU2VnRG90KTsKICBzZXRDaGFycyhiLCAiLyIsIHBhdGhTZWcgfCBub3RTaW1wbGUpOwogIHNldENoYXJzKGIsICI/IiwgcXVlcnkgfCBxdWVyeVN0YXJ0KTsKICBzZXRDaGFycyhiLCAiIyIsIGZyYWdtZW50IHwgZnJhZ21lbnRTdGFydCk7CgogIGIgPSBidWlsZChyZWxQYXRoU2VnRG90LCBwYXRoIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCBwY2hhciwgcGF0aCk7CiAgc2V0Q2hhcnMoYiwgIi4iLCByZWxQYXRoU2VnRG90Mik7CiAgc2V0Q2hhcnMoYiwgIi8iLCBwYXRoU2VnIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCAiPyIsIHF1ZXJ5IHwgcXVlcnlTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIiMiLCBmcmFnbWVudCB8IGZyYWdtZW50U3RhcnQpOwoKICBiID0gYnVpbGQocmVsUGF0aFNlZ0RvdDIsIHBhdGggfCBub3RTaW1wbGUpOwogIHNldENoYXJzKGIsIHBjaGFyLCBwYXRoKTsKICBzZXRDaGFycyhiLCAiLyIsIHJlbFBhdGhTZWcpOwogIHNldENoYXJzKGIsICI/IiwgcXVlcnkgfCBxdWVyeVN0YXJ0KTsgLy8gVGhpcyBzaG91bGQgYmUgbm9uLXNpbXBsZS4KICBzZXRDaGFycyhiLCAiIyIsIGZyYWdtZW50IHwgZnJhZ21lbnRTdGFydCk7IC8vIFRoaXMgc2hvdWxkIGJlIG5vbi1zaW1wbGUuCgogIGIgPSBidWlsZChwYXRoU2VnLCBwYXRoIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCBwY2hhciwgcGF0aCk7CiAgc2V0Q2hhcnMoYiwgIi4iLCBwYXRoU2VnRG90KTsKICBzZXRDaGFycyhiLCAiLyIsIHBhdGhTZWcgfCBub3RTaW1wbGUpOwogIHNldENoYXJzKGIsICI/IiwgcXVlcnkgfCBxdWVyeVN0YXJ0KTsKICBzZXRDaGFycyhiLCAiIyIsIGZyYWdtZW50IHwgZnJhZ21lbnRTdGFydCk7CgogIGIgPSBidWlsZChwYXRoU2VnRG90LCBwYXRoIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCBwY2hhciwgcGF0aCk7CiAgc2V0Q2hhcnMoYiwgIi4iLCBwYXRoU2VnRG90Mik7CiAgc2V0Q2hhcnMoYiwgIi8iLCBwYXRoU2VnIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCAiPyIsIHF1ZXJ5IHwgcXVlcnlTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIiMiLCBmcmFnbWVudCB8IGZyYWdtZW50U3RhcnQpOwoKICBiID0gYnVpbGQocGF0aFNlZ0RvdDIsIHBhdGggfCBub3RTaW1wbGUpOwogIHNldENoYXJzKGIsIHBjaGFyLCBwYXRoKTsKICBzZXRDaGFycyhiLCAiLyIsIHBhdGhTZWcgfCBub3RTaW1wbGUpOwogIHNldENoYXJzKGIsICI/IiwgcXVlcnkgfCBxdWVyeVN0YXJ0KTsKICBzZXRDaGFycyhiLCAiIyIsIGZyYWdtZW50IHwgZnJhZ21lbnRTdGFydCk7CgogIGIgPSBidWlsZChwYXRoLCBwYXRoIHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCBwY2hhciwgcGF0aCk7CiAgc2V0Q2hhcnMoYiwgIi8iLCBwYXRoU2VnKTsKICBzZXRDaGFycyhiLCAiPyIsIHF1ZXJ5IHwgcXVlcnlTdGFydCk7CiAgc2V0Q2hhcnMoYiwgIiMiLCBmcmFnbWVudCB8IGZyYWdtZW50U3RhcnQpOwoKICBiID0gYnVpbGQocXVlcnksIHF1ZXJ5IHwgbm90U2ltcGxlKTsKICBzZXRDaGFycyhiLCBwY2hhciwgcXVlcnkpOwogIHNldENoYXJzKGIsICI/IiwgcXVlcnkpOwogIHNldENoYXJzKGIsICIjIiwgZnJhZ21lbnQgfCBmcmFnbWVudFN0YXJ0KTsKCiAgYiA9IGJ1aWxkKGZyYWdtZW50LCBmcmFnbWVudCB8IG5vdFNpbXBsZSk7CiAgc2V0Q2hhcnMoYiwgcGNoYXIsIGZyYWdtZW50KTsKICBzZXRDaGFycyhiLCAiPyIsIGZyYWdtZW50KTsKCiAgLy8gQSBzZXBhcmF0ZSB0d28tc3RhdGUgdmFsaWRhdG9yIGZvciBsb3dlci1jYXNlIHNjaGVtZSBuYW1lcy4KICAvLyBBbnkgbm9uLXNjaGVtZSBjaGFyYWN0ZXIgb3IgdXBwZXItY2FzZSBsZXR0ZXIgaXMgbWFya2VkIGFzIG5vbi1zaW1wbGUuCiAgYiA9IGJ1aWxkKHNjaGVtZTAsIHNjaGVtZSB8IG5vdFNpbXBsZSk7CiAgc2V0UmFuZ2UoYiwgImF6Iiwgc2NoZW1lKTsKCiAgYiA9IGJ1aWxkKHNjaGVtZSwgc2NoZW1lIHwgbm90U2ltcGxlKTsKICBzZXRSYW5nZShiLCAiYXoiLCBzY2hlbWUpOwogIHNldFJhbmdlKGIsICIwOSIsIHNjaGVtZSk7CiAgc2V0Q2hhcnMoYiwgIistLiIsIHNjaGVtZSk7CgogIHJldHVybiB0YWJsZXM7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIENvZGUgdGhhdCB1c2VzIHRoZSBVUkkgc2Nhbm5lciB0YWJsZS4KCi8vLyBTY2FuIGEgc3RyaW5nIHVzaW5nIHRoZSBbX3NjYW5uZXJUYWJsZXNdIHN0YXRlIG1hY2hpbmUuCi8vLwovLy8gU2NhbnMgW3VyaV0gZnJvbSBbc3RhcnRdIHRvIFtlbmRdLCBzdGFydGluZyBpbiBzdGF0ZSBbc3RhdGVdIGFuZAovLy8gd3JpdGluZyBvdXRwdXQgaW50byBbaW5kaWNlc10uCi8vLwovLy8gUmV0dXJucyB0aGUgZmluYWwgc3RhdGUuCmludCBfc2NhbihTdHJpbmcgdXJpLCBpbnQgc3RhcnQsIGludCBlbmQsIGludCBzdGF0ZSwgTGlzdDxpbnQ+IGluZGljZXMpIHsKICB2YXIgdGFibGVzID0gX3NjYW5uZXJUYWJsZXM7CiAgYXNzZXJ0KGVuZCA8PSB1cmkubGVuZ3RoKTsKICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgdmFyIHRhYmxlID0gdGFibGVzW3N0YXRlXTsKICAgIC8vIFhvciB3aXRoIDB4NjAgdG8gbW92ZSByYW5nZSAweDIwLTB4N2YgaW50byAweDAwLTB4NWYKICAgIGludCBjaGFyID0gdXJpLmNvZGVVbml0QXQoaSkgXiAweDYwOwogICAgLy8gVXNlIDB4MWYgKG5lZSAweDdmKSB0byByZXByZXNlbnQgYWxsIHVuaGFuZGxlZCBjaGFyYWN0ZXJzLgogICAgaWYgKGNoYXIgPiAweDVmKSBjaGFyID0gMHgxZjsKICAgIGludCB0cmFuc2l0aW9uID0gdGFibGVbY2hhcl07CiAgICBzdGF0ZSA9IHRyYW5zaXRpb24gJiAweDFmOwogICAgaW5kaWNlc1t0cmFuc2l0aW9uID4+IDVdID0gaTsKICB9CiAgcmV0dXJuIHN0YXRlOwp9CgpjbGFzcyBfU2ltcGxlVXJpIGltcGxlbWVudHMgVXJpIHsKICBmaW5hbCBTdHJpbmcgX3VyaTsKICBmaW5hbCBpbnQgX3NjaGVtZUVuZDsKICBmaW5hbCBpbnQgX2hvc3RTdGFydDsKICBmaW5hbCBpbnQgX3BvcnRTdGFydDsKICBmaW5hbCBpbnQgX3BhdGhTdGFydDsKICBmaW5hbCBpbnQgX3F1ZXJ5U3RhcnQ7CiAgZmluYWwgaW50IF9mcmFnbWVudFN0YXJ0OwoKICAvLy8gVGhlIHNjaGVtZSBpcyBvZnRlbiB1c2VkIHRvIGRpc3Rpbmd1aXNoIFVSSXMuCiAgLy8vIFRvIG1ha2UgY29tcGFyaXNvbnMgbW9yZSBlZmZpY2llbnQsIHdlIGNhY2hlIHRoZSB2YWx1ZSwgYW5kCiAgLy8vIGNhbm9uaWNhbGl6ZSBhIGZldyBrbm93biB0eXBlcy4KICBTdHJpbmcgX3NjaGVtZUNhY2hlOwogIGludCBfaGFzaENvZGVDYWNoZTsKCiAgX1NpbXBsZVVyaSgKICAgICAgdGhpcy5fdXJpLAogICAgICB0aGlzLl9zY2hlbWVFbmQsCiAgICAgIHRoaXMuX2hvc3RTdGFydCwKICAgICAgdGhpcy5fcG9ydFN0YXJ0LAogICAgICB0aGlzLl9wYXRoU3RhcnQsCiAgICAgIHRoaXMuX3F1ZXJ5U3RhcnQsCiAgICAgIHRoaXMuX2ZyYWdtZW50U3RhcnQsCiAgICAgIHRoaXMuX3NjaGVtZUNhY2hlKTsKCiAgYm9vbCBnZXQgaGFzU2NoZW1lID0+IF9zY2hlbWVFbmQgPiAwOwogIGJvb2wgZ2V0IGhhc0F1dGhvcml0eSA9PiBfaG9zdFN0YXJ0ID4gMDsKICBib29sIGdldCBoYXNVc2VySW5mbyA9PiBfaG9zdFN0YXJ0ID4gX3NjaGVtZUVuZCArIDQ7CiAgYm9vbCBnZXQgaGFzUG9ydCA9PiBfaG9zdFN0YXJ0ID4gMCAmJiBfcG9ydFN0YXJ0ICsgMSA8IF9wYXRoU3RhcnQ7CiAgYm9vbCBnZXQgaGFzUXVlcnkgPT4gX3F1ZXJ5U3RhcnQgPCBfZnJhZ21lbnRTdGFydDsKICBib29sIGdldCBoYXNGcmFnbWVudCA9PiBfZnJhZ21lbnRTdGFydCA8IF91cmkubGVuZ3RoOwoKICBib29sIGdldCBfaXNGaWxlID0+IF9zY2hlbWVFbmQgPT0gNCAmJiBfdXJpLnN0YXJ0c1dpdGgoImZpbGUiKTsKICBib29sIGdldCBfaXNIdHRwID0+IF9zY2hlbWVFbmQgPT0gNCAmJiBfdXJpLnN0YXJ0c1dpdGgoImh0dHAiKTsKICBib29sIGdldCBfaXNIdHRwcyA9PiBfc2NoZW1lRW5kID09IDUgJiYgX3VyaS5zdGFydHNXaXRoKCJodHRwcyIpOwogIGJvb2wgZ2V0IF9pc1BhY2thZ2UgPT4gX3NjaGVtZUVuZCA9PSA3ICYmIF91cmkuc3RhcnRzV2l0aCgicGFja2FnZSIpOwoKICAvLy8gTGlrZSBbaXNTY2hlbWVdIGJ1dCBleHBlY3RzIGFyZ3VtZW50IHRvIGJlIGNhc2Ugbm9ybWFsaXplZC4KICBib29sIF9pc1NjaGVtZShTdHJpbmcgc2NoZW1lKSA9PgogICAgICBfc2NoZW1lRW5kID09IHNjaGVtZS5sZW5ndGggJiYgX3VyaS5zdGFydHNXaXRoKHNjaGVtZSk7CgogIGJvb2wgZ2V0IGhhc0Fic29sdXRlUGF0aCA9PiBfdXJpLnN0YXJ0c1dpdGgoIi8iLCBfcGF0aFN0YXJ0KTsKICBib29sIGdldCBoYXNFbXB0eVBhdGggPT4gX3BhdGhTdGFydCA9PSBfcXVlcnlTdGFydDsKCiAgYm9vbCBnZXQgaXNBYnNvbHV0ZSA9PiBoYXNTY2hlbWUgJiYgIWhhc0ZyYWdtZW50OwoKICBib29sIGlzU2NoZW1lKFN0cmluZyBzY2hlbWUpIHsKICAgIGlmIChzY2hlbWUgPT0gbnVsbCB8fCBzY2hlbWUuaXNFbXB0eSkgcmV0dXJuIF9zY2hlbWVFbmQgPCAwOwogICAgaWYgKHNjaGVtZS5sZW5ndGggIT0gX3NjaGVtZUVuZCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIF9VcmkuX2NvbXBhcmVTY2hlbWUoc2NoZW1lLCBfdXJpKTsKICB9CgogIFN0cmluZyBnZXQgc2NoZW1lIHsKICAgIGlmIChfc2NoZW1lRW5kIDw9IDApIHJldHVybiAiIjsKICAgIGlmIChfc2NoZW1lQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIF9zY2hlbWVDYWNoZTsKICAgIGlmIChfaXNIdHRwKSB7CiAgICAgIF9zY2hlbWVDYWNoZSA9ICJodHRwIjsKICAgIH0gZWxzZSBpZiAoX2lzSHR0cHMpIHsKICAgICAgX3NjaGVtZUNhY2hlID0gImh0dHBzIjsKICAgIH0gZWxzZSBpZiAoX2lzRmlsZSkgewogICAgICBfc2NoZW1lQ2FjaGUgPSAiZmlsZSI7CiAgICB9IGVsc2UgaWYgKF9pc1BhY2thZ2UpIHsKICAgICAgX3NjaGVtZUNhY2hlID0gInBhY2thZ2UiOwogICAgfSBlbHNlIHsKICAgICAgX3NjaGVtZUNhY2hlID0gX3VyaS5zdWJzdHJpbmcoMCwgX3NjaGVtZUVuZCk7CiAgICB9CiAgICByZXR1cm4gX3NjaGVtZUNhY2hlOwogIH0KCiAgU3RyaW5nIGdldCBhdXRob3JpdHkgPT4KICAgICAgX2hvc3RTdGFydCA+IDAgPyBfdXJpLnN1YnN0cmluZyhfc2NoZW1lRW5kICsgMywgX3BhdGhTdGFydCkgOiAiIjsKICBTdHJpbmcgZ2V0IHVzZXJJbmZvID0+IChfaG9zdFN0YXJ0ID4gX3NjaGVtZUVuZCArIDMpCiAgICAgID8gX3VyaS5zdWJzdHJpbmcoX3NjaGVtZUVuZCArIDMsIF9ob3N0U3RhcnQgLSAxKQogICAgICA6ICIiOwogIFN0cmluZyBnZXQgaG9zdCA9PgogICAgICBfaG9zdFN0YXJ0ID4gMCA/IF91cmkuc3Vic3RyaW5nKF9ob3N0U3RhcnQsIF9wb3J0U3RhcnQpIDogIiI7CiAgaW50IGdldCBwb3J0IHsKICAgIGlmIChoYXNQb3J0KSByZXR1cm4gaW50LnBhcnNlKF91cmkuc3Vic3RyaW5nKF9wb3J0U3RhcnQgKyAxLCBfcGF0aFN0YXJ0KSk7CiAgICBpZiAoX2lzSHR0cCkgcmV0dXJuIDgwOwogICAgaWYgKF9pc0h0dHBzKSByZXR1cm4gNDQzOwogICAgcmV0dXJuIDA7CiAgfQoKICBTdHJpbmcgZ2V0IHBhdGggPT4gX3VyaS5zdWJzdHJpbmcoX3BhdGhTdGFydCwgX3F1ZXJ5U3RhcnQpOwogIFN0cmluZyBnZXQgcXVlcnkgPT4gKF9xdWVyeVN0YXJ0IDwgX2ZyYWdtZW50U3RhcnQpCiAgICAgID8gX3VyaS5zdWJzdHJpbmcoX3F1ZXJ5U3RhcnQgKyAxLCBfZnJhZ21lbnRTdGFydCkKICAgICAgOiAiIjsKICBTdHJpbmcgZ2V0IGZyYWdtZW50ID0+CiAgICAgIChfZnJhZ21lbnRTdGFydCA8IF91cmkubGVuZ3RoKSA/IF91cmkuc3Vic3RyaW5nKF9mcmFnbWVudFN0YXJ0ICsgMSkgOiAiIjsKCiAgU3RyaW5nIGdldCBvcmlnaW4gewogICAgLy8gQ2hlY2sgb3JpZ2luYWwgYmVoYXZpb3IgLSBXM0Mgc3BlYyBpcyB3b25reSEKICAgIGJvb2wgaXNIdHRwID0gX2lzSHR0cDsKICAgIGlmIChfc2NoZW1lRW5kIDwgMCkgewogICAgICB0aHJvdyBTdGF0ZUVycm9yKCJDYW5ub3QgdXNlIG9yaWdpbiB3aXRob3V0IGEgc2NoZW1lOiAkdGhpcyIpOwogICAgfQogICAgaWYgKCFpc0h0dHAgJiYgIV9pc0h0dHBzKSB7CiAgICAgIHRocm93IFN0YXRlRXJyb3IoCiAgICAgICAgICAiT3JpZ2luIGlzIG9ubHkgYXBwbGljYWJsZSB0byBzY2hlbWVzIGh0dHAgYW5kIGh0dHBzOiAkdGhpcyIpOwogICAgfQogICAgaWYgKF9ob3N0U3RhcnQgPT0gX3BvcnRTdGFydCkgewogICAgICB0aHJvdyBTdGF0ZUVycm9yKAogICAgICAgICAgIkEgJHNjaGVtZTogVVJJIHNob3VsZCBoYXZlIGEgbm9uLWVtcHR5IGhvc3QgbmFtZTogJHRoaXMiKTsKICAgIH0KICAgIGlmIChfaG9zdFN0YXJ0ID09IF9zY2hlbWVFbmQgKyAzKSB7CiAgICAgIHJldHVybiBfdXJpLnN1YnN0cmluZygwLCBfcGF0aFN0YXJ0KTsKICAgIH0KICAgIC8vIE5lZWQgdG8gZHJvcCBhbm9uLWVtcHR5IHVzZXJJbmZvLgogICAgcmV0dXJuIF91cmkuc3Vic3RyaW5nKDAsIF9zY2hlbWVFbmQgKyAzKSArCiAgICAgICAgX3VyaS5zdWJzdHJpbmcoX2hvc3RTdGFydCwgX3BhdGhTdGFydCk7CiAgfQoKICBMaXN0PFN0cmluZz4gZ2V0IHBhdGhTZWdtZW50cyB7CiAgICBpbnQgc3RhcnQgPSBfcGF0aFN0YXJ0OwogICAgaW50IGVuZCA9IF9xdWVyeVN0YXJ0OwogICAgaWYgKF91cmkuc3RhcnRzV2l0aCgiLyIsIHN0YXJ0KSkgc3RhcnQrKzsKICAgIGlmIChzdGFydCA9PSBlbmQpIHJldHVybiBjb25zdCA8U3RyaW5nPltdOwogICAgTGlzdDxTdHJpbmc+IHBhcnRzID0gW107CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICB2YXIgY2hhciA9IF91cmkuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGNoYXIgPT0gX1NMQVNIKSB7CiAgICAgICAgcGFydHMuYWRkKF91cmkuc3Vic3RyaW5nKHN0YXJ0LCBpKSk7CiAgICAgICAgc3RhcnQgPSBpICsgMTsKICAgICAgfQogICAgfQogICAgcGFydHMuYWRkKF91cmkuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpKTsKICAgIHJldHVybiBMaXN0PFN0cmluZz4udW5tb2RpZmlhYmxlKHBhcnRzKTsKICB9CgogIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0IHF1ZXJ5UGFyYW1ldGVycyB7CiAgICBpZiAoIWhhc1F1ZXJ5KSByZXR1cm4gY29uc3QgPFN0cmluZywgU3RyaW5nPnt9OwogICAgcmV0dXJuIFVubW9kaWZpYWJsZU1hcFZpZXc8U3RyaW5nLCBTdHJpbmc+KFVyaS5zcGxpdFF1ZXJ5U3RyaW5nKHF1ZXJ5KSk7CiAgfQoKICBNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IGdldCBxdWVyeVBhcmFtZXRlcnNBbGwgewogICAgaWYgKCFoYXNRdWVyeSkgcmV0dXJuIGNvbnN0IDxTdHJpbmcsIExpc3Q8U3RyaW5nPj57fTsKICAgIE1hcCBxdWVyeVBhcmFtZXRlckxpc3RzID0gX1VyaS5fc3BsaXRRdWVyeVN0cmluZ0FsbChxdWVyeSk7CiAgICBmb3IgKHZhciBrZXkgaW4gcXVlcnlQYXJhbWV0ZXJMaXN0cy5rZXlzKSB7CiAgICAgIHF1ZXJ5UGFyYW1ldGVyTGlzdHNba2V5XSA9CiAgICAgICAgICBMaXN0PFN0cmluZz4udW5tb2RpZmlhYmxlKHF1ZXJ5UGFyYW1ldGVyTGlzdHNba2V5XSk7CiAgICB9CiAgICByZXR1cm4gTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+Pi51bm1vZGlmaWFibGUocXVlcnlQYXJhbWV0ZXJMaXN0cyk7CiAgfQoKICBib29sIF9pc1BvcnQoU3RyaW5nIHBvcnQpIHsKICAgIGludCBwb3J0RGlnaXRTdGFydCA9IF9wb3J0U3RhcnQgKyAxOwogICAgcmV0dXJuIHBvcnREaWdpdFN0YXJ0ICsgcG9ydC5sZW5ndGggPT0gX3BhdGhTdGFydCAmJgogICAgICAgIF91cmkuc3RhcnRzV2l0aChwb3J0LCBwb3J0RGlnaXRTdGFydCk7CiAgfQoKICBVcmkgbm9ybWFsaXplUGF0aCgpID0+IHRoaXM7CgogIFVyaSByZW1vdmVGcmFnbWVudCgpIHsKICAgIGlmICghaGFzRnJhZ21lbnQpIHJldHVybiB0aGlzOwogICAgcmV0dXJuIF9TaW1wbGVVcmkoX3VyaS5zdWJzdHJpbmcoMCwgX2ZyYWdtZW50U3RhcnQpLCBfc2NoZW1lRW5kLCBfaG9zdFN0YXJ0LAogICAgICAgIF9wb3J0U3RhcnQsIF9wYXRoU3RhcnQsIF9xdWVyeVN0YXJ0LCBfZnJhZ21lbnRTdGFydCwgX3NjaGVtZUNhY2hlKTsKICB9CgogIFVyaSByZXBsYWNlKAogICAgICB7U3RyaW5nIHNjaGVtZSwKICAgICAgU3RyaW5nIHVzZXJJbmZvLAogICAgICBTdHJpbmcgaG9zdCwKICAgICAgaW50IHBvcnQsCiAgICAgIFN0cmluZyBwYXRoLAogICAgICBJdGVyYWJsZTxTdHJpbmc+IHBhdGhTZWdtZW50cywKICAgICAgU3RyaW5nIHF1ZXJ5LAogICAgICBNYXA8U3RyaW5nLCBkeW5hbWljIC8qU3RyaW5nfEl0ZXJhYmxlPFN0cmluZz4qLyA+IHF1ZXJ5UGFyYW1ldGVycywKICAgICAgU3RyaW5nIGZyYWdtZW50fSkgewogICAgYm9vbCBzY2hlbWVDaGFuZ2VkID0gZmFsc2U7CiAgICBpZiAoc2NoZW1lICE9IG51bGwpIHsKICAgICAgc2NoZW1lID0gX1VyaS5fbWFrZVNjaGVtZShzY2hlbWUsIDAsIHNjaGVtZS5sZW5ndGgpOwogICAgICBzY2hlbWVDaGFuZ2VkID0gIV9pc1NjaGVtZShzY2hlbWUpOwogICAgfSBlbHNlIHsKICAgICAgc2NoZW1lID0gdGhpcy5zY2hlbWU7CiAgICB9CiAgICBib29sIGlzRmlsZSA9IChzY2hlbWUgPT0gImZpbGUiKTsKICAgIGlmICh1c2VySW5mbyAhPSBudWxsKSB7CiAgICAgIHVzZXJJbmZvID0gX1VyaS5fbWFrZVVzZXJJbmZvKHVzZXJJbmZvLCAwLCB1c2VySW5mby5sZW5ndGgpOwogICAgfSBlbHNlIGlmIChfaG9zdFN0YXJ0ID4gMCkgewogICAgICB1c2VySW5mbyA9IF91cmkuc3Vic3RyaW5nKF9zY2hlbWVFbmQgKyAzLCBfaG9zdFN0YXJ0KTsKICAgIH0gZWxzZSB7CiAgICAgIHVzZXJJbmZvID0gIiI7CiAgICB9CiAgICBpZiAocG9ydCAhPSBudWxsKSB7CiAgICAgIHBvcnQgPSBfVXJpLl9tYWtlUG9ydChwb3J0LCBzY2hlbWUpOwogICAgfSBlbHNlIHsKICAgICAgcG9ydCA9IHRoaXMuaGFzUG9ydCA/IHRoaXMucG9ydCA6IG51bGw7CiAgICAgIGlmIChzY2hlbWVDaGFuZ2VkKSB7CiAgICAgICAgLy8gVGhlIGRlZmF1bHQgcG9ydCBtaWdodCBoYXZlIGNoYW5nZWQuCiAgICAgICAgcG9ydCA9IF9VcmkuX21ha2VQb3J0KHBvcnQsIHNjaGVtZSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChob3N0ICE9IG51bGwpIHsKICAgICAgaG9zdCA9IF9VcmkuX21ha2VIb3N0KGhvc3QsIDAsIGhvc3QubGVuZ3RoLCBmYWxzZSk7CiAgICB9IGVsc2UgaWYgKF9ob3N0U3RhcnQgPiAwKSB7CiAgICAgIGhvc3QgPSBfdXJpLnN1YnN0cmluZyhfaG9zdFN0YXJ0LCBfcG9ydFN0YXJ0KTsKICAgIH0gZWxzZSBpZiAodXNlckluZm8uaXNOb3RFbXB0eSB8fCBwb3J0ICE9IG51bGwgfHwgaXNGaWxlKSB7CiAgICAgIGhvc3QgPSAiIjsKICAgIH0KCiAgICBib29sIGhhc0F1dGhvcml0eSA9IGhvc3QgIT0gbnVsbDsKICAgIGlmIChwYXRoICE9IG51bGwgfHwgcGF0aFNlZ21lbnRzICE9IG51bGwpIHsKICAgICAgcGF0aCA9IF9VcmkuX21ha2VQYXRoKHBhdGgsIDAsIF9zdHJpbmdPck51bGxMZW5ndGgocGF0aCksIHBhdGhTZWdtZW50cywKICAgICAgICAgIHNjaGVtZSwgaGFzQXV0aG9yaXR5KTsKICAgIH0gZWxzZSB7CiAgICAgIHBhdGggPSBfdXJpLnN1YnN0cmluZyhfcGF0aFN0YXJ0LCBfcXVlcnlTdGFydCk7CiAgICAgIGlmICgoaXNGaWxlIHx8IChoYXNBdXRob3JpdHkgJiYgIXBhdGguaXNFbXB0eSkpICYmCiAgICAgICAgICAhcGF0aC5zdGFydHNXaXRoKCcvJykpIHsKICAgICAgICBwYXRoID0gIi8iICsgcGF0aDsKICAgICAgfQogICAgfQoKICAgIGlmIChxdWVyeSAhPSBudWxsIHx8IHF1ZXJ5UGFyYW1ldGVycyAhPSBudWxsKSB7CiAgICAgIHF1ZXJ5ID0gX1VyaS5fbWFrZVF1ZXJ5KAogICAgICAgICAgcXVlcnksIDAsIF9zdHJpbmdPck51bGxMZW5ndGgocXVlcnkpLCBxdWVyeVBhcmFtZXRlcnMpOwogICAgfSBlbHNlIGlmIChfcXVlcnlTdGFydCA8IF9mcmFnbWVudFN0YXJ0KSB7CiAgICAgIHF1ZXJ5ID0gX3VyaS5zdWJzdHJpbmcoX3F1ZXJ5U3RhcnQgKyAxLCBfZnJhZ21lbnRTdGFydCk7CiAgICB9CgogICAgaWYgKGZyYWdtZW50ICE9IG51bGwpIHsKICAgICAgZnJhZ21lbnQgPSBfVXJpLl9tYWtlRnJhZ21lbnQoZnJhZ21lbnQsIDAsIGZyYWdtZW50Lmxlbmd0aCk7CiAgICB9IGVsc2UgaWYgKF9mcmFnbWVudFN0YXJ0IDwgX3VyaS5sZW5ndGgpIHsKICAgICAgZnJhZ21lbnQgPSBfdXJpLnN1YnN0cmluZyhfZnJhZ21lbnRTdGFydCArIDEpOwogICAgfQoKICAgIHJldHVybiBfVXJpLl9pbnRlcm5hbChzY2hlbWUsIHVzZXJJbmZvLCBob3N0LCBwb3J0LCBwYXRoLCBxdWVyeSwgZnJhZ21lbnQpOwogIH0KCiAgVXJpIHJlc29sdmUoU3RyaW5nIHJlZmVyZW5jZSkgewogICAgcmV0dXJuIHJlc29sdmVVcmkoVXJpLnBhcnNlKHJlZmVyZW5jZSkpOwogIH0KCiAgVXJpIHJlc29sdmVVcmkoVXJpIHJlZmVyZW5jZSkgewogICAgaWYgKHJlZmVyZW5jZSBpcyBfU2ltcGxlVXJpKSB7CiAgICAgIHJldHVybiBfc2ltcGxlTWVyZ2UodGhpcywgcmVmZXJlbmNlKTsKICAgIH0KICAgIHJldHVybiBfdG9Ob25TaW1wbGUoKS5yZXNvbHZlVXJpKHJlZmVyZW5jZSk7CiAgfQoKICAvLyBNZXJnZSB0d28gc2ltcGxlIFVSSXMuIFRoaXMgc2hvdWxkIGFsd2F5cyByZXN1bHQgaW4gYSBwcmVmaXggb2YKICAvLyBvbmUgY29uY2F0ZW5hdGVkIHdpdGggYSBzdWZmaXggb2YgdGhlIG90aGVyLCBwb3NzaWJseSB3aXRoIGEgYC9gIGluCiAgLy8gdGhlIG1pZGRsZSBvZiB0d28gbWVyZ2VkIHBhdGhzLCB3aGljaCBpcyBhZ2FpbiBzaW1wbGUuCiAgLy8gSW4gYSBmZXcgY2FzZXMsIHRoZXJlIG1pZ2h0IGJlIGEgbmVlZCBmb3IgZXh0cmEgbm9ybWFsaXphdGlvbiwgd2hlbgogIC8vIHJlc29sdmluZyBvbiB0b3Agb2YgYSBrbm93biBzY2hlbWUuCiAgVXJpIF9zaW1wbGVNZXJnZShfU2ltcGxlVXJpIGJhc2UsIF9TaW1wbGVVcmkgcmVmKSB7CiAgICBpZiAocmVmLmhhc1NjaGVtZSkgcmV0dXJuIHJlZjsKICAgIGlmIChyZWYuaGFzQXV0aG9yaXR5KSB7CiAgICAgIGlmICghYmFzZS5oYXNTY2hlbWUpIHJldHVybiByZWY7CiAgICAgIGJvb2wgaXNTaW1wbGUgPSB0cnVlOwogICAgICBpZiAoYmFzZS5faXNGaWxlKSB7CiAgICAgICAgaXNTaW1wbGUgPSAhcmVmLmhhc0VtcHR5UGF0aDsKICAgICAgfSBlbHNlIGlmIChiYXNlLl9pc0h0dHApIHsKICAgICAgICBpc1NpbXBsZSA9ICFyZWYuX2lzUG9ydCgiODAiKTsKICAgICAgfSBlbHNlIGlmIChiYXNlLl9pc0h0dHBzKSB7CiAgICAgICAgaXNTaW1wbGUgPSAhcmVmLl9pc1BvcnQoIjQ0MyIpOwogICAgICB9CiAgICAgIGlmIChpc1NpbXBsZSkgewogICAgICAgIHZhciBkZWx0YSA9IGJhc2UuX3NjaGVtZUVuZCArIDE7CiAgICAgICAgdmFyIG5ld1VyaSA9IGJhc2UuX3VyaS5zdWJzdHJpbmcoMCwgYmFzZS5fc2NoZW1lRW5kICsgMSkgKwogICAgICAgICAgICByZWYuX3VyaS5zdWJzdHJpbmcocmVmLl9zY2hlbWVFbmQgKyAxKTsKICAgICAgICByZXR1cm4gX1NpbXBsZVVyaSgKICAgICAgICAgICAgbmV3VXJpLAogICAgICAgICAgICBiYXNlLl9zY2hlbWVFbmQsCiAgICAgICAgICAgIHJlZi5faG9zdFN0YXJ0ICsgZGVsdGEsCiAgICAgICAgICAgIHJlZi5fcG9ydFN0YXJ0ICsgZGVsdGEsCiAgICAgICAgICAgIHJlZi5fcGF0aFN0YXJ0ICsgZGVsdGEsCiAgICAgICAgICAgIHJlZi5fcXVlcnlTdGFydCArIGRlbHRhLAogICAgICAgICAgICByZWYuX2ZyYWdtZW50U3RhcnQgKyBkZWx0YSwKICAgICAgICAgICAgYmFzZS5fc2NoZW1lQ2FjaGUpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRoaXMgd2lsbCByZXF1aXJlIG5vcm1hbGl6YXRpb24sIHNvIHVzZSB0aGUgX1VyaSBpbXBsZW1lbnRhdGlvbi4KICAgICAgICByZXR1cm4gX3RvTm9uU2ltcGxlKCkucmVzb2x2ZVVyaShyZWYpOwogICAgICB9CiAgICB9CiAgICBpZiAocmVmLmhhc0VtcHR5UGF0aCkgewogICAgICBpZiAocmVmLmhhc1F1ZXJ5KSB7CiAgICAgICAgaW50IGRlbHRhID0gYmFzZS5fcXVlcnlTdGFydCAtIHJlZi5fcXVlcnlTdGFydDsKICAgICAgICB2YXIgbmV3VXJpID0gYmFzZS5fdXJpLnN1YnN0cmluZygwLCBiYXNlLl9xdWVyeVN0YXJ0KSArCiAgICAgICAgICAgIHJlZi5fdXJpLnN1YnN0cmluZyhyZWYuX3F1ZXJ5U3RhcnQpOwogICAgICAgIHJldHVybiBfU2ltcGxlVXJpKAogICAgICAgICAgICBuZXdVcmksCiAgICAgICAgICAgIGJhc2UuX3NjaGVtZUVuZCwKICAgICAgICAgICAgYmFzZS5faG9zdFN0YXJ0LAogICAgICAgICAgICBiYXNlLl9wb3J0U3RhcnQsCiAgICAgICAgICAgIGJhc2UuX3BhdGhTdGFydCwKICAgICAgICAgICAgcmVmLl9xdWVyeVN0YXJ0ICsgZGVsdGEsCiAgICAgICAgICAgIHJlZi5fZnJhZ21lbnRTdGFydCArIGRlbHRhLAogICAgICAgICAgICBiYXNlLl9zY2hlbWVDYWNoZSk7CiAgICAgIH0KICAgICAgaWYgKHJlZi5oYXNGcmFnbWVudCkgewogICAgICAgIGludCBkZWx0YSA9IGJhc2UuX2ZyYWdtZW50U3RhcnQgLSByZWYuX2ZyYWdtZW50U3RhcnQ7CiAgICAgICAgdmFyIG5ld1VyaSA9IGJhc2UuX3VyaS5zdWJzdHJpbmcoMCwgYmFzZS5fZnJhZ21lbnRTdGFydCkgKwogICAgICAgICAgICByZWYuX3VyaS5zdWJzdHJpbmcocmVmLl9mcmFnbWVudFN0YXJ0KTsKICAgICAgICByZXR1cm4gX1NpbXBsZVVyaSgKICAgICAgICAgICAgbmV3VXJpLAogICAgICAgICAgICBiYXNlLl9zY2hlbWVFbmQsCiAgICAgICAgICAgIGJhc2UuX2hvc3RTdGFydCwKICAgICAgICAgICAgYmFzZS5fcG9ydFN0YXJ0LAogICAgICAgICAgICBiYXNlLl9wYXRoU3RhcnQsCiAgICAgICAgICAgIGJhc2UuX3F1ZXJ5U3RhcnQsCiAgICAgICAgICAgIHJlZi5fZnJhZ21lbnRTdGFydCArIGRlbHRhLAogICAgICAgICAgICBiYXNlLl9zY2hlbWVDYWNoZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGJhc2UucmVtb3ZlRnJhZ21lbnQoKTsKICAgIH0KICAgIGlmIChyZWYuaGFzQWJzb2x1dGVQYXRoKSB7CiAgICAgIHZhciBkZWx0YSA9IGJhc2UuX3BhdGhTdGFydCAtIHJlZi5fcGF0aFN0YXJ0OwogICAgICB2YXIgbmV3VXJpID0gYmFzZS5fdXJpLnN1YnN0cmluZygwLCBiYXNlLl9wYXRoU3RhcnQpICsKICAgICAgICAgIHJlZi5fdXJpLnN1YnN0cmluZyhyZWYuX3BhdGhTdGFydCk7CiAgICAgIHJldHVybiBfU2ltcGxlVXJpKAogICAgICAgICAgbmV3VXJpLAogICAgICAgICAgYmFzZS5fc2NoZW1lRW5kLAogICAgICAgICAgYmFzZS5faG9zdFN0YXJ0LAogICAgICAgICAgYmFzZS5fcG9ydFN0YXJ0LAogICAgICAgICAgYmFzZS5fcGF0aFN0YXJ0LAogICAgICAgICAgcmVmLl9xdWVyeVN0YXJ0ICsgZGVsdGEsCiAgICAgICAgICByZWYuX2ZyYWdtZW50U3RhcnQgKyBkZWx0YSwKICAgICAgICAgIGJhc2UuX3NjaGVtZUNhY2hlKTsKICAgIH0KICAgIGlmIChiYXNlLmhhc0VtcHR5UGF0aCAmJiBiYXNlLmhhc0F1dGhvcml0eSkgewogICAgICAvLyByZWYgaGFzIHJlbGF0aXZlIG5vbi1lbXB0eSBwYXRoLgogICAgICAvLyBBZGQgYSAiLyIgaW4gZnJvbnQsIHRoZW4gbGVhZGluZyAiLy4uLyIgc2VnbWVudHMgYXJlIGZvbGRlZCB0byAiLyIuCiAgICAgIGludCByZWZTdGFydCA9IHJlZi5fcGF0aFN0YXJ0OwogICAgICB3aGlsZSAocmVmLl91cmkuc3RhcnRzV2l0aCgiLi4vIiwgcmVmU3RhcnQpKSB7CiAgICAgICAgcmVmU3RhcnQgKz0gMzsKICAgICAgfQogICAgICB2YXIgZGVsdGEgPSBiYXNlLl9wYXRoU3RhcnQgLSByZWZTdGFydCArIDE7CiAgICAgIHZhciBuZXdVcmkgPSAiJHtiYXNlLl91cmkuc3Vic3RyaW5nKDAsIGJhc2UuX3BhdGhTdGFydCl9LyIKICAgICAgICAgICIke3JlZi5fdXJpLnN1YnN0cmluZyhyZWZTdGFydCl9IjsKICAgICAgcmV0dXJuIF9TaW1wbGVVcmkoCiAgICAgICAgICBuZXdVcmksCiAgICAgICAgICBiYXNlLl9zY2hlbWVFbmQsCiAgICAgICAgICBiYXNlLl9ob3N0U3RhcnQsCiAgICAgICAgICBiYXNlLl9wb3J0U3RhcnQsCiAgICAgICAgICBiYXNlLl9wYXRoU3RhcnQsCiAgICAgICAgICByZWYuX3F1ZXJ5U3RhcnQgKyBkZWx0YSwKICAgICAgICAgIHJlZi5fZnJhZ21lbnRTdGFydCArIGRlbHRhLAogICAgICAgICAgYmFzZS5fc2NoZW1lQ2FjaGUpOwogICAgfQogICAgLy8gTWVyZ2UgcGF0aHMuCgogICAgLy8gVGhlIFJGQyAzOTg2IGFsZ29yaXRobSBtZXJnZXMgdGhlIGJhc2UgcGF0aCB3aXRob3V0IGl0cyBmaW5hbCBzZWdtZW50CiAgICAvLyAoYW55dGhpbmcgYWZ0ZXIgdGhlIGZpbmFsICIvIiwgb3IgZXZlcnl0aGluZyBpZiB0aGUgYmFzZSBwYXRoIGRvZXNuJ3QKICAgIC8vIGNvbnRhaW4gYW55ICIvIiksIGFuZCB0aGUgcmVmZXJlbmNlIHBhdGguCiAgICAvLyBUaGVuIGl0IHJlbW92ZXMgIi4iIGFuZCAiLi4iIHNlZ21lbnRzIHVzaW5nIHRoZSByZW1vdmUtZG90LXNlZ21lbnQKICAgIC8vIGFsZ29yaXRobS4KICAgIC8vIFRoaXMgY29kZSBjb21iaW5lcyB0aGUgdHdvIHN0ZXBzLiBJdCBpcyBzaW1wbGlmaWVkIGJ5IGtub3dpbmcgdGhhdAogICAgLy8gdGhlIGJhc2UgcGF0aCBjb250YWlucyBubyAiLiIgb3IgIi4uIiBzZWdtZW50cywgYW5kIHRoZSByZWZlcmVuY2UKICAgIC8vIHBhdGggY2FuIG9ubHkgY29udGFpbiBsZWFkaW5nICIuLiIgc2VnbWVudHMuCgogICAgU3RyaW5nIGJhc2VVcmkgPSBiYXNlLl91cmk7CiAgICBTdHJpbmcgcmVmVXJpID0gcmVmLl91cmk7CiAgICBpbnQgYmFzZVN0YXJ0ID0gYmFzZS5fcGF0aFN0YXJ0OwogICAgaW50IGJhc2VFbmQgPSBiYXNlLl9xdWVyeVN0YXJ0OwogICAgd2hpbGUgKGJhc2VVcmkuc3RhcnRzV2l0aCgiLi4vIiwgYmFzZVN0YXJ0KSkgYmFzZVN0YXJ0ICs9IDM7CiAgICBpbnQgcmVmU3RhcnQgPSByZWYuX3BhdGhTdGFydDsKICAgIGludCByZWZFbmQgPSByZWYuX3F1ZXJ5U3RhcnQ7CgogICAgLy8vIENvdW50IG9mIGxlYWRpbmcgIi4uIiBzZWdtZW50cyBpbiByZWZlcmVuY2UgcGF0aC4KICAgIC8vLyBUaGUgY291bnQgaXMgZGVjcmVtZW50ZWQgd2hlbiB0aGUgc2VnbWVudCBpcyBtYXRjaGVkIHdpdGggYQogICAgLy8vIHNlZ21lbnQgb2YgdGhlIGJhc2UgcGF0aCwgYW5kIGJvdGggYXJlIHRoZW4gb21pdHRlZCBmcm9tIHRoZSByZXN1bHQuCiAgICBpbnQgYmFja0NvdW50ID0gMDsKCiAgICAvLy8gQ291bnQgIi4uLyIgc2VnbWVudHMgYW5kIGFkdmFuY2UgYHJlZlN0YXJ0YCB0byBhZnRlciB0aGUgc2VnbWVudHMuCiAgICB3aGlsZSAocmVmU3RhcnQgKyAzIDw9IHJlZkVuZCAmJiByZWZVcmkuc3RhcnRzV2l0aCgiLi4vIiwgcmVmU3RhcnQpKSB7CiAgICAgIHJlZlN0YXJ0ICs9IDM7CiAgICAgIGJhY2tDb3VudCArPSAxOwogICAgfQoKICAgIC8vIEV4dHJhIHNsYXNoIGluc2VydGVkIGJldHdlZW4gYmFzZSBhbmQgcmVmZXJlbmNlIHBhdGggcGFydHMgaWYKICAgIC8vIHRoZSBiYXNlIHBhdGggY29udGFpbnMgYW55IHNsYXNoZXMsIG9yIGVtcHR5IHN0cmluZyBpZiBub25lLgogICAgLy8gKFdlIGNvdWxkIHVzZSBhIHNsYXNoIGZyb20gdGhlIGJhc2UgcGF0aCBpbiBtb3N0IGNhc2VzLCBidXQgbm90IGlmCiAgICAvLyB3ZSByZW1vdmUgdGhlIGVudGlyZSBiYXNlIHBhdGgpLgogICAgU3RyaW5nIGluc2VydCA9ICIiOwoKICAgIC8vLyBSZW1vdmUgc2VnbWVudHMgZnJvbSB0aGUgYmFzZSBwYXRoLgogICAgLy8vIFN0YXJ0IHdpdGggdGhlIHNlZ21lbnQgdHJhaWxpbmcgdGhlIGxhc3Qgc2xhc2gsCiAgICAvLy8gdGhlbiByZW1vdmUgc2VnbWVudHMgZm9yIGVhY2ggbGVhZGluZyAiLi4vIiBzZWdtZW50CiAgICAvLy8gZnJvbSB0aGUgcmVmZXJlbmNlIHBhdGgsIG9yIGFzIG1hbnkgb2YgdGhlbSBhcyBhcmUgYXZhaWxhYmxlLgogICAgd2hpbGUgKGJhc2VFbmQgPiBiYXNlU3RhcnQpIHsKICAgICAgYmFzZUVuZC0tOwogICAgICBpbnQgY2hhciA9IGJhc2VVcmkuY29kZVVuaXRBdChiYXNlRW5kKTsKICAgICAgaWYgKGNoYXIgPT0gX1NMQVNIKSB7CiAgICAgICAgaW5zZXJ0ID0gIi8iOwogICAgICAgIGlmIChiYWNrQ291bnQgPT0gMCkgYnJlYWs7CiAgICAgICAgYmFja0NvdW50LS07CiAgICAgIH0KICAgIH0KCiAgICBpZiAoYmFzZUVuZCA9PSBiYXNlU3RhcnQgJiYgIWJhc2UuaGFzU2NoZW1lICYmICFiYXNlLmhhc0Fic29sdXRlUGF0aCkgewogICAgICAvLyBJZiB0aGUgYmFzZSBpcyAqanVzdCogYSByZWxhdGl2ZSBwYXRoIChubyBzY2hlbWUgb3IgYXV0aG9yaXR5KSwKICAgICAgLy8gdGhlbiBtZXJnaW5nIHdpdGggYW5vdGhlciByZWxhdGl2ZSBwYXRoIGRvZXNuJ3QgZm9sbG93IHRoZQogICAgICAvLyBSRkMtMzk4NiBiZWhhdmlvci4KICAgICAgLy8gRG9uJ3QgbmVlZCB0byBjaGVjayBgYmFzZS5oYXNBdXRob3JpdHlgIHNpbmNlIHRoZSBiYXNlIHBhdGggaXMKICAgICAgLy8gbm9uLWVtcHR5IC0gaWYgdGhlcmUgaXMgYW4gYXV0aG9yaXR5LCBhIG5vbi1lbXB0eSBwYXRoIGlzIGFic29sdXRlLgoKICAgICAgLy8gV2UgcmVhY2hlZCB0aGUgc3RhcnQgb2YgdGhlIGJhc2UgcGF0aCwgYW5kIHdhbnQgdG8gc3RheSByZWxhdGl2ZSwKICAgICAgLy8gc28gZG9uJ3QgaW5zZXJ0IGEgc2xhc2guCiAgICAgIGluc2VydCA9ICIiOwogICAgICAvLyBJZiB3ZSByZWFjaGVkIHRoZSBzdGFydCBvZiB0aGUgYmFzZSBwYXRoIHdpdGggbW9yZSAiLi4vIiBsZWZ0IG92ZXIKICAgICAgLy8gaW4gdGhlIHJlZmVyZW5jZSBwYXRoLCBpbmNsdWRlIHRob3NlIHNlZ21lbnRzIGluIHRoZSByZXN1bHQuCiAgICAgIHJlZlN0YXJ0IC09IGJhY2tDb3VudCAqIDM7CiAgICB9CgogICAgdmFyIGRlbHRhID0gYmFzZUVuZCAtIHJlZlN0YXJ0ICsgaW5zZXJ0Lmxlbmd0aDsKICAgIHZhciBuZXdVcmkgPSAiJHtiYXNlLl91cmkuc3Vic3RyaW5nKDAsIGJhc2VFbmQpfSRpbnNlcnQiCiAgICAgICAgIiR7cmVmLl91cmkuc3Vic3RyaW5nKHJlZlN0YXJ0KX0iOwoKICAgIHJldHVybiBfU2ltcGxlVXJpKAogICAgICAgIG5ld1VyaSwKICAgICAgICBiYXNlLl9zY2hlbWVFbmQsCiAgICAgICAgYmFzZS5faG9zdFN0YXJ0LAogICAgICAgIGJhc2UuX3BvcnRTdGFydCwKICAgICAgICBiYXNlLl9wYXRoU3RhcnQsCiAgICAgICAgcmVmLl9xdWVyeVN0YXJ0ICsgZGVsdGEsCiAgICAgICAgcmVmLl9mcmFnbWVudFN0YXJ0ICsgZGVsdGEsCiAgICAgICAgYmFzZS5fc2NoZW1lQ2FjaGUpOwogIH0KCiAgU3RyaW5nIHRvRmlsZVBhdGgoe2Jvb2wgd2luZG93c30pIHsKICAgIGlmIChfc2NoZW1lRW5kID49IDAgJiYgIV9pc0ZpbGUpIHsKICAgICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGV4dHJhY3QgYSBmaWxlIHBhdGggZnJvbSBhICRzY2hlbWUgVVJJIik7CiAgICB9CiAgICBpZiAoX3F1ZXJ5U3RhcnQgPCBfdXJpLmxlbmd0aCkgewogICAgICBpZiAoX3F1ZXJ5U3RhcnQgPCBfZnJhZ21lbnRTdGFydCkgewogICAgICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAgICJDYW5ub3QgZXh0cmFjdCBhIGZpbGUgcGF0aCBmcm9tIGEgVVJJIHdpdGggYSBxdWVyeSBjb21wb25lbnQiKTsKICAgICAgfQogICAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgIkNhbm5vdCBleHRyYWN0IGEgZmlsZSBwYXRoIGZyb20gYSBVUkkgd2l0aCBhIGZyYWdtZW50IGNvbXBvbmVudCIpOwogICAgfQogICAgd2luZG93cyA/Pz0gX1VyaS5faXNXaW5kb3dzOwogICAgcmV0dXJuIHdpbmRvd3MgPyBfVXJpLl90b1dpbmRvd3NGaWxlUGF0aCh0aGlzKSA6IF90b0ZpbGVQYXRoKCk7CiAgfQoKICBTdHJpbmcgX3RvRmlsZVBhdGgoKSB7CiAgICBpZiAoX2hvc3RTdGFydCA8IF9wb3J0U3RhcnQpIHsKICAgICAgLy8gSGFzIGF1dGhvcml0eSBhbmQgbm9uLWVtcHR5IGhvc3QuCiAgICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAiQ2Fubm90IGV4dHJhY3QgYSBub24tV2luZG93cyBmaWxlIHBhdGggZnJvbSBhIGZpbGUgVVJJICIKICAgICAgICAgICJ3aXRoIGFuIGF1dGhvcml0eSIpOwogICAgfQogICAgcmV0dXJuIHRoaXMucGF0aDsKICB9CgogIFVyaURhdGEgZ2V0IGRhdGEgewogICAgYXNzZXJ0KHNjaGVtZSAhPSAiZGF0YSIpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IF9oYXNoQ29kZUNhY2hlID8/PSBfdXJpLmhhc2hDb2RlOwoKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIG90aGVyIGlzIFVyaSAmJiBfdXJpID09IG90aGVyLnRvU3RyaW5nKCk7CiAgfQoKICBVcmkgX3RvTm9uU2ltcGxlKCkgewogICAgcmV0dXJuIF9VcmkuX2ludGVybmFsKAogICAgICAgIHRoaXMuc2NoZW1lLAogICAgICAgIHRoaXMudXNlckluZm8sCiAgICAgICAgdGhpcy5oYXNBdXRob3JpdHkgPyB0aGlzLmhvc3QgOiBudWxsLAogICAgICAgIHRoaXMuaGFzUG9ydCA/IHRoaXMucG9ydCA6IG51bGwsCiAgICAgICAgdGhpcy5wYXRoLAogICAgICAgIHRoaXMuaGFzUXVlcnkgPyB0aGlzLnF1ZXJ5IDogbnVsbCwKICAgICAgICB0aGlzLmhhc0ZyYWdtZW50ID8gdGhpcy5mcmFnbWVudCA6IG51bGwpOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gX3VyaTsKfQoKLy8vIFNwZWNpYWwgW19VcmldIGNyZWF0ZWQgZnJvbSBhbiBleGlzdGluZyBbVXJpRGF0YV0uCmNsYXNzIF9EYXRhVXJpIGV4dGVuZHMgX1VyaSB7CiAgZmluYWwgVXJpRGF0YSBfZGF0YTsKCiAgX0RhdGFVcmkodGhpcy5fZGF0YSwgU3RyaW5nIHBhdGgsIFN0cmluZyBxdWVyeSkKICAgICAgOiBzdXBlci5faW50ZXJuYWwoImRhdGEiLCBudWxsLCBudWxsLCBudWxsLCBwYXRoLCBxdWVyeSwgbnVsbCk7CgogIFVyaURhdGEgZ2V0IGRhdGEgPT4gX2RhdGE7Cn0KCi8vLyBDaGVja3Mgd2hldGhlciBbdGV4dF0gc3RhcnRzIHdpdGggImRhdGE6IiBhdCBwb3NpdGlvbiBbc3RhcnRdLgovLy8KLy8vIFRoZSB0ZXh0IG11c3QgYmUgbG9uZyBlbm91Z2ggdG8gYWxsb3cgcmVhZGluZyBmaXZlIGNoYXJhY3RlcnMKLy8vIGZyb20gdGhlIFtzdGFydF0gcG9zaXRpb24uCi8vLwovLy8gUmV0dXJucyBhbiBpbnRlZ2VyIHZhbHVlIHdoaWNoIGlzIHplcm8gaWYgdGV4dCBzdGFydHMgd2l0aCBhbGwtbG93ZXJjYXNlCi8vLyAiZGF0YToiIGFuZCAweDIwIGlmIHRoZSB0ZXh0IHN0YXJ0cyB3aXRoICJkYXRhOiIgdGhhdCBpc24ndCBhbGwgbG93ZXItY2FzZS4KLy8vIEFsbCBvdGhlciB2YWx1ZXMgbWVhbnMgdGhlIHRleHQgc3RhcnRzIHdpdGggc29tZSBvdGhlciBjaGFyYWN0ZXIuCmludCBfc3RhcnRzV2l0aERhdGEoU3RyaW5nIHRleHQsIGludCBzdGFydCkgewogIC8vIE11bHRpcGx5IGJ5IDMgdG8gYXZvaWQgYSBub24tY29sb24gY2hhcmFjdGVyIG1ha2luZyBkZWx0YSBiZSAweDIwLgogIGludCBkZWx0YSA9ICh0ZXh0LmNvZGVVbml0QXQoc3RhcnQgKyA0KSBeIF9DT0xPTikgKiAzOwogIGRlbHRhIHw9IHRleHQuY29kZVVuaXRBdChzdGFydCkgXiAweDY0IC8qZCovOwogIGRlbHRhIHw9IHRleHQuY29kZVVuaXRBdChzdGFydCArIDEpIF4gMHg2MSAvKmEqLzsKICBkZWx0YSB8PSB0ZXh0LmNvZGVVbml0QXQoc3RhcnQgKyAyKSBeIDB4NzQgLyp0Ki87CiAgZGVsdGEgfD0gdGV4dC5jb2RlVW5pdEF0KHN0YXJ0ICsgMykgXiAweDYxIC8qYSovOwogIHJldHVybiBkZWx0YTsKfQoKLy8vIEhlbHBlciBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIGxlbmd0aCBvZiBhIHN0cmluZywgb3IgYDBgIGZvciBgbnVsbGAuCmludCBfc3RyaW5nT3JOdWxsTGVuZ3RoKFN0cmluZyBzKSA9PiAocyA9PSBudWxsKSA/IDAgOiBzLmxlbmd0aDsKkrIATk48ARMBJBkbHRgXGRkaICAgHSEgICABLgEEIAMRAzE0A0xTBBUGPAVLJAVEJAYgAQYsBUNONAVBTSoFQkgwBT1GREc2BT0NRUpKSxMFOjsF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HR4oIAgkBh80PS4ZEhsbGxsjJh4GMipNJTUXCDJBLRkSGxsbGyMmHgYUAU1NMUoSSkk0ASAeJSRBIyIBOkRNFwFLSxUWBgFFREooGAEsODxGIhEuHBYjFQgGAUxJRBxITQFLIhNMRiEGATQ9KwEXEBkZGRkhJBwEASYnTwYlKiBNCB5OBiFEBAEZIyseRCAGFgQBFR4RBAE4ASMtNQQBFxsVFy4pEysyBAEdAgE3HhcBMkYBHQIBQwRCHwRNUEYuSDkwNDQ0EAIBSUEBEmRhcnQ6Y29yZS91cmkuZGFydC5vcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL3VyaV9wYXRjaC5kYXJ0iakvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCnR5cGVkZWYgVXJpIF9VcmlCYXNlQ2xvc3VyZSgpOwoKVXJpIF91bnN1cHBvcnRlZFVyaUJhc2UoKSB7CiAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIidVcmkuYmFzZScgaXMgbm90IHN1cHBvcnRlZCIpOwp9CgovLyBfdXJpQmFzZUNsb3N1cmUgY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBlbWJlZGRlciB0byBzdXBwbHkgYSBkaWZmZXJlbnQKLy8gdmFsdWUgZm9yIFVyaS5iYXNlLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCl9VcmlCYXNlQ2xvc3VyZSBfdXJpQmFzZUNsb3N1cmUgPSBfdW5zdXBwb3J0ZWRVcmlCYXNlOwoKQHBhdGNoCmNsYXNzIFVyaSB7CiAgQHBhdGNoCiAgc3RhdGljIFVyaSBnZXQgYmFzZSA9PiBfdXJpQmFzZUNsb3N1cmUoKTsKfQoKLy8vIFZNIGltcGxlbWVudGF0aW9uIG9mIFVyaS4KQHBhdGNoCmNsYXNzIF9VcmkgewogIHN0YXRpYyBmaW5hbCBib29sIF9pc1dpbmRvd3NDYWNoZWQgPSBfaXNXaW5kb3dzUGxhdGZvcm07CgogIHN0YXRpYyBib29sIGdldCBfaXNXaW5kb3dzUGxhdGZvcm0gbmF0aXZlICJVcmlfaXNXaW5kb3dzUGxhdGZvcm0iOwoKICBAcGF0Y2gKICBzdGF0aWMgYm9vbCBnZXQgX2lzV2luZG93cyA9PiBfaXNXaW5kb3dzQ2FjaGVkOwoKICBAcGF0Y2gKICBzdGF0aWMgU3RyaW5nIF91cmlFbmNvZGUoTGlzdDxpbnQ+IGNhbm9uaWNhbFRhYmxlLCBTdHJpbmcgdGV4dCwKICAgICAgRW5jb2RpbmcgZW5jb2RpbmcsIGJvb2wgc3BhY2VUb1BsdXMpIHsKICAgIC8vIEZpcnN0IGNoZWNrIGlmIHRoZSB0ZXh0IHdpbGwgYmUgY2hhbmdlZCBieSBlbmNvZGluZy4KICAgIGludCBpID0gMDsKICAgIGlmIChpZGVudGljYWwoZW5jb2RpbmcsIHV0ZjgpIHx8CiAgICAgICAgaWRlbnRpY2FsKGVuY29kaW5nLCBsYXRpbjEpIHx8CiAgICAgICAgaWRlbnRpY2FsKGVuY29kaW5nLCBhc2NpaSkpIHsKICAgICAgLy8gRW5jb2RpbmcgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBvcmlnaW5hbCBzdHJpbmcuCiAgICAgIC8vIEZpbmQgZmlyc3QgY2hhcmFjdGVyIHRoYXQgbmVlZHMgZW5jb2RpbmcuCiAgICAgIGZvciAoOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBjaGFyID0gdGV4dC5jb2RlVW5pdEF0KGkpOwogICAgICAgIGlmIChjaGFyID49IDEyOCB8fAogICAgICAgICAgICBjYW5vbmljYWxUYWJsZVtjaGFyID4+IDRdICYgKDEgPDwgKGNoYXIgJiAweDBmKSkgPT0gMCkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoaSA9PSB0ZXh0Lmxlbmd0aCkgcmV0dXJuIHRleHQ7CgogICAgLy8gRW5jb2RlIHRoZSBzdHJpbmcgaW50byBieXRlcyB0aGVuIGdlbmVyYXRlIGFuIEFTQ0lJIG9ubHkgc3RyaW5nCiAgICAvLyBieSBwZXJjZW50IGVuY29kaW5nIHNlbGVjdGVkIGJ5dGVzLgogICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGZvciAoaW50IGogPSAwOyBqIDwgaTsgaisrKSB7CiAgICAgIHJlc3VsdC53cml0ZUNoYXJDb2RlKHRleHQuY29kZVVuaXRBdChqKSk7CiAgICB9CgogICAgLy8gVE9ETyhscm4pOiBJcyB0aGVyZSBhIHdheSB0byBvbmx5IGVuY29kZSBmcm9tIGluZGV4IGkgYW5kIGZvcndhcmRzLgogICAgdmFyIGJ5dGVzID0gZW5jb2RpbmcuZW5jb2RlKHRleHQpOwogICAgZm9yICg7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykgewogICAgICBpbnQgYnl0ZSA9IGJ5dGVzW2ldOwogICAgICBpZiAoYnl0ZSA8IDEyOCAmJgogICAgICAgICAgKChjYW5vbmljYWxUYWJsZVtieXRlID4+IDRdICYgKDEgPDwgKGJ5dGUgJiAweDBmKSkpICE9IDApKSB7CiAgICAgICAgcmVzdWx0LndyaXRlQ2hhckNvZGUoYnl0ZSk7CiAgICAgIH0gZWxzZSBpZiAoc3BhY2VUb1BsdXMgJiYgYnl0ZSA9PSBfU1BBQ0UpIHsKICAgICAgICByZXN1bHQud3JpdGVDaGFyQ29kZShfUExVUyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc3QgU3RyaW5nIGhleERpZ2l0cyA9ICcwMTIzNDU2Nzg5QUJDREVGJzsKICAgICAgICByZXN1bHQKICAgICAgICAgIC4ud3JpdGVDaGFyQ29kZShfUEVSQ0VOVCkKICAgICAgICAgIC4ud3JpdGVDaGFyQ29kZShoZXhEaWdpdHMuY29kZVVuaXRBdChieXRlID4+IDQpKQogICAgICAgICAgLi53cml0ZUNoYXJDb2RlKGhleERpZ2l0cy5jb2RlVW5pdEF0KGJ5dGUgJiAweDBmKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKICB9Cn0KUgBOTjwBHgEfARw9AgFMFxo3AQcMCSwCAR4HDTsBRQEJMgEJQi08DyUnJjozJScbRREKCAYnAUcrLiIwBgFLJyQbGEckMiUPNQ8kOz4IBh4EAgEeZGFydDpjb3JlLXBhdGNoL3VyaV9wYXRjaC5kYXJ0NG9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvaWRlbnRpY2FsX3BhdGNoLmRhcnSB0i8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKQHBhdGNoCkBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKYm9vbCBpZGVudGljYWwoT2JqZWN0IGEsIE9iamVjdCBiKSBuYXRpdmUgIklkZW50aWNhbF9jb21wYXJpc29uIjsKCkBwYXRjaApAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKaW50IGlkZW50aXR5SGFzaENvZGUoT2JqZWN0IG9iamVjdCkgPT4gb2JqZWN0Ll9pZGVudGl0eUhhc2hDb2RlOwoPAE5OPAEeAQcmQgEHIkEBJGRhcnQ6Y29yZS1wYXRjaC9pZGVudGljYWxfcGF0Y2guZGFydCtvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9wcmludC5kYXJ0gcQvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovLy8gUHJpbnRzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3QgdG8gdGhlIGNvbnNvbGUuCnZvaWQgcHJpbnQoT2JqZWN0IG9iamVjdCkgewogIFN0cmluZyBsaW5lID0gIiRvYmplY3QiOwogIGlmIChwcmludFRvWm9uZSA9PSBudWxsKSB7CiAgICBwcmludFRvQ29uc29sZShsaW5lKTsKICB9IGVsc2UgewogICAgcHJpbnRUb1pvbmUobGluZSk7CiAgfQp9ChEATk48ARMBQRwbHRoLFwQCARRkYXJ0OmNvcmUvcHJpbnQuZGFydCtvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvX2h0dHAvaHR0cC5kYXJ0wAEhFi8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQuX2h0dHA7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnOwppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbicKICAgIHNob3cKICAgICAgICBIYXNoTWFwLAogICAgICAgIEhhc2hTZXQsCiAgICAgICAgUXVldWUsCiAgICAgICAgTGlzdFF1ZXVlLAogICAgICAgIExpbmtlZExpc3QsCiAgICAgICAgTGlua2VkTGlzdEVudHJ5LAogICAgICAgIFVubW9kaWZpYWJsZU1hcFZpZXc7CmltcG9ydCAnZGFydDpjb252ZXJ0JzsKaW1wb3J0ICdkYXJ0OmRldmVsb3BlcicgaGlkZSBsb2c7CmltcG9ydCAnZGFydDpfaW50ZXJuYWwnIHNob3cgU2luY2UsIEh0dHBTdGF0dXM7CmltcG9ydCAnZGFydDptYXRoJzsKaW1wb3J0ICdkYXJ0OmlvJzsKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwoKcGFydCAnY3J5cHRvLmRhcnQnOwpwYXJ0ICdodHRwX2RhdGUuZGFydCc7CnBhcnQgJ2h0dHBfaGVhZGVycy5kYXJ0JzsKcGFydCAnaHR0cF9pbXBsLmRhcnQnOwpwYXJ0ICdodHRwX3BhcnNlci5kYXJ0JzsKcGFydCAnaHR0cF9zZXNzaW9uLmRhcnQnOwpwYXJ0ICdvdmVycmlkZXMuZGFydCc7CnBhcnQgJ3dlYnNvY2tldC5kYXJ0JzsKcGFydCAnd2Vic29ja2V0X2ltcGwuZGFydCc7CgovKioKICogQSBzZXJ2ZXIgdGhhdCBkZWxpdmVycyBjb250ZW50LCBzdWNoIGFzIHdlYiBwYWdlcywgdXNpbmcgdGhlIEhUVFAgcHJvdG9jb2wuCiAqCiAqIFRoZSBIdHRwU2VydmVyIGlzIGEgW1N0cmVhbV0gdGhhdCBwcm92aWRlcyBbSHR0cFJlcXVlc3RdIG9iamVjdHMuIEVhY2gKICogSHR0cFJlcXVlc3QgaGFzIGFuIGFzc29jaWF0ZWQgW0h0dHBSZXNwb25zZV0gb2JqZWN0LgogKiBUaGUgc2VydmVyIHJlc3BvbmRzIHRvIGEgcmVxdWVzdCBieSB3cml0aW5nIHRvIHRoYXQgSHR0cFJlc3BvbnNlIG9iamVjdC4KICogVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byBiaW5kIGFuIEh0dHBTZXJ2ZXIgdG8gYW4gSVB2NgogKiBbSW50ZXJuZXRBZGRyZXNzXSBvbiBwb3J0IDgwICh0aGUgc3RhbmRhcmQgcG9ydCBmb3IgSFRUUCBzZXJ2ZXJzKQogKiBhbmQgaG93IHRvIGxpc3RlbiBmb3IgcmVxdWVzdHMuCiAqIFBvcnQgODAgaXMgdGhlIGRlZmF1bHQgSFRUUCBwb3J0LiBIb3dldmVyLCBvbiBtb3N0IHN5c3RlbXMgYWNjZXNzaW5nCiAqIHRoaXMgcmVxdWlyZXMgc3VwZXItdXNlciBwcml2aWxlZ2VzLiBGb3IgbG9jYWwgdGVzdGluZyBjb25zaWRlcgogKiB1c2luZyBhIG5vbi1yZXNlcnZlZCBwb3J0ICgxMDI0IGFuZCBhYm92ZSkuCiAqCiAqICAgICBpbXBvcnQgJ2RhcnQ6aW8nOwogKgogKiAgICAgbWFpbigpIHsKICogICAgICAgSHR0cFNlcnZlcgogKiAgICAgICAgICAgLmJpbmQoSW50ZXJuZXRBZGRyZXNzLmFueUlQdjYsIDgwKQogKiAgICAgICAgICAgLnRoZW4oKHNlcnZlcikgewogKiAgICAgICAgICAgICBzZXJ2ZXIubGlzdGVuKChIdHRwUmVxdWVzdCByZXF1ZXN0KSB7CiAqICAgICAgICAgICAgICAgcmVxdWVzdC5yZXNwb25zZS53cml0ZSgnSGVsbG8sIHdvcmxkIScpOwogKiAgICAgICAgICAgICAgIHJlcXVlc3QucmVzcG9uc2UuY2xvc2UoKTsKICogICAgICAgICAgICAgfSk7CiAqICAgICAgICAgICB9KTsKICogICAgIH0KICoKICogSW5jb21wbGV0ZSByZXF1ZXN0cywgaW4gd2hpY2ggYWxsIG9yIHBhcnQgb2YgdGhlIGhlYWRlciBpcyBtaXNzaW5nLCBhcmUKICogaWdub3JlZCwgYW5kIG5vIGV4Y2VwdGlvbnMgb3IgSHR0cFJlcXVlc3Qgb2JqZWN0cyBhcmUgZ2VuZXJhdGVkIGZvciB0aGVtLgogKiBMaWtld2lzZSwgd2hlbiB3cml0aW5nIHRvIGFuIEh0dHBSZXNwb25zZSwgYW55IFtTb2NrZXRdIGV4Y2VwdGlvbnMgYXJlCiAqIGlnbm9yZWQgYW5kIGFueSBmdXR1cmUgd3JpdGVzIGFyZSBpZ25vcmVkLgogKgogKiBUaGUgSHR0cFJlcXVlc3QgZXhwb3NlcyB0aGUgcmVxdWVzdCBoZWFkZXJzIGFuZCBwcm92aWRlcyB0aGUgcmVxdWVzdCBib2R5LAogKiBpZiBpdCBleGlzdHMsIGFzIGEgU3RyZWFtIG9mIGRhdGEuIElmIHRoZSBib2R5IGlzIHVucmVhZCwgaXQgaXMgZHJhaW5lZAogKiB3aGVuIHRoZSBzZXJ2ZXIgd3JpdGVzIHRvIHRoZSBIdHRwUmVzcG9uc2Ugb3IgY2xvc2VzIGl0LgogKgogKiAjIyBCaW5kIHdpdGggYSBzZWN1cmUgSFRUUFMgY29ubmVjdGlvbgogKgogKiBVc2UgW2JpbmRTZWN1cmVdIHRvIGNyZWF0ZSBhbiBIVFRQUyBzZXJ2ZXIuCiAqCiAqIFRoZSBzZXJ2ZXIgcHJlc2VudHMgYSBjZXJ0aWZpY2F0ZSB0byB0aGUgY2xpZW50LiBUaGUgY2VydGlmaWNhdGUKICogY2hhaW4gYW5kIHRoZSBwcml2YXRlIGtleSBhcmUgc2V0IGluIHRoZSBbU2VjdXJpdHlDb250ZXh0XQogKiBvYmplY3QgdGhhdCBpcyBwYXNzZWQgdG8gW2JpbmRTZWN1cmVdLgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmlvJzsKICogICAgIGltcG9ydCAiZGFydDppc29sYXRlIjsKICoKICogICAgIG1haW4oKSB7CiAqICAgICAgIFNlY3VyaXR5Q29udGV4dCBjb250ZXh0ID0gbmV3IFNlY3VyaXR5Q29udGV4dCgpOwogKiAgICAgICB2YXIgY2hhaW4gPQogKiAgICAgICAgICAgUGxhdGZvcm0uc2NyaXB0LnJlc29sdmUoJ2NlcnRpZmljYXRlcy9zZXJ2ZXJfY2hhaW4ucGVtJykKICogICAgICAgICAgIC50b0ZpbGVQYXRoKCk7CiAqICAgICAgIHZhciBrZXkgPQogKiAgICAgICAgICAgUGxhdGZvcm0uc2NyaXB0LnJlc29sdmUoJ2NlcnRpZmljYXRlcy9zZXJ2ZXJfa2V5LnBlbScpCiAqICAgICAgICAgICAudG9GaWxlUGF0aCgpOwogKiAgICAgICBjb250ZXh0LnVzZUNlcnRpZmljYXRlQ2hhaW4oY2hhaW4pOwogKiAgICAgICBjb250ZXh0LnVzZVByaXZhdGVLZXkoa2V5LCBwYXNzd29yZDogJ2RhcnRkYXJ0Jyk7CiAqCiAqICAgICAgIEh0dHBTZXJ2ZXIKICogICAgICAgICAgIC5iaW5kU2VjdXJlKEludGVybmV0QWRkcmVzcy5hbnlJUHY2LAogKiAgICAgICAgICAgICAgICAgICAgICAgNDQzLAogKiAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCkKICogICAgICAgICAgIC50aGVuKChzZXJ2ZXIpIHsKICogICAgICAgICAgICAgc2VydmVyLmxpc3RlbigoSHR0cFJlcXVlc3QgcmVxdWVzdCkgewogKiAgICAgICAgICAgICAgIHJlcXVlc3QucmVzcG9uc2Uud3JpdGUoJ0hlbGxvLCB3b3JsZCEnKTsKICogICAgICAgICAgICAgICByZXF1ZXN0LnJlc3BvbnNlLmNsb3NlKCk7CiAqICAgICAgICAgICAgIH0pOwogKiAgICAgICAgICAgfSk7CiAqICAgICB9CiAqCiAqICBUaGUgY2VydGlmaWNhdGVzIGFuZCBrZXlzIGFyZSBQRU0gZmlsZXMsIHdoaWNoIGNhbiBiZSBjcmVhdGVkIGFuZAogKiAgbWFuYWdlZCB3aXRoIHRoZSB0b29scyBpbiBPcGVuU1NMLgogKgogKiAjIyBDb25uZWN0IHRvIGEgc2VydmVyIHNvY2tldAogKgogKiBZb3UgY2FuIHVzZSB0aGUgW2xpc3Rlbk9uXSBjb25zdHJ1Y3RvciB0byBhdHRhY2ggYW4gSFRUUCBzZXJ2ZXIgdG8KICogYSBbU2VydmVyU29ja2V0XS4KICoKICogICAgIGltcG9ydCAnZGFydDppbyc7CiAqCiAqICAgICBtYWluKCkgewogKiAgICAgICBTZXJ2ZXJTb2NrZXQuYmluZChJbnRlcm5ldEFkZHJlc3MuYW55SVB2NiwgODApCiAqICAgICAgICAgLnRoZW4oKHNlcnZlclNvY2tldCkgewogKiAgICAgICAgICAgSHR0cFNlcnZlciBodHRwc2VydmVyID0gbmV3IEh0dHBTZXJ2ZXIubGlzdGVuT24oc2VydmVyU29ja2V0KTsKICogICAgICAgICAgIHNlcnZlclNvY2tldC5saXN0ZW4oKFNvY2tldCBzb2NrZXQpIHsKICogICAgICAgICAgICAgc29ja2V0LndyaXRlKCdIZWxsbywgY2xpZW50LicpOwogKiAgICAgICAgICAgfSk7CiAqICAgICAgICAgfSk7CiAqICAgICB9CiAqCiAqICMjIE90aGVyIHJlc291cmNlcwogKgogKiAqIEh0dHBTZXJ2ZXIgaXMgYSBTdHJlYW0uIFJlZmVyIHRvIHRoZSBbU3RyZWFtXSBjbGFzcyBmb3IgaW5mb3JtYXRpb24KICogYWJvdXQgdGhlIHN0cmVhbWluZyBxdWFsaXRpZXMgb2YgYW4gSHR0cFNlcnZlci4KICogUGF1c2luZyB0aGUgc3Vic2NyaXB0aW9uIG9mIHRoZSBzdHJlYW0sIHBhdXNlcyBhdCB0aGUgT1MgbGV2ZWwuCiAqCiAqICogVGhlIFtzaGVsZl0oaHR0cHM6Ly9wdWIuZGFydGxhbmcub3JnL3BhY2thZ2VzL3NoZWxmKQogKiBwYWNrYWdlIG9uIHB1Yi5kYXJ0bGFuZy5vcmcgY29udGFpbnMgYSBzZXQgb2YgaGlnaC1sZXZlbCBjbGFzc2VzIHRoYXQsCiAqIHRvZ2V0aGVyIHdpdGggdGhpcyBjbGFzcywgbWFrZXMgaXQgZWFzeSB0byBwcm92aWRlIGNvbnRlbnQgdGhyb3VnaCBIVFRQCiAqIHNlcnZlcnMuCiAqLwphYnN0cmFjdCBjbGFzcyBIdHRwU2VydmVyIGltcGxlbWVudHMgU3RyZWFtPEh0dHBSZXF1ZXN0PiB7CiAgLyoqCiAgICogR2V0cyBhbmQgc2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYFNlcnZlcmAgaGVhZGVyIGZvciBhbGwgcmVzcG9uc2VzCiAgICogZ2VuZXJhdGVkIGJ5IHRoaXMgW0h0dHBTZXJ2ZXJdLgogICAqCiAgICogSWYgW3NlcnZlckhlYWRlcl0gaXMgYG51bGxgLCBubyBgU2VydmVyYCBoZWFkZXIgd2lsbCBiZSBhZGRlZCB0byBlYWNoCiAgICogcmVzcG9uc2UuCiAgICoKICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgbnVsbGAuCiAgICovCiAgU3RyaW5nIHNlcnZlckhlYWRlcjsKCiAgLyoqCiAgICogRGVmYXVsdCBzZXQgb2YgaGVhZGVycyBhZGRlZCB0byBhbGwgcmVzcG9uc2Ugb2JqZWN0cy4KICAgKgogICAqIEJ5IGRlZmF1bHQgdGhlIGZvbGxvd2luZyBoZWFkZXJzIGFyZSBpbiB0aGlzIHNldDoKICAgKgogICAqICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgKICAgKiAgICAgWC1GcmFtZS1PcHRpb25zOiBTQU1FT1JJR0lOCiAgICogICAgIFgtQ29udGVudC1UeXBlLU9wdGlvbnM6IG5vc25pZmYKICAgKiAgICAgWC1YU1MtUHJvdGVjdGlvbjogMTsgbW9kZT1ibG9jawogICAqCiAgICogSWYgdGhlIGBTZXJ2ZXJgIGhlYWRlciBpcyBhZGRlZCBoZXJlIGFuZCB0aGUgYHNlcnZlckhlYWRlcmAgaXMgc2V0IGFzCiAgICogd2VsbCB0aGVuIHRoZSB2YWx1ZSBvZiBgc2VydmVySGVhZGVyYCB0YWtlcyBwcmVjZWRlbmNlLgogICAqLwogIEh0dHBIZWFkZXJzIGdldCBkZWZhdWx0UmVzcG9uc2VIZWFkZXJzOwoKICAvKioKICAgKiBXaGV0aGVyIHRoZSBbSHR0cFNlcnZlcl0gc2hvdWxkIGNvbXByZXNzIHRoZSBjb250ZW50LCBpZiBwb3NzaWJsZS4KICAgKgogICAqIFRoZSBjb250ZW50IGNhbiBvbmx5IGJlIGNvbXByZXNzZWQgd2hlbiB0aGUgcmVzcG9uc2UgaXMgdXNpbmcKICAgKiBjaHVua2VkIFRyYW5zZmVyLUVuY29kaW5nIGFuZCB0aGUgaW5jb21pbmcgcmVxdWVzdCBoYXMgYGd6aXBgCiAgICogYXMgYW4gYWNjZXB0ZWQgZW5jb2RpbmcgaW4gdGhlIEFjY2VwdC1FbmNvZGluZyBoZWFkZXIuCiAgICoKICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgIChjb21wcmVzc2lvbiBkaXNhYmxlZCkuCiAgICogVG8gZW5hYmxlLCBzZXQgYGF1dG9Db21wcmVzc2AgdG8gYHRydWVgLgogICAqLwogIGJvb2wgYXV0b0NvbXByZXNzOwoKICAvKioKICAgKiBHZXRzIG9yIHNldHMgdGhlIHRpbWVvdXQgdXNlZCBmb3IgaWRsZSBrZWVwLWFsaXZlIGNvbm5lY3Rpb25zLiBJZiBubwogICAqIGZ1cnRoZXIgcmVxdWVzdCBpcyBzZWVuIHdpdGhpbiBbaWRsZVRpbWVvdXRdIGFmdGVyIHRoZSBwcmV2aW91cyByZXF1ZXN0IHdhcwogICAqIGNvbXBsZXRlZCwgdGhlIGNvbm5lY3Rpb24gaXMgZHJvcHBlZC4KICAgKgogICAqIERlZmF1bHQgaXMgMTIwIHNlY29uZHMuCiAgICoKICAgKiBOb3RlIHRoYXQgaXQgbWF5IHRha2UgdXAgdG8gYDIgKiBpZGxlVGltZW91dGAgYmVmb3JlIGEgaWRsZSBjb25uZWN0aW9uIGlzCiAgICogYWJvcnRlZC4KICAgKgogICAqIFRvIGRpc2FibGUsIHNldCBbaWRsZVRpbWVvdXRdIHRvIGBudWxsYC4KICAgKi8KICBEdXJhdGlvbiBpZGxlVGltZW91dDsKCiAgLyoqCiAgICogU3RhcnRzIGxpc3RlbmluZyBmb3IgSFRUUCByZXF1ZXN0cyBvbiB0aGUgc3BlY2lmaWVkIFthZGRyZXNzXSBhbmQKICAgKiBbcG9ydF0uCiAgICoKICAgKiBUaGUgW2FkZHJlc3NdIGNhbiBlaXRoZXIgYmUgYSBbU3RyaW5nXSBvciBhbgogICAqIFtJbnRlcm5ldEFkZHJlc3NdLiBJZiBbYWRkcmVzc10gaXMgYSBbU3RyaW5nXSwgW2JpbmRdIHdpbGwKICAgKiBwZXJmb3JtIGEgW0ludGVybmV0QWRkcmVzcy5sb29rdXBdIGFuZCB1c2UgdGhlIGZpcnN0IHZhbHVlIGluIHRoZQogICAqIGxpc3QuIFRvIGxpc3RlbiBvbiB0aGUgbG9vcGJhY2sgYWRhcHRlciwgd2hpY2ggd2lsbCBhbGxvdyBvbmx5CiAgICogaW5jb21pbmcgY29ubmVjdGlvbnMgZnJvbSB0aGUgbG9jYWwgaG9zdCwgdXNlIHRoZSB2YWx1ZQogICAqIFtJbnRlcm5ldEFkZHJlc3MubG9vcGJhY2tJUHY0XSBvcgogICAqIFtJbnRlcm5ldEFkZHJlc3MubG9vcGJhY2tJUHY2XS4gVG8gYWxsb3cgZm9yIGluY29taW5nCiAgICogY29ubmVjdGlvbiBmcm9tIHRoZSBuZXR3b3JrIHVzZSBlaXRoZXIgb25lIG9mIHRoZSB2YWx1ZXMKICAgKiBbSW50ZXJuZXRBZGRyZXNzLmFueUlQdjRdIG9yIFtJbnRlcm5ldEFkZHJlc3MuYW55SVB2Nl0gdG8KICAgKiBiaW5kIHRvIGFsbCBpbnRlcmZhY2VzIG9yIHRoZSBJUCBhZGRyZXNzIG9mIGEgc3BlY2lmaWMgaW50ZXJmYWNlLgogICAqCiAgICogSWYgYW4gSVAgdmVyc2lvbiA2IChJUHY2KSBhZGRyZXNzIGlzIHVzZWQsIGJvdGggSVAgdmVyc2lvbiA2CiAgICogKElQdjYpIGFuZCB2ZXJzaW9uIDQgKElQdjQpIGNvbm5lY3Rpb25zIHdpbGwgYmUgYWNjZXB0ZWQuIFRvCiAgICogcmVzdHJpY3QgdGhpcyB0byB2ZXJzaW9uIDYgKElQdjYpIG9ubHksIHVzZSBbdjZPbmx5XSB0byBzZXQKICAgKiB2ZXJzaW9uIDYgb25seS4gSG93ZXZlciwgaWYgdGhlIGFkZHJlc3MgaXMKICAgKiBbSW50ZXJuZXRBZGRyZXNzLmxvb3BiYWNrSVB2Nl0sIG9ubHkgSVAgdmVyc2lvbiA2IChJUHY2KSBjb25uZWN0aW9ucwogICAqIHdpbGwgYmUgYWNjZXB0ZWQuCiAgICoKICAgKiBJZiBbcG9ydF0gaGFzIHRoZSB2YWx1ZSBbOjA6XSBhbiBlcGhlbWVyYWwgcG9ydCB3aWxsIGJlIGNob3NlbiBieQogICAqIHRoZSBzeXN0ZW0uIFRoZSBhY3R1YWwgcG9ydCB1c2VkIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgdGhlCiAgICogW3BvcnRdIGdldHRlci4KICAgKgogICAqIFRoZSBvcHRpb25hbCBhcmd1bWVudCBbYmFja2xvZ10gY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbGlzdGVuCiAgICogYmFja2xvZyBmb3IgdGhlIHVuZGVybHlpbmcgT1MgbGlzdGVuIHNldHVwLiBJZiBbYmFja2xvZ10gaGFzIHRoZQogICAqIHZhbHVlIG9mIFs6MDpdICh0aGUgZGVmYXVsdCkgYSByZWFzb25hYmxlIHZhbHVlIHdpbGwgYmUgY2hvc2VuIGJ5CiAgICogdGhlIHN5c3RlbS4KICAgKgogICAqIFRoZSBvcHRpb25hbCBhcmd1bWVudCBbc2hhcmVkXSBzcGVjaWZpZXMgd2hldGhlciBhZGRpdGlvbmFsIEh0dHBTZXJ2ZXIKICAgKiBvYmplY3RzIGNhbiBiaW5kIHRvIHRoZSBzYW1lIGNvbWJpbmF0aW9uIG9mIGBhZGRyZXNzYCwgYHBvcnRgIGFuZCBgdjZPbmx5YC4KICAgKiBJZiBgc2hhcmVkYCBpcyBgdHJ1ZWAgYW5kIG1vcmUgYEh0dHBTZXJ2ZXJgcyBmcm9tIHRoaXMgaXNvbGF0ZSBvciBvdGhlcgogICAqIGlzb2xhdGVzIGFyZSBib3VuZCB0byB0aGUgcG9ydCwgdGhlbiB0aGUgaW5jb21pbmcgY29ubmVjdGlvbnMgd2lsbCBiZQogICAqIGRpc3RyaWJ1dGVkIGFtb25nIGFsbCB0aGUgYm91bmQgYEh0dHBTZXJ2ZXJgcy4gQ29ubmVjdGlvbnMgY2FuIGJlCiAgICogZGlzdHJpYnV0ZWQgb3ZlciBtdWx0aXBsZSBpc29sYXRlcyB0aGlzIHdheS4KICAgKi8KICBzdGF0aWMgRnV0dXJlPEh0dHBTZXJ2ZXI+IGJpbmQoYWRkcmVzcywgaW50IHBvcnQsCiAgICAgICAgICB7aW50IGJhY2tsb2c6IDAsIGJvb2wgdjZPbmx5OiBmYWxzZSwgYm9vbCBzaGFyZWQ6IGZhbHNlfSkgPT4KICAgICAgX0h0dHBTZXJ2ZXIuYmluZChhZGRyZXNzLCBwb3J0LCBiYWNrbG9nLCB2Nk9ubHksIHNoYXJlZCk7CgogIC8qKgogICAqIFRoZSBbYWRkcmVzc10gY2FuIGVpdGhlciBiZSBhIFtTdHJpbmddIG9yIGFuCiAgICogW0ludGVybmV0QWRkcmVzc10uIElmIFthZGRyZXNzXSBpcyBhIFtTdHJpbmddLCBbYmluZF0gd2lsbAogICAqIHBlcmZvcm0gYSBbSW50ZXJuZXRBZGRyZXNzLmxvb2t1cF0gYW5kIHVzZSB0aGUgZmlyc3QgdmFsdWUgaW4gdGhlCiAgICogbGlzdC4gVG8gbGlzdGVuIG9uIHRoZSBsb29wYmFjayBhZGFwdGVyLCB3aGljaCB3aWxsIGFsbG93IG9ubHkKICAgKiBpbmNvbWluZyBjb25uZWN0aW9ucyBmcm9tIHRoZSBsb2NhbCBob3N0LCB1c2UgdGhlIHZhbHVlCiAgICogW0ludGVybmV0QWRkcmVzcy5sb29wYmFja0lQdjRdIG9yCiAgICogW0ludGVybmV0QWRkcmVzcy5sb29wYmFja0lQdjZdLiBUbyBhbGxvdyBmb3IgaW5jb21pbmcKICAgKiBjb25uZWN0aW9uIGZyb20gdGhlIG5ldHdvcmsgdXNlIGVpdGhlciBvbmUgb2YgdGhlIHZhbHVlcwogICAqIFtJbnRlcm5ldEFkZHJlc3MuYW55SVB2NF0gb3IgW0ludGVybmV0QWRkcmVzcy5hbnlJUHY2XSB0bwogICAqIGJpbmQgdG8gYWxsIGludGVyZmFjZXMgb3IgdGhlIElQIGFkZHJlc3Mgb2YgYSBzcGVjaWZpYyBpbnRlcmZhY2UuCiAgICoKICAgKiBJZiBhbiBJUCB2ZXJzaW9uIDYgKElQdjYpIGFkZHJlc3MgaXMgdXNlZCwgYm90aCBJUCB2ZXJzaW9uIDYKICAgKiAoSVB2NikgYW5kIHZlcnNpb24gNCAoSVB2NCkgY29ubmVjdGlvbnMgd2lsbCBiZSBhY2NlcHRlZC4gVG8KICAgKiByZXN0cmljdCB0aGlzIHRvIHZlcnNpb24gNiAoSVB2Nikgb25seSwgdXNlIFt2Nk9ubHldIHRvIHNldAogICAqIHZlcnNpb24gNiBvbmx5LgogICAqCiAgICogSWYgW3BvcnRdIGhhcyB0aGUgdmFsdWUgWzowOl0gYW4gZXBoZW1lcmFsIHBvcnQgd2lsbCBiZSBjaG9zZW4gYnkKICAgKiB0aGUgc3lzdGVtLiBUaGUgYWN0dWFsIHBvcnQgdXNlZCBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIHRoZQogICAqIFtwb3J0XSBnZXR0ZXIuCiAgICoKICAgKiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgW2JhY2tsb2ddIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGxpc3RlbgogICAqIGJhY2tsb2cgZm9yIHRoZSB1bmRlcmx5aW5nIE9TIGxpc3RlbiBzZXR1cC4gSWYgW2JhY2tsb2ddIGhhcyB0aGUKICAgKiB2YWx1ZSBvZiBbOjA6XSAodGhlIGRlZmF1bHQpIGEgcmVhc29uYWJsZSB2YWx1ZSB3aWxsIGJlIGNob3NlbiBieQogICAqIHRoZSBzeXN0ZW0uCiAgICoKICAgKiBJZiBbcmVxdWVzdENsaWVudENlcnRpZmljYXRlXSBpcyB0cnVlLCB0aGUgc2VydmVyIHdpbGwKICAgKiByZXF1ZXN0IGNsaWVudHMgdG8gYXV0aGVudGljYXRlIHdpdGggYSBjbGllbnQgY2VydGlmaWNhdGUuCiAgICogVGhlIHNlcnZlciB3aWxsIGFkdmVydGlzZSB0aGUgbmFtZXMgb2YgdHJ1c3RlZCBpc3N1ZXJzIG9mIGNsaWVudAogICAqIGNlcnRpZmljYXRlcywgZ2V0dGluZyB0aGVtIGZyb20gYSBbU2VjdXJpdHlDb250ZXh0XSwgd2hlcmUgdGhleSBoYXZlIGJlZW4KICAgKiBzZXQgdXNpbmcgW1NlY3VyaXR5Q29udGV4dC5zZXRDbGllbnRBdXRob3JpdGllc10uCiAgICoKICAgKiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgW3NoYXJlZF0gc3BlY2lmaWVzIHdoZXRoZXIgYWRkaXRpb25hbCBIdHRwU2VydmVyCiAgICogb2JqZWN0cyBjYW4gYmluZCB0byB0aGUgc2FtZSBjb21iaW5hdGlvbiBvZiBgYWRkcmVzc2AsIGBwb3J0YCBhbmQgYHY2T25seWAuCiAgICogSWYgYHNoYXJlZGAgaXMgYHRydWVgIGFuZCBtb3JlIGBIdHRwU2VydmVyYHMgZnJvbSB0aGlzIGlzb2xhdGUgb3Igb3RoZXIKICAgKiBpc29sYXRlcyBhcmUgYm91bmQgdG8gdGhlIHBvcnQsIHRoZW4gdGhlIGluY29taW5nIGNvbm5lY3Rpb25zIHdpbGwgYmUKICAgKiBkaXN0cmlidXRlZCBhbW9uZyBhbGwgdGhlIGJvdW5kIGBIdHRwU2VydmVyYHMuIENvbm5lY3Rpb25zIGNhbiBiZQogICAqIGRpc3RyaWJ1dGVkIG92ZXIgbXVsdGlwbGUgaXNvbGF0ZXMgdGhpcyB3YXkuCiAgICovCgogIHN0YXRpYyBGdXR1cmU8SHR0cFNlcnZlcj4gYmluZFNlY3VyZSgKICAgICAgICAgIGFkZHJlc3MsIGludCBwb3J0LCBTZWN1cml0eUNvbnRleHQgY29udGV4dCwKICAgICAgICAgIHtpbnQgYmFja2xvZzogMCwKICAgICAgICAgIGJvb2wgdjZPbmx5OiBmYWxzZSwKICAgICAgICAgIGJvb2wgcmVxdWVzdENsaWVudENlcnRpZmljYXRlOiBmYWxzZSwKICAgICAgICAgIGJvb2wgc2hhcmVkOiBmYWxzZX0pID0+CiAgICAgIF9IdHRwU2VydmVyLmJpbmRTZWN1cmUoYWRkcmVzcywgcG9ydCwgY29udGV4dCwgYmFja2xvZywgdjZPbmx5LAogICAgICAgICAgcmVxdWVzdENsaWVudENlcnRpZmljYXRlLCBzaGFyZWQpOwoKICAvKioKICAgKiBBdHRhY2hlcyB0aGUgSFRUUCBzZXJ2ZXIgdG8gYW4gZXhpc3RpbmcgW1NlcnZlclNvY2tldF0uIFdoZW4gdGhlCiAgICogW0h0dHBTZXJ2ZXJdIGlzIGNsb3NlZCwgdGhlIFtIdHRwU2VydmVyXSB3aWxsIGp1c3QgZGV0YWNoIGl0c2VsZiwKICAgKiBjbG9zaW5nIGN1cnJlbnQgY29ubmVjdGlvbnMgYnV0IG5vdCBjbG9zaW5nIFtzZXJ2ZXJTb2NrZXRdLgogICAqLwogIGZhY3RvcnkgSHR0cFNlcnZlci5saXN0ZW5PbihTZXJ2ZXJTb2NrZXQgc2VydmVyU29ja2V0KSA9PgogICAgICBuZXcgX0h0dHBTZXJ2ZXIubGlzdGVuT24oc2VydmVyU29ja2V0KTsKCiAgLyoqCiAgICogUGVybWFuZW50bHkgc3RvcHMgdGhpcyBbSHR0cFNlcnZlcl0gZnJvbSBsaXN0ZW5pbmcgZm9yIG5ldwogICAqIGNvbm5lY3Rpb25zLiAgVGhpcyBjbG9zZXMgdGhlIFtTdHJlYW1dIG9mIFtIdHRwUmVxdWVzdF1zIHdpdGggYQogICAqIGRvbmUgZXZlbnQuIFRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzIHdoZW4gdGhlIHNlcnZlciBpcwogICAqIHN0b3BwZWQuIEZvciBhIHNlcnZlciBzdGFydGVkIHVzaW5nIFtiaW5kXSBvciBbYmluZFNlY3VyZV0gdGhpcwogICAqIG1lYW5zIHRoYXQgdGhlIHBvcnQgbGlzdGVuZWQgb24gbm8gbG9uZ2VyIGluIHVzZS4KICAgKgogICAqIElmIFtmb3JjZV0gaXMgYHRydWVgLCBhY3RpdmUgY29ubmVjdGlvbnMgd2lsbCBiZSBjbG9zZWQgaW1tZWRpYXRlbHkuCiAgICovCiAgRnV0dXJlIGNsb3NlKHtib29sIGZvcmNlOiBmYWxzZX0pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBwb3J0IHRoYXQgdGhlIHNlcnZlciBpcyBsaXN0ZW5pbmcgb24uIFRoaXMgY2FuIGJlCiAgICogdXNlZCB0byBnZXQgdGhlIGFjdHVhbCBwb3J0IHVzZWQgd2hlbiBhIHZhbHVlIG9mIDAgZm9yIFs6cG9ydDpdIGlzCiAgICogc3BlY2lmaWVkIGluIHRoZSBbYmluZF0gb3IgW2JpbmRTZWN1cmVdIGNhbGwuCiAgICovCiAgaW50IGdldCBwb3J0OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBhZGRyZXNzIHRoYXQgdGhlIHNlcnZlciBpcyBsaXN0ZW5pbmcgb24uIFRoaXMgY2FuIGJlCiAgICogdXNlZCB0byBnZXQgdGhlIGFjdHVhbCBhZGRyZXNzIHVzZWQsIHdoZW4gdGhlIGFkZHJlc3MgaXMgZmV0Y2hlZCBieQogICAqIGEgbG9va3VwIGZyb20gYSBob3N0bmFtZS4KICAgKi8KICBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFkZHJlc3M7CgogIC8qKgogICAqIFNldHMgdGhlIHRpbWVvdXQsIGluIHNlY29uZHMsIGZvciBzZXNzaW9ucyBvZiB0aGlzIFtIdHRwU2VydmVyXS4KICAgKiBUaGUgZGVmYXVsdCB0aW1lb3V0IGlzIDIwIG1pbnV0ZXMuCiAgICovCiAgc2V0IHNlc3Npb25UaW1lb3V0KGludCB0aW1lb3V0KTsKCiAgLyoqCiAgICogUmV0dXJucyBhbiBbSHR0cENvbm5lY3Rpb25zSW5mb10gb2JqZWN0IHN1bW1hcml6aW5nIHRoZSBudW1iZXIgb2YKICAgKiBjdXJyZW50IGNvbm5lY3Rpb25zIGhhbmRsZWQgYnkgdGhlIHNlcnZlci4KICAgKi8KICBIdHRwQ29ubmVjdGlvbnNJbmZvIGNvbm5lY3Rpb25zSW5mbygpOwp9CgovKioKICogU3VtbWFyeSBzdGF0aXN0aWNzIGFib3V0IGFuIFtIdHRwU2VydmVyXXMgY3VycmVudCBzb2NrZXQgY29ubmVjdGlvbnMuCiAqLwpjbGFzcyBIdHRwQ29ubmVjdGlvbnNJbmZvIHsKICAvKioKICAgKiBUb3RhbCBudW1iZXIgb2Ygc29ja2V0IGNvbm5lY3Rpb25zLgogICAqLwogIGludCB0b3RhbCA9IDA7CgogIC8qKgogICAqIE51bWJlciBvZiBhY3RpdmUgY29ubmVjdGlvbnMgd2hlcmUgYWN0dWFsIHJlcXVlc3QvcmVzcG9uc2UKICAgKiBwcm9jZXNzaW5nIGlzIGFjdGl2ZS4KICAgKi8KICBpbnQgYWN0aXZlID0gMDsKCiAgLyoqCiAgICogTnVtYmVyIG9mIGlkbGUgY29ubmVjdGlvbnMgaGVsZCBieSBjbGllbnRzIGFzIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMuCiAgICovCiAgaW50IGlkbGUgPSAwOwoKICAvKioKICAgKiBOdW1iZXIgb2YgY29ubmVjdGlvbnMgd2hpY2ggYXJlIHByZXBhcmluZyB0byBjbG9zZS4gTm90ZTogVGhlc2UKICAgKiBjb25uZWN0aW9ucyBhcmUgYWxzbyBwYXJ0IG9mIHRoZSBbOmFjdGl2ZTpdIGNvdW50IGFzIHRoZXkgbWlnaHQKICAgKiBzdGlsbCBiZSBzZW5kaW5nIGRhdGEgdG8gdGhlIGNsaWVudCBiZWZvcmUgZmluYWxseSBjbG9zaW5nLgogICAqLwogIGludCBjbG9zaW5nID0gMDsKfQoKLyoqCiAqIEhlYWRlcnMgZm9yIEhUVFAgcmVxdWVzdHMgYW5kIHJlc3BvbnNlcy4KICoKICogSW4gc29tZSBzaXR1YXRpb25zLCBoZWFkZXJzIGFyZSBpbW11dGFibGU6CiAqCiAqICogSHR0cFJlcXVlc3QgYW5kIEh0dHBDbGllbnRSZXNwb25zZSBhbHdheXMgaGF2ZSBpbW11dGFibGUgaGVhZGVycy4KICoKICogKiBIdHRwUmVzcG9uc2UgYW5kIEh0dHBDbGllbnRSZXF1ZXN0IGhhdmUgaW1tdXRhYmxlIGhlYWRlcnMKICogICBmcm9tIHRoZSBtb21lbnQgdGhlIGJvZHkgaXMgd3JpdHRlbiB0by4KICoKICogSW4gdGhlc2Ugc2l0dWF0aW9ucywgdGhlIG11dGF0aW5nIG1ldGhvZHMgdGhyb3cgZXhjZXB0aW9ucy4KICoKICogRm9yIGFsbCBvcGVyYXRpb25zIG9uIEhUVFAgaGVhZGVycyB0aGUgaGVhZGVyIG5hbWUgaXMKICogY2FzZS1pbnNlbnNpdGl2ZS4KICoKICogVG8gc2V0IHRoZSB2YWx1ZSBvZiBhIGhlYWRlciB1c2UgdGhlIGBzZXQoKWAgbWV0aG9kOgogKgogKiAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChIdHRwSGVhZGVycy5jYWNoZUNvbnRyb2xIZWFkZXIsCiAqICAgICAgICAgICAgICAgICAgICAgICAgICdtYXgtYWdlPTM2MDAsIG11c3QtcmV2YWxpZGF0ZScpOwogKgogKiBUbyByZXRyaWV2ZSB0aGUgdmFsdWUgb2YgYSBoZWFkZXIgdXNlIHRoZSBgdmFsdWUoKWAgbWV0aG9kOgogKgogKiAgICAgcHJpbnQocmVxdWVzdC5oZWFkZXJzLnZhbHVlKEh0dHBIZWFkZXJzLnVzZXJBZ2VudEhlYWRlcikpOwogKgogKiBBbiBIdHRwSGVhZGVycyBvYmplY3QgaG9sZHMgYSBsaXN0IG9mIHZhbHVlcyBmb3IgZWFjaCBuYW1lCiAqIGFzIHRoZSBzdGFuZGFyZCBhbGxvd3MuIEluIG1vc3QgY2FzZXMgYSBuYW1lIGhvbGRzIG9ubHkgYSBzaW5nbGUgdmFsdWUsCiAqIFRoZSBtb3N0IGNvbW1vbiBtb2RlIG9mIG9wZXJhdGlvbiBpcyB0byB1c2UgYHNldCgpYCBmb3Igc2V0dGluZyBhIHZhbHVlLAogKiBhbmQgYHZhbHVlKClgIGZvciByZXRyaWV2aW5nIGEgdmFsdWUuCiAqLwphYnN0cmFjdCBjbGFzcyBIdHRwSGVhZGVycyB7CiAgc3RhdGljIGNvbnN0IGFjY2VwdEhlYWRlciA9ICJhY2NlcHQiOwogIHN0YXRpYyBjb25zdCBhY2NlcHRDaGFyc2V0SGVhZGVyID0gImFjY2VwdC1jaGFyc2V0IjsKICBzdGF0aWMgY29uc3QgYWNjZXB0RW5jb2RpbmdIZWFkZXIgPSAiYWNjZXB0LWVuY29kaW5nIjsKICBzdGF0aWMgY29uc3QgYWNjZXB0TGFuZ3VhZ2VIZWFkZXIgPSAiYWNjZXB0LWxhbmd1YWdlIjsKICBzdGF0aWMgY29uc3QgYWNjZXB0UmFuZ2VzSGVhZGVyID0gImFjY2VwdC1yYW5nZXMiOwogIHN0YXRpYyBjb25zdCBhZ2VIZWFkZXIgPSAiYWdlIjsKICBzdGF0aWMgY29uc3QgYWxsb3dIZWFkZXIgPSAiYWxsb3ciOwogIHN0YXRpYyBjb25zdCBhdXRob3JpemF0aW9uSGVhZGVyID0gImF1dGhvcml6YXRpb24iOwogIHN0YXRpYyBjb25zdCBjYWNoZUNvbnRyb2xIZWFkZXIgPSAiY2FjaGUtY29udHJvbCI7CiAgc3RhdGljIGNvbnN0IGNvbm5lY3Rpb25IZWFkZXIgPSAiY29ubmVjdGlvbiI7CiAgc3RhdGljIGNvbnN0IGNvbnRlbnRFbmNvZGluZ0hlYWRlciA9ICJjb250ZW50LWVuY29kaW5nIjsKICBzdGF0aWMgY29uc3QgY29udGVudExhbmd1YWdlSGVhZGVyID0gImNvbnRlbnQtbGFuZ3VhZ2UiOwogIHN0YXRpYyBjb25zdCBjb250ZW50TGVuZ3RoSGVhZGVyID0gImNvbnRlbnQtbGVuZ3RoIjsKICBzdGF0aWMgY29uc3QgY29udGVudExvY2F0aW9uSGVhZGVyID0gImNvbnRlbnQtbG9jYXRpb24iOwogIHN0YXRpYyBjb25zdCBjb250ZW50TUQ1SGVhZGVyID0gImNvbnRlbnQtbWQ1IjsKICBzdGF0aWMgY29uc3QgY29udGVudFJhbmdlSGVhZGVyID0gImNvbnRlbnQtcmFuZ2UiOwogIHN0YXRpYyBjb25zdCBjb250ZW50VHlwZUhlYWRlciA9ICJjb250ZW50LXR5cGUiOwogIHN0YXRpYyBjb25zdCBkYXRlSGVhZGVyID0gImRhdGUiOwogIHN0YXRpYyBjb25zdCBldGFnSGVhZGVyID0gImV0YWciOwogIHN0YXRpYyBjb25zdCBleHBlY3RIZWFkZXIgPSAiZXhwZWN0IjsKICBzdGF0aWMgY29uc3QgZXhwaXJlc0hlYWRlciA9ICJleHBpcmVzIjsKICBzdGF0aWMgY29uc3QgZnJvbUhlYWRlciA9ICJmcm9tIjsKICBzdGF0aWMgY29uc3QgaG9zdEhlYWRlciA9ICJob3N0IjsKICBzdGF0aWMgY29uc3QgaWZNYXRjaEhlYWRlciA9ICJpZi1tYXRjaCI7CiAgc3RhdGljIGNvbnN0IGlmTW9kaWZpZWRTaW5jZUhlYWRlciA9ICJpZi1tb2RpZmllZC1zaW5jZSI7CiAgc3RhdGljIGNvbnN0IGlmTm9uZU1hdGNoSGVhZGVyID0gImlmLW5vbmUtbWF0Y2giOwogIHN0YXRpYyBjb25zdCBpZlJhbmdlSGVhZGVyID0gImlmLXJhbmdlIjsKICBzdGF0aWMgY29uc3QgaWZVbm1vZGlmaWVkU2luY2VIZWFkZXIgPSAiaWYtdW5tb2RpZmllZC1zaW5jZSI7CiAgc3RhdGljIGNvbnN0IGxhc3RNb2RpZmllZEhlYWRlciA9ICJsYXN0LW1vZGlmaWVkIjsKICBzdGF0aWMgY29uc3QgbG9jYXRpb25IZWFkZXIgPSAibG9jYXRpb24iOwogIHN0YXRpYyBjb25zdCBtYXhGb3J3YXJkc0hlYWRlciA9ICJtYXgtZm9yd2FyZHMiOwogIHN0YXRpYyBjb25zdCBwcmFnbWFIZWFkZXIgPSAicHJhZ21hIjsKICBzdGF0aWMgY29uc3QgcHJveHlBdXRoZW50aWNhdGVIZWFkZXIgPSAicHJveHktYXV0aGVudGljYXRlIjsKICBzdGF0aWMgY29uc3QgcHJveHlBdXRob3JpemF0aW9uSGVhZGVyID0gInByb3h5LWF1dGhvcml6YXRpb24iOwogIHN0YXRpYyBjb25zdCByYW5nZUhlYWRlciA9ICJyYW5nZSI7CiAgc3RhdGljIGNvbnN0IHJlZmVyZXJIZWFkZXIgPSAicmVmZXJlciI7CiAgc3RhdGljIGNvbnN0IHJldHJ5QWZ0ZXJIZWFkZXIgPSAicmV0cnktYWZ0ZXIiOwogIHN0YXRpYyBjb25zdCBzZXJ2ZXJIZWFkZXIgPSAic2VydmVyIjsKICBzdGF0aWMgY29uc3QgdGVIZWFkZXIgPSAidGUiOwogIHN0YXRpYyBjb25zdCB0cmFpbGVySGVhZGVyID0gInRyYWlsZXIiOwogIHN0YXRpYyBjb25zdCB0cmFuc2ZlckVuY29kaW5nSGVhZGVyID0gInRyYW5zZmVyLWVuY29kaW5nIjsKICBzdGF0aWMgY29uc3QgdXBncmFkZUhlYWRlciA9ICJ1cGdyYWRlIjsKICBzdGF0aWMgY29uc3QgdXNlckFnZW50SGVhZGVyID0gInVzZXItYWdlbnQiOwogIHN0YXRpYyBjb25zdCB2YXJ5SGVhZGVyID0gInZhcnkiOwogIHN0YXRpYyBjb25zdCB2aWFIZWFkZXIgPSAidmlhIjsKICBzdGF0aWMgY29uc3Qgd2FybmluZ0hlYWRlciA9ICJ3YXJuaW5nIjsKICBzdGF0aWMgY29uc3Qgd3d3QXV0aGVudGljYXRlSGVhZGVyID0gInd3dy1hdXRoZW50aWNhdGUiOwoKICBARGVwcmVjYXRlZCgiVXNlIGFjY2VwdEhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQUNDRVBUID0gYWNjZXB0SGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgYWNjZXB0Q2hhcnNldEhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQUNDRVBUX0NIQVJTRVQgPSBhY2NlcHRDaGFyc2V0SGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgYWNjZXB0RW5jb2RpbmdIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEFDQ0VQVF9FTkNPRElORyA9IGFjY2VwdEVuY29kaW5nSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgYWNjZXB0TGFuZ3VhZ2VIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEFDQ0VQVF9MQU5HVUFHRSA9IGFjY2VwdExhbmd1YWdlSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgYWNjZXB0UmFuZ2VzSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBBQ0NFUFRfUkFOR0VTID0gYWNjZXB0UmFuZ2VzSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgYWdlSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBBR0UgPSBhZ2VIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBhbGxvd0hlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQUxMT1cgPSBhbGxvd0hlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGF1dGhvcml6YXRpb25IZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEFVVEhPUklaQVRJT04gPSBhdXRob3JpemF0aW9uSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgY2FjaGVDb250cm9sSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBDQUNIRV9DT05UUk9MID0gY2FjaGVDb250cm9sSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgY29ubmVjdGlvbkhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQ09OTkVDVElPTiA9IGNvbm5lY3Rpb25IZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBjb250ZW50RW5jb2RpbmdIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IENPTlRFTlRfRU5DT0RJTkcgPSBjb250ZW50RW5jb2RpbmdIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBjb250ZW50TGFuZ3VhZ2VIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IENPTlRFTlRfTEFOR1VBR0UgPSBjb250ZW50TGFuZ3VhZ2VIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBjb250ZW50TGVuZ3RoSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBDT05URU5UX0xFTkdUSCA9IGNvbnRlbnRMZW5ndGhIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBjb250ZW50TG9jYXRpb25IZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IENPTlRFTlRfTE9DQVRJT04gPSBjb250ZW50TG9jYXRpb25IZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBjb250ZW50TUQ1SGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBDT05URU5UX01ENSA9IGNvbnRlbnRNRDVIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBjb250ZW50UmFuZ2VIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IENPTlRFTlRfUkFOR0UgPSBjb250ZW50UmFuZ2VIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBjb250ZW50VHlwZUhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQ09OVEVOVF9UWVBFID0gY29udGVudFR5cGVIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBkYXRlSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBEQVRFID0gZGF0ZUhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGV0YWdIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEVUQUcgPSBldGFnSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgZXhwZWN0SGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBFWFBFQ1QgPSBleHBlY3RIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBleHBpcmVzSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBFWFBJUkVTID0gZXhwaXJlc0hlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGZyb21IZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEZST00gPSBmcm9tSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgaG9zdEhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgSE9TVCA9IGhvc3RIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBpZk1hdGNoSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBJRl9NQVRDSCA9IGlmTWF0Y2hIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBpZk1vZGlmaWVkU2luY2VIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IElGX01PRElGSUVEX1NJTkNFID0gaWZNb2RpZmllZFNpbmNlSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgaWZOb25lTWF0Y2hIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IElGX05PTkVfTUFUQ0ggPSBpZk5vbmVNYXRjaEhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGlmUmFuZ2VIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IElGX1JBTkdFID0gaWZSYW5nZUhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGlmVW5tb2RpZmllZFNpbmNlSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBJRl9VTk1PRElGSUVEX1NJTkNFID0gaWZVbm1vZGlmaWVkU2luY2VIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBsYXN0TW9kaWZpZWRIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IExBU1RfTU9ESUZJRUQgPSBsYXN0TW9kaWZpZWRIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBsb2NhdGlvbkhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgTE9DQVRJT04gPSBsb2NhdGlvbkhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIG1heEZvcndhcmRzSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBNQVhfRk9SV0FSRFMgPSBtYXhGb3J3YXJkc0hlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIHByYWdtYUhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUFJBR01BID0gcHJhZ21hSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgcHJveHlBdXRoZW50aWNhdGVIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFBST1hZX0FVVEhFTlRJQ0FURSA9IHByb3h5QXV0aGVudGljYXRlSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgcHJveHlBdXRob3JpemF0aW9uSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQUk9YWV9BVVRIT1JJWkFUSU9OID0gcHJveHlBdXRob3JpemF0aW9uSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgcmFuZ2VIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFJBTkdFID0gcmFuZ2VIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSByZWZlcmVySGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBSRUZFUkVSID0gcmVmZXJlckhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIHJldHJ5QWZ0ZXJIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFJFVFJZX0FGVEVSID0gcmV0cnlBZnRlckhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIHNlcnZlckhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgU0VSVkVSID0gc2VydmVySGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgdGVIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFRFID0gdGVIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSB0cmFpbGVySGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBUUkFJTEVSID0gdHJhaWxlckhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIHRyYW5zZmVyRW5jb2RpbmdIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFRSQU5TRkVSX0VOQ09ESU5HID0gdHJhbnNmZXJFbmNvZGluZ0hlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIHVwZ3JhZGVIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFVQR1JBREUgPSB1cGdyYWRlSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgdXNlckFnZW50SGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBVU0VSX0FHRU5UID0gdXNlckFnZW50SGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgdmFyeUhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgVkFSWSA9IHZhcnlIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSB2aWFIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFZJQSA9IHZpYUhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIHdhcm5pbmdIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFdBUk5JTkcgPSB3YXJuaW5nSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2Ugd3d3QXV0aGVudGljYXRlSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBXV1dfQVVUSEVOVElDQVRFID0gd3d3QXV0aGVudGljYXRlSGVhZGVyOwoKICAvLyBDb29raWUgaGVhZGVycyBmcm9tIFJGQyA2MjY1LgogIHN0YXRpYyBjb25zdCBjb29raWVIZWFkZXIgPSAiY29va2llIjsKICBzdGF0aWMgY29uc3Qgc2V0Q29va2llSGVhZGVyID0gInNldC1jb29raWUiOwoKICBARGVwcmVjYXRlZCgiVXNlIGNvb2tpZUhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQ09PS0lFID0gY29va2llSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2Ugc2V0Q29va2llSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBTRVRfQ09PS0lFID0gc2V0Q29va2llSGVhZGVyOwoKICBzdGF0aWMgY29uc3QgZ2VuZXJhbEhlYWRlcnMgPSBjb25zdCBbCiAgICBjYWNoZUNvbnRyb2xIZWFkZXIsCiAgICBjb25uZWN0aW9uSGVhZGVyLAogICAgZGF0ZUhlYWRlciwKICAgIHByYWdtYUhlYWRlciwKICAgIHRyYWlsZXJIZWFkZXIsCiAgICB0cmFuc2ZlckVuY29kaW5nSGVhZGVyLAogICAgdXBncmFkZUhlYWRlciwKICAgIHZpYUhlYWRlciwKICAgIHdhcm5pbmdIZWFkZXIKICBdOwoKICBARGVwcmVjYXRlZCgiVXNlIGdlbmVyYWxIZWFkZXJzIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBHRU5FUkFMX0hFQURFUlMgPSBnZW5lcmFsSGVhZGVyczsKCiAgc3RhdGljIGNvbnN0IGVudGl0eUhlYWRlcnMgPSBjb25zdCBbCiAgICBhbGxvd0hlYWRlciwKICAgIGNvbnRlbnRFbmNvZGluZ0hlYWRlciwKICAgIGNvbnRlbnRMYW5ndWFnZUhlYWRlciwKICAgIGNvbnRlbnRMZW5ndGhIZWFkZXIsCiAgICBjb250ZW50TG9jYXRpb25IZWFkZXIsCiAgICBjb250ZW50TUQ1SGVhZGVyLAogICAgY29udGVudFJhbmdlSGVhZGVyLAogICAgY29udGVudFR5cGVIZWFkZXIsCiAgICBleHBpcmVzSGVhZGVyLAogICAgbGFzdE1vZGlmaWVkSGVhZGVyCiAgXTsKCiAgQERlcHJlY2F0ZWQoIlVzZSBlbnRpdHlIZWFkZXJzIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBFTlRJVFlfSEVBREVSUyA9IGVudGl0eUhlYWRlcnM7CgogIHN0YXRpYyBjb25zdCByZXNwb25zZUhlYWRlcnMgPSBjb25zdCBbCiAgICBhY2NlcHRSYW5nZXNIZWFkZXIsCiAgICBhZ2VIZWFkZXIsCiAgICBldGFnSGVhZGVyLAogICAgbG9jYXRpb25IZWFkZXIsCiAgICBwcm94eUF1dGhlbnRpY2F0ZUhlYWRlciwKICAgIHJldHJ5QWZ0ZXJIZWFkZXIsCiAgICBzZXJ2ZXJIZWFkZXIsCiAgICB2YXJ5SGVhZGVyLAogICAgd3d3QXV0aGVudGljYXRlSGVhZGVyCiAgXTsKCiAgQERlcHJlY2F0ZWQoIlVzZSByZXNwb25zZUhlYWRlcnMgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFJFU1BPTlNFX0hFQURFUlMgPSByZXNwb25zZUhlYWRlcnM7CgogIHN0YXRpYyBjb25zdCByZXF1ZXN0SGVhZGVycyA9IGNvbnN0IFsKICAgIGFjY2VwdEhlYWRlciwKICAgIGFjY2VwdENoYXJzZXRIZWFkZXIsCiAgICBhY2NlcHRFbmNvZGluZ0hlYWRlciwKICAgIGFjY2VwdExhbmd1YWdlSGVhZGVyLAogICAgYXV0aG9yaXphdGlvbkhlYWRlciwKICAgIGV4cGVjdEhlYWRlciwKICAgIGZyb21IZWFkZXIsCiAgICBob3N0SGVhZGVyLAogICAgaWZNYXRjaEhlYWRlciwKICAgIGlmTW9kaWZpZWRTaW5jZUhlYWRlciwKICAgIGlmTm9uZU1hdGNoSGVhZGVyLAogICAgaWZSYW5nZUhlYWRlciwKICAgIGlmVW5tb2RpZmllZFNpbmNlSGVhZGVyLAogICAgbWF4Rm9yd2FyZHNIZWFkZXIsCiAgICBwcm94eUF1dGhvcml6YXRpb25IZWFkZXIsCiAgICByYW5nZUhlYWRlciwKICAgIHJlZmVyZXJIZWFkZXIsCiAgICB0ZUhlYWRlciwKICAgIHVzZXJBZ2VudEhlYWRlcgogIF07CgogIEBEZXByZWNhdGVkKCJVc2UgcmVxdWVzdEhlYWRlcnMgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFJFUVVFU1RfSEVBREVSUyA9IHJlcXVlc3RIZWFkZXJzOwoKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBkYXRlLiBUaGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSB3aWxsCiAgICogcmVmbGVjdCB0aGUgJ2RhdGUnIGhlYWRlci4KICAgKi8KICBEYXRlVGltZSBkYXRlOwoKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBleHBpcnkgZGF0ZS4gVGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkgd2lsbAogICAqIHJlZmxlY3QgdGhlICdleHBpcmVzJyBoZWFkZXIuCiAgICovCiAgRGF0ZVRpbWUgZXhwaXJlczsKCiAgLyoqCiAgICogR2V0cyBhbmQgc2V0cyB0aGUgImlmLW1vZGlmaWVkLXNpbmNlIiBkYXRlLiBUaGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSB3aWxsCiAgICogcmVmbGVjdCB0aGUgImlmLW1vZGlmaWVkLXNpbmNlIiBoZWFkZXIuCiAgICovCiAgRGF0ZVRpbWUgaWZNb2RpZmllZFNpbmNlOwoKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBob3N0IHBhcnQgb2YgdGhlICdob3N0JyBoZWFkZXIgZm9yIHRoZQogICAqIGNvbm5lY3Rpb24uCiAgICovCiAgU3RyaW5nIGhvc3Q7CgogIC8qKgogICAqIEdldHMgYW5kIHNldHMgdGhlIHBvcnQgcGFydCBvZiB0aGUgJ2hvc3QnIGhlYWRlciBmb3IgdGhlCiAgICogY29ubmVjdGlvbi4KICAgKi8KICBpbnQgcG9ydDsKCiAgLyoqCiAgICogR2V0cyBhbmQgc2V0cyB0aGUgY29udGVudCB0eXBlLiBOb3RlIHRoYXQgdGhlIGNvbnRlbnQgdHlwZSBpbiB0aGUKICAgKiBoZWFkZXIgd2lsbCBvbmx5IGJlIHVwZGF0ZWQgaWYgdGhpcyBmaWVsZCBpcyBzZXQKICAgKiBkaXJlY3RseS4gTXV0YXRpbmcgdGhlIHJldHVybmVkIGN1cnJlbnQgdmFsdWUgd2lsbCBoYXZlIG5vCiAgICogZWZmZWN0LgogICAqLwogIENvbnRlbnRUeXBlIGNvbnRlbnRUeXBlOwoKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBjb250ZW50IGxlbmd0aCBoZWFkZXIgdmFsdWUuCiAgICovCiAgaW50IGNvbnRlbnRMZW5ndGg7CgogIC8qKgogICAqIEdldHMgYW5kIHNldHMgdGhlIHBlcnNpc3RlbnQgY29ubmVjdGlvbiBoZWFkZXIgdmFsdWUuCiAgICovCiAgYm9vbCBwZXJzaXN0ZW50Q29ubmVjdGlvbjsKCiAgLyoqCiAgICogR2V0cyBhbmQgc2V0cyB0aGUgY2h1bmtlZCB0cmFuc2ZlciBlbmNvZGluZyBoZWFkZXIgdmFsdWUuCiAgICovCiAgYm9vbCBjaHVua2VkVHJhbnNmZXJFbmNvZGluZzsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbGlzdCBvZiB2YWx1ZXMgZm9yIHRoZSBoZWFkZXIgbmFtZWQgW25hbWVdLiBJZiB0aGVyZQogICAqIGlzIG5vIGhlYWRlciB3aXRoIHRoZSBwcm92aWRlZCBuYW1lLCBbOm51bGw6XSB3aWxsIGJlIHJldHVybmVkLgogICAqLwogIExpc3Q8U3RyaW5nPiBvcGVyYXRvciBbXShTdHJpbmcgbmFtZSk7CgogIC8qKgogICAqIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgdGhlIHZhbHVlIGZvciBhIHNpbmdsZSB2YWx1ZWQgaGVhZGVyLiBJZgogICAqIHRoZXJlIGlzIG5vIGhlYWRlciB3aXRoIHRoZSBwcm92aWRlZCBuYW1lLCBbOm51bGw6XSB3aWxsIGJlCiAgICogcmV0dXJuZWQuIElmIHRoZSBoZWFkZXIgaGFzIG1vcmUgdGhhbiBvbmUgdmFsdWUgYW4gZXhjZXB0aW9uIGlzCiAgICogdGhyb3duLgogICAqLwogIFN0cmluZyB2YWx1ZShTdHJpbmcgbmFtZSk7CgogIC8qKgogICAqIEFkZHMgYSBoZWFkZXIgdmFsdWUuIFRoZSBoZWFkZXIgbmFtZWQgW25hbWVdIHdpbGwgaGF2ZSB0aGUgdmFsdWUKICAgKiBbdmFsdWVdIGFkZGVkIHRvIGl0cyBsaXN0IG9mIHZhbHVlcy4gU29tZSBoZWFkZXJzIGFyZSBzaW5nbGUKICAgKiB2YWx1ZWQsIGFuZCBmb3IgdGhlc2UgYWRkaW5nIGEgdmFsdWUgd2lsbCByZXBsYWNlIHRoZSBwcmV2aW91cwogICAqIHZhbHVlLiBJZiB0aGUgdmFsdWUgaXMgb2YgdHlwZSBEYXRlVGltZSBhIEhUVFAgZGF0ZSBmb3JtYXQgd2lsbCBiZQogICAqIGFwcGxpZWQuIElmIHRoZSB2YWx1ZSBpcyBhIFs6TGlzdDpdIGVhY2ggZWxlbWVudCBvZiB0aGUgbGlzdCB3aWxsCiAgICogYmUgYWRkZWQgc2VwYXJhdGVseS4gRm9yIGFsbCBvdGhlciB0eXBlcyB0aGUgZGVmYXVsdCBbOnRvU3RyaW5nOl0KICAgKiBtZXRob2Qgd2lsbCBiZSB1c2VkLgogICAqLwogIHZvaWQgYWRkKFN0cmluZyBuYW1lLCBPYmplY3QgdmFsdWUpOwoKICAvKioKICAgKiBTZXRzIGEgaGVhZGVyLiBUaGUgaGVhZGVyIG5hbWVkIFtuYW1lXSB3aWxsIGhhdmUgYWxsIGl0cyB2YWx1ZXMKICAgKiBjbGVhcmVkIGJlZm9yZSB0aGUgdmFsdWUgW3ZhbHVlXSBpcyBhZGRlZCBhcyBpdHMgdmFsdWUuCiAgICovCiAgdm9pZCBzZXQoU3RyaW5nIG5hbWUsIE9iamVjdCB2YWx1ZSk7CgogIC8qKgogICAqIFJlbW92ZXMgYSBzcGVjaWZpYyB2YWx1ZSBmb3IgYSBoZWFkZXIgbmFtZS4gU29tZSBoZWFkZXJzIGhhdmUKICAgKiBzeXN0ZW0gc3VwcGxpZWQgdmFsdWVzIGFuZCBmb3IgdGhlc2UgdGhlIHN5c3RlbSBzdXBwbGllZCB2YWx1ZXMKICAgKiB3aWxsIHN0aWxsIGJlIGFkZGVkIHRvIHRoZSBjb2xsZWN0aW9uIG9mIHZhbHVlcyBmb3IgdGhlIGhlYWRlci4KICAgKi8KICB2b2lkIHJlbW92ZShTdHJpbmcgbmFtZSwgT2JqZWN0IHZhbHVlKTsKCiAgLyoqCiAgICogUmVtb3ZlcyBhbGwgdmFsdWVzIGZvciB0aGUgc3BlY2lmaWVkIGhlYWRlciBuYW1lLiBTb21lIGhlYWRlcnMKICAgKiBoYXZlIHN5c3RlbSBzdXBwbGllZCB2YWx1ZXMgYW5kIGZvciB0aGVzZSB0aGUgc3lzdGVtIHN1cHBsaWVkCiAgICogdmFsdWVzIHdpbGwgc3RpbGwgYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24gb2YgdmFsdWVzIGZvciB0aGUKICAgKiBoZWFkZXIuCiAgICovCiAgdm9pZCByZW1vdmVBbGwoU3RyaW5nIG5hbWUpOwoKICAvKioKICAgKiBFbnVtZXJhdGVzIHRoZSBoZWFkZXJzLCBhcHBseWluZyB0aGUgZnVuY3Rpb24gW2ZdIHRvIGVhY2gKICAgKiBoZWFkZXIuIFRoZSBoZWFkZXIgbmFtZSBwYXNzZWQgaW4gWzpuYW1lOl0gd2lsbCBiZSBhbGwgbG93ZXIKICAgKiBjYXNlLgogICAqLwogIHZvaWQgZm9yRWFjaCh2b2lkIGYoU3RyaW5nIG5hbWUsIExpc3Q8U3RyaW5nPiB2YWx1ZXMpKTsKCiAgLyoqCiAgICogRGlzYWJsZXMgZm9sZGluZyBmb3IgdGhlIGhlYWRlciBuYW1lZCBbbmFtZV0gd2hlbiBzZW5kaW5nIHRoZSBIVFRQCiAgICogaGVhZGVyLiBCeSBkZWZhdWx0LCBtdWx0aXBsZSBoZWFkZXIgdmFsdWVzIGFyZSBmb2xkZWQgaW50byBhCiAgICogc2luZ2xlIGhlYWRlciBsaW5lIGJ5IHNlcGFyYXRpbmcgdGhlIHZhbHVlcyB3aXRoIGNvbW1hcy4gVGhlCiAgICogJ3NldC1jb29raWUnIGhlYWRlciBoYXMgZm9sZGluZyBkaXNhYmxlZCBieSBkZWZhdWx0LgogICAqLwogIHZvaWQgbm9Gb2xkaW5nKFN0cmluZyBuYW1lKTsKCiAgLyoqCiAgICogUmVtb3ZlIGFsbCBoZWFkZXJzLiBTb21lIGhlYWRlcnMgaGF2ZSBzeXN0ZW0gc3VwcGxpZWQgdmFsdWVzIGFuZAogICAqIGZvciB0aGVzZSB0aGUgc3lzdGVtIHN1cHBsaWVkIHZhbHVlcyB3aWxsIHN0aWxsIGJlIGFkZGVkIHRvIHRoZQogICAqIGNvbGxlY3Rpb24gb2YgdmFsdWVzIGZvciB0aGUgaGVhZGVyLgogICAqLwogIHZvaWQgY2xlYXIoKTsKfQoKLyoqCiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgaGVhZGVyIHZhbHVlIGluIHRoZSBmb3JtOgogKgogKiAgIFs6dmFsdWU7IHBhcmFtZXRlcjE9dmFsdWUxOyBwYXJhbWV0ZXIyPXZhbHVlMjpdCiAqCiAqIFtIZWFkZXJWYWx1ZV0gY2FuIGJlIHVzZWQgdG8gY29udmVuaWVudGx5IGJ1aWxkIGFuZCBwYXJzZSBoZWFkZXIKICogdmFsdWVzIG9uIHRoaXMgZm9ybS4KICoKICogVG8gYnVpbGQgYW4gWzphY2NlcHRzOl0gaGVhZGVyIHdpdGggdGhlIHZhbHVlCiAqCiAqICAgICB0ZXh0L3BsYWluOyBxPTAuMywgdGV4dC9odG1sCiAqCiAqIHVzZSBjb2RlIGxpa2UgdGhpczoKICoKICogICAgIEh0dHBDbGllbnRSZXF1ZXN0IHJlcXVlc3QgPSAuLi47CiAqICAgICB2YXIgdiA9IG5ldyBIZWFkZXJWYWx1ZSgidGV4dC9wbGFpbiIsIHsicSI6ICIwLjMifSk7CiAqICAgICByZXF1ZXN0LmhlYWRlcnMuYWRkKEh0dHBIZWFkZXJzLmFjY2VwdEhlYWRlciwgdik7CiAqICAgICByZXF1ZXN0LmhlYWRlcnMuYWRkKEh0dHBIZWFkZXJzLmFjY2VwdEhlYWRlciwgInRleHQvaHRtbCIpOwogKgogKiBUbyBwYXJzZSB0aGUgaGVhZGVyIHZhbHVlcyB1c2UgdGhlIFs6cGFyc2U6XSBzdGF0aWMgbWV0aG9kLgogKgogKiAgICAgSHR0cFJlcXVlc3QgcmVxdWVzdCA9IC4uLjsKICogICAgIExpc3Q8U3RyaW5nPiB2YWx1ZXMgPSByZXF1ZXN0LmhlYWRlcnNbSHR0cEhlYWRlcnMuYWNjZXB0SGVhZGVyXTsKICogICAgIHZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgewogKiAgICAgICBIZWFkZXJWYWx1ZSB2ID0gSGVhZGVyVmFsdWUucGFyc2UodmFsdWUpOwogKiAgICAgICAvLyBVc2Ugdi52YWx1ZSBhbmQgdi5wYXJhbWV0ZXJzCiAqICAgICB9KTsKICoKICogQW4gaW5zdGFuY2Ugb2YgW0hlYWRlclZhbHVlXSBpcyBpbW11dGFibGUuCiAqLwphYnN0cmFjdCBjbGFzcyBIZWFkZXJWYWx1ZSB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBoZWFkZXIgdmFsdWUgb2JqZWN0IHNldHRpbmcgdGhlIHZhbHVlIGFuZCBwYXJhbWV0ZXJzLgogICAqLwogIGZhY3RvcnkgSGVhZGVyVmFsdWUoW1N0cmluZyB2YWx1ZSA9ICIiLCBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtZXRlcnNdKSB7CiAgICByZXR1cm4gbmV3IF9IZWFkZXJWYWx1ZSh2YWx1ZSwgcGFyYW1ldGVycyk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IGhlYWRlciB2YWx1ZSBvYmplY3QgZnJvbSBwYXJzaW5nIGEgaGVhZGVyIHZhbHVlCiAgICogc3RyaW5nIHdpdGggYm90aCB2YWx1ZSBhbmQgb3B0aW9uYWwgcGFyYW1ldGVycy4KICAgKi8KICBzdGF0aWMgSGVhZGVyVmFsdWUgcGFyc2UoU3RyaW5nIHZhbHVlLAogICAgICB7U3RyaW5nIHBhcmFtZXRlclNlcGFyYXRvcjogIjsiLAogICAgICBTdHJpbmcgdmFsdWVTZXBhcmF0b3I6IG51bGwsCiAgICAgIGJvb2wgcHJlc2VydmVCYWNrc2xhc2g6IGZhbHNlfSkgewogICAgcmV0dXJuIF9IZWFkZXJWYWx1ZS5wYXJzZSh2YWx1ZSwKICAgICAgICBwYXJhbWV0ZXJTZXBhcmF0b3I6IHBhcmFtZXRlclNlcGFyYXRvciwKICAgICAgICB2YWx1ZVNlcGFyYXRvcjogdmFsdWVTZXBhcmF0b3IsCiAgICAgICAgcHJlc2VydmVCYWNrc2xhc2g6IHByZXNlcnZlQmFja3NsYXNoKTsKICB9CgogIC8qKgogICAqIEdldHMgdGhlIGhlYWRlciB2YWx1ZS4KICAgKi8KICBTdHJpbmcgZ2V0IHZhbHVlOwoKICAvKioKICAgKiBHZXRzIHRoZSBtYXAgb2YgcGFyYW1ldGVycy4KICAgKgogICAqIFRoaXMgbWFwIGNhbm5vdCBiZSBtb2RpZmllZC4gSW52b2tpbmcgYW55IG9wZXJhdGlvbiB3aGljaCB3b3VsZAogICAqIG1vZGlmeSB0aGUgbWFwIHdpbGwgdGhyb3cgW1Vuc3VwcG9ydGVkRXJyb3JdLgogICAqLwogIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0IHBhcmFtZXRlcnM7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGZvcm1hdHRlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gaW4gdGhlIGZvcm06CiAgICoKICAgKiAgICAgdmFsdWU7IHBhcmFtZXRlcjE9dmFsdWUxOyBwYXJhbWV0ZXIyPXZhbHVlMgogICAqLwogIFN0cmluZyB0b1N0cmluZygpOwp9CgphYnN0cmFjdCBjbGFzcyBIdHRwU2Vzc2lvbiBpbXBsZW1lbnRzIE1hcCB7CiAgLyoqCiAgICogR2V0cyB0aGUgaWQgZm9yIHRoZSBjdXJyZW50IHNlc3Npb24uCiAgICovCiAgU3RyaW5nIGdldCBpZDsKCiAgLyoqCiAgICogRGVzdHJveXMgdGhlIHNlc3Npb24uIFRoaXMgd2lsbCB0ZXJtaW5hdGUgdGhlIHNlc3Npb24gYW5kIGFueSBmdXJ0aGVyCiAgICogY29ubmVjdGlvbnMgd2l0aCB0aGlzIGlkIHdpbGwgYmUgZ2l2ZW4gYSBuZXcgaWQgYW5kIHNlc3Npb24uCiAgICovCiAgdm9pZCBkZXN0cm95KCk7CgogIC8qKgogICAqIFNldHMgYSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHNlc3Npb24gaXMgdGltZWQgb3V0LgogICAqLwogIHZvaWQgc2V0IG9uVGltZW91dCh2b2lkIGNhbGxiYWNrKCkpOwoKICAvKioKICAgKiBJcyB0cnVlIGlmIHRoZSBzZXNzaW9uIGhhcyBub3QgYmVlbiBzZW50IHRvIHRoZSBjbGllbnQgeWV0LgogICAqLwogIGJvb2wgZ2V0IGlzTmV3Owp9CgovKioKICogUmVwcmVzZW50YXRpb24gb2YgYSBjb250ZW50IHR5cGUuIEFuIGluc3RhbmNlIG9mIFtDb250ZW50VHlwZV0gaXMKICogaW1tdXRhYmxlLgogKi8KYWJzdHJhY3QgY2xhc3MgQ29udGVudFR5cGUgaW1wbGVtZW50cyBIZWFkZXJWYWx1ZSB7CiAgLyoqCiAgICogQ29udGVudCB0eXBlIGZvciBwbGFpbiB0ZXh0IHVzaW5nIFVURi04IGVuY29kaW5nLgogICAqCiAgICogICAgIHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgKICAgKi8KICBzdGF0aWMgZmluYWwgdGV4dCA9IG5ldyBDb250ZW50VHlwZSgidGV4dCIsICJwbGFpbiIsIGNoYXJzZXQ6ICJ1dGYtOCIpOwogIEBEZXByZWNhdGVkKCJVc2UgdGV4dCBpbnN0ZWFkIikKICBzdGF0aWMgZmluYWwgVEVYVCA9IHRleHQ7CgogIC8qKgogICAqICBDb250ZW50IHR5cGUgZm9yIEhUTUwgdXNpbmcgVVRGLTggZW5jb2RpbmcuCiAgICoKICAgKiAgICAgdGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04CiAgICovCiAgc3RhdGljIGZpbmFsIGh0bWwgPSBuZXcgQ29udGVudFR5cGUoInRleHQiLCAiaHRtbCIsIGNoYXJzZXQ6ICJ1dGYtOCIpOwogIEBEZXByZWNhdGVkKCJVc2UgaHRtbCBpbnN0ZWFkIikKICBzdGF0aWMgZmluYWwgSFRNTCA9IGh0bWw7CgogIC8qKgogICAqICBDb250ZW50IHR5cGUgZm9yIEpTT04gdXNpbmcgVVRGLTggZW5jb2RpbmcuCiAgICoKICAgKiAgICAgYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOAogICAqLwogIHN0YXRpYyBmaW5hbCBqc29uID0gbmV3IENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbiIsICJqc29uIiwgY2hhcnNldDogInV0Zi04Iik7CiAgQERlcHJlY2F0ZWQoIlVzZSBqc29uIGluc3RlYWQiKQogIHN0YXRpYyBmaW5hbCBKU09OID0ganNvbjsKCiAgLyoqCiAgICogIENvbnRlbnQgdHlwZSBmb3IgYmluYXJ5IGRhdGEuCiAgICoKICAgKiAgICAgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCiAgICovCiAgc3RhdGljIGZpbmFsIGJpbmFyeSA9IG5ldyBDb250ZW50VHlwZSgiYXBwbGljYXRpb24iLCAib2N0ZXQtc3RyZWFtIik7CiAgQERlcHJlY2F0ZWQoIlVzZSBiaW5hcnkgaW5zdGVhZCIpCiAgc3RhdGljIGZpbmFsIEJJTkFSWSA9IGJpbmFyeTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBjb250ZW50IHR5cGUgb2JqZWN0IHNldHRpbmcgdGhlIHByaW1hcnkgdHlwZSBhbmQKICAgKiBzdWIgdHlwZS4gVGhlIGNoYXJzZXQgYW5kIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBjYW4gYWxzbyBiZSBzZXQKICAgKiB1c2luZyBbY2hhcnNldF0gYW5kIFtwYXJhbWV0ZXJzXS4gSWYgY2hhcnNldCBpcyBwYXNzZWQgYW5kCiAgICogW3BhcmFtZXRlcnNdIGNvbnRhaW5zIGNoYXJzZXQgYXMgd2VsbCB0aGUgcGFzc2VkIFtjaGFyc2V0XSB3aWxsCiAgICogb3ZlcnJpZGUgdGhlIHZhbHVlIGluIHBhcmFtZXRlcnMuIEtleXMgcGFzc2VkIGluIHBhcmFtZXRlcnMgd2lsbCBiZQogICAqIGNvbnZlcnRlZCB0byBsb3dlciBjYXNlLiBUaGUgYGNoYXJzZXRgIGVudHJ5LCB3aGV0aGVyIHBhc3NlZCBhcyBgY2hhcnNldGAKICAgKiBvciBpbiBgcGFyYW1ldGVyc2AsIHdpbGwgaGF2ZSBpdHMgdmFsdWUgY29udmVydGVkIHRvIGxvd2VyLWNhc2UuCiAgICovCiAgZmFjdG9yeSBDb250ZW50VHlwZShTdHJpbmcgcHJpbWFyeVR5cGUsIFN0cmluZyBzdWJUeXBlLAogICAgICB7U3RyaW5nIGNoYXJzZXQsIE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1ldGVyc30pIHsKICAgIHJldHVybiBuZXcgX0NvbnRlbnRUeXBlKHByaW1hcnlUeXBlLCBzdWJUeXBlLCBjaGFyc2V0LCBwYXJhbWV0ZXJzKTsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgY29udGVudCB0eXBlIG9iamVjdCBmcm9tIHBhcnNpbmcgYSBDb250ZW50LVR5cGUKICAgKiBoZWFkZXIgdmFsdWUuIEFzIHByaW1hcnkgdHlwZSwgc3ViIHR5cGUgYW5kIHBhcmFtZXRlciBuYW1lcyBhbmQKICAgKiB2YWx1ZXMgYXJlIG5vdCBjYXNlIHNlbnNpdGl2ZSBhbGwgdGhlc2UgdmFsdWVzIHdpbGwgYmUgY29udmVydGVkCiAgICogdG8gbG93ZXIgY2FzZS4gUGFyc2luZyB0aGlzIHN0cmluZwogICAqCiAgICogICAgIHRleHQvaHRtbDsgY2hhcnNldD11dGYtOAogICAqCiAgICogd2lsbCBjcmVhdGUgYSBjb250ZW50IHR5cGUgb2JqZWN0IHdpdGggcHJpbWFyeSB0eXBlIFs6dGV4dDpdLCBzdWIKICAgKiB0eXBlIFs6aHRtbDpdIGFuZCBwYXJhbWV0ZXIgWzpjaGFyc2V0Ol0gd2l0aCB2YWx1ZSBbOnV0Zi04Ol0uCiAgICovCiAgc3RhdGljIENvbnRlbnRUeXBlIHBhcnNlKFN0cmluZyB2YWx1ZSkgewogICAgcmV0dXJuIF9Db250ZW50VHlwZS5wYXJzZSh2YWx1ZSk7CiAgfQoKICAvKioKICAgKiBHZXRzIHRoZSBtaW1lLXR5cGUsIHdpdGhvdXQgYW55IHBhcmFtZXRlcnMuCiAgICovCiAgU3RyaW5nIGdldCBtaW1lVHlwZTsKCiAgLyoqCiAgICogR2V0cyB0aGUgcHJpbWFyeSB0eXBlLgogICAqLwogIFN0cmluZyBnZXQgcHJpbWFyeVR5cGU7CgogIC8qKgogICAqIEdldHMgdGhlIHN1YiB0eXBlLgogICAqLwogIFN0cmluZyBnZXQgc3ViVHlwZTsKCiAgLyoqCiAgICogR2V0cyB0aGUgY2hhcmFjdGVyIHNldC4KICAgKi8KICBTdHJpbmcgZ2V0IGNoYXJzZXQ7Cn0KCi8qKgogKiBSZXByZXNlbnRhdGlvbiBvZiBhIGNvb2tpZS4gRm9yIGNvb2tpZXMgcmVjZWl2ZWQgYnkgdGhlIHNlcnZlciBhcyBDb29raWUKICogaGVhZGVyIHZhbHVlcyBvbmx5IFtuYW1lXSBhbmQgW3ZhbHVlXSBwcm9wZXJ0aWVzIHdpbGwgYmUgc2V0LiBXaGVuIGJ1aWxkaW5nIGEKICogY29va2llIGZvciB0aGUgJ3NldC1jb29raWUnIGhlYWRlciBpbiB0aGUgc2VydmVyIGFuZCB3aGVuIHJlY2VpdmluZyBjb29raWVzCiAqIGluIHRoZSBjbGllbnQgYXMgJ3NldC1jb29raWUnIGhlYWRlcnMgYWxsIGZpZWxkcyBjYW4gYmUgdXNlZC4KICovCmFic3RyYWN0IGNsYXNzIENvb2tpZSB7CiAgLyoqCiAgICogVGhlIG5hbWUgb2YgdGhlIGNvb2tpZS4KICAgKgogICAqIE11c3QgYmUgYSBgdG9rZW5gIGFzIHNwZWNpZmllZCBpbiBSRkMgNjI2NS4KICAgKgogICAqIFRoZSBhbGxvd2VkIGNoYXJhY3RlcnMgaW4gYSBgdG9rZW5gIGFyZSB0aGUgdmlzaWJsZSBBU0NJSSBjaGFyYWN0ZXJzLAogICAqIFUrMDAyMSAoYCFgKSB0aHJvdWdoIFUrMDA3RSAoYH5gKSwgZXhjZXB0IHRoZSBzZXBhcmF0b3IgY2hhcmFjdGVyczoKICAgKiBgKGAsIGApYCwgYDxgLCBgPmAsIGBAYCwgYCxgLCBgO2AsIGA6YCwgYFxgLCBgImAsIGAvYCwgYFtgLCBgXWAsIGA/YCwgYD1gLAogICAqIGB7YCwgYW5kIGB9YC4KICAgKi8KICBTdHJpbmcgbmFtZTsKCiAgLyoqCiAgICogVGhlIHZhbHVlIG9mIHRoZSBjb29raWUuCiAgICoKICAgKiBNdXN0IGJlIGEgYGNvb2tpZS12YWx1ZWAgYXMgc3BlY2lmaWVkIGluIFJGQyA2MjY1LgogICAqCiAgICogVGhlIGFsbG93ZWQgY2hhcmFjdGVycyBpbiBhIGNvb2tpZSB2YWx1ZSBhcmUgdGhlIHZpc2libGUgQVNDSUkgY2hhcmFjdGVycywKICAgKiBVKzAwMjEgKGAhYCkgdGhyb3VnaCBVKzAwN0UgKGB+YCkgZXhjZXB0IHRoZSBjaGFyYWN0ZXJzOgogICAqIGAiYCwgYCxgLCBgO2AgYW5kIGBcYC4KICAgKiBDb29raWUgdmFsdWVzIG1heSBiZSB3cmFwcGVkIGluIGEgc2luZ2xlIHBhaXIgb2YgZG91YmxlIHF1b3RlcwogICAqIChVKzAwMjIsIGAiYCkuCiAgICovCiAgU3RyaW5nIHZhbHVlOwoKICAvKioKICAgKiBUaGUgdGltZSBhdCB3aGljaCB0aGUgY29va2llIGV4cGlyZXMuCiAgICovCiAgRGF0ZVRpbWUgZXhwaXJlczsKCiAgLyoqCiAgICogVGhlIG51bWJlciBvZiBzZWNvbmRzIHVudGlsIHRoZSBjb29raWUgZXhwaXJlcy4gQSB6ZXJvIG9yIG5lZ2F0aXZlIHZhbHVlCiAgICogbWVhbnMgdGhlIGNvb2tpZSBoYXMgZXhwaXJlZC4KICAgKi8KICBpbnQgbWF4QWdlOwoKICAvKioKICAgKiBUaGUgZG9tYWluIHRoZSBjb29raWUgYXBwbGllcyB0by4KICAgKi8KICBTdHJpbmcgZG9tYWluOwoKICAvKioKICAgKiBUaGUgcGF0aCB3aXRoaW4gdGhlIFtkb21haW5dIHRoZSBjb29raWUgYXBwbGllcyB0by4KICAgKi8KICBTdHJpbmcgcGF0aDsKCiAgLyoqCiAgICogV2hldGhlciB0byBvbmx5IHNlbmQgdGhpcyBjb29raWUgb24gc2VjdXJlIGNvbm5lY3Rpb25zLgogICAqLwogIGJvb2wgc2VjdXJlOwoKICAvKioKICAgKiBXaGV0aGVyIHRoZSBjb29raWUgaXMgb25seSBzZW50IGluIHRoZSBIVFRQIHJlcXVlc3QgYW5kIGlzIG5vdCBtYWRlCiAgICogYXZhaWxhYmxlIHRvIGNsaWVudCBzaWRlIHNjcmlwdHMuCiAgICovCiAgYm9vbCBodHRwT25seTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBjb29raWUgc2V0dGluZyB0aGUgbmFtZSBhbmQgdmFsdWUuCiAgICoKICAgKiBbbmFtZV0gYW5kIFt2YWx1ZV0gbXVzdCBiZSBjb21wb3NlZCBvZiB2YWxpZCBjaGFyYWN0ZXJzIGFjY29yZGluZyB0byBSRkMKICAgKiA2MjY1LgogICAqCiAgICogQnkgZGVmYXVsdCB0aGUgdmFsdWUgb2YgYGh0dHBPbmx5YCB3aWxsIGJlIHNldCB0byBgdHJ1ZWAuCiAgICovCiAgZmFjdG9yeSBDb29raWUoU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSkgPT4gbmV3IF9Db29raWUobmFtZSwgdmFsdWUpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IGNvb2tpZSBieSBwYXJzaW5nIGEgaGVhZGVyIHZhbHVlIGZyb20gYSAnc2V0LWNvb2tpZScKICAgKiBoZWFkZXIuCiAgICovCiAgZmFjdG9yeSBDb29raWUuZnJvbVNldENvb2tpZVZhbHVlKFN0cmluZyB2YWx1ZSkgewogICAgcmV0dXJuIG5ldyBfQ29va2llLmZyb21TZXRDb29raWVWYWx1ZSh2YWx1ZSk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBmb3JtYXR0ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb29raWUuIFRoZQogICAqIHN0cmluZyByZXByZXNlbnRhdGlvbiBjYW4gYmUgdXNlZCBmb3IgZm9yIHNldHRpbmcgdGhlIENvb2tpZSBvcgogICAqICdzZXQtY29va2llJyBoZWFkZXJzCiAgICovCiAgU3RyaW5nIHRvU3RyaW5nKCk7Cn0KCi8qKgogKiBBIHNlcnZlci1zaWRlIG9iamVjdAogKiB0aGF0IGNvbnRhaW5zIHRoZSBjb250ZW50IG9mIGFuZCBpbmZvcm1hdGlvbiBhYm91dCBhbiBIVFRQIHJlcXVlc3QuCiAqCiAqIF9fTm90ZV9fOiBDaGVjayBvdXQgdGhlCiAqIFtodHRwX3NlcnZlcl0oaHR0cHM6Ly9wdWIuZGFydGxhbmcub3JnL3BhY2thZ2VzL2h0dHBfc2VydmVyKQogKiBwYWNrYWdlLCB3aGljaCBtYWtlcyB3b3JraW5nIHdpdGggdGhlIGxvdy1sZXZlbAogKiBkYXJ0OmlvIEhUVFAgc2VydmVyIHN1YnN5c3RlbSBlYXNpZXIuCiAqCiAqIGBIdHRwUmVxdWVzdGAgb2JqZWN0cyBhcmUgZ2VuZXJhdGVkIGJ5IGFuIFtIdHRwU2VydmVyXSwKICogd2hpY2ggbGlzdGVucyBmb3IgSFRUUCByZXF1ZXN0cyBvbiBhIHNwZWNpZmljIGhvc3QgYW5kIHBvcnQuCiAqIEZvciBlYWNoIHJlcXVlc3QgcmVjZWl2ZWQsIHRoZSBIdHRwU2VydmVyLCB3aGljaCBpcyBhIFtTdHJlYW1dLAogKiBnZW5lcmF0ZXMgYW4gYEh0dHBSZXF1ZXN0YCBvYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIHN0cmVhbS4KICoKICogQW4gYEh0dHBSZXF1ZXN0YCBvYmplY3QgZGVsaXZlcnMgdGhlIGJvZHkgY29udGVudCBvZiB0aGUgcmVxdWVzdAogKiBhcyBhIHN0cmVhbSBvZiBieXRlIGxpc3RzLgogKiBUaGUgb2JqZWN0IGFsc28gY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlcXVlc3QsCiAqIHN1Y2ggYXMgdGhlIG1ldGhvZCwgVVJJLCBhbmQgaGVhZGVycy4KICoKICogSW4gdGhlIGZvbGxvd2luZyBjb2RlLCBhbiBIdHRwU2VydmVyIGxpc3RlbnMKICogZm9yIEhUVFAgcmVxdWVzdHMuIFdoZW4gdGhlIHNlcnZlciByZWNlaXZlcyBhIHJlcXVlc3QsCiAqIGl0IHVzZXMgdGhlIEh0dHBSZXF1ZXN0IG9iamVjdCdzIGBtZXRob2RgIHByb3BlcnR5IHRvIGRpc3BhdGNoIHJlcXVlc3RzLgogKgogKiAgICAgZmluYWwgSE9TVCA9IEludGVybmV0QWRkcmVzcy5sb29wYmFja0lQdjQ7CiAqICAgICBmaW5hbCBQT1JUID0gODA7CiAqCiAqICAgICBIdHRwU2VydmVyLmJpbmQoSE9TVCwgUE9SVCkudGhlbigoX3NlcnZlcikgewogKiAgICAgICBfc2VydmVyLmxpc3RlbigoSHR0cFJlcXVlc3QgcmVxdWVzdCkgewogKiAgICAgICAgIHN3aXRjaCAocmVxdWVzdC5tZXRob2QpIHsKICogICAgICAgICAgIGNhc2UgJ0dFVCc6CiAqICAgICAgICAgICAgIGhhbmRsZUdldFJlcXVlc3QocmVxdWVzdCk7CiAqICAgICAgICAgICAgIGJyZWFrOwogKiAgICAgICAgICAgY2FzZSAnUE9TVCc6CiAqICAgICAgICAgICAgIC4uLgogKiAgICAgICAgIH0KICogICAgICAgfSwKICogICAgICAgb25FcnJvcjogaGFuZGxlRXJyb3IpOyAgICAvLyBsaXN0ZW4oKSBmYWlsZWQuCiAqICAgICB9KS5jYXRjaEVycm9yKGhhbmRsZUVycm9yKTsKICoKICogQW4gSHR0cFJlcXVlc3Qgb2JqZWN0IHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgYXNzb2NpYXRlZCBbSHR0cFJlc3BvbnNlXQogKiBvYmplY3QgdGhyb3VnaCB0aGUgcmVzcG9uc2UgcHJvcGVydHkuCiAqIFRoZSBzZXJ2ZXIgd3JpdGVzIGl0cyByZXNwb25zZSB0byB0aGUgYm9keSBvZiB0aGUgSHR0cFJlc3BvbnNlIG9iamVjdC4KICogRm9yIGV4YW1wbGUsIGhlcmUncyBhIGZ1bmN0aW9uIHRoYXQgcmVzcG9uZHMgdG8gYSByZXF1ZXN0OgogKgogKiAgICAgdm9pZCBoYW5kbGVHZXRSZXF1ZXN0KEh0dHBSZXF1ZXN0IHJlcSkgewogKiAgICAgICBIdHRwUmVzcG9uc2UgcmVzID0gcmVxLnJlc3BvbnNlOwogKiAgICAgICByZXMud3JpdGUoJ1JlY2VpdmVkIHJlcXVlc3QgJHtyZXEubWV0aG9kfTogJHtyZXEudXJpLnBhdGh9Jyk7CiAqICAgICAgIHJlcy5jbG9zZSgpOwogKiAgICAgfQogKi8KYWJzdHJhY3QgY2xhc3MgSHR0cFJlcXVlc3QgaW1wbGVtZW50cyBTdHJlYW08VWludDhMaXN0PiB7CiAgLyoqCiAgICogVGhlIGNvbnRlbnQgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0IGJvZHkuCiAgICoKICAgKiBJZiB0aGUgc2l6ZSBvZiB0aGUgcmVxdWVzdCBib2R5IGlzIG5vdCBrbm93biBpbiBhZHZhbmNlLAogICAqIHRoaXMgdmFsdWUgaXMgLTEuCiAgICovCiAgaW50IGdldCBjb250ZW50TGVuZ3RoOwoKICAvKioKICAgKiBUaGUgbWV0aG9kLCBzdWNoIGFzICdHRVQnIG9yICdQT1NUJywgZm9yIHRoZSByZXF1ZXN0LgogICAqLwogIFN0cmluZyBnZXQgbWV0aG9kOwoKICAvKioKICAgKiBUaGUgVVJJIGZvciB0aGUgcmVxdWVzdC4KICAgKgogICAqIFRoaXMgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZQogICAqIHBhdGggYW5kIHF1ZXJ5IHN0cmluZyBmb3IgdGhlIHJlcXVlc3QuCiAgICovCiAgVXJpIGdldCB1cmk7CgogIC8qKgogICAqIFRoZSByZXF1ZXN0ZWQgVVJJIGZvciB0aGUgcmVxdWVzdC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBVUkkgaXMgcmVjb25zdHJ1Y3RlZCBieSB1c2luZyBodHRwLWhlYWRlciBmaWVsZHMsIHRvIGFjY2VzcwogICAqIG90aGVyd2lzZSBsb3N0IGluZm9ybWF0aW9uLCBlLmcuIGhvc3QgYW5kIHNjaGVtZS4KICAgKgogICAqIFRvIHJlY29uc3RydWN0IHRoZSBzY2hlbWUsIGZpcnN0ICdYLUZvcndhcmRlZC1Qcm90bycgaXMgY2hlY2tlZCwgYW5kIHRoZW4KICAgKiBmYWxsaW5nIGJhY2sgdG8gc2VydmVyIHR5cGUuCiAgICoKICAgKiBUbyByZWNvbnN0cnVjdCB0aGUgaG9zdCwgZmlyc3QgJ1gtRm9yd2FyZGVkLUhvc3QnIGlzIGNoZWNrZWQsIHRoZW4gJ0hvc3QnCiAgICogYW5kIGZpbmFsbHkgY2FsbGluZyBiYWNrIHRvIHNlcnZlci4KICAgKi8KICBVcmkgZ2V0IHJlcXVlc3RlZFVyaTsKCiAgLyoqCiAgICogVGhlIHJlcXVlc3QgaGVhZGVycy4KICAgKgogICAqIFRoZSByZXR1cm5lZCBbSHR0cEhlYWRlcnNdIGFyZSBpbW11dGFibGUuCiAgICovCiAgSHR0cEhlYWRlcnMgZ2V0IGhlYWRlcnM7CgogIC8qKgogICAqIFRoZSBjb29raWVzIGluIHRoZSByZXF1ZXN0LCBmcm9tIHRoZSBDb29raWUgaGVhZGVycy4KICAgKi8KICBMaXN0PENvb2tpZT4gZ2V0IGNvb2tpZXM7CgogIC8qKgogICAqIFRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gc3RhdGUgc2lnbmFsZWQgYnkgdGhlIGNsaWVudC4KICAgKi8KICBib29sIGdldCBwZXJzaXN0ZW50Q29ubmVjdGlvbjsKCiAgLyoqCiAgICogVGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSBvZiB0aGUgY2xpZW50IG1ha2luZyB0aGUgcmVxdWVzdC4KICAgKgogICAqIFRoaXMgdmFsdWUgaXMgbnVsbCBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgYSBzZWN1cmUgVExTIG9yIFNTTCBjb25uZWN0aW9uLAogICAqIG9yIGlmIHRoZSBzZXJ2ZXIgZG9lcyBub3QgcmVxdWVzdCBhIGNsaWVudCBjZXJ0aWZpY2F0ZSwgb3IgaWYgdGhlIGNsaWVudAogICAqIGRvZXMgbm90IHByb3ZpZGUgb25lLgogICAqLwogIFg1MDlDZXJ0aWZpY2F0ZSBnZXQgY2VydGlmaWNhdGU7CgogIC8qKgogICAqIFRoZSBzZXNzaW9uIGZvciB0aGUgZ2l2ZW4gcmVxdWVzdC4KICAgKgogICAqIElmIHRoZSBzZXNzaW9uIGlzCiAgICogYmVpbmcgaW5pdGlhbGl6ZWQgYnkgdGhpcyBjYWxsLCBbOmlzTmV3Ol0gaXMgdHJ1ZSBmb3IgdGhlIHJldHVybmVkCiAgICogc2Vzc2lvbi4KICAgKiBTZWUgW0h0dHBTZXJ2ZXIuc2Vzc2lvblRpbWVvdXRdIG9uIGhvdyB0byBjaGFuZ2UgZGVmYXVsdCB0aW1lb3V0LgogICAqLwogIEh0dHBTZXNzaW9uIGdldCBzZXNzaW9uOwoKICAvKioKICAgKiBUaGUgSFRUUCBwcm90b2NvbCB2ZXJzaW9uIHVzZWQgaW4gdGhlIHJlcXVlc3QsCiAgICogZWl0aGVyICIxLjAiIG9yICIxLjEiLgogICAqLwogIFN0cmluZyBnZXQgcHJvdG9jb2xWZXJzaW9uOwoKICAvKioKICAgKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY2xpZW50IGNvbm5lY3Rpb24uCiAgICoKICAgKiBSZXR1cm5zIFs6bnVsbDpdIGlmIHRoZSBzb2NrZXQgaXMgbm90IGF2YWlsYWJsZS4KICAgKi8KICBIdHRwQ29ubmVjdGlvbkluZm8gZ2V0IGNvbm5lY3Rpb25JbmZvOwoKICAvKioKICAgKiBUaGUgW0h0dHBSZXNwb25zZV0gb2JqZWN0LCB1c2VkIGZvciBzZW5kaW5nIGJhY2sgdGhlIHJlc3BvbnNlIHRvIHRoZQogICAqIGNsaWVudC4KICAgKgogICAqIElmIHRoZSBbY29udGVudExlbmd0aF0gb2YgdGhlIGJvZHkgaXNuJ3QgMCwgYW5kIHRoZSBib2R5IGlzbid0IGJlaW5nIHJlYWQsCiAgICogYW55IHdyaXRlIGNhbGxzIG9uIHRoZSBbSHR0cFJlc3BvbnNlXSBhdXRvbWF0aWNhbGx5IGRyYWluIHRoZSByZXF1ZXN0CiAgICogYm9keS4KICAgKi8KICBIdHRwUmVzcG9uc2UgZ2V0IHJlc3BvbnNlOwp9CgovKioKICogQW4gSFRUUCByZXNwb25zZSwgd2hpY2ggcmV0dXJucyB0aGUgaGVhZGVycyBhbmQgZGF0YQogKiBmcm9tIHRoZSBzZXJ2ZXIgdG8gdGhlIGNsaWVudCBpbiByZXNwb25zZSB0byBhbiBIVFRQIHJlcXVlc3QuCiAqCiAqIEV2ZXJ5IEh0dHBSZXF1ZXN0IG9iamVjdCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGFzc29jaWF0ZWQgW0h0dHBSZXNwb25zZV0KICogb2JqZWN0IHRocm91Z2ggdGhlIGByZXNwb25zZWAgcHJvcGVydHkuCiAqIFRoZSBzZXJ2ZXIgc2VuZHMgaXRzIHJlc3BvbnNlIHRvIHRoZSBjbGllbnQgYnkgd3JpdGluZyB0byB0aGUKICogSHR0cFJlc3BvbnNlIG9iamVjdC4KICoKICogIyMgV3JpdGluZyB0aGUgcmVzcG9uc2UKICoKICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFtJT1NpbmtdLgogKiBBZnRlciB0aGUgaGVhZGVyIGhhcyBiZWVuIHNldCB1cCwgdGhlIG1ldGhvZHMKICogZnJvbSBJT1NpbmssIHN1Y2ggYXMgYHdyaXRlbG4oKWAsIGNhbiBiZSB1c2VkIHRvIHdyaXRlCiAqIHRoZSBib2R5IG9mIHRoZSBIVFRQIHJlc3BvbnNlLgogKiBVc2UgdGhlIGBjbG9zZSgpYCBtZXRob2QgdG8gY2xvc2UgdGhlIHJlc3BvbnNlIGFuZCBzZW5kIGl0IHRvIHRoZSBjbGllbnQuCiAqCiAqICAgICBzZXJ2ZXIubGlzdGVuKChIdHRwUmVxdWVzdCByZXF1ZXN0KSB7CiAqICAgICAgIHJlcXVlc3QucmVzcG9uc2Uud3JpdGUoJ0hlbGxvLCB3b3JsZCEnKTsKICogICAgICAgcmVxdWVzdC5yZXNwb25zZS5jbG9zZSgpOwogKiAgICAgfSk7CiAqCiAqIFdoZW4gb25lIG9mIHRoZSBJT1NpbmsgbWV0aG9kcyBpcyB1c2VkIGZvciB0aGUKICogZmlyc3QgdGltZSwgdGhlIHJlcXVlc3QgaGVhZGVyIGlzIHNlbnQuIENhbGxpbmcgYW55IG1ldGhvZHMgdGhhdAogKiBjaGFuZ2UgdGhlIGhlYWRlciBhZnRlciBpdCBpcyBzZW50IHRocm93cyBhbiBleGNlcHRpb24uCiAqCiAqICMjIFNldHRpbmcgdGhlIGhlYWRlcnMKICoKICogVGhlIEh0dHBSZXNwb25zZSBvYmplY3QgaGFzIGEgbnVtYmVyIG9mIHByb3BlcnRpZXMgZm9yIHNldHRpbmcgdXAKICogdGhlIEhUVFAgaGVhZGVycyBvZiB0aGUgcmVzcG9uc2UuCiAqIFdoZW4gd3JpdGluZyBzdHJpbmcgZGF0YSB0aHJvdWdoIHRoZSBJT1NpbmssIHRoZSBlbmNvZGluZyB1c2VkCiAqIGlzIGRldGVybWluZWQgZnJvbSB0aGUgImNoYXJzZXQiIHBhcmFtZXRlciBvZiB0aGUKICogIkNvbnRlbnQtVHlwZSIgaGVhZGVyLgogKgogKiAgICAgSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gLi4uCiAqICAgICByZXNwb25zZS5oZWFkZXJzLmNvbnRlbnRUeXBlCiAqICAgICAgICAgPSBuZXcgQ29udGVudFR5cGUoImFwcGxpY2F0aW9uIiwgImpzb24iLCBjaGFyc2V0OiAidXRmLTgiKTsKICogICAgIHJlc3BvbnNlLndyaXRlKC4uLik7ICAvLyBTdHJpbmdzIHdyaXR0ZW4gd2lsbCBiZSBVVEYtOCBlbmNvZGVkLgogKgogKiBJZiBubyBjaGFyc2V0IGlzIHByb3ZpZGVkIHRoZSBkZWZhdWx0IG9mIElTTy04ODU5LTEgKExhdGluIDEpIHdpbGwKICogYmUgdXNlZC4KICoKICogICAgIEh0dHBSZXNwb25zZSByZXNwb25zZSA9IC4uLgogKiAgICAgcmVzcG9uc2UuaGVhZGVycy5hZGQoSHR0cEhlYWRlcnMuY29udGVudFR5cGVIZWFkZXIsICJ0ZXh0L3BsYWluIik7CiAqICAgICByZXNwb25zZS53cml0ZSguLi4pOyAgLy8gU3RyaW5ncyB3cml0dGVuIHdpbGwgYmUgSVNPLTg4NTktMSBlbmNvZGVkLgogKgogKiBBbiBleGNlcHRpb24gaXMgdGhyb3duIGlmIHlvdSB1c2UgdGhlIGB3cml0ZSgpYCBtZXRob2QKICogd2hpbGUgYW4gdW5zdXBwb3J0ZWQgY29udGVudC10eXBlIGlzIHNldC4KICovCmFic3RyYWN0IGNsYXNzIEh0dHBSZXNwb25zZSBpbXBsZW1lbnRzIElPU2luayB7CiAgLy8gVE9ETyhham9obnNlbik6IEFkZCBkb2N1bWVudGF0aW9uIG9mIGhvdyB0byBwaXBlIGEgZmlsZSB0byB0aGUgcmVzcG9uc2UuCiAgLyoqCiAgICogR2V0cyBhbmQgc2V0cyB0aGUgY29udGVudCBsZW5ndGggb2YgdGhlIHJlc3BvbnNlLiBJZiB0aGUgc2l6ZSBvZgogICAqIHRoZSByZXNwb25zZSBpcyBub3Qga25vd24gaW4gYWR2YW5jZSBzZXQgdGhlIGNvbnRlbnQgbGVuZ3RoIHRvCiAgICogLTEsIHdoaWNoIGlzIGFsc28gdGhlIGRlZmF1bHQgaWYgbm90IHNldC4KICAgKi8KICBpbnQgY29udGVudExlbmd0aDsKCiAgLyoqCiAgICogR2V0cyBhbmQgc2V0cyB0aGUgc3RhdHVzIGNvZGUuIEFueSBpbnRlZ2VyIHZhbHVlIGlzIGFjY2VwdGVkLiBGb3IKICAgKiB0aGUgb2ZmaWNpYWwgSFRUUCBzdGF0dXMgY29kZXMgdXNlIHRoZSBmaWVsZHMgZnJvbQogICAqIFtIdHRwU3RhdHVzXS4gSWYgbm8gc3RhdHVzIGNvZGUgaXMgZXhwbGljaXRseSBzZXQgdGhlIGRlZmF1bHQKICAgKiB2YWx1ZSBbSHR0cFN0YXR1cy5va10gaXMgdXNlZC4KICAgKgogICAqIFRoZSBzdGF0dXMgY29kZSBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIGJvZHkgaXMgd3JpdHRlbgogICAqIHRvLiBTZXR0aW5nIHRoZSBzdGF0dXMgY29kZSBhZnRlciB3cml0aW5nIHRvIHRoZSByZXNwb25zZSBib2R5IG9yCiAgICogY2xvc2luZyB0aGUgcmVzcG9uc2Ugd2lsbCB0aHJvdyBhIGBTdGF0ZUVycm9yYC4KICAgKi8KICBpbnQgc3RhdHVzQ29kZTsKCiAgLyoqCiAgICogR2V0cyBhbmQgc2V0cyB0aGUgcmVhc29uIHBocmFzZS4gSWYgbm8gcmVhc29uIHBocmFzZSBpcyBleHBsaWNpdGx5CiAgICogc2V0IGEgZGVmYXVsdCByZWFzb24gcGhyYXNlIGlzIHByb3ZpZGVkLgogICAqCiAgICogVGhlIHJlYXNvbiBwaHJhc2UgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBib2R5IGlzIHdyaXR0ZW4KICAgKiB0by4gU2V0dGluZyB0aGUgcmVhc29uIHBocmFzZSBhZnRlciB3cml0aW5nIHRvIHRoZSByZXNwb25zZSBib2R5CiAgICogb3IgY2xvc2luZyB0aGUgcmVzcG9uc2Ugd2lsbCB0aHJvdyBhIGBTdGF0ZUVycm9yYC4KICAgKi8KICBTdHJpbmcgcmVhc29uUGhyYXNlOwoKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gc3RhdGUuIFRoZSBpbml0aWFsIHZhbHVlCiAgICogb2YgdGhpcyBwcm9wZXJ0eSBpcyB0aGUgcGVyc2lzdGVudCBjb25uZWN0aW9uIHN0YXRlIGZyb20gdGhlCiAgICogcmVxdWVzdC4KICAgKi8KICBib29sIHBlcnNpc3RlbnRDb25uZWN0aW9uOwoKICAvKioKICAgKiBTZXQgYW5kIGdldCB0aGUgW2RlYWRsaW5lXSBmb3IgdGhlIHJlc3BvbnNlLiBUaGUgZGVhZGxpbmUgaXMgdGltZWQgZnJvbSB0aGUKICAgKiB0aW1lIGl0J3Mgc2V0LiBTZXR0aW5nIGEgbmV3IGRlYWRsaW5lIHdpbGwgb3ZlcnJpZGUgYW55IHByZXZpb3VzIGRlYWRsaW5lLgogICAqIFdoZW4gYSBkZWFkbGluZSBpcyBleGNlZWRlZCwgdGhlIHJlc3BvbnNlIHdpbGwgYmUgY2xvc2VkIGFuZCBhbnkgZnVydGhlcgogICAqIGRhdGEgaWdub3JlZC4KICAgKgogICAqIFRvIGRpc2FibGUgYSBkZWFkbGluZSwgc2V0IHRoZSBbZGVhZGxpbmVdIHRvIGBudWxsYC4KICAgKgogICAqIFRoZSBbZGVhZGxpbmVdIGlzIGBudWxsYCBieSBkZWZhdWx0LgogICAqLwogIER1cmF0aW9uIGRlYWRsaW5lOwoKICAvKioKICAgKiBHZXRzIG9yIHNldHMgaWYgdGhlIFtIdHRwUmVzcG9uc2VdIHNob3VsZCBidWZmZXIgb3V0cHV0LgogICAqCiAgICogRGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuCiAgICoKICAgKiBfX05vdGVfXzogRGlzYWJsaW5nIGJ1ZmZlcmluZyBvZiB0aGUgb3V0cHV0IGNhbiByZXN1bHQgaW4gdmVyeSBwb29yCiAgICogcGVyZm9ybWFuY2UsIHdoZW4gd3JpdGluZyBtYW55IHNtYWxsIGNodW5rcy4KICAgKi8KICBib29sIGJ1ZmZlck91dHB1dDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcmVzcG9uc2UgaGVhZGVycy4KICAgKgogICAqIFRoZSByZXNwb25zZSBoZWFkZXJzIGNhbiBiZSBtb2RpZmllZCB1bnRpbCB0aGUgcmVzcG9uc2UgYm9keSBpcwogICAqIHdyaXR0ZW4gdG8gb3IgY2xvc2VkLiBBZnRlciB0aGF0IHRoZXkgYmVjb21lIGltbXV0YWJsZS4KICAgKi8KICBIdHRwSGVhZGVycyBnZXQgaGVhZGVyczsKCiAgLyoqCiAgICogQ29va2llcyB0byBzZXQgaW4gdGhlIGNsaWVudCAoaW4gdGhlICdzZXQtY29va2llJyBoZWFkZXIpLgogICAqLwogIExpc3Q8Q29va2llPiBnZXQgY29va2llczsKCiAgLyoqCiAgICogUmVzcG9uZCB3aXRoIGEgcmVkaXJlY3QgdG8gW2xvY2F0aW9uXS4KICAgKgogICAqIFRoZSBVUkkgaW4gW2xvY2F0aW9uXSBzaG91bGQgYmUgYWJzb2x1dGUsIGJ1dCB0aGVyZSBhcmUgbm8gY2hlY2tzCiAgICogdG8gZW5mb3JjZSB0aGF0LgogICAqCiAgICogQnkgZGVmYXVsdCB0aGUgSFRUUCBzdGF0dXMgY29kZSBgSHR0cFN0YXR1cy5tb3ZlZFRlbXBvcmFyaWx5YAogICAqIChgMzAyYCkgaXMgdXNlZCBmb3IgdGhlIHJlZGlyZWN0LCBidXQgYW4gYWx0ZXJuYXRpdmUgb25lIGNhbiBiZQogICAqIHNwZWNpZmllZCB1c2luZyB0aGUgW3N0YXR1c10gYXJndW1lbnQuCiAgICoKICAgKiBUaGlzIG1ldGhvZCB3aWxsIGFsc28gY2FsbCBgY2xvc2VgLCBhbmQgdGhlIHJldHVybmVkIGZ1dHVyZSBpcwogICAqIHRoZSBmdXR1cmUgcmV0dXJuZWQgYnkgYGNsb3NlYC4KICAgKi8KICBGdXR1cmUgcmVkaXJlY3QoVXJpIGxvY2F0aW9uLCB7aW50IHN0YXR1czogSHR0cFN0YXR1cy5tb3ZlZFRlbXBvcmFyaWx5fSk7CgogIC8qKgogICAqIERldGFjaGVzIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBmcm9tIHRoZSBIVFRQIHNlcnZlci4gV2hlbiB0aGUKICAgKiBzb2NrZXQgaXMgZGV0YWNoZWQgdGhlIEhUVFAgc2VydmVyIHdpbGwgbm8gbG9uZ2VyIHBlcmZvcm0gYW55CiAgICogb3BlcmF0aW9ucyBvbiBpdC4KICAgKgogICAqIFRoaXMgaXMgbm9ybWFsbHkgdXNlZCB3aGVuIGEgSFRUUCB1cGdyYWRlIHJlcXVlc3QgaXMgcmVjZWl2ZWQKICAgKiBhbmQgdGhlIGNvbW11bmljYXRpb24gc2hvdWxkIGNvbnRpbnVlIHdpdGggYSBkaWZmZXJlbnQgcHJvdG9jb2wuCiAgICoKICAgKiBJZiBbd3JpdGVIZWFkZXJzXSBpcyBgdHJ1ZWAsIHRoZSBzdGF0dXMgbGluZSBhbmQgW2hlYWRlcnNdIHdpbGwgYmUgd3JpdHRlbgogICAqIHRvIHRoZSBzb2NrZXQgYmVmb3JlIGl0J3MgZGV0YWNoZWQuIElmIGBmYWxzZWAsIHRoZSBzb2NrZXQgaXMgZGV0YWNoZWQKICAgKiBpbW1lZGlhdGVseSwgd2l0aG91dCBhbnkgZGF0YSB3cml0dGVuIHRvIHRoZSBzb2NrZXQuIERlZmF1bHQgaXMgYHRydWVgLgogICAqLwogIEZ1dHVyZTxTb2NrZXQ+IGRldGFjaFNvY2tldCh7Ym9vbCB3cml0ZUhlYWRlcnM6IHRydWV9KTsKCiAgLyoqCiAgICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2xpZW50IGNvbm5lY3Rpb24uIFJldHVybnMgWzpudWxsOl0gaWYgdGhlCiAgICogc29ja2V0IGlzIG5vdCBhdmFpbGFibGUuCiAgICovCiAgSHR0cENvbm5lY3Rpb25JbmZvIGdldCBjb25uZWN0aW9uSW5mbzsKfQoKLyoqCiAqIEEgY2xpZW50IHRoYXQgcmVjZWl2ZXMgY29udGVudCwgc3VjaCBhcyB3ZWIgcGFnZXMsIGZyb20KICogYSBzZXJ2ZXIgdXNpbmcgdGhlIEhUVFAgcHJvdG9jb2wuCiAqCiAqIEh0dHBDbGllbnQgY29udGFpbnMgYSBudW1iZXIgb2YgbWV0aG9kcyB0byBzZW5kIGFuIFtIdHRwQ2xpZW50UmVxdWVzdF0KICogdG8gYW4gSHR0cCBzZXJ2ZXIgYW5kIHJlY2VpdmUgYW4gW0h0dHBDbGllbnRSZXNwb25zZV0gYmFjay4KICogRm9yIGV4YW1wbGUsIHlvdSBjYW4gdXNlIHRoZSBbZ2V0XSwgW2dldFVybF0sIFtwb3N0XSwgYW5kIFtwb3N0VXJsXSBtZXRob2RzCiAqIGZvciBHRVQgYW5kIFBPU1QgcmVxdWVzdHMsIHJlc3BlY3RpdmVseS4KICoKICogIyMgTWFraW5nIGEgc2ltcGxlIEdFVCByZXF1ZXN0OiBhbiBleGFtcGxlCiAqCiAqIEEgYGdldFVybGAgcmVxdWVzdCBpcyBhIHR3by1zdGVwIHByb2Nlc3MsIHRyaWdnZXJlZCBieSB0d28gW0Z1dHVyZV1zLgogKiBXaGVuIHRoZSBmaXJzdCBmdXR1cmUgY29tcGxldGVzIHdpdGggYSBbSHR0cENsaWVudFJlcXVlc3RdLCB0aGUgdW5kZXJseWluZwogKiBuZXR3b3JrIGNvbm5lY3Rpb24gaGFzIGJlZW4gZXN0YWJsaXNoZWQsIGJ1dCBubyBkYXRhIGhhcyBiZWVuIHNlbnQuCiAqIEluIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlIGZpcnN0IGZ1dHVyZSwgdGhlIEhUVFAgaGVhZGVycyBhbmQgYm9keQogKiBjYW4gYmUgc2V0IG9uIHRoZSByZXF1ZXN0LiBFaXRoZXIgdGhlIGZpcnN0IHdyaXRlIHRvIHRoZSByZXF1ZXN0IG9iamVjdAogKiBvciBhIGNhbGwgdG8gW2Nsb3NlXSBzZW5kcyB0aGUgcmVxdWVzdCB0byB0aGUgc2VydmVyLgogKgogKiBXaGVuIHRoZSBIVFRQIHJlc3BvbnNlIGlzIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciwKICogdGhlIHNlY29uZCBmdXR1cmUsIHdoaWNoIGlzIHJldHVybmVkIGJ5IGNsb3NlLAogKiBjb21wbGV0ZXMgd2l0aCBhbiBbSHR0cENsaWVudFJlc3BvbnNlXSBvYmplY3QuCiAqIFRoaXMgb2JqZWN0IHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgaGVhZGVycyBhbmQgYm9keSBvZiB0aGUgcmVzcG9uc2UuCiAqIFRoZSBib2R5IGlzIGF2YWlsYWJsZSBhcyBhIHN0cmVhbSBpbXBsZW1lbnRlZCBieSBIdHRwQ2xpZW50UmVzcG9uc2UuCiAqIElmIGEgYm9keSBpcyBwcmVzZW50LCBpdCBtdXN0IGJlIHJlYWQuIE90aGVyd2lzZSwgaXQgbGVhZHMgdG8gcmVzb3VyY2UKICogbGVha3MuIENvbnNpZGVyIHVzaW5nIFtIdHRwQ2xpZW50UmVzcG9uc2UuZHJhaW5dIGlmIHRoZSBib2R5IGlzIHVudXNlZC4KICoKICogICAgIEh0dHBDbGllbnQgY2xpZW50ID0gbmV3IEh0dHBDbGllbnQoKTsKICogICAgIGNsaWVudC5nZXRVcmwoVXJpLnBhcnNlKCJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyIpKQogKiAgICAgICAgIC50aGVuKChIdHRwQ2xpZW50UmVxdWVzdCByZXF1ZXN0KSB7CiAqICAgICAgICAgICAvLyBPcHRpb25hbGx5IHNldCB1cCBoZWFkZXJzLi4uCiAqICAgICAgICAgICAvLyBPcHRpb25hbGx5IHdyaXRlIHRvIHRoZSByZXF1ZXN0IG9iamVjdC4uLgogKiAgICAgICAgICAgLy8gVGhlbiBjYWxsIGNsb3NlLgogKiAgICAgICAgICAgLi4uCiAqICAgICAgICAgICByZXR1cm4gcmVxdWVzdC5jbG9zZSgpOwogKiAgICAgICAgIH0pCiAqICAgICAgICAgLnRoZW4oKEh0dHBDbGllbnRSZXNwb25zZSByZXNwb25zZSkgewogKiAgICAgICAgICAgLy8gUHJvY2VzcyB0aGUgcmVzcG9uc2UuCiAqICAgICAgICAgICAuLi4KICogICAgICAgICB9KTsKICoKICogVGhlIGZ1dHVyZSBmb3IgW0h0dHBDbGllbnRSZXF1ZXN0XSBpcyBjcmVhdGVkIGJ5IG1ldGhvZHMgc3VjaCBhcwogKiBbZ2V0VXJsXSBhbmQgW29wZW5dLgogKgogKiAjIyBIVFRQUyBjb25uZWN0aW9ucwogKgogKiBBbiBIdHRwQ2xpZW50IGNhbiBtYWtlIEhUVFBTIHJlcXVlc3RzLCBjb25uZWN0aW5nIHRvIGEgc2VydmVyIHVzaW5nCiAqIHRoZSBUTFMgKFNTTCkgc2VjdXJlIG5ldHdvcmtpbmcgcHJvdG9jb2wuIENhbGxpbmcgW2dldFVybF0gd2l0aCBhbgogKiBodHRwczogc2NoZW1lIHdpbGwgd29yayBhdXRvbWF0aWNhbGx5LCBpZiB0aGUgc2VydmVyJ3MgY2VydGlmaWNhdGUgaXMKICogc2lnbmVkIGJ5IGEgcm9vdCBDQSAoY2VydGlmaWNhdGUgYXV0aG9yaXR5KSBvbiB0aGUgZGVmYXVsdCBsaXN0IG9mCiAqIHdlbGwta25vd24gdHJ1c3RlZCBDQXMsIGNvbXBpbGVkIGJ5IE1vemlsbGEuCiAqCiAqIFRvIGFkZCBhIGN1c3RvbSB0cnVzdGVkIGNlcnRpZmljYXRlIGF1dGhvcml0eSwgb3IgdG8gc2VuZCBhIGNsaWVudAogKiBjZXJ0aWZpY2F0ZSB0byBzZXJ2ZXJzIHRoYXQgcmVxdWVzdCBvbmUsIHBhc3MgYSBbU2VjdXJpdHlDb250ZXh0XSBvYmplY3QKICogYXMgdGhlIG9wdGlvbmFsIGBjb250ZXh0YCBhcmd1bWVudCB0byB0aGUgYEh0dHBDbGllbnRgIGNvbnN0cnVjdG9yLgogKiBUaGUgZGVzaXJlZCBzZWN1cml0eSBvcHRpb25zIGNhbiBiZSBzZXQgb24gdGhlIFtTZWN1cml0eUNvbnRleHRdIG9iamVjdC4KICoKICogIyMgSGVhZGVycwogKgogKiBBbGwgSHR0cENsaWVudCByZXF1ZXN0cyBzZXQgdGhlIGZvbGxvd2luZyBoZWFkZXIgYnkgZGVmYXVsdDoKICoKICogICAgIEFjY2VwdC1FbmNvZGluZzogZ3ppcAogKgogKiBUaGlzIGFsbG93cyB0aGUgSFRUUCBzZXJ2ZXIgdG8gdXNlIGd6aXAgY29tcHJlc3Npb24gZm9yIHRoZSBib2R5IGlmCiAqIHBvc3NpYmxlLiBJZiB0aGlzIGJlaGF2aW9yIGlzIG5vdCBkZXNpcmVkIHNldCB0aGUKICogYEFjY2VwdC1FbmNvZGluZ2AgaGVhZGVyIHRvIHNvbWV0aGluZyBlbHNlLgogKiBUbyB0dXJuIG9mZiBnemlwIGNvbXByZXNzaW9uIG9mIHRoZSByZXNwb25zZSwgY2xlYXIgdGhpcyBoZWFkZXI6CiAqCiAqICAgICAgcmVxdWVzdC5oZWFkZXJzLnJlbW92ZUFsbChIdHRwSGVhZGVycy5hY2NlcHRFbmNvZGluZ0hlYWRlcikKICoKICogIyMgQ2xvc2luZyB0aGUgSHR0cENsaWVudAogKgogKiBUaGUgSHR0cENsaWVudCBzdXBwb3J0cyBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zIGFuZCBjYWNoZXMgbmV0d29yawogKiBjb25uZWN0aW9ucyB0byByZXVzZSB0aGVtIGZvciBtdWx0aXBsZSByZXF1ZXN0cyB3aGVuZXZlcgogKiBwb3NzaWJsZS4gVGhpcyBtZWFucyB0aGF0IG5ldHdvcmsgY29ubmVjdGlvbnMgY2FuIGJlIGtlcHQgb3BlbiBmb3IKICogc29tZSB0aW1lIGFmdGVyIGEgcmVxdWVzdCBoYXMgY29tcGxldGVkLiBVc2UgSHR0cENsaWVudC5jbG9zZQogKiB0byBmb3JjZSB0aGUgSHR0cENsaWVudCBvYmplY3QgdG8gc2h1dCBkb3duIGFuZCB0byBjbG9zZSB0aGUgaWRsZQogKiBuZXR3b3JrIGNvbm5lY3Rpb25zLgogKgogKiAjIyBUdXJuaW5nIHByb3hpZXMgb24gYW5kIG9mZgogKgogKiBCeSBkZWZhdWx0IHRoZSBIdHRwQ2xpZW50IHVzZXMgdGhlIHByb3h5IGNvbmZpZ3VyYXRpb24gYXZhaWxhYmxlCiAqIGZyb20gdGhlIGVudmlyb25tZW50LCBzZWUgW2ZpbmRQcm94eUZyb21FbnZpcm9ubWVudF0uIFRvIHR1cm4gb2ZmCiAqIHRoZSB1c2Ugb2YgcHJveGllcyBzZXQgdGhlIFtmaW5kUHJveHldIHByb3BlcnR5IHRvCiAqIFs6bnVsbDpdLgogKgogKiAgICAgSHR0cENsaWVudCBjbGllbnQgPSBuZXcgSHR0cENsaWVudCgpOwogKiAgICAgY2xpZW50LmZpbmRQcm94eSA9IG51bGw7CiAqLwphYnN0cmFjdCBjbGFzcyBIdHRwQ2xpZW50IHsKICBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRIdHRwUG9ydCA9IDgwOwogIEBEZXByZWNhdGVkKCJVc2UgZGVmYXVsdEh0dHBQb3J0IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgREVGQVVMVF9IVFRQX1BPUlQgPSBkZWZhdWx0SHR0cFBvcnQ7CgogIHN0YXRpYyBjb25zdCBpbnQgZGVmYXVsdEh0dHBzUG9ydCA9IDQ0MzsKICBARGVwcmVjYXRlZCgiVXNlIGRlZmF1bHRIdHRwc1BvcnQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBERUZBVUxUX0hUVFBTX1BPUlQgPSBkZWZhdWx0SHR0cHNQb3J0OwoKICAvLy8gR2V0cyBhbmQgc2V0cyB0aGUgaWRsZSB0aW1lb3V0IG9mIG5vbi1hY3RpdmUgcGVyc2lzdGVudCAoa2VlcC1hbGl2ZSkKICAvLy8gY29ubmVjdGlvbnMuCiAgLy8vCiAgLy8vIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDE1IHNlY29uZHMuCiAgRHVyYXRpb24gaWRsZVRpbWVvdXQ7CgogIC8vLyBHZXRzIGFuZCBzZXRzIHRoZSBjb25uZWN0aW9uIHRpbWVvdXQuCiAgLy8vCiAgLy8vIFdoZW4gY29ubmVjdGluZyB0byBhIG5ldyBob3N0IGV4Y2VlZHMgdGhpcyB0aW1lb3V0LCBhIFtTb2NrZXRFeGNlcHRpb25dCiAgLy8vIGlzIHRocm93bi4gVGhlIHRpbWVvdXQgYXBwbGllcyBvbmx5IHRvIGNvbm5lY3Rpb25zIGluaXRpYXRlZCBhZnRlciB0aGUKICAvLy8gdGltZW91dCBpcyBzZXQuCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBpcyBgbnVsbGAsIHRoZSBPUyBkZWZhdWx0IHRpbWVvdXQgaXMgdXNlZC4gVGhlIGRlZmF1bHQgaXMKICAvLy8gYG51bGxgLgogIER1cmF0aW9uIGNvbm5lY3Rpb25UaW1lb3V0OwoKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaXZlIGNvbm5lY3Rpb25zLCB0byBhIHNpbmdsZSBob3N0LgogICAqCiAgICogSW5jcmVhc2luZyB0aGlzIG51bWJlciBtYXkgbG93ZXIgcGVyZm9ybWFuY2UgYW5kIHRha2UgdXAgdW53YW50ZWQKICAgKiBzeXN0ZW0gcmVzb3VyY2VzLgogICAqCiAgICogVG8gZGlzYWJsZSwgc2V0IHRvIGBudWxsYC4KICAgKgogICAqIERlZmF1bHQgaXMgYG51bGxgLgogICAqLwogIGludCBtYXhDb25uZWN0aW9uc1Blckhvc3Q7CgogIC8qKgogICAqIEdldHMgYW5kIHNldHMgd2hldGhlciB0aGUgYm9keSBvZiBhIHJlc3BvbnNlIHdpbGwgYmUgYXV0b21hdGljYWxseQogICAqIHVuY29tcHJlc3NlZC4KICAgKgogICAqIFRoZSBib2R5IG9mIGFuIEhUVFAgcmVzcG9uc2UgY2FuIGJlIGNvbXByZXNzZWQuIEluIG1vc3QKICAgKiBzaXR1YXRpb25zIHByb3ZpZGluZyB0aGUgdW4tY29tcHJlc3NlZCBib2R5IGlzIG1vc3QKICAgKiBjb252ZW5pZW50LiBUaGVyZWZvcmUgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gdW4tY29tcHJlc3MgdGhlCiAgICogYm9keS4gSG93ZXZlciBpbiBzb21lIHNpdHVhdGlvbnMgKGUuZy4gaW1wbGVtZW50aW5nIGEgdHJhbnNwYXJlbnQKICAgKiBwcm94eSkga2VlcGluZyB0aGUgdW5jb21wcmVzc2VkIHN0cmVhbSBpcyByZXF1aXJlZC4KICAgKgogICAqIE5PVEU6IEhlYWRlcnMgaW4gdGhlIHJlc3BvbnNlIGFyZSBuZXZlciBtb2RpZmllZC4gVGhpcyBtZWFucwogICAqIHRoYXQgd2hlbiBhdXRvbWF0aWMgdW4tY29tcHJlc3Npb24gaXMgdHVybmVkIG9uIHRoZSB2YWx1ZSBvZiB0aGUKICAgKiBoZWFkZXIgYENvbnRlbnQtTGVuZ3RoYCB3aWxsIHJlZmxlY3QgdGhlIGxlbmd0aCBvZiB0aGUgb3JpZ2luYWwKICAgKiBjb21wcmVzc2VkIGJvZHkuIExpa2V3aXNlIHRoZSBoZWFkZXIgYENvbnRlbnQtRW5jb2RpbmdgIHdpbGwgYWxzbwogICAqIGhhdmUgdGhlIG9yaWdpbmFsIHZhbHVlIGluZGljYXRpbmcgY29tcHJlc3Npb24uCiAgICoKICAgKiBOT1RFOiBBdXRvbWF0aWMgdW4tY29tcHJlc3Npb24gaXMgb25seSBwZXJmb3JtZWQgaWYgdGhlCiAgICogYENvbnRlbnQtRW5jb2RpbmdgIGhlYWRlciB2YWx1ZSBpcyBgZ3ppcGAuCiAgICoKICAgKiBUaGlzIHZhbHVlIGFmZmVjdHMgYWxsIHJlc3BvbnNlcyBwcm9kdWNlZCBieSB0aGlzIGNsaWVudCBhZnRlciB0aGUKICAgKiB2YWx1ZSBpcyBjaGFuZ2VkLgogICAqCiAgICogVG8gZGlzYWJsZSwgc2V0IHRvIGBmYWxzZWAuCiAgICoKICAgKiBEZWZhdWx0IGlzIGB0cnVlYC4KICAgKi8KICBib29sIGF1dG9VbmNvbXByZXNzOwoKICAvLy8gR2V0cyBhbmQgc2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYFVzZXItQWdlbnRgIGhlYWRlciBmb3IgYWxsIHJlcXVlc3RzCiAgLy8vIGdlbmVyYXRlZCBieSB0aGlzIFtIdHRwQ2xpZW50XS4KICAvLy8KICAvLy8gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYERhcnQvPHZlcnNpb24+IChkYXJ0OmlvKWAuCiAgLy8vCiAgLy8vIElmIHRoZSB1c2VyQWdlbnQgaXMgc2V0IHRvIGBudWxsYCwgbm8gZGVmYXVsdCBgVXNlci1BZ2VudGAgaGVhZGVyIHdpbGwgYmUKICAvLy8gYWRkZWQgdG8gZWFjaCByZXF1ZXN0LgogIFN0cmluZyB1c2VyQWdlbnQ7CgogIGZhY3RvcnkgSHR0cENsaWVudCh7U2VjdXJpdHlDb250ZXh0IGNvbnRleHR9KSB7CiAgICBIdHRwT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IEh0dHBPdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gbmV3IF9IdHRwQ2xpZW50KGNvbnRleHQpOwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5jcmVhdGVIdHRwQ2xpZW50KGNvbnRleHQpOwogIH0KCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24uCiAgICoKICAgKiBUaGUgSFRUUCBtZXRob2QgdG8gdXNlIGlzIHNwZWNpZmllZCBpbiBbbWV0aG9kXSwgdGhlIHNlcnZlciBpcwogICAqIHNwZWNpZmllZCB1c2luZyBbaG9zdF0gYW5kIFtwb3J0XSwgYW5kIHRoZSBwYXRoIChpbmNsdWRpbmcKICAgKiBhIHBvc3NpYmxlIHF1ZXJ5KSBpcyBzcGVjaWZpZWQgdXNpbmcgW3BhdGhdLgogICAqIFRoZSBwYXRoIG1heSBhbHNvIGNvbnRhaW4gYSBVUkkgZnJhZ21lbnQsIHdoaWNoIHdpbGwgYmUgaWdub3JlZC4KICAgKgogICAqIFRoZSBgSG9zdGAgaGVhZGVyIGZvciB0aGUgcmVxdWVzdCB3aWxsIGJlIHNldCB0byB0aGUgdmFsdWUgW2hvc3RdOltwb3J0XQogICAqIChpZiBbaG9zdF0gaXMgYW4gSVAgYWRkcmVzcywgaXQgd2lsbCBzdGlsbCBiZSB1c2VkIGluIHRoZSBgSG9zdGAgaGVhZGVyKS4KICAgKiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIHRocm91Z2ggdGhlIFtIdHRwQ2xpZW50UmVxdWVzdF0gaW50ZXJmYWNlIGJlZm9yZQogICAqIHRoZSByZXF1ZXN0IGlzIHNlbnQuCiAgICoKICAgKiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIGR1cmluZyBhbgogICAqIEhUVFAgdHJhbnNhY3Rpb24sIGFuZCB0aGUgb2JqZWN0cyByZXR1cm5lZCBieSB0aGUgZnV0dXJlcywgc2VlCiAgICogdGhlIG92ZXJhbGwgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGNsYXNzIFtIdHRwQ2xpZW50XS4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IG9wZW4oCiAgICAgIFN0cmluZyBtZXRob2QsIFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIHBhdGgpOwoKICAvKioKICAgKiBPcGVucyBhIEhUVFAgY29ubmVjdGlvbi4KICAgKgogICAqIFRoZSBIVFRQIG1ldGhvZCBpcyBzcGVjaWZpZWQgaW4gW21ldGhvZF0gYW5kIHRoZSBVUkwgdG8gdXNlIGluCiAgICogW3VybF0uCiAgICoKICAgKiBUaGUgYEhvc3RgIGhlYWRlciBmb3IgdGhlIHJlcXVlc3Qgd2lsbCBiZSBzZXQgdG8gdGhlIHZhbHVlCiAgICogW1VyaS5ob3N0XTpbVXJpLnBvcnRdIGZyb20gW3VybF0gKGlmIFt1cmwuaG9zdF0gaXMgYW4gSVAgYWRkcmVzcywgaXQgd2lsbAogICAqIHN0aWxsIGJlIHVzZWQgaW4gdGhlIGBIb3N0YCBoZWFkZXIpLiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIHRocm91Z2ggdGhlCiAgICogW0h0dHBDbGllbnRSZXF1ZXN0XSBpbnRlcmZhY2UgYmVmb3JlIHRoZSByZXF1ZXN0IGlzIHNlbnQuCiAgICoKICAgKiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIGR1cmluZyBhbgogICAqIEhUVFAgdHJhbnNhY3Rpb24sIGFuZCB0aGUgb2JqZWN0cyByZXR1cm5lZCBieSB0aGUgZnV0dXJlcywgc2VlCiAgICogdGhlIG92ZXJhbGwgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGNsYXNzIFtIdHRwQ2xpZW50XS4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IG9wZW5VcmwoU3RyaW5nIG1ldGhvZCwgVXJpIHVybCk7CgogIC8qKgogICAqIE9wZW5zIGEgSFRUUCBjb25uZWN0aW9uIHVzaW5nIHRoZSBHRVQgbWV0aG9kLgogICAqCiAgICogVGhlIHNlcnZlciBpcyBzcGVjaWZpZWQgdXNpbmcgW2hvc3RdIGFuZCBbcG9ydF0sIGFuZCB0aGUgcGF0aAogICAqIChpbmNsdWRpbmcgYSBwb3NzaWJsZSBxdWVyeSkgaXMgc3BlY2lmaWVkIHVzaW5nCiAgICogW3BhdGhdLgogICAqCiAgICogU2VlIFtvcGVuXSBmb3IgZGV0YWlscy4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IGdldChTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBwYXRoKTsKCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24gdXNpbmcgdGhlIEdFVCBtZXRob2QuCiAgICoKICAgKiBUaGUgVVJMIHRvIHVzZSBpcyBzcGVjaWZpZWQgaW4gW3VybF0uCiAgICoKICAgKiBTZWUgW29wZW5VcmxdIGZvciBkZXRhaWxzLgogICAqLwogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gZ2V0VXJsKFVyaSB1cmwpOwoKICAvKioKICAgKiBPcGVucyBhIEhUVFAgY29ubmVjdGlvbiB1c2luZyB0aGUgUE9TVCBtZXRob2QuCiAgICoKICAgKiBUaGUgc2VydmVyIGlzIHNwZWNpZmllZCB1c2luZyBbaG9zdF0gYW5kIFtwb3J0XSwgYW5kIHRoZSBwYXRoCiAgICogKGluY2x1ZGluZyBhIHBvc3NpYmxlIHF1ZXJ5KSBpcyBzcGVjaWZpZWQgdXNpbmcKICAgKiBbcGF0aF0uCiAgICoKICAgKiBTZWUgW29wZW5dIGZvciBkZXRhaWxzLgogICAqLwogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gcG9zdChTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBwYXRoKTsKCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24gdXNpbmcgdGhlIFBPU1QgbWV0aG9kLgogICAqCiAgICogVGhlIFVSTCB0byB1c2UgaXMgc3BlY2lmaWVkIGluIFt1cmxdLgogICAqCiAgICogU2VlIFtvcGVuVXJsXSBmb3IgZGV0YWlscy4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IHBvc3RVcmwoVXJpIHVybCk7CgogIC8qKgogICAqIE9wZW5zIGEgSFRUUCBjb25uZWN0aW9uIHVzaW5nIHRoZSBQVVQgbWV0aG9kLgogICAqCiAgICogVGhlIHNlcnZlciBpcyBzcGVjaWZpZWQgdXNpbmcgW2hvc3RdIGFuZCBbcG9ydF0sIGFuZCB0aGUgcGF0aAogICAqIChpbmNsdWRpbmcgYSBwb3NzaWJsZSBxdWVyeSkgaXMgc3BlY2lmaWVkIHVzaW5nIFtwYXRoXS4KICAgKgogICAqIFNlZSBbb3Blbl0gZm9yIGRldGFpbHMuCiAgICovCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBwdXQoU3RyaW5nIGhvc3QsIGludCBwb3J0LCBTdHJpbmcgcGF0aCk7CgogIC8qKgogICAqIE9wZW5zIGEgSFRUUCBjb25uZWN0aW9uIHVzaW5nIHRoZSBQVVQgbWV0aG9kLgogICAqCiAgICogVGhlIFVSTCB0byB1c2UgaXMgc3BlY2lmaWVkIGluIFt1cmxdLgogICAqCiAgICogU2VlIFtvcGVuVXJsXSBmb3IgZGV0YWlscy4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IHB1dFVybChVcmkgdXJsKTsKCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24gdXNpbmcgdGhlIERFTEVURSBtZXRob2QuCiAgICoKICAgKiBUaGUgc2VydmVyIGlzIHNwZWNpZmllZCB1c2luZyBbaG9zdF0gYW5kIFtwb3J0XSwgYW5kIHRoZSBwYXRoCiAgICogKGluY2x1ZGluZyBhIHBvc3NpYmxlIHF1ZXJ5KSBpcyBzcGVjaWZpZWQgdXNpbmcgW3BhdGhdLgogICAqCiAgICogU2VlIFtvcGVuXSBmb3IgZGV0YWlscy4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IGRlbGV0ZShTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBwYXRoKTsKCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24gdXNpbmcgdGhlIERFTEVURSBtZXRob2QuCiAgICoKICAgKiBUaGUgVVJMIHRvIHVzZSBpcyBzcGVjaWZpZWQgaW4gW3VybF0uCiAgICoKICAgKiBTZWUgW29wZW5VcmxdIGZvciBkZXRhaWxzLgogICAqLwogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gZGVsZXRlVXJsKFVyaSB1cmwpOwoKICAvKioKICAgKiBPcGVucyBhIEhUVFAgY29ubmVjdGlvbiB1c2luZyB0aGUgUEFUQ0ggbWV0aG9kLgogICAqCiAgICogVGhlIHNlcnZlciBpcyBzcGVjaWZpZWQgdXNpbmcgW2hvc3RdIGFuZCBbcG9ydF0sIGFuZCB0aGUgcGF0aAogICAqIChpbmNsdWRpbmcgYSBwb3NzaWJsZSBxdWVyeSkgaXMgc3BlY2lmaWVkIHVzaW5nIFtwYXRoXS4KICAgKgogICAqIFNlZSBbb3Blbl0gZm9yIGRldGFpbHMuCiAgICovCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBwYXRjaChTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBwYXRoKTsKCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24gdXNpbmcgdGhlIFBBVENIIG1ldGhvZC4KICAgKgogICAqIFRoZSBVUkwgdG8gdXNlIGlzIHNwZWNpZmllZCBpbiBbdXJsXS4KICAgKgogICAqIFNlZSBbb3BlblVybF0gZm9yIGRldGFpbHMuCiAgICovCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBwYXRjaFVybChVcmkgdXJsKTsKCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24gdXNpbmcgdGhlIEhFQUQgbWV0aG9kLgogICAqCiAgICogVGhlIHNlcnZlciBpcyBzcGVjaWZpZWQgdXNpbmcgW2hvc3RdIGFuZCBbcG9ydF0sIGFuZCB0aGUgcGF0aAogICAqIChpbmNsdWRpbmcgYSBwb3NzaWJsZSBxdWVyeSkgaXMgc3BlY2lmaWVkIHVzaW5nIFtwYXRoXS4KICAgKgogICAqIFNlZSBbb3Blbl0gZm9yIGRldGFpbHMuCiAgICovCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBoZWFkKFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIHBhdGgpOwoKICAvKioKICAgKiBPcGVucyBhIEhUVFAgY29ubmVjdGlvbiB1c2luZyB0aGUgSEVBRCBtZXRob2QuCiAgICoKICAgKiBUaGUgVVJMIHRvIHVzZSBpcyBzcGVjaWZpZWQgaW4gW3VybF0uCiAgICoKICAgKiBTZWUgW29wZW5VcmxdIGZvciBkZXRhaWxzLgogICAqLwogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gaGVhZFVybChVcmkgdXJsKTsKCiAgLyoqCiAgICogU2V0cyB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYSBzaXRlIGlzIHJlcXVlc3RpbmcKICAgKiBhdXRoZW50aWNhdGlvbi4gVGhlIFVSTCByZXF1ZXN0ZWQgYW5kIHRoZSBzZWN1cml0eSByZWFsbSBmcm9tIHRoZQogICAqIHNlcnZlciBhcmUgcGFzc2VkIGluIHRoZSBhcmd1bWVudHMgW3VybF0gYW5kIFtyZWFsbV0uCiAgICoKICAgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIFtGdXR1cmVdIHdoaWNoIHNob3VsZCBjb21wbGV0ZSB3aGVuIHRoZQogICAqIGF1dGhlbnRpY2F0aW9uIGhhcyBiZWVuIHJlc29sdmVkLiBJZiBjcmVkZW50aWFscyBjYW5ub3QgYmUKICAgKiBwcm92aWRlZCB0aGUgW0Z1dHVyZV0gc2hvdWxkIGNvbXBsZXRlIHdpdGggWzpmYWxzZTpdLiBJZgogICAqIGNyZWRlbnRpYWxzIGFyZSBhdmFpbGFibGUgdGhlIGZ1bmN0aW9uIHNob3VsZCBhZGQgdGhlc2UgdXNpbmcKICAgKiBbYWRkQ3JlZGVudGlhbHNdIGJlZm9yZSBjb21wbGV0aW5nIHRoZSBbRnV0dXJlXSB3aXRoIHRoZSB2YWx1ZQogICAqIFs6dHJ1ZTpdLgogICAqCiAgICogSWYgdGhlIFtGdXR1cmVdIGNvbXBsZXRlcyB3aXRoIFs6dHJ1ZTpdIHRoZSByZXF1ZXN0IHdpbGwgYmUgcmV0cmllZAogICAqIHVzaW5nIHRoZSB1cGRhdGVkIGNyZWRlbnRpYWxzLCBob3dldmVyLCB0aGUgcmV0cmllZCByZXF1ZXN0IHdpbGwgbm90CiAgICogY2FycnkgdGhlIG9yaWdpbmFsIHJlcXVlc3QgcGF5bG9hZC4gT3RoZXJ3aXNlIHJlc3BvbnNlIHByb2Nlc3Npbmcgd2lsbAogICAqIGNvbnRpbnVlIG5vcm1hbGx5LgogICAqCiAgICogSWYgaXQgaXMga25vd24gdGhhdCB0aGUgcmVtb3RlIHNlcnZlciByZXF1aXJlcyBhdXRoZW50aWNhdGlvbiBmb3IgYWxsCiAgICogcmVxdWVzdHMsIGl0IGlzIGFkdmlzYWJsZSB0byB1c2UgW2FkZENyZWRlbnRpYWxzXSBkaXJlY3RseSwgb3IgbWFudWFsbHkKICAgKiBzZXQgdGhlIGAnYXV0aG9yaXphdGlvbidgIGhlYWRlciBvbiB0aGUgcmVxdWVzdCB0byBhdm9pZCB0aGUgb3ZlcmhlYWQKICAgKiBvZiBhIGZhaWxlZCByZXF1ZXN0LCBvciBpc3N1ZXMgZHVlIHRvIG1pc3NpbmcgcmVxdWVzdCBwYXlsb2FkIG9uIHJldHJpZWQKICAgKiByZXF1ZXN0LgogICAqLwogIHNldCBhdXRoZW50aWNhdGUoRnV0dXJlPGJvb2w+IGYoVXJpIHVybCwgU3RyaW5nIHNjaGVtZSwgU3RyaW5nIHJlYWxtKSk7CgogIC8qKgogICAqIEFkZCBjcmVkZW50aWFscyB0byBiZSB1c2VkIGZvciBhdXRob3JpemluZyBIVFRQIHJlcXVlc3RzLgogICAqLwogIHZvaWQgYWRkQ3JlZGVudGlhbHMoVXJpIHVybCwgU3RyaW5nIHJlYWxtLCBIdHRwQ2xpZW50Q3JlZGVudGlhbHMgY3JlZGVudGlhbHMpOwoKICAvKioKICAgKiBTZXRzIHRoZSBmdW5jdGlvbiB1c2VkIHRvIHJlc29sdmUgdGhlIHByb3h5IHNlcnZlciB0byBiZSB1c2VkIGZvcgogICAqIG9wZW5pbmcgYSBIVFRQIGNvbm5lY3Rpb24gdG8gdGhlIHNwZWNpZmllZCBbdXJsXS4gSWYgdGhpcwogICAqIGZ1bmN0aW9uIGlzIG5vdCBzZXQsIGRpcmVjdCBjb25uZWN0aW9ucyB3aWxsIGFsd2F5cyBiZSB1c2VkLgogICAqCiAgICogVGhlIHN0cmluZyByZXR1cm5lZCBieSBbZl0gbXVzdCBiZSBpbiB0aGUgZm9ybWF0IHVzZWQgYnkgYnJvd3NlcgogICAqIFBBQyAocHJveHkgYXV0by1jb25maWcpIHNjcmlwdHMuIFRoYXQgaXMgZWl0aGVyCiAgICoKICAgKiAgICAgIkRJUkVDVCIKICAgKgogICAqIGZvciB1c2luZyBhIGRpcmVjdCBjb25uZWN0aW9uIG9yCiAgICoKICAgKiAgICAgIlBST1hZIGhvc3Q6cG9ydCIKICAgKgogICAqIGZvciB1c2luZyB0aGUgcHJveHkgc2VydmVyIFs6aG9zdDpdIG9uIHBvcnQgWzpwb3J0Ol0uCiAgICoKICAgKiBBIGNvbmZpZ3VyYXRpb24gY2FuIGNvbnRhaW4gc2V2ZXJhbCBjb25maWd1cmF0aW9uIGVsZW1lbnRzCiAgICogc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnMsIGUuZy4KICAgKgogICAqICAgICAiUFJPWFkgaG9zdDpwb3J0OyBQUk9YWSBob3N0Mjpwb3J0MjsgRElSRUNUIgogICAqCiAgICogVGhlIHN0YXRpYyBmdW5jdGlvbiBbZmluZFByb3h5RnJvbUVudmlyb25tZW50XSBvbiB0aGlzIGNsYXNzIGNhbgogICAqIGJlIHVzZWQgdG8gaW1wbGVtZW50IHByb3h5IHNlcnZlciByZXNvbHZpbmcgYmFzZWQgb24gZW52aXJvbm1lbnQKICAgKiB2YXJpYWJsZXMuCiAgICovCiAgc2V0IGZpbmRQcm94eShTdHJpbmcgZihVcmkgdXJsKSk7CgogIC8qKgogICAqIEZ1bmN0aW9uIGZvciByZXNvbHZpbmcgdGhlIHByb3h5IHNlcnZlciB0byBiZSB1c2VkIGZvciBhIEhUVFAKICAgKiBjb25uZWN0aW9uIGZyb20gdGhlIHByb3h5IGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVkIHRocm91Z2gKICAgKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCiAgICoKICAgKiBUaGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgdGFrZW4gaW50byBhY2NvdW50OgogICAqCiAgICogICAgIGh0dHBfcHJveHkKICAgKiAgICAgaHR0cHNfcHJveHkKICAgKiAgICAgbm9fcHJveHkKICAgKiAgICAgSFRUUF9QUk9YWQogICAqICAgICBIVFRQU19QUk9YWQogICAqICAgICBOT19QUk9YWQogICAqCiAgICogWzpodHRwX3Byb3h5Ol0gYW5kIFs6SFRUUF9QUk9YWTpdIHNwZWNpZnkgdGhlIHByb3h5IHNlcnZlciB0byB1c2UgZm9yCiAgICogaHR0cDovLyB1cmxzLiBVc2UgdGhlIGZvcm1hdCBbOmhvc3RuYW1lOnBvcnQ6XS4gSWYgbm8gcG9ydCBpcyB1c2VkIGEKICAgKiBkZWZhdWx0IG9mIDEwODAgd2lsbCBiZSB1c2VkLiBJZiBib3RoIGFyZSBzZXQgdGhlIGxvd2VyIGNhc2Ugb25lIHRha2VzCiAgICogcHJlY2VkZW5jZS4KICAgKgogICAqIFs6aHR0cHNfcHJveHk6XSBhbmQgWzpIVFRQU19QUk9YWTpdIHNwZWNpZnkgdGhlIHByb3h5IHNlcnZlciB0byB1c2UgZm9yCiAgICogaHR0cHM6Ly8gdXJscy4gVXNlIHRoZSBmb3JtYXQgWzpob3N0bmFtZTpwb3J0Ol0uIElmIG5vIHBvcnQgaXMgdXNlZCBhCiAgICogZGVmYXVsdCBvZiAxMDgwIHdpbGwgYmUgdXNlZC4gSWYgYm90aCBhcmUgc2V0IHRoZSBsb3dlciBjYXNlIG9uZSB0YWtlcwogICAqIHByZWNlZGVuY2UuCiAgICoKICAgKiBbOm5vX3Byb3h5Ol0gYW5kIFs6Tk9fUFJPWFk6XSBzcGVjaWZ5IGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YKICAgKiBwb3N0Zml4ZXMgb2YgaG9zdG5hbWVzIGZvciB3aGljaCBub3QgdG8gdXNlIHRoZSBwcm94eQogICAqIHNlcnZlci4gRS5nLiB0aGUgdmFsdWUgImxvY2FsaG9zdCwxMjcuMC4wLjEiIHdpbGwgbWFrZSByZXF1ZXN0cwogICAqIHRvIGJvdGggImxvY2FsaG9zdCIgYW5kICIxMjcuMC4wLjEiIG5vdCB1c2UgYSBwcm94eS4gSWYgYm90aCBhcmUgc2V0CiAgICogdGhlIGxvd2VyIGNhc2Ugb25lIHRha2VzIHByZWNlZGVuY2UuCiAgICoKICAgKiBUbyBhY3RpdmF0ZSB0aGlzIHdheSBvZiByZXNvbHZpbmcgcHJveGllcyBhc3NpZ24gdGhpcyBmdW5jdGlvbiB0bwogICAqIHRoZSBbZmluZFByb3h5XSBwcm9wZXJ0eSBvbiB0aGUgW0h0dHBDbGllbnRdLgogICAqCiAgICogICAgIEh0dHBDbGllbnQgY2xpZW50ID0gbmV3IEh0dHBDbGllbnQoKTsKICAgKiAgICAgY2xpZW50LmZpbmRQcm94eSA9IEh0dHBDbGllbnQuZmluZFByb3h5RnJvbUVudmlyb25tZW50OwogICAqCiAgICogSWYgeW91IGRvbid0IHdhbnQgdG8gdXNlIHRoZSBzeXN0ZW0gZW52aXJvbm1lbnQgeW91IGNhbiB1c2UgYQogICAqIGRpZmZlcmVudCBvbmUgYnkgd3JhcHBpbmcgdGhlIGZ1bmN0aW9uLgogICAqCiAgICogICAgIEh0dHBDbGllbnQgY2xpZW50ID0gbmV3IEh0dHBDbGllbnQoKTsKICAgKiAgICAgY2xpZW50LmZpbmRQcm94eSA9ICh1cmwpIHsKICAgKiAgICAgICByZXR1cm4gSHR0cENsaWVudC5maW5kUHJveHlGcm9tRW52aXJvbm1lbnQoCiAgICogICAgICAgICAgIHVybCwgZW52aXJvbm1lbnQ6IHsiaHR0cF9wcm94eSI6IC4uLiwgIm5vX3Byb3h5IjogLi4ufSk7CiAgICogICAgIH0KICAgKgogICAqIElmIGEgcHJveHkgcmVxdWlyZXMgYXV0aGVudGljYXRpb24gaXQgaXMgcG9zc2libGUgdG8gY29uZmlndXJlCiAgICogdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBhcyB3ZWxsLiBVc2UgdGhlIGZvcm1hdAogICAqIFs6dXNlcm5hbWU6cGFzc3dvcmRAaG9zdG5hbWU6cG9ydDpdIHRvIGluY2x1ZGUgdGhlIHVzZXJuYW1lIGFuZAogICAqIHBhc3N3b3JkLiBBbHRlcm5hdGl2ZWx5IHRoZSBBUEkgW2FkZFByb3h5Q3JlZGVudGlhbHNdIGNhbiBiZSB1c2VkCiAgICogdG8gc2V0IGNyZWRlbnRpYWxzIGZvciBwcm94aWVzIHdoaWNoIHJlcXVpcmUgYXV0aGVudGljYXRpb24uCiAgICovCiAgc3RhdGljIFN0cmluZyBmaW5kUHJveHlGcm9tRW52aXJvbm1lbnQoVXJpIHVybCwKICAgICAge01hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnR9KSB7CiAgICBIdHRwT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IEh0dHBPdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gX0h0dHBDbGllbnQuX2ZpbmRQcm94eUZyb21FbnZpcm9ubWVudCh1cmwsIGVudmlyb25tZW50KTsKICAgIH0KICAgIHJldHVybiBvdmVycmlkZXMuZmluZFByb3h5RnJvbUVudmlyb25tZW50KHVybCwgZW52aXJvbm1lbnQpOwogIH0KCiAgLyoqCiAgICogU2V0cyB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYSBwcm94eSBpcyByZXF1ZXN0aW5nCiAgICogYXV0aGVudGljYXRpb24uIEluZm9ybWF0aW9uIG9uIHRoZSBwcm94eSBpbiB1c2UgYW5kIHRoZSBzZWN1cml0eQogICAqIHJlYWxtIGZvciB0aGUgYXV0aGVudGljYXRpb24gYXJlIHBhc3NlZCBpbiB0aGUgYXJndW1lbnRzIFtob3N0XSwKICAgKiBbcG9ydF0gYW5kIFtyZWFsbV0uCiAgICoKICAgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIFtGdXR1cmVdIHdoaWNoIHNob3VsZCBjb21wbGV0ZSB3aGVuIHRoZQogICAqIGF1dGhlbnRpY2F0aW9uIGhhcyBiZWVuIHJlc29sdmVkLiBJZiBjcmVkZW50aWFscyBjYW5ub3QgYmUKICAgKiBwcm92aWRlZCB0aGUgW0Z1dHVyZV0gc2hvdWxkIGNvbXBsZXRlIHdpdGggWzpmYWxzZTpdLiBJZgogICAqIGNyZWRlbnRpYWxzIGFyZSBhdmFpbGFibGUgdGhlIGZ1bmN0aW9uIHNob3VsZCBhZGQgdGhlc2UgdXNpbmcKICAgKiBbYWRkUHJveHlDcmVkZW50aWFsc10gYmVmb3JlIGNvbXBsZXRpbmcgdGhlIFtGdXR1cmVdIHdpdGggdGhlIHZhbHVlCiAgICogWzp0cnVlOl0uCiAgICoKICAgKiBJZiB0aGUgW0Z1dHVyZV0gY29tcGxldGVzIHdpdGggWzp0cnVlOl0gdGhlIHJlcXVlc3Qgd2lsbCBiZSByZXRyaWVkCiAgICogdXNpbmcgdGhlIHVwZGF0ZWQgY3JlZGVudGlhbHMuIE90aGVyd2lzZSByZXNwb25zZSBwcm9jZXNzaW5nIHdpbGwKICAgKiBjb250aW51ZSBub3JtYWxseS4KICAgKi8KICBzZXQgYXV0aGVudGljYXRlUHJveHkoCiAgICAgIEZ1dHVyZTxib29sPiBmKFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIHNjaGVtZSwgU3RyaW5nIHJlYWxtKSk7CgogIC8qKgogICAqIEFkZCBjcmVkZW50aWFscyB0byBiZSB1c2VkIGZvciBhdXRob3JpemluZyBIVFRQIHByb3hpZXMuCiAgICovCiAgdm9pZCBhZGRQcm94eUNyZWRlbnRpYWxzKAogICAgICBTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyByZWFsbSwgSHR0cENsaWVudENyZWRlbnRpYWxzIGNyZWRlbnRpYWxzKTsKCiAgLyoqCiAgICogU2V0cyBhIGNhbGxiYWNrIHRoYXQgd2lsbCBkZWNpZGUgd2hldGhlciB0byBhY2NlcHQgYSBzZWN1cmUgY29ubmVjdGlvbgogICAqIHdpdGggYSBzZXJ2ZXIgY2VydGlmaWNhdGUgdGhhdCBjYW5ub3QgYmUgYXV0aGVudGljYXRlZCBieSBhbnkgb2Ygb3VyCiAgICogdHJ1c3RlZCByb290IGNlcnRpZmljYXRlcy4KICAgKgogICAqIFdoZW4gYW4gc2VjdXJlIEhUVFAgcmVxdWVzdCBpZiBtYWRlLCB1c2luZyB0aGlzIEh0dHBDbGllbnQsIGFuZCB0aGUKICAgKiBzZXJ2ZXIgcmV0dXJucyBhIHNlcnZlciBjZXJ0aWZpY2F0ZSB0aGF0IGNhbm5vdCBiZSBhdXRoZW50aWNhdGVkLCB0aGUKICAgKiBjYWxsYmFjayBpcyBjYWxsZWQgYXN5bmNocm9ub3VzbHkgd2l0aCB0aGUgW1g1MDlDZXJ0aWZpY2F0ZV0gb2JqZWN0IGFuZAogICAqIHRoZSBzZXJ2ZXIncyBob3N0bmFtZSBhbmQgcG9ydC4gIElmIHRoZSB2YWx1ZSBvZiBbYmFkQ2VydGlmaWNhdGVDYWxsYmFja10KICAgKiBpcyBbOm51bGw6XSwgdGhlIGJhZCBjZXJ0aWZpY2F0ZSBpcyByZWplY3RlZCwgYXMgaWYgdGhlIGNhbGxiYWNrCiAgICogcmV0dXJuZWQgWzpmYWxzZTpdCiAgICoKICAgKiBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVlLCB0aGUgc2VjdXJlIGNvbm5lY3Rpb24gaXMgYWNjZXB0ZWQgYW5kIHRoZQogICAqIFs6RnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PjpdIHRoYXQgd2FzIHJldHVybmVkIGZyb20gdGhlIGNhbGwgbWFraW5nIHRoZQogICAqIHJlcXVlc3QgY29tcGxldGVzIHdpdGggYSB2YWxpZCBIdHRwUmVxdWVzdCBvYmplY3QuIElmIHRoZSBjYWxsYmFjayByZXR1cm5zCiAgICogZmFsc2UsIHRoZSBbOkZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD46XSBjb21wbGV0ZXMgd2l0aCBhbiBleGNlcHRpb24uCiAgICoKICAgKiBJZiBhIGJhZCBjZXJ0aWZpY2F0ZSBpcyByZWNlaXZlZCBvbiBhIGNvbm5lY3Rpb24gYXR0ZW1wdCwgdGhlIGxpYnJhcnkgY2FsbHMKICAgKiB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgdGhlIHZhbHVlIG9mIGJhZENlcnRpZmljYXRlQ2FsbGJhY2sgYXQgdGhlIHRpbWUKICAgKiB0aGUgcmVxdWVzdCBpcyBtYWRlLCBldmVuIGlmIHRoZSB2YWx1ZSBvZiBiYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrCiAgICogaGFzIGNoYW5nZWQgc2luY2UgdGhlbi4KICAgKi8KICBzZXQgYmFkQ2VydGlmaWNhdGVDYWxsYmFjaygKICAgICAgYm9vbCBjYWxsYmFjayhYNTA5Q2VydGlmaWNhdGUgY2VydCwgU3RyaW5nIGhvc3QsIGludCBwb3J0KSk7CgogIC8vLyBTaHV0cyBkb3duIHRoZSBIVFRQIGNsaWVudC4KICAvLy8KICAvLy8gSWYgW2ZvcmNlXSBpcyBgZmFsc2VgICh0aGUgZGVmYXVsdCkgdGhlIFtIdHRwQ2xpZW50XSB3aWxsIGJlIGtlcHQgYWxpdmUKICAvLy8gdW50aWwgYWxsIGFjdGl2ZSBjb25uZWN0aW9ucyBhcmUgZG9uZS4gSWYgW2ZvcmNlXSBpcyBgdHJ1ZWAgYW55IGFjdGl2ZQogIC8vLyBjb25uZWN0aW9ucyB3aWxsIGJlIGNsb3NlZCB0byBpbW1lZGlhdGVseSByZWxlYXNlIGFsbCByZXNvdXJjZXMuIFRoZXNlCiAgLy8vIGNsb3NlZCBjb25uZWN0aW9ucyB3aWxsIHJlY2VpdmUgYW4gZXJyb3IgZXZlbnQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgY2xpZW50CiAgLy8vIHdhcyBzaHV0IGRvd24uIEluIGJvdGggY2FzZXMgdHJ5aW5nIHRvIGVzdGFibGlzaCBhIG5ldyBjb25uZWN0aW9uIGFmdGVyCiAgLy8vIGNhbGxpbmcgW2Nsb3NlXSB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbi4KICB2b2lkIGNsb3NlKHtib29sIGZvcmNlOiBmYWxzZX0pOwp9CgovKioKICogSFRUUCByZXF1ZXN0IGZvciBhIGNsaWVudCBjb25uZWN0aW9uLgogKgogKiBUbyBzZXQgdXAgYSByZXF1ZXN0LCBzZXQgdGhlIGhlYWRlcnMgdXNpbmcgdGhlIGhlYWRlcnMgcHJvcGVydHkKICogcHJvdmlkZWQgaW4gdGhpcyBjbGFzcyBhbmQgd3JpdGUgdGhlIGRhdGEgdG8gdGhlIGJvZHkgb2YgdGhlIHJlcXVlc3QuCiAqIEh0dHBDbGllbnRSZXF1ZXN0IGlzIGFuIFtJT1NpbmtdLiBVc2UgdGhlIG1ldGhvZHMgZnJvbSBJT1NpbmssCiAqIHN1Y2ggYXMgd3JpdGVDaGFyQ29kZSgpLCB0byB3cml0ZSB0aGUgYm9keSBvZiB0aGUgSFRUUAogKiByZXF1ZXN0LiBXaGVuIG9uZSBvZiB0aGUgSU9TaW5rIG1ldGhvZHMgaXMgdXNlZCBmb3IgdGhlIGZpcnN0CiAqIHRpbWUsIHRoZSByZXF1ZXN0IGhlYWRlciBpcyBzZW50LiBDYWxsaW5nIGFueSBtZXRob2RzIHRoYXQKICogY2hhbmdlIHRoZSBoZWFkZXIgYWZ0ZXIgaXQgaXMgc2VudCB0aHJvd3MgYW4gZXhjZXB0aW9uLgogKgogKiBXaGVuIHdyaXRpbmcgc3RyaW5nIGRhdGEgdGhyb3VnaCB0aGUgW0lPU2lua10gdGhlCiAqIGVuY29kaW5nIHVzZWQgaXMgZGV0ZXJtaW5lZCBmcm9tIHRoZSAiY2hhcnNldCIgcGFyYW1ldGVyIG9mCiAqIHRoZSAiQ29udGVudC1UeXBlIiBoZWFkZXIuCiAqCiAqICAgICBIdHRwQ2xpZW50UmVxdWVzdCByZXF1ZXN0ID0gLi4uCiAqICAgICByZXF1ZXN0LmhlYWRlcnMuY29udGVudFR5cGUKICogICAgICAgICA9IG5ldyBDb250ZW50VHlwZSgiYXBwbGljYXRpb24iLCAianNvbiIsIGNoYXJzZXQ6ICJ1dGYtOCIpOwogKiAgICAgcmVxdWVzdC53cml0ZSguLi4pOyAgLy8gU3RyaW5ncyB3cml0dGVuIHdpbGwgYmUgVVRGLTggZW5jb2RlZC4KICoKICogSWYgbm8gY2hhcnNldCBpcyBwcm92aWRlZCB0aGUgZGVmYXVsdCBvZiBJU08tODg1OS0xIChMYXRpbiAxKSBpcwogKiBiZSB1c2VkLgogKgogKiAgICAgSHR0cENsaWVudFJlcXVlc3QgcmVxdWVzdCA9IC4uLgogKiAgICAgcmVxdWVzdC5oZWFkZXJzLmFkZChIdHRwSGVhZGVycy5jb250ZW50VHlwZUhlYWRlciwgInRleHQvcGxhaW4iKTsKICogICAgIHJlcXVlc3Qud3JpdGUoLi4uKTsgIC8vIFN0cmluZ3Mgd3JpdHRlbiB3aWxsIGJlIElTTy04ODU5LTEgZW5jb2RlZC4KICoKICogQW4gZXhjZXB0aW9uIGlzIHRocm93biBpZiB5b3UgdXNlIGFuIHVuc3VwcG9ydGVkIGVuY29kaW5nIGFuZCB0aGUKICogYHdyaXRlKClgIG1ldGhvZCBiZWluZyB1c2VkIHRha2VzIGEgc3RyaW5nIHBhcmFtZXRlci4KICovCmFic3RyYWN0IGNsYXNzIEh0dHBDbGllbnRSZXF1ZXN0IGltcGxlbWVudHMgSU9TaW5rIHsKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSByZXF1ZXN0ZWQgcGVyc2lzdGVudCBjb25uZWN0aW9uIHN0YXRlLgogICAqCiAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgWzp0cnVlOl0uCiAgICovCiAgYm9vbCBwZXJzaXN0ZW50Q29ubmVjdGlvbjsKCiAgLyoqCiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gWzp0cnVlOl0gaWYgdGhpcyByZXF1ZXN0IHNob3VsZAogICAqIGF1dG9tYXRpY2FsbHkgZm9sbG93IHJlZGlyZWN0cy4gVGhlIGRlZmF1bHQgaXMgWzp0cnVlOl0uCiAgICoKICAgKiBBdXRvbWF0aWMgcmVkaXJlY3Qgd2lsbCBvbmx5IGhhcHBlbiBmb3IgIkdFVCIgYW5kICJIRUFEIiByZXF1ZXN0cwogICAqIGFuZCBvbmx5IGZvciB0aGUgc3RhdHVzIGNvZGVzIFs6SHR0cFN0YXR1cy5tb3ZlZFBlcm1hbmVudGx5Ol0KICAgKiAoMzAxKSwgWzpIdHRwU3RhdHVzLmZvdW5kOl0gKDMwMiksCiAgICogWzpIdHRwU3RhdHVzLm1vdmVkVGVtcG9yYXJpbHk6XSAoMzAyLCBhbGlhcyBmb3IKICAgKiBbOkh0dHBTdGF0dXMuZm91bmQ6XSksIFs6SHR0cFN0YXR1cy5zZWVPdGhlcjpdICgzMDMpIGFuZAogICAqIFs6SHR0cFN0YXR1cy50ZW1wb3JhcnlSZWRpcmVjdDpdICgzMDcpLiBGb3IKICAgKiBbOkh0dHBTdGF0dXMuc2VlT3RoZXI6XSAoMzAzKSBhdXRvbWF0aWMgcmVkaXJlY3Qgd2lsbCBhbHNvIGhhcHBlbgogICAqIGZvciAiUE9TVCIgcmVxdWVzdHMgd2l0aCB0aGUgbWV0aG9kIGNoYW5nZWQgdG8gIkdFVCIgd2hlbgogICAqIGZvbGxvd2luZyB0aGUgcmVkaXJlY3QuCiAgICoKICAgKiBBbGwgaGVhZGVycyBhZGRlZCB0byB0aGUgcmVxdWVzdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSByZWRpcmVjdGlvbgogICAqIHJlcXVlc3QocykuIEhvd2V2ZXIsIGFueSBib2R5IHNlbmQgd2l0aCB0aGUgcmVxdWVzdCB3aWxsIG5vdCBiZQogICAqIHBhcnQgb2YgdGhlIHJlZGlyZWN0aW9uIHJlcXVlc3QocykuCiAgICovCiAgYm9vbCBmb2xsb3dSZWRpcmVjdHM7CgogIC8qKgogICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZWRpcmVjdHMgdG8gZm9sbG93CiAgICogd2hlbiBbZm9sbG93UmVkaXJlY3RzXSBpcyBgdHJ1ZWAuIElmIHRoaXMgbnVtYmVyIGlzIGV4Y2VlZGVkCiAgICogYW4gZXJyb3IgZXZlbnQgd2lsbCBiZSBhZGRlZCB3aXRoIGEgW1JlZGlyZWN0RXhjZXB0aW9uXS4KICAgKgogICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDUuCiAgICovCiAgaW50IG1heFJlZGlyZWN0czsKCiAgLyoqCiAgICogVGhlIG1ldGhvZCBvZiB0aGUgcmVxdWVzdC4KICAgKi8KICBTdHJpbmcgZ2V0IG1ldGhvZDsKCiAgLyoqCiAgICogVGhlIHVyaSBvZiB0aGUgcmVxdWVzdC4KICAgKi8KICBVcmkgZ2V0IHVyaTsKCiAgLy8vIEdldHMgYW5kIHNldHMgdGhlIGNvbnRlbnQgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LgogIC8vLwogIC8vLyBJZiB0aGUgc2l6ZSBvZiB0aGUgcmVxdWVzdCBpcyBub3Qga25vd24gaW4gYWR2YW5jZSBzZXQgY29udGVudCBsZW5ndGggdG8KICAvLy8gLTEsIHdoaWNoIGlzIGFsc28gdGhlIGRlZmF1bHQuCiAgaW50IGNvbnRlbnRMZW5ndGg7CgogIC8qKgogICAqIEdldHMgb3Igc2V0cyBpZiB0aGUgW0h0dHBDbGllbnRSZXF1ZXN0XSBzaG91bGQgYnVmZmVyIG91dHB1dC4KICAgKgogICAqIERlZmF1bHQgdmFsdWUgaXMgYHRydWVgLgogICAqCiAgICogX19Ob3RlX186IERpc2FibGluZyBidWZmZXJpbmcgb2YgdGhlIG91dHB1dCBjYW4gcmVzdWx0IGluIHZlcnkgcG9vcgogICAqIHBlcmZvcm1hbmNlLCB3aGVuIHdyaXRpbmcgbWFueSBzbWFsbCBjaHVua3MuCiAgICovCiAgYm9vbCBidWZmZXJPdXRwdXQ7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGNsaWVudCByZXF1ZXN0IGhlYWRlcnMuCiAgICoKICAgKiBUaGUgY2xpZW50IHJlcXVlc3QgaGVhZGVycyBjYW4gYmUgbW9kaWZpZWQgdW50aWwgdGhlIGNsaWVudAogICAqIHJlcXVlc3QgYm9keSBpcyB3cml0dGVuIHRvIG9yIGNsb3NlZC4gQWZ0ZXIgdGhhdCB0aGV5IGJlY29tZQogICAqIGltbXV0YWJsZS4KICAgKi8KICBIdHRwSGVhZGVycyBnZXQgaGVhZGVyczsKCiAgLyoqCiAgICogQ29va2llcyB0byBwcmVzZW50IHRvIHRoZSBzZXJ2ZXIgKGluIHRoZSAnY29va2llJyBoZWFkZXIpLgogICAqLwogIExpc3Q8Q29va2llPiBnZXQgY29va2llczsKCiAgLy8vIEEgW0h0dHBDbGllbnRSZXNwb25zZV0gZnV0dXJlIHRoYXQgd2lsbCBjb21wbGV0ZSBvbmNlIHRoZSByZXNwb25zZSBpcwogIC8vLyBhdmFpbGFibGUuCiAgLy8vCiAgLy8vIElmIGFuIGVycm9yIG9jY3VycyBiZWZvcmUgdGhlIHJlc3BvbnNlIGlzIGF2YWlsYWJsZSwgdGhpcyBmdXR1cmUgd2lsbAogIC8vLyBjb21wbGV0ZSB3aXRoIGFuIGVycm9yLgogIEZ1dHVyZTxIdHRwQ2xpZW50UmVzcG9uc2U+IGdldCBkb25lOwoKICAvKioKICAgKiBDbG9zZSB0aGUgcmVxdWVzdCBmb3IgaW5wdXQuIFJldHVybnMgdGhlIHZhbHVlIG9mIFtkb25lXS4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlc3BvbnNlPiBjbG9zZSgpOwoKICAvLy8gR2V0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2xpZW50IGNvbm5lY3Rpb24uCiAgLy8vCiAgLy8vIFJldHVybnMgWzpudWxsOl0gaWYgdGhlIHNvY2tldCBpcyBub3QgYXZhaWxhYmxlLgogIEh0dHBDb25uZWN0aW9uSW5mbyBnZXQgY29ubmVjdGlvbkluZm87Cn0KCi8qKgogKiBIVFRQIHJlc3BvbnNlIGZvciBhIGNsaWVudCBjb25uZWN0aW9uLgogKgogKiBUaGUgYm9keSBvZiBhIFtIdHRwQ2xpZW50UmVzcG9uc2VdIG9iamVjdCBpcyBhCiAqIFtTdHJlYW1dIG9mIGRhdGEgZnJvbSB0aGUgc2VydmVyLiBMaXN0ZW4gdG8gdGhlIGJvZHkgdG8gaGFuZGxlCiAqIHRoZSBkYXRhIGFuZCBiZSBub3RpZmllZCB3aGVuIHRoZSBlbnRpcmUgYm9keSBpcyByZWNlaXZlZC4KICoKICogICAgIG5ldyBIdHRwQ2xpZW50KCkuZ2V0KCdsb2NhbGhvc3QnLCA4MCwgJy9maWxlLnR4dCcpCiAqICAgICAgICAgIC50aGVuKChIdHRwQ2xpZW50UmVxdWVzdCByZXF1ZXN0KSA9PiByZXF1ZXN0LmNsb3NlKCkpCiAqICAgICAgICAgIC50aGVuKChIdHRwQ2xpZW50UmVzcG9uc2UgcmVzcG9uc2UpIHsKICogICAgICAgICAgICByZXNwb25zZS50cmFuc2Zvcm0odXRmOC5kZWNvZGVyKS5saXN0ZW4oKGNvbnRlbnRzKSB7CiAqICAgICAgICAgICAgICAvLyBoYW5kbGUgZGF0YQogKiAgICAgICAgICAgIH0pOwogKiAgICAgICAgICB9KTsKICovCmFic3RyYWN0IGNsYXNzIEh0dHBDbGllbnRSZXNwb25zZSBpbXBsZW1lbnRzIFN0cmVhbTxMaXN0PGludD4+IHsKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzdGF0dXMgY29kZS4KICAgKgogICAqIFRoZSBzdGF0dXMgY29kZSBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIGJvZHkgaXMgd3JpdHRlbgogICAqIHRvLiBTZXR0aW5nIHRoZSBzdGF0dXMgY29kZSBhZnRlciB3cml0aW5nIHRvIHRoZSBib2R5IHdpbGwgdGhyb3cKICAgKiBhIGBTdGF0ZUVycm9yYC4KICAgKi8KICBpbnQgZ2V0IHN0YXR1c0NvZGU7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHJlYXNvbiBwaHJhc2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGF0dXMgY29kZS4KICAgKgogICAqIFRoZSByZWFzb24gcGhyYXNlIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgYm9keSBpcyB3cml0dGVuCiAgICogdG8uIFNldHRpbmcgdGhlIHJlYXNvbiBwaHJhc2UgYWZ0ZXIgd3JpdGluZyB0byB0aGUgYm9keSB3aWxsIHRocm93CiAgICogYSBgU3RhdGVFcnJvcmAuCiAgICovCiAgU3RyaW5nIGdldCByZWFzb25QaHJhc2U7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGNvbnRlbnQgbGVuZ3RoIG9mIHRoZSByZXNwb25zZSBib2R5LiBSZXR1cm5zIC0xIGlmIHRoZSBzaXplIG9mCiAgICogdGhlIHJlc3BvbnNlIGJvZHkgaXMgbm90IGtub3duIGluIGFkdmFuY2UuCiAgICoKICAgKiBJZiB0aGUgY29udGVudCBsZW5ndGggbmVlZHMgdG8gYmUgc2V0LCBpdCBtdXN0IGJlIHNldCBiZWZvcmUgdGhlCiAgICogYm9keSBpcyB3cml0dGVuIHRvLiBTZXR0aW5nIHRoZSBjb250ZW50IGxlbmd0aCBhZnRlciB3cml0aW5nIHRvIHRoZSBib2R5CiAgICogd2lsbCB0aHJvdyBhIGBTdGF0ZUVycm9yYC4KICAgKi8KICBpbnQgZ2V0IGNvbnRlbnRMZW5ndGg7CgogIC8vLyBUaGUgY29tcHJlc3Npb24gc3RhdGUgb2YgdGhlIHJlc3BvbnNlLgogIC8vLwogIC8vLyBUaGlzIHNwZWNpZmllcyB3aGV0aGVyIHRoZSByZXNwb25zZSBieXRlcyB3ZXJlIGNvbXByZXNzZWQgd2hlbiB0aGV5IHdlcmUKICAvLy8gcmVjZWl2ZWQgYWNyb3NzIHRoZSB3aXJlIGFuZCB3aGV0aGVyIGNhbGxlcnMgd2lsbCByZWNlaXZlIGNvbXByZXNzZWQKICAvLy8gb3IgdW5jb21wcmVzc2VkIGJ5dGVzIHdoZW4gdGhleSBsaXN0ZWQgdG8gdGhpcyByZXNwb25zZSdzIGJ5dGUgc3RyZWFtLgogIEBTaW5jZSgiMi40IikKICBIdHRwQ2xpZW50UmVzcG9uc2VDb21wcmVzc2lvblN0YXRlIGdldCBjb21wcmVzc2lvblN0YXRlOwoKICAvKioKICAgKiBHZXRzIHRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gc3RhdGUgcmV0dXJuZWQgYnkgdGhlIHNlcnZlci4KICAgKgogICAqIElmIHRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gc3RhdGUgbmVlZHMgdG8gYmUgc2V0LCBpdCBtdXN0IGJlCiAgICogc2V0IGJlZm9yZSB0aGUgYm9keSBpcyB3cml0dGVuIHRvLiBTZXR0aW5nIHRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gc3RhdGUKICAgKiBhZnRlciB3cml0aW5nIHRvIHRoZSBib2R5IHdpbGwgdGhyb3cgYSBgU3RhdGVFcnJvcmAuCiAgICovCiAgYm9vbCBnZXQgcGVyc2lzdGVudENvbm5lY3Rpb247CgogIC8qKgogICAqIFJldHVybnMgd2hldGhlciB0aGUgc3RhdHVzIGNvZGUgaXMgb25lIG9mIHRoZSBub3JtYWwgcmVkaXJlY3QKICAgKiBjb2RlcyBbSHR0cFN0YXR1cy5tb3ZlZFBlcm1hbmVudGx5XSwgW0h0dHBTdGF0dXMuZm91bmRdLAogICAqIFtIdHRwU3RhdHVzLm1vdmVkVGVtcG9yYXJpbHldLCBbSHR0cFN0YXR1cy5zZWVPdGhlcl0gYW5kCiAgICogW0h0dHBTdGF0dXMudGVtcG9yYXJ5UmVkaXJlY3RdLgogICAqLwogIGJvb2wgZ2V0IGlzUmVkaXJlY3Q7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHNlcmllcyBvZiByZWRpcmVjdHMgdGhpcyBjb25uZWN0aW9uIGhhcyBiZWVuIHRocm91Z2guIFRoZQogICAqIGxpc3Qgd2lsbCBiZSBlbXB0eSBpZiBubyByZWRpcmVjdHMgd2VyZSBmb2xsb3dlZC4gW3JlZGlyZWN0c10gd2lsbCBiZQogICAqIHVwZGF0ZWQgYm90aCBpbiB0aGUgY2FzZSBvZiBhbiBhdXRvbWF0aWMgYW5kIGEgbWFudWFsIHJlZGlyZWN0LgogICAqLwogIExpc3Q8UmVkaXJlY3RJbmZvPiBnZXQgcmVkaXJlY3RzOwoKICAvKioKICAgKiBSZWRpcmVjdHMgdGhpcyBjb25uZWN0aW9uIHRvIGEgbmV3IFVSTC4gVGhlIGRlZmF1bHQgdmFsdWUgZm9yCiAgICogW21ldGhvZF0gaXMgdGhlIG1ldGhvZCBmb3IgdGhlIGN1cnJlbnQgcmVxdWVzdC4gVGhlIGRlZmF1bHQgdmFsdWUKICAgKiBmb3IgW3VybF0gaXMgdGhlIHZhbHVlIG9mIHRoZSBbSHR0cEhlYWRlcnMubG9jYXRpb25IZWFkZXJdIGhlYWRlciBvZgogICAqIHRoZSBjdXJyZW50IHJlc3BvbnNlLiBBbGwgYm9keSBkYXRhIG11c3QgaGF2ZSBiZWVuIHJlYWQgZnJvbSB0aGUKICAgKiBjdXJyZW50IHJlc3BvbnNlIGJlZm9yZSBjYWxsaW5nIFtyZWRpcmVjdF0uCiAgICoKICAgKiBBbGwgaGVhZGVycyBhZGRlZCB0byB0aGUgcmVxdWVzdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSByZWRpcmVjdGlvbgogICAqIHJlcXVlc3QuIEhvd2V2ZXIsIGFueSBib2R5IHNlbnQgd2l0aCB0aGUgcmVxdWVzdCB3aWxsIG5vdCBiZQogICAqIHBhcnQgb2YgdGhlIHJlZGlyZWN0aW9uIHJlcXVlc3QuCiAgICoKICAgKiBJZiBbZm9sbG93TG9vcHNdIGlzIHNldCB0byBbOnRydWU6XSwgcmVkaXJlY3Qgd2lsbCBmb2xsb3cgdGhlIHJlZGlyZWN0LAogICAqIGV2ZW4gaWYgdGhlIFVSTCB3YXMgYWxyZWFkeSB2aXNpdGVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBbOmZhbHNlOl0uCiAgICoKICAgKiBUaGUgbWV0aG9kIHdpbGwgaWdub3JlIFtIdHRwQ2xpZW50UmVxdWVzdC5tYXhSZWRpcmVjdHNdCiAgICogYW5kIHdpbGwgYWx3YXlzIHBlcmZvcm0gdGhlIHJlZGlyZWN0LgogICAqLwogIEZ1dHVyZTxIdHRwQ2xpZW50UmVzcG9uc2U+IHJlZGlyZWN0KAogICAgICBbU3RyaW5nIG1ldGhvZCwgVXJpIHVybCwgYm9vbCBmb2xsb3dMb29wc10pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBjbGllbnQgcmVzcG9uc2UgaGVhZGVycy4KICAgKgogICAqIFRoZSBjbGllbnQgcmVzcG9uc2UgaGVhZGVycyBhcmUgaW1tdXRhYmxlLgogICAqLwogIEh0dHBIZWFkZXJzIGdldCBoZWFkZXJzOwoKICAvKioKICAgKiBEZXRhY2ggdGhlIHVuZGVybHlpbmcgc29ja2V0IGZyb20gdGhlIEhUVFAgY2xpZW50LiBXaGVuIHRoZQogICAqIHNvY2tldCBpcyBkZXRhY2hlZCB0aGUgSFRUUCBjbGllbnQgd2lsbCBubyBsb25nZXIgcGVyZm9ybSBhbnkKICAgKiBvcGVyYXRpb25zIG9uIGl0LgogICAqCiAgICogVGhpcyBpcyBub3JtYWxseSB1c2VkIHdoZW4gYSBIVFRQIHVwZ3JhZGUgaXMgbmVnb3RpYXRlZCBhbmQgdGhlCiAgICogY29tbXVuaWNhdGlvbiBzaG91bGQgY29udGludWUgd2l0aCBhIGRpZmZlcmVudCBwcm90b2NvbC4KICAgKi8KICBGdXR1cmU8U29ja2V0PiBkZXRhY2hTb2NrZXQoKTsKCiAgLyoqCiAgICogQ29va2llcyBzZXQgYnkgdGhlIHNlcnZlciAoZnJvbSB0aGUgJ3NldC1jb29raWUnIGhlYWRlcikuCiAgICovCiAgTGlzdDxDb29raWU+IGdldCBjb29raWVzOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBjZXJ0aWZpY2F0ZSBvZiB0aGUgSFRUUFMgc2VydmVyIHByb3ZpZGluZyB0aGUgcmVzcG9uc2UuCiAgICogUmV0dXJucyBudWxsIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCBhIHNlY3VyZSBUTFMgb3IgU1NMIGNvbm5lY3Rpb24uCiAgICovCiAgWDUwOUNlcnRpZmljYXRlIGdldCBjZXJ0aWZpY2F0ZTsKCiAgLyoqCiAgICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2xpZW50IGNvbm5lY3Rpb24uIFJldHVybnMgWzpudWxsOl0gaWYgdGhlIHNvY2tldAogICAqIGlzIG5vdCBhdmFpbGFibGUuCiAgICovCiAgSHR0cENvbm5lY3Rpb25JbmZvIGdldCBjb25uZWN0aW9uSW5mbzsKfQoKLy8vIEVudW0gdGhhdCBzcGVjaWZpZXMgdGhlIGNvbXByZXNzaW9uIHN0YXRlIG9mIHRoZSBieXRlIHN0cmVhbSBvZiBhbgovLy8gW0h0dHBDbGllbnRSZXNwb25zZV0uCi8vLwovLy8gVGhlIHZhbHVlcyBoZXJlaW4gYWxsb3cgY2FsbGVycyB0byBhbnN3ZXIgdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMgYXMgdGhleQovLy8gcGVydGFpbiB0byBhbiBbSHR0cENsaWVudFJlc3BvbnNlXToKLy8vCi8vLyAgKiBDYW4gdGhlIHZhbHVlIG9mIHRoZSByZXNwb25zZSdzIGBDb250ZW50LUxlbmd0aGAgSFRUUCBoZWFkZXIgYmUgdHJ1c3RlZD8KLy8vICAqIERvZXMgdGhlIGNhbGxlciBuZWVkIHRvIG1hbnVhbGx5IGRlY29tcHJlc3MgdGhlIHJlc3BvbnNlJ3MgYnl0ZSBzdHJlYW0/Ci8vLwovLy8gVGhpcyBlbnVtIGlzIGFjY2Vzc2VkIHZpYSB0aGUgW0h0dHBDbGllbnRSZXNwb25zZS5jb21wcmVzc2lvblN0YXRlXSB2YWx1ZS4KQFNpbmNlKCIyLjQiKQplbnVtIEh0dHBDbGllbnRSZXNwb25zZUNvbXByZXNzaW9uU3RhdGUgewogIC8vLyBUaGUgYm9keSBvZiB0aGUgSFRUUCByZXNwb25zZSB3YXMgcmVjZWl2ZWQgYW5kIHJlbWFpbnMgaW4gYW4gdW5jb21wcmVzc2VkCiAgLy8vIHN0YXRlLgogIC8vLwogIC8vLyBJbiB0aGlzIHN0YXRlLCB0aGUgdmFsdWUgb2YgdGhlIGBDb250ZW50LUxlbmd0aGAgSFRUUCBoZWFkZXIsIGlmCiAgLy8vIHNwZWNpZmllZCAobm9uLW5lZ2F0aXZlKSwgc2hvdWxkIG1hdGNoIHRoZSBudW1iZXIgb2YgYnl0ZXMgcHJvZHVjZWQgYnkKICAvLy8gdGhlIHJlc3BvbnNlJ3MgYnl0ZSBzdHJlYW0uCiAgbm90Q29tcHJlc3NlZCwKCiAgLy8vIFRoZSBib2R5IG9mIHRoZSBIVFRQIHJlc3BvbnNlIHdhcyBvcmlnaW5hbGx5IGNvbXByZXNzZWQsIGJ1dCBieSB2aXJ0dWUgb2YKICAvLy8gdGhlIFtIdHRwQ2xpZW50LmF1dG9VbmNvbXByZXNzXSBjb25maWd1cmF0aW9uIG9wdGlvbiwgaXQgaGFzIGJlZW4KICAvLy8gYXV0b21hdGljYWxseSB1bmNvbXByZXNzZWQuCiAgLy8vCiAgLy8vIEhUVFAgaGVhZGVycyBhcmUgbm90IG1vZGlmaWVkLCBzbyB3aGVuIGEgcmVzcG9uc2UgaGFzIGJlZW4gdW5jb21wcmVzc2VkCiAgLy8vIGluIHRoaXMgd2F5LCB0aGUgdmFsdWUgb2YgdGhlIGBDb250ZW50LUxlbmd0aGAgSFRUUCBoZWFkZXIgY2Fubm90IGJlCiAgLy8vIHRydXN0ZWQsIGFzIGl0IHdpbGwgY29udGFpbiB0aGUgY29tcHJlc3NlZCBjb250ZW50IGxlbmd0aCwgd2hlcmVhcyB0aGUKICAvLy8gc3RyZWFtIG9mIGJ5dGVzIHByb2R1Y2VkIGJ5IHRoZSByZXNwb25zZSB3aWxsIGNvbnRhaW4gdW5jb21wcmVzc2VkIGJ5dGVzLgogIGRlY29tcHJlc3NlZCwKCiAgLy8vIFRoZSBib2R5IG9mIHRoZSBIVFRQIHJlc3BvbnNlIGNvbnRhaW5zIGNvbXByZXNzZWQgYnl0ZXMuCiAgLy8vCiAgLy8vIEluIHRoaXMgc3RhdGUsIHRoZSB2YWx1ZSBvZiB0aGUgYENvbnRlbnQtTGVuZ3RoYCBIVFRQIGhlYWRlciwgaWYKICAvLy8gc3BlY2lmaWVkIChub24tbmVnYXRpdmUpLCBzaG91bGQgbWF0Y2ggdGhlIG51bWJlciBvZiBieXRlcyBwcm9kdWNlZCBieQogIC8vLyB0aGUgcmVzcG9uc2UncyBieXRlIHN0cmVhbS4KICAvLy8KICAvLy8gSWYgdGhlIGNhbGxlciB3aXNoZXMgdG8gbWFudWFsbHkgdW5jb21wcmVzcyB0aGUgYm9keSBvZiB0aGUgcmVzcG9uc2UsCiAgLy8vIGl0IHNob3VsZCBjb25zdWx0IHRoZSB2YWx1ZSBvZiB0aGUgYENvbnRlbnQtRW5jb2RpbmdgIEhUVFAgaGVhZGVyIHRvIHNlZQogIC8vLyB3aGF0IHR5cGUgb2YgY29tcHJlc3Npb24gaGFzIGJlZW4gYXBwbGllZC4gU2VlCiAgLy8vIDxodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjYxNiNzZWN0aW9uLTE0LjExPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICBjb21wcmVzc2VkLAp9CgphYnN0cmFjdCBjbGFzcyBIdHRwQ2xpZW50Q3JlZGVudGlhbHMge30KCi8qKgogKiBSZXByZXNlbnRzIGNyZWRlbnRpYWxzIGZvciBiYXNpYyBhdXRoZW50aWNhdGlvbi4KICovCmFic3RyYWN0IGNsYXNzIEh0dHBDbGllbnRCYXNpY0NyZWRlbnRpYWxzIGV4dGVuZHMgSHR0cENsaWVudENyZWRlbnRpYWxzIHsKICBmYWN0b3J5IEh0dHBDbGllbnRCYXNpY0NyZWRlbnRpYWxzKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkKSA9PgogICAgICBuZXcgX0h0dHBDbGllbnRCYXNpY0NyZWRlbnRpYWxzKHVzZXJuYW1lLCBwYXNzd29yZCk7Cn0KCi8qKgogKiBSZXByZXNlbnRzIGNyZWRlbnRpYWxzIGZvciBkaWdlc3QgYXV0aGVudGljYXRpb24uIERpZ2VzdAogKiBhdXRoZW50aWNhdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBmb3Igc2VydmVycyB1c2luZyB0aGUgTUQ1CiAqIGFsZ29yaXRobSBhbmQgcXVhbGl0eSBvZiBwcm90ZWN0aW9uIChxb3ApIG9mIGVpdGhlciAibm9uZSIgb3IKICogImF1dGgiLgogKi8KYWJzdHJhY3QgY2xhc3MgSHR0cENsaWVudERpZ2VzdENyZWRlbnRpYWxzIGV4dGVuZHMgSHR0cENsaWVudENyZWRlbnRpYWxzIHsKICBmYWN0b3J5IEh0dHBDbGllbnREaWdlc3RDcmVkZW50aWFscyhTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCkgPT4KICAgICAgbmV3IF9IdHRwQ2xpZW50RGlnZXN0Q3JlZGVudGlhbHModXNlcm5hbWUsIHBhc3N3b3JkKTsKfQoKLyoqCiAqIEluZm9ybWF0aW9uIGFib3V0IGFuIFtIdHRwUmVxdWVzdF0sIFtIdHRwUmVzcG9uc2VdLCBbSHR0cENsaWVudFJlcXVlc3RdLCBvcgogKiBbSHR0cENsaWVudFJlc3BvbnNlXSBjb25uZWN0aW9uLgogKi8KYWJzdHJhY3QgY2xhc3MgSHR0cENvbm5lY3Rpb25JbmZvIHsKICBJbnRlcm5ldEFkZHJlc3MgZ2V0IHJlbW90ZUFkZHJlc3M7CiAgaW50IGdldCByZW1vdGVQb3J0OwogIGludCBnZXQgbG9jYWxQb3J0Owp9CgovKioKICogUmVkaXJlY3QgaW5mb3JtYXRpb24uCiAqLwphYnN0cmFjdCBjbGFzcyBSZWRpcmVjdEluZm8gewogIC8qKgogICAqIFJldHVybnMgdGhlIHN0YXR1cyBjb2RlIHVzZWQgZm9yIHRoZSByZWRpcmVjdC4KICAgKi8KICBpbnQgZ2V0IHN0YXR1c0NvZGU7CgogIC8qKgogICAqIFJldHVybnMgdGhlIG1ldGhvZCB1c2VkIGZvciB0aGUgcmVkaXJlY3QuCiAgICovCiAgU3RyaW5nIGdldCBtZXRob2Q7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGxvY2F0aW9uIGZvciB0aGUgcmVkaXJlY3QuCiAgICovCiAgVXJpIGdldCBsb2NhdGlvbjsKfQoKLyoqCiAqIFdoZW4gZGV0YWNoaW5nIGEgc29ja2V0IGZyb20gZWl0aGVyIHRoZSBbOkh0dHBTZXJ2ZXI6XSBvciB0aGUKICogWzpIdHRwQ2xpZW50Ol0gZHVlIHRvIGEgSFRUUCBjb25uZWN0aW9uIHVwZ3JhZGUgdGhlcmUgbWlnaHQgYmUKICogdW5wYXJzZWQgZGF0YSBhbHJlYWR5IHJlYWQgZnJvbSB0aGUgc29ja2V0LiBUaGlzIHVucGFyc2VkIGRhdGEKICogdG9nZXRoZXIgd2l0aCB0aGUgZGV0YWNoZWQgc29ja2V0IGlzIHJldHVybmVkIGluIGFuIGluc3RhbmNlIG9mCiAqIHRoaXMgY2xhc3MuCiAqLwphYnN0cmFjdCBjbGFzcyBEZXRhY2hlZFNvY2tldCB7CiAgU29ja2V0IGdldCBzb2NrZXQ7CiAgTGlz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BE8OKlANBkdNIhEBUEgiBk5LTVAQAT8GR00iBkxPNVAOAgEoAQQ0BEpKOwIBBDw+QQsES0s8AgEETyQEJCUWFQIBBBkEHgY0BhYBBi8GFQEGLAYUAgEEQUJCQw8EIBUeAgEtGBEBMQEWShcfBhkEAgEzGCYBOQE2ASoCAQpkYXJ0Ol9odHRwMG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9faHR0cC9odHRwX2ltcGwuZGFydMABiHkvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0Ll9odHRwOwoKaW50IF9uZXh0U2VydmljZUlkID0gMTsKCi8vIFRPRE8oYWpvaG5zZW4pOiBVc2Ugb3RoZXIgd2F5IG9mIGdldHRpbmcgYSB1bmlxdWUgaWQuCmFic3RyYWN0IGNsYXNzIF9TZXJ2aWNlT2JqZWN0IHsKICBpbnQgX19zZXJ2aWNlSWQgPSAwOwogIGludCBnZXQgX3NlcnZpY2VJZCB7CiAgICBpZiAoX19zZXJ2aWNlSWQgPT0gMCkgX19zZXJ2aWNlSWQgPSBfbmV4dFNlcnZpY2VJZCsrOwogICAgcmV0dXJuIF9fc2VydmljZUlkOwogIH0KCiAgTWFwIF90b0pTT04oYm9vbCByZWYpOwoKICBTdHJpbmcgZ2V0IF9zZXJ2aWNlUGF0aCA9PiAiJF9zZXJ2aWNlVHlwZVBhdGgvJF9zZXJ2aWNlSWQiOwoKICBTdHJpbmcgZ2V0IF9zZXJ2aWNlVHlwZVBhdGg7CgogIFN0cmluZyBnZXQgX3NlcnZpY2VUeXBlTmFtZTsKCiAgU3RyaW5nIF9zZXJ2aWNlVHlwZShib29sIHJlZikgewogICAgaWYgKHJlZikgcmV0dXJuICJAJF9zZXJ2aWNlVHlwZU5hbWUiOwogICAgcmV0dXJuIF9zZXJ2aWNlVHlwZU5hbWU7CiAgfQp9CgpjbGFzcyBfQ29weWluZ0J5dGVzQnVpbGRlciBpbXBsZW1lbnRzIEJ5dGVzQnVpbGRlciB7CiAgLy8gU3RhcnQgd2l0aCAxMDI0IGJ5dGVzLgogIHN0YXRpYyBjb25zdCBpbnQgX0lOSVRfU0laRSA9IDEwMjQ7CgogIHN0YXRpYyBmaW5hbCBfZW1wdHlMaXN0ID0gbmV3IFVpbnQ4TGlzdCgwKTsKCiAgaW50IF9sZW5ndGggPSAwOwogIFVpbnQ4TGlzdCBfYnVmZmVyOwoKICBfQ29weWluZ0J5dGVzQnVpbGRlcihbaW50IGluaXRpYWxDYXBhY2l0eSA9IDBdKQogICAgICA6IF9idWZmZXIgPSAoaW5pdGlhbENhcGFjaXR5IDw9IDApCiAgICAgICAgICAgID8gX2VtcHR5TGlzdAogICAgICAgICAgICA6IG5ldyBVaW50OExpc3QoX3BvdzJyb3VuZHVwKGluaXRpYWxDYXBhY2l0eSkpOwoKICB2b2lkIGFkZChMaXN0PGludD4gYnl0ZXMpIHsKICAgIGludCBieXRlc0xlbmd0aCA9IGJ5dGVzLmxlbmd0aDsKICAgIGlmIChieXRlc0xlbmd0aCA9PSAwKSByZXR1cm47CiAgICBpbnQgcmVxdWlyZWQgPSBfbGVuZ3RoICsgYnl0ZXNMZW5ndGg7CiAgICBpZiAoX2J1ZmZlci5sZW5ndGggPCByZXF1aXJlZCkgewogICAgICBfZ3JvdyhyZXF1aXJlZCk7CiAgICB9CiAgICBhc3NlcnQoX2J1ZmZlci5sZW5ndGggPj0gcmVxdWlyZWQpOwogICAgaWYgKGJ5dGVzIGlzIFVpbnQ4TGlzdCkgewogICAgICBfYnVmZmVyLnNldFJhbmdlKF9sZW5ndGgsIHJlcXVpcmVkLCBieXRlcyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ5dGVzTGVuZ3RoOyBpKyspIHsKICAgICAgICBfYnVmZmVyW19sZW5ndGggKyBpXSA9IGJ5dGVzW2ldOwogICAgICB9CiAgICB9CiAgICBfbGVuZ3RoID0gcmVxdWlyZWQ7CiAgfQoKICB2b2lkIGFkZEJ5dGUoaW50IGJ5dGUpIHsKICAgIGlmIChfYnVmZmVyLmxlbmd0aCA9PSBfbGVuZ3RoKSB7CiAgICAgIC8vIFRoZSBncm93IGFsZ29yaXRobSBhbHdheXMgYXQgbGVhc3QgZG91Ymxlcy4KICAgICAgLy8gSWYgd2UgYWRkZWQgb25lIHRvIF9sZW5ndGggaXQgd291bGQgcXVhZHJ1cGxlIHVubmVjZXNzYXJpbHkuCiAgICAgIF9ncm93KF9sZW5ndGgpOwogICAgfQogICAgYXNzZXJ0KF9idWZmZXIubGVuZ3RoID4gX2xlbmd0aCk7CiAgICBfYnVmZmVyW19sZW5ndGhdID0gYnl0ZTsKICAgIF9sZW5ndGgrKzsKICB9CgogIHZvaWQgX2dyb3coaW50IHJlcXVpcmVkKSB7CiAgICAvLyBXZSB3aWxsIGNyZWF0ZSBhIGxpc3QgaW4gdGhlIHJhbmdlIG9mIDItNCB0aW1lcyBsYXJnZXIgdGhhbgogICAgLy8gcmVxdWlyZWQuCiAgICBpbnQgbmV3U2l6ZSA9IHJlcXVpcmVkICogMjsKICAgIGlmIChuZXdTaXplIDwgX0lOSVRfU0laRSkgewogICAgICBuZXdTaXplID0gX0lOSVRfU0laRTsKICAgIH0gZWxzZSB7CiAgICAgIG5ld1NpemUgPSBfcG93MnJvdW5kdXAobmV3U2l6ZSk7CiAgICB9CiAgICB2YXIgbmV3QnVmZmVyID0gbmV3IFVpbnQ4TGlzdChuZXdTaXplKTsKICAgIG5ld0J1ZmZlci5zZXRSYW5nZSgwLCBfYnVmZmVyLmxlbmd0aCwgX2J1ZmZlcik7CiAgICBfYnVmZmVyID0gbmV3QnVmZmVyOwogIH0KCiAgVWludDhMaXN0IHRha2VCeXRlcygpIHsKICAgIGlmIChfbGVuZ3RoID09IDApIHJldHVybiBfZW1wdHlMaXN0OwogICAgdmFyIGJ1ZmZlciA9IG5ldyBVaW50OExpc3QudmlldyhfYnVmZmVyLmJ1ZmZlciwgMCwgX2xlbmd0aCk7CiAgICBjbGVhcigpOwogICAgcmV0dXJuIGJ1ZmZlcjsKICB9CgogIFVpbnQ4TGlzdCB0b0J5dGVzKCkgewogICAgaWYgKF9sZW5ndGggPT0gMCkgcmV0dXJuIF9lbXB0eUxpc3Q7CiAgICByZXR1cm4gbmV3IFVpbnQ4TGlzdC5mcm9tTGlzdCgKICAgICAgICBuZXcgVWludDhMaXN0LnZpZXcoX2J1ZmZlci5idWZmZXIsIDAsIF9sZW5ndGgpKTsKICB9CgogIGludCBnZXQgbGVuZ3RoID0+IF9sZW5ndGg7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2xlbmd0aCA9PSAwOwoKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9sZW5ndGggIT0gMDsKCiAgdm9pZCBjbGVhcigpIHsKICAgIF9sZW5ndGggPSAwOwogICAgX2J1ZmZlciA9IF9lbXB0eUxpc3Q7CiAgfQoKICBzdGF0aWMgaW50IF9wb3cycm91bmR1cChpbnQgeCkgewogICAgYXNzZXJ0KHggPiAwKTsKICAgIC0teDsKICAgIHggfD0geCA+PiAxOwogICAgeCB8PSB4ID4+IDI7CiAgICB4IHw9IHggPj4gNDsKICAgIHggfD0geCA+PiA4OwogICAgeCB8PSB4ID4+IDE2OwogICAgcmV0dXJuIHggKyAxOwogIH0KfQoKY29uc3QgaW50IF9PVVRHT0lOR19CVUZGRVJfU0laRSA9IDggKiAxMDI0OwoKdHlwZWRlZiB2b2lkIF9CeXRlc0NvbnN1bWVyKExpc3Q8aW50PiBieXRlcyk7CgpjbGFzcyBfSHR0cEluY29taW5nIGV4dGVuZHMgU3RyZWFtPFVpbnQ4TGlzdD4gewogIGZpbmFsIGludCBfdHJhbnNmZXJMZW5ndGg7CiAgZmluYWwgQ29tcGxldGVyIF9kYXRhQ29tcGxldGVyID0gbmV3IENvbXBsZXRlcigpOwogIFN0cmVhbTxVaW50OExpc3Q+IF9zdHJlYW07CgogIGJvb2wgZnVsbEJvZHlSZWFkID0gZmFsc2U7CgogIC8vIENvbW1vbiBwcm9wZXJ0aWVzLgogIGZpbmFsIF9IdHRwSGVhZGVycyBoZWFkZXJzOwogIGJvb2wgdXBncmFkZWQgPSBmYWxzZTsKCiAgLy8gQ2xpZW50UmVzcG9uc2UgcHJvcGVydGllcy4KICBpbnQgc3RhdHVzQ29kZTsKICBTdHJpbmcgcmVhc29uUGhyYXNlOwoKICAvLyBSZXF1ZXN0IHByb3BlcnRpZXMuCiAgU3RyaW5nIG1ldGhvZDsKICBVcmkgdXJpOwoKICBib29sIGhhc1N1YnNjcmliZXIgPSBmYWxzZTsKCiAgLy8gVGhlIHRyYW5zZmVyIGxlbmd0aCBpZiB0aGUgbGVuZ3RoIG9mIHRoZSBtZXNzYWdlIGJvZHkgYXMgaXQKICAvLyBhcHBlYXJzIGluIHRoZSBtZXNzYWdlIChSRkMgMjYxNiBzZWN0aW9uIDQuNCkuIFRoaXMgY2FuIGJlIC0xIGlmCiAgLy8gdGhlIGxlbmd0aCBvZiB0aGUgbWFzc2FnZSBib2R5IGlzIG5vdCBrbm93biBkdWUgdG8gdHJhbnNmZXIKICAvLyBjb2RpbmdzLgogIGludCBnZXQgdHJhbnNmZXJMZW5ndGggPT4gX3RyYW5zZmVyTGVuZ3RoOwoKICBfSHR0cEluY29taW5nKHRoaXMuaGVhZGVycywgdGhpcy5fdHJhbnNmZXJMZW5ndGgsIHRoaXMuX3N0cmVhbSk7CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxVaW50OExpc3Q+IGxpc3Rlbih2b2lkIG9uRGF0YShVaW50OExpc3QgZXZlbnQpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgaGFzU3Vic2NyaWJlciA9IHRydWU7CiAgICByZXR1cm4gX3N0cmVhbS5oYW5kbGVFcnJvcigoZXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oZXJyb3IubWVzc2FnZSwgdXJpOiB1cmkpOwogICAgfSkubGlzdGVuKG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLCBvbkRvbmU6IG9uRG9uZSwgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgfQoKICAvLyBJcyBjb21wbGV0ZWQgb25jZSBhbGwgZGF0YSBoYXZlIGJlZW4gcmVjZWl2ZWQuCiAgRnV0dXJlIGdldCBkYXRhRG9uZSA9PiBfZGF0YUNvbXBsZXRlci5mdXR1cmU7CgogIHZvaWQgY2xvc2UoYm9vbCBjbG9zaW5nKSB7CiAgICBmdWxsQm9keVJlYWQgPSB0cnVlOwogICAgaGFzU3Vic2NyaWJlciA9IHRydWU7CiAgICBfZGF0YUNvbXBsZXRlci5jb21wbGV0ZShjbG9zaW5nKTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9IdHRwSW5ib3VuZE1lc3NhZ2VMaXN0SW50IGV4dGVuZHMgU3RyZWFtPExpc3Q8aW50Pj4gewogIGZpbmFsIF9IdHRwSW5jb21pbmcgX2luY29taW5nOwogIExpc3Q8Q29va2llPiBfY29va2llczsKCiAgX0h0dHBJbmJvdW5kTWVzc2FnZUxpc3RJbnQodGhpcy5faW5jb21pbmcpOwoKICBMaXN0PENvb2tpZT4gZ2V0IGNvb2tpZXMgewogICAgaWYgKF9jb29raWVzICE9IG51bGwpIHJldHVybiBfY29va2llczsKICAgIHJldHVybiBfY29va2llcyA9IGhlYWRlcnMuX3BhcnNlQ29va2llcygpOwogIH0KCiAgX0h0dHBIZWFkZXJzIGdldCBoZWFkZXJzID0+IF9pbmNvbWluZy5oZWFkZXJzOwogIFN0cmluZyBnZXQgcHJvdG9jb2xWZXJzaW9uID0+IGhlYWRlcnMucHJvdG9jb2xWZXJzaW9uOwogIGludCBnZXQgY29udGVudExlbmd0aCA9PiBoZWFkZXJzLmNvbnRlbnRMZW5ndGg7CiAgYm9vbCBnZXQgcGVyc2lzdGVudENvbm5lY3Rpb24gPT4gaGVhZGVycy5wZXJzaXN0ZW50Q29ubmVjdGlvbjsKfQoKYWJzdHJhY3QgY2xhc3MgX0h0dHBJbmJvdW5kTWVzc2FnZSBleHRlbmRzIFN0cmVhbTxVaW50OExpc3Q+IHsKICBmaW5hbCBfSHR0cEluY29taW5nIF9pbmNvbWluZzsKICBMaXN0PENvb2tpZT4gX2Nvb2tpZXM7CgogIF9IdHRwSW5ib3VuZE1lc3NhZ2UodGhpcy5faW5jb21pbmcpOwoKICBMaXN0PENvb2tpZT4gZ2V0IGNvb2tpZXMgewogICAgaWYgKF9jb29raWVzICE9IG51bGwpIHJldHVybiBfY29va2llczsKICAgIHJldHVybiBfY29va2llcyA9IGhlYWRlcnMuX3BhcnNlQ29va2llcygpOwogIH0KCiAgX0h0dHBIZWFkZXJzIGdldCBoZWFkZXJzID0+IF9pbmNvbWluZy5oZWFkZXJzOwogIFN0cmluZyBnZXQgcHJvdG9jb2xWZXJzaW9uID0+IGhlYWRlcnMucHJvdG9jb2xWZXJzaW9uOwogIGludCBnZXQgY29udGVudExlbmd0aCA9PiBoZWFkZXJzLmNvbnRlbnRMZW5ndGg7CiAgYm9vbCBnZXQgcGVyc2lzdGVudENvbm5lY3Rpb24gPT4gaGVhZGVycy5wZXJzaXN0ZW50Q29ubmVjdGlvbjsKfQoKY2xhc3MgX0h0dHBSZXF1ZXN0IGV4dGVuZHMgX0h0dHBJbmJvdW5kTWVzc2FnZSBpbXBsZW1lbnRzIEh0dHBSZXF1ZXN0IHsKICBmaW5hbCBIdHRwUmVzcG9uc2UgcmVzcG9uc2U7CgogIGZpbmFsIF9IdHRwU2VydmVyIF9odHRwU2VydmVyOwoKICBmaW5hbCBfSHR0cENvbm5lY3Rpb24gX2h0dHBDb25uZWN0aW9uOwoKICBfSHR0cFNlc3Npb24gX3Nlc3Npb247CgogIFVyaSBfcmVxdWVzdGVkVXJpOwoKICBfSHR0cFJlcXVlc3QodGhpcy5yZXNwb25zZSwgX0h0dHBJbmNvbWluZyBfaW5jb21pbmcsIHRoaXMuX2h0dHBTZXJ2ZXIsCiAgICAgIHRoaXMuX2h0dHBDb25uZWN0aW9uKQogICAgICA6IHN1cGVyKF9pbmNvbWluZykgewogICAgaWYgKGhlYWRlcnMucHJvdG9jb2xWZXJzaW9uID09ICIxLjEiKSB7CiAgICAgIHJlc3BvbnNlLmhlYWRlcnMKICAgICAgICAuLmNodW5rZWRUcmFuc2ZlckVuY29kaW5nID0gdHJ1ZQogICAgICAgIC4ucGVyc2lzdGVudENvbm5lY3Rpb24gPSBoZWFkZXJzLnBlcnNpc3RlbnRDb25uZWN0aW9uOwogICAgfQoKICAgIGlmIChfaHR0cFNlcnZlci5fc2Vzc2lvbk1hbmFnZXJJbnN0YW5jZSAhPSBudWxsKSB7CiAgICAgIC8vIE1hcCB0byBzZXNzaW9uIGlmIGV4aXN0cy4KICAgICAgdmFyIHNlc3Npb25JZHMgPSBjb29raWVzCiAgICAgICAgICAud2hlcmUoKGNvb2tpZSkgPT4gY29va2llLm5hbWUudG9VcHBlckNhc2UoKSA9PSBfREFSVF9TRVNTSU9OX0lEKQogICAgICAgICAgLm1hcCgoY29va2llKSA9PiBjb29raWUudmFsdWUpOwogICAgICBmb3IgKHZhciBzZXNzaW9uSWQgaW4gc2Vzc2lvbklkcykgewogICAgICAgIF9zZXNzaW9uID0gX2h0dHBTZXJ2ZXIuX3Nlc3Npb25NYW5hZ2VyLmdldFNlc3Npb24oc2Vzc2lvbklkKTsKICAgICAgICBpZiAoX3Nlc3Npb24gIT0gbnVsbCkgewogICAgICAgICAgX3Nlc3Npb24uX21hcmtTZWVuKCk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxVaW50OExpc3Q+IGxpc3Rlbih2b2lkIG9uRGF0YShVaW50OExpc3QgZXZlbnQpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgcmV0dXJuIF9pbmNvbWluZy5saXN0ZW4ob25EYXRhLAogICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsIG9uRG9uZTogb25Eb25lLCBjYW5jZWxPbkVycm9yOiBjYW5jZWxPbkVycm9yKTsKICB9CgogIFVyaSBnZXQgdXJpID0+IF9pbmNvbWluZy51cmk7CgogIFVyaSBnZXQgcmVxdWVzdGVkVXJpIHsKICAgIGlmIChfcmVxdWVzdGVkVXJpID09IG51bGwpIHsKICAgICAgdmFyIHByb3RvID0gaGVhZGVyc1sneC1mb3J3YXJkZWQtcHJvdG8nXTsKICAgICAgdmFyIHNjaGVtZSA9IHByb3RvICE9IG51bGwKICAgICAgICAgID8gcHJvdG8uZmlyc3QKICAgICAgICAgIDogX2h0dHBDb25uZWN0aW9uLl9zb2NrZXQgaXMgU2VjdXJlU29ja2V0ID8gImh0dHBzIiA6ICJodHRwIjsKICAgICAgdmFyIGhvc3RMaXN0ID0gaGVhZGVyc1sneC1mb3J3YXJkZWQtaG9zdCddOwogICAgICBTdHJpbmcgaG9zdDsKICAgICAgaWYgKGhvc3RMaXN0ICE9IG51bGwpIHsKICAgICAgICBob3N0ID0gaG9zdExpc3QuZmlyc3Q7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaG9zdExpc3QgPSBoZWFkZXJzWydob3N0J107CiAgICAgICAgaWYgKGhvc3RMaXN0ICE9IG51bGwpIHsKICAgICAgICAgIGhvc3QgPSBob3N0TGlzdC5maXJzdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaG9zdCA9ICIke19odHRwU2VydmVyLmFkZHJlc3MuaG9zdH06JHtfaHR0cFNlcnZlci5wb3J0fSI7CiAgICAgICAgfQogICAgICB9CiAgICAgIF9yZXF1ZXN0ZWRVcmkgPSBVcmkucGFyc2UoIiRzY2hlbWU6Ly8kaG9zdCR1cmkiKTsKICAgIH0KICAgIHJldHVybiBfcmVxdWVzdGVkVXJpOwogIH0KCiAgU3RyaW5nIGdldCBtZXRob2QgPT4gX2luY29taW5nLm1ldGhvZDsKCiAgSHR0cFNlc3Npb24gZ2V0IHNlc3Npb24gewogICAgaWYgKF9zZXNzaW9uICE9IG51bGwpIHsKICAgICAgaWYgKF9zZXNzaW9uLl9kZXN0cm95ZWQpIHsKICAgICAgICAvLyBJdCdzIGRlc3Ryb3llZCwgY2xlYXIgaXQuCiAgICAgICAgX3Nlc3Npb24gPSBudWxsOwogICAgICAgIC8vIENyZWF0ZSBuZXcgc2Vzc2lvbiBvYmplY3QgYnkgY2FsbGluZyByZWN1cnNpdmUuCiAgICAgICAgcmV0dXJuIHNlc3Npb247CiAgICAgIH0KICAgICAgLy8gSXQncyBhbHJlYWR5IG1hcHBlZCwgdXNlIGl0LgogICAgICByZXR1cm4gX3Nlc3Npb247CiAgICB9CiAgICAvLyBDcmVhdGUgc2Vzc2lvbiwgc3RvcmUgaXQgaW4gY29ubmVjdGlvbiwgYW5kIHJldHVybi4KICAgIHJldHVybiBfc2Vzc2lvbiA9IF9odHRwU2VydmVyLl9zZXNzaW9uTWFuYWdlci5jcmVhdGVTZXNzaW9uKCk7CiAgfQoKICBIdHRwQ29ubmVjdGlvbkluZm8gZ2V0IGNvbm5lY3Rpb25JbmZvID0+IF9odHRwQ29ubmVjdGlvbi5jb25uZWN0aW9uSW5mbzsKCiAgWDUwOUNlcnRpZmljYXRlIGdldCBjZXJ0aWZpY2F0ZSB7CiAgICB2YXIgc29ja2V0ID0gX2h0dHBDb25uZWN0aW9uLl9zb2NrZXQ7CiAgICBpZiAoc29ja2V0IGlzIFNlY3VyZVNvY2tldCkgcmV0dXJuIHNvY2tldC5wZWVyQ2VydGlmaWNhdGU7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCmNsYXNzIF9IdHRwQ2xpZW50UmVzcG9uc2UgZXh0ZW5kcyBfSHR0cEluYm91bmRNZXNzYWdlTGlzdEludAogICAgaW1wbGVtZW50cyBIdHRwQ2xpZW50UmVzcG9uc2UgewogIExpc3Q8UmVkaXJlY3RJbmZvPiBnZXQgcmVkaXJlY3RzID0+IF9odHRwUmVxdWVzdC5fcmVzcG9uc2VSZWRpcmVjdHM7CgogIC8vIFRoZSBIdHRwQ2xpZW50IHRoaXMgcmVzcG9uc2UgYmVsb25ncyB0by4KICBmaW5hbCBfSHR0cENsaWVudCBfaHR0cENsaWVudDsKCiAgLy8gVGhlIEh0dHBDbGllbnRSZXF1ZXN0IG9mIHRoaXMgcmVzcG9uc2UuCiAgZmluYWwgX0h0dHBDbGllbnRSZXF1ZXN0IF9odHRwUmVxdWVzdDsKCiAgLy8gVGhlIGNvbXByZXNzaW9uIHN0YXRlIG9mIHRoaXMgcmVzcG9uc2UuCiAgZmluYWwgSHR0cENsaWVudFJlc3BvbnNlQ29tcHJlc3Npb25TdGF0ZSBjb21wcmVzc2lvblN0YXRlOwoKICBfSHR0cENsaWVudFJlc3BvbnNlKAogICAgICBfSHR0cEluY29taW5nIF9pbmNvbWluZywgdGhpcy5faHR0cFJlcXVlc3QsIHRoaXMuX2h0dHBDbGllbnQpCiAgICAgIDogY29tcHJlc3Npb25TdGF0ZSA9IF9nZXRDb21wcmVzc2lvblN0YXRlKF9odHRwQ2xpZW50LCBfaW5jb21pbmcuaGVhZGVycyksCiAgICAgICAgc3VwZXIoX2luY29taW5nKSB7CiAgICAvLyBTZXQgdXJpIGZvciBwb3RlbnRpYWwgZXhjZXB0aW9ucy4KICAgIF9pbmNvbWluZy51cmkgPSBfaHR0cFJlcXVlc3QudXJpOwogIH0KCiAgc3RhdGljIEh0dHBDbGllbnRSZXNwb25zZUNvbXByZXNzaW9uU3RhdGUgX2dldENvbXByZXNzaW9uU3RhdGUoCiAgICAgIF9IdHRwQ2xpZW50IGh0dHBDbGllbnQsIF9IdHRwSGVhZGVycyBoZWFkZXJzKSB7CiAgICBpZiAoaGVhZGVycy52YWx1ZShIdHRwSGVhZGVycy5jb250ZW50RW5jb2RpbmdIZWFkZXIpID09ICJnemlwIikgewogICAgICByZXR1cm4gaHR0cENsaWVudC5hdXRvVW5jb21wcmVzcwogICAgICAgICAgPyBIdHRwQ2xpZW50UmVzcG9uc2VDb21wcmVzc2lvblN0YXRlLmRlY29tcHJlc3NlZAogICAgICAgICAgOiBIdHRwQ2xpZW50UmVzcG9uc2VDb21wcmVzc2lvblN0YXRlLmNvbXByZXNzZWQ7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gSHR0cENsaWVudFJlc3BvbnNlQ29tcHJlc3Npb25TdGF0ZS5ub3RDb21wcmVzc2VkOwogICAgfQogIH0KCiAgaW50IGdldCBzdGF0dXNDb2RlID0+IF9pbmNvbWluZy5zdGF0dXNDb2RlOwogIFN0cmluZyBnZXQgcmVhc29uUGhyYXNlID0+IF9pbmNvbWluZy5yZWFzb25QaHJhc2U7CgogIFg1MDlDZXJ0aWZpY2F0ZSBnZXQgY2VydGlmaWNhdGUgewogICAgdmFyIHNvY2tldCA9IF9odHRwUmVxdWVzdC5faHR0cENsaWVudENvbm5lY3Rpb24uX3NvY2tldDsKICAgIGlmIChzb2NrZXQgaXMgU2VjdXJlU29ja2V0KSByZXR1cm4gc29ja2V0LnBlZXJDZXJ0aWZpY2F0ZTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgTGlzdDxDb29raWU+IGdldCBjb29raWVzIHsKICAgIGlmIChfY29va2llcyAhPSBudWxsKSByZXR1cm4gX2Nvb2tpZXM7CiAgICBfY29va2llcyA9IG5ldyBMaXN0PENvb2tpZT4oKTsKICAgIExpc3Q8U3RyaW5nPiB2YWx1ZXMgPSBoZWFkZXJzW0h0dHBIZWFkZXJzLnNldENvb2tpZUhlYWRlcl07CiAgICBpZiAodmFsdWVzICE9IG51bGwpIHsKICAgICAgdmFsdWVzLmZvckVhY2goKHZhbHVlKSB7CiAgICAgICAgX2Nvb2tpZXMuYWRkKG5ldyBDb29raWUuZnJvbVNldENvb2tpZVZhbHVlKHZhbHVlKSk7CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIF9jb29raWVzOwogIH0KCiAgYm9vbCBnZXQgaXNSZWRpcmVjdCB7CiAgICBpZiAoX2h0dHBSZXF1ZXN0Lm1ldGhvZCA9PSAiR0VUIiB8fCBfaHR0cFJlcXVlc3QubWV0aG9kID09ICJIRUFEIikgewogICAgICByZXR1cm4gc3RhdHVzQ29kZSA9PSBIdHRwU3RhdHVzLm1vdmVkUGVybWFuZW50bHkgfHwKICAgICAgICAgIHN0YXR1c0NvZGUgPT0gSHR0cFN0YXR1cy5mb3VuZCB8fAogICAgICAgICAgc3RhdHVzQ29kZSA9PSBIdHRwU3RhdHVzLnNlZU90aGVyIHx8CiAgICAgICAgICBzdGF0dXNDb2RlID09IEh0dHBTdGF0dXMudGVtcG9yYXJ5UmVkaXJlY3Q7CiAgICB9IGVsc2UgaWYgKF9odHRwUmVxdWVzdC5tZXRob2QgPT0gIlBPU1QiKSB7CiAgICAgIHJldHVybiBzdGF0dXNDb2RlID09IEh0dHBTdGF0dXMuc2VlT3RoZXI7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBGdXR1cmU8SHR0cENsaWVudFJlc3BvbnNlPiByZWRpcmVjdCgKICAgICAgW1N0cmluZyBtZXRob2QsIFVyaSB1cmwsIGJvb2wgZm9sbG93TG9vcHNdKSB7CiAgICBpZiAobWV0aG9kID09IG51bGwpIHsKICAgICAgLy8gU2V0IG1ldGhvZCBhcyBkZWZpbmVkIGJ5IFJGQyAyNjE2IHNlY3Rpb24gMTAuMy40LgogICAgICBpZiAoc3RhdHVzQ29kZSA9PSBIdHRwU3RhdHVzLnNlZU90aGVyICYmIF9odHRwUmVxdWVzdC5tZXRob2QgPT0gIlBPU1QiKSB7CiAgICAgICAgbWV0aG9kID0gIkdFVCI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWV0aG9kID0gX2h0dHBSZXF1ZXN0Lm1ldGhvZDsKICAgICAgfQogICAgfQogICAgaWYgKHVybCA9PSBudWxsKSB7CiAgICAgIFN0cmluZyBsb2NhdGlvbiA9IGhlYWRlcnMudmFsdWUoSHR0cEhlYWRlcnMubG9jYXRpb25IZWFkZXIpOwogICAgICBpZiAobG9jYXRpb24gPT0gbnVsbCkgewogICAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJSZXNwb25zZSBoYXMgbm8gTG9jYXRpb24gaGVhZGVyIGZvciByZWRpcmVjdCIpOwogICAgICB9CiAgICAgIHVybCA9IFVyaS5wYXJzZShsb2NhdGlvbik7CiAgICB9CiAgICBpZiAoZm9sbG93TG9vcHMgIT0gdHJ1ZSkgewogICAgICBmb3IgKHZhciByZWRpcmVjdCBpbiByZWRpcmVjdHMpIHsKICAgICAgICBpZiAocmVkaXJlY3QubG9jYXRpb24gPT0gdXJsKSB7CiAgICAgICAgICByZXR1cm4gbmV3IEZ1dHVyZS5lcnJvcigKICAgICAgICAgICAgICBuZXcgUmVkaXJlY3RFeGNlcHRpb24oIlJlZGlyZWN0IGxvb3AgZGV0ZWN0ZWQiLCByZWRpcmVjdHMpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfaHR0cENsaWVudAogICAgICAgIC5fb3BlblVybEZyb21SZXF1ZXN0KG1ldGhvZCwgdXJsLCBfaHR0cFJlcXVlc3QpCiAgICAgICAgLnRoZW4oKHJlcXVlc3QpIHsKICAgICAgcmVxdWVzdC5fcmVzcG9uc2VSZWRpcmVjdHMKICAgICAgICAuLmFkZEFsbCh0aGlzLnJlZGlyZWN0cykKICAgICAgICAuLmFkZChuZXcgX1JlZGlyZWN0SW5mbyhzdGF0dXNDb2RlLCBtZXRob2QsIHVybCkpOwogICAgICByZXR1cm4gcmVxdWVzdC5jbG9zZSgpOwogICAgfSk7CiAgfQoKICBTdHJlYW1TdWJzY3JpcHRpb248VWludDhMaXN0PiBsaXN0ZW4odm9pZCBvbkRhdGEoVWludDhMaXN0IGV2ZW50KSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIGlmIChfaW5jb21pbmcudXBncmFkZWQpIHsKICAgICAgLy8gSWYgdXBncmFkZWQsIHRoZSBjb25uZWN0aW9uIGlzIGFscmVhZHkgJ3JlbW92ZWQnIGZvcm0gdGhlIGNsaWVudC4KICAgICAgLy8gU2luY2UgbGlzdGVuaW5nIHRvIHVwZ3JhZGVkIGRhdGEgaXMgJ2JvZ3VzJywgc2ltcGx5IGNsb3NlIGFuZAogICAgICAvLyByZXR1cm4gZW1wdHkgc3RyZWFtIHN1YnNjcmlwdGlvbi4KICAgICAgX2h0dHBSZXF1ZXN0Ll9odHRwQ2xpZW50Q29ubmVjdGlvbi5kZXN0cm95KCk7CiAgICAgIHJldHVybiBuZXcgU3RyZWFtPFVpbnQ4TGlzdD4uZW1wdHkoKS5saXN0ZW4obnVsbCwgb25Eb25lOiBvbkRvbmUpOwogICAgfQogICAgU3RyZWFtPFVpbnQ4TGlzdD4gc3RyZWFtID0gX2luY29taW5nOwogICAgaWYgKGNvbXByZXNzaW9uU3RhdGUgPT0gSHR0cENsaWVudFJlc3BvbnNlQ29tcHJlc3Npb25TdGF0ZS5kZWNvbXByZXNzZWQpIHsKICAgICAgc3RyZWFtID0gc3RyZWFtCiAgICAgICAgICAuY2FzdDxMaXN0PGludD4+KCkKICAgICAgICAgIC50cmFuc2Zvcm0oZ3ppcC5kZWNvZGVyKQogICAgICAgICAgLnRyYW5zZm9ybShjb25zdCBfVG9VaW50OExpc3QoKSk7CiAgICB9CiAgICByZXR1cm4gc3RyZWFtLmxpc3RlbihvbkRhdGEsCiAgICAgICAgb25FcnJvcjogb25FcnJvciwgb25Eb25lOiBvbkRvbmUsIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwogIH0KCiAgRnV0dXJlPFNvY2tldD4gZGV0YWNoU29ja2V0KCkgewogICAgX2h0dHBDbGllbnQuX2Nvbm5lY3Rpb25DbG9zZWQoX2h0dHBSZXF1ZXN0Ll9odHRwQ2xpZW50Q29ubmVjdGlvbik7CiAgICByZXR1cm4gX2h0dHBSZXF1ZXN0Ll9odHRwQ2xpZW50Q29ubmVjdGlvbi5kZXRhY2hTb2NrZXQoKTsKICB9CgogIEh0dHBDb25uZWN0aW9uSW5mbyBnZXQgY29ubmVjdGlvbkluZm8gPT4gX2h0dHBSZXF1ZXN0LmNvbm5lY3Rpb25JbmZvOwoKICBib29sIGdldCBfc2hvdWxkQXV0aGVudGljYXRlUHJveHkgewogICAgLy8gT25seSB0cnkgdG8gYXV0aGVudGljYXRlIGlmIHRoZXJlIGlzIGEgY2hhbGxlbmdlIGluIHRoZSByZXNwb25zZS4KICAgIExpc3Q8U3RyaW5nPiBjaGFsbGVuZ2UgPSBoZWFkZXJzW0h0dHBIZWFkZXJzLnByb3h5QXV0aGVudGljYXRlSGVhZGVyXTsKICAgIHJldHVybiBzdGF0dXNDb2RlID09IEh0dHBTdGF0dXMucHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkICYmCiAgICAgICAgY2hhbGxlbmdlICE9IG51bGwgJiYKICAgICAgICBjaGFsbGVuZ2UubGVuZ3RoID09IDE7CiAgfQoKICBib29sIGdldCBfc2hvdWxkQXV0aGVudGljYXRlIHsKICAgIC8vIE9ubHkgdHJ5IHRvIGF1dGhlbnRpY2F0ZSBpZiB0aGVyZSBpcyBhIGNoYWxsZW5nZSBpbiB0aGUgcmVzcG9uc2UuCiAgICBMaXN0PFN0cmluZz4gY2hhbGxlbmdlID0gaGVhZGVyc1tIdHRwSGVhZGVycy53d3dBdXRoZW50aWNhdGVIZWFkZXJdOwogICAgcmV0dXJuIHN0YXR1c0NvZGUgPT0gSHR0cFN0YXR1cy51bmF1dGhvcml6ZWQgJiYKICAgICAgICBjaGFsbGVuZ2UgIT0gbnVsbCAmJgogICAgICAgIGNoYWxsZW5nZS5sZW5ndGggPT0gMTsKICB9CgogIEZ1dHVyZTxIdHRwQ2xpZW50UmVzcG9uc2U+IF9hdXRoZW50aWNhdGUoYm9vbCBwcm94eUF1dGgpIHsKICAgIEZ1dHVyZTxIdHRwQ2xpZW50UmVzcG9uc2U+IHJldHJ5KCkgewogICAgICAvLyBEcmFpbiBib2R5IGFuZCByZXRyeS4KICAgICAgcmV0dXJuIGRyYWluKCkudGhlbigoXykgewogICAgICAgIHJldHVybiBfaHR0cENsaWVudAogICAgICAgICAgICAuX29wZW5VcmxGcm9tUmVxdWVzdCgKICAgICAgICAgICAgICAgIF9odHRwUmVxdWVzdC5tZXRob2QsIF9odHRwUmVxdWVzdC51cmksIF9odHRwUmVxdWVzdCkKICAgICAgICAgICAgLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QuY2xvc2UoKSk7CiAgICAgIH0pOwogICAgfQoKICAgIExpc3Q8U3RyaW5nPiBhdXRoQ2hhbGxlbmdlKCkgewogICAgICByZXR1cm4gcHJveHlBdXRoCiAgICAgICAgICA/IGhlYWRlcnNbSHR0cEhlYWRlcnMucHJveHlBdXRoZW50aWNhdGVIZWFkZXJdCiAgICAgICAgICA6IGhlYWRlcnNbSHR0cEhlYWRlcnMud3d3QXV0aGVudGljYXRlSGVhZGVyXTsKICAgIH0KCiAgICBfQ3JlZGVudGlhbHMgZmluZENyZWRlbnRpYWxzKF9BdXRoZW50aWNhdGlvblNjaGVtZSBzY2hlbWUpIHsKICAgICAgcmV0dXJuIHByb3h5QXV0aAogICAgICAgICAgPyBfaHR0cENsaWVudC5fZmluZFByb3h5Q3JlZGVudGlhbHMoX2h0dHBSZXF1ZXN0Ll9wcm94eSwgc2NoZW1lKQogICAgICAgICAgOiBfaHR0cENsaWVudC5fZmluZENyZWRlbnRpYWxzKF9odHRwUmVxdWVzdC51cmksIHNjaGVtZSk7CiAgICB9CgogICAgdm9pZCByZW1vdmVDcmVkZW50aWFscyhfQ3JlZGVudGlhbHMgY3IpIHsKICAgICAgaWYgKHByb3h5QXV0aCkgewogICAgICAgIF9odHRwQ2xpZW50Ll9yZW1vdmVQcm94eUNyZWRlbnRpYWxzKGNyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfaHR0cENsaWVudC5fcmVtb3ZlQ3JlZGVudGlhbHMoY3IpOwogICAgICB9CiAgICB9CgogICAgRnV0dXJlIHJlcXVlc3RBdXRoZW50aWNhdGlvbihfQXV0aGVudGljYXRpb25TY2hlbWUgc2NoZW1lLCBTdHJpbmcgcmVhbG0pIHsKICAgICAgaWYgKHByb3h5QXV0aCkgewogICAgICAgIGlmIChfaHR0cENsaWVudC5fYXV0aGVudGljYXRlUHJveHkgPT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUoZmFsc2UpOwogICAgICAgIH0KICAgICAgICB2YXIgcHJveHkgPSBfaHR0cFJlcXVlc3QuX3Byb3h5OwogICAgICAgIHJldHVybiBfaHR0cENsaWVudC5fYXV0aGVudGljYXRlUHJveHkoCiAgICAgICAgICAgIHByb3h5Lmhvc3QsIHByb3h5LnBvcnQsIHNjaGVtZS50b1N0cmluZygpLCByZWFsbSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKF9odHRwQ2xpZW50Ll9hdXRoZW50aWNhdGUgPT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUoZmFsc2UpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gX2h0dHBDbGllbnQuX2F1dGhlbnRpY2F0ZSgKICAgICAgICAgICAgX2h0dHBSZXF1ZXN0LnVyaSwgc2NoZW1lLnRvU3RyaW5nKCksIHJlYWxtKTsKICAgICAgfQogICAgfQoKICAgIExpc3Q8U3RyaW5nPiBjaGFsbGVuZ2UgPSBhdXRoQ2hhbGxlbmdlKCk7CiAgICBhc3NlcnQoY2hhbGxlbmdlICE9IG51bGwgfHwgY2hhbGxlbmdlLmxlbmd0aCA9PSAxKTsKICAgIF9IZWFkZXJWYWx1ZSBoZWFkZXIgPQogICAgICAgIF9IZWFkZXJWYWx1ZS5wYXJzZShjaGFsbGVuZ2VbMF0sIHBhcmFtZXRlclNlcGFyYXRvcjogIiwiKTsKICAgIF9BdXRoZW50aWNhdGlvblNjaGVtZSBzY2hlbWUgPQogICAgICAgIG5ldyBfQXV0aGVudGljYXRpb25TY2hlbWUuZnJvbVN0cmluZyhoZWFkZXIudmFsdWUpOwogICAgU3RyaW5nIHJlYWxtID0gaGVhZGVyLnBhcmFtZXRlcnNbInJlYWxtIl07CgogICAgLy8gU2VlIGlmIGFueSBtYXRjaGluZyBjcmVkZW50aWFscyBhcmUgYXZhaWxhYmxlLgogICAgX0NyZWRlbnRpYWxzIGNyID0gZmluZENyZWRlbnRpYWxzKHNjaGVtZSk7CiAgICBpZiAoY3IgIT0gbnVsbCkgewogICAgICAvLyBGb3IgYmFzaWMgYXV0aGVudGljYXRpb24gZG9uJ3QgcmV0cnkgYWxyZWFkeSB1c2VkIGNyZWRlbnRpYWxzCiAgICAgIC8vIGFzIHRoZXkgbXVzdCBoYXZlIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgcmVxdWVzdCBjYXVzaW5nCiAgICAgIC8vIHRoaXMgYXV0aGVudGljYXRlIHJlc3BvbnNlLgogICAgICBpZiAoY3Iuc2NoZW1lID09IF9BdXRoZW50aWNhdGlvblNjaGVtZS5CQVNJQyAmJiAhY3IudXNlZCkgewogICAgICAgIC8vIENyZWRlbnRpYWxzIHdoZXJlIGZvdW5kLCBwcmVwYXJlIGZvciByZXRyeWluZyB0aGUgcmVxdWVzdC4KICAgICAgICByZXR1cm4gcmV0cnkoKTsKICAgICAgfQoKICAgICAgLy8gRGlnZXN0IGF1dGhlbnRpY2F0aW9uIG9ubHkgc3VwcG9ydHMgdGhlIE1ENSBhbGdvcml0aG0uCiAgICAgIGlmIChjci5zY2hlbWUgPT0gX0F1dGhlbnRpY2F0aW9uU2NoZW1lLkRJR0VTVCAmJgogICAgICAgICAgKGhlYWRlci5wYXJhbWV0ZXJzWyJhbGdvcml0aG0iXSA9PSBudWxsIHx8CiAgICAgICAgICAgICAgaGVhZGVyLnBhcmFtZXRlcnNbImFsZ29yaXRobSJdLnRvTG93ZXJDYXNlKCkgPT0gIm1kNSIpKSB7CiAgICAgICAgaWYgKGNyLm5vbmNlID09IG51bGwgfHwgY3Iubm9uY2UgPT0gaGVhZGVyLnBhcmFtZXRlcnNbIm5vbmNlIl0pIHsKICAgICAgICAgIC8vIElmIHRoZSBub25jZSBpcyBub3Qgc2V0IHRoZW4gdGhpcyBpcyB0aGUgZmlyc3QgYXV0aGVudGljYXRlCiAgICAgICAgICAvLyByZXNwb25zZSBmb3IgdGhlc2UgY3JlZGVudGlhbHMuIFNldCB1cCBhdXRoZW50aWNhdGlvbiBzdGF0ZS4KICAgICAgICAgIGlmIChjci5ub25jZSA9PSBudWxsKSB7CiAgICAgICAgICAgIGNyCiAgICAgICAgICAgICAgLi5ub25jZSA9IGhlYWRlci5wYXJhbWV0ZXJzWyJub25jZSJdCiAgICAgICAgICAgICAgLi5hbGdvcml0aG0gPSAiTUQ1IgogICAgICAgICAgICAgIC4ucW9wID0gaGVhZGVyLnBhcmFtZXRlcnNbInFvcCJdCiAgICAgICAgICAgICAgLi5ub25jZUNvdW50ID0gMDsKICAgICAgICAgIH0KICAgICAgICAgIC8vIENyZWRlbnRpYWxzIHdoZXJlIGZvdW5kLCBwcmVwYXJlIGZvciByZXRyeWluZyB0aGUgcmVxdWVzdC4KICAgICAgICAgIHJldHVybiByZXRyeSgpOwogICAgICAgIH0gZWxzZSBpZiAoaGVhZGVyLnBhcmFtZXRlcnNbInN0YWxlIl0gIT0gbnVsbCAmJgogICAgICAgICAgICBoZWFkZXIucGFyYW1ldGVyc1sic3RhbGUiXS50b0xvd2VyQ2FzZSgpID09ICJ0cnVlIikgewogICAgICAgICAgLy8gSWYgc3RhbGUgaXMgdHJ1ZSByZXRyeSB3aXRoIG5ldyBub25jZS4KICAgICAgICAgIGNyLm5vbmNlID0gaGVhZGVyLnBhcmFtZXRlcnNbIm5vbmNlIl07CiAgICAgICAgICAvLyBDcmVkZW50aWFscyB3aGVyZSBmb3VuZCwgcHJlcGFyZSBmb3IgcmV0cnlpbmcgdGhlIHJlcXVlc3QuCiAgICAgICAgICByZXR1cm4gcmV0cnkoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBBc2sgZm9yIG1vcmUgY3JlZGVudGlhbHMgaWYgbm9uZSBmb3VuZCBvciB0aGUgb25lIGZvdW5kIGhhcwogICAgLy8gYWxyZWFkeSBiZWVuIHVzZWQuIElmIGl0IGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBpdCBtdXN0IG5vdyBiZQogICAgLy8gaW52YWxpZCBhbmQgaXMgcmVtb3ZlZC4KICAgIGlmIChjciAhPSBudWxsKSB7CiAgICAgIHJlbW92ZUNyZWRlbnRpYWxzKGNyKTsKICAgICAgY3IgPSBudWxsOwogICAgfQogICAgcmV0dXJuIHJlcXVlc3RBdXRoZW50aWNhdGlvbihzY2hlbWUsIHJlYWxtKS50aGVuKChjcmVkc0F2YWlsYWJsZSkgewogICAgICBpZiAoY3JlZHNBdmFpbGFibGUpIHsKICAgICAgICBjciA9IF9odHRwQ2xpZW50Ll9maW5kQ3JlZGVudGlhbHMoX2h0dHBSZXF1ZXN0LnVyaSwgc2NoZW1lKTsKICAgICAgICByZXR1cm4gcmV0cnkoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBObyBjcmVkZW50aWFscyBhdmFpbGFibGUsIGNvbXBsZXRlIHdpdGggb3JpZ2luYWwgcmVzcG9uc2UuCiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KICAgIH0pOwogIH0KfQoKY2xhc3MgX1RvVWludDhMaXN0IGV4dGVuZHMgQ29udmVydGVyPExpc3Q8aW50PiwgVWludDhMaXN0PiB7CiAgY29uc3QgX1RvVWludDhMaXN0KCk7CgogIFVpbnQ4TGlzdCBjb252ZXJ0KExpc3Q8aW50PiBpbnB1dCkgPT4gVWludDhMaXN0LmZyb21MaXN0KGlucHV0KTsKCiAgU2luazxMaXN0PGludD4+IHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxVaW50OExpc3Q+IHNpbmspIHsKICAgIHJldHVybiBfVWludDhMaXN0Q29udmVyc2lvblNpbmsoc2luayk7CiAgfQp9CgpjbGFzcyBfVWludDhMaXN0Q29udmVyc2lvblNpbmsgaW1wbGVtZW50cyBTaW5rPExpc3Q8aW50Pj4gewogIGNvbnN0IF9VaW50OExpc3RDb252ZXJzaW9uU2luayh0aGlzLl90YXJnZXQpOwoKICBmaW5hbCBTaW5rPFVpbnQ4TGlzdD4gX3RhcmdldDsKCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGRhdGEpIHsKICAgIF90YXJnZXQuYWRkKFVpbnQ4TGlzdC5mcm9tTGlzdChkYXRhKSk7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgX3RhcmdldC5jbG9zZSgpOwogIH0KfQoKY2xhc3MgX1N0cmVhbVNpbmtJbXBsPFQ+IGltcGxlbWVudHMgU3RyZWFtU2luazxUPiB7CiAgZmluYWwgU3RyZWFtQ29uc3VtZXI8VD4gX3RhcmdldDsKICBmaW5hbCBDb21wbGV0ZXIgX2RvbmVDb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyKCk7CiAgU3RyZWFtQ29udHJvbGxlcjxUPiBfY29udHJvbGxlckluc3RhbmNlOwogIENvbXBsZXRlciBfY29udHJvbGxlckNvbXBsZXRlcjsKICBib29sIF9pc0Nsb3NlZCA9IGZhbHNlOwogIGJvb2wgX2lzQm91bmQgPSBmYWxzZTsKICBib29sIF9oYXNFcnJvciA9IGZhbHNlOwoKICBfU3RyZWFtU2lua0ltcGwodGhpcy5fdGFyZ2V0KTsKCiAgdm9pZCBhZGQoVCBkYXRhKSB7CiAgICBpZiAoX2lzQ2xvc2VkKSB7CiAgICAgIHRocm93IFN0YXRlRXJyb3IoIlN0cmVhbVNpbmsgaXMgY2xvc2VkIik7CiAgICB9CiAgICBfY29udHJvbGxlci5hZGQoZGF0YSk7CiAgfQoKICB2b2lkIGFkZEVycm9yKGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgaWYgKF9pc0Nsb3NlZCkgewogICAgICB0aHJvdyBTdGF0ZUVycm9yKCJTdHJlYW1TaW5rIGlzIGNsb3NlZCIpOwogICAgfQogICAgX2NvbnRyb2xsZXIuYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgRnV0dXJlIGFkZFN0cmVhbShTdHJlYW08VD4gc3RyZWFtKSB7CiAgICBpZiAoX2lzQm91bmQpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIlN0cmVhbVNpbmsgaXMgYWxyZWFkeSBib3VuZCB0byBhIHN0cmVhbSIpOwogICAgfQogICAgX2lzQm91bmQgPSB0cnVlOwogICAgaWYgKF9oYXNFcnJvcikgcmV0dXJuIGRvbmU7CiAgICAvLyBXYWl0IGZvciBhbnkgc3luYyBvcGVyYXRpb25zIHRvIGNvbXBsZXRlLgogICAgRnV0dXJlIHRhcmdldEFkZFN0cmVhbSgpIHsKICAgICAgcmV0dXJuIF90YXJnZXQuYWRkU3RyZWFtKHN0cmVhbSkud2hlbkNvbXBsZXRlKCgpIHsKICAgICAgICBfaXNCb3VuZCA9IGZhbHNlOwogICAgICB9KTsKICAgIH0KCiAgICBpZiAoX2NvbnRyb2xsZXJJbnN0YW5jZSA9PSBudWxsKSByZXR1cm4gdGFyZ2V0QWRkU3RyZWFtKCk7CiAgICB2YXIgZnV0dXJlID0gX2NvbnRyb2xsZXJDb21wbGV0ZXIuZnV0dXJlOwogICAgX2NvbnRyb2xsZXJJbnN0YW5jZS5jbG9zZSgpOwogICAgcmV0dXJuIGZ1dHVyZS50aGVuKChfKSA9PiB0YXJnZXRBZGRTdHJlYW0oKSk7CiAgfQoKICBGdXR1cmUgZmx1c2goKSB7CiAgICBpZiAoX2lzQm91bmQpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIlN0cmVhbVNpbmsgaXMgYm91bmQgdG8gYSBzdHJlYW0iKTsKICAgIH0KICAgIGlmIChfY29udHJvbGxlckluc3RhbmNlID09IG51bGwpIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKHRoaXMpOwogICAgLy8gQWRkaW5nIGFuIGVtcHR5IHN0cmVhbS1jb250cm9sbGVyIHdpbGwgcmV0dXJuIGEgZnV0dXJlIHRoYXQgd2lsbCBjb21wbGV0ZQogICAgLy8gd2hlbiBhbGwgZGF0YSBpcyBkb25lLgogICAgX2lzQm91bmQgPSB0cnVlOwogICAgdmFyIGZ1dHVyZSA9IF9jb250cm9sbGVyQ29tcGxldGVyLmZ1dHVyZTsKICAgIF9jb250cm9sbGVySW5zdGFuY2UuY2xvc2UoKTsKICAgIHJldHVybiBmdXR1cmUud2hlbkNvbXBsZXRlKCgpIHsKICAgICAgX2lzQm91bmQgPSBmYWxzZTsKICAgIH0pOwogIH0KCiAgRnV0dXJlIGNsb3NlKCkgewogICAgaWYgKF9pc0JvdW5kKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJTdHJlYW1TaW5rIGlzIGJvdW5kIHRvIGEgc3RyZWFtIik7CiAgICB9CiAgICBpZiAoIV9pc0Nsb3NlZCkgewogICAgICBfaXNDbG9zZWQgPSB0cnVlOwogICAgICBpZiAoX2NvbnRyb2xsZXJJbnN0YW5jZSAhPSBudWxsKSB7CiAgICAgICAgX2NvbnRyb2xsZXJJbnN0YW5jZS5jbG9zZSgpOwogICAgICB9IGVsc2UgewogICAgICAgIF9jbG9zZVRhcmdldCgpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZG9uZTsKICB9CgogIHZvaWQgX2Nsb3NlVGFyZ2V0KCkgewogICAgX3RhcmdldC5jbG9zZSgpLnRoZW4oX2NvbXBsZXRlRG9uZVZhbHVlLCBvbkVycm9yOiBfY29tcGxldGVEb25lRXJyb3IpOwogIH0KCiAgRnV0dXJlIGdldCBkb25lID0+IF9kb25lQ29tcGxldGVyLmZ1dHVyZTsKCiAgdm9pZCBfY29tcGxldGVEb25lVmFsdWUodmFsdWUpIHsKICAgIGlmICghX2RvbmVDb21wbGV0ZXIuaXNDb21wbGV0ZWQpIHsKICAgICAgX2RvbmVDb21wbGV0ZXIuY29tcGxldGUodmFsdWUpOwogICAgfQogIH0KCiAgdm9pZCBfY29tcGxldGVEb25lRXJyb3IoZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgaWYgKCFfZG9uZUNvbXBsZXRlci5pc0NvbXBsZXRlZCkgewogICAgICBfaGFzRXJyb3IgPSB0cnVlOwogICAgICBfZG9uZUNvbXBsZXRlci5jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgIH0KICB9CgogIFN0cmVhbUNvbnRyb2xsZXI8VD4gZ2V0IF9jb250cm9sbGVyIHsKICAgIGlmIChfaXNCb3VuZCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiU3RyZWFtU2luayBpcyBib3VuZCB0byBhIHN0cmVhbSIpOwogICAgfQogICAgaWYgKF9pc0Nsb3NlZCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiU3RyZWFtU2luayBpcyBjbG9zZWQiKTsKICAgIH0KICAgIGlmIChfY29udHJvbGxlckluc3RhbmNlID09IG51bGwpIHsKICAgICAgX2NvbnRyb2xsZXJJbnN0YW5jZSA9IG5ldyBTdHJlYW1Db250cm9sbGVyPFQ+KHN5bmM6IHRydWUpOwogICAgICBfY29udHJvbGxlckNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXIoKTsKICAgICAgX3RhcmdldC5hZGRTdHJlYW0oX2NvbnRyb2xsZXIuc3RyZWFtKS50aGVuKChfKSB7CiAgICAgICAgaWYgKF9pc0JvdW5kKSB7CiAgICAgICAgICAvLyBBIG5ldyBzdHJlYW0gdGFrZXMgb3ZlciAtIGZvcndhcmQgdmFsdWVzIHRvIHRoYXQgc3RyZWFtLgogICAgICAgICAgX2NvbnRyb2xsZXJDb21wbGV0ZXIuY29tcGxldGUodGhpcyk7CiAgICAgICAgICBfY29udHJvbGxlckNvbXBsZXRlciA9IG51bGw7CiAgICAgICAgICBfY29udHJvbGxlckluc3RhbmNlID0gbnVsbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gTm8gbmV3IHN0cmVhbSwgLmNsb3NlIHdhcyBjYWxsZWQuIENsb3NlIF90YXJnZXQuCiAgICAgICAgICBfY2xvc2VUYXJnZXQoKTsKICAgICAgICB9CiAgICAgIH0sIG9uRXJyb3I6IChlcnJvciwgc3RhY2tUcmFjZSkgewogICAgICAgIGlmIChfaXNCb3VuZCkgewogICAgICAgICAgLy8gQSBuZXcgc3RyZWFtIHRha2VzIG92ZXIgLSBmb3J3YXJkIGVycm9ycyB0byB0aGF0IHN0cmVhbS4KICAgICAgICAgIF9jb250cm9sbGVyQ29tcGxldGVyLmNvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICAgICAgX2NvbnRyb2xsZXJDb21wbGV0ZXIgPSBudWxsOwogICAgICAgICAgX2NvbnRyb2xsZXJJbnN0YW5jZSA9IG51bGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIE5vIG5ldyBzdHJlYW0uIE5vIG5lZWQgdG8gY2xvc2UgdGFyZ2V0LCBhcyBpdCBoYXMgYWxyZWFkeQogICAgICAgICAgLy8gZmFpbGVkLgogICAgICAgICAgX2NvbXBsZXRlRG9uZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIF9jb250cm9sbGVySW5zdGFuY2U7CiAgfQp9CgpjbGFzcyBfSU9TaW5rSW1wbCBleHRlbmRzIF9TdHJlYW1TaW5rSW1wbDxMaXN0PGludD4+IGltcGxlbWVudHMgSU9TaW5rIHsKICBFbmNvZGluZyBfZW5jb2Rpbmc7CiAgYm9vbCBfZW5jb2RpbmdNdXRhYmxlID0gdHJ1ZTsKCiAgX0lPU2lua0ltcGwoU3RyZWFtQ29uc3VtZXI8TGlzdDxpbnQ+PiB0YXJnZXQsIHRoaXMuX2VuY29kaW5nKSA6IHN1cGVyKHRhcmdldCk7CgogIEVuY29kaW5nIGdldCBlbmNvZGluZyA9PiBfZW5jb2Rpbmc7CgogIHZvaWQgc2V0IGVuY29kaW5nKEVuY29kaW5nIHZhbHVlKSB7CiAgICBpZiAoIV9lbmNvZGluZ011dGFibGUpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIklPU2luayBlbmNvZGluZyBpcyBub3QgbXV0YWJsZSIpOwogICAgfQogICAgX2VuY29kaW5nID0gdmFsdWU7CiAgfQoKICB2b2lkIHdyaXRlKE9iamVjdCBvYmopIHsKICAgIFN0cmluZyBzdHJpbmcgPSAnJG9iaic7CiAgICBpZiAoc3RyaW5nLmlzRW1wdHkpIHJldHVybjsKICAgIGFkZChfZW5jb2RpbmcuZW5jb2RlKHN0cmluZykpOwogIH0KCiAgdm9pZCB3cml0ZUFsbChJdGVyYWJsZSBvYmplY3RzLCBbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSkgewogICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBvYmplY3RzLml0ZXJhdG9yOwogICAgaWYgKCFpdGVyYXRvci5tb3ZlTmV4dCgpKSByZXR1cm47CiAgICBpZiAoc2VwYXJhdG9yLmlzRW1wdHkpIHsKICAgICAgZG8gewogICAgICAgIHdyaXRlKGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgICB9IHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlKGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICAgIHdyaXRlKHNlcGFyYXRvcik7CiAgICAgICAgd3JpdGUoaXRlcmF0b3IuY3VycmVudCk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgd3JpdGVsbihbT2JqZWN0IG9iamVjdCA9ICIiXSkgewogICAgd3JpdGUob2JqZWN0KTsKICAgIHdyaXRlKCJcbiIpOwogIH0KCiAgdm9pZCB3cml0ZUNoYXJDb2RlKGludCBjaGFyQ29kZSkgewogICAgd3JpdGUobmV3IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpKTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9IdHRwT3V0Ym91bmRNZXNzYWdlPFQ+IGV4dGVuZHMgX0lPU2lua0ltcGwgewogIC8vIFVzZWQgdG8gbWFyayB3aGVuIHRoZSBib2R5IHNob3VsZCBiZSB3cml0dGVuLiBUaGlzIGlzIHVzZWQgZm9yIEhFQUQKICAvLyByZXF1ZXN0cyBhbmQgaW4gZXJyb3IgaGFuZGxpbmcuCiAgYm9vbCBfZW5jb2RpbmdTZXQgPSBmYWxzZTsKCiAgYm9vbCBfYnVmZmVyT3V0cHV0ID0gdHJ1ZTsKCiAgZmluYWwgVXJpIF91cmk7CiAgZmluYWwgX0h0dHBPdXRnb2luZyBfb3V0Z29pbmc7CgogIGZpbmFsIF9IdHRwSGVhZGVycyBoZWFkZXJzOwoKICBfSHR0cE91dGJvdW5kTWVzc2FnZShVcmkgdXJpLCBTdHJpbmcgcHJvdG9jb2xWZXJzaW9uLCBfSHR0cE91dGdvaW5nIG91dGdvaW5nLAogICAgICB7X0h0dHBIZWFkZXJzIGluaXRpYWxIZWFkZXJzfSkKICAgICAgOiBfdXJpID0gdXJpLAogICAgICAgIGhlYWRlcnMgPSBuZXcgX0h0dHBIZWFkZXJzKHByb3RvY29sVmVyc2lvbiwKICAgICAgICAgICAgZGVmYXVsdFBvcnRGb3JTY2hlbWU6IHVyaS5zY2hlbWUgPT0gJ2h0dHBzJwogICAgICAgICAgICAgICAgPyBIdHRwQ2xpZW50LmRlZmF1bHRIdHRwc1BvcnQKICAgICAgICAgICAgICAgIDogSHR0cENsaWVudC5kZWZhdWx0SHR0cFBvcnQsCiAgICAgICAgICAgIGluaXRpYWxIZWFkZXJzOiBpbml0aWFsSGVhZGVycyksCiAgICAgICAgX291dGdvaW5nID0gb3V0Z29pbmcsCiAgICAgICAgc3VwZXIob3V0Z29pbmcsIG51bGwpIHsKICAgIF9vdXRnb2luZy5vdXRib3VuZCA9IHRoaXM7CiAgICBfZW5jb2RpbmdNdXRhYmxlID0gZmFsc2U7CiAgfQoKICBpbnQgZ2V0IGNvbnRlbnRMZW5ndGggPT4gaGVhZGVycy5jb250ZW50TGVuZ3RoOwogIHZvaWQgc2V0IGNvbnRlbnRMZW5ndGgoaW50IGNvbnRlbnRMZW5ndGgpIHsKICAgIGhlYWRlcnMuY29udGVudExlbmd0aCA9IGNvbnRlbnRMZW5ndGg7CiAgfQoKICBib29sIGdldCBwZXJzaXN0ZW50Q29ubmVjdGlvbiA9PiBoZWFkZXJzLnBlcnNpc3RlbnRDb25uZWN0aW9uOwogIHZvaWQgc2V0IHBlcnNpc3RlbnRDb25uZWN0aW9uKGJvb2wgcCkgewogICAgaGVhZGVycy5wZXJzaXN0ZW50Q29ubmVjdGlvbiA9IHA7CiAgfQoKICBib29sIGdldCBidWZmZXJPdXRwdXQgPT4gX2J1ZmZlck91dHB1dDsKICB2b2lkIHNldCBidWZmZXJPdXRwdXQoYm9vbCBidWZmZXJPdXRwdXQpIHsKICAgIGlmIChfb3V0Z29pbmcuaGVhZGVyc1dyaXR0ZW4pIHRocm93IG5ldyBTdGF0ZUVycm9yKCJIZWFkZXIgYWxyZWFkeSBzZW50Iik7CiAgICBfYnVmZmVyT3V0cHV0ID0gYnVmZmVyT3V0cHV0OwogIH0KCiAgRW5jb2RpbmcgZ2V0IGVuY29kaW5nIHsKICAgIGlmIChfZW5jb2RpbmdTZXQgJiYgX291dGdvaW5nLmhlYWRlcnNXcml0dGVuKSB7CiAgICAgIHJldHVybiBfZW5jb2Rpbmc7CiAgICB9CiAgICB2YXIgY2hhcnNldDsKICAgIGlmIChoZWFkZXJzLmNvbnRlbnRUeXBlICE9IG51bGwgJiYgaGVhZGVycy5jb250ZW50VHlwZS5jaGFyc2V0ICE9IG51bGwpIHsKICAgICAgY2hhcnNldCA9IGhlYWRlcnMuY29udGVudFR5cGUuY2hhcnNldDsKICAgIH0gZWxzZSB7CiAgICAgIGNoYXJzZXQgPSAiaXNvLTg4NTktMSI7CiAgICB9CiAgICByZXR1cm4gRW5jb2RpbmcuZ2V0QnlOYW1lKGNoYXJzZXQpOwogIH0KCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGRhdGEpIHsKICAgIGlmIChkYXRhLmxlbmd0aCA9PSAwKSByZXR1cm47CiAgICBzdXBlci5hZGQoZGF0YSk7CiAgfQoKICB2b2lkIHdyaXRlKE9iamVjdCBvYmopIHsKICAgIGlmICghX2VuY29kaW5nU2V0KSB7CiAgICAgIF9lbmNvZGluZyA9IGVuY29kaW5nOwogICAgICBfZW5jb2RpbmdTZXQgPSB0cnVlOwogICAgfQogICAgc3VwZXIud3JpdGUob2JqKTsKICB9CgogIHZvaWQgX3dyaXRlSGVhZGVyKCk7CgogIGJvb2wgZ2V0IF9pc0Nvbm5lY3Rpb25DbG9zZWQgPT4gZmFsc2U7Cn0KCmNsYXNzIF9IdHRwUmVzcG9uc2UgZXh0ZW5kcyBfSHR0cE91dGJvdW5kTWVzc2FnZTxIdHRwUmVzcG9uc2U+CiAgICBpbXBsZW1lbnRzIEh0dHBSZXNwb25zZSB7CiAgaW50IF9zdGF0dXNDb2RlID0gMjAwOwogIFN0cmluZyBfcmVhc29uUGhyYXNlOwogIExpc3Q8Q29va2llPiBfY29va2llczsKICBfSHR0cFJlcXVlc3QgX2h0dHBSZXF1ZXN0OwogIER1cmF0aW9uIF9kZWFkbGluZTsKICBUaW1lciBfZGVhZGxpbmVUaW1lcjsKCiAgX0h0dHBSZXNwb25zZShVcmkgdXJpLCBTdHJpbmcgcHJvdG9jb2xWZXJzaW9uLCBfSHR0cE91dGdvaW5nIG91dGdvaW5nLAogICAgICBIdHRwSGVhZGVycyBkZWZhdWx0SGVhZGVycywgU3RyaW5nIHNlcnZlckhlYWRlcikKICAgICAgOiBzdXBlcih1cmksIHByb3RvY29sVmVyc2lvbiwgb3V0Z29pbmcsIGluaXRpYWxIZWFkZXJzOiBkZWZhdWx0SGVhZGVycykgewogICAgaWYgKHNlcnZlckhlYWRlciAhPSBudWxsKSBoZWFkZXJzLnNldCgnc2VydmVyJywgc2VydmVySGVhZGVyKTsKICB9CgogIGJvb2wgZ2V0IF9pc0Nvbm5lY3Rpb25DbG9zZWQgPT4gX2h0dHBSZXF1ZXN0Ll9odHRwQ29ubmVjdGlvbi5faXNDbG9zaW5nOwoKICBMaXN0PENvb2tpZT4gZ2V0IGNvb2tpZXMgewogICAgaWYgKF9jb29raWVzID09IG51bGwpIF9jb29raWVzID0gbmV3IExpc3Q8Q29va2llPigpOwogICAgcmV0dXJuIF9jb29raWVzOwogIH0KCiAgaW50IGdldCBzdGF0dXNDb2RlID0+IF9zdGF0dXNDb2RlOwogIHZvaWQgc2V0IHN0YXR1c0NvZGUoaW50IHN0YXR1c0NvZGUpIHsKICAgIGlmIChfb3V0Z29pbmcuaGVhZGVyc1dyaXR0ZW4pIHRocm93IG5ldyBTdGF0ZUVycm9yKCJIZWFkZXIgYWxyZWFkeSBzZW50Iik7CiAgICBfc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7CiAgfQoKICBTdHJpbmcgZ2V0IHJlYXNvblBocmFzZSA9PiBfZmluZFJlYXNvblBocmFzZShzdGF0dXNDb2RlKTsKICB2b2lkIHNldCByZWFzb25QaHJhc2UoU3RyaW5nIHJlYXNvblBocmFzZSkgewogICAgaWYgKF9vdXRnb2luZy5oZWFkZXJzV3JpdHRlbikgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIkhlYWRlciBhbHJlYWR5IHNlbnQiKTsKICAgIF9yZWFzb25QaHJhc2UgPSByZWFzb25QaHJhc2U7CiAgfQoKICBGdXR1cmUgcmVkaXJlY3QoVXJpIGxvY2F0aW9uLCB7aW50IHN0YXR1czogSHR0cFN0YXR1cy5tb3ZlZFRlbXBvcmFyaWx5fSkgewogICAgaWYgKF9vdXRnb2luZy5oZWFkZXJzV3JpdHRlbikgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIkhlYWRlciBhbHJlYWR5IHNlbnQiKTsKICAgIHN0YXR1c0NvZGUgPSBzdGF0dXM7CiAgICBoZWFkZXJzLnNldCgibG9jYXRpb24iLCBsb2NhdGlvbi50b1N0cmluZygpKTsKICAgIHJldHVybiBjbG9zZSgpOwogIH0KCiAgRnV0dXJlPFNvY2tldD4gZGV0YWNoU29ja2V0KHtib29sIHdyaXRlSGVhZGVyczogdHJ1ZX0pIHsKICAgIGlmIChfb3V0Z29pbmcuaGVhZGVyc1dyaXR0ZW4pIHRocm93IG5ldyBTdGF0ZUVycm9yKCJIZWFkZXJzIGFscmVhZHkgc2VudCIpOwogICAgZGVhZGxpbmUgPSBudWxsOyAvLyBCZSBzdXJlIHRvIHN0b3AgYW55IGRlYWRsaW5lLgogICAgdmFyIGZ1dHVyZSA9IF9odHRwUmVxdWVzdC5faHR0cENvbm5lY3Rpb24uZGV0YWNoU29ja2V0KCk7CiAgICBpZiAod3JpdGVIZWFkZXJzKSB7CiAgICAgIHZhciBoZWFkZXJzRnV0dXJlID0KICAgICAgICAgIF9vdXRnb2luZy53cml0ZUhlYWRlcnMoZHJhaW5SZXF1ZXN0OiBmYWxzZSwgc2V0T3V0Z29pbmc6IGZhbHNlKTsKICAgICAgYXNzZXJ0KGhlYWRlcnNGdXR1cmUgPT0gbnVsbCk7CiAgICB9IGVsc2UgewogICAgICAvLyBJbWl0YXRlIGhhdmluZyB3cml0dGVuIHRoZSBoZWFkZXJzLgogICAgICBfb3V0Z29pbmcuaGVhZGVyc1dyaXR0ZW4gPSB0cnVlOwogICAgfQogICAgLy8gQ2xvc2UgY29ubmVjdGlvbiBzbyB0aGUgc29ja2V0IGlzICdmcmVlJy4KICAgIGNsb3NlKCk7CiAgICBkb25lLmNhdGNoRXJyb3IoKF8pIHsKICAgICAgLy8gQ2F0Y2ggYW55IGVycm9yIG9uIGRvbmUsIGFzIHRoZXkgYXV0b21hdGljYWxseSB3aWxsIGJlCiAgICAgIC8vIHByb3BhZ2F0ZWQgdG8gdGhlIHdlYnNvY2tldC4KICAgIH0pOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9CgogIEh0dHBDb25uZWN0aW9uSW5mbyBnZXQgY29ubmVjdGlvbkluZm8gPT4gX2h0dHBSZXF1ZXN0LmNvbm5lY3Rpb25JbmZvOwoKICBEdXJhdGlvbiBnZXQgZGVhZGxpbmUgPT4gX2RlYWRsaW5lOwoKICB2b2lkIHNldCBkZWFkbGluZShEdXJhdGlvbiBkKSB7CiAgICBpZiAoX2RlYWRsaW5lVGltZXIgIT0gbnVsbCkgX2RlYWRsaW5lVGltZXIuY2FuY2VsKCk7CiAgICBfZGVhZGxpbmUgPSBkOwoKICAgIGlmIChfZGVhZGxpbmUgPT0gbnVsbCkgcmV0dXJuOwogICAgX2RlYWRsaW5lVGltZXIgPSBuZXcgVGltZXIoX2RlYWRsaW5lLCAoKSB7CiAgICAgIF9odHRwUmVxdWVzdC5faHR0cENvbm5lY3Rpb24uZGVzdHJveSgpOwogICAgfSk7CiAgfQoKICB2b2lkIF93cml0ZUhlYWRlcigpIHsKICAgIEJ5dGVzQnVpbGRlciBidWZmZXIgPSBuZXcgX0NvcHlpbmdCeXRlc0J1aWxkZXIoX09VVEdPSU5HX0JVRkZFUl9TSVpFKTsKCiAgICAvLyBXcml0ZSBzdGF0dXMgbGluZS4KICAgIGlmIChoZWFkZXJzLnByb3RvY29sVmVyc2lvbiA9PSAiMS4xIikgewogICAgICBidWZmZXIuYWRkKF9Db25zdC5IVFRQMTEpOwogICAgfSBlbHNlIHsKICAgICAgYnVmZmVyLmFkZChfQ29uc3QuSFRUUDEwKTsKICAgIH0KICAgIGJ1ZmZlci5hZGRCeXRlKF9DaGFyQ29kZS5TUCk7CiAgICBidWZmZXIuYWRkKHN0YXR1c0NvZGUudG9TdHJpbmcoKS5jb2RlVW5pdHMpOwogICAgYnVmZmVyLmFkZEJ5dGUoX0NoYXJDb2RlLlNQKTsKICAgIGJ1ZmZlci5hZGQocmVhc29uUGhyYXNlLmNvZGVVbml0cyk7CiAgICBidWZmZXIuYWRkQnl0ZShfQ2hhckNvZGUuQ1IpOwogICAgYnVmZmVyLmFkZEJ5dGUoX0NoYXJDb2RlLkxGKTsKCiAgICB2YXIgc2Vzc2lvbiA9IF9odHRwUmVxdWVzdC5fc2Vzc2lvbjsKICAgIGlmIChzZXNzaW9uICE9IG51bGwgJiYgIXNlc3Npb24uX2Rlc3Ryb3llZCkgewogICAgICAvLyBNYXJrIGFzIG5vdCBuZXcuCiAgICAgIHNlc3Npb24uX2lzTmV3ID0gZmFsc2U7CiAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBvbmx5IHNlbmQgdGhlIGN1cnJlbnQgc2Vzc2lvbiBpZC4KICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoY29va2llc1tpXS5uYW1lLnRvVXBwZXJDYXNlKCkgPT0gX0RBUlRfU0VTU0lPTl9JRCkgewogICAgICAgICAgY29va2llc1tpXQogICAgICAgICAgICAuLnZhbHVlID0gc2Vzc2lvbi5pZAogICAgICAgICAgICAuLmh0dHBPbmx5ID0gdHJ1ZQogICAgICAgICAgICAuLnBhdGggPSAiLyI7CiAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghZm91bmQpIHsKICAgICAgICB2YXIgY29va2llID0gbmV3IENvb2tpZShfREFSVF9TRVNTSU9OX0lELCBzZXNzaW9uLmlkKTsKICAgICAgICBjb29raWVzLmFkZChjb29raWUKICAgICAgICAgIC4uaHR0cE9ubHkgPSB0cnVlCiAgICAgICAgICAuLnBhdGggPSAiLyIpOwogICAgICB9CiAgICB9CiAgICAvLyBBZGQgYWxsIHRoZSBjb29raWVzIHNldCB0byB0aGUgaGVhZGVycy4KICAgIGlmIChfY29va2llcyAhPSBudWxsKSB7CiAgICAgIF9jb29raWVzLmZvckVhY2goKGNvb2tpZSkgewogICAgICAgIGhlYWRlcnMuYWRkKEh0dHBIZWFkZXJzLnNldENvb2tpZUhlYWRlciwgY29va2llKTsKICAgICAgfSk7CiAgICB9CgogICAgaGVhZGVycy5fZmluYWxpemUoKTsKCiAgICAvLyBXcml0ZSBoZWFkZXJzLgogICAgaGVhZGVycy5fYnVpbGQoYnVmZmVyKTsKICAgIGJ1ZmZlci5hZGRCeXRlKF9DaGFyQ29kZS5DUik7CiAgICBidWZmZXIuYWRkQnl0ZShfQ2hhckNvZGUuTEYpOwogICAgVWludDhMaXN0IGhlYWRlckJ5dGVzID0gYnVmZmVyLnRha2VCeXRlcygpOwogICAgX291dGdvaW5nLnNldEhlYWRlcihoZWFkZXJCeXRlcywgaGVhZGVyQnl0ZXMubGVuZ3RoKTsKICB9CgogIFN0cmluZyBfZmluZFJlYXNvblBocmFzZShpbnQgc3RhdHVzQ29kZSkgewogICAgaWYgKF9yZWFzb25QaHJhc2UgIT0gbnVsbCkgewogICAgICByZXR1cm4gX3JlYXNvblBocmFzZTsKICAgIH0KCiAgICBzd2l0Y2ggKHN0YXR1c0NvZGUpIHsKICAgICAgY2FzZSBIdHRwU3RhdHVzLmNvbnRpbnVlXzoKICAgICAgICByZXR1cm4gIkNvbnRpbnVlIjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLnN3aXRjaGluZ1Byb3RvY29sczoKICAgICAgICByZXR1cm4gIlN3aXRjaGluZyBQcm90b2NvbHMiOwogICAgICBjYXNlIEh0dHBTdGF0dXMub2s6CiAgICAgICAgcmV0dXJuICJPSyI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5jcmVhdGVkOgogICAgICAgIHJldHVybiAiQ3JlYXRlZCI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5hY2NlcHRlZDoKICAgICAgICByZXR1cm4gIkFjY2VwdGVkIjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLm5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoKICAgICAgICByZXR1cm4gIk5vbi1BdXRob3JpdGF0aXZlIEluZm9ybWF0aW9uIjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLm5vQ29udGVudDoKICAgICAgICByZXR1cm4gIk5vIENvbnRlbnQiOwogICAgICBjYXNlIEh0dHBTdGF0dXMucmVzZXRDb250ZW50OgogICAgICAgIHJldHVybiAiUmVzZXQgQ29udGVudCI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5wYXJ0aWFsQ29udGVudDoKICAgICAgICByZXR1cm4gIlBhcnRpYWwgQ29udGVudCI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5tdWx0aXBsZUNob2ljZXM6CiAgICAgICAgcmV0dXJuICJNdWx0aXBsZSBDaG9pY2VzIjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLm1vdmVkUGVybWFuZW50bHk6CiAgICAgICAgcmV0dXJuICJNb3ZlZCBQZXJtYW5lbnRseSI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5mb3VuZDoKICAgICAgICByZXR1cm4gIkZvdW5kIjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLnNlZU90aGVyOgogICAgICAgIHJldHVybiAiU2VlIE90aGVyIjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLm5vdE1vZGlmaWVkOgogICAgICAgIHJldHVybiAiTm90IE1vZGlmaWVkIjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLnVzZVByb3h5OgogICAgICAgIHJldHVybiAiVXNlIFByb3h5IjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLnRlbXBvcmFyeVJlZGlyZWN0OgogICAgICAgIHJldHVybiAiVGVtcG9yYXJ5IFJlZGlyZWN0IjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLmJhZFJlcXVlc3Q6CiAgICAgICAgcmV0dXJuICJCYWQgUmVxdWVzdCI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy51bmF1dGhvcml6ZWQ6CiAgICAgICAgcmV0dXJuICJVbmF1dGhvcml6ZWQiOwogICAgICBjYXNlIEh0dHBTdGF0dXMucGF5bWVudFJlcXVpcmVkOgogICAgICAgIHJldHVybiAiUGF5bWVudCBSZXF1aXJlZCI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5mb3JiaWRkZW46CiAgICAgICAgcmV0dXJuICJGb3JiaWRkZW4iOwogICAgICBjYXNlIEh0dHBTdGF0dXMubm90Rm91bmQ6CiAgICAgICAgcmV0dXJuICJOb3QgRm91bmQiOwogICAgICBjYXNlIEh0dHBTdGF0dXMubWV0aG9kTm90QWxsb3dlZDoKICAgICAgICByZXR1cm4gIk1ldGhvZCBOb3QgQWxsb3dlZCI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5ub3RBY2NlcHRhYmxlOgogICAgICAgIHJldHVybiAiTm90IEFjY2VwdGFibGUiOwogICAgICBjYXNlIEh0dHBTdGF0dXMucHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOgogICAgICAgIHJldHVybiAiUHJveHkgQXV0aGVudGljYXRpb24gUmVxdWlyZWQiOwogICAgICBjYXNlIEh0dHBTdGF0dXMucmVxdWVzdFRpbWVvdXQ6CiAgICAgICAgcmV0dXJuICJSZXF1ZXN0IFRpbWUtb3V0IjsKICAgICAgY2FzZSBIdHRwU3RhdHVzLmNvbmZsaWN0OgogICAgICAgIHJldHVybiAiQ29uZmxpY3QiOwogICAgICBjYXNlIEh0dHBTdGF0dXMuZ29uZToKICAgICAgICByZXR1cm4gIkdvbmUiOwogICAgICBjYXNlIEh0dHBTdGF0dXMubGVuZ3RoUmVxdWlyZWQ6CiAgICAgICAgcmV0dXJuICJMZW5ndGggUmVxdWlyZWQiOwogICAgICBjYXNlIEh0dHBTdGF0dXMucHJlY29uZGl0aW9uRmFpbGVkOgogICAgICAgIHJldHVybiAiUHJlY29uZGl0aW9uIEZhaWxlZCI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5yZXF1ZXN0RW50aXR5VG9vTGFyZ2U6CiAgICAgICAgcmV0dXJuICJSZXF1ZXN0IEVudGl0eSBUb28gTGFyZ2UiOwogICAgICBjYXNlIEh0dHBTdGF0dXMucmVxdWVzdFVyaVRvb0xvbmc6CiAgICAgICAgcmV0dXJuICJSZXF1ZXN0LVVSSSBUb28gTG9uZyI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy51bnN1cHBvcnRlZE1lZGlhVHlwZToKICAgICAgICByZXR1cm4gIlVuc3VwcG9ydGVkIE1lZGlhIFR5cGUiOwogICAgICBjYXNlIEh0dHBTdGF0dXMucmVxdWVzdGVkUmFuZ2VOb3RTYXRpc2ZpYWJsZToKICAgICAgICByZXR1cm4gIlJlcXVlc3RlZCByYW5nZSBub3Qgc2F0aXNmaWFibGUiOwogICAgICBjYXNlIEh0dHBTdGF0dXMuZXhwZWN0YXRpb25GYWlsZWQ6CiAgICAgICAgcmV0dXJuICJFeHBlY3RhdGlvbiBGYWlsZWQiOwogICAgICBjYXNlIEh0dHBTdGF0dXMuaW50ZXJuYWxTZXJ2ZXJFcnJvcjoKICAgICAgICByZXR1cm4gIkludGVybmFsIFNlcnZlciBFcnJvciI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5ub3RJbXBsZW1lbnRlZDoKICAgICAgICByZXR1cm4gIk5vdCBJbXBsZW1lbnRlZCI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5iYWRHYXRld2F5OgogICAgICAgIHJldHVybiAiQmFkIEdhdGV3YXkiOwogICAgICBjYXNlIEh0dHBTdGF0dXMuc2VydmljZVVuYXZhaWxhYmxlOgogICAgICAgIHJldHVybiAiU2VydmljZSBVbmF2YWlsYWJsZSI7CiAgICAgIGNhc2UgSHR0cFN0YXR1cy5nYXRld2F5VGltZW91dDoKICAgICAgICByZXR1cm4gIkdhdGV3YXkgVGltZS1vdXQiOwogICAgICBjYXNlIEh0dHBTdGF0dXMuaHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6CiAgICAgICAgcmV0dXJuICJIdHRwIFZlcnNpb24gbm90IHN1cHBvcnRlZCI7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuICJTdGF0dXMgJHN0YXR1c0NvZGUiOwogICAgfQogIH0KfQoKY2xhc3MgX0h0dHBDbGllbnRSZXF1ZXN0IGV4dGVuZHMgX0h0dHBPdXRib3VuZE1lc3NhZ2U8SHR0cENsaWVudFJlc3BvbnNlPgogICAgaW1wbGVtZW50cyBIdHRwQ2xpZW50UmVxdWVzdCB7CiAgZmluYWwgU3RyaW5nIG1ldGhvZDsKICBmaW5hbCBVcmkgdXJpOwogIGZpbmFsIExpc3Q8Q29va2llPiBjb29raWVzID0gbmV3IExpc3Q8Q29va2llPigpOwoKICAvLyBUaGUgSHR0cENsaWVudCB0aGlzIHJlcXVlc3QgYmVsb25ncyB0by4KICBmaW5hbCBfSHR0cENsaWVudCBfaHR0cENsaWVudDsKICBmaW5hbCBfSHR0cENsaWVudENvbm5lY3Rpb24gX2h0dHBDbGllbnRDb25uZWN0aW9uOwoKICBmaW5hbCBDb21wbGV0ZXI8SHR0cENsaWVudFJlc3BvbnNlPiBfcmVzcG9uc2VDb21wbGV0ZXIgPQogICAgICBuZXcgQ29tcGxldGVyPEh0dHBDbGllbnRSZXNwb25zZT4oKTsKCiAgZmluYWwgX1Byb3h5IF9wcm94eTsKCiAgRnV0dXJlPEh0dHBDbGllbnRSZXNwb25zZT4gX3Jlc3BvbnNlOwoKICAvLyBUT0RPKGFqb2huc2VuKTogR2V0IGRlZmF1bHQgdmFsdWUgZnJvbSBjbGllbnQ/CiAgYm9vbCBfZm9sbG93UmVkaXJlY3RzID0gdHJ1ZTsKCiAgaW50IF9tYXhSZWRpcmVjdHMgPSA1OwoKICBMaXN0PFJlZGlyZWN0SW5mbz4gX3Jlc3BvbnNlUmVkaXJlY3RzID0gW107CgogIF9IdHRwQ2xpZW50UmVxdWVzdChfSHR0cE91dGdvaW5nIG91dGdvaW5nLCBVcmkgdXJpLCB0aGlzLm1ldGhvZCwgdGhpcy5fcHJveHksCiAgICAgIHRoaXMuX2h0dHBDbGllbnQsIHRoaXMuX2h0dHBDbGllbnRDb25uZWN0aW9uKQogICAgICA6IHVyaSA9IHVyaSwKICAgICAgICBzdXBlcih1cmksICIxLjEiLCBvdXRnb2luZykgewogICAgLy8gR0VUIGFuZCBIRUFEIGhhdmUgJ2NvbnRlbnQtbGVuZ3RoOiAwJyBieSBkZWZhdWx0LgogICAgaWYgKG1ldGhvZCA9PSAiR0VUIiB8fCBtZXRob2QgPT0gIkhFQUQiKSB7CiAgICAgIGNvbnRlbnRMZW5ndGggPSAwOwogICAgfSBlbHNlIHsKICAgICAgaGVhZGVycy5jaHVua2VkVHJhbnNmZXJFbmNvZGluZyA9IHRydWU7CiAgICB9CiAgfQoKICBGdXR1cmU8SHR0cENsaWVudFJlc3BvbnNlPiBnZXQgZG9uZSB7CiAgICBpZiAoX3Jlc3BvbnNlID09IG51bGwpIHsKICAgICAgX3Jlc3BvbnNlID0KICAgICAgICAgIEZ1dHVyZS53YWl0KFtfcmVzcG9uc2VDb21wbGV0ZXIuZnV0dXJlLCBzdXBlci5kb25lXSwgZWFnZXJFcnJvcjogdHJ1ZSkKICAgICAgICAgICAgICAudGhlbigobGlzdCkgPT4gbGlzdFswXSk7CiAgICB9CiAgICByZXR1cm4gX3Jlc3BvbnNlOwogIH0KCiAgRnV0dXJlPEh0dHBDbGllbnRSZXNwb25zZT4gY2xvc2UoKSB7CiAgICBzdXBlci5jbG9zZSgpOwogICAgcmV0dXJuIGRvbmU7CiAgfQoKICBpbnQgZ2V0IG1heFJlZGlyZWN0cyA9PiBfbWF4UmVkaXJlY3RzOwogIHZvaWQgc2V0IG1heFJlZGlyZWN0cyhpbnQgbWF4UmVkaXJlY3RzKSB7CiAgICBpZiAoX291dGdvaW5nLmhlYWRlcnNXcml0dGVuKSB0aHJvdyBuZXcgU3RhdGVFcnJvcigiUmVxdWVzdCBhbHJlYWR5IHNlbnQiKTsKICAgIF9tYXhSZWRpcmVjdHMgPSBtYXhSZWRpcmVjdHM7CiAgfQoKICBib29sIGdldCBmb2xsb3dSZWRpcmVjdHMgPT4gX2ZvbGxvd1JlZGlyZWN0czsKICB2b2lkIHNldCBmb2xsb3dSZWRpcmVjdHMoYm9vbCBmb2xsb3dSZWRpcmVjdHMpIHsKICAgIGlmIChfb3V0Z29pbmcuaGVhZGVyc1dyaXR0ZW4pIHRocm93IG5ldyBTdGF0ZUVycm9yKCJSZXF1ZXN0IGFscmVhZHkgc2VudCIpOwogICAgX2ZvbGxvd1JlZGlyZWN0cyA9IGZvbGxvd1JlZGlyZWN0czsKICB9CgogIEh0dHBDb25uZWN0aW9uSW5mbyBnZXQgY29ubmVjdGlvbkluZm8gPT4gX2h0dHBDbGllbnRDb25uZWN0aW9uLmNvbm5lY3Rpb25JbmZvOwoKICB2b2lkIF9vbkluY29taW5nKF9IdHRwSW5jb21pbmcgaW5jb21pbmcpIHsKICAgIHZhciByZXNwb25zZSA9IG5ldyBfSHR0cENsaWVudFJlc3BvbnNlKGluY29taW5nLCB0aGlzLCBfaHR0cENsaWVudCk7CiAgICBGdXR1cmU8SHR0cENsaWVudFJlc3BvbnNlPiBmdXR1cmU7CiAgICBpZiAoZm9sbG93UmVkaXJlY3RzICYmIHJlc3BvbnNlLmlzUmVkaXJlY3QpIHsKICAgICAgaWYgKHJlc3BvbnNlLnJlZGlyZWN0cy5sZW5ndGggPCBtYXhSZWRpcmVjdHMpIHsKICAgICAgICAvLyBSZWRpcmVjdCBhbmQgZHJhaW4gcmVzcG9uc2UuCiAgICAgICAgZnV0dXJlID0gcmVzcG9uc2UKICAgICAgICAgICAgLmRyYWluKCkKICAgICAgICAgICAgLnRoZW48SHR0cENsaWVudFJlc3BvbnNlPigoXykgPT4gcmVzcG9uc2UucmVkaXJlY3QoKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gRW5kIHdpdGggZXhjZXB0aW9uLCB0b28gbWFueSByZWRpcmVjdHMuCiAgICAgICAgZnV0dXJlID0gcmVzcG9uc2UuZHJhaW4oKS50aGVuPEh0dHBDbGllbnRSZXNwb25zZT4oKF8pIHsKICAgICAgICAgIHJldHVybiBuZXcgRnV0dXJlPEh0dHBDbGllbnRSZXNwb25zZT4uZXJyb3IobmV3IFJlZGlyZWN0RXhjZXB0aW9uKAogICAgICAgICAgICAgICJSZWRpcmVjdCBsaW1pdCBleGNlZWRlZCIsIHJlc3BvbnNlLnJlZGlyZWN0cykpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLl9zaG91bGRBdXRoZW50aWNhdGVQcm94eSkgewogICAgICBmdXR1cmUgPSByZXNwb25zZS5fYXV0aGVudGljYXRlKHRydWUpOwogICAgfSBlbHNlIGlmIChyZXNwb25zZS5fc2hvdWxkQXV0aGVudGljYXRlKSB7CiAgICAgIGZ1dHVyZSA9IHJlc3BvbnNlLl9hdXRoZW50aWNhdGUoZmFsc2UpOwogICAgfSBlbHNlIHsKICAgICAgZnV0dXJlID0gbmV3IEZ1dHVyZTxIdHRwQ2xpZW50UmVzcG9uc2U+LnZhbHVlKHJlc3BvbnNlKTsKICAgIH0KICAgIGZ1dHVyZS50aGVuKCh2KSA9PiBfcmVzcG9uc2VDb21wbGV0ZXIuY29tcGxldGUodiksCiAgICAgICAgb25FcnJvcjogX3Jlc3BvbnNlQ29tcGxldGVyLmNvbXBsZXRlRXJyb3IpOwogIH0KCiAgdm9pZCBfb25FcnJvcihlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICBfcmVzcG9uc2VDb21wbGV0ZXIuY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICAvLyBHZW5lcmF0ZSB0aGUgcmVxdWVzdCBVUkkgYmFzZWQgb24gdGhlIG1ldGhvZCBhbmQgcHJveHkuCiAgU3RyaW5nIF9yZXF1ZXN0VXJpKCkgewogICAgLy8gR2VuZXJhdGUgdGhlIHJlcXVlc3QgVVJJIHN0YXJ0aW5nIGZyb20gdGhlIHBhdGggY29tcG9uZW50LgogICAgU3RyaW5nIHVyaVN0YXJ0aW5nRnJvbVBhdGgoKSB7CiAgICAgIFN0cmluZyByZXN1bHQgPSB1cmkucGF0aDsKICAgICAgaWYgKHJlc3VsdC5pc0VtcHR5KSByZXN1bHQgPSAiLyI7CiAgICAgIGlmICh1cmkuaGFzUXVlcnkpIHsKICAgICAgICByZXN1bHQgPSAiJHtyZXN1bHR9PyR7dXJpLnF1ZXJ5fSI7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICBpZiAoX3Byb3h5LmlzRGlyZWN0KSB7CiAgICAgIHJldHVybiB1cmlTdGFydGluZ0Zyb21QYXRoKCk7CiAgICB9IGVsc2UgewogICAgICBpZiAobWV0aG9kID09ICJDT05ORUNUIikgewogICAgICAgIC8vIEZvciB0aGUgY29ubmVjdCBtZXRob2QgdGhlIHJlcXVlc3QgVVJJIGlzIHRoZSBob3N0OnBvcnQgb2YKICAgICAgICAvLyB0aGUgcmVxdWVzdGVkIGRlc3RpbmF0aW9uIG9mIHRoZSB0dW5uZWwgKHNlZSBSRkMgMjgxNwogICAgICAgIC8vIHNlY3Rpb24gNS4yKQogICAgICAgIHJldHVybiAiJHt1cmkuaG9zdH06JHt1cmkucG9ydH0iOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChfaHR0cENsaWVudENvbm5lY3Rpb24uX3Byb3h5VHVubmVsKSB7CiAgICAgICAgICByZXR1cm4gdXJpU3RhcnRpbmdGcm9tUGF0aCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gdXJpLnJlbW92ZUZyYWdtZW50KCkudG9TdHJpbmcoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgX3dyaXRlSGVhZGVyKCkgewogICAgQnl0ZXNCdWlsZGVyIGJ1ZmZlciA9IG5ldyBfQ29weWluZ0J5dGVzQnVpbGRlcihfT1VUR09JTkdfQlVGRkVSX1NJWkUpOwoKICAgIC8vIFdyaXRlIHRoZSByZXF1ZXN0IG1ldGhvZC4KICAgIGJ1ZmZlci5hZGQobWV0aG9kLmNvZGVVbml0cyk7CiAgICBidWZmZXIuYWRkQnl0ZShfQ2hhckNvZGUuU1ApOwogICAgLy8gV3JpdGUgdGhlIHJlcXVlc3QgVVJJLgogICAgYnVmZmVyLmFkZChfcmVxdWVzdFVyaSgpLmNvZGVVbml0cyk7CiAgICBidWZmZXIuYWRkQnl0ZShfQ2hhckNvZGUuU1ApOwogICAgLy8gV3JpdGUgSFRUUC8xLjEuCiAgICBidWZmZXIuYWRkKF9Db25zdC5IVFRQMTEpOwogICAgYnVmZmVyLmFkZEJ5dGUoX0NoYXJDb2RlLkNSKTsKICAgIGJ1ZmZlci5hZGRCeXRlKF9DaGFyQ29kZS5MRik7CgogICAgLy8gQWRkIHRoZSBjb29raWVzIHRvIHRoZSBoZWFkZXJzLgogICAgaWYgKCFjb29raWVzLmlzRW1wdHkpIHsKICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoaSA+IDApIHNiLndyaXRlKCI7ICIpOwogICAgICAgIHNiLi53cml0ZShjb29raWVzW2ldLm5hbWUpLi53cml0ZSgiPSIpLi53cml0ZShjb29raWVzW2ldLnZhbHVlKTsKICAgICAgfQogICAgICBoZWFkZXJzLmFkZChIdHRwSGVhZGVycy5jb29raWVIZWFkZXIsIHNiLnRvU3RyaW5nKCkpOwogICAgfQoKICAgIGhlYWRlcnMuX2ZpbmFsaXplKCk7CgogICAgLy8gV3JpdGUgaGVhZGVycy4KICAgIGhlYWRlcnMuX2J1aWxkKGJ1ZmZlcik7CiAgICBidWZmZXIuYWRkQnl0ZShfQ2hhckNvZGUuQ1IpOwogICAgYnVmZmVyLmFkZEJ5dGUoX0NoYXJDb2RlLkxGKTsKICAgIFVpbnQ4TGlzdCBoZWFkZXJCeXRlcyA9IGJ1ZmZlci50YWtlQnl0ZXMoKTsKICAgIF9vdXRnb2luZy5zZXRIZWFkZXIoaGVhZGVyQnl0ZXMsIGhlYWRlckJ5dGVzLmxlbmd0aCk7CiAgfQp9CgovLyBVc2VkIGJ5IF9IdHRwT3V0Z29pbmcgYXMgYSB0YXJnZXQgb2YgYSBjaHVua2VkIGNvbnZlcnRlciBmb3IgZ3ppcAovLyBjb21wcmVzc2lvbi4KY2xhc3MgX0h0dHBHWmlwU2luayBleHRlbmRzIEJ5dGVDb252ZXJzaW9uU2luayB7CiAgZmluYWwgX0J5dGVzQ29uc3VtZXIgX2NvbnN1bWU7CiAgX0h0dHBHWmlwU2luayh0aGlzLl9jb25zdW1lKTsKCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGNodW5rKSB7CiAgICBfY29uc3VtZShjaHVuayk7CiAgfQoKICB2b2lkIGFkZFNsaWNlKExpc3Q8aW50PiBjaHVuaywgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgaWYgKGNodW5rIGlzIFVpbnQ4TGlzdCkgewogICAgICBfY29uc3VtZShuZXcgVWludDhMaXN0LnZpZXcoY2h1bmsuYnVmZmVyLCBzdGFydCwgZW5kIC0gc3RhcnQpKTsKICAgIH0gZWxzZSB7CiAgICAgIF9jb25zdW1lKGNodW5rLnN1Ymxpc3Qoc3RhcnQsIGVuZCAtIHN0YXJ0KSk7CiAgICB9CiAgfQoKICB2b2lkIGNsb3NlKCkge30KfQoKLy8gVGhlIF9IdHRwT3V0Z29pbmcgaGFuZGxlcyBhbGwgb2YgdGhlIGZvbGxvd2luZzoKLy8gIC0gQnVmZmVyaW5nCi8vICAtIEdaaXAgY29tcHJlc3Npb24KLy8gIC0gQ29udGVudC1MZW5ndGggdmFsaWRhdGlvbi4KLy8gIC0gRXJyb3JzLgovLwovLyBNb3N0IG5vdGFibGUgaXMgdGhlIEdaaXAgY29tcHJlc3Npb24sIHRoYXQgdXNlcyBhIGRvdWJsZS1idWZmZXJpbmcgc3lzdGVtLAovLyBvbmUgYmVmb3JlIGd6aXAgKF9nemlwQnVmZmVyKSBhbmQgb25lIGFmdGVyIChfYnVmZmVyKS4KY2xhc3MgX0h0dHBPdXRnb2luZyBpbXBsZW1lbnRzIFN0cmVhbUNvbnN1bWVyPExpc3Q8aW50Pj4gewogIHN0YXRpYyBjb25zdCBMaXN0PGludD4gX2Zvb3RlckFuZENodW5rMExlbmd0aCA9IGNvbnN0IFsKICAgIF9DaGFyQ29kZS5DUiwKICAgIF9DaGFyQ29kZS5MRiwKICAgIDB4MzAsCiAgICBfQ2hhckNvZGUuQ1IsCiAgICBfQ2hhckNvZGUuTEYsCiAgICBfQ2hhckNvZGUuQ1IsCiAgICBfQ2hhckNvZGUuTEYKICBdOwoKICBzdGF0aWMgY29uc3QgTGlzdDxpbnQ+IF9jaHVuazBMZW5ndGggPSBjb25zdCBbCiAgICAweDMwLAogICAgX0NoYXJDb2RlLkNSLAogICAgX0NoYXJDb2RlLkxGLAogICAgX0NoYXJDb2RlLkNSLAogICAgX0NoYXJDb2RlLkxGCiAgXTsKCiAgZmluYWwgQ29tcGxldGVyPFNvY2tldD4gX2RvbmVDb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPFNvY2tldD4oKTsKICBmaW5hbCBTb2NrZXQgc29ja2V0OwoKICBib29sIGlnbm9yZUJvZHkgPSBmYWxzZTsKICBib29sIGhlYWRlcnNXcml0dGVuID0gZmFsc2U7CgogIFVpbnQ4TGlzdCBfYnVmZmVyOwogIGludCBfbGVuZ3RoID0gMDsKCiAgRnV0dXJlIF9jbG9zZUZ1dHVyZTsKCiAgYm9vbCBjaHVua2VkID0gZmFsc2U7CiAgaW50IF9wZW5kaW5nQ2h1bmtlZEZvb3RlciA9IDA7CgogIGludCBjb250ZW50TGVuZ3RoOwogIGludCBfYnl0ZXNXcml0dGVuID0gMDsKCiAgYm9vbCBfZ3ppcCA9IGZhbHNlOwogIEJ5dGVDb252ZXJzaW9uU2luayBfZ3ppcFNpbms7CiAgLy8gX2d6aXBBZGQgaXMgc2V0IGlmZiB0aGUgc2luayBpcyBiZWluZyBhZGRlZCB0by4gSXQncyB1c2VkIHRvIHNwZWNpZnkgd2hlcmUKICAvLyBnemlwcGVkIGRhdGEgc2hvdWxkIGJlIHRha2VuIChzb21ldGltZXMgYSBjb250cm9sbGVyLCBzb21ldGltZXMgYSBzb2NrZXQpLgogIF9CeXRlc0NvbnN1bWVyIF9nemlwQWRkOwogIFVpbnQ4TGlzdCBfZ3ppcEJ1ZmZlcjsKICBpbnQgX2d6aXBCdWZmZXJMZW5ndGggPSAwOwoKICBib29sIF9zb2NrZXRFcnJvciA9IGZhbHNlOwoKICBfSHR0cE91dGJvdW5kTWVzc2FnZSBvdXRib3VuZDsKCiAgX0h0dHBPdXRnb2luZyh0aGlzLnNvY2tldCk7CgogIC8vIFJldHVybnMgZWl0aGVyIGEgZnV0dXJlIG9yICdudWxsJywgaWYgaXQgd2FzIGFibGUgdG8gd3JpdGUgaGVhZGVycwogIC8vIGltbWVkaWF0ZWx5LgogIEZ1dHVyZSB3cml0ZUhlYWRlcnMoe2Jvb2wgZHJhaW5SZXF1ZXN0OiB0cnVlLCBib29sIHNldE91dGdvaW5nOiB0cnVlfSkgewogICAgaWYgKGhlYWRlcnNXcml0dGVuKSByZXR1cm4gbnVsbDsKICAgIGhlYWRlcnNXcml0dGVuID0gdHJ1ZTsKICAgIEZ1dHVyZSBkcmFpbkZ1dHVyZTsKICAgIGJvb2wgZ3ppcCA9IGZhbHNlOwogICAgaWYgKG91dGJvdW5kIGlzIF9IdHRwUmVzcG9uc2UpIHsKICAgICAgLy8gU2VydmVyIHNpZGUuCiAgICAgIF9IdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBvdXRib3VuZDsKICAgICAgaWYgKHJlc3BvbnNlLl9odHRwUmVxdWVzdC5faHR0cFNlcnZlci5hdXRvQ29tcHJlc3MgJiYKICAgICAgICAgIG91dGJvdW5kLmJ1ZmZlck91dHB1dCAmJgogICAgICAgICAgb3V0Ym91bmQuaGVhZGVycy5jaHVua2VkVHJhbnNmZXJFbmNvZGluZykgewogICAgICAgIExpc3QgYWNjZXB0RW5jb2RpbmdzID0KICAgICAgICAgICAgcmVzcG9uc2UuX2h0dHBSZXF1ZXN0LmhlYWRlcnNbSHR0cEhlYWRlcnMuYWNjZXB0RW5jb2RpbmdIZWFkZXJdOwogICAgICAgIExpc3QgY29udGVudEVuY29kaW5nID0KICAgICAgICAgICAgb3V0Ym91bmQuaGVhZGVyc1tIdHRwSGVhZGVycy5jb250ZW50RW5jb2RpbmdIZWFkZXJdOwogICAgICAgIGlmIChhY2NlcHRFbmNvZGluZ3MgIT0gbnVsbCAmJgogICAgICAgICAgICBhY2NlcHRFbmNvZGluZ3MKICAgICAgICAgICAgICAgIC5leHBhbmQoKGxpc3QpID0+IGxpc3Quc3BsaXQoIiwiKSkKICAgICAgICAgICAgICAgIC5hbnkoKGVuY29kaW5nKSA9PiBlbmNvZGluZy50cmltKCkudG9Mb3dlckNhc2UoKSA9PSAiZ3ppcCIpICYmCiAgICAgICAgICAgIGNvbnRlbnRFbmNvZGluZyA9PSBudWxsKSB7CiAgICAgICAgICBvdXRib3VuZC5oZWFkZXJzLnNldChIdHRwSGVhZGVycy5jb250ZW50RW5jb2RpbmdIZWFkZXIsICJnemlwIik7CiAgICAgICAgICBnemlwID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGRyYWluUmVxdWVzdCAmJiAhcmVzcG9uc2UuX2h0dHBSZXF1ZXN0Ll9pbmNvbWluZy5oYXNTdWJzY3JpYmVyKSB7CiAgICAgICAgZHJhaW5GdXR1cmUgPSByZXNwb25zZS5faHR0cFJlcXVlc3QuZHJhaW4oKS5jYXRjaEVycm9yKChfKSB7fSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGRyYWluUmVxdWVzdCA9IGZhbHNlOwogICAgfQogICAgaWYgKCFpZ25vcmVCb2R5KSB7CiAgICAgIGlmIChzZXRPdXRnb2luZykgewogICAgICAgIGludCBjb250ZW50TGVuZ3RoID0gb3V0Ym91bmQuaGVhZGVycy5jb250ZW50TGVuZ3RoOwogICAgICAgIGlmIChvdXRib3VuZC5oZWFkZXJzLmNodW5rZWRUcmFuc2ZlckVuY29kaW5nKSB7CiAgICAgICAgICBjaHVua2VkID0gdHJ1ZTsKICAgICAgICAgIGlmIChnemlwKSB0aGlzLmd6aXAgPSB0cnVlOwogICAgICAgIH0gZWxzZSBpZiAoY29udGVudExlbmd0aCA+PSAwKSB7CiAgICAgICAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSBjb250ZW50TGVuZ3RoOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoZHJhaW5GdXR1cmUgIT0gbnVsbCkgewogICAgICAgIHJldHVybiBkcmFpbkZ1dHVyZS50aGVuKChfKSA9PiBvdXRib3VuZC5fd3JpdGVIZWFkZXIoKSk7CiAgICAgIH0KICAgIH0KICAgIG91dGJvdW5kLl93cml0ZUhlYWRlcigpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBGdXR1cmUgYWRkU3RyZWFtKFN0cmVhbTxMaXN0PGludD4+IHN0cmVhbSkgewogICAgaWYgKF9zb2NrZXRFcnJvcikgewogICAgICBzdHJlYW0ubGlzdGVuKG51bGwpLmNhbmNlbCgpOwogICAgICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZShvdXRib3VuZCk7CiAgICB9CiAgICBpZiAoaWdub3JlQm9keSkgewogICAgICBzdHJlYW0uZHJhaW4oKS5jYXRjaEVycm9yKChfKSB7fSk7CiAgICAgIHZhciBmdXR1cmUgPSB3cml0ZUhlYWRlcnMoKTsKICAgICAgaWYgKGZ1dHVyZSAhPSBudWxsKSB7CiAgICAgICAgcmV0dXJuIGZ1dHVyZS50aGVuKChfKSA9PiBjbG9zZSgpKTsKICAgICAgfQogICAgICByZXR1cm4gY2xvc2UoKTsKICAgIH0KICAgIFN0cmVhbVN1YnNjcmlwdGlvbjxMaXN0PGludD4+IHN1YjsKICAgIC8vIFVzZSBuZXcgc3RyZWFtIHNvIHdlIGFyZSBhYmxlIHRvIHBhdXNlIChzZWUgYmVsb3cgbGlzdGVuKS4gVGhlCiAgICAvLyBhbHRlcm5hdGl2ZSBpcyB0byB1c2Ugc3RyZWFtLmV4dGFuZCwgYnV0IHRoYXQgd29uJ3QgZ2l2ZSB1cyBhIHdheSBvZgogICAgLy8gcGF1c2luZy4KICAgIHZhciBjb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXI8TGlzdDxpbnQ+PigKICAgICAgICBvblBhdXNlOiAoKSA9PiBzdWIucGF1c2UoKSwgb25SZXN1bWU6ICgpID0+IHN1Yi5yZXN1bWUoKSwgc3luYzogdHJ1ZSk7CgogICAgdm9pZCBvbkRhdGEoTGlzdDxpbnQ+IGRhdGEpIHsKICAgICAgaWYgKF9zb2NrZXRFcnJvcikgcmV0dXJuOwogICAgICBpZiAoZGF0YS5sZW5ndGggPT0gMCkgcmV0dXJuOwogICAgICBpZiAoY2h1bmtlZCkgewogICAgICAgIGlmIChfZ3ppcCkgewogICAgICAgICAgX2d6aXBBZGQgPSBjb250cm9sbGVyLmFkZDsKICAgICAgICAgIF9hZGRHWmlwQ2h1bmsoZGF0YSwgX2d6aXBTaW5rLmFkZCk7CiAgICAgICAgICBfZ3ppcEFkZCA9IG51bGw7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIF9hZGRDaHVuayhfY2h1bmtIZWFkZXIoZGF0YS5sZW5ndGgpLCBjb250cm9sbGVyLmFkZCk7CiAgICAgICAgX3BlbmRpbmdDaHVua2VkRm9vdGVyID0gMjsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsKSB7CiAgICAgICAgICBfYnl0ZXNXcml0dGVuICs9IGRhdGEubGVuZ3RoOwogICAgICAgICAgaWYgKF9ieXRlc1dyaXR0ZW4gPiBjb250ZW50TGVuZ3RoKSB7CiAgICAgICAgICAgIGNvbnRyb2xsZXIuYWRkRXJyb3IobmV3IEh0dHBFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAiQ29udGVudCBzaXplIGV4Y2VlZHMgc3BlY2lmaWVkIGNvbnRlbnRMZW5ndGguICIKICAgICAgICAgICAgICAgICIkX2J5dGVzV3JpdHRlbiBieXRlcyB3cml0dGVuIHdoaWxlIGV4cGVjdGVkICIKICAgICAgICAgICAgICAgICIkY29udGVudExlbmd0aC4gIgogICAgICAgICAgICAgICAgIlske25ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhkYXRhKX1dIikpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIF9hZGRDaHVuayhkYXRhLCBjb250cm9sbGVyLmFkZCk7CiAgICB9CgogICAgc3ViID0gc3RyZWFtLmxpc3RlbihvbkRhdGEsCiAgICAgICAgb25FcnJvcjogY29udHJvbGxlci5hZGRFcnJvciwKICAgICAgICBvbkRvbmU6IGNvbnRyb2xsZXIuY2xvc2UsCiAgICAgICAgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICAvLyBXcml0ZSBoZWFkZXJzIG5vdyB0aGF0IHdlIGFyZSBsaXN0ZW5pbmcgdG8gdGhlIHN0cmVhbS4KICAgIGlmICghaGVhZGVyc1dyaXR0ZW4pIHsKICAgICAgdmFyIGZ1dHVyZSA9IHdyaXRlSGVhZGVycygpOwogICAgICBpZiAoZnV0dXJlICE9IG51bGwpIHsKICAgICAgICAvLyBXaGlsZSBpbmNvbWluZyBpcyBiZWluZyBkcmFpbmVkLCB0aGUgcGF1c2VGdXR1cmUgaXMgbm9uLW51bGwuIFBhdXNlCiAgICAgICAgLy8gb3V0cHV0IHVudGlsIGl0J3MgZHJhaW5lZC4KICAgICAgICBzdWIucGF1c2UoZnV0dXJlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHNvY2tldC5hZGRTdHJlYW0oY29udHJvbGxlci5zdHJlYW0pLnRoZW4oKF8pIHsKICAgICAgcmV0dXJuIG91dGJvdW5kOwogICAgfSwgb25FcnJvcjogKGVycm9yLCBzdGFja1RyYWNlKSB7CiAgICAgIC8vIEJlIHN1cmUgdG8gY2xvc2UgaXQgaW4gY2FzZSBvZiBhbiBlcnJvci4KICAgICAgaWYgKF9nemlwKSBfZ3ppcFNpbmsuY2xvc2UoKTsKICAgICAgX3NvY2tldEVycm9yID0gdHJ1ZTsKICAgICAgX2RvbmVDb21wbGV0ZXIuY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIGlmIChfaWdub3JlRXJyb3IoZXJyb3IpKSB7CiAgICAgICAgcmV0dXJuIG91dGJvdW5kOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IGVycm9yOwogICAgICB9CiAgICB9KTsKICB9CgogIEZ1dHVyZSBjbG9zZSgpIHsKICAgIC8vIElmIHdlIGFyZSBhbHJlYWR5IGNsb3NlZCwgcmV0dXJuIHRoYXQgZnV0dXJlLgogICAgaWYgKF9jbG9zZUZ1dHVyZSAhPSBudWxsKSByZXR1cm4gX2Nsb3NlRnV0dXJlOwogICAgLy8gSWYgd2UgZWFybGllciBzYXcgYW4gZXJyb3IsIHJldHVybiBpbW1lZGlhdGUuIFRoZSBub3RpZmljYXRpb24gdG8KICAgIC8vIF9IdHRwKkNvbm5lY3Rpb24gaXMgYWxyZWFkeSBkb25lLgogICAgaWYgKF9zb2NrZXRFcnJvcikgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUob3V0Ym91bmQpOwogICAgaWYgKG91dGJvdW5kLl9pc0Nvbm5lY3Rpb25DbG9zZWQpIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKG91dGJvdW5kKTsKICAgIGlmICghaGVhZGVyc1dyaXR0ZW4gJiYgIWlnbm9yZUJvZHkpIHsKICAgICAgaWYgKG91dGJvdW5kLmhlYWRlcnMuY29udGVudExlbmd0aCA9PSAtMSkgewogICAgICAgIC8vIElmIG5vIGJvZHkgd2FzIHdyaXR0ZW4sIGlnbm9yZUJvZHkgaXMgZmFsc2UgKGl0J3Mgbm90IGEgSEVBRAogICAgICAgIC8vIHJlcXVlc3QpIGFuZCB0aGUgY29udGVudC1sZW5ndGggaXMgdW5zcGVjaWZpZWQsIHNldCBjb250ZW50TGVuZ3RoIHRvCiAgICAgICAgLy8gMC4KICAgICAgICBvdXRib3VuZC5oZWFkZXJzLmNodW5rZWRUcmFuc2ZlckVuY29kaW5nID0gZmFsc2U7CiAgICAgICAgb3V0Ym91bmQuaGVhZGVycy5jb250ZW50TGVuZ3RoID0gMDsKICAgICAgfSBlbHNlIGlmIChvdXRib3VuZC5oZWFkZXJzLmNvbnRlbnRMZW5ndGggPiAwKSB7CiAgICAgICAgdmFyIGVycm9yID0gbmV3IEh0dHBFeGNlcHRpb24oCiAgICAgICAgICAgICJObyBjb250ZW50IGV2ZW4gdGhvdWdoIGNvbnRlbnRMZW5ndGggd2FzIHNwZWNpZmllZCB0byBiZSAiCiAgICAgICAgICAgICJncmVhdGVyIHRoYW4gMDogJHtvdXRib3VuZC5oZWFkZXJzLmNvbnRlbnRMZW5ndGh9LiIsCiAgICAgICAgICAgIHVyaTogb3V0Ym91bmQuX3VyaSk7CiAgICAgICAgX2RvbmVDb21wbGV0ZXIuY29tcGxldGVFcnJvcihlcnJvcik7CiAgICAgICAgcmV0dXJuIF9jbG9zZUZ1dHVyZSA9IG5ldyBGdXR1cmUuZXJyb3IoZXJyb3IpOwogICAgICB9CiAgICB9CiAgICAvLyBJZiBjb250ZW50TGVuZ3RoIHdhcyBzcGVjaWZpZWQsIHZhbGlkYXRlIGl0LgogICAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCkgewogICAgICBpZiAoX2J5dGVzV3JpdHRlbiA8IGNvbnRlbnRMZW5ndGgpIHsKICAgICAgICB2YXIgZXJyb3IgPSBuZXcgSHR0cEV4Y2VwdGlvbigKICAgICAgICAgICAgIkNvbnRlbnQgc2l6ZSBiZWxvdyBzcGVjaWZpZWQgY29udGVudExlbmd0aC4gIgogICAgICAgICAgICAiICRfYnl0ZXNXcml0dGVuIGJ5dGVzIHdyaXR0ZW4gYnV0IGV4cGVjdGVkICIKICAgICAgICAgICAgIiRjb250ZW50TGVuZ3RoLiIsCiAgICAgICAgICAgIHVyaTogb3V0Ym91bmQuX3VyaSk7CiAgICAgICAgX2RvbmVDb21wbGV0ZXIuY29tcGxldGVFcnJvcihlcnJvcik7CiAgICAgICAgcmV0dXJuIF9jbG9zZUZ1dHVyZSA9IG5ldyBGdXR1cmUuZXJyb3IoZXJyb3IpOwogICAgICB9CiAgICB9CgogICAgRnV0dXJlIGZpbmFsaXplKCkgewogICAgICAvLyBJbiBjYXNlIG9mIGNodW5rZWQgZW5jb2RpbmcgKGFuZCBnemlwKSwgaGFuZGxlIHJlbWFpbmluZyBnemlwIGRhdGEgYW5kCiAgICAgIC8vIGFwcGVuZCB0aGUgJ2Zvb3RlcicgZm9yIGNodW5rZWQgZW5jb2RpbmcuCiAgICAgIGlmIChjaHVua2VkKSB7CiAgICAgICAgaWYgKF9nemlwKSB7CiAgICAgICAgICBfZ3ppcEFkZCA9IHNvY2tldC5hZGQ7CiAgICAgICAgICBpZiAoX2d6aXBCdWZmZXJMZW5ndGggPiAwKSB7CiAgICAgICAgICAgIF9nemlwU2luay5hZGQoCiAgICAgICAgICAgICAgICBuZXcgVWludDhMaXN0LnZpZXcoX2d6aXBCdWZmZXIuYnVmZmVyLCAwLCBfZ3ppcEJ1ZmZlckxlbmd0aCkpOwogICAgICAgICAgfQogICAgICAgICAgX2d6aXBCdWZmZXIgPSBudWxsOwogICAgICAgICAgX2d6aXBTaW5rLmNsb3NlKCk7CiAgICAgICAgICBfZ3ppcEFkZCA9IG51bGw7CiAgICAgICAgfQogICAgICAgIF9hZGRDaHVuayhfY2h1bmtIZWFkZXIoMCksIHNvY2tldC5hZGQpOwogICAgICB9CiAgICAgIC8vIEFkZCBhbnkgcmVtYWluaW5nIGRhdGEgaW4gdGhlIGJ1ZmZlci4KICAgICAgaWYgKF9sZW5ndGggPiAwKSB7CiAgICAgICAgc29ja2V0LmFkZChuZXcgVWludDhMaXN0LnZpZXcoX2J1ZmZlci5idWZmZXIsIDAsIF9sZW5ndGgpKTsKICAgICAgfQogICAgICAvLyBDbGVhciByZWZlcmVuY2VzLCBmb3IgYmV0dGVyIEdDLgogICAgICBfYnVmZmVyID0gbnVsbDsKICAgICAgLy8gQW5kIGZpbmFsbHkgZmx1c2ggaXQuIEFzIHdlIHN1cHBvcnQga2VlcC1hbGl2ZSwgbmV2ZXIgY2xvc2UgaXQgZnJvbQogICAgICAvLyBoZXJlLiBPbmNlIHRoZSBzb2NrZXQgaXMgZmx1c2hlZCwgd2UnbGwgYmUgYWJsZSB0byByZXVzZSBpdCAoc2lnbmFsZWQKICAgICAgLy8gYnkgdGhlICdkb25lJyBmdXR1cmUpLgogICAgICByZXR1cm4gc29ja2V0LmZsdXNoKCkudGhlbigoXykgewogICAgICAgIF9kb25lQ29tcGxldGVyLmNvbXBsZXRlKHNvY2tldCk7CiAgICAgICAgcmV0dXJuIG91dGJvdW5kOwogICAgICB9LCBvbkVycm9yOiAoZXJyb3IsIHN0YWNrVHJhY2UpIHsKICAgICAgICBfZG9uZUNvbXBsZXRlci5jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgICBpZiAoX2lnbm9yZUVycm9yKGVycm9yKSkgewogICAgICAgICAgcmV0dXJuIG91dGJvdW5kOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQoKICAgIHZhciBmdXR1cmUgPSB3cml0ZUhlYWRlcnMoKTsKICAgIGlmIChmdXR1cmUgIT0gbnVsbCkgewogICAgICByZXR1cm4gX2Nsb3NlRnV0dXJlID0gZnV0dXJlLndoZW5Db21wbGV0ZShmaW5hbGl6ZSk7CiAgICB9CiAgICByZXR1cm4gX2Nsb3NlRnV0dXJlID0gZmluYWxpemUoKTsKICB9CgogIEZ1dHVyZTxTb2NrZXQ+IGdldCBkb25lID0+IF9kb25lQ29tcGxldGVyLmZ1dHVyZTsKCiAgdm9pZCBzZXRIZWFkZXIoTGlzdDxpbnQ+IGRhdGEsIGludCBsZW5ndGgpIHsKICAgIGFzc2VydChfbGVuZ3RoID09IDApOwogICAgX2J1ZmZlciA9IGRhdGE7CiAgICBfbGVuZ3RoID0gbGVuZ3RoOwogIH0KCiAgdm9pZCBzZXQgZ3ppcChib29sIHZhbHVlKSB7CiAgICBfZ3ppcCA9IHZhbHVlOwogICAgaWYgKF9nemlwKSB7CiAgICAgIF9nemlwQnVmZmVyID0gbmV3IFVpbnQ4TGlzdChfT1VUR09JTkdfQlVGRkVSX1NJWkUpOwogICAgICBhc3NlcnQoX2d6aXBTaW5rID09IG51bGwpOwogICAgICBfZ3ppcFNpbmsgPSBuZXcgWkxpYkVuY29kZXIoZ3ppcDogdHJ1ZSkKICAgICAgICAgIC5zdGFydENodW5rZWRDb252ZXJzaW9uKG5ldyBfSHR0cEdaaXBTaW5rKChkYXRhKSB7CiAgICAgICAgLy8gV2UgYXJlIGNsb3NpbmcgZG93biBwcmVtYXR1cmVseSwgZHVlIHRvIGFuIGVycm9yLiBEaXNjYXJkLgogICAgICAgIGlmIChfZ3ppcEFkZCA9PSBudWxsKSByZXR1cm47CiAgICAgICAgX2FkZENodW5rKF9jaHVua0hlYWRlcihkYXRhLmxlbmd0aCksIF9nemlwQWRkKTsKICAgICAgICBfcGVuZGluZ0NodW5rZWRGb290ZXIgPSAyOwogICAgICAgIF9hZGRDaHVuayhkYXRhLCBfZ3ppcEFkZCk7CiAgICAgIH0pKTsKICAgIH0KICB9CgogIGJvb2wgX2lnbm9yZUVycm9yKGVycm9yKSA9PgogICAgICAoZXJyb3IgaXMgU29ja2V0RXhjZXB0aW9uIHx8IGVycm9yIGlzIFRsc0V4Y2VwdGlvbikgJiYKICAgICAgb3V0Ym91bmQgaXMgSHR0cFJlc3BvbnNlOwoKICB2b2lkIF9hZGRHWmlwQ2h1bmsoTGlzdDxpbnQ+IGNodW5rLCB2b2lkIGFkZChMaXN0PGludD4gZGF0YSkpIHsKICAgIGlmICghb3V0Ym91bmQuYnVmZmVyT3V0cHV0KSB7CiAgICAgIGFkZChjaHVuayk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChjaHVuay5sZW5ndGggPiBfZ3ppcEJ1ZmZlci5sZW5ndGggLSBfZ3ppcEJ1ZmZlckxlbmd0aCkgewogICAgICBhZGQobmV3IFVpbnQ4TGlzdC52aWV3KF9nemlwQnVmZmVyLmJ1ZmZlciwgMCwgX2d6aXBCdWZmZXJMZW5ndGgpKTsKICAgICAgX2d6aXBCdWZmZXIgPSBuZXcgVWludDhMaXN0KF9PVVRHT0lOR19CVUZGRVJfU0laRSk7CiAgICAgIF9nemlwQnVmZmVyTGVuZ3RoID0gMDsKICAgIH0KICAgIGlmIChjaHVuay5sZW5ndGggPiBfT1VUR09JTkdfQlVGRkVSX1NJWkUpIHsKICAgICAgYWRkKGNodW5rKTsKICAgIH0gZWxzZSB7CiAgICAgIF9nemlwQnVmZmVyLnNldFJhbmdlKAogICAgICAgICAgX2d6aXBCdWZmZXJMZW5ndGgsIF9nemlwQnVmZmVyTGVuZ3RoICsgY2h1bmsubGVuZ3RoLCBjaHVuayk7CiAgICAgIF9nemlwQnVmZmVyTGVuZ3RoICs9IGNodW5rLmxlbmd0aDsKICAgIH0KICB9CgogIHZvaWQgX2FkZENodW5rKExpc3Q8aW50PiBjaHVuaywgdm9pZCBhZGQoTGlzdDxpbnQ+IGRhdGEpKSB7CiAgICBpZiAoIW91dGJvdW5kLmJ1ZmZlck91dHB1dCkgewogICAgICBpZiAoX2J1ZmZlciAhPSBudWxsKSB7CiAgICAgICAgLy8gSWYgX2J1ZmZlciBpcyBub3QgbnVsbCwgd2UgaGF2ZSBub3Qgd3JpdHRlbiB0aGUgaGVhZGVyIHlldC4gV3JpdGUKICAgICAgICAvLyBpdCBub3cuCiAgICAgICAgYWRkKG5ldyBVaW50OExpc3QudmlldyhfYnVmZmVyLmJ1ZmZlciwgMCwgX2xlbmd0aCkpOwogICAgICAgIF9idWZmZXIgPSBudWxsOwogICAgICAgIF9sZW5ndGggPSAwOwogICAgICB9CiAgICAgIGFkZChjaHVuayk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChjaHVuay5sZW5ndGggPiBfYnVmZmVyLmxlbmd0aCAtIF9sZW5ndGgpIHsKICAgICAgYWRkKG5ldyBVaW50OExpc3QudmlldyhfYnVmZmVyLmJ1ZmZlciwgMCwgX2xlbmd0aCkpOwogICAgICBfYnVmZmVyID0gbmV3IFVpbnQ4TGlzdChfT1VUR09JTkdfQlVGRkVSX1NJWkUpOwogICAgICBfbGVuZ3RoID0gMDsKICAgIH0KICAgIGlmIChjaHVuay5sZW5ndGggPiBfT1VUR09JTkdfQlVGRkVSX1NJWkUpIHsKICAgICAgYWRkKGNodW5rKTsKICAgIH0gZWxzZSB7CiAgICAgIF9idWZmZXIuc2V0UmFuZ2UoX2xlbmd0aCwgX2xlbmd0aCArIGNodW5rLmxlbmd0aCwgY2h1bmspOwogICAgICBfbGVuZ3RoICs9IGNodW5rLmxlbmd0aDsKICAgIH0KICB9CgogIExpc3Q8aW50PiBfY2h1bmtIZWFkZXIoaW50IGxlbmd0aCkgewogICAgY29uc3QgaGV4RGlnaXRzID0gY29uc3QgWwogICAgICAweDMwLAogICAgICAweDMxLAogICAgICAweDMyLAogICAgICAweDMzLAogICAgICAweDM0LAogICAgICAweDM1LAogICAgICAweDM2LAogICAgICAweDM3LAogICAgICAweDM4LAogICAgICAweDM5LAogICAgICAweDQxLAogICAgICAweDQyLAogICAgICAweDQzLAogICAgICAweDQ0LAogICAgICAweDQ1LAogICAgICAweDQ2CiAgICBdOwogICAgaWYgKGxlbmd0aCA9PSAwKSB7CiAgICAgIGlmIChfcGVuZGluZ0NodW5rZWRGb290ZXIgPT0gMikgcmV0dXJuIF9mb290ZXJBbmRDaHVuazBMZW5ndGg7CiAgICAgIHJldHVybiBfY2h1bmswTGVuZ3RoOwogICAgfQogICAgaW50IHNpemUgPSBfcGVuZGluZ0NodW5rZWRGb290ZXI7CiAgICBpbnQgbGVuID0gbGVuZ3RoOwogICAgLy8gQ29tcHV0ZSBhIGZhc3QgaW50ZWdlciB2ZXJzaW9uIG9mIChsb2cobGVuZ3RoICsgMSkgLyBsb2coMTYpKS5jZWlsKCkuCiAgICB3aGlsZSAobGVuID4gMCkgewogICAgICBzaXplKys7CiAgICAgIGxlbiA+Pj0gNDsKICAgIH0KICAgIHZhciBmb290ZXJBbmRIZWFkZXIgPSBuZXcgVWludDhMaXN0KHNpemUgKyAyKTsKICAgIGlmIChfcGVuZGluZ0NodW5rZWRGb290ZXIgPT0gMikgewogICAgICBmb290ZXJBbmRIZWFkZXJbMF0gPSBfQ2hhckNvZGUuQ1I7CiAgICAgIGZvb3RlckFuZEhlYWRlclsxXSA9IF9DaGFyQ29kZS5MRjsKICAgIH0KICAgIGludCBpbmRleCA9IHNpemU7CiAgICB3aGlsZSAoaW5kZXggPiBfcGVuZGluZ0NodW5rZWRGb290ZXIpIHsKICAgICAgZm9vdGVyQW5kSGVhZGVyWy0taW5kZXhdID0gaGV4RGlnaXRzW2xlbmd0aCAmIDE1XTsKICAgICAgbGVuZ3RoID0gbGVuZ3RoID4+IDQ7CiAgICB9CiAgICBmb290ZXJBbmRIZWFkZXJbc2l6ZSArIDBdID0gX0NoYXJDb2RlLkNSOwogICAgZm9vdGVyQW5kSGVhZGVyW3NpemUgKyAxXSA9IF9DaGFyQ29kZS5MRjsKICAgIHJldHVybiBmb290ZXJBbmRIZWFkZXI7CiAgfQp9CgpjbGFzcyBfSHR0cENsaWVudENvbm5lY3Rpb24gewogIGZpbmFsIFN0cmluZyBrZXk7CiAgZmluYWwgU29ja2V0IF9zb2NrZXQ7CiAgZmluYWwgYm9vbCBfcHJveHlUdW5uZWw7CiAgZmluYWwgU2VjdXJpdHlDb250ZXh0IF9jb250ZXh0OwogIGZpbmFsIF9IdHRwUGFyc2VyIF9odHRwUGFyc2VyOwogIFN0cmVhbVN1YnNjcmlwdGlvbiBfc3Vic2NyaXB0aW9uOwogIGZpbmFsIF9IdHRwQ2xpZW50IF9odHRwQ2xpZW50OwogIGJvb2wgX2Rpc3Bvc2UgPSBmYWxzZTsKICBUaW1lciBfaWRsZVRpbWVyOwogIGJvb2wgY2xvc2VkID0gZmFsc2U7CiAgVXJpIF9jdXJyZW50VXJpOwoKICBDb21wbGV0ZXI8X0h0dHBJbmNvbWluZz4gX25leHRSZXNwb25zZUNvbXBsZXRlcjsKICBGdXR1cmU8U29ja2V0PiBfc3RyZWFtRnV0dXJlOwoKICBfSHR0cENsaWVudENvbm5lY3Rpb24odGhpcy5rZXksIHRoaXMuX3NvY2tldCwgdGhpcy5faHR0cENsaWVudCwKICAgICAgW3RoaXMuX3Byb3h5VHVubmVsID0gZmFsc2UsIHRoaXMuX2NvbnRleHRdKQogICAgICA6IF9odHRwUGFyc2VyID0gbmV3IF9IdHRwUGFyc2VyLnJlc3BvbnNlUGFyc2VyKCkgewogICAgX2h0dHBQYXJzZXIubGlzdGVuVG9TdHJlYW0oX3NvY2tldCk7CgogICAgLy8gU2V0IHVwIGhhbmRsZXJzIG9uIHRoZSBwYXJzZXIgaGVyZSwgc28gd2UgYXJlIHN1cmUgdG8gZ2V0ICdvbkRvbmUnIGZyb20KICAgIC8vIHRoZSBwYXJzZXIuCiAgICBfc3Vic2NyaXB0aW9uID0gX2h0dHBQYXJzZXIubGlzdGVuKChpbmNvbWluZykgewogICAgICAvLyBPbmx5IGhhbmRsZSBvbmUgaW5jb21pbmcgcmVzcG9uc2UgYXQgdGhlIHRpbWUuIEtlZXAgdGhlCiAgICAgIC8vIHN0cmVhbSBwYXVzZWQgdW50aWwgdGhlIHJlc3BvbnNlIGhhdmUgYmVlbiBwcm9jZXNzZWQuCiAgICAgIF9zdWJzY3JpcHRpb24ucGF1c2UoKTsKICAgICAgLy8gV2UgYXNzdW1lIHRoZSByZXNwb25zZSBpcyBub3QgaGVyZSwgdW50aWwgd2UgaGF2ZSBzZW5kIHRoZSByZXF1ZXN0LgogICAgICBpZiAoX25leHRSZXNwb25zZUNvbXBsZXRlciA9PSBudWxsKSB7CiAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oCiAgICAgICAgICAgICJVbmV4cGVjdGVkIHJlc3BvbnNlICh1bnNvbGljaXRlZCByZXNwb25zZSB3aXRob3V0IHJlcXVlc3QpLiIsCiAgICAgICAgICAgIHVyaTogX2N1cnJlbnRVcmkpOwogICAgICB9CgogICAgICAvLyBDaGVjayBmb3Igc3RhdHVzIGNvZGUgJzEwMCBDb250aW51ZScuIEluIHRoYXQgY2FzZSBqdXN0CiAgICAgIC8vIGNvbnN1bWUgdGhhdCByZXNwb25zZSBhcyB0aGUgZmluYWwgcmVzcG9uc2Ugd2lsbCBmb2xsb3cKICAgICAgLy8gaXQuIFRoZXJlIGlzIGN1cnJlbnRseSBubyBBUEkgZm9yIHRoZSBjbGllbnQgdG8gd2FpdCBmb3IKICAgICAgLy8gdGhlICcxMDAgQ29udGludWUnIHJlc3BvbnNlLgogICAgICBpZiAoaW5jb21pbmcuc3RhdHVzQ29kZSA9PSAxMDApIHsKICAgICAgICBpbmNvbWluZy5kcmFpbigpLnRoZW4oKF8pIHsKICAgICAgICAgIF9zdWJzY3JpcHRpb24ucmVzdW1lKCk7CiAgICAgICAgfSkuY2F0Y2hFcnJvcigoZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICAgICAgICBfbmV4dFJlc3BvbnNlQ29tcGxldGVyLmNvbXBsZXRlRXJyb3IoCiAgICAgICAgICAgICAgbmV3IEh0dHBFeGNlcHRpb24oZXJyb3IubWVzc2FnZSwgdXJpOiBfY3VycmVudFVyaSksIHN0YWNrVHJhY2UpOwogICAgICAgICAgX25leHRSZXNwb25zZUNvbXBsZXRlciA9IG51bGw7CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX25leHRSZXNwb25zZUNvbXBsZXRlci5jb21wbGV0ZShpbmNvbWluZyk7CiAgICAgICAgX25leHRSZXNwb25zZUNvbXBsZXRlciA9IG51bGw7CiAgICAgIH0KICAgIH0sIG9uRXJyb3I6IChlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgICAgaWYgKF9uZXh0UmVzcG9uc2VDb21wbGV0ZXIgIT0gbnVsbCkgewogICAgICAgIF9uZXh0UmVzcG9uc2VDb21wbGV0ZXIuY29tcGxldGVFcnJvcigKICAgICAgICAgICAgbmV3IEh0dHBFeGNlcHRpb24oZXJyb3IubWVzc2FnZSwgdXJpOiBfY3VycmVudFVyaSksIHN0YWNrVHJhY2UpOwogICAgICAgIF9uZXh0UmVzcG9uc2VDb21wbGV0ZXIgPSBudWxsOwogICAgICB9CiAgICB9LCBvbkRvbmU6ICgpIHsKICAgICAgaWYgKF9uZXh0UmVzcG9uc2VDb21wbGV0ZXIgIT0gbnVsbCkgewogICAgICAgIF9uZXh0UmVzcG9uc2VDb21wbGV0ZXIuY29tcGxldGVFcnJvcihuZXcgSHR0cEV4Y2VwdGlvbigKICAgICAgICAgICAgIkNvbm5lY3Rpb24gY2xvc2VkIGJlZm9yZSByZXNwb25zZSB3YXMgcmVjZWl2ZWQiLAogICAgICAgICAgICB1cmk6IF9jdXJyZW50VXJpKSk7CiAgICAgICAgX25leHRSZXNwb25zZUNvbXBsZXRlciA9IG51bGw7CiAgICAgIH0KICAgICAgY2xvc2UoKTsKICAgIH0pOwogIH0KCiAgX0h0dHBDbGllbnRSZXF1ZXN0IHNlbmQoVXJpIHVyaSwgaW50IHBvcnQsIFN0cmluZyBtZXRob2QsIF9Qcm94eSBwcm94eSkgewogICAgaWYgKGNsb3NlZCkgewogICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiU29ja2V0IGNsb3NlZCBiZWZvcmUgcmVxdWVzdCB3YXMgc2VudCIsCiAgICAgICAgICB1cmk6IHVyaSk7CiAgICB9CiAgICBfY3VycmVudFVyaSA9IHVyaTsKICAgIC8vIFN0YXJ0IHdpdGggcGF1c2luZyB0aGUgcGFyc2VyLgogICAgX3N1YnNjcmlwdGlvbi5wYXVzZSgpOwogICAgX1Byb3h5Q3JlZGVudGlhbHMgcHJveHlDcmVkczsgLy8gQ3JlZGVudGlhbHMgdXNlZCB0byBhdXRob3JpemUgcHJveHkuCiAgICBfU2l0ZUNyZWRlbnRpYWxzIGNyZWRzOyAvLyBDcmVkZW50aWFscyB1c2VkIHRvIGF1dGhvcml6ZSB0aGlzIHJlcXVlc3QuCiAgICB2YXIgb3V0Z29pbmcgPSBuZXcgX0h0dHBPdXRnb2luZyhfc29ja2V0KTsKICAgIC8vIENyZWF0ZSBuZXcgcmVxdWVzdCBvYmplY3QsIHdyYXBwaW5nIHRoZSBvdXRnb2luZyBjb25uZWN0aW9uLgogICAgdmFyIHJlcXVlc3QgPQogICAgICAgIG5ldyBfSHR0cENsaWVudFJlcXVlc3Qob3V0Z29pbmcsIHVyaSwgbWV0aG9kLCBwcm94eSwgX2h0dHBDbGllbnQsIHRoaXMpOwogICAgLy8gRm9yIHRoZSBIb3N0IGhlYWRlciBhbiBJUHY2IGFkZHJlc3MgbXVzdCBiZSBlbmNsb3NlZCBpbiBbXSdzLgogICAgdmFyIGhvc3QgPSB1cmkuaG9zdDsKICAgIGlmIChob3N0LmNvbnRhaW5zKCc6JykpIGhvc3QgPSAiWyRob3N0XSI7CiAgICByZXF1ZXN0LmhlYWRlcnMKICAgICAgLi5ob3N0ID0gaG9zdAogICAgICAuLnBvcnQgPSBwb3J0CiAgICAgIC4uX2FkZChIdHRwSGVhZGVycy5hY2NlcHRFbmNvZGluZ0hlYWRlciwgImd6aXAiKTsKICAgIGlmIChfaHR0cENsaWVudC51c2VyQWdlbnQgIT0gbnVsbCkgewogICAgICByZXF1ZXN0LmhlYWRlcnMuX2FkZCgndXNlci1hZ2VudCcsIF9odHRwQ2xpZW50LnVzZXJBZ2VudCk7CiAgICB9CiAgICBpZiAocHJveHkuaXNBdXRoZW50aWNhdGVkKSB7CiAgICAgIC8vIElmIHRoZSBwcm94eSBjb25maWd1cmF0aW9uIGNvbnRhaW5zIHVzZXIgaW5mb3JtYXRpb24gdXNlIHRoYXQKICAgICAgLy8gZm9yIHByb3h5IGJhc2ljIGF1dGhvcml6YXRpb24uCiAgICAgIFN0cmluZyBhdXRoID0gX0NyeXB0b1V0aWxzLmJ5dGVzVG9CYXNlNjQoCiAgICAgICAgICB1dGY4LmVuY29kZSgiJHtwcm94eS51c2VybmFtZX06JHtwcm94eS5wYXNzd29yZH0iKSk7CiAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSHR0cEhlYWRlcnMucHJveHlBdXRob3JpemF0aW9uSGVhZGVyLCAiQmFzaWMgJGF1dGgiKTsKICAgIH0gZWxzZSBpZiAoIXByb3h5LmlzRGlyZWN0ICYmIF9odHRwQ2xpZW50Ll9wcm94eUNyZWRlbnRpYWxzLmxlbmd0aCA+IDApIHsKICAgICAgcHJveHlDcmVkcyA9IF9odHRwQ2xpZW50Ll9maW5kUHJveHlDcmVkZW50aWFscyhwcm94eSk7CiAgICAgIGlmIChwcm94eUNyZWRzICE9IG51bGwpIHsKICAgICAgICBwcm94eUNyZWRzLmF1dGhvcml6ZShyZXF1ZXN0KTsKICAgICAgfQogICAgfQogICAgaWYgKHVyaS51c2VySW5mbyAhPSBudWxsICYmICF1cmkudXNlckluZm8uaXNFbXB0eSkgewogICAgICAvLyBJZiB0aGUgVVJMIGNvbnRhaW5zIHVzZXIgaW5mb3JtYXRpb24gdXNlIHRoYXQgZm9yIGJhc2ljCiAgICAgIC8vIGF1dGhvcml6YXRpb24uCiAgICAgIFN0cmluZyBhdXRoID0gX0NyeXB0b1V0aWxzLmJ5dGVzVG9CYXNlNjQodXRmOC5lbmNvZGUodXJpLnVzZXJJbmZvKSk7CiAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSHR0cEhlYWRlcnMuYXV0aG9yaXphdGlvbkhlYWRlciwgIkJhc2ljICRhdXRoIik7CiAgICB9IGVsc2UgewogICAgICAvLyBMb29rIGZvciBjcmVkZW50aWFscy4KICAgICAgY3JlZHMgPSBfaHR0cENsaWVudC5fZmluZENyZWRlbnRpYWxzKHVyaSk7CiAgICAgIGlmIChjcmVkcyAhPSBudWxsKSB7CiAgICAgICAgY3JlZHMuYXV0aG9yaXplKHJlcXVlc3QpOwogICAgICB9CiAgICB9CiAgICAvLyBTdGFydCBzZW5kaW5nIHRoZSByZXF1ZXN0IChsYXp5LCBkZWxheWVkIHVudGlsIHRoZSB1c2VyIHByb3ZpZGVzCiAgICAvLyBkYXRhKS4KICAgIF9odHRwUGFyc2VyLmlzSGVhZCA9IG1ldGhvZCA9PSAiSEVBRCI7CiAgICBfc3RyZWFtRnV0dXJlID0gb3V0Z29pbmcuZG9uZS50aGVuPFNvY2tldD4oKFNvY2tldCBzKSB7CiAgICAgIC8vIFJlcXVlc3Qgc2VudCwgc2V0IHVwIHJlc3BvbnNlIGNvbXBsZXRlci4KICAgICAgX25leHRSZXNwb25zZUNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXI8X0h0dHBJbmNvbWluZz4oKTsKCiAgICAgIC8vIExpc3RlbiBmb3IgcmVzcG9uc2UuCiAgICAgIF9uZXh0UmVzcG9uc2VDb21wbGV0ZXIuZnV0dXJlLnRoZW4oKGluY29taW5nKSB7CiAgICAgICAgX2N1cnJlbnRVcmkgPSBudWxsOwogICAgICAgIGluY29taW5nLmRhdGFEb25lLnRoZW4oKGNsb3NpbmcpIHsKICAgICAgICAgIGlmIChpbmNvbWluZy51cGdyYWRlZCkgewogICAgICAgICAgICBfaHR0cENsaWVudC5fY29ubmVjdGlvbkNsb3NlZCh0aGlzKTsKICAgICAgICAgICAgc3RhcnRUaW1lcigpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoY2xvc2VkKSByZXR1cm47CiAgICAgICAgICBpZiAoIWNsb3NpbmcgJiYKICAgICAgICAgICAgICAhX2Rpc3Bvc2UgJiYKICAgICAgICAgICAgICBpbmNvbWluZy5oZWFkZXJzLnBlcnNpc3RlbnRDb25uZWN0aW9uICYmCiAgICAgICAgICAgICAgcmVxdWVzdC5wZXJzaXN0ZW50Q29ubmVjdGlvbikgewogICAgICAgICAgICAvLyBSZXR1cm4gY29ubmVjdGlvbiwgbm93IHdlIGFyZSBkb25lLgogICAgICAgICAgICBfaHR0cENsaWVudC5fcmV0dXJuQ29ubmVjdGlvbih0aGlzKTsKICAgICAgICAgICAgX3N1YnNjcmlwdGlvbi5yZXN1bWUoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGRlc3Ryb3koKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICAvLyBGb3IgZGlnZXN0IGF1dGhlbnRpY2F0aW9uIGlmIHByb3h5IGNoZWNrIGlmIHRoZSBwcm94eQogICAgICAgIC8vIHJlcXVlc3RzIHRoZSBjbGllbnQgdG8gc3RhcnQgdXNpbmcgYSBuZXcgbm9uY2UgZm9yIHByb3h5CiAgICAgICAgLy8gYXV0aGVudGljYXRpb24uCiAgICAgICAgaWYgKHByb3h5Q3JlZHMgIT0gbnVsbCAmJgogICAgICAgICAgICBwcm94eUNyZWRzLnNjaGVtZSA9PSBfQXV0aGVudGljYXRpb25TY2hlbWUuRElHRVNUKSB7CiAgICAgICAgICB2YXIgYXV0aEluZm8gPSBpbmNvbWluZy5oZWFkZXJzWyJwcm94eS1hdXRoZW50aWNhdGlvbi1pbmZvIl07CiAgICAgICAgICBpZiAoYXV0aEluZm8gIT0gbnVsbCAmJiBhdXRoSW5mby5sZW5ndGggPT0gMSkgewogICAgICAgICAgICB2YXIgaGVhZGVyID0KICAgICAgICAgICAgICAgIF9IZWFkZXJWYWx1ZS5wYXJzZShhdXRoSW5mb1swXSwgcGFyYW1ldGVyU2VwYXJhdG9yOiAnLCcpOwogICAgICAgICAgICB2YXIgbmV4dG5vbmNlID0gaGVhZGVyLnBhcmFtZXRlcnNbIm5leHRub25jZSJdOwogICAgICAgICAgICBpZiAobmV4dG5vbmNlICE9IG51bGwpIHByb3h5Q3JlZHMubm9uY2UgPSBuZXh0bm9uY2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIEZvciBkaWdlc3QgYXV0aGVudGljYXRpb24gY2hlY2sgaWYgdGhlIHNlcnZlciByZXF1ZXN0cyB0aGUKICAgICAgICAvLyBjbGllbnQgdG8gc3RhcnQgdXNpbmcgYSBuZXcgbm9uY2UuCiAgICAgICAgaWYgKGNyZWRzICE9IG51bGwgJiYgY3JlZHMuc2NoZW1lID09IF9BdXRoZW50aWNhdGlvblNjaGVtZS5ESUdFU1QpIHsKICAgICAgICAgIHZhciBhdXRoSW5mbyA9IGluY29taW5nLmhlYWRlcnNbImF1dGhlbnRpY2F0aW9uLWluZm8iXTsKICAgICAgICAgIGlmIChhdXRoSW5mbyAhPSBudWxsICYmIGF1dGhJbmZvLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgIHZhciBoZWFkZXIgPQogICAgICAgICAgICAgICAgX0hlYWRlclZhbHVlLnBhcnNlKGF1dGhJbmZvWzBdLCBwYXJhbWV0ZXJTZXBhcmF0b3I6ICcsJyk7CiAgICAgICAgICAgIHZhciBuZXh0bm9uY2UgPSBoZWFkZXIucGFyYW1ldGVyc1sibmV4dG5vbmNlIl07CiAgICAgICAgICAgIGlmIChuZXh0bm9uY2UgIT0gbnVsbCkgY3JlZHMubm9uY2UgPSBuZXh0bm9uY2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJlcXVlc3QuX29uSW5jb21pbmcoaW5jb21pbmcpOwogICAgICB9KQogICAgICAgICAgLy8gSWYgd2Ugc2VlIGEgc3RhdGUgZXJyb3IsIHdlIGZhaWxlZCB0byBnZXQgdGhlICdmaXJzdCcKICAgICAgICAgIC8vIGVsZW1lbnQuCiAgICAgICAgICAuY2F0Y2hFcnJvcigoZXJyb3IpIHsKICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiQ29ubmVjdGlvbiBjbG9zZWQgYmVmb3JlIGRhdGEgd2FzIHJlY2VpdmVkIiwKICAgICAgICAgICAgdXJpOiB1cmkpOwogICAgICB9LCB0ZXN0OiAoZXJyb3IpID0+IGVycm9yIGlzIFN0YXRlRXJyb3IpLmNhdGNoRXJyb3IoKGVycm9yLCBzdGFja1RyYWNlKSB7CiAgICAgICAgLy8gV2UgYXJlIGRvbmUgd2l0aCB0aGUgc29ja2V0LgogICAgICAgIGRlc3Ryb3koKTsKICAgICAgICByZXF1ZXN0Ll9vbkVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgfSk7CgogICAgICAvLyBSZXN1bWUgdGhlIHBhcnNlciBub3cgd2UgaGF2ZSBhIGhhbmRsZXIuCiAgICAgIF9zdWJzY3JpcHRpb24ucmVzdW1lKCk7CiAgICAgIHJldHVybiBzOwogICAgfSwgb25FcnJvcjogKGUpIHsKICAgICAgZGVzdHJveSgpOwogICAgfSk7CiAgICByZXR1cm4gcmVxdWVzdDsKICB9CgogIEZ1dHVyZTxTb2NrZXQ+IGRldGFjaFNvY2tldCgpIHsKICAgIHJldHVybiBfc3RyZWFtRnV0dXJlLnRoZW4oCiAgICAgICAgKF8pID0+IG5ldyBfRGV0YWNoZWRTb2NrZXQoX3NvY2tldCwgX2h0dHBQYXJzZXIuZGV0YWNoSW5jb21pbmcoKSkpOwogIH0KCiAgdm9pZCBkZXN0cm95KCkgewogICAgY2xvc2VkID0gdHJ1ZTsKICAgIF9odHRwQ2xpZW50Ll9jb25uZWN0aW9uQ2xvc2VkKHRoaXMpOwogICAgX3NvY2tldC5kZXN0cm95KCk7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgY2xvc2VkID0gdHJ1ZTsKICAgIF9odHRwQ2xpZW50Ll9jb25uZWN0aW9uQ2xvc2VkKHRoaXMpOwogICAgX3N0cmVhbUZ1dHVyZQogICAgICAgIC50aW1lb3V0KF9odHRwQ2xpZW50LmlkbGVUaW1lb3V0KQogICAgICAgIC50aGVuKChfKSA9PiBfc29ja2V0LmRlc3Ryb3koKSk7CiAgfQoKICBGdXR1cmU8X0h0dHBDbGllbnRDb25uZWN0aW9uPiBjcmVhdGVQcm94eVR1bm5lbChTdHJpbmcgaG9zdCwgaW50IHBvcnQsCiAgICAgIF9Qcm94eSBwcm94eSwgYm9vbCBjYWxsYmFjayhYNTA5Q2VydGlmaWNhdGUgY2VydGlmaWNhdGUpKSB7CiAgICBfSHR0cENsaWVudFJlcXVlc3QgcmVxdWVzdCA9CiAgICAgICAgc2VuZChuZXcgVXJpKGhvc3Q6IGhvc3QsIHBvcnQ6IHBvcnQpLCBwb3J0LCAiQ09OTkVDVCIsIHByb3h5KTsKICAgIGlmIChwcm94eS5pc0F1dGhlbnRpY2F0ZWQpIHsKICAgICAgLy8gSWYgdGhlIHByb3h5IGNvbmZpZ3VyYXRpb24gY29udGFpbnMgdXNlciBpbmZvcm1hdGlvbiB1c2UgdGhhdAogICAgICAvLyBmb3IgcHJveHkgYmFzaWMgYXV0aG9yaXphdGlvbi4KICAgICAgU3RyaW5nIGF1dGggPSBfQ3J5cHRvVXRpbHMuYnl0ZXNUb0Jhc2U2NCgKICAgICAgICAgIHV0ZjguZW5jb2RlKCIke3Byb3h5LnVzZXJuYW1lfToke3Byb3h5LnBhc3N3b3JkfSIpKTsKICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChIdHRwSGVhZGVycy5wcm94eUF1dGhvcml6YXRpb25IZWFkZXIsICJCYXNpYyAkYXV0aCIpOwogICAgfQogICAgcmV0dXJuIHJlcXVlc3QuY2xvc2UoKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSAhPSBIdHRwU3RhdHVzLm9rKSB7CiAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oCiAgICAgICAgICAgICJQcm94eSBmYWlsZWQgdG8gZXN0YWJsaXNoIHR1bm5lbCAiCiAgICAgICAgICAgICIoJHtyZXNwb25zZS5zdGF0dXNDb2RlfSAke3Jlc3BvbnNlLnJlYXNvblBocmFzZX0pIiwKICAgICAgICAgICAgdXJpOiByZXF1ZXN0LnVyaSk7CiAgICAgIH0KICAgICAgdmFyIHNvY2tldCA9IChyZXNwb25zZSBhcyBfSHR0cENsaWVudFJlc3BvbnNlKQogICAgICAgICAgLl9odHRwUmVxdWVzdAogICAgICAgICAgLl9odHRwQ2xpZW50Q29ubmVjdGlvbgogICAgICAgICAgLl9zb2NrZXQ7CiAgICAgIHJldHVybiBTZWN1cmVTb2NrZXQuc2VjdXJlKHNvY2tldCwKICAgICAgICAgIGhvc3Q6IGhvc3QsIGNvbnRleHQ6IF9jb250ZXh0LCBvbkJhZENlcnRpZmljYXRlOiBjYWxsYmFjayk7CiAgICB9KS50aGVuKChzZWN1cmVTb2NrZXQpIHsKICAgICAgU3RyaW5nIGtleSA9IF9IdHRwQ2xpZW50Q29ubmVjdGlvbi5tYWtlS2V5KHRydWUsIGhvc3QsIHBvcnQpOwogICAgICByZXR1cm4gbmV3IF9IdHRwQ2xpZW50Q29ubmVjdGlvbigKICAgICAgICAgIGtleSwgc2VjdXJlU29ja2V0LCByZXF1ZXN0Ll9odHRwQ2xpZW50LCB0cnVlKTsKICAgIH0pOwogIH0KCiAgSHR0cENvbm5lY3Rpb25JbmZvIGdldCBjb25uZWN0aW9uSW5mbyA9PiBfSHR0cENvbm5lY3Rpb25JbmZvLmNyZWF0ZShfc29ja2V0KTsKCiAgc3RhdGljIG1ha2VLZXkoYm9vbCBpc1NlY3VyZSwgU3RyaW5nIGhvc3QsIGludCBwb3J0KSB7CiAgICByZXR1cm4gaXNTZWN1cmUgPyAic3NoOiRob3N0OiRwb3J0IiA6ICIkaG9zdDokcG9ydCI7CiAgfQoKICB2b2lkIHN0b3BUaW1lcigpIHsKICAgIGlmIChfaWRsZVRpbWVyICE9IG51bGwpIHsKICAgICAgX2lkbGVUaW1lci5jYW5jZWwoKTsKICAgICAgX2lkbGVUaW1lciA9IG51bGw7CiAgICB9CiAgfQoKICB2b2lkIHN0YXJ0VGltZXIoKSB7CiAgICBhc3NlcnQoX2lkbGVUaW1lciA9PSBudWxsKTsKICAgIF9pZGxlVGltZXIgPSBuZXcgVGltZXIoX2h0dHBDbGllbnQuaWRsZVRpbWVvdXQsICgpIHsKICAgICAgX2lkbGVUaW1lciA9IG51bGw7CiAgICAgIGNsb3NlKCk7CiAgICB9KTsKICB9Cn0KCmNsYXNzIF9Db25uZWN0aW9uSW5mbyB7CiAgZmluYWwgX0h0dHBDbGllbnRDb25uZWN0aW9uIGNvbm5lY3Rpb247CiAgZmluYWwgX1Byb3h5IHByb3h5OwoKICBfQ29ubmVjdGlvbkluZm8odGhpcy5jb25uZWN0aW9uLCB0aGlzLnByb3h5KTsKfQoKY2xhc3MgX0Nvbm5lY3Rpb25UYXJnZXQgewogIC8vIFVuaXF1ZSBrZXkgZm9yIHRoaXMgY29ubmVjdGlvbiB0YXJnZXQuCiAgZmluYWwgU3RyaW5nIGtleTsKICBmaW5hbCBTdHJpbmcgaG9zdDsKICBmaW5hbCBpbnQgcG9ydDsKICBmaW5hbCBib29sIGlzU2VjdXJlOwogIGZpbmFsIFNlY3VyaXR5Q29udGV4dCBjb250ZXh0OwogIGZpbmFsIFNldDxfSHR0cENsaWVudENvbm5lY3Rpb24+IF9pZGxlID0gbmV3IEhhc2hTZXQoKTsKICBmaW5hbCBTZXQ8X0h0dHBDbGllbnRDb25uZWN0aW9uPiBfYWN0aXZlID0gbmV3IEhhc2hTZXQoKTsKICBmaW5hbCBTZXQ8Q29ubmVjdGlvblRhc2s+IF9zb2NrZXRUYXNrcyA9IG5ldyBIYXNoU2V0KCk7CiAgZmluYWwgUXVldWUgX3BlbmRpbmcgPSBuZXcgTGlzdFF1ZXVlKCk7CiAgaW50IF9jb25uZWN0aW5nID0gMDsKCiAgX0Nvbm5lY3Rpb25UYXJnZXQoCiAgICAgIHRoaXMua2V5LCB0aGlzLmhvc3QsIHRoaXMucG9ydCwgdGhpcy5pc1NlY3VyZSwgdGhpcy5jb250ZXh0KTsKCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfaWRsZS5pc0VtcHR5ICYmIF9hY3RpdmUuaXNFbXB0eSAmJiBfY29ubmVjdGluZyA9PSAwOwoKICBib29sIGdldCBoYXNJZGxlID0+IF9pZGxlLmlzTm90RW1wdHk7CgogIGJvb2wgZ2V0IGhhc0FjdGl2ZSA9PiBfYWN0aXZlLmlzTm90RW1wdHkgfHwgX2Nvbm5lY3RpbmcgPiAwOwoKICBfSHR0cENsaWVudENvbm5lY3Rpb24gdGFrZUlkbGUoKSB7CiAgICBhc3NlcnQoaGFzSWRsZSk7CiAgICBfSHR0cENsaWVudENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IF9pZGxlLmZpcnN0OwogICAgX2lkbGUucmVtb3ZlKGNvbm5lY3Rpb24pOwogICAgY29ubmVjdGlvbi5zdG9wVGltZXIoKTsKICAgIF9hY3RpdmUuYWRkKGNvbm5lY3Rpb24pOwogICAgcmV0dXJuIGNvbm5lY3Rpb247CiAgfQoKICBfY2hlY2tQZW5kaW5nKCkgewogICAgaWYgKF9wZW5kaW5nLmlzTm90RW1wdHkpIHsKICAgICAgX3BlbmRpbmcucmVtb3ZlRmlyc3QoKSgpOwogICAgfQogIH0KCiAgdm9pZCBhZGROZXdBY3RpdmUoX0h0dHBDbGllbnRDb25uZWN0aW9uIGNvbm5lY3Rpb24pIHsKICAgIF9hY3RpdmUuYWRkKGNvbm5lY3Rpb24pOwogIH0KCiAgdm9pZCByZXR1cm5Db25uZWN0aW9uKF9IdHRwQ2xpZW50Q29ubmVjdGlvbiBjb25uZWN0aW9uKSB7CiAgICBhc3NlcnQoX2FjdGl2ZS5jb250YWlucyhjb25uZWN0aW9uKSk7CiAgICBfYWN0aXZlLnJlbW92ZShjb25uZWN0aW9uKTsKICAgIF9pZGxlLmFkZChjb25uZWN0aW9uKTsKICAgIGNvbm5lY3Rpb24uc3RhcnRUaW1lcigpOwogICAgX2NoZWNrUGVuZGluZygpOwogIH0KCiAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKF9IdHRwQ2xpZW50Q29ubmVjdGlvbiBjb25uZWN0aW9uKSB7CiAgICBhc3NlcnQoIV9hY3RpdmUuY29udGFpbnMoY29ubmVjdGlvbikgfHwgIV9pZGxlLmNvbnRhaW5zKGNvbm5lY3Rpb24pKTsKICAgIF9hY3RpdmUucmVtb3ZlKGNvbm5lY3Rpb24pOwogICAgX2lkbGUucmVtb3ZlKGNvbm5lY3Rpb24pOwogICAgX2NoZWNrUGVuZGluZygpOwogIH0KCiAgdm9pZCBjbG9zZShib29sIGZvcmNlKSB7CiAgICAvLyBBbHdheXMgY2FuY2VsIHBlbmRpbmcgc29ja2V0IGNvbm5lY3Rpb25zLgogICAgZm9yICh2YXIgdCBpbiBfc29ja2V0VGFza3MudG9MaXN0KCkpIHsKICAgICAgLy8gTWFrZSBzdXJlIHRoZSBzb2NrZXQgaXMgZGVzdHJveWVkIGlmIHRoZSBDb25uZWN0aW9uVGFzayBpcyBjYW5jZWxsZWQuCiAgICAgIHQuc29ja2V0LnRoZW4oKHMpIHsKICAgICAgICBzLmRlc3Ryb3koKTsKICAgICAgfSwgb25FcnJvcjogKGUpIHt9KTsKICAgICAgdC5jYW5jZWwoKTsKICAgIH0KICAgIGlmIChmb3JjZSkgewogICAgICBmb3IgKHZhciBjIGluIF9pZGxlLnRvTGlzdCgpKSB7CiAgICAgICAgYy5kZXN0cm95KCk7CiAgICAgIH0KICAgICAgZm9yICh2YXIgYyBpbiBfYWN0aXZlLnRvTGlzdCgpKSB7CiAgICAgICAgYy5kZXN0cm95KCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGZvciAodmFyIGMgaW4gX2lkbGUudG9MaXN0KCkpIHsKICAgICAgICBjLmNsb3NlKCk7CiAgICAgIH0KICAgIH0KICB9CgogIEZ1dHVyZTxfQ29ubmVjdGlvbkluZm8+IGNvbm5lY3QoCiAgICAgIFN0cmluZyB1cmlIb3N0LCBpbnQgdXJpUG9ydCwgX1Byb3h5IHByb3h5LCBfSHR0cENsaWVudCBjbGllbnQpIHsKICAgIGlmIChoYXNJZGxlKSB7CiAgICAgIHZhciBjb25uZWN0aW9uID0gdGFrZUlkbGUoKTsKICAgICAgY2xpZW50Ll9jb25uZWN0aW9uc0NoYW5nZWQoKTsKICAgICAgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUobmV3IF9Db25uZWN0aW9uSW5mbyhjb25uZWN0aW9uLCBwcm94eSkpOwogICAgfQogICAgaWYgKGNsaWVudC5tYXhDb25uZWN0aW9uc1Blckhvc3QgIT0gbnVsbCAmJgogICAgICAgIF9hY3RpdmUubGVuZ3RoICsgX2Nvbm5lY3RpbmcgPj0gY2xpZW50Lm1heENvbm5lY3Rpb25zUGVySG9zdCkgewogICAgICB2YXIgY29tcGxldGVyID0gbmV3IENvbXBsZXRlcjxfQ29ubmVjdGlvbkluZm8+KCk7CiAgICAgIF9wZW5kaW5nLmFkZCgoKSB7CiAgICAgICAgY29tcGxldGVyLmNvbXBsZXRlKGNvbm5lY3QodXJpSG9zdCwgdXJpUG9ydCwgcHJveHksIGNsaWVudCkpOwogICAgICB9KTsKICAgICAgcmV0dXJuIGNvbXBsZXRlci5mdXR1cmU7CiAgICB9CiAgICB2YXIgY3VycmVudEJhZENlcnRpZmljYXRlQ2FsbGJhY2sgPSBjbGllbnQuX2JhZENlcnRpZmljYXRlQ2FsbGJhY2s7CgogICAgYm9vbCBjYWxsYmFjayhYNTA5Q2VydGlmaWNhdGUgY2VydGlmaWNhdGUpIHsKICAgICAgaWYgKGN1cnJlbnRCYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJuIGN1cnJlbnRCYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrKGNlcnRpZmljYXRlLCB1cmlIb3N0LCB1cmlQb3J0KTsKICAgIH0KCiAgICBGdXR1cmU8Q29ubmVjdGlvblRhc2s+IGNvbm5lY3Rpb25UYXNrID0gKGlzU2VjdXJlICYmIHByb3h5LmlzRGlyZWN0CiAgICAgICAgPyBTZWN1cmVTb2NrZXQuc3RhcnRDb25uZWN0KGhvc3QsIHBvcnQsCiAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQsIG9uQmFkQ2VydGlmaWNhdGU6IGNhbGxiYWNrKQogICAgICAgIDogU29ja2V0LnN0YXJ0Q29ubmVjdChob3N0LCBwb3J0KSk7CiAgICBfY29ubmVjdGluZysrOwogICAgcmV0dXJuIGNvbm5lY3Rpb25UYXNrLnRoZW4oKENvbm5lY3Rpb25UYXNrIHRhc2spIHsKICAgICAgX3NvY2tldFRhc2tzLmFkZCh0YXNrKTsKICAgICAgRnV0dXJlIHNvY2tldEZ1dHVyZSA9IHRhc2suc29ja2V0OwogICAgICBmaW5hbCBEdXJhdGlvbiBjb25uZWN0aW9uVGltZW91dCA9IGNsaWVudC5jb25uZWN0aW9uVGltZW91dDsKICAgICAgaWYgKGNvbm5lY3Rpb25UaW1lb3V0ICE9IG51bGwpIHsKICAgICAgICBzb2NrZXRGdXR1cmUgPSBzb2NrZXRGdXR1cmUudGltZW91dChjb25uZWN0aW9uVGltZW91dCwgb25UaW1lb3V0OiAoKSB7CiAgICAgICAgICBfc29ja2V0VGFza3MucmVtb3ZlKHRhc2spOwogICAgICAgICAgdGFzay5jYW5jZWwoKTsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiBzb2NrZXRGdXR1cmUudGhlbigoc29ja2V0KSB7CiAgICAgICAgLy8gV2hlbiB0aGVyZSBpcyBhIHRpbWVvdXQsIHRoZXJlIGlzIGEgcmFjZSBpbiB3aGljaCB0aGUgY29ubmVjdGlvblRhc2sKICAgICAgICAvLyBGdXR1cmUgd29uJ3QgYmUgY29tcGxldGVkIHdpdGggYW4gZXJyb3IgYmVmb3JlIHRoZSBzb2NrZXRGdXR1cmUgaGVyZQogICAgICAgIC8vIGlzIGNvbXBsZXRlZCB3aXRoICdudWxsJyBieSB0aGUgb25UaW1lb3V0IGNhbGxiYWNrIGFib3ZlLiBJbiB0aGlzCiAgICAgICAgLy8gY2FzZSwgcHJvcGFnYXRlIGEgU29ja2V0RXhjZXB0aW9uIGFzIHNwZWNpZmllZCBieSB0aGUKICAgICAgICAvLyBIdHRwQ2xpZW50LmNvbm5lY3Rpb25UaW1lb3V0IGRvY3MuCiAgICAgICAgaWYgKHNvY2tldCA9PSBudWxsKSB7CiAgICAgICAgICBhc3NlcnQoY29ubmVjdGlvblRpbWVvdXQgIT0gbnVsbCk7CiAgICAgICAgICB0aHJvdyBuZXcgU29ja2V0RXhjZXB0aW9uKAogICAgICAgICAgICAgICJIVFRQIGNvbm5lY3Rpb24gdGltZWQgb3V0IGFmdGVyICR7Y29ubmVjdGlvblRpbWVvdXR9LCAiCiAgICAgICAgICAgICAgImhvc3Q6ICR7aG9zdH0sIHBvcnQ6ICR7cG9ydH0iKTsKICAgICAgICB9CiAgICAgICAgX2Nvbm5lY3RpbmctLTsKICAgICAgICBzb2NrZXQuc2V0T3B0aW9uKFNvY2tldE9wdGlvbi50Y3BOb0RlbGF5LCB0cnVlKTsKICAgICAgICB2YXIgY29ubmVjdGlvbiA9CiAgICAgICAgICAgIG5ldyBfSHR0cENsaWVudENvbm5lY3Rpb24oa2V5LCBzb2NrZXQsIGNsaWVudCwgZmFsc2UsIGNvbnRleHQpOwogICAgICAgIGlmIChpc1NlY3VyZSAmJiAhcHJveHkuaXNEaXJlY3QpIHsKICAgICAgICAgIGNvbm5lY3Rpb24uX2Rpc3Bvc2UgPSB0cnVlOwogICAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAuY3JlYXRlUHJveHlUdW5uZWwodXJpSG9zdCwgdXJpUG9ydCwgcHJveHksIGNhbGxiYWNrKQogICAgICAgICAgICAgIC50aGVuKCh0dW5uZWwpIHsKICAgICAgICAgICAgY2xpZW50CiAgICAgICAgICAgICAgICAuX2dldENvbm5lY3Rpb25UYXJnZXQodXJpSG9zdCwgdXJpUG9ydCwgdHJ1ZSkKICAgICAgICAgICAgICAgIC5hZGROZXdBY3RpdmUodHVubmVsKTsKICAgICAgICAgICAgX3NvY2tldFRhc2tzLnJlbW92ZSh0YXNrKTsKICAgICAgICAgICAgcmV0dXJuIG5ldyBfQ29ubmVjdGlvbkluZm8odHVubmVsLCBwcm94eSk7CiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYWRkTmV3QWN0aXZlKGNvbm5lY3Rpb24pOwogICAgICAgICAgX3NvY2tldFRhc2tzLnJlbW92ZSh0YXNrKTsKICAgICAgICAgIHJldHVybiBuZXcgX0Nvbm5lY3Rpb25JbmZvKGNvbm5lY3Rpb24sIHByb3h5KTsKICAgICAgICB9CiAgICAgIH0sIG9uRXJyb3I6IChlcnJvcikgewogICAgICAgIF9jb25uZWN0aW5nLS07CiAgICAgICAgX3NvY2tldFRhc2tzLnJlbW92ZSh0YXNrKTsKICAgICAgICBfY2hlY2tQZW5kaW5nKCk7CiAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgIH0pOwogICAgfSk7CiAgfQp9Cgp0eXBlZGVmIGJvb2wgQmFkQ2VydGlmaWNhdGVDYWxsYmFjayhYNTA5Q2VydGlmaWNhdGUgY3IsIFN0cmluZyBob3N0LCBpbnQgcG9ydCk7CgpjbGFzcyBfSHR0cENsaWVudCBpbXBsZW1lbnRzIEh0dHBDbGllbnQgewogIGJvb2wgX2Nsb3NpbmcgPSBmYWxzZTsKICBib29sIF9jbG9zaW5nRm9yY2VmdWxseSA9IGZhbHNlOwogIGZpbmFsIE1hcDxTdHJpbmcsIF9Db25uZWN0aW9uVGFyZ2V0PiBfY29ubmVjdGlvblRhcmdldHMgPQogICAgICBuZXcgSGFzaE1hcDxTdHJpbmcsIF9Db25uZWN0aW9uVGFyZ2V0PigpOwogIGZpbmFsIExpc3Q8X0NyZWRlbnRpYWxzPiBfY3JlZGVudGlhbHMgPSBbXTsKICBmaW5hbCBMaXN0PF9Qcm94eUNyZWRlbnRpYWxzPiBfcHJveHlDcmVkZW50aWFscyA9IFtdOwogIGZpbmFsIFNlY3VyaXR5Q29udGV4dCBfY29udGV4dDsKICBGdW5jdGlvbiBfYXV0aGVudGljYXRlOwogIEZ1bmN0aW9uIF9hdXRoZW50aWNhdGVQcm94eTsKICBGdW5jdGlvbiBfZmluZFByb3h5ID0gSHR0cENsaWVudC5maW5kUHJveHlGcm9tRW52aXJvbm1lbnQ7CiAgRHVyYXRpb24gX2lkbGVUaW1lb3V0ID0gY29uc3QgRHVyYXRpb24oc2Vjb25kczogMTUpOwogIEJhZENlcnRpZmljYXRlQ2FsbGJhY2sgX2JhZENlcnRpZmljYXRlQ2FsbGJhY2s7CgogIER1cmF0aW9uIGdldCBpZGxlVGltZW91dCA9PiBfaWRsZVRpbWVvdXQ7CgogIER1cmF0aW9uIGNvbm5lY3Rpb25UaW1lb3V0OwoKICBpbnQgbWF4Q29ubmVjdGlvbnNQZXJIb3N0OwoKICBib29sIGF1dG9VbmNvbXByZXNzID0gdHJ1ZTsKCiAgU3RyaW5nIHVzZXJBZ2VudCA9IF9nZXRIdHRwVmVyc2lvbigpOwoKICBfSHR0cENsaWVudCh0aGlzLl9jb250ZXh0KTsKCiAgdm9pZCBzZXQgaWRsZVRpbWVvdXQoRHVyYXRpb24gdGltZW91dCkgewogICAgX2lkbGVUaW1lb3V0ID0gdGltZW91dDsKICAgIGZvciAodmFyIGMgaW4gX2Nvbm5lY3Rpb25UYXJnZXRzLnZhbHVlcykgewogICAgICBmb3IgKHZhciBpZGxlIGluIGMuX2lkbGUpIHsKICAgICAgICAvLyBSZXNldCB0aW1lci4gVGhpcyBpcyBmaW5lLCBhcyBpdCdzIG5vdCBoYXBwZW5pbmcgb2Z0ZW4uCiAgICAgICAgaWRsZS5zdG9wVGltZXIoKTsKICAgICAgICBpZGxlLnN0YXJ0VGltZXIoKTsKICAgICAgfQogICAgfQogIH0KCiAgc2V0IGJhZENlcnRpZmljYXRlQ2FsbGJhY2soCiAgICAgIGJvb2wgY2FsbGJhY2soWDUwOUNlcnRpZmljYXRlIGNlcnQsIFN0cmluZyBob3N0LCBpbnQgcG9ydCkpIHsKICAgIF9iYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrID0gY2FsbGJhY2s7CiAgfQoKICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IG9wZW4oCiAgICAgIFN0cmluZyBtZXRob2QsIFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIHBhdGgpIHsKICAgIGNvbnN0IGludCBoYXNoTWFyayA9IDB4MjM7CiAgICBjb25zdCBpbnQgcXVlc3Rpb25NYXJrID0gMHgzZjsKICAgIGludCBmcmFnbWVudFN0YXJ0ID0gcGF0aC5sZW5ndGg7CiAgICBpbnQgcXVlcnlTdGFydCA9IHBhdGgubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgdmFyIGNoYXIgPSBwYXRoLmNvZGVVbml0QXQoaSk7CiAgICAgIGlmIChjaGFyID09IGhhc2hNYXJrKSB7CiAgICAgICAgZnJhZ21lbnRTdGFydCA9IGk7CiAgICAgICAgcXVlcnlTdGFydCA9IGk7CiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PSBxdWVzdGlvbk1hcmspIHsKICAgICAgICBxdWVyeVN0YXJ0ID0gaTsKICAgICAgfQogICAgfQogICAgU3RyaW5nIHF1ZXJ5ID0gbnVsbDsKICAgIGlmIChxdWVyeVN0YXJ0IDwgZnJhZ21lbnRTdGFydCkgewogICAgICBxdWVyeSA9IHBhdGguc3Vic3RyaW5nKHF1ZXJ5U3RhcnQgKyAxLCBmcmFnbWVudFN0YXJ0KTsKICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIHF1ZXJ5U3RhcnQpOwogICAgfQogICAgVXJpIHVyaSA9IG5ldyBVcmkoCiAgICAgICAgc2NoZW1lOiAiaHR0cCIsIGhvc3Q6IGhvc3QsIHBvcnQ6IHBvcnQsIHBhdGg6IHBhdGgsIHF1ZXJ5OiBxdWVyeSk7CiAgICByZXR1cm4gX29wZW5VcmwobWV0aG9kLCB1cmkpOwogIH0KCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBvcGVuVXJsKFN0cmluZyBtZXRob2QsIFVyaSB1cmwpID0+CiAgICAgIF9vcGVuVXJsKG1ldGhvZCwgdXJsKTsKCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBnZXQoU3RyaW5nIGhvc3QsIGludCBwb3J0LCBTdHJpbmcgcGF0aCkgPT4KICAgICAgb3BlbigiZ2V0IiwgaG9zdCwgcG9ydCwgcGF0aCk7CgogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gZ2V0VXJsKFVyaSB1cmwpID0+IF9vcGVuVXJsKCJnZXQiLCB1cmwpOwoKICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IHBvc3QoU3RyaW5nIGhvc3QsIGludCBwb3J0LCBTdHJpbmcgcGF0aCkgPT4KICAgICAgb3BlbigicG9zdCIsIGhvc3QsIHBvcnQsIHBhdGgpOwoKICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IHBvc3RVcmwoVXJpIHVybCkgPT4gX29wZW5VcmwoInBvc3QiLCB1cmwpOwoKICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IHB1dChTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBwYXRoKSA9PgogICAgICBvcGVuKCJwdXQiLCBob3N0LCBwb3J0LCBwYXRoKTsKCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBwdXRVcmwoVXJpIHVybCkgPT4gX29wZW5VcmwoInB1dCIsIHVybCk7CgogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gZGVsZXRlKFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIHBhdGgpID0+CiAgICAgIG9wZW4oImRlbGV0ZSIsIGhvc3QsIHBvcnQsIHBhdGgpOwoKICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IGRlbGV0ZVVybChVcmkgdXJsKSA9PiBfb3BlblVybCgiZGVsZXRlIiwgdXJsKTsKCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBoZWFkKFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIHBhdGgpID0+CiAgICAgIG9wZW4oImhlYWQiLCBob3N0LCBwb3J0LCBwYXRoKTsKCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBoZWFkVXJsKFVyaSB1cmwpID0+IF9vcGVuVXJsKCJoZWFkIiwgdXJsKTsKCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBwYXRjaChTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBwYXRoKSA9PgogICAgICBvcGVuKCJwYXRjaCIsIGhvc3QsIHBvcnQsIHBhdGgpOwoKICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IHBhdGNoVXJsKFVyaSB1cmwpID0+IF9vcGVuVXJsKCJwYXRjaCIsIHVybCk7CgogIHZvaWQgY2xvc2Uoe2Jvb2wgZm9yY2U6IGZhbHNlfSkgewogICAgX2Nsb3NpbmcgPSB0cnVlOwogICAgX2Nsb3NpbmdGb3JjZWZ1bGx5ID0gZm9yY2U7CiAgICBfY2xvc2VDb25uZWN0aW9ucyhfY2xvc2luZ0ZvcmNlZnVsbHkpOwogICAgYXNzZXJ0KCFfY29ubmVjdGlvblRhcmdldHMudmFsdWVzLmFueSgocykgPT4gcy5oYXNJZGxlKSk7CiAgICBhc3NlcnQoCiAgICAgICAgIWZvcmNlIHx8ICFfY29ubmVjdGlvblRhcmdldHMudmFsdWVzLmFueSgocykgPT4gcy5fYWN0aXZlLmlzTm90RW1wdHkpKTsKICB9CgogIHNldCBhdXRoZW50aWNhdGUoRnV0dXJlPGJvb2w+IGYoVXJpIHVybCwgU3RyaW5nIHNjaGVtZSwgU3RyaW5nIHJlYWxtKSkgewogICAgX2F1dGhlbnRpY2F0ZSA9IGY7CiAgfQoKICB2b2lkIGFkZENyZWRlbnRpYWxzKFVyaSB1cmwsIFN0cmluZyByZWFsbSwgSHR0cENsaWVudENyZWRlbnRpYWxzIGNyKSB7CiAgICBfY3JlZGVudGlhbHMuYWRkKG5ldyBfU2l0ZUNyZWRlbnRpYWxzKHVybCwgcmVhbG0sIGNyKSk7CiAgfQoKICBzZXQgYXV0aGVudGljYXRlUHJveHkoCiAgICAgIEZ1dHVyZTxib29sPiBmKFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIHNjaGVtZSwgU3RyaW5nIHJlYWxtKSkgewogICAgX2F1dGhlbnRpY2F0ZVByb3h5ID0gZjsKICB9CgogIHZvaWQgYWRkUHJveHlDcmVkZW50aWFscygKICAgICAgU3RyaW5nIGhvc3QsIGludCBwb3J0LCBTdHJpbmcgcmVhbG0sIEh0dHBDbGllbnRDcmVkZW50aWFscyBjcikgewogICAgX3Byb3h5Q3JlZGVudGlhbHMuYWRkKG5ldyBfUHJveHlDcmVkZW50aWFscyhob3N0LCBwb3J0LCByZWFsbSwgY3IpKTsKICB9CgogIHNldCBmaW5kUHJveHkoU3RyaW5nIGYoVXJpIHVyaSkpID0+IF9maW5kUHJveHkgPSBmOwoKICBGdXR1cmU8X0h0dHBDbGllbnRSZXF1ZXN0PiBfb3BlblVybChTdHJpbmcgbWV0aG9kLCBVcmkgdXJpKSB7CiAgICBpZiAoX2Nsb3NpbmcpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIkNsaWVudCBpcyBjbG9zZWQiKTsKICAgIH0KCiAgICAvLyBJZ25vcmUgYW55IGZyYWdtZW50cyBvbiB0aGUgcmVxdWVzdCBVUkkuCiAgICB1cmkgPSB1cmkucmVtb3ZlRnJhZ21lbnQoKTsKCiAgICBpZiAobWV0aG9kID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IobWV0aG9kKTsKICAgIH0KICAgIGlmIChtZXRob2QgIT0gIkNPTk5FQ1QiKSB7CiAgICAgIGlmICh1cmkuaG9zdC5pc0VtcHR5KSB7CiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIk5vIGhvc3Qgc3BlY2lmaWVkIGluIFVSSSAkdXJpIik7CiAgICAgIH0gZWxzZSBpZiAodXJpLnNjaGVtZSAhPSAiaHR0cCIgJiYgdXJpLnNjaGVtZSAhPSAiaHR0cHMiKSB7CiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAgICJVbnN1cHBvcnRlZCBzY2hlbWUgJyR7dXJpLnNjaGVtZX0nIGluIFVSSSAkdXJpIik7CiAgICAgIH0KICAgIH0KCiAgICBib29sIGlzU2VjdXJlID0gKHVyaS5zY2hlbWUgPT0gImh0dHBzIik7CiAgICBpbnQgcG9ydCA9IHVyaS5wb3J0OwogICAgaWYgKHBvcnQgPT0gMCkgewogICAgICBwb3J0ID0KICAgICAgICAgIGlzU2VjdXJlID8gSHR0cENsaWVudC5kZWZhdWx0SHR0cHNQb3J0IDogSHR0cENsaWVudC5kZWZhdWx0SHR0cFBvcnQ7CiAgICB9CiAgICAvLyBDaGVjayB0byBzZWUgaWYgYSBwcm94eSBzZXJ2ZXIgc2hvdWxkIGJlIHVzZWQgZm9yIHRoaXMgY29ubmVjdGlvbi4KICAgIHZhciBwcm94eUNvbmYgPSBjb25zdCBfUHJveHlDb25maWd1cmF0aW9uLmRpcmVjdCgpOwogICAgaWYgKF9maW5kUHJveHkgIT0gbnVsbCkgewogICAgICAvLyBUT0RPKHNnamVzc2UpOiBLZWVwIGEgbWFwIG9mIHRoZXNlIGFzIG5vcm1hbGx5IG9ubHkgYSBmZXcKICAgICAgLy8gY29uZmlndXJhdGlvbiBzdHJpbmdzIHdpbGwgYmUgdXNlZC4KICAgICAgdHJ5IHsKICAgICAgICBwcm94eUNvbmYgPSBuZXcgX1Byb3h5Q29uZmlndXJhdGlvbihfZmluZFByb3h5KHVyaSkpOwogICAgICB9IGNhdGNoIChlcnJvciwgc3RhY2tUcmFjZSkgewogICAgICAgIHJldHVybiBuZXcgRnV0dXJlLmVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIF9nZXRDb25uZWN0aW9uKHVyaS5ob3N0LCBwb3J0LCBwcm94eUNvbmYsIGlzU2VjdXJlKQogICAgICAgIC50aGVuKChfQ29ubmVjdGlvbkluZm8gaW5mbykgewogICAgICBfSHR0cENsaWVudFJlcXVlc3Qgc2VuZChfQ29ubmVjdGlvbkluZm8gaW5mbykgewogICAgICAgIHJldHVybiBpbmZvLmNvbm5lY3Rpb24KICAgICAgICAgICAgLnNlbmQodXJpLCBwb3J0LCBtZXRob2QudG9VcHBlckNhc2UoKSwgaW5mby5wcm94eSk7CiAgICAgIH0KCiAgICAgIC8vIElmIHRoZSBjb25uZWN0aW9uIHdhcyBjbG9zZWQgYmVmb3JlIHRoZSByZXF1ZXN0IHdhcyBzZW50LCBjcmVhdGUKICAgICAgLy8gYW5kIHVzZSBhbm90aGVyIGNvbm5lY3Rpb24uCiAgICAgIGlmIChpbmZvLmNvbm5lY3Rpb24uY2xvc2VkKSB7CiAgICAgICAgcmV0dXJuIF9nZXRDb25uZWN0aW9uKHVyaS5ob3N0LCBwb3J0LCBwcm94eUNvbmYsIGlzU2VjdXJlKS50aGVuKHNlbmQpOwogICAgICB9CiAgICAgIHJldHVybiBzZW5kKGluZm8pOwogICAgfSk7CiAgfQoKICBGdXR1cmU8X0h0dHBDbGllbnRSZXF1ZXN0PiBfb3BlblVybEZyb21SZXF1ZXN0KAogICAgICBTdHJpbmcgbWV0aG9kLCBVcmkgdXJpLCBfSHR0cENsaWVudFJlcXVlc3QgcHJldmlvdXMpIHsKICAgIC8vIElmIHRoZSBuZXcgVVJJIGlzIHJlbGF0aXZlICh0byBlaXRoZXIgJy8nIG9yIHNvbWUgc3ViLXBhdGgpLAogICAgLy8gY29uc3RydWN0IGEgZnVsbCBVUkkgZnJvbSB0aGUgcHJldmlvdXMgb25lLgogICAgVXJpIHJlc29sdmVkID0gcHJldmlvdXMudXJpLnJlc29sdmVVcmkodXJpKTsKICAgIHJldHVybiBfb3BlblVybChtZXRob2QsIHJlc29sdmVkKS50aGVuKChfSHR0cENsaWVudFJlcXVlc3QgcmVxdWVzdCkgewogICAgICByZXF1ZXN0CiAgICAgICAgLy8gT25seSBmb2xsb3cgcmVkaXJlY3RzIGlmIGluaXRpYWwgcmVxdWVzdCBkaWQuCiAgICAgICAgLi5mb2xsb3dSZWRpcmVjdHMgPSBwcmV2aW91cy5mb2xsb3dSZWRpcmVjdHMKICAgICAgICAvLyBBbGxvdyBzYW1lIG51bWJlciBvZiByZWRpcmVjdHMuCiAgICAgICAgLi5tYXhSZWRpcmVjdHMgPSBwcmV2aW91cy5tYXhSZWRpcmVjdHM7CiAgICAgIC8vIENvcHkgaGVhZGVycy4KICAgICAgZm9yICh2YXIgaGVhZGVyIGluIHByZXZpb3VzLmhlYWRlcnMuX2hlYWRlcnMua2V5cykgewogICAgICAgIGlmIChyZXF1ZXN0LmhlYWRlcnNbaGVhZGVyXSA9PSBudWxsKSB7CiAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KGhlYWRlciwgcHJldmlvdXMuaGVhZGVyc1toZWFkZXJdKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJlcXVlc3QKICAgICAgICAuLmhlYWRlcnMuY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcgPSBmYWxzZQogICAgICAgIC4uY29udGVudExlbmd0aCA9IDA7CiAgICB9KTsKICB9CgogIC8vIFJldHVybiBhIGxpdmUgY29ubmVjdGlvbiB0byB0aGUgaWRsZSBwb29sLgogIHZvaWQgX3JldHVybkNvbm5lY3Rpb24oX0h0dHBDbGllbnRDb25uZWN0aW9uIGNvbm5lY3Rpb24pIHsKICAgIF9jb25uZWN0aW9uVGFyZ2V0c1tjb25uZWN0aW9uLmtleV0ucmV0dXJuQ29ubmVjdGlvbihjb25uZWN0aW9uKTsKICAgIF9jb25uZWN0aW9uc0NoYW5nZWQoKTsKICB9CgogIC8vIFJlbW92ZSBhIGNsb3NlZCBjb25uZWN0aW9uIGZyb20gdGhlIGFjdGl2ZSBzZXQuCiAgdm9pZCBfY29ubmVjdGlvbkNsb3NlZChfSHR0cENsaWVudENvbm5lY3Rpb24gY29ubmVjdGlvbikgewogICAgY29ubmVjdGlvbi5zdG9wVGltZXIoKTsKICAgIHZhciBjb25uZWN0aW9uVGFyZ2V0ID0gX2Nvbm5lY3Rpb25UYXJnZXRzW2Nvbm5lY3Rpb24ua2V5XTsKICAgIGlmIChjb25uZWN0aW9uVGFyZ2V0ICE9IG51bGwpIHsKICAgICAgY29ubmVjdGlvblRhcmdldC5jb25uZWN0aW9uQ2xvc2VkKGNvbm5lY3Rpb24pOwogICAgICBpZiAoY29ubmVjdGlvblRhcmdldC5pc0VtcHR5KSB7CiAgICAgICAgX2Nvbm5lY3Rpb25UYXJnZXRzLnJlbW92ZShjb25uZWN0aW9uLmtleSk7CiAgICAgIH0KICAgICAgX2Nvbm5lY3Rpb25zQ2hhbmdlZCgpOwogICAgfQogIH0KCiAgdm9pZCBfY29ubmVjdGlvbnNDaGFuZ2VkKCkgewogICAgaWYgKF9jbG9zaW5nKSB7CiAgICAgIF9jbG9zZUNvbm5lY3Rpb25zKF9jbG9zaW5nRm9yY2VmdWxseSk7CiAgICB9CiAgfQoKICB2b2lkIF9jbG9zZUNvbm5lY3Rpb25zKGJvb2wgZm9yY2UpIHsKICAgIGZvciAodmFyIGNvbm5lY3Rpb25UYXJnZXQgaW4gX2Nvbm5lY3Rpb25UYXJnZXRzLnZhbHVlcy50b0xpc3QoKSkgewogICAgICBjb25uZWN0aW9uVGFyZ2V0LmNsb3NlKGZvcmNlKTsKICAgIH0KICB9CgogIF9Db25uZWN0aW9uVGFyZ2V0IF9nZXRDb25uZWN0aW9uVGFyZ2V0KFN0cmluZyBob3N0LCBpbnQgcG9ydCwgYm9vbCBpc1NlY3VyZSkgewogICAgU3RyaW5nIGtleSA9IF9IdHRwQ2xpZW50Q29ubmVjdGlvbi5tYWtlS2V5KGlzU2VjdXJlLCBob3N0LCBwb3J0KTsKICAgIHJldHVybiBfY29ubmVjdGlvblRhcmdldHMucHV0SWZBYnNlbnQoa2V5LCAoKSB7CiAgICAgIHJldHVybiBuZXcgX0Nvbm5lY3Rpb25UYXJnZXQoa2V5LCBob3N0LCBwb3J0LCBpc1NlY3VyZSwgX2NvbnRleHQpOwogICAgfSk7CiAgfQoKICAvLyBHZXQgYSBuZXcgX0h0dHBDbGllbnRDb25uZWN0aW9uLCBmcm9tIHRoZSBtYXRjaGluZyBfQ29ubmVjdGlvblRhcmdldC4KICBGdXR1cmU8X0Nvbm5lY3Rpb25JbmZvPiBfZ2V0Q29ubmVjdGlvbihTdHJpbmcgdXJpSG9zdCwgaW50IHVyaVBvcnQsCiAgICAgIF9Qcm94eUNvbmZpZ3VyYXRpb24gcHJveHlDb25mLCBib29sIGlzU2VjdXJlKSB7CiAgICBJdGVyYXRvcjxfUHJveHk+IHByb3hpZXMgPSBwcm94eUNvbmYucHJveGllcy5pdGVyYXRvcjsKCiAgICBGdXR1cmU8X0Nvbm5lY3Rpb25JbmZvPiBjb25uZWN0KGVycm9yKSB7CiAgICAgIGlmICghcHJveGllcy5tb3ZlTmV4dCgpKSByZXR1cm4gbmV3IEZ1dHVyZS5lcnJvcihlcnJvcik7CiAgICAgIF9Qcm94eSBwcm94eSA9IHByb3hpZXMuY3VycmVudDsKICAgICAgU3RyaW5nIGhvc3QgPSBwcm94eS5pc0RpcmVjdCA/IHVyaUhvc3QgOiBwcm94eS5ob3N0OwogICAgICBpbnQgcG9ydCA9IHByb3h5LmlzRGlyZWN0ID8gdXJpUG9ydCA6IHByb3h5LnBvcnQ7CiAgICAgIHJldHVybiBfZ2V0Q29ubmVjdGlvblRhcmdldChob3N0LCBwb3J0LCBpc1NlY3VyZSkKICAgICAgICAgIC5jb25uZWN0KHVyaUhvc3QsIHVyaVBvcnQsIHByb3h5LCB0aGlzKQogICAgICAgICAgLy8gT24gZXJyb3IsIGNvbnRpbnVlIHdpdGggbmV4dCBwcm94eS4KICAgICAgICAgIC5jYXRjaEVycm9yKGNvbm5lY3QpOwogICAgfQoKICAgIHJldHVybiBjb25uZWN0KG5ldyBIdHRwRXhjZXB0aW9uKCJObyBwcm94aWVzIGdpdmVuIikpOwogIH0KCiAgX1NpdGVDcmVkZW50aWFscyBfZmluZENyZWRlbnRpYWxzKFVyaSB1cmwsIFtfQXV0aGVudGljYXRpb25TY2hlbWUgc2NoZW1lXSkgewogICAgLy8gTG9vayBmb3IgY3JlZGVudGlhbHMuCiAgICBfU2l0ZUNyZWRlbnRpYWxzIGNyID0KICAgICAgICBfY3JlZGVudGlhbHMuZm9sZChudWxsLCAoX1NpdGVDcmVkZW50aWFscyBwcmV2LCB2YWx1ZSkgewogICAgICB2YXIgc2l0ZUNyZWRlbnRpYWxzID0gdmFsdWUgYXMgX1NpdGVDcmVkZW50aWFsczsKICAgICAgaWYgKHNpdGVDcmVkZW50aWFscy5hcHBsaWVzKHVybCwgc2NoZW1lKSkgewogICAgICAgIGlmIChwcmV2ID09IG51bGwpIHJldHVybiB2YWx1ZTsKICAgICAgICByZXR1cm4gc2l0ZUNyZWRlbnRpYWxzLnVyaS5wYXRoLmxlbmd0aCA+IHByZXYudXJpLnBhdGgubGVuZ3RoCiAgICAgICAgICAgID8gc2l0ZUNyZWRlbnRpYWxzCiAgICAgICAgICAgIDogcHJldjsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gcHJldjsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gY3I7CiAgfQoKICBfUHJveHlDcmVkZW50aWFscyBfZmluZFByb3h5Q3JlZGVudGlhbHMoX1Byb3h5IHByb3h5LAogICAgICBbX0F1dGhlbnRpY2F0aW9uU2NoZW1lIHNjaGVtZV0pIHsKICAgIC8vIExvb2sgZm9yIGNyZWRlbnRpYWxzLgogICAgdmFyIGl0ID0gX3Byb3h5Q3JlZGVudGlhbHMuaXRlcmF0b3I7CiAgICB3aGlsZSAoaXQubW92ZU5leHQoKSkgewogICAgICBpZiAoaXQuY3VycmVudC5hcHBsaWVzKHByb3h5LCBzY2hlbWUpKSB7CiAgICAgICAgcmV0dXJuIGl0LmN1cnJlbnQ7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCBfcmVtb3ZlQ3JlZGVudGlhbHMoX0NyZWRlbnRpYWxzIGNyKSB7CiAgICBpbnQgaW5kZXggPSBfY3JlZGVudGlhbHMuaW5kZXhPZihjcik7CiAgICBpZiAoaW5kZXggIT0gLTEpIHsKICAgICAgX2NyZWRlbnRpYWxzLnJlbW92ZUF0KGluZGV4KTsKICAgIH0KICB9CgogIHZvaWQgX3JlbW92ZVByb3h5Q3JlZGVudGlhbHMoX0NyZWRlbnRpYWxzIGNyKSB7CiAgICBpbnQgaW5kZXggPSBfcHJveHlDcmVkZW50aWFscy5pbmRleE9mKGNyKTsKICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICBfcHJveHlDcmVkZW50aWFscy5yZW1vdmVBdChpbmRleCk7CiAgICB9CiAgfQoKICBzdGF0aWMgU3RyaW5nIF9maW5kUHJveHlGcm9tRW52aXJvbm1lbnQoCiAgICAgIFVyaSB1cmwsIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQpIHsKICAgIGNoZWNrTm9Qcm94eShTdHJpbmcgb3B0aW9uKSB7CiAgICAgIGlmIChvcHRpb24gPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIEl0ZXJhdG9yPFN0cmluZz4gbmFtZXMgPSBvcHRpb24uc3BsaXQoIiwiKS5tYXAoKHMpID0+IHMudHJpbSgpKS5pdGVyYXRvcjsKICAgICAgd2hpbGUgKG5hbWVzLm1vdmVOZXh0KCkpIHsKICAgICAgICB2YXIgbmFtZSA9IG5hbWVzLmN1cnJlbnQ7CiAgICAgICAgaWYgKChuYW1lLnN0YXJ0c1dpdGgoIlsiKSAmJgogICAgICAgICAgICAgICAgbmFtZS5lbmRzV2l0aCgiXSIpICYmCiAgICAgICAgICAgICAgICAiWyR7dXJsLmhvc3R9XSIgPT0gbmFtZSkgfHwKICAgICAgICAgICAgKG5hbWUuaXNOb3RFbXB0eSAmJiB1cmwuaG9zdC5lbmRzV2l0aChuYW1lKSkpIHsKICAgICAgICAgIHJldHVybiAiRElSRUNUIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgY2hlY2tQcm94eShTdHJpbmcgb3B0aW9uKSB7CiAgICAgIGlmIChvcHRpb24gPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIG9wdGlvbiA9IG9wdGlvbi50cmltKCk7CiAgICAgIGlmIChvcHRpb24uaXNFbXB0eSkgcmV0dXJuIG51bGw7CiAgICAgIGludCBwb3MgPSBvcHRpb24uaW5kZXhPZigiOi8vIik7CiAgICAgIGlmIChwb3MgPj0gMCkgewogICAgICAgIG9wdGlvbiA9IG9wdGlvbi5zdWJzdHJpbmcocG9zICsgMyk7CiAgICAgIH0KICAgICAgcG9zID0gb3B0aW9uLmluZGV4T2YoIi8iKTsKICAgICAgaWYgKHBvcyA+PSAwKSB7CiAgICAgICAgb3B0aW9uID0gb3B0aW9uLnN1YnN0cmluZygwLCBwb3MpOwogICAgICB9CiAgICAgIC8vIEFkZCBkZWZhdWx0IHBvcnQgaWYgbm8gcG9ydCBjb25maWd1cmVkLgogICAgICBpZiAob3B0aW9uLmluZGV4T2YoIlsiKSA9PSAwKSB7CiAgICAgICAgdmFyIHBvcyA9IG9wdGlvbi5sYXN0SW5kZXhPZigiOiIpOwogICAgICAgIGlmIChvcHRpb24uaW5kZXhPZigiXSIpID4gcG9zKSBvcHRpb24gPSAiJG9wdGlvbjoxMDgwIjsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAob3B0aW9uLmluZGV4T2YoIjoiKSA9PSAtMSkgb3B0aW9uID0gIiRvcHRpb246MTA4MCI7CiAgICAgIH0KICAgICAgcmV0dXJuICJQUk9YWSAkb3B0aW9uIjsKICAgIH0KCiAgICAvLyBEZWZhdWx0IHRvIHVzaW5nIHRoZSBwcm9jZXNzIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICBpZiAoZW52aXJvbm1lbnQgPT0gbnVsbCkgZW52aXJvbm1lbnQgPSBfcGxhdGZvcm1FbnZpcm9ubWVudENhY2hlOwoKICAgIFN0cmluZyBwcm94eUNmZzsKCiAgICBTdHJpbmcgbm9Qcm94eSA9IGVudmlyb25tZW50WyJub19wcm94eSJdOwogICAgaWYgKG5vUHJveHkgPT0gbnVsbCkgbm9Qcm94eSA9IGVudmlyb25tZW50WyJOT19QUk9YWSJdOwogICAgaWYgKChwcm94eUNmZyA9IGNoZWNrTm9Qcm94eShub1Byb3h5KSkgIT0gbnVsbCkgewogICAgICByZXR1cm4gcHJveHlDZmc7CiAgICB9CgogICAgaWYgKHVybC5zY2hlbWUgPT0gImh0dHAiKSB7CiAgICAgIFN0cmluZyBwcm94eSA9IGVudmlyb25tZW50WyJodHRwX3Byb3h5Il07CiAgICAgIGlmIChwcm94eSA9PSBudWxsKSBwcm94eSA9IGVudmlyb25tZW50WyJIVFRQX1BST1hZIl07CiAgICAgIGlmICgocHJveHlDZmcgPSBjaGVja1Byb3h5KHByb3h5KSkgIT0gbnVsbCkgewogICAgICAgIHJldHVybiBwcm94eUNmZzsKICAgICAgfQogICAgfSBlbHNlIGlmICh1cmwuc2NoZW1lID09ICJodHRwcyIpIHsKICAgICAgU3RyaW5nIHByb3h5ID0gZW52aXJvbm1lbnRbImh0dHBzX3Byb3h5Il07CiAgICAgIGlmIChwcm94eSA9PSBudWxsKSBwcm94eSA9IGVudmlyb25tZW50WyJIVFRQU19QUk9YWSJdOwogICAgICBpZiAoKHByb3h5Q2ZnID0gY2hlY2tQcm94eShwcm94eSkpICE9IG51bGwpIHsKICAgICAgICByZXR1cm4gcHJveHlDZmc7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAiRElSRUNUIjsKICB9CgogIHN0YXRpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IF9wbGF0Zm9ybUVudmlyb25tZW50Q2FjaGUgPSBQbGF0Zm9ybS5lbnZpcm9ubWVudDsKfQoKY2xhc3MgX0h0dHBDb25uZWN0aW9uIGV4dGVuZHMgTGlua2VkTGlzdEVudHJ5PF9IdHRwQ29ubmVjdGlvbj4KICAgIHdpdGggX1NlcnZpY2VPYmplY3QgewogIHN0YXRpYyBjb25zdCBfQUNUSVZFID0gMDsKICBzdGF0aWMgY29uc3QgX0lETEUgPSAxOwogIHN0YXRpYyBjb25zdCBfQ0xPU0lORyA9IDI7CiAgc3RhdGljIGNvbnN0IF9ERVRBQ0hFRCA9IDM7CgogIC8vIFVzZSBIYXNoTWFwLCBhcyB3ZSBkb24ndCBuZWVkIHRvIGtlZXAgb3JkZXIuCiAgc3RhdGljIE1hcDxpbnQsIF9IdHRwQ29ubmVjdGlvbj4gX2Nvbm5lY3Rpb25zID0KICAgICAgbmV3IEhhc2hNYXA8aW50LCBfSHR0cENvbm5lY3Rpb24+KCk7CgogIGZpbmFsIC8qX1NlcnZlclNvY2tldCovIF9zb2NrZXQ7CiAgZmluYWwgX0h0dHBTZXJ2ZXIgX2h0dHBTZXJ2ZXI7CiAgZmluYWwgX0h0dHBQYXJzZXIgX2h0dHBQYXJzZXI7CiAgaW50IF9zdGF0ZSA9IF9JRExFOwogIFN0cmVhbVN1YnNjcmlwdGlvbiBfc3Vic2NyaXB0aW9uOwogIGJvb2wgX2lkbGVNYXJrID0gZmFsc2U7CiAgRnV0dXJlIF9zdHJlYW1GdXR1cmU7CgogIF9IdHRwQ29ubmVjdGlvbih0aGlzLl9zb2NrZXQsIHRoaXMuX2h0dHBTZXJ2ZXIpCiAgICAgIDogX2h0dHBQYXJzZXIgPSBuZXcgX0h0dHBQYXJzZXIucmVxdWVzdFBhcnNlcigpIHsKICAgIF9jb25uZWN0aW9uc1tfc2VydmljZUlkXSA9IHRoaXM7CiAgICBfaHR0cFBhcnNlci5saXN0ZW5Ub1N0cmVhbShfc29ja2V0KTsKICAgIF9zdWJzY3JpcHRpb24gPSBfaHR0cFBhcnNlci5saXN0ZW4oKGluY29taW5nKSB7CiAgICAgIF9odHRwU2VydmVyLl9tYXJrQWN0aXZlKHRoaXMpOwogICAgICAvLyBJZiB0aGUgaW5jb21pbmcgd2FzIGNsb3NlZCwgY2xvc2UgdGhlIGNvbm5lY3Rpb24uCiAgICAgIGluY29taW5nLmRhdGFEb25lLnRoZW4oKGNsb3NpbmcpIHsKICAgICAgICBpZiAoY2xvc2luZykgZGVzdHJveSgpOwogICAgICB9KTsKICAgICAgLy8gT25seSBoYW5kbGUgb25lIGluY29taW5nIHJlcXVlc3QgYXQgdGhlIHRpbWUuIEtlZXAgdGhlCiAgICAgIC8vIHN0cmVhbSBwYXVzZWQgdW50aWwgdGhlIHJlcXVlc3QgaGFzIGJlZW4gc2VuZC4KICAgICAgX3N1YnNjcmlwdGlvbi5wYXVzZSgpOwogICAgICBfc3RhdGUgPSBfQUNUSVZFOwogICAgICB2YXIgb3V0Z29pbmcgPSBuZXcgX0h0dHBPdXRnb2luZyhfc29ja2V0KTsKICAgICAgdmFyIHJlc3BvbnNlID0gbmV3IF9IdHRwUmVzcG9uc2UoCiAgICAgICAgICBpbmNvbWluZy51cmksCiAgICAgICAgICBpbmNvbWluZy5oZWFkZXJzLnByb3RvY29sVmVyc2lvbiwKICAgICAgICAgIG91dGdvaW5nLAogICAgICAgICAgX2h0dHBTZXJ2ZXIuZGVmYXVsdFJlc3BvbnNlSGVhZGVycywKICAgICAgICAgIF9odHRwU2VydmVyLnNlcnZlckhlYWRlcik7CiAgICAgIHZhciByZXF1ZXN0ID0gbmV3IF9IdHRwUmVxdWVzdChyZXNwb25zZSwgaW5jb21pbmcsIF9odHRwU2VydmVyLCB0aGlzKTsKICAgICAgX3N0cmVhbUZ1dHVyZSA9IG91dGdvaW5nLmRvbmUudGhlbigoXykgewogICAgICAgIHJlc3BvbnNlLmRlYWRsaW5lID0gbnVsbDsKICAgICAgICBpZiAoX3N0YXRlID09IF9ERVRBQ0hFRCkgcmV0dXJuOwogICAgICAgIGlmIChyZXNwb25zZS5wZXJzaXN0ZW50Q29ubmVjdGlvbiAmJgogICAgICAgICAgICByZXF1ZXN0LnBlcnNpc3RlbnRDb25uZWN0aW9uICYmCiAgICAgICAgICAgIGluY29taW5nLmZ1bGxCb2R5UmVhZCAmJgogICAgICAgICAgICAhX2h0dHBQYXJzZXIudXBncmFkZSAmJgogICAgICAgICAgICAhX2h0dHBTZXJ2ZXIuY2xvc2VkKSB7CiAgICAgICAgICBfc3RhdGUgPSBfSURMRTsKICAgICAgICAgIF9pZGxlTWFyayA9IGZhbHNlOwogICAgICAgICAgX2h0dHBTZXJ2ZXIuX21hcmtJZGxlKHRoaXMpOwogICAgICAgICAgLy8gUmVzdW1lIHRoZSBzdWJzY3JpcHRpb24gZm9yIGluY29taW5nIHJlcXVlc3RzIGFzIHRoZQogICAgICAgICAgLy8gcmVxdWVzdCBpcyBub3cgcHJvY2Vzc2VkLgogICAgICAgICAgX3N1YnNjcmlwdGlvbi5yZXN1bWUoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gQ2xvc2Ugc29ja2V0LCBrZWVwLWFsaXZlIG5vdCB1c2VkIG9yIGJvZHkgc2VudCBiZWZvcmUKICAgICAgICAgIC8vIHJlY2VpdmVkIGRhdGEgd2FzIGhhbmRsZWQuCiAgICAgICAgICBkZXN0cm95KCk7CiAgICAgICAgfQogICAgICB9LCBvbkVycm9yOiAoXykgewogICAgICAgIGRlc3Ryb3koKTsKICAgICAgfSk7CiAgICAgIG91dGdvaW5nLmlnbm9yZUJvZHkgPSByZXF1ZXN0Lm1ldGhvZCA9PSAiSEVBRCI7CiAgICAgIHJlc3BvbnNlLl9odHRwUmVxdWVzdCA9IHJlcXVlc3Q7CiAgICAgIF9odHRwU2VydmVyLl9oYW5kbGVSZXF1ZXN0KHJlcXVlc3QpOwogICAgfSwgb25Eb25lOiAoKSB7CiAgICAgIGRlc3Ryb3koKTsKICAgIH0sIG9uRXJyb3I6IChlcnJvcikgewogICAgICAvLyBJZ25vcmUgZmFpbGVkIHJlcXVlc3RzIHRoYXQgd2FzIGNsb3NlZCBiZWZvcmUgaGVhZGVycyB3YXMgcmVjZWl2ZWQuCiAgICAgIGRlc3Ryb3koKTsKICAgIH0pOwogIH0KCiAgdm9pZCBtYXJrSWRsZSgpIHsKICAgIF9pZGxlTWFyayA9IHRydWU7CiAgfQoKICBib29sIGdldCBpc01hcmtlZElkbGUgPT4gX2lkbGVNYXJrOwoKICB2b2lkIGRlc3Ryb3koKSB7CiAgICBpZiAoX3N0YXRlID09IF9DTE9TSU5HIHx8IF9zdGF0ZSA9PSBfREVUQUNIRUQpIHJldHVybjsKICAgIF9zdGF0ZSA9IF9DTE9TSU5HOwogICAgX3NvY2tldC5kZXN0cm95KCk7CiAgICBfaHR0cFNlcnZlci5fY29ubmVjdGlvbkNsb3NlZCh0aGlzKTsKICAgIF9jb25uZWN0aW9ucy5yZW1vdmUoX3NlcnZpY2VJZCk7CiAgfQoKICBGdXR1cmU8U29ja2V0PiBkZXRhY2hTb2NrZXQoKSB7CiAgICBfc3RhdGUgPSBfREVUQUNIRUQ7CiAgICAvLyBSZW1vdmUgY29ubmVjdGlvbiBmcm9tIHNlcnZlci4KICAgIF9odHRwU2VydmVyLl9jb25uZWN0aW9uQ2xvc2VkKHRoaXMpOwoKICAgIF9IdHRwRGV0YWNoZWRJbmNvbWluZyBkZXRhY2hlZEluY29taW5nID0gX2h0dHBQYXJzZXIuZGV0YWNoSW5jb21pbmcoKTsKCiAgICByZXR1cm4gX3N0cmVhbUZ1dHVyZS50aGVuKChfKSB7CiAgICAgIF9jb25uZWN0aW9ucy5yZW1vdmUoX3NlcnZpY2VJZCk7CiAgICAgIHJldHVybiBuZXcgX0RldGFjaGVkU29ja2V0KF9zb2NrZXQsIGRldGFjaGVkSW5jb21pbmcpOwogICAgfSk7CiAgfQoKICBIdHRwQ29ubmVjdGlvbkluZm8gZ2V0IGNvbm5lY3Rpb25JbmZvID0+IF9IdHRwQ29ubmVjdGlvbkluZm8uY3JlYXRlKF9zb2NrZXQpOwoKICBib29sIGdldCBfaXNBY3RpdmUgPT4gX3N0YXRlID09IF9BQ1RJVkU7CiAgYm9vbCBnZXQgX2lzSWRsZSA9PiBfc3RhdGUgPT0gX0lETEU7CiAgYm9vbCBnZXQgX2lzQ2xvc2luZyA9PiBfc3RhdGUgPT0gX0NMT1NJTkc7CiAgYm9vbCBnZXQgX2lzRGV0YWNoZWQgPT4gX3N0YXRlID09IF9ERVRBQ0hFRDsKCiAgU3RyaW5nIGdldCBfc2VydmljZVR5cGVQYXRoID0+ICdpby9odHRwL3NlcnZlcmNvbm5lY3Rpb25zJzsKICBTdHJpbmcgZ2V0IF9zZXJ2aWNlVHlwZU5hbWUgPT4gJ0h0dHBTZXJ2ZXJDb25uZWN0aW9uJzsKCiAgTWFwIF90b0pTT04oYm9vbCByZWYpIHsKICAgIHZhciBuYW1lID0gIiR7X3NvY2tldC5hZGRyZXNzLmhvc3R9OiR7X3NvY2tldC5wb3J0fSA8LT4gIgogICAgICAgICIke19zb2NrZXQucmVtb3RlQWRkcmVzcy5ob3N0fToke19zb2NrZXQucmVtb3RlUG9ydH0iOwogICAgdmFyIHIgPSA8U3RyaW5nLCBkeW5hbWljPnsKICAgICAgJ2lkJzogX3NlcnZpY2VQYXRoLAogICAgICAndHlwZSc6IF9zZXJ2aWNlVHlwZShyZWYpLAogICAgICAnbmFtZSc6IG5hbWUsCiAgICAgICd1c2VyX25hbWUnOiBuYW1lLAogICAgfTsKICAgIGlmIChyZWYpIHsKICAgICAgcmV0dXJuIHI7CiAgICB9CiAgICByWydzZXJ2ZXInXSA9IF9odHRwU2VydmVyLl90b0pTT04odHJ1ZSk7CiAgICB0cnkgewogICAgICByWydzb2NrZXQnXSA9IF9zb2NrZXQuX3RvSlNPTih0cnVlKTsKICAgIH0gY2F0Y2ggKF8pIHsKICAgICAgclsnc29ja2V0J10gPSB7CiAgICAgICAgJ2lkJzogX3NlcnZpY2VQYXRoLAogICAgICAgICd0eXBlJzogJ0BTb2NrZXQnLAogICAgICAgICduYW1lJzogJ1VzZXJTb2NrZXQnLAogICAgICAgICd1c2VyX25hbWUnOiAnVXNlclNvY2tldCcsCiAgICAgIH07CiAgICB9CiAgICBzd2l0Y2ggKF9zdGF0ZSkgewogICAgICBjYXNlIF9BQ1RJVkU6CiAgICAgICAgclsnc3RhdGUnXSA9ICJBY3RpdmUiOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIF9JRExFOgogICAgICAgIHJbJ3N0YXRlJ10gPSAiSWRsZSI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgX0NMT1NJTkc6CiAgICAgICAgclsnc3RhdGUnXSA9ICJDbG9zaW5nIjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBfREVUQUNIRUQ6CiAgICAgICAgclsnc3RhdGUnXSA9ICJEZXRhY2hlZCI7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgclsnc3RhdGUnXSA9ICdVbmtub3duJzsKICAgICAgICBicmVhazsKICAgIH0KICAgIHJldHVybiByOwogIH0KfQoKLy8gSFRUUCBzZXJ2ZXIgd2FpdGluZyBmb3Igc29ja2V0IGNvbm5lY3Rpb25zLgpjbGFzcyBfSHR0cFNlcnZlciBleHRlbmRzIFN0cmVhbTxIdHRwUmVxdWVzdD4KICAgIHdpdGggX1NlcnZpY2VPYmplY3QKICAgIGltcGxlbWVudHMgSHR0cFNlcnZlciB7CiAgLy8gVXNlIGRlZmF1bHQgTWFwIHNvIHdlIGtlZXAgb3JkZXIuCiAgc3RhdGljIE1hcDxpbnQsIF9IdHRwU2VydmVyPiBfc2VydmVycyA9IG5ldyBNYXA8aW50LCBfSHR0cFNlcnZlcj4oKTsKCiAgU3RyaW5nIHNlcnZlckhlYWRlcjsKICBmaW5hbCBIdHRwSGVhZGVycyBkZWZhdWx0UmVzcG9uc2VIZWFkZXJzID0gX2luaXREZWZhdWx0UmVzcG9uc2VIZWFkZXJzKCk7CiAgYm9vbCBhdXRvQ29tcHJlc3MgPSBmYWxzZTsKCiAgRHVyYXRpb24gX2lkbGVUaW1lb3V0OwogIFRpbWVyIF9pZGxlVGltZXI7CgogIHN0YXRpYyBGdXR1cmU8SHR0cFNlcnZlcj4gYmluZCgKICAgICAgYWRkcmVzcywgaW50IHBvcnQsIGludCBiYWNrbG9nLCBib29sIHY2T25seSwgYm9vbCBzaGFyZWQpIHsKICAgIHJldHVybiBTZXJ2ZXJTb2NrZXQuYmluZChhZGRyZXNzLCBwb3J0LAogICAgICAgICAgICBiYWNrbG9nOiBiYWNrbG9nLCB2Nk9ubHk6IHY2T25seSwgc2hhcmVkOiBzaGFyZWQpCiAgICAgICAgLnRoZW48SHR0cFNlcnZlcj4oKHNvY2tldCkgewogICAgICByZXR1cm4gbmV3IF9IdHRwU2VydmVyLl8oc29ja2V0LCB0cnVlKTsKICAgIH0pOwogIH0KCiAgc3RhdGljIEZ1dHVyZTxIdHRwU2VydmVyPiBiaW5kU2VjdXJlKAogICAgICBhZGRyZXNzLAogICAgICBpbnQgcG9ydCwKICAgICAgU2VjdXJpdHlDb250ZXh0IGNvbnRleHQsCiAgICAgIGludCBiYWNrbG9nLAogICAgICBib29sIHY2T25seSwKICAgICAgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsCiAgICAgIGJvb2wgc2hhcmVkKSB7CiAgICByZXR1cm4gU2VjdXJlU2VydmVyU29ja2V0LmJpbmQoYWRkcmVzcywgcG9ydCwgY29udGV4dCwKICAgICAgICAgICAgYmFja2xvZzogYmFja2xvZywKICAgICAgICAgICAgdjZPbmx5OiB2Nk9ubHksCiAgICAgICAgICAgIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZTogcmVxdWVzdENsaWVudENlcnRpZmljYXRlLAogICAgICAgICAgICBzaGFyZWQ6IHNoYXJlZCkKICAgICAgICAudGhlbjxIdHRwU2VydmVyPigoc29ja2V0KSB7CiAgICAgIHJldHVybiBuZXcgX0h0dHBTZXJ2ZXIuXyhzb2NrZXQsIHRydWUpOwogICAgfSk7CiAgfQoKICBfSHR0cFNlcnZlci5fKHRoaXMuX3NlcnZlclNvY2tldCwgdGhpcy5fY2xvc2VTZXJ2ZXIpIHsKICAgIF9jb250cm9sbGVyID0KICAgICAgICBuZXcgU3RyZWFtQ29udHJvbGxlcjxIdHRwUmVxdWVzdD4oc3luYzogdHJ1ZSwgb25DYW5jZWw6IGNsb3NlKTsKICAgIGlkbGVUaW1lb3V0ID0gY29uc3QgRHVyYXRpb24oc2Vjb25kczogMTIwKTsKICAgIF9zZXJ2ZXJzW19zZXJ2aWNlSWRdID0gdGhpczsKICB9CgogIF9IdHRwU2VydmVyLmxpc3Rlbk9uKHRoaXMuX3NlcnZlclNvY2tldCkgOiBfY2xvc2VTZXJ2ZXIgPSBmYWxzZSB7CiAgICBfY29udHJvbGxlciA9CiAgICAgICAgbmV3IFN0cmVhbUNvbnRyb2xsZXI8SHR0cFJlcXVlc3Q+KHN5bmM6IHRydWUsIG9uQ2FuY2VsOiBjbG9zZSk7CiAgICBpZGxlVGltZW91dCA9IGNvbnN0IER1cmF0aW9uKHNlY29uZHM6IDEyMCk7CiAgICBfc2VydmVyc1tfc2VydmljZUlkXSA9IHRoaXM7CiAgfQoKICBzdGF0aWMgSHR0cEhlYWRlcnMgX2luaXREZWZhdWx0UmVzcG9uc2VIZWFkZXJzKCkgewogICAgdmFyIGRlZmF1bHRSZXNwb25zZUhlYWRlcnMgPSBuZXcgX0h0dHBIZWFkZXJzKCcxLjEnKTsKICAgIGRlZmF1bHRSZXNwb25zZUhlYWRlcnMuY29udGVudFR5cGUgPSBDb250ZW50VHlwZS50ZXh0OwogICAgZGVmYXVsdFJlc3BvbnNlSGVhZGVycy5zZXQoJ1gtRnJhbWUtT3B0aW9ucycsICdTQU1FT1JJR0lOJyk7CiAgICBkZWZhdWx0UmVzcG9uc2VIZWFkZXJzLnNldCgnWC1Db250ZW50LVR5cGUtT3B0aW9ucycsICdub3NuaWZmJyk7CiAgICBkZWZhdWx0UmVzcG9uc2VIZWFkZXJzLnNldCgnWC1YU1MtUHJvdGVjdGlvbicsICcxOyBtb2RlPWJsb2NrJyk7CiAgICByZXR1cm4gZGVmYXVsdFJlc3BvbnNlSGVhZGVyczsKICB9CgogIER1cmF0aW9uIGdldCBpZGxlVGltZW91dCA9PiBfaWRsZVRpbWVvdXQ7CgogIHZvaWQgc2V0IGlkbGVUaW1lb3V0KER1cmF0aW9uIGR1cmF0aW9uKSB7CiAgICBpZiAoX2lkbGVUaW1lciAhPSBudWxsKSB7CiAgICAgIF9pZGxlVGltZXIuY2FuY2VsKCk7CiAgICAgIF9pZGxlVGltZXIgPSBudWxsOwogICAgfQogICAgX2lkbGVUaW1lb3V0ID0gZHVyYXRpb247CiAgICBpZiAoX2lkbGVUaW1lb3V0ICE9IG51bGwpIHsKICAgICAgX2lkbGVUaW1lciA9IG5ldyBUaW1lci5wZXJpb2RpYyhfaWRsZVRpbWVvdXQsIChfKSB7CiAgICAgICAgZm9yICh2YXIgaWRsZSBpbiBfaWRsZUNvbm5lY3Rpb25zLnRvTGlzdCgpKSB7CiAgICAgICAgICBpZiAoaWRsZS5pc01hcmtlZElkbGUpIHsKICAgICAgICAgICAgaWRsZS5kZXN0cm95KCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZGxlLm1hcmtJZGxlKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICB9CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxIdHRwUmVxdWVzdD4gbGlzdGVuKHZvaWQgb25EYXRhKEh0dHBSZXF1ZXN0IGV2ZW50KSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIF9zZXJ2ZXJTb2NrZXQubGlzdGVuKChTb2NrZXQgc29ja2V0KSB7CiAgICAgIHNvY2tldC5zZXRPcHRpb24oU29ja2V0T3B0aW9uLnRjcE5vRGVsYXksIHRydWUpOwogICAgICAvLyBBY2NlcHQgdGhlIGNsaWVudCBjb25uZWN0aW9uLgogICAgICBfSHR0cENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IG5ldyBfSHR0cENvbm5lY3Rpb24oc29ja2V0LCB0aGlzKTsKICAgICAgX2lkbGVDb25uZWN0aW9ucy5hZGQoY29ubmVjdGlvbik7CiAgICB9LCBvbkVycm9yOiAoZXJyb3IsIHN0YWNrVHJhY2UpIHsKICAgICAgLy8gSWdub3JlIEhhbmRzaGFrZUV4Y2VwdGlvbnMgYXMgdGhleSBhcmUgYm91bmQgdG8gYSBzaW5nbGUgcmVxdWVzdCwKICAgICAgLy8gYW5kIGFyZSBub3QgZmF0YWwgZm9yIHRoZSBzZXJ2ZXIuCiAgICAgIGlmIChlcnJvciBpcyEgSGFuZHNoYWtlRXhjZXB0aW9uKSB7CiAgICAgICAgX2NvbnRyb2xsZXIuYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICB9CiAgICB9LCBvbkRvbmU6IF9jb250cm9sbGVyLmNsb3NlKTsKICAgIHJldHVybiBfY29udHJvbGxlci5zdHJlYW0ubGlzdGVuKG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLCBvbkRvbmU6IG9uRG9uZSwgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgfQoKICBGdXR1cmUgY2xvc2Uoe2Jvb2wgZm9yY2U6IGZhbHNlfSkgewogICAgY2xvc2VkID0gdHJ1ZTsKICAgIEZ1dHVyZSByZXN1bHQ7CiAgICBpZiAoX3NlcnZlclNvY2tldCAhPSBudWxsICYmIF9jbG9zZVNlcnZlcikgewogICAgICByZXN1bHQgPSBfc2VydmVyU29ja2V0LmNsb3NlKCk7CiAgICB9IGVsc2UgewogICAgICByZXN1bHQgPSBuZXcgRnV0dXJlLnZhbHVlKCk7CiAgICB9CiAgICBpZGxlVGltZW91dCA9IG51bGw7CiAgICBpZiAoZm9yY2UpIHsKICAgICAgZm9yICh2YXIgYyBpbiBfYWN0aXZlQ29ubmVjdGlvbnMudG9MaXN0KCkpIHsKICAgICAgICBjLmRlc3Ryb3koKTsKICAgICAgfQogICAgICBhc3NlcnQoX2FjdGl2ZUNvbm5lY3Rpb25zLmlzRW1wdHkpOwogICAgfQogICAgZm9yICh2YXIgYyBpbiBfaWRsZUNvbm5lY3Rpb25zLnRvTGlzdCgpKSB7CiAgICAgIGMuZGVzdHJveSgpOwogICAgfQogICAgX21heWJlUGVyZm9ybUNsZWFudXAoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIF9tYXliZVBlcmZvcm1DbGVhbnVwKCkgewogICAgaWYgKGNsb3NlZCAmJgogICAgICAgIF9pZGxlQ29ubmVjdGlvbnMuaXNFbXB0eSAmJgogICAgICAgIF9hY3RpdmVDb25uZWN0aW9ucy5pc0VtcHR5ICYmCiAgICAgICAgX3Nlc3Npb25NYW5hZ2VySW5zdGFuY2UgIT0gbnVsbCkgewogICAgICBfc2Vzc2lvbk1hbmFnZXJJbnN0YW5jZS5jbG9zZSgpOwogICAgICBfc2Vzc2lvbk1hbmFnZXJJbnN0YW5jZSA9IG51bGw7CiAgICAgIF9zZXJ2ZXJzLnJlbW92ZShfc2VydmljZUlkKTsKICAgIH0KICB9CgogIGludCBnZXQgcG9ydCB7CiAgICBpZiAoY2xvc2VkKSB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSHR0cFNlcnZlciBpcyBub3QgYm91bmQgdG8gYSBzb2NrZXQiKTsKICAgIHJldHVybiBfc2VydmVyU29ja2V0LnBvcnQ7CiAgfQoKICBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFkZHJlc3MgewogICAgaWYgKGNsb3NlZCkgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkh0dHBTZXJ2ZXIgaXMgbm90IGJvdW5kIHRvIGEgc29ja2V0Iik7CiAgICByZXR1cm4gX3NlcnZlclNvY2tldC5hZGRyZXNzOwogIH0KCiAgc2V0IHNlc3Npb25UaW1lb3V0KGludCB0aW1lb3V0KSB7CiAgICBfc2Vzc2lvbk1hbmFnZXIuc2Vzc2lvblRpbWVvdXQgPSB0aW1lb3V0OwogIH0KCiAgdm9pZCBfaGFuZGxlUmVxdWVzdChfSHR0cFJlcXVlc3QgcmVxdWVzdCkgewogICAgaWYgKCFjbG9zZWQpIHsKICAgICAgX2NvbnRyb2xsZXIuYWRkKHJlcXVlc3QpOwogICAgfSBlbHNlIHsKICAgICAgcmVxdWVzdC5faHR0cENvbm5lY3Rpb24uZGVzdHJveSgpOwogICAgfQogIH0KCiAgdm9pZCBfY29ubmVjdGlvbkNsb3NlZChfSHR0cENvbm5lY3Rpb24gY29ubmVjdGlvbikgewogICAgLy8gUmVtb3ZlIGl0c2VsZiBmcm9tIGVpdGhlciBpZGxlIG9yIGFjdGl2ZSBjb25uZWN0aW9ucy4KICAgIGNvbm5lY3Rpb24udW5saW5rKCk7CiAgICBfbWF5YmVQZXJmb3JtQ2xlYW51cCgpOwogIH0KCiAgdm9pZCBfbWFya0lkbGUoX0h0dHBDb25uZWN0aW9uIGNvbm5lY3Rpb24pIHsKICAgIF9hY3RpdmVDb25uZWN0aW9ucy5yZW1vdmUoY29ubmVjdGlvbik7CiAgICBfaWRsZUNvbm5lY3Rpb25zLmFkZChjb25uZWN0aW9uKTsKICB9CgogIHZvaWQgX21hcmtBY3RpdmUoX0h0dHBDb25uZWN0aW9uIGNvbm5lY3Rpb24pIHsKICAgIF9pZGxlQ29ubmVjdGlvbnMucmVtb3ZlKGNvbm5lY3Rpb24pOwogICAgX2FjdGl2ZUNvbm5lY3Rpb25zLmFkZChjb25uZWN0aW9uKTsKICB9CgogIF9IdHRwU2Vzc2lvbk1hbmFnZXIgZ2V0IF9zZXNzaW9uTWFuYWdlciB7CiAgICAvLyBMYXp5IGluaXQuCiAgICBpZiAoX3Nlc3Npb25NYW5hZ2VySW5zdGFuY2UgPT0gbnVsbCkgewogICAgICBfc2Vzc2lvbk1hbmFnZXJJbnN0YW5jZSA9IG5ldyBfSHR0cFNlc3Npb25NYW5hZ2VyKCk7CiAgICB9CiAgICByZXR1cm4gX3Nlc3Npb25NYW5hZ2VySW5zdGFuY2U7CiAgfQoKICBIdHRwQ29ubmVjdGlvbnNJbmZvIGNvbm5lY3Rpb25zSW5mbygpIHsKICAgIEh0dHBDb25uZWN0aW9uc0luZm8gcmVzdWx0ID0gbmV3IEh0dHBDb25uZWN0aW9uc0luZm8oKTsKICAgIHJlc3VsdC50b3RhbCA9IF9hY3RpdmVDb25uZWN0aW9ucy5sZW5ndGggKyBfaWRsZUNvbm5lY3Rpb25zLmxlbmd0aDsKICAgIF9hY3RpdmVDb25uZWN0aW9ucy5mb3JFYWNoKChfSHR0cENvbm5lY3Rpb24gY29ubikgewogICAgICBpZiAoY29ubi5faXNBY3RpdmUpIHsKICAgICAgICByZXN1bHQuYWN0aXZlKys7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KGNvbm4uX2lzQ2xvc2luZyk7CiAgICAgICAgcmVzdWx0LmNsb3NpbmcrKzsKICAgICAgfQogICAgfSk7CiAgICBfaWRsZUNvbm5lY3Rpb25zLmZvckVhY2goKF9IdHRwQ29ubmVjdGlvbiBjb25uKSB7CiAgICAgIHJlc3VsdC5pZGxlKys7CiAgICAgIGFzc2VydChjb25uLl9pc0lkbGUpOwogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgU3RyaW5nIGdldCBfc2VydmljZVR5cGVQYXRoID0+ICdpby9odHRwL3NlcnZlcnMnOwogIFN0cmluZyBnZXQgX3NlcnZpY2VUeXBlTmFtZSA9PiAnSHR0cFNlcnZlcic7CgogIE1hcDxTdHJpbmcsIGR5bmFtaWM+IF90b0pTT04oYm9vbCByZWYpIHsKICAgIHZhciByID0gPFN0cmluZywgZHluYW1pYz57CiAgICAgICdpZCc6IF9zZXJ2aWNlUGF0aCwKICAgICAgJ3R5cGUnOiBfc2VydmljZVR5cGUocmVmKSwKICAgICAgJ25hbWUnOiAnJHthZGRyZXNzLmhvc3R9OiRwb3J0JywKICAgICAgJ3VzZXJfbmFtZSc6ICcke2FkZHJlc3MuaG9zdH06JHBvcnQnLAogICAgfTsKICAgIGlmIChyZWYpIHsKICAgICAgcmV0dXJuIHI7CiAgICB9CiAgICB0cnkgewogICAgICByWydzb2NrZXQnXSA9IF9zZXJ2ZXJTb2NrZXQuX3RvSlNPTih0cnVlKTsKICAgIH0gY2F0Y2ggKF8pIHsKICAgICAgclsnc29ja2V0J10gPSB7CiAgICAgICAgJ2lkJzogX3NlcnZpY2VQYXRoLAogICAgICAgICd0eXBlJzogJ0BTb2NrZXQnLAogICAgICAgICduYW1lJzogJ1VzZXJTb2NrZXQnLAogICAgICAgICd1c2VyX25hbWUnOiAnVXNlclNvY2tldCcsCiAgICAgIH07CiAgICB9CiAgICByWydwb3J0J10gPSBwb3J0OwogICAgclsnYWRkcmVzcyddID0gYWRkcmVzcy5ob3N0OwogICAgclsnYWN0aXZlJ10gPSBfYWN0aXZlQ29ubmVjdGlvbnMubWFwKChjKSA9PiBjLl90b0pTT04odHJ1ZSkpLnRvTGlzdCgpOwogICAgclsnaWRsZSddID0gX2lkbGVDb25uZWN0aW9ucy5tYXAoKGMpID0+IGMuX3RvSlNPTih0cnVlKSkudG9MaXN0KCk7CiAgICByWydjbG9zZWQnXSA9IGNsb3NlZDsKICAgIHJldHVybiByOwogIH0KCiAgX0h0dHBTZXNzaW9uTWFuYWdlciBfc2Vzc2lvbk1hbmFnZXJJbnN0YW5jZTsKCiAgLy8gSW5kaWNhdGVkIGlmIHRoZSBodHRwIHNlcnZlciBoYXMgYmVlbiBjbG9zZWQuCiAgYm9vbCBjbG9zZWQgPSBmYWxzZTsKCiAgLy8gVGhlIHNlcnZlciBsaXN0ZW4gc29ja2V0LiBVbnR5cGVkIGFzIGl0IGNhbiBiZSBib3RoIFNlcnZlclNvY2tldCBhbmQKICAvLyBTZWN1cmVTZXJ2ZXJTb2NrZXQuCiAgZmluYWwgZHluYW1pYyAvKlNlcnZlclNvY2tldHxTZWN1cmVTZXJ2ZXJTb2NrZXQqLyBfc2VydmVyU29ja2V0OwogIGZpbmFsIGJvb2wgX2Nsb3NlU2VydmVyOwoKICAvLyBTZXQgb2YgY3VycmVudGx5IGNvbm5lY3RlZCBjbGllbnRzLgogIGZpbmFsIExpbmtlZExpc3Q8X0h0dHBDb25uZWN0aW9uPiBfYWN0aXZlQ29ubmVjdGlvbnMgPQogICAgICBuZXcgTGlua2VkTGlzdDxfSHR0cENvbm5lY3Rpb24+KCk7CiAgZmluYWwgTGlua2VkTGlzdDxfSHR0cENvbm5lY3Rpb24+IF9pZGxlQ29ubmVjdGlvbnMgPQogICAgICBuZXcgTGlua2VkTGlzdDxfSHR0cENvbm5lY3Rpb24+KCk7CiAgU3RyZWFtQ29udHJvbGxlcjxIdHRwUmVxdWVzdD4gX2NvbnRyb2xsZXI7Cn0KCmNsYXNzIF9Qcm94eUNvbmZpZ3VyYXRpb24gewogIHN0YXRpYyBjb25zdCBTdHJpbmcgUFJPWFlfUFJFRklYID0gIlBST1hZICI7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBESVJFQ1RfUFJFRklYID0gIkRJUkVDVCI7CgogIF9Qcm94eUNvbmZpZ3VyYXRpb24oU3RyaW5nIGNvbmZpZ3VyYXRpb24pIDogcHJveGllcyA9IG5ldyBMaXN0PF9Qcm94eT4oKSB7CiAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIHByb3h5IGNvbmZpZ3VyYXRpb24gJGNvbmZpZ3VyYXRpb24iKTsKICAgIH0KICAgIExpc3Q8U3RyaW5nPiBsaXN0ID0gY29uZmlndXJhdGlvbi5zcGxpdCgiOyIpOwogICAgbGlzdC5mb3JFYWNoKChTdHJpbmcgcHJveHkpIHsKICAgICAgcHJveHkgPSBwcm94eS50cmltKCk7CiAgICAgIGlmICghcHJveHkuaXNFbXB0eSkgewogICAgICAgIGlmIChwcm94eS5zdGFydHNXaXRoKFBST1hZX1BSRUZJWCkpIHsKICAgICAgICAgIFN0cmluZyB1c2VybmFtZTsKICAgICAgICAgIFN0cmluZyBwYXNzd29yZDsKICAgICAgICAgIC8vIFNraXAgdGhlICJQUk9YWSAiIHByZWZpeC4KICAgICAgICAgIHByb3h5ID0gcHJveHkuc3Vic3RyaW5nKFBST1hZX1BSRUZJWC5sZW5ndGgpLnRyaW0oKTsKICAgICAgICAgIC8vIExvb2sgZm9yIHByb3h5IGF1dGhlbnRpY2F0aW9uLgogICAgICAgICAgaW50IGF0ID0gcHJveHkuaW5kZXhPZigiQCIpOwogICAgICAgICAgaWYgKGF0ICE9IC0xKSB7CiAgICAgICAgICAgIFN0cmluZyB1c2VyaW5mbyA9IHByb3h5LnN1YnN0cmluZygwLCBhdCkudHJpbSgpOwogICAgICAgICAgICBwcm94eSA9IHByb3h5LnN1YnN0cmluZyhhdCArIDEpLnRyaW0oKTsKICAgICAgICAgICAgaW50IGNvbG9uID0gdXNlcmluZm8uaW5kZXhPZigiOiIpOwogICAgICAgICAgICBpZiAoY29sb24gPT0gLTEgfHwgY29sb24gPT0gMCB8fCBjb2xvbiA9PSBwcm94eS5sZW5ndGggLSAxKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICJJbnZhbGlkIHByb3h5IGNvbmZpZ3VyYXRpb24gJGNvbmZpZ3VyYXRpb24iKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB1c2VybmFtZSA9IHVzZXJpbmZvLnN1YnN0cmluZygwLCBjb2xvbikudHJpbSgpOwogICAgICAgICAgICBwYXNzd29yZCA9IHVzZXJpbmZvLnN1YnN0cmluZyhjb2xvbiArIDEpLnRyaW0oKTsKICAgICAgICAgIH0KICAgICAgICAgIC8vIExvb2sgZm9yIHByb3h5IGhvc3QgYW5kIHBvcnQuCiAgICAgICAgICBpbnQgY29sb24gPSBwcm94eS5sYXN0SW5kZXhPZigiOiIpOwogICAgICAgICAgaWYgKGNvbG9uID09IC0xIHx8IGNvbG9uID09IDAgfHwgY29sb24gPT0gcHJveHkubGVuZ3RoIC0gMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICJJbnZhbGlkIHByb3h5IGNvbmZpZ3VyYXRpb24gJGNvbmZpZ3VyYXRpb24iKTsKICAgICAgICAgIH0KICAgICAgICAgIFN0cmluZyBob3N0ID0gcHJveHkuc3Vic3RyaW5nKDAsIGNvbG9uKS50cmltKCk7CiAgICAgICAgICBpZiAoaG9zdC5zdGFydHNXaXRoKCJbIikgJiYgaG9zdC5lbmRzV2l0aCgiXSIpKSB7CiAgICAgICAgICAgIGhvc3QgPSBob3N0LnN1YnN0cmluZygxLCBob3N0Lmxlbmd0aCAtIDEpOwogICAgICAgICAgfQogICAgICAgICAgU3RyaW5nIHBvcnRTdHJpbmcgPSBwcm94eS5zdWJzdHJpbmcoY29sb24gKyAxKS50cmltKCk7CiAgICAgICAgICBpbnQgcG9ydDsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHBvcnQgPSBpbnQucGFyc2UocG9ydFN0cmluZyk7CiAgICAgICAgICB9IG9uIEZvcm1hdEV4Y2VwdGlvbiBjYXRjaCAoZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICJJbnZhbGlkIHByb3h5IGNvbmZpZ3VyYXRpb24gJGNvbmZpZ3VyYXRpb24sICIKICAgICAgICAgICAgICAgICJpbnZhbGlkIHBvcnQgJyRwb3J0U3RyaW5nJyIpOwogICAgICAgICAgfQogICAgICAgICAgcHJveGllcy5hZGQobmV3IF9Qcm94eShob3N0LCBwb3J0LCB1c2VybmFtZSwgcGFzc3dvcmQpKTsKICAgICAgICB9IGVsc2UgaWYgKHByb3h5LnRyaW0oKSA9PSBESVJFQ1RfUFJFRklYKSB7CiAgICAgICAgICBwcm94aWVzLmFkZChuZXcgX1Byb3h5LmRpcmVjdCgpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkludmFsaWQgcHJveHkgY29uZmlndXJhdGlvbiAkY29uZmlndXJhdGlvbiIpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfQoKICBjb25zdCBfUHJveHlDb25maWd1cmF0aW9uLmRpcmVjdCgpIDogcHJveGllcyA9IGNvbnN0IFtjb25zdCBfUHJveHkuZGlyZWN0KCldOwoKICBmaW5hbCBMaXN0PF9Qcm94eT4gcHJveGllczsKfQoKY2xhc3MgX1Byb3h5IHsKICBmaW5hbCBTdHJpbmcgaG9zdDsKICBmaW5hbCBpbnQgcG9ydDsKICBmaW5hbCBTdHJpbmcgdXNlcm5hbWU7CiAgZmluYWwgU3RyaW5nIHBhc3N3b3JkOwogIGZpbmFsIGJvb2wgaXNEaXJlY3Q7CgogIGNvbnN0IF9Qcm94eSh0aGlzLmhvc3QsIHRoaXMucG9ydCwgdGhpcy51c2VybmFtZSwgdGhpcy5wYXNzd29yZCkKICAgICAgOiBpc0RpcmVjdCA9IGZhbHNlOwogIGNvbnN0IF9Qcm94eS5kaXJlY3QoKQogICAgICA6IGhvc3QgPSBudWxsLAogICAgICAgIHBvcnQgPSBudWxsLAogICAgICAgIHVzZXJuYW1lID0gbnVsbCwKICAgICAgICBwYXNzd29yZCA9IG51bGwsCiAgICAgICAgaXNEaXJlY3QgPSB0cnVlOwoKICBib29sIGdldCBpc0F1dGhlbnRpY2F0ZWQgPT4gdXNlcm5hbWUgIT0gbnVsbDsKfQoKY2xhc3MgX0h0dHBDb25uZWN0aW9uSW5mbyBpbXBsZW1lbnRzIEh0dHBDb25uZWN0aW9uSW5mbyB7CiAgSW50ZXJuZXRBZGRyZXNzIHJlbW90ZUFkZHJlc3M7CiAgaW50IHJlbW90ZVBvcnQ7CiAgaW50IGxvY2FsUG9ydDsKCiAgc3RhdGljIF9IdHRwQ29ubmVjdGlvbkluZm8gY3JlYXRlKFNvY2tldCBzb2NrZXQpIHsKICAgIGlmIChzb2NrZXQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICB0cnkgewogICAgICBfSHR0cENvbm5lY3Rpb25JbmZvIGluZm8gPSBuZXcgX0h0dHBDb25uZWN0aW9uSW5mbygpOwogICAgICByZXR1cm4gaW5mbwogICAgICAgIC4ucmVtb3RlQWRkcmVzcyA9IHNvY2tldC5yZW1vdGVBZGRyZXNzCiAgICAgICAgLi5yZW1vdGVQb3J0ID0gc29ja2V0LnJlbW90ZVBvcnQKICAgICAgICAuLmxvY2FsUG9ydCA9IHNvY2tldC5wb3J0OwogICAgfSBjYXRjaCAoZSkge30KICAgIHJldHVybiBudWxsOwogIH0KfQoKY2xhc3MgX0RldGFjaGVkU29ja2V0IGV4dGVuZHMgU3RyZWFtPFVpbnQ4TGlzdD4gaW1wbGVtZW50cyBTb2NrZXQgewogIGZpbmFsIFN0cmVhbTxVaW50OExpc3Q+IF9pbmNvbWluZzsKICBmaW5hbCBTb2NrZXQgX3NvY2tldDsKCiAgX0RldGFjaGVkU29ja2V0KHRoaXMuX3NvY2tldCwgdGhpcy5faW5jb21pbmcpOwoKICBTdHJlYW1TdWJzY3JpcHRpb248VWludDhMaXN0PiBsaXN0ZW4odm9pZCBvbkRhdGEoVWludDhMaXN0IGV2ZW50KSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIHJldHVybiBfaW5jb21pbmcubGlzdGVuKG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLCBvbkRvbmU6IG9uRG9uZSwgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgfQoKICBFbmNvZGluZyBnZXQgZW5jb2RpbmcgPT4gX3NvY2tldC5lbmNvZGluZzsKCiAgdm9pZCBzZXQgZW5jb2RpbmcoRW5jb2RpbmcgdmFsdWUpIHsKICAgIF9zb2NrZXQuZW5jb2RpbmcgPSB2YWx1ZTsKICB9CgogIHZvaWQgd3JpdGUoT2JqZWN0IG9iaikgewogICAgX3NvY2tldC53cml0ZShvYmopOwogIH0KCiAgdm9pZCB3cml0ZWxuKFtPYmplY3Qgb2JqID0gIiJdKSB7CiAgICBfc29ja2V0LndyaXRlbG4ob2JqKTsKICB9CgogIHZvaWQgd3JpdGVDaGFyQ29kZShpbnQgY2hhckNvZGUpIHsKICAgIF9zb2NrZXQud3JpdGVDaGFyQ29kZShjaGFyQ29kZSk7CiAgfQoKICB2b2lkIHdyaXRlQWxsKEl0ZXJhYmxlIG9iamVjdHMsIFtTdHJpbmcgc2VwYXJhdG9yID0gIiJdKSB7CiAgICBfc29ja2V0LndyaXRlQWxsKG9iamVjdHMsIHNlcGFyYXRvcik7CiAgfQoKICB2b2lkIGFkZChMaXN0PGludD4gYnl0ZXMpIHsKICAgIF9zb2NrZXQuYWRkKGJ5dGVzKTsKICB9CgogIHZvaWQgYWRkRXJyb3IoZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSA9PgogICAgICBfc29ja2V0LmFkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKCiAgRnV0dXJlIGFkZFN0cmVhbShTdHJlYW08TGlzdDxpbnQ+PiBzdHJlYW0pIHsKICAgIHJldHVybiBfc29ja2V0LmFkZFN0cmVhbShzdHJlYW0pOwogIH0KCiAgdm9pZCBkZXN0cm95KCkgewogICAgX3NvY2tldC5kZXN0cm95KCk7CiAgfQoKICBGdXR1cmUgZmx1c2goKSA9PiBfc29ja2V0LmZsdXNoKCk7CgogIEZ1dHVyZSBjbG9zZSgpID0+IF9zb2NrZXQuY2xvc2UoKTsKCiAgRnV0dXJlIGdldCBkb25lID0+IF9zb2NrZXQuZG9uZTsKCiAgaW50IGdldCBwb3J0ID0+IF9zb2NrZXQucG9ydDsKCiAgSW50ZXJuZXRBZGRyZXNzIGdldCBhZGRyZXNzID0+IF9zb2NrZXQuYWRkcmVzczsKCiAgSW50ZXJuZXRBZGRyZXNzIGdldCByZW1vdGVBZGRyZXNzID0+IF9zb2NrZXQucmVtb3RlQWRkcmVzczsKCiAgaW50IGdldCByZW1vdGVQb3J0ID0+IF9zb2NrZXQucmVtb3RlUG9ydDsKCiAgYm9vbCBzZXRPcHRpb24oU29ja2V0T3B0aW9uIG9wdGlvbiwgYm9vbCBlbmFibGVkKSB7CiAgICByZXR1cm4gX3NvY2tldC5zZXRPcHRpb24ob3B0aW9uLCBlbmFibGVkKTsKICB9CgogIFVpbnQ4TGlzdCBnZXRSYXdPcHRpb24oUmF3U29ja2V0T3B0aW9uIG9wdGlvbikgewogICAgcmV0dXJuIF9zb2NrZXQuZ2V0UmF3T3B0aW9uKG9wdGlvbik7CiAgfQoKICB2b2lkIHNldFJhd09wdGlvbihSYXdTb2NrZXRPcHRpb24gb3B0aW9uKSB7CiAgICBfc29ja2V0LnNldFJhd09wdGlvbihvcHRpb24pOwogIH0KCiAgTWFwIF90b0pTT04oYm9vbCByZWYpIHsKICAgIHJldHVybiAoX3NvY2tldCBhcyBkeW5hbWljKS5fdG9KU09OKHJlZik7CiAgfQp9CgpjbGFzcyBfQXV0aGVudGljYXRpb25TY2hlbWUgewogIGZpbmFsIGludCBfc2NoZW1lOwoKICBzdGF0aWMgY29uc3QgVU5LTk9XTiA9IGNvbnN0IF9BdXRoZW50aWNhdGlvblNjaGVtZSgtMSk7CiAgc3RhdGljIGNvbnN0IEJBU0lDID0gY29uc3QgX0F1dGhlbnRpY2F0aW9uU2NoZW1lKDApOwogIHN0YXRpYyBjb25zdCBESUdFU1QgPSBjb25zdCBfQXV0aGVudGljYXRpb25TY2hlbWUoMSk7CgogIGNvbnN0IF9BdXRoZW50aWNhdGlvblNjaGVtZSh0aGlzLl9zY2hlbWUpOwoKICBmYWN0b3J5IF9BdXRoZW50aWNhdGlvblNjaGVtZS5mcm9tU3RyaW5nKFN0cmluZyBzY2hlbWUpIHsKICAgIGlmIChzY2hlbWUudG9Mb3dlckNhc2UoKSA9PSAiYmFzaWMiKSByZXR1cm4gQkFTSUM7CiAgICBpZiAoc2NoZW1lLnRvTG93ZXJDYXNlKCkgPT0gImRpZ2VzdCIpIHJldHVybiBESUdFU1Q7CiAgICByZXR1cm4gVU5LTk9XTjsKICB9CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGlmICh0aGlzID09IEJBU0lDKSByZXR1cm4gIkJhc2ljIjsKICAgIGlmICh0aGlzID09IERJR0VTVCkgcmV0dXJuICJEaWdlc3QiOwogICAgcmV0dXJuICJVbmtub3duIjsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9DcmVkZW50aWFscyB7CiAgX0h0dHBDbGllbnRDcmVkZW50aWFscyBjcmVkZW50aWFsczsKICBTdHJpbmcgcmVhbG07CiAgYm9vbCB1c2VkID0gZmFsc2U7CgogIC8vIERpZ2VzdCBzcGVjaWZpYyBmaWVsZHMuCiAgU3RyaW5nIGhhMTsKICBTdHJpbmcgbm9uY2U7CiAgU3RyaW5nIGFsZ29yaXRobTsKICBTdHJpbmcgcW9wOwogIGludCBub25jZUNvdW50OwoKICBfQ3JlZGVudGlhbHModGhpcy5jcmVkZW50aWFscywgdGhpcy5yZWFsbSkgewogICAgaWYgKGNyZWRlbnRpYWxzLnNjaGVtZSA9PSBfQXV0aGVudGljYXRpb25TY2hlbWUuRElHRVNUKSB7CiAgICAgIC8vIENhbGN1bGF0ZSB0aGUgSChBMSkgdmFsdWUgb25jZS4gVGhlcmUgaXMgbm8gbWVudGlvbmluZyBvZgogICAgICAvLyB1c2VybmFtZS9wYXNzd29yZCBlbmNvZGluZyBpbiBSRkMgMjYxNy4gSG93ZXZlciB0aGVyZSBpcyBhbgogICAgICAvLyBvcGVuIGRyYWZ0IGZvciBhZGRpbmcgYW4gYWRkaXRpb25hbCBhY2NlcHQtY2hhcnNldCBwYXJhbWV0ZXIgdG8KICAgICAgLy8gdGhlIFdXVy1BdXRoZW50aWNhdGUgYW5kIFByb3h5LUF1dGhlbnRpY2F0ZSBoZWFkZXJzLCBzZWUKICAgICAgLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtcmVzY2hrZS1iYXNpY2F1dGgtZW5jLTA2LiBGb3IKICAgICAgLy8gbm93IGFsd2F5cyB1c2UgVVRGLTggZW5jb2RpbmcuCiAgICAgIF9IdHRwQ2xpZW50RGlnZXN0Q3JlZGVudGlhbHMgY3JlZHMgPSBjcmVkZW50aWFsczsKICAgICAgdmFyIGhhc2hlciA9IG5ldyBfTUQ1KCkKICAgICAgICAuLmFkZCh1dGY4LmVuY29kZShjcmVkcy51c2VybmFtZSkpCiAgICAgICAgLi5hZGQoW19DaGFyQ29kZS5DT0xPTl0pCiAgICAgICAgLi5hZGQocmVhbG0uY29kZVVuaXRzKQogICAgICAgIC4uYWRkKFtfQ2hhckNvZGUuQ09MT05dKQogICAgICAgIC4uYWRkKHV0ZjguZW5jb2RlKGNyZWRzLnBhc3N3b3JkKSk7CiAgICAgIGhhMSA9IF9DcnlwdG9VdGlscy5ieXRlc1RvSGV4KGhhc2hlci5jbG9zZSgpKTsKICAgIH0KICB9CgogIF9BdXRoZW50aWNhdGlvblNjaGVtZSBnZXQgc2NoZW1lID0+IGNyZWRlbnRpYWxzLnNjaGVtZTsKCiAgdm9pZCBhdXRob3JpemUoSHR0cENsaWVudFJlcXVlc3QgcmVxdWVzdCk7Cn0KCmNsYXNzIF9TaXRlQ3JlZGVudGlhbHMgZXh0ZW5kcyBfQ3JlZGVudGlhbHMgewogIFVyaSB1cmk7CgogIF9TaXRlQ3JlZGVudGlhbHModGhpcy51cmksIHJlYWxtLCBfSHR0cENsaWVudENyZWRlbnRpYWxzIGNyZWRzKQogICAgICA6IHN1cGVyKGNyZWRzLCByZWFsbSk7CgogIGJvb2wgYXBwbGllcyhVcmkgdXJpLCBfQXV0aGVudGljYXRpb25TY2hlbWUgc2NoZW1lKSB7CiAgICBpZiAoc2NoZW1lICE9IG51bGwgJiYgY3JlZGVudGlhbHMuc2NoZW1lICE9IHNjaGVtZSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKHVyaS5ob3N0ICE9IHRoaXMudXJpLmhvc3QpIHJldHVybiBmYWxzZTsKICAgIGludCB0aGlzUG9ydCA9CiAgICAgICAgdGhpcy51cmkucG9ydCA9PSAwID8gSHR0cENsaWVudC5kZWZhdWx0SHR0cFBvcnQgOiB0aGlzLnVyaS5wb3J0OwogICAgaW50IG90aGVyUG9ydCA9IHVyaS5wb3J0ID09IDAgPyBIdHRwQ2xpZW50LmRlZmF1bHRIdHRwUG9ydCA6IHVyaS5wb3J0OwogICAgaWYgKG90aGVyUG9ydCAhPSB0aGlzUG9ydCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHVyaS5wYXRoLnN0YXJ0c1dpdGgodGhpcy51cmkucGF0aCk7CiAgfQoKICB2b2lkIGF1dGhvcml6ZShIdHRwQ2xpZW50UmVxdWVzdCByZXF1ZXN0KSB7CiAgICAvLyBEaWdlc3QgY3JlZGVudGlhbHMgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBhIG5vbmNlIGZyb20gdGhlCiAgICAvLyBzZXJ2ZXIuCiAgICBpZiAoY3JlZGVudGlhbHMuc2NoZW1lID09IF9BdXRoZW50aWNhdGlvblNjaGVtZS5ESUdFU1QgJiYgbm9uY2UgPT0gbnVsbCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBjcmVkZW50aWFscy5hdXRob3JpemUodGhpcywgcmVxdWVzdCk7CiAgICB1c2VkID0gdHJ1ZTsKICB9Cn0KCmNsYXNzIF9Qcm94eUNyZWRlbnRpYWxzIGV4dGVuZHMgX0NyZWRlbnRpYWxzIHsKICBTdHJpbmcgaG9zdDsKICBpbnQgcG9ydDsKCiAgX1Byb3h5Q3JlZGVudGlhbHModGhpcy5ob3N0LCB0aGlzLnBvcnQsIHJlYWxtLCBfSHR0cENsaWVudENyZWRlbnRpYWxzIGNyZWRzKQogICAgICA6IHN1cGVyKGNyZWRzLCByZWFsbSk7CgogIGJvb2wgYXBwbGllcyhfUHJveHkgcHJveHksIF9BdXRoZW50aWNhdGlvblNjaGVtZSBzY2hlbWUpIHsKICAgIGlmIChzY2hlbWUgIT0gbnVsbCAmJiBjcmVkZW50aWFscy5zY2hlbWUgIT0gc2NoZW1lKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gcHJveHkuaG9zdCA9PSBob3N0ICYmIHByb3h5LnBvcnQgPT0gcG9ydDsKICB9CgogIHZvaWQgYXV0aG9yaXplKEh0dHBDbGllbnRSZXF1ZXN0IHJlcXVlc3QpIHsKICAgIC8vIERpZ2VzdCBjcmVkZW50aWFscyBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IGEgbm9uY2UgZnJvbSB0aGUKICAgIC8vIHNlcnZlci4KICAgIGlmIChjcmVkZW50aWFscy5zY2hlbWUgPT0gX0F1dGhlbnRpY2F0aW9uU2NoZW1lLkRJR0VTVCAmJiBub25jZSA9PSBudWxsKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNyZWRlbnRpYWxzLmF1dGhvcml6ZVByb3h5KHRoaXMsIHJlcXVlc3QpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgX0h0dHBDbGllbnRDcmVkZW50aWFscyBpbXBsZW1lbnRzIEh0dHBDbGllbnRDcmVkZW50aWFscyB7CiAgX0F1dGhlbnRpY2F0aW9uU2NoZW1lIGdldCBzY2hlbWU7CiAgdm9pZCBhdXRob3JpemUoX0NyZWRlbnRpYWxzIGNyZWRlbnRpYWxzLCBIdHRwQ2xpZW50UmVxdWVzdCByZXF1ZXN0KTsKICB2b2lkIGF1dGhvcml6ZVByb3h5KF9Qcm94eUNyZWRlbnRpYWxzIGNyZWRlbnRpYWxzLCBIdHRwQ2xpZW50UmVxdWVzdCByZXF1ZXN0KTsKfQoKY2xhc3MgX0h0dHBDbGllbnRCYXNpY0NyZWRlbnRpYWxzIGV4dGVuZHMgX0h0dHBDbGllbnRDcmVkZW50aWFscwogICAgaW1wbGVtZW50cyBIdHRwQ2xpZW50QmFzaWNDcmVkZW50aWFscyB7CiAgU3RyaW5nIHVzZXJuYW1lOwogIFN0cmluZyBwYXNzd29yZDsKCiAgX0h0dHBDbGllbnRCYXNpY0NyZWRlbnRpYWxzKHRoaXMudXNlcm5hbWUsIHRoaXMucGFzc3dvcmQpOwoKICBfQXV0aGVudGljYXRpb25TY2hlbWUgZ2V0IHNjaGVtZSA9PiBfQXV0aGVudGljYXRpb25TY2hlbWUuQkFTSUM7CgogIFN0cmluZyBhdXRob3JpemF0aW9uKCkgewogICAgLy8gVGhlcmUgaXMgbm8gbWVudGlvbmluZyBvZiB1c2VybmFtZS9wYXNzd29yZCBlbmNvZGluZyBpbiBSRkMKICAgIC8vIDI2MTcuIEhvd2V2ZXIgdGhlcmUgaXMgYW4gb3BlbiBkcmFmdCBmb3IgYWRkaW5nIGFuIGFkZGl0aW9uYWwKICAgIC8vIGFjY2VwdC1jaGFyc2V0IHBhcmFtZXRlciB0byB0aGUgV1dXLUF1dGhlbnRpY2F0ZSBhbmQKICAgIC8vIFByb3h5LUF1dGhlbnRpY2F0ZSBoZWFkZXJzLCBzZWUKICAgIC8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LXJlc2Noa2UtYmFzaWNhdXRoLWVuYy0wNi4gRm9yCiAgICAvLyBub3cgYWx3YXlzIHVzZSBVVEYtOCBlbmNvZGluZy4KICAgIFN0cmluZyBhdXRoID0KICAgICAgICBfQ3J5cHRvVXRpbHMuYnl0ZXNUb0Jhc2U2NCh1dGY4LmVuY29kZSgiJHVzZXJuYW1lOiRwYXNzd29yZCIpKTsKICAgIHJldHVybiAiQmFzaWMgJGF1dGgiOwogIH0KCiAgdm9pZCBhdXRob3JpemUoX0NyZWRlbnRpYWxzIF8sIEh0dHBDbGllbnRSZXF1ZXN0IHJlcXVlc3QpIHsKICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSHR0cEhlYWRlcnMuYXV0aG9yaXphdGlvbkhlYWRlciwgYXV0aG9yaXphdGlvbigpKTsKICB9CgogIHZvaWQgYXV0aG9yaXplUHJveHkoX1Byb3h5Q3JlZGVudGlhbHMgXywgSHR0cENsaWVudFJlcXVlc3QgcmVxdWVzdCkgewogICAgcmVxdWVzdC5oZWFkZXJzLnNldChIdHRwSGVhZGVycy5wcm94eUF1dGhvcml6YXRpb25IZWFkZXIsIGF1dGhvcml6YXRpb24oKSk7CiAgfQp9CgpjbGFzcyBfSHR0cENsaWVudERpZ2VzdENyZWRlbnRpYWxzIGV4dGVuZHMgX0h0dHBDbGllbnRDcmVkZW50aWFscwogICAgaW1wbGVtZW50cyBIdHRwQ2xpZW50RGlnZXN0Q3JlZGVudGlhbHMgewogIFN0cmluZyB1c2VybmFtZTsKICBTdHJpbmcgcGFzc3dvcmQ7CgogIF9IdHRwQ2xpZW50RGlnZXN0Q3JlZGVudGlhbHModGhpcy51c2VybmFtZSwgdGhpcy5wYXNzd29yZCk7CgogIF9BdXRoZW50aWNhdGlvblNjaGVtZSBnZXQgc2NoZW1lID0+IF9BdXRoZW50aWNhdGlvblNjaGVtZS5ESUdFU1Q7CgogIFN0cmluZyBhdXRob3JpemF0aW9uKF9DcmVkZW50aWFscyBjcmVkZW50aWFscywgX0h0dHBDbGllbnRSZXF1ZXN0IHJlcXVlc3QpIHsKICAgIFN0cmluZyByZXF1ZXN0VXJpID0gcmVxdWVzdC5fcmVxdWVzdFVyaSgpOwogICAgX01ENSBoYXNoZXIgPSBuZXcgX01ENSgpCiAgICAgIC4uYWRkKHJlcXVlc3QubWV0aG9kLmNvZGVVbml0cykKICAgICAgLi5hZGQoW19DaGFyQ29kZS5DT0xPTl0pCiAgICAgIC4uYWRkKHJlcXVlc3RVcmkuY29kZVVuaXRzKTsKICAgIHZhciBoYTIgPSBfQ3J5cHRvVXRpbHMuYnl0ZXNUb0hleChoYXNoZXIuY2xvc2UoKSk7CgogICAgU3RyaW5nIHFvcDsKICAgIFN0cmluZyBjbm9uY2U7CiAgICBTdHJpbmcgbmM7CiAgICB2YXIgeDsKICAgIGhhc2hlciA9IG5ldyBfTUQ1KCkuLmFkZChjcmVkZW50aWFscy5oYTEuY29kZVVuaXRzKS4uYWRkKFtfQ2hhckNvZGUuQ09MT05dKTsKICAgIGlmIChjcmVkZW50aWFscy5xb3AgPT0gImF1dGgiKSB7CiAgICAgIHFvcCA9IGNyZWRlbnRpYWxzLnFvcDsKICAgICAgY25vbmNlID0gX0NyeXB0b1V0aWxzLmJ5dGVzVG9IZXgoX0NyeXB0b1V0aWxzLmdldFJhbmRvbUJ5dGVzKDQpKTsKICAgICAgKytjcmVkZW50aWFscy5ub25jZUNvdW50OwogICAgICBuYyA9IGNyZWRlbnRpYWxzLm5vbmNlQ291bnQudG9SYWRpeFN0cmluZygxNik7CiAgICAgIG5jID0gIjAwMDAwMDAwIi5zdWJzdHJpbmcoMCwgOCAtIG5jLmxlbmd0aCArIDEpICsgbmM7CiAgICAgIGhhc2hlcgogICAgICAgIC4uYWRkKGNyZWRlbnRpYWxzLm5vbmNlLmNvZGVVbml0cykKICAgICAgICAuLmFkZChbX0NoYXJDb2RlLkNPTE9OXSkKICAgICAgICAuLmFkZChuYy5jb2RlVW5pdHMpCiAgICAgICAgLi5hZGQoW19DaGFyQ29kZS5DT0xPTl0pCiAgICAgICAgLi5hZGQoY25vbmNlLmNvZGVVbml0cykKICAgICAgICAuLmFkZChbX0NoYXJDb2RlLkNPTE9OXSkKICAgICAgICAuLmFkZChjcmVkZW50aWFscy5xb3AuY29kZVVuaXRzKQogICAgICAgIC4uYWRkKFtfQ2hhckNvZGUuQ09MT05dKQogICAgICAgIC4uYWRkKGhhMi5jb2RlVW5pdHMpOwogICAgfSBlbHNlIHsKICAgICAgaGFzaGVyCiAgICAgICAgLi5hZGQoY3JlZGVudGlhbHMubm9uY2UuY29kZVVuaXRzKQogICAgICAgIC4uYWRkKFtfQ2hhckNvZGUuQ09MT05dKQogICAgICAgIC4uYWRkKGhhMi5jb2RlVW5pdHMpOwogICAgfQogICAgdmFyIHJlc3BvbnNlID0gX0NyeXB0b1V0aWxzLmJ5dGVzVG9IZXgoaGFzaGVyLmNsb3NlKCkpOwoKICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCkKICAgICAgLi53cml0ZSgnRGlnZXN0ICcpCiAgICAgIC4ud3JpdGUoJ3VzZXJuYW1lPSIkdXNlcm5hbWUiJykKICAgICAgLi53cml0ZSgnLCByZWFsbT0iJHtjcmVkZW50aWFscy5yZWFsbX0iJykKICAgICAgLi53cml0ZSgnLCBub25jZT0iJHtjcmVkZW50aWFscy5ub25jZX0iJykKICAgICAgLi53cml0ZSgnLCB1cmk9IiRyZXF1ZXN0VXJpIicpCiAgICAgIC4ud3JpdGUoJywgYWxnb3JpdGhtPSIke2NyZWRlbnRpYWxzLmFsZ29yaXRobX0iJyk7CiAgICBpZiAocW9wID09ICJhdXRoIikgewogICAgICBidWZmZXIKICAgICAgICAuLndyaXRlKCcsIHFvcD0iJHFvcCInKQogICAgICAgIC4ud3JpdGUoJywgY25vbmNlPSIkY25vbmNlIicpCiAgICAgICAgLi53cml0ZSgnLCBuYz0iJG5jIicpOwogICAgfQogICAgYnVmZmVyLndyaXRlKCcsIHJlc3BvbnNlPSIkcmVzcG9uc2UiJyk7CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICB2b2lkIGF1dGhvcml6ZShfQ3JlZGVudGlhbHMgY3JlZGVudGlhbHMsIEh0dHBDbGllbnRSZXF1ZXN0IHJlcXVlc3QpIHsKICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoCiAgICAgICAgSHR0cEhlYWRlcnMuYXV0aG9yaXphdGlvbkhlYWRlciwgYXV0aG9yaXphdGlvbihjcmVkZW50aWFscywgcmVxdWVzdCkpOwogIH0KCiAgdm9pZCBhdXRob3JpemVQcm94eSgKICAgICAgX1Byb3h5Q3JlZGVudGlhbHMgY3JlZGVudGlhbHMsIEh0dHBDbGllbnRSZXF1ZXN0IHJlcXVlc3QpIHsKICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSHR0cEhlYWRlcnMucHJveHlBdXRob3JpemF0aW9uSGVhZGVyLAogICAgICAgIGF1dGhvcml6YXRpb24oY3JlZGVudGlhbHMsIHJlcXVlc3QpKTsKICB9Cn0KCmNsYXNzIF9SZWRpcmVjdEluZm8gaW1wbGVtZW50cyBSZWRpcmVjdEluZm8gewogIGZpbmFsIGludCBzdGF0dXNDb2RlOwogIGZpbmFsIFN0cmluZyBtZXRob2Q7CiAgZmluYWwgVXJpIGxvY2F0aW9uOwogIGNvbnN0IF9SZWRpcmVjdEluZm8odGhpcy5zdGF0dXNDb2RlLCB0aGlzLm1ldGhvZCwgdGhpcy5sb2NhdGlvbik7Cn0KClN0cmluZyBfZ2V0SHR0cFZlcnNpb24oKSB7CiAgdmFyIHZlcnNpb24gPSBQbGF0Zm9ybS52ZXJzaW9uOwogIC8vIE9ubHkgaW5jbHVkZSBtYWpvciBhbmQgbWlub3IgdmVyc2lvbiBudW1iZXJzLgogIGludCBpbmRleCA9IHZlcnNpb24uaW5kZXhPZignLicsIHZlcnNpb24uaW5kZXhPZignLicpICsgMSk7CiAgdmVyc2lvbiA9IHZlcnNpb24uc3Vic3RyaW5nKDAsIGluZGV4KTsKICByZXR1cm4gJ0RhcnQvJHZlcnNpb24gKGRhcnQ6aW8pJzsKfQqMpwBOTjwBFAEYATkgFxc6GAQBGQE+AR8BHwEiKh0EAgE1HCYBLgETFQEyKRk8AR4kIiolFwYoHjINLikIBhgEARslNUYWBiYdDwQBHUMRICAcDScGLDQZBAEaKUENEwQBGCkjOQQBHQEkAScBEREaBAEjEwkREREREhIEAgEsAS4BMB00HQEdARge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ciA9ICJzZXJ2ZXJfbm9fY29udGV4dF90YWtlb3ZlciI7CmNvbnN0IFN0cmluZyBfY2xpZW50TWF4V2luZG93Qml0cyA9ICJjbGllbnRfbWF4X3dpbmRvd19iaXRzIjsKY29uc3QgU3RyaW5nIF9zZXJ2ZXJNYXhXaW5kb3dCaXRzID0gInNlcnZlcl9tYXhfd2luZG93X2JpdHMiOwoKLy8gTWF0Y2hlcyBfV2ViU29ja2V0T3Bjb2RlLgpjbGFzcyBfV2ViU29ja2V0TWVzc2FnZVR5cGUgewogIHN0YXRpYyBjb25zdCBpbnQgTk9ORSA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBURVhUID0gMTsKICBzdGF0aWMgY29uc3QgaW50IEJJTkFSWSA9IDI7Cn0KCmNsYXNzIF9XZWJTb2NrZXRPcGNvZGUgewogIHN0YXRpYyBjb25zdCBpbnQgQ09OVElOVUFUSU9OID0gMDsKICBzdGF0aWMgY29uc3QgaW50IFRFWFQgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgQklOQVJZID0gMjsKICBzdGF0aWMgY29uc3QgaW50IFJFU0VSVkVEXzMgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgUkVTRVJWRURfNCA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBSRVNFUlZFRF81ID0gNTsKICBzdGF0aWMgY29uc3QgaW50IFJFU0VSVkVEXzYgPSA2OwogIHN0YXRpYyBjb25zdCBpbnQgUkVTRVJWRURfNyA9IDc7CiAgc3RhdGljIGNvbnN0IGludCBDTE9TRSA9IDg7CiAgc3RhdGljIGNvbnN0IGludCBQSU5HID0gOTsKICBzdGF0aWMgY29uc3QgaW50IFBPTkcgPSAxMDsKICBzdGF0aWMgY29uc3QgaW50IFJFU0VSVkVEX0IgPSAxMTsKICBzdGF0aWMgY29uc3QgaW50IFJFU0VSVkVEX0MgPSAxMjsKICBzdGF0aWMgY29uc3QgaW50IFJFU0VSVkVEX0QgPSAxMzsKICBzdGF0aWMgY29uc3QgaW50IFJFU0VSVkVEX0UgPSAxNDsKICBzdGF0aWMgY29uc3QgaW50IFJFU0VSVkVEX0YgPSAxNTsKfQoKY2xhc3MgX0VuY29kZWRTdHJpbmcgewogIGZpbmFsIExpc3Q8aW50PiBieXRlczsKICBfRW5jb2RlZFN0cmluZyh0aGlzLmJ5dGVzKTsKfQoKLyoqCiAqICBTdG9yZXMgdGhlIGhlYWRlciBhbmQgaW50ZWdlciB2YWx1ZSBkZXJpdmVkIGZyb20gbmVnb3RpYXRpb24gb2YKICogIGNsaWVudF9tYXhfd2luZG93X2JpdHMgYW5kIHNlcnZlcl9tYXhfd2luZG93X2JpdHMuIGhlYWRlclZhbHVlIHdpbGwgYmUKICogIHNldCBpbiB0aGUgV2Vic29ja2V0IHJlc3BvbnNlIGhlYWRlcnMuCiAqLwpjbGFzcyBfQ29tcHJlc3Npb25NYXhXaW5kb3dCaXRzIHsKICBTdHJpbmcgaGVhZGVyVmFsdWU7CiAgaW50IG1heFdpbmRvd0JpdHM7CiAgX0NvbXByZXNzaW9uTWF4V2luZG93Qml0cyhbdGhpcy5oZWFkZXJWYWx1ZSwgdGhpcy5tYXhXaW5kb3dCaXRzXSk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gaGVhZGVyVmFsdWU7Cn0KCi8qKgogKiBUaGUgd2ViIHNvY2tldCBwcm90b2NvbCB0cmFuc2Zvcm1lciBoYW5kbGVzIHRoZSBwcm90b2NvbCBieXRlIHN0cmVhbQogKiB3aGljaCBpcyBzdXBwbGllZCB0aHJvdWdoIHRoZSBgaGFuZGxlRGF0YWAuIEFzIHRoZSBwcm90b2NvbCBpcyBwcm9jZXNzZWQsCiAqIGl0J2xsIG91dHB1dCBmcmFtZSBkYXRhIGFzIGVpdGhlciBhIExpc3Q8aW50PiBvciBTdHJpbmcuCiAqCiAqIEltcG9ydGFudCBpbmZvcm1hdGlvbiBhYm91dCB1c2FnZTogQmUgc3VyZSB5b3UgdXNlIGNhbmNlbE9uRXJyb3IsIHNvIHRoZQogKiBzb2NrZXQgd2lsbCBiZSBjbG9zZWQgd2hlbiB0aGUgcHJvY2Vzc29yIGVuY291bnRlciBhbiBlcnJvci4gTm90IHVzaW5nIGl0CiAqIHdpbGwgbGVhZCB0byB1bmRlZmluZWQgYmVoYXZpb3VyLgogKi8KY2xhc3MgX1dlYlNvY2tldFByb3RvY29sVHJhbnNmb3JtZXIgZXh0ZW5kcyBTdHJlYW1UcmFuc2Zvcm1lckJhc2U8TGlzdDxpbnQ+LAogICAgICAgIGR5bmFtaWMgLypMaXN0PGludD58X1dlYlNvY2tldFBpbmd8X1dlYlNvY2tldFBvbmcqLyA+CiAgICBpbXBsZW1lbnRzIEV2ZW50U2luazxMaXN0PGludD4+IHsKICBzdGF0aWMgY29uc3QgaW50IFNUQVJUID0gMDsKICBzdGF0aWMgY29uc3QgaW50IExFTl9GSVJTVCA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBMRU5fUkVTVCA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBNQVNLID0gMzsKICBzdGF0aWMgY29uc3QgaW50IFBBWUxPQUQgPSA0OwogIHN0YXRpYyBjb25zdCBpbnQgQ0xPU0VEID0gNTsKICBzdGF0aWMgY29uc3QgaW50IEZBSUxVUkUgPSA2OwogIHN0YXRpYyBjb25zdCBpbnQgRklOID0gMHg4MDsKICBzdGF0aWMgY29uc3QgaW50IFJTVjEgPSAweDQwOwogIHN0YXRpYyBjb25zdCBpbnQgUlNWMiA9IDB4MjA7CiAgc3RhdGljIGNvbnN0IGludCBSU1YzID0gMHgxMDsKICBzdGF0aWMgY29uc3QgaW50IE9QQ09ERSA9IDB4RjsKCiAgaW50IF9zdGF0ZSA9IFNUQVJUOwogIGJvb2wgX2ZpbiA9IGZhbHNlOwogIGJvb2wgX2NvbXByZXNzZWQgPSBmYWxzZTsKICBpbnQgX29wY29kZSA9IC0xOwogIGludCBfbGVuID0gLTE7CiAgYm9vbCBfbWFza2VkID0gZmFsc2U7CiAgaW50IF9yZW1haW5pbmdMZW5CeXRlcyA9IC0xOwogIGludCBfcmVtYWluaW5nTWFza2luZ0tleUJ5dGVzID0gNDsKICBpbnQgX3JlbWFpbmluZ1BheWxvYWRCeXRlcyA9IC0xOwogIGludCBfdW5tYXNraW5nSW5kZXggPSAwOwogIGludCBfY3VycmVudE1lc3NhZ2VUeXBlID0gX1dlYlNvY2tldE1lc3NhZ2VUeXBlLk5PTkU7CiAgaW50IGNsb3NlQ29kZSA9IFdlYlNvY2tldFN0YXR1cy5OT19TVEFUVVNfUkVDRUlWRUQ7CiAgU3RyaW5nIGNsb3NlUmVhc29uID0gIiI7CgogIEV2ZW50U2luazxkeW5hbWljIC8qTGlzdDxpbnQ+fF9XZWJTb2NrZXRQaW5nfF9XZWJTb2NrZXRQb25nKi8gPiBfZXZlbnRTaW5rOwoKICBmaW5hbCBib29sIF9zZXJ2ZXJTaWRlOwogIGZpbmFsIExpc3QgX21hc2tpbmdCeXRlcyA9IG5ldyBMaXN0KDQpOwogIGZpbmFsIEJ5dGVzQnVpbGRlciBfcGF5bG9hZCA9IG5ldyBCeXRlc0J1aWxkZXIoY29weTogZmFsc2UpOwoKICBfV2ViU29ja2V0UGVyTWVzc2FnZURlZmxhdGUgX2RlZmxhdGU7CiAgX1dlYlNvY2tldFByb3RvY29sVHJhbnNmb3JtZXIoW3RoaXMuX3NlcnZlclNpZGUgPSBmYWxzZSwgdGhpcy5fZGVmbGF0ZV0pOwoKICBTdHJlYW08ZHluYW1pYyAvKkxpc3Q8aW50PnxfV2ViU29ja2V0UGluZ3xfV2ViU29ja2V0UG9uZyovID4gYmluZCgKICAgICAgU3RyZWFtPExpc3Q8aW50Pj4gc3RyZWFtKSB7CiAgICByZXR1cm4gbmV3IFN0cmVhbS5ldmVudFRyYW5zZm9ybWVkKHN0cmVhbSwgKEV2ZW50U2luayBldmVudFNpbmspIHsKICAgICAgaWYgKF9ldmVudFNpbmsgIT0gbnVsbCkgewogICAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJXZWJTb2NrZXQgdHJhbnNmb3JtZXIgYWxyZWFkeSB1c2VkLiIpOwogICAgICB9CiAgICAgIF9ldmVudFNpbmsgPSBldmVudFNpbms7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSk7CiAgfQoKICB2b2lkIGFkZEVycm9yKE9iamVjdCBlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIF9ldmVudFNpbmsuYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9ldmVudFNpbmsuY2xvc2UoKTsKICB9CgogIC8qKgogICAqIFByb2Nlc3MgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSB1bmRlcmx5aW5nIGNvbW11bmljYXRpb24gY2hhbm5lbC4KICAgKi8KICB2b2lkIGFkZChMaXN0PGludD4gYnl0ZXMpIHsKICAgIHZhciBidWZmZXIgPSBieXRlcyBpcyBVaW50OExpc3QgPyBieXRlcyA6IG5ldyBVaW50OExpc3QuZnJvbUxpc3QoYnl0ZXMpOwogICAgaW50IGluZGV4ID0gMDsKICAgIGludCBsYXN0SW5kZXggPSBidWZmZXIubGVuZ3RoOwogICAgaWYgKF9zdGF0ZSA9PSBDTE9TRUQpIHsKICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldEV4Y2VwdGlvbigiRGF0YSBvbiBjbG9zZWQgY29ubmVjdGlvbiIpOwogICAgfQogICAgaWYgKF9zdGF0ZSA9PSBGQUlMVVJFKSB7CiAgICAgIHRocm93IG5ldyBXZWJTb2NrZXRFeGNlcHRpb24oIkRhdGEgb24gZmFpbGVkIGNvbm5lY3Rpb24iKTsKICAgIH0KICAgIHdoaWxlICgoaW5kZXggPCBsYXN0SW5kZXgpICYmIF9zdGF0ZSAhPSBDTE9TRUQgJiYgX3N0YXRlICE9IEZBSUxVUkUpIHsKICAgICAgaW50IGJ5dGUgPSBidWZmZXJbaW5kZXhdOwogICAgICBpZiAoX3N0YXRlIDw9IExFTl9SRVNUKSB7CiAgICAgICAgaWYgKF9zdGF0ZSA9PSBTVEFSVCkgewogICAgICAgICAgX2ZpbiA9IChieXRlICYgRklOKSAhPSAwOwoKICAgICAgICAgIGlmICgoYnl0ZSAmIChSU1YyIHwgUlNWMykpICE9IDApIHsKICAgICAgICAgICAgLy8gVGhlIFJTVjIsIFJTVjMgYml0cyBtdXN0IGJvdGggYmUgemVyby4KICAgICAgICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldEV4Y2VwdGlvbigiUHJvdG9jb2wgZXJyb3IiKTsKICAgICAgICAgIH0KCiAgICAgICAgICBfb3Bjb2RlID0gKGJ5dGUgJiBPUENPREUpOwoKICAgICAgICAgIGlmIChfb3Bjb2RlICE9IF9XZWJTb2NrZXRPcGNvZGUuQ09OVElOVUFUSU9OKSB7CiAgICAgICAgICAgIGlmICgoYnl0ZSAmIFJTVjEpICE9IDApIHsKICAgICAgICAgICAgICBfY29tcHJlc3NlZCA9IHRydWU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX2NvbXByZXNzZWQgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIGlmIChfb3Bjb2RlIDw9IF9XZWJTb2NrZXRPcGNvZGUuQklOQVJZKSB7CiAgICAgICAgICAgIGlmIChfb3Bjb2RlID09IF9XZWJTb2NrZXRPcGNvZGUuQ09OVElOVUFUSU9OKSB7CiAgICAgICAgICAgICAgaWYgKF9jdXJyZW50TWVzc2FnZVR5cGUgPT0gX1dlYlNvY2tldE1lc3NhZ2VUeXBlLk5PTkUpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBXZWJTb2NrZXRFeGNlcHRpb24oIlByb3RvY29sIGVycm9yIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGFzc2VydChfb3Bjb2RlID09IF9XZWJTb2NrZXRPcGNvZGUuVEVYVCB8fAogICAgICAgICAgICAgICAgICBfb3Bjb2RlID09IF9XZWJTb2NrZXRPcGNvZGUuQklOQVJZKTsKICAgICAgICAgICAgICBpZiAoX2N1cnJlbnRNZXNzYWdlVHlwZSAhPSBfV2ViU29ja2V0TWVzc2FnZVR5cGUuTk9ORSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldEV4Y2VwdGlvbigiUHJvdG9jb2wgZXJyb3IiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX2N1cnJlbnRNZXNzYWdlVHlwZSA9IF9vcGNvZGU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAoX29wY29kZSA+PSBfV2ViU29ja2V0T3Bjb2RlLkNMT1NFICYmCiAgICAgICAgICAgICAgX29wY29kZSA8PSBfV2ViU29ja2V0T3Bjb2RlLlBPTkcpIHsKICAgICAgICAgICAgLy8gQ29udHJvbCBmcmFtZXMgY2Fubm90IGJlIGZyYWdtZW50ZWQuCiAgICAgICAgICAgIGlmICghX2ZpbikgdGhyb3cgbmV3IFdlYlNvY2tldEV4Y2VwdGlvbigiUHJvdG9jb2wgZXJyb3IiKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBXZWJTb2NrZXRFeGNlcHRpb24oIlByb3RvY29sIGVycm9yIik7CiAgICAgICAgICB9CiAgICAgICAgICBfc3RhdGUgPSBMRU5fRklSU1Q7CiAgICAgICAgfSBlbHNlIGlmIChfc3RhdGUgPT0gTEVOX0ZJUlNUKSB7CiAgICAgICAgICBfbWFza2VkID0gKGJ5dGUgJiAweDgwKSAhPSAwOwogICAgICAgICAgX2xlbiA9IGJ5dGUgJiAweDdGOwogICAgICAgICAgaWYgKF9pc0NvbnRyb2xGcmFtZSgpICYmIF9sZW4gPiAxMjUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldEV4Y2VwdGlvbigiUHJvdG9jb2wgZXJyb3IiKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChfbGVuID09IDEyNikgewogICAgICAgICAgICBfbGVuID0gMDsKICAgICAgICAgICAgX3JlbWFpbmluZ0xlbkJ5dGVzID0gMjsKICAgICAgICAgICAgX3N0YXRlID0gTEVOX1JFU1Q7CiAgICAgICAgICB9IGVsc2UgaWYgKF9sZW4gPT0gMTI3KSB7CiAgICAgICAgICAgIF9sZW4gPSAwOwogICAgICAgICAgICBfcmVtYWluaW5nTGVuQnl0ZXMgPSA4OwogICAgICAgICAgICBfc3RhdGUgPSBMRU5fUkVTVDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFzc2VydChfbGVuIDwgMTI2KTsKICAgICAgICAgICAgX2xlbmd0aERvbmUoKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgYXNzZXJ0KF9zdGF0ZSA9PSBMRU5fUkVTVCk7CiAgICAgICAgICBfbGVuID0gX2xlbiA8PCA4IHwgYnl0ZTsKICAgICAgICAgIF9yZW1haW5pbmdMZW5CeXRlcy0tOwogICAgICAgICAgaWYgKF9yZW1haW5pbmdMZW5CeXRlcyA9PSAwKSB7CiAgICAgICAgICAgIF9sZW5ndGhEb25lKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmIChfc3RhdGUgPT0gTUFTSykgewogICAgICAgICAgX21hc2tpbmdCeXRlc1s0IC0gX3JlbWFpbmluZ01hc2tpbmdLZXlCeXRlcy0tXSA9IGJ5dGU7CiAgICAgICAgICBpZiAoX3JlbWFpbmluZ01hc2tpbmdLZXlCeXRlcyA9PSAwKSB7CiAgICAgICAgICAgIF9tYXNrRG9uZSgpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhc3NlcnQoX3N0YXRlID09IFBBWUxPQUQpOwogICAgICAgICAgLy8gVGhlIHBheWxvYWQgaXMgbm90IGhhbmRsZWQgb25lIGJ5dGUgYXQgYSB0aW1lIGJ1dCBpbiBibG9ja3MuCiAgICAgICAgICBpbnQgcGF5bG9hZExlbmd0aCA9IG1pbihsYXN0SW5kZXggLSBpbmRleCwgX3JlbWFpbmluZ1BheWxvYWRCeXRlcyk7CiAgICAgICAgICBfcmVtYWluaW5nUGF5bG9hZEJ5dGVzIC09IHBheWxvYWRMZW5ndGg7CiAgICAgICAgICAvLyBVbm1hc2sgcGF5bG9hZCBpZiBtYXNrZWQuCiAgICAgICAgICBpZiAoX21hc2tlZCkgewogICAgICAgICAgICBfdW5tYXNrKGluZGV4LCBwYXlsb2FkTGVuZ3RoLCBidWZmZXIpOwogICAgICAgICAgfQogICAgICAgICAgLy8gQ29udHJvbCBmcmFtZSBhbmQgZGF0YSBmcmFtZSBzaGFyZSBfcGF5bG9hZHMuCiAgICAgICAgICBfcGF5bG9hZC5hZGQobmV3IFVpbnQ4TGlzdC52aWV3KGJ1ZmZlci5idWZmZXIsIGluZGV4LCBwYXlsb2FkTGVuZ3RoKSk7CiAgICAgICAgICBpbmRleCArPSBwYXlsb2FkTGVuZ3RoOwogICAgICAgICAgaWYgKF9pc0NvbnRyb2xGcmFtZSgpKSB7CiAgICAgICAgICAgIGlmIChfcmVtYWluaW5nUGF5bG9hZEJ5dGVzID09IDApIF9jb250cm9sRnJhbWVFbmQoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChfY3VycmVudE1lc3NhZ2VUeXBlICE9IF9XZWJTb2NrZXRNZXNzYWdlVHlwZS5URVhUICYmCiAgICAgICAgICAgICAgICBfY3VycmVudE1lc3NhZ2VUeXBlICE9IF9XZWJTb2NrZXRNZXNzYWdlVHlwZS5CSU5BUlkpIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgV2ViU29ja2V0RXhjZXB0aW9uKCJQcm90b2NvbCBlcnJvciIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChfcmVtYWluaW5nUGF5bG9hZEJ5dGVzID09IDApIF9tZXNzYWdlRnJhbWVFbmQoKTsKICAgICAgICAgIH0KCiAgICAgICAgICAvLyBIYWNrIC0gYXMgd2UgYWx3YXlzIGRvIGluZGV4KysgYmVsb3cuCiAgICAgICAgICBpbmRleC0tOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gTW92ZSB0byB0aGUgbmV4dCBieXRlLgogICAgICBpbmRleCsrOwogICAgfQogIH0KCiAgdm9pZCBfdW5tYXNrKGludCBpbmRleCwgaW50IGxlbmd0aCwgVWludDhMaXN0IGJ1ZmZlcikgewogICAgY29uc3QgaW50IEJMT0NLX1NJWkUgPSAxNjsKICAgIC8vIFNraXAgSW50MzJ4NC12ZXJzaW9uIGlmIG1lc3NhZ2UgaXMgc21hbGwuCiAgICBpZiAobGVuZ3RoID49IEJMT0NLX1NJWkUpIHsKICAgICAgLy8gU3RhcnQgYnkgYWxpZ25pbmcgdG8gMTYgYnl0ZXMuCiAgICAgIGZpbmFsIGludCBzdGFydE9mZnNldCA9IEJMT0NLX1NJWkUgLSAoaW5kZXggJiAxNSk7CiAgICAgIGZpbmFsIGludCBlbmQgPSBpbmRleCArIHN0YXJ0T2Zmc2V0OwogICAgICBmb3IgKGludCBpID0gaW5kZXg7IGkgPCBlbmQ7IGkrKykgewogICAgICAgIGJ1ZmZlcltpXSBePSBfbWFza2luZ0J5dGVzW191bm1hc2tpbmdJbmRleCsrICYgM107CiAgICAgIH0KICAgICAgaW5kZXggKz0gc3RhcnRPZmZzZXQ7CiAgICAgIGxlbmd0aCAtPSBzdGFydE9mZnNldDsKICAgICAgZmluYWwgaW50IGJsb2NrQ291bnQgPSBsZW5ndGggfi8gQkxPQ0tfU0laRTsKICAgICAgaWYgKGJsb2NrQ291bnQgPiAwKSB7CiAgICAgICAgLy8gQ3JlYXRlIG1hc2sgYmxvY2suCiAgICAgICAgaW50IG1hc2sgPSAwOwogICAgICAgIGZvciAoaW50IGkgPSAzOyBpID49IDA7IGktLSkgewogICAgICAgICAgbWFzayA9IChtYXNrIDw8IDgpIHwgX21hc2tpbmdCeXRlc1soX3VubWFza2luZ0luZGV4ICsgaSkgJiAzXTsKICAgICAgICB9CiAgICAgICAgSW50MzJ4NCBibG9ja01hc2sgPSBuZXcgSW50MzJ4NChtYXNrLCBtYXNrLCBtYXNrLCBtYXNrKTsKICAgICAgICBJbnQzMng0TGlzdCBibG9ja0J1ZmZlciA9CiAgICAgICAgICAgIG5ldyBJbnQzMng0TGlzdC52aWV3KGJ1ZmZlci5idWZmZXIsIGluZGV4LCBibG9ja0NvdW50KTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJsb2NrQnVmZmVyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBibG9ja0J1ZmZlcltpXSBePSBibG9ja01hc2s7CiAgICAgICAgfQogICAgICAgIGZpbmFsIGludCBieXRlcyA9IGJsb2NrQ291bnQgKiBCTE9DS19TSVpFOwogICAgICAgIGluZGV4ICs9IGJ5dGVzOwogICAgICAgIGxlbmd0aCAtPSBieXRlczsKICAgICAgfQogICAgfQogICAgLy8gSGFuZGxlIGVuZC4KICAgIGZpbmFsIGludCBlbmQgPSBpbmRleCArIGxlbmd0aDsKICAgIGZvciAoaW50IGkgPSBpbmRleDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIGJ1ZmZlcltpXSBePSBfbWFza2luZ0J5dGVzW191bm1hc2tpbmdJbmRleCsrICYgM107CiAgICB9CiAgfQoKICB2b2lkIF9sZW5ndGhEb25lKCkgewogICAgaWYgKF9tYXNrZWQpIHsKICAgICAgaWYgKCFfc2VydmVyU2lkZSkgewogICAgICAgIHRocm93IG5ldyBXZWJTb2NrZXRFeGNlcHRpb24oIlJlY2VpdmVkIG1hc2tlZCBmcmFtZSBmcm9tIHNlcnZlciIpOwogICAgICB9CiAgICAgIF9zdGF0ZSA9IE1BU0s7CiAgICB9IGVsc2UgewogICAgICBpZiAoX3NlcnZlclNpZGUpIHsKICAgICAgICB0aHJvdyBuZXcgV2ViU29ja2V0RXhjZXB0aW9uKCJSZWNlaXZlZCB1bm1hc2tlZCBmcmFtZSBmcm9tIGNsaWVudCIpOwogICAgICB9CiAgICAgIF9yZW1haW5pbmdQYXlsb2FkQnl0ZXMgPSBfbGVuOwogICAgICBfc3RhcnRQYXlsb2FkKCk7CiAgICB9CiAgfQoKICB2b2lkIF9tYXNrRG9uZSgpIHsKICAgIF9yZW1haW5pbmdQYXlsb2FkQnl0ZXMgPSBfbGVuOwogICAgX3N0YXJ0UGF5bG9hZCgpOwogIH0KCiAgdm9pZCBfc3RhcnRQYXlsb2FkKCkgewogICAgLy8gSWYgdGhlcmUgaXMgbm8gYWN0dWFsIHBheWxvYWQgcGVyZm9ybSBwZXJmb3JtIGNhbGxiYWNrcyB3aXRob3V0CiAgICAvLyBnb2luZyB0aHJvdWdoIHRoZSBQQVlMT0FEIHN0YXRlLgogICAgaWYgKF9yZW1haW5pbmdQYXlsb2FkQnl0ZXMgPT0gMCkgewogICAgICBpZiAoX2lzQ29udHJvbEZyYW1lKCkpIHsKICAgICAgICBzd2l0Y2ggKF9vcGNvZGUpIHsKICAgICAgICAgIGNhc2UgX1dlYlNvY2tldE9wY29kZS5DTE9TRToKICAgICAgICAgICAgX3N0YXRlID0gQ0xPU0VEOwogICAgICAgICAgICBfZXZlbnRTaW5rLmNsb3NlKCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBfV2ViU29ja2V0T3Bjb2RlLlBJTkc6CiAgICAgICAgICAgIF9ldmVudFNpbmsuYWRkKG5ldyBfV2ViU29ja2V0UGluZygpKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIF9XZWJTb2NrZXRPcGNvZGUuUE9ORzoKICAgICAgICAgICAgX2V2ZW50U2luay5hZGQobmV3IF9XZWJTb2NrZXRQb25nKCkpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgX3ByZXBhcmVGb3JOZXh0RnJhbWUoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfbWVzc2FnZUZyYW1lRW5kKCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIF9zdGF0ZSA9IFBBWUxPQUQ7CiAgICB9CiAgfQoKICB2b2lkIF9tZXNzYWdlRnJhbWVFbmQoKSB7CiAgICBpZiAoX2ZpbikgewogICAgICB2YXIgYnl0ZXMgPSBfcGF5bG9hZC50YWtlQnl0ZXMoKTsKICAgICAgaWYgKF9kZWZsYXRlICE9IG51bGwgJiYgX2NvbXByZXNzZWQpIHsKICAgICAgICBieXRlcyA9IF9kZWZsYXRlLnByb2Nlc3NJbmNvbWluZ01lc3NhZ2UoYnl0ZXMpOwogICAgICB9CgogICAgICBzd2l0Y2ggKF9jdXJyZW50TWVzc2FnZVR5cGUpIHsKICAgICAgICBjYXNlIF9XZWJTb2NrZXRNZXNzYWdlVHlwZS5URVhUOgogICAgICAgICAgX2V2ZW50U2luay5hZGQodXRmOC5kZWNvZGUoYnl0ZXMpKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgX1dlYlNvY2tldE1lc3NhZ2VUeXBlLkJJTkFSWToKICAgICAgICAgIF9ldmVudFNpbmsuYWRkKGJ5dGVzKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIF9jdXJyZW50TWVzc2FnZVR5cGUgPSBfV2ViU29ja2V0TWVzc2FnZVR5cGUuTk9ORTsKICAgIH0KICAgIF9wcmVwYXJlRm9yTmV4dEZyYW1lKCk7CiAgfQoKICB2b2lkIF9jb250cm9sRnJhbWVFbmQoKSB7CiAgICBzd2l0Y2ggKF9vcGNvZGUpIHsKICAgICAgY2FzZSBfV2ViU29ja2V0T3Bjb2RlLkNMT1NFOgogICAgICAgIGNsb3NlQ29kZSA9IFdlYlNvY2tldFN0YXR1cy5OT19TVEFUVVNfUkVDRUlWRUQ7CiAgICAgICAgdmFyIHBheWxvYWQgPSBfcGF5bG9hZC50YWtlQnl0ZXMoKTsKICAgICAgICBpZiAocGF5bG9hZC5sZW5ndGggPiAwKSB7CiAgICAgICAgICBpZiAocGF5bG9hZC5sZW5ndGggPT0gMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgV2ViU29ja2V0RXhjZXB0aW9uKCJQcm90b2NvbCBlcnJvciIpOwogICAgICAgICAgfQogICAgICAgICAgY2xvc2VDb2RlID0gcGF5bG9hZFswXSA8PCA4IHwgcGF5bG9hZFsxXTsKICAgICAgICAgIGlmIChjbG9zZUNvZGUgPT0gV2ViU29ja2V0U3RhdHVzLk5PX1NUQVRVU19SRUNFSVZFRCkgewogICAgICAgICAgICB0aHJvdyBuZXcgV2ViU29ja2V0RXhjZXB0aW9uKCJQcm90b2NvbCBlcnJvciIpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHBheWxvYWQubGVuZ3RoID4gMikgewogICAgICAgICAgICBjbG9zZVJlYXNvbiA9IHV0ZjguZGVjb2RlKHBheWxvYWQuc3VibGlzdCgyKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIF9zdGF0ZSA9IENMT1NFRDsKICAgICAgICBfZXZlbnRTaW5rLmNsb3NlKCk7CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIF9XZWJTb2NrZXRPcGNvZGUuUElORzoKICAgICAgICBfZXZlbnRTaW5rLmFkZChuZXcgX1dlYlNvY2tldFBpbmcoX3BheWxvYWQudGFrZUJ5dGVzKCkpKTsKICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgX1dlYlNvY2tldE9wY29kZS5QT05HOgogICAgICAgIF9ldmVudFNpbmsuYWRkKG5ldyBfV2ViU29ja2V0UG9uZyhfcGF5bG9hZC50YWtlQnl0ZXMoKSkpOwogICAgICAgIGJyZWFrOwogICAgfQogICAgX3ByZXBhcmVGb3JOZXh0RnJhbWUoKTsKICB9CgogIGJvb2wgX2lzQ29udHJvbEZyYW1lKCkgewogICAgcmV0dXJuIF9vcGNvZGUgPT0gX1dlYlNvY2tldE9wY29kZS5DTE9TRSB8fAogICAgICAgIF9vcGNvZGUgPT0gX1dlYlNvY2tldE9wY29kZS5QSU5HIHx8CiAgICAgICAgX29wY29kZSA9PSBfV2ViU29ja2V0T3Bjb2RlLlBPTkc7CiAgfQoKICB2b2lkIF9wcmVwYXJlRm9yTmV4dEZyYW1lKCkgewogICAgaWYgKF9zdGF0ZSAhPSBDTE9TRUQgJiYgX3N0YXRlICE9IEZBSUxVUkUpIF9zdGF0ZSA9IFNUQVJUOwogICAgX2ZpbiA9IGZhbHNlOwogICAgX29wY29kZSA9IC0xOwogICAgX2xlbiA9IC0xOwogICAgX3JlbWFpbmluZ0xlbkJ5dGVzID0gLTE7CiAgICBfcmVtYWluaW5nTWFza2luZ0tleUJ5dGVzID0gNDsKICAgIF9yZW1haW5pbmdQYXlsb2FkQnl0ZXMgPSAtMTsKICAgIF91bm1hc2tpbmdJbmRleCA9IDA7CiAgfQp9CgpjbGFzcyBfV2ViU29ja2V0UGluZyB7CiAgZmluYWwgTGlzdDxpbnQ+IHBheWxvYWQ7CiAgX1dlYlNvY2tldFBpbmcoW3RoaXMucGF5bG9hZCA9IG51bGxdKTsKfQoKY2xhc3MgX1dlYlNvY2tldFBvbmcgewogIGZpbmFsIExpc3Q8aW50PiBwYXlsb2FkOwogIF9XZWJTb2NrZXRQb25nKFt0aGlzLnBheWxvYWQgPSBudWxsXSk7Cn0KCnR5cGVkZWYgLypTdHJpbmd8RnV0dXJlPFN0cmluZz4qLyBfUHJvdG9jb2xTZWxlY3RvcihMaXN0PFN0cmluZz4gcHJvdG9jb2xzKTsKCmNsYXNzIF9XZWJTb2NrZXRUcmFuc2Zvcm1lckltcGwKICAgIGV4dGVuZHMgU3RyZWFtVHJhbnNmb3JtZXJCYXNlPEh0dHBSZXF1ZXN0LCBXZWJTb2NrZXQ+CiAgICBpbXBsZW1lbnRzIFdlYlNvY2tldFRyYW5zZm9ybWVyIHsKICBmaW5hbCBTdHJlYW1Db250cm9sbGVyPFdlYlNvY2tldD4gX2NvbnRyb2xsZXIgPQogICAgICBuZXcgU3RyZWFtQ29udHJvbGxlcjxXZWJTb2NrZXQ+KHN5bmM6IHRydWUpOwogIGZpbmFsIF9Qcm90b2NvbFNlbGVjdG9yIF9wcm90b2NvbFNlbGVjdG9yOwogIGZpbmFsIENvbXByZXNzaW9uT3B0aW9ucyBfY29tcHJlc3Npb247CgogIF9XZWJTb2NrZXRUcmFuc2Zvcm1lckltcGwodGhpcy5fcHJvdG9jb2xTZWxlY3RvciwgdGhpcy5fY29tcHJlc3Npb24pOwoKICBTdHJlYW08V2ViU29ja2V0PiBiaW5kKFN0cmVhbTxIdHRwUmVxdWVzdD4gc3RyZWFtKSB7CiAgICBzdHJlYW0ubGlzdGVuKChyZXF1ZXN0KSB7CiAgICAgIF91cGdyYWRlKHJlcXVlc3QsIF9wcm90b2NvbFNlbGVjdG9yLCBfY29tcHJlc3Npb24pCiAgICAgICAgICAudGhlbigoV2ViU29ja2V0IHdlYlNvY2tldCkgPT4gX2NvbnRyb2xsZXIuYWRkKHdlYlNvY2tldCkpCiAgICAgICAgICAuY2F0Y2hFcnJvcihfY29udHJvbGxlci5hZGRFcnJvcik7CiAgICB9LCBvbkRvbmU6ICgpIHsKICAgICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICAgIH0pOwoKICAgIHJldHVybiBfY29udHJvbGxlci5zdHJlYW07CiAgfQoKICBzdGF0aWMgTGlzdDxTdHJpbmc+IF90b2tlbml6ZUZpZWxkVmFsdWUoU3RyaW5nIGhlYWRlclZhbHVlKSB7CiAgICBMaXN0PFN0cmluZz4gdG9rZW5zID0gbmV3IExpc3Q8U3RyaW5nPigpOwogICAgaW50IHN0YXJ0ID0gMDsKICAgIGludCBpbmRleCA9IDA7CiAgICB3aGlsZSAoaW5kZXggPCBoZWFkZXJWYWx1ZS5sZW5ndGgpIHsKICAgICAgaWYgKGhlYWRlclZhbHVlW2luZGV4XSA9PSAiLCIpIHsKICAgICAgICB0b2tlbnMuYWRkKGhlYWRlclZhbHVlLnN1YnN0cmluZyhzdGFydCwgaW5kZXgpKTsKICAgICAgICBzdGFydCA9IGluZGV4ICsgMTsKICAgICAgfSBlbHNlIGlmIChoZWFkZXJWYWx1ZVtpbmRleF0gPT0gIiAiIHx8IGhlYWRlclZhbHVlW2luZGV4XSA9PSAiXHQiKSB7CiAgICAgICAgc3RhcnQrKzsKICAgICAgfQogICAgICBpbmRleCsrOwogICAgfQogICAgdG9rZW5zLmFkZChoZWFkZXJWYWx1ZS5zdWJzdHJpbmcoc3RhcnQsIGluZGV4KSk7CiAgICByZXR1cm4gdG9rZW5zOwogIH0KCiAgc3RhdGljIEZ1dHVyZTxXZWJTb2NrZXQ+IF91cGdyYWRlKEh0dHBSZXF1ZXN0IHJlcXVlc3QsCiAgICAgIF9Qcm90b2NvbFNlbGVjdG9yIF9wcm90b2NvbFNlbGVjdG9yLCBDb21wcmVzc2lvbk9wdGlvbnMgY29tcHJlc3Npb24pIHsKICAgIHZhciByZXNwb25zZSA9IHJlcXVlc3QucmVzcG9uc2U7CiAgICBpZiAoIV9pc1VwZ3JhZGVSZXF1ZXN0KHJlcXVlc3QpKSB7CiAgICAgIC8vIFNlbmQgZXJyb3IgcmVzcG9uc2UuCiAgICAgIHJlc3BvbnNlCiAgICAgICAgLi5zdGF0dXNDb2RlID0gSHR0cFN0YXR1cy5iYWRSZXF1ZXN0CiAgICAgICAgLi5jbG9zZSgpOwogICAgICByZXR1cm4gbmV3IEZ1dHVyZS5lcnJvcigKICAgICAgICAgIG5ldyBXZWJTb2NrZXRFeGNlcHRpb24oIkludmFsaWQgV2ViU29ja2V0IHVwZ3JhZGUgcmVxdWVzdCIpKTsKICAgIH0KCiAgICBGdXR1cmU8V2ViU29ja2V0PiB1cGdyYWRlKFN0cmluZyBwcm90b2NvbCkgewogICAgICAvLyBTZW5kIHRoZSB1cGdyYWRlIHJlc3BvbnNlLgogICAgICByZXNwb25zZQogICAgICAgIC4uc3RhdHVzQ29kZSA9IEh0dHBTdGF0dXMuc3dpdGNoaW5nUHJvdG9jb2xzCiAgICAgICAgLi5oZWFkZXJzLmFkZChIdHRwSGVhZGVycy5jb25uZWN0aW9uSGVhZGVyLCAiVXBncmFkZSIpCiAgICAgICAgLi5oZWFkZXJzLmFkZChIdHRwSGVhZGVycy51cGdyYWRlSGVhZGVyLCAid2Vic29ja2V0Iik7CiAgICAgIFN0cmluZyBrZXkgPSByZXF1ZXN0LmhlYWRlcnMudmFsdWUoIlNlYy1XZWJTb2NrZXQtS2V5Iik7CiAgICAgIF9TSEExIHNoYTEgPSBuZXcgX1NIQTEoKTsKICAgICAgc2hhMS5hZGQoIiRrZXkkX3dlYlNvY2tldEdVSUQiLmNvZGVVbml0cyk7CiAgICAgIFN0cmluZyBhY2NlcHQgPSBfQ3J5cHRvVXRpbHMuYnl0ZXNUb0Jhc2U2NChzaGExLmNsb3NlKCkpOwogICAgICByZXNwb25zZS5oZWFkZXJzLmFkZCgiU2VjLVdlYlNvY2tldC1BY2NlcHQiLCBhY2NlcHQpOwogICAgICBpZiAocHJvdG9jb2wgIT0gbnVsbCkgewogICAgICAgIHJlc3BvbnNlLmhlYWRlcnMuYWRkKCJTZWMtV2ViU29ja2V0LVByb3RvY29sIiwgcHJvdG9jb2wpOwogICAgICB9CgogICAgICB2YXIgZGVmbGF0ZSA9IF9uZWdvdGlhdGVDb21wcmVzc2lvbihyZXF1ZXN0LCByZXNwb25zZSwgY29tcHJlc3Npb24pOwoKICAgICAgcmVzcG9uc2UuaGVhZGVycy5jb250ZW50TGVuZ3RoID0gMDsKICAgICAgcmV0dXJuIHJlc3BvbnNlLmRldGFjaFNvY2tldCgpLnRoZW48V2ViU29ja2V0Pigoc29ja2V0KSA9PgogICAgICAgICAgbmV3IF9XZWJTb2NrZXRJbXBsLl9mcm9tU29ja2V0KAogICAgICAgICAgICAgIHNvY2tldCwgcHJvdG9jb2wsIGNvbXByZXNzaW9uLCB0cnVlLCBkZWZsYXRlKSk7CiAgICB9CgogICAgdmFyIHByb3RvY29scyA9IHJlcXVlc3QuaGVhZGVyc1snU2VjLVdlYlNvY2tldC1Qcm90b2NvbCddOwogICAgaWYgKHByb3RvY29scyAhPSBudWxsICYmIF9wcm90b2NvbFNlbGVjdG9yICE9IG51bGwpIHsKICAgICAgLy8gVGhlIHN1Z2dlc3RlZCBwcm90b2NvbHMgY2FuIGJlIHNwcmVhZCBvdmVyIG11bHRpcGxlIGxpbmVzLCBlYWNoCiAgICAgIC8vIGNvbnNpc3Rpbmcgb2YgbXVsdGlwbGUgcHJvdG9jb2xzLiBUbyB1bmlmeSBhbGwgb2YgdGhlbSwgZmlyc3Qgam9pbgogICAgICAvLyB0aGUgbGlzdHMgd2l0aCAnLCAnIGFuZCB0aGVuIHRva2VuaXplLgogICAgICBwcm90b2NvbHMgPSBfdG9rZW5pemVGaWVsZFZhbHVlKHByb3RvY29scy5qb2luKCcsICcpKTsKICAgICAgcmV0dXJuIG5ldyBGdXR1cmU8U3RyaW5nPigoKSA9PiBfcHJvdG9jb2xTZWxlY3Rvcihwcm90b2NvbHMpKQogICAgICAgICAgLnRoZW48U3RyaW5nPigocHJvdG9jb2wpIHsKICAgICAgICBpZiAocHJvdG9jb2xzLmluZGV4T2YocHJvdG9jb2wpIDwgMCkgewogICAgICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldEV4Y2VwdGlvbigKICAgICAgICAgICAgICAiU2VsZWN0ZWQgcHJvdG9jb2wgaXMgbm90IGluIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBwcm90b2NvbHMiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHByb3RvY29sOwogICAgICB9KS5jYXRjaEVycm9yKChlcnJvcikgewogICAgICAgIHJlc3BvbnNlCiAgICAgICAgICAuLnN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzLmludGVybmFsU2VydmVyRXJyb3IKICAgICAgICAgIC4uY2xvc2UoKTsKICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgfSkudGhlbjxXZWJTb2NrZXQ+KHVwZ3JhZGUpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHVwZ3JhZGUobnVsbCk7CiAgICB9CiAgfQoKICBzdGF0aWMgX1dlYlNvY2tldFBlck1lc3NhZ2VEZWZsYXRlIF9uZWdvdGlhdGVDb21wcmVzc2lvbihIdHRwUmVxdWVzdCByZXF1ZXN0LAogICAgICBIdHRwUmVzcG9uc2UgcmVzcG9uc2UsIENvbXByZXNzaW9uT3B0aW9ucyBjb21wcmVzc2lvbikgewogICAgdmFyIGV4dGVuc2lvbkhlYWRlciA9IHJlcXVlc3QuaGVhZGVycy52YWx1ZSgiU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zIik7CgogICAgZXh0ZW5zaW9uSGVhZGVyID8/PSAiIjsKCiAgICB2YXIgaHYgPSBIZWFkZXJWYWx1ZS5wYXJzZShleHRlbnNpb25IZWFkZXIsIHZhbHVlU2VwYXJhdG9yOiAnLCcpOwogICAgaWYgKGNvbXByZXNzaW9uLmVuYWJsZWQgJiYgaHYudmFsdWUgPT0gX1dlYlNvY2tldEltcGwuUEVSX01FU1NBR0VfREVGTEFURSkgewogICAgICB2YXIgaW5mbyA9IGNvbXByZXNzaW9uLl9jcmVhdGVIZWFkZXIoaHYpOwoKICAgICAgcmVzcG9uc2UuaGVhZGVycy5hZGQoIlNlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucyIsIGluZm8uaGVhZGVyVmFsdWUpOwogICAgICB2YXIgc2VydmVyTm9Db250ZXh0VGFrZW92ZXIgPQogICAgICAgICAgKGh2LnBhcmFtZXRlcnMuY29udGFpbnNLZXkoX3NlcnZlck5vQ29udGV4dFRha2VvdmVyKSAmJgogICAgICAgICAgICAgIGNvbXByZXNzaW9uLnNlcnZlck5vQ29udGV4dFRha2VvdmVyKTsKICAgICAgdmFyIGNsaWVudE5vQ29udGV4dFRha2VvdmVyID0KICAgICAgICAgIChodi5wYXJhbWV0ZXJzLmNvbnRhaW5zS2V5KF9jbGllbnROb0NvbnRleHRUYWtlb3ZlcikgJiYKICAgICAgICAgICAgICBjb21wcmVzc2lvbi5jbGllbnROb0NvbnRleHRUYWtlb3Zlcik7CiAgICAgIHZhciBkZWZsYXRlID0gbmV3IF9XZWJTb2NrZXRQZXJNZXNzYWdlRGVmbGF0ZSgKICAgICAgICAgIHNlcnZlck5vQ29udGV4dFRha2VvdmVyOiBzZXJ2ZXJOb0NvbnRleHRUYWtlb3ZlciwKICAgICAgICAgIGNsaWVudE5vQ29udGV4dFRha2VvdmVyOiBjbGllbnROb0NvbnRleHRUYWtlb3ZlciwKICAgICAgICAgIHNlcnZlck1heFdpbmRvd0JpdHM6IGluZm8ubWF4V2luZG93Qml0cywKICAgICAgICAgIGNsaWVudE1heFdpbmRvd0JpdHM6IGluZm8ubWF4V2luZG93Qml0cywKICAgICAgICAgIHNlcnZlclNpZGU6IHRydWUpOwoKICAgICAgcmV0dXJuIGRlZmxhdGU7CiAgICB9CgogICAgcmV0dXJuIG51bGw7CiAgfQoKICBzdGF0aWMgYm9vbCBfaXNVcGdyYWRlUmVxdWVzdChIdHRwUmVxdWVzdCByZXF1ZXN0KSB7CiAgICBpZiAocmVxdWVzdC5tZXRob2QgIT0gIkdFVCIpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKHJlcXVlc3QuaGVhZGVyc1tIdHRwSGVhZGVycy5jb25uZWN0aW9uSGVhZGVyXSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGJvb2wgaXNVcGdyYWRlID0gZmFsc2U7CiAgICByZXF1ZXN0LmhlYWRlcnNbSHR0cEhlYWRlcnMuY29ubmVjdGlvbkhlYWRlcl0uZm9yRWFjaCgoU3RyaW5nIHZhbHVlKSB7CiAgICAgIGlmICh2YWx1ZS50b0xvd2VyQ2FzZSgpID09ICJ1cGdyYWRlIikgaXNVcGdyYWRlID0gdHJ1ZTsKICAgIH0pOwogICAgaWYgKCFpc1VwZ3JhZGUpIHJldHVybiBmYWxzZTsKICAgIFN0cmluZyB1cGdyYWRlID0gcmVxdWVzdC5oZWFkZXJzLnZhbHVlKEh0dHBIZWFkZXJzLnVwZ3JhZGVIZWFkZXIpOwogICAgaWYgKHVwZ3JhZGUgPT0gbnVsbCB8fCB1cGdyYWRlLnRvTG93ZXJDYXNlKCkgIT0gIndlYnNvY2tldCIpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgU3RyaW5nIHZlcnNpb24gPSByZXF1ZXN0LmhlYWRlcnMudmFsdWUoIlNlYy1XZWJTb2NrZXQtVmVyc2lvbiIpOwogICAgaWYgKHZlcnNpb24gPT0gbnVsbCB8fCB2ZXJzaW9uICE9ICIxMyIpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgU3RyaW5nIGtleSA9IHJlcXVlc3QuaGVhZGVycy52YWx1ZSgiU2VjLVdlYlNvY2tldC1LZXkiKTsKICAgIGlmIChrZXkgPT0gbnVsbCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCmNsYXNzIF9XZWJTb2NrZXRQZXJNZXNzYWdlRGVmbGF0ZSB7CiAgYm9vbCBzZXJ2ZXJOb0NvbnRleHRUYWtlb3ZlcjsKICBib29sIGNsaWVudE5vQ29udGV4dFRha2VvdmVyOwogIGludCBjbGllbnRNYXhXaW5kb3dCaXRzOwogIGludCBzZXJ2ZXJNYXhXaW5kb3dCaXRzOwogIGJvb2wgc2VydmVyU2lkZTsKCiAgUmF3WkxpYkZpbHRlciBkZWNvZGVyOwogIFJhd1pMaWJGaWx0ZXIgZW5jb2RlcjsKCiAgX1dlYlNvY2tldFBlck1lc3NhZ2VEZWZsYXRlKAogICAgICB7dGhpcy5jbGllbnRNYXhXaW5kb3dCaXRzOiBfV2ViU29ja2V0SW1wbC5ERUZBVUxUX1dJTkRPV19CSVRTLAogICAgICB0aGlzLnNlcnZlck1heFdpbmRvd0JpdHM6IF9XZWJTb2NrZXRJbXBsLkRFRkFVTFRfV0lORE9XX0JJVFMsCiAgICAgIHRoaXMuc2VydmVyTm9Db250ZXh0VGFrZW92ZXI6IGZhbHNlLAogICAgICB0aGlzLmNsaWVudE5vQ29udGV4dFRha2VvdmVyOiBmYWxzZSwKICAgICAgdGhpcy5zZXJ2ZXJTaWRlOiBmYWxzZX0pOwoKICB2b2lkIF9lbnN1cmVEZWNvZGVyKCkgewogICAgaWYgKGRlY29kZXIgPT0gbnVsbCkgewogICAgICBkZWNvZGVyID0gbmV3IFJhd1pMaWJGaWx0ZXIuaW5mbGF0ZUZpbHRlcigKICAgICAgICAgIHdpbmRvd0JpdHM6IHNlcnZlclNpZGUgPyBjbGllbnRNYXhXaW5kb3dCaXRzIDogc2VydmVyTWF4V2luZG93Qml0cywKICAgICAgICAgIHJhdzogdHJ1ZSk7CiAgICB9CiAgfQoKICB2b2lkIF9lbnN1cmVFbmNvZGVyKCkgewogICAgaWYgKGVuY29kZXIgPT0gbnVsbCkgewogICAgICBlbmNvZGVyID0gbmV3IFJhd1pMaWJGaWx0ZXIuZGVmbGF0ZUZpbHRlcigKICAgICAgICAgIHdpbmRvd0JpdHM6IHNlcnZlclNpZGUgPyBzZXJ2ZXJNYXhXaW5kb3dCaXRzIDogY2xpZW50TWF4V2luZG93Qml0cywKICAgICAgICAgIHJhdzogdHJ1ZSk7CiAgICB9CiAgfQoKICBVaW50OExpc3QgcHJvY2Vzc0luY29taW5nTWVzc2FnZShMaXN0PGludD4gbXNnKSB7CiAgICBfZW5zdXJlRGVjb2RlcigpOwoKICAgIHZhciBkYXRhID0gPGludD5bXTsKICAgIGRhdGEuYWRkQWxsKG1zZyk7CiAgICBkYXRhLmFkZEFsbChjb25zdCBbMHgwMCwgMHgwMCwgMHhmZiwgMHhmZl0pOwoKICAgIGRlY29kZXIucHJvY2VzcyhkYXRhLCAwLCBkYXRhLmxlbmd0aCk7CiAgICB2YXIgcmVzdWx0ID0gPGludD5bXTsKICAgIExpc3Q8aW50PiBvdXQ7CgogICAgd2hpbGUgKChvdXQgPSBkZWNvZGVyLnByb2Nlc3NlZCgpKSAhPSBudWxsKSB7CiAgICAgIHJlc3VsdC5hZGRBbGwob3V0KTsKICAgIH0KCiAgICBpZiAoKHNlcnZlclNpZGUgJiYgY2xpZW50Tm9Db250ZXh0VGFrZW92ZXIpIHx8CiAgICAgICAgKCFzZXJ2ZXJTaWRlICYmIHNlcnZlck5vQ29udGV4dFRha2VvdmVyKSkgewogICAgICBkZWNvZGVyID0gbnVsbDsKICAgIH0KCiAgICByZXR1cm4gbmV3IFVpbnQ4TGlzdC5mcm9tTGlzdChyZXN1bHQpOwogIH0KCiAgTGlzdDxpbnQ+IHByb2Nlc3NPdXRnb2luZ01lc3NhZ2UoTGlzdDxpbnQ+IG1zZykgewogICAgX2Vuc3VyZUVuY29kZXIoKTsKICAgIHZhciByZXN1bHQgPSA8aW50PltdOwogICAgVWludDhMaXN0IGJ1ZmZlcjsKCiAgICBpZiAobXNnIGlzISBVaW50OExpc3QpIHsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAobXNnW2ldIDwgMCB8fCAyNTUgPCBtc2dbaV0pIHsKICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJMaXN0IGVsZW1lbnQgaXMgbm90IGEgYnl0ZSB2YWx1ZSAiCiAgICAgICAgICAgICAgIih2YWx1ZSAke21zZ1tpXX0gYXQgaW5kZXggJGkpIik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGJ1ZmZlciA9IG5ldyBVaW50OExpc3QuZnJvbUxpc3QobXNnKTsKICAgIH0gZWxzZSB7CiAgICAgIGJ1ZmZlciA9IG1zZzsKICAgIH0KCiAgICBlbmNvZGVyLnByb2Nlc3MoYnVmZmVyLCAwLCBidWZmZXIubGVuZ3RoKTsKCiAgICBMaXN0PGludD4gb3V0OwogICAgd2hpbGUgKChvdXQgPSBlbmNvZGVyLnByb2Nlc3NlZCgpKSAhPSBudWxsKSB7CiAgICAgIHJlc3VsdC5hZGRBbGwob3V0KTsKICAgIH0KCiAgICBpZiAoKCFzZXJ2ZXJTaWRlICYmIGNsaWVudE5vQ29udGV4dFRha2VvdmVyKSB8fAogICAgICAgIChzZXJ2ZXJTaWRlICYmIHNlcnZlck5vQ29udGV4dFRha2VvdmVyKSkgewogICAgICBlbmNvZGVyID0gbnVsbDsKICAgIH0KCiAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDQpIHsKICAgICAgcmVzdWx0ID0gcmVzdWx0LnN1Ymxpc3QoMCwgcmVzdWx0Lmxlbmd0aCAtIDQpOwogICAgfQoKICAgIC8vIFJGQyA3NjkyIDcuMi4zLjYuICJHZW5lcmF0aW5nIGFuIEVtcHR5IEZyYWdtZW50IiBzYXlzIHRoYXQgaWYgdGhlCiAgICAvLyBjb21wcmVzc2lvbiBsaWJyYXJ5IGRvZXNuJ3QgZ2VuZXJhdGUgYW55IGRhdGEgd2hlbiB0aGUgYnVmZXIgaXMgZW1wdHksCiAgICAvLyB0aGVuIGFuIGVtcHR5IHVuY29tcHJlc3NlZCBkZWZsYXRlIGJsb2NrIGlzIHVzZWQgZm9yIHRoaXMgcHVycG9zZS4gVGhlCiAgICAvLyAweDAwIGJsb2NrIGhhcyB0aGUgQkZJTkFMIGhlYWRlciBiaXQgc2V0IHRvIDAgYW5kIHRoZSBCVFlQRSBoZWFkZXIgc2V0IHRvCiAgICAvLyAwMCBhbG9uZyB3aXRoIDUgYml0cyBvZiBwYWRkaW5nLiBUaGlzIGJsb2NrIGRlY29kZXMgdG8gemVybyBieXRlcy4KICAgIGlmIChyZXN1bHQubGVuZ3RoID09IDApIHsKICAgICAgcmV0dXJuIFsweDAwXTsKICAgIH0KCiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQoKLy8gVE9ETyhham9obnNlbik6IE1ha2UgdGhpcyB0cmFuc2Zvcm1lciByZXVzYWJsZS4KY2xhc3MgX1dlYlNvY2tldE91dGdvaW5nVHJhbnNmb3JtZXIKICAgIGV4dGVuZHMgU3RyZWFtVHJhbnNmb3JtZXJCYXNlPGR5bmFtaWMsIExpc3Q8aW50Pj4gaW1wbGVtZW50cyBFdmVudFNpbmsgewogIGZpbmFsIF9XZWJTb2NrZXRJbXBsIHdlYlNvY2tldDsKICBFdmVudFNpbms8TGlzdDxpbnQ+PiBfZXZlbnRTaW5rOwoKICBfV2ViU29ja2V0UGVyTWVzc2FnZURlZmxhdGUgX2RlZmxhdGVIZWxwZXI7CgogIF9XZWJTb2NrZXRPdXRnb2luZ1RyYW5zZm9ybWVyKHRoaXMud2ViU29ja2V0KSB7CiAgICBfZGVmbGF0ZUhlbHBlciA9IHdlYlNvY2tldC5fZGVmbGF0ZTsKICB9CgogIFN0cmVhbTxMaXN0PGludD4+IGJpbmQoU3RyZWFtIHN0cmVhbSkgewogICAgcmV0dXJuIG5ldyBTdHJlYW08TGlzdDxpbnQ+Pi5ldmVudFRyYW5zZm9ybWVkKHN0cmVhbSwKICAgICAgICAoRXZlbnRTaW5rPExpc3Q8aW50Pj4gZXZlbnRTaW5rKSB7CiAgICAgIGlmIChfZXZlbnRTaW5rICE9IG51bGwpIHsKICAgICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiV2ViU29ja2V0IHRyYW5zZm9ybWVyIGFscmVhZHkgdXNlZCIpOwogICAgICB9CiAgICAgIF9ldmVudFNpbmsgPSBldmVudFNpbms7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSk7CiAgfQoKICB2b2lkIGFkZChtZXNzYWdlKSB7CiAgICBpZiAobWVzc2FnZSBpcyBfV2ViU29ja2V0UG9uZykgewogICAgICBhZGRGcmFtZShfV2ViU29ja2V0T3Bjb2RlLlBPTkcsIG1lc3NhZ2UucGF5bG9hZCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChtZXNzYWdlIGlzIF9XZWJTb2NrZXRQaW5nKSB7CiAgICAgIGFkZEZyYW1lKF9XZWJTb2NrZXRPcGNvZGUuUElORywgbWVzc2FnZS5wYXlsb2FkKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgTGlzdDxpbnQ+IGRhdGE7CiAgICBpbnQgb3Bjb2RlOwogICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCkgewogICAgICBpZiAobWVzc2FnZSBpcyBTdHJpbmcpIHsKICAgICAgICBvcGNvZGUgPSBfV2ViU29ja2V0T3Bjb2RlLlRFWFQ7CiAgICAgICAgZGF0YSA9IHV0ZjguZW5jb2RlKG1lc3NhZ2UpOwogICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UgaXMgTGlzdDxpbnQ+KSB7CiAgICAgICAgb3Bjb2RlID0gX1dlYlNvY2tldE9wY29kZS5CSU5BUlk7CiAgICAgICAgZGF0YSA9IG1lc3NhZ2U7CiAgICAgIH0gZWxzZSBpZiAobWVzc2FnZSBpcyBfRW5jb2RlZFN0cmluZykgewogICAgICAgIG9wY29kZSA9IF9XZWJTb2NrZXRPcGNvZGUuVEVYVDsKICAgICAgICBkYXRhID0gbWVzc2FnZS5ieXRlczsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihtZXNzYWdlKTsKICAgICAgfQoKICAgICAgaWYgKF9kZWZsYXRlSGVscGVyICE9IG51bGwpIHsKICAgICAgICBkYXRhID0gX2RlZmxhdGVIZWxwZXIucHJvY2Vzc091dGdvaW5nTWVzc2FnZShkYXRhKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgb3Bjb2RlID0gX1dlYlNvY2tldE9wY29kZS5URVhUOwogICAgfQogICAgYWRkRnJhbWUob3Bjb2RlLCBkYXRhKTsKICB9CgogIHZvaWQgYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgX2V2ZW50U2luay5hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgaW50IGNvZGUgPSB3ZWJTb2NrZXQuX291dENsb3NlQ29kZTsKICAgIFN0cmluZyByZWFzb24gPSB3ZWJTb2NrZXQuX291dENsb3NlUmVhc29uOwogICAgTGlzdDxpbnQ+IGRhdGE7CiAgICBpZiAoY29kZSAhPSBudWxsKSB7CiAgICAgIGRhdGEgPSBuZXcgTGlzdDxpbnQ+KCk7CiAgICAgIGRhdGEuYWRkKChjb2RlID4+IDgpICYgMHhGRik7CiAgICAgIGRhdGEuYWRkKGNvZGUgJiAweEZGKTsKICAgICAgaWYgKHJlYXNvbiAhPSBudWxsKSB7CiAgICAgICAgZGF0YS5hZGRBbGwodXRmOC5lbmNvZGUocmVhc29uKSk7CiAgICAgIH0KICAgIH0KICAgIGFkZEZyYW1lKF9XZWJTb2NrZXRPcGNvZGUuQ0xPU0UsIGRhdGEpOwogICAgX2V2ZW50U2luay5jbG9zZSgpOwogIH0KCiAgdm9pZCBhZGRGcmFtZShpbnQgb3Bjb2RlLCBMaXN0PGludD4gZGF0YSkgewogICAgY3JlYXRlRnJhbWUoCiAgICAgICAgICAgIG9wY29kZSwKICAgICAgICAgICAgZGF0YSwKICAgICAgICAgICAgd2ViU29ja2V0Ll9zZXJ2ZXJTaWRlLAogICAgICAgICAgICBfZGVmbGF0ZUhlbHBlciAhPSBudWxsICYmCiAgICAgICAgICAgICAgICAob3Bjb2RlID09IF9XZWJTb2NrZXRPcGNvZGUuVEVYVCB8fAogICAgICAgICAgICAgICAgICAgIG9wY29kZSA9PSBfV2ViU29ja2V0T3Bjb2RlLkJJTkFSWSkpCiAgICAgICAgLmZvckVhY2goKGUpIHsKICAgICAgX2V2ZW50U2luay5hZGQoZSk7CiAgICB9KTsKICB9CgogIHN0YXRpYyBJdGVyYWJsZTxMaXN0PGludD4+IGNyZWF0ZUZyYW1lKAogICAgICBpbnQgb3Bjb2RlLCBMaXN0PGludD4gZGF0YSwgYm9vbCBzZXJ2ZXJTaWRlLCBib29sIGNvbXByZXNzZWQpIHsKICAgIGJvb2wgbWFzayA9ICFzZXJ2ZXJTaWRlOyAvLyBNYXNraW5nIG5vdCBpbXBsZW1lbnRlZCBmb3Igc2VydmVyLgogICAgaW50IGRhdGFMZW5ndGggPSBkYXRhID09IG51bGwgPyAwIDogZGF0YS5sZW5ndGg7CiAgICAvLyBEZXRlcm1pbmUgdGhlIGhlYWRlciBzaXplLgogICAgaW50IGhlYWRlclNpemUgPSAobWFzaykgPyA2IDogMjsKICAgIGlmIChkYXRhTGVuZ3RoID4gNjU1MzUpIHsKICAgICAgaGVhZGVyU2l6ZSArPSA4OwogICAgfSBlbHNlIGlmIChkYXRhTGVuZ3RoID4gMTI1KSB7CiAgICAgIGhlYWRlclNpemUgKz0gMjsKICAgIH0KICAgIFVpbnQ4TGlzdCBoZWFkZXIgPSBuZXcgVWludDhMaXN0KGhlYWRlclNpemUpOwogICAgaW50IGluZGV4ID0gMDsKCiAgICAvLyBTZXQgRklOIGFuZCBvcGNvZGUuCiAgICB2YXIgaG9jID0gX1dlYlNvY2tldFByb3RvY29sVHJhbnNmb3JtZXIuRklOIHwKICAgICAgICAoY29tcHJlc3NlZCA/IF9XZWJTb2NrZXRQcm90b2NvbFRyYW5zZm9ybWVyLlJTVjEgOiAwKSB8CiAgICAgICAgKG9wY29kZSAmIF9XZWJTb2NrZXRQcm90b2NvbFRyYW5zZm9ybWVyLk9QQ09ERSk7CgogICAgaGVhZGVyW2luZGV4KytdID0gaG9jOwogICAgLy8gRGV0ZXJtaW5lIHNpemUgYW5kIHBvc2l0aW9uIG9mIGxlbmd0aCBmaWVsZC4KICAgIGludCBsZW5ndGhCeXRlcyA9IDE7CiAgICBpZiAoZGF0YUxlbmd0aCA+IDY1NTM1KSB7CiAgICAgIGhlYWRlcltpbmRleCsrXSA9IDEyNzsKICAgICAgbGVuZ3RoQnl0ZXMgPSA4OwogICAgfSBlbHNlIGlmIChkYXRhTGVuZ3RoID4gMTI1KSB7CiAgICAgIGhlYWRlcltpbmRleCsrXSA9IDEyNjsKICAgICAgbGVuZ3RoQnl0ZXMgPSAyOwogICAgfQogICAgLy8gV3JpdGUgdGhlIGxlbmd0aCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgaW50byB0aGUgaGVhZGVyLgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGhCeXRlczsgaSsrKSB7CiAgICAgIGhlYWRlcltpbmRleCsrXSA9IGRhdGFMZW5ndGggPj4gKCgobGVuZ3RoQnl0ZXMgLSAxKSAtIGkpICogOCkgJiAweEZGOwogICAgfQogICAgaWYgKG1hc2spIHsKICAgICAgaGVhZGVyWzFdIHw9IDEgPDwgNzsKICAgICAgdmFyIG1hc2tCeXRlcyA9IF9DcnlwdG9VdGlscy5nZXRSYW5kb21CeXRlcyg0KTsKICAgICAgaGVhZGVyLnNldFJhbmdlKGluZGV4LCBpbmRleCArIDQsIG1hc2tCeXRlcyk7CiAgICAgIGluZGV4ICs9IDQ7CiAgICAgIGlmIChkYXRhICE9IG51bGwpIHsKICAgICAgICBVaW50OExpc3QgbGlzdDsKICAgICAgICAvLyBJZiB0aGlzIGlzIGEgdGV4dCBtZXNzYWdlIGp1c3QgZG8gdGhlIG1hc2tpbmcgaW5zaWRlIHRoZQogICAgICAgIC8vIGVuY29kZWQgZGF0YS4KICAgICAgICBpZiAob3Bjb2RlID09IF9XZWJTb2NrZXRPcGNvZGUuVEVYVCAmJiBkYXRhIGlzIFVpbnQ4TGlzdCkgewogICAgICAgICAgbGlzdCA9IGRhdGE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChkYXRhIGlzIFVpbnQ4TGlzdCkgewogICAgICAgICAgICBsaXN0ID0gbmV3IFVpbnQ4TGlzdC5mcm9tTGlzdChkYXRhKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGxpc3QgPSBuZXcgVWludDhMaXN0KGRhdGEubGVuZ3RoKTsKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgaWYgKGRhdGFbaV0gPCAwIHx8IDI1NSA8IGRhdGFbaV0pIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJMaXN0IGVsZW1lbnQgaXMgbm90IGEgYnl0ZSB2YWx1ZSAiCiAgICAgICAgICAgICAgICAgICAgIih2YWx1ZSAke2RhdGFbaV19IGF0IGluZGV4ICRpKSIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBsaXN0W2ldID0gZGF0YVtpXTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb25zdCBpbnQgQkxPQ0tfU0laRSA9IDE2OwogICAgICAgIGludCBibG9ja0NvdW50ID0gbGlzdC5sZW5ndGggfi8gQkxPQ0tfU0laRTsKICAgICAgICBpZiAoYmxvY2tDb3VudCA+IDApIHsKICAgICAgICAgIC8vIENyZWF0ZSBtYXNrIGJsb2NrLgogICAgICAgICAgaW50IG1hc2sgPSAwOwogICAgICAgICAgZm9yIChpbnQgaSA9IDM7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICAgIG1hc2sgPSAobWFzayA8PCA4KSB8IG1hc2tCeXRlc1tpXTsKICAgICAgICAgIH0KICAgICAgICAgIEludDMyeDQgYmxvY2tNYXNrID0gbmV3IEludDMyeDQobWFzaywgbWFzaywgbWFzaywgbWFzayk7CiAgICAgICAgICBJbnQzMng0TGlzdCBibG9ja0J1ZmZlciA9CiAgICAgICAgICAgICAgbmV3IEludDMyeDRMaXN0LnZpZXcobGlzdC5idWZmZXIsIDAsIGJsb2NrQ291bnQpOwogICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBibG9ja0J1ZmZlci5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBibG9ja0J1ZmZlcltpXSBePSBibG9ja01hc2s7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIEhhbmRsZSBlbmQuCiAgICAgICAgZm9yIChpbnQgaSA9IGJsb2NrQ291bnQgKiBCTE9DS19TSVpFOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgbGlzdFtpXSBePSBtYXNrQnl0ZXNbaSAmIDNdOwogICAgICAgIH0KICAgICAgICBkYXRhID0gbGlzdDsKICAgICAgfQogICAgfQogICAgYXNzZXJ0KGluZGV4ID09IGhlYWRlclNpemUpOwogICAgaWYgKGRhdGEgPT0gbnVsbCkgewogICAgICByZXR1cm4gW2hlYWRlcl07CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gW2hlYWRlciwgZGF0YV07CiAgICB9CiAgfQp9CgpjbGFzcyBfV2ViU29ja2V0Q29uc3VtZXIgaW1wbGVtZW50cyBTdHJlYW1Db25zdW1lciB7CiAgZmluYWwgX1dlYlNvY2tldEltcGwgd2ViU29ja2V0OwogIGZpbmFsIFNvY2tldCBzb2NrZXQ7CiAgU3RyZWFtQ29udHJvbGxlciBfY29udHJvbGxlcjsKICBTdHJlYW1TdWJzY3JpcHRpb24gX3N1YnNjcmlwdGlvbjsKICBib29sIF9pc3N1ZWRQYXVzZSA9IGZhbHNlOwogIGJvb2wgX2Nsb3NlZCA9IGZhbHNlOwogIENvbXBsZXRlciBfY2xvc2VDb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPFdlYlNvY2tldD4oKTsKICBDb21wbGV0ZXIgX2NvbXBsZXRlcjsKCiAgX1dlYlNvY2tldENvbnN1bWVyKHRoaXMud2ViU29ja2V0LCB0aGlzLnNvY2tldCk7CgogIHZvaWQgX29uTGlzdGVuKCkgewogICAgaWYgKF9zdWJzY3JpcHRpb24gIT0gbnVsbCkgewogICAgICBfc3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogICAgfQogIH0KCiAgdm9pZCBfb25QYXVzZSgpIHsKICAgIGlmIChfc3Vic2NyaXB0aW9uICE9IG51bGwpIHsKICAgICAgX3N1YnNjcmlwdGlvbi5wYXVzZSgpOwogICAgfSBlbHNlIHsKICAgICAgX2lzc3VlZFBhdXNlID0gdHJ1ZTsKICAgIH0KICB9CgogIHZvaWQgX29uUmVzdW1lKCkgewogICAgaWYgKF9zdWJzY3JpcHRpb24gIT0gbnVsbCkgewogICAgICBfc3Vic2NyaXB0aW9uLnJlc3VtZSgpOwogICAgfSBlbHNlIHsKICAgICAgX2lzc3VlZFBhdXNlID0gZmFsc2U7CiAgICB9CiAgfQoKICB2b2lkIF9jYW5jZWwoKSB7CiAgICBpZiAoX3N1YnNjcmlwdGlvbiAhPSBudWxsKSB7CiAgICAgIHZhciBzdWJzY3JpcHRpb24gPSBfc3Vic2NyaXB0aW9uOwogICAgICBfc3Vic2NyaXB0aW9uID0gbnVsbDsKICAgICAgc3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogICAgfQogIH0KCiAgX2Vuc3VyZUNvbnRyb2xsZXIoKSB7CiAgICBpZiAoX2NvbnRyb2xsZXIgIT0gbnVsbCkgcmV0dXJuOwogICAgX2NvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcigKICAgICAgICBzeW5jOiB0cnVlLAogICAgICAgIG9uUGF1c2U6IF9vblBhdXNlLAogICAgICAgIG9uUmVzdW1lOiBfb25SZXN1bWUsCiAgICAgICAgb25DYW5jZWw6IF9vbkxpc3Rlbik7CiAgICB2YXIgc3RyZWFtID0gX2NvbnRyb2xsZXIuc3RyZWFtCiAgICAgICAgLnRyYW5zZm9ybShuZXcgX1dlYlNvY2tldE91dGdvaW5nVHJhbnNmb3JtZXIod2ViU29ja2V0KSk7CiAgICBzb2NrZXQuYWRkU3RyZWFtKHN0cmVhbSkudGhlbigoXykgewogICAgICBfZG9uZSgpOwogICAgICBfY2xvc2VDb21wbGV0ZXIuY29tcGxldGUod2ViU29ja2V0KTsKICAgIH0sIG9uRXJyb3I6IChlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICAgIF9jbG9zZWQgPSB0cnVlOwogICAgICBfY2FuY2VsKCk7CiAgICAgIGlmIChlcnJvciBpcyBBcmd1bWVudEVycm9yKSB7CiAgICAgICAgaWYgKCFfZG9uZShlcnJvciwgc3RhY2tUcmFjZSkpIHsKICAgICAgICAgIF9jbG9zZUNvbXBsZXRlci5jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2RvbmUoKTsKICAgICAgICBfY2xvc2VDb21wbGV0ZXIuY29tcGxldGUod2ViU29ja2V0KTsKICAgICAgfQogICAgfSk7CiAgfQoKICBib29sIF9kb25lKFtlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgaWYgKF9jb21wbGV0ZXIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGVycm9yICE9IG51bGwpIHsKICAgICAgX2NvbXBsZXRlci5jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgIH0gZWxzZSB7CiAgICAgIF9jb21wbGV0ZXIuY29tcGxldGUod2ViU29ja2V0KTsKICAgIH0KICAgIF9jb21wbGV0ZXIgPSBudWxsOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBGdXR1cmUgYWRkU3RyZWFtKHZhciBzdHJlYW0pIHsKICAgIGlmIChfY2xvc2VkKSB7CiAgICAgIHN0cmVhbS5saXN0ZW4obnVsbCkuY2FuY2VsKCk7CiAgICAgIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKHdlYlNvY2tldCk7CiAgICB9CiAgICBfZW5zdXJlQ29udHJvbGxlcigpOwogICAgX2NvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXIoKTsKICAgIF9zdWJzY3JpcHRpb24gPSBzdHJlYW0ubGlzdGVuKChkYXRhKSB7CiAgICAgIF9jb250cm9sbGVyLmFkZChkYXRhKTsKICAgIH0sIG9uRG9uZTogX2RvbmUsIG9uRXJyb3I6IF9kb25lLCBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIGlmIChfaXNzdWVkUGF1c2UpIHsKICAgICAgX3N1YnNjcmlwdGlvbi5wYXVzZSgpOwogICAgICBfaXNzdWVkUGF1c2UgPSBmYWxzZTsKICAgIH0KICAgIHJldHVybiBfY29tcGxldGVyLmZ1dHVyZTsKICB9CgogIEZ1dHVyZSBjbG9zZSgpIHsKICAgIF9lbnN1cmVDb250cm9sbGVyKCk7CiAgICBGdXR1cmUgY2xvc2VTb2NrZXQoKSB7CiAgICAgIHJldHVybiBzb2NrZXQuY2xvc2UoKS5jYXRjaEVycm9yKChfKSB7fSkudGhlbigoXykgPT4gd2ViU29ja2V0KTsKICAgIH0KCiAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgcmV0dXJuIF9jbG9zZUNvbXBsZXRlci5mdXR1cmUudGhlbigoXykgPT4gY2xvc2VTb2NrZXQoKSk7CiAgfQoKICB2b2lkIGFkZChkYXRhKSB7CiAgICBpZiAoX2Nsb3NlZCkgcmV0dXJuOwogICAgX2Vuc3VyZUNvbnRyb2xsZXIoKTsKICAgIC8vIFN0b3Agc2VuZGluZyBtZXNzYWdlIGlmIF9jb250cm9sbGVyIGhhcyBiZWVuIGNsb3NlZC4KICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvc2RrL2lzc3Vlcy8zNzQ0MQogICAgaWYgKF9jb250cm9sbGVyLmlzQ2xvc2VkKSByZXR1cm47CiAgICBfY29udHJvbGxlci5hZGQoZGF0YSk7CiAgfQoKICB2b2lkIGNsb3NlU29ja2V0KCkgewogICAgX2Nsb3NlZCA9IHRydWU7CiAgICBfY2FuY2VsKCk7CiAgICBjbG9zZSgpOwogIH0KfQoKY2xhc3MgX1dlYlNvY2tldEltcGwgZXh0ZW5kcyBTdHJlYW0gd2l0aCBfU2VydmljZU9iamVjdCBpbXBsZW1lbnRzIFdlYlNvY2tldCB7CiAgLy8gVXNlIGRlZmF1bHQgTWFwIHNvIHdlIGtlZXAgb3JkZXIuCiAgc3RhdGljIE1hcDxpbnQsIF9XZWJTb2NrZXRJbXBsPiBfd2ViU29ja2V0cyA9IG5ldyBNYXA8aW50LCBfV2ViU29ja2V0SW1wbD4oKTsKICBzdGF0aWMgY29uc3QgaW50IERFRkFVTFRfV0lORE9XX0JJVFMgPSAxNTsKICBzdGF0aWMgY29uc3QgU3RyaW5nIFBFUl9NRVNTQUdFX0RFRkxBVEUgPSAicGVybWVzc2FnZS1kZWZsYXRlIjsKCiAgZmluYWwgU3RyaW5nIHByb3RvY29sOwoKICBTdHJlYW1Db250cm9sbGVyIF9jb250cm9sbGVyOwogIFN0cmVhbVN1YnNjcmlwdGlvbiBfc3Vic2NyaXB0aW9uOwogIFN0cmVhbVNpbmsgX3Npbms7CgogIGZpbmFsIF9zb2NrZXQ7CiAgZmluYWwgYm9vbCBfc2VydmVyU2lkZTsKICBpbnQgX3JlYWR5U3RhdGUgPSBXZWJTb2NrZXQuY29ubmVjdGluZzsKICBib29sIF93cml0ZUNsb3NlZCA9IGZhbHNlOwogIGludCBfY2xvc2VDb2RlOwogIFN0cmluZyBfY2xvc2VSZWFzb247CiAgRHVyYXRpb24gX3BpbmdJbnRlcnZhbDsKICBUaW1lciBfcGluZ1RpbWVyOwogIF9XZWJTb2NrZXRDb25zdW1lciBfY29uc3VtZXI7CgogIGludCBfb3V0Q2xvc2VDb2RlOwogIFN0cmluZyBfb3V0Q2xvc2VSZWFzb247CiAgVGltZXIgX2Nsb3NlVGltZXI7CiAgX1dlYlNvY2tldFBlck1lc3NhZ2VEZWZsYXRlIF9kZWZsYXRlOwoKICBzdGF0aWMgZmluYWwgSHR0cENsaWVudCBfaHR0cENsaWVudCA9IG5ldyBIdHRwQ2xpZW50KCk7CgogIHN0YXRpYyBGdXR1cmU8V2ViU29ja2V0PiBjb25uZWN0KAogICAgICBTdHJpbmcgdXJsLCBJdGVyYWJsZTxTdHJpbmc+IHByb3RvY29scywgTWFwPFN0cmluZywgZHluYW1pYz4gaGVhZGVycywKICAgICAge0NvbXByZXNzaW9uT3B0aW9ucyBjb21wcmVzc2lvbjogQ29tcHJlc3Npb25PcHRpb25zLmNvbXByZXNzaW9uRGVmYXVsdH0pIHsKICAgIFVyaSB1cmkgPSBVcmkucGFyc2UodXJsKTsKICAgIGlmICh1cmkuc2NoZW1lICE9ICJ3cyIgJiYgdXJpLnNjaGVtZSAhPSAid3NzIikgewogICAgICB0aHJvdyBuZXcgV2ViU29ja2V0RXhjZXB0aW9uKCJVbnN1cHBvcnRlZCBVUkwgc2NoZW1lICcke3VyaS5zY2hlbWV9JyIpOwogICAgfQoKICAgIFJhbmRvbSByYW5kb20gPSBuZXcgUmFuZG9tKCk7CiAgICAvLyBHZW5lcmF0ZSAxNiByYW5kb20gYnl0ZXMuCiAgICBVaW50OExpc3Qgbm9uY2VEYXRhID0gbmV3IFVpbnQ4TGlzdCgxNik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsKICAgICAgbm9uY2VEYXRhW2ldID0gcmFuZG9tLm5leHRJbnQoMjU2KTsKICAgIH0KICAgIFN0cmluZyBub25jZSA9IF9DcnlwdG9VdGlscy5ieXRlc1RvQmFzZTY0KG5vbmNlRGF0YSk7CgogICAgdXJpID0gbmV3IFVyaSgKICAgICAgICBzY2hlbWU6IHVyaS5zY2hlbWUgPT0gIndzcyIgPyAiaHR0cHMiIDogImh0dHAiLAogICAgICAgIHVzZXJJbmZvOiB1cmkudXNlckluZm8sCiAgICAgICAgaG9zdDogdXJpLmhvc3QsCiAgICAgICAgcG9ydDogdXJpLnBvcnQsCiAgICAgICAgcGF0aDogdXJpLnBhdGgsCiAgICAgICAgcXVlcnk6IHVyaS5xdWVyeSwKICAgICAgICBmcmFnbWVudDogdXJpLmZyYWdtZW50KTsKICAgIHJldHVybiBfaHR0cENsaWVudC5vcGVuVXJsKCJHRVQiLCB1cmkpLnRoZW4oKHJlcXVlc3QpIHsKICAgICAgaWYgKHVyaS51c2VySW5mbyAhPSBudWxsICYmICF1cmkudXNlckluZm8uaXNFbXB0eSkgewogICAgICAgIC8vIElmIHRoZSBVUkwgY29udGFpbnMgdXNlciBpbmZvcm1hdGlvbiB1c2UgdGhhdCBmb3IgYmFzaWMKICAgICAgICAvLyBhdXRob3JpemF0aW9uLgogICAgICAgIFN0cmluZyBhdXRoID0gX0NyeXB0b1V0aWxzLmJ5dGVzVG9CYXNlNjQodXRmOC5lbmNvZGUodXJpLnVzZXJJbmZvKSk7CiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChIdHRwSGVhZGVycy5hdXRob3JpemF0aW9uSGVhZGVyLCAiQmFzaWMgJGF1dGgiKTsKICAgICAgfQogICAgICBpZiAoaGVhZGVycyAhPSBudWxsKSB7CiAgICAgICAgaGVhZGVycy5mb3JFYWNoKChmaWVsZCwgdmFsdWUpID0+IHJlcXVlc3QuaGVhZGVycy5hZGQoZmllbGQsIHZhbHVlKSk7CiAgICAgIH0KICAgICAgLy8gU2V0dXAgdGhlIGluaXRpYWwgaGFuZHNoYWtlLgogICAgICByZXF1ZXN0LmhlYWRlcnMKICAgICAgICAuLnNldChIdHRwSGVhZGVycy5jb25uZWN0aW9uSGVhZGVyLCAiVXBncmFkZSIpCiAgICAgICAgLi5zZXQoSHR0cEhlYWRlcnMudXBncmFkZUhlYWRlciwgIndlYnNvY2tldCIpCiAgICAgICAgLi5zZXQoIlNlYy1XZWJTb2NrZXQtS2V5Iiwgbm9uY2UpCiAgICAgICAgLi5zZXQoIkNhY2hlLUNvbnRyb2wiLCAibm8tY2FjaGUiKQogICAgICAgIC4uc2V0KCJTZWMtV2ViU29ja2V0LVZlcnNpb24iLCAiMTMiKTsKICAgICAgaWYgKHByb3RvY29scyAhPSBudWxsKSB7CiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmFkZCgiU2VjLVdlYlNvY2tldC1Qcm90b2NvbCIsIHByb3RvY29scy50b0xpc3QoKSk7CiAgICAgIH0KCiAgICAgIGlmIChjb21wcmVzc2lvbi5lbmFibGVkKSB7CiAgICAgICAgcmVxdWVzdC5oZWFkZXJzCiAgICAgICAgICAgIC5hZGQoIlNlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucyIsIGNvbXByZXNzaW9uLl9jcmVhdGVIZWFkZXIoKSk7CiAgICAgIH0KCiAgICAgIHJldHVybiByZXF1ZXN0LmNsb3NlKCk7CiAgICB9KS50aGVuKChyZXNwb25zZSkgewogICAgICB2b2lkIGVycm9yKFN0cmluZyBtZXNzYWdlKSB7CiAgICAgICAgLy8gRmx1c2ggZGF0YS4KICAgICAgICByZXNwb25zZS5kZXRhY2hTb2NrZXQoKS50aGVuKChzb2NrZXQpIHsKICAgICAgICAgIHNvY2tldC5kZXN0cm95KCk7CiAgICAgICAgfSk7CiAgICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldEV4Y2VwdGlvbihtZXNzYWdlKTsKICAgICAgfQoKICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgIT0gSHR0cFN0YXR1cy5zd2l0Y2hpbmdQcm90b2NvbHMgfHwKICAgICAgICAgIHJlc3BvbnNlLmhlYWRlcnNbSHR0cEhlYWRlcnMuY29ubmVjdGlvbkhlYWRlcl0gPT0gbnVsbCB8fAogICAgICAgICAgIXJlc3BvbnNlLmhlYWRlcnNbSHR0cEhlYWRlcnMuY29ubmVjdGlvbkhlYWRlcl0KICAgICAgICAgICAgICAuYW55KCh2YWx1ZSkgPT4gdmFsdWUudG9Mb3dlckNhc2UoKSA9PSAidXBncmFkZSIpIHx8CiAgICAgICAgICByZXNwb25zZS5oZWFkZXJzLnZhbHVlKEh0dHBIZWFkZXJzLnVwZ3JhZGVIZWFkZXIpLnRvTG93ZXJDYXNlKCkgIT0KICAgICAgICAgICAgICAid2Vic29ja2V0IikgewogICAgICAgIGVycm9yKCJDb25uZWN0aW9uIHRvICckdXJpJyB3YXMgbm90IHVwZ3JhZGVkIHRvIHdlYnNvY2tldCIpOwogICAgICB9CiAgICAgIFN0cmluZyBhY2NlcHQgPSByZXNwb25zZS5oZWFkZXJzLnZhbHVlKCJTZWMtV2ViU29ja2V0LUFjY2VwdCIpOwogICAgICBpZiAoYWNjZXB0ID09IG51bGwpIHsKICAgICAgICBlcnJvcigiUmVzcG9uc2UgZGlkIG5vdCBjb250YWluIGEgJ1NlYy1XZWJTb2NrZXQtQWNjZXB0JyBoZWFkZXIiKTsKICAgICAgfQogICAgICBfU0hBMSBzaGExID0gbmV3IF9TSEExKCk7CiAgICAgIHNoYTEuYWRkKCIkbm9uY2UkX3dlYlNvY2tldEdVSUQiLmNvZGVVbml0cyk7CiAgICAgIExpc3Q8aW50PiBleHBlY3RlZEFjY2VwdCA9IHNoYTEuY2xvc2UoKTsKICAgICAgTGlzdDxpbnQ+IHJlY2VpdmVkQWNjZXB0ID0gX0NyeXB0b1V0aWxzLmJhc2U2NFN0cmluZ1RvQnl0ZXMoYWNjZXB0KTsKICAgICAgaWYgKGV4cGVjdGVkQWNjZXB0Lmxlbmd0aCAhPSByZWNlaXZlZEFjY2VwdC5sZW5ndGgpIHsKICAgICAgICBlcnJvcigiUmVzcG9uc2UgaGVhZGVyICdTZWMtV2ViU29ja2V0LUFjY2VwdCcgaXMgdGhlIHdyb25nIGxlbmd0aCIpOwogICAgICB9CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWRBY2NlcHQubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoZXhwZWN0ZWRBY2NlcHRbaV0gIT0gcmVjZWl2ZWRBY2NlcHRbaV0pIHsKICAgICAgICAgIGVycm9yKCJCYWQgcmVzcG9uc2UgJ1NlYy1XZWJTb2NrZXQtQWNjZXB0JyBoZWFkZXIiKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFyIHByb3RvY29sID0gcmVzcG9uc2UuaGVhZGVycy52YWx1ZSgnU2VjLVdlYlNvY2tldC1Qcm90b2NvbCcpOwoKICAgICAgX1dlYlNvY2tldFBlck1lc3NhZ2VEZWZsYXRlIGRlZmxhdGUgPQogICAgICAgICAgbmVnb3RpYXRlQ2xpZW50Q29tcHJlc3Npb24ocmVzcG9uc2UsIGNvbXByZXNzaW9uKTsKCiAgICAgIHJldHVybiByZXNwb25zZS5kZXRhY2hTb2NrZXQoKS50aGVuPFdlYlNvY2tldD4oKHNvY2tldCkgPT4KICAgICAgICAgIG5ldyBfV2ViU29ja2V0SW1wbC5fZnJvbVNvY2tldCgKICAgICAgICAgICAgICBzb2NrZXQsIHByb3RvY29sLCBjb21wcmVzc2lvbiwgZmFsc2UsIGRlZmxhdGUpKTsKICAgIH0pOwogIH0KCiAgc3RhdGljIF9XZWJTb2NrZXRQZXJNZXNzYWdlRGVmbGF0ZSBuZWdvdGlhdGVDbGllbnRDb21wcmVzc2lvbigKICAgICAgSHR0cENsaWVudFJlc3BvbnNlIHJlc3BvbnNlLCBDb21wcmVzc2lvbk9wdGlvbnMgY29tcHJlc3Npb24pIHsKICAgIFN0cmluZyBleHRlbnNpb25IZWFkZXIgPSByZXNwb25zZS5oZWFkZXJzLnZhbHVlKCdTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMnKTsKCiAgICBpZiAoZXh0ZW5zaW9uSGVhZGVyID09IG51bGwpIHsKICAgICAgZXh0ZW5zaW9uSGVhZGVyID0gIiI7CiAgICB9CgogICAgdmFyIGh2ID0gSGVhZGVyVmFsdWUucGFyc2UoZXh0ZW5zaW9uSGVhZGVyLCB2YWx1ZVNlcGFyYXRvcjogJywnKTsKCiAgICBpZiAoY29tcHJlc3Npb24uZW5hYmxlZCAmJiBodi52YWx1ZSA9PSBQRVJfTUVTU0FHRV9ERUZMQVRFKSB7CiAgICAgIHZhciBzZXJ2ZXJOb0NvbnRleHRUYWtlb3ZlciA9CiAgICAgICAgICBodi5wYXJhbWV0ZXJzLmNvbnRhaW5zS2V5KF9zZXJ2ZXJOb0NvbnRleHRUYWtlb3Zlcik7CiAgICAgIHZhciBjbGllbnROb0NvbnRleHRUYWtlb3ZlciA9CiAgICAgICAgICBodi5wYXJhbWV0ZXJzLmNvbnRhaW5zS2V5KF9jbGllbnROb0NvbnRleHRUYWtlb3Zlcik7CgogICAgICBpbnQgZ2V0V2luZG93Qml0cyhTdHJpbmcgdHlwZSkgewogICAgICAgIHZhciBvID0gaHYucGFyYW1ldGVyc1t0eXBlXTsKICAgICAgICBpZiAobyA9PSBudWxsKSB7CiAgICAgICAgICByZXR1cm4gREVGQVVMVF9XSU5ET1dfQklUUzsKICAgICAgICB9CgogICAgICAgIHJldHVybiBpbnQucGFyc2Uobywgb25FcnJvcjogKHMpID0+IERFRkFVTFRfV0lORE9XX0JJVFMpOwogICAgICB9CgogICAgICByZXR1cm4gbmV3IF9XZWJTb2NrZXRQZXJNZXNzYWdlRGVmbGF0ZSgKICAgICAgICAgIGNsaWVudE1heFdpbmRvd0JpdHM6IGdldFdpbmRvd0JpdHMoX2NsaWVudE1heFdpbmRvd0JpdHMpLAogICAgICAgICAgc2VydmVyTWF4V2luZG93Qml0czogZ2V0V2luZG93Qml0cyhfc2VydmVyTWF4V2luZG93Qml0cyksCiAgICAgICAgICBjbGllbnROb0NvbnRleHRUYWtlb3ZlcjogY2xpZW50Tm9Db250ZXh0VGFrZW92ZXIsCiAgICAgICAgICBzZXJ2ZXJOb0NvbnRleHRUYWtlb3Zlcjogc2VydmVyTm9Db250ZXh0VGFrZW92ZXIpOwogICAgfQoKICAgIHJldHVybiBudWxsOwogIH0KCiAgX1dlYlNvY2tldEltcGwuX2Zyb21Tb2NrZXQoCiAgICAgIHRoaXMuX3NvY2tldCwgdGhpcy5wcm90b2NvbCwgQ29tcHJlc3Npb25PcHRpb25zIGNvbXByZXNzaW9uLAogICAgICBbdGhpcy5fc2VydmVyU2lkZSA9IGZhbHNlLCBfV2ViU29ja2V0UGVyTWVzc2FnZURlZmxhdGUgZGVmbGF0ZV0pIHsKICAgIF9jb25zdW1lciA9IG5ldyBfV2ViU29ja2V0Q29uc3VtZXIodGhpcywgX3NvY2tldCk7CiAgICBfc2luayA9IG5ldyBfU3RyZWFtU2lua0ltcGwoX2NvbnN1bWVyKTsKICAgIF9yZWFkeVN0YXRlID0gV2ViU29ja2V0Lm9wZW47CiAgICBfZGVmbGF0ZSA9IGRlZmxhdGU7CgogICAgdmFyIHRyYW5zZm9ybWVyID0gbmV3IF9XZWJTb2NrZXRQcm90b2NvbFRyYW5zZm9ybWVyKF9zZXJ2ZXJTaWRlLCBfZGVmbGF0ZSk7CiAgICBfc3Vic2NyaXB0aW9uID0gdHJhbnNmb3JtZXIuYmluZChfc29ja2V0KS5saXN0ZW4oKGRhdGEpIHsKICAgICAgaWYgKGRhdGEgaXMgX1dlYlNvY2tldFBpbmcpIHsKICAgICAgICBpZiAoIV93cml0ZUNsb3NlZCkgX2NvbnN1bWVyLmFkZChuZXcgX1dlYlNvY2tldFBvbmcoZGF0YS5wYXlsb2FkKSk7CiAgICAgIH0gZWxzZSBpZiAoZGF0YSBpcyBfV2ViU29ja2V0UG9uZykgewogICAgICAgIC8vIFNpbXBseSBzZXQgcGluZ0ludGVydmFsLCBhcyBpdCdsbCBjYW5jZWwgYW55IHRpbWVycy4KICAgICAgICBwaW5nSW50ZXJ2YWwgPSBfcGluZ0ludGVydmFsOwogICAgICB9IGVsc2UgewogICAgICAgIF9jb250cm9sbGVyLmFkZChkYXRhKTsKICAgICAgfQogICAgfSwgb25FcnJvcjogKGVycm9yLCBzdGFja1RyYWNlKSB7CiAgICAgIGlmIChfY2xvc2VUaW1lciAhPSBudWxsKSBfY2xvc2VUaW1lci5jYW5jZWwoKTsKICAgICAgaWYgKGVycm9yIGlzIEZvcm1hdEV4Y2VwdGlvbikgewogICAgICAgIF9jbG9zZShXZWJTb2NrZXRTdGF0dXMuSU5WQUxJRF9GUkFNRV9QQVlMT0FEX0RBVEEpOwogICAgICB9IGVsc2UgewogICAgICAgIF9jbG9zZShXZWJTb2NrZXRTdGF0dXMuUFJPVE9DT0xfRVJST1IpOwogICAgICB9CiAgICAgIC8vIEFuIGVycm9yIGhhcHBlbmVkLCBzZXQgdGhlIGNsb3NlIGNvZGUgc2V0IGFib3ZlLgogICAgICBfY2xvc2VDb2RlID0gX291dENsb3NlQ29kZTsKICAgICAgX2Nsb3NlUmVhc29uID0gX291dENsb3NlUmVhc29uOwogICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgfSwgb25Eb25lOiAoKSB7CiAgICAgIGlmIChfY2xvc2VUaW1lciAhPSBudWxsKSBfY2xvc2VUaW1lci5jYW5jZWwoKTsKICAgICAgaWYgKF9yZWFkeVN0YXRlID09IFdlYlNvY2tldC5vcGVuKSB7CiAgICAgICAgX3JlYWR5U3RhdGUgPSBXZWJTb2NrZXQuY2xvc2luZzsKICAgICAgICBpZiAoIV9pc1Jlc2VydmVkU3RhdHVzQ29kZSh0cmFuc2Zvcm1lci5jbG9zZUNvZGUpKSB7CiAgICAgICAgICBfY2xvc2UodHJhbnNmb3JtZXIuY2xvc2VDb2RlLCB0cmFuc2Zvcm1lci5jbG9zZVJlYXNvbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF9jbG9zZSgpOwogICAgICAgIH0KICAgICAgICBfcmVhZHlTdGF0ZSA9IFdlYlNvY2tldC5jbG9zZWQ7CiAgICAgIH0KICAgICAgLy8gUHJvdG9jb2wgY2xvc2UsIHVzZSBjbG9zZSBjb2RlIGZyb20gdHJhbnNmb3JtZXIuCiAgICAgIF9jbG9zZUNvZGUgPSB0cmFuc2Zvcm1lci5jbG9zZUNvZGU7CiAgICAgIF9jbG9zZVJlYXNvbiA9IHRyYW5zZm9ybWVyLmNsb3NlUmVhc29uOwogICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgfSwgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICBfc3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgICBfY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyKAogICAgICAgIHN5bmM6IHRydWUsCiAgICAgICAgb25MaXN0ZW46IF9zdWJzY3JpcHRpb24ucmVzdW1lLAogICAgICAgIG9uQ2FuY2VsOiAoKSB7CiAgICAgICAgICBfc3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogICAgICAgICAgX3N1YnNjcmlwdGlvbiA9IG51bGw7CiAgICAgICAgfSwKICAgICAgICBvblBhdXNlOiBfc3Vic2NyaXB0aW9uLnBhdXNlLAogICAgICAgIG9uUmVzdW1lOiBfc3Vic2NyaXB0aW9uLnJlc3VtZSk7CgogICAgX3dlYlNvY2tldHNbX3NlcnZpY2VJZF0gPSB0aGlzOwogIH0KCiAgU3RyZWFtU3Vic2NyaXB0aW9uIGxpc3Rlbih2b2lkIG9uRGF0YShtZXNzYWdlKSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIHJldHVybiBfY29udHJvbGxlci5zdHJlYW0ubGlzdGVuKG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLCBvbkRvbmU6IG9uRG9uZSwgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgfQoKICBEdXJhdGlvbiBnZXQgcGluZ0ludGVydmFsID0+IF9waW5nSW50ZXJ2YWw7CgogIHZvaWQgc2V0IHBpbmdJbnRlcnZhbChEdXJhdGlvbiBpbnRlcnZhbCkgewogICAgaWYgKF93cml0ZUNsb3NlZCkgcmV0dXJuOwogICAgaWYgKF9waW5nVGltZXIgIT0gbnVsbCkgX3BpbmdUaW1lci5jYW5jZWwoKTsKICAgIF9waW5nSW50ZXJ2YWwgPSBpbnRlcnZhbDsKCiAgICBpZiAoX3BpbmdJbnRlcnZhbCA9PSBudWxsKSByZXR1cm47CgogICAgX3BpbmdUaW1lciA9IG5ldyBUaW1lcihfcGluZ0ludGVydmFsLCAoKSB7CiAgICAgIGlmIChfd3JpdGVDbG9zZWQpIHJldHVybjsKICAgICAgX2NvbnN1bWVyLmFkZChuZXcgX1dlYlNvY2tldFBpbmcoKSk7CiAgICAgIF9waW5nVGltZXIgPSBuZXcgVGltZXIoX3BpbmdJbnRlcnZhbCwgKCkgewogICAgICAgIC8vIE5vIHBvbmcgcmVjZWl2ZWQuCiAgICAgICAgX2Nsb3NlKFdlYlNvY2tldFN0YXR1cy5HT0lOR19BV0FZKTsKICAgICAgfSk7CiAgICB9KTsKICB9CgogIGludCBnZXQgcmVhZHlTdGF0ZSA9PiBfcmVhZHlTdGF0ZTsKCiAgU3RyaW5nIGdldCBleHRlbnNpb25zID0+IG51bGw7CiAgaW50IGdldCBjbG9zZUNvZGUgPT4gX2Nsb3NlQ29kZTsKICBTdHJpbmcgZ2V0IGNsb3NlUmVhc29uID0+IF9jbG9zZVJlYXNvbjsKCiAgdm9pZCBhZGQoZGF0YSkgewogICAgX3NpbmsuYWRkKGRhdGEpOwogIH0KCiAgdm9pZCBhZGRVdGY4VGV4dChMaXN0PGludD4gYnl0ZXMpIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGJ5dGVzLCAiYnl0ZXMiKTsKICAgIF9zaW5rLmFkZChuZXcgX0VuY29kZWRTdHJpbmcoYnl0ZXMpKTsKICB9CgogIHZvaWQgYWRkRXJyb3IoZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICBfc2luay5hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICBGdXR1cmUgYWRkU3RyZWFtKFN0cmVhbSBzdHJlYW0pID0+IF9zaW5rLmFkZFN0cmVhbShzdHJlYW0pOwogIEZ1dHVyZSBnZXQgZG9uZSA9PiBfc2luay5kb25lOwoKICBGdXR1cmUgY2xvc2UoW2ludCBjb2RlLCBTdHJpbmcgcmVhc29uXSkgewogICAgaWYgKF9pc1Jlc2VydmVkU3RhdHVzQ29kZShjb2RlKSkgewogICAgICB0aHJvdyBuZXcgV2ViU29ja2V0RXhjZXB0aW9uKCJSZXNlcnZlZCBzdGF0dXMgY29kZSAkY29kZSIpOwogICAgfQogICAgaWYgKF9vdXRDbG9zZUNvZGUgPT0gbnVsbCkgewogICAgICBfb3V0Q2xvc2VDb2RlID0gY29kZTsKICAgICAgX291dENsb3NlUmVhc29uID0gcmVhc29uOwogICAgfQogICAgaWYgKCFfY29udHJvbGxlci5pc0Nsb3NlZCkgewogICAgICAvLyBJZiBhIGNsb3NlIGhhcyBub3QgeWV0IGJlZW4gcmVjZWl2ZWQgZnJvbSB0aGUgb3RoZXIgZW5kIHRoZW4KICAgICAgLy8gICAxKSBtYWtlIHN1cmUgdG8gbGlzdGVuIG9uIHRoZSBzdHJlYW0gc28gdGhlIGNsb3NlIGZyYW1lIHdpbGwgYmUKICAgICAgLy8gICAgICBwcm9jZXNzZWQgaWYgcmVjZWl2ZWQuCiAgICAgIC8vICAgMikgc2V0IGEgdGltZXIgdGVybWluYXRlIHRoZSBjb25uZWN0aW9uIGlmIGEgY2xvc2UgZnJhbWUgaXMKICAgICAgLy8gICAgICBub3QgcmVjZWl2ZWQuCiAgICAgIGlmICghX2NvbnRyb2xsZXIuaGFzTGlzdGVuZXIgJiYgX3N1YnNjcmlwdGlvbiAhPSBudWxsKSB7CiAgICAgICAgX2NvbnRyb2xsZXIuc3RyZWFtLmRyYWluKCkuY2F0Y2hFcnJvcigoXykgPT4ge30pOwogICAgICB9CiAgICAgIGlmIChfY2xvc2VUaW1lciA9PSBudWxsKSB7CiAgICAgICAgLy8gV2hlbiBjbG9zaW5nIHRoZSB3ZWItc29ja2V0LCB3ZSBubyBsb25nZXIgYWNjZXB0IGRhdGEuCiAgICAgICAgX2Nsb3NlVGltZXIgPSBuZXcgVGltZXIoY29uc3QgRHVyYXRpb24oc2Vjb25kczogNSksICgpIHsKICAgICAgICAgIC8vIFJldXNlIGNvZGUgYW5kIHJlYXNvbiBmcm9tIHRoZSBsb2NhbCBjbG9zZS4KICAgICAgICAgIF9jbG9zZUNvZGUgPSBfb3V0Q2xvc2VDb2RlOwogICAgICAgICAgX2Nsb3NlUmVhc29uID0gX291dENsb3NlUmVhc29uOwogICAgICAgICAgaWYgKF9zdWJzY3JpcHRpb24gIT0gbnVsbCkgX3N1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgICAgICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICAgICAgICBfd2ViU29ja2V0cy5yZW1vdmUoX3NlcnZpY2VJZCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfc2luay5jbG9zZSgpOwogIH0KCiAgc3RhdGljIFN0cmluZyBnZXQgdXNlckFnZW50ID0+IF9odHRwQ2xpZW50LnVzZXJBZ2VudDsKCiAgc3RhdGljIHNldCB1c2VyQWdlbnQoU3RyaW5nIHVzZXJBZ2VudCkgewogICAgX2h0dHBDbGllbnQudXNlckFnZW50ID0gdXNlckFnZW50OwogIH0KCiAgdm9pZCBfY2xvc2UoW2ludCBjb2RlLCBTdHJpbmcgcmVhc29uXSkgewogICAgaWYgKF93cml0ZUNsb3NlZCkgcmV0dXJuOwogICAgaWYgKF9vdXRDbG9zZUNvZGUgPT0gbnVsbCkgewogICAgICBfb3V0Q2xvc2VDb2RlID0gY29kZTsKICAgICAgX291dENsb3NlUmVhc29uID0gcmVhc29uOwogICAgfQogICAgX3dyaXRlQ2xvc2VkID0gdHJ1ZTsKICAgIF9jb25zdW1lci5jbG9zZVNvY2tldCgpOwogICAgX3dlYlNvY2tldHMucmVtb3ZlKF9zZXJ2aWNlSWQpOwogIH0KCiAgU3RyaW5nIGdldCBfc2VydmljZVR5cGVQYXRoID0+ICdpby93ZWJzb2NrZXRzJzsKICBTdHJpbmcgZ2V0IF9zZXJ2aWNlVHlwZU5hbWUgPT4gJ1dlYlNvY2tldCc7CgogIE1hcDxTdHJpbmcsIGR5bmFtaWM+IF90b0pTT04oYm9vbCByZWYpIHsKICAgIHZhciBuYW1lID0gJyR7X3NvY2tldC5hZGRyZXNzLmhvc3R9OiR7X3NvY2tldC5wb3J0fSc7CiAgICB2YXIgciA9IDxTdHJpbmcsIGR5bmFtaWM+ewogICAgICAnaWQnOiBfc2VydmljZVBhdGgsCiAgICAgICd0eXBlJzogX3NlcnZpY2VUeXBlKHJlZiksCiAgICAgICduYW1lJzogbmFtZSwKICAgICAgJ3VzZXJfbmFtZSc6IG5hbWUsCiAgICB9OwogICAgaWYgKHJlZikgewogICAgICByZXR1cm4gcjsKICAgIH0KICAgIHRyeSB7CiAgICAgIHJbJ3NvY2tldCddID0gX3NvY2tldC5fdG9KU09OKHRydWUpOwogICAgfSBjYXRjaCAoXykgewogICAgICByWydzb2NrZXQnXSA9IHsKICAgICAgICAnaWQnOiBfc2VydmljZVBhdGgsCiAgICAgICAgJ3R5cGUnOiAnQFNvY2tldCcsCiAgICAgICAgJ25hbWUnOiAnVXNlclNvY2tldCcsCiAgICAgICAgJ3VzZXJfbmFtZSc6ICdVc2VyU29ja2V0JywKICAgICAgfTsKICAgIH0KICAgIHJldHVybiByOwogIH0KCiAgc3RhdGljIGJvb2wgX2lzUmVzZXJ2ZWRTdGF0dXNDb2RlKGludCBjb2RlKSB7CiAgICByZXR1cm4gY29kZSAhPSBudWxsICYmCiAgICAgICAgKGNvZGUgPCBXZWJTb2NrZXRTdGF0dXMuTk9STUFMX0NMT1NVUkUgfHwKICAgICAgICAgICAgY29kZSA9PSBXZWJTb2NrZXRTdGF0dXMuUkVTRVJWRURfMTAwNCB8fAogICAgICAgICAgICBjb2RlID09IFdlYlNvY2tldFN0YXR1cy5OT19TVEFUVVNfUkVDRUlWRUQgfHwKICAgICAgICAgICAgY29kZSA9PSBXZWJTb2NrZXRTdGF0dXMuQUJOT1JNQUxfQ0xPU1VSRSB8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RU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0Ll9odHRwOwoKY2xhc3MgX0NyeXB0b1V0aWxzIHsKICBzdGF0aWMgY29uc3QgaW50IFBBRCA9IDYxOyAvLyAnPScKICBzdGF0aWMgY29uc3QgaW50IENSID0gMTM7IC8vICdccicKICBzdGF0aWMgY29uc3QgaW50IExGID0gMTA7IC8vICdcbicKICBzdGF0aWMgY29uc3QgaW50IExJTkVfTEVOR1RIID0gNzY7CgogIHN0YXRpYyBjb25zdCBTdHJpbmcgX2VuY29kZVRhYmxlID0KICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iOwoKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9lbmNvZGVUYWJsZVVybFNhZmUgPQogICAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODktXyI7CgogIC8vIExvb2t1cCB0YWJsZSB1c2VkIGZvciBmaW5kaW5nIEJhc2UgNjQgYWxwaGFiZXQgaW5kZXggb2YgYSBnaXZlbiBieXRlLgogIC8vIC0yIDogT3V0c2lkZSBCYXNlIDY0IGFscGhhYmV0LgogIC8vIC0xIDogJ1xyJyBvciAnXG4nCiAgLy8gIDAgOiA9IChQYWRkaW5nIGNoYXJhY3RlcikuCiAgLy8gPjAgOiBCYXNlIDY0IGFscGhhYmV0IGluZGV4IG9mIGdpdmVuIGJ5dGUuCiAgc3RhdGljIGNvbnN0IExpc3Q8aW50PiBfZGVjb2RlVGFibGUgPSBjb25zdCBbCiAgICAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTEsIC0yLCAtMiwgLTEsIC0yLCAtMiwgLy8KICAgIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAvLwogICAgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCA2MiwgLTIsIDYyLCAtMiwgNjMsIC8vCiAgICA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgLTIsIC0yLCAtMiwgMDAsIC0yLCAtMiwgLy8KICAgIC0yLCAwMCwgMDEsIDAyLCAwMywgMDQsIDA1LCAwNiwgMDcsIDA4LCAwOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAvLwogICAgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAtMiwgLTIsIC0yLCAtMiwgNjMsIC8vCiAgICAtMiwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgMzgsIDM5LCA0MCwgLy8KICAgIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgLTIsIC0yLCAtMiwgLTIsIC0yLCAvLwogICAgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC8vCiAgICAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLy8KICAgIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAvLwogICAgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC8vCiAgICAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLy8KICAgIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAvLwogICAgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC8vCiAgICAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMgogIF07CgogIHN0YXRpYyBSYW5kb20gX3JuZyA9IG5ldyBSYW5kb20uc2VjdXJlKCk7CgogIHN0YXRpYyBVaW50OExpc3QgZ2V0UmFuZG9tQnl0ZXMoaW50IGNvdW50KSB7CiAgICBmaW5hbCBVaW50OExpc3QgcmVzdWx0ID0gbmV3IFVpbnQ4TGlzdChjb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgcmVzdWx0W2ldID0gX3JuZy5uZXh0SW50KDB4ZmYpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBTdHJpbmcgYnl0ZXNUb0hleChMaXN0PGludD4gYnl0ZXMpIHsKICAgIHZhciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBmb3IgKHZhciBwYXJ0IGluIGJ5dGVzKSB7CiAgICAgIHJlc3VsdC53cml0ZSgnJHtwYXJ0IDwgMTYgPyAnMCcgOiAnJ30ke3BhcnQudG9SYWRpeFN0cmluZygxNil9Jyk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiAgfQoKICBzdGF0aWMgU3RyaW5nIGJ5dGVzVG9CYXNlNjQoTGlzdDxpbnQ+IGJ5dGVzLAogICAgICBbYm9vbCB1cmxTYWZlID0gZmFsc2UsIGJvb2wgYWRkTGluZVNlcGFyYXRvciA9IGZhbHNlXSkgewogICAgaW50IGxlbiA9IGJ5dGVzLmxlbmd0aDsKICAgIGlmIChsZW4gPT0gMCkgewogICAgICByZXR1cm4gIiI7CiAgICB9CiAgICBmaW5hbCBTdHJpbmcgbG9va3VwID0gdXJsU2FmZSA/IF9lbmNvZGVUYWJsZVVybFNhZmUgOiBfZW5jb2RlVGFibGU7CiAgICAvLyBTaXplIG9mIDI0IGJpdCBjaHVua3MuCiAgICBmaW5hbCBpbnQgcmVtYWluZGVyTGVuZ3RoID0gbGVuLnJlbWFpbmRlcigzKTsKICAgIGZpbmFsIGludCBjaHVua0xlbmd0aCA9IGxlbiAtIHJlbWFpbmRlckxlbmd0aDsKICAgIC8vIFNpemUgb2YgYmFzZSBvdXRwdXQuCiAgICBpbnQgb3V0cHV0TGVuID0gKChsZW4gfi8gMykgKiA0KSArICgocmVtYWluZGVyTGVuZ3RoID4gMCkgPyA0IDogMCk7CiAgICAvLyBBZGQgZXh0cmEgZm9yIGxpbmUgc2VwYXJhdG9ycy4KICAgIGlmIChhZGRMaW5lU2VwYXJhdG9yKSB7CiAgICAgIG91dHB1dExlbiArPSAoKG91dHB1dExlbiAtIDEpIH4vIExJTkVfTEVOR1RIKSA8PCAxOwogICAgfQogICAgTGlzdDxpbnQ+IG91dCA9IG5ldyBMaXN0PGludD4ob3V0cHV0TGVuKTsKCiAgICAvLyBFbmNvZGUgMjQgYml0IGNodW5rcy4KICAgIGludCBqID0gMCwgaSA9IDAsIGMgPSAwOwogICAgd2hpbGUgKGkgPCBjaHVua0xlbmd0aCkgewogICAgICBpbnQgeCA9ICgoYnl0ZXNbaSsrXSA8PCAxNikgJiAweEZGRkZGRikgfAogICAgICAgICAgKChieXRlc1tpKytdIDw8IDgpICYgMHhGRkZGRkYpIHwKICAgICAgICAgIGJ5dGVzW2krK107CiAgICAgIG91dFtqKytdID0gbG9va3VwLmNvZGVVbml0QXQoeCA+PiAxOCk7CiAgICAgIG91dFtqKytdID0gbG9va3VwLmNvZGVVbml0QXQoKHggPj4gMTIpICYgMHgzRik7CiAgICAgIG91dFtqKytdID0gbG9va3VwLmNvZGVVbml0QXQoKHggPj4gNikgJiAweDNGKTsKICAgICAgb3V0W2orK10gPSBsb29rdXAuY29kZVVuaXRBdCh4ICYgMHgzZik7CiAgICAgIC8vIEFkZCBvcHRpb25hbCBsaW5lIHNlcGFyYXRvciBmb3IgZWFjaCA3NiBjaGFyIG91dHB1dC4KICAgICAgaWYgKGFkZExpbmVTZXBhcmF0b3IgJiYgKytjID09IDE5ICYmIGogPCBvdXRwdXRMZW4gLSAyKSB7CiAgICAgICAgb3V0W2orK10gPSBDUjsKICAgICAgICBvdXRbaisrXSA9IExGOwogICAgICAgIGMgPSAwOwogICAgICB9CiAgICB9CgogICAgLy8gSWYgaW5wdXQgbGVuZ3RoIGlmIG5vdCBhIG11bHRpcGxlIG9mIDMsIGVuY29kZSByZW1haW5pbmcgYnl0ZXMgYW5kCiAgICAvLyBhZGQgcGFkZGluZy4KICAgIGlmIChyZW1haW5kZXJMZW5ndGggPT0gMSkgewogICAgICBpbnQgeCA9IGJ5dGVzW2ldOwogICAgICBvdXRbaisrXSA9IGxvb2t1cC5jb2RlVW5pdEF0KHggPj4gMik7CiAgICAgIG91dFtqKytdID0gbG9va3VwLmNvZGVVbml0QXQoKHggPDwgNCkgJiAweDNGKTsKICAgICAgb3V0W2orK10gPSBQQUQ7CiAgICAgIG91dFtqKytdID0gUEFEOwogICAgfSBlbHNlIGlmIChyZW1haW5kZXJMZW5ndGggPT0gMikgewogICAgICBpbnQgeCA9IGJ5dGVzW2ldOwogICAgICBpbnQgeSA9IGJ5dGVzW2kgKyAxXTsKICAgICAgb3V0W2orK10gPSBsb29rdXAuY29kZVVuaXRBdCh4ID4+IDIpOwogICAgICBvdXRbaisrXSA9IGxvb2t1cC5jb2RlVW5pdEF0KCgoeCA8PCA0KSB8ICh5ID4+IDQpKSAmIDB4M0YpOwogICAgICBvdXRbaisrXSA9IGxvb2t1cC5jb2RlVW5pdEF0KCh5IDw8IDIpICYgMHgzRik7CiAgICAgIG91dFtqKytdID0gUEFEOwogICAgfQoKICAgIHJldHVybiBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMob3V0KTsKICB9CgogIHN0YXRpYyBMaXN0PGludD4gYmFzZTY0U3RyaW5nVG9CeXRlcyhTdHJpbmcgaW5wdXQsCiAgICAgIFtib29sIGlnbm9yZUludmFsaWRDaGFyYWN0ZXJzID0gdHJ1ZV0pIHsKICAgIGludCBsZW4gPSBpbnB1dC5sZW5ndGg7CiAgICBpZiAobGVuID09IDApIHsKICAgICAgcmV0dXJuIG5ldyBMaXN0PGludD4oMCk7CiAgICB9CgogICAgLy8gQ291bnQgJ1xyJywgJ1xuJyBhbmQgaWxsZWdhbCBjaGFyYWN0ZXJzLCBGb3IgaWxsZWdhbCBjaGFyYWN0ZXJzLAogICAgLy8gaWYgW2lnbm9yZUludmFsaWRDaGFyYWN0ZXJzXSBpcyBmYWxzZSwgdGhyb3cgYW4gZXhjZXB0aW9uLgogICAgaW50IGV4dHJhc0xlbiA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIGludCBjID0gX2RlY29kZVRhYmxlW2lucHV0LmNvZGVVbml0QXQoaSldOwogICAgICBpZiAoYyA8IDApIHsKICAgICAgICBleHRyYXNMZW4rKzsKICAgICAgICBpZiAoYyA9PSAtMiAmJiAhaWdub3JlSW52YWxpZENoYXJhY3RlcnMpIHsKICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oJ0ludmFsaWQgY2hhcmFjdGVyOiAke2lucHV0W2ldfScpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGlmICgobGVuIC0gZXh0cmFzTGVuKSAlIDQgIT0gMCkgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKCcnJ1NpemUgb2YgQmFzZSA2NCBjaGFyYWN0ZXJzIGluIElucHV0CiAgICAgICAgICBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4gSW5wdXQ6ICRpbnB1dCcnJyk7CiAgICB9CgogICAgLy8gQ291bnQgcGFkIGNoYXJhY3RlcnMsIGlnbm9yZSBpbGxlZ2FsIGNoYXJhY3RlcnMgYXQgdGhlIGVuZC4KICAgIGludCBwYWRMZW5ndGggPSAwOwogICAgZm9yIChpbnQgaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIGludCBjdXJyZW50Q29kZVVuaXQgPSBpbnB1dC5jb2RlVW5pdEF0KGkpOwogICAgICBpZiAoX2RlY29kZVRhYmxlW2N1cnJlbnRDb2RlVW5pdF0gPiAwKSBicmVhazsKICAgICAgaWYgKGN1cnJlbnRDb2RlVW5pdCA9PSBQQUQpIHBhZExlbmd0aCsrOwogICAgfQogICAgaW50IG91dHB1dExlbiA9ICgoKGxlbiAtIGV4dHJhc0xlbikgKiA2KSA+PiAzKSAtIHBhZExlbmd0aDsKICAgIExpc3Q8aW50PiBvdXQgPSBuZXcgTGlzdDxpbnQ+KG91dHB1dExlbik7CgogICAgZm9yIChpbnQgaSA9IDAsIG8gPSAwOyBvIDwgb3V0cHV0TGVuOykgewogICAgICAvLyBBY2N1bXVsYXRlIDQgdmFsaWQgNiBiaXQgQmFzZSA2NCBjaGFyYWN0ZXJzIGludG8gYW4gaW50LgogICAgICBpbnQgeCA9IDA7CiAgICAgIGZvciAoaW50IGogPSA0OyBqID4gMDspIHsKICAgICAgICBpbnQgYyA9IF9kZWNvZGVUYWJsZVtpbnB1dC5jb2RlVW5pdEF0KGkrKyldOwogICAgICAgIGlmIChjID49IDApIHsKICAgICAgICAgIHggPSAoKHggPDwgNikgJiAweEZGRkZGRikgfCBjOwogICAgICAgICAgai0tOwogICAgICAgIH0KICAgICAgfQogICAgICBvdXRbbysrXSA9IHggPj4gMTY7CiAgICAgIGlmIChvIDwgb3V0cHV0TGVuKSB7CiAgICAgICAgb3V0W28rK10gPSAoeCA+PiA4KSAmIDB4RkY7CiAgICAgICAgaWYgKG8gPCBvdXRwdXRMZW4pIG91dFtvKytdID0geCAmIDB4RkY7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBvdXQ7CiAgfQp9CgovLyBDb25zdGFudHMuCmNvbnN0IF9NQVNLXzggPSAweGZmOwpjb25zdCBfTUFTS18zMiA9IDB4ZmZmZmZmZmY7CmNvbnN0IF9CSVRTX1BFUl9CWVRFID0gODsKY29uc3QgX0JZVEVTX1BFUl9XT1JEID0gNDsKCi8vIEJhc2UgY2xhc3MgZW5jYXBzdWxhdGluZyBjb21tb24gYmVoYXZpb3IgZm9yIGNyeXB0b2dyYXBoaWMgaGFzaAovLyBmdW5jdGlvbnMuCmFic3RyYWN0IGNsYXNzIF9IYXNoQmFzZSB7CiAgLy8gSGFzaGVyIHN0YXRlLgogIGZpbmFsIGludCBfY2h1bmtTaXplSW5Xb3JkczsKICBmaW5hbCBpbnQgX2RpZ2VzdFNpemVJbldvcmRzOwogIGZpbmFsIGJvb2wgX2JpZ0VuZGlhbldvcmRzOwogIGludCBfbGVuZ3RoSW5CeXRlcyA9IDA7CiAgTGlzdDxpbnQ+IF9wZW5kaW5nRGF0YTsKICBMaXN0PGludD4gX2N1cnJlbnRDaHVuazsKICBMaXN0PGludD4gX2g7CiAgYm9vbCBfZGlnZXN0Q2FsbGVkID0gZmFsc2U7CgogIF9IYXNoQmFzZSgKICAgICAgdGhpcy5fY2h1bmtTaXplSW5Xb3JkcywgdGhpcy5fZGlnZXN0U2l6ZUluV29yZHMsIHRoaXMuX2JpZ0VuZGlhbldvcmRzKQogICAgICA6IF9wZW5kaW5nRGF0YSA9IFtdIHsKICAgIF9jdXJyZW50Q2h1bmsgPSBuZXcgTGlzdChfY2h1bmtTaXplSW5Xb3Jkcyk7CiAgICBfaCA9IG5ldyBMaXN0KF9kaWdlc3RTaXplSW5Xb3Jkcyk7CiAgfQoKICAvLyBVcGRhdGUgdGhlIGhhc2hlciB3aXRoIG1vcmUgZGF0YS4KICBhZGQoTGlzdDxpbnQ+IGRhdGEpIHsKICAgIGlmIChfZGlnZXN0Q2FsbGVkKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKAogICAgICAgICAgJ0hhc2ggdXBkYXRlIG1ldGhvZCBjYWxsZWQgYWZ0ZXIgZGlnZXN0IHdhcyByZXRyaWV2ZWQnKTsKICAgIH0KICAgIF9sZW5ndGhJbkJ5dGVzICs9IGRhdGEubGVuZ3RoOwogICAgX3BlbmRpbmdEYXRhLmFkZEFsbChkYXRhKTsKICAgIF9pdGVyYXRlKCk7CiAgfQoKICAvLyBGaW5pc2ggdGhlIGhhc2ggY29tcHV0YXRpb24gYW5kIHJldHVybiB0aGUgZGlnZXN0IHN0cmluZy4KICBMaXN0PGludD4gY2xvc2UoKSB7CiAgICBpZiAoX2RpZ2VzdENhbGxlZCkgewogICAgICByZXR1cm4gX3Jlc3VsdEFzQnl0ZXMoKTsKICAgIH0KICAgIF9kaWdlc3RDYWxsZWQgPSB0cnVlOwogICAgX2ZpbmFsaXplRGF0YSgpOwogICAgX2l0ZXJhdGUoKTsKICAgIGFzc2VydChfcGVuZGluZ0RhdGEubGVuZ3RoID09IDApOwogICAgcmV0dXJuIF9yZXN1bHRBc0J5dGVzKCk7CiAgfQoKICAvLyBSZXR1cm5zIHRoZSBibG9jayBzaXplIG9mIHRoZSBoYXNoIGluIGJ5dGVzLgogIGludCBnZXQgYmxvY2tTaXplIHsKICAgIHJldHVybiBfY2h1bmtTaXplSW5Xb3JkcyAqIF9CWVRFU19QRVJfV09SRDsKICB9CgogIC8vIENyZWF0ZSBhIGZyZXNoIGluc3RhbmNlIG9mIHRoaXMgSGFzaC4KICBuZXdJbnN0YW5jZSgpOwoKICAvLyBPbmUgcm91bmQgb2YgdGhlIGhhc2ggY29tcHV0YXRpb24uCiAgX3VwZGF0ZUhhc2goTGlzdDxpbnQ+IG0pOwoKICAvLyBIZWxwZXIgbWV0aG9kcy4KICBfYWRkMzIoeCwgeSkgPT4gKHggKyB5KSAmIF9NQVNLXzMyOwogIF9yb3VuZFVwKHZhbCwgbikgPT4gKHZhbCArIG4gLSAxKSAmIC1uOwoKICAvLyBSb3RhdGUgbGVmdCBsaW1pdGluZyB0byB1bnNpZ25lZCAzMi1iaXQgdmFsdWVzLgogIGludCBfcm90bDMyKGludCB2YWwsIGludCBzaGlmdCkgewogICAgdmFyIG1vZF9zaGlmdCA9IHNoaWZ0ICYgMzE7CiAgICByZXR1cm4gKCh2YWwgPDwgbW9kX3NoaWZ0KSAmIF9NQVNLXzMyKSB8CiAgICAgICAgKCh2YWwgJiBfTUFTS18zMikgPj4gKDMyIC0gbW9kX3NoaWZ0KSk7CiAgfQoKICAvLyBDb21wdXRlIHRoZSBmaW5hbCByZXN1bHQgYXMgYSBsaXN0IG9mIGJ5dGVzIGZyb20gdGhlIGhhc2ggd29yZHMuCiAgTGlzdDxpbnQ+IF9yZXN1bHRBc0J5dGVzKCkgewogICAgdmFyIHJlc3VsdCA9IDxpbnQ+W107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IF9oLmxlbmd0aDsgaSsrKSB7CiAgICAgIHJlc3VsdC5hZGRBbGwoX3dvcmRUb0J5dGVzKF9oW2ldKSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8gQ29udmVydHMgYSBsaXN0IG9mIGJ5dGVzIHRvIGEgY2h1bmsgb2YgMzItYml0IHdvcmRzLgogIF9ieXRlc1RvQ2h1bmsoTGlzdDxpbnQ+IGRhdGEsIGludCBkYXRhSW5kZXgpIHsKICAgIGFzc2VydCgoZGF0YS5sZW5ndGggLSBkYXRhSW5kZXgpID49IChfY2h1bmtTaXplSW5Xb3JkcyAqIF9CWVRFU19QRVJfV09SRCkpOwoKICAgIGZvciAodmFyIHdvcmRJbmRleCA9IDA7IHdvcmRJbmRleCA8IF9jaHVua1NpemVJbldvcmRzOyB3b3JkSW5kZXgrKykgewogICAgICB2YXIgdzMgPSBfYmlnRW5kaWFuV29yZHMgPyBkYXRhW2RhdGFJbmRleF0gOiBkYXRhW2RhdGFJbmRleCArIDNdOwogICAgICB2YXIgdzIgPSBfYmlnRW5kaWFuV29yZHMgPyBkYXRhW2RhdGFJbmRleCArIDFdIDogZGF0YVtkYXRhSW5kZXggKyAyXTsKICAgICAgdmFyIHcxID0gX2JpZ0VuZGlhbldvcmRzID8gZGF0YVtkYXRhSW5kZXggKyAyXSA6IGRhdGFbZGF0YUluZGV4ICsgMV07CiAgICAgIHZhciB3MCA9IF9iaWdFbmRpYW5Xb3JkcyA/IGRhdGFbZGF0YUluZGV4ICsgM10gOiBkYXRhW2RhdGFJbmRleF07CiAgICAgIGRhdGFJbmRleCArPSA0OwogICAgICB2YXIgd29yZCA9ICh3MyAmIDB4ZmYpIDw8IDI0OwogICAgICB3b3JkIHw9ICh3MiAmIF9NQVNLXzgpIDw8IDE2OwogICAgICB3b3JkIHw9ICh3MSAmIF9NQVNLXzgpIDw8IDg7CiAgICAgIHdvcmQgfD0gKHcwICYgX01BU0tfOCk7CiAgICAgIF9jdXJyZW50Q2h1bmtbd29yZEluZGV4XSA9IHdvcmQ7CiAgICB9CiAgfQoKICAvLyBDb252ZXJ0IGEgMzItYml0IHdvcmQgdG8gZm91ciBieXRlcy4KICBMaXN0PGludD4gX3dvcmRUb0J5dGVzKGludCB3b3JkKSB7CiAgICBMaXN0PGludD4gYnl0ZXMgPSBuZXcgTGlzdChfQllURVNfUEVSX1dPUkQpOwogICAgYnl0ZXNbMF0gPSAod29yZCA+PiAoX2JpZ0VuZGlhbldvcmRzID8gMjQgOiAwKSkgJiBfTUFTS184OwogICAgYnl0ZXNbMV0gPSAod29yZCA+PiAoX2JpZ0VuZGlhbldvcmRzID8gMTYgOiA4KSkgJiBfTUFTS184OwogICAgYnl0ZXNbMl0gPSAod29yZCA+PiAoX2JpZ0VuZGlhbldvcmRzID8gOCA6IDE2KSkgJiBfTUFTS184OwogICAgYnl0ZXNbM10gPSAod29yZCA+PiAoX2JpZ0VuZGlhbldvcmRzID8gMCA6IDI0KSkgJiBfTUFTS184OwogICAgcmV0dXJuIGJ5dGVzOwogIH0KCiAgLy8gSXRlcmF0ZSB0aHJvdWdoIGRhdGEgdXBkYXRpbmcgdGhlIGhhc2ggY29tcHV0YXRpb24gZm9yIGVhY2gKICAvLyBjaHVuay4KICBfaXRlcmF0ZSgpIHsKICAgIHZhciBsZW4gPSBfcGVuZGluZ0RhdGEubGVuZ3RoOwogICAgdmFyIGNodW5rU2l6ZUluQnl0ZXMgPSBfY2h1bmtTaXplSW5Xb3JkcyAqIF9CWVRFU19QRVJfV09SRDsKICAgIGlmIChsZW4gPj0gY2h1bmtTaXplSW5CeXRlcykgewogICAgICB2YXIgaW5kZXggPSAwOwogICAgICBmb3IgKDsgKGxlbiAtIGluZGV4KSA+PSBjaHVua1NpemVJbkJ5dGVzOyBpbmRleCArPSBjaHVua1NpemVJbkJ5dGVzKSB7CiAgICAgICAgX2J5dGVzVG9DaHVuayhfcGVuZGluZ0RhdGEsIGluZGV4KTsKICAgICAgICBfdXBkYXRlSGFzaChfY3VycmVudENodW5rKTsKICAgICAgfQogICAgICBfcGVuZGluZ0RhdGEgPSBfcGVuZGluZ0RhdGEuc3VibGlzdChpbmRleCwgbGVuKTsKICAgIH0KICB9CgogIC8vIEZpbmFsaXplIHRoZSBkYXRhLiBBZGQgYSAxIGJpdCB0byB0aGUgZW5kIG9mIHRoZSBtZXNzYWdlLiBFeHBhbmQgd2l0aAogIC8vIDAgYml0cyBhbmQgYWRkIHRoZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UuCiAgX2ZpbmFsaXplRGF0YSgpIHsKICAgIF9wZW5kaW5nRGF0YS5hZGQoMHg4MCk7CiAgICB2YXIgY29udGVudHNMZW5ndGggPSBfbGVuZ3RoSW5CeXRlcyArIDk7CiAgICB2YXIgY2h1bmtTaXplSW5CeXRlcyA9IF9jaHVua1NpemVJbldvcmRzICogX0JZVEVTX1BFUl9XT1JEOwogICAgdmFyIGZpbmFsaXplZExlbmd0aCA9IF9yb3VuZFVwKGNvbnRlbnRzTGVuZ3RoLCBjaHVua1NpemVJbkJ5dGVzKTsKICAgIHZhciB6ZXJvUGFkZGluZyA9IGZpbmFsaXplZExlbmd0aCAtIGNvbnRlbnRzTGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB6ZXJvUGFkZGluZzsgaSsrKSB7CiAgICAgIF9wZW5kaW5nRGF0YS5hZGQoMCk7CiAgICB9CiAgICB2YXIgbGVuZ3RoSW5CaXRzID0gX2xlbmd0aEluQnl0ZXMgKiBfQklUU19QRVJfQllURTsKICAgIGFzc2VydChsZW5ndGhJbkJpdHMgPCBwb3coMiwgMzIpKTsKICAgIGlmIChfYmlnRW5kaWFuV29yZHMpIHsKICAgICAgX3BlbmRpbmdEYXRhLmFkZEFsbChfd29yZFRvQnl0ZXMoMCkpOwogICAgICBfcGVuZGluZ0RhdGEuYWRkQWxsKF93b3JkVG9CeXRlcyhsZW5ndGhJbkJpdHMgJiBfTUFTS18zMikpOwogICAgfSBlbHNlIHsKICAgICAgX3BlbmRpbmdEYXRhLmFkZEFsbChfd29yZFRvQnl0ZXMobGVuZ3RoSW5CaXRzICYgX01BU0tfMzIpKTsKICAgICAgX3BlbmRpbmdEYXRhLmFkZEFsbChfd29yZFRvQnl0ZXMoMCkpOwogICAgfQogIH0KfQoKLy8gVGhlIE1ENSBoYXNoZXIgaXMgdXNlZCB0byBjb21wdXRlIGFuIE1ENSBtZXNzYWdlIGRpZ2VzdC4KY2xhc3MgX01ENSBleHRlbmRzIF9IYXNoQmFzZSB7CiAgX01ENSgpIDogc3VwZXIoMTYsIDQsIGZhbHNlKSB7CiAgICBfaFswXSA9IDB4Njc0NTIzMDE7CiAgICBfaFsxXSA9IDB4ZWZjZGFiODk7CiAgICBfaFsyXSA9IDB4OThiYWRjZmU7CiAgICBfaFszXSA9IDB4MTAzMjU0NzY7CiAgfQoKICAvLyBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgSGFzaC4KICBfTUQ1IG5ld0luc3RhbmNlKCkgewogICAgcmV0dXJuIG5ldyBfTUQ1KCk7CiAgfQoKICBzdGF0aWMgY29uc3QgX2sgPSBjb25zdCBbCiAgICAweGQ3NmFhNDc4LCAweGU4YzdiNzU2LCAweDI0MjA3MGRiLCAweGMxYmRjZWVlLCAweGY1N2MwZmFmLCAweDQ3ODdjNjJhLCAvLwogICAgMHhhODMwNDYxMywgMHhmZDQ2OTUwMSwgMHg2OTgwOThkOCwgMHg4YjQ0ZjdhZiwgMHhmZmZmNWJiMSwgMHg4OTVjZDdiZSwgLy8KICAgIDB4NmI5MDExMjIsIDB4ZmQ5ODcxOTMsIDB4YTY3OTQzOGUsIDB4NDliNDA4MjEsIDB4ZjYxZTI1NjIsIDB4YzA0MGIzNDAsIC8vCiAgICAweDI2NWU1YTUxLCAweGU5YjZjN2FhLCAweGQ2MmYxMDVkLCAweDAyNDQxNDUzLCAweGQ4YTFlNjgxLCAweGU3ZDNmYmM4LCAvLwogICAgMHgyMWUxY2RlNiwgMHhjMzM3MDdkNiwgMHhmNGQ1MGQ4NywgMHg0NTVhMTRlZCwgMHhhOWUzZTkwNSwgMHhmY2VmYTNmOCwgLy8KICAgIDB4Njc2ZjAyZDksIDB4OGQyYTRjOGEsIDB4ZmZmYTM5NDIsIDB4ODc3MWY2ODEsIDB4NmQ5ZDYxMjIsIDB4ZmRlNTM4MGMsIC8vCiAgICAweGE0YmVlYTQ0LCAweDRiZGVjZmE5LCAweGY2YmI0YjYwLCAweGJlYmZiYzcwLCAweDI4OWI3ZWM2LCAweGVhYTEyN2ZhLCAvLwogICAgMHhkNGVmMzA4NSwgMHgwNDg4MWQwNSwgMHhkOWQ0ZDAzOSwgMHhlNmRiOTllNSwgMHgxZmEyN2NmOCwgMHhjNGFjNTY2NSwgLy8KICAgIDB4ZjQyOTIyNDQsIDB4NDMyYWZmOTcsIDB4YWI5NDIzYTcsIDB4ZmM5M2EwMzksIDB4NjU1YjU5YzMsIDB4OGYwY2NjOTIsIC8vCiAgICAweGZmZWZmNDdkLCAweDg1ODQ1ZGQxLCAweDZmYTg3ZTRmLCAweGZlMmNlNmUwLCAweGEzMDE0MzE0LCAweDRlMDgxMWExLCAvLwogICAgMHhmNzUzN2U4MiwgMHhiZDNhZjIzNSwgMHgyYWQ3ZDJiYiwgMHhlYjg2ZDM5MQogIF07CgogIHN0YXRpYyBjb25zdCBfciA9IGNvbnN0IFsKICAgIDcsIDEyLCAxNywgMjIsIDcsIDEyLCAxNywgMjIsIDcsIDEyLCAxNywgMjIsIDcsIDEyLCAxNywgMjIsIDUsIDksIDE0LCAvLwogICAgMjAsIDUsIDksIDE0LCAyMCwgNSwgOSwgMTQsIDIwLCA1LCA5LCAxNCwgMjAsIDQsIDExLCAxNiwgMjMsIDQsIDExLCAvLwogICAgMTYsIDIzLCA0LCAxMSwgMTYsIDIzLCA0LCAxMSwgMTYsIDIzLCA2LCAxMCwgMTUsIDIxLCA2LCAxMCwgMTUsIDIxLCA2LCAvLwogICAgMTAsIDE1LCAyMSwgNiwgMTAsIDE1LCAyMQogIF07CgogIC8vIENvbXB1dGUgb25lIGl0ZXJhdGlvbiBvZiB0aGUgTUQ1IGFsZ29yaXRobSB3aXRoIGEgY2h1bmsgb2YKICAvLyAxNiAzMi1iaXQgcGllY2VzLgogIHZvaWQgX3VwZGF0ZUhhc2goTGlzdDxpbnQ+IG0pIHsKICAgIGFzc2VydChtLmxlbmd0aCA9PSAxNik7CgogICAgdmFyIGEgPSBfaFswXTsKICAgIHZhciBiID0gX2hbMV07CiAgICB2YXIgYyA9IF9oWzJdOwogICAgdmFyIGQgPSBfaFszXTsKCiAgICB2YXIgdDA7CiAgICB2YXIgdDE7CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2NDsgaSsrKSB7CiAgICAgIGlmIChpIDwgMTYpIHsKICAgICAgICB0MCA9IChiICYgYykgfCAoKH5iICYgX01BU0tfMzIpICYgZCk7CiAgICAgICAgdDEgPSBpOwogICAgICB9IGVsc2UgaWYgKGkgPCAzMikgewogICAgICAgIHQwID0gKGQgJiBiKSB8ICgofmQgJiBfTUFTS18zMikgJiBjKTsKICAgICAgICB0MSA9ICgoNSAqIGkpICsgMSkgJSAxNjsKICAgICAgfSBlbHNlIGlmIChpIDwgNDgpIHsKICAgICAgICB0MCA9IGIgXiBjIF4gZDsKICAgICAgICB0MSA9ICgoMyAqIGkpICsgNSkgJSAxNjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0MCA9IGMgXiAoYiB8ICh+ZCAmIF9NQVNLXzMyKSk7CiAgICAgICAgdDEgPSAoNyAqIGkpICUgMTY7CiAgICAgIH0KCiAgICAgIHZhciB0ZW1wID0gZDsKICAgICAgZCA9IGM7CiAgICAgIGMgPSBiOwogICAgICBiID0gX2FkZDMyKAogICAgICAgICAgYiwgX3JvdGwzMihfYWRkMzIoX2FkZDMyKGEsIHQwKSwgX2FkZDMyKF9rW2ldLCBtW3QxXSkpLCBfcltpXSkpOwogICAgICBhID0gdGVtcDsKICAgIH0KCiAgICBfaFswXSA9IF9hZGQzMihhLCBfaFswXSk7CiAgICBfaFsxXSA9IF9hZGQzMihiLCBfaFsxXSk7CiAgICBfaFsyXSA9IF9hZGQzMihjLCBfaFsyXSk7CiAgICBfaFszXSA9IF9hZGQzMihkLCBfaFszXSk7CiAgfQp9CgovLyBUaGUgU0hBMSBoYXNoZXIgaXMgdXNlZCB0byBjb21wdXRlIGFuIFNIQTEgbWVzc2FnZSBkaWdlc3QuCmNsYXNzIF9TSEExIGV4dGVuZHMgX0hhc2hCYXNlIHsKICAvLyBDb25zdHJ1Y3QgYSBTSEExIGhhc2hlciBvYmplY3QuCiAgX1NIQTEoKQogICAgICA6IF93ID0gbmV3IExpc3QoODApLAogICAgICAgIHN1cGVyKDE2LCA1LCB0cnVlKSB7CiAgICBfaFswXSA9IDB4Njc0NTIzMDE7CiAgICBfaFsxXSA9IDB4RUZDREFCODk7CiAgICBfaFsyXSA9IDB4OThCQURDRkU7CiAgICBfaFszXSA9IDB4MTAzMjU0NzY7CiAgICBfaFs0XSA9IDB4QzNEMkUxRjA7CiAgfQoKICAvLyBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgSGFzaC4KICBfU0hBMSBuZXdJbnN0YW5jZSgpIHsKICAgIHJldHVybiBuZXcgX1NIQTEoKTsKICB9CgogIC8vIENvbXB1dGUgb25lIGl0ZXJhdGlvbiBvZiB0aGUgU0hBMSBhbGdvcml0aG0gd2l0aCBhIGNodW5rIG9mCiAgLy8gMTYgMzItYml0IHBpZWNlcy4KICB2b2lkIF91cGRhdGVIYXNoKExpc3Q8aW50PiBtKSB7CiAgICBhc3NlcnQobS5sZW5ndGggPT0gMTYpOwoKICAgIHZhciBhID0gX2hbMF07CiAgICB2YXIgYiA9IF9oWzFdOwogICAgdmFyIGMgPSBfaFsyXTsKICAgIHZhciBkID0gX2hbM107CiAgICB2YXIgZSA9IF9oWzRdOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODA7IGkrKykgewogICAgICBpZiAoaSA8IDE2KSB7CiAgICAgICAgX3dbaV0gPSBtW2ldOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBuID0gX3dbaSAtIDNdIF4gX3dbaSAtIDhdIF4gX3dbaSAtIDE0XSBeIF93W2kgLSAxNl07CiAgICAgICAgX3dbaV0gPSBfcm90bDMyKG4sIDEpOwogICAgICB9CiAgICAgIHZhciB0ID0gX2FkZDMyKF9hZGQzMihfcm90bDMyKGEsIDUpLCBlKSwgX3dbaV0pOwogICAgICBpZiAoaSA8IDIwKSB7CiAgICAgICAgdCA9IF9hZGQzMihfYWRkMzIodCwgKGIgJiBjKSB8ICh+YiAmIGQpKSwgMHg1QTgyNzk5OSk7CiAgICAgIH0gZWxzZSBpZiAoaSA8IDQwKSB7CiAgICAgICAgdCA9IF9hZGQzMihfYWRkMzIodCwgKGIgXiBjIF4gZCkpLCAweDZFRDlFQkExKTsKICAgICAgfSBlbHNlIGlmIChpIDwgNjApIHsKICAgICAgICB0ID0gX2FkZDMyKF9hZGQzMih0LCAoYiAmIGMpIHwgKGIgJiBkKSB8IChjICYgZCkpLCAweDhGMUJCQ0RDKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0ID0gX2FkZDMyKF9hZGQzMih0LCBiIF4gYyBeIGQpLCAweENBNjJDMUQ2KTsKICAgICAgfQoKICAgICAgZSA9IGQ7CiAgICAgIGQgPSBjOwogICAgICBjID0gX3JvdGwzMihiLCAzMCk7CiAgICAgIGIgPSBhOwogICAgICBhID0gdCAmIF9NQVNLXzMyOwogICAgfQoKICAgIF9oWzBdID0gX2FkZDMyKGEsIF9oWzBdKTsKICAgIF9oWzFdID0gX2FkZDMyKGIsIF9oWzFdKTsKICAgIF9oWzJdID0gX2FkZDMyKGMsIF9oWzJdKTsKICAgIF9oWzNdID0gX2FkZDMyKGQsIF9oWzNdKTsKICAgIF9oWzRdID0gX2FkZDMyKGUsIF9oWzRdKTsKICB9CgogIExpc3Q8aW50PiBfdzsKfQqBzABOTjwBFAEVJCQkJQElSgEsSgFLJBchMDBHR0dHR0dHR0dHR0dHR0dDBQEsAS8zJiYGEwQBLiUeSAYeBAEvPxwUEQZIHjIzHEgmHDoGLgEdHR4wKxYtNjUuPkAXFw8IBgFKFCAYLDUWFicYHCxCNRYGASoEATUvHBQfBgFIQhckMRMVM0cKCAYBJkc2BgFDFykxNC8GQC4BLUIRIDUWKQ8KCBobJDAIBhAEAgEOFh0aGwFDDhsTHyAeGhobEB4BDU0cMScEAScYGRxDBiMfEAQBPxYZHwYaFRAmHQQBMhYwBAErEQEoHAEVJioBNSQgLTAEAUYfGioqBhMEAToxUAFKSExMSBYkJCMeJwYEASolMT8/Pz8SBAFBDA8jQCMVTSwkCDcGBAFLLxQcLUBGOCwbBjgnGyxCDUIsBgQCATwfIRgYGBgEASoXFwQBHE9PT09PT09PT08zBQEcTUtOHgUBQBciHAETExMTAQwMASMULhAbLiEbGCEPKBsIARQNDRJLEAYBHh4eHgQCAT4gJQobHRgYGBgYBAEqGBgEAUEXIhwBExMTExMBIxQWD0EfCDcUPxs4G0gPNggBDQ0aDRgGAR4eHh4eBAEQAgEWZGFydDpfaHR0cC9jcnlwdG8uZGFydDBvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvX2h0dHAvaHR0cF9kYXRlLmRhcnSqAi8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuX2h0dHA7CgovKioKICogVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBkYXRlcyB3aXRoIEhUVFAgc3BlY2lmaWMgZGF0ZQogKiBmb3JtYXRzLgogKi8KY2xhc3MgSHR0cERhdGUgewogIC8vIEZyb20gUkZDLTI2MTYgc2VjdGlvbiAiMy4zLjEgRnVsbCBEYXRlIiwKICAvLyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyNjE2I3NlY3Rpb24tMy4zLjEKICAvLwogIC8vIEhUVFAtZGF0ZSAgICA9IHJmYzExMjMtZGF0ZSB8IHJmYzg1MC1kYXRlIHwgYXNjdGltZS1kYXRlCiAgLy8gcmZjMTEyMy1kYXRlID0gd2tkYXkgIiwiIFNQIGRhdGUxIFNQIHRpbWUgU1AgIkdNVCIKICAvLyByZmM4NTAtZGF0ZSAgPSB3ZWVrZGF5ICIsIiBTUCBkYXRlMiBTUCB0aW1lIFNQICJHTVQiCiAgLy8gYXNjdGltZS1kYXRlID0gd2tkYXkgU1AgZGF0ZTMgU1AgdGltZSBTUCA0RElHSVQKICAvLyBkYXRlMSAgICAgICAgPSAyRElHSVQgU1AgbW9udGggU1AgNERJR0lUCiAgLy8gICAgICAgICAgICAgICAgOyBkYXkgbW9udGggeWVhciAoZS5nLiwgMDIgSnVuIDE5ODIpCiAgLy8gZGF0ZTIgICAgICAgID0gMkRJR0lUICItIiBtb250aCAiLSIgMkRJR0lUCiAgLy8gICAgICAgICAgICAgICAgOyBkYXktbW9udGgteWVhciAoZS5nLiwgMDItSnVuLTgyKQogIC8vIGRhdGUzICAgICAgICA9IG1vbnRoIFNQICggMkRJR0lUIHwgKCBTUCAxRElHSVQgKSkKICAvLyAgICAgICAgICAgICAgICA7IG1vbnRoIGRheSAoZS5nLiwgSnVuICAyKQogIC8vIHRpbWUgICAgICAgICA9IDJESUdJVCAiOiIgMkRJR0lUICI6IiAyRElHSVQKICAvLyAgICAgICAgICAgICAgICA7IDAwOjAwOjAwIC0gMjM6NTk6NTkKICAvLyB3a2RheSAgICAgICAgPSAiTW9uIiB8ICJUdWUiIHwgIldlZCIKICAvLyAgICAgICAgICAgICAgfCAiVGh1IiB8ICJGcmkiIHwgIlNhdCIgfCAiU3VuIgogIC8vIHdlZWtkYXkgICAgICA9ICJNb25kYXkiIHwgIlR1ZXNkYXkiIHwgIldlZG5lc2RheSIKICAvLyAgICAgICAgICAgICAgfCAiVGh1cnNkYXkiIHwgIkZyaWRheSIgfCAiU2F0dXJkYXkiIHwgIlN1bmRheSIKICAvLyBtb250aCAgICAgICAgPSAiSmFuIiB8ICJGZWIiIHwgIk1hciIgfCAiQXByIgogIC8vICAgICAgICAgICAgICB8ICJNYXkiIHwgIkp1biIgfCAiSnVsIiB8ICJBdWciCiAgLy8gICAgICAgICAgICAgIHwgIlNlcCIgfCAiT2N0IiB8ICJOb3YiIHwgIkRlYyIKCiAgLyoqCiAgICogRm9ybWF0IGEgZGF0ZSBhY2NvcmRpbmcgdG8KICAgKiBbUkZDLTExMjNdKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzExMjMgIlJGQy0xMTIzIiksCiAgICogZS5nLiBgVGh1LCAxIEphbiAxOTcwIDAwOjAwOjAwIEdNVGAuCiAgICovCiAgc3RhdGljIFN0cmluZyBmb3JtYXQoRGF0ZVRpbWUgZGF0ZSkgewogICAgY29uc3QgTGlzdCB3a2RheSA9IGNvbnN0IFsiTW9uIiwgIlR1ZSIsICJXZWQiLCAiVGh1IiwgIkZyaSIsICJTYXQiLCAiU3VuIl07CiAgICBjb25zdCBMaXN0IG1vbnRoID0gY29uc3QgWwogICAgICAiSmFuIiwKICAgICAgIkZlYiIsCiAgICAgICJNYXIiLAogICAgICAiQXByIiwKICAgICAgIk1heSIsCiAgICAgICJKdW4iLAogICAgICAiSnVsIiwKICAgICAgIkF1ZyIsCiAgICAgICJTZXAiLAogICAgICAiT2N0IiwKICAgICAgIk5vdiIsCiAgICAgICJEZWMiCiAgICBdOwoKICAgIERhdGVUaW1lIGQgPSBkYXRlLnRvVXRjKCk7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCkKICAgICAgLi53cml0ZSh3a2RheVtkLndlZWtkYXkgLSAxXSkKICAgICAgLi53cml0ZSgiLCAiKQogICAgICAuLndyaXRlKGQuZGF5IDw9IDkgPyAiMCIgOiAiIikKICAgICAgLi53cml0ZShkLmRheS50b1N0cmluZygpKQogICAgICAuLndyaXRlKCIgIikKICAgICAgLi53cml0ZShtb250aFtkLm1vbnRoIC0gMV0pCiAgICAgIC4ud3JpdGUoIiAiKQogICAgICAuLndyaXRlKGQueWVhci50b1N0cmluZygpKQogICAgICAuLndyaXRlKGQuaG91ciA8PSA5ID8gIiAwIiA6ICIgIikKICAgICAgLi53cml0ZShkLmhvdXIudG9TdHJpbmcoKSkKICAgICAgLi53cml0ZShkLm1pbnV0ZSA8PSA5ID8gIjowIiA6ICI6IikKICAgICAgLi53cml0ZShkLm1pbnV0ZS50b1N0cmluZygpKQogICAgICAuLndyaXRlKGQuc2Vjb25kIDw9IDkgPyAiOjAiIDogIjoiKQogICAgICAuLndyaXRlKGQuc2Vjb25kLnRvU3RyaW5nKCkpCiAgICAgIC4ud3JpdGUoIiBHTVQiKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgLyoqCiAgICogUGFyc2UgYSBkYXRlIHN0cmluZyBpbiBlaXRoZXIgb2YgdGhlIGZvcm1hdHMKICAgKiBbUkZDLTExMjNdKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzExMjMgIlJGQy0xMTIzIiksCiAgICogW1JGQy04NTBdKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzg1MCAiUkZDLTg1MCIpIG9yCiAgICogQU5TSSBDJ3MgYXNjdGltZSgpIGZvcm1hdC4gVGhlc2UgZm9ybWF0cyBhcmUgbGlzdGVkIGhlcmUuCiAgICoKICAgKiAgICAgVGh1LCAxIEphbiAxOTcwIDAwOjAwOjAwIEdNVAogICAqICAgICBUaHVyc2RheSwgMS1KYW4tMTk3MCAwMDowMDowMCBHTVQKICAgKiAgICAgVGh1IEphbiAgMSAwMDowMDowMCAxOTcwCiAgICoKICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgW1JGQy0yNjE2IHNlY3Rpb24KICAgKiAzLjEuMV0oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjYxNiNzZWN0aW9uLTMuMy4xCiAgICogIlJGQy0yNjE2IHNlY3Rpb24gMy4xLjEiKS4KICAgKi8KICBzdGF0aWMgRGF0ZVRpbWUgcGFyc2UoU3RyaW5nIGRhdGUpIHsKICAgIGZpbmFsIGludCBTUCA9IDMyOwogICAgY29uc3QgTGlzdCB3a2RheXMgPSBjb25zdCBbIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0IiwgIlN1biJdOwogICAgY29uc3QgTGlzdCB3ZWVrZGF5cyA9IGNvbnN0IFsKICAgICAgIk1vbmRheSIsCiAgICAgICJUdWVzZGF5IiwKICAgICAgIldlZG5lc2RheSIsCiAgICAgICJUaHVyc2RheSIsCiAgICAgICJGcmlkYXkiLAogICAgICAiU2F0dXJkYXkiLAogICAgICAiU3VuZGF5IgogICAgXTsKICAgIGNvbnN0IExpc3QgbW9udGhzID0gY29uc3QgWwogICAgICAiSmFuIiwKICAgICAgIkZlYiIsCiAgICAgICJNYXIiLAogICAgICAiQXByIiwKICAgICAgIk1heSIsCiAgICAgICJKdW4iLAogICAgICAiSnVsIiwKICAgICAgIkF1ZyIsCiAgICAgICJTZXAiLAogICAgICAiT2N0IiwKICAgICAgIk5vdiIsCiAgICAgICJEZWMiCiAgICBdOwogICAgY29uc3QgTGlzdCB3a2RheXNMb3dlckNhc2UgPSBjb25zdCBbCiAgICAgICJtb24iLAogICAgICAidHVlIiwKICAgICAgIndlZCIsCiAgICAgICJ0aHUiLAogICAgICAiZnJpIiwKICAgICAgInNhdCIsCiAgICAgICJzdW4iCiAgICBdOwogICAgY29uc3QgTGlzdCB3ZWVrZGF5c0xvd2VyQ2FzZSA9IGNvbnN0IFsKICAgICAgIm1vbmRheSIsCiAgICAgICJ0dWVzZGF5IiwKICAgICAgIndlZG5lc2RheSIsCiAgICAgICJ0aHVyc2RheSIsCiAgICAgICJmcmlkYXkiLAogICAgICAic2F0dXJkYXkiLAogICAgICAic3VuZGF5IgogICAgXTsKICAgIGNvbnN0IExpc3QgbW9udGhzTG93ZXJDYXNlID0gY29uc3QgWwogICAgICAiamFuIiwKICAgICAgImZlYiIsCiAgICAgICJtYXIiLAogICAgICAiYXByIiwKICAgICAgIm1heSIsCiAgICAgICJqdW4iLAogICAgICAianVsIiwKICAgICAgImF1ZyIsCiAgICAgICJzZXAiLAogICAgICAib2N0IiwKICAgICAgIm5vdiIsCiAgICAgICJkZWMiCiAgICBdOwoKICAgIGZpbmFsIGludCBmb3JtYXRSZmMxMTIzID0gMDsKICAgIGZpbmFsIGludCBmb3JtYXRSZmM4NTAgPSAxOwogICAgZmluYWwgaW50IGZvcm1hdEFzY3RpbWUgPSAyOwoKICAgIGludCBpbmRleCA9IDA7CiAgICBTdHJpbmcgdG1wOwogICAgaW50IGZvcm1hdDsKCiAgICB2b2lkIGV4cGVjdChTdHJpbmcgcykgewogICAgICBpZiAoZGF0ZS5sZW5ndGggLSBpbmRleCA8IHMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkludmFsaWQgSFRUUCBkYXRlICRkYXRlIik7CiAgICAgIH0KICAgICAgU3RyaW5nIHRtcCA9IGRhdGUuc3Vic3RyaW5nKGluZGV4LCBpbmRleCArIHMubGVuZ3RoKTsKICAgICAgaWYgKHRtcCAhPSBzKSB7CiAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkludmFsaWQgSFRUUCBkYXRlICRkYXRlIik7CiAgICAgIH0KICAgICAgaW5kZXggKz0gcy5sZW5ndGg7CiAgICB9CgogICAgaW50IGV4cGVjdFdlZWtkYXkoKSB7CiAgICAgIGludCB3ZWVrZGF5OwogICAgICAvLyBUaGUgZm9ybWF0dGluZyBvZiB0aGUgd2Vla2RheSBzaWduYWxzIHRoZSBmb3JtYXQgb2YgdGhlIGRhdGUgc3RyaW5nLgogICAgICBpbnQgcG9zID0gZGF0ZS5pbmRleE9mKCIsIiwgaW5kZXgpOwogICAgICBpZiAocG9zID09IC0xKSB7CiAgICAgICAgaW50IHBvcyA9IGRhdGUuaW5kZXhPZigiICIsIGluZGV4KTsKICAgICAgICBpZiAocG9zID09IC0xKSB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCBIVFRQIGRhdGUgJGRhdGUiKTsKICAgICAgICB0bXAgPSBkYXRlLnN1YnN0cmluZyhpbmRleCwgcG9zKTsKICAgICAgICBpbmRleCA9IHBvcyArIDE7CiAgICAgICAgd2Vla2RheSA9IHdrZGF5cy5pbmRleE9mKHRtcCk7CiAgICAgICAgaWYgKHdlZWtkYXkgIT0gLTEpIHsKICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdEFzY3RpbWU7CiAgICAgICAgICByZXR1cm4gd2Vla2RheTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdG1wID0gZGF0ZS5zdWJzdHJpbmcoaW5kZXgsIHBvcyk7CiAgICAgICAgaW5kZXggPSBwb3MgKyAxOwogICAgICAgIHdlZWtkYXkgPSB3a2RheXMuaW5kZXhPZih0bXApOwogICAgICAgIGlmICh3ZWVrZGF5ICE9IC0xKSB7CiAgICAgICAgICBmb3JtYXQgPSBmb3JtYXRSZmMxMTIzOwogICAgICAgICAgcmV0dXJuIHdlZWtkYXk7CiAgICAgICAgfQogICAgICAgIHdlZWtkYXkgPSB3ZWVrZGF5cy5pbmRleE9mKHRtcCk7CiAgICAgICAgaWYgKHdlZWtkYXkgIT0gLTEpIHsKICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdFJmYzg1MDsKICAgICAgICAgIHJldHVybiB3ZWVrZGF5OwogICAgICAgIH0KICAgICAgfQogICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCBIVFRQIGRhdGUgJGRhdGUiKTsKICAgIH0KCiAgICBpbnQgZXhwZWN0TW9udGgoU3RyaW5nIHNlcGFyYXRvcikgewogICAgICBpbnQgcG9zID0gZGF0ZS5pbmRleE9mKHNlcGFyYXRvciwgaW5kZXgpOwogICAgICBpZiAocG9zIC0gaW5kZXggIT0gMykgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkludmFsaWQgSFRUUCBkYXRlICRkYXRlIik7CiAgICAgIHRtcCA9IGRhdGUuc3Vic3RyaW5nKGluZGV4LCBwb3MpOwogICAgICBpbmRleCA9IHBvcyArIDE7CiAgICAgIGludCBtb250aCA9IG1vbnRocy5pbmRleE9mKHRtcCk7CiAgICAgIGlmIChtb250aCAhPSAtMSkgcmV0dXJuIG1vbnRoOwogICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCBIVFRQIGRhdGUgJGRhdGUiKTsKICAgIH0KCiAgICBpbnQgZXhwZWN0TnVtKFN0cmluZyBzZXBhcmF0b3IpIHsKICAgICAgaW50IHBvczsKICAgICAgaWYgKHNlcGFyYXRvci5sZW5ndGggPiAwKSB7CiAgICAgICAgcG9zID0gZGF0ZS5pbmRleE9mKHNlcGFyYXRvciwgaW5kZXgpOwogICAgICB9IGVsc2UgewogICAgICAgIHBvcyA9IGRhdGUubGVuZ3RoOwogICAgICB9CiAgICAgIFN0cmluZyB0bXAgPSBkYXRlLnN1YnN0cmluZyhpbmRleCwgcG9zKTsKICAgICAgaW5kZXggPSBwb3MgKyBzZXBhcmF0b3IubGVuZ3RoOwogICAgICB0cnkgewogICAgICAgIGludCB2YWx1ZSA9IGludC5wYXJzZSh0bXApOwogICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgfSBvbiBGb3JtYXRFeGNlcHRpb24gY2F0Y2ggKGUpIHsKICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCBIVFRQIGRhdGUgJGRhdGUiKTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgZXhwZWN0RW5kKCkgewogICAgICBpZiAoaW5kZXggIT0gZGF0ZS5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCBIVFRQIGRhdGUgJGRhdGUiKTsKICAgICAgfQogICAgfQoKICAgIGludCB3ZWVrZGF5ID0gZXhwZWN0V2Vla2RheSgpOwogICAgaW50IGRheTsKICAgIGludCBtb250aDsKICAgIGludCB5ZWFyOwogICAgaW50IGhvdXJzOwogICAgaW50IG1pbnV0ZXM7CiAgICBpbnQgc2Vjb25kczsKICAgIGlmIChmb3JtYXQgPT0gZm9ybWF0QXNjdGltZSkgewogICAgICBtb250aCA9IGV4cGVjdE1vbnRoKCIgIik7CiAgICAgIGlmIChkYXRlLmNvZGVVbml0QXQoaW5kZXgpID09IFNQKSBpbmRleCsrOwogICAgICBkYXkgPSBleHBlY3ROdW0oIiAiKTsKICAgICAgaG91cnMgPSBleHBlY3ROdW0oIjoiKTsKICAgICAgbWludXRlcyA9IGV4cGVjdE51bSgiOiIpOwogICAgICBzZWNvbmRzID0gZXhwZWN0TnVtKCIgIik7CiAgICAgIHllYXIgPSBleHBlY3ROdW0oIiIpOwogICAgfSBlbHNlIHsKICAgICAgZXhwZWN0KCIgIik7CiAgICAgIGRheSA9IGV4cGVjdE51bShmb3JtYXQgPT0gZm9ybWF0UmZjMTEyMyA/ICIgIiA6ICItIik7CiAgICAgIG1vbnRoID0gZXhwZWN0TW9udGgoZm9ybWF0ID09IGZvcm1hdFJmYzExMjMgPyAiICIgOiAiLSIpOwogICAgICB5ZWFyID0gZXhwZWN0TnVtKCIgIik7CiAgICAgIGhvdXJzID0gZXhwZWN0TnVtKCI6Iik7CiAgICAgIG1pbnV0ZXMgPSBleHBlY3ROdW0oIjoiKTsKICAgICAgc2Vjb25kcyA9IGV4cGVjdE51bSgiICIpOwogICAgICBleHBlY3QoIkdNVCIpOwogICAgfQogICAgZXhwZWN0RW5kKCk7CiAgICByZXR1cm4gbmV3IERhdGVUaW1lLnV0Yyh5ZWFyLCBtb250aCArIDEsIGRheSwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIDApOwogIH0KCiAgLy8gUGFyc2UgYSBjb29raWUgZGF0ZSBzdHJpbmcuCiAgc3RhdGljIERhdGVUaW1lIF9wYXJzZUNvb2tpZURhdGUoU3RyaW5nIGRhdGUpIHsKICAgIGNvbnN0IExpc3QgbW9udGhzTG93ZXJDYXNlID0gY29uc3QgWwogICAgICAiamFuIiwKICAgICAgImZlYiIsCiAgICAgICJtYXIiLAogICAgICAiYXByIiwKICAgICAgIm1heSIsCiAgICAgICJqdW4iLAogICAgICAianVsIiwKICAgICAgImF1ZyIsCiAgICAgICJzZXAiLAogICAgICAib2N0IiwKICAgICAgIm5vdiIsCiAgICAgICJkZWMiCiAgICBdOwoKICAgIGludCBwb3NpdGlvbiA9IDA7CgogICAgdm9pZCBlcnJvcigpIHsKICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkludmFsaWQgY29va2llIGRhdGUgJGRhdGUiKTsKICAgIH0KCiAgICBib29sIGlzRW5kKCkgPT4gcG9zaXRpb24gPT0gZGF0ZS5sZW5ndGg7CgogICAgYm9vbCBpc0RlbGltaXRlcihTdHJpbmcgcykgewogICAgICBpbnQgY2hhciA9IHMuY29kZVVuaXRBdCgwKTsKICAgICAgaWYgKGNoYXIgPT0gMHgwOSkgcmV0dXJuIHRydWU7CiAgICAgIGlmIChjaGFyID49IDB4MjAgJiYgY2hhciA8PSAweDJGKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGNoYXIgPj0gMHgzQiAmJiBjaGFyIDw9IDB4NDApIHJldHVybiB0cnVlOwogICAgICBpZiAoY2hhciA+PSAweDVCICYmIGNoYXIgPD0gMHg2MCkgcmV0dXJuIHRydWU7CiAgICAgIGlmIChjaGFyID49IDB4N0IgJiYgY2hhciA8PSAweDdFKSByZXR1cm4gdHJ1ZTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGJvb2wgaXNOb25EZWxpbWl0ZXIoU3RyaW5nIHMpIHsKICAgICAgaW50IGNoYXIgPSBzLmNvZGVVbml0QXQoMCk7CiAgICAgIGlmIChjaGFyID49IDB4MDAgJiYgY2hhciA8PSAweDA4KSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGNoYXIgPj0gMHgwQSAmJiBjaGFyIDw9IDB4MUYpIHJldHVybiB0cnVlOwogICAgICBpZiAoY2hhciA+PSAweDMwICYmIGNoYXIgPD0gMHgzOSkgcmV0dXJuIHRydWU7IC8vIERpZ2l0CiAgICAgIGlmIChjaGFyID09IDB4M0EpIHJldHVybiB0cnVlOyAvLyAnOicKICAgICAgaWYgKGNoYXIgPj0gMHg0MSAmJiBjaGFyIDw9IDB4NUEpIHJldHVybiB0cnVlOyAvLyBBbHBoYQogICAgICBpZiAoY2hhciA+PSAweDYxICYmIGNoYXIgPD0gMHg3QSkgcmV0dXJuIHRydWU7IC8vIEFscGhhCiAgICAgIGlmIChjaGFyID49IDB4N0YgJiYgY2hhciA8PSAweEZGKSByZXR1cm4gdHJ1ZTsgLy8gQWxwaGEKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGJvb2wgaXNEaWdpdChTdHJpbmcgcykgewogICAgICBpbnQgY2hhciA9IHMuY29kZVVuaXRBdCgwKTsKICAgICAgaWYgKGNoYXIgPiAweDJGICYmIGNoYXIgPCAweDNBKSByZXR1cm4gdHJ1ZTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGludCBnZXRNb250aChTdHJpbmcgbW9udGgpIHsKICAgICAgaWYgKG1vbnRoLmxlbmd0aCA8IDMpIHJldHVybiAtMTsKICAgICAgcmV0dXJuIG1vbnRoc0xvd2VyQ2FzZS5pbmRleE9mKG1vbnRoLnN1YnN0cmluZygwLCAzKSk7CiAgICB9CgogICAgaW50IHRvSW50KFN0cmluZyBzKSB7CiAgICAgIGludCBpbmRleCA9IDA7CiAgICAgIGZvciAoOyBpbmRleCA8IHMubGVuZ3RoICYmIGlzRGlnaXQoc1tpbmRleF0pOyBpbmRleCsrKTsKICAgICAgcmV0dXJuIGludC5wYXJzZShzLnN1YnN0cmluZygwLCBpbmRleCkpOwogICAgfQoKICAgIHZhciB0b2tlbnMgPSBbXTsKICAgIHdoaWxlICghaXNFbmQoKSkgewogICAgICB3aGlsZSAoIWlzRW5kKCkgJiYgaXNEZWxpbWl0ZXIoZGF0ZVtwb3NpdGlvbl0pKSBwb3NpdGlvbisrOwogICAgICBpbnQgc3RhcnQgPSBwb3NpdGlvbjsKICAgICAgd2hpbGUgKCFpc0VuZCgpICYmIGlzTm9uRGVsaW1pdGVyKGRhdGVbcG9zaXRpb25dKSkgcG9zaXRpb24rKzsKICAgICAgdG9rZW5zLmFkZChkYXRlLnN1YnN0cmluZyhzdGFydCwgcG9zaXRpb24pLnRvTG93ZXJDYXNlKCkpOwogICAgICB3aGlsZSAoIWlzRW5kKCkgJiYgaXNEZWxpbWl0ZXIoZGF0ZVtwb3NpdGlvbl0pKSBwb3NpdGlvbisrOwogICAgfQoKICAgIFN0cmluZyB0aW1lU3RyOwogICAgU3RyaW5nIGRheU9mTW9udGhTdHI7CiAgICBTdHJpbmcgbW9udGhTdHI7CiAgICBTdHJpbmcgeWVhclN0cjsKCiAgICBmb3IgKHZhciB0b2tlbiBpbiB0b2tlbnMpIHsKICAgICAgaWYgKHRva2VuLmxlbmd0aCA8IDEpIGNvbnRpbnVlOwogICAgICBpZiAodGltZVN0ciA9PSBudWxsICYmCiAgICAgICAgICB0b2tlbi5sZW5ndGggPj0gNSAmJgogICAgICAgICAgaXNEaWdpdCh0b2tlblswXSkgJiYKICAgICAgICAgICh0b2tlblsxXSA9PSAiOiIgfHwgKGlzRGlnaXQodG9rZW5bMV0pICYmIHRva2VuWzJdID09ICI6IikpKSB7CiAgICAgICAgdGltZVN0ciA9IHRva2VuOwogICAgICB9IGVsc2UgaWYgKGRheU9mTW9udGhTdHIgPT0gbnVsbCAmJiBpc0RpZ2l0KHRva2VuWzBdKSkgewogICAgICAgIGRheU9mTW9udGhTdHIgPSB0b2tlbjsKICAgICAgfSBlbHNlIGlmIChtb250aFN0ciA9PSBudWxsICYmIGdldE1vbnRoKHRva2VuKSA+PSAwKSB7CiAgICAgICAgbW9udGhTdHIgPSB0b2tlbjsKICAgICAgfSBlbHNlIGlmICh5ZWFyU3RyID09IG51bGwgJiYKICAgICAgICAgIHRva2VuLmxlbmd0aCA+PSAyICYmCiAgICAgICAgICBpc0RpZ2l0KHRva2VuWzBdKSAmJgogICAgICAgICAgaXNEaWdpdCh0b2tlblsxXSkpIHsKICAgICAgICB5ZWFyU3RyID0gdG9rZW47CiAgICAgIH0KICAgIH0KCiAgICBpZiAodGltZVN0ciA9PSBudWxsIHx8CiAgICAgICAgZGF5T2ZNb250aFN0ciA9PSBudWxsIHx8CiAgICAgICAgbW9udGhTdHIgPT0gbnVsbCB8fAogICAgICAgIHllYXJTdHIgPT0gbnVsbCkgewogICAgICBlcnJvcigpOwogICAgfQoKICAgIGludCB5ZWFyID0gdG9JbnQoeWVhclN0cik7CiAgICBpZiAoeWVhciA+PSA3MCAmJiB5ZWFyIDw9IDk5KQogICAgICB5ZWFyICs9IDE5MDA7CiAgICBlbHNlIGlmICh5ZWFyID49IDAgJiYgeWVhciA8PSA2OSkgeWVhciArPSAyMDAwOwogICAgaWYgKHllYXIgPCAxNjAxKSBlcnJvcigpOwoKICAgIGludCBkYXlPZk1vbnRoID0gdG9JbnQoZGF5T2ZNb250aFN0cik7CiAgICBpZiAoZGF5T2ZNb250aCA8IDEgfHwgZGF5T2ZNb250aCA+IDMxKSBlcnJvcigpOwoKICAgIGludCBtb250aCA9IGdldE1vbnRoKG1vbnRoU3RyKSArIDE7CgogICAgdmFyIHRpbWVMaXN0ID0gdGltZVN0ci5zcGxpdCgiOiIpOwogICAgaWYgKHRpbWVMaXN0Lmxlbmd0aCAhPSAzKSBlcnJvcigpOwogICAgaW50IGhvdXIgPSB0b0ludCh0aW1lTGlzdFswXSk7CiAgICBpbnQgbWludXRlID0gdG9JbnQodGltZUxpc3RbMV0pOwogICAgaW50IHNlY29uZCA9IHRvSW50KHRpbWVMaXN0WzJdKTsKICAgIGlmIChob3VyID4gMjMpIGVycm9yKCk7CiAgICBpZiAobWludXRlID4gNTkpIGVycm9yKCk7CiAgICBpZiAoc2Vjb25kID4gNTkpIGVycm9yKCk7CgogICAgcmV0dXJuIG5ldyBEYXRlVGltZS51dGMoeWVhciwgbW9udGgsIGRheU9mTW9udGgsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCAwKTsKICB9Cn0KgYYATk48ARQBBEQMBBEuNgU+ODo1LjkwNzcvMSoqMjdCMjIyAQYgQCoGKFAfDQ0NDQ0NDQ0NDQ0MBwEfKSQUJSATIhMhKCEqIyojFxoEAQYyQD8/BSYrIgUwPSAGJxdRIhARExIQEg8HIA0NDQ0NDQ0NDQ0NDAcpDQ0NDQ0NDAcrEBETEhASDwcpDQ0NDQ0NDQ0NDQ0MBwEhICEBExAQARwsPAg8FjwIGQYBGhNOKhcsSyoZJx0iGgoPKhknHSIaCikdIRoKCDoGASgwUCgXJyU6BgEmDyIuDxsILyYMJBYnPAgGARciPAgGASMNDw4PEREjIDEcHiAgHA0TPEAdHiAgFQYRTwQBITIpDQ0NDQ0NDQ0NDQ0MBwEWARM8BgEtASEiJTU1NTUUBgEkIjU1Piw+Pj4UBgEdIjMUBgEhJz0GARoVPi8GARUXQhxFQUIGARQaFRQBICYdHx9JGT8fPRokHx8fGQgGARshHBsPBgEfIhQ0HgErNAEoAScnIyUlHB4eAU8EAgEZZGFydDpfaHR0cC9odHRwX2RhdGUuZGFydDNvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvX2h0dHAvaHR0cF9oZWFkZXJzLmRhcnTAAG5XLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5faHR0cDsKCmNsYXNzIF9IdHRwSGVhZGVycyBpbXBsZW1lbnRzIEh0dHBIZWFkZXJzIHsKICBmaW5hbCBNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IF9oZWFkZXJzOwogIGZpbmFsIFN0cmluZyBwcm90b2NvbFZlcnNpb247CgogIGJvb2wgX211dGFibGUgPSB0cnVlOyAvLyBBcmUgdGhlIGhlYWRlcnMgY3VycmVudGx5IG11dGFibGU/CiAgTGlzdDxTdHJpbmc+IF9ub0ZvbGRpbmdIZWFkZXJzOwoKICBpbnQgX2NvbnRlbnRMZW5ndGggPSAtMTsKICBib29sIF9wZXJzaXN0ZW50Q29ubmVjdGlvbiA9IHRydWU7CiAgYm9vbCBfY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcgPSBmYWxzZTsKICBTdHJpbmcgX2hvc3Q7CiAgaW50IF9wb3J0OwoKICBmaW5hbCBpbnQgX2RlZmF1bHRQb3J0Rm9yU2NoZW1lOwoKICBfSHR0cEhlYWRlcnModGhpcy5wcm90b2NvbFZlcnNpb24sCiAgICAgIHtpbnQgZGVmYXVsdFBvcnRGb3JTY2hlbWU6IEh0dHBDbGllbnQuZGVmYXVsdEh0dHBQb3J0LAogICAgICBfSHR0cEhlYWRlcnMgaW5pdGlhbEhlYWRlcnN9KQogICAgICA6IF9oZWFkZXJzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+KCksCiAgICAgICAgX2RlZmF1bHRQb3J0Rm9yU2NoZW1lID0gZGVmYXVsdFBvcnRGb3JTY2hlbWUgewogICAgaWYgKGluaXRpYWxIZWFkZXJzICE9IG51bGwpIHsKICAgICAgaW5pdGlhbEhlYWRlcnMuX2hlYWRlcnMuZm9yRWFjaCgobmFtZSwgdmFsdWUpID0+IF9oZWFkZXJzW25hbWVdID0gdmFsdWUpOwogICAgICBfY29udGVudExlbmd0aCA9IGluaXRpYWxIZWFkZXJzLl9jb250ZW50TGVuZ3RoOwogICAgICBfcGVyc2lzdGVudENvbm5lY3Rpb24gPSBpbml0aWFsSGVhZGVycy5fcGVyc2lzdGVudENvbm5lY3Rpb247CiAgICAgIF9jaHVua2VkVHJhbnNmZXJFbmNvZGluZyA9IGluaXRpYWxIZWFkZXJzLl9jaHVua2VkVHJhbnNmZXJFbmNvZGluZzsKICAgICAgX2hvc3QgPSBpbml0aWFsSGVhZGVycy5faG9zdDsKICAgICAgX3BvcnQgPSBpbml0aWFsSGVhZGVycy5fcG9ydDsKICAgIH0KICAgIGlmIChwcm90b2NvbFZlcnNpb24gPT0gIjEuMCIpIHsKICAgICAgX3BlcnNpc3RlbnRDb25uZWN0aW9uID0gZmFsc2U7CiAgICAgIF9jaHVua2VkVHJhbnNmZXJFbmNvZGluZyA9IGZhbHNlOwogICAgfQogIH0KCiAgTGlzdDxTdHJpbmc+IG9wZXJhdG9yIFtdKFN0cmluZyBuYW1lKSA9PiBfaGVhZGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldOwoKICBTdHJpbmcgdmFsdWUoU3RyaW5nIG5hbWUpIHsKICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7CiAgICBMaXN0PFN0cmluZz4gdmFsdWVzID0gX2hlYWRlcnNbbmFtZV07CiAgICBpZiAodmFsdWVzID09IG51bGwpIHJldHVybiBudWxsOwogICAgaWYgKHZhbHVlcy5sZW5ndGggPiAxKSB7CiAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJNb3JlIHRoYW4gb25lIHZhbHVlIGZvciBoZWFkZXIgJG5hbWUiKTsKICAgIH0KICAgIHJldHVybiB2YWx1ZXNbMF07CiAgfQoKICB2b2lkIGFkZChTdHJpbmcgbmFtZSwgdmFsdWUpIHsKICAgIF9jaGVja011dGFibGUoKTsKICAgIF9hZGRBbGwoX3ZhbGlkYXRlRmllbGQobmFtZSksIHZhbHVlKTsKICB9CgogIHZvaWQgX2FkZEFsbChTdHJpbmcgbmFtZSwgdmFsdWUpIHsKICAgIGFzc2VydChuYW1lID09IF92YWxpZGF0ZUZpZWxkKG5hbWUpKTsKICAgIGlmICh2YWx1ZSBpcyBJdGVyYWJsZSkgewogICAgICBmb3IgKHZhciB2IGluIHZhbHVlKSB7CiAgICAgICAgX2FkZChuYW1lLCBfdmFsaWRhdGVWYWx1ZSh2KSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIF9hZGQobmFtZSwgX3ZhbGlkYXRlVmFsdWUodmFsdWUpKTsKICAgIH0KICB9CgogIHZvaWQgc2V0KFN0cmluZyBuYW1lLCBPYmplY3QgdmFsdWUpIHsKICAgIF9jaGVja011dGFibGUoKTsKICAgIG5hbWUgPSBfdmFsaWRhdGVGaWVsZChuYW1lKTsKICAgIF9oZWFkZXJzLnJlbW92ZShuYW1lKTsKICAgIGlmIChuYW1lID09IEh0dHBIZWFkZXJzLnRyYW5zZmVyRW5jb2RpbmdIZWFkZXIpIHsKICAgICAgX2NodW5rZWRUcmFuc2ZlckVuY29kaW5nID0gZmFsc2U7CiAgICB9CiAgICBfYWRkQWxsKG5hbWUsIHZhbHVlKTsKICB9CgogIHZvaWQgcmVtb3ZlKFN0cmluZyBuYW1lLCBPYmplY3QgdmFsdWUpIHsKICAgIF9jaGVja011dGFibGUoKTsKICAgIG5hbWUgPSBfdmFsaWRhdGVGaWVsZChuYW1lKTsKICAgIHZhbHVlID0gX3ZhbGlkYXRlVmFsdWUodmFsdWUpOwogICAgTGlzdDxTdHJpbmc+IHZhbHVlcyA9IF9oZWFkZXJzW25hbWVdOwogICAgaWYgKHZhbHVlcyAhPSBudWxsKSB7CiAgICAgIGludCBpbmRleCA9IHZhbHVlcy5pbmRleE9mKHZhbHVlKTsKICAgICAgaWYgKGluZGV4ICE9IC0xKSB7CiAgICAgICAgdmFsdWVzLnJlbW92ZVJhbmdlKGluZGV4LCBpbmRleCArIDEpOwogICAgICB9CiAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09IDApIF9oZWFkZXJzLnJlbW92ZShuYW1lKTsKICAgIH0KICAgIGlmIChuYW1lID09IEh0dHBIZWFkZXJzLnRyYW5zZmVyRW5jb2RpbmdIZWFkZXIgJiYgdmFsdWUgPT0gImNodW5rZWQiKSB7CiAgICAgIF9jaHVua2VkVHJhbnNmZXJFbmNvZGluZyA9IGZhbHNlOwogICAgfQogIH0KCiAgdm9pZCByZW1vdmVBbGwoU3RyaW5nIG5hbWUpIHsKICAgIF9jaGVja011dGFibGUoKTsKICAgIG5hbWUgPSBfdmFsaWRhdGVGaWVsZChuYW1lKTsKICAgIF9oZWFkZXJzLnJlbW92ZShuYW1lKTsKICB9CgogIHZvaWQgZm9yRWFjaCh2b2lkIGYoU3RyaW5nIG5hbWUsIExpc3Q8U3RyaW5nPiB2YWx1ZXMpKSB7CiAgICBfaGVhZGVycy5mb3JFYWNoKGYpOwogIH0KCiAgdm9pZCBub0ZvbGRpbmcoU3RyaW5nIG5hbWUpIHsKICAgIGlmIChfbm9Gb2xkaW5nSGVhZGVycyA9PSBudWxsKSBfbm9Gb2xkaW5nSGVhZGVycyA9IG5ldyBMaXN0PFN0cmluZz4oKTsKICAgIF9ub0ZvbGRpbmdIZWFkZXJzLmFkZChuYW1lKTsKICB9CgogIGJvb2wgZ2V0IHBlcnNpc3RlbnRDb25uZWN0aW9uID0+IF9wZXJzaXN0ZW50Q29ubmVjdGlvbjsKCiAgdm9pZCBzZXQgcGVyc2lzdGVudENvbm5lY3Rpb24oYm9vbCBwZXJzaXN0ZW50Q29ubmVjdGlvbikgewogICAgX2NoZWNrTXV0YWJsZSgpOwogICAgaWYgKHBlcnNpc3RlbnRDb25uZWN0aW9uID09IF9wZXJzaXN0ZW50Q29ubmVjdGlvbikgcmV0dXJuOwogICAgaWYgKHBlcnNpc3RlbnRDb25uZWN0aW9uKSB7CiAgICAgIGlmIChwcm90b2NvbFZlcnNpb24gPT0gIjEuMSIpIHsKICAgICAgICByZW1vdmUoSHR0cEhlYWRlcnMuY29ubmVjdGlvbkhlYWRlciwgImNsb3NlIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKF9jb250ZW50TGVuZ3RoID09IC0xKSB7CiAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigKICAgICAgICAgICAgICAiVHJ5aW5nIHRvIHNldCAnQ29ubmVjdGlvbjogS2VlcC1BbGl2ZScgb24gSFRUUCAxLjAgaGVhZGVycyB3aXRoICIKICAgICAgICAgICAgICAibm8gQ29udGVudExlbmd0aCIpOwogICAgICAgIH0KICAgICAgICBhZGQoSHR0cEhlYWRlcnMuY29ubmVjdGlvbkhlYWRlciwgImtlZXAtYWxpdmUiKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaWYgKHByb3RvY29sVmVyc2lvbiA9PSAiMS4xIikgewogICAgICAgIGFkZChIdHRwSGVhZGVycy5jb25uZWN0aW9uSGVhZGVyLCAiY2xvc2UiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZW1vdmUoSHR0cEhlYWRlcnMuY29ubmVjdGlvbkhlYWRlciwgImtlZXAtYWxpdmUiKTsKICAgICAgfQogICAgfQogICAgX3BlcnNpc3RlbnRDb25uZWN0aW9uID0gcGVyc2lzdGVudENvbm5lY3Rpb247CiAgfQoKICBpbnQgZ2V0IGNvbnRlbnRMZW5ndGggPT4gX2NvbnRlbnRMZW5ndGg7CgogIHZvaWQgc2V0IGNvbnRlbnRMZW5ndGgoaW50IGNvbnRlbnRMZW5ndGgpIHsKICAgIF9jaGVja011dGFibGUoKTsKICAgIGlmIChwcm90b2NvbFZlcnNpb24gPT0gIjEuMCIgJiYKICAgICAgICBwZXJzaXN0ZW50Q29ubmVjdGlvbiAmJgogICAgICAgIGNvbnRlbnRMZW5ndGggPT0gLTEpIHsKICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oCiAgICAgICAgICAiVHJ5aW5nIHRvIGNsZWFyIENvbnRlbnRMZW5ndGggb24gSFRUUCAxLjAgaGVhZGVycyB3aXRoICIKICAgICAgICAgICInQ29ubmVjdGlvbjogS2VlcC1BbGl2ZScgc2V0Iik7CiAgICB9CiAgICBpZiAoX2NvbnRlbnRMZW5ndGggPT0gY29udGVudExlbmd0aCkgcmV0dXJuOwogICAgX2NvbnRlbnRMZW5ndGggPSBjb250ZW50TGVuZ3RoOwogICAgaWYgKF9jb250ZW50TGVuZ3RoID49IDApIHsKICAgICAgaWYgKGNodW5rZWRUcmFuc2ZlckVuY29kaW5nKSBjaHVua2VkVHJhbnNmZXJFbmNvZGluZyA9IGZhbHNlOwogICAgICBfc2V0KEh0dHBIZWFkZXJzLmNvbnRlbnRMZW5ndGhIZWFkZXIsIGNvbnRlbnRMZW5ndGgudG9TdHJpbmcoKSk7CiAgICB9IGVsc2UgewogICAgICByZW1vdmVBbGwoSHR0cEhlYWRlcnMuY29udGVudExlbmd0aEhlYWRlcik7CiAgICAgIGlmIChwcm90b2NvbFZlcnNpb24gPT0gIjEuMSIpIHsKICAgICAgICBjaHVua2VkVHJhbnNmZXJFbmNvZGluZyA9IHRydWU7CiAgICAgIH0KICAgIH0KICB9CgogIGJvb2wgZ2V0IGNodW5rZWRUcmFuc2ZlckVuY29kaW5nID0+IF9jaHVua2VkVHJhbnNmZXJFbmNvZGluZzsKCiAgdm9pZCBzZXQgY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcoYm9vbCBjaHVua2VkVHJhbnNmZXJFbmNvZGluZykgewogICAgX2NoZWNrTXV0YWJsZSgpOwogICAgaWYgKGNodW5rZWRUcmFuc2ZlckVuY29kaW5nICYmIHByb3RvY29sVmVyc2lvbiA9PSAiMS4wIikgewogICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigKICAgICAgICAgICJUcnlpbmcgdG8gc2V0ICdUcmFuc2Zlci1FbmNvZGluZzogQ2h1bmtlZCcgb24gSFRUUCAxLjAgaGVhZGVycyIpOwogICAgfQogICAgaWYgKGNodW5rZWRUcmFuc2ZlckVuY29kaW5nID09IF9jaHVua2VkVHJhbnNmZXJFbmNvZGluZykgcmV0dXJuOwogICAgaWYgKGNodW5rZWRUcmFuc2ZlckVuY29kaW5nKSB7CiAgICAgIExpc3Q8U3RyaW5nPiB2YWx1ZXMgPSBfaGVhZGVyc1tIdHRwSGVhZGVycy50cmFuc2ZlckVuY29kaW5nSGVhZGVyXTsKICAgICAgaWYgKCh2YWx1ZXMgPT0gbnVsbCB8fCB2YWx1ZXMubGFzdCAhPSAiY2h1bmtlZCIpKSB7CiAgICAgICAgLy8gSGVhZGVycyBkb2VzIG5vdCBzcGVjaWZ5IGNodW5rZWQgZW5jb2RpbmcgLSBhZGQgaXQgaWYgc2V0LgogICAgICAgIF9hZGRWYWx1ZShIdHRwSGVhZGVycy50cmFuc2ZlckVuY29kaW5nSGVhZGVyLCAiY2h1bmtlZCIpOwogICAgICB9CiAgICAgIGNvbnRlbnRMZW5ndGggPSAtMTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIEhlYWRlcnMgZG9lcyBzcGVjaWZ5IGNodW5rZWQgZW5jb2RpbmcgLSByZW1vdmUgaXQgaWYgbm90IHNldC4KICAgICAgcmVtb3ZlKEh0dHBIZWFkZXJzLnRyYW5zZmVyRW5jb2RpbmdIZWFkZXIsICJjaHVua2VkIik7CiAgICB9CiAgICBfY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcgPSBjaHVua2VkVHJhbnNmZXJFbmNvZGluZzsKICB9CgogIFN0cmluZyBnZXQgaG9zdCA9PiBfaG9zdDsKCiAgdm9pZCBzZXQgaG9zdChTdHJpbmcgaG9zdCkgewogICAgX2NoZWNrTXV0YWJsZSgpOwogICAgX2hvc3QgPSBob3N0OwogICAgX3VwZGF0ZUhvc3RIZWFkZXIoKTsKICB9CgogIGludCBnZXQgcG9ydCA9PiBfcG9ydDsKCiAgdm9pZCBzZXQgcG9ydChpbnQgcG9ydCkgewogICAgX2NoZWNrTXV0YWJsZSgpOwogICAgX3BvcnQgPSBwb3J0OwogICAgX3VwZGF0ZUhvc3RIZWFkZXIoKTsKICB9CgogIERhdGVUaW1lIGdldCBpZk1vZGlmaWVkU2luY2UgewogICAgTGlzdDxTdHJpbmc+IHZhbHVlcyA9IF9oZWFkZXJzW0h0dHBIZWFkZXJzLmlmTW9kaWZpZWRTaW5jZUhlYWRlcl07CiAgICBpZiAodmFsdWVzICE9IG51bGwpIHsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gSHR0cERhdGUucGFyc2UodmFsdWVzWzBdKTsKICAgICAgfSBvbiBFeGNlcHRpb24gY2F0Y2ggKGUpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIHNldCBpZk1vZGlmaWVkU2luY2UoRGF0ZVRpbWUgaWZNb2RpZmllZFNpbmNlKSB7CiAgICBfY2hlY2tNdXRhYmxlKCk7CiAgICAvLyBGb3JtYXQgImlmTW9kaWZpZWRTaW5jZSIgaGVhZGVyIHdpdGggZGF0ZSBpbiBHcmVlbndpY2ggTWVhbiBUaW1lIChHTVQpLgogICAgU3RyaW5nIGZvcm1hdHRlZCA9IEh0dHBEYXRlLmZvcm1hdChpZk1vZGlmaWVkU2luY2UudG9VdGMoKSk7CiAgICBfc2V0KEh0dHBIZWFkZXJzLmlmTW9kaWZpZWRTaW5jZUhlYWRlciwgZm9ybWF0dGVkKTsKICB9CgogIERhdGVUaW1lIGdldCBkYXRlIHsKICAgIExpc3Q8U3RyaW5nPiB2YWx1ZXMgPSBfaGVhZGVyc1tIdHRwSGVhZGVycy5kYXRlSGVhZGVyXTsKICAgIGlmICh2YWx1ZXMgIT0gbnVsbCkgewogICAgICB0cnkgewogICAgICAgIHJldHVybiBIdHRwRGF0ZS5wYXJzZSh2YWx1ZXNbMF0pOwogICAgICB9IG9uIEV4Y2VwdGlvbiBjYXRjaCAoZSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgc2V0IGRhdGUoRGF0ZVRpbWUgZGF0ZSkgewogICAgX2NoZWNrTXV0YWJsZSgpOwogICAgLy8gRm9ybWF0ICJEYXRlVGltZSIgaGVhZGVyIHdpdGggZGF0ZSBpbiBHcmVlbndpY2ggTWVhbiBUaW1lIChHTVQpLgogICAgU3RyaW5nIGZvcm1hdHRlZCA9IEh0dHBEYXRlLmZvcm1hdChkYXRlLnRvVXRjKCkpOwogICAgX3NldCgiZGF0ZSIsIGZvcm1hdHRlZCk7CiAgfQoKICBEYXRlVGltZSBnZXQgZXhwaXJlcyB7CiAgICBMaXN0PFN0cmluZz4gdmFsdWVzID0gX2hlYWRlcnNbSHR0cEhlYWRlcnMuZXhwaXJlc0hlYWRlcl07CiAgICBpZiAodmFsdWVzICE9IG51bGwpIHsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gSHR0cERhdGUucGFyc2UodmFsdWVzWzBdKTsKICAgICAgfSBvbiBFeGNlcHRpb24gY2F0Y2ggKGUpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIHNldCBleHBpcmVzKERhdGVUaW1lIGV4cGlyZXMpIHsKICAgIF9jaGVja011dGFibGUoKTsKICAgIC8vIEZvcm1hdCAiRXhwaXJlcyIgaGVhZGVyIHdpdGggZGF0ZSBpbiBHcmVlbndpY2ggTWVhbiBUaW1lIChHTVQpLgogICAgU3RyaW5nIGZvcm1hdHRlZCA9IEh0dHBEYXRlLmZvcm1hdChleHBpcmVzLnRvVXRjKCkpOwogICAgX3NldChIdHRwSGVhZGVycy5leHBpcmVzSGVhZGVyLCBmb3JtYXR0ZWQpOwogIH0KCiAgQ29udGVudFR5cGUgZ2V0IGNvbnRlbnRUeXBlIHsKICAgIHZhciB2YWx1ZXMgPSBfaGVhZGVyc1siY29udGVudC10eXBlIl07CiAgICBpZiAodmFsdWVzICE9IG51bGwpIHsKICAgICAgcmV0dXJuIENvbnRlbnRUeXBlLnBhcnNlKHZhbHVlc1swXSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIHZvaWQgc2V0IGNvbnRlbnRUeXBlKENvbnRlbnRUeXBlIGNvbnRlbnRUeXBlKSB7CiAgICBfY2hlY2tNdXRhYmxlKCk7CiAgICBfc2V0KEh0dHBIZWFkZXJzLmNvbnRlbnRUeXBlSGVhZGVyLCBjb250ZW50VHlwZS50b1N0cmluZygpKTsKICB9CgogIHZvaWQgY2xlYXIoKSB7CiAgICBfY2hlY2tNdXRhYmxlKCk7CiAgICBfaGVhZGVycy5jbGVhcigpOwogICAgX2NvbnRlbnRMZW5ndGggPSAtMTsKICAgIF9wZXJzaXN0ZW50Q29ubmVjdGlvbiA9IHRydWU7CiAgICBfY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcgPSBmYWxzZTsKICAgIF9ob3N0ID0gbnVsbDsKICAgIF9wb3J0ID0gbnVsbDsKICB9CgogIC8vIFtuYW1lXSBtdXN0IGJlIGEgbG93ZXItY2FzZSB2ZXJzaW9uIG9mIHRoZSBuYW1lLgogIHZvaWQgX2FkZChTdHJpbmcgbmFtZSwgdmFsdWUpIHsKICAgIGFzc2VydChuYW1lID09IF92YWxpZGF0ZUZpZWxkKG5hbWUpKTsKICAgIC8vIFVzZSB0aGUgbGVuZ3RoIGFzIGluZGV4IG9uIHdoYXQgbWV0aG9kIHRvIGNhbGwuIFRoaXMgaXMgbm90YWJsZQogICAgLy8gZmFzdGVyIHRoYW4gY29tcHV0aW5nIGhhc2ggYW5kIGxvb2tpbmcgdXAgaW4gYSBoYXNoLW1hcC4KICAgIHN3aXRjaCAobmFtZS5sZW5ndGgpIHsKICAgICAgY2FzZSA0OgogICAgICAgIGlmIChIdHRwSGVhZGVycy5kYXRlSGVhZGVyID09IG5hbWUpIHsKICAgICAgICAgIF9hZGREYXRlKG5hbWUsIHZhbHVlKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKEh0dHBIZWFkZXJzLmhvc3RIZWFkZXIgPT0gbmFtZSkgewogICAgICAgICAgX2FkZEhvc3QobmFtZSwgdmFsdWUpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSA3OgogICAgICAgIGlmIChIdHRwSGVhZGVycy5leHBpcmVzSGVhZGVyID09IG5hbWUpIHsKICAgICAgICAgIF9hZGRFeHBpcmVzKG5hbWUsIHZhbHVlKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTA6CiAgICAgICAgaWYgKEh0dHBIZWFkZXJzLmNvbm5lY3Rpb25IZWFkZXIgPT0gbmFtZSkgewogICAgICAgICAgX2FkZENvbm5lY3Rpb24obmFtZSwgdmFsdWUpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSAxMjoKICAgICAgICBpZiAoSHR0cEhlYWRlcnMuY29udGVudFR5cGVIZWFkZXIgPT0gbmFtZSkgewogICAgICAgICAgX2FkZENvbnRlbnRUeXBlKG5hbWUsIHZhbHVlKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTQ6CiAgICAgICAgaWYgKEh0dHBIZWFkZXJzLmNvbnRlbnRMZW5ndGhIZWFkZXIgPT0gbmFtZSkgewogICAgICAgICAgX2FkZENvbnRlbnRMZW5ndGgobmFtZSwgdmFsdWUpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSAxNzoKICAgICAgICBpZiAoSHR0cEhlYWRlcnMudHJhbnNmZXJFbmNvZGluZ0hlYWRlciA9PSBuYW1lKSB7CiAgICAgICAgICBfYWRkVHJhbnNmZXJFbmNvZGluZyhuYW1lLCB2YWx1ZSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChIdHRwSGVhZGVycy5pZk1vZGlmaWVkU2luY2VIZWFkZXIgPT0gbmFtZSkgewogICAgICAgICAgX2FkZElmTW9kaWZpZWRTaW5jZShuYW1lLCB2YWx1ZSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQogICAgX2FkZFZhbHVlKG5hbWUsIHZhbHVlKTsKICB9CgogIHZvaWQgX2FkZENvbnRlbnRMZW5ndGgoU3RyaW5nIG5hbWUsIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgaXMgaW50KSB7CiAgICAgIGNvbnRlbnRMZW5ndGggPSB2YWx1ZTsKICAgIH0gZWxzZSBpZiAodmFsdWUgaXMgU3RyaW5nKSB7CiAgICAgIGNvbnRlbnRMZW5ndGggPSBpbnQucGFyc2UodmFsdWUpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIlVuZXhwZWN0ZWQgdHlwZSBmb3IgaGVhZGVyIG5hbWVkICRuYW1lIik7CiAgICB9CiAgfQoKICB2b2lkIF9hZGRUcmFuc2ZlckVuY29kaW5nKFN0cmluZyBuYW1lLCB2YWx1ZSkgewogICAgaWYgKHZhbHVlID09ICJjaHVua2VkIikgewogICAgICBjaHVua2VkVHJhbnNmZXJFbmNvZGluZyA9IHRydWU7CiAgICB9IGVsc2UgewogICAgICBfYWRkVmFsdWUoSHR0cEhlYWRlcnMudHJhbnNmZXJFbmNvZGluZ0hlYWRlciwgdmFsdWUpOwogICAgfQogIH0KCiAgdm9pZCBfYWRkRGF0ZShTdHJpbmcgbmFtZSwgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSBpcyBEYXRlVGltZSkgewogICAgICBkYXRlID0gdmFsdWU7CiAgICB9IGVsc2UgaWYgKHZhbHVlIGlzIFN0cmluZykgewogICAgICBfc2V0KEh0dHBIZWFkZXJzLmRhdGVIZWFkZXIsIHZhbHVlKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJVbmV4cGVjdGVkIHR5cGUgZm9yIGhlYWRlciBuYW1lZCAkbmFtZSIpOwogICAgfQogIH0KCiAgdm9pZCBfYWRkRXhwaXJlcyhTdHJpbmcgbmFtZSwgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSBpcyBEYXRlVGltZSkgewogICAgICBleHBpcmVzID0gdmFsdWU7CiAgICB9IGVsc2UgaWYgKHZhbHVlIGlzIFN0cmluZykgewogICAgICBfc2V0KEh0dHBIZWFkZXJzLmV4cGlyZXNIZWFkZXIsIHZhbHVlKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJVbmV4cGVjdGVkIHR5cGUgZm9yIGhlYWRlciBuYW1lZCAkbmFtZSIpOwogICAgfQogIH0KCiAgdm9pZCBfYWRkSWZNb2RpZmllZFNpbmNlKFN0cmluZyBuYW1lLCB2YWx1ZSkgewogICAgaWYgKHZhbHVlIGlzIERhdGVUaW1lKSB7CiAgICAgIGlmTW9kaWZpZWRTaW5jZSA9IHZhbHVlOwogICAgfSBlbHNlIGlmICh2YWx1ZSBpcyBTdHJpbmcpIHsKICAgICAgX3NldChIdHRwSGVhZGVycy5pZk1vZGlmaWVkU2luY2VIZWFkZXIsIHZhbHVlKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJVbmV4cGVjdGVkIHR5cGUgZm9yIGhlYWRlciBuYW1lZCAkbmFtZSIpOwogICAgfQogIH0KCiAgdm9pZCBfYWRkSG9zdChTdHJpbmcgbmFtZSwgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSBpcyBTdHJpbmcpIHsKICAgICAgaW50IHBvcyA9IHZhbHVlLmluZGV4T2YoIjoiKTsKICAgICAgaWYgKHBvcyA9PSAtMSkgewogICAgICAgIF9ob3N0ID0gdmFsdWU7CiAgICAgICAgX3BvcnQgPSBIdHRwQ2xpZW50LmRlZmF1bHRIdHRwUG9ydDsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAocG9zID4gMCkgewogICAgICAgICAgX2hvc3QgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgcG9zKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgX2hvc3QgPSBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAocG9zICsgMSA9PSB2YWx1ZS5sZW5ndGgpIHsKICAgICAgICAgIF9wb3J0ID0gSHR0cENsaWVudC5kZWZhdWx0SHR0cFBvcnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIF9wb3J0ID0gaW50LnBhcnNlKHZhbHVlLnN1YnN0cmluZyhwb3MgKyAxKSk7CiAgICAgICAgICB9IG9uIEZvcm1hdEV4Y2VwdGlvbiBjYXRjaCAoZSkgewogICAgICAgICAgICBfcG9ydCA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIF9zZXQoSHR0cEhlYWRlcnMuaG9zdEhlYWRlciwgdmFsdWUpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIlVuZXhwZWN0ZWQgdHlwZSBmb3IgaGVhZGVyIG5hbWVkICRuYW1lIik7CiAgICB9CiAgfQoKICB2b2lkIF9hZGRDb25uZWN0aW9uKFN0cmluZyBuYW1lLCB2YWx1ZSkgewogICAgdmFyIGxvd2VyQ2FzZVZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTsKICAgIGlmIChsb3dlckNhc2VWYWx1ZSA9PSAnY2xvc2UnKSB7CiAgICAgIF9wZXJzaXN0ZW50Q29ubmVjdGlvbiA9IGZhbHNlOwogICAgfSBlbHNlIGlmIChsb3dlckNhc2VWYWx1ZSA9PSAna2VlcC1hbGl2ZScpIHsKICAgICAgX3BlcnNpc3RlbnRDb25uZWN0aW9uID0gdHJ1ZTsKICAgIH0KICAgIF9hZGRWYWx1ZShuYW1lLCB2YWx1ZSk7CiAgfQoKICB2b2lkIF9hZGRDb250ZW50VHlwZShTdHJpbmcgbmFtZSwgdmFsdWUpIHsKICAgIF9zZXQoSHR0cEhlYWRlcnMuY29udGVudFR5cGVIZWFkZXIsIHZhbHVlKTsKICB9CgogIHZvaWQgX2FkZFZhbHVlKFN0cmluZyBuYW1lLCBPYmplY3QgdmFsdWUpIHsKICAgIExpc3Q8U3RyaW5nPiB2YWx1ZXMgPSBfaGVhZGVyc1tuYW1lXTsKICAgIGlmICh2YWx1ZXMgPT0gbnVsbCkgewogICAgICB2YWx1ZXMgPSBuZXcgTGlzdDxTdHJpbmc+KCk7CiAgICAgIF9oZWFkZXJzW25hbWVdID0gdmFsdWVzOwogICAgfQogICAgaWYgKHZhbHVlIGlzIERhdGVUaW1lKSB7CiAgICAgIHZhbHVlcy5hZGQoSHR0cERhdGUuZm9ybWF0KHZhbHVlKSk7CiAgICB9IGVsc2UgaWYgKHZhbHVlIGlzIFN0cmluZykgewogICAgICB2YWx1ZXMuYWRkKHZhbHVlKTsKICAgIH0gZWxzZSB7CiAgICAgIHZhbHVlcy5hZGQoX3ZhbGlkYXRlVmFsdWUodmFsdWUudG9TdHJpbmcoKSkpOwogICAgfQogIH0KCiAgdm9pZCBfc2V0KFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpIHsKICAgIGFzc2VydChuYW1lID09IF92YWxpZGF0ZUZpZWxkKG5hbWUpKTsKICAgIExpc3Q8U3RyaW5nPiB2YWx1ZXMgPSBuZXcgTGlzdDxTdHJpbmc+KCk7CiAgICBfaGVhZGVyc1tuYW1lXSA9IHZhbHVlczsKICAgIHZhbHVlcy5hZGQodmFsdWUpOwogIH0KCiAgX2NoZWNrTXV0YWJsZSgpIHsKICAgIGlmICghX211dGFibGUpIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJIVFRQIGhlYWRlcnMgYXJlIG5vdCBtdXRhYmxlIik7CiAgfQoKICBfdXBkYXRlSG9zdEhlYWRlcigpIHsKICAgIGJvb2wgZGVmYXVsdFBvcnQgPSBfcG9ydCA9PSBudWxsIHx8IF9wb3J0ID09IF9kZWZhdWx0UG9ydEZvclNjaGVtZTsKICAgIF9zZXQoImhvc3QiLCBkZWZhdWx0UG9ydCA/IGhvc3QgOiAiJGhvc3Q6JF9wb3J0Iik7CiAgfQoKICBfZm9sZEhlYWRlcihTdHJpbmcgbmFtZSkgewogICAgaWYgKG5hbWUgPT0gSHR0cEhlYWRlcnMuc2V0Q29va2llSGVhZGVyIHx8CiAgICAgICAgKF9ub0ZvbGRpbmdIZWFkZXJzICE9IG51bGwgJiYgX25vRm9sZGluZ0hlYWRlcnMuaW5kZXhPZihuYW1lKSAhPSAtMSkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICB2b2lkIF9maW5hbGl6ZSgpIHsKICAgIF9tdXRhYmxlID0gZmFsc2U7CiAgfQoKICB2b2lkIF9idWlsZChCeXRlc0J1aWxkZXIgYnVpbGRlcikgewogICAgZm9yIChTdHJpbmcgbmFtZSBpbiBfaGVhZGVycy5rZXlzKSB7CiAgICAgIExpc3Q8U3RyaW5nPiB2YWx1ZXMgPSBfaGVhZGVyc1tuYW1lXTsKICAgICAgYm9vbCBmb2xkID0gX2ZvbGRIZWFkZXIobmFtZSk7CiAgICAgIHZhciBuYW1lRGF0YSA9IG5hbWUuY29kZVVuaXRzOwogICAgICBidWlsZGVyLmFkZChuYW1lRGF0YSk7CiAgICAgIGJ1aWxkZXIuYWRkQnl0ZShfQ2hhckNvZGUuQ09MT04pOwogICAgICBidWlsZGVyLmFkZEJ5dGUoX0NoYXJDb2RlLlNQKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoaSA+IDApIHsKICAgICAgICAgIGlmIChmb2xkKSB7CiAgICAgICAgICAgIGJ1aWxkZXIuYWRkQnl0ZShfQ2hhckNvZGUuQ09NTUEpOwogICAgICAgICAgICBidWlsZGVyLmFkZEJ5dGUoX0NoYXJDb2RlLlNQKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJ1aWxkZXIuYWRkQnl0ZShfQ2hhckNvZGUuQ1IpOwogICAgICAgICAgICBidWlsZGVyLmFkZEJ5dGUoX0NoYXJDb2RlLkxGKTsKICAgICAgICAgICAgYnVpbGRlci5hZGQobmFtZURhdGEpOwogICAgICAgICAgICBidWlsZGVyLmFkZEJ5dGUoX0NoYXJDb2RlLkNPTE9OKTsKICAgICAgICAgICAgYnVpbGRlci5hZGRCeXRlKF9DaGFyQ29kZS5TUCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGJ1aWxkZXIuYWRkKHZhbHVlc1tpXS5jb2RlVW5pdHMpOwogICAgICB9CiAgICAgIGJ1aWxkZXIuYWRkQnl0ZShfQ2hhckNvZGUuQ1IpOwogICAgICBidWlsZGVyLmFkZEJ5dGUoX0NoYXJDb2RlLkxGKTsKICAgIH0KICB9CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIF9oZWFkZXJzLmZvckVhY2goKFN0cmluZyBuYW1lLCBMaXN0PFN0cmluZz4gdmFsdWVzKSB7CiAgICAgIHNiLi53cml0ZShuYW1lKS4ud3JpdGUoIjogIik7CiAgICAgIGJvb2wgZm9sZCA9IF9mb2xkSGVhZGVyKG5hbWUpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChpID4gMCkgewogICAgICAgICAgaWYgKGZvbGQpIHsKICAgICAgICAgICAgc2Iud3JpdGUoIiwgIik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzYi4ud3JpdGUoIlxuIikuLndyaXRlKG5hbWUpLi53cml0ZSgiOiAiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc2Iud3JpdGUodmFsdWVzW2ldKTsKICAgICAgfQogICAgICBzYi53cml0ZSgiXG4iKTsKICAgIH0pOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICBMaXN0PENvb2tpZT4gX3BhcnNlQ29va2llcygpIHsKICAgIC8vIFBhcnNlIGEgQ29va2llIGhlYWRlciB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGluIFJGQyA2MjY1LgogICAgdmFyIGNvb2tpZXMgPSBuZXcgTGlzdDxDb29raWU+KCk7CiAgICB2b2lkIHBhcnNlQ29va2llU3RyaW5nKFN0cmluZyBzKSB7CiAgICAgIGludCBpbmRleCA9IDA7CgogICAgICBib29sIGRvbmUoKSA9PiBpbmRleCA9PSAtMSB8fCBpbmRleCA9PSBzLmxlbmd0aDsKCiAgICAgIHZvaWQgc2tpcFdTKCkgewogICAgICAgIHdoaWxlICghZG9uZSgpKSB7CiAgICAgICAgICBpZiAoc1tpbmRleF0gIT0gIiAiICYmIHNbaW5kZXhdICE9ICJcdCIpIHJldHVybjsKICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgfQogICAgICB9CgogICAgICBTdHJpbmcgcGFyc2VOYW1lKCkgewogICAgICAgIGludCBzdGFydCA9IGluZGV4OwogICAgICAgIHdoaWxlICghZG9uZSgpKSB7CiAgICAgICAgICBpZiAoc1tpbmRleF0gPT0gIiAiIHx8IHNbaW5kZXhdID09ICJcdCIgfHwgc1tpbmRleF0gPT0gIj0iKSBicmVhazsKICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzLnN1YnN0cmluZyhzdGFydCwgaW5kZXgpOwogICAgICB9CgogICAgICBTdHJpbmcgcGFyc2VWYWx1ZSgpIHsKICAgICAgICBpbnQgc3RhcnQgPSBpbmRleDsKICAgICAgICB3aGlsZSAoIWRvbmUoKSkgewogICAgICAgICAgaWYgKHNbaW5kZXhdID09ICIgIiB8fCBzW2luZGV4XSA9PSAiXHQiIHx8IHNbaW5kZXhdID09ICI7IikgYnJlYWs7CiAgICAgICAgICBpbmRleCsrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcy5zdWJzdHJpbmcoc3RhcnQsIGluZGV4KTsKICAgICAgfQoKICAgICAgYm9vbCBleHBlY3QoU3RyaW5nIGV4cGVjdGVkKSB7CiAgICAgICAgaWYgKGRvbmUoKSkgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChzW2luZGV4XSAhPSBleHBlY3RlZCkgcmV0dXJuIGZhbHNlOwogICAgICAgIGluZGV4Kys7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KCiAgICAgIHdoaWxlICghZG9uZSgpKSB7CiAgICAgICAgc2tpcFdTKCk7CiAgICAgICAgaWYgKGRvbmUoKSkgcmV0dXJuOwogICAgICAgIFN0cmluZyBuYW1lID0gcGFyc2VOYW1lKCk7CiAgICAgICAgc2tpcFdTKCk7CiAgICAgICAgaWYgKCFleHBlY3QoIj0iKSkgewogICAgICAgICAgaW5kZXggPSBzLmluZGV4T2YoJzsnLCBpbmRleCk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgc2tpcFdTKCk7CiAgICAgICAgU3RyaW5nIHZhbHVlID0gcGFyc2VWYWx1ZSgpOwogICAgICAgIHRyeSB7CiAgICAgICAgICBjb29raWVzLmFkZChuZXcgX0Nvb2tpZShuYW1lLCB2YWx1ZSkpOwogICAgICAgIH0gY2F0Y2ggKF8pIHsKICAgICAgICAgIC8vIFNraXAgaXQsIGludmFsaWQgY29va2llIGRhdGEuCiAgICAgICAgfQogICAgICAgIHNraXBXUygpOwogICAgICAgIGlmIChkb25lKCkpIHJldHVybjsKICAgICAgICBpZiAoIWV4cGVjdCgiOyIpKSB7CiAgICAgICAgICBpbmRleCA9IHMuaW5kZXhPZignOycsIGluZGV4KTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIExpc3Q8U3RyaW5nPiB2YWx1ZXMgPSBfaGVhZGVyc1tIdHRwSGVhZGVycy5jb29raWVIZWFkZXJdOwogICAgaWYgKHZhbHVlcyAhPSBudWxsKSB7CiAgICAgIHZhbHVlcy5mb3JFYWNoKChoZWFkZXJWYWx1ZSkgPT4gcGFyc2VDb29raWVTdHJpbmcoaGVhZGVyVmFsdWUpKTsKICAgIH0KICAgIHJldHVybiBjb29raWVzOwogIH0KCiAgc3RhdGljIFN0cmluZyBfdmFsaWRhdGVGaWVsZChTdHJpbmcgZmllbGQpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmllbGQubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKCFfSHR0cFBhcnNlci5faXNUb2tlbkNoYXIoZmllbGQuY29kZVVuaXRBdChpKSkpIHsKICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKAogICAgICAgICAgICAiSW52YWxpZCBIVFRQIGhlYWRlciBmaWVsZCBuYW1lOiAke2pzb24uZW5jb2RlKGZpZWxkKX0iKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZpZWxkLnRvTG93ZXJDYXNlKCk7CiAgfQoKICBzdGF0aWMgX3ZhbGlkYXRlVmFsdWUodmFsdWUpIHsKICAgIGlmICh2YWx1ZSBpcyEgU3RyaW5nKSByZXR1cm4gdmFsdWU7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICghX0h0dHBQYXJzZXIuX2lzVmFsdWVDaGFyKHZhbHVlLmNvZGVVbml0QXQoaSkpKSB7CiAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICAgIkludmFsaWQgSFRUUCBoZWFkZXIgZmllbGQgdmFsdWU6ICR7anNvbi5lbmNvZGUodmFsdWUpfSIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQp9CgpjbGFzcyBfSGVhZGVyVmFsdWUgaW1wbGVtZW50cyBIZWFkZXJWYWx1ZSB7CiAgU3RyaW5nIF92YWx1ZTsKICBNYXA8U3RyaW5nLCBTdHJpbmc+IF9wYXJhbWV0ZXJzOwogIE1hcDxTdHJpbmcsIFN0cmluZz4gX3VubW9kaWZpYWJsZVBhcmFtZXRlcnM7CgogIF9IZWFkZXJWYWx1ZShbdGhpcy5fdmFsdWUgPSAiIiwgTWFwPFN0cmluZywgU3RyaW5nPiBwYXJhbWV0ZXJzXSkgewogICAgaWYgKHBhcmFtZXRlcnMgIT0gbnVsbCkgewogICAgICBfcGFyYW1ldGVycyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPi5mcm9tKHBhcmFtZXRlcnMpOwogICAgfQogIH0KCiAgc3RhdGljIF9IZWFkZXJWYWx1ZSBwYXJzZShTdHJpbmcgdmFsdWUsCiAgICAgIHtwYXJhbWV0ZXJTZXBhcmF0b3I6ICI7IiwKICAgICAgdmFsdWVTZXBhcmF0b3I6IG51bGwsCiAgICAgIHByZXNlcnZlQmFja3NsYXNoOiBmYWxzZX0pIHsKICAgIC8vIFBhcnNlIHRoZSBzdHJpbmcuCiAgICB2YXIgcmVzdWx0ID0gbmV3IF9IZWFkZXJWYWx1ZSgpOwogICAgcmVzdWx0Ll9wYXJzZSh2YWx1ZSwgcGFyYW1ldGVyU2VwYXJhdG9yLCB2YWx1ZVNlcGFyYXRvciwgcHJlc2VydmVCYWNrc2xhc2gpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFN0cmluZyBnZXQgdmFsdWUgPT4gX3ZhbHVlOwoKICB2b2lkIF9lbnN1cmVQYXJhbWV0ZXJzKCkgewogICAgaWYgKF9wYXJhbWV0ZXJzID09IG51bGwpIHsKICAgICAgX3BhcmFtZXRlcnMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKICAgIH0KICB9CgogIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0IHBhcmFtZXRlcnMgewogICAgX2Vuc3VyZVBhcmFtZXRlcnMoKTsKICAgIGlmIChfdW5tb2RpZmlhYmxlUGFyYW1ldGVycyA9PSBudWxsKSB7CiAgICAgIF91bm1vZGlmaWFibGVQYXJhbWV0ZXJzID0gbmV3IFVubW9kaWZpYWJsZU1hcFZpZXcoX3BhcmFtZXRlcnMpOwogICAgfQogICAgcmV0dXJuIF91bm1vZGlmaWFibGVQYXJhbWV0ZXJzOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoX3ZhbHVlKTsKICAgIGlmIChwYXJhbWV0ZXJzICE9IG51bGwgJiYgcGFyYW1ldGVycy5sZW5ndGggPiAwKSB7CiAgICAgIF9wYXJhbWV0ZXJzLmZvckVhY2goKFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpIHsKICAgICAgICBzYi4ud3JpdGUoIjsgIikuLndyaXRlKG5hbWUpLi53cml0ZSgiPSIpLi53cml0ZSh2YWx1ZSk7CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICB2b2lkIF9wYXJzZShTdHJpbmcgcywgU3RyaW5nIHBhcmFtZXRlclNlcGFyYXRvciwgU3RyaW5nIHZhbHVlU2VwYXJhdG9yLAogICAgICBib29sIHByZXNlcnZlQmFja3NsYXNoKSB7CiAgICBpbnQgaW5kZXggPSAwOwoKICAgIGJvb2wgZG9uZSgpID0+IGluZGV4ID09IHMubGVuZ3RoOwoKICAgIHZvaWQgc2tpcFdTKCkgewogICAgICB3aGlsZSAoIWRvbmUoKSkgewogICAgICAgIGlmIChzW2luZGV4XSAhPSAiICIgJiYgc1tpbmRleF0gIT0gIlx0IikgcmV0dXJuOwogICAgICAgIGluZGV4Kys7CiAgICAgIH0KICAgIH0KCiAgICBTdHJpbmcgcGFyc2VWYWx1ZSgpIHsKICAgICAgaW50IHN0YXJ0ID0gaW5kZXg7CiAgICAgIHdoaWxlICghZG9uZSgpKSB7CiAgICAgICAgaWYgKHNbaW5kZXhdID09ICIgIiB8fAogICAgICAgICAgICBzW2luZGV4XSA9PSAiXHQiIHx8CiAgICAgICAgICAgIHNbaW5kZXhdID09IHZhbHVlU2VwYXJhdG9yIHx8CiAgICAgICAgICAgIHNbaW5kZXhdID09IHBhcmFtZXRlclNlcGFyYXRvcikgYnJlYWs7CiAgICAgICAgaW5kZXgrKzsKICAgICAgfQogICAgICByZXR1cm4gcy5zdWJzdHJpbmcoc3RhcnQsIGluZGV4KTsKICAgIH0KCiAgICB2b2lkIGV4cGVjdChTdHJpbmcgZXhwZWN0ZWQpIHsKICAgICAgaWYgKGRvbmUoKSB8fCBzW2luZGV4XSAhPSBleHBlY3RlZCkgewogICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJGYWlsZWQgdG8gcGFyc2UgaGVhZGVyIHZhbHVlIik7CiAgICAgIH0KICAgICAgaW5kZXgrKzsKICAgIH0KCiAgICB2b2lkIG1heWJlRXhwZWN0KFN0cmluZyBleHBlY3RlZCkgewogICAgICBpZiAoc1tpbmRleF0gPT0gZXhwZWN0ZWQpIGluZGV4Kys7CiAgICB9CgogICAgdm9pZCBwYXJzZVBhcmFtZXRlcnMoKSB7CiAgICAgIHZhciBwYXJhbWV0ZXJzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CiAgICAgIF9wYXJhbWV0ZXJzID0gbmV3IFVubW9kaWZpYWJsZU1hcFZpZXcocGFyYW1ldGVycyk7CgogICAgICBTdHJpbmcgcGFyc2VQYXJhbWV0ZXJOYW1lKCkgewogICAgICAgIGludCBzdGFydCA9IGluZGV4OwogICAgICAgIHdoaWxlICghZG9uZSgpKSB7CiAgICAgICAgICBpZiAoc1tpbmRleF0gPT0gIiAiIHx8CiAgICAgICAgICAgICAgc1tpbmRleF0gPT0gIlx0IiB8fAogICAgICAgICAgICAgIHNbaW5kZXhdID09ICI9IiB8fAogICAgICAgICAgICAgIHNbaW5kZXhdID09IHBhcmFtZXRlclNlcGFyYXRvciB8fAogICAgICAgICAgICAgIHNbaW5kZXhdID09IHZhbHVlU2VwYXJhdG9yKSBicmVhazsKICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzLnN1YnN0cmluZyhzdGFydCwgaW5kZXgpLnRvTG93ZXJDYXNlKCk7CiAgICAgIH0KCiAgICAgIFN0cmluZyBwYXJzZVBhcmFtZXRlclZhbHVlKCkgewogICAgICAgIGlmICghZG9uZSgpICYmIHNbaW5kZXhdID09ICJcIiIpIHsKICAgICAgICAgIC8vIFBhcnNlIHF1b3RlZCB2YWx1ZS4KICAgICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgICB3aGlsZSAoIWRvbmUoKSkgewogICAgICAgICAgICBpZiAoc1tpbmRleF0gPT0gIlxcIikgewogICAgICAgICAgICAgIGlmIChpbmRleCArIDEgPT0gcy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJGYWlsZWQgdG8gcGFyc2UgaGVhZGVyIHZhbHVlIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChwcmVzZXJ2ZUJhY2tzbGFzaCAmJiBzW2luZGV4ICsgMV0gIT0gIlwiIikgewogICAgICAgICAgICAgICAgc2Iud3JpdGUoc1tpbmRleF0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpbmRleCsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKHNbaW5kZXhdID09ICJcIiIpIHsKICAgICAgICAgICAgICBpbmRleCsrOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHNiLndyaXRlKHNbaW5kZXhdKTsKICAgICAgICAgICAgaW5kZXgrKzsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBQYXJzZSBub24tcXVvdGVkIHZhbHVlLgogICAgICAgICAgdmFyIHZhbCA9IHBhcnNlVmFsdWUoKTsKICAgICAgICAgIHJldHVybiB2YWwgPT0gIiIgPyBudWxsIDogdmFsOwogICAgICAgIH0KICAgICAgfQoKICAgICAgd2hpbGUgKCFkb25lKCkpIHsKICAgICAgICBza2lwV1MoKTsKICAgICAgICBpZiAoZG9uZSgpKSByZXR1cm47CiAgICAgICAgU3RyaW5nIG5hbWUgPSBwYXJzZVBhcmFtZXRlck5hbWUoKTsKICAgICAgICBza2lwV1MoKTsKICAgICAgICBpZiAoZG9uZSgpKSB7CiAgICAgICAgICBwYXJhbWV0ZXJzW25hbWVdID0gbnVsbDsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgbWF5YmVFeHBlY3QoIj0iKTsKICAgICAgICBza2lwV1MoKTsKICAgICAgICBpZiAoZG9uZSgpKSB7CiAgICAgICAgICBwYXJhbWV0ZXJzW25hbWVdID0gbnVsbDsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgU3RyaW5nIHZhbHVlID0gcGFyc2VQYXJhbWV0ZXJWYWx1ZSgpOwogICAgICAgIGlmIChuYW1lID09ICdjaGFyc2V0JyAmJiB0aGlzIGlzIF9Db250ZW50VHlwZSAmJiB2YWx1ZSAhPSBudWxsKSB7CiAgICAgICAgICAvLyBDaGFyc2V0IHBhcmFtZXRlciBvZiBDb250ZW50VHlwZXMgYXJlIGFsd2F5cyBsb3dlci1jYXNlLgogICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpOwogICAgICAgIH0KICAgICAgICBwYXJhbWV0ZXJzW25hbWVdID0gdmFsdWU7CiAgICAgICAgc2tpcFdTKCk7CiAgICAgICAgaWYgKGRvbmUoKSkgcmV0dXJuOwogICAgICAgIC8vIFRPRE86IEltcGxlbWVudCBzdXBwb3J0IGZvciBtdWx0aS12YWx1ZWQgcGFyYW1ldGVycy4KICAgICAgICBpZiAoc1tpbmRleF0gPT0gdmFsdWVTZXBhcmF0b3IpIHJldHVybjsKICAgICAgICBleHBlY3QocGFyYW1ldGVyU2VwYXJhdG9yKTsKICAgICAgfQogICAgfQoKICAgIHNraXBXUygpOwogICAgX3ZhbHVlID0gcGFyc2VWYWx1ZSgpOwogICAgc2tpcFdTKCk7CiAgICBpZiAoZG9uZSgpKSByZXR1cm47CiAgICBtYXliZUV4cGVjdChwYXJhbWV0ZXJTZXBhcmF0b3IpOwogICAgcGFyc2VQYXJhbWV0ZXJzKCk7CiAgfQp9CgpjbGFzcyBfQ29udGVudFR5cGUgZXh0ZW5kcyBfSGVhZGVyVmFsdWUgaW1wbGVtZW50cyBDb250ZW50VHlwZSB7CiAgU3RyaW5nIF9wcmltYXJ5VHlwZSA9ICIiOwogIFN0cmluZyBfc3ViVHlwZSA9ICIiOwoKICBfQ29udGVudFR5cGUoU3RyaW5nIHByaW1hcnlUeXBlLCBTdHJpbmcgc3ViVHlwZSwgU3RyaW5nIGNoYXJzZXQsCiAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1ldGVycykKICAgICAgOiBfcHJpbWFyeVR5cGUgPSBwcmltYXJ5VHlwZSwKICAgICAgICBfc3ViVHlwZSA9IHN1YlR5cGUsCiAgICAgICAgc3VwZXIoIiIpIHsKICAgIGlmIChfcHJpbWFyeVR5cGUgPT0gbnVsbCkgX3ByaW1hcnlUeXBlID0gIiI7CiAgICBpZiAoX3N1YlR5cGUgPT0gbnVsbCkgX3N1YlR5cGUgPSAiIjsKICAgIF92YWx1ZSA9ICIkX3ByaW1hcnlUeXBlLyRfc3ViVHlwZSI7CiAgICBpZiAocGFyYW1ldGVycyAhPSBudWxsKSB7CiAgICAgIF9lbnN1cmVQYXJhbWV0ZXJzKCk7CiAgICAgIHBhcmFtZXRlcnMuZm9yRWFjaCgoU3RyaW5nIGtleSwgU3RyaW5nIHZhbHVlKSB7CiAgICAgICAgU3RyaW5nIGxvd2VyQ2FzZUtleSA9IGtleS50b0xvd2VyQ2FzZSgpOwogICAgICAgIGlmIChsb3dlckNhc2VLZXkgPT0gImNoYXJzZXQiKSB7CiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX3BhcmFtZXRlcnNbbG93ZXJDYXNlS2V5XSA9IHZhbHVlOwogICAgICB9KTsKICAgIH0KICAgIGlmIChjaGFyc2V0ICE9IG51bGwpIHsKICAgICAgX2Vuc3VyZVBhcmFtZXRlcnMoKTsKICAgICAgdGhpcy5fcGFyYW1ldGVyc1siY2hhcnNldCJdID0gY2hhcnNldC50b0xvd2VyQ2FzZSgpOwogICAgfQogIH0KCiAgX0NvbnRlbnRUeXBlLl8oKTsKCiAgc3RhdGljIF9Db250ZW50VHlwZSBwYXJzZShTdHJpbmcgdmFsdWUpIHsKICAgIHZhciByZXN1bHQgPSBuZXcgX0NvbnRlbnRUeXBlLl8oKTsKICAgIHJlc3VsdC5fcGFyc2UodmFsdWUsICI7IiwgbnVsbCwgZmFsc2UpOwogICAgaW50IGluZGV4ID0gcmVzdWx0Ll92YWx1ZS5pbmRleE9mKCIvIik7CiAgICBpZiAoaW5kZXggPT0gLTEgfHwgaW5kZXggPT0gKHJlc3VsdC5fdmFsdWUubGVuZ3RoIC0gMSkpIHsKICAgICAgcmVzdWx0Ll9wcmltYXJ5VHlwZSA9IHJlc3VsdC5fdmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7CiAgICAgIHJlc3VsdC5fc3ViVHlwZSA9ICIiOwogICAgfSBlbHNlIHsKICAgICAgcmVzdWx0Ll9wcmltYXJ5VHlwZSA9CiAgICAgICAgICByZXN1bHQuX3ZhbHVlLnN1YnN0cmluZygwLCBpbmRleCkudHJpbSgpLnRvTG93ZXJDYXNlKCk7CiAgICAgIHJlc3VsdC5fc3ViVHlwZSA9IHJlc3VsdC5fdmFsdWUuc3Vic3RyaW5nKGluZGV4ICsgMSkudHJpbSgpLnRvTG93ZXJDYXNlKCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgU3RyaW5nIGdldCBtaW1lVHlwZSA9PiAnJHByaW1hcnlUeXBlLyRzdWJUeXBlJzsKCiAgU3RyaW5nIGdldCBwcmltYXJ5VHlwZSA9PiBfcHJpbWFyeVR5cGU7CgogIFN0cmluZyBnZXQgc3ViVHlwZSA9PiBfc3ViVHlwZTsKCiAgU3RyaW5nIGdldCBjaGFyc2V0ID0+IHBhcmFtZXRlcnNbImNoYXJzZXQiXTsKfQoKY2xhc3MgX0Nvb2tpZSBpbXBsZW1lbnRzIENvb2tpZSB7CiAgU3RyaW5nIF9uYW1lOwogIFN0cmluZyBfdmFsdWU7CiAgRGF0ZVRpbWUgZXhwaXJlczsKICBpbnQgbWF4QWdlOwogIFN0cmluZyBkb21haW47CiAgU3RyaW5nIHBhdGg7CiAgYm9vbCBodHRwT25seSA9IGZhbHNlOwogIGJvb2wgc2VjdXJlID0gZmFsc2U7CgogIF9Db29raWUoU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSkKICAgICAgOiBfbmFtZSA9IF92YWxpZGF0ZU5hbWUobmFtZSksCiAgICAgICAgX3ZhbHVlID0gX3ZhbGlkYXRlVmFsdWUodmFsdWUpLAogICAgICAgIGh0dHBPbmx5ID0gdHJ1ZTsKCiAgU3RyaW5nIGdldCBuYW1lID0+IF9uYW1lOwogIFN0cmluZyBnZXQgdmFsdWUgPT4gX3ZhbHVlOwoKICBzZXQgbmFtZShTdHJpbmcgbmV3TmFtZSkgewogICAgX3ZhbGlkYXRlTmFtZShuZXdOYW1lKTsKICAgIF9uYW1lID0gbmV3TmFtZTsKICB9CgogIHNldCB2YWx1ZShTdHJpbmcgbmV3VmFsdWUpIHsKICAgIF92YWxpZGF0ZVZhbHVlKG5ld1ZhbHVlKTsKICAgIF92YWx1ZSA9IG5ld1ZhbHVlOwogIH0KCiAgX0Nvb2tpZS5mcm9tU2V0Q29va2llVmFsdWUoU3RyaW5nIHZhbHVlKSB7CiAgICAvLyBQYXJzZSB0aGUgJ3NldC1jb29raWUnIGhlYWRlciB2YWx1ZS4KICAgIF9wYXJzZVNldENvb2tpZVZhbHVlKHZhbHVlKTsKICB9CgogIC8vIFBhcnNlIGEgJ3NldC1jb29raWUnIGhlYWRlciB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGluIFJGQyA2MjY1LgogIHZvaWQgX3BhcnNlU2V0Q29va2llVmFsdWUoU3RyaW5nIHMpIHsKICAgIGludCBpbmRleCA9IDA7CgogICAgYm9vbCBkb25lKCkgPT4gaW5kZXggPT0gcy5sZW5ndGg7CgogICAgU3RyaW5nIHBhcnNlTmFtZSgpIHsKICAgICAgaW50IHN0YXJ0ID0gaW5kZXg7CiAgICAgIHdoaWxlICghZG9uZSgpKSB7CiAgICAgICAgaWYgKHNbaW5kZXhdID09ICI9IikgYnJlYWs7CiAgICAgICAgaW5kZXgrKzsKICAgICAgfQogICAgICByZXR1cm4gcy5zdWJzdHJpbmcoc3RhcnQsIGluZGV4KS50cmltKCk7CiAgICB9CgogICAgU3RyaW5nIHBhcnNlVmFsdWUoKSB7CiAgICAgIGludCBzdGFydCA9IGluZGV4OwogICAgICB3aGlsZSAoIWRvbmUoKSkgewogICAgICAgIGlmIChzW2luZGV4XSA9PSAiOyIpIGJyZWFrOwogICAgICAgIGluZGV4Kys7CiAgICAgIH0KICAgICAgcmV0dXJuIHMuc3Vic3RyaW5nKHN0YXJ0LCBpbmRleCkudHJpbSgpOwogICAgfQoKICAgIHZvaWQgZXhwZWN0KFN0cmluZyBleHBlY3RlZCkgewogICAgICBpZiAoZG9uZSgpKSB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiRmFpbGVkIHRvIHBhcnNlIGhlYWRlciB2YWx1ZSBbJHNdIik7CiAgICAgIGlmIChzW2luZGV4XSAhPSBleHBlY3RlZCkgewogICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJGYWlsZWQgdG8gcGFyc2UgaGVhZGVyIHZhbHVlIFskc10iKTsKICAgICAgfQogICAgICBpbmRleCsrOwogICAgfQoKICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGVzKCkgewogICAgICBTdHJpbmcgcGFyc2VBdHRyaWJ1dGVOYW1lKCkgewogICAgICAgIGludCBzdGFydCA9IGluZGV4OwogICAgICAgIHdoaWxlICghZG9uZSgpKSB7CiAgICAgICAgICBpZiAoc1tpbmRleF0gPT0gIj0iIHx8IHNbaW5kZXhdID09ICI7IikgYnJlYWs7CiAgICAgICAgICBpbmRleCsrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcy5zdWJzdHJpbmcoc3RhcnQsIGluZGV4KS50cmltKCkudG9Mb3dlckNhc2UoKTsKICAgICAgfQoKICAgICAgU3RyaW5nIHBhcnNlQXR0cmlidXRlVmFsdWUoKSB7CiAgICAgICAgaW50IHN0YXJ0ID0gaW5kZXg7CiAgICAgICAgd2hpbGUgKCFkb25lKCkpIHsKICAgICAgICAgIGlmIChzW2luZGV4XSA9PSAiOyIpIGJyZWFrOwogICAgICAgICAgaW5kZXgrKzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHMuc3Vic3RyaW5nKHN0YXJ0LCBpbmRleCkudHJpbSgpLnRvTG93ZXJDYXNlKCk7CiAgICAgIH0KCiAgICAgIHdoaWxlICghZG9uZSgpKSB7CiAgICAgICAgU3RyaW5nIG5hbWUgPSBwYXJzZUF0dHJpYnV0ZU5hbWUoKTsKICAgICAgICBTdHJpbmcgdmFsdWUgPSAiIjsKICAgICAgICBpZiAoIWRvbmUoKSAmJiBzW2luZGV4XSA9PSAiPSIpIHsKICAgICAgICAgIGluZGV4Kys7IC8vIFNraXAgdGhlID0gY2hhcmFjdGVyLgogICAgICAgICAgdmFsdWUgPSBwYXJzZUF0dHJpYnV0ZVZhbHVlKCk7CiAgICAgICAgfQogICAgICAgIGlmIChuYW1lID09ICJleHBpcmVzIikgewogICAgICAgICAgZXhwaXJlcyA9IEh0dHBEYXRlLl9wYXJzZUNvb2tpZURhdGUodmFsdWUpOwogICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAibWF4LWFnZSIpIHsKICAgICAgICAgIG1heEFnZSA9IGludC5wYXJzZSh2YWx1ZSk7CiAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJkb21haW4iKSB7CiAgICAgICAgICBkb21haW4gPSB2YWx1ZTsKICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gInBhdGgiKSB7CiAgICAgICAgICBwYXRoID0gdmFsdWU7CiAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJodHRwb25seSIpIHsKICAgICAgICAgIGh0dHBPbmx5ID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gInNlY3VyZSIpIHsKICAgICAgICAgIHNlY3VyZSA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGlmICghZG9uZSgpKSBpbmRleCsrOyAvLyBTa2lwIHRoZSA7IGNoYXJhY3RlcgogICAgICB9CiAgICB9CgogICAgX25hbWUgPSBfdmFsaWRhdGVOYW1lKHBhcnNlTmFtZSgpKTsKICAgIGlmIChkb25lKCkgfHwgX25hbWUubGVuZ3RoID09IDApIHsKICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkZhaWxlZCB0byBwYXJzZSBoZWFkZXIgdmFsdWUgWyRzXSIpOwogICAgfQogICAgaW5kZXgrKzsgLy8gU2tpcCB0aGUgPSBjaGFyYWN0ZXIuCiAgICBfdmFsdWUgPSBfdmFsaWRhdGVWYWx1ZShwYXJzZVZhbHVlKCkpOwogICAgaWYgKGRvbmUoKSkgcmV0dXJuOwogICAgaW5kZXgrKzsgLy8gU2tpcCB0aGUgOyBjaGFyYWN0ZXIuCiAgICBwYXJzZUF0dHJpYnV0ZXMoKTsKICB9CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLi53cml0ZShfbmFtZSkuLndyaXRlKCI9IikuLndyaXRlKF92YWx1ZSk7CiAgICBpZiAoZXhwaXJlcyAhPSBudWxsKSB7CiAgICAgIHNiLi53cml0ZSgiOyBFeHBpcmVzPSIpLi53cml0ZShIdHRwRGF0ZS5mb3JtYXQoZXhwaXJlcykpOwogICAgfQogICAgaWYgKG1heEFnZSAhPSBudWxsKSB7CiAgICAgIHNiLi53cml0ZSgiOyBNYXgtQWdlPSIpLi53cml0ZShtYXhBZ2UpOwogICAgfQogICAgaWYgKGRvbWFpbiAhPSBudWxsKSB7CiAgICAgIHNiLi53cml0ZSgiOyBEb21haW49IikuLndyaXRlKGRvbWFpbik7CiAgICB9CiAgICBpZiAocGF0aCAhPSBudWxsKSB7CiAgICAgIHNiLi53cml0ZSgiOyBQYXRoPSIpLi53cml0ZShwYXRoKTsKICAgIH0KICAgIGlmIChzZWN1cmUpIHNiLndyaXRlKCI7IFNlY3VyZSIpOwogICAgaWYgKGh0dHBPbmx5KSBzYi53cml0ZSgiOyBIdHRwT25seSIpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICBzdGF0aWMgU3RyaW5nIF92YWxpZGF0ZU5hbWUoU3RyaW5nIG5ld05hbWUpIHsKICAgIGNvbnN0IHNlcGFyYXRvcnMgPSBjb25zdCBbCiAgICAgICIoIiwKICAgICAgIikiLAogICAgICAiPCIsCiAgICAgICI+IiwKICAgICAgIkAiLAogICAgICAiLCIsCiAgICAgICI7IiwKICAgICAgIjoiLAogICAgICAiXFwiLAogICAgICAnIicsCiAgICAgICIvIiwKICAgICAgIlsiLAogICAgICAiXSIsCiAgICAgICI/IiwKICAgICAgIj0iLAogICAgICAieyIsCiAgICAgICJ9IgogICAgXTsKICAgIGlmIChuZXdOYW1lID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoIm5hbWUiKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmV3TmFtZS5sZW5ndGg7IGkrKykgewogICAgICBpbnQgY29kZVVuaXQgPSBuZXdOYW1lLmNvZGVVbml0c1tpXTsKICAgICAgaWYgKGNvZGVVbml0IDw9IDMyIHx8CiAgICAgICAgICBjb2RlVW5pdCA+PSAxMjcgfHwKICAgICAgICAgIHNlcGFyYXRvcnMuaW5kZXhPZihuZXdOYW1lW2ldKSA+PSAwKSB7CiAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICAgIkludmFsaWQgY2hhcmFjdGVyIGluIGNvb2tpZSBuYW1lLCBjb2RlIHVuaXQ6ICckY29kZVVuaXQnIiwKICAgICAgICAgICAgbmV3TmFtZSwKICAgICAgICAgICAgaSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXdOYW1lOwogIH0KCiAgc3RhdGljIFN0cmluZyBfdmFsaWRhdGVWYWx1ZShTdHJpbmcgbmV3VmFsdWUpIHsKICAgIGlmIChuZXdWYWx1ZSA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci5ub3ROdWxsKCJ2YWx1ZSIpOwogICAgLy8gUGVyIFJGQyA2MjY1LCBjb25zaWRlciBzdXJyb3VuZGluZyAiIiBhcyBwYXJ0IG9mIHRoZSB2YWx1ZSwgYnV0IG90aGVyd2lzZQogICAgLy8gZG91YmxlIHF1b3RlcyBhcmUgbm90IGFsbG93ZWQuCiAgICBpbnQgc3RhcnQgPSAwOwogICAgaW50IGVuZCA9IG5ld1ZhbHVlLmxlbmd0aDsKICAgIGlmICgyIDw9IG5ld1ZhbHVlLmxlbmd0aCAmJgogICAgICAgIG5ld1ZhbHVlLmNvZGVVbml0c1tzdGFydF0gPT0gMHgyMiAmJgogICAgICAgIG5ld1ZhbHVlLmNvZGVVbml0c1tlbmQgLSAxXSA9PSAweDIyKSB7CiAgICAgIHN0YXJ0Kys7CiAgICAgIGVuZC0tOwogICAgfQoKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIGludCBjb2RlVW5pdCA9IG5ld1ZhbHVlLmNvZGVVbml0c1tpXTsKICAgICAgaWYgKCEoY29kZVVuaXQgPT0gMHgyMSB8fAogICAgICAgICAgKGNvZGVVbml0ID49IDB4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bnN0IEhUVFAgPSBjb25zdCBbNzIsIDg0LCA4NCwgODBdOwogIC8vIEJ5dGVzIGZvciAiSFRUUC8xLiIuCiAgc3RhdGljIGNvbnN0IEhUVFAxRE9UID0gY29uc3QgWzcyLCA4NCwgODQsIDgwLCA0NywgNDksIDQ2XTsKICAvLyBCeXRlcyBmb3IgIkhUVFAvMS4wIi4KICBzdGF0aWMgY29uc3QgSFRUUDEwID0gY29uc3QgWzcyLCA4NCwgODQsIDgwLCA0NywgNDksIDQ2LCA0OF07CiAgLy8gQnl0ZXMgZm9yICJIVFRQLzEuMSIuCiAgc3RhdGljIGNvbnN0IEhUVFAxMSA9IGNvbnN0IFs3MiwgODQsIDg0LCA4MCwgNDcsIDQ5LCA0NiwgNDldOwoKICBzdGF0aWMgY29uc3QgYm9vbCBUID0gdHJ1ZTsKICBzdGF0aWMgY29uc3QgYm9vbCBGID0gZmFsc2U7CiAgLy8gTG9vcHVwLW1hcCBmb3IgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOiAnKCk8PkAsOzpcXCIvW10/PXt9IFx0Jy4KICBzdGF0aWMgY29uc3QgU0VQQVJBVE9SX01BUCA9IGNvbnN0IFsKICAgIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIFQsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIC8vCiAgICBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBULCBGLCBULCBGLCBGLCBGLCBGLCBGLCBULCBULCBGLCBGLCBULCBGLCBGLCBULCAvLwogICAgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgVCwgVCwgVCwgVCwgVCwgVCwgVCwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgLy8KICAgIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIFQsIFQsIFQsIEYsIEYsIC8vCiAgICBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCAvLwogICAgRiwgRiwgRiwgVCwgRiwgVCwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgLy8KICAgIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIC8vCiAgICBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCAvLwogICAgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgLy8KICAgIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIC8vCiAgICBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGCiAgXTsKfQoKLy8gRnJlcXVlbnRseSB1c2VkIGNoYXJhY3RlciBjb2Rlcy4KY2xhc3MgX0NoYXJDb2RlIHsKICBzdGF0aWMgY29uc3QgaW50IEhUID0gOTsKICBzdGF0aWMgY29uc3QgaW50IExGID0gMTA7CiAgc3RhdGljIGNvbnN0IGludCBDUiA9IDEzOwogIHN0YXRpYyBjb25zdCBpbnQgU1AgPSAzMjsKICBzdGF0aWMgY29uc3QgaW50IEFNUEVSU0FORCA9IDM4OwogIHN0YXRpYyBjb25zdCBpbnQgQ09NTUEgPSA0NDsKICBzdGF0aWMgY29uc3QgaW50IERBU0ggPSA0NTsKICBzdGF0aWMgY29uc3QgaW50IFNMQVNIID0gNDc7CiAgc3RhdGljIGNvbnN0IGludCBaRVJPID0gNDg7CiAgc3RhdGljIGNvbnN0IGludCBPTkUgPSA0OTsKICBzdGF0aWMgY29uc3QgaW50IENPTE9OID0gNTg7CiAgc3RhdGljIGNvbnN0IGludCBTRU1JX0NPTE9OID0gNTk7CiAgc3RhdGljIGNvbnN0IGludCBFUVVBTCA9IDYxOwp9CgovLyBTdGF0ZXMgb2YgdGhlIEhUVFAgcGFyc2VyIHN0YXRlIG1hY2hpbmUuCmNsYXNzIF9TdGF0ZSB7CiAgc3RhdGljIGNvbnN0IGludCBTVEFSVCA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBNRVRIT0RfT1JfUkVTUE9OU0VfSFRUUF9WRVJTSU9OID0gMTsKICBzdGF0aWMgY29uc3QgaW50IFJFU1BPTlNFX0hUVFBfVkVSU0lPTiA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBSRVFVRVNUX0xJTkVfTUVUSE9EID0gMzsKICBzdGF0aWMgY29uc3QgaW50IFJFUVVFU1RfTElORV9VUkkgPSA0OwogIHN0YXRpYyBjb25zdCBpbnQgUkVRVUVTVF9MSU5FX0hUVFBfVkVSU0lPTiA9IDU7CiAgc3RhdGljIGNvbnN0IGludCBSRVFVRVNUX0xJTkVfRU5ESU5HID0gNjsKICBzdGF0aWMgY29uc3QgaW50IFJFU1BPTlNFX0xJTkVfU1RBVFVTX0NPREUgPSA3OwogIHN0YXRpYyBjb25zdCBpbnQgUkVTUE9OU0VfTElORV9SRUFTT05fUEhSQVNFID0gODsKICBzdGF0aWMgY29uc3QgaW50IFJFU1BPTlNFX0xJTkVfRU5ESU5HID0gOTsKICBzdGF0aWMgY29uc3QgaW50IEhFQURFUl9TVEFSVCA9IDEwOwogIHN0YXRpYyBjb25zdCBpbnQgSEVBREVSX0ZJRUxEID0gMTE7CiAgc3RhdGljIGNvbnN0IGludCBIRUFERVJfVkFMVUVfU1RBUlQgPSAxMjsKICBzdGF0aWMgY29uc3QgaW50IEhFQURFUl9WQUxVRSA9IDEzOwogIHN0YXRpYyBjb25zdCBpbnQgSEVBREVSX1ZBTFVFX0ZPTERJTkdfT1JfRU5ESU5HID0gMTQ7CiAgc3RhdGljIGNvbnN0IGludCBIRUFERVJfVkFMVUVfRk9MRF9PUl9FTkQgPSAxNTsKICBzdGF0aWMgY29uc3QgaW50IEhFQURFUl9FTkRJTkcgPSAxNjsKCiAgc3RhdGljIGNvbnN0IGludCBDSFVOS19TSVpFX1NUQVJUSU5HX0NSID0gMTc7CiAgc3RhdGljIGNvbnN0IGludCBDSFVOS19TSVpFX1NUQVJUSU5HX0xGID0gMTg7CiAgc3RhdGljIGNvbnN0IGludCBDSFVOS19TSVpFID0gMTk7CiAgc3RhdGljIGNvbnN0IGludCBDSFVOS19TSVpFX0VYVEVOU0lPTiA9IDIwOwogIHN0YXRpYyBjb25zdCBpbnQgQ0hVTktfU0laRV9FTkRJTkcgPSAyMTsKICBzdGF0aWMgY29uc3QgaW50IENIVU5LRURfQk9EWV9ET05FX0NSID0gMjI7CiAgc3RhdGljIGNvbnN0IGludCBDSFVOS0VEX0JPRFlfRE9ORV9MRiA9IDIzOwogIHN0YXRpYyBjb25zdCBpbnQgQk9EWSA9IDI0OwogIHN0YXRpYyBjb25zdCBpbnQgQ0xPU0VEID0gMjU7CiAgc3RhdGljIGNvbnN0IGludCBVUEdSQURFRCA9IDI2OwogIHN0YXRpYyBjb25zdCBpbnQgRkFJTFVSRSA9IDI3OwoKICBzdGF0aWMgY29uc3QgaW50IEZJUlNUX0JPRFlfU1RBVEUgPSBDSFVOS19TSVpFX1NUQVJUSU5HX0NSOwp9CgovLyBIVFRQIHZlcnNpb24gb2YgdGhlIHJlcXVlc3Qgb3IgcmVzcG9uc2UgYmVpbmcgcGFyc2VkLgpjbGFzcyBfSHR0cFZlcnNpb24gewogIHN0YXRpYyBjb25zdCBpbnQgVU5ERVRFUk1JTkVEID0gMDsKICBzdGF0aWMgY29uc3QgaW50IEhUVFAxMCA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBIVFRQMTEgPSAyOwp9CgovLyBTdGF0ZXMgb2YgdGhlIEhUVFAgcGFyc2VyIHN0YXRlIG1hY2hpbmUuCmNsYXNzIF9NZXNzYWdlVHlwZSB7CiAgc3RhdGljIGNvbnN0IGludCBVTkRFVEVSTUlORUQgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgUkVRVUVTVCA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBSRVNQT05TRSA9IDA7Cn0KCi8qKgogKiBUaGUgX0h0dHBEZXRhY2hlZFN0cmVhbVN1YnNjcmlwdGlvbiB0YWtlcyBhIHN1YnNjcmlwdGlvbiBhbmQgc29tZSBleHRyYSBkYXRhLAogKiBhbmQgbWFrZXMgaXQgcG9zc2libGUgdG8gImluamVjdCIgdGhlIGRhdGEgaW4gZnJvbSBvZiBvdGhlciBkYXRhIGV2ZW50cwogKiBmcm9tIHRoZSBzdWJzY3JpcHRpb24uCiAqCiAqIEl0IGRvZXMgc28gYnkgb3ZlcnJpZGluZyBwYXVzZS9yZXN1bWUsIHNvIHRoYXQgb25jZSB0aGUKICogX0h0dHBEZXRhY2hlZFN0cmVhbVN1YnNjcmlwdGlvbiBpcyByZXN1bWVkLCBpdCdsbCBkZWxpdmVyIHRoZSBkYXRhIGJlZm9yZQogKiByZXN1bWluZyB0aGUgdW5kZXJsYXlpbmcgc3Vic2NyaXB0aW9uLgogKi8KY2xhc3MgX0h0dHBEZXRhY2hlZFN0cmVhbVN1YnNjcmlwdGlvbiBpbXBsZW1lbnRzIFN0cmVhbVN1YnNjcmlwdGlvbjxVaW50OExpc3Q+IHsKICBTdHJlYW1TdWJzY3JpcHRpb248VWludDhMaXN0PiBfc3Vic2NyaXB0aW9uOwogIFVpbnQ4TGlzdCBfaW5qZWN0RGF0YTsKICBib29sIF9pc0NhbmNlbGVkID0gZmFsc2U7CiAgaW50IF9wYXVzZUNvdW50ID0gMTsKICBGdW5jdGlvbiBfdXNlck9uRGF0YTsKICBib29sIF9zY2hlZHVsZWQgPSBmYWxzZTsKCiAgX0h0dHBEZXRhY2hlZFN0cmVhbVN1YnNjcmlwdGlvbigKICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLCB0aGlzLl9pbmplY3REYXRhLCB0aGlzLl91c2VyT25EYXRhKTsKCiAgYm9vbCBnZXQgaXNQYXVzZWQgPT4gX3N1YnNjcmlwdGlvbi5pc1BhdXNlZDsKCiAgRnV0dXJlPFQ+IGFzRnV0dXJlPFQ+KFtUIGZ1dHVyZVZhbHVlXSkgPT4KICAgICAgX3N1YnNjcmlwdGlvbi5hc0Z1dHVyZTxUPihmdXR1cmVWYWx1ZSk7CgogIEZ1dHVyZSBjYW5jZWwoKSB7CiAgICBfaXNDYW5jZWxlZCA9IHRydWU7CiAgICBfaW5qZWN0RGF0YSA9IG51bGw7CiAgICByZXR1cm4gX3N1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICB9CgogIHZvaWQgb25EYXRhKHZvaWQgaGFuZGxlRGF0YShVaW50OExpc3QgZGF0YSkpIHsKICAgIF91c2VyT25EYXRhID0gaGFuZGxlRGF0YTsKICAgIF9zdWJzY3JpcHRpb24ub25EYXRhKGhhbmRsZURhdGEpOwogIH0KCiAgdm9pZCBvbkRvbmUodm9pZCBoYW5kbGVEb25lKCkpIHsKICAgIF9zdWJzY3JpcHRpb24ub25Eb25lKGhhbmRsZURvbmUpOwogIH0KCiAgdm9pZCBvbkVycm9yKEZ1bmN0aW9uIGhhbmRsZUVycm9yKSB7CiAgICBfc3Vic2NyaXB0aW9uLm9uRXJyb3IoaGFuZGxlRXJyb3IpOwogIH0KCiAgdm9pZCBwYXVzZShbRnV0dXJlIHJlc3VtZVNpZ25hbF0pIHsKICAgIGlmIChfaW5qZWN0RGF0YSA9PSBudWxsKSB7CiAgICAgIF9zdWJzY3JpcHRpb24ucGF1c2UocmVzdW1lU2lnbmFsKTsKICAgIH0gZWxzZSB7CiAgICAgIF9wYXVzZUNvdW50Kys7CiAgICAgIGlmIChyZXN1bWVTaWduYWwgIT0gbnVsbCkgewogICAgICAgIHJlc3VtZVNpZ25hbC53aGVuQ29tcGxldGUocmVzdW1lKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCByZXN1bWUoKSB7CiAgICBpZiAoX2luamVjdERhdGEgPT0gbnVsbCkgewogICAgICBfc3Vic2NyaXB0aW9uLnJlc3VtZSgpOwogICAgfSBlbHNlIHsKICAgICAgX3BhdXNlQ291bnQtLTsKICAgICAgX21heWJlU2NoZWR1bGVEYXRhKCk7CiAgICB9CiAgfQoKICB2b2lkIF9tYXliZVNjaGVkdWxlRGF0YSgpIHsKICAgIGlmIChfc2NoZWR1bGVkKSByZXR1cm47CiAgICBpZiAoX3BhdXNlQ291bnQgIT0gMCkgcmV0dXJuOwogICAgX3NjaGVkdWxlZCA9IHRydWU7CiAgICBzY2hlZHVsZU1pY3JvdGFzaygoKSB7CiAgICAgIF9zY2hlZHVsZWQgPSBmYWxzZTsKICAgICAgaWYgKF9wYXVzZUNvdW50ID4gMCB8fCBfaXNDYW5jZWxlZCkgcmV0dXJuOwogICAgICB2YXIgZGF0YSA9IF9pbmplY3REYXRhOwogICAgICBfaW5qZWN0RGF0YSA9IG51bGw7CiAgICAgIC8vIFRvIGVuc3VyZSB0aGF0ICdzdWJzY3JpcHRpb24uaXNQYXVzZWQnIGlzIGZhbHNlLCB3ZSByZXN1bWUgdGhlCiAgICAgIC8vIHN1YnNjcmlwdGlvbiBoZXJlLiBUaGlzIGlzIGZpbmUgYXMgcG90ZW50aWFsIGV2ZW50cyBhcmUgZGVsYXllZC4KICAgICAgX3N1YnNjcmlwdGlvbi5yZXN1bWUoKTsKICAgICAgaWYgKF91c2VyT25EYXRhICE9IG51bGwpIHsKICAgICAgICBfdXNlck9uRGF0YShkYXRhKTsKICAgICAgfQogICAgfSk7CiAgfQp9CgpjbGFzcyBfSHR0cERldGFjaGVkSW5jb21pbmcgZXh0ZW5kcyBTdHJlYW08VWludDhMaXN0PiB7CiAgZmluYWwgU3RyZWFtU3Vic2NyaXB0aW9uPFVpbnQ4TGlzdD4gc3Vic2NyaXB0aW9uOwogIGZpbmFsIFVpbnQ4TGlzdCBidWZmZXJlZERhdGE7CgogIF9IdHRwRGV0YWNoZWRJbmNvbWluZyh0aGlzLnN1YnNjcmlwdGlvbiwgdGhpcy5idWZmZXJlZERhdGEpOwoKICBTdHJlYW1TdWJzY3JpcHRpb248VWludDhMaXN0PiBsaXN0ZW4odm9pZCBvbkRhdGEoVWludDhMaXN0IGV2ZW50KSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIGlmIChzdWJzY3JpcHRpb24gIT0gbnVsbCkgewogICAgICBzdWJzY3JpcHRpb24KICAgICAgICAuLm9uRGF0YShvbkRhdGEpCiAgICAgICAgLi5vbkVycm9yKG9uRXJyb3IpCiAgICAgICAgLi5vbkRvbmUob25Eb25lKTsKICAgICAgaWYgKGJ1ZmZlcmVkRGF0YSA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbi4ucmVzdW1lKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBfSHR0cERldGFjaGVkU3RyZWFtU3Vic2NyaXB0aW9uKAogICAgICAgICAgc3Vic2NyaXB0aW9uLCBidWZmZXJlZERhdGEsIG9uRGF0YSkKICAgICAgICAuLnJlc3VtZSgpOwogICAgfSBlbHNlIHsKICAgICAgLy8gVE9ETygyNjM3OSk6IGFkZCB0ZXN0IGZvciB0aGlzIGJyYW5jaC4KICAgICAgcmV0dXJuIG5ldyBTdHJlYW08VWludDhMaXN0Pi5mcm9tSXRlcmFibGUoW2J1ZmZlcmVkRGF0YV0pLmxpc3RlbihvbkRhdGEsCiAgICAgICAgICBvbkVycm9yOiBvbkVycm9yLCBvbkRvbmU6IG9uRG9uZSwgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgICB9CiAgfQp9CgovKioKICogSFRUUCBwYXJzZXIgd2hpY2ggcGFyc2VzIHRoZSBkYXRhIHN0cmVhbSBnaXZlbiB0byBbY29uc3VtZV0uCiAqCiAqIElmIGFuIEhUVFAgcGFyc2VyIGVycm9yIG9jY3VycywgdGhlIHBhcnNlciB3aWxsIHNpZ25hbCBhbiBlcnJvciB0byBlaXRoZXIKICogdGhlIGN1cnJlbnQgX0h0dHBJbmNvbWluZyBvciB0aGUgX3BhcnNlciBpdHNlbGYuCiAqCiAqIFRoZSBjb25uZWN0aW9uIHVwZ3JhZGVzIChlLmcuIHN3aXRjaGluZyBmcm9tIEhUVFAvMS4xIHRvIHRoZQogKiBXZWJTb2NrZXQgcHJvdG9jb2wpIGlzIGhhbmRsZWQgaW4gYSBzcGVjaWFsIHdheS4gSWYgY29ubmVjdGlvbgogKiB1cGdyYWRlIGlzIHNwZWNpZmllZCBpbiB0aGUgaGVhZGVycywgdGhlbiBvbiB0aGUgY2FsbGJhY2sgdG8KICogWzpyZXNwb25zZVN0YXJ0Ol0gdGhlIFs6dXBncmFkZTpdIHByb3BlcnR5IG9uIHRoZSBbOkh0dHBQYXJzZXI6XQogKiBvYmplY3Qgd2lsbCBiZSBbOnRydWU6XSBpbmRpY2F0aW5nIHRoYXQgZnJvbSBub3cgb24gdGhlIHByb3RvY29sIGlzCiAqIG5vdCBIVFRQIGFueW1vcmUgYW5kIG5vIG1vcmUgY2FsbGJhY2tzIHdpbGwgaGFwcGVuLCB0aGF0IGlzCiAqIFs6ZGF0YVJlY2VpdmVkOl0gYW5kIFs6ZGF0YUVuZDpdIGFyZSBub3QgY2FsbGVkIGluIHRoaXMgY2FzZSBhcwogKiB0aGVyZSBpcyBubyBtb3JlIEhUVFAgZGF0YS4gQWZ0ZXIgdGhlIHVwZ3JhZGUgdGhlIG1ldGhvZAogKiBbOnJlYWRVbnBhcnNlZERhdGE6XSBjYW4gYmUgdXNlZCB0byByZWFkIGFueSByZW1haW5pbmcgYnl0ZXMgaW4gdGhlCiAqIEhUVFAgcGFyc2VyIHdoaWNoIGFyZSBwYXJ0IG9mIHRoZSBwcm90b2NvbCB0aGUgY29ubmVjdGlvbiBpcwogKiB1cGdyYWRpbmcgdG8uIFRoZXNlIGJ5dGVzIGNhbm5vdCBiZSBwcm9jZXNzZWQgYnkgdGhlIEhUVFAgcGFyc2VyCiAqIGFuZCBzaG91bGQgYmUgaGFuZGxlZCBhY2NvcmRpbmcgdG8gd2hhdGV2ZXIgcHJvdG9jb2wgaXMgYmVpbmcKICogdXBncmFkZWQgdG8uCiAqLwpjbGFzcyBfSHR0cFBhcnNlciBleHRlbmRzIFN0cmVhbTxfSHR0cEluY29taW5nPiB7CiAgLy8gU3RhdGUuCiAgYm9vbCBfcGFyc2VyQ2FsbGVkID0gZmFsc2U7CgogIC8vIFRoZSBkYXRhIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIHBhcnNlZC4KICBVaW50OExpc3QgX2J1ZmZlcjsKICBpbnQgX2luZGV4OwoKICBmaW5hbCBib29sIF9yZXF1ZXN0UGFyc2VyOwogIGludCBfc3RhdGU7CiAgaW50IF9odHRwVmVyc2lvbkluZGV4OwogIGludCBfbWVzc2FnZVR5cGU7CiAgaW50IF9zdGF0dXNDb2RlID0gMDsKICBpbnQgX3N0YXR1c0NvZGVMZW5ndGggPSAwOwogIGZpbmFsIExpc3Q8aW50PiBfbWV0aG9kID0gW107CiAgZmluYWwgTGlzdDxpbnQ+IF91cmlfb3JfcmVhc29uX3BocmFzZSA9IFtdOwogIGZpbmFsIExpc3Q8aW50PiBfaGVhZGVyRmllbGQgPSBbXTsKICBmaW5hbCBMaXN0PGludD4gX2hlYWRlclZhbHVlID0gW107CgogIGludCBfaHR0cFZlcnNpb247CiAgaW50IF90cmFuc2Zlckxlbmd0aCA9IC0xOwogIGJvb2wgX3BlcnNpc3RlbnRDb25uZWN0aW9uOwogIGJvb2wgX2Nvbm5lY3Rpb25VcGdyYWRlOwogIGJvb2wgX2NodW5rZWQ7CgogIGJvb2wgX25vTWVzc2FnZUJvZHkgPSBmYWxzZTsKICBpbnQgX3JlbWFpbmluZ0NvbnRlbnQgPSAtMTsKCiAgX0h0dHBIZWFkZXJzIF9oZWFkZXJzOwoKICAvLyBUaGUgY3VycmVudCBpbmNvbWluZyBjb25uZWN0aW9uLgogIF9IdHRwSW5jb21pbmcgX2luY29taW5nOwogIFN0cmVhbVN1YnNjcmlwdGlvbjxVaW50OExpc3Q+IF9zb2NrZXRTdWJzY3JpcHRpb247CiAgYm9vbCBfcGF1c2VkID0gdHJ1ZTsKICBib29sIF9ib2R5UGF1c2VkID0gZmFsc2U7CiAgU3RyZWFtQ29udHJvbGxlcjxfSHR0cEluY29taW5nPiBfY29udHJvbGxlcjsKICBTdHJlYW1Db250cm9sbGVyPFVpbnQ4TGlzdD4gX2JvZHlDb250cm9sbGVyOwoKICBmYWN0b3J5IF9IdHRwUGFyc2VyLnJlcXVlc3RQYXJzZXIoKSB7CiAgICByZXR1cm4gbmV3IF9IdHRwUGFyc2VyLl8odHJ1ZSk7CiAgfQoKICBmYWN0b3J5IF9IdHRwUGFyc2VyLnJlc3BvbnNlUGFyc2VyKCkgewogICAgcmV0dXJuIG5ldyBfSHR0cFBhcnNlci5fKGZhbHNlKTsKICB9CgogIF9IdHRwUGFyc2VyLl8odGhpcy5fcmVxdWVzdFBhcnNlcikgewogICAgX2NvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcjxfSHR0cEluY29taW5nPigKICAgICAgICBzeW5jOiB0cnVlLAogICAgICAgIG9uTGlzdGVuOiAoKSB7CiAgICAgICAgICBfcGF1c2VkID0gZmFsc2U7CiAgICAgICAgfSwKICAgICAgICBvblBhdXNlOiAoKSB7CiAgICAgICAgICBfcGF1c2VkID0gdHJ1ZTsKICAgICAgICAgIF9wYXVzZVN0YXRlQ2hhbmdlZCgpOwogICAgICAgIH0sCiAgICAgICAgb25SZXN1bWU6ICgpIHsKICAgICAgICAgIF9wYXVzZWQgPSBmYWxzZTsKICAgICAgICAgIF9wYXVzZVN0YXRlQ2hhbmdlZCgpOwogICAgICAgIH0sCiAgICAgICAgb25DYW5jZWw6ICgpIHsKICAgICAgICAgIGlmIChfc29ja2V0U3Vic2NyaXB0aW9uICE9IG51bGwpIHsKICAgICAgICAgICAgX3NvY2tldFN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIF9yZXNldCgpOwogIH0KCiAgU3RyZWFtU3Vic2NyaXB0aW9uPF9IdHRwSW5jb21pbmc+IGxpc3Rlbih2b2lkIG9uRGF0YShfSHR0cEluY29taW5nIGV2ZW50KSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIHJldHVybiBfY29udHJvbGxlci5zdHJlYW0ubGlzdGVuKG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLCBvbkRvbmU6IG9uRG9uZSwgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgfQoKICB2b2lkIGxpc3RlblRvU3RyZWFtKFN0cmVhbTxVaW50OExpc3Q+IHN0cmVhbSkgewogICAgLy8gTGlzdGVuIHRvIHRoZSBzdHJlYW0gYW5kIGhhbmRsZSBkYXRhIGFjY29yZGluZ2x5LiBXaGVuIGEKICAgIC8vIF9IdHRwSW5jb21pbmcgaXMgY3JlYXRlZCwgX2RhdGFQYXVzZSwgX2RhdGFSZXN1bWUsIF9kYXRhRG9uZSBpcwogICAgLy8gZ2l2ZW4gdG8gcHJvdmlkZSBhIHdheSBvZiBjb250cm9sbGluZyB0aGUgcGFyc2VyLgogICAgLy8gVE9ETyhham9obnNlbik6IFJlbW92ZSBfZGF0YVBhdXNlLCBfZGF0YVJlc3VtZSBhbmQgX2RhdGFEb25lIGFuZCBjbGVhbiB1cAogICAgLy8gaG93IHRoZSBfSHR0cEluY29taW5nIHNpZ25hbHMgdGhlIHBhcnNlci4KICAgIF9zb2NrZXRTdWJzY3JpcHRpb24gPQogICAgICAgIHN0cmVhbS5saXN0ZW4oX29uRGF0YSwgb25FcnJvcjogX2NvbnRyb2xsZXIuYWRkRXJyb3IsIG9uRG9uZTogX29uRG9uZSk7CiAgfQoKICB2b2lkIF9wYXJzZSgpIHsKICAgIHRyeSB7CiAgICAgIF9kb1BhcnNlKCk7CiAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5GQUlMVVJFOwogICAgICBfcmVwb3J0RXJyb3IoZSwgcyk7CiAgICB9CiAgfQoKICAvLyBQcm9jZXNzIGVuZCBvZiBoZWFkZXJzLiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhcnNlciBzaG91bGQgc3RvcAogIC8vIHBhcnNpbmcgYW5kIHJldHVybi4gVGhpcyB3aWxsIGJlIGluIGNhc2Ugb2YgZWl0aGVyIGFuIHVwZ3JhZGUKICAvLyByZXF1ZXN0IG9yIGEgcmVxdWVzdCBvciByZXNwb25zZSB3aXRoIGFuIGVtcHR5IGJvZHkuCiAgYm9vbCBfaGVhZGVyc0VuZCgpIHsKICAgIF9oZWFkZXJzLl9tdXRhYmxlID0gZmFsc2U7CgogICAgX3RyYW5zZmVyTGVuZ3RoID0gX2hlYWRlcnMuY29udGVudExlbmd0aDsKICAgIC8vIElnbm9yZSB0aGUgQ29udGVudC1MZW5ndGggaGVhZGVyIGlmIFRyYW5zZmVyLUVuY29kaW5nCiAgICAvLyBpcyBjaHVua2VkIChSRkMgMjYxNiBzZWN0aW9uIDQuNCkKICAgIGlmIChfY2h1bmtlZCkgX3RyYW5zZmVyTGVuZ3RoID0gLTE7CgogICAgLy8gSWYgYSByZXF1ZXN0IG1lc3NhZ2UgaGFzIG5laXRoZXIgQ29udGVudC1MZW5ndGggbm9yCiAgICAvLyBUcmFuc2Zlci1FbmNvZGluZyB0aGUgbWVzc2FnZSBtdXN0IG5vdCBoYXZlIGEgYm9keSAoUkZDCiAgICAvLyAyNjE2IHNlY3Rpb24gNC4zKS4KICAgIGlmIChfbWVzc2FnZVR5cGUgPT0gX01lc3NhZ2VUeXBlLlJFUVVFU1QgJiYKICAgICAgICBfdHJhbnNmZXJMZW5ndGggPCAwICYmCiAgICAgICAgX2NodW5rZWQgPT0gZmFsc2UpIHsKICAgICAgX3RyYW5zZmVyTGVuZ3RoID0gMDsKICAgIH0KICAgIGlmIChfY29ubmVjdGlvblVwZ3JhZGUpIHsKICAgICAgX3N0YXRlID0gX1N0YXRlLlVQR1JBREVEOwogICAgICBfdHJhbnNmZXJMZW5ndGggPSAwOwogICAgfQogICAgX2NyZWF0ZUluY29taW5nKF90cmFuc2Zlckxlbmd0aCk7CiAgICBpZiAoX3JlcXVlc3RQYXJzZXIpIHsKICAgICAgX2luY29taW5nLm1ldGhvZCA9IG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhfbWV0aG9kKTsKICAgICAgX2luY29taW5nLnVyaSA9CiAgICAgICAgICBVcmkucGFyc2UobmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKF91cmlfb3JfcmVhc29uX3BocmFzZSkpOwogICAgfSBlbHNlIHsKICAgICAgX2luY29taW5nLnN0YXR1c0NvZGUgPSBfc3RhdHVzQ29kZTsKICAgICAgX2luY29taW5nLnJlYXNvblBocmFzZSA9IG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhfdXJpX29yX3JlYXNvbl9waHJhc2UpOwogICAgfQogICAgX21ldGhvZC5jbGVhcigpOwogICAgX3VyaV9vcl9yZWFzb25fcGhyYXNlLmNsZWFyKCk7CiAgICBpZiAoX2Nvbm5lY3Rpb25VcGdyYWRlKSB7CiAgICAgIF9pbmNvbWluZy51cGdyYWRlZCA9IHRydWU7CiAgICAgIF9wYXJzZXJDYWxsZWQgPSBmYWxzZTsKICAgICAgdmFyIHRtcCA9IF9pbmNvbWluZzsKICAgICAgX2Nsb3NlSW5jb21pbmcoKTsKICAgICAgX2NvbnRyb2xsZXIuYWRkKHRtcCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKF90cmFuc2Zlckxlbmd0aCA9PSAwIHx8CiAgICAgICAgKF9tZXNzYWdlVHlwZSA9PSBfTWVzc2FnZVR5cGUuUkVTUE9OU0UgJiYgX25vTWVzc2FnZUJvZHkpKSB7CiAgICAgIF9yZXNldCgpOwogICAgICB2YXIgdG1wID0gX2luY29taW5nOwogICAgICBfY2xvc2VJbmNvbWluZygpOwogICAgICBfY29udHJvbGxlci5hZGQodG1wKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSBlbHNlIGlmIChfY2h1bmtlZCkgewogICAgICBfc3RhdGUgPSBfU3RhdGUuQ0hVTktfU0laRTsKICAgICAgX3JlbWFpbmluZ0NvbnRlbnQgPSAwOwogICAgfSBlbHNlIGlmIChfdHJhbnNmZXJMZW5ndGggPiAwKSB7CiAgICAgIF9yZW1haW5pbmdDb250ZW50ID0gX3RyYW5zZmVyTGVuZ3RoOwogICAgICBfc3RhdGUgPSBfU3RhdGUuQk9EWTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIE5laXRoZXIgY2h1bmtlZCBub3IgY29udGVudCBsZW5ndGguIEVuZCBvZiBib2R5CiAgICAgIC8vIGluZGljYXRlZCBieSBjbG9zZS4KICAgICAgX3N0YXRlID0gX1N0YXRlLkJPRFk7CiAgICB9CiAgICBfcGFyc2VyQ2FsbGVkID0gZmFsc2U7CiAgICBfY29udHJvbGxlci5hZGQoX2luY29taW5nKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgLy8gRnJvbSBSRkMgMjYxNi4KICAvLyBnZW5lcmljLW1lc3NhZ2UgPSBzdGFydC1saW5lCiAgLy8gICAgICAgICAgICAgICAgICAgKihtZXNzYWdlLWhlYWRlciBDUkxGKQogIC8vICAgICAgICAgICAgICAgICAgIENSTEYKICAvLyAgICAgICAgICAgICAgICAgICBbIG1lc3NhZ2UtYm9keSBdCiAgLy8gc3RhcnQtbGluZSAgICAgID0gUmVxdWVzdC1MaW5lIHwgU3RhdHVzLUxpbmUKICAvLyBSZXF1ZXN0LUxpbmUgICAgPSBNZXRob2QgU1AgUmVxdWVzdC1VUkkgU1AgSFRUUC1WZXJzaW9uIENSTEYKICAvLyBTdGF0dXMtTGluZSAgICAgPSBIVFRQLVZlcnNpb24gU1AgU3RhdHVzLUNvZGUgU1AgUmVhc29uLVBocmFzZSBDUkxGCiAgLy8gbWVzc2FnZS1oZWFkZXIgID0gZmllbGQtbmFtZSAiOiIgWyBmaWVsZC12YWx1ZSBdCiAgdm9pZCBfZG9QYXJzZSgpIHsKICAgIGFzc2VydCghX3BhcnNlckNhbGxlZCk7CiAgICBfcGFyc2VyQ2FsbGVkID0gdHJ1ZTsKICAgIGlmIChfc3RhdGUgPT0gX1N0YXRlLkNMT1NFRCkgewogICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiRGF0YSBvbiBjbG9zZWQgY29ubmVjdGlvbiIpOwogICAgfQogICAgaWYgKF9zdGF0ZSA9PSBfU3RhdGUuRkFJTFVSRSkgewogICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiRGF0YSBvbiBmYWlsZWQgY29ubmVjdGlvbiIpOwogICAgfQogICAgd2hpbGUgKF9idWZmZXIgIT0gbnVsbCAmJgogICAgICAgIF9pbmRleCA8IF9idWZmZXIubGVuZ3RoICYmCiAgICAgICAgX3N0YXRlICE9IF9TdGF0ZS5GQUlMVVJFICYmCiAgICAgICAgX3N0YXRlICE9IF9TdGF0ZS5VUEdSQURFRCkgewogICAgICAvLyBEZXBlbmRpbmcgb24gX2luY29taW5nLCB3ZSBlaXRoZXIgYnJlYWsgb24gX2JvZHlQYXVzZWQgb3IgX3BhdXNlZC4KICAgICAgaWYgKChfaW5jb21pbmcgIT0gbnVsbCAmJiBfYm9keVBhdXNlZCkgfHwKICAgICAgICAgIChfaW5jb21pbmcgPT0gbnVsbCAmJiBfcGF1c2VkKSkgewogICAgICAgIF9wYXJzZXJDYWxsZWQgPSBmYWxzZTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaW50IGJ5dGUgPSBfYnVmZmVyW19pbmRleCsrXTsKICAgICAgc3dpdGNoIChfc3RhdGUpIHsKICAgICAgICBjYXNlIF9TdGF0ZS5TVEFSVDoKICAgICAgICAgIGlmIChieXRlID09IF9Db25zdC5IVFRQWzBdKSB7CiAgICAgICAgICAgIC8vIFN0YXJ0IHBhcnNpbmcgbWV0aG9kIG9yIEhUVFAgdmVyc2lvbi4KICAgICAgICAgICAgX2h0dHBWZXJzaW9uSW5kZXggPSAxOwogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuTUVUSE9EX09SX1JFU1BPTlNFX0hUVFBfVkVSU0lPTjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFN0YXJ0IHBhcnNpbmcgbWV0aG9kLgogICAgICAgICAgICBpZiAoIV9pc1Rva2VuQ2hhcihieXRlKSkgewogICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIHJlcXVlc3QgbWV0aG9kIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX21ldGhvZC5hZGQoYnl0ZSk7CiAgICAgICAgICAgIGlmICghX3JlcXVlc3RQYXJzZXIpIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCByZXNwb25zZSBsaW5lIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLlJFUVVFU1RfTElORV9NRVRIT0Q7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuTUVUSE9EX09SX1JFU1BPTlNFX0hUVFBfVkVSU0lPTjoKICAgICAgICAgIGlmIChfaHR0cFZlcnNpb25JbmRleCA8IF9Db25zdC5IVFRQLmxlbmd0aCAmJgogICAgICAgICAgICAgIGJ5dGUgPT0gX0NvbnN0LkhUVFBbX2h0dHBWZXJzaW9uSW5kZXhdKSB7CiAgICAgICAgICAgIC8vIENvbnRpbnVlIHBhcnNpbmcgSFRUUCB2ZXJzaW9uLgogICAgICAgICAgICBfaHR0cFZlcnNpb25JbmRleCsrOwogICAgICAgICAgfSBlbHNlIGlmIChfaHR0cFZlcnNpb25JbmRleCA9PSBfQ29uc3QuSFRUUC5sZW5ndGggJiYKICAgICAgICAgICAgICBieXRlID09IF9DaGFyQ29kZS5TTEFTSCkgewogICAgICAgICAgICAvLyBIVFRQLyBwYXJzZWQuIEFzIG1ldGhvZCBpcyBhIHRva2VuIHRoaXMgY2Fubm90IGJlIGEKICAgICAgICAgICAgLy8gbWV0aG9kIGFueW1vcmUuCiAgICAgICAgICAgIF9odHRwVmVyc2lvbkluZGV4Kys7CiAgICAgICAgICAgIGlmIChfcmVxdWVzdFBhcnNlcikgewogICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIHJlcXVlc3QgbGluZSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5SRVNQT05TRV9IVFRQX1ZFUlNJT047CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBEaWQgbm90IHBhcnNlIEhUVFAgdmVyc2lvbi4gRXhwZWN0IG1ldGhvZCBpbnN0ZWFkLgogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IF9odHRwVmVyc2lvbkluZGV4OyBpKyspIHsKICAgICAgICAgICAgICBfbWV0aG9kLmFkZChfQ29uc3QuSFRUUFtpXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLlNQKSB7CiAgICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLlJFUVVFU1RfTElORV9VUkk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX21ldGhvZC5hZGQoYnl0ZSk7CiAgICAgICAgICAgICAgX2h0dHBWZXJzaW9uID0gX0h0dHBWZXJzaW9uLlVOREVURVJNSU5FRDsKICAgICAgICAgICAgICBpZiAoIV9yZXF1ZXN0UGFyc2VyKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCByZXNwb25zZSBsaW5lIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5SRVFVRVNUX0xJTkVfTUVUSE9EOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuUkVTUE9OU0VfSFRUUF9WRVJTSU9OOgogICAgICAgICAgaWYgKF9odHRwVmVyc2lvbkluZGV4IDwgX0NvbnN0LkhUVFAxRE9ULmxlbmd0aCkgewogICAgICAgICAgICAvLyBDb250aW51ZSBwYXJzaW5nIEhUVFAgdmVyc2lvbi4KICAgICAgICAgICAgX2V4cGVjdChieXRlLCBfQ29uc3QuSFRUUDFET1RbX2h0dHBWZXJzaW9uSW5kZXhdKTsKICAgICAgICAgICAgX2h0dHBWZXJzaW9uSW5kZXgrKzsKICAgICAgICAgIH0gZWxzZSBpZiAoX2h0dHBWZXJzaW9uSW5kZXggPT0gX0NvbnN0LkhUVFAxRE9ULmxlbmd0aCAmJgogICAgICAgICAgICAgIGJ5dGUgPT0gX0NoYXJDb2RlLk9ORSkgewogICAgICAgICAgICAvLyBIVFRQLzEuMSBwYXJzZWQuCiAgICAgICAgICAgIF9odHRwVmVyc2lvbiA9IF9IdHRwVmVyc2lvbi5IVFRQMTE7CiAgICAgICAgICAgIF9wZXJzaXN0ZW50Q29ubmVjdGlvbiA9IHRydWU7CiAgICAgICAgICAgIF9odHRwVmVyc2lvbkluZGV4Kys7CiAgICAgICAgICB9IGVsc2UgaWYgKF9odHRwVmVyc2lvbkluZGV4ID09IF9Db25zdC5IVFRQMURPVC5sZW5ndGggJiYKICAgICAgICAgICAgICBieXRlID09IF9DaGFyQ29kZS5aRVJPKSB7CiAgICAgICAgICAgIC8vIEhUVFAvMS4wIHBhcnNlZC4KICAgICAgICAgICAgX2h0dHBWZXJzaW9uID0gX0h0dHBWZXJzaW9uLkhUVFAxMDsKICAgICAgICAgICAgX3BlcnNpc3RlbnRDb25uZWN0aW9uID0gZmFsc2U7CiAgICAgICAgICAgIF9odHRwVmVyc2lvbkluZGV4Kys7CiAgICAgICAgICB9IGVsc2UgaWYgKF9odHRwVmVyc2lvbkluZGV4ID09IF9Db25zdC5IVFRQMURPVC5sZW5ndGggKyAxKSB7CiAgICAgICAgICAgIF9leHBlY3QoYnl0ZSwgX0NoYXJDb2RlLlNQKTsKICAgICAgICAgICAgLy8gSFRUUCB2ZXJzaW9uIHBhcnNlZC4KICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLlJFU1BPTlNFX0xJTkVfU1RBVFVTX0NPREU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCByZXNwb25zZSBsaW5lIik7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuUkVRVUVTVF9MSU5FX01FVEhPRDoKICAgICAgICAgIGlmIChieXRlID09IF9DaGFyQ29kZS5TUCkgewogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuUkVRVUVTVF9MSU5FX1VSSTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChfQ29uc3QuU0VQQVJBVE9SX01BUFtieXRlXSB8fAogICAgICAgICAgICAgICAgYnl0ZSA9PSBfQ2hhckNvZGUuQ1IgfHwKICAgICAgICAgICAgICAgIGJ5dGUgPT0gX0NoYXJDb2RlLkxGKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkludmFsaWQgcmVxdWVzdCBtZXRob2QiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfbWV0aG9kLmFkZChieXRlKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5SRVFVRVNUX0xJTkVfVVJJOgogICAgICAgICAgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLlNQKSB7CiAgICAgICAgICAgIGlmIChfdXJpX29yX3JlYXNvbl9waHJhc2UubGVuZ3RoID09IDApIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCByZXF1ZXN0IFVSSSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5SRVFVRVNUX0xJTkVfSFRUUF9WRVJTSU9OOwogICAgICAgICAgICBfaHR0cFZlcnNpb25JbmRleCA9IDA7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuQ1IgfHwgYnl0ZSA9PSBfQ2hhckNvZGUuTEYpIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCByZXF1ZXN0IFVSSSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF91cmlfb3JfcmVhc29uX3BocmFzZS5hZGQoYnl0ZSk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuUkVRVUVTVF9MSU5FX0hUVFBfVkVSU0lPTjoKICAgICAgICAgIGlmIChfaHR0cFZlcnNpb25JbmRleCA8IF9Db25zdC5IVFRQMURPVC5sZW5ndGgpIHsKICAgICAgICAgICAgX2V4cGVjdChieXRlLCBfQ29uc3QuSFRUUDExW19odHRwVmVyc2lvbkluZGV4XSk7CiAgICAgICAgICAgIF9odHRwVmVyc2lvbkluZGV4Kys7CiAgICAgICAgICB9IGVsc2UgaWYgKF9odHRwVmVyc2lvbkluZGV4ID09IF9Db25zdC5IVFRQMURPVC5sZW5ndGgpIHsKICAgICAgICAgICAgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLk9ORSkgewogICAgICAgICAgICAgIC8vIEhUVFAvMS4xIHBhcnNlZC4KICAgICAgICAgICAgICBfaHR0cFZlcnNpb24gPSBfSHR0cFZlcnNpb24uSFRUUDExOwogICAgICAgICAgICAgIF9wZXJzaXN0ZW50Q29ubmVjdGlvbiA9IHRydWU7CiAgICAgICAgICAgICAgX2h0dHBWZXJzaW9uSW5kZXgrKzsKICAgICAgICAgICAgfSBlbHNlIGlmIChieXRlID09IF9DaGFyQ29kZS5aRVJPKSB7CiAgICAgICAgICAgICAgLy8gSFRUUC8xLjAgcGFyc2VkLgogICAgICAgICAgICAgIF9odHRwVmVyc2lvbiA9IF9IdHRwVmVyc2lvbi5IVFRQMTA7CiAgICAgICAgICAgICAgX3BlcnNpc3RlbnRDb25uZWN0aW9uID0gZmFsc2U7CiAgICAgICAgICAgICAgX2h0dHBWZXJzaW9uSW5kZXgrKzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCByZXNwb25zZSBsaW5lIik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChieXRlID09IF9DaGFyQ29kZS5DUikgewogICAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5SRVFVRVNUX0xJTkVfRU5ESU5HOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIF9leHBlY3QoYnl0ZSwgX0NoYXJDb2RlLkxGKTsKICAgICAgICAgICAgICBfbWVzc2FnZVR5cGUgPSBfTWVzc2FnZVR5cGUuUkVRVUVTVDsKICAgICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuSEVBREVSX1NUQVJUOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuUkVRVUVTVF9MSU5FX0VORElORzoKICAgICAgICAgIF9leHBlY3QoYnl0ZSwgX0NoYXJDb2RlLkxGKTsKICAgICAgICAgIF9tZXNzYWdlVHlwZSA9IF9NZXNzYWdlVHlwZS5SRVFVRVNUOwogICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkhFQURFUl9TVEFSVDsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5SRVNQT05TRV9MSU5FX1NUQVRVU19DT0RFOgogICAgICAgICAgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLlNQKSB7CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5SRVNQT05TRV9MSU5FX1JFQVNPTl9QSFJBU0U7CiAgICAgICAgICB9IGVsc2UgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLkNSKSB7CiAgICAgICAgICAgIC8vIFNvbWUgSFRUUCBzZXJ2ZXJzIGRvZXMgbm90IGZvbGxvdyB0aGUgc3BlYy4gYW5kIHNlbmQKICAgICAgICAgICAgLy8gXHJcbiByaWdodCBhZnRlciB0aGUgc3RhdHVzIGNvZGUuCiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5SRVNQT05TRV9MSU5FX0VORElORzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9zdGF0dXNDb2RlTGVuZ3RoKys7CiAgICAgICAgICAgIGlmICgoYnl0ZSA8IDB4MzAgJiYgMHgzOSA8IGJ5dGUpIHx8IF9zdGF0dXNDb2RlTGVuZ3RoID4gMykgewogICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyBjb2RlIik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX3N0YXR1c0NvZGUgPSBfc3RhdHVzQ29kZSAqIDEwICsgYnl0ZSAtIDB4MzA7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5SRVNQT05TRV9MSU5FX1JFQVNPTl9QSFJBU0U6CiAgICAgICAgICBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuQ1IpIHsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLlJFU1BPTlNFX0xJTkVfRU5ESU5HOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLkNSIHx8IGJ5dGUgPT0gX0NoYXJDb2RlLkxGKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkludmFsaWQgcmVzcG9uc2UgcmVhc29uIHBocmFzZSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF91cmlfb3JfcmVhc29uX3BocmFzZS5hZGQoYnl0ZSk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuUkVTUE9OU0VfTElORV9FTkRJTkc6CiAgICAgICAgICBfZXhwZWN0KGJ5dGUsIF9DaGFyQ29kZS5MRik7CiAgICAgICAgICBfbWVzc2FnZVR5cGUgPT0gX01lc3NhZ2VUeXBlLlJFU1BPTlNFOwogICAgICAgICAgaWYgKF9zdGF0dXNDb2RlIDwgMTAwIHx8IF9zdGF0dXNDb2RlID4gNTk5KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyBjb2RlIik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoaXMgcmVzcG9uc2Ugd2lsbCBuZXZlciBoYXZlIGEgYm9keS4KICAgICAgICAgICAgaWYgKF9zdGF0dXNDb2RlIDw9IDE5OSB8fAogICAgICAgICAgICAgICAgX3N0YXR1c0NvZGUgPT0gMjA0IHx8CiAgICAgICAgICAgICAgICBfc3RhdHVzQ29kZSA9PSAzMDQpIHsKICAgICAgICAgICAgICBfbm9NZXNzYWdlQm9keSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5IRUFERVJfU1RBUlQ7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuSEVBREVSX1NUQVJUOgogICAgICAgICAgX2hlYWRlcnMgPSBuZXcgX0h0dHBIZWFkZXJzKHZlcnNpb24pOwogICAgICAgICAgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLkNSKSB7CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5IRUFERVJfRU5ESU5HOwogICAgICAgICAgfSBlbHNlIGlmIChieXRlID09IF9DaGFyQ29kZS5MRikgewogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuSEVBREVSX0VORElORzsKICAgICAgICAgICAgX2luZGV4LS07IC8vIE1ha2UgdGhlIG5ldyBzdGF0ZSBzZWUgdGhlIExGIGFnYWluLgogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gU3RhcnQgb2YgbmV3IGhlYWRlciBmaWVsZC4KICAgICAgICAgICAgX2hlYWRlckZpZWxkLmFkZChfdG9Mb3dlckNhc2VCeXRlKGJ5dGUpKTsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkhFQURFUl9GSUVMRDsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5IRUFERVJfRklFTEQ6CiAgICAgICAgICBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuQ09MT04pIHsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkhFQURFUl9WQUxVRV9TVEFSVDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghX2lzVG9rZW5DaGFyKGJ5dGUpKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkludmFsaWQgaGVhZGVyIGZpZWxkIG5hbWUiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfaGVhZGVyRmllbGQuYWRkKF90b0xvd2VyQ2FzZUJ5dGUoYnl0ZSkpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLkhFQURFUl9WQUxVRV9TVEFSVDoKICAgICAgICAgIGlmIChieXRlID09IF9DaGFyQ29kZS5DUikgewogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuSEVBREVSX1ZBTFVFX0ZPTERJTkdfT1JfRU5ESU5HOwogICAgICAgICAgfSBlbHNlIGlmIChieXRlID09IF9DaGFyQ29kZS5MRikgewogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuSEVBREVSX1ZBTFVFX0ZPTERfT1JfRU5EOwogICAgICAgICAgfSBlbHNlIGlmIChieXRlICE9IF9DaGFyQ29kZS5TUCAmJiBieXRlICE9IF9DaGFyQ29kZS5IVCkgewogICAgICAgICAgICAvLyBTdGFydCBvZiBuZXcgaGVhZGVyIHZhbHVlLgogICAgICAgICAgICBfaGVhZGVyVmFsdWUuYWRkKGJ5dGUpOwogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuSEVBREVSX1ZBTFVFOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLkhFQURFUl9WQUxVRToKICAgICAgICAgIGlmIChieXRlID09IF9DaGFyQ29kZS5DUikgewogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuSEVBREVSX1ZBTFVFX0ZPTERJTkdfT1JfRU5ESU5HOwogICAgICAgICAgfSBlbHNlIGlmIChieXRlID09IF9DaGFyQ29kZS5MRikgewogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuSEVBREVSX1ZBTFVFX0ZPTERfT1JfRU5EOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX2hlYWRlclZhbHVlLmFkZChieXRlKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5IRUFERVJfVkFMVUVfRk9MRElOR19PUl9FTkRJTkc6CiAgICAgICAgICBfZXhwZWN0KGJ5dGUsIF9DaGFyQ29kZS5MRik7CiAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuSEVBREVSX1ZBTFVFX0ZPTERfT1JfRU5EOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLkhFQURFUl9WQUxVRV9GT0xEX09SX0VORDoKICAgICAgICAgIGlmIChieXRlID09IF9DaGFyQ29kZS5TUCB8fCBieXRlID09IF9DaGFyQ29kZS5IVCkgewogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuSEVBREVSX1ZBTFVFX1NUQVJUOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgU3RyaW5nIGhlYWRlckZpZWxkID0gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKF9oZWFkZXJGaWVsZCk7CiAgICAgICAgICAgIFN0cmluZyBoZWFkZXJWYWx1ZSA9IG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhfaGVhZGVyVmFsdWUpOwogICAgICAgICAgICBpZiAoaGVhZGVyRmllbGQgPT0gInRyYW5zZmVyLWVuY29kaW5nIiAmJgogICAgICAgICAgICAgICAgX2Nhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoImNodW5rZWQiLmNvZGVVbml0cywgX2hlYWRlclZhbHVlKSkgewogICAgICAgICAgICAgIF9jaHVua2VkID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoaGVhZGVyRmllbGQgPT0gImNvbm5lY3Rpb24iKSB7CiAgICAgICAgICAgICAgTGlzdDxTdHJpbmc+IHRva2VucyA9IF90b2tlbml6ZUZpZWxkVmFsdWUoaGVhZGVyVmFsdWUpOwogICAgICAgICAgICAgIGZpbmFsIGJvb2wgaXNSZXNwb25zZSA9IF9tZXNzYWdlVHlwZSA9PSBfTWVzc2FnZVR5cGUuUkVTUE9OU0U7CiAgICAgICAgICAgICAgZmluYWwgYm9vbCBpc1VwZ3JhZGVDb2RlID0KICAgICAgICAgICAgICAgICAgKF9zdGF0dXNDb2RlID09IEh0dHBTdGF0dXMudXBncmFkZVJlcXVpcmVkKSB8fAogICAgICAgICAgICAgICAgICAgICAgKF9zdGF0dXNDb2RlID09IEh0dHBTdGF0dXMuc3dpdGNoaW5nUHJvdG9jb2xzKTsKICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgZmluYWwgYm9vbCBpc1VwZ3JhZGUgPSBfY2FzZUluc2Vuc2l0aXZlQ29tcGFyZSgKICAgICAgICAgICAgICAgICAgICAidXBncmFkZSIuY29kZVVuaXRzLCB0b2tlbnNbaV0uY29kZVVuaXRzKTsKICAgICAgICAgICAgICAgIGlmICgoaXNVcGdyYWRlICYmICFpc1Jlc3BvbnNlKSB8fAogICAgICAgICAgICAgICAgICAgIChpc1VwZ3JhZGUgJiYgaXNSZXNwb25zZSAmJiBpc1VwZ3JhZGVDb2RlKSkgewogICAgICAgICAgICAgICAgICBfY29ubmVjdGlvblVwZ3JhZGUgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgX2hlYWRlcnMuX2FkZChoZWFkZXJGaWVsZCwgdG9rZW5zW2ldKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX2hlYWRlcnMuX2FkZChoZWFkZXJGaWVsZCwgaGVhZGVyVmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9oZWFkZXJGaWVsZC5jbGVhcigpOwogICAgICAgICAgICBfaGVhZGVyVmFsdWUuY2xlYXIoKTsKCiAgICAgICAgICAgIGlmIChieXRlID09IF9DaGFyQ29kZS5DUikgewogICAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5IRUFERVJfRU5ESU5HOwogICAgICAgICAgICB9IGVsc2UgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLkxGKSB7CiAgICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkhFQURFUl9FTkRJTkc7CiAgICAgICAgICAgICAgX2luZGV4LS07IC8vIE1ha2UgdGhlIG5ldyBzdGF0ZSBzZWUgdGhlIExGIGFnYWluLgogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIC8vIFN0YXJ0IG9mIG5ldyBoZWFkZXIgZmllbGQuCiAgICAgICAgICAgICAgX2hlYWRlckZpZWxkLmFkZChfdG9Mb3dlckNhc2VCeXRlKGJ5dGUpKTsKICAgICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuSEVBREVSX0ZJRUxEOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuSEVBREVSX0VORElORzoKICAgICAgICAgIF9leHBlY3QoYnl0ZSwgX0NoYXJDb2RlLkxGKTsKICAgICAgICAgIGlmIChfaGVhZGVyc0VuZCgpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuOwoKICAgICAgICBjYXNlIF9TdGF0ZS5DSFVOS19TSVpFX1NUQVJUSU5HX0NSOgogICAgICAgICAgX2V4cGVjdChieXRlLCBfQ2hhckNvZGUuQ1IpOwogICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkNIVU5LX1NJWkVfU1RBUlRJTkdfTEY7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuQ0hVTktfU0laRV9TVEFSVElOR19MRjoKICAgICAgICAgIF9leHBlY3QoYnl0ZSwgX0NoYXJDb2RlLkxGKTsKICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5DSFVOS19TSVpFOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLkNIVU5LX1NJWkU6CiAgICAgICAgICBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuQ1IpIHsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkNIVU5LX1NJWkVfRU5ESU5HOwogICAgICAgICAgfSBlbHNlIGlmIChieXRlID09IF9DaGFyQ29kZS5TRU1JX0NPTE9OKSB7CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5DSFVOS19TSVpFX0VYVEVOU0lPTjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGludCB2YWx1ZSA9IF9leHBlY3RIZXhEaWdpdChieXRlKTsKICAgICAgICAgICAgX3JlbWFpbmluZ0NvbnRlbnQgPSBfcmVtYWluaW5nQ29udGVudCAqIDE2ICsgdmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuQ0hVTktfU0laRV9FWFRFTlNJT046CiAgICAgICAgICBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuQ1IpIHsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkNIVU5LX1NJWkVfRU5ESU5HOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLkNIVU5LX1NJWkVfRU5ESU5HOgogICAgICAgICAgX2V4cGVjdChieXRlLCBfQ2hhckNvZGUuTEYpOwogICAgICAgICAgaWYgKF9yZW1haW5pbmdDb250ZW50ID4gMCkgewogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuQk9EWTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5DSFVOS0VEX0JPRFlfRE9ORV9DUjsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5DSFVOS0VEX0JPRFlfRE9ORV9DUjoKICAgICAgICAgIF9leHBlY3QoYnl0ZSwgX0NoYXJDb2RlLkNSKTsKICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5DSFVOS0VEX0JPRFlfRE9ORV9MRjsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5DSFVOS0VEX0JPRFlfRE9ORV9MRjoKICAgICAgICAgIF9leHBlY3QoYnl0ZSwgX0NoYXJDb2RlLkxGKTsKICAgICAgICAgIF9yZXNldCgpOwogICAgICAgICAgX2Nsb3NlSW5jb21pbmcoKTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5CT0RZOgogICAgICAgICAgLy8gVGhlIGJvZHkgaXMgbm90IGhhbmRsZWQgb25lIGJ5dGUgYXQgYSB0aW1lIGJ1dCBpbiBibG9ja3MuCiAgICAgICAgICBfaW5kZXgtLTsKICAgICAgICAgIGludCBkYXRhQXZhaWxhYmxlID0gX2J1ZmZlci5sZW5ndGggLSBfaW5kZXg7CiAgICAgICAgICBpZiAoX3JlbWFpbmluZ0NvbnRlbnQgPj0gMCAmJiBkYXRhQXZhaWxhYmxlID4gX3JlbWFpbmluZ0NvbnRlbnQpIHsKICAgICAgICAgICAgZGF0YUF2YWlsYWJsZSA9IF9yZW1haW5pbmdDb250ZW50OwogICAgICAgICAgfQogICAgICAgICAgLy8gQWx3YXlzIHByZXNlbnQgdGhlIGRhdGEgYXMgYSB2aWV3LiBUaGlzIHdheSB3ZSBjYW4gaGFuZGxlIGFsbAogICAgICAgICAgLy8gY2FzZXMgbGlrZSB0aGlzLCBhbmQgdGhlIHVzZXIgd2lsbCBub3QgZXhwZXJpZW5jZSBkaWZmZXJlbnQgZGF0YQogICAgICAgICAgLy8gdHlwZWQgKHdoaWNoIGNvdWxkIGxlYWQgdG8gcG9seW1vcnBoaWMgdXNlciBjb2RlKS4KICAgICAgICAgIFVpbnQ4TGlzdCBkYXRhID0gbmV3IFVpbnQ4TGlzdC52aWV3KAogICAgICAgICAgICAgIF9idWZmZXIuYnVmZmVyLCBfYnVmZmVyLm9mZnNldEluQnl0ZXMgKyBfaW5kZXgsIGRhdGFBdmFpbGFibGUpOwogICAgICAgICAgX2JvZHlDb250cm9sbGVyLmFkZChkYXRhKTsKICAgICAgICAgIGlmIChfcmVtYWluaW5nQ29udGVudCAhPSAtMSkgewogICAgICAgICAgICBfcmVtYWluaW5nQ29udGVudCAtPSBkYXRhLmxlbmd0aDsKICAgICAgICAgIH0KICAgICAgICAgIF9pbmRleCArPSBkYXRhLmxlbmd0aDsKICAgICAgICAgIGlmIChfcmVtYWluaW5nQ29udGVudCA9PSAwKSB7CiAgICAgICAgICAgIGlmICghX2NodW5rZWQpIHsKICAgICAgICAgICAgICBfcmVzZXQoKTsKICAgICAgICAgICAgICBfY2xvc2VJbmNvbWluZygpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5DSFVOS19TSVpFX1NUQVJUSU5HX0NSOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuRkFJTFVSRToKICAgICAgICAgIC8vIFNob3VsZCBiZSB1bnJlYWNoYWJsZS4KICAgICAgICAgIGFzc2VydChmYWxzZSk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIC8vIFNob3VsZCBiZSB1bnJlYWNoYWJsZS4KICAgICAgICAgIGFzc2VydChmYWxzZSk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfQoKICAgIF9wYXJzZXJDYWxsZWQgPSBmYWxzZTsKICAgIGlmIChfYnVmZmVyICE9IG51bGwgJiYgX2luZGV4ID09IF9idWZmZXIubGVuZ3RoKSB7CiAgICAgIC8vIElmIGFsbCBkYXRhIGlzIHBhcnNlZCByZWxlYXNlIHRoZSBidWZmZXIgYW5kIHJlc3VtZSByZWNlaXZpbmcKICAgICAgLy8gZGF0YS4KICAgICAgX3JlbGVhc2VCdWZmZXIoKTsKICAgICAgaWYgKF9zdGF0ZSAhPSBfU3RhdGUuVVBHUkFERUQgJiYgX3N0YXRlICE9IF9TdGF0ZS5GQUlMVVJFKSB7CiAgICAgICAgX3NvY2tldFN1YnNjcmlwdGlvbi5yZXN1bWUoKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBfb25EYXRhKFVpbnQ4TGlzdCBidWZmZXIpIHsKICAgIF9zb2NrZXRTdWJzY3JpcHRpb24ucGF1c2UoKTsKICAgIGFzc2VydChfYnVmZmVyID09IG51bGwpOwogICAgX2J1ZmZlciA9IGJ1ZmZlcjsKICAgIF9pbmRleCA9IDA7CiAgICBfcGFyc2UoKTsKICB9CgogIHZvaWQgX29uRG9uZSgpIHsKICAgIC8vIG9uRG9uZSBjYW5jZWxzIHRoZSBzdWJzY3JpcHRpb24uCiAgICBfc29ja2V0U3Vic2NyaXB0aW9uID0gbnVsbDsKICAgIGlmIChfc3RhdGUgPT0gX1N0YXRlLkNMT1NFRCB8fCBfc3RhdGUgPT0gX1N0YXRlLkZBSUxVUkUpIHJldHVybjsKCiAgICBpZiAoX2luY29taW5nICE9IG51bGwpIHsKICAgICAgaWYgKF9zdGF0ZSAhPSBfU3RhdGUuVVBHUkFERUQgJiYKICAgICAgICAgICEoX3N0YXRlID09IF9TdGF0ZS5TVEFSVCAmJiAhX3JlcXVlc3RQYXJzZXIpICYmCiAgICAgICAgICAhKF9zdGF0ZSA9PSBfU3RhdGUuQk9EWSAmJiAhX2NodW5rZWQgJiYgX3RyYW5zZmVyTGVuZ3RoID09IC0xKSkgewogICAgICAgIF9ib2R5Q29udHJvbGxlci5hZGRFcnJvcigKICAgICAgICAgICAgbmV3IEh0dHBFeGNlcHRpb24oIkNvbm5lY3Rpb24gY2xvc2VkIHdoaWxlIHJlY2VpdmluZyBkYXRhIikpOwogICAgICB9CiAgICAgIF9jbG9zZUluY29taW5nKHRydWUpOwogICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBJZiB0aGUgY29ubmVjdGlvbiBpcyBpZGxlIHRoZSBIVFRQIHN0cmVhbSBpcyBjbG9zZWQuCiAgICBpZiAoX3N0YXRlID09IF9TdGF0ZS5TVEFSVCkgewogICAgICBpZiAoIV9yZXF1ZXN0UGFyc2VyKSB7CiAgICAgICAgX3JlcG9ydEVycm9yKG5ldyBIdHRwRXhjZXB0aW9uKAogICAgICAgICAgICAiQ29ubmVjdGlvbiBjbG9zZWQgYmVmb3JlIGZ1bGwgaGVhZGVyIHdhcyByZWNlaXZlZCIpKTsKICAgICAgfQogICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKF9zdGF0ZSA9PSBfU3RhdGUuVVBHUkFERUQpIHsKICAgICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChfc3RhdGUgPCBfU3RhdGUuRklSU1RfQk9EWV9TVEFURSkgewogICAgICBfc3RhdGUgPSBfU3RhdGUuRkFJTFVSRTsKICAgICAgLy8gUmVwb3J0IHRoZSBlcnJvciB0aHJvdWdoIHRoZSBlcnJvciBjYWxsYmFjayBpZiBhbnkuIE90aGVyd2lzZQogICAgICAvLyB0aHJvdyB0aGUgZXJyb3IuCiAgICAgIF9yZXBvcnRFcnJvcihuZXcgSHR0cEV4Y2VwdGlvbigKICAgICAgICAgICJDb25uZWN0aW9uIGNsb3NlZCBiZWZvcmUgZnVsbCBoZWFkZXIgd2FzIHJlY2VpdmVkIikpOwogICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFfY2h1bmtlZCAmJiBfdHJhbnNmZXJMZW5ndGggPT0gLTEpIHsKICAgICAgX3N0YXRlID0gX1N0YXRlLkNMT1NFRDsKICAgIH0gZWxzZSB7CiAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5GQUlMVVJFOwogICAgICAvLyBSZXBvcnQgdGhlIGVycm9yIHRocm91Z2ggdGhlIGVycm9yIGNhbGxiYWNrIGlmIGFueS4gT3RoZXJ3aXNlCiAgICAgIC8vIHRocm93IHRoZSBlcnJvci4KICAgICAgX3JlcG9ydEVycm9yKAogICAgICAgICAgbmV3IEh0dHBFeGNlcHRpb24oIkNvbm5lY3Rpb24gY2xvc2VkIGJlZm9yZSBmdWxsIGJvZHkgd2FzIHJlY2VpdmVkIikpOwogICAgfQogICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICB9CgogIFN0cmluZyBnZXQgdmVyc2lvbiB7CiAgICBzd2l0Y2ggKF9odHRwVmVyc2lvbikgewogICAgICBjYXNlIF9IdHRwVmVyc2lvbi5IVFRQMTA6CiAgICAgICAgcmV0dXJuICIxLjAiOwogICAgICBjYXNlIF9IdHRwVmVyc2lvbi5IVFRQMTE6CiAgICAgICAgcmV0dXJuICIxLjEiOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBpbnQgZ2V0IG1lc3NhZ2VUeXBlID0+IF9tZXNzYWdlVHlwZTsKICBpbnQgZ2V0IHRyYW5zZmVyTGVuZ3RoID0+IF90cmFuc2Zlckxlbmd0aDsKICBib29sIGdldCB1cGdyYWRlID0+IF9jb25uZWN0aW9uVXBncmFkZSAmJiBfc3RhdGUgPT0gX1N0YXRlLlVQR1JBREVEOwogIGJvb2wgZ2V0IHBlcnNpc3RlbnRDb25uZWN0aW9uID0+IF9wZXJzaXN0ZW50Q29ubmVjdGlvbjsKCiAgdm9pZCBzZXQgaXNIZWFkKGJvb2wgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSkgX25vTWVzc2FnZUJvZHkgPSB0cnVlOwogIH0KCiAgX0h0dHBEZXRhY2hlZEluY29taW5nIGRldGFjaEluY29taW5nKCkgewogICAgLy8gU2ltdWxhdGUgZGV0YWNoZWQgYnkgbWFya2luZyBhcyB1cGdyYWRlZC4KICAgIF9zdGF0ZSA9IF9TdGF0ZS5VUEdSQURFRDsKICAgIHJldHVybiBuZXcgX0h0dHBEZXRhY2hlZEluY29taW5nKF9zb2NrZXRTdWJzY3JpcHRpb24sIHJlYWRVbnBhcnNlZERhdGEoKSk7CiAgfQoKICBVaW50OExpc3QgcmVhZFVucGFyc2VkRGF0YSgpIHsKICAgIGlmIChfYnVmZmVyID09IG51bGwpIHJldHVybiBudWxsOwogICAgaWYgKF9pbmRleCA9PSBfYnVmZmVyLmxlbmd0aCkgcmV0dXJuIG51bGw7CiAgICB2YXIgcmVzdWx0ID0gX2J1ZmZlci5zdWJsaXN0KF9pbmRleCk7CiAgICBfcmVsZWFzZUJ1ZmZlcigpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgX3Jlc2V0KCkgewogICAgaWYgKF9zdGF0ZSA9PSBfU3RhdGUuVVBHUkFERUQpIHJldHVybjsKICAgIF9zdGF0ZSA9IF9TdGF0ZS5TVEFSVDsKICAgIF9tZXNzYWdlVHlwZSA9IF9NZXNzYWdlVHlwZS5VTkRFVEVSTUlORUQ7CiAgICBfaGVhZGVyRmllbGQuY2xlYXIoKTsKICAgIF9oZWFkZXJWYWx1ZS5jbGVhcigpOwogICAgX21ldGhvZC5jbGVhcigpOwogICAgX3VyaV9vcl9yZWFzb25fcGhyYXNlLmNsZWFyKCk7CgogICAgX3N0YXR1c0NvZGUgPSAwOwogICAgX3N0YXR1c0NvZGVMZW5ndGggPSAwOwoKICAgIF9odHRwVmVyc2lvbiA9IF9IdHRwVmVyc2lvbi5VTkRFVEVSTUlORUQ7CiAgICBfdHJhbnNmZXJMZW5ndGggPSAtMTsKICAgIF9wZXJzaXN0ZW50Q29ubmVjdGlvbiA9IGZhbHNlOwogICAgX2Nvbm5lY3Rpb25VcGdyYWRlID0gZmFsc2U7CiAgICBfY2h1bmtlZCA9IGZhbHNlOwoKICAgIF9ub01lc3NhZ2VCb2R5ID0gZmFsc2U7CiAgICBfcmVtYWluaW5nQ29udGVudCA9IC0xOwoKICAgIF9oZWFkZXJzID0gbnVsbDsKICB9CgogIHZvaWQgX3JlbGVhc2VCdWZmZXIoKSB7CiAgICBfYnVmZmVyID0gbnVsbDsKICAgIF9pbmRleCA9IG51bGw7CiAgfQoKICBzdGF0aWMgYm9vbCBfaXNUb2tlbkNoYXIoaW50IGJ5dGUpIHsKICAgIHJldHVybiBieXRlID4gMzEgJiYgYnl0ZSA8IDEyOCAmJiAhX0NvbnN0LlNFUEFSQVRPUl9NQVBbYnl0ZV07CiAgfQoKICBzdGF0aWMgYm9vbCBfaXNWYWx1ZUNoYXIoaW50IGJ5dGUpIHsKICAgIHJldHVybiAoYnl0ZSA+IDMxICYmIGJ5dGUgPCAxMjgpIHx8CiAgICAgICAgKGJ5dGUgPT0gX0NoYXJDb2RlLlNQKSB8fAogICAgICAgIChieXRlID09IF9DaGFyQ29kZS5IVCk7CiAgfQoKICBzdGF0aWMgTGlzdDxTdHJpbmc+IF90b2tlbml6ZUZpZWxkVmFsdWUoU3RyaW5nIGhlYWRlclZhbHVlKSB7CiAgICBMaXN0PFN0cmluZz4gdG9rZW5zID0gbmV3IExpc3Q8U3RyaW5nPigpOwogICAgaW50IHN0YXJ0ID0gMDsKICAgIGludCBpbmRleCA9IDA7CiAgICB3aGlsZSAoaW5kZXggPCBoZWFkZXJWYWx1ZS5sZW5ndGgpIHsKICAgICAgaWYgKGhlYWRlclZhbHVlW2luZGV4XSA9PSAiLCIpIHsKICAgICAgICB0b2tlbnMuYWRkKGhlYWRlclZhbHVlLnN1YnN0cmluZyhzdGFydCwgaW5kZXgpKTsKICAgICAgICBzdGFydCA9IGluZGV4ICsgMTsKICAgICAgfSBlbHNlIGlmIChoZWFkZXJWYWx1ZVtpbmRleF0gPT0gIiAiIHx8IGhlYWRlclZhbHVlW2luZGV4XSA9PSAiXHQiKSB7CiAgICAgICAgc3RhcnQrKzsKICAgICAgfQogICAgICBpbmRleCsrOwogICAgfQogICAgdG9rZW5zLmFkZChoZWFkZXJWYWx1ZS5zdWJzdHJpbmcoc3RhcnQsIGluZGV4KSk7CiAgICByZXR1cm4gdG9rZW5zOwogIH0KCiAgc3RhdGljIGludCBfdG9Mb3dlckNhc2VCeXRlKGludCB4KSB7CiAgICAvLyBPcHRpbWl6ZWQgdmVyc2lvbjoKICAgIC8vICAtICAweDQxIGlzICdBJwogICAgLy8gIC0gIDB4N2YgaXMgQVNDSUkgbWFzawogICAgLy8gIC0gIDI2IGlzIHRoZSBudW1iZXIgb2YgYWxwaGEgY2hhcmFjdGVycy4KICAgIC8vICAtICAweDIwIGlzIHRoZSBkZWx0YSBiZXR3ZWVuIGxvd2VyIGFuZCB1cHBlciBjaGFycy4KICAgIHJldHVybiAoKCh4IC0gMHg0MSkgJiAweDdmKSA8IDI2KSA/ICh4IHwgMHgyMCkgOiB4OwogIH0KCiAgLy8gZXhwZWN0ZWQgc2hvdWxkIGFscmVhZHkgYmUgbG93ZXJjYXNlLgogIGJvb2wgX2Nhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoTGlzdDxpbnQ+IGV4cGVjdGVkLCBMaXN0PGludD4gdmFsdWUpIHsKICAgIGlmIChleHBlY3RlZC5sZW5ndGggIT0gdmFsdWUubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVkLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChleHBlY3RlZFtpXSAhPSBfdG9Mb3dlckNhc2VCeXRlKHZhbHVlW2ldKSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBpbnQgX2V4cGVjdChpbnQgdmFsMSwgaW50IHZhbDIpIHsKICAgIGlmICh2YWwxICE9IHZhbDIpIHsKICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkZhaWxlZCB0byBwYXJzZSBIVFRQIik7CiAgICB9CiAgfQoKICBpbnQgX2V4cGVjdEhleERpZ2l0KGludCBieXRlKSB7CiAgICBpZiAoMHgzMCA8PSBieXRlICYmIGJ5dGUgPD0gMHgzOSkgewogICAgICByZXR1cm4gYnl0ZSAtIDB4MzA7IC8vIDAgLSA5CiAgICB9IGVsc2UgaWYgKDB4NDEgPD0gYnl0ZSAmJiBieXRlIDw9IDB4NDYpIHsKICAgICAgcmV0dXJuIGJ5dGUgLSAweDQxICsgMTA7IC8vIEEgLSBGCiAgICB9IGVsc2UgaWYgKDB4NjEgPD0gYnl0ZSAmJiBieXRlIDw9IDB4NjYpIHsKICAgICAgcmV0dXJuIGJ5dGUgLSAweDYxICsgMTA7IC8vIGEgLSBmCiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiRmFpbGVkIHRvIHBhcnNlIEhUVFAiKTsKICAgIH0KICB9CgogIHZvaWQgX2NyZWF0ZUluY29taW5nKGludCB0cmFuc2Zlckxlbmd0aCkgewogICAgYXNzZXJ0KF9pbmNvbWluZyA9PSBudWxsKTsKICAgIGFzc2VydChfYm9keUNvbnRyb2xsZXIgPT0gbnVsbCk7CiAgICBhc3NlcnQoIV9ib2R5UGF1c2VkKTsKICAgIHZhciBpbmNvbWluZzsKICAgIF9ib2R5Q29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPFVpbnQ4TGlzdD4oCiAgICAgICAgc3luYzogdHJ1ZSwKICAgICAgICBvbkxpc3RlbjogKCkgewogICAgICAgICAgaWYgKGluY29taW5nICE9IF9pbmNvbWluZykgcmV0dXJuOwogICAgICAgICAgYXNzZXJ0KF9ib2R5UGF1c2VkKTsKICAgICAgICAgIF9ib2R5UGF1c2VkID0gZmFsc2U7CiAgICAgICAgICBfcGF1c2VTdGF0ZUNoYW5nZWQoKTsKICAgICAgICB9LAogICAgICAgIG9uUGF1c2U6ICgpIHsKICAgICAgICAgIGlmIChpbmNvbWluZyAhPSBfaW5jb21pbmcpIHJldHVybjsKICAgICAgICAgIGFzc2VydCghX2JvZHlQYXVzZWQpOwogICAgICAgICAgX2JvZHlQYXVzZWQgPSB0cnVlOwogICAgICAgICAgX3BhdXNlU3RhdGVDaGFuZ2VkKCk7CiAgICAgICAgfSwKICAgICAgICBvblJlc3VtZTogKCkgewogICAgICAgICAgaWYgKGluY29taW5nICE9IF9pbmNvbWluZykgcmV0dXJuOwogICAgICAgICAgYXNzZXJ0KF9ib2R5UGF1c2VkKTsKICAgICAgICAgIF9ib2R5UGF1c2VkID0gZmFsc2U7CiAgICAgICAgICBfcGF1c2VTdGF0ZUNoYW5nZWQoKTsKICAgICAgICB9LAogICAgICAgIG9uQ2FuY2VsOiAoKSB7CiAgICAgICAgICBpZiAoaW5jb21pbmcgIT0gX2luY29taW5nKSByZXR1cm47CiAgICAgICAgICBpZiAoX3NvY2tldFN1YnNjcmlwdGlvbiAhPSBudWxsKSB7CiAgICAgICAgICAgIF9zb2NrZXRTdWJzY3JpcHRpb24uY2FuY2VsKCk7CiAgICAgICAgICB9CiAgICAgICAgICBfY2xvc2VJbmNvbWluZyh0cnVlKTsKICAgICAgICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICAgICAgfSk7CiAgICBpbmNvbWluZyA9IF9pbmNvbWluZyA9CiAgICAgICAgbmV3IF9IdHRwSW5jb21pbmcoX2hlYWRlcnMsIHRyYW5zZmVyTGVuZ3RoLCBfYm9keUNvbnRyb2xsZXIuc3RyZWFtKTsKICAgIF9ib2R5UGF1c2VkID0gdHJ1ZTsKICAgIF9wYXVzZVN0YXRlQ2hhbmdlZCgpOwogIH0KCiAgdm9pZCBfY2xvc2VJbmNvbWluZyhbYm9vbCBjbG9zaW5nID0gZmFsc2VdKSB7CiAgICAvLyBJZ25vcmUgbXVsdGlwbGUgY2xvc2UgKGNhbiBoYXBwZW4gaW4gcmUtZW50cmFuY2UpLgogICAgaWYgKF9pbmNvbWluZyA9PSBudWxsKSByZXR1cm47CiAgICB2YXIgdG1wID0gX2luY29taW5nOwog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KSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5faHR0cDsKCmNvbnN0IFN0cmluZyBfREFSVF9TRVNTSU9OX0lEID0gIkRBUlRTRVNTSUQiOwoKLy8gQSBfSHR0cFNlc3Npb24gaXMgYSBub2RlIGluIGEgZG91YmxlLWxpbmtlZCBsaXN0LCB3aXRoIF9uZXh0IGFuZCBfcHJldiBiZWluZwovLyB0aGUgcHJldmlvdXMgYW5kIG5leHQgcG9pbnRlcnMuCmNsYXNzIF9IdHRwU2Vzc2lvbiBpbXBsZW1lbnRzIEh0dHBTZXNzaW9uIHsKICAvLyBEZXN0cm95ZWQgbWFya2VkLiBVc2VkIGJ5IHRoZSBodHRwIGNvbm5lY3Rpb24gdG8gc2VlIGlmIGEgc2Vzc2lvbiBpcyB2YWxpZC4KICBib29sIF9kZXN0cm95ZWQgPSBmYWxzZTsKICBib29sIF9pc05ldyA9IHRydWU7CiAgRGF0ZVRpbWUgX2xhc3RTZWVuOwogIEZ1bmN0aW9uIF90aW1lb3V0Q2FsbGJhY2s7CiAgX0h0dHBTZXNzaW9uTWFuYWdlciBfc2Vzc2lvbk1hbmFnZXI7CiAgLy8gUG9pbnRlcnMgaW4gdGltZW91dCBxdWV1ZS4KICBfSHR0cFNlc3Npb24gX3ByZXY7CiAgX0h0dHBTZXNzaW9uIF9uZXh0OwogIGZpbmFsIFN0cmluZyBpZDsKCiAgZmluYWwgTWFwIF9kYXRhID0gbmV3IEhhc2hNYXAoKTsKCiAgX0h0dHBTZXNzaW9uKHRoaXMuX3Nlc3Npb25NYW5hZ2VyLCB0aGlzLmlkKSA6IF9sYXN0U2VlbiA9IG5ldyBEYXRlVGltZS5ub3coKTsKCiAgdm9pZCBkZXN0cm95KCkgewogICAgX2Rlc3Ryb3llZCA9IHRydWU7CiAgICBfc2Vzc2lvbk1hbmFnZXIuX3JlbW92ZUZyb21UaW1lb3V0UXVldWUodGhpcyk7CiAgICBfc2Vzc2lvbk1hbmFnZXIuX3Nlc3Npb25zLnJlbW92ZShpZCk7CiAgfQoKICAvLyBNYXJrIHRoZSBzZXNzaW9uIGFzIHNlZW4uIFRoaXMgd2lsbCByZXNldCB0aGUgdGltZW91dCBhbmQgbW92ZSB0aGUgbm9kZSB0bwogIC8vIHRoZSBlbmQgb2YgdGhlIHRpbWVvdXQgcXVldWUuCiAgdm9pZCBfbWFya1NlZW4oKSB7CiAgICBfbGFzdFNlZW4gPSBuZXcgRGF0ZVRpbWUubm93KCk7CiAgICBfc2Vzc2lvbk1hbmFnZXIuX2J1bXBUb0VuZCh0aGlzKTsKICB9CgogIERhdGVUaW1lIGdldCBsYXN0U2VlbiA9PiBfbGFzdFNlZW47CgogIGJvb2wgZ2V0IGlzTmV3ID0+IF9pc05ldzsKCiAgdm9pZCBzZXQgb25UaW1lb3V0KHZvaWQgY2FsbGJhY2soKSkgewogICAgX3RpbWVvdXRDYWxsYmFjayA9IGNhbGxiYWNrOwogIH0KCiAgLy8gTWFwIGltcGxlbWVudGF0aW9uOgogIGJvb2wgY29udGFpbnNWYWx1ZSh2YWx1ZSkgPT4gX2RhdGEuY29udGFpbnNWYWx1ZSh2YWx1ZSk7CiAgYm9vbCBjb250YWluc0tleShrZXkpID0+IF9kYXRhLmNvbnRhaW5zS2V5KGtleSk7CiAgb3BlcmF0b3IgW10oa2V5KSA9PiBfZGF0YVtrZXldOwogIHZvaWQgb3BlcmF0b3IgW109KGtleSwgdmFsdWUpIHsKICAgIF9kYXRhW2tleV0gPSB2YWx1ZTsKICB9CgogIHB1dElmQWJzZW50KGtleSwgaWZBYnNlbnQpID0+IF9kYXRhLnB1dElmQWJzZW50KGtleSwgaWZBYnNlbnQpOwogIGFkZEFsbChNYXAgb3RoZXIpID0+IF9kYXRhLmFkZEFsbChvdGhlcik7CiAgcmVtb3ZlKGtleSkgPT4gX2RhdGEucmVtb3ZlKGtleSk7CiAgdm9pZCBjbGVhcigpIHsKICAgIF9kYXRhLmNsZWFyKCk7CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBmKGtleSwgdmFsdWUpKSB7CiAgICBfZGF0YS5mb3JFYWNoKGYpOwogIH0KCiAgSXRlcmFibGU8TWFwRW50cnk+IGdldCBlbnRyaWVzID0+IF9kYXRhLmVudHJpZXM7CgogIHZvaWQgYWRkRW50cmllcyhJdGVyYWJsZTxNYXBFbnRyeT4gZW50cmllcykgewogICAgX2RhdGEuYWRkRW50cmllcyhlbnRyaWVzKTsKICB9CgogIE1hcDxLLCBWPiBtYXA8SywgVj4oTWFwRW50cnk8SywgVj4gdHJhbnNmb3JtKGtleSwgdmFsdWUpKSA9PgogICAgICBfZGF0YS5tYXAodHJhbnNmb3JtKTsKCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3Qoa2V5LCB2YWx1ZSkpIHsKICAgIF9kYXRhLnJlbW92ZVdoZXJlKHRlc3QpOwogIH0KCiAgTWFwPEssIFY+IGNhc3Q8SywgVj4oKSA9PiBfZGF0YS5jYXN0PEssIFY+KCk7CiAgdXBkYXRlKGtleSwgdXBkYXRlKHZhbHVlKSwge2lmQWJzZW50KCl9KSA9PgogICAgICBfZGF0YS51cGRhdGUoa2V5LCB1cGRhdGUsIGlmQWJzZW50OiBpZkFic2VudCk7CgogIHZvaWQgdXBkYXRlQWxsKHVwZGF0ZShrZXksIHZhbHVlKSkgewogICAgX2RhdGEudXBkYXRlQWxsKHVwZGF0ZSk7CiAgfQoKICBJdGVyYWJsZSBnZXQga2V5cyA9PiBfZGF0YS5rZXlzOwogIEl0ZXJhYmxlIGdldCB2YWx1ZXMgPT4gX2RhdGEudmFsdWVzOwogIGludCBnZXQgbGVuZ3RoID0+IF9kYXRhLmxlbmd0aDsKICBib29sIGdldCBpc0VtcHR5ID0+IF9kYXRhLmlzRW1wdHk7CiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfZGF0YS5pc05vdEVtcHR5OwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnSHR0cFNlc3Npb24gaWQ6JGlkICRfZGF0YSc7Cn0KCi8vIFByaXZhdGUgY2xhc3MgdXNlZCB0byBtYW5hZ2UgYWxsIHRoZSBhY3RpdmUgc2Vzc2lvbnMuIFRoZSBzZXNzaW9ucyBhcmUgc3RvcmVkCi8vIGluIHR3byB3YXlzOgovLwovLyAgKiBJbiBhIG1hcCwgbWFwcGluZyBmcm9tIElEIHRvIEh0dHBTZXNzaW9uLgovLyAgKiBJbiBhIGxpbmtlZCBsaXN0LCB1c2VkIGFzIGEgdGltZW91dCBxdWV1ZS4KY2xhc3MgX0h0dHBTZXNzaW9uTWFuYWdlciB7CiAgTWFwPFN0cmluZywgX0h0dHBTZXNzaW9uPiBfc2Vzc2lvbnM7CiAgaW50IF9zZXNzaW9uVGltZW91dCA9IDIwICogNjA7IC8vIDIwIG1pbnMuCiAgX0h0dHBTZXNzaW9uIF9oZWFkOwogIF9IdHRwU2Vzc2lvbiBfdGFpbDsKICBUaW1lciBfdGltZXI7CgogIF9IdHRwU2Vzc2lvbk1hbmFnZXIoKSA6IF9zZXNzaW9ucyA9IHt9OwoKICBTdHJpbmcgY3JlYXRlU2Vzc2lvbklkKCkgewogICAgY29uc3QgaW50IF9LRVlfTEVOR1RIID0gMTY7IC8vIDEyOCBiaXRzLgogICAgdmFyIGRhdGEgPSBfQ3J5cHRvVXRpbHMuZ2V0UmFuZG9tQnl0ZXMoX0tFWV9MRU5HVEgpOwogICAgcmV0dXJuIF9DcnlwdG9VdGlscy5ieXRlc1RvSGV4KGRhdGEpOwogIH0KCiAgX0h0dHBTZXNzaW9uIGdldFNlc3Npb24oU3RyaW5nIGlkKSA9PiBfc2Vzc2lvbnNbaWRdOwoKICBfSHR0cFNlc3Npb24gY3JlYXRlU2Vzc2lvbigpIHsKICAgIHZhciBpZCA9IGNyZWF0ZVNlc3Npb25JZCgpOwogICAgLy8gVE9ETyhham9obnNlbik6IENvbnNpZGVyIGFkZGluZyBhIGxpbWl0IGFuZCB0aHJvd2luZyBhbiBleGNlcHRpb24uCiAgICAvLyBTaG91bGQgYmUgdmVyeSB1bmxpa2VseSBob3dldmVyLgogICAgd2hpbGUgKF9zZXNzaW9ucy5jb250YWluc0tleShpZCkpIHsKICAgICAgaWQgPSBjcmVhdGVTZXNzaW9uSWQoKTsKICAgIH0KICAgIHZhciBzZXNzaW9uID0gX3Nlc3Npb25zW2lkXSA9IG5ldyBfSHR0cFNlc3Npb24odGhpcywgaWQpOwogICAgX2FkZFRvVGltZW91dFF1ZXVlKHNlc3Npb24pOwogICAgcmV0dXJuIHNlc3Npb247CiAgfQoKICB2b2lkIHNldCBzZXNzaW9uVGltZW91dChpbnQgdGltZW91dCkgewogICAgX3Nlc3Npb25UaW1lb3V0ID0gdGltZW91dDsKICAgIF9zdG9wVGltZXIoKTsKICAgIF9zdGFydFRpbWVyKCk7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgX3N0b3BUaW1lcigpOwogIH0KCiAgdm9pZCBfYnVtcFRvRW5kKF9IdHRwU2Vzc2lvbiBzZXNzaW9uKSB7CiAgICBfcmVtb3ZlRnJvbVRpbWVvdXRRdWV1ZShzZXNzaW9uKTsKICAgIF9hZGRUb1RpbWVvdXRRdWV1ZShzZXNzaW9uKTsKICB9CgogIHZvaWQgX2FkZFRvVGltZW91dFF1ZXVlKF9IdHRwU2Vzc2lvbiBzZXNzaW9uKSB7CiAgICBpZiAoX2hlYWQgPT0gbnVsbCkgewogICAgICBhc3NlcnQoX3RhaWwgPT0gbnVsbCk7CiAgICAgIF90YWlsID0gX2hlYWQgPSBzZXNzaW9uOwogICAgICBfc3RhcnRUaW1lcigpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KF90aW1lciAhPSBudWxsKTsKICAgICAgYXNzZXJ0KF90YWlsICE9IG51bGwpOwogICAgICAvLyBBZGQgdG8gZW5kLgogICAgICBfdGFpbC5fbmV4dCA9IHNlc3Npb247CiAgICAgIHNlc3Npb24uX3ByZXYgPSBfdGFpbDsKICAgICAgX3RhaWwgPSBzZXNzaW9uOwogICAgfQogIH0KCiAgdm9pZCBfcmVtb3ZlRnJvbVRpbWVvdXRRdWV1ZShfSHR0cFNlc3Npb24gc2Vzc2lvbikgewogICAgaWYgKHNlc3Npb24uX25leHQgIT0gbnVsbCkgewogICAgICBzZXNzaW9uLl9uZXh0Ll9wcmV2ID0gc2Vzc2lvbi5fcHJldjsKICAgIH0KICAgIGlmIChzZXNzaW9uLl9wcmV2ICE9IG51bGwpIHsKICAgICAgc2Vzc2lvbi5fcHJldi5fbmV4dCA9IHNlc3Npb24uX25leHQ7CiAgICB9CiAgICBpZiAoX2hlYWQgPT0gc2Vzc2lvbikgewogICAgICAvLyBXZSByZW1vdmVkIHRoZSBoZWFkIGVsZW1lbnQsIHN0YXJ0IG5ldyB0aW1lci4KICAgICAgX2hlYWQgPSBzZXNzaW9uLl9uZXh0OwogICAgICBfc3RvcFRpbWVyKCk7CiAgICAgIF9zdGFydFRpbWVyKCk7CiAgICB9CiAgICBpZiAoX3RhaWwgPT0gc2Vzc2lvbikgewogICAgICBfdGFpbCA9IHNlc3Npb24uX3ByZXY7CiAgICB9CiAgICBzZXNzaW9uLl9uZXh0ID0gc2Vzc2lvbi5fcHJldiA9IG51bGw7CiAgfQoKICB2b2lkIF90aW1lclRpbWVvdXQoKSB7CiAgICBfc3RvcFRpbWVyKCk7IC8vIENsZWFyIHRpbWVyLgogICAgYXNzZXJ0KF9oZWFkICE9IG51bGwpOwogICAgdmFyIHNlc3Npb24gPSBfaGVhZDsKICAgIHNlc3Npb24uZGVzdHJveSgpOyAvLyBXaWxsIHJlbW92ZSB0aGUgc2Vzc2lvbiBmcm9tIHRpbWVvdXQgcXVldWUgYW5kIG1hcC4KICAgIGlmIChzZXNzaW9uLl90aW1lb3V0Q2FsbGJhY2sgIT0gbnVsbCkgewogICAgICBzZXNzaW9uLl90aW1lb3V0Q2FsbGJhY2soKTsKICAgIH0KICB9CgogIHZvaWQgX3N0YXJ0VGltZXIoKSB7CiAgICBhc3NlcnQoX3RpbWVyID09IG51bGwpOwogICAgaWYgKF9oZWFkICE9IG51bGwpIHsKICAgICAgaW50IHNlY29uZHMgPSBuZXcgRGF0ZVRpbWUubm93KCkuZGlmZmVyZW5jZShfaGVhZC5sYXN0U2VlbikuaW5TZWNvbmRzOwogICAgICBfdGltZXIgPSBuZXcgVGltZXIoCiAgICAgICAgICBuZXcgRHVyYXRpb24oc2Vjb25kczogX3Nlc3Npb25UaW1lb3V0IC0gc2Vjb25kcyksIF90aW1lclRpbWVvdXQpOwogICAgfQogIH0KCiAgdm9pZCBfc3RvcFRpbWVyKCkgewogICAgaWYgKF90aW1lciAhPSBudWxsKSB7CiAgICAgIF90aW1lci5jYW5jZWwoKTsKICAgICAgX3RpbWVyID0gbnVsbDsKICAgIH0KICB9Cn0KgM8ATk48ARQBLgFQIyxRGxYWHScgFhYTASMBUAETFzMqBAFQIxUkJgQBJgEcASghBAEZOzMiIhgEAUIsJBETBAElFgQBMwEwHwQBPxwBLB0EATAuNQEnHQQBIyciJSsBNAIBURADMDEcJy0WFhABKgEdLTkqBAE3ASEgSigoHgY+IRQEASkfEhMEARESBAEqJiEEATIZHR8VDR4dFR0dFwYEATchKwYhKwYcNx0UFQYcHQYqBAEZIhsZTiwiBgQBFxwZTRpMBgQBFhoXFQYEAgEcZGFydDpfaHR0cC9odHRwX3Nlc3Npb24uZGFydDBvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvX2h0dHAvb3ZlcnJpZGVzLmRhcnSQgy8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuX2h0dHA7CgpmaW5hbCBfaHR0cE92ZXJyaWRlc1Rva2VuID0gbmV3IE9iamVjdCgpOwoKY29uc3QgX2FzeW5jUnVuWm9uZWQgPSBydW5ab25lZDsKCi8vLyBUaGlzIGNsYXNzIGZhY2lsaXRhdGVzIG92ZXJyaWRpbmcgW0h0dHBDbGllbnRdIHdpdGggYSBtb2NrIGltcGxlbWVudGF0aW9uLgovLy8gSXQgc2hvdWxkIGJlIGV4dGVuZGVkIGJ5IGFub3RoZXIgY2xhc3MgaW4gY2xpZW50IGNvZGUgd2l0aCBvdmVycmlkZXMKLy8vIHRoYXQgY29uc3RydWN0IGEgbW9jayBpbXBsZW1lbnRhdGlvbi4gVGhlIGltcGxlbWVudGF0aW9uIGluIHRoaXMgYmFzZSBjbGFzcwovLy8gZGVmYXVsdHMgdG8gdGhlIGFjdHVhbCBbSHR0cENsaWVudF0gaW1wbGVtZW50YXRpb24uIEZvciBleGFtcGxlOgovLy8KLy8vIGBgYAovLy8gY2xhc3MgTXlIdHRwQ2xpZW50IGltcGxlbWVudHMgSHR0cENsaWVudCB7Ci8vLyAgIC4uLgovLy8gICAvLyBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSHR0cENsaWVudCBpbnRlcmZhY2UKLy8vICAgLi4uCi8vLyB9Ci8vLwovLy8gbWFpbigpIHsKLy8vICAgSHR0cE92ZXJyaWRlcy5ydW5ab25lZCgoKSB7Ci8vLyAgICAgLi4uCi8vLyAgICAgLy8gT3BlcmF0aW9ucyB3aWxsIHVzZSBNeUh0dHBDbGllbnQgaW5zdGVhZCBvZiB0aGUgcmVhbCBIdHRwQ2xpZW50Ci8vLyAgICAgLy8gaW1wbGVtZW50YXRpb24gd2hlbmV2ZXIgSHR0cENsaWVudCBpcyB1c2VkLgovLy8gICAgIC4uLgovLy8gICB9LCBjcmVhdGVIdHRwQ2xpZW50OiAoU2VjdXJpdHlDb250ZXh0IGMpID0+IG5ldyBNeUh0dHBDbGllbnQoYykpOwovLy8gfQovLy8gYGBgCmFic3RyYWN0IGNsYXNzIEh0dHBPdmVycmlkZXMgewogIHN0YXRpYyBIdHRwT3ZlcnJpZGVzIF9nbG9iYWw7CgogIHN0YXRpYyBIdHRwT3ZlcnJpZGVzIGdldCBjdXJyZW50IHsKICAgIHJldHVybiBab25lLmN1cnJlbnRbX2h0dHBPdmVycmlkZXNUb2tlbl0gPz8gX2dsb2JhbDsKICB9CgogIC8vLyBUaGUgW0h0dHBPdmVycmlkZXNdIHRvIHVzZSBpbiB0aGUgcm9vdCBbWm9uZV0uCiAgLy8vCiAgLy8vIFRoZXNlIGFyZSB0aGUgW0h0dHBPdmVycmlkZXNdIHRoYXQgd2lsbCBiZSB1c2VkIGluIHRoZSByb290IFpvbmUsIGFuZCBpbgogIC8vLyBab25lJ3MgdGhhdCBkbyBub3Qgc2V0IFtIdHRwT3ZlcnJpZGVzXSBhbmQgd2hvc2UgYW5jZXN0b3JzIHVwIHRvIHRoZSByb290CiAgLy8vIFpvbmUgZG8gbm90IHNldCBbSHR0cE92ZXJyaWRlc10uCiAgc3RhdGljIHNldCBnbG9iYWwoSHR0cE92ZXJyaWRlcyBvdmVycmlkZXMpIHsKICAgIF9nbG9iYWwgPSBvdmVycmlkZXM7CiAgfQoKICAvLy8gUnVucyBbYm9keV0gaW4gYSBmcmVzaCBbWm9uZV0gdXNpbmcgdGhlIHByb3ZpZGVkIG92ZXJyaWRlcy4KICBzdGF0aWMgUiBydW5ab25lZDxSPihSIGJvZHkoKSwKICAgICAge0h0dHBDbGllbnQgRnVuY3Rpb24oU2VjdXJpdHlDb250ZXh0KSBjcmVhdGVIdHRwQ2xpZW50LAogICAgICBTdHJpbmcgRnVuY3Rpb24oVXJpIHVyaSwgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudCkKICAgICAgICAgIGZpbmRQcm94eUZyb21FbnZpcm9ubWVudCwKICAgICAgWm9uZVNwZWNpZmljYXRpb24gem9uZVNwZWNpZmljYXRpb24sCiAgICAgIEZ1bmN0aW9uIG9uRXJyb3J9KSB7CiAgICBIdHRwT3ZlcnJpZGVzIG92ZXJyaWRlcyA9CiAgICAgICAgbmV3IF9IdHRwT3ZlcnJpZGVzU2NvcGUoY3JlYXRlSHR0cENsaWVudCwgZmluZFByb3h5RnJvbUVudmlyb25tZW50KTsKICAgIHJldHVybiBfYXN5bmNSdW5ab25lZDxSPihib2R5LAogICAgICAgIHpvbmVWYWx1ZXM6IHtfaHR0cE92ZXJyaWRlc1Rva2VuOiBvdmVycmlkZXN9LAogICAgICAgIHpvbmVTcGVjaWZpY2F0aW9uOiB6b25lU3BlY2lmaWNhdGlvbiwKICAgICAgICBvbkVycm9yOiBvbkVycm9yKTsKICB9CgogIC8vLyBSdW5zIFtib2R5XSBpbiBhIGZyZXNoIFtab25lXSB1c2luZyB0aGUgb3ZlcnJpZGVzIGZvdW5kIGluIFtvdmVycmlkZXNdLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgW292ZXJyaWRlc10gc2hvdWxkIGJlIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBleHRlbmRzCiAgLy8vIFtIdHRwT3ZlcnJpZGVzXS4KICBzdGF0aWMgUiBydW5XaXRoSHR0cE92ZXJyaWRlczxSPihSIGJvZHkoKSwgSHR0cE92ZXJyaWRlcyBvdmVycmlkZXMsCiAgICAgIHtab25lU3BlY2lmaWNhdGlvbiB6b25lU3BlY2lmaWNhdGlvbiwgRnVuY3Rpb24gb25FcnJvcn0pIHsKICAgIHJldHVybiBfYXN5bmNSdW5ab25lZDxSPihib2R5LAogICAgICAgIHpvbmVWYWx1ZXM6IHtfaHR0cE92ZXJyaWRlc1Rva2VuOiBvdmVycmlkZXN9LAogICAgICAgIHpvbmVTcGVjaWZpY2F0aW9uOiB6b25lU3BlY2lmaWNhdGlvbiwKICAgICAgICBvbkVycm9yOiBvbkVycm9yKTsKICB9CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtIdHRwQ2xpZW50XSB1c2luZyB0aGUgZ2l2ZW4gW2NvbnRleHRdLgogIC8vLwogIC8vLyBXaGVuIHRoaXMgb3ZlcnJpZGUgaXMgaW5zdGFsbGVkLCB0aGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGUgYmVoYXZpb3Igb2YKICAvLy8gYG5ldyBIdHRwQ2xpZW50YC4KICBIdHRwQ2xpZW50IGNyZWF0ZUh0dHBDbGllbnQoU2VjdXJpdHlDb250ZXh0IGNvbnRleHQpIHsKICAgIHJldHVybiBuZXcgX0h0dHBDbGllbnQoY29udGV4dCk7CiAgfQoKICAvLy8gUmVzb2x2ZXMgdGhlIHByb3h5IHNlcnZlciB0byBiZSB1c2VkIGZvciBIVFRQIGNvbm5lY3Rpb25zLgogIC8vLwogIC8vLyBXaGVuIHRoaXMgb3ZlcnJpZGUgaXMgaW5zdGFsbGVkLCB0aGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGUgYmVoYXZpb3Igb2YKICAvLy8gYEh0dHBDbGllbnQuZmluZFByb3h5RnJvbUVudmlyb25tZW50YC4KICBTdHJpbmcgZmluZFByb3h5RnJvbUVudmlyb25tZW50KFVyaSB1cmwsIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQpIHsKICAgIHJldHVybiBfSHR0cENsaWVudC5fZmluZFByb3h5RnJvbUVudmlyb25tZW50KHVybCwgZW52aXJvbm1lbnQpOwogIH0KfQoKY2xhc3MgX0h0dHBPdmVycmlkZXNTY29wZSBleHRlbmRzIEh0dHBPdmVycmlkZXMgewogIGZpbmFsIEh0dHBPdmVycmlkZXMgX3ByZXZpb3VzID0gSHR0cE92ZXJyaWRlcy5jdXJyZW50OwoKICBmaW5hbCBIdHRwQ2xpZW50IEZ1bmN0aW9uKFNlY3VyaXR5Q29udGV4dCkgX2NyZWF0ZUh0dHBDbGllbnQ7CiAgZmluYWwgU3RyaW5nIEZ1bmN0aW9uKFVyaSB1cmksIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQpCiAgICAgIF9maW5kUHJveHlGcm9tRW52aXJvbm1lbnQ7CgogIF9IdHRwT3ZlcnJpZGVzU2NvcGUodGhpcy5fY3JlYXRlSHR0cENsaWVudCwgdGhpcy5fZmluZFByb3h5RnJvbUVudmlyb25tZW50KTsKCiAgQG92ZXJyaWRlCiAgSHR0cENsaWVudCBjcmVhdGVIdHRwQ2xpZW50KFNlY3VyaXR5Q29udGV4dCBjb250ZXh0KSB7CiAgICBpZiAoX2NyZWF0ZUh0dHBDbGllbnQgIT0gbnVsbCkgcmV0dXJuIF9jcmVhdGVIdHRwQ2xpZW50KGNvbnRleHQpOwogICAgaWYgKF9wcmV2aW91cyAhPSBudWxsKSByZXR1cm4gX3ByZXZpb3VzLmNyZWF0ZUh0dHBDbGllbnQoY29udGV4dCk7CiAgICByZXR1cm4gc3VwZXIuY3JlYXRlSHR0cENsaWVudChjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBmaW5kUHJveHlGcm9tRW52aXJvbm1lbnQoVXJpIHVybCwgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudCkgewogICAgaWYgKF9maW5kUHJveHlGcm9tRW52aXJvbm1lbnQgIT0gbnVsbCkgewogICAgICByZXR1cm4gX2ZpbmRQcm94eUZyb21FbnZpcm9ubWVudCh1cmwsIGVudmlyb25tZW50KTsKICAgIH0KICAgIGlmIChfcHJldmlvdXMgIT0gbnVsbCkgewogICAgICByZXR1cm4gX3ByZXZpb3VzLmZpbmRQcm94eUZyb21FbnZpcm9ubWVudCh1cmwsIGVudmlyb25tZW50KTsKICAgIH0KICAgIHJldHVybiBzdXBlci5maW5kUHJveHlGcm9tRW52aXJvbm1lbnQodXJsLCBlbnZpcm9ubWVudCk7CiAgfQp9CngATk48ARQBKgEhAU9JUEUECC8KNwoGBA0iDEs3DEgGCB8gASU5BAE1Bk9QJy8ZBAFCIT5AJCsbHk0jNi4bBAFOBkoXRkEjNi4bBAE8Bk8YOSUEAUEGTy1ORAQCATI5AUBCIQFPAQw5RkcsBAEMTi06Bh1DBj0EAgEZZGFydDpfaHR0cC9vdmVycmlkZXMuZGFydDBvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvX2h0dHAvd2Vic29ja2V0LmRhcnTAAEknLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5faHR0cDsKCi8qKgogKiBXZWJTb2NrZXQgc3RhdHVzIGNvZGVzIHVzZWQgd2hlbiBjbG9zaW5nIGEgV2ViU29ja2V0IGNvbm5lY3Rpb24uCiAqLwphYnN0cmFjdCBjbGFzcyBXZWJTb2NrZXRTdGF0dXMgewogIHN0YXRpYyBjb25zdCBpbnQgbm9ybWFsQ2xvc3VyZSA9IDEwMDA7CiAgc3RhdGljIGNvbnN0IGludCBnb2luZ0F3YXkgPSAxMDAxOwogIHN0YXRpYyBjb25zdCBpbnQgcHJvdG9jb2xFcnJvciA9IDEwMDI7CiAgc3RhdGljIGNvbnN0IGludCB1bnN1cHBvcnRlZERhdGEgPSAxMDAzOwogIHN0YXRpYyBjb25zdCBpbnQgcmVzZXJ2ZWQxMDA0ID0gMTAwNDsKICBzdGF0aWMgY29uc3QgaW50IG5vU3RhdHVzUmVjZWl2ZWQgPSAxMDA1OwogIHN0YXRpYyBjb25zdCBpbnQgYWJub3JtYWxDbG9zdXJlID0gMTAwNjsKICBzdGF0aWMgY29uc3QgaW50IGludmFsaWRGcmFtZVBheWxvYWREYXRhID0gMTAwNzsKICBzdGF0aWMgY29uc3QgaW50IHBvbGljeVZpb2xhdGlvbiA9IDEwMDg7CiAgc3RhdGljIGNvbnN0IGludCBtZXNzYWdlVG9vQmlnID0gMTAwOTsKICBzdGF0aWMgY29uc3QgaW50IG1pc3NpbmdNYW5kYXRvcnlFeHRlbnNpb24gPSAxMDEwOwogIHN0YXRpYyBjb25zdCBpbnQgaW50ZXJuYWxTZXJ2ZXJFcnJvciA9IDEwMTE7CiAgc3RhdGljIGNvbnN0IGludCByZXNlcnZlZDEwMTUgPSAxMDE1OwoKICBARGVwcmVjYXRlZCgiVXNlIG5vcm1hbENsb3N1cmUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBOT1JNQUxfQ0xPU1VSRSA9IG5vcm1hbENsb3N1cmU7CiAgQERlcHJlY2F0ZWQoIlVzZSBnb2luZ0F3YXkgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBHT0lOR19BV0FZID0gZ29pbmdBd2F5OwogIEBEZXByZWNhdGVkKCJVc2UgcHJvdG9jb2xFcnJvciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFBST1RPQ09MX0VSUk9SID0gcHJvdG9jb2xFcnJvcjsKICBARGVwcmVjYXRlZCgiVXNlIHVuc3VwcG9ydGVkRGF0YSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFVOU1VQUE9SVEVEX0RBVEEgPSB1bnN1cHBvcnRlZERhdGE7CiAgQERlcHJlY2F0ZWQoIlVzZSByZXNlcnZlZDEwMDQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBSRVNFUlZFRF8xMDA0ID0gcmVzZXJ2ZWQxMDA0OwogIEBEZXByZWNhdGVkKCJVc2Ugbm9TdGF0dXNSZWNlaXZlZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE5PX1NUQVRVU19SRUNFSVZFRCA9IG5vU3RhdHVzUmVjZWl2ZWQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBhYm5vcm1hbENsb3N1cmUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBBQk5PUk1BTF9DTE9TVVJFID0gYWJub3JtYWxDbG9zdXJlOwogIEBEZXByZWNhdGVkKCJVc2UgaW52YWxpZEZyYW1lUGF5bG9hZERhdGEgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBJTlZBTElEX0ZSQU1FX1BBWUxPQURfREFUQSA9IGludmFsaWRGcmFtZVBheWxvYWREYXRhOwogIEBEZXByZWNhdGVkKCJVc2UgcG9saWN5VmlvbGF0aW9uIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgUE9MSUNZX1ZJT0xBVElPTiA9IHBvbGljeVZpb2xhdGlvbjsKICBARGVwcmVjYXRlZCgiVXNlIG1lc3NhZ2VUb29CaWcgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBNRVNTQUdFX1RPT19CSUcgPSBtZXNzYWdlVG9vQmlnOwogIEBEZXByZWNhdGVkKCJVc2UgbWlzc2luZ01hbmRhdG9yeUV4dGVuc2lvbiBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE1JU1NJTkdfTUFOREFUT1JZX0VYVEVOU0lPTiA9IG1pc3NpbmdNYW5kYXRvcnlFeHRlbnNpb247CiAgQERlcHJlY2F0ZWQoIlVzZSBpbnRlcm5hbFNlcnZlckVycm9yIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgSU5URVJOQUxfU0VSVkVSX0VSUk9SID0gaW50ZXJuYWxTZXJ2ZXJFcnJvcjsKICBARGVwcmVjYXRlZCgiVXNlIHJlc2VydmVkMTAxNSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFJFU0VSVkVEXzEwMTUgPSByZXNlcnZlZDEwMTU7Cn0KCi8vLyBPcHRpb25zIGNvbnRyb2xsaW5nIGNvbXByZXNzaW9uIGluIGEgW1dlYlNvY2tldF0uCi8vLwovLy8gQSBbQ29tcHJlc3Npb25PcHRpb25zXSBpbnN0YW5jZSBjYW4gYmUgcGFzc2VkIHRvIFtXZWJTb2NrZXQuY29ubmVjdF0sIG9yCi8vLyB1c2VkIGluIG90aGVyIHNpbWlsYXIgcGxhY2VzIHdoZXJlIFtXZWJTb2NrZXRdIGNvbXByZXNzaW9uIGlzIGNvbmZpZ3VyZWQuCi8vLwovLy8gSW4gbW9zdCBjYXNlcyB0aGUgZGVmYXVsdCBbY29tcHJlc3Npb25EZWZhdWx0XSBpcyBzdWZmaWNpZW50LCBidXQgaW4gc29tZQovLy8gc2l0dWF0aW9ucywgaXQgbWlnaHQgYmUgZGVzaXJhYmxlIHRvIHVzZSBkaWZmZXJlbnQgY29tcHJlc3Npb24gcGFyYW1ldGVycywKLy8vIGZvciBleGFtcGxlIHRvIHByZXNlcnZlIG1lbW9yeSBvbiBzbWFsbCBkZXZpY2VzLgpjbGFzcyBDb21wcmVzc2lvbk9wdGlvbnMgewogIC8vLyBEZWZhdWx0IFtXZWJTb2NrZXRdIGNvbXByZXNzaW9uIGNvbmZpZ3VyYXRpb24uCiAgLy8vCiAgLy8vIEVuYWJsZXMgY29tcHJlc3Npb24gd2l0aCBkZWZhdWx0IHdpbmRvdyBzaXplcyBhbmQgbm8gcmV1c2UuIFRoaXMgaXMgdGhlCiAgLy8vIGRlZmF1bHQgb3B0aW9ucyB1c2VkIGJ5IFtXZWJTb2NrZXQuY29ubmVjdF0gaWYgbm8gW0NvbXByZXNzaW9uT3B0aW9uc10gaXMKICAvLy8gc3VwcGxpZWQuCiAgLy8vCiAgLy8vICogYGNsaWVudE5vQ29udGV4dFRha2VvdmVyYDogZmFsc2UKICAvLy8gKiBgc2VydmVyTm9Db250ZXh0VGFrZW92ZXJgOiBmYWxzZQogIC8vLyAqIGBjbGllbnRNYXhXaW5kb3dCaXRzYDogbnVsbCAoZGVmYXVsdCBtYXhpbWFsIHdpbmRvdyBzaXplIG9mIDE1IGJpdHMpCiAgLy8vICogYHNlcnZlck1heFdpbmRvd0JpdHNgOiBudWxsIChkZWZhdWx0IG1heGltYWwgd2luZG93IHNpemUgb2YgMTUgYml0cykKICBzdGF0aWMgY29uc3QgQ29tcHJlc3Npb25PcHRpb25zIGNvbXByZXNzaW9uRGVmYXVsdCA9CiAgICAgIGNvbnN0IENvbXByZXNzaW9uT3B0aW9ucygpOwogIEBEZXByZWNhdGVkKCJVc2UgY29tcHJlc3Npb25EZWZhdWx0IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBDb21wcmVzc2lvbk9wdGlvbnMgREVGQVVMVCA9IGNvbXByZXNzaW9uRGVmYXVsdDsKCiAgLy8vIE5vLWNvbXByZXNzaW9uIGNvbmZpZ3VyYXRpb24uCiAgLy8vCiAgLy8vIERpc2FibGVzIGNvbXByZXNzaW9uIHdoZW4gdXNlZCBhcyBjb21wcmVzc2lvbiBjb25maWd1cmF0aW9uIGZvciBhCiAgLy8vIFtXZWJTb2NrZXRdLgogIHN0YXRpYyBjb25zdCBDb21wcmVzc2lvbk9wdGlvbnMgY29tcHJlc3Npb25PZmYgPQogICAgICBjb25zdCBDb21wcmVzc2lvbk9wdGlvbnMoZW5hYmxlZDogZmFsc2UpOwogIEBEZXByZWNhdGVkKCJVc2UgY29tcHJlc3Npb25PZmYgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IENvbXByZXNzaW9uT3B0aW9ucyBPRkYgPSBjb21wcmVzc2lvbk9mZjsKCiAgLy8vIFdoZXRoZXIgdGhlIGNsaWVudCB3aWxsIHJldXNlIGl0cyBjb21wcmVzc2lvbiBpbnN0YW5jZXMuCiAgZmluYWwgYm9vbCBjbGllbnROb0NvbnRleHRUYWtlb3ZlcjsKCiAgLy8vIFdoZXRoZXIgdGhlIHNlcnZlciB3aWxsIHJldXNlIGl0cyBjb21wcmVzc2lvbiBpbnN0YW5jZXMuCiAgZmluYWwgYm9vbCBzZXJ2ZXJOb0NvbnRleHRUYWtlb3ZlcjsKCiAgLy8vIFRoZSBtYXhpbWFsIHdpbmRvdyBzaXplIGJpdCBjb3VudCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAvLy8KICAvLy8gVGhlIHdpbmRvd3Mgc2l6ZSBmb3IgdGhlIGNvbXByZXNzaW9uIGlzIGFsd2F5cyBhIHBvd2VyIG9mIHR3bywgc28gdGhlCiAgLy8vIG51bWJlciBvZiBiaXRzIHByZWNpc2VseSBkZXRlcm1pbmVzIHRoZSB3aW5kb3cgc2l6ZS4KICAvLy8KICAvLy8gSWYgc2V0IHRvIGBudWxsYCwgdGhlIGNsaWVudCBoYXMgbm8gcHJlZmVyZW5jZSwgYW5kIHRoZSBjb21wcmVzc2lvbiBjYW4KICAvLy8gdXNlIHVwIHRvIGl0cyBkZWZhdWx0IG1heGltdW0gd2luZG93IHNpemUgb2YgMTUgYml0cyBkZXBlbmRpbmcgb24gdGhlCiAgLy8vIHNlcnZlcidzIHByZWZlcmVuY2UuCiAgZmluYWwgaW50IGNsaWVudE1heFdpbmRvd0JpdHM7CgogIC8vLyBUaGUgbWF4aW1hbCB3aW5kb3cgc2l6ZSBiaXQgY291bnQgcmVxdWVzdGVkIGJ5IHRoZSBzZXJ2ZXIuCiAgLy8vCiAgLy8vIFRoZSB3aW5kb3dzIHNpemUgZm9yIHRoZSBjb21wcmVzc2lvbiBpcyBhbHdheXMgYSBwb3dlciBvZiB0d28sIHNvIHRoZQogIC8vLyBudW1iZXIgb2YgYml0cyBwcmVjaXNlbHkgZGV0ZXJtaW5lcyB0aGUgd2luZG93IHNpemUuCiAgLy8vCiAgLy8vIElmIHNldCB0byBgbnVsbGAsIHRoZSBzZXJ2ZXIgaGFzIG5vIHByZWZlcmVuY2UsIGFuZCB0aGUgY29tcHJlc3Npb24gY2FuCiAgLy8vIHVzZSB1cCB0byBpdHMgZGVmYXVsdCBtYXhpbXVtIHdpbmRvdyBzaXplIG9mIDE1IGJpdHMgZGVwZW5kaW5nIG9uIHRoZQogIC8vLyBjbGllbnQncyBwcmVmZXJlbmNlLgogIGZpbmFsIGludCBzZXJ2ZXJNYXhXaW5kb3dCaXRzOwoKICAvLy8gV2hldGhlciBXZWJTb2NrZXQgY29tcHJlc3Npb24gaXMgZW5hYmxlZC4KICAvLy8KICAvLy8gSWYgbm90IGVuYWJsZWQsIHRoZSByZW1haW5pbmcgZmllbGRzIGhhdmUgbm8gZWZmZWN0LCBhbmQgdGhlCiAgLy8vIFtjb21wcmVzc2lvbk9mZl0gaW5zdGFuY2UgY2FuLCBhbmQgc2hvdWxkLCBiZSByZXVzZWQgaW5zdGVhZCBvZiBjcmVhdGluZyBhCiAgLy8vIG5ldyBpbnN0YW5jZSB3aXRoIGNvbXByZXNzaW9uIGRpc2FibGVkLgogIGZpbmFsIGJvb2wgZW5hYmxlZDsKCiAgY29uc3QgQ29tcHJlc3Npb25PcHRpb25zKAogICAgICB7dGhpcy5jbGllbnROb0NvbnRleHRUYWtlb3ZlciA9IGZhbHNlLAogICAgICB0aGlzLnNlcnZlck5vQ29udGV4dFRha2VvdmVyID0gZmFsc2UsCiAgICAgIHRoaXMuY2xpZW50TWF4V2luZG93Qml0cywKICAgICAgdGhpcy5zZXJ2ZXJNYXhXaW5kb3dCaXRzLAogICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlfSk7CgogIC8vLyBQYXJzZXMgbGlzdCBvZiByZXF1ZXN0ZWQgc2VydmVyIGhlYWRlcnMgdG8gcmV0dXJuIHNlcnZlciBjb21wcmVzc2lvbgogIC8vLyByZXNwb25zZSBoZWFkZXJzLgogIC8vLwogIC8vLyBVc2VzIFtzZXJ2ZXJNYXhXaW5kb3dCaXRzXSB2YWx1ZSBpZiBzZXQsIG90aGVyd2lzZSB3aWxsIGF0dGVtcHQgdG8gdXNlCiAgLy8vIHZhbHVlIGZyb20gaGVhZGVycy4gRGVmYXVsdHMgdG8gW1dlYlNvY2tldC5ERUZBVUxUX1dJTkRPV19CSVRTXS4gUmV0dXJucyBhCiAgLy8vIFtfQ29tcHJlc3Npb25NYXhXaW5kb3dCaXRzXSBvYmplY3Qgd2hpY2ggY29udGFpbnMgdGhlIHJlc3BvbnNlIGhlYWRlcnMgYW5kCiAgLy8vIG5lZ290aWF0ZWQgbWF4IHdpbmRvdyBiaXRzLgogIF9Db21wcmVzc2lvbk1heFdpbmRvd0JpdHMgX2NyZWF0ZVNlcnZlclJlc3BvbnNlSGVhZGVyKEhlYWRlclZhbHVlIHJlcXVlc3RlZCkgewogICAgdmFyIGluZm8gPSBuZXcgX0NvbXByZXNzaW9uTWF4V2luZG93Qml0cygpOwoKICAgIGludCBtd2I7CiAgICBTdHJpbmcgcGFydDsKICAgIGlmIChyZXF1ZXN0ZWQ/LnBhcmFtZXRlcnMgIT0gbnVsbCkgewogICAgICBwYXJ0ID0gcmVxdWVzdGVkLnBhcmFtZXRlcnNbX3NlcnZlck1heFdpbmRvd0JpdHNdOwogICAgfQogICAgaWYgKHBhcnQgIT0gbnVsbCkgewogICAgICBpZiAocGFydC5sZW5ndGggPj0gMiAmJiBwYXJ0LnN0YXJ0c1dpdGgoJzAnKSkgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJJbGxlZ2FsIDAgcGFkZGluZyBvbiB2YWx1ZS4iKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBtd2IgPSBzZXJ2ZXJNYXhXaW5kb3dCaXRzID09IG51bGwKICAgICAgICAgICAgPyBpbnQucGFyc2UocGFydCwKICAgICAgICAgICAgICAgIG9uRXJyb3I6IChzb3VyY2UpID0+IF9XZWJTb2NrZXRJbXBsLkRFRkFVTFRfV0lORE9XX0JJVFMpCiAgICAgICAgICAgIDogc2VydmVyTWF4V2luZG93Qml0czsKICAgICAgICBpbmZvLmhlYWRlclZhbHVlID0gIjsgc2VydmVyX21heF93aW5kb3dfYml0cz0ke213Yn0iOwogICAgICAgIGluZm8ubWF4V2luZG93Qml0cyA9IG13YjsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaW5mby5oZWFkZXJWYWx1ZSA9ICIiOwogICAgICBpbmZvLm1heFdpbmRvd0JpdHMgPSBfV2ViU29ja2V0SW1wbC5ERUZBVUxUX1dJTkRPV19CSVRTOwogICAgfQogICAgcmV0dXJuIGluZm87CiAgfQoKICAvLy8gUmV0dXJucyBkZWZhdWx0IHZhbHVlcyBmb3IgY2xpZW50IGNvbXByZXNzaW9uIHJlcXVlc3QgaGVhZGVycy4KICBTdHJpbmcgX2NyZWF0ZUNsaWVudFJlcXVlc3RIZWFkZXIoSGVhZGVyVmFsdWUgcmVxdWVzdGVkLCBpbnQgc2l6ZSkgewogICAgdmFyIGluZm8gPSAiIjsKCiAgICAvLyBJZiByZXNwb25kaW5nIHRvIGEgdmFsaWQgcmVxdWVzdCwgc3BlY2lmeSBzaXplCiAgICBpZiAocmVxdWVzdGVkICE9IG51bGwpIHsKICAgICAgaW5mbyA9ICI7IGNsaWVudF9tYXhfd2luZG93X2JpdHM9JHNpemUiOwogICAgfSBlbHNlIHsKICAgICAgLy8gQ2xpZW50IHJlcXVlc3QuIFNwZWNpZnkgZGVmYXVsdAogICAgICBpZiAoY2xpZW50TWF4V2luZG93Qml0cyA9PSBudWxsKSB7CiAgICAgICAgaW5mbyA9ICI7IGNsaWVudF9tYXhfd2luZG93X2JpdHMiOwogICAgICB9IGVsc2UgewogICAgICAgIGluZm8gPSAiOyBjbGllbnRfbWF4X3dpbmRvd19iaXRzPSRjbGllbnRNYXhXaW5kb3dCaXRzIjsKICAgICAgfQogICAgICBpZiAoc2VydmVyTWF4V2luZG93Qml0cyAhPSBudWxsKSB7CiAgICAgICAgaW5mbyArPSAiOyBzZXJ2ZXJfbWF4X3dpbmRvd19iaXRzPSRzZXJ2ZXJNYXhXaW5kb3dCaXRzIjsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBpbmZvOwogIH0KCiAgLy8vIENyZWF0ZSBhIENvbXByZXNzaW9uIEhlYWRlci4KICAvLy8KICAvLy8gSWYgW3JlcXVlc3RlZF0gaXMgbnVsbCBvciBjb250YWlucyBjbGllbnQgcmVxdWVzdCBoZWFkZXJzLCByZXR1cm5zIENsaWVudAogIC8vLyBjb21wcmVzc2lvbiByZXF1ZXN0IGhlYWRlcnMgd2l0aCBkZWZhdWx0IHNldHRpbmdzIGZvcgogIC8vLyBgY2xpZW50X21heF93aW5kb3dfYml0c2AgaGVhZGVyIHZhbHVlLiAgSWYgW3JlcXVlc3RlZF0gY29udGFpbnMgc2VydmVyCiAgLy8vIHJlc3BvbnNlIGhlYWRlcnMgdGhpcyBtZXRob2QgcmV0dXJucyBhIFNlcnZlciBjb21wcmVzc2lvbiByZXNwb25zZSBoZWFkZXIKICAvLy8gbmVnb3RpYXRpbmcgdGhlIG1heCB3aW5kb3cgYml0cyBmb3IgYm90aCBjbGllbnQgYW5kIHNlcnZlciBhcyByZXF1ZXN0ZWQKICAvLy8gYHNlcnZlcl9tYXhfd2luZG93X2JpdHNgIHZhbHVlLiAgVGhpcyBtZXRob2QgcmV0dXJucyBhCiAgLy8vIFtfQ29tcHJlc3Npb25NYXhXaW5kb3dCaXRzXSBvYmplY3Qgd2l0aCB0aGUgcmVzcG9uc2UgaGVhZGVycyBhbmQKICAvLy8gbmVnb3RpYXRlZCBgbWF4V2luZG93Qml0c2AgdmFsdWUuCiAgX0NvbXByZXNzaW9uTWF4V2luZG93Qml0cyBfY3JlYXRlSGVhZGVyKFtIZWFkZXJWYWx1ZSByZXF1ZXN0ZWRdKSB7CiAgICB2YXIgaW5mbyA9IG5ldyBfQ29tcHJlc3Npb25NYXhXaW5kb3dCaXRzKCIiLCAwKTsKICAgIGlmICghZW5hYmxlZCkgewogICAgICByZXR1cm4gaW5mbzsKICAgIH0KCiAgICBpbmZvLmhlYWRlclZhbHVlID0gX1dlYlNvY2tldEltcGwuUEVSX01FU1NBR0VfREVGTEFURTsKCiAgICBpZiAoY2xpZW50Tm9Db250ZXh0VGFrZW92ZXIgJiYKICAgICAgICAocmVxdWVzdGVkID09IG51bGwgfHwKICAgICAgICAgICAgKHJlcXVlc3RlZCAhPSBudWxsICYmCiAgICAgICAgICAgICAgICByZXF1ZXN0ZWQucGFyYW1ldGVycy5jb250YWluc0tleShfY2xpZW50Tm9Db250ZXh0VGFrZW92ZXIpKSkpIHsKICAgICAgaW5mby5oZWFkZXJWYWx1ZSArPSAiOyBjbGllbnRfbm9fY29udGV4dF90YWtlb3ZlciI7CiAgICB9CgogICAgaWYgKHNlcnZlck5vQ29udGV4dFRha2VvdmVyICYmCiAgICAgICAgKHJlcXVlc3RlZCA9PSBudWxsIHx8CiAgICAgICAgICAgIChyZXF1ZXN0ZWQgIT0gbnVsbCAmJgogICAgICAgICAgICAgICAgcmVxdWVzdGVkLnBhcmFtZXRlcnMuY29udGFpbnNLZXkoX3NlcnZlck5vQ29udGV4dFRha2VvdmVyKSkpKSB7CiAgICAgIGluZm8uaGVhZGVyVmFsdWUgKz0gIjsgc2VydmVyX25vX2NvbnRleHRfdGFrZW92ZXIiOwogICAgfQoKICAgIHZhciBoZWFkZXJMaXN0ID0gX2NyZWF0ZVNlcnZlclJlc3BvbnNlSGVhZGVyKHJlcXVlc3RlZCk7CiAgICBpbmZvLmhlYWRlclZhbHVlICs9IGhlYWRlckxpc3QuaGVhZGVyVmFsdWU7CiAgICBpbmZvLm1heFdpbmRvd0JpdHMgPSBoZWFkZXJMaXN0Lm1heFdpbmRvd0JpdHM7CgogICAgaW5mby5oZWFkZXJWYWx1ZSArPQogICAgICAgIF9jcmVhdGVDbGllbnRSZXF1ZXN0SGVhZGVyKHJlcXVlc3RlZCwgaW5mby5tYXhXaW5kb3dCaXRzKTsKCiAgICByZXR1cm4gaW5mbzsKICB9Cn0KCi8qKgogKiBUaGUgW1dlYlNvY2tldFRyYW5zZm9ybWVyXSBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byB1cGdyYWRlIGEKICogW0h0dHBSZXF1ZXN0XSB0byBhIFtXZWJTb2NrZXRdIGNvbm5lY3Rpb24uIEl0IHN1cHBvcnRzIGJvdGgKICogdXBncmFkaW5nIGEgc2luZ2xlIFtIdHRwUmVxdWVzdF0gYW5kIHVwZ3JhZGluZyBhIHN0cmVhbSBvZgogKiBbSHR0cFJlcXVlc3Rdcy4KICoKICogVG8gdXBncmFkZSBhIHNpbmdsZSBbSHR0cFJlcXVlc3RdIHVzZSB0aGUgc3RhdGljIFt1cGdyYWRlXSBtZXRob2QuCiAqCiAqICAgICBIdHRwU2VydmVyIHNlcnZlcjsKICogICAgIHNlcnZlci5saXN0ZW4oKHJlcXVlc3QpIHsKICogICAgICAgaWYgKC4uLikgewogKiAgICAgICAgIFdlYlNvY2tldFRyYW5zZm9ybWVyLnVwZ3JhZGUocmVxdWVzdCkudGhlbigod2Vic29ja2V0KSB7CiAqICAgICAgICAgICAuLi4KICogICAgICAgICB9KTsKICogICAgICAgfSBlbHNlIHsKICogICAgICAgICAvLyBEbyBub3JtYWwgSFRUUCByZXF1ZXN0IHByb2Nlc3NpbmcuCiAqICAgICAgIH0KICogICAgIH0pOwogKgogKiBUbyB0cmFuc2Zvcm0gYSBzdHJlYW0gb2YgW0h0dHBSZXF1ZXN0XSBldmVudHMgYXMgaXQgaW1wbGVtZW50cyBhCiAqIHN0cmVhbSB0cmFuc2Zvcm1lciB0aGF0IHRyYW5zZm9ybXMgYSBzdHJlYW0gb2YgSHR0cFJlcXVlc3QgaW50byBhCiAqIHN0cmVhbSBvZiBXZWJTb2NrZXRzIGJ5IHVwZ3JhZGluZyBlYWNoIEh0dHBSZXF1ZXN0IGZyb20gdGhlIEhUVFAgb3IKICogSFRUUFMgc2VydmVyLCB0byB0aGUgV2ViU29ja2V0IHByb3RvY29sLgogKgogKiAgICAgc2VydmVyLnRyYW5zZm9ybShuZXcgV2ViU29ja2V0VHJhbnNmb3JtZXIoKSkubGlzdGVuKCh3ZWJTb2NrZXQpID0+IC4uLik7CiAqCiAqIFRoaXMgdHJhbnNmb3JtZXIgc3RyaXZlcyB0byBpbXBsZW1lbnQgV2ViU29ja2V0cyBhcyBzcGVjaWZpZWQgYnkgUkZDNjQ1NS4KICovCmFic3RyYWN0IGNsYXNzIFdlYlNvY2tldFRyYW5zZm9ybWVyCiAgICBpbXBsZW1lbnRzIFN0cmVhbVRyYW5zZm9ybWVyPEh0dHBSZXF1ZXN0LCBXZWJTb2NrZXQ+IHsKICAvKioKICAgKiBDcmVhdGUgYSBuZXcgW1dlYlNvY2tldFRyYW5zZm9ybWVyXS4KICAgKgogICAqIElmIFtwcm90b2NvbFNlbGVjdG9yXSBpcyBwcm92aWRlZCwgW3Byb3RvY29sU2VsZWN0b3JdIHdpbGwgYmUgY2FsbGVkIHRvCiAgICogc2VsZWN0IHdoYXQgcHJvdG9jb2wgdG8gdXNlLCBpZiBhbnkgd2VyZSBwcm92aWRlZCBieSB0aGUgY2xpZW50LgogICAqIFtwcm90b2NvbFNlbGVjdG9yXSBpcyBzaG91bGQgcmV0dXJuIGVpdGhlciBhIFtTdHJpbmddIG9yIGEgW0Z1dHVyZV0KICAgKiBjb21wbGV0aW5nIHdpdGggYSBbU3RyaW5nXS4gVGhlIFtTdHJpbmddIG11c3QgZXhpc3QgaW4gdGhlIGxpc3Qgb2YKICAgKiBwcm90b2NvbHMuCiAgICoKICAgKiBJZiBbY29tcHJlc3Npb25dIGlzIHByb3ZpZGVkLCB0aGUgW1dlYlNvY2tldF0gY3JlYXRlZCB3aWxsIGJlIGNvbmZpZ3VyZWQKICAgKiB0byBuZWdvdGlhdGUgd2l0aCB0aGUgc3BlY2lmaWVkIFtDb21wcmVzc2lvbk9wdGlvbnNdLiBJZiBub25lIGlzIHNwZWNpZmllZAogICAqIHRoZW4gdGhlIFtXZWJTb2NrZXRdIHdpbGwgYmUgY3JlYXRlZCB3aXRoIHRoZSBkZWZhdWx0IFtDb21wcmVzc2lvbk9wdGlvbnNdLgogICAqLwogIGZhY3RvcnkgV2ViU29ja2V0VHJhbnNmb3JtZXIoCiAgICAgIHsvKlN0cmluZ3xGdXR1cmU8U3RyaW5nPiovIHByb3RvY29sU2VsZWN0b3IoTGlzdDxTdHJpbmc+IHByb3RvY29scyksCiAgICAgIENvbXByZXNzaW9uT3B0aW9ucyBjb21wcmVzc2lvbjogQ29tcHJlc3Npb25PcHRpb25zLmNvbXByZXNzaW9uRGVmYXVsdH0pIHsKICAgIHJldHVybiBuZXcgX1dlYlNvY2tldFRyYW5zZm9ybWVySW1wbChwcm90b2NvbFNlbGVjdG9yLCBjb21wcmVzc2lvbik7CiAgfQoKICAvKioKICAgKiBVcGdyYWRlcyBhIFtIdHRwUmVxdWVzdF0gdG8gYSBbV2ViU29ja2V0XSBjb25uZWN0aW9uLiBJZiB0aGUKICAgKiByZXF1ZXN0IGlzIG5vdCBhIHZhbGlkIFdlYlNvY2tldCB1cGdyYWRlIHJlcXVlc3QgYW4gSFRUUCByZXNwb25zZQogICAqIHdpdGggc3RhdHVzIGNvZGUgNTAwIHdpbGwgYmUgcmV0dXJuZWQuIE90aGVyd2lzZSB0aGUgcmV0dXJuZWQKICAgKiBmdXR1cmUgd2lsbCBjb21wbGV0ZSB3aXRoIHRoZSBbV2ViU29ja2V0XSB3aGVuIHRoZSB1cGdyYWRlIHByb2Nlc3MKICAgKiBpcyBjb21wbGV0ZS4KICAgKgogICAqIElmIFtwcm90b2NvbFNlbGVjdG9yXSBpcyBwcm92aWRlZCwgW3Byb3RvY29sU2VsZWN0b3JdIHdpbGwgYmUgY2FsbGVkIHRvCiAgICogc2VsZWN0IHdoYXQgcHJvdG9jb2wgdG8gdXNlLCBpZiBhbnkgd2VyZSBwcm92aWRlZCBieSB0aGUgY2xpZW50LgogICAqIFtwcm90b2NvbFNlbGVjdG9yXSBpcyBzaG91bGQgcmV0dXJuIGVpdGhlciBhIFtTdHJpbmddIG9yIGEgW0Z1dHVyZV0KICAgKiBjb21wbGV0aW5nIHdpdGggYSBbU3RyaW5nXS4gVGhlIFtTdHJpbmddIG11c3QgZXhpc3QgaW4gdGhlIGxpc3Qgb2YKICAgKiBwcm90b2NvbHMuCiAgICoKICAgKiBJZiBbY29tcHJlc3Npb25dIGlzIHByb3ZpZGVkLCB0aGUgW1dlYlNvY2tldF0gY3JlYXRlZCB3aWxsIGJlIGNvbmZpZ3VyZWQKICAgKiB0byBuZWdvdGlhdGUgd2l0aCB0aGUgc3BlY2lmaWVkIFtDb21wcmVzc2lvbk9wdGlvbnNdLiBJZiBub25lIGlzIHNwZWNpZmllZAogICAqIHRoZW4gdGhlIFtXZWJTb2NrZXRdIHdpbGwgYmUgY3JlYXRlZCB3aXRoIHRoZSBkZWZhdWx0IFtDb21wcmVzc2lvbk9wdGlvbnNdLgogICAqLwogIHN0YXRpYyBGdXR1cmU8V2ViU29ja2V0PiB1cGdyYWRlKEh0dHBSZXF1ZXN0IHJlcXVlc3QsCiAgICAgIHtwcm90b2NvbFNlbGVjdG9yKExpc3Q8U3RyaW5nPiBwcm90b2NvbHMpLAogICAgICBDb21wcmVzc2lvbk9wdGlvbnMgY29tcHJlc3Npb246IENvbXByZXNzaW9uT3B0aW9ucy5jb21wcmVzc2lvbkRlZmF1bHR9KSB7CiAgICByZXR1cm4gX1dlYlNvY2tldFRyYW5zZm9ybWVySW1wbC5fdXBncmFkZSgKICAgICAgICByZXF1ZXN0LCBwcm90b2NvbFNlbGVjdG9yLCBjb21wcmVzc2lvbik7CiAgfQoKICAvKioKICAgKiBDaGVja3Mgd2hldGhlciB0aGUgcmVxdWVzdCBpcyBhIHZhbGlkIFdlYlNvY2tldCB1cGdyYWRlIHJlcXVlc3QuCiAgICovCiAgc3RhdGljIGJvb2wgaXNVcGdyYWRlUmVxdWVzdChIdHRwUmVxdWVzdCByZXF1ZXN0KSB7CiAgICByZXR1cm4gX1dlYlNvY2tldFRyYW5zZm9ybWVySW1wbC5faXNVcGdyYWRlUmVxdWVzdChyZXF1ZXN0KTsKICB9Cn0KCi8qKgogKiBBIHR3by13YXkgSFRUUCBjb21tdW5pY2F0aW9uIG9iamVjdCBmb3IgY2xpZW50IG9yIHNlcnZlciBhcHBsaWNhdGlvbnMuCiAqCiAqIFRoZSBzdHJlYW0gZXhwb3NlcyB0aGUgbWVzc2FnZXMgcmVjZWl2ZWQuIEEgdGV4dCBtZXNzYWdlIHdpbGwgYmUgb2YgdHlwZQogKiBgU3RyaW5nYCBhbmQgYSBiaW5hcnkgbWVzc2FnZSB3aWxsIGJlIG9mIHR5cGUgYExpc3Q8aW50PmAuCiAqLwphYnN0cmFjdCBjbGFzcyBXZWJTb2NrZXQKICAgIGltcGxlbWVudHMKICAgICAgICBTdHJlYW08ZHluYW1pYyAvKlN0cmluZ3xMaXN0PGludD4qLyA+LAogICAgICAgIFN0cmVhbVNpbms8ZHluYW1pYyAvKlN0cmluZ3xMaXN0PGludD4qLyA+IHsKICAvKioKICAgKiBQb3NzaWJsZSBzdGF0ZXMgb2YgdGhlIGNvbm5lY3Rpb24uCiAgICovCiAgc3RhdGljIGNvbnN0IGludCBjb25uZWN0aW5nID0gMDsKICBzdGF0aWMgY29uc3QgaW50IG9wZW4gPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgY2xvc2luZyA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBjbG9zZWQgPSAzOwoKICBARGVwcmVjYXRlZCgiVXNlIGNvbm5lY3RpbmcgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBDT05ORUNUSU5HID0gY29ubmVjdGluZzsKICBARGVwcmVjYXRlZCgiVXNlIG9wZW4gaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBPUEVOID0gb3BlbjsKICBARGVwcmVjYXRlZCgiVXNlIGNsb3NpbmcgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBDTE9TSU5HID0gY2xvc2luZzsKICBARGVwcmVjYXRlZCgiVXNlIGNsb3NlZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IENMT1NFRCA9IGNsb3NlZDsKCiAgLyoqCiAgICogU2V0IGFuZCBnZXQgdGhlIGludGVydmFsIGZvciBzZW5kaW5nIHBpbmcgc2lnbmFscy4gSWYgYSBwaW5nIG1lc3NhZ2UgaXMgbm90CiAgICogYW5zd2VyZWQgYnkgYSBwb25nIG1lc3NhZ2UgZnJvbSB0aGUgcGVlciwgdGhlIGBXZWJTb2NrZXRgIGlzIGFzc3VtZWQKICAgKiBkaXNjb25uZWN0ZWQgYW5kIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZCB3aXRoIGEKICAgKiBbV2ViU29ja2V0U3RhdHVzLkdPSU5HX0FXQVldIGNsb3NlIGNvZGUuIFdoZW4gYSBwaW5nIHNpZ25hbCBpcyBzZW50LCB0aGUKICAgKiBwb25nIG1lc3NhZ2UgbXVzdCBiZSByZWNlaXZlZCB3aXRoaW4gW3BpbmdJbnRlcnZhbF0uCiAgICoKICAgKiBUaGVyZSBhcmUgbmV2ZXIgdHdvIG91dHN0YW5kaW5nIHBpbmdzIGF0IGFueSBnaXZlbiB0aW1lLCBhbmQgdGhlIG5leHQgcGluZwogICAqIHRpbWVyIHN0YXJ0cyB3aGVuIHRoZSBwb25nIGlzIHJlY2VpdmVkLgogICAqCiAgICogU2V0IHRoZSBbcGluZ0ludGVydmFsXSB0byBgbnVsbGAgdG8gZGlzYWJsZSBzZW5kaW5nIHBpbmcgbWVzc2FnZXMuCiAgICoKICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgbnVsbGAuCiAgICovCiAgRHVyYXRpb24gcGluZ0ludGVydmFsOwoKICAvKioKICAgKiBDcmVhdGUgYSBuZXcgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZSBVUkwgc3VwcGxpZWQgaW4gW3VybF0KICAgKiBtdXN0IHVzZSB0aGUgc2NoZW1lIGB3c2Agb3IgYHdzc2AuCiAgICoKICAgKiBUaGUgW3Byb3RvY29sc10gYXJndW1lbnQgaXMgc3BlY2lmeWluZyB0aGUgc3VicHJvdG9jb2xzIHRoZQogICAqIGNsaWVudCBpcyB3aWxsaW5nIHRvIHNwZWFrLgogICAqCiAgICogVGhlIFtoZWFkZXJzXSBhcmd1bWVudCBpcyBzcGVjaWZ5aW5nIGFkZGl0aW9uYWwgSFRUUCBoZWFkZXJzIGZvcgogICAqIHNldHRpbmcgdXAgdGhlIGNvbm5lY3Rpb24uIFRoaXMgd291bGQgdHlwaWNhbGx5IGJlIHRoZSBgT3JpZ2luYAogICAqIGhlYWRlciBhbmQgcG90ZW50aWFsbHkgY29va2llcy4gVGhlIGtleXMgb2YgdGhlIG1hcCBhcmUgdGhlIGhlYWRlcgogICAqIGZpZWxkcyBhbmQgdGhlIHZhbHVlcyBhcmUgZWl0aGVyIFN0cmluZyBvciBMaXN0PFN0cmluZz4uCiAgICoKICAgKiBJZiBbaGVhZGVyc10gaXMgcHJvdmlkZWQsIHRoZXJlIGFyZSBhIG51bWJlciBvZiBoZWFkZXJzCiAgICogd2hpY2ggYXJlIGNvbnRyb2xsZWQgYnkgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIHByb2Nlc3MuIFRoZXNlCiAgICogaGVhZGVycyBhcmU6CiAgICoKICAgKiAgIC0gYGNvbm5lY3Rpb25gCiAgICogICAtIGBzZWMtd2Vic29ja2V0LWtleWAKICAgKiAgIC0gYHNlYy13ZWJzb2NrZXQtcHJvdG9jb2xgCiAgICogICAtIGBzZWMtd2Vic29ja2V0LXZlcnNpb25gCiAgICogICAtIGB1cGdyYWRlYAogICAqCiAgICogSWYgYW55IG9mIHRoZXNlIGFyZSBwYXNzZWQgaW4gdGhlIGBoZWFkZXJzYCBtYXAgdGhleSB3aWxsIGJlIGlnbm9yZWQuCiAgICoKICAgKiBJZiB0aGUgYHVybGAgY29udGFpbnMgdXNlciBpbmZvcm1hdGlvbiB0aGlzIHdpbGwgYmUgcGFzc2VkIGFzIGJhc2ljCiAgICogYXV0aGVudGljYXRpb24gd2hlbiBzZXR0aW5nIHVwIHRoZSBjb25uZWN0aW9uLgogICAqLwogIHN0YXRpYyBGdXR1cmU8V2ViU29ja2V0PiBjb25uZWN0KFN0cmluZyB1cmwsCiAgICAgICAgICB7SXRlcmFibGU8U3RyaW5nPiBwcm90b2NvbHMsCiAgICAgICAgICBNYXA8U3RyaW5nLCBkeW5hbWljPiBoZWFkZXJzLAogICAgICAgICAgQ29tcHJlc3Npb25PcHRpb25zIGNvbXByZXNzaW9uOgogICAgICAgICAgICAgIENvbXByZXNzaW9uT3B0aW9ucy5jb21wcmVzc2lvbkRlZmF1bHR9KSA9PgogICAgICBfV2ViU29ja2V0SW1wbC5jb25uZWN0KHVybCwgcHJvdG9jb2xzLCBoZWFkZXJzLCBjb21wcmVzc2lvbjogY29tcHJlc3Npb24pOwoKICBARGVwcmVjYXRlZCgnVGhpcyBjb25zdHJ1Y3RvciB3aWxsIGJlIHJlbW92ZWQgaW4gRGFydCAyLjAuIFVzZSBgaW1wbGVtZW50c2AnCiAgICAgICcgaW5zdGVhZCBvZiBgZXh0ZW5kc2AgaWYgaW1wbGVtZW50aW5nIHRoaXMgYWJzdHJhY3QgY2xhc3MuJykKICBXZWJTb2NrZXQoKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFdlYlNvY2tldCBmcm9tIGFuIGFscmVhZHktdXBncmFkZWQgc29ja2V0LgogICAqCiAgICogVGhlIGluaXRpYWwgV2ViU29ja2V0IGhhbmRzaGFrZSBtdXN0IGhhdmUgb2NjdXJyZWQgcHJpb3IgdG8gdGhpcyBjYWxsLiBBCiAgICogV2ViU29ja2V0IGNsaWVudCBjYW4gYXV0b21hdGljYWxseSBwZXJmb3JtIHRoZSBoYW5kc2hha2UgdXNpbmcKICAgKiBbV2ViU29ja2V0LmNvbm5lY3RdLCB3aGlsZSBhIHNlcnZlciBjYW4gZG8gc28gdXNpbmcKICAgKiBbV2ViU29ja2V0VHJhbnNmb3JtZXIudXBncmFkZV0uIFRvIG1hbnVhbGx5IHVwZ3JhZGUgYW4gW0h0dHBSZXF1ZXN0XSwKICAgKiBbSHR0cFJlc3BvbnNlLmRldGFjaFNvY2tldF0gbWF5IGJlIGNhbGxlZC4KICAgKgogICAqIFtwcm90b2NvbF0gc2hvdWxkIGJlIHRoZSBwcm90b2NvbCBuZWdvdGlhdGVkIGJ5IHRoaXMgaGFuZHNoYWtlLCBpZiBhbnkuCiAgICoKICAgKiBbc2VydmVyU2lkZV0gbXVzdCBiZSBwYXNzZWQgZXhwbGljaXRseS4gSWYgaXQncyBgZmFsc2VgLCB0aGUgV2ViU29ja2V0IHdpbGwKICAgKiBhY3QgYXMgdGhlIGNsaWVudCBhbmQgbWFzayB0aGUgbWVzc2FnZXMgaXQgc2VuZHMuIElmIGl0J3MgYHRydWVgLCBpdCB3aWxsCiAgICogYWN0IGFzIHRoZSBzZXJ2ZXIgYW5kIHdpbGwgbm90IG1hc2sgaXRzIG1lc3NhZ2VzLgogICAqCiAgICogSWYgW2NvbXByZXNzaW9uXSBpcyBwcm92aWRlZCwgdGhlIFtXZWJTb2NrZXRdIGNyZWF0ZWQgd2lsbCBiZSBjb25maWd1cmVkCiAgICogdG8gbmVnb3RpYXRlIHdpdGggdGhlIHNwZWNpZmllZCBbQ29tcHJlc3Npb25PcHRpb25zXS4gSWYgbm9uZSBpcyBzcGVjaWZpZWQKICAgKiB0aGVuIHRoZSBbV2ViU29ja2V0XSB3aWxsIGJlIGNyZWF0ZWQgd2l0aCB0aGUgZGVmYXVsdCBbQ29tcHJlc3Npb25PcHRpb25zXS4KICAgKi8KICBmYWN0b3J5IFdlYlNvY2tldC5mcm9tVXBncmFkZWRTb2NrZXQoU29ja2V0IHNvY2tldCwKICAgICAge1N0cmluZyBwcm90b2NvbCwKICAgICAgYm9vbCBzZXJ2ZXJTaWRlLAogICAgICBDb21wcmVzc2lvbk9wdGlvbnMgY29tcHJlc3Npb246IENvbXByZXNzaW9uT3B0aW9ucy5jb21wcmVzc2lvbkRlZmF1bHR9KSB7CiAgICBpZiAoc2VydmVyU2lkZSA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJUaGUgc2VydmVyU2lkZSBhcmd1bWVudCBtdXN0IGJlIHBhc3NlZCAiCiAgICAgICAgICAiZXhwbGljaXRseSB0byBXZWJTb2NrZXQuZnJvbVVwZ3JhZGVkU29ja2V0LiIpOwogICAgfQogICAgcmV0dXJuIG5ldyBfV2ViU29ja2V0SW1wbC5fZnJvbVNvY2tldCgKICAgICAgICBzb2NrZXQsIHByb3RvY29sLCBjb21wcmVzc2lvbiwgc2VydmVyU2lkZSk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBjb25uZWN0aW9uLgogICAqLwogIGludCBnZXQgcmVhZHlTdGF0ZTsKCiAgLyoqCiAgICogVGhlIGV4dGVuc2lvbnMgcHJvcGVydHkgaXMgaW5pdGlhbGx5IHRoZSBlbXB0eSBzdHJpbmcuIEFmdGVyIHRoZQogICAqIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkIHRoaXMgc3RyaW5nIHJlZmxlY3RzIHRoZQogICAqIGV4dGVuc2lvbnMgdXNlZCBieSB0aGUgc2VydmVyLgogICAqLwogIFN0cmluZyBnZXQgZXh0ZW5zaW9uczsKCiAgLyoqCiAgICogVGhlIHByb3RvY29sIHByb3BlcnR5IGlzIGluaXRpYWxseSB0aGUgZW1wdHkgc3RyaW5nLiBBZnRlciB0aGUKICAgKiBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCB0aGUgdmFsdWUgaXMgdGhlIHN1YnByb3RvY29sCiAgICogc2VsZWN0ZWQgYnkgdGhlIHNlcnZlci4gSWYgbm8gc3VicHJvdG9jb2wgaXMgbmVnb3RpYXRlZCB0aGUKICAgKiB2YWx1ZSB3aWxsIHJlbWFpbiBbOm51bGw6XS4KICAgKi8KICBTdHJpbmcgZ2V0IHByb3RvY29sOwoKICAvKioKICAgKiBUaGUgY2xvc2UgY29kZSBzZXQgd2hlbiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgY2xvc2VkLiBJZgogICAqIHRoZXJlIGlzIG5vIGNsb3NlIGNvZGUgYXZhaWxhYmxlIHRoaXMgcHJvcGVydHkgd2lsbCBiZSBbOm51bGw6XQogICAqLwogIGludCBnZXQgY2xvc2VDb2RlOwoKICAvKioKICAgKiBUaGUgY2xvc2UgcmVhc29uIHNldCB3aGVuIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBjbG9zZWQuIElmCiAgICogdGhlcmUgaXMgbm8gY2xvc2UgcmVhc29uIGF2YWlsYWJsZSB0aGlzIHByb3BlcnR5IHdpbGwgYmUgWzpudWxsOl0KICAgKi8KICBTdHJpbmcgZ2V0IGNsb3NlUmVhc29uOwoKICAvKioKICAgKiBDbG9zZXMgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLiBTZXQgdGhlIG9wdGlvbmFsIFtjb2RlXSBhbmQgW3JlYXNvbl0KICAgKiBhcmd1bWVudHMgdG8gc2VuZCBjbG9zZSBpbmZvcm1hdGlvbiB0byB0aGUgcmVtb3RlIHBlZXIuIElmIHRoZXkgYXJlCiAgICogb21pdHRlZCwgdGhlIHBlZXIgd2lsbCBzZWUgW1dlYlNvY2tldFN0YXR1cy5OT19TVEFUVVNfUkVDRUlWRURdIGNvZGUKICAgKiB3aXRoIG5vIHJlYXNvbi4KICAgKi8KICBGdXR1cmUgY2xvc2UoW2ludCBjb2RlLCBTdHJpbmcgcmVhc29uXSk7CgogIC8qKgogICAqIFNlbmRzIGRhdGEgb24gdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLiBUaGUgZGF0YSBpbiBbZGF0YV0gbXVzdAogICAqIGJlIGVpdGhlciBhIGBTdHJpbmdgLCBvciBhIGBMaXN0PGludD5gIGhvbGRpbmcgYnl0ZXMuCiAgICovCiAgdm9pZCBhZGQoLypTdHJpbmd8TGlzdDxpbnQ+Ki8gZGF0YSk7CgogIC8qKgogICAqIFNlbmRzIGRhdGEgZnJvbSBhIHN0cmVhbSBvbiBXZWJTb2NrZXQgY29ubmVjdGlvbi4gRWFjaCBkYXRhIGV2ZW50IGZyb20KICAgKiBbc3RyZWFtXSB3aWxsIGJlIHNlbmQgYXMgYSBzaW5nbGUgV2ViU29ja2V0IGZyYW1lLiBUaGUgZGF0YSBmcm9tIFtzdHJlYW1dCiAgICogbXVzdCBiZSBlaXRoZXIgYFN0cmluZ2BzLCBvciBgTGlzdDxpbnQ+YHMgaG9sZGluZyBieXRlcy4KICAgKi8KICBGdXR1cmUgYWRkU3RyZWFtKFN0cmVhbSBzdHJlYW0pOwoKICAvKioKICAgKiBTZW5kcyBhIHRleHQgbWVzc2FnZSB3aXRoIHRoZSB0ZXh0IHJlcHJlc2VudGVkIGJ5IFtieXRlc10uCiAgICoKICAgKiBUaGUgW2J5dGVzXSBzaG91bGQgYmUgdmFsaWQgVVRGLTggZW5jb2RlZCBVbmljb2RlIGNoYXJhY3RlcnMuIElmIHRoZXkgYXJlCiAgICogbm90LCB0aGUgcmVjZWl2aW5nIGVuZCB3aWxsIGNsb3NlIHRoZSBjb25uZWN0aW9uLgogICAqLwogIHZvaWQgYWRkVXRmOFRleHQoTGlzdDxpbnQ+IGJ5dGVzKTsKCiAgLyoqCiAgICogR2V0cyB0aGUgdXNlciBhZ2VudCB1c2VkIGZvciBXZWJTb2NrZXQgY29ubmVjdGlvbnMuCiAgICovCiAgc3RhdGljIFN0cmluZyBnZXQgdXNlckFnZW50ID0+IF9XZWJTb2NrZXRJbXBsLnVzZXJBZ2VudDsKCiAgLyoqCiAgICogU2V0cyB0aGUgdXNlciBhZ2VudCB0byB1c2UgZm9yIFdlYlNvY2tldCBjb25uZWN0aW9ucy4KICAgKi8KICBzdGF0aWMgc2V0IHVzZXJBZ2VudChTdHJpbmcgdXNlckFnZW50KSB7CiAgICBfV2ViU29ja2V0SW1wbC51c2VyQWdlbnQgPSB1c2VyQWdlbnQ7CiAgfQp9CgpjbGFzcyBXZWJTb2NrZXRFeGNlcHRpb24gaW1wbGVtZW50cyBJT0V4Y2VwdGlvbiB7CiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CgogIGNvbnN0IFdlYlNvY2tldEV4Y2VwdGlvbihbdGhpcy5tZXNzYWdlID0gIiJdKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIldl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8Yn8gL2J/IbOifuY74n/hFOJ/4RSif+E/In/I4n/SIn/hrqJ+5jyigaDxon7mPWKCACCLobSigqY8YoLheSKC4XliguD1YoLwACR24oPhtOKCpjvihGEU4oRhFKKEYT8ihEjihFIihGGuooKmPKKGIPGigqY9YoaAIIuhteKHJjxih2D1oodgJaKHJjviiAjiiBIihyY8oojg8aKHJj1iiUAgi6G2IonmPGKKIXbiiiD1YoowACR24orhtOKJ5jvii2EU4othFKKLYT8ii0jii1Iii2GuoonmPKKNIPGiieY9Yo2AIIuhtuKOJjxijmF24o5g9WKOcAAkduKPIbTijiY74o+hFOKPoRSij6E/Io+I4o+SIo+hrqKOJjyikWDxoo4mPWKRwCCLobeikmY8YpKheqKSoU4ikqF64pKwACR24pOhtOKSZjyilCE74pQg8aKSZjvilOEU4pThFKKU4T8ilMjilNIilOGuopJmPWKWgCCLobjilyY8YpdhuSKXYWFilyY74pghFOKYIRSimCE/IpgI4pgSIpghrqKXJjyimeDxopcmPWKaQCCLobqimuY8YpshuuKa5jyim6EnYpug8aKa5jvinGEU4pxhFKKcYT8inEjinFIinGGuoprmPWKeACKeISxgi6G7op7mPGKfIKUinuY74p+hFOKfoRSin6E/Ip+I4p+SIp+hrqKe5jyioWDxop7mPWKhwCCLobxiomY8YqKgm+KiZjvioyEU4qMhFKKjIT8ioyGuoqMhruKiZj1ipIAgi6CBoqUmPGKlYb0ipWEhIqVhvWKlYb2ipWG94qVhviKlJjvipyG+oqchKCKnIb8ipyG/oqchFKKnIRTipyEWYqchwGKnIcCipSY8oqmglqKpoRfipSY84qpglqKlJj1iqsAgi6HBIqtmPGKroG9iq6B+4quhwWKrZjvirIjiq2Y9Yq0AIIuhwaKtpjyireD7Iq3humKtpjvirqHB4q6hwiKuoJoiraY9Yq+AIIuhwmKwJjvisGHCorBhwuKwYcNisGHDorBhw+KwYcQisGHEYrBhxKKwYcTisGHFIrBhxWKwYcWisGHGYrAmPWKzwCCLocaitGY8orShxuK0oQ5itGY74rVhxyK1YcditWHHorVhx+K1YcgitWHIYrVhyKK1YcjitWHJIrVhyWK1YcWitWHGYrRmPWK4gCC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folcjH6JXox+iWGMfolkjH6JZox+iWmMfolsjH6JbYx+iXCMfolxjH6Jc4x+iXWMfol5jH6Jeox+iX6MfogJjH6Jf4x+iYGMfomEjH6JhYx+iYmMfomKjH6IBYx+iYuMfogGjH6JjIx+iY+MfomSjH6JlYx+iZiMfomajH6ICox+iZyMfomfjH6JoYx+iaSMfomnjH6Jqox+ia6MfomvjH6Js4x+ibSMfom4jH6JuYx+ibuMfom8jH6JwIx+icGMfonFjH6Jxox+icmMfonMjH6Jz4x+idGMfonTjH6J1ox+idiMfonajH6J3Ix+id+MfongjH6J4ox+ieSMfonmjH6J54x+iemMfonrjH6J7ox+ifGMfonyjH6J9ox+ifeMfon7jH6J/Ix+igCMfooBjH6KBIx+igWMfooIjH6KCYx+ig6MfooPjH6KE4x+ihSMfooXjH6KGIx+ihuMfoocjH6KHox+iiGMfoojjH6KJox+iiiMfoorjH6KLYx+ijCMfoo0jH6KNYx+ijeMfoo5jH6KO4x+ij2Mfoo/jH6KQYx+ikOMfopFjH6KR4x+ikqMfopMjH6KTox+ilCMfopTjH6KVYx+iliMfopajH6KXIx+il6MfopgjH6KYox+imWMfopnjH6KaYx+imuMfopujH6KcIx+inOMfop3jH6KeIx+inyMfop9jH6KgIx+ioGMfoqEjH6KhYx+ioiMfoqJjH6Ki4x+io6MfoqSjH6Kk4x+ipiMfoqZjH6KnIx+ip+MfoqkjH6KpYx+iqmMfoqqjH6Kr4x+irCMfoqyjH6KtYx+irmMfoq6jH6Kvox+ir+MforEjH6KxYx+ismMforKjH6Kzox+is+MforRjH6K04x+iteMforYjH6K3Ix+it2MforfjH6K4Yx+iuWMformjH6K6Ix+iuqMforujH6K74x+ivOMfor0jH6K94x+ivqMfor8jH6K/4x+iwGMfosEjH6LBox+iwmMfosNjH6LDox+ixGMfosSjH6LFYx+ixiMfoscjH6LHYx+ix+MfosijH6LJIx+iyaMfospjH6LLIx+iy6MfoswjH6LMox+izSMfos4jH6LOYx+iz2Mfos+jH6LQYx+i0OMfotHjH6LSIx+i0qMfotNjH6LT4x+i1GMfotTjH6LVYx+i1eMfotZjH6LW4x+i16MfotfjH6LYYx+i2OMfotljH6LZox+i2mMfotrjH6Lbox+i3CMfotyjH6LdIx+i3eMfot5jH6Le4x+i36MfouAjH6Lgox+i4WMfouHjH6LiYx+i4uMfouOjH6LkIx+i5KMfouUjH6Llox+i5uMfoucjH6LoIx+i6GMfoukjH6LpYx+i6eMfouqjH6Lrox+i6+MfouzjH6LtIx+i7iMfou5jH6LvYx+i76MfovAjH6Lw4x+i8aMfovHjH6Ly4x+i8yMfovQjH6L0Yx+i9OMfovUjH6L1ox+i9iMfovajH6L3Yx+i+CMfovijH6L5Ix+i+eMfovqjH6L64x+i+6MfovxjH6L84x+i/WMfov5jH6L+ox+i/yMfov+jH6MAIx+jAKMfowGjH6MB4x+jAqMfowLjH6MDox+jA+MfowSjH6ME4x+jBWMfowYjH6MGox+jByMfowejH6MIYx+jCSMfowljH6MKIx+jCqMfowtjH6MLox+jDCMfowyjH6MNox+jDeMfow5jH6MO4x+jD6Mfow/jH6MQYx+jESMfoxGjH6MSYx+jE2MfoxOjH6MUox+jFOMfoxXjH6MWIx+jFyMfoxdjH6MYox+jGOMfoxmjH6MZ4x+jGuMfoxsjH6McIx+jHGMfox0jH6MdYx+jHiMfox5jH6MfIx+jH2MfoyAjH6Mgox+jIaMfoyHjH6Mi4x+jIyMfoyOjH6MkIx+jJOMfoyUjH6Ml4x+jJiMfoyajH6MnIx+jJ6MfoygjH6Moox+jKSMfoymjH6MqIx+jKqMfoysjH6Mrox+jLCMfoyyjH6MtIx+jLaMfoy4jH6Muox+jLyMfoy+jH6MwIx+jMKMfozEjH6MyIx+jMmMfozNjH6Mzox+jNKMfozTjH6M14x+jNiMfozbjH6M3ox+jOGMfozkjH6M5ox+jOiMfozqjH6M7Yx+jO+MfozxjH6M9Ix+jPeMfoz6jH6M+4x+jP6Mfoz/jH6NAYx+jQSMfo0JjH6NCox+jQ6Mfo0PjH6NFIx+jRWMfo0ZjH6NGox+jR6Mfo0fjH6NIox+jSWMfo0pjH6NKox+jSyMfo0vjH6NNIx+jTWMfo04jH6NOYx+jT2Mfo0+jH6NQYx+jUKMfo1GjH6NR4x+jUmMfo1MjH6NTox+jVGMfo1TjH6NVYx+jVeMfo1ZjH6NXYx+jV6Mfo1hjH6NYox+jWaMfo1njH6Na4x+jWyMfo1wjH6NcYx+jXSMfo11jH6NeIx+jXuMfo1+jH6NgYx+jYSMfo2HjH6NiYx+jYuMfo2PjH6NkIx+jZKMfo2UjH6Nlox+jZmMfo2cjH6Nn4x+jaGMfo2jjH6NpYx+jaeMfo2qjH6NrIx+ja6Mfo2wjH6Nsox+jbSMfo22jH6NuIx+jbuMfo28jH6Nvox+jcCMfo3EjH6NxYx+jciMfo3JjH6NzIx+jc2Mfo3PjH6N0Yx+jdOMfo3VjH6N14x+jdmMfo3bjH6N3Yx+jeGMfo3ijH6N5Ix+jeeMfo3pjH6N7Ix+je+Mfo3yjH6N9Yx+iAuMfo32jH6N+Ix+jfuMfo3+jH6OAIx+jgKMfo4FjH6OBox+jgmMfo4KjH6ODIx+jg6Mfo4QjH6OEox+jhSMfo4WjH6OGYx+jhqMfo4djH6OHox+iMuMfo4fjH6OIYx+jiOMfo4ljH6OJ4x+jimMfo4rjH6OLox+ji+Mfo4xjH6OM4x+iAeMfo40jH6ONox+jjiMfo46jH6OPIx+jj6Mfo5AjH6OQox+jkSMfo5GjH6IDIx+jkiMfo5KjH6OTIx+jk6Mfo5QjH6OUox+jlaMfo5XjH6OWox+jlyMfo5ejH6OYYx+jmWMfo5mjH6OaIx+jmqMfo5tjH6OcIx+jnOMfo52jH6OeYx+jnyMfo5/jH6Ogox+joWMfo6IjH6Oi4x+jo6Mfo6RjH6OlIx+jpaMfo6YjH6OnIx+jp2Mfo6hjH6Ooox+jqSMfo6mjH6OqYx+jqqMfo6tjH6Orox+jrOMfo60jH6Otox+jriMfo66jH6OvIx+jr+Mfo7AjH6OxYx+jsaMfo7JjH6Oyox+js2Mfo7OjH6O04x+jtSMfo7YjH6O2Yx+jtuMfo7ejH6O4Yx+juOMfo7mjH6O54x+juqMfo7rjH6O7Yx+ju+Mfo7zjH6O9Ix+jviMfo75jH6O/Ix+jv6Mfo8CjH6PA4x+jwWMfo8HjH6PCYx+jwuMfo8PjH6PEIx+jxOMfo8UjH6PF4x+jxiMfo8ajH6PHYx+jyCMfo8hjH6PJYx+jyaMfo8pjH6PKox+jy6Mfo8vjH6PMYx+jzOMfo84jH6POYx+jz2Mfo8+jH6PQ4x+j0SMfo9GjH6PSIx+j0uMfo9OjH6ICIx+j0+MfoIRjH6PUIx+j1WMfo9WjH6PWox+j1uMfo9djH6PYIx+j2SMfo9ljH6Paox+j2uMfo9tjH6PcIx+j3KMfo91jH6PeIx+j3qMfo9+jH6Pf4x+j4OMfo+EjH6PiYx+j4qMfo+OjH6Pj4x+j5OMfo+UjH6PmIx+j5mMfo+djH6Pnox+j6CMfo+ijH6Ppox+j6eMfo+qjH6PrIx+j66Mfo+xjH6PtIx+j7WMfo+4jH6Puox+j7yMfo++jH6Pwox+j8OMfo/GjH6Px4x+j8uMfo/MjH6Pz4x+j9CMfo/VjH6P1ox+j9iMfo/ajH6P3Ix+j96Mfo/hjH6P4ox+j+SMfo/njH6P6Yx+j+uMfo/ujH6P74x+j/KMfo/zjH6P9Yx+j/eMfo/5jH6P+4x+j/6Mfo//jH6QAox+kAOMfpAGjH6QB4x+kAuMfpAMjH6QD4x+kBKMfpAUjH6QFox+kBiMfpAbjH6QHYx+kB+MfpAijH6QI4x+kCWMfpAnjH6QKYx+kCyMfpAujH6QMYx+kDOMfpA1jH6QN4x+kDqMfpA9jH6QP4x+kEKMfpBEjH6QRox+kEmMfpBLjH6IDYx+kE2MfpBPjH6QU4x+kFSMfpBXjH6QWIx+kFyMfpBdjH6QYIx+kGGMfpBkjH6QZ4x+kGmMfpBsjH6Qb4x+kHCMfpB0jH6QdYx+kHmMfpB6jH6QfYx+kH6MfpCAjH6Qgox+kIWMfpCIjH6QjIx+kI2MfpCPjH6Qkox+kJWMfpCWjH6QmYx+kJqMfpCdjH6Qnox+kKGMfpCijH6QpYx+kKeMfpCrjH6QrIx+kLCMfpCxjH6Qtox+kLeMfpC8jH6QvYx+kMGMfpDCjH6Qxox+kMeMfpDLjH6QzIx+kM+MfpDRjH6Q1Yx+kNaMfpDYjH6Q24x+kOCMfpDhjH6Q5Yx+kOaMfpDqjH6Q64x+kO6MfpDvjH6Q84x+iA6MfpD0jH6ID4x+kPaMfogQjH6Q+Ix+kPqMfpD9jH6Q/ox+kQGMfpECjH6RBIx+kQeMfpELjH6RDIx+kRCMfpERjH6RE4x+kRWMfpEXjH6RGYx+kRyMfpEdjH6RH4x+kSKMfpEljH6RJox+kSiMfpErjH6RLYx+kTCMfpEyjH6RNIx+kTaMfpE4jH6RPIx+kT2MfpFBjH6RQox+kUWMfpFGjH6RSox+kUuMfpFOjH6RT4x+kVSMfpFVjH6RWIx+kVmMfpFdjH6RXox+kWKMfpFjjH6RZYx+kWmMfpFrjH6Rbox+kXCMfpFzjH6RdYx+kXiMfpF6jH6RfYx+kX+MfpGBjH6RhIx+kYWMfpGHjH6Riox+kYyMfpGOjH6Rkox+kZOMfpGVjH6RmIx+kZuMfpGcjH6RoIx+kaGMfpGljH6Rpox+kamMfpGqjH6RrIx+ka+MfpGzjH6RtIx+kbiMfpG5jH6Ru4x+kb6MfpHAjH6Rw4x+kcaMfpHIjH6RzIx+kc2MfpHRjH6R0ox+kdSMfpHXjH6R2ox+kdyMfpHgjH6R4Yx+keOMfpHmjH6R6Ix+keqMfpHsjH6R7ox+kfGMfpHyjH6R9Ix+kfaMfpH6jH6R+4x+kf6MfpH/jH6SA4x+kgSMfpIIjH6SCYx+kg2MfpIOjH6SEYx+khOMfpIWjH6SGIx+khuMfpIdjH6SIox+kiOMfpIljH6SKIx+kiqMfpIsjH6SLox+kjCMfpIyjH6SNIx+kjaMfpI5jH6SPYx+kj6MfpJCjH6SQ4x+kkWMfpJIjH6SS4x+kkyMfpJOjH6SUIx+klKMfpJUjH6SV4x+kliMfpJcjH6SXYx+kmGMfpJijH6SZYx+kmeMfpJrjH6SbIx+km+MfpJwjH6SdIx7mO+QnoJEkJ6SdZCewACR5ZChkneQoZJ7kKGSfpChkoCQoZKLkKGSj5ChkpeQoZKbkKGSoJChkqOQoZKlkKGSqJChkqyQoZKvkKGSsZChkrSQoZK3kKGSupChkryQoZLAkKGSwpChksSQoZLKkKGSzZChks+QoZLRkKGS05ChktSQoZLWkKGS15ChktmQoZLakKGS4JChkuOQoZLlkKGS55ChkuqQoZLvkKGS8pChkvaQoZL5kKGS/JChkv+QoZMBkKGTBJChkwWQoZMIkKGTC5Chkw6QoZMQkKGTE5ChkxWQoZMXkKGTGZChkxyQoZMfkKGTIZChkyOQoZMmkKGTKZChkyyQoZMukKGTNJChk0SQoZNGkKGTSZChk0uQoZNNkKGTT5Chk1GQoZNVkKGTVpChk1iQoZNZkKGTXJChk16QoZNgkKGTYpChk2WQoZNokKGTapChk2yQoZNukKGTcJChk3OQoZN2kKGTeJChk3qQoZN9kKGTf5Chk4GQoZODkKGThZChk4eQoZOJkKGTi5Chk42QoZOQkKGTlJChk5iQoZOakKGTnJChk5+QoZOhkKGTo5Chk6WQoZOokKGTqpChk6yQoZOukKGTsZChk7SQoZO6kKGTvpChk8GQoZPEkKGTxpChk8iQoZPKkKGTzJChk8+QoZPRkKGT1JChk9aQoZPYkKGT2pChk92QoZPfkKGT45Chk+WQoZPokKGT65Chk+6QoZPxkKGT9ZChk/eQoZP8kKGT/pChk/+QoZQAkKGUAZChlAOQoZQHkKGUCZChlA2QoZQPkKGUEZChlBSQoZQakKGUHJChlB+QoZQhkKGUJJChlCaQoZQpkKGUK5ChlC2QoZQukKGUMJChlDKQoZQ1kKGUN5ChlDmQoZQ7kKGUPZChlECQoZRCkKGURZChlEeQoZRIkKGUS5ChlE2QoZRPkKGUUZChlFSQoZRWkKGUWJChlFqQoZRbkKGUXpChlGCQoZRikKGUZJChlGaQoZRpkKGUbJChlG6QoZRwkKGUc5ChlHWQoZR6kKGUfJChlH+QoZSDkKGUhZChlIeQoZSLkKGUjZChlJSQoZSWkKGUmJChlJuQoZSekKGUoJChlKKQoZSkkKGUp5ChlKmQoZSrkKGUrZChlLCQoZSykKGUtJChlLeQoZS5kKGUwZChlMeQoZTKkKGUzJChlM6QoZTTkKGU15ChlNqQoZTbkKGU3ZChlOCQoZTikKGU5JChlOaQoZTokKGU6pChlOyQoZTwkKGU8pChlPWQoZT4kKGU+5ChlP6QoZUAkKGVApChlQWQoZUHkKGVCZChlQuQoZUOkKGVEJChlRKQoZUVkKGVF5ChlRqQoZUekKGVIpChlSWQoZUnkKGVKZChlSuQoZUskKGVLpChlTKQoZU0kKGVN5ChlTmQoZU8kKGVPpChlT+QoZVBkKGVRJChlUaQoZVIjHuH05GvmPGRsIC9kbAnkbCI5ZGwiOaRsIfYka+Y75G2I5GvmPWRuACMe4gEkbqY8ZG7gpeRuyKRu4jWkbtbkbqY75HAgl+RwIg0kbqY9ZHDAIx7iOeRxZjxkcYikcaI1pHFmPKRyVuRyYKXkcWY75HMgl+RzIg0kcWY9ZHPAIx7iOiR0ZjxkdKI6ZHSiOqR0og9kdGY9ZHWAIx7gimR2JjxkdmArJHZh3GR2WGR2YjrkdiY8pHegpeR3iKR3ojWkd5bkdiY75Hjgk+R44gvkdiY9ZHmAIx7h9WR6JjxkemI7JHpiCyR6YH7kemHBZHph9iR6YfckeiY8pHwgpeR8CKR8IjWkfBbkfCArJHwh3GR8GGR8IfWkfCH15HomO+R+ojwkfqIwJHomPWR/QCMe4fUkf+Y8ZIAh9aSAIfXkgCH2JIAgKyR/5j0kgWI85H/mO+SB4jwkgeIwJH/mPWSCgAAwACR5pIMmPGSDZVPkg2VVpINlVeSDZVckgyCEpISmPGSEyeSE8AAkeaSFSiSEymSE4JXkhOBx5ITlU2SE4HwkhOVTpITgzWSEpjvkh4jkhKY9ZIgAADAAJHnkiKY75Ijh/SSI4ITkiKVZpImmPGSJ4GCkieCWZInh/WSJ4f2kieHhZInlWeSJpj1ki4AAMAAkeiSMJjwkjGVkZIwmPGSM5WZkjCY75I1lZqSNZWfkjXAAJHokjiVoZIwlZOSOpjykjuVlJI7hymSOpjzkj6VlZI6mO+SQJWXkjqY9ZJCAJIwlZiSRJjxkkWVkpJFhymSRZWUkkSY9ZJJAADAAJHpkkuY8ZJMlbOSS5jvkk6CaZJOlbaSTpW3kkuVppJSmPKSU4JJklOVqZJThTuSU4U4klKY75JYlauSWJWskliVrZJYlbCSUpj1kl2Vp5JdAJJdlaiSS5WykmGY8ZJigkmSYoU4kmGY9ZJlAADAAJHqkmeY75JolcmSZ4IYkmqY8ZJrepJrglGSa5XDkmuVxJJrlcWSa5XGkmqY9ZJyAJJnlceSdJjxknWVyJJ1glmSdZVwknSY9ZJ5AADAAJHrknuY75J8ghmSfIQGknyCGgDAAJHskoCHspKBmPGSgpXMkoGY75KEh+uSgZj1kobAAJHskoeAtZKAlc6SiZjxkoqArJKJmPKSjIPGkomY75KOSJKOg6CSjofsko6H7ZKOwACR7JKTlc+SiZj1kpUAkoCCJ5KXmPGSmICskpeY8pKag8aSl5jvkpxIkpyDoJKch+ySnIftkpeY9ZKhAADAAJHtkqOY75KkgiiSpJXYkqSV3wDAAJHukqiY75KpgiqSqZYLkqmWDJKohRKSrZjxkq4nkq7AAJHukrAokq4pkq5Wkq6V9pKulfeSrpX4kq6V+ZKulfqSrpX7kq6V/JKulf2SrpX+kq6V/5KulgCSrpYBkq6WApKulgOSrpYEkq6WBZKuh+KSrpYGkq6WB5KulgiSrZjvksgjkq2Y9ZLKAADAAJHvksyCK5LNmPGSzieSzsAAke+S0CiSzimSzoV+ks6Ff5LOhYCSzoWBks2Y75LXI5LNmPWS2QAAwACR8JLbmPGS3JYTktyWFJLclhWS3II6ktyCN5LclhaS3JYXktyCM5LclhiS3JYZktyCNZLcgjaS3IIuktyWGpLclhuS3JYcktyWHZLclh6S3JYfktyWIJLcliGS3JYiktyWI5LcliSS3IIvktyWJZLcliaS3JYnktyWKJLclimS3JYqktyWK5LcliyS3IIwktyWLZLcli6S3JYvktyWMJLcljGS3JYyktyWM5LcgjGS3JY0ktyWNZLcljaS3JY3ktyWOJLcljmS3JY6ktyWO5LcljyS3JY9ktyWPpLclj+S3JZAktyWQZLclkKS3JZDktyWRJLclkWS3JZGktyWR5LclkiS3JZJktyWSpLclkuS3II7ktyWTJLcgjKS3JZNktyWTpLcgjyS3JZPktyCPZLcllCS3JZRktyWUpLcllOS3JZUktyCPpLcllWS3JZWktyWV5LclliS3JZZktyWWpLclluS3JZcktyWXZLcll6S3JZfktyCP5LclmCS3JZhktyWYpLclmOS3JZkktyWZZLcgkCS3JZmktyWZ5LclmiS3JZpktyCNJLclmqS3II4ktyCOZLclmuS3JZsktyWbZLbmO+TS5Zuk0uWcJNLlnGTS5Zzk0uWdJNLlnUAwACR8ZNSgkGTU5jyk1SD75NUg/CTVFyTVIFVk1SDt5NUg8aTVGGTVIDDk1SDHpNUgeqTU5jvk1+D7ZNfhDGTX4Ctk1+Aq5NfloCTX5aBk1+WgpNfloSTX4P9k19Ik18jk1+WfZNfgxyTX5aLk1+B1pNflo2TX5aOk1+ElZNflo+TX4Nfk1+WkpNflpSTX1iTX5aVk1+WlpNflpeTX5aYk1+WmZNflpqTX5Vxk1+Wm5NfgaWTX8AAkfGTgJaMk1OY9ZOCAJNSgkKThJjxk4Vhk4WBVZOFwACR8ZOIlp2ThJj0k4oAk4SY75OMhDCTjICtk4yEJ5OMgkaThJjyk5GDHgDAAJHyk5OY8JOUlqGTk5Z4k5aY8ZOXwACR8pOYiO+TmJajk5aY8pObXpOWmO+TnV2Tlpj1k58Ak5OWpJOhmPGTosAAkfKTo5alk6OWo5OjiO+ToZjyk6dek6GY75OpXZOhmPWTqwCTk5Z5k62Y8ZOuwACR8pOvlqWTr5ajk62Y8pOyXJOtmPWTtACTk4JDk7aY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lUiERZVIl+SVSIcWlUiHGZVIl+iVSJfrlUiX6ZVIl/uVSJf/lUiXuZVImAOVSJfnlUiHEZVIl7uVSJgHlUiYCpVIl7qVSIcTlUiEp5VImA2VSJgOlUiYE5VIhMOVSJgPlUiYFpVIhMqVSJgYlUiYDJVIhPuVSIU1lUiFU5VIhTCVSIU8lUiFXZVIhWCVSIVilUiFZJVIhWaVSIVplUiFeJVIhZCVSIWTlUiFlZVIhaCVSIWilUiFrpVIhbCVSIWklUiFppVIhbKVSIW0lUiFvpVIhcCVSIWolUiFwpVIhcSVSIW4lUiFupVIhcuVSJgglUiF0JVIhdWVSIXZlUiF3pVIheKVSIXolUiF7pVIhfKVSIX2lUiF+ZVIhfuVSJe3lUiF/pVIl7iVSIYAlUiGApVIhgWVSIYHlUiGCZVIhguVSIYNlUiGD5VIhhGVSIYTlUiGFZVIhhiVSIYblUiGIZVIhiOVSIXIlUiGJpVIhimVSJgnlUiGK5VIhi+VSIYylUiGNJVIhjiVSIY6lUiGHpVIhjyVSIY+lUiGQJVIhkSVSIZIlUiGS5VIhlCVSIZSlUiGVJVIhlaVSIZZlUiGXZVIhmCVSIZmlUiGb5VImB2VSJgXlUiYKpVIhnGVSIaQlUiGiZVIhoyVSIaOlUiGlJVIhQOVSIaalUiGqJVIhqyVSIaklUiGtZVIhQaVSJgtlUiYL5VImDGVSJgzlUiYNZVImDeVSJg5lUiYO5VImD2VSJg/lUiHJ5VIhsGVSIbClUiE/ZVIhTaVSIbHlUiGyJVIhTGVSIbflUiG4JVIhsSVSIbFlUiEuJVIhLuVSIbZlUiG2pVIhtyVSIbdlUiG1JVIhtWVSIZ2lUiGvpVIhr+VSIVUlUiHAJVIhT2VSIbLlUiGzJVIhs+VSIbQlUiG5ZVIhuaVSIbslUiG7ZVIhu+VSIbwlUiGpZVIhvKVSIbzlSSY9ZYzAJUhmGiWNZjxljYnljaYaZY2mGqWNZjvljqYK5Y6l/WWOpf2ljqYG5Y6S5Y1mPWWQACVIZhslkKY8ZZDJ5ZDmGqWQpjvlkaX9JZGBpZGS5ZCmPWWSgCVIZhtlkyY8ZZNJ5ZNmGqWTJjvllCX9JZQBpZQS5ZMmPWWVACVIZhvllaY8ZZXl4WWV4PVlleYcJZXmHGWV8AAkfuWXJhyllaY75Zel66WXpgzll5LllaY9ZZiAJUhmHWWZJjxlmUnlmWYapZkmO+WaJf0lmgGlmhLlmSY9ZZsAJUhmHiWbpjxlm8nlm6Y75Zxl66WcUuWbpj1lnQAlSGYeZZ2mPGWdyeWdpjvlnmXrpZ2mPWWewCVIZh6ln2Y8ZZ+mHuWfph8ln6YfZZ+wACR+5aCl5GWgph+loKYgJaCmIGWfmGWfph/ln2Y8paJg2KWfZjvlouYJpaLl6KWi5eklouXpZaLl6OWi4RGlouXoZZ9mPWWkwCVIZiJlpWY8ZaWhwOWlpfzlpWY9ZaZAJUhmIqWm5jxlpyEJpabmO+WnlaWnoKMlpuY9ZahAJUhmIuWo5jvlqSYjJajmPWWpgAAwACR/JaomJCWqZjxlqqC55aqmJGWqiKWqk6WqZjvlq8jlqmY9ZaxAJaomJOWs5jxlrSB5ZazmO+WtiOWs5j1lrgAlqiYl5a6mPGWuyKWupj1lr0AlqiYmJa/mPWWwACWqJiZlsKY8ZbDmJqWw5iblsOYnJbDmJ2Ww5ielsOYn5bDmKCWw5ihlsOXkpbDmKKWw5ijlsKY9ZbPAJaoh/6W0ZjxltKYpJbSmKWW0pimltKYp5bSmKiW0oLnltLAAJH8ltmYqZbZmKqW2ZirltmYrJbZmK2W2ZiultmYr5bZmLCW2ZixltmYs5bZmLSW2ZiAltmYgZbSmLKW0ohRltGY75bpgcSW6YcclumHHpbphx+W6Zi2lumHHZbphyCW6Zi3lunAAJH8lvKYu5bymLyW8pjRlvKY05bymNSW8pjWlvKY3JbymOeW8pj/lvKY6JbymOaW8pkZlvKZGpbymRuW8plHlumYvZbpmMGW6ZjClumYxpbpmMuW6YcilumYzJbpmM2W6ZjOlumY0JbpmNmW6YQ8lumEPpbpmOmW6Zj3lumZCJbpmQeW6YchlumZEJbpmMWW6ZkRlumYx5bpmRKW6ZkLlumZFJbphyOW6ZkKlumZIZbpmSiW6ZkllumZKZbpmRyW6ZkdlumZHpbpmTGW6ZkylumZH5bpmS+W6ZkglumZMJbpmTaW6Zk6lumHJZbpmUqW6Zk1lumZS5bpmU2W6ZkjlumZM5bpmMSW6ZlSlumZVpbpmVSW6ZlXlumZRpbpmUGW6ZlblumZXJbpmV6W6ZlYlumZWZbpmS6W6ZktlumZYJbpmTyW6ZlhlumZYpbpmVCW6YcklumZKpbpmWeW6Zk/lumZaZbpmWqW6ZkrlumZX5bpmUCW6ZlTlumZIpbRmPKXUZi1ltGY9ZdTAJaomWuXVZjxl1bAAJH8l1eZbJdVmO+XWcAAkfyXWpi7l1qZcJdamLyXWYcWl1mHGZdZhySXWZkKl1mZHJdZmR2XWZkfl1mZL5dZmSCXWZkwl1mZNpdZhyWXWZjEl1mZP5dZmWqXWZlTl1mZQZdZmSiXWZkhl1mZKZdZmVuXWZlnl1mZLpdZhyOXVZjyl3aHG5d2hDmXVZj1l3kAlqiYiZd7mPGXfIcDl3yG6Zd7mPWXfwAAwACR/ZeBmPGXgpqgl4GY75eEmqGXhJqil4Sao5eEmqSXhJqll4SappeEmqeXhJqol4SaqZeEmqqXhJqrl4GZdJeQmPGXkSeXkYCrl5CY75eUmXWXkJjyl5aDKZeQmPWXmACXgZl3l5qY8ZebgymXmpj1l50Al4GZeJefmPGXoCeXoICrl5+Y75ejmXWXn5jyl6WDKZefmPWXpwCXgZl5l6mY8ZeqgymXqZjvl6yZdZesmDOXrJg1l6mY9ZewAJeBmXqXspjxl7OZfJezmX2Xs4Q1l7KY75e3mX6Xspj1l7kAl4GZhZe7mPGXvIZCl7yElJe8hIiXvISJl7yG9Ze8hMWXvJmMl7yZjpe8mZCXvJmRl7yZk5e7mO+XyJmVl8iZlpfImZeXyJmYl8iZmZfImZqXyJmbl8iZnJfImZ2XyJmel8iZopfImZ+Xu5j1l9UAl4GZpZfXmO+X2Jmml9iZqJfYmamX15j1l9wAl4GZqpfemPGX35mrl9+EQJffmayX34b3l9+ZrZffg+KX34cFl9+ETJffhE2X34ROl9+Zrpffma+X35mwl9+CUpffmbGX35mzl96Y75fwmbSX8Jm1l/CZtpfwmbeX8Jm4l/CZuZfwmbyX8Jm9l/CHWJfwmb+X8JnBl/CHV5fwmcOX8JnEl/CZxpfwmceX8JnJl/CZypfwhEmX8JnYl/CZ1ZfwmA6X8IRFl/CXspfwmemX8IKOl/CZ6pfwmeuX8Jnsl/CZ5Jfwme2X8JnSl/CZ7pfwme+X8IcVl/CX2JfwmeaX8Jn3l/CZ+JfwmfqX8IUDl/CGpJfwmf6X8IcTl/CZzZfwmgGX8JoGl/CaCZfwmhaX8JoVl/CaBZfwmgOX8JoEl/CIeJfwmfyX8Joel/CZ5ZfwmiGX8Jofl/CZ/ZfwmiiX8Jopl/CaFJfwmBiX8JgMl/CEp5fwhTCX8IVTl/CFNZfwhTyX8IT7l/CFBpfwhMqX8IWQl/CFvpfwhaiX8IXAl/CFwpfwhcSX8IXLl/CF0JfwhdWX8JpOl/CaRJfwhdmX8IXel/CF4pfwheiX8IXul/CF8pfwhfaX8IYFl/CGB5fwhgmX8IYLl/CGDZfwhg+X8IYRl/CGE5fwhhWX8IYYl/CGG5fwhfmX8IX7l/CF/pfwhgCX8IYCl/CGIZfwhiOX8IXIl/CGJpfwhimX8IS7l/CEuJfwmDeX8IWTl/CFlZfwmkWX8JpNl/CFoJfwhaKX8IWul/CFsJfwhaSX8IWml/CFspfwhbSX8IYrl/CaYJfwhi+X8IYyl/CGNJfwhjiX8IY6l/CGPJfwhj6X8IZAl/CGRJfwhkiX8IZLl/CGUJfwhlKX8IZUl/CGVpfwhlmX8IZdl/CGYJfwhmaX8IZvl/CGcZfwmB2X8IW4l/CFupfwmD+X8IVdl/CFYJfwhWKX8IVkl/CFZpfwhWmX8Jg5l/CaHJfwmn6X8IaJl/CGjJfwho6X8IaUl/CGmpfwhqiX8Iasl/CGtZfwl7GX8IYel/CYL5fwhtmX8Ibcl/CG1Jfwht+X8Ibll/CGy5fwhuyX8Ibyl/CYLZfemPWYqACXgZqKmKqY8ZirlcyYq5qLmKuajJirmo2Yq5qOmKuaj5irmpCYq5qRmKuakpirmpOYq5qUmKualZirmpaYq5qXmKuamJirmpmYq5qamKuam5irmpyYq5qdmKqY75jAmp6YwJqfmMCYN5jAhZCYwIW+mMCFwJjAhaiYwIXCmMCFxJjAhcuYwIXQmMCF1ZjAhdmYwIXymMCF9pjAhgWYwIYHmMCGCZjAhguYwIYNmMCGD5jAhhGYwIYTmMCGGJjAhhuYwIX5mMCF+5jAhf6YwIYAmMCGApjAhZOYwIWVmMCFoJjAhaKYwIWumMCFsJjAhaSYwIWmmMCFspjAhbSYwIYhmKqY9ZjqAADAAJH+mOyarpjtmO+Y7pg3mO6YMZjuhZCY7oWTmO6FlZjuhaCY7oWimO6FpJjuhaaY7oWumO6FsJjuhbKY7oW0mO6FvpjuhaiY7oXAmO6FwpjuhcSY7oXLmO6F0JjuhdWY7oXZmO6F3pjuheKY7oXomO6F7pjuhfKY7oX2mO6GBZjuhgeY7oYJmO6GC5juhg2Y7oYPmO6GEZjuhhOY7oYYmO6GG5juhh6Y7oX5mO6F+5juhf6Y7oYAmO6GApjuhiGY7oYjmO6FyJjuhiaY7oYpmO2Y9ZkgAJjsmq+ZIpjvmSOYP5kjhiuZI4YvmSOGMpkjhjSZI4Y4mSOGOpkjhjyZI4Y+mSOGQJkjhkSZI4ZImSOGS5kjhlKZI4ZUmSOGVpkjhlmZI4ZgmSOGZpkjhm+ZI4ZxmSKY9Zk5AJjsmrCZO5jvmTyYO5k8hTWZPIVTmTyFMJk8hTyZO5j1mUIAmOyasZlEmO+ZRZg5mUWFXZlFhWCZRYVimUWFZJlFhWaZRYVpmUSY9ZlNAJjsmrKZT5jvmVCHJ5lQmDeZUJgxmVCFkJlQhZOZUIWVmVCFoJlQhaKZUIWkmVCFpplQha6ZUIWwmVCFsplQhbSZUIW+mVCFqJlQhcCZUIXCmVCFxJlQhcuZUIXQmVCF1ZlQhdmZUIXemVCF4plQheiZUIXumVCF8plQhfaZUIYFmVCGB5lQhgmZUIYLmVCGDZlQhg+ZUIYRmVCGE5lQhhiZUIYbmVCGHplQhfmZUIX7mVCF/plQhgCZUIYCmVCGIZlQhiOZUIXImVCGJplQhimZUJg/mVCGK5lQhi+ZUIYymVCGNJlQhjiZUIY6mVCGPJlQhj6ZUIZAmVCGRJlQhkiZUIZLmVCGUplQhlSZUIZWmVCGWZlQhmCZUIZmmVCGb5lQhnGZUJg7mVCFNZlQhVOZUIUwmVCFPJlQhPuZUIUGmVCYOZlQhV2ZUIVgmVCFYplQhWSZUIVmmVCFaZlQhKeZUIS4mVCEw5lQhLuZUITKmVCGtZlQhXiZUIW4mVCFuplQhlCZUIZdmVCGFZlQhwCZT5j1mbMAmOyas5m1mO+Ztpg1mbaGiZm2hoyZtoaOmbaGkJm2hpSZtoaambaGrJm2hqSZtZj1mcAAmOyatJnCmO+Zw5g1mcOGiZnDhoyZw4aOmcOGkJnDhpSZw4aamcOGrJnDhqSZwpj1mc0AmOyatZnPmO+Z0JgvmdCGvpnQhsGZ0IbEmdCGx5nQhsuZ0IbPmdCG1JnQhtmZ0IbcmdCG35nQhuWZ0IbsmdCG75nQhvKZz5j1meAAmOyatpnimO+Z45gvmeOGvpnjhsGZ44bEmeOGx5njhsuZ44bPmeOG1JnjhtmZ44bcmeOG35nj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nlKdeZ5NmPOeVJ15nk2Y9Z5WAJ45nV2eWJjxnlmEV55YmO+eW51XnluEXp5YmPWeXgCeOZ16nmCY755hnVeeYJj1nmMAnjmVkJ5lmPGeZp17nmadfJ5mnX2eZp1+nmadf55mnYCeZp2Bnmadgp5mnYOeZp2EnmadhZ5mnYaeZp2HnmadiJ5mnYmeZp2Knmadi55mnYyeZp2Onmadj55mnZCeZp2Rnmadkp5mnZOeZp2Vnmadlp5mnZeeZp2YnmadmZ5mnZqeZp2bnmadnJ5mnZ2eZp2enmadn55mnaGeZp2inmado55mnaSeZp2lnmadp55mnaieZp2pnmadqp5mnaueZp2snmadrZ5mna+eZp2wnmadsZ5mnbKeZp2znmadtJ5mnbWeZp22nmadt55mnbieZp25nmadup5mnbueZp28nmadvZ5mnb6eZp2/nmadwJ5mncGeZp3CnmYpnmadw55mncSeZp3FnmWY8p6uncierp3Jnq6AvZ6uncqeZZjvnrMjnrPAAJIQnrWdy55lmPWetwCeOZ3NnrmY8Z66ncyeuZjvnrydV568gJaeuZjynr+dVJ6/nc6ev53PnrmY9Z7DAJ45ndCexZjxnsaClJ7Gg2Kexp1ensaDtZ7GwACSEJ7LndGexZjyns2d057Nh3GezZ3Uns2d1Z7NgpCezZ15ns2d1p7NnVSezZ3Ons2dz57NncaezZ3Yns2Ek57NnceezYIsns2dzJ7NgmuezWGezYJins2dT57NndmexZjznuOd1Z7jnU+exZjvnuadV57mnVie5p3bnuad2p7mnV+e5iOe5oCWnubAAJIQnu6d0p7FmPWe8ACeOYIVnvKY8Z7zwACSEJ70l2Ge8pjynvadVJ72gmKe8pjvnvmdV575gJae8pj1nvwAnjmd3J7+mO+e/51Xnv6Y8p8BhJOfAWGe/pj1nwQAnjmd3Z8GmPKfB2GfBpjvnwmdV58GmPWfCwCeOZ1bnw2Y8Z8OwACSEJ8PnVyfDZjynxGEk58RYZ8NmO+fFJ1Xnw2Y9Z8WAJ45kaifGJjxnxmd1Z8YmPKfG4STnxthnxiY758enVefGJj1nyAAnjmCFp8imPGfI8AAkhCfJJadnyKY9J8mAJ8mnd+fIpjynymd058ph3GfKZ3Unymd1Z8pgpCfKZ15nymd1p8pnVSfKZ3Onymdz58pncafKZ3Y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odyY76HdI6HcmPKh34JhodyY9aHhAKHLn6uh45jxoeSUjqHjmO+h5iOh45jyoeiCYaHjmPWh6gChy6B8oeyY8aHtlI6h7Jjvoe8joeyY8qHxgmGh7Jj1ofMAocugfqH1mPGh9pSOofWY76H4I6H1mPKh+oJhofWY9aH8AKHLkjeh/pjxof+SqaH+mPKiAYJhof6Y76IDI6H+mPWiBQChy5JGogeY8aIIaqIImRWiB5jvogsjogeY8qINndOiDWGiDYJhogeY9aIRAKHLkkqiE5jxohSCYaIUmRWiE5jvohcjohOY8qIZndOiE5j1ohsAocuSK6IdmPGiHoKYoh2Y76IgI6IdmPKiIoJhoh2Y9aIkAADAAJIgoiaY8aInlY+iJ6CFoiedSaInoIaiJ6CHoiegiKInoImiJ6CKoiegi6InoIyiJ6CNoiegjqInoI+iJ6CQoiegkaInoJKiJ6CToieglKInoJWiJ6CWoiegl6InoJiiJ6CZoiegmqInoJuiJ6CcoiegnaInoJ6iJ6CfoiegoKInoKGiJ6Cioiego6InoKSiJ6CloiegpqInoKeiJ6CooiegqaInoKqiJ6CroiegrKInoK2iJ6Cuoiegr6InoLCiJ6CxoiegsqInoLOiJ6C0oiegtaInoLaiJ6C3oieguKInoLmiJ6C6oiegu6InoLyiJ6C9oiegvqInoL+iJ6DAoiegwaInoMKiJ6DDoiegxKInoMWiJ6DGoiegx6InoMiiJ6DJoiegyqInoMuiJ6DMoiegzaInoM6iJ6DPoieg0KInoNGiJ6DSoieg0wDAAJIhonmY8aJ6pCiieqQponmY76J9pCqifaQlon2kLKJ9pC2ieZ9yooKY8aKDoQWig568ooOCaqKDn6Sig6EGooOHiaKDh4Wig6EHooOhCKKDh5Oig6EJooOhCqKDgKyig6ELooOhDKKDglCig6ENooOhDqKDoQ+ig6EQooOhEaKDoRKig6ETooOhFKKDoRWig6EWooOhF6KDnyCig6EYooOhGqKDoRuig580ooOhHKKDoR2ig6EeooOhH6KDoSCigpjyoqmhKKKpoSmiqYbooqmhK6KCmO+irqEsoq6hLaKuoTCirqEyoq6hLqKuoTGirqE2oq6hN6KuoTiirqE8oq6hPaKuoT+irqFBoq6hR6KuoUmirqFKoq6hS6KuoU6irqFRoq6hXaKuoWCirqFnoq6haaKuoXCirqFxoq6hdaKuoX6irqGAoq6hgaKuoYOirqGEoq7AAJIhos6hiKLOohKizqIbos6hVaKuoYmirpW7oq6VtaKuoW6irqFvoq6hrKKuoa6irqG3oq6huaKuobqirqGZoq6hwaKuocKirqHEoq6hx6KuocqirqHSoq6h1qKuodmirqHcoq6h3qKuoeCirqHjoq6h66KuoeairqHnoq6h6KKuoeWirqH2oq6hqKKuofmirqH7oq6h/KKuogGirqICoq6hvaKuogOirqIOoq6iB6KuoiCirqIkoq6iJaKuoieirqIsoq6iMaKuojOirqI2oq6iO6Kuoj6irqJAoq6iRaKuokeirqJJoq6iUKKuolWirqJToq6iWaKuolqirqJboq6iXqKuomGirqJkoq6iZ6KuomiirqJpoq6ia6KuonCirqJxoq6idaKuoniirqJ6oq6ifKKuooGirqKLoq6ilKKuopairqKXoq6imqKuoqKirqKnoq6ir6KuorKirqK1oq6irqKuormirqK8oq6ivaKuosKirqLFoq6izKKuobGirqLToq6i1qKuotiirqLcoq6i46KuouairqLnoq6i6qKuou2irqLvoq6i+6Kuov+irqMAoq6jAqKuowOirqMGoq6jCKKuowqirqMLoq6jEKKuoxGirqMToq6jHqKuoyiirqMsoq6jL6KuozCirqMzoq6jNaKuoVSirqGpoq6jQaKuob+irqNEoq6jRaKuo0eirqNIoq6jSaKuo0qirqNMoq6jUqKuo1SirqNXoq6jWKKuo1mirqNaoq6jW6Kuo16irqNhoq6jZaKuo2eirqNpoq6jaqKuo2yirqNuoq6jcaKuo3KirqN0oq6jdaKuo3eirqN4oq6jfqKuo3+irqOBoq6jgqKuo4eirqOIoq6jiqKuo4+irqOToq6jlKKuo5airqOcoq6jnqKuo6CirqOkoq6jpaKuo6mirqOroq6jraKuo6+irqOxoq6juaKuo7yirqO+oq6jyqKuo86irqPQoq6j2KKuo9qirqPfoq6j46Kuo+yirqPtoq6j7qKuo/GirqP1oq6j96Kuo/mirqE0oq6hXKKuoUiirqPXoq6hpaKuokKirqFFoq6heaKuo/qirqP7oq6he6KuoYWirqQAoq6kAqKupAOirqQFoq6kB6Ku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pzalYqTppWWY8aVmJ6VmwACSJ6VoKKVmKaVmpjClZqYxpWamMqVmpjOlZqY0pWaKDaVmpjWlZqY2pWamN6VmpjilZqY5pWamOqVmpjulZqY8pWamPaVmpj6lZqY/pWamQKVmpkGlZqZCpWamQ6VmpkSlZqZFpWamRqVmpkelZqZIpWamSaVmpkqlZqZLpWamTKVmpk2lZqZOpWamT6VmplClZqZRpWamUqVmplOlZqZUpWamVaVmplalZqZXpWamWKVmplmlZqZapWamW6VmplylZqZdpWamXqVmpl+lZqZgpWamYaVmpmKlZqZjpWamZKVmpmWlZqZmpWamZ6VmpmilZqZppWamaqVmpmulZqZspWambaVmpm6lZqZvpWamcKVmpnGlZqZypWamc6VmkOSlZqZ0pWaNGKVmpnWlZqZ2pWamd6VmjS6lZqZ4pWaPHKVmikmlZpEGpWameaVmpnqlZpF8pWame6VmpnylZqZ9pWamfqVmpn+lZqaApWamgaVmpoKlZZjvpcYjpWWY9aXIAKVipPalypjxpcuCa6XLiOWly6aDpcumhKXLeqXLpoWlypjvpdIjpdIipcqY8qXVpy6lypj1pdcApWKIBKXZmPGl2ojlpdpbpdqCy6XaIqXZmPKl34Jrpd+DxqXZmO+l4qcvpeIjpeJIpeKnNKXZmPWl5wAAwACSKKXppzel6pjvpeuXDKXrlw+l6pj1pe4AAMAAkiml8JcvpfGY76XyhwGl8Zj1pfQApfCnOqX2mPGl92Gl94cppfaY76X6wACSKaX7pzul+qc8pfqHAaX6g46l+iOl9pj1pgEAAMAAkiqmA6dApgSY8aYFp0GmBadCpgWE16YFhQSmBYVqpgWFDqYFhTKmBYU+pgWFN6YFhVymBYVepgWFYaYFhWOmBYVlpgWFZ6YFhiemBYYkpgWFo6YFhaWmBYWnpgWnQ6YFhY+mBYWRpgWFlKYFhZamBYWhpgWFrKYFha+mBYWxpgWFs6YFhbymBYW/pgWFwaYFhcOmBadEpgWFyaYFhcymBYXRpgWF1qYFhdqmBYXfpgWF46YFhemmBYXxpgWF86YFhfimBYX8pgWnRaYFp0amBYYBpgWGA6YFhgamBYYIpgWGCqYFhgymBYYOpgWGEqYFhhamBYYapgWGIKYFhiKmBYXGpgWnR6YFp0imBadJpgWnSqYFp0umBYYQpgWnTKYFhiqmBYYspgWGM6YFhjWmBYY5pgWGO6YFhj2mBYY/pgWGQaYFhkWmBYZJpgWGUaYFhlOmBYZVpgWGV6YFhl6mBYZhpgWGZ6YFhnCmBadNpgWGMaYFhqKmBYaPpgWGiKYFhoumBYaNpgWGkaYFhpWmBYappgWnTqYFp0+mBYYcpgWnUKYFp1GmBadSpgWnU6YFp1SmBadVpgWnVqYFp1emBadYpgSY9aZ0AKYDp1mmdpjxpneGvaZ3hsCmd4bDpneGxqZ3hsqmd4bNpneG0qZ3htimd4bbpneG3qZ3huOmd4bqpneG7qZ3hvGmdpj1poYAAMAAkiumiJjvpomnbqaIp1umi5jvpoyZu6aLmPWmjgCmiKdcppCY8aaRwACSK6aSp12mkJjvppSZu6aQmPWmlgCmiKdeppiY8aaZwACSK6aap1+mmqdgppqnXaaYmPSmngCmmJjypqCnYaagmdmmmJjvpqOkkqajmbumo5nbppiY9aanhbamiKdipqmY8aaqmL6mqqdjpqmY76atovmmradkpq2E/aathKemrZg9pq2GdqapmPWmtAAAwACSLKa2myemt5jxpriHiaa3mO+muoWKpreY9aa8AADAAJItpr6ndKa/mPGmwMAAki2mwad1pr+Y8qbDgVWmw4O3pr+Y76bGVqbGhF6mxpwVpsbAAJItpsqneabKp3amyqd4pr+Y9abOAADAAJIuptCnfabRmPGm0qd+ptKngKbSp4Km0sAAki6m1ojDptGY76bYwACSLqbZp4em2JxmpticmabYp4qm2JxvpticiKbYnGim2KeMpticY6bYp42m0Zj1puQApuSnhabkp4am5J5UptCnjqbpmPGm6oRIpurAAJIupuycE6bpmPKm7oSIpu6nj6bpmO+m8cAAki6m8qeSpvGcb6bxnIim8ZxopvGnjKbpmPWm+ACm0KeUpvqY8ab7hFem+4SYpvvAAJIupv6nlab6mPKnAIRIpwCElKcAp4+m+pjvpwSnlqcEhJanBJxopwSnjKb6mPWnCQCnCaeCAMAAki+nDJjxpw2nn6cNp6CnDaehpw2noqcNp6OnDaekpw2npacNp6anDaenpw2nqKcNp6mnDaeqpw2nq6cNp6ynDaetpw2nrqcNp6+nDaewpw2nsacNp7KnDaezpw2ntKcNp7WnDae2pw2nt6cNp7inDae5pw2nuqcNp7unDae8pw2nvacNp76nDae/pw2nwKcNp8GnDafCpw2nw6cNp8SnDafFpw2nxqcNp8enDYIupw2nyKcNp8mnDafKpw2ny6cNp8ynDafNpw2nzqcNp8+nDafQpw2n0acNp9KnDafTpw2n1KcNp9WnDafWpw2n16cNp9inDafZpw2n2qcNp9unDafcpw2n3acNp96nDYIvpw2WJacNlianDZYnpw2WKKcNlimnDZYqpw2WK6cNliynDYIwpw2n36cNp+CnDafhpw2n4qcNp+OnDafkpw2n5acNp+anDafnpw2n6KcNp+mnDafqpw2n66cNgjGnDZY0pw2WNacNljanDZY3pw2WOKcNljmnDZY6pw2WO6cNljynDZY9pw2WPqcNlj+nDZZApw2WQacNlkKnDZZDpw2WRKcNlkWnDZZGpw2WR6cNlkinDZZJpw2WSqcNlkunDYI7pw2n7KcNp+2nDafupw2n76cNp/CnDafxpw2n8qcNp/OnDYI8pw2n9KcNp/WnDaf2pw2n96cNgj2nDZZQpw2WUacNllKnDZZTpw2WVKcNgj6nDZZVpw2WVqcNllenDZZYpw2WWacNllqnDZZbpw2WXKcNll2nDZZepw2WX6cNgj+nDZZgpw2WYacNlmKnDZZjpw2WZKcNlmWnDYJApw2n+KcNp/mnDaf6pw2n+6cNp/ynDaf9pw2n/gDAAJIwp66Y8aevwACSMKewqACnrpjvp7KcxaeywACSMKe0qAKnspziAMAAkjGnt4RRp7iY8ae5Eqe5aqe5gpCnuagRp7mDtae4mPWnvwCnt6gSp8GY8afCqBOnwqgUp8LAAJIxp8WoFafFqBanxagXp8GY76fJhyynyagYp8moGafJqBqnyZ1Op8mCRqfBmPWn0AAAwACSMqfSqB2n05jyp9SCkKfUYafUg2Kn05j1p9gAAMAAkjOn2qgep9uY8afcqB+n25jvp96oIKfbmPWn4AAAwACSNKfimPGn455zAMAAkjWn5Z6Lp+aY8afnhkKn55mMp+eoIqfnnyGn559Rp+eoI6fnwACSNafuqCSn5pjvp/CoJafwhKen8IT7p/CFBqfwwACSNaf1qCmn8J8dp/CoK6fwn1Sn8IYfp/CoLKfwhZCn8IWTp/CFlafwhaCn8IWip/CFpKfwhaan8IWup/CFsKfw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8qnKoVepyp+LqcqFhanKhJOpyqHAqcqeu6nKgKyppZjvqdKpHKnShJCp0qkeqdKpH6nSqSKp0qknqdJsqdKpKqnSqSup0qktqdKkkqnShKap0qk3qdKpOKnSqJKp0qk+qdKi+anSqUOp0qlEqdKpSKnSqUyp0qlRqdKkk6nSqJep0p7pqdKe8anSn4qp0qlZqdKokanSqVqp0qlbqdKpXanSqR2p0qleqdKe26nShJep0qljqdLAAJI+qfipYanSqWqp0qlwqdKpaKnSqYmp0oSaqdKpjKnShJyp0qmUqdKpmqnSqZyp0qmgqdKpo6nSqaWp0p79qdKpQKnSqaap0qlBqdKomKnSnwOp0qmyqdKpkqnSnwWp0qmCqdKe7anSnuqp0qnAqdKfBqnSqcSp0qnFqdKpxqnSqcyp0qnNqdKpzqnSqc+p0qKhqdKipqnSorip0qLaqdKiWKnSoz6p0qM/qdKjQKnSqdGp0qnVqdKe7qnSqVCppZj1qiiVp6ooqRqqKACpoanXqiyY8aotJ6otwACSPqovKKotKaothEiqLancqi2p3aotqYWqLaneqi2p36otqeCqLYaZqi2p4aotqeKqLanjqi2FVqosmO+qPiOqLJj1qkAAqaGp5KpCmPGqQ8AAkj6qRKnlqkQoqkSp5qpEqeeqRKnoqkOEV6pDhJSqQ4TkqkObZqpDhImqQ4WFqkOiC6pCmO+qUakhqlGp6qpRqeyqUantqlGp7qpRqe+qUakcqlGe6apRqRuqUSOqQpjyqlyCa6pcgL2qXIdxqlyizapcqfKqQpj1qmIAqmKESKmhqfuqZZjxqmaAvapmh3GqZqk7qmapPKpmqNyqZZj1qmwAqaGp/KpumPGqb4C9qm+fC6pvh3Gqbpj1qnMAqaGp/ap1mPGqdiKqdodxqnZhqnaEZqp1mPWqewAAwACSP6p9mPGqfqpyqn6qc6p+qnSqfqp1qn6qdqp9nsWqhJjxqoWCU6qFlZuqhaSZqoWkaaqFh4mqhYeFqoWhkqqFoZaqhaGUqoWhJqqFqgqqhaoLqoWqDKqEmPKqk594qpOfeaqTgkmqhJjvqpeVl6qXqg6ql6oSqpefkaqXn46ql6SXqpeqH6qXnueql57oqpeqLaqXnumql57uqpefA6qXnwSql57xqpee7aqXnuqql58FqpefBqqXqj2ql6o+qpeqRKqXnuyql5VpqpeqTqqXnvSql6pRqpeqU6qXnvKql572qpee96qXnviql575qpee+qqXnvuql578qpee/aqXnvOql57kqpee9aqXoWyql6FNqpeHl6qXh5mql6RqqpefoaqXn6Kql6pwqoSY9arIAKp9qnGqypjxqsuaJqrLgdeqy4JOqsqY9arPAADAAJJAqtGY76rSqySq0p7GqtLAAJJAqtWrJqrRqnmq15jxqtiqeqrXmO+q2oa6qtojqteY9ardAKrdqnuq3ap8qt2qfqrRqoCq4pjxquOoaqrjqoGq44boquOqgqrjqoOq46qEquOfO6rjh7uq4pjvquyqhqrshLuq7IS4quyE+6rshVOq7IU1quyEyqrshTyq7Ia1quyqh6rsqomq7IV4quyGb6rshTCq7IYFquyFsqrshlCq7IWTquyGD6rshd6q7IYRquyF4qrshhOq7IXoquyFxKrshcKq7IYequyqiqrsqoyq7KqOquyqj6rimPWrDACq0aqSqw6Y8asPqGqrD4d6qw+HiqsPh7urD4eFqw+G6KsPqoWrD587qw+qk6sPqpSrD6qVqw+qlqsPnyCrD6qXqw+qmKsPqpmrD6qaqw+qm6sPqpyrD5bQqw+qnasPqp6rD6qfqw+qoKsPqqGrD6qjqw6Y8qsqqqirKqqpqw6Y76stnSmrLaqqqy2fTqstgcWrLaqwqy2qsastqrKrLaqzqy2qtKsthpyrLaq1qy2Hd6sth3irLYd5qy3AAJJAqzyqq6s8qrerLaqRqy2qu6stqrmrLaq6qy2HJ6sthgKrLYYAqy2F+6sthf6rLYX5qy2GB6sthh6rLYYPqy2F3qsthhGrLYXiqy2GE6stheirLYYbqy2FxKsthe6rLarPqy2q16stqtKrLarVqy2FkKsthb6rLYXQqy2F1asthaCrLYYhqy2Fk6sthbKrLYXZqy2FwqsthfarLYXyqy2Fy6sthgWrLYXIqy2GKastquGrLYbJqy2q+6stqvyrLaq+qy2qv6stqvWrLar0qy2q0Kstqt2rLar3qy2qwKstqsurLarMqy2qzastnU6rLarRqy2qiKstquSrLarnqy2q6astqvarDpj1q34AqtGrBquAmPGrgasHq4Gp0KuBhTirgYSLq4GF7KuBhe2rgJjvq4iq1quIqtSriKrTq4CY9auMAKrRqwir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IbmIsiK5iLIjuYiyJLmIsiW5iLImuYiyJ7mIsii5iLIquYie0rmIhii5iIW9uYibMrmIhZ25iIX9uYiF2LmIhgS5iIVWuYiFiLmIhZ+5iLIsuYivbrmIsjW5iLI2uYiyN7mIsji5iLI5uYiyOrmIsju5iLI8uYiyPbmIsj65iLI/uYiyQLmIskG5iLJDuYiyRLmIskW5iLJGuYiyR7mIski5iLJJuYiySrmIsku5iLJMuYiyTbmIsk65iLJPuYiyULmIslG5iLJSuYiyU7mIslS5iLJVuYiyVrmIsle5iLJYuYiyWbmIslq5iLJbuYiyXLmIsl25iLJeuYiyX7mIsmC5iLJhuYiyYrmIsmO5iLJkuYiyZbmIsma5iLJnuYiyaLmIsmm5iLJquYiybLmIsm25iLJvuYiycLmIsnG5iLJyuYiyc7mIsnS5iLJ1uYiydrmIsne5iLJ4uYiyebmIsnq5iLJ7uYiyfLmIsn25iLJ+uYiyf7mIsoC5iLKBuYiygrmIsoO5iLKEuYiyhbmIsoa5iLKHuYiyiLmIsom5iLKKuYiyi7mIsoy5iLKNuYiyjrmIso+5iLKQuYiykbmIspK5iLKTuYiylLmIspW5iLKWuYiyl7mIspi5iLKZuYiymrmIspu5iLKcuYiynbmIsp65iLKfuYiyoLmIsqG5iLKiuYiyo7mIsqS5iLKluYiyprmIsqe5iLKouYiyqbmIsqq5iLKruYiyrLmIsq25iLKuuYiyr7mIsrC5iLKxuYiysrmIsrO5iLK3uYiyuLmIsrm5iLK6uYiyu7mIsry5iLK9uYiyvrmIsr+5iLLAuYiywbmIssK5iLLDuYiyxLmIssW5iLLGuYiyx7mIssi5iLLJuYiyyrmIssu5iLLMuYiyzbmIss65iLLPuYiy0LmIstG5iLLSuYiy07mIstS5iLLVuYiy1rmIste5iLLYuYiy2bmIstq5iLLbuYiy3LmIst25iLLhuYeY77pbsim6W7Irulus5rpbrQ+6W60BulubP7pbhiW6W5tBuluyLbpbsi66W7IvuluyMLpbsjS6W7JCuluya7pbsm66W7K0uluytbpbsra6W7Leuluy37mHmPW6cQC5hrLiunOY8rp0suO6dLLkunScn7p0suW6dLLmunSy6bp0suq6c5jvunyy57p8sui6fLLrunOY9bqAALmGsuy6gpjvuoOy7bqDsu66g7LvuoOy8LqDsvO6g7L0uoOy+bqDsvq6g7L7uoOy/LqDswC6g7MBuoKY8rqQsvG6kLLyupCy9bqQsva6kLL3upCy+LqQsv26kLL+upCy/7qCmPW6mgC5hrMCupyY8bqdwACSb7qeswO6nrMEup6cMLqenDK6npw0up6cM7qenDW6npw2up6cPrqeswW6npw8up6cMbqenD26npxMup6cN7qenDi6npw5up6zBrqenDq6npxLup6cTbqenC+6npxKup6cXbqeswe6nrMIup6zCbqeswq6nrMLup6zDLqesw26nrMOup6zD7qesxC6nrMRup6zErqesxO6nrMUup6zFbqesxa6nrMXup6zGLqesxm6nrMaup6zG7qesxy6nrMdup6zHrqesx+6nrMgup6zIbqesyK6nrMjup6zJLqesyW6nrMmup6zJ7qesyi6nrMpup6zKrqesyu6nrMsup6zLbqesy66nrMvup6zMLqeszG6nrMyup6zM7qeszS6nrM1up6zNrqesze6nrM4up6zObqeszq6nrM7up6zPLqesz26nrM+up6zP7qes0C6nrNBup6zQrqes0O6nrNEup6zRbqes0a6nrNHup6cXrqes0i6nrNJup6zSrqes0u6nrNMup6zTbqes066nrNPup6zULqes1G6nrNSup6zU7qes1S6nrNVup6zVrqes1e6nrNYup6zWbqes1q6nrNbup6zXLqes126nrNeup6zX7qes2C6nrNhup6zYrqes2O6nrNkup6zZbqes2a6nrNnup6zaLqes2m6nrNqup6za7qes2y6nrNtup6zbrqes2+6nrNwupyY8rsimy67IpswuyKbM7simzG7Ips0uyKbNbsimzm7IrIduyKbNrsimy+7Ips3uyKcpLsimzy7Ips9uyKbPrsish67IptAuyKbQ7sim0K7IpyHuyKcZbsinJi7IrIfuyKyILsisiG7IrIiuyKyI7sisiS7IrIluyKyJrsisie7IrIouyKyKrsintK7IoYouyKFvbsimzK7IoWduyKF/bsihdi7IoYEuyKFVrsihYi7IoWfuyKyLLsir267IrI1uyKyNrsisje7IrI4uyKyObsisjq7IrI7uyKyPLsisj27IrI+uyKyP7siskC7IrJBuyKyQ7siskS7IrJFuyKyRrsiske7IrJIuyKySbsiskq7IrJLuyKyTLsisk27IrJOuyKyT7sislC7IrJRuyKyUrsislO7IrJUuyKyVbsisla7IrJXuyKyWLsislm7IrJauyKyW7sisly7IrJduyKyXrsisl+7IrJguyKyYbsismK7IrJjuyKyZLsismW7IrJmuyKyZ7sismi7IrJpuyKyarsismy7IrJtuyKy8bsisvK7IrL1uyKy9rsisve7IrL4uyKy4bsisuO7IrLkuyKyb7sisnC7IrJxuyKycrsisnO7IrJ0uyKcn7sisuW7IrLmuyKydbsisna7IrJ3uyKyeLsisnm7IrJ6uyKye7sisny7IrJ9uyKyfrsisn+7IrKAuyKygbsisoK7IrKDuyKyhLsisoW7IrKGuyKyh7sisoi7IrKJuyKyirsisou7IrKMuyKyjbsiso67IrKPuyKykLsispG7IrKSuyKyk7sispS7IrKVuyKylrsispe7IrKYuyKymbsispq7IrKbuyKynLsisp27IrKeuyKyn7sisqC7IrKhuyKyorsisqO7IrKkuyKypbsisqa7IrKnuyKyqLsisqm7IrKquyKyq7sisqy7IrKtuyKyrrsisq+7IrKwuyKysbsisrK7IrKzuyKyt7sisri7IrK5uyKyursisru7IrK8uyKyvbsisr67IsAAkm+74bPqu+Gz7Lsisr+7IrLBuyKywLsissK7IrLDuyKyxLsissW7IrLGuyKyx7sissi7IrLJuyKyyrsissu7IrLMuyKyzbsiss67IrLPuyKy0LsistG7IrLSuyKy07sistS7IrLVuyKy1rsiste7IrLYuyKy2bsistq7IrLbuyKy3Lsis4S7IrL9uyKy/rsist27IrL/uyKy6bsisuq6nJjvvAnAAJJvvAqzdrwKs3G8CrN3vAqzf7wKs3W8CrN5vAqzerwKs4a8CrOMvAqzjbwKs468CrOfvAqzoLwKs7q8CrPBvAqzwrwKs+e8CrPFvAqz4rwKs+68CrQJvAmyKbwJsiu8CbLtvAmy7rwJrOa8Ca0PvAmtAbwJmz+8CYYlvAmbQbwJsi28CbIuvAmyL7wJsjC8CbI0vAmy77wJskK8CbJrvAmy8LwJsvO8CbL0vAmybrwJsvm8CbL6vAmy+7wJsue8CbK0vAmytbwJsra8CbL8vAmy6LwJswC8CbLevAmy67wJswG8CbLf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tke/wbZGv8G2Rb/BhYi/wbZEv8GtAb/BrQ+/wazmv8GF2L/BmzK/wYX9v8GFnb/Bhb2/wYVWv8GFn7/AmO+/27HOv9uxx7/btqS/27ajv9u2or/bso2/27ahv9u2oL/bgxy/27acv9uzvL/btpu/27aav9u2mb/btpi/27aXv9u2lr/btpW/27aSv9u2kb/btpC/27aOv9u2jb/btoy/27aLv9u2ir/brPi/27aJv9u2iL/boqy/27aHv9u2hr/btoK/27aBv9u2gL/btp2/24QHv9u2f7/bl1i/27Z+v9uXV7/btn2/27Z8v9u2e7/btnq/27Z5v9u2eL/btne/27Z2v9u2db/btnS/27Zzv9u2cr/btnG/27Zwv9u2b7/btm6/27Ztv9u2bL/btmu/27Zqv9u2ab/btmi/27Znv9u2Zr/btmW/27Zkv9u0ub/bqFy/27Zjv9u2Yr/btmG/24FVv9u2YL/btl+/27Zev9u2Xb/btly/27Zbv9u2Wr/btlm/27ZYv9u2V7/btla/27ZVv9u2VL/btlG/wJj1wABAMwC/uqT8wABANZjvwABANrY7wABANrY8wABANZj1wABAOQC/uratwABAO5jvwABAPLauwABAPLawwABAO5j1wABAPwC/urazwABAQZjvwABAQra0wABAQracwABAQra1wABAQiPAAEBBmPXAAEBHAADAAJJ4wABASZjvwABASre9wABASbbEwABATJjxwABATcAAknjAAEBOtsXAAEBOtsbAAEBOtsfAAEBOtsjAAEBOtsnAAEBOtsrAAEBOtsvAAEBOtszAAEBOts3AAEBOts7AAEBOts/AAEBOttDAAEBOttHAAEBOttLAAEBOttPAAEBOttTAAEBOttXAAEBOttbAAEBOttfAAEBOttjAAEBOttnAAEBOttrAAEBOttvAAEBOttzAAEBOtt3AAEBOtt7AAEBOtt/AAEBOtuDAAEBOtuHAAEBOtuLAAEBOtuPAAEBMmPLAAEButFnAAEBuntLAAEButkTAAEBuhZ3AAEButkjAAEButkfAAEButknAAEBuhf3AAEBumzLAAEBuhb3AAEBuhVbAAEBurObAAEButkrAAEButkbAAEButkXAAEBurQ/AAEButkvAAEBurQHAAEButkzAAEBuhdjAAEBuhZ/AAEButk7AAEButk/AAEButlDAAEBuhYjAAEButk3AAEButufAAEButujAAEButunAAEButurAAEButuvAAEBMmO/AAECOtuTAAECOtlnAAECOtlrAAECOtlTAAECOtlXAAECOtlbAAECOtlfAAECOtljAAECOtlHAAECOtlvAAECOtlzAAECOtl3AAECOwACSeMAAQJu28cAAQJu28sAAQJu29MAAQJu2+cAAQJu2/cAAQJu2/8AAQJu2/sAAQJu3AcAAQJu3AMAAQJu3BcAAQJu3CMAAQJu3CcAAQI62XsAAQI62X8AAQI62YMAAQI6BVcAAQI62YcAAQI62YsAAQI62Y8AAQI62mMAAQI62msAAQI62mcAAQI6oXMAAQI60ucAAQI62ZMAAQI62ZcAAQI62ZsAAQI62Z8AAQI62aMAAQI62acAAQI62asAAQI62a8AAQI62bMAAQI62bcAAQI62b8AAQI62cMAAQI62ccAAQI62csAAQI62c8AAQI62dMAAQI62dcAAQI62dsAAQI62d8AAQI62eMAAQI62ecAAQI62esAAQI62e8AAQI62fMAAQI62fcAAQI6XV8AAQI6XWMAAQI62f8AAQI6EB8AAQI62gMAAQI62i8AAQI62jMAAQI62hsAAQI62h8AAQI62gsAAQI62fsAAQI62m8AAQI6zvMAAQI62nMAAQI6DHMAAQI62oMAAQI62ocAAQI6yjcAAQI62osAAQI62o8AAQI62bsAAQI6s+MAAQI6irMAAQI62gcAAQI62jcAAQI62kMAAQI62kcAAQI62isAAQI62jsAAQI62iMAAQI62icAAQI62ksAAQI62lsAAQI62l8AAQI62lcAAQI62ncAAQI62pMAAQI6xx8AAQI6xzsAAQEyY9cAAQPQAwABASbcQwABA9pjxwABA94PswABA97cKwABA97aEwABA97aFwABA95s7wABA92HAAED2mPTAAED+sA/AAED2mO/AAEEAsBDAAEEAhoDAAEEAhoHAAEEAtxfAAEEAl1jAAEEAl1fAAEEASMAAQQAjwABA9pjywABBCbaBwABBCbZhwABBCYPGwABA9pj1wABBDQDAAEBJtx/AAEEPmPHAAEEQg+zAAEEQwACSeMAAQRK3IcAAQQ+Y9MAAQRSwD8AAQQ+Y78AAQRawEMAAQRaGgMAAQRaGgcAAQRaHZMAAQRa3D8AAQRa3F8AAQRaXWMAAQRaXV8AAQRZIwABBFiPAAEEPmPLAAEEhto3AAEEhtmHAAEEhg8bAAEEPmPXAAEElAMAAQEm3KsAAQSeY8cAAQSiD7MAAQSi3LMAAQSi3LcAAQSi3LsAAQSi3L8AAQSiWrMAAQSiEg8AAQSeY9MAAQTC3NMAAQTCwD8AAQSeY78AAQTOwEMAAQTOGgMAAQTOGgcAAQTODHMAAQTO3QsAAQTO3DsAAQTO3DcAAQTO3A8AAQTO3BsAAQTO3BMAAQTO3B8AAQTO3AsAAQTO288AAQTO27MAAQTO2+sAAQTOEB8AAQTOXV8AAQTO3RcAAQTO3RsAAQTO3R8AAQTOXWMAAQTO298AAQTPAAJJ4wABBSrdSwABBM7dVwABBM7dWwABBM7dXwABBM7a1wABBM7acwABBM7ahwABBM0jAAEEzI8AAQSeY8sAAQVTAAJJ4wABBVbc7wABBVIFVwABBVKhcwABBVLcZwABBVLZhwABBVLb4wABBVLdAwABBVLaBwABBVKKswABBVKz4wABBVLaNwABBVLdBwABBVLb7wABBVLc9wABBVKr1wABBVIPGwABBJ5j1wABBZgDAAEFmrnvAAEFmm2vAAEFmm0jAAEFmtzDAAEFmhbbAAEFmtzHAAEFmtzLAAEFmtzPAAEFmlafAAEBJt2fAAEFxmPLAAEFytwrAAEFytxnAAEFygVXAAEFytvjAAEFyqFzAAEFytmHAAEFyt0DAAEFytoHAAEFyoqzAAEFyrPjAAEFyto3AAEFytvvAAEFyt0HAAEFyg8bAAEFxmO/AAEGBtw7AAEGBtw3AAEGBtwPAAEGBtwbAAEGBtwTAAEGBtwfAAEGBtwLAAEGBtvPAAEGBtuzAAEGBgxzAAEGBhAfAAEGBtvrAAEGBl1fAAEGBtvfAAEGBl1jAAEGBtpzAAEGBtrXAAEGBtqHAAEGBtxfAAEGBSMAAQXGY9cAAQZYAwABASbdpwABBmJjywABBmbaEwABBmbaFwABBmJj1wABBnADAAEBJt2rAAEGemPHAAEGfg+zAAEGftwrAAEGftoTAAEGftoXAAEGfheXAAEGfheTAAEGemPTAAEGmsA/AAEGemO/AAEGosBDAAEGohoDAAEGohoHAAEGotxfAAEGol1jAAEGol1fAAEGoSMAAQagjwABBnpjywABBsbaBwABBsaz4wABBsbZhwABBsYPGwABBnpj1wABBtgDAAEBJt2/AAEG4mPHAAEG5g+zAAEG5twrAAEG5toTAAEG5toXAAEG5mzvAAEG4mPTAAEG/sA/AAEG4mO/AAEHBsBDAAEHBhoDAAEHBhoHAAEHBtxfAAEHBl1jAAEHBl1fAAEHBSMAAQcEjwABBuJjywABByqKswABByrZhwABByoPGwABBuJj1wABBzgDAAEBJt3PAAEHQmPHAAEHRt3TAAEHRwACSeMAAQdO3dcAAQdCY78AAQdW2tcAAQdW2nMAAQdW2tMAAQdUjwABB0Jj1wABB2gDAAEBJpP3AAEHcmO/AAEHdtjvAAEHdtjzAAEHcmPXAAEHgAMAAQEm3eMAAQeKY78AAQeO2rsAAQeO2sMAAQeKY9cAAQeYAwABASbd5wABB6JjxwABB6SfAAEHpwACSeMAAQesowABB6SnAAEHpt3zAAEHpl1fAAEHpt33AAEHpl3nAAEHpgKvAAEHpt37AAEHpgJbAAEHomO/AAEH1I8AAQeiY9cAAQfcAwABASbd/wABB+ZjxwABB+sAAknjAAEH7lp3AAEH5mPTAAEH9AMAAQf2FtsAAQf2ue8AAQf23gsAAQf2ba8AAQf2bSMAAQf23MMAAQf23McAAQf23h8AAQf23MsAAQf23M8AAQf23iMAAQf2wD8AAQfmY78AAQguwEMAAQgu3isAAQgu3i8AAQgu3jcAAQguGgMAAQguGgcAAQgu3A8AAQgu3BsAAQgu3BMAAQgu3B8AAQgu3AsAAQgu288AAQgtIwABCC7cOwABCC7cNwABCC7bswABCC4McwABCC4QHwABCC7b6wABCC5dXwABCC7b3wABCC5dYwABCC7a1wABCC7acwABCC7ahwABB+ZjywABCJYFVwABCJbb4wABCJahcwABCJbcZwABCJbZhwABCJbdAwABCJbaBwABCJaKswABCJaz4wABCJbaNwABCJbdBwABCJbb7wABASbeZwABCMpjxwABCM4PswABCM7ebwABCM7ecwABCM7eVwABCMpj0wABCOLAPwABCMpjvwABCOrAQwABCOreIwABCOreewABCOrejwABCOpdXwABCOpdYwABCOrb3wABCOoaAwABCOoaBwABCOreywABCOrcOwABCOrcNwABCOrcDwABCOrcGwABCOrcEwABCOrcHwABCOrcCwABCOrbzwABCOrbswABCOoMcwABCOoQHwABCOrb6wABCOracwABCOra1wABCOrahwABCOiPAAEI6SMAAQjKY8sAAQla3GcAAQlaBVcAAQlaoXMAAQla2+MAAQla2YcAAQla3QMAAQla2gcAAQlairMAAQlas+MAAQla2jcAAQla3QcAAQla2+8AAQlaDxsAAQjKY9cAAQmTAAJJ4wABCZYZzwABASbe6wABCZ5jxwABCaIPswABCaLcKwABCaICWwABCZ5j0wABCbLAPwABCZ5jvwABCbrAQwABCboaAwABCboaBwABCbrcXwABCbpdYwABCbkjAAEJuI8AAQmeY8sAAQna2+8AAQnaDxsAAQmeY9cAAQnkAAMAAknnAAEJ7tTXAAEJ8mPHAAEJ9wACSecAAQn6WncAAQnyY9MAAQoCwD8AAQnyY78AAQoKwEMAAQoK3xMAAQoK3xcAAQoK3xsAAQoK3x8AAQoK3yMAAQnyY8sAAQomClMAAQom3wsAAQom3w8AAQomFVcAAQnu3ycAAQo6Y8cAAQo/AAJJ5wABCkJadwABCjpj0wABCkrAPwABCjpjvwABClLAQwABClLfKwABClLfEwABClLfFwABClLfGwABClLfHwABClLfIwABCe7fLwABCnJjvwABCnbfMwABCnJj1wABCnwDAAEJ7pP7AAEKhmPTAAEKisA/AAEKhmO/AAEKksBDAAEKktUvAAEKktU3AAEKkt87AAEKkt8/AAEKkt9DAAEKkt9HAAEKhmPLAAEKspUDAAEKspXjAAEJ7pP/AAEKvmPHAAEKwgL3AAEKwgprAAEKwt9PAAEKwt9TAAEKvmO/AAEK1pW/AAEKvmPXAAEK3AMAAQnu32cAAQrmY8cAAQrqD7MAAQrqlQMAAQrqleMAAQrrAAJJ5wABCvrfbwABCvrfcwABCvrfdwABCvrfiwABCurfewABCurffwABCurfgwABCurfhwABCuZj0wABCx7APwABCuZjvwABCybAQwABCybVLwABCybVNwABCybfOwABCybfvwABCybfwwABCybfxwABCybfPwABCybfQwABCybfRwABCuZj1wABC1ADAAEJ7t/XAAELWmPHAAELXg+zAAELXwACSecAAQtm398AAQteFVcAAQteClMAAQte3w8AAQte3wsAAQtaY9MAAQt+wD8AAQtaY78AAQuGwEMAAQuG3xMAAQuG3xcAAQuG3xsAAQuG3x8AAQuG3yMAAQtaY9cAAQugAwABCe7f5wABC6pjxwABC66VAwABC68AAknnAAELtt/rAAELtt93AAELrpXjAAELqmO/AAELxsBDAAELxt8/AAELxt87AAELxtU3AAELxtUvAAELxt9HAAELxt9DAAELqmPXAAEL5AMAAQnu3+8AAQvuY8cAAQvye0sAAQvuY8sAAQv6ClMAAQv6FVcAAQv63w8AAQv63wsAAQvuY78AAQwO3yMAAQwO3x8AAQwO3xsAAQwO3xcAAQwO3xMAAQwOwEMAAQvuY9cAAQwoAwABCe7f9wABDDJjxwABDDZ7SwABDDbZNwABDDJjywABDEIKUwABDEIVVwABDELfDwABDELfCwABDDJjvwABDFbfIwABDFbfHwABDFbfGwABDFbfFwABDFbfEwABDFbAQwABDDJj1wABDHADAAEJ7uADAAEMemPHAAEMftk3AAEMfhVbAAEMemPLAAEMigpTAAEMihVXAAEMit8PAAEMit8LAAEMemO/AAEMnt8jAAEMnt8fAAEMnt8bAAEMnt8XAAEMnt8TAAEMnsBDAAEMemPXAAEMuAADAAJJ6wABDMJjvwABDMbhWwABDMbhXwABDMKUAwABDNJjvwABDNbAPwABDNbAQwABDNJjywABDOJcCwABDOLgGwABDOLgHwABDOLgIwABDOLgJwABDOLgKwABDOLXIwABDNJj1wABDQADAAEMwuAvAAENCmPHAAENDg+zAAENDuA3AAENDuA7AAENCmPTAAENHsA/AAENCmO/AAENJsBDAAENJI8AAQ0KY9cAAQ0wAwABDMLgQwABDTpjvwABDT7gRwABDT7gSwABDT7gTwABDTpj1wABDUwDAAEMwuBTAAENVmO/AAENWuBXAAENWuBbAAENWuBfAAENWuBjAAENWuBnAAENWuBrAAENWuBvAAENWuBzAAENWuB3AAENWuB7AAENWuB/AAENWuCDAAENWuCHAAENWuCLAAENWuCPAAENWo5rAAENWuCTAAENWuCXAAENWuCbAAENWuCfAAENWuCjAAENWuCnAAENWuCrAAENWuCvAAENWuCzAAENWuC3AAENWuC7AAENWuC/AAENWuDDAAENWuDHAAENWuDLAAENWuDPAAENWuDTAAENWuDXAAENWuDbAAENWuDfAAENWuDjAAENWuDnAAENWuDrAAENVmPXAAEN+AMAAQzC4O8AAQ4CY8cAAQ4GD7MAAQ4CY8sAAQ4O4PcAAQ4ODYsAAQ4OB+8AAQ4OHBcAAQ4O4PsAAQ4ODxsAAQ4O1yMAAQ4CY78AAQ4uwD8AAQ4uwEMAAQ4tIwABDiyPAAEOAmPXAAEOQAMAAQzC4RMAAQ5KY8cAAQ5O4PcAAQ5ODYsAAQ5OB+8AAQ5OHBcAAQ5O4PsAAQ5KY9cAAQ5kAwABDMLhFwABDm5jxwABDnMAAknrAAEOduEbAAEOduEfAAEObmPLAAEOguD3AAEOgg2LAAEOggfvAAEOghwXAAEOguD7AAEOgtcjAAEObmO/AAEOnI8AAQ5uY9cAAQ6kAwABDqbhLwABDqbhMwABDMLhNwABDrZjxwABDroNiwABDrrg+wABDrZjywABDsbXIwABDrZjvwABDsyPAAEOtmPXAAEO1AMAAQzC4TsAAQ7eY8sAAQ7i4PcAAQ7i4PsAAQ7iHBcAAQ7iB+8AAQ7iDYsAAQ7i4T8AAQ7eY78AAQ78jwABDt5j1wABDwQDAAEMwuFHAAEPDmPHAAEPEuFLAAEPEuA7AAEPEuFPAAEPDmPLAAEPIuFTAAEPIuFXAAEPDmPXAAEPLoSzAAEPLoS8AwACSe8AAQ864XMAAQ8+Y78AAQ9C4XcAAQ9BnwABDz5jywABD05bJwABDz5j1wABD1QDAAEPOuF7AAEPXmPHAAEPYwACSe8AAQ9m4X8AAQ9m4YMAAQ9m4YcAAQ9m4YsAAQ9m4Y8AAQ9m4ZMAAQ9m4ZcAAQ9m4ZsAAQ9m4Z8AAQ9eY78AAQ+O4bMAAQ+O4bsAAQ+O4b8AAQ+O4csAAQ+O4d8AAQ+O4acAAQ+O4eMAAQ+O4a8AAQ+O4ecAAQ9eY9cAAQ+0AwABDzqUCwABD75jxwABD8KUywABD8KUewABD8KVgwABD8KViwABD75jvwABD9bRqwABD9aWPwABD75j1wABD+ADAAEPOpQHAAEP6mPLAAEP7uHrAAEP7uHvAAEP7uHzAAEP7uH3AAEP7uH7AAEP7uH/AAEP7uIDAAEP6mPXAAEQDAMAAQ864gcAARAWY8cAARAa4esAARAa4e8AARAa4fMAARAa4fcAARAa4fsAARAa4f8AARAa4gMAARAWY9cAARA4AAMAAknzAAEQQuILAAEQRmPTAAEQSsA/AAEQRmO/AAEQUsBDAAEQUtWTAAEQUuIPAAEQUuITAAEQUuIXAAEQUuIbAAEQQuIfAAEQbmO/AAEQcuIjAAEQcuInAAEQcuIrAAEQcuIvAAEQcuIzAAEQcuI3AAEQcgozAAEQbmPXAAEQkAMAARBC4jsAARCaY8cAARCeD7MAARCfAAJJ8wABEKbbFwABEKbiQwABEKbiRwABEKbiSwABEKbiTwABEKbiUwABEJpj0wABEMLAPwABEJpjvwABEMrAQwABEMriDwABEMrVkwABEMsAAknzAAEQ2uJ/AAEQyuIXAAEQyuITAAEQyuIbAAEQmmPXAAEQ7AMAARBC4oMAARD2Y8cAARD7AAJJ8wABEP7iQwABEP7ihwABEP7iSwABEP7iTwABEP7iUwABEPriiwABEPZjvwABERriJwABERriIwABERoKMwABERriowABERriMwABERriNwABERriKwABERriLwABEPZj1wABETwDAAEQQuKvAAERRmPHAAERSwACSfMAARFO4rMAARFGY78AARFWwEMAARFW1ZMAARFW4hsAARFW4hcAARFW4hMAARFW4g8AARFGY9cAARFwAAMAAkn3AAEReuLPAAERfmPHAAERgwACSfcAARGGlpsAARGG4tMAARGG4tcAARGG4tsAARGG4t8AARGG4uMAARGG4ucAARGG4usAARGGwY8AARGCwA8AARGC4u8AARGC4vMAARF+Y8sAARG6WycAARG6lUMAARG6v/8AARG64vcAARG64vsAARG64v8AARG60s8AARG64wsAARG64xMAARF+Y78AARHi4wMAARHilhcAARHilScAARHilS8AARHilcsAARHjAAJJ9wABEfrjUwABEeLjbwABEeKV6wABEeKV3wABEeLACwABEeKWxwABEeLAEwABEeLAGwABEeLAFwABEX5j1wABEiADAAEReuOzAAESKmPHAAESLwACSfcAARIy47cAARIy2xcAARIy47sAARIy478AARIy48MAARIqY78AARJK2IMAARIqY9cAARJQAwABEXrjxwABElpjxwABEl8AAkn3AAESYuO3AAESYtsXAAESYuO7AAESYuO/AAESYuPDAAESXlnvAAESWmO/AAESfgp/AAESWmPXAAEShAMAARF648sAARKOY8cAARKTAAJJ9wABEpbjzwABEpbMEwABEpaURwABEpbj0wABEpbi0wABEpbj1wABEpbj2wABEpbj3wABEo5jvwABErqL5wABEo5j1wABEsADAAEReuPvAAESymPHAAESzwACSfcAARLS1OMAARLS4/MAARLKY78AARLfAAJJ9wABEuLj9wABEt7j+wABEt7j/wABEt7kAwABEt7kBwABEt7kCwABEt7fRwABEt7fGwABEt7fIwABEt7fHwABEt7kEwABEt7kFwABEt7kGwABEt7kHwABEt7fOwABEt7kIwABEspj1wABEyQAAwACSfsAARMuY8cAARMy5XcAARMu5DsAARM6Y8cAARM+5D8AARM/AAJJ+wABE0bkQwABE0bMEwABE0bkRwABE0bi0wABE0bkSwABE0bkTwABE0bkUwABE0bkVwABE0bkWwABE0bkXwABE0bkYwABE0bkZwABE0bkawABEz7jNwABEz7kbwABEz7YnwABEzpjywABE4rYtwABE4rkcwABE4rkdwABE4rLgwABE4rkxwABE4rkywABE4qVZwABE4rRZwABE4rSzwABE4rkzwABEzpjvwABE7aVXwABE7cAAkn7AAETvuR7AAETvuSbAAETtpVbAAETtpWjAAETtpUTAAETtpTDAAETtpV7AAETtpbHAAETOmPXAAET4AMAARMu5NMAARPqY8cAARPvAAJJ+wABE/LkRwABE/Li0wABE/Lk1wABE/Lk2wABE/Lk3wABE/Lk4wABE/KUSwABE/LkawABE/LkUwABE/LkVwABE+pjvwABFB7YgwABE+pj1wABFCQDAAETLuTnAAEULmPHAAEUMwACSfsAARQ25EcAARQ24tMAARQ25NcAARQ25NsAARQ25N8AARQ25OMAARQ2lEsAARQ25GsAARQ25FMAARQ25FcAARQyWe8AARQuY78AARRmCn8AARRkjwABFC5j1wABFHADAAETLuVnAAEUemPHAAEUfwACSfsAARSC5EcAARSC4tMAARR6Y78AARSO5PcAARSO5QMAARR6Y9cAARSYAAMAAkn/AAEUopQPAAEUpmPHAAEUqwACSf8AARSulEcAARSu5YMAARSu5YcAARSuzBMAARSqCosAARSq5YsAARSmY8sAARTKAvcAARSmY78AARTSlQsAARTTAAJJ/wABFNrlrwABFKZj1wABFOADAAEUopQTAAEU6mPHAAEU7glnAAEU7pUjAAEU7hvXAAEU6mO/AAEU/I8AARTqY9cAARUEAAMAAkoDAAEVDmO/AAEVEuYTAAEVEuYXAAEVDuXHAAEVHmPHAAEVIwACSgMAARUmzBMAARUmlEcAARUm5csAARUmktsAARUeY8sAARU6AvcAARUeY78AARVCle8AARVClPcAARVClUcAARVClTMAARUeY9cAARVUAAMAAkoHAAEVXuYjAAEVYmO/AAEVZlWPAAEVZpX/AAEVZpYHAAEVZpYDAAEVYmPXAAEVeAMAARVe5icAARWCY8cAARWG43sAARWCY78AARWOlf8AARWOlgMAARWCY9cAARWYAwABFV7mKwABFaJjxwABFabjewABFaJjvwABFa6V/wABFa6WAwABFaJj1wABFbgDAAEVXuYzAAEVwmPHAAEVxuN7AAEVwmO/AAEVzpX/AAEVzpYDAAEVwmPXAAEV2AADAAJKCwABFeLmQwABFeZjvwABFermRwABFermSwABFerGFwABFermTwABFermUwABFermVwABFermWwABFermXwABFerG1wABFeoYfwABFerG3wABFermYwABFermZwABFermawABFermbwABFermcwABFermdwABFermewABFermfwABFermgwABFermhwABFermiwABFermjwABFermkwABFerG8wABFermlwABFermmwABFermnwABFermowABFermpwABFermqwABFermrwABFermswABFermtwABFermuwABFermvwABFermwwABFermxwABFermywABFermzwABFerm0wABFerm1wABFerm2wABFerm3wABFerm4wABFerm5wABFerm6wABFerm7wABFerm8wABFeoXLwABFerm9wABFerm+wABFerm/wABFernAwABFernBwABFernCwABFernDwABFerG0wABFernEwABFernFwABFernGwABFernHwABFernIwABFernJwABFernKwABFerGwwABFerGcwABFeoYNwABFernLwABFernMwABFerGxwABFernNwABFernOwABFernPwABFernQwABFernRwABFernSwABFernTwABFernUwABFernVwABFernWwABFernXwABFernYwABFernZwABFernawABFernbwABFerncwABFeZj1wABF0gDAAEV4ud3AAEXUmO/AAEXVud7AAEXVueLAAEXVueDAAEXUmPXAAEXZAMAARXi548AARduY8cAARdydXsAARdyDtcAARdyaX8AARdwnwABF25j1wABF4QDAAEV4ueTAAEXjmPHAAEXkueXAAEXjmO/AAEXmuebAAEXmueDAAEXjmPXAAEXpAMAARXi56cAAReuY8cAAReyWe8AAReyD1MAARewGwABF7LnqwABF7LnrwABF7LnswABF7LntwABF7LnuwABF7LnvwABF7LnwwABF7LnxwABF7KXCwABF7JmOwABF65jvwABF+rnzwABF+rnywABF+rn0wABF+qsXwABF+rn4wABF+rn5wABF+rn6wABF+rn7wABF+rn8wABF+rn9wABF+rn+wABF+rn/wABF+roAwABF+qHbwABF+roBwABF+roFwABF+roJwABF+iPAAEXrmPXAAEYNAMAARXi6DcAARg+Y8cAARhC55cAARg+Y78AARhK54MAARhK55sAARhK6DsAARhK6EMAARhK6EcAARhK6D8AARhK6EsAARhK6E8AARhK6FMAARhK6FcAARhK6FsAARhK6F8AARhK6GMAARhK5kcAARhK5ksAARhK5k8AARhK5lMAARhK5lcAARhK5lsAARhK5l8AARhKxtcAARhKxt8AARhK6GcAARhKGH8AARhK5mMAARhK5mcAARhK5msAARhK5m8AARhK5nMAARhK5ncAARhK5nsAARhK5n8AARhK5oMAARhK5ocAARhK5osAARhK5o8AARhK5pMAARhKxvMAARhK5pcAARhK5psAARhK5p8AARhK5qMAARhK5rsAARhK5r8AARhK5qsAARhK5qcAARhK5q8AARhK5rMAARhK5rcAARhK6GsAARhK5s8AARhK5tMAARhK5tcAARhK5tsAARhK6G8AARhK5t8AARhK5uMAARhK5ucAARhK5usAARhK5vMAARhKFy8AARhK5vcAARhK5v8AARhK5u8AARhK5vsAARhK5wMAARhK5wcAARhK5wsAARhK5w8AARhKxtMAARhK5xMAARhK5xcAARhK5ysAARhKxsMAARhK5xsAARhK5x8AARhK5yMAARhK5ycAARhKxnMAARhKGDcAARhK5y8AARhK5zMAARhKxscAARhK5sMAARhK5ssAARhK5scAARhK5zcAARhK5z8AARhK5zsAARhK50MAARhKxhcAARhK50cAARhK50sAARhK508AARhK51MAARhK51cAARhK51sAARhK518AARhK52MAARhK52cAARhK52sAARhK528AARhK53MAARg+Y9cAARnoAwABFeLocwABGfJjxwABGfWrAAEZ9gpDAAEZ8mO/AAEaAgxzAAEZ8mPXAAEaCAMAARXi6HcAARoSY8sAARoW6HsAARoSY9cAARocAwABFeLofwABGiZjxwABGioMewABGioHqwABGiZjywABGjYFVwABGiZjvwABGj7ogwABGj7oiwABGj7ojwABGj4RewABGj4McwABGj8AAkoLAAEaVuiTAAEaJmPXAAEaXAMAARXi6J8AARpmY8cAARpq0tMAARpq6KMAARpq6KcAARpq6KsAARpq6K8AARpq6LMAARpq59cAARpq6LcAARpq6LsAARpq6L8AARpq6AsAARpq6MMAARpq6McAARpq54cAARpq6B8AARpq6CMAARpmY8sAARquDxsAARqu6OsAARpmY78AARq66M8AARq66NMAARq66NcAARq66A8AARq66NsAARq66OcAARq6li8AARq6CjMAARq66PMAARq6598AARq66PsAARq5WwABGrro/wABGrrpBwABGrro7wABGrrpDwABGroRewABGrrpEwABGrrpFwABGrrpHwABGrrpJwABGrrpNwABGrrpOwABGrrpPwABGrroEwABGrrpTwABGrrpVwABGrroJwABGrrpMwABGriPAAEaZmPXAAEbNAMAARs26MsAARXilBsAARtCY8cAARtGlwcAARtGlwsAARtG0tMAARtG6V8AARtGCVcAARtG6JsAARtGaX8AARtGdXsAARtGDtcAARtG1Y8AARtHAAJKCwABG3LpYwABG0bpZwABG0bpawABG0bpbwABG0bpcwABG0bpdwABG0bpewABG0bpfwABG0bpgwABG0bphwABG0bpiwABG0bpjwABG0bpkwABG0bplwABG0bpmwABG0bpnwABG0bpowABG0bppwABG0bpqwABG0bprwABG0bpswABG0bptwABG0bpuwABG0bpvwABG0bpwwABG0bpxwABG0bpywABG0bpzwABG0bp0wABG0bp1wABG0bp2wABG0bp3wABG0bp4wABG0bp5wABG0bp6wABG0bp7wABG0bp8wABG0bp9wABG0bp+wABG0bp/wABG0bqAwABG0bqBwABG0bqCwABG0bqDwABG0bqEwABG0bqFwABG0bqGwABG0bqHwABG0bqIwABG0bqJwABG0bqKwABG0bqLwABG0JjywABHEYPGwABHEbqPwABHEaVSwABG0JjvwABHFbqNwABHFbqOwABHFbqQwABHFbqUwABHFbqVwABHFbqTwABHFbqWwABHFbb7wABHFahcwABHFbqXwABHFbS5wABHFbZkwABHFbZlwABHFbZmwABHFbZnwABHFbZowABHFbZpwABHFbZqwABHFbZrwABHFbZswABHFbZtwABHFbZvwABHFbZwwABHFbZxwABHFbZywABHFbZzwABHFbZ0wABHFbZ1wABHFbZ2wABHFbZ3wABHFbZ4wABHFbZ5wABHFbZ6wABHFbZ7wABHFbZ8wABHFbZ9wABHFbqYwABHFbqZwABHFbolwABHFbqawABHFbqhwABHFbqdwABHFbqcwABHFbqgwABHFYRSwABHFbo9wABHFbpCwABHFbpIwABHFbqkwABHFbqjwABHFbqlwABHFbqowABHFbqqwABHFbn2wABHFbqrwABHFbqswABHFbqtwABHFbquwABHFbqvwABHFbqwwABHFbqxwABHFbqywABHFbqzwABHFbZuwABHFboJwABHFbq0wABHFbq1wABHFbpMwABHFbq2wABHFbq9wABHFSPAAEbQmPXAAEddAMAARXi6v8AAR1+Y8cAAR2DAAJKCwABHYbrAwABHYbrBwABHYbrCwABHX5jvwABHZZqewABHZYRdwABHZcAAkoLAAEdous3AAEdousXAAEdfmPLAAEdrgVXAAEdrg7fAAEdrYcAAR2u6y8AAR2uAw8AAR2u6zMAAR1+Y9cAAR3LAAJKCwABHc4C1wABFeLrRwABHdZjywABHdoCWwABHdZjvwABHeLq2wABHeIRSwABHeCPAAEd1mPXAAEd8AMAARXi61MAAR36Y9cAAR38AwABFeLrVwABHgZjywABHgrpLwABHgZjvwABHhLq1wABHhLqTwABHhLqVwABHgZj1wABHiADAAEV4utbAAEeKmPHAAEeLutfAAEeLutjAAEeLutnAAEeLutrAAEeLutvAAEeLutzAAEeKmPLAAEeSYcAAR5InwABHkqBLwABHkrrdwABHipjvwABHl7qWwABHl4RSwABHl7qdwABHl7qcwABHl7qgwABHipj1wABHnQDAAEV4ut7AAEefmPLAAEeghdLAAEegut/AAEeguuDAAEefmPXAAEekAMAARXi64cAAR6aY78AAR6e6lsAAR6e6tcAAR6aY9cAAR6oAwABFeLriwABHrJjxwABHrZZ7wABHrbrjwABHrbrkwABHrbVfwABHrJjvwABHsrqUwABHsoRSwABHsiPAAEesmPLAAEe2uuXAAEesmPXAAEe4AMAARXi658AAR7qY78AAR7u6lMAAR7uEUsAAR7sjwABHupj1wABHvwDAAEV4uunAAEfBmPHAAEfCwACSgsAAR8O66sAAR8K668AAR8K67MAAR8GY78AAR8e6k8AAR8e6lMAAR8e67sAAR8GY9cAAR8sAwABFeLrvwABHzZjxwABHzrrwwABHzqVSwABHzsAAkoLAAEfRuvHAAEfRuvLAAEfOlnvAAEfNmPLAAEfVhZrAAEfVhZfAAEfVhTjAAEfNmO/AAEfZuvTAAEfZI8AAR9m6mMAAR9m698AAR9m6ncAAR9m6nMAAR9m6oMAAR82Y9cAAR+EAwABFeLr4wABH45jxwABH5IU4wABH45jvwABH5oRSwABH45j1wABH6ADAAEV4uvnAAEfqmPHAAEfrhTjAAEfqmO/AAEftI8AAR+2EUsAAR+qY9cAAR/AAwABFeLr7wABH8pjvwABH8yPAAEfymPXAAEf1AMAARXi6/cAAR/eY78AAR/iEUsAAR/i6k8AAR/gjwABH95jywABH/Lr+wABH/IU4wABH95j1wABH/wDAAEV4uwDAAEgBmPHAAEgCuwHAAEgBmO/AAEgEhFLAAEgEI8AASAGY8sAASAeFOMAASAGY9cAASAkAwABFeLsEwABIC5jxwABIDJZ7wABIDIU4wABIDLsFwABIDLrkwABIC5jvwABIEbqTwABIEYRSwABIEbqdwABIESPAAEgLmPXAAEgWAMAARXi7B8AASBiY8cAASBm7CMAASBmFUMAASBmlUsAASBiY8sAASB2Fl8AASB2AlsAASBiY78AASCC6mMAASCC698AASCAjwABIIIRSwABIGJj1wABIJQDAAEV4uwrAAEgnmO/AAEgoI8AASCiEUsAASCeY9cAASCsAwABFeLsMwABILZjvwABILiPAAEguhFLAAEgtmPXAAEgxAMAARXi7DsAASDOY8cAASDSWe8AASDOY8sAASDaFl8AASDOY9cAASDgAwABFeLsPwABIOpjxwABIO6zgwABIOpjvwABIPbZuwABIPbqTwABIPbqYwABIPbqZwABIPYRSwABIPbqdwABIPbqcwABIPbqgwABIPSPAAEg6mPLAAEhHuxTAAEg6mPXAAEhJAMAARXi7F8AASEuY78AASEy6k8AASEy6mMAASEy6mcAASEyEUsAASEy6tcAASEwjwABIS5jywABIU4CWwABIS5j1wABIVQDAAEV4uxnAAEhXmPHAAEhYrODAAEhXmPLAAEhahZfAAEhXmO/AAEhcupPAAEhcupjAAEhcupnAAEhchFLAAEhcup3AAEhcupzAAEhcuqDAAEhcI8AASFeY9cAASGUAwABFeLsbwABIZ5jxwABIaLscwABIaLsdwABIaLsewABIaJZ7wABIaLsfwABIaLsgwABIZ5jywABIb4WXwABIb7skwABIb7slwABIb7smwABIb4CWwABIZ5jvwABIdbqTwABIdbqYwABIdbqZwABIdYRSwABIdbq1wABIdSPAAEhnmPXAAEh8wACSgsAASH2AtcAASHy7IcAASHy7IsAASHy7I8AARXi7KMAASIKY8cAASIOCcMAASIKY8sAASIWFl8AASIKY9cAASIcAwABFeLspwABIiZjvwABIioRSwABIiZjywABIjJ8zwABIiZj1wABIjgDAAEV4uyrAAEiQmO/AAEiRhFLAAEiRurXAAEiQmPLAAEiUnzPAAEiUgJbAAEiQmPXAAEiXAMAARXi7K8AASJmY8sAASJq7LMAASJqwRcAASJmY78AASJ26k8AASJmY9cAASJ8AwABFeLstwABIoZjxwABIorsuwABIorsswABIorBFwABIorsvwABIorswwABIoZjvwABIqIRSwABIqLq1wABIqLqTwABIqLqZwABIqLqUwABIqLqdwABIqLqcwABIqLqgwABIqCPAAEihmPXAAEiyAMAASLKFaMAARXi7NsAASLWY8cAASLalUsAASLWY8sAASLiFzcAASLiFz8AASLWY78AASLudKMAASLWY9cAASL0AwABFeLs3wABIv5jvwABIwJ0owABIv5j1wABIwgDAAEV4uzjAAEjEmO/AAEjFhFLAAEjFnSjAAEjFup3AAEjFupzAAEjFuqDAAEjEmPXAAEjLAMAARXi7OcAASM2Y78AASM6EUsAASM6dKMAASM66ncAASM66nMAASM66oMAASM2Y9cAASNQAwABFeLs6wABI1pjvwABI14RSwABI150owABI17qdwABI17qcwABI17qgwABI1pj1wABI3QDAAEV4uzvAAEjfmO/AAEjghFLAAEjgnSjAAEjgup3AAEjgupzAAEjguqDAAEjfmPXAAEjmAMAARXi7PMAASOiY78AASOmEUsAASOmdKMAASOm6ncAASOm6nMAASOm6oMAASOiY9cAASO8AwABFeLs9wABI8ZjvwABI8oRSwABI8p0owABI8rqdwABI8rqcwABI8rqgwABI8Zj1wABI+ADAAEV4uz7AAEj6mO/AAEj7hh3AAEj7hFLAAEj7I8AASPqY8sAASP+Cb8AASP+7P8AASPqY9cAASQIAwABFeLtBwABJBJj1wABJBQDAAEV4u0LAAEkHmO/AAEkIhFLAAEkInSjAAEkIup3AAEkIupzAAEkIuqDAAEkHmPXAAEkOAMAARXi7Q8AASRCY78AASRGEUsAASRGdKMAASRG6ncAASRG6nMAASRG6oMAASRCY9cAASRcAwABFeLtEwABJGZjvwABJGoRSwABJGp0owABJGrqdwABJGrqcwABJGrqgwABJGZj1wABJIADAAEV4u0XAAEkimO/AAEkjhFLAAEkjnSjAAEkjup3AAEkjupzAAEkjuqDAAEkimPXAAEkpAMAARXi7RsAASSuY78AASSyEUsAASSydKMAASSy6ncAASSy6nMAASSy6oMAASSuY9cAASTIAwABFeLtHwABJNJjxwABJNaVSwABJNJjywABJN4XKwABJNJjvwABJOZ0owABJNJj1wABJOwDAAEV4u0jAAEk9mO/AAEk+hFLAAEk+nSjAAEk+up3AAEk+upzAAEk+uqDAAEk9mPXAAElEAMAARXi7ScAASUaY78AASUeEUsAASUedKMAASUe6ncAASUe6nMAASUe6oMAASUaY9cAASU0AwABFeLtKwABJT5jvwABJUIRSwABJUJ0owABJULqdwABJULqcwABJULqgwABJT5j1wABJVgDAAEV4u0vAAElYmO/AAElZI8AASVmEUsAASViY9cAASVwAwABFeLtMwABJXpjvwABJXyPAAElfhFLAAElemPXAAEliAMAARXi7TsAASWSY8cAASWWCScAASWWZWsAASWSY9cAASWgAwABJaLtPwABFeLtQwABJa5jxwABJbLtRwABJa5jvwABJbiPAAEluhFLAAElrmPXAAElxAMAASXG7T8AARXi7U8AASXSY78AASXUjwABJdYRSwABJdJj1wABJeADAAEl4u0/AAEV4u1XAAEl7mPHAAEl8ge3AAEl8u1bAAEl8oyLAAEl7mO/AAEmAI8AASYCEUsAASXuY8sAASYO7V8AASXuY9cAASYUAwABFeLtYwABJh5jvwABJiCPAAEmIhFLAAEmHmPLAAEmLu1rAAEmHmPXAAEmNAMAARXi7W8AASY+Y8cAASZC7XMAASY+Y78AASZIjwABJkoRSwABJj5jywABJlbtdwABJlbtewABJlbtXwABJj5j1wABJmQDAAEV4u1/AAEmbmPHAAEmcu2DAAEmcu2HAAEmcgmvAAEmbmO/AAEmgI8AASaCEUsAASZuY9cAASaMAwABFeLtjwABJpZjxwABJpoYdwABJpZjvwABJqCPAAEmohFLAAEmoufbAAEmouqvAAEmouqzAAEmouq3AAEmouq7AAEmouq/AAEmourDAAEmourHAAEmourLAAEmourPAAEmotm7AAEmourTAAEmlmPPAAEm3uovAAEmlmPXAAEm5lafAAEV4u2vAAEm7mO/AAEm8hFLAAEm8up3AAEm8upzAAEm8uqDAAEm7mPXAAEnBAMAARXi7bMAAScOY78AAScQjwABJxIRSwABJw5j1wABJxwDAAEV4u27AAEnJmO/AAEnKu2/AAEnKI8AAScqEUsAAScmY9cAASc4AwABFeLtxwABJ0JjywABJ0aXBwABJ0JjzwABJ06XBwABJ0JjvwABJ1YRSwABJ1bq0wABJ1bZuwABJ1SPAAEnQmPXAAEnaAMAARXi7csAASdyY8cAASd27c8AASd27dMAASd27dcAASd27dsAASdyY78AASeK7esAASeIjwABJ4oRSwABJ3Jj1wABJ5gDAAEnmu3fAAEnmu3jAAEnmu3nAAEV4u3zAAEnrmPHAAEnsu33AAEnrmPXAAEnuAMAARXi7fsAASfCY8cAASfG7f8AASfCY78AASfOEUsAASfOdKMAASfO6ncAASfO6nMAASfO6oMAASfCY9cAASfkAwABFeLuAwABJ+5jvwABJ/IRSwABJ/J0owABJ/LqdwABJ/LqcwABJ/LqgwABJ+5j1wABKAgDAAEV4u4HAAEoEmO/AAEoFhFLAAEoFnSjAAEoFup3AAEoFupzAAEoFuqDAAEoEmPXAAEoLAMAARXi7gsAASg2Y78AASg6EUsAASg6dKMAASg66ncAASg66nMAASg66oMAASg2Y9cAAShQAwABFeLuDwABKFpjvwABKF4RSwABKF50owABKF7qdwABKF7qcwABKF7qgwABKFpj1wABKHQDAAEV4u4TAAEofmO/AAEogI8AASiCEUsAASh+Y9cAASiMAwABFeLuFwABKJZjvwABKJiPAAEomhFLAAEomupPAAEolmPXAAEoqAMAARXi7h8AASiyY8cAASi21Y8AASiyY78AASi8jwABKL4RSwABKL7qTwABKLJj1wABKMwDAAEV4u4jAAEo1mPHAAEo2sazAAEo2tWPAAEo1mO/AAEo5I8AASjmEUsAASjm6k8AASjWY9cAASj0AwABFeLuJwABKP5jxwABKQLuKwABKP5jvwABKQiPAAEpChFLAAEo/mPXAAEpFAMAARXi7i8AASkeY8cAASkiWe8AASkeY78AASkojwABKSoRSwABKSrqhwABKSrqdwABKSrqcwABKSrqgwABKSrq0wABKR5j1wABKUgDAAEV4u47AAEpUmPHAAEpVu4/AAEpUmO/AAEpXI8AASleEUsAASle2bsAASle6ncAASle6nMAASle6oMAASlSY8sAASl6Fl8AASl67kcAASl67ksAASlSY88AASmK7ksAASlSY9cAASmQAwABFeLuTwABKZpjxwABKZ4U4wABKZ7uPwABKZpjvwABKarr3wABKaiPAAEpqhFLAAEpmmPXAAEpuAMAARXi7lcAASnCY8cAASnGWe8AASnCY78AASnMjwABKc4RSwABKc7qdwABKc7q0wABKc7qTwABKcJj1wABKeQDAAEV4u5fAAEp7mPHAAEp8lnvAAEp7mO/AAEp+I8AASn6EUsAASn66ncAASn66nMAASn66oMAASn66tcAASnuY8sAASoWAlsAASnuY9cAASocAwABFeLuawABKiZjvwABKiiPAAEqKhFLAAEqKupTAAEqJmPXAAEqOAMAARXi7nMAASpCY8cAASpGlUsAASpCY78AASpMjwABKk4RSwABKk7qYwABKk7qZwABKk7qTwABKk7qdwABKk7qcwABKk7qgwABKkJjywABKnIWXwABKnCfAAEqcuo/AAEqQmPXAAEqgAMAARXi7n8AASqKY8cAASqOlUsAASqKY78AASqUjwABKpYRSwABKpbqYwABKpbqZwABKpbqTwABKopjywABKq4WXwABKqyfAAEqrgJbAAEqruo/AAEqimPXAAEqwAMAARXi7osAASrKY8cAASrO7o8AASrO7pMAASrO7pcAASrO7psAASrOCa8AASrO7p8AASrKY9MAASrqgFsAASrKY8sAASryCb8AASry7q8AASry7rcAASry7rsAASry7r8AASry7sMAASrKY78AASsOEUsAASsMjwABKw7qdwABKw7qcwABKw7qgwABKspj1wABKybuowABKybupwABKybuqwABKyYJwwABKyZWnwABFeLuywABKz5jxwABK0LumwABKz5jywABK0rurwABKz5jvwABK1IRSwABK1CPAAErUup3AAErUupzAAErUuqDAAErPmPXAAEraAMAARXi7s8AAStyY8sAASt2CScAAStyY78AASt+EUsAASt8jwABK3Jj1wABK4gDAAEV4u7XAAErkmPHAAErlu7bAAErlu7fAAErlu6bAAErlgmvAAErlrsDAAErlu7jAAErkmPLAAErsu7zAAErsu7vAAErsukvAAErsu73AAErsu77AAErkmO/AAEryurbAAEryhFLAAEryurXAAEryupbAAEryup3AAEryupzAAEryurTAAEryuqDAAEryu7/AAEryI8AASuSY9cAASv0AwABK/bu6wABFeLvEwABLAJjxwABLAbvFwABLAbvGwABLAbumwABLAYJrwABLAbvHwABLAa7AwABLAbu4wABLAJjvwABLCbq2wABLCYRSwABLCbq1wABLCbqWwABLCbqdwABLCbqcwABLCbq0wABLCbqgwABLCbu/wABLCSPAAEsAmPLAAEsUu8nAAEsUu8jAAEsAmPXAAEsXAMAARXi7y8AASxmY78AASxq6tcAASxq6tMAASxqEUsAASxq6ncAASxq6nMAASxq6oMAASxq7v8AASxojwABLGZj1wABLIwDAAEV4u83AAEslmPHAAEsmu87AAEsmwACSgsAASyi7z8AASyWY78AASyojwABLKoRSwABLKrq1wABLKrqWwABLKrqTwABLKrqdwABLKrqcwABLKrq0wABLKrqgwABLKru/wABLJZjywABLNbvUwABLNbvSwABLNbqPwABLJZj1wABLObvQwABLObvRwABFeLvVwABLPJjywABLPbqPwABLPJjvwABLP4RSwABLPJj1wABLQQDAAEV4u9bAAEtDmPLAAEtEhc3AAEtEhc/AAEtDmO/AAEtHhFLAAEtHI8AAS0OY9cAAS0oAwABFeLvYwABLTJjvwABLTYRSwABLTSPAAEtMmPXAAEtQAMAARXi72sAAS1KY8cAAS1OZzMAAS1O58MAAS1O728AAS1OZjMAAS1OCScAAS1O73MAAS1KY78AAS1q6RsAAS1q588AAS1KY9cAAS10AwABFeLvfwABLX5jxwABLYIJtwABLYLo4wABLX5j1wABLYwDAAEV4u+DAAEtlmPLAAEtmasAAS2aCkMAAS2WY78AAS2mEUsAAS2WY9cAAS2sAwABFeLvhwABLbZjvwABLboRSwABLbZj1wABLcADAAEV4u+LAAEtymO/AAEtzhFLAAEtymPLAAEt1uh7AAEtymPXAAEt3AMAARXi748AAS3mY78AAS3q75MAAS3q75cAAS3q75sAAS3q758AAS3q76MAAS3q76cAAS3q76sAAS3mY9cAAS4IAwABFeLvrwABLhJjvwABLhbvswABLhbvtwABLhJj1wABLiADAAEV4u+7AAEuKmPXAAEuLAMAARXi778AAS42Y8cAAS4678MAAS42Y8sAAS5BqwABLkIKQwABLjZjvwABLk4RSwABLjZj1wABLlQDAAEV4u/HAAEuXmPHAAEuYu/LAAEuXmPLAAEuaasAAS5qCkMAAS5q6HsAAS5eY78AAS56EUsAAS5eY9cAAS6AAwABFeLvzwABLopjxwABLo4YtwABLopjywABLpWrAAEulgpDAAEuimO/AAEuohFLAAEuimPXAAEuqAMAARXi79MAAS6yY8cAAS62CbcAAS62ZjMAAS62CScAAS6279cAAS6yY8sAAS7JqwABLsoKQwABLrJjvwABLtYRSwABLrJj1wABLtwDAAEu3rtzAAEV4u/bAAEu6mPHAAEu7u/fAAEu7u/jAAEu7u2HAAEu7u/nAAEu7u/rAAEu7u/vAAEu7gmvAAEu7hSHAAEu7hdLAAEu7gm3AAEu7hkPAAEu7gknAAEu7mYzAAEu7pcLAAEu6mPLAAEvKasAAS8q7/MAAS8qCkMAAS7qY78AAS86EUsAAS7qY9cAAS9AAwABFeLv9wABL0pjxwABL04XSwABL07v+wABL07v/wABL0pjywABL12rAAEvXgpDAAEvSmO/AAEvahFLAAEvSmPXAAEvcAMAARXi8AMAAS96Y8cAAS9+uocAAS9+FzcAAS9+Fz8AAS96Y8sAAS+NqwABL44KQwABL47oewABL3pjvwABL54RSwABL3pj1wABL6QDAAEV4vAHAAEvrmPHAAEvsgm3AAEvsvALAAEvsu1bAAEvsoyLAAEvrmPLAAEvxasAAS/GCkMAAS+uY78AAS/SEUsAAS+uY9cAAS/YAwABFeLwDwABL+JjxwABL+YJvwABL+YYtwABL+YJJwABL+ZmMwABL+aXCwABL+JjywABL/2rAAEv/gpDAAEv4mO/AAEwChFLAAEv4mPXAAEwEAMAARXi8BMAATAaY78AATAeEUsAATAe6k8AATAe6ncAATAe6nMAATAe6oMAATAaY9cAATA0AwABFeLwFwABMD5jxwABMEIJwwABMELrzwABMD5jywABME7urwABME4PFwABMD5jvwABMFoRSwABMFrqTwABMFrqdwABMFrqcwABMFrqgwABMFiPAAEwPmPXAAEwdvAbAAEwdvAfAAEV4vAnAAEwgmPHAAEwhJ8AATCHAAJKCwABMIyjAAEwhKcAATCG8DMAATCG8DcAATCCY78AATCgjwABMIJj1wABMKgDAAEV4vA7AAEwsmPHAAEwtgmvAAEwtvA/AAEwtvBDAAEwsmO/AAEwxhFLAAEwxupPAAEwxup3AAEwxupzAAEwxuqDAAEwxI8AATCyY8sAATDi8EsAATCyY9cAATDoAwABFeLwTwABMPJjxwABMPbwUwABMPbwPwABMPJjywABMQLwWwABMQLpLwABMPJjvwABMQ4RSwABMQ7qdwABMQ7qcwABMQ7qgwABMQyPAAEw8mPXAAExJAMAARXi8GMAATEuY8cAATEyuwMAATEy8GcAATEyF9cAATEuY8sAATFC8FsAATFC6S8AATEuY78AATFO6tcAATFOEUsAATFO6ncAATFO6nMAATFO6oMAATFO7v8AATFMjwABMS5j1wABMWwDAAEV4vB3AAExdmPHAAExevA/AAExersDAAExehfXAAExelpzAAExdmPLAAExjukvAAExdmO/AAExlurXAAExlhFLAAExlu7/AAExlup3AAExlupzAAExluqDAAExlI8AATF2Y9cAATG0AwABFeLwewABMb5jywABMcLwWwABMb5jvwABMcoRSwABMcrqdwABMcrqcwABMcrqgwABMciPAAExvmPXAAEx4AMAARXi8IMAATHqY9cAATHsAwABFeLwhwABMfZjxwABMfrumwABMfZjvwABMgIRSwABMgLqdwABMgLqcwABMgLqgwABMgCPAAEx9mPXAAEyGAMAARXi8I8AATIiY78AATImEUsAATIm6ncAATIm6nMAATIm6oMAATIkjwABMiJj1wABMjwDAAEV4vCXAAEyRmPHAAEySvCbAAEySu6bAAEyRmO/AAEyVhFLAAEyVup3AAEyVupzAAEyVuqDAAEyVI8AATJGY9cAATJsAwABFeLwowABMnZjvwABMnoRSwABMnrqdwABMnrqcwABMnrqgwABMniPAAEydmPXAAEykAADAAJKDwABMprwswABMp5jxwABMqIC9wABMqIPGwABMqLwtwABMqLwuwABMqLwvwABMqJ2rwABMqJ4iwABMqLwwwABMqCnAAEynmPLAAEyyJ8AATKeY78AATLQjwABMp5j1wABMtgDAAEympQfAAEy4mPHAAEy5g+zAAEy5gmvAAEy5p4vAAEy5tcfAAEy5g8bAAEy5vDLAAEy4mPLAAEzAvDbAAEzAvDfAAEzAuFnAAEzAlcDAAEzAqtrAAEzAgL3AAEzAhEjAAEzAhU7AAEzAhVDAAEzAs7jAAEzAt+3AAEzAt/LAAEzAt+7AAEzAndjAAEzAlY3AAEzAvEbAAEzAvEfAAEy4mO/AAEzSvDjAAEzSsBDAAEzStrLAAEzSvEnAAEzSvEjAAEzSs7vAAEzSX8AATNKEF8AATNIjwABM0rxMwABM0rxOwABM0rxPwABMuJj0wABM3wDAAEzfvDzAAEzfohnAAEzfm2TAAEzfvD7AAEzfruzAAEzfJ8AATN+V/8AATN8gwABM37w/wABM37xBwABM37xCwABM37xDwABM37HlwABM37APwABMuJj1wABM75WnAMAAkoTAAEzxvFPAAEzymO/AAEzzvFTAAEzzgozAAEzymPXAAEz2AMAATPG8VcAATPiY78AATPm8VsAATPm8V8AATPm8WMAATPm8WcAATPm8WsAATPm8W8AATPm8XMAATPm8XcAATPm8XsAATPm8YMAATPm8YcAATPm8ZMAATPm8ZsAATPiY8sAATQe18MAATQe8X8AATQe8YsAATQe8Y8AATQe40sAATPiY9cAATQ0AwABM8bxnwABND5jxwABNEMAAkoTAAE0RtsXAAE0RvGjAAE0RvGnAAE0RvGrAAE0RvGvAAE0RvGzAAE0RvG3AAE0RvG7AAE0RvG/AAE0RvHDAAE0RvHHAAE0RvHLAAE0RvHPAAE0RvHTAAE0RvHXAAE0RvHbAAE0RvHfAAE0RvHjAAE0RvHnAAE0RvHrAAE0PmPLAAE0mvHvAAE0mwACShMAATSiwTsAATSi5EMAATSa8X8AATSa18MAATSa8scAATQ+Y78AATS61/cAATS7AAJKEwABNMLyAwABNMLyCwABNMLyEwABNMLyFwABNMLyGwABNMLyOwABNMLyrwABNMLyXwABNMLyKwABNMLx+wABNMLx9wABNLrBXwABNLrYUwABNLrYVwABNLrBVwABNLrX/wABNLrxUwABNLrBbwABNLryywABNLryzwABNLoKMwABND5j1wABNRgDAAEzxvL7AAE1ImPHAAE1JwACShMAATUq2xcAATUq8v8AATUq8esAATUq8bMAATUq8bcAATUq8bsAATUq8wMAATUq8wcAATUq8wsAATUq8w8AATUq8xMAATUm8YsAATUm18MAATUm8tcAATUm8X8AATUm8tsAATUm8t8AATUm65MAATUm8Y8AATUm40sAATUiY78AATV+8YcAATV+8xsAATV+8x8AATV+8VsAATV+8zsAATV+8z8AATV+8XMAATV+8XcAATV+8XsAATV/AAJKEwABNabyAwABNabzUwABNX7xXwABNX7xgwABNX7xYwABNX7xZwABNX7xawABNX7xbwABNX7xkwABNX7xmwABNSJjywABNdLzIwABNdLzKwABNdLzLwABNdLzNwABNSJj1wABNeQAAwACShcAATXu83sAATXyY78AATX20X8AATX2lW8AATXyY8sAATYC838AATXyY9cAATYIAwABNe7zgwABNhJjywABNhZvbwABNhbYdwABNhJjvwABNiLXgwABNiLX9wABNiLX/wABNiLBXwABNiLBVwABNiLBbwABNiLYYwABNiLYZwABNiLYUwABNiLYVwABNiLYSwABNhJj1wABNlADAAE17vOHAAE2WmPHAAE2XgpTAAE2XgmvAAE2WmPLAAE2ag8bAAE2WmO/AAE2cSMAATZwjwABNlpj1wABNnwDAAE17vOjAAE2hmPHAAE2ivOnAAE2ivOrAAE2ivOvAAE2hmO/AAE2mvOzAAE2mI8AATaGY8sAATam878AATaGY9cAATasAwABNe7zzwABNrZjxwABNrsAAkoXAAE2vvPTAAE2vvGvAAE2vvPXAAE2vvPbAAE2vvGzAAE2vvG3AAE2vvG7AAE2vvG/AAE2vvHDAAE2vvHHAAE2vvHLAAE2vvHPAAE2vvPfAAE2vvHTAAE2vvHnAAE2vvPjAAE2vvPnAAE2vswTAAE2vsE7AAE2vvPrAAE2vtR3AAE2vuRDAAE2vuRbAAE2vvPvAAE2vuRfAAE2vvPzAAE2vvP3AAE2vuRjAAE2vvP7AAE2vuTfAAE2vvHXAAE2vvP/AAE2vvQDAAE2vvQHAAE2vvQLAAE2vvQPAAE2vvHbAAE2vvQTAAE2vvQXAAE2vuLTAAE2tmPLAAE3YvHvAAE3YvQbAAE3YujXAAE3Ym9vAAE3Yth3AAE3YvN/AAE3YtfDAAE2tmO/AAE3gthjAAE3gthnAAE3gteDAAE3gtf3AAE3gwACShcAATeW8gsAATeW8gMAATeW8hMAATeW8hcAATeW8hsAATeW8jsAATeW9D8AATeW8fsAATeW8fcAATeW8isAATeW8l8AATeW8q8AATeC9CMAATeCwV8AATeC2FMAATeC2FcAATeCwW8AATeCwVcAATeC1/8AATeC9FcAATeC14cAATeC0X8AATeC9FsAATeC9G8AATeClW8AATeC9HcAATeC9H8AATeClg8AATa2Y9cAATgIAAMAAkobAAE4EmPDAAE4FvS3AAE4EpQnAAE4HmPLAAE4IgmrAAE4IsCXAAE4IsCbAAE4IsCfAAE4IsCjAAE4IgVXAAE4HmO/AAE4PsDnAAE4PI8AATg+0ssAATg+EMcAATgeY9cAAThQAwABOBL0zwABOFpjvwABOF7BXwABOF7BZwABOF7BVwABOF7BbwABOFpj1wABOHADAAE4EpQrAAE4emPHAAE4fwACShsAATiC9NMAATiC9NcAATiC9NsAATiC9N8AATh6Y8sAATiWBVcAATiWwJcAATiWwJ8AATiWwJsAATiWwKMAATh6Y78AATiu9OMAATiuwV8AATiuwWcAATiuwVcAATiuwW8AATh6Y9cAATjEAwABOMZWnwABOBL05wABONJjxwABONb06wABONcAAkobAAE43vTvAAE43vTzAAE40mO/AAE46wACShsAATju9PcAATjqwWcAATjqwV8AATjqwVcAATjqwW8AATjqERsAATjSY8sAATkK9PsAATjSY9cAATkQAwABOBL0/wABORpjxwABOR7RpwABOR8AAkobAAE5JvTXAAE5JvTbAAE5JvTTAAE5JvTfAAE5GmPLAAE5OgmrAAE5OgVXAAE5OsCXAAE5OsCfAAE5OsCbAAE5OsCjAAE5GmO/AAE5VsFfAAE5VsFnAAE5VsFXAAE5VsFvAAE5VsDnAAE5VI8AATkaY9cAATlwAwABOBLRAwABOXpjxwABOX4C9wABOXpjvwABOYSPAAE5emPXAAE5jAMAATgSlCMAATmWY78AATma0asAATmalj8AATmWY9cAATmkAwABOBLANwABOa5jvwABObLA6wABObLA7wABObLA8wABObLA9wABOa5j1wABOcQDAAE4EtEHAAE5zmPHAAE50wACShsAATnW9Q8AATnW9RMAATnW9RcAATnW9RsAATnOY78AATnqwOsAATnqwO8AATnqwPMAATnqwPcAATnOY9cAATn8AAMAAkofAAE6BvU3AAE6CmPXAAE6DAMAAToGlC8AAToWY8sAAToa1U8AAToa0psAAToa4z8AAToa408AAToalWcAAToa418AAToa0WcAAToaxxsAAToa40MAAToa318AAToa42MAAToa2HcAAToaH9sAAToalbsAAToa0OMAAToa9TsAAToawAMAAToa9T8AAToWY78AATpm29cAATpm3hcAATpm3hsAATpm3p8AATpm3DMAATpmbbMAATpm3W8AATpm3WcAATpm3YMAATpm3X8AATpm3WsAATpm3XcAATpm3WMAATpm4mcAATpm3XsAATpm9UcAATpm1fcAATpm2ocAATpm8r8AAToWY9cAATq0AwABOgbzcwABOr5jvwABOsLXhwABOsKWDwABOsL0VwABOsL0dwABOr5j1wABOtQDAAE6BvVLAAE63mO/AAE64vMbAAE64vMfAAE64vM7AAE64vM/AAE63mPLAAE69vLbAAE69vLfAAE69uuTAAE69vMvAAE69vM3AAE69vLXAAE69vMjAAE69vMrAAE63mPXAAE7GAMAAToGlDMAATsiY8sAATsm418AATsm1U8AATsm0psAATsm4z8AATsm408AATsmlWcAATsm0WcAATsmH9sAATsm9KsAATsm3XMAATsm9F8AATsm9HMAATsm42MAATsm4yMAATsm40MAATsm318AATsmlbsAATsm9K8AATsm0bsAATsiY78AATt229cAATt20X8AATsiY9cAATuAAAMAAkojAAE7imPHAAE7jpoUAwACSicAATuW9VMAATuaY8cAATucnwABO58AAkonAAE7pKMAATucpwABO5518wABO571ywABO571zwABO5710wABO5711wABO55qMwABO5712wABO553zwABO5713wABO552YwABO5714wABO5715wABO5534wABO5716wABO5717wABO552ywABO5718wABO552owABO5537wABO5719wABO571+wABO55mwwABO571/wABO572AwABO572BwABO572CwABO572DwABO5519wABO572EwABO5pjvwABPCSPAAE7mmPXAAE8LAMAATuWGHMAATw2Y8cAATw7AAJKJwABPD4aXwABPDZjywABPEYJrwABPEZpKwABPEYPGwABPEb2LwABPEb2MwABPDZjvwABPF4RSwABPF7A5wABPF59OwABPF72FwABPF6c1wABPF7DQwABPF8AAkonAAE8evYbAAE8ehnnAAE8evYfAAE8XSMAATxcjwABPDZj1wABPJADAAE7lvY3AAE8mmPLAAE8ngmvAAE8mmO/AAE8phFLAAE8pn07AAE8pwACSicAATyy9hsAATyyGecAATyy9h8AATyaY9cAATzAAwABO5b2PwABPMpjxwABPM51TwABPMpjywABPNYJrwABPMpjvwABPN4RSwABPN8AAkonAAE85vYbAAE85hnnAAE85vYfAAE83n07AAE83vYXAAE8ymPXAAE8/AMAATuW9ksAAT0GY8cAAT0Kq88AAT0GY8sAAT0SCa8AAT0GY78AAT0aEUsAAT0bAAJKJwABPSL2GwABPSIZ5wABPSL2HwABPRp9OwABPRr2FwABPQZj1wABPTgDAAE7lvZXAAE9QmPHAAE9RrC3AAE9QmPLAAE9TgmvAAE9QmO/AAE9VhFLAAE9VwACSicAAT1e9hsAAT1eGecAAT1e9h8AAT1WfTsAAT1W9hcAAT1CY9cAAT10AwABO5b2YwABPX5jxwABPYJ3ZwABPX5jywABPYoJrwABPX5jvwABPZIRSwABPZMAAkonAAE9mvYbAAE9mhnnAAE9mvYfAAE9kn07AAE9kvYXAAE9fmPXAAE9sAMAATuW9m8AAT26Y8sAAT2+Ca8AAT26Y78AAT3GEUsAAT3HAAJKJwABPc72GwABPc4Z5wABPc72HwABPcZ9OwABPcb2FwABPbpj1wABPeQDAAE7lvZ7AAE97mPHAAE98gpTAAE98KcAAT3uY8sAAT3+Ca8AAT3+9i8AAT3+9jMAAT3uY78AAT4OEUsAAT4PAAJKJwABPhb2GwABPhYZ5wABPhb2HwABPg59OwABPg7A5wABPg72FwABPe5j1wABPjADAAE7lvaPAAE+OmPHAAE+PgpTAAE+PKcAAT46Y8sAAT5KCa8AAT5K9i8AAT5K9jMAAT46Y78AAT5aEUsAAT5awOcAAT5afTsAAT5a9hcAAT5bAAJKJwABPm72GwABPm4Z5wABPm72HwABPjpj1wABPnwDAAE7lvabAAE+hmPHAAE+igpTAAE+ig2jAAE+iKcAAT6GY8sAAT6aCa8AAT6a9i8AAT6a9jMAAT6GY78AAT6qEUsAAT6rAAJKJwABPrL2GwABPrIZ5wABPrL2HwABPqp9OwABPqrA5wABPqr2FwABPoZj1wABPswDAAE7lvazAAE+1mPHAAE+2gpTAAE+2gknAAE+2tcfAAE+2W8AAT7WY8sAAT7uCa8AAT7u9i8AAT7u9jMAAT7WY78AAT7+EUsAAT7/AAJKJwABPwb2GwABPwYZ5wABPwb2HwABPv72ywABPv722wABPv7A5wABPv59OwABPtZj1wABPyQDAAE7lvb7AAE/LmPHAAE/MhdfAAE/LmPLAAE/OgmvAAE/OvYzAAE/LmO/AAE/RhFLAAE/RwACSicAAT9O9hsAAT9OGecAAT9O9h8AAT9GwOcAAT9GfTsAAT9G9hcAAT8uY9cAAT9oAwABO5b3BwABP3JjxwABP3YC9wABP3JjywABP34JrwABP3JjvwABP4YRSwABP4cAAkonAAE/jvYbAAE/jhnnAAE/jvYfAAE/hn07AAE/hvYXAAE/cmPXAAE/p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AFEPvZbAAFEPvZnAAFEPvZzAAFEPh0/AAFEPvaTAAFEPvafAAFEPva3AAFEPvb/AAFEPvcLAAFEPn1TAAFEPvdTAAFEPhTDAAFEPtUXAAFEPsaDAAFEPvgHAAFEPvgXAAFEPvgnAAFEPsaPAAFEPviHAAFEPvinAAFEPvizAAFEPvjLAAFEPhcjAAFEPvhfAAFEPvhvAAFEOmPXAAFEtAMAATuW+OMAAUS+Y8cAAUTCD6cAAUS+Y78AAUTKCjsAAUTK+OsAAUTKa8cAAUTK9yMAAUTK9kMAAUTK9lsAAUTK9k8AAUTK9nMAAUTK9mcAAUTKHT8AAUTK9pMAAUTK9p8AAUTK9rcAAUTK9v8AAUTK9wsAAUTKfVMAAUTKFMMAAUTK91MAAUTK1RcAAUTKxoMAAUTK+AcAAUTK+BcAAUTK+CcAAUTKxo8AAUTK+F8AAUTK+G8AAUTK+IcAAUTK+KcAAUTK+LMAAUTK+MsAAUTKFyMAAUTIjwABRL5j1wABRUwAAwACSisAAUVWnOcAAUVaY78AAUVenPMAAUVeDjsAAUVaY9cAAUVoAwABRVb5IwABRXJjywABRXYC9wABRXb5QwABRXJjvwABRYL5JwABRYL5MwABRYL5OwABRYL5PwABRXJj1wABRZQDAAFFVvlHAAFFnmPHAAFFogL3AAFFogZvAAFFovlLAAFFovlDAAFFnmO/AAFFtvknAAFFtvkzAAFFtvk7AAFFtvk/AAFFtwACSisAAUXK+VMAAUWeY9cAAUXQAwABRVb5VwABRdpjvwABRd75WwABRdpjywABRebgJwABRdpj1wABRewDAAFFVvlfAAFF9mO/AAFF+VsAAUX6+WMAAUX6CjMAAUX2Y8sAAUYJhwABRgro1wABRfZj1wABRhQDAAFFVvlnAAFGHmPHAAFGIvlrAAFGIujXAAFGHmO/AAFGLwACSisAAUYy+W8AAUYtWwABRi75YwABRi4KMwABRi75WwABRh5jywABRkrgJwABRh5j1wABRlADAAFFVvl/AAFGWmO/AAFGXvl3AAFGWmPXAAFGZAMAAUVW+YMAAUZuY8cAAUZyCj8AAUZuY78AAUZ7AAJKKwABRn75bwABRnr5dwABRniPAAFGbmPLAAFGjYcAAUZuY9cAAUaUAwABRVb5iwABRp5jxwABRqGHAAFGogZPAAFGowACS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ocDAAFNimO/AAFN0nv3AAFN0qmzAAFN0v9XAAFNimPXAAFN4AADAAJKXwABTepjxwABTe7/awABTeqj1wABTfZjxwABTfoKUwABTfqLNwABTfoaZwABTfoTJwABTfZjywABTg4JJwABTg6QlwABTg4RXwABTg68zwABTfZjvwABTiKL5wABTiL/ZwABTiL+GwABTiL+HwABTiL+IwABTfZj1wABTjgAAwACSmMAAU5CY78AAU5GorMAAU5GfosAAU5G/3sAAU5Cog8AAU5WY8cAAU5aaJsAAU5WY8sAAU5iizcAAU5iEZsAAU5iE4cAAU5io18AAU5ivM8AAU5iE9sAAU5iE4sAAU5ie48AAU5WY78AAU6GElsAAU6G/h8AAU5WY88AAU6SE4sAAU5WY9cAAU6YAAMAAkpnAAFOoqITAAFOpmPLAAFOqhvfAAFOqrzPAAFOqgpTAAFOpmO/AAFOuv9nAAFOuv4fAAFOpmPXAAFOxAADAAJKawABTs6ihwABTtJjxwABTtZVzwABTtJjvwABTt5g1wABTt4aJwABTt4aMwABTt4aOwABTt4aQwABTt4aUwABTt4aawABTt4aswABTt4akwABTtJj1wABTwQAAwACSm8AAU8O/5MAAU8SY8cAAU8WExcAAU8WFBcAAU8SY8sAAU8iCk8AAU8iCScAAU8ifE8AAU8iEycAAU8ikJcAAU8SY78AAU86iFMAAU86/iMAAU86/hsAAU86e5sAAU8SY9cAAU9MAAMAAkpzAAFPVmO/AAFPWqOcAwACSncAAU9io78AAU9mY8cAAU9qHccAAU9qpLsAAU9qF0sAAU9qEfMAAU9mY9cAAU98AAMAAkp7AAFPhqPDAAFPimPHAAFPjqUfAAFPjqarAAFPjhKrAAFPjh3HAAFPimPLAAFPohGbAAFPimO/AAFPqqVLAAFPimPXAAFPsAADAAJKfwABT7pjvwABT77/uwABT7qjxwABT8ZjxwABT8oeQwABT8oeRwABT8qmpwABT8ppiwABT8oMpwABT8oSqwABT8qkswABT8odxwABT8qkxwABT8qk2wABT8ZjywABT/YRmwABT8ZjvwABT/6lUwABT8Zj1wABUAQAAwACSoMAAVAOpAsAAVASY8cAAVAXAAJKgwABUBr/vwABUBJjywABUCIKTwABUBJjvwABUCqL5wABU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EMAAQInAAFUQwABAfsAAVRDAAECEwABVEMAAQG3AAFUQwABAasAAVRDAAEBnwABVEMAAQIjAAFUQwABAi8AAVRDAAEBvwABVEMAAQHLAAFUQogPAAFUQwABA38AAVRCiJcAAVRCiJ8AAVRCiLMAAVRCiM8AAVRDAAEB0wABVEKIgwABVEMAAQGXAAFUQwABA5cAAVRDAAECpwABVEMAAQKzAAFUQwABApcAAVRDAAEDpwABVEMAAQOrAAFUQwABA7sAAVRDAAEDvwABVEMAAQPDAAFUQwABA8sAAVRDAAECrwABVEMAAQPPAAFUQwABArsAAVRDAAED2wABVEMAAQK/AAFUQwABAssAAVRDAAED3wABVEMAAQPjAAFUQwABAXMAAVRDAAECTwABVEMAAQJXAAFUQwABAl8AAVRDAAEBjwABVEMAAQPzAAFUQwABA/sAAVRDAAECZwABVEMAAQEvAAFUQwABAtsAAVRCjZcAAVRCjZ8AAVRCiMcAAVRCiwsAAVRCixcAAVRDAAEBJwABVEKP1wABVEKLWwABVEKLtwABVEKLvwABVEKMCwABVEKMDwABVEKMGwABVEKMIwABVEKL7wABVEKMLwABVEMAAQFLAAFUQo7HAAFUQwABAs8AAVRDAAEEGwABVEKLMwABVEKL/wABVEKLTwABVEKMAwABVEMAAQFTAAFUQoWDAAFUQoWfAAFUQwABBB8AAVRCj7MAAVRCj7cAAVRCj7sAAVRCj8cAAVRDAAEA6wABVEKM1wABVEMAAQQ3AAFUQwABAjcAAVRDAAECSwABVEKJawABVEKJbwABVEKGBwABVEKF+wABVEMAAQKPAAFUQoXDAAFUQwABATsAAVRDAAEBQwABVEMAAQRDAAFUQwABBEsAAVRDAAECmwABVEKKXwABVEJ7bwABVEMAAQMfAAFUQwABBE8AAVRChT8AAVQSY9cAAVX0AAMAAkqjAAFV/nszAAFWAmPHAAFWBnzLAAFWBnwzAAFWBotHAAFWBqJbAAFWBqUbAAFWBqUvAAFWBn4nAAFWAmPLAAFWJglDAAFWJhJPAAFWJgknAAFWJhFfAAFWJn4vAAFWJpCXAAFWJlXPAAFWJomLAAFWJhEjAAFWJgKzAAFWJXMAAVYmouMAAVYCY78AAVZaEkMAAVZaoksAAVZapMMAAVZae28AAVZapUsAA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AFdPwABBecAAVzKY88AAV1uCbcAAVzKY9cAAV10AwABXMZ7LwABXX5jxwABXYMAAkrXAAFdhwABBesAAV2HAAEF8wABXYKmOwABXYIJrwABXYMAAQXvAAFdgqQ/AAFdgvqXAAFdfmPLAAFdpnw/AAFdpnrvAAFdpoYrAAFdpgm3AAFdpwABBf8AAV2nAAEGAwABXaYSdwABXaa4owABXaYJqwABXX5jvwABXc8AAkrXAAFd0wABBfcAAV3TAAEGFwABXc6L5wABXc6jjwABXc6m6wABXc6nCwABXX5jzwABXe4JtwABXe6GKwABXX5j1wABXfgDAAFcxqPPAAFeAmPHAAFeBwACStcAAV4LAAEGTwABXgamOwABXgcAAQZTAAFeBwABBlcAAV4HAAEGWwABXgaGAwABXgakPwABXgJjywABXiqG8wABXip67wABXiqEHwABXiqIYwABXioeewABXiqGKwABXioJrwABXiqirwABXisAAQX/AAFeKmTTAAFeKgmrAAFeAmO/AAFeWovnAAFeWnv3AAFeWwABBc8AAV5bAAEGYwABXlqF9wABXlqjjwABXlqm6wABXlqnCwABXlqF1wABXgJj1wABXoADAAFcxqPfAAFeimPHAAFejoaDAAFejhTjAAFeimPLAAFemgm3AAFeimO/AAFeov4LAAFeoovnAAFeoqOPAAFeimPXAAFesAADAAJK2wABXrqjqwABXr5jxwABXsIVVwABXsKLNwABXsKF3wABXr5jywABXtIC9wABXtKQlwABXr5jvwABXt4QxwABXt6L5wABXt6jfwABXt58RwABXt6n3wABXt58dwABXr5j1wABXvgAAwACSt8AAV8CeyMAAV8GY8cAAV8IiwABXwoJXwABXwqKTwABXwZjywABXxqQlwABXxoJJwABXwZjvwABXyb+IwABXyb+GwABXwZj1wABXzAAAwACSuMAAV86o1cAAV8+Y8cAAV9Cfw8AAV8+Y8sAAV9KHccAAV8+Y78AAV9TAAEGhwABXz5j1wABX1gAAwACSucAAV9io9sAAV9mY8cAAV9qE4cAAV9qpXMAAV9qha8AAV9qizcAAV9mY8sAAV9+AvcAAV9+kJcAAV9mY78AAV+KEMcAAV+Ki+cAAV+Ko38AAV+KfEcAAV+Kp98AAV+KfHcAAV9mY9cAAV+kAAMAAkrrAAFfrqK/AAFfsmPLAAFftgL3AAFfsmPXAAFfvAADAAJK7wABX8Z7KwABX8pjxwABX84C9wABX81vAAFfznwvAAFfymO/AAFf3nuHAAFf3o/TAAFf3pBDAAFf3lq/AAFf3hDHAAFf3qffAAFf3wABBqcAAV/ei+cAAV/eo38AAV/efEcAAV/e+/8AAV/efHcAAV/KY8sAAWASkJcAAV/KY9cAAWAYAwABYBsAAQaYAwACSvMAAWAmo68AAWAqY8cAAWAuAvcAAWAufDMAAWAuEV8AAWAuaYsAAWAuHccAAWAupMsAAWAuEwcAAWAupscAAWAqY8sAAWBSEZsAAWBShwMAAWAqY78AAWBeXUcAAWBepUsAAWAqY9cAAWBoAAMAAkr3AAFgcns3AAFgdmPLAAFgenwvAAFgegL3AAFgepCXAAFgeocDAAFgdmO/AAFgjo/TAAFgjpBDAAFgjlq/AAFgjnuHAAFgjhDHAAFgjI8AAWCO+/8AAWCOfHcAAWCOp98AAWCOi+cAAWCOo38AAWCOfEcAAWB2Y9cAAWDAAAMAAkr7AAFgyns7AAFgzmPHAAFg0hvfAAFg0omLAAFg0gL3AAFg0hFfAAFgzmPLAAFg5ohbAAFg5ocDAAFg5rzPAAFgzmO/AAFg9v4jAAFg9v4bAAFgzmPXAAFhAAADAAJK/wABYQqiwwABYQ5jxwABYRIWHwABYRIa0wABYRMAAQbDAAFhEqQ/AAFhEqW/AAFhDmPLAAFhKpAnAAFhKpCXAAFhKnrvAAFhKgO3AAFhKgknAAFhKg8bAAFhDmO/AAFhRhDHAAFhRI8AAWFG/iMAAWFG/hsAAWFHAAEG0wABYUYc6wABYUanCwABYUZ8dwABYUUjAAFhRwABBtcAAWEOY9cAAWFwAwABYXMAAQbEAwACSwMAAWF+o7cAAWGCY8cAAWGGEJsAAWGGHccAAWGGEZsAAWGCY78AAWGWj9MAAWGWpV8AAWGWpWMAAWGUjwABYYJj1wABYagAAwACSwcAAWGyo+MAAWG2Y8sAAWG6kJcAAWG2Y9cAAWHAAAMAAksLAAFhyrYzAAFhzmPLAAFh0gKzAAFhzmO/AAFh2wABBusAAWHbAAEG8wABYdqHCwABYdqKXwABYdsAAQb3AAFh2opTAAFh2opbAAFh2rbzAAFh2omfAAFh2omjAAFh2odbAAFh2odnAAFh2odzAAFh2od7AAFh2wABApcAAWHbAAECmwABYdsAAQOXAAFh2wABAqcAAWHbAAEDwwABYdsAAQOrAAFh2wABBEMAAWHbAAEDuwABYdsAAQKvAAFh2wABArMAAWHbAAEDywABYdsAAQRLAAFh2wABA78AAWHbAAECuwABYdsAAQPbAAFh2wABAr8AAWHbAAECywABYdsAAQcrAAFh2wABAfMAAWHbAAEHLwABYdsAAQczAAFh2wABBzcAAWHajSMAAWHajSsAAWHbAAEHQwABYdqM1wABYdq29wABYdqOCwABYdq2/wABYdq3BwABYdq3CwABYdq3EwABYdsAAQdPAAFh2wABAs8AAWHbAAEHUwABYdsAAQInAAFh2wABB1cAAWHahwcAAWHbAAEENwABYdsAAQI3AAFh2wABB18AAWHbAAEHYwABYdqLtwABYdqLvwABYdsAAQFLAAFh2owrAAFh2owvAAFh2oWfAAFh2wABB2cAAWHbAAEHawABYdqJ1wABYdqJ4wABYdqJ6wABYdq24wABYdqJ8wABYdqKLwABYdq3FwABYdq3HwABYdqOKwABYdqOcwABYdqOHwABYdqOIwABYdq3IwABYdq3KwABYdqN1wABYdqN+wABYdqN0wABYdqN/wABYdq22wABYdqFxwABYdsAAQGPAAFh2wABA/MAAWHbAAEHdwABYdqNuwABYdsAAQQbAAFh2wABAVMAAWHbAAEBOwABYdsAAQFDAAFh2wABA6cAAWHbAAEBLwABYdsAAQLbAAFh2wABB3sAAWHbAAEB5wABYdsAAQHTAAFh2wABB38AAWHbAAEBJwABYdsAAQeDAAFh2oknAAFh2okXAAFh2okfAAFh2rcvAAFh2rczAAFh2wABB48AAWHbAAEB+wABYdsAAQITAAFh2wABAiMAAWHbAAEHlwABYdsAAQG3AAFh2wABB5sAAWHbAAEBqwABYdsAAQGfAAFh2o0nAAFh2o1LAAFh2wABB58AAWHaiXsAAWHaiWcAAWHaiWsAAWHaiW8AAWHbAAEHowABYdqJQwABYdqJVwABYdqGDwABYdqGEwABYdqGAwABYdqGBwABYdqF+wABYdsAAQerAAFh2pAXAAFh2wABB7MAAWHajnsAAWHajoMAAWHajpMAAWHbAAEHuwABYdsAAQGXAAFh2ornAAFh2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mPXAAFwBAMAAW9PAAEQtwABcA5jxwABcBIDtwABcBIWHwABcBMAARBbAAFwDmO/AAFwII8AAXAOY9cAAXAqGnMAAXAqGnQDAAJLOwABcDZjwwABcDsAARC7AAFwOwABEL8AAXA2Y8sAAXBGB7sAAXBHAAERZwABcEcAARFrAAFwNmO/AAFwVwACSzsAAXBbAAERWwABcFsAARFvAAFwVwABEV8AAXBWGXMAAXBXAAERcwABcFcAARF3AAFwNwABEMMAAXB2Y8cAAXB6XQcAAXB7AAEQxwABcHsAARDLAAFwewABEM8AAXB2Y9MAAXCPAAEQ1wABcHZjvwABcJcAAREfAAFwlwABESMAAXCUjwABcHZj1wABcKcAARDTAAFwNwABEUMAAXCuY8cAAXCwnwABcLIG9wABcLMAARELAAFwswABEQ8AAXCyWnMAAXCuY78AAXDKEMcAAXDJIwABcMiPAAFwrmPLAAFw2g8bAAFwrmPXAAFw4AADAAJLPwABcOpjwwABcO8AARGHAAFw6mO/AAFw9wABEfMAAXDrAAERkwABcP5jxwABcQIKHwABcQMAARGXAAFxAwABEZsAAXEDAAERnwABcP5jzwABcRcAARGjAAFw/mO/AAFxHlo3AAFxHwABEa8AAXEeHZMAAXEdLwABcR4C/wABcR5l2wABcR4ClwABcR4RewABcR4JGwABcR4P9wABcR8AARG3AAFxHgKvAAFxHrMfAAFxHwABEcMAAXEeXU8AAXD+Y8sAAXFeDaMAAXFcpwABcV4PVwABcV2HAAFxXgVXAAFxXg7fAAFw/mPXAAFxeAMAAXDrAAERxwABcYJjxwABcYYPRwABcYJjywABcY1zAAFxjYcAAXGOBVcAAXGODt8AAXGODHsAAXGOB6sAAXGOAw8AAXGCY78AAXGuWjcAAXGuAq8AAXGuBpcAAXGuElcAAXGuDHMAAXGuD/cAAXGuWlcAAXGuDX8AAXGuWi8AAXGtYwABca4HWwABca4CtwABca5VxwABca5aZwABca5aawABca5aEwABca5aYwABca5aPwABca5aUwABca5aXwABca5aOwABca5aSwABca5abwABcayPAAFxgmPXAAFyEAMAAXDrAAERywABchpjxwABch8AARGjAAFyHwABEc8AAXIaY8sAAXIqDYcAAXIphwABcipjgwABchpjvwABcjpaNwABcjmTAAFyOS8AAXI6Av8AAXI5WwABcjoClwABcjoCuwABcjqAzwABcjoC7wABcjqBEwABcjpa1wABcjqBFwABcjoJGwABcjp86wABcjqBHwABcjqBJwABcjoRewABcjqBGwABcjoYuwABcjpdTwABcjpdWwABcjoFYwABcjqA5wABcjoNkwABcjqA6wABcjpwHwABcjqA/wABcjpzCwABchpjzwABcq4MewABcq4HqwABcq2HAAFyGmPXAAFyvAMAAXDrAAER1wABcsZjxwABcssAARGjAAFyxmPLAAFy0l3nAAFyxmO/AAFy2lo3AAFy2gxzAAFy2VsAAXLaApcAAXLaEXsAAXLaXUcAAXLaXUsAAXLaXVcAAXLaXU8AAXLaXVsAAXLaEB8AAXLaXWMAAXLaXV8AAXLaXWcAAXLaCRsAAXLaVccAAXLGY9cAAXMcAwABcOsAARHbAAFzJmPHAAFzKgL3AAFzKwABEd8AAXMrAAER4wABcyZjvwABcziDAAFzOpBDAAFzJmPXAAFzRAMAAXDrAAER7wABc05jxwABc1IC9wABc1MAARHfAAFzUwABEeMAAXNOY78AAXNggwABc2KQQwABc05j1wABc2wAAwACS0MAAXN3AAER9wABc3pjxwABc38AAktDAAFzgwABEfsAAXN6Y8sAAXOJhwABc4oFVwABc4oO3wABc4oNowABc4inAAFzig9XAAFzemO/AAFzph2TAAFzpwABEa8AAXOlLwABc6YP9wABc6YC/wABc6Zl2wABc6YClwABc6YRewABc6YJGwABc6ZaNwABc6cAARG3AAFzpgKvAAFzprMfAAFzpwABEcMAAXOmXU8AAXOkjwABc3pj1wABc+gAAwACS0cAAXPzAAESDwABc/ZjxwABc/sAAktHAAFz/wABEhMAAXP2Y8sAAXQFhwABdAYFVwABdAYO3wABdAVzAAFz9mO/AAF0GgxzAAF0Gl1HAAF0Gg/3AAF0GVsAAXQaApcAAXQaEXsAAXQaCRsAAXQaXUsAAXQaXU8AAXQaXVsAAXQaEB8AAXQbAAJLRwABdEpd2wABdBpdYwABdBpdXwABdBpdZwABdBpdVwABdBpVxwABdBiPAAFz9mPXAAF0aAADAAJLSwABdHJjxwABdHcAAktLAAF0ewABE5cAAXRyY8sAAXSDAAETFwABdHJjvwABdIsAARObAAF0iwABE6cAAXSLAAETrwABdIsAAROzAAF0cwABEicAAXSeY78AAXSjAAESKwABdKMAARIzAAF0owABEjcAAXSjAAESOwABdKMAARI/AAF0owABEkcAAXSjAAESSwABdKMAARJPAAF0owABElMAAXSjAAESXwABdKMAARJnAAF0nmPLAAF00wABElsAAXSeY88AAXTbAAESWwABdJ5j1wABdOADAAF0cwABEnsAAXTqY78AAXTuc9sAAXTqY9cAAXT0AwABdHMAARJ/AAF0/mO/AAF1AnPbAAF0/mPXAAF1CAMAAXRzAAESgwABdRJjxwABdRYRAwABdRJjvwABdR5z2wABdRJj1wABdSQDAAF0cwABEocAAXUuY8sAAXUymhMAAXUuY78AAXU5qwABdTsAARKLAAF1OgpDAAF1OpYvAAF1OhFvAAF1OgozAAF1OwABEpcAAXU7AAESmwABdS5j1wABdVwDAAF0cwABEp8AAXVmY8cAAXVrAAJHZwABdW4PewABdW4PfwABdW4PgwABdWZjywABdX4PiwABdX4PjwABdWZjzwABdYoPjwABdWZjvwABdZIPkwABdZIPlwABdZIPmwABdWZj1wABdaADAAF0cwABEqMAAXWqY8cAAXWumhMAAXWuBk8AAXWqY9cAAXW4AwABdHMAARKnAAF1wmPHAAF1xwABEqsAAXXCY78AAXXOli8AAXXOCjMAAXXPAAESlwABdc8AARKbAAF1wmPXAAF14AMAAXRzAAEStwABdepjxwABde8AARK7AAF17wABEr8AAXXqY78AAXX5qwABdfoKQwABdfqWLwABdfoKMwABdfsAARKXAAF1+wABEpsAAXXqY9cAAXYUAwABdHMAARLHAAF2HmPHAAF2IgO7AAF2IwABEssAAXYjAAESzwABdh5jvwABdjFbAAF2MwABEtcAAXYzAAES3wABdjMAARLjAAF2Mgk/AAF2MhDHAAF2MI8AAXYeY9cAAXZQAwABdlIb0wABdlMAARLTAAF2Ug/PAAF0cwABEvMAAXZmY8cAAXZq0tMAAXZrAAES9wABdmsAARJXAAF2ZmO/AAF2ewABEt8AAXZ7AAES+wABdmZj1wABdoQDAAF0cwABEv8AAXaOY8cAAXaSZp8AAXaSF5sAAXaTAAETAwABdpMAARMHAAF2kwABEwsAAXaTAAETDwABdpMAARJbAAF2jmO/AAF2swABEisAAXazAAESMwABdrMAARI/AAF2swABEkcAAXazAAESSwABdrMAARJPAAF2swABEjcAAXazAAESUwABdrMAARI7AAF2swABEl8AAXazAAETHwABdrMAARMbAAF2swABEzcAAXazAAETIwABdrMAARNDAAF2swABEt8AAXazAAETXwABdrMAARJnAAF2swABEycAAXaOY9cAAXcAAAMAAktPAAF3CwABE7cAAXcOY8cAAXcTAAJLTwABdxaqnwABdxcAARO7AAF3FwABE78AAXcOY9MAAXckAwABdw5jvwABdy8AARPHAAF3Lh2TAAF3LwABEa8AAXctLwABdyyPAAF3Lg/3AAF3LgL/AAF3LmXbAAF3LhF7AAF3LgKXAAF3LgkbAAF3Llo3AAF3LwABEbcAAXcuAq8AAXcusx8AAXcvAAERwwABdy5dTwABdy8AAktPAAF3dwABE+MAAXcOY8sAAXd9hwABd34FVwABd34O3wABd34NowABd3ynAAF3fg9XAAF3DmPXAAF3mwACS08AAXeeGcwDAAJLUwABd6cAARPrAAF3qmPHAAF3rgL3AAF3rwACS1MAAXe218cAAXe218sAAXe2188AAXe219MAAXe219cAAXe219sAAXe2198AAXe3AAET7wABd66WOwABd65blwABd66odwABd67XWwABd67RMwABd6pjywABd+6U2wABd+7XZwABd+7XYwABd+6WQwABd+6WWwABd+5vbwABd6pjvwABeAqWSwABeAsAAktTAAF4EtgbAAF4EtfrAAF4Etf7AAF4EtgXAAF4EthHAAF4EthPAAF4EtgfAAF4EthfAAF4EthvAAF4CpWPAAF4CpZHAAF4CtenAAF4CtezAAF4CterAAF4CtevAAF4Cte3AAF4Cg/3AAF4Cn4/AAF4CI8AAXeqY9cAAXhgAAMAAktXAAF4auLLAAF4bmPHAAF4cwABFBsAAXhzAAJLVwABeHsAARQfAAF4ewABFCMAAXh6lpsAAXh7AAEUJwABeHJ7RwABeHLVdwABeG5jywABeJcAAktXAAF4muO3AAF4lesAAXiW42sAAXiWwb8AAXiWAvcAAXhuY78AAXizAAJLVwABeLcAARQ3AAF4suNnAAF4spXfAAF4bmPXAAF4xAMAAXhq4scAAXjOY78AAXjTAAEUVwABeNMAARRfAAF40wABFGMAAXjTAAEUZwABeNMAARRrAAF40wABFG8AAXjTAAEUcwABeNMAARR3AAF40wABFHsAAXjSwo8AAXjSwocAAXjTAAEUgwABeM5j1wABeQQDAAF4asAjAAF5DmPLAAF5EwABFIcAAXkOY78AAXkbAAEUUwABeRsAARSLAAF5GwABFI8AAXkbAAEUkwABeRsAARSXAAF5GwABFJsAAXka1asAAXkOY9cAAXk4AAMAAktbAAF5QmPHAAF5RwABGv8AAXlCY78AAXlPAAJLWwABeVMAARsDAAF5QwABFMcAAXlaY8sAAXldhwABeVpjvwABeWYKMwABeWYKYwABeWYKQwABeWbF4wABeWbf4wABeWYh4wABeWbA0wABeWbHRwABeWbA1wABeWYG7wABeWbGnwABeWbAywABeWbUAwABeWbC3wABeWbhCwABeWZfXwABeWZfHwABeWZfTwABeWcAARTLAAF5ZwABFM8AAXlnAAEU0wABeWYcTwABeWcAARTXAAF5ZwABFNsAAXlnAAEU3wABeWbcVwABeWbfpwABeWbfqwABeWcAARTjAAF5ZwABFOcAAXlnAAEU6wABeWcAARTvAAF5ZwABFPMAAXlnAAEU9wABeWYcUwABeWcAART7AAF5ZwABFP8AAXlnAAEVAwABeWcAARUHAAF5ZsMvAAF5ZvEXAAF5ZwABFQsAAXlmwuMAAXlm3OsAAXlmwM8AAXlm0/MAAXlmwucAAXlmtIsAAXlm3FsAAXlmwOMAAXlm0/cAAXlmwusAAXlnAAEVDwABeWcAARUTAAF5ZwABFRcAAXlm36MAAXlmwzMAAXlnAAEVGwABeWcAARUfAAF5ZtP7AAF5ZwABFSMAAXlnAAEVJwABeWcAARUrAAF5ZwABFS8AAXlm0+8AAXlm0/8AAXlmxzcAAXlmx0MAAXlmxz8AAXlmwbMAAXlm5f8AAXlm438AAXlnAAEVNwABeVpj1wABeowDAAF5QwABFTsAAXqWY78AAXqaCmMAAXqaCkMAAXqa44sAAXqa44cAAXqa45sAAXqbAAEVPwABeprjgwABeprmCwABepsAARU3AAF6mscPAAF6mscHAAF6msCnAAF6msC3AAF6mscvAAF6msC/AAF6msLbAAF6mscLAAF6msCvAAF6mtPnAAF6msLPAAF6muEDAAF6mwABFUcAAXqbAAEVSwABepsAARVPAAF6mwABFVMAAXqbAAEVVwABepsAARVbAAF6mhyPAAF6mwABFV8AAXqbAAEVYwABepsAARVnAAF6mtxLAAF6mt+XAAF6mt+fAAF6mwABFWsAAXqbAAEVbwABepsAARVzAAF6mwABFXcAAXqbAAEVewABepsAARV/AAF6mhyTAAF6mwABFYMAAXqbAAEVhwABepsAARWLAAF6mwABFY8AAXqaZCsAAXqa8RMAAXqbAAEVkwABeppkdwABeprc4wABeprAswABeprT0wABeppkcwABepqzTwABeprcTwABeprAwwABeprT1wABeprC1wABepsAARWXAAF6mwABFZsAAXqbAAEVnwABeprfkwABeprDKwABepsAARWjAAF6mwABFacAAXqbAAEVqwABepsAARWvAAF6mtPbAAF6mwABFbMAAXqbAAEVtwABeprTzwABeprT4wABeprHFwABeprHJwABeprHIwABeprBrwABepZj1wABe8wDAAF5QwABFbsAAXvWY78AAXvbAAEVvwABe9sAARXDAAF72wABFccAAXvbAAEVywABe9sAARXPAAF71mPXAAF78AMAAXlDAAEV0wABe/pjvwABe/8AARXXAAF7/wABFdsAAXv/AAEV3wABe/8AARXjAAF7/wABFecAAXv6Y9cAAXwUAwABeUMAARXrAAF8HmO/AAF8IwABFe8AAXwjAAEV8wABfCMAARX7AAF8IwABFgMAAXwjAAEWBwABfB5j1wABfDgDAAF5QwABFg8AAXxCY78AAXxHAAEWEwABfEJj1wABfEwDAAF5QwABFhcAAXxWY78AAXxaxxcAAXxaxycAAXxaxyMAAXxWY9cAAXxoAwABeUMAARYbAAF8cmO/AAF8dsc3AAF8dsdDAAF8dsc/AAF8cmPXAAF8hAMAAXlDAAEWHwABfI5jxwABfJLjewABfJMAAktbAAF8mwABFiMAAXybAAEWJwABfJsAARYrAAF8mwABFi8AAXybAAEWMwABfJsAARY3AAF8mwABFjsAAXya0ysAAXybAAEWPwABfJsAARZDAAF8mwABFkcAAXybAAEWSwABfJsAARZTAAF8mwABFlcAAXyTAAEWTwABfI5jvwABfNoKYwABfNoKQwABfNsAARU3AAF82sXjAAF82wABFQcAAXzaHFMAAXzbAAJLWwABfPcAARaTAAF89wABFqcAAXz3AAEWtwABfPcAARa7AAF89wABFscAAXz3AAEW3wABfPcAARbTAAF89wABFu8AAXz3AAEXDwABfPcAARcDAAF89wABFycAAXz3AAEXLwABfPcAARZ/AAF89wABF5cAAXz3AAEXpwABfPcAARePAAF89wABF6sAAXz3AAEWywABfPcAARaHAAF89wABGA8AAXz3AAEYEwABfPcAARZbAAF89wABFl8AAXz3AAEYBwABfPcAARgDAAF89wABFosAAXz3AAEWvwABfNsAART/AAF82wABFMsAAXzaXx8AAXzaX08AAXzaX18AAXzawt8AAXzawNMAAXza4QsAAXzaBu8AAXzax0cAAXzbAAEU3wABfNsAARTjAAF82wABFwcAAXzbAAEU5wABfNsAARTrAAF82wABFO8AAXzbAAEU8wABfNrDLwABfNrC4wABfNrC5wABfNq0iwABfNrC6wABfNsAARUPAAF82sMzAAF82wABFSMAAXzbAAEVJwABfNsAARUrAAF82uX/AAF82uN/AAF82sdDAAF82sc3AAF82sc/AAF8jmPLAAF95wABFncAAXyOY9cAAX3sAwABeUMAARgnAAF99mPHAAF9+uN7AAF9+wACS1sAAX4DAAEYKwABfgLjwwABfgLjvwABfgMAARgvAAF+AwABGDMAAX4DAAEWMwABfgMAARY3AAF+AwABFjsAAX4C0ysAAX4DAAEWPwABfgMAARZDAAF+AwABFlMAAX4DAAEWVwABffZjvwABfjoKYwABfjoKQwABfjrjiwABfjrjhwABfjsAARU/AAF+OuObAAF+OuODAAF+OuYLAAF+OwABFTcAAX46xw8AAX46ZCsAAX46ZHcAAX46ZHMAAX46s08AAX46wtcAAX47AAJLWwABfnsAARg3AAF+ewABGD8AAX57AAEYOwABfnsAARhDAAF+ewABGLcAAX57AAEYuwABfnsAARjDAAF+ewABGNsAAX57AAEYzwABfnsAARhLAAF+ewABGOsAAX57AAEYxwABfnsAARcPAAF+ewABGQ8AAX57AAEZGwABfnsAARkLAAF+ewABGR8AAX57AAEY8wABfnsAARknAAF+ewABGSsAAX57AAEYRwABfnsAARljAAF+ewABGWcAAX57AAEWWwABfnsAARZfAAF+ewABGO8AAX57AAEYTwABfnsAARjnAAF+ewABGL8AAX47AAEVjwABfjockwABfjsAARWHAAF+OwABFVMAAX47AAEVSwABfjsAARVPAAF+OwABFUcAAX46ws8AAX464QMAAX46wLcAAX46wtsAAX46xy8AAX47AAEVZwABfjsAARVrAAF+OwABGQcAAX47AAEVbwABfjsAARVzAAF+OwABFXcAAX46wysAAX47AAEVpwABfjsAARWrAAF+OwABFXsAAX47AAEVlwABfjsAARWzAAF+OscnAAF+OscXAAF+OscjAAF99mPLAAF/XuN3AAF/XuNzAAF/XwABFUMAAX9fAAEWdwABf18AAktbAAF/cwABGT8AAX32Y9cAAX94AwABeUIcJwABf4JjxwABf4YRAwABf4cAAktbAAF/jwABGXsAAX+OdXMAAX+CY78AAX+bAAJLWwABf58AARZbAAF/nwABFl8AAX+fAAEYBwABf58AARgDAAF/nwABFosAAX+fAAEWvwABf5oKMwABf4JjywABf72HAAF/gmPXAAF/xAMAAXlDAAEZfwABf85jxwABf9MAAktbAAF/1mKrAAF/1mKnAAF/zmO/AAF/4wACS1sAAX/nAAEWWwABf+cAARZfAAF/5wABGYMAAX/nAAEY7wABf+cAARhPAAF/5wABGOcAAX/nAAEYvwABf85jywABgAcAAktbAAGACwABGT8AAX/OY9cAAYAQAwABeUMAARmXAAGAGmPHAAGAHJ8AAYAfAAJLWwABgCSjAAGAHKcAAYAecH8AAYAfAAEZmwABgB4PxwABgB8AARmfAAGAHgKzAAGAHwABAh8AAYAeE78AAYAeGo8AAYAfAAEZowABgB8AARkzAAGAHwABGacAAYAe8D8AAYAfAAEZqwABgB5cCwABgB4YdwABgB4SvwABgB5wiwABgB5wgwABgBpjvwABgHiPAAGAGmPXAAGAgAMAAXlDAAEZrwABgIpjxwABgIyfAAGAjwACS1sAAYCUowABgIynAAGAjhEjAAGAjmibAAGAimO/AAGAqI8AAYCKY9cAAYCwAwABeUMAARmzAAGAumPHAAGAvJ8AAYC/AAJLWwABgMSjAAGAvKcAAYC/AAEZtwABgL7sSwABgL8AARm7AAGAvwABGb8AAYC/AAEZwwABgLpjvwABgOSPAAGAumPXAAGA7AMAAXlDAAEZxwABgPZjxwABgPifAAGA+wACS1sAAYEAowABgPinAAGA+mibAAGA+gmrAAGA+g/PAAGA+wABBl8AAYD6GrsAAYD7AAEZywABgPoYdwABgPZjvwABgSiPAAGA9mPXAAGBMAMAAXlDAAEZzwABgTpjxwABgTyfAAGBPwACS1sAAYFEowABgTynAAGBPhJ3AAGBPmTTAAGBPwABGUcAAYE+xKsAAYE6Y78AAYFgjwABgTpj1wABgWgDAAF5QwABGdMAAYFyY8cAAYF0nwABgXcAAktbAAGBfKMAAYF0pwABgXZomwABgXcAAQZfAAGBcmO/AAGBkI8AAYFyY9cAAYGYAwABeUKdAwABgaJjxwABgaYCWwABgaJjywABga4PGwABgaJjvwABgbUjAAGBtI8AAYGiY9cAAYHAAwABeUMAARnbAAGBymPHAAGBzJ8AAYHPAAJLWwABgdSjAAGBzKcAAYHOHq8AAYHPAAEZ3wABgc6l6wABgc8AARnjAAGBzhVbAAGBzurzAAGBzhpnAAGBzntLAAGBzwABGecAAYHPAAEZ6wABgcpjvwABggiPAAGBymPXAAGCEAMAAXlDAAEZ7wABghpjxwABgh8AAktbAAGCIl5HAAGCGmO/AAGCKmvHAAGCKwABGfMAAYIqGjsAAYIq1JcAAYIq1JMAAYIqGmsAAYIqGlMAAYIqGpMAAYIqGjMAAYIq1H8AAYIq1HsAAYIaY9cAAYJYAwABeUMAARn3AAGCYmPHAAGCZJ8AAYJnAAJLWwABgmyjAAGCZKcAAYJmHq8AAYJnAAEZ3wABgmcAARn7AAGCZhVbAAGCZwABGeMAAYJm6vMAAYJmGmcAAYJme0sAAYJmFAsAAYJnAAEZ/wABgmcAARoDAAGCZwABGgcAAYJnAAEaCwABgmJjvwABgqyPAAGCYmPXAAGCtAMAAXlDAAEaDwABgr5jxwABgsMAAktbAAGCxl5HAAGCvmO/AAGCzwABGfMAAYLOYNcAAYLOGicAAYLOGjMAAYLOGjsAAYLOGkMAAYLOGlMAAYLOGmsAAYLOGrMAAYLOGpMAAYK+Y9cAAYL4AwABeUMAARoXAAGDAmPHAAGDBwACS1sAAYMKXkcAAYMLAAEaGwABgwJjvwABgxYKOwABgwJj1wABgxwDAAF5QwABGicAAYMmY8cAAYMrAAJLWwABgy7rAwABgy8AARobAAGDJmO/AAGDOntzAAGDJmPXAAGDQAMAAXlDAAEaMwABg0pjxwABg08AAktbAAGDUwABGjcAAYNTAAEaOwABg0pjvwABg18AARjjAAGDSmPXAAGDZAMAAXlDAAEaPwABg25jxwABg3IPzwABg3MAAktbAAGDewABGkMAAYN7AAEaRwABg3sAARpLAAGDewABGk8AAYN7AAEaUwABg25jvwABg5MAAktbAAGDlwABGlcAAYOXAAEaZwABg5MAARjXAAGDkwABGP8AAYOTAAEY3wABg5MAARjLAAGDkwABGQMAAYOQjwABg25j1wABg7gDAAF5QwABGncAAYPCY8cAAYPGD88AAYPHAAJLWwABg88AARpPAAGDzwABGlMAAYPCY78AAYPbAAJLWwABg98AARpnAAGD2wABGMsAAYPbAAEZAwABg9iPAAGDwmPXAAGD8AMAAXlDAAEafwABg/pjxwABg/4PzwABg/8AAktbAAGEBwABGoMAAYQHAAEahwABhAcAARqLAAGD+mO/AAGEFwACS1sAAYQbAAEajwABhBsAARqTAAGEFwABGS8AAYQXAAEXNwABhBcAARk3AAGEFwABFz8AAYQUjwABg/pj1wABhDgDAAF5QwABGqcAAYRCY78AAYRGxwcAAYRGwKcAAYRGwL8AAYRGxwsAAYRGwK8AAYRHAAEVgwABhEcAARV/AAGERsDDAAGERwABFVcAAYRGwLMAAYRHAAEVkwABhEbT0wABhEbT1wABhEcAARVbAAGERt+fAAGERwABFZ8AAYRG35MAAYRG35cAAYRG0+cAAYRG3OMAAYRG3EsAAYRG3E8AAYRHAAEVmwABhEcAARWjAAGERwABFa8AAYRG09sAAYRG8RMAAYRHAAEVtwABhEbTzwABhEbT4wABhEcAARWLAAGERhyPAAGERwABFV8AAYRHAAEVYwABhEbBrwABhEJj1wABhNQDAAF5QwABGq8AAYTeY78AAYTiwNcAAYTixp8AAYTi3OsAAYTjAAEVEwABhOLAzwABhOLfpwABhOLAywABhOMAARTPAAGE4wABFPsAAYTjAAEVCwABhOLT8wABhOLT9wABhOLUAwABhOMAARUXAAGE4t+jAAGE4wABF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AGI4mPXAAGJbAMAAYgXAAEcOwABiXZjxwABiXpZ7wABiXoKUwABiXZjywABiYbPawABiYYPGwABiYYJrwABiXZjvwABiZUjAAGJltIrAAGJlhrrAAGJlhFLAAGJlpzXAAGJlsNDAAGJdmPXAAGJsAMAAYgW2MMAAYm6Y8sAAYm+0ucAAYm+DxsAAYm6Y78AAYnJIwABicrSKwABibpj1wABidQDAAGIFwABHE8AAYneY8cAAYnjAAEcUwABieMAAktnAAGJ6lp3AAGJ3mPTAAGJ8AMAAYneY8sAAYn6oXMAAYn6DxsAAYn6Ca8AAYneY78AAYoKGusAAYoJIwABigoRSwABigrDQwABigqc1wABid5j1wABiiMAAktnAAGKJhnPAAGIFwABHFcAAYouY8sAAYoysLcAAYoy7ZsAAYouY9cAAYo8AwABiBcAARxbAAGKRmPHAAGKSqvPAAGKSwACS2cAAYpTAAEcXwABikZjywABilqwtwABilrtnwABilqrhwABilsAARwjAAGKWg8bAAGKWgmvAAGKRmPTAAGKdAMAAYpGY78AAYp+2ccAAYp+2cMAAYp/AAEcZwABin4a6wABin0jAAGKfhFLAAGKfsNDAAGKfpzXAAGKRmPXAAGKowACS2cAAYqmGc8AAYgXAAEccwABiq5jxwABirKwtwABiq5j0wABirgDAAGKrmPLAAGKwtnfAAGKwhsnAAGKwwABHB8AAYrCq4cAAYrDAAEcIwABisMAARwnAAGKwwABHCsAAYrCDxsAAYrCCa8AAYquY78AAYrqGusAAYrpIwABiuoRSwABiurDQwABiuqc1wABiq5j1wABiwMAAktnAAGLBhnPAAGIFwABHJMAAYsOY9MAAYsQAwABiw5jywABixrtlwABixp1TwABixoJrwABiw5jvwABiyoa6wABiyqHswABiyoRSwABiyrDQwABiw5j1wABiz8AAktnAAGLQhnPAAGIFwABHJsAAYtKY9MAAYtMAwABi0pjywABi1btqwABi1Z1TwABi1YPGwABi0pjvwABi2aHswABi2UjAAGLZpzXAAGLSmPXAAGLdwACS2cAAYt6Gc8AAYgXAAEcnwABi4Jj0wABi4QDAAGLgmPLAAGLju2nAAGLjnVPAAGLjg8bAAGLgmO/AAGLnoezAAGLnSMAAYuenNcAAYuCY9cAA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wACS2sAAZJ/AAEdvwABkn8AAR3XAAGSfwABHd8AAZJ7AAEdxwABknsAAR3PAAGSetSXAAGSetSTAAGSeho7AAGSehprAAGSehpTAAGSehqTAAGSehozAAGSetR/AAGSetR7AAGSamPXAAGSuAMAAY8fAAEeBwABksJjxwABkscAAktrAAGSywABHgsAAZLEfwABksJjvwABktcAAR4PAAGS1wABHhMAAZLCY9cAAZLgAwABjx8AAR4XAAGS6mO/AAGS7gp/AAGS7wABHhsAAZLvAAEeDwABku8AAR4fAAGS7wABHhMAAZLvAAEeIwABku8AAR4nAAGS7wABHisAAZLvAAEeLwABku8AAR4zAAGS7wABHjcAAZLuGjsAAZLu1JcAAZLu1JMAAZLuGmsAAZLuGlMAAZLuGpMAAZLuGjMAAZLu1H8AAZLu1HsAAZLvAAJLawABk0MAAR4/AAGS6mPXAAGTSAMAAY8fAAEeQwABk1JjvwABk1cAAR4PAAGTVwABHhMAAZNSY9cAAZNgAwABjx8AAR5HAAGTamPHAAGTbW8AAZNua6sAAZNqY78AAZN6a4MAAZN7AAEdxwABk3sAAR3PAAGTamPXAAGTiAMAAY8fAAEeSwABk5JjxwABk5YC9wABk5JjvwABk5yPAAGTkmPXAAGTpAMAAY8fAAEeTwABk65jxwABk7MAAktrAAGTtwABHlMAAZO3AAEeVwABk7cAAR5bAAGTtwABHl8AAZO3AAEeYwABk65jvwABk84KfwABk88AAktrAAGT1wABHm8AAZPXAAEecwABk9cAAR53AAGT1wABHnsAAZPXAAEefwABk9cAAR5nAAGT1wABHoMAAZPXAAEelwABk84aOwABk84aMwABk87UfwABk87UlwABk87UkwABk84aawABk84aUwABk84akwABk87UewABk65j1wABlBwDAAGPHwABHpsAAZQmY8cAAZQrAAEdUwABlCZjywABlDLRZwABlCZjvwABlDsAAR6fAAGUOwABHqMAAZQ7AAEepwABlDsAAR6rAAGUOtBzAAGUOn1TAAGUOho7AAGUOwABHrMAAZQ7AAEetwABlDsAAR67AAGUOwABHr8AAZQ7AAEewwABlDoaUwABlDoaawABlDsAAR7bAAGUOwABHt8AAZQ61JcAAZQ61JMAAZQmY9cAAZSEAwABjx8AAR8bAAGUjmO/AAGUkrirAAGUkwABHrMAAZSTAAEetwABlJMAAR67AAGUkwABHr8AAZSTAAEewwABlJLUewABlI5j1wABlLADAAGPHwABHx8AAZS6Y78AAZS+q9cAAZS+s4MAAZS/AAEeswABlL8AAR63AAGUvwABHrsAAZS/AAEevwABlL8AAR7DAAGUvtR7AAGUumPXAAGU4AMAAY8fAAEfKwABlOpjxwABlO8AAktrAAGU8wABHy8AAZTqY78AAZT6q9cAAZT7AAEe2wABlPsAAR8zAAGU6mPXAAGVCAMAAY8fAAEfOwABlRJjxwABlRcAAR8/AAGVFwABH0MAAZUXAAEfRwABlRJjywABlSbRZwABlRJjvwABlS6r1wABlS6zgwABlS8AAR8zAAGVLwABH0sAAZUvAAEepwABlS8AAR9PAAGVLtBnAAGVLwABH1MAAZUu9GsAAZUvAAEfVwABlS8AAR6rAAGVLwABH1sAAZUvAAEfYwABlRJj1wABlWQAAwACS28AAZVuY78AAZVzAAEfwwABlXMAAR/XAAGVcwABH+cAAZVzAAEf6wABlW8AAR9vAAGVhmPHAAGViwABH3MAAZWLAAEfdwABlYsAAR97AAGVhmO/AAGVmgcfAAGVmtYLAAGVmtYHAAGVmtYTAAGVhmPXAAGVrAMAAZVvAAEfiwABlbZjywABlbrC9wABlbZj1wABlcADAAGVbwABH48AAZXKY78AAZXPAAEfkwABlcpj1wABldQDAAGVbwABH5cAAZXeY78AAZXjAAEfmwABleMAAR+jAAGV3mPXAAGV7AMAAZVvAAEfpwABlfZjvwABlfsAAR+fAAGV9mPXAAGWAAMAAZVvAAEfqwABlgpjxwABlg8AARNjAAGWDwACS28AAZYXAAEfrwABlhcAAR+zAAGWFwABH7cAAZYKY8sAAZYmwvcAAZYnAAJLbwABli7OHwABliYCWwABlgpj1wABljgAAwACS3MAAZZCY78AAZZHAAEsowABlkJl0wABlk5jxwABllMAASAXAAGWUwABIDMAAZZTAAEgPwABllMAASPPAAGWUwABI/sAAZZTAAEj/wABllMAAktzAAGWbwABJAMAAZZvAAEkQwABlm8AASRLAAGWbwABJE8AAZZvAAEkVwABlm8AASRbAAGWbwABJF8AAZZvAAEkYwABlm8AASRnAAGWbtsXAAGWbwABJKcAAZZvAAEkqwABlm8AASSvAAGWbwABJLsAAZZvAAEkvwABlm8AASTDAAGWbwABJMsAAZZvAAEkzwABlm8AASTbAAGWUwABJAcAAZZTAAEkDwABllMAASQXAAGWUwABJBsAAZZTAAEkIwABllMAASQrAAGWUwABJDMAAZZTAAEkOwABllLh/wABllLiAwABllMAASRTAAGWUwABJGsAAZZSd9sAAZZTAAEkcwABllMAASR7AAGWUwABJH8AAZZTAAEkgwABllMAASSHAAGWUwABJIsAAZZTAAEkjwABllMAASSTAAGWUwABJJcAAZZTAAEkmwABllMAASSfAAGWUwABJKMAAZZTAAEkswABllMAASS3AAGWUwABJMcAAZZTAAEk1wABlk5jywABlzMAASTfAAGXMwABJOMAAZcywccAAZczAAJLcwABl0LBOwABl0LUdwABl0MAASULAAGXMwABJQ8AAZczAAElFwABlzMAASUfAAGXMwABJSMAAZcythcAAZczAAElKwABlzMAASUzAAGXMwABJTcAAZczAAElrwABlzMAASabAAGWTmO/AAGXewACS3MAAZd/AAEk6wABl38AASU7AAGXfwABJUMAAZd/AAElXwABl38AASXLAAGXfwABJdsAAZd/AAEl3wABl38AASX/AAGXfwABJgsAAZd/AAElvwABl38AASXHAAGXfwABJhMAAZd/AAElkwABl38AASYrAAGXfwABJW8AAZd/AAElowABl38AASZHAAGXfwABJksAAZd/AAEmTwABl38AASYbAAGXfwABJhcAAZd/AAEmYwABl38AASZbAAGXfwABJVsAAZd/AAEmdwABl38AASaDAAGXfwABJlMAAZd7AAElAwABl3sAASUHAAGXewABJUcAAZd7AAElTwABl3sAASVXAAGXewABJWcAAZd7AAElcwABl3rCCwABl3sAASV/AAGXewABJYcAAZd7AAElYwABl3rCGwABl3sAASWnAAGXewABJbcAAZd7AAEluwABl3sAASXDAAGXesI7AAGXesIrAAGXesIzAAGXesJDAAGXesITAAGXewABJfMAAZd7AAElmwABl3sAASWXAAGXewABJfcAAZd7AAEl+wABl3sAASYHAAGXewABJi8AAZd7AAElUwABl3rCSwABl3rCUwABl3rBzwABl3oaSwABl3rB2wABl3rB6wABl3rDGwABl3rCfwABl3rDEwABl3rCbwABl3rDFwABl3rCdwABl3rDDwABl3rCYwABl3rCIwABl3rB4wABl3sAASaPAAGXewABJpMAAZd7AAEmowABl3rB+wABl3rB8wABl3rCAwABl3rCWwABl3sAASV3AAGXewABJvsAAZZOY9cAAZjEAwABlkMAAScDAAGYzmPHAAGY0nfbAAGY0wABJwcAAZjTAAEnCwABmNMAAScPAAGY0wACS3MAAZjm4t8AAZjm2xcAAZjnAAEnEwABmNIb0wABmNMAAScXAAGY0wABJxsAAZjRhwABmM5jywABmQcAAktzAAGZCsE7AAGZCuRrAAGYzmO/AAGZFmXXAAGZFwABJyMAAZkXAAEnKwABmRcAASc3AAGZFVsAAZkXAAEnOwABmRcAAktzAAGZMwABHmcAAZkW1RcAAZkWFyMAAZkW9nMAAZkXAAEcDwABmRb2TwABmRb2WwABmRb2QwABmRb2ZwABmRYdPwABmRb2kwABmRb2nwABmRb2twABmRZ9UwABmRbmnwABmRcAARv/AAGZFwABHAMAAZkXAAEcBwABmRcAARwLAAGYzmPXAAGZgAMAAZZDAAEnTwABmYpjxwABmY8AAktzAAGZkwABJ1MAAZmTAAEnVwABmZLi3wABmZLbFwABmZMAASdfAAGZimPLAAGZqwACS3MAAZmuwTsAAZmu5GsAAZmKY78AAZm7AAEnLwABmbsAAktzAAGZwwABHmcAAZnDAAEnYwABmcMAASdnAAGZwwABJ3sAAZnDAAEnfwABmcMAASePAAGZwruPAAGZuvZzAAGZuwABHA8AAZm69kMAAZm61RcAAZm6FyMAAZm69k8AAZm69lsAAZm69mcAAZm6HT8AAZm69pMAAZm69p8AAZm69rcAAZm6fVMAAZm65p8AAZm7AAEb/wABmbsAARwDAAGZuwABHAcAAZm7AAEcCwABmYpj1wABmigDAAGWQwABJ5MAAZoyY8cAAZo2D6cAAZoyY78AAZo/AAEmpwABmj5rxwABmj59UwABmj4aUwABmj4akwABmj7UlwABmj8AAktzAAGaWwABJ5cAAZo+GmsAAZoyY9cAAZpkAwABlkMAASebAAGabmPHAAGacwACS3MAAZp3AAEnnwABmncAASejAAGabmO/AAGagwABJjcAAZqDAAEmVwABmoMAASY7AAGagwABJ6cAAZqDAAEnqwABmoMAASezAAGagwABJ7cAAZpuY9cAAZqgAwABlkMAASe7AAGaqmPLAAGarp37AAGarp4DAAGarwABJYMAAZqvAAEnxwABmq8AASfPAAGarwABJ9cAAZqvAAEn3wABmq8AASfjAAGarwABJ+sAAZqvAAEmqwABmq8AASavAAGarwABJ/sAAZqvAAEoAwABmq8AASTnAAGaqmPXAAGa6AMAAZZDAAEoDwABmvJjywABmvad+wABmvaeAwABmvcAASWDAAGa9wABJqsAAZr3AAEmrwABmvcAASfHAAGa9wABKAMAAZr3AAEn4wABmvcAASf7AAGa8mPXAAGbHAMAAZZDAAEbCwABmyZjxwABmysAASgTAAGbKwABJocAAZsrAAJLcwABmzcAASgbAAGbNwABKB8AAZsmY8sAAZtC4gMAAZtC4f8AAZtCwccAAZtDAAJLcwABm1MAASg3AAGbUtR3AAGbJmO/AAGbXsJjAAGbXsJvAAGbXsJ3AAGbXsJ/AAGbXsIrAAGbXsI7AAGbXsIzAAGbXsJDAAGbXsHbAAGbXsITAAGbXsILAAGbXsJbAAGbXsIbAAGbXsJLAAGbXsJTAAGbXsHPAAGbXsHrAAGbXsHzAAGbXsH7AAGbXsIDAAGbXsIjAAGbXsHjAAGbXhpLAAGbXwABG48AAZtfAAEblwABm18AASgjAAGbXwABKCcAAZtfAAEoKwABm18AASgzAAGbXwABG4sAAZtfAAEoOwABmyZj1wABm9wDAAGWQwABGw8AAZvmY8cAAZvrAAJLcwABm+8AASkLAAGb7tR3AAGb6uH/AAGb6uIDAAGb5mPLAAGcAsHHAAGb5mO/AAGcCsHPAAGcChpLAAGcCsJjAAGcCsJvAAGcCsJ3AAGcCsJ/AAGcCsHbAAGcCsHjAAGcCsHrAAGcCsITAAGcCsH7AAGcCsILAAGcCsIbAAGcCsIjAAGcCsHzAAGcCsIzAAGcCsIrAAGcCsI7AAGcCsJDAAGcCsJLAAGcCsJTAAGcCsJbAAGcCsIDAAGb5mPXAAGcaAMAAZZDAAEpDwABnHJjywABnHcAASkTAAGccmO/AAGcfwACS3MAAZyDAAEpFwABnHJj1wABnIgDAAGWQwABKSMAAZySY8cAAZyWwbsAAZyWYacAAZyXAAEpJwABnJcAASkrAAGclwABKS8AAZySY78AAZyuZdcAAZySY9cAAZy0AwABlkMAASrPAAGcvmPHAAGcwwABKtMAAZzC3fcAAZzCEvsAAZzC4+MAAZzDAAJLcwABnNcAASrXAAGcvmPLAAGc3wABKuMAAZzfAAJLcwABnOcAASrnAAGcvmPPAAGc7wACS3MAAZzzAAEq5wABnL5j0wABnPsAASrvAAGc+wABKvcAAZy+Y78AAZ0HAAJLcwABnQsAASr7AAGdCwABKv8AAZ0FLwABnQVbAAGdBwABKR8AAZy+Y9cAAZ0jAAEq2wABnSMAASrfAAGWQwABKwMAAZ0uY8sAAZ0zAAJLcwABnTcAASrnAAGdMhL7AAGdLmPPAAGdQwACS3MAAZ1HAAEq5wABnS5jvwABnU8AAktzAAGdUwABKv8AAZ0uY9cAAZ1aE9cAAZ1bAAErBwABlkMAASsPAAGdZmO/AAGdawABKR8AAZ1pLwABnWZj1wABnXQDAAGWQwABKxMAAZ1+Y8sAAZ2DAAEpEwABnX5jvwABnYsAAktzAAGdjwABKRcAAZ1+Y9cAAZ2UAwABlkMAASsXAAGdnmO/AAGdosJTAAGdnmPXAAGdqAMAAZZDAAErKwABnbJjxwABnbcAASkTAAGdtlZLAAGdtwACS3MAAZ3DAAErLwABnbJjywABncsAASUfAAGdywABJSMAAZ3LAAElNwABncsAASWvAAGdywABJOMAAZ2yY78AAZ3jAAErNwABneMAASVTAAGd4sITAAGd4wABH5MAAZ2yY9cAAZ30AwABlkMAAStPAAGd/mPHAAGeAwACS3MAAZ4HAAEq/wABngMAASs7AAGd/mO/AAGeEwACS3MAAZ4XAAErUwABnhcAAStbAAGeEwABK18AAZ3+Y9cAAZ4kAwABlkMAAStnAAGeLmPLAAGeMwABKRMAAZ4uY78AAZ47AAJLcwABnj8AASkXAAGeLmPXAAGeRAMAAZZDAAErawABnk5jxwABnlMAAktzAAGeVwABK28AAZ5OY78AAZ5fAAElZwABnk5j1wABnmQDAAGWQwABK3cAAZ5uY78AAZ5ywlMAAZ5uY9cAAZ54AwABlkMAASt7AAGegmPHAAGehwABKRMAAZ6HAAErfwABnocAASuDAAGehwACS3MAAZ6XAAErhwABnpcAASuLAAGegmPLAAGeowABJR8AAZ6jAAElIwABnqMAASU3AAGeowABJa8AAZ6CY78AAZ63AAJLcwABnrsAASZHAAGeuwABK5sAAZ67AAErlwABnrsAASv7AAGeuwABK+MAAZ67AAEr9wABnrsAASvrAAGeuwABK/MAAZ63AAErjwABnrbCEwABnoJj1wABnuQDAAGWQwABLAcAAZ7uY8cAAZ7zAAJLcwABnvcAASwLAAGe9wABLA8AAZ7uY8sAAZ8DAAEsEwABnu5j0wABnwgDAAGe7mO/AAGfEwABK3MAAZ8TAAJLcwABnxsAASwjAAGe7mPXAAGfIwABKtsAAZ8jAAEq7wABnyMAASwXAAGWQwABLCcAAZ8yY8cAAZ83AAJLcwABnzsAAStvAAGfMmO/AAGfQwABJWcAAZ8yY9cAAZ9IAwABlkMAASwrAAGfUmO/AAGfVsJTAAGfUmPXAAGfXAMAAZZDAAEsLwABn2ZjywABn2sAAktzAAGfbqeXAAGfbiCPAAGfZmO/AAGfeI8AAZ9mY9cAAZ+AAwABlkMAASw7AAGfimPHAAGfjJ8AAZ+PAAJLcwABn5SjAAGfjKcAAZ+PAAEsVwABn44UQwABn44URwABn44WAwABn48AASxbAAGfjghbAAGfimO/AAGfuI8AAZ+KY9cAAZ/AAwABlkMAASxfAAGfymPHAAGfzgL3AAGfymPLAAGf1wACS3MAAZ/ap5cAAZ/WD1sAAZ/WDxsAAZ/KY78AAZ/pIwABn+oJPwABn+sAAkmzAAGf9sMHAAGfymPXAAGf/AMAAZZDAAEsZwABoAZjxwABoAoMpwABoApaswABoAZjywABoBcAAktzAAGgGqeXAAGgFsL3AAGgFgL3AAGgFg9bAAGgFg8bAAGgBmO/AAGgMSMAAaAyCT8AAaAGY9cAAaA8AwABlkMAASxvAAGgRmPLAAGgSwACS3MAAaBOp5cAAaBGY78AAaBXAAJJswABoFrDBwABoEZj1wABoGADAAGWQwABLHMAAaBqY8sAAaBvAAJLcwABoHKnlwABoGpjvwABoHsAAkmzAAGgfsMHAAGgamPXAAGghAMAAZZDAAEsdwABoI5jywABoJMAAktzAAGglqeXAAGgksLzAAGgjmO/AAGgowACSbMAAaCmwwcAAaCOY9cAAaCsAwABlkMAASx7AAGgtmPHAAGguwACS3MAAaC/AAEsfwABoL8AASyDAAGgvhtPAAGgtmPLAAGgzwACS3MAAaDSp5cAAaDOwvcAAaDOAvcAAaDOD1sAAaDODxsAAaC2Y78AAaDpIwABoOoJPwABoOsAAkmzAAGg9sMHAAGgtmPXAAGg/AMAAaD+Wg8AAZZDAAEshwABoQpjxwABoQ8AAktzAAGhEKMAAaESsl8AAaETAAErSwABoQ4PWwABoQpjywABoScAAktzAAGhKqeXAAGhJwABJPcAAaEmAvcAAaEmDxsAAaEKY78AAaE+CT8AAaE/AAEfnwABoT0jAAGhPodvAAGhPwACSbMAAaFSwwcAAaEKY9cAAaFYAwABlkMAASyfAAGhYmPHAAGhZwACS3MAAaFqII8AAaFiY8sAAaFzAAJLcwABoXanlwABoXIPWwABoXLC9wABoXIC9wABoXIPGwABoWJjvwABoY4JPwABoY0jAAGhjwACSbMAAaGawwcAAaFiY9cAAaGgAAMAAkt3AAGhqmPDAAGhrwABLKsAAaGqY78AAaG3AAJLdwABobsAAS53AAGhtwABLocAAaG3AAEuiwABoasAASyzAAGhymPHAAGhzgL3AAGhzwABLLcAAaHKY8sAAaHaDxsAAaHKY78AAaHgjwABoeJdJwABocpj1wABoe8AAkt3AAGh8gLXAAGhqwABLMMAAaH6Y8cAAaH/AAEsxwABof8AASzLAAGh/wABLM8AAaH/AAEs0wABof8AAkt3AAGiEwABLNcAAaH8pwABofpjywABoh7qTwABoh8AASzbAAGiHuzPAAGiHuzLAAGiHJ8AAaH6Y78AAaI0jwABojcAAkt3AAGiPwABLPMAAaI2Br8AAaI2t6cAAaH6Y9cAAaJPAAJLdwABolIC1wABoasAASz7AAGiWmPHAAGiXg+zAAGiXwABLQMAAaJfAAEtBwABol8AAS0LAAGiXuy7AAGiXtWPAAGiXuy/AAGiXupTAAGiXuo3AAGiWmPLAAGihwABLQ8AAaKHAAEtEwABoocAAS0XAAGihwABLRsAAaJaY9MAAaKawD8AAaJaY78AAaKiwEMAAaKgjwABoqMAAkt3AAGirwABLU8AAaKvAAEtUwABoq8AAS1XAAGirwABLjcAAaKvAAEuQwABoqMAAS1bAAGiowABLdcAAaKjAAEuGwABoqMAAS47AAGiowABLj8AAaJaY9cAAaLYAwABotpWnwABoasAAS5HAAGi5mPHAAGi6wACS3cAAaLvAAEuSwABouZjywABovbRZwABovaUuwABovbLgwABovYLOwABovaVZwABouZjvwABow8AAkt3AAGjEwABLk8AAaMSnO8AAaMTAAEuWwABoxMAAS5jAAGjDwABLmcAAaMPAAEuawABow8AAS5vAAGi5mPXAAGjMAADAAJLewABozsAAS6TAAGjPmPHAAGjQJ8AAaNDAAJLewABo0ijAAGjQKcAAaNDAAEu9wABo0J19wABo0MAAS77AAGjQnX7AAGjQwABLv8AAaNC1u8AAaNDAAEvAwABo0MAAS8HAAGjQwABLwsAAaNDAAEvDwABo0MAAS8TAAGjQwABLxcAAaNDAAEvGwABo0MAAS8fAAGjQwABLyMAAaNDAAEvJwABo0MAAS8rAAGjQwABLy8AAaNC1usAAaNDAAEvMwABo0MAAS83AAGjQwABLzsAAaNDAAEvPwABo0MAAS9DAAGjPmO/AAGjtI8AAaM+Y9cAAaO8AwABozsAAS9HAAGjxmPHAAGjygpTAAGjyufbAAGjygVXAAGjxmPLAAGj2g8bAAGjxmO/AAGj4SMAAaPgjwABo8Zj1wABo+wDAAGjOwABL1cAAaP2Y8cAAaP6ClMAAaP659sAAaP6BVcAAaP2Y8sAAaQKDxsAAaP2Y78AAaQRIwABpBCPAAGj9mPXAAGkHAMAAaM7AAEvXwABpCZjxwABpCoKUwABpCrn2wABpCoFVwABpCZjywABpDoPGwABpCZjvwABpEEjAAGkQI8AAaQmY9cAAaRMAwABozsAAS9nAAGkVmPHAAGkWgmvAAGkWhZrAAGkWwABL2sAAaRWY8sAAaRqDxsAAaRq1yMAAaRWY78AAaR1IwABpHSPAAGkVmPXAAGkgAMAAaM7AAEvkwABpIpjxwABpI4PswABpI4VWwABpI4U4wABpIpj0wABpJ7APwABpIpjvwABpKbAQwABpKUjAAGkpI8AAaSKY8sAAaS21yMAAaS2DxsAAaSKY9cAAaTAAAMAAkt/AAGkyvFLAAGkzmPHAAGk0J8AAaTTAAJLfwABpNijAAGk0KcAAaTTAAEvqwABpNJ2ZwABpNJ2ywABpM5jvwABpPCPAAGkzmPXAAGk+AMAAaTKwCsAAaUCY8cAAaUGD7MAAaUGlUsAAaUG1bcAAaUHAAJLfwABpRcAAS+zAAGlAmPTAAGlHsA/AAGlAmO/AAGlJsBDAAGlJSMAAaUkjwABpQJjywABpTbXIwABpTYJrwABpTYU4wABpTYPGwABpQJj1wABpUgDAAGkytdDAAGlUmPHAAGlVJ8AAaVXAAJLfwABpVyjAAGlVKcAAaVXAAEv1wABpVcAAS/bAAGlVwABL98AAaVXAAEv4wABpVcAAS/nAAGlVwABL+sAAaVXAAEv7wABpVcAAS/zAAGlVwABL/cAAaVXAAEv+wABpVcAAS//AAGlVwABMAMAAaVXAAEwBwABpVcAATALAAGlVwABMA8AAaVXAAEwEwABpVcAATAXAAGlVwABMBsAAaVXAAEwHwABpVcAATAjAAGlUmO/AAGluI8AAaVSY9cAAaXAAwABpMrALwABpcpjxwABpc4PswABpc5Z7wABpc4JrwABpc4PGwABpc4KUwABpc7XHwABpc4SuwABpc4YdwABpc4U4wABpcpjvwABpfcAAkt/AAGl+wABMCsAAaX2wEMAAaX1IwABpfSPAAGlymPTAAGmDsA/AAGmDwABMEMAAaYPAAEwXwABpg8AATBnAAGmDwABMHMAAaYPAAEwgwABpg8AATCPAAGmDwABMJ8AAaYPAAEwpwABpg8AATCvAAGmDwABMLcAAaYPAAEwuwABpg8AATDPAAGmDwABMNcAAaYPAAEw2wABpg8AATDrAAGmDwABMPMAAaYPAAEw+wABpg8AATELAAGmDwABMRsAAaYPAAExIwABpg8AATEvAAGmDwABMTMAAaYPAAExOwABpg7VowABpg8AATE/AAGmDtV/AAGmDwABMUMAAaYPAAExRwABpg8AATFLAAGlymPLAAGmitcjAAGlymPXAAGmklafAAGkytdHAAGmmmPHAAGmnJ8AAaafAAJLfwABpqSjAAGmnKcAAaafAAExUwABpp8AATFXAAGmnwABMVsAAaaeamsAAaae9hMAAaafAAExXwABpp8AATFjAAGmnwABMWcAAaafAAExawABpp8AATFvAAGmnwABMXMAAaafAAExdwABpppjvwABpuCPAAGmmmPXAAGm6AMAAaTKwDMAAabyY8cAAab2D7MAAab2ClMAAab2Ca8AAab2DxsAAab2ErsAAabyY9MAAacOwD8AAacOup8AAacPAAExrwABpw8AATGzAAGnDwABMbcAAacPAAExuwABpw7PpwABpw7A2wABpw8AATG/AAGnDwABMcMAAacPAAExxwABpw8AATHLAAGnDhdvAAGnDwABMc8AAabyY78AAadKwEMAAadJIwABp0iPAAGm8mPLAAGnWtcjAAGm8mPXAAGnYlafAAGkysAnAAGnamPHAAGnbg+zAAGnbgJbAAGnamPTAAGnesA/AAGnamO/AAGngsBDAAGngSMAAaeAjwABp2pjywABp5LXIwABp5IPGwABp2pj1wABp58AAkt/AAGnogLXAAGnnqtzAAGnnwABMdsAAaeejS8AAaeeaYgDAAJLgwABp7sAATHnAAGnvmPHAAGnwwACS4MAAafGWncAAae+Y9MAAafMAwABp88AATHrAAGnzwABMe8AAafPAAEx8wABp75jywABp+ICWwABp+IFVwABp+IO3wABp+IPGwABp75jzwABp/YCWwABp75jvwABp/1bAAGn/gKXAAGn/hF7AAGn/l1LAAGn/l1jAAGn/l1fAAGn/wABMfcAAaf+CRsAAaf+DHMAAaf+D0cAAaf+27cAAaf+fHcAAaf9IwABp/yPAAGnvmPXAAGoOwACS4MAAag+AtcAAae7AAEyAwABqEZjxwABqEsAAkuDAAGoTl2HAAGoRmPLAAGoVgJbAAGoRmPPAAGoXgJbAAGoRmO/AAGoZVsAAahmApcAAahmEXsAAahmXUsAAahmCRsAAahGY9cAAah8AwABqH8AATHrAAGofwABMfMAAae7AAEyBwABqI5jxwABqJICWwABqI5j0wABqJsAATHzAAGojmPPAAGoogJbAAGojmO/AAGoqVsAAaiqApcAAaiqCRsAAaiqEXsAAaiqXUsAAaiOY9cAAajAAwABp7sAATIjAAGoymPHAAGozwACS4MAAajTAAEyJwABqNMAATIrAAGoymPLAAGo3XMAAajKY9cAAajkAwABp7sAATIvAAGo7mPHAAGo8wACS4MAAaj2XYcAAaj2XccAAaj3AAEyMwABqPcAATIrAAGo9iO/AAGo7mPLAAGpDXsAAajuY78AAakVdwABqO5j1wABqRwAAwACS4cAAakmGcsAAakqY9MAAaksAwABqSpjywABqTYGywABqTYVQwABqTaIZwABqTZtkwABqTYZ1wABqTcAATJDAAGpNhEjAAGpKmO/AAGpVwABMjsAAalXAAEyPwABqVcAATJHAAGpVwABMksAAakmx08AAalqY8cAAaluBssAAaluFUMAAalqY8sAAal6iGcAAal6bZMAAal6GdcAAal6DxsAAal7AAEyQwABqXoRIwABqWpjvwABqZcAATI7AAGplSMAAamXAAEyPwABqZSPAAGpamPXAAGpqAMAAaknAAEyTwABqbJjxwABqbYRIwABqbJjywABqb6IZwABqb5tkwABqb4Z1wABqb4PGwABqbJjvwABqdMAATI7AAGp0SMAAanQjwABqbJj1wABqeAAAwACS4sAAanqx1MAAanuY8cAAanyD7MAAanzAAEyWwABqfMAATJfAAGp8wABMmMAAanzAAEyZwABqfMAATJrAAGp8lcDAAGp8vDbAAGp7mPLAAGqFvDfAAGqFuFnAAGqFvE3AAGqFpCTAAGqFwABMncAAaoWq2sAAaoW8UMAAaoW1yMAAaoXAAEyhwABqhYPGwABqe5j0wABqkADAAGqQsA/AAGp7mO/AAGqTsBDAAGqTvEzAAGqTwABMnMAAapO4WsAAapO8S8AAapMjwABqk1/AAGqTSMAAapO8SMAAapPAAEykwABqe5j1wABqnsAATJvAAGp6wABMpcAAaqCY8cAAaqGq2sAAaqHAAJLiwABqo8AATKbAAGqgmPLAAGqlpCTAAGqlwABMncAAaqW8N8AAaqW4WcAAaqW8TcAAaqCY78AAaqu8TMAAaqu4WsAAaqu8S8AAaqCY9cAAaq8AwABqr5WnAMAAkuPAAGqymPHAAGqzwACS48AAarTAAEz9wABqs1bAAGqzwABM/sAAarPAAEz/wABqs8AATQDAAGqzwABNAcAAarPAAE0CwABqs8AATQPAAGqzlfrAAGqzwABCrsAAarPAAE0EwABqs8AATQXAAGqzwABNBsAAarPAAE0HwABqs8AATQjAAGqzwABNCcAAarOWA8AAarOWBMAAarOh7MAAarOi3cAAarOYiMAAarPAAE0KwABqs8AATQvAAGqzlgbAAGqzlgfAAGqzhBDAAGqzwABM5MAAarOYJcAAarKY78AAatHAAJLjwABq0sAATQzAAGrSwABNDcAAatLAAE0TwABq0cAATRHAAGrRwABNEsAAatHAAE0UwABq0cAATRXAAGrRwABNFsAAatHAAE0XwABq0cAATRjAAGrRwABNGcAAatG7Z8AAatG2d8AAatG2e8AAatG7ZcAAatGoXMAAatGq9cAAatHAAE0awABq0cAATRzAAGrRwABNH8AAatHAAE0gwABq0cAATSHAAGqywABMqcAAaumY8sAAauqAvcAAaumY9cAAauwAwABqssAATKrAAGrumO/AAGrvg1/AAGrumPXAAGrxAMAAarLAAEyrwABq85jvwABq9INfwABq9LA5wABq85j1wABq9wDAAGqywABMrMAAavmY8cAAavqAvcAAavmY78AAavyDX8AAavmY9cAAav4AwABqssAATK7AAGsAmPHAAGsBgL3AAGsAmO/AAGsDg1/AAGsAmPXAAGsFAMAAarLAAEyxwABrB5jxwABrCIC9wABrB5jvwABrCoNfwABrB5j1wABrDADAAGqywABMssAAaw6Y78AAaw+DX8AAaw/AAEy2wABrDpj1wABrEgDAAGqywABMt8AAaxSY8cAAaxWAvcAAaxSY78AAaxfAAEy2wABrF7A5wABrFJj1wABrGgDAAGqywABMuMAAaxyY8cAAax2AvcAAaxyY78AAax/AAEy2wABrH7A5wABrHJj1wABrIgDAAGqywABMucAAaySY8cAAayWAvcAAaySY78AAayfAAEy2wABrJ7A5wABrJJj1wABrKgDAAGqywABMusAAayyY8cAAay2AvcAAayyY78AAay/AAEy2wABrL7A5wABrLJj1wABrMgDAAGqywABMu8AAazSY8cAAazWAvcAAazSY78AAazeDX8AAazfAAEy2wABrN7A5wABrNJj1wABrOwDAAGqywABMvsAAaz2Y78AAaz6DX8AAaz7AAEzBwABrPZj1wABrQQDAAGqywABMwsAAa0OY8cAAa0SAvcAAa0OY78AAa0bAAEzBwABrRrA5wABrQ5j1wABrSQDAAGqywABMw8AAa0uY8cAAa0yAvcAAa0uY78AAa07AAEzBwABrTrA5wABrS5j1wABrUQDAAGqywABMxMAAa1OY78AAa1SDX8AAa1TAAEzJwABrVMAATMrAAGtUwABMtsAAa1TAAEzIwABrU5j1wABrWgDAAGqywABMy8AAa1yY8cAAa12AvcAAa1yY78AAa1/AAEy2wABrX8AATMjAAGtfsDnAAGtcmPXAAGtjAMAAarLAAEzMwABrZZjxwABrZoC9wABrZZjvwABraMAATLbAAGtowABMyMAAa2iwOcAAa2WY9cAAa2wAwABqssAATM3AAGtumPHAAGtvgL3AAGtumO/AAGtxwABMtsAAa3HAAEzIwABrcbA5wABrbpj1wABrdQDAAGqywABMzsAAa3eY8cAAa3iAvcAAa3eY78AAa3rAAEy2wABresAATMjAAGt6sDnAAGt3mPXAAGt+AMAAarLAAEzPwABrgJjxwABrgYC9wABrgJjvwABrg8AATLbAAGuDwABMyMAAa4OwOcAAa4PAAEzKwABrgJj1wABriADAAGqywABM0cAAa4qY8cAAa4uAvcAAa4qY78AAa43AAEy2wABrjcAATMjAAGuNwABMycAAa42wOcAAa4qY9cAAa5IAwABqssAATNLAAGuUmPHAAGuVgL3AAGuUmO/AAGuXg1/AAGuXsDnAAGuUmPXAAGuaAMAAarLAAEzVwABrnJjvwABrnYNfwABrncAATLbAAGudwABMyMAAa5yY9cAAa6EAwABqssAATNbAAGujmPHAAGukgL3AAGujmO/AAGumwABMtsAAa6bAAEzIwABrprA5wABro5j1wABrqgDAAGqywABM18AAa6yY8cAAa62AvcAAa6yY78AAa6/AAEy2wABrr8AATMjAAGuvsDnAAGusmPXAAGuzAMAAarLAAEzYwABrtZjxwABrtoC9wABrtZjvwABruMAATLbAAGu4wABMyMAAa7iwOcAAa7WY9cAAa7wAwABqssAATNnAAGu+mPHAAGu/gL3AAGu+mO/AAGvBwABMtsAAa8HAAEzIwABrwbA5wABrvpj1wABrxQDAAGqywABM2sAAa8eY8cAAa8iAvcAAa8eY78AAa8qDX8AAa8qwOcAAa8eY9cAAa80AwABqssAATNvAAGvPmPHAAGvQgL3AAGvPmO/AAGvSg1/AAGvSsDnAAGvPmPXAAGvVAMAAarLAAEzewABr15jxwABr2IC9wABr15jvwABr2oNfwABr2rA5wABr15j1wABr3QDAAGqywABM38AAa9+Y8cAAa+CAvcAAa9+Y78AAa+KDX8AAa+KwOcAAa9+Y9cAAa+UAwABqssAATOPAAGvnmPHAAGvogL3AAGvnmO/AAGvqg1/AAGvnmPXAAGvsAMAAarLAAEzswABr7pjxwABr74C9wABr7pjvwABr8YNfwABr7pj1wABr8wDAAGqywABM7cAAa/WY8cAAa/aD1cAAa/WY78AAa/i0isAAa/WY9cAAa/oAwABqssAATO7AAGv8mPHAAGv9wABM78AAa/3AAEzwwABr/cAATPHAAGv9wABM8sAAa/3AAEzzwABr/cAATPTAAGv9wABM9cAAa/3AAEz3wABr/cAATPnAAGv9wABM+8AAa/3AAEX0wABr/cAARfXAAGv9sjPAAGv8mPLAAGwLrPjAAGv8mO/AAGwNtIrAAGv8mPXAAGwPAADAAJLkwABsEbIbwABsEpjxwABsE8AAkuTAAGwUlp3AAGwSmPTAAGwWsA/AAGwSmO/AAGwYsBDAAGwYtA/AAGwYwABNI8AAbBjAAE0kwABsGMAASXvAAGwYwABNJ8AAbBjAAE0owABsGLQOwABsGMAATSnAAGwSmPLAAGwiwABNJcAAbCLAAE0mwABsEb1KwABsJZjxwABsJsAAkuTAAGwnlp3AAGwlmPTAAGwpsA/AAGwlmO/AAGwrsBDAAGwrwABNKsAAbCvAAE0rwABsK8AATSzAAGwrwABNLcAAbCvAAElzwABsK8AASXTAAGwrwABNLsAAbCvAAE0pwABsK8AATS/AAGwrwABNMMAAbCvAAE0xwABsK8AATTLAAGwrwABNM8AAbBHAAE00wABsOpjvwABsO8AATTXAAGw7wABNN8AAbDvAAE04wABsO8AATTrAAGw7gozAAGw6mPXAAGxBAMAAbBG828AAbEOY78AAbETAAE07wABsRMAATTzAAGxEwABNPcAAbETAAE0+wABsRIKMwABsQ5j1wABsSgDAAGwRwABNP8AAbEyY8cAAbE3AAJLkwABsTr0BwABsTcAATUDAAGxNwABNQcAAbE3AAE1CwABsTcAATUPAAGxNwABNRMAAbEyY78AAbFXAAE01wABsVcAATTfAAGxVwABNOMAAbFXAAE06wABsVYKMwABsVcAATU/AAGxMmPXAAGxcAMAAbBHAAE1QwABsXpjxwABsX4PswABsX8AAkuTAAGxhswPAAGxhwABNUsAAbF/AAE1AwABsX8AATUHAAGxfwABNQsAAbF/AAE1DwABsX8AATUTAAGxemPTAAGxpwABNU8AAbGmwD8AAbF6Y78AAbGywEMAAbGzAAE0nwABsbLQPwABsbMAATSPAAGxswABNJMAAbGzAAE0owABsbLQOwABsbMAAkuTAAGx0wABNWcAAbGzAAE0pwABsbMAASXvAAGxemPLAAGx4wABNJsAAbHjAAE0lwABsXpj1wABsewDAAGwRwABNWsAAbH2Y8cAAbH7AAJLkwABsf7kQwABsfsAATVvAAGx+wABNXMAAbH7AAE1dwABsfsAATV7AAGx9mO/AAGyFwABNPsAAbIXAAE07wABshcAATTzAAGyFwABNPcAAbIWCjMAAbH2Y9cAAbIsAwABsEcAATWLAAGyNmPHAAGyOg+zAAGyOwACS5MAAbJDAAE1kwABskLkQwABsjsAATVvAAGyOwABNXMAAbI7AAE1dwABsjsAATV7AAGyNmPTAAGyXwABNU8AAbJewD8AAbI2Y78AAbJqwEMAAbJrAAE0nwABsmsAATTDAAGyatA/AAGyawABNI8AAbJrAAE0kwABsmsAATSjAAGyatA7AAGyawABJe8AAbJrAAE0vwABsmsAATTHAAGyawABNMsAAbJrAAJLkwABsp8AATVnAAGynwABNbcAAbKfAAE1rwABsp8AATWzAAGynwABNccAAbJrAAE0pwABsmsAASXPAAGyawABJdMAAbJrAAE0uwABsmsAATSrAAGyawABNK8AAbJrAAE0swABsmsAATS3AAGyawABNM8AAbI2Y8sAAbLbAAJLkwABst8AATVLAAGy3swPAAGy2wABNJsAAbLbAAE1BwABstsAATUPAAGy2wABNQsAAbLbAAE1EwABstsAATSXAAGy2wABNQMAAbI2Y88AAbMHAAJLkwABswsAATVLAAGyNmPXAAGzEAMAAbBHAAE12wABsxpjxwABsx4S+wABsx8AATVjAAGzGmPTAAGzKAMAAbMaY8sAAbMyBssAAbMyDxsAAbMaY78AAbM9IwABszyPAAGzGmPXAAGzSlacAwACS5cAAbNSY78AAbNXAAE2+wABs1MAATXnAAGzXmPHAAGzYg+zAAGzYwACS5cAAbNrAAE17wABs15j0wABs3LAPwABs15jvwABs3rAQwABs3sAATX/AAGzewABNgMAAbNeY9cAAbOIAwABs4pWnwABs1MAATYPAAGzlmPHAAGzmg+zAAGzmwACS5cAAbOjAAE2FwABs6MAATYbAAGzowABNh8AAbOjAAE2IwABs6MAATYnAAGzlmO/AAGzusBDAAGzuwACS5cAAbPDAAE2PwABs7sAARYTAAGzuwABNksAAbO7AAE2TwABs7sAATZTAAGzuwABNlcAAbO7AAE2WwABs7sAATZfAAGzuwABNmMAAbO7AAE2ZwABs7sAATZrAAGzuwABNm8AAbO7AAE2cwABs7sAATZ7AAGzuwABNoMAAbO7AAE2iwABs5ZjywABtAas6wABs5Zj1wABtAwDAAG0DsA/AAGzUwABNpMAAbQaY8cAAbQfAAE2lwABtB6PBwABtB4JqwABtB8AATZDAAG0HwABNkcAAbQaY78AAbQ3AAJLlwABtDsAATabAAG0OwABNqcAAbQ2YLcAAbQ3AAE2rwABtDcAATazAAG0NhjzAAG0NhlLAAG0NhkvAAG0GmPXAAG0XAMAAbNTAAE2uwABtGZjxwABtGoPswABtGrS3wABtGqjHwABtGsAAkuXAAG0ewABNsMAAbRrAAE2nwABtGsAATajAAG0ao93AAG0ao+nAAG0ZmPTAAG0ksA/AAG0ZmO/AAG0msBDAAG0mwABNqsAAbSYjwABtGZjywABtKpmMwABtGZj1wABtLADAAGzUwABNucAAbS6Y8cAAbS+CScAAbS+jxMAAbS+j3cAAbS+j6cAAbS6Y8sAAbTSAvcAAbS6Y78AAbTYjwABtLpj1wABtOADAAGzUwABNvMAAbTqY8cAAbTuAvcAAbTu0t8AAbTvAAE2LwABtOpjywABtP8AAkuXAAG1AqeXAAG06mO/AAG1CI8AAbTqY9cAAbUQAwABs1MAATb3AAG1GmPHAAG1Hg/PAAG1HwACS5cAAbUmSgcAAbUaY78AAbUvAAE2jwABtRpjywABtTcAAQZfAAG1GmPXAAG1PAADAAJLmwABtUZjxwABtUsAAkubAAG1TwABNzcAAbVPAAE3PwABtUZjvwABtVsAATdDAAG1RuV/AAG1YmPHAAG1ZhIPAAG1ZgL3AAG1YmPLAAG1cglDAAG1ch4HAAG1ch33AAG1ch5TAAG1ch5XAAG1YmO/AAG1ih4zAAG1ih4/AAG1ih5PAAG1ih4jAAG1ih5fAAG1ih5nAAG1ih6jAAG1YmPXAAG1qAMAAbVHAAE3MwABtbJjxwABtbYd8wABtbJjywABtb4d6wABtbJj1wABtcQAAwACS58AAbXOY8cAAbXTAAE3twABtc8AATdbAAG12mPHAAG13gL3AAG13pYzAAG12mO/AAG16I8AAbXaY9cAAbXwAwABtc8AATdnAAG1+mPHAAG1/hEjAAG1/gL3AAG1/hB/AAG1+mPLAAG2DtbPAAG1+mO/AAG2FI8AAbX6Y9cAAbYcAwABtc8AATdvAAG2JmPHAAG2KhEjAAG2KgL3AAG2JmO/AAG2NI8AAbYmY9cAAbY8AwABtc8AATd3AAG2RmPHAAG2ShEjAAG2ShRnAAG2SwACS58AAbZUowABtlcAATd7AAG2RmPLAAG2YgL3AAG2Yp4vAAG2YrODAAG2YhCLAAG2YhB/AAG2YhVDAAG2YhU7AAG2Ys9rAAG2Yh5vAAG2Yh57AAG2YhRzAAG2YhB7AAG2Yh5/AAG2YwACS58AAbaap5cAAbZGY78AAbagjwABtkZj1wABtqgDAAG1zwABN38AAbayY8cAAba21ucAAba2EJMAAba2Fa8AAbayY9cAAbbEAwABtc8AATeDAAG2zmPHAAG20hCLAAG2zmPLAAG22h57AAG22hRzAAG22hB7AAG22h5/AAG22tAzAAG22wACS58AAbbyp5cAAbbOY9cAAbb4AwABtc8AATeHAAG3AmPLAAG3BtWDAAG3BtGbAAG3AmPXAAG3EAMAAbXPAAE3iwABtxpjxwABtx7QMwABtxpjywABtybVgwABtybRmwABtxpj1wABtzADAAG1zwABN48AAbc6Y8cAAbc+EH8AAbc6Y8sAAbdGz2sAAbdHAAJLnwABt06nlwABtzpj1wABt1QDAAG1zwABN5MAAbdeY8cAAbdiEH8AAbdeY8sAAbdqFTsAAbdrAAJLnwABt3KnlwABt15j1wABt3gDAAG1zwABN5cAAbeCY8cAAbeGEH8AAbeCY8sAAbeOs4MAAbeOFUMAAbePAAJLnwABt5qnlwABt4Jj1wABt6ADAAG1zwABN5sAAbeqY8cAAbeus4MAAbeuEIsAAbeqY8sAAbe6Hm8AAbe7AAJLnwABt8KnlwABt6pj1wABt8gDAAG1zwABN58AAbfSY8cAAbfW1tsAAbfWAvcAAbfUnwABt9JjvwABt+SPAAG30mPXAAG37AMAAbXO0P8AAbf2Y8cAAbf6AvcAAbf60t8AAbf7AAE3pwABt/oPzwABt/oVWwABt/ZjvwABuBCPAAG39mPXAAG4GAMAAbXPAAE3rwABuCJjxwABuCbW2wABuCYC9wABuCSfAAG4JhYfAAG4JhrTAAG4ImO/AAG4PI8AAbgiY9cAAbhEAAMAAkujAAG4TmO/AAG4UwABOEsAAbhTAAE4TwABuE8AATe/AAG4XmPHAAG4YgL3AAG4YtVXAAG4YmN7AAG4YhFfAAG4XmPLAAG4dgmvAAG4XmO/AAG4fhFLAAG4XmPXAAG4hAMAAbhPAAE3wwABuI5jxwABuJIJrwABuJLVVwABuJJjewABuJIRXwABuJIC9wABuJLSkwABuI5jvwABuKyPAAG4jmPXAAG4tAMAAbi2Vp8AAbhPAAE3xwABuMJjxwABuMa+WwABuMJj1wABuMwDAAG4TwABN8sAAbjWY8cAAbjaxOcAAbjaG9cAAbja1WcAAbjaEh8AAbjaEiMAAbjaEi8AAbjaZjsAAbja1W8AAbjaxysAAbja1ncAAbjaAz8AAbjaB5cAAbjbAAE3zwABuNZjvwABuRIRSwABuNZj1wABuRgDAAG4TwABN9cAAbkiY8cAAbkm1nsAAbkmY3sAAbkm1n8AAbkm1oMAAbkm1ocAAbkm1osAAbkm1o8AAbkm1pMAAbkm1psAAbkm1p8AAbkm1qMAAbkm1qcAAbkm1qsAAbkiY78AAbleEUsAAbkiY9cAAblkAwABuE4jGwABuW5jxwABuXICswABuXLVGwABuXLVIwABuXISIwABuXISHwABuW5jywABuYoFVwABuW5jvwABuZIRSwABuW5j1wABuZgDAAG5mlafAAG4TwABN98AAbmmY8cAAbmqC58AAbmqZ08AAbmmY78AAbm2EUsAAbmmY9cAAbm8AwABub5WnwABuE8AATfrAAG5ymPHAAG5zhB/AAG5ztVnAAG5zhIvAAG5ymO/AAG53hFLAAG5ymPXAAG55AMAAbnmVp8AAbhPAAE38wABufJjxwABufWrAAG59gpDAAG59gbLAAG58mPXAAG6BAMAAbhPAAE39wABug5jxwABuhIKXwABug5jvwABuhoRSwABug5j1wABuiADAAG6IlafAAG4TwABN/8AAbouY8cAAboyvlsAAbouY9cAAbo4AwABujpWnwABuE6n7wABukZjxwABukoKUwABukqGdwABukrVbwABukoKXwABukoQiwABukoUhwABukZjvwABumYRSwABukZj1wABumwDAAG6blafAAG4TwABOAcAAbp6Y8cAAbp+ClMAAbp6Y78AAbqGEUsAAbp6Y9cAAbqMAwABuo5WnwABuE8AATgPAAG6mmPHAAG6nr5bAAG6mmPXAAG6pAMAAbqmVp8AAbhPAAE4EwABurJjxwABurcAATgXAAG6twABOBsAAbq3AAE4HwABurcAATgjAAG6ttWbAAG6tomLAAG6ttVvAAG6tgpTAAG6thVXAAG6trlbAAG6tmurAAG6ttWPAAG6ttWXAAG6tgpfAAG6smO/AAG68hFLAAG6smPXAAG6+AMAAbr6Vp8AAbhPAAE4KwABuwZjxwABuwoJuwABuwZjvwABuxIRSwABuwZj1wABuxgDAAG7GlafAAG4TtRnAAG7JmPHAAG7KgknAAG7KrWrAAG7JmPXAAG7NAMAAbhPAAE4NwABuz5jxwABu0IC9wABu0IKUwABu0K0swABuz5j1wABu1ADAAG4TwABODsAAbtaY8cAAbteEHsAAbteEIsAAbteEI8AAbteEJMAAbtaY9cAAbtwAwABuE8AATg/AAG7emPHAAG7fJ8AAbt/AAJLowABu4SjAAG7fKcAAbt+ESMAAbt+1ScAAbt+CbsAAbt+Em8AAbt+GHcAAbt+0pMAAbt+GmcAAbt+1aMAAbt6Y78AAbuwjwABu3pj1wABu7gDAAG4TwABOEMAAbvCY78AAbvHAAE30wABu8bG9wABu8YSnwABu8YT7wABu8YUwwABu8YYfwABu8bVFwABu8YTKwABu8cAATgzAAG7xwABN+cAAbvCY9cAAbvwAwABuE8AAThHAAG7+mO/AAG7/wABN9MAAbv+xvcAAbv+Ep8AAbv+E+8AAbv+FMMAAbv+GH8AAbv+1RcAAbv+EysAAbv/AAE35wABu/8AATgzAAG7+mPXAAG8KAADAAJLpwABvDJjvwABvDcAAkunAAG8OwABOUMAAbwzAAE4UwABvEJjxwABvEbj4wABvEJjvwABvE4jywABvE8AAThvAAG8TwABOFcAAbxPAAEK1wABvE8AAThjAAG8TwABOGcAAbxPAAEJiwABvE8AAThzAAG8TwACS6cAAbxzAAE4iwABvE8AAThbAAG8TwABOJ8AAbxPAAE4owABvE8AAThfAAG8TwABOH8AAbxPAAE4gwABvEJj1wABvJADAAG8MwABOM8AAbyaY8cAAbye1jsAAbyfAAE40wABvJ8AATjXAAG8mmO/AAG8rwABONsAAbyuI8sAAbyvAAJLpwABvLsAATjnAAG8uwABOOsAAby7AAE5CwABvLsAATkPAAG8uwABORMAAby7AAE5JwABvLsAATkvAAG8uwABOTcAAby7AAE5KwABvK8AATfTAAG8rsb3AAG8rhKfAAG8rhPvAAG8rhTDAAG8rhh/AAG8rtUXAAG8rwABODMAAbyuEysAAbyvAAE35wABvJpj1wABvQgDAAG8MwABOTsAAb0SY8cAAb0WI8cAAb0WB+MAAb0SY9cAAb0gAwABvDMAATk/AAG9KmPHAAG9LgmvAAG9LtLTAAG9KmPLAAG9OwABOKcAAb0qY9cAAb1AAAMAAkurAAG9SmPHAAG9TwACS6sAAb1TAAE5wwABvVMAATnHAAG9UwABOcsAAb1TAAE5zwABvUpjvwABvWZWiwABvWYcswABvUpeAwABvXJjxwABvXYRAwABvXJjvwABvX8AATlLAAG9fwABOVcAAb1/AAE5WwABvX8AATfTAAG9fsb3AAG9fwACS6sAAb2XAAE5JwABvZcAATlrAAG9lwABOW8AAb2XAAE5LwABvZcAATk3AAG9lwABOWMAAb2XAAE5ZwABvX4SnwABvX4T7wABvX4UwwABvX4YfwABvX7VFwABvX8AATgzAAG9fhMrAAG9fwABN+cAAb1yY9cAAb3UAwABvUsAATlzAAG93mPHAAG94g0rAAG93mO/AAG96wABOXcAAb3rAAE5ewABvesAATl/AAG96g6LAAG96wABOaMAAb3rAAJLqwABvgMAATmnAAG+AwABOa8AAb4DAAE5swABvgMAATm7AAG+AwABOb8AAb4DAAE5mwABvgMAATmrAAG96mQrAAG96mR3AAG96mR/AAG96sMrAAG96wABOYMAAb3rAAE5iwABvepkcwABvesAATmHAAG93mPXAAG+QAADAAJLrwABvkrkMwABvk5jxwABvlMAAkuvAAG+VuLTAAG+VwABOdcAAb5XAAE52wABvk5jvwABvmbBSwABvmblDwABvmcAAToPAAG+ZwABOhMAAb5OY9cAAb54AwABvksAAToXAAG+gmPHAAG+hhOTAAG+htVLAAG+gmPXAAG+kAMAAb5LAAE6GwABvppjxwABvp5aRwABvp8AAToLAAG+mmPLAAG+qwABOh8AAb6aY9cAAb6wAwABvksAATojAAG+umPHAAG+vlpHAAG+vhTPAAG+umO/AAG+yI8AAb66Y9cAAb7QAwABvksAATovAAG+2mPHAAG+3J8AAb7fAAJLrwABvuSjAAG+3KcAAb7e7qMAAb7eFq8AAb7eFdcAAb7fAAE6PwABvtpjvwABvwCPAAG+2mPXAAG/CAMAAb5KFW8AAb8SY8cAAb8WCa8AAb8UnwABvxYC9wABvxYCWwABvxJjywABvyrXIwABvxJjvwABvzCPAAG/EmPXAAG/Ou6jAAG/OhavAAG/OhXXAAG/OwABOj8AAb5K9SMAAb9OY8cAAb9SD7MAAb9TAAJLrwABv1sAATpLAAG/TmPTAAG/YsA/AAG/YloPAAG/TmO/AAG/bsBDAAG/btVTAAG/TmPXAAG/ewACS68AAb9+AtcAAb5LAAE6zwABv4ZjxwABv4oPswABv4paRwABv4sAATqDAAG/iwABOosAAb+LAAEnPwABv4sAATqrAAG/iwABOqMAAb+LAAE6wwABv4Zj0wABv68AATrXAAG/hmO/AAG/tsBDAAG/tI8AAb+GY8sAAb/DAAE6vwABv8MAATp/AAG/wwABOgcAAb+GY9cAAb/QAAMAAkuzAAG/2wABOvcAAb/eY8cAAb/iBk8AAb/eY78AAb/pWwABv+oKMwABv95j1wABv/QAAwACS7cAAb/+Y78AAcADAAE7dwABwAMAATuHAAG//wABOv8AAcAOY8cAAcATAAJLtwABwBZdxwABwBIC9wABwBMAATsDAAHAEwABOwcAAcATAAE7CwABwBLlIwABwBLlJwABwBLlKwABwBLlLwABwBLlMwABwBLlNwABwBLlOwABwBMAATsPAAHAEwABOxMAAcATAAE7FwABwBMAATsbAAHAEwABOx8AAcATAAExswABwBMAATsjAAHAEwABOycAAcAQpwABwBMAATsrAAHAEwABOy8AAcATAAE7MwABwA5jywABwHifAAHADmPXAAHAgAMAAb//AAE7NwABwIpjxwABwI8AAku3AAHAklp3AAHAimPTAAHAmsA/AAHAimO/AAHAosBDAAHAowABOzsAAcCjAAE7PwABwKMAATtDAAHAowABO0cAAcCjAAE6UwABwKMAATtLAAHAowABO08AAcCi4aMAAcCi4asAAcCi4o8AAcCi4pMAAcCi0gMAAcCi0fsAAcCjAAE7UwABwKLR8wABv/8AATtXAAHA5mPHAAHA6g+zAAHA6wACS7cAAcDzAAE7XwABwPMAATtjAAHA8wABO2cAAcDzAAE7awABwOrkqwABwOZj0wABwQrAPwABwOZjvwABwRLAQwABwRMAAku3AAHBGwABO28AAcETAAE7OwABwRMAATs/AAHBEwABO0MAAcETAAE7RwABwRMAATpTAAHBEwABO0sAAcETAAE7TwABwRLhowABwRLhqwABwRLijwABwRLikwABwRLSAwABwRLR+wABwRMAATtTAAHBEtHzAAHA5mPXAAHBXAMAAb//AAE7cwABwWZjxwABwWrkqwABwWZjvwABwXLk+wABwXIKMwABwWZj1wABwXwAAwACS7sAAcGGY8MAAcGLAAE7xwABwYsAATvLAAHBhwABO88AAcGWY8cAAcGbAAJLuwABwZ8AATvTAAHBlmPLAAHBpwACS7sAAcGrAAE72wABwasAATvXAAHBpvLTAAHBlmO/AAHBuwABO98AAcGWY9cAAcHCoUMAAcHAAwABwYcAATvjAAHBzmPHAAHB0wABO+cAAcHSkhsAAcHOY9MAAcHcAwABwc5jywABwecAATwPAAHB5wABOmsAAcHm8zMAAcHnAAE8AwABwebzQwABwecAATqHAAHB5wABPAcAAcHm808AAcHnAAE8EwABwecAATwLAAHB5vNfAAHB5wABOncAAcHm9EcAAcHm8kcAAcHm8k8AAcHm8lcAAcHnAAJLuwABwisAATvXAAHB5g8bAAHBzmO/AAHCNqtzAAHCNvKbAAHCNntzAAHCNgo7AAHCNvI/AAHCNSMAAcI2fHcAAcI26oMAAcHOY9cAAcJaVp8AAcJaoUMAAcGHAAE8GwABwmZjxwABwmsAATwDAAHCawABPAcAAcJrAAE8CwABwmrzQwABwmrzTwABwmrzXwABwmZjvwABwoZ7cwABwoYKOwABwobyPwABwoZ8dwABwoSPAAHCZmPXAAHCnqFDAAHCnAMAAcGHAAE8SwABwqpjxwABwq8AATwPAAHCrwABPAMAAcKvAAE8BwABwq8AATwLAAHCrvNDAAHCrvNfAAHCrvNPAAHCrwACS7sAAcLPAAE8TwABwqpjywABwtcAATprAAHC1vMzAAHC1wABOocAAcKqY78AAcLmq3MAAcLm8psAAcLme3MAAcLmCjsAAcLm8j8AAcLmfHcAAcLkjwABwqpj1wABwwahQwABwwQDAAHBhwABPFsAAcMSY8cAAcMXAAE8AwABwxcAATwLAAHDFvNDAAHDFvNfAAHDFwABPF8AAcMSY8sAAcMvAAE8EwABwy8AAku7AAHDNwABO9cAAcMvAAE6dwABwy7yRwABwxJjvwABw0Z7cwABw0byPwABw0Z8dwABw0SPAAHDEmPXAAHDWqFDAAHDWAMAAcGHAAE8dwABw2ZjxwABw2ifAAHDawACS7sAAcNwowABw2inAAHDawABPHsAAcNrAAE8fwABw2sAATyDAAHDZmO/AAHDiI8AAcNmY9cAAcOQAwABwYcAATyHAAHDmmPHAAHDnwABKoMAAcOfAAE8iwABw58AATyPAAHDnwABPJMAAcOfAAE8lwABw58AATybAAHDmmPXAAHDuAMAAcGHAAE8nwABw8JjxwABw8aqUwABw8bb1wABw8ZomwABw8JjvwABw9bHmwABw9bx/wABw9SPAAHDwmPLAAHD5wACS7sAAcPrAAE71wABw8Jj1wABw/ADAAHBhwABPKMAAcP6Y8cAAcP8nwABw/8AAku7AAHEBKMAAcP8pwABw/8AATynAAHD/wABPKsAAcP6Y78AAcQYjwABw/pj1wABxCADAAHBhwABPK8AAcQqY8cAAcQvAAEqgwABxC8AATyzAAHELwABPLcAAcQux6sAAcQqY9cAAcRAAwABwYcAATy7AAHESmPHAAHETwACS7sAAcRTAAE8vwABxFMAATzDAAHEUwABPMcAAcRTAAE8ywABxFMAATzPAAHESmO/AAHEavI/AAHEawABPGcAAcRqfHcAAcRojwABxEpjywABxH8AATwTAAHEfwABPGsAAcR/AAE6dwABxEpj1wABxIwDAAHEjqFDAAHBhwABPPsAAcSaY8cAAcScnwABxJ8AAku7AAHEpKMAAcScpwABxJ8AATz/AAHEnwABPQMAAcSfAAE9BwABxJpjvwABxLyPAAHEmmPXAAHExAMAAcGHAAE9CwABxM5jxwABxNMAATz/AAHE0wABPQMAAcTTAAE9BwABxM5j1wABxOADAAHBhwABPQ8AAcTqY8cAAcTuD7MAAcTu80MAAcTu808AAcTu818AAcTqY9MAAcUCwD8AAcTqY78AAcUKwEMAAcTqY9cAAcUQAAMAAku/AAHFGwABPRcAAcUeY78AAcUi2tcAAcUi2nMAAcUeY9cAAcUsAwABxRra4wABxTZjvwABxTra0wABxTZj1wABxUADAAHFGtrnAAHFSmO/AAHFTtq7AAHFTtrDAAHFSmPXAAHFWAMAAcUbAAE9GwABxWJjvwABxWbauwABxWbawwABxWJj1wABxXADAAHFGwABPR8AAcV6Y8cAAcV+3dMAAcV/AAJLvwABxYcAAT0jAAHFemO/AAHFjtrXAAHFjtpzAAHFjtrTAAHFjI8AAcV6Y9cAAcWgAwABxRsAAS+nAAHFqmPHAAHFrmibAAHFrvR7AAHFqmPTAAHFuAMAAcWqY78AAcXC2nMAAcXC2tcAAcXBIwABxcCPAAHFqmPLAAHF1tmHAAHF1wABL8sAAcXWDxsAAcWqY9cAAcXmVp8AAcUbAAE9KwABxe5jywABxfLXwwABxe5j1wABxfgDAAHFGwABPS8AAcYCY8cAAcYG8vMAAcYG8vcAAcYG8tcAAcYCY78AAcYXAAJLvwABxhsAAT0zAAHGGwABPTcAAcYW8ncAAcYW8jcAAcYW2EsAAcYCY9cAAcYwAAMAAkvDAAHGOwABPTsAAcY+Y78AAcZDAAE9PwABxkLXkwABxkIKMwABxj5jywABxlMAAT1HAAHGUwABPUsAAcY+Y9cAAcZcAwABxjsAAT1PAAHGZmPHAAHGawABPVMAAcZrAAE9VwABxmsAAT1bAAHGawABPV8AAcZrAAJLwwABxn8AAT1jAAHGftR3AAHGfwABPWsAAcZrAAE9ZwABxmZjywABxpMAAT1vAAHGkwABPUcAAcaTAAE9SwABxmZjvwABxqMAAT0/AAHGoteTAAHGowACS8MAAcavAAE9cwABxqIKMwABxmZj1wABxrgDAAHGOvUvAAHGwmPHAAHGxwACS8MAAcbKWncAAcbCY9MAAcbSwD8AAcbCY78AAcbawEMAAcbbAAE9lwABxtrfYwABxtrjkwABxjsAAT2bAAHG7mPHAAHG8g+zAAHG8wABPVcAAcbzAAE9XwABxvMAAT2jAAHG8wABPacAAcbzAAE9ZwABxu5j0wABxw7APwABxu5jvwABxxbAQwABxxbfYwABxxbjkwABxxcAAT2XAAHG7mPXAAHHKAMAAcY7AAE9qwABxzJjxwABxzSfAAHHNwACS8MAAcc8owABxzSnAAHHNnYfAAHHNwABPa8AAcc3AAE9swABxzcAAT23AAHHMmO/AAHHWI8AAccyY9cAAcdgAwABxjsAAT27AAHHamO/AAHHbwABPYcAAcdvAAE9kwABx28AAT2PAAHHamPXAAHHfAADAAJLxwABx4ZjvwABx4sAAUBDAAHHhwABPb8AAceSY8cAAceUnwABx5cAAkvHAAHHnKMAAceUpwABx5ZtIwABx5bEewABx5a57wABx5JjvwABx7SPAAHHkmPXAAHHvAMAAceHAAE9wwABx8ZjxwABx8sAAkvHAAHHzwABPccAAcfPAAE9ywABx88AAT3TAAHHzhOfAAHHzwABPdcAAcfPAAE92wABx88AAT3fAAHHzwABPeMAAcfPAAE95wABx85xHwABx8sAAT3PAAHHyh4nAAHHxmO/AAHIAwABPesAAcgDAAE97wAByAJgtwAByAIcAwAByAISnwAByAIT7wAByAMAAT4DAAHIAhYrAAHIAwACS8cAAcgnAAE+BwAByCcAAT5LAAHIJwABPhMAAcgnAAE+TwAByCcAAT5fAAHIJwABPosAAcgnAAE+PwAByCcAAT7XAAHIJwABPvcAAcgnAAE+8wAByAMAAT4LAAHIAwABPg8AAcgCFoMAAcgDAAE+JwAByAIWiwAByAMAAT4zAAHIAhaTAAHIAwABPjcAAcgCFqMAAcgDAAE+QwAByAIWmwAByAMAAT5HAAHIAwABPo8AAcgCFvsAAcgDAAE+hwAByAIWTwAByAMAAT6jAAHIAhZXAAHIAwABPqcAAcgCFssAAcgDAAE+qwAByAIW0wAByAMAAT6vAAHIAhcLAAHIAqtLAAHIAhcTAAHIAwABPrMAAcgCFrsAAcgDAAE+twAByAIWwwAByAMAAT67AAHIAhcDAAHIAhdDAAHIAhcvAAHIAhdXAAHIAwABPusAAcgCF8sAAcgCGIcAAcgCGI8AAcgDAAE++wAByAIXIwAByAIYvwAByAIYrwAByAMAAT4vAAHIAhfbAAHIAwABPwcAAcgCF2cAAcgDAAE/CwAByAIX7wAByAMAAT8PAAHIAhf7AAHIAwABPxMAAcgCGAMAAcgDAAE/FwAByAIX5wAByAMAAT8bAAHIAhgXAAHIAwABPx8AAcgCGAsAAcgDAAE/IwAByAIYPwAByAMAAT8nAAHIAhhHAAHIAwABPysAAcgCGE8AAcgCGFcAAcgDAAE/LwAByAIYbwAByAMAAT9HAAHIAhg3AAHIAhlDAAHIAhlLAAHIAhjrAAHIAhjzAAHIAhmbAAHIAhWnAAHIAwABP0sAAcgCFYMAAcgDAAE/TwAByAIVkwAByAMAAT9TAAHIAhWLAAHIAhWbAAHIAhbrAAHIAhjTAAHIAhkTAAHIAwABP1sAAcgCGSMAAcgCGQMAAcgCGPsAAcgDAAE/awAByAIZLwAByAIZWwAByAIZUwAByAIZZwAByAMAAT97AAHIAhl3AAHIAhmDAAHIAwABP38AAcgCGB8AAcgDAAE/gwAByAIYmwAByAMAAT+HAAHIAhjjAAHIAwABP48AAcgCGccAAcgDAAE/kwAByALGbwAByAMAAT+XAAHIAwABP0MAAcgDAAE/mwAByAIVTwAByAMAAT+fAAHIAhTXAAHIAwABP6MAAcgCFMMAAcgDAAE+gwAByAIZvwAByAMAAT+nAAHIAhh7AAHHxmPLAAHKMuVrAAHKMuVvAAHKMuUfAAHKMhMnAAHKMtyLAAHKMwABPfMAAcozAAE99wAByjJyewABx8ZjzwABylYTJwABylbciwABylcAAT3zAAHKVwABPfcAAcfGY9cAAcpoAwABx4cAAT+rAAHKcmPHAAHKdhavAAHKdhXXAAHKcmPXAAHKgAMAAceHAAE/rwAByopjxwAByo60swAByo8AAT+zAAHKjwABP7cAAcqPAAJLxwAByp4aXwAByopjvwAByqcAAT6bAAHKpSMAAcqnAAJLxwAByrMAAT+7AAHKpI8AAcqKY8sAAcq+DxsAAcqKY9cAAcrEAwABx4cAAT/TAAHKzmPHAAHK0rSzAAHK0wABP9cAAcrTAAE/2wABys5jvwAByuMAAT6XAAHK4WMAAcrjAAE+mwAByuMAAkvHAAHK8wABP7sAAcrgjwABys5j1wAByvwDAAHHhwABQCMAAcsGY8cAAcsLAAJLxwAByw8AAUAnAAHLBmO/AAHLFwABPpcAAcsVYwAByxYRewAByxZaVwAByxcAAT6bAAHLFvl3AAHLFI8AAcsGY9cAAcs0AAMAAkvLAAHLPh/HAAHLQmPHAAHLRwACS8sAActKWncAActCY9MAActSwD8AActCY78AActawEMAActaqlMAActa86sAActa868AActa3rMAActbAAFARwABy1ptqwABy1ptJwABy1sAAUBLAAHLWt1PAAHLWt63AAHLWwABQE8AActbAAFAUwABy1sAAUBXAAHLWt1TAAHLWt67AAHLWwABQFsAActbAAFAXwABy1sAAUBjAAHLWtwvAAHLWtzXAAHLWtzbAAHLWt0nAAHLWwABQHcAActbAAFAewABy1rSywAByz8AAUB/AAHLxmPHAAHLyg+zAAHLywACS8sAAcvS1HcAAcvTAAFAhwABy9MAAUCLAAHLxmPTAAHL4sA/AAHLxmO/AAHL6sBDAAHL6qpTAAHL6vOrAAHL6vOvAAHL6t6zAAHL6wABQEcAAcvqbScAAcvqbasAAcvrAAFASwABy+rdTwABy+retwABy+sAAUBPAAHL6wABQFMAAcvrAAFAVwABy+rdUwABy+reuwABy+sAAUBbAAHL6wABQF8AAcvrAAFAYwABy+rcLwABy+rc1wABy+rc2wABy+rdJwABy+sAAUB3AAHL6wABQHsAAcvq0ssAAcvGY9cAAcxUAwAByz6Q0wABzF5jxwABzGMAAkvLAAHMZwABQIcAAcxnAAFAiwABzGbUdwABzGb0AwABzGcAAUEHAAHMZwABQQsAAcxi3XMAAcxeY78AAcyGCjMAAcyGlW8AAcyHAAJLywABzJMAAUEbAAHMkwABQRMAAcyTAAFBPwABzJMAAUFHAAHMhvQrAAHMhwABQTcAAcyG9IcAAcyG9IsAAcyG9I8AAcxeY9cAAcy4AwAByz8AAUFrAAHMwmPHAAHMxwACS8sAAczLAAFBbwABzMqqnwABzMJjvwABzNcAAUFnAAHM1wACS8sAAczfAAFBcwABzMJj1wABzOQDAAHLPwABQZcAAczuY8cAAczzAAJLywABzPaqnwABzO5jvwABzP70jwABzP8AAkvLAAHNBwABQZsAAczuY9cAAc0MAwAByz8AAUGjAAHNFmPHAAHNGwACS8sAAc0fAAFBpwABzR5wTwABzRZjvwABzSsAAUF3AAHNFmPXAAHNMAMAAcs+83cAAc06Y78AAc0/AAFBFwABzT8AAUEzAAHNPwABQSMAAc0/AAFBQwABzT7QTwABzT70awABzTpj1wABzVgDAAHLPwABQasAAc1iY8cAAc1knwABzWcAAkvLAAHNbKMAAc1kpwABzWbctwABzWbcuwABzWbcvwABzWJjvwABzYSPAAHNYmPXAAHNjAMAAcs/AAFBrwABzZZjxwABzZifAAHNmwACS8sAAc2gowABzZinAAHNmtyzAAHNmwABQbMAAc2bAAFBtwABzZsAAUG7AAHNmwABQb8AAc2bAAFBwwABzZsAAUHHAAHNmnbLAAHNlmO/AAHNzI8AAc2WY9cAAc3UAwAByz8AAUHLAAHN3mPHAAHN4gmvAAHN4hIjAAHN4tyzAAHN4wABQbMAAc3jAAFBtwABzeMAAUG7AAHN4wABQb8AAc3jAAFBwwABzeMAAUHHAAHN3mO/AAHOCI8AAc3eY9cAAc4QAwABzhJWnAMAAkvPAAHOHtNfAAHOImPHAAHOJtIfAAHOImO/AAHOLVsAAc4uApcAAc4uEXsAAc4iY8sAAc4+BVcAAc49hwABziJj1wABzkgDAAHOHtrrAAHOUmPHAAHOVq9/AAHOVpUDAAHOVwACS88AAc5ilpsAAc5jAAFB4wABzlJjywABzm4C9wABzm7HGwABzlJjvwABznrfMwABznsAAUHrAAHOewABQfcAAc57AAFB8wABzlJj1wABzowAAwACS9MAAc6WY78AAc6bAAFCLwABzpcAAUIrAAHOomO/AAHOpva3AAHOpwABHAsAAc6m9lsAAc6nAAEb/wABzqcAARwDAAHOpwABHAcAAc6m9kMAAc6m1RcAAc6mFyMAAc6m9k8AAc6m5p8AAc6mHT8AAc6m9pMAAc6m9p8AAc6m9nMAAc6nAAEcDwABzqb2ZwABzqZ9UwABzqJj1wABzvAAAwACS9cAAc76Y78AAc7/AAFDBwABzv6x3wABzv8AAUMLAAHO/wABQxMAAc77AAFCNwABzxJjywABzxbRZwABzxYWFwABzxaVZwABzxJjvwABzycAATaPAAHPJwABQjsAAc8nAAE2fwABzyavrwABzybOBwABzycAAUI/AAHPJwABQkMAAc8mcaMAAc8nAAFCRwABzyah0wABzycAATnrAAHPJnG/AAHPJwABQksAAc8nAAFCTwABzycAAT2PAAHPJmXXAAHPJwABQlMAAc8nAAFCVwABzycAAUJbAAHPJwABOe8AAc8nAAFCXwABzycAAUJjAAHPJwABQmcAAc8nAAFCawABzybfjwABzybj6wABzycAAUJvAAHPJnGbAAHPJwABQnMAAc8nAAFCdwABzycAAUJ7AAHPJwABQn8AAc8nAAFCgwABzxJj1wABz6wDAAHO+wABQocAAc+2Y78AAc+64/sAAc+64/8AAc+65AMAAc+65AcAAc+65AsAAc+630cAAc+63xsAAc+63yMAAc+63x8AAc+65BMAAc+65BcAAc+65BsAAc+65B8AAc+63zsAAc+65CMAAc+2Y9cAAc/4AwABzvsAAUKLAAHQAmPLAAHQBqzrAAHQAmO/AAHQDwABNnMAAdAPAAE2ewAB0A8AATaDAAHQDwABNosAAdAPAAE2SwAB0A8AATZPAAHQDwABNl8AAdAPAAE2YwAB0A8AATZTAAHQDwABNlcAAdAPAAE2WwAB0A8AATZnAAHQDwABNmsAAdAPAAE2bwAB0A7AQwAB0AJj1wAB0EwDAAHO+oOXAAHQVmPHAAHQWJ8AAdBbAAJL1wAB0GCjAAHQWKcAAdBbAAFCqwAB0Fpk0wAB0FsAAUKvAAHQWwABMT8AAdBbAAFCswAB0Fq4twAB0FsAAUK3AAHQVmO/AAHQiI8AAdBWY9cAAdCQAwABzvsAAUK7AAHQmmPLAAHQngmvAAHQng/PAAHQnhGDAAHQmmPTAAHQrsA/AAHQmmO/AAHQtsBDAAHO+wABQsMAAdC+Y8cAAdDAnwAB0MMAAkvXAAHQyKMAAdDApwAB0MMAAUKrAAHQwtWjAAHQwqlDAAHQvmO/AAHQ4I8AAdC+Y9cAAdDoAwABzvsAAULTAAHQ8mPHAAHQ9g+zAAHQ9g/PAAHQ8mPTAAHRAsA/AAHQ8mO/AAHRCsBDAAHRCI8AAdDyY8sAAdEWEYMAAdEWCa8AAdDyY9cAAdEgAwABzvsAAULnAAHRKmPHAAHRLg+zAAHRLg/PAAHRLgmvAAHRKmPTAAHRPsA/AAHRKmO/AAHRRsBDAAHRRI8AAdEqY8sAAdFSEYMAAdEqY9cAAdFYAwABzvsAAULzAAHRYmPLAAHRZgmvAAHRZg/PAAHRZhGDAAHRYmPTAAHRdsA/AAHRYmO/AAHRfsBDAAHO+wABQvsAAdGGY8cAAdGKD7MAAdGKD88AAdGGY9MAAdGWwD8AAdGGY78AAdGewEMAAdGcjwAB0YZjywAB0aoRgwAB0aoJrwAB0YZj1wAB0bQAAwACS9sAAdG+Y78AAdHDAAJL2wAB0ccAAUV3AAHRvwABQxsAAdHOY8cAAdHS34cAAdHOY8sAAdHZ6wAB0dqVAwAB0dqUuwAB0drHGwAB0drRZwAB0drfXwAB0doWFwAB0dsAAUMfAAHR2pW3AAHR2t9XAAHRzmO/AAHSBwABQe8AAdIHAAEuMwAB0gcAAUMjAAHSBwABQycAAdIHAAFDKwAB0gcAAUMvAAHSBwABQzcAAdIHAAFDOwAB0gcAAUM/AAHSBwABQ0MAAdIHAAFB9wAB0gcAAUIDAAHSBwABQ0cAAdIHAAFDSwAB0gcAAUNTAAHSBwABQ1cAAdIHAAFDWwAB0gcAAUNfAAHSBwABQ2MAAdIHAAFDawAB0gcAAUNzAAHSBwABQ3sAAdIHAAFDgwAB0gcAAUOHAAHSBt/HAAHSBwABQ4sAAdIHAAFDjwAB0gcAAUOTAAHSBt+/AAHSBt/DAAHSBgozAAHSBgkbAAHSBwABQ5cAAdIHAAFDmwAB0gblOwAB0c5j1wAB0pQDAAHRvwABQ58AAdKeY8cAAdKjAAFDowAB0qLvdwAB0qLfVwAB0qMAAUOnAAHSowABQ6sAAdKjAAFDrwAB0qMAAUOzAAHSoesAAdKiC0sAAdKilLsAAdKjAAJL2wAB0s7lhwAB0s8AARYvAAHSopUDAAHSopW3AAHSohYXAAHSowABQx8AAdKjAAFDtwAB0qLYnwAB0p5jywAB0vMAAkvbAAHS9sE7AAHSnmO/AAHS/wABQzcAAdL/AAFCAwAB0v8AAUO7AAHS/wABQ5MAAdL/AAFDgwAB0v8AAUNHAAHS/wABQ0sAAdL+378AAdL+38MAAdL/AAFDIwAB0v8AAUMnAAHS/wABQysAAdL/AAFB7wAB0v8AAUQbAAHS/wABRLsAAdL/AAFEXwAB0v8AAS4zAAHS/wABRMMAAdL/AAFE1wAB0v73SwAB0v8AAUTbAAHS/wABRKsAAdL/AAFEJwAB0v8AAUQjAAHS/wABQ3sAAdL/AAFDQwAB0v8AAUM7AAHS/wABQz8AAdL/AAFDjwAB0v8AAUOLAAHS/wABQ4cAAdL/AAFDVwAB0v8AAUNTAAHS/wABQy8AAdL/AAFDawAB0v8AAUNzAAHS/wABQ1sAAdL/AAFDXwAB0v8AAUNjAAHS/gozAAHS/gkbAAHS/wABQfcAAdL+38cAAdL/AAFDlwAB0v8AAUObAAHS/uU7AAHSnmPXAAHTuAMAAdG/AAFFIwAB08Jjx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wABTnsAAej3AAFOfwAB6PcAAU6DAAHo9wABTm8AAejy4FcAAejy4OMAAejy4N8AAejy4NsAAejy4NcAAejy4M8AAejy4NMAAejy4McAAejy4MsAAejy4MMAAejy4L8AAejy4LsAAejy4LcAAejy4LMAAejy4K8AAejy4KsAAejy4KcAAejy4JMAAejy4JcAAejy4JsAAejy4J8AAejy4KMAAejyjmsAAejy4IsAAejy4I8AAejy4IcAAejy4IMAAejy4H8AAejy4HcAAejy4HsAAejy4HMAAejy4G8AAejy4GsAAejy4GcAAejy4OcAAejy4GMAAejy4FsAAejy4F8AAejy4OsAAejWY9cAAem0AwAB6bcAAU5fAAHoqwABTosAAenCY8cAAenGDYsAAenG4PsAAenG4PcAAenCY9cAAenUAwAB6dbhMAMAAkwHAAHp4wABTqcAAenmY78AAenrAAEf3wAB6eZj1wAB6fADAAHp4wABTq8AAen6Y78AAen/AAFGGwAB6fpj1wAB6gQDAAHp4wABTrMAAeoOY78AAeoTAAEffwAB6hMAAR+HAAHqDmPXAAHqHAMAAenjAAFOtwAB6iZjvwAB6isAAUYTAAHqJmPXAAHqMAMAAenjAAFOuwAB6jpjxwAB6j4NrwAB6jpjvwAB6kcAAUYTAAHqOmPXAAHqTAMAAenjAAFOvwAB6lZjvwAB6lsAATZ3AAHqWwABRk8AAepbAAFGSwAB6lZj1wAB6mgDAAHp4wABTsMAAepyY8cAAep24CcAAepyY78AAep/AAE2dwAB6n8AAUZPAAHqfwABRksAAepyY9cAAeqMAwAB6eMAAU7HAAHqlmO/AAHqmwABH+MAAeqWY9cAAeqgAAMAAkwLAAHqqwABTs8AAequY8cAAeqwnwAB6rMAAkwLAAHquKMAAeqwpwAB6rMAAU7bAAHqswABTt8AAequY78AAerMjwAB6q5j1wAB6tQDAAHqqwABTuMAAereY8cAAeriwJsAAerjAAFO5wAB6uLAlwAB6uLrkwAB6uLxfwAB6uMAAU7rAAHq4wABTu8AAerjAAJMCwAB6wMAAU7zAAHq3mPLAAHrCwABTvcAAereY78AAesTAAFO+wAB6xLV5wAB6t5j1wAB6xwDAAHqqwABTwcAAesmY8cAAesrAAJMCwAB6y7UdwAB6y8AAU8LAAHrLwABTw8AAesvAAFPEwAB6y8AAU8XAAHrLwABTxsAAesvAAFPHwAB6y8AAU8jAAHrLwABTycAAesvAAFPKwAB6y8AAU8vAAHrLwABTzMAAesvAAFPNwAB6y8AAU87AAHrLwABTz8AAesvAAFPQwAB6y8AAU9HAAHrLwABT0sAAesvAAFPTwAB6y8AAU9TAAHrLwABT1cAAesvAAFPWwAB6y8AAU9fAAHrLwABT2MAAesvAAFPZwAB6y8AAU9rAAHrLwABT28AAesvAAFPcwAB6y8AAU93AAHrLwABT3sAAesvAAFPfwAB6y8AAU+DAAHrLwABT4cAAesvAAFPiwAB6y8AAU+PAAHrLwABT5MAAesvAAFPlwAB6y8AAU+bAAHrLwABT58AAesvAAFPowAB6y8AAU+nAAHrLwABT6sAAesvAAFPrwAB6y8AAU+zAAHrLwABT7cAAesvAAFPuwAB6y8AAU+/AAHrLwABT8MAAesvAAFPxwAB6y5w+wAB6y5w5wAB6y5w4wAB6y7NDwAB6y8AAU/LAAHrLsxTAAHrLsxnAAHrLs0LAAHrLwABT88AAesvAAFP0wAB6y8AAU/XAAHrLwABT9sAAesvAAFP3wAB6y8AAU/jAAHrLwABT+cAAesvAAFP6wAB6y8AAU/vAAHrLwABT/MAAesvAAFP9wAB6y8AAU/7AAHrLwABT/8AAesmY8sAAexKyocAAexKyn8AAexLAAFQCwAB7EsAAVAPAAHsSwABUBMAAexLAAFQFwAB7EsAAVAbAAHsSwABUB8AAexKyr8AAexLAAE7EwAB7ErKtwAB7EsAAVA3AAHsSwABUDsAAexLAAFQPwAB7EsAAVBDAAHsSwABUEcAAexKt5cAAexLAAFQBwAB7ErKRwAB7ErKSwAB7EsAAVBLAAHsSwABUF8AAexLAAFQYwAB7EsAAVBnAAHsSwABUGsAAexLAAFQbwAB7EsAAVBzAAHsSwABUHcAAexLAAFQewAB7EsAAVCDAAHsSwABUIsAAexLAAFQjwAB7EsAAVCTAAHsSwABUJcAAexLAAFQmwAB7EsAAVCfAAHsSs9/AAHsSwABUKMAAexKz6cAAexLAAFQpwAB7EsAAVCrAAHsSwABUK8AAexKuGcAAexLAAFQtwAB7EsAAVC7AAHsSwABUL8AAexLAAFJ8wAB7EsAAVDDAAHsSwABUMcAAexK1aMAAexLAAFQywAB7ErO/wAB7EsAAVDPAAHsSwABUNMAAexKbOcAAexKbPsAAexKbPcAAexKycMAAexLAAFQ1wAB7ErI3wAB7ErI8wAB7ErJvwAB7EsAAVDbAAHsSwABUN8AAexKyi8AAexKz08AAexLAAFQ4wAB7EsAAVDnAAHsSwABUOsAAexKvJcAAexLAAFQ7wAB7ErCswAB7EsAAVDzAAHsSwABUPsAAesmY78AAe13AAJMCwAB7XsAAVBPAAHtewABUCsAAe17AAFQIwAB7XcAAVD3AAHtdwABUAMAAesmY9cAAe2QAAMAAkwPAAHtmwABUQcAAe2eY8cAAe2jAAJMDwAB7abMEwAB7abBOwAB7abUdwAB7acAAVELAAHtpwABUQ8AAe2nAAFKowAB7acAAVETAAHtpwABURcAAe2nAAFRGwAB7acAAVEfAAHtnmO/AAHt0teDAAHt0td/AAHt0wACTA8AAe3fAAFRJwAB7d8AAVEvAAHt3wABUTsAAe3fAAFRPwAB7d8AAVFDAAHt3wABUUsAAe3S128AAe3S148AAe3S15MAAe3S15sAAe3S14sAAe3S14cAAe3S13sAAe3SwUsAAe3Sfj8AAe2eY9cAAe4cAAMAAkwTAAHuJwABUU8AAe4qY8cAAe4vAAJMEwAB7jMAASULAAHuMsE7AAHuMtR3AAHuKmPLAAHuQWMAAe4qY78AAe5KwUsAAe5KwVcAAe5KERsAAe4qY9cAAe5YAwAB7icAAVFXAAHuYmPHAAHuZWMAAe5iY78AAe5vAAFRYwAB7mJj1wAB7nQDAAHuJwABUWsAAe5+Y8cAAe6BYwAB7n5jvwAB7osAAVFHAAHuiwABUXMAAe6KE5MAAe5+Y8sAAe6bAAFRbwAB7n5j1wAB7qADAAHuJwABUX8AAe6qY8cAAe6vAAJMEwAB7rLBOwAB7rLUdwAB7rMAASULAAHusuRfAAHurwABUYMAAe6u2KMAAe6u8X8AAe6vAAFRZwAB7q8AAVFfAAHurwABUVMAAe6vAAFRdwAB7qpjvwAB7uIRGwAB7uMAAkwTAAHu6wABUZMAAe7jAAFRewAB7qpj1wAB7vQAAwACTBcAAe7/AAFRowAB7wJjxwAB7wcAAkwXAAHvCsE7AAHvCtR3AAHvCwABUQsAAe8K5EMAA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wABU6cAAfMzAAFTqwAB8zLUdwAB8zLBOwAB8zLkawAB8zMAAVOvAAHzMwABU6MAAfMzAAFTswAB8zMAASULAAHzMwABUm8AAfMzAAFKowAB8zMAAVO3AAHzMwABXA8AAfMuFhcAAfMtewAB8y6XBwAB8oJjvwAB83aEswAB83aEvwAB83cAAVO7AAHzdufLAAHzdpYvAAHzdgozAAHzdwACTCcAAfOTAAFTvwAB85MAAVPbAAHzkwABU98AAfOTAAFT7wAB85MAAVPzAAHzkwABVAsAAfOTAAFUDwAB85MAAVQXAAHzkwABU58AAfOTAAFUHwAB85MAAVRXAAHzkwABVCcAAfOTAAFULwAB85MAAVR3AAHzkwABVJMAAfOTAAFUqwAB85MAAVQ3AAHzkwABVQ8AAfOTAAFVBwAB85MAAVTnAAHzkwABVRcAAfOTAAFVHwAB85MAAVUrAAHzkwABVLsAAfOTAAFVTwAB85MAAVU7AAHzkwABVTcAAfOTAAFVYwAB85MAAVRPAAHzkwABVEsAAfOTAAFUOwAB85MAAVQrAAHzkwABVZMAAfOTAAFVdwAB85MAAVRTAAHzkwABVZ8AAfOTAAFVowAB85MAAVWvAAHzkwABVCMAAfOTAAFUzwAB85MAAVTXAAHzkwABVXsAAfOTAAFUawAB85MAAVSHAAHzkwABVk8AAfOTAAFWUwAB85MAAVZLAAHzkwABU+sAAfOTAAFVfwAB85MAAVdDAAHzkwABVzMAAfOTAAFXSwAB85MAAVdnAAHzkwABV4MAAfOTAAFXhwAB85MAAVeLAAHzkwABV3sAAfOTAAFXfwAB85MAAVebAAHzkwABV9cAAfOTAAFX5wAB85MAAVgnAAHzkwABWC8AAfOTAAFYMwAB85MAAVg7AAHzkwABWD8AAfOTAAFYRwAB85MAAVhLAAHzkwABWE8AAfOTAAFYUwAB85MAAVaDAAHzkwABVgcAAfOTAAFYXwAB85MAAVhbAAHzkwABWFcAAfOTAAFY+wAB85MAAVk3AAHzkwABWYMAAfOTAAFYqwAB85MAAVizAAHzkwABWLsAAfOTAAFYwwAB85MAAVjLAAHzkwABWa8AAfOTAAFZpwAB85MAAVjPAAHzkwABWNMAAfOTAAFZxwAB85MAAVnPAAHzkwABWNsAAfOTAAFY4wAB85MAAVjrA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wAB/1sAAWGbAAH/WwABYZ8AAf9bAAFhowAB/1sAAWGnAAH/WwABYasAAf9bAAFhrwAB/1sAAWHrAAH/WwABYgMAAf9bAAFiYwAB/1sAAWJ3AAH/WwABYo8AAf9bAAFiZwAB/1sAAWKnAAH/WwABYrsAAf9bAAFiqwAB/1sAAWK/AAH/WwABYp8AAf9bAAFiywAB/0bN+wAB/0bN9wAB/0bQSwAB/0aG9wAB/0bOBwAB/0ZxmwAB/0ZxvwAB/0cAAWETAAH/RwABYSMAAf9HAAFCSwAB/0ZxowAB/0cAAUJPAAH/RqHTAAH/RwABYU8AAf9HAAFCRwAB/0cAATnrAAH/RwABNo8AAf9HAAE2fwAB/0cAAUJnAAH/RwABQjsAAf9Gr68AAf9HAAFhbwAB/0cAAR9PAAH/RwABHqsAAf9G0GcAAf9G0HMAAf9HAAFBMwAB/0cAAR6nAAH/RwABYbMAAf9HAAFBIwAB/0cAAR9XAAH/RwABYbsAAf9HAAFhvwAB/0cAAUJfAAH/RwABQoMAAf9GZdcAAf9HAAFCPwAB/0cAAUJDAAH/RwABYdcAAf9HAAFhzwAB/0cAAWHTAAH/RwABYeMAAf9HAAFCUwAB/0cAAUJXAAH/RwABQlsAAf9HAAE57wAB/0cAAWInAAH/RwABPY8AAf9HAAFgswAB/0cAAWIvAAH/RwABYjMAAf9G0LsAAf9G4+sAAf9HAAFCbwAB/0cAAWD7AAH/RwABQnMAAf9HAAFg5wAB/0cAAWELAAH/RwABYT8AAf9HAAFg3wAB/0cAAWFDAAH/RwABYR8AAf9HAAFhOwAB/0cAAUJ3AAH/RwABQmsAAf9G348AAf9HAAFCYwAB/0bQ2wAB/0bQtwAB/0bQswAB/0cAAUJ/AAH/RwABYpcAAf9HAAFCewAB/o5jywACAP4WFwACAP6VZwACAP7RZwACAP8AAkw3AAIBDwABYNsAAgEPAAFg4wACAP4bowACAP4f2wACAP8AAWI/AAH+jmPXAAIBJAMAAgEmwD8AAf6LAAFi2wACATJjxwACATbSzwACATJjywACAT57SwACAT7QQwACAT6VdwACAT4b1wACATJjvwACAVJm4wACAVLQZwACAVLBUwACAVLQawACAVIT2wACAVLQbwACAVLQvwACAVLQwwACAVLQcwACAVLQxwACAVLOBwACAVKvrwACAVLQdwACAVLQzwACAVLQywACAVLQfwACAVLQewACAVLQgwACAVKG9wACAVLOAwACAVLQTwACAVLQYwACAVLQUwACAVLQswACAVLQVwACAVLQWwACAVLQtwACAVLQuwACAVLQRwACAVLN+wACAVLN9wACAVKVawACAVLNzwACAVLQhwACAVLQ2wACAVLQ3wACAVLQ0wACAVLQ1wACATJj1wACAewDAAH+iwABYwMAAgH2Y8cAAgH6lWcAAgH60WcAAgH6lLsAAgH6y4MAAgH7AAJMNwACAg7MEwACAfZjywACAhYLOwACAfZj1wACAhwDAAH+iwABYwcAAgImY8cAAgIrAAJMNwACAi7i0wACAi8AAU0HAAICLwABYwsAAgImY78AAgI/AAJMNwACAkMAAWFzAAICJmPXAAICSAMAAf6LAAFjDwACAlJjxwACAlcAAkw3AAICWuLTAAICWwABTQcAAgJSY8sAAgJm0WcAAgJmFhcAAgJmlLsAAgJm+McAAgJSY78AAgJ7AAEfTwACAnr20wACAnr3SwACAnr3WwACAnr4nwACAlJj1wACApADAAH+iwABYxcAAgKaY8cAAgKfAAJMNwACAqIjDwACAqJwTwACAqMAARpLAAICop5XAAICoqefAAICmmO/AAICuwABYHMAAgK6lW8AAgK7AAFgvwACArsAAWDDAAICuwABYMcAAgK7AAFgywACArqVawACArsAAWDPAAICuwABYNMAAgK7AAEdTwACArsAARW/AAICuwABFcMAAgK7AAEVxwACArsAARXLAAICuwABFc8AAgKaY9cAAgL4AwAB/osAAWNHAAIDAmPHAAIDBwACTDcAAgMK4tMAAgMCY78AAgMTAAEVzwACAxMAARXLAAIDEwABFccAAgMTAAEVwwACAxMAARW/AAIDAmPXAAIDKAMAAf6LAAFjSwACAzJjxwACAzSfAAIDNwACTDcAAgM8owACAzSnAAIDNwABQq8AAgM3AAFCtwACAzJjvwACA1CPAAIDMmPXAAIDWAMAAf6LAAFjVwACA2JjxwACA2cAAkw3AAIDauLTAAIDYmO/AAIDcwABFeMAAgNzAAJMNwACA3sAAWNbAAIDYmPXAAIDgAMAAf6LAAFjYwACA4pjxwACA48AAkw3AAIDkwABY2cAAgOS4tMAAgOKY78AAgOfAAEWAwACA58AAkw3AAIDpwABY2sAAgOKY9cAAgOsAAMAAkw7AAIDtwABY3cAAgO6Y8cAAgO+D7MAAgO+4z8AAgO+408AAgO+0psAAgO+318AAgO/AAJMOwACA9cAAWN/AAID1wABY4MAAgPXAAFjhwACA9cAAVOzAAID1wABY4sAAgO+3XMAAgO+9F8AAgO+9KcAAgO+9KsAAgO+9HMAAgO+42MAAgO+2HcAAgO+H9sAAgO+0s8AAgO+40MAAgO+1U8AAgO+lbsAAgO+0OMAAgO+9TsAAgO+wAMAAgO/AAFjjwACA7pj0wACBC7APwACA7pjvwACBDbAQwACBDbb1wACBDbeFwACBDbeGwACBDZtswACBDbdbwACBDbdfwACBDbdawACBDbddwACBDbenwACBDbcMwACBDbdZwACBDbdgwACBDcAAkw7AAIEbwABY98AAgRvAAFjpwACBG8AAWPXAAIENt17AAIENvVHAAIENtX3AAIENwABY+MAAgQ22ocAAgQ24mcAAgQ23WMAAgQ28r8AAgO6Y8sAAgSelWcAAgSe0WcAAgSe418AAgSe9T8AAgSexxsAAgO6Y9cAAgS0AwACA7cAAWPrAAIEvmPHAAIEwtLPAAIEvmO/AAIEywACTDsAAgTPAAFj7wACBM8AAWPzAAIEywABZAcAAgTLAAFkCwACBMsAAWQTAAIEywABZCcAAgTLAAFkKwACBMsAAWQfAAIEywABZDcAAgTLAAFkDwACBL5j1wACBPgDAAIDtwABZD8AAgUCY8cAAgUHAAJMOwACBQrjJwACBQJjvwACBRMAARYTAAIFAmPXAAIFGAADAAJMPwACBSJjwwACBScAAWRDAAIFImO/AAIFLwABNBsAAgUvAAFlewACBSMAAV27AAIFOmPHAAIFPwACTD8AAgVC4tMAAgVDAAFAhwACBUMAAUCLAAIFQuMnAAIFQwABZEcAAgVCzBMAAgVDAAFkSwACBTpjywACBWMAAkw/AAIFZsE7AAIFZtR3AAIFOmO/AAIFcuMzAAIFcwACTD8AAgV7AAFkUwACBXsAAWTTAAIFewABZFcAAgV7AAFkWwACBXsAAWSfAAIFewABZL8AAgVzAAFehwACBTpj1wACBZgDAAIFIwABZQcAAgWiY78AAgWnAAFeLwACBacAAUrjAAIFpwABS6MAAgWnAAFeI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aMAAWZDAAIJowABMbcAAgmi5A8AAgmitBMAAgmjAAFmRwACCaMAAWZrAAIJnmPLAAIJ1g8bAAIJnmO/AAIJ3SMAAgncjwACCZ5j1wACCesAAkxPAAIJ7wABZncAAgnrAAFmWwACCesAAWZfAAIJ6wABZmMAAgnrAAFmZwACCesAAWZLAAIJ6wABZk8AAgnrAAFmUwACCesAAWZXAAIJ6wABZm8AAgh3AAFmjwACChpjxwACChyfAAIKHwACTE8AAgokowACChynAAIKHmibAAIKHlpzAAIKHnzPAAIKHgm7AAIKGmO/AAIKQI8AAgoaY9cAAgpIAwACCHcAAWajAAIKUmPHAAIKVglfAAIKVgpTAAIKVgmvAAIKVtbbAAIKUmPTAAIKaAMAAgpSY78AAgpyEUsAAgpyEU8AAgpxIwACCnCPAAIKUmPLAAIKhg8bAAIKUmPXAAIKjlacAwACTFMAAgqWY78AAgqbAAJMUwACCp8AAWinAAIKlwABZr8AAgqmY78AAgqrAAFmwwACCqsAAWbHAAIKqwABZssAAgqrAAFmzwACCqsAAWbTAAIKqwABZtcAAgqrAAFm2wACCqsAAWbfAAIKqwABZuMAAgqrAAFm5wACCqsAAWbrAAIKqwABZu8AAgqrAAFm8wACCqrBDwACCqsAAWb7AAIKqwABZv8AAgqrAAFnAwACCqsAAWcHAAIKqwABZwsAAgqrAAFnDwACCqrYUwACCqsAAWcTAAIKqwABZxcAAgqrAAFnGwACCqsAAWcfAAIKqwABZycAAgqrAAFnKwACCqsAAWcvAAIKqwABZzMAAgqrAAFRYwACCqsAAWc3AAIKqwABZzsAAgqrAAFnPwACCqsAAWdDAAIKqwABZ0cAAgqrAAFnSwACCqsAAWdPAAIKqwABZ1MAAgqq8ncAAgqrAAFnVwACCqryNwACCqsAAWdbAAIKqwABZ18AAgqrAAFnYwACCqsAAWdnAAIKqwABZ2sAAgqrAAFnbwACCqsAAWdzAAIKqwABZ3cAAgqrAAFnewACCqsAAWd/AAIKqwABUd8AAgqrAAFngwACCqsAAWeHAAIKqwABZ4sAAgqrAAFnjwACCqsAAWeTAAIKqwABZ5cAAgqmY9cAAguUAwACCpcAAWebAAILnmPHAAILouUfAAILnmO/AAILqwABPwsAAgurAAE/DwACC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sFLAAIRUwABaXMAAhFSfj8AAhESY9cAAhG0AAMAAkxrAAIRvwABaYcAAhHCY8cAAhHHAAJMawACEcrUbwACEcsAAWmLAAIRywABaY8AAhHCY8sAAhHakhsAAhHaAz8AAhHbAAFpkwACEdsAAWmXAAIR2wABaZsAAhHbAAFpnwACEdsAAWmjAAIR2wABaacAAhHa8tMAAhHaCa8AAhHCY78AAhIGEpcAAhIHAAFpqwACEgcAAWmzAAISBwABabcAAhIHAAFprwACEgcAAWm7AAISBwABacMAAhIHAAFpvwACEgSPAAIRwmPXAAISLAMAAhG/AAFpxwACEjZjxwACEjpomwACEjZjywACEkKSGwACEkIJrwACEjZj1wACEkwDAAIRvwABacsAAhJWY8cAAhJaCbsAAhJa1ucAAhJbAAFpzwACElsAAWnTAAISWwABadcAAhJWY8sAAhJykhsAAhJyCa8AAhJWY78AAhJ/AAFp2wACEnyPAAISVmPXAAISiAMAAhG/AAFp8wACEpJjxwACEpcAAkxrAAISmqBfAAISmnBPAAISmwABafcAAhKbAAFp+wACEpsAAWn/AAISlwABS2cAAhKXAAFKkwACEpJjywACErsAAWoTAAISuwABahcAAhK7AAFqGwACErsAAWofAAISkmO/AAISzwABaiMAAhLPAAFqJwACEs8AAWorAAISzwACTGsAAhLfAAFqLwACEt8AAWozAAIS3wABagMAAhLfAAFqBwACEt8AAWoLAAIS3wABag8AAhLO0ssAAhKSY9cAAhL8AwACEb71MwACEwZj0wACEwrAPwACEwZjvwACExLAQwACExMAAUrjAAITEwABS6MAAhMTAAFRIwACExMAAVhDAAITEwABWrMAAhG/AAFqcwACEy5jxwACEzMAAkxrAAITNsE7AAITLmO/AAITPsBDAAITPwABSuMAAhM/AAFRIwACEz8AAUujAAITPwABWEMAAhM/AAFaswACEy5j1wACE1gDAAIRvwABancAAhNiY8cAAhNmD7MAAhNnAAJMawACE27BOwACE2cAAWTvAAITZwABZKsAAhNnAAFkrwACE2cAAWSPAAITZwABZJcAAhNnAAFk8wACE2cAAWT7AAITYmPTAAITksA/AAITYmO/AAITmsBDAAITmtenAAITmwABSuMAAhObAAFRIwACE5sAAUujAAITmwABWEMAAhObAAFaswACE2Jj1wACE7gDAAIRvwABan8AAhPCY78AAhPHAAFRtwACE8cAAVG7AAITxwABUb8AAhPGwQ8AAhPHAAFqgwACE8Jj1wACE9wDAAIRvwABaocAAhPmY78AAhPrAAFRtwACE+sAAVG7AAIT6wABUb8AAhPqwQ8AAhPrAAFqgwACE+Zj1wACFAADAAIRvwABaosAAhQKY8cAAhQPAAJMawACFBLBOwACFBLAhwACFA8AAWqPAAIUDwABapMAAhQPAAFqlwACFA8AAWqbAAIUDwABap8AAhQPAAFqowACFApjvwACFDcAAVG3AAIUNwABUbsAAhQ3AAFRvwACFDbBDwACFDcAAWqDAAIUCmPXAAIUTAADAAJMbwACFFZjvwACFFsAAWsvAAIUWwABazcAAhRXAAFq7wACFGZjvwACFGrk7wACFGZj1wACFHADAAIUVwABUo8AAhR6Y78AAhR/AAFS9wACFHpj1wACFIQDAAIUVwABavcAAhSOY8cAAhSTAAJMbwACFJbBOwACFJbkQwACFJcAAWr7AAIUjmO/AAIUpwABUvcAAhSnAAJMbwACFK8AAWr/AAIUrwABawcAAhSvAAFrDwACFK8AAWsDAAIUjmPXAAIUwAADAAJMcwACFMpjvwACFM8AAkxzAAIU0wABa1sAAhTLAAFrPwACFNpjxwACFN8AAkxzAAIU4uLTAAIU4wABa0MAAhTaY78AAhTvAAJMcwACFPMAAWtHAAIU7tFvAAIU7tF3AAIU7tFzAAIU7tLDAAIU7tGfAAIU7tGHAAIU7hIXAAIU7tK7AAIU2mPXAAIVGAMAAhTLAAFrVwACFSJjxwACFSbSzwACFSYDPwACFSJjywACFTLRZwACFSJjvwACFTlbAAIVOhfvAAIVOhf7AAIVOhgDAAIVOhfnAAIVOhgXAAIVOhgLAAIVOhg/AAIVOhhHAAIVOhhPAAIVOhcTAAIVOhrXAAIVOhm/AAIVOhgfAAIVOhcjAAIVOhh7AAIVImPXAAIVfAADAAJMdwACFYcAAWtfAAIVimPLAAIVjpVnAAIVjsuDAAIVjtFnAAIVjhYXAAIVjhujAAIVjh/bAAIVimO/AAIVqwABNo8AAhWrAAFCOwACFasAATZ/AAIVqq+vAAIVqs4HAAIVqwABQj8AAhWrAAFh1wACFapxowACFasAAUJHAAIVqqHTAAIVqwABOesAAhWqcb8AAhWrAAFCSwACFasAAUJPAAIVqwABPY8AAhWqZdcAAhWrAAFCUwACFasAAUJXAAIVqwABQlsAAhWrAAEoOwACFasAATnvAAIVqwABQl8AAhWrAAE54wACFarkvwACFasAAWFPAAIVqwABNacAAhWrAAE1qwACFasAATWfAAIVqwABa2MAAhWrAAFrZwACFasAAWtrAAIVqwABa08AAhWrAAFrUwACFark6wACFYpj1wACFjQDAAIVhwABa28AAhY+Y8cAAhZAnwACFkMAAkx3AAIWSKMAAhZApwACFkLHZwACFkLHawACFkLHbwACFkLHcwACFkMAASqDAAIWPmO/AAIWaI8AAhY+Y9cAAhZwAAMAAkx7AAIWemO/AAIWfwACTHsAAhaDAAFs3wACFn8AAWzjAAIWewABa5MAAhaOY8cAAhaR6wACFpKUuwACFpMAAkx7AAIWnwABTQcAAhae1HcAAhaewTsAAhafAAFgKwACFp8AAWAvAAIWnwABSp8AAhafAAFgMwACFp8AAWA3AAIWnwABa5cAAhafAAFgOwACFp8AAWubAAIWnwABaQ8AAhafAAFgWwACFp8AAWBfAAIWkltDAAIWkhvXAAIWkhIjAAIWkhJTAAIWkos3AAIWkhIfAAIWkwABYLcAAhaSkfcAAhaS0qsAAhaTAAFgPwACFpMAAWBDAAIWkwABYEcAAhaTAAFgSwACFpL26wACFpLSswACFpMAAT3PAAIWjmPLAAIXGhYXAAIXGpVnAAIXGtFnAAIXGwACTHsAAhcrAAFg2wACFysAAWDjAAIXGhujAAIXGh/bAAIXGqoHAAIXGwABYj8AAhcay4MAAhcbAAFsOwACFo5jvwACF07jlwACF07NzwACF08AAkx7AAIXWwABYPcAAhdbAAFhAwACF1sAAWEPAAIXWwABYRsAAhdbAAFhFwACF1rN5wACF1sAAWF/AAIXWrjbAAIXWwABYXsAAhdbAAFhjwACF1sAAWGTAAIXWwABYZsAAhdbAAFrpwACF1sAAWGfAAIXWwABYaMAAhdbAAFhpwACF1sAAWGrAAIXWwABYa8AAhdbAAFrrwACF1sAAWHrAAIXWwABYgMAAhdbAAFrvwACF1sAAWvTAAIXWwABa98AAhdbAAFr6wACF1sAAWv/AAIXWwABbBcAAhdbAAFsLwACF1sAAWxHAAIXWwABbEsAAhdOzfsAAhdOzfcAAhdPAAFrnwACF07QSwACF06G9wACF07OBwACF05xmwACF05xvwACF08AAWETAAIXTwABYSMAAhdPAAFCSwACF05xowACF08AAUJPAAIXTqHTAAIXTwABYU8AAhdPAAFCRwACF08AATnrAAIXTwABNo8AAhdPAAE2fwACF08AAUJnAAIXTwABQjsAAhdOr68AAhdPAAFhbwACF08AAR9PAAIXTwABHqsAAhdO0GcAAhdO0HMAAhdPAAFBMwACF07QswACF08AAR6nAAIXTwABYbMAAhdPAAFBIwACF08AAR9XAAIXTuTrAAIXTwABOeMAAhdPAAFCXwACF05l1wACF08AAUI/AAIXTwABa7MAAhdPAAFh1wACF08AAWHPAAIXTwABYdMAAhdPAAFh4wACF08AAUJTAAIXTwABQlcAAhdPAAFCWwACF08AASg7AAIXTwABa7sAAhdPAAE57wACF08AAWInAAIXTwABPY8AAhdPAAFg5wACF08AAWELAAIXTwABYTsAAhdPAAFhHwACF08AAWFDAAIXTwABYN8AAhdPAAFhPwACF08AAWD7AAIXTuS/AAIXTuUbAAIXTwABbD8AAhdPAAFsQwACF08AAWtPAAIXTwABa2sAAhdPAAFrUwACF08AAWtjAAIXTwABa2cAAhdPAAE1pwACF08AATWrAAIXTwABNZ8AAhdPAAFrzwACF08AAWvbAAIXTwABa+cAAhdPAAFgswACF08AAWwHAAIXTwABbA8AAhdPAAFsIwACF08AAWwnAAIXTwABbCsAAhdPAAFsNwACFo5j1wACGRgDAAIWewABbFMAAhkiY8cAAhkm0s8AAhkiY8sAAhkue0sAAhku0EMAAhkulXcAAhkuG9cAAhkiY78AAhlCZuMAAhlC0GcAAhlCwVMAAhlC0GsAAhlCE9sAAhlC0G8AAhlC0HMAAhlCzgcAAhlCr68AAhlC0HcAAhlC0H8AAhlC0HsAAhlC0JMAAhlC0IMAAhlChvcAAhlCzgMAAhlC0E8AAhlC0GMAAhlC0I8AAhlC0FMAAhlC0FcAAhlC0FsAAhlC0EcAAhlCzfsAAhlCzfcAAhlClWsAAhlCzc8AAhlC0JcAAhlC0J8AAhlC0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wACTIsAAh4LAAFtYwACHf5j1wACHhADAAId+wABbW8AAh4aY8cAAh4eCcMAAh4aY78AAh4kjwACHhpj1wACHiwDAAId+wABbXcAAh42Y8cAAh47AAFM8wACHjsAAR47AAIeNmO/AAIeRI8AAh42Y9cAAh5MAwACHfrmOwACHlZjvwACHlsAAW1/AAIeWwABbZMAAh5WY9cAAh5kAwACHfsAARsXAAIebmPHAAIecgpTAAIebmO/AAIeeSMAAh54jwACHm5j1wACHoQDAAId+wABbZ8AAh6OY9cAAh6QAwACHfsAAW2jAAIemmPHAAIengpTAAIemmO/AAIepSMAAh6kjwACHppj1wACHrADAAId+wABbasAAh66Y8cAAh6/AAFM8wACHr4WFwACHrpjvwACHskjAAIeywACTIsAAh7TAAFtrwACHsiPAAIeumPXAAIe3AADAAJMjwACHucAAW2/AAIe6mO/AAIe7wABbcMAAh7vAAFtxwACHu7sQwACHu8AAW3LAAIe7nSjAAIe7wABbc8AAh7qY9cAAh8IAwACHucAAW3TAAIfEmO/AAIfFwABbccAAh8XAAJMjwACHx8AAW3XAAIfEmPXAAIfJAMAAh7nAAFt3wACHy5jvwACHzMAAW3HAAIfLmPXAAIfOAMAAh7nAAFt5wACH0JjvwACH0Z0owACH0cAAW3DAAIfRwABbccAAh9CY9cAAh9UAwACHucAAW3vAAIfXmO/AAIfYnSjAAIfYwABbcMAAh9jAAFtxwACH15j1wACH3ADAAIe5wABbfcAAh96Y78AAh9+dKMAAh9/AAFtwwACH38AAW3HAAIffwABbf8AAh96Y9cAAh+QAwACHucAAW4DAAIfmmO/AAIfnwABbcMAAh+fAAFuBwACH58AAW3HAAIfnwABbg8AAh+fAAFuEwACH58AAW4XAAIfnwABbgsAAh+fAAFt/wACH5pj1wACH8ADAAIe5wABbhsAAh/KY78AAh/PAAFtwwACH850owACH88AAW4LAAIfzwABbf8AAh/KY9cAAh/gAwACHucAAW4jAAIf6mO/AAIf7nSjAAIf7wABbcMAAh/vAAFuCwACH+8AAW3/AAIf6mPXAAIgAAMAAh7nAAFuKwACIApjvwACIA8AAW3DAAIgDnSjAAIgDwABbgsAAiAPAAFt/wACIApj1wACICADA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wACJC8AAXB7AAIkLwABcH8AAiQvAAFwgwACJC8AAXCHAAIkLwABcIsAAiQvAAFwjwACJC8AAXCTAAIkLwABcJcAAiQvAAFwmwACJC54ZwACJC8AAXCfAAIkLnXLAAIkLwABcKMAAiQvAAFwpwACJC8AAXCrAAIkLmo/AAIkLmo7AAIkLwABcK8AAiQqY8sAAiSTAAFwZwACJJLw6wACJCpjvwACJJyPAAIkngwvAAIknwABcLcAAiSfAAFwawACJCpj1wACJLMAAkybAAIktgLXAAIjLwABcLsAAiS+Y8sAAiTDAAFwZwACJMLw6wACJL5j1wACJMwDAAIjLwABcL8AAiTWY8sAAiTbAAFwZwACJNrw6wACJNZj1wACJOQDAAIjLwABcMMAAiTuY8sAAiTzAAFwZwACJPLw6wACJO5j1wACJPwAAwACTJ8AAiUGY8cAAiULAAFwxwACJQsAAXDLAAIlCwABcMwDAAJMowACJRsAAXDTAAIlHmPHAAIlItLPAAIlIpVnAAIlIuNfAAIlItFnAAIlIuM/AAIlIuNPAAIlItKbAAIlIt9fAAIlIt1zAAIlIvRfAAIlIwACTKMAAiVO8a8AAiVPAAFKowACJU7zCwACJU7zDwACJU7zEwACJSL0qwACJSL0cwACJSLVTwACJSLjYwACJSLjIwACJSIf2wACJSKVuwACJSLy2wACJSLy3wACJSLy8wACJSLy9wACJSLy1wACJSLzKwACJSL0rwACJSLRuwACJSLrkwACJR5jywACJabjQwACJabYdwACJabzIwACJabzLwACJabzNwACJR5jvwACJb7b1wACJb7zOwACJb7zPwACJb7RfwACJb7zGwACJb7zHwACJR5j1wACJdgAAwACS+cAAiXiY8MAAiXnAAFw3wACJeIXGwACJe5jxwACJfCfAAIl8wACS+cAAiX4owACJfCnAAIl8wABcOcAAiXzAAFw6wACJfMAAXDvAAIl8wABcPMAAiXuY78AAiYUjwACJe5j1wACJhwDAAIl4vw3AAImJmPHAAImKg+zAAImKwABPKcAAiYrAAFw+wACJirHqwACJisAAUEfAAImKwACS+cAAiZDAAEyMwACJkMAAXD/AAImQwABcQMAAiZDAAFxBwACJipomwACJisAAWRnAAImJmO/AAImXtuXAAImXwACS+cAAiZnAAFxHwACJmcAAXEjAAImZwABcU8AAiZewEMAAiZfAAFxCwACJl4McwACJl8AAUCzAAImXwABQLcAAiZfAAFAxwACJl8AAUCbAAImXt4XAAImXhDHAAImXtLLAAImXI8AAiYmY8sAAiai86sAAiai868AAiai3rMAAiajAAFARwACJqMAAUDDAAImowABcTsAAiaiqlMAAiYmY88AAibC86sAAibC868AAiYmY9MAAibOwD8AAiYmY9cAAibUAwACJeJwSwACJt5jxwACJuIPswACJuIPzwACJuMAAkvnAAIm7wABcWsAAibvAAFxbwACJu8AAXFzAAIm3mPTAAIm/sA/AAIm3mO/AAInBsBDAAInBwABQLMAAicHAAFArwACJwcAAUC3AAInBm6DAAInBwABQMsAAicHAAFAxwACJwcAAUCbAAInBwABQNcAAicHAAFA0wACJwcAAUErAAInBqVvAAInBt4bAAInBwACS+cAAic/AAFxiwACJwSPAAIm3mPLAAInSmibAAInSwABQM8AAidLAAFA6wACJ0sAAWO7AAInSwABQV8AAibeY9cAAidgAwACJeMAAXGfAAInamPHAAInbhvTAAInbrWrAAInbwABcT8AAidqY8sAAid9cwACJ2pj1wACJ4QDAAIl4wABcacAAieOY8cAAieSD0cAAieTAAFbLwACJ5KE7wACJ45jywACJ6Ib0wACJ6MAAXE/AAInorWrAAInowABcRcAAiehewACJ45jvwACJ7l3AAInuwACS+cAAifDAAFxqwACJ8MAAXGvAAInjmPXAAInzAMAAiXjAAFxswACJ9ZjxwACJ9sAAUEnAAIn2rWrAAIn2wABcT8AAifWY8sAAifpcwACJ9Zj1wACJ/MAAXG3AAIl4wABcbcAAif6Y8cAAif+D0cAAif+IecAAif/AAFxuwACJ/pjywACKA8AAXE/AAIoDrWrAAIoDXsAAif6Y78AAigddwACJ/pj1wACKCQDAAIl4wABcb8AAiguY8cAAigwnwACKDMAAkvnAAIoOKMAAigwpwACKDJ2FwACKDMAAXHDAAIoMwABcccAAiguY78AAihQjwACKC5j1wACKFgDAAIl4wABccsAAihiY78AAihlLwACKGYC/wACKGZl2wACKGYRewACKGYJGwACKGJjywACKH4NowACKGJj1wACKIQDAAIl4wABSAcAAiiOY8cAAiiTAAJL5wACKJcAAUgjAAIojmPXAAIonAADAAJMpwACKKcAAXHjAAIoqmO/AAIorwABZAcAAiivAAFkEwACKK8AAWQnAAIorwABZAsAAiivAAFkKwACKK8AAWQfAAIorwABZDcAAiivAAFkDwACKKpj1wACKNAAAwACTKsAAijbAAFx6wACKN5jxwACKOCfAAIo4wACTKsAAijoowACKOCnAAIo4wABcf8AAijjAAFyAwACKOMAAXIHAAIo4vXfAAIo3mO/AAIpBI8AAijeY9cAAikMAwACKNsAAXILAAIpFmPHAAIpGvbrAAIpGvb3AAIpFmPXAAIpJAMAAijbAAFyDwACKS5jywACKTIJrwACKS5jvwACKTr22wACKTr2ywACKToRSwACKS5j1wACKUgDAAIo2wABchMAAilSY78AAilWa8cAAilXAAFyFwACKVcAAXIbAAIpVwABch8AAilXAAFyIwACKVJj1wACKWwDAAIo2wABcicAAil2Y8cAAil6ClMAAil7AAFyKwACKXr26wACKXr29wACKXsAAXIvAAIpdmPLAAIpkgmvAAIpkg8bAAIpdmO/AAIpnvbbAAIpnvbLAAIpnhFLAAIpnSMAAimcjwACKZ4djwACKZ8AAXJPAAIpdmPXAAIpvAMAAijbAAFyXwACKcZjxwACKcsAAXIrAAIpywABcmMAAinGY8sAAinWCa8AAinWDxsAAinGY78AAini9tsAAini9ssAAiniEUsAAinhIwACKeCPAAIpxmPXAAIp+AMAAijbAAFyawACKgJjxwACKgcAAXJvAAIqAmPLAAIqDgmvAAIqDg8bAAIqAmO/AAIqGvbbAAIqGvbLAAIqGhFLAAIqGSMAAioYjwACKgJj1wACKjADAAIo2wABcncAAio6Y8sAAio+Ca8AAio6Y78AAipGEUsAAipG9ssAAipG9tsAAio6Y9cAAipUAAMAAkyvAAIqXqwjAAIqYmPLAAIqZtFnAAIqZhYXAAIqZwABcoMAAipm+McAAipm9y8AAipiY78AAip++J8AAip+91sAAip+90sAAip+9tMAAip/AAEfTwACKn73NwACKn6H6wACKn6WywACKn723wACKn72rwACKn73RwACKmJj1wACKqwDAAIqXwABcocAAiq2Y8cAAiq7AAJMrwACKr8AAXKLAAIqvwABco8AAiq7AAFygwACKrsAAWF3AAIqtmPLAAIq0vcvAAIq0pS7AAIq0wACTK8AAirfAAFykwACKrZjvwACKub3RwACKub23wACKub2rwACKuaWywACKuaH6wACKub3NwACKrZj1wACKwADAAIqXwABcpcAAisKY8cAAisPAAFyKwACKw7XHwACKw1vAAIrCmO/AAIrHvh3AAIrHvhnAAIrHI8AAisKY9cAAissAAMAAko7AAIrNvm3AAIrOmPLAAIrPmznAAIrPm0PAAIrPmzrAAIrPhYjAAIrPhijAAIrPmzjAAIrOmO/AAIrWm0nAAIrWm2DAAIrWvyTAAIrWq/nAAIrWwACSjsAAitu/JcAAitu/KMAAitu/J8AAitu/JsAAis6Y9cAAiuAAAMAAkyzAAIrivm7AAIrjmPHAAIrkh4nAAIrkhFfAAIrkv0PAAIrkgmvAAIrkwACTLMAAiunAAFyuwACK45jywACK64C9wACK64UZwACK45jvwACK7qHbwACK7sAAkyzAAIrwwABcr8AAivDAAFy5wACK8MAAXLLAAIrwwABcxcAAivDAAFywwACK7sAAXLHAAIruwABctMAAiu7AAFzCwACK7sAAXMPAAIrjmPXAAIr6AADAAJMtwACK/L5vwACK/ZjxwACK/oeJwACK/ZjvwACLAL86wACLAMAAXMjAAIsAwABc1cAAiwDAAFzXwACK/Zj1wACLBQDAAIr8wABc2MAAiweY78AAiwjAAFzLwACLCMAAXMzAAIsIwABczsAAiwjAAFzRwACLCMAAXM/AAIsIwABczcAAiwjAAFzQwACLCMAAXNLAAIsHmPXAAIsRAMAAivzAAFzbwACLE5jvwACLFMAAXM7AAIsUwABc0MAAixTAAFzNwACLFMAAXNHAAIsUwABcy8AAixTAAFzPwACLFMAAXNLAAIsUwABczMAAixOY9cAAix0AwACK/MAAXN3AAIsfmO/AAIsgwABcz8AAiyDAAFzOwACLIMAAXMvAAIsgwABczcAAiyDAAFzRwACLIMAAXNDAAIsgwABc0sAAiyDAAFzMwACLH5j1wACLKQDAAIr8wABc6sAAiyuY78AAiyzAAFzQwACLLMAAXNHAAIsswABczsAAiyzAAFzLwACLLMAAXM/AAIsswABczcAAiyzAAFzSwACLLMAAXMzAAIsrmPXAAIs1AMAAivzAAFzrwACLN5jvwACLOMAAXM7AAIs4wABcy8AAizjAAFzPwACLOMAAXM3AAIs4wABc0cAAizjAAFzQwACLOMAAXNLAAIs4wABczMAAizeY9cAAi0EAwACK/MAAXOzAAItDmO/AAItEwABczsAAi0TAAFzNwACLRMAAXMvAAItEwABczMAAi0TAAFzQwACLRMAAXM/AAItEwABc0cAAi0TAAFzSwACLQ5j1wACLTQDAAIr8wABc8MAAi0+Y78AAi1DAAFzRwACLUMAAXNDAAItQwABczsAAi1DAAFzLwACLUMAAXM/AAItQwABczcAAi1DAAFzSwACLUMAAXMzAAItPmPXAAItZAADAAJMuwACLW8AAQCPAAItcmPHAAItdr87AAItcmO/AAItfooXAAItcmPXAAIthAADAAJMvwACLY5jvwACLZMAAQDIAwACTMMAAi2bAAFz2wACLZ5jxwACLaIJSwACLZ5jvwACLasAAQkXAAItqwABCVcAAi2rAAEJOwACLasAAQkzAAItqwABCUMAAi2rAAEKDwACLasAAQoHAAItnmPXAAItyAMAAi2bAAFz/wACLdJjxwACLdSfAAIt1wACTMMAAi3cowACLdSnAAIt1wABdAMAAi3WiMsAAi3WEe8AAi3XAAF0BwACLdcAAQIzAAIt1wABAPcAAi3XAAF0CwACLdJjvwACLgSPAAIt0mPXAAIuDAADAAJMxwACLhcAAQhvAAIuGmPHAAIuHqh3AAIuHwABDfsAAi4aY88AAi4rAAEG7wACLhpjywACLjICswACLhpjvwACLjsAAQbzAAIuOo6/AAIuOwABBvcAAi46h4MAAi46tvMAAi46ttsAAi46h1sAAi46h3MAAi46jEMAAi47AAECpwACLjsAAQKXAAIuOwABA5cAAi47AAEHKwACLjsAAQcvAAIuOouPAAIuOwABB5sAAi47AAEHlwACLjqNHwACLjqNIwACLjsAAQdDAAIuOrb3AAIuOrb/AAIuOrcvAAIuOwABB08AAi47AAEHUwACLjsAAQPbAAIuOwABAr8AAi47AAEENwACLjqJZwACLjq26wACLjq3IwACLjqOHwACLjqLtwACLjqMCwACLjqMKwACLjq24wACLjq3FwACLjqN3wACLjsAAQd3AAIuOoszAAIuOwABBBsAAi46i/8AAi47AAEHewACLjqNYwACLjsAAQeDAAIuOo0nAAIuOwABB48AAi47AAEHnwACLjqGDwACLjqGAwACLjqOgwACLjsAAQe7AAIuOoiTAAIuOwABCAsAAi46jdMAAi47AAEHywACLjqFOwACLjsAAQfnAAIuOwABA/sAAi47AAECswACLjqN1wACLjsAAQOnAAIuOo0XAAIuOwABB+sAAi47AAEH7wACLjsAAQfzAAIuOwABB/cAAi47AAEIDwACLjsAAQf7AAIuOwABCAMAAi46jvMAAi46jvsAAi47AAEIBwACLjqNZwACLjqJFwACLjsAAQgbAAIuOwABA+MAAi47AAEIHwACLjsAAQgzAAIuOwABB38AAi46j7MAAi47AAEINwACLjsAAQejAAIuOomHAAIuOrb7AAIuOrcLAAIuOwABCEMAAi47AAEISwACLjqHCwACLjqOxwACLjqKUwACLjqHjwACLjqJnwACLjqFxwACLjqHZwACLjqHewACLjqMRwACLjsAAQfbAAIuOwABAq8AAi47AAECNwACLjqFnwACLjsAAQJnAAIuOwABApsAAi47AAEB8wACLjsAAQc3AAIuOoufAAIuOwABAasAAi47AAEBtwACLjqNXwACLjqNKwACLjqM1wACLjqOCwACLjq3BwACLjq3MwACLjsAAQLPAAIuOwABAicAAi47AAEH4wACLjsAAQLLAAIuOwABB2MAAi47AAEHawACLjsAAQfXAAIuOolrAAIuOooHAAIuOo5zAAIuOrcrAAIuOo4/AAIuOo4jAAIuOou/AAIuOowPAAIuOowvAAIuOoovAAIuOrcfAAIuOo4HAAIuOo27AAIuOotPAAIuOwABAVMAAi46jAMAAi47AAEB5wACLjqNbwACLjqNewACLjqJJwACLjqNSwACLjsAAQITAAIuOol7AAIuOoYTAAIuOoYHAAIuOopbAAIuOo6TAAIuOwABAZcAAi46iJ8AAi46ivcAAi46jf8AAi46hcMAAi46hUcAAi46hXcAAi47AAEH3wACLjsAAQK7AAIuOwABB18AAi47AAEHZwACLjsAAQfTAAIuOo37AAIuOwABAtsAAi46jTMAAi46i+8AAi47AAECLwACLjsAAQDrAAIuOwABAksAAi46jpcAAi46iQMAAi47AAEB2wACLjqPQwACLjqPKwACLjqPOwACLjqJHwACLjsAAQgTAAIuOoWDAAIuOwABAXMAAi46jHsAAi46jZcAAi47AAEBJwACLjqPuwACLjqPxwACLjqJQwACLjqJkwACLjqOrwACLjq3EwACLjqO5wACLjqLYwACLjqJpwACLjqKXwACLjqPawACLjqPYwACLjqMTwACLjsAAQPDAAIuOwABBEMAAi47AAEBQwACLjsAAQOrAAIuOwABATsAAi47AAEIXwACLjsAAQhPAAIuOoubAAIuOo+PAAIuOwABBzMAAi47AAEBnwACLjqNawACLjqI7wACLjqOtwACLjsAAQhHAAIuOoj7AAIuOocHAAIuOwABB1cAAi46jqcAAi46idcAAi46ieMAAi46iesAAi46jisAAi46ifMAAi46jCMAAi47AAED8wACLjqIDwACLjsAAQHTAAIuOwABAfsAAi46jKMAAi47AAEHwwACLjsAAQerAAIuOpAXAAIuOwABAo8AAi47AAEBywACLjqP5wACLjqJowACLjsAAQD7AAIuOo2fAAIuOwABB7MAAi46i3MAAi46jnsAAi46ir8AAi46issAAi46iNsAAi46imsAAi46iucAAi46itcAAi46ip8AAi47AAEESwACLjsAAQPLAAIuOo2zAAIuOwABAS8AAi46iLMAAi47AAECTwACLjsAAQJXAAIuOwABAl8AAi47AAEBAwACLjsAAQhnAAIuOwABARMAAi46iW8AAi47AAEBSwACLjsAAQGPAAIuOoX7AAIuOwABA38AAi46iwsAAi47AAEBGwACLjsAAQELAAIuOo/XAAIuOolXAAIuOpALAAIuOwABAb8AAi46hxMAAi46hx8AAi46iIMAAi46ihcAAi47AAEDuwACLjsAAQIjAAIuOwABA78AAi46iMcAAi46hysAAi46jYcAAi46iM8AAi46iJcAAi46jasAAi46kA8AAi46jacAAi46i6sAAi46ixcAAi46j7cAAi46jM8AAi46jMMAAi46jLMAAi46tpMAAi46jBsAAi46i1sAAi47AAEG6wACLjqLHwACLjqFmwACLjqLEwACLhpj1wACMtAAAwACTMsAAjLaY8cAAjLfAAEIgwACMtpjvwACMucAAQh7AAIy5wABCH8AAjLbAAEIdwACMvJjxwACMvcAAQ1fAAIy9wABDWMAAjLyY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wACNcMAAXUnAAI3GmO/AAI3HwABCasAAjcaY9cAAjckAwACNcMAAXUrAAI3LmO/AAI3MwABCasAAjcuY9cAAjc4AwACNzro4wACNzsAAQoXAAI3OwABChsAAjXDAAF1LwACN05jvwACN1MAAQmrAAI3TmPXAAI3WAMAAjXDAAF1MwACN2JjvwACN2cAAQmrAAI3YmPXAAI3bAMAAjdu6OMAAjdvAAF09wACNcMAAXU3AAI3fmO/AAI3gwABCasAAjd+Y9cAAjeIAwACN4ro4wACN4sAAQ7fAAI1wwABdTsAAjeaY78AAjefAAEJqwACN5pj1wACN6QDAAI1wwABdT8AAjeuY8cAAjezAAF1QwACN65jvwACN7sAAQmrAAI3rmPXAAI3wAMAAjXDAAF1RwACN8pjvwACN88AAQmrAAI3ymPXAAI31AMAAjXDAAF1SwACN95jvwACN+MAAQmrAAI33mPXAAI36AMAAjfq6OMAAjfrAAF1TwACNcMAAXVTAAI3+mO/AAI3/wABCasAAjf6Y9cAAjgEAAMAAkznAAI4DmPDAAI4EwABdY8AAjgPAAF1owACOBpjxwACOB8AAkznAAI4IswTAAI4IpRHAAI4IsE7AAI4ItR3AAI4ItOHAAI4IwABdacAAjgi4tsAAjgjAAFRDwACOCMAASULAAI4IwABSqMAAjgjAAFSbwACOCMAAXWrAAI4IwABU1sAAjgjAAF1rwACOCLxowACOCLi1wACOCMAAXWzAAI4IuLfAAI4IuPPAAI4ItsXAAI4IuRrAAI4IwABU7cAAjgi49cAAjgjAAFjiwACOCMAASkLAAI4IwABYNsAAjgjAAF1twACOCMAAXW7AAI4IwABdb8AAjgicE8AAjgjAAF1wwACOCMAAXXHAAI4IwABdcsAAjgjAAF1zwACOB6hAwACOBpjywACOLMAAkznAAI4twABYDcAAjgaY78AAji/AAF10wACOL8AAkznAAI4xwABdksAAjjHAAF12wACOMcAAXZjAAI4xwABdmcAAjjHAAF2NwACOMcAAXanAAI4xwABdkMAAjjHAAF2twACOMcAAXavAAI4xwABdsMAAjjHAAF2swACOMcAAXbXAAI4xwABdqsAAjjHAAF2KwACOMcAAXbbAAI4xwABdzMAAjjHAAF2AwACOMcAAXerAAI4xwABd68AAjjHAAF3swACOMcAAXdTAAI4xwABd9cAAjjHAAF33wACOMcAAXdzAAI4xwABducAAjjHAAF2cwACOMcAAXcfAAI4xwABdy8AAjjHAAF3IwACOMcAAXcbAAI4xwABdfcAAjjHAAF1/wACOL8AAXZPAAI4GmPXAAI5TAMAAjgPAAF4NwACOVZjxwACOVsAAkznAAI5XswTAAI5XtR3AAI5XsE7AAI5XtOHAAI5XwABdacAAjle4t8AAjlfAAEUIwACOV8AASULAAI5XwABUm8AAjle8aMAAjle2xcAAjlfAAF1twACOV8AAXWzAAI5XwABY4sAAjla1XcAAjlbAAF3OwACOVsAAXXjAAI5WwABdfMAAjlbAAF16wACOVsAAXX7AAI5WwABeDsAAjlbAAF2awACOVsAAWsTAAI5VmO/AAI5vwABdiMAAjm/AAF4QwACOb8AAXhTAAI5vwABeFcAAjm/AAF4XwACOb8AAXhzAAI5vwABeHsAAjm/AAF4lwACOb8AAUw3AAI5VmPXAAI55AMAAjgPAAF4mwACOe5jxwACOfMAAkznAAI59swTAAI59sE7AAI59tR3AAI59wABdacAAjn3AAElCwACOfbi3wACOfbbFwACOe5jvwACOhcAAXgfAAI6FwABeKsAAjoXAAF4rwACOhcAAXi3AAI6FwABeLMAAjnuY9cAAjosAwACOA8AAXi7AAI6NmPHAAI6OhIjAAI6OhJTAAI6NmPXAAI6RAMAAjgPAAF4vwACOk5jxwACOlMAAkznAAI6VnOnAAI6VwABeMMAAjpXAAF4xwACOlIC9wACOlLSkwACOk5jvwACOm8AAkznAAI6cwABeMsAAjpuEl8AAjpuElsAAjpuD/cAAjpOY8sAAjqFhwACOk5j1wACOo4HpwACOo5piwACOA8AAXjPAAI6mmPHAAI6nwACTOcAAjqi0SsAAjqjAAFjiwACOqMAAXjTAAI6owABeNcAAjqjAAF42wACOqMAAXjfAAI6nwABdi8AAjqaY8sAAjrDAAF2UwACOsMAAXY/AAI6wwABdkcAAjqaY78AAjrTAAJM5wACOtcAAXjjAAI60wABdd8AAjrTAAF15wACOtMAAXXvAAI60wABeCsAAjrTAAF2xwACOppj1wACOvAAAwACTOsAAjr7AAF48wACOv5jxwACOwMAAkzrAAI7BuLfAAI6/mO/AAI7DwABePcAAjsPAAF4/wACOw8AAXkDAAI7DwABFG8AAjsPAAEUZwACOw8AARRfAAI7DwABFGMAAjsPAAEUVwACOw8AARRzAAI7DwABFHcAAjsPAAEUewACOw8AARRrAAI7DwABFIMAAjr+Y9cAAjtEAwACOvsAARsTAAI7TmPHAAI7UwACTOsAAjtXAAEpCwACO1cAAXkPAAI7TmO/AAI7YsKHAAI7YsKPAAI7TmPXAAI7bAMAAjr7AAF5FwACO3ZjxwACO3sAAkzrAAI7fpRHAAI7ftsXAAI7fwABU1sAAjt/AAF1rwACO37jzwACO38AARQjAAI7ewABFIcAAjt2Y8sAAjufAAJM6wACO6Li3wACO3ZjvwACO6sAARRTAAI7qwABFI8AAjurAAEUmwACO6sAARSXAAI7qsKHAAI7qsKPAAI7qwABFJMAAjurAAEUiwACO6rVqwACO3Zj1wACO9AAAwACTO8AAjvbAAF5OwACO95jywACO+IPUwACO+ICWwACO+MAAkzvAAI77wABK0sAAjveY78AAjv3AAEfnwACO95j1wACO/wDAAI72wABeT8AAjwGY8cAAjwLAAJM7wACPA5dhwACPA8AAStLAAI8Cg9TAAI8BmPLAAI8HwABJPcAAjweAlsAAjwfAAEmNwACPAZjvwACPC6HbwACPC8AAR+fAAI8Lgk/AAI8LI8AAjwGY9cAAjxAAwACO9sAAXlPAAI8SmPHAAI8TwACTO8AAjxSXYcAAjxKY78AAjxbAAF5UwACPEpjywACPGICWwACPGLDNwACPEpj1wACPGwDAAI72ntDAAI8dmPHAAI8ewACTO8AAjx+zBMAAjx/AAEUIwACPH8AAVNbAAI8fwABda8AAjx+wTsAAjx/AAF5VwACPH8AAXlbAAI8fwABeV8AAjx/AAF5YwACPHqUuwACPHZjvwACPKsAAXlnAAI8qwABeWsAAjyrAAF5bwACPKsAAXfvAAI8qwABeXsAAjyrAAF5fwACPKsAAkzvAAI8xwABeXMAAjzHAAF5iwACPMcAAXmbAAI8qwABeXcAAjyrAAEfkwACPHZj1wACPNwAAwACTPMAAjznAAF5twACPOpjxwACPO8AAScbAAI87wABdlMAAjzvAAF2awACPO8AAXZXAAI87wABdm8AAjzvAAF2lwACPO8AAXm7AAI87wACTPMAAj0PAAF5vwACPO8AAXZbAAI86mO/AAI9GwABecMAAj0bAAF5xwACPOpjywACPScAAXnLAAI9JwABdjsAAj0nAAF2MwACPOpj1wACPTQDAAI85wABec8AAj0+Y8cAAj1CAvcAAj1AnwACPUMAAXgzAAI9QwABdssAAj0+Y78AAj1UjwACPT5j1wACPVwDAAI85wABedcAAj1mY8cAAj1q0pMAAj1qG9cAAj1qZjsAAj1rAAF2vwACPWsAAXnbAAI9awABed8AAj1mY8sAAj2HAAF54wACPWZj1wACPYwDAAI85wABeecAAj2WY8cAAj2bAAF56wACPZZjywACPaMAAXnjAAI9lmO/AAI9qI8AAj2WY9cAAj2wAwACPOcAAXnzAAI9umPHAAI9vgL3AAI9umPLAAI9xwABeeMAAj26Y78AAj3MjwACPbpj1wACPdQDAAI85hrnAAI93mPHAAI94gL3AAI94wABTC8AAj3iAlsAAj3eY78AAj3wjwACPd5j1wACPfgDAAI85wABef8AAj4CY8sAAj4HAAF3KwACPgJj1wACPgwDAAI85hHvAAI+FmPHAAI+GlnvAAI+GgKzAAI+GwABdxcAAj4aEiMAAj4bAAF3KwACPhZjvwACPjCPAAI+FmPXAAI+OAMAAjznAAEPIwACPkJjxwACPkZZ7wACPkYC9wACPkcAAST7AAI+RwABTC8AAj5GCl8AAj5GEIMAAj5HAAE6vwACPkcAAXbPAAI+QmO/AAI+aI8AAj5CY9cAAj5wAwACPOYTXwACPnpjxwACPn5Z7wACPn4C9wACPn8AAUwvAAI+fwACTPMAAj6PAAF6DwACPo8AAXoTAAI+fwABJ0MAAj5+Ei8AAj5+8tsAAj5/AAF6FwACPn7y3wACPn8AAXeLAAI+fwABduMAAj5/AAF3YwACPn8AAXcrAAI+fwABdz8AAj5/AAF3NwACPn7zqwACPn4ZlwACPn8AAXdDAAI+fwABd6cAAj5+0L8AAj5/AAF3owACPn8AATqrAAI+fwABehsAAj5/AAF6HwACPn8AAXojAAI+emPLAAI+7wABdg8AAj7uE88AAj7uubsAAj7vAAF6JwACPu8AAXorAAI+emO/AAI/BwABdgcAAj8HAAF2FwACPwSPAAI+emPXAAI/FAMAAjznAAF6MwACPx5jywACPyMAA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25jxwACQ3IJvwACQ3IYdwACQ25jvwACQ34RTwACQ34RSwACQ34RZwACQ30jAAJDfI8AAkNuY8sAAkOWDxsAAkNuY9cAAkOcAAMAAk0HAAJDpwABe68AAkOqY78AAkOsjwACQ6pj1wACQ7QDAAJDpwABe7cAAkO+Y9MAAkPCWg8AAkO+Y78AAkPIjwACQ75j1wACQ9ADAAJDpwABe7sAAkPaY9MAAkPeWg8AAkPaY78AAkPkjwACQ9pj1wACQ+wDAAJDpwABe78AAkP2Y8cAAkP7AAJNBwACQ/8AAWAzAAJD9mO/AAJEBgcTAAJEBmC3AAJEBwABH5sAAkQHAAE9/wACRAZg3wACRAYX2wACRAYYYwACRAYYAwACRAYYpwACRAYX5wACRAYXZwACRAYYCwACRAYX7wACRAYX+wACRAYYFwACRAYYPwACRAYYRwACRAYYTwACRAYWVwACRAYWiwACRAYWmwACRAYYJwACRAYWywACRAYW0wACRAYWwwACRAYYNwACRAYYLwACRAYXQwACRAYXLwACRAYXVwACRAYXywACRAYYHwACRAYYbwACRAYYhwACRAYYjwACRAYWQwACRAYYmwACRAYYewACQ/ZjywACRKIbowACRKITJwACQ/Zj1wACRKwAAwACTQsAAkS2Y78AAkS7AAJNCwACRL8AAX/DAAJEtwABe8sAAkTGY8cAAkTLAAF7zwACRMsAAXvTAAJEywABe9cAAkTLAAF72wACRMsAAXvfAAJEywABe+MAAkTLAAF75wACRMsAAVNHAAJEywABe+sAAkTLAAF77wACRMsAAXvzAAJEywABe/cAAkTLAAF7+wACRMsAARuLAAJEywABe/8AAkTLAAF8AwACRMsAARuTAAJEywABfAcAAkTLAAF8CwACRMsAAXwPAAJEywABfBMAAkTLAAF8FwACRMsAAXwbAAJEywABfB8AAkTLAAF8IwACRMsAAXwnAAJEypS7AAJEywACTQsAAkU7AAFykwACRTsAAXwrAAJEywABfC8AAkTLAAF8MwACRMsAAXw3AAJEywABfDsAAkTLAAF8PwACRMsAAXxDAAJEywABfEcAAkTLAAF8SwACRMsAAXxPAAJEywABfFMAAkTGY8sAAkVuBdsAAkVu7TcAAkVtVwACRW4O1wACRW8AASD/AAJFbwABfFcAAkVuZ3MAAkVulr8AAkVuGR8AAkVvAAF8WwACRW8AAXxfAAJFbwABfGsAAkTGY78AAkWjAAF8YwACRaLpHwACRaMAAXxvAAJFowABfHMAAkWjAAErkwACRaMAAXx7AAJFowABfH8AAkWjAAF8gwACRaMAAXyHAAJFowABfIsAAkWij6MAAkWiGMMAAkWjAAF8kwACRaMAAXyXAAJFonSfAAJFowABJ0sAAkWjAAF8qwACRaMAAXyvAAJFowABfLMAAkWjAAJNCwACRfMAAXy3AAJF8wABfecAAkWjAAF8vwACRaMAAXzLAAJFowABfNMAAkWjAAF81wACRaMAAXzfAAJFowABfOMAAkWjAAF85wACRaKGJwACRaMAAXz3AAJFowABfGcAAkWixmMAAkWixmsAAkWixisAAkWixi8AAkWixpcAAkWjAAF9IwACRaLGFwACRaMAAX0vAAJFosaDAAJFohi/AAJFosbXAAJFosaHAAJFosa/AAJFohl3AAJFosYTAAJFosaPAAJFosbfAAJFoo+HAAJFowABfUMAAkWixrsAAkWixuMAAkWiGNMAAkWiGK8AAkWixu8AAkWixusAAkWiGccAAkWjAAF9owACRaMAAX1rAAJFowABfa8AAkWixvMAAkWixgsAAkWixecAAkWixgMAAkWixfsAAkWixfcAAkWixe8AAkWiGOsAAkWixksAAkWixqsAAkWixj8AAkWixkMAAkWixrcAAkWixkcAAkWiF2cAAkWiGdsAAkWixjMAAkWixmcAAkWixl8AAkWixlcAAkWixk8AAkWixosAAkWixiMAAkWixm8AAkWixnsAAkWixn8AAkWixvcAAkWixh8AAkWixhsAAkWixtMAAkWixsMAAkWixnMAAkWiGDcAAkWjAAF94wACRaLGxwACRaIZvwACRaLGowACRaLGkwACRaLGdwACRaLG5wACRaMAAX4rAAJFosavAAJExmPXAAJHQAMAAkS3AAF+MwACR0pjxwACR08AAX43AAJHTwABG3cAAkdPAAEbewACR08AARt/AAJHTwABG4MAAkdPAAEbbwACR08AARuHAAJHTskfAAJHSmPLAAJHchkfAAJHcwABfjsAAkdKY78AAkd/AAF+KwACR38AAXzjAAJHfwABfN8AAkd/AAF89wACR38AAXxjAAJHfwABfSMAAkd+hicAAkdKY9cAAkecAwACRLcAAX6fAAJHpmPHAAJHqwABG5sAAkerAAEbnwACR6rJNwACR6sAARujAAJHqwABG6cAAkemY8sAAkfDAAF8WwACR6ZjvwACR8sAAX4rAAJHyoYnAAJHywABfOMAAkfLAAF83wACR8sAAXz3AAJHywABfSMAAkfLAAF8YwACR6Zj1wACR+gDAAJEtwABfwsAAkfyY8cAAkf3AAF/DwACR/cAAX8TAAJH9skvAAJH9wABG6sAAkf3AAEbrwACR/bJMwACR/cAARuzAAJH9wABG6MAAkf2yR8AAkfyY8sAAkgfAAF8XwACSB8AAX8XAAJIHwABfxsAAkfyY78AAkgvAAF+KwACSC6GJwACSC8AAXzjAAJILwABfN8AAkgvAAF89wACSC8AAXxjAAJILwABfSMAAkfyY9cAAkhMAwACRLcAAX+jAAJIVmPHAAJIWwABfJsAAkhaHrcAAkhbAAF/pwACSFsAAX+rAAJIWhDXAAJIWwABfP8AAkhappMAAkhbAAF9DwACSFsAAX0LAAJIWwABf68AAkhadJ8AAkhWY78AAkiKa8cAAkiLAAEuMwACSIrGawACSIrGKwACSIrGLwACSIrGlwACSIrGFwACSIrGgwACSIoYvwACSIrG1wACSIrGhwACSIrGvwACSIoZdwACSIrGEwACSIrGjwACSIrG3wACSIrGuwACSIrG4wACSIoY0wACSIoYrwACSIrG7wACSIrG6wACSIrGYwACSIoZxwACSIrG8wACSIrGCwACSIrF5wACSIrGAwACSIrF+wACSIrF9wACSIrF7wACSIoY6wACSIrGXwACSIrGVwACSIrGTwACSIrGSwACSIrGqwACSIrGPwACSIrGQwACSIrGtwACSIrGRwACSIoXZwACSIoZ2wACSIrGMwACSIrGZwACSIrGiwACSIrGIwACSIrGbwACSIrGewACSIrGfwACSIrG9wACSIrGHwACSIrGGwACSIrG0wACSIrGwwACSIrGcwACSIoYNwACSIrGxwACSIoZvwACSIrGowACSIrGkwACSIrGdwACSIrG5wACSIrGrwACSFZj1wACSYwAAwACTQ8AAkmXAAF/ywACSZpjywACSZ4C9wACSZpjvwACSaboLwACSZpj1wACSawDAAJJlwABf88AAkm2Y8cAAkm7AAJNDwACSb7MEwACSbrADwACSbZjywACScoC9wACSbZjvwACSdMAAX/XAAJJ0uNvAAJJ0wABf9sAAknTAAF/3wACSbZj1wACSeQDAAJJlwABSUsAAknuY8cAAknzAAF/5wACSfMAAX/rAAJJ8wABf+8AAknzAAF/8wACSfMAAk0PAAJKBwABf/cAAkoGzBMAAkoHAAEUIwACSgcAAX/7AAJKBwABTOsAAkoHAAFTWwACSgcAAXWvAAJKBuLfAAJKBwABU1cAAkoG2xcAAkoHAAEpCwACSfMAAX//AAJJ8wABgAMAAknzAAGABwACSfMAAYALAAJJ8wABgA8AAknya6sAAknzAAGAEwACSfMAAYAXAAJJ8wABgBsAAknzAAGAHwACSfMAAYAjAAJJ8wABgCcAAknzAAGAKwACSfMAAYAvAAJJ8wABgDMAAkny78MAAknzAAGANwACSe5jywACSnoJtwACSnsAAk0PAAJKgtR3AAJKgwABJQsAAkqDAAFSbwACSoMAAVOzAAJJ7mO/AAJKlwABgDsAAkqXAAGAPwACSpcAAYBHAAJKlwABgFcAAkqXAAGAWwACSpcAAYBfAAJKlwABgGMAAkqWhLMAAkqWhL8AAkqXAAGAZwACSpcAAYCDAAJKlwACTQ8AAkrHAAGAiwACSscAAYIDAAJKxwABgzMAAkqW6C8AAkqXAAGAlwACSpa0mwACSpcAAYCzAAJKlwABgLcAAkqXAAGAuwACSpcAAYC/AAJKlwABgMcAAkqXAAGAywACSpYW4wACSpcAAYDfAAJKlwABgOMAAkqXAAGA5wACSpcAAYDrAAJKlsDHAAJKlmvHAAJKlwABfLMAAkqXAAF8qwACSpcAAYDzAAJKlwABgPcAAkqXAAGA+wACSpcAAYD/AAJKlu+bAAJKlu+jAAJKlu+nAAJKlu+rAAJKlu+3AAJKlu+zAAJKlu+fAAJKlwABgQ8AAkqW75cAAkqW75MAAkqXAAGBVwACSpcAAYF7AAJKlwABgKcAAkqXAAGBgwACSpcAAYGLAAJKlwABgZMAAkqXAAGBIwACSpcAAYGHAAJKlwABgb8AAkqW5ssAAkqW6D8AAkqW6GMAAkqXAAGBxwACSpboUwACSpcAAYHLAAJKlwABgc8AAkqW5pMAAkqW5ksAAkqW5msAAkqW5u8AAkqW5ysAAkqW5k8AAkqW5lMAAkqW5lcAAkqW5lsAAkqW5xMAAkqW5xcAAkqW5zMAAkqW5w8AAkqW5vMAAkqW5kcAAkqW5tMAAkqW5tcAAkqW5osAAkqW5o8AAkqW5m8AAkqW5ocAAkqW5usAAkqWxtcAAkqWxt8AAkqW5nMAAkqWxscAAkqXAAGB8wACSpcAAYH7AAJKlsbzAAJKluafAAJKluarAAJKlua7AAJKlua/AAJKlub3AAJKlwABghsAAkqXAAGCDwACSpcAAYIXAAJKlwABghMAAkqW5q8AAkqW5qcAAkqW5qMAAkqW5rMAAkqW5rcAAkqW5ncAAkqW5nsAAkqW5oMAAkqW5wcAAkqW5t8AAkqW5uMAAkqXAAGCSwACSpbmfwACSpbmYwACSpbmZwACSpcAAYFHAAJKlwABglcAAkqWGH8AAkqWFy8AAkqXAAGCXwACSpcAAYH/AAJKlub7AAJKlubnAAJKlub/AAJKlsbTAAJKlsZzAAJKlhg3AAJKlsYXAAJKludHAAJKlucDAAJKluZfAAJKlwABgn8AAkqW5y8AAkqWxsMAAkqW5xsAAkqW5s8AAkqW5x8AAkqW5yMAAkqW5ycAAkqW5tsAAkqXAAGCowACSpbmlwACSpbmmwACSpbPbwACSpcAAYKrAAJKlwABgrsAAkqWz3MAAkqXAAGCvwACSpbPdwACSpcAAYLDAAJKlwABgssAAkqXAAGC1wACSpcAAYLbAAJKlwABgt8AAkqXAAGC4wACSpcAAYLrAAJKlwABgu8AAkqXAAGC9wACSpcAAYL7AAJKlwABgv8AAkqWpV8AAkqXAAGDAwACSpcAAYMHAAJKlwABgw8AAkqXAAGDIwACSpcAAYMnAAJKlubDAAJKlubHAAJKlwABgnMAAkqXAAGCdwACSpbnNwACSpbnOwACSpbnPwACSpbnQwACSpbnSwACSpbnTwACSpbnUwACSpcAAYM/AAJKlucLAAJKludXAAJKludbAAJKludfAAJKludjAAJKludnAAJKludrAAJKludvAAJKludzAAJJ7mPXAAJNiAADAAJNEwACTZJjvwACTZcAAYaXAAJNkwABg2cAAk2eY8sAAk2iAvcAAk2eY78AAk2q6C8AAk2eY9cAAk2wAwACTZMAAYNrAAJNumPHAAJNvwACTRMAAk3CzBMAAk2/AAGDbwACTb8AAYNzAAJNumPLAAJN0gL3AAJNumO/AAJN2wABGysAAk26Y9cAAk3gAwACTZMAAYObAAJN6mPHAAJN7wABg58AAk3uAvcAAk3vAAJNEwACTfrU4wACTfrMEwACTfsAAUzrAAJN+tsXAAJN+wABKQsAAk37AAGDowACTfsAAYOnAAJN6mPLAAJOGtFnAAJOGwACTRMAAk4jAAFTswACTiMAASULAAJN6mO/AAJOLugvAAJOLueDAAJOLwABg6sAAk4vAAJNEwACTj8AAYPTAAJOPwABg88AAk4/AAGD1wACTj8AAYSDAAJOLuebAAJOLwABg98AAk4vAAGD4wACTi7m+wACTi4XLwACTi7oUwACTi8AAYPrAAJOLwABg+8AAk4vAAGD+wACTi8AAYQDAAJOLuarAAJOLwABhBsAAk4u5l8AAk4vAAGD/wACTi7mSwACTi7m7wACTi7oPwACTi7oYwACTi8AAYRHAAJOLuaTAAJOLwABhFcAAk4uxvMAAk4u5sMAAk4u5zcAAk4u5zsAAk4u5z8AAk4u50MAAk4vAAGEawACTi7mdwACTi7mgwACTi7mlwACTi7mpwACTi7mrwACTi7mowACTi7mswACTi8AAYSPAAJOLucjAAJOLucnAAJOLub3AAJOLwABhKcAAk4u51MAAk4u508AAk4u528AAk4u51sAAk4u518AAk4u51cAAk4u52sAAk3qY9cAAk8MAwACTZMAAYTbAAJPFmPHAAJPGwABg3sAAk8aCzcAAk8alQMAAk8aAvcAAk8akgMAAk8WY8sAAk8zAAJNEwACTzcAAVOzAAJPFmO/AAJPPugvAAJPPueDAAJPPwABhN8AAk8+5pcAAk8+5psAAk8+5qsAAk8WY9cAAk9YAwACTZMAAYTvAAJPYmPHAAJPZgL3AAJPZpUDAAJPZwABGyMAAk9nAAJNEwACT3cAAYOnAAJPZnUfAAJPZwABhPMAAk9nAAGDkwACT2cAAYT3AAJPYmPLAAJPjwACTRMAAk+TAAFTswACT48AAYT7AAJPYmO/AAJPnwABhP8AAk+fAAGFAwACT58AAYULAAJPnwABhRcAAk+fAAGFEwACT57oLwACT57ngwACT58AAYUnAAJPnwABhR8AAk+fAAGFOwACT58AAYUrAAJPnwABhRsAAk+fAAGFRwACT58AAYUjAAJPnwABhVMAAk9iY9cAAk/cAwACTZMAAYVXAAJP5mPHAAJP6pIDAAJP6wABhVsAAk/qb3MAAk/rAAEbIwACT+qVAwACT+ZjywACUAMAAk0TAAJQBwABU7MAAlADAAGDbwACT+ZjvwACUBMAAYUHAAJQEwABLjMAAlATAAGFXwACUBLoWwACUBLG8wACUBLGwwACT+Zj1wACUCwDAAJNkwABhXMAAlA2Y8cAAlA6AvcAAlA2Y78AAlBC6C8AAlA2Y9cAAlBIAwACTZMAAYV7AAJQUmPHAAJQVgL3AAJQUmO/AAJQXugvAAJQUmPXAAJQZAMAAk2TAAGFfwACUG5jxwACUHJpfwACUHMAAYWDAAJQbmPXAAJQfAMAAk2TAAGFhwACUIZjxwACUIsAAk0TAAJQjwABU7MAAlCKAvcAAlCKvosAAlCLAAGFiwACUIsAAYWPAAJQhmO/AAJQpugvAAJQpwABhZcAAlCnAAGFnwACUKcAAYWzAAJQpueDAAJQpwABhZMAAlCnAAGFwwACUIZj1wACUMQDAAJNkwABhccAAlDOY8cAAlDTAAJNEwACUNcAAVOzAAJQ0gL3AAJQ0wABg48AAlDQpwACUM5jvwACUOroLwACUOrngwACUM5j1wACUPQDAAJNkwABhdsAAlD+Y8cAAlECAvcAAlEClQMAAlD+Y8sAAlEPAAJNEwACURMAAVOzAAJQ/mO/AAJRGugvAAJRGwABheMAAlEa5sMAAlEa51cAAlEa5pMAAlEbAAGF9wACUP5j1wACUTQDAAJNkwABhfsAAlE+Y8cAAlFDAAJNEwACUUbbFwACUUbkawACUUcAAYOnAAJRQgL3AAJRQwABhf8AAlFDAAGGAwACUUMAAYOXAAJRPmPLAAJRZwACTRMAAlFrAAFTswACUT5jvwACUXLoLwACUXLngwACUXMAAYYLAAJRcuZ3AAJRcuaDAAJRcwACTRMAAlGLAAGGEwACUXLmewACUXLmYwACUXMAAYYrAAJRcuebAAJRcubPAAJRcwABhjsAAlFy5xsAAlFy5x8AAlFy5tsAAlFy5pcAAlFy5psAAlFy6DsAAlFy5l8AAlFyGH8AAlFyxvMAAlFy5p8AAlFy5sMAAlFy5scAAlFyFy8AAlFy5vsAAlFy6GMAAlFy5yMAAlFy50MAAlFy50sAAlFy508AAlFy51MAAlE+Y9cAAlH4AwACTZMAAYZLAAJSAmPHAAJSBJ8AAlIHAAJNEwACUgyjAAJSBKcAAlIFhwACUgJjvwACUhyPAAJSAmPXAAJSJAMAAk2TAAGGTwACUi5jxwACUjKVAwACUjIXrwACUjMAAYZTAAJSMwABhlcAAlIuY8sAAlJHAAJNEwACUksAAVOzAAJSLmO/AAJSUwABhlsAAlJTAAGGXwACUlIQgwACUlMAAYZjAAJSUtlrAAJSUwABhmcAAlJTAAGGJwACUlMAAYYjAAJSUwABhh8AAlJTAAGGFwACUlMAAYYvAAJSUwABhj8AAlJTAAGGQwACUlMAAYZHAAJSUwABhn8AAlJTAAGGBwACUlJ8dwACUi5j1wACUpgAAwACSbMAAlKiY8MAAlKnAAGGtwACUqcAAYa7AAJSomPHAAJSswABjWsAAlKyChcAAlKiY78AAlK+D8cAAlK/AAFJYwACUr8AAU1fAAJSvwABTZMAAlK/AAFNjwACUr8AAUv/AAJSvwABiIMAAlK/AAGIhwACUr8AAYiLAAJSvwABiI8AAlK/AAGNbwACUr6/hwACUqMAAYa/AAJS8mO/AAJS9sb3AAJS9hi/AAJS9hivAAJS9hjTAAJS9sbzAAJS9sbvAAJS9sbrAAJS9sbnAAJS9sbjAAJS9sbfAAJS9sbXAAJS9sbTAAJS9hg3AAJS9sbHAAJS9hl3AAJS9sbDAAJS9sa/AAJS9sa7AAJS9hnHAAJS9hjrAAJS9sa3AAJS9savAAJS9sarAAJS9sajAAJS9saXAAJS9saTAAJS9saPAAJS9saLAAJS9saHAAJS9saDAAJS9sZ/AAJS9sZ7AAJS9sZ3AAJS9sZzAAJS9hm/AAJS9sZvAAJS9sZrAAJS9sZnAAJS9sZjAAJS9sZfAAJS9sZXAAJS9sZPAAJS9sZLAAJS9sZHAAJS9sZDAAJS9sY/AAJS9hdnAAJS9hnbAAJS9sYzAAJS9sYvAAJS9sYrAAJS9sYjAAJS9sYfAAJS9sYbAAJS9sYXAAJS9sYTAAJS9sYLAAJS9sYDAAJS9sX7AAJS9sX3AAJS9sXvAAJS9sXnAAJS8mPXAAJT8AMAAlKjAAGGxwACU/pjvwACU/8AAR+bAAJT/sb3AAJT/wABfKsAAlP/AAGGywACU/7oawACU/4YvwACU/4YrwACU/4Y0wACU/7G8wACU/7G7wACU/7G6wACU/7G5wACU/7G4wACU/7G3wACU/7G1wACU/7G0wACU/4YNwACU/7GxwACU/7GwwACU/4ZxwACU/4Y6wACU/7GtwACU/4ZdwACU/7GvwACU/7GuwACU/8AAXyzAAJT/wABhs8AAlP+xqsAAlP+xqMAAlP+xpcAAlP+xpMAAlP+xo8AAlP+xosAAlP+xocAAlP+xoMAAlP+xn8AAlP+xnsAAlP+xmsAAlP+xncAAlP+Gb8AAlP+xm8AAlP+xnMAAlP+xmcAAlP+xmMAAlP/AAGG0wACU/7GXwACU/7GVwACU/7GTwACU/8AAYbXAAJT/sZLAAJT/sZHAAJT/sZDAAJT/sY/AAJT/hdnAAJT/hnbAAJT/sYzAAJT/sYvAAJT/sYrAAJT/sYjAAJT/sYfAAJT/sYbAAJT/wABhtsAAlP+xgsAAlP+xgMAAlP+xfsAAlP+xfcAAlP+xe8AAlP+xecAAlP+xhMAAlP+xhcAAlP+xq8AAlP6Y9cAAlUcAwACUqMAAYbfAAJVJmO/AAJVKsb3AAJVKhi/AAJVKhivAAJVKhjTAAJVKsbzAAJVKsbvAAJVKsbrAAJVKsbnAAJVKsbjAAJVKsbfAAJVKsbXAAJVKsbTAAJVKhg3AAJVKsbHAAJVKhl3AAJVKsbDAAJVKsa/AAJVKsa7AAJVKhnHAAJVKhjrAAJVKsa3AAJVKsavAAJVKsarAAJVKsajAAJVKsaXAAJVKsaTAAJVKsaPAAJVKsaLAAJVKsaHAAJVKsaDAAJVKsZ/AAJVKsZ7AAJVKsZ3AAJVKsZzAAJVKhm/AAJVKsZvAAJVKsZrAAJVKsZnAAJVKsZjAAJVKsZfAAJVKsZXAAJVKsZPAAJVKsZLAAJVKsZHAAJVKsZDAAJVKsY/AAJVKhdnAAJVKhnbAAJVKsYzAAJVKsYvAAJVKsYrAAJVKsYjAAJVKsYfAAJVKsYbAAJVKsYXAAJVKsYTAAJVKsYLAAJVKsYDAAJVKsX7AAJVKsX3AAJVKsXvAAJVKsXnAAJVJmPXAAJWJAMAAlKjAAGG4wACVi5jvwACVjMAAR+bAAJWMsb3AAJWMwABfKsAAlYzAAGGywACVjLoawACVjIYvwACVjIYrwACVjIY0wACVjLG8wACVjLG7wACVjLG6wACVjLG5wACVjLG4wACVjLG3wACVjLG1wACVjLG0wACVjIYNwACVjLGxwACVjLGwwACVjIZxwACVjIY6wACVjLGtwACVjIZdwACVjLGvwACVjLGuwACVjMAAXyzAAJWMwABhs8AAlYyxqsAAlYyxqMAAlYyxpcAAlYyxpMAAlYyxo8AAlYyxosAAlYyxocAAlYyxoMAAlYyxn8AAlYyxnsAAlYyxmsAAlYyxncAAlYyGb8AAlYyxm8AAlYyxnMAAlYyxmcAAlYyxmMAAlYzAAGG0wACVjLGXwACVjLGVwACVjLGTwACVjMAAYbXAAJWMsZLAAJWMsZHAAJWMsZDAAJWMsY/AAJWMhdnAAJWMhnbAAJWMsYzAAJWMsYvAAJWMsYrAAJWMsYjAAJWMsYfAAJWMsYbAAJWMwABhtsAAlYyxgsAAlYyxgMAAlYyxfsAAlYyxfcAAlYyxe8AAlYyxecAAlYyxhMAAlYyxhcAAlYyxq8AAlYuY9cAAldQAwACUqLgCwACV1pj1wACV1wDAAJSohFHAAJXZmPHAAJXawACSbMAAldvAAGG6wACV2ZjywACV3aXCwACV3cAAYE3AAJXZmO/AAJXghFLAAJXghFPAAJXghY3AAJXgwABhucAAleDAAJJswACV5bDBwACV4LCZwACV4MAAYbvAAJXgwABhvMAAleCv68AAldmY9cAAlesAwACUqMAAXm3AAJXtmPHAAJXugm3AAJXtmO/AAJXwhFLAAJXwhY3AAJXwhFPAAJXwwABhucAAlfDAAJJswACV9bDBwACV7Zj1wACV9wDAAJSoggfAAJX5mO/AAJX6wABhvMAAlfmY9cAAlfwAwACUqIYswACV/pjxwACV/4YtwACV/pjvwACWAYRSwACWAYWNwACWAYRTwACWAcAAYbnAAJYBwACSbMAAlgawwcAAlf6Y9cAAlggAwACWCIW2wACUqIYqwACWC5jxwACWDIJvwACWC5jvwACWDoRSwACWDoWNwACWDoRTwACWDsAAYbnAAJYOwACSbMAAlhOwwcAAlguY9cAAlhUAwACUqIYzwACWF5jvwACWGIRSwACWGIWNwACWGIRTwACWGMAAYbnAAJYYwACSbMAAlh2wwcAAlheY9cAAlh8AwACUqMAAYb3AAJYhmPHAAJYihdLAAJYiga/AAJYihdPAAJYhmPLAAJYmwABhv8AAliGY78AAliiEUsAAliiFjcAAliiEU8AAlijAAGG5wACWKMAAkmzAAJYtsMHAAJYhmPXAAJYvAMAAli/AAGG+wACUqMAAYcDAAJYymPHAAJYzgm3AAJYymPXAAJY1AMAAlKjAAGHBwACWN5jxwACWOKrcwACWOIXSwACWOKzHwACWN5jvwACWPIRSwACWPIWNwACWPIRTwACWPMAAYbnAAJY8wACSbMAAlkGwwcAAljeY9cAAlkMAwACUqKOdwACWRZjxwACWRrGmwACWRoPFwACWRZjvwACWSYRSwACWSYWNwACWSYRTwACWScAAYbnAAJZJwACSbMAAlk6wwcAAlkWY9cAAllAAwACUqMAAYcLAAJZSmPHAAJZThdLAAJZSmO/AAJZVhFLAAJZVhY3AAJZVhFPAAJZVwABhucAAllXAAJJswACWWrDBwACWUpj1wACWXADAAJSowABhw8AAll6Y8cAAll+F0sAAll6Y78AAlmGEUsAAlmGFjcAAlmGEU8AAlmHAAGG5wACWYcAAkmzAAJZmsMHAAJZemPXAAJZoAMAAlKitr8AAlmqY8cAAlmuxtsAAlmqY78AAlm2EUsAAlm2FjcAAlm2EU8AAlm3AAGG5wACWbcAAkmzAAJZysMHAAJZqmPXAAJZ0AMAAlKitrsAAlnaY8cAAlnextsAAlnaY78AAlnmEUsAAlnmFjcAAlnmEU8AAlnnAAGG5wACWecAAkmzAAJZ+sMHAAJZ2mPXAAJaAAMAAlKjAAGHEwACWgpjxwACWg4CWwACWgpjvwACWhYRSwACWhYWNwACWhYRTwACWhcAAYbnAAJaFwACSbMAAloqwwcAAloKY9cAAlowAwACUqIYMwACWjpjxwACWj4JvwACWjpjvwACWkYRSwACWkYWNwACWkYRTwACWkcAAYbnAAJaRwACSbMAAlpawwcAAlo6Y9cAAlpgAwACUqMAAYcXAAJaamPHAAJabgm3AAJabsbLAAJabsbPAAJaamO/AAJafhFLAAJafhY3AAJafhFPAAJafwABhucAAlp/AAJJswACWpLDBwACWmpj1wACWpgDAAJSohlrAAJaomPHAAJapnwvAAJapgm3AAJaomO/AAJashFLAAJashY3AAJashFPAAJaswABhucAAlqzAAJJswACWsbDBwACWqJj1wACWswDAAJSowABhxsAAlrWY8cAAlraD1sAAlraGSsAAlrWY78AAlrmEUsAAlrmFjcAAlrmEU8AAlrnAAGG5wACWucAAkmzAAJa+sMHAAJa1mPXAAJbAAMAAlKjAAGHHwACWwpjxwACWw4JtwACWwpj1wACWxQDAAJSowABhyMAAlseY8cAAlsiCb8AAlseY78AAlsqEUsAAlsqFjcAAlsqEU8AAlsrAAGG5wACWysAAkmzAAJbPsMHAAJbHmPXAAJbRAMAAlKjAAGHJwACW05jvwACW1IRSwACW1IWNwACW1IRTwACW1MAAYbnAAJbUwACSbMAAltmwwcAAltOY9cAAltsAwACUqIZwwACW3ZjxwACW3oC9wACW3oJuwACW3ZjvwACW4YRSwACW4YWNwACW4YRTwACW4cAAYbnAAJbhwACSbMAAluawwcAAlt2Y9cAAlugAwACUqIY5wACW6pjxwACW65lawACW64JtwACW6pjvwACW7oRSwACW7oWNwACW7oRTwACW7sAAYbnAAJbuwACSbMAAlvOwwcAAluqY9cAAlvUAwACUqMAAYcrAAJb3mPHAAJb4gpfAAJb3mO/AAJb6hFLAAJb6hY3AAJb6hFPAAJb6wABhucAAlvrAAJJswACW/7DBwACW95j1wACXAQDAAJSowABhy8AAlwOY8cAAlwSCb8AAlwSxrMAAlwOY78AAlweEUsAAlweFjcAAlweEU8AAlwfAAGG5wACXB8AAkmzAAJcMsMHAAJcDmPXAAJcOAMAAlKiFg8AAlxCY8sAAlxGwzcAAlxCY78AAlxPAAGG8wACXEJj1wACXFQDAAJSowABhzMAAlxeY9cAAlxgAwACUqIZywACXGpjvwACXG4RSwACXG4WNwACXG8AAkmzAAJcesMHAAJcamPLAAJcgg9bAAJcgsLzAAJcamPXAAJcjAMAAlKjAAGHNwACXJZjxwACXJoC9wACXJZjywACXKICWwACXJZjvwACXKoRTwACXKsAAYbnAAJclmPXAAJctAMAAlKjAAGHOwACXL5jxwACXMIjlwACXMIJVwACXL5jvwACXM4RSwACXM4WNwACXM4RTwACXM8AAYbnAAJczwACSbMAAlziwwcAAly+Y8sAAlzqwzcAAly+Y9cAAlzwAwACXPMAAYc/AAJSowABh0MAAlz+Y8cAAl0Cva8AAl0CxqcAAlz+Y78AAl0OEUsAAl0OFjcAAl0OEU8AAl0PAAGG5wACXQ8AAkmzAAJdIsMHAAJc/mPLAAJdKsM3AAJc/mPXAAJdMAMAAlKjAAGHRwACXTpjxwACXT7GNwACXTpjvwACXUYRSwACXUYWNwACXUYRTwACXUcAAYbnAAJdRwACSbMAAl1awwcAAl06Y8sAAl1iwzcAAl06Y9cAAl1oAwACUqMAAYdLAAJdcmPHAAJddsabAAJddquDAAJddgJbAAJdcmPLAAJdhsM3AAJdhpBjAAJdcmO/AAJdkhFLAAJdkhY3AAJdkhFPAAJdkwABhucAAl2TAAJJswACXabDBwACXXJj1wACXawDAAJdru6rAAJSowABh08AAl26Y8sAAl2+fC8AAl26Y78AAl3GEUsAAl3GFjcAAl3HAAJJswACXdLDBwACXbpj1wACXdgDAAJSowABh1MAAl3iY8cAAl3mF0sAAl3mBr8AAl3mF08AAl3iY78AAl32EUsAAl32FjcAAl32EU8AAl33AAGG5wACXfcAAkmzAAJeCsMHAAJd4mPLAAJeEsM3AAJd4mPXAAJeGAMAAlKjAAGHVwACXiJjxwACXiYJJwACXiVvAAJeImO/AAJeMhFLAAJeMhY3AAJeMhFPAAJeMwABhucAAl4zAAJJswACXkbDBwACXiJjywACXk7DNwACXiJj1wACXlQDAAJSowABh1sAAl5eY78AAl5iEUsAAl5iFjcAAl5jAAJJswACXm7DBwACXl5j1wACXnQDAAJSol0rAAJefmPHAAJegquDAAJeghc3AAJeghc/AAJefmO/AAJekhFLAAJekhY3AAJekwACSbMAAl6ewwcAAl6SEU8AAl6TAAGG5wACXn5jywACXq8AAYE3AAJersM3AAJefmPXAAJeuAMAAlKjAAEP7wACXsJjxwACXsargwACXsR/AAJewmO/AAJe0hFLAAJe0hY3AAJe0wACSbMAAl7ewwcAAl7SEU8AAl7TAAGG5wACXsJjywACXu7DNwACXsJj1wACXvQDAAJSowABh2MAAl7+Y8cAAl8Cq4MAAl8AfwACXv5jvwACXw4RSwACXw4WNwACXw8AAkmzAAJfGsMHAAJfDhFPAAJfDwABhucAAl7+Y8sAAl8qwzcAAl7+Y9cAAl8wAwACUqMAAYdnAAJfOmPHAAJfPgL3AAJfPwACSbMAAl9HAAGHawACXzpjvwACX04RSwACX04RTwACX08AAYbnAAJfOmPLAAJfXsM3A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AJl/IMAAmX+FaMAAmX/AAEtJwACZf8AAkmzAAJmDwABiAsAAmYPAAGIDwACZg8AAYgvAAJmDwABiG8AAmYPAAGIdwACZf8AAUwDAAJl/wABVfcAAmX/AAGIKwACZf8AAVmbAAJl/wABVZsAAmX/AAEfvwACZf4PxwACZf8AAU1fAAJl/wABTY8AAmX/AAFNkwACZf8AAUljAAJl/wABS/8AAmX/AAGCxwACZf8AAYiDAAJl/wABiIcAAmX+c08AAmX/AAGIiwACZf8AAYiPAAJl+mPXAAJmbAMAAlKjAAGIkwACZnZjxwACZnqGvwACZniLAAJmdmO/AAJmhI8AAmZ2Y9cAAmaMAwACUqMAAYizAAJmlmPHAAJmmwABiLcAAmabAAGIuwACZpsAAYiXAAJmmgbPAAJmmwABiL8AAmabAAEp9wACZpsAAYjDAAJmmwABKoMAAmabAAGIxwACZpsAAYjLAAJmmnfvAAJmmmbDAAJmmwABG8cAAmabAAGIzwACZpsAAYjTAAJmmwABiNcAAmabAAGI2wACZpsAAYjfAAJmmwABiOMAAmabAAGI5wACZpp4OwACZpsAAYjrAAJmmng3AAJmmnj3AAJmmniHAAJmmwABiO8AAmabAAE9twACZpsAAYjzAAJmmwABiPcAAmabAAGI+wACZpsAAYj/AAJmmwABiQMAAmaWY8sAAmcfAAGJCwACZx8AAYkPAAJmlmO/AAJnKwABiRMAAmcrAAGJFwACZysAAYkjAAJnKwABE0sAAmcrAAGJKwACZysAAYkHAAJnKwABiVMAAmcrAAGJVwACZysAAYlbAAJnKwABiV8AAmcrAAGJawACZyoHHwACZysAAYlvAAJnKwABDOcAAmcrAAEMFwACZysAAYmPAAJnKwABiXsAAmcrAAGJnwACZysAAYmrAAJnKwABiaMAAmcrAAGJtwACZysAAYm7AAJnKwABib8AAmcrAAGJwwACZysAAYnXAAJnKwABiX8AAmcqhtMAAmcrAAGJ2wACZysAAYnjAAJnKwABiecAAmcqCb8AAmcqFaMAAmcrAAEMZwACZysAAQxTAAJnKwABie8AAmcrAAGKHwACZysAAYnzAAJnKwABifcAAmcrAAGJ+wACZysAAYn/AAJnKwABiYsAAmcrAAGKAwACZysAAYoHAAJnKwABij8AAmcrAAGKCwACZysAAYoPAAJnKwABihMAAmcrAAGKNwACZpZj1wACZ+wDAAJSowABiksAAmf2Y8cAAmf6DSsAAmf6BscAAmf7AAGKTwACZ/sAAYpTAAJn9mO/AAJoDXcAAmf2Y8sAAmgVewACZ/Zj1wACaBwDAAJSowABilcAAmgmY8cAAmgqDSsAAmgqBscAAmgmY8sAAmg1cwACaCZj1wACaDwDAAJSowABilsAAmhGY8cAAmhLAAEfzwACaEsAAR/TAAJoSwABil8AAmhLAAEfywACaEZjvwACaF8AAYpjAAJoRmPXAAJoZAMAAlKjAAGKZwACaG5jvwACaHIHHwACaHLWCwACaHLWBwACaHLWEwACaG5j1wACaIQDAAJSowABimsAAmiOY8cAAmiSCj8AAmiOY78AAmia1gsAAmia+XcAAmiOY9cAAmikAwACUqJmqwACaK5jxwACaLHrAAJosglfAAJoswABH88AAmizAAGKbwACaLMAAYpzAAJoswACSbMAAmjLAAGKdwACaMoPewACaMoPfwACaLMAAYp7AAJoswABin8AAmizAAGKgwACaLMAAYqHAAJoswABiosAAmizAAGKkwACaLMAAYqbAAJoswABWy8AAmiuY78AAmj7AAGKnwACaPoPkwACaPoPlwACaPsAAYqjAAJo+wABiqcAAmj7AAGKqwACaPm/AAJo+wABircAAmj7AAGKuwACaPsAAYq/AAJo+wABisMAAmj6oycAAmj7AAJJswACaS8AAYqzAAJpLwABizcAAmkvAAGLOwACaPsAAYrHAAJo+tYHAAJo+wABis8AAmj6a8cAAmj7AAGK0wACaPsAATfTAAJo+sb3AAJo+wABiucAAmj7AAGK6wACaPsAAYr/AAJo+wABivcAAmj6GL8AAmj6GK8AAmj6GNMAAmj7AAGLAwACaPrG8wACaPrG7wACaPrG6wACaPrG5wACaPrG4wACaPrG3wACaPrG1wACaPrG0wACaPrGrwACaPoYNwACaPrGxwACaPoZdwACaPrGwwACaPrGvwACaPrGuwACaPoY6wACaPsAAYsXAAJo+hnHAAJo+wABiuMAAmj6xqMAAmj6xpcAAmj6xpMAAmj6xo8AAmj6xosAAmj6xocAAmj6xoMAAmj6xn8AAmj6xnsAAmj6xncAAmj6xnMAAmj6Gb8AAmj6xm8AAmj6WbsAAmj7AAGLZwACaPrGawACaPrGZwACaPrGYwACaPrGXwACaPsAAYt3AAJo+sZXAAJo+sZPAAJo+sZLAAJo+sZHAAJo+hdnAAJo+hnbAAJo+sYzAAJo+sZDAAJo+sY/AAJo+sYvAAJo+sYrAAJo+sYjAAJo+sYfAAJo+sYbAAJo+sarAAJo+sa3AAJo+wABhtsAAmj6xgsAAmj6xgMAAmj6xfsAAmj6xfcAAmj6xe8AAmj6xecAAmj6xhMAAmj6xhcAAmiuY8sAAmp6D4sAAmp7AAGKrwACaK5j1wACaoQDAAJSowABi48AAmqOY8cAAmqSXecAAmqSDYcAAmqOY78AAmqdWwACap4P9wACao5j1wACaqgDAAJSowABi5MAAmqyY8cAAmq2ot8AAmq3AAGLlwACarcAAYsbAAJqtg/TAAJqtwABi5sAAmq3AAGLowACarJjvwACatMAAYurAAJq0wABi68AAmrTAAGLswACatIZxwACatLGZwACatLGYwACatLGcwACatLGEwACatIZvwACarJj1wACavgDAAJSowABi7cAAmsCY8cAAmsGCV8AAmsCY78AAmsOxvcAAmsPAAEfmwACaw4YvwACaw4YrwACaw4Y0wACaw7G8wACaw7G7wACaw7G6wACaw7G5wACaw7G4wACaw7G3wACaw7G1wACaw7G0wACaw4YNwACaw7GxwACaw4ZdwACaw7GwwACaw7GvwACaw7GuwACaw4ZxwACaw4Y6wACaw7GtwACaw8AAXyzAAJrAmPXAAJrbAMAAlKjAAGLvwACa3ZjvwACa3pl1wACa3qFJwACa3sAAYvHAAJrehxbAAJrehxnAAJrdmPXAAJrkAMAAlKjAAGLywACa5pjvwACa55l1wACa56FJwACa58AAYvHAAJrnhxbAAJrnhxnAAJrmmPXAAJrtAMAAlKjAAGLzwACa75jxwACa8IXmwACa8MAAYvTAAJrwwABi9cAAmvDAAGL2wACa8MAAYvfAAJrwwABi+MAAmvDAAGL5wACa8MAAYvrAAJrvmO/AAJr5hxbAAJr5hxnAAJr5mXXAAJr5wABi+8AAmvmhScAAmvnAAGLxwACa+cAAYvzAAJr5wABi/cAAmu+Y9cAAmwIAwACUqMAAYwHAAJsEmPHAAJsFhFfAAJsFg/PAAJsFuAbAAJsFwABH4MAAmwSY78AAmwrAAGKywACbCrWEwACbBJj1wACbDQDAAJSowABjAsAAmw+Y8cAAmxDAAGMDwACbEMAAYwTAAJsPmO/AAJsTwABiBcAAmxPAAGIGwACbE8AAYgfAAJsTwABiCMAAmw+Y9cAAmxgAwACUqIjowACbGpjxwACbG4NKwACbG6LgwACbG8AAYgnAAJsbtYfAAJsbmxXAAJsbuFnAAJsbwABjBcAAmxqY8sAAmyPAAEBawACbGpjvwACbJcAAkmzAAJsmwABjCMAAmybAAGMGwACbJbHmwACbGpj1wACbKgDAAJsqwABjB8AAmyrAAGMJwACUqMAAYw/AAJsumPHAAJsvwABiCcAAmy/AAF7+wACbL8AAYxDAAJsumO/AAJszZ8AAmzOBx8AAmzOnccAAmzPAAGMRwACbM5rxwACbM8AAYxPAAJszwABjFMAAmzPAAEfmwACbM8AAYxbAAJszwABjF8AAmzOxgsAAmzOxecAAmzPAAGMbwACbM7GAwACbM7F+wACbM7F9wACbM7F7wACbM8AAYyXAAJszsb3AAJszhi/AAJszhivAAJszhjTAAJszsbzAAJszwABjKMAAmzPAAGMpwACbM7G7wACbM7G6wACbM8AAYzTAAJszsbnAAJszsbjAAJszsbfAAJszsbXAAJszsbTAAJszsavAAJszhg3AAJszsbHAAJszhl3AAJszsbDAAJszsa/AAJszsa7AAJszhnHAAJszhjrAAJszsa3AAJszsarAAJszsajAAJszsaXAAJszsaTAAJszsaPAAJszsaLAAJszsaHAAJszwABjQMAAmzOxoMAAmzOxn8AAmzOxnsAAmzOxncAAmzOxnMAAmzOGb8AAmzOxm8AAmzOxmsAAmzOxmcAAmzOxmMAAmzOxl8AAmzOxlcAAmzOxk8AAmzOxksAAmzOxkcAAmzOxkMAAmzOxj8AAmzOF2cAAmzOGdsAAmzOxjMAAmzOxi8AAmzOxisAAmzOxiMAAmzOxh8AAmzOxhsAAmzOxhMAAmzOxhcAAmy6Y9cAAm4IAwACUqMAAY07AAJuEmPHAAJuFwABjT8AAm4XAAGMFwACbhYDuwACbhJjvwACbicAAYxLAAJuJmvHAAJuJwABH5sAAm4nAAGG2wACbhJj1wACbjgDAAJSowABjUMAAm5CY78AAm5HAAGNRwACbkcAAY1LAAJuRwABjU8AAm5HAAGNWwACbkcAAY1fAAJuRsb3AAJuRsXnAAJuRsXvAAJuRsX3AAJuRsX7AAJuRsYDAAJuRsYLAAJuRsYTAAJuRsYXAAJuRsYbAAJuRsYfAAJuRsYjAAJuRsYrAAJuRsYvAAJuRhnbAAJuRsYzAAJuRhdnAAJuRsY/AAJuRsZDAAJuRsZHAAJuRsZLAAJuRsZPAAJuRsZXAAJuRsZfAAJuRsZjAAJuRsZnAAJuRsZrAAJuRsZvAAJuRhm/AAJuRsZzAAJuRsZ3AAJuRsZ7AAJuRsZ/AAJuRsaDAAJuRsaHAAJuRsaLAAJuRsaPAAJuRsaTAAJuRsaXAAJuRsajAAJuRsarAAJuRsavAAJuRsa3AAJuRhjrAAJuRhnHAAJuRsa7AAJuRsa/AAJuRsbDAAJuRhl3AAJuRsbHAAJuRhg3AAJuRsbTAAJuRsbXAAJuRsbfAAJuRsbjAAJuRsbnAAJuRsbrAAJuRsbvAAJuRsbzAAJuRhjTAAJuRhivAAJuRhi/AAJuQmPXAAJvVAADAAJNFwACb15jvwACb2MAAXmzAAJvXwABjXcAAm9qY8cAAm9vAAJHZwACb3IPewACb3IPfwACb3IPgwACb2pjywACb4IPiwACb4IPjwACb2pjzwACb44PjwACb2pjvwACb5YPkwACb5YPlwACb5YPmwACb2pj1wACb6QDAAJvXwABjXsAAm+uY8cAAm+yD6cAAm+yD6sAAm+uY78AAm++D68AAm++D7sAAm+9WwACb74PywACb74P1wACb74P5wACb74P7wACb74P3wACb74P2wACb74QAwACb65j1wACb+gDAAJvXwABjX8AAm/yY8cAAm/2D6cAAm/yY78AAm//AAGNgwACb/8AAR+bAAJv/hnbAAJv/saDAAJv/sZHAAJv/wABH8MAAm/yY9cAAnAYAwACb18AAY2HAAJwImO/AAJwJgcfAAJwImPXAAJwLAADAAJNGwACcDZjxwACcDsAAY57AAJwOwABjoMAAnA7AAGOiwACcDsAAY6TAAJwOwABjpsAAnA7AAGOnwACcDsAAY6jAAJwOwABjqsAAnA7AAGOswACcDsAAY67AAJwOwABjsMAAnA7AAGOxwACcDsAAY7PAAJwOwABjtcAAnA7AAGO3wACcDsAAY7jAAJwOwABjusAAnA7AAGO8wACcDsAAY77AAJwOwABjwMAAnA7AAGPCwACcDsAAY8TAAJwOwABjxsAAnA7AAGPIwACcDsAAY8rAAJwOwABjzMAAnA7AAGPOwACcDsAAY9DAAJwOwABj0cAAnA7AAGPSwACcDsAAY9PAAJwNtAfAAJwumPHAAJwvJ8AAnC/AAJNGwACcMSjAAJwvKcAAnC/AAGNlwACcL8AAY2bAAJwvwABjZ8AAnC/AAGNowACcL8AAY2nAAJwvwABjasAAnC/AAGNrwACcL8AAY2zAAJwvwABjbcAAnC/AAGNuwACcL8AAY2/AAJwvwABjcMAAnC/AAGNxwACcL8AAY3LAAJwvwABjc8AAnC/AAGN0wACcL8AAY3XAAJwvwABjdsAAnC/AAGN3wACcL8AAY3jAAJwvwABjecAAnC/AAGN6wACcL8AAY3vAAJwvwABjfMAAnC/AAGN9wACcL8AAY37AAJwvwABjf8AAnC/AAGOAwACcL8AAY4HAAJwvwABjgsAAnC/AAGODwACcL8AAY4TAAJwvwABjhcAAnC/AAGOGwACcL8AAY4fAAJwvwABjiMAAnC/AAGOJwACcL8AAY4rAAJwvwABji8AAnC/AAGOMwACcLpjvwACcXCPAAJwumPXAAJxeAMAAnA20CMAAnGCY8cAAnGEnwACcYcAAk0bAAJxjKMAAnGEpwACcYcAAY43AAJxhwABjjsAAnGHAAGOPwACcYbq3wACcYcAAY5DAAJxhwABjkcAAnGHAAGOSwACcYcAAY5PAAJxhwABjlMAAnGHAAGOVwACcYar1wACcYcAAY5bAAJxhwABYicAAnGGGusAAnGCY78AAnHQjwACcYJj1wACcdgDAAJwNwABjl8AAnHiY8cAAnHnAAGOYwACcecAAY5rAAJx5wABjnMAAnHiY9cAAnH0AAMAAk0fAAJx/wABj1cAAnICY8cAAnIHAAGPWwACcgZ8lwACcgJjvwACchKQQwACchLGYwACchMAAYbbAAJyAmPXAAJyIwACTR8AAnImAtcAAnH/AAGPXwACci5jxwACcjLVjwACci5jvwACcjprxwACcjrGqwACcjrGtwACcjrGlwACcjrGkwACcjrGhwACcjrGgwACcjoYNwACcjrGiwACcjrGfwACcjrGdwACcjrGewACcjrGawACci5j1wACcnADAAJx/wABj2MAAnJ6Y78AA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navAAGQTwACdq8AAZBTAAJ2rhbrAAJ2rhlnAAJ2rhmDAAJ2rhZPAAJ2rhZXAAJ2rwACTTcAAnbjAAGQawACduMAAZBjAAJ24wABkHMAAnbjAAGQbwACduMAAZCnAAJ24wABkJsAAnbjAAGQdwACdq4ZvwACdq4YJwACdq4a1wACdq4ZIwACdq4Y+wACdq4ZAwACdq4ZEwACdq4XAwACdq4WwwACdq4WuwACdq8AAZB/AAJ2rhTDAAJ2rhTXAAJ2rhVPAAJ2rhhvAAJ2rhnHAAJ2rhozAAJ2rhpDAAJ2rhonAAJ2rho7AAJ2rhpTAAJ2rhprAAJ2rhqjAAJ2rhqzAAJ2rwABkGcAAnavAAGQewACdq4YHwACdq4XywACdq4X2wACdq4YYwACdq4ZmwACdq4YmwACdq4YpwACdq4V4wACdq4YPwACdq4YRwACdq4YTwACdq4YVwACdq4YCwACdq4X5wACdq4X7wACdq4X+wACdq4YFwACdq4YAwACdq4XZwACdq4WywACdq4W0wACdq4XCwACdq4XEwACdq4XVwACdq4W+wACdq4WgwACdq4WiwACdq4WkwACdq4WmwACdq4XLwACdq4XQwACdq4YhwACdq4YjwACdq4ZdwACdq4XIwACdq4YNwACdq4YLwACdq4YvwACdq4Y4wACdq4ZWwACdq4Y0wACdq4YrwACdq4ZLwACdq4ZQwACdq4ZSwACdq4Y8wACdq4Y6wACdq4VgwACdq4VmwACdq4ViwACdq4VkwACdq4VpwACdq4ZUwACdq4YewACdl5j1wACeEADAAJ2MwABkKsAAnhKY8cAAnhMnwACeE8AAk03AAJ4VKMAAnhMpwACeE4YdwACeE8AAZCzAAJ4TwABkLcAAnhKY78AAnhsjwACeEpj1wACeHQDAAJ2MwABkLsAAnh+Y8cAAniCE2sAAniCEi8AAnh+Y78AAniOHOcAAniPAAGQowACeIyPAAJ4fmPLAAJ4nufbAAJ4nwABOqsAAnifAAE6vwACeJ7XIwACeH5j1wACeLIYdwACeLMAAZC/AAJ4swABkMADAAJNOwACeMJjvwACeMcAAZDjAAJ4xwABkO8AAnjHAAGQ8wACeMcAAZD3AAJ4xwABAusAAnjHAAGQ/wACeMcAAZEDAAJ4xwABkQcAAnjDAAGQ0wACeOpjxwACeO8AAZDXAAJ47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odLAAGWtwACh05jxwACh1MAAZa7AAKHUwACTVMAAodbAAGWvwACh05jywACh2MAAURTAAKHTmO/AAKHagp/AAKHawACTVMAAodzAAGWywACh3MAAZbTAAKHcwABlscAAodzAAGW9wACh3MAAZbvAAKHawABkpMAAodrAAGSNwACh2sAAZKDAAKHTmPXAAKHlAMAAodLAAGXAwACh55jvwACh6MAAZI3AAKHnmPXAAKHqAADAAJNVwACh7JjxwACh7cAAZcPAAKHtwABlxMAAoe3AAGXFwACh7cAAZcbAAKHtwABlxwDAAJNWwACh88AAWjPAAKH0mPHAAKH1wACTVsAAofbAAGXKwACh9YZCwACh9YRXwACh9aMlwACh9cAAZcvAAKH0mPLAAKH8wABk38AAofzAAE0GwACh9JjvwACh/8AAZc7AAKH/S8AAof+Av8AAof/AAGXPwACh/8AAk1bAAKIEwABl0MAAogTAAGRYwACh/8AAZdXAAKH/hkPAAKH/sNDAAKH/I8AAofSY9cAAogsAwACiC6MlwACiC8AAZZzAAKHzwABl4MAAog+Y8cAAohCEi8AAohDAAGUiwACiEMAAZZ7AAKIPmPTAAKIUloPAAKIPmO/AAKIWwABlKcAAohaZH8AAohaD/cAAohbAAGU1wACiD5j1wACiGwDAAKIbwABl4cAAofPAAGRJwACiHpjxwACiH4WrwACiH4V1wACiHpjywACiImHAAKIiXMAAoiKDxsAAoh6Y78AAoiYjwACiJkjAAKImwABkmcAAoiaD/cAAoiaWi8AAoiaDHMAAoh6Y9cAAoi0AwACiLYW2wACh88AAZenAAKIwmPHAAKIxhavAAKIxhXXAAKIxwACTVsAAojTAAGXqwACiMJjywACiNsAAk1bAAKI3wABl7MAAojZewACiMJjvwACiOl3AAKIwmPXAAKI8AMAAofPAAGXtwACiPpjxwACiP8AAk1bAAKJAwABNhsAAoj6Y78AAokKwMcAAokKsx8AAokLAAGWNwACiQsAAZTXAAKJCwABlOMAAokLAAGU+wACiQsAAVa7AAKJCwABVxMAAokKw0MAAokLAAJNWwACiTMAAZFjAAKJCI8AAoj6Y9cAAok8AwACiT5aDwACiT6MlwACiT8AAZZwAwACTV8AAolSY8cAAolXAAGX/wACiVcAAZgLAAKJUwABl/MAAoliY8cAAolnAAFD9wACiWcAAUPzAAKJYmO/AAKJcgp/AAKJcwABkpMAAolzAAGSNwACiXMAAZKDAAKJYmPXAAKJhAADAAJNYwACiY5jxwACiZMAAZgfAAKJjwABmBMAAomaY8cAAomfAAFD/wACiZ8AAUQHAAKJnwABRAsAAomaY78AAomuCn8AAomvAAGSkwACia8AAZI3AAKJrwABkoMAAomaY9cAAonAAAMAAk1nAAKJymPHAAKJzwABmDMAAonLAAGYJwACidZjxwACidsAAUP3AAKJ1mO/AAKJ4gp/AAKJ4wABkpMAAonjAAGSNwACieMAAZKDAAKJ1mPXAAKJ9AADAAJNawACif8AAZg7AAKKAmPHAAKKBwABmD8AAooEZwACigavfwACigcAAZhHAAKKBwABmEsAAooHAAGYTwACigJjvwACiiMAAUQfAAKKIwABRGsAAoojAAFEnwACiiMAAZhXAAKKAmPXAAKKNAMAAon/AAGYbwACij5jxwACikMAARR/AAKKQqafAAKKQm9zAAKKQwABmHMAAopC3vcAAopDAAE41wACikIGTwACikJZ7wACikMAASD/AAKKQwABmHcAAopDAAGYfwACikMAAZiHAAKKQwABmI8AAopDAAGYkwACikMAAZibAAKKQwABmJ8AAopDAAGYpwACikMAAZivAAKKPmO/AAKKjhzrAAKKjwABmFsAAoqOa8cAAoqPAAGYuwACio8AAZjDAAKKjwABmMcAAoqPAAGYtwACio8AAZjLAAKKjwABj9cAAoqOEJMAAoqPAAGY7wACio8AAZj7AAKKjwABakcAAoqPAAGSzwACio8AAZOLAAKKjwABkwMAAoqPAAGTHwACio8AAZNjAAKKjwABk28AAoqPAAGS9wACio8AAZMTAAKKjwABk0cAAoqPAAGSnwACio8AAZKrAAKKjwABkrMAAoqPAAGZRwACio8AAZKTAAKKjwABkjcAAoqPAAGSgwACio8AAZG/AAKKjwABkgMAAoqPAAGTmwACio8AAZOrAAKKjwABk7cAAoo+Y9cAAosYAAMAAk1vAAKLIwABmW8AAosmY78AAosrAAFFSwACiysAAUU/AAKLKtDbAAKLKwABRTsAAosrAAFFNwACiysAAUUzAAKLKwABRS8AAosrAAFFKwACiysAAUUnAAKLJmPXAAKLUAMAAosjAAGZcwACi1pjxwACi18AAk1vAAKLYtsXAAKLYwABmXcAAotjAAE2FwACi16V8wACi18AAUUTAAKLXwABRQ8AAote35sAAotfAAFEKwACi18AAUQvAAKLXwABRDcAAotfAAFDHwACi18AAUTfAAKLXwABRNMAAotfAAGZewACi18AAZl/AAKLXwABmYMAAotfAAGZhwACi18AAZmLAAKLXwABmY8AAotfAAGZkwACi18AAZmXAAKLXwABmZsAAotfAAGZnwACi18AAZmjAAKLXwABmacAAotfAAGZqwACi18AAZmvAAKLXwABmbMAAotfAAGZtwACi18AAZm7AAKLXwABmb8AAotfAAGZwwACi18AAZnHAAKLXwABmcsAAotfAAGZzwACi18AAZnTAAKLXwABkmMAAotaY8sAAov7AAFE8wACi/sAAZhTAAKL+wACTW8AAowHAAFTswACi/qs6wACi/oWIwACi/oWdwACi/rZIwACi/rZHwACi/rZJwACi/oX9wACi/psywACi/oW9wACi/oVWwACi/qzmwACi/rZKwACi/rZGwACi/rZFwACi/q0PwACi/rZLwACi/q0BwACi/rZMwACi/oXYwACi/oWfwACi/p7SwACi/rZPwACi/rZOwACi/rZQwACi1pjvwACjG8AAUS3AAKMbwABlVsAAoxvAAGVRwACjG8AAUPHAAKMbwABlYcAAoxvAAJNbwACjIcAAZnbAAKMhwABmeMAAoyHAAGaBwACjG8AAZVzAAKMbuQfAAKMbwABQh8AAoxvAAFCFwACjG8AAUILAAKMbwABlU8AAoxvAAFEkwACjG7czwACjG7cywACjG7cxwACjG7cwwACjG6hcwACjG8AAZUfAAKMbwABRMsAAoxvAAGVJwACjG8AAZU7AAKMbwABlXsAAoxvAAGWIwACjG8AAZUTAAKMbwABl+cAAoxvAAGFJwACjG8AAZUXAAKMbwABQi8AAoxvAAGSbwACi1pj1wACjPQAAwACTXMAAoz/AAGaFwACjQJjxwACjQcAAkvrAAKNCwABSR8AAo0CY8sAAo0SBk8AAo0CY78AAo0aD7MAAo0ac9sAAo0bAAFJMwACjRsAAUk3AAKNGwABSQsAAo0ZWwACjRsAAUkvAAKNAmPXAAKNOAMAAoz/AAFI6wACjUJjx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pEWY78AApFHAAGeCwACkUcAAZ4fAAKRRwABnicAApFHAAF3WwACkUcAAXdnAAKRRwABd2sAApEWY9cAApFgAAMAAk1/AAKRawABdWsAApFuY8cAApFzAAJNfwACkXbi5wACkXbi3wACkXcAAXWnAAKRdtsXAAKRduPXAAKRbmPLAAKRjwACTX8AApGTAAEUIwACkZLUdwACkZLBOwACkZLMEwACkW5jvwACkacAAk1/AAKRqwABnp8AApGrAAGetwACkasAAZ6/AAKRqwABnrsAApGnAAF3+wACkW5j1wACkcAAAwACTYMAApHLAAF1bwACkc5jxwACkdMAAk2DAAKR1tR3AAKR1wABFCMAApHW4tsAApHW4t8AApHW4tcAApHXAAF1pwACkdbbFwACkc5jywACkfcAAk2DAAKR+wABJQsAApH7AAFSbwACkc5jvwACkgcAAXgPAAKSBwACTYMAApIPAAGfXwACkg8AAZ9zAAKSBwABeCMAApIHAAF2nwACkc5j1wACkiAAAwACTYcAApIrAAF1cwACki5jvwACkjMAAZ/XAAKSLmPXAAKSOAADAAJNiwACkkMAAZ/rAAKSRmO/AAKSSwABn+8AApJLAAGf8wACkksAAaATAAKSSwABoBsAApJLAAGgLwACkkZj1wACkmAAAwACTY8AApJrAAF1dwACkm5jxwACknMAAaBbAAKScwACTY8AApJ7AAEUIwACknsAARQfAAKSeuLfAAKSewABU1sAApJ7AAF1rwACknsAASULAAKSewABUm8AApJ7AAF1pwACknrbFwACknrj1wACkm5jywACkqcAAk2PAAKSqsE7AAKSbmO/AAKSswABoF8AApKzAAGgYwACkrMAAXfzAAKSbmPXAAKSwAADAAJNkwACkspjwwACks8AAaCvAAKSywABoLcAApLWY8cAApLaAvcAApLaCb8AApLWY9cAApLkAwACkssAAaC7AAKS7mPHAAKS8wABoL8AApLyE8cAApLyuLcAApLuY9cAApMAAwACkssAAXV/AAKTCmPHAAKTDwABd6MAApMPAAJNkwACkxcAAaDDAAKTCmO/AAKTHwABoMcAApMfAAGgywACkx8AAaDPAAKTHwABd48AApMKY9cAApMwAwACkssAAXV7AAKTOmPHAAKTPwACTZMAApNC1HcAApNC04cAApNC4t8AApNDAAF1qwACk0MAAVNbAAKTQwABoNsAApM+v/8AApM6Y78AApNjAAF3gwACk2MAAk2TAAKTawABoOsAApNrAAGg+wACk2sAAaD3AAKTawABoO8AApM6Y9cAApN8AwACkssAAaEHAAKThmPHAAKTiwACTZMAApOO1HcAApOO04cAApOGY78AApObAAGg4wACk5prxwACk5odPwACk5rUewACk5oaMwACk5rUfwACk5oakwACk5oaUwACk5oaawACk5rUkwACk5rUlwACk5oaOwACk4Zj1wACk8wAAwACTZcAApPXAAFTIwACk9pjxwACk94erwACk98AAaEPAAKT3wABoRMAApPfAAJNlwACk+8AAaEXAAKT7wABoRsAApPvAAGhHwACk9pjywACk/8AAVWrAAKT/wABVccAApP/AAFVwwACk9pj1wAClA8AAk2XAAKUEgLUAwACTZsAApQbAAGhIwAClB5jxwAClCMAAaEnAAKUIwABVvMAApQeY78AApQuj4sAApQu79cAApQeY9cAApQ4AwAClBsAAaErAAKUQmPHAAKURgknAAKUQmPTAAKUTAMAApRCY78AApRXAAFXWwAClFcAAVdXAAKUVwABVx8AApRXAAFW7wAClFcAAaEvAAKUVwABVxsAApRWCjMAApRCY8sAApR2ZjMAApQbAAGhMwAClH5jxwAClIKUuwAClH5jvwAClIsAAVdbAAKUiwABV1cAApSLAAFXHwAClIsAAVbvAAKUigozAAKUiwABoS8AApSLAAFXGwAClH5jywAClKpmMwAClKoJJwAClH5j1wAClLQDAAKUGwABoT8AApS+Y8cAApTCEJsAApTCCScAApTDAAGhQwAClL5jywAClNMAAk2bAAKU1wABU7MAApTSZjMAApS+Y78AApTjAAFXWwAClOMAAVdXAAKU4wABVx8AApTjAAFW7wAClOMAAaEvAAKU4wABVxsAApTiCjMAApS+Y9cAApUAAwAClBsAAaFLAAKVCmPHAAKVDwABXLcAApUKY78AApUXAAFXWwAClRcAAaFPAAKVFwABV1cAApUWCjMAApUKY9cAApUoAAMAAk2fAAKVMwABoVMAApU2Y8cAApU6EJsAApU6BdsAApU2Y8sAApVHAAJNnwAClUsAAVOzAAKVNmO/AAKVUmC3AAKVUmDfAAKVUhdnAAKVUwABmLsAApVTAAGhWwAClVLvZwAClTZj1wAClWwAAwACTaMAApV3AAGXtwAClXpjxwAClX8AAVSnAAKVfwABoV8AApV+EJsAApV/AAFVbwAClX8AAaFjAAKVfwABN6cAApV+0t8AApV+yusAApV/AAJNowAClaMAASULAAKVowABUm8AApV/AAGhZwAClX8AAaFrAAKVfwABoW8AApV6Y8sAApW7AAJNowAClb7bFwAClb8AAVOzAAKVvtTjAAKVemO/AAKVzwABVMsAApXPAAGhcwAClc8AAaF7AAKVzhxbAAKVzwABoYcAApXPAAEbawAClc8AAaGrAAKVzwABoXcAApXPAAFU6wAClc8AAk2jAAKV9wABobMAApXPAAEVlwAClc8AAVRvAAKVzwABocsAApXPAAFUowAClc8AAVULAAKVzwABVrsAApXPAAFWwwAClc8AAVbXAAKVzwABod8AApXPAAFXEwAClc8AAaHnAAKVzwABVvcAApXPAAGhowAClc8AAaG/AAKVzwABVlcAApV6Y9cAApY4AwACljpaDwAClXcAAaH/AAKWRmPHAAKWSgL3AAKWSwABN6cAApZK0t8AApZKDxsAApZLAAJNowACll8AAaIDAAKWRmO/AAKWZI8AApZGY9cAApZsAAMAAk2nAAKWdwABogsAApZ6Y8cAApZ+EJsAApZ6Y8sAApaHAAJNpwAClosAAVOzAAKWemO/AAKWkwABVkMAApaTAAFWwwAClpMAAVcTAAKWkwABoisAApaTAAFXTwAClnpj1wAClqgDAAKWdwABokMAApayY8cAApa2EJsAApayY78AApa/AAFXTwAClr8AAaIrAAKWsmPXAAKWyAMAApZ3AAGiRwACltJjvwACltZgtwACltYY+wACltYZEwACltYZAwACltYZIwACltYZLwACltJj1wAClvAAAwACTasAApb7AAGiSwAClv5jxwAClwMAAVcnAAKXAml/AAKXAwABok8AApcDAAGiUwAClwKSAwAClv5j1wAClxgDAAKW+wABolcAApciY8cAApcmEJsAApcnAAGiWwAClyJjywAClzMAAk2rAAKXNwABU7MAApciY78AApc/AAGiXwAClz8AAVY3AAKXPwABonMAApc/AAGiawAClz8AAaKHAAKXPwABVysAApc/AAFX0wAClz8AAaKXAAKXPwABV+MAApc/AAJNqwACl2cAAaKTAAKXImPXAAKXbAADAAJNrwACl3cAAaK7AAKXemO/AAKXfwABor8AApd+GUsAApd+GL8AApd+GOsAApd+GQMAApd+GRMAApd+GSMAApd+GS8AApd+GUMAApd+GVMAApd+GWcAApd+GPsAApd+GXcAApd+GYMAApd+GccAApd+FeMAApd+YP8AApd+YLcAApd6Y9cAApfLAAJNrwACl84C1AMAAk2zAAKX1wABotcAApfaY78AApffAAE2jwACl95xowACl98AAUJHAAKX3qHTAAKX3wABOesAApfecb8AApfer68AApffAAFCSwACl97OBwACl98AAUI/AAKX3wABYSMAApfe0GcAApffAAFhEwACl98AAWGzAAKX3wABH1cAApffAAEepwACl98AAR9PAAKX3wABHqsAApffAAFBIwACl97QcwACl9pjywACmDLRZwACmDKUuwACl9pj1wACmDwAAwACTDMAAphHAAGi3wACmEpjxwACmE8AAkwzAAKYUwABouMAAphTAAEaOwACmEpjywACmF4JawACmF7jWwACmF2HAAKYSmO/AAKYbwABYHMAAphuzc8AAphvAAFgywACmEpj1wACmHwDAAKYRwABoucAApiGY8cAApiKD7MAApiKESMAApiLAAJMMwACmJcAAaLvAAKYlwABovMAApiXAAGi9wACmIZj0wACmKbAPwACmIZjvwACmK7AQwACmK6VbwACmK7N9wACmK6VawACmK8AAWD/AAKYrwABYNMAApiGY9cAApjIAwACmEcAAaL/AAKY0mPHAAKY1g+zAAKY1hEjAAKY1mdPAAKY0mPTAAKY5sA/AAKY0mO/AAKY7sBDAAKY0mPXAAKY9AMAAphHAAGjBwACmP5jxwACmQCfAAKZAwACTDMAApkIowACmQCnAAKZAg/PAAKZAtWjAAKZAqlDAAKY/mO/AAKZII8AApj+Y9cAApkoAwACmEcAAaMXAAKZMmPTAAKZNsA/AAKZMmO/AAKZPsBDAAKZPwABYP8AApk/AAFg0wACmT6G9wACmT7QWwACmT7QtwACmTJjywACmVpomwACmVrQbwACmVrQvwACmEcAAaMfAAKZamPHAAKZbg+zAAKZbmibAAKZbwACTDMAApl7AAGjJwACmXsAAaLzAAKZewABovcAApl6nlcAApl7AAGjKwACmW7QvwACmWpj0wACmZbAPwACmWpjvwACmZ7AQwACmZ8AAWD/AAKZnwABYNMAApmehvcAApme0FsAApmfAAFiawACmZ7QtwACmWpjywACmb7QbwACmWpj1wACmcQDAAKYRwABoy8AApnOY8cAApnSD7MAApnTAAJMMwACmdsAAaLzAAKZzmPTAAKZ4sA/AAKZzmO/AAKZ6sBDAAKZ6tC3AAKZ6tBbAAKZ6ob3AAKZ6wABYNMAApnrAAFg/wACmc5jywACmgbQbwACmgbQvwACmgZomwACmc5j1wACmhQDAAKYRwABozcAApoeY8cAApoiD7MAApoeY9MAApoqwD8AApoeY78AApoywEMAApozAAFg/wACmh5j1wACmjwDAAKYRwABoz8AAppGY8cAAppInwACmksAAkwzAAKaUKMAAppIpwACmkoPzwACmkrVowACmkqpQwACmkZjvwACmmiPAAKaRmPXAAKacAMAAphHAAGjRwACmnpj0wACmn7APwACmnpjvwACmobAQwACmnpjywACmo8AATbHAAKajhMnAAKajhQHAAKajhOHAAKajhOLAAKajnuPAAKajwABXx8AApqOuN8AApqO0IcAApqOE9sAAphHAAGjTwACmrpjxwACmr4PswACmr5omwACmr8AATbHAAKavhPbAAKavwABo1MAApq+EycAApq+FAcAApq+E4cAApq+E4sAApq+e48AApq/AAFfHwACmrpj0wACmu7APwACmrpjvwACmvbAQwACmrpjywACmv7QhwACmv643wACmrpj1wACmwgDAAKYRwABo1cAApsSY8cAApsUnwACmxcAAkwzAAKbHKMAApsUpwACmxYJuwACmxYSbwACmxZk0wACmxcAAUKvAAKbFri3AAKbFwABQrcAApsXAAGjcwACmxcAAUKzAAKbEmO/AAKbSI8AApsSY9cAAptQAwACmEcAAaN3AAKbWmPLAAKbXwABNscAAptfAAFfbwACm18AAV9XAAKbWmO/AAKbbuPrAAKbbsBDAAKbWmPTAAKbesA/AAKbWmPXAAKbgAMAAphHAAGjfwACm4pjxwACm44PzwACm48AATbHAAKbjwABX1cAApuKY78AApue4+sAApuKY9cAApukAwACmEcAAaODAAKbrmO/AAKbsq+vAAKbstB3AAKbstDbAAKbrmPXAAKbwAMAAphHAAGjhwACm8pjxwACm88AAkwzAAKb0qefAAKbymPLAAKb2wABBl8AApvKY78AApvi0HcAApvKY9cAApvoAwACmEcAAaOLAAKb8mPLAAKb9wABBl8AApvyY78AApv+0NsAApvyY9cAApwEAwACmEcAAaOPAAKcDmPHAAKcEwACTDMAApwWp58AApwOY8sAApwfAAEGXwACnA5jvwACnCbQdwACnA5j1wACnCwDAAKYRwABo5MAApw2Y78AApw60HcAApw60NsAApw2Y8sAApxHAAEGXwACnDZj1wACnEwDAAKYRwABo5cAApxWY8cAApxaD7MAApxbAAEGXwACnFsAAkwzAAKcZkoHAAKcVmPTAAKcbsA/AAKcVmO/AAKcdsBDAAKcdq+vAAKcdtB3AAKcVmPLAAKchwABX28AApxWY9cAApyMAwACmEcAAaOjAAKclmPHAAKcmg+zAAKcmwABNscAApybAAFfUwACnJsAAV9vAAKcmhMXAAKclmPTAAKcssA/AAKclmO/AAKcusBDAAKcuq+vAAKcutB3AAKcutDbAAKcuuPrAAKclmPLAAKc0wABX1cAApyWY9cAApzYAwACmEcAAaOzAAKc4mPHAAKc5wABo7cAApziY78AApzur68AApzu0HcAApzu0NsAApzu4+sAApziY8sAAp0DAAFfbwACnOJj1wACnQgDAAKYRwABo7sAAp0SY8cAAp0WD7MAAp0XAAE2xwACnRJj0wACnSLAPwACnRJjvwACnSrAQwACnRJjywACnTMAAV9XAAKdEmPXAAKdOAMAAphHAAGjwwACnUJjvwACnUb20wACnUJj1wACnUwDAAKYRwABo8cAAp1WY8cAAp1aD7MAAp1bAAJMMwACnWMAAaPPAAKdWwABQq8AAp1WY9MAAp1uwD8AAp1WY78AAp12wEMAAp129tMAAp12r68AAp120HcAAp1WY8sAAp2LAAFfbwACnVZj1wACnZADAAKYRwABo98AAp2aY8cAAp2eD7MAAp2aY9MAAp2mwD8AAp2aY78AAp2uwEMAAp2u0HcAAp2aY8sAAp27AAFfbwACnZpj1wACncADAAKYRwABo+cAAp3KY78AAp3O0H8AAp3PAAFfnwACncpj1wACndgDAAKYRwABo+sAAp3iY8cAAp3mD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qIKF+cAAqIKGBcAAqIKF2cAAqIKGE8AAqIKGEcAAqIKGD8AAqIKGB8AAqIKF9sAAqIKFyMAAqIKFy8AAqIKF1cAAqIKFoMAAqIKFvsAAqIKFwsAAqIKF0MAAqIKGIcAAqIKGI8AAqILAAGj0wACoeJj1wACoogDAAKhwwABpOsAAqKSY8cAAqKW0s8AAqKXAAGk7wACopaeCwACopJjvwACoqYjywACoqZ9UwACoqYUDwACoqcAARnzAAKiphqzAAKiphprAAKiphpTAAKipho7AAKiphozAAKiphonAAKiphpDAAKikmPXAAKi1AMAAqHDAAGk8wACot5jxwACouLSzwACot5jvwACoupgvwACouobywACouobvwACouobswACouoblwACouobfwACouobZwACouobcwACouobUwACouobPwACouobLwACouobHwACouobEwACouobBwACouoa+wACot5j1wACoygAAwACTc8AAqMyY78AAqM3AAGllwACozMAAaUDAAKjPmPHAAKjQwACTc8AAqNHAAGi4wACo0cAARo7AAKjPmPLAAKjUglrAAKjUuNbAAKjUYcAAqM+Y78AAqNi5L8AAqNjAAJNzwACo2sAAaUHAAKjawABpQsAAqNizc8AAqNjAAFgywACo2IjywACoz5j1wACo4ADAAKjMwABpQ8AAqOKY8cAAqOOESMAAqOPAAJNzwACo5cAAaLvAAKjlwABovMAAqOXAAGi9wACo4pjvwACo6cAAk3PAAKjqwABpRMAAqOrAAGlFwACo6bN9wACo6aVawACo6cAAWD/AAKjpwABYNMAAqOmI8sAAqOKY9cAAqPIAwACozMAAaUfAAKj0mPHAAKj1hEjAAKj1wACTc8AAqPfAAGlIwACo9ZnTwACo9JjvwACo+sAAWInAAKj6tCbAAKj6iPLAAKj0mPXAAKj+AMAAqMzAAGlJwACpAJjywACpAZomwACpAbQbwACpAbQvwACpAJjvwACpBcAAWujAAKkFwABYP8AAqQXAAFg0wACpBaG9wACpBbQWwACpBbQtwACpBYjywACpAJj1wACpDQDAAKjMwABpSsAAqQ+Y8cAAqRCaJsAAqRDAAJNzwACpEsAAaMnAAKkSwABovMAAqRLAAGi9wACpEqeVwACpEsAAWGXAAKkSwABoysAAqQ+Y8sAAqRm0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qh7AAFnVwACqHrydwACqHsAAWdPAAKoewABZ1MAAqh7AAFnSwACqHsAAWdHAAKoewABZ0MAAqh7AAFnPwACqHsAAWc3AAKoewABZzsAAqh7AAFRYwACqHsAAWczAAKoewABZy8AAqh7AAFnKwACqHsAAWcnAAKoewABZx8AAqh7AAFnGwACqHsAAWcXAAKoewABZxMAAqh62FMAAqh7AAFnDwACqHsAAWcLAAKoewABZwcAAqh7AAFnAwACqHsAAWb/AAKoewABZvsAAqh6wQ8AAqh7AAFm8wACqHsAAWbvAAKoewABZusAAqh7AAFm5wACqHsAAWbjAAKoewABZtsAAqh7AAFm3wACqHsAAWbXAAKoewABZtMAAqh7AAFmzwACqHsAAWbLAAKoewABZscAAqh7AAFmwwACqHsAAVHfAAKoewABZ4MAAqh7AAFnhwACqHsAAWeLAAKoewABZ48AAqh7AAFnkwACqHsAAWeXAAKoYmPXAAKpcAMAAqhfAAGl8wACqXpjxwACqX8AAkxXAAKpglp3AAKpemPTAAKpiwABOtcAAql6Y78AAqmTAAGl9wACqZLA5wACqF8AAaX7AAKpnmPHAAKpog+zAAKpowACTFcAAqmrAAFnuwACqasAAWe/AAKpqwABZ8MAAqmrAAFnxwACqasAAWfLAAKpqwABZ88AAqmrAAFn0wACqasAAWfXAAKpqwABZ9sAAqmrAAFn3wACqasAAWfjAAKpqwABZ+cAAqmrAAFn6wACqasAAWfvAAKpqwABZ/MAAqmrAAFO8wACqar02wACqasAAWf/AAKpqwABaAcAAqmrAAFoCwACqasAAUtDAAKpqvPjAAKpqsCHAAKpqwABaEsAAqmrAAFoTwACqasAAWhTAAKpqwABaFcAAqmrAAFoWwACqasAAWhfAAKpqwABaGcAAqmrAAFoawACqasAAWhvAAKpqwABaHMAAqmrAAFodwACqasAAWh7AAKpqwABaBsAAqmrAAFofwACqasAAWiDAAKpqwABaIcAAqmrAAFojwACqasAAWiLAAKpqwABaJMAAqmeY78AAqpXAAGl9wACqlbA5wACqZ5j1wACqmADAAKqYwABOtcAAqhfAAGl/wACqm5jxwACqnIPswACqnIU4wACqnKrZwACqnKrawACqm5j0wACqoQDAAKqhwABOtcAAqpuY78AAqqTAAGl9wACqm5j1wACqppWnwACqF8AAaYDAAKqomPHAAKqpg+zAAKqpg0rAAKqpgknAAKqptcfAAKqomPTAAKquwABOtcAAqqiY78AAqrDAAGl9wACqqJj1wACqsgDAAKoXwABpg8AAqrSY8cAAqrWD7MAAqrWAvcAAqrW1x8AAqrSY9MAAqrnAAE61wACqtJjvwACqu8AAaX3AAKq0mPXAAKq9AMAAqhfAAGmEwACqv5jxwACqwIPswACqwIWawACqwLZSwACqwIJJwACqv5j0wACqxcAATrXAAKq/mO/AAKrHwABpfcAAqr+Y9cAAqskAwACqF8AAaYXAAKrLmPHAAKrMg+zAAKrMhZrAAKrMtlLAAKrMgL3AAKrLmPTAAKrRwABOtcAAqsuY78AAqtPAAGl9wACqy5j1wACq1QDAAKoXwABphsAAqteY8cAAqtiD7MAAqtiFmsAAqti1x8AAqteY9MAAqtzAAE61wACq15jvwACq3sAAaX3AAKrXmPXAAKrgAMAAqhfAAGmHwACq4pjxwACq44PswACq44WawACq47ZSwACq44JJwACq47XHwACq4pj0wACq6cAATrXAAKrimO/AAKrrwABpfcAAquKY9cAAqu0AwACqF8AAaYjAAKrvmPHAAKrwg+zAAKrwhZrAAKrwtlLAAKrwgL3AAKrwtcfAAKrvmPTAAKr2wABOtcAAqu+Y78AAqvjAAGl9wACq75j1wACq+gDAAKoXwABpicAAqvyY8cAAqv2D7MAAqv20bcAAqv21x8AAqvyY9MAAqwHAAE61wACq/JjvwACrA8AAaX3AAKr8mPXAAKsFAMAAqhfAAGmKwACrB5jxwACrCIPswACrCIJJwACrCLXHwACrCISvwACrB5j0wACrDcAATrXAAKsHmO/AAKsPwABpfcAAqweY9cAAqxEAwACqF8AAaYvAAKsTmPHAAKsUg+zAAKsUmTTAAKsUgpTAAKsUtcfAAKsUhK/AAKsUhCLAAKsTmPTAAKsbwABOtcAAqxOY78AAqx3AAGl9wACrE5j1wACrHwDAAKoXwABpjMAAqyGY8cAAqyKD7MAAqyKaJsAAqyKFOMAAqyKEr8AAqyGY9MAAqyfAAE61wACrIZjvwACrKcAAaX3AAKshmPXAAKsrAMAAqhfAAGmNwACrLZjxwACrLifAAKsuwACTFcAAqzAowACrLinAAKsuwABUKMAAqy6vJcAAqy6GXMAAqy6xLcAAqy6z38AAqy7AAGmOwACrLrEUwACrLsAAVBzAAKsuwABUG8AAqy7AAFQiwACrLZjvwACrPSPAAKstmPXAAKs/AMAAqhfAAGmPwACrQZjxwACrQoPswACrQoKUwACrQoJrwACrQZj0wACrRsAATrXAAKtBmO/AAKtIwABpfcAAq0GY9cAAq0oAwACqF8AAaZDAAKtMmPHAAKtNJ8AAq03AAJMVwACrTyjAAKtNKcAAq03AAExswACrTcAATG7AAKtNwABMa8AAq03AAExtwACrTa6nwACrTcAAaZHAAKtNhWvAAKtNwABpksAAq0yY78AAq1ojwACrTJj1wACrXADAAKoXwABpk8AAq16Y8cAAq1+D7MAAq1+ZNMAAq1+1x8AAq16Y9MAAq2PAAE61wACrXpjvwACrZcAAaX3AAKtemPXAAKtnAMAAqhfAAGmUwACraZjxwACraoPswACraoKUwACraoSvwACraZj0wACrbsAATrXAAKtpmO/AAKtwwABpfcAAq2mY9cAAq3IAwACqF8AAaZXAAKt0mPHAAKt1g+zAAKt1rSbAAKt1hTjAAKt0mPTAAKt5wABOtcAAq3SY78AAq3vAAGl9wACrdJj1wACrfQDAAKoXwABplsAAq3+Y8cAAq4CD7MAAq4CCScAAq4CEr8AAq3+Y9MAAq4TAAE61wACrf5jvwACrhsAAaX3AAKt/mPXAAKuIAMAAqhfAAGmXwACripjxwACri4PswACri4XkwACri4XlwACri4QiwACri4FVwACripj0wACrkcAATrXAAKuKmO/AAKuTwABpfcAAq4qY9cAAq5UAwACqF8AAaZjAAKuXmPHAAKuYg+zAAKuYmzvAAKuYhCLAAKuYgVXAAKuXmPTAAKudwABOtcAAq5eY78AAq5/AAGl9wACrl5j1wACroQDAAKoXwABpmcAAq6OY8cAAq6SD7MAAq6SD88AAq6SCa8AAq6SFmsAAq6TAAEvawACro5j0wACrqsAATrXAAKujmO/AAKuswABpfcAAq6OY9cAAq64AwACqF8AAaZrAAKuwmPHAAKuxg+zAAKuxmz/AAKuxwABP18AAq7HAAFnIwACrsYZHwACrsJj0wACrt8AATrXAAKuwmO/AAKu5wABpfcAAq7CY9cAAq7sAAMAAk3UAwACTdsAAq77AAGmdwACrv5jywACrwMAAk3bAAKvBswTAAKvBuRDAAKvBwABYDsAAq8ClLsAAq8C0s8AAq8CrOsAAq8C2KMAAq8CG6MAAq8C0WcAAq7+Y78AAq8vAAJN2wACrzMAAaZ7AAKvMwABpoMAAq8zAAFYWwACry8AAWdHAAKvLwABZ0sAAq8vAAFnhwACry8AAWeDAAKvLwABZvsAAq8vAAFm/wACry8AAWcDAAKvLwABZ4sAAq8vAAFmwwACry8AAWbHAAKvLwABZssAAq8vAAFmzwACry8AAWbTAAKvLwABZtcAAq8vAAFm2wACry8AAWbfAAKvLwABZuMAAq8vAAFnTwACry8AAWdTAAKvLwABZ5cAAq8vAAFnfwACry7ydwACry8AAWePAAKvLwABZucAAq8vAAFm6wACry8AAWbvAAKvLwABZ3MAAq8vAAFndwACry8AAWd7AAKvLwABZ1cAAq8u8jcAAq8vAAFnXwACry8AAWdbAAKvLwABZ2MAAq8vAAFnZwACry8AAWdrAAKvLwABZ28AAq8vAAFR3wACry8AAWbzAAKvLsEPAAKvLwABZwcAAq8vAAFnCwACry8AAWcPAAKvLthTAAKvLwABZxMAAq8vAAFnFwACry8AAWcbAAKvLwABZx8AAq8vAAFnJwACry8AAWcrAAKvLwABZy8AAq8vAAFnMwACry8AAVFjAAKvLwABZzcAAq8vAAFnOwACry8AAWdDAAKvLwABZz8AAq8vAAFnkwACrv5j1wACsCgDAAKu+wABprMAArAyY8cAArA22KMAArA20s8AArA2lLsAArA3AAJN2wACsEbMEwACsEcAAaa3AAKwRwABYDsAArA2rOsAArAyY8sAArBa0WcAArBbAAJN2wACsGLkQwACsFrlawACsFrlbwACsDJj1wACsHADAAKu+wABprsAArB6Y8cAArB+2KMAArB+0s8AArB+lLsAArB/AAJN2wACsI7MEwACsI8AAWA7AAKwfqzrAAKwemPLAAKwnhujAAKwntFnAAKwnwACTdsAArCq5EMAArB6Y78AArCyI8sAArB6Y9cAArC4AwACrvsAAaa/AAKwwmPLAAKwxwACTdsAArDKzBMAArDK5EMAArDLAAFgOwACsMaUuwACsMbSzwACsMas6wACsMbYowACsMYbowACsMbRZwACsMJjvwACsPMAAk3bAAKw9wABpnsAArD3AAGmgwACsPcAAVhbAAKw8wABZ0cAArDzAAFnSwACsPMAAWeHAAKw8wABZ4MAArDzAAFm+wACsPMAAWb/AAKw8wABZwMAArDzAAFniwACsPMAAWbDAAKw8wABZscAArDzAAFmywACsPMAAWbPAAKw8wABZtMAArDzAAFm1wACsPMAAWbbAAKw8wABZt8AArDzAAFm4wACsPMAAWdPAAKw8wABZ1MAArDzAAFnlwACsPMAAWd/AAKw8vJ3AAKw8wABZ48AArDzAAFm5wACsPMAAWbrAAKw8wABZu8AArDzAAFncwACsPMAAWd3AAKw8wABZ3sAArDzAAFnVwACsPLyNwACsPMAAWdfAAKw8wABZ1sAArDzAAFnYwACsPMAAWdnAAKw8wABZ2sAArDzAAFnbwACsPMAAVHfAAKw8wABZvMAArDywQ8AArDzAAFnBwACsPMAAWcLAAKw8wABZw8AArDy2FMAArDzAAFnEwACsPMAAWcXAAKw8wABZxsAArDzAAFnHwACsPMAAWcnAAKw8wABZysAArDzAAFnLwACsPMAAWczAAKw8wABUWMAArDzAAFnNwACsPMAAWc7AAKw8wABZ0MAArDzAAFnPwACsPMAAWeTAAKwwmPXAAKx7AADAAJN3wACsfcAAabDAAKx+mPHAAKx/g9XAAKx/wACTd8AArIHAAGmxwACsfpjvwACsg8AAk3fAAKyEwABGscAArITAAGm4wACsg8AAYR7AAKyDwABhIsAArIPAAGEJwACsg8AAYR/AAKyDwABhCsAArIPAAFt2wACsg8AAW3jAAKyDwABbesAArIPAAFt8wACsg8AAW37AAKyDwABbh8AArIPAAFuJwACsg8AAW47AAKyDwABbkMAArIPAAFuSwACsg8AAW5TAAKyDwABbmsAArIPAAFugwACsg8AAW6XAAKyDwABbp8AArIPAAFupwACsg8AAW6vAAKyDwABbrsAArIPAAFuwwACsg8AAW7LAAKyDwABbtsAArIPAAFu0wACsg8AAW7nAAKyDwABbu8AArIPAAFu+wACsg8AAW8DAAKyDwABbwsAArIPAAFvEwACsg8AAac7AAKyDvl3AAKyDI8AArH6Y9cAArKsAwACsfcAAadHAAKytmPHAAKyug+zAAKyuwABTvcAArK2Y78AArLEjwACsrZj1wACsswAAwACTeMAArLWY8cAArLbAAGnmwACstsAAaefAAKy1wABp0sAArLmY8cAArLrAAGnTwACsuZjvwACsvIMLwACsvMAAQ1nAAKy5mPXAAKy/AMAArLXAAGnUwACswZjvwACswsAAQ1nAAKzBmPXAAKzEAMAArLXAAGnVwACsxpjvwACsx8AAQ1nAAKzGmPXAAKzJAMAArLXAAGnWwACsy5jvwACszMAAQ1nAAKzLmPXAAKzOAMAArLXAAGnXwACs0JjvwACs0cAAQ1nAAKzQmPXAAKzTAMAArLXAAGnYwACs1ZjvwACs1oMLwACs1Zj1wACs2ADAAKy1wABp2cAArNqY78AArNuDC8AArNqY9cAArN0AwACstcAAadrAAKzfmO/AAKzggwvAAKzgwABDWcAArN+Y9cAArOMAwACstcAAadvAAKzlmO/AAKzmwABDWcAArOWY9cAArOgAwACstcAAadzAAKzqmO/AAKzrwABDWcAArOqY9cAArO0AwACstcAAad3AAKzvmO/AAKzwgwvAAKzwwABDWcAArO+Y9cAArPMAwACstcAAad7AAKz1mO/AAKz2gwvAAKz2wABDWcAArPWY9cAArPkAwACstcAAad/AAKz7mO/AAKz8wABDWcAArPuY9cAArP4AwACstcAAaeDAAK0AmO/AAK0BwABDWcAArQCY9cAArQMAwACstcAAaeHAAK0FmO/AAK0GgwvAAK0FmPXAAK0IAMAArLXAAGniwACtCpjvwACtC4MLwACtCpj1wACtDQDAAKy1wABp48AArQ+Y8cAArRDAAGnkwACtEMAAaeXAAK0PmPLAAK0TwABDV8AArQ+Y78AArRWDC8AArRXAAENZwACtD5j1wACtGAAAwACTecAArRqY8cAArRvAAGoLwACtG8AAagzAAK0bwABqDcAArRvAAGoOwACtG8AAag/AAK0bwABqEMAArRvAAGoRwACtG8AAahLAAK0bwABqE8AArRvAAGoUwACtGpjvwACtJsAAahXAAK0mwABqFsAArSbAAGoXwACtJsAAahjAAK0mwABqG8AArRrAAEBIwACtLJjywACtLcAAQ2nAAK0twABDbsAArS22+MAArSyY78AArTHAAEK2wACtMcAAQoDAAK0xwABdLcAArTHAAEKRwACtMcAAQo7AAK0smPXAAK03AMAArRrAAGnpwACtOZjywACtOsAAQ2nAAK06wABDbsAArTq2+MAArTmY78AArT7AAEK2wACtPsAAQoDAAK0+wABdLcAArT7AAEKRwACtPsAAQo7AAK05mPXAAK1EAMAArRrAAGnqwACtRpjywACtR8AAQ2nAAK1HtvjAAK1GmO/AAK1KwABp68AArUrAAEKOwACtRpj1wACtTQDAAK0awABp7MAArU+Y8cAArVCegsAArU+Y8sAArVLAAENpwACtUsAAQ27AAK1StvjAAK1PmO/AAK1WwABCtsAArVbAAEKAwACtVsAAXS3AAK1WwABCkcAArVbAAGnrwACtVsAAQo7AAK1PmPXAAK1dAMAArRrAAGntwACtX5jywACtYMAAQ2nAAK1gtvjAAK1fmO/AAK1jwABp68AArWPAAEKOwACtX5j1wACtZgDAAK0awABp7sAArWiY8sAArWnAAENpwACtacAAQ27AAK1ptvjAAK1omO/AAK1twABCtsAArW3AAEKAwACtbcAAXS3AAK1twABCkcAArW3AAGnrwACtbcAAQo7AAK1omPXAAK10AMAArRqGjcAArXaY8sAArXfAAENpwACtd8AAQ27AAK13tvjAAK12mO/AAK17wABCtsAArXvAAEKAwACte8AAXS3AAK17wABCkcAArXvAAEKOwACtdpj1wACtgQDAAK0awABp78AArYOY8cAArYRqwACthIU4wACthMAAafDAAK2EgpDAAK2EwABp8cAArYTAAGnywACtg5jywACti8AAQ2nAAK2LwABDbsAArYu2+MAArYOY78AArY/AAEK2wACtj8AAQoDAAK2PwABdLcAArY/AAEKRwACtj8AAQo7AAK2PwABdNMAArY/AAF0zwACtj8AAXTbAAK2PwABdN8AArY/AAF0xwACtj8AAXTXAAK2PwABdMsAArY/AAGn3wACtg5j1wACtnQDAAK2dwACTecAArZ/AAGnzwACtGsAAafnAAK2hmPLAAK2ilcDAAK2hmO/AAK2kwABCi8AAraTAAEKQwACtpJaEwACtoZj1wACtqADAAK0awABp+sAAraqY8sAAravAAF0uwACtq5XAwACtq8AAQo3AAK2qmO/AAK2vwABCi8AAra/AAEKQwACtr5aEwACtr8AAafzAAK2vwABp+8AAraqY9cAArbUAwACtGsAAaf3AAK23mPLAAK24wABCjcAArbeY78AArbrAAGn8wACtusAAafvAAK23mPXAAK29AMAArRrAAGn/wACtv5jywACtwMAAQo3AAK2/mO/AAK3CwABp/MAArcLAAGn7wACtv5j1wACtxQDAAK0awABqAMAArceY8cAArchqwACtyKIIwACtyJXAwACtyMAAagHAAK3HmO/AAK3NwABdOMAArc3AAEKLwACtzcAAQpDAAK3NwABqA8AArc3AAGoCwACtzZaEwACtx5j1wACt1AAAwACTesAArdaY8MAArdfAAGocwACt18AAah3AAK3WwABqHsAArdqY8cAArdvAAJN6wACt3LMEwACt3MAAah/AAK3amO/AAK3fwABeRMAArd/AAJN6wACt4cAAR5nAAK3hwABqJcAArd+1RcAArd+9nMAArd/AAEcDwACt372TwACt372WwACt372QwACt372ZwACt38AARv/AAK3fwABHAMAArd/AAEcBwACt34XIwACt38AARwLAAK3fuafAAK3fn1TAAK3fva3AAK3fvafAAK3fvaTAAK3fh0/AAK3amPXAAK32AMAArdbAAGozwACt+JjxwACt+cAAajTAAK35wACTesAArfu1HcAArfuwTsAArfvAAFKowACt+8AAVNbAAK37wABda8AArfu5GsAArfvAAEUIwACt+8AAajfAAK37wABqOMAArfiY78AArgWHT8AArgW9pMAArgW9p8AArgXAAGpGwACuBZ9UwACuBbmnwACuBb2twACuBYXIwACuBcAAakrAAK4FwABqOsAArgXAAGo5wACuBcAAk3rAAK4RwABqPcAArhHAAGo8wACuBcAARwLAAK34mPXAAK4VAADAAJN7wACuF5jxwACuGMAAa2TAAK4YwABrZsAArhjAAGtowACuGMAAaqHAAK4YwABracAArhjAAGtqwACuF8AAalLAAK4fmPHAAK4gwACTe8AAriGzBMAAriGlEcAAriGktsAAriG49MAAriG4t8AAriG488AAriHAAEUIwACuIcAAXkPAAK4hwABqU8AAriG2xcAAriHAAGpUwACuIbj1wACuIMAAXkvAAK4gwABeSsAAriDAAGpVwACuIMAAalfAAK4gwABqWMAAriDAAGpawACuH5jvwACuNMAAalzAAK40wABFJsAArjTAAEUlwACuNMAAXknAAK40wABFFMAArjTAAGptwACuNMAAamnAAK40wABqd8AArjTAAGprwACuNMAAanbAAK40wABqbMAArh+Y9cAArkAAwACuF8AAapDAAK5CmPHAAK5DwACTe8AArkSzBMAArkS49MAArkS4t8AArkTAAEUIwACuRMAAXkPAAK5EwABqkcAArkS2xcAArkTAAF1pwACuRMAAU1XAAK5EwABqksAArkTAAGqTwACuRMAAapTAAK5EwABqlcAArkKY8sAArlLAAJN7wACuU7z6wACuU7BOwACuUsAAapbAAK5SwABql8AArlLAAGqYwACuQpjvwACuWbCjwACuWcAAXknAAK5ZherAAK5ZtX7AAK5ZwABqY8AArlnAAGrKwACuWcAAambAAK5ZwABqncAArlnAAGqswACuWcAAatrAAK5ZwABq28AArlnAAGqywACuWcAAavHAAK5ZwABnh8AArlnAAGeJwACuWcAAavPAAK5ZwABq9cAArlnAAGq0wACuWcAAarbAAK5ZwACTe8AArm3AAGsEwACuWcAAaxHAAK5ZoojAAK5ZwABquMAArlnAAGq5wACuWcAAarrAAK5ZwABqvMAArlnAAGs3wACuWcAAamrAAK5ZwABrSsAArlnAAGtMwACuWcAAa07AAK5ZwABqvsAArlnAAGrAwACuWcAAasHAAK5ZwABrUsAArlnAAGrDwACuQpj1wACufwDAAK4XwABrX8AAroGY8cAAroLAAJN7wACug8AATYbAAK6BmPLAAK6FgVXAAK6Fg7fAAK6BmO/AAK6IwABIVsAArojAAGG8wACugZj1wACuiwDAAK4XwABrYcAAro2Y8cAAro7AAGrOwACujoYtwACujZj1wACukQDAAK4XwABrYsAArpOY8cAArpTAAGO7wACulMAAY73AAK6UwABjv8AArpOY9cAArpgAwACuF8AAa2PAAK6amPHAAK6bwACTe8AArpyXYcAArpqY78AArp7AAGtJwACumpjywACuoICWwACuoLDNwACumpj1wACuowAAwACTfMAArqWY8cAArqbAAGtrwACuppVRwACupsAAX9UAwACTfcAArqqY78AArqvAAGuwwACuqsAAa2zAAK6tmPLAAK6ugL3AAK6tmO/AAK6wugvAAK6tmPXAAK6yAMAArqrAAGttwACutJjxwACutcAAk33AAK62tsXAAK62wABUm8AArrazBMAArrWkgMAArrSY8sAArrvAAJN9wACuvMAAVOzAAK60mO/AAK6+ugvAAK6+ueDAAK6+uebAAK6+ubDAAK6+uaTAAK6+wABrbsAArr7AAJN9wACuxcAAa2/AAK6+uhLAAK6+ua3AAK6+ub3AAK6+wABrcMAArr65nsAArr6xvMAArrSY9cAArs0AwACuqsAAa33AAK7PmPLAAK7QgL3AAK7PmO/AAK7SugvAAK7PmPXAAK7UAMAArqrAAGt+wACu1pjvwACu17oLwACu17ngwACu17nQwACu1pj1wACu2wDAAK6qwABrf8AArt2Y8sAArt6AvcAArt2Y78AAruC6C8AArt2Y9cAAruIAwACuqsAAa4DAAK7kmPHAAK7lwACTfcAAruazBMAAruSY78AArui6C8AArui54MAArui5zsAArui5z8AAruSY9cAAru0AwACuqsAAa4HAAK7vmPLAAK7wgL3AAK7vmO/AAK7yugvAAK7vmPXAAK70AMAArqrAAGuCwACu9pjxwACu98AAk33AAK74tsXAAK74swTAAK72mPLAAK77wACTfcAArvzAAFTswACu9pjvwACu/roLwACu/rngwACu/rnmwACu/rmewACu/rnHwACu/sAAa4PAAK72mPXAAK8FAMAArqrAAGuHwACvB5jywACvCIC9wACvB5jvwACvCroLwACvB5j1wACvDADAAK6qwABriMAArw6Y8cAArw/AAJN9wACvEMAAVOzAAK8PwABricAArw/AAGuKwACvD8AAX//AAK8OmO/AAK8VwABri8AArxW6C8AArxXAAGuMwACvFcAAa43AAK8VwABrjsAArxW55sAArxW5rcAArxW5sMAArxW5l8AArxW5pMAArxW5zcAArxW51sAArxW518AArxW528AArxW5zsAArxW50MAArxXAAGuRwACvFcAAa5LAAK8VueDAAK8VwABrk8AArw6Y9cAAryoAwACuqsAAa5jAAK8smPLAAK8tgL3AAK8smO/AAK8vugvAAK8smPXAAK8xAMAArqrAAGuZwACvM5jxwACvNMAAX//AAK80wABgAMAArzOY78AArzfAAGuLwACvN7oLwACvN8AAa5rAAK83wABrm8AArze54MAArzOY9cAArz0AwACuqsAAa6PAAK8/mPLAAK9AgL3AAK8/mO/AAK9CugvAAK8/mPXAAK9EAMAArqrAAGukwACvRpjxwACvR8AAk33AAK9IswTAAK9GmO/AAK9KugvAAK9KueDAAK9KwACTfcAAr03AAGulwACvTcAARobAAK9NwABrqcAAr03AAGuqwACvTcAAa6vAAK9KsZzAAK9Khh/AAK9GmPXAAK9VAMAArqrAAGuvwACvV5jxwACvWIC9wACvV5j1wACvWgAAwACTfsAAr1zAAGuxwACvXZjxwACvXmrAAK9egpDAAK9dmO/AAK9hI8AAr12Y9cAAr2MAwACvXMAAa7LAAK9lmPHAAK9masAAr2bAAGDbwACvZZjvwACvacAAa7XAAK9pVsAAr2nAAGu4wACvaSPAAK9lmPXAAK9uAMAAr27AAGuzwACvXMAAa7rAAK9xmPHAAK9ywABru8AAr3LAAGu8wACvcsAAa73AAK9ywABgHsAAr3LAAGAfwACvcZjvwACveIRewACveFbAAK94wABoecAAr3jAAGvAwACveMAAa8HAAK94gxzAAK94I8AAr3GY8sAAr4CBVcAAr3GY9cAAr4IAwACvXMAAa8LAAK+EmPLAAK+FgL3AAK+EmO/AAK+HugvAAK+EmPXAAK+JAMAAr1zAAGvDwACvi5jxwACvjMAAX//AAK+MwABgAMAAr4zAAGvEwACvjMAAYB7AAK+MwABgH8AAr4uY78AAr5K6C8AAr5LAAGvGwACvksAAa8jAAK+SwABrx8AAr5LAAGvJwACvkrngwACvksAAa8zAAK+LmPXAAK+aAMAAr1zAAGvNwACvnJjxwACvnYNKwACvncAAYGPAAK+cmO/AAK+gI8AAr5yY9cAAr6IAwACvXMAAa8/AAK+kmPHAAK+lwABEf8AAr6XAAFD9wACvpJjvwACvqMAAa9DAAK+owABQ/sAAr6gjwACvpJjywACvrIFVwACvpJj1wACvrgDAAK9cwABr08AAr7CY8cAAr7HAAGvUwACvscAAa9XAAK+xwABr1sAAr7HAAGvXwACvsJjvwACvtsAAYG7AAK+2mXXAAK+2wABgbcAAr7bAAGvZwACvtqIuwACvtsAAa9DAAK+2wABQ/sAAr7CY8sAAr76Ya8AAr7CY9cAAr8AAwACvXMAAa9rAAK/CmPHAAK/DhL7AAK/DwACTfsAAr8W4t8AAr8OENcAAr8PAAGvbwACvw8AAa9zAAK/DwABiYMAAr8KY78AAr8vAAGvewACvy8AAa9/AAK/LwABr4MAAr8vAAGvhwACvy8AAa+LAAK/LwABr48AAr8KY9cAAr9IAwACvXMAAa+TAAK/UmPLAAK/VgL3AAK/UmO/AAK/XugvAAK/UmPXAAK/ZAMAAr1zAAGvlwACv25jxwACv3MAAk37AAK/duLfAAK/cwABgHsAAr9zAAGAfwACv3MAAX//AAK/chL7AAK/bmO/AAK/jugvAAK/jueDAAK/jwABr6cAAr+PAAGu4wACv48AAa+zAAK/jwABr6MAAr+PAAGvnwACv25j1wACv6wAAwACTf8AAr+3AAGvtwACv7pjvwACv78AAa+7AAK/vwACTf8AAr/HAAGvvwACv7pj1wACv8wAAwACTgMAAr/XAAGvwwACv9pjxwACv94C9wACv98AAk4DAAK/5tsXAAK/5wABr8cAAr/nAAGDpwACv9pjywACv/cAAk4DAAK/+tR3AAK/+wABUm8AAr/7AAFTswACv9pjvwACwAroLwACwArngwACwArnmwACwAroRwACwAsAAa/TAALACwABr88AAsALAAGv2wACwAsAAa/fAALACwABrp8AAsAK5p8AAsALAAGv4wACwArm9wACv9pj1wACwDwAAwACTgcAAsBHAAGv+wACwEpjxwACwE8AAa//AALATm9zAALATwABsAMAAsBO31sAAsBO0WcAAsBOlQMAAsBPAAJOBwACwGsAAYOjAALASmPLAALAcgL3AALAcscbAALASmO/AALAfwABCKsAAsB/AAGwBwACwH7oLwACwH7ngwACwH8AAbALAALAfwABsA8AAsB+6DsAAsB/AAGwGwACwH7m7wACwH7mSwACwH7mawACwH7nMwACwH7nDwACwH7m8wACwH7mRwACwH7nmwACwH7m/wACwH7nNwACwH8AAk4HAALAywABsCMAAsB+5zsAAsB+50MAAsB/AAGwJwACwH8AAbArAALAfwABsC8AAsB/AAGwMwACwH8AAbAXAALAfwABsBMAAsB/AAGwNwACwH7oSwACwH7nWwACwEpj1wACwPwAAwACTgsAAsEHAAGwPwACwQpjxwACwQ8AAbBDAALBDwABsEcAAsEKY78AAsEbAAGwSwACwRsAAbBPAALBGwABsFMAAsEbAAGwVwACwRsAAbBbAALBGwABsF8AAsEbAAGwYwACwRsAAbBnAALBGwABsG8AAsEKY9cAAsFAAwACwQcAAbBzAALBSmPHAALBTgVTAALBSmO/AALBVZMAAsFWBjcAAsFWBxsAAsFWDfMAAsFWdC8AAsFXAAEp2wACwUpjywACwXKrmwACwXMAARxnAALBcquHAALBSmPXAALBgAMAAsEHAAGwdwACwYpjxwACwY8AAbB7AALBimO/AALBlZMAAsGWBjcAAsGKY9cAAsGgAwACwQcAAbB/AALBqmPHAALBrgJbAALBqmO/AALBtZMAAsG2BjcAAsG2BxsAAsG2DfMAAsG2dC8AAsG3AAEp2wACwbUjAALBtI8AAsGqY8sAAsHaDxsAAsHaq5sAAsHbAAEcZwACwdqrhwACwapj1wACwewDAALBBwABsIsAAsH2Y78AAsH5kwACwfoGNwACwfoHGwACwfp0LwACwfsAASnbAALB+I8AAsH2Y8sAAsIWq5sAAsIXAAEcZwACwfZj1wACwiADAALBBwABsJMAAsIqY78AAsItkwACwi4GNwACwi4HGwACwi50LwACwi8AASnbAALCLI8AAsIqY8sAAsJKq5sAAsJLAAEcZwACwipj1wACwlQDAALBBwABsJsAAsJeY78AAsJhkwACwmIGNwACwmIHGwACwmJ0LwACwmMAASnbAALCYI8AAsJeY8sAAsJ+q5sAAsJ/AAEcZwACwl5j1wACwogDAALBBwABsJ8AAsKSY8cAAsKW56MAAsKSY78AAsKdIwACwp2TAALCngY3AALCngcbAALCnI8AAsKSY8sAAsK2DxsAAsK2q5sAAsK3AAEcZwACwpJj1wACwsQDAALBBwABsKsAAsLOY8sAAsLTAAEcZwACws5j1wACwtgDAALBBwABsK8AAsLiY8cAAsLmFzcAAsLmFz8AAsLiY9cAAsLwAwACwQcAAbCzAALC+mO/AALC/SMAAsL+BxsAAsL9kwACwv4GNwACwvyPAALC+mPLAALDFg8bAALDFqubAALDFwABHGcAAsL6Y9cAAsMkAwACwQcAAbC7AALDLmO/AALDMSMAAsMyBxsAAsMxkwACwzIGNwACwzCPAALDLmPLAALDSg8bAALDSqubAALDSwABHGcAAsMuY9cAAsNYAwACwQcAAbDDAALDYmPHAALDZgJbAALDYmO/AALDbSMAAsNtkwACw24N8wACw24GNwACw24HGwACw2yPAALDYmPLAALDig8bAALDiqubAALDiwABHGcAAsNiY9cAAsOYAwACwQcAASNvAALDomPHAALDphpzAALDphp3AALDpgVTAALDomO/AALDtl1fAALDtl1jAALDtZMAAsO2BjcAAsO2BxsAAsO2DfMAAsO1IwACw7WPAALDtgJfAALDtgWvAALDtgW3AALDtI8AAsOiY8sAAsPqDxsAAsPqq5sAAsPrAAEcZwACw+sAAbDPAALDomPXAALD/AMAAsP/AAGwywACw/5avwACwQcAAbDXAALEDmPHAALEEwABsNsAAsQTAAGDbwACxBKVAwACxBIFUwACxBMAARsjAALEEpIDAALEDmPLAALELgL3AALEDmO/AALENugvAALENwABsOMAAsQ254MAAsQ255sAAsQ25v8AAsQ2GH8AAsQ25ncAAsQ25oMAAsQ25l8AAsQ26GMAAsQ3AAGxCwACxDcAAbEPAALENucPAALENuarAALENwABsRsAAsQ25ksAAsQ25ysAAsQ25k8AAsQ26GcAAsQ3AAGw+wACxDcAAbEjAALENwABsScAAsQ3AAGxKwACxDboVwACxDbnAwACxA5j1wACxJwDAALBBwABsTcAAsSmY8cAAsSqlQMAAsSrAAGDbwACxKoFUwACxKZjvwACxLoKfwACxLprxwACxLrm/wACxLroZwACxLrmSwACxLrnKwACxLsAAbEbAALEpmPXAALE2AADAAJODwACxOMAAbFPAALE5mPHAALE6mN7AALE6mL7AALE6wABsVMAAsTmY8sAAsT6BVcAAsT5hwACxOZjvwACxQVbAALFBl1HAALFBwABhbsAAsUGdV8AAsUGArcAAsUGXZMAAsUGXWMAAsUHAAGxWwACxOZj1wACxSgDAALE4wABsW8AAsUyY8cAAsU2AlsAAsU2DzcAAsU2DtcAAsUyY8sAAsVGDxsAAsUyY9cAAsVMAAMAAk4TAALFVmPHAALFWlhPAALFWlhTAALFWlhXAALFWgjrAALFWgjfAALFWlhbAALFWlhfAALFWgjPAALFWlhjAALFWlhnAALFWgjXAALFWgjbAALFWgi7AALFWlhrAALFWlhvAALFWlhzAALFWlh3AALFWlh7AALFWlh/AALFWliDAALFWliHAALFWliLAALFWliPAALFWliTAALFWgi/AALFWliXAALFWlibAALFWlifAALFWlijAALFWlinAALFWlirAALFWlivAALFWlizAALFWgjDAALFWli3AALFWli7AALFWli/AALFWljDAALFWljHAALFWljLAALFWljPAALFWgjHAALFWljTAALFWljXAALFWljbAALFWljfAALFWljjAALFWljnAALFWljrAALFWljvAALFWljzAALFWlj3AALFWlj7AALFWlj/AALFWlkDAALFWlkHAALFWlkLAALFWlkPAALFWlkTAALFWlkXAALFWlkbAALFWlkfAALFWlkjAALFWlknAALFWlkrAALFWlkvAALFWgjvAALFWlkzAALFWgjLAALFWlk3AALFWlk7AALFWgjzAALFWlk/AALFWgj3AALFWllDAALFWllHAALFWllLAALFWllPAALFWllTAALFWgj7AALFWllXAALFWllbAALFWllfAALFWlljAALFWllnAALFWllrAALFWllvAALFWllzAALFWll3AALFWll7AALFWll/AALFWgj/AALFWlmDAALFWlmHAALFWlmLAALFWlmPAALFWlmTAALFWlmXAALFWgkDAALFWlmbAALFWlmfAALFWlmjAALFWlmnAALFWgjTAALFWlmrAALFWgjjAALFWgjnAALFWlmvAALFWlmzAALFWlm0AwACThcAAscWY8cAAscbAAJOFwACxx8AAbF3AALHFmO/AALHJwABsXsAAscnAAGxhwACxyaAzwACxyZaBwACxycAAk4XAALHOwABsY8AAsc7AAGxmwACxzsAAbGfAALHOvlTAALHJwABsZMAAscnAAGk/AMAAk4bAALHVmPDAALHWwABsc8AAsdbAAGx0wACx1ZjxwACx2cAAk4bAALHawABse8AAsdWY78AAsdzAAJOGwACx3cAAbHzAALHVwABsdcAAsd+Y8cAAseDAAJOGwACx4cAAbHbAALHhwABsd8AAseHAAGx4wACx35jvwACx5UvAALHlgL/AALHlgKXAALHlwABEbcAAseWWjcAAseWCRsAAseWHZMAAseXAAERrwACx5YP9wACx5YCrwACx5Zl2wACx5YRewACx5ZdTwACx5ZaWwACx5azHwACx5cAARHDAALHlI8AAseXAAJOGwACx98AAbHnAALHfmPLAALH5g9XAALH5gVXAALH5g7fAALH5g2jAALH5YcAAsfkpwACx35j1wACyAADAALIAloMAwACTh8AAsgPAAGx9wACyBJjxwACyBcAAk4fAALIGwABsfsAAsgSY8sAAsghcwACyCIFVwACyCGHAALIEmO/AALIMgxzAALIEmPXAALIOAMAAsgPAAGx/wACyEJjxwACyEcAAk4fAALISwABsgMAAshCY8sAAshRewACyEJjvwACyFl3AALIQmPXAALIYAADAAJOIwACyGsAAbIHAALIbmPHAALIcwACTiMAAsh3AAGyCwACyG5jvwACyH8AAk4jAALIgwABsg8AAsh9LwACyH4C/wACyH4JGwACyH4RewACyH5dTwACyH5dWwACyG5jzwACyKGHAALIbmPLAALIqYcAAsiqfjcAAsiy6wMAAshuY9cAAsi4AAMAAk4nAALIwwABshsAAsjGY8cAAsjLAAJOJwACyM8AARH7AALIxmO/AALI1S8AAsjGY8sAAsjeDaMAAsjGY9cAAsjkAAMAAk4rAALI7mPHAALI8wACTisAAsj3AAGyHwACyPcAAbIjAALI9wABsicAAsj3AAGyKwACyPcAAbIvAALI9wABsjMAAsjuY78AAskTAAGyNwACyRMAAbJHAALJEwABsksAAskTAAGyWwACyRMAAbJnAALJEwABsmsAAskTAAGybwACyRMAAk4rAALJMwABsnMAAskzAAGyfwACyTMAAbKDAALJMwABsocAAskzAAGyiAMAAk4vAALJSmPDAALJTwABso8AAslKY8cAAslXAAJOLwACyVsAAbMnAALJSwABspMAAsliY8cAAslnAAJOLwACyWpadwACyWJj0wACyXADAALJYmO/AALJelfvAALJeg83AALJewABE6sAAslLAAGynwACyYpjxwACyY8AAk4vAALJkwABsqMAAsmTAAGypwACyYpjvwACyZ5X7wACyZ4PNwACyZ8AAROrAALJimPXAALJrAMAAslLAAGyrwACybZjvwACybpX7wACyboPNwACybsAAROrAALJtmPXAALJyAMAAslLAAGyswACydJjvwACydZX7wACydYPNwACydcAAROrAALJ0mPXAALJ5AMAAslLAAGytwACye5jxwACyfMAAk4vAALJ9wABsrsAAsnuY78AAsn+V+8AAsn+DzcAAsn/AAETqwACye5j1wACygwDAALJSwABstcAAsoWY8cAAsobAAJOLwACyh8AAbK7AALKFmO/AALKJlfvAALKJg83AALKJwABE6sAAsoWY9cAAso0AwACyUsAAbLbAALKPmPHAALKQwACTi8AAspHAAGyuwACyj5jvwACyk5X7wACyk4PNwACyj5j1wACylgDAALJSwABst8AAspiY78AAspnAAETqwACymJj1wACymwDAALJSwABsuMAAsp2Y78AAsp7AAETqwACynZj1wACyoADAALJSwABsucAAsqKY8cAAsqPAAGy6wACyo4PWwACyo4CWwACyopjywACyp4PGwACyopjvwACyqUjAALKimPXAALKrAMAAslLAAGy9wACyrZjxwACyrsAAk4vAALKvwABsu8AAsq/AAGy8wACyrZjvwACyspX7wACysoPNwACyssAAROrAALKtmPXAALK2AMAAslLAAGzBwACyuJjxwACyucAAk4vAALK6wABswsAAsriY78AAsryV+8AAsryDzcAAsrzAAETqwACyuJj1wACywADAALJSwABsxcAAssKY8cAAssPAAJOLwACyxMAAbHjAALLEwABsxsAAssKY78AAsseV+8AAsseDzcAAssfAAETqwACywpj1wACyywDAALLLm17AALJSwABsx8AAss6Y78AAss+V+8AAss+DzcAAss/AAETqwACyzpj1wACy0wAAwACTjMAAstXAAGzKwACy1pj1wACy1wDAALLXloMAwACTjcAAstrAAGzLwACy25j1wACy3ADAALLcloMAwACTjsAAst+Y78AAsuDAAGzMwACy4MAAbNDAALLgwABs0cAAsuDAAGzSwACy4MAAbNfAALLgwABs2sAAsuDAAGzeAMAAk4/AALLowABs48AAsumY8cAAsurAAJOPwACy68AAbH7AALLpmPLAALLtXMAAsumY9cAAsu8AwACy6MAAbObAALLxmPHAALLywACTj8AAsvPAAGyAwACy84jvwACy8ZjvwACy9l3AALLxmPLAALL4XsAAsvGY9cAAsvoAAMAAk5DAALL8wABs58AAsv2Y8cAAsv7AAJOQwACy/5adwACy/Zj0wACzAQDAALL9mPLAALMDYcAAswOBVcAAswODt8AAswODHsAAsv2Y78AAswiDHMAAswhWwACzCIClwACzCJ+QwACzCIRewACzCJdSwACzCIJGwACzCICtwACzCJVxwACy/MAAbOjAALMSmPHAALMTwACTkMAAsxTAAGzpwACzFLX3wACzFJ1cwACzE4ahwACzEpjvwACzGVbAALMZgKXAALMZgkbAALMZgxzAALMZhF7AALMZl1LAALMZn5DAALMZgK3AALMZlXHAALMZI8AAsxnAAJOQwACzJLTMwACzJMAAbOrAALMkwABs7MAAsyTAAGztwACzJMAAbO7AALMkwABEDsAAsxKY8sAAsyuDHsAAsyuBVcAAsyuDt8AAsythwACzEpj1wACzMAAAwACTkcAAszLAAGz5wACzM5jywACzNFzAALM0gVXAALM0g7fAALM0gx7AALM0gerAALM0gMPAALM0mODAALMzmO/AALM8lo7AALM8lpLAALM8g/3AALM8gxzAALM8lovAALM8gdbAALM8lo/AALM8lpTAALM8lpfAALM8WMAAszyBpcAAszyWm8AAszyAq8AAszyElcAAszyWlcAAszyDX8AAszyWhMAAszyWmMAAszyWmcAAszyWmsAAszyArcAAszyVccAAszxWwACzPIClwACzPIRewACzPJ+NwACzVqAuwACzVqAvwACzVqAywACzPJdTwACzPJdWwACzPIJGwACzPJaNwACzPIYuwACzPICuwACzPKAzwACzPJzCwACzPGTAALM8gVjAALM8oDnAALM8oDrAALM8nAfAALM8g2TAALM8oD/AALM8gLvAALM8oETAALM8lrXAALM8oEXAALM8nzrAALM8oEbAALM8oEfAALM8oEnAALM8I8AAszOY88AAs3KDHsAAs3KB6sAAszOY9cAAs3UAwACzMsAAbPrAALN3mPHAALN4wACTkcAAs3nAAGzpwACzecAAbPvAALN5wABs/MAAs3nAAGz9wACzd5jvwACzfsAAk5HAALN/wABs/8AAs3/AAG0LwACzf8AAbQzAALN/tMzAALN/wABEDsAAs3/AAG0PwACzf8AAbQLAALN+VsAAs36ApcAAs36WjcAAs36WlsAAs34jwACzfoQnwACzfsAAbQXAALN+n5DAALN+hi7AALN+S8AAs36Av8AAs3eY9MAAs5KWg8AAs3eY8sAAs5RhwACzd5jzwACzlmHAALN3mPXAALOYAMAAs5jAAJORwACzmoC1wACzMsAAbRLAALOcmPHAALOdwACTkcAAs56vzMAAs5yY8sAAs6DAAJORwACzocAAbPzAALOhwABs/cAAs5yY88AAs6TAAJORwACzpcAAbPzAALOlwABs/cAAs5yY9cAAs6gAAMAAk5LAALOqwABtE8AAs6uY78AAs6zAAJOTwACzrcAAbIPAALOsVsAAs6yApcAAs6yEXsAAs6yXUsAAs6yXVcAAs6yXU8AAs6yXVsAAs6yCRsAAs6uY9cAAs7cAwACzqsAAbRXAALO5mPHAALO6wACTksAAs7vAAESEwACzu8AAbRbAALO5mPLAALO+YcAAs75cwACzvsAAk5LAALPBwABtF8AAs8HAAG0YwACzuZjvwACzxIMcwACzxJdRwACzxJVxwACzuZj1wACzyADAALPIloMAwACTlMAAs8vAAG0ZwACzzJjxwACzzcAAk5TAALPOwABtGsAAs87AAESEwACzzJjywACz0Zd5wACzzJjvwACz01bAALPThF7AALPMmPXAALPWAADAAJOTwACz2MAAbRzAALPZmO/AALPawACTk8AAs9vAAGyDwACz2lbAALPagKXAALPanzrAALPaoEfAALPahF7AALPaoEbAALPahi7AALPal1PAALPal1bAALPaoDrAALPaoD/AALPagkbAALPZmPPAALPpYcAAs9mY9cAAs+sAwACz2MAAbR7AALPtmPXAALPuAMAAs9jAAG0gwACz8JjvwACz8cAAk5PAALPywABsg8AAs/FWwACz8YClwACz8Z86wACz8aBHwACz8YRewACz8aBGwACz8YYuwACz8ZdTwACz8ZdWwACz8aA6wACz8aA/wACz8YJGwACz8JjzwAC0AGHAALPwmPXAALQCAMAAs9jAAG0hwAC0BJjvwAC0BcAAk5PAALQGwABsg8AAtAVWwAC0BYClwAC0BYRewAC0BZdSwAC0BZdVwAC0BZdTwAC0BZdWwAC0BYJGwAC0BJj1wAC0EADAALPYwABtIsAAtBKY8cAAtBPAAJOTwAC0FJadwAC0Epj0wAC0FoW2wAC0Epj1wAC0GADAALPYwABtJMAAtBqY78AAtBvAAJOTwAC0HMAAbIPAALQbVsAAtBuApcAAtBuEXsAAtBuXUsAAtBuXVcAAtBuXU8AAtBuXVsAAtBuCRsAAtBqY9cAAtCYAwACz2MAAbSXAALQomO/AALQpwACTk8AAtCrAAGyDwAC0KYC/wAC0KZl2wAC0KYClwAC0KYRewAC0KYJGwAC0KJjzwAC0MYMewAC0MYHqwAC0KJj1wAC0NAAAwACTlcAAtDaY8MAAtDfAAG0nwAC0NsAAbSjAALQ5mPLAALQ6wACTlcAAtDvAAGx4wAC0OoMewAC0OoFVwAC0OoO3wAC0OlzAALQ6gerAALQ6YcAAtDqAw8AAtDmY78AAtESB1sAAtESWjcAAtESDHMAAtESWjsAAtESWi8AAtESElcAAtESWj8AAtESDX8AAtESWksAAtESD/cAAtERYwAC0RJaUwAC0RICrwAC0RJaVwAC0RJaWwAC0RJaXwAC0RJaEwAC0RJaYwAC0RJaZwAC0RJaawAC0RICtwAC0RJVxwAC0RIGlwAC0RJabwAC0RCPAALQ5mPXAALReAMAAtDbAAG0pwAC0YJjxwAC0YcAAk5XAALRiwABseMAAtGCY78AAtGSzucAAtGCY9cAAtGYAwAC0NsAAbSvAALRomO/AALRps7nAALRpS8AAtGmAv8AAtGlkwAC0aVbAALRpgKXAALRpnMLAALRplo3AALRpgkbAALRpnAfAALRpoDnAALRpgLvAALRpoETAALRpnzrAALRpoEfAALRplrXAALRpoEXAALRphF7AALRpoEbAALRphi7AALRpoDrAALRpl1PAALRpoD/AALRpl1bAALRplpbAALRpoEnAALRpg2TAALRpoDPAALRpgK7AALRpgVjAALRomPLAALSIwACTlcAAtInAAG0twAC0iJjgwAC0aJjzwAC0jIMewAC0jIHqwAC0jGHAALRomPXAALSQAMAAtDbAAG0uwAC0kpjvwAC0k7O5wAC0k1bAALSTgKXAALSTlo3AALSTgkbAALSThAfAALSTl1nAALSTl1jAALSTl1HAALSThF7AALSTl1LAALSTl1PAALSTl1XAALSTlpbAALSTl1bAALSTl1fAALSTlXHAALSSmPLAALSlwACTlcAAtKbAAG0wwAC0kpj1wAC0qADAALQ2wABtMcAAtKqY78AAtKuzucAAtKtWwAC0q4ClwAC0q8AAbQXAALSrhCfAALSrlo3AALSrgkbAALSrhF7AALSrl1PAALSrl1bAALSrlpbAALSrn5DAALSrhi7AALSqmPLAALS5wACTlcAAtLrAAG0zwAC0qpj1wAC0vADAALQ2wABtNMAAtL6Y8cAAtL/AAJOVwAC0wMAAbHjAALS+mO/AALTCs7nAALTCS8AAtMKAv8AAtMKApcAAtMLAAERtwAC0woJGwAC0wpaNwAC0wodkwAC0wsAARGvAALTCg/3AALTCgKvAALTCmXbAALTChF7AALTCl1PAALTClpbAALTCI8AAtMKsx8AAtMLAAERwwAC0vpjywAC01YPVwAC01YFVwAC01YO3wAC01YNowAC01WHAALTVKcAAtL6Y9cAAtNwAwAC0NsAAbTbAALTemO/AALTflo3AALTfwACTk8AAtOHAAGyDwAC031bAALTfgKXAALTfhF7AALTfl1LAALTfl1XAALTfl1PAALTfl1bAALTfgkbAALTemPXAALTrAMAAtDbAAG03wAC07ZjxwAC07sAAk5XAALTvwABtOMAAtO2Y8sAAtPHAAJOVwAC08sAAbHjAALTxgVXAALTxg7fAALTxYcAAtO2Y78AAtPeWjcAAtPeDHMAAtPcjwAC094QHwAC095dZwAC095dYwAC095dRwAC095aWwAC095dXwAC07Zj1wAC1AQDAALQ2wABtOsAAtQOY8cAAtQTAAJOVwAC1BcAAbTjAALUFwABtO8AAtQOY8sAAtQjAAJOVwAC1CcAAbHjAALUIgVXAALUIg7fAALUIYcAAtQOY78AAtQ6WjcAAtQ6DHMAAtQ4jwAC1DlbAALUOgKXAALUOgkbAALUOhAfAALUOl1nAALUOl1jAALUOl1HAALUOhF7AALUOl1LAALUOl1PAALUOl1XAALUOl1bAALUOlpbAALUOl1fAALUDmPXAALUgAADAAJOWwAC1Iqg6wAC1I5jywAC1JIdOwAC1JIFVwAC1JMAAbUHAALUjmO/AALUowABtQsAAtSjAAG1DwAC1KMAAbUTAALUowABtRsAAtSjAAG1HwAC1KMAAXqfAALUowABtSMAAtSjAAG1KwAC1I5j1wAC1MQDAALUiwABtTcAAtTOY8cAAtTTAAJOWwAC1NcAAbU7AALU1wABtT8AAtTWziMAAtTOY8sAAtTmHTsAAtTmBVcAAtTnAAG1BwAC1M5jvwAC1PcAAbULAALU9wABtQ8AAtT3AAGP1wAC1PcAAWpHAALU9wABtUMAAtT3AAG1RwAC1PcAAbVLAALUzmPXAALVFAMAAtSLAAG1TwAC1R5jxwAC1SCfAALVIwABtVMAAtUjAAGzhwAC1SIJZwAC1R5j1wAC1TQDAALUiwABtVcAAtU+Y8cAAtVDAAJOWwAC1UcAAYOnAALVRl3HAALVRtXfAALVRwABRHMAAtVHAAG1WwAC1T5jvwAC1V8AAk5bAALVYwABtScAAtVjAAG1ZwAC1WMAAbVrAALVYwABtV8AAtVfAAG1EwAC1T5j1wAC1XgDAALUiwABtXsAAtWCY8cAAtWHAAJOWwAC1YsAAYOnAALVhwABtTMAAtWHAAG1fwAC1YJjvwAC1ZoKfwAC1ZsAAk5bAALVowABtY8AAtWCY9cAAtWoAAMAAk5fAALVsmPHAALVtwABtk8AAtW3AAG2UwAC1bcAAbZXAALVswABtZ8AAtXGY8cAAtXLAAFEUwAC1cqvfwAC1csAAbWjAALVywABQ6cAAtXKkosAAtXLAAG1pwAC1csAAbWrAALVywABta8AAtXLAAGS4wAC1csAAZbbAALVywABRDsAAtXGY78AAtX7AAGW/wAC1fsAAk5fAALWAwABtbMAAtX7AAEuMwAC1fsAAZbfAALV+wABk6sAAtX7AAGTtwAC1fsAAZLPAALV+wABk4sAAtX7AAGTAwAC1fsAAZMfAALV+wABk2MAAtX7AAGTbwAC1fsAAZL3AALV+wABkxMAAtX7AAGTRwAC1fsAAZKfAALV+wABkqsAAtX7AAGSswAC1fsAAZObAALV+wABkpMAAtX7AAGSNwAC1fsAAbXDAALV+wABtccAAtX7AAG1ywAC1fsAAbX/AALV+wABtgMAAtX7AAG2BwAC1fsAAbYLAALV+wABtg8AAtX7AAGSgwAC1fsAAbYrAALV+wABti8AAtX61s8AAtX7AAGRvwAC1fsAAZIDAALVxmPXAALWjAADAAJOYwAC1pZjvwAC1psAAbZfAALWmwABtmwDAAJOZwAC1qcAAaZzAALWqmPHAALWrgmrAALWrwACTmcAAta3AAFO8wAC1rcAAWhXAALWtwABaF8AAta3AAFoWwAC1rcAAbZ3AALWtwABtnsAAta3AAElCwAC1rcAAbZ/AALWtwABaHsAAta2wIcAAtaqY8sAAtbiBVcAAtbjAAFRxwAC1uIfgwAC1uMAAVHTAALW4wABUdsAAtbjAAFR4wAC1uMAAU73AALW4wABUecAAtbi4z8AAtbjAAFR8wAC1uLAXwAC1qpjvwAC1xMAAWbjAALXEwABZt8AAtcTAAFm2wAC1xMAAVHfAALXEwABppMAAtcTAAGmhwAC1xMAAaaPAALXEwABposAAtcTAAG2gwAC1xLBTwAC1xCPAALWqmPXAALXQAADAAJOawAC10sAAbavAALXTmPHAALXUwACTmsAAtdXAAFO8wAC11cAAbazAALXTmO/AALXYVsAAtdjAAG2twAC12MAAba7AALXYh2TAALXYgL/AALXYS8AAtdiEXsAAtdiD/cAAtdi+XcAAtdgjwAC12MAAbbDAALXTmPLAALXkgVXAALXkg7fAALXTmPXAALXnAMAAtdLAAG22wAC16ZjvwAC16sAAbbfAALXqvl3AALXqgVXAALXpmPXAALXuAADAAJObwAC18MAAak7AALXxmPHAALXywACTm8AAtfPAAG3SwAC188AAbdPAALXxmPTAALX2AMAAtfGY78AAtfiDjsAAtfinPMAAtfjAAEnLwAC18Zj1wAC1/MAAk5vAALX9gLXAALXwwABt1MAAtf+Y8cAAtgDAAJObwAC2AZdhwAC1/5jywAC2A4CWwAC1/5jvwAC2BVbAALYFgozAALX/mPXAALYIAADAAJOcwAC2CsAAak/AALYLmPHAALYMgeXAALYMgwHAALYMwABt1sAAtgzAAG3XwAC2DIPVwAC2DMAAbdjAALYMwABt2cAAtgy+U8AAtguY78AAthXAAG3awAC2FcAAbdvAALYVovnAALYVwACTnMAAthnAAG3hwAC2FcAAbebAALYVwABt9MAAthXAAG34wAC2FcAAbgvAALYVwABuDsAAtguY9cAAtiAAwAC2CsAAbhTAALYimPHAALYjwACTnMAAtiSXYcAAtiPAAG4VwAC2I8AAbhbAALYjwABuF8AAtiPAAG4YwAC2I8AAbhnAALYimO/AALYrnS/AALYrlaLAALYrwABuG8AAtiKY9cAAti8AwAC2CsAAbh3AALYxmPHAALYyuEHAALYyvkrAALYxmPXAALY1AMAAtgrAAG4ewAC2N5jxwAC2OMAAk5zAALY5qqfAALY3mO/AALY7wACTnMAAtjzAAG4fwAC2O1bAALY7wABtBcAAtjvAAG4hwAC2O8AAbiLAALY7wABuJMAAtjuD/cAAtjvAAG3kwAC2N5j1wAC2RQDAALYKwABuJcAAtkeY8cAAtkiAq8AAtkeY78AAtkrAAE2dwAC2SkvAALZHmPLAALZNiHnAALZHmPXAALZPAADAAJOdAMAAk57AALZSwABqUMAAtlOY8cAAtlTAAJOewAC2VZadwAC2U5j0wAC2VwDAALZTmO/AALZZm3fAALZSwABuKMAAtluY8cAAtlzAAJOewAC2XcAAWOLAALZdwABuKcAAtluY78AAtmCbd8AAtmDAAG4qwAC2YMAAbivAALZgwABuLMAAtmDAAG4twAC2YJt4wAC2YMAAbi7AALZgwABuL8AAtmC1RcAAtmC9nMAAtmDAAEcDwAC2YL2TwAC2YL2WwAC2YL2QwAC2YL2ZwAC2YIdPwAC2YL2kwAC2YL2nwAC2YL2twAC2YJ9UwAC2YLmnwAC2YMAARv/AALZgwABHAMAAtmDAAEcBwAC2YMAARwLAALZghcjAALZbmPXAALZ7AMAAtlLAAG42wAC2fZjvwAC2foJrwAC2foaOwAC2frUlwAC2foaawAC2foaUwAC2foakwAC2foaMwAC2frUfwAC2fZj1wAC2hwDAALZSwABuN8AAtomY8cAAtorAAJOewAC2i8AAalTAALaLwABuOMAAtomY78AAto6bd8AAto6GjsAAto61JcAAto6GmsAAto6GlMAAto6GpMAAto6GjMAAto61H8AAto7AAJOewAC2l8AAbjrAALaJmPXAALaZAADAAJOfwAC2m5jxwAC2nMAAbj7AALabmO/AALaewABuPwDAAJOgwAC2oJjvwAC2ocAAbkPAALagg9jAALajmPHAALakgx7AALakgerAALajmPXAALanAADAAJOhwAC2qcAAbkTAALaqmO/AALarwACTocAAtqzAAGyDwAC2q5aNwAC2q4McwAC2q4QHwAC2q5aSwAC2q5dRwAC2q5aWwAC2q5aXwAC2q5abwAC2q5VxwAC2q5dXwAC2q5dYwAC2q5dZwAC2q1bAALargKXAALargkbAALarhF7AALarl1LAALarl1PAALarl1bAALarl1XAALaqmPLAALbCXMAAtsJhwAC2wsAAk5XAALbFwABseMAAtsXAAG0wwAC2qpj1wAC2yAAAwACTosAAtsqY8MAAtsvAAG5FwAC2ypjxwAC2zcAAbmjAALbNwABuasAAts3AAG5rwAC2zcAAbmzAALbNwABubcAAtsqY78AAttPAAG5uwAC208AAbm/AALbTwABucMAAttPAAG5xwAC208AAbnLAALbTwABuc8AAttPAAG50wAC208AAbnXAALbTwABudsAAttPAAG5+wAC208AAbpDAALbTwABukcAAttPAAG6ywAC2ysAAbkrAALbhmPHAALbiwACTosAAtuPAAG5MwAC24sAAbk3AALbhmO/AALbmgL/AALbmg/3AALbmS8AAtuYjwAC24Zj1wAC26wDAALbKwABuUsAAtu2Y8cAAtu6AvcAAtu7AAG5TwAC27oGuwAC27sAAblTAALbugpfAALbuwABuVcAAtu2Y9cAAtvUAwAC2ysAAblbAALb3mPHAALb4wABYfcAAtvjAAG5XwAC2+MAAbk3AALb3mO/AALb8wABuWMAAtvzAAG5awAC2/MAAbl7AALb8pbLAALb3mPXAALcBAMAAtsrAAG5fwAC3A5jvwAC3BMAAbbfAALcEgVXAALcEvl3AALcDmPXAALcIAMAAtsrAAG5gwAC3CpjvwAC3C8AAbbfAALcLgVXAALcLvl3AALcKmPXAALcPAMAAtsrAAG5hwAC3EZjxwAC3EoKXwAC3EsAAblXAALcSwACTosAAtxXAAG5iwAC3FcAAbmPAALcRmPLAALcYwABYfcAAtxjAAG5XwAC3EZjvwAC3G8AAbmTAALcbwABuZcAAtxvAAG5ewAC3EZj1wAC3HwAAwACTowDAAJOkwAC3IpjxwAC3I8AAk6TAALckwABu1MAAtyTAAG7VwAC3I8AAbtbAALcjwABu18AAtyPAAG7YwAC3I8AAbtrAALcimO/AALcrwABu3MAAtyLAAG7EwAC3LZjxwAC3LsAARELAALcuwABEQ8AAty6DYsAAty6BssAAty2Y78AAtzMjwAC3LZj1wAC3NQDAALciwABuycAAtzeY8cAAtziZDcAAtziEaMAAtzjAAJOkwAC3O8AAbsrAALc3mPTAALc9wABtsMAAtzeY78AAtz/AAJOkwAC3QMAAbtLAALc/hGnAALc/wABu08AAtzeY9cAAt0QAwAC3RJWnAMAAk6XAALdHwABu4cAAt0iY8cAAt0knwAC3ScAAk6XAALdLKMAAt0kpwAC3SYJqwAC3SZomwAC3SYRIwAC3SYPzwAC3SbyPwAC3SazHwAC3SVzAALdJXsAAt0ldwAC3ScAAbu7AALdJwABu78AAt0mBx8AAt0iY78AAt1ojwAC3SJj1wAC3XADAALdHwABOT8AAt16Y8sAAt1+Ca8AAt1+13MAAt1+YLMAAt16Y9cAAt2MAwAC3R8AAbvDAALdlmPHAALdmtLTAALdmgJbAALdmwABu8cAAt2bAAG7zwAC3ZsAAbvTAALdmwABJjMAAt2bAAG73wAC3ZsAAbvnAALdmwABu+8AAt2bAAG79wAC3ZsAAbv/AALdmwABvAcAAt2bAAG8DwAC3ZsAAbwXAALdlmPLAALd1g8bAALdlmO/AALd3SMAAt3cjwAC3d8AAbwfAALd3hyzAALdlmPXAALd8AMAAt0fAAG8PwAC3fpjxwAC3f4aSwAC3f6eLwAC3f7XcwAC3fpj0wAC3gwDAALd+mPLAALeFg8bAALeFgmvAALeFgL3AALeFmCzAALd+mO/AALeKSMAAt4ojwAC3fpj1wAC3jZWnwAC3R8AAbxLAALePmPHAALeQhpLAALeQtdzAALePmPLAALeTg8bAALeTgmvAALeTgL3AALeTmCzAALePmO/AALeYSMAAt5gjwAC3j5j1wAC3mwDAALdHwABvFMAAt52Y8cAAt56ArMAAt52Y8sAAt6C13MAAt6CDxsAAt6CCa8AAt6CAvcAAt6CYLMAAt52Y78AAt6ZIwAC3piPAALedmPXAALepAMAAt0fAAG8XwAC3q5jxwAC3rICWwAC3rIJrwAC3q5jywAC3r7XcwAC3r4PGwAC3r5gswAC3q5jvwAC3s0jAALezI8AAt6uY9cAAt7YAwAC3R8AAbxnAALe4mPHAALe5tLTAALe5gJbAALe5gKzAALe5wACTpcAAt73AAG8awAC3uYPFwAC3uJjywAC3wINiwAC3wMAAbqLAALe4mO/AALfDI8AAt7iY9cAAt8UAwAC3R8AAbx/AALfHmPLAALfIwABuWcAAt8eY78AAt8rAAG8gwAC3yoHFwAC3yoHEwAC3x5j1wAC3zgAAwACTpsAAt9DAAG8lwAC30ZjxwAC30oQ5wAC30ZjvwAC31EjAALfUI8AAt9GY8sAAt9eDxsAAt9GY9cAAt9kAAMAAk6fAALfbwABvJsAAt9yY8sAAt93AAG8nwAC33JjvwAC334jywAC337WNwAC33Jj1wAC34gAAwACTqMAAt+TAAG8qwAC35ZjxwAC35sAAk6jAALfnwABnQMAAt+eXYMAAt+WY78AAt+qI8sAAt+q1jcAAt+WY9cAAt+0AwAC35MAAbyvAALfvmPHAALfwwACTqMAAt/HAAG8swAC38cAAby3AALfxwABvLsAAt/HAAG8vwAC375jvwAC39lbAALf2wABvMcAAt/aCjMAAt++Y9cAAt/oAAMAAk6nAALf8mPHAALf9wABvcsAAt/3AAJOpwAC3/8AAb3PAALf/wABvdMAAt/zAAG8zwAC4ApjxwAC4A8AAbyfAALgCmO/AALgFtY3AALgCmPXAALgHwACTqcAAuAiAtcAAt/zAAG80wAC4CpjxwAC4C5XIwAC4CpjvwAC4DcAAbznAALgKmPXAALgPAADAAJOqwAC4EZjxwAC4EsAAb37AALgRwABvdcAAuBSY8cAAuBXAAG8nwAC4FJjvwAC4F7WNwAC4FJj1wAC4GcAAk6rAALgagLXAALgRwABvdsAAuByY8cAAuB2VyMAAuB3AAJOqwAC4H8AAb3fAALgcmO/AALghwABvOcAAuByY9cAAuCMAAMAAk6vAALglmPHAALgmwABvwMAAuCbAAJOrwAC4KMAAb3PAALglwABvf8AAuCqY8cAAuCvAAG8nwAC4KpjvwAC4LcAAViTAALgttY3AALgqmPXAALgwwACTq8AAuDGAtcAAuCXAAG+AwAC4M5jxwAC4NJXIwAC4NMAAk6vAALg2wABvd8AAuDOY78AAuDjAAJOrwAC4OcAAb4fAALg5wABviMAAuDnAAG+JwAC4OcAAb4rAALg5wABvi8AAuDnAAG+MwAC4OcAAb43AALg4wABvOcAAuDOY9cAAuEIAAMAAk6wAwACTrcAAuEXAAG/BwAC4RpjxwAC4R8AAk63AALhIl2HAALhGmPLAALhKgJbAALhGmO/AALhMVsAAuEyCjMAAuEaY9cAAuE8AAMAAk67AALhRwABvwsAAuFKY8cAAuFPAAJOuwAC4VJeRwAC4VMAAb8PAALhUwABvxMAAuFTAAG/FwAC4VMAAb8fAALhUwABvyMAAuFTAAG8vwAC4UpjywAC4XJXIwAC4UpjvwAC4XsAAbznAALheVsAAuF6CjMAAuF7AAJOuwAC4YsAAb83AALhiwABvy8AAuGLAAG/MwAC4YsAAb9jAALhSmPXAALhnAADAAJOvwAC4aZjxwAC4asAAb93AALhqwABv3sAAuGrAAG/fwAC4aZjvwAC4bsAAb+DAALhuwABv4QDAAJOwwAC4ccAAb+PAALhymPHAALhzwACTsMAAuHTAAG/kwAC4dMAAby/AALhymPLAALh3nA3AALh3ujXAALhymO/AALh6gkbAALh6VsAAuHqCjMAAuHKY9cAAuH4AAMAAk7HAALiAwABv5sAAuIGY8cAAuILAAJOxwAC4g5h+wAC4g8AAby/AALiBmPLAALiGhDnAALiGujXAALiBmO/AALiJgkbAALiJVsAAuInAAG8xwAC4iYKMwAC4gZj1wAC4jgAAwACTssAAuJCY8cAAuJHAAG/rwAC4kMAAb+rAALiTmPLAALiUiPHAALiUgfjAALiTmPXAALiXwACTssAAuJiAtQDAAJOzwAC4mpjxwAC4m5b1wAC4msAAb+/AALidmPLAALieiPHAALiegfjAALidmPXAALihwACTs8AAuKKAtQDAAJO0wAC4pMAAb/DAALilmPHAALimwACTtMAAuKeYfsAAuKfAAG8vwAC4pZjywAC4qoPxwAC4qro1wAC4pZjvwAC4rYJGwAC4rVbAALitwABvMcAAuK2CjMAAuKWY9cAAuLIAAMAAk7UAwACTtsAAuLWY8cAAuLbAAG/owAC4tZjvwAC4uMAAk7bAALi5wABv9MAAuLnAAG/4wAC4tcAAb/LAALi8mO/AALi9iPLAALi9tY3AALi8mPXAALjAwACTtsAAuMGAtcAAuLXAAG/zwAC4w5jxwAC4xMAAk7bAALjFl5HAALjDmO/AALjHVsAAuMfAAG8xwAC4x4KMwAC4w5j1wAC4ywAAwACTt8AAuM2Y8cAAuM7AAG/pwAC4zZjvwAC40MAAk7fAALjRwABwBcAAuM3AAG/6wAC405jvwAC41IjywAC41LWNwAC405j1wAC418AAk7fAALjYgLXAALjNwABv/cAAuNqY8cAAuNvAAJO3wAC43JeRwAC43MAAb/7AALjamO/AALjfwABvMcAAuN/AAHACwAC434KMwAC438AAk7fAALjjwABv/8AAuNqY9cAAuOUAwAC4zcAAcATAALjnmPHAALjowACTt8AAuOmXkcAAuOnAAG/+wAC455jvwAC47FbAALjswABvMcAAuOyCjMAAuOzAAJO3wAC48MAAb//AALjnmPXAALjyAADAAJO4wAC49JjxwAC49cAAb+3AALj0mO/AALj3wACTuMAAuPjAAG/0wAC4+MAAb/jAALj0wABwDcAAuPuY78AAuPyI8sAAuPy1jcAAuPuY9cAAuP/AAJO4wAC5AIC1wAC49MAAcA7AALkCmPHAALkDwACTuMAAuQSXkcAAuQKY78AAuQZWwAC5BsAAbzHAALkGgozAALkCmPXAALkKAADAAJO5wAC5DJjxwAC5DcAAb+7AALkNwACTucAAuQ/AAHAUwAC5DJjvwAC5EcAAk7nAALkSwABwBcAAuRLAAHAXwAC5DMAAcBDAALkVmO/AALkWiPLAALkWtY3AALkVmPXAALkZwACTucAAuRqAtcAAuQzAAHASwAC5HJjxwAC5HcAAk7nAALkel5HAALkewABv/sAAuRyY78AAuSHAAG8xwAC5IcAAcALAALkhgozAALkhwACTucAAuSXAAG//wAC5HJj1wAC5JwDAALkMwABwE8AAuSmY8cAAuSrAAJO5wAC5K5eRwAC5K8AAb/7AALkpmO/AALkuVsAAuS7AAG8xwAC5LoKMwAC5LsAAk7nAALkywABv/8AAuSmY9cAAuTQAAMAAk7rAALk2wABwG8AAuTeY8cAAuTjAAHAcwAC5OMAAk7rAALk6mH7AALk6nVzAALk3mPLAALk9wACTusAAuT7AAHAdwAC5PsAAcB7AALk9YcAAuT3AAHAqwAC5PcAAb8/AALk9qhzAALk9go/AALk3mO/AALlGS8AAuUaAv8AAuUbAAJO6wAC5SbTMwAC5ScAAbGPAALlJwABwIsAAuUnAAHAjwAC5ScAAcCfAALlJwABwIcAAuUnAAEQOwAC5ScAAcCnAALlJwABwIMAAuUZWwAC5RoClwAC5RqBHwAC5Rp86wAC5RoNkwAC5N5jzwAC5WGHAALk3mPXAALlaAMAAuTbAAHArwAC5XJjywAC5XcAAk7rAALlewABwHsAAuVyY9cAAuWAAwAC5NsAAcCzAALlimPLAALljwACTusAAuWTAAHAewAC5Ypj1wAC5ZgDAALk2wABwLcAAuWiY78AAuWnAAJO6wAC5asAAcCDAALlomPXAALlsAMAAuTbAAHAvwAC5bpjvwAC5b8AAk7rAALlwwABwIMAAuW6Y9cAAuXIAwAC5NsAAcDDAALl0mO/AALl1wACTusAAuXbAAHAgwAC5dJj1wAC5eADAALk2wABwMcAAuXqY78AAuXvAAJO6wAC5fMAAcCDAALl6mPXAALl+AMAAuTbAAHAywAC5gJjvwAC5gcAAk7rAALmCwABwIMAAuYCY9cAAuYQAwAC5NsAAcDPAALmGmO/AALmHwACTusAAuYjAAHAgwAC5hpj1wAC5igDAALk2wABwNMAAuYyY78AAuY3AAJO6wAC5jsAAcCDAALmMmPXAALmQAMAAuTbAAHA1wAC5kpjvwAC5k8AAk7rAALmUwABwIMAAuZKY9cAAuZYAwAC5NsAAcDbAALmYmO/AALmZwACTusAAuZrAAHAgwAC5mJj1wAC5nADAALk2wABwN8AAuZ6Y78AAuZ/AAJO6wAC5oMAAcCDAALmemPXAALmiAMAAuTbAAHA4wAC5pJjvwAC5pcAAk7rAALmmwABwIMAAuaSY9cAAuagAwAC5NsAAcDnAALmqmPHAALmrwACTusAAuazAAGyHwAC5qpjywAC5rsAAk7rAALmvwABwHsAAuaqY78AAubHAAJO6wAC5ssAAcCDAALmqmPXAALm0AMAAuTbAAHA6wAC5tpjywAC5t8AAk7rAALm4wABwHsAAubaY78AAubrAAJO6wAC5u8AAcCDAALm2mPXAALm9AADAAJO7wAC5v5jvwAC5wMAAcDwAnC3AALnCmPDAALnDwABwVMAAucPAAHBVwAC5w8AAcFfAALnDwABwWMAAucPAAHBZwAC5w8AAcFrAALnDwABwW8AAucPAAHBcwAC5w8AAcF3AALnDwABwXsAAucPAAHBfwAC5w8AAcGDAALnDwABwYcAAucPAAHBiwAC5w8AAcGPAALnDwABwZMAAucPAAHBlwAC5w8AAcGbAALnDwABwZ8AAucPAAHBowAC5w8AAcGnAALnDwABwasAAucPAAHBrwAC5w8AAcGzAALnDwABwbsAAucPAAHBvwAC5w8AAcHDAALnDwABwccAAucPAAHBywAC5w8AAcHPAALnDwABwdMAAucPAAHB1wAC5w8AAcHbAALnDwABwd8AAucPAAHB4wAC5w8AAcHnAALnDwABwesAAucPAAHB7wAC5w8AAcHzAALnDwABwfcAAucKY8cAAueycLcAAue3AAHJVwAC57cAAclbAALntwAByV8AAue3AAHJYwAC57cAAclnAALntwAByWsAAucKY78AAufScLcAAufXAAHJbwAC59Zx7wAC59ZxkwAC59Zx9wAC59Zx1wAC59Zx3wAC59ZyCwAC59Zx5wAC59cAAcmHAALn1wAByY8AAufXAAHJlwAC59cAAcmfAALn1wAByaMAAufXAAHJpwAC59cAAcmvAALn1wABybMAAufXAAHJtwAC59cAAcm7AALn1wAByccAAufXAAHJywAC59cAAcnPAALn1wABydcAAufXAAHJ2wAC59cAAcnjAALn1wAByecAAufXAAHJ6wAC59cAAcnvAALn1wAByfcAAufXAAHJ+wAC59cAAcn/AALn1wABygMAAufXAAHKBwAC59cAAcoLAALn1wAByg8AAufXAAHKEwAC59cAAcobAALn1wAByh8AAufXAAHKIwAC59cAAconAALn1wAByisAAufXAAHKLwAC59cAAcozAALn1wAByjcAAufXAAHKPwAC59cAAcpDAALn1wABykcAAufXAAHKSwAC59cAAcpPAALn1wABymsAAufTAAHE5wAC59IjJwAC5wpx/wAC6KZjxwAC6KpwtwAC6K8AAcH/AALoqwABwgMAAuimY78AAui7AAHCBwAC6LoHdwAC6LmrAALopmPLAALoygd7AALoywABwhsAAuimY9cAAujUAwAC5wpxpwAC6N5jxwAC6OMAAX8bAALo4wABUBcAAujjAAHCJwAC6OMAAcIrAALo4wABwi8AAujjAAHCMwAC6OMAAcI3AALo3mPLAALpAgfbAALo3mO/AALpCwABwksAAukLAAHCTwAC6QlbAALpCnG3AALpCnGvAALpCgozAALpCwABwjsAAukLAAHCPwAC6QsAAcJDAALo3mPXAALpMAMAAucLAAHCZwAC6TpjxwAC6T5wtwAC6UMAAU+3AALpOmPXAALpSAMAAucLAAHCawAC6VJjxwAC6VZwtwAC6VsAAcJvAALpUmPXAALpYAMAAucLAAHCcwAC6WpjywAC6W8AAcJ3AALpamPXAALpdAMAAucLAAHCewAC6X5jxwAC6YJwtwAC6YcAAcJ/AALphwABwoMAAumHAAHChwAC6YcAAcKLAALphwABwo8AAumHAAHCkwAC6X5jvwAC6aJwtwAC6acAAcKbAALppwABwqMAAumnAAHCqwAC6acAAcKzAALppwABwrcAAul+Y8sAAum+cLcAAunDAAHCpwAC6cMAAcKvAALpfmPXAALpzAMAAucLAAHCuwAC6dZjxwAC6dpwtwAC6d8AAcK/AALp3wABwn8AAunfAAHCgwAC6d8AAcLDAALp3wABwscAAunfAAGUZwAC6d8AAcLLAALp3wABws8AAunfAAHC0wAC6d8AAcLXAALp2wABwjsAAunbAAHCQwAC6dZjywAC6hMAAcLbAALqEwABwj8AAuoSB9sAAuoSEQMAAuoS6NcAAuoTAAHCUwAC6hMAAcJfAALqEnC3AALqMwABwu8AAuozAAHCpwAC6jMAAcLzAALqMwABwvcAAuozAAHC6wAC6hKABwAC6dZjzwAC6k8AAcLbAALqTwABwj8AAunWY78AAupacLcAAupfAAHC+wAC6l8AAcL/AALqXwABwwcAAupfAAHDDwAC6l8AAcMTAALqXwABwxsAAupfAAHDHwAC6l8AAcMjAALqXtMzAALqXwABw0cAAupfAAG//wAC6l8AAcNPAALqXwABwxcAAupZWwAC6lpxrwAC6loKMwAC6lpxtwAC6dZj1wAC6qQDAALnCwABw1cAAuquY8sAAuqycLcAAuq3AAHC9wAC6q5jvwAC6r5wtwAC6sMAAcMjAALqwwABwy8AAurDAAHDNwAC6sMAAcM/AALqrmPXAALq1AMAAucLAAHDWwAC6t5jvwAC6uJwtwAC6ucAAcMvAALq5wABwzcAAurnAAHDPwAC6t5j1wAC6vQDAALnCwABw2MAAur+Y8cAAusCcLcAAusHAAGP8wAC6v5jywAC6w5wtwAC6xMAAcNnAALq/mO/AALrGnC3AALrHwABw2sAAusfAAHDFwAC6xlbAALrGnGvAALrGgozAALq/mPXAALrNAMAAucLAAHDcwAC6z5jxwAC60IZ0wAC60ICswAC6z5jvwAC606VCwAC6z5j1wAC61QDAALnCwABw3sAAuteY8cAAuticLcAAutnAAGuuwAC615jvwAC62yPAALrXmPXAALrdAMAAucKcicAAut+Y9cAAuuCcLcAAuuGAtcAAucIDwAC645jxwAC65JwtwAC65cAAcOHAALrlwABw4sAAuuOY9MAAuugAwAC66MAAcOXAALromgvAALrogJbAALrogcfAALrowABw5sAAuuOY78AAuu/AAHDnwAC674HWwAC674P9wAC675wtwAC688AA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ALnCwABxe8AAu/yY8cAAu/2cLcAAu/6WncAAu/yY9MAAvAAAwAC8AMAAcX3AALwAwABxfsAAu/yY78AAvATAAHFfwAC8BJ7hwAC8BJaNwAC5wsAAcYbAALwImO/AALwJlo3AALwImPXAALwLAMAAucKzm8AAvA2Y9MAAvA4AwAC8DZjvwAC8EF3AALwQnKrAALwNmPLAALwTXsAAucLAAHGHwAC8FZjxwAC8FpwtwAC8F5eRwAC8FZjvwAC8GVbAALwZnGvAALwZgozAALwVmPXAALwdAMAAucLAAHGIwAC8H5jywAC8IIH2wAC8IMAAcI7AALwgwABwtsAAvCDAAHCPwAC8IMAAcJDAALwghEDAALwgujXAALwgwABwlMAAvCDAAHCXwAC8H5j0wAC8KgDAALwqwABxicAAvB+Y88AAvC3AAHCOwAC8LcAAcLbAALwtwABwj8AAvC3AAHCQwAC8H5jvwAC8MlbAALwynGvAALwygozAALwynG3AALnCwABxjMAAvDeY78AAvDhWwAC8OJxrwAC8OIKMwAC8N5j1wAC8PADAALnCwABxjcAAvD6Y78AAvD+cLcAAvEDAAHDDwAC8QMAAcMbAALxAwABwx8AAvEDAAHDEwAC8Ppj1wAC8RQDAALnCwABxjsAAvEeY9cAAvEgAwAC5wsAAcY/AALxKmPHAALxLnC3AALxMwABwr8AAvEzAAHGQwAC8TMAAcZHAALxMwABxksAAvEzAAHCwwAC8TMAAcLHAALxMwABxk8AAvEzAAGUZwAC8TMAAcLXAALxLwABwjsAAvEvAAHC2wAC8S8AAcI/AALxLwABwkMAAvEqY8sAAvFqB9sAAvFqEQMAAvFqcLcAAvF3AAHGUwAC8XcAAcZXAALxdwABwvMAAvF3AAHC9wAC8XcAAcZfAALxdnKjAALxawABwl8AAvFq6NcAAvFrAAHCUwAC8WqABwAC8SpjvwAC8aJwtwAC8acAAcZnAALxpwABxmsAAvGnAAHC+wAC8acAAcVTAALxptMzAALxpwABw0cAAvGnAAG//wAC8acAAcMPAALxpwABwxMAAvGnAAHDGwAC8acAAcMfAALxonG3AALxoVsAAvGica8AAvGiCjMAAvEqY9cAAvHkAwAC5wsAAcaHAALx7mPLAALx8nC3AALx9wABlGcAAvHuY88AAvH+cLcAA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AHL1wADCRMAAcvbAAMJEwABy+MAAwkTAAHL6wADCOpjywADCTJ+NwADCTcAAcvnAAMJMYcAAv9bAAHMiwADCUJj1wADCUQDAAMJQmO/AAMJTn43AAMJUhpfAAMJUvYfAAL/WwABzI8AAwleY9cAAwlgAwADCV5jvwADCWlbAAMJagxzAAMJal1HAAMJahF7AAMJalXHAAMJalo3AAMJalpLAAMJalpvAAMJagkbAAMJagKXAAMJal1LAAMJal1XAAMJal1PAAMJal1bAAMJahAfAAMJal1fAAMJal1jAAMJal1nAAMJagK3AAMJagKvAAMJaI8AAwlqBpcAAwlqElcAAwlqD/cAAwlqWlcAAwlqDX8AAwlqWi8AAwlpYwADCWoHWwADCWpaZwADCWpaawADCWpaEwADCWpaYwADCWpaPwADCWpaUwADCWpaXwADCWpaOwADCV5jywADCgFzAAMKAYcAAwoCBVcAAwoCDt8AAwoCAw8AAwoCDHsAAwoCB6sAAv9bAAHMmwADCiJjvwADCiZ+NwADCisAAcsfAAMKKwABzA8AAworAAHMEwADCisAAcyfAAMKKwABzBsAAwomWjcAAwomCRsAAwolWwADCiZdRwADCiYMcwADCiYRewADCiZVxwADCiJjywADCl2HAAMKXgx7AAMKXgerAAMKXXMAAwoiY9cAAwpwAwAC/1sAAcyjAAMKemPXAAMKfAMAAwp6Y78AAwqGfjcAAwqKGl8AAwqK9h8AAv9bAAHMpwADCpZjvwADCppVxwADCpp+NwADCqMAAcsfAAMKmlo3AAMKlmPXAAMKrAMAAv9bAAHMqwADCrZjxwADCrp+NwADCr8AActDAAMKvwABJxMAAwq/AAHK6wADCrZjvwADCs5+NwADCtIaXwADCtL2HwADCs4McwADCs5dRwADCs4RewADCs5aNwADCs5VxwADCrZj1wADCvADAAL/WwABtG8AAwr6Y8cAAwr+fjcAAwsC6wMAAwr6Y78AAwsKWjcAAwsJLwADCvpjywADCxWHAAMK+mPXAAMLHAMAAv9bAAEf+wADCyZjvwADCyp+NwADCy8AAcrjAAMLJmPTAAMLNAMAAws3AAE0GwADCzZaDwADCzZqewADCzcAAcVfAAMLNwABzK8AAws3AAHMswAC/1sAAcy3AAMLVmPTAAMLWAMAAwtbAAE0GwADC1paDwADC1pqewADC1ZjywADC21zAAL/WwABlycAAwt2Y78AAwt6WjcAAwt6Aq8AAwt6BpcAAwt6Wm8AAwt6ElcAAwt6WksAAwt6DHMAAwt6D/cAAwt6WlcAAwt6DX8AAwt6Wi8AAwt5YwADC3oHWwADC3oCtwADC3pVxwADC3paZwADC3paawADC3paEwADC3paYwADC3paPwADC3paUwADC3paXwADC3paOwADC3iPAAMLdmPLAAML3YcAAwveBVcAAwveDt8AAwveDHsAAwveB6sAAwveAw8AAwt2Y9cAAwv4AwAC/1pagwADDAJjvwADDAcAAcy7AAMMBwABzMsAAwwCY9cAAwwQAwAC/1sAAczPAAMMGmPHAAMMHn43AAMMIwABzNMAAwwjAAHM1wADDCMAAczbAAMMIwABx1cAAwwjAAGUZwADDBpjywADDDsAAbLTAAMMGmO/AAMMQg7XAAMMQn43AAMMSwABzN8AAwwaY9cAAwxQAwAC/1rOFwADDFpj0wADDFwDAAMMXwABNBsAAwxeWg8AAwxeansAAwxfAAHFXwADDF8AAcyvAAMMXwABzLMAAv9azi8AAwx+Y9MAAwyAAwADDIMAATQbAAMMgloPAAMMgmp7AAMMfmO/AAMMlg/3AAMMfmPLAAMMnXMAAv9bAAHM5wADDKZjxwADDKp+NwADDK8AAcq3AAMMrnVzAAMMrwABzOsAAwymY78AAwy/AAG0FwADDL1bAAMMvgKXAAMMvhF7AAMMvgkbAAMMvg/3AAMMvn43AAMM2wABzO8AAwzbAAHM9wADDKZjywADDOVzAAMM5YcAAwzmDHsAAwzmB6sAAwzmAw8AAwzmBVcAAwymY9cAAw0AAwAC/1sAAc0DAAMNCmPHAAMNDn43AAMNEl2/AAMNEwAByrcAAw0SI78AAw0TAAHCjwADDRMAAc0HAAMNCmPLAAMNKXsAAw0KY78AAw0xdwADDQpj1wADDTgDAAL/WwABzQsAAw1CY8cAAw1GfjcAAw1KXb8AAw1LAAHCjwADDUsAAcKTAAMNQmPLAAMNWg2HAAMNWg7XAAMNWnV7AAMNQmO/AAMNawABzQ8AAw1rAAHNEwADDWsAAc0XAAMNQmPXAAMNeAMAAv9bAAHNGwADDYJj1wADDYQDAAMNgmPLAAMNjXMAAw2OBVcAAw2ODt8AAw2ODHsAAw2OB6sAAw2OAw8AAw2OY4MAAw2CY78AAw2uWjsAAw2uWksAAw2uD/cAAw2uDHMAAw2uWi8AAw2uB1sAAw2uWj8AAw2uWlMAAw2uWl8AAw2tYwADDa4GlwADDa5abwADDa4CrwADDa4SVwADDa5aVwADDa4NfwADDa5aEwADDa5aYwADDa5aZwADDa5aawADDa4CtwADDa5VxwADDa1bAAMNrgKXAAMNrhF7AAMNrn43AAMOFoC7AAMOFoC/AAMOFoDLAAMNrl1PAAMNrl1bAAMNrgkbAAMNrlo3AAMNrhi7AAMNrgK7AAMNroDPAAMNrnMLAAMNrZMAAw2uBWMAAw2ugOcAAw2ugOsAAw2ucB8AAw2uDZMAAw2ugP8AAw2uAu8AAw2ugRMAAw2uWtcAAw2ugRcAAw2ufOsAAw2ugRsAAw2ugR8AAw2ugScAAw2sjwADDYJjzwADDoYMewADDoYHqwAC/1sAAcBrAAMOkmO/AAMOlwABzR8AAw6SY9cAAw6cAwAC/1p+owADDqZjywADDqlzAAMOqgVXAAMOqg7fAAMOqgx7AAMOqgerAAMOqgMPAAMOqmODAAMOpmO/AAMOylo7AAMOylpLAAMOyg/3AAMOygxzAAMOylovAAMOygdbAAMOylo/AAMOylpTAAMOylpfAAMOyWMAAw7KBpcAAw7KWm8AAw7KAq8AAw7KElcAAw7KWlcAAw7KDX8AAw7KWhMAAw7KWmMAAw7KWmcAAw7KWmsAAw7KArcAAw7KVccAAw7JWwADDsoClwADDsoRewADDsp+NwADDzKAuwADDzKAvwADDzKAywADDspdTwADDspdWwADDsoJGwADDspaNwADDsoYuwADDsoCuwADDsqAzwADDspzCwADDsmTAAMOygVjAAMOyoDnAAMOyoDrAAMOynAfAAMOyg2TAAMOyoD/AAMOygLvAAMOyoETAAMOylrXAAMOyoEXAAMOynzrAAMOyoEbAAMOyoEfAAMOyoEnAAMOyI8AAw6mY88AAw+iDHsAAw+iB6sAAw6mY9cAAw+sAwAC/1pdcwADD7ZjvwADD7sAAc0jAAMPun43AAMPwwABzScAAw/DAAHNKwADD8MAAc0vAAMPtmPXAAMP0AMAAv9bAAHNRwADD9pjywADD94NowADD94PVwADD92HAAMP3gVXAAMP3g7fAAMP3KcAAw/aY78AAw/5LwADD/oC/wADD/oRewADD/oJGwADD/paNwADD/oP9wADD/oClwADD/sAARGvAAMP+mXbAAMP+rMfAAMP+wABEcMAAw/6Aq8AAw/7AAERtwADD/pdTwADD/odkwADD/iPAAMP2mPXAAMQPAMAAv9bAAHNSwADEEZj1wADEEgDAAMQRmO/AAMQUgL/AAMQUgKXAAMQUwABEbcAAxBSCRsAAxBSEXsAAxBSXU8AAxBSZdsAAxBSsx8AAxBTAAERwwAC/1sAAc1TAAMQemPHAAMQfn43AAMQgqqfAAMQemPLAAMQiYcAAxCKBVcAAxCKDt8AAxCKDHsAAxCKAw8AAxCKB6sAAxCJcwADEHpj1wADEKgDAAL/WwABzVcAAxCyY8cAAxC2fjcAAxC7AAEz4wADELqqnwADELojvwADELJjvwADEMl3AAMQsmPLAAMQ0XsAAxCyY9cAAxDYAwAC/1sAAc1bAAMQ4mO/AAMQ5gL/AAMQ5gKXAAMQ5wABEbcAAxDmCRsAAxDmEXsAAxDmXU8AAxDmZdsAAxDmsx8AAxDnAAERwwADEOJj1wADEQwDAAL/WwABzV8AAxEWY8cAAxEafjcAAxEeqp8AAxEWY78AAxEmWjcAAxElLwADESYC/wADESYClwADESYJGwADESZl2wADESYdkwADEScAARGvAAMRJg/3AAMRJhF7AAMRJI8AAxEnAAERtwADESYCrwADESazHwADEScAARHDAAMRJl1PAAMRFmPLAAMRagVXAAMRag7fAAMRaYcAAxFqDaMAAxFopwADEWoPVwADERZj1wADEYQDAAL/WwABzWMAAxGOY9cAAxGQAwADEY5jvwADEZoC/wADEZoClwADEZsAARG3AAMRmgkbAAMRmhF7AAMRml1PAAMRmmXbAAMRmrMfAAMRmwABEcMAAv9ac4cAAxHCY78AAxHGWjcAAxHCY9cAAxHMAwAC/1p9uwADEdZjxwADEdp+NwADEd5adwADEdZj0wADEeQDAAMR5loPAAMR5mp7AAMR1mO/AAMR9wABxX8AAxH2WjcAAxH2fkMAAxH2GLsAAxH3AAG0FwADEfYQnwADEfVbAAMR9hF7AAMR9gKXAAMR9l1PAAMR9l1bAAMR9gkbAAL/WwABzWcAAxIqY8cAAxIufjcAAxIzAAHNawADEjMAAc1vAAMSKmO/AAMSPn43AAMSQlqPAAMSQwABzPcAAxIqY9cAAxJMAwAC/1sAAc1zAAMSVmPHAAMSWlnvAAMSVmO/AAMSYwABmLsAAxJiD7cAAxJiEXsAAxJjAAHNdwADEmMAAc17AAMSVmPXAAMSeAMAAv9bAAHNfwADEoJjxwADEoZ+NwADEorX3wADEoJjvwADEpJ+NwADEpcAAc2DAAMSlwABzYcAAxKXAAHNiwADEpcAAcsjAAMSkwABzXsAAxKTAAHNdwADEoJjywADErJ+NwADErZdtwADEoJj1wADErwDAAL/WwABzY8AAxLGY78AAxLLAAGYuwADEsoPtwADEsp+NwADEtcAAcsjAAMS1wABzYMAAxLKEXsAAxLGY9cAAxLkAwAC/1sAAc2TAAMS7mO/AAMS8n43AAMS9wABzYMAAxL3AAHLIwADEu5jywADEwJ+NwADEwZdtwADEu5j1wADEwwDAAL/WwABzZcAAxMWY8cAAxMafjcAAxMfAAHNmwADEx8AAcqvAAMTFmPTAAMTKloPAAMTKmp7AAMTFmO/AAMTNlo3AAMTNhCfAAMTNwABtBcAAxM1WwADEzYClwADEzYYuwADEzZ+QwADEzYRewADEzZ+NwADE1qAvwADEzZdTwADEzZdWwADEzcAAc2jAAMTNwABzZ8AAxM2CRsAAxM3AAHNpwADEzSPAAMTFmPLAAMTfYcAAxN+DHsAAxN+B6sAAxN+Aw8AAxN+BVcAAxN9cwADExZj1wADE5gDAAL/WwABzasAAxOiY8cAAxOmfjcAAxOrAAHNmwADE6sAAc2vAAMTqiO/AAMTomO/AAMTuXcAAxOiY8sAAxPBewADE6Jj1wADE8gDAAL/WwABzbcAAxPSY8cAAxPWfjcAAxPbAAGzpwADE9sAAbPvAAMT2wABs/MAAxPbAAGz9wADE9sAAcq3AAMT0mPTAAMT8loPAAMT8mp7AAMT0mO/AAMT/lo3AAMT/g/3AAMT/lo7AAMT/gK3AAMT/VsAAxP+ApcAAxP+EXsAAxP+fjcAAxQfAAHLJwADFB8AAbQvAAMUHwABtDMAAxQfAAHNuwADFB7TMwADFB8AAcsjAAMUHwABEDsAAxQfAAG0PwADFB8AAbQLAAMT/l1PAAMT/l1bAAMT/gkbAAMT/I8AAxP+EJ8AAxP/AAG0FwADE/5+QwADE/4YuwADE9JjywADFGVzAAMUZgVXAAMUZYcAAxRmDHsAAxRmB6sAAxRmAw8AAxPSY9cAAxSAAwAC/1sAAc3PAAMUimPHAAMUjn43AAMUktffAAMUkwABFl8AAxSTAAHKtwADFJMAAc3TAAMUkiO/AAMUimPLAAMUqXsAAxSKY78AAxSxdwADFIpj1wADFLgDAAL/WwABzdcAAxTCY78AAxTFWwADFMYMcwADFMZdRwADFMYRewADFMZVxwADFMZaNwADFMZaSwADFMZabwADFMYJGwADFMYClwADFMZdSwADFMZdVwADFMZdTwADFMZdWwADFMYQHwADFMZdXwADFMZdYwADFMZdZwADFMYCtwADFMYCrwADFMSPAAMUxgaXAAMUxhJXAAMUxg/3AAMUxlpXAAMUxg1/AAMUxlovAAMUxWMAAxTGB1sAAxTGWmcAAxTGWmsAAxTGWhMAAxTGWmMAAxTGWj8AAxTGWlMAAxTGWl8AAxTGWjsAAxTCY8sAAxVdcwADFV2HAAMVXgVXAAMVXg7fAAMVXgMPAAMVXgx7AAMVXgerAAMUwmPXAAMVfAMAAv9bAAHN2wADFYZj1wADFYgDAAMVhmO/AAMVkVsAAxWSDHMAAxWSXUcAAxWSEXsAAxWSVccAAxWSWjcAAxWSWksAAxWSWm8AAxWSCRsAAxWSApcAAxWSXUsAAxWSXVcAAxWSXU8AAxWSXVsAAxWSEB8AAxWSXV8AAxWSXWMAAxWSXWcAAxWSArcAAxWSAq8AAxWQjwADFZIGlwADFZISVwADFZIP9wADFZJaVwADFZINfwADFZJaLwADFZFjAAMVkgdbAAMVklpnAAMVklprAAMVkloTAAMVklpjAAMVklo/AAMVklpTAAMVklpfAAMVklo7AAMVhmPLAAMWKXMAAxYphwADFioFVwADFioO3wADFioDDwADFioMewADFioHqwAC/1pdzwADFkpjvwADFk8AAc3fAAMWSmPXAAMWVAMAAv9bAAHN4wADFl5jvwADFmJ+NwADFmZd2wADFmcAAcs3AAMWYlo3AAMWYl1nAAMWYl1jAAMWYlXHAAMWYlpLAAMWYlpvAAMWYgkbAAMWYgKXAAMWYl1LAAMWYl1XAAMWYl1PAAMWYl1bAAMWYhAfAAMWYl1fAAMWYgK3AAMWYgKvAAMWYI8AAxZiBpcAAxZiElcAAxZiD/cAAxZiWlcAAxZiDX8AAxZiWi8AAxZhYwADFmIHWwADFmJaZwADFmJaawADFmJaEwADFmJaYwADFmJaPwADFmJaUwADFmJaXwADFmJaOwADFl5jywADFvYFVwADFvYO3wADFvYDDwADFvYMewADFvYHqwADFl5j1wADFwwDAAL/WqqbAAMXFmPHAAMXGn43AAMXHqqfAAMXFmO/AAMXJn43AAMXKl3bAAMXKwAByzcAAxcmDHMAAxcmXUcAAxclWwADFyYJGwADFyYClwADFyZdSwADFyZdVwADFyZdTwADFyZdWwADFyYRewADFxZjywADF11zAAMXXYcAAxcWY9cAAxdoAwAC/1sAAc3rAAMXcmPHAAMXdg9bAAMXdhc3AAMXdhc/AAMXcmPXAAMXhAMAAv9bAAHN7wADF45jxwADF5ICWwADF45j1wADF5gDAAL/WwABzfMAAxeiY8cAAxemfjcAAxeqoFsAAxerAAHKtwADF6sAAc33AAMXomPLAAMXun43AAMXvwABuOMAAxe/AAHN+wADF78AAc3/AAMXvwAByusAAxe/AAHM6wADF78AAc4XAAMXomPPAAMX2n43AAMX3wABuOMAAxeiY78AAxfmfjcAAxfrAAHOAwADF+sAAc4HAAMX6wABzgsAAxfrAAHODwADF+sAAcsjAAMX6wABzhMAAxfrAAHOGwADF6Jj1wADGAgDAAL/WwABzh8AAxgSY78AAxgWXVMAAxgSY9cAAxgcAwAC/1sAAc4jAAMYJmPXAAMYKAMAAxgmY8sAAxgyDaMAAxgyD1cAAxgxhwADGDIFVwADGDIO3wADGDCnAAMYJmO/AAMYTS8AAxhOAv8AAxhOEXsAAxhOCRsAAxhOWjcAAxhOD/cAAxhOApcAAxhPAAERrwADGE5l2wADGE6zHwADGE8AARHDAAMYTgKvAAMYTwABEbcAAxhOXU8AAxhOHZMAAxhMjwAC/1sAAc4nAAMYkmPHAAMYln43AAMYmwABuOMAAxibAAHN+wADGJsAAc3/AAMYmwAByusAAxiSY9MAAxiuWg8AAxiuansAAxivAAHFXwADGK8AAcyvAAMYkmO/AAMYwn43AAMYxwABzgMAAxjBLwADGMIRewADGMIC/wADGMJl2wADGMIClwADGMIP9wADGMIJGwADGMIdkwADGMMAARGvAAMYwwABzjcAAxjDAAHOOwADGMMAAc4/AAMYwwABzkMAAxiSY8sAAxkCBVcAAxkCDt8AAxkBhwADGQINowADGQCnAAMYkmPXAAMZGAMAAxkafjcAAxkiGc8AAv9bAAHORwADGSpjxwADGS5+NwADGTMAAc5LAAMZMwABzk8AAxkzAAHKtwADGTMAAc33AAMZMwABzlMAAxkqY8sAAxlJewADGSpjvwADGVJ+NwADGVcAAc5XAAMZVwABzmcAAxlXAAHOYwADGVF3AAMZKmPXAAMZaAMAAxlrAAHOWwAC/1sAAc5rAAMZdmPHAAMZen43AAMZfwABzksAAxl2Y8sAAxmFhwADGYYFVwADGYVzAAMZdmO/AAMZllXHAAMZdmPXAAMZnAMAAv9bAAHOcwADGaZjxwADGap+NwADGa6qnwADGaZjywADGbWHAAMZtgVXAAMZtXMAAxmmY9cAAxnEAwAC/1sAAc53AAMZzmO/AAMZ0n43AAMZ1wABzmMAAxnOY9cAAxncAwAC/1sAAc57AAMZ5mO/AAMZ6n43AAMZ7wABzmMAAxnmY9cAAxn0AwAC/1sAAc6DAAMZ/mO/AAMaAn43AAMaBwABzmMAAxn+Y9cAAxoMAwADGg8AAc5bAAL/WwABzocAAxoaY9cAAxocAwADGhpjvwADGiZaNwADGiYCrwADGiYGlwADGiZabwADGiYSVwADGiZaSwADGiYMcwADGiYP9wADGiZaVwADGiYNfwADGiZaLwADGiVjAAMaJgdbAAMaJgK3AAMaJlXHAAMaJlpnAAMaJlprAAMaJloTAAMaJlpjAAMaJlo/AAMaJlpTAAMaJlpfAAMaJlo7AAMaJI8AAxoaY8sAAxqJhwADGooFVwADGooO3wADGooMewADGooHqwADGooDDwAC/1sAAc6LAAMapmPXAAMaqAMAAxqmY78AAxqxWwADGrIMcwADGrJdRwADGrIRewADGrJVxwADGrJaNwADGrJaSwADGrJabwADGrIJGwADGrIClwADGrJdSwADGrJdVwADGrJdTwADGrJdWwADGrIQHwADGrJdXwADGrJdYwADGrJdZwADGrICtwADGrICrwADGrCPAAMasgaXAAMashJXAAMasg/3AAMaslpXAAMasg1/AAMaslovAAMasWMAAxqyB1sAAxqyWmcAAxqyWmsAAxqyWhMAAxqyWmMAAxqyWj8AAxqyWlMAAxqyWl8AAxqyWjsAAxqmY8sAAxtJcwADG0mHAAMbSgVXAAMbSg7fAAMbSgMPAAMbSgx7AAMbSgerAAL/WwABzo8AAxtqY8cAAxtufjcAAxtzAAG44wADG3MAAc37AAMbcwABzf8AAxtzAAHK6wADG2pj0wADG4ZaDwADG4ZqewADG2pjvwADG5J+NwADG5Zd2wADG5cAAc4DAAMblsMHAAMblwABzm8AAxuSWjcAAxuSDHMAAxuRWwADG5IRewADG5IClwADG5JdSwADG5JdVwADG5JdRwADG5JdYwADG5JdZwADG5JdXwADG5IJGwADG5JVxwADG5CPAAMbamPLAAMb4XMAAxvhhwADG+IFVwADG+IO3wADG+IMewADG+IHqwADG+IDDwADG2pj1wADHAAAAwACTvMAAxwKY8cAAxwPAAGIQwADHA8AAk7zAAMcFwAB1w8AAxwXAAHXGwADHBcAAdcjAAMcFwABu1MAAxwXAAG7VwADHBcAAdcnAAMcFwAB1ysAAxwXAAHXLwADHBcAAdczAAMcFwAB1zcAAxwXAAHXOwADHBcAAdc/AAMcFwAB10MAAxwPAAHXEwADHA8AAdcXAAMcDwAB1x8AAxwOCZMAAxwPAAHUcwADHA5WEwADHA6BbwADHAwTAAMcCmO/AAMcbwACTvMAAxxzAAHXRwADHHMAAddbAAMccwAB118AAxxzAAHXYwADHHMAAddnAAMccwAB12sAAxxzAAHXcwADHG8AAddPAAMcbwAB11MAAxxvAAHXVwADHG4iewADHG4idwADHAsAAc8LAAMcpmPHAAMcqwACTvMAAxyvAAHPDwADHK8AAc8TAAMcpmO/AAMcuiPLAAMcutY3AAMcpmPXAAMcxAMAAxwLAAHPGwADHM5jvwADHNMAAc8fAAMc0wABzyMAAxzTAAHPJwADHNMAAc8rAAMc0wABzy8AAxzStJcAAxzTAAHPMwADHNMAAc83AAMc0wABzzsAAxzTAAHPPwADHNMAAc9DAAMczmPLAAMdAgXbAAMczmPXAAMdCAMAAxwLAAHPRwADHRJjxwADHRaE7wADHRcAAYATAAMdFg9bAAMdFgJbAAMdEmO/AAMdKwABz0sAAx0rAAHPTwADHSsAAc8fAAMdKwABzyMAAx0rAAHPJwADHSsAAc8rAAMdKwABzy8AAx0qtJcAAx0rAAHPMwADHSsAAc83AAMdKwABzzsAAx0rAAHPPwADHSsAAc9DAAMdEmPLAAMdYgXbAAMdEmPXAAMdaAMAAxwLAAHPUwADHXJjxwADHXcAAc9XAAMdcmO/AAMdfwABzz8AAx1/AAHPMwADHXJjywADHYoF2wADHXJj1wADHZADAAMcCwABz1sAAx2aY8cAAx2fAAHPXwADHZ8AAc9jAAMdng2HAAMdnYcAAx2aY8sAAx2zAAGxVwADHZpjvwADHbsAAk7zAAMdvwABz2cAAx27AAHPawADHbsAAYSXAAMduwABz28AAx27AAHPcwADHZpj1wADHdQDAAMcCwABz3cAAx3eY8cAAx3jAAHPewADHeMAAc9/AAMd4wABz4MAAx3jAAHPhwADHeMAAc+LAAMd4wABz48AAx3jAAHPkwADHeMAAc+XAAMd4wABz5sAAx3i3LMAAx3jAAHPnwADHeMAAc+jAAMd4wABz6cAAx3jAAHPqwADHeMAAc+vAAMd4wABz7MAAx3jAAHPtwADHeMAAc+7AAMd4wABz78AAx3jAAHPwwADHeMAAc/HAAMd4wABz8sAAx3jAAHPzwADHeMAAc/TAAMd4wABz9cAAx3jAAHP2wADHeMAAc/fAAMd4wABz+MAAx3iZrsAAx3jAAHP5wADHeJ4ywADHeJ4OwADHeJ4owADHeMAAc/rAAMd4nj7AAMd4wABz+8AAx3jAAHP8wADHeJ4NwADHeMAAc/3AAMd4wABz/sAAx3ieTMAAx3jAAHP/wADHeMAAdADAAMd4wAB0AcAAx3jAAHQCwADHeMAAdAPAAMd4wAB0BMAAx3jAAHQFwADHeMAAdAbAAMd4wAB0B8AAx3jAAHQIwADHeMAAdAnAAMd4wABiNsAAx3jAAGI3wADHeMAAdArAAMd4wAB0C8AAx3jAAHQMwADHeMAAdA3AAMd4wAB0DsAAx3jAAHQPwADHeMAAdBDAAMd4wAB0EcAAx3jAAHQSwADHeMAAdBPAAMd4wAB0FMAAx3jAAHQVwADHeMAAdBbAAMd4wAB0F8AAx3jAAHQYwADHeMAAdBnAAMd4wAB0GsAAx3jAAHQbwADHeMAAdBzAAMd4wAB0HcAAx3jAAHQewADHeMAAdB/AAMd4wAB0IMAAx3jAAHQhwADHeMAAdCLAAMd4wAB0I8AAx3jAAHQkwADHeKodwADHeIJSwADHeMAAZaLAAMd4wAB0JcAAx3iCj8AAx3eY78AAx8/AAHQmwADHz8AAdCfAAMfPgozAAMfPwAB0LMAAx8/AAHQtwADHz8AAdC7AAMfPwAB0L8AAx8/AAHQwwADHz8AAdDHAAMfPwABhJcAAx8/AAHPbwADHz8AAc9zAAMfPwAB0MsAAx8/AAHQ0wADHz8AAdDPAAMfPwAB0NcAAx8/AAHQ6wADHz4MLwADHz8AAdEPAAMfPwAB0QsAAx8/AAHRBwADHz8AAdEXAAMfPwAB0QMAAx8/AAHRJwADHz8AAdDnAAMfPwAB0N8AAx8/AAHQ4wADHz8AAdE/AAMfPwAB0UMAAx8/AAHQ2wADHz8AAdCrAAMfPwAB0RMAAx8+BxMAAx3eY8sAAx/GBdsAAx/HAAHPFwADH8a1QwADHd5jzwADH9a1QwADHd5j1wADH9wDAAMcCwAB0dMAAx/mY8cAAx/qtUMAAx/rAAHPFwADH+ZjvwADH/cAAdCzAAMf9wABhJcAAx/3AAHQuwADH/cAAdDDAAMf9wAB0L8AAx/3AAHQxwADH/cAAdC3AAMf9wABz3MAAx/mY9cAAyAYAwADHAsAAdHXAAMgImPHAAMgJwACTvMAAyArAAHR2wADICsAAc8PAAMgKl5HAAMgImO/AAMgOwACTvMAAyA/AAHR3wADIDsAAbzHAAMgOVsAAyA6CjMAAyA7AAHACwADICJj1wADIFQDAAMcCwAB0eMAAyBeY8cAAyBjAAHR5wADIGMAAdHrAAMgYwAB0e8AAyBjAAHR8wADIGMAAdH3AAMgYwAB0CsAAyBjAAHR+wADIGMAAdH/AAMgYwAB0gMAAyBjAAHSBwADIGMAAdILAAMgYwAB0g8AAyBjAAHSEwADIGMAAdIXAAMgYwAB0hsAAyBjAAHSHwADIGMAAdIjAAMgYwAB0icAAyBjAAHSKwADIGMAAdIvAAMgYgo/AAMgYYcAAyBjAAHQlwADIGMAAdIzAAMgYhy3AAMgXmO/AAMgywAB0jcAAyDLAAHSQwADIMsAAk7zAAMg1wAB0l8AAyDXAAEQOwADIMsAAbzHAAMgyI8AAyBeY9cAAyDoAwADHAsAAdJzAAMg8mPHAAMg9hy3AAMg9rVDAAMg9wABzxcAAyDyY78AAyEHAAHQswADIQcAAYSXAAMhBwAB0LsAAyEHAAHQwwADIQcAAdC/AAMhBwAB0McAAyEHAAHQtwADIQcAAc9zAAMg8mPXAAMhKAMAAxwLAAHSdwADITJjxwADITcAAk7zAAMhOwAB0dsAAyE6XkcAAyEyY78AAyFHAAJO8wADIUsAAdHfAAMhSwAB0nsAAyFHAAG8xwADIUVbAAMhRgozAAMhMmPXAAMhYAMAAxwLAAHSfwADIWpjxwADIW8AAk7zAAMhcwAB0oMAAyFqY8sAAyF6AvcAAyF6I8cAAyF6B+MAAyFqY78AAyGKVosAAyGKHLMAAyFqY9cAAyGUAwADHAsAAdKPAAMhnmPHAAMhowACTvMAAyGnAAHSkwADIZ5jvwADIa4jywADIa7WNwADIa57hwADIZ5j1wADIbwDAAMcCwAB0p8AAyHGY9cAAyHIAwADHAsAAdKjAAMh0mPHAAMh1wACTvMAAyHaXkcAAyHbAAHSkwADIdJjvwADIeYKMwADIecAAbzHAAMh0mPXAAMh8AMAAxwLAAHSqwADIfpjxwADIf8AAk7zAAMiAwAB0oMAAyIDAAHSkwADIfpjvwADIg4jywADIg8AAk7zAAMiFwAB0rMAAyIO1jcAAyIOe4cAAyH6Y9cAAyIkAwADHAsAAdK3AAMiLmO/AAMiMtY3AAMiLmPXAAMiOAMAAxwLAAHSvwADIkJjxwADIkcAAk7zAAMiSwAB0sMAAyJCY78AAyJSCjMAAyJRWwADIlMAAbzHAAMiQmPXAAMiYAMAAxwLAAHSxwADImpjxwADIm8AAk7zAAMicl5HAAMiamO/AAMiegozAAMieVsAAyJ7AAG8xwADImpj1wADIogDAAMcCwAB0s8AAyKSY8cAAyKXAAJO8wADIpsAAU0DAAMikmPLAAMioiPHAAMiogfjAAMikmO/AAMirhyzAAMirlq/AAMirwACTvMAAyK7AAHS+wADIpJj1wADIsADAAMiwwAB0tMAAxwLAAHTEwADIs5jxwADItMAAk7zAAMi1wAB0xcAAyLOY78AAyLeI8sAAyLe1jcAAyLOY9cAAyLoAwADIusAAdLTAAMcCwAB0xsAAyL2Y8cAAyL7AAJO8wADIv8AAdMfAAMi/wAB0yMAAyL/AAHTKwADIv8AAdMvAAMi/wAB0zMAAyL/AAGUZwADIv8AAdM3AAMi9mO/AAMjHwACTvMAAyMjAAHTOwADIyMAAdM/AAMjIwAB00MAAyMfAAHTRwADIx5WiwADIx8AAdNTAAMjHwAB02cAAyL2Y9cAAyNAAwADHAsAAdNrAAMjSmPHAAMjTwAB028AAyNKY78AAyNXAAHTRwADI0pj1wADI1wDAAMcCwAB03MAAyNmY78AAyNpWwADI2oKMwADI2sAAbzHAAMjawACTvMAAyN60zMAAyNmY9cAAyOAAwADHAsAAdN3AAMjimPHAAMjjwACTvMAAyOSXkcAAyOTAAFNAwADI4pjvwADI58AAk7zAAMjotMzAAMjimPXAAMjqAMAAxwLAAHTewADI7JjxwADI7cAAk7zAAMjul5HAAMjuwABTQMAAyOyY78AAyPHAAJO8wADI8rTMwADI7Jj1wADI9ADAAMcCwAB038AAyPaY78AAyPeI8sAAyPe1jcAAyPaY9cAAyPoAwADHAsAAdODAAMj8mPHAAMj9wACTvMAAyP7AAHTKwADI/sAAdMvAAMj+wAB04cAAyP7AAHTiwADI/sAAWDXAAMj+wAB048AAyP7AAHTkwADI/sAAdOXAAMj+wAB05sAAyP7AAHTnwADI/sAAZRnAAMj8mO/AAMkKwACTvMAAyQvAAHTowADJC8AAdNDAAMkLwAB0z8AAyQvAAHTpwADJC8AAdOvAAMkLwAB07MAAyQvAAHT0wADJC8AAdPfAAMkLwAB0vsAAyQqHLMAAyQqCjMAAyQrAAHTvwADI/Jj1wADJGADAAMcCwAB0+8AAyRqY8cAAyRvAAJO8wADJHJeRwADJHMAAdPzAAMkamO/AAMkfVsAAyR+CjMAAyR/AAG8xwADJGpj1wADJIwDAAMcCwAB0/cAAySWY8cAAySbAAJO8wADJJ5adwADJJZj0wADJKcAAdP7AAMkploPAAMklmO/AAMkswABvMcAAySWY9cAAyS4AwADHAsAAdP/AAMkwmO/AAMkxVsAAyTGCjMAAyTHAAG8xwADJMJj1wADJNQDAAMcCwAB1AMAAyTeY8cAAyTjAAJO8wADJOZeRwADJN5jvwADJO1bAAMk7gozAAMk3mPXAAMk+AMAAxwLAAHUBwADJQJjxwADJQcAAk7zAAMlCwAB1AsAAyUKauMAAyUKYfsAAyULAAHUDwADJQJjvwADJR1bAAMlHwACTvMAAyUnAAHUGwADJR4KMwADJQJj1wADJTADAAMcCtTLAAMlOmPHAAMlPwACTvMAAyVCWncAAyU6Y9MAAyVLAAHT+wADJTpjvwADJVFbAAMlUgozAAMlOmPXAAMlXAMAAxwLAAHUHwADJWZjxwADJWsAAk7zAAMlbmrjAAMlbwAB1CMAAyVmY78AAyV5WwADJXoKMwADJWZj1wADJYQDAAMcCwAB1CcAAyWOY8cAAyWTAAJO8wADJZcAAdQrAAMllwAB1C8AAyWOY78AAyWhWwADJaJxrwADJaIKMwADJY5j1wADJbADAAMcCwAB1DMAAyW6Y78AAyW+VosAAyW+HLMAAyW/AAHUNwADJbpjywADJc4jxwADJc4H4wADJc8AAdQ7AAMlumPXAAMl3AMAAxwLAAHUPwADJeZjxwADJesAAk7zAAMl7wABzOsAAyXvAAHUQwADJeZjywADJfojxwADJfoH4wADJeZj1wADJgQDAAMcCwAB1EcAAyYOY8cAAyYTAAJO8wADJhcAAdRLAAMmDmPLAAMmHiPHAAMmHgfjAAMmHwAB1DsAAyYOY9cAAyYsAwADHAsAAdRTAAMmNmO/AAMmOwABxX8AAyY6I8sAAyY7AAHUNwADJjrWNwADJjp7hwADJjpaNwADJjZj1wADJlQDAAMcCwAB1FsAAyZeY8cAAyZjAAJO8wADJmcAAczrAAMmZwAB1EMAAyZeY78AAyZyI8sAAyZy1jcAAyZeY9cAAyZ8AwADHAoujwADJoZjxwADJosAAk7zAAMmjwAB1F8AAyaGY8sAAyaWI8cAAyaWB+MAAyaWAvcAAyaGY78AAyanAAHUswADJqcAAdS7AAMmhmPXAAMmsAMAAxwLAAHUvwADJrpjxwADJr8AAk7zAAMmwKMAAya/AAHUwwADJr8AAdTHAAMmvwAB1MsAAya/AAHUzwADJr56JwADJr8AAdTTAAMmvwAB1NcAAya+We8AAya6Y78AAybojwADJrpj1wADJvMAAk7zAAMm9gLXAAMm8AMAAxwLAAHU3wADJwJjxwADJwYHBwADJwJjvwADJw4jywADJw8AAk7zAAMnFwABv9MAAycO1jcAAycCY9cAAycgAwADHAsAAdTzAAMnKmPHAAMnLwACTvMAAyczAAEuWwADJzJeRwADJypjvwADJz8AAbzHAAMnPgozAAMnKmPXAAMnSAMAAxwLAAHU9wADJ1JjxwADJ1cAAdT7AAMnVwABUpcAAydXAAHU/wADJ1JjvwADJ2SPAAMnUmPXAAMnbAMAAxwLAAHVDwADJ3ZjvwADJ3iPAAMndmPXAAMngAMAAxwLAAHVFwADJ4pjxwADJ48AAk7zAAMnkwABzw8AAyeTAAHVGwADJ4pjvwADJ54cswADJ55WiwADJ4pjywADJ6ojxwADJ6oH4wADJ4pj1wADJ7QDAAMntwAB1SMAAxwKI4cAAyfCY8cAAyfGoycAAyfHAAJO8wADJ88AAdUbAAMnwmO/AAMn1iPLAAMn1tY3AAMn1nuHAAMn1wAB1DcAAyfCY9cAAyfoAwADJ+sAAdUnAAMcCwAB1SsAAyf2Y8cAAyf7AAJO8wADJ/8AAdUvAAMn/wAB1TcAAyf/AAHVGwADJ/8AAdU7AAMn+wAB1TMAAyf2Y78AAygXAAJO8wADKBsAAdVDAAMoFiPLAAMoFtY3AAMoFnuHAAMn9mPXAAMoLAMAAxwLAAHVTwADKDZjxwADKDsAAk7zAAMoPwAB1TcAAyg/AAHVGwADKD5eRwADKD8AAdVTAAMoNmO/AAMoUVsAAyhSCjMAAyg2Y9cAAyhcAwADHAsAAdVfAAMoZmPHAAMoawACTvMAAyhuXkcAAyhvAAHVNwADKG8AAdUbAAMobwAB1TsAAyhvAAHVUwADKGZjvwADKIcAAk7zAAMoiwAB0nsAAyiFWwADKIYKMwADKGZj1wADKJgDAAMcCwAB1WMAAyiiY8cAAyinAAJO8wADKKsAAc8PAAMoomO/AAMosiPLAAMostY3AAMosnuHAAMoomPXAAMowAMAAxwLAAHVZwADKMpjxwADKM8AAdVrAAMozwAB1W8AAyjPAAHVcwADKM8AAdV3AAMozwAB1XsAAyjOiKsAAyjPAAHVfwADKM8AAdWDAAMozwAB1YcAAyjPAAHViwADKM8AAdWPAAMozwAB1ZMAAyjPAAHVlwADKM8AAdWbAAMozwACTvMAAykLAAHVnwADKQsAAdUbAAMoymPLAAMpFwACTvMAAykbAAHVowADKMpjvwADKSIG7wADKSMAAdWrAAMpIhBbAAMpIwAB1a8AAykiWcsAAykjAAHVswADKSMAAk7zAAMpPwAB1bcAAyk/AAHVuwADKSMAAdW/AAMpIwAB1cMAAykiIeMAAykjAAHVywADKMpj1wADKVgDAAMcCwAB1d8AAyliY8cAAylnAAJO8wADKWoPewADKWJjvwADKXJnvwADKXIh4wADKXMAAdXLAAMpYmPXAAMpgAMAAxwLAAHV5wADKYpjxwADKY8AAk7zAAMpkl5HAAMpimO/AAMpmu9nAAMpmhDHAAMpmwAB1a8AAymaBu8AAymbAAHVqwADKZoQWwADKYpjywADKbcAAk7zAAMpuwAB1aMAAymKY9cAAynAAwADHAsAAdXrAAMpymPXAAMpzAMAAynKY8cAAynXAAJO8wADKdoPewADKcpjvwADKeJnvwADKeIh4wADKeMAAdXLAAMcCwAB1e8AAynyY8cAAyn3AAJO8wADKfsAAdU3AAMp8mO/AAMqAme/AAMp8mPXAAMqCAMAAxwLAAHV8wADKhJjxwADKhcAAdU/AAMqFwAB1UcAAyoWCj8AAyoUnwADKhJjvwADKirvZwADKioRGwADKisAAdWvAAMqKwAB1fcAAyoqBu8AAyorAAHVqwADKioQWwADKisAAdX/AAMqKwAB1fsAAyoqHC8AAyoSY8sAAypXAAJO8wADKlsAAdWjAAMqEmPXAAMqYAMAAxwLAAHWAwADKmpj1wADKmwDAAMqamPHAAMqdwACTvMAAyp6D3sAAypqY78AAyqCZ78AAyqCIeMAAyqDAAHVywADHAsAAdYHAAMqkmPHAAMqlqMnAAMqkmO/AAMqnme/AAMqkmPXAAMqpAMAAxwLAAHWCwADKq5jxwADKrMAAk7zAAMqtwAB0oMAAyquY8sAAyq+AvcAAyq+I8cAAyq+B+MAAyquY78AAyrOVosAAyrOHLMAAyquY9cAAyrYAwADHAsAAdYPAAMq4mPXAAMq5AMAAxwLAAHWEwADKu5jvwADKvLWNwADKu5j1wADKvgDAAMcCwAB1hcAAysCY8cAAysHAAJO8wADKwpeRwADKwJjvwADKxIKMwADKxFbAAMrEwACTvMAAysfAAHWGwADKx8AAdYfAAMrHwAB1iMAAysTAAG8xwADKwJj1wADKzADAAMcCwAB1isAAys6Y78AAys/AAG8xwADKzpj1wADK0QDAAMcCBcAAytOY78AAytSApsAAytSI8sAAytS1jcAAytSe4cAAytOY9cAAytkAwADHAsAAdYzAAMrbmPHAAMrcwACTvMAAyt2XkcAAyt3AAHWNwADK3cAAdY7AAMrbmO/AAMrhwABvMcAAyuGCjMAAyuHAAJO8wADK5MAAdY/AAMrbmPXAAMrmAMAAxwLAAHWQwADK6JjxwADK6cAAk7zAAMrqwAB1CsAAyuiY78AAyuyca8AAyuiY9cAAyu4AwADHArUzwADK8JjxwADK8cAAk7zAAMrylp3AAMrwmPTAAMr0wAB0/sAAyvSWg8AAyvTAAHWRwADK8JjvwADK+MAAbzHAAMr4wABwAsAAyvjAAHVWwADK8Jj1wADK/ADAAMcCwAB1ksAAyv6Y8cAAyv/AAJO8wADLAJadwADK/pj0wADLAsAAdZHAAMr+mO/AAMsEgozAAMcCwAB1k8AAywaY8cAAywfAAJO8wADLCJq4wADLCJeRwADLBpjvwADLC4KMwADLC4QWwADLC4KOwADLC4IDwADLC6AtwADLBpj1wADLEQDAAMcCwAB1lMAAyxOY8cAAyxTAAJO8wADLFcAAdZXAAMsVmH7AAMsVwAB1C8AAyxOY78AAyxmCjMAAyxmEFsAAyxmCjsAAyxmCA8AAyxmgLcAAyxnAAJO8wADLH5egwADLE5j1wADLIQDAAMcCwAB1lsAAyyOY9cAAyyQAwADHAsAAdZfAAMsmmO/AAMsnwABvMcAAyyeCjMAAyydWwADLJ8AAcALAAMsnwAB1VsAAyyaY9cAAyy0AwADHAsAAdZjAAMsvmPHAAMswwACTvMAAyzHAAHWawADLL5jvwADLM4KMwADLM8AAbzHAAMszVsAAyzPAAHACwADLM8AAdVbAAMsvmPXAAMs5AMAAxwLAAHWbwADLO5jxwADLPMAAk7zAAMs9mrjAAMs7mO/AAMs/gozAAMs/wABwAsAAyzuY9cAAy0IAwADHAsAAdZzAAMtEmPHAAMtFwACTvMAAy0aXkcAAy0SY78AAy0hWwADLSMAAbzHAAMtIgozAAMtEmPXAAMtMAMAAxwLAAHWdwADLTpjxwADLT8AAk7zAAMtQwAB0/MAAy1CXkcAAy06Y78AAy1OCjMAAy1NWwADLU8AAbzHAAMtOmPXAAMtXAMAAxwLAAHWfwADLWZjxwADLWsAAk7zAAMtbwAB0/MAAy1vAAHULwADLW5h+wADLWZjvwADLX4KMwADLX1bAAMtfwABvMcAAy1mY9cAAy2MAwADLY8AAk7zAAMtlgLXAAMcCwAB1ocAAy2eY8cAAy2jAAJO8wADLacAAc8TAAMtnmPLAAMtrgL3AAMtriPHAAMtrgfjAAMtnmO/AAMtvhyzAAMtnmPXAAMtxAMAAxwLAAHWiwADLc5jvwADLdIjywADLdLWNwADLdJ7hwADLc5j1wADLeADAAMcCwAB1p8AAy3qY8cAAy3vAAJO8wADLfMAAdY3AAMt8wAB1A8AAy3yYfsAAy3zAAHWowADLepjvwADLgcAAk7zAAMuCwABwIMAAy4LAAHWmwADLgsAAdaPAAMt6mPXAAMuGAMAAy4bAAHWpwADHAsAAda3AAMuJmPXAAMuKAMAAy4rAAHWpwADLiZjvwADLjcAAbzHAAMuNgozAAMuNVsAAy43AAHACwADLjcAAdVbAAMcCwAB1rsAAy5OY8cAAy5TAAJO8wADLlZeRwADLk5jvwADLl4KMwADLl8AAbzHAAMuTmPXAAMuaAMAAxwLAAHWxwADLnJjxwADLncAAk7zAAMuewABzxMAAy5yY78AAy6CI8sAAy6C1jcAAy6Ce4cAAy6DAAHUNwADLoMAAk7zAAMulwAB1tsAAy5yY9cAAy6cAwADHAsAAdbfAAMupmPHAAMuqwACTvMAAy6vAAHPEwADLq8AAdZrAAMurwAB1tcAAy6uXYcAAy6vAAHW4wADLq8AAdbnAAMurwAB1usAAy6mY8sAAy7PAAHW7wADLqZjvwADLtYKMwADLtYRGwADLtYjywADLqZj1wADLuQAAwACTvcAAy7uY8MAAy7zAAHXlwADLvMAAdebAAMu8wAB158AAy7uY8cAAy8DAAJO9wADLwcAAdjTAAMvBwAB2NcAAy7uY78AAy8TAAJO9wADLxcAAYOjAAMvFwAB2OMAAy8XAAHZAwADLxcAAdkrAAMvFwAB2TMAAy8XAAHZcwADLxcAAdl7AAMvFwAB2YMAAy8XAAHZjwADLxcAAdmXAAMvFwAB2Z8AAy8XAAHZpwADLxcAAdmvAAMvFwAB2bcAAy8XAAHZuwADLxcAAdnDAAMvFwAB2csAAy8XAAHZ0wADLxcAAdnbAAMvFwAB2ecAAy8XAAHZ8wADLxcAAdn7AAMvEwABICMAAy8TAAHZQwADLxJbNwADLxMAAdlTAAMvEwAB2WMAAy8TAAHZiwADLu8AAdejAAMvimPTAAMvjAMAAy+KY8sAAy+WZWsAAy+KY78AA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zVfAAHcIwADNV8AAdwnAAM1XwAB3CsAAzVecvsAAzVfAAHcLwADNV8AAdwzAAM1XwAB3DcAAzVfAAHcOwADNV8AAdw/AAM1XwAB3EMAAzVfAAHcRwADNV8AAdxLAAM1XwAB3E8AAzVfAAHcUwADNV8AAdxXAAM1XwAB3FsAAzVfAAHcXwADNV8AAdxjAAM1XwAB3GcAAzVfAAHcawADNV8AAdxvAAM1XwAB3HMAAzVfAAHcdwADNV8AAdx7AAM1XwAB3H8AAzVfAAHcgwADNV8AAdyHAAM1XwAB3IsAAzVfAAHcjwADNV8AAdyTAAM1XwAB3JcAAzVfAAHcmwADNV8AAdyfAAM1XwAB3KMAAzVfAAHcpwADNV8AAdyrAAM1XwAB3K8AAzVfAAHcswADNV8AAdy3AAM1XwAB3LsAAzVedhcAAzVfAAHcwwADNV8AAdzLAAM1XwAB3NMAAzVfAAHc2wADNV8AAdzjAAM1XwAB3OsAAzVfAAHc8wADNV8AAdz7AAM1XwAB3QMAAzVfAAHdCwADNV8AAd0TAAM1XwAB3RsAAzVfAAHdIwADNV8AAd0rAAM1XwAB3TMAAzVfAAHdOwADNV8AAd1DAAM1XwAB3UsAAzVfAAHdUwADNV8AAd1bAAM1XwAB3WMAAzVfAAHdawADNV8AAd1zAAM1XwAB3XsAAzVfAAHdgwADNV8AAd2LAAM1XwAB3ZMAAzVfAAHdmwADNV8AAd2jAAM1XwAB3asAAzVfAAHdswADNV8AAd27AAM1XwAB3cMAAzVfAAHdywADNV8AAd3TAAM1XwAB3dsAAzVfAAHd4wADNV8AAd3rAAM1XwAB3fMAAzVfAAHd+wADNV8AAd4DAAM1XwAB3gsAAzVaY9cAAzcIAwADM+8AAcEDAAM3EmPHAAM3FnCzAAM3GusDAAM3EmPLAAM3IwABwncAAzcSY78AAzcqB+sAAzcqWjcAAzcSY9cAAzc0AwADM+8AAd4TAAM3PmPHAAM3QnCzAAM3RusDAAM3RwABxDMAAzdHAAHH9wADN0cAAcf7AAM3PmO/AAM3WnKrAAM3WwABwpcAAzdaBrMAAzdaDjsAAzdacLMAAzdvAAHG2wADN1oH8wADN1oIFwADN1sAAcWvAAM3PmPLAAM3gwABwlMAAzc+Y9cAAzeIAwADM+8AAcEHAAM3kmPHAAM3lnCzA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wADQMl7AANAsmPXAANA0AMAAzPvAAHBDwADQNpjvwADQN8AAd8DAANA3wAB3wcAA0DfAAHfCwADQNpj1wADQOwDAAMz7wAB3w8AA0D2Y88AA0D5hwADQPZjvwADQQFbAANBAnzrAANBAoEfAANBAgKXAANBAhF7AANBAl1PAANBAl1bAANBAgkbAANBAoEbAANBAhi7AANBAoDrAANBAoD/AANA9mPXAANBNAMAAzPvAAHfHwADQT5jvwADQUIC/wADQUKBJwADQUFbAANBQnzrAANBQoEfAANBQgKXAANBQhF7AANBQl1PAANBQl1bAANBQgK7AANBQoDPAANBQgkbAANBQoEbAANBQhi7AANBQg2TAANBQoDrAANBQoD/AANBQnAfAANBPmPPAANBjYcAA0GODHsAA0GOB6sAA0E+Y9cAA0GcAwADM+8AAd83AANBpmPXAANBqAMAA0GmY88AA0GxhwADQaZjvwADQblbAANBunzrAANBuoEfAANBugKXAANBuhF7AANBul1PAANBul1bAANBugkbAANBuoEbAANBuhi7AANBuoDrAANBuoD/AAMz7wAB3zsAA0HuY9cAA0HwAwADQe5jvwADQfoC/wADQfqBJwADQflbAANB+nzrAANB+oEfAANB+gKXAANB+hF7AANB+l1PAANB+l1bAANB+gK7AANB+oDPAANB+gkbAANB+oEbAANB+hi7AANB+g2TAANB+oDrAANB+oD/AANB+nAfAANB7mPPAANCRYcAA0JGDHsAA0JGB6sAAzPvAAHfPwADQlZjxwADQlpwswADQl8AAd9DAANCVmPLAANCZYcAA0JWY78AA0JuWjsAA0JWY9cAA0J0AwADM+8AAd9HAANCfmPHAANCgnCzAANChwABMisAA0J+Y78AA0KNLwADQo8AARGvAANCjh2TAANCjg/3AANCfmPLAANCoYcAA0KgpwADQqINowADQqIFVwADQqIO3wADQn5j1wADQrgDAAMz7wAB30sAA0LCY8cAA0LGcLMAA0LK6wMAA0LCY8sAA0LRhwADQsJjvwADQtpaOwADQsJj1wADQuADAAMz7wAB308AA0LqY78AA0LtWwADQu8AAXEnAANC7YcAA0LuEXsAA0LqY9cAA0MAAwADM+8AAd9jAANDCmO/AANDDVsAA0MNhwADQw4RewADQwpj1wADQxwDAAMz7wAB33MAA0MmY8cAA0MqcLMAA0MvAAHfdwADQyZjvwADQzYCuwADQzcAAd97AANDNnCzAANDQwAB34MAA0NDAAHfhwADQ0MAAd+PAANDJmPXAANDUAMAAzPucKMAA0NaY8cAA0NecLMAA0NgowADQ18AAd/bAANDXwAB3+MAA0NfAAGMQwADQ18AAd/vAANDXwAB3/cAA0NfAAHgBwADQ1pjvwADQ4EjAANDgI8AA0OCZdcAA0ODAAHgEwADQ4MAAeAfAANDgwAB4CMAA0NaY8sAA0OeDxsAA0NaY9cAA0OkAwADQ6cAAeALAANDptATAAMz7wABzOcAA0O2Y8cAA0O6DHsAA0O6B6sAA0O5hwADQ7ZjywADQ8oFVwADQ8lzAANDtmO/AAND1VsAA0PXAAG0FwADQ9YRewADQ7Zj1wADQ+QDAAMz7wABzQsAA0PuY8cAA0PycLMAA0P3AAHCjwADQ/cAAcKTAAND9l2/AAND7mO/AANEBwABzQ8AA0PuY9cAA0QMAwADM+8AAc0DAANEFmPHAANEGXsAA0QacLMAA0QiXb8AA0QWY78AA0QpdwADRBZj1wADRDAAAwACTv8AA0Q6Y8MAA0Q/AAHgvwADRD8AAeDDAANEPwAB4McAA0Q/AAHgywADRDpjxwADRFMAAk7/AANEVwAB41sAA0Q6Y78AA0RfAAJO/wADRGMAAeNfAANEYwAB42MAA0RjAAHjZwADRGMAAeNrAANEYwAB428AA0RjAAHjcwADRGMAAeN3AANEYwAB44MAA0Q7AAHgzwADRIZj0wADRIgDAANEhmO/AANEkSMAA0STAAJO/wADRJr2HwADRJsAAeDXAANEhmPLAANEpg8bAANEOwAB4OMAA0SuY8cAA0SzAAJO/wADRLcAAeDnAANEtwABwwsAA0SuY8sAA0TDAAHYZwADRK5jvwADRMoH6wADRMoKMwADRK5j1wADRNQDAANE1wAB4OsAA0Q7AAHg7wADROJjxwADROcAAk7/AANE6wAB4PMAA0TiY9MAA0TwAwADROJjvwADRPoKMwADRPkjAANE+wACTv8AA0UHAAHhAwADRQcAAeD/AANFBwAB4Q8AA0UHAAHhEwADRQcAAeD7AANFBwAB4RsAA0TiY8sAA0UjAAHYZwADRSIPGwADROJjzwADRS1XAANEOwAB4SMAA0U2Y9MAA0U7AAJO/wADRT8AAeEnAANFNmO/AANFRofPAANFRSMAA0VHAAJO/wADRVMAAeEDAANFUwAB4NcAA0VTAAHhKwADRTZjywADRWIPGwADRDsAAeE7AANFamPTAANFbAMAA0VqY78AA0V3AAHhQwADRXcAAk7/AANFfwAB4UcAA0Q7AAHhTwADRYZjxwADRYsAAk7/AANFjl2/AANFjwAB4VMAA0WGY8sAA0WaBVcAA0WaDHsAA0WGY78AA0WmZ4sAA0WlWwADRaZ+QwADRaYRewADRacAAk7/AANFuwABytcAA0W7AAGztwADRbsAAbO7AANFuwAB4WMAA0W6axcAA0W7AAHhbwADRbsAAeFzAANFup3bAANFuwAB4XcAA0W7AAHhewADRYZj1wADReQDAANEOwAB4X8AA0XuY8cAA0XzAAJO/wADRfcAAeGDAANF9wAB4YcAA0X3AAHhiwADRfcAAeGPAANF9wAB4ZMAA0X3AAHhlwADRfcAAeGbAANF9wAB4Z8AA0X3AAHhowADRfcAAeGnAANF9wAB4asAA0X3AAHhrwADRfZq4wADRfcAAeGzAANF9wAB4bcAA0X3AAHhuwADRfcAAeFbAANF9wABzScAA0X3AAHhvwADRe5jvwADRkcAAk7/AANGSwAB4cMAA0ZLAAHItwADRksAAeFfAANGSwAB4dcAA0ZLAAHhzwADRksAAeHbAANGSwAB4d8AA0ZLAAHh5wADRksAAeHrAANGSwAB4fMAA0ZLAAHhEwADRksAAeIDAANGSwAB4gcAA0ZLAAHiCwADRksAAeIPAANGSwABwm8AA0ZGcqsAA0XuY9MAA0aQAwADRpMAAcVjAANF7mPLAANGnwACTv8AA0ajAAHh0wADRp4jZwADRp8AAcizAANF7mPXAANGswACTv8AA0a2Gc8AA0Q7AAHiEwADRr5jxwADRsCLAANGvmO/AANGyI8AA0a+Y9cAA0bQAwADRDgzAANG2mPHAANG3wACTv8AA0bjAAHiGwADRuMAAeIfAANG4wAB4iMAA0bjAAHiJwADRuMAAeIrAANG4wAB4i8AA0bjAAHiMwADRuMAAeI3AANG4wAB4jsAA0bjAAHiPwADRuMAAeJDAANG3wABxI8AA0bfAAHiRwADRt8AAdh3AANG3wAB4ksAA0bfAAHiTwADRtpjvwADRycAAk7/AANHKwAB4lMAA0crAAHiVwADRysAAeJvAANHKwAB4ocAA0crAAHijwADRysAAeKXAANHKwAB4p8AA0crAAHipwADRysAAeKvAANHKwAB4rMAA0crAAHjBwADRycAAeLPAANHJwAB4tcAA0cnAAHi3wADRyYH8wADRyYIFwADRycAAeMLAANHJwAB4xMAA0cnAAHjFwADRycAAYW7AANHJwABKo8AA0cnAAHjHwADRycAAeMjAANG2mPLAANHipCXAANHiXsAA0eJ5wADR4njAANHiiMzAANG2mPXAANHoAMAA0Q7AAHXfwADR6pjvwADR66HzwADR60jAANHqmPLAANHug8bAANHqmPXAANHwAMAA0Q7AAHjMwADR8pj0wADR8wDAANHzwAB4OsAA0fKY78AA0faB+sAA0faCjMAA0fKY8sAA0fnAAHYZwADRDsAAdeDAANH7mPTAANH8AMAA0fuY88AA0f5VwADR+5jvwADSAIKMwADR+5jywADSAsAAdhnAANEOwAB4z8AA0gSY8cAA0gXAAJO/wADSBsAAeNDAANIFhlzAANIEmO/AANIJI8AA0gSY8sAA0gucHMAA0gzAAHIxwADSBJjzwADSDpwcwADSD8AAcjHAANIEmPXAANIRAMAA0Q7AAHjRwADSE5j0wADSFMAAeNPAANITmO/AANIWwAB4UMAA0Q7AAHjVwADSGJj0wADSGQAAwACTwMAA0huY8cAA0hyDU8AA0hzAAHkbwADSHMAAeR3AANIcwAB5H8AA0hzAAHkhwADSHMAAeSPAANIcwAB5JcAA0hzAAHknwADSG5jvwADSJcAAk8DAANImwAB5KcAA0ibAAHkrwADSJsAAeS3AANImwAB5LsAA0ibAAHkwwADSJsAAeTLAANImwAB5NMAA0ibAAHk2wADSJsAAeTjAANImwAB5OsAA0ibAAHk8wADSJsAAeT7AANImwABg6MAA0ibAAHlMwADSJZ0LwADSJcAASnbAANIlwAB5QcAA0iXAAHlDwADSJcAAeUTAANIlwAB5RsAA0iXAAHlHwADSJcAAeUjAANIlwAB5ScAA0iXAAHlKwADSJcAAeUvAANIlvjfAANIlls3AANIbwAB45sAA0kKY8cAA0kPAAJPAwADSRMAAZRnAANJEwAB458AA0kTAAHjowADSRMAAeOnAANJEwAB46sAA0kTAAHjrwADSRMAAeO3AANJCmO/AANJMwACTwMAA0k3AAHjvwADSTcAAePXAANJNwAB498AA0k3AAHj5wADSTKA2wADSTMAAePPAANJMwAB49MAA0kKY9cAA0lXAAJPAwADSVsAAeO7AANIbwAB4+sAA0liY8cAA0lnAAJPAwADSWsAAeOnAANJawAB46sAA0liY78AA0l3AAJPAwADSXsAAePvAANJdoDbAANJdwAB488AA0l3AAHj0wADSWJj1wADSYwDAANIbwAB4/sAA0mWY78AA0maHOcAA0maHOsAA0maHQMAA0mbAAHj/wADSZZj1wADSawDAANIbwAB5AMAA0m2Y8cAA0m6DgMAA0m69UMAA0m2Y78AA0nEjwADScUjAANJxZMAA0nGBjcAA0nGDjcAA0nHAAHkDwADSccAAeQTAANJtmPLAANJ5g8bAANJ5wABJ4MAA0m2Y9cAA0nwAwADSG8AAak3AANJ+mPTAANJ/AMAA0n/AAHkFwADSfpjvwADSgqA2wADSgsAAePPAANKCwAB49MAA0hvAAHkGwADShpjywADSh4XNwADSh6iGwADSh4G2wADSh8AAeQfAANKHhc/AANKHwAB5CMAA0oeDxsAA0ofAAHkRwADSh8AAeRLAANKHwAB5E8AA0ofAAHkUwADShpjvwADSkyPAANKTSMAA0pOXWMAA0pO27cAA0pPAAHkNwADSk8AAeQ7AANKTwAB5EMAA0oaY9cAA0psAwADSG8AAeRXAANKdmPHAANKehc3AANKeqIbAANKegbbAANKewAB5B8AA0p2Y9MAA0qPAAHkWwADSnZj1wADSpQDAANIbwAB5F8AA0qeY8cAA0qiFzcAA0qiohsAA0qjAAJPAwADSq8AAeRjAANKrwAB5GcAA0qeY9MAA0q7AAHkWwADSp5jywADSsIG2wADSsMAAeQfAANKnmPPAANKzgbbAANKzwAB5B8AA0qeY9cAA0rYAAJyawADSuJjxwADSuZyawADSusAAelDAANK4mO/AANK8nJrAANK9wAB6UcAA0r3AAGuuwADSvcAAelLAANK9wAB6U8AA0r24R8AA0r3AAGlIwADSvcAAeljAANK9wAB6WsAA0rzAAHojwADSvMAAeiTAANK8wAB6K8AA0rzAAHotwADSuMAAeU7AANLKmPHAANLLnJrAANLMwAB5T8AA0sqY78AA0s4jwADSypj1wADS0ADAANK4wAB5UMAA0tKY8cAA0tOe0sAA0tPAAEZ3wADS05yawADS1ojDwADS1sAAeVHAANLSmPLAANLZhvXAANLZsfbAANLSmO/AANLcnJrAANLdwAB5UsAA0t3AAHlUwADS3CPAANLSmPXAANLhAMAA0rjAAHlXwADS45jxwADS5IH7wADS5IcFwADS5Lg9wADS45jvwADS6CPAANLjmPXAANLqnJrAANLrgLXAANK4wAB5WMAA0u2Y9cAA0u4AwADSuMAAeVnAANLwmPHAANLxpCXAANLxwAB5WsAA0vCY8sAA0vTAAHlbwADS8JjvwADS9iPAANL2wAB5XcAA0vacmsAA0vnAAHlfwADS8Jj1wADS+5yawADS/IC1wADSuMAAeWHAANL+mPHAANL/qW7AANL/wAB5YsAA0v+FTsAA0v+EHsAA0v+Hn8AA0v+cmsAA0wWII8AA0v6Y8sAA0weEk8AA0weiHMAA0wed2MAA0weHnsAA0wfAAHljwADTB7RmwADTB7VgwADTB4QkwADTB8AAeWTAANMHhB/AANMHhVDAANMHhnXAANMHwABq48AA0wepjcAA0weFVcAA0wea6sAA0weEYMAA0weG98AA0weDSsAA0v6Y9cAA0xsAwADSuMAAeWXAANMdmPHAANMeqW7AANMenJrAANMgiCPAANMdmPLAANMiwAB5YsAA0yLAAGrjwADTIoKUwADTIqGMwADTIqQkwADTIoQewADTIoefwADTIoQiwADTIoQgwADTIoZ1wADTIsAAeWbAANMigyrAANMihGDAANMihvfAANMdmPXAANMxAMAA0rjAAHlnwADTM5jxwADTNJyawADTNcAAeWjAANMzmO/AANM3nJrAANM4wAB5acAA0zjAAHlrwADTOMAAeWzAANM3vI/AANM3wABOesAA0zfAAHlvwADTN6/OwADTM5j1wADTQJyawADTQYC1wADSuMAAeXLAANNDmPHAANNEnJrAANNFkoHAANNDmPLAANNHgpTAANNHwAB5c8AA00fAAHlqwADTR4PGwADTQ5jvwADTTCPAANNMSMAA00zAAE56wADTTMAAeW/AANNMvI/AANNMnJrAANNSwAB5acAA01LAAHlrwADTUsAAeWzAANNSwAB5eMAA00OY9cAA01ecmsAA01iAtcAA0rjAAHl6wADTWpjxwADTW5yawADTXMAAeXvAANNamPLAANNegm7AANNamO/AANNgsDnAANNgI8AA02CcmsAA02PAAHl9wADTWpj1wADTZZyawADTZoC1wADSuMAAeX/AANNomPLAANNpnJrAANNqwAB5gMAA02iY9cAA02wAwADSuMAAeYHAANNumPHAANNvnJrAANNwwAB5gMAA03DAAHmCwADTcMAAeYPAANNwwAB5hMAA03DAAHmFwADTcMAAeYbAANNwwAB5h8AA03DAAHmIwADTcMAAeYnAANNwwAB5isAA03DAAGsIwADTcMAAeYvAANNwwAB5jMAA03DAAHmNwADTcKnnwADTcMAAS+zAANNvhB/AANNvhOrAANNumPLAANODwAB5j8AA04PAAHmOwADTg8AAeWLAANODwABq48AA04OpbsAA04OGdcAA04OHn8AA04OEYMAA04OcmsAA04zAAHmSwADTjMAAeZHAANOMwAB5nsAA04OE88AA04PAAHmUwADTg4T1wADTg8AAeZjAANODwAB5mcAA04Ova8AA04OizcAA04OFOMAA04PAAHmTwADTg8AAeZ/AANODhvfAANODg8bAANNumO/AANOcI8AA05zAAFYkwADTnEjAANOcm0nAANOcwAB5osAA05ybasAA05ycmsAA06PAAHmlwADTo8AAeafAANOjwAB5qcAA06PAAHmrwADTo8AAea3AANOjwAB5r8AA06PAAHmxwADTo8AAebPAANOjwAB5m8AA06PAAHlpwADTo8AAeWvAANOjwAB5bMAA06PAAHm5wADTo8AAebvAANOjwAB5vcAA026Y9cAA07OcmsAA07SAtcAA0rjAAHm/wADTtpjxwADTt5yawADTuMAAecDAANO4wAB5gsAA07jAAHnBwADTuMAAVN/AANO4wAB5wsAA07aY8sAA076cmsAA07/AAHmewADTvsAAeWLAANO+tV/AANO+hVXAANO+murAANO+wAB5k8AA077AAHmfwADTvqLNwADTvoU4wADTvob3wADTvoRgwADTtpjvwADTyyPAANPLnJrAANPNwAB5w8AA083AAHnIwADTzcAAecTAANO2mPXAANPRnJrAANPSgLXAANK4wAB5y8AA09SY8cAA09WcmsAA09bAAHlowADT1sAAeYLAANPWwAB5iMAA09SY8sAA09rAAHliwADT2sAAauPAANPahnXAANPahGDAANPahvfAANPag8bAANPUmO/AANPhSMAA09SY9cAA0+OcmsAA0+SAtcAA0rjAAHnMwADT5pjxwADT55yawADT6MAAeYPAANPowAB5zcAA0+aY8sAA0+upbsAA0+uEHsAA0+uHn8AA0+ua78AA0+vAAHmPwADT68AAeY7AANPrnJrAANPywAB5gMAA0+uizcAA0+uFOMAA0+vAAHmTwADT68AAeZ/AANPrg8bAANPmmO/AANP5I8AA0/lIwADT+ZtJwADT+cAAeaLAANP5nJrAANP+wAB50MAA0/7AAHnSwADT5pj1wADUAZyawADUAoC1wADSuMAAedTAANQEmPHAANQFnJrAANQGwAB5gMAA1AbAAHmEwADUBsAAeYbAANQGwAB5g8AA1AbAAHnVwADUBqnnwADUBsAAS+zAANQEmPLAANQOh5/AANQOqW7AANQOwAB51sAA1A7AAHmPwADUDsAAeY7AANQOwAB5k8AA1A7AAHmfwADUDqLNwADUDoU4wADUBJjvwADUGCPAANQYm0nAANQYwAB5osAA1BicmsAA1BzAAHnYwADUHMAAedrAANQEmPXAANQfAMAA0rjAAHncwADUIZjxwADUIsAAeWLAANQigKzAANQinJrAANQlwAB5jcAA1CXAAHndwADUIZjywADUKMAAauPAANQoqW7AANQohnXAANQoh5/AANQonJrAANQtwAB5h8AA1Civa8AA1CiEYMAA1CiG98AA1CiDxsAA1CjAAHnfwADUIZjvwADUNEjAANQ0I8AA1DScmsAA1DfAAHngwADUN8AAeWnAANQ3wAB5a8AA1DfAAHlswADUN8AAebPAANQhmPXAANQ9nJrAANQ+gLXAANK4wAB55sAA1ECY8cAA1EGqKMAA1EGcmsAA1EPAAHnnwADUQYSqwADUQYMpwADUQYS1wADUQYS2wADUQYb3wADUQJjywADUSoS0wADUSoSzwADUSoRgwADUQJjvwADUTq8lwADUTpyawADUUMAAee3AANRAmPXAANRSnJrAANRTgLXAANK4wAB578AA1FWY8cAA1FbAAHnwwADUVoS9wADUVZjywADUWYTCwADUVZj1wADUW5yawADUXIC1wADSuMAAefLAANRemPHAANRfnJrAANRgwAB5h8AA1GDAAHnzwADUYMAAef7AANRgwAB5g8AA1GDAAFTfwADUYMAAecLAANRgwAB5/8AA1F+EHsAA1F/AAHn0wADUX8AAefXAANRfwAB59sAA1F/AAHn3wADUX8AAefjAANRfwAB5+cAA1F/AAHn6wADUX8AAefvAANRfwAB5/MAA1F/AAHn9wADUXpjywADUc4QfwADUc4VOwADUc4VQwADUc4eewADUc8AAeWPAANRztGbAANRzwAB5ZMAA1HO1YMAA1HOEJMAA1HOEk8AA1HOd2MAA1HOpbsAA1HOGdcAA1HOHn8AA1HOFVcAA1HOa6sAA1HOiHMAA1HOpjcAA1HODSsAA1F6Y78AA1IecmsAA1IjAAHmdwADUiMAAegfAANSIwAB6CcAA1IjAAHoAwADUiMAAegzAANSHI8AA1F6Y9cAA1I+cmsAA1JCAtcAA0rjAAHoOwADUkpjxwADUk6luwADUk4QewADUk4QgwADUk4QiwADUk5yawADUmJKBwADUkpjywADUmoefwADUmpyawADUnMAAeYfAANSagpTAANSSmO/AANSfI8AA1J+cmsAA1KHAAHoRwADUkpj1wADUo5yawADUpIC1wADSuMAAehPAANSmmPHAANSnnJrAANSowABzdMAA1KjAAHoUwADUqMAAehXAANSowABwHsAA1KiSgcAA1KehjMAA1KekJMAA1KaY8sAA1LCDKsAA1LDAAHlmwADUsIRgwADUsIb3wADUsIKUwADUppjvwADUtiPAANS2nJrAANS4wAB6GMAA1KaY9cAA1LqcmsAA1LuAtcAA0rjAAHoawADUvZjxwADUvsAAeWLAANS9mPLAANTAhnXAANTAh5/AANTAqW7AANTAhGDAANTAhvfAANTAwAB5j8AA1MDAAHmOwADUwKLNwADUwIU4wADUwMAAeZPAANTAwAB5n8AA1MDAAGrjwADUwIPGwADUvZjvwADUzkjAANTOI8AA1M6bScAA1M7AAHmiwADUvZj1wADU05yawADU1IC1wADSuMAAeh3AANTWmPHAANTXnJrAANTYwAB6HsAA1NjAAHofwADU2MAAeiHAANTWmO/AANTcwAB6I8AA1NzAAHokwADU3JyawADU38AAeiXAANTfwAB6J8AA1N/AAHopwADU38AAei/AANTcwAB6K8AA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ANXxlpjAANXxnMLAANXxoDnAANXxgK3AANXxlXHAANXxg/3AANXxlpXAANXxg1/AANXxgKvAANXxhJXAANXxlovAANXxgdbAANXxlo/AANXxlpTAANXxlpfAANXxlo7AANXxVsAA1fGApcAA1fGfOsAA1fGgR8AA1fGArsAA1fGAu8AA1fGWtcAA1fGGLsAA1fGgRsAA1fGXU8AA1fGXVsAA1fGgScAA1fGcB8AA1eeY88AA1huDHsAA1huB6sAA1bzAAHpowADWHpjvwADWH6oZwADWIMAAemrAANYfg2TAANYfgVjAANW8wAB6bsAA1iSY8sAA1iXAAHAqwADWJaocwADWJYKPwADWJZjgwADWJVzAANYlgx7AANYlgerAANYlgMPAANYkmO/AANYulpvAANYulpLAANYulo3AANYuoETAANYuoEXAANYuZMAA1i6DHMAA1i6gM8AA1i6BpcAA1i6WmcAA1i6WmsAA1i6WhMAA1i6WmMAA1i6cwsAA1i6gOcAA1i6ArcAA1i6VccAA1i6D/cAA1i6WlcAA1i6DX8AA1i6Aq8AA1i6ElcAA1i6Wi8AA1i6B1sAA1i6Wj8AA1i6WlMAA1i6Wl8AA1i6WjsAA1i5WwADWLoClwADWLp86wADWLqBHwADWLoCuwADWLoC7wADWLpa1wADWLoYuwADWLqBGwADWLpdTwADWLpdWwADWLqBJwADWLpwHwADWJJjzwADWWIMewADWWIHqwADVvMAAem/AANZbmO/AANZcqhnAANZdwAB6asAA1lyDZMAA1lyBWMAA1bzAAHpwwADWYZjywADWYsAAcCrAANZiqhzAANZigo/AANZimODAANZiXMAA1mKDHsAA1mKB6sAA1mKAw8AA1mGY78AA1muqGcAA1mzAAHpqwADWa5abwADWa5aSwADWa5aNwADWa6BEwADWa6BFwADWa2TAANZrgxzAANZroDPAANZrg2TAANZrgaXAANZrlpnAANZrlprAANZrloTAANZrlpjAANZrnMLAANZroDnAANZrgK3AANZrlXHAANZrg/3AANZrlpXAANZrg1/AANZrgKvAANZrhJXAANZrlovAANZrgdbAANZrlo/AANZrlpTAANZrlpfAANZrlo7AANZrVsAA1muApcAA1mufOsAA1mugR8AA1muArsAA1muAu8AA1muWtcAA1muGLsAA1mugRsAA1muXU8AA1muXVsAA1muBWMAA1mugScAA1mucB8AA1mGY88AA1pmDHsAA1pmB6sAA1mGY9cAA1pwAwADVvMAAenLAANaemPLAANafwABwKsAA1p+qHMAA1p+Cj8AA1p+Y4MAA1p9cwADWn4MewADWn4HqwADWn4DDwADWnpjvwADWqKoZwADWqcAAemrAANaolpvAANaolpLAANaolo3AANaooETAANaooEXAANaoZMAA1qiDHMAA1qigM8AA1qiDZMAA1qiBpcAA1qiWmcAA1qiWmsAA1qiWhMAA1qiWmMAA1qicwsAA1qigOcAA1qiArcAA1qiVccAA1qiD/cAA1qiWlcAA1qiDX8AA1qiAq8AA1qiElcAA1qiWi8AA1qiB1sAA1qiWj8AA1qiWlMAA1qiWl8AA1qiWjsAA1qhWwADWqIClwADWqJ86wADWqKBHwADWqICuwADWqIC7wADWqJa1wADWqIYuwADWqKBGwADWqJdTwADWqJdWwADWqIFYwADWqKBJwADWqJwHwADWnpjzwADW1oMewADW1oHqwADWnpj1wADW2QDAANW8wAB6c8AA1tuY8sAA1tzAAHAqwADW3KocwADW3IKPwADW3JjgwADW3FzAANbcgx7AANbcgerAANbcgMPAANbbmO/AANblqhnAANbmwAB6asAA1uWWm8AA1uWWksAA1uWWjcAA1uWgRMAA1uWgRcAA1uVkwADW5YMcwADW5aAzwADW5YNkwADW5YGlwADW5ZaZwADW5ZaawADW5ZaEwADW5ZaYwADW5ZzCwADW5aA5wADW5YCtwADW5ZVxwADW5YP9wADW5ZaVwADW5YNfwADW5YCrwADW5YSVwADW5ZaLwADW5YHWwADW5ZaPwADW5ZaUwADW5ZaXwADW5ZaOwADW5VbAANblgKXAANblnzrAANbloEfAANblgK7AANblgLvAANbllrXAANblhi7AANbloEbAANbll1PAANbll1bAANblgVjAANbloEnAANblnAfAANbbmPPAANcTgx7AANcTgerAANbbmPXAANcWAMAA1bzAAHp0wADXGJjxwADXGaoZwADXGrf3wADXGJj0wADXHKoZwADXHcAAenXAANcYmPLAANcfwABvz8AA1x+DxsAA1xiY78AA1yJIwADXIsAAb9HAANciwAB6dsAA1yKYgsAA1yLAAHp3wADXIsAAenjAANciwAB6ecAA1yLAAHp6wADXIsAAenvAANciwAB6fMAA1yLAAHp9wADXIsAAen7AANciwAB6f8AA1yLAAHqAwADXIsAAeoHAANciwAB6gsAA1xiY9cAA1zMAwADVvMAAeoPAANc1mPLAANc2wABwKsAA1zaqHMAA1zbAAG/PwADXNoKPwADXNmHAANc1mO/AANc8qhnAANc9wAB6hcAA1z3AAHqHwADXPcAAeonAANc9wAB6i8AA1z3AAHqNwADXPcAAeo/AANc9wAB6kcAA1z3AAHqTwADXPcAAepXAANc9wAB6l8AA1z3AAHqZwADXPcAAepvAANc9wAB6ncAA1z3AAHqfwADXPcAAeqHAANc9wAB6o8AA1z3AAHqlwADXPcAAeqfAANc9wAB6qcAA1z3AAHqrwADXPcAAeq3AANc9wAB6r8AA1z3AAHqxwADXPcAAerPAANc9wAB6tcAA1z3AAHq3wADXPcAAernAANc1mPXAANdZAMAA1bzAAHq8wADXW5jvwADXXKA/wADXXJabwADXXJaSwADXXJaNwADXXKBEwADXXKBFwADXXGTAANdcgxzAANdcoDPAANdcgaXAANdclpnAANdclprAANdcloTAANdclpjAANdcnMLAANdcoDnAANdcgK3AANdclXHAANdcg/3AANdclpXAANdcg1/AANdcgKvAANdchJXAANdclovAANdcgdbAANdclo/AANdclpTAANdclpfAANdclo7AANdcVsAA11yApcAA11yfOsAA11ygR8AA11yArsAA11yAu8AA11yWtcAA11yGLsAA11ygRsAA11yXU8AA11yXVsAA11ygScAA11ycB8AA11uY9cAA14cAwADXW5jywADXicAAcCrAANeJqhzAANeJgo/AANeJmODAANeJXMAA14mDHsAA14mB6sAA14mAw8AA11uY88AA15KDHsAA15KB6sAA1bzAAHq9wADXlZjvwADXlqA/wADXlqoZwADXmMAAemrAANeWg2TAANeWgVjAANeVmPXAANecAMAA1bzAAHq+wADXnpj0wADXn6oZwADXoMAAeEnAANeemO/AANeiS8AA16KAv8AA16KqGcAA16XAAHpqwADXoqA/wADXnpjywADXqMAAcCrAANW8wAB6v8AA16qY78AA16ugP8AA16uWm8AA16uWksAA16uWjcAA16ugRMAA16ugRcAA16tkwADXq4McwADXq6AzwADXq4GlwADXq5aZwADXq5aawADXq5aEwADXq5aYwADXq5zCwADXq6A5wADXq4CtwADXq5VxwADXq4P9wADXq5aVwADXq4NfwADXq4CrwADXq4SVwADXq5aLwADXq4HWwADXq5aPwADXq5aUwADXq5aXwADXq5aOwADXq1bAANergKXAANernzrAANeroEfAANergK7AANergLvAANerlrXAANerhi7AANeroEbAANerl1PAANerl1bAANeroEnAANernAfAANeqmPXAANfWAMAA16qY8sAA19jAAHAqwADX2KocwADX2IKPwADX2JjgwADX2FzAANfYgx7AANfYgerAANfYgMPAANeqmPPAANfhgx7AANfhgerAANW8wAB6wMAA1+SY78AA1+WgP8AA1+WqGcAA1+fAAHpqwADX5YNkwADX5YFYwADX5Jj1wADX6wDAANW8wAB6wcAA1+2Y9MAA1+6qGcAA1+/AAHhJwADX7ZjvwADX8UvAANfxgL/AANfxqhnAANf0wAB6asAA1/GgP8AA1+2Y8sAA1/fAAHAqwADVvMAAesLAANf5mO/AANf6oD/AANf6lpvAANf6lpLAANf6lo3AANf6oETAANf6oEXAANf6ZMAA1/qDHMAA1/qgM8AA1/qBpcAA1/qWmcAA1/qWmsAA1/qWhMAA1/qWmMAA1/qcwsAA1/qgOcAA1/qArcAA1/qVccAA1/qD/cAA1/qWlcAA1/qDX8AA1/qAq8AA1/qElcAA1/qWi8AA1/qB1sAA1/qWj8AA1/qWlMAA1/qWl8AA1/qWjsAA1/pWwADX+oClwADX+p86wADX+qBHwADX+oCuwADX+oC7wADX+pa1wADX+oYuwADX+qBGwADX+pdTwADX+pdWwADX+qBJwADX+pwHwADX+Zj1wADYJQDAANf5mPLAANgnwABwKsAA2CeqHMAA2CeCj8AA2CeY4MAA2CdcwADYJ4MewADYJ4HqwADYJ4DDwADX+ZjzwADYMIMewADYMIHqwADVvMAAesPAANgzmO/AANg0oD/AANg0qhnAANg2wAB6asAA2DSDZMAA2DSBWMAA2DOY9cAA2DoAwADVvMAAesTAANg8mPTAANg9qhnAANg+wAB4ScAA2DyY78AA2EBLwADYQIC/wADYQKoZwADYQ8AAemrAANhAoD/AANg8mPLAANhGwABwKsAA1bzAAHrFwADYSJjvwADYSaA/wADYSZabwADYSZaSwADYSZaNwADYSaBEwADYSaBFwADYSWTAANhJgxzAANhJoDPAANhJgaXAANhJlpnAANhJlprAANhJloTAANhJlpjAANhJnMLAANhJoDnAANhJgK3AANhJlXHAANhJg/3AANhJlpXAANhJg1/AANhJgKvAANhJhJXAANhJlovAANhJgdbAANhJlo/AANhJlpTAANhJlpfAANhJlo7AANhJVsAA2EmApcAA2EmfOsAA2EmgR8AA2EmArsAA2EmAu8AA2EmWtcAA2EmGLsAA2EmgRsAA2EmXU8AA2EmXVsAA2EmgScAA2EmcB8AA2EiY9cAA2HQAwADYSJjywADYdsAAcCrAANh2qhzAANh2go/AANh2mODAANh2XMAA2HaDHsAA2HaB6sAA2HaAw8AA2EiY88AA2H+DHsAA2H+B6sAA1bzAAHrGwADYgpjvwADYg6A/wADYg6oZwADYhcAAemrAANiDg2TAANiDgVjAANiCmPXAANiJAMAA1bzAAHrHwADYi5j0wADYjKoZwADYjcAAeEnAANiLmO/AANiPS8AA2I+Av8AA2I+DZMAA2I+qGcAA2JPAAHpqwADYk8AAesjAANiTwAB6ycAA2I+gP8AA2IuY8sAA2JjAAHAqwADVvMAAesrAANiamO/AANiboD/AANiblpvAANiblpLAANiblo3AANiboETAANiboEXAANibZMAA2JuDHMAA2JugM8AA2JuBpcAA2JuWmcAA2JuWmsAA2JuWhMAA2JuWmMAA2JucwsAA2JugOcAA2JuArcAA2JuVccAA2JuD/cAA2JuWlcAA2JuDX8AA2JuAq8AA2JuElcAA2JuWi8AA2JuB1sAA2JuWj8AA2JuWlMAA2JuWl8AA2JuWjsAA2JtWwADYm4ClwADYm586wADYm6BHwADYm4CuwADYm4C7wADYm5a1wADYm4YuwADYm6BGwADYm5dTwADYm5dWwADYm6BJwADYm5wHwADYmpj1wADYxgDAANiamPLAANjIwABwKsAA2MiqHMAA2MiCj8AA2MiY4MAA2MhcwADYyIMewADYyIHqwADYyIDDwADYmpjzwADY0YMewADY0YHqwADVvMAAesvAANjUmO/AANjVoD/AANjVqhnAANjXwAB6asAA2NWDZMAA2NWBWMAA2NSY9cAA2NsAwADVvMAAeszAANjdmPTAANjeqhnAANjfwAB4ScAA2N2Y78AA2OFLwADY4YC/wADY4YNkwADY4aoZwADY5cAAemrAANjlwAB6zcAA2OXAAHrOwADY4aA/wADY3ZjywADY6sAAcCrAANW8wAB6z8AA2OyY78AA2O2gP8AA2O2Wm8AA2O2WksAA2O2WjcAA2O2gRMAA2O2gRcAA2O1kwADY7YMcwADY7aAzwADY7YGlwADY7ZaZwADY7ZaawADY7ZaEwADY7ZaYwADY7ZzCwADY7aA5wADY7YCtwADY7ZVxwADY7YP9wADY7ZaVwADY7YNfwADY7YCrwADY7YSVwADY7ZaLwADY7YHWwADY7ZaPwADY7ZaUwADY7ZaXwADY7ZaOwADY7VbAANjtgKXAANjtnzrAANjtoEfAANjtgK7AANjtgLvAANjtlrXAANjthi7AANjtoEbAANjtl1PAANjtl1bAANjtoEnAANjtnAfAANjsmPXAANkYAMAA2OyY8sAA2RrAAHAqwADZGqocwADZGoKPwADZGpjgwADZGlzAANkagx7AANkagerAANkagMPAANjsmPPAANkjgx7AANkjgerAANW8wAB60MAA2SaY78AA2SegP8AA2SeqGcAA2SnAAHpqwADZJ4NkwADZJ4FYwADZJpj1wADZLQDAANW8wAB60cAA2S+Y9MAA2TCqGcAA2THAAHhJwADZL5jvwADZM0vAANkzgL/AANkzqhnAANk2wAB6asAA2TbAAHrSwADZNsAAetPAANkzoD/AANkvmPLAANk7wABwKsAA1bzAAHrUwADZPZjvwADZPqA/wADZPpabwADZPpaSwADZPpaNwADZPqBEwADZPqBFwADZPmTAANk+gxzAANk+oDPAANk+gaXAANk+lpnAANk+lprAANk+loTAANk+lpjAANk+nMLAANk+oDnAANk+gK3AANk+lXHAANk+g/3AANk+lpXAANk+g1/AANk+gKvAANk+hJXAANk+lovAANk+gdbAANk+lo/AANk+lpTAANk+lpfAANk+lo7AANk+VsAA2T6ApcAA2T6fOsAA2T6gR8AA2T6ArsAA2T6Au8AA2T6WtcAA2T6GLsAA2T6gRsAA2T6XU8AA2T6XVsAA2T6gScAA2T6cB8AA2T2Y9cAA2WkAwADZPZjywADZa8AAcCrAANlrqhzAANlrgo/AANlrmODAANlrXMAA2WuDHsAA2WuB6sAA2WuAw8AA2T2Y88AA2XSDHsAA2XSB6sAA1bzAAHrVwADZd5jvwADZeKA/wADZeKoZwADZesAAemrAANl4g2TAANl4gVjAANl3mPXAANl+AMAA1bzAAHrWwADZgJj0wADZgaoZwADZgsAAeEnAANmAmO/AANmES8AA2YSAv8AA2YSqGcAA2YfAAHpqwADZh8AAetfAANmHwAB62MAA2YSgP8AA2YCY8sAA2YzAAHAqwADVvMAAetnAANmOmO/AANmPoD/AANmPlpvAANmPlpLAANmPlo3AANmPoETAANmPoEXAANmPZMAA2Y+DHMAA2Y+gM8AA2Y+BpcAA2Y+WmcAA2Y+WmsAA2Y+WhMAA2Y+WmMAA2Y+cwsAA2Y+gOcAA2Y+ArcAA2Y+VccAA2Y+D/cAA2Y+WlcAA2Y+DX8AA2Y+Aq8AA2Y+ElcAA2Y+Wi8AA2Y+B1sAA2Y+Wj8AA2Y+WlMAA2Y+Wl8AA2Y+WjsAA2Y9WwADZj4ClwADZj586wADZj6BHwADZj4CuwADZj4C7wADZj5a1wADZj4YuwADZj6BGwADZj5dTwADZj5dWwADZj6BJwADZj5wHwADZjpj1wADZugDAANmOmPLAANm8wABwKsAA2byqHMAA2byCj8AA2byY4MAA2bxcwADZvIMewADZvIHqwADZvIDDwADZjpjzwADZxYMewADZxYHqwADVvMAAetrAANnImO/AANnJoD/AANnJqhnAANnLwAB6asAA2cmDZMAA2cmBWMAA2ciY9cAA2c8AwADVvMAAetvAANnRmPTAANnSqhnAANnTwAB4ScAA2dGY78AA2dVLwADZ1YC/wADZ1aoZwADZ2MAAemrAANnYwAB63MAA2djAAHrdwADZ1aA/wADZ0ZjywADZ3cAAcCrAANW8wAB63sAA2d+Y78AA2eCgP8AA2eCWm8AA2eCWksAA2eCWjcAA2eCgRMAA2eCgRcAA2eBkwADZ4IMcwADZ4KAzwADZ4IGlwADZ4JaZwADZ4JaawADZ4JaEwADZ4JaYwADZ4JzCwADZ4KA5wADZ4ICtwADZ4JVxwADZ4IP9wADZ4JaVwADZ4INfwADZ4ICrwADZ4ISVwADZ4JaLwADZ4IHWwADZ4JaPwADZ4JaUwADZ4JaXwADZ4JaOwADZ4FbAANnggKXAANngnzrAANngoEfAANnggK7AANnggLvAANnglrXAANnghi7AANngoEbAANngl1PAANngl1bAANngoEnAANngnAfAANnfmPXAANoLAMAA2d+Y8sAA2g3AAHAqwADaDaocwADaDYKPwADaDZjgwADaDVzAANoNgx7AANoNgerAANoNgMPAANnfmPPAANoWgx7AANoWgerAANW8wAB638AA2hmY78AA2hqgP8AA2hqqGcAA2hzAAHpqwADaGoNkwADaGoFYwADaGZj1wADaIADAANW8wAB64MAA2iKY9MAA2iOqGcAA2iTAAHhJwADaIpjvwADaJkvAANomgL/AANomqhnAANopwAB6asAA2inAAHrhwADaKcAAeuLAANomoD/AANoimPLAANouwABwKsAA1bzAAHrjwADaMJjvwADaMaA/wADaMZabwADaMZaSwADaMZaNwADaMaBEwADaMaBFwADaMWTAANoxgxzAANoxoDPAANoxgaXAANoxlpnAANoxlprAANoxloTAANoxlpjAANoxnMLAANoxoDnAANoxgK3AANoxlXHAANoxg/3AANoxlpXAANoxg1/AANoxgKvAANoxhJXAANoxlovAANoxgdbAANoxlo/AANoxlpTAANoxlpfAANoxlo7AANoxVsAA2jGApcAA2jGfOsAA2jGgR8AA2jGArsAA2jGAu8AA2jGWtcAA2jGGLsAA2jGgRsAA2jGXU8AA2jGXVsAA2jGgScAA2jGcB8AA2jCY9cAA2lwAwADaMJjywADaXsAAcCrAANpeqhzAANpego/AANpemODAANpeXMAA2l6DHsAA2l6B6sAA2l6Aw8AA2jCY88AA2meDHsAA2meB6sAA1bzAAHrkwADaapjvwADaa6A/wADaa6oZwADabcAAemrAANprg2TAANprgVjAANpqmPXAANpxAMAA1bzAAHrlwADac5j0wADadKoZwADadcAAeEnAANpzmO/AANp3S8AA2neAv8AA2neqGcAA2nrAAHpqwADaesAAeubAANp6wAB658AA2negP8AA2nOY8sAA2n/AAHAqwADVvMAAeujAANqBmO/AANqCoD/AANqClpvAANqClpLAANqClo3AANqCoETAANqCoEXAANqCZMAA2oKDHMAA2oKgM8AA2oKBpcAA2oKWmcAA2oKWmsAA2oKWhMAA2oKWmMAA2oKcwsAA2oKgOcAA2oKArcAA2oKVccAA2oKD/cAA2oKWlcAA2oKDX8AA2oKAq8AA2oKElcAA2oKWi8AA2oKB1sAA2oKWj8AA2oKWlMAA2oKWl8AA2oKWjsAA2oJWwADagoClwADagp86wADagqBHwADagoCuwADagoC7wADagpa1wADagoYuwADagqBGwADagpdTwADagpdWwADagqBJwADagpwHwADagZj1wADarQDAANqBmPLAANqvwABwKsAA2q+qHMAA2q+Cj8AA2q+Y4MAA2q9cwADar4MewADar4HqwADar4DDwADagZjzwADauIMewADauIHqwADVvMAAeunAANq7mO/AANq8oD/AANq8qhnAANq+wAB6asAA2ryDZMAA2ryBWMAA2ruY9cAA2sIAwADVvMAAeurAANrEmPTAANrFqhnAANrGwAB4ScAA2sSY78AA2shLwADayIC/wADayKoZwADay8AAemrAANrLwAB668AA2svAAHrswADayKA/wADaxJjywADa0MAAcCrAANW8wAB67cAA2tKY78AA2tOgP8AA2tOqGcAA2tXAAHpqwADa05abwADa05aSwADa05aNwADa06BEwADa06BFwADa02TAANrTgxzAANrToDPAANrTg2TAANrTgaXAANrTlpnAANrTlprAANrTloTAANrTlpjAANrTnMLAANrToDnAANrTgK3AANrTlXHAANrTg/3AANrTlpXAANrTg1/AANrTgKvAANrThJXAANrTlovAANrTgdbAANrTlo/AANrTlpTAANrTlpfAANrTlo7AANrTVsAA2tOApcAA2tOfOsAA2tOgR8AA2tOArsAA2tOAu8AA2tOWtcAA2tOGLsAA2tOgRsAA2tOXU8AA2tOXVsAA2tOBWMAA2tOgScAA2tOcB8AA2tKY9cAA2wIAwADa0pjywADbBMAAcCrAANsEqhzAANsEgo/AANsEmODAANsEXMAA2wSDHsAA2wSB6sAA2wSAw8AA2tKY88AA2w2DHsAA2w2B6sAA1bzAAHruwADbEJj0wADbEaoZwADbEsAAeEnAANsQmO/AANsUS8AA2xSAv8AA2xSqGcAA2xfAAHpqwADbF8AAeu/AANsXwAB68MAA2xSgP8AA2xCY8sAA2xzAAHAqwADVvMAAevHAANsemO/AANsfoD/AANsfqhnAANshwAB6asAA2x+Wm8AA2x+WksAA2x+WjcAA2x+gRMAA2x+gRcAA2x9kwADbH4McwADbH6AzwADbH4NkwADbH4GlwADbH5aZwADbH5aawADbH5aEwADbH5aYwADbH5zCwADbH6A5wADbH4CtwADbH5VxwADbH4P9wADbH5aVwADbH4NfwADbH4CrwADbH4SVwADbH5aLwADbH4HWwADbH5aPwADbH5aUwADbH5aXwADbH5aOwADbH1bAANsfgKXAANsfnzrAANsfoEfAANsfgK7AANsfgLvAANsflrXAANsfhi7AANsfoEbAANsfl1PAANsfl1bAANsfgVjAANsfoEnAANsfnAfAANsemPXAANtOAMAA2x6Y8sAA21DAAHAqwADbUKocwADbUIKPwADbUJjgwADbUFzAANtQgx7AANtQgerAANtQgMPAANsemPPAANtZgx7AANtZgerAANW8wAB68sAA21yY9MAA212qGcAA217AAHhJwADbXJjvwADbYEvAANtggL/AANtgqhnAANtjwAB6asAA22PAAHrzwADbY8AAevTAANtgoD/AANtcmPLAANtowABwKsAA1bzAAHr1wADbapjvwADba6A/wADba6oZwADbbcAAemrAANtrlpvAANtrlpLAANtrlo3AANtroETAANtroEXAANtrZMAA22uDHMAA22ugM8AA22uDZMAA22uBpcAA22uWmcAA22uWmsAA22uWhMAA22uWmMAA22ucwsAA22ugOcAA22uArcAA22uVccAA22uD/cAA22uWlcAA22uDX8AA22uAq8AA22uElcAA22uWi8AA22uB1sAA22uWj8AA22uWlMAA22uWl8AA22uWjsAA22tWwADba4ClwADba586wADba6BHwADba4CuwADba4C7wADba5a1wADba4YuwADba6BGwADba5dTwADba5dWwADba4FYwADba6BJwADba5wHwADbapj1wADbmgDAANtqmPLAANucwABwKsAA25yqHMAA25yCj8AA25yY4MAA25xcwADbnIMewADbnIHqwADbnIDDwADbapjzwADbpYMewADbpYHqwADVvMAAevbAANuomPTAANupqhnAANuqwAB4ScAA26iY78AA26xLwADbrIC/wADbrKoZwADbr8AAemrAANuvwAB698AA26/AAHr4wADbrKA/wADbqJjywADbtMAAcCrAANW8wAB6+cAA27aY78AA27egP8AA27eWm8AA27eWksAA27eWjcAA27egRMAA27egRcAA27dkwADbt4McwADbt6AzwADbt4GlwADbt5aZwADbt5aawADbt5aEwADbt5aYwADbt5zCwADbt6A5wADbt4CtwADbt5VxwADbt4P9wADbt5aVwADbt4NfwADbt4CrwADbt4SVwADbt5aLwADbt4HWwADbt5aPwADbt5aUwADbt5aXwADbt5aOwADbt1bAANu3gKXAANu3nzrAANu3oEfAANu3gK7AANu3gLvAANu3lrXAANu3hi7AANu3oEbAANu3l1PAANu3l1bAANu3oEnAANu3nAfAANu2mPXAANviAMAA27aY8sAA2+TAAHAqwADb5KocwADb5IKPwADb5JjgwADb5FzAANvkgx7AANvkgerAANvkgMPAANu2mPPAANvtgx7AANvtgerAANW8wAB6+sAA2/CY78AA2/GgP8AA2/GqGcAA2/PAAHpqwADb8YNkwADb8YFYwADb8Jj1wADb9wDAANW8wAB6+8AA2/mY9MAA2/qqGcAA2/vAAHhJwADb+ZjvwADb/UvAANv9gL/AANv9qhnAANwAwAB6asAA2/2gP8AA2/mY8sAA3APAAHAqwADVvMAAevzAANwFmO/AANwGoD/AANwGlpvAANwGlpLAANwGlo3AANwGoETAANwGoEXAANwGZMAA3AaDHMAA3AagM8AA3AaBpcAA3AaWmcAA3AaWmsAA3AaWhMAA3AaWmMAA3AacwsAA3AagOcAA3AaArcAA3AaVccAA3AaD/cAA3AaWlcAA3AaDX8AA3AaAq8AA3AaElcAA3AaWi8AA3AaB1sAA3AaWj8AA3AaWlMAA3AaWl8AA3AaWjsAA3AZWwADcBoClwADcBp86wADcBqBHwADcBoCuwADcBoC7wADcBpa1wADcBoYuwADcBqBGwADcBpdTwADcBpdWwADcBqBJwADcBpwHwADcBZj1wADcMQDAANwFmPLAANwzwABwKsAA3DOqHMAA3DOCj8AA3DOY4MAA3DNcwADcM4MewADcM4HqwADcM4DDwADcBZjzwADcPIMewADcPIHqwADVvMAAev3AANw/mO/AANxAoD/AANxAqhnAANxCwAB6asAA3ECDZMAA3ECBWMAA3D+Y9cAA3EYAwADVvMAAev7AANxImPTAANxJqhnAANxKwAB4ScAA3EiY78AA3ExLwADcTIC/wADcTKoZwADcT8AAemrAANxMoD/AANxImPLAANxSwABwKsAA1bzAAHr/wADcVJjvwADcVaA/wADcVZabwADcVZaSwADcVZaNwADcVaBEwADcVaBFwADcVWTAANxVgxzAANxVoDPAANxVgaXAANxVlpnAANxVlprAANxVloTAANxVlpjAANxVnMLAANxVoDnAANxVgK3AANxVlXHAANxVg/3AANxVlpXAANxVg1/AANxVgKvAANxVhJXAANxVlovAANxVgdbAANxVlo/AANxVlpTAANxVlpfAANxVlo7AANxVVsAA3FWApcAA3FWfOsAA3FWgR8AA3FWArsAA3FWAu8AA3FWWtcAA3FWGLsAA3FWgRsAA3FWXU8AA3FWXVsAA3FWgScAA3FWcB8AA3FSY9cAA3IAAwADcVJjywADcgsAAcCrAANyCqhzAANyCgo/AANyCmODAANyCXMAA3IKDHsAA3IKB6sAA3IKAw8AA3FSY88AA3IuDHsAA3IuB6sAA1bzAAHsAwADcjpjvwADcj6A/wADcj6oZwADckcAAemrAANyPg2TAANyPgVjAANyOmPXAANyVAMAA1bzAAHsBwADcl5j0wADcmKoZwADcmcAAeEnAANyXmO/AANybS8AA3JuAv8AA3JuqGcAA3J7AAHpqwADcm6A/wADcl5jywADcocAAcCrAANW8wAB7AsAA3KOY78AA3KSgP8AA3KSWm8AA3KSWksAA3KSWjcAA3KSgRMAA3KSgRcAA3KRkwADcpIMcwADcpKAzwADcpIGlwADcpJaZwADcpJaawADcpJaEwADcpJaYwADcpJzCwADcpKA5wADcpICtwADcpJVxwADcpIP9wADcpJaVwADcpINfwADcpICrwADcpISVwADcpJaLwADcpIHWwADcpJaPwADcpJaUwADcpJaXwADcpJaOwADcpFbAANykgKXAANyknzrAANykoEfAANykgK7AANykgLvAANyklrXAANykhi7AANykoEbAANykl1PAANykl1bAANykoEnAANyknAfAANyjmPXAANzPAMAA3KOY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wADef6A/wADee5jywADeh8AAcCrAANW8wAB7FMAA3omY78AA3oqgP8AA3oqWm8AA3oqWksAA3oqWjcAA3oqgRMAA3oqgRcAA3opkwADeioMcwADeiqAzwADeioGlwADeipaZwADeipaawADeipaEwADeipaYwADeipzCwADeiqA5wADeioCtwADeipVxwADeioP9wADeipaVwADeioNfwADeioCrwADeioSVwADeipaLwADeioHWwADeipaPwADeipaUwADeipaXwADeipaOwADeilbAAN6KgKXAAN6KnzrAAN6KoEfAAN6KgK7AAN6KgLvAAN6KlrXAAN6Khi7AAN6KoEbAAN6Kl1PAAN6Kl1bAAN6KoEnAAN6KnAfAAN6JmPXAAN61AMAA3omY8sAA3rfAAHAqwADet6ocwADet4KPwADet5jgwADet1zAAN63gx7AAN63gerAAN63gMPAAN6JmPPAAN7Agx7AAN7AgerAANW8wAB7FcAA3sOY78AA3sSgP8AA3sSqGcAA3sbAAHpqwADexINkwADexIFYwADew5j1wADeygDAANW8wAB7FsAA3syY9MAA3s2qGcAA3s7AAHhJwADezJjvwADe0EvAAN7QgL/AAN7QqhnAAN7TwAB6asAA3tPAAHrmwADe08AAeufAAN7QoD/AAN7MmPLAAN7YwABwKsAA1bzAAHsXwADe2pjvwADe26A/wADe25abwADe25aSwADe25aNwADe26BEwADe26BFwADe22TAAN7bgxzAAN7boDPAAN7bgaXAAN7blpnAAN7blprAAN7bloTAAN7blpjAAN7bnMLAAN7boDnAAN7bgK3AAN7blXHAAN7bg/3AAN7blpXAAN7bg1/AAN7bgKvAAN7bhJXAAN7blovAAN7bgdbAAN7blo/AAN7blpTAAN7blpfAAN7blo7AAN7bVsAA3tuApcAA3tufOsAA3tugR8AA3tuArsAA3tuAu8AA3tuWtcAA3tuGLsAA3tugRsAA3tuXU8AA3tuXVsAA3tugScAA3tucB8AA3tqY9cAA3wYAwADe2pjywADfCMAAcCrAAN8IqhzAAN8Igo/AAN8ImODAAN8IXMAA3wiDHsAA3wiB6sAA3wiAw8AA3tqY88AA3xGDHsAA3xGB6sAA1bzAAHsYwADfFJjvwADfFaA/wADfFaoZwADfF8AAemrAAN8Vg2TAAN8VgVjAAN8UmPXAAN8bAMAA1bzAAHsZwADfHZj0wADfHqoZwADfH8AAeEnAAN8dmO/AAN8hS8AA3yGAv8AA3yGqGcAA3yTAAHpqwADfJMAAeuvAAN8kwAB67MAA3yGgP8AA3x2Y8sAA3ynAAHAqwADVvMAAexrAAN8rmO/AAN8soD/AAN8sqhnAAN8uwAB6asAA3yyWm8AA3yyWksAA3yyWjcAA3yygRMAA3yygRcAA3yxkwADfLIMcwADfLKAzwADfLINkwADfLIGlwADfLJaZwADfLJaawADfLJaEwADfLJaYwADfLJzCwADfLKA5wADfLICtwADfLJVxwADfLIP9wADfLJaVwADfLINfwADfLICrwADfLISVwADfLJaLwADfLIHWwADfLJaPwADfLJaUwADfLJaXwADfLJaOwADfLFbAAN8sgKXAAN8snzrAAN8soEfAAN8sgK7AAN8sgLvAAN8slrXAAN8shi7AAN8soEbAAN8sl1PAAN8sl1bAAN8sgVjAAN8soEnAAN8snAfAAN8rmPXAAN9bAMAA3yuY8sAA313AAHAqwADfXaocwADfXYKPwADfXZjgwADfXVzAAN9dgx7AAN9dgerAAN9dgMPAAN8rmPPAAN9mgx7AAN9mgerAANW8wAB7G8AA32mY9MAA32qqGcAA32vAAHhJwADfaZjvwADfbUvAAN9tgL/AAN9tqhnAAN9wwAB6asAA33DAAHrvwADfcMAAevDAAN9toD/AAN9pmPLAAN91wABwKsAA1bzAAHscwADfd5jvwADfeKA/wADfeKoZwADfesAAemrAAN94lpvAAN94lpLAAN94lo3AAN94oETAAN94oEXAAN94ZMAA33iDHMAA33igM8AA33iDZMAA33iBpcAA33iWmcAA33iWmsAA33iWhMAA33iWmMAA33icwsAA33igOcAA33iArcAA33iVccAA33iD/cAA33iWlcAA33iDX8AA33iAq8AA33iElcAA33iWi8AA33iB1sAA33iWj8AA33iWlMAA33iWl8AA33iWjsAA33hWwADfeIClwADfeJ86wADfeKBHwADfeICuwADfeIC7wADfeJa1wADfeIYuwADfeKBGwADfeJdTwADfeJdWwADfeIFYwADfeKBJwADfeJwHwADfd5j1wADfpwDAAN93mPLAAN+p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AOC/mO/AAODDS8AA4MOAv8AA4MOqGcAA4MbAAHpqwADgw6A/wADgv5jywADgycAAcCrAANW8wAB7jMAA4MuY78AA4MygP8AA4MyWm8AA4MyWksAA4MyWjcAA4MygRMAA4MygRcAA4MxkwADgzIMcwADgzKAzwADgzIGlwADgzJaZwADgzJaawADgzJaEwADgzJaYwADgzJzCwADgzKA5wADgzICtwADgzJVxwADgzIP9wADgzJaVwADgzINfwADgzICrwADgzISVwADgzJaLwADgzIHWwADgzJaPwADgzJaUwADgzJaXwADgzJaOwADgzFbAAODMgKXAAODMnzrAAODMoEfAAODMgK7AAODMgLvAAODMlrXAAODMhi7AAODMoEbAAODMl1PAAODMl1bAAODMoEnAAODMnAfAAODLmPXAAOD3AMAA4MuY8sAA4PnAAHAqwADg+aocwADg+YKPwADg+ZjgwADg+VzAAOD5gx7AAOD5gerAAOD5gMPAAODLmPPAAOECgx7AAOECgerAANW8wAB7jcAA4QWY78AA4QagP8AA4QaqGcAA4QjAAHpqwADhBoNkwADhBoFYwADhBZj1wADhDADAANW8wAB7jsAA4Q6Y9MAA4Q+qGcAA4RCAtcAA4Q6Y78AA4RJLwADhEoC/wADhEqoZwADhFcAAemrAAOESoD/AAOEOmPLAAOEYwABwKsAA1bzAAHuQwADhGpjvwADhG6A/wADhG5abwADhG5aSwADhG5aNwADhG6BEwADhG6BFwADhG2TAAOEbgxzAAOEboDPAAOEbgaXAAOEblpnAAOEblprAAOEbloTAAOEblpjAAOEbnMLAAOEboDnAAOEbgK3AAOEblXHAAOEbg/3AAOEblpXAAOEbg1/AAOEbgKvAAOEbhJXAAOEblovAAOEbgdbAAOEblo/AAOEblpTAAOEblpfAAOEblo7AAOEbVsAA4RuApcAA4RufOsAA4RugR8AA4RuArsAA4RuAu8AA4RuWtcAA4RuGLsAA4RugRsAA4RuXU8AA4RuXVsAA4RugScAA4RucB8AA4RqY9cAA4UYAwADhGpjywADhSMAAcCrAAOFIqhzAAOFIgo/AAOFImODAAOFIXMAA4UiDHsAA4UiB6sAA4UiAw8AA4RqY88AA4VGDHsAA4VGB6sAA1bzAAHuRwADhVJjvwADhVaA/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wADiWYYuwADiWaBGwADiWZdTwADiWZdWwADiWaBJwADiWZwHwADiWJj1wADihADAAOJYmPLAAOKGwABwKsAA4oaqHMAA4oaCj8AA4oaY4MAA4oZcwADihoMewADihoHqwADihoDDwADiWJjzwADij4MewADij4HqwADVvMAAe6HAAOKSmO/AAOKToD/AAOKTqhnAAOKVwAB6asAA4pODZMAA4pOBWMAA4pKY9cAA4pkAwADVvMAAe6LAAOKbmPTAAOKcqhnAAOKdgLXAAOKbmO/AAOKfS8AA4p+Av8AA4p+qGcAA4qLAAHpqwADin6A/wADim5jywADipcAAcCrAANW8wAB7pMAA4qeY78AA4qigP8AA4qiWm8AA4qiWksAA4qiWjcAA4qigRMAA4qigRcAA4qhkwADiqIMcwADiqKAzwADiqIGlwADiqJaZwADiqJaawADiqJaEwADiqJaYwADiqJzCwADiqKA5wADiqICtwADiqJVxwADiqIP9wADiqJaVwADiqINfwADiqICrwADiqISVwADiqJaLwADiqIHWwADiqJaPwADiqJaUwADiqJaXwADiqJaOwADiqFbAAOKogKXAAOKonzrAAOKooEfAAOKogK7AAOKogLvAAOKolrXAAOKohi7AAOKooEbAAOKol1PAAOKol1bAAOKooEnAAOKonAfAAOKnmPXAAOLTAMAA4qeY8sAA4tXAAHAqwADi1aocwADi1YKPwADi1ZjgwADi1VzAAOLVgx7AAOLVgerAAOLVgMPAAOKnmPPAAOLegx7AAOLegerAANW8wAB7pcAA4uGY78AA4uKgP8AA4uKqGcAA4uTAAHpqwADi4oNkwADi4oFYwADi4Zj1wADi6ADAANW8wAB7psAA4uqY9MAA4uuqGcAA4uyAtcAA4uqY78AA4u5LwADi7oC/wADi7qoZwADi8cAAemrAAOLuoD/AAOLqmPLAAOL0wABwKsAA1bzAAHuowADi9pjvwADi96A/wADi95abwADi95aSwADi95aNwADi96BEwADi96BFwADi92TAAOL3gxzAAOL3oDPAAOL3gaXAAOL3lpnAAOL3lprAAOL3loTAAOL3lpjAAOL3nMLAAOL3oDnAAOL3gK3AAOL3lXHAAOL3g/3AAOL3lpXAAOL3g1/AAOL3gKvAAOL3hJXAAOL3lovAAOL3gdbAAOL3lo/AAOL3lpTAAOL3lpfAAOL3lo7AAOL3VsAA4veApcAA4vefOsAA4vegR8AA4veArsAA4veAu8AA4veWtcAA4veGLsAA4vegRsAA4veXU8AA4veXVsAA4vegScAA4vecB8AA4vaY9cAA4yIAwADi9pjywADjJMAAcCrAAOMkqhzAAOMkgo/AAOMkmODAAOMkXMAA4ySDHsAA4ySB6sAA4ySAw8AA4vaY88AA4y2DHsAA4y2B6sAA1bzAAHupwADjMJjvwADjMaA/wADjMaoZwADjM8AAemrAAOMxg2TAAOMxgVjAAOMwmPXAAOM3AMAA1bzAAHuqwADjOZj0wADjOqoZwADjO4C1wADjOZjvwADjPUvAAOM9gL/AAOM9qhnAAONAwAB6asAA4z2gP8AA4zmY8sAA40PAAHAqwADVvMAAe6zAAONFmO/AAONGoD/AAONGlpvAAONGlpLAAONGlo3AAONGoETAAONGoEXAAONGZMAA40aDHMAA40agM8AA40aBpcAA40aWmcAA40aWmsAA40aWhMAA40aWmMAA40acwsAA40agOcAA40aArcAA40aVccAA40aD/cAA40aWlcAA40aDX8AA40aAq8AA40aElcAA40aWi8AA40aB1sAA40aWj8AA40aWlMAA40aWl8AA40aWjsAA40ZWwADjRoClwADjRp86wADjRqBHwADjRoCuwADjRoC7wADjRpa1wADjRoYuwADjRqBGwADjRpdTwADjRpdWwADjRqBJwADjRpwHwADjRZj1wADjcQDAAONFmPLAAONzwABwKsAA43OqHMAA43OCj8AA43OY4MAA43NcwADjc4MewADjc4HqwADjc4DDwADjRZjzwADjfIMewADjfIHqwADVvMAAe63AAON/mO/AAOOAoD/AAOOAqhnAAOOCwAB6asAA44CDZMAA44CBWMAA43+Y9cAA44YAwADVvMAAe67AAOOImPTAAOOJqhnAAOOKgLXAAOOImO/AAOOMS8AA44yAv8AA44yqGcAA44/AAHpqwADjjKA/wADjiJjywADjksAAcCrAANW8wAB7sMAA45SY78AA45WgP8AA45WWm8AA45WWksAA45WWjcAA45WgRMAA45WgRcAA45VkwADjlYMcwADjlaAzwADjlYGlwADjlZaZwADjlZaawADjlZaEwADjlZaYwADj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AOWzwAB8CMAA5bPAAHwJwADls8AAfArAAOWzwAB8C8AA5bPAAHwMwADls8AAfA3AAOWzwAB8DsAA5bPAAHwPwADls8AAfBDAAOWzwAB8EcAA5bPAAHwSwADls8AAfBPAAOWzwAB8FMAA5bPAAHwVwADls8AAfBbAAOWzwAB8F8AA5bPAAHwYwADls8AAfBnAAOWzwAB8GsAA5bPAAHwbwADls8AAfBzAAOWzwAB8HcAA5bPAAHwewADls8AAfB/AAOWzwAB8IMAA5bPAAHwhwADls8AAfCLAAOWzwAB8I8AA5bPAAHwkwADls8AAfCXAAOWzwAB8JsAA5bPAAHwnwADls8AAfCjAAOWzwAB8KcAA5bPAAHwqwADls8AAfCvAAOWzwAB8LMAA5bPAAHwtwADls8AAfC7AAOWzwAB8L8AA5bPAAHwwwADls8AAfDHAAOWzwAB8MsAA5bPAAHwzwADls8AAfDTAAOWzwAB8NcAA5bPAAHw2wADls8AAfDfAAOWzwAB8OMAA5bPAAHw5wADls8AAfDrAAOWzwAB8O8AA5bPAAHw8wADls8AAfD3AAOWzwAB8PsAA5bPAAHw/wADls8AAfEDAAOWzwAB8QcAA5bPAAHxCwADls8AAfEPAAOWzwAB8RMAA5bPAAHxFwADls8AAfEbAAOWzwAB8R8AA5bPAAHxIwADls8AAfEnAAOWzwAB8SsAA5bPAAHxLwADls8AAfEzAAOWzwAB8TcAA5bPAAHxOwADls8AAfE/AAOWzwAB8UMAA5bPAAHxRwADls8AAfFLAAOWzwAB8U8AA5bPAAHxUwADls8AAfFXAAOWzwAB8VsAA5bPAAHxXwADls8AAfFjAAOWzwAB8WcAA5bPAAHxawADls8AAfFvAAOWzwAB8XMAA5bPAAHxdwADls8AAfF7AAOWzwAB8X8AA5bPAAHxgwADls8AAfGHAAOWzwAB8YsAA5bPAAHxjwADls8AAfGTAAOWzwAB8ZcAA5bPAAHxmwADls8AAfGfAAOWzwAB8aMAA5bPAAHxpwADls8AAfGrAAOWzwAB8a8AA5bPAAHxswADls8AAfG3AAOWzwAB8bsAA5bPAAHxvwADls8AAfHDAAOWzwAB8ccAA5bPAAHxywADls8AAfHPAAOWzwAB8dMAA5bPAAHx1wADls8AAfHbAAOWzwAB8d8AA5bPAAHx4wADls8AAfHnAAOWzwAB8esAA5bPAAHx7wADls8AAfHzAAOWzwAB8fcAA5bPAAHx+wADls8AAfH/AAOWzwAB8gMAA5bPAAHyBwADls8AAfILAAOWzwAB8g8AA5bPAAHyEwADls8AAfIXAAOWzwAB8hsAA5bPAAHyHwADls8AAfIjAAOWzwAB8icAA5bPAAHyKwADls8AAfIvAAOWzwAB8jMAA5bPAAHyNwADls8AAfI7AAOWzwAB8j8AA5bPAAHyQwADls8AAfJHAAOWzwAB8ksAA5bPAAHyTwADls8AAfJTAAOWzwAB8lcAA5bPAAHyWwADls8AAfJfAAOWzwAB8mMAA5bPAAHyZwADls8AAfJrAAOWzwAB8m8AA5bPAAHycwADls8AAfJ3AAOWzwAB8nsAA5bPAAHyfwADls8AAfKDAAOWzwAB8ocAA5bPAAHyiwADls8AAfKPAAOWzwAB8pMAA5bPAAHylwADls8AAfKbAAOWzwAB8p8AA5bPAAHyowADls8AAfKnAAOWzwAB8qsAA5bPAAHyrwADls8AAfKzAAOWzwAB8rcAA5bPAAHyuwADls8AAfK/AAOWzwAB8sMAA5bPAAHyxwADls8AAfLLAAOWzwAB8s8AA5bPAAHy0wADls8AAfLXAAOWzwAB8tsAA5bPAAHy3wADls8AAfLjAAOWzwAB8ucAA5bPAAHy6wADls8AAfLvAAOWzwAB8vMAA5bPAAHy9wADls8AAfL7AAOWzwAB8v8AA5bPAAHzAwADls8AAfMHAAOWzwAB8wsAA5bPAAHzDwADls8AAfMTAAOWzwAB8xcAA5bPAAHzGwADls8AAfMfAAOWzwAB8yMAA5bPAAHzJwADls8AAfMrAAOWzwAB8y8AA5bPAAHzMwADls8AAfM3AAOWzwAB8zsAA5bPAAHzPwADls8AAfNDAAOWzwAB80cAA5bPAAHzSwADls8AAfNPAAOWzwAB81MAA5bPAAHzVwADls8AAfNbAAOWzwAB818AA5bPAAHzYwADls8AAfNnAAOWzwAB82sAA5bPAAHzbwADls8AAfNzAAOWzwAB83cAA5bPAAHzewADls8AAfN/AAOWzwAB84MAA5bPAAHzhwADls8AAfOLAAOWzwAB848AA5bPAAHzkwADls8AAfOXAAOWzwAB85sAA5bPAAHznwADls8AAfOjAAOWzwAB86cAA5bPAAHzqwADls8AAfOvAAOWzwAB87MAA5bPAAHztwADls8AAfO7AAOWzwAB878AA5bPAAHzwwADls8AAfPHAAOWymPTAAOa0AMAA5rTAAHzzwADmtMAAfPXAAOa0wAB898AA5rTAAHz5wADlspjvwADmumTAAOa6gcbAAOa6gY3AAOa6g43AAOa6UMAA5rqWAcAA5rrAAHsnwADmupX8wADmusAAeyrAAOa6wABCrsAA5rrAAHstwADmusAAey/AAOa6mCXAAOa6wAB7MsAA5rqgM8AA5rrAAHs7wADmusAAez7AAOa6wAB7QMAA5rrAAHtCwADmusAAe0TAAOa6nQvAAOa6wABKdsAA5rrAAHlLwADmusAAe0nAAOa6wAB7S8AA5bKY8sAA5tSDgMAA5tS9UMAA5tTAAEmewADm1MAAbVzAAObUwAB7OMAA1bzAAHz7wADm2pjxwADm28AAe/LAAObbwAB788AA5tvAAHv0wADm28AAe/XAAObbwAB79sAA5tvAAHv3wADm28AAe/jAAObbwAB7+cAA5tvAAHv6wADm28AAe/vAAObbwAB7/MAA5tvAAHv9wADm28AAe/7AAObbwAB7/8AA5tvAAHwAwADm28AAfAHAAObbwAB8AsAA5tvAAHwDwADm28AAfATAAObbwAB8BcAA5tvAAHwGwADm28AAfAfAAObbwAB8CMAA5tvAAHwJwADm28AAfArAAObbwAB8C8AA5tvAAHwMwADm28AAfA3AAObbwAB8DsAA5tvAAHwPwADm28AAfBDAAObbwAB8EcAA5tvAAHwSwADm28AAfBPAAObbwAB8FMAA5tvAAHwVwADm28AAfBbAAObbwAB8F8AA5tvAAHwYwADm28AAfBnAAObbwAB8GsAA5tvAAHwbwADm28AAfBzAAObbwAB8HcAA5tvAAHwewADm28AAfB/AAObbwAB8IMAA5tvAAHwhwADm28AAfCLAAObbwAB8I8AA5tvAAHwkwADm28AAfCXAAObbwAB8JsAA5tvAAHwnwADm28AAfCjAAObbwAB8KcAA5tvAAHwqwADm28AAfCvAAObbwAB8LMAA5tvAAHwtwADm28AAfC7AAObbwAB8L8AA5tvAAHwwwADm28AAfDHAAObbwAB8MsAA5tvAAHwzwADm28AAfDTAAObbwAB8NcAA5tvAAHw2wADm28AAfDfAAObbwAB8OMAA5tvAAHw5wADm28AAfDrAAObbwAB8O8AA5tvAAHw8wADm28AAfD3AAObbwAB8PsAA5tvAAHw/wADm28AAfEDAAObbwAB8QcAA5tvAAHxCwADm28AAfEPAAObbwAB8RMAA5tvAAHxFwADm28AAfEbAAObbwAB8R8AA5tvAAHxIwADm28AAfEnAAObbwAB8SsAA5tvAAHxLwADm28AAfEzAAObbwAB8TcAA5tvAAHxOwADm28AAfE/AAObbwAB8UMAA5tvAAHxRwADm28AAfFLAAObbwAB8U8AA5tvAAHxUwADm28AAfFXAAObbwAB8VsAA5tvAAHxXwADm28AAfFjAAObbwAB8WcAA5tvAAHxawADm28AAfFvAAObbwAB8XMAA5tvAAHxdwADm28AAfF7AAObbwAB8X8AA5tvAAHxgwADm28AAfGHAAObbwAB8YsAA5tvAAHxjwADm28AAfGTAAObbwAB8ZcAA5tvAAHxmwADm28AAfGfAAObbwAB8aMAA5tvAAHxpwADm28AAfGrAAObbwAB8a8AA5tvAAHxswADm28AAfG3AAObbwAB8bsAA5tvAAHxvwADm28AAfHDAAObbwAB8ccAA5tvAAHxywADm28AAfHPAAObbwAB8dMAA5tvAAHx1wADm28AAfHbAAObbwAB8d8AA5tvAAHx4wADm28AAfHnAAObbwAB8esAA5tvAAHx7wADm28AAfHzAAObbwAB8fcAA5tvAAHx+wADm28AAfH/AAObbwAB8gMAA5tvAAHyBwADm28AAfILAAObbwAB8g8AA5tvAAHyEwADm28AAfIXAAObbwAB8hsAA5tvAAHyHwADm28AAfIjAAObbwAB8icAA5tvAAHyKwADm28AAfIvAAObbwAB8jMAA5tvAAHyNwADm28AAfI7AAObbwAB8j8AA5tvAAHyQwADm28AAfJHAAObbwAB8ksAA5tvAAHyTwADm28AAfJTAAObbwAB8lcAA5tvAAHyWwADm28AAfJfAAObbwAB8mMAA5tvAAHyZwADm28AAfJrAAObbwAB8m8AA5tvAAHycwADm28AAfJ3AAObbwAB8nsAA5tvAAHyfwADm28AAfKDAAObbwAB8ocAA5tvAAHyiwADm28AAfKPAAObbwAB8pMAA5tvAAHylwADm28AAfKbAAObbwAB8p8AA5tvAAHyowADm28AAfKnAAObbwAB8qsAA5tvAAHyrwADm28AAfKzAAObbwAB8rcAA5tvAAHyuwADm28AAfK/AAObbwAB8sMAA5tvAAHyxwADm28AAfLLAAObbwAB8s8AA5tvAAHy0wADm28AAfLXAAObbwAB8tsAA5tvAAHy3wADm28AAfLjAAObbwAB8ucAA5tvAAHy6wADm28AAfLvAAObbwAB8vMAA5tvAAHy9wADm28AAfL7AAObbwAB8v8AA5tvAAHzAwADm28AAfMHAAObbwAB8wsAA5tvAAHzDwADm28AAfMTAAObbwAB8xcAA5tvAAHzGwADm28AAfMfAAObbwAB8yMAA5tvAAHzJwADm28AAfMrAAObbwAB8y8AA5tvAAHzMwADm28AAfM3AAObbwAB8zsAA5tvAAHzPwADm28AAfNDAAObbwAB80cAA5tvAAHzSwADm28AAfNPAAObbwAB81MAA5tvAAHzVwADm28AAfNbAAObbwAB818AA5tvAAHzYwADm28AAfNnAAObbwAB82sAA5tvAAHzbwADm28AAfNzAAObbwAB83cAA5tvAAHzewADm28AAfN/AAObbwAB84MAA5tvAAHzhwADm28AAfOLAAObbwAB848AA5tvAAHzkwADm28AAfOXAAObbwAB85sAA5tvAAHznwADm28AAfOjAAObbwAB86cAA5tvAAHzqwADm28AAfOvAAObbwAB87MAA5tvAAHztwADm28AAfO7AAObbwAB878AA5tvAAHzwwADm28AAfPHAAObamPTAAOfcAMAA59ycH8AA59zAAHz+wADm2pjvwADn4IEGwADn4IN8wADn4IPAwADn4GTAAOfggY3AAOfgoDPAAOfgwAB7O8AA5+DAAHs+wADn4MAAe0DAAOfgwAB7QsAA5+DAAHtEwADn4MAAe2bAAOfgwAB7aMAA5+DAAHtqwADn4MAAe2zAAOfgn8zAAObamPLAAOfxg4DAAOfxvVDAAOfxwABJnsAA5/HAAG1cwADn8cAAezjAAOfxwAB7XsAA5/HAAHtgwADn8cAAe2LAAOfxwAB7ZMAA1bzAAH0AwADn+5j0wADn/ADAAOf8wAB888AA5/zAAHz1wADn/MAAfQTAAOf7mO/AAOgBZMAA6AGBxsAA6AGBjcAA6AGDjcAA6AFQwADo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7JLAAIANwADskoKMwADskoccwADskp7cwADsksAAgBXAAOyShwvAAOySwACAGMAA7JKBs8AA7JLAAIAbwADskq1KwADskmHAAOyShEbAAOySwACAIMAA7I+Y9cAA7KLAAE3HwADso4C1wADsP8AAgCLAAOylmPHAAOymwACAI8AA7KZOwADsppwNwADspoDuwADspZj1wADsqwDAAOw/wACAJMAA7K2Y8cAA7K7AAE3HwADsr8AAgCXAAOyvnKjAAOytmO/AAOyywABNx8AA7LPAAIAmwADss8AAgCfAAOyzwACAKMAA7LPAAIAqwADsrZj1wADsuADAAOw/wACAK8AA7LqY8cAA7LvAAE3HwADsvJyowADsvMAAcMLAAOy6mO/AAOy/wABNx8AA7MDAAIAowADswMAAgCrAAOy6mPXAAOzDAMAA7D/AAIAswADsxZjxwADsxsAATcfAAOzHnKjAAOzHwABwwsAA7MWY78AA7MrAAE3HwADsy8AAgCjAAOzLwACAKsAA7MWY9cAA7M4AwADsP8AAgC7AAOzQmO/AAOzRwABH+MAA7NHAAIAwwADs0Jj1wADs1ADAAOw/wACAMsAA7NaY78AA7NfAAE3HwADs2MAAcwTAAOzWmPXAAOzaAMAA7D/AAIA1wADs3JjvwADs3cAATcfAAOzewABzBMAA7NyY9cAA7OAAwADsP8AAgDnAAOzimPHAAOzjwACAOsAA7OPAAE3HwADs5cAAgDvAAOzlwACAPMAA7OXAAIA9wADs4pjvwADs6cAATcfAAOzqwACAPsAA7OrAAIBAwADs6sAAgEHAAOzimPXAAOzuAMAA7D/AAIBDwADs8JjxwADs8cAATcfAAOzywACARMAA7PCY78AA7PTAAE3HwADs9Zy4wADs9cAAgEbAAOz1wACASMAA7PXAAIBKwADs8JjywADs+sAATcfAAOz7wACAS8AA7PvAAIBMwADs8Jj1wADs/sAATcfAAOz/gLXAAOw/wACATcAA7QGY8cAA7QLAAH6CwADtAsAATcfAAO0EwABwwsAA7QTAAHNJwADtAZjywADtB4H2wADtAZjvwADtCcAATcfAAO0KwACATsAA7QrAAHHEwADtCsAAgFHAAO0KwACAU8AA7QGY9cAA7Q8AwADsP8AAgFXAAO0RmPHAAO0SwABNx8AA7RPAAIBWwADtE8AAgFfAAO0RmPXAAO0WAMAA7D/AAIBYwADtGJj1wADtGQDAAOw/wACAWcAA7RuY8cAA7RzAAE3HwADtHcAAgFrAAO0dwACAXMAA7R3AAHYhwADtHcAAfVTAAO0dwABTQcAA7R3AAIBdwADtHcAAgF7AAO0dwACAX8AA7R3AAIBgwADtHcAAgGHAAO0dwACAYsAA7R3AAIBjwADtHcAAgGTAAO0cwACAW8AA7RuY8sAA7SzAAE3HwADtLcAAgHHAAO0twACAc8AA7S3AAIB0wADtLIRCwADtLAvAAO0sCsAA7SwUwADtLMAAgJTAAO0bmO/AAO02wABNx8AA7TfAAIB1wADtN8AAgHbAAO03wACAd8AA7TfAAIB5wADtN8AAgGzAAO03wACAgcAA7TekysAA7TfAAICKwADtN8AAgILAAO03wACAjcAA7TbAAGFuwADtG5j1wADtQwDAAOw/wACAlcAA7UWY8cAA7UbAAE3HwADtR8AAgJbAAO1HwACAl8AA7UfAAICYwADtR8AAgJnAAO1HwACAmsAA7UfAAICbwADtR8AAgKDAAO1HwACAocAA7UbAAICcwADtRsAAgJ3AAO1GwACAnsAA7UbAAICfwADtRsAAdo/AAO1FmPLAAO1VgpTAAO1VlrHAAO1VwACAosAA7VXAAICjwADtVcAAgKTAAO1VwACApcAA7VWDxsAA7UWY78AA7V2WgcAA7V3AAE3HwADtX8AAgKnAAO1fwACAq8AA7V1IwADtXSPAAO1FmPTAAO1kgwvAAO1kwABMe8AA7UWY9cAA7WcAwADsP8AAgK3AAO1pmPHAAO1qgL3AAO1qJ8AA7WrAAH3ewADtaZjvwADtbiPAAO1pmPXAAO1wAMAA7D/AAICvwADtcpj1wADtcwDAAOw/wACAsMAA7XWY9cAA7XYAwADtdZjxwADteMAATcfAAO15wACAscAA7XWY8sAA7XvAAE3HwADtfMAAgLLAAO18wACAs8AA7XzAAIC0wADtfMAAgLXAAO11mO/AAO2BwABNx8AA7YLAAHYDwADtgsAAgLbAAOw/wACAt8AA7YWY8cAA7YbAAIC4wADthsAAgLnAAO2GwACAusAA7YbAAIC7wADthsAAgLzAAO2GwACAvcAA7YbAAIC+wADthsAAgL/AAO2GwACAwMAA7YbAAIDBwADthsAAgMLAAO2GwACAw8AA7YbAAIDEwADthsAAgMXAAO2GwACAxsAA7YbAAIDHwADthsAAgMjAAO2GwACAycAA7YbAAIDKwADthsAAgMvAAO2GwACAzMAA7YbAAIDNwADthsAAgM7AAO2GwACAz8AA7YbAAIDQwADthsAAgNHAAO2GwACA0sAA7YbAAIDTwADthsAAgNTAAO2GwACA1cAA7YbAAIDWwADthsAAgNfAAO2GwACA2MAA7YbAAIDZwADthsAAgNrAAO2GwACA28AA7YbAAIDcwADthsAATcfAAO2swACA3cAA7azAAIDewADthro1wADthsAAgN/AAO2GwACA4MAA7YbAAIDhwADthsAAgOLAAO2GwACA48AA7YbAAIDkwADthsAAfrDAAO2GwACA5cAA7YbAAIDmwADthsAAgOfAAO2GwACA6MAA7YbAAIDpwADthpWSwADthsAAgOrAAO2GwACA68AA7YbAAIDswADthsAAgO3AAO2GwACA7sAA7YbAAIBbwADthsAAgO/AAO2GqW7AAO2FmO/AAO3Fl1HAAO3FwACA9sAA7cXAAID5wADtxcAAgP3AAO3FwACBC8AA7cXAAE3HwADty8AAgQ7AAO3LwAB2A8AA7cWe4cAA7cXAAIEVwADtxcAAgRbAAO3FntzAAO3FwACBJ8AA7cWCjsAA7cWh88AA7cWEUsAA7cXAAIE4wADtxcAAgTnAAO3FwACBOsAA7cXAAIEywADtxcAAgQbAAO3FwACBCMAA7cWCjMAA7cXAAHHvwADtxcAAgULAAO3FwACBQcAA7cXAAIE+wADtxcAAgRTAAO3FwACBPMAA7cXAAIFGwADtxcAAgUfAAO3FpbLAAO3FwACBScAA7cXAAIFLwADtxcAAgU3AAO3FwACBUMAA7cXAAIFSwADtxcAAgVXAAO3FwACBWcAA7cXAAIDzwADtxcAAgSrAAO3FwACBI8AA7cXAAIEowADtxcAAgS3AAO3FwACBMMAA7cXAAIEBwADtxcAAgQLAAO3FwACBA8AA7cXAAIESwADtxcAAgRrAAO3FwACBM8AA7cXAAIE2wADtxcAAgTfAAO3FwACBa8AA7cXAAIEHwADtxcAAgUrAAO3FwACBT8AA7cXAAIFMwADtxcAAgVHAAO3FwACBWMAA7cXAAIFawADthZjywADuA8AAgRzAAO4DwACBHcAA7gPAAIEewADuA8AAgR/AAO4DwACBIMAA7gPAAIEhwADuA8AATcfAAO4KwACAtMAA7grAAIC1wADuA5aywADuA56pwADuA8AAdo/AAO4DnqjAAO2FmPXAAO4RwACA8MAA7hHAAIDxwADuEYH6wADuEcAAcWTAAO4RwABNx8AA7hbAAIDywADuEcAAgPTAAO4RwABxWsAA7D/AAIF1wADuGpjxwADuG8AATcfAAO4cwACBdsAA7hzAAHDCwADuHMAAgXfAAO4cwACBeMAA7hqY78AA7iGe4cAA7iGB+sAA7iGCjMAA7iHAAE3HwADuJcAAeMHAAO4lwACBfcAA7iXAAIF7wADuJcAAgXzAAO4amPLAAO4qlrLAAO4qwAB2j8AA7hqY88AA7i3AAE3HwADuLsAAeYPAAO4amPXAAO4wAMAA7D/AAIF+wADuMpjxwADuM8AATcfAAO40wACBdsAA7jTAAHDCwADuNMAAgX/AAO40wACBgMAA7jTAAIGBwADuMpjvwADuOsAAgQvAAO46wACA/cAA7jqB+sAA7jrAAIDpwADuOp7cwADuOoKOwADuOoKMwADuOsAAce/AAO46wACBS8AA7jrAAIFNwADuOsAAgVDAAO46wABNx8AA7kbAAHjBwADuRsAAgX3AAO5GwACBfMAA7kbAAIF7wADuMpj0wADuS8AATcfAAO5MwACBhcAA7kzAAIGGwADuMpjywADuT5aywADuT56pwADuT8AAdo/AAO5PnqjAAO5PwACBicAA7k/AAIGCwADuMpjzwADuVsAAgYnAAO5WwACBgsAA7lbAAE3HwADuWcAAeYPAAO4ymPXAAO5bAMAA7D/AAIGLwADuXZjxwADuXsAATcfAAO5fwACBdsAA7l2Y78AA7mGe4cAA7mGB+sAA7mGCjMAA7l2Y8sAA7mWWssAA7mXAAHaPwADuXZjzwADuaMAATcfAAO5pwAB5g8AA7l2Y9cAA7msAwADsP8AAgY3AAO5tmPHAAO5ugfnAAO5uwAB9kMAA7m6DYsAA7m6Cj8AA7m7AAHiewADubsAAgY7AAO5tmO/AAO51nG3AAO51gozAAO51go7AAO51oAHAAO51pMzAAO5tmPXAAO57AMAA7D/AAIGUwADufZjxwADufsAATcfAAO5/iBbAAO5/vQHAAO5/wABwwsAA7n/AAIGVwADuf8AAgZbAAO5/l5HAAO5/nKjAAO5/wACBl8AA7n2Y9MAA7ojAAE3HwADuicAAgYXAAO6JwACBhsAA7n2Y8sAA7ozAAE3HwADujcAAgHLAAO6MwABS7cAA7oygAcAA7oyWssAA7ozAAHaPwADujJ6pwADujJ6owADufZjvwADulYH6wADulYKOwADulYIDwADulYQWwADulaAtwADulVbAAO6VnGvAAO6VnG3AAO6VhEbAAO6VgozAAO6VwACAiMAA7pXAAIFLwADulcAAgU3AAO6VwACBUMAA7pXAAE3HwADupMAAgZvAAO6kwACBj8AA7qTAAIGawADupMAAgXvAAO6kwACBfMAA7qTAAHG2wADupMAAcbfAAO6kwABxE8AA7qTAAIGRwADupMAAgZLAAO6kwACBk8AA7qTAAIGQwADufZjzwADuscAAUu3AAO6xwABNx8AA7rPAAHmDwADufZj1wADutQDAAOw/wACBnMAA7reY8cAA7rjAAE3HwADuucAAgXbAAO65wABwwsAA7rnAAIF/wADuucAAgYDAAO63mO/AAO6+nuHAAO6+gfrAAO6+gozAAO6+ofPAAO6+wACBJ8AA7r7AAIFVwADuvsAAgVnAAO6+wABNx8AA7sbAAHjBwADuxsAAgX3AAO7GwACBfMAA7sbAAIF7wADuvsAAgU3AAO6+wACBUMAA7reY8sAA7s3AAIGJwADuzcAAgYLAAO7NwACBncAA7s3AAIGewADuzcAAgZ/AAO7NwACBoMAA7s2WssAA7s3AAHaPwADut5jzwADu1sAAgYnAAO7WwACBgsAA7tbAAIGdwADu1sAAgZ7AAO7WwACBn8AA7tbAAIGgwADut5j1wADu3QDAAOw/wACBocAA7t+Y8sAA7uDAAE3HwADu4YgWwADu4MAAgabAAO7gwACBqMAA7t+Y78AA7uXAAIGiwADu35j1wADu5wDAAOw/wACBqsAA7umY8cAA7uqYe8AA7urAAIGrwADu6sAAgazAAO7pmO/AAO7uwACBC8AA7u7AAICIwADu7sAATcfAAO7xwACBscAA7vHAAIHAwADu7sAAgbPAAO7uwACBtcAA7u7AAIG2wADu7sAAgajAAO7uwACBosAA7u6q3MAA7u7AAIG7wADu7sAAgb3AAO7pmPLAAO78wACBpsAA7umY9cAA7v7AAE3HwADu/4C1wADsP8AAgcLAAO8BmPHAAO8CwACBw8AA7wGY78AA7wTAAE3HwADvBcAAgcXAAO8FwACB3MAA7wXAAIHGwADvBMAAgcjAAO8EwACBysAA7wTAAIHNwADvBMAAgc7AAO8EwACB0cAA7wTAAIHSwADvBMAAgdXAAO8EwACB1sAA7wTAAIHZwADvAZj1wADvEgDAAOw/wACB38AA7xSY8cAA7xXAAE3HwADvFsAAgeDAAO8WwACB4cAA7xbAAIHiwADvFJjywADvGsAATcfAAO8bwACB48AA7xvAAIHmwADvG8AAgenAAO8awACB5cAA7xrAAIHowADvGsAAb37AAO8awACB68AA7xrAAIHtwADvGsAAge/AAO8awACB8sAA7xSY78AA7ybAAE3HwADvJ8AAgfDAAO8nwACB88AA7xSY9cAA7yrAAE3HwADvK4C1wADsP8AAgfbAAO8tmPHAAO8uwABNx8AA7y/AAIF2wADvLZjvwADvMcAAgffAAO8xwACA6cAA7zGBw8AA7zGDpcAA7zHAAIH4wADvMcAAce/AAO8xg5HAAO8tmPLAAO85wAB2j8AA7zmWssAA7zmeqMAA7zmeqcAA7y2Y9cAA7z4AwADsP8AAgfnAAO9AmPXAAO9BAMAA7D/AAIH6wADvQ5jxwADvRLo1wADvRMAAgODAAO9EwACA4sAA70TAAIDowADvRMAAgOfAAO9EwACA78AA70OY78AA70vAAIH3wADvS4HDwADvS8AAgUfAAO9Ll1HAAO9Lg6XAAO9LwACB+MAA70vAAIEVwADvS8AAce/AAO9LwACBQcAA70vAAIFCwADvS4ORwADvS8AATcfAAO9XwACCAcAA71fAAIIPwADvV8AAgfzAAO9XwACB/cAA71fAAIIAwADvV8AAgf7AAO9XwACB/8AA71fAAIIHwADvV8AAggXAAO9XwACCCMAA71fAAIIJwADvV8AAgg3AAO9DmPLAAO9kwAB2j8AA72TAAIDpwADvZJaywADvZJ6owADvZJ6pwADvQ5j1wADvagDAAOw/l37AAO9smPTAAO9tAMAA72yY78AA729WwADvb5eiwADvb5ezwADvb8AAghvAAO9vgkbAAO9smPLAAO91YcAA73WBVcAA73WDt8AA7D/AAIIcwADveZjxwADvesAATcfAAO97wACCHcAA73vAAIIewADve51cwADve5h+wADveZjvwADvgFbAAO+Al6LAAO+AwABNx8AA74PAAEQOwADvg8AAgh/AAO+Al7PAAO+AwACCG8AA74CCRsAA73mY8sAA74lhwADviYFVwADviYO3wADveZj1wADvjQDAAOw/wACCIMAA74+Y8cAA75DAAE3HwADvkZ1cwADvkcAAgiHAAO+PmO/AAO+UVsAA75SXosAA75SXs8AA75TAAIIbwADvlIJGwADvj5jywADvmmHAAO+agVXAAO+ag7fAAO+PmPXAAO+eAMAA7D/AAIIjwADvoJjvwADvoSPAAO+gmPXAAO+jAMAA7D/AAIIkwADvpZjxwADvpsAAgiXAAO+mIsAA76aB9cAA76WY78AA76ojwADvpZj1wADvrADAAOw/wACCKcAA766Y8cAA76+Cj8AA769qwADvrpj1wADvsgDAAOw/wACCKsAA77SY78AA77XAAIIrwADvtJj1wADvtwDAAOw/wACCLcAA77mY8cAA77rAAIIuwADvusAAgi/AAO+6wACCMcAA77rAAIIywADvusAAgjTAAO+6wACCNcAA77rAAII3wADvusAAgjjAAO+6wACCOsAA77rAAII7wADvusAAgj3AAO+6wACCPsAA77rAAIJAwADvusAAgkHAAO+6wACCQ8AA77rAAIJEwADvusAAgkbAAO+6wACCR8AA77rAAIJJwADvusAAgkrAAO+6wACCTMAA77rAAIJNwADvusAAgk/AAO+6wACCUMAA77rAAIJSwADvusAAglPAAO+6wACCVcAA77rAAIJWwADvuZj1wADv1wDAAOw/wACCWMAA79mY8cAA79rAAIA2wADv2oTawADv2sAAgDfAAO/apXzAAO/awACAM8AA79qgFsAA79q3fsAA79mY8sAA7+KI8cAA7+KB+MAA79mY9cAA7+UAwADv5cAATcfAAO/nwACCWcAA7D+vwsAA7+mY8cAA7+rAAIA2wADv6oTawADv6sAAgDfAAO/qpXzAAO/qwACAM8AA7+q3fsAA7+qgFsAA7+mY8sAA7/KI8cAA7/KB+MAA7+mY9cAA7/UAwADv9cAATcfAAO/3wACCWcAA7D/AAIJawADv+ZjxwADv+sAAgDbAAO/6hNrAAO/6wACAN8AA7/qlfMAA7/rAAIAzwADv+rd+wADv+qAWwADv+ZjvwADw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wADxUsAAgtvAAPFSwACC3MAA8VLAAH1FwADxUq+7wADxUsAAgt3AAPFShErAAPFSI8AA8VLAAIMywADxSpj1wADxjADAAPGMwACCZsAA7D/AAIMzwADxj5j0wADxkADAAPGPmO/AAPGSwACADcAA8ZKCjMAA8ZKHHMAA8ZKe3MAA8ZLAAIAVwADxkocLwADxksAAgBjAAPGSgbPAAPGSwACAG8AA8ZKtSsAA8ZJhwADxkoRGwADxksAAgCDAAOw/wACDNMAA8aCY8cAA8aHAAE3HwADxosAAgzXAAPGiwACDNsAA8aLAAIM3wADxosAAgFrAAPGiwACCp8AA8aFOwADxocAAgzjAAPGhwABII8AA8aCY78AA8avAAE3HwADxrMAAgzrAAPGswACDOcAA8azAAINMwADxrMAAgcDAAPGswACDPcAA8azAAIIBwADxq4KMwADxq4HDwADxq4ccwADxq8AAgt/AAPGrntzAAPGrwACB+MAA8avAAIAVwADxq4OlwADxq4cLwADxq8AAguDAAPGrwACAGMAA8auDkcAA8auBu8AA8auBwsAA8auBs8AA8avAAILhwADxq8AAgBvAAPGrwACC4sAA8autSsAA8avAAILjwADxq2HAAPGrg6PAAPGrhEbAAPGrwACC5MAA8avAAIAgwADxq8AAgubAAPGrwACC5cAA8avAAILnwADxoJj1wADxzwDAAOw/wACDUsAA8dGY8cAA8dKBvcAA8dLAAINTwADx0sAAg1XAAPHSwACDVsAA8dKWfsAA8dLAAINYwADx0py+wADx0sAAd1jAAPHSwABNx8AA8dvAAINawADx25KBwADx0ZjvwADx3sAATcfAAPHfwACDW8AA8d4jwADx0Zj1wADx4sAATcfAAPHjhnPAAOw/wACDXMAA8eWY8cAA8ebAAE3HwADx55KBwADx58AAg13AAPHnwACDXsAA8efAAINfwADx58AAgF3AAPHnqBXAAPHnwACDYMAA8eavkcAA8ebAAH59wADx5sAAg2HAAPHmgpTAAPHmgcHAAPHmmN7AAPHlmO/AAPH1wABNx8AA8fbAAINjwADx9sAAg2bAAPH2wACDZ8AA8fXAAINlwADx9cAASq/AAPH1I8AA8fXAAINtwADx5Zj1wADx/sAATcfAAPH/hnPAAPH/wACDYsAA7D+CJMAA8gKY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83fAAIJzwADzdZjywADzek7AAPN6wACCcMAA83WY78AA830jwADzfYOgwADzfYOhwADzfcAAfUTAAPN9wAB96sAA833AAIRZwADzfazHwADzfcAATcfAAPOFwACClMAA84XAAIKWwADzhcAAgovAAPOFwACEXcAA833AAIJtwADzfcAAgm/AAPN9gknAAPN9wACEWsAA833AAIMywADzdZj1wADzjwDAAPOPwACCZsAA7D/AAIRlwADzkpjywADzk8AATcfAAPOUwACAS8AA85TAAIBMwADzkpjvwADzl8AATcfAAPOYwACASsAA85KY9cAA85oAwADsP8AAhGbAAPOcmPHAAPOdwABNx8AA857AAIRnwADznJjywADzoF7AAPOcmPPAAPOiwABFH8AA85yY78AA86SIycAA86TAAIRqwADzpK+2wADzpMAAgmfAAPOkwACCaMAA86TAAIJqwADzpMAAgtDAAPOkwABKr8AA86TAAINlwADzpMAAg4bAAPOkwACDi8AA86TAAIOqwADzpMAAg6bAAPOkwACDgcAA86TAAIONwADzpMAAhFjAAPOkwACEaMAA86TAAIRpwADznJj1wADztwDAAOw/wACEa8AA87mY8cAA87rAAE3HwADzu8AAcKTAAPO7wACEbMAA87vAAIRtwADzu8AAhG7AAPO7wACEb8AA87vAAIRwwADzu8AAg2fAAPO7wACDY8AA87vAAIRxwADzu8AAhHLAAPO7wACEc8AA87vAAIR0wADzu8AAhHXAAPO7wACEdsAA87vAAIMEwADzu8AAhHfAAPO7wACEeMAA87mY78AA882vtsAA883AAIJnwADzzcAAgmjAAPPNwACCasAA883AAILQwADzzcAASq/AAPPNwACDZcAA883AAIOGwADzzcAAg4vAAPPNwACDqsAA883AAIOmwADzzcAAg4HAAPPNwACDjcAA883AAIRYwADzzcAAhGjAAPPNwACEacAA87mY9cAA894AwADsPwnAAPPgmPHAAPPhwABNx8AA8+LAAIR5wADz4sAAhHrAAPPiwACEe8AA8+LAAIR8wADz4sAAhH3AAPPiwACEfsAA8+HAAIR/wADz4cAAhIHAAPPhgzvAAPPhwACEg8AA8+HAAISFwADz4cAAhIfAAPPgmPLAAPPvwACEicAA8++ZkcAA8+/AAISK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3cABAWzAAIzewAEBbMAAjN/AAQFswACM4MABAWXAAIvowAEBZZmgwAEBZYNBwAEBZYG8wAEBZcAAi+DAAQFllrDAAQFllrHAAQFllrLAAQFlTsABAWWWs8ABAWWWtMABAWWeu8ABAWWDHcABAWXAAH3ZwAEBZcAAi+bAAQFlEsABAWWDxsABAVmY78ABAYKcHMABAYPAAIzhwAEBg8AAjOTAAQGDwACM5sABAYPAAIybwAEBg8AAjOfAAQGCgdrAAQGCnN7AAQGCntnAAQGCiHXAAQGCbMABAYKDQsABAYKBv8ABAYJIwAEBgiPAAQFZmPXAAQGSAMAA977AAIzswAEBlJjxwAEBlZwcwAEBlrf3wAEBlJjywAEBmBLAAQGUmPXAAQGaAADAAJPIwAEBnJjwwAEBncAAjTHAAQGdwACNMsABAZ3AAI00wAEBnJjxwAEBocAAk8jAAQGiwACRwcABAaLAAJHCwAEBosAAkcPAAQGiwACRxMABAaLAAIZbwAEBosAAkcXAAQGiwACRxsABAaLAAJHHwAEBosAAhlrAAQGiwACRyMABAaLAAJHJwAEBosAAkcrAAQGiwACRy8ABAaLAAJHMwAEBnJjvwAEBscAAk8jAAQGywACRzcABAZzAAI01wAEBtJjxwAEBtcAAjTbAAQG1wACNN8ABAbXAAI04wAEBtJjywAEBucAAjTnAAQG5lrLAAQG5wAB2j8ABAbSY78ABAb2e4cABAb3AAI06wAEBvYKMwAEBvcAAjT3AAQG0mPTAAQHCwACNO8ABAbSY88ABAcTAAI08wAEBnMAAjT7AAQHGmPHAAQHHpMfAAQHHwABR1cABAcfAAI0/wAEBx7WFwAEBxpj1wAEBzADAAQGcwACNQMABAc6Y8cABAc/AAI1BwAEBz8AAjULAAQHPwACNRMABAc/AAI1GwAEBz8AAjUjAAQHPwACNSsABAc/AAI1MwAEBz8AAjU7AAQHPwACNUMABAc/AAI1SwAEBz8AAjVPAAQHPwACNVcABAc/AAI1XwAEBz8AAjVnAAQHPwACNW8ABAc/AAI1dwAEBz8AAjV/AAQHPwACNYcABAc/AAI1iwAEBz8AAjWTAAQHPwACNZsABAc/AAI1nwAEBz8AAjWjAAQHPwACNacABAc/AAI1rwAEBz8AAjW3AAQHPwACNb8ABAc/AAI1xwAEBz8AAjXPAAQHPwACNdcABAc/AAI12wAEBz8AAjXjAAQHPwACNecABAc/AAI17wAEBz8AAjX3AAQHPwACNfsABAc/AAI2AwAEBz8AAjTbAAQHPwACNgsABAc/AAI2EwAEBz8AAjYbAAQHPwACNiMABAc/AAI2KwAEBz8AAjYzAAQHPwACNjsABAc/AAI2PwAEBz8AAjZDAAQHPwACNksABAc/AAI2UwAEBz8AAjZbAAQHPwACNmMABAc/AAI2awAEBz8AAjZzAAQHPwACNnsABAc/AAI2gwAEBz8AAjaLAAQHPwACNpMABAc/AAI2mwAEBz8AAjajAAQHPwACNqsABAc/AAI2swAEBz8AAja7AAQHPwACNsMABAc/AAI2ywAEBz8AAjbTAAQHPwACNtsABAc/AAI24wAEBz8AAjbrAAQHPwACNvMABAc/AAI2+wAEBz8AAjcDAAQHPwACNwsABAc/AAI3EwAEBz8AAjcbAAQHPwACNyMABAc/AAI3KwAEBz8AAjczAAQHPwACNzsABAc/AAI3QwAEBz8AAjdLAAQHPwACN1MABAc/AAI3WwAEBz8AAjdjAAQHPwACN2sABAc/AAI3cwAEBz8AAjd7AAQHPwACN4MABAc/AAI3iwAEBz8AAjeTAAQHPwACN5sABAc/AAI3owAEBz8AAjerAAQHPlVXAAQHPwACN7cABAc/AAI3vwAEBz8AAjfHAAQHPwACN88ABAc/AAI31wAEBz8AAjffAAQHPwACN+MABAc/AAI36wAEBz8AAjfvAAQHPwACN/cABAc/AAI3+wAEBz8AAjgDAAQHPwACOAcABAc/AAE5TwAEBz8AAif7AAQHPwACOA8ABAc+WscABAc+WssABAc+eq8ABAc/AAI4EwAEBz56lwAEBz8AAjgXAAQHOmO/AAQJDS8ABAkOAlsABAkNWwAECQ5d5wAECQ4RewAECQ5dSwAECQ4P9wAECQ8AAjgbAAQJDgkbAAQHOmPXAAQJNAMABAZzAAI4HwAECT5j0wAECUADAAQJPmO/AAQJSgwvAAQJSI8ABAk+Y8sABAlWAlsABAlWa6sABAZzAAI4LwAECWJjywAECWbS0wAECWbozwAECWJjvwAECXMAAgIjAAQJYmPPAAQJewABw98ABAliY9cABAmAAwAEBnJ6QwAECYpjxwAECY4GywAECY8AAjg3AAQJjsfDAAQJjwACOD8ABAmOCZMABAmPAAI4RwAECY4J4wAECY71ywAECYpj0wAECbADAAQJimO/AAQJugwvAAQJimPLAAQJwwAB92MABAnDAAI4VwAECcMAAjhbAAQJwwAB9pcABAZzAAI4XwAECdZjxwAECdoC9wAECdoCWwAECdsAAif7AAQJ2wACOGMABAna3/sABAnZOwAECdsAAeQXAAQJ2wACOGcABAnWY9MABAn8AwAECf8AAjhrAAQJ1mO/AAQKCI8ABAZzAAI4bwAEChJjywAEChcAAjgTAAQKFlpzAAQKFgKzAAQKFwACOHMABAoWeqsABAoXAAI4dwAEChZ6lwAEChcAAhXDAAQKFwACOHsABAoXAAI4fwAEChZ6nwAEChYNXwAEChJj1wAECkgDAAQGcwACOIMABApSY8cABApXAAI4EwAEClYNYwAEClYNcwAEClZ6lwAEClcAAjiHAAQKVnqbAAQKUmPLAAQKcnqrAAQKcwACOHcABApyep8ABApSY78ABAqC/fsABAqDAAI4iwAEClJj1wAECowDAAQGcnpHAAQKlmPHAAQKmwACOJMABAqbAAI4lwAECpsAAjifAAQKmwACOKMABAqbAAI04wAECpsAAjirAAQKmwAB+GsABAqbAAI4rwAECpsAAjizAAQKlmPTAAQKwAMABAqWY78ABArKli8ABArLAAI4uwAECsppBwAECsoNVwAECssAAfZ7AAQKynqLAAQKyl67AAQKywACOL8ABArLAAEgJwAECssAAjjDAAQKyna7AAQKywACOMcABArKD78ABArLAAI4ywAECssAAjjTAAQKywACOOMABArLAAI46wAECsoKMwAECpZjzwAECxcAAjjPAAQLFwACON8ABAsXAAI45wAECxcAAjjvAAQGcnpLAAQLKmPHAAQLLnqXAAQLLwACOPMABAsvAAI49wAECy8AAjgTAAQLLnqbAAQLKmPLAAQLRlpzAAQLRgKzAAQLRnqrAAQLRwACOHcABAtGgAcABAtGep8ABAsqY78ABAtiCjMABAsqY9cABAtoAwAEBnMAAjj7AAQLcmPLAAQLdg1jAAQLdg1zAAQLdwACOBMABAt3AAI4/wAEC3Z6lwAEC3cAAjkDAAQLdwACOQcABAt2eqsABAt3AAI4dwAEC3cAAhXDAAQLdnqfAAQLcmO/A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BG7AAJPIwAEEb8AAjzHAAQRvwACPPcABBG6/fsABBG6B+sABBG7AAI4iwAEEXZj1wAEEdQDAAQGcwACPUMABBHeY78ABBHiI8sABBHi1jcABBHeY9cABBHsAwAEBnMAAj1HAAQR9mPHAAQR+wACTyMABBH+II8ABBH2Y78ABBIFWwAEEgYKMwAEEfZj1wAEEhADAAQGcwACEF8ABBIaY8cABBIfAAJPIwAEEiIgjwAEEiMAAhBjAAQSIwACEGcABBIjAAIQawAEEiMAAby/AAQSIwACEG8ABBIjAAHErwAEEhpjvwAEEkFbAAQSQnGvAAQSQnG3AAQSQhEbAAQSQgozAAQSQwACTyMABBJbAAIQfwAEElsAAhCDAAQSWwACEIcABBIaY8sABBJqgAcABBJrAAJPIwAEEnMAAcMLAAQSGmPXAAQSeAMABAZzAAIQiwAEEoJjxwAEEocAAk8jAAQSiwACEI8ABBKLAAIQkwAEEoJjywAEEpcAAUu3AAQSgmPPAAQSnwABS7cABBKCY78ABBKmCjsABBKmgLcABBKmCA8ABBKmEFsABBKCY9cABBK4AwAEBnMAAj1PAAQSwmPHAAQSxwACTyMABBLLAAI9UwAEEssAAj1XAAQSyruLAAQSywACPVsABBLGeqsABBLCY8sABBLjAAI4EwAEEuJ6lwAEEuJ6mwAEEuMAAUu3AAQS4wACTyMABBL3AAI9cwAEEsJjzwAEEv8AAjgTAAQS/nqXAAQS/nqbAAQSwmO/AAQTDVsABBMOCjsABBMPAAJPIwAEExsAAj1vAAQSwmPXAAQTIAMABAZzAAI9dwAEEypjxwAEEy8AAk8jAAQTMwACPXsABBMzAAI9fwAEEzMAAjxvAAQTMwACPL8ABBMzAAI9gwAEEzMAAj2HAAQTKmPLAAQTTwACTyMABBNTAAI9cwAEE08AAjh3AAQTTg1jAAQTTg1zAAQTTnqfAAQTTwACOIcABBMqY88ABBNuDWMABBNuDXMABBNvAAI4hwAEEypjvwAEE379+wAEE38AAjiLAAQTfwACTyMABBOLAAI9bwAEE4sAAj2TAAQTKmPXAAQTlAMABAZzAAI+TwAEE55jxwAEE6JacwAEE6ICswAEE6MAAjh3AAQTowACTyMABBOzAAH36wAEE7MAAjzPAAQTswACPlMABBOzAAI9DwAEE7MAAj5XAAQTswACPlsABBOzAAI+XwAEE7MAAjzDAAQTnmPLAAQT1oAHAAQT1wACOPcABBPXAAI48wAEE9Z6nwAEE55jvwAEE+oKMwAEE+sAAk8jAAQT8wACPmcABBPzAAHETwAEE/MAAj5zAAQT8wACPW8ABBOeY88ABBQHAAI49wAEFAcAAjjzAAQTnmPXAAQUEAMABAZzAAI+hwAEFBpjxwAEFB8AAk8jAAQUIwACPosABBQaY78ABBQpWwAEFCsAAbzHAAQUKgozAAQUGmPXAAQUOAMABAZzAAI+jwAEFEJjxwAEFEcAAk8jAAQUSwACPpMABBRLAAI+lwAEFEsAAhBjAAQUSmH7AAQUSnVzAAQUSwACPp8ABBRLAAI+owAEFEsAAj6nAAQUSwACPqsABBRLAAI+rwAEFEsAAj6zAAQUSwACPrcABBRLAAI+uwAEFEsAAj6/AAQURwAB9kMABBRHAAI+mwAEFEcAAj1nAAQURwACO0cABBRHAAI4EwAEFEcAAj1jAAQUQmO/AAQUnwACOI8ABBSecbcABBSeCjMABBSfAAI9rwAEFJ8AAk8jAAQUswACPt8ABBSzAAI+zwAEFLMAAdJ7AAQUswACPtMABBRCY8sABBTGgAcABBRCY88ABBTPAAIA2wAEFEJj1wAEFNQDAAQGcwACPvcABBTeY8cABBTiD1sABBTjAAJPIwAEFOsAAgXbAAQU6wACPoMABBTrAAIUuwAEFOsAAj77AAQU6nKjAAQU6wAB9+sABBTrAAI+/wAEFOsAAj8DAAQU6wACPwcABBTrAAI/CwAEFOsAAj8PAAQU4wABII8ABBTeY78ABBUeh88ABBUfAAI4iwAEFR8AAgIjAAQVHgozAAQVHwACP2MABBUfAAGM5wAEFR8AAj93AAQVHwACP0MABBTeY8sABBVCep8ABBTeY9cABBVIAwAEBnMAAj97AAQVUmPHAAQVVwACFL8ABBVXAAIzzwAEFVJj1wAEFWADAAQGcwACP38ABBVqY8cABBVuD1sABBVuWscABBVuWssABBVvAAI/bwAEFW4JXwAEFW8AAk8jAAQVhwACP4MABBWHAAI/hwAEFYcAAj+LAAQVhwABj/MABBWHAAI/jwAEFWpjywAEFZ4FVwAEFZ8AAj+TAAQVnwACP5cABBVqY78ABBWvAAI/mwAEFa8AAk8jAAQVtwACP58ABBWvAAI/owAEFa8AAj+nAAQVrwACP6sABBWuCjMABBWvAAIELwAEFWpj1wAEFdADAAQGcwACP9cABBXaY8cABBXfAAJPIwAEFeMAAj/bAAQV4wACP98ABBXjAAI/4wAEFeMAAj/nAAQV4wACPzcABBXjAAIUuwAEFeMAAjz3AAQV4wACPScABBXjAAI/6wAEFeMAAj/vAAQV4wACP78ABBXjAAI/8wAEFd8AAjirAAQV3wAB+GsABBXfAAI4rwAEFd8AAjizAAQV2mPLAAQWJwACNOMABBXaY88ABBYvAAI04wAEFi8AAjjvAAQWLwACOM8ABBYvAAI45wAEFi8AAjjfAAQV2mO/AAQWRpYvAAQWRwACOLsABBZGaQcABBZGDVcABBZHAAH2ewAEFkZ6iwAEFkZeuwAEFkcAAji/AAQWRwABICcABBZHAAI4wwAEFkYPvwAEFkcAAjjLAAQWRna7AAQWRwACOMcABBZGCjMABBZHAAI40wAEFkcAAjjrAAQWRwACTyMABBaPAAI/9wAEFo8AAjzjAAQWjwACP0cABBaPAAI85wAEFo8AAj+3AAQWjwACP/sABBaPAAI/0wAEFo8AAkATAAQWjwACPRMABBaPAAI9CwAEFo8AAj0fAAQWjwACPRsABBaPAAJAJwAEFdpj1wAEFsQDAAQGcwACQF8ABBbOY9cABBbQAwAEFs5jxwAEFtsAAk8jAAQW3wACAscABBbOY8sABBbnAAJPIwAEFusAAgLLAAQW6wACAs8ABBbrAAIC0wAEFusAAgLXAAQWzmO/AAQW/wACTyMABBcDAAHYDwAEFwMAAgLbAAQGcwACQGMABBcOY8cABBcTAAJPIwAEFxcAAkBnAAQXFwACQGsABBcXAAJAbwAEFxcAAkBzAAQXFwACQHcABBcXAAIF2wAEFxcAAjx7AAQXFwACPvsABBcXAAGUZwAEFxZyowAEFxcAAkB7AAQXFwACPw8ABBcOY78ABBdLAAJAiwAEF0sAAgIjAAQXSwACOIsABBdLAAJPIwAEF1sAAdgPAAQXDmPLAAQXYwACQI8ABBdiep8ABBdjAAJPIwAEF28AAkCXAAQXbwACQJsABBdvAAI9jwAEF28AAkCfAAQXbwACAtMABBdvAAIC1wAEFw5j1wAEF4gDAAQGcwACQMsABBeSY9cABBeUAwAEF5ZwtwAEF54ZzwAEF5JjxwAEF6cAAk8jAAQXqwACAscABBeSY8sABBezAAJPIwAEF7cAAgLLAAQXtwACAs8ABBe3AAIC0wAEF7cAAgLXAAQXkmO/AAQXywACTyMABBfPAAHYDwAEF88AAgLbAAQGcwACQM8ABBfaY8cABBffAAJPIwAEF+MAAkDTAAQX4wACP+8ABBfjAAI/AwAEF+MAAjyLAAQX4wACQNcABBfjAAJA2wAEF+MAAkDfAAQX4wACQOMABBfjAAHDCwAEF98AAjTbAAQX3wACNOcABBffAAI03wAEF98AASCPAAQX2mO/AAQYGnuHAAQYGwACNOsABBgbAAJPIwAEGCcAAkDnAAQYJwACDOsABBgnAAJAhwAEGCcAAjznAAQYJwACQIMABBgnAAJAfwAEGCcAAdgPAAQYGgfrAAQYGgozAAQYGwACNPcABBfaY8sABBhTAAI04wAEGFJaywAEGFMAAdo/AAQYUwACTyMABBhjAAI8mwAEGGMAAgLTAAQYYwACAtcABBfaY88ABBhzAAI04wAEGHMAAjTzAAQX2mPXAAQYfwACTyMABBiCAtcABBh/AAI07wAEBnMAAkEPAAQYjmPHAAQYkwACQRMABBiTAAJBFwAEGJMAAkAbAAQYjmPXAAQYoAMABBii7qMABAZzAAIoDwAEGK5jxwAEGLJaxwAEGLJaywAEGLMAAjkzAAQYswACBycABBizAAI+ewAEGK5jywAEGMsAAj8rAAQYrmPXAAQY0AMABBjS7qMABAZzAAJBJwAEGN5jxwAEGOJ6owAEGOJ6pwAEGOMAAgOfAAQY3mO/AAQY8wAB9RMABBjeY9cABBj4AwAEBnMAAkErAAQZAmPHAAQZBwACTyMABBkLAAI8awAEGQsAAgXbAAQZAmO/AAQZFgfrAAQZFgo7AAQZFggPAAQZFhBbAAQZFoC3AAQZFVsABBkWca8ABBkWcbcABBkXAAICIwAEGRYRGwAEGRYKMwAEGRcAAgUvAAQZFwACBTcABBkXAAIFQwAEGRcAAk8jAAQZUwAB2A8ABBkCY8sABBlbAAFLtwAEGVqABwAEGVpaywAEGVsAAdo/AAQZWnqjAAQZWnqnAAQZAmPPAAQZdwABS7cABBkCY9cABBl8AwAEBnMAAkEvAAQZhmPHAAQZiwACTyMABBmPAAJBMwAEGYsAAkE3AAQZiwACQTsABBmLAAJBPwAEGYZj0wAEGaJ1NwAEGYZjvwAEGaiPAAQZhmPXAAQZsAMABAZzAAJBSwAEGbpjxwAEGb8AAjjbAAQZvwACONcABBm+bq8ABBm/AAJBTwAEGb8AAj0vAAQZvwACPSsABBm/AAI9MwAEGb8AAj03AAQZumPLAAQZ4gbzAAQZumO/AAQZ6wACPzsABBm6Y9cABBnwAwAEBnMAAkFTAAQZ+mPHAAQZ/gKzAAQZ+mO/AAQaBs7vAAQaBwACPzsABBn6Y9cABBoQAwAEBnMAAkFfAAQaGmPHAAQaHlrHAAQaHlrLAAQaGmO/AAQaKs7vAAQaKwACPzsABBoaY9cABBo0AwAEBnMAAkFnAAQaPmPLAAQaQgbzAAQaPmO/AAQaSwACPzsABBpLAAJBYwAEGj5j1wAEGlQDAAQGcwACQWsABBpeY8cABBpjAAI5MwAEGmMAAgcnAAQaXmPLAAQabgbzAAQaXmO/AAQadwACNT8ABBp3AAI/OwAEGncAAkFjAAQaXmPXAAQahAMABAZzAAJBbwAEGo5jxwAEGpMAAjkzAAQakwACBycABBqOY8sABBqeBvMABBqOY78ABBqnAAI1PwAEGqcAAj87AAQapwACQWMABBqOY9cABBq0AwAEBnMAAkGnAAQavmPHAAQawg1jAAQawlpzAAQawhGDAAQavmPXAAQa0AMABAZzAAJBqwAEGtpjxwAEGt8AAkGvAAQa3wACQbMABBrfAAJBtwAEGt8AAkG7AAQa3gnrAAQa3wABI9cABBrfAAJBvwAEGtpj1wAEGvwDAAQGcwACQcMABBsGY8cABBsLAAJBxwAEGwsAAjlrAAQbCwACOWcABBsLAAI6ewAEGwp38wAEGwp4OwAEGwsAAkHLAAQbCnj7AAQbCwABKssABBsLAAEp4wAEGwp4NwAEGwsAAkHPAAQbCwACQdMABBsGY9cABBtAAwAEBnMAAkHXAAQbSmPHAAQbTwABRd8ABBtPAAJB2wAEG08AAkHfAAQbTwACQeMABBtPAAJB5wAEG08AAkHrAAQbTwACQe8ABBtPAAJB8wAEG08AAkH3AAQbTwACQfsABBtPAAJB/wAEG08AAkIDAAQbTwACQgcABBtPAAJCCwAEG08AAkIPAAQbTwACQhMABBtPAAJCFwAEG08AAkIbAAQbTwACQh8ABBtPAAJCIwAEG08AAkInAAQbTwACQisABBtPAAJCLwAEG08AAkIzAAQbTwACQjcABBtPAAIXpwAEG08AAkI7AAQbTwACQj8ABBtPAAJCQwAEG0pj1wAEG8QDAAQGcwACQkcABBvOY8cABBvTAAJCSwAEG9MAAkG3AAQb0wACQbsABBvOY9cABBvgAwAEBnMAAkJPAAQb6mPHAAQb7wACQksABBvvAAJCUwAEG+8AAkJXAAQb6mPXAAQb/AMABAZzAAJCWwAEHAZjxwAEHAsAAk8jAAQcDnKjAAQcDwACQl8ABBwPAAHGUwAEHA8AAhU/AAQcDwACQmMABBwPAAJCZwAEHAZjywAEHCsAAcJTAAQcBmO/AAQcMwABxa8ABBwycqsABBwzAAHClwAEHDIOOwAEHDIGswAEHDIH8wAEHDIIFwAEHDMAAk8jAAQcUwACQmsABBwGY9cABBxYAwAEBnMAAkJvAAQcYmPHAAQcZgfnAAQcZwACFN8ABBxiY78ABBxyB+sABBxiY9cABBx4AwAEBnMAAkJzAAQcgmPHAAQchwACTyMABByLAAJCdwAEHIph+wAEHIpdxwAEHIsAAkJ7AAQciwABlGcABByLAAJCfwAEHIsAAkKDAAQciwACPXsABByLAAJChwAEHIsAAZHfAAQciwACQosABByLAAJCjwAEHIsAAkKTAAQciwACQpcABByLAAI8SwAEHIsAAjsrAAQciwACQpsABByLAAJCnwAEHIsAAkKjAAQciwACQqcABByLAAI7GwAEHIsAAjxrAAQciwACFS8ABByLAAJCqwAEHIsAAkKvAAQciwABwwsABByLAAJCswAEHIJj0wAEHPsAAkK/AAQc+wACQsMABByCY78ABB0GB+sABB0HAAI/EwAEHQcAAk8jAAQdEwACAq8ABB0TAAJCywAEHRMAAkLHAAQdEwABxtsABB0TAAHG3wAEHRMAAkK7AAQdEwACQxsABB0TAAJDMwAEHRMAAkM3AAQdEwACQzsABB0TAAJDPwAEHRMAAkMDAAQdEwACQusABB0TAAJDEwAEHRMAAkLPAAQdEwACQtMABB0TAAJCtwAEHRIi/wAEHQcAAj9fAAQdBwACQy8ABByCY8sABB1mB5cABB1nAAJDKwAEHWcAAjxfAAQdZwACNicABB1mepcABByCY88ABB1/AAI/PwAEHIJj1wAEHYcAAk8jAAQdigLXAAQGcwACQ08ABB2SY8cABB2XAAJPIwAEHZsAAjyzAAQdmwACPacABB2bAAJDUwAEHZsAAkNXAAQdmwACPJsABB2bAAJDWwAEHZsAAcKPAAQdmt/fAAQdltLTAAQdkmO/AAQdwwACAiMABB3DAAJPIwAEHcsAAjyjAAQdwwABEa8ABB3CHZMABB3BLwAEHcIC/wAEHcJl2wAEHcIClwAEHcIRewAEHcIJGwAEHcIP9wAEHcMAARG3AAQdwgKvAAQdwl1PAAQdwlo3AAQdwrMfAAQdwwABEcMABB3AjwAEHZJjywAEHhMAAkNrAAQeEujPAAQeEg9XAAQeEg2jAAQeEKcABB4RhwAEHhIFVwAEHhIO3wAEHZJjzwAEHjcAAcPfAAQdkmPXAAQePAMABAZzAAJDcwAEHkZjxwAEHksAAk8jAAQeTwACQ2MABB5PAAJDdwAEHk8AAbPzAAQeTwABs/cABB5PAAJDewAEHkZjvwAEHmcAAkN/AAQeZwACPJ8ABB5nAAI8twAEHmYKMwAEHmcAAk8jAAQeewACQ2cABB57AAJDgwAEHnsAAkNfAAQeewACQ48ABB57AAJDiwAEHnsAAkOHAAQeRmPPAAQelwACNPMABB5GY9cABB6cAwAEBnMAAkOTAAQepmPHAAQeqwACTyMABB6vAAIRnwAEHqZjywAEHrV7AAQepmPPAAQevwABFH8ABB6mY78ABB7GIycABB7HAAJDlwAEHscAAji3AAQexwACOOMABB6mY9cABB7YAwAEBnMAAkObAAQe4mPHAAQe5wACTyMABB7rAAHCkwAEHusAAkOfAAQe6wACQCcABB7iY78ABB77AAI4twAEHvsAAjjjAAQe4mPXAAQfBAMABAZzAAJDowAEHw5jxwAEHxMAAkOnAAQfEwACQ6sABB8TAAJDrwAEHxMAAkOzAAQfEwACQ7cABB8TAAJDuwAEHxMAAkO/AAQfEwACQ8MABB8TAAJDxwAEHxMAAkPLAAQfEwACQ88ABB8TAAHcjwAEHxMAAkPTAAQfEwACQ9cABB8TAAJD3wAEHxMAAkPnAAQfEwACQ+8ABB8TAAJD9wAEHxMAAkP/AAQfEwACRAcABB8TAAJEDwAEHxMAAkQXAAQfEwACRB8ABB8TAAJEJwAEHxMAAd3bAAQfEwACRC8ABB8OY9cABB98AwAEBnMAAkQ3AAQfhmPHAAQfiwACRDsABB+Kdh8ABB+LAAJEQwAEH4sAAkRHAAQfiwACRE8ABB+LAAJEUwAEH4sAAkRXAAQfiwACRFsABB+LAAIGKwAEH4ZjvwAEH7MAAk8jAAQftwACRF8ABB+3AAJEdwAEH7cAAkSDAAQfhmPXAAQfxAMABAZzAAJEnwAEH85j0wAEH9ADAAQfzmO/AAQf2wACNicABB/bAAJEqwAEBnMAAkSvAAQf5mPHAAQf6wACA/8ABB/qli8ABB/q1hcABB/rAAEgjwAEH+sAAkSzAAQf6wABKosABB/rAAFF6wAEH+sAAhenAAQf6wACRMMABB/mY78ABCATAAIELwAEIBIKMwAEIBFbAAQgEnG3AAQgEwAB9osABB/mY9MABCArAAJEywAEH+ZjywAEIDMAAkTbAAQgMhInAAQgMwACBb8ABCAzAAJE3wAEIDMAAkTjAAQgMwACOLMABB/mY88ABCBPAAI4swAEH+Zj1wAEIFQDAAQGcwACROcABCBeY8cABCBgiwAEIF5jvwAEIGiPAAQgXmPXAAQgcAMABAZzAAJE7wAEIHpjxwAEIH8AASqDAAQgfwACODcABCB+9csABCB6Y9cABCCMAwAEBnMAAkTzAAQglmPHAAQgmwACRPcABCCbAAI4NwAEIJr1ywAEIJsAAkT7AAQgmwACRP8ABCCbAAJFAwAEIJsAAkUHAAQgmwACRQsABCCbAAJFDwAEIJsAAkUTAAQgmwACRRcABCCbAAJFGwAEIJsAAkUfAAQgmwACRSMABCCbAAJFJwAEIJsAAkUrAAQglmPXAAQg3AMABAZzAAJFLwAEIOZjxwAEIOoQ5wAEIOZj1wAEIPADAAQGcwACRTMABCD6Y8cABCD/AAI7uwAEIP8AAgjHAAQg+mO/AAQhCI8ABCD6Y9cABCEQAwAEBnMAAkU3AAQhGmPHAAQhHwABRd8ABCEfAAJFOwAEIR8AAkU/AAQhHqBPAAQhHwACRUMABCEfAAIXpwAEIR8AAkI/AAQhHwACRUcABCEfAAJFSwAEIR8AAkVPAAQhHwACRVMABCEfAAJFVwAEIR8AAk8jAAQhUwABlGcABCFTAAJFWwAEIVMAAkVfAAQhUwACRWMABCFTAAHMewAEIVMAAkVnAAQhUwACRWsABCFTAAJFbwAEIVMAAkVzAAQhUwACRXcABCFTAAJFewAEIVMAAdQrAAQhUwACRX8ABCFTAAJFgwAEIVMAAkWHAAQhUwACRYsABCEfAAJE3wAEIR8AAkTjAAQhGmO/AAQhnnuHAAQhnnGvAAQhngozAAQhnVsABCGfAAJPIwAEIbMAAkWrAAQhswACRZ8ABCGzAAJFowAEIbMAAkXLAAQhswACRbMABCGzAAJFrwAEIbMAAkWbAAQhswACRc8ABCEaY9cABCHUAwAEBnMAAkXXAAQh3mPHAAQh4qBHAAQh3mPXAAQh6AMABAZzAAJF2wAEIfJjxwAEIfagRwAEIfJj1wAEIfwDAAQGcwACRd8ABCIGY8cABCILAAJPIwAEIg8AAcMLAAQiDwACReMABCIPAAJF5wAEIgZjvwAEIh57hwAEIh8AAk8jAAQiJwACQzsABCInAAJF6wAEIicAAkYTAAQiJwACRiMABCIGY9cABCI4AwAEBnMAAkYrAAQiQmPHAAQiRwACRFMABCJHAAJETwAEIkcAAkRXAAQiRwACRFsABCJHAAJEzwAEIkYH4wAEIkYjxwAEIkJjvwAEImcAAk8jAAQiawACRi8ABCJrAAJGMwAEImcAAkXTAAQiZwACRjcABCJCY9cABCJ8AwAEBnMAAkZHAAQihmPHAAQiiwAB91cABCKLAAJPIwAEIpMAAdQrAAQikwACRksABCKGY78ABCKee4cABCKdWwAEIp5xrwAEIp4KMwAEIp8AAkZTAAQinwACRl8ABCKGY9cABCK4AwAEBnMAAkZ3AAQiwmPHAAQixwAB91cABCLHAAH2QwAEIscAAk8jAAQi0wABwwsABCLScqMABCLTAAJGewAEItL0BwAEItMAAguvAAQi0wAB/T8ABCLCY78ABCLvAAJPIwAEIvMAAcdHAAQi8wABwrMABCLzAAHCtwAEIvMAAccTAAQi8wACRn8ABCLzAAJGgwAEIu5xtwAEIu4KMwAEIu1bAAQi7wACRocABCLCY9cABCMcAwAEBnMAAkaLAAQjJmPXAAQjKAMABCMqcLcABCMyGc8ABCMmY8cABCM7AAJPIwAEIz8AAgLHAAQjJmPLAAQjRwACTyMABCNLAAICywAEI0sAAgLPAAQjSwACAtMABCNLAAIC1wAEIyZjvwAEI18AAk8jAAQjYwAB2A8ABCNjAAIC2wAEB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AltbXQOaiAJbW10DmogCW1tdA5qIAltbXQOaiAJbW10DmogCW1tdA5qIAltbXQOaiAJbW10DmogCW1tdA5qIAltbXQPAAP7xAmADgnxgA4TsXQOaiAJbW10DmogCW1tdA5qIAltbXQOaiAJbW10DmogCW1tdA5qIAltbXQOaiAJbW10DmogCW1tdA5qIAltbXQOaiAJbW10DmogCW1tdA5qIAltbXQOaiAJbW10DmogCW1tdA5qIAltbXQOaiAJbW10DmogCW1tdA5qIAltbXQOaiAJbW10DmogCW1tdA5qIAltbXQOavQJbW10DwAD+vwFgA4eiXQOavQJbW10DwAD+vwFgA4eiXQPAAP6/AWADh6JdA5q9AltbXQPAAP6/AWADh6JdA5q9AltbXQOavQJbW10Dmr0CW1tdA5q9AltbXQOavQJbW10Dmr0CW1tdA5q9AltbXQOavQJbW10Dmr0CW1tdA5q9AltbXQOavQJbW10Dmr0CW1tdA5q9AltbXQOavQJbW10Dmr0CW1tdA8AA/r8BYAOE7F0Dmr0CW1tdA5q9AltbXQOZwgJbW10DmcICW1tdA5nCAltbXQOZwgJbW10DmcICW1tdA5nCAltbYAPAAQACXQPAAP7xAmADiZZgA8AA/htdA5nCAltbYAPAAQACXQOZwgJbW10DwAD+vwFgA4TsXQPAAP7xAmADiZZgA4j8XQPAAP7xAmADwAEAAl0DirYBW2ADwADLZ10DwAD+vwFgA8AA/htdA8AA/r8BYAOI/F0DwAD+vwFgA4mrXQPAAP6/AWADglNeAwABAQFgA4sSAAFXA4sMAGADizRdA8AA/vECYAPAAQACYAPAAPxVXQPAAP7xAmADwAEAAmADwAD8VWEDAWADwAEAAlxhAwFgA8ABAAJcYQMBYAPAAQACXGEDAWADwAEAAlxhAwFgA8ABAAJcYQMBYAPAAQACXF0DwAD+8QJgA4uoYAPAAPxVXQPAAP7xAmADi6hgA8AA/FVdA8AA/vECYAOLqGADwAD8VV0DwAD+vwFgA5HoYQMBYAOLmlxhAwFgA8ABAINdA8AAuuMBYAPAAQCDYQMBYAPAAQCDXQPAALrjAWADwAEAg2EDAmADwAEAAl0DwAD+vwFbYAPAAP8lYQMCYAPAAQACXQPAAP6/AVtgA8AA/yVhAwFbYAPAAQCDYQMBW2AD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XQPAAP+zAWADibpdA5qIAl8DAABfAwEAXQOaiAJfAwAAXwMBAF0DmogCXwMAAF8DAQBdA5qIAl8DAABfAwEAXQOaiAJfAwAAXwMBAF0DmogCXwMAAF8DAQBdA5qIAl8DAABfAwEAXQOaiAJfAwAAXwMBAF0DmogCXwMAAF8DAQBdA5qIAl8DAABfAwEAXQOaiAJfAwAAXwMBAF0DmogCXwMAAF8DAQBdA5qIAl8DAABfAwEAXQOaiAJfAwAAXwMBAF0DmogCXwMAAF8DAQBdA5qIAl8DAABfAwEAXQOaiAJfAwAAXwMBAF0DmogCXwMAAF8DAQBdA5qIAl8DAABfAwEAXQOaiAJfAwAAXwMBAF0DmogCXwMAAF8DAQBdA5qIAl8DAABfAwEAXQOaiAJfAwAAXwMBAF0DmogCXwMAAF8DAQBdA5qIAl8DAABfAwEAXQOaiAJfAwAAXwMBAF0DmogCXwMAAF8DAQBdA5qIAl8DAABfAwEAXQOaiAJfAwAAXwMBAF0DmogCXwMAAF8DAQBdA5qIAl8DAABfAwEAXQOaiAJfAwAAXwMBAF0DmogCXwMAAF8DAQBdA5qIAl8DAABfAwEAXQOaiAJfAwAAXwMBAF0DmogCXwMAAF8DAQBdA5qIAl8DAABfAwEAXQOaiAJfAwAAXwMBAF0DmogCXwMAAF8DAQBdA5qIAl8DAABfAwEAXQOaiAJfAwAAXwMBAF0DmogCXwMAAF8DAQBdA5qIAl8DAABfAwEAXQOaiAJfAwAAXwMBAF0DmogCXwMAAF8DAQBdA5qIAl8DAABfAwEAXQOaiAJfAwAAXwMBAF0DmogCXwMAAF8DAQBdA5q9Al8DAABfAwEAXQOavQJfAwAAXwMBAF0Dmr0CXwMAAF8DAQBdA5q9Al8DAABfAwEAXQOavQJfAwAAXwMBAF0Dmr0CXwMAAF8DAQBdA5q9Al8DAABfAwEAXQOavQJfAwAAXwMBAF0Dmr0CXwMAAF8DAQBdA5q9Al8DAABfAwEAXQOavQJfAwAAXwMBAF0Dmr0CXwMAAF8DAQBdA5q9Al8DAABfAwEAXQOavQJfAwAAXwMBAF0Dmr0CXwMAAF8DAQBdA5q9Al8DAABfAwEAXQOavQJfAwAAXwMBAF0Dmr0CXwMAAF8DAQBdA5q9Al8DAABfAwEAXQOavQJfAwAAXwMBAF0DmtYC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A8AA/r8BYAO+Ol0DwAD+vwFgA746XQPAAP7xAmADwAD+G2ADwAB6t10DwAD/swFgA8AAYjhhAwFgA74TXGEDAWADvhNcYQMBYAO+E1xhAwFgA74TXGEDAWADvhNcYQMBYAO+E1xhAwFgA74TXGEDAWADvhNcYQMBYAO+E1xhAwFgA74TXGEDAWADvhNcYQMBYAO+E1xhAwFgA74TXGEDAWADvhNcYQMBYAO+E1xhAwFgA74TXGEDAWADvhNcYQMBYAO+E1xhAwFgA74TXGEDAWADvhNcYQMBYAO+E1xhAwFgA74TXGEDAWADvhNcYQMBYAO+E1xhAwFgA74TXF0DwAD/swFgA74TXQPAAP+zAWADvhNdA8AA/7MBYAO+E10DwAD/swFgA74TXQPAAP+zAWADvhNdA8AA/r8BYAO+UmEDAWADwAB6t1xhAwFgA8AAerdcYQMBYAPAAHq3XGEDAWADwAB6t1xhAwFgA8AAerdcYQMBYAPAAHq3XGEDAWADwAB6t1xhAwFgA8AAerdcYQMBYAPAAHq3XGEDAWADwAB6t1xhAwFgA8AAerdcYQMBYAPAAHq3XGEDAWADwAB6t1xhAwFgA8AAerdcYQMBYAPAAHq3XGEDAWADwAB6t1xhAwFgA8AAerdcYQMBYAPAAHq3XGEDAWADwAB6t1xhAwFgA8AAerdcYQMBYAPAAHq3XGEDAWADwAB6t1xhAwFgA8AAerdcYQMBYAPAAHq3XGEDAWADwAB6t1xhAwFgA8AAerdcYQMBYAPAAHq3XGEDAWADwAB6t1xhAwFgA8AAerdcYQMBYAPAAHq3XGEDAWADwAB6t1xhAwFgA8AAerdcYQMBYAPAAHq3XGEDAWADwAB6t1xhAwFgA8AAerdcYQMBYAPAAHq3XGEDAWADwAB6t1xhAwFgA8AAerdcYQMBYAPAAHq3XGEDAWADwAB6t1xhAwFgA8AAerdcYQMBYAPAAHq3XGEDAWADwAB6t1xdA8AA/7MBYAO+Ol0DwAD+8QJgA8ABAAJdA8AA/7MBYAO+JV0DwAD+8QJgA8ABAAJdA8AA/7MBYAO+JV0DwAD+8QJgA8ABAAJdA8AA/7MBYAO+E10DwAD/swFgA74TXQPAAP+zAWADvhNdA8AA/7MBYAO+E10DwAD+8QJgA8ABAAJdA8AA/7MBYAO+JV0DwAD/swFgA74l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vwFgA8AAq5ddA8AA/r8BYAPAAKuXXQPAAP6/AWADwAEAAl0DwAD+vwFgA8ABAAJdA8AA/r8BYAPAAPxVXQPAAP6/AWADwAD8zV0DwAD+vwFgA8AA/htdA8AA/r8BYAPAAKujXQPAAP6/AWADg+JdA8AA/r8BYAODr10DwAD+vwFgA4QlXQPAAP6/AWADhftdA8AA/r8BYAOIIl0DwAD+vwFgA4YOXQPAAP7xAmADglNgA8AAg7tdA8AA/7MBYAOIkV0DwAD+vwFgA8AAg7tdA8AA/7MBYAOIkV0DwAD4BwFgA4iRXQPAAPgHAWADiJFhAwBcXQPAAP+zAWADvjpdA8AA/7MBYAO+E10DlOIBYAO+Ol0DlOIBYAO+E10DwAD/swFgA8AAaRVdA8AA/r8BYAPAAGPLXQPAAP6/AWADwABjy10DwAD+vwFgA8AAY8tdA8AA/r8BYAO+Ol0DwAD/swFgA8AAhHBdA8AA/vECYAO+E2ADwACEjV0DwAD+vwFgA8AAhHBdA8AA/vECYAO9/2ADwACElV0DwAD+vwFgA8AAhHBhAwJgA8AAhHBgA8AAY8tcYQMCYAPAAIRwYAPAAGPLXGEDAWADwABjy1xhAwJgA8AAhHBgA8AAY8tcYQMCYAPAAIRwYAPAAGPLXGEDAmADwACEcGADwABjy1xdA8AA/7MBYAO9/10DwAD+8QJgA8AAaSJdA8AA/7MBYAO9/2EDAmADwACEcGADwABjy1xeAwABAgFgA8AAY8sBu6hgA8AA/FUAAFxeAwABAgFgA8AAZBkBu6hgA8AA/FUAAFxdA8AA/7MBYAPAAGPLYQMBYAPAAGPLXGEDAWADwABjy1xhAwFgA8AAY8tcYQMBYAPAAGPLXGEDAWADwABjy1xhAwFdA8AA/n0BYAPAAGPLXF0DwAD/swFgA73/XQPAAP7xAmADwABMuF0DwAD/swFgA73/YQMBXQPAAP59AWADwABjy1xdA8AA/7MBYAO+E10DwAD/swFgA746XQPAAP+zAWADvl5dA8AA/7MBYAPAAGkiXQPAAP+zAWADvf9dA8AA/7MBYAO+E2EDAWADvf9cXQPAAP+zAWADvjpdA8AA/7MBYAO+XmEDAWADvf9cYQMBYAO9/1xhAwFgA73/XF0DwAD/swFgA75eXQPAAP+zAWADvl5hAwFgA8AAZFlgA8AA/FVd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AmADwABPDWADwABiOF0DwAD+vwFgA7bxYQMBYAOLmmADtw9hAwFgA4uaYAO28WEDAWADwABG0GADwAD8VWEDAWADwABG0GADwAD8VWEDAWADwABG0GADwAD8VWEDAWADwABG0GADwAD8VWEDAWADwABG0GADwAD8VV0DwAD+vwFgA8AARtBhAwJgA8AARtBgA8AA/htgA8AA/FVhAwBgA8AA/FVhAwBgA8AA/FVgA8ABAAJhAwBgA8AA/hthAwBgA8AA/htgA8ABAAJgA8ABAAJgA8AA/htgA8ABAAJgA8AA/htgA8AA/htgA8ABAAJgA8AA/htgA8AA/hFgA8AA/hFdA8AA/r8BYAO+Ol0DwAD/swFgA746XQPAAP+zAWADvjpdA8AAae8BYAPAAIl7XQPAAGnvAWADwACJe10DwABp7wFgA8AAiXtdA8AAae8BYAPAAIl7XQPAAGnvAWADwACJe10DwABp7wFgA8AAiXtdA8AAae8BYAPAAIl7XQPAAGnvAWADwACJe10DwABp7wFgA8AAiXtdA8AAae8BYAPAAIl7XQPAAGnvAWADwACJe10DwABp7wFgA8AAiXtdA8AAae8BYAPAAIl7XQPAAGnvAWADwACJe10DwAD+vwFgA8AAiYlhAwFgA74TYAPAAPxVXQPAAGnvAWADwACJe14DAAEBAWADvhMAAVcDwACJegBgA8AAigtdA8AAae8BYAPAAIl7YAPAAQACYQMBYAO+E2ADwAD8VV0DwAD+vwFgA8AAiYldA8AA/r8BYAPAAImJXQPAAP6/AWADwACJiV0DwAD+vwFgA8AAiYldA8AA/r8BYAPAAImJXQPAAP6/AWADwACJiV0DwABp7wFgA8AAiXtdA8AA/r8BYAPAAImJXQPAAGnvAWADwACJe2EDAGADwACJiWADwACKGF0DwAD+8QJgA743YAPAAE8NXQPAAP6/AWADwABQ7V0DwACKVAJbW10DwAD+8QJgA743YAPAAE8NXQPAAP6/AWADwABQ7V0DwACKVAJbW10DwACKVAJbW10DwACKVAJbW10Dk1MBYAO3D10DwAD/swFgA743XQOTUwFgA7cPYQMAYAPAAGI4XQOTUwFgA7cPYQMAYAPAAGI4YQMAYAPAAGI4XQPAAP6/AWADwAEAAl0DwAD+vwFgA4j8XQPAAP6/AWADiPxdA8AA/r8BYAOI/GADwAEAAl0DwAD+vwFgA4l1XQPAAP6/AWADiXVdA8AA/r8BYAOJdV0DwAD+vwFgA4l1XQPAAP6/AWADiXVdA8AA/r8BYAOI/GADwAEAAl0DwAD+vwFgA4l1XQPAAP6/AWADiPxhAwBcYQMBYAOI/GADwAD8VWEDAFxhAwBcYQMAXGEDAFxhAwFgA4j8YAPAAPxVYQMAXGEDAFxhAwBcYQMAXGEDAWADiPxgA8AA/FVhAwBcYQMAXF0DwAD+vwFgA4mWXQPAAP7xAmADiZZgA4j8YAPAAItDYAPAAItDYAPAAItDYAPAAItDYAPAAItDYAPAAItDYAPAAItDYAPAAItDYAPAAIsTYAPAAIsTYAPAAIsTYAPAAIsTYAPAAIsTYAPAAIsTYAPAAIsTYAPAAIsTYAPAAIsfYAPAAIsfYAPAAIsfYAPAAIsfYAPAAIsfYAPAAIsfYAPAAIsfYAPAAIsfYAPAAIsrYAPAAIsrYAPAAIsrYAPAAIsrYAPAAIsrYAPAAIsrYAPAAIsrYAPAAIsrYAPAAItPYAPAAItPYAPAAItPYAPAAItPYAPAAItPYAPAAItPYAPAAItPYAPAAItPYAPAAIs3YAPAAIs3YAPAAIs3YAPAAIs3YAPAAIs3YAPAAIs3YAPAAIs3YAPAAIs3XQPAAP6/AWADiPxgA8AAi0NgA8AAiytgA8AAiytdA8AA/r8BYAPAAI9ZXQPAAP6/AWADwACPWV0DwAD+vwFgA8AAZXJdA8AA/7MBYAO+E2EDAWADvhNcYQMBYAO+E1xhAwFgA74TXF0DwAD+8QJgA8ABAAJdA8AA/r8BYAPAAI9ZXQPAAP7xAmADvIhgA8AAj1ldA8AA/vECYAO8iGADwACPWV0DwAD+vwFgA743XQPAAP6/AWADwACPhV0DwAD+vwFgA8AAkAdgA8AAmX5dA8AA/7MBYAPAAQACXQPAAP6/AWADwACQB2ADwACZfl0DwAD/swFgA8ABAAJdA8AA/r8BYAPAAJAHYAPAAJl+XQPAAP+zAWADwAEAAl0DwAD+vwFgA8AAkAdgA8AAmX5dA8AA/r8BYAPAAJATXQPAAP6/AWADwACQE10DwAD+vwFgA8AAj+ZdA8AA/r8BYAPAAJAHYQMBYAO+JVxdA8AA/r8BYAPAAJAHYAPAAJl+XQPAAP6/AWADwACQB10DwAD+vwFgA8AAkAddA8AA/r8BYAO+JV0DwAD+vwFgA8AAkAdgA8AAmX5dA8AA/r8BYAPAAJAHXQPAAP6/AWADwACQB10DwAD+8QJgA74TYAPAAI+eXQPAAP+zAWADwABkGV0DwAD/swFgA8AAZBldA8AA/7MBYAPAAGQZYAPAAJl+XQPAAP6/AWADwACXGl0DwAD+8QJgA8AAlxpgA8AAfEldA8AA/r8BYAPAAI/OXQPAAP6/AWADwACXGl0DwAD+8QJgA8AAlxpgA8AAfEBdA8AA/vECYAPAAGI4YAPAAI93XQPAAP+zAWADvhNdA8AA/7MBYAO+E10DwAD/swFgA74TXQPAAP+zAWADvhNdA8AA/7MBYAO+E10DwAD/swFgA74TXQPAAP6/AWADwABiOF0DwAD+8QJgA7yIXQPAAP6/AWADwABiOF0DwAD/swFgA74TXQPAAP+zAWADvhNhAwFgA74TXGEDAV0DwAD+fQFgA74TXF0DwAD/swFgA74TXQPAAP+zAWADvhNdA8AA/7MBYAO+E10DwAD/swFgA74TXQPAAP+zAWADvhNdA8AA/7MBYAO+E10DwAD/swFgA74TXQPAAP+zAWADvhNdA8AA/7MBYAO+E10DwAD+vwFgA74TXQPAAP6/AWADvhNdA8AA/vECYAO8iF0DwAD+vwFgA74TXQPAAP6/AWADvhNdA8AA/vECYAO8iF0DwAD+vwFgA74TXQPAAP7xAmADvIhdA8AA/r8BYAO+JV0DwAD+vwFgA74lXQPAAP7xAmADvIhdA8AA/r8BYAO+N10DwAD+vwFgA743XQPAAP6/AWADvjdgA8AA/htdA8AA/7MBYAO+BF0DwAD+8QJgA7yIXQPAAP+zAWADvgRdA8AA/7MBYAO+BF0DwAD+8QJgA7yIXQPAAP+zAWADvgReAwAGBgZgA743YAPAAJcaYAPAAJcaYAPAAPxVYAPAAPxVYAPAAPxVAAFXA8AAjgUAXF4DAAECAWADvjcBwABTC2ADvhMAAFxeAwABAgFgA743AcAAUwtgA74TAABcXgMAAQIBYAO+NwHAAFMLYAO+EwAAXF0DwAD+8QJgA74EYAPAAI6NXQPAAP6/AWADvhNdA8AA/r8BYAO+JWEDA2ADvgRdA8AA/r8BYAO+E10DwAD+vwFgA74lXF0DwAD+8QJgA7yIYAPAAI6TXQPAAP7xAmADwAEAAmADwACPT2ADwACZfmADwACZfmADwACZfmADwACZfl0DwAD+fQFgA8AAj1ldA8AA/vECYAO8iGADwACPEl0DwAD+8QJgA7yIYAPAAI8SXQPAAP6/AWADwACYRl0DwAD+8QJgA7yIXQPAAP7xAmADwAEAAmADwACPAV0DwAD+8QJgA8ABAAJgA8AAjwFdA8AA/vECYAO8iF0DwAD+8QJgA8AAY8tgA8AAjwFdA8AA/vECYAPAAGPLYAPAAI8BYQMBXQPAAP7xAltgA8AAjwFgA8AAmJxhAwFdA8AA/n0BYAPAAI8BXGEDAV0DwAD+8QJbYAPAAI8BYAPAAJicXQPAAP+zAWADwACPnmEDAWADwACPnlxdA8AA/r8BYAPAAI+eXQPAAP+zAWADwACPnl0DwAD/swFgA8AAj55dA8AA/7MBYAPAAI+eXQPAAP+zAWADwACPnl0DwAD/swFgA8AAj55dA8AA/7MBYAPAAQACXQPAAP7xAmADwACPnl0DwAD/swFgA8ABAAJdA8AA/7MBYAPAAQACXQPAAP7xAmADwACPnl0DwAD/swFgA8ABAAJhAwFgA8AAj55cYQMBYAPAAI+eXGEDAWADwACPnmADwACPnmEDAWADwACPnmADwACPnmEDAWADwACPnmADwACPnl0DwAD+vwFgA8AAj55dA8AA/vECYAPAAI+eXQPAAP6/AWADwACPnl0DwAD+vwFgA8AAlflgA8AAmX5dA8AA/r8BYAPAAJX5XQPAAP+zAWADvhNdA8AA/7MBYAO+E2EDAWADvhNcYQMBXQPAAP59AWADvhNcXQPAAP6/AV8DAABhAwFfAwEAXF0DwAD+vwFfAwAAXQPAAP6/AV8DAQBdA8AA/r8BXwMAAF0DwAD+vwFfAwEAYQMCXwMCAF8DAwBcXQPAAP6/AV8DAABdA8AA/r8BXwMBAF0DwAD+vwFfAwIAYQMDXwMDAF8DBABfAwUAXF0DwAD+vwFgA8AAldldA8AA/vECYAPAAP4bYAPAAJcQXQPAAP+zAWADwAEAAl0DwAD+vwFgA8ABAAJdA8AA/vECYAPAAP4bYAPAAQACXQPAAMMWAmADwAD+G10DwAD+vwFgA8AAlflgA8AAmX5dA8AA/r8BYAPAAJX5XQPAAP6/AWADwACV+V0DwAD+vwFgA8AAlfldA8AA/r8BYAPAAJX5XQPAAP6/AWADwACV+WEDAWADwACXEFthAwFgA8AAlxBbYQMBYAPAAJcQW2EDAmADwACXEGADwACXEFtdA8AA/r8BYAPAAJXZYQMBXQPAAP6/AWADwACXEFtdA8AA/vECYAPAAJXZYAPAAP4bXQPAAP6/AWADwACV2V0DwAD+vwFgA8AAl25dA8AA/r8BYAPAAJduXQPAAP6/AWADwACXbl0DwAD+vwFgA8AAl25dA8AA/r8BYAPAAJduXQPAAP6/AWADwACXbmADwACZfl0DwAD+vwFgA8AAl25dA8AA/r8BYAPAAJduYAPAAJl+YAPAAJl+XQPAAP6/AWADwAD+G10DwAD+vwFgA8AA/htgA8AAmX5dA8AA/vECYAPAAJXZYAPAAP4bXQPAAP7xAmADwACV2WADwAD+G10DwAD+vwFgA8AAldldA8AA/vECYAPAAJXZYAPAAP4bXQPAAP7xAmADwACV2WADwAD+G10DwAD+vwFgA8AAldldA8AA/vECYAPAAJXZYAPAAP4bXQPAAP6/AWADwACV2V0DwAD+8QJgA8AAldlgA8AA/htdA8AA/r8BYAPAAP4bXQPAAP6/AWADwAD+G10DwAD+vwFgA8AA/htdA8AA/r8BYAPAAJbCXQPAAP6/AWADwAD+G10DwAD+vwFgA8AAlsJdA8AA/r8BYAPAAJbCXQPAAP6/AWADwACV2V0DwAD+vwFgA8AA/htdA8AA/r8BYAPAAP4bXQPAAP7xAmADwACV/mADwAD+G10DwAD+vwFgA8AAldldA8AA/vECYAPAAJXZYAPAAP4bXQPAAP6/AWADwACV2V0DwAD+8QJgA8AAldlgA8AA/htdA8AA/r8BYAPAAJXZXQPAAP6/AWADwACX5V0DwAD+vwFdA4H5AmADwAEAAmADwAEAAl0DwAD+vwFgA8AAl+VdA8AA/r8BXQOB+QJgA8ABAAJgA8ABAAJdA8AA/vECYAPAAJXZYAPAAP4bXQPAAP7xAmADwACV2WADwAD+G10DwAD+vwFgA8AAldlgA8AAmX5gA8AAmX5dA8AA/r8BYAPAAJduYAPAAJl+XQPAAP6/AWADwACXbmADwACZfmADwACZfmADwACZfmADwACZfmADwACZfmADwACZfl0DwAD+vwFgA8AAl+9dA8AA/r8BYAPAAJduYAPAAJl+YAPAAJl+YAPAAJl+YAPAAJl+YAPAAJl+YAPAAJl+YAPAAJl+YAPAAJl+XQPAAP6/AWADwAD+G2ADwACZfmADwACZfmADwACZfmADwACZfmADwACZfmADwACZfmADwACZfmADwACZfmADwACZfmADwACZfmADwACZfmADwACZfmADwACZfl0DwAD+vwFgA8AAl25gA8AAmX5dA8AA/r8BYAPAAJduYAPAAJl+XQPAAP+zAWADwACV2V0DwAD+8QJgA8AAldlgA8AAldldA8AA/r8BYAPAAJbqXQPAAP7xAmADwACV2WADwACV2V0DwAD+vwFgA8AAlupdA8AA/vECYAPAAJXZYAPAAJXZXQPAAP7xAmADwACV2WADwACV2V0DwAD+vwFgA8AAldlhAwBgA8AA/FVdA8AA/r8BYAPAAJXZXQPAAP6/AWADwACV2V0DwAD+vwFgA8AAldldA8AA/7MBYAPAAQACXQPAAP6/AWADwACW6l0DwAD/swFgA8ABAAJdA8AA/vECYAPAAJXZYAPAAJXZXQPAAP6/AWADwACV2V0DwAD/swFgA8ABAAJdA8AA/7MBYAPAAQACXQPAAP6/AWADwACV2WEDAWADwACYHmADwACYDmEDAWADwACYHmADwACYDl0DwAD/swFgA8AASdxhAwFgA8AARtBgA8AA/hthAwFgA8AARtBgA8AA/hthAwFgA8AARtBgA8AA/htdA8AA/r8BYAPAAJX5XQPAAP6/AWADwACV+V0DwAD+vwFgA8AAlxBeAwABAgFgA8AAkmYBwABSRGADwAD8VQAAXF4DAAECAWADwACSZgHAAFJEYAPAAPxVAABcXgMAAQIBYAPAAJJmAcAAUkRgA8AA/FUAAFxeAwABAgFgA8AAkmYBwABSRGADwAD8VQAAXF4DAAECAWADwACSZgHAAFJEYAPAAPxVAABcXgMAAQIBYAPAAJJmAcAAUkRgA8AA/FUAAFxeAwABAgFgA8AAkmYBwABSRGADwAD8VQAAXF4DAAECAWADwACSZgHAAFJEYAPAAPxVAABcXgMAAQIBYAPAAJJmAcAAUkRgA8AA/FUAAFxdA8AA/r8BYAPAAJduXQPAAP6/AWADwACXbl0DwAD+vwFgA8AAl25dA8AA/r8BYAPAAJX5XQPAAP6/AWADwACXEF0DwAD/swFgA8ABAAJdA8AA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XwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlYsCXwMAAF8DAQBdA8AAlUkCXwMAAF8DAQBdA8AAlUkCXwMAAF8DAQBdA8AAlUkCXwMAAF8DAQBdA8AAlUkCXwMAAF8DAQBdA8AAlUkCXwMAAF8DAQBdA8AAlUkCXwMAAF8DAQBdA8AAlUkCXwMAAF8DAQBdA8AAlUkCXwMAAF8DAQBdA8AAlUkCXwMAAF8DAQBdA8AAlUkCXwMAAF8DAQBdA8AAlUkCXwMAAF8DAQBdA8AAlUkCXwMAAF8DAQBdA8AAlUkCXwMAAF8DAQBdA8AAlUkCXwMAAF8DAQBdA8AAlUkCXwMAAF8DAQBdA8AAlUkCXwMAAF8DAQBdA8AAlUkCXwMAAF8DAQBdA8AAlUkCXwMAAF8DAQBdA8AAlUkCXwMAAF8DAQBdA8AAlUkCXwMAAF8DAQBdA8AAlUkCXwMAAF8DAQBdA8AAlUkCXwMAAF8DAQBdA8AAlUkCXwMAAF8DAQBdA8AAlUkC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A8AA/htgA8ABAAJcYQMDYAPAAQACYAPAAP4bYAPAAQACXGEDA2ADwAEAAmADwAD+G2ADwAEAAlxhAwNgA8ABAAJgA8AA/htgA8ABAAJcYQMDYAPAAQACYAPAAP4bYAPAAQACXGEDA2ADwAEAAmADwAD+G2ADwAEAAlxhAwNgA8ABAAJgA8AA/htgA8ABAAJcYQMDYAPAAQACYAPAAP4bYAPAAQACXGEDA2ADwAEAAmADwAD+G2ADwAEAAlxhAwNgA8ABAAJgA8AA/htgA8ABAAJcYQMDYAPAAQACYAPAAP4bYAPAAQACXGEDA2ADwAEAAmADwAD+G2ADwAEAAlxhAwNgA8ABAAJgA8AA/htgA8ABAAJcYQMDYAPAAQACYAPAAP4bYAPAAQACXGEDA2ADwAEAAmADwAD+G2ADwAEAAlxhAwNgA8ABAAJgA8AA/htgA8ABAAJcYQMDYAPAAQACYAPAAP4bYAPAAQACXGEDA2ADwAEAAmADwAD+G2ADwAEAAlxhAwNgA8ABAAJgA8AA/htgA8ABAAJcYQMDYAPAAQACYAPAAP4bYAPAAQACXGEDA2ADwAEAAmADwAD+G2ADwAEAAlxhAwNgA8ABAAJgA8AA/htgA8ABAAJcYQMDYAPAAQACYAPAAP4bYAPAAQACXGEDA2ADwAEAAmADwAD+G2ADwAEAAlxhAwNgA8ABAAJgA8AA/htgA8ABAAJcYQMDYAPAAQACYAPAAP4bYAPAAQACXGEDA2ADwAEAAmADwAD+G2ADwAEAAlxhAwNgA8ABAAJgA8AA/htgA8ABAAJcYQMDYAPAAQACYAPAAP4bYAPAAQACXGEDA2ADwAEAAmADwAD+G2ADwAEAAlxhAwNgA8ABAAJgA8AA/htgA8ABAAJcYQMDYAPAAQACYAPAAP4bYAPAAQACXGEDA2ADwAEAAmADwAD+G2ADwAEAAlxhAwNgA8ABAAJgA8AA/htgA8ABAAJcYQMDYAPAAQACYAPAAP4bYAPAAQACXGEDA2ADwAEAAmADwAD+G2ADwAEAAlxhAwNgA8ABAAJgA8AA/htgA8ABAAJcYQMDYAPAAQACYAPAAP4bYAPAAQACXGEDA2ADwAEAAmADwAD+G2ADwAEAAlxhAwNgA8ABAAJgA8AA/htgA8ABAAJcYQMDYAPAAQACYAPAAP4bYAPAAQACXGEDA2ADwAEAAmADwAD+G2ADwAEAAlxhAwNgA8ABAAJgA8AA/htgA8ABAAJcYQMDYAPAAQACYAPAAP4bYAPAAQACXGEDA2ADwAEAAmADwAD+G2ADwAEAAlxhAwNgA8ABAAJgA8AA/htgA8ABAAJcYQMDYAPAAQACYAPAAP4bYAPAAQACXGEDA2ADwAEAAmADwAD+G2ADwAEAAlxhAwNgA8ABAAJgA8AA/htgA8ABAAJcYQMDYAPAAQACYAPAAP4bYAPAAQACXGADwACZfmADwACZfmADwACZfmADwACZfmADwACZfmADwACZfmADwACZfmADwACZfmADwACZfl0DwAD/swFgA8AATLhdA8AA/r8BYAPAAJfvXQPAAP6/AWADwACX710DwAD+vwFgA8AAlxBgA8AAmX5gA8AAmX5hAwBgA8AAlxBdA8AA/vECYAPAAJcaYAPAAJcQXQPAAP7xAmADwACXGmADwABMuF0DwAD+vwFgA8ABAAJgA8AAmX5gA8AAmX5gA8AAmX5gA8AAmX5gA8AAmX5dA8AA/r8BYAPAAJcQYAPAAJl+XQPAAP6/AWADwACX710DwAD+vwFgA8AAlxBgA8AAmX5dA8AA/r8BYAPAAJcQYAPAAJl+YAPAAJl+YAPAAJl+YAPAAJl+XQPAAP+zAWADvmFhAwBdA8AA/7MBYAO+YV0DwAD+vwFgA8AAkAddA8AA/r8BYAPAAJAHYAPAAJl+YAPAAJl+YAPAAJl+YAPAAJl+YQMBYAO+E2ADwACXEGEDAWADvhNgA8AAlxBhAwFgA74TYAPAAJcQXQPAAP6/AWADwACV+V0DwAD+vwFgA8AAlflhAwFgA74TYAPAAJX5XQPAAP6/AWADwACV+WEDAWADvhNgA8AAlfldA8AA/r8BYAPAAJX5XQPAAP6/AWADwACV+WEDAWADvhNgA8AAlfldA8AA/r8BYAPAAJX5YQMBYAO+E2ADwACV+V0DwAD+vwFgA8AAlflhAwFgA74TYAPAAJcQXQPAAP6/AWADwACV+WEDAWADvhNgA8AAlxBdA8AA/r8BYAPAAJX5YAPAAJl+YAPAAJl+YAPAAJl+YAPAAJl+YAPAAJl+YAPAAJl+YAPAAJl+YQMCW1tgA8AAlxBgA8AAmX5hAwJbW2ADwACXEGEDAGADwACXEGEDAltbYAPAAJcQYQMAYAPAAJcQXQPAAP6/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AWADwACV+V0DwAD+vwFgA8AAlfldA8AA/r8BYAPAAJX5XQPAAP6/AWADwACV+V0DwAD+vwFgA8AAlfldA8AA/r8BYAPAAJX5XQPAAP6/AWADwACYxWADwACZfmADwACZfl0DwAD+vwFgA8AAmMVgA8AAmX5dA8AA/r8BYAPAAJjFYAPAAJl+XQPAAP6/AWADwACYxV0DwAD+vwFgA8AAmMVdA8AA/r8BYAPAAJjFXQPAAP6/AWADwACYxV0DwAD+8QJgA8AAj1lgA8AA/htdA8AA/r8BYAPAAQACXQPAAP6/AWADwAEAAl0DwAD+vwFgA8AAlxBdA8AA/r8BYAPAAJjFXQPAAP6/AWADwACYxWADwACZfl0DwAD+vwFgA8AAmMVhAwJgA8AAlxBgA8ABAAJgA8AAmMVdA8AA/r8BYAPAAJjFYQMCYAPAAJcQYAPAAQACYAPAAJjFXQPAAP6/AWADwACYxV0DwAD+vwFgA8AAmMVdA8AA/r8BYAPAAJjFXQPAAP6/AWADwACYxV0DwAD+vwFgA8AAmMVdA8AA/r8BYAPAAJjFXQPAAP6/AWADwACYxV0DwAD+vwFgA8AAmMVdA8AA/r8BYAPAAJjFXQPAAP6/AWADwACV+V0DwAD+8QJgA8AAZBlgA8AAY8tdA8AA/r8BYAPAAJjFYAPAAJl+YQMCYAPAAQACYAPAAQACXGEDAmADwAEAAmADwAEAAlxhAwJgA8ABAAJgA8ABAAJcXQPAAP6/AWADwACV+WADwACZfl0DwAD+8QJgA8ABAAJgA8AAlxBdA8AA/vECYAPAAQACYAPAAJcQXQPAAP7xAmADwAEAAmADwACXEF0DwAD+8QJgA8ABAAJgA8AAlxBdA8AA/r8BYAPAAJX5XQPAAP6/AWADwACV+V0DwAD+vwFgA8AAlfldA8AA/r8BYAPAAJX5YAPAAJl+XQPAAP7xAmADwAEAAmADwACXEF0DwAD+vwFgA8AAl25dA8AA/r8BYAPAAEbQXQPAAP6/AWADwABG0GEDAWADwABG0GADwAD8VWEDAmADwABG0GADwABG0GADwABG0GEDAmADwABG0GADwABG0GADwABG0GEDAGADwABG0GEDAWADwABG0GADwAD8VWEDAmADwABG0GADwABG0GADwABG0GEDAGADwABG0GEDA2ADwAEAAmADwABG0GAD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XQPAAP6/AV8DAABdA8AA/r8BXwMAAF0DwACzEgFfAwAAYQMBXwMAAFxdA8AAszMBXwMAAF0DwACzMwFfAwAAYQMBXwMAAGADwAD8VWEDAV8DAABgA8AA/FVhAwFfAwAAYAPAAPxVYQMAXwMAAGEDAV8DAABgA8AA/FVhAwBfAwAAYQMBXwMAAGADwAD8VWEDAF8DAABhAwJfAwAAXwMAAF8DAABhAwJfAwEAXwMAAF8DAQBdA8AA/r8BXwMAAF0DwAD/swFfAwAAXQPAALMzAV8DAABdA8AAszMBXwMAAF0DwACzMwFfAwAAYQMBXwMAAGADwAD8VV0DwAD+vwFfAwAAXQPAALMzAV8DAABdA8AAszMBXwMAAF0DwACzMwFfAwAAXQPAAP6/AV8DAABdA8AA/r8BXwMAAF0DwAD+vwFfAwAAXQPAALMzAV8DAABdA8AAszMBXwMAAF0DwACzMwFfAwAAXQPAALMzAV8DAABdA8AAszMBXwMAAF0DwACzMwFfAwAAYQMBXwMAAGADwAD8VWEDAV8DAABgA8AA/FVdA8AAszMBXwMAAF0DwACzMwFfAwAAXQPAALMzAV8DAABdA8AAszMBXwMAAF0DwACzMwFfAwAAXQPAALMzAV8DAABdA8AAszMBXwMAAF0DwACzdwFfAwAAXQPAAP6/AV8DAQBdA8AAs3cBXwMBAF0DwACzdwFfAwAAXQPAAP6/AV8DAABdA8AA/r8BXwMAAF0DwAD+vwFfAwAAXQPAAP6/AV8DAABdA8AAs3cBXwMAAF0DwACzdwFfAwAAXQPAAP6/AV8DAABdA8AA/r8BXwMAAF0DwAD+vwFfAwAAXQPAAP6/AV8DAABdA8AA/r8BXwMAAF0DwAD+vwFfAwAAXQPAAP6/AV8DAABdA8AA/r8BXwMAAF0DwAD+vwFfAwAAXQPAAP6/AV8DAABdA8AAs3cBXwMAAF0DwAD+vwFfAwAAXQPAAP6/AV8DAABdA8AA/r8BXwMAAF0DwACzdwFfAwAAXQPAALN3AV8DAABdA8AAs5wCXwMAAF8DAQBdA8AA/7MBXwMAAF0DwAD+fQFfAwAAXQPAAP+zAV8DAABdA8AAs8wBXwMAAF0DwAD/swFdA8AA/7MBXwMAAF0DwAD+fQFfAwAAXQPAAP59AV8DAABdA8AA/n0BXwMAAF0DwAD+fQFfAwAA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DXk9AAAgVwANeVYAACBkAA15rgAAIHEADXnhAAAgfgANefoAACCLAA16gQAAIJgADXsmAAAgpQANez8AACCyAA170wAAIL8ADXwjAAAgzAANfHIAACDZAA18iwAAIOYADX0SAAAg8wANfWAAACEAAA19rQAAIQ0ADX3GAAAhGgANfigAACEnAA1+pAAAITQADX74AAAhQQANfy4AACFOAA1/owAAIVsADX/tAAAhaAANgDcAACF1AA2AgQAAIYIADYDLAAAhjwANgRUAACGcAA2BJAAAIakADYGwAAAhrwANgiIAACG8AA2COwAAIckADYKjAAAh1gANgukAACHjAA2DGwAAIfAADYNwAAAh/QANg6YAACIKAA2D7AAAIhcADYQeAAAiJAANhHMAACIxAA2EqQAAIj4ADYTvAAAiSwANhSEAACJYAA2FVAAAImUADYWpAAAicgANhd0AACJ/AA2GGQAAIowADYaxAAAimQANhxEAACKmAA2HKgAAIrMADYe5AAAiwAANiA0AACLNAA2IQwAAItoADYsjAAAi5wANmVQAACLyAA2ZcQAAIwAADZmmAAAjDgANmeQAACMcAA2aBgAAIyoADZowAAAjOAANm84AACNGAA2dkQAAI1wADZ7qAAAjcgANn1cAACOIAA2fyAAAI54ADaA+AAAjtAANowwAACPKAA2jpwAAI9gADaqtAAAj4QANsAkAACPyAA2zzgAAJAMADbZ0AAAkEAANxgIAACQbAA3GfQAAJCgADccbAAAkMwAN1QIAACREAA3VFAAAJE8ADdU5AAAkWgAN1bUAACRlAA3V/gAAJHAADdYqAAAkfQAN1lYAACSKAA3WgQAAJJcADdakAAAkogAN3DAAACStAA3dBgAAJLgADd0bAAAkxQAN3TAAACTSAA3dRQAAJN8ADd18AAAk7AAN3p4AACT5AA3fJAAAJQQADd+EAAAlDwAN4e4AACUaAA3iOAAAJSUADeX1AAAlMAAN50AAACU7AA3oqQAAJUYADejhAAAlUQAN6vEAACVnAA3vHQAAJXIADfcjAAAlfQAN900AACWIAA39ZAAAJZUADgR4AAAlogAOBJ0AACWxAA4FFQAAJcAADgYgAAAlywAOBkIAACXWAA4GZgAAJeEADg3mAAAl7AAOGXUAACX3AA4gnQAAJgoADi1YAAAmFwAOLnAAACYkAA4vIQAAJi8ADjxBAAAmOgAOPI4AACZHAA49jwAAJlQADkuTAAAmXQAOrnMAACZqAA6u7AAAJncADq95AAAmhAAOtg4AACaRAA63oQAAJpsADriJAAAmnwAOuugAACajAA677wAAJrIADr00AAAmwQAOvaYAACbQAA6+uQAAJtkADr8rAAAm6AAOwE0AACbxAA7BAAAAJwAADsRnAAAnCQAOxacAACceAA7IrAAAJy8ADsmLAAAnPAAOye0AACdJAA7LAwAAJ00ADs1WAAAnUQAOz1oAACdVAA7PhAAAJ2QADs/9AAAncQAO06IAACd1AA7TzAAAJ3kADtTsAAAnfQAO1QwAACeKAA7W0wAAJ5cADtkcAAAnpAAO25QAACeoAA7cOAAAJ6wADt3MAAAnsAAO3sYAACe0AA7e6wAAJ7gADuDkAAAnvAAO41gAACfLAA7kLQAAJ9oADuRnAAAn3gAO5JsAACfiAA7moQAAJ+YADubbAAAn6gAO51MAACfuAA7nrwAAJ/IADureAAAn9gAO7RAAACf6AA7uHAAAKAcADu97AAAoFAAO8D0AACgaAA8EVgAAKCAADwf4AAAoJgAPPkoAACgsAA8/QgAAKDcAD1OkAAAoQgAPazoAAChPAA9rZgAAKFoAD3oAAAAoZQAPhNsAAChwAA+GXAAAKH0AD41tAAAoigAPkHQAACiVAA+UzQAAKKAAD5UgAAAorQAP2bgAACi6AA/bVAAAKMUAD9ugAAAo0AAP3HcAACjbAA/fxwAAKOYAD+AKAAAo8QAP9m4AACj8AA/5NAAAKQcAD/0KAAApGQAP/TQAACkdAA/9YAAAKSEAD/14AAApJQAQAIQAACkpABAO7AAAKTQAEBPeAAApPwAQFsoAAClKABAW/QAAKVIAEBpoAAApWgAQGrwAACllABBM1AAAKXAAEFTvAAApfQAQWIAAACmIABBZkwAAKZMAEFpOAAApngAQYysAACmpABBjSwAAKbQAEGNqAAApvwAQeNAAACnKABCQFQAAKdUAENiRAAAp4AAQ2swAACnkABDbQQAAKe8AEN+RAAAp+gAQ5IQAACoHABD+4AAAKhIAERLSAAAqHQARIwoAACowABE0ywAAKjsAEUV8AAAqRgARRewAACpRABFGXAAAKlwAEVN5AAAqZwARU6sAACpyABFULgAAKn0AEVfXAAAqgwARWnEAACqWABFu3AAAKqEAEW78AAAqrgARcmYAACrBABFzaAAAKswAEXRKAAAq3wARdQUAACrqABF3YQAAKvUAEXqdAAArCAARfr8AACsTABGEjwAAKx4AEYSxAAArKQARhS8AACs0ABGFUAAAKz8AEYXnAAArSgARhhMAACtVABGGaQAAK2AAEYaeAAArawARhv4AACt2ABGHMwAAK4EAEYfyAAArjAARiI0AACuXABGJmAAAK6IAEYo0AAArrQARjC0AACu6ABGMhgAAK8UAEY0BAAAr0gARjnkAACvjABGOnwAAK/AAEZJaAAAsAwARk1cAACwQABGVMwAALB0AEZVzAAAsNQARmF8AACxAABGY0AAALFEAEZkkAAAsXAARmUoAACxnABGZhAAALHgAEZntAAAsiQARmrQAACyWABGa8AAALKcAEZv7AAAsuAARnCEAACy8ABGcxQAALMkAEZ1VAAAs1AARnp0AACzfABGqMQAALOoAEapxAAAtAgARtUkAAC0NABG9qgAALRgAEcJEAAAtJQARwm4AAC0yABHCoQAALUUAEcLiAAAtWgARw1gAAC1nABHDmQAALXwAEcPHAAAtiQARxQAAAC2cABHFLQAALbEAEcVQAAAtvgARxsYAAC3RABHG7AAALdUAEce0AAAt4gARya4AAC38ABHKNgAALgkAEcqPAAAuFgARy1wAAC4jABHLkwAALjAAEcwNAAAuPQARzR0AAC5KABHTZQAALlcAEdg1AAAuXQAR3MgAAC5qABHfKgAALnEAEeSKAAAueAAR5kwAAC6GABHnBwAALo0AEefHAAAungAR6IIAAC6sABH2LgAALr0AEfgZAAAu1gASBacAAC7hABIFqgAALu4AEg08AAAvCAASDx4AAC8TABIRtAAALxsAEifLAAAvIwASK4AAAC80ABJQoQAALzgAElDTAAAvRAASVBQAAC9QABJcvAAAL1kAEl4kAAAvZgAScAsAAC9zABJzHwAAL4QAEnM9AAAvkQASc1sAAC+cABJ23QAAL60AEncEAAAvtwASfHIAAC/BABJ8pQAAL84AEnz1AAAv2wASgIoAAC/oABKAqgAAL/EAEoDtAAAv/AASgZgAADAHABKD5gAAMBAAEoQyAAAwGQAShFIAADAiABKEnQAAMC0AEoaXAAAwOAASh+0AADBJABKIgwAAMFoAEo7TAAAwawASjyQAADB8ABKPrAAAMI0AEpcLAAAwngAStoMAADCvABK7eQAAMLUAEr+JAAAwwAAS1e4AADDLABLh1QAAMNoAEuW/AAAw6QAS7RUAADD4ABL3RAAAMQcAEwqaAAAxFgATCr4AADEjABMK9QAAMTQAEwvsAAAxSAATELgAADFVABMYBgAAMWAAExkNAAAxawATGUcAADF6ABMZwgAAMYkAExquAAAxlAATGvcAADGjABMbrgAAMbIAEx6KAAAxvQATHzIAADHIABMf0wAAMdMAEyBUAAAx3gATInsAADHpABMjUAAAMfQAEyQZAAAx/wATJIQAADIKABMk7QAAMhUAEydTAAAyIAATKDkAADIrABMo5AAAMjYAEylNAAAyQQATKrYAADJMABMr4QAAMlsAEyyXAAAyZgATLV4AADJxABMuGwAAMnwAEzC3AAAyhwATMg0AADKSABMzcwAAMp0AEzRkAAAyqAATOIkAADKzABM44gAAMrkAEzreAAAyvwATYjcAADLKABNiWAAAMtkAE2KOAAAy5AATYx0AADLxABNjbQAAMvwAE3lVAAAzDQATepQAADMgABOBaQAAMzMAE4JQAAAzRgAThZEAADNZABOGTAAAM2wAE4hTAAAzeQATiHsAADOUABONzQAAM6cAE48MAAAzugATkKsAADPNABORFAAAM+AAE6mFAAAz8wATqjQAADQAABOzQgAANAsAE7Y3AAA0FgATtnUAADQjABO3SgAANDAAE7ehAAA0PQATuB0AADRKABO4cAAANFAAE8ldAAA0VgAT0oAAADRjABPZAgAANHAAE9pwAAA0fQAT2soAADSIABPqzwAANJUAE+tjAAA0ogAT83gAADS1ABP1LQAANMAAE/gVAAA0zQAT+WoAADTaABP5lgAANOcAFABfAAA09AAUALUAADUBABQB9AAANQ4AFAIgAAA1GwAUApAAADUoABQCvAAANTUAFAOsAAA1QgAUBHIAADVPABQI3AAANVwAFAlxAAA1bwAUCjoAADWCABQKnAAANY0AFAr+AAA1mAAUC0cAADWjABQM9wAANa4AFA1ZAAA1wQAUEOIAADXUABQRBAAANeEAFBEmAAA17gAUGBsAADX7ABQblQAANgYAFCdWAAA2EwAUKd0AADYjABQq/AAANjYA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AEdVABveHQAAR2IAG970AABHbwAb31cAAEd8ABv1ZQAAR4kAG/WkAABHmAAb918AAEenABv35AAAR7QAG/f+AABH7gAb+SYAAEf9ABv5QAAASDcAHBZoAABIRgAcF9IAAEheABwY7AAASGsAHBp2AABIfQAcGucAAEiIABwbvAAASJMAHBzbAABIoAAcHhIAAEitABwfSQAASLgAHCFOAABIxQAcIWoAAEjXABwhhgAASOkAHCHIAABI+wAcIeQAAEkNABwiAAAASR8AHCIcAABJMQAcIjgAAElDABwpfwAASVUAHCoEAABJYAAcUc8AAElrABzFHQAASXEAHMs1AABJfAAc9GUAAEmHAB3yLwAASZIAHfPAAABJmAAd9AcAAEmeAB33JAAASaQAHf9vAABJrwAeAh4AAEmzAB4HpQAASb4AHguUAABJzwAeDgMAAEneAB4QMAAASe0AHhBgAABJ/AAeHnMAAEoLAB4gnQAAShYAHiFGAABKJwAeIhYAAEo/AB4l2QAASkoAHihyAABKTgAeKVUAAEpdAB4qOAAASmwAHishAABKewAeLdYAAEqMAB4v7AAASpsAHjDKAABKswAeMX4AAErAAB4zLwAAStgAHjPjAABK5QAeNXgAAEr9AB42EQAASwoAHjYWAABLFwAeOrkAAEsvAB47qgAAS0AAHkZkAABLRgAeSQ0AAEtVAB5JNQAAS2AAHklrAABLbwAeTZcAAEt+AB5NwwAAS40AHk7wAABLmAAeTxwAAEunAB5QSwAAS7IAHlB3AABLwwAeWRQAAEvOAB5dqQAAS90AHl4CAABMDQAeXl0AAEw9AB5fCgAATGIAHl9cAABMcQAeZ8cAAEx8AB500wAATI0AHnlRAABMngAeebAAAEy5AB59pgAATMYAHn7ZAABM1QAegBMAAEzkAB6BYwAATPUAHoRlAABNAAAehbMAAE0EAB6HEgAATQgAHoeeAABNDAAelhoAAE0QAB6WQAAATSMAHpfwAABNMAAemMoAAE1BAB6ZXwAATU4AHpoZAABNWwAemogAAE1oAB6dSAAATXUAHp6pAABNhgAen18AAE2TAB6gYwAATaQAHqFRAABNsQAeom4AAE2+AB6jiwAATcsAHqRNAABN2AAepSkAAE3pAB6odQAATfYAHqkbAABOAwAeq2MAAE4QAB6sOQAATiEA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J6VBAABn/wAnpboAAGgSACem8QAAaCUAJ6e8AABoOAAns1oAAGhFACe1LAAAaFgAJ7bfAABoYwAnxJ8AAGh1ACfFEQAAaIAAJ8U7AABoiwAnxzQAAGiWACfJbAAAaKEAJ8vkAABorAAnzH0AAGiwACfNXAAAaLsAJ88PAABoxgAn0KEAAGjKACfRqgAAaNUAJ9PiAABo4AAn1OcAAGjrACfZbwAAaPYAJ9tnAABpAQAn3wcAAGkQACfmdQAAaRsAJ+q5AABpJgAn7J8AAGkxACfxAgAAaTwAJ/IcAABpRwAn9XwAAGlNACgYaAAAaVgAKB9cAABpZwAoIGsAAGl2ACguVgAAaYcAKC6gAABpkgAoL5MAAGmdACgvugAAaagAKDSKAABpswAoNkkAAGnCACg2sgAAac0AKDiHAABp2AAoQVkAAGnjAChCNwAAae4AKEQnAABp+QAoR6wAAGoGAChLrQAAahMAKEyLAABqHgAoUVAAAGopAChUDQAAajYAKFVCAABqQwAoaYkAAGpQAChwkgAAamAAKHKmAABqawAoc6wAAGp2ACiEEAAAaoEAKIlvAABqjAAojA8AAGqXACiOrwAAaqIAKJCwAABqrQAokPAAAGq4ACiSdgAAasMAKJWqAABqzgAomGEAAGrZACidfQAAauQAKKAWAABq7wAoonoAAGr6ACikeQAAawUAKKS5AABrEAAopk0AAGsbACir4gAAayYAKK0pAABrMQAor+QAAGs8ACiv9gAAa0cAKLCzAABrWQAosTIAAGtkACixewAAa3YAKLHZAABrgQAosesAAGuMACiyeAAAa54AKLMBAABrsAAos0AAAGvCACizZQAAa9QAKLR4AABr3wAotNMAAGvqACi05QAAa/UAKLZTAABsBwAouS4AAGwSACi5QAAAbB0AKLn7AABsLwAounYAAGw6ACi6vQAAbEwAKLsXAABsVwAouykAAGxiACi7tgAAbHQAKLw/AABshgAovH4AAGyYACi8owAAbKoAKL2oAABstQAovgEAAGzAACi+EwAAbMsAKSFMAABs3QApK2AAAGzoAClC0wAAbPUAKW7DAABtAgApb4gAAG0NAClwCAAAbRgAKXDOAABtIwApcU0AAG0uAClxrgAAbTkAKYDjAABtRAApgbIAAG1XACmC3wAAbWQAKYNQAABtcQApnBMA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NCAgAACJdwA0IN8AAIl/ADQiDwAAiYcANCJ7AACJjwA0JNYAAImXADQlaQAAiZ8ANCmHAACJpwA0rdAAAIm0ADSuQAAAib8ANM8WAACJygA0z44AAInXADTW5AAAid0ANNqHAACJ7AA06/YAAIoBADUAQwAAihYANRMMAACKKwA1HmsAAIpAADUfQAAAik8ANSWIAACKXgA1JbAAAIprADUl1QAAingANUngAACKhQA1SqUAAIqWADVLeQAAiqcANUutAACKuAA1TFcAAIrDADVRVgAAitQANVHlAACK5QA1UrUAAIr2ADVS6gAAiwcANVNRAACLEgA1Yc8AAIsjADViWgAAizQANWLlAACLRQA1Y3AAAItWADVomgAAi2cANWkEAACLeAA1akAAAIuJADVqqgAAi5oANWsgAACLqwA1frIAAIu8ADWSfwAAi80ANZO1AACL3gA1k7gAAIvpADWVXAAAjAEANZZOAACMEgA1miAAAIwjADWbYAAAjDQANZ5tAACMRQA1nnAAAIxQADWnlAAAjGgANakvAACMeQA1qbYAAIyMADWriAAAjJ8ANbEOAACMsAA1spgAAIy7ADWzUgAAjMwANb1AAACM3QA1yjQAAIzqADXYTAAAjQIANdhdAACNCwA2JhEAAI0UADYmsQAAjSEANidRAACNLgA2KBcAAI07ADYouAAAjUgANilYAACNVQA2KfgAAI1iADYrrgAAjW8ANiyZAACNfAA2LUQAAI2WADYvjAAAjaMANi/TAACNsQA2MXgAAI2/ADY0RgAAjcwANjSHAACN2QA2NMgAAI3mADY1DAAAjfMANjeOAACOAAA2N9IAAI4NADZOAgAAjhoANlSxAACOLQA2VXYAAI46ADZWswAAjk0ANlqoAACOYwA2XRYAAI54ADZh7wAAjo0ANmJUAACOoAA2Yp4AAI6zADZjYwAAjsYANmURAACOzwA2ZrsAAI7YADZnlAAAjuEANmfcAACO6gA2aMAAAI7zADZq+QAAjvwANm1DAACPBQA2bi4AAI8OADZu6gAAjxcANm8hAACPIAA2dHUAAI8pADaT9wAAjzgANpXUAACPUgA2lh8AAI9gADavzwAAj24ANrBnAACPgQA2sj0AAI+OADazZAAAj5kANrRZAACPpAA2tIgAAI+3ADa13wAAj8oANsT0AACP3QA2xQ4AAI/qADbH6QAAj/sANshYAACQBQA2yNUAAJAPADbJOgAAkBkANsoTAACQIwA2ypUAAJAwADbMDgAAkEEANsw1AACQTgA2zlkAAJBbADbOxAAAkGgANs8/AACQdQA20E4AAJCGADbShwAAkJMANtOtAACQogA21WkAAJCtADbVxQAAkL4ANtgWAACQywA22IUAAJDRADbpxwAAkNcANvKmAACQ5AA29kMAAJDxADb2ZwAAkP4ANvckAACRBgA2904AAJETADb4JwAAkRsANvhRAACRKAA2+SoAAJEwADb5VAAAkT0ANvpQAACRRQA2+o8AAJFSADb6zgAAkV8ANvsNAACRbAA2/DEAAJF5ADb8cAAAkYYANvyvAACRkwA2/O4AAJGgADb+FAAAka0ANv5TAACRugA2/pIAAJHHADb+0QAAkdQANv/1AACR4QA3ADQAAJHuADcB3QAAkfsANwPVAACSEwA3BBwAAJIgADcFpgAAki0ANwfKAACSOgA3CooAAJJHADcLQAAAklQANwxgAACSYQA3DNAAAJJuADcNjQAAknsANw5DAACSiAA3DykAAJKiADcR1wAAkq8ANxJeAACSugA3F0AAAJLFADcX0AAAkuIANxhgAACS/wA3GPsAAJMcADcZDwAAkywANxkjAACTPAA3GVcAAJNMADcZgwAAk1wANxnAAACTbAA3GewAAJN8ADcaQQAAk4wANxq2AACTnAA3GxwAAJOsADcbMAAAk7wANx69AACTzAA3Hw8AAJPZADcfYQAAk+YANytXAACT8wA3K2kAAJQAADcrtwAAlA0ANyxZAACUGgA3LGsAAJQnADcsuQAAlDQANy1nAACUQQA3LXkAAJROADctrAAAlFsANy2+AACUaAA3LgwAAJR1ADcvmAAAlIIANy/LAACUjwA3L/4AAJScADcwMQAAlKkANzBmAACUtgA3MJsAAJTDADcw0AAAlNAANzfQAACU3QA3OJMAAJTqADc5gAAAlPcANzmSAACVBAA3OeAAAJURADc6zQAAlR4ANzrfAACVKwA3Oy0AAJU4ADc72wAAlUUANzvtAACVUgA3PCAAAJVfADc8MgAAlWwANzyAAACVeQA3PlkAAJWGADc+kgAAlZMANz7LAACVoAA3PwQAAJWtADc/PwAAlboANz96AACVxwA3P7UAAJXUADdGfwAAleEA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OuB2AACitQA64i4AAKK7ADrppwAAosEAOurSAACixwA66ywAAKLNADrriAAAotMAOu3BAACi2QA68AUAAKLmADrwhQAAovMAOvNIAACjAAA686EAAKMNADrz3wAAoxMAOvQGAACjIAA691QAAKMtADr3qQAAozoAOvheAACjSgA6+IQAAKNXADr5eQAAo2cAOvmqAACjdwA6+gIAAKN9ADr6iwAAo40AOvyRAACjnQA6/LoAAKOqADr8+gAAo7AAOv/rAACjwAA7AMoAAKPTADsB+gAAo9kAOwJFAACj5gA7AmoAAKP1ADsCfAAApAQAOwN9AACkCgA7A9IAAKQXADsEUAAApCcAOwSBAACkNwA7BtMAAKQ9ADsJdQAApE4AOwn4AACkWQA7CqUAAKRfADsONAAApGUAOw7hAACkawA7EAIAAKRxADsdsQAApHwAOyAZAACkiQA7IEoAAKSWADsgfQAApKMAOyCuAACksAA7IN8AAKS9ADshEAAApMoAOyFRAACk1wA7KCYAAKTkADs30AAApPUAOz4FAACk+wA7Pj0AAKUIADs+VQAApRUAOz7IAAClIgA7PwUAAKUoADtAEQAApS4AO0D3AAClNAA7QcMAAKU6ADtCMwAApUcAO0SXAAClVAA7RrcAAKVhADtIKQAApW4AO0rOAAClewA7TfoAAKWIADtO0gAApY4AO07zAAClmwA7T6EAAKWhADtQZQAApacAO1I/AAClrQA7UrgAAKWzADtTrgAApdEAO1UmAACl1wA7VZIAAKXdADtZDwAApeMAO2DIAACl8AA7YOwAAKX9ADthkgAApgoAO2GqAACmFwA7Yc4AAKYkADtihQAApjEAO2L/AACmPgA7YyMAAKZLADtkOQAAplgAO2UxAACmZQA7ZWYAAKZyADtlfgAApn8AO2ZHAACmjAA7ZrAAAKaZADtm1AAApqYAO2e+AACmswA7Z9YAAKbAADuGKgAAps0AO51aAACm2gA7v5UAAKbnADvSHQAApvQAO9JEAACm/wA70n4AAKcKADvohwAApxUAO+jBAACnIAA8BtoAAKcrADwHtgAApzYAPAgNAACnQQA8GE8AAKdUADwiQAAAp2EAPCM7AACnaQA8I2EAAKdxADwjhwAAp3kAPCOtAACngQA8I9MAAKeJADwkUAAAp5EAPCR2AACnmQA8JJwAAKehADwkwgAAp6kAPCToAACnsQA8JWUAAKe5ADwliwAAp8EAPCYIAACnyQA8JoUAAKfRADwnAgAAp9kAPCcoAACn4QA8J04AAKfpADwndAAAp/EAPCeaAACn+QA8J8AAAKgBADwoEwAAqAkAPChmAACoEQA8KLkAAKgZADwpDAAAqCEAPC25AACoKQA8MDAAAKg0ADwxtQAAqD8APDaRAACoSgA8N8sAAKhVADw56gAAqGAAPD8hAACoawA8P2QAAKh1ADw/pwAAqH8APD/qAACoiQA8QC0AAKiTADxAcAAAqJ0APECzAACopwA8QPYAAKixADxBewAAqLsAPEG+AACoxQA8QgEAAKjPADxCRAAAqNkAPEKHAACo4wA8QsoAAKjtADxDDQAAqPcAPENQAACpAQA8Q5MAAKkLADxD1gAAqRUAPEQXAACpHwA8RFgAAKkpADxEmQAAqTMAPETaAACpPQA8RR0AAKlHADxJEwAAqVEAPEm0AACpWwA8SiIAAKllADxKiwAAqW8APEslAACpeQA8TEoAAKmDADxMxAAAqY0APE1cAACplwA8Td4AAKmhADxOIQAAqasAPE5kAACptQA8TqcAAKm/ADxO6gAAqckAPFBRAACp0wA8UbUAAKndADxSGQAAqecAPFJaAACp8QA8Up0AAKn7ADxTFAAAqgUAPFNWAACqDwA8X4sAAKoZADxplAAAqiQAPG8sAACqPAA8c0oAAKpUADx0TwAAqmwAPHTdAACqdwA8dlYAAKqCADx89wAAqo0APH0xAACqpQA8fZEAAKqwADx99wAAqrsAPH9iAACqxgA8f5wAAKreADx/uwAAqukAPIIFAACq9AA8hFkAAKsBADyFTgAAqyEAPIWJAACrNAA8h4MAAKs/ADyHuAAAq1IAPJBwAACrXQA8k14AAKtoADyT1AAAq3IAPJP6AACrfAA8lXcAAKuGADyV9AAAq5AAPJYhAACrmwA8lzIAAKumADyXvwAAq7EAPJqqAACrvAA8nWsAAKvGADydkAAAq9EAPJ5aAACr3AA8oK4AAKvmADyhoQAAq/EAPKHtAACr/AA8o8gAAKwHADylKgAArBIAPKVkAACsKAA8pvgAAKwzADynMgAArEkAPKejAACsVAA8uF8AAKxeADzYmwAArGsAPNjBAACseAA83YAAAKyFADzgigAArJYAPODHAACspwA85OcAAKyyADzlfQAArL0APOi/AACsygA86d4AAKzXADzqgQAArOQAPOypAACs8QA87M8AAKz+ADzu3QAArQsAPO+5AACtGAA88WMAAK0lADz12wAArTIAPPZzAACtNgA8/D0AAK1BADz9IAAArVIAPP9FAACtYwA9ANoAAK1uAD0CnAAArX8APQWtAACtkAA9BqQAAK2dAD0HvAAAraoAPQimAACttQA9CZ8AAK3CAD0PowAArc8APRP7AACt4AA9HysAAK3tAD0fiQAArfoAPSAXAACuBwA9IIMAAK4UAD0hUAAAriEAPSGfAACuLgA9KeYAAK47AD0wYwAArkwAPTECAACuWQA9MtYAAK5mAD0zagAArnMAPTfuAACuewA9O/IAAK6IAD08FQAArpMAPTw5AACungA9StEAAK6tAD1LMwAArroAPVTvAACuxwA9V6oAAK7WAD1YlQAAruUAPVxWAACu9AA9eB8AAK74AD14sgAArwUAPYf/AACvEgA9iCUAAK8fAD2VtQAArywAPZYeAACvOQA9mC0AAK9GAD2bnAAAr1cAPZ7ZAACvaAA9ogYAAK91AD2o9wAAr4AAPauKAACvhAA9rRIAAK+RAD2thQAAr6kAPa21AACvtgA9rg8AAK/DAD2upwAAr9AAPa7hAACv2AA9rygAAK/lAD2wRgAAr/IAPbGbAACv/wA9spMAALAMAD2yuAAAsBkAPbqNAACwJgA9uyoAALAzAD27xwAAsEAAPbxkAACwTQA9vQEAALBaAD2+CQAAsGcAPcCnAACwdAA9wr0AALCBAD3E1AAAsI4APcVaAACwmwA9xjcAALCoAD3HRgAAsLUAPcj4AACwwgA9yjYAALDPAD3MhgAAsNwAPc1wAACw6QA9zbkAALD2AD3OyAAAsQMAPdCtAACxEAA90esAALEdAD3VfgAAsSoAPduGAACxNwA92+gAALFEAD3gaQAAsVEAPeLsAACxXgA9414AALFrAD3l0QAAsXgAPesDAACxhQA979MAALGSAD3xUAAAsZ8APfLnAACxsAA99IkAALG9AD31AgAAsdAAPfc/AACx3QA9+EYAALHwAD36MgAAsf0APf6KAACyCgA9/2UAALIXAD4BIwAAsioAPgFeAACyNwA+AuwAALJEAD4HlQAAslEAPglzAACyXgA+DzkAALJrAD4PawAAsnMAPhAMAACyewA+EocAALKGAD4WTgAAspEAPhdOAACyngA+HH0AALKrAD4dSgAAsrgAPh3wAACyxQA+Ho0AALLSAD4jIwAAst8APioUAACy7AA+KycAALL9AD4tjgAAsw4APi5yAACzGwA+Lu0AALMuAD4wlAAAszsAPjXBAACzSAA+NfcAALNiAD42ngAAs3wAPjc0AACzhQA+OAsAALOfAD44rQAAs6gAPjmEAACzwgA+OlAAALPLAD49wAAAs9QAPkDgAACz4QA+QYMAALPuAD5CPwAAs/sAPkL6AAC0CAA+RPEAALQVAD5GOgAAtCIAPkdmAAC0LwA+SCcAALQ8AD5LywAAtEkAPk5xAAC0VgA+UF0AALRjAD5RFgAAtHAAPlpYAAC0fQA+W68AALSKAD5cbQAAtJcAPl5wAAC0pAA+XvsAALSxAD5fsAAAtL4APmDwAAC0ywA+YZ4AALTYAD5jkwAAtOUAPmUVAAC08gA+ZfwAALT/AD5qhwAAtQwAPnIzAAC1GQA+dLEAALUsAD52kQAAtT8APna3AAC1TAA+fI8AALVZAD589gAAtWYAPn6NAAC1eQA+gLkAALWBAD6B1wAAtY4APoKKAAC1lgA+gyUAALWeAD6HAAAAtaYAPonxAAC1swA+jEcAALXAAD6NbAAAtc0APpCaAAC12gA+lY8AALXnAD6ZcgAAtfQAPpmzAAC2AQA+mdQAALYOAD6dygAAthsAPqj/AAC2KAA+qzYAALY1AD6rwQAAtkIAPq+LAAC2TwA+sFEAALZcAD7FsAAAtmkAPsY7AAC2dgA+yEEAALaDAD7TOAAAtpAAPtTXAAC2nwA+1SwAALauAD7dCAAAtr0APt0fAAC2xgA+3TgAALbPAD7hUQAAttMAPuMjAAC24AA+5FYAALbtAD7lXgAAtvoAPuaRAAC3BwA+6EIAALcUAD7pUQAAtyEAPuw9AAC3LgA++WMAALc7AD8GfwAAt0gAPwaoAAC3TQA/BtEAALdSAD8YywAAt1cAPyQ6AAC3WwA/JTIAALdjAD8ulAAAt2sAPy8KAAC3fgA/RaIAALeRAD9KrgAAt6IAP0tOAAC3pgA/Zu8AALeqAD+HSwAAt7cAP4fdAAC3zQA/h/cAALfjAD+JbQAAt+4AP4qsAAC3/wA/ixUAALgQAD+LdgAAuCEAP4yoAAC4MgA/jQgAALhDAD+OUQAAuFQAP468AAC4ZQA/kdUAALhwAD+UdgAAuIEAP5adAAC4jAA/43MAALiYAD/kPAAAuK4AQAjkAAC4xABACRkAALjdAEAJrQAAuPYAQAskAAC5BwBAC1kAALkgAEAMZQAAuTkAQA0bAAC5SgBADhYAALljAEAO3gAAuXYAQBEgAAC5hwBAGAAAALmaAEAYWgAAuasAQBibAAC5vABAGYoAALnNAEAbWAAAueAAQCSrAAC57wBAJpMAALoAAEAnXAAAuhEAQCjIAAC6KgBAK0sAALo7AEArrgAAukwAQCvwAAC6XQBALU4AALpuAEAuXAAAun0AQDDDAAC6lwBAQXUAALqqAEBCPAAAusMAQENEAAC63ABAREwAALrvAEBEigAAuvoAQEYXAAC7BQBARzgAALseAEBIbwAAuzcAQEjYAAC7UABASZcAALtYAEBK4wAAu3EAQEtqAAC7igBATFwAALuSAEBNRAAAu6sAQE+cAAC7xABAVecAALvdAEBWywAAu/YAQFbeAAC8AQBAVy0AALwOAEBYgwAAvBsAQFiuAAC8JgBAWUUAALwzAEBZWAAAvD4AQFmWAAC8SwBAWjkAALxWAEBbSQAAvGEAQF62AAC8dABAYiwAALyNAEBljwAAvKYAQGiVAAC8swBAaKcAALzAAEBozAAAvM0AQGjeAAC82gBAafgAALznAEBqXQAAvO0AQGqJAAC8+gBAapsAAL0HAEBrTgAAvRQAQGyZAAC9IQBAbhkAAL0wAEBxMgAAvT8AQHJIAAC9WABAczEAAL1xAEB0IAAAvYoAQHT6AAC9nQBAdc0AAL2wAEB2oAAAvcMAQHdpAAC91gBAeCwAAL3pAEB5TgAAvgIAQHo6AAC+GwBAev0AAL40AEB7zgAAvk0AQHzlAAC+ZgBAfb4AAL5/AEB+KAAAvpgAQH7eAAC+oABAf0gAAL65AEB/hgAAvsUAQIDUAAC+3gBAgbAAAL7xAECEHAAAvwQAQIURAAC/HQBAhhoAAL82AECG+QAAv08AQIedAAC/YgBAiFoAAL97AECK8QAAv5QAQIwzAAC/pwBAjXMAAL+6AECbjQAAv80AQJwUAAC/2gBAnF8AAL/jAECcuQAAv/AAQJ0CAAC//wBAnUsAAMAOAECdlAAAwB0AQJ3dAADALABAniYAAMA7AECebwAAwEoAQJ64AADAWQBAnwEAAMBoAECfSgAAwHcAQJ+TAADAhgBAn9wAAMCVAECgJQAAwKQAQKBuAADAswBAoLcAAMDCAEChAAAAwNEAQK2bAADA4ABAsw4AAMDtAECzpgAAwQAAQLrXAADBEwBAu3YAAMEeAEC8hwAAwS0AQL9XAADBPABAwTMAAMFPAEDEagAAwWgAQMXUAADBcwBAxqUAAMGGAEDJVQAAwZ8AQM1eAADBsABA0aIAAMHBAEDVdgAAwdQAQNV7AADB4QBA1joAAMH7AEDZYwAAwgoAQOBfAADCHQBA4ZYAAMIuAEDhzgAAwj8AQOIhAADCUABA49kAAMJhAEDmCgAAwnIAQOZCAADCgwBA54EAAMKUAEDoOAAAwqEAQOhoAADCrgBA6K4AAMK7AEDpNQAAwsgAQOmFAADC1QBA6eQAAMLiAEDrywAAwu8AQO0yAADDAgBA7fkAAMMPAEDulQAAwykAQQ3BAADDPABBD90AAMNVAEEQ2gAAw10AQRIoAADDaQBBFpkAAMNxAEEe1QAAw4QAQR+hAADDlwBBIHEAAMOqAEEhQQAAw70AQSIPAADD0ABBTKAAAMPjAEFN+gAAw/8AQVHxAADEEABBUg0AAMQfAEFSVgAAxC4AQVSSAADEPQBBVoAAAMRIAEFWnQAAxFMAQVf2AADEXgBBWOIAAMRpAEFsYwAAxH8AQWyGAADEigBBbPEAAMSVAEFt5gAAxKAAQW6fAADEpgBBe68AAMSxAEF73AAAxLwAQXxWAADEzQBBfZMAAMTcAEF93AAAxO0AQX5hAADE/ABBfxYAAMULAEGC+wAAxRoAQYOnAADFJQBBhPQAAMUwAEGFbwAAxTsAQYWvAADFRgBBhdoAAMVRAEGNoQAAxVwAQZEyAADFbQBBkUsAAMV1AEGRigAAxXoAQZGjAADFggBBk+sAAMWHAEGUAwAAxZgAQZX9AADFpwBBm6cAAMW/AEGb7AAAxdAAQZ49AADF4QBBnyUAAMXwAEGg6QAAxf8AQaHTAADGDgBBojwAAMYdAEGwWgAAxiwAQbGAAADGNwBBtVQAAMZCAEG++gAAxkgAQb8MAADGVQBBwNsAAMZbAEHBwAAAxnIAQcIfAADGiQBBwt4AAMaPAEHD1QAAxqYAQcReAADGswBBxRUAAMbGAEHFYgAAxswAQcluAADG0gBBz0MAAMbYAEHP/QAAxt4AQdGUAADG5ABB0ysAAMbqAEHV+QAAxvAAQdc2AADG9gBB2CcAAMcHAEHYegAAxw0AQd2dAADHEwBB4AsAAMcgAEHgOgAAxysAQeCTAADHNgBB7moAAMdFAEHvZQAAx2MAQfDpAADHcQBB8g4AAMd/AEHzhgAAx6cAQfcVAADHzwBB934AAMfgAEH36wAAx+sAQfh7AADH/ABB+LgAAMgUAEH5MQAAyCEAQfluAADIOQBB+ecAAMhGAEH6JAAAyF4AQfsOAADIawBB/A8AAMh8AEH8hAAAyI0AQfzrAADIngBB/TgAAMipAEH9cQAAyLEAQgpEAADIuQBCYP8AAMjGAEJh4AAAyNMAQmMPAADI4ABCZBoAAMjtAEJk8wAAyPgAQmYGAADJAwBCZygAAMkQAEJoOAAAyR0AQmlIAADJKgBCalgAAMk3AEJrhAAAyUQAQmzcAADJUQBCbkAAAMleAEJvjAAAyWsAQnDUAADJeABCckgAAMmFAEJzhgAAyZIAQnVrAADJnwBCdsIAAMmsAEJ3wwAAybcAQnfGAADJxABCeOsAAMncAEJ7BAAAyekAQnwbAADJ9gBCfuIAAMoDAEKBTwAAyg4AQoLQAADKGwBCg8sAAMooAEKExgAAyjUAQoXvAADKQgBChx4AAMpPAEKIRgAAylwAQomVAADKaQBCinQAAMp2AEKLUwAAyoMAQowyAADKkABCjREAAMqdAEKOFgAAyqoAQo8PAADKtwBCj+gAAMrCAEKQwQAAys0AQpGaAADK2ABCknMAAMrjAEKTTAAAyu4AQqr6AADK+QBCq60AAMsKAEKvVQAAyxUAQq/3AADLIgBCsMIAAMstAEKxNwAAyzgAQrL1AADLQwBCvWYAAMtHAEK+GQAAy1IAQsbcAADLXQBCx5cAAMtmAELH+gAAy28AQu3TAADLfABC7f8AAMuJAELuKwAAy5YAQwUlAADLowBDC74AAMuuAEMfPgAAy7sAQx+WAADLzABDICEAAMvZAEMiOAAAy+oAQyXwAADL9wBDJkMAAMwHAEMmjgAAzBcAQyc6AADMIQBDJ9sAAMwxAEMpHAAAzEEAQysMAADMUQBDKw8AAMxcAEMrmgAAzHQAQy5HAADMhABDLq0AAMycAEM25wAAzLQAQzcqAADMwQBDN3EAAMzLAEM4ewAAzNUAQzjCAADM3wBDOjgAAMzpAEM7DQAAzPMAQzw5AADNBABDPD4AAM0PAEM84AAAzScAQ1RPAADNOABDVMAAAM1DAENVMQAAzU4AQ1WiAADNWQBDWBMAAM1mAENY2AAAzXEAQ1lTAADNfABDWaoAAM2EAENZ0wAAzY8AQ1qAAADNmgBDXGMAAM2iAENeRQAAzaoAQ15tAADNsgBDXtQAAM29AENfIgAAzcgAQ19jAADN1wBDX8oAAM3iAENhfQAAze0AQ2IkAADN9QBDYmgAAM39AENirAAAzhEAQ2LmAADOGQBDYxMAAM4qAENkJAAAzjsAQ2ViAADOQwBDZgkAAM5LAENm8wAAzlkAQ2lDAADOZwBDadMAAM57AENp6AAAzoYAQ2pKAADOmgBDax8AAM6uAENsUAAAzrkAQ2zKAADOzQBDbREAAM7hAENubgAAzvUAQ27TAADO/QBDb0IAAM8FAENvowAAzw0AQ3D6AADPIQBDcasAAM8sAENy0QAAzzQAQ3L5AADPPABDc0oAAM9HAENzbQAAz1IAQ3SVAADPWgBDdSYAAM9nAEN1KwAAz3IAQ3aqAADPigBDd1AAAM+XAEN3VQAAz6IAQ31/AADPugBDfqIAAM/FAEOBGQAAz9YAQ4FjAADP7gBDgj8AAM/5AEOCugAA0AQAQ4LsAADQDwBDg5cAANAaAEOKPAAA0CUAQ5C/AADQMABDsbkAANBGAEOyXgAA0F8AQ7M4AADQeABDtFYAANCLAEO0iAAA0JYAQ7XLAADQoQBDtr4AANC6AEO3vwAA0NMAQ7gWAADQ7ABDuLMAAND0AEO5wwAA0Q0AQ7oyAADRJgBDuqYAANEuAEO7eAAA0UcAQ7w2AADRYABDvhgAANF5AEPDVwAA0ZIAQ8QTAADRqwBDxCIAANG2AEPEYwAA0cMAQ8V/AADR0ABDxaIAANHbAEPGHwAA0egAQ8YuAADR8wBDxmIAANIAAEPG6wAA0gsAQ8fPAADSFgBDypQAANIpAEPNeAAA0kIAQ9BnAADSWwBD020AANJoAEPTfwAA0nUAQ9OkAADSggBD07YAANKPAEPU0AAA0pwAQ9U1AADSogBD1WEAANKvAEPVcwAA0rwAQ9YmAADSyQBD13EAANLWAEPY8QAA0uUAQ9wxAADS9ABD3UcAANMNAEPeMAAA0yYAQ98hAADTPwBD3/IAANNSAEPgzAAA02UAQ+GfAADTeABD4mIAANOLAEPjhAAA06QAQ+RwAADTvQBD5UEAANPWAEPmdwAA0+8AQ+byAADUCABD6BcAANQQAEPo8AAA1CkAQ+laAADUQgBD6p4AANRKAEPrCAAA1GMAQ+tGAADUbwBD7JQAANSIAEPtcAAA1JsAQ+/cAADUrgBD8NEAANTHAEPx2gAA1OAAQ/LBAADU+QBD820AANUMAEPz7AAA1SUAQ/TMAADVOABEBO8AANVRAEQFdgAA1V4ARAXBAADVZwBEBhsAANV0AEQGZAAA1YMARAatAADVkgBEBvYAANWhAEQHPwAA1bAARAeIAADVvwBEB9EAANXOAEQIGgAA1d0ARAhjAADV7ABECKwAANX7AEQI9QAA1goARAk+AADWGQBECYcAANYoAEQJ0AAA1jcARAoZAADWRgBECmIAANZVAEQaugAA1mQARB+VAADWcQBEI0UAANaCAEQkfwAA1pMARCZ3AADWrABEKZ0AANa9AEQqtgAA1swARCvfAADW1wBEMCEAANbiAEQ5dQAA1vMARDsSAADXBABEQKUAANcVAERBqQAA1ygAREOdAADXRgBERLYAANdkAERGAgAA13cAREaLAADXigBESiAAANejAERKugAA17IAREtQAADXvwBETWwAANfOAER33gAA1+cARHjWAADYAABEec4AANgZAER65AAA2DIARHvVAADYRQBEgHkAANheAETCXAAA2HEARM8hAADYfABEz9QAANiHAEUrCAAA2JIARSs5AADYoQBFK4wAANiwAEUrvQAA2L8ARSzAAADYzgBFlmUAANjdAEWWogAA2OoARZlJAADY/wBFmXYAANkIAEWapAAA2REARZsZAADZFwBFm68AANkgAEWcdAAA2SkARZ4UAADZLwBFnlkAANk1AEWe4wAA2TsARaAEAADZQQBFoLEAANlHAEWg+AAA2U0ARaFJAADZUwBFzbIAANlZAEXOrgAA2V8ARdAZAADZZQBF0WMAANlwAEXSvgAA2XsARdkuAADZhgBF2VwAANmTAEXZigAA2aAARdm4AADZrQBF2hAAANm6AEXa5wAA2ccARdxMAADZ1ABF3HcAANnhAEXc7QAA2e4ARd0wAADZ+wBF3xcAANoIAEXfQgAA2hUARd9uAADaIgBF37cAANovAEXkAQAA2jwARecHAADaSQBF6B8AANpWAEXoTQAA2mMARejDAADafABF7kcAANqJAEYBugAA2o8ARgaNAADanABGBxMAANqpAEYHRwAA2rYARgeeAADawwBGB9AAANrQAEYInwAA2t0ARhHWAADa6gBGFNoAANr3AEYV7gAA2wQARiCkAADbEQBGIMAAANsaAEYvVQAA2yAARi+5AADbMQBGMFIAANs+AEY2pwAA20cARjcIAADbWABGOmIAANtlAEY/3gAA224ARkK3AADbdwBGSY4AANuAAEZLCAAA24kARks6AADblABGS3AAANudAEZMjgAA26YARkz0AADbrwBGTZQAANu4AEZSMQAA28EARmWFAADbzgBGZb8AANvZAEZl5AAA2+QARmeuAADb7wBGZ+kAANv1AEZoeAAA3AAARmjwAADcCwBGafUAANwWAEZqMgAA3CEARmyBAADcLABGbg8AANw3AEZuoAAA3D0ARnIQAADcSABGezoAANxTAEZ9CAAA3FcARn9JAADcZABGf3MAANxoAEZ/3QAA3GwARoAHAADccABGgPEAANx0AEaC/AAA3IEARoMmAADchQBGg5AAANyJAEaDugAA3I0ARoSkAADckQBGhqUAANyeAEaGzwAA3KIARo9IAADcpgBGj20AANyxAEabiQAA3MAARpvtAADcxgBGnIUAANzMAEac0gAA3NIARp09AADc2ABGncEAANzeAEaeDgAA3OQARp55AADc6gBGnuAAANzwAEafRAAA3PYARp/cAADc/ABGoCkAAN0CAEaglAAA3QgARqEYAADdDgBGoWUAAN0UAEah0AAA3RoARqJIAADdIABGoqwAAN0mAEajRAAA3SwARqORAADdMgBGo/wAAN04AEakgAAA3T4ARqTNAADdRABGpTgAAN1KAEal1AAA3VAARqY4AADdVgBGptAAAN1cAEanHQAA3WIARqeIAADdaABGqAwAAN1uAEaoWQAA3XQARqjEAADdegBGqSsAAN2AAEapjwAA3YYARqonAADdjABGqnQAAN2SAEaq3wAA3ZgARqtjAADdngBGq7AAAN2kAEasGwAA3aoARqyTAADdsABGrPcAAN22AEatjwAA3bwARq3cAADdwgBGrkcAAN3IAEauywAA3c4ARq8YAADd1ABGr4MAAN3aAEa/FgAA3eAARt7DAADd6wBG4TgAAN3xAEbiTgAA3fcASGWkAADd/QBIZcEAAN4KAEhnQQAA3hcASGqIAADeJABIasgAAN4vAEhrRAAA3jcASGyRAADePwBIba0AAN5HAEhwDQAA3mEASHHEAADecgBId78AAN6DAEh7TQAA3o4ASHy0AADemwBIfScAAN6oAEiAowAA3q4ASIDTAADeuwBIgRQAAN7IAEiCewAA3s4ASIKrAADe2wBIguwAAN7oAEiGywAA3u4ASId+AADe+wBIh78AAN8IAEiJ1wAA3w4ASIoGAADfGwBIkE0AAN8oAEiR3AAA3zUASJKWAADfQgBIlCwAAN9KAEiU6QAA31cASJUSAADfXQBIlZwAAN9qAEiWtQAA33cASJuSAADfggBInWMAAN+PAEid1AAA35UASJ6cAADfogBIozMAAN+vAEijwQAA38AASKTCAADfzQBIsbgAAN/aAEiyIQAA3+cASLn0AADf7QBIuogAAN/6AEi/0AAA4A0ASMOqAADgGgBIxD4AAOAnAEjNEgAA4DoASNRwAADgTQBI1QcAAOBYAEjVggAA4GMASNWnAADgbgBI1kQAAOB5AEjWYAAA4IQASNioAADgjwBI2KsAAOCcAEjaFAAA4LQASNqjAADgvwBI2xoAAODKAEjbMgAA4NIASNvAAADg4QBI3IAAAODsAEjczQAA4PcASN0iAADhAgBI3YAAAOENAEjd3gAA4RgASN48AADhIwBI3poAAOEuAEje+AAA4TkASN/cAADhRABI4DMAAOFPAEjgNgAA4VoASOCmAADhcABI4KkAAOF7AEjiOQAA4ZEASOKiAADhpwBI4zMAAOGyAEjjnAAA4cgASORYAADh0wBI5cMAAOHeAEjnNQAA4eQASOc4AADh7wBI6B0AAOIFAEjoIAAA4hAASO8JAADiJgBI77IAAOJYAEjwTQAA4m4ASPEnAADihABI9ncAAOKaAEj3FQAA4qsASPeKAADitgBI+JcAAOLBAEj9dgAA4t8ASQDUAADi8ABJB8MAAOMDAEkTbQAA4wkASRPXAADjDwBJFDsAAOMVAEkVPgAA4xsASSDPAADjKABJIVQAAOM5AEkivAAA40oASSXnAADjVwBJJicAAON1AEkpaAAA44gASSmoAADjpgBJLo0AAOO5AEkvjAAA49AASS/OAADj4QBJafsAAOP4AElqGAAA5AUASWo7AADkDwBJawMAAOQcAElsygAA5CkASW0ZAADkNgBJbTgAAORDAEltYAAA5FAASW8lAADkXQBJbygAAORqAElwHAAA5IQASXAfAADkkQBJcmEAAOSrAEly0AAA5LUASXRCAADkvwBJdKUAAOTOAEl1TQAA5N0ASXV/AADk7ABJdYIAAOT5AEl5JQAA5RMASXxWAADlIABJfHMAAOUmAEmBQgAA5TMASYHXAADlPgBJglQAAOVJAEmCbAAA5VEASYzFAADlYABJjsMAAOVrAEmRlwAA5XMASZGzAADlfgBJk18AAOWJAEmTxgAA5ZQASZY7AADlnwBJmysAAOWrAEmbkgAA5bYASZvPAADlwQBJnuYAAOXMAEnK5wAA5dwAScxfAADl6QBJzcYAAOX8AEnOfgAA5gkASc91AADmFgBJ0BwAAOYpAEnQ3gAA5kMASdHJAADmSQBJ0hEAAOZWAEnSYgAA5mMASdKtAADmcABJ1CAAAOZ9AEnZLQAA5ooASdtBAADmlABJ23YAAOaeAEndIgAA5qgASeAKAADmuABJ4OMAAObFAEnkNQAA5tYASeSSAADm6QBJ5xIAAOb2AEnnWgAA5wMASeejAADnEABJ5/cAAOcdAEnohAAA5yoASekJAADnNwBJ6TMAAOdEAEnpZAAA50oASenrAADnVwBJ7XkAAOdkAEn/+QAA52oASge5AADncABKCB0AAOd9AEoJdQAA54oASgwNAADnkABKDGoAAOejAEoMtgAA57YAShHMAADnwwBKEikAAOfWAEoT5QAA5+kASiAyAADn9gBKIGIAAOgJAEo2xwAA6BYASjj4AADoKQBKOVIAAOg2AEo8BAAA6EMASjw7AADoUABKPQUAAOhdAEo9PAAA6GoASj43AADodwBKP1UAAOiEAEpEeAAA6JEASkT7AADongBKSFAAAOirAEpIiwAA6L4ASki9AADoywBKSO0AAOjeAEpLBAAA6OsASks/AADo/gBKS9UAAOkLAEpMCAAA6RgASlLqAADpMABKVMsAAOk9AEpXaAAA6VUASlfhAADpaABKWWcAAOl7AEpivAAA6YgASmRjAADpjgBKZeUAAOmUAEpmHAAA6aEASmaxAADppwBKaBIAAOm0AEppqAAA6boASmuaAADpwABKbEgAAOnGAEptQQAA6cwASm2+AADp0gBKdBEAAOnYAEp0QQAA6eUASnTiAADp8gBKdXQAAOn4AEp2ugAA6f4ASnfLAADqBABKeIAAAOoKAEp5ZAAA6hAASnqpAADqFgBKfC0AAOocAEqDEgAA6iIASoT/AADqLwBKhbYAAOo1AEqHaAAA6jsASof4AADqQQBKiHUAAOpHAEqJAAAA6k0ASomSAADqUwBKjM8AAOpZAEqNfQAA6l8ASo6cAADqZQBKj24AAOprAEqQoAAA6nEASpIaAADqdwBKk3UAAOp9AEqTrAAA6ooASpRPAADqkABKldYAAOqdAEqZnAAA6qMASqAmAADqsABKoEUAAOrDAEqg1AAA6tAASqW/AADq4wBKpn0AAOrwAEqmrQAA6wMASqbMAADrFgBKpzYAAOsjAEqoygAA6ywASqvlAADrOQBKrRkAAOtGAEqyrAAA61MASrLbAADrYABKucwAAOttAEq8gAAA63oASr1dAADrjQBKwRgAAOuaAErC2gAA66cASsNgAADrtABKzCwAAOvBAErMzQAA69AAStsXAADr3wBK3MkAAOvsAEre7wAA6/sASuAfAADsCgBK4xMAAOwZAErjcQAA7CYASuRTAADsMwBK5iIAAOxAAErmagAA7FoASuaGAADsdABK5rAAAOyOAErm6AAA7KgASucgAADswgBK51QAAOzcAErnswAA7PYASugrAADtEABK61oAAO0qAErr7QAA7TcASuxFAADtRABK7HoAAO1RAEr7KAAA7V4ASwC4AADtawBLAYMAAO14AEsCdgAA7YUASxCGAADtkgBLEdEAAO2fAEsTtwAA7awASxeaAADtuQBLF8gAAO3BAEsgJwAA7ckASyCqAADt1gBLINcAAO3lAEshEAAA7fQASyHwAADuAwBLIm0AAO4QAEsmqAAA7h0ASyyxAADuKgBLLVkAAO43AEstmwAA7kQASzHDAADuUQBLMfIAAO5eAEsyogAA7mcASzLRAADudABLNFEAAO59AEs3oQAA7ooASzgvAADulwBLPWIAAO6kAEs/pQAA7rEAS0AvAADuxABLQg4AAO7XAEtCdAAA7usAS0K5AADu/gBLQwAAAO8RAEtDoAAA7x4AS0SpAADvKwBLRUkAAO9BAEtF1wAA71QAS0a2AADvYQBLRwEAAO93AEtHLgAA74oAS1xiAADvlwBLdXAA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ASqeAFqAYAABKrEAWoEDAAEqxABagd8AASrXAFqDgAABKuoAWoVpAAEq9wBahYwAASr8AFqFkQABKwkAWoYKAAErIwBahtMAASswAFqIFAABKzUAWoo5AAErQgBai6EAAStPAFqLxgABK1wAWoyWAAEraQBajMsAASt2AFqM7wABK4MAWo+xAAErkABakIwAASudAFqSCwABK6oAWpOAAAErsABak9sAASu9AFqXRgABK8MAWpd2AAEr0ABal7EAASvdAFqX3QABK+oAWphJAAEr9wBamHcAASwEAFqcpwABLA4AWpzxAAEsHQBanTsAASwsAFqg/QABLDsAWqFHAAEsSgBaoZEAASxZAFqkIAABLGgAWqS3AAEsfQBapfQAASyKAFqmmgABLJAAWqbeAAEsnQBapwoAASyjAFqnqwABLKkAWqgIAAEsvgBaqFoAASzLAFqqVAABLNgAWqq1AAEs5QBasesAASzyAFqyJwABLP8AWrL6AAEtDABaszQAAS0ZAFqzlwABLR8AWrPOAAEtJQBatC0AAS0yAFq0hgABLTgAWrTlAAEtRQBatVIAAS1LAFq1nAABLVgAWrXzAAEtZQBatkoAAS1yAFq50wABLX8AWroJAAEtkgBaulEAAS2fAFq6dQABLawAWrqnAAEtuQBavSYAAS3GAFq+MgABLdMAWsACAAEt2QBawBQAAS3mAFrAfQABLfsAWsCPAAEuCABawXkAAS4dAFrB2wABLioAWsJKAAEuNwBawp4AAS5EAFrCyAABLlEAWsMiAAEuXgBaw0wAAS5rAFrDnQABLngAWsPrAAEuhQBaxUQAAS6SAFrJmwABLp8AWsunAAEusgBay9sAAS6/AFrMCAABLsUAWswrAAEu1QBazEwAAS7lAFrNPAABLvUAWs2BAAEvAgBazwEAAS8IAFrPPAABLxsAWs/LAAEvLgBa0AYAAS9BAFrRAAABL1QAWtGZAAEvYQBa0gYAAS9uAFrSWAABL3sAWtVNAAEviABa1XsAAS+OAFrWegABL6EAWureAAEvrgBa6wQAAS+7AFrvSQABL8gAWvAdAAEv1wBa8JsAAS/sAFryHAABMAEAWvKWAAEwCgBa8zcAATAZAFrzXwABMC4AWvPTAAEwNwBa9IUAATBSAFr0pQABMGEAWvTMAAEwagBa9PkAATB/AFr1JwABMJQAWvWDAAEwrwBa9bAAATC+AFr13AABMM0AWvYJAAEw3ABa9jYAATDrAFr2UAABMPoAWxJmAAExAwBbFUEAATEQAFsWHgABMR0AWyQXAAExKgBbJGwAATE3AFskpAABMUQAWyiNAAExUwBbNAsAATFgAFs75wABMW0AW0z7AAExfABbTicAATGJAFtQTQABMZYAW1GOAAExqQBbUo4AATG8AFtTDAABMc8AW1ONAAEx4gBbVCQAATH1AFtc6AABMggAW10uAAEyGwBbYB4AATIuAFtitwABMjsAW2Q0AAEyTgBbZLAAATJhAFtlxAABMnQAW2ZkAAEyhwBbaQEAATKaAFtpfgABMq4AW2vcAAEywgBbbT4AATLPAFtuGQABMtwAW27lAAEy7wBbcJ4AATMCAFtxiAABMw8AW3mSAAEzHABbed0AATMpAFt7FgABMzwAW57OAAEzSQBbn18AATNUAFufqgABM18AW6ClAAEzagBboaYAATN1AFuiCwABM4AAW6TPAAEziwBbp30AATOYAFuoZAABM6cAW6l5AAEztABbrW0AATPDAFuufgABM9gAW7HNAAEz7QBbuxMAATP6AFu7MQABNAcAW9EJAAE0GgBb1a8AATQgAFwmqwABNDMAXDaEAAE0RgBcN8sAATRZAFxMpQABNGwAXE0HAAE0ewBcTtUAATSKAFxZbAABNJcAXFpdAAE0qgBcXGUAATS9AFxdWAABNNAAXGAGAAE04wBcYJMAATT2AFxrEAABNQkAXG6kAAE1FgBciGsAATUjAFyKlQABNTQAXIx4AAE1RQBcjNQAATVNAFyOygABNVUAXI8AAAE1XQBckV4AATVlAFyR3gABNXYAXJIpAAE1gQBclpYAATWMAFyYEAABNZcAXJiFAAE1qABcmOcAATWzAFyeGAABNb4AXJ5IAAE1zwBcnzgAATXaAFygKQABNeUAXKCPAAE18ABcoPMAATX7AFyhWQABNgYAXKS9AAE2EQBcpj0AATYkAFynPgABNj4AXKeqAAE2UQBcrEUAATZrAFyuuQABNncAXK86AAE2kQBcr6kAATarAFyxPQABNrIAXLJKAAE2wwBcstAAATbdAFyzSAABNugAXLO2AAE27wBctDgAATcJAFy1aQABNxgAXOoyAAE3IABc6r0AATcrAFzw1QABNzYAXPG0AAE3QQBc9dcA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yo/cj/OQC5AukEiQT5BgkHSQk5CpkNuRBZEKkSeRN5E/kU+RZZF0kZCRqZG5kdGR35H8kgmSMZJIkl2SaJKIkqeSupLNkuCTAZMVkxyTH5MvkzGTM5NAk12Td5OBk5STrJOwk7STu5PSk9eT3pPvlASUEZRGlFCUVpRelIaUsZS2lOuVDpUzlTiVcJWnldeV2JXalfaV+JYPlhWWGZYmljSWOpZDllKWWJZhlnSWeZaGlouWlJaflqiWspbDls2W1JbjlvWW/5cJlxKXHZcilyuXLZcwlzGXM5c7l1CXcJeNl5OXq5e3l8eX2Zfjl+2YCpgUmDCYNJg4mD+YR5hKmE+YXZhkmGmYaphtmHqYjJiSmKGYqJixmLuYv5jUmN2Y4ZjpmQGZCZkOmRWZI5kpmTiZQ5lJmU2ZXplomXCZdJmDmYyZkJmWmZyZoZmombSZxJnRmeOZ8ZoAmg+aHZo0mj2aRJpOmlqaXZpemmiaeZqBmoialZqimqiarJucm6e1W7VftWq1cbWAta+1urW+tcK1ybXVtd6147X5tgC2NLY+tke2VbZetmS2bbZ0toC2hraKto+2k7aatqa2sba/tsy207bhtue28Lb5tvu3AbcZtym3M7dBt1G3Z7d2t4i3kLemt7C3u7fAt8u347ftt/a4DLgmuDe4S7hfuG+4i7iYuLC4wLjTuOO497kWuSS5NrlDuVq5ablruW25b7lxuXu5frmCuYW5irmNuZC5k7mXuZm5m7mduZ+5obmjuae5srm7uci55bnqufy6BLoKuhy6K7o8ukK6Q7pMula6Y7pounK6frqEupi6n7qtura6wLrXuwi7E7shuy27OrtKu1C7aLtsu3y7iLuJu5S7qLuuu7K7x7vLu9O73bvlu/m8BbwPvBi8Jrw2vDq8QLxFvEa8T7xcvGe8cbx+vI+8o7y2vMy83LzevOS87bz1vQC9Bb0PvRS9JL0pvS+9Mr1AvVC9Wb1dvW29gL2EvYm9mr2ivcK94L4EviO+Jr4tvjm+Ub5ovm2+gb6WvqW+uL7Pvuy/Cb8dvzO/Rr9Xv2S/er+Wv7G/xb/fv/LAAEAPwABAH8AAQDjAAEBLwABAVsAAQGPAAECEwABAkMAAQKLAAECtwABAw8AAQMnAAEDlwABA7cAAQPnAAEEFwABBGMAAQS/AAEE8wABBTMAAQVHAAEFZwABBaMAAQYXAAEGdwABBr8AAQb/AAEHHwABB18AAQd/AAEHowABB88AAQf/AAEIGwABCGsAAQiTAAEI0wABCVsAAQmzAAEKCwABCl8AAQqrAAELCwABCzcAAQtPAAELiwABC8sAAQwHAAEMJwABDE8AAQxTAAEMVwABDJMAAQy/AAEM6wABDTcAAQ17AAENuwABDhMAAQ5fAAEOtwABDwMAAQ8fAAEPrwABD+8AARAnAAEQdwABENMAAREbAAERawABEdsAARIrAAESbwABEpMAARLDAAETLwABE7cAARQjAAEUmwABFN8AARUvAAEVawABFfcAARYfAAEWMwABFs8AARdTAAEXwwABGDMAARi7AAEZKwABGWcAARm3AAEZ1wABGmcAARsfAAEb0wABHAcAARyDAAEcxwABHPsAAR0bAAEdSwABHV8AAR2LAAEdrwABHdMAAR3vAAEeCwABHmMAAR6LAAEejwABHucAAR83AAEfTwABH38AAR+XAAEf2wABIB8AASBHAAEgqwABILsAASEPAAEhNwABIYMAASGvAAEhywABIhsAASIrAAEiQwABIn8AASLHAAEi6wABIvcAASMzAAEjdwABI7cAASPjAAEkCwABJDMAASRnAAEkdwABJIsAASS/AAElGwABJR8AASVjAAElewABJbMAASW7AAEl1wABJe8AASX3AAEmMwABJjsAASZ7AAEmfwABJpcAASavAAEmywABJusAAScTAAEnHwABJ18AASdnAAEnlwABJ8cAASfzAAEoAwABKA8AASgfAAEoNwABKGMAASiDAAEotwABKPsAASkLAAEpGwABKYMAASnvAAEqDwABKjcAASpXAAEqfwABKpMAASqnAAEqwwABKtMAASsDAAErFwABKy8AAStjAAErhwABK58AASvfAAEsTwABLGMAASxnAAEsfwABLJMAASzLAAEszwABLOMAAS0rAAEtSwABLU8AAS1XAAEtzwABLicAAS5LAAEunwABLtsAAS8fAAEvQwABL0cAAS9fAAEvjwABL8cAAS/7AAEwawABMLMAATDHAAEw4wABMUMAATFfAAExpwABMbcAATHjAAEyAwABMi8AATJbAAEyiwABMpcAATKvAAEy1wABMvMAATMbAAEzSwABM3sAATPfAAE0FwABNBsAATQfAAE0IwABNCcAATQrAAE0LwABNDMAATQ3AAE0WwABNHsAATSrAAE0rwABNPsAATULAAE1IwABNUsAATWPAAE1vwABNf8AATYbAAE2OwABNncAATaXAAE2nwABNqMAATarAAE2uwABNscAATbvAAE3BwABNycAATdTAAE3YwABN3MAATeDAAE3kwABN6MAATezAAE30wABN+8AATfzAAE4EwABOFMAATh3AAE4iwABOKcAATizAAE4zwABON8AATjjAAE45wABOPsAATj/AAE5KwABOVsAATmHAAE5xwABOc8AATn7AAE6NwABOl8AATqHAAE6swABOs8AATrTAAE62wABOvsAATsXAAE7IwABOz8AATtXAAE7ZwABO3cAATuPAAE73wABO+8AATwHAAE8JwABPGcAATyrAAE8swABPPMAATz/AAE9IwABPSsAAT1HAAE9SwABPVcAAT2LAAE9mwABPasAAT3DAAE9ywABPf8AAT4jAAE+TwABPlMAAT5XAAE+swABPvsAAT8DAAE/BwABPzsAAT9zAAE/mwABP6MAAT+rAAE/swABP7sAAT/DAAE/9wABQDMAAUBHAAFAWwABQG8AAUCDAAFAlwABQNsAAUD7AAFBIwABQT8AAUFTAAFBbwABQZMAAUG7AAFB5wABQgMAAUIfAAFCNwABQlcAAUJrAAFCdwABQosAAUKnAAFCxwABQusAAUMDAAFDHwABQ4MAAUOrAAFD3wABRAMAAUQfAAFENwABRJMAAUSnAAFE4wABRTsAAUVvAAFF3wABRisAAUaDAAFGkwABRqMAAUa7AAFG5wABRwsAAUdTAAFHZwABR68AAUfLAAFICwABSE8AAUifAAFIzwABSPsAAUkrAAFJUwABSYcAAUmXAAFJrwABSeMAAUoDAAFKMwABSlMAAUprAAFKkwABStcAAUsHAAFLGwABS0cAAUtzAAFLiwABS9MAAUvzAAFMXwABTIMAAUynAAFM2wABTQcAAU0jAAFNTwABTXsAAU2vAAFN0wABTgcAAU5LAAFObwABTz8AAU9bAAFQIwABUEMAAVEPAAFRKwABUfMAAVInAAFTBwABUzMAAVQLAAFULwABVP8AAVUbAAFVPwABVasAAVYXAAFWawABVr8AAVbvAAFXIwABVzcAAVdvAAFXswABV8cAAVfnAAFYAwABWCsAAVhTAAFYawABWK8AAVjXAAFZJwABWXcAAVm/AAFaUwABWlcAAVqDAAFanwABWrcAAVrbAAFa+wABWxMAAVtDAAFbYwABW3cAAVunAAFbywABW/MAAVwTAAFcZwABXLMAAVzLAAFdEwABXTMAAV1nAAFdgwABXbMAAV33AAFeVwABXoMAAV6rAAFe2wABXxcAAV9PAAFfZwABX38AAV+rAAFf6wABYB8AAWA/AAFgXwABYIcAAWCvAAFhBwABYTMAAWFPAAFhjwABYbcAAWHPAAFh4wABYfMAAWIDAAFiKwABYkMAAWJ/AAFimwABYtMAAWNDAAFjkwABY88AAWPvAAFkHwABZFMAAWR7AAFkywABZQcAAWVXAAFllwABZdMAAWX3AAFmBwABZisAAWY/AAFmTwABZmMAAWafAAFm0wABZucAAWcLAAFnOwABZ1sAAWejAAFn7wABaD8AAWhjAAFojwABaM8AAWj/AAFpdwABaZcAAWm7AAFp5wABaicAAWo/AAFqgwABassAAWsfAAFrSwABa28AAWufAAFrzwABbBsAAWxDAAFscwABbIcAAWzPAAFtAwABbVsAAW3TAAFt6wABbhMAAW5PAAFumwABbucAAW8fAAFvWwABb3cAAW+fAAFv1wABb/sAAXATAAFwSwABcJcAAXD7AAFxYwABccsAAXIzAAFyowABcw8AAXMjAAFzOwABc1MAAXNrAAFziwABc6cAAXQLAAF0MwABdGMAAXR7AAF0uwABdPMAAXUXAAF1OwABdXsAAXW/AAF15wABdg8AAXZXAAF2gwABdqcAAXbLAAF3HwABd3MAAXenAAF4BwABeCcAAXhzAAF4twABePsAAXkTAAF5awABeY8AAXnzAAF6GwABemcAAXqTAAF6wwABevcAAXs3AAF7mwABfA8AAXxDAAF8fwABfNcAAX0HAAF9jwABfjsAAX5fAAF+5wABf38AAX/HAAGAHwABgKMAAYEHAAGBRwABgZcAAYH7AAGCbwABgo8AAYMjAAGDnwABg+8AAYRLAAGEawABhLsAAYTbAAGFKwABhVMAAYWLAAGF5wABhg8AAYY/AAGGcwABhsMAAYcbAAGHNwABh2MAAYerAAGIBwABiEcAAYh/AAGI0wABiRMAAYlnAAGJvwABiisAAYprAAGKvwABiwMAAYsnAAGLfwABi68AAYvbAAGMFwABjCsAAYxXAAGMlwABjL8AAYz/AAGNRwABjaMAAY3LAAGN3wABjf8AAY5HAAGOiwABjrcAAY8HAAGPSwABj58AAY//AAGQDwABkC8AAZBDAAGQZwABkJcAAZC/AAGQ8wABkQcAAZFrAAGRfwABkZ8AAZHHAAGSEwABkjcAAZKLAAGSpwABkrMAAZL3AAGTTwABk3sAAZOrAAGT6wABlBcAAZRXAAGUgwABlKMAAZUDAAGVPwABlW8AAZWnAAGVzwABlesAAZYXAAGWNwABlncAAZajAAGW4wABlycAAZd/AAGXwwABmBsAAZhzAAGY3wABmVcAAZnLAAGZ8wABmjMAAZprAAGavwABmv8AAZtTAAGbdwABm68AAZvTAAGcCwABnC8AAZxDAAGcZwABnJ8AAZzbAAGdKwABnXsAAZ27AAGd2wABni8AAZ6DAAGe6wABnysAAZ9/AAGf0wABoDsAAaB3AAGgqwABoP8AAaFHAAGhUwABoW8AAaGPAAGh0wABoeMAAaIDAAGiFwABom8AAaLDAAGi5wABowsAAaMzAAGjmwABo+cAAaQTAAGkOwABpJsAAaTfAAGlDwABpSMAAaVfAAGltwABpfcAAaYHAAGmPwABppMAAabTAAGm7wABpxMAAacjAAGnWwABp68AAafvAAGoJwABqFMAAahvAAGoqwABqP8AAakfAAGpSwABqXsAAam/AAGp7wABqiMAAapPAAGqkwABqsMAAar3AAGrPwABq2cAAaujAAGr1wABq/8AAaxHAAGscwABrLMAAazfAAGtHwABrVMAAa17AAGtwwABre8AAa4vAAGuZwABrrMAAa7PAAGu/wABrxMAAa87AAGvZwABr6cAAa/PAAGwCwABsDMAAbBvAAGwjwABsMMAAbD/AAGxLwABsX8AAbGzAAGx+wABslcAAbKfAAGyvwABsxsAAbNPAAGzWwABs3sAAbO3AAG0BwABtDMAAbRbAAG0mwABtOsAAbUTAAG1dwABtcMAAbYjAAG2NwABtl8AAbaHAAG2rwABtt8AAbcLAAG3SwABt4MAAbfPAAG4CwABuFsAAbijAAG48wABuTMAAbmHAAG5vwABugsAAbpDAAG6jwABursAAbr7AAG7KwABu08AAbtrAAG7rwABu+cAAbwPAAG8KwABvHcAAbyzAAG8xwABvRcAAb0/AAG9gwABvacAAb3TAAG+DwABvmsAAb7bAAG/BwABv0cAAb+DAAG/0wABv/MAAcAPAAHAQwABwFcAAcBrAAHAkwABwLsAAcDjAAHBBwABwUMAAcF7AAHBrwABwdcAAcIDAAHCIwABwm8AAcK7AAHC+wABwz8AAcN7AAHDpwABw9cAAcQLAAHEKwABxIsAAcTXAAHFNwABxUcAAcVrAAHFlwABxbsAAcXfAAHGDwABxhcAAcZXAAHGgwABxq8AAcb/AAHHWwABx6cAAcfvAAHIDwAByDsAAchXAAHIbwAByI8AAci7AAHI1wAByQMAAckvAAHJbwAByf8AAcorAAHKawAByosAAcq/AAHK5wAByyMAActXAAHLewABy88AAcwXAAHMRwABzHMAAcyXAAHM1wABzPMAAc03AAHNewABzY8AAc2jAAHNtwABzb8AAc33AAHOHwABzksAAc53AAHOtwABzwsAAc8vAAHPgwABz7sAAc//AAHQSwAB0H8AAdDXAAHRQwAB0XcAAdInAAHSZwAB0p8AAdLXAAHTCwAB0zcAAdN/AAHT6wAB1A8AAdRLAAHUawAB1IcAAdS3AAHU+wAB1SsAAdVvAAHV1wAB1gcAAdZLAAHWswAB1t8AAdcfAAHXgwAB17sAAdgHAAHYdwAB2IsAAdjDAAHZDwAB2X8AAdm3AAHZ9wAB2kMAAdqzAAHatwAB2uMAAdsfAAHbXwAB28MAAdvLAAHcCwAB3DsAAdx/AAHc5wAB3RMAAd1TAAHdtwAB3fcAAd5LAAHewwAB3ssAAd7PAAHfPwAB33sAAd//AAHgpwAB4K8AAeDrAAHhBwAB4UMAAeGLAAHh2wAB4k8AAeKbAAHi+wAB438AAePLAAHkKwAB5K8AAeS/AAHk4wAB5Q8AAeUvAAHlZwAB5YcAAeW7AAHl4wAB5l8AAeabAAHm6wAB5w8AAedHAAHncwAB58cAAefvAAHoDwAB6CcAAehvAAHoowAB6NsAAekDAAHpPwAB6WMAAelzAAHpmwAB6ccAAenzAAHqJwAB6r8AAesPAAHrMwAB62cAAeuLAAHrswAB698AAewTAAHsOwAB7GsAAeyfAAHsvwAB7OMAAe0DAAHtKwAB7VsAAe3DAAHuDwAB7i8AAe5fAAHunwAB7tcAAe8TAAHvKwAB71MAAe97AAHvpwAB778AAe/3AAHwGwAB8FMAAfBfAAHwgwAB8KcAAfDPAAHw/wAB8RMAAfEXAAHxZwAB8Y8AAfGrAAHxwwAB8fcAAfIXAAHyLwAB8kcAAfJ/AAHykwAB8q8AAfLLAAHzBwAB8xcAAfNDAAHzWwAB87cAAfPjAAHz9wAB9EMAAfSfAAH0ywAB9PMAAfUHAAH1KwAB9UcAAfV7AAH1vwAB9ecAAfY/AAH2cwAB9r8AAfcHAAH3SwAB96sAAfgDAAH4XwAB+MsAAfkvAAH5XwAB+YsAAfnTAAH6IwAB+ksAAfpvAAH6mwAB+v8AAftbAAH7ywAB++8AAfwHAAH8lwAB/OsAAf0jAAH9TwAB/ZsAAf3jAAH95wAB/g8AAf5LAAH+kwAB/tsAAf7jAAH/IwAB/2cAAf+nAAH/5wACACMAAgBzAAIA4wACATsAAgGPAAIB5wACAi8AAgKfAAIC4wACA1cAAgQDAAIEJwACBG8AAgSHAAIFJwACBUsAAgWTAAIGFwACBnMAAgaDAAIGkwACBxcAAgc3AAIHVwACB48AAge/AAIILwACCJ8AAgjrAAIJPwACCVsAAgnLAAIJ6wACCgcAAgpDAAIKZwACCpsAAgrDAAILCwACCycAAguHAAIL+wACDFcAAgzHAAINIwACDYsAAg3LAAIOGwACDkMAAg5TAAIOfwACDpsAAg6/AAIPJwACD4cAAg/bAAIQIwACED8AAhB3AAIQnwACEOMAAhELAAIRTwACEX8AAhGzAAISGwACEj8AAhJvAAISvwACEvsAAhNfAAITywACE+sAAhRDAAIUhwACFKMAAhSvAAIU1wACFScAAhXfAAIWLwACFo8AAhbjAAIXDwACF28AAhf3AAIYWwACGK8AAhkfAAIZLwACGZMAAhnTAAIaBwACGk8AAhpvAAIavwACGvcAAhtDAAIbiwACG9MAAhwrAAIcawACHJcAAhzbAAIdBwACHVcAAh23AAId+wACHisAAh5bAAIeowACHtMAAh8nAAIfVwACH4MAAh+zAAIgEwACIDsAAiCjAAIg2wACIP8AAiEfAAIhVwACIWcAAiGfAAIh/wACIk8AAiJvAAIi3wACIxsAAiM3AAIjWwACI48AAiOvAAIj5wACJBMAAiRrAAIkwwACJN8AAiV3AAImDwACJvMAAic/AAInxwACKBcAAih7AAIpAwACKWsAAinHAAIqRwACKq8AAirXAAIq7wACKyMAAiufAAIsDwACLB8AAixDAAIscwACLKsAAiz7AAItXwACLasAAi3LAAIt9wACLjcAAi6fAAIutwACLuMAAi7/AAIvTwACL3MAAi+fAAIv5wACMDMAAjBjAAIwmwACMLMAAjDXAAIxFwACMVcAAjGPAAIxrwACMgsAAjKLAAIy3wACMxsAAjNXAAIzowACM+sAAjQzAAI0XwACNPsAAjUrAAI1twACNesAAjZbAAI3SwACOBMAAjhzAAI43wACOSMAAjlvAAI5wwACOfsAAjovAAI6ewACOpsAAjsDAAI7SwACO2sAAjvLAAI78wACPJMAAjzjAAI9RwACPY8AAj3PAAI9+wACPg8AAj6HAAI+9wACP0MAAj9zAAI/kwACP9sAAkA3AAJATwACQP8AAkJ3AAJChwACQ48AAkPnAAJE1wACRc8AAkZLAAJHNwACR7MAAkfnAAJIBwACSI8AAkjbAAJJlwACSbsAAko3AAJKwwACSusAAksPAAJLMwACS1cAAktfAAJLewACS/MAAkxPAAJMcwACTJMAAky3AAJMuwACTMsAAkzrAAJNCwACTa8AAk23AAJNwwACTfMAAk4fAAJOWwACTqcAAk7fAAJPBwACTzsAAk9jAAJPkwACT98AAlATAAJQRwACUGcAAlDTAAJRRwACUYsAAlHHAAJR8wACUhcAAlI3AAJSfwACUrMAAlLvAAJTSwACU5MAAlRbAAJVDwACVTcAAlVfAAJVfwACVacAAlY7AAJWVwACVncAAlcHAAJXLwACV1cAAld3AAJX3wACWBcAAlhrAAJYfwACWP8AAlkzAAJZhwACWc8AAloDAAJaPwACWmMAAlqPAAJa0wACWw8AAlsXAAJbUwACW28AAlu7AAJcJwACXEsAAlzvAAJdCwACXRsAAl1LAAJdewACXZ8AAl27AAJd4wACXe8AAl4nAAJeUwACXqsAAl67AAJe2wACXycAAl+3AAJfzwACYBcAAmBLAAJgfwACYNMAAmETAAJhjwACYksAAmNTAAJjxwACY9MAAmQbAAJkMwACZFMAAmSDAAJkmwACZMMAAmT7AAJlTwACZZcAAmXDAAJl7wACZf8AAmZnAAJmowACZsMAAmb3AAJnIwACZ0MAAmd/AAJnqwACZ98AAmgXAAJoNwACaFsAAmh7AAJokwACaK8AAmjLAAJo6wACaRMAAmkvAAJpmwACadsAAmobAAJqowACa4MAAmv7AAJsYwACbL8AAm0bAAJt8wACb4cAAm/TAAJwOwACcIcAAnFrAAJxpwACcgcAAnJfAAJzDwACdE8AAnTvAAJ1fwACdgsAAnZXAAJ2rwACdusAAncXAAJ3gwACeEcAAnijAAJ47wACeT8AAnnbAAJ6mwACeycAAnt3AAJ8HwACfMcAAn2TAAJ+KwACft8AAn9jAAKAjwACgb8AAoIzAAKClwACgwcAAoN7AAKEmwAChP8AAoVTAAKFlwAChe8AAoaPAAKG1wAChzsAAoerAAKIWwACiLsAAok3AAKJiwACissAAosPAAKLjwACi+8AAow/AAKNlwACj0MAAo+DAAKP6wACkEcAApCLAAKRawACkZ8AApH3AAKSRwACks8AApOvAAKUJwAClI8AApUrAAKXawACmS8AApm7AAKaNwACmo8AApsnAAKcrwACnWMAAp3rAAKeYwACnx8AAqBrAAKhFwACobMAAqILAAKjIwACo6cAAqPvAAKkUwACpNsAAqWXAAKmDwACpncAAqbzAAKn2wACqKMAAqkPAAKpawACqdcAAqpvAAKq+wACq4MAAqv7AAKsgwACrScAAq3rAAKufwACry8AAq93AAKwRwACsH8AArDTAAKxewACsmsAArMDAAKziwACtC8AArTbAAK1bwACtgcAAra3AAK3EwACt2sAAre3AAK36wACuFMAArjLAAK5MwACudMAArrvAAK7fwACvCsAArzLAAK+CwACvzcAAr/HAALAcwACwP8AAsGLAALCXwACw88AAsQ/AALFAwACxbcAAsYTAALGpwACx9MAAshDAALIxwACyTsAAsm3AALKcwACy8cAAsxzAALNDwACzU8AAs1/AALNxwACzncAAs9DAALP4wAC0HMAAtDPAALRawAC02cAAtTTAALVXwAC1dsAAtYrAALWnwAC1z8AAtejAALYNwAC2LcAAtkvAALZ8wAC2usAAttTAALb1wAC3BMAAt03AALegwAC3q8AAt73AALfbwAC39cAAuBbAALgmwAC4VcAAuHvAALiHwAC4msAAuK7AALjYwAC5BsAAuRbAALktwAC5UsAAuabAALnWwAC598AAuhTAALoswAC6SMAAuobAALqnwAC6v8AAutPAALrzwAC7FsAAuzLAALtKwAC7ZMAAu4DAALufwAC7t8AAu8vAALvmwAC8BMAAvBvAALwuwAC8Q8AAvGXAALyDwAC8ncAAvLjAALzWwAC87cAAvQDAAL0iwAC9QMAAvVrAAL17wAC9oMAAvb3AAL3WwAC9+sAAvhzAAL42wAC+VMAAvnnAAL6KwAC+w8AAvvbAAL8DwAC/F8AAvyXAAL9NwAC/8sAAv/zAAMANwADALsAAwGjAAMCFwADAq8AAwM/AAMD1wADBI8AAwUXAAMFuwADBl8AAwdTAAMH5wADCJcAAwkHAAMJnwADCm8AAwrPAAMLOwADC7cAAwxLAAMNSwADDc8AAw5nAAMPBwADD2cAAw//AAMQTwADELsAAxELAAMRSwADEYsAAxHnAAMSZwADFFsAAxTLAAMVKwADFesAAxZvAAMXmwADGA8AAxhzAAMY3wADGVMAAxpfAAMawwADGxcAAxtzAAMcDwADHQ8AAx2bAAMeFwADHrcAAx8nAAMffwADH98AAyBLAAMgxwADIXMAAyIfAAMiuwADI0cAAyPPAAMliwADJgMAAyZrAAMnDwADKJ8AAykzAAMptwADKlsAAyyDAAMtFwADLZsAAy47AAMvawADL/sAAzB7AAMwwwADMU8AAzKLAAMzBwADM3MAAzQTAAM1EwADNaMAAzYjAAM2xwADN48AAzojAAM62wADO4MAAzv/AAM8hwADPrsAAz8zAAM/mwADQAsAA0FDAANBowADQfMAA0J/AANDbwADQ+sAA0RXAANFEwADRYsAA0bzAANHWwADR7MAA0g/AANJQwADSb8AA0orAANKkwADSy8AA0xvAANM+wADTXcAA037AANOfwADT5cAA1ALAANQjwADUR8AA1GLAANSUwADUq8AA1MTAANTiwADU+MAA1R7AANUwwADVScAA1WPAANV9wADVk8AA1bDAANXIwADV78AA1gPAANYewADWOsAA1pHAANapwADWvcAA1tTAANbkwADXKMAA14TAANeQwADXo8AA18jAANgSwADYZ8AA2IjAANipwADY0cAA2PXAANkkwADZZMAA2YTAANmgwADZtcAA2cvAANn3wADaPMAA2k7AANpiwADae8AA2orAANrHwADa6MAA2vPAANsFwADbGsAA20PAANuVwADbpsAA28TAANvcwADb98AA3BnAANwwwADcQ8AA3FjAANxuwADc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JsABFTnAARVlwAEVdMABFYrAARWkwAEVx8ABFd7AARX0wAEWBsABFhjAARZPwAEWXcABFm3AARaCwAEWoMABFtnAARb8wAEXFsABFzfAARdXwAEXdMABF5DAAReowAEXusABImrAASJ4wAEijcABIqDAASMzwAEjQsABI1jAASNzwAEjoMABI7fAASPKwAEj88ABJCPAASRIwAEkacABJIPAASURwAElJ8ABJTnAASVUwAEly8ABJeLAASX1wAEmEcABJpXAASatwAEmwcABJtXAASc/wAEnT8ABJ1vAASdzwAEnmMABJ6zAASe8wAEn0sABKB/AASgxwAEoP8ABKFbAASitwAEowMABKM/AASjlwAEpOsABKUzAASlawAEpe8ABKazAASnJwAEp4sABKgvAASpCwAEqrsABKtPAASr/wAErJcABK1/AASt0wAErlsABK7/AASvUwAEsEcABLEjAASxZwAEsccABLIDAASy3wAEs1sABLOHAASzzwAEtE8ABLTrAAS2BwAEtncABLbXAAS3KwAEt98ABLjLAAS6CwAEuq8ABLtDAAS7zwAEvF8ABL0bAAS9mwAEvgsABL7HAAS/4wAEwI8ABMErAATBqwAEwnsABMLvAATDrwAExF8ABMUDAATGJwAExr8ABMdTAATH1wAEyE8ABMjLAATJnwAEygsABMqTAATK+wAEy+cABMw/AATMswAEzTMABM4zAATOowAEzwMABM9bAATP0wAE0HMABND7AATRYwAE0csABNJPAATSvwAE03cABNPXAATUTwAE1MsABNU/AATWrwAE12MABNfHAATYNwAE2LcABNkbAATZwwAE2hcABNpjAATa0wAE20sABNxPAATctwAE3UsABN3PAATeqwAE378ABOCTAAThXwAE4hsABOK7AATjdwAE5F8ABOT3AATlowAE5msABObDAATnKwAE53MABOerAATn6wAE6D8ABOjXAATpKwAE6W8ABOnHAATqJwAE6rcABOt3AATr9wAE7JMABO0fAATuQwAE7r8ABO9LAATv4wAE8H8ABPFfAATx6wAE8pMABPL7AAT0GwAE9HMABPTXAAT1SwAE9ZsABPYnAAT2ZwAE9pcABPbLAAT3XwAE+EMABPjHAAT5OwAE+aMABPpLAAT7FwAE+68ABPw3AAT8pwAE/SMABP2DAAT90wAE/lsABP+DAAT/+wAFAIMABQEXAAUBrwAFAosABQMTAAUDtwAFBCMABQUDAAUF7wAFBksABQbDAAUHGwAFB+cABQi/AAUJBwAFCWsABQnLAAUKnwAFC38ABQvPAAUMOwAFDJMABQ1fAAUNpwAFDgsABQ5zAAUPBwAFD6MABQ/7AAUQQwAFEI8ABRD/AAUSAwAFEpMABRLzAAUTQwAFE5sABRQXAAUVpwAFFpcABRcDAAUXXwAFF8sABRhbAAUZdwAFGfcABRpnAAUaswAFG28ABRxfAAUcmwAFHPMABR1XAAUePwAFHpMABR7XAAUffwAFIIcABSEfAAUhpwAFIgcABSJ7AAUkDwAFJQsABSVvAAUlwwAFJkcABSbrAAUoywAFKV8ABSnjAAUqgwAFLMcABS1XAAUt1wAFLpcABTD/AAUyLwAFMt8ABTN/AAU0EwAFNcsABTZPAAU2wwAFN1sABTkLAAU5kwAFOgsABTrDAAU8lwAFPT8ABT3XAAU+WwAFPz8ABT+zAAVAQwAFQKsABUFPAAVBpwAFQe8ABUJfAAVDLwAFQ48ABUQLAAVEhwAFRQ8ABUWDAAVF+wAFRo8ABUcXAAVHowAFSBsABUivAAVJVwAFUVcABVHvAAVSdwAFUzcABVbnAAVXlwAFWDcABVjXAAVhcwAFYgMABWKDAAVjOwAFZ4cABWgvAAVoxwAFaUcABWovAAVrLwAFa58ABWwrAAVsrwAFbWcABW3bAAVuPwAFbq8ABW9DAAVwawAFcO8ABXFjAAVx3wAFcncABXQHAAV1FwAFdZ8ABXYXAAV2iwAFdycABXfXAAV4YwAFeQsABXlfAAV5owAFeisABXsbAAV9GwAFfZMABX37AAV+awAFft8ABX/TAAWANwAFgIsABYEfAAWB/wAFgoMABYMjAAWDvwAFhGcABYTzAAWFmwAFhkMABYbfAAWHdwAFh/8ABYiXAAWJWwAFieMABYpbAAWK3wAFi68ABYwjAAWMhwAFjTsABY3HAAWOawAFjysABY/3AAWQ3wAFkZsABZJzAAWS9wAFk6MABZQ3AAWU0wAFlV8ABZXbAAWWMwAFlp8ABZb7AAWXfwAFmAcABZh7AAWY3wAFmX8ABZnzAAWagwAFmy8ABZvrAAWcjwAFnTsABZ3XAAWerwAFnz8ABZ/HAAWgRwAFoLcABaGDAAWiXwAFoxsABaPHAAWkSwAFpOcABaVbAAWlvwAFpj8ABaa3AAWnJwAFp4cABagXAAWobwAFqO8ABalfAAWp1wAFqj8ABarbAAWrTwAFq9sABaxXAAWs9wAFrcsABa5bAAWu2wAFrzMABa/TAAWwGwAFsJsABbD/AAWxlwAFsqsABbOLAAW0EwAFtIsABbTvAAW2TwAFtqMABbbnAAW3LwAFt3sABbh3AAW5TwAFuYsABbnjAAW6SwAFuqcABbr/AAW7RwAFu8MABbzXAAW+DwAFvnsABb7XAAW/PwAFv7cABcCvAAXBywAFwjMABcKLAAXC7wAFw2MABcRXAAXFbwAFxdMABcYnAAXGhwAFxvsABcfvAAXJBwAFyWsABcm/AAXKHwAFyp8ABcvDAAXMzwAFzT8ABc2fAAXN8wAFzlsABc+DAAXQzwAF0ScABdFvAAXRwwAF0j8ABdNfAAXUYwAF1M8ABdUrAAXVdwAF1gMABdc3AAXXswAF2B8ABdiDAAXY4wAF2TcABdmTAAXaAwAF2lMABdtTAAXbkwAF29sABdw3AAXcqwAF3RMABd13AAXdywAF3hsABd9XAAXflwAF3/MABeBLAAXgqwAF4X8ABeHjAAXiVwAF45MABeXDAAXmJwAF5pcABecXAAXncwAF6EcABeiTAAXozwAF6TMABenLAAXqHwAF6mMABerXAAXsxwAF7SsABe2rAAXuBwAF7mcABe7vAAXvOwAF75cABe//AAXwbwAF8vcABfNXAAXz0wAF9DMABfYXAAX2ZwAF9tMABfdPAAX3owAF99sABfhHAAX4xwAF+U8ABfmLAAX6gwAF+6cABfvTAAX8GwAF/H8ABf1fAAX9swAF/fcABf5fAAX+swAF/xcABgA/AAYAgwAGALcABgFTAAYCawAGAvcABgOfAAYEIwAGBWMABgXXAAYGZwAGBt8ABghzAAYI2wAGCTMABgmjAAYKmwAGC48ABgvvAAYMawAGDPcABg23AAYOMwAGDrMABg9LAAYPwwAGEoMABhMHAAYTbwAGE8cABhRDAAYUxwAGFTMABhWvAAYWNwAGFr8ABheTAAYYCwAGGHMABhj7AAYZzwAGGkcABhqvAAYbNwAGG/8ABhx3AAYc8wAGHYcABh37AAYe9wAGH1sABh/bAAYgPwAGIQcABiFbAAYhywAGIiMABiKLAAYi0wAGIwsABiNLAAYjpwAGJHMABiS/AAYlJwAGJZsABiZjAAYmuwAGJx8ABiefAAYoJwAGKNcABilPAAYp4wAGKlsABiuvAAYswwAGLSsABi2vAAYuPwAGLu8ABi9vAAYv3wAGMCsABjHbAAYy6wAGMycABjNbAAYzswAGNCMABjSnAAY11wAGNjcABjazAAY3JwAGOBcABjj3AAY5WwAGOccABjpHAAY6zwAGOy8ABjunAAY8DwAGPK8ABj37AAZAxwAGQVcABkHXAAZCYwAGQqMABkLfAAZDSwAGRDMABkULAAZFZwAGRcsABkZDAAZGqwAGR68ABkg3AAZIjwAGSQMABklXAAZKZwAGSqsABkrfAAZLHwAGS6MABkw7AAZMwwAGTTcABk3HAAZONwAGTvMABk+fAAZP/wAGUGcABlDjAAZRlwAGUqsABlNPAAZT4wAGVI8ABlUjAAZXRwAGV8sABlg/AAZY3wAGWUcABlpHAAZavwAGWxcABltfAAZb8wAGXM8ABl1TAAZd0wAGXnMABl6/AAZfpwAGYP8ABmE7AAZhkwAGYesABmLfAAZj4wAGZCsABmSXAAZk+wAGZW8ABmZDAAZnDwAGZ3MABmfzAAZoRwAGaRsABmn/AAZqQwAGaqMABmrjAAZrvwAGbKsABmzbAAZtJwAGbZMABm4zAAZujwAGbvMABm9rAAZv7wAGcOsABnFfAAZxwwAGcksABnLvAAZ0hwAGdP8ABnWTAAZ11wAGdnsABnfHAAZ3+wAGeB8ABniPAAZ5MwAGeZMABnnjAAZ6RwAGescABntXAAZ7xwAGfFMABny7AAZ+ZwAGf7MABoALAAaAUwAGgLsABoH7AAaCUwAGgpsABoL3AAaEKwAGhPcABoVDAAaFqwAGhfcABocbAAaHVwAGh68ABognAAaI5wAGiU8ABonbAAaKXwAGis8ABot7AAaL2wAGjFcABozHAAaNswAGjxsABo97AAaP7wAGkGsABpDzAAaRvwAGkjcABpKfAAaTIwAGlFcABpTLAAaVLwAGlZcABpX/AAaWVwAGlssABpdTAAaYtwAGmS8ABpmXAAaZvwAGmf8ABppTAAaagwAGmqMABprvAAabNwAGm3MABpvLAAacBwAGnFsABpyHAAaczwAGnTMABp27AAaeDwAGnlMABp7HAAafWwAGn78ABqATAAagVwAGoQMABqE3AAahhwAGodcABqKHAAaixwAGoyMABqNnAAaj9wAGpCsABqR7AAakpwAGpb8ABqbjAAam/wAGpzcABqfPAAaomwAGqxcABqufAAasFwAGrMsABq1TAAauDwAGrocABq7vAAavdwAGsEMABrC7AAaxIwAGsb8ABrJHAAazFwAGs48ABrP3AAa0cwAGtR8ABrWLAAa2EwAGtocABrcnAAa3iwAGt98ABrhrAAa5wwAGuj8ABrqrAAa7AwAGu6MABr0PAAa9nwAGvh8ABr6LAAa/IwAGwI8ABsEXAAbBjwAGwiMABsODAAbEBwAGxHsABsTfAAbFcwAGx9cABskHAAbJiwAGyf8ABsqXAAbMqwAGzSsABs2zAAbOKwAGzr8ABtATAAbQlwAG0QsABtGnAAbSAwAG0sMABtMPAAbTSwAG06MABtPrAAbUIwAG1S8ABtVXAAbVqwAG1e8ABtZDAAbW4wAG1ycABteHAAbXvwAG2KcABtmXAAbZvwAG2gMABtpzAAba7wAG208ABtvLAAbcJwAG3RcABt4fAAbeawAG3qcABt77AAbffwAG4K8ABuEjAAbhhwAG4esABuIjAAbipwAG4s8ABuMTAAbjTwAG5CMABuTvAAblGwAG5WMABuW7AAbmcwAG56cABufvAAboUwAG6McABulDAAbppwAG6icABuqLAAbrtwAG7AsABuxPAAbsnwAG7csABu7XAAbvFwAG70cABu+jAAbv2wAG8IsABvEnAAbxTwAG8ZMABvHXAAbyfwAG8rMABvLXAAbzDwAG818ABvPDAAb0AwAG9F8ABvTrAAb2IwAG9p8ABvc3AAb3pwAG+FcABvi3AAb5MwAG+ZsABvoXAAb6bwAG+uMABvtTAAb71wAG/CcABvyHAAb81wAG/ScABv4nAAb+5wAG/ycABv+DAAcAAwAHAJsABwELAAcBZwAHAfMABwJzAAcDOwAHBK8ABwUfAAcFmwAHBicABwarAAcHywAHCDcABwirAAcJSwAHCdsABwo/AAcLVwAHDAsABwxfAAcMzwAHDTMABw33AAcOSwAHDrMABw8jAAcPqwAHEFcABxFnAAcR3wAHEnMABxM7AAcT3wAHFHsABxUzAAcV2wAHFkcABxcbAAcYHwAHGHsABxjzAAcZdwAHGjsABxqvAAcbEwAHG48ABxwPAAcc2wAHH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lsACV6XAAlfEwAJX0MACV/fAAlgHwAJYOcACWGXAAljAwAJY9sACWQTAAlkWwAJZJcACWTbAAlk9wAJZQsACWVbAAlldwAJZbcACWXTAAlmGwAJZlsACWZvAAlmrwAJZssACWbnAAlnGwAJZ1sACWfXAAloHwAJaEcACWh3AAlovwAJaQcACWlDAAlpWwAJabMACWoLAAlqOwAJanMACWqvAAlq5wAJau8ACWsfAAlrUwAJa3sACWurAAlrvwAJa98ACWv3AAlsMwAJbEsACWx7AAlsrwAJbN8ACW0XAAltVwAJbYsACW3HAAluIwAJbm8ACW6nAAlu6wAJbzcACW+jAAlv1wAJcFMACXCrAAlw+wAJcS8ACXFvAAlxqwAJcfsACXI7AAlyfwAJcrsACXMvAAlzUwAJc28ACXOLAAlzowAJc78ACXPjAAl0FwAJdC8ACXRPAAl0gwAJdO8ACXT/AAl1OwAJdZMACXYjAAl2PwAJdmcACXbDAAl3DwAJdycACXefAAl3zwAJd/8ACXhXAAl4dwAJeJ8ACXjXAAl5DwAJeS8ACXlrAAl5twAJeesACXoLAAl6VwAJenMACXq3AAl60wAJeusACXsLAAl7bwAJe78ACXvfAAl8DwAJfB8ACXxPAAl8bwAJfJ8ACXzjAAl87wAJfTMACX2HAAl90wAJfhMACX5fAAl+bwAJfrcACX8HAAl/HwAJf08ACX/HAAl/zwAJf+8ACYDLAAmBFwAJgW8ACYGTAAmBywAJggcACYI7AAmCZwAJgnsACYKTAAmC1wAJgwcACYNHAAmDWwAJg2cACYO/AAmDzwAJhC8ACYRnAAmEowAJhNMACYUfAAmFawAJhbMACYX/AAmGOwAJhncACYbHAAmHLwAJh3MACYe3AAmH/wAJiEMACYifAAmI2wAJiR8ACYlrAAmJuwAJif8ACYpjAAmKrwAJitcACYr/AAmLIwAJi0sACYtjAAmLewAJi6cACYvrAAmMCwAJjCsACYxPAAmMbwAJjKcACYy/AAmM3wAJjQcACY0nAAmNZwAJjY8ACY2TAAmNnwAJjd8ACY5TAAmOvwAJjwcACY9fAAmPqwAJkAcACZBnAAmQdwAJkIcACZCTAAmQpwAJkLMACZDLAAmQ3wAJkP8ACZEnAAmRMwAJkV8ACZGPAAmRowAJkbcACZHPAAmR5wAJkgMACZIbAAmSIwAJkisACZIzAAmSOwAJkkMACZJLAAmSUwAJklsACZJzAAmSmwAJkqcACZKzAAmSvwAJkuMACZLvAAmS9wAJkv8ACZMHAAmTDwAJkxcACZMfAAmTJwAJky8ACZM3AAmTPwAJk0cACZNPAAmTVwAJk18ACZNnAAmTbwAJk3cACZN/AAmThwAJk48ACZOXAAmTnwAJk6cACZOvAAmT/wAJlFMACZRrAAmUjwAJlJcACZSfAAmUpwAJlK8ACZS3AAmUvwAJlMcACZTPAAmU1wAJlN8ACZTnAAmU7wAJlPcACZT/AAmVBwAJlQ8ACZUXAAmVHwAJlScACZUvAAmVNwAJlT8ACZWLAAmVmwAJlesACZYDAAmWFwAJllcACZaTAAmW0wAJlu8ACZcjAAmXSwAJl38ACZefAAmX7wAJmD8ACZiTAAmYzwAJmTMACZljAAmZqwAJmdcACZnzAAmaHwAJmkcACZpXAAmaXwAJmoMACZqfAAma4wAJmvMACZsDAAmbGwAJm08ACZuDAAmbqwAJm9cACZwrAAmcPwAJnG8ACZx/AAmcowAJnMsACZzjAAmdEwAJnTsACZ1bAAmdfwAJnZcACZ2vAAmd2wAJnf8ACZ4PAAmeMwAJnlcACZ5vAAmeowAJnscACZ8/AAmfbwAJn6cACZ+rAAmfvwAJoAcACaBDAAmgSwAJoFMACaB7AAmgwwAJoOMACaE3AAmhRwAJoWsACaGXAAmhuwAJodsACaHrAAmh+wAJog8ACaIvAAmiWwAJonsACaKfAAmitwAJotMACaMnAAmjawAJo8MACaQHAAmkFwAJpEcACaRbAAmkhwAJpLMACaTTAAmlAwAJpSMACaVfAAmlnwAJpc8ACaXjAAmmKwAJpmMACaa7AAmmxwAJpwMACacjAAmnLwAJp3cACae3AAmn1wAJqA8ACagrAAmoXwAJqJ8ACai/AAmo9wAJqRcACakzAAmpawAJqY8ACamXAAmptwAJqesACaofAAmqcwAJqrcACarfAAmq7wAJqwsACasvAAmrXwAJq2sACauHAAmrpwAJq8MACav7AAmsRwAJrFMACaybAAmsnwAJrMsACaznAAmtHwAJrTsACa1DAAmtjwAJresACa3vAAmuCwAJricACa5bAAmumwAJrq8ACa8PAAmvUwAJr2MACa+LAAmvpwAJr/sACbCbAAmw2wAJsP8ACbGPAAmxvwAJsesACbIbAAmyNwAJsmsACbJ7AAmyjwAJsrsACbMvAAmzZwAJs3sACbOLAAmztwAJs8sACbPvAAm0AwAJtC8ACbRDAAm0cwAJtIcACbSvAAm0wwAJtPcACbULAAm1MwAJtUcACbVzAAm1hwAJtZcACbWrAAm1twAJtcsACbXjAAm18wAJtg8ACbYfAAm2MwAJtosACbbLAAm28wAJtzsACbd3AAm3pwAJuBMACbhjAAm4ewAJuK8ACbjzAAm5JwAJuVMACbl/AAm5mwAJub8ACbnLAAm56wAJugsACbofAAm6awAJur8ACbrrAAm7BwAJu28ACbuvAAm7ywAJu+sACbwDAAm8ZwAJvLsACbz/AAm9AwAJvT8ACb2TAAm9qwAJvc8ACb37AAm+CwAJvi8ACb5bAAm+bwAJvp8ACb7HAAm/CwAJv1cACb9zAAm/iwAJv6cACb/HAAm/1wAJv+8ACcAHAAnAKwAJwEMACcBjAAnAfwAJwKMACcDLAAnA/wAJwUcACcFfAAnBswAJwdMACcIfAAnCMwAJwlsACcJzAAnCvwAJwtsACcLzAAnDFwAJwzMACcNLAAnDWwAJw2cACcObAAnD7wAJxDsACcSLAAnEuwAJxO8ACcUjAAnFYwAJxZcACcXfAAnGMwAJxmcACcanAAnG6wAJx18ACcfXAAnIcwAJyM8ACckfAAnJQwAJyXcACcnDAAnJ+wAJyg8ACcpHAAnKdwAJyrcACcsjAAnLhwAJzAcACcyHAAnM8wAJzWcACc2vAAnOJwAJzocACc7bAAnPAwAJzxsACc9XAAnPcwAJz5MACc+zAAnP0wAJz/cACdA3AAnQUwAJ0JcACdDbAAnQ+wAJ0R8ACdFDAAnRTwAJ0a8ACdHLAAnSIwAJ0msACdKPAAnS6wAJ0wcACdM7AAnTawAJ05cACdP7AAnURwAJ1M8ACdUjAAnVZwAJ1XsACdWfAAnV0wAJ1d8ACdY3AAnWfwAJ1scACdb/AAnXRwAJ138ACdfXAAnYHwAJ2H8ACdjPAAnZdwAJ2g8ACdprAAnatwAJ2v8ACds3AAnbhwAJ28cACdwPAAncUwAJ3JsACdzbAAndHwAJ3YMACd27AAneFwAJ3k8ACd7PAAnfKwAJ30sACd+DAAnfmwAJ39cACd//AAngRwAJ4IcACeDfAAnhJwAJ4V8ACeGfAAnh8wAJ4j8ACeJnAAnijwAJ4scACeMbAAnj1wAJ5AMACeQjAAnkXwAJ5HMACeSXAAnktwAJ5OsACeVLAAnlfwAJ5asACeX/AAnmQwAJ5kcACeaLAAnnBwAJ54cACee7AAnoJwAJ6HsACejDAAno6wAJ6b8ACeoTAAnqNwAJ6xcACetDAAnsGwAJ7GcACezHAAntHwAJ7WMACe27AAnuDwAJ7jcACe6PAAnumwAJ7rsACe77AAnvawAJ76cACe/rAAnwEwAJ8EMACfDHAAnxJwAJ8UsACfFrAAnxuwAJ8cMACfHLAAnyKwAJ8lcACfJjAAnyhwAJ8tsACfMrAAnzZwAJ8+cACfQDAAn0KwAJ9FcACfTPAAn1CwAJ9ZMACfXfAAn2dwAJ9tcACfeHAAn3wwAJ+EsACfiPAAn5HwAJ+WcACfn7AAn6LwAJ+q8ACfsHAAn7rwAJ++8ACfx7AAn9AwAJ/XsACf4bAAn+nwAJ/zsACf+7AAoAYwAKAOcACgFvAAoCHwAKApMACgMvAAoDvwAKBDMACgSrAAoFSwAKBb8ACgZbAAoGzwAKB2sACgfDAAoIOwAKCNsACglvAAoJ2wAKCr8ACgs/AAoL5wAKDGcACg0PAAoNywAKDqsACg8zAAoP3wAKEHMAChEvAAoRuwAKEk8AChMLAAoTRwAKE18AChOLAAoTzwAKE/8AChRDAAoUYwAKFJ8AChS7AAoU4wAKFQMAChUnAAoVSwAKFZsAChXXAAoWEwAKFkcAChZvAAoWnwAKFq8AChbTAAoW5wAKFwMAChc3AAoXawAKF7MAChffAAoX8wAKGAcAChgbAAoYLwAKGGcAChiLAAoY1wAKGPsAChkzAAoZVwAKGXcAChmXAAoZ7wAKGhcACho7AAoaSwAKGq8AChsXAAobPwAKG0cAChuPAAob4wAKHB8AChxrAAoc0wAKHUcACh3DAAoePwAKHqcACh8XAAofYwAKH5MACh/zAAogJwAKIE8ACiCHAAogwwAKIQsACiEjAAohTwAKIX8ACiG7AAoh8wAKIhsACiJfAAoimwAKIu8ACiMTAAojjwAKI9sACiQDAAokKwAKJGcACiSHAAokywAKJNcACiUrAAolcwAKJa8ACiXDAAol6wAKJhcACiZbAAomswAKJt8ACicXAAonZwAKJ7sACigDAAooPwAKKG8ACijTAAopEwAKKW8ACinLAAoqHwAKKnsACirDAAorBwAKKzMACiuDAAortwAKK98ACiwrAAosUwAKLIcACiy7AAos2wAKLR8ACi1fAAotmwAKLasACi5HAAouZwAKLrMACi7HAAovXwAKL6cACi/vAAowMwAKMJ8ACjD7AAoxVwAKMa8ACjKXAAoyywAKM3cACjOvAAozzwAKM/MACjQPAAo0LwAKNE8ACjR3AAo0qwAKNPMACjVPAAo1jwAKNZsACjZHAAo2kwAKNr8ACjbnAAo2+wAKN0cACjeLAAo3wwAKONsACjk/AAo5rwAKOksACjp/AAo6uwAKOv8ACjtDAAo7bwAKO9MACjvzAAo8GwAKPD8ACjx3AAo89wAKPW8ACj27AAo+lwAKPucACj8LAAo/QwAKP2sACj+nAApABwAKQF8ACkCjAApAzwAKQPMACkEnAApBSwAKQX8ACkHTAApB+wAKQkMACkJrAApCswAKQwMACkMzAApDawAKQ6cACkQXAApEnwAKRM8ACkUbAApFTwAKRYsACkYPAApGewAKRsMACkcTAApHPwAKR58ACkfbAApH/wAKSD8ACkiLAApI4wAKSV8ACkmfAApJ/wAKSksACkp/AApK9wAKSysACkubAApLywAKTAMACkxHAApMkwAKTOMACk0zAApNawAKTccACk4bAApOhwAKTuMACk9vAApPiwAKT9MACk//AApQPwAKUJsAClDfAApRSwAKUXsAClHjAApSBwAKUkMAClJXAApSnwAKUtMAClM7AApTXwAKU+8AClQzAApUdwAKVKsAClTrAApVNwAKVZcAClX/AApWQwAKVnMAClbPAApXGwAKV38AClevAApX6wAKWBsAClhTAApYhwAKWLMACljHAApZDwAKWSMAClk/AApZawAKWZcAClorAApaXwAKWpMAClqXAAparwAKWscAClr3AApbBwAKWxcACltDAApbawAKW5sAClvnAApcDwAKXBcAClwfAApcNwAKXF8AClxvAApcdwAKXI8AClyXAApcuwAKXMMAClzjAApdFwAKXScACl1TAApdYwAKXZMACl27AApd3wAKXhMACl4/AApegwAKXrsACl8LAApfOwAKX38ACl+3AApf5wAKX+sACmBrAApgfwAKYIsACmCvAApg7wAKYQsACmFDAAphdwAKYZMACmHLAAph7wAKYhsACmIvAApiPwAKYlcACmKTAApinwAKYsMACmLvAApjKwAKY2MACmOTAApjywAKZBcACmRHAApkfwAKZK8ACmTvAAplFwAKZWMACmWTAAplxwAKZfMACmYvAApmfwAKZt8ACmcvAApnkwAKZ9sACmgzAApofwAKaNMACmjrAAppBwAKaQ8ACmkbAAppNwAKaVsACml/AAppmwAKaa8ACmobAApqSwAKaoMACmrfAAprIwAKa0sACmt/AAprjwAKa8sACmvrAApr/wAKbEsACmyfAApsuwAKbOcACm0TAAptlwAKbcsACm3TAApt+wAKbi8ACm5XAApugwAKbq8ACm7XAApvHwAKb18ACm93AApvmwAKb58ACm+jAApvqwAKb9sACm/jAApwKwAKcE8ACnCDAApwxwAKcP8ACnF/AApx0wAKcgcACnIjAApyTwAKcoMACnK3AApzDwAKc1cACnOTAApz5wAKdBsACnQjAAp0ZwAKdH8ACnSPAAp0owAKdLcACnTPAAp07wAKdUsACnVTAAp1VwAKdV8ACnWbAAp1vwAKdgMACnZHAAp2dwAKdsMACnbbAAp25wAKdycACndHAAp3vwAKeBcACnirAAp5JwAKeWMACnmTAAp5xwAKefMACnn/AAp6FwAKem8ACnrbAAp7HwAKe1sACnuPAAp7nwAKe/cACnwXAAp8NwAKfGMACnyPAAp8rwAKfLsACnz3AAp9RwAKfacACn3LAAp+FwAKfisACn47AAp+VwAKfn8ACn6zAAp+1wAKft8ACn7rAAp/BwAKf08ACn9/AAp/zwAKf9sACn/vAAp/+wAKf/8ACoAnAAqALwAKgDcACoBzAAqAvwAKgMcACoDPAAqA1wAKgOcACoDvAAqBCwAKgScACoFfAAqBZwAKgZsACoGrAAqBxwAKgdsACoHvAAqB+wAKggMACoIXAAqCTwAKglsACoJ7AAqCkwAKgpsACoKvAAqCwwAKgssACoLXAAqDCwAKgyMACoMvAAqDPwAKg1sACoN7AAqDgwAKg5MACoOrAAqDtwAKg8sACoQLAAqEJwAKhD8ACoRbAAqEbwAKhH8ACoSfAAqEuwAKhQcACoUrAAqFiwAKhbsACoXXAAqF5wAKhfcACoYLAAqGHwAKhi8ACoY3AAqGPwAKhpMACoajAAqGywAKhvMACocfAAqHZwAKh48ACoe7AAqH2wAKiAMACogrAAqIVwAKiIMACoiXAAqItwAKiO8ACokHAAqJIwAKiVMAColvAAqJhwAKiccAConPAAqKOwAKiosACorLAAqLAwAKi18ACoubAAqL+wAKjFMACozPAAqNPwAKjYMACo3HAAqOGwAKjncACo6/AAqPAwAKj0MACo93AAqPvwAKj+sACpAnAAqQZwAKkKMACpDnAAqRRwAKkWsACpHTAAqR8wAKkgcACpJnAAqSvwAKktsACpMbAAqTRwAKk48ACpPTAAqUAwAKlFcACpRzAAqUnwAKlMMACpTjAAqVRwAKlasACpYDAAqWhwAKlrcACpbjAAqXJwAKl1cACpfLAAqX4wAKmAcACphPAAqYmwAKmQsACplHAAqZbwAKmacACpnzAAqaPwAKmkMACpqPAAqa2wAKmycACptPAAqbiwAKm8cACpvjAAqcAwAKnF8ACpyTAAqc1wAKnRMACp03AAqdXwAKnZcACp3fAAqd9wAKnisACp5TAAqehwAKnpsACp7fAAqfJwAKn2cACp+rAAqf5wAKoB8ACqBnAAqg5wAKoUcACqGbAAqh7wAKog8ACqJjAAqidwAKoosACqLLAAqjCwAKozMACqN/AAqjlwAKo9sACqQrAAqkPwAKpGcACqSnAAqk8wAKpW8ACqWDAAqlmwAKpdcACqX3AAqmmwAKpq8ACqbfAAqnEwAKp0MACqeDAAqnqwAKp9cACqgXAAqoTwAKqJcACqjjAAqpKwAKqZsACqnTAAqp/wAKqk8ACqp3AAqqkwAKqusACqsnAAqrgwAKq/cACqwnAAqsYwAKrIcACqzPAAqs/wAKrS8ACq1bAAqtfwAKraMACq3DAAqt3wAKrf8ACq4rAAquVwAKroMACq6nAAqu4wAKrxcACq9LAAqvdwAKr5sACq+7AAqv2wAKsAsACrA/AAqwZwAKsJMACrC/AAqw8wAKsRsACrEvAAqxfwAKsZsACrHHAAqx7wAKsh8ACrJTAAqyjwAKst8ACrMPAAqzRwAKs2cACrOvAAqz7wAKtC8ACrSHAAq06wAKtR8ACrUzAAq1hwAKtbsACrYTAAq2PwAKtoMACranAAq28wAKt1MACrejAAq35wAKuCsACrhDAAq4iwAKuKcACrjvAAq5OwAKuYMACrmzAAq50wAKugcACrpTAAq6kwAKutMACrsjAAq7lwAKu98ACrwbAAq8WwAKvIcACry3AAq80wAKvQsACr07AAq9XwAKvYcACr2rAAq90wAKvf8ACr4vAAq+WwAKvosACr67AAq+7wAKvxMACr87AAq/TwAKv48ACr/nAArAGwAKwK8ACsDzAArBFwAKwUcACsGTAArCGwAKwnMACsKTAArCvwAKwwMACsMrAArDbwAKw4sACsPPAArD/wAKxDsACsRnAArEowAKxNMACsUbAArFXwAKxf8ACsYfAArGJwAKxosACsbjAArHYwAKx5sACsgLAArIfwAKyLMACsjTAArI7wAKyP8ACsk3AArJWwAKyZcACsn/AArKLwAKypMACsrjAArK8wAKywcACssnAArLRwAKy2sACst/AArLkwAKy7MACsvTAArL2wAKy+MACswTAArMcwAKzIcACsyvAArM8wAKzRsACs1rAArNjwAKzbcACs3/AArOZwAKzr8ACs77AArPVwAKz6MACs/TAArQAwAK0EMACtBzAArQpwAK0McACtDrAArREwAK0SMACtFrAArRswAK0gcACtIzAArSxwAK0wcACtMnAArTZwAK07sACtQbAArUWwAK1LsACtVLAArVpwAK1cMACtYbAArWmwAK1vMACtc3AArXZwAK138ACtfzAArYAwAK2AsACtgbAArYSwAK2L8ACtjnAArZCwAK2TcACtl3AArZtwAK2gMACtpPAAraewAK2rcACtrvAArbKwAK26MACtv7AArcSwAK3JcACtzLAArdIwAK3XcACt2zAArd/wAK3iMACt5HAAreawAK3rcACt7LAArfLwAK3zsACt+LAArfowAK388ACt/7AArgDwAK4DcACuBXAArgdwAK4JcACuDDAArhBwAK4VsACuGLAArhzwAK4hMACuJPAAricwAK4osACuKbAAriqwAK4rcACuLDAAri2wAK4vMACuMDAArjDwAK4y8ACuNPAArjZwAK44cACuOvAArj7wAK5CcACuRPAArkZwAK5JcACuTHAArk7wAK5RcACuU7AArlXwAK5Y8ACuW/AArl5wAK5gsACuYvAArmZwAK5p8ACubPAArm9wAK5y8ACudvAArnxwAK6FcACujnAArpNwAK6acACunzAArqiwAK6r8ACur/AArrTwAK64MACuuzAArr8wAK7CMACuyHAArsvwAK7TsACu23AAruEwAK7o8ACu8TAArvwwAK8D8ACvDDAArxPwAK8b8ACvJDAArylwAK8ucACvMjAArzUwAK838ACvO3AArz/wAK9H8ACvTDAAr1IwAK9VMACvV7AAr16wAK9g8ACvZ3AAr2+wAK9xsACvejAAr3xwAK+D8ACvhfAAr41wAK+YMACvn/AAr6JwAK+nsACvrTAAr7LwAK+48ACvwHAAr8XwAK/NsACv03AAr9hwAK/bcACv4XAAr+ZwAK/t8ACv8zAAr/iwAK/+MACwAHAAsAQwALAGsACwCXAAsAwwALAOMACwErAAsBTwALAZsACwHXAAsCKwALAm8ACwL7AAsDHwALA1MACwOfAAsECwALBDsACwRHAAsEgwALBLsACwTvAAsFHwALBasACwXvAAsGJwALBlcACwaDAAsGmwALBsMACwb3AAsHOwALB3cACwefAAsIBwALCEMACwh3AAsIxwALCN8ACwkrAAsJqwALCgMACwpXAAsKgwALCvsACwsvAAsLcwALC6cACwvzAAsMZwALDK8ACw1DAAsNXwALDasACw3nAAsOQwALDmsACw6TAAsOswALDu8ACw8bAAsPVwALD2sACw+zAAsQIwALEGsACxCbAAsQvwALEPcACxEHAAsRVwALEY8ACxHvAAsSHwALElsACxM3AAsTwwALFD8ACxR3AAsUkwALFNMACxT/AAsVBwALFasACxYfAAsWywALFvcACxcXAAsXQwALF3MACxenAAsXrwALGB8ACxhrAAsYuwALGOMACxkrAAsZWwALGYcACxmjAAsZzwALGe8ACxpDAAsawwALGvMACxtDAAsbrwALG/cACxx3AAsckwALHMcACxzrAAsdPwALHY8ACx2rAAsd+wALHkcACx77AAsffwALH5sACx+jAAsgEwALIMMACyD3AAsiHwALIksACyLvAAsjtwALI+8ACyS7AAsk2wALJZsACyZTAAsmkwALJwMACycPAAsnIwALJ1MACyeHAAsnqwALJ9sACygHAAsoLwALKIsACyjTAAspCwALKTsACymDAAspnwALKdMACynfAAsp/wALKjMACyp7AAsqswALKvsACytHAAsrfwALK68ACyu/AAsr5wALLAcACywfAAssSwALLG8ACyyXAAssxwALLM8ACyz/AAstJwALLTMACy1HAAstlwALLcsACy4DAAsuYwALLocACy67AAsu/wALL08ACy+XAAsvvwALL/cACzBbAAswqwALMPMACzE/AAsxqwALMbcACzHzAAsyEwALMicACzIvAAsymwALMucACzMHAAszKwALM2sACzOjAAsz8wALNCcACzRPAAs0fwALNMMACzT3AAs1KwALNU8ACzVzAAs1owALNe8ACzYXAAs2JwALNlcACzaHAAs2owALNvMACzcPAAs3PwALN18ACzfTAAs35wALN/sACzhHAAs4bwALOJ8ACzjXAAs5KwALOXMACzmnAAs5xwALOhcACzpnAAs6twALO5sACzx/AAs8pwALPMcACz0HAAs9DwALPVcACz1/AAs9ywALPdcACz5jAAs+3wALPv8ACz9jAAs/gwALP4sACz+jAAs/twALP8sACz/fAAs/7wALQAMAC0AXAAtAKwALQEsAC0BvAAtAiwALQKsAC0CzAAtAzwALQN8AC0DvAAtA/wALQRcAC0EzAAtBVwALQXcAC0GTAAtBpwALQbsAC0HPAAtB6wALQfcAC0IXAAtCIwALQjMAC0I7AAtCYwALQnsAC0KDAAtCpwALQssAC0LTAAtC4wALQv8AC0MTAAtDKwALQ0MAC0NPAAtDXwALQ2cAC0NvAAtDjwALQ58AC0OzAAtDxwALQ+cAC0QDAAtEGwALRCcAC0Q3AAtETwALRGcAC0R7AAtEkwALRKMAC0SzAAtExwALRNcAC0TjAAtE/wALRQsAC0UbAAtFLwALRT8AC0VTAAtFcwALRZcAC0W3AAtF3wALRiMAC0ZnAAtGowALRrsAC0b/AAtHGwALR0sAC0dvAAtHwwALR+8AC0gzAAtIdwALSJsAC0i3AAtI8wALSQcAC0kTAAtJOwALSWcAC0mDAAtJqwALSfcAC0pLAAtKjwALSpsAC0rTAAtK+wALSxsAC0tfAAtLqwALS/sAC0xHAAtMlwALTNcAC00nAAtNawALTasAC037AAtORwALTqMAC07vAAtPJwALT38AC0/TAAtP6wALUBcAC1BDAAtQawALUJMAC1CfAAtQ5wALUQ8AC1EnAAtRSwALUZcAC1HvAAtR+wALUisAC1IzAAtSOwALUksAC1JnAAtSjwALUpsAC1KnAAtSwwALUusAC1L3AAtTDwALUxcAC1MrAAtTPwALU1MAC1NzAAtTewALU8cAC1PzAAtUQwALVEsAC1RfAAtUfwALVIsAC1STAAtUpwALVLsAC1TbAAtU5wALVQcAC1UzAAtVQwALVVMAC1VnAAtVhwALVZsAC1WvAAtVzwALVdsAC1XvAAtWDwALVhcAC1ZDAAtWSwALVmcAC1aPAAtWlwALVq8AC1bjAAtW8wALVw8AC1cXAAtXOwALV0MAC1djAAtXnwALV6cAC1frAAtYOwALWEcAC1hrAAtYfwALWJ8AC1inAAtYtwALWNMAC1jbAAtZVwALWVsAC1lvAAtZmwALWdMAC1nfAAtZ/wALWgMAC1onAAtadwALWusAC1r7AAtbHwALW1sAC1t7AAtbmwALW6cAC1vTAAtcGwALXGsAC1y/AAtdBwALXVMAC12zAAteAwALXj8AC16XAAte6wALXzMAC19nAAtfuwALYAMAC2BbAAtgowALYPcAC2FPAAthmwALYe8AC2JDAAtimwALYvMAC2MzAAtjfwALY+MAC2QnAAtkbwALZLsAC2UTAAtlPwALZVsAC2V/AAtlswALZdMAC2YHAAtmJwALZlsAC2Z7AAtmrwALZuMAC2cPAAtnMwALZ1cAC2dzAAtn6wALaBcAC2hDAAtoSwALaFsAC2iDAAtonwALaN8AC2kPAAtpWwALaYcAC2nXAAtqAwALai8AC2pXAAtqmwALatcAC2srAAtrgwALa9MAC2wvAAtsVwALbI8AC2zbAAttBwALbWMAC22PAAttwwALbdMAC24HAAtuKwALbkcAC25bAAtuwwALbxMAC29DAAtvewALb68AC2/XAAtv8wALcB8AC3BXAAtwYwALcLsAC3DnAAtxDwALcVMAC3GDAAtx0wALchsAC3JDAAtyfwALcrMAC3MDAAtzPwALc48AC3OnAAtz3wALdDMAC3RbAAt0gwALdM8AC3UTAAt1UwALdZsAC3XrAAt2GwALdmMAC3Z/AAt2xwALdvcAC3c3AAt3dwALd68AC3fbAAt4MwALeJ8AC3jjAAt5JwALeVMAC3mHAAt5uwALeesAC3oXAAt6QwALemMAC3qbAAt6uwALeuMAC3rzAAt7EwALezMAC3tzAAt7jwALe58AC3vnAAt8DwALfHMAC3y3AAt8+wALfSsAC317AAt9qwALffcAC34bAAt+UwALfp8AC38LAAt/awALf9sAC4AnAAuAZwALgLMAC4DzAAuBUwALgY8AC4G7AAuB8wALgkMAC4KnAAuDCwALgzcAC4OTAAuD/wALhE8AC4SXAAuEwwALhRsAC4WDAAuF8wALhj8AC4aHAAuG2wALhzcAC4d3AAuHnwALh8sAC4f3AAuIEwALiF8AC4ibAAuI2wALiRsAC4m3AAuJ4wALilcAC4q7AAuLOwALi0sAC4unAAuL/wALjDsAC4y3AAuM3wALjPMAC41XAAuNdwALjY8AC43PAAuOTwALjpcAC47TAAuO5wALjwMAC48vAAuPcwALj7sAC5APAAuQWwALkJMAC5EDAAuRLwALkWMAC5GvAAuR3wALkfMAC5IHAAuSSwALkm8AC5KPAAuS6wALkzMAC5NrAAuTgwALk68AC5P7AAuUZwALlK8AC5TnAAuVEwALlTcAC5WXAAuV8wALlgsAC5ZbAAuWewALlrcAC5bjAAuXMwALl1MAC5ffAAuYCwALmDcAC5hXAAuYewALmJ8AC5jHAAuY6wALmQcAC5krAAuZcwALmasAC5nrAAuaLwALmlsAC5rHAAubGwALm0sAC5tvAAubowALm+MAC5wvAAucfwALnL8AC50LAAudiwALnm8AC56LAAuewwALnxcAC59XAAuf/wALoJcAC6C3AAug5wALoPsAC6EPAAuhVwALoZMAC6G/AAuiAwALojcAC6JzAAuiowALoscAC6MfAAujVwALo3cAC6OzAAuj4wALpF8AC6TnAAuldwALpgcAC6YvAAumXwALpn8AC6aTAAum5wALpysAC6dLAAunswALqB8AC6hPAAuoZwALqKsAC6jnAAupCwALqTMAC6lfAAupjwALqccAC6nvAAuqLwALqlcAC6qDAAuqpwALqtsAC6sDAAurLwALq2cAC6u/AAusRwALrJMAC60bAAutZwALre8AC643AAuuywALrxMAC69vAAuvuwALsDMAC7BXAAuwfwALsKcAC7EDAAuxMwALsW8AC7GrAAuyBwALsmMAC7KrAAuy8wALsxcAC7M3AAuzZwALs5sAC7PfAAu0NwALtHsAC7S/AAu02wALtRsAC7UrAAu1XwALtZsAC7XDAAu18wALthsAC7ZDAAu2kwALtr8AC7brAAu3OwALt68AC7fnAAu4WwALuK8AC7jHAAu43wALu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ocADF7XAAxfLwAMX8sADGBTAAxgwwAMYRMADGGvAAxiMwAMYuMADGN7AAxjwwAMY+sADGQPAAxkQwAMZJcADGTbAAxlEwAMZTMADGV7AAxl0wAMZicADGa3AAxm9wAMZzsADGd7AAxntwAMZ/8ADGg7AAxoWwAMaLMADGjzAAxpOwAMaW8ADGmrAAxp8wAMakcADGqrAAxq9wAMax8ADGtDAAxrhwAMa7MADGvjAAxsEwAMbD8ADGxPAAxskwAMbPMADG0vAAxtUwAMbY8ADG3PAAxuKwAMbn8ADG6nAAxu0wAMbw8ADG8/AAxvUwAMb3sADG+3AAxv+wAMcCcADHBrAAxwtwAMcOsADHE3AAxxewAMcacADHHnAAxyQwAMcpcADHLTAAxzCwAMc1MADHOTAAxztwAMc/MADHQnAAx0cwAMdOcADHT3AAx1kwAMdbsADHXrAAx2TwAMdnMADHavAAx22wAMd1MADHeXAAx3ywAMeA8ADHhbAAx4iwAMeLsADHknAAx5YwAMeZcADHnPAAx6EwAMej8ADHp/AAx6pwAMeusADHszAAx7cwAMe38ADHunAAx7zwAMe/8ADHxHAAx8ewAMfOMADH0DAAx9JwAMfacADH4HAAx+PwAMfncADH7LAAx+8wAMfy8ADH9/AAx/swAMf/sADIAnAAyAYwAMgKMADIDbAAyBAwAMgT8ADIFfAAyB5wAMggsADIIfAAyCkwAMgv8ADINfAAyD4wAMhHsADIT/AAyFewAMhesADIaTAAyHMwAMh8cADIgfAAyIiwAMiN8ADIljAAyJzwAMiiMADIpvAAyKrwAMitMADIsLAAyLLwAMi28ADIunAAyL0wAMjBMADIw3AAyMZwAMjHsADIyjAAyM3wAMjQ8ADI1DAAyNhwAMjb8ADI3rAAyOJwAMjk8ADI53AAyOrwAMjt8ADI8LAAyPWwAMj3sADI+rAAyP8wAMkE8ADJCTAAyQ2wAMkR8ADJGLAAyR3wAMkhMADJJXAAyS6wAMk2cADJO3AAyUTwAMlM8ADJUrAAyVewAMlaMADJXzAAyWOwAMlmMADJaLAAyW5wAMl2cADJfvAAyYZwAMmNsADJlTAAyZnwAMmdcADJorAAyacwAMmqsADJr7AAybPwAMm7sADJv3AAycEwAMnFMADJyHAAyczwAMnQMADJ1HAAydZwAMn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YMADQ3TAA0OKwANDnMADQ7jAA0PHwAND28ADQ/DAA0P4wANECMADRBTAA0QlwANEM8ADRELAA0RWwANEZcADRGrAA0R7wANEm8ADRLjAA0TOwANE28ADRPfAA0UbwANFLcADRTbAA0U+wANFU8ADRWnAA0V0wANFhsADRZTAA0WqwANFtMADRcDAA0XTwANF3sADRgvAA0YWwANGIMADRirAA0ZIwANGYsADRnzAA0aHwANGncADRqHAA0a1wANGzMADRuDAA0cQwANHIcADRy/AA0dDwANHUMADR17AA0dwwANHfsADR4/AA0ehwANHscADR8HAA0fJwANH2MADR+rAA0f3wANID8ADSCDAA0gywANIRMADSFDAA0hdwANIZ8ADSHPAA0h+wANIjsADSKHAA0ivwANIvsADSMnAA0jfwANI68ADSPXAA0kLwANJGsADSTnAA0lDwANJUsADSXLAA0mFwANJlMADSarAA0nAwANJz8ADSeTAA0n3wANKA8ADShbAA0ohwANKMMADSjzAA0pGwANKUsADSm7AA0p2wANKfMADSoXAA0qSwANKocADSrXAA0rBwANKy8ADStfAA0rpwANK88ADSvfAA0sJwANLEcADSx3AA0shwANLLcADSzfAA0tEwANLUMADS1nAA0t+wANLj8ADS6HAA0utwANLtsADS8fAA0vRwANL2sADS+PAA0v0wANMC8ADTCLAA0w1wANMP8ADTE/AA0xewANMasADTHjAA0yHwANMj8ADTJ7AA0ynwANMssADTMHAA0zJwANM48ADTPLAA00LwANNHcADTSrAA00zwANNPsADTU/AA01awANNcsADTXzAA02GwANNmsADTarAA03AwANN0cADTezAA033wANOAsADThXAA04mwANOOMADTkfAA05UwANOZcADTnLAA054wANOlMADTrfAA07QwANO8cADTwnAA08kwANPOsADT0zAA09WwANPZ8ADT2/AA097wANPhcADT5jAA0+nwANPucADT73AA0/BwANPyMADT9/AA0/uwANP+MADUAHAA1ARwANQIMADUDvAA1BVwANQdsADUJbAA1C9wANQ1sADUP7AA1EnwANRSMADUWfAA1GCwANRocADUcjAA1HowANSG8ADUjvAA1JjwANSn8ADUsDAA1LmwANTEsADUz7AA1NwwANTnMADU8nAA1PxwANUEcADVDPAA1RiwANUisADVK/AA1TbwANVBMADVTPAA1VVwANVg8ADVb7AA1XqwANWFcADVjfAA1ZWwANWlMADVsnAA1b+wANXLsADV1jAA1eCwANXrMADV+HAA1gTwANYVsADWHjAA1iVwANYvMADWO/AA1kPwANZLsADWVXAA1lvwANZg8ADWaTAA1nQwANZ78ADWhjAA1pCwANaXcADWnnAA1qpwANaxcADWuPAA1r/wANbLcADW1vAA1t9wANbnsADW8XAA1vtwANcI8ADXETAA1xywANcmcADXMXAA1zUwANc4sADXPLAA10HwANdG8ADXSjAA11EwANdYcADXXbAA12JwANdmMADXavAA13GwANd2sADXeHAA13twANd/MADXhHAA144wANeTMADXmjAA16YwANercADXsfAA17nwANfB8ADXy3AA19NwANfbsADX4rAA1+ewANftMADX9fAA1/zwANgDMADYCzAA2BJwANgbMADYILAA2CkwANg08ADYPPAA2ESwANhIsADYTrAA2FQwANhY8ADYZXAA2G+wANh58ADYgvAA2IpwANiR8ADYmXAA2KOwANitMADYuvAA2MBwANjEsADYzbAA2NRwANjeMADY4zAA2OfwANjusADY8jAA2PfwANj58ADZAfAA2QkwANkQsADZFHAA2R1wANkl8ADZLnAA2TOwANk6cADZQXAA2UvwANlRMADZWbAA2WBwANlocADZanAA2WxwANlusADZd7AA2YLwANmXcADZrjAA2cSwANnOcADZ1TAA2dswANng8ADZ5jAA2evwANnycADZ+HAA2f7wANoEsADaCnAA2hDwANoW8ADaHXAA2i5wANoysADaODAA2j0wANpCsADaTTAA2lLwANpcsADab/AA2nSwANp88ADajTAA2qdwANq78ADa0zAA2uQwANr08ADbALAA2xhwANs0MADbOjAA20vwANtkMADbdfAA233wANuEcADbmDAA26NwANu1sADbvjAA28/wANvZcADb6XAA2/xwANwd8ADcJfAA3C1wANw1cADcRfAA3FiwANxmcADcdDAA3H0wANyFsADch3AA3I2wANyUsADcoHAA3KXwANyzcADcyPAA3NEwAN0GsADdFLAA3SQwAN1Q8ADdgLAA3Z1wAN2vsADdzvAA3dhwAN3o8ADeAXAA3hPwAN4fcADeL3AA3jmwAN5wMADei7AA3qpwAN7ncADe8zAA3wKwAN8LsADfFHAA3yGwAN8l8ADfMrAA30YwAN9XMADfanAA33gwAN+VsADfoTAA36wwAN+78ADfy7AA392wAN/q8ADgCTAA4B3wAOAiMADgJjAA4DlwAOBPcADgW3AA4GiwAOB7MADghzAA4I+wAOCXsADgo/AA4LAwAOFAcADhULAA4VuwAOFlMADhh/AA4aBwAOHDcADh7bAA4g9wAOIr8ADiPPAA4kuwAOJu8ADifvAA4rPwAOLXcADi9/AA4xhwAOM7sADjW/AA42pwAOOFMADjpvAA48gwAOPq8ADkA7AA5BwwAOQtcADkNXAA5DxwAORn8ADkh3AA5JfwAOTGcADk5XAA5PKwAOUgcADlO/AA5XBwAOV8sADlkbAA5aFwAOWvsADlu3AA5cfwAOXQ8ADl07AA5dcwAOXXsADl2XAA5eKwAOXmsADl6nAA5ezwAOXx8ADl9LAA5fuwAOYAMADmBHAA5gZwAOYH8ADmCrAA5gywAOYQ8ADmEbAA5hNwAOYVsADmGvAA5iFwAOYkMADmJzAA5iuwAOYwMADmM3AA5jdwAOY7MADmPvAA5kOwAOZIcADmTPAA5lIwAOZWsADmXDAA5mGwAOZnMADmbHAA5nKwAOZ18ADmerAA5n1wAOaCMADmhPAA5onwAOaNMADmkbAA5pSwAOaZMADmm/AA5qCwAOaksADmqLAA5quwAOat8ADmuXAA5r5wAObE8ADmzDAA5s7wAObYMADm3HAA5uAwAObjsADm5nAA5udwAObocADm8jAA5vMwAOb0sADm97AA5vkwAOb7cADm/3AA5wHwAOcEMADnCTAA5wwwAOcPMADnEDAA5xMwAOcUMADnFjAA5xjwAOccMADnHXAA5yCwAOcksADnJ7AA5y0wAOcw8ADnM3AA5zZwAOc7cADnPjAA50FwAOdF8ADnSDAA50uwAOdPcADnUnAA51RwAOdZcADnXLAA515wAOdfsADnaDAA52wwAOdwMADncLAA53hwAOd5cADnenAA53twAOd8cADnfXAA535wAOd/cADngHAA54EwAOeB8ADngvAA54OwAOeEcADnhTAA54XwAOeGsADnh3AA54hwAOeJcADninAA54twAOeMcADnjXAA545wAOePcADnkHAA55EwAOeSMADnkzAA55PwAOeUsADnlXAA55YwAOeXMADnmLAA55uwAOec8ADnnnAA56GwAOekMADnpXAA56cwAOepMADnqjAA56ywAOet8ADnsLAA57PwAOe1sADnuHAA57ywAOe+cADnwXAA58XwAOfIMADnyXAA58rwAOfMcADnzbAA586wAOfQ8ADn0nAA59RwAOfWsADn2DAA59qwAOfbcADn3fAA59+wAOficADn4/AA5+SwAOfn8ADn6bAA5+ywAOfu8ADn77AA5/HwAOf1MADn97AA5/nwAOf9cADoADAA6AGwAOgCsADoBXAA6AfwAOgKcADoC/AA6A2wAOgQcADoEbAA6BKwAOgUcADoF3AA6BjwAOgdsADoJHAA6ERwAOhJsADoSzAA6E+wAOhZMADoYvAA6G1wAOh28ADohrAA6IiwAOiQMADonnAA6KEwAOii8ADoqrAA6LMwAOi08ADoubAA6LqwAOi9sADovvAA6MBwAOjB8ADoxDAA6MawAOjIMADoyfAA6MvwAOjPsADo03AA6NVwAOjW8ADo2fAA6NywAOjgsADo5DAA6OdwAOjxMADo+nAA6QRwAOkIcADpDPAA6RAwAOkUcADpFzAA6RmwAOkcsADpH/AA6SUwAOkqcADpNTAA6UAwAOlJ8ADpVHAA6V/wAOljcADpZ3AA6WiwAOlucADpcrAA6XQwAOl1cADpenAA6XywAOl+sADphTAA6YlwAOmMsADpjrAA6ZDwAOmTMADplDAA6ZhwAOmbMADpnfAA6aJwAOmn8ADprDAA6bAwAOmxsADptXAA6bbwAOm7MADpw/AA6ckwAOnNsADp1nAA6duwAOngMADp5zAA6ezwAOnucADp83AA6fawAOn7sADp//AA6gOwAOoIMADqDPAA6hEwAOodMADqIfAA6iXwAOon8ADqLrAA6jBwAOo0MADqPXAA6kLwAOpMMADqUbAA6lcwAOpe8ADqZLAA6mpwAOpt8ADqdbAA6nnwAOp+8ADqhvAA6onwAOqNcADqkXAA6pbwAOqcsADqojAA6qMwAOqqsADqsTAA6rWwAOq5sADqvrAA6sKwAOrDcADqyDAA6s1wAOrTMADq1rAA6tywAOrecADq4LAA6uRwAOrpMADq8LAA6viwAOr7MADq/fAA6wAwAOsCcADrBvAA6wlwAOsQMADrErAA6xMwAOsXsADrHrAA6yKwAOsnMADrKzAA6y9wAOs0MADrOLAA6z0wAOtA8ADrRDAA60pwAOtNsADrULAA61OwAOtWMADrXrAA62KwAOtksADrZ3AA62pwAOtvMADrcjAA63TwAOt58ADre3AA64CwAOuC8ADrhHAA64dwAOuK8ADrjHAA645wAOuQMADrkzAA65dwAOuZcADrnPAA658wAOuhMADrpPAA66jwAOuqMADrrPAA66/wAOuxsADrszAA67dwAOu5sADrvLAA68EwAOvIcADr0LAA69MwAOvV8ADr3HAA6+MwAOvm8ADr6rAA6+5wAOvwsADr9fAA6/ewAOv7cADr/fAA7AEwAOwEcADsB/AA7AtwAOwRMADsEzAA7BZwAOwZMADsHvAA7CKwAOwpsADsLjAA7DIwAOw3sADsPHAA7D+wAOxC8ADsRnAA7EkwAOxMcADsTfAA7E9wAOxT8ADsWHAA7FswAOxfMADsZPAA7GswAOxu8ADsdPAA7H3wAOyHcADsjTAA7JGwAOyXMADsnDAA7KJwAOymcADsq/AA7LDwAOy3cADsu/AA7L2wAOzAcADsxfAA7MgwAOzNMADsz7AA7NewAOzesADs4fAA7OTwAOzoMADs7bAA7PHwAOz1MADs9/AA7P5wAO0DsADtCrAA7RBwAO0UsADtFzAA7RjwAO0asADtH3AA7SUwAO0qsADtLTAA7TAwAO01MADtOzAA7T8wAO1AsADtRDAA7UawAO1I8ADtSzAA7VNwAO1VsADtWTAA7V5wAO1g8ADtZLAA7WdwAO1rcADtbjAA7XCwAO1y8ADtdbAA7XmwAO178ADtfjAA7YCwAO2JcADtjXAA7Y/wAO2VMADtmvAA7ZzwAO2f8ADto7AA7alwAO2vcADtsnAA7bSwAO228ADtuPAA7bvwAO2+MADtwLAA7cPwAO3GsADtyrAA7c0wAO3TcADt2bAA7d4wAO3iMADt5rAA7epwAO3s8ADt7zAA7fFwAO30sADt+fAA7fzwAO4BsADuAzAA7gXwAO4LcADuD3AA7hMwAO4VcADuHzAA7iPwAO4tsADuMDAA7jGwAO41sADuOHAA7j0wAO5BsADuQ/AA7kpwAO5K8ADuTDAA7lIwAO5X8ADuWzAA7mXwAO5ocADubHAA7m9wAO51sADueHAA7n4wAO6CcADuhXAA7omwAO6L8ADujfAA7pPwAO6Z8ADupXAA7qmwAO6t8ADur/AA7rGwAO61sADuu3AA7r4wAO6/sADuxbAA7smwAO7UsADu2DAA7tvwAO7gsADu5LAA7ukwAO7vMADu8vAA7vbwAO768ADu/3AA7whwAO8MMADvD3AA7xNwAO8VMADvGXAA7x5wAO8h8ADvKXAA7ytwAO8vMADvN/AA7ztwAO8/8ADvQbAA70VwAO9KMADvSzAA703wAO9RMADvUzAA71ZwAO9YsADvWrAA712wAO9f8ADvY7AA72gwAO9sMADvbnAA73IwAO92sADvenAA733wAO+AsADvhDAA74cwAO+O8ADvk7AA75iwAO+bsADvoLAA76OwAO+oMADvqrAA767wAO+0MADvuXAA779wAO/BcADvxPAA78YwAO/JcADvzLAA79JwAO/W8ADv3nAA7+SwAO/l8ADv7TAA7/JwAO/2cADv/XAA8AJwAPAI8ADwDnAA8BXwAPAisADwMTAA8DpwAPBBcADwRXAA8EswAPBQcADwVXAA8F4wAPBhsADwZPAA8GswAPBscADwbzAA8HKwAPB3MADweXAA8H7wAPCGMADwjPAA8JJwAPCY8ADwnzAA8K6wAPC48ADwvTAA8MqwAPDY8ADw3LAA8N/wAPDj8ADw6LAA8OowAPDrsADw7fAA8PJwAPD2cADw+rAA8P7wAPEBsADxBnAA8QowAPEQcADxFbAA8RrwAPEfMADxIjAA8SSwAPEoMADxK/AA8TEwAPE2cADxO7AA8UMwAPFFcADxSjAA8UwwAPFOcADxUjAA8VOwAPIo8ADy+jAA8w6wAPMaMADzHfAA8zywAPM9cADzQLAA80KwAPNE8ADzSXAA80xwAPNQ8ADzVbAA81fwAPNbcADzXvAA82KwAPNk8ADzaDAA82kwAPNrsADzbbAA83NwAPN3sADzefAA83twAPN+MADzgLAA84XwAPON8ADzk/AA85awAPOZ8ADznzAA86XwAPOpsADzq/AA86+wAPOzMADzuXAA876wAPPDMADzybAA882wAPPRsADz1zAA89wwAPPgcADz5jAA8+mwAPPs8ADz7/AA8/MwAPP2MAD0AfAA9AWwAPQKsAD0D/AA9BFwAPQXsAD0HbAA9CPwAPQosAD0K/AA9DBwAPQ9MAD0QLAA9EKwAPR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xsAEAtPABALcwAQC58AEAu7ABAL+wAQDE8AEAx3ABAMnwAQDM8AEAz7ABANKwAQDW8AEA2zABAN0wAQDfMAEA4fABAOYwAQDn8AEA7LABAPHwAQD18AEA+fABAPzwAQD/8AEBBTABAQhwAQEQMAEBFbABAR3wAQElcAEBKrABAS9wAQEy8AEBNbABATqwAQE9sAEBQHABAUTwAQFHcAEBSnABAU3wAQFRcAEBVnABAVrwAQFfcAEBYPABAWPwAQFo8AEBbbABAXGwAQF3MAEBe/ABAX6wAQGDcAEBhzABAYswAQGO8AEBkfABAZjwAQGgcAEBp7ABAa/wAQG18AEBvjABAb9wAQHBMAEBwbABAcIwAQHFcAEBx/ABAc2wAQHRsAEB1zABAdjwAQHfsAEB4jABAeQwAQHpsAEB7TABAfBwAQH2cAEB+TABAfpwAQH88AEB/nABAgKwAQIDcAECA/ABAgpwAQIQ8AECFPABAhpwAQId8AECIPABAiYwAQIqsAECMDABAjVwAQI58AECPrABAkKwAQJEsAECRfABAkgwAQJKMAECS3ABAkzwAQJNsAECTrABAlNwAQJVsAECWPABAl6wAQJmsAECabABAmtwAQJxsAECdPABAnawAQJ48AECe/ABAoCwAQKD8AECiHABAorwAQKOsAEClHABApewAQKa8AECnXABAqBwAQKlcAECqHABAqtwAQKucAECsnABArUwAQK4sAECvHABAr6wAQLCMAECxTABAscwAQLJ8AECzbABAtEwAQLW8AEC2zABAt3wAQLg8AEC4/ABAukwAQLucAEC8jABAvXwAQL78AEDAfABAwNwAQME8AEDCLABAwxwAQMOsAEDEPABAxVwAQMZ8AEDHzABAyPwAQMr8AEDL/ABAzOwAQM4sAEDPPABAz/wAQNBMAEDRjABA0lwAQNKsAEDTLABA02wAQNN8AEDUjABA1cwAQNccAEDYnABA2fwAQNssAEDcPABA3QwAQN48AEDfbABA4AwAQOFcAEDijABA5BwAQOWMAEDm/ABA6GwAQOmsAEDq/ABA7EwAQO1sAEDunABA73wAQPAsAEDw7ABA8gwAQPMMAEDznABA9IwAQPWMAED1/ABA9mwAQPc8AED43ABA+WwAQPoMAED6nABA+4wAQPy8AED9XABA/jwAQP8cAEEA7ABBAiwAQQ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8cAEPgPABD4gwAQ+OcAEPlPABD5hwAQ+gMAEPpPABD69wAQ+18AEPwDABD8ZwAQ/RMAEP1/ABD+RwAQ/s8AEP9jABD/twARAFsAEQC/ABEBFwARAS8AEQHfABECRwARApsAEQNDABEDowARBEcAEQSjABEFTwARBbMAEQYrABEGbwARBxcAEQeHABEH0wARB+8AEQgLABEIPwARCIsAEQjHABEI5wARCS8AEQljABEJmwARCdMAEQoHABEKQwARCm8AEQqfABEKvwARCwMAEQtDABELawARC48AEQu3ABEL5wARDCsAEQxzABEMnwARDNcAEQ0bABENNwARDVcAEQ1vABENwwARDhsAEQ5rABEOtwARDwsAEQ9bABEPnwARD+cAERAXABEQRwAREHsAERC3ABEREwARESsAERFrABERhwAREa8AERH3ABESNwAREpcAERLjABETUwARE6MAERQPABEUZwARFL8AERUPABEVewARFfMAERZLABEWqwARFwsAEReLABEX4wARGFMAERifABEY/wARGUMAERmTABEaCwARGm8AERrHABEbDwARG1MAERuXABEb+wARHFsAERyzABEdNwARHYsAER4TABEegwARHtMAER8/ABEfqwARICMAESCDABEg1wARIT8AESGXABEh8wARIlcAESK/ABEjIwARI5MAESPrABEkTwARJLMAESUPABElZwARJcsAESZDABEmgwARJssAESb/ABEnQwARJ2cAESenABEn0wARJ/8AESgjABEoYwARKK8AESjbABEpDwARKUMAESmXABEpwwARKgcAESo7ABEqUwARKp8AESrXABErAwARKx8AEStXABEriwARK+MAESwLABEsZwARLKsAESzPABEtDwARLU8AES2bABEtzwARLgsAES43ABEubwARLqsAES7jABEvJwARL1MAES+LABEvwwARL/MAETAfABEwVwARMKMAETC/ABEw5wARMQMAETErABExSwARMYsAETG3ABEyBwARMjcAETKDABEyuwARMvMAETMjABEzbwARM8cAETP/ABE0PwARNH8AETTfABE1FwARNWcAETWTABE10wARNfcAETYnABE2fwARNsMAETb7ABE3IwARN0cAETdrABE3rwARN+8AETgnABE4iwAROL8AETknABE5dwAROacAETnzABE6PwAROpcAETrXABE7CwARO1MAETuLABE7xwARPAsAETxTABE8lwARPOcAET0fABE9YwARPacAET3jABE+GwARPl8AET63ABE+1wARPv8AET8/ABE/ZwARP48AET+7ABFAKwARQN8AEUFHABFB8wARQlcAEUK/ABFDawARQ8sAEURvABFE2wARRYsAEUW7ABFF4wARRisAEUZfABFGtwARRt8AEUcXABFHawARR6sAEUfLABFISwARSIsAEUjTABFJGwARSVsAEUmnABFKNwARSoMAEUsTABFLbwARS48AEUvXABFMAwARTDsAEUxfABFMnwARTM8AEUz7ABFNJwARTUsAEU1rABFNqwARThcAEU5TABFOgwARTscAEU83ABFPZwART78AEU/3ABFQEwARUGcAEVCXABFQuwARUOcAEVEHABFRKwARUVcAEVGDABFRqwARUdcAEVILABFSJwARUk8AEVJ3ABFSlwARUrMAEVLjABFTKwARU1sAEVN7ABFTtwARU/cAEVQfABFUYwARVKcAEVTzABFVbwARVZcAEVXzABFWHwARVjsAEVZ/ABFWxwARVzcAEVdjABFXwwARV+MAEVgzABFYWwARWI8AEVi7ABFY7wARWR8AEVlHABFZTwARWXcAEVm/ABFaGwARWlsAEVqjABFatwARWtcAEVr7ABFbIwARW1sAEVt/ABFbzwARW/sAEVxDABFcewARXJ8AEVyrABFc0wARXQ8AEV03ABFdWwARXX8AEV2PABFdzwARXfsAEV43ABFeXwARXo8AEV6rABFezwARXv8AEV83ABFfkwARX9sAEWAXABFgPwARYF8AEWBrABFgowARYMcAEWDzABFhCwARYTsAEWFXABFhkwARYbsAEWHfABFh7wARYjcAEWJrABFiuwARYvcAEWMvABFjUwARY68AEWP3ABFkEwARZDsAEWRjABFkswARZPcAEWVDABFlcwARZb8AEWX7ABFmNwARZm8AEWajABFm8wARZzMAEWdvABFnuwARZ/MAEWgbABFoVwARaIsAEWjLABFpAwARaV8AEWmrABFp7wARakMAEWp/ABFq4wARazcAEWtzABFrxwARa+8AEWwbABFsUwARbKcAEWzTABFtMwARbW8AEW3DABFuKwARboMAEW7vABFvKwARb38AEW/nABFwPwARcKsAEXDzABFxfwARcc8AEXIPABFyUwARcpsAEXK7ABFy3wARcwsAEXNfABFzmwARc+MAEXQbABF0WwARdKsAEXTrABF1IwARdYcAEXXjABF2SwARdssAEXcTABF3RwARd3cAEXerABF30wAReAcAEXgzABF4XwAReM8AEXlHABF5qwARegcAEXpHABF6owAReu8AEXszABF7iwARe+sAEXwzABF8ZwARfJsAEX0bABF9gwARfd8AEX4nABF+VwARfpsAEX7bABF/KwARf3sAEX+/ABGAGwARgIsAEYD3ABGBSwARgYsAEYHjABGCNwARgpMAEYLrABGDQwARg5cAEYPrABGERwARhG8AEYSbABGEywARhScAEYWTABGF6wARhjMAEYZ/ABGGywARhvcAEYc/ABGHcwARh+cAEYhbABGIowARiOcAEYk7ABGJcwARigMAEYqDABGLAwARi2cAEYuzABGMBwARjEcAEYyPABGM1wARjR8AEY13ABGNtwARjhMAEY5rABGO7wARjysAEY9bABGPjwARj7sAEY/7ABGQKwARkI8AEZD3ABGRVwARkasAEZHvABGSMwARknMAEZLLABGTRwARk4sAEZPDABGUGwARlG8AEZTHABGVQwARldcAEZX3ABGWJwARlmsAEZazABGW8wARlysAEZdTABGXhwARl68AEZffABGYEwARmEcAEZiLABGY9wARmWcAEZnfABGaIwARmocAEZr3ABGbYwARm9sAEZwbABGcewARnOcAEZ0nABGdhwARnfMAEZ4/ABGeqwARnyMAEZ+3ABGgAwARoGcAEaCrABGg6wARoVMAEaGHABGhwwARohMAEaJPABGihwARosMAEaMHABGjRwARo5cAEaPzABGkawARpNsAEaUfABGlZwARpasAEaXnABGmRwARpqMAEacfABGnhwARp8sAEafzABGoLwARqIcAEai7ABGo+wARqUcAEal3ABGpnwARqccAEan7ABGqSwARqpsAEar3ABGrKwARq08AEavDABGsCwARrBsAEaw7ABGscwARrMcAEa0LABGtSwARrZsAEa3XABGuAwARrkMAEa57ABGuvwARrvsAEa9bABGv8wARsIsAEbDTABGxEwARsWsAEbHXABGyMwARsqMAEbLjABGzOwARs6cAEbQDABG0cwARtL8AEbUfABG1iwARtg8AEbZbABG2kwARtscAEbb/ABG3KwARt2MAEbeTABG3wwARuDcAEbizABG5GwARuXsAEbm/ABG6HwARum8AEbq3ABG7EwARu3cAEbvDABG7+wARvDMAEbyfABG8/wARvUcAEb1zABG9qwARve8AEb4/ABG+cwARvq8AEb73ABG/OwARv28AEb+3ABG/+wARwE8AEcCjABHA6wARwT8AEcGfABHB/wARwnMAEcLjABHDOwARw5sAEcPHABHD9wARxCsAEcSLABHE+wARxVcAEcXzABHGFwARxksAEcaTABHG3wARxyMAEcdfABHHiwARx7cAEcfvABHIIwARyFsAEciTABHI2wARyUsAEcm/ABHKOwARyqMAEcrrABHLUwARy78AEcwTABHMcwARzKsAEczjABHNOwARzYMAEc3PABHN9wARzhcAEc5LABHOhwARzscAEc9XABHPnwARz7cAEc/jABHQMwAR0FsAEdB3ABHQowAR0O8AEdEvABHRhwAR0dMAEdIDABHSKwAR0o8AEdLDABHTIwAR00MAEdNbABHTiwAR07MAEdPnABHURwAR1JsAEdT7ABHVNwAR1WMAEdWTABHVxwAR1iMAEdZjABHWlwAR1tcAEdcjABHXZwAR14MAEdfHABHX/wAR2FMAEdizABHZKwAR2YMAEdnnABHaEwAR2jMAEdpPABHabwAR2oMAEdqjABHauwAR2tMAEdsnABHbgwAR28sAEdwLABHcNwAR3H8AEdy3ABHc5wAR3SsAEd13ABHdqwAR3csAEd3rABHeYwAR3rMAEd7LABHe3wAR3x8AEd87ABHffwAR38MAEd/jABHgEwAR4DsAEeCHABHgxwAR4OMAEeETABHhRwAR4VsAEeF7ABHhpwAR4e8AEeJXABHigwAR4scAEeMHABHjTwAR42sAEeOHABHjnwAR47cAEeP7ABHkTwAR5I8AEeTbABHk5wAR5PsAEeU3ABHlXwAR5X8AEeWfABHlywAR5f8AEeY7ABHmkwAR5ucAEecnABHncwAR588AEegLABHoWwAR6LcAEelfABHpiwAR6b8AEenLABHqDwAR6jMAEep7ABHqhwAR6pMAEeqrABHqvwAR6tMAEernABHrBwAR6yMAEetfABHrpwAR6+sAEew7ABHsUwAR7IsAEezPABHs5wAR7R8AEe1jABHthwAR7csAEe4bABHuPwAR7pMAEe7zABHvFwAR7zsAEe+TABHvtwAR798AEfBPABHwnwAR8N8AEfETABHxPwAR8Y8AEfHTABHyBwAR8mMAEfKrABHy8wAR82MAEfOjABHzzwAR9AcAEfRrABH0uwAR9RsAEfVrABH1mwAR9dsAEfYHABH2UwAR9oMAEfbrABH3VwAR938AEffHABH4BwAR+EsAEfirABH49wAR+V8AEfm3ABH6BwAR+mMAEfq7ABH7IwAR+5cAEfwrABH8ewAR/OMAEf0jABH9fwAR/bsAEf3vABH+IwAR/oMAEf7HABH/MwAR/5sAEf/TABIABwASAF8AEgCHABIAtwASANcAEgD7ABIBKwASATcAEgF7ABIBpwASAeMAEgIfABICRwASAnsAEgK7ABIC5wASAxcAEgNjABIDmwASBAcAEgQvABIESwASBFsAEgSbABIE5wASBR8AEgVzABIFqwASBecAEgYnABIGpwASBtcAEgdPABIHpwASCGcAEgi7ABIJGwASCd8AEgo7ABIKqwASCysAEgtXABILgwASC6sAEgwDABIMNwASDG8AEgzvABINhwASDfMAEg5bABIOxwASDycAEg9jABIP3wASEEMAEhDDABIREwASEWsAEhG3ABISHwASEoMAEhL7ABITZwASE8MAEhQXABIUewASFRcAEhVrABIVywASFeMAEhX3ABIWHwASFnMAEhavABIW7wASFz8AEhezABIYAwASGFsAEhirABIZGwASGWMAEhoPABIa6wASG0cAEhunABIcDwASHEsAEhybABIcuwASHN8AEh0nABIdQwASHWcAEh2rABId1wASHhMAEh5rABIerwASHtcAEh8HABIfNwASH58AEh/7ABIgGwASIDsAEiBfABIgnwASIMsAEiDnABIhAwASIWsAEiGzABIhwwASIesAEiHzABIiAwASIh8AEiJTABIiawASIpcAEiK3ABIi5wASIwsAEiNXABIjZwASI5MAEiPDABIkSwASJH8AEiTDABIk8wASJTcAEiV3ABIlrwASJesAEiYrABImWwASJn8AEiaPABImowASJsMAEibjABInCwASJzMAEidPABInawASJ48AEie/ABIn/wASKCMAEihbABIokwASKNMAEij/ABIpLwASKWMAEimbABIp2wASKj8AEip7ABIq2wASKxMAEis3ABIrawASK7cAEiv3ABIsLwASLF8AEiyvABIs6wASLScAEi1nABItrwASLdsAEi4LABIuQwASLqsAEi7XABIvBwASLzsAEi93ABIvswASL+cAEjAbABIwXwASMI8AEjDDABIw+wASMTsAEjFzABIxqwASMe8AEjI3ABIymwASMwsAEjNzABIz5wASNDMAEjSHABI1AwASNT8AEjWzABI16wASNhsAEja3ABI3IwASN2sAEje/ABI39wASOD8AEjhvABI4kwASOMcAEjj3ABI5LwASOWcAEjm7ABI57wASOgsAEjpHABI6iwASOrsAEjrfABI7FwASO28AEju7ABI8HwASPHMAEjzDABI83wASPPsAEj0bABI9nwASPc8AEj33ABI+LwASPmsAEj6XABI+wwASPucAEj87ABI/iwASP+sAEkBnABJAewASQMsAEkEnABJBWwASQZcAEkHLABJCBwASQisAEkJ7ABJCowASQr8AEkLrABJDBwASQx8AEkNPABJDgwASQ8cAEkPrABJELwASREMAEkR/ABJEtwASRP8AEkVDABJFfwASRb8AEkXXABJGHwASRkMAEkZ3ABJGpwASRs8AEkb7ABJHNwASR3sAEkefABJHywASR+sAEkh7ABJIrwASSPMAEkkbABJJawASScMAEkn7ABJKJwASSoMAEkqzABJK4wASSxsAEks3ABJLgwASS7cAEkvbABJMEwASTFsAEkyLABJMvwASTOsAEk0PABJNSwASTX8AEk2vABJN5wASTgsAEk4jABJORwASTn8AEk6/ABJO7wASTxcAEk9LABJPjwAST9sAElATABJQNwASUEcAElBbABJQewASUJcAElC/ABJQywASUOcAElErABJRYwASUZMAElG7ABJSEwASUmMAElKHABJTEwASU9MAElP7ABJU5wASVScAElVLABJViwASVa8AElXLABJV9wASVhsAElY3ABJWYwASVpcAEla/ABJW9wASVzsAEleHABJXvwASV/8AElhLABJYkwASWNcAElkPABJZWwASWY8AElmvABJZ0wASWfMAEloLABJaPwASWm8AElqLABJarwASWtsAElr/ABJbMwASW3sAElu3ABJb4wASXBsAElxjABJchwASXK8AElzXABJdFwASXVsAEl2vABJdwwASXgsAEl5XABJenwASXr8AEl8HABJfQwASX3cAEl+bABJf5wASYDMAEmCHABJgywASYNMAEmEPABJhSwASYX8AEmGrABJh1wASYjsAEmJXABJjBwASY0sAEmO3ABJj+wASZCsAEmRrABJkywASZOsAEmUXABJldwASZeMAEmZDABJmjwASZt8AEmcLABJnOwASZ28AEmejABJn0wASaA8AEmg3ABJodwASaK8AEmjzABJpOwASaZsAEmnbABJqRwASan8AEmq/ABJq8wASazMAEmtzABJrqwASa8MAEmwPABJsXwASbMMAEm0DABJtSwASba8AEm3nABJuMwASbksAEm6TABJu0wASb0MAEm+rABJv5wAScB8AEnCDABJw2wAScS8AEnF3ABJxxwAScgsAEnJfABJytwAScucAEnM3ABJzdwASc/MAEnRzABJ0rwASdSsAEnVvABJ1jwASddMAEnYvABJ2SwASdn8AEnajABJ24wASd2MAEneDABJ3uwASeHMAEnijABJ5BwASeUMAEnmnABJ55wASejcAEnprABJ6twASexcAEnuDABJ77wASfDMAEnx7ABJ87wASfUcAEn13ABJ9hwASfZsAEn2vABJ98wASfjsAEn5nABJ+kwASfsMAEn73ABJ/JwASf38AEn+zABKAGwASgE8AEoBzABKA3wASgRMAEoFfABKBiwASgcsAEoH/ABKCJwASgk8AEoKLABKCvwASgu8AEoMfABKDQwASg5MAEoPPABKEGwAShGsAEoSfABKE8wAShTsAEoWHABKF2wAShisAEoZ/ABKGrwAShvMAEocfABKHSwASh3sAEoe7ABKIAwASiDMAEohPABKIgwASiLcAEoj7ABKJQwASiYMAEonTABKKAwASikcAEop/ABKKxwASiuMAEosnABKLWwASi38AEoufABKLvwASjAMAEoxfABKMmwASjLsAEozzABKNEwASjUsAEo1vABKNqwASjcsAEo4DABKORwASjnMAEo6fABKPGwASj0cAEo+XABKPywASkAMAEpBHABKQowASkOsAEpEjABKRZwASkZ8AEpHTABKSDwASkj8AEpKTABKSswASkwcAEpNnABKTrwASk+cAEpQfABKUYwASlKcAEpT3ABKVNwASlYcAEpXLABKWBwASlmsAEpcbABKXOwASl1MAEpdjABKXqwASmAsAEphrABKYowASmPMAEplbABKaJwASmucAEpuPABKcLwASnN8AEp2nABKeAwASnmcAEp6rABKe4wASnvcAEp8vABKftwASoAsAEqAjABKgrwASoMMAEqEvABKhmwASod8AEqI/ABKiowASou8AEqNTABKjmwASo+MAEqQbABKkawASpLsAEqTnABKlFwASpUcAEqV3ABKlmwASpbsAEqXnABKmEwASplMAEqZ/ABKmnwASpsMAEqb3ABKnGwASp1MAEqeLABKnzwASp+8AEqgjABKoQwASqHcAEqijABKoxwASqRsAEqlbABKpqwASqgcAEqpPABKqkwASqusAEqsrABKrhwASq7sAEqvjABKsDwASrGcAEqyrABKs6wASrT8AEq17ABKtnwASrccAEq4TABKugwASrqMAEq7XABKvGwASr0sAEq+XABKvywASsAMAErArABKwUwASsG8AErCbABKwtwASsNsAErEvABKxfwASsdcAErIrABKyfwASsscAErMDABKzPwASs3sAErPDABK0AwAStEMAErSLABK0rwAStP8AErUrABK1WwAStXsAErWzABK19wAStkMAEraLABK2ywAStyMAErdvABK3swASt/8AErhLABK4fwASuLcAErjnABK5DwASuTsAErljABK5qwASufsAErobABK6NwASupMAErq7ABK66wASuxcAErszABK7TwASu2sAErubABK70wASu+cAErv7ABK8GwASvDcAErxnABK8lwASvNMAEr0LABK9MwASvX8AEr3DABK97wASvisAEr5vABK+rwASvtsAEr8bABK/QwASv48AEr/XABK/8wASwCMAEsCDABLApwASwMsAEsDvABLBOwASwYMAEsGjABLB4wASwkMAEsKnABLDCwASw3sAEsPrABLEVwASxMMAEsUbABLFXwASxacAEsXnABLGJwASxo8AEsbTABLHAwASx18AEsfPABLIZwASyIsAEsjPABLJGwASyasAEsoDABLKJwASykMAEspXABLKbwASypMAEsqzABLK+wASy58AEsvnABLMEwASzEcAEsyHABLMvwASzM8AEsz7ABLNLwASzW8AEs1/ABLN0wASzecAEs3/ABLOEwASzisAEs6LABLOuwASzwMAEs9LABLPWwASz38AEs+nABLPxwAS0IsAEtCTABLQwwAS0ZMAEtGvABLSJwAS0pcAEtLjABLS/wAS018AEtOjABLT6wAS1DsAEtSTABLUqwAS1P8AEtUjABLVmwAS1bsAEtYPABLWKwAS1l8AEtaTABLWswAS1vsAEtcvABLXawAS16sAEtgbABLYOwAS2G8AEtiPABLYuwAS2NcAEtjzABLZDwAS2TsAEtljABLZiwAS2dMAEtn/ABLaHwAS2j8AEtqvABLbDwAS21sAEtujABLbvwAS2/MAEtwfABLcYwAS3KMAEtznABLdFwAS3TsAEt3rABLeFwAS3i8AEt5jABLenwAS3rcAEt7fABLe8wAS3xMAEt8vABLfOwAS32sAEt+bABLfwwAS3/MAEuArABLggwAS4NcAEuFPABLhbwAS4aMAEuHPABLh8wAS4kMAEuK7ABLi7wAS4zMAEuNrABLjvwAS5AMAEuQvABLkSwAS5IsAEuULABLlgwAS5fcAEuY3ABLmewAS5tcAEucLABLnSwAS56cAEugLABLoRwAS6JcAEujHABLo+wAS6TMAEulvABLpowAS6dsAEuobABLq7wAS69sAEuwPABLsNwAS7I8AEuzbABLtOwAS7VcAEu2fABLtvwAS7ksAEu7XABLu6wAS7ysAEu+vABLv/wAS8JcAEvFvABLx9wAS8g8AEvLXABLzYwAS88sAEvRHABL0lwAS9PsAEvVXABL1iwAS9b8AEvXrABL2JwAS9mMAEvaTABL2xwAS9wMAEvdHABL3gwAS9+cAEvhDABL4nwAS+McAEvknABL5TwAS+Y8AEvmzABL54wAS+g8AEvo7ABL6hwAS+qsAEvrLABL66wAS+w8AEvsrABL7SwAS+3MAEvufABL7/wAS/CcAEvxPABL8hwAS/L8AEvz/ABL9XwAS/acAEv3vABL+MwAS/mcAEv6PABL+wwAS/u8AEv8XABL/NwAS/18AEv97ABL/lwAS/8MAEv//ABMAPwATAGMAEwCbABMA1wATAPsAEwEjABMBZwATAYMAEwG7ABMB2wATAeMAEwIzABMCiwATArcAEwLbABMDRwATA2MAEwOHABMDtwATA9sAEwQrABMEgwATBKcAEwTbABMFAwATBTMAEwVbABMFcwATBYcAEwYDABMGRwATBocAEwbjABMHQwATB4sAEwfLABMH8wATCD8AEwhfABMIlwATCQ8AEwmHABMKBwATCi8AEwpvABMKtwATCwMAEws/ABMLdwATC7cAEwvzABMMJwATDC8AEwyzABMM1wATDP8AEw0fABMNWwATDYcAEw2zABMOTwATDncAEw6/ABMO/wATD0MAEw+LABMPywATD/MAExAzABMQSwATEGcAExCPABMQ0wATEQMAExFjABMRmwATEdMAExIvABMSewATEtcAExMrABMTmwATFC8AExSLABMU1wATFRcAExVLABMVowATFdMAExYzABMWkwATFxsAExdvABMXywATGCcAExirABMY7wATGXMAExnbABMaHwATGnMAExsTABMbUwATG68AExv/ABMcawATHKcAExz3ABMdlwATHeMAEx4rABMeXwATHnsAEx6fABMe6wATHycAEx+LABMgBwATIDsAEyB/ABMgtwATIPMAEyE3ABMhYwATIdsAEyIzABMiSwATIq8AEyLfABMjIwATI1cAEyO3ABMj8wATJEcAEySvABMlFwATJe8AEyZjABMnPwATJ38AEyhLABMoowATKVcAEymTABMp0wATKhsAEypjABMqqwATKt8AEytDABMrawATK4cAEyvHABMsHwATLFsAEyy3ABMs3wATLRMAEy03ABMtewATLa8AEy3jABMuEwATLkMAEy5/ABMurwATLwMAEy9XABMvpwATMAMAEzBbABMwkwATMMcAEzEXABMxawATMeMAEzITABMyPwATMmMAEzLTABMzEwATM08AEzODABMzwwATNBcAEzRXABM0awATNJ8AEzUHABM1NwATNXcAEzWXABM12wATNh8AEzaPABM2xwATNusAEzcnABM3hwATN8sAEzgnABM4awATOJcAEzjrABM5LwATOXMAEznbABM6MwATOrMAEzr3ABM7HwATO1cAEzu3ABM8DwATPGcAEzynABM82wATPTsAEz2LABM9ywATPg8AEz5XABM+pwATPwsAEz+PABM/xwATQAsAE0CTABNA7wATQacAE0HnABNCKwATQkcAE0KTABNCmwATQrMAE0LrABNDYwATQ5MAE0PnABNEPwATRIMAE0TbABNFfwATRicAE0ZXABNGhwATRtcAE0c/ABNHowATSCcAE0h7ABNIwwATSRcAE0lzABNJqwATSeMAE0oXABNKYwATSrMAE0sPABNLcwATS7cAE0wHABNMLwATTHMAE0y/ABNNEwATTVcAE02fABNN5wATTgcAE04rABNOWwATTn8AE06fABNO0wATTwcAE08nABNPRwATT3MAE0+fABNP2wATUBcAE1BPABNQhwATUOsAE1EnABNRewATUaMAE1IrABNSXwATUrsAE1MTABNTRwATU38AE1O7ABNUAwATVDcAE1RvABNUhwATVJsAE1TTABNVEwATVTsAE1VTABNVdwATVY8AE1WbABNVuwATVc8AE1X7ABNWPwATVmMAE1aXABNWzwATVw8AE1dPABNXlwATV7sAE1f7ABNYQwATWFcAE1hvABNYowATWOcAE1k3ABNZgwATWZsAE1n3ABNaLwATWrsAE1tPABNbhwATW8MAE1wXABNcnwATXR8AE11HABNd1wATXjcAE15fABNeiwATXqsAE17LABNe6wATXxcAE19DABNfawATX5cAE1/XABNgAwATYDsAE2BnABNgiwATYLsAE2DvABNhIwATYWMAE2GbABNhvwATYe8AE2IzABNiZwATYo8AE2LPABNjDwATY1cAE2O3ABNkFwATZHcAE2S7ABNk+wATZWMAE2XDABNl3wATZjMAE2ZrABNmpwATZssAE2cDABNnQwATZ3cAE2erABNn5wATaCMAE2hXABNogwATaN8AE2krABNpSwATaZsAE2nrABNqCwATakMAE2p7ABNqtwATauMAE2sjABNrZwATa58AE2vTABNsIwATbHcAE2zDABNtDwATbVsAE22TABNtuwATbgsAE25vABNuywATbvcAE28nABNvbwATb7MAE2/nABNwRwATcHsAE3CvABNw4wATcSsAE3E/ABNxewATcbcAE3IPABNyJwATcnMAE3KjABNy4wATczMAE3NfABNzdwATc7MAE3P3ABN0NwATdJsAE3TfABN1DwATdScAE3VzABN1nwATdb8AE3YTABN2TwATdncAE3abABN25wATdx8AE3d/ABN3wwATeAcAE3hrABN4pwATeOMAE3k7ABN5ewATeasAE3nbABN6LwATeoMAE3qnABN63wATexsAE3s3ABN7WwATe4MAE3ufABN7zwATfCMAE3xnABN8pwATfNMAE30bABN9dwATfbcAE34PABN+TwATfo8AE37LABN+8wATfxcAE39XABN/dwATf6sAE3/3ABOANwATgHcAE4CPABOA0wATgOsAE4FXABOBjwATgacAE4HTABOB+wATgicAE4JbABOCcwATgoMAE4KnABOC5wATgv8AE4MnABODSwATg2MAE4N3ABODjwATg68AE4PfABOEAwAThDMAE4RrABOEtwAThNcAE4T/ABOFRwAThW8AE4WHABOFkwAThbcAE4YPABOGMwAThmMAE4a3ABOG4wAThv8AE4cvABOHgwATh5sAE4fLABOH7wATiBsAE4hfABOIrwATiNsAE4jzABOJCwATiTMAE4lHABOJjwATib8AE4njABOJ/wATikcAE4qTABOK5wATiz8AE4uPABOLvwATi/sAE4w/ABOMgwATjM8AE40LABONSwATjYsAE43HABOOBwATjjcAE457ABOOuwATjxMAE49HABOPkwATj88AE5AjABOQawATkMsAE5EXABORbwATkacAE5HTABOSLwATkn8AE5LnABOTUwATk78AE5Q/ABOUswATlQcAE5VPABOVmwATlcsAE5YrABOWiwATlssAE5cPABOXbwATl8cAE5gPABOYgwATmMsAE5kTABOZTwATmW8AE5mHABOZqwATmc8AE5nnABOaHwATmmcAE5qHABOatwATmtcAE5sLABObPwATm3sAE5uvABOb0wATm/8AE5wnABOcRwATnHcAE5yjABOcywATnPcAE50jABOdSwATnYMAE52nABOdxwATnecAE55PABOehwATnq8AE57zABOfKwATn2sAE5+vABOf7wAToCcAE6BbABOglwAToM8AE6EjABOhVwAToYMAE6G7ABOh0wATofsAE6JnABOiiwATor8AE6MLABOjEwATo0cAE6NjABOjlwATo7cAE6P3ABOkPwATpF8AE6SXABOkrwATpNMAE6T7ABOlLwATpVsAE6WLABOlpwATpc8AE6YbABOmUwATpmMAE6aLABOmnwATpt8AE6b3ABOnJwATp1cAE6d/ABOnwwATqA8AE6g7ABOoawATqJ8AE6jnABOpDwATqTsAE6lrABOphwATqbMAE6n3ABOqFwATqjcAE6pfABOqjwATqqsAE6rfABOrIwATq2MAE6uLABOrvwATq/cAE6wjABOsVwATrKsAE6zfABOtJwATrYsAE62nABOt8wATrisAE657ABOu+wATr0cAE6/DABOwEwATsDcAE7C3ABOxBwATsS8AE7GvABOx1wATsgsAE7JDABOyfwATsq8AE7LHABOy/wATs1cAE7O7ABO0CwATtF8AE7SPABO0swATtP8AE7VPABO1cwATtbsAE7XnABO2KwATtkMAE7ZnABO2qwATttMAE7b/ABO3PwATt2MAE7d7ABO3lwATt6cAE7e/ABO33wATt/MAE7gLABO4JwATuEcAE7hvABO4rwATuN8AE7kDABO5JwATuUcAE7lzABO5owATudMAE7oHABO6QwATul8AE7qDABO6ywATuwMAE7sLABO7PwATu4MAE7uTABO7rwATu9MAE7v3ABO8OwATvGMAE7x/ABO8swATvPMAE70jABO9SwATvXcAE72PABO9qwATvccAE733ABO+EwATviMAE74/ABO+UwATvmcAE753ABO+iwATvqcAE76/ABO/GwATvzMAE79XABO/ewATv4sAE7+zABO/1wATv/cAE8AXABPAVwATwGMAE8CjABPAxwATwOsAE8EXABPBZwATwZsAE8HHABPB6wATwg8AE8InABPCOwATwk8AE8JnABPCgwATwpsAE8KrABPC1wATwu8AE8MrABPDYwATw4sAE8OfABPDrwATxAsAE8QjABPENwATxIMAE8SjABPEzwATxPcAE8UXABPFJwATxVMAE8WzABPF1wATxh8AE8Y/ABPGcwATxocAE8avABPGywATxwsAE8dLABPHYwATx3sAE8eTABPHtwATx9MAE8hPABPIawATyJsAE8jjABPJHwATyZ8AE8oXABPKYwATyt8AE8sLABPLOwATy2sAE8vLABPL/wATzC8AE8xfABPMdwATzM8AE80HABPNNwATzXMAE83HABPN0wATzfcAE84vABPOZwATzp8AE87TABPO6wATzxMAE88zABPPXwATz9MAE8/3ABPQHwAT0FsAE9CXABPQpwAT0OsAE9ETABPRPwAT0XsAE9GjABPRywAT0e8AE9ITABPSawAT0rMAE9MHABPTMwAT018AE9OLABPT3wAT0/sAE9Q3ABPUawAT1KcAE9TzABPVPwAT1aMAE9XvABPWOwAT1qsAE9bnABPXJwAT108AE9dzABPXmwAT17MAE9fXABPX8wAT2BsAE9g7ABPYewAT2K8AE9jjABPZCwAT2S8AE9lvABPZkwAT2eMAE9oHABPaNwAT2l8AE9qjABPa9wAT208AE9u/ABPcEwAT3EcAE9xzABPcowAT3N8AE90jABPdZwAT3dsAE94TABPeawAT3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TsAFF1rABRdtwAUXgMAFF5bABRe7wAUXzsAFF+HABRftwAUX/sAFGAbABRgcwAUYJcAFGC/ABRhMwAUYXMAFGHXABRiNwAUYmMAFGKTABRi6wAUY2cAFGOPABRj3wAUY/sAFGQfABRkWwAUZIMAFGS3ABRk9wAUZRcAFGVzABRlqwAUZd8AFGYfABRmmwAUZuMAFGc7ABRnewAUZ+MAFGgnABRohwAUaL8AFGkTABRpdwAUae8AFGpjABRquwAUaxMAFGtnABRrvwAUbBcAFGxzABRsywAUbSMAFG17ABRt0wAUbi8AFG6DABRu1wAUbzMAFG+PABRv5wAUcE8AFHCvABRxVwAUcZsAFHHLABRx2wAUcfcAFHIbABRyQwAUcnMAFHKTABRyxwAUcusAFHL/ABRzMwAUc2sAFHP/ABR0awAUdKMAFHTfABR1OwAUdY8AFHW3ABR12wAUdgsAFHaDABR2xwAUdycAFHebABR3twAUd9cAFHgvABR4RwAUeGMAFHibABR4vwAUeOcAFHkHABR5KwAUeZcAFHnTABR6FwAUemsAFHrDABR66wAUexcAFHtXABR72wAUfD8AFHzTABR9MwAUfZsAFH3TABR+FwAUfmcAFH7DABR/DwAUf58AFH/7ABSAXwAUgPsAFIFjABSB0wAUgjMAFIJXABSCgwAUgsMAFILvABSDawAUg9sAFIQzABSElwAUhKMAFITfABSFGwAUhWMAFIVzABSFiwAUhbcAFIXfABSF+wAUhgcAFIYTABSGJwAUhpMAFIbTABSHOwAUh68AFIf7ABSINwAUiHsAFIirABSI4wAUiP8AFIkvABSJRwAUiZsAFInLABSKGwAUijcAFIpPABSKZwAUisMAFIsXABSLPwAUi2MAFIurABSL8wAUjCMAFIzDABSM3wAUjVcAFI2fABSNxwAUjr8AFI7/ABSPJwAUj0cAFI93ABSPowAUj98AFJAHABSQJwAUkGsAFJDDABSRNwAUkW8AFJGnABSRuwAUkecAFJInABSSYwAUkrsAFJLvABSTCwAUkz8AFJNvABSTvwAUlCMAFJRPABSUxwAUlNsAFJTvABSVBwAUlVcAFJVvABSVlwAUlb8AFJYHABSWZwAUlsMAFJcnABSXYwAUl58AFJfTABSYHwAUmEMAFJiXABSY9wAUmWMAFJnPABSaSwAUm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wcAFU9/ABVP5wAVUA8AFVBrABVQtwAVUNcAFVE3ABVRXwAVUa8AFVHzABVSQwAVUncAFVKjABVS4wAVUycAFVODABVTvwAVVAsAFVRfABVUtwAVVPMAFVVbABVVlwAVViMAFVY7ABVWfwAVVrsAFVbXABVXAwAVVzMAFVebABVX4wAVWAMAFVg3ABVYcwAVWLMAFVkPABVZOwAVWU8AFVmTABVZuwAVWfsAFVofABVaXwAVWqsAFVsDABVbVwAVW4MAFVv7ABVccwAVXPsAFV2XABVd0wAVXlsAFV7HABVfIwAVX1sAFV+7ABVf+wAVYGsAFWCjABVgvwAVYPMAFWEbABVhZwAVYicAFWMPABVjNwAVY4MAFWOrABVj9wAVZDsAFWSjABVkzwAVZUcAFWWLABVlrwAVZb8AFWXPABVmUwAVZqsAFWczABVncwAVZ8cAFWgbABVoTwAVaJMAFWj/ABVpZwAVaZcAFWnvABVqQwAVam8AFWqDABVqswAVaxMAFWtTABVrqwAVa9sAFWw7ABVsdwAVbLsAFW0nABVtOwAVbXcAFW3DABVuKwAVboMAFW7DABVvBwAVb4MAFW/PABVwLwAVcJcAFXDPABVw7wAVcUcAFXHbABVyFwAVcmcAFXKvABVzJwAVc5MAFXPPABVz9wAVdJ8AFXVHABV1ewAVdeMAFXY3ABV2dwAVdtMAFXcnABV3RwAVd5MAFXfLABV4GwAVeHMAFXiPABV4xwAVePcAFXkzABV5ewAVebsAFXnXABV6AwAVeksAFXqLABV62wAVexsAFXtrABV7uwAVfAMAFXw/ABV8bwAVfNMAFX0jABV9awAVfY8AFX27ABV+IwAVfnMAFX7HABV/KwAVf2MAFX+rABV/6wAVgA8AFYBTABWAdwAVgKsAFYDrABWBHwAVgVMAFYF/ABWBtwAVggcAFYJTABWCuwAVgxsAFYNzABWDzwAVhBsAFYSDABWE0wAVhRMAFYU/ABWFswAVhecAFYYTABWGPwAVhncAFYa/ABWHCwAVh1cAFYezABWH9wAViGsAFYiPABWIuwAViScAFYl3ABWJuwAVid8AFYovABWKdwAVissAFYsjABWLbwAVi7sAFYv/ABWMLwAVjIsAFYy/ABWM1wAVjR8AFY1nABWNowAVjd8AFY4rABWOawAVjwsAFY9zABWPrwAVj+sAFZA7ABWQkwAVkLsAFZEbABWRZwAVka8AFZIPABWSTwAVkpsAFZLvABWTGwAVkz8AFZObABWUBwAVlF8AFZTLABWVFwAVlTcAFZV/ABWV5wAVlhMAFZZnABWWtwAVls8AFZcPABWXZwAVl98AFZf/ABWYOwAVmFcAFZiHABWYtwAVmQcAFZlbABWZkwAVmcsAFZoHABWaJwAVmlMAFZpvABWamwAVmtMAFZsXABWbZwAVm88AFZwLABWcQwAVnHsAFZynABWdFwAVnZMAFZ3jABWeHwAVnkMAFZ5vABWemwAVnscAFZ7zABWfIwAVn2MAFZ+nABWgBwAVoIMAFaDDABWhHwAVoXcAFaHbABWiKwAVoqcAFaMfABWjkwAVo/8AFaQ3ABWkuwAVpN8AFaUXABWlRwAVpW8AFaYjABWmWwAVprcAFabzABWnQwAVp3cAFae3ABWoEwAVqF8AFai7ABWpBwAVqVMAFamPABWpzwAVqh8AFapDABWqdwAVqs8AFasbABWrSwAVq4cAFau3ABWr6wAVrEMAFaxnABWsiwAVrNcAFa0LABWtSwAVrXcAFa2jABWtxwAVresAFa4LABWuWwAVrncAFa67ABWvDwAVr18AFa+XABWwLwAVsE8AFbBvABWwtwAVsO8AFbETABWxkwAVsgMAFbJnABWyvwAVswcAFbN7ABWzzwAVs/8AFbRbABW0qwAVtS8AFbVvABW13wAVtjMAFbaDABW2xwAVtvsAFbczABW3pwAVt88AFbgPABW4OwAVuKMAFbjjABW5QwAVuVsAFbmvABW6MwAVukcAFbqTABW62wAVuwcAFbtDABW7nwAVvAcAFbwvABW8cwAVvL8AFb0fABW9YwAVveMAFb43ABW+hwAVvv8AFb9DABW/awAVv58AFb+7ABXAFwAVwEMAFcCPABXA7wAVwTMAFcGHABXBwwAVwdcAFcIHABXCWwAVwpcAFcLDABXC+wAVwzsAFcNvABXDwwAVw+8AFcRHABXEnwAVxOsAFcVLABXFcwAVxdMAFcYjABXGjwAVxtcAFccfABXHOwAVx6cAFcfnABXIJwAVyFMAFcjPABXJRwAVyZ8AFcnDABXJ7wAVyhcAFco7ABXKZwAVyocAFcqPABXK1wAVyysAFctbABXLjwAVzAsAFcxrABXNAwAVzRcAFc1XABXNpwAVzgsAFc5TABXOfwAVzvsAFc9bABXPnwAV0BMAFdA/ABXQhwAV0PMAFdGjABXR5wAV0k8AFdLTABXS/wAV01sAFdObABXT3wAV1C8AFdRXABXUrwAV1Q8AFdVfABXVwwAV1hMAFdaTABXXWwAV158AFdgLABXYQwAV2HsAFdjbABXZFwAV2WsAFdo3ABXaXwAV2q8AFdrXABXbawAV26sAFdvvABXcQwAV3I8AFdzjABXdJwAV3XcAFd3DABXeGwAV3msAFd63ABXfAwAV35cAFeA/ABXgnwAV4P8AFeEnABXhZwAV4bcAFeIbABXijwAV4wcAFeM7ABXjiwAV47MAFeP7ABXkXwAV5LcAFeTnABXlRwAV5ZMAFeXfABXmGwAV5j8AFeZPABXmnwAV5xsAFeeDABXnvwAV6AcAFehPABXojwAV6M8AFekbABXpawAV6bMAFeoDABXqtwAV6w8AFet3ABXr9wAV7GcAFezXABXtVwAV7ccAFe3rABXuEwAV7i8AFe5PABXujwAV7rsAFe7jABXvSwAV74MAFe/TABXwJwAV8GMAFfCrABXxNwAV8ZcAFfHLABXyLwAV8n8AFfLXABXzLwAV848AFfPDABX0GwAV9J8AFfUjABX1VwAV9ZsAFfXXABX2FwAV9lMAFfbHABX3BwAV95cAFff3ABX4TwAV+J8AFfjXABX5BwAV+VsAFfm3ABX53wAV+fsAFfovABX6YwAV+osAFfq/ABX69wAV+xsAFftbABX7iwAV+8MAFfwbABX8WwAV/IcAFfzHABX86wAV/SMAFf2PABX9xwAV/fsAFf5fABX+vwAV/ysAFf9XABX/gwAV/9sAFgBnABYA6wAWARsAFgFHABYBawAWAXcAFgGPABYB/wAWAhsAFgJLABYCUwAWAlsAFgKTABYC0wAWAvsAFgMrABYDiwAWA/sAFgRLABYEcwAWBNcAFgUDABYFKwAWBXcAFgX/ABYGIwAWBlcAFgafABYHJwAWB4MAFgfXABYICwAWCG8AFgifABYJLwAWCZ8AFgm/ABYJ9wAWCl8AFgq7ABYK2wAWCzsAFgufABYL9wAWDFcAFgyvABYNCwAWDUcAFg13ABYNrwAWDdsAFg4PABYOgwAWDscAFg8nABYPTwAWD38AFg+jABYPxwAWD/MAFhA3ABYQewAWEMcAFhDzABYRQwAWEXMAFhHXABYSHwAWErMAFhNXABYT2wAWFMsAFhVDABYVnwAWFh8AFhabABYW8wAWF28AFhfLABYYEwAWGGsAFhjjABYZMwAWGTsAFhljABYZjwAWGcsAFhnrABYaVwAWGtMAFhsvABYb9wAWHC8AFhxPABYcnwAWHNMAFh0DABYdWwAWHa8AFh3HABYeGwAWHjMAFh5fABYemwAWHusAFh8TABYfWwAWH2cAFh9zABYfmwAWH7sAFh/HABYf6wAWIEMAFiBvABYglwAWIOMAFiD3ABYhRwAWIVsAFiFvABYhiwAWIbMAFiHbABYiGwAWIl8AFiK3ABYi8wAWIw8AFiNzABYjjwAWI8sAFiQHABYkQwAWJJ8AFiTrABYlPwAWJYcAFiXLABYmKwAWJpMAFiarABYmxwAWJuMAFicXABYnSwAWJ2MAFieXABYnrwAWJ8cAFig3ABYodwAWKIsAFijDABYo/wAWKTMAFilvABYpswAWKdcAFin7ABYqIwAWKkMAFiprABYqgwAWKrMAFirPABYq/wAWK2MAFiuTABYrxwAWK+sAFiwnABYsPwAWLF8AFiyrABYs9wAWLQMAFi0jABYtQwAWLXMAFi2TABYtowAWLcsAFi3TABYuAwAWLjsAFi5zABYukwAWLrsAFi7rABYu9wAWLv8AFi8XABYvUwAWL3sAFi+zABYv6wAWMCcAFjBvABYwewAWMLMAFjDbABYw/wAWMTMAFjFDABYxUwAWMXMAFjGzABYx/wAWMjcAFjJjABYyawAWMnMAFjKnABYyxwAWMu8AFjL3ABYy/wAWMyMAFjNXABYzewAWM7MAFjPXABYz9wAWNDMAFjRjABY0jwAWNLsAFjTLABY1IwAWNUsAFjV7ABY1jwAWNacAFjWvABY1twAWNd8AFjYPABY2IwAWNj8AFjZ7ABY2twAWNtsAFjbvABY3EwAWN0MAFjdbABY3jwAWN6sAFjfnABY4AwAWOEcAFjiTABY4xwAWOPMAFjkvABY5kwAWObcAFjnjABY6HwAWOisAFjo3ABY6SwAWOl8AFjqLABY6twAWOt8AFjsPABY7IwAWO2sAFjuzABY72wAWO/sAFjyPABY8uwAWPPMAFj0bABY9LwAWPWMAFj2LABY9owAWPbsAFj5TABY+jwAWPr8AFj7jABY+8wAWPx8AFj9nABY/jwAWP8MAFj/TABY/9wAWQAcAFkBDABZAawAWQIMAFkCvABZA4wAWQP8AFkErABZBSwAWQXsAFkGPABZBywAWQesAFkIbABZCSwAWQmcAFkKTABZCtwAWQusAFkMPABZDLwAWQ1sAFkN3ABZDlwAWQ8sAFkPnABZEFwAWRC8AFkRTABZEYwAWRHMAFkSDABZEswAWRMMAFkTXABZE9wAWRRcAFkVDABZFUwAWRWcAFkWLABZFxwAWRd8AFkYjABZGLwAWRr8AFkbnABZHDwAWRzcAFkdTABZHcwAWR48AFke3ABZHzwAWSAcAFkgXABZIKwAWSE8AFkh7ABZIjwAWSMMAFkkTABZJWwAWSZcAFknfABZKHwAWSssAFksHABZLTwAWS5MAFkvfABZMbwAWTLcAFkzrABZNKwAWTWsAFk2jABZNwwAWTgsAFk6nABZPKwAWT1sAFk+LABZP7wAWUEsAFlB7ABZQswAWUNcAFlEXABZRQwAWUX8AFlHLABZSGwAWUl8AFlLPABZTGwAWU18AFlOHABZTxwAWVCcAFlQ/ABZUxwAWVQsAFlVzABZVywAWVkcAFlaHABZXCwAWV1MAFlejABZX4wAWWCsAFlhbABZYmwAWWMcAFlkLABZZSwAWWZMAFlmzABZZ7wAWWi8AFlp3ABZa3wAWW18AFluTABZb6wAWXFsAFly3ABZdGwAWXXMAFl3PABZeBwAWXksAFl6TABZezwAWXwsAFl8zABZfcwAWX58AFl/rABZgIwAWYGMAFmCnABZg0wAWYRcAFmEvABZhawAWYZMAFmHfABZiCwAWYkcAFmJ7ABZitwAWYu8AFmMrABZjbwAWY9MAFmRPABZkfwAWZNMAFmU/ABZllwAWZfcAFmZLABZmowAWZtcAFmcXABZnWwAWZ5MAFmfLABZn7wAWaCsAFmhTABZomwAWaNcAFmkXABZpSwAWaXMAFmmzABZp4wAWaicAFmpjABZqpwAWaucAFms/ABZrbwAWa9MAFmwvABZskwAWbPMAFm1rABZtmwAWbfMAFm5DABZuawAWbsMAFm7zABZvRwAWb7MAFm/3ABZwIwAWcF8AFnCTABZwxwAWcQcAFnFDABZxjwAWcaMAFnHPABZx/wAWciMAFnJjABZymwAWctMAFnMHABZzPwAWc3sAFnPPABZ0FwAWdC8AFnQ/ABZ0awAWdN8AFnT/ABZ1PwAWdXMAFnW3ABZ2UwAWdosAFnbXABZ2+wAWdz8AFneDABZ3uwAWeA8AFniPABZ40wAWeScAFnlvABZ6DwAWemMAFnqvABZ67wAWe08AFnuXABZ76wAWfCcAFnxXABZ8uwAWfP8AFn1HABZ9lwAWfdsAFn4rABZ+cwAWfqcAFn7PABZ+/wAWfzsAFn93ABZ/uwAWf/MAFoBrABaAkwAWgMsAFoFLABaBjwAWgd8AFoKDABaC6wAWgzMAFoOfABaD6wAWhEMAFoSLABaE0wAWhRsAFoWLABaFrwAWhhsAFoaPABaHHwAWh7MAFogzABaImwAWiPMAFolvABaJ8wAWijMAFopbABaKpwAWiu8AFotrABaL1wAWjB8AFoxjABaMmwAWjNcAFo0bABaNQwAWjWcAFo2XABaNxwAWjh8AFo53ABaOywAWjysAFo+LABaP4wAWkEsAFpCjABaQ9wAWkUsAFpFnABaRjwAWkgMAFpJbABaS1wAWk08AFpPDABaURwAWlG8AFpT7ABaVbwAWldMAFpYjABaWZwAWlqMAFpbTABaXIwAWl8sAFphbABaZdwAWmncAFpq/ABaa8wAWmyMAFptbABabkwAWm8cAFpwPABacUwAWnIsAFpyrABac6wAWnT8AFp2jABaeJwAWnosAFp7zABafQwAWn6MAFp/zABagRwAWoIsAFqDrABahTwAWodcAFqJLABai3wAWo1cAFqO3ABakJwAWpJMAFqUDABaliwAWphcAFqaXABam3wAWpysAFqdnABanwwAWqAcAFqg/ABaoawAWqMMAFqkDABapYwAWqacAFqnnABaqGwAWqmcAFqqnABaqywAWqxcAFqtLABardwAWq5sAFqvfABasNwAWrKsAFqzfABatHwAWrUMAFq1rABatlwAWresAFq5nABauqwAWrvMAFq87ABavWwAWr6MAFrATABawRwAWsKsAFrDzABaxZwAWsfMAFrIjABaySwAWspcAFrLvABazGwAWs2cAFrQXABa0pwAWtTsAFrZDABa2dwAWtrcAFrbbABa3PwAWt38AFre3ABa31wAWt/cAFrgPABa4MwAWuFsAFrifABa4zwAWuRMAFrk3ABa5TwAWuW8AFrnDABa6BwAWujsAFrqnABa66wAWuzMAFrtDABa7cwAWu5MAFrvjABa7/wAWvB8AFrxXABa8fwAWvL8AFr0DABa9LwAWvXMAFr27ABa99wAWvj8AFr6bABa+xwAWvt8AFr8HABa/kwAWv8cAFr/rABbAJwAWwGMAFsCLABbAtwAWwOcAFsEfABbBVwAWwXsAFsGzABbB6wAWwiMAFsJnABbCnwAWwusAFsMjABbDawAWw58AFsOnABbDzwAWw/sAFsQnABbEYwAWxJ8AFsTjABbFDwAWxWcAFsWTABbFswAWxf8AFsYvABbGawAWxosAFsa/ABbHGwAWx08AFsd/ABbH6wAWyEcAFshrABbIywAWySsAFsl/ABbJpwAWyb8AFsnvABbKAwAWyjsAFspnABbKiwAWyuMAFsszABbLPwAWy4sAFsvTABbL3wAWzA8AFsxPABbMlwAWzOcAFs0zABbNUwAWzXcAFs2XABbNtwAWzhcAFs5LABbOkwAWzucAFs87ABbPgwAWz9cAFtAvABbQZwAW0LsAFtELABbRPwAW0VcAFtGfABbRrwAW0eMAFtIjABbSawAW0pMAFtK7ABbS5wAW0xcAFtOLABbTywAW1E8AFtRvABbUuwAW1PcAFtVnABbVswAW1g8AFtZDABbWqwAW1ucAFtcPABbXRwAW16sAFtfXABbX/wAW2BcAFtgzABbYTwAW2IcAFtjnABbZKwAW2VcAFtlzABbZtwAW2eMAFtofABbaTwAW2p8AFtrzABbbMwAW218AFturABbb6wAW3DcAFtxPABbcawAW3JcAFtyrABbc8wAW3TsAFt3DABbeRwAW3tcAFt8rABbfUwAW35cAFt/nABbgTwAW4JMAFuCrABbg6wAW4SsAFuFfABbhlwAW4b8AFuHfABbiDwAW4lsAFuJnABbihwAW4qsAFuK3ABbiwwAW4u8AFuMrABbjbwAW46MAFuPnABbkLwAW5HsAFuSnABbk1wAW5RMAFuVfABblswAW5ecAFuYrABbmXwAW5p8AFua/ABbm7wAW5vcAFuc3ABbnXwAW538AFuejABbn0wAW6AMAFuhTABbonwAW6L8AFuj7ABbpbwAW6bcAFuobABbqewAW6q8AFusDABbrIwAW628AFuu/ABbsFwAW7EMAFuyDABbs3wAW7R8AFu1LABbtiwAW7cMAFu3XABbuLwAW7pMAFu7fABbvCwAW7zsAFu9zABbvqwAW78MAFvAHABbwHwAW8EMAFvB3ABbwgwAW8LMAFvDvABbxLwAW8X8AFvGXABbx8wAW8l8AFvJ7ABby1wAW80MAFvPTABb0QwAW9McAFvUvABb1XwAW9asAFvYXABb2MwAW9k8AFva3ABb27wAW92cAFvenABb4FwAW+FsAFviHABb46wAW+UMAFvoLABb6LwAW+l8AFvqbABb6xwAW+vcAFvszABb7cwAW+8MAFvwbABb8kwAW/RsAFv1TABb9zwAW/hcAFv5jABb+pwAW/usAFv8fABb/ZwAW/4cAFv+rABcALwAXALMAFwDnABcBRwAXAW8AFwGzABcB7wAXAisAFwJvABcChwAXAq8AFwMTABcDPwAXA5sAFwOzABcDywAXA+sAFwQLABcEOwAXBIMAFwS/ABcFFwAXBWcAFwWfABcFzwAXBf8AFwYrABcGnwAXBu8AFwdXABcHywAXCC8AFwh7ABcIwwAXCOcAFwkLABcJEwAXCRsAFwmHABcJ6wAXCfcAFwoDABcKJwAXCksAFwpfABcKcwAXCssAFwrjABcK+wAXCxMAFwsrABcLQwAXC1sAFwufABcL6wAXDCMAFwxHABcMbwAXDMsAFw0fABcNZwAXDbcAFw3bABcOAwAXDjcAFw5jABcOuwAXDvMAFw8jABcPVwAXD7MAFxALABcQRwAXEHcAFxCjABcRIwAXET8AFxFjABcRswAXEe8AFxIrABcSVwAXEocAFxK/ABcS9wAXEycAFxNLABcTawAXE5cAFxPzABcUIwAXFG8AFxSrABcU4wAXFQcAFxU7ABcVZwAXFcsAFxYHABcWVwAXFqcAFxbnABcXTwAXF4sAFxenABcX7wAXGFcAFxhnABcYnwAXGN8AFxj7ABcZNwAXGW8AFxnLABcaGwAXGl8AFxqfABca5wAXGw8AFxsnABcbRwAXG18AFxt3ABcbmwAXG/cAFxwbABccPwAXHJMAFxy3ABcc1wAXHP8AFx0jABcdawAXHY8AFx3XABcd6wAXHgcAFx4fABceLwAXHkcAFx5rABcekwAXHssAFx73ABcfFwAXHycAFx9nABcffwAXH6cAFx/TABcf6wAXIB8AFyBbABcghwAXIKcAFyDXABcg/wAXITMAFyFPABchewAXIaMAFyHPABch/wAXIhsAFyJXABcikwAXIvsAFyMfABcjNwAXI2MAFyOLABcjtwAXI+MAFyQPABckJwAXJFMAFyRrABckkwAXJLsAFyTjABclGwAXJTcAFyVbABcldwAXJY8AFyWjABcl4wAXJfMAFyYDABcmEwAXJiMAFyZXABcmiwAXJrsAFybXABcnLwAXJ2MAFye3ABcnxwAXJ9sAFyf3ABcoPwAXKG8AFyjXABcpFwAXKUcAFylXABcpdwAXKZcAFymvABcpxwAXKe8AFyobABcqLwAXKkcAFyp/ABcqswAXKv8AFysfABcrPwAXK1sAFyuDABcrmwAXK7sAFyvvABcsIwAXLEMAFyxvABcsowAXLMsAFy0HABctOwAXLVsAFy2TABct0wAXLisAFy5HABcufwAXLp8AFy67ABcu1wAXLwsAFy8zABcvTwAXL2sAFy+bABcvvwAXL+cAFzADABcwGwAXMEcAFzBzABcwmwAXMMcAFzDrABcxKwAXMUcAFzFjABcxgwAXMaMAFzHDABcx4wAXMgMAFzI3ABcyXwAXMosAFzK7ABcy8wAXMy8AFzNfABczdwAXM68AFzPbABc0HwAXNFMAFzR/ABc0rwAXNNcAFzT7ABc1JwAXNVcAFzWfABc10wAXNg8AFzY/ABc2VwAXNoMAFzaXABc2vwAXNtcAFzbrABc3HwAXNzsAFzdTABc3awAXN3sAFzeTABc3ywAXN/8AFzhfABc4jwAXOMMAFzjfABc5FwAXOTMAFzlnABc5hwAXOccAFzn3ABc6JwAXOmsAFzqPABc6qwAXOr8AFzsDABc7LwAXOz8AFztTABc7bwAXO6cAFzvXABc8AwAXPBsAFzw7ABc8WwAXPHsAFzyjABc8xwAXPOcAFzz/ABc9UwAXPWcAFz2fABc9twAXPc8AFz3jABc+BwAXPicAFz5fABc+bwAXPo8AFz6rABc+wwAXPvsAFz8vABc/ZwAXP5MAFz/HABc/1wAXP/cAF0ADABdAKwAXQE8AF0BzABdAmwAXQP8AF0EDABdBBwAXQQsAF0EPABdBEwAXQRcAF0EbABdBHwAXQSMAF0EnABdBmwAXQd8AF0ILABdCSwAXQl8AF0KLABdCowAXQtcAF0MLABdDLwAXQ3sAF0O3ABdEAwAXRD8AF0SHABdEvwAXRUMAF0W3ABdF+wAXRg8AF0ZHABdGjwAXRrsAF0b3ABdHRwAXR5cAF0fnABdIIwAXSGsAF0jTABdJHwAXSVcAF0mDABdJrwAXSgMAF0o/ABdKcwAXSr8AF0s7ABdLlwAXS+sAF0wXABdMQwAXTIsAF0zDABdNEwAXTV8AF02fABdN1wAXTh8AF05bABdOswAXTuMAF08jABdPWwAXT6cAF0/vABdQFwAXUGMAF1B/ABdQswAXUMsAF1D7ABdRJwAXUU8AF1F3ABdR4wAXUlcAF1KDABdS0wAXUxMAF1NXABdTiwAXU7cAF1QLABdUUwAXVLMAF1THABdVOwAXVWsAF1W3ABdV4wAXVhcAF1ZHABdWZwAXVqcAF1bXABdXAwAXV1sAF1fTABdYKwAXWHcAF1iHABdY8wAXWW8AF1nPABdZ5wAXWjcAF1pfABdatwAXWtcAF1sbABdbZwAXW6cAF1vnABdcLwAXXIMAF1zPABddNwAXXZ8AF14TABdegwAXXscAF18rABdfbwAXX8sAF2BXABdgowAXYO8AF2EfABdhdwAXYeMAF2IHABdiOwAXYmcAF2LDABdi/wAXYz8AF2N7ABdj5wAXZAMAF2Q7ABdkhwAXZKMAF2TvABdlQwAXZY8AF2WrABdl0wAXZisAF2aLABdm5wAXZxsAF2czABdnXwAXZ6cAF2ffABdoSwAXaKcAF2jzABdpQwAXaWMAF2nLABdp3wAXalsAF2p7ABdquwAXassAF2r/ABdrewAXa38AF2u7ABdsMwAXbHcAF2yXABdtFwAXbXMAF22jABdt3wAXbgsAF25XABdugwAXbsMAF28DABdvDwAXbx8AF283ABdvWwAXb2sAF297ABdviwAXb58AF2+vABdvvwAXb88AF2/jABdv7wAXb/sAF3ALABdwGwAXcCcAF3BDABdw0wAXcOMAF3E3ABdxawAXcasAF3HzABdyDwAXcicAF3JLABdyawAXcpMAF3KbABdyuwAXctcAF3PPABdz6wAXdB8AF3Q/ABd0WwAXdJ8AF3TLABd1JwAXdTsAF3VvABd1lwAXdbMAF3XfABd2AwAXduMAF3czABd3/wAXeLcAF3jXABd5AwAXeScAF3k3ABd5VwAXeXcAF3m7ABd6DwAXejsAF3p3ABd6nwAXessAF3r/ABd7JwAXe1sAF3uLABd7swAXe8MAF3vTABd8EwAXfCcAF3xbABd8fwAXfL8AF3zvABd9SwAXfZMAF33LABd+AwAXfj8AF35LABd+VwAXfpsAF37DABd/GwAXf18AF39rABd/swAXf98AF3/7ABeARwAXgKcAF4DfABeBNwAXgXsAF4GDABeB5wAXgjMAF4J/ABeC2wAXgzcAF4OLABeD4wAXhDsAF4STABeE6wAXhUMAF4WbABeF+wAXhk8AF4bbABeHbwAXh/MAF4hjABeI6wAXiVsAF4m7ABeKAwAXilcAF4p/ABeK6wAXiycAF4vPABeMPwAXjNsAF40/ABeN2wAXjj8AF477ABePfwAXkDsAF5C/ABeRbwAXkecAF5JDABeSbwAXkwMAF5M/ABeTwwAXlDsAF5S7ABeVQwAXlcMAF5YXABeWcwAXlsMAF5cTABeXbwAXl8cAF5g/ABeYYwAXmK8AF5jjABeZawAXmXcAF5mrABeZ+wAXmicAF5pTABeadwAXmn8AF5qHABeajwAXmpcAF5qfABeapwAXmq8AF5q3ABeavwAXmscAF5rPABea1wAXmt8AF5rnABea7wAXmvcAF5r/ABebBwAXmw8AF5sXABebHwAXmysAF5s3ABebQwAXm08AF5tbABebZwAXm3MAF5t/ABebiwAXm5cAF5ujABebrwAXm7sAF5vHABeb0wAXm98AF5vrABeb9wAXnAMAF5wPABecGwAXnCcAF5wzABecPwAXnEsAF5xXABecYwAXnG8AF5x7ABechwAXnJMAF5yfABecrwAXnL8AF5zPABec3wAXnO8AF5z/ABedDwAXnR8AF50vABedPwAXnU8AF51fABedbwAXnX8AF52PABednwAXna8AF52/ABedzwAXnd8AF53vABed/wAXng8AF54fABeeLwAXnj8AF55PABeeXwAXnm8AF55/ABeejwAXnp8AF56vABeevwAXns8AF57fABee7wAXnv8AF58PABefHwAXny8AF58/ABefTwAXn18AF59vABeffwAXn48AF5+fABefrwAXn78AF6ADABegKwAXoG8AF6CTABegrwAXoS8AF6GHABehkwAXobMAF6HTABeh6wAXoh8AF6JDABeimwAXorcAF6LXABejJwAXo98AF6UbABelKwAXpTsAF6VjABelkwAXpd8AF6YPABemEwAXpj8AF6ZvABemiwAXprMAF6cHABenEwAXpzsAF6eDABenowAXp9sAF6gHABeoJwAXqL8AF6nHABeqHwAXqnMAF6v/ABesKwAXrHcAF6zTABetNwAXrVsAF62nABetywAXrgMAF65fABeucwAXrn8AF66bABeuwwAXrtcAF68PABevNwAXr3sAF6+zABev3wAXr/sAF7AzABewuwAXsUsAF7GLABextwAXsc8AF7IHABeyGwAXsk8AF7JXABeyowAXssMAF7MDABezKwAXs1cAF7PDABez7wAXtCMAF7RzABe0vwAXtR8AF7VjABe1rwAXthsAF7abABe2wwAXttcAF7dbABe3lwAXuAcAF7hfABe4twAXuQsAF7lrABe5vwAXue8AF7oPABe6TwAXuocAF7q7ABe67wAXuxcAF7s/ABe7YwAXu5MAF7urABe71wAXu/sAF7wjABe8hwAXvK8AF7y3ABe9JwAXvV8AF727ABe94wAXvgsAF74zABe+XwAXvn8AF76bABe+7wAXvzsAF79PABe/WwAXv3sAF7+/ABe/0wAXwAsAF8AfABfAKwAXwEcAF8BzABfAwwAXwPMAF8EDABfBOwAXwXcAF8GrABfB7wAXwi8AF8I/ABfCewAXwq8AF8LjABfDBwAXwzcAF8NvABfDlwAXw8cAF8QDABfEJwAXxFMAF8SPABfEtwAXxO8AF8UPABfFMwAXxXcAF8W7ABfF/wAXxicAF8ZLABfGgwAXxqcAF8bjABfHCwAXxy8AF8d3ABfHiwAXx6MAF8fPABfH4wAXx/8AF8gbABfINwAXyE8AF8hbABfIhwAXyPcAF8kzABfJRwAXyZcAF8nLABfKAwAXyicAF8pLABfKkwAXywcAF8svABfLrwAXy+cAF8yXABfMxwAXzSsAF81DABfNYwAXzacAF83TABfOQwAXzmcAF87PABfPTwAXz5MAF9AjABfQgwAX0Q8AF9GTABfRswAX0dsAF9JfABfShwAX0psAF9MHABfTIwAX09MAF9QPABfUZwAX1I8AF9TLABfU7wAX1U8AF9WXABfV3wAX1fsAF9YnABfWRwAX1p8AF9b7ABfXRwAX14sAF9fHABfYCwAX2IMAF9jLABfZHwAX2XMAF9nXABfZ8wAX2oMAF9q7ABfbJwAX21sAF9urABfb8wAX3E8AF9y3ABfdOwAX3YMAF94HABfeVwAX3scAF983ABffpwAX4BcAF+B/ABfgywAX4Q8AF+FvABfh3wAX4ksAF+LHABfjTwAX478AF+QLABfkOwAX5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PsAGFVPABhVdwAYVa8AGFXLABhV+wAYVjMAGFZ3ABhWowAYVusAGFcnABhXSwAYV3cAGFevABhX4wAYWCMAGFh3ABhY1wAYWU8AGFm3ABhZ/wAYWlMAGFqrABha9wAYW0sAGFufABhb3wAYW/8AGFxPABhcmwAYXQcAGF0jABhdUwAYXX8AGF2rABhdzwAYXgcAGF4nABheVwAYXpsAGF67ABhe+wAYX0cAGF9vABhfmwAYX8cAGF/jABhgCwAYYEcAGGB3ABhgrwAYYOcAGGEjABhhawAYYYsAGGHLABhiDwAYYjsAGGJTABhidwAYYu8AGGN3ABhjpwAYY/cAGGRTABhkjwAYZMcAGGUHABhlQwAYZV8AGGWPABhlxwAYZfMAGGYjABhmfwAYZtsAGGb3ABhnPwAYZ4MAGGfLABhoPwAYaK8AGGlXABhpnwAYab8AGGnHABhp5wAYaf8AGGoXABhqNwAYalcAGGpzABhqlwAYarsAGGrrABhrQwAYa48AGGurABhrxwAYa+MAGGv7ABhsLwAYbGcAGGyrABhs4wAYbSsAGG17ABhtswAYbfcAGG4HABhuKwAYbksAGG5nABhulwAYbrcAGG7jABhvIwAYb1sAGG+nABhv0wAYb/cAGHAvABhwTwAYcH8AGHDDABhxNwAYcW8AGHGbABhx2wAYclsAGHKLABhy5wAYczsAGHOLABhz7wAYdDMAGHRfABh0nwAYdM8AGHUDABh1RwAYdWcAGHWTABh14wAYdhMAGHZLABh2owAYdtMAGHcHABh3NwAYd18AGHeTABh3rwAYd+sAGHgbABh4WwAYeH8AGHibABh4vwAYeOsAGHkjABh5UwAYeWcAGHmDABh5rwAYeecAGHofABh6TwAYenMAGHqTABh6swAYessAGHrjABh7BwAYeycAGHtTABh7cwAYe8sAGHvXABh78wAYfAcAGHw7ABh8TwAYfHcAGHzLABh8/wAYfSsAGH1fABh9jwAYfbcAGH3rABh+GwAYfmsAGH67ABh/HwAYf0sAGH+LABh/uwAYgAMAGIA/ABiAdwAYgNMAGIDjABiBLwAYgW8AGIF3ABiBzwAYgeMAGIIHABiCFwAYglMAGIKHABiCywAYgw8AGINfABiDpwAYg98AGIQvABiEXwAYhH8AGISvABiE7wAYhR8AGIVHABiFcwAYhisAGIZ3ABiGtwAYhwMAGIdHABiHcwAYh6sAGIfvABiIIwAYiG8AGIiTABiI6wAYiTMAGIlfABiJhwAYibcAGInrABiKAwAYiisAGIprABiKowAYitMAGIsDABiLIwAYi2MAGIufABiLzwAYjBcAGIxXABiMswAYjOcAGI0PABiNdwAYjecAGI4LABiORwAYjoMAGI63ABiPIwAYj1cAGI+TABiP6wAYkFMAGJCnABiQwwAYkQMAGJE7ABiRYwAYkY8AGJG/ABiR1wAYke8AGJIrABiSWwAYkqcAGJLnABiTKwAYk2sAGJOvABiT8wAYlEcAGJSnABiUxwAYlQ8AGJVTABiVjwAYlcsAGJYHABiWOwAYloMAGJazABiWzwAYlycAGJdbABiXgwAYl6cAGJe/ABiYPwAYmGMAGJiHABiYywAYmRcAGJlPABiZywAYmi8AGJp7ABiaowAYmsMAGJsTABibbwAYm8sAGJxDABicgwAYnMMAGJz3ABidJwAYnUMAGJ1fABidhwAYna8AGJ3nABieGwAYnk8AGJ5rABieiwAYnqsAGJ7nABifJwAYn1MAGJ+DABifvwAYn+sAGKArABighwAYoNMAGKETABihgwAYog8AGKJ/ABii+wAYoyMAGKN7ABij5wAYpAcAGKQ3ABikXwAYpL8AGKUnABilSwAYpdcAGKZXABimywAYpvcAGKeLABioCwAYqFMAGKiXABiowwAYqRMAGKlrABipuwAYqjcAGKp/ABiqwwAYqvcAGKsjABirUwAYq38AGKuvABir2wAYq/sAGKwjABisgwAYrM8AGK0fABitcwAYrcsAGK4DABiuPwAYrn8AGK6bABiuvwAYrt8AGK8TABivSwAYr4cAGK+/ABiv1wAYr/MAGLATABiwTwAYsI8AGLDTABiw/wAYsUMAGLFrABixrwAYsdsAGLH/ABiyKwAYsmMAGLKjABiywwAYsu8AGLMfABizWwAYs38AGLOXABiz3wAYtB8AGLRHABi0cwAYtM8AGLUjABi1UwAYtXsAGLWjABi1wwAYtfMAGLYfABi2QwAYtocAGLbHABi2/wAYt0sAGLdzABi35wAYuFsAGLjDABi5MwAYuaMAGLoHABi6gwAYuvcAGLszABi7XwAYu9cAGLxPABi8uwAYvNMAGL0DABi9NwAYvWMAGL2DABi9swAYvecAGL4zABi+jwAYvvcAGL8nABi/ewAYv6sAGL/rABjAfwAYwRcAGMFnABjBtwAYwgMAGMJfABjCtwAYwxcAGMNHABjDewAYw8MAGMPrABjENwAYxIsAGMSvABjFFwAYxVMAGMWfABjF7wAYxjMAGMabABjG5wAYxwsAGMdbABjHnwAYx8MAGMgTABjIXwAYyK8AGMkDABjJLwAYyU8AGMmHABjJmwAYyesAGMofABjKYwAYyrMAGMsPABjLVwAYy78AGMwDABjMVwAYzIcAGMzHABjNCwAYzVMAGM13ABjNswAYzfMAGM4vABjOVwAYzp8AGM77ABjPPwAYz48AGM/rABjQTwAY0LcAGNE/ABjRZwAY0asAGNH7ABjSQwAY0p8AGNMPABjTQwAY038AGNPbABjUSwAY1HMAGNSnABjVBwAY1U8AGNWPABjWAwAY1lsAGNafABjW0wAY1wcAGNcrABjXWwAY15MAGNfjABjYRwAY2IsAGNj7ABjZUwAY2Y8AGNmrABjZwwAY2iMAGNpnABjaowAY2t8AGNs3ABjbjwAY2+cAGNxTABjclwAY3N8AGN0nABjdcwAY3cMAGN4XABjeXwAY3rcAGN8TABjfNwAY328AGN+3ABjf5wAY4DsAGOCfABjg6wAY4WcAGOGTABjh9wAY4jcAGOKDABjixwAY4xMAGONfABjjowAY4+cAGOQnABjkZwAY5McAGOT7ABjlJwAY5WsAGOWfABjl1wAY5gMAGOZbABjmywAY5yMAGOdLABjnmwAY58sAGOgXABjoawAY6L8AGOj3ABjpHwAY6WMAGOmPABjp0wAY6hcAGOprABjqpwAY6wsAGOtHABjrgwAY678AGOwDABjsLwAY7I8AGOzDABjs6wAY7Q8AGO03ABjtVwAY7YMAGO2XABjtrwAY7dsAGO3/ABjuJwAY7lMAGO6PABjuxwAY7vsAGO8jABjvRwAY748AGO/HABjv/wAY8DsAGPCLABjwuwAY8O8AGPEjABjxWwAY8YcAGPG7ABjx6wAY8kcAGPJjABjymwAY8sMAGPLrABjzIwAY828AGPOvABjzzwAY9D8AGPSfABj0zwAY9SsAGPV3ABj1nwAY9fcAGPY/ABj2kwAY9qMAGPa7ABj2ywAY9uMAGPc3ABj3YwAY96sAGPfnABj4NwAY+F8AGPirABj4zwAY+O8AGPkrABj5awAY+XcAGPm/ABj6JwAY+k8AGPp7ABj6uwAY+uMAGPr7ABj7XwAY+4sAGPvDABj8IwAY/FsAGPyDABj8pwAY/MsAGPz3ABj9HwAY/ZMAGP4HABj+XwAY/vsAGP+jABj/4wAZABcAGQCLABkA9wAZAY8AGQHLABkCAwAZAmcAGQKPABkC0wAZAvsAGQMjABkDUwAZA48AGQPPABkD7wAZBIcAGQTPABkE/wAZBTMAGQWfABkFxwAZBf8AGQZTABkGpwAZBssAGQcrABkHkwAZB9sAGQhbABkIiwAZCOMAGQkXABkJVwAZCXsAGQm3ABkKAwAZCjMAGQqTABkLCwAZC1MAGQtzABkLjwAZC7cAGQv/ABkMFwAZDC8AGQxTABkMdwAZDJcAGQy3ABkM7wAZDSsAGQ1PABkNmwAZDeMAGQ4TABkOYwAZDpsAGQ73ABkPPwAZD28AGQ/HABkQEwAZEE8AGRB/ABkQswAZEPcAGREnABkRcwAZEc8AGRIbABkSawAZEqMAGRLfABkTNwAZE3MAGROjABkT2wAZFBsAGRRbABkUhwAZFKsAGRTjABkVGwAZFYMAGRYHABkWpwAZFssAGRcTABkXQwAZF48AGRgbABkYSwAZGJMAGRjTABkZHwAZGXMAGRnTABkaFwAZGl8AGRq3ABkbHwAZG3cAGRvTABkcIwAZHIMAGRyfABkc2wAZHQsAGR0/ABkdfwAZHdcAGR37ABkePwAZHoMAGR7DABkfHwAZH4MAGR/3ABkgCwAZIDMAGSCPABkg8wAZIWcAGSGjABkh9wAZIk8AGSKvABkjHwAZI1sAGSPvABkkMwAZJI8AGSULABklQwAZJXcAGSXLABkmGwAZJmsAGSbDABkm2wAZJzMAGSeXABkoNwAZKJsAGSjjABkpJwAZKVMAGSmTABkp1wAZKgsAGSo/ABkqkwAZKqsAGSr7ABkrEwAZK2sAGSufABksBwAZLC8AGSyHABkszwAZLP8AGS07ABktiwAZLhsAGS7fABkvJwAZL38AGS+/ABkv/wAZMEcAGTB3ABkw/wAZMUMAGTHbABkyAwAZMisAGTJnABkykwAZMssAGTMXABkzXwAZM6sAGTPLABkz7wAZNBMAGTRDABk0jwAZNLsAGTTvABk1JwAZNW8AGTWvABk15wAZNicAGTZfABk2iwAZNtMAGTcLABk3QwAZN1sAGTePABk3wwAZN+8AGTgzABk4dwAZOLMAGTjPABk45wAZOScAGTlTABk5ewAZOesAGTofABk6XwAZOnsAGTsHABk7OwAZO18AGTtzABk7fwAZO5cAGTvDABk8EwAZPGcAGTyfABk82wAZPUsAGT3PABk93wAZPhMAGT43ABk+UwAZPqsAGT7DABk/PwAZP2cAGT+rABlAIwAZQJMAGUDTABlBDwAZQTsAGUFzABlB9wAZQiMAGUJbABlCowAZQ1MAGUOHABlDqwAZRAcAGURHABlEgwAZRPMAGUVDABlFawAZRZMAGUXrABlGTwAZRpMAGUbjABlHPwAZR58AGUffABlIDwAZSD8AGUhzABlIswAZSOMAGUlbABlJkwAZSecAGUpTABlK4wAZS2sAGUuLABlLuwAZS+cAGUwXABlMMwAZTF8AGUyHABlMswAZTN8AGU1rABlNzwAZThcAGU5HABlOYwAZTmsAGU8PABlPVwAZT4cAGU+zABlQCwAZUFsAGVC7ABlRBwAZURcAGVE7ABlRdwAZUccAGVIHABlSSwAZUpsAGVLLABlTEwAZU3MAGVPTABlT5wAZU/sAGVQ7ABlUVwAZVGMAGVTrABlU8wAZVUMAGVV/ABlVtwAZVfcAGVYXABlWRwAZVo8AGVbjABlXMwAZV6MAGVgDABlZBwAZWVsAGVl3ABlZjwAZWdMAGVofABlaZwAZWocAGVqfABlaywAZWvsAGVv/ABlcUwAZXJMAGVzTABldGwAZXWMAGV2XABldxwAZXgMAGV4zABlebwAZXqcAGV7rABlfIwAZX5cAGV/rABlgSwAZYKMAGWDvABlhTwAZYaMAGWILABliOwAZYnsAGWLjABljCwAZYzsAGWOnABljvwAZY/sAGWRHABlkiwAZZOcAGWUvABllfwAZZacAGWX3ABlmMwAZZnMAGWa7ABlm9wAZZxsAGWcrABlnSwAZZ28AGWePABlnpwAZZ/cAGWgnABloYwAZaJcAGWi/ABlo+wAZaSsAGWlvABlpiwAZab8AGWnbABlp7wAZahcAGWo7ABlqewAZaq8AGWrTABlrCwAZayMAGWtPABlrcwAZa7MAGWvvABlsFwAZbFMAGWyTABlsqwAZbMsAGW0HABltNwAZbWMAGW2LABlt0wAZbfsAGW4bABluRwAZbncAGW6fABluvwAZbvcAGW9DABlvhwAZb98AGXBPABlwmwAZcPsAGXFLABlxpwAZcg8AGXIvABlycwAZcr8AGXLjABly9wAZczcAGXOLABlz0wAZdMMAGXUDABl1UwAZdZcAGXX7ABl2XwAZdn8AGXanABl24wAZdysAGXdvABl4JwAZeHMAGXiLABl4qwAZeNcAGXlbABl50wAZej8AGXqDABl6ywAZexMAGXtbABl7uwAZfC8AGXyTABl8/wAZfVsAGX2vABl99wAZfjsAGX53ABl+owAZfr8AGX8bABl/PwAZf28AGX/HABmAHwAZgGsAGYC3ABmA9wAZgTcAGYF3ABmBkwAZgcsAGYIDABmCHwAZgjsAGYKHABmCtwAZgvcAGYM3ABmDewAZg88AGYQvABmEkwAZhO8AGYUjABmFVwAZhd8AGYYbABmGNwAZhk8AGYZ7ABmGpwAZhrMAGYbXABmHFwAZh0MAGYd3ABmHzwAZh/cAGYgXABmIPwAZiE8AGYhrABmIgwAZiJMAGYi3ABmI/wAZiScAGYmDABmKFwAZiosAGYrbABmLGwAZi18AGYuPABmL+wAZjF8AGYynABmMywAZjT8AGY3rABmOhwAZjucAGY8vABmPSwAZj4MAGY+/ABmP9wAZkDMAGZBfABmQjwAZkL8AGZDzABmRHwAZkU8AGZHTABmSWwAZkscAGZM3ABmTmwAZlAMAGZRPABmUnwAZlM8AGZUDABmVXwAZlb8AGZYDABmWSwAZlpcAGZbnABmXJwAZl2sAGZerABmX7wAZmB8AGZhTABmYrwAZmP8AGZkfABmZjwAZmcsAGZozABmaswAZmvcAGZsjABmbQwAZm2cAGZvLABmcFwAZnFsAGZyHABmcwwAZnOcAGZ1HABmdjwAZnfsAGZ5DABmeewAZnsMAGZ7vABmfGwAZn38AGZ/TABmgUwAZoIsAGaC3ABmg1wAZoQ8AGaFLABmhlwAZodMAGaILABmiXwAZop8AGaL7ABmjcwAZo4sAGaOrABmjxwAZo+cAGaQbABmkMwAZpF8AGaTHABmlGwAZpWcAGaWDABmlwwAZpgMAGaYzABmmbwAZps8AGadTABmnrwAZp9MAGag7ABmoewAZqMcAGak7ABmpawAZqZcAGam/ABmp+wAZqlMAGarTABmrHwAZq28AGauDABmr5wAZrEsAGayfABms/wAZrYcAGa2vABmt+wAZrl8AGa6rABmu3wAZr7sAGa/7ABmwSwAZsH8AGbDPABmxIwAZsWcAGbGTABmx0wAZsiMAGbJTABmyjwAZsqsAGbNDABmz6wAZtFsAGbS3ABm0+wAZtUcAGbWvABm18wAZtjsAGbZnABm2xwAZtyMAGbeDABm3zwAZuAsAGbgrABm4iwAZuLcAGbk/ABm5TwAZuVsAGblnABm50wAZufMAGbovABm6YwAZupsAGbrzABm7LwAZu18AGbtnABm72wAZu+MAGbv7ABm8TwAZvGcAGbyHABm8qwAZvMsAGbz3ABm9JwAZvVsAGb2HABm9vwAZvf8AGb4XABm+WwAZvncAGb6vABm/EwAZv1MAGb+nABnACwAZwDcAGcCrABnA4wAZwRsAGcFfABnBzwAZwiMAGcJDABnCZwAZwrcAGcL7ABnDewAZw78AGcPjABnEGwAZxD8AGcR3ABnEowAZxNMAGcT7ABnFFwAZxTsAGcWXABnFwwAZxfcAGcYjABnGTwAZxrMAGcbzABnHYwAZx5sAGcfLABnIGwAZyK8AGckbABnJTwAZyZMAGcnLABnKBwAZyksAGcqjABnKxwAZy08AGcvnABnMJwAZzEcAGcx3ABnMkwAZzKsAGcznABnNEwAZzY8AGc2zABnN4wAZzjMAGc5XABnOlwAZzwcAGc8/ABnPcwAZz58AGc/LABnP5wAZ0AcAGdAvABnQZwAZ0J8AGdDHABnQ7wAZ0RsAGdFLABnRfwAZ0ZcAGdGvABnR0wAZ0hMAGdJbABnSdwAZ0qsAGdLjABnTKwAZ01sAGdOLABnTywAZ0+sAGdQ3ABnUlwAZ1OsAGdUbABnVYwAZ1dsAGdZLABnWkwAZ1v8AGdebABnYLwAZ2IMAGdibABnYvwAZ2Q8AGdkvABnZTwAZ2XcAGdmzABnZ9wAZ2mcAGdq7ABnbBwAZ2zcAGduvABncCwAZ3F8AGdyDABncswAZ3PcAGd0XABndOwAZ3VMAGd1rABndhwAZ3acAGd3vABneCwAZ3h8AGd5HABneVwAZ3r8AGd7TABnfAwAZ3ysAGd+vABngJwAZ4FMAGeCbABng8wAZ4SsAGeFjABnhpwAZ4e8AGeIXABniVwAZ4pcAGeK/ABnjDwAZ46MAGeP3ABnkRwAZ5IMAGeTPABnlEwAZ5Z8AGeXvABnmSwAZ5psAGebrABnnSwAZ53sAGefPABnoNwAZ6JsAGejTABnplwAZ6lMAGerbABnrWwAZ648AGeu3ABnr6wAZ7BsAGew/ABnsXwAZ7I8AGezXABntAwAZ7TsAGe1XABntswAZ7fcAGe4/ABnuZwAZ7psAGe7TABnvLwAZ75sAGe/fABnv/wAZ8EcAGfB7ABnwowAZ8M8AGfD3ABnxIwAZ8WsAGfHDABnyCwAZ8lcAGfKjABny6wAZ8xsAGfNvABnztwAZ8+MAGfQzABn0gwAZ9L8AGfT/ABn1JwAZ9VcAGfWfABn1xwAZ9iMAGfZLABn2jwAZ9ssAGfcjABn3awAZ97MAGffzABn4EwAZ+E8AGfiDABn4rwAZ+P8AGflTABn5gwAZ+c8AGfn/ABn6RwAZ+pMAGfrTABn7IwAZ+1MAGfuLABn7wwAZ/A8AGfxjABn8kwAZ/McAGfzvABn9MwAZ/VcAGf2HABn9uwAZ/hMAGf57ABn+qwAZ/x8AGf9HABoAMwAaAQsAGgE7ABoBXwAaAYMAGgGzABoB2wAaAh8AGgJDABoDLwAaBAMAGgTDABoFCwAaBVMAGgWXABoFwwAaBhMAGgZXABoGfwAaBssAGgcbABoHZwAaB78AGgfrABoIFwAaCD8AGghzABoIpwAaCN8AGgkDABoJRwAaCWsAGgnDABoKlwAaCtcAGgsPABoLYwAaC6cAGgvjABoMGwAaDEMAGgyPABoM3wAaDQsAGg1TABoNmwAaDdcAGg4jABoOVwAaDp8AGg77ABoPJwAaD7sAGhBHABoQowAaEMMAGhD3ABoRUwAaEY8AGhHbABoSDwAaEl8AGhLDABoTCwAaE1MAGhOjABoT0wAaFGMAGhUTABoVtwAaFgcAGhY7ABoWowAaFsMAGhdDABoXjwAaF9cAGhgjABoYXwAaGNMAGhj7ABoZIwAaGVcAGhnDABoaKwAaGl8AGhqfABoa7wAaG28AGhuzABocRwAaHIsAGhzLABodNwAaHYcAGh2rABod4wAaHgcAGh6bABofMwAaH+cAGiAbABogRwAaIHsAGiCzABog4wAaIRsAGiFXABohrwAaIe8AGiIvABoiowAaIs8AGiL7ABojWwAaI6cAGiQXABokgwAaJM8AGiUzABollwAaJdsAGiYvABomlwAaJwMAGidfABonxwAaKAMAGiiTABoo3wAaKR8AGilnABop7wAaKlMAGiqzABoq2wAaKzcAGiuTABor0wAaLC8AGiyXABos5wAaLTMAGi2/ABot/wAaLi8AGi53ABou5wAaLvsAGi9fABov1wAaMB8AGjBjABowmwAaMK8AGjD3ABoxPwAaMXcAGjGzABoyCwAaMk8AGjKnABoy1wAaMxMAGjN7ABozpwAaM88AGjPvABo0AwAaNE8AGjTrABo1PwAaNWMAGjWrABo14wAaNj8AGjarABo23wAaNy8AGjdHABo3owAaN/sAGjhPABo4jwAaOL8AGjjvABo5JwAaOWsAGjnLABo5+wAaOiMAGjpPABo6jwAaOtcAGjsrABo7ZwAaO5sAGju/ABo76wAaPB8AGjxzABo8uwAaPNcAGj0DABo9ewAaPa8AGj4DABo+MwAaPmMAGj6zABo+6wAaPxsAGj9HABo/twAaP+sAGkAnABpAVwAaQJ8AGkDfABpBTwAaQXsAGkHfABpCBwAaQjcAGkJ7ABpCywAaQv8AGkMzABpDdwAaQ5sAGkPLABpD6wAaRBsAGkRjABpErwAaRPMAGkWTABpFtwAaRdsAGkY3ABpGiwAaRr8AGkbfABpG/wAaR08AGke7ABpH5wAaSB8AGkiLABpI2wAaSUMAGkmXABpJwwAaSisAGkqbABpK4wAaSw8AGkunABpL6wAaTD8AGkyLABpNBwAaTWMAGk3PABpOIwAaTm8AGk6rABpO8wAaTw8AGk9jABpPxwAaT/sAGlAbABpQswAaUP8AGlEnABpRZwAaUgMAGlI7ABpSawAaUwMAGlN7ABpTwwAaU/cAGlQ3ABpUjwAaVL8AGlVDABpVjwAaVg8AGlZLABpWkwAaVuMAGlcfABpXmwAaV9MAGlg3ABpYmwAaWQsAGllLABpZgwAaWcsAGln7ABpaFwAaWjsAGlp7ABpawwAaWx8AGltrABpbqwAaXAMAGlwvABpccwAaXKcAGl0zABpdbwAaXbsAGl4vABpeiwAaXu8AGl8XABpfdwAaX9MAGmBHABpgywAaYS8AGmIzABpicwAaYt8AGmMXABpjUwAaY5sAGmQDABpkcwAaZJ8AGmTPABpk8wAaZSMAGmVfABplpwAaZcsAGmYDABpmJwAaZksAGmaHABpmswAaZwMAGmdnABpnvwAaaGcAGmiXABpo4wAaaUMAGmmXABpp1wAaahMAGmp/ABpqxwAaaycAGmt3ABprqwAaa/cAGmyzABptAwAabSsAGm1rABptrwAabbcAGm4LABpuFwAabn8AGm6vABpu9wAab2MAGm/HABpwEwAacDcAGnBPABpwhwAacLMAGnEjABpxjwAaceMAGnIjABpyTwAaco8AGnLHABpy8wAacxsAGnNDABpzkwAac9MAGnQjABp0bwAadJsAGnSjABp0vwAadPcAGnUvABp1wwAadgcAGnYTABp2SwAadqMAGnbrABp3LwAad1cAGnebABp3ywAaeA8AGngrABp4awAaeOcAGnkLABp5YwAaeaMAGnnDABp57wAaeisAGnpPABp6ewAaercAGnrXABp7DwAae0cAGnt3ABp7qwAae98AGnwXABp8VwAafI8AGnzPABp9CwAafSMAGn1XABp9ewAafZsAGn3rABp+LwAafnMAGn67ABp+1wAafwsAGn83ABp/ZwAaf6cAGn/bABp/+wAagE8AGoCXABqAxwAagN8AGoErABqBYwAagZMAGoH3ABqCOwAagmMAGoKjABqC1wAagwcAGoM7ABqDnwAag8sAGoPvABqEGwAahEMAGoSvABqFHwAahVcAGoWXABqF4wAahhMAGoZPABqGfwAahrMAGobjABqHNwAah1MAGoeDABqHtwAah/MAGog3ABqIawAaiI8AGoi/ABqJPwAaiXcAGomXABqJ2wAaijsAGopjABqKhwAaitMAGotPABqLcwAai68AGovLABqL8wAajCsAGoxnABqNJwAajYcAGo23ABqOHwAajkcAGo6XABqO+wAaj2MAGo+nABqP6wAakCsAGpCPABqRCwAakTcAGpHHABqSKwAakpMAGpMDABqTWwAak7cAGpQvABqUlwAalQMAGpV/ABqWGwAalkcAGpavABqXIwAal4cAGpffABqYNwAamLMAGpjfABqZDwAamSsAGpmDABqZrwAamdMAGpoPABqaLwAamncAGpq3ABqbKwAam38AGpvvABqcOwAanLMAGpz/ABqddwAanaMAGp3/ABqedwAantMAGp7/ABqfWwAan38AGp/vABqgJwAaoJcAGqDnABqhbwAaocMAGqI3ABqiewAaoqcAGqL3ABqjXwAao7MAGqPfABqk0wAapSMAGqVXABqlhwAapdcAGqY3ABqmZwAappcAGqcDABqnNwAap2sAGqezABqn1wAap+MAGqfzABqoAwAaqA8AGqgjABqoQwAaqGMAGqh7ABqokwAaqLcAGqkjABqpQwAaqbMAGqozABqqqwAaqzcAGqtbABqrawAarBsAGqxLABqsswAarXsAGq2LABqt2wAarncAGq7/ABqvJwAar0MAGq+bABqvtwAar+cAGrA7ABqw1wAasSMAGrGfABqyHwAass8AGrMvABqzjwAas98AGrQ7ABq0vwAatUsAGrWrABq19wAatlcAGrarABq27wAatwsAGrdDABq3cwAat4sAGre/ABq33wAat+cAGrg7ABq4awAauKMAGrivABq42wAauScAGrmfABq56wAauisAGrpXABq68wAau1cAGruDABq7twAavIsAGrzLABq9AwAavWMAGr2rABq9zwAavlMAGr5zABq+ywAavu8AGr8zABq/cwAav6cAGr+7ABq/0wAav9sAGsAjABrAZwAawKcAGsDfABrBKwAawacAGsJzABrCrwAawu8AGsMXABrDVwAaw58AGsOzABrEAwAaxEcAGsSHABrEywAaxQcAGsU3ABrFdwAaxdMAGsX7ABrGJwAaxocAGsbjABrHHwAax58AGsfLABrH9wAayD8AGshbABrI+wAaySsAGslfABrJfwAaycMAGsnvABrKNwAayocAGssLABrLUwAay3sAGsurABrL6wAazDMAGsxnABrMuwAazQsAGs0/ABrNkwAazbsAGs3zABrOJwAazmMAGs6LABrO3wAazwcAGs97ABrPvwAa0CcAGtBzABrQlwAa0OMAGtFvABrR8wAa0kcAGtKbABrS+wAa00cAGtOjABrT6wAa1HcAGtS/ABrVAwAa1VsAGtXLABrV4wAa1gsAGtZbABrWbwAa1usAGtcXABrXSwAa14sAGtfDABrX+wAa2C8AGthPABrYowAa2TsAGtmvABrZ7wAa2mcAGtq/ABra5wAa2yMAGttvABrbvwAa3BsAGtxzABrcpwAa3PcAGt0fABrdUwAa3X8AGt27ABrd7wAa3jMAGt5vABrekwAa3ssAGt8rABrfUwAa34MAGt/PABrgHwAa4EMAGuCXABrgrwAa4PsAGuEzABrhjwAa4dcAGuIHABriOwAa4n8AGuK/ABri8wAa4xcAGuM/ABrjgwAa4+cAGuRXABrkwwAa5PsAGuUjABrlTwAa5XcAGuWzABrlzwAa5fcAGuYPABrmQwAa5mMAGuaXABrnHwAa53MAGuePABrnowAa59sAGugbABroPwAa6IcAGujLABro9wAa6TcAGumvABrp5wAa6hMAGup7ABrqswAa6v8AGutPABrrewAa67sAGuv/ABrsJwAa7HMAGuyvABrs3wAa7UsAGu3jABruSwAa7t8AGu8HABrvRwAa748AGu/TABrwGwAa8FsAGvCnABrw+wAa8UcAGvGbABrx9wAa8iMAGvJnABryiwAa8q8AGvLfABrzIwAa83MAGvPjABr0NwAa9JcAGvULABr1UwAa9YsAGvYTABr2YwAa9p8AGvbPABr28wAa9zsAGvevABr4JwAa+EcAGviLABr4+wAa+W8AGvnLABr56wAa+pMAGvrfABr7JwAa+48AGvvLABr7/wAa/F8AGvzPABr9MwAa/c8AGv5XABr+5wAa/2sAGv/nABsAYwAbANsAGwFHABsBxwAbAkMAGwKnABsDEwAbA3sAGwPjABsEhwAbBQcAGwVfABsFqwAbBf8AGwYrABsGPwAbBoMAGwa7ABsHAwAbB0MAGwenABsH+wAbCC8AGwiHABsIywAbCPcAGwkfABsJcwAbCaMAGwnzABsKSwAbCl8AGwq7ABsLFwAbC1MAGwuLABsL9wAbDEMAGwyPABsM1wAbDSsAGw2nABsN/wAbDmsAGw6fABsO2wAbDw8AGw9TABsP7wAbED8AGxBzABsQnwAbENsAGxEPABsRQwAbEXsAGxHPABsSLwAbEmMAGxKXABsS0wAbExcAGxNPABsTowAbE78AGxQDABsUMwAbFHMAGxS7ABsVEwAbFWsAGxXLABsWSwAbFrsAGxb/ABsXNwAbF2MAGxfXABsY6wAbGocAGxrTABsbJwAbG4MAGxvzABsccwAbHPcAGx2LABseBwAbHkcAGx6PABse/wAbHycAGx97ABsf7wAbIFcAGyCbABshRwAbIaMAGyIHABsiewAbIt8AGyMjABsjrwAbJCsAGyRjABskhwAbJSMAGyYfABsmPwAbJmMAGyazABsnEwAbJzsAGydbABsnfwAbJ7sAGyfzABsoKwAbKFsAGyiLABsoswAbKOsAGykbABspTwAbKXsAGynHABsqDwAbKlMAGyqPABsqxwAbKxcAGytXABsrkwAbK9sAGywDABssPwAbLHcAGyybABss3wAbLR8AGy1zABstwwAbLhcAGy4/ABsuVwAbLn8AGy6XABsu0wAbLvMAGy8TABsvOwAbL2MAGy+HABsvqwAbL88AGzArABswVwAbMIMAGzDPABsxCwAbMVcAGzGfABsx2wAbMiMAGzJPABsyfwAbMrsAGzLzABszQwAbM3sAGzOzABsz5wAbM+8AGzQjABs0ZwAbNJcAGzTfABs1EwAbNUMAGzVrABs1pwAbNdMAGzYDABs2VwAbNncAGza3ABs26wAbNxsAGzdfABs3swAbOA8AGzhLABs4bwAbOJsAGzjfABs5BwAbOVcAGzmfABs53wAbOjcAGzrvABs7GwAbO2cAGzuPABs7uwAbO+cAGzw/ABs8awAbPKsAGzz/ABs9TwAbPZMAGz3TABs+NwAbPmsAGz6LABs+9wAbPy8AGz97ABs/4wAbQEMAG0CHABtA0wAbQTMAG0F/ABtB2wAbQkcAG0KLABtCqwAbQxcAG0N/ABtDvwAbRAMAG0RvABtEswAbRPcAG0VLABtGRwAbRl8AG0aHABtGtwAbRuMAG0c3ABtHcwAbR48AG0fDABtH2wAbSCMAG0irABtJFwAbSX8AG0onABtKswAbS2cAG0vTABtMEwAbTD8AG0zXABtNKwAbTXcAG02/ABtOBwAbTlMAG06rABtO+wAbT0sAG0+nABtQDwAbUH8AG1CPABtQ5wAbUTMAG1HLABtSEwAbUk8AG1KrABtTEwAbUzsAG1NnABtTywAbU/8AG1QrABtUVwAbVL8AG1UTABtVWwAbVacAG1XTABtWMwAbVpcAG1bDABtW9wAbVzcAG1ezABtYCwAbWHsAG1iPABtY6wAbWQ8AG1k3ABtZZwAbWbcAG1n/ABtaQwAbWqsAG1rXABtbBwAbW1MAG1vDABtcNwAbXHcAG1y7ABtdDwAbXTMAG12PABteKwAbXl8AG16nABtfDwAbX08AG1+XABtf2wAbYDsAG2CnABthCwAbYXcAG2HfABtiYwAbYqsAG2LjABtjWwAbY8sAG2QTABtkhwAbZPsAG2VDABtlmwAbZgMAG2ZfABtmiwAbZr8AG2bvABtnIwAbZ1sAG2ezABtnzwAbZ/8AG2hDABtoZwAbaM8AG2jvABtpEwAbaVcAG2mXABtp3wAbaiMAG2pPABtqfwAbapsAG2rPABtq9wAbaycAG2tnABtrjwAba+8AG2wfABtsZwAbbMMAG20vABttXwAbbaMAG23vABtuCwAbbjcAG25TABtufwAbbrMAG27fABtvPwAbb2sAG2+jABtv1wAbcDcAG3CPABtwvwAbcScAG3FTABtxfwAbceMAG3KzABty7wAbcy8AG3N7ABtz0wAbdA8AG3RfABt0pwAbdQMAG3VnABt1nwAbddcAG3YTABt2PwAbdmcAG3avABt28wAbdzcAG3d/ABt3swAbeD8AG3i3ABt5UwAbedsAG3n7ABt6WwAbescAG3tDABt7nwAbfAsAG3xXABt8pwAbfO8AG31HABt9kwAbfdcAG34LABt+OwAbfpcAG37jABt/RwAbf48AG3/jABuADwAbgEMAG4CvABuBIwAbgWMAG4HrABuCVwAbgosAG4LfABuDHwAbg1sAG4OnABuD6wAbhBsAG4RXABuEXwAbhKsAG4TLABuFBwAbhUcAG4WbABuF4wAbhqMAG4bvABuHewAbh7MAG4gLABuIOwAbiF8AG4i7ABuI8wAbiTsAG4lvABuJowAbifcAG4pnABuLAwAbiysAG4tTABuLgwAbi5sAG4uzABuL/wAbjGMAG4yjABuM5wAbjR8AG41nABuNswAbjf8AG45XABuOpwAbjw8AG49jABuPwwAbkAsAG5A/ABuQiwAbkP8AG5FPABuRowAbkesAG5IXABuSSwAbkosAG5LHABuTEwAbk08AG5OfABuT8wAblEcAG5SLABuU3wAblS8AG5WzABuV+wAblocAG5bDABuXCwAbl18AG5eTABuX5wAbmDMAG5hjABuYvwAbmNsAG5kXABuZOwAbmWMAG5m/ABuaBwAbmlcAG5qbABua1wAbmw8AG5tPABubiwAbm68AG5wTABucPwAbnFsAG5yfABucvwAbnPcAG50nABudXwAbnZ8AG53vABueSwAbnqMAG58HABufcwAbn+cAG6BvABuhEwAboZcAG6G7ABuh/wAbojcAG6J/ABui0wAbox8AG6NzABujxwAbpBMAG6RfABukpwAbpO8AG6VDABulhwAbpcsAG6YDABumLwAbpm8AG6ajABum5wAbp1MAG6enABuoIwAbqHMAG6irABuo3wAbqSMAG6l3ABupvwAbqfMAG6o7ABuqfwAbqusAG6t3ABurwwAbr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YcAHG3zABxuZwAcbtcAHG87ABxvUwAcb8sAHHAnABxwrwAccWcAHHITABxylwAccr8AHHMXABxzYwAcc5MAHHPfABx0RwAcdIMAHHTrABx1RwAcdX8AHHXzABx2JwAcdo8AHHbbABx2/wAcdy8AHHdXABx3mwAcd6sAHHe7ABx3/wAceFMAHHiPABx40wAceXMAHHnXABx6HwAcerMAHHsfABx7WwAce8sAHHyLABx8+wAcfVsAHH2/ABx9+wAcfl8AHH6HABx+0wAcf2cAHH/bAByAfwAcgQMAHIFTAByBjwAcgc8AHIHXAByCAwAcgl8AHIKfAByC1wAcgysAHIOfAByD+wAchFcAHISfAByE0wAchRsAHIWPAByFuwAchh8AHIZXAByGnwAchusAHIczAByHiwAch9cAHIg7AByIbwAciJsAHIkPAByJRwAciXMAHInjAByKEwAcikMAHIqDAByKtwAcivsAHItDAByLhwAci98AHIwzAByMcwAcjLMAHI0jAByNbwAcjgcAHI5HAByOdwAcjtMAHI8fAByPbwAcj5sAHI/nAByQHwAckFcAHJC3AByREwAckUcAHJF7AByRpwAckdMAHJHrABySAwAckhsAHJIzABySkwAcktsAHJMnAByTdwAck5sAHJPrAByURwAclHsAHJTbAByVDwAclW8AHJXbAByWGwAclnMAHJbHAByXXwAcl7MAHJgfAByYlwAcmOMAHJk7AByZcwAcmY8AHJnLAByZ+wAcmo8AHJrrABybRwAcm3MAHJujABybywAcm/MAHJwTABycQwAcnIMAHJz7ABydqwAcngsAHJ4/AByeZwAcnp8AHJ7TABye+wAcnx8AHJ9TAByffwAcn58AHKAvABygjwAcoPcAHKGnAByiNwAconMAHKKrAByjXwAco48AHKQXABykWwAcpJsAHKTPABylEwAcpdMAHKYrABymUwAcpn8AHKbDABynGwAcp1sAHKerAByoHwAcqIMAHKjnABypMwAcqWsAHKmrAByqIwAcqnMAHKrjAByq/wAcq3sAHKwbAByshwAcrRsAHK2TAByt/wAcrn8AHK8TAByvfwAcsAMAHLCHAByxMwAcsacAHLIfAByywwAcs0cAHLPDABy0IwActMcAHLVPABy11wActnMAHLcDABy3PwAct8sAHLhDABy4YwAcu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X8AHTWrAB015wAdNiMAHTZvAB02qwAdNtMAHTbzAB03QwAdN2MAHTeLAB03xwAdN/cAHTgLAB04YwAdOJ8AHTjbAB047wAdOb8AHTo/AB06dwAdOuMAHTsfAB07YwAdO3sAHTuzAB07xwAdPAMAHTxjAB08mwAdPNcAHT0TAB09WwAdPZMAHT3DAB0+AwAdPjcAHT6HAB0+6wAdP0cAHT9/AB0/xwAdP+MAHUAjAB1ASwAdQGsAHUEnAB1BNwAdQVsAHUHvAB1CJwAdQk8AHUKjAB1CwwAdQucAHUMLAB1DMwAdQ3cAHUOrAB1D1wAdQ/sAHUQfAB1EVwAdRHsAHUSnAB1E0wAdRUsAHUWLAB1F2wAdRgMAHUYfAB1GUwAdRoMAHUarAB1GywAdRusAHUc/AB1HcwAdR5sAHUe/AB1IAwAdSQcAHUl3AB1JmwAdScsAHUoLAB1KQwAdSnsAHUqjAB1K7wAdSzcAHUt/AB1LpwAdS78AHUvvAB1MXwAdTI8AHUzfAB1NGwAdTZ8AHU3PAB1N/wAdTjMAHU5TAB1OlwAdTssAHU7zAB1PHwAdT2cAHU+LAB1QCwAdUDsAHVBzAB1QkwAdUM8AHVD7AB1RGwAdUUcAHVF7AB1RrwAdUdMAHVJrAB1SowAdUzsAHVNjAB1TnwAdU+MAHVSDAB1UtwAdVPMAHVVvAB1VmwAdVdsAHVZjAB1WqwAdVtMAHVnLAB1Z/wAdW2sAHVujAB1cKwAdXGsAHVybAB1c/wAdX4cAHV/HAB1gDwAdYFMAHWB/AB1gtwAdYPMAHWFPAB1hawAdYasAHWHjAB1jiwAdY9MAHWWXAB1lvwAdZh8AHWjbAB1pDwAdaSsAHWl3AB1qEwAdancAHW1LAB1tbwAdbdsAHW4jAB1uLwAdbu8AHW8zAB1vgwAdb7sAHW/7AB1wIwAdcHsAHXDHAB1xOwAdcYcAHXJ/AB1ypwAdcwsAHXMnAB1zUwAdc4cAHXPHAB1z8wAddBcAHXePAB132wAdd/cAHXlnAB15jwAdexcAHXyjAB183wAdfVcAHX2vAB1+LwAdfp8AHYEjAB2B8wAdgjMAHYLrAB2DGwAdg0cAHYNjAB2EEwAdhGsAHYSrAB2E8wAdhS8AHYVjAB2FbwAdhasAHYXTAB2GMwAdhlcAHYaHAB2G1wAdhx8AHYd7AB2H1wAdiA8AHYhDAB2IewAdiLcAHYj3AB2JTwAdiX8AHYnLAB2KDwAdil8AHYqLAB2KwwAdixsAHYtbAB2LlwAdi9sAHYwPAB2MdwAdjOsAHY0jAB2NUwAdja8AHY3XAB2OIwAdjl8AHY53AB2OlwAdjqsAHY7PAB2O9wAdj08AHY+DAB2P2wAdkD8AHZCDAB2QowAdkPsAHZE3AB2RWwAdkZsAHZHPAB2SUwAdkocAHZLPAB2TAwAdkz8AHZNzAB2TnwAdk8sAHZP/AB2UMwAdlEsAHZRzAB2UqwAdlN8AHZUnAB2VlwAdlccAHZYDAB2WSwAdlq8AHZb3AB2XNwAdl38AHZfHAB2YNwAdmG8AHZiHAB2YwwAdmP8AHZlbAB2ZswAdmesAHZorAB2aYwAdmpsAHZrvAB2bCwAdm18AHZunAB2b3wAdnDcAHZxrAB2cqwAdnP8AHZ1PAB2diwAdnZ8AHZ3LAB2d7wAdnicAHZ4/AB2eWwAdnnsAHZ7XAB2fHwAdn2MAHZ+HAB2frwAdoAcAHaBTAB2gkwAdoNcAHaETAB2hXwAdoZ8AHaHjAB2iGwAdokcAHaKTAB2i1wAdovcAHaMnAB2jdwAdo7MAHaPvAB2kAwAdpDMAHaRrAB2klwAdpN8AHaT3AB2lRwAdpZMAHaXrAB2mBwAdpj8AHaZ7AB2mmwAdpscAHacTAB2nkwAdqAsAHahnAB2oiwAdqLMAHajfAB2pKwAdqUMAHal3AB2pxwAdqf8AHao3AB2qkwAdqrMAHarvAB2rOwAdq9cAHawLAB2sLwAdrEcAHax3AB2sswAdrN8AHaz3AB2tRwAdraMAHa3jAB2uIwAdrlMAHa6nAB2u4wAdr1sAHa+DAB2v0wAdr+sAHbA7AB2wVwAdsLMAHbDHAB2w1wAdsOsAHbEHAB2xOwAdsV8AHbF/AB2xpwAdsfcAHbIDAB2yLwAdsmMAHbKXAB2ynwAdsssAHbL3AB2zGwAdszcAHbNjAB2zfwAds5cAHbO/AB2z/wAdtFcAHbSjAB202wAdtR8AHbVvAB21nwAdtdsAHbX/AB22LwAdtn8AHbbXAB23DwAdt5cAHbe/AB235wAduA8AHbgzAB24mwAduQMAHbknAB25QwAduc8AHboXAB26IwAduq8AHbrjAB27CwAdu4cAHbu3AB275wAdvHcAHbyjAB28xwAdvPcAHb07AB29ewAdvZMAHb3XAB2+CwAdvj8AHb5nAB2+owAdvrsAHb7HAB2+6wAdvz8AHb9/AB2/3wAdwH8AHcCPAB3ApwAdwNcAHcDfAB3A5wAdwRMAHcErAB3BXwAdwZ8AHcHTAB3CEwAdwl8AHcKbAB3CywAdwtsAHcMnAB3DlwAdw68AHcPTAB3EWwAdxJMAHcTHAB3FGwAdxUMAHcWHAB3FqwAdxdMAHcYTAB3GSwAdxoMAHcbXAB3HDwAdxy8AHcdzAB3H1wAdyAsAHchTAB3IqwAdyPcAHckDAB3JDwAdyVsAHcl7AB3JnwAdydsAHcofAB3KQwAdymsAHcqHAB3KkwAdyxcAHctjAB3LowAdy+MAHcwjAB3MgwAdzL8AHczrAB3NKwAdzXcAHc2rAB3NzwAdzfcAHc4jAB3OUwAdzusAHc8XAB3PSwAdz3MAHc+zAB3P2wAd0BMAHdBXAB3QhwAd0RcAHdF/AB3R1wAd0hcAHdJXAB3SmwAd0r8AHdLzAB3TEwAd02cAHdPLAB3UFwAd1E8AHdSrAB3VBwAd1TMAHdWbAB3VvwAd1ecAHdYvAB3WUwAd1p8AHdbLAB3W9wAd10MAHdeHAB3XrwAd188AHdgfAB3YPwAd2G8AHdifAB3YywAd2NMAHdj/AB3ZTwAd2V8AHdmTAB3ZvwAd2ecAHdoPAB3aNwAd2ocAHdqnAB3bCwAd2zcAHdtXAB3brwAd2/MAHdwzAB3cfwAd3NMAHd0DAB3dewAd3Z8AHd3jAB3eOwAd3ocAHd73AB3fMwAd30MAHd9/AB3f/wAd4DMAHeBHAB3gWwAd4H8AHeCnAB3hCwAd4W8AHeIHAB3iOwAd4m8AHeKbAB3iywAd4wMAHeNLAB3jbwAd448AHePLAB3kHwAd5EMAHeR7AB3kuwAd5QsAHeVTAB3lswAd5fsAHeZbAB3mkwAd5ssAHebvAB3nLwAd528AHee3AB3oFwAd6EsAHehvAB3omwAd6OsAHekPAB3pLwAd6VcAHelzAB3p3wAd6iMAHepbAB3qfwAd6qcAHer7AB3rOwAd608AHetrAB3rqwAd69cAHewLAB3sIwAd7EcAHex/AB3svwAd7P8AHe1DAB3tswAd7c8AHe3/AB3uKwAd7jsAHe5nAB3uiwAd7uMAHe8LAB3vOwAd748AHe+/AB3v7wAd8CcAHfBvAB3wowAd8M8AHfDXAB3w7wAd8QsAHfEbAB3xJwAd8TsAHfFDAB3xWwAd8WcAHfF/AB3xrwAd8b8AHfHbAB3yGwAd8j8AHfJrAB3yvwAd8wMAHfMjAB3zfwAd86sAHfPTAB30KwAd9FcAHfRnAB30cwAd9R8AHfU7AB31fwAd9bMAHfYbAB32bwAd9p8AHfbDAB320wAd9wcAHfcTAB33NwAd91cAHfePAB33qwAd998AHfgXAB34TwAd+JcAHfizAB345wAd+ScAHflLAB35jwAd+a8AHfnvAB36uwAd+xMAHfvHAB38EwAd/NsAHf0vAB395wAd/qsAHf77AB3/vwAeABMAHgDjAB4BPwAeAcMAHgH3AB4CCwAeAi8AHgKLAB4C4wAeAvsAHgNbAB4DuwAeBBcAHgRzAB4ElwAeBPsAHgVLAB4FZwAeBZMAHgWbAB4F4wAeBfcAHgZrAB4GmwAeBssAHgb7AB4HQwAeB1MAHgePAB4HlwAeB7MAHgfTAB4IIwAeCEsAHgiLAB4IkwAeCLcAHgjXAB4JAwAeCTMAHglnAB4JqwAeCdsAHgoDAB4KNwAeCk8AHgpjAB4KvwAeCscAHgr3AB4LJwAeC0sAHguDAB4LywAeC98AHgv7AB4MBwAeDB8AHgw3AB4MTwAeDGcAHgyDAB4MnwAeDLMAHgzbAB4NAwAeDX8AHg3DAB4N/wAeDo8AHg6vAB4O4wAeDysAHg9zAB4PswAeD78AHg/jAB4QEwAeECsAHhBbAB4QhwAeENcAHhGjAB4R0wAeEiMAHhJrAB4SgwAeEscAHhMHAB4TPwAeE3cAHhOzAB4T7wAeFDcAHhULAB4VOwAeFV8AHhV/AB4WGwAeFnMAHhavAB4WxwAeFzMAHheTAB4XswAeGEcAHhiTAB4Y6wAeGRcAHhk7AB4ZWwAeGX8AHhn/AB4afwAeGq8AHhrnAB4bGwAeG0cAHht7AB4brwAeG9cAHhvvAB4cLwAeHJ8AHhzTAB4dRwAeHcMAHh3/AB4eKwAeHlMAHh6jAB4e3wAeHv8AHh9fAB4ffwAeH6cAHh/DAB4f7wAeID8AHiCbAB4gwwAeITsAHiGvAB4iQwAeImcAHiKnAB4izwAeIxcAHiNbAB4juwAeJCsAHiR3AB4kswAeJOcAHiUzAB4llwAeJjcAHiZzAB4m1wAeJ1MAHiefAB4nxwAeJ+8AHigTAB4oUwAeKJMAHijDAB4pJwAeKV8AHinPAB4p6wAeKicAHipnAB4qiwAeKqcAHirHAB4q9wAeKwsAHisfAB4rVwAeK3sAHiunAB4rywAeK+8AHiwLAB4sVwAeLJMAHizDAB4tDwAeLWMAHi3TAB4t9wAeLjMAHi5jAB4ugwAeLrMAHi8HAB4vGwAeL0cAHi93AB4vgwAeL6MAHi/PAB4v3wAeMCcAHjBnAB4wdwAeMJsAHjDDAB4w5wAeMT8AHjFzAB4xhwAeMbsAHjHPAB4x5wAeMfcAHjJbAB4ywwAeMucAHjMrAB4zSwAeM5cAHjOzAB4zzwAeNAsAHjSTAB40vwAeNP8AHjUnAB41rwAeNccAHjXvAB42HwAeNlcAHjbfAB43FwAeN5sAHjfTAB43+wAeOCsAHjh/AB44ywAeOP8AHjknAB45QwAeOYMAHjm3AB456wAeOjsAHjqHAB46wwAeOvsAHjtDAB47XwAeO3cAHjubAB47zwAePAMAHjwrAB48XwAePK8AHjzjAB49HwAePWsAHj2zAB491wAePfcAHj5HAB4+lwAePuMAHj+LAB4/twAeP+MAHkCDAB5BMwAeQaMAHkHTAB5B8wAeQlcAHkKLAB5CwwAeQ38AHkPnAB5EbwAeRL8AHkUbAB5FdwAeRdcAHkYHAB5GJwAeRr8AHkcLAB5HNwAeR48AHkfjAB5IMwAeSIcAHkjjAB5JbwAeSaMAHkoXAB5KSwAeSosAHkrjAB5LFwAeSzcAHktrAB5LiwAeS7MAHkvTAB5MEwAeTDsAHkxLAB5MgwAeTKcAHkzTAB5NDwAeTSsAHk1PAB5NbwAeTY8AHk2/AB5OAwAeTicAHk5jAB5OiwAeTsMAHk73AB5PFwAeTzsAHk9nAB5PlwAeT8cAHk/zAB5QGwAeUEsAHlB/AB5QtwAeURcAHlF3AB5RvwAeUdcAHlH/AB5SJwAeUj8AHlJXAB5SewAeUq8AHlLDAB5S1wAeUxMAHlMvAB5TTwAeU+MAHlSXAB5UxwAeVRsAHlVzAB5ViwAeVccAHlYjAB5WVwAeVosAHla3AB5W5wAeVxcAHldHAB5XdwAeV6cAHlfXAB5YDwAeWDsAHlifAB5ZCwAeWWcAHlmvAB5aDwAeWlcAHlqPAB5arwAeWtsAHlsfAB5bnwAeXBMAHlyHAB5dGwAeXa8AHl43AB5eawAeXtcAHl8vAB5fiwAeX9sAHmAzAB5gkwAeYL8AHmDzAB5hGwAeYUMAHmF3AB5hpwAeYfsAHmJTAB5i2wAeYxMAHmM7AB5jbwAeY8sAHmQvAB5kZwAeZJ8AHmTzAB5lFwAeZR8AHmVDAB5lSwAeZYsAHmWXAB5mEwAeZj8AHmanAB5m1wAeZz8AHmePAB5oFwAeaEcAHmhnAB5oewAeaMMAHmj/AB5pTwAeaZcAHmnLAB5p+wAeakcAHmqLAB5qrwAeausAHmsfAB5rSwAea3MAHmvLAB5sGwAebHcAHmyvAB5s4wAebTsAHm2LAB5t0wAebhMAHm5jAB5uqwAebwMAHm9TAB5viwAeb7sAHnAHAB5wSwAecJsAHnDnAB5xFwAecUcAHnFzAB5xnwAecd8AHnIbAB5yRwAecm8AHnKvAB5yywAecu8AHnMHAB5zHwAec3sAHnPDAB50CwAedFsAHnR7AB506wAedTMAHnV7AB518wAedlMAHnaDAB52twAedusAHncPAB53RwAed5sAHnfLAB54CwAeeEsAHniLAB54twAeeOMAHnkHAB55UwAeeYsAHnnnAB56QwAeeqsAHnr/AB57MwAefCMAHnxzAB58jwAefK8AHnzLAB589wAefSsAHn1PAB59bwAefY8AHn4XAB5+2wAefx8AHn83AB5/cwAef7sAHn/7AB6AMwAegHcAHoC/AB6A1wAegRsAHoFPAB6BewAegb8AHoIrAB6CdwAegu8AHoNPAB6DvwAehCMAHoQ/AB6EZwAehJsAHoTPAB6FEwAehTMAHoV/AB6FtwAehh8AHoZjAB6GqwAehwcAHodTAB6HiwAeh9MAHogjAB6IWwAeiKsAHojbAB6JIwAeiXMAHom/AB6J4wAeijcAHopzAB6K8wAeizMAHotrAB6LvwAei9MAHovjAB6MBwAejHcAHozPAB6NGwAejV8AHo2vAB6OOwAejn8AHo6nAB6OywAejv8AHo83AB6PqwAej98AHpA3AB6QewAekM8AHpELAB6RTwAekY8AHpHbAB6SFwAekl8AHpL3AB6TLwAek2sAHpObAB6TuwAek/cAHpR3AB6UqwAelM8AHpULAB6VPwAelWsAHpWHAB6V2wAelfsAHpZbAB6WnwAelv8AHpdnAB6XxwAemCsAHphfAB6YrwAemQcAHplzAB6ZswAemssAHpsfAB6bPwAem1sAHpuDAB6blwAem+cAHpyDAB6cswAenPsAHp1HAB6dmwAenfMAHp5bAB6eqwAensMAHp8XAB6fMwAen4cAHp+jAB6f9wAeoBMAHqCXAB6hJwAeoYcAHqGvAB6iFwAeomMAHqK3AB6jHwAeo5MAHqO7AB6kbwAepI8AHqSjAB6lpwAepgMAHqYXAB6mPwAeprMAHqb7AB6nLwAep6cAHqgvAB6opwAeqMsAHqkjAB6pYwAeqbMAHqo3AB6qmwAequsAHqsfAB6rPwAeq38AHqu3AB6r3wAerBMAHqxrAB6siwAerMcAHq0DAB6tjwAergcAHq6rAB6u3wAer2sAHq/HAB6v+wAesGsAHrDbAB6w9wAesXsAHrHjAB6yXwAesrMAHrLrAB6zGwAes4MAHrOXAB6zvwAetCcAHrSDAB60qwAetZMAHrW7AB613wAetisAHrZ3AB62rwAettcAHrc3AB63uwAeuA8AHrinAB65iwAeudMAHrn3AB66UwAeur8AHrr7AB67ewAevF8AHrynAB687wAevS8AHr1LAB69ZwAevYsAHr2rAB693wAevjsAHr5jAB6+cwAevoMAHr6TAB6+vwAevxsAHr+LAB6/twAewBsAHsCTAB7AxwAewSsAHsFTAB7BZwAewXcAHsGXAB7CDwAeww8AHsNnAB7DhwAew/MAHsRHAB7ElwAexKsAHsUPAB7FXwAexXMAHsXXAB7GLwAexmMAHsa3AB7G4wAexwcAHsdPAB7HqwAex9MAHsf7AB7IRwAeyJcAHsjnAB7JHwAeyVsAHsoHAB7KiwAeys8AHssvAB7LhwAey9MAHswbAB7MUwAezIcAHsy3AB7M4wAezQ8AHs2XAB7N7wAezhMAHs5PAB7OgwAezuMAHs8bAB7PhwAez/cAHtBDAB7QawAe0J8AHtDjAB7RLwAe0XsAHtGjAB7R4wAe0fsAHtJXAB7SowAe0vMAHtMrAB7TSwAe028AHtO/AB7UCwAe1D8AHtSDAB7U0wAe1QsAHtVLAB7VnwAe1d8AHtYLAB7WSwAe1qcAHtbrAB7XcwAe18sAHtgfAB7YgwAe2JsAHtjHAB7ZAwAe2UcAHtmHAB7Z0wAe2jMAHtpzAB7amwAe2vsAHts3AB7bcwAe26sAHtvLAB7b/wAe3DcAHtxrAB7czwAe3P8AHt0rAB7dVwAe3YsAHt27AB7eGwAe3kcAHt6nAB7ezwAe3u8AHt8XAB7fQwAe37sAHuAfAB7gWwAe4LsAHuEDAB7hbwAe4dsAHuIfAB7ipwAe4xcAHuObAB7kDwAe5FcAHuR/AB7k3wAe5R8AHuVrAB7lowAe5e8AHuYvAB7mbwAe5psAHubLAB7nCwAe5zsAHudnAB7nqwAe578AHufrAB7oEwAe6JsAHujTAB7pFwAe6WMAHun3AB7qbwAe6pMAHurrAB7rRwAe66cAHuvTAB7sPwAe7K8AHuznAB7tHwAe7YMAHu3rAB7uQwAe7p8AHu77AB7vWwAe76MAHu/vAB7wFwAe8IsAHvCvAB7w1wAe8R8AHvFrAB7xrwAe8d8AHvIXAB7yOwAe8nsAHvK3AB7zEwAe87MAHvRTAB704wAe9VsAHvXfAB72BwAe9i8AHvZLAB72bwAe9osAHvavAB721wAe9v8AHvcvAB73VwAe938AHvebAB73swAe9/MAHvgfAB74KwAe+E8AHvhXAB74cwAe+JMAHvjbAB75KwAe+bsAHvoLAB76QwAe+n8AHvrnAB77FwAe+3sAHvvnAB78WwAe/JcAHvzDAB783wAe/SsAHv1DAB79bwAe/cMAHv3vAB7+OwAe/msAHv7HAB7/SwAe/38AHv/rAB8ABwAfADsAHwBrAB8AlwAfAOsAHwEjAB8BVwAfAW8AHwGHAB8BywAfAjcAHwJnAB8CvwAfAxsAHwNDAB8DiwAfA6cAHwO/AB8D7wAfBCcAHwRHAB8EowAfBNMAHwUDAB8FGwAfBT8AHwVTAB8FYwAfBWsAHwXLAB8F+wAfBh8AHwZDAB8GawAfBqcAHwbPAB8G1wAfBzMAHweLAB8H0wAfB/MAHwgzAB8IZwAfCLsAHwjDAB8IywAfCTsAHwlTAB8JewAfCZsAHwn3AB8KAwAfCh8AHwo3AB8KcwAfCqsAHwsvAB8LcwAfC7MAHwwXAB8MXwAfDI8AHwzDAB8NNwAfDbcAHw33AB8OswAfDy8AHw9zAB8P8wAfEDMAHxEDAB8RfwAfEb8AHxI/AB8ScwAfEpcAHxK7AB8THwAfE38AHxOzAB8T0wAfFB8AHxRbAB8UawAfFHsAHxSrAB8U2wAfFRcAHxUvAB8VXwAfFX8AHxW/AB8V2wAfFfsAHxYXAB8WQwAfFmcAHxaDAB8WtwAfFtsAHxbzAB8XHwAfFy8AHxdjAB8XewAfF5cAHxevAB8X0wAfF+8AHxgXAB8YQwAfGE8AHxhrAB8YiwAfGMMAHxlPAB8ZVwAfGXsAHxm3AB8Z8wAfGiMAHxqDAB8atwAfGvMAHxsPAB8bFwAfGx8AHxsnAB8bLwAfG4cAHxuPAB8buwAfG98AHxv7AB8cCwAfHFMAHxyDAB8cowAfHMsAHx0HAB8dNwAfHV8AHx17AB8dtwAfHe8AHx4rAB8eNwAfHlMAHx5zAB8eiwAfHqMAHx7rAB8fEwAfH3MAHx+nAB8f1wAfIBMAHyBPAB8gnwAfINsAHyELAB8hPwAfIYMAHyG3AB8h/wAfIkcAHyKbAB8iywAfIw8AHyM/AB8jgwAfI78AHyPzAB8kMwAfJIMAHyTnAB8lRwAfJcMAHyYDAB8mbwAfJs8AHycTAB8nTwAfJ3sAHyevAB8n2wAfKA8AHyg3AB8oYwAfKH8AHyjTAB8o9wAfKR8AHymjAB8p3wAfKesAHyofAB8qWwAfKocAHyqTAB8qrwAfKtsAHysfAB8rMwAfK1MAHytrAB8rjwAfK6MAHyvDAB8rzwAfK9sAHyw3AB8sYwAfLHsAHyyPAB8smwAfLLMAHyzTAB8s5wAfLP8AHy0fAB8tOwAfLZMAHy27AB8t0wAfLeMAHy4HAB8uLwAfLlMAHy6DAB8uzwAfLucAHy8LAB8vIwAfLzMAHy+DAB8vqwAfL8cAHy/vAB8wFwAfMFsAHzBjAB8wjwAfMLMAHzDbAB8xAwAfMSMAHzE/AB8xbwAfMY8AHzG7AB8xywAfMd8AHzIDAB8yKwAfMlsAHzKXAB8yswAfMucAHzL3AB8zKwAfM18AHzOrAB8z3wAfNCsAHzR3AB80wwAfNPMAHzUfAB81cwAfNb8AHzXzAB82AwAfNicAHzZfAB82lwAfNrsAHzbrAB83DwAfNy8AHzdPAB83YwAfN6MAHzfTAB835wAfN/sAHzgbAB84PwAfOGcAHziHAB84twAfOOsAHzkDAB85HwAfOVcAHzljAB85jwAfOa8AHznTAB853wAfOgcAHzojAB86ZwAfOqcAHzrLAB865wAfOvsAHzsfAB87SwAfO2cAHzt3AB87vwAfPAsAHzxLAB88lwAfPNcAHzz3AB89FwAfPVcAHz2DAB89uwAfPf8AHz5DAB8+mwAfPusAHz8HAB8/JwAfP0sAHz+HAB8/vwAfP+cAH0A7AB9AYwAfQIsAH0DjAB9A+wAfQTcAH0FPAB9BfwAfQasAH0HvAB9CDwAfQkcAH0JnAB9CnwAfQs8AH0MXAB9DRwAfQ48AH0PXAB9ENwAfRI8AH0TnAB9FVwAfRacAH0YPAB9GVwAfRrcAH0b3AB9HTwAfR4sAH0ffAB9IEwAfSF8AH0iTAB9I3wAfSWMAH0n/AB9KKwAfSm8AH0q3AB9LFwAfS1cAH0uvAB9L0wAfTA8AH0wnAB9MVwAfTIcAH0zPAB9M4wAfTP8AH00zAB9NUwAfTYsAH02zAB9N8wAfTh8AH05jAB9OiwAfTssAH073AB9POwAfT18AH0+bAB9PrwAfT9sAH1ALAB9QIwAfUFMAH1BvAB9QowAfULsAH1DrAB9RBwAfUSMAH1FTAB9RewAfUbsAH1HfAB9SGwAfUk8AH1J/AB9SxwAfUusAH1MnAB9TMwAfU1cAH1ODAB9TrwAfU/cAH1QfAB9UXwAfVKsAH1TXAB9VGwAfVUcAH1WLAB9VrwAfVesAH1YXAB9WQwAfVoMAH1anAB9W4wAfVycAH1c/AB9XbwAfV5cAH1fbAB9YFwAfWG8AH1iDAB9YtwAfWPMAH1mPAB9Z7wAfWhMAH1o7AB9afwAfWwMAH1s7AB9bowAfW9sAH1xjAB9cjwAfXLMAH1zXAB9c6wAfXSMAH11rAB9dpwAfXh8AH147AB9elwAfXrMAH17rAB9fCwAfZQMAH2WPAB9lzwAfZisAH2aPAB9m2wAfZ8cAH2gbAB9pFwAfaUsAH2mPAB977wAfhjsAH44fAB+O2wAfjw8AH49DAB+PewAfj6cAH4/LAB+QVwAfkK8AH5EPAB+RbwAfkhsAH5JXAB+SxwAfkvsAH5NzAB+TvwAfk9MAH5QjAB+UXwAflRMAH5VHAB+VfwAfldMAH5ZLAB+WgwAflvcAH5drAB+XqwAfl+cAH5gHAB+YIwAfmEcAH5hfAB+YewAfmJ8AH5jDAB+Y5wAfmScAH5lPAB+ZnwAfmxMAH5szAB+bvwAfnFMAH6AXAB+gOwAfoNcAH6ETAB+hdwAfod8AH6HvAB+h/wAfoj8AH6J/AB+i9wAfpWMAH6WHAB+lkwAfpa8AH6aTAB+mvwAfp4MAH6l/AB+pswAfqesAH6o3AB+qXwAfqrMAH6rHAB+rMwAfrccAH7DXAB+yEwAfs/cAH7Q/AB+0bwAftKMAH7VTAB+1/wAftkcAH7aDAB+2zwAfxocAH8cTAB/HTwAfx+MAH8iDAB/I0wAfyR8AH8lfAB/JxwAf0ssAH9kTAB/ZewAf2dMAH9nnAB/aJwAf2lMAH9p7AB/alwAf2r8AH9sXAB/bPwAf25MAH9vvAB/cJwAf3FcAH9yLAB/+qwAf/wcAH/9jACAADwAgAE8AIACPACAA4wAgASsAIAF7ACAB0wAgAe8AIAJTACAClwAgAsMAIAMLACADPwAgA48AIAPfACAEEwAgBEcAIASDACAEvwAgBT8AIAXjACAGJwAgBpcAIAbbACAG+wAgBx8AIAc3ACAHYwAgB4cAIAfDACAH8wAgCCsAIAhLACAIkwAgCQcAIAlLACAJjwAgCd8AIAonACAKgwAgCsMAIAs7ACALbwAgC5MAIAwXACAMawAgDJ8AIAzbACANLwAgDZMAIA3jACAOJwAgDmMAIA6PACAOxwAgDwMAIA/PACAQpwAgEOsAIBD/ACARSwAgEZ8AIBH3ACASQwAgEocAIBKfACAS5wAgEy8AIBNvACAT5wAgFDMAIBRvACAUxwAgFOsAIBT/ACAVKwAgFWsAIBWTACAV2wAgFfMAIBYLACAWPwAgFl8AIBaTACAW6wAgFzMAIBdrACAXxwAgGHMAIBi7ACAZHwAgGT8AIBlnACAZhwAgGZ8AIBoXACAaOwAgGn8AIBq/ACAbBwAgGysAIBtXACAbhwAgG5cAIBvPACAb8wAgHCsAIBxfACAcmwAgHMcAIB0HACAdLwAgHW8AIB2nACAd0wAgHf8AIB43ACAeVwAgHn8AIB6jACAe1wAgHxMAIB9HACAfiwAgH+MAICAHACAgMwAgIFsAICCbACAg0wAgIQ8AICFfACAhmwAgIccAICJHACAicwAgIrsAICLjACAjAwAgIysAICNXACAjgwAgI6sAICP7ACAkKwAgJGMAICSXACAkzwAgJO8AICUTACAlNwAgJYMAICW7ACAmEwAgJlMAICaLACAmuwAgJuMAICcfACAnXwAgJ5cAICfnACAoEwAgKD8AIChrACAolwAgKLsAICjjACApCwAgKS8AIClfACApiwAgKb8AICoHACAqWwAgKqsAICrPACArNwAgK2sAICuPACArywAgLBsAICw/ACAsZwAgLKMAICznACAtHwAgLWsAIC2TACAt+wAgLjMAIC57ACAutwAgLxcAIC9rACAv1wAgMFMAIDC3ACAxKwAgMWcAIDGTACAx/wAgMjsAIDJrACAy4wAgM2cAIDRnACA17wAgNi8AIDZjACA2vwAgNxMAIDdvACA4AwAgOHsAIDjPACA47wAgOVMAIDmfACA53wAgOi8AIDpvACA6vwAgOycAIDuDACA8LwAgPIsAIDzfACA9BwAgPT8AID1nACA9swAgPisAID5bACA+nwAgPs8AID8LACA/QwAgP4MAID+fACA/xwAgQAMAIEAXACBAPwAgQFcAIEB3ACBAmwAgQQsAIEEnACBBjwAgQcMAIEHzACBCRwAgQqsAIELvACBDEwAgQ38AIEPTACBD/wAgRA8AIEQ/ACBErwAgRUsAIEWXACBF/wAgRkcAIEaXACBG1wAgRzsAIEfDACBIKwAgSFsAIEjfACBJgwAgSa8AIEnrACBKIwAgSn8AIErrACBLTwAgTEcAIEyXACBN2wAgTlMAIE5/ACBOswAgTtMAIE8bACBPSwAgT48AIFADACBQNwAgUJMAIFDXACBRSwAgUY8AIFIPACBSVwAgUnsAIFKnACBS2wAgUx8AIFNLACBThwAgU8sAIFRLACBUewAgVJ8AIFTDACBU9wAgVWMAIFW3ACBV6wAgVh8AIFZTACBWxwAgVwMAIFdDACBXcwAgV8sAIFgLACBYXwAgWIcAIFi/ACBY6wAgWScAIFlbACBZowAgWncAIFq7ACBa+wAgW0sAIFtzACBbqwAgW9sAIFwfACBcYwAgXHMAIFyDACBckwAgXKMAIFzLACBdHwAgXUsAIF2XACBdxwAgXgcAIF47ACBeawAgXqcAIF73ACBfOwAgX3sAIF+7ACBgDwAgYCsAIGB7ACBgnwAgYOsAIGETACBhOwAgYXMAIGGrACBh7wAgYjMAIGJ3ACBitwAgYvMAIGMrACBjdwAgY8MAIGQLACBkawAgZK8AIGUHACBlUwAgZXMAIGXPACBl7wAgZh8AIGZbACBmkwAgZu8AIGcfACBncwAgZ6cAIGfTACBoFwAgaFMAIGh7ACBo6wAgaVsAIGpbACBqwwAgatsAIGsfACBrWwAga6MAIGv/ACBsWwAgbJ8AIGzLACBtCwAgbUsAIG1vACBtowAgbd8AIG4rACBuWwAgbq8AIG8TACBvXwAgb48AIG+/ACBv3wAgb/8AIHAjACBwYwAgcKcAIHD3ACBxMwAgcV8AIHGLACBxnwAgcbcAIHHPACBx2wAgcfMAIHInACByawAgcpMAIHK/ACBy1wAgcv8AIHMzACBzWwAgc38AIHOjACBzswAgc+MAIHP3ACB0TwAgdIcAIHTHACB1FwAgdUcAIHVjACB1hwAgdbMAIHXTACB1+wAgdicAIHZbACB2hwAgdqcAIHbDACB26wAgdwMAIHcrACB3TwAgd4cAIHe/ACB31wAgd/8AIHgfACB4SwAgeIMAIHjvACB5HwAgeZsAIHnPACB6KwAgenMAIHqbACB61wAgex8AIHtvACB7rwAge98AIHwzACB8bwAgfKMAIHzPACB9EwAgfVMAIH2fACB90wAgfgMAIH5fACB+lwAgfvMAIH9XACB/cwAgf7sAIH//ACCAJwAggF8AIIB3ACCAowAggNcAIIEfACCBVwAggX8AIIHHACCB9wAgglMAIIK/ACCDKwAgg6cAIIPzACCETwAghKsAIITfACCFOwAghVsAIIWHACCFtwAghdMAIIX/ACCGawAghsMAIIcbACCHUwAgh28AIIePACCHvwAgh/cAIIjLACCJTwAgiX8AIImzACCJ6wAgigsAIIo3ACCKTwAgiqMAIIqvACCKuwAgissAIIrvACCK9wAgiv8AIIs7ACCLYwAgi9MAIIv3ACCMYwAgjKcAII0jACCNdwAgjhsAII5jACCOtwAgjssAII7/ACCPOwAgj2sAII+7ACCQMwAgkGcAIJDfACCRIwAgkUcAIJGvACCR5wAgkhsAIJJPACCTDwAgkycAIJM/ACCTfwAgk78AIJQTACCUQwAglKMAIJTnACCVTwAglcsAIJX/ACCWQwAgll8AIJafACCWywAglx8AIJdfACCXbwAgl38AIJe7ACCYCwAgmCsAIJhrACCYvwAgmO8AIJk/ACCZZwAgmaMAIJn7ACCaZwAgmqsAIJrrACCbKwAgm0MAIJuTACCbswAgm/sAIJwvACCcdwAgnIsAIJy/ACCdEwAgnYsAIJ3/ACCexwAgnxcAIJ9bACCfpwAgn9MAIJ/7ACCumwAgrssAIK8HACCvHwAgr0cAIK93ACCvfwAgr5MAIK+zACCvywAgr/sAILAnACCwUwAgsIMAILCjACCxawAgshcAILJTACCyhwAgssMAILLrACCzEwAgszsAILNfACCzgwAgs6cAILP7ACC0MwAgtGMAILSLACC0twAgtQ8AIZDbACGRBwAhkW8AIZ2rACGd1wAhngMAIZ43ACGekwAhntMAIZ8nACGffwAhn6sAIaAHACGgdwAhoMsAIaEDACGhGwAhoW8AIaGXACGhzwAhofsAIaI3ACGiUwAhorcAIaLXACGjIwAho1cAIaO3ACGj4wAhpFMAIaSjACGlAwAhpVMAIaWzACGl5wAhphsAIaZfACGmnwAhptMAIacHACGnOwAhra8AIa4HACGubwAhrpsAIa7TACGvLwAhr2MAIbBjACGw1wAhsRMAIbFPACGxkwAhsccAIbIHACHLqwAhy/cAIcwrACHMVwAhzJcAIczTACHNJwAhzWMAIc2bACHNvwAhzf8AIc4bACHOTwAhzoMAIc63ACHO2wAhzw8AIc83ACHPawAhz5cAIc/XACHQEwAh0BsAIdA3ACHQgwAh0JcAIdDXACHRCwAh0UMAIdGbACHRwwAh0gsAIdIbACHSqwAh0wsAIdOzACHUSwAh1MMAIdT7ACHVzwAh1pMAIdcvACHXSwAh13MAIdeTACHXtwAh2EsAIdh7ACHYowAh2OcAIdj/ACHZQwAh2Y8AIdmvACHZ+wAh2isAIdpTACHagwAh2t8AIdsDACHbKwAh23sAIdu3ACHb2wAh3CsAIdxzACHclwAh3MMAIdzzACHdJwAh3WcAId2DACHdowAh3fMAId77ACHfFwAh30sAId9nACHf5wAh4vMAIeMzACHjWwAh47MAIePXACHkXwAh56cAIee/ACHn+wAh6BcAIejPACHo7wAh6R8AIelHACHpdwAh6a8AIenDACHqAwAh6pcAIerjACHrMwAh65sAIeu/ACHsIwAh7P8AIe1vACHuRwAh8rMAIfL7ACHzNwAh82cAIfOfACHz9wAh9CcAIfRDACH0cwAh9JMAIfTrACH1bwAh9bsAIfX/ACH2LwAh9msAIfabACH2uwAh9v8AIfczACH3ZwAh95MAIffbACH4OwAh+HMAIfiXACH4uwAh/b8AIf4LACH+uwAh/0cAIf93ACH/swAh/9sAIgArACIAjwAiANsAIgD7ACIBTwAiAZMAIgHPACICLwAiAosAIgKnACIDbwAiA8sAIgPrACIEGwAiBKcAIgTnACIFHwAiBVcAIgV7ACIFpwAiBdMAIgXfACIF9wAiBicAIgY7ACIGWwAiBnsAIgczACIHfwAiCEMAIgibACIJWwAiCa8AIgn3ACIKHwAiCkMAIgpzACILLwAiC38AIgu3ACIL3wAiDDsAIgxvACIMswAiDO8AIg1bACINhwAiDdcAIg43ACIOiwAiDv8AIg8jACIPRwAiD2cAIhAfACIQZwAiEKMAIhEHACIRIwAiEUcAIhFrACIRhwAiEasAIhHLACISBwAiEs8AIhMrACITdwAiE5sAIhO7ACITzwAiE/sAIhQjACIUVwAiFJMAIhSnACIUrwAiFOsAIhVLACIVbwAiFZ8AIhW/ACIV+wAiFiMAIhY3ACIWVwAiFm8AIhZ3ACIWswAiFs8AIhbjACIXDwAiFycAIhdPACIXgwAiF8MAIhiHACIY3wAiGRMAIhljACIZ1wAiGjMAIhrTACIbJwAiG1sAIhuLACIbywAiG9sAIhvrACIcFwAiHDMAIhxTACIcjwAiHMMAIhzfACIdDwAiHT8AIh1fACIdZwAiHZMAIh3HACIeDwAiHkcAIh5jACIeowAiHucAIh9DACIfcwAiH7MAIh/TACIgjwAiIN8AIiETACIhNwAiIXsAIiGfACIhxwAiIhMAIiJPACIikwAiIr8AIiLvACIjSwAiI4cAIiO3ACIkKwAiJIsAIiTXACIlawAiJZ8AIiYHACImQwAiJn8AIibHACIm9wAiJycAIidrACInhwAiJ9cAIif/ACIoOwAiKG8AIij3ACIpYwAiKbMAIinbACIqDwAiKj8AIiqbACIqzwAiKwMAIis7ACIrZwAiK58AIiu7ACIr0wAiK/8AIixLACIsiwAiLLcAIiz3ACItLwAiLWsAIi2zACItuwAiLfMAIi4HACIuMwAiLlMAIi5zACIutwAiLtsAIi8HACIvEwAiLz8AIi9LACIvewAiL7sAIjAfACIwUwAiMIcAIjDXACIw9wAiMTsAIjFvACIxxwAiMfMAIjIvACIySwAiMn8AIjK3ACIzCwAiMzcAIjOTACIz5wAiNBMAIjQ7ACI0ZwAiNIcAIjSzACI1BwAiNTsAIjVjACI1hwAiNdMAIjYbACI2NwAiNlcAIjarACI25wAiNyMAIjdXACI3swAiN9MAIjgLACI4WwAiOHcAIjijACI4ywAiOOsAIjkTACI5MwAiOVsAIjl7ACI5kwAiOacAIjnDACI54wAiOhcAIjpHACI6jwAiOtMAIjsDACI7KwAiOzsAIjtjACI7cwAiO5MAIjvHACI79wAiPEcAIjxvACI8nwAiPMMAIjzrACI9CwAiPTMAIj1fACI9gwAiPZ8AIj27ACI96wAiPh8AIj5TACI+fwAiPr8AIj7zACI/JwAiPzsAIj9nACI/ewAiP78AIkALACJAWwAiQIMAIkDHACJA7wAiQS8AIkFHACJBXwAiQecAIkIXACJCUwAiQmcAIkKTACJCvwAiQusAIkMXACJDSwAiQ58AIkOzACJDxwAiQ/8AIkRLACJEnwAiRNMAIkT7ACJFIwAiRXcAIkWfACJFxwAiRf8AIkZvACJG3wAiRyMAIkdDACJHYwAiR68AIkf3ACJIFwAiSG8AIkiLACJIqwAiSLMAIki7ACJI4wAiSP8AIkkXACJJLwAiSWsAIkmrACJJ6wAiSisAIkpnACJKiwAiSq8AIkq7ACJKxwAiSuMAIksTACJLWwAiS78AIkvrACJMDwAiTC8AIkxfACJMlwAiTMMAIk0LACJNJwAiTUsAIk1/ACJNqwAiTdMAIk3bACJOMwAiTlsAIk63ACJO0wAiTvsAIk8nACJPUwAiT2sAIk9zACJPiwAiT6sAIk/PACJP6wAiT/8AIlAbACJQOwAiUGMAIlCbACJQrwAiUM8AIlD3ACJROwAiUVcAIlFzACJRjwAiUfsAIlIXACJSNwAiUlMAIlKHACJSswAiUtcAIlL7ACJTKwAiU18AIlOjACJT5wAiVAMAIlQ/ACJUawAiVI8AIlS7ACJU/wAiVSsAIlVnACJVnwAiVcMAIlXrACJWHwAiVj8AIlZrACJWiwAiVvcAIlcbACJXMwAiV0cAIldbACJXlwAiV7sAIlfjACJYAwAiWCMAIlhDACJYYwAiWIMAIlirACJYxwAiWRsAIlk3ACJZnwAiWcsAIln/ACJaJwAiWkcAIlp3ACJaqwAiWucAIlsfACJbtwAiXDsAIlxbACJcfwAiXKMAIlzbACJdIwAiXTMAIl2DACJeYwAiXx8AIl9rACJfiwAiX9sAImC3ACJhAwAiYR8AImFvACJhvwAiYkMAImJzACJizwAiYxcAImOLACJjwwAiZCcAImRLACJkfwAiZN8AImT/ACJlOwAiZaMAImXLACJl/wAiZmsAImdHACJnawAiZ4sAImgXACJoQwAiaHMAImifACJovwAiaPcAImknACJpfwAiaaMAImnHACJp6wAiakMAImpbACJqiwAiaq8AImr7ACJrSwAia38AImuPACJr2wAibA8AImwnACJsSwAibHMAImybACJs0wAibPcAIm0TACJtOwAibXMAIm2rACJtywAibdsAIm3vACJuAwAibgcAIm4bACJuWwAibocAIm7HACJvJwAibzcAIm9fACJvewAib5cAInAbACJwTwAicJcAInDPACJxAwAicTcAInGHACJxqwAicdMAInILACJyXwAicq8AInL/ACJzOwAic2MAInOzACJ0AwAidEsAInTLACJ02wAidTsAInW3ACJ2EwAido8AInbrACJ3NwAid38AInezACJ37wAieC8AInkDACJ5PwAiebMAInnrACJ6RwAiencAInrrACJ7WwAie7MAInv/ACJ8MwAifLcAIn0TACJ91wAifjsAIn6LACJ+1wAifyMAIn/PACKAKwAigIcAIoFXACKCKwAigncAIoLjACKDJwAig2sAIoObACKD3wAihAMAIoR3ACKEowAihN8AIoUbACKFWwAihZ8AIoX3ACKGLwAihnMAIoaTACKGtwAiht8AIocXACKHOwAih1sAIodvACKHjwAih8MAIofrACKIGwAiiHcAIoinACKI3wAiiQ8AIolfACKJiwAiicsAIooPACKKOwAiimcAIorPACKLFwAii3sAIoujACKL2wAijAsAIow7ACKMhwAijI8AIozTACKNLwAijVcAIo1/ACKNswAijeMAIo3/ACKORwAijm8AIo6bACKOvwAijusAIo9TACKPhwAij8cAIpATACKQZwAikI8AIpDTACKRBwAikUsAIpGDACKRuwAikgcAIpIfACKSNwAikncAIpKvACKS5wAikxcAIpMfACKTXwAik5MAIpOfACKTxwAilBcAIpRLACKUnwAilMsAIpUHACKVfwAild8AIpYfACKWZwAilq8AIpbPACKXBwAilzMAIpdPACKXpwAil+8AIpg7ACKYewAimM8AIpkTACKZXwAimbcAIpnfACKaDwAimkMAIppzACKapwAims8AIpr7ACKbLwAim1sAIpurACKb7wAinEcAIpyDACKc3wAinR8AIp03ACKdRwAinWMAIp2TACKdywAinf8AIp5PACKeowAintcAIp/XACKf+wAioBcAIqBPACKggwAioKMAIqC/ACKg6wAioUMAIqFfACKhkwAiobMAIqHbACKiawAioq8AIqLzACKjJwAio2MAIqOTACKjywAipAcAIqRHACKkVwAipGcAIqSDACKknwAipLsAIqTXACKlJwAipWsAIqV/ACKmOwAipo8AIqa3ACKm3wAip0cAIqeDACKnrwAip9cAIqgzACKorwAiqOcAIqk3ACKpcwAiqZcAIqm3ACKp+wAiqhsAIqpfACKqfwAiqt8AIqsHACKrNwAiq38AIquXACKrswAiq9MAIqv/ACKsQwAirHMAIqyjACKsywAirRMAIq03ACKtqwAirccAIq3/ACKuHwAirlsAIq6XACKu6wAirwMAIq83ACKvYwAir4sAIq+rACKv3wAisCMAIrBHACKwUwAisIcAIrC/ACKw8wAisRcAIrFTACKxhwAisb8AIrH3ACKyNwAisnsAIrKrACKy8wAiszsAIrNXACKzkwAis98AIrQXACK0MwAitG8AIrTXACK1EwAitTMAIrVzACK1wwAitecAIrYHACK2NwAitnMAIraTACK2twAitusAIrcTACK3WwAit4cAIrerACK30wAit+8AIrgvACK4awAiuI8AIrivACK42wAiuQsAIrlLACK5dwAiuZ8AIrnLACK6AwAiui8AIrprACK6kwAius8AIrrnACK7DwAiuxsAIrtHACK7bwAiu5sAIrwfACK8SwAivHMAIrybACK8wwAivOsAIr0TACK9QwAivWMAIr2zACK96wAivtMAIr8HACK/OwAiv1sAIr93ACK/nwAiv7cAIr/TACK/2wAiv+MAIsAbACLAIwAiwCsAIsBPACLAewAiwKcAIsDPACLA8wAiwfMAIsILACLCXwAiwocAIsLPACLC9wAiwxcAIsMvACLDYwAiw48AIsOXACLDvwAiw+cAIsQbACLEQwAixGsAIsSLACLEzwAixOcAIsTzACLE/wAixS8AIsVPACLFfwAixYsAIsWzACLFywAixgcAIsYrACLGQwAixoMAIsa7ACLG0wAixwcAIscvACLHZwAix5MAIsfHACLH+wAiyDcAIshvACLIqwAiyO8AIskbACLJSwAiyXMAIsmDACLJnwAiyc8AIsnrACLKGwAiykcAIspjACLKhwAiyrcAIsrXACLLBwAiyycAIstfACLLhwAiy7sAIsvfACLMFwAizD8AIsx/ACLMjwAizLcAIszPACLM+wAizRcAIs0/ACLNYwAizX8AIs3PACLN7wAizj8AIs6LACLOwwAizuMAIs7/ACLPGwAizzcAIs9PACLPcwAiz5MAIs+zACLPywAiz+cAItAPACLQKwAi0EsAItCDACLQlwAi0LcAItDnACLRGwAi0UsAItF/ACLRowAi0b8AItHXACLR5wAi0gsAItIvACLSUwAi0mMAItKHACLSrwAi0u8AItMXACLTOwAi03MAItOTACLTqwAi07cAItPXACLT/wAi1CcAItRPACLUZwAi1I8AItS3ACLU3wAi1QcAItUvACLVVwAi1X8AItWnACLVzwAi1fcAItYfACLWRwAi1m8AItaXACLWvwAi1ucAItcPACLXNwAi118AIteHACLXrwAi19cAItf/ACLYJwAi2E8AIth3ACLYnwAi2McAItjvACLZFwAi2T8AItlnACLZjwAi2bcAItnfACLaBwAi2i8AItpXACLafwAi2qcAItrPACLa9wAi2x8AIttHACLbbwAi25cAItu/ACLb5wAi3A8AItw3ACLcXwAi3IcAItyvACLc1wAi3P8AIt0nACLdTwAi3VsAIt1zACLdpwAi3bcAIt3bACLd/wAi3icAIt43ACLeXwAi3ocAIt6vACLe1wAi3ucAIt7/ACLfKwAi31MAIt97ACLfowAi38sAIt/zACLgGwAi4DcAIuBDACLgUwAi4GsAIuCDACLgmwAi4LMAIuDHACLg7wAi4RcAIuE/ACLhZwAi4Y8AIuG3ACLh3wAi4gcAIuIvACLiVwAi4n8AIuKnACLizwAi4vcAIuMfACLjRwAi428AIuOXACLjvwAi4+cAIuQPACLkNwAi5F8AIuSHACLkrwAi5NcAIuT/ACLlJwAi5U8AIuV3ACLlnwAi5ccAIuXvACLmFwAi5j8AIuZnACLmjwAi5rcAIubfACLnBwAi5y8AIudXACLnfwAi56cAIufPACLn9wAi6B8AIuhHACLoWwAi6HMAIuibACLouwAi6NcAIukLACLpawAi6asAIunjACLqEwAi6lMAIurTACLq8wAi6ycAIutTACLrewAi668AIuvPACLr9wAi7BsAIuxbACLsnwAi7MMAIuz7ACLtNwAi7VcAIu5LACLuewAi7psAIu63ACLuzwAi7vsAIu8rACLvPwAi71cAIu93ACLvswAi788AIvA7ACLwhwAi8LMAIvDbACLxAwAi8SMAIvEvACLxawAi8aMAIvHbACLyCwAi8l8AIvKrACLy0wAi8w8AIvMvACLzWwAi83MAIvOnACLz6wAi9DcAIvRfACL0dwAi9QMAIvU/ACL1ZwAi9X8AIvWnACL1xwAi9e8AIvaTACL23wAi9vsAIvcnACL3SwAi94sAIvfLACL38wAi+B8AIvh7ACL4swAi+P8AIvlbACL5kwAi+bcAIvoDACL6XwAi+o8AIvq3ACL63wAi+z8AIvuPACL77wAi/A8AIvxPACL8hwAi/LcAIvzrACL9DwAi/UMAIv2PACL9qwAi/fMAIv4bACL+WwAi/osAIv7HACL/BwAi/ysAIv9zACL/mwAi/8sAIv/3ACMAKwAjAFMAIwCbACMAywAjAPcAIwEnACMBUwAjAYMAIwGvACMB4wAjAhcAIwJLACMChwAjArsAIwL7ACMDcwAjA5sAIwPTACMD+wAjBE8AIwSDACME0wAjBP8AIwU3ACMFSwAjBYsAIwYLACMGUwAjBn8AIwa/ACMHGwAjB0cAIwefACMH3wAjCB8AIwh/ACMIpwAjCMsAIwkvACMJfwAjCaMAIwnbACMKGwAjCk8AIwqHACMKvwAjCwcAIwtnACMLtwAjC/MAIwwjACMMUwAjDJsAIwzTACMM+wAjDTcAIw1fACMNgwAjDa8AIw4DACMOWwAjDq8AIw8PACMPQwAjD3MAIw+3ACMP/wAjEGcAIxCPACMQywAjEQsAIxFnACMR1wAjEksAIxKbACMS+wAjE0MAIxOrACMT2wAjFAcAIxQ7ACMUVwAjFG8AIxSPACMUxwAjFQ8AIxVHACMVkwAjFb8AIxXvACMWJwAjFkcAIxaHACMWswAjFvsAIxdDACMXYwAjF4MAIxejACMXywAjF+cAIxgrACMYSwAjGNMAIxkTACMZPwAjGXcAIxm/ACMZ8wAjGhMAIxpTACMafwAjGtcAIxsTACMbRwAjG68AIxvbACMb7wAjHBMAIxwrACMcXwAjHHsAIxyzACMc1wAjHSsAIx1zACMdkwAjHbcAIx4fACMeVwAjHosAIx7LACMfEwAjH1cAIx+TACMfvwAjH9sAIyDHACMg/wAjITsAIyFbACMhlwAjIdMAIyIDACMiRwAjIncAIyKTACMizwAjIvsAIyMjACMjVwAjI4sAIyO7ACMj7wAjJCcAIyTLACMlgwAjJacAIyXbACMmAwAjJisAIyZPACMmiwAjJq8AIybPACMnDwAjJ/8AIyh3ACMo8wAjKR8AIymPACMpuwAjKfsAIyojACMqXwAjKpsAIyrvACMrTwAjK8cAIyvzACMsIwAjLE8AIyxzACMslwAjLLMAIyzDACMs3wAjLQcAIy0zACMtUwAjLYcAIy2jACMtuwAjLdcAIy3/ACMuMwAjLpMAIy63ACMu1wAjLvMAIy8XACMvOwAjL3sAIy/XACMv/wAjMF8AIzCbACMw0wAjMQ8AIzEzACMxZwAjMacAIzHPACMx8wAjMjMAIzJvACMyuwAjMv8AIzMfACMzTwAjM4MAIzOnACMzuwAjM+sAIzQbACM0SwAjNIcAIzSjACM0wwAjNOMAIzULACM1VwAjNZcAIzXDACM18wAjNjMAIzZbACM2owAjNsMAIzcDACM3VwAjN4sAIze3ACM34wAjOCsAIzhPACM4cwAjOJcAIzjPACM5FwAjOVMAIzl7ACM5pwAjOcsAIzojACM6TwAjOnsAIzrPACM69wAjOzcAIzuDACM71wAjO+8AIzwfACM8WwAjPH8AIzyvACM88wAjPTcAIz17ACM9vwAjPf8AIz5LACM+iwAjPrsAIz8PACM/LwAjP3sAIz+7ACNACwAjQEcAI0BjACNAywAjQQMAI0E7ACNBhwAjQbMAI0HHACNCFwAjQmMAI0KHACNCzwAjQz8AI0NLACNDhwAjQ68AI0PbACNECwAjRCsAI0RrACNEfwAjRKMAI0TrACNFKwAjRUcAI0VnACNFqwAjRcsAI0X3ACNGGwAjRisAI0ZjACNGpwAjRssAI0bjACNG9wAjRyMAI0dDACNHYwAjR48AI0e/ACNH6wAjSCcAI0hzACNIrwAjSPcAI0kfACNJRwAjSXcAI0mfACNJuwAjSfMAI0obACNKXwAjSoMAI0qzACNK0wAjSt8AI0rnACNK7wAjSvcAI0r/ACNLBwAjSw8AI0tjACNLzwAjTA8AI0wzACNMbwAjTKsAI00XACNNfwAjTdMAI04XACNOWwAjTpcAI073ACNPFwAjT0MAI09/ACNPtwAjT+8AI1ALACNQWwAjUJMAI1ELACNRowAjUjMAI1JnACNSqwAjUuMAI1NXACNTzwAjVCcAI1R7ACNUxwAjVSMAI1VHACNVjwAjVcsAI1YHACNWRwAjVsMAI1brACNXIwAjV5MAI1frACNYNwAjWI8AI1jXACNZHwAjWWcAI1mDACNZnwAjWdMAI1nzACNaSwAjWwsAI1v7ACNcHwAjXEMAI1x7ACNcswAjXN8AI10vACNdawAjXYcAI123ACNd8wAjXhMAI15LACNeZwAjXpMAI163ACNe9wAjXxcAI18/ACNfcwAjX58AI1/DACNgEwAjYC8AI2CHACNgqwAjYMsAI2ETACNhRwAjYWMAI2GTACNhxwAjYfcAI2JTACNiiwAjYtMAI2MTACNjTwAjY5MAI2PXACNkFwAjZHMAI2SbACNkwwAjZN8AI2UDACNlHwAjZU8AI2WXACNl1wAjZhcAI2Y3ACNmgwAjZssAI2cXACNnawAjZ98AI2jfACNpBwAjaWsAI2mvACNp0wAjagsAI2o7ACNqfwAjaqsAI2rbACNrBwAja3sAI2urACNrvwAja+cAI2wPACNsNwAjbGMAI2yXACNsswAjbPsAI20nACNthwAjbbcAI23LACNuCwAjbjcAI253ACNumwAjbtcAI277ACNvLwAjb0sAI2+PACNwFwAjcFcAI3BvACNwkwAjcMcAI3EnACNxfwAjcasAI3HrACNyLwAjcrsAI3LzACNzVwAjc38AI3PXACN0TwAjdK8AI3TDACN1DwAjdVsAI3WPACN1nwAjdc8AI3ZHACN2lwAjdr8AI3brACN3GwAjd08AI3dfACN3pwAjd8sAI3fvACN4EwAjeDcAI3hnACN4qwAjePMAI3lXACN5bwAjeYcAI3m7ACN5/wAjejcAI3qHACN6pwAjeusAI3tDACN7nwAje9cAI3wfACN8NwAjfEsAI3xfACN8iwAjfMMAI3zrACN9IwAjfWsAI32PACN9rwAjfeMAI34jACN+VwAjfosAI37fACN/IwAjf0cAI39fACN/mwAjf8sAI3/nACOAZwAjgIcAI4DzACOBhwAjgesAI4J3ACOC3wAjg2sAI4PbACOEOwAjhIcAI4TLACOFMwAjh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i8AI/ZrACP2qwAj9s8AI/b/ACP3RwAj948AI/fbACP4JwAj+HMAI/i3ACP4/wAj+TMAI/l3ACP5owAj+eMAI/n7ACP6KwAj+lcAI/p7ACP6owAj+scAI/rzACP7OwAj+08AI/tvACP72wAj/AcAI/wzACP8ZwAj/IcAI/zfACP9RwAj/YcAI/2/ACP93wAj/ksAI/6jACP+ywAj/u8AI/83ACP/UwAj/5MAI/+vACP/9wAkAC8AJAA/ACQAUwAkAGsAJACHACQApwAkAMsAJADzACQBHwAkAU8AJAGDACQBuwAkAfcAJAI3ACQCewAkAsMAJAMPACQDXwAkA7MAJAQLACQEZwAkBHsAJASPACQE3wAkBTsAJAV/ACQF1wAkBfMAJAYnACQGawAkBqsAJAbbACQG/wAkBzMAJAdfACQHgwAkB7MAJAfrACQIFwAkCEsAJAiHACQIvwAkCQMAJAlPACQJfwAkCbcAJAnvACQKPwAkCocAJAqnACQK4wAkCv8AJAsbACQLRwAkC88AJAvnACQMNwAkDGcAJAyDACQM5wAkDQcAJA1LACQN0wAkDiMAJA5XACQOkwAkDuMAJA8HACQPLwAkD2MAJA+TACQPswAkEAcAJBAzACQQYwAkENMAJBEDACQRZwAkEjMAJBKHACQS5wAkEyMAJBNTACQTewAkE/MAJBQXACQUcwAkFPMAJBUfACQVOwAkFVsAJBWXACQVxwAkFiMAJBZTACQWgwAkFs8AJBbzACQXbwAkF6MAJBfPACQYzwAkGNsAJBmDACQaUwAkGocAJBqnACQa3wAkGxsAJBtjACQcYwAkHI8AJBy3ACQc4wAkHQcAJB03ACQdXwAkHYsAJB27ACQd4wAkHisAJB5XACQegwAkHrcAJB8fACQfLwAkH2sAJB/XACQgAwAkIEsAJCCnACQg/wAkITMAJCFrACQhiwAkIasAJCGzACQh8wAkIicAJCJDACQiXwAkIrMAJCL/ACQjOwAkI28AJCOrACQkDwAkJK8AJCTbACQk+wAkJRMAJCWPACQl0wAkJg8AJCY/ACQmewAkJr8AJCbXACQnLwAkJ5MAJCfbACQn+wAkKEMAJChzACQoywAkKQsAJClPACQpnwAkKc8AJCnzACQqBwAkKkcAJCqTACQqwwAkKycAJCtPACQrfwAkK5MAJCujACQrwwAkK+8AJCwLACQsQwAkLFsAJCxvACQskwAkLWcAJC2jACQt3wAkLhsAJC5DACQuawAkLpMAJC6rACQuswAkLssAJC7fACQvCwAkLysAJC9jACQvmwAkL9sAJC//ACQwBwAkMB8AJDAzACQwTwAkMGcAJDB7ACQwqwAkMNMAJDD3ACQxLwAkMVcAJDF/ACQxpwAkMdMAJDH3ACQyIwAkMjsAJDJjACQydwAkMo8AJDKjACQytwAkMvMAJDNbACQznwAkM9MAJDP7ACQ0uwAkNY8AJDXLACQ2QwAkNmcAJDaXACQ2wwAkNu8AJDcXACQ3UwAkN5sAJDfnACQ4AwAkOC8AJDhXACQ4gwAkOKMAJDjDACQ5AwAkOR8AJDmPACQ5vwAkOg8AJDo7ACQ6ewAkOp8AJDqrACQ6xwAkOv8AJDsfACQ7NwAkO1sAJDtzACQ7iwAkO6MAJDu7ACQ70wAkO+sAJDv/ACQ8NwAkPF8AJDyfACQ8ywAkPRMAJD0/ACQ9awAkPZcAJD3PACQ99wAkPhcAJD5HACQ+ewAkPoMAJD6LACQ+3wAkPwsAJD9jACRAiwAkQPsAJEFLACRBiwAkQd8AJEI3ACRDTwAkQ7cAJEPjACREFwAkREsAJESTACREzwAkRRMAJEVjACRF/wAkRncAJEanACRG6wAkRwMAJEc7ACRHXwAkR7cAJEfvACRINwAkSIMAJEkjACRJYwAkScMAJEonACRKiwAkSrcAJErjACRLLwAkS3cAJEvPACRL7wAkTDsAJExrACRMjwAkTLsAJEznACRNFwAkTUMAJE1/ACRNrwAkThMAJE5LACROiwAkTrsAJE7nACRPxwAkUAcAJFAzACRQbwAkUJsAJFC7ACRQ+wAkUR8AJFFjACRRrwAkUd8AJFIXACRSQwAkUl8AJFKbACRTFwAkU0sAJFNzACRTxwAkVCMAJFS/ACRVMwAkVVsAJFVzACRVlwAkVccAJFXvACRWGwAkVlcAJFaTACRW1wAkVxcAJFdjACRXtwAkWAMAJFhPACRYfwAkWK8AJFjfACRZGwAkWUsAJFlzACRZvwAkWf8AJFo/ACRakwAkWqMAJFr7ACRbDwAkW0cAJFtnACRbnwAkW9cAJFwLACRcOwAkXG8AJFzLACRdGwAkXW8AJF2PACRduwAkXe8AJF4bACReZwAkXscAJF7zACRfKwAkX2cAJF+vACRf9wAkYCsAJGBjACRgpwAkYOsAJGEvACRhZwAkYZcAJGHfACRiDwAkYisAJGJPACRiawAkYp8AJGLHACRi3wAkYy8AJGNLACRjXwAkY8MAJGPjACRj/wAkZBsAJGQ7ACRkUwAkZOMAJGULACRlOwAkZW8AJGWLACRlswAkZf8AJGYvACRmlwAkZssAJGbnACRnAwAkZy8AJGdfACRnfwAkZ78AJGfXACRoBwAkaDMAJGhDACRoYwAkaIcAJGivACRo1wAkaXcAJGmjACRp4wAkagMAJGozACRqTwAkancAJGqPACRqqwAkaysAJGs7ACRsLwAkbFcAJGyDACRsqwAkbM8AJGzjACRtLwAkbV8AJG2TACRttwAkbesAJG4fACRuWwAkbn8AJG6zACRu4wAkb3sAJHBvACRwowAkcU8AJHGTACRyTwAkcm8AJHMTACRzNwAkc08AJHNXACRzawAkc6MAJHP7ACR0MwAkdHsAJHTDACR00wAkdO8AJHUzACR1cwAkdbsAJHX/ACR2DwAkdl8AJHbXACR2+wAkdx8AJHdDACR3hwAkd68AJHf7ACR4OwAkeJ8AJHjnACR5UwAkeYcAJHm/ACR6GwAkel8AJHrHACR7IwAke6MAJHv/ACR8fwAkfOMAJH1rACR9qwAkffsAJH5rACR+pwAkfwMAJH87ACR/kwAkf9sAJIBDACSAgwAkgOMAJIEfACSBbwAkgd8AJIH/ACSCPwAkgp8AJILrACSDVwAkg3cAJIObACSD2wAkhBsAJIRrACSElwAkhLMAJITTACSE/wAkhQsAJIU7ACSFewAkhb8AJIXjACSGAwAkhh8AJIZLACSGfwAkhp8AJIbPACSG7wAkhxcAJIfXACSH9wAkiEMAJIhrACSIowAkiNcAJIjnACSI+wAkiQ8AJIkjACSJNwAkiU8AJIlnACSJfwAkiZcAJImrACSJuwAkifMAJIpDACSKXwAkipcAJIq7ACSK+wAkiyMAJItXACSLfwAki7cAJIyPACSMpwAkjMsAJIz3ACSNEwAkjS8AJI1DACSNbwAkjasAJI3/ACSORwAkjqcAJI7LACSO+wAkjysAJI9nACSPswAkkAsAJJATACSQGwAkkGsAJJDHACSQ1wAkkssAJJLzACSTKwAkk08AJJOLACSTrwAkk9cAJJP7ACSUJwAklFsAJJSfACSU2wAklQsAJJVbACSVrwAklfsAJJY/ACSWiwAkltsAJJczACSXjwAkl9MAJJgHACSYPwAkmFMAJJhzACSYkwAkmLMAJJkTACSZawAkma8AJJnvACSaLwAkmnMAJJqHACSauwAkmtMAJJr3ACSbEwAkmzMAJJs/ACSbZwAkm4sAJJvTACSb+wAknAMAJJwfACScPwAknKsAJJzPACSc/wAknTcAJJ1jACSdnwAknbcAJJ3zACSeMwAknnMAJJ6TACSevwAknt8AJJ8jACSfZwAkn48AJJ+/ACSf+wAkoB8AJKBfACSgkwAkoP8AJKE3ACShVwAkoWcAJKGfACSh5wAkojsAJKJ/ACSizwAkoz8AJKODACSjywAkpBcAJKQvACSkbwAkpKsAJKT7ACSlNwAkpaMAJKYfACSmhwAkptMAJKcfACSnVwAkp38AJKfHACSn/wAkqFsAJKivACSo+wAkqSsAJKlXACSpywAkqjMAJKqHACSq0wAkq0sAJKtTACSriwAkq6cAJKvzACSsEwAkrGMAJKzXACStcwAkrZsAJK3vACSuIwAkroMAJK6/ACSvJwAkr2cAJK/TACSwFwAksIcAJLCbACSw3wAksSMAJLGTACSxtwAksgcAJLI3ACSykwAksrcAJLMHACSzTwAks8MAJLPvACS0RwAktHcAJLTXACS1FwAktYMAJLWnACS1+wAkth8AJLZvACS2twAktycAJLdfACS3wwAkuDcAJLjTACS5DwAkuXcAJLmXACS55wAkufcAJLo3ACS6cwAkutsAJLsnACS7nwAku/8AJLyDACS80wAkvUcAJL2fACS+HwAkvpsAJL87ACS/gwAkv/cAJMA3ACTAowAkwPcAJMFzACTBrwAkwhcAJMJDACTCmwAkwucAJMNfACTDmwAkxAMAJMRrACTE9wAkxWsAJMYDACTGWwAkxp8AJMbPACTG/wAkx28AJMgXACTISwAkyFMAJMhzACTIjwAkyM8AJMkLACTJPwAkyWsAJMmHACTJjwAkyZcAJMm7ACTKFwAkykcAJMqDACTKswAkytcAJMr7ACTLGwAky0sAJMuDACTLiwAky/8AJMw3ACTMfwAkzLMAJMznACTNHwAkzVcAJM2bACTNywAkzfMAJM4XACTOgwAkzrsAJM7rACTPLwAkz3MAJM+fACTPzwAkz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GsAJUC/ACVBKwAlQZcAJUHHACVCLwAlQnsAJUKfACVC5wAlQycAJUN/ACVDvwAlQ/cAJUQ7ACVEZwAlRH8AJUSnACVFHwAlRXMAJUWnACVF3wAlRi8AJUZvACVGvwAlRxcAJUdLACVHfwAlR78AJUh7ACVIzwAlSQsAJUlfACVJmwAlSdMAJUoTACVKNwAlSmsAJUqnACVKuwAlSwsAJUszACVLhwAlS/cAJUxDACVMWwAlTJsAJUzTACVNGwAlTVsAJU2HACVN3wAlTgcAJU5bACVOswAlTzsAJU9/ACVP1wAlUEsAJVDXACVRBwAlUUsAJVGrACVSIwAlUl8AJVKrACVTCwAlU1MAJVOzACVUEwAlVFsAJVTPACVVOwAlVaMAJVX3ACVWXwAlVr8AJVcHACVXMwAlV18AJVfbACVYUwAlWK8AJVknACVZawAlWecAJVpfACVa0wAlWy8AJVuPACVbuwAlXE8AJVyrACVdDwAlXW8AJV3rACVeYwAlXq8AJV7TACVe8wAlXzsAJV93ACVfzwAlYBcAJWB7ACVgxwAlYS8AJWF3ACVhwwAlYhMAJWKXACVi5wAlY08AJWO3ACVkCwAlZH8AJWTTACVlGwAlZUsAJWWPACVlvwAlZesAJWYvACVmjwAlZucAJWcTACVnUwAlZ5sAJWfDACVn5wAlaAMAJWgfACVoTwAlaHcAJWizACVo8wAlaSMAJWlHACVpbwAlaZcAJWnXACVqNwAlavcAJWs3ACVrcwAla5cAJWufACVr4wAlbC8AJWx3ACVs2wAlbTsAJW2XACVt5wAlbjMAJW6DACVuxwAlbxMAJW9jACVvrwAlcAMAJXBPACVwpwAlcT8AJXGPACVx4wAlcjMAJXJ7ACVy4wAlcx8AJXM/ACVzjwAlc9MAJXP/ACV0SwAldHMAJXS/ACV02wAldS8AJXWfACV17wAldlsAJXa3ACV3LwAld18AJXeLACV3twAld98AJXgfACV4rwAleO8AJXlHACV5dwAleaMAJXnrACV6FwAleqMAJXsPACV7MwAle0sAJXt/ACV7wwAle/MAJXwrACV8XwAlfJMAJXzvACV9LwAlfXcAJX2/ACV98wAlfiMAJX5bACV+lwAlfsMAJX7zACV/HwAlgBMAJYAvACWAWwAlgHsAJYCTACWAmwAlgO8AJYE/ACWBowAlgfMAJYJbACWCwwAlgvMAJYNLACWDbwAlg6MAJYPXACWEEwAlhIMAJYS7ACWFPwAlhYcAJYW3ACWF9wAlhgsAJYYnACWGWwAlhvMAJYc7ACWHZwAlh5MAJYfPACWH9wAliB8AJYhfACWIswAliP8AJYl/ACWJwwAlig8AJYo7ACWKSwAlinMAJYq7ACWK5wAlixcAJYtDACWLcwAli58AJYvPACWMAwAljDcAJYxzACWMpwAljOMAJY0LACWNSwAljWsAJY2vACWNzwAljhMAJY43ACWOfwAljqMAJY7rACWPDwAlj1cAJY97ACWPwwAlj+sAJZA3ACWQXwAlkKsAJZDPACWRFwAlkTsAJZGDACWRqwAlkfcAJZIfACWSawAlko8AJZLXACWS+wAlk0MAJZNrACWTtwAlk98AJZQrACWUVwAllKcAJZTTACWVIwAllU8AJZWfACWVywAllhsAJZZPACWWpwAlltsAJZczACWXXwAll68AJZfbACWYKwAlmF8AJZi3ACWY6wAlmUMAJZl3ACWZmwAlmeMAJZpvACWbRwAlm2sAJZv7ACWc1wAlnP8AJZ2rACWeowAlnucAJZ93ACWgUwAloHsAJaC7ACWg+wAloY8AJaJvACWimwAlot8AJaMjACWjswAlpI8AJaS3ACWk9wAlpTcAJaXLACWmqwAlptcAJacbACWnXwAlp+8AJajLACWo8wAlqTMAJalzACWqBwAlqucAJasTACWrVwAlq5sAJaw/ACWtOwAlrWsAJa2zACWt+wAlrp8AJa+bACWvywAlsBMAJbBbACWxEwAlsUsAJbGbACWx6wAlspMAJbLDACWzCwAls1MAJbQLACW0QwAltJMAJbTjACW1kwAlto8AJbbXACW3iwAluIsAJbjXACW5pwAlusMAJbsrACW73wAlvN8AJb0rACW94wAlvucAJb83ACW/6wAlwOsAJcE3ACXB7wAlwvMAJcNDACXD9wAlxPcAJcVDACXF+wAlxv8AJcdPACXIFwAlyTcAJcmLACXKUwAly3MAJcvHACXMowAlzP8AJc3LACXOHwAlzvsAJc9XACXPfwAlz7MAJc/zACXQJwAl0FsAJdCPACXQywAl0QcAJdFHACXRgwAl0csAJdILACXSUwAl0nMAJdK/ACXS0wAl0w8AJdNDACXTVwAl05MAJdPLACXUAwAl1DsAJdRzACXUkwAl1OcAJdUrACXVUwAl1aMAJdWrACXVvwAl1fcAJdYLACXWQwAl1lcAJdaPACXWowAl1tsAJdcPACXXQwAl13sAJdejACXX8wAl2CsAJdiLACXYqwAl2NMAJdj/ACXZKwAl2VcAJdmDACXZswAl2eMAJdoTACXaQwAl2o8AJdrLACXbEwAl20MAJdtzACXbowAl29MAJdvnACXcJwAl3DsAJdx7ACXcjwAl3M8AJdzjACXdIwAl3UcAJd2HACXdqwAl3esAJd4PACXeTwAl3nMAJd6zACXe6wAl3xMAJd9HACXfhwAl37sAJd/vACXgIwAl4F8AJeCTACXgzwAl4QcAJeE/ACXhkwAl4csAJeIDACXiNwAl4msAJeKjACXi6wAl4wMAJeM7ACXjYwAl488AJeQrACXklwAl5OcAJeWXACXmkwAl5ssAJedHACXn+wAl6PsAJek3ACXptwAl6ocAJeujACXr+wAl7JcAJe1LACXuSwAl7ocAJe8HACXvvwAl8MMAJfEDACXxhwAl8jsAJfM7ACXzdwAl8/cAJfSvACX1swAl9fMAJfZ3ACX3KwAl+CsAJfhnACX45wAl+Z8AJfqjACX64wAl+2cAJfwvACX9TwAl/ZMAJf4bACX+4wAmAAMAJgBHACYAzwAmAasAJgH3ACYChwAmA1MAJgOXACYEHwAmBPsAJgVHACYF1wAmBgsAJgaDACYGnwAmBrsAJgbbACYG+wAmBxsAJgc7ACYHWwAmB3sAJgebACYHuwAmB98AJggDACYIKwAmCFMAJgiDACYIswAmCOcAJgkjACYJOwAmCW8AJgl7ACYJkwAmCbMAJgnHACYJ6wAmCgsAJgpHACYKowAmCwMAJgtDACYLvwAmC+MAJgxDACYMpwAmDQcAJg1rACYNjwAmDe8AJg4XACYOewAmDqcAJg8PACYPOwAmD6MAJg/XACYQRwAmEHMAJhDbACYRDwAmEX8AJhGjACYRswAmEcMAJhHTACYR4wAmEfMAJhIDACYSEwAmEiMAJhIzACYSQwAmElMAJhJjACYScwAmEoMAJhKTACYSowAmErMAJhLDACYS0wAmEuMAJhLzACYTAwAmExMAJhMjACYTMwAmE0MAJhNTACYTYwAmE3MAJhODACYTkwAmE6MAJhOzACYTwwAmE9MAJhPjACYT8wAmFAMAJhQTACYUIwAmFDMAJhRDACYUUwAmFGMAJhRzACYUgwAmFJMAJhSjACYUswAmFMMAJhTTACYU4wAmFPMAJhUDACYVEwAmFSMAJhUzACYVQwAmFVMAJhVjACYVcwAmFYMAJhWTACYVowAmFbMAJhXDACYV0wAmFeMAJhXzACYWAwAmFhMAJhYjACYWMwAmFkMAJhZTACYWYwAmFnMAJhaDACYWkwAmFqMAJhazACYWwwAmFtMAJhbjACYW8wAmFwMAJhcTACYXIwAmFzMAJhdDACYXUwAmF2MAJhdzACYXgwAmF5MAJhejACYXswAmF8MAJhfTACYX4wAmF/MAJhgDACYYEwAmGCMAJhgzACYYQwAmGFMAJhhjACYYcwAmGIMAJhiTACYYowAmGLMAJhjDACYY0wAmGOMAJhjzACYZAwAmGRMAJhkjACYZMwAmGUMAJhlTACYZYwAmGXMAJhmDACYZkwAmGaMAJhmzACYZwwAmGdMAJhnjACYZ8wAmGgMAJhoTACYaIwAmGjMAJhpDACYaUwAmGmMAJhpzACYagwAmGpMAJhqjACYaswAmGsMAJhrTACYa4wAmGvMAJhsDACYbEwAmGyMAJhszACYbQwAmG1MAJhtjACYbcwAmG4MAJhuTACYbowAmG7MAJhvDACYb0wAmG+MAJhvzACYcAwAmHBMAJhwjACYcMwAmHEMAJhxTACYcYwAmHHMAJhyDACYckwAmHKMAJhyzACYcwwAmHNMAJhzjACYc8wAmHQMAJh0TACYdIwAmHTMAJh1DACYdUwAmHWMAJh1zACYdgwAmHZMAJh2jACYdswAmHcMAJh3TACYd4wAmHfMAJh4DACYeEwAmHiMAJh4zACYeQwAmHlMAJh5jACYecwAmHoMAJh6TACYeowAmHrMAJh7DACYe0wAmHuMAJh7zACYfAwAmHxMAJh8jACYfMwAmH0MAJh9TACYfYwAmH3MAJh+DACYfkwAmH6MAJh+zACYfwwAmH9MAJh/jACYf8wAmIAMAJiATACYgIwAmIDMAJiBDACYgUwAmIGMAJiBzACYggwAmIJMAJiCjACYgswAmIMMAJiDTACYg4wAmIPMAJiEDACYhEwAmISMAJiEzACYhQwAmIVMAJiFjACYhcwAmIYMAJiGTACYhowAmIfcAJiILACYiRwAmIlcAJiKPACYiywAmIy8AJiNjACYjvwAmI9sAJiQbACYkXwAmJKMAJiUHACYlKwAmJX8AJiW7ACYl8wAmJicAJiaDACYm6wAmJ0sAJigHACYoXwAmKGcAJiibACYpswAmKhcAJisrACYriwAmLL8AJi0/ACYuWwAmLsMAJi/bACYwPwAmMVsAJjHDACYy2wAmMz8AJjRbACY0wwAmNdsAJjY/ACY3XwAmN8sAJjjzACY5ZwAmOo8AJjsDACY8IwAmPI8AJj2vACY+GwAmPjsAJj5bACY+ewAmPpsAJj7HACY+8wAmPxsAJj9DACY/bwAmP4cAJj+jACY/wwAmP/8AJkAfACZAQwAmQGMAJkCHACZAswAmQQcAJkErACZBSwAmQasAJkH3ACZCJwAmQlMAJkJ/ACZCrwAmQu8AJkMHACZDNwAmQ2cAJkObACZD0wAmQ/sAJkQvACZENwAmRHcAJkSzACZE3wAmROcAJkUPACZFVwAmRXsAJkWPACZF0wAmRf8AJkYzACZGYwAmRpsAJkbHACZHBwAmR1MAJkeXACZH5wAmSBsAJkhXACZInwAmSN8AJkkHACZJQwAmSYsAJknLACZKAwAmSlsAJkqjACZK6wAmSv8AJksXACZLSwAmS3sAJkvHACZMKwAmTHMAJkyHACZMrwAmTXcAJk2XACZNzwAmTpcAJk7nACZPJwAmT6sAJlBvACZQkwAmUNcAJlD3ACZRLwAmUW8AJlHXACZSVwAmUn8AJlLPACZTPwAmU48AJlQrACZUiwAmVNcAJlVHACZVUwAmVY8AJlXPACZWMwAmVnsAJlavACZWxwAmVuMAJlcrACZXUwAmV6cAJlgTACZYHwAmWGsAJliPACZY7wAmWScAJll3ACZZnwAmWgMAJloTACZaewAmWuMAJltbACZbhwAmW8sAJlwHACZcIwAmXEsAJly3ACZdMwAmXWsAJl13ACZdvwAmXesAJl4LACZeFwAmXisAJl57ACZewwAmXt8AJl8jACZfVwAmX18AJl+fACZfwwAmX88AJl/zACZgIwAmYD8AJmCPACZgpwAmYQsAJmEzACZhfwAmYaMAJmHfACZiHwAmYisAJmJTACZiewAmYrsAJmL3ACZjDwAmYycAJmM7ACZjZwAmY58AJmPPACZj+wAmZDcAJmRLACZkhwAmZM8AJmVnACZliwAmZj8AJmZTACZmcwAmZq8AJmbLACZm7wAmZxMAJmcjACZnRwAmZ2cAJmeTACZoNwAmaE8AJmjzACZpFwAmaecAJmp7ACZq3wAmaxsAJms/ACZrZwAma4sAJmuzACZr8wAmbH8AJm0vACZtVwAmbX8AJm2nACZt1wAmbiMAJm47ACZuawAmbtcAJm8LACZvQwAmb28AJm+HACZvmwAmb6sAJm/DACZv0wAmcDMAJnCLACZwywAmcQsAJnFLACZxjwAmcdsAJnI7ACZyowAmcwMAJnNbACZzuwAmc/8AJnRHACZ0lwAmdLsAJnT7ACZ1TwAmdVcAJnWrACZ16wAmdjMAJnZTACZ2wwAmdw8AJnczACZ3hwAmd6sAJnfXACZ4BwAmeBcAJnhXACZ4fwAmeUcAJnlnACZ6JwAmem8AJnqDACZ6swAmeuMAJnsPACZ7hwAme+sAJnwLACZ8YwAmfKMAJny7ACZ9AwAmfTMAJn17ACZ9ywAmfisAJn6LACZ+1wAmfzsAJn+PACZ/5wAmgBsAJoBvACaAkwAmgPMAJoEfACaBYwAmgcsAJoIrACaCawAmgssAJoMPACaDJwAmg1sAJoNzACaDlwAmhD8AJoUDACaFVwAmhXcAJoXrACaF9wAmhhMAJoZHACaGcwAmhp8AJocLACaHFwAmh58AJogXACaIWwAmiNMAJokzACaJiwAmilMAJorTACaLDwAmi2cAJovfACaMYwAmjNMAJo0PACaNTwAmjVsAJo1nACaNswAmjd8AJo37ACaODwAmjmsAJo6jACaPDwAmjzsAJo+DACaP9wAmkDMAJpBvACaQ5wAmkTsAJpFjACaRpwAmkesAJpJHACaShwAmkssAJpLnACaTDwAmkzcAJpNXACaTdwAmk9sAJpQ7ACaUawAmlI8AJpSnACaU/wAmlRsAJpU/ACaVjwAmlcsAJpXzACaWHwAmlkcAJpZ/ACaWzwAmlyMAJpdTACaXnwAml+MAJpgvACaYdwAmmLMAJpkHACaZSwAmmY8AJpnrACaaKwAmmm8AJpsLACabbwAmm88AJpwbACacZwAmnL8AJpzrACadEwAmnUcAJp1rACadjwAmncsAJp3rACaeDwAmnlMAJp6TACaetwAmnvcAJp8TACafUwAmn1sAJp+XACafuwAmn/MAJqArACagYwAmoIsAJqCnACagxwAmoPsAJqEfACahMwAmoVMAJqGrACah+wAmohcAJqIjACaiUwAmop8AJqLXACajLwAmo0cAJqN/ACajuwAmpA8AJqRfACalGwAmpUsAJqXbACal7wAmphsAJqbvACandwAmp6sAJqhbACaoxwAmqPsAJqkvACapYwAmqYsAJqnLACaqgwAmqzMAJqt3ACarrwAmq8MAJqvXACar7wAmrCMAJqxnACaslwAmrNsAJqz/ACatLwAmrV8AJq2bACat5wAmrhsAJq47ACauewAmrs8AJq8DACavHwAmrzMAJq9rACavywAmsEcAJrDbACaw5wAmsUMAJrFPACaxcwAmsX8AJrGjACaxrwAmsdcAJrHnACayGwAmsjsAJrJfACaydwAmso8AJrK7ACay5wAmsvsAJrMTACazNwAms18AJrOPACazvwAms/cAJrQzACa0cwAmtK8AJrTTACa1DwAmtUcAJrVjACa1gwAmtZsAJrXLACa2CwAmtlcAJrZ3ACa25wAmtwsAJrcrACa3UwAmt3cAJrfTACa4OwAmuKcAJrkbACa5cwAmuc8AJroHACa6KwAmuk8AJrqDACa6vwAmut8AJrsLACa7EwAmu0MAJru/ACa73wAmvAMAJrw3ACa8YwAmvI8AJrzLACa88wAmvRMAJr0/ACa9hwAmvbcAJr3fACa+DwAmvlcAJr7DACa+8wAmvzMAJr+vACa/1wAmwDcAJsBvACbAowAmwM8AJsETACbBLwAmwVsAJsG3ACbB/wAmwiMAJsJXACbCfwAmwp8AJsLLACbC5wAmwxcAJsM3ACbDXwAmw6sAJsQLACbEUwAmxJcAJsS7ACbE4wAmxQ8AJsWrACbGAwAmxksAJsZfACbGgwAmxrsAJsbbACbHKwAmx4sAJse7ACbIKwAmyF8AJsirACbI0wAmyQMAJsk3ACbJkwAmyh8AJsqjACbKzwAmyvMAJssDACbLLwAmy3cAJsuvACbL7wAmzDsAJsxnACbMowAmzN8AJs0XACbNVwAmzacAJs4HACbOVwAmzq8AJs7/ACbPMwAmz38AJs/PACbQLwAm0JMAJtDfACbRSwAm0acAJtIHACbSYwAm0qcAJtLfACbTKwAm048AJtPjACbUSwAm1LMAJtT/ACbVZwAm1cMAJtYzACbW/wAm138AJtenACbXwwAm1/cAJthPACbY2wAm2T8AJtoHACbakwAm2s8AJtsPACbblwAm29cAJtw7ACbcxwAm3R8AJt2fACbeDwAm3qcAJt7fACbfFwAm308AJt+rACbf4wAm4A8AJuBrACbglwAm4MsAJuEjACbhSwAm4XsAJuGvACbhywAm4dsAJuIbACbiNwAm4lcAJuKbACbitwAm4vcAJuNLACbjxwAm5AMAJuRbACbklwAm5O8AJuUnACblgwAm5b8AJuYfACbmWwAm5n8AJuanACbmvwAm5u8AJuc7ACbnewAm58MAJuhHACboTwAm6J8AJukLACbpZwAm6b8AJun3ACbqPwAm6nsAJurbACbrXwAm65cAJuv/ACbsQwAm7IsAJuzvACbtLwAm7UsAJu2rACbt+wAm7ksAJu6fACbvPwAm75sAJvBDACbwowAm8W8AJvILACbyowAm8tsAJvM7ACbzmwAm8/sAJvRbACb0dwAm9L8AJvTrACb1PwAm9XcAJvXDACb2EwAm9lcAJvZ7ACb2swAm9w8AJvdjACb3kwAm988AJvfzACb4PwAm+HcAJvirACb48wAm+SMAJvmHACb5zwAm+iMAJvpvACb6mwAm+sMAJvsfACb7XwAm+88AJvv7ACb8mwAm/MMAJv1jACb9wwAm/f8AJv47ACb+YwAm/pcAJv67ACb+2wAm/w8AJv9HACb/awAm/6MAJv/XACcAAwAnAEMAJwB3ACcAowAnAMsAJwDbACcA/wAnAS8AJwFHACcBqwAnAcMAJwHvACcCHwAnAk8AJwJ/ACcCuwAnAxcAJwOTACcDswAnA98AJwQXACcEOwAnBHsAJwTDACcE6wAnBUsAJwWTACcFowAnBcMAJwYjACcGXwAnBn8AJwaXACcGvwAnBucAJwcHACcHNwAnB2MAJwefACcH/wAnCDcAJwh3ACcItwAnCOMAJwkzACcJXwAnCa8AJwnrACcKEwAnClcAJwqbACcKtwAnCusAJws/ACcLgwAnC+MAJwwvACcMlwAnDOMAJw0LACcNPwAnDaMAJw3TACcOBwAnDmcAJw57ACcOjwAnDqcAJw7DACcO3wAnDw8AJw8nACcPRwAnD2sAJw/LACcP8wAnEFMAJxC7ACcREwAnEXcAJxHLACcSIwAnEqsAJxMTACcTvwAnFD8AJxSHACcUuwAnFQcAJxVTACcVjwAnFcMAJxYDACcWHwAnFmcAJxafACcWpwAnFtMAJxbnACcXAwAnFyMAJxdTACcXhwAnF7cAJxfnACcYHwAnGFcAJxhnACcYjwAnGKsAJxjHACcY8wAnGSsAJxljACcZdwAnGZsAJxnPACcZ+wAnGisAJxpHACca6wAnGvcAJxs3ACcbhwAnG9cAJxwTACccTwAnHIsAJxzHACcc9wAnHScAJx1DACcdXwAnHXMAJx2TACcduwAnHeMAJx4PACceOwAnHp8AJx67ACce1wAnHxsAJx9fACcfdwAnH8sAJyAPACcgVwAnIL8AJyGfACchywAnIfMAJyIjACciYwAnIqMAJyLTACcjBwAnIysAJyNTACcjewAnI6cAJyPfACckBwAnJCsAJyRTACckgwAnJM8AJyUfACclZwAnJbMAJyXjACcmDwAnJksAJyZzACcmswAnJv8AJycfACcnTwAnJ3MAJyeXACcnzwAnKB8AJyhTACcohwAnKM8AJykvACcpbwAnKcMAJyoXACcqZwAnKpcAJyrHACcrFwAnK3MAJyurACcsAwAnLCcAJyxXACcsowAnLNcAJy0PACctQwAnLWcAJy2LACctrwAnLd8AJy4DACcuOwAnLncAJy6zACcu8wAnLysAJy9bACcvewAnL5MAJy/DACcwBwAnMDMAJzCHACcwuwAnMMsAJzEzACcxawAnMacAJzHnACcySwAnMnsAJzKvACcy1wAnMwMAJzNPACczqwAnM9cAJzQDACc0RwAnNHMAJzSrACc02wAnNWsAJzWLACc1pwAnNdcAJzZHACc2dwAnNpMAJzarACc2wwAnNxsAJzeTACc35wAnOCsAJzhbACc4iwAnOK8AJzi7ACc5GwAnOZsAJznHACc53wAnOgcAJzpHACc6WwAnOm8AJzqrACc60wAnOv8AJzsjACc7PwAnO1sAJzuTACc7ywAnPAcAJzyXACc8zwAnPPsAJz0rACc9SwAnPXsAJz2nACc91wAnPgcAJz4jACc+ewAnPq8AJz77ACc/MwAnP28AJz+TACc/twAnQB8AJ0BXACdAnwAnQMMAJ0DnACdBFwAnQUsAJ0FrACdB0wAnQjcAJ0JzACdCnwAnQtMAJ0L3ACdDMwAnQ1cAJ0OTACdDwwAnQ/MAJ0Q7ACdEawAnRLMAJ0TzACdFrwAnRlsAJ0aPACdGwwAnRvsAJ0dHACdHfwAnR88AJ0gXACdIVwAnS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0sAKFejAChX4wAoWCMAKFhbAChYiwAoWM8AKFk/AChZrwAoWjMAKFqrAChbNwAoW6sAKFwfAChcRwAoXG8AKFyrAChc2wAoXR8AKF1LAChddwAoXbMAKF3nACheOwAoXrMAKF7PAChe7wAoXxsAKF8/AChflwAoX7sAKGATAChgMwAoYFMAKGCPAChgxwAoYO8AKGEbAChhcwAoYYsAKGHTAChiHwAoYm8AKGLTAChjJwAoY18AKGODAChjmwAoY7sAKGPvAChkCwAoZCsAKGRvAChlnwAoZc8AKGXzAChmGwAoZi8AKGY7AChmXwAoZqMAKGbTAChnFwAoZzsAKGd/AChnrwAoZ/MAKGgrAChodwAoaKcAKGjfAChpCwAoaSsAKGlLAChpawAoaesAKGqjAChrIwAoa6MAKGxbAChs2wAobVMAKG3HACht8wAobgsAKG47AChubwAobtsAKG8bAChvcwAob7cAKHAHAChwNwAocHMAKHCzAChw5wAocR8AKHFbAChxnwAocdcAKHIXAChyRwAocmcAKHKLAChyqwAocvsAKHMLAChzSwAoc48AKHO7AChz5wAodCsAKHSbACh07wAodbMAKHYDACh2qwAodtcAKHcjACh3fwAod7cAKHfPACh4KwAoeKMAKHjXACh5LwAoeZsAKHn3ACh6JwAoen8AKHrrACh7OwAoe4MAKHvDACh8IwAofGMAKHyvACh9CwAofW8AKH3LACh92wAofesAKH4rACh+OwAofnsAKH7fACh/RwAof7MAKIArACiAuwAogOMAKIEnACiBXwAogZcAKIH3ACiCRwAogpcAKILvACiDQwAog2MAKIOHACiDqwAog+MAKIQfACiEhwAohMMAKIULACiFUwAoha8AKIYTACiGOwAohq8AKIbrACiHHwAoh1cAKIeHACiHuwAoh/cAKIhLACiIgwAoiLsAKIlDACiJuwAoihcAKIpjACiKtwAoiwsAKItjACiMIwAojDcAKIy/ACiNgwAojbMAKI3XACiN8wAojhMAKI5HACiOewAojqsAKI9PACiPnwAoj9MAKJATACiQRwAokIcAKJCjACiQ3wAokQcAKJFTACiRdwAokZcAKJG7ACiR/wAokiMAKJIzACiSXwAokoMAKJK/ACiS9wAokyMAKJNXACiTgwAok78AKJPvACiUIwAolFsAKJR7ACiUtwAolNcAKJT7ACiVGwAolUcAKJV3ACiVowAolccAKJYDACiWOwAolmcAKJavACiW7wAolxMAKJczACiXiwAol8cAKJfvACiYFwAomEMAKJiLACiYnwAomNMAKJkPACiZOwAomXcAKJmvACiZxwAomgsAKJpDACiaawAomqMAKJrLACibAwAom7sAKJwDACicXwAonIsAKJyzACic2wAonQMAKJ07ACidcwAonX8AKJ2jACid1wAongsAKJ43ACieUwAonqMAKJ6/ACifCwAon1cAKJ+bACif4wAooCMAKKBnACigowAooNMAKKEDACihLwAooUsAKKGTACih3wAooh8AKKJXACiinwAoossAKKLfACijNwAoo2sAKKOrACij/wAopCMAKKRDACikgwAopLMAKKTvACilFwAopUMAKKVnACilbwAopi8AKKZjACimhwAopqcAKKbXACinHwAop08AKKdvACinqwAop+8AKKgXACioMwAoqGMAKKiTACioswAoqN8AKKk3ACipawAoqaMAKKnfACiqDwAoqjMAKKpTACiqewAoqrMAKKrPACiq4wAoqwMAKKs7ACirSwAoq3MAKKuTACirxwAoq+MAKKv3ACisIwAorJsAKKzPACis+wAorQsAKK0/ACitawAorYMAKK27ACit5wAorgsAKK4nACiuQwAornsAKK6zACiu6wAory8AKK9jACivfwAor7cAKK/LACiv4wAor+sAKLAHACiwHwAosGcAKLCrACiwswAosLsAKLDDACiwywAosNMAKLDbACiw9wAosTsAKLFjACixiwAoseMAKLIXACiyJwAoskMAKLJzACiymwAosqcAKLK3ACiy2wAosucAKLLzACizDwAosyMAKLNbACizfwAos58AKLOnACizrwAos9cAKLRTACi0awAotJcAKLS/ACi02wAotUcAKLXTACi2CwAotlcAKLaXACi2ywAotucAKLb7ACi3JwAotzcAKLdHACi3YwAot2sAKLeLACi3owAot9sAKLf7ACi4IwAouEMAKLhrACi4dwAouJMAKLirACi41wAouRcAKLlXACi5cwAouY8AKLmXACi5twAoudMAKLnvACi6CwAouicAKLpDACi6bwAoupsAKLrHACi68wAouw8AKLsrACi7RwAou2MAKLuLACi8FwAovCMAKLxLACi8cwAovLMAKLzTACi89wAovTMAKL1fACi9ewAovcMAKL3fACi98wAovhMAKL4jACi+KwAovmsAKL6XACi+xwAovx8AKL8/ACi/fwAov+cAKMAHACjAPwAowFMAKMCLACjApwAowNMAKMD3ACjBKwAowUsAKMF7ACjBnwAowdMAKMHvACjB/wAowg8AKMIXACjCHwAowjsAKMKXACjCxwAoww8AKMNjACjDjwAow7cAKMPvACjECwAoxEcAKMR3ACjEnwAoxN8AKMULACjFawAoxacAKMXrACjGEwAoxiMAKMZLACjGcwAoxpsAKMbbACjHAwAoxx8AKMdTACjHewAox7sAKMgDACjIMwAoyG8AKMjDACjJCwAoyUcAKMmDACjJvwAoyg8AKMpXACjKqwAoywcAKMt7ACjLywAozBsAKMxXACjMawAozHsAKMyrACjM2wAozQsAKM03ACjNcwAozaMAKM3TACjODwAozkcAKM6HACjO3wAozzcAKM+nACjP8wAo0BcAKNBnACjQzwAo0QcAKNFDACjRhwAo0ccAKNIbACjSVwAo0pcAKNKnACjSuwAo0tcAKNL7ACjTMwAo02MAKNOPACjT6wAo1DMAKNRrACjUmwAo1MMAKNTXACjVPwAo1WcAKNWbACjV4wAo1gcAKNYnACjWRwAo1m8AKNaTACjWywAo1wsAKNdDACjXpwAo18cAKNg3ACjYlwAo2PMAKNkrACjZWwAo2Y8AKNnbACjaDwAo2j8AKNpjACjatwAo2tsAKNs7ACjbkwAo27sAKNvrACjcGwAo3F8AKNx7ACjc0wAo3PMAKN1DACjdnwAo3fsAKN4vACjeTwAo3lsAKN53ACjejwAo3sMAKN7fACjfJwAo31sAKN/DACjf7wAo4BMAKOBHACjgewAo4K8AKODPACjhAwAo4ZMAKOIHACjikwAo4vMAKONbACjjwwAo5CMAKORLACjkswAo5RsAKOVzACjmAwAo5ksAKOaPACjm1wAo5w8AKOdzACjn0wAo6DcAKOhzACjoywAo6QcAKOlfACjptwAo6g8AKOpnACjq0wAo6zcAKOuvACjsBwAo7F8AKOyTACjs6wAo7QMAKO0zACjtWwAo7WsAKO2XACjt2wAo7ecAKO3zACjt/wAo7gsAKO4XACjuIwAo7i8AKO47ACjuRwAo7lMAKO5fACjuawAo7ncAKO6DACjujwAo7psAKO6nACjuswAo7r8AKO7LACju1wAo7uMAKO7vACju+wAo7wcAKO8TACjvHwAo7ysAKO83ACjvQwAo708AKO9bACjvZwAo73MAKO9/ACjviwAo75cAKO+jACjvrwAo77sAKO/HACjv0wAo798AKO/rACjv9wAo8AMAKPAPACjwGwAo8CcAKPAzACjwPwAo8EsAKPBXACjwYwAo8G8AKPB7ACjwhwAo8JMAKPCfACjwqwAo8LcAKPDDACjwzwAo8NsAKPDnACjw8wAo8P8AKPELACjxFwAo8SMAKPEvACjxOwAo8UcAKPFTACjxXwAo8WsAKPF3ACjxgwAo8Y8AKPGbACjxpwAo8bMAKPG/ACjxywAo8dcAKPHjACjx7wAo8fsAKPIHACjyEwAo8hsAKPIjACjyKwAo8jMAKPI7ACjyQwAo8ksAKPJPACjyUwAo8lcAKPJbACjyXwAo8mMAKPJnACjyawAo8nMAKPJ7ACjygwAo8osAKPKTACjymwAo8qMAKPKrACjyswAo8rsAKPLDACjyywAo8tMAKPLbACjy4wAo8usAKPLzACjy+wAo8wMAKPMLACjzEwAo8xsAKPMjACjzKwAo8zMAKPM7ACjzQwAo80sAKPNTACjzWwAo82MAKPNrACjzcwAo83sAKPODACjziwAo85MAKPObACjzowAo86sAKPOzACjzuwAo88MAKPPLACjz0wAo89sAKPPjACjz6wAo8/MAKPP7ACj0AwAo9AsAKPQTACj0GwAo9CMAKPQrACj0MwAo9DsAKPRDACj0SwAo9FMAKPRbACj0YwAo9GsAKPRzACj0ewAo9IMAKPSLACj0kwAo9JsAKPSjACj0qwAo9LMAKPS7ACj0wwAo9MsAKPTTACj02wAo9OMAKPTrACj08wAo9PsAKPUDACj1CwAo9RMAKPUbACj1IwAo9SsAKPUzACj1OwAo9V8AKPWDACj1pwAo9dsAKPYPACj2UwAo9qcAKPazACj21wAo9ysAKPdDACj3hwAo95sAKPfTACj4CwAo+CcAKPhDACj4XwAo+HcAKPifACj4ywAo+PMAKPkbACj5OwAo+VMAKPlvACj5nwAo+ccAKPn3ACj6IwAo+k8AKPqHACj6nwAo+uMAKPsrACj7XwAo+68AKPv3ACj8VwAo/IMAKPzTACj9DwAo/T8AKP2TACj9wwAo/e8AKP4/ACj+zwAo/w8AKP9DACj/fwAo/58AKP/DACkAJwApAHMAKQC3ACkBQwApAZ8AKQHXACkB6wApAjMAKQJbACkCtwApAw8AKQNvACkEAwApBDMAKQRrACkEgwApBJMAKQTTACkFAwApBR8AKQU3ACkFYwApBYMAKQWvACkF+wApBhMAKQY7ACkGYwApBosAKQaXACkG0wApBzsAKQdjACkHjwApB6sAKQfvACkIJwApCFsAKQinACkI0wApCRcAKQlrACkJpwApCgsAKQovACkKewApCpsAKQrjACkLMwApC2sAKQvDACkMDwApDDsAKQyfACkM6wApDPcAKQ0HACkNUwApDZcAKQ3DACkN7wApDisAKQ5XACkOfwApDrcAKQ8DACkPiwApD78AKRA/ACkQhwApEK8AKRD7ACkRCwApES8AKRFnACkRywApEfsAKRI3ACkShwApEtsAKRNXACkTfwApE7MAKRPzACkUJwApFE8AKRR7ACkUqwApFN8AKRUjACkVhwApFfsAKRZLACkWmwApFucAKRcvACkXTwApF2MAKRenACkX5wApGB8AKRhvACkYswApGMsAKRkLACkZewApGacAKRn7ACkadwApGucAKRsvACkbXwApG5sAKRv7ACkcLwApHHcAKRynACkc2wApHSMAKR1rACkdmwApHeMAKR4rACkeYwApHocAKSSHACkkqwApKp8AKSrjACkrYwApK6sAKSwnACksYwApLIsAKSy/ACksywApLOcAKSz3ACktHwApLTcAKS1bACktiwApLacAKS3/ACkuXwApLvMAKS8/ACkvcwApL6sAKTALACkwnwApMPcAKTFPACkxfwApMeMAKTH7ACkyGwApMn8AKTKzACkzBwApM0cAKTNnACkznwApM9MAKTPjACk0IwApNG8AKTTDACk1FwApNT8AKTVbACk2KwApNnsAKTafACk2ywApNuMAKTb7ACk3GwApN2sAKTeLACk30wApOBsAKThPACk4gwApOK8AKTjXACk5DwApOT8AKTlrACk5hwApOcsAKTnjACk5/wApOiMAKTpDACk6WwApOnsAKTqTACk6vwApOtsAKTr7ACk7DwApOyMAKTszACk7QwApO1sAKTt/ACk7mwApO7sAKTvbACk8DwApPHcAKTy3ACk85wApPWMAKT5HACk+5wApPvcAKT8LACk/FwApPycAKT8/ACk/awApP5cAKT+jAClACwApQHMAKUDLAClA8wApQXcAKUHvAClB/wApQkMAKUKrAClDIwApQ3cAKUO7AClEXwApRN8AKUVjAClGBwApRksAKUZ3AClGnwApRssAKUbvAClHIwApR08AKUdfAClHawApR3cAKUeDAClHmwApR9MAKUgXAClIWwApSIsAKUi7AClI4wApSQsAKUk/AClJkwApSasAKUnrAClKGwApSkcAKUpnAClKowApSssAKUs3AClLfwApS7cAKUvvAClMDwApTG8AKUyzAClM5wApTSMAKU1bAClNdwApTdsAKU3vAClOMwApToMAKU67AClO+wApTz8AKU+LAClPqwApT8cAKVAHAClQIwApUDcAKVBjAClQcwApUH8AKVCnAClQ1wApUP8AKVELAClRYwApUYcAKVGvAClR1wApUgcAKVITAClSSwApUocAKVKjAClSrwApUs8AKVMPAClTOwApU1MAKVN3AClTpwApU+MAKVQLAClUPwApVGMAKVR/AClUmwApVMcAKVT/AClVHwApVYcAKVXbAClWGwApVlMAKVZ/AClW0wApVycAKVdzAClXuwApWA8AKVhbAClYowApWNsAKVkPAClZQwApWWcAKVmbAClZuwApWdMAKVnvAClaEwApWjcAKVpbAClabwApWqsAKVrnAClbDwApW1sAKVuXAClbzwApXA8AKVxLAClcgwApXLcAKVzbACldCwApXUsAKV17ACldowApXeMAKV3vACleMwApXl8AKV6HAClezwApXwMAKV8nAClfdwApX7MAKV/vAClgEwApYC8AKWBvAClg3wApYVsAKWGXAClhwwApYjMAKWKLACliswApYvsAKWNrACljwwApZDMAKWSXAClk0wApZWMAKWWLAClmKwApZrMAKWbLAClm5wApZz8AKWdrAClnqwApZ+cAKWiDAClo1wApaSMAKWlzAClpuwApahsAKWq/AClq9wApa0MAKWwTAClsRwApbHcAKWzXACls9wApbTcAKW1TACltnwApbc8AKW5PACluXwApbrMAKW9TAClvewApb9cAKXAbAClw9wApcYsAKXHPAClyNwApcn8AKXLXACly7wApcx8AKXM3AClzXwApc6sAKXPrACl0EwApdDsAKXRvACl0kwApdN8AKXUHACl1QwApdYMAKXWjACl14wApdhMAKXY/ACl2WwApdncAKXaPACl2zwApdysAKXdzACl3wwApd+sAKXgXACl4gwApeLsAKXlfACl6BwApekcAKXp7ACl6wwApevsAKXtfACl8IwApfIcAKXzzACl9GwApfUcAKX2DACl9swApfc8AKX4TACl+OwApfmsAKX5zACl+rwApfsMAKX7rACl/GwApf5MAKX+vACl/zwApgAMAKYAjACmAQwApgTsAKYFTACmBcwApgXsAKYGfACmBtwApge8AKYIjACmCSwApgpcAKYLjACmDLwApg3sAKYPDACmEDwAphFsAKYSnACmE7wAphTsAKYWDACmFzwAphhcAKYZjACmGqwAphvMAKYc/ACmHiwAph9MAKYgbACmIYwApiK8AKYj3ACmJPwApiYcAKYnPACmKGwApimcAKYqzACmK+wApix8AKYtDACmLswApi98AKYxbACmMpwApjPcAKY0nACmNLwApjU8AKY1nACmNuwApjfMAKY4rACmORwApjmcAKY6PACmOxwApjucAKY8PACmPYwApj7cAKZBjACmRDwApkTsAKZGbACmR9wApkmMAKZJ7ACmSxwApkvsAKZMnACmTUwApk2sAKZO3ACmUgwAplMcAKZUPACmVYwAplZMAKZXDACmV4wAplgcAKZZjACmWuwAplu8AKZcfACmXQwApl2sAKZfvACmYJwApmGsAKZibACmY1wApmRMAKZljACmZywApmfcAKZo7ACmanwApmuMAKZs/ACmbkwApm+sAKZwfACmcWwApnKMAKZy3ACmc5wApnSMAKZ1XACmdkwApn5MAKZ/PACmgIwApoC8AKaBbACmgawApoKsAKaDzACmhNwApoVsAKaGDACmhxwApohMAKaJDACmiVwApoo8AKaLHACmi8wApoycAKaNbACmjiwApo+MAKaP3ACmkJwAppFcAKaSHACmkuwAppP8AKaVPACmlwwAppeMAKaYPACmmSwAppnsAKaarACmm2wAppx8AKaePACmnywApqB8AKaiXACmo0wApqTMAKalrACmpiwApqdsAKan7ACmqHwApqr8AKarnACmq8wApqxcAKatLACmrgwApq7cAKawXACmsTwAprJcAKayzACms7wAprRMAKa03ACmtWwAprX8AKa2jACmtywAprf8AKa4fACmuKwAprlMAKa5vACmujwAprpsAKa7XACmvJwApr2MAKa+jACmv8wApsBsAKbBDACmwgwApsMMAKbEHACmxXwApsYMAKbGnACmx6wApspcAKbMrACmzawAps8MAKbPjACm0vwAptXsAKbXLACm1+wApthcAKbZnACm26wAptx8AKbczACm3awApt+MAKbi7ACm5owApudsAKbnrACm6KwApuk8AKbpnACm6iwApur8AKbr3ACm7NwApu4cAKbvHACm8FwApvFcAKbyHACm8ywApvRcAKb1jACm9mwApvc8AKb4HACm+WwApvpcAKb7HACm/DwApv2MAKb+HACm/1wApwAsAKcA7ACnAZwApwKMAKcDTACnA+wApwTMAKcFbACnBdwApwZsAKcHLACnB9wApwhMAKcJPACnCrwApww8AKcM3ACnDzwApw+8AKcQjACnEfwApxQsAKcU7ACnFawApxc8AKcY7ACnGmwApxu8AKccfACnHWwApx6cAKce3ACnHxwApyIMAKclDACnJYwApyYMAKcm3ACnJ4wApyi8AKcpTACnKdwApyp8AKcsvACnLRwApy3MAKct/ACnLrwApy+MAKcwjACnMUwApzN8AKc0XACnNWwApzYcAKc27ACnObwApzrMAKc8TACnPXwApz5MAKc+3ACnP/wAp0I8AKdDPACnRBwAp0S8AKdHPACnSBwAp0jsAKdJ7ACnSnwAp0tsAKdMbACnTRwAp04cAKdO3ACnUCwAp1C8AKdR3ACnUwwAp1O8AKdUTACnVMwAp1U8AKdWnACnVrwAp1fcAKdZPACnWgwAp1o8AKda/ACnW9wAp1x8AKddHACnXbwAp15sAKdfDACnYUwAp2RsAKdm/ACnZywAp2lMAKdpjACnbUwAp3E8AKdx7ACndVwAp3ZsAKd3jACneGwAp3lcAKd5fACnemwAp3usAKd8PACnfNwAp328AKd+bACnf4wAp4DMAKeBbACnghwAp4QMAKeE3ACnhjwAp4dMAKeHvACniEwAp4lcAKeJ7ACnilwAp4tMAKeL7ACnjKwAp41cAKeOHACnjpwAp48sAKeQfACnknwAp5TcAKeVfACnlowAp5ccAKeZLACnm0wAp5wMAKedHACnnswAp59sAKegDACnoOwAp6GsAKeiLACnoqwAp6MMAKejvACnpRwAp6YsAKem/ACnp8wAp6i8AKepnACnqjwAp6rcAKerfACnrBwAp6y8AKetbACnrkwAp68MAKevfACnr+wAp7BsAKexDACnsZwAp7H8AKe1TACntbwAp7acAKe3XACnuBwAp7h8AKe43ACnuWwAp7nMAKe6TACnu8wAp7xcAKe8/ACnvYwAp748AKe+7ACnvzwAp7+8AKfAXACnwKwAp8EMAKfBfACnwkwAp8McAKfD7ACnxIwAp8VsAKfGPACnxwwAp8fcAKfIfACnyWwAp8pcAKfLTACnzDwAp808AKfObACnz1wAp8/sAKfRHACn0dwAp9K8AKfS/ACn0zwAp9PcAKfVPACn1vwAp9gsAKfYrACn2YwAp9oMAKfa7ACn3BwAp93MAKffDACn4AwAp+DcAKfhPACn4kwAp+LMAKfjbACn6DwAp+hcAKfofACn6JwAp+jMAKfpHACn6gwAp+s8AKfr3ACn7IwAp+1sAKfufACn71wAp/BcAKfxbACn8kwAp/N8AKf0XACn9bwAp/XcAKf27ACn94wAp/hMAKf5DACn+bwAp/scAKf7vACn/DwAp/0cAKf+DACn/zwAp/98AKgALACoAOwAqAIcAKgC/ACoBDwAqAUsAKgGbACoB1wAqAh8AKgJTACoCdwAqAoMAKgKvACoCwwAqAw8AKgNDACoDiwAqA78AKgP/ACoEUwAqBJMAKgTnACoFJwAqBXMAKgWrACoF/wAqBj8AKgZ/ACoGqwAqBvMAKgcnACoHawAqB5sAKgfDACoH6wAqB/sAKggrACoIQwAqCHcAKgifACoIxwAqCPsAKgkbACoJbwAqCbMAKgn3ACoKKwAqCl8AKgp/ACoK2wAqCycAKgtvACoLowAqC9sAKgwfACoMTwAqDH8AKgzbACoNIwAqDYMAKg3PACoN+wAqDi8AKg5LACoOiwAqDrcAKg7XACoO3wAqDxMAKg8vACoPhwAqD8sAKg//ACoQGwAqEFcAKhB/ACoQpwAqELcAKhDbACoRDwAqEWMAKhGjACoRuwAqEhsAKhJTACoSzwAqEwsAKhOLACoTxwAqFEcAKhR7ACoU8wAqFP8AKhVTACoVZwAqFcMAKhX3ACoWcwAqFqcAKhcfACoXRwAqF7cAKhf3ACoYewAqGLsAKhk/ACoZdwAqGfMAKhozACoatwAqGuMAKhtTACobhwAqG/8AKhwvACocowAqHLMAKh0LACodGwAqHXMAKh2LACod6wAqHgcAKh5rACoeewAqHtMAKh7jACofOwAqH1sAKh+/ACogAwAqIIcAKiC7ACohLwAqIU8AKiGzACoh/wAqIosAKiK/ACojNwAqI1cAKiO/ACoj7wAqJGMAKiR7ACok2wAqJSMAKiWvACol+wAqJosAKiafACom+wAqJxcAKid7AConpwAqKBcAKigvACoojwAqKJcAKijnACopAwAqKWcAKimrACoqMwAqKk8AKiqzACoq2wAqK0cAKitXACorrwAqK7sAKiwPACoscwAqLLMAKi03ACotZwAqLX8AKi27ACot4wAqLfsAKi5bACougwAqLu8AKi8nACovYwAqL8sAKi//ACowNwAqMJsAKjDXACoxFwAqMYMAKjG7ACox9wAqMl8AKjKbACoyzwAqMysAKjNPACozewAqM8MAKjP7ACo0PwAqNGsAKjR/ACo0jwAqNM8AKjTfACo1HwAqNS8AKjVvACo1nwAqNecAKjYTACo2LwAqNkcAKjZfACo2fwAqNscAKjbzACo3IwAqNz8AKjdbACo3lwAqN8cAKjfnACo4FwAqOEcAKjiDACo4xwAqOTMAKjlzACo5uwAqOisAKjpvACo6pwAqOssAKjsLACo7JwAqOz8AKjtjACo7gwAqO58AKjvPACo8BwAqPBsAKjxHACo8awAqPMsAKj0PACo9WwAqPbMAKj3vACo+HwAqPmcAKj6nACo+zwAqPvMAKj8fACo/pwAqQGcAKkEjACpB1wAqQgsAKkI7ACpCYwAqQrcAKkMfACpDPwAqQ6sAKkPzACpEIwAqRFsAKkSLACpEvwAqRPsAKkUbACpFXwAqRasAKkXbACpF5wAqRe8AKkX3ACpGIwAqRlMAKkafACpGzwAqRt8AKkcHACpHOwAqR3sAKkenACpHywAqSBcAKkhzACpIlwAqSOMAKkobACpKVwAqSpsAKkrjACpLHwAqSycAKktbACpMKwAqTGMAKkyPACpMpwAqTMMAKkznACpNFwAqTUsAKk1vACpNkwAqTZsAKk2jACpNqwAqTbMAKk3DACpOAwAqTi8AKk4/ACpORwAqTk8AKk5XACpOawAqTnMAKk6TACpOnwAqTqsAKk63ACpOwwAqTs8AKk7bACpO5wAqTvMAKk7/ACpPCwAqTxcAKk8jACpPLwAqTzsAKk9HACpPUwAqT18AKk9rACpPdwAqT38AKk+HACpPlwAqT58AKk/TACpQAwAqUDcAKlB/ACpQswAqUMsAKlDnACpRCwAqUSsAKlFDACpRYwAqUXsAKlGnACpRywAqUe8AKlH7ACpSOwAqUosAKlKfACpSywAqUwMAKlMjACpTLwAqUzsAKlNHACpTUwAqU18AKlNrACpTdwAqU4MAKlOPACpTmwAqU7cAKlPrACpUCwAqVCcAKlRPACpUbwAqVJ8AKlS/ACpU3wAqVSMAKlVbACpVrwAqVg8AKlZjACpWswAqVusAKldnACpXmwAqV7cAKlfDACpYwwAqWQMAKlkrACpaBwAqWncAKltvACpbkwAqW9cAKlv3ACpcFwAqXEMAKlx7ACpctwAqXPsAKl1LACpdlwAqXhsAKl5TACpewwAqXu8AKl8bACpfOwAqX28AKl+zACpfywAqX+8AKmAXACpgQwAqYHsAKmD7ACphMwAqYbcAKmHnACpiQwAqYocAKmL3ACpjIwAqY18AKmOnACpj8wAqZCMAKmRTACpkcwAqZKMAKmS/ACplDwAqZYcAKmXDACpmCwAqZlcAKmZzACpmkwAqZrsAKmbjACpnBwAqZyMAKmdDACpnawAqZ58AKmhXACppEwAqaTsAKmlvACppqwAqaeMAKmoTACpqMwAqamcAKmqfACpqvwAqaycAKmtLACprawAqa7cAKmvnACpsEwAqbE8AKmxvACpsowAqbP8AKm0nACptTwAqbXMAKm2vACpt1wAqbfsAKm4/ACpuXwAqbp8AKm7HACpu+wAqb0cAKm93ACpvvwAqcA8AKnA3ACpwiwAqcJsAKnCrACpxWwAqcbMAKnH/ACpyQwAqcqMAKnLHACpzEwAqc0cAKnNrACpzfwAqc7MAKnPvACp0QwAqdFsAKnSbACp03wAqdTsAKnWDACp11wAqdh8AKnZDACp2VwAqdmMAKnaLACp2nwAqdtcAKncHACp3ZwAqd6MAKnfzACp4IwAqeFcAKnh7ACp4mwAqeLsAKnjzACp5PwAqeW8AKnm7ACp57wAqehsAKnpPACp6cwAqeqsAKnrjACp7CwAqe08AKnufACp70wAqfAMAKnwvACp8RwAqfHMAKnyXACp84wAqfP8AKn0fACp9kwAqfbsAKn3vACp+KwAqfmsAKn6vACp+wwAqfucAKn8XACp/OwAqf4MAKn+vACp/3wAqgB8AKoBDACqAZwAqgK8AKoDnACqBWwAqgZsAKoG7ACqBywAqggcAKoJTACqCswAqgwMAKoNbACqD1wAqhB8AKoRzACqErwAqhNsAKoUnACqFZwAqhc8AKoXrACqGMwAqhnsAKoafACqG3wAqhxMAKodjACqHjwAqh68AKogLACqINwAqiIMAKoijACqIvwAqiO8AKokjACqJQwAqiXcAKonPACqKAwAqiisAKopbACqKrwAqiuMAKor3ACqLGwAqizsAKotnACqLqwAqi9sAKowHACqMQwAqjH8AKoyzACqM4wAqjZsAKo4TACqOQwAqjycAKo9nACqQFwAqkIcAKpDDACqRFwAqkUMAKpFjACqRiwAqkbcAKpIPACqSQwAqknsAKpNnACqUHwAqlLMAKpTbACqU7wAqlSsAKpU7ACqVUwAqlZcAKpW7ACqV0wAqlfsAKpY/ACqWXwAqlsMAKpbnACqXMwAql9sAKpgTACqYVwAqmNsAKpkLACqZKwAqmTsAKplfACqZmwAqmd8AKpnzACqaDwAqmj8AKpprACqahwAqmqsAKprLACqa/wAqmy8AKptvACqbrwAqm8sAKpvnACqcMwAqnKcAKp0DACqdOwAqnbsAKp3TACqd6wAqnjsAKp5nACqehwAqns8AKp8XACqfRwAqn28AKp+fACqgAwAqoCMAKqBnACqgpwAqoQsAKqFbACqhfwAqoaMAKqHbACqiGwAqojcAKqJ3ACqiswAqoxcAKqNHACqjXwAqo4cAKqObACqjswAqo9MAKqPvACqkDwAqpC8AKqRXACqkfwAqpKsAKqTXACqlkwAqpc8AKqXrACql/wAqph8AKqZDACqmcwAqppcAKqbDACqm5wAqpx8AKqc/ACqnbwAqp68AKqfTACqn7wAqqBsAKqh/ACqozwAqqOMAKqkHACqpIwAqqUsAKqljACqpcwAqqY8AKqmvACqqNwAqqmMAKqqDACqqtwAqqucAKqsvACqrbwAqq9sAKqwXACqsPwAqrJcAKqyzACqs8wAqrScAKq2zACqtwwAqrf8AKq5LACquewAqrq8AKq8fACqvPwAqr3cAKq/DACqv/wAqsFMAKrBvACqwiwAqsJ8AKrC3ACqwywAqsN8AKrEPACqxGwAqsVsAKrF7ACqxnwAqseMAKrIbACqycwAqst8AKrNPACqzWwAqs3MAKrN7ACqzlwAqs78AKrPjACq0BwAqtCMAKrRXACq0cwAqtJsAKrSzACq04wAqtRcAKrUvACq1PwAqtV8AKrV3ACq1jwAqtcMAKrXnACq17wAqtf8AKrYnACq2OwAqtlMAKrbPACq3IwAqt28AKrevACq4EwAquF8AKrjDACq5LwAquX8AKrmvACq53wAquicAKrpXACq6zwAquy8AKrtjACq7uwAqvBMAKrw7ACq8iwAqvM8AKr0fACq9bwAqvX8AKr2fACq9uwAqvfsAKr4rACq+WwAqvosAKr6nACq+xwAqv0MAKr9vACq/mwAqv8MAKsALACrAXwAqwIsAKsC/ACrA9wAqwTsAKsFrACrBrwAqwgMAKsIzACrCYwAqwpMAKsLbACrC+wAqwzMAKsN3ACrDkwAqw78AKsP7ACrEQwAqxFsAKsSPACrExwAqxOcAKsUTACrFTwAqxYcAKsXrACrGTwAqxqcAKsb7ACrHSwAqx2cAKsezACrIIwAqyJsAKsj/ACrJKwAqyYcAKsmvACrJ4wAqygcAKspDACrKdwAqyq8AKstHACrMCwAqzMcAKszzACrNMwAqzWMAKs2TACrN3wAqzh8AKs4vACrOPwAqzo8AKs6/ACrO4wAqzyMAKs83ACrPkwAqz7cAKs/fACrP/wAq0DsAKtCHACrQwwAq0NsAKtEXACrRXwAq0YcAKtGzACrR5wAq0hsAKtJrACrStwAq0vsAKtM3ACrTawAq048AKtPDACrT/wAq1C8AKtRvACrUqwAq1QcAKtVDACrVdwAq1dsAKtYLACrWQwAq1qcAKtbPACrXIwAq11sAKte/ACrX/wAq2GsAKtifACrY/wAq2UcAKtm3ACrZ9wAq2mMAKtrLACrbVwAq25cAKtwDACrcPwAq3KMAKt0PACrdowAq3dcAKt43ACrefwAq3scAKt8/ACrfdwAq34MAKt/rACrgRwAq4KMAKuDvACrhOwAq4acAKuHLACrh1wAq4i8AKuKbACri/wAq42cAKuPLACrkKwAq5F8AKuSnACrlDwAq5X8AKuXnACrmVwAq5n8AKubPACrnDwAq5zsAKud7ACrnnwAq58cAKugfACroXwAq6KsAKujbACrquwAq6wMAKusrACrrxwAq7HMAKuybACrsvwAq7OsAKu0zACrtgwAq7dcAKu4XACruRwAq7m8AKu6XACruvwAq7ucAKu8PACrvIwAq7zMAKu9DACrvawAq75MAKu+7ACrv4wAq8AsAKvBDACrwpwAq8RsAKvE/ACrxXwAq8XsAKvGHACrxlwAq8acAKvG3ACrxzwAq8d8AKvILACryJwAq8kMAKvKLACry7wAq80cAKvODACrzzwAq8/sAKvQvACr0TwAq9G8AKvT7ACr1HwAq9VcAKvWTACr1vwAq9eMAKvYXACr2MwAq9nMAKvazACr22wAq9v8AKvcrACr3rwAq+DsAKvhvACr4vwAq+RcAKvlPACr5hwAq+esAKvovACr6XwAq+n8AKvsDACr7HwAq+0MAKvuHACr8FwAq/GcAKvy/ACr82wAq/ccAKv4bACr+VwAq/rcAKv6/ACr/AwAq/1cAKv/DACr/+wArADMAKwCLACsBDwArASsAKwFTACsBxwArAf8AKwKHACsCpwArAtsAKwMXACsDQwArA2sAKwOTACsDnwArA8sAKwPvACsENwArBGcAKwSrACsEvwArBOsAKwV/ACsFtwArBeMAKwYvACsGWwArBosAKwazACsG4wArBxcAKwc/ACsHawArB5cAKwefACsHqwArCAsAKwgvACsIYwArCIMAKwi/ACsJOwArChsAKwpTACsKiwArC3MAKwwbACsMgwArDLcAKw0PACsNYwArDZcAKw3rACsOBwArDicAKw5fACsOmwArDu8AKw8vACsPewArD7MAKxATACsQcwArEMMAKxETACsRTwArEWMAKxGLACsSIwArEqcAKxNjACsT6wArFJ8AKxUrACsVrwArFmcAKxcTACsXnwArGAcAKxhjACsY6wArGc8AKxq7ACsbpwArHHcAKx1bACseHwArHvsAKx+/ACsgbwArIRMAKyHTACsicwArI3MAKyRLACsk+wArJe8AKybjACsnhwArKF8AKykrACsp0wArKrcAKyt3ACsr7wArLHMAKyzzACstkwArLi8AKy7DACsvVwArL/cAKzCfACsxLwArMZsAKzIjACsyxwArM0cAKzPXACs0YwArNNsAKzVrACs2DwArNsMAKze/ACs4mwArOT8AKznjACs6fwArOzsAKzwDACs8uwArPVsAKz33ACs+xwArP48AK0AnACtA6wArQb8AK0JzACtDMwArQ88AK0SXACtFewArRlcAK0dDACtIAwArSNMAK0mzACtKgwArS1cAK0v3ACtMjwArTQ8AK02XACtOTwArTuMAK0+bACtQEwArUJMAK1FzACtR4wArUmcAK1LTACtTYwArVFcAK1UXACtV4wArVrMAK1cXACtXqwArWIMAK1lbACtaQwArWwcAK1vrACtcgwArXXMAK15rACtfPwArYCcAK2EHACth7wArYq8AK2MfACtkCwArZO8AK2WvACtmnwArZ4MAK2hrACtpQwAragcAK2qrACtrQwAra98AK2x3ACttTwArbhsAK28PACtwBwArcNMAK3GXACtyhwArc5MAK3RLACt1QwArdh8AK3b3ACt4CwArePcAK3mvACt6WwAre1sAK3wnACt83wArfZcAK357ACt/NwArf/sAK4C3ACuBWwArggMAK4KjACuDCwArg6MAK4Q3ACuE2wArhXcAK4ZDACuGzwArh3sAK4f/ACuIqwAriYsAK4ozACuK+wAri5sAK4xXACuNBwArjc8AK46HACuPRwArj+MAK5CTACuRWwArkecAK5KTACuTcwArlF8AK5UbACuVlwArlpMAK5dPACuX7wArmJsAK5kTACuaDwArmwsAK5v3ACuc8wArneMAK567ACuffwAroBsAK6DzACuhzwArorsAK6ObACukjwArpYMAK6ZrACunOwArp/MAK6iPACupKwArqisAK6rnACur2wArrNMAK62/ACuukwArr18AK7A7ACuxGwArshsAK7MvACu0SwArtWcAK7YXACu3CwAruCMAK7jzACu55wArursAK7uTACu8lwArvX8AK753ACu/awArwE8AK8FXACvCLwArwxsAK8P3ACvEywArxc8AK8bHACvHpwAryI8AK8lPACvKBwArytcAK8uPACvMgwArzWsAK85LACvPFwArz/cAK9CnACvRfwAr0p8AK9M7ACvUAwAr1L8AK9V7ACvWFwAr1sMAK9d3ACvYTwAr2SMAK9mnACvaLwAr2tcAK9t3ACvb8wAr3JsAK90/ACvd5wAr3n8AK98XACvftwAr4HsAK+FHACviBwAr4qsAK+NnACvkDwAr5IcAK+UrACvl4wAr5q8AK+dbACvoGwAr6NcAK+mXACvqhwAr6ycAK+vvACvsxwAr7Z8AK+5XACvvHwAr7+MAK/CPACvxPwAr8b8AK/KjACvzawAr9FMAK/UrACv15wAr9r8AK/d3ACv4QwAr+RcAK/oLACv65wAr+7sAK/x3ACv9FwAr/ccAK/5TACv++wAr/5MALABfACwBCwAsAdcALAKHACwDMwAsA9MALARjACwE7wAsBY8ALAYfACwGpwAsB28ALAhPACwJQwAsCecALAqfACwLTwAsDBMALAzbACwNXwAsDf8ALA63ACwPmwAsEDMALBDvACwRnwAsEo8ALBNDACwT7wAsFK8ALBVnACwWQwAsFvcALBf7ACwY0wAsGbcALBqjACwbiwAsHFMALB0zACweGwAsHw8ALB/TACwgzwAsId8ALCLPACwjqwAsJFMALCUfACwl+wAsJqMALCc7ACwn7wAsKJcALCkrACwpwwAsKlcALCsLACwrlwAsLF8ALCznACwtbwAsLhMALC6/ACwvZwAsL+sALDCjACwxbwAsMjMALDLbACwznwAsNGMALDUDACw1xwAsNn8ALDczACw35wAsOK8ALDlnACw6BwAsOrcALDubACw8nwAsPZsALD6PACw/YwAsQFcALEFDACxCAwAsQqsALEN3ACxEJwAsRM8ALEWPACxGZwAsRwcALEerACxIawAsSScALEmvACxKNwAsSssALEtbACxMFwAsTQMALE27ACxOTwAsT0sALFAjACxQ9wAsUf8ALFLXACxTiwAsVEsALFUnACxV9wAsVrMALFd7ACxYFwAsWJ8ALFk3ACxZ6wAsWucALFvTACxcuwAsXVcALF3nACxehwAsXycALF+7ACxgWwAsYQMALGGbACxiLwAsYvMALGOzACxkQwAsZM8ALGWHACxmZwAsZxsALGfHACxoUwAsaQ8ALGnLACxqowAsa1MALGvXACxsnwAsbVMALG27ACxumwAsby8ALG+nACxwFwAscIcALHDzACxxYwAscdsALHJLACxy1wAsc1sALHPPACx0cwAsdSsALHWbACx2GwAsdtsALHdjACx38wAseIMALHkjACx5wwAselcALHrPACx6/wAsezcALHtXACx7hwAse6sALHvfACx8IwAsfF8ALHyTACx83wAsfP8ALH0jACx9SwAsfcmNvbXBpbGVyLmJpbi5kYXJ0MmpzZGFydDJqcy5jbWRsaW5lRnV0dXJldXRmOExpbmVTcGxpdHRlcmV4aXRGaWxlRmlsZU1vZGVQbGF0Zm9ybXN0ZGluc3RkZXJySXNvbGF0ZWZlYXBpQ29tcGlsZXJPcHRpb25zc3RhY2tUcmFjZUZpbGVQcmVmaXhIYW5kbGVPcHRpb25kYXRhRXhpdEZ1bmNleGl0Q29kZUNvbXBpbGVGdW5jY29tcGlsZXJPcHRpb25zY29tcGlsZXJJbnB1dGNvbXBpbGVyRGlhZ25vc3RpY3Njb21waWxlck91dHB1dE9wdGlvbkhhbmRsZXJwYXR0ZXJuX2hhbmRsZW11bHRpcGxlQXJndW1lbnRzaGFuZGxlYXJndW1lbnRjYWxsQWJvcnRMZWdtZXNzYWdldG9TdHJpbmdBYm9ydGVkIGR1ZSB0byAtLXRocm93LW9uLWVycm9yOiBfRXhpdFNpZ25hbFJlYWRTdHJhdGVneWluZGV4X25hbWV2YWx1ZXNSZWFkU3RyYXRlZ3kuZnJvbURhcnRSZWFkU3RyYXRlZ3kuZnJvbURhdGFSZWFkU3RyYXRlZ3kuZnJvbUNvZGVnZW5mcm9tRGFydGZyb21EYXRhZnJvbUNvZGVnZW5Xcml0ZVN0cmF0ZWd5V3JpdGVTdHJhdGVneS50b0tlcm5lbFdyaXRlU3RyYXRlZ3kudG9EYXRhV3JpdGVTdHJhdGVneS50b0NvZGVnZW5Xcml0ZVN0cmF0ZWd5LnRvSnN0b0tlcm5lbHRvRGF0YXRvQ29kZWdlbnRvSnNfZGVmYXVsdFNwZWNpZmljYXRpb25VcmkuLi8uLi8uLi8uLi9zZGsvbGliL2xpYnJhcmllcy5qc29uT1VUUFVUX0xBTkdVQUdFX0RBUlREYXJ0QlVJTERfSURkaWFnbm9zdGljSGFuZGxlcmV4aXRGdW5jY29tcGlsZUZ1bmNlbmFibGVXcml0ZVN0cmluZ19FWElUX1NJR05BTGV4dHJhY3RQYXJhbWV0ZXJpc09wdGlvbmFsQXJndW1lbnRtXigtW2EtekEtWl18LS0uKz0pKC4qKWZpcnN0TWF0Y2g9PVVua25vd24gb3B0aW9uICIiLltdZXh0cmFjdFBhdGhpc0RpcmVjdG9yeXBhdGhlbmRzV2l0aC9wYXJzZUNvbW1hbmRMaW5laGFuZGxlcnNhcmd2cGF0dGVybnNoYW5kbGVyYWRkXihqb2luKSR8XigpJGFyZ3VtZW50c2l0ZXJhdG9ybW92ZU5leHRjdXJyZW50bWF0Y2hncm91cENvdW50bGVuZ3RoaTwrSW50ZXJuYWwgZXJyb3I6ICIiIGRpZCBub3QgbWF0Y2hjb21waWxla2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRld2FsbGNsb2Nrc3RhcnRsaWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpcmVzb2x2ZWxpYi9saWJyYXJpZXMuanNvbm91dHB1dFNwZWNpZmllZG91dHNvdXJjZU1hcE91dHJlYWREYXRhVXJpd3JpdGVEYXRhVXJpcmVhZENvZGVnZW5Vcml3cml0ZUNvZGVnZW5Vcmljb2RlZ2VuU2hhcmRjb2RlZ2VuU2hhcmRzYmF6ZWxQYXRoc3BhY2thZ2VDb25maWdwYWNrYWdlUm9vdG9wdGlvbnN3YW50SGVscHdhbnRWZXJzaW9udHJ1c3RUeXBlQW5ub3RhdGlvbnNjaGVja2VkTW9kZXN0cm9uZ01vZGVoaW50c3ZlcmJvc2V0aHJvd09uRXJyb3J0aHJvd09uRXJyb3JDb3VudHNob3dXYXJuaW5nc3Nob3dIaW50c2VuYWJsZUNvbG9yc29wdGltaXphdGlvbkxldmVscGxhdGZvcm1CaW5hcmllc2Vudmlyb25tZW50cmVhZFN0cmF0ZWd5d3JpdGVTdHJhdGVneXBhc3NUaHJvdWdoaWdub3JlT3B0aW9uLS1idWlsZC1pZD1zZXRMaWJyYXJ5U3BlY2lmaWNhdGlvblVyaXNldFBhY2thZ2VSb290c2V0UGFja2FnZUNvbmZpZ3NldE91dHB1dC1vRXJyb3I6IE1pc3NpbmcgZmlsZSBhZnRlciAtbyBvcHRpb24uc2V0T3B0aW1pemF0aW9uTGV2ZWx2YWx1ZT5FcnJvcjogVW5zdXBwb3J0ZWQgb3B0aW1pemF0aW9uIGxldmVsICcnLCBzdXBwb3J0ZWQgbGV2ZWxzIGFyZTogMCwgMSwgMiwgMywgNHNldE91dHB1dFR5cGUtLW91dHB1dC10eXBlPWRhcnQtLW91dHB1dC10eXBlPWRhcnQtbXVsdGktLW91dHB1dC10eXBlPWRhcnQgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gSXQgd2FzIGRlcHJlY2F0ZWQgc2luY2UgRGFydCAxLjExIGFuZCByZW1vdmVkIGluIERhcnQgMS4xOS5zZXRTdHJpcE9wdGlvbiAnLS1mb3JjZS1zdHJpcCcgaXMgbm90IGluIHVzZSBub3cgdGhhdC0tb3V0cHV0LXR5cGU9ZGFydCBpcyBubyBsb25nZXIgc3VwcG9ydGVkLnNldEJhemVsUGF0aHNwYXRoc2FkZEFsbHNwbGl0LGdldERlcHNPdXRwdXRzb3VyY2VGaWxlc2ZpbGVuYW1lc21hcHVyaXRvTGlzdHNvcnQKc2V0QWxsb3dOYXRpdmVFeHRlbnNpb25zT3B0aW9uICctLWFsbG93LW5hdGl2ZS1leHRlbnNpb25zJyBpcyBub3Qgc3VwcG9ydGVkLnNldFZlcmJvc2VfLS12ZXJib3Nlc2V0VHJ1c3RUeXBlQW5ub3RhdGlvbnNzZXRDaGVja2VkTW9kZWFkZEluRW52aXJvbm1lbnRlcUluZGV4aW5kZXhPZj1uYW1lc3Vic3RyaW5nW109c2V0Q2F0ZWdvcmllc2NhdGVnb3JpZXNpc1NlcnZlck1vZGVzaW5nbGVTZXJ2ZXJUaGUgLS1jYXRlZ29yaWVzIGZsYWcgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSBkZWxldGVkIGluIGEgZnV0dXJlIHJlbGVhc2UsIHBsZWFzZSB1c2UgJy0tc2VydmVyLW1vZGUnIGluc3RlYWQgb2YgJy0tY2F0ZWdvcmllcz1TZXJ2ZXInLlRoZSAtLWNhdGVnb3JpZXMgZmxhZyBpcyBkZXByZWNhdGVkLCBzZWUgdGhlIHVzYWdlIGZvciBkZXRhaWxzLnNldFBsYXRmb3JtQmluYXJpZXNzZXRSZWFkRGF0YS0tcmVhZC1kYXRhc2V0RGlsbERlcGVuZGVuY2llc2RlcGVuZGVuY2llc3VyaURlcGVuZGVuY2llc3NwbGl0TWFwSm9pbm9uTWF0Y2hvbk5vbk1hdGNocC0tZGlsbC1kZXBlbmRlbmNpZXNzZXRDZmVPbmx5Q2Fubm90IHVzZSAtLWNmZS1vbmx5IGFuZCB3cml0ZSBzZXJpYWxpemVkIGRhdGEgc2ltdWx0YW5lb3VzbHkuYW5kIHdyaXRlIHNlcmlhbGl6ZWQgY29kZWdlbiBzaW11bHRhbmVvdXNseS5zZXRSZWFkQ29kZWdlbi0tcmVhZC1jb2RlZ2Vuc2V0V3JpdGVEYXRhQ2Fubm90IHdyaXRlIHNlcmlhbGl6ZWQgZGF0YSBhbmQgY29kZWdlbiBzaW11bHRhbmVvdXNseS4tLXdyaXRlLWRhdGFzZXRXcml0ZUNvZGVnZW5DYW5ub3Qgd3JpdGUgc2VyaWFsaXplZCBkYXRhIGFuZCBjb2RlZ2VuIGRhdGEgc2ltdWx0YW5lb3VzbHkuLS13cml0ZS1jb2RlZ2Vuc2V0Q29kZWdlblNoYXJkc2V0Q29kZWdlblNoYXJkc3NldER1bXBJbmZvLS1kdW1wLWluZm89anNvbj1iaW5hcnlFcnJvcjogVW5zdXBwb3J0ZWQgZHVtcC1pbmZvIGZvcm1hdCAnc3VwcG9ydGVkIGZvcm1hdHMgYXJlOiBqc29uIG9yIGJpbmFyeWhhbmRsZVRocm93T25FcnJvcnBhcmFtZXRlcmNvdW50aGFuZGxlU2hvcnRPcHRpb25zc2hvcnRPcHRpb25zc2hvcnRPcHRpb252aD9jLS1lbmFibGUtY2hlY2tlZC1tb2RlLS1taW5pZnktW2Nodm0/XSstLXRocm93LW9uLWVycm9yKD86PVswLTldKyk/LS1zdXBwcmVzcy13YXJuaW5ncy0tZmF0YWwtd2FybmluZ3MtLXN1cHByZXNzLWhpbnRzLS1vdXRwdXQtdHlwZT1kYXJ0fC0tb3V0cHV0LXR5cGU9ZGFydC1tdWx0aXwtLW91dHB1dC10eXBlPWpzLS11c2Uta2VybmVsLS1wbGF0Zm9ybS1iaW5hcmllcz0uKy0tbm8tZnJlcXVlbmN5LWJhc2VkLW1pbmlmaWNhdGlvbi0tc2hvdy1pbnRlcm5hbC1wcm9ncmVzcy0tdmVyc2lvbi0tbGlicmFyeS1yb290PS4rLS1saWJyYXJpZXMtc3BlYz0uKz0uK3wtLWNvZGVnZW4tc2hhcmQtLWNvZGVnZW4tc2hhcmRzLS1kZWJ1Zy1nbG9iYWwtaW5mZXJlbmNlLS1vdXQ9Lit8LW8uKi1PLiotLWFsbG93LW1vY2stY29tcGlsYXRpb24tLWZhc3Qtc3RhcnR1cC0tZ2VuZXJpYy1tZXRob2Qtc3ludGF4LS1pbml0aWFsaXppbmctZm9ybWFsLWFjY2Vzcy0tbm8tbWluaWZ5LS1wcmVzZXJ2ZS11cmlzLS1mb3JjZS1zdHJpcD0uKi0tZGlzYWJsZS1kaWFnbm9zdGljLWNvbG9ycy0tZW5hYmxlLWRpYWdub3N0aWMtY29sb3JzLS1lbmFibGVbXy1dY2hlY2tlZFtfLV1tb2RlfC0tY2hlY2tlZC0tZW5hYmxlLWFzc2VydHMtLXRydXN0LXR5cGUtYW5ub3RhdGlvbnMtLXRydXN0LXByaW1pdGl2ZXMtLWV4cGVyaW1lbnRhbC10cnVzdC1qcy1pbnRlcm9wLXR5cGUtYW5ub3RhdGlvbnMtLWhlbHB8L1w/fC9oLS1wYWNrYWdlcz0uKy0tcGFja2FnZS1yb290PS4rfC1wListLW5vLXNvdXJjZS1tYXBzLS1yZXNvbHV0aW9uLWlucHV0PS4rLS1iYXplbC1wYXRocz0uKy0tcmVzb2x2ZS1vbmx5LS1kaXNhYmxlLW5hdGl2ZS1saXZlLXR5cGUtYW5hbHlzaXMtLWNhdGVnb3JpZXM9LiotLWRpc2FibGUtaW5saW5pbmctLWRpc2FibGUtcHJvZ3JhbS1zcGxpdC0tZGlzYWJsZS10eXBlLWluZmVyZW5jZS0tdXNlLXRyaXZpYWwtYWJzdHJhY3QtdmFsdWUtZG9tYWluLS1kaXNhYmxlLXJ0aS1vcHRpbWl6YXRpb24tLXRlcnNlLS1kZWZlcnJlZC1tYXA9ListLW5ldy1kZWZlcnJlZC1zcGxpdC0tcmVwb3J0LWludmFsaWQtZGVmZXJyZWQtdHlwZXMtLWRpc2FsbG93LXVuc2FmZS1ldmFsLS1zaG93LXBhY2thZ2Utd2FybmluZ3N8LS1zaG93LXBhY2thZ2Utd2FybmluZ3M9LiotLWVuYWJsZS1leHBlcmltZW50fC0tZW5hYmxlLWV4cGVyaW1lbnQ9LiotLWNzcC0tZW5hYmxlLWV4cGVyaW1lbnRhbC1taXJyb3JzLS1hc3NlcnQtbWVzc2FnZS0tc3Ryb25nLS1wcmV2aWV3LWRhcnQtMi0tb21pdC1pbXBsaWNpdC1jaGVja3MtLW9taXQtYXMtY2FzdHMtLWxheC1ydW50aW1lLXR5cGUtdG8tc3RyaW5nLS1iZW5jaG1hcmtpbmctcHJvZHVjdGlvbi0tYmVuY2htYXJraW5nLXgtLWNvbmRpdGlvbmFsLWRpcmVjdGl2ZXMtLWVuYWJsZS1hc3luYy0tZW5hYmxlLW51bGwtYXdhcmUtb3BlcmF0b3JzLS1lbmFibGUtZW51bS0tZ2VuZXJhdGUtY29kZS13aXRoLWNvbXBpbGUtdGltZS1lcnJvcnMtLXVzZS1tdWx0aS1zb3VyY2UtaW5mby0tdXNlLW5ldy1zb3VyY2UtaW5mby0tdGVzdC1tb2RlLS1leHBlcmltZW50YWwtdHJhY2stYWxsb2NhdGlvbnMtLWV4cGVyaW1lbnRhbC1hbGxvY2F0aW9ucy1wYXRoLS1leHBlcmltZW50LWNvZGUtMS0tZXhwZXJpbWVudC1jb2RlLTItLWV4cGVyaW1lbnQtY29kZS0zLS1leHBlcmltZW50LWNhbGwtaW5zdHJ1bWVudGF0aW9uLS1leHBlcmltZW50LW5ldy1ydGktRC4rPS4qLS4qVW5rbm93biBvcHRpb24gJycuLippbnB1dFByb3ZpZGVyJyBpcyBub3QgbmVlZGVkIGluIERhcnQgMi4wLiBUbyBlbmFibGUgYXNzZXJ0aW9ucyB1c2UgJycgaW5zdGVhZC4nIGlzIG5vdCBhdmFpbGFibGUgaW4gRGFydCAyLjAuIFRyeSB1c2luZyAnaGludGluZm9pc0VtcHR5Tm8gRGFydCBmaWxlIHNwZWNpZmllZC5leHRyYXN1Ymxpc3RFeHRyYSBhcmd1bWVudHM6ICcgbWF5IG5vdCBiZSB1c2VkIGluIGNoZWNrZWQgbW9kZS5DYW5ub3Qgc3BlY2lmeSBib3RoICctLXBhY2thZ2Utcm9vdCcgYW5kICctLXBhY2thZ2VzLnNjcmlwdE5hbWVvdXQuanNvdXQuZGlsbGFuZCByZWFkIHNlcmlhbGl6ZWQgZGF0YSBzaW11bHRhbmVvdXNseS5hbmQgcmVhZCBzZXJpYWxpemVkIGNvZGVnZW4gc2ltdWx0YW5lb3VzbHkuLmRhdGFDYW5ub3QgcmVhZCBhbmQgd3JpdGUgc2VyaWFsaXplZCBkYXRhIHNpbXVsdGFuZW91c2x5LkNhbm5vdCByZWFkIHNlcmlhbGl6ZWQgY29kZWdlbiBhbmQgd3JpdGUgc2VyaWFsaXplZCBkYXRhIHNpbXVsdGFuZW91c2x5Li5jb2RlQ2Fubm90IHJlYWQgYW5kIHdyaXRlIHNlcmlhbGl6ZWQgY29kZWdlbiBzaW11bHRhbmVvdXNseS5DYW4gb25seSB3cml0ZSBzZXJpYWxpemVkIGNvZGVnZW4gZnJvbSBzZXJpYWxpemVkIGRhdGEuQ2Fubm90IHdyaXRlIHNlcmlhbGl6ZWQgY29kZWdlbiB3aXRob3V0IHNldHRpbmcgLjw9IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLj49IG11c3QgYmUgYmV0d2VlbiAwIGFuZCAtLW91dD0ubWFwLS1zb3VyY2UtbWFwPW91dHB1dFByb3ZpZGVyb25JbmZvb25GYWlsdXJlY29tcGlsYXRpb25Eb25lcmVzdWx0aXNTdWNjZXNzQ29tcGlsYXRpb24gZmFpbGVkLi5kZXBzZ2V0U291cmNlVXJpc2lucHV0aW5wdXRTaXplcHJvY2Vzc05hbWVpbnB1dE5hbWVvdXRwdXRTaXplcHJpbWFyeU91dHB1dFNpemVvdXRwdXROYW1lc3VtbWFyeWNoYXJhY3RlcnMgRGFydGRhcnRDaGFyYWN0ZXJzUmVhZERhcnQgZmlsZSBieXRlcyBkYXRhZGF0YUlucHV0RGF0YSBmaWxlcyAgYW5kIGNvZGVJbnB1dCwgWzAtLV0gQ29tcGlsZWRjaGFyYWN0ZXJzIEphdmFTY3JpcHR0b3RhbENoYXJhY3RlcnNXcml0dGVuSmF2YVNjcmlwdHRvdGFsQ2hhcmFjdGVyc1dyaXR0ZW5QcmltYXJ5b3V0cHV0Y29tcGlsZWQgdG8gSmF2YVNjcmlwdDoga2VybmVsIGJ5dGVzdG90YWxEYXRhV3JpdHRlbmNvbXBpbGVkIHRvIGRpbGw6IFNlcmlhbGl6ZWRkYXRhT3V0cHV0c2VyaWFsaXplZCB0byBkaWxsIGFuZCBkYXRhOiBjb2RlT3V0cHV0c2VyaWFsaXplZCB0byBjb2RlZ2VuIGRhdGE6ICB0byAgaW4gZWxhcHNlZCBzZWNvbmRzaW4gZmlsZXNhbGxPdXRwdXRGaWxlc2pzQ291bnR3aGVyZWYuanNFbWl0dGVkIGZpbGUgIEphdmFTY3JpcHQgZmlsZXMuc2NyaXB0YXV0b1JlYWRGaWxlVXJpb25FcnJvcm9uV2FybmluZ2VudHJ5UG9pbnR0aGVuX2Zvcm1hdENoYXJhY3RlckNvdW50c2VwYXJhdG9ydGV4dHBvc2l0aW9uX2Zvcm1hdER1cmF0aW9uQXNTZWNvbmRzZHVyYXRpb253aWR0aHNlY29uZHNpbk1pbGxpc2Vjb25kc2RpZ2l0c3RvU3RyaW5nQXNGaXhlZHdyaXRlU3RyaW5nc2NoZW1lZmlsZVVuaGFuZGxlZCBzY2hlbWUgdG9GaWxlUGF0aG9wZW5TeW5jbW9kZXdyaXRlU3RyaW5nU3luY2Nsb3NlU3luY2ZhaWxyZXBvcnR1bmFyeS1lcnJvckVycm9yOiBjb21waWxlck1haW46YXN5bmNfY29tcGxldGVyOnJldHVybl92YWx1ZTphc3luY19zdGFja190cmFjZTphc3luY19vcF90aGVuOmFzeW5jX29wX2Vycm9yOmF3YWl0X2p1bXBfdmFyOmF3YWl0X2N0eF92YXI6c2F2ZWRfdHJ5X2NvbnRleHRfdmFyMDphc3luY19vcDpyZXN1bHQ6ZXhjZXB0aW9uOnN0YWNrX3RyYWNlYW55YXN0YXJ0c1dpdGgtLWxpYnJhcmllcy1zcGVjPWlzU2NoZW1lcGFja2FnZWxpYnJhcmllc0pzb25jb21wbGV0ZUVycm9yZnV0dXJlaGVscFVzYWdlOiBkYXJ0MmpzIFtvcHRpb25zXSBkYXJ0ZmlsZQoKQ29tcGlsZXMgRGFydCB0byBKYXZhU2NyaXB0LgoKQ29tbW9uIG9wdGlvbnM6CiAgLW8gPGZpbGU+IEdlbmVyYXRlIHRoZSBvdXRwdXQgaW50byA8ZmlsZT4uCiAgLW0gICAgICAgIEdlbmVyYXRlIG1pbmlmaWVkIG91dHB1dC4KICAtaCAgICAgICAgRGlzcGxheSB0aGlzIG1lc3NhZ2UgKGFkZCAtdiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgYWxsIG9wdGlvbnMpLnZlcmJvc2VIZWxwVXNhZ2U6IGRhcnQyanMgW29wdGlvbnNdIGRhcnRmaWxlCgpDb21waWxlcyBEYXJ0IHRvIEphdmFTY3JpcHQuCgpTdXBwb3J0ZWQgb3B0aW9uczoKICAtaCwgL2gsIC8/LCAtLWhlbHAKICAgIERpc3BsYXkgdGhpcyBtZXNzYWdlIChhZGQgLXYgZm9yIGluZm9ybWF0aW9uIGFib3V0IGFsbCBvcHRpb25zKS4KCiAgLW8gPGZpbGU+LCAtLW91dD08ZmlsZT4KICAgIEdlbmVyYXRlIHRoZSBvdXRwdXQgaW50byA8ZmlsZT4uCgogIC1tLCAtLW1pbmlmeQogICAgR2VuZXJhdGUgbWluaWZpZWQgb3V0cHV0LgoKICAtLWVuYWJsZS1hc3NlcnRzCiAgICBFbmFibGUgYXNzZXJ0aW9ucy4KCiAgLXYsIC0tdmVyYm9zZQogICAgRGlzcGxheSB2ZXJib3NlIGluZm9ybWF0aW9uLgoKICAtRDxuYW1lPj08dmFsdWU+CiAgICBEZWZpbmUgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuCgogIC0tdmVyc2lvbgogICAgRGlzcGxheSB2ZXJzaW9uIGluZm9ybWF0aW9uLgoKICAtLXBhY2thZ2VzPTxwYXRoPgogICAgUGF0aCB0byB0aGUgcGFja2FnZSByZXNvbHV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZSwgd2hpY2ggc3VwcGxpZXMgYSBtYXBwaW5nCiAgICBvZiBwYWNrYWdlIG5hbWVzIHRvIHBhdGhzLgoKICAtLXN1cHByZXNzLXdhcm5pbmdzCiAgICBEbyBub3QgZGlzcGxheSBhbnkgd2FybmluZ3MuCgogIC0tZmF0YWwtd2FybmluZ3MKICAgIFRyZWF0IHdhcm5pbmdzIGFzIGNvbXBpbGF0aW9uIGVycm9ycy4KCiAgLS1zdXBwcmVzcy1oaW50cwogICAgRG8gbm90IGRpc3BsYXkgYW55IGhpbnRzLgoKICAtLWVuYWJsZS1kaWFnbm9zdGljLWNvbG9ycwogICAgQWRkIGNvbG9ycyB0byBkaWFnbm9zdGljIG1lc3NhZ2VzLgoKICAtLXRlcnNlCiAgICBFbWl0IGRpYWdub3N0aWNzIHdpdGhvdXQgc3VnZ2VzdGlvbnMgZm9yIGhvdyB0byBnZXQgcmlkIG9mIHRoZSBkaWFnbm9zZWQKICAgIHByb2JsZW1zLgoKICAtLXNob3ctcGFja2FnZS13YXJuaW5ncwogICAgU2hvdyB3YXJuaW5ncyBhbmQgaGludHMgZ2VuZXJhdGVkIGZyb20gcGFja2FnZXMuCgogIC0tY3NwCiAgICBEaXNhYmxlIGR5bmFtaWMgZ2VuZXJhdGlvbiBvZiBjb2RlIGluIHRoZSBnZW5lcmF0ZWQgb3V0cHV0LiBUaGlzIGlzCiAgICBuZWNlc3NhcnkgdG8gc2F0aXNmeSBDU1AgcmVzdHJpY3Rpb25zIChzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvQ1NQLykuCgogIC0tbm8tc291cmNlLW1hcHMKICAgIERvIG5vdCBnZW5lcmF0ZSBhIHNvdXJjZSBtYXAgZmlsZS4KCiAgLU88MCwxLDIsMyw0PgogICAgQ29udHJvbHMgb3B0aW1pemF0aW9ucyB0aGF0IGNhbiBoZWxwIHJlZHVjZSBjb2RlLXNpemUgYW5kIGltcHJvdmUKICAgIHBlcmZvcm1hbmNlIG9mIHRoZSBnZW5lcmF0ZWQgY29kZSBmb3IgZGVwbG95bWVudC4KCiAgICAtTzAKICAgICAgIERpc2FibGVzIGFsbCBvcHRpbWl6YXRpb25zLiBFcXVpdmFsZW50IHRvIGNhbGxpbmcgZGFydDJqcyB3aXRoIHRoZXNlCiAgICAgICBleHRyYSBmbGFnczoKICAgICAgICAtLWRpc2FibGUtaW5saW5pbmcKICAgICAgICAtLWRpc2FibGUtdHlwZS1pbmZlcmVuY2UKICAgICAgICAtLWRpc2FibGUtcnRpLW9wdGltaXphdGlvbnMKCgogICAgICAgU29tZSBvcHRpbWl6YXRpb25zIGNhbm5vdCBiZSBkaXNzYWJsZWQgYXQgdGhpcyB0aW1lLCBhcyB3ZSBhZGQgdGhlIG9wdGlvbgogICAgICAgdG8gZGlzYWJsZSB0aGVtLCB0aGV5IHdpbGwgYmUgYWRkZWQgaGVyZSBhcyB3ZWxsLgoKICAgIC1PMQogICAgICAgRW5hYmxlcyBkZWZhdWx0IG9wdGltaXphdGlvbnMuIEVxdWl2YWxlbnQgdG8gY2FsbGluZyBkYXJ0MmpzIHdpdGggbm8KICAgICAgIGV4dHJhIGZsYWdzLgoKICAgIC1PMgogICAgICAgRW5hYmxlcyBvcHRpbWl6YXRpb25zIHRoYXQgcmVzcGVjdCB0aGUgbGFuZ3VhZ2Ugc2VtYW50aWNzIGFuZCBhcmUgc2FmZQogICAgICAgZm9yIGFsbCBwcm9ncmFtcy4gSXQgaG93ZXZlciBjaGFuZ2VzIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdHlwZXMsCiAgICAgICB3aGljaCB3aWxsIG5vIGxvbmdlciBiZSBjb25zaXN0ZW50IHdpdGggdGhlIERhcnQgVk0gb3IgRERDLgoKICAgICAgIEVxdWl2YWxlbnQgdG8gY2FsbGluZyBkYXJ0MmpzIHdpdGggdGhlc2UgZXh0cmEgZmxhZ3M6CiAgICAgICAgLS1taW5pZnkKICAgICAgICAtLWxheC1ydW50aW1lLXR5cGUtdG8tc3RyaW5nCgogICAgLU8zCiAgICAgICBFbmFibGVzIG9wdGltaXphdGlvbnMgdGhhdCByZXNwZWN0IHRoZSBsYW5ndWFnZSBzZW1hbnRpY3Mgb25seSBvbgogICAgICAgcHJvZ3JhbXMgdGhhdCBkb24ndCBldmVyIHRocm93IGFueSBzdWJ0eXBlIG9mIGBFcnJvcmAuICBUaGVzZQogICAgICAgb3B0aW1pemF0aW9ucyBpbXByb3ZlIHRoZSBnZW5lcmF0ZWQgY29kZSwgYnV0IHRoZXkgbWF5IGNhdXNlIHByb2dyYW1zIHRvCiAgICAgICBiZWhhdmUgdW5leHBlY3RlZGx5IGlmIHRoaXMgYXNzdW1wdGlvbiBpcyBub3QgbWV0LiAgVG8gdXNlIHRoaXMKICAgICAgIG9wdGlvbiwgd2UgcmVjb21tZW5kIHRoYXQgeW91IHByb3Blcmx5IHRlc3QgeW91ciBhcHBsaWNhdGlvbiBmaXJzdAogICAgICAgd2l0aG91dCBpdCwgYW5kIGVuc3VyZSB0aGF0IG5vIHN1YnR5cGUgb2YgYEVycm9yYCAoc3VjaCBhcyBgVHlwZUVycm9yYCkKICAgICAgIGlzIGV2ZXIgdGhyb3duLgoKICAgICAgIEVxdWl2YWxlbnQgdG8gY2FsbGluZyBkYXJ0MmpzIHdpdGggdGhlc2UgZXh0cmEgZmxhZ3M6CiAgICAgICAgIC1PMgogICAgICAgICAtLW9taXQtaW1wbGljaXQtY2hlY2tzCgogICAgLU80CiAgICAgICBFbmFibGVzIG1vcmUgYWdncmVzc2l2ZSBvcHRpbWl6YXRpb25zIHRoYW4gLU8zLCBidXQgd2l0aCB0aGUgc2FtZQogICAgICAgYXNzdW1wdGlvbnMuIFRoZXNlIG9wdGltaXphdGlvbnMgYXJlIG9uIGEgc2VwYXJhdGUgZ3JvdXAgYmVjYXVzZSB0aGV5CiAgICAgICBhcmUgbW9yZSBzdXNjZXB0aWJsZSB0byB2YXJpYXRpb25zIGluIGlucHV0IGRhdGEuIFRvIHVzZSB0aGlzIG9wdGlvbiB3ZQogICAgICAgcmVjb21tZW5kIHRvIHBheSBzcGVjaWFsIGF0dGVudGlvbiB0byB0ZXN0IGVkZ2UgY2FzZXMgaW4gdXNlciBpbnB1dC4KCiAgICAgICBFcXVpdmFsZW50IHRvIGNhbGxpbmcgZGFydDJqcyB3aXRoIHRoZXNlIGV4dHJhIGZsYWdzOgogICAgICAgICAtTzMKICAgICAgICAgLS10cnVzdC1wcmltaXRpdmVzCgogICAgV2hpbGUgc29tZSBvZiB0aGUgaW5kaXZpZHVhbCBvcHRpbWl6YXRpb25zIGFuZCBmbGFncyBtYXkgY2hhbmdlIHdpdGggdGltZSwKICAgIHdlIGludGVuZCB0byBrZWVwIHRoZSAtTyogZmxhZ3Mgc3RhYmxlLiBOZXcgc2FmZSBvcHRpbWl6YXRpb25zIG1heSBiZSBhZGRlZAogICAgb24gYW55IGxldmVsLCBhbmQgb3B0aW1pemF0aW9ucyB0aGF0IG9ubHkgd29yayBvbiBzb21lIHByb2dyYW1zIG1heSBtb3ZlIHVwCiAgICBmcm9tIG9uZSBsZXZlbCB0byB0aGUgbmV4dCAoZm9yIGluc3RhbmNlLCBvbmNlIGFsdGVybmF0aXZlIHNhZmUKICAgIG9wdGltaXphdGlvbnMgYXJlIGltcGxlbWVudGVkLCBgb21pdC1pbXBsaWNpdC1jaGVja3NgIG1heSBiZSByZW1vdmVkIG9yIG1heQogICAgbW92ZSB0byB0aGUgTzQgbGV2ZWwpLgoKVGhlIGZvbGxvd2luZyBpbmRpdmlkdWFsIG9wdGlvbnMgYXJlIGluY2x1ZGVkIGluIHNvbWUgb2YgdGhlIC1PIG9wdGltaXphdGlvbgpsZXZlbHMgYWJvdmUuIFRoZXkgaGVscCByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGdlbmVyYXRlZCBjb2RlLCBidXQgdGhleSBtYXkKY2F1c2UgcHJvZ3JhbXMgdG8gYmVoYXZlIHVuZXhwZWN0ZWRseSBpZiBhc3N1bXB0aW9ucyBhcmUgbm90IG1ldC4gT25seSB0dXJuIG9uCnRoZXNlIGZsYWdzIGlmIHlvdSBoYXZlIGVub3VnaCB0ZXN0IGNvdmVyYWdlIHRvIGVuc3VyZSB0aGV5IGFyZSBzYWZlIHRvIHVzZToKCiAgLS1vbWl0LWltcGxpY2l0LWNoZWNrcwogICAgT21pdCBpbXBsaWNpdCBydW50aW1lIGNoZWNrcywgc3VjaCBhcyBwYXJhbWV0ZXIgY2hlY2tzIGFuZCBpbXBsaWNpdAogICAgZG93bmNhc3RzLiBUaGVzZSBjaGVja3MgYXJlIGluY2x1ZGVkIGJ5IGRlZmF1bHQgaW4gRGFydCAyLjAuIEJ5CiAgICB1c2luZyB0aGlzIGZsYWcgdGhlIGNoZWNrcyBhcmUgcmVtb3ZlZCwgaG93ZXZlciB0aGUgY29tcGlsZXIgd2lsbCBhc3N1bWUKICAgIHRoYXQgYWxsIHN1Y2ggY2hlY2tzIHdlcmUgdmFsaWQgYW5kIG1heSB1c2UgdGhpcyBpbmZvcm1hdGlvbiBmb3IKICAgIG9wdGltaXphdGlvbnMuIFVzZSB0aGlzIG9wdGlvbiBvbmx5IGlmIHlvdSBoYXZlIGVub3VnaCB0ZXN0aW5nIHRvIGVuc3VyZQogICAgdGhhdCB5b3VyIHByb2dyYW0gd29ya3Mgd2l0aCB0aGUgY2hlY2tzLgoKICAtLXRydXN0LXByaW1pdGl2ZXMKICAgIEFzc3VtZSB0aGF0IG9wZXJhdGlvbnMgb24gbnVtYmVycywgc3RyaW5ncywgYW5kIGxpc3RzIGhhdmUgdmFsaWQgaW5wdXRzLgogICAgVGhpcyBvcHRpb24gYWxsb3dzIHRoZSBjb21waWxlciB0byBkcm9wIHJ1bnRpbWUgY2hlY2tzIGZvciB0aG9zZSBvcGVyYXRpb25zLgogICAgTm90ZTogYSB3ZWxsLXR5cGVkIHByb2dyYW0gaXMgbm90IGd1YXJhbnRlZWQgdG8gaGF2ZSB2YWxpZCBpbnB1dHMuIEZvcgogICAgZXhhbXBsZSwgYW4gaW50IGluZGV4IGFyZ3VtZW50IG1heSBiZSBudWxsIG9yIG91dCBvZiByYW5nZS4KCiAgLS1sYXgtcnVudGltZS10eXBlLXRvLXN0cmluZwogICAgT21pdHMgcmVpZmllZCBjbGFzcyB0eXBlIGFyZ3VtZW50cyB3aGVuIHRoZXNlIGFyZSBvbmx5IG5lZWRlZCBmb3IgYHRvU3RyaW5nYAogICAgb24gYHJ1bnRpbWVUeXBlYC4gVGhpcyBpcyB1c2VmdWwgaWYgYHJ1bnRpbWVUeXBlLnRvU3RyaW5nKClgIGlzIG9ubHkgdXNlZAogICAgZm9yIGRlYnVnZ2luZy4gTm90ZSB0aGF0IHNlbWFudGljcyBvZiBvdGhlciB1c2VzIG9mIGAucnVudGltZVR5cGVgLCBmb3IKICAgIGluc3RhbmNlIGBhLnJ1bnRpbWVUeXBlID09IGIucnVudGltZVR5cGVgLCBpcyBub3QgYWZmZWN0ZWQgYnkgdGhpcyBmbGFnLgoKVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBvbmx5IHVzZWQgZm9yIGNvbXBpbGVyIGRldmVsb3BtZW50IGFuZCBtYXkKYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uOgoKICAtLXRocm93LW9uLWVycm9yCiAgICBUaHJvdyBhbiBleGNlcHRpb24gaWYgYSBjb21waWxlLXRpbWUgZXJyb3IgaXMgZGV0ZWN0ZWQuCgogIC0tbGlicmFyaWVzLXNwZWM9PGZpbGU+CiAgICBBIC5qc29uIGZpbGUgY29udGFpbmluZyB0aGUgbGlicmFyaWVzIHNwZWNpZmljYXRpb24gZm9yIGRhcnQyanMuCgogIC0tYWxsb3ctbW9jay1jb21waWxhdGlvbgogICAgRG8gbm90IGdlbmVyYXRlIGEgY2FsbCB0byBtYWluIGlmIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nCiAgICBsaWJyYXJpZXMgYXJlIHVzZWQ6IGRhcnQ6ZG9tLCBkYXJ0Omh0bWwgZGFydDppby4KCiAgLS1kaXNhYmxlLW5hdGl2ZS1saXZlLXR5cGUtYW5hbHlzaXMKICAgIERpc2FibGUgdGhlIG9wdGltaXphdGlvbiB0aGF0IHJlbW92ZXMgdW51c2VkIG5hdGl2ZSB0eXBlcyBmcm9tIGRhcnQ6aHRtbAogICAgYW5kIHJlbGF0ZWQgbGlicmFyaWVzLgoKICAtLXNlcnZlci1tb2RlCiAgICBDb21waWxlIHdpdGggc2VydmVyIHN1cHBvcnQuIFRoZSBjb21waWxlciB3aWxsIHVzZSBhIGxpYnJhcnkgc3BlY2lmaWNhdGlvbgogICAgdGhhdCBkaXNhYmxlcyBkYXJ0Omh0bWwgYnV0IHN1cHBvcnRzIGRhcnQ6anMgaW4gY29uZGl0aW9uYWwgaW1wb3J0cy4KCiAgLS1jYXRlZ29yaWVzPTxjYXRlZ29yaWVzPgogICAgKGRlcHJlY2F0ZWQpCiAgICBVc2UgJy0tc2VydmVyLW1vZGUnIGluc3RlYWQgb2YgJy0tY2F0ZWdvcmllcz1TZXJ2ZXInLiBBbGwgb3RoZXIgY2F0ZWdvcnkKICAgIHZhbHVlcyBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgY29tcGlsZXIgYmVoYXZpb3IuCgogIC0tZGVmZXJyZWQtbWFwPTxmaWxlPgogICAgR2VuZXJhdGVzIGEganNvbiBmaWxlIHdpdGggYSBtYXBwaW5nIGZyb20gZWFjaCBkZWZlcnJlZCBpbXBvcnQgdG8gYSBsaXN0IG9mCiAgICB0aGUgcGFydC5qcyBmaWxlcyB0aGF0IHdpbGwgYmUgbG9hZGVkLgoKICAtLWR1bXAtaW5mb1s9PGZvcm1hdD5dCiAgICBHZW5lcmF0ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGdlbmVyYXRlZCBjb2RlLiAnZm9ybWF0JyBjYW4gYmUgZWl0aGVyCiAgICAnanNvbicgb3IgJ2JpbmFyeScuCiAgICBZb3UgY2FuIGluc3BlY3QgdGhlIGdlbmVyYXRlZCBkYXRhIHVzaW5nIHRvb2xzIGZyb20gJ3BhY2thZ2U6ZGFydDJqc19pbmZvJy4KCiAgLS1nZW5lcmF0ZS1jb2RlLXdpdGgtY29tcGlsZS10aW1lLWVycm9ycwogICAgR2VuZXJhdGVzIG91dHB1dCBldmVuIGlmIHRoZSBwcm9ncmFtIGNvbnRhaW5zIGNvbXBpbGUtdGltZSBlcnJvcnMuIFVzZSB0aGUKICAgIGV4aXQgY29kZSB0byBkZXRlcm1pbmUgaWYgY29tcGlsYXRpb24gZmFpbGVkLgoKICAtLW5vLWZyZXF1ZW5jeS1iYXNlZC1taW5pZmljYXRpb24KICAgIEV4cGVyaW1lbnRhbC4gIERpc2FibGVkIHRoZSBuZXcgZnJlcXVlbmN5IGJhc2VkIG1pbmlmeWluZyBuYW1lciBhbmQgdXNlIHRoZQogICAgb2xkIG5hbWVyIGluc3RlYWQuCnRyaW1oZWxwQW5kRXhpdHZlcnNpb248bm9uLVNESyBidWlsZD5EYXJ0LXRvLUphdmFTY3JpcHQgY29tcGlsZXIgKGRhcnQyanMpIHZlcnNpb246IGhlbHBBbmRGYWlsbWFpbmxhc3QtLWJhdGNoaW50ZXJuYWxNYWluZXhjZXB0aW9udHJhY2VUaGUgY29tcGlsZXIgY3Jhc2hlZDogaWdub3JlZFRoZSBjb21waWxlciBjcmFzaGVkOiBlcnJvciB3aGlsZSBwcmludGluZyBleGNlcHRpb25jYXRjaEVycm9yYmF0Y2hNYWluYmF0Y2hBcmd1bWVudHNlcnJvckNvZGVzdHJlYW10cmFuc2Zvcm1kZWNvZGVyc3Vic2NyaXB0aW9ubGlzdGVubGluZXBhdXNlYXJnc3dpbmRvd3N3aGVuQ29tcGxldGU+Pj4gVEVTVCBPSz4+PiBURVNUIENSQVNIPj4+IFRFU1QgRkFJTHdyaXRlbG4+Pj4gRU9GIFNUREVSUnJlc3VtZUNvbXBvbmVudFN0YXRlbWVudGlyVGFyZ2V0RGlhZ25vc3RpY01lc3NhZ2VIYW5kbGVyRXhwZXJpbWVudGFsRmxhZ0ZpbGVTeXN0ZW1Db21waWxlclJlc3VsdFByb2Nlc3NlZE9wdGlvbnNMaWJyYXJpZXNTcGVjaWZpY2F0aW9uQ29tcGlsZXJDb250ZXh0bWVzc2FnZU1pc3NpbmdNYWluU2V2ZXJpdHlnZW5lcmF0ZUtlcm5lbEludGVybmFsRXJyb3JUb2tlblN0cmluZ1Rva2VuVG9rZW5yZWRpcmVjdGluZ0luaXRpYWxpemVkQ29tcGlsZXJTdGF0ZWVxdWFsTGlzdHNlcXVhbE1hcHNwYXJzZUV4cGVyaW1lbnRhbEZsYWdzcGFyc2VFeHBlcmltZW50YWxBcmd1bWVudHNEaWFnbm9zdGljTWVzc2FnZWdldE1lc3NhZ2VDaGFyT2Zmc2V0Z2V0TWVzc2FnZUhlYWRlclRleHRnZXRNZXNzYWdlTGVuZ3RoZ2V0TWVzc2FnZVJlbGF0ZWRJbmZvcm1hdGlvbmdldE1lc3NhZ2VVcmlkZWZhdWx0RXhwZXJpbWVudGFsRmxhZ3NGaWxlU3lzdGVtRW50aXR5RmlsZVN5c3RlbUV4Y2VwdGlvbmtlcm5lbEZvclByb2dyYW1EYXRhRmlsZVN5c3RlbUVudGl0eWNvbXB1dGVQbGF0Zm9ybUJpbmFyaWVzTG9jYXRpb25Mb2NhdGVkTWVzc2FnZW9wZXJhdG9yRnJvbVN0cmluZ0FzeW5jTW9kaWZpZXJpc1VzZXJEZWZpbmFibGVPcGVyYXRvcmlzTWludXNPcGVyYXRvciQkJDAkOSRBJEJBQ0tTTEFTSCRDUiRERUwkRFEkSEFTSCRMRiRMUyRQUyRUQUIkWiRfJGEkZyRzJHpMaW5rTGlua0J1aWxkZXJMaW5rRW50cnlyZWxhdGl2aXplVXJpY2xlYXJTdHJpbmdUb2tlbkNhbm9uaWNhbGl6ZXJjbGVhcmluaXRpYWxpemVDb21waWxlcm9sZFN0YXRldGFyZ2V0bGlua2VkRGVwZW5kZW5jaWVzcGFja2FnZXNGaWxlVXJpZXhwZXJpbWVudGFsRmxhZ3N2ZXJpZnliY29tcGFyZVRvbGVnYWN5TW9kZXByb2Nlc3NlZE9wdHNzdGF0ZWZpbGVTeXN0ZW1vbkRpYWdub3N0aWNpbnB1dHNjbGVhckZpbGVTeXN0ZW1DYWNoZWNvbnRleHRjb21waWxlclJlc3VsdGNvbXBvbmVudG1haW5NZXRob2RObyAnbWFpbicgbWV0aG9kIGZvdW5kLlRyeSBhZGRpbmcgYSBtZXRob2QgbmFtZWQgJ21haW4nIHRvIHlvdXIgcHJvZ3JhbS5NaXNzaW5nTWFpblNldmVyaXR5LmVycm9yd2l0aExvY2F0aW9udG9rZW5Ub1N0cmluZ2Fzc2VydGlvbk1lc3NhZ2VsZXhlbWVnZXRTdXBwb3J0ZWRMaWJyYXJ5TmFtZXNqc29uc3BlY2lmaWNhdGlvbkZvcmFsbExpYnJhcmllc2xpc1N1cHBvcnRlZGlzUmVkaXJlY3RpbmdGYWN0b3J5bWVtYmVya2luZFByb2NlZHVyZUtpbmQuRmFjdG9yeWJvZHlmdW5jdGlvbmV4cHJlc3Npb252YXJpYWJsZSNyZWRpcmVjdGluZ19mYWN0b3J5Y29tcGlsZXJfbmV3RGlhZ25vc3RpY0lucHV0S2luZElucHV0S2luZC5VVEY4SW5wdXRLaW5kLmJpbmFyeVVURjhiaW5hcnlJbnB1dFRpbnB1dEtpbmRDb21waWxlcklucHV0cmVhZEZyb21VcmlPdXRwdXRUeXBlT3V0cHV0VHlwZS5qc091dHB1dFR5cGUuanNQYXJ0T3V0cHV0VHlwZS5zb3VyY2VNYXBPdXRwdXRUeXBlLmR1bXBJbmZvT3V0cHV0VHlwZS5kZWZlcnJlZE1hcE91dHB1dFR5cGUuZGVidWdqc2pzUGFydHNvdXJjZU1hcGR1bXBJbmZvZGVmZXJyZWRNYXBkZWJ1Z091dHB1dFNpbmtjbG9zZUJpbmFyeU91dHB1dFNpbmt3cml0ZWJ1ZmZlcmVuZENvbXBpbGVyT3V0cHV0Y3JlYXRlT3V0cHV0U2lua2V4dGVuc2lvbnR5cGVjcmVhdGVCaW5hcnlTaW5rQ29tcGlsZXJEaWFnbm9zdGljc2NvZGViZWdpbkNvbXBpbGF0aW9uUmVzdWx0Y29tcGlsZXJjb21waWxlck9wdGlvbnMgbXVzdCBiZSBub24tbnVsbGNvbXBpbGVySW5wdXQgbXVzdCBiZSBub24tbnVsbGNvbXBpbGVyRGlhZ25vc3RpY3MgbXVzdCBiZSBub24tbnVsbGNvbXBpbGVyT3V0cHV0IG11c3QgYmUgbm9uLW51bGxydW5zdWNjZXNza2VybmVsTG9hZGVyaW5pdGlhbGl6ZWRDb21waWxlclN0YXRlZGFydDJqcy5jbWRsaW5lLm9wdGlvbnNGbGFnc2FsbG93TW9ja0NvbXBpbGF0aW9uYWxsb3dOYXRpdmVFeHRlbnNpb25zZGlzYWJsZUlubGluaW5nZGlzYWJsZVByb2dyYW1TcGxpdGRpc2FibGVEaWFnbm9zdGljQ29sb3JzZGlzYWJsZU5hdGl2ZUxpdmVUeXBlQW5hbHlzaXN1c2VUcml2aWFsQWJzdHJhY3RWYWx1ZURvbWFpbmRpc2FibGVUeXBlSW5mZXJlbmNlZGlzYWJsZVJ0aU9wdGltaXphdGlvbmVuYWJsZUFzc2VydE1lc3NhZ2VlbmFibGVDaGVja2VkTW9kZWVuYWJsZUFzc2VydHNlbmFibGVEaWFnbm9zdGljQ29sb3JzZXhwZXJpbWVudGFsVHJhY2tBbGxvY2F0aW9uc2V4cGVyaW1lbnRhbEFsbG9jYXRpb25zUGF0aGV4cGVyaW1lbnRMb2NhbE5hbWVzZXhwZXJpbWVudFN0YXJ0dXBGdW5jdGlvbnNleHBlcmltZW50VG9Cb29sZWFuZXhwZXJpbWVudENhbGxJbnN0cnVtZW50YXRpb25leHBlcmltZW50TmV3UnRpZW5hYmxlTGFuZ3VhZ2VFeHBlcmltZW50cy0tZW5hYmxlLWV4cGVyaW1lbnRmYXN0U3RhcnR1cGZhdGFsV2FybmluZ3NnZW5lcmF0ZUNvZGVXaXRoQ29tcGlsZVRpbWVFcnJvcnNwcmV2aWV3RGFydDJvbWl0SW1wbGljaXRDaGVja3NvbWl0QXNDYXN0c2xheFJ1bnRpbWVUeXBlVG9TdHJpbmdtaW5pZnlub0ZyZXF1ZW5jeUJhc2VkTWluaWZpY2F0aW9ubm9NaW5pZnlub1NvdXJjZU1hcHNwcmVzZXJ2ZVVyaXNzaG93UGFja2FnZVdhcm5pbmdzLS1zaG93LXBhY2thZ2Utd2FybmluZ3NzdXBwcmVzc0hpbnRzc3VwcHJlc3NXYXJuaW5nc3RlcnNldGVzdE1vZGV0cnVzdFByaW1pdGl2ZXN0cnVzdEpTSW50ZXJvcFR5cGVBbm5vdGF0aW9uc3VzZUNvbnRlbnRTZWN1cml0eVBvbGljeXVzZU11bHRpU291cmNlSW5mb3VzZU5ld1NvdXJjZUluZm9wcm9ncmVzc2RpbGxEZXBlbmRlbmNpZXNyZWFkRGF0YXdyaXRlRGF0YXJlYWRDb2RlZ2Vud3JpdGVDb2RlZ2VuY2ZlT25seWRlYnVnR2xvYmFsSW5mZXJlbmNlc2VydmVyTW9kZW5ld0RlZmVycmVkU3BsaXRyZXBvcnRJbnZhbGlkSW5mZXJyZWREZWZlcnJlZFR5cGVzYmVuY2htYXJraW5nUHJvZHVjdGlvbmJlbmNobWFya2luZ0V4cGVyaW1lbnRjb25kaXRpb25hbERpcmVjdGl2ZXNnZW5lcmljTWV0aG9kU3ludGF4aW5pdGlhbGl6aW5nRm9ybWFsQWNjZXNzcmVzb2x2ZU9ubHlPcHRpb25yZXNvbHV0aW9uSW5wdXRjdXJyZW50RGlyZWN0b3J5bmF0aXZlVG9VcmlQYXRoZmlsZW5hbWVyZXBsYWNlQWxsXDp1cmlQYXRoVG9OYXRpdmVuYXRpdmVUb1VyaWFwcGVuZFNsYXNoZGFydDJqcy5zcmMub3B0aW9uc0RpYWdub3N0aWNPcHRpb25zdGVyc2VEaWFnbm9zdGljc3Nob3dBbGxQYWNrYWdlV2FybmluZ3NoaWRlUGFja2FnZVdhcm5pbmdzc2hvd1BhY2thZ2VXYXJuaW5nc0Zvcmxhbmd1YWdlRXhwZXJpbWVudHNidWlsZElkYnVpbGQgbnVtYmVyIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkY29tcGlsZUZvclNlcnZlcmRlZmVycmVkTWFwVXJpc2hvd25QYWNrYWdlV2FybmluZ3N1c2VEdW1wSW5mb0JpbmFyeUZvcm1hdGVuYWJsZU1pbmlmaWNhdGlvbl9kaXNhYmxlTWluaWZpY2F0aW9uZW5hYmxlTmF0aXZlTGl2ZVR5cGVBbmFseXNpc2VuYWJsZVVzZXJBc3NlcnRpb25zZ2VuZXJhdGVTb3VyY2VNYXBvdXRwdXRVcmlzb3VyY2VNYXBVcmlkZWZhdWx0UGFyYW1ldGVyQ2hlY2tQb2xpY3lkZWZhdWx0SW1wbGljaXREb3duY2FzdENoZWNrUG9saWN5ZGVmYXVsdENvbmRpdGlvbkNoZWNrUG9saWN5ZGVmYXVsdEV4cGxpY2l0Q2FzdENoZWNrUG9saWN5dXNlRnJlcXVlbmN5TmFtZXJzaG93SW50ZXJuYWxQcm9ncmVzc3VzZUNGRUNvbnN0YW50c0V4cGVyaW1lbnRhbEZsYWcuY29uc3RhbnRVcGRhdGUyMDE4aGFzQnVpbGRJZHBhcnNlRXhwZXJpbWVudGFsRmxhZy5jb250cm9sRmxvd0NvbGxlY3Rpb25zRXhwZXJpbWVudGFsRmxhZy5leHRlbnNpb25NZXRob2RzRXhwZXJpbWVudGFsRmxhZy5ub25OdWxsYWJsZUV4cGVyaW1lbnRhbEZsYWcuc2V0TGl0ZXJhbHNFeHBlcmltZW50YWxGbGFnLnNwcmVhZENvbGxlY3Rpb25zRXhwZXJpbWVudGFsRmxhZy50cmlwbGVTaGlmdC0tZGVmZXJyZWQtbWFwPS0tcGxhdGZvcm0tYmluYXJpZXM9dmFsaWRhdGVbbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaV0gaXMgbnVsbC5bbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaV0gc2hvdWxkIGJlIGEgZmlsZTogT25seSBvbmUgb2YgW3BhY2thZ2VSb290XSBvciBbcGFja2FnZUNvbmZpZ10gbWF5IGJlIGdpdmVuLltwYWNrYWdlUm9vdF0gbXVzdCBlbmQgd2l0aCBhIC9NaXNzaW5nIHJlcXVpcmVkIGRlcml2ZU9wdGlvbnNjb250YWluc3BhdGhTZWdtZW50c2ZpcnN0Q2hlY2tQb2xpY3lpc1RydXN0ZWRpc0VtaXR0ZWR0cnVzdGVkY2hlY2tlZENoZWNrUG9saWN5KGlzVHJ1c3RlZD1pc0VtaXR0ZWQ9KV9VTkRFVEVSTUlORURfQlVJTERfSURfZXh0cmFjdFN0cmluZ09wdGlvbnByZWZpeGRlZmF1bHRWYWx1ZW9wdGlvbl9leHRyYWN0VXJpT3B0aW9uX2V4dHJhY3RJbnRPcHRpb25faGFzT3B0aW9uX2V4dHJhY3RPcHRpb25hbENzdk9wdGlvbmZsYWdfZXh0cmFjdFVyaUxpc3RPcHRpb25zdHJpbmdVcmlzX2V4dHJhY3RFeHBlcmltZW50c2V4cGVyaW1lbnRzd2FybmluZ3NvdXJjZV9maWxlX3Byb3ZpZGVybWF0aGNvbG9yc01lc3NhZ2VDYWxsYmFja1NvdXJjZUZpbGVQcm92aWRlcmlzV2luZG93c2N3ZHV0ZjhTb3VyY2VGaWxlc2JpbmFyeVNvdXJjZUZpbGVzcmVhZEJ5dGVzRnJvbVVyaXJlc291cmNlVXJpaXNBYnNvbHV0ZXJlc29sdmVVcmlfcmVhZEZyb21GaWxlaHR0cGh0dHBzX3JlYWRGcm9tSHR0cFVua25vd24gc2NoZW1lIGluIHVyaSAnJ19yZWFkRnJvbUZpbGVTeW5jc291cmNlemVyb1Rlcm1pbmF0ZWRleG9zRXJyb3JkZXRhaWwgKEVycm9yIHJlYWRpbmcgJycgYXV0b1JlYWRGcm9tRmlsZWVjbGllbnRnZXRVcmxyZXF1ZXN0cmVzcG9uc2VzdGF0dXNDb2RlbXNnRmFpbHVyZSBnZXR0aW5nIDogcmVhc29uUGhyYXNlc3BsaXRDb250ZW50dG90YWxMZW5ndGhmb2xkb2xkbGlzdG9mZnNldGNvbnRlbnRQYXJ0c2V0UmFuZ2V1bmltcGxlbWVudGVkZ2V0VXRmOFNvdXJjZUZpbGV1cmlza2V5c0NvbXBpbGVyU291cmNlRmlsZVByb3ZpZGVyRm9ybWF0dGluZ0RpYWdub3N0aWNIYW5kbGVycHJvdmlkZXJpc0Fib3J0aW5nbGFzdEtpbmRmYXRhbENvdW50RkFUQUxjcmFzaG9yZGluYWxJTkZPdmVyYm9zZSBpbmZvSW5mbzpJbmZvOiBwcmVmaXhNZXNzYWdlV2FybmluZzogSGludDogSW50ZXJuYWwgRXJyb3I6IFVuZXhwZWN0ZWQgZGlhZ25vc3RpYyBraW5kOiBmYXRhbCZpc0luZm9jb2xvclVua25vd24ga2luZDogeC5kYXJ0Z2V0TG9jYXRpb25NZXNzYWdlY29sb3JpemVAOgpSYW5kb21BY2Nlc3NGaWxlT3V0cHV0UHJvdmlkZXJ0b3RhbENoYXJhY3RlcnNXcml0dGVuY3JlYXRlVXJpVW5rbm93biBvdXRwdXQgdHlwZTogaXNQcmltYXJ5T3V0cHV0Y2hhcmFjdGVyc1dyaXR0ZW5jaHVua1NpemUqb25Eb25lYnl0ZXNXcml0dGVud3JpdGVCeXRlc1N5bmN3cml0ZUZyb21TeW5jUmFuZG9tQWNjZXNzQmluYXJ5T3V0cHV0U2lua19PdXRwdXRTaW5rV3JhcHBlcm9uQWRkb25DbG9zZV9CaW5hcnlPdXRwdXRTaW5rV3JhcHBlcm9uV3JpdGVCYXplbElucHV0UHJvdmlkZXJkaXJzc2VhcmNoUGF0aHNfcmVzb2x2ZXJlc29sdmVkVXJpL2JhemVsLXJvb3QvYmF6ZWwtcm9vdC9kaXJleGlzdHNleGlzdHNTeW5jcmVhZEFsbGxlbmd0aFN5bmNidWZmZXJMZW5ndGhyZWFkSW50b1N5bmNkYXJ0MmpzLnV0aWwuY29tbWFuZF9saW5lRVNDQVBFX01BUFBJTkducg10CQgMC3NwbGl0TGluZWluUXVvdGVzb3BlbmluZ1F1b3RlIlVuZmluaXNoZWQgZXNjYXBlOiBuZXh0bWFwcGVkaXNOb3RFbXB0eVVuY2xvc2VkIHF1b3RlczogZGFydDJqcy51dGlsaW5kZW50YXRpb24uZGFydEhhc2hpbmdTTUlfTUFTS21peEhhc2hDb2RlQml0c2V4aXN0aW5nPDxePj5oaWdobG93b2JqZWN0SGFzaG9iamVjdGhhc2hDb2Rlb2JqZWN0c0hhc2hvYmoxb2JqMm9iajNvYmo0b2JqNWhhc2hsaXN0SGFzaHNldEhhc2hFaXRlcmFibGV1bm9yZGVyZWRNYXBIYXNoaGFzaENvZGVzZW50cnllbnRyaWVza2V5bWFwSGFzaFBhaXJBQm90aGVyKEluZGVudGF0aW9uX2luZGVudExldmVsX2luZGVudExpc3RfaW5kZW50YXRpb25Vbml0ICBpbmRlbnRhdGlvbmluZGVudGF0aW9uVW5pdGluZGVudE1vcmVpbmRlbnRMZXNzaW5kZW50QmxvY2tUYWdnaW5nTnNidGFnU3RhY2twdXNoVGFndGFncHJlcGVuZHBvcFRhZ2hlYWR0YWlsc3RyaW5nYWRkRGVmYXVsdFBhcmFtZXRlcnNub2RlcGFyYW1zb3Blbk5vZGVhZGRDdXJyZW50SW5kZW50YWRkVHlwZVdpdGhQYXJhbXM+Cm9wZW5BbmRDbG9zZU5vZGUvPgpjbG9zZU5vZGU8L2ZvckVhY2hrc3RydmFsdWVUb1N0cmluZyZsdDsmZ3Q7W251bGxdPSJlcXVhbEVsZW1lbnRzZXF1YWxTZXRzY29udGFpbnNBbGxLVndyaXRlSnNvbkVzY2FwZWRDaGFyc09uYWRkQ29kZVVuaXRFc2NhcGVkXHUwdG9SYWRpeFN0cmluZ3dyaXRlRXNjYXBlZE9uY29kZVVuaXRBdFwiXHRcblxyXFx3cml0ZUNoYXJDb2RlY29tcHV0ZUhhc2hDb2RlcGFydDFwYXJ0MnBhcnQzcGFydDRwYXJ0NW1vZGlmaWVyc1RvU3RyaW5naXNTdGF0aWNpc0Fic3RyYWN0aXNGaW5hbGlzVmFyaXNDb25zdGlzRmFjdG9yeWlzRXh0ZXJuYWxpc0NvdmFyaWFudGJ1aWxkZXJhZGRMYXN0c3RhdGljYWJzdHJhY3RmaW5hbHZhcmNvbnN0ZmFjdG9yeWV4dGVybmFsY292YXJpYW50dG9MaW5rcHJpbnRPbmxvbmdlc3RDb21tb25QcmVmaXhMZW5ndGhtYWtlVW5pcXVlc3VnZ2VzdGVkTmFtZXVzZWROYW1lc2NvdW50ZXJrZXJuZWxsb2FkQ29tcG9uZW50RnJvbUJpbmFyeWJ5dGVzcmVhZEFzQnl0ZXNTeW5jbG9hZENvbXBvbmVudEZyb21CeXRlc3JlYWRDb21wb25lbnRsb2FkQ29tcG9uZW50U291cmNlRnJvbUJ5dGVzcmVhZENvbXBvbmVudFNvdXJjZXdyaXRlQ29tcG9uZW50VG9CaW5hcnlzaW5rbnVsbHN0ZG91dG5vbkJsb2NraW5nb3BlbldyaXRld3JpdGVDb21wb25lbnRGaWxlZmx1c2h3cml0ZUxpYnJhcnlUb1RleHRsaWJyYXJ5d3JpdGVMaWJyYXJ5RmlsZXdyaXRlQXNTdHJpbmdTeW5jd3JpdGVDb21wb25lbnRUb1RleHRzaG93RXh0ZXJuYWxzaG93T2Zmc2V0c3Nob3dNZXRhZGF0YWtlcm5lbC5hc3RDYW5vbmljYWxOYW1lTm9kZWFjY2VwdHZpc2l0Q2hpbGRyZW5UcmVlTm9kZV9oYXNoQ291bnRlcm5vT2Zmc2V0cGFyZW50ZmlsZU9mZnNldHRyYW5zZm9ybUNoaWxkcmVucmVwbGFjZUNoaWxkY2hpbGRyZXBsYWNlbWVudHJlcGxhY2VXaXRocmVtb3ZlZW5jbG9zaW5nQ29tcG9uZW50bG9jYXRpb25fZ2V0TG9jYXRpb25JbkVuY2xvc2luZ0ZpbGVOYW1lZE5vZGVyZWZlcmVuY2VjYW5vbmljYWxOYW1lRmlsZVVyaU5vZGVmaWxlVXJpQW5ub3RhdGFibGVhbm5vdGF0aW9uc2FkZEFubm90YXRpb25SZWZlcmVuY2VSZWZlcmVuY2UgdG8gVW5ib3VuZCByZWZlcmVuY2Vhc0xpYnJhcnkgaXMgbm90IGJvdW5kIHRvIGFuIEFTVCBub2RlLiBBIGxpYnJhcnkgd2FzIGV4cGVjdGVkYXNDbGFzcyBpcyBub3QgYm91bmQgdG8gYW4gQVNUIG5vZGUuIEEgY2xhc3Mgd2FzIGV4cGVjdGVkYXNNZW1iZXIgaXMgbm90IGJvdW5kIHRvIGFuIEFTVCBub2RlLiBBIG1lbWJlciB3YXMgZXhwZWN0ZWRhc0ZpZWxkIGlzIG5vdCBib3VuZCB0byBhbiBBU1Qgbm9kZS4gQSBmaWVsZCB3YXMgZXhwZWN0ZWRhc0NvbnN0cnVjdG9yIGlzIG5vdCBib3VuZCB0byBhbiBBU1Qgbm9kZS4gQSBjb25zdHJ1Y3RvciB3YXMgZXhwZWN0ZWRhc1Byb2NlZHVyZSBpcyBub3QgYm91bmQgdG8gYW4gQVNUIG5vZGUuIEEgcHJvY2VkdXJlIHdhcyBleHBlY3RlZGFzVHlwZWRlZiBpcyBub3QgYm91bmQgdG8gYW4gQVNUIG5vZGUuIEEgdHlwZWRlZiB3YXMgZXhwZWN0ZWRMaWJyYXJ5aW1wb3J0VXJpZGVmYXVsdExhbmd1YWdlVmVyc2lvbk1ham9yZGVmYXVsdExhbmd1YWdlVmVyc2lvbk1pbm9yX2xhbmd1YWdlVmVyc2lvbk1ham9yX2xhbmd1YWdlVmVyc2lvbk1pbm9yRXh0ZXJuYWxGbGFnU3ludGhldGljRmxhZ2ZsYWdzcHJvYmxlbXNBc0pzb25hZGRpdGlvbmFsRXhwb3J0c3BhcnRzdHlwZWRlZnNjbGFzc2VzZXh0ZW5zaW9uc3Byb2NlZHVyZXNmaWVsZHNfbGlicmFyeUlkQ291bnRlcl9saWJyYXJ5SWRsYW5ndWFnZVZlcnNpb25NYWpvcmxhbmd1YWdlVmVyc2lvbk1pbm9yc2V0TGFuZ3VhZ2VWZXJzaW9uVHJ5aW5nIHRvIHNldCBsYW5nYXVnZSB2ZXJzaW9uICdudWxsJ35pc1N5bnRoZXRpY21lbWJlcnNleHBhbmRhZGRNZW1iZXJhZGRDbGFzc2NsYXNzX2FkZEV4dGVuc2lvbmFkZEZpZWxkZmllbGRhZGRQcm9jZWR1cmVwcm9jZWR1cmVhZGRUeXBlZGVmdHlwZWRlZl9jb21wdXRlQ2Fub25pY2FsTmFtZXNnZXRDaGlsZEZyb21UeXBlZGVmYmluZFRvZ2V0Q2hpbGRGcm9tTWVtYmVyZ2V0Q2hpbGRhZGREZXBlbmRlbmN5YWRkUGFydHZpc2l0TGlicmFyeUxpYnJhcnlEZXBlbmRlbmN5aW1wb3J0ZWRMaWJyYXJ5UmVmZXJlbmNlY29tYmluYXRvcnNFeHBvcnRGbGFnRGVmZXJyZWRGbGFnaW1wb3J0ZWRMaWJyYXJ5ZGVmZXJyZWRJbXBvcnRpbXBvcnRleHBvcnRieVJlZmVyZW5jZWVuY2xvc2luZ0xpYnJhcnl0YXJnZXRMaWJyYXJ5aXNFeHBvcnRpc0ltcG9ydGlzRGVmZXJyZWRhbm5vdGF0aW9udmlzaXRMaWJyYXJ5RGVwZW5kZW5jeUxpYnJhcnlQYXJ0cGFydFVyaXZpc2l0TGlicmFyeVBhcnRDb21iaW5hdG9yaXNTaG93bmFtZXNzaG93aGlkZWRlcGVuZGVuY3lpc0hpZGV2aXNpdENvbWJpbmF0b3JUeXBlZGVmdHlwZVBhcmFtZXRlcnN0eXBlUGFyYW1ldGVyc09mRnVuY3Rpb25UeXBlcG9zaXRpb25hbFBhcmFtZXRlcnNuYW1lZFBhcmFtZXRlcnN0aGlzVHlwZXZpc2l0VHlwZWRlZnZpc2l0RGFydFR5cGVDbGFzc0xldmVsQ2xhc3NMZXZlbC5UZW1wb3JhcnlDbGFzc0xldmVsLlR5cGVDbGFzc0xldmVsLkhpZXJhcmNoeUNsYXNzTGV2ZWwuTWl4aW5DbGFzc0xldmVsLkJvZHlUZW1wb3JhcnlUeXBlSGllcmFyY2h5TWl4aW5Cb2R5Q2xhc3NzdGFydEZpbGVPZmZzZXRmaWxlRW5kT2Zmc2V0bGV2ZWxMZXZlbE1hc2tGbGFnQWJzdHJhY3RGbGFnRW51bUZsYWdBbm9ueW1vdXNNaXhpbkZsYWdFbGltaW5hdGVkTWl4aW5GbGFnTWl4aW5EZWNsYXJhdGlvbnN1cGVydHlwZW1peGVkSW5UeXBlaW1wbGVtZW50ZWRUeXBlc2NvbnN0cnVjdG9yc3JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yc19yYXdUeXBlX3RoaXNUeXBlX2JvdHRvbVR5cGVpc0Fub255bW91c01peGluaXNFbnVtaXNFbGltaW5hdGVkTWl4aW5pc01peGluRGVjbGFyYXRpb25zdXBlcmNsYXNzQ29uc3RyYWludHNjb25zdHJhaW50c2NsYXNzTm9kZWN1cnJlbnRDbGFzc3N1YnN0aXR1dGlvbnN1YnN0aXR1dGVTdXBlcnR5cGVzdXBlcmNsYXNzbWl4ZWRJbkNsYXNzbWl4aW5pc01peGluQXBwbGljYXRpb25kZW1hbmdsZWROYW1lbmFtZUFzTWl4aW5BcHBsaWNhdGlvbm5hbWVBc01peGluQXBwbGljYXRpb25TdWJjbGFzc3N1cGVyc3Zpc2l0Q2xhc3NhY2NlcHRSZWZlcmVuY2V2aXNpdENsYXNzUmVmZXJlbmNlaXNJbkV4dGVybmFsTGlicmFyeWFzUmF3U3VwZXJ0eXBlYXNUaGlzU3VwZXJ0eXBlcmF3VHlwZWJvdHRvbVR5cGV2aXNpdFN1cGVydHlwZUV4dGVuc2lvbm9uVHlwZXZpc2l0RXh0ZW5zaW9uRXh0ZW5zaW9uTWVtYmVyS2luZEV4dGVuc2lvbk1lbWJlcktpbmQuRmllbGRFeHRlbnNpb25NZW1iZXJLaW5kLk1ldGhvZEV4dGVuc2lvbk1lbWJlcktpbmQuR2V0dGVyRXh0ZW5zaW9uTWVtYmVyS2luZC5TZXR0ZXJFeHRlbnNpb25NZW1iZXJLaW5kLk9wZXJhdG9yRXh0ZW5zaW9uTWVtYmVyS2luZC5UZWFyT2ZmRmllbGRNZXRob2RHZXR0ZXJTZXR0ZXJPcGVyYXRvclRlYXJPZmZFeHRlbnNpb25NZW1iZXJEZXNjcmlwdG9yRmxhZ1N0YXRpY0ZsYWdFeHRlcm5hbE1lbWJlcnRyYW5zZm9ybWVyRmxhZ3NlbmNsb3NpbmdDbGFzc2hhc0dldHRlcmhhc1NldHRlcmlzSW5zdGFuY2VNZW1iZXJpc0V4dGVuc2lvbk1lbWJlcmdldHRlclR5cGVzZXR0ZXJUeXBlY29udGFpbnNTdXBlckNhbGxzaW5pdGlhbGl6ZXJGbGFnRmluYWxGbGFnQ29uc3RGbGFnSGFzSW1wbGljaXRHZXR0ZXJGbGFnSGFzSW1wbGljaXRTZXR0ZXJGbGFnQ292YXJpYW50RmxhZ0dlbmVyaWNDb3ZhcmlhbnRJbXBsRmxhZ0xhdGVGbGFnRXh0ZW5zaW9uTWVtYmVyaGFzSW1wbGljaXRHZXR0ZXJoYXNJbXBsaWNpdFNldHRlcmlzTGF0ZWlzR2VuZXJpY0NvdmFyaWFudEltcGxpc011dGFibGVGaWVsZHMgY2Fubm90IGJlIGV4dGVybmFsdmlzaXRGaWVsZHZpc2l0RmllbGRSZWZlcmVuY2VDb25zdHJ1Y3RvcmluaXRpYWxpemVyc0ZsYWdTeW50aGV0aWN2aXNpdENvbnN0cnVjdG9ydmlzaXRDb25zdHJ1Y3RvclJlZmVyZW5jZVJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9ydHlwZUFyZ3VtZW50c3RhcmdldFJlZmVyZW5jZXJlcXVpcmVkUGFyYW1ldGVyQ291bnRpc1VucmVzb2x2ZWR2aXNpdFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9ydmlzaXRSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvclJlZmVyZW5jZVByb2NlZHVyZWZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXRSZWZlcmVuY2Vmb3J3YXJkaW5nU3R1YkludGVyZmFjZVRhcmdldFJlZmVyZW5jZUZsYWdGb3J3YXJkaW5nU3R1YkZsYWdGb3J3YXJkaW5nU2VtaVN0dWJGbGFnUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JGbGFnTm9TdWNoTWV0aG9kRm9yd2FyZGVyaXNGb3J3YXJkaW5nU3R1YmlzRm9yd2FyZGluZ1NlbWlTdHViZm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldGZvcndhcmRpbmdTdHViSW50ZXJmYWNlVGFyZ2V0bmV3VmFsdWVzZXRUcmFuc2Zvcm1lckZsYWdzV2l0aG91dExhenlMb2FkaW5naXNSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcmlzU3ludGhldGljRm9yd2FyZGVyaXNOb1N1Y2hNZXRob2RGb3J3YXJkZXJpc0dldHRlclByb2NlZHVyZUtpbmQuR2V0dGVyaXNTZXR0ZXJQcm9jZWR1cmVLaW5kLlNldHRlcmlzQWNjZXNzb3J2aXNpdFByb2NlZHVyZXZpc2l0UHJvY2VkdXJlUmVmZXJlbmNlcmV0dXJuVHlwZWZ1bmN0aW9uVHlwZVByb2NlZHVyZUtpbmRQcm9jZWR1cmVLaW5kLk1ldGhvZFByb2NlZHVyZUtpbmQuT3BlcmF0b3JGYWN0b3J5SW5pdGlhbGl6ZXJJbnZhbGlkSW5pdGlhbGl6ZXJ2aXNpdEludmFsaWRJbml0aWFsaXplckZpZWxkSW5pdGlhbGl6ZXJmaWVsZFJlZmVyZW5jZXZpc2l0RmllbGRJbml0aWFsaXplclN1cGVySW5pdGlhbGl6ZXJ2aXNpdFN1cGVySW5pdGlhbGl6ZXJSZWRpcmVjdGluZ0luaXRpYWxpemVydmlzaXRSZWRpcmVjdGluZ0luaXRpYWxpemVyTG9jYWxJbml0aWFsaXplcnZpc2l0TG9jYWxJbml0aWFsaXplckFzc2VydEluaXRpYWxpemVyc3RhdGVtZW50dmlzaXRBc3NlcnRJbml0aWFsaXplckZ1bmN0aW9uTm9kZWFzeW5jTWFya2VyZGFydEFzeW5jTWFya2VyX2JvZHlsYXp5QnVpbGRlckFzeW5jTWFya2VyLlN5bmNfYnVpbGRMYXp5bGF6eUJ1aWxkZXJMb2NhbF9nZXRUeXBlT2ZWYXJpYWJsZV9nZXROYW1lZFR5cGVPZlZhcmlhYmxlaXNSZXF1aXJlZG5hbWVkZ3Jvd2FibGV0eXBlUGFyYW1ldGVyc0NvcHl2aXNpdEZ1bmN0aW9uTm9kZUFzeW5jTWFya2VyQXN5bmNNYXJrZXIuU3luY1N0YXJBc3luY01hcmtlci5Bc3luY0FzeW5jTWFya2VyLkFzeW5jU3RhckFzeW5jTWFya2VyLlN5bmNZaWVsZGluZ1N5bmNTeW5jU3RhckFzeW5jQXN5bmNTdGFyU3luY1lpZWxkaW5nRXhwcmVzc2lvbmdldFN0YXRpY1R5cGV0eXBlc2dldFN0YXRpY1R5cGVBc0luc3RhbmNlT2Zib3VuZG51bGxUeXBldXBjYXN0VHlwZWdldFR5cGVBc0luc3RhbmNlT2Z0eXBlRXJyb3IgaXMgbm90IGEgc3VidHlwZSBvZiBhY2NlcHQxYXJnSW52YWxpZEV4cHJlc3Npb252aXNpdEludmFsaWRFeHByZXNzaW9uVmFyaWFibGVHZXRwcm9tb3RlZFR5cGV2aXNpdFZhcmlhYmxlR2V0VmFyaWFibGVTZXR2aXNpdFZhcmlhYmxlU2V0UHJvcGVydHlHZXRyZWNlaXZlcmludGVyZmFjZVRhcmdldFJlZmVyZW5jZWludGVyZmFjZVRhcmdldHJlY2VpdmVyVHlwZXN1YnN0aXR1dGVUeXBlbmFtZVN0cmluZ2ludFR5cGVydW50aW1lVHlwZXR5cGVUeXBldmlzaXRQcm9wZXJ0eUdldFByb3BlcnR5U2V0dmlzaXRQcm9wZXJ0eVNldERpcmVjdFByb3BlcnR5R2V0dmlzaXREaXJlY3RQcm9wZXJ0eUdldERpcmVjdFByb3BlcnR5U2V0dmlzaXREaXJlY3RQcm9wZXJ0eVNldERpcmVjdE1ldGhvZEludm9jYXRpb252aXNpdERpcmVjdE1ldGhvZEludm9jYXRpb25pc092ZXJsb2FkZWRBcml0aG1ldGljT3BlcmF0b3JnZXRUeXBlT2ZPdmVybG9hZGVkQXJpdGhtZXRpY3Bvc2l0aW9uYWxTdXBlclByb3BlcnR5R2V0ZGVjbGFyaW5nQ2xhc3N2aXNpdFN1cGVyUHJvcGVydHlHZXRTdXBlclByb3BlcnR5U2V0dmlzaXRTdXBlclByb3BlcnR5U2V0U3RhdGljR2V0dmlzaXRTdGF0aWNHZXRTdGF0aWNTZXR2aXNpdFN0YXRpY1NldEFyZ3VtZW50c2VtcHR5Zm9yd2FyZGVkdmlzaXRBcmd1bWVudHNOYW1lZEV4cHJlc3Npb252aXNpdE5hbWVkRXhwcmVzc2lvbkludm9jYXRpb25FeHByZXNzaW9uTWV0aG9kSW52b2NhdGlvbmJvb2xUeXBldmlzaXRNZXRob2RJbnZvY2F0aW9uU3VwZXJNZXRob2RJbnZvY2F0aW9udmlzaXRTdXBlck1ldGhvZEludm9jYXRpb25TdGF0aWNJbnZvY2F0aW9udmlzaXRTdGF0aWNJbnZvY2F0aW9uQ29uc3RydWN0b3JJbnZvY2F0aW9udmlzaXRDb25zdHJ1Y3Rvckludm9jYXRpb25jb25zdHJ1Y3RlZFR5cGVJbnN0YW50aWF0aW9ud2l0aG91dFR5cGVQYXJhbWV0ZXJzdmlzaXRJbnN0YW50aWF0aW9uTm90b3BlcmFuZHZpc2l0Tm90TG9naWNhbEV4cHJlc3Npb25sZWZ0b3BlcmF0b3JyaWdodHZpc2l0TG9naWNhbEV4cHJlc3Npb25Db25kaXRpb25hbEV4cHJlc3Npb25jb25kaXRpb25vdGhlcndpc2VzdGF0aWNUeXBldmlzaXRDb25kaXRpb25hbEV4cHJlc3Npb25TdHJpbmdDb25jYXRlbmF0aW9uZXhwcmVzc2lvbnNzdHJpbmdUeXBldmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uTGlzdENvbmNhdGVuYXRpb250eXBlQXJndW1lbnRsaXN0c2xpdGVyYWxMaXN0VHlwZXZpc2l0TGlzdENvbmNhdGVuYXRpb25TZXRDb25jYXRlbmF0aW9uc2V0c2xpdGVyYWxTZXRUeXBldmlzaXRTZXRDb25jYXRlbmF0aW9uTWFwQ29uY2F0ZW5hdGlvbmtleVR5cGV2YWx1ZVR5cGVtYXBzbGl0ZXJhbE1hcFR5cGV2aXNpdE1hcENvbmNhdGVuYXRpb25JbnN0YW5jZUNyZWF0aW9uY2xhc3NSZWZlcmVuY2VmaWVsZFZhbHVlc2Fzc2VydHN1bnVzZWRBcmd1bWVudHN2aXNpdEluc3RhbmNlQ3JlYXRpb25maWVsZFJlZnRyYW5zZm9ybWVkSXNFeHByZXNzaW9udmlzaXRJc0V4cHJlc3Npb25Bc0V4cHJlc3Npb25GbGFnVHlwZUVycm9yaXNUeXBlRXJyb3J2aXNpdEFzRXhwcmVzc2lvbkJhc2ljTGl0ZXJhbFN0cmluZ0xpdGVyYWx2aXNpdFN0cmluZ0xpdGVyYWxJbnRMaXRlcmFsdmlzaXRJbnRMaXRlcmFsRG91YmxlTGl0ZXJhbGRvdWJsZVR5cGV2aXNpdERvdWJsZUxpdGVyYWxCb29sTGl0ZXJhbHZpc2l0Qm9vbExpdGVyYWxOdWxsTGl0ZXJhbHZpc2l0TnVsbExpdGVyYWxTeW1ib2xMaXRlcmFsc3ltYm9sVHlwZXZpc2l0U3ltYm9sTGl0ZXJhbFR5cGVMaXRlcmFsdmlzaXRUeXBlTGl0ZXJhbFRoaXNFeHByZXNzaW9udmlzaXRUaGlzRXhwcmVzc2lvblJldGhyb3d2aXNpdFJldGhyb3dUaHJvd3Zpc2l0VGhyb3dMaXN0TGl0ZXJhbHZpc2l0TGlzdExpdGVyYWxTZXRMaXRlcmFsdmlzaXRTZXRMaXRlcmFsTWFwTGl0ZXJhbHZpc2l0TWFwTGl0ZXJhbE1hcEVudHJ5dmlzaXRNYXBFbnRyeUF3YWl0RXhwcmVzc2lvbnVuZnV0dXJlVHlwZXZpc2l0QXdhaXRFeHByZXNzaW9uTG9jYWxGdW5jdGlvbkZ1bmN0aW9uRXhwcmVzc2lvbnZpc2l0RnVuY3Rpb25FeHByZXNzaW9uQ29uc3RhbnRFeHByZXNzaW9uY29uc3RhbnR2aXNpdENvbnN0YW50RXhwcmVzc2lvbnZpc2l0Q29uc3RhbnRMZXR2aXNpdExldEJsb2NrRXhwcmVzc2lvbnZpc2l0QmxvY2tFeHByZXNzaW9uTG9hZExpYnJhcnlmdXR1cmVUeXBldmlzaXRMb2FkTGlicmFyeUNoZWNrTGlicmFyeUlzTG9hZGVkb2JqZWN0VHlwZXZpc2l0Q2hlY2tMaWJyYXJ5SXNMb2FkZWRFeHByZXNzaW9uU3RhdGVtZW50dmlzaXRFeHByZXNzaW9uU3RhdGVtZW50QmxvY2tzdGF0ZW1lbnRzcmVtb3ZlTGFzdHZpc2l0QmxvY2thZGRTdGF0ZW1lbnRBc3NlcnRCbG9ja3Zpc2l0QXNzZXJ0QmxvY2tFbXB0eVN0YXRlbWVudHZpc2l0RW1wdHlTdGF0ZW1lbnRBc3NlcnRTdGF0ZW1lbnRjb25kaXRpb25TdGFydE9mZnNldGNvbmRpdGlvbkVuZE9mZnNldHZpc2l0QXNzZXJ0U3RhdGVtZW50TGFiZWxlZFN0YXRlbWVudHZpc2l0TGFiZWxlZFN0YXRlbWVudEJyZWFrU3RhdGVtZW50dmlzaXRCcmVha1N0YXRlbWVudFdoaWxlU3RhdGVtZW50dmlzaXRXaGlsZVN0YXRlbWVudERvU3RhdGVtZW50dmlzaXREb1N0YXRlbWVudEZvclN0YXRlbWVudHZhcmlhYmxlc3VwZGF0ZXN2aXNpdEZvclN0YXRlbWVudEZvckluU3RhdGVtZW50Ym9keU9mZnNldGlzQXN5bmN2aXNpdEZvckluU3RhdGVtZW50U3dpdGNoU3RhdGVtZW50Y2FzZXN2aXNpdFN3aXRjaFN0YXRlbWVudFN3aXRjaENhc2VleHByZXNzaW9uT2Zmc2V0c2lzRGVmYXVsdGRlZmF1bHRDYXNldmlzaXRTd2l0Y2hDYXNlQ29udGludWVTd2l0Y2hTdGF0ZW1lbnR2aXNpdENvbnRpbnVlU3dpdGNoU3RhdGVtZW50SWZTdGF0ZW1lbnR2aXNpdElmU3RhdGVtZW50UmV0dXJuU3RhdGVtZW50dmlzaXRSZXR1cm5TdGF0ZW1lbnRUcnlDYXRjaGNhdGNoZXN2aXNpdFRyeUNhdGNoQ2F0Y2hndWFyZHN0YWNrVHJhY2V2aXNpdENhdGNoVHJ5RmluYWxseWZpbmFsaXplcnZpc2l0VHJ5RmluYWxseVlpZWxkU3RhdGVtZW50RmxhZ1lpZWxkU3RhckZsYWdOYXRpdmVpc1lpZWxkU3RhcmlzTmF0aXZldmlzaXRZaWVsZFN0YXRlbWVudFZhcmlhYmxlRGVjbGFyYXRpb25maWxlRXF1YWxzT2Zmc2V0YmluYXJ5T2Zmc2V0Tm9UYWdGbGFnRmllbGRGb3JtYWxGbGFnSW5TY29wZUZsYWdSZXF1aXJlZGlzRmllbGRGb3JtYWxmb3JWYWx1ZXZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbkZ1bmN0aW9uRGVjbGFyYXRpb252aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb25OYW1lX2ludGVybmFsbGlicmFyeU5hbWVpc1ByaXZhdGV2aXNpdE5hbWVfUHJpdmF0ZU5hbWU6Ol9jb21wdXRlSGFzaENvZGVfUHVibGljTmFtZU51bGxhYmlsaXR5TnVsbGFiaWxpdHkubnVsbGFibGVOdWxsYWJpbGl0eS5ub25OdWxsYWJsZU51bGxhYmlsaXR5Lm5laXRoZXJOdWxsYWJpbGl0eS5sZWdhY3ludWxsYWJsZW5vbk51bGxhYmxlbmVpdGhlcmxlZ2FjeURhcnRUeXBlbnVsbGFiaWxpdHl1bmFsaWFzdW5hbGlhc09uY2VJbnZhbGlkVHlwZXZpc2l0SW52YWxpZFR5cGVJbnZhbGlkVHlwZSBkb2Vzbid0IGhhdmUgbnVsbGFiaWxpdHlEeW5hbWljVHlwZXZpc2l0RHluYW1pY1R5cGVWb2lkVHlwZXZpc2l0Vm9pZFR5cGVCb3R0b21UeXBldmlzaXRCb3R0b21UeXBlSW50ZXJmYWNlVHlwZWNsYXNzTmFtZV9kZWZhdWx0VHlwZUFyZ3VtZW50c3Zpc2l0SW50ZXJmYWNlVHlwZUZ1bmN0aW9uVHlwZXR5cGVkZWZUeXBlX2hhc2hDb2RldHlwZWRlZlJlZmVyZW5jZXR5cGVkZWZ2aXNpdEZ1bmN0aW9uVHlwZWdldE5hbWVkUGFyYW1ldGVybG93ZXJ1cHBlcnBpdm90fi9uYW1lZFBhcmFtZXRlcmNvbXBhcmlzb25UeXBlZGVmVHlwZXR5cGVkZWZOb2RldmlzaXRUeXBlZGVmVHlwZXZpc2l0VHlwZWRlZlJlZmVyZW5jZU5hbWVkVHlwZUZsYWdSZXF1aXJlZE5hbWVkVHlwZXZpc2l0TmFtZWRUeXBlVHlwZVBhcmFtZXRlclR5cGVkZWNsYXJlZE51bGxhYmlsaXR5cHJvbW90ZWRCb3VuZHZpc2l0VHlwZVBhcmFtZXRlclR5cGVjb21wdXRlTnVsbGFiaWxpdHlGcm9tQm91bmR0eXBlUGFyYW1ldGVyQ2FuJ3QgY29tcHV0ZSBudWxsYWJpbGl0eSBmcm9tIGFic2VudCBib3VuZC5ib3VuZE51bGxhYmlsaXR5Z2V0TnVsbGFiaWxpdHlsaHNOdWxsYWJpbGl0eVR5cGVQYXJhbWV0ZXJkZWZhdWx0VHlwZXZpc2l0VHlwZVBhcmFtZXRlcmlzRnVuY3Rpb25UeXBlVHlwZVBhcmFtZXRlclN1cGVydHlwZWFzSW50ZXJmYWNlVHlwZUNvbnN0YW50Z2V0VHlwZWFzRXhwcmVzc2lvblByaW1pdGl2ZUNvbnN0YW50TnVsbENvbnN0YW50dmlzaXROdWxsQ29uc3RhbnR2aXNpdE51bGxDb25zdGFudFJlZmVyZW5jZUJvb2xDb25zdGFudHZpc2l0Qm9vbENvbnN0YW50dmlzaXRCb29sQ29uc3RhbnRSZWZlcmVuY2VJbnRDb25zdGFudHZpc2l0SW50Q29uc3RhbnR2aXNpdEludENvbnN0YW50UmVmZXJlbmNlRG91YmxlQ29uc3RhbnR2aXNpdERvdWJsZUNvbnN0YW50dmlzaXREb3VibGVDb25zdGFudFJlZmVyZW5jZWlzTmFOU3RyaW5nQ29uc3RhbnR2aXNpdFN0cmluZ0NvbnN0YW50dmlzaXRTdHJpbmdDb25zdGFudFJlZmVyZW5jZVN5bWJvbENvbnN0YW50bGlicmFyeVJlZmVyZW5jZXZpc2l0U3ltYm9sQ29uc3RhbnR2aXNpdFN5bWJvbENvbnN0YW50UmVmZXJlbmNlI01hcENvbnN0YW50X2NhY2hlZEhhc2hDb2RldmlzaXRNYXBDb25zdGFudHZpc2l0TWFwQ29uc3RhbnRSZWZlcmVuY2U+KENvbnN0YW50TWFwRW50cnlMaXN0Q29uc3RhbnR2aXNpdExpc3RDb25zdGFudHZpc2l0TGlzdENvbnN0YW50UmVmZXJlbmNlU2V0Q29uc3RhbnR2aXNpdFNldENvbnN0YW50dmlzaXRTZXRDb25zdGFudFJlZmVyZW5jZUluc3RhbmNlQ29uc3RhbnR2aXNpdEluc3RhbmNlQ29uc3RhbnR2aXNpdEluc3RhbmNlQ29uc3RhbnRSZWZlcmVuY2Uge31QYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50dGVhck9mZkNvbnN0YW50dmlzaXRQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50dmlzaXRQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50UmVmZXJlbmNlPil0eXBlRW52aXJvbm1lbnRtYXBwaW5nVGVhck9mZkNvbnN0YW50cHJvY2VkdXJlUmVmZXJlbmNldmlzaXRUZWFyT2ZmQ29uc3RhbnR2aXNpdFRlYXJPZmZDb25zdGFudFJlZmVyZW5jZVR5cGVMaXRlcmFsQ29uc3RhbnR2aXNpdFR5cGVMaXRlcmFsQ29uc3RhbnR2aXNpdFR5cGVMaXRlcmFsQ29uc3RhbnRSZWZlcmVuY2VVbmV2YWx1YXRlZENvbnN0YW50dmlzaXRVbmV2YWx1YXRlZENvbnN0YW50dmlzaXRVbmV2YWx1YXRlZENvbnN0YW50UmVmZXJlbmNlcm9vdGxpYnJhcmllc3VyaVRvU291cmNlbWV0YWRhdGFtYWluTWV0aG9kTmFtZW5hbWVSb290YWRvcHRDaGlsZHJlbmFkb3B0Q2hpbGRjb21wdXRlQ2Fub25pY2FsTmFtZXNGb3JMaWJyYXJ5Z2V0Q2hpbGRGcm9tVXJpdW5iaW5kQ2Fub25pY2FsTmFtZXN1bmJpbmRBbGx2aXNpdENvbXBvbmVudGdldExvY2F0aW9uYWRkTWV0YWRhdGFSZXBvc2l0b3J5cmVwb3NpdG9yeUxvY2F0aW9uY29sdW1uTWV0YWRhdGFSZXBvc2l0b3J5d3JpdGVUb0JpbmFyeXJlYWRGcm9tQmluYXJ5QmluYXJ5U2lua2dldEJ1ZmZlck9mZnNldHdyaXRlQnl0ZWJ5dGV3cml0ZUJ5dGVzd3JpdGVVSW50MzJ3cml0ZVVJbnQzMHdyaXRlQnl0ZUxpc3R3cml0ZU51bGxBbGxvd2VkQ2Fub25pY2FsTmFtZVJlZmVyZW5jZXdyaXRlU3RyaW5nUmVmZXJlbmNld3JpdGVOYW1ld3JpdGVEYXJ0VHlwZXdyaXRlTm9kZWVudGVyU2NvcGVtZW1iZXJTY29wZXZhcmlhYmxlU2NvcGVsZWF2ZVNjb3BlQmluYXJ5U291cmNlY3VycmVudE9mZnNldHJlYWRCeXRlcmVhZEJ5dGVzcmVhZFVJbnRyZWFkVWludDMycmVhZEJ5dGVMaXN0cmVhZENhbm9uaWNhbE5hbWVSZWZlcmVuY2VyZWFkU3RyaW5nUmVmZXJlbmNlcmVhZE5hbWVyZWFkRGFydFR5cGVyZWFkRnVuY3Rpb25Ob2RlX0NoaWxkUmVwbGFjZXJkZWZhdWx0VHJlZU5vZGVTb3VyY2VsaW5lU3RhcnRzY2FjaGVkVGV4dGdldFRleHRMaW5lZGVjb2RlYWxsb3dNYWxmb3JtZWRlbmRPZkxpbmVJbnRlcm5hbCBlcnJvcm1pZGxpbmVJbmRleGxpbmVTdGFydGxpbmVOdW1iZXJjb2x1bW5OdW1iZXJfSGFzaE0tNzA3MDY3NTU2NTkyMTQyNDAyM2ludElzNjRCaXRjb21iaW5lZmluaXNoY29tYmluZUZpbmlzaGNvbWJpbmUydmFsdWUxdmFsdWUyY29tYmluZTJGaW5pc2hoYXNoMm9iamVjdDFvYmplY3QyY29tYmluZUxpc3RIYXNoaXRlbWNvbWJpbmVMaXN0aGFzaGVzY29tYmluZU1hcEhhc2hVbm9yZGVyZWRlbnRyeUhhc2hlc19zaHJ1OTIyMzM3MjAzNjg1NDc3MTcxMl90ZW1wb3JhcnlIYXNoQ29kZVRhYmxlaW5mb3JtYXRpdmVzZXRQYXJlbnRzbm9kZXN2aXNpdExpc3R2aXNpdG9ydmlzaXRJdGVyYWJsZXRyYW5zZm9ybVR5cGVMaXN0c3RvcmVJbmRleHRyYW5zZm9ybVN1cGVydHlwZUxpc3R0cmFuc2Zvcm1MaXN0X2dldEFzVHlwZUFyZ3VtZW50c2dldE1lbWJlclJlZmVyZW5jZWdldENsYXNzUmVmZXJlbmNlZ2V0Q2Fub25pY2FsTmFtZU9mTWVtYmVyIGhhcyBubyBjYW5vbmljYWwgbmFtZWdldENhbm9uaWNhbE5hbWVPZkNsYXNzZ2V0Q2Fub25pY2FsTmFtZU9mRXh0ZW5zaW9uZ2V0Q2Fub25pY2FsTmFtZU9mTGlicmFyeWxpc3RIYXNoQ29kZW1hcEhhc2hDb2RlbWFwSGFzaENvZGVPcmRlcmVkbWFwSGFzaENvZGVVbm9yZGVyZWRsaXN0RXF1YWxzbWFwRXF1YWxzY29udGFpbnNLZXlnZXRDYW5vbmljYWxOYW1lT2ZUeXBlZGVmX2dldExvY2F0aW9uSW5Db21wb25lbnRkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lbmFtZVBhcnRzIHdpdGggZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uU3ViY2xhc3NOYW1la2VybmVsLnRhcmdldC50YXJnZXRzX1RhcmdldEJ1aWxkZXJUYXJnZXRGbGFnc3RyYWNrV2lkZ2V0Q3JlYXRpb25EaWFnbm9zdGljUmVwb3J0ZXJDY2hhck9mZnNldE51bWJlclNlbWFudGljc051bWJlclNlbWFudGljcy52bU51bWJlclNlbWFudGljcy5qc3ZtQ29uc3RhbnRzQmFja2VuZGxvd2VyTGlzdENvbnN0YW50bG93ZXJTZXRDb25zdGFudGxvd2VyTWFwQ29uc3RhbnRudW1iZXJTZW1hbnRpY3NzaG91bGRJbmxpbmVDb25zdGFudHN1cHBvcnRzVW5ldmFsdWF0ZWRDb25zdGFudHNleHRyYVJlcXVpcmVkTGlicmFyaWVzZXh0cmFJbmRleGVkTGlicmFyaWVzZXh0cmFEZWNsYXJlZFZhcmlhYmxlc3JlcXVpcmVkU2RrQ2xhc3Nlc2VuYWJsZU5vU3VjaE1ldGhvZEZvcndhcmRlcnNlbmFibGVTdXBlck1peGluc3BlcmZvcm1PdXRsaW5lVHJhbnNmb3JtYXRpb25zcGVyZm9ybVByZUNvbnN0YW50RXZhbHVhdGlvblRyYW5zZm9ybWF0aW9uc2NvcmVUeXBlc2RpYWdub3N0aWNSZXBvcnRlcmxvZ2dlcnBlcmZvcm1Nb2R1bGFyVHJhbnNmb3JtYXRpb25zT25MaWJyYXJpZXNoaWVyYXJjaHllbnZpcm9ubWVudERlZmluZXNwZXJmb3JtVHJhbnNmb3JtYXRpb25zT25Qcm9jZWR1cmVtYXlEZWZpbmVSZXN0cmljdGVkVHlwZWRhcnRjb3JlYWxsb3dQbGF0Zm9ybVByaXZhdGVMaWJyYXJ5QWNjZXNzaW1wb3J0ZXJpbXBvcnRlZGRhcnRfaW50ZXJuYWwvZW5hYmxlTmF0aXZlbmF0aXZlRXh0ZW5zaW9uRXhwZWN0c1N0cmluZ2Vycm9yT25VbmV4YWN0V2ViSW50TGl0ZXJhbHNzdXBwb3J0c1NldExpdGVyYWxzaW5zdGFudGlhdGVJbnZvY2F0aW9uaXNTdXBlcmluc3RhbnRpYXRlTm9TdWNoTWV0aG9kRXJyb3Jpc01ldGhvZGlzRmllbGRpc0xvY2FsVmFyaWFibGVpc0R5bmFtaWNpc0NvbnN0cnVjdG9yaXNUb3BMZXZlbGNvbmZpZ3VyZUNvbXBvbmVudFRhcmdldChjb25jcmV0ZUxpc3RMaXRlcmFsQ2xhc3Njb25jcmV0ZUNvbnN0TGlzdExpdGVyYWxDbGFzc2NvbmNyZXRlTWFwTGl0ZXJhbENsYXNzY29uY3JldGVDb25zdE1hcExpdGVyYWxDbGFzc2NvbmNyZXRlSW50TGl0ZXJhbENsYXNzY29uY3JldGVTdHJpbmdMaXRlcmFsQ2xhc3Njb25zdGFudHNCYWNrZW5kTm9uZUNvbnN0YW50c0JhY2tlbmROb25lVGFyZ2V0bm9uZXRhcmdldE5hbWVzdGFyZ2V0c2dldFRhcmdldGZyb250X2VuZC5jb21waWxlcl9vcHRpb25zZXhwaXJlZEV4cGVyaW1lbnRhbEZsYWdzcGFyc2VFeHBlcmltZW50YWxGbGFnU3RhbmRhcmRGaWxlU3lzdGVtc2RrUm9vdGlucHV0U3VtbWFyaWVzc2RrU3VtbWFyeWRlY2xhcmVkVmFyaWFibGVzY29tcGlsZVNka2NoYXNlRGVwZW5kZW5jaWVzbmV4dCByZWxlYXNldGFyZ2V0UGF0Y2hlc2Vycm9yT25VbmV2YWx1YXRlZENvbnN0YW50ZGVidWdEdW1wb21pdFBsYXRmb3Jtc2V0RXhpdENvZGVPblByb2JsZW1lbWJlZFNvdXJjZVRleHR0aHJvd09uRXJyb3JzRm9yRGVidWdnaW5ndGhyb3dPbldhcm5pbmdzRm9yRGVidWdnaW5nYnl0ZWNvZGV3cml0ZUZpbGVPbkNyYXNoUmVwb3J0Y3VycmVudFNka1ZlcnNpb25mZWF0dXJlbm8tZXhwZXJpbWVudFVua25vd24gZXhwZXJpbWVudDogRXhwZXJpbWVudCBzcGVjaWZpZWQgd2l0aCBjb25mbGljdGluZyB2YWx1ZXM6IEVuYWJsaW5nIGV4cGVyaW1lbnQgIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuRGlzYWJsaW5nIGV4cGVyaW1lbnQgRXhwZXJpbWVudCAgaXMgZW5hYmxlZCBieSBkZWZhdWx0LiBUaGUgdXNlIG9mIHRoZSBmbGFnIGlzIGRlcHJlY2F0ZWQuIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuIE5vIGRlZmF1bHQgdmFsdWUgZm9yIGZyb250X2VuZC5kaWFnbm9zdGljX21lc3NhZ2VDb2RlRGlhZ25vc3RpY01lc3NhZ2VGcm9tSnNvbkZvcm1hdHRlZE1lc3NhZ2VhbnNpRm9ybWF0dGVkcGxhaW5UZXh0Rm9ybWF0dGVkc2V2ZXJpdHlnZXRNZXNzYWdlQ29kZU9iamVjdGdldE1lc3NhZ2VDb2RlZ2V0TWVzc2FnZUFyZ3VtZW50c3JlbGF0ZWRJbmZvcm1hdGlvbmNvbnN0YW50VXBkYXRlMjAxOGNvbnRyb2xGbG93Q29sbGVjdGlvbnNleHRlbnNpb25NZXRob2Rzc2V0TGl0ZXJhbHNzcHJlYWRDb2xsZWN0aW9uc3RyaXBsZVNoaWZ0Y29uc3RhbnQtdXBkYXRlLTIwMThjb250cm9sLWZsb3ctY29sbGVjdGlvbnNleHRlbnNpb24tbWV0aG9kc25vbi1udWxsYWJsZXNldC1saXRlcmFsc3NwcmVhZC1jb2xsZWN0aW9uc3RyaXBsZS1zaGlmdGZyb250X2VuZC5maWxlX3N5c3RlbWVudGl0eUZvclVyaXJlYWRBc0J5dGVzcmVhZEFzU3RyaW5nRmlsZVN5c3RlbUV4Y2VwdGlvbih1cmk9OyBtZXNzYWdlPWZyb250X2VuZC5rZXJuZWxfZ2VuZXJhdG9yQ2xhc3NIaWVyYXJjaHlDb3JlVHlwZXNub0xlbmd0aGdlbmVyYXRlS2VybmVsZGVwc2NsYXNzSGllcmFyY2h5a2VybmVsRm9yUHJvZ3JhbUludGVybmFscmV0YWluRGF0YUZvclRlc3RpbmdwT3B0aW9uc2luY2x1ZGVIaWVyYXJjaHlBbmRDb3JlVHlwZXNrZXJuZWxGb3JNb2R1bGVzb3VyY2VzVWludDhMaXN0QmluYXJ5QnVpbGRlclBhY2thZ2VzcGFja2FnZV9jb25maWdNYXBQYWNrYWdlc3ByaW50RGlhZ25vc3RpY01lc3NhZ2Vjb21tYW5kX2xpbmVfcmVwb3J0aW5nTWVzc2FnZW1lc3NhZ2VDYW50SW5mZXJQYWNrYWdlc0Zyb21NYW55SW5wdXRzbWVzc2FnZUNhbnRJbmZlclBhY2thZ2VzRnJvbVBhY2thZ2VVcmltZXNzYWdlSW50ZXJuYWxQcm9ibGVtUHJvdmlkZWRCb3RoQ29tcGlsZVNka0FuZFNka1N1bW1hcnltZXNzYWdlTWlzc2luZ0lucHV0dGVtcGxhdGVDYW5ub3RSZWFkU2RrU3BlY2lmaWNhdGlvbnRlbXBsYXRlQ2FudFJlYWRGaWxldGVtcGxhdGVJbnB1dEZpbGVOb3RGb3VuZHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtVW5zdXBwb3J0ZWR0ZW1wbGF0ZVBhY2thZ2VzRmlsZUZvcm1hdHRlbXBsYXRlU2RrUm9vdE5vdEZvdW5kdGVtcGxhdGVTZGtTcGVjaWZpY2F0aW9uTm90Rm91bmR0ZW1wbGF0ZVNka1N1bW1hcnlOb3RGb3VuZERlYnVnQWJvcnRUaWNrZXJVcmlUcmFuc2xhdG9yTGlicmFyaWVzU3BlY2lmaWNhdGlvbkV4Y2VwdGlvblRhcmdldExpYnJhcmllc1NwZWNpZmljYXRpb25fcmF3X3BhY2thZ2VzX3BhY2thZ2VzVXJpX3VyaVRyYW5zbGF0b3Jfc2RrU3VtbWFyeUNvbXBvbmVudF9pbnB1dFN1bW1hcmllc0NvbXBvbmVudHNfbGlua2VkRGVwZW5kZW5jaWVzX3Nka1Jvb3Rfc2RrU3VtbWFyeV9zZGtTdW1tYXJ5Qnl0ZXNfbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaXRpY2tlcl9maWxlU3lzdGVtX3RhcmdldF9jb21wdXRlZFNka0RlZmF1bHRzaXNWZXJib3NlcGFja2FnZXNVcmlfZW5zdXJlU2RrRGVmYXVsdHNsb2FkU2RrU3VtbWFyeUJ5dGVzX3JlYWRBc0J5dGVzcGFja2FnZXNVcmlSYXdmb3JtYXRmb3JtYXR0ZWRmb3JtYXR0ZWRDb250ZXh0U2V2ZXJpdHkuY29udGV4dHdpdGhGb3JtYXR0aW5nbG9nRXJyb3JyZXBvcnREaWFnbm9zdGljTWVzc2FnZV9kZWZhdWx0RGlhZ25vc3RpY01lc3NhZ2VIYW5kbGVycmVwb3J0V2l0aG91dExvY2F0aW9ud2l0aG91dExvY2F0aW9udmFsaWRhdGVPcHRpb25zZXJyb3JPbk1pc3NpbmdJbnB1dDphc3luY190ZW1wb3JhcnlfMDphc3luY190ZW1wb3JhcnlfMWRlYnVnU3RyaW5nTm8gaW5wdXQgZmlsZSBwcm92aWRlZCB0byB0aGUgY29tcGlsZXIuTWlzc2luZ0lucHV0U0RLIHJvb3QgZGlyZWN0b3J5IG5vdCBmb3VuZDogI3VyaS53aXRoQXJndW1lbnRzU0RLIHN1bW1hcnkgbm90IGZvdW5kOiAjdXJpLlRoZSBjb21waWxlU2RrIGFuZCBzZGtTdW1tYXJ5IG9wdGlvbnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZUludGVybmFsUHJvYmxlbVByb3ZpZGVkQm90aENvbXBpbGVTZGtBbmRTZGtTdW1tYXJ5U2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtSW5wdXQgZmlsZSBub3QgZm91bmQ6ICN1cmkuX2NyZWF0ZUZpbGVTeXN0ZW1pc0V4cGVyaW1lbnRFbmFibGVkTm8gZXhwaXJlZCB2YWx1ZSBmb3IgbG9hZFNka1N1bW1hcnlsb2FkQ29tcG9uZW50c2RrU3VtbWFyeUNvbXBvbmVudHBsYXRmb3Jtc2RrU3VtbWFyeSBhbHJlYWR5IGxvYWRlZC5sb2FkSW5wdXRTdW1tYXJpZXNhbGxCeXRlc2lucHV0U3VtbWFyaWVzQ29tcG9uZW50c2NvbXBvbmVudHNpbnB1dFN1bW1hcmllc0NvbXBvbmVudHMgYWxyZWFkeSBsb2FkZWQubG9hZExpbmtEZXBlbmRlbmNpZXNhbHdheXNDcmVhdGVOZXdOYW1lZE5vZGVzZGlzYWJsZUxhenlSZWFkaW5nZ2V0VXJpVHJhbnNsYXRvcmJ5cGFzc0NhY2hlbG9nTXNTdGFydGVkIGJ1aWxkaW5nIFVyaVRyYW5zbGF0b3JfY29tcHV0ZUxpYnJhcnlTcGVjaWZpY2F0aW9uUmVhZCBsaWJyYXJpZXMgZmlsZV9nZXRQYWNrYWdlc3BhY2thZ2VzUmVhZCBwYWNrYWdlcyBmaWxlOnNhdmVkX3RyeV9jb250ZXh0X3ZhcjFfZmFzdGFTREsgbGlicmFyaWVzIHNwZWNpZmljYXRpb24gbm90IGZvdW5kOiAjdXJpLk5vcm1hbGx5LCB0aGUgc3BlY2lmaWNhdGlvbiBpcyBhIGZpbGUgbmFtZWQgJ2xpYnJhcmllcy5qc29uJyBpbiB0aGUgRGFydCBTREsgaW5zdGFsbCBsb2NhdGlvbi5zcGVjVW5hYmxlIHRvIHJlYWQgdGhlICdsaWJyYXJpZXMuanNvbicgc3BlY2lmaWNhdGlvbiBmaWxlOgogICNzdHJpbmcuY3JlYXRlUGFja2FnZXNGcm9tRmlsZUNhbid0IGluZmVyIGEgLnBhY2thZ2VzIGZpbGUgd2hlbiBjb21waWxpbmcgbXVsdGlwbGUgaW5wdXRzLlRyeSBzcGVjaWZ5aW5nIHRoZSBmaWxlIGV4cGxpY2l0bHkgd2l0aCB0aGUgLS1wYWNrYWdlcyBvcHRpb24uQ2FudEluZmVyUGFja2FnZXNGcm9tTWFueUlucHV0c0Nhbid0IGluZmVyIGEgLnBhY2thZ2VzIGZpbGUgZnJvbSBhbiBpbnB1dCAncGFja2FnZToqJyBVUkkuQ2FudEluZmVyUGFja2FnZXNGcm9tUGFja2FnZVVyaV9maW5kUGFja2FnZXNjb250ZW50c0Vycm9yIHdoZW4gcmVhZGluZyAnI3VyaSc6ICNzdHJpbmdhbGxvd0RlZmF1bHRQYWNrYWdlUHJvYmxlbSBpbiBwYWNrYWdlcyBjb25maWd1cmF0aW9uIGZpbGU6ICNzdHJpbmdzY3JpcHRVcmlVbnN1cHBvcnRlZCBvcGVyYXRpb246ICcjbmFtZScuRXhwZWN0ZWQgaW5wdXQgVXJpIHRvIGJlIGFic29sdXRlOiBjaGVja0luRGlyY2FuZGlkYXRlLnBhY2thZ2VzcGFyZW50RGlyLi5yZXBsYWNlaW5mZXIgdGhlIGRlZmF1bHQgc2RrIGxvY2F0aW9udm1fcGxhdGZvcm1fc3Ryb25nLmRpbGx3cml0ZUxpc3RlbGVtZW50czogPGVtcHR5PnMgIC0gSW5wdXRzOiBPdXRwdXQ6IFdhcyBkaWFnbm9zdGljIG1lc3NhZ2UgaGFuZGxlciBwcm92aWRlZDogbm95ZXNGaWxlU3lzdGVtOiAocHJvdmlkZWQ6IElucHV0IFN1bW1hcmllc0xpbmtlZCBEZXBlbmRlbmNpZXNQYWNrYWdlcyB1cmk6IFBhY2thZ2VzOiBDb21waWxlIFNESzogU0RLIHJvb3Q6ICAocHJvdmlkZWQ6IFNESyBzcGVjaWZpY2F0aW9uOiBTREsgc3VtbWFyeTogTGVnYWN5IG1vZGU6IFRhcmdldDogdGhyb3dPbkVycm9yc0ZvckRlYnVnZ2luZzogdGhyb3dPbldhcm5pbmdzRm9yRGVidWdnaW5nOiBleGl0IG9uIHByb2JsZW06IEVtYmVkIHNvdXJjZXM6IGRlYnVnRHVtcDogdmVyYm9zZTogdmVyaWZ5OiBIZXJtZXRpY0ZpbGVTeXN0ZW1pbmNsdWRlZEZpbGVzX3JlYWxGaWxlU3lzdGVtSGVybWV0aWNBY2Nlc3NFeGNlcHRpb25JbnZhbGlkIGFjY2VzcyB0byB0aGUgZmlsZSBpcyBhY2Nlc3NlZCBpbiBhIG1vZHVsYXIgaGVybWV0aWMgYnVpbGQsIGJ1dCBpdCB3YXMgbm90IGV4cGxpY2l0bHkgbGlzdGVkIGFzIGFuIGlucHV0Lmpzb25EZWNvZGVqc29uRW5jb2RlX3RhcmdldHN0YXJnZXRTcGVjTm8gbGlicmFyeSBzcGVjaWZpY2F0aW9uIGZvciB0YXJnZXQgImJhc2VVcmlqc29uRGF0YXRvcC1sZXZlbCBzcGVjaWZpY2F0aW9uIGlzIG5vdCBhIG1hcHRhcmdldE5hbWV0YXJnZXREYXRhY29tbWVudDp0YXJnZXQgc3BlY2lmaWNhdGlvbiBmb3IgJycgaXMgbm90IGEgbWFwdGFyZ2V0IHNwZWNpZmljYXRpb24gZm9yICcnIGRvZXNuJ3QgaGF2ZSBhIGxpYnJhcmllcyBlbnRyeWxpYnJhcmllc0RhdGFsaWJyYXJpZXMgZW50cnkgZm9yICdsaWJyYXJ5IGRhdGEgZm9yICcnIGluIHRhcmdldCAnY2hlY2tBbmRSZXNvbHZldXJpU3RyaW5ndXJpIHZhbHVlICcnIGlzIG5vdCBhIHN0cmluZyhmcm9tIGxpYnJhcnkgJycpdXJpIHNjaGVtZSBpbiAncGF0Y2hlc3BhdGNoZXMgZW50cnkgZm9yICcnIGlzIG5vdCBhIGxpc3Qgb3IgYSBzdHJpbmdzdXBwb3J0ZWQic3VwcG9ydGVkIiBlbnRyeTogZXhwZWN0ZWQgYSAnYm9vbCcgYnV0IGdvdCBhICcnICgnX3JlcG9ydEVycm9ydG9Kc29uU3RyaW5ndG9Kc29uTWFwcGF0aEZvcl9saWJyYXJpZXNsaWJsaWJyYXJ5SW5mb0ZvckxpYnJhcnlJbmZvZmFzdGEuY29tcGlsZXJfY29udGV4dFpvbmVydW5ab25lZGNvbXB1dGVFbmFibGVDb2xvcnNtZXNzYWdlSW50ZXJuYWxQcm9ibGVtTWlzc2luZ0NvbnRleHRlcnJvcnNlbmFibGVDb2xvcnNDYWNoZWRjYWNoZWRTZGtSb290ZGlzYWJsZUNvbG9yc2Zvcm1hdFdpdGhvdXRMb2NhdGlvbnJlY29yZERlcGVuZGVuY3lFeHBlY3RlZCBhIGZpbGUtVVJJLCBidXQgZ290OiAnQ29tcGlsZXIgY2Fubm90IHJ1biB3aXRob3V0IGEgY29tcGlsZXIgY29udGV4dC5BcmUgY2FsbHMgdG8gdGhlIGNvbXBpbGVyIHdyYXBwZWQgaW4gQ29tcGlsZXJDb250ZXh0LnJ1bkluQ29udGV4dD9JbnRlcm5hbFByb2JsZW1NaXNzaW5nQ29udGV4dHRpcEludGVybmFsIHByb2JsZW06IApUaXA6IGlzQWN0aXZlcnVuSW5Db250ZXh0YWN0aW9uem9uZVZhbHVlc3J1bldpdGhPcHRpb25zcnVuV2l0aERlZmF1bHRPcHRpb25zY29tcGlsZXJDb250ZXh0S2V5ZmFzdGEuY29kZXNKc29uRW5jb2RlcnV0aWxmYXN0YV9jb2Rlc19nZW5lcmF0ZWQuZGFydFN1bW1hcnlUZW1wbGF0ZXRlbXBsYXRlYW5hbHl6ZXJDb2Rlc01lc3NhZ2VDb2RlVGVtcGxhdGVtZXNzYWdlVGVtcGxhdGV0aXBUZW1wbGF0ZW1lc3NhZ2VPYmplY3Rsb2NhdGVkTWVzc2FnZTpzeW5jX29wOml0ZXJhdG9yX2N1cnJlbnR0b0pzb25lbmNvZGVyY29udmVydGZyb21Kc29uanNvblN0cmluZ2RlY29kZWRTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmdTZXZlcml0eS5pZ25vcmVkU2V2ZXJpdHkud2FybmluZ3RlbXBsYXRlQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25UaGUgY2xhc3MgJyNuYW1lJyBpcyBhYnN0cmFjdCBhbmQgY2FuJ3QgYmUgaW5zdGFudGlhdGVkLmNvZGVBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uTkVXX1dJVEhfQUJTVFJBQ1RfQ0xBU1Njb2RlQWJzdHJhY3RDbGFzc01lbWJlck1lbWJlcnMgb2YgY2xhc3NlcyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSAnYWJzdHJhY3QnLlRyeSByZW1vdmluZyB0aGUgJ2Fic3RyYWN0JyBrZXl3b3JkLiBZb3UgY2FuIGFkZCB0aGUgJ2Fic3RyYWN0JyBrZXl3b3JkIGJlZm9yZSB0aGUgY2xhc3MgZGVjbGFyYXRpb24uQWJzdHJhY3RDbGFzc01lbWJlcm1lc3NhZ2VBYnN0cmFjdENsYXNzTWVtYmVyY29kZUFic3RyYWN0Tm90U3luY0Fic3RyYWN0IG1ldGhvZHMgY2FuJ3QgdXNlICdhc3luYycsICdhc3luYyonLCBvciAnc3luYyonLkFic3RyYWN0Tm90U3luY05PTl9TWU5DX0FCU1RSQUNUX01FVEhPRG1lc3NhZ2VBYnN0cmFjdE5vdFN5bmN0ZW1wbGF0ZUFic3RyYWN0UmVkaXJlY3RlZENsYXNzSW5zdGFudGlhdGlvbkZhY3RvcnkgcmVkaXJlY3RzIHRvIGNsYXNzICcjbmFtZScsIHdoaWNoIGlzIGFic3RyYWN0IGFuZCBjYW4ndCBiZSBpbnN0YW50aWF0ZWQuY29kZUFic3RyYWN0UmVkaXJlY3RlZENsYXNzSW5zdGFudGlhdGlvbkFic3RyYWN0UmVkaXJlY3RlZENsYXNzSW5zdGFudGlhdGlvbkZBQ1RPUllfUkVESVJFQ1RTX1RPX0FCU1RSQUNUX0NMQVNTdGVtcGxhdGVBY2Nlc3NFcnJvckFjY2VzcyBlcnJvcjogJyNuYW1lJy5jb2RlQWNjZXNzRXJyb3JBY2Nlc3NFcnJvcnRlbXBsYXRlQW1iaWd1b3VzU3VwZXJ0eXBlcycjbmFtZScgY2FuJ3QgaW1wbGVtZW50IGJvdGggJyN0eXBlJyBhbmQgJyN0eXBlMidjb2RlQW1iaWd1b3VzU3VwZXJ0eXBlc0FtYmlndW91c1N1cGVydHlwZXNBTUJJR1VPVVNfU1VQRVJUWVBFU2NvZGVBbm9ueW1vdXNCcmVha1RhcmdldE91dHNpZGVGdW5jdGlvbkNhbid0IGJyZWFrIHRvIGEgdGFyZ2V0IGluIGEgZGlmZmVyZW50IGZ1bmN0aW9uLkFub255bW91c0JyZWFrVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uTEFCRUxfSU5fT1VURVJfU0NPUEVtZXNzYWdlQW5vbnltb3VzQnJlYWtUYXJnZXRPdXRzaWRlRnVuY3Rpb25jb2RlQW5vbnltb3VzQ29udGludWVUYXJnZXRPdXRzaWRlRnVuY3Rpb25DYW4ndCBjb250aW51ZSBhdCBhIHRhcmdldCBpbiBhIGRpZmZlcmVudCBmdW5jdGlvbi5Bbm9ueW1vdXNDb250aW51ZVRhcmdldE91dHNpZGVGdW5jdGlvbm1lc3NhZ2VBbm9ueW1vdXNDb250aW51ZVRhcmdldE91dHNpZGVGdW5jdGlvbnRlbXBsYXRlQXJndW1lbnRUeXBlTm90QXNzaWduYWJsZVRoZSBhcmd1bWVudCB0eXBlICcjdHlwZScgY2FuJ3QgYmUgYXNzaWduZWQgdG8gdGhlIHBhcmFtZXRlciB0eXBlICcjdHlwZTInLlRyeSBjaGFuZ2luZyB0aGUgdHlwZSBvZiB0aGUgcGFyYW1ldGVyLCBvciBjYXN0aW5nIHRoZSBhcmd1bWVudCB0byAnI3R5cGUyJy5jb2RlQXJndW1lbnRUeXBlTm90QXNzaWduYWJsZUFyZ3VtZW50VHlwZU5vdEFzc2lnbmFibGVBUkdVTUVOVF9UWVBFX05PVF9BU1NJR05BQkxFdGVtcGxhdGVBc2NpaUNvbnRyb2xDaGFyYWN0ZXJUaGUgY29udHJvbCBjaGFyYWN0ZXIgI3VuaWNvZGUgY2FuIG9ubHkgYmUgdXNlZCBpbiBzdHJpbmdzIGFuZCBjb21tZW50cy5jb2RlQXNjaWlDb250cm9sQ2hhcmFjdGVyQXNjaWlDb250cm9sQ2hhcmFjdGVySUxMRUdBTF9DSEFSQUNURVJjb2RlQXNzZXJ0QXNFeHByZXNzaW9uYGFzc2VydGAgY2FuJ3QgYmUgdXNlZCBhcyBhbiBleHByZXNzaW9uLkFzc2VydEFzRXhwcmVzc2lvbm1lc3NhZ2VBc3NlcnRBc0V4cHJlc3Npb25jb2RlQXNzZXJ0RXh0cmFuZW91c0FyZ3VtZW50YGFzc2VydGAgY2FuJ3QgaGF2ZSBtb3JlIHRoYW4gdHdvIGFyZ3VtZW50cy5Bc3NlcnRFeHRyYW5lb3VzQXJndW1lbnRtZXNzYWdlQXNzZXJ0RXh0cmFuZW91c0FyZ3VtZW50Y29kZUF3YWl0QXNJZGVudGlmaWVyJ2F3YWl0JyBjYW4ndCBiZSB1c2VkIGFzIGFuIGlkZW50aWZpZXIgaW4gJ2FzeW5jJywgJ2FzeW5jKicsIG9yICdzeW5jKicgbWV0aG9kcy5Bd2FpdEFzSWRlbnRpZmllckFTWU5DX0tFWVdPUkRfVVNFRF9BU19JREVOVElGSUVSbWVzc2FnZUF3YWl0QXNJZGVudGlmaWVyY29kZUF3YWl0Rm9yTm90QXN5bmNUaGUgYXN5bmNocm9ub3VzIGZvci1pbiBjYW4gb25seSBiZSB1c2VkIGluIGZ1bmN0aW9ucyBtYXJrZWQgd2l0aCAnYXN5bmMnIG9yICdhc3luYyonLlRyeSBtYXJraW5nIHRoZSBmdW5jdGlvbiBib2R5IHdpdGggZWl0aGVyICdhc3luYycgb3IgJ2FzeW5jKicsIG9yIHJlbW92aW5nIHRoZSAnYXdhaXQnIGJlZm9yZSB0aGUgZm9yIGxvb3AuQXdhaXRGb3JOb3RBc3luY0FTWU5DX0ZPUl9JTl9XUk9OR19DT05URVhUbWVzc2FnZUF3YWl0Rm9yTm90QXN5bmNjb2RlQXdhaXROb3RBc3luYydhd2FpdCcgY2FuIG9ubHkgYmUgdXNlZCBpbiAnYXN5bmMnIG9yICdhc3luYyonIG1ldGhvZHMuQXdhaXROb3RBc3luY0FXQUlUX0lOX1dST05HX0NPTlRFWFRtZXNzYWdlQXdhaXROb3RBc3luY3RlbXBsYXRlQmFkVHlwZVZhcmlhYmxlSW5TdXBlcnR5cGVGb3VuZCB1bnN1cHBvcnRlZCB1c2VzIG9mICcjbmFtZScgaW4gc3VwZXJ0eXBlICcjbmFtZTInLmNvZGVCYWRUeXBlVmFyaWFibGVJblN1cGVydHlwZUJhZFR5cGVWYXJpYWJsZUluU3VwZXJ0eXBldGVtcGxhdGVCb3VuZElzc3VlVmlhQ3ljbGVOb25TaW1wbGljaXR5R2VuZXJpYyB0eXBlICcjbmFtZScgY2FuJ3QgYmUgdXNlZCB3aXRob3V0IHR5cGUgYXJndW1lbnRzIGluIHRoZSBib3VuZHMgb2YgaXRzIG93biB0eXBlIHZhcmlhYmxlcy4gSXQgaXMgcmVmZXJlbmNlZCBpbmRpcmVjdGx5IHRocm91Z2ggJyNuYW1lMicuVHJ5IHByb3ZpZGluZyB0eXBlIGFyZ3VtZW50cyB0byAnI25hbWUyJyBoZXJlIG9yIHRvIHNvbWUgb3RoZXIgcmF3IHR5cGVzIGluIHRoZSBib3VuZHMgYWxvbmcgdGhlIHJlZmVyZW5jZSBjaGFpbi5jb2RlQm91bmRJc3N1ZVZpYUN5Y2xlTm9uU2ltcGxpY2l0eUJvdW5kSXNzdWVWaWFDeWNsZU5vblNpbXBsaWNpdHlOT1RfSU5TVEFOVElBVEVEX0JPVU5EdGVtcGxhdGVCb3VuZElzc3VlVmlhTG9vcE5vblNpbXBsaWNpdHlHZW5lcmljIHR5cGUgJyNuYW1lJyBjYW4ndCBiZSB1c2VkIHdpdGhvdXQgdHlwZSBhcmd1bWVudHMgaW4gdGhlIGJvdW5kcyBvZiBpdHMgb3duIHR5cGUgdmFyaWFibGVzLlRyeSBwcm92aWRpbmcgdHlwZSBhcmd1bWVudHMgdG8gJyNuYW1lJyBoZXJlLmNvZGVCb3VuZElzc3VlVmlhTG9vcE5vblNpbXBsaWNpdHlCb3VuZElzc3VlVmlhTG9vcE5vblNpbXBsaWNpdHl0ZW1wbGF0ZUJvdW5kSXNzdWVWaWFSYXdUeXBlV2l0aE5vblNpbXBsZUJvdW5kc0dlbmVyaWMgdHlwZSAnI25hbWUnIGNhbid0IGJlIHVzZWQgd2l0aG91dCB0eXBlIGFyZ3VtZW50cyBpbiBhIHR5cGUgdmFyaWFibGUgYm91bmQuY29kZUJvdW5kSXNzdWVWaWFSYXdUeXBlV2l0aE5vblNpbXBsZUJvdW5kc0JvdW5kSXNzdWVWaWFSYXdUeXBlV2l0aE5vblNpbXBsZUJvdW5kc2NvZGVCcmVha091dHNpZGVPZkxvb3BBIGJyZWFrIHN0YXRlbWVudCBjYW4ndCBiZSB1c2VkIG91dHNpZGUgb2YgYSBsb29wIG9yIHN3aXRjaCBzdGF0ZW1lbnQuVHJ5IHJlbW92aW5nIHRoZSBicmVhayBzdGF0ZW1lbnQuQnJlYWtPdXRzaWRlT2ZMb29wbWVzc2FnZUJyZWFrT3V0c2lkZU9mTG9vcHRlbXBsYXRlQnJlYWtUYXJnZXRPdXRzaWRlRnVuY3Rpb25DYW4ndCBicmVhayB0byAnI25hbWUnIGluIGEgZGlmZmVyZW50IGZ1bmN0aW9uLmNvZGVCcmVha1RhcmdldE91dHNpZGVGdW5jdGlvbkJyZWFrVGFyZ2V0T3V0c2lkZUZ1bmN0aW9udGVtcGxhdGVCdWlsdEluSWRlbnRpZmllckFzVHlwZVRoZSBidWlsdC1pbiBpZGVudGlmaWVyICcjbGV4ZW1lJyBjYW4ndCBiZSB1c2VkIGFzIGEgdHlwZS5UcnkgY29ycmVjdGluZyB0aGUgbmFtZSB0byBtYXRjaCBhbiBleGlzdGluZyB0eXBlLmNvZGVCdWlsdEluSWRlbnRpZmllckFzVHlwZUJ1aWx0SW5JZGVudGlmaWVyQXNUeXBlQlVJTFRfSU5fSURFTlRJRklFUl9BU19UWVBFdGVtcGxhdGVCdWlsdEluSWRlbnRpZmllckluRGVjbGFyYXRpb25DYW4ndCB1c2UgJyNsZXhlbWUnIGFzIGEgbmFtZSBoZXJlLmNvZGVCdWlsdEluSWRlbnRpZmllckluRGVjbGFyYXRpb25CdWlsdEluSWRlbnRpZmllckluRGVjbGFyYXRpb25CVUlMVF9JTl9JREVOVElGSUVSX0lOX0RFQ0xBUkFUSU9OY29kZUJ5dGVjb2RlTGltaXRFeGNlZWRlZFRvb01hbnlBcmd1bWVudHNEYXJ0IGJ5dGVjb2RlIGxpbWl0IGV4Y2VlZGVkOiB0b28gbWFueSBhcmd1bWVudHMuQnl0ZWNvZGVMaW1pdEV4Y2VlZGVkVG9vTWFueUFyZ3VtZW50c21lc3NhZ2VCeXRlY29kZUxpbWl0RXhjZWVkZWRUb29NYW55QXJndW1lbnRzY29kZUNhbmRpZGF0ZUZvdW5kRm91bmQgdGhpcyBjYW5kaWRhdGUsIGJ1dCB0aGUgYXJndW1lbnRzIGRvbid0IG1hdGNoLkNhbmRpZGF0ZUZvdW5kbWVzc2FnZUNhbmRpZGF0ZUZvdW5kdGVtcGxhdGVDYW5kaWRhdGVGb3VuZElzRGVmYXVsdENvbnN0cnVjdG9yVGhlIGNsYXNzICcjbmFtZScgaGFzIGEgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBubyBhcmd1bWVudHMuY29kZUNhbmRpZGF0ZUZvdW5kSXNEZWZhdWx0Q29uc3RydWN0b3JDYW5kaWRhdGVGb3VuZElzRGVmYXVsdENvbnN0cnVjdG9yY29kZUNhbm5vdEFzc2lnblRvUGFyZW50aGVzaXplZEV4cHJlc3Npb25DYW4ndCBhc3NpZ24gdG8gYSBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb24uQ2Fubm90QXNzaWduVG9QYXJlbnRoZXNpemVkRXhwcmVzc2lvbkFTU0lHTk1FTlRfVE9fUEFSRU5USEVTSVpFRF9FWFBSRVNTSU9ObWVzc2FnZUNhbm5vdEFzc2lnblRvUGFyZW50aGVzaXplZEV4cHJlc3Npb25jb2RlQ2Fubm90QXNzaWduVG9TdXBlckNhbid0IGFzc2lnbiB0byBzdXBlci5DYW5ub3RBc3NpZ25Ub1N1cGVyTk9UX0FOX0xWQUxVRW1lc3NhZ2VDYW5ub3RBc3NpZ25Ub1N1cGVyY29kZUNhbm5vdFJlYWRTZGtTcGVjaWZpY2F0aW9uQ2Fubm90UmVhZFNka1NwZWNpZmljYXRpb25jb2RlQ2FudERpc2FtYmlndWF0ZUFtYmlndW91c0luZm9ybWF0aW9uQm90aCBJdGVyYWJsZSBhbmQgTWFwIHNwcmVhZCBlbGVtZW50cyBlbmNvdW50ZXJlZCBpbiBhbWJpZ3VvdXMgbGl0ZXJhbC5DYW50RGlzYW1iaWd1YXRlQW1iaWd1b3VzSW5mb3JtYXRpb25tZXNzYWdlQ2FudERpc2FtYmlndWF0ZUFtYmlndW91c0luZm9ybWF0aW9uY29kZUNhbnREaXNhbWJpZ3VhdGVOb3RFbm91Z2hJbmZvcm1hdGlvbk5vdCBlbm91Z2ggdHlwZSBpbmZvcm1hdGlvbiB0byBkaXNhbWJpZ3VhdGUgYmV0d2VlbiBsaXRlcmFsIHNldCBhbmQgbGl0ZXJhbCBtYXAuVHJ5IHByb3ZpZGluZyB0eXBlIGFyZ3VtZW50cyBmb3IgdGhlIGxpdGVyYWwgZXhwbGljaXRseSB0byBkaXNhbWJpZ3VhdGUgaXQuQ2FudERpc2FtYmlndWF0ZU5vdEVub3VnaEluZm9ybWF0aW9ubWVzc2FnZUNhbnREaXNhbWJpZ3VhdGVOb3RFbm91Z2hJbmZvcm1hdGlvbmNvZGVDYW50SW5mZXJQYWNrYWdlc0Zyb21NYW55SW5wdXRzY29kZUNhbnRJbmZlclBhY2thZ2VzRnJvbVBhY2thZ2VVcml0ZW1wbGF0ZUNhbnRJbmZlclJldHVyblR5cGVEdWVUb0luY29uc2lzdGVudE92ZXJyaWRlc0Nhbid0IGluZmVyIGEgcmV0dXJuIHR5cGUgZm9yICcjbmFtZScgYXMgc29tZSBvZiB0aGUgaW5oZXJpdGVkIG1lbWJlcnMgaGF2ZSBkaWZmZXJlbnQgdHlwZXMuVHJ5IGFkZGluZyBhbiBleHBsaWNpdCB0eXBlLmNvZGVDYW50SW5mZXJSZXR1cm5UeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXNDYW50SW5mZXJSZXR1cm5UeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXNJTlZBTElEX01FVEhPRF9PVkVSUklERXRlbXBsYXRlQ2FudEluZmVyVHlwZUR1ZVRvQ2lyY3VsYXJpdHlDYW4ndCBpbmZlciB0aGUgdHlwZSBvZiAnI3N0cmluZyc6IGNpcmN1bGFyaXR5IGZvdW5kIGR1cmluZyB0eXBlIGluZmVyZW5jZS5TcGVjaWZ5IHRoZSB0eXBlIGV4cGxpY2l0bHkuY29kZUNhbnRJbmZlclR5cGVEdWVUb0NpcmN1bGFyaXR5Q2FudEluZmVyVHlwZUR1ZVRvQ2lyY3VsYXJpdHlSRUNVUlNJVkVfQ09NUElMRV9USU1FX0NPTlNUQU5UdGVtcGxhdGVDYW50SW5mZXJUeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXNDYW4ndCBpbmZlciBhIHR5cGUgZm9yICcjbmFtZScgYXMgc29tZSBvZiB0aGUgaW5oZXJpdGVkIG1lbWJlcnMgaGF2ZSBkaWZmZXJlbnQgdHlwZXMuY29kZUNhbnRJbmZlclR5cGVEdWVUb0luY29uc2lzdGVudE92ZXJyaWRlc0NhbnRJbmZlclR5cGVEdWVUb0luY29uc2lzdGVudE92ZXJyaWRlc2NvZGVDYW50UmVhZEZpbGVDYW50UmVhZEZpbGVVUklfRE9FU19OT1RfRVhJU1R0ZW1wbGF0ZUNhbnRVc2VDb250cm9sRmxvd09yU3ByZWFkQXNDb25zdGFudCcjbGV4ZW1lJyBpcyBub3Qgc3VwcG9ydGVkIGluIGNvbnN0YW50IGV4cHJlc3Npb25zLmNvZGVDYW50VXNlQ29udHJvbEZsb3dPclNwcmVhZEFzQ29uc3RhbnRDYW50VXNlQ29udHJvbEZsb3dPclNwcmVhZEFzQ29uc3RhbnROT1RfQ09OU1RBTlRfRVhQUkVTU0lPTnRlbXBsYXRlQ2FudFVzZURlZmVycmVkUHJlZml4QXNDb25zdGFudCcjbGV4ZW1lJyBjYW4ndCBiZSB1c2VkIGluIGEgY29uc3RhbnQgZXhwcmVzc2lvbiBiZWNhdXNlIGl0J3MgbWFya2VkIGFzICdkZWZlcnJlZCcgd2hpY2ggbWVhbnMgaXQgaXNuJ3QgYXZhaWxhYmxlIHVudGlsIGxvYWRlZC5UcnkgbW92aW5nIHRoZSBjb25zdGFudCBmcm9tIHRoZSBkZWZlcnJlZCBsaWJyYXJ5LCBvciByZW1vdmluZyAnZGVmZXJyZWQnIGZyb20gdGhlIGltcG9ydC4KY29kZUNhbnRVc2VEZWZlcnJlZFByZWZpeEFzQ29uc3RhbnRDYW50VXNlRGVmZXJyZWRQcmVmaXhBc0NvbnN0YW50Q09OU1RfREVGRVJSRURfQ0xBU1Njb2RlQ2FudFVzZVByZWZpeEFzRXhwcmVzc2lvbkEgcHJlZml4IGNhbid0IGJlIHVzZWQgYXMgYW4gZXhwcmVzc2lvbi5DYW50VXNlUHJlZml4QXNFeHByZXNzaW9uUFJFRklYX0lERU5USUZJRVJfTk9UX0ZPTExPV0VEX0JZX0RPVG1lc3NhZ2VDYW50VXNlUHJlZml4QXNFeHByZXNzaW9uY29kZUNhbnRVc2VQcmVmaXhXaXRoTnVsbEF3YXJlQSBwcmVmaXggY2FuJ3QgYmUgdXNlZCB3aXRoIG51bGwtYXdhcmUgb3BlcmF0b3JzLkl0IHNob3VsZCBiZSBzYWZlIHRvIHJlbW92ZSB0aGUgJz8nIGFzIGEgcHJlZml4IGlzIG5ldmVyIG51bGwuQ2FudFVzZVByZWZpeFdpdGhOdWxsQXdhcmVtZXNzYWdlQ2FudFVzZVByZWZpeFdpdGhOdWxsQXdhcmVjb2RlQ2F0Y2hTeW50YXgnY2F0Y2gnIG11c3QgYmUgZm9sbG93ZWQgYnkgJyhpZGVudGlmaWVyKScgb3IgJyhpZGVudGlmaWVyLCBpZGVudGlmaWVyKScuTm8gdHlwZXMgYXJlIG5lZWRlZCwgdGhlIGZpcnN0IGlzIGdpdmVuIGJ5ICdvbicsIHRoZSBzZWNvbmQgaXMgYWx3YXlzICdTdGFja1RyYWNlJy5DYXRjaFN5bnRheG1lc3NhZ2VDYXRjaFN5bnRheGNvZGVDYXRjaFN5bnRheEV4dHJhUGFyYW1ldGVyc0NhdGNoU3ludGF4RXh0cmFQYXJhbWV0ZXJzbWVzc2FnZUNhdGNoU3ludGF4RXh0cmFQYXJhbWV0ZXJzY29kZUNsYXNzSW5DbGFzc0NsYXNzZXMgY2FuJ3QgYmUgZGVjbGFyZWQgaW5zaWRlIG90aGVyIGNsYXNzZXMuVHJ5IG1vdmluZyB0aGUgY2xhc3MgdG8gdGhlIHRvcC1sZXZlbC5DbGFzc0luQ2xhc3NtZXNzYWdlQ2xhc3NJbkNsYXNzY29kZUNvbG9uSW5QbGFjZU9mSW5Gb3ItaW4gbG9vcHMgdXNlICdpbicgcmF0aGVyIHRoYW4gYSBjb2xvbi5UcnkgcmVwbGFjaW5nIHRoZSBjb2xvbiB3aXRoIHRoZSBrZXl3b3JkICdpbicuQ29sb25JblBsYWNlT2ZJbm1lc3NhZ2VDb2xvbkluUGxhY2VPZkludGVtcGxhdGVDb21iaW5lZE1lbWJlclNpZ25hdHVyZUZhaWxlZENsYXNzICcjbmFtZScgaW5oZXJpdHMgbXVsdGlwbGUgbWVtYmVycyBuYW1lZCAnI25hbWUyJyB3aXRoIGluY29tcGF0aWJsZSBzaWduYXR1cmVzLlRyeSBhZGRpbmcgYSBkZWNsYXJhdGlvbiBvZiAnI25hbWUyJyB0byAnI25hbWUnLmNvZGVDb21iaW5lZE1lbWJlclNpZ25hdHVyZUZhaWxlZENvbWJpbmVkTWVtYmVyU2lnbmF0dXJlRmFpbGVkSU5DT05TSVNURU5UX0lOSEVSSVRBTkNFdGVtcGxhdGVDb25mbGljdGluZ01vZGlmaWVyc01lbWJlcnMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgYm90aCAnI3N0cmluZycgYW5kICcjc3RyaW5nMicuVHJ5IHJlbW92aW5nIG9uZSBvZiB0aGUga2V5d29yZHMuY29kZUNvbmZsaWN0aW5nTW9kaWZpZXJzQ29uZmxpY3RpbmdNb2RpZmllcnN0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhDb25zdHJ1Y3RvckNvbmZsaWN0cyB3aXRoIGNvbnN0cnVjdG9yICcjbmFtZScuY29kZUNvbmZsaWN0c1dpdGhDb25zdHJ1Y3RvckNvbmZsaWN0c1dpdGhDb25zdHJ1Y3RvckNPTkZMSUNUU19XSVRIX0NPTlNUUlVDVE9SdGVtcGxhdGVDb25mbGljdHNXaXRoRmFjdG9yeUNvbmZsaWN0cyB3aXRoIGZhY3RvcnkgJyNuYW1lJy5jb2RlQ29uZmxpY3RzV2l0aEZhY3RvcnlDb25mbGljdHNXaXRoRmFjdG9yeXRlbXBsYXRlQ29uZmxpY3RzV2l0aE1lbWJlckNvbmZsaWN0cyB3aXRoIG1lbWJlciAnI25hbWUnLmNvZGVDb25mbGljdHNXaXRoTWVtYmVyQ29uZmxpY3RzV2l0aE1lbWJlckNPTkZMSUNUU19XSVRIX01FTUJFUnRlbXBsYXRlQ29uZmxpY3RzV2l0aE1lbWJlcldhcm5pbmdjb2RlQ29uZmxpY3RzV2l0aE1lbWJlcldhcm5pbmdDb25mbGljdHNXaXRoTWVtYmVyV2FybmluZ3RlbXBsYXRlQ29uZmxpY3RzV2l0aFNldHRlckNvbmZsaWN0cyB3aXRoIHNldHRlciAnI25hbWUnLmNvZGVDb25mbGljdHNXaXRoU2V0dGVyQ29uZmxpY3RzV2l0aFNldHRlcnRlbXBsYXRlQ29uZmxpY3RzV2l0aFNldHRlcldhcm5pbmdjb2RlQ29uZmxpY3RzV2l0aFNldHRlcldhcm5pbmdDb25mbGljdHNXaXRoU2V0dGVyV2FybmluZ3RlbXBsYXRlQ29uZmxpY3RzV2l0aFR5cGVWYXJpYWJsZUNvbmZsaWN0cyB3aXRoIHR5cGUgdmFyaWFibGUgJyNuYW1lJy5jb2RlQ29uZmxpY3RzV2l0aFR5cGVWYXJpYWJsZUNvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGVDT05GTElDVElOR19UWVBFX1ZBUklBQkxFX0FORF9NRU1CRVJjb2RlQ29uZmxpY3RzV2l0aFR5cGVWYXJpYWJsZUNhdXNlVGhpcyBpcyB0aGUgdHlwZSB2YXJpYWJsZS5Db25mbGljdHNXaXRoVHlwZVZhcmlhYmxlQ2F1c2VtZXNzYWdlQ29uZmxpY3RzV2l0aFR5cGVWYXJpYWJsZUNhdXNlY29kZUNvbnN0QW5kRmluYWxNZW1iZXJzIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlIGJvdGggJ2NvbnN0JyBhbmQgJ2ZpbmFsJy5UcnkgcmVtb3ZpbmcgZWl0aGVyIHRoZSAnY29uc3QnIG9yICdmaW5hbCcga2V5d29yZC5Db25zdEFuZEZpbmFsbWVzc2FnZUNvbnN0QW5kRmluYWxjb2RlQ29uc3RDbGFzc0NsYXNzZXMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgJ2NvbnN0Jy5UcnkgcmVtb3ZpbmcgdGhlICdjb25zdCcga2V5d29yZC4gSWYgeW91J3JlIHRyeWluZyB0byBpbmRpY2F0ZSB0aGF0IGluc3RhbmNlcyBvZiB0aGUgY2xhc3MgY2FuIGJlIGNvbnN0YW50cywgcGxhY2UgdGhlICdjb25zdCcga2V5d29yZCBvbiAgdGhlIGNsYXNzJyBjb25zdHJ1Y3RvcihzKS5Db25zdENsYXNzbWVzc2FnZUNvbnN0Q2xhc3Njb2RlQ29uc3RDb25zdHJ1Y3Rvck5vbkZpbmFsRmllbGRDb25zdHJ1Y3RvciBpcyBtYXJrZWQgJ2NvbnN0JyBzbyBhbGwgZmllbGRzIG11c3QgYmUgZmluYWwuQ29uc3RDb25zdHJ1Y3Rvck5vbkZpbmFsRmllbGRDT05TVF9DT05TVFJVQ1RPUl9XSVRIX05PTl9GSU5BTF9GSUVMRG1lc3NhZ2VDb25zdENvbnN0cnVjdG9yTm9uRmluYWxGaWVsZGNvZGVDb25zdENvbnN0cnVjdG9yTm9uRmluYWxGaWVsZENhdXNlRmllbGQgaXNuJ3QgZmluYWwsIGJ1dCBjb25zdHJ1Y3RvciBpcyAnY29uc3QnLkNvbnN0Q29uc3RydWN0b3JOb25GaW5hbEZpZWxkQ2F1c2VtZXNzYWdlQ29uc3RDb25zdHJ1Y3Rvck5vbkZpbmFsRmllbGRDYXVzZWNvZGVDb25zdENvbnN0cnVjdG9yUmVkaXJlY3Rpb25Ub05vbkNvbnN0QSBjb25zdGFudCBjb25zdHJ1Y3RvciBjYW4ndCBjYWxsIGEgbm9uLWNvbnN0YW50IGNvbnN0cnVjdG9yLkNvbnN0Q29uc3RydWN0b3JSZWRpcmVjdGlvblRvTm9uQ29uc3RtZXNzYWdlQ29uc3RDb25zdHJ1Y3RvclJlZGlyZWN0aW9uVG9Ob25Db25zdGNvZGVDb25zdENvbnN0cnVjdG9yV2l0aEJvZHlBIGNvbnN0IGNvbnN0cnVjdG9yIGNhbid0IGhhdmUgYSBib2R5LlRyeSByZW1vdmluZyBlaXRoZXIgdGhlICdjb25zdCcga2V5d29yZCBvciB0aGUgYm9keS5Db25zdENvbnN0cnVjdG9yV2l0aEJvZHlDT05TVF9DT05TVFJVQ1RPUl9XSVRIX0JPRFltZXNzYWdlQ29uc3RDb25zdHJ1Y3RvcldpdGhCb2R5Y29kZUNvbnN0Q29uc3RydWN0b3JXaXRoTm9uQ29uc3RTdXBlckNvbnN0YW50IGNvbnN0cnVjdG9yIGNhbid0IGNhbGwgbm9uLWNvbnN0YW50IHN1cGVyIGNvbnN0cnVjdG9ycy5Db25zdENvbnN0cnVjdG9yV2l0aE5vbkNvbnN0U3VwZXJDT05TVF9DT05TVFJVQ1RPUl9XSVRIX05PTl9DT05TVF9TVVBFUm1lc3NhZ2VDb25zdENvbnN0cnVjdG9yV2l0aE5vbkNvbnN0U3VwZXJjb2RlQ29uc3RFdmFsQ2lyY3VsYXJpdHlDb25zdGFudCBleHByZXNzaW9uIGRlcGVuZHMgb24gaXRzZWxmLkNvbnN0RXZhbENpcmN1bGFyaXR5bWVzc2FnZUNvbnN0RXZhbENpcmN1bGFyaXR5Y29kZUNvbnN0RXZhbENvbnRleHRXaGlsZSBhbmFseXppbmc6Q29uc3RFdmFsQ29udGV4dG1lc3NhZ2VDb25zdEV2YWxDb250ZXh0dGVtcGxhdGVDb25zdEV2YWxEZWZlcnJlZExpYnJhcnknI25hbWUnIGNhbid0IGJlIHVzZWQgaW4gYSBjb25zdGFudCBleHByZXNzaW9uIGJlY2F1c2UgaXQncyBtYXJrZWQgYXMgJ2RlZmVycmVkJyB3aGljaCBtZWFucyBpdCBpc24ndCBhdmFpbGFibGUgdW50aWwgbG9hZGVkLmNvZGVDb25zdEV2YWxEZWZlcnJlZExpYnJhcnlDb25zdEV2YWxEZWZlcnJlZExpYnJhcnlOT05fQ09OU1RBTlRfREVGQVVMVF9WQUxVRV9GUk9NX0RFRkVSUkVEX0xJQlJBUll0ZW1wbGF0ZUNvbnN0RXZhbER1cGxpY2F0ZUVsZW1lbnRUaGUgZWxlbWVudCAnI2NvbnN0YW50JyBjb25mbGljdHMgd2l0aCBhbm90aGVyIGV4aXN0aW5nIGVsZW1lbnQgaW4gdGhlIHNldC5jb2RlQ29uc3RFdmFsRHVwbGljYXRlRWxlbWVudENvbnN0RXZhbER1cGxpY2F0ZUVsZW1lbnRFUVVBTF9FTEVNRU5UU19JTl9DT05TVF9TRVR0ZW1wbGF0ZUNvbnN0RXZhbER1cGxpY2F0ZUtleVRoZSBrZXkgJyNjb25zdGFudCcgY29uZmxpY3RzIHdpdGggYW5vdGhlciBleGlzdGluZyBrZXkgaW4gdGhlIG1hcC5jb2RlQ29uc3RFdmFsRHVwbGljYXRlS2V5Q29uc3RFdmFsRHVwbGljYXRlS2V5RVFVQUxfS0VZU19JTl9DT05TVF9NQVB0ZW1wbGF0ZUNvbnN0RXZhbEVsZW1lbnRJbXBsZW1lbnRzRXF1YWxUaGUgZWxlbWVudCAnI2NvbnN0YW50JyBkb2VzIG5vdCBoYXZlIGEgcHJpbWl0aXZlIG9wZXJhdG9yICc9PScuY29kZUNvbnN0RXZhbEVsZW1lbnRJbXBsZW1lbnRzRXF1YWxDb25zdEV2YWxFbGVtZW50SW1wbGVtZW50c0VxdWFsQ09OU1RfU0VUX0VMRU1FTlRfVFlQRV9JTVBMRU1FTlRTX0VRVUFMU2NvZGVDb25zdEV2YWxGYWlsZWRBc3NlcnRpb25UaGlzIGFzc2VydGlvbiBmYWlsZWQuQ29uc3RFdmFsRmFpbGVkQXNzZXJ0aW9uQ09OU1RfRVZBTF9USFJPV1NfRVhDRVBUSU9ObWVzc2FnZUNvbnN0RXZhbEZhaWxlZEFzc2VydGlvbnRlbXBsYXRlQ29uc3RFdmFsRmFpbGVkQXNzZXJ0aW9uV2l0aE1lc3NhZ2VUaGlzIGFzc2VydGlvbiBmYWlsZWQgd2l0aCBtZXNzYWdlOiAjc3RyaW5nY29kZUNvbnN0RXZhbEZhaWxlZEFzc2VydGlvbldpdGhNZXNzYWdlQ29uc3RFdmFsRmFpbGVkQXNzZXJ0aW9uV2l0aE1lc3NhZ2V0ZW1wbGF0ZUNvbnN0RXZhbEZyZWVUeXBlUGFyYW1ldGVyVGhlIHR5cGUgJyN0eXBlJyBpcyBub3QgYSBjb25zdGFudCBiZWNhdXNlIGl0IGRlcGVuZHMgb24gYSB0eXBlIHBhcmFtZXRlciwgb25seSBpbnN0YW50aWF0ZWQgdHlwZXMgYXJlIGFsbG93ZWQuY29kZUNvbnN0RXZhbEZyZWVUeXBlUGFyYW1ldGVyQ29uc3RFdmFsRnJlZVR5cGVQYXJhbWV0ZXJ0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRCaW5hcnlPcGVyYW5kVHlwZUJpbmFyeSBvcGVyYXRvciAnI3N0cmluZycgb24gJyNjb25zdGFudCcgcmVxdWlyZXMgb3BlcmFuZCBvZiB0eXBlICcjdHlwZScsIGJ1dCB3YXMgb2YgdHlwZSAnI3R5cGUyJy5jb2RlQ29uc3RFdmFsSW52YWxpZEJpbmFyeU9wZXJhbmRUeXBlQ29uc3RFdmFsSW52YWxpZEJpbmFyeU9wZXJhbmRUeXBldGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkRXF1YWxzT3BlcmFuZFR5cGVCaW5hcnkgb3BlcmF0b3IgJz09JyByZXF1aXJlcyByZWNlaXZlciBjb25zdGFudCAnI2NvbnN0YW50JyBvZiB0eXBlICdOdWxsJywgJ2Jvb2wnLCAnaW50JywgJ2RvdWJsZScsIG9yICdTdHJpbmcnLCBidXQgd2FzIG9mIHR5cGUgJyN0eXBlJy5jb2RlQ29uc3RFdmFsSW52YWxpZEVxdWFsc09wZXJhbmRUeXBlQ29uc3RFdmFsSW52YWxpZEVxdWFsc09wZXJhbmRUeXBldGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkTWV0aG9kSW52b2NhdGlvblRoZSBtZXRob2QgJyNzdHJpbmcnIGNhbid0IGJlIGludm9rZWQgb24gJyNjb25zdGFudCcgd2l0aGluIGEgY29uc3QgY29udGV4dC5jb2RlQ29uc3RFdmFsSW52YWxpZE1ldGhvZEludm9jYXRpb25Db25zdEV2YWxJbnZhbGlkTWV0aG9kSW52b2NhdGlvblVOREVGSU5FRF9PUEVSQVRPUnRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFByb3BlcnR5R2V0VGhlIHByb3BlcnR5ICcjc3RyaW5nJyBjYW4ndCBiZSBhY2Nlc3NlZCBvbiAnI2NvbnN0YW50JyB3aXRoaW4gYSBjb25zdCBjb250ZXh0LmNvZGVDb25zdEV2YWxJbnZhbGlkUHJvcGVydHlHZXRDb25zdEV2YWxJbnZhbGlkUHJvcGVydHlHZXR0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRTdGF0aWNJbnZvY2F0aW9uVGhlIGludm9jYXRpb24gb2YgJyNuYW1lJyBpcyBub3QgYWxsb3dlZCB3aXRoaW4gYSBjb25zdCBjb250ZXh0LmNvZGVDb25zdEV2YWxJbnZhbGlkU3RhdGljSW52b2NhdGlvbkNvbnN0RXZhbEludmFsaWRTdGF0aWNJbnZvY2F0aW9uQ09OU1RfSU5JVElBTElaRURfV0lUSF9OT05fQ09OU1RBTlRfVkFMVUV0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRTdHJpbmdJbnRlcnBvbGF0aW9uT3BlcmFuZFRoZSAnI2NvbnN0YW50JyBjYW4ndCBiZSB1c2VkIGFzIHBhcnQgb2YgYSBzdHJpbmcgaW50ZXJwb2xhdGlvbiB3aXRoaW4gYSBjb25zdCBjb250ZXh0LCBvbmx5IHZhbHVlcyBvZiB0eXBlICdudWxsJywgJ2Jvb2wnLCAnaW50JywgJ2RvdWJsZScsIG9yICdTdHJpbmcnIGNhbiBiZSB1c2VkLmNvZGVDb25zdEV2YWxJbnZhbGlkU3RyaW5nSW50ZXJwb2xhdGlvbk9wZXJhbmRDb25zdEV2YWxJbnZhbGlkU3RyaW5nSW50ZXJwb2xhdGlvbk9wZXJhbmRDT05TVF9FVkFMX1RZUEVfQk9PTF9OVU1fU1RSSU5HdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkU3ltYm9sTmFtZVRoZSBzeW1ib2wgbmFtZSBtdXN0IGJlIGEgdmFsaWQgcHVibGljIERhcnQgbWVtYmVyIG5hbWUsIHB1YmxpYyBjb25zdHJ1Y3RvciBuYW1lLCBvciBsaWJyYXJ5IG5hbWUsIG9wdGlvbmFsbHkgcXVhbGlmaWVkLCBidXQgd2FzICcjY29uc3RhbnQnLmNvZGVDb25zdEV2YWxJbnZhbGlkU3ltYm9sTmFtZUNvbnN0RXZhbEludmFsaWRTeW1ib2xOYW1ldGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkVHlwZUV4cGVjdGVkIGNvbnN0YW50ICcjY29uc3RhbnQnIHRvIGJlIG9mIHR5cGUgJyN0eXBlJywgYnV0IHdhcyBvZiB0eXBlICcjdHlwZTInLmNvZGVDb25zdEV2YWxJbnZhbGlkVHlwZUNvbnN0RXZhbEludmFsaWRUeXBldGVtcGxhdGVDb25zdEV2YWxLZXlJbXBsZW1lbnRzRXF1YWxUaGUga2V5ICcjY29uc3RhbnQnIGRvZXMgbm90IGhhdmUgYSBwcmltaXRpdmUgb3BlcmF0b3IgJz09Jy5jb2RlQ29uc3RFdmFsS2V5SW1wbGVtZW50c0VxdWFsQ29uc3RFdmFsS2V5SW1wbGVtZW50c0VxdWFsQ09OU1RfTUFQX0tFWV9FWFBSRVNTSU9OX1RZUEVfSU1QTEVNRU5UU19FUVVBTFN0ZW1wbGF0ZUNvbnN0RXZhbE5lZ2F0aXZlU2hpZnRCaW5hcnkgb3BlcmF0b3IgJyNzdHJpbmcnIG9uICcjc3RyaW5nMicgcmVxdWlyZXMgbm9uLW5lZ2F0aXZlIG9wZXJhbmQsIGJ1dCB3YXMgJyNzdHJpbmczJy5jb2RlQ29uc3RFdmFsTmVnYXRpdmVTaGlmdENvbnN0RXZhbE5lZ2F0aXZlU2hpZnR0ZW1wbGF0ZUNvbnN0RXZhbE5vbkNvbnN0YW50TGl0ZXJhbENhbid0IGhhdmUgYSBub24tY29uc3RhbnQgI3N0cmluZyBsaXRlcmFsIHdpdGhpbiBhIGNvbnN0IGNvbnRleHQuY29kZUNvbnN0RXZhbE5vbkNvbnN0YW50TGl0ZXJhbENvbnN0RXZhbE5vbkNvbnN0YW50TGl0ZXJhbE5PTl9DT05TVEFOVF9ERUZBVUxUX1ZBTFVFdGVtcGxhdGVDb25zdEV2YWxOb25Db25zdGFudFZhcmlhYmxlR2V0VGhlIHZhcmlhYmxlICcjc3RyaW5nJyBpcyBub3QgYSBjb25zdGFudCwgb25seSBjb25zdGFudCBleHByZXNzaW9ucyBhcmUgYWxsb3dlZC5jb2RlQ29uc3RFdmFsTm9uQ29uc3RhbnRWYXJpYWJsZUdldENvbnN0RXZhbE5vbkNvbnN0YW50VmFyaWFibGVHZXROT05fQ09OU1RBTlRfVkFMVUVfSU5fSU5JVElBTElaRVJjb2RlQ29uc3RFdmFsTm90TGlzdE9yU2V0SW5TcHJlYWRPbmx5IGxpc3RzIGFuZCBzZXRzIGNhbiBiZSB1c2VkIGluIHNwcmVhZHMgaW4gY29uc3RhbnQgbGlzdHMgYW5kIHNldHMuQ29uc3RFdmFsTm90TGlzdE9yU2V0SW5TcHJlYWRDT05TVF9TUFJFQURfRVhQRUNURURfTElTVF9PUl9TRVRtZXNzYWdlQ29uc3RFdmFsTm90TGlzdE9yU2V0SW5TcHJlYWRjb2RlQ29uc3RFdmFsTm90TWFwSW5TcHJlYWRPbmx5IG1hcHMgY2FuIGJlIHVzZWQgaW4gc3ByZWFkcyBpbiBjb25zdGFudCBtYXBzLkNvbnN0RXZhbE5vdE1hcEluU3ByZWFkQ09OU1RfU1BSRUFEX0VYUEVDVEVEX01BUG1lc3NhZ2VDb25zdEV2YWxOb3RNYXBJblNwcmVhZGNvZGVDb25zdEV2YWxOdWxsVmFsdWVOdWxsIHZhbHVlIGR1cmluZyBjb25zdGFudCBldmFsdWF0aW9uLkNvbnN0RXZhbE51bGxWYWx1ZW1lc3NhZ2VDb25zdEV2YWxOdWxsVmFsdWVjb2RlQ29uc3RFdmFsU3RhcnRpbmdQb2ludENvbnN0YW50IGV2YWx1YXRpb24gZXJyb3I6Q29uc3RFdmFsU3RhcnRpbmdQb2ludG1lc3NhZ2VDb25zdEV2YWxTdGFydGluZ1BvaW50Y29kZUNvbnN0RXZhbFVuZXZhbHVhdGVkQ291bGQgbm90IGV2YWx1YXRlIGNvbnN0YW50IGV4cHJlc3Npb24uQ29uc3RFdmFsVW5ldmFsdWF0ZWRtZXNzYWdlQ29uc3RFdmFsVW5ldmFsdWF0ZWR0ZW1wbGF0ZUNvbnN0RXZhbFplcm9EaXZpc29yQmluYXJ5IG9wZXJhdG9yICcjc3RyaW5nJyBvbiAnI3N0cmluZzInIHJlcXVpcmVzIG5vbi16ZXJvIGRpdmlzb3IsIGJ1dCBkaXZpc29yIHdhcyAnMCcuY29kZUNvbnN0RXZhbFplcm9EaXZpc29yQ29uc3RFdmFsWmVyb0Rpdmlzb3JDT05TVF9FVkFMX1RIUk9XU19JREJaRWNvZGVDb25zdEZhY3RvcnlPbmx5IHJlZGlyZWN0aW5nIGZhY3RvcnkgY29uc3RydWN0b3JzIGNhbiBiZSBkZWNsYXJlZCB0byBiZSAnY29uc3QnLlRyeSByZW1vdmluZyB0aGUgJ2NvbnN0JyBrZXl3b3JkLCBvciByZXBsYWNpbmcgdGhlIGJvZHkgd2l0aCAnPScgZm9sbG93ZWQgYnkgYSB2YWxpZCB0YXJnZXQuQ29uc3RGYWN0b3J5bWVzc2FnZUNvbnN0RmFjdG9yeWNvZGVDb25zdEZhY3RvcnlSZWRpcmVjdGlvblRvTm9uQ29uc3RDb25zdGFudCBmYWN0b3J5IGNvbnN0cnVjdG9yIGNhbid0IGRlbGVnYXRlIHRvIGEgbm9uLWNvbnN0YW50IGNvbnN0cnVjdG9yLlRyeSByZWRpcmVjdGluZyB0byBhIGRpZmZlcmVudCBjb25zdHJ1Y3RvciBvciBtYXJraW5nIHRoZSB0YXJnZXQgY29uc3RydWN0b3IgJ2NvbnN0Jy5Db25zdEZhY3RvcnlSZWRpcmVjdGlvblRvTm9uQ29uc3RSRURJUkVDVF9UT19OT05fQ09OU1RfQ09OU1RSVUNUT1JtZXNzYWdlQ29uc3RGYWN0b3J5UmVkaXJlY3Rpb25Ub05vbkNvbnN0dGVtcGxhdGVDb25zdEZpZWxkV2l0aG91dEluaXRpYWxpemVyVGhlIGNvbnN0IHZhcmlhYmxlICcjbmFtZScgbXVzdCBiZSBpbml0aWFsaXplZC5UcnkgYWRkaW5nIGFuIGluaXRpYWxpemVyICgnPSA8ZXhwcmVzc2lvbj4nKSB0byB0aGUgZGVjbGFyYXRpb24uY29kZUNvbnN0RmllbGRXaXRob3V0SW5pdGlhbGl6ZXJDb25zdEZpZWxkV2l0aG91dEluaXRpYWxpemVyQ09OU1RfTk9UX0lOSVRJQUxJWkVEY29kZUNvbnN0SW5zdGFuY2VGaWVsZE9ubHkgc3RhdGljIGZpZWxkcyBjYW4gYmUgZGVjbGFyZWQgYXMgY29uc3QuVHJ5IHVzaW5nICdmaW5hbCcgaW5zdGVhZCBvZiAnY29uc3QnLCBvciBhZGRpbmcgdGhlIGtleXdvcmQgJ3N0YXRpYycuQ29uc3RJbnN0YW5jZUZpZWxkQ09OU1RfSU5TVEFOQ0VfRklFTERtZXNzYWdlQ29uc3RJbnN0YW5jZUZpZWxkY29kZUNvbnN0TWV0aG9kR2V0dGVycywgc2V0dGVycyBhbmQgbWV0aG9kcyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSAnY29uc3QnLlRyeSByZW1vdmluZyB0aGUgJ2NvbnN0JyBrZXl3b3JkLkNvbnN0TWV0aG9kbWVzc2FnZUNvbnN0TWV0aG9kY29kZUNvbnN0cnVjdG9yQ3ljbGljUmVkaXJlY3RpbmcgY29uc3RydWN0b3JzIGNhbid0IGJlIGN5Y2xpYy5UcnkgdG8gaGF2ZSBhbGwgY29uc3RydWN0b3JzIGV2ZW50dWFsbHkgcmVkaXJlY3QgdG8gYSBub24tcmVkaXJlY3RpbmcgY29uc3RydWN0b3IuQ29uc3RydWN0b3JDeWNsaWNSRUNVUlNJVkVfQ09OU1RSVUNUT1JfUkVESVJFQ1RtZXNzYWdlQ29uc3RydWN0b3JDeWNsaWN0ZW1wbGF0ZUNvbnN0cnVjdG9yTm90Rm91bmRDb3VsZG4ndCBmaW5kIGNvbnN0cnVjdG9yICcjbmFtZScuY29kZUNvbnN0cnVjdG9yTm90Rm91bmRDb25zdHJ1Y3Rvck5vdEZvdW5kQ09OU1RSVUNUT1JfTk9UX0ZPVU5EY29kZUNvbnN0cnVjdG9yTm90U3luY0NvbnN0cnVjdG9yIGJvZGllcyBjYW4ndCB1c2UgJ2FzeW5jJywgJ2FzeW5jKicsIG9yICdzeW5jKicuQ29uc3RydWN0b3JOb3RTeW5jTk9OX1NZTkNfQ09OU1RSVUNUT1JtZXNzYWdlQ29uc3RydWN0b3JOb3RTeW5jY29kZUNvbnN0cnVjdG9yV2l0aFJldHVyblR5cGVDb25zdHJ1Y3RvcnMgY2FuJ3QgaGF2ZSBhIHJldHVybiB0eXBlLlRyeSByZW1vdmluZyB0aGUgcmV0dXJuIHR5cGUuQ29uc3RydWN0b3JXaXRoUmV0dXJuVHlwZW1lc3NhZ2VDb25zdHJ1Y3RvcldpdGhSZXR1cm5UeXBlY29kZUNvbnN0cnVjdG9yV2l0aFR5cGVBcmd1bWVudHNBIGNvbnN0cnVjdG9yIGludm9jYXRpb24gY2FuJ3QgaGF2ZSB0eXBlIGFyZ3VtZW50cyBvbiB0aGUgY29uc3RydWN0b3IgbmFtZS5UcnkgdG8gcGxhY2UgdGhlIHR5cGUgYXJndW1lbnRzIG9uIHRoZSBjbGFzcyBuYW1lLkNvbnN0cnVjdG9yV2l0aFR5cGVBcmd1bWVudHNXUk9OR19OVU1CRVJfT0ZfVFlQRV9BUkdVTUVOVFNfQ09OU1RSVUNUT1JtZXNzYWdlQ29uc3RydWN0b3JXaXRoVHlwZUFyZ3VtZW50c2NvZGVDb25zdHJ1Y3RvcldpdGhUeXBlUGFyYW1ldGVyc0NvbnN0cnVjdG9ycyBjYW4ndCBoYXZlIHR5cGUgcGFyYW1ldGVycy5Db25zdHJ1Y3RvcldpdGhUeXBlUGFyYW1ldGVyc1RZUEVfUEFSQU1FVEVSX09OX0NPTlNUUlVDVE9SbWVzc2FnZUNvbnN0cnVjdG9yV2l0aFR5cGVQYXJhbWV0ZXJzY29kZUNvbnN0cnVjdG9yV2l0aFdyb25nTmFtZVRoZSBuYW1lIG9mIGEgY29uc3RydWN0b3IgbXVzdCBtYXRjaCB0aGUgbmFtZSBvZiB0aGUgZW5jbG9zaW5nIGNsYXNzLkNvbnN0cnVjdG9yV2l0aFdyb25nTmFtZUlOVkFMSURfQ09OU1RSVUNUT1JfTkFNRW1lc3NhZ2VDb25zdHJ1Y3RvcldpdGhXcm9uZ05hbWV0ZW1wbGF0ZUNvbnN0cnVjdG9yV2l0aFdyb25nTmFtZUNvbnRleHRUaGUgbmFtZSBvZiB0aGUgZW5jbG9zaW5nIGNsYXNzIGlzICcjbmFtZScuY29kZUNvbnN0cnVjdG9yV2l0aFdyb25nTmFtZUNvbnRleHRDb25zdHJ1Y3RvcldpdGhXcm9uZ05hbWVDb250ZXh0Y29kZUNvbnRpbnVlTGFiZWxOb3RUYXJnZXRUYXJnZXQgb2YgY29udGludWUgbXVzdCBiZSBhIGxhYmVsLkNvbnRpbnVlTGFiZWxOb3RUYXJnZXRMQUJFTF9VTkRFRklORURtZXNzYWdlQ29udGludWVMYWJlbE5vdFRhcmdldGNvZGVDb250aW51ZU91dHNpZGVPZkxvb3BBIGNvbnRpbnVlIHN0YXRlbWVudCBjYW4ndCBiZSB1c2VkIG91dHNpZGUgb2YgYSBsb29wIG9yIHN3aXRjaCBzdGF0ZW1lbnQuVHJ5IHJlbW92aW5nIHRoZSBjb250aW51ZSBzdGF0ZW1lbnQuQ29udGludWVPdXRzaWRlT2ZMb29wbWVzc2FnZUNvbnRpbnVlT3V0c2lkZU9mTG9vcHRlbXBsYXRlQ29udGludWVUYXJnZXRPdXRzaWRlRnVuY3Rpb25DYW4ndCBjb250aW51ZSBhdCAnI25hbWUnIGluIGEgZGlmZmVyZW50IGZ1bmN0aW9uLmNvZGVDb250aW51ZVRhcmdldE91dHNpZGVGdW5jdGlvbkNvbnRpbnVlVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uY29kZUNvbnRpbnVlV2l0aG91dExhYmVsSW5DYXNlQSBjb250aW51ZSBzdGF0ZW1lbnQgaW4gYSBzd2l0Y2ggc3RhdGVtZW50IG11c3QgaGF2ZSBhIGxhYmVsIGFzIGEgdGFyZ2V0LlRyeSBhZGRpbmcgYSBsYWJlbCBhc3NvY2lhdGVkIHdpdGggb25lIG9mIHRoZSBjYXNlIGNsYXVzZXMgdG8gdGhlIGNvbnRpbnVlIHN0YXRlbWVudC5Db250aW51ZVdpdGhvdXRMYWJlbEluQ2FzZW1lc3NhZ2VDb250aW51ZVdpdGhvdXRMYWJlbEluQ2FzZXRlbXBsYXRlQ291bGROb3RQYXJzZVVyaUNvdWxkbid0IHBhcnNlIFVSSSAnI3N0cmluZyc6CiAgI3N0cmluZzIuY29kZUNvdWxkTm90UGFyc2VVcmlDb3VsZE5vdFBhcnNlVXJpY29kZUNvdmFyaWFudEFuZFN0YXRpY01lbWJlcnMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgYm90aCAnY292YXJpYW50JyBhbmQgJ3N0YXRpYycuVHJ5IHJlbW92aW5nIGVpdGhlciB0aGUgJ2NvdmFyaWFudCcgb3IgJ3N0YXRpYycga2V5d29yZC5Db3ZhcmlhbnRBbmRTdGF0aWNtZXNzYWdlQ292YXJpYW50QW5kU3RhdGljY29kZUNvdmFyaWFudE1lbWJlckdldHRlcnMsIHNldHRlcnMgYW5kIG1ldGhvZHMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgJ2NvdmFyaWFudCcuVHJ5IHJlbW92aW5nIHRoZSAnY292YXJpYW50JyBrZXl3b3JkLkNvdmFyaWFudE1lbWJlcm1lc3NhZ2VDb3ZhcmlhbnRNZW1iZXJ0ZW1wbGF0ZUN5Y2xlSW5UeXBlVmFyaWFibGVzVHlwZSAnI25hbWUnIGlzIGEgYm91bmQgb2YgaXRzZWxmIHZpYSAnI3N0cmluZycuVHJ5IGJyZWFraW5nIHRoZSBjeWNsZSBieSByZW1vdmluZyBhdCBsZWFzdCBvbiBvZiB0aGUgJ2V4dGVuZHMnIGNsYXVzZXMgaW4gdGhlIGN5Y2xlLmNvZGVDeWNsZUluVHlwZVZhcmlhYmxlc0N5Y2xlSW5UeXBlVmFyaWFibGVzVFlQRV9QQVJBTUVURVJfU1VQRVJUWVBFX09GX0lUU19CT1VORHRlbXBsYXRlQ3ljbGljQ2xhc3NIaWVyYXJjaHknI25hbWUnIGlzIGEgc3VwZXJ0eXBlIG9mIGl0c2VsZi5jb2RlQ3ljbGljQ2xhc3NIaWVyYXJjaHlDeWNsaWNDbGFzc0hpZXJhcmNoeVJFQ1VSU0lWRV9JTlRFUkZBQ0VfSU5IRVJJVEFOQ0V0ZW1wbGF0ZUN5Y2xpY1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yc0N5Y2xpYyBkZWZpbml0aW9uIG9mIGZhY3RvcnkgJyNuYW1lJy5jb2RlQ3ljbGljUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzQ3ljbGljUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzUkVDVVJTSVZFX0ZBQ1RPUllfUkVESVJFQ1R0ZW1wbGF0ZUN5Y2xpY1R5cGVkZWZUaGUgdHlwZWRlZiAnI25hbWUnIGhhcyBhIHJlZmVyZW5jZSB0byBpdHNlbGYuY29kZUN5Y2xpY1R5cGVkZWZDeWNsaWNUeXBlZGVmVFlQRV9BTElBU19DQU5OT1RfUkVGRVJFTkNFX0lUU0VMRmNvZGVEZWNsYXJlZE1lbWJlckNvbmZsaWN0c1dpdGhJbmhlcml0ZWRNZW1iZXJDYW4ndCBkZWNsYXJlIGEgbWVtYmVyIHRoYXQgY29uZmxpY3RzIHdpdGggYW4gaW5oZXJpdGVkIG9uZS5EZWNsYXJlZE1lbWJlckNvbmZsaWN0c1dpdGhJbmhlcml0ZWRNZW1iZXJERUNMQVJFRF9NRU1CRVJfQ09ORkxJQ1RTX1dJVEhfSU5IRVJJVEVEbWVzc2FnZURlY2xhcmVkTWVtYmVyQ29uZmxpY3RzV2l0aEluaGVyaXRlZE1lbWJlcmNvZGVEZWNsYXJlZE1lbWJlckNvbmZsaWN0c1dpdGhJbmhlcml0ZWRNZW1iZXJDYXVzZVRoaXMgaXMgdGhlIGluaGVyaXRlZCBtZW1iZXIuRGVjbGFyZWRNZW1iZXJDb25mbGljdHNXaXRoSW5oZXJpdGVkTWVtYmVyQ2F1c2VtZXNzYWdlRGVjbGFyZWRNZW1iZXJDb25mbGljdHNXaXRoSW5oZXJpdGVkTWVtYmVyQ2F1c2V0ZW1wbGF0ZURlZmF1bHRWYWx1ZUluUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JDYW4ndCBoYXZlIGEgZGVmYXVsdCB2YWx1ZSBoZXJlIGJlY2F1c2UgYW55IGRlZmF1bHQgdmFsdWVzIG9mICcjbmFtZScgd291bGQgYmUgdXNlZCBpbnN0ZWFkLlRyeSByZW1vdmluZyB0aGUgZGVmYXVsdCB2YWx1ZS5jb2RlRGVmYXVsdFZhbHVlSW5SZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvckRlZmF1bHRWYWx1ZUluUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JERUZBVUxUX1ZBTFVFX0lOX1JFRElSRUNUSU5HX0ZBQ1RPUllfQ09OU1RSVUNUT1Jjb2RlRGVmZXJyZWRBZnRlclByZWZpeFRoZSBkZWZlcnJlZCBrZXl3b3JkIHNob3VsZCBjb21lIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgcHJlZml4ICgnYXMnIGNsYXVzZSkuVHJ5IG1vdmluZyB0aGUgZGVmZXJyZWQga2V5d29yZCBiZWZvcmUgdGhlIHByZWZpeC5EZWZlcnJlZEFmdGVyUHJlZml4bWVzc2FnZURlZmVycmVkQWZ0ZXJQcmVmaXh0ZW1wbGF0ZURlZmVycmVkUHJlZml4RHVwbGljYXRlZENhbid0IHVzZSB0aGUgbmFtZSAnI25hbWUnIGZvciBhIGRlZmVycmVkIGxpYnJhcnksIGFzIHRoZSBuYW1lIGlzIHVzZWQgZWxzZXdoZXJlLmNvZGVEZWZlcnJlZFByZWZpeER1cGxpY2F0ZWREZWZlcnJlZFByZWZpeER1cGxpY2F0ZWRTSEFSRURfREVGRVJSRURfUFJFRklYdGVtcGxhdGVEZWZlcnJlZFByZWZpeER1cGxpY2F0ZWRDYXVzZScjbmFtZScgaXMgdXNlZCBoZXJlLmNvZGVEZWZlcnJlZFByZWZpeER1cGxpY2F0ZWRDYXVzZURlZmVycmVkUHJlZml4RHVwbGljYXRlZENhdXNldGVtcGxhdGVEZWZlcnJlZFR5cGVBbm5vdGF0aW9uVGhlIHR5cGUgJyN0eXBlJyBpcyBkZWZlcnJlZCBsb2FkZWQgdmlhIHByZWZpeCAnI25hbWUnIGFuZCBjYW4ndCBiZSB1c2VkIGFzIGEgdHlwZSBhbm5vdGF0aW9uLlRyeSByZW1vdmluZyAnZGVmZXJyZWQnIGZyb20gdGhlIGltcG9ydCBvZiAnI25hbWUnIG9yIHVzZSBhIHN1cGVydHlwZSBvZiAnI3R5cGUnIHRoYXQgaXNuJ3QgZGVmZXJyZWQuY29kZURlZmVycmVkVHlwZUFubm90YXRpb25EZWZlcnJlZFR5cGVBbm5vdGF0aW9uVFlQRV9BTk5PVEFUSU9OX0RFRkVSUkVEX0NMQVNTdGVtcGxhdGVEaWxsT3V0bGluZVN1bW1hcnlJbmRleGVkICNjb3VudCBsaWJyYXJpZXMgKCNjb3VudDIgYnl0ZXMpIGluICNudW0xJS4zbXMsIHRoYXQgaXMsCiNudW0yJTEyLjMgYnl0ZXMvbXMsIGFuZAojbnVtMyUxMi4zIG1zL2xpYnJhcmllcy5jb2RlRGlsbE91dGxpbmVTdW1tYXJ5RGlsbE91dGxpbmVTdW1tYXJ5dGVtcGxhdGVEaXJlY3RDeWNsZUluVHlwZVZhcmlhYmxlc1R5cGUgJyNuYW1lJyBjYW4ndCB1c2UgaXRzZWxmIGFzIGEgYm91bmQuY29kZURpcmVjdEN5Y2xlSW5UeXBlVmFyaWFibGVzRGlyZWN0Q3ljbGVJblR5cGVWYXJpYWJsZXNjb2RlRGlyZWN0aXZlQWZ0ZXJEZWNsYXJhdGlvbkRpcmVjdGl2ZXMgbXVzdCBhcHBlYXIgYmVmb3JlIGFueSBkZWNsYXJhdGlvbnMuVHJ5IG1vdmluZyB0aGUgZGlyZWN0aXZlIGJlZm9yZSBhbnkgZGVjbGFyYXRpb25zLkRpcmVjdGl2ZUFmdGVyRGVjbGFyYXRpb25tZXNzYWdlRGlyZWN0aXZlQWZ0ZXJEZWNsYXJhdGlvbmNvZGVEdXBsaWNhdGVEZWZlcnJlZEFuIGltcG9ydCBkaXJlY3RpdmUgY2FuIG9ubHkgaGF2ZSBvbmUgJ2RlZmVycmVkJyBrZXl3b3JkLlRyeSByZW1vdmluZyBhbGwgYnV0IG9uZSAnZGVmZXJyZWQnIGtleXdvcmQuRHVwbGljYXRlRGVmZXJyZWRtZXNzYWdlRHVwbGljYXRlRGVmZXJyZWR0ZW1wbGF0ZUR1cGxpY2F0ZUxhYmVsSW5Td2l0Y2hTdGF0ZW1lbnRUaGUgbGFiZWwgJyNuYW1lJyB3YXMgYWxyZWFkeSB1c2VkIGluIHRoaXMgc3dpdGNoIHN0YXRlbWVudC5UcnkgY2hvb3NpbmcgYSBkaWZmZXJlbnQgbmFtZSBmb3IgdGhpcyBsYWJlbC5jb2RlRHVwbGljYXRlTGFiZWxJblN3aXRjaFN0YXRlbWVudER1cGxpY2F0ZUxhYmVsSW5Td2l0Y2hTdGF0ZW1lbnRjb2RlRHVwbGljYXRlUHJlZml4QW4gaW1wb3J0IGRpcmVjdGl2ZSBjYW4gb25seSBoYXZlIG9uZSBwcmVmaXggKCdhcycgY2xhdXNlKS5UcnkgcmVtb3ZpbmcgYWxsIGJ1dCBvbmUgcHJlZml4LkR1cGxpY2F0ZVByZWZpeG1lc3NhZ2VEdXBsaWNhdGVQcmVmaXh0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvbicjbmFtZScgaXMgYWxyZWFkeSBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlLmNvZGVEdXBsaWNhdGVkRGVjbGFyYXRpb25EdXBsaWNhdGVkRGVjbGFyYXRpb25EVVBMSUNBVEVfREVGSU5JVElPTnRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uQ2F1c2VQcmV2aW91cyBkZWNsYXJhdGlvbiBvZiAnI25hbWUnLmNvZGVEdXBsaWNhdGVkRGVjbGFyYXRpb25DYXVzZUR1cGxpY2F0ZWREZWNsYXJhdGlvbkNhdXNldGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25TeW50aGV0aWNDYXVzZVByZXZpb3VzIGRlY2xhcmF0aW9uIG9mICcjbmFtZScgaXMgaW1wbGllZCBieSB0aGlzIGRlZmluaXRpb24uY29kZUR1cGxpY2F0ZWREZWNsYXJhdGlvblN5bnRoZXRpY0NhdXNlRHVwbGljYXRlZERlY2xhcmF0aW9uU3ludGhldGljQ2F1c2V0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvblVzZUNhbid0IHVzZSAnI25hbWUnIGJlY2F1c2UgaXQgaXMgZGVjbGFyZWQgbW9yZSB0aGFuIG9uY2UuY29kZUR1cGxpY2F0ZWREZWNsYXJhdGlvblVzZUR1cGxpY2F0ZWREZWNsYXJhdGlvblVzZXRlbXBsYXRlRHVwbGljYXRlZEV4cG9ydCcjbmFtZScgaXMgZXhwb3J0ZWQgZnJvbSBib3RoICcjdXJpJyBhbmQgJyN1cmkyJy5jb2RlRHVwbGljYXRlZEV4cG9ydER1cGxpY2F0ZWRFeHBvcnRBTUJJR1VPVVNfRVhQT1JUdGVtcGxhdGVEdXBsaWNhdGVkRXhwb3J0SW5UeXBlY29kZUR1cGxpY2F0ZWRFeHBvcnRJblR5cGVEdXBsaWNhdGVkRXhwb3J0SW5UeXBldGVtcGxhdGVEdXBsaWNhdGVkSW1wb3J0JyNuYW1lJyBpcyBpbXBvcnRlZCBmcm9tIGJvdGggJyN1cmknIGFuZCAnI3VyaTInLmNvZGVEdXBsaWNhdGVkSW1wb3J0RHVwbGljYXRlZEltcG9ydHRlbXBsYXRlRHVwbGljYXRlZEltcG9ydEluVHlwZWNvZGVEdXBsaWNhdGVkSW1wb3J0SW5UeXBlRHVwbGljYXRlZEltcG9ydEluVHlwZUFNQklHVU9VU19JTVBPUlR0ZW1wbGF0ZUR1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0QSBsaWJyYXJ5IHdpdGggbmFtZSAnI25hbWUnIGlzIGV4cG9ydGVkIG1vcmUgdGhhbiBvbmNlLmNvZGVEdXBsaWNhdGVkTGlicmFyeUV4cG9ydER1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0RVhQT1JUX0RVUExJQ0FURURfTElCUkFSWV9OQU1FRHRlbXBsYXRlRHVwbGljYXRlZExpYnJhcnlFeHBvcnRDb250ZXh0JyNuYW1lJyBpcyBhbHNvIGV4cG9ydGVkIGhlcmUuY29kZUR1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0Q29udGV4dER1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0Q29udGV4dHRlbXBsYXRlRHVwbGljYXRlZExpYnJhcnlJbXBvcnRBIGxpYnJhcnkgd2l0aCBuYW1lICcjbmFtZScgaXMgaW1wb3J0ZWQgbW9yZSB0aGFuIG9uY2UuY29kZUR1cGxpY2F0ZWRMaWJyYXJ5SW1wb3J0RHVwbGljYXRlZExpYnJhcnlJbXBvcnRJTVBPUlRfRFVQTElDQVRFRF9MSUJSQVJZX05BTUVEdGVtcGxhdGVEdXBsaWNhdGVkTGlicmFyeUltcG9ydENvbnRleHQnI25hbWUnIGlzIGFsc28gaW1wb3J0ZWQgaGVyZS5jb2RlRHVwbGljYXRlZExpYnJhcnlJbXBvcnRDb250ZXh0RHVwbGljYXRlZExpYnJhcnlJbXBvcnRDb250ZXh0dGVtcGxhdGVEdXBsaWNhdGVkTW9kaWZpZXJUaGUgbW9kaWZpZXIgJyNsZXhlbWUnIHdhcyBhbHJlYWR5IHNwZWNpZmllZC5UcnkgcmVtb3ZpbmcgYWxsIGJ1dCBvbmUgb2NjdXJyZW5jZSBvZiB0aGUgbW9kaWZpZXIuY29kZUR1cGxpY2F0ZWRNb2RpZmllckR1cGxpY2F0ZWRNb2RpZmllcnRlbXBsYXRlRHVwbGljYXRlZE5hbWVQcmV2aW91c2x5VXNlZENhbid0IGRlY2xhcmUgJyNuYW1lJyBiZWNhdXNlIGl0IHdhcyBhbHJlYWR5IHVzZWQgaW4gdGhpcyBzY29wZS5jb2RlRHVwbGljYXRlZE5hbWVQcmV2aW91c2x5VXNlZER1cGxpY2F0ZWROYW1lUHJldmlvdXNseVVzZWRSRUZFUkVOQ0VEX0JFRk9SRV9ERUNMQVJBVElPTnRlbXBsYXRlRHVwbGljYXRlZE5hbWVQcmV2aW91c2x5VXNlZENhdXNlUHJldmlvdXMgdXNlIG9mICcjbmFtZScuY29kZUR1cGxpY2F0ZWROYW1lUHJldmlvdXNseVVzZWRDYXVzZUR1cGxpY2F0ZWROYW1lUHJldmlvdXNseVVzZWRDYXVzZXRlbXBsYXRlRHVwbGljYXRlZE5hbWVkQXJndW1lbnREdXBsaWNhdGVkIG5hbWVkIGFyZ3VtZW50ICcjbmFtZScuY29kZUR1cGxpY2F0ZWROYW1lZEFyZ3VtZW50RHVwbGljYXRlZE5hbWVkQXJndW1lbnREVVBMSUNBVEVfTkFNRURfQVJHVU1FTlR0ZW1wbGF0ZUR1cGxpY2F0ZWRQYXJhbWV0ZXJOYW1lRHVwbGljYXRlZCBwYXJhbWV0ZXIgbmFtZSAnI25hbWUnLmNvZGVEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZUR1cGxpY2F0ZWRQYXJhbWV0ZXJOYW1ldGVtcGxhdGVEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZUNhdXNlT3RoZXIgcGFyYW1ldGVyIG5hbWVkICcjbmFtZScuY29kZUR1cGxpY2F0ZWRQYXJhbWV0ZXJOYW1lQ2F1c2VEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZUNhdXNlY29kZUVtcHR5TmFtZWRQYXJhbWV0ZXJMaXN0TmFtZWQgcGFyYW1ldGVyIGxpc3RzIGNhbm5vdCBiZSBlbXB0eS5UcnkgYWRkaW5nIGEgbmFtZWQgcGFyYW1ldGVyIHRvIHRoZSBsaXN0LkVtcHR5TmFtZWRQYXJhbWV0ZXJMaXN0TUlTU0lOR19JREVOVElGSUVSbWVzc2FnZUVtcHR5TmFtZWRQYXJhbWV0ZXJMaXN0Y29kZUVtcHR5T3B0aW9uYWxQYXJhbWV0ZXJMaXN0T3B0aW9uYWwgcGFyYW1ldGVyIGxpc3RzIGNhbm5vdCBiZSBlbXB0eS5UcnkgYWRkaW5nIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0byB0aGUgbGlzdC5FbXB0eU9wdGlvbmFsUGFyYW1ldGVyTGlzdG1lc3NhZ2VFbXB0eU9wdGlvbmFsUGFyYW1ldGVyTGlzdGNvZGVFbmNvZGluZ1VuYWJsZSB0byBkZWNvZGUgYnl0ZXMgYXMgVVRGLTguRW5jb2RpbmdtZXNzYWdlRW5jb2Rpbmd0ZW1wbGF0ZUVudW1Db25zdGFudFNhbWVOYW1lQXNFbmNsb3NpbmdOYW1lIG9mIGVudW0gY29uc3RhbnQgJyNuYW1lJyBjYW4ndCBiZSB0aGUgc2FtZSBhcyB0aGUgZW51bSdzIG93biBuYW1lLmNvZGVFbnVtQ29uc3RhbnRTYW1lTmFtZUFzRW5jbG9zaW5nRW51bUNvbnN0YW50U2FtZU5hbWVBc0VuY2xvc2luZ0VOVU1fQ09OU1RBTlRfV0lUSF9FTlVNX05BTUVjb2RlRW51bURlY2xhcmF0aW9uRW1wdHlBbiBlbnVtIGRlY2xhcmF0aW9uIGNhbid0IGJlIGVtcHR5LkVudW1EZWNsYXJhdGlvbkVtcHR5RU1QVFlfRU5VTV9CT0RZbWVzc2FnZUVudW1EZWNsYXJhdGlvbkVtcHR5Y29kZUVudW1JbkNsYXNzRW51bXMgY2FuJ3QgYmUgZGVjbGFyZWQgaW5zaWRlIGNsYXNzZXMuVHJ5IG1vdmluZyB0aGUgZW51bSB0byB0aGUgdG9wLWxldmVsLkVudW1JbkNsYXNzbWVzc2FnZUVudW1JbkNsYXNzY29kZUVudW1JbnN0YW50aWF0aW9uRW51bXMgY2FuJ3QgYmUgaW5zdGFudGlhdGVkLkVudW1JbnN0YW50aWF0aW9uSU5TVEFOVElBVEVfRU5VTW1lc3NhZ2VFbnVtSW5zdGFudGlhdGlvbmNvZGVFcXVhbGl0eUNhbm5vdEJlRXF1YWxpdHlPcGVyYW5kQW4gZXF1YWxpdHkgZXhwcmVzc2lvbiBjYW4ndCBiZSBhbiBvcGVyYW5kIG9mIGFub3RoZXIgZXF1YWxpdHkgZXhwcmVzc2lvbi5UcnkgcmUtd3JpdGluZyB0aGUgZXhwcmVzc2lvbi5FcXVhbGl0eUNhbm5vdEJlRXF1YWxpdHlPcGVyYW5kbWVzc2FnZUVxdWFsaXR5Q2Fubm90QmVFcXVhbGl0eU9wZXJhbmR0ZW1wbGF0ZUV4cGVjdGVkQWZ0ZXJCdXRHb3RFeHBlY3RlZCAnI3N0cmluZycgYWZ0ZXIgdGhpcy5jb2RlRXhwZWN0ZWRBZnRlckJ1dEdvdEV4cGVjdGVkQWZ0ZXJCdXRHb3RFWFBFQ1RFRF9UT0tFTmNvZGVFeHBlY3RlZEFuSW5pdGlhbGl6ZXJFeHBlY3RlZCBhbiBpbml0aWFsaXplci5FeHBlY3RlZEFuSW5pdGlhbGl6ZXJtZXNzYWdlRXhwZWN0ZWRBbkluaXRpYWxpemVyY29kZUV4cGVjdGVkQmxvY2tFeHBlY3RlZCBhIGJsb2NrLlRyeSBhZGRpbmcge30uRXhwZWN0ZWRCbG9ja21lc3NhZ2VFeHBlY3RlZEJsb2NrY29kZUV4cGVjdGVkQmxvY2tUb1NraXBFeHBlY3RlZCBhIGZ1bmN0aW9uIGJvZHkgb3IgJz0+Jy5FeHBlY3RlZEJsb2NrVG9Ta2lwTUlTU0lOR19GVU5DVElPTl9CT0RZbWVzc2FnZUV4cGVjdGVkQmxvY2tUb1NraXBjb2RlRXhwZWN0ZWRCb2R5RXhwZWN0ZWRCb2R5bWVzc2FnZUV4cGVjdGVkQm9keXRlbXBsYXRlRXhwZWN0ZWRCdXRHb3RFeHBlY3RlZCAnI3N0cmluZycgYmVmb3JlIHRoaXMuY29kZUV4cGVjdGVkQnV0R290RXhwZWN0ZWRCdXRHb3R0ZW1wbGF0ZUV4cGVjdGVkQ2xhc3NNZW1iZXJFeHBlY3RlZCBhIGNsYXNzIG1lbWJlciwgYnV0IGdvdCAnI2xleGVtZScuY29kZUV4cGVjdGVkQ2xhc3NNZW1iZXJFeHBlY3RlZENsYXNzTWVtYmVyRVhQRUNURURfQ0xBU1NfTUVNQkVSdGVtcGxhdGVFeHBlY3RlZENsYXNzT3JNaXhpbkJvZHlBICNzdHJpbmcgbXVzdCBoYXZlIGEgYm9keSwgZXZlbiBpZiBpdCBpcyBlbXB0eS5UcnkgYWRkaW5nIGFuIGVtcHR5IGJvZHkuY29kZUV4cGVjdGVkQ2xhc3NPck1peGluQm9keUV4cGVjdGVkQ2xhc3NPck1peGluQm9keXRlbXBsYXRlRXhwZWN0ZWREZWNsYXJhdGlvbkV4cGVjdGVkIGEgZGVjbGFyYXRpb24sIGJ1dCBnb3QgJyNsZXhlbWUnLmNvZGVFeHBlY3RlZERlY2xhcmF0aW9uRXhwZWN0ZWREZWNsYXJhdGlvbkVYUEVDVEVEX0VYRUNVVEFCTEVjb2RlRXhwZWN0ZWRFbHNlT3JDb21tYUV4cGVjdGVkICdlbHNlJyBvciBjb21tYS5FeHBlY3RlZEVsc2VPckNvbW1hbWVzc2FnZUV4cGVjdGVkRWxzZU9yQ29tbWF0ZW1wbGF0ZUV4cGVjdGVkRW51bUJvZHlFeHBlY3RlZCBhIGVudW0gYm9keSwgYnV0IGdvdCAnI2xleGVtZScuQW4gZW51bSBkZWZpbml0aW9uIG11c3QgaGF2ZSBhIGJvZHkgd2l0aCBhdCBsZWFzdCBvbmUgY29uc3RhbnQgbmFtZS5jb2RlRXhwZWN0ZWRFbnVtQm9keUV4cGVjdGVkRW51bUJvZHlNSVNTSU5HX0VOVU1fQk9EWXRlbXBsYXRlRXhwZWN0ZWRGdW5jdGlvbkJvZHlFeHBlY3RlZCBhIGZ1bmN0aW9uIGJvZHksIGJ1dCBnb3QgJyNsZXhlbWUnLmNvZGVFeHBlY3RlZEZ1bmN0aW9uQm9keUV4cGVjdGVkRnVuY3Rpb25Cb2R5Y29kZUV4cGVjdGVkSGV4RGlnaXRBIGhleCBkaWdpdCAoMC05IG9yIEEtRikgbXVzdCBmb2xsb3cgJzB4Jy5FeHBlY3RlZEhleERpZ2l0TUlTU0lOR19IRVhfRElHSVRtZXNzYWdlRXhwZWN0ZWRIZXhEaWdpdHRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyRXhwZWN0ZWQgYW4gaWRlbnRpZmllciwgYnV0IGdvdCAnI2xleGVtZScuY29kZUV4cGVjdGVkSWRlbnRpZmllckV4cGVjdGVkSWRlbnRpZmllcnRlbXBsYXRlRXhwZWN0ZWRJbnN0ZWFkRXhwZWN0ZWQgJyNzdHJpbmcnIGluc3RlYWQgb2YgdGhpcy5jb2RlRXhwZWN0ZWRJbnN0ZWFkRXhwZWN0ZWRJbnN0ZWFkY29kZUV4cGVjdGVkTmFtZWRBcmd1bWVudEV4cGVjdGVkIG5hbWVkIGFyZ3VtZW50LkV4cGVjdGVkTmFtZWRBcmd1bWVudEVYVFJBX1BPU0lUSU9OQUxfQVJHVU1FTlRTbWVzc2FnZUV4cGVjdGVkTmFtZWRBcmd1bWVudGNvZGVFeHBlY3RlZE9uZUV4cHJlc3Npb25FeHBlY3RlZCBvbmUgZXhwcmVzc2lvbiwgYnV0IGZvdW5kIGFkZGl0aW9uYWwgaW5wdXQuRXhwZWN0ZWRPbmVFeHByZXNzaW9ubWVzc2FnZUV4cGVjdGVkT25lRXhwcmVzc2lvbmNvZGVFeHBlY3RlZE9wZW5QYXJlbnNFeHBlY3RlZCAnKCcuRXhwZWN0ZWRPcGVuUGFyZW5zbWVzc2FnZUV4cGVjdGVkT3BlblBhcmVuc2NvZGVFeHBlY3RlZFN0YXRlbWVudEV4cGVjdGVkIGEgc3RhdGVtZW50LkV4cGVjdGVkU3RhdGVtZW50bWVzc2FnZUV4cGVjdGVkU3RhdGVtZW50dGVtcGxhdGVFeHBlY3RlZFN0cmluZ0V4cGVjdGVkIGEgU3RyaW5nLCBidXQgZ290ICcjbGV4ZW1lJy5jb2RlRXhwZWN0ZWRTdHJpbmdFeHBlY3RlZFN0cmluZ0VYUEVDVEVEX1NUUklOR19MSVRFUkFMdGVtcGxhdGVFeHBlY3RlZFRva2VuRXhwZWN0ZWQgdG8gZmluZCAnI3N0cmluZycuY29kZUV4cGVjdGVkVG9rZW5FeHBlY3RlZFRva2VudGVtcGxhdGVFeHBlY3RlZFR5cGVFeHBlY3RlZCBhIHR5cGUsIGJ1dCBnb3QgJyNsZXhlbWUnLmNvZGVFeHBlY3RlZFR5cGVFeHBlY3RlZFR5cGVFWFBFQ1RFRF9UWVBFX05BTUVjb2RlRXhwZWN0ZWRVcmlFeHBlY3RlZCBhIFVSSS5FeHBlY3RlZFVyaW1lc3NhZ2VFeHBlY3RlZFVyaXRlbXBsYXRlRXhwZXJpbWVudE5vdEVuYWJsZWRUaGlzIHJlcXVpcmVzIHRoZSAnI3N0cmluZycgZXhwZXJpbWVudCB0byBiZSBlbmFibGVkLlRyeSBlbmFibGluZyB0aGlzIGV4cGVyaW1lbnQgYnkgYWRkaW5nIGl0IHRvIHRoZSBjb21tYW5kIGxpbmUgd2hlbiBjb21waWxpbmcgYW5kIHJ1bm5pbmcuY29kZUV4cGVyaW1lbnROb3RFbmFibGVkRXhwZXJpbWVudE5vdEVuYWJsZWRjb2RlRXhwbGljaXRFeHRlbnNpb25Bcmd1bWVudE1pc21hdGNoRXhwbGljaXQgZXh0ZW5zaW9uIGFwcGxpY2F0aW9uIHJlcXVpcmVzIGV4YWN0bHkgMSBwb3NpdGlvbmFsIGFyZ3VtZW50LkV4cGxpY2l0RXh0ZW5zaW9uQXJndW1lbnRNaXNtYXRjaG1lc3NhZ2VFeHBsaWNpdEV4dGVuc2lvbkFyZ3VtZW50TWlzbWF0Y2h0ZW1wbGF0ZUV4cGxpY2l0RXh0ZW5zaW9uVHlwZUFyZ3VtZW50TWlzbWF0Y2hFeHBsaWNpdCBleHRlbnNpb24gYXBwbGljYXRpb24gb2YgZXh0ZW5zaW9uICcjbmFtZScgdGFrZXMgJyNjb3VudCcgdHlwZSBhcmd1bWVudChzKS5jb2RlRXhwbGljaXRFeHRlbnNpb25UeXBlQXJndW1lbnRNaXNtYXRjaEV4cGxpY2l0RXh0ZW5zaW9uVHlwZUFyZ3VtZW50TWlzbWF0Y2hjb2RlRXhwb3J0QWZ0ZXJQYXJ0RXhwb3J0IGRpcmVjdGl2ZXMgbXVzdCBwcmVjZWRlIHBhcnQgZGlyZWN0aXZlcy5UcnkgbW92aW5nIHRoZSBleHBvcnQgZGlyZWN0aXZlcyBiZWZvcmUgdGhlIHBhcnQgZGlyZWN0aXZlcy5FeHBvcnRBZnRlclBhcnRtZXNzYWdlRXhwb3J0QWZ0ZXJQYXJ0dGVtcGxhdGVFeHBvcnRIaWRlc0V4cG9ydEV4cG9ydCBvZiAnI25hbWUnIChmcm9tICcjdXJpJykgaGlkZXMgZXhwb3J0IGZyb20gJyN1cmkyJy5jb2RlRXhwb3J0SGlkZXNFeHBvcnRFeHBvcnRIaWRlc0V4cG9ydGNvZGVFeHByZXNzaW9uTm90TWV0YWRhdGFUaGlzIGNhbid0IGJlIHVzZWQgYXMgbWV0YWRhdGE7IG1ldGFkYXRhIHNob3VsZCBiZSBhIHJlZmVyZW5jZSB0byBhIGNvbXBpbGUtdGltZSBjb25zdGFudCB2YXJpYWJsZSwgb3IgYSBjYWxsIHRvIGEgY29uc3RhbnQgY29uc3RydWN0b3IuRXhwcmVzc2lvbk5vdE1ldGFkYXRhbWVzc2FnZUV4cHJlc3Npb25Ob3RNZXRhZGF0YXRlbXBsYXRlRXh0ZW5kaW5nRW51bScjbmFtZScgaXMgYW4gZW51bSBhbmQgY2FuJ3QgYmUgZXh0ZW5kZWQgb3IgaW1wbGVtZW50ZWQuY29kZUV4dGVuZGluZ0VudW1FeHRlbmRpbmdFbnVtRVhURU5EU19FTlVNdGVtcGxhdGVFeHRlbmRpbmdSZXN0cmljdGVkJyNuYW1lJyBpcyByZXN0cmljdGVkIGFuZCBjYW4ndCBiZSBleHRlbmRlZCBvciBpbXBsZW1lbnRlZC5jb2RlRXh0ZW5kaW5nUmVzdHJpY3RlZEV4dGVuZGluZ1Jlc3RyaWN0ZWRFWFRFTkRTX0RJU0FMTE9XRURfQ0xBU1Njb2RlRXh0ZW5zaW9uRGVjbGFyZXNDb25zdHJ1Y3RvckV4dGVuc2lvbnMgY2FuJ3QgZGVjbGFyZSBjb25zdHJ1Y3RvcnMuVHJ5IHJlbW92aW5nIHRoZSBjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbi5FeHRlbnNpb25EZWNsYXJlc0NvbnN0cnVjdG9ybWVzc2FnZUV4dGVuc2lvbkRlY2xhcmVzQ29uc3RydWN0b3Jjb2RlRXh0ZW5zaW9uRGVjbGFyZXNJbnN0YW5jZUZpZWxkRXh0ZW5zaW9ucyBjYW4ndCBkZWNsYXJlIGluc3RhbmNlIGZpZWxkc1RyeSByZW1vdmluZyB0aGUgZmllbGQgZGVjbGFyYXRpb24gb3IgbWFraW5nIGl0IGEgc3RhdGljIGZpZWxkRXh0ZW5zaW9uRGVjbGFyZXNJbnN0YW5jZUZpZWxkbWVzc2FnZUV4dGVuc2lvbkRlY2xhcmVzSW5zdGFuY2VGaWVsZGNvZGVFeHRlcm5hbENsYXNzQ2xhc3NlcyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSAnZXh0ZXJuYWwnLlRyeSByZW1vdmluZyB0aGUga2V5d29yZCAnZXh0ZXJuYWwnLkV4dGVybmFsQ2xhc3NtZXNzYWdlRXh0ZXJuYWxDbGFzc2NvZGVFeHRlcm5hbENvbnN0cnVjdG9yV2l0aEJvZHlFeHRlcm5hbCBjb25zdHJ1Y3RvcnMgY2FuJ3QgaGF2ZSBhIGJvZHkuVHJ5IHJlbW92aW5nIHRoZSBib2R5IG9mIHRoZSBjb25zdHJ1Y3Rvciwgb3IgcmVtb3ZpbmcgdGhlIGtleXdvcmQgJ2V4dGVybmFsJy5FeHRlcm5hbENvbnN0cnVjdG9yV2l0aEJvZHltZXNzYWdlRXh0ZXJuYWxDb25zdHJ1Y3RvcldpdGhCb2R5Y29kZUV4dGVybmFsQ29uc3RydWN0b3JXaXRoRmllbGRJbml0aWFsaXplcnNBbiBleHRlcm5hbCBjb25zdHJ1Y3RvciBjYW4ndCBpbml0aWFsaXplIGZpZWxkcy5UcnkgcmVtb3ZpbmcgdGhlIGZpZWxkIGluaXRpYWxpemVycywgb3IgcmVtb3ZpbmcgdGhlIGtleXdvcmQgJ2V4dGVybmFsJy5FeHRlcm5hbENvbnN0cnVjdG9yV2l0aEZpZWxkSW5pdGlhbGl6ZXJzRVhURVJOQUxfQ09OU1RSVUNUT1JfV0lUSF9GSUVMRF9JTklUSUFMSVpFUlNtZXNzYWdlRXh0ZXJuYWxDb25zdHJ1Y3RvcldpdGhGaWVsZEluaXRpYWxpemVyc2NvZGVFeHRlcm5hbEVudW1FbnVtcyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSAnZXh0ZXJuYWwnLkV4dGVybmFsRW51bW1lc3NhZ2VFeHRlcm5hbEVudW1jb2RlRXh0ZXJuYWxGYWN0b3J5UmVkaXJlY3Rpb25BIHJlZGlyZWN0aW5nIGZhY3RvcnkgY2FuJ3QgYmUgZXh0ZXJuYWwuVHJ5IHJlbW92aW5nIHRoZSAnZXh0ZXJuYWwnIG1vZGlmaWVyLkV4dGVybmFsRmFjdG9yeVJlZGlyZWN0aW9ubWVzc2FnZUV4dGVybmFsRmFjdG9yeVJlZGlyZWN0aW9uY29kZUV4dGVybmFsRmFjdG9yeVdpdGhCb2R5RXh0ZXJuYWwgZmFjdG9yaWVzIGNhbid0IGhhdmUgYSBib2R5LlRyeSByZW1vdmluZyB0aGUgYm9keSBvZiB0aGUgZmFjdG9yeSwgb3IgcmVtb3ZpbmcgdGhlIGtleXdvcmQgJ2V4dGVybmFsJy5FeHRlcm5hbEZhY3RvcnlXaXRoQm9keW1lc3NhZ2VFeHRlcm5hbEZhY3RvcnlXaXRoQm9keWNvZGVFeHRlcm5hbEZpZWxkRmllbGRzIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlICdleHRlcm5hbCcuRXh0ZXJuYWxGaWVsZG1lc3NhZ2VFeHRlcm5hbEZpZWxkY29kZUV4dGVybmFsTWV0aG9kV2l0aEJvZHlBbiBleHRlcm5hbCBvciBuYXRpdmUgbWV0aG9kIGNhbid0IGhhdmUgYSBib2R5LkV4dGVybmFsTWV0aG9kV2l0aEJvZHltZXNzYWdlRXh0ZXJuYWxNZXRob2RXaXRoQm9keWNvZGVFeHRlcm5hbFR5cGVkZWZUeXBlZGVmcyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSAnZXh0ZXJuYWwnLkV4dGVybmFsVHlwZWRlZm1lc3NhZ2VFeHRlcm5hbFR5cGVkZWZ0ZW1wbGF0ZUV4dHJhbmVvdXNNb2RpZmllckNhbid0IGhhdmUgbW9kaWZpZXIgJyNsZXhlbWUnIGhlcmUuVHJ5IHJlbW92aW5nICcjbGV4ZW1lJy5jb2RlRXh0cmFuZW91c01vZGlmaWVyRXh0cmFuZW91c01vZGlmaWVyY29kZUZhY3RvcnlOb3RTeW5jRmFjdG9yeSBib2RpZXMgY2FuJ3QgdXNlICdhc3luYycsICdhc3luYyonLCBvciAnc3luYyonLkZhY3RvcnlOb3RTeW5jTk9OX1NZTkNfRkFDVE9SWW1lc3NhZ2VGYWN0b3J5Tm90U3luY2NvZGVGYWN0b3J5VG9wTGV2ZWxEZWNsYXJhdGlvblRvcC1sZXZlbCBkZWNsYXJhdGlvbnMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgJ2ZhY3RvcnknLlRyeSByZW1vdmluZyB0aGUga2V5d29yZCAnZmFjdG9yeScuRmFjdG9yeVRvcExldmVsRGVjbGFyYXRpb25tZXNzYWdlRmFjdG9yeVRvcExldmVsRGVjbGFyYXRpb250ZW1wbGF0ZUZhc3RhQ0xJQXJndW1lbnRSZXF1aXJlZEV4cGVjdGVkIHZhbHVlIGFmdGVyICcjbmFtZScuY29kZUZhc3RhQ0xJQXJndW1lbnRSZXF1aXJlZEZhc3RhQ0xJQXJndW1lbnRSZXF1aXJlZGNvZGVGYXN0YVVzYWdlTG9uZ1N1cHBvcnRlZCBvcHRpb25zOgoKICAtbyA8ZmlsZT4sIC0tb3V0cHV0PTxmaWxlPgogICAgR2VuZXJhdGUgdGhlIG91dHB1dCBpbnRvIDxmaWxlPi4KCiAgLWgsIC9oLCAvPywgLS1oZWxwCiAgICBEaXNwbGF5IHRoaXMgbWVzc2FnZSAoYWRkIC12IGZvciBpbmZvcm1hdGlvbiBhYm91dCBhbGwgb3B0aW9ucykuCgogIC12LCAtLXZlcmJvc2UKICAgIERpc3BsYXkgdmVyYm9zZSBpbmZvcm1hdGlvbi4KCiAgLURuYW1lCiAgLURuYW1lPXZhbHVlCiAgICBEZWZpbmUgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgaW4gdGhlIGNvbXBpbGUtdGltZSBlbnZpcm9ubWVudC4KCiAgLS1uby1kZWZpbmVzCiAgICBJZ25vcmUgYWxsIC1EIG9wdGlvbnMgYW5kIGxlYXZlIGVudmlyb25tZW50IGNvbnN0YW50cyB1bmV2YWx1YXRlZC4KCiAgLS0KICAgIFN0b3Agb3B0aW9uIHBhcnNpbmcsIHRoZSByZXN0IG9mIHRoZSBjb21tYW5kIGxpbmUgaXMgYXNzdW1lZCB0byBiZQogICAgZmlsZSBuYW1lcyBvciBhcmd1bWVudHMgdG8gdGhlIERhcnQgcHJvZ3JhbS4KCiAgLS1wYWNrYWdlcz08ZmlsZT4KICAgIFVzZSBwYWNrYWdlIHJlc29sdXRpb24gY29uZmlndXJhdGlvbiA8ZmlsZT4sIHdoaWNoIHNob3VsZCBjb250YWluIGEgbWFwcGluZwogICAgb2YgcGFja2FnZSBuYW1lcyB0byBwYXRocy4KCiAgLS1wbGF0Zm9ybT08ZmlsZT4KICAgIFJlYWQgdGhlIFNESyBwbGF0Zm9ybSBmcm9tIDxmaWxlPiwgd2hpY2ggc2hvdWxkIGJlIGluIERpbGwvS2VybmVsIElSIGZvcm1hdAogICAgYW5kIGNvbnRhaW4gdGhlIERhcnQgU0RLLgoKICAtLXRhcmdldD1kYXJ0MmpzfGRhcnQyanNfc2VydmVyfGRhcnRfcnVubmVyfGRhcnRkZXZjfGZsdXR0ZXJ8Zmx1dHRlcl9ydW5uZXJ8bm9uZXx2bQogICAgU3BlY2lmeSB0aGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24uCgogIC0tZW5hYmxlLWFzc2VydHMKICAgIENoZWNrIGFzc2VydHMgaW4gaW5pdGlhbGl6ZXJzIGR1cmluZyBjb25zdGFudCBldmFsdWF0aW9uLgoKICAtLXZlcmlmeQogICAgQ2hlY2sgdGhhdCB0aGUgZ2VuZXJhdGVkIG91dHB1dCBpcyBmcmVlIG9mIHZhcmlvdXMgcHJvYmxlbXMuIFRoaXMgaXMgbW9zdGx5CiAgICB1c2VmdWwgZm9yIGRldmVsb3BlcnMgb2YgdGhpcyBjb21waWxlciBvciBLZXJuZWwgdHJhbnNmb3JtYXRpb25zLgoKICAtLWR1bXAtaXIKICAgIFByaW50IGNvbXBpbGVkIGxpYnJhcmllcyBpbiBLZXJuZWwgc291cmNlIG5vdGF0aW9uLgoKICAtLW9taXQtcGxhdGZvcm0KICAgIEV4Y2x1ZGUgdGhlIHBsYXRmb3JtIGZyb20gdGhlIHNlcmlhbGl6ZWQgZGlsbCBmaWxlLgoKICAtLWJ5dGVjb2RlCiAgICBHZW5lcmF0ZSBieXRlY29kZS4gU3VwcG9ydGVkIG9ubHkgZm9yIFNESyBwbGF0Zm9ybSBjb21waWxhdGlvbi4KCiAgLS1leGNsdWRlLXNvdXJjZQogICAgRG8gbm90IGluY2x1ZGUgc291cmNlIGNvZGUgaW4gdGhlIGRpbGwgZmlsZS4KCiAgLS1jb21waWxlLXNkaz08c2RrPgogICAgQ29tcGlsZSB0aGUgU0RLIGZyb20gc2NyYXRjaCBpbnN0ZWFkIG9mIHJlYWRpbmcgaXQgZnJvbSBhIC5kaWxsIGZpbGUKICAgIChzZWUgLS1wbGF0Zm9ybSkuCgogIC0tc2RrPTxzZGs+CiAgICBMb2NhdGlvbiBvZiB0aGUgU0RLIHNvdXJjZXMgZm9yIHVzZSB3aGVuIGNvbXBpbGluZyBhZGRpdGlvbmFsIHBsYXRmb3JtCiAgICBsaWJyYXJpZXMuCgogIC0tc3VwZXJtaXhpbgogICAgSWdub3JlZCBmb3Igbm93LgoKICAtLXNpbmdsZS1yb290LXNjaGVtZT1TdHJpbmcKICAtLXNpbmdsZS1yb290LWJhc2U9PGRpcj4KICAgIFNwZWNpZnkgYSBjdXN0b20gVVJJIHNjaGVtZSBhbmQgYSBsb2NhdGlvbiBvbiBkaXNrIHdoZXJlIHN1Y2ggVVJJcyBhcmUKICAgIG1hcHBlZCB0by4KCiAgICBXaGVuIHNwZWNpZmllZCwgdGhlIGNvbXBpbGVyIGNhbiBiZSBpbnZva2VkIHdpdGggaW5wdXRzIHVzaW5nIHRoZSBjdXN0b20KICAgIFVSSSBzY2hlbWUuIFRoZSBjb21waWxlciBjYW4gaWdub3JlIHRoZSBleGFjdCBsb2NhdGlvbiBvZiBmaWxlcyBvbiBkaXNrCiAgICBhbmQgYXMgYSByZXN1bHQgdG8gcHJvZHVjZSBvdXRwdXQgdGhhdCBpcyBpbmRlcGVuZGVudCBvZiB0aGUgYWJzb2x1dGUKICAgIGxvY2F0aW9uIG9mIGZpbGVzIG9uIGRpc2suIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBmb3IgaW50ZWdyYXRpbmcgd2l0aAogICAgYnVpbGQgc3lzdGVtcy4KCiAgLS1mYXRhbD1lcnJvcnMKICAtLWZhdGFsPXdhcm5pbmdzCiAgICBNYWtlcyBtZXNzYWdlcyBvZiB0aGUgZ2l2ZW4ga2luZHMgZmF0YWwsIHRoYXQgaXMsIGltbWVkaWF0ZWx5IHN0b3AgdGhlCiAgICBjb21waWxlciB3aXRoIGEgbm9uLXplcm8gZXhpdC1jb2RlLiBJbiAtLXZlcmJvc2UgbW9kZSwgYWxzbyBkaXNwbGF5IGFuCiAgICBpbnRlcm5hbCBzdGFjayB0cmFjZSBmcm9tIHRoZSBjb21waWxlci4gTXVsdGlwbGUga2luZHMgY2FuIGJlIHNlcGFyYXRlZCBieQogICAgY29tbWFzLCBmb3IgZXhhbXBsZSwgLS1mYXRhbD1lcnJvcnMsd2FybmluZ3MuCgogIC0tZW5hYmxlLWV4cGVyaW1lbnQ9PGZsYWc+CiAgICBFbmFibGUgb3IgZGlzYWJsZSBhbiBleHBlcmltZW50YWwgZmxhZywgdXNlZCB0byBndWFyZCBmZWF0dXJlcyBjdXJyZW50bHkKICAgIGluIGRldmVsb3BtZW50LiBQcmVmaXggYW4gZXhwZXJpbWVudCBuYW1lIHdpdGggJ25vLScgdG8gZGlzYWJsZSBpdC4KICAgIE11bHRpcGxlIGV4cGVyaW1lbnRzIGNhbiBiZSBzZXBhcmF0ZWQgYnkgY29tbWFzLkZhc3RhVXNhZ2VMb25nbWVzc2FnZUZhc3RhVXNhZ2VMb25nY29kZUZhc3RhVXNhZ2VTaG9ydEZyZXF1ZW50bHkgdXNlZCBvcHRpb25zOgoKICAtbyA8ZmlsZT4gR2VuZXJhdGUgdGhlIG91dHB1dCBpbnRvIDxmaWxlPi4KICAtaCAgICAgICAgRGlzcGxheSB0aGlzIG1lc3NhZ2UgKGFkZCAtdiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgYWxsIG9wdGlvbnMpLkZhc3RhVXNhZ2VTaG9ydG1lc3NhZ2VGYXN0YVVzYWdlU2hvcnR0ZW1wbGF0ZUZmaURhcnRUeXBlTWlzbWF0Y2hFeHBlY3RlZCAnI3R5cGUnIHRvIGJlIGEgc3VidHlwZSBvZiAnI3R5cGUyJy5jb2RlRmZpRGFydFR5cGVNaXNtYXRjaEZmaURhcnRUeXBlTWlzbWF0Y2h0ZW1wbGF0ZUZmaUV4dGVuZHNPckltcGxlbWVudHNTZWFsZWRDbGFzc0NsYXNzICcjbmFtZScgY2Fubm90IGJlIGV4dGVuZGVkIG9yIGltcGxlbWVudGVkLmNvZGVGZmlFeHRlbmRzT3JJbXBsZW1lbnRzU2VhbGVkQ2xhc3NGZmlFeHRlbmRzT3JJbXBsZW1lbnRzU2VhbGVkQ2xhc3N0ZW1wbGF0ZUZmaUZpZWxkQW5ub3RhdGlvbkZpZWxkICcjbmFtZScgcmVxdWlyZXMgZXhhY3RseSBvbmUgYW5ub3RhdGlvbiB0byBkZWNsYXJlIGl0cyBDKysgdHlwZSwgd2hpY2ggY2Fubm90IGJlIFZvaWQuIGRhcnQ6ZmZpIFN0cnVjdHMgY2Fubm90IGhhdmUgcmVndWxhciBEYXJ0IGZpZWxkcy5jb2RlRmZpRmllbGRBbm5vdGF0aW9uRmZpRmllbGRBbm5vdGF0aW9udGVtcGxhdGVGZmlGaWVsZEluaXRpYWxpemVyRmllbGQgJyNuYW1lJyBpcyBhIGRhcnQ6ZmZpIFBvaW50ZXIgdG8gYSBzdHJ1Y3QgZmllbGQgYW5kIHRoZXJlZm9yZSBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGNvbnN0cnVjdG9yIGV4ZWN1dGlvbi5jb2RlRmZpRmllbGRJbml0aWFsaXplckZmaUZpZWxkSW5pdGlhbGl6ZXJ0ZW1wbGF0ZUZmaUZpZWxkTm9Bbm5vdGF0aW9uRmllbGQgJyNuYW1lJyByZXF1aXJlcyBubyBhbm5vdGF0aW9uIHRvIGRlY2xhcmUgaXRzIEMrKyB0eXBlLCBpdCBpcyBhIFBvaW50ZXIgd2hpY2ggaXMgcmVwcmVzZW50ZWQgYnkgdGhlIHNhbWUgdHlwZSBpbiBEYXJ0IGFuZCBDKysuY29kZUZmaUZpZWxkTm9Bbm5vdGF0aW9uRmZpRmllbGROb0Fubm90YXRpb250ZW1wbGF0ZUZmaU5vdFN0YXRpYyNuYW1lIGV4cGVjdHMgYSBzdGF0aWMgZnVuY3Rpb24gYXMgcGFyYW1ldGVyLiBkYXJ0OmZmaSBvbmx5IHN1cHBvcnRzIGNhbGxpbmcgc3RhdGljIERhcnQgZnVuY3Rpb25zIGZyb20gYy5jb2RlRmZpTm90U3RhdGljRmZpTm90U3RhdGljdGVtcGxhdGVGZmlTdHJ1Y3RHZW5lcmljU3RydWN0ICcjbmFtZScgc2hvdWxkIG5vdCBiZSBnZW5lcmljLmNvZGVGZmlTdHJ1Y3RHZW5lcmljRmZpU3RydWN0R2VuZXJpY3RlbXBsYXRlRmZpVHlwZUludmFsaWRFeHBlY3RlZCB0eXBlICcjdHlwZScgdG8gYmUgYSB2YWxpZCBhbmQgaW5zdGFudGlhdGVkIHN1YnR5cGUgb2YgJ05hdGl2ZVR5cGUnLmNvZGVGZmlUeXBlSW52YWxpZEZmaVR5cGVJbnZhbGlkdGVtcGxhdGVGZmlUeXBlTWlzbWF0Y2hFeHBlY3RlZCB0eXBlICcjdHlwZScgdG8gYmUgJyN0eXBlMicsIHdoaWNoIGlzIHRoZSBEYXJ0IHR5cGUgY29ycmVzcG9uZGluZyB0byAnI3R5cGUzJy5jb2RlRmZpVHlwZU1pc21hdGNoRmZpVHlwZU1pc21hdGNodGVtcGxhdGVGZmlUeXBlVW5zaXplZE1ldGhvZCAnI25hbWUnIGNhbm5vdCBiZSBjYWxsZWQgb24gc29tZXRoaW5nIG9mIHR5cGUgJyN0eXBlJyBhcyB0aGlzIHR5cGUgaXMgdW5zaXplZC5jb2RlRmZpVHlwZVVuc2l6ZWRGZmlUeXBlVW5zaXplZHRlbXBsYXRlRmZpV3JvbmdTdHJ1Y3RJbmhlcml0YW5jZVN0cnVjdCAnI25hbWUnIG11c3QgaW5oZXJpdCBmcm9tICdTdHJ1Y3Q8I25hbWU+Jy5jb2RlRmZpV3JvbmdTdHJ1Y3RJbmhlcml0YW5jZUZmaVdyb25nU3RydWN0SW5oZXJpdGFuY2Vjb2RlRmllbGRJbml0aWFsaXplZE91dHNpZGVEZWNsYXJpbmdDbGFzc0EgZmllbGQgY2FuIG9ubHkgYmUgaW5pdGlhbGl6ZWQgaW4gaXQncyBkZWNsYXJpbmcgY2xhc3NUcnkgcGFzc2luZyBhIHZhbHVlIGludG8gdGhlIHN1cGVyY2xhc3MgY29uc3RydWN0b3IsIG9yIG1vdmluZyB0aGUgaW5pdGlhbGl6YXRpb24gaW50byB0aGUgY29uc3RydWN0b3IgYm9keS5GaWVsZEluaXRpYWxpemVkT3V0c2lkZURlY2xhcmluZ0NsYXNzbWVzc2FnZUZpZWxkSW5pdGlhbGl6ZWRPdXRzaWRlRGVjbGFyaW5nQ2xhc3Njb2RlRmllbGRJbml0aWFsaXplck91dHNpZGVDb25zdHJ1Y3RvckZpZWxkIGZvcm1hbCBwYXJhbWV0ZXJzIGNhbiBvbmx5IGJlIHVzZWQgaW4gYSBjb25zdHJ1Y3Rvci5UcnkgcmVtb3ZpbmcgJ3RoaXMuJy5GaWVsZEluaXRpYWxpemVyT3V0c2lkZUNvbnN0cnVjdG9ybWVzc2FnZUZpZWxkSW5pdGlhbGl6ZXJPdXRzaWRlQ29uc3RydWN0b3Jjb2RlRmluYWxBbmRDb3ZhcmlhbnRNZW1iZXJzIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlIGJvdGggJ2ZpbmFsJyBhbmQgJ2NvdmFyaWFudCcuVHJ5IHJlbW92aW5nIGVpdGhlciB0aGUgJ2ZpbmFsJyBvciAnY292YXJpYW50JyBrZXl3b3JkLkZpbmFsQW5kQ292YXJpYW50bWVzc2FnZUZpbmFsQW5kQ292YXJpYW50Y29kZUZpbmFsQW5kVmFyTWVtYmVycyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSBib3RoICdmaW5hbCcgYW5kICd2YXInLlRyeSByZW1vdmluZyB0aGUga2V5d29yZCAndmFyJy5GaW5hbEFuZFZhcm1lc3NhZ2VGaW5hbEFuZFZhcnRlbXBsYXRlRmluYWxGaWVsZE5vdEluaXRpYWxpemVkRmluYWwgZmllbGQgJyNuYW1lJyBpcyBub3QgaW5pdGlhbGl6ZWQuVHJ5IHRvIGluaXRpYWxpemUgdGhlIGZpZWxkIGluIHRoZSBkZWNsYXJhdGlvbiBvciBpbiBldmVyeSBjb25zdHJ1Y3Rvci5jb2RlRmluYWxGaWVsZE5vdEluaXRpYWxpemVkRmluYWxGaWVsZE5vdEluaXRpYWxpemVkRklOQUxfTk9UX0lOSVRJQUxJWkVEdGVtcGxhdGVGaW5hbEZpZWxkTm90SW5pdGlhbGl6ZWRCeUNvbnN0cnVjdG9yRmluYWwgZmllbGQgJyNuYW1lJyBpcyBub3QgaW5pdGlhbGl6ZWQgYnkgdGhpcyBjb25zdHJ1Y3Rvci5UcnkgdG8gaW5pdGlhbGl6ZSB0aGUgZmllbGQgdXNpbmcgYW4gaW5pdGlhbGl6aW5nIGZvcm1hbCBvciBhIGZpZWxkIGluaXRpYWxpemVyLmNvZGVGaW5hbEZpZWxkTm90SW5pdGlhbGl6ZWRCeUNvbnN0cnVjdG9yRmluYWxGaWVsZE5vdEluaXRpYWxpemVkQnlDb25zdHJ1Y3RvckZJTkFMX05PVF9JTklUSUFMSVpFRF9DT05TVFJVQ1RPUl8xdGVtcGxhdGVGaW5hbEZpZWxkV2l0aG91dEluaXRpYWxpemVyVGhlIGZpbmFsIHZhcmlhYmxlICcjbmFtZScgbXVzdCBiZSBpbml0aWFsaXplZC5jb2RlRmluYWxGaWVsZFdpdGhvdXRJbml0aWFsaXplckZpbmFsRmllbGRXaXRob3V0SW5pdGlhbGl6ZXJ0ZW1wbGF0ZUZpbmFsSW5zdGFuY2VWYXJpYWJsZUFscmVhZHlJbml0aWFsaXplZCcjbmFtZScgaXMgYSBmaW5hbCBpbnN0YW5jZSB2YXJpYWJsZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuY29kZUZpbmFsSW5zdGFuY2VWYXJpYWJsZUFscmVhZHlJbml0aWFsaXplZEZpbmFsSW5zdGFuY2VWYXJpYWJsZUFscmVhZHlJbml0aWFsaXplZEZJTkFMX0lOSVRJQUxJWkVEX01VTFRJUExFX1RJTUVTdGVtcGxhdGVGaW5hbEluc3RhbmNlVmFyaWFibGVBbHJlYWR5SW5pdGlhbGl6ZWRDYXVzZScjbmFtZScgd2FzIGluaXRpYWxpemVkIGhlcmUuY29kZUZpbmFsSW5zdGFuY2VWYXJpYWJsZUFscmVhZHlJbml0aWFsaXplZENhdXNlRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkQ2F1c2V0ZW1wbGF0ZUZvckluTG9vcEVsZW1lbnRUeXBlTm90QXNzaWduYWJsZUEgdmFsdWUgb2YgdHlwZSAnI3R5cGUnIGNhbid0IGJlIGFzc2lnbmVkIHRvIGEgdmFyaWFibGUgb2YgdHlwZSAnI3R5cGUyJy5UcnkgY2hhbmdpbmcgdGhlIHR5cGUgb2YgdGhlIHZhcmlhYmxlLmNvZGVGb3JJbkxvb3BFbGVtZW50VHlwZU5vdEFzc2lnbmFibGVGb3JJbkxvb3BFbGVtZW50VHlwZU5vdEFzc2lnbmFibGVGT1JfSU5fT0ZfSU5WQUxJRF9FTEVNRU5UX1RZUEVjb2RlRm9ySW5Mb29wRXhhY3RseU9uZVZhcmlhYmxlQSBmb3ItaW4gbG9vcCBjYW4ndCBoYXZlIG1vcmUgdGhhbiBvbmUgbG9vcCB2YXJpYWJsZS5Gb3JJbkxvb3BFeGFjdGx5T25lVmFyaWFibGVtZXNzYWdlRm9ySW5Mb29wRXhhY3RseU9uZVZhcmlhYmxlY29kZUZvckluTG9vcE5vdEFzc2lnbmFibGVDYW4ndCBhc3NpZ24gdG8gdGhpcywgc28gaXQgY2FuJ3QgYmUgdXNlZCBpbiBhIGZvci1pbiBsb29wLkZvckluTG9vcE5vdEFzc2lnbmFibGVtZXNzYWdlRm9ySW5Mb29wTm90QXNzaWduYWJsZXRlbXBsYXRlRm9ySW5Mb29wVHlwZU5vdEl0ZXJhYmxlVGhlIHR5cGUgJyN0eXBlJyB1c2VkIGluIHRoZSAnZm9yJyBsb29wIG11c3QgaW1wbGVtZW50ICcjdHlwZTInLmNvZGVGb3JJbkxvb3BUeXBlTm90SXRlcmFibGVGb3JJbkxvb3BUeXBlTm90SXRlcmFibGVGT1JfSU5fT0ZfSU5WQUxJRF9UWVBFY29kZUZvckluTG9vcFdpdGhDb25zdFZhcmlhYmxlQSBmb3ItaW4gbG9vcC12YXJpYWJsZSBjYW4ndCBiZSAnY29uc3QnLlRyeSByZW1vdmluZyB0aGUgJ2NvbnN0JyBtb2RpZmllci5Gb3JJbkxvb3BXaXRoQ29uc3RWYXJpYWJsZUZPUl9JTl9XSVRIX0NPTlNUX1ZBUklBQkxFbWVzc2FnZUZvckluTG9vcFdpdGhDb25zdFZhcmlhYmxlY29kZUZ1bmN0aW9uVHlwZURlZmF1bHRWYWx1ZUNhbid0IGhhdmUgYSBkZWZhdWx0IHZhbHVlIGluIGEgZnVuY3Rpb24gdHlwZS5GdW5jdGlvblR5cGVEZWZhdWx0VmFsdWVERUZBVUxUX1ZBTFVFX0lOX0ZVTkNUSU9OX1RZUEVtZXNzYWdlRnVuY3Rpb25UeXBlRGVmYXVsdFZhbHVlY29kZUZ1bmN0aW9uVHlwZWRQYXJhbWV0ZXJWYXJGdW5jdGlvbi10eXBlZCBwYXJhbWV0ZXJzIGNhbid0IHNwZWNpZnkgJ2NvbnN0JywgJ2ZpbmFsJyBvciAndmFyJyBpbiBwbGFjZSBvZiBhIHJldHVybiB0eXBlLlRyeSByZXBsYWNpbmcgdGhlIGtleXdvcmQgd2l0aCBhIHJldHVybiB0eXBlLkZ1bmN0aW9uVHlwZWRQYXJhbWV0ZXJWYXJGVU5DVElPTl9UWVBFRF9QQVJBTUVURVJfVkFSbWVzc2FnZUZ1bmN0aW9uVHlwZWRQYXJhbWV0ZXJWYXJjb2RlR2VuZXJhdG9yUmV0dXJuc1ZhbHVlJ3N5bmMqJyBhbmQgJ2FzeW5jKicgY2FuJ3QgcmV0dXJuIGEgdmFsdWUuR2VuZXJhdG9yUmV0dXJuc1ZhbHVlUkVUVVJOX0lOX0dFTkVSQVRPUm1lc3NhZ2VHZW5lcmF0b3JSZXR1cm5zVmFsdWVjb2RlR2VuZXJpY0Z1bmN0aW9uVHlwZUluQm91bmRUeXBlIHZhcmlhYmxlcyBjYW4ndCBoYXZlIGdlbmVyaWMgZnVuY3Rpb24gdHlwZXMgaW4gdGhlaXIgYm91bmRzLkdlbmVyaWNGdW5jdGlvblR5cGVJbkJvdW5kR0VORVJJQ19GVU5DVElPTl9UWVBFX0NBTk5PVF9CRV9CT1VORG1lc3NhZ2VHZW5lcmljRnVuY3Rpb25UeXBlSW5Cb3VuZHRlbXBsYXRlR2VuZXJpY0Z1bmN0aW9uVHlwZUluZmVycmVkQXNBY3R1YWxUeXBlQXJndW1lbnRVbmV4cGVjdGVkIGdlbmVyaWMgZnVuY3Rpb24gdHlwZSAnI3R5cGUnIGluZmVycmVkIGFzIGEgdHlwZSBhcmd1bWVudC5UcnkgcHJvdmlkaW5nIGEgbm9uLWdlbmVyaWMgZnVuY3Rpb24gdHlwZSBleHBsaWNpdGx5LmNvZGVHZW5lcmljRnVuY3Rpb25UeXBlSW5mZXJyZWRBc0FjdHVhbFR5cGVBcmd1bWVudEdlbmVyaWNGdW5jdGlvblR5cGVJbmZlcnJlZEFzQWN0dWFsVHlwZUFyZ3VtZW50R0VORVJJQ19GVU5DVElPTl9DQU5OT1RfQkVfVFlQRV9BUkdVTUVOVGNvZGVHZW5lcmljRnVuY3Rpb25UeXBlVXNlZEFzQWN0dWFsVHlwZUFyZ3VtZW50VW5leHBlY3RlZCBnZW5lcmljIGZ1bmN0aW9uIHR5cGUgZm91bmQgaW4gYSB0eXBlIGFyZ3VtZW50LlRyeSB1c2luZyBhIG5vbi1nZW5lcmljIGZ1bmN0aW9uIHR5cGUuR2VuZXJpY0Z1bmN0aW9uVHlwZVVzZWRBc0FjdHVhbFR5cGVBcmd1bWVudG1lc3NhZ2VHZW5lcmljRnVuY3Rpb25UeXBlVXNlZEFzQWN0dWFsVHlwZUFyZ3VtZW50dGVtcGxhdGVHZXR0ZXJOb3RGb3VuZEdldHRlciBub3QgZm91bmQ6ICcjbmFtZScuY29kZUdldHRlck5vdEZvdW5kR2V0dGVyTm90Rm91bmRVTkRFRklORURfR0VUVEVSY29kZUdldHRlcldpdGhGb3JtYWxzQSBnZXR0ZXIgY2FuJ3QgaGF2ZSBmb3JtYWwgcGFyYW1ldGVycy5UcnkgcmVtb3ZpbmcgJyguLi4pJy5HZXR0ZXJXaXRoRm9ybWFsc0dFVFRFUl9XSVRIX1BBUkFNRVRFUlNtZXNzYWdlR2V0dGVyV2l0aEZvcm1hbHNjb2RlSWxsZWdhbEFzc2lnbm1lbnRUb05vbkFzc2lnbmFibGVJbGxlZ2FsIGFzc2lnbm1lbnQgdG8gbm9uLWFzc2lnbmFibGUgZXhwcmVzc2lvbi5JbGxlZ2FsQXNzaWdubWVudFRvTm9uQXNzaWduYWJsZW1lc3NhZ2VJbGxlZ2FsQXNzaWdubWVudFRvTm9uQXNzaWduYWJsZWNvZGVJbGxlZ2FsQXN5bmNHZW5lcmF0b3JSZXR1cm5UeXBlRnVuY3Rpb25zIG1hcmtlZCAnYXN5bmMqJyBtdXN0IGhhdmUgYSByZXR1cm4gdHlwZSBhc3NpZ25hYmxlIHRvICdTdHJlYW0nLklsbGVnYWxBc3luY0dlbmVyYXRvclJldHVyblR5cGVJTExFR0FMX0FTWU5DX0dFTkVSQVRPUl9SRVRVUk5fVFlQRW1lc3NhZ2VJbGxlZ2FsQXN5bmNHZW5lcmF0b3JSZXR1cm5UeXBlY29kZUlsbGVnYWxBc3luY0dlbmVyYXRvclZvaWRSZXR1cm5UeXBlRnVuY3Rpb25zIG1hcmtlZCAnYXN5bmMqJyBjYW4ndCBoYXZlIHJldHVybiB0eXBlICd2b2lkJy5JbGxlZ2FsQXN5bmNHZW5lcmF0b3JWb2lkUmV0dXJuVHlwZW1lc3NhZ2VJbGxlZ2FsQXN5bmNHZW5lcmF0b3JWb2lkUmV0dXJuVHlwZWNvZGVJbGxlZ2FsQXN5bmNSZXR1cm5UeXBlRnVuY3Rpb25zIG1hcmtlZCAnYXN5bmMnIG11c3QgaGF2ZSBhIHJldHVybiB0eXBlIGFzc2lnbmFibGUgdG8gJ0Z1dHVyZScuSWxsZWdhbEFzeW5jUmV0dXJuVHlwZUlMTEVHQUxfQVNZTkNfUkVUVVJOX1RZUEVtZXNzYWdlSWxsZWdhbEFzeW5jUmV0dXJuVHlwZXRlbXBsYXRlSWxsZWdhbE1peGluVGhlIHR5cGUgJyNuYW1lJyBjYW4ndCBiZSBtaXhlZCBpbi5jb2RlSWxsZWdhbE1peGluSWxsZWdhbE1peGluSUxMRUdBTF9NSVhJTnRlbXBsYXRlSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnNDYW4ndCB1c2UgJyNuYW1lJyBhcyBhIG1peGluIGJlY2F1c2UgaXQgaGFzIGNvbnN0cnVjdG9ycy5jb2RlSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnNJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9yc01JWElOX0RFQ0xBUkVTX0NPTlNUUlVDVE9SdGVtcGxhdGVJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9yc0NhdXNlVGhpcyBjb25zdHJ1Y3RvciBwcmV2ZW50cyB1c2luZyAnI25hbWUnIGFzIGEgbWl4aW4uY29kZUlsbGVnYWxNaXhpbkR1ZVRvQ29uc3RydWN0b3JzQ2F1c2VJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9yc0NhdXNldGVtcGxhdGVJbGxlZ2FsUmVjdXJzaXZlVHlwZUlsbGVnYWwgcmVjdXJzaXZlIHR5cGUgJyN0eXBlJy5jb2RlSWxsZWdhbFJlY3Vyc2l2ZVR5cGVJbGxlZ2FsUmVjdXJzaXZlVHlwZWNvZGVJbGxlZ2FsU3luY0dlbmVyYXRvclJldHVyblR5cGVGdW5jdGlvbnMgbWFya2VkICdzeW5jKicgbXVzdCBoYXZlIGEgcmV0dXJuIHR5cGUgYXNzaWduYWJsZSB0byAnSXRlcmFibGUnLklsbGVnYWxTeW5jR2VuZXJhdG9yUmV0dXJuVHlwZUlMTEVHQUxfU1lOQ19HRU5FUkFUT1JfUkVUVVJOX1RZUEVtZXNzYWdlSWxsZWdhbFN5bmNHZW5lcmF0b3JSZXR1cm5UeXBlY29kZUlsbGVnYWxTeW5jR2VuZXJhdG9yVm9pZFJldHVyblR5cGVGdW5jdGlvbnMgbWFya2VkICdzeW5jKicgY2FuJ3QgaGF2ZSByZXR1cm4gdHlwZSAndm9pZCcuSWxsZWdhbFN5bmNHZW5lcmF0b3JWb2lkUmV0dXJuVHlwZW1lc3NhZ2VJbGxlZ2FsU3luY0dlbmVyYXRvclZvaWRSZXR1cm5UeXBlY29kZUltcGxlbWVudHNCZWZvcmVFeHRlbmRzVGhlIGV4dGVuZHMgY2xhdXNlIG11c3QgYmUgYmVmb3JlIHRoZSBpbXBsZW1lbnRzIGNsYXVzZS5UcnkgbW92aW5nIHRoZSBleHRlbmRzIGNsYXVzZSBiZWZvcmUgdGhlIGltcGxlbWVudHMgY2xhdXNlLkltcGxlbWVudHNCZWZvcmVFeHRlbmRzbWVzc2FnZUltcGxlbWVudHNCZWZvcmVFeHRlbmRzY29kZUltcGxlbWVudHNCZWZvcmVPblRoZSBvbiBjbGF1c2UgbXVzdCBiZSBiZWZvcmUgdGhlIGltcGxlbWVudHMgY2xhdXNlLlRyeSBtb3ZpbmcgdGhlIG9uIGNsYXVzZSBiZWZvcmUgdGhlIGltcGxlbWVudHMgY2xhdXNlLkltcGxlbWVudHNCZWZvcmVPbm1lc3NhZ2VJbXBsZW1lbnRzQmVmb3JlT25jb2RlSW1wbGVtZW50c0JlZm9yZVdpdGhUaGUgd2l0aCBjbGF1c2UgbXVzdCBiZSBiZWZvcmUgdGhlIGltcGxlbWVudHMgY2xhdXNlLlRyeSBtb3ZpbmcgdGhlIHdpdGggY2xhdXNlIGJlZm9yZSB0aGUgaW1wbGVtZW50cyBjbGF1c2UuSW1wbGVtZW50c0JlZm9yZVdpdGhtZXNzYWdlSW1wbGVtZW50c0JlZm9yZVdpdGhjb2RlSW1wbGVtZW50c0Z1dHVyZU9yJ0Z1dHVyZU9yJyBjYW4ndCBiZSB1c2VkIGluIGFuICdpbXBsZW1lbnRzJyBjbGF1c2UuSW1wbGVtZW50c0Z1dHVyZU9ybWVzc2FnZUltcGxlbWVudHNGdXR1cmVPcnRlbXBsYXRlSW1wbGVtZW50c1JlcGVhdGVkJyNuYW1lJyBjYW4gb25seSBiZSBpbXBsZW1lbnRlZCBvbmNlLlRyeSByZW1vdmluZyAjY291bnQgb2YgdGhlIG9jY3VycmVuY2VzLmNvZGVJbXBsZW1lbnRzUmVwZWF0ZWRJbXBsZW1lbnRzUmVwZWF0ZWRJTVBMRU1FTlRTX1JFUEVBVEVEdGVtcGxhdGVJbXBsZW1lbnRzU3VwZXJDbGFzcycjbmFtZScgY2FuJ3QgYmUgdXNlZCBpbiBib3RoICdleHRlbmRzJyBhbmQgJ2ltcGxlbWVudHMnIGNsYXVzZXMuVHJ5IHJlbW92aW5nIG9uZSBvZiB0aGUgb2NjdXJyZW5jZXMuY29kZUltcGxlbWVudHNTdXBlckNsYXNzSW1wbGVtZW50c1N1cGVyQ2xhc3NJTVBMRU1FTlRTX1NVUEVSX0NMQVNTdGVtcGxhdGVJbXBsaWNpdENhbGxPZk5vbk1ldGhvZENhbm5vdCBpbnZva2UgYW4gaW5zdGFuY2Ugb2YgJyN0eXBlJyBiZWNhdXNlIGl0IGRlY2xhcmVzICdjYWxsJyB0byBiZSBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIG1ldGhvZC5UcnkgY2hhbmdpbmcgJ2NhbGwnIHRvIGEgbWV0aG9kIG9yIGV4cGxpY2l0bHkgaW52b2tlICdjYWxsJy5jb2RlSW1wbGljaXRDYWxsT2ZOb25NZXRob2RJbXBsaWNpdENhbGxPZk5vbk1ldGhvZElNUExJQ0lUX0NBTExfT0ZfTk9OX01FVEhPRHRlbXBsYXRlSW1wbGljaXRNaXhpbk92ZXJyaWRlQ29udGV4dE92ZXJyaWRlIHdhcyBpbnRyb2R1Y2VkIHdoZW4gdGhlIG1peGluICcjbmFtZScgd2FzIGFwcGxpZWQgdG8gJyNuYW1lMicuY29kZUltcGxpY2l0TWl4aW5PdmVycmlkZUNvbnRleHRJbXBsaWNpdE1peGluT3ZlcnJpZGVDb250ZXh0Y29kZUltcG9ydEFmdGVyUGFydEltcG9ydCBkaXJlY3RpdmVzIG11c3QgcHJlY2VkZSBwYXJ0IGRpcmVjdGl2ZXMuVHJ5IG1vdmluZyB0aGUgaW1wb3J0IGRpcmVjdGl2ZXMgYmVmb3JlIHRoZSBwYXJ0IGRpcmVjdGl2ZXMuSW1wb3J0QWZ0ZXJQYXJ0bWVzc2FnZUltcG9ydEFmdGVyUGFydHRlbXBsYXRlSW1wb3J0SGlkZXNJbXBvcnRJbXBvcnQgb2YgJyNuYW1lJyAoZnJvbSAnI3VyaScpIGhpZGVzIGltcG9ydCBmcm9tICcjdXJpMicuY29kZUltcG9ydEhpZGVzSW1wb3J0SW1wb3J0SGlkZXNJbXBvcnR0ZW1wbGF0ZUluY29tcGF0aWJsZVJlZGlyZWN0ZWVGdW5jdGlvblR5cGVUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gdHlwZSAnI3R5cGUnIGlzbid0IGEgc3VidHlwZSBvZiAnI3R5cGUyJy5jb2RlSW5jb21wYXRpYmxlUmVkaXJlY3RlZUZ1bmN0aW9uVHlwZUluY29tcGF0aWJsZVJlZGlyZWN0ZWVGdW5jdGlvblR5cGVSRURJUkVDVF9UT19JTlZBTElEX1RZUEV0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudFR5cGUgYXJndW1lbnQgJyN0eXBlJyBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIGJvdW5kICcjdHlwZTInIG9mIHRoZSB0eXBlIHZhcmlhYmxlICcjbmFtZScgb24gJyNuYW1lMicuVHJ5IGNoYW5naW5nIHR5cGUgYXJndW1lbnRzIHNvIHRoYXQgdGhleSBjb25mb3JtIHRvIHRoZSBib3VuZHMuY29kZUluY29ycmVjdFR5cGVBcmd1bWVudEluY29ycmVjdFR5cGVBcmd1bWVudFRZUEVfQVJHVU1FTlRfTk9UX01BVENISU5HX0JPVU5EU3RlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5SZXR1cm5UeXBlVHlwZSBhcmd1bWVudCAnI3R5cGUnIGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgYm91bmQgJyN0eXBlMicgb2YgdGhlIHR5cGUgdmFyaWFibGUgJyNuYW1lJyBvbiAnI25hbWUyJyBpbiB0aGUgcmV0dXJuIHR5cGUuY29kZUluY29ycmVjdFR5cGVBcmd1bWVudEluUmV0dXJuVHlwZUluY29ycmVjdFR5cGVBcmd1bWVudEluUmV0dXJuVHlwZXRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGVUeXBlIGFyZ3VtZW50ICcjdHlwZScgZG9lc24ndCBjb25mb3JtIHRvIHRoZSBib3VuZCAnI3R5cGUyJyBvZiB0aGUgdHlwZSB2YXJpYWJsZSAnI25hbWUnIG9uICcjbmFtZTInIGluIHRoZSBzdXBlcnR5cGUgJyNuYW1lMycgb2YgY2xhc3MgJyNuYW1lNCcuY29kZUluY29ycmVjdFR5cGVBcmd1bWVudEluU3VwZXJ0eXBlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGV0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudEluU3VwZXJ0eXBlSW5mZXJyZWRJbmZlcnJlZCB0eXBlIGFyZ3VtZW50ICcjdHlwZScgZG9lc24ndCBjb25mb3JtIHRvIHRoZSBib3VuZCAnI3R5cGUyJyBvZiB0aGUgdHlwZSB2YXJpYWJsZSAnI25hbWUnIG9uICcjbmFtZTInIGluIHRoZSBzdXBlcnR5cGUgJyNuYW1lMycgb2YgY2xhc3MgJyNuYW1lNCcuVHJ5IHNwZWNpZnlpbmcgdHlwZSBhcmd1bWVudHMgZXhwbGljaXRseSBzbyB0aGF0IHRoZXkgY29uZm9ybSB0byB0aGUgYm91bmRzLmNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJblN1cGVydHlwZUluZmVycmVkSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGVJbmZlcnJlZHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5mZXJyZWRJbmZlcnJlZCB0eXBlIGFyZ3VtZW50ICcjdHlwZScgZG9lc24ndCBjb25mb3JtIHRvIHRoZSBib3VuZCAnI3R5cGUyJyBvZiB0aGUgdHlwZSB2YXJpYWJsZSAnI25hbWUnIG9uICcjbmFtZTInLmNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJbmZlcnJlZEluY29ycmVjdFR5cGVBcmd1bWVudEluZmVycmVkdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWRUeXBlIGFyZ3VtZW50ICcjdHlwZScgZG9lc24ndCBjb25mb3JtIHRvIHRoZSBib3VuZCAnI3R5cGUyJyBvZiB0aGUgdHlwZSB2YXJpYWJsZSAnI25hbWUnIG9uICcjdHlwZTMuI25hbWUyJy5jb2RlSW5jb3JyZWN0VHlwZUFyZ3VtZW50UXVhbGlmaWVkSW5jb3JyZWN0VHlwZUFyZ3VtZW50UXVhbGlmaWVkdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWRJbmZlcnJlZEluZmVycmVkIHR5cGUgYXJndW1lbnQgJyN0eXBlJyBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIGJvdW5kICcjdHlwZTInIG9mIHRoZSB0eXBlIHZhcmlhYmxlICcjbmFtZScgb24gJyN0eXBlMy4jbmFtZTInLmNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWRJbmZlcnJlZEluY29ycmVjdFR5cGVBcmd1bWVudFF1YWxpZmllZEluZmVycmVkY29kZUluY29ycmVjdFR5cGVBcmd1bWVudFZhcmlhYmxlVGhpcyBpcyB0aGUgdHlwZSB2YXJpYWJsZSB3aG9zZSBib3VuZCBpc24ndCBjb25mb3JtZWQgdG8uSW5jb3JyZWN0VHlwZUFyZ3VtZW50VmFyaWFibGVtZXNzYWdlSW5jb3JyZWN0VHlwZUFyZ3VtZW50VmFyaWFibGV0ZW1wbGF0ZUluZmVycmVkUGFja2FnZVVyaUludGVycHJldGluZyB0aGlzIGFzIHBhY2thZ2UgVVJJLCAnI3VyaScuY29kZUluZmVycmVkUGFja2FnZVVyaUluZmVycmVkUGFja2FnZVVyaWNvZGVJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3RDYW4ndCBpbmhlcml0IG1lbWJlcnMgdGhhdCBjb25mbGljdCB3aXRoIGVhY2ggb3RoZXIuSW5oZXJpdGVkTWVtYmVyc0NvbmZsaWN0Q09ORkxJQ1RTX1dJVEhfSU5IRVJJVEVEX01FTUJFUm1lc3NhZ2VJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3Rjb2RlSW5oZXJpdGVkTWVtYmVyc0NvbmZsaWN0Q2F1c2UxVGhpcyBpcyBvbmUgaW5oZXJpdGVkIG1lbWJlci5Jbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3RDYXVzZTFtZXNzYWdlSW5oZXJpdGVkTWVtYmVyc0NvbmZsaWN0Q2F1c2UxY29kZUluaGVyaXRlZE1lbWJlcnNDb25mbGljdENhdXNlMlRoaXMgaXMgdGhlIG90aGVyIGluaGVyaXRlZCBtZW1iZXIuSW5oZXJpdGVkTWVtYmVyc0NvbmZsaWN0Q2F1c2UybWVzc2FnZUluaGVyaXRlZE1lbWJlcnNDb25mbGljdENhdXNlMnRlbXBsYXRlSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZFRyaWVkIHRvIGluaXRpYWxpemUgZnJvbSBhIHByZXZpb3VzIGNvbXBpbGF0aW9uICgjc3RyaW5nKSwgYnV0IHRoZSBmaWxlIHdhcyBub3Qgc2VsZi1jb250YWluZWQuIFRoaXMgbWlnaHQgYmUgYSBidWcuCgpUaGUgRGFydCB0ZWFtIHdvdWxkIGdyZWF0bHkgYXBwcmVjaWF0ZSBpdCBpZiB5b3Ugd291bGQgdGFrZSBhIG1vbWVudCB0byByZXBvcnQgdGhpcyBwcm9ibGVtIGF0IGh0dHA6Ly9kYXJ0YnVnLmNvbS9uZXcuCklmIHlvdSBhcmUgY29tZm9ydGFibGUgd2l0aCBpdCwgaXQgd291bGQgaW1wcm92ZSB0aGUgY2hhbmNlcyBvZiBmaXhpbmcgYW55IGJ1ZyBpZiB5b3UgaW5jbHVkZWQgdGhlIGZpbGUgI3VyaSBpbiB5b3VyIGVycm9yIHJlcG9ydCwgYnV0IGJlIGF3YXJlIHRoYXQgdGhpcyBmaWxlIGluY2x1ZGVzIHlvdXIgc291cmNlIGNvZGUuCkVpdGhlciB3YXksIHlvdSBzaG91bGQgcHJvYmFibHkgZGVsZXRlIHRoZSBmaWxlIHNvIGl0IGRvZXNuJ3QgdXNlIHVubmVjZXNzYXJ5IGRpc2sgc3BhY2UuY29kZUluaXRpYWxpemVGcm9tRGlsbE5vdFNlbGZDb250YWluZWRJbml0aWFsaXplRnJvbURpbGxOb3RTZWxmQ29udGFpbmVkdGVtcGxhdGVJbml0aWFsaXplRnJvbURpbGxOb3RTZWxmQ29udGFpbmVkTm9EdW1wVHJpZWQgdG8gaW5pdGlhbGl6ZSBmcm9tIGEgcHJldmlvdXMgY29tcGlsYXRpb24gKCNzdHJpbmcpLCBidXQgdGhlIGZpbGUgd2FzIG5vdCBzZWxmLWNvbnRhaW5lZC4gVGhpcyBtaWdodCBiZSBhIGJ1Zy4KClRoZSBEYXJ0IHRlYW0gd291bGQgZ3JlYXRseSBhcHByZWNpYXRlIGl0IGlmIHlvdSB3b3VsZCB0YWtlIGEgbW9tZW50IHRvIHJlcG9ydCB0aGlzIHByb2JsZW0gYXQgaHR0cDovL2RhcnRidWcuY29tL25ldy5jb2RlSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZE5vRHVtcEluaXRpYWxpemVGcm9tRGlsbE5vdFNlbGZDb250YWluZWROb0R1bXB0ZW1wbGF0ZUluaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtVHJpZWQgdG8gaW5pdGlhbGl6ZSBmcm9tIGEgcHJldmlvdXMgY29tcGlsYXRpb24gKCNzdHJpbmcpLCBidXQgY291bGRuJ3QuCkVycm9yIG1lc3NhZ2Ugd2FzICcjc3RyaW5nMicuClN0YWNrdHJhY2UgaW5jbHVkZWQgJyNzdHJpbmczJy4KVGhpcyBtaWdodCBiZSBhIGJ1Zy4KClRoZSBEYXJ0IHRlYW0gd291bGQgZ3JlYXRseSBhcHByZWNpYXRlIGl0IGlmIHlvdSB3b3VsZCB0YWtlIGEgbW9tZW50IHRvIHJlcG9ydCB0aGlzIHByb2JsZW0gYXQgaHR0cDovL2RhcnRidWcuY29tL25ldy4KSWYgeW91IGFyZSBjb21mb3J0YWJsZSB3aXRoIGl0LCBpdCB3b3VsZCBpbXByb3ZlIHRoZSBjaGFuY2VzIG9mIGZpeGluZyBhbnkgYnVnIGlmIHlvdSBpbmNsdWRlZCB0aGUgZmlsZSAjdXJpIGluIHlvdXIgZXJyb3IgcmVwb3J0LCBidXQgYmUgYXdhcmUgdGhhdCB0aGlzIGZpbGUgaW5jbHVkZXMgeW91ciBzb3VyY2UgY29kZS4KRWl0aGVyIHdheSwgeW91IHNob3VsZCBwcm9iYWJseSBkZWxldGUgdGhlIGZpbGUgc28gaXQgZG9lc24ndCB1c2UgdW5uZWNlc3NhcnkgZGlzayBzcGFjZS5jb2RlSW5pdGlhbGl6ZUZyb21EaWxsVW5rbm93blByb2JsZW1Jbml0aWFsaXplRnJvbURpbGxVbmtub3duUHJvYmxlbXRlbXBsYXRlSW5pdGlhbGl6ZUZyb21EaWxsVW5rbm93blByb2JsZW1Ob0R1bXBUcmllZCB0byBpbml0aWFsaXplIGZyb20gYSBwcmV2aW91cyBjb21waWxhdGlvbiAoI3N0cmluZyksIGJ1dCBjb3VsZG4ndC4KRXJyb3IgbWVzc2FnZSB3YXMgJyNzdHJpbmcyJy4KU3RhY2t0cmFjZSBpbmNsdWRlZCAnI3N0cmluZzMnLgpUaGlzIG1pZ2h0IGJlIGEgYnVnLgoKVGhlIERhcnQgdGVhbSB3b3VsZCBncmVhdGx5IGFwcHJlY2lhdGUgaXQgaWYgeW91IHdvdWxkIHRha2UgYSBtb21lbnQgdG8gcmVwb3J0IHRoaXMgcHJvYmxlbSBhdCBodHRwOi8vZGFydGJ1Zy5jb20vbmV3LmNvZGVJbml0aWFsaXplRnJvbURpbGxVbmtub3duUHJvYmxlbU5vRHVtcEluaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtTm9EdW1wY29kZUluaXRpYWxpemVkVmFyaWFibGVJbkZvckVhY2hUaGUgbG9vcCB2YXJpYWJsZSBpbiBhIGZvci1lYWNoIGxvb3AgY2FuJ3QgYmUgaW5pdGlhbGl6ZWQuVHJ5IHJlbW92aW5nIHRoZSBpbml0aWFsaXplciwgb3IgdXNpbmcgYSBkaWZmZXJlbnQga2luZCBvZiBsb29wLkluaXRpYWxpemVkVmFyaWFibGVJbkZvckVhY2htZXNzYWdlSW5pdGlhbGl6ZWRWYXJpYWJsZUluRm9yRWFjaHRlbXBsYXRlSW5pdGlhbGl6ZXJGb3JTdGF0aWNGaWVsZCcjbmFtZScgaXNuJ3QgYW4gaW5zdGFuY2UgZmllbGQgb2YgdGhpcyBjbGFzcy5jb2RlSW5pdGlhbGl6ZXJGb3JTdGF0aWNGaWVsZEluaXRpYWxpemVyRm9yU3RhdGljRmllbGRJTklUSUFMSVpFUl9GT1JfU1RBVElDX0ZJRUxEdGVtcGxhdGVJbml0aWFsaXplck91dHNpZGVDb25zdHJ1Y3Rvck9ubHkgY29uc3RydWN0b3JzIGNhbiBoYXZlIGluaXRpYWxpemVycywgYW5kICcjbmFtZScgaXMgbm90IGEgY29uc3RydWN0b3IuY29kZUluaXRpYWxpemVyT3V0c2lkZUNvbnN0cnVjdG9ySW5pdGlhbGl6ZXJPdXRzaWRlQ29uc3RydWN0b3JJTklUSUFMSVpFUl9PVVRTSURFX0NPTlNUUlVDVE9SdGVtcGxhdGVJbml0aWFsaXppbmdGb3JtYWxUeXBlTWlzbWF0Y2hUaGUgdHlwZSBvZiBwYXJhbWV0ZXIgJyNuYW1lJywgJyN0eXBlJyBpcyBub3QgYSBzdWJ0eXBlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkJ3MgdHlwZSwgJyN0eXBlMicuVHJ5IGNoYW5naW5nIHRoZSB0eXBlIG9mIHBhcmFtZXRlciAnI25hbWUnIHRvIGEgc3VidHlwZSBvZiAnI3R5cGUyJy5jb2RlSW5pdGlhbGl6aW5nRm9ybWFsVHlwZU1pc21hdGNoSW5pdGlhbGl6aW5nRm9ybWFsVHlwZU1pc21hdGNoSU5WQUxJRF9QQVJBTUVURVJfREVDTEFSQVRJT05jb2RlSW5pdGlhbGl6aW5nRm9ybWFsVHlwZU1pc21hdGNoRmllbGRUaGUgZmllbGQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgcGFyYW1ldGVyLkluaXRpYWxpemluZ0Zvcm1hbFR5cGVNaXNtYXRjaEZpZWxkbWVzc2FnZUluaXRpYWxpemluZ0Zvcm1hbFR5cGVNaXNtYXRjaEZpZWxkY29kZUlucHV0RmlsZU5vdEZvdW5kSW5wdXRGaWxlTm90Rm91bmR0ZW1wbGF0ZUludGVnZXJMaXRlcmFsSXNPdXRPZlJhbmdlVGhlIGludGVnZXIgbGl0ZXJhbCAjc3RyaW5nIGNhbid0IGJlIHJlcHJlc2VudGVkIGluIDY0IGJpdHMuVHJ5IHVzaW5nIHRoZSBCaWdJbnQgY2xhc3MgaWYgeW91IG5lZWQgYW4gaW50ZWdlciBsYXJnZXIgdGhhbiA5LDIyMywzNzIsMDM2LDg1NCw3NzUsODA3IG9yIGxlc3MgdGhhbiAtOSwyMjMsMzcyLDAzNiw4NTQsNzc1LDgwOC5jb2RlSW50ZWdlckxpdGVyYWxJc091dE9mUmFuZ2VJbnRlZ2VyTGl0ZXJhbElzT3V0T2ZSYW5nZUlOVEVHRVJfTElURVJBTF9PVVRfT0ZfUkFOR0V0ZW1wbGF0ZUludGVyZmFjZUNoZWNrQ29udGV4dEJvdGggbWVtYmVycyBhcmUgaW5oZXJpdGVkIGJ5IHRoZSBub24tYWJzdHJhY3QgY2xhc3MgJyNuYW1lJy5jb2RlSW50ZXJmYWNlQ2hlY2tDb250ZXh0SW50ZXJmYWNlQ2hlY2tDb250ZXh0Y29kZUludGVybmFsUHJvYmxlbUFscmVhZHlJbml0aWFsaXplZEF0dGVtcHQgdG8gc2V0IGluaXRpYWxpemVyIG9uIGZpZWxkIHdpdGhvdXQgaW5pdGlhbGl6ZXIuSW50ZXJuYWxQcm9ibGVtQWxyZWFkeUluaXRpYWxpemVkbWVzc2FnZUludGVybmFsUHJvYmxlbUFscmVhZHlJbml0aWFsaXplZGNvZGVJbnRlcm5hbFByb2JsZW1Cb2R5T25BYnN0cmFjdE1ldGhvZEF0dGVtcHRpbmcgdG8gc2V0IGJvZHkgb24gYWJzdHJhY3QgbWV0aG9kLkludGVybmFsUHJvYmxlbUJvZHlPbkFic3RyYWN0TWV0aG9kbWVzc2FnZUludGVybmFsUHJvYmxlbUJvZHlPbkFic3RyYWN0TWV0aG9kdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Db25zdHJ1Y3Rvck5vdEZvdW5kTm8gY29uc3RydWN0b3IgbmFtZWQgJyNuYW1lJyBpbiAnI3VyaScuY29kZUludGVybmFsUHJvYmxlbUNvbnN0cnVjdG9yTm90Rm91bmRJbnRlcm5hbFByb2JsZW1Db25zdHJ1Y3Rvck5vdEZvdW5kdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Db250ZXh0U2V2ZXJpdHlOb24tY29udGV4dCBtZXNzYWdlIGhhcyBjb250ZXh0IHNldmVyaXR5OiAjc3RyaW5nY29kZUludGVybmFsUHJvYmxlbUNvbnRleHRTZXZlcml0eUludGVybmFsUHJvYmxlbUNvbnRleHRTZXZlcml0eXRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtRGVidWdBYm9ydENvbXBpbGF0aW9uIGFib3J0ZWQgZHVlIHRvIGZhdGFsICcjbmFtZScgYXQ6CiNzdHJpbmdjb2RlSW50ZXJuYWxQcm9ibGVtRGVidWdBYm9ydEludGVybmFsUHJvYmxlbURlYnVnQWJvcnRjb2RlSW50ZXJuYWxQcm9ibGVtRXh0ZW5kaW5nVW5tb2RpZmlhYmxlU2NvcGVDYW4ndCBleHRlbmQgYW4gdW5tb2RpZmlhYmxlIHNjb3BlLkludGVybmFsUHJvYmxlbUV4dGVuZGluZ1VubW9kaWZpYWJsZVNjb3BlbWVzc2FnZUludGVybmFsUHJvYmxlbUV4dGVuZGluZ1VubW9kaWZpYWJsZVNjb3BlY29kZUludGVybmFsUHJvYmxlbUxhYmVsVXNhZ2VJblZhcmlhYmxlc0RlY2xhcmF0aW9uVW5leHBlY3RlZCB1c2FnZSBvZiBsYWJlbCBpbnNpZGUgZGVjbGFyYXRpb24gb2YgdmFyaWFibGVzLkludGVybmFsUHJvYmxlbUxhYmVsVXNhZ2VJblZhcmlhYmxlc0RlY2xhcmF0aW9ubWVzc2FnZUludGVybmFsUHJvYmxlbUxhYmVsVXNhZ2VJblZhcmlhYmxlc0RlY2xhcmF0aW9uY29kZUludGVybmFsUHJvYmxlbU1pc3NpbmdDb250ZXh0dGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Ob0luZmVycmVkVHlwZVN0b3JlZFRoZXJlJ3Mgbm8gaW5mZXJyZWQgdHlwZSBmb3IgJyNuYW1lJy5jb2RlSW50ZXJuYWxQcm9ibGVtTm9JbmZlcnJlZFR5cGVTdG9yZWRJbnRlcm5hbFByb2JsZW1Ob0luZmVycmVkVHlwZVN0b3JlZHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtTm90Rm91bmRDb3VsZG4ndCBmaW5kICcjbmFtZScuY29kZUludGVybmFsUHJvYmxlbU5vdEZvdW5kSW50ZXJuYWxQcm9ibGVtTm90Rm91bmR0ZW1wbGF0ZUludGVybmFsUHJvYmxlbU5vdEZvdW5kSW5Db3VsZG4ndCBmaW5kICcjbmFtZScgaW4gJyNuYW1lMicuY29kZUludGVybmFsUHJvYmxlbU5vdEZvdW5kSW5JbnRlcm5hbFByb2JsZW1Ob3RGb3VuZEluY29kZUludGVybmFsUHJvYmxlbVByZXZpb3VzVG9rZW5Ob3RGb3VuZENvdWxkbid0IGZpbmQgcHJldmlvdXMgdG9rZW4uSW50ZXJuYWxQcm9ibGVtUHJldmlvdXNUb2tlbk5vdEZvdW5kbWVzc2FnZUludGVybmFsUHJvYmxlbVByZXZpb3VzVG9rZW5Ob3RGb3VuZHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtUHJpdmF0ZUNvbnN0cnVjdG9yQWNjZXNzQ2FuJ3QgYWNjZXNzIHByaXZhdGUgY29uc3RydWN0b3IgJyNuYW1lJy5jb2RlSW50ZXJuYWxQcm9ibGVtUHJpdmF0ZUNvbnN0cnVjdG9yQWNjZXNzSW50ZXJuYWxQcm9ibGVtUHJpdmF0ZUNvbnN0cnVjdG9yQWNjZXNzY29kZUludGVybmFsUHJvYmxlbVByb3ZpZGVkQm90aENvbXBpbGVTZGtBbmRTZGtTdW1tYXJ5dGVtcGxhdGVJbnRlcm5hbFByb2JsZW1TdGFja05vdEVtcHR5I25hbWUuc3RhY2sgaXNuJ3QgZW1wdHk6CiAgI3N0cmluZ2NvZGVJbnRlcm5hbFByb2JsZW1TdGFja05vdEVtcHR5SW50ZXJuYWxQcm9ibGVtU3RhY2tOb3RFbXB0eXRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtU3RvcmluZ011bHRpcGxlSW5mZXJyZWRUeXBlc1RoZXJlJ3MgYWxyZWFkeSBhbiBpbmZlcnJlZCB0eXBlLCAnI3R5cGUnLCBmb3IgJyNuYW1lJy5jb2RlSW50ZXJuYWxQcm9ibGVtU3RvcmluZ011bHRpcGxlSW5mZXJyZWRUeXBlc0ludGVybmFsUHJvYmxlbVN0b3JpbmdNdWx0aXBsZUluZmVycmVkVHlwZXN0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVVuZXhwZWN0ZWRFeHBlY3RlZCAnI3N0cmluZycsIGJ1dCBnb3QgJyNzdHJpbmcyJy5jb2RlSW50ZXJuYWxQcm9ibGVtVW5leHBlY3RlZEludGVybmFsUHJvYmxlbVVuZXhwZWN0ZWR0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVVuaGFuZGxlZFVuaGFuZGxlZCAjc3RyaW5nIGluICNzdHJpbmcyLmNvZGVJbnRlcm5hbFByb2JsZW1VbmhhbmRsZWRJbnRlcm5hbFByb2JsZW1VbmhhbmRsZWR0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVVuaW1wbGVtZW50ZWRVbmltcGxlbWVudGVkICNzdHJpbmcuY29kZUludGVybmFsUHJvYmxlbVVuaW1wbGVtZW50ZWRJbnRlcm5hbFByb2JsZW1VbmltcGxlbWVudGVkY29kZUludGVybmFsUHJvYmxlbVVuc3VwcG9ydGVkSW50ZXJuYWxQcm9ibGVtVW5zdXBwb3J0ZWR0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVVyaU1pc3NpbmdTY2hlbWVUaGUgVVJJICcjdXJpJyBoYXMgbm8gc2NoZW1lLmNvZGVJbnRlcm5hbFByb2JsZW1VcmlNaXNzaW5nU2NoZW1lSW50ZXJuYWxQcm9ibGVtVXJpTWlzc2luZ1NjaGVtZXRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtVmVyaWZpY2F0aW9uRXJyb3JWZXJpZmljYXRpb24gb2YgdGhlIGdlbmVyYXRlZCBwcm9ncmFtIGZhaWxlZDoKI3N0cmluZ2NvZGVJbnRlcm5hbFByb2JsZW1WZXJpZmljYXRpb25FcnJvckludGVybmFsUHJvYmxlbVZlcmlmaWNhdGlvbkVycm9yY29kZUludGVycG9sYXRpb25JblVyaUNhbid0IHVzZSBzdHJpbmcgaW50ZXJwb2xhdGlvbiBpbiBhIFVSSS5JbnRlcnBvbGF0aW9uSW5VcmlJTlZBTElEX0xJVEVSQUxfSU5fQ09ORklHVVJBVElPTm1lc3NhZ2VJbnRlcnBvbGF0aW9uSW5Vcml0ZW1wbGF0ZUludGVyc2VjdGlvblR5cGVBc1R5cGVBcmd1bWVudENhbid0IGluZmVyIGEgdHlwZSBmb3IgJyNuYW1lJywgaXQgY2FuIGJlIGVpdGhlciAnI3R5cGUnIG9yICcjdHlwZTInLlRyeSBhZGRpbmcgYSB0eXBlIGFyZ3VtZW50IHNlbGVjdGluZyBvbmUgb2YgdGhlIG9wdGlvbnMuY29kZUludGVyc2VjdGlvblR5cGVBc1R5cGVBcmd1bWVudEludGVyc2VjdGlvblR5cGVBc1R5cGVBcmd1bWVudHRlbXBsYXRlSW52YWxpZEFzc2lnbm1lbnRUcnkgY2hhbmdpbmcgdGhlIHR5cGUgb2YgdGhlIGxlZnQgaGFuZCBzaWRlLCBvciBjYXN0aW5nIHRoZSByaWdodCBoYW5kIHNpZGUgdG8gJyN0eXBlMicuY29kZUludmFsaWRBc3NpZ25tZW50SW52YWxpZEFzc2lnbm1lbnRJTlZBTElEX0FTU0lHTk1FTlRjb2RlSW52YWxpZEF3YWl0Rm9yVGhlIGtleXdvcmQgJ2F3YWl0JyBpc24ndCBhbGxvd2VkIGZvciBhIG5vcm1hbCAnZm9yJyBzdGF0ZW1lbnQuVHJ5IHJlbW92aW5nIHRoZSBrZXl3b3JkLCBvciB1c2UgYSBmb3ItZWFjaCBzdGF0ZW1lbnQuSW52YWxpZEF3YWl0Rm9ybWVzc2FnZUludmFsaWRBd2FpdEZvcnRlbXBsYXRlSW52YWxpZEJyZWFrVGFyZ2V0Q2FuJ3QgYnJlYWsgdG8gJyNuYW1lJy5jb2RlSW52YWxpZEJyZWFrVGFyZ2V0SW52YWxpZEJyZWFrVGFyZ2V0dGVtcGxhdGVJbnZhbGlkQ2FzdEZ1bmN0aW9uRXhwclRoZSBmdW5jdGlvbiBleHByZXNzaW9uIHR5cGUgJyN0eXBlJyBpc24ndCBvZiBleHBlY3RlZCB0eXBlICcjdHlwZTInLkNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24gZXhwcmVzc2lvbiBvciB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBpcyB1c2VkLmNvZGVJbnZhbGlkQ2FzdEZ1bmN0aW9uRXhwckludmFsaWRDYXN0RnVuY3Rpb25FeHBySU5WQUxJRF9DQVNUX0ZVTkNUSU9OX0VYUFJ0ZW1wbGF0ZUludmFsaWRDYXN0TGl0ZXJhbExpc3RUaGUgbGlzdCBsaXRlcmFsIHR5cGUgJyN0eXBlJyBpc24ndCBvZiBleHBlY3RlZCB0eXBlICcjdHlwZTInLkNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgbGlzdCBsaXRlcmFsIG9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIHVzZWQuY29kZUludmFsaWRDYXN0TGl0ZXJhbExpc3RJbnZhbGlkQ2FzdExpdGVyYWxMaXN0SU5WQUxJRF9DQVNUX0xJVEVSQUxfTElTVHRlbXBsYXRlSW52YWxpZENhc3RMaXRlcmFsTWFwVGhlIG1hcCBsaXRlcmFsIHR5cGUgJyN0eXBlJyBpc24ndCBvZiBleHBlY3RlZCB0eXBlICcjdHlwZTInLkNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgbWFwIGxpdGVyYWwgb3IgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgdXNlZC5jb2RlSW52YWxpZENhc3RMaXRlcmFsTWFwSW52YWxpZENhc3RMaXRlcmFsTWFwSU5WQUxJRF9DQVNUX0xJVEVSQUxfTUFQdGVtcGxhdGVJbnZhbGlkQ2FzdExpdGVyYWxTZXRUaGUgc2V0IGxpdGVyYWwgdHlwZSAnI3R5cGUnIGlzbid0IG9mIGV4cGVjdGVkIHR5cGUgJyN0eXBlMicuQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBzZXQgbGl0ZXJhbCBvciB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBpcyB1c2VkLmNvZGVJbnZhbGlkQ2FzdExpdGVyYWxTZXRJbnZhbGlkQ2FzdExpdGVyYWxTZXRJTlZBTElEX0NBU1RfTElURVJBTF9TRVR0ZW1wbGF0ZUludmFsaWRDYXN0TG9jYWxGdW5jdGlvblRoZSBsb2NhbCBmdW5jdGlvbiBoYXMgdHlwZSAnI3R5cGUnIHRoYXQgaXNuJ3Qgb2YgZXhwZWN0ZWQgdHlwZSAnI3R5cGUyJy5DaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIG9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIHVzZWQuY29kZUludmFsaWRDYXN0TG9jYWxGdW5jdGlvbkludmFsaWRDYXN0TG9jYWxGdW5jdGlvbklOVkFMSURfQ0FTVF9GVU5DVElPTnRlbXBsYXRlSW52YWxpZENhc3ROZXdFeHByVGhlIGNvbnN0cnVjdG9yIHJldHVybnMgdHlwZSAnI3R5cGUnIHRoYXQgaXNuJ3Qgb2YgZXhwZWN0ZWQgdHlwZSAnI3R5cGUyJy5DaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIG9iamVjdCBiZWluZyBjb25zdHJ1Y3RlZCBvciB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBpcyB1c2VkLmNvZGVJbnZhbGlkQ2FzdE5ld0V4cHJJbnZhbGlkQ2FzdE5ld0V4cHJJTlZBTElEX0NBU1RfTkVXX0VYUFJ0ZW1wbGF0ZUludmFsaWRDYXN0U3RhdGljTWV0aG9kVGhlIHN0YXRpYyBtZXRob2QgaGFzIHR5cGUgJyN0eXBlJyB0aGF0IGlzbid0IG9mIGV4cGVjdGVkIHR5cGUgJyN0eXBlMicuQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBtZXRob2Qgb3IgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgdXNlZC5jb2RlSW52YWxpZENhc3RTdGF0aWNNZXRob2RJbnZhbGlkQ2FzdFN0YXRpY01ldGhvZElOVkFMSURfQ0FTVF9NRVRIT0R0ZW1wbGF0ZUludmFsaWRDYXN0VG9wTGV2ZWxGdW5jdGlvblRoZSB0b3AgbGV2ZWwgZnVuY3Rpb24gaGFzIHR5cGUgJyN0eXBlJyB0aGF0IGlzbid0IG9mIGV4cGVjdGVkIHR5cGUgJyN0eXBlMicuY29kZUludmFsaWRDYXN0VG9wTGV2ZWxGdW5jdGlvbkludmFsaWRDYXN0VG9wTGV2ZWxGdW5jdGlvbmNvZGVJbnZhbGlkQ2F0Y2hBcmd1bWVudHNJbnZhbGlkIGNhdGNoIGFyZ3VtZW50cy5JbnZhbGlkQ2F0Y2hBcmd1bWVudHNJTlZBTElEX0NBVENIX0FSR1VNRU5UU21lc3NhZ2VJbnZhbGlkQ2F0Y2hBcmd1bWVudHNjb2RlSW52YWxpZENvZGVQb2ludFRoZSBlc2NhcGUgc2VxdWVuY2Ugc3RhcnRpbmcgd2l0aCAnXHUnIGlzbid0IGEgdmFsaWQgY29kZSBwb2ludC5JbnZhbGlkQ29kZVBvaW50SU5WQUxJRF9DT0RFX1BPSU5UbWVzc2FnZUludmFsaWRDb2RlUG9pbnR0ZW1wbGF0ZUludmFsaWRDb250aW51ZVRhcmdldENhbid0IGNvbnRpbnVlIGF0ICcjbmFtZScuY29kZUludmFsaWRDb250aW51ZVRhcmdldEludmFsaWRDb250aW51ZVRhcmdldGNvZGVJbnZhbGlkSGV4RXNjYXBlQW4gZXNjYXBlIHNlcXVlbmNlIHN0YXJ0aW5nIHdpdGggJ1x4JyBtdXN0IGJlIGZvbGxvd2VkIGJ5IDIgaGV4YWRlY2ltYWwgZGlnaXRzLkludmFsaWRIZXhFc2NhcGVtZXNzYWdlSW52YWxpZEhleEVzY2FwZWNvZGVJbnZhbGlkSW5pdGlhbGl6ZXJOb3QgYSB2YWxpZCBpbml0aWFsaXplci5UbyBpbml0aWFsaXplIGEgZmllbGQsIHVzZSB0aGUgc3ludGF4ICduYW1lID0gdmFsdWUnLm1lc3NhZ2VJbnZhbGlkSW5pdGlhbGl6ZXJjb2RlSW52YWxpZElubGluZUZ1bmN0aW9uVHlwZUlubGluZSBmdW5jdGlvbiB0eXBlcyBjYW5ub3QgYmUgdXNlZCBmb3IgcGFyYW1ldGVycyBpbiBhIGdlbmVyaWMgZnVuY3Rpb24gdHlwZS5UcnkgY2hhbmdpbmcgdGhlIGlubGluZSBmdW5jdGlvbiB0eXBlIChhcyBpbiAnaW50IGYoKScpIHRvIGEgcHJlZml4ZWQgZnVuY3Rpb24gdHlwZSB1c2luZyB0aGUgYEZ1bmN0aW9uYCBrZXl3b3JkIChhcyBpbiAnaW50IEZ1bmN0aW9uKCkgZicpLkludmFsaWRJbmxpbmVGdW5jdGlvblR5cGVJTlZBTElEX0lOTElORV9GVU5DVElPTl9UWVBFbWVzc2FnZUludmFsaWRJbmxpbmVGdW5jdGlvblR5cGV0ZW1wbGF0ZUludmFsaWRPcGVyYXRvclRoZSBzdHJpbmcgJyNsZXhlbWUnIGlzbid0IGEgdXNlci1kZWZpbmFibGUgb3BlcmF0b3IuY29kZUludmFsaWRPcGVyYXRvckludmFsaWRPcGVyYXRvcnRlbXBsYXRlSW52YWxpZFBhY2thZ2VVcmlJbnZhbGlkIHBhY2thZ2UgVVJJICcjdXJpJzoKICAjc3RyaW5nLmNvZGVJbnZhbGlkUGFja2FnZVVyaUludmFsaWRQYWNrYWdlVXJpY29kZUludmFsaWRTdXBlckluSW5pdGlhbGl6ZXJDYW4gb25seSB1c2UgJ3N1cGVyJyBpbiBhbiBpbml0aWFsaXplciBmb3IgY2FsbGluZyB0aGUgc3VwZXJjbGFzcyBjb25zdHJ1Y3RvciAoZS5nLiAnc3VwZXIoKScgb3IgJ3N1cGVyLm5hbWVkQ29uc3RydWN0b3IoKScpSW52YWxpZFN1cGVySW5Jbml0aWFsaXplcm1lc3NhZ2VJbnZhbGlkU3VwZXJJbkluaXRpYWxpemVyY29kZUludmFsaWRTeW5jTW9kaWZpZXJJbnZhbGlkIG1vZGlmaWVyICdzeW5jJy5UcnkgcmVwbGFjaW5nICdzeW5jJyB3aXRoICdzeW5jKicuSW52YWxpZFN5bmNNb2RpZmllck1JU1NJTkdfU1RBUl9BRlRFUl9TWU5DbWVzc2FnZUludmFsaWRTeW5jTW9kaWZpZXJjb2RlSW52YWxpZFRoaXNJbkluaXRpYWxpemVyQ2FuIG9ubHkgdXNlICd0aGlzJyBpbiBhbiBpbml0aWFsaXplciBmb3IgZmllbGQgaW5pdGlhbGl6YXRpb24gKGUuZy4gJ3RoaXMueCA9IHNvbWV0aGluZycpIGFuZCBjb25zdHJ1Y3RvciByZWRpcmVjdGlvbiAoZS5nLiAndGhpcygpJyBvciAndGhpcy5uYW1lZENvbnN0cnVjdG9yKCkpSW52YWxpZFRoaXNJbkluaXRpYWxpemVybWVzc2FnZUludmFsaWRUaGlzSW5Jbml0aWFsaXplcmNvZGVJbnZhbGlkVW5pY29kZUVzY2FwZUFuIGVzY2FwZSBzZXF1ZW5jZSBzdGFydGluZyB3aXRoICdcdScgbXVzdCBiZSBmb2xsb3dlZCBieSA0IGhleGFkZWNpbWFsIGRpZ2l0cyBvciBmcm9tIDEgdG8gNiBkaWdpdHMgYmV0d2VlbiAneycgYW5kICd9Jy5JbnZhbGlkVW5pY29kZUVzY2FwZW1lc3NhZ2VJbnZhbGlkVW5pY29kZUVzY2FwZWNvZGVJbnZhbGlkVXNlT2ZOdWxsQXdhcmVBY2Nlc3NDYW5ub3QgdXNlICc/LicgaGVyZS5UcnkgdXNpbmcgJy4nLkludmFsaWRVc2VPZk51bGxBd2FyZUFjY2Vzc0lOVkFMSURfVVNFX09GX05VTExfQVdBUkVfQUNDRVNTbWVzc2FnZUludmFsaWRVc2VPZk51bGxBd2FyZUFjY2Vzc2NvZGVJbnZhbGlkVm9pZFR5cGUgJ3ZvaWQnIGNhbid0IGJlIHVzZWQgaGVyZSBiZWNhdXNlIGl0IGlzbid0IGEgcmV0dXJuIHR5cGUuVHJ5IHJlbW92aW5nICd2b2lkJyBrZXl3b3JkIG9yIHJlcGxhY2UgaXQgd2l0aCAndmFyJywgJ2ZpbmFsJywgb3IgYSB0eXBlLkludmFsaWRWb2lkbWVzc2FnZUludmFsaWRWb2lkdGVtcGxhdGVJbnZva2VOb25GdW5jdGlvbicjbmFtZScgaXNuJ3QgYSBmdW5jdGlvbiBvciBtZXRob2QgYW5kIGNhbid0IGJlIGludm9rZWQuY29kZUludm9rZU5vbkZ1bmN0aW9uSW52b2tlTm9uRnVuY3Rpb25JTlZPQ0FUSU9OX09GX05PTl9GVU5DVElPTnRlbXBsYXRlTGFiZWxOb3RGb3VuZENhbid0IGZpbmQgbGFiZWwgJyNuYW1lJy5UcnkgZGVmaW5pbmcgdGhlIGxhYmVsLCBvciBjb3JyZWN0aW5nIHRoZSBuYW1lIHRvIG1hdGNoIGFuIGV4aXN0aW5nIGxhYmVsLmNvZGVMYWJlbE5vdEZvdW5kTGFiZWxOb3RGb3VuZGNvZGVMYW5ndWFnZVZlcnNpb25JbnZhbGlkSW5Eb3RQYWNrYWdlc1RoZSBsYW5ndWFnZSB2ZXJzaW9uIGlzIG5vdCBzcGVjaWZpZWQgY29ycmVjdGx5IGluIHRoZSAucGFja2FnZXMgZmlsZS5MYW5ndWFnZVZlcnNpb25JbnZhbGlkSW5Eb3RQYWNrYWdlc21lc3NhZ2VMYW5ndWFnZVZlcnNpb25JbnZhbGlkSW5Eb3RQYWNrYWdlc2NvZGVMYW5ndWFnZVZlcnNpb25NaXNtYXRjaEluUGFydFRoZSBsYW5ndWFnZSB2ZXJzaW9uIG92ZXJyaWRlIGhhcyB0byBiZSB0aGUgc2FtZSBpbiB0aGUgbGlicmFyeSBhbmQgaXRzIHBhcnQocykuTGFuZ3VhZ2VWZXJzaW9uTWlzbWF0Y2hJblBhcnRtZXNzYWdlTGFuZ3VhZ2VWZXJzaW9uTWlzbWF0Y2hJblBhcnR0ZW1wbGF0ZUxhbmd1YWdlVmVyc2lvblRvb0hpZ2hUaGUgc3BlY2lmaWVkIGxhbmd1YWdlIHZlcnNpb24gaXMgdG9vIGhpZ2guIFRoZSBoaWdoZXN0IHN1cHBvcnRlZCBsYW5ndWFnZSB2ZXJzaW9uIGlzICNjb3VudC4jY291bnQyLmNvZGVMYW5ndWFnZVZlcnNpb25Ub29IaWdoTGFuZ3VhZ2VWZXJzaW9uVG9vSGlnaGNvZGVMaWJyYXJ5RGlyZWN0aXZlTm90Rmlyc3RUaGUgbGlicmFyeSBkaXJlY3RpdmUgbXVzdCBhcHBlYXIgYmVmb3JlIGFsbCBvdGhlciBkaXJlY3RpdmVzLlRyeSBtb3ZpbmcgdGhlIGxpYnJhcnkgZGlyZWN0aXZlIGJlZm9yZSBhbnkgb3RoZXIgZGlyZWN0aXZlcy5MaWJyYXJ5RGlyZWN0aXZlTm90Rmlyc3RtZXNzYWdlTGlicmFyeURpcmVjdGl2ZU5vdEZpcnN0Y29kZUxpc3RMaXRlcmFsVG9vTWFueVR5cGVBcmd1bWVudHNMaXN0IGxpdGVyYWwgcmVxdWlyZXMgZXhhY3RseSBvbmUgdHlwZSBhcmd1bWVudC5MaXN0TGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzRVhQRUNURURfT05FX0xJU1RfVFlQRV9BUkdVTUVOVFNtZXNzYWdlTGlzdExpdGVyYWxUb29NYW55VHlwZUFyZ3VtZW50c3RlbXBsYXRlTG9hZExpYnJhcnlIaWRlc01lbWJlclRoZSBsaWJyYXJ5ICcjdXJpJyBkZWZpbmVzIGEgdG9wLWxldmVsIG1lbWJlciBuYW1lZCAnbG9hZExpYnJhcnknLiBUaGlzIG1lbWJlciBpcyBoaWRkZW4gYnkgdGhlIHNwZWNpYWwgbWVtYmVyICdsb2FkTGlicmFyeScgdGhhdCB0aGUgbGFuZ3VhZ2UgYWRkcyB0byBzdXBwb3J0IGRlZmVycmVkIGxvYWRpbmcuVHJ5IHRvIHJlbmFtZSBvciBoaWRlIHRoZSBtZW1iZXIuY29kZUxvYWRMaWJyYXJ5SGlkZXNNZW1iZXJMb2FkTGlicmFyeUhpZGVzTWVtYmVyY29kZUxvYWRMaWJyYXJ5VGFrZXNOb0FyZ3VtZW50cydsb2FkTGlicmFyeScgdGFrZXMgbm8gYXJndW1lbnRzLkxvYWRMaWJyYXJ5VGFrZXNOb0FyZ3VtZW50c0xPQURfTElCUkFSWV9UQUtFU19OT19BUkdVTUVOVFNtZXNzYWdlTG9hZExpYnJhcnlUYWtlc05vQXJndW1lbnRzdGVtcGxhdGVMb2NhbERlZmluaXRpb25IaWRlc0V4cG9ydExvY2FsIGRlZmluaXRpb24gb2YgJyNuYW1lJyBoaWRlcyBleHBvcnQgZnJvbSAnI3VyaScuY29kZUxvY2FsRGVmaW5pdGlvbkhpZGVzRXhwb3J0TG9jYWxEZWZpbml0aW9uSGlkZXNFeHBvcnR0ZW1wbGF0ZUxvY2FsRGVmaW5pdGlvbkhpZGVzSW1wb3J0TG9jYWwgZGVmaW5pdGlvbiBvZiAnI25hbWUnIGhpZGVzIGltcG9ydCBmcm9tICcjdXJpJy5jb2RlTG9jYWxEZWZpbml0aW9uSGlkZXNJbXBvcnRMb2NhbERlZmluaXRpb25IaWRlc0ltcG9ydGNvZGVNYXBMaXRlcmFsVHlwZUFyZ3VtZW50TWlzbWF0Y2hBIG1hcCBsaXRlcmFsIHJlcXVpcmVzIGV4YWN0bHkgdHdvIHR5cGUgYXJndW1lbnRzLk1hcExpdGVyYWxUeXBlQXJndW1lbnRNaXNtYXRjaEVYUEVDVEVEX1RXT19NQVBfVFlQRV9BUkdVTUVOVFNtZXNzYWdlTWFwTGl0ZXJhbFR5cGVBcmd1bWVudE1pc21hdGNoY29kZU1lbWJlcldpdGhTYW1lTmFtZUFzQ2xhc3NBIGNsYXNzIG1lbWJlciBjYW4ndCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGVuY2xvc2luZyBjbGFzcy5NZW1iZXJXaXRoU2FtZU5hbWVBc0NsYXNzbWVzc2FnZU1lbWJlcldpdGhTYW1lTmFtZUFzQ2xhc3Njb2RlTWV0YWRhdGFUeXBlQXJndW1lbnRzQW4gYW5ub3RhdGlvbiAobWV0YWRhdGEpIGNhbid0IHVzZSB0eXBlIGFyZ3VtZW50cy5NZXRhZGF0YVR5cGVBcmd1bWVudHNtZXNzYWdlTWV0YWRhdGFUeXBlQXJndW1lbnRzdGVtcGxhdGVNZXRob2ROb3RGb3VuZE1ldGhvZCBub3QgZm91bmQ6ICcjbmFtZScuY29kZU1ldGhvZE5vdEZvdW5kTWV0aG9kTm90Rm91bmRVTkRFRklORURfTUVUSE9EY29kZU1pc3NpbmdBcmd1bWVudExpc3RDb25zdHJ1Y3RvciBpbnZvY2F0aW9ucyBtdXN0IGhhdmUgYW4gYXJndW1lbnQgbGlzdC5NaXNzaW5nQXJndW1lbnRMaXN0bWVzc2FnZU1pc3NpbmdBcmd1bWVudExpc3Rjb2RlTWlzc2luZ0Fzc2lnbmFibGVTZWxlY3Rvck1pc3Npbmcgc2VsZWN0b3Igc3VjaCBhcyAnLjxpZGVudGlmaWVyPicgb3IgJ1swXScuVHJ5IGFkZGluZyBhIHNlbGVjdG9yLk1pc3NpbmdBc3NpZ25hYmxlU2VsZWN0b3JtZXNzYWdlTWlzc2luZ0Fzc2lnbmFibGVTZWxlY3RvcmNvZGVNaXNzaW5nQXNzaWdubWVudEluSW5pdGlhbGl6ZXJFeHBlY3RlZCBhbiBhc3NpZ25tZW50IGFmdGVyIHRoZSBmaWVsZCBuYW1lLk1pc3NpbmdBc3NpZ25tZW50SW5Jbml0aWFsaXplcm1lc3NhZ2VNaXNzaW5nQXNzaWdubWVudEluSW5pdGlhbGl6ZXJjb2RlTWlzc2luZ0NvbnN0RmluYWxWYXJPclR5cGVWYXJpYWJsZXMgbXVzdCBiZSBkZWNsYXJlZCB1c2luZyB0aGUga2V5d29yZHMgJ2NvbnN0JywgJ2ZpbmFsJywgJ3Zhcicgb3IgYSB0eXBlIG5hbWUuVHJ5IGFkZGluZyB0aGUgbmFtZSBvZiB0aGUgdHlwZSBvZiB0aGUgdmFyaWFibGUgb3IgdGhlIGtleXdvcmQgJ3ZhcicuTWlzc2luZ0NvbnN0RmluYWxWYXJPclR5cGVtZXNzYWdlTWlzc2luZ0NvbnN0RmluYWxWYXJPclR5cGV0ZW1wbGF0ZU1pc3NpbmdFeHBsaWNpdFR5cGVBcmd1bWVudHNObyB0eXBlIGFyZ3VtZW50cyBwcm92aWRlZCwgI2NvdW50IHBvc3NpYmxlLmNvZGVNaXNzaW5nRXhwbGljaXRUeXBlQXJndW1lbnRzTWlzc2luZ0V4cGxpY2l0VHlwZUFyZ3VtZW50c2NvZGVNaXNzaW5nRXhwb25lbnROdW1iZXJzIGluIGV4cG9uZW50aWFsIG5vdGF0aW9uIHNob3VsZCBhbHdheXMgY29udGFpbiBhbiBleHBvbmVudCAoYW4gaW50ZWdlciBudW1iZXIgd2l0aCBhbiBvcHRpb25hbCBzaWduKS5NYWtlIHN1cmUgdGhlcmUgaXMgYW4gZXhwb25lbnQsIGFuZCByZW1vdmUgYW55IHdoaXRlc3BhY2UgYmVmb3JlIGl0Lk1pc3NpbmdFeHBvbmVudE1JU1NJTkdfRElHSVRtZXNzYWdlTWlzc2luZ0V4cG9uZW50Y29kZU1pc3NpbmdFeHByZXNzaW9uSW5UaHJvd01pc3NpbmcgZXhwcmVzc2lvbiBhZnRlciAndGhyb3cnLkFkZCBhbiBleHByZXNzaW9uIGFmdGVyICd0aHJvdycgb3IgdXNlICdyZXRocm93JyB0byB0aHJvdyBhIGNhdWdodCBleGNlcHRpb25NaXNzaW5nRXhwcmVzc2lvbkluVGhyb3dtZXNzYWdlTWlzc2luZ0V4cHJlc3Npb25JblRocm93Y29kZU1pc3NpbmdGdW5jdGlvblBhcmFtZXRlcnNBIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIG5lZWRzIGFuIGV4cGxpY2l0IGxpc3Qgb2YgcGFyYW1ldGVycy5UcnkgYWRkaW5nIGEgcGFyYW1ldGVyIGxpc3QgdG8gdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLk1pc3NpbmdGdW5jdGlvblBhcmFtZXRlcnNNSVNTSU5HX0ZVTkNUSU9OX1BBUkFNRVRFUlNtZXNzYWdlTWlzc2luZ0Z1bmN0aW9uUGFyYW1ldGVyc3RlbXBsYXRlTWlzc2luZ0ltcGxlbWVudGF0aW9uQ2F1c2UnI25hbWUnIGlzIGRlZmluZWQgaGVyZS5jb2RlTWlzc2luZ0ltcGxlbWVudGF0aW9uQ2F1c2VNaXNzaW5nSW1wbGVtZW50YXRpb25DYXVzZXRlbXBsYXRlTWlzc2luZ0ltcGxlbWVudGF0aW9uTm90QWJzdHJhY3RUaGUgbm9uLWFic3RyYWN0IGNsYXNzICcjbmFtZScgaXMgbWlzc2luZyBpbXBsZW1lbnRhdGlvbnMgZm9yIHRoZXNlIG1lbWJlcnM6CiNuYW1lc1RyeSB0byBlaXRoZXIKIC0gcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiwKIC0gaW5oZXJpdCBhbiBpbXBsZW1lbnRhdGlvbiBmcm9tIGEgc3VwZXJjbGFzcyBvciBtaXhpbiwKIC0gbWFyayB0aGUgY2xhc3MgYXMgYWJzdHJhY3QsIG9yCiAtIHByb3ZpZGUgYSAnbm9TdWNoTWV0aG9kJyBpbXBsZW1lbnRhdGlvbi4KY29kZU1pc3NpbmdJbXBsZW1lbnRhdGlvbk5vdEFic3RyYWN0TWlzc2luZ0ltcGxlbWVudGF0aW9uTm90QWJzdHJhY3RDT05DUkVURV9DTEFTU19XSVRIX0FCU1RSQUNUX01FTUJFUmNvZGVNaXNzaW5nSW5wdXRjb2RlTWlzc2luZ01haW5jb2RlTWlzc2luZ01ldGhvZFBhcmFtZXRlcnNBIG1ldGhvZCBkZWNsYXJhdGlvbiBuZWVkcyBhbiBleHBsaWNpdCBsaXN0IG9mIHBhcmFtZXRlcnMuVHJ5IGFkZGluZyBhIHBhcmFtZXRlciBsaXN0IHRvIHRoZSBtZXRob2QgZGVjbGFyYXRpb24uTWlzc2luZ01ldGhvZFBhcmFtZXRlcnNNSVNTSU5HX01FVEhPRF9QQVJBTUVURVJTbWVzc2FnZU1pc3NpbmdNZXRob2RQYXJhbWV0ZXJzY29kZU1pc3NpbmdPcGVyYXRvcktleXdvcmRPcGVyYXRvciBkZWNsYXJhdGlvbnMgbXVzdCBiZSBwcmVjZWRlZCBieSB0aGUga2V5d29yZCAnb3BlcmF0b3InLlRyeSBhZGRpbmcgdGhlIGtleXdvcmQgJ29wZXJhdG9yJy5NaXNzaW5nT3BlcmF0b3JLZXl3b3JkbWVzc2FnZU1pc3NpbmdPcGVyYXRvcktleXdvcmR0ZW1wbGF0ZU1pc3NpbmdQYXJ0T2ZDYW4ndCB1c2UgJyN1cmknIGFzIGEgcGFydCwgYmVjYXVzZSBpdCBoYXMgbm8gJ3BhcnQgb2YnIGRlY2xhcmF0aW9uLmNvZGVNaXNzaW5nUGFydE9mTWlzc2luZ1BhcnRPZlBBUlRfT0ZfTk9OX1BBUlRjb2RlTWlzc2luZ1ByZWZpeEluRGVmZXJyZWRJbXBvcnREZWZlcnJlZCBpbXBvcnRzIHNob3VsZCBoYXZlIGEgcHJlZml4LlRyeSBhZGRpbmcgYSBwcmVmaXggdG8gdGhlIGltcG9ydC5NaXNzaW5nUHJlZml4SW5EZWZlcnJlZEltcG9ydG1lc3NhZ2VNaXNzaW5nUHJlZml4SW5EZWZlcnJlZEltcG9ydGNvZGVNaXNzaW5nVHlwZWRlZlBhcmFtZXRlcnNBIHR5cGVkZWYgbmVlZHMgYW4gZXhwbGljaXQgbGlzdCBvZiBwYXJhbWV0ZXJzLlRyeSBhZGRpbmcgYSBwYXJhbWV0ZXIgbGlzdCB0byB0aGUgdHlwZWRlZi5NaXNzaW5nVHlwZWRlZlBhcmFtZXRlcnNNSVNTSU5HX1RZUEVERUZfUEFSQU1FVEVSU21lc3NhZ2VNaXNzaW5nVHlwZWRlZlBhcmFtZXRlcnN0ZW1wbGF0ZU1peGluQXBwbGljYXRpb25JbmNvbXBhdGlibGVTdXBlcnR5cGUnI3R5cGUnIGRvZXNuJ3QgaW1wbGVtZW50ICcjdHlwZTInIHNvIGl0IGNhbid0IGJlIHVzZWQgd2l0aCAnI3R5cGUzJy5jb2RlTWl4aW5BcHBsaWNhdGlvbkluY29tcGF0aWJsZVN1cGVydHlwZU1peGluQXBwbGljYXRpb25JbmNvbXBhdGlibGVTdXBlcnR5cGVNSVhJTl9BUFBMSUNBVElPTl9OT1RfSU1QTEVNRU5URURfSU5URVJGQUNFdGVtcGxhdGVNaXhpbkluZmVyZW5jZU5vTWF0Y2hpbmdDbGFzc1R5cGUgcGFyYW1ldGVycyBjb3VsZCBub3QgYmUgaW5mZXJyZWQgZm9yIHRoZSBtaXhpbiAnI25hbWUnIGJlY2F1c2UgJyNuYW1lMicgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBtaXhpbidzIHN1cGVydHlwZSBjb25zdHJhaW50ICcjdHlwZScuY29kZU1peGluSW5mZXJlbmNlTm9NYXRjaGluZ0NsYXNzTWl4aW5JbmZlcmVuY2VOb01hdGNoaW5nQ2xhc3NNSVhJTl9JTkZFUkVOQ0VfTk9fUE9TU0lCTEVfU1VCU1RJVFVUSU9OdGVtcGxhdGVNb2RpZmllck91dE9mT3JkZXJUaGUgbW9kaWZpZXIgJyNzdHJpbmcnIHNob3VsZCBiZSBiZWZvcmUgdGhlIG1vZGlmaWVyICcjc3RyaW5nMicuVHJ5IHJlLW9yZGVyaW5nIHRoZSBtb2RpZmllcnMuY29kZU1vZGlmaWVyT3V0T2ZPcmRlck1vZGlmaWVyT3V0T2ZPcmRlcmNvZGVNb3JlVGhhbk9uZVN1cGVyT3JUaGlzSW5pdGlhbGl6ZXJDYW4ndCBoYXZlIG1vcmUgdGhhbiBvbmUgJ3N1cGVyJyBvciAndGhpcycgaW5pdGlhbGl6ZXIuTW9yZVRoYW5PbmVTdXBlck9yVGhpc0luaXRpYWxpemVyU1VQRVJfSU5fUkVESVJFQ1RJTkdfQ09OU1RSVUNUT1JtZXNzYWdlTW9yZVRoYW5PbmVTdXBlck9yVGhpc0luaXRpYWxpemVyY29kZU11bHRpcGxlRXh0ZW5kc0VhY2ggY2xhc3MgZGVmaW5pdGlvbiBjYW4gaGF2ZSBhdCBtb3N0IG9uZSBleHRlbmRzIGNsYXVzZS5UcnkgY2hvb3Npbmcgb25lIHN1cGVyY2xhc3MgYW5kIGRlZmluZSB5b3VyIGNsYXNzIHRvIGltcGxlbWVudCAob3IgbWl4IGluKSB0aGUgb3RoZXJzLk11bHRpcGxlRXh0ZW5kc21lc3NhZ2VNdWx0aXBsZUV4dGVuZHNjb2RlTXVsdGlwbGVJbXBsZW1lbnRzRWFjaCBjbGFzcyBkZWZpbml0aW9uIGNhbiBoYXZlIGF0IG1vc3Qgb25lIGltcGxlbWVudHMgY2xhdXNlLlRyeSBjb21iaW5pbmcgYWxsIG9mIHRoZSBpbXBsZW1lbnRzIGNsYXVzZXMgaW50byBhIHNpbmdsZSBjbGF1c2UuTXVsdGlwbGVJbXBsZW1lbnRzTVVMVElQTEVfSU1QTEVNRU5UU19DTEFVU0VTbWVzc2FnZU11bHRpcGxlSW1wbGVtZW50c2NvZGVNdWx0aXBsZUxpYnJhcnlEaXJlY3RpdmVzT25seSBvbmUgbGlicmFyeSBkaXJlY3RpdmUgbWF5IGJlIGRlY2xhcmVkIGluIGEgZmlsZS5UcnkgcmVtb3ZpbmcgYWxsIGJ1dCBvbmUgb2YgdGhlIGxpYnJhcnkgZGlyZWN0aXZlcy5NdWx0aXBsZUxpYnJhcnlEaXJlY3RpdmVzbWVzc2FnZU11bHRpcGxlTGlicmFyeURpcmVjdGl2ZXNjb2RlTXVsdGlwbGVPbkNsYXVzZXNFYWNoIG1peGluIGRlZmluaXRpb24gY2FuIGhhdmUgYXQgbW9zdCBvbmUgb24gY2xhdXNlLlRyeSBjb21iaW5pbmcgYWxsIG9mIHRoZSBvbiBjbGF1c2VzIGludG8gYSBzaW5nbGUgY2xhdXNlLk11bHRpcGxlT25DbGF1c2VzbWVzc2FnZU11bHRpcGxlT25DbGF1c2VzY29kZU11bHRpcGxlV2l0aEVhY2ggY2xhc3MgZGVmaW5pdGlvbiBjYW4gaGF2ZSBhdCBtb3N0IG9uZSB3aXRoIGNsYXVzZS5UcnkgY29tYmluaW5nIGFsbCBvZiB0aGUgd2l0aCBjbGF1c2VzIGludG8gYSBzaW5nbGUgY2xhdXNlLk11bHRpcGxlV2l0aG1lc3NhZ2VNdWx0aXBsZVdpdGhjb2RlTmFtZWRGdW5jdGlvbkV4cHJlc3Npb25BIGZ1bmN0aW9uIGV4cHJlc3Npb24gY2FuJ3QgaGF2ZSBhIG5hbWUuTmFtZWRGdW5jdGlvbkV4cHJlc3Npb25OQU1FRF9GVU5DVElPTl9FWFBSRVNTSU9ObWVzc2FnZU5hbWVkRnVuY3Rpb25FeHByZXNzaW9udGVtcGxhdGVOYW1lZE1peGluT3ZlcnJpZGVDb250ZXh0T3ZlcnJpZGUgd2FzIGludHJvZHVjZWQgaW4gdGhlIG1peGluIGFwcGxpY2F0aW9uIGNsYXNzICcjbmFtZScuY29kZU5hbWVkTWl4aW5PdmVycmlkZUNvbnRleHROYW1lZE1peGluT3ZlcnJpZGVDb250ZXh0Y29kZU5hdGl2ZUNsYXVzZVNob3VsZEJlQW5ub3RhdGlvbk5hdGl2ZSBjbGF1c2UgaW4gdGhpcyBmb3JtIGlzIGRlcHJlY2F0ZWQuVHJ5IHJlbW92aW5nIHRoaXMgbmF0aXZlIGNsYXVzZSBhbmQgYWRkaW5nIEBuYXRpdmUoKSBvciBAbmF0aXZlKCduYXRpdmUtbmFtZScpIGJlZm9yZSB0aGUgZGVjbGFyYXRpb24uTmF0aXZlQ2xhdXNlU2hvdWxkQmVBbm5vdGF0aW9ubWVzc2FnZU5hdGl2ZUNsYXVzZVNob3VsZEJlQW5ub3RhdGlvbnRlbXBsYXRlTm9Gb3JtYWxzQSBmdW5jdGlvbiBzaG91bGQgaGF2ZSBmb3JtYWwgcGFyYW1ldGVycy5UcnkgYWRkaW5nICcoKScgYWZ0ZXIgJyNsZXhlbWUnLCBvciBhZGQgJ2dldCcgYmVmb3JlICcjbGV4ZW1lJyB0byBkZWNsYXJlIGEgZ2V0dGVyLmNvZGVOb0Zvcm1hbHNOb0Zvcm1hbHN0ZW1wbGF0ZU5vU3VjaE5hbWVkUGFyYW1ldGVyTm8gbmFtZWQgcGFyYW1ldGVyIHdpdGggdGhlIG5hbWUgJyNuYW1lJy5jb2RlTm9TdWNoTmFtZWRQYXJhbWV0ZXJOb1N1Y2hOYW1lZFBhcmFtZXRlclVOREVGSU5FRF9OQU1FRF9QQVJBTUVURVJjb2RlTm9Vbm5hbWVkQ29uc3RydWN0b3JJbk9iamVjdCdPYmplY3QnIGhhcyBubyB1bm5hbWVkIGNvbnN0cnVjdG9yLk5vVW5uYW1lZENvbnN0cnVjdG9ySW5PYmplY3RtZXNzYWdlTm9Vbm5hbWVkQ29uc3RydWN0b3JJbk9iamVjdHRlbXBsYXRlTm9uQXNjaWlJZGVudGlmaWVyVGhlIG5vbi1BU0NJSSBjaGFyYWN0ZXIgJyNjaGFyYWN0ZXInICgjdW5pY29kZSkgY2FuJ3QgYmUgdXNlZCBpbiBpZGVudGlmaWVycywgb25seSBpbiBzdHJpbmdzIGFuZCBjb21tZW50cy5UcnkgdXNpbmcgYW4gVVMtQVNDSUkgbGV0dGVyLCBhIGRpZ2l0LCAnXycgKGFuIHVuZGVyc2NvcmUpLCBvciAnJCcgKGEgZG9sbGFyIHNpZ24pLmNvZGVOb25Bc2NpaUlkZW50aWZpZXJOb25Bc2NpaUlkZW50aWZpZXJ0ZW1wbGF0ZU5vbkFzY2lpV2hpdGVzcGFjZVRoZSBub24tQVNDSUkgc3BhY2UgY2hhcmFjdGVyICN1bmljb2RlIGNhbiBvbmx5IGJlIHVzZWQgaW4gc3RyaW5ncyBhbmQgY29tbWVudHMuY29kZU5vbkFzY2lpV2hpdGVzcGFjZU5vbkFzY2lpV2hpdGVzcGFjZWNvZGVOb25Db25zdENvbnN0cnVjdG9yQ2Fubm90IGludm9rZSBhIG5vbi0nY29uc3QnIGNvbnN0cnVjdG9yIHdoZXJlIGEgY29uc3QgZXhwcmVzc2lvbiBpcyBleHBlY3RlZC5UcnkgdXNpbmcgYSBjb25zdHJ1Y3RvciBvciBmYWN0b3J5IHRoYXQgaXMgJ2NvbnN0Jy5Ob25Db25zdENvbnN0cnVjdG9ybWVzc2FnZU5vbkNvbnN0Q29uc3RydWN0b3Jjb2RlTm9uQ29uc3RGYWN0b3J5Q2Fubm90IGludm9rZSBhIG5vbi0nY29uc3QnIGZhY3Rvcnkgd2hlcmUgYSBjb25zdCBleHByZXNzaW9uIGlzIGV4cGVjdGVkLk5vbkNvbnN0RmFjdG9yeW1lc3NhZ2VOb25Db25zdEZhY3Rvcnljb2RlTm9uSW5zdGFuY2VUeXBlVmFyaWFibGVVc2VDYW4gb25seSB1c2UgdHlwZSB2YXJpYWJsZXMgaW4gaW5zdGFuY2UgbWV0aG9kcy5Ob25JbnN0YW5jZVR5cGVWYXJpYWJsZVVzZVRZUEVfUEFSQU1FVEVSX1JFRkVSRU5DRURfQllfU1RBVElDbWVzc2FnZU5vbkluc3RhbmNlVHlwZVZhcmlhYmxlVXNlY29kZU5vbk51bGxBd2FyZVNwcmVhZElzTnVsbENhbid0IHNwcmVhZCBhIHZhbHVlIHdpdGggc3RhdGljIHR5cGUgTnVsbC5Ob25OdWxsQXdhcmVTcHJlYWRJc051bGxtZXNzYWdlTm9uTnVsbEF3YXJlU3ByZWFkSXNOdWxsY29kZU5vblBhcnRPZkRpcmVjdGl2ZUluUGFydFRoZSBwYXJ0LW9mIGRpcmVjdGl2ZSBtdXN0IGJlIHRoZSBvbmx5IGRpcmVjdGl2ZSBpbiBhIHBhcnQuVHJ5IHJlbW92aW5nIHRoZSBvdGhlciBkaXJlY3RpdmVzLCBvciBtb3ZpbmcgdGhlbSB0byB0aGUgbGlicmFyeSBmb3Igd2hpY2ggdGhpcyBpcyBhIHBhcnQuTm9uUGFydE9mRGlyZWN0aXZlSW5QYXJ0Tk9OX1BBUlRfT0ZfRElSRUNUSVZFX0lOX1BBUlRtZXNzYWdlTm9uUGFydE9mRGlyZWN0aXZlSW5QYXJ0dGVtcGxhdGVOb25TaW1wbGVCb3VuZFZpYVJlZmVyZW5jZUJvdW5kIG9mIHRoaXMgdmFyaWFibGUgcmVmZXJlbmNlcyByYXcgdHlwZSAnI25hbWUnLmNvZGVOb25TaW1wbGVCb3VuZFZpYVJlZmVyZW5jZU5vblNpbXBsZUJvdW5kVmlhUmVmZXJlbmNldGVtcGxhdGVOb25TaW1wbGVCb3VuZFZpYVZhcmlhYmxlQm91bmQgb2YgdGhpcyB2YXJpYWJsZSByZWZlcmVuY2VzIHZhcmlhYmxlICcjbmFtZScgZnJvbSB0aGUgc2FtZSBkZWNsYXJhdGlvbi5jb2RlTm9uU2ltcGxlQm91bmRWaWFWYXJpYWJsZU5vblNpbXBsZUJvdW5kVmlhVmFyaWFibGVjb2RlTm90QUNvbnN0YW50RXhwcmVzc2lvbk5vdCBhIGNvbnN0YW50IGV4cHJlc3Npb24uTm90QUNvbnN0YW50RXhwcmVzc2lvbm1lc3NhZ2VOb3RBQ29uc3RhbnRFeHByZXNzaW9udGVtcGxhdGVOb3RBUHJlZml4SW5UeXBlQW5ub3RhdGlvbicjbmFtZS4jbmFtZTInIGNhbid0IGJlIHVzZWQgYXMgYSB0eXBlIGJlY2F1c2UgJyNuYW1lJyBkb2Vzbid0IHJlZmVyIHRvIGFuIGltcG9ydCBwcmVmaXguY29kZU5vdEFQcmVmaXhJblR5cGVBbm5vdGF0aW9uTm90QVByZWZpeEluVHlwZUFubm90YXRpb25OT1RfQV9UWVBFdGVtcGxhdGVOb3RBVHlwZScjbmFtZScgaXNuJ3QgYSB0eXBlLmNvZGVOb3RBVHlwZU5vdEFUeXBlY29kZU5vdEFUeXBlQ29udGV4dFRoaXMgaXNuJ3QgYSB0eXBlLk5vdEFUeXBlQ29udGV4dG1lc3NhZ2VOb3RBVHlwZUNvbnRleHRjb2RlTm90QW5MdmFsdWVDYW4ndCBhc3NpZ24gdG8gdGhpcy5Ob3RBbkx2YWx1ZW1lc3NhZ2VOb3RBbkx2YWx1ZXRlbXBsYXRlTm90QmluYXJ5T3BlcmF0b3InI2xleGVtZScgaXNuJ3QgYSBiaW5hcnkgb3BlcmF0b3IuY29kZU5vdEJpbmFyeU9wZXJhdG9yTm90QmluYXJ5T3BlcmF0b3J0ZW1wbGF0ZU5vdENvbnN0YW50RXhwcmVzc2lvbiNzdHJpbmcgaXMgbm90IGEgY29uc3RhbnQgZXhwcmVzc2lvbi5jb2RlTm90Q29uc3RhbnRFeHByZXNzaW9uTm90Q29uc3RhbnRFeHByZXNzaW9uY29kZU9iamVjdEV4dGVuZHNUaGUgY2xhc3MgJ09iamVjdCcgY2FuJ3QgaGF2ZSBhIHN1cGVyY2xhc3MuT2JqZWN0RXh0ZW5kc21lc3NhZ2VPYmplY3RFeHRlbmRzY29kZU9iamVjdEltcGxlbWVudHNUaGUgY2xhc3MgJ09iamVjdCcgY2FuJ3QgaW1wbGVtZW50IGFueXRoaW5nLk9iamVjdEltcGxlbWVudHNtZXNzYWdlT2JqZWN0SW1wbGVtZW50c2NvZGVPYmplY3RNaXhlc0luVGhlIGNsYXNzICdPYmplY3QnIGNhbid0IHVzZSBtaXhpbnMuT2JqZWN0TWl4ZXNJbm1lc3NhZ2VPYmplY3RNaXhlc0luY29kZU9ubHlUcnlBIHRyeSBibG9jayBtdXN0IGJlIGZvbGxvd2VkIGJ5IGFuICdvbicsICdjYXRjaCcsIG9yICdmaW5hbGx5JyBjbGF1c2UuVHJ5IGFkZGluZyBlaXRoZXIgYSBjYXRjaCBvciBmaW5hbGx5IGNsYXVzZSwgb3IgcmVtb3ZlIHRoZSB0cnkgc3RhdGVtZW50Lk9ubHlUcnltZXNzYWdlT25seVRyeXRlbXBsYXRlT3BlcmF0b3JNaW51c1BhcmFtZXRlck1pc21hdGNoT3BlcmF0b3IgJyNuYW1lJyBzaG91bGQgaGF2ZSB6ZXJvIG9yIG9uZSBwYXJhbWV0ZXIuV2l0aCB6ZXJvIHBhcmFtZXRlcnMsIGl0IGhhcyB0aGUgc3ludGFjdGljIGZvcm0gJy1hJywgZm9ybWFsbHkga25vd24gYXMgJ3VuYXJ5LScuIFdpdGggb25lIHBhcmFtZXRlciwgaXQgaGFzIHRoZSBzeW50YWN0aWMgZm9ybSAnYSAtIGInLCBmb3JtYWxseSBrbm93biBhcyAnLScuY29kZU9wZXJhdG9yTWludXNQYXJhbWV0ZXJNaXNtYXRjaE9wZXJhdG9yTWludXNQYXJhbWV0ZXJNaXNtYXRjaFdST05HX05VTUJFUl9PRl9QQVJBTUVURVJTX0ZPUl9PUEVSQVRPUl9NSU5VU3RlbXBsYXRlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDBPcGVyYXRvciAnI25hbWUnIHNob3VsZG4ndCBoYXZlIGFueSBwYXJhbWV0ZXJzLmNvZGVPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoME9wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gwdGVtcGxhdGVPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMU9wZXJhdG9yICcjbmFtZScgc2hvdWxkIGhhdmUgZXhhY3RseSBvbmUgcGFyYW1ldGVyLmNvZGVPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMU9wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gxV1JPTkdfTlVNQkVSX09GX1BBUkFNRVRFUlNfRk9SX09QRVJBVE9SdGVtcGxhdGVPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMk9wZXJhdG9yICcjbmFtZScgc2hvdWxkIGhhdmUgZXhhY3RseSB0d28gcGFyYW1ldGVycy5jb2RlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDJPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMmNvZGVPcGVyYXRvcldpdGhPcHRpb25hbEZvcm1hbHNBbiBvcGVyYXRvciBjYW4ndCBoYXZlIG9wdGlvbmFsIHBhcmFtZXRlcnMuT3BlcmF0b3JXaXRoT3B0aW9uYWxGb3JtYWxzbWVzc2FnZU9wZXJhdG9yV2l0aE9wdGlvbmFsRm9ybWFsc3RlbXBsYXRlT3ZlcnJpZGRlbk1ldGhvZENhdXNlVGhpcyBpcyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QgKCcjbmFtZScpLmNvZGVPdmVycmlkZGVuTWV0aG9kQ2F1c2VPdmVycmlkZGVuTWV0aG9kQ2F1c2V0ZW1wbGF0ZU92ZXJyaWRlRmV3ZXJOYW1lZEFyZ3VtZW50c1RoZSBtZXRob2QgJyNuYW1lJyBoYXMgZmV3ZXIgbmFtZWQgYXJndW1lbnRzIHRoYW4gdGhvc2Ugb2Ygb3ZlcnJpZGRlbiBtZXRob2QgJyNuYW1lMicuY29kZU92ZXJyaWRlRmV3ZXJOYW1lZEFyZ3VtZW50c092ZXJyaWRlRmV3ZXJOYW1lZEFyZ3VtZW50c0lOVkFMSURfT1ZFUlJJREVfTkFNRUR0ZW1wbGF0ZU92ZXJyaWRlRmV3ZXJQb3NpdGlvbmFsQXJndW1lbnRzVGhlIG1ldGhvZCAnI25hbWUnIGhhcyBmZXdlciBwb3NpdGlvbmFsIGFyZ3VtZW50cyB0aGFuIHRob3NlIG9mIG92ZXJyaWRkZW4gbWV0aG9kICcjbmFtZTInLmNvZGVPdmVycmlkZUZld2VyUG9zaXRpb25hbEFyZ3VtZW50c092ZXJyaWRlRmV3ZXJQb3NpdGlvbmFsQXJndW1lbnRzSU5WQUxJRF9PVkVSUklERV9QT1NJVElPTkFMdGVtcGxhdGVPdmVycmlkZU1pc21hdGNoTmFtZWRQYXJhbWV0ZXJUaGUgbWV0aG9kICcjbmFtZScgZG9lc24ndCBoYXZlIHRoZSBuYW1lZCBwYXJhbWV0ZXIgJyNuYW1lMicgb2Ygb3ZlcnJpZGRlbiBtZXRob2QgJyNuYW1lMycuY29kZU92ZXJyaWRlTWlzbWF0Y2hOYW1lZFBhcmFtZXRlck92ZXJyaWRlTWlzbWF0Y2hOYW1lZFBhcmFtZXRlcnRlbXBsYXRlT3ZlcnJpZGVNb3JlUmVxdWlyZWRBcmd1bWVudHNUaGUgbWV0aG9kICcjbmFtZScgaGFzIG1vcmUgcmVxdWlyZWQgYXJndW1lbnRzIHRoYW4gdGhvc2Ugb2Ygb3ZlcnJpZGRlbiBtZXRob2QgJyNuYW1lMicuY29kZU92ZXJyaWRlTW9yZVJlcXVpcmVkQXJndW1lbnRzT3ZlcnJpZGVNb3JlUmVxdWlyZWRBcmd1bWVudHNJTlZBTElEX09WRVJSSURFX1JFUVVJUkVEdGVtcGxhdGVPdmVycmlkZVR5cGVNaXNtYXRjaFBhcmFtZXRlclRoZSBwYXJhbWV0ZXIgJyNuYW1lJyBvZiB0aGUgbWV0aG9kICcjbmFtZTInIGhhcyB0eXBlICcjdHlwZScsIHdoaWNoIGRvZXMgbm90IG1hdGNoIHRoZSBjb3JyZXNwb25kaW5nIHR5cGUsICcjdHlwZTInLCBpbiB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsICcjbmFtZTMnLkNoYW5nZSB0byBhIHN1cGVydHlwZSBvZiAnI3R5cGUyJywgb3IsIGZvciBhIGNvdmFyaWFudCBwYXJhbWV0ZXIsIGEgc3VidHlwZS5jb2RlT3ZlcnJpZGVUeXBlTWlzbWF0Y2hQYXJhbWV0ZXJPdmVycmlkZVR5cGVNaXNtYXRjaFBhcmFtZXRlcnRlbXBsYXRlT3ZlcnJpZGVUeXBlTWlzbWF0Y2hSZXR1cm5UeXBlVGhlIHJldHVybiB0eXBlIG9mIHRoZSBtZXRob2QgJyNuYW1lJyBpcyAnI3R5cGUnLCB3aGljaCBkb2VzIG5vdCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUsICcjdHlwZTInLCBvZiB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsICcjbmFtZTInLkNoYW5nZSB0byBhIHN1YnR5cGUgb2YgJyN0eXBlMicuY29kZU92ZXJyaWRlVHlwZU1pc21hdGNoUmV0dXJuVHlwZU92ZXJyaWRlVHlwZU1pc21hdGNoUmV0dXJuVHlwZXRlbXBsYXRlT3ZlcnJpZGVUeXBlVmFyaWFibGVzTWlzbWF0Y2hEZWNsYXJlZCB0eXBlIHZhcmlhYmxlcyBvZiAnI25hbWUnIGRvZXNuJ3QgbWF0Y2ggdGhvc2Ugb24gb3ZlcnJpZGRlbiBtZXRob2QgJyNuYW1lMicuY29kZU92ZXJyaWRlVHlwZVZhcmlhYmxlc01pc21hdGNoT3ZlcnJpZGVUeXBlVmFyaWFibGVzTWlzbWF0Y2hJTlZBTElEX01FVEhPRF9PVkVSUklERV9UWVBFX1BBUkFNRVRFUlN0ZW1wbGF0ZVBhY2thZ2VOb3RGb3VuZENvdWxkIG5vdCByZXNvbHZlIHRoZSBwYWNrYWdlICcjbmFtZScgaW4gJyN1cmknLmNvZGVQYWNrYWdlTm90Rm91bmRQYWNrYWdlTm90Rm91bmRjb2RlUGFja2FnZXNGaWxlRm9ybWF0UGFja2FnZXNGaWxlRm9ybWF0Y29kZVBhcnRFeHBvcnRDYW4ndCBleHBvcnQgdGhpcyBmaWxlIGJlY2F1c2UgaXQgY29udGFpbnMgYSAncGFydCBvZicgZGVjbGFyYXRpb24uUGFydEV4cG9ydEVYUE9SVF9PRl9OT05fTElCUkFSWW1lc3NhZ2VQYXJ0RXhwb3J0Y29kZVBhcnRFeHBvcnRDb250ZXh0VGhpcyBpcyB0aGUgZmlsZSB0aGF0IGNhbid0IGJlIGV4cG9ydGVkLlBhcnRFeHBvcnRDb250ZXh0bWVzc2FnZVBhcnRFeHBvcnRDb250ZXh0Y29kZVBhcnRJblBhcnRBIGZpbGUgdGhhdCdzIGEgcGFydCBvZiBhIGxpYnJhcnkgY2FuJ3QgaGF2ZSBwYXJ0cyBpdHNlbGYuVHJ5IG1vdmluZyB0aGUgJ3BhcnQnIGRlY2xhcmF0aW9uIHRvIHRoZSBjb250YWluaW5nIGxpYnJhcnkuUGFydEluUGFydG1lc3NhZ2VQYXJ0SW5QYXJ0Y29kZVBhcnRJblBhcnRMaWJyYXJ5Q29udGV4dFRoaXMgaXMgdGhlIGNvbnRhaW5pbmcgbGlicmFyeS5QYXJ0SW5QYXJ0TGlicmFyeUNvbnRleHRtZXNzYWdlUGFydEluUGFydExpYnJhcnlDb250ZXh0dGVtcGxhdGVQYXJ0T2ZJbkxpYnJhcnlDYW4ndCBpbXBvcnQgJyN1cmknLCBiZWNhdXNlIGl0IGhhcyBhICdwYXJ0IG9mJyBkZWNsYXJhdGlvbi5UcnkgcmVtb3ZpbmcgdGhlICdwYXJ0IG9mJyBkZWNsYXJhdGlvbiwgb3IgdXNpbmcgJyN1cmknIGFzIGEgcGFydC5jb2RlUGFydE9mSW5MaWJyYXJ5UGFydE9mSW5MaWJyYXJ5SU1QT1JUX09GX05PTl9MSUJSQVJZdGVtcGxhdGVQYXJ0T2ZMaWJyYXJ5TmFtZU1pc21hdGNoVXNpbmcgJyN1cmknIGFzIHBhcnQgb2YgJyNuYW1lJyBidXQgaXRzICdwYXJ0IG9mJyBkZWNsYXJhdGlvbiBzYXlzICcjbmFtZTInLmNvZGVQYXJ0T2ZMaWJyYXJ5TmFtZU1pc21hdGNoUGFydE9mTGlicmFyeU5hbWVNaXNtYXRjaFBBUlRfT0ZfRElGRkVSRU5UX0xJQlJBUlljb2RlUGFydE9mU2VsZkEgZmlsZSBjYW4ndCBiZSBhIHBhcnQgb2YgaXRzZWxmLlBhcnRPZlNlbGZtZXNzYWdlUGFydE9mU2VsZmNvZGVQYXJ0T2ZUd2ljZU9ubHkgb25lIHBhcnQtb2YgZGlyZWN0aXZlIG1heSBiZSBkZWNsYXJlZCBpbiBhIGZpbGUuVHJ5IHJlbW92aW5nIGFsbCBidXQgb25lIG9mIHRoZSBwYXJ0LW9mIGRpcmVjdGl2ZXMuUGFydE9mVHdpY2VtZXNzYWdlUGFydE9mVHdpY2Vjb2RlUGFydE9mVHdvTGlicmFyaWVzQSBmaWxlIGNhbid0IGJlIHBhcnQgb2YgbW9yZSB0aGFuIG9uZSBsaWJyYXJ5LlRyeSBtb3ZpbmcgdGhlIHNoYXJlZCBkZWNsYXJhdGlvbnMgaW50byB0aGUgbGlicmFyaWVzLCBvciBpbnRvIGEgbmV3IGxpYnJhcnkuUGFydE9mVHdvTGlicmFyaWVzbWVzc2FnZVBhcnRPZlR3b0xpYnJhcmllc2NvZGVQYXJ0T2ZUd29MaWJyYXJpZXNDb250ZXh0VXNlZCBhcyBhIHBhcnQgaW4gdGhpcyBsaWJyYXJ5LlBhcnRPZlR3b0xpYnJhcmllc0NvbnRleHRtZXNzYWdlUGFydE9mVHdvTGlicmFyaWVzQ29udGV4dHRlbXBsYXRlUGFydE9mVXJpTWlzbWF0Y2hVc2luZyAnI3VyaScgYXMgcGFydCBvZiAnI3VyaTInIGJ1dCBpdHMgJ3BhcnQgb2YnIGRlY2xhcmF0aW9uIHNheXMgJyN1cmkzJy5jb2RlUGFydE9mVXJpTWlzbWF0Y2hQYXJ0T2ZVcmlNaXNtYXRjaHRlbXBsYXRlUGFydE9mVXNlVXJpVXNpbmcgJyN1cmknIGFzIHBhcnQgb2YgJyN1cmkyJyBidXQgaXRzICdwYXJ0IG9mJyBkZWNsYXJhdGlvbiBzYXlzICcjbmFtZScuVHJ5IGNoYW5naW5nIHRoZSAncGFydCBvZicgZGVjbGFyYXRpb24gdG8gdXNlIGEgcmVsYXRpdmUgZmlsZSBuYW1lLmNvZGVQYXJ0T2ZVc2VVcmlQYXJ0T2ZVc2VVcmlQQVJUX09GX1VOTkFNRURfTElCUkFSWWNvZGVQYXJ0T3JwaGFuVGhpcyBwYXJ0IGRvZXNuJ3QgaGF2ZSBhIGNvbnRhaW5pbmcgbGlicmFyeS5UcnkgcmVtb3ZpbmcgdGhlICdwYXJ0IG9mJyBkZWNsYXJhdGlvbi5QYXJ0T3JwaGFubWVzc2FnZVBhcnRPcnBoYW50ZW1wbGF0ZVBhcnRUd2ljZUNhbid0IHVzZSAnI3VyaScgYXMgYSBwYXJ0IG1vcmUgdGhhbiBvbmNlLmNvZGVQYXJ0VHdpY2VQYXJ0VHdpY2VEVVBMSUNBVEVfUEFSVGNvZGVQYXRjaENsYXNzT3JpZ2luVGhpcyBpcyB0aGUgb3JpZ2luIGNsYXNzLlBhdGNoQ2xhc3NPcmlnaW5tZXNzYWdlUGF0Y2hDbGFzc09yaWdpbmNvZGVQYXRjaENsYXNzVHlwZVZhcmlhYmxlc01pc21hdGNoQSBwYXRjaCBjbGFzcyBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIHR5cGUgdmFyaWFibGVzIGFzIGl0cyBvcmlnaW4gY2xhc3MuUGF0Y2hDbGFzc1R5cGVWYXJpYWJsZXNNaXNtYXRjaG1lc3NhZ2VQYXRjaENsYXNzVHlwZVZhcmlhYmxlc01pc21hdGNoY29kZVBhdGNoRGVjbGFyYXRpb25NaXNtYXRjaFRoaXMgcGF0Y2ggZG9lc24ndCBtYXRjaCBvcmlnaW4gZGVjbGFyYXRpb24uUGF0Y2hEZWNsYXJhdGlvbk1pc21hdGNobWVzc2FnZVBhdGNoRGVjbGFyYXRpb25NaXNtYXRjaGNvZGVQYXRjaERlY2xhcmF0aW9uT3JpZ2luVGhpcyBpcyB0aGUgb3JpZ2luIGRlY2xhcmF0aW9uLlBhdGNoRGVjbGFyYXRpb25PcmlnaW5tZXNzYWdlUGF0Y2hEZWNsYXJhdGlvbk9yaWdpbnRlbXBsYXRlUGF0Y2hJbmplY3Rpb25GYWlsZWRDYW4ndCBpbmplY3QgJyNuYW1lJyBpbnRvICcjdXJpJy5UcnkgYWRkaW5nICdAcGF0Y2gnLmNvZGVQYXRjaEluamVjdGlvbkZhaWxlZFBhdGNoSW5qZWN0aW9uRmFpbGVkY29kZVBhdGNoTm9uRXh0ZXJuYWxDYW4ndCBhcHBseSB0aGlzIHBhdGNoIGFzIGl0cyBvcmlnaW4gZGVjbGFyYXRpb24gaXNuJ3QgZXh0ZXJuYWwuVHJ5IGFkZGluZyAnZXh0ZXJuYWwnIHRvIHRoZSBvcmlnaW4gZGVjbGFyYXRpb24uUGF0Y2hOb25FeHRlcm5hbG1lc3NhZ2VQYXRjaE5vbkV4dGVybmFsY29kZVBsYXRmb3JtUHJpdmF0ZUxpYnJhcnlBY2Nlc3NDYW4ndCBhY2Nlc3MgcGxhdGZvcm0gcHJpdmF0ZSBsaWJyYXJ5LlBsYXRmb3JtUHJpdmF0ZUxpYnJhcnlBY2Nlc3NJTVBPUlRfSU5URVJOQUxfTElCUkFSWW1lc3NhZ2VQbGF0Zm9ybVByaXZhdGVMaWJyYXJ5QWNjZXNzY29kZVBvc2l0aW9uYWxBZnRlck5hbWVkQXJndW1lbnRQbGFjZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBiZWZvcmUgbmFtZWQgYXJndW1lbnRzLlRyeSBtb3ZpbmcgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnQgYmVmb3JlIHRoZSBuYW1lZCBhcmd1bWVudHMsIG9yIGFkZCBhIG5hbWUgdG8gdGhlIGFyZ3VtZW50LlBvc2l0aW9uYWxBZnRlck5hbWVkQXJndW1lbnRQT1NJVElPTkFMX0FGVEVSX05BTUVEX0FSR1VNRU5UbWVzc2FnZVBvc2l0aW9uYWxBZnRlck5hbWVkQXJndW1lbnRjb2RlUG9zaXRpb25hbFBhcmFtZXRlcldpdGhFcXVhbHNQb3NpdGlvbmFsIG9wdGlvbmFsIHBhcmFtZXRlcnMgY2FuJ3QgdXNlICc6JyB0byBzcGVjaWZ5IGEgZGVmYXVsdCB2YWx1ZS5UcnkgcmVwbGFjaW5nICc6JyB3aXRoICc9Jy5Qb3NpdGlvbmFsUGFyYW1ldGVyV2l0aEVxdWFsc1dST05HX1NFUEFSQVRPUl9GT1JfUE9TSVRJT05BTF9QQVJBTUVURVJtZXNzYWdlUG9zaXRpb25hbFBhcmFtZXRlcldpdGhFcXVhbHNjb2RlUHJlZml4QWZ0ZXJDb21iaW5hdG9yVGhlIHByZWZpeCAoJ2FzJyBjbGF1c2UpIHNob3VsZCBjb21lIGJlZm9yZSBhbnkgc2hvdy9oaWRlIGNvbWJpbmF0b3JzLlRyeSBtb3ZpbmcgdGhlIHByZWZpeCBiZWZvcmUgdGhlIGNvbWJpbmF0b3JzLlByZWZpeEFmdGVyQ29tYmluYXRvcm1lc3NhZ2VQcmVmaXhBZnRlckNvbWJpbmF0b3Jjb2RlUHJpdmF0ZU5hbWVkUGFyYW1ldGVyQW4gb3B0aW9uYWwgbmFtZWQgcGFyYW1ldGVyIGNhbid0IHN0YXJ0IHdpdGggJ18nLlByaXZhdGVOYW1lZFBhcmFtZXRlclBSSVZBVEVfT1BUSU9OQUxfUEFSQU1FVEVSbWVzc2FnZVByaXZhdGVOYW1lZFBhcmFtZXRlcmNvZGVSZWRpcmVjdGluZ0NvbnN0cnVjdG9yV2l0aEJvZHlSZWRpcmVjdGluZyBjb25zdHJ1Y3RvcnMgY2FuJ3QgaGF2ZSBhIGJvZHkuVHJ5IHJlbW92aW5nIHRoZSBib2R5LCBvciBub3QgbWFraW5nIHRoaXMgYSByZWRpcmVjdGluZyBjb25zdHJ1Y3Rvci5SZWRpcmVjdGluZ0NvbnN0cnVjdG9yV2l0aEJvZHltZXNzYWdlUmVkaXJlY3RpbmdDb25zdHJ1Y3RvcldpdGhCb2R5dGVtcGxhdGVSZWRpcmVjdGluZ0ZhY3RvcnlJbmNvbXBhdGlibGVUeXBlQXJndW1lbnRUaGUgdHlwZSAnI3R5cGUnIGRvZXNuJ3QgZXh0ZW5kICcjdHlwZTInLlRyeSB1c2luZyBhIGRpZmZlcmVudCB0eXBlIGFzIGFyZ3VtZW50LmNvZGVSZWRpcmVjdGluZ0ZhY3RvcnlJbmNvbXBhdGlibGVUeXBlQXJndW1lbnRSZWRpcmVjdGluZ0ZhY3RvcnlJbmNvbXBhdGlibGVUeXBlQXJndW1lbnRjb2RlUmVkaXJlY3Rpb25Jbk5vbkZhY3RvcnlPbmx5IGZhY3RvcnkgY29uc3RydWN0b3IgY2FuIHNwZWNpZnkgJz0nIHJlZGlyZWN0aW9uLlRyeSBtYWtpbmcgdGhpcyBhIGZhY3RvcnkgY29uc3RydWN0b3IsIG9yIHJlbW92ZSB0aGUgcmVkaXJlY3Rpb24uUmVkaXJlY3Rpb25Jbk5vbkZhY3RvcnltZXNzYWdlUmVkaXJlY3Rpb25Jbk5vbkZhY3Rvcnl0ZW1wbGF0ZVJlZGlyZWN0aW9uVGFyZ2V0Tm90Rm91bmRSZWRpcmVjdGlvbiBjb25zdHJ1Y3RvciB0YXJnZXQgbm90IGZvdW5kOiAnI25hbWUnY29kZVJlZGlyZWN0aW9uVGFyZ2V0Tm90Rm91bmRSZWRpcmVjdGlvblRhcmdldE5vdEZvdW5kUkVESVJFQ1RfVE9fTUlTU0lOR19DT05TVFJVQ1RPUmNvZGVSZXF1aXJlZFBhcmFtZXRlcldpdGhEZWZhdWx0Tm9uLW9wdGlvbmFsIHBhcmFtZXRlcnMgY2FuJ3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUuVHJ5IHJlbW92aW5nIHRoZSBkZWZhdWx0IHZhbHVlIG9yIG1ha2luZyB0aGUgcGFyYW1ldGVyIG9wdGlvbmFsLlJlcXVpcmVkUGFyYW1ldGVyV2l0aERlZmF1bHROQU1FRF9QQVJBTUVURVJfT1VUU0lERV9HUk9VUG1lc3NhZ2VSZXF1aXJlZFBhcmFtZXRlcldpdGhEZWZhdWx0Y29kZVJldGhyb3dOb3RDYXRjaCdyZXRocm93JyBjYW4gb25seSBiZSB1c2VkIGluIGNhdGNoIGNsYXVzZXMuUmV0aHJvd05vdENhdGNoUkVUSFJPV19PVVRTSURFX0NBVENIbWVzc2FnZVJldGhyb3dOb3RDYXRjaGNvZGVSZXR1cm5Gcm9tVm9pZEZ1bmN0aW9uQ2FuJ3QgcmV0dXJuIGEgdmFsdWUgZnJvbSBhIHZvaWQgZnVuY3Rpb24uUmV0dXJuRnJvbVZvaWRGdW5jdGlvblJFVFVSTl9PRl9JTlZBTElEX1RZUEVtZXNzYWdlUmV0dXJuRnJvbVZvaWRGdW5jdGlvbmNvZGVSZXR1cm5UeXBlRnVuY3Rpb25FeHByZXNzaW9uQSBmdW5jdGlvbiBleHByZXNzaW9uIGNhbid0IGhhdmUgYSByZXR1cm4gdHlwZS5SZXR1cm5UeXBlRnVuY3Rpb25FeHByZXNzaW9ubWVzc2FnZVJldHVyblR5cGVGdW5jdGlvbkV4cHJlc3Npb25jb2RlUmV0dXJuV2l0aG91dEV4cHJlc3Npb25NdXN0IGV4cGxpY2l0bHkgcmV0dXJuIGEgdmFsdWUgZnJvbSBhIG5vbi12b2lkIGZ1bmN0aW9uLlJldHVybldpdGhvdXRFeHByZXNzaW9uUkVUVVJOX1dJVEhPVVRfVkFMVUVtZXNzYWdlUmV0dXJuV2l0aG91dEV4cHJlc3Npb25jb2RlU2RrUm9vdE5vdEZvdW5kU2RrUm9vdE5vdEZvdW5kY29kZVNka1NwZWNpZmljYXRpb25Ob3RGb3VuZFNka1NwZWNpZmljYXRpb25Ob3RGb3VuZGNvZGVTZGtTdW1tYXJ5Tm90Rm91bmRTZGtTdW1tYXJ5Tm90Rm91bmRjb2RlU2V0TGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzQSBzZXQgbGl0ZXJhbCByZXF1aXJlcyBleGFjdGx5IG9uZSB0eXBlIGFyZ3VtZW50LlNldExpdGVyYWxUb29NYW55VHlwZUFyZ3VtZW50c21lc3NhZ2VTZXRMaXRlcmFsVG9vTWFueVR5cGVBcmd1bWVudHNjb2RlU2V0T3JNYXBMaXRlcmFsVG9vTWFueVR5cGVBcmd1bWVudHNBIHNldCBvciBtYXAgbGl0ZXJhbCByZXF1aXJlcyBleGFjdGx5IG9uZSBvciB0d28gdHlwZSBhcmd1bWVudHMsIHJlc3BlY3RpdmVseS5TZXRPck1hcExpdGVyYWxUb29NYW55VHlwZUFyZ3VtZW50c21lc3NhZ2VTZXRPck1hcExpdGVyYWxUb29NYW55VHlwZUFyZ3VtZW50c3RlbXBsYXRlU2V0dGVyTm90Rm91bmRTZXR0ZXIgbm90IGZvdW5kOiAnI25hbWUnLmNvZGVTZXR0ZXJOb3RGb3VuZFNldHRlck5vdEZvdW5kVU5ERUZJTkVEX1NFVFRFUmNvZGVTZXR0ZXJOb3RTeW5jU2V0dGVycyBjYW4ndCB1c2UgJ2FzeW5jJywgJ2FzeW5jKicsIG9yICdzeW5jKicuU2V0dGVyTm90U3luY0lOVkFMSURfTU9ESUZJRVJfT05fU0VUVEVSbWVzc2FnZVNldHRlck5vdFN5bmNjb2RlU2V0dGVyV2l0aFdyb25nTnVtYmVyT2ZGb3JtYWxzQSBzZXR0ZXIgc2hvdWxkIGhhdmUgZXhhY3RseSBvbmUgZm9ybWFsIHBhcmFtZXRlci5TZXR0ZXJXaXRoV3JvbmdOdW1iZXJPZkZvcm1hbHNXUk9OR19OVU1CRVJfT0ZfUEFSQU1FVEVSU19GT1JfU0VUVEVSbWVzc2FnZVNldHRlcldpdGhXcm9uZ051bWJlck9mRm9ybWFsc3RlbXBsYXRlU291cmNlQm9keVN1bW1hcnlCdWlsdCBib2RpZXMgZm9yICNjb3VudCBjb21waWxhdGlvbiB1bml0cyAoI2NvdW50MiBieXRlcykgaW4gI251bTElLjNtcywgdGhhdCBpcywKI251bTIlMTIuMyBieXRlcy9tcywgYW5kCiNudW0zJTEyLjMgbXMvY29tcGlsYXRpb24gdW5pdC5jb2RlU291cmNlQm9keVN1bW1hcnlTb3VyY2VCb2R5U3VtbWFyeXRlbXBsYXRlU291cmNlT3V0bGluZVN1bW1hcnlCdWlsdCBvdXRsaW5lcyBmb3IgI2NvdW50IGNvbXBpbGF0aW9uIHVuaXRzICgjY291bnQyIGJ5dGVzKSBpbiAjbnVtMSUuM21zLCB0aGF0IGlzLAojbnVtMiUxMi4zIGJ5dGVzL21zLCBhbmQKI251bTMlMTIuMyBtcy9jb21waWxhdGlvbiB1bml0LmNvZGVTb3VyY2VPdXRsaW5lU3VtbWFyeVNvdXJjZU91dGxpbmVTdW1tYXJ5Y29kZVNwcmVhZEVsZW1lbnRJdGVyYWJsZSBzcHJlYWQuU3ByZWFkRWxlbWVudG1lc3NhZ2VTcHJlYWRFbGVtZW50dGVtcGxhdGVTcHJlYWRFbGVtZW50VHlwZU1pc21hdGNoQ2FuJ3QgYXNzaWduIHNwcmVhZCBlbGVtZW50cyBvZiB0eXBlICcjdHlwZScgdG8gY29sbGVjdGlvbiBlbGVtZW50cyBvZiB0eXBlICcjdHlwZTInLmNvZGVTcHJlYWRFbGVtZW50VHlwZU1pc21hdGNoU3ByZWFkRWxlbWVudFR5cGVNaXNtYXRjaExJU1RfRUxFTUVOVF9UWVBFX05PVF9BU1NJR05BQkxFY29kZVNwcmVhZE1hcEVsZW1lbnRNYXAgc3ByZWFkLlNwcmVhZE1hcEVsZW1lbnRtZXNzYWdlU3ByZWFkTWFwRWxlbWVudHRlbXBsYXRlU3ByZWFkTWFwRW50cnlFbGVtZW50S2V5VHlwZU1pc21hdGNoQ2FuJ3QgYXNzaWduIHNwcmVhZCBlbnRyeSBrZXlzIG9mIHR5cGUgJyN0eXBlJyB0byBtYXAgZW50cnkga2V5cyBvZiB0eXBlICcjdHlwZTInLmNvZGVTcHJlYWRNYXBFbnRyeUVsZW1lbnRLZXlUeXBlTWlzbWF0Y2hTcHJlYWRNYXBFbnRyeUVsZW1lbnRLZXlUeXBlTWlzbWF0Y2hNQVBfS0VZX1RZUEVfTk9UX0FTU0lHTkFCTEV0ZW1wbGF0ZVNwcmVhZE1hcEVudHJ5RWxlbWVudFZhbHVlVHlwZU1pc21hdGNoQ2FuJ3QgYXNzaWduIHNwcmVhZCBlbnRyeSB2YWx1ZXMgb2YgdHlwZSAnI3R5cGUnIHRvIG1hcCBlbnRyeSB2YWx1ZXMgb2YgdHlwZSAnI3R5cGUyJy5jb2RlU3ByZWFkTWFwRW50cnlFbGVtZW50VmFsdWVUeXBlTWlzbWF0Y2hTcHJlYWRNYXBFbnRyeUVsZW1lbnRWYWx1ZVR5cGVNaXNtYXRjaE1BUF9WQUxVRV9UWVBFX05PVF9BU1NJR05BQkxFdGVtcGxhdGVTcHJlYWRNYXBFbnRyeVR5cGVNaXNtYXRjaFVuZXhwZWN0ZWQgdHlwZSAnI3R5cGUnIG9mIGEgbWFwIHNwcmVhZCBlbnRyeS4gIEV4cGVjdGVkICdkeW5hbWljJyBvciBhIE1hcC5jb2RlU3ByZWFkTWFwRW50cnlUeXBlTWlzbWF0Y2hTcHJlYWRNYXBFbnRyeVR5cGVNaXNtYXRjaHRlbXBsYXRlU3ByZWFkVHlwZU1pc21hdGNoVW5leHBlY3RlZCB0eXBlICcjdHlwZScgb2YgYSBzcHJlYWQuICBFeHBlY3RlZCAnZHluYW1pYycgb3IgYW4gSXRlcmFibGUuY29kZVNwcmVhZFR5cGVNaXNtYXRjaFNwcmVhZFR5cGVNaXNtYXRjaGNvZGVTdGFja092ZXJmbG93VGhlIGZpbGUgaGFzIHRvbyBtYW55IG5lc3RlZCBleHByZXNzaW9ucyBvciBzdGF0ZW1lbnRzLlRyeSBzaW1wbGlmeWluZyB0aGUgY29kZS5TdGFja092ZXJmbG93bWVzc2FnZVN0YWNrT3ZlcmZsb3djb2RlU3RhdGljQW5kSW5zdGFuY2VDb25mbGljdFRoaXMgc3RhdGljIG1lbWJlciBjb25mbGljdHMgd2l0aCBhbiBpbnN0YW5jZSBtZW1iZXIuU3RhdGljQW5kSW5zdGFuY2VDb25mbGljdENPTkZMSUNUSU5HX1NUQVRJQ19BTkRfSU5TVEFOQ0VtZXNzYWdlU3RhdGljQW5kSW5zdGFuY2VDb25mbGljdGNvZGVTdGF0aWNBbmRJbnN0YW5jZUNvbmZsaWN0Q2F1c2VUaGlzIGlzIHRoZSBpbnN0YW5jZSBtZW1iZXIuU3RhdGljQW5kSW5zdGFuY2VDb25mbGljdENhdXNlbWVzc2FnZVN0YXRpY0FuZEluc3RhbmNlQ29uZmxpY3RDYXVzZWNvZGVTdGF0aWNDb25zdHJ1Y3RvckNvbnN0cnVjdG9ycyBjYW4ndCBiZSBzdGF0aWMuVHJ5IHJlbW92aW5nIHRoZSBrZXl3b3JkICdzdGF0aWMnLlN0YXRpY0NvbnN0cnVjdG9ybWVzc2FnZVN0YXRpY0NvbnN0cnVjdG9yY29kZVN0YXRpY09wZXJhdG9yT3BlcmF0b3JzIGNhbid0IGJlIHN0YXRpYy5TdGF0aWNPcGVyYXRvcm1lc3NhZ2VTdGF0aWNPcGVyYXRvcmNvZGVTdXBlckFzRXhwcmVzc2lvbkNhbid0IHVzZSAnc3VwZXInIGFzIGFuIGV4cHJlc3Npb24uVG8gZGVsZWdhdGUgYSBjb25zdHJ1Y3RvciB0byBhIHN1cGVyIGNvbnN0cnVjdG9yLCBwdXQgdGhlIHN1cGVyIGNhbGwgYXMgYW4gaW5pdGlhbGl6ZXIuU3VwZXJBc0V4cHJlc3Npb25TVVBFUl9BU19FWFBSRVNTSU9ObWVzc2FnZVN1cGVyQXNFeHByZXNzaW9uY29kZVN1cGVyQXNJZGVudGlmaWVyRXhwZWN0ZWQgaWRlbnRpZmllciwgYnV0IGdvdCAnc3VwZXInLlN1cGVyQXNJZGVudGlmaWVybWVzc2FnZVN1cGVyQXNJZGVudGlmaWVyY29kZVN1cGVySW5pdGlhbGl6ZXJOb3RMYXN0Q2FuJ3QgaGF2ZSBpbml0aWFsaXplcnMgYWZ0ZXIgJ3N1cGVyJy5TdXBlckluaXRpYWxpemVyTm90TGFzdElOVkFMSURfU1VQRVJfSU5WT0NBVElPTm1lc3NhZ2VTdXBlckluaXRpYWxpemVyTm90TGFzdGNvZGVTdXBlck51bGxBd2FyZVRoZSBvcGVyYXRvciAnPy4nIGNhbm5vdCBiZSB1c2VkIHdpdGggJ3N1cGVyJyBiZWNhdXNlICdzdXBlcicgY2Fubm90IGJlIG51bGwuVHJ5IHJlcGxhY2luZyAnPy4nIHdpdGggJy4nU3VwZXJOdWxsQXdhcmVtZXNzYWdlU3VwZXJOdWxsQXdhcmV0ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb0NvbnN0cnVjdG9yU3VwZXJjbGFzcyBoYXMgbm8gY29uc3RydWN0b3IgbmFtZWQgJyNuYW1lJy5jb2RlU3VwZXJjbGFzc0hhc05vQ29uc3RydWN0b3JTdXBlcmNsYXNzSGFzTm9Db25zdHJ1Y3RvclVOREVGSU5FRF9DT05TVFJVQ1RPUl9JTl9JTklUSUFMSVpFUlVOREVGSU5FRF9DT05TVFJVQ1RPUl9JTl9JTklUSUFMSVpFUl9ERUZBVUxUdGVtcGxhdGVTdXBlcmNsYXNzSGFzTm9EZWZhdWx0Q29uc3RydWN0b3JUaGUgc3VwZXJjbGFzcywgJyNuYW1lJywgaGFzIG5vIHVubmFtZWQgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBubyBhcmd1bWVudHMuY29kZVN1cGVyY2xhc3NIYXNOb0RlZmF1bHRDb25zdHJ1Y3RvclN1cGVyY2xhc3NIYXNOb0RlZmF1bHRDb25zdHJ1Y3Rvck5PX0RFRkFVTFRfU1VQRVJfQ09OU1RSVUNUT1JfSU1QTElDSVR0ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb0dldHRlclN1cGVyY2xhc3MgaGFzIG5vIGdldHRlciBuYW1lZCAnI25hbWUnLmNvZGVTdXBlcmNsYXNzSGFzTm9HZXR0ZXJTdXBlcmNsYXNzSGFzTm9HZXR0ZXJVTkRFRklORURfU1VQRVJfR0VUVEVSdGVtcGxhdGVTdXBlcmNsYXNzSGFzTm9NZXRob2RTdXBlcmNsYXNzIGhhcyBubyBtZXRob2QgbmFtZWQgJyNuYW1lJy5jb2RlU3VwZXJjbGFzc0hhc05vTWV0aG9kU3VwZXJjbGFzc0hhc05vTWV0aG9kVU5ERUZJTkVEX1NVUEVSX01FVEhPRHRlbXBsYXRlU3VwZXJjbGFzc0hhc05vU2V0dGVyU3VwZXJjbGFzcyBoYXMgbm8gc2V0dGVyIG5hbWVkICcjbmFtZScuY29kZVN1cGVyY2xhc3NIYXNOb1NldHRlclN1cGVyY2xhc3NIYXNOb1NldHRlclVOREVGSU5FRF9TVVBFUl9TRVRURVJ0ZW1wbGF0ZVN1cGVyY2xhc3NNZXRob2RBcmd1bWVudE1pc21hdGNoU3VwZXJjbGFzcyBkb2Vzbid0IGhhdmUgYSBtZXRob2QgbmFtZWQgJyNuYW1lJyB3aXRoIG1hdGNoaW5nIGFyZ3VtZW50cy5jb2RlU3VwZXJjbGFzc01ldGhvZEFyZ3VtZW50TWlzbWF0Y2hTdXBlcmNsYXNzTWV0aG9kQXJndW1lbnRNaXNtYXRjaGNvZGVTdXBlcnR5cGVJc0Z1bmN0aW9uQ2FuJ3QgdXNlIGEgZnVuY3Rpb24gdHlwZSBhcyBzdXBlcnR5cGUuU3VwZXJ0eXBlSXNGdW5jdGlvbm1lc3NhZ2VTdXBlcnR5cGVJc0Z1bmN0aW9udGVtcGxhdGVTdXBlcnR5cGVJc0lsbGVnYWxUaGUgdHlwZSAnI25hbWUnIGNhbid0IGJlIHVzZWQgYXMgc3VwZXJ0eXBlLmNvZGVTdXBlcnR5cGVJc0lsbGVnYWxTdXBlcnR5cGVJc0lsbGVnYWxFWFRFTkRTX05PTl9DTEFTU3RlbXBsYXRlU3VwZXJ0eXBlSXNUeXBlVmFyaWFibGVUaGUgdHlwZSB2YXJpYWJsZSAnI25hbWUnIGNhbid0IGJlIHVzZWQgYXMgc3VwZXJ0eXBlLmNvZGVTdXBlcnR5cGVJc1R5cGVWYXJpYWJsZVN1cGVydHlwZUlzVHlwZVZhcmlhYmxlY29kZVN3aXRjaENhc2VGYWxsVGhyb3VnaFN3aXRjaCBjYXNlIG1heSBmYWxsIHRocm91Z2ggdG8gdGhlIG5leHQgY2FzZS5Td2l0Y2hDYXNlRmFsbFRocm91Z2hDQVNFX0JMT0NLX05PVF9URVJNSU5BVEVEbWVzc2FnZVN3aXRjaENhc2VGYWxsVGhyb3VnaHRlbXBsYXRlU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGVUeXBlICcjdHlwZScgb2YgdGhlIHN3aXRjaCBleHByZXNzaW9uIGlzbid0IGFzc2lnbmFibGUgdG8gdGhlIHR5cGUgJyN0eXBlMicgb2YgdGhpcyBjYXNlIGV4cHJlc3Npb24uY29kZVN3aXRjaEV4cHJlc3Npb25Ob3RBc3NpZ25hYmxlU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGVTV0lUQ0hfRVhQUkVTU0lPTl9OT1RfQVNTSUdOQUJMRWNvZGVTd2l0Y2hFeHByZXNzaW9uTm90QXNzaWduYWJsZUNhdXNlVGhlIHN3aXRjaCBleHByZXNzaW9uIGlzIGhlcmUuU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGVDYXVzZW1lc3NhZ2VTd2l0Y2hFeHByZXNzaW9uTm90QXNzaWduYWJsZUNhdXNlY29kZVN3aXRjaEhhc0Nhc2VBZnRlckRlZmF1bHRUaGUgZGVmYXVsdCBjYXNlIHNob3VsZCBiZSB0aGUgbGFzdCBjYXNlIGluIGEgc3dpdGNoIHN0YXRlbWVudC5UcnkgbW92aW5nIHRoZSBkZWZhdWx0IGNhc2UgYWZ0ZXIgdGhlIG90aGVyIGNhc2UgY2xhdXNlcy5Td2l0Y2hIYXNDYXNlQWZ0ZXJEZWZhdWx0bWVzc2FnZVN3aXRjaEhhc0Nhc2VBZnRlckRlZmF1bHRjb2RlU3dpdGNoSGFzTXVsdGlwbGVEZWZhdWx0c1RoZSAnZGVmYXVsdCcgY2FzZSBjYW4gb25seSBiZSBkZWNsYXJlZCBvbmNlLlRyeSByZW1vdmluZyBhbGwgYnV0IG9uZSBkZWZhdWx0IGNhc2UuU3dpdGNoSGFzTXVsdGlwbGVEZWZhdWx0c21lc3NhZ2VTd2l0Y2hIYXNNdWx0aXBsZURlZmF1bHRzY29kZVN5bnRoZXRpY1Rva2VuVGhpcyBjb3VsZG4ndCBiZSBwYXJzZWQuU3ludGhldGljVG9rZW5tZXNzYWdlU3ludGhldGljVG9rZW50ZW1wbGF0ZVRoaXNBY2Nlc3NJbkZpZWxkSW5pdGlhbGl6ZXJDYW4ndCBhY2Nlc3MgJ3RoaXMnIGluIGEgZmllbGQgaW5pdGlhbGl6ZXIgdG8gcmVhZCAnI25hbWUnLmNvZGVUaGlzQWNjZXNzSW5GaWVsZEluaXRpYWxpemVyVGhpc0FjY2Vzc0luRmllbGRJbml0aWFsaXplclRISVNfQUNDRVNTX0ZST01fRklFTERfSU5JVElBTElaRVJjb2RlVGhpc0FzSWRlbnRpZmllckV4cGVjdGVkIGlkZW50aWZpZXIsIGJ1dCBnb3QgJ3RoaXMnLlRoaXNBc0lkZW50aWZpZXJJTlZBTElEX1JFRkVSRU5DRV9UT19USElTbWVzc2FnZVRoaXNBc0lkZW50aWZpZXJjb2RlVGhpc0luaXRpYWxpemVyTm90QWxvbmVDYW4ndCBoYXZlIG90aGVyIGluaXRpYWxpemVycyB0b2dldGhlciB3aXRoICd0aGlzJy5UaGlzSW5pdGlhbGl6ZXJOb3RBbG9uZUZJRUxEX0lOSVRJQUxJWkVSX1JFRElSRUNUSU5HX0NPTlNUUlVDVE9SbWVzc2FnZVRoaXNJbml0aWFsaXplck5vdEFsb25ldGVtcGxhdGVUaGlzT3JTdXBlckFjY2Vzc0luRmllbGRJbml0aWFsaXplckNhbid0IGFjY2VzcyAnI3N0cmluZycgaW4gYSBmaWVsZCBpbml0aWFsaXplci5jb2RlVGhpc09yU3VwZXJBY2Nlc3NJbkZpZWxkSW5pdGlhbGl6ZXJUaGlzT3JTdXBlckFjY2Vzc0luRmllbGRJbml0aWFsaXplclRISVNfQUNDRVNTX0ZST01fSU5JVElBTElaRVJ0ZW1wbGF0ZVRvb0Zld0FyZ3VtZW50c1RvbyBmZXcgcG9zaXRpb25hbCBhcmd1bWVudHM6ICNjb3VudCByZXF1aXJlZCwgI2NvdW50MiBnaXZlbi5jb2RlVG9vRmV3QXJndW1lbnRzVG9vRmV3QXJndW1lbnRzTk9UX0VOT1VHSF9SRVFVSVJFRF9BUkdVTUVOVFN0ZW1wbGF0ZVRvb01hbnlBcmd1bWVudHNUb28gbWFueSBwb3NpdGlvbmFsIGFyZ3VtZW50czogI2NvdW50IGFsbG93ZWQsIGJ1dCAjY291bnQyIGZvdW5kLlRyeSByZW1vdmluZyB0aGUgZXh0cmEgcG9zaXRpb25hbCBhcmd1bWVudHMuY29kZVRvb01hbnlBcmd1bWVudHNUb29NYW55QXJndW1lbnRzY29kZVRvcExldmVsT3BlcmF0b3JPcGVyYXRvcnMgbXVzdCBiZSBkZWNsYXJlZCB3aXRoaW4gYSBjbGFzcy5UcnkgcmVtb3ZpbmcgdGhlIG9wZXJhdG9yLCBtb3ZpbmcgaXQgdG8gYSBjbGFzcywgb3IgY29udmVydGluZyBpdCB0byBiZSBhIGZ1bmN0aW9uLlRvcExldmVsT3BlcmF0b3JtZXNzYWdlVG9wTGV2ZWxPcGVyYXRvcmNvZGVUeXBlQWZ0ZXJWYXJWYXJpYWJsZXMgY2FuJ3QgYmUgZGVjbGFyZWQgdXNpbmcgYm90aCAndmFyJyBhbmQgYSB0eXBlIG5hbWUuVHJ5IHJlbW92aW5nICd2YXIuJ1R5cGVBZnRlclZhcm1lc3NhZ2VUeXBlQWZ0ZXJWYXJ0ZW1wbGF0ZVR5cGVBcmd1bWVudE1pc21hdGNoRXhwZWN0ZWQgI2NvdW50IHR5cGUgYXJndW1lbnRzLmNvZGVUeXBlQXJndW1lbnRNaXNtYXRjaFR5cGVBcmd1bWVudE1pc21hdGNoV1JPTkdfTlVNQkVSX09GX1RZUEVfQVJHVU1FTlRTdGVtcGxhdGVUeXBlQXJndW1lbnRzT25UeXBlVmFyaWFibGVDYW4ndCB1c2UgdHlwZSBhcmd1bWVudHMgd2l0aCB0eXBlIHZhcmlhYmxlICcjbmFtZScuVHJ5IHJlbW92aW5nIHRoZSB0eXBlIGFyZ3VtZW50cy5jb2RlVHlwZUFyZ3VtZW50c09uVHlwZVZhcmlhYmxlVHlwZUFyZ3VtZW50c09uVHlwZVZhcmlhYmxlY29kZVR5cGVCZWZvcmVGYWN0b3J5RmFjdG9yeSBjb25zdHJ1Y3RvcnMgY2Fubm90IGhhdmUgYSByZXR1cm4gdHlwZS5UcnkgcmVtb3ZpbmcgdGhlIHR5cGUgYXBwZWFyaW5nIGJlZm9yZSAnZmFjdG9yeScuVHlwZUJlZm9yZUZhY3RvcnltZXNzYWdlVHlwZUJlZm9yZUZhY3Rvcnl0ZW1wbGF0ZVR5cGVOb3RGb3VuZFR5cGUgJyNuYW1lJyBub3QgZm91bmQuY29kZVR5cGVOb3RGb3VuZFR5cGVOb3RGb3VuZFVOREVGSU5FRF9DTEFTU3RlbXBsYXRlVHlwZU9yaWdpbicjbmFtZScgaXMgZnJvbSAnI3VyaScuY29kZVR5cGVPcmlnaW5UeXBlT3JpZ2ludGVtcGxhdGVUeXBlT3JpZ2luV2l0aEZpbGVVcmknI25hbWUnIGlzIGZyb20gJyN1cmknICgnI3VyaTInKS5jb2RlVHlwZU9yaWdpbldpdGhGaWxlVXJpVHlwZU9yaWdpbldpdGhGaWxlVXJpY29kZVR5cGVWYXJpYWJsZUR1cGxpY2F0ZWROYW1lQSB0eXBlIHZhcmlhYmxlIGNhbid0IGhhdmUgdGhlIHNhbWUgbmFtZSBhcyBhbm90aGVyLlR5cGVWYXJpYWJsZUR1cGxpY2F0ZWROYW1lbWVzc2FnZVR5cGVWYXJpYWJsZUR1cGxpY2F0ZWROYW1ldGVtcGxhdGVUeXBlVmFyaWFibGVEdXBsaWNhdGVkTmFtZUNhdXNlVGhlIG90aGVyIHR5cGUgdmFyaWFibGUgbmFtZWQgJyNuYW1lJy5jb2RlVHlwZVZhcmlhYmxlRHVwbGljYXRlZE5hbWVDYXVzZVR5cGVWYXJpYWJsZUR1cGxpY2F0ZWROYW1lQ2F1c2Vjb2RlVHlwZVZhcmlhYmxlSW5Db25zdGFudENvbnRleHRUeXBlIHZhcmlhYmxlcyBjYW4ndCBiZSB1c2VkIGFzIGNvbnN0YW50cy5UeXBlVmFyaWFibGVJbkNvbnN0YW50Q29udGV4dFRZUEVfUEFSQU1FVEVSX0lOX0NPTlNUX0VYUFJFU1NJT05tZXNzYWdlVHlwZVZhcmlhYmxlSW5Db25zdGFudENvbnRleHRjb2RlVHlwZVZhcmlhYmxlSW5TdGF0aWNDb250ZXh0VHlwZSB2YXJpYWJsZXMgY2FuJ3QgYmUgdXNlZCBpbiBzdGF0aWMgbWVtYmVycy5UeXBlVmFyaWFibGVJblN0YXRpY0NvbnRleHRtZXNzYWdlVHlwZVZhcmlhYmxlSW5TdGF0aWNDb250ZXh0Y29kZVR5cGVWYXJpYWJsZVNhbWVOYW1lQXNFbmNsb3NpbmdBIHR5cGUgdmFyaWFibGUgY2FuJ3QgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIGl0cyBlbmNsb3NpbmcgZGVjbGFyYXRpb24uVHlwZVZhcmlhYmxlU2FtZU5hbWVBc0VuY2xvc2luZ0NPTkZMSUNUSU5HX1RZUEVfVkFSSUFCTEVfQU5EX0NMQVNTbWVzc2FnZVR5cGVWYXJpYWJsZVNhbWVOYW1lQXNFbmNsb3Npbmdjb2RlVHlwZWRlZkluQ2xhc3NUeXBlZGVmcyBjYW4ndCBiZSBkZWNsYXJlZCBpbnNpZGUgY2xhc3Nlcy5UcnkgbW92aW5nIHRoZSB0eXBlZGVmIHRvIHRoZSB0b3AtbGV2ZWwuVHlwZWRlZkluQ2xhc3NtZXNzYWdlVHlwZWRlZkluQ2xhc3Njb2RlVHlwZWRlZk5vdEZ1bmN0aW9uQ2FuJ3QgY3JlYXRlIHR5cGVkZWYgZnJvbSBub24tZnVuY3Rpb24gdHlwZS5UeXBlZGVmTm90RnVuY3Rpb25JTlZBTElEX0dFTkVSSUNfRlVOQ1RJT05fVFlQRW1lc3NhZ2VUeXBlZGVmTm90RnVuY3Rpb250ZW1wbGF0ZVVuZGVmaW5lZEdldHRlclRoZSBnZXR0ZXIgJyNuYW1lJyBpc24ndCBkZWZpbmVkIGZvciB0aGUgY2xhc3MgJyN0eXBlJy5UcnkgY29ycmVjdGluZyB0aGUgbmFtZSB0byB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBnZXR0ZXIsIG9yIGRlZmluaW5nIGEgZ2V0dGVyIG9yIGZpZWxkIG5hbWVkICcjbmFtZScuY29kZVVuZGVmaW5lZEdldHRlclVuZGVmaW5lZEdldHRlcnRlbXBsYXRlVW5kZWZpbmVkTWV0aG9kVGhlIG1ldGhvZCAnI25hbWUnIGlzbid0IGRlZmluZWQgZm9yIHRoZSBjbGFzcyAnI3R5cGUnLlRyeSBjb3JyZWN0aW5nIHRoZSBuYW1lIHRvIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIG1ldGhvZCwgb3IgZGVmaW5pbmcgYSBtZXRob2QgbmFtZWQgJyNuYW1lJy5jb2RlVW5kZWZpbmVkTWV0aG9kVW5kZWZpbmVkTWV0aG9kdGVtcGxhdGVVbmRlZmluZWRTZXR0ZXJUaGUgc2V0dGVyICcjbmFtZScgaXNuJ3QgZGVmaW5lZCBmb3IgdGhlIGNsYXNzICcjdHlwZScuVHJ5IGNvcnJlY3RpbmcgdGhlIG5hbWUgdG8gdGhlIG5hbWUgb2YgYW4gZXhpc3Rpbmcgc2V0dGVyLCBvciBkZWZpbmluZyBhIHNldHRlciBvciBmaWVsZCBuYW1lZCAnI25hbWUnLmNvZGVVbmRlZmluZWRTZXR0ZXJVbmRlZmluZWRTZXR0ZXJjb2RlVW5leHBlY3RlZERvbGxhckluU3RyaW5nQSAnJCcgaGFzIHNwZWNpYWwgbWVhbmluZyBpbnNpZGUgYSBzdHJpbmcsIGFuZCBtdXN0IGJlIGZvbGxvd2VkIGJ5IGFuIGlkZW50aWZpZXIgb3IgYW4gZXhwcmVzc2lvbiBpbiBjdXJseSBicmFjZXMgKHt9KS5UcnkgYWRkaW5nIGEgYmFja3NsYXNoIChcKSB0byBlc2NhcGUgdGhlICckJy5VbmV4cGVjdGVkRG9sbGFySW5TdHJpbmdVTkVYUEVDVEVEX0RPTExBUl9JTl9TVFJJTkdtZXNzYWdlVW5leHBlY3RlZERvbGxhckluU3RyaW5ndGVtcGxhdGVVbmV4cGVjdGVkVG9rZW5VbmV4cGVjdGVkIHRva2VuICcjbGV4ZW1lJy5jb2RlVW5leHBlY3RlZFRva2VuVW5leHBlY3RlZFRva2VuVU5FWFBFQ1RFRF9UT0tFTnRlbXBsYXRlVW5tYXRjaGVkVG9rZW5DYW4ndCBmaW5kICcjc3RyaW5nJyB0byBtYXRjaCAnI2xleGVtZScuY29kZVVubWF0Y2hlZFRva2VuVW5tYXRjaGVkVG9rZW50ZW1wbGF0ZVVucmVzb2x2ZWRQcmVmaXhJblR5cGVBbm5vdGF0aW9uJyNuYW1lLiNuYW1lMicgY2FuJ3QgYmUgdXNlZCBhcyBhIHR5cGUgYmVjYXVzZSAnI25hbWUnIGlzbid0IGRlZmluZWQuY29kZVVucmVzb2x2ZWRQcmVmaXhJblR5cGVBbm5vdGF0aW9uVW5yZXNvbHZlZFByZWZpeEluVHlwZUFubm90YXRpb250ZW1wbGF0ZVVuc3BlY2lmaWVkI3N0cmluZ2NvZGVVbnNwZWNpZmllZFVuc3BlY2lmaWVkdGVtcGxhdGVVbnN1cHBvcnRlZE9wZXJhdG9yVGhlICcjbGV4ZW1lJyBvcGVyYXRvciBpcyBub3Qgc3VwcG9ydGVkLmNvZGVVbnN1cHBvcnRlZE9wZXJhdG9yVW5zdXBwb3J0ZWRPcGVyYXRvclVOU1VQUE9SVEVEX09QRVJBVE9SY29kZVVuc3VwcG9ydGVkUHJlZml4UGx1cycrJyBpcyBub3QgYSBwcmVmaXggb3BlcmF0b3IuVHJ5IHJlbW92aW5nICcrJy5VbnN1cHBvcnRlZFByZWZpeFBsdXNtZXNzYWdlVW5zdXBwb3J0ZWRQcmVmaXhQbHVzY29kZVVudGVybWluYXRlZENvbW1lbnRDb21tZW50IHN0YXJ0aW5nIHdpdGggJy8qJyBtdXN0IGVuZCB3aXRoICcqLycuVW50ZXJtaW5hdGVkQ29tbWVudFVOVEVSTUlOQVRFRF9NVUxUSV9MSU5FX0NPTU1FTlRtZXNzYWdlVW50ZXJtaW5hdGVkQ29tbWVudHRlbXBsYXRlVW50ZXJtaW5hdGVkU3RyaW5nU3RyaW5nIHN0YXJ0aW5nIHdpdGggI3N0cmluZyBtdXN0IGVuZCB3aXRoICNzdHJpbmcyLmNvZGVVbnRlcm1pbmF0ZWRTdHJpbmdVbnRlcm1pbmF0ZWRTdHJpbmdVTlRFUk1JTkFURURfU1RSSU5HX0xJVEVSQUxjb2RlVW50ZXJtaW5hdGVkVG9rZW5JbmNvbXBsZXRlIHRva2VuLlVudGVybWluYXRlZFRva2VubWVzc2FnZVVudGVybWluYXRlZFRva2VudGVtcGxhdGVVbnRyYW5zbGF0YWJsZVVyaU5vdCBmb3VuZDogJyN1cmknY29kZVVudHJhbnNsYXRhYmxlVXJpVW50cmFuc2xhdGFibGVVcml0ZW1wbGF0ZVVzZU9mRGVwcmVjYXRlZElkZW50aWZpZXInI25hbWUnIGlzIGRlcHJlY2F0ZWQuY29kZVVzZU9mRGVwcmVjYXRlZElkZW50aWZpZXJVc2VPZkRlcHJlY2F0ZWRJZGVudGlmaWVyY29kZVZhckFzVHlwZU5hbWVUaGUga2V5d29yZCAndmFyJyBjYW4ndCBiZSB1c2VkIGFzIGEgdHlwZSBuYW1lLlZhckFzVHlwZU5hbWVtZXNzYWdlVmFyQXNUeXBlTmFtZWNvZGVWYXJSZXR1cm5UeXBlVGhlIHJldHVybiB0eXBlIGNhbid0IGJlICd2YXInLlRyeSByZW1vdmluZyB0aGUga2V5d29yZCAndmFyJywgb3IgcmVwbGFjaW5nIGl0IHdpdGggdGhlIG5hbWUgb2YgdGhlIHJldHVybiB0eXBlLlZhclJldHVyblR5cGVtZXNzYWdlVmFyUmV0dXJuVHlwZWNvZGVWb2lkRXhwcmVzc2lvblRoaXMgZXhwcmVzc2lvbiBoYXMgdHlwZSAndm9pZCcgYW5kIGNhbid0IGJlIHVzZWQuVm9pZEV4cHJlc3Npb25VU0VfT0ZfVk9JRF9SRVNVTFRtZXNzYWdlVm9pZEV4cHJlc3Npb250ZW1wbGF0ZVdlYkxpdGVyYWxDYW5ub3RCZVJlcHJlc2VudGVkRXhhY3RseVRoZSBpbnRlZ2VyIGxpdGVyYWwgI3N0cmluZyBjYW4ndCBiZSByZXByZXNlbnRlZCBleGFjdGx5IGluIEphdmFTY3JpcHQuVHJ5IGNoYW5naW5nIHRoZSBsaXRlcmFsIHRvIHNvbWV0aGluZyB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBpbiBKYXZhc2NyaXB0LiBJbiBKYXZhc2NyaXB0ICNzdHJpbmcyIGlzIHRoZSBuZWFyZXN0IHZhbHVlIHRoYXQgY2FuIGJlIHJlcHJlc2VudGVkIGV4YWN0bHkuY29kZVdlYkxpdGVyYWxDYW5ub3RCZVJlcHJlc2VudGVkRXhhY3RseVdlYkxpdGVyYWxDYW5ub3RCZVJlcHJlc2VudGVkRXhhY3RseWNvZGVXaXRoQmVmb3JlRXh0ZW5kc1RoZSBleHRlbmRzIGNsYXVzZSBtdXN0IGJlIGJlZm9yZSB0aGUgd2l0aCBjbGF1c2UuVHJ5IG1vdmluZyB0aGUgZXh0ZW5kcyBjbGF1c2UgYmVmb3JlIHRoZSB3aXRoIGNsYXVzZS5XaXRoQmVmb3JlRXh0ZW5kc21lc3NhZ2VXaXRoQmVmb3JlRXh0ZW5kc2NvZGVZaWVsZEFzSWRlbnRpZmllcid5aWVsZCcgY2FuJ3QgYmUgdXNlZCBhcyBhbiBpZGVudGlmaWVyIGluICdhc3luYycsICdhc3luYyonLCBvciAnc3luYyonIG1ldGhvZHMuWWllbGRBc0lkZW50aWZpZXJtZXNzYWdlWWllbGRBc0lkZW50aWZpZXJjb2RlWWllbGROb3RHZW5lcmF0b3IneWllbGQnIGNhbiBvbmx5IGJlIHVzZWQgaW4gJ3N5bmMqJyBvciAnYXN5bmMqJyBtZXRob2RzLllpZWxkTm90R2VuZXJhdG9yWUlFTERfSU5fTk9OX0dFTkVSQVRPUm1lc3NhZ2VZaWVsZE5vdEdlbmVyYXRvcml0ZW1pemVOYW1lcyAtIF93aXRoQXJndW1lbnRzQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25ObyBuYW1lIHByb3ZpZGVkVGhlIGNsYXNzICcnIGlzIGFic3RyYWN0IGFuZCBjYW4ndCBiZSBpbnN0YW50aWF0ZWQuX3dpdGhBcmd1bWVudHNBYnN0cmFjdFJlZGlyZWN0ZWRDbGFzc0luc3RhbnRpYXRpb25GYWN0b3J5IHJlZGlyZWN0cyB0byBjbGFzcyAnJywgd2hpY2ggaXMgYWJzdHJhY3QgYW5kIGNhbid0IGJlIGluc3RhbnRpYXRlZC5fd2l0aEFyZ3VtZW50c0FjY2Vzc0Vycm9yQWNjZXNzIGVycm9yOiAnX3dpdGhBcmd1bWVudHNBbWJpZ3VvdXNTdXBlcnR5cGVzX3R5cGVfdHlwZTJsYWJlbGVydHlwZVBhcnRzbGFiZWxUeXBldHlwZTJQYXJ0c3R5cGUyJyBjYW4ndCBpbXBsZW1lbnQgYm90aCAnJyBhbmQgJ29yaWdpbk1lc3NhZ2VzX3dpdGhBcmd1bWVudHNBcmd1bWVudFR5cGVOb3RBc3NpZ25hYmxlVGhlIGFyZ3VtZW50IHR5cGUgJycgY2FuJ3QgYmUgYXNzaWduZWQgdG8gdGhlIHBhcmFtZXRlciB0eXBlICdUcnkgY2hhbmdpbmcgdGhlIHR5cGUgb2YgdGhlIHBhcmFtZXRlciwgb3IgY2FzdGluZyB0aGUgYXJndW1lbnQgdG8gJ193aXRoQXJndW1lbnRzQXNjaWlDb250cm9sQ2hhcmFjdGVyY29kZVBvaW50dW5pY29kZVUrdG9VcHBlckNhc2VwYWRMZWZ0VGhlIGNvbnRyb2wgY2hhcmFjdGVyICBjYW4gb25seSBiZSB1c2VkIGluIHN0cmluZ3MgYW5kIGNvbW1lbnRzLl93aXRoQXJndW1lbnRzQmFkVHlwZVZhcmlhYmxlSW5TdXBlcnR5cGVuYW1lMkZvdW5kIHVuc3VwcG9ydGVkIHVzZXMgb2YgJycgaW4gc3VwZXJ0eXBlICdfd2l0aEFyZ3VtZW50c0JvdW5kSXNzdWVWaWFDeWNsZU5vblNpbXBsaWNpdHlHZW5lcmljIHR5cGUgJycgY2FuJ3QgYmUgdXNlZCB3aXRob3V0IHR5cGUgYXJndW1lbnRzIGluIHRoZSBib3VuZHMgb2YgaXRzIG93biB0eXBlIHZhcmlhYmxlcy4gSXQgaXMgcmVmZXJlbmNlZCBpbmRpcmVjdGx5IHRocm91Z2ggJ1RyeSBwcm92aWRpbmcgdHlwZSBhcmd1bWVudHMgdG8gJycgaGVyZSBvciB0byBzb21lIG90aGVyIHJhdyB0eXBlcyBpbiB0aGUgYm91bmRzIGFsb25nIHRoZSByZWZlcmVuY2UgY2hhaW4uX3dpdGhBcmd1bWVudHNCb3VuZElzc3VlVmlhTG9vcE5vblNpbXBsaWNpdHknIGNhbid0IGJlIHVzZWQgd2l0aG91dCB0eXBlIGFyZ3VtZW50cyBpbiB0aGUgYm91bmRzIG9mIGl0cyBvd24gdHlwZSB2YXJpYWJsZXMuJyBoZXJlLl93aXRoQXJndW1lbnRzQm91bmRJc3N1ZVZpYVJhd1R5cGVXaXRoTm9uU2ltcGxlQm91bmRzJyBjYW4ndCBiZSB1c2VkIHdpdGhvdXQgdHlwZSBhcmd1bWVudHMgaW4gYSB0eXBlIHZhcmlhYmxlIGJvdW5kLl93aXRoQXJndW1lbnRzQnJlYWtUYXJnZXRPdXRzaWRlRnVuY3Rpb25DYW4ndCBicmVhayB0byAnJyBpbiBhIGRpZmZlcmVudCBmdW5jdGlvbi5fd2l0aEFyZ3VtZW50c0J1aWx0SW5JZGVudGlmaWVyQXNUeXBldG9rZW5UaGUgYnVpbHQtaW4gaWRlbnRpZmllciAnJyBjYW4ndCBiZSB1c2VkIGFzIGEgdHlwZS5fd2l0aEFyZ3VtZW50c0J1aWx0SW5JZGVudGlmaWVySW5EZWNsYXJhdGlvbkNhbid0IHVzZSAnJyBhcyBhIG5hbWUgaGVyZS5fd2l0aEFyZ3VtZW50c0NhbmRpZGF0ZUZvdW5kSXNEZWZhdWx0Q29uc3RydWN0b3InIGhhcyBhIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgbm8gYXJndW1lbnRzLl93aXRoQXJndW1lbnRzQ2Fubm90UmVhZFNka1NwZWNpZmljYXRpb25ObyBzdHJpbmcgcHJvdmlkZWRVbmFibGUgdG8gcmVhZCB0aGUgJ2xpYnJhcmllcy5qc29uJyBzcGVjaWZpY2F0aW9uIGZpbGU6CiAgX3dpdGhBcmd1bWVudHNDYW50SW5mZXJSZXR1cm5UeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXNDYW4ndCBpbmZlciBhIHJldHVybiB0eXBlIGZvciAnJyBhcyBzb21lIG9mIHRoZSBpbmhlcml0ZWQgbWVtYmVycyBoYXZlIGRpZmZlcmVudCB0eXBlcy5fd2l0aEFyZ3VtZW50c0NhbnRJbmZlclR5cGVEdWVUb0NpcmN1bGFyaXR5Q2FuJ3QgaW5mZXIgdGhlIHR5cGUgb2YgJyc6IGNpcmN1bGFyaXR5IGZvdW5kIGR1cmluZyB0eXBlIGluZmVyZW5jZS5fd2l0aEFyZ3VtZW50c0NhbnRJbmZlclR5cGVEdWVUb0luY29uc2lzdGVudE92ZXJyaWRlc0Nhbid0IGluZmVyIGEgdHlwZSBmb3IgJ193aXRoQXJndW1lbnRzQ2FudFJlYWRGaWxldXJpX0Vycm9yIHdoZW4gcmVhZGluZyAnJzogX3dpdGhBcmd1bWVudHNDYW50VXNlQ29udHJvbEZsb3dPclNwcmVhZEFzQ29uc3RhbnQnIGlzIG5vdCBzdXBwb3J0ZWQgaW4gY29uc3RhbnQgZXhwcmVzc2lvbnMuX3dpdGhBcmd1bWVudHNDYW50VXNlRGVmZXJyZWRQcmVmaXhBc0NvbnN0YW50JyBjYW4ndCBiZSB1c2VkIGluIGEgY29uc3RhbnQgZXhwcmVzc2lvbiBiZWNhdXNlIGl0J3MgbWFya2VkIGFzICdkZWZlcnJlZCcgd2hpY2ggbWVhbnMgaXQgaXNuJ3QgYXZhaWxhYmxlIHVudGlsIGxvYWRlZC5fd2l0aEFyZ3VtZW50c0NvbWJpbmVkTWVtYmVyU2lnbmF0dXJlRmFpbGVkQ2xhc3MgJycgaW5oZXJpdHMgbXVsdGlwbGUgbWVtYmVycyBuYW1lZCAnJyB3aXRoIGluY29tcGF0aWJsZSBzaWduYXR1cmVzLlRyeSBhZGRpbmcgYSBkZWNsYXJhdGlvbiBvZiAnJyB0byAnX3dpdGhBcmd1bWVudHNDb25mbGljdGluZ01vZGlmaWVyc3N0cmluZzJNZW1iZXJzIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlIGJvdGggJ193aXRoQXJndW1lbnRzQ29uZmxpY3RzV2l0aENvbnN0cnVjdG9yQ29uZmxpY3RzIHdpdGggY29uc3RydWN0b3IgJ193aXRoQXJndW1lbnRzQ29uZmxpY3RzV2l0aEZhY3RvcnlDb25mbGljdHMgd2l0aCBmYWN0b3J5ICdfd2l0aEFyZ3VtZW50c0NvbmZsaWN0c1dpdGhNZW1iZXJDb25mbGljdHMgd2l0aCBtZW1iZXIgJ193aXRoQXJndW1lbnRzQ29uZmxpY3RzV2l0aE1lbWJlcldhcm5pbmdfd2l0aEFyZ3VtZW50c0NvbmZsaWN0c1dpdGhTZXR0ZXJDb25mbGljdHMgd2l0aCBzZXR0ZXIgJ193aXRoQXJndW1lbnRzQ29uZmxpY3RzV2l0aFNldHRlcldhcm5pbmdfd2l0aEFyZ3VtZW50c0NvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGVDb25mbGljdHMgd2l0aCB0eXBlIHZhcmlhYmxlICdfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbERlZmVycmVkTGlicmFyeV93aXRoQXJndW1lbnRzQ29uc3RFdmFsRHVwbGljYXRlRWxlbWVudF9jb25zdGFudGNvbnN0YW50UGFydHNsYWJlbENvbnN0YW50VGhlIGVsZW1lbnQgJycgY29uZmxpY3RzIHdpdGggYW5vdGhlciBleGlzdGluZyBlbGVtZW50IGluIHRoZSBzZXQuX3dpdGhBcmd1bWVudHNDb25zdEV2YWxEdXBsaWNhdGVLZXlUaGUga2V5ICcnIGNvbmZsaWN0cyB3aXRoIGFub3RoZXIgZXhpc3Rpbmcga2V5IGluIHRoZSBtYXAuX3dpdGhBcmd1bWVudHNDb25zdEV2YWxFbGVtZW50SW1wbGVtZW50c0VxdWFsJyBkb2VzIG5vdCBoYXZlIGEgcHJpbWl0aXZlIG9wZXJhdG9yICc9PScuX3dpdGhBcmd1bWVudHNDb25zdEV2YWxGYWlsZWRBc3NlcnRpb25XaXRoTWVzc2FnZVRoaXMgYXNzZXJ0aW9uIGZhaWxlZCB3aXRoIG1lc3NhZ2U6IF93aXRoQXJndW1lbnRzQ29uc3RFdmFsRnJlZVR5cGVQYXJhbWV0ZXJUaGUgdHlwZSAnJyBpcyBub3QgYSBjb25zdGFudCBiZWNhdXNlIGl0IGRlcGVuZHMgb24gYSB0eXBlIHBhcmFtZXRlciwgb25seSBpbnN0YW50aWF0ZWQgdHlwZXMgYXJlIGFsbG93ZWQuX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkQmluYXJ5T3BlcmFuZFR5cGVCaW5hcnkgb3BlcmF0b3IgJycgb24gJycgcmVxdWlyZXMgb3BlcmFuZCBvZiB0eXBlICcnLCBidXQgd2FzIG9mIHR5cGUgJ193aXRoQXJndW1lbnRzQ29uc3RFdmFsSW52YWxpZEVxdWFsc09wZXJhbmRUeXBlQmluYXJ5IG9wZXJhdG9yICc9PScgcmVxdWlyZXMgcmVjZWl2ZXIgY29uc3RhbnQgJycgb2YgdHlwZSAnTnVsbCcsICdib29sJywgJ2ludCcsICdkb3VibGUnLCBvciAnU3RyaW5nJywgYnV0IHdhcyBvZiB0eXBlICdfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEludmFsaWRNZXRob2RJbnZvY2F0aW9uVGhlIG1ldGhvZCAnJyBjYW4ndCBiZSBpbnZva2VkIG9uICcnIHdpdGhpbiBhIGNvbnN0IGNvbnRleHQuX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkUHJvcGVydHlHZXRUaGUgcHJvcGVydHkgJycgY2FuJ3QgYmUgYWNjZXNzZWQgb24gJ193aXRoQXJndW1lbnRzQ29uc3RFdmFsSW52YWxpZFN0YXRpY0ludm9jYXRpb25UaGUgaW52b2NhdGlvbiBvZiAnJyBpcyBub3QgYWxsb3dlZCB3aXRoaW4gYSBjb25zdCBjb250ZXh0Ll93aXRoQXJndW1lbnRzQ29uc3RFdmFsSW52YWxpZFN0cmluZ0ludGVycG9sYXRpb25PcGVyYW5kVGhlICcnIGNhbid0IGJlIHVzZWQgYXMgcGFydCBvZiBhIHN0cmluZyBpbnRlcnBvbGF0aW9uIHdpdGhpbiBhIGNvbnN0IGNvbnRleHQsIG9ubHkgdmFsdWVzIG9mIHR5cGUgJ251bGwnLCAnYm9vbCcsICdpbnQnLCAnZG91YmxlJywgb3IgJ1N0cmluZycgY2FuIGJlIHVzZWQuX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkU3ltYm9sTmFtZVRoZSBzeW1ib2wgbmFtZSBtdXN0IGJlIGEgdmFsaWQgcHVibGljIERhcnQgbWVtYmVyIG5hbWUsIHB1YmxpYyBjb25zdHJ1Y3RvciBuYW1lLCBvciBsaWJyYXJ5IG5hbWUsIG9wdGlvbmFsbHkgcXVhbGlmaWVkLCBidXQgd2FzICdfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEludmFsaWRUeXBlRXhwZWN0ZWQgY29uc3RhbnQgJycgdG8gYmUgb2YgdHlwZSAnX3dpdGhBcmd1bWVudHNDb25zdEV2YWxLZXlJbXBsZW1lbnRzRXF1YWxfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbE5lZ2F0aXZlU2hpZnRzdHJpbmczJyByZXF1aXJlcyBub24tbmVnYXRpdmUgb3BlcmFuZCwgYnV0IHdhcyAnX3dpdGhBcmd1bWVudHNDb25zdEV2YWxOb25Db25zdGFudExpdGVyYWxDYW4ndCBoYXZlIGEgbm9uLWNvbnN0YW50ICBsaXRlcmFsIHdpdGhpbiBhIGNvbnN0IGNvbnRleHQuX3dpdGhBcmd1bWVudHNDb25zdEV2YWxOb25Db25zdGFudFZhcmlhYmxlR2V0VGhlIHZhcmlhYmxlICcnIGlzIG5vdCBhIGNvbnN0YW50LCBvbmx5IGNvbnN0YW50IGV4cHJlc3Npb25zIGFyZSBhbGxvd2VkLl93aXRoQXJndW1lbnRzQ29uc3RFdmFsWmVyb0Rpdmlzb3InIHJlcXVpcmVzIG5vbi16ZXJvIGRpdmlzb3IsIGJ1dCBkaXZpc29yIHdhcyAnMCcuX3dpdGhBcmd1bWVudHNDb25zdEZpZWxkV2l0aG91dEluaXRpYWxpemVyVGhlIGNvbnN0IHZhcmlhYmxlICcnIG11c3QgYmUgaW5pdGlhbGl6ZWQuX3dpdGhBcmd1bWVudHNDb25zdHJ1Y3Rvck5vdEZvdW5kQ291bGRuJ3QgZmluZCBjb25zdHJ1Y3RvciAnX3dpdGhBcmd1bWVudHNDb25zdHJ1Y3RvcldpdGhXcm9uZ05hbWVDb250ZXh0VGhlIG5hbWUgb2YgdGhlIGVuY2xvc2luZyBjbGFzcyBpcyAnX3dpdGhBcmd1bWVudHNDb250aW51ZVRhcmdldE91dHNpZGVGdW5jdGlvbkNhbid0IGNvbnRpbnVlIGF0ICdfd2l0aEFyZ3VtZW50c0NvdWxkTm90UGFyc2VVcmlDb3VsZG4ndCBwYXJzZSBVUkkgJyc6CiAgX3dpdGhBcmd1bWVudHNDeWNsZUluVHlwZVZhcmlhYmxlc1R5cGUgJycgaXMgYSBib3VuZCBvZiBpdHNlbGYgdmlhICdfd2l0aEFyZ3VtZW50c0N5Y2xpY0NsYXNzSGllcmFyY2h5JyBpcyBhIHN1cGVydHlwZSBvZiBpdHNlbGYuX3dpdGhBcmd1bWVudHNDeWNsaWNSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnNDeWNsaWMgZGVmaW5pdGlvbiBvZiBmYWN0b3J5ICdfd2l0aEFyZ3VtZW50c0N5Y2xpY1R5cGVkZWZUaGUgdHlwZWRlZiAnJyBoYXMgYSByZWZlcmVuY2UgdG8gaXRzZWxmLl93aXRoQXJndW1lbnRzRGVmYXVsdFZhbHVlSW5SZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvckNhbid0IGhhdmUgYSBkZWZhdWx0IHZhbHVlIGhlcmUgYmVjYXVzZSBhbnkgZGVmYXVsdCB2YWx1ZXMgb2YgJycgd291bGQgYmUgdXNlZCBpbnN0ZWFkLl93aXRoQXJndW1lbnRzRGVmZXJyZWRQcmVmaXhEdXBsaWNhdGVkQ2FuJ3QgdXNlIHRoZSBuYW1lICcnIGZvciBhIGRlZmVycmVkIGxpYnJhcnksIGFzIHRoZSBuYW1lIGlzIHVzZWQgZWxzZXdoZXJlLl93aXRoQXJndW1lbnRzRGVmZXJyZWRQcmVmaXhEdXBsaWNhdGVkQ2F1c2UnIGlzIHVzZWQgaGVyZS5fd2l0aEFyZ3VtZW50c0RlZmVycmVkVHlwZUFubm90YXRpb24nIGlzIGRlZmVycmVkIGxvYWRlZCB2aWEgcHJlZml4ICcnIGFuZCBjYW4ndCBiZSB1c2VkIGFzIGEgdHlwZSBhbm5vdGF0aW9uLlRyeSByZW1vdmluZyAnZGVmZXJyZWQnIGZyb20gdGhlIGltcG9ydCBvZiAnJyBvciB1c2UgYSBzdXBlcnR5cGUgb2YgJycgdGhhdCBpc24ndCBkZWZlcnJlZC5fd2l0aEFyZ3VtZW50c0RpbGxPdXRsaW5lU3VtbWFyeWNvdW50Ml9udW0xX251bTJfbnVtM05vIGNvdW50IHByb3ZpZGVkTm8gbnVtYmVyIHByb3ZpZGVkbnVtMW51bTJudW0zSW5kZXhlZCAgbGlicmFyaWVzICggYnl0ZXMpIGluIG1zLCB0aGF0IGlzLAogYnl0ZXMvbXMsIGFuZAogbXMvbGlicmFyaWVzLl93aXRoQXJndW1lbnRzRGlyZWN0Q3ljbGVJblR5cGVWYXJpYWJsZXMnIGNhbid0IHVzZSBpdHNlbGYgYXMgYSBib3VuZC5fd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZUxhYmVsSW5Td2l0Y2hTdGF0ZW1lbnRUaGUgbGFiZWwgJycgd2FzIGFscmVhZHkgdXNlZCBpbiB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkRGVjbGFyYXRpb24nIGlzIGFscmVhZHkgZGVjbGFyZWQgaW4gdGhpcyBzY29wZS5fd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWREZWNsYXJhdGlvbkNhdXNlUHJldmlvdXMgZGVjbGFyYXRpb24gb2YgJ193aXRoQXJndW1lbnRzRHVwbGljYXRlZERlY2xhcmF0aW9uU3ludGhldGljQ2F1c2UnIGlzIGltcGxpZWQgYnkgdGhpcyBkZWZpbml0aW9uLl93aXRoQXJndW1lbnRzRHVwbGljYXRlZERlY2xhcmF0aW9uVXNlJyBiZWNhdXNlIGl0IGlzIGRlY2xhcmVkIG1vcmUgdGhhbiBvbmNlLl93aXRoQXJndW1lbnRzRHVwbGljYXRlZEV4cG9ydHVyaTJfdXJpMicgaXMgZXhwb3J0ZWQgZnJvbSBib3RoICdfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRFeHBvcnRJblR5cGVfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRJbXBvcnQnIGlzIGltcG9ydGVkIGZyb20gYm90aCAnX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkSW1wb3J0SW5UeXBlX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkTGlicmFyeUV4cG9ydEEgbGlicmFyeSB3aXRoIG5hbWUgJycgaXMgZXhwb3J0ZWQgbW9yZSB0aGFuIG9uY2UuX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkTGlicmFyeUV4cG9ydENvbnRleHQnIGlzIGFsc28gZXhwb3J0ZWQgaGVyZS5fd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRMaWJyYXJ5SW1wb3J0JyBpcyBpbXBvcnRlZCBtb3JlIHRoYW4gb25jZS5fd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRMaWJyYXJ5SW1wb3J0Q29udGV4dCcgaXMgYWxzbyBpbXBvcnRlZCBoZXJlLl93aXRoQXJndW1lbnRzRHVwbGljYXRlZE1vZGlmaWVyVGhlIG1vZGlmaWVyICcnIHdhcyBhbHJlYWR5IHNwZWNpZmllZC5fd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWROYW1lUHJldmlvdXNseVVzZWRDYW4ndCBkZWNsYXJlICcnIGJlY2F1c2UgaXQgd2FzIGFscmVhZHkgdXNlZCBpbiB0aGlzIHNjb3BlLl93aXRoQXJndW1lbnRzRHVwbGljYXRlZE5hbWVQcmV2aW91c2x5VXNlZENhdXNlUHJldmlvdXMgdXNlIG9mICdfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWROYW1lZEFyZ3VtZW50RHVwbGljYXRlZCBuYW1lZCBhcmd1bWVudCAnX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZUR1cGxpY2F0ZWQgcGFyYW1ldGVyIG5hbWUgJ193aXRoQXJndW1lbnRzRHVwbGljYXRlZFBhcmFtZXRlck5hbWVDYXVzZU90aGVyIHBhcmFtZXRlciBuYW1lZCAnX3dpdGhBcmd1bWVudHNFbnVtQ29uc3RhbnRTYW1lTmFtZUFzRW5jbG9zaW5nTmFtZSBvZiBlbnVtIGNvbnN0YW50ICcnIGNhbid0IGJlIHRoZSBzYW1lIGFzIHRoZSBlbnVtJ3Mgb3duIG5hbWUuX3dpdGhBcmd1bWVudHNFeHBlY3RlZEFmdGVyQnV0R290RXhwZWN0ZWQgJycgYWZ0ZXIgdGhpcy5fd2l0aEFyZ3VtZW50c0V4cGVjdGVkQnV0R290JyBiZWZvcmUgdGhpcy5fd2l0aEFyZ3VtZW50c0V4cGVjdGVkQ2xhc3NNZW1iZXJFeHBlY3RlZCBhIGNsYXNzIG1lbWJlciwgYnV0IGdvdCAnX3dpdGhBcmd1bWVudHNFeHBlY3RlZENsYXNzT3JNaXhpbkJvZHlBICBtdXN0IGhhdmUgYSBib2R5LCBldmVuIGlmIGl0IGlzIGVtcHR5Ll93aXRoQXJndW1lbnRzRXhwZWN0ZWREZWNsYXJhdGlvbkV4cGVjdGVkIGEgZGVjbGFyYXRpb24sIGJ1dCBnb3QgJ193aXRoQXJndW1lbnRzRXhwZWN0ZWRFbnVtQm9keUV4cGVjdGVkIGEgZW51bSBib2R5LCBidXQgZ290ICdfd2l0aEFyZ3VtZW50c0V4cGVjdGVkRnVuY3Rpb25Cb2R5RXhwZWN0ZWQgYSBmdW5jdGlvbiBib2R5LCBidXQgZ290ICdfd2l0aEFyZ3VtZW50c0V4cGVjdGVkSWRlbnRpZmllckV4cGVjdGVkIGFuIGlkZW50aWZpZXIsIGJ1dCBnb3QgJ193aXRoQXJndW1lbnRzRXhwZWN0ZWRJbnN0ZWFkJyBpbnN0ZWFkIG9mIHRoaXMuX3dpdGhBcmd1bWVudHNFeHBlY3RlZFN0cmluZ0V4cGVjdGVkIGEgU3RyaW5nLCBidXQgZ290ICdfd2l0aEFyZ3VtZW50c0V4cGVjdGVkVG9rZW5FeHBlY3RlZCB0byBmaW5kICdfd2l0aEFyZ3VtZW50c0V4cGVjdGVkVHlwZUV4cGVjdGVkIGEgdHlwZSwgYnV0IGdvdCAnX3dpdGhBcmd1bWVudHNFeHBlcmltZW50Tm90RW5hYmxlZFRoaXMgcmVxdWlyZXMgdGhlICcnIGV4cGVyaW1lbnQgdG8gYmUgZW5hYmxlZC5fd2l0aEFyZ3VtZW50c0V4cGxpY2l0RXh0ZW5zaW9uVHlwZUFyZ3VtZW50TWlzbWF0Y2hFeHBsaWNpdCBleHRlbnNpb24gYXBwbGljYXRpb24gb2YgZXh0ZW5zaW9uICcnIHRha2VzICcnIHR5cGUgYXJndW1lbnQocykuX3dpdGhBcmd1bWVudHNFeHBvcnRIaWRlc0V4cG9ydEV4cG9ydCBvZiAnJyAoZnJvbSAnJykgaGlkZXMgZXhwb3J0IGZyb20gJ193aXRoQXJndW1lbnRzRXh0ZW5kaW5nRW51bScgaXMgYW4gZW51bSBhbmQgY2FuJ3QgYmUgZXh0ZW5kZWQgb3IgaW1wbGVtZW50ZWQuX3dpdGhBcmd1bWVudHNFeHRlbmRpbmdSZXN0cmljdGVkJyBpcyByZXN0cmljdGVkIGFuZCBjYW4ndCBiZSBleHRlbmRlZCBvciBpbXBsZW1lbnRlZC5fd2l0aEFyZ3VtZW50c0V4dHJhbmVvdXNNb2RpZmllckNhbid0IGhhdmUgbW9kaWZpZXIgJ1RyeSByZW1vdmluZyAnX3dpdGhBcmd1bWVudHNGYXN0YUNMSUFyZ3VtZW50UmVxdWlyZWRFeHBlY3RlZCB2YWx1ZSBhZnRlciAnX3dpdGhBcmd1bWVudHNGZmlEYXJ0VHlwZU1pc21hdGNoJyB0byBiZSBhIHN1YnR5cGUgb2YgJ193aXRoQXJndW1lbnRzRmZpRXh0ZW5kc09ySW1wbGVtZW50c1NlYWxlZENsYXNzJyBjYW5ub3QgYmUgZXh0ZW5kZWQgb3IgaW1wbGVtZW50ZWQuX3dpdGhBcmd1bWVudHNGZmlGaWVsZEFubm90YXRpb25GaWVsZCAnJyByZXF1aXJlcyBleGFjdGx5IG9uZSBhbm5vdGF0aW9uIHRvIGRlY2xhcmUgaXRzIEMrKyB0eXBlLCB3aGljaCBjYW5ub3QgYmUgVm9pZC4gZGFydDpmZmkgU3RydWN0cyBjYW5ub3QgaGF2ZSByZWd1bGFyIERhcnQgZmllbGRzLl93aXRoQXJndW1lbnRzRmZpRmllbGRJbml0aWFsaXplcicgaXMgYSBkYXJ0OmZmaSBQb2ludGVyIHRvIGEgc3RydWN0IGZpZWxkIGFuZCB0aGVyZWZvcmUgY2Fubm90IGJlIGluaXRpYWxpemVkIGJlZm9yZSBjb25zdHJ1Y3RvciBleGVjdXRpb24uX3dpdGhBcmd1bWVudHNGZmlGaWVsZE5vQW5ub3RhdGlvbicgcmVxdWlyZXMgbm8gYW5ub3RhdGlvbiB0byBkZWNsYXJlIGl0cyBDKysgdHlwZSwgaXQgaXMgYSBQb2ludGVyIHdoaWNoIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBzYW1lIHR5cGUgaW4gRGFydCBhbmQgQysrLl93aXRoQXJndW1lbnRzRmZpTm90U3RhdGljIGV4cGVjdHMgYSBzdGF0aWMgZnVuY3Rpb24gYXMgcGFyYW1ldGVyLiBkYXJ0OmZmaSBvbmx5IHN1cHBvcnRzIGNhbGxpbmcgc3RhdGljIERhcnQgZnVuY3Rpb25zIGZyb20gYy5fd2l0aEFyZ3VtZW50c0ZmaVN0cnVjdEdlbmVyaWNTdHJ1Y3QgJycgc2hvdWxkIG5vdCBiZSBnZW5lcmljLl93aXRoQXJndW1lbnRzRmZpVHlwZUludmFsaWRFeHBlY3RlZCB0eXBlICcnIHRvIGJlIGEgdmFsaWQgYW5kIGluc3RhbnRpYXRlZCBzdWJ0eXBlIG9mICdOYXRpdmVUeXBlJy5fd2l0aEFyZ3VtZW50c0ZmaVR5cGVNaXNtYXRjaF90eXBlM3R5cGUzUGFydHN0eXBlMycgdG8gYmUgJycsIHdoaWNoIGlzIHRoZSBEYXJ0IHR5cGUgY29ycmVzcG9uZGluZyB0byAnX3dpdGhBcmd1bWVudHNGZmlUeXBlVW5zaXplZE1ldGhvZCAnJyBjYW5ub3QgYmUgY2FsbGVkIG9uIHNvbWV0aGluZyBvZiB0eXBlICcnIGFzIHRoaXMgdHlwZSBpcyB1bnNpemVkLl93aXRoQXJndW1lbnRzRmZpV3JvbmdTdHJ1Y3RJbmhlcml0YW5jZScgbXVzdCBpbmhlcml0IGZyb20gJ1N0cnVjdDw+Jy5fd2l0aEFyZ3VtZW50c0ZpbmFsRmllbGROb3RJbml0aWFsaXplZEZpbmFsIGZpZWxkICcnIGlzIG5vdCBpbml0aWFsaXplZC5fd2l0aEFyZ3VtZW50c0ZpbmFsRmllbGROb3RJbml0aWFsaXplZEJ5Q29uc3RydWN0b3InIGlzIG5vdCBpbml0aWFsaXplZCBieSB0aGlzIGNvbnN0cnVjdG9yLl93aXRoQXJndW1lbnRzRmluYWxGaWVsZFdpdGhvdXRJbml0aWFsaXplclRoZSBmaW5hbCB2YXJpYWJsZSAnX3dpdGhBcmd1bWVudHNGaW5hbEluc3RhbmNlVmFyaWFibGVBbHJlYWR5SW5pdGlhbGl6ZWQnIGlzIGEgZmluYWwgaW5zdGFuY2UgdmFyaWFibGUgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLl93aXRoQXJndW1lbnRzRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkQ2F1c2UnIHdhcyBpbml0aWFsaXplZCBoZXJlLl93aXRoQXJndW1lbnRzRm9ySW5Mb29wRWxlbWVudFR5cGVOb3RBc3NpZ25hYmxlQSB2YWx1ZSBvZiB0eXBlICcnIGNhbid0IGJlIGFzc2lnbmVkIHRvIGEgdmFyaWFibGUgb2YgdHlwZSAnX3dpdGhBcmd1bWVudHNGb3JJbkxvb3BUeXBlTm90SXRlcmFibGUnIHVzZWQgaW4gdGhlICdmb3InIGxvb3AgbXVzdCBpbXBsZW1lbnQgJ193aXRoQXJndW1lbnRzR2VuZXJpY0Z1bmN0aW9uVHlwZUluZmVycmVkQXNBY3R1YWxUeXBlQXJndW1lbnRVbmV4cGVjdGVkIGdlbmVyaWMgZnVuY3Rpb24gdHlwZSAnJyBpbmZlcnJlZCBhcyBhIHR5cGUgYXJndW1lbnQuX3dpdGhBcmd1bWVudHNHZXR0ZXJOb3RGb3VuZEdldHRlciBub3QgZm91bmQ6ICdfd2l0aEFyZ3VtZW50c0lsbGVnYWxNaXhpbicgY2FuJ3QgYmUgbWl4ZWQgaW4uX3dpdGhBcmd1bWVudHNJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9ycycgYXMgYSBtaXhpbiBiZWNhdXNlIGl0IGhhcyBjb25zdHJ1Y3RvcnMuX3dpdGhBcmd1bWVudHNJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9yc0NhdXNlVGhpcyBjb25zdHJ1Y3RvciBwcmV2ZW50cyB1c2luZyAnJyBhcyBhIG1peGluLl93aXRoQXJndW1lbnRzSWxsZWdhbFJlY3Vyc2l2ZVR5cGVJbGxlZ2FsIHJlY3Vyc2l2ZSB0eXBlICdfd2l0aEFyZ3VtZW50c0ltcGxlbWVudHNSZXBlYXRlZCcgY2FuIG9ubHkgYmUgaW1wbGVtZW50ZWQgb25jZS5UcnkgcmVtb3ZpbmcgIG9mIHRoZSBvY2N1cnJlbmNlcy5fd2l0aEFyZ3VtZW50c0ltcGxlbWVudHNTdXBlckNsYXNzJyBjYW4ndCBiZSB1c2VkIGluIGJvdGggJ2V4dGVuZHMnIGFuZCAnaW1wbGVtZW50cycgY2xhdXNlcy5fd2l0aEFyZ3VtZW50c0ltcGxpY2l0Q2FsbE9mTm9uTWV0aG9kQ2Fubm90IGludm9rZSBhbiBpbnN0YW5jZSBvZiAnJyBiZWNhdXNlIGl0IGRlY2xhcmVzICdjYWxsJyB0byBiZSBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIG1ldGhvZC5fd2l0aEFyZ3VtZW50c0ltcGxpY2l0TWl4aW5PdmVycmlkZUNvbnRleHRPdmVycmlkZSB3YXMgaW50cm9kdWNlZCB3aGVuIHRoZSBtaXhpbiAnJyB3YXMgYXBwbGllZCB0byAnX3dpdGhBcmd1bWVudHNJbXBvcnRIaWRlc0ltcG9ydEltcG9ydCBvZiAnJykgaGlkZXMgaW1wb3J0IGZyb20gJ193aXRoQXJndW1lbnRzSW5jb21wYXRpYmxlUmVkaXJlY3RlZUZ1bmN0aW9uVHlwZVRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiB0eXBlICcnIGlzbid0IGEgc3VidHlwZSBvZiAnX3dpdGhBcmd1bWVudHNJbmNvcnJlY3RUeXBlQXJndW1lbnRUeXBlIGFyZ3VtZW50ICcnIGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgYm91bmQgJycgb2YgdGhlIHR5cGUgdmFyaWFibGUgJ193aXRoQXJndW1lbnRzSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5SZXR1cm5UeXBlJyBpbiB0aGUgcmV0dXJuIHR5cGUuX3dpdGhBcmd1bWVudHNJbmNvcnJlY3RUeXBlQXJndW1lbnRJblN1cGVydHlwZW5hbWUzbmFtZTQnIGluIHRoZSBzdXBlcnR5cGUgJycgb2YgY2xhc3MgJ193aXRoQXJndW1lbnRzSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGVJbmZlcnJlZEluZmVycmVkIHR5cGUgYXJndW1lbnQgJ193aXRoQXJndW1lbnRzSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5mZXJyZWRfd2l0aEFyZ3VtZW50c0luY29ycmVjdFR5cGVBcmd1bWVudFF1YWxpZmllZF93aXRoQXJndW1lbnRzSW5jb3JyZWN0VHlwZUFyZ3VtZW50UXVhbGlmaWVkSW5mZXJyZWRfd2l0aEFyZ3VtZW50c0luZmVycmVkUGFja2FnZVVyaUludGVycHJldGluZyB0aGlzIGFzIHBhY2thZ2UgVVJJLCAnX3dpdGhBcmd1bWVudHNJbml0aWFsaXplRnJvbURpbGxOb3RTZWxmQ29udGFpbmVkVHJpZWQgdG8gaW5pdGlhbGl6ZSBmcm9tIGEgcHJldmlvdXMgY29tcGlsYXRpb24gKCksIGJ1dCB0aGUgZmlsZSB3YXMgbm90IHNlbGYtY29udGFpbmVkLiBUaGlzIG1pZ2h0IGJlIGEgYnVnLgoKVGhlIERhcnQgdGVhbSB3b3VsZCBncmVhdGx5IGFwcHJlY2lhdGUgaXQgaWYgeW91IHdvdWxkIHRha2UgYSBtb21lbnQgdG8gcmVwb3J0IHRoaXMgcHJvYmxlbSBhdCBodHRwOi8vZGFydGJ1Zy5jb20vbmV3LgpJZiB5b3UgYXJlIGNvbWZvcnRhYmxlIHdpdGggaXQsIGl0IHdvdWxkIGltcHJvdmUgdGhlIGNoYW5jZXMgb2YgZml4aW5nIGFueSBidWcgaWYgeW91IGluY2x1ZGVkIHRoZSBmaWxlICBpbiB5b3VyIGVycm9yIHJlcG9ydCwgYnV0IGJlIGF3YXJlIHRoYXQgdGhpcyBmaWxlIGluY2x1ZGVzIHlvdXIgc291cmNlIGNvZGUuCkVpdGhlciB3YXksIHlvdSBzaG91bGQgcHJvYmFibHkgZGVsZXRlIHRoZSBmaWxlIHNvIGl0IGRvZXNuJ3QgdXNlIHVubmVjZXNzYXJ5IGRpc2sgc3BhY2UuX3dpdGhBcmd1bWVudHNJbml0aWFsaXplRnJvbURpbGxOb3RTZWxmQ29udGFpbmVkTm9EdW1wKSwgYnV0IHRoZSBmaWxlIHdhcyBub3Qgc2VsZi1jb250YWluZWQuIFRoaXMgbWlnaHQgYmUgYSBidWcuCgpUaGUgRGFydCB0ZWFtIHdvdWxkIGdyZWF0bHkgYXBwcmVjaWF0ZSBpdCBpZiB5b3Ugd291bGQgdGFrZSBhIG1vbWVudCB0byByZXBvcnQgdGhpcyBwcm9ibGVtIGF0IGh0dHA6Ly9kYXJ0YnVnLmNvbS9uZXcuX3dpdGhBcmd1bWVudHNJbml0aWFsaXplRnJvbURpbGxVbmtub3duUHJvYmxlbSksIGJ1dCBjb3VsZG4ndC4KRXJyb3IgbWVzc2FnZSB3YXMgJycuClN0YWNrdHJhY2UgaW5jbHVkZWQgJycuClRoaXMgbWlnaHQgYmUgYSBidWcuCgpUaGUgRGFydCB0ZWFtIHdvdWxkIGdyZWF0bHkgYXBwcmVjaWF0ZSBpdCBpZiB5b3Ugd291bGQgdGFrZSBhIG1vbWVudCB0byByZXBvcnQgdGhpcyBwcm9ibGVtIGF0IGh0dHA6Ly9kYXJ0YnVnLmNvbS9uZXcuCklmIHlvdSBhcmUgY29tZm9ydGFibGUgd2l0aCBpdCwgaXQgd291bGQgaW1wcm92ZSB0aGUgY2hhbmNlcyBvZiBmaXhpbmcgYW55IGJ1ZyBpZiB5b3UgaW5jbHVkZWQgdGhlIGZpbGUgX3dpdGhBcmd1bWVudHNJbml0aWFsaXplRnJvbURpbGxVbmtub3duUHJvYmxlbU5vRHVtcCcuClRoaXMgbWlnaHQgYmUgYSBidWcuCgpUaGUgRGFydCB0ZWFtIHdvdWxkIGdyZWF0bHkgYXBwcmVjaWF0ZSBpdCBpZiB5b3Ugd291bGQgdGFrZSBhIG1vbWVudCB0byByZXBvcnQgdGhpcyBwcm9ibGVtIGF0IGh0dHA6Ly9kYXJ0YnVnLmNvbS9uZXcuX3dpdGhBcmd1bWVudHNJbml0aWFsaXplckZvclN0YXRpY0ZpZWxkJyBpc24ndCBhbiBpbnN0YW5jZSBmaWVsZCBvZiB0aGlzIGNsYXNzLl93aXRoQXJndW1lbnRzSW5pdGlhbGl6ZXJPdXRzaWRlQ29uc3RydWN0b3JPbmx5IGNvbnN0cnVjdG9ycyBjYW4gaGF2ZSBpbml0aWFsaXplcnMsIGFuZCAnJyBpcyBub3QgYSBjb25zdHJ1Y3Rvci5fd2l0aEFyZ3VtZW50c0luaXRpYWxpemluZ0Zvcm1hbFR5cGVNaXNtYXRjaFRoZSB0eXBlIG9mIHBhcmFtZXRlciAnJywgJycgaXMgbm90IGEgc3VidHlwZSBvZiB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCdzIHR5cGUsICdUcnkgY2hhbmdpbmcgdGhlIHR5cGUgb2YgcGFyYW1ldGVyICcnIHRvIGEgc3VidHlwZSBvZiAnX3dpdGhBcmd1bWVudHNJbnB1dEZpbGVOb3RGb3VuZElucHV0IGZpbGUgbm90IGZvdW5kOiBfd2l0aEFyZ3VtZW50c0ludGVnZXJMaXRlcmFsSXNPdXRPZlJhbmdlVGhlIGludGVnZXIgbGl0ZXJhbCAgY2FuJ3QgYmUgcmVwcmVzZW50ZWQgaW4gNjQgYml0cy5fd2l0aEFyZ3VtZW50c0ludGVyZmFjZUNoZWNrQ29udGV4dEJvdGggbWVtYmVycyBhcmUgaW5oZXJpdGVkIGJ5IHRoZSBub24tYWJzdHJhY3QgY2xhc3MgJ193aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtQ29uc3RydWN0b3JOb3RGb3VuZE5vIGNvbnN0cnVjdG9yIG5hbWVkICcnIGluICdfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbUNvbnRleHRTZXZlcml0eU5vbi1jb250ZXh0IG1lc3NhZ2UgaGFzIGNvbnRleHQgc2V2ZXJpdHk6IF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtRGVidWdBYm9ydENvbXBpbGF0aW9uIGFib3J0ZWQgZHVlIHRvIGZhdGFsICcnIGF0Ogpfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbU5vSW5mZXJyZWRUeXBlU3RvcmVkVGhlcmUncyBubyBpbmZlcnJlZCB0eXBlIGZvciAnX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1Ob3RGb3VuZENvdWxkbid0IGZpbmQgJ193aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtTm90Rm91bmRJbl93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtUHJpdmF0ZUNvbnN0cnVjdG9yQWNjZXNzQ2FuJ3QgYWNjZXNzIHByaXZhdGUgY29uc3RydWN0b3IgJ193aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtU3RhY2tOb3RFbXB0eS5zdGFjayBpc24ndCBlbXB0eToKICBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVN0b3JpbmdNdWx0aXBsZUluZmVycmVkVHlwZXNUaGVyZSdzIGFscmVhZHkgYW4gaW5mZXJyZWQgdHlwZSwgJycsIGZvciAnX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1VbmV4cGVjdGVkJywgYnV0IGdvdCAnX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1VbmhhbmRsZWRVbmhhbmRsZWQgX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1VbmltcGxlbWVudGVkVW5pbXBsZW1lbnRlZCBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVVuc3VwcG9ydGVkVW5zdXBwb3J0ZWQgb3BlcmF0aW9uOiAnX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1VcmlNaXNzaW5nU2NoZW1lVGhlIFVSSSAnJyBoYXMgbm8gc2NoZW1lLl93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtVmVyaWZpY2F0aW9uRXJyb3JWZXJpZmljYXRpb24gb2YgdGhlIGdlbmVyYXRlZCBwcm9ncmFtIGZhaWxlZDoKX3dpdGhBcmd1bWVudHNJbnRlcnNlY3Rpb25UeXBlQXNUeXBlQXJndW1lbnQnLCBpdCBjYW4gYmUgZWl0aGVyICcnIG9yICdfd2l0aEFyZ3VtZW50c0ludmFsaWRBc3NpZ25tZW50VHJ5IGNoYW5naW5nIHRoZSB0eXBlIG9mIHRoZSBsZWZ0IGhhbmQgc2lkZSwgb3IgY2FzdGluZyB0aGUgcmlnaHQgaGFuZCBzaWRlIHRvICdfd2l0aEFyZ3VtZW50c0ludmFsaWRCcmVha1RhcmdldF93aXRoQXJndW1lbnRzSW52YWxpZENhc3RGdW5jdGlvbkV4cHJUaGUgZnVuY3Rpb24gZXhwcmVzc2lvbiB0eXBlICcnIGlzbid0IG9mIGV4cGVjdGVkIHR5cGUgJ193aXRoQXJndW1lbnRzSW52YWxpZENhc3RMaXRlcmFsTGlzdFRoZSBsaXN0IGxpdGVyYWwgdHlwZSAnX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdExpdGVyYWxNYXBUaGUgbWFwIGxpdGVyYWwgdHlwZSAnX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdExpdGVyYWxTZXRUaGUgc2V0IGxpdGVyYWwgdHlwZSAnX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdExvY2FsRnVuY3Rpb25UaGUgbG9jYWwgZnVuY3Rpb24gaGFzIHR5cGUgJycgdGhhdCBpc24ndCBvZiBleHBlY3RlZCB0eXBlICdfd2l0aEFyZ3VtZW50c0ludmFsaWRDYXN0TmV3RXhwclRoZSBjb25zdHJ1Y3RvciByZXR1cm5zIHR5cGUgJ193aXRoQXJndW1lbnRzSW52YWxpZENhc3RTdGF0aWNNZXRob2RUaGUgc3RhdGljIG1ldGhvZCBoYXMgdHlwZSAnX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdFRvcExldmVsRnVuY3Rpb25UaGUgdG9wIGxldmVsIGZ1bmN0aW9uIGhhcyB0eXBlICdfd2l0aEFyZ3VtZW50c0ludmFsaWRDb250aW51ZVRhcmdldF93aXRoQXJndW1lbnRzSW52YWxpZE9wZXJhdG9yVGhlIHN0cmluZyAnJyBpc24ndCBhIHVzZXItZGVmaW5hYmxlIG9wZXJhdG9yLl93aXRoQXJndW1lbnRzSW52YWxpZFBhY2thZ2VVcmlJbnZhbGlkIHBhY2thZ2UgVVJJICdfd2l0aEFyZ3VtZW50c0ludm9rZU5vbkZ1bmN0aW9uJyBpc24ndCBhIGZ1bmN0aW9uIG9yIG1ldGhvZCBhbmQgY2FuJ3QgYmUgaW52b2tlZC5fd2l0aEFyZ3VtZW50c0xhYmVsTm90Rm91bmRDYW4ndCBmaW5kIGxhYmVsICdfd2l0aEFyZ3VtZW50c0xhbmd1YWdlVmVyc2lvblRvb0hpZ2hUaGUgc3BlY2lmaWVkIGxhbmd1YWdlIHZlcnNpb24gaXMgdG9vIGhpZ2guIFRoZSBoaWdoZXN0IHN1cHBvcnRlZCBsYW5ndWFnZSB2ZXJzaW9uIGlzIF93aXRoQXJndW1lbnRzTG9hZExpYnJhcnlIaWRlc01lbWJlclRoZSBsaWJyYXJ5ICcnIGRlZmluZXMgYSB0b3AtbGV2ZWwgbWVtYmVyIG5hbWVkICdsb2FkTGlicmFyeScuIFRoaXMgbWVtYmVyIGlzIGhpZGRlbiBieSB0aGUgc3BlY2lhbCBtZW1iZXIgJ2xvYWRMaWJyYXJ5JyB0aGF0IHRoZSBsYW5ndWFnZSBhZGRzIHRvIHN1cHBvcnQgZGVmZXJyZWQgbG9hZGluZy5fd2l0aEFyZ3VtZW50c0xvY2FsRGVmaW5pdGlvbkhpZGVzRXhwb3J0TG9jYWwgZGVmaW5pdGlvbiBvZiAnJyBoaWRlcyBleHBvcnQgZnJvbSAnX3dpdGhBcmd1bWVudHNMb2NhbERlZmluaXRpb25IaWRlc0ltcG9ydCcgaGlkZXMgaW1wb3J0IGZyb20gJ193aXRoQXJndW1lbnRzTWV0aG9kTm90Rm91bmRNZXRob2Qgbm90IGZvdW5kOiAnX3dpdGhBcmd1bWVudHNNaXNzaW5nRXhwbGljaXRUeXBlQXJndW1lbnRzTm8gdHlwZSBhcmd1bWVudHMgcHJvdmlkZWQsICBwb3NzaWJsZS5fd2l0aEFyZ3VtZW50c01pc3NpbmdJbXBsZW1lbnRhdGlvbkNhdXNlJyBpcyBkZWZpbmVkIGhlcmUuX3dpdGhBcmd1bWVudHNNaXNzaW5nSW1wbGVtZW50YXRpb25Ob3RBYnN0cmFjdF9uYW1lc05vIG5hbWVzIHByb3ZpZGVkVGhlIG5vbi1hYnN0cmFjdCBjbGFzcyAnJyBpcyBtaXNzaW5nIGltcGxlbWVudGF0aW9ucyBmb3IgdGhlc2UgbWVtYmVyczoKX3dpdGhBcmd1bWVudHNNaXNzaW5nUGFydE9mJyBhcyBhIHBhcnQsIGJlY2F1c2UgaXQgaGFzIG5vICdwYXJ0IG9mJyBkZWNsYXJhdGlvbi5fd2l0aEFyZ3VtZW50c01peGluQXBwbGljYXRpb25JbmNvbXBhdGlibGVTdXBlcnR5cGUnIGRvZXNuJ3QgaW1wbGVtZW50ICcnIHNvIGl0IGNhbid0IGJlIHVzZWQgd2l0aCAnX3dpdGhBcmd1bWVudHNNaXhpbkluZmVyZW5jZU5vTWF0Y2hpbmdDbGFzc1R5cGUgcGFyYW1ldGVycyBjb3VsZCBub3QgYmUgaW5mZXJyZWQgZm9yIHRoZSBtaXhpbiAnJyBiZWNhdXNlICcnIGRvZXMgbm90IGltcGxlbWVudCB0aGUgbWl4aW4ncyBzdXBlcnR5cGUgY29uc3RyYWludCAnX3dpdGhBcmd1bWVudHNNb2RpZmllck91dE9mT3JkZXInIHNob3VsZCBiZSBiZWZvcmUgdGhlIG1vZGlmaWVyICdfd2l0aEFyZ3VtZW50c05hbWVkTWl4aW5PdmVycmlkZUNvbnRleHRPdmVycmlkZSB3YXMgaW50cm9kdWNlZCBpbiB0aGUgbWl4aW4gYXBwbGljYXRpb24gY2xhc3MgJ193aXRoQXJndW1lbnRzTm9Gb3JtYWxzVHJ5IGFkZGluZyAnKCknIGFmdGVyICcnLCBvciBhZGQgJ2dldCcgYmVmb3JlICcnIHRvIGRlY2xhcmUgYSBnZXR0ZXIuX3dpdGhBcmd1bWVudHNOb1N1Y2hOYW1lZFBhcmFtZXRlck5vIG5hbWVkIHBhcmFtZXRlciB3aXRoIHRoZSBuYW1lICdfd2l0aEFyZ3VtZW50c05vbkFzY2lpSWRlbnRpZmllcmNoYXJhY3RlcnJ1bmVzTm90IGEgY2hhcmFjdGVyICdUaGUgbm9uLUFTQ0lJIGNoYXJhY3RlciAnJyAoKSBjYW4ndCBiZSB1c2VkIGluIGlkZW50aWZpZXJzLCBvbmx5IGluIHN0cmluZ3MgYW5kIGNvbW1lbnRzLl93aXRoQXJndW1lbnRzTm9uQXNjaWlXaGl0ZXNwYWNlVGhlIG5vbi1BU0NJSSBzcGFjZSBjaGFyYWN0ZXIgX3dpdGhBcmd1bWVudHNOb25TaW1wbGVCb3VuZFZpYVJlZmVyZW5jZUJvdW5kIG9mIHRoaXMgdmFyaWFibGUgcmVmZXJlbmNlcyByYXcgdHlwZSAnX3dpdGhBcmd1bWVudHNOb25TaW1wbGVCb3VuZFZpYVZhcmlhYmxlQm91bmQgb2YgdGhpcyB2YXJpYWJsZSByZWZlcmVuY2VzIHZhcmlhYmxlICcnIGZyb20gdGhlIHNhbWUgZGVjbGFyYXRpb24uX3dpdGhBcmd1bWVudHNOb3RBUHJlZml4SW5UeXBlQW5ub3RhdGlvbicgY2FuJ3QgYmUgdXNlZCBhcyBhIHR5cGUgYmVjYXVzZSAnJyBkb2Vzbid0IHJlZmVyIHRvIGFuIGltcG9ydCBwcmVmaXguX3dpdGhBcmd1bWVudHNOb3RBVHlwZScgaXNuJ3QgYSB0eXBlLl93aXRoQXJndW1lbnRzTm90QmluYXJ5T3BlcmF0b3InIGlzbid0IGEgYmluYXJ5IG9wZXJhdG9yLl93aXRoQXJndW1lbnRzTm90Q29uc3RhbnRFeHByZXNzaW9uIGlzIG5vdCBhIGNvbnN0YW50IGV4cHJlc3Npb24uX3dpdGhBcmd1bWVudHNPcGVyYXRvck1pbnVzUGFyYW1ldGVyTWlzbWF0Y2hPcGVyYXRvciAnJyBzaG91bGQgaGF2ZSB6ZXJvIG9yIG9uZSBwYXJhbWV0ZXIuX3dpdGhBcmd1bWVudHNPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMCcgc2hvdWxkbid0IGhhdmUgYW55IHBhcmFtZXRlcnMuX3dpdGhBcmd1bWVudHNPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMScgc2hvdWxkIGhhdmUgZXhhY3RseSBvbmUgcGFyYW1ldGVyLl93aXRoQXJndW1lbnRzT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDInIHNob3VsZCBoYXZlIGV4YWN0bHkgdHdvIHBhcmFtZXRlcnMuX3dpdGhBcmd1bWVudHNPdmVycmlkZGVuTWV0aG9kQ2F1c2VUaGlzIGlzIHRoZSBvdmVycmlkZGVuIG1ldGhvZCAoJycpLl93aXRoQXJndW1lbnRzT3ZlcnJpZGVGZXdlck5hbWVkQXJndW1lbnRzJyBoYXMgZmV3ZXIgbmFtZWQgYXJndW1lbnRzIHRoYW4gdGhvc2Ugb2Ygb3ZlcnJpZGRlbiBtZXRob2QgJ193aXRoQXJndW1lbnRzT3ZlcnJpZGVGZXdlclBvc2l0aW9uYWxBcmd1bWVudHMnIGhhcyBmZXdlciBwb3NpdGlvbmFsIGFyZ3VtZW50cyB0aGFuIHRob3NlIG9mIG92ZXJyaWRkZW4gbWV0aG9kICdfd2l0aEFyZ3VtZW50c092ZXJyaWRlTWlzbWF0Y2hOYW1lZFBhcmFtZXRlcicgZG9lc24ndCBoYXZlIHRoZSBuYW1lZCBwYXJhbWV0ZXIgJycgb2Ygb3ZlcnJpZGRlbiBtZXRob2QgJ193aXRoQXJndW1lbnRzT3ZlcnJpZGVNb3JlUmVxdWlyZWRBcmd1bWVudHMnIGhhcyBtb3JlIHJlcXVpcmVkIGFyZ3VtZW50cyB0aGFuIHRob3NlIG9mIG92ZXJyaWRkZW4gbWV0aG9kICdfd2l0aEFyZ3VtZW50c092ZXJyaWRlVHlwZU1pc21hdGNoUGFyYW1ldGVyVGhlIHBhcmFtZXRlciAnJyBvZiB0aGUgbWV0aG9kICcnIGhhcyB0eXBlICcnLCB3aGljaCBkb2VzIG5vdCBtYXRjaCB0aGUgY29ycmVzcG9uZGluZyB0eXBlLCAnJywgaW4gdGhlIG92ZXJyaWRkZW4gbWV0aG9kLCAnQ2hhbmdlIHRvIGEgc3VwZXJ0eXBlIG9mICcnLCBvciwgZm9yIGEgY292YXJpYW50IHBhcmFtZXRlciwgYSBzdWJ0eXBlLl93aXRoQXJndW1lbnRzT3ZlcnJpZGVUeXBlTWlzbWF0Y2hSZXR1cm5UeXBlVGhlIHJldHVybiB0eXBlIG9mIHRoZSBtZXRob2QgJycgaXMgJycsIHdoaWNoIGRvZXMgbm90IG1hdGNoIHRoZSByZXR1cm4gdHlwZSwgJycsIG9mIHRoZSBvdmVycmlkZGVuIG1ldGhvZCwgJ0NoYW5nZSB0byBhIHN1YnR5cGUgb2YgJ193aXRoQXJndW1lbnRzT3ZlcnJpZGVUeXBlVmFyaWFibGVzTWlzbWF0Y2hEZWNsYXJlZCB0eXBlIHZhcmlhYmxlcyBvZiAnJyBkb2Vzbid0IG1hdGNoIHRob3NlIG9uIG92ZXJyaWRkZW4gbWV0aG9kICdfd2l0aEFyZ3VtZW50c1BhY2thZ2VOb3RGb3VuZENvdWxkIG5vdCByZXNvbHZlIHRoZSBwYWNrYWdlICdfd2l0aEFyZ3VtZW50c1BhY2thZ2VzRmlsZUZvcm1hdFByb2JsZW0gaW4gcGFja2FnZXMgY29uZmlndXJhdGlvbiBmaWxlOiBfd2l0aEFyZ3VtZW50c1BhcnRPZkluTGlicmFyeUNhbid0IGltcG9ydCAnJywgYmVjYXVzZSBpdCBoYXMgYSAncGFydCBvZicgZGVjbGFyYXRpb24uVHJ5IHJlbW92aW5nIHRoZSAncGFydCBvZicgZGVjbGFyYXRpb24sIG9yIHVzaW5nICcnIGFzIGEgcGFydC5fd2l0aEFyZ3VtZW50c1BhcnRPZkxpYnJhcnlOYW1lTWlzbWF0Y2hVc2luZyAnJyBhcyBwYXJ0IG9mICcnIGJ1dCBpdHMgJ3BhcnQgb2YnIGRlY2xhcmF0aW9uIHNheXMgJ193aXRoQXJndW1lbnRzUGFydE9mVXJpTWlzbWF0Y2h1cmkzX3VyaTNfd2l0aEFyZ3VtZW50c1BhcnRPZlVzZVVyaV93aXRoQXJndW1lbnRzUGFydFR3aWNlJyBhcyBhIHBhcnQgbW9yZSB0aGFuIG9uY2UuX3dpdGhBcmd1bWVudHNQYXRjaEluamVjdGlvbkZhaWxlZENhbid0IGluamVjdCAnJyBpbnRvICdfd2l0aEFyZ3VtZW50c1JlZGlyZWN0aW5nRmFjdG9yeUluY29tcGF0aWJsZVR5cGVBcmd1bWVudCcgZG9lc24ndCBleHRlbmQgJ193aXRoQXJndW1lbnRzUmVkaXJlY3Rpb25UYXJnZXROb3RGb3VuZFJlZGlyZWN0aW9uIGNvbnN0cnVjdG9yIHRhcmdldCBub3QgZm91bmQ6ICdfd2l0aEFyZ3VtZW50c1Nka1Jvb3ROb3RGb3VuZFNESyByb290IGRpcmVjdG9yeSBub3QgZm91bmQ6IF93aXRoQXJndW1lbnRzU2RrU3BlY2lmaWNhdGlvbk5vdEZvdW5kU0RLIGxpYnJhcmllcyBzcGVjaWZpY2F0aW9uIG5vdCBmb3VuZDogX3dpdGhBcmd1bWVudHNTZGtTdW1tYXJ5Tm90Rm91bmRTREsgc3VtbWFyeSBub3QgZm91bmQ6IF93aXRoQXJndW1lbnRzU2V0dGVyTm90Rm91bmRTZXR0ZXIgbm90IGZvdW5kOiAnX3dpdGhBcmd1bWVudHNTb3VyY2VCb2R5U3VtbWFyeUJ1aWx0IGJvZGllcyBmb3IgIGNvbXBpbGF0aW9uIHVuaXRzICggbXMvY29tcGlsYXRpb24gdW5pdC5fd2l0aEFyZ3VtZW50c1NvdXJjZU91dGxpbmVTdW1tYXJ5QnVpbHQgb3V0bGluZXMgZm9yIF93aXRoQXJndW1lbnRzU3ByZWFkRWxlbWVudFR5cGVNaXNtYXRjaENhbid0IGFzc2lnbiBzcHJlYWQgZWxlbWVudHMgb2YgdHlwZSAnJyB0byBjb2xsZWN0aW9uIGVsZW1lbnRzIG9mIHR5cGUgJ193aXRoQXJndW1lbnRzU3ByZWFkTWFwRW50cnlFbGVtZW50S2V5VHlwZU1pc21hdGNoQ2FuJ3QgYXNzaWduIHNwcmVhZCBlbnRyeSBrZXlzIG9mIHR5cGUgJycgdG8gbWFwIGVudHJ5IGtleXMgb2YgdHlwZSAnX3dpdGhBcmd1bWVudHNTcHJlYWRNYXBFbnRyeUVsZW1lbnRWYWx1ZVR5cGVNaXNtYXRjaENhbid0IGFzc2lnbiBzcHJlYWQgZW50cnkgdmFsdWVzIG9mIHR5cGUgJycgdG8gbWFwIGVudHJ5IHZhbHVlcyBvZiB0eXBlICdfd2l0aEFyZ3VtZW50c1NwcmVhZE1hcEVudHJ5VHlwZU1pc21hdGNoVW5leHBlY3RlZCB0eXBlICcnIG9mIGEgbWFwIHNwcmVhZCBlbnRyeS4gIEV4cGVjdGVkICdkeW5hbWljJyBvciBhIE1hcC5fd2l0aEFyZ3VtZW50c1NwcmVhZFR5cGVNaXNtYXRjaCcgb2YgYSBzcHJlYWQuICBFeHBlY3RlZCAnZHluYW1pYycgb3IgYW4gSXRlcmFibGUuX3dpdGhBcmd1bWVudHNTdXBlcmNsYXNzSGFzTm9Db25zdHJ1Y3RvclN1cGVyY2xhc3MgaGFzIG5vIGNvbnN0cnVjdG9yIG5hbWVkICdfd2l0aEFyZ3VtZW50c1N1cGVyY2xhc3NIYXNOb0RlZmF1bHRDb25zdHJ1Y3RvclRoZSBzdXBlcmNsYXNzLCAnJywgaGFzIG5vIHVubmFtZWQgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBubyBhcmd1bWVudHMuX3dpdGhBcmd1bWVudHNTdXBlcmNsYXNzSGFzTm9HZXR0ZXJTdXBlcmNsYXNzIGhhcyBubyBnZXR0ZXIgbmFtZWQgJ193aXRoQXJndW1lbnRzU3VwZXJjbGFzc0hhc05vTWV0aG9kU3VwZXJjbGFzcyBoYXMgbm8gbWV0aG9kIG5hbWVkICdfd2l0aEFyZ3VtZW50c1N1cGVyY2xhc3NIYXNOb1NldHRlclN1cGVyY2xhc3MgaGFzIG5vIHNldHRlciBuYW1lZCAnX3dpdGhBcmd1bWVudHNTdXBlcmNsYXNzTWV0aG9kQXJndW1lbnRNaXNtYXRjaFN1cGVyY2xhc3MgZG9lc24ndCBoYXZlIGEgbWV0aG9kIG5hbWVkICcnIHdpdGggbWF0Y2hpbmcgYXJndW1lbnRzLl93aXRoQXJndW1lbnRzU3VwZXJ0eXBlSXNJbGxlZ2FsJyBjYW4ndCBiZSB1c2VkIGFzIHN1cGVydHlwZS5fd2l0aEFyZ3VtZW50c1N1cGVydHlwZUlzVHlwZVZhcmlhYmxlVGhlIHR5cGUgdmFyaWFibGUgJ193aXRoQXJndW1lbnRzU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGUnIG9mIHRoZSBzd2l0Y2ggZXhwcmVzc2lvbiBpc24ndCBhc3NpZ25hYmxlIHRvIHRoZSB0eXBlICcnIG9mIHRoaXMgY2FzZSBleHByZXNzaW9uLl93aXRoQXJndW1lbnRzVGhpc0FjY2Vzc0luRmllbGRJbml0aWFsaXplckNhbid0IGFjY2VzcyAndGhpcycgaW4gYSBmaWVsZCBpbml0aWFsaXplciB0byByZWFkICdfd2l0aEFyZ3VtZW50c1RoaXNPclN1cGVyQWNjZXNzSW5GaWVsZEluaXRpYWxpemVyQ2FuJ3QgYWNjZXNzICcnIGluIGEgZmllbGQgaW5pdGlhbGl6ZXIuX3dpdGhBcmd1bWVudHNUb29GZXdBcmd1bWVudHNUb28gZmV3IHBvc2l0aW9uYWwgYXJndW1lbnRzOiAgcmVxdWlyZWQsICBnaXZlbi5fd2l0aEFyZ3VtZW50c1Rvb01hbnlBcmd1bWVudHNUb28gbWFueSBwb3NpdGlvbmFsIGFyZ3VtZW50czogIGFsbG93ZWQsIGJ1dCAgZm91bmQuX3dpdGhBcmd1bWVudHNUeXBlQXJndW1lbnRNaXNtYXRjaEV4cGVjdGVkICB0eXBlIGFyZ3VtZW50cy5fd2l0aEFyZ3VtZW50c1R5cGVBcmd1bWVudHNPblR5cGVWYXJpYWJsZUNhbid0IHVzZSB0eXBlIGFyZ3VtZW50cyB3aXRoIHR5cGUgdmFyaWFibGUgJ193aXRoQXJndW1lbnRzVHlwZU5vdEZvdW5kJyBub3QgZm91bmQuX3dpdGhBcmd1bWVudHNUeXBlT3JpZ2luJyBpcyBmcm9tICdfd2l0aEFyZ3VtZW50c1R5cGVPcmlnaW5XaXRoRmlsZVVyaV93aXRoQXJndW1lbnRzVHlwZVZhcmlhYmxlRHVwbGljYXRlZE5hbWVDYXVzZVRoZSBvdGhlciB0eXBlIHZhcmlhYmxlIG5hbWVkICdfd2l0aEFyZ3VtZW50c1VuZGVmaW5lZEdldHRlclRoZSBnZXR0ZXIgJycgaXNuJ3QgZGVmaW5lZCBmb3IgdGhlIGNsYXNzICdUcnkgY29ycmVjdGluZyB0aGUgbmFtZSB0byB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBnZXR0ZXIsIG9yIGRlZmluaW5nIGEgZ2V0dGVyIG9yIGZpZWxkIG5hbWVkICdfd2l0aEFyZ3VtZW50c1VuZGVmaW5lZE1ldGhvZFRyeSBjb3JyZWN0aW5nIHRoZSBuYW1lIHRvIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIG1ldGhvZCwgb3IgZGVmaW5pbmcgYSBtZXRob2QgbmFtZWQgJ193aXRoQXJndW1lbnRzVW5kZWZpbmVkU2V0dGVyVGhlIHNldHRlciAnVHJ5IGNvcnJlY3RpbmcgdGhlIG5hbWUgdG8gdGhlIG5hbWUgb2YgYW4gZXhpc3Rpbmcgc2V0dGVyLCBvciBkZWZpbmluZyBhIHNldHRlciBvciBmaWVsZCBuYW1lZCAnX3dpdGhBcmd1bWVudHNVbmV4cGVjdGVkVG9rZW5VbmV4cGVjdGVkIHRva2VuICdfd2l0aEFyZ3VtZW50c1VubWF0Y2hlZFRva2VuQ2FuJ3QgZmluZCAnJyB0byBtYXRjaCAnX3dpdGhBcmd1bWVudHNVbnJlc29sdmVkUHJlZml4SW5UeXBlQW5ub3RhdGlvbicgaXNuJ3QgZGVmaW5lZC5fd2l0aEFyZ3VtZW50c1Vuc3BlY2lmaWVkX3dpdGhBcmd1bWVudHNVbnN1cHBvcnRlZE9wZXJhdG9yJyBvcGVyYXRvciBpcyBub3Qgc3VwcG9ydGVkLl93aXRoQXJndW1lbnRzVW50ZXJtaW5hdGVkU3RyaW5nU3RyaW5nIHN0YXJ0aW5nIHdpdGggIG11c3QgZW5kIHdpdGggX3dpdGhBcmd1bWVudHNVbnRyYW5zbGF0YWJsZVVyaU5vdCBmb3VuZDogJ193aXRoQXJndW1lbnRzVXNlT2ZEZXByZWNhdGVkSWRlbnRpZmllcicgaXMgZGVwcmVjYXRlZC5fd2l0aEFyZ3VtZW50c1dlYkxpdGVyYWxDYW5ub3RCZVJlcHJlc2VudGVkRXhhY3RseSBjYW4ndCBiZSByZXByZXNlbnRlZCBleGFjdGx5IGluIEphdmFTY3JpcHQuVHJ5IGNoYW5naW5nIHRoZSBsaXRlcmFsIHRvIHNvbWV0aGluZyB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBpbiBKYXZhc2NyaXB0LiBJbiBKYXZhc2NyaXB0ICBpcyB0aGUgbmVhcmVzdCB2YWx1ZSB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBleGFjdGx5LmZhc3RhLnNldmVyaXR5ZXJyb3JMZWdhY3lXYXJuaW5naW50ZXJuYWxQcm9ibGVtc2V2ZXJpdHlFbnVtTmFtZXNDT05URVhURVJST1JFUlJPUl9MRUdBQ1lfV0FSTklOR0lHTk9SRURJTlRFUk5BTF9QUk9CTEVNV0FSTklOR3NldmVyaXR5RW51bVZhbHVlc3NldmVyaXR5UHJlZml4ZXNFcnJvckludGVybmFsIHByb2JsZW1XYXJuaW5nQ29udGV4dHNldmVyaXR5VGV4dHNpbnRlcm5hbCBwcm9ibGVtZnJvbnRfZW5kLmtlcm5lbF9nZW5lcmF0b3JfaW1wbHdpdGhDcmFzaFJlcG9ydGluZ0RpbGxUYXJnZXRLZXJuZWxUYXJnZXRwcmludENvbXBvbmVudFRleHRzZXJpYWxpemVDb21wb25lbnR2ZXJpZnlDb21wb25lbnRMb2FkZXJJbnRlcm5hbENvbXBpbGVyUmVzdWx0a2VybmVsVGFyZ2V0Rm9yVGVzdGluZ2J1aWxkU3VtbWFyeWJ1aWxkQ29tcG9uZW50dHJ1bmNhdGVTdW1tYXJ5aW5jbHVkZU9mZnNldHNmc3NvdXJjZUxvYWRlcnVyaVRyYW5zbGF0b3JkaWxsVGFyZ2V0ZXh0ZXJuYWxMaWJzdG9TZXRleGNsdWRlZGxvYWRlcmFwcGVuZExpYnJhcmllc2ZpbHRlcmlucHV0U3VtbWFyeWJ1aWxkT3V0bGluZXNrZXJuZWxUYXJnZXRzZXRFbnRyeVBvaW50c3N1bW1hcnlDb21wb25lbnRsaWJyYXJ5RmlsdGVyaXNTb3VyY2VMaWJyYXJ5dHJpbW1lZFN1bW1hcnlDb21wb25lbnRUcmFuc2Zvcm1lZCBvdXRsaW5laW5jbHVkZVNvdXJjZXNHZW5lcmF0ZWQgb3V0bGluZUdlbmVyYXRlZCBjb21wb25lbnRjdXJyZW50VXJpRm9yQ3Jhc2hSZXBvcnRpbmdmYXN0YS5zY2FubmVydW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyUnVuZUxhbmd1YWdlVmVyc2lvbkNoYW5nZWRTY2FubmVyQ29uZmlndXJhdGlvblN0cmluZ1NjYW5uZXJVdGY4Qnl0ZXNTY2FubmVyc2Nhbm5lclJlY292ZXJ5TGFuZ3VhZ2VWZXJzaW9uVG9rZW5pc0JpbmFyeU9wZXJhdG9yaXNUZXJuYXJ5T3BlcmF0b3Jpc1VuYXJ5T3BlcmF0b3JidWlsZFVuZXhwZWN0ZWRDaGFyYWN0ZXJUb2tlbkVPRl9UT0tFTktleXdvcmRSZWNvdmVydG9rZW5zU2Nhbm5lcmhhc0Vycm9yc2NvbmZpZ3VyYXRpb25jb25maWd0b2tlbml6ZVNjYW5uZXJSZXN1bHR1bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXJzY2FuaW5jbHVkZUNvbW1lbnRzbGFuZ3VhZ2VWZXJzaW9uQ2hhbmdlZFtieXRlc106IHRoZSBsYXN0IGJ5dGUgbXVzdCBiZSBudWxsLnNjYW5uZXJzY2FuU3RyaW5nc291cmNlIG11c3Qgbm90IGJlIG51bGxfdG9rZW5pemVBbmRSZWNvdmVyZW5jb2RlZmFzdGEucmVkaXJlY3RpbmdfZmFjdG9yeV9ib2R5U3Vic3RpdHV0aW9uRW5zdXJlTG9hZGVkUmVkaXJlY3RpbmdGYWN0b3J5Qm9keWludGVybmFsdW5yZXNvbHZlZHVucmVzb2x2ZWROYW1lYm9keUV4cHJlc3Npb25nZXRWYWx1ZXJlc3RvcmVGcm9tRGlsbGVuY29kZVR5cGVBcmd1bWVudHN2YXJOYW1lUHJlZml4I3R5cGVBcmdkZWNvZGVUeXBlQXJndW1lbnRzZW5jb2RlZFJlZGlyZWN0aW9uVGFyZ2V0bGV0TmFtZWhlbHBlcmlzTG9hZGVkZ2V0UmVkaXJlY3RpbmdGYWN0b3J5Qm9keWdldFJlZGlyZWN0aW9uVGFyZ2V0dG9ydG9pc2V0b3J0b2lzZUJvZHloYXJlZW5zdXJlTG9hZGVkaGFyZUJvZHluZXh0VG9ydG9pc2VuZXh0VHlwZUFyZ3VtZW50c3N1YnR5cGVBcmd1bWVudENvdW50bmV4dFR5cGVBcmd1bWVudENvdW50SW5jcmVtZW50YWxDb21waWxlcndvcmtlcklucHV0Q2FjaGVpbmNyZW1lbnRhbENvbXBpbGVydGFnc2xpYnJhcnlUb0lucHV0RGlsbFdvcmtlcklucHV0Q29tcG9uZW50ZGlnZXN0ZGlnZXN0c0VxdWFsZnJvbnRfZW5kLnN0YW5kYXJkX2ZpbGVfc3lzdGVtaW9pbnN0YW5jZVN0YW5kYXJkRmlsZVN5c3RlbSBvbmx5IHN1cHBvcnRzIGZpbGU6KiBhbmQgZGF0YToqIFVSSXNfSW9GaWxlU3lzdGVtRW50aXR5X3RvRmlsZVN5c3RlbUV4Y2VwdGlvbm9zTWVzc2FnZWNvbnRlbnRBc0J5dGVzY29udGVudEFzU3RyaW5nZm9yY2VCdWlsZERpcnZtRGlyZWN0b3J5L2Jpbi8uLi8uLi8uLi9saWIvX2ludGVybmFsL3RyYW5zbGF0ZVNka29yZy1kYXJ0bGFuZy1zZGsvc2RrLy4uL3Nkay9saWIvbGlicmFyaWVzLmpzb25zZGsvb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvaXNFeGlzdGluZ0ZpbGVmYXN0YS5vcGVyYXRvcnNPcGVyYXRvci5hZGRPcGVyYXRvci5iaXR3aXNlQW5kT3BlcmF0b3IuYml0d2lzZU5vdE9wZXJhdG9yLmJpdHdpc2VPck9wZXJhdG9yLmJpdHdpc2VYb3JPcGVyYXRvci5kaXZpZGVPcGVyYXRvci5lcXVhbHNPcGVyYXRvci5ncmVhdGVyVGhhbk9wZXJhdG9yLmdyZWF0ZXJUaGFuRXF1YWxzT3BlcmF0b3IuaW5kZXhHZXRPcGVyYXRvci5pbmRleFNldE9wZXJhdG9yLmxlZnRTaGlmdE9wZXJhdG9yLmxlc3NUaGFuT3BlcmF0b3IubGVzc1RoYW5FcXVhbHNPcGVyYXRvci5tb2R1bG9PcGVyYXRvci5tdWx0aXBseU9wZXJhdG9yLnJpZ2h0U2hpZnRPcGVyYXRvci50cmlwbGVTaGlmdE9wZXJhdG9yLnN1YnRyYWN0T3BlcmF0b3IudHJ1bmNhdGluZ0RpdmlkZU9wZXJhdG9yLnVuYXJ5TWludXNiaXR3aXNlQW5kYml0d2lzZU5vdGJpdHdpc2VPcmJpdHdpc2VYb3JkaXZpZGVlcXVhbHNncmVhdGVyVGhhbmdyZWF0ZXJUaGFuRXF1YWxzaW5kZXhHZXRpbmRleFNldGxlZnRTaGlmdGxlc3NUaGFubGVzc1RoYW5FcXVhbHNtb2R1bG9tdWx0aXBseXJpZ2h0U2hpZnRzdWJ0cmFjdHRydW5jYXRpbmdEaXZpZGV1bmFyeU1pbnVzJT4+Pm9wZXJhdG9yVG9TdHJpbmdvcGVyYXRvclJlcXVpcmVkQXJndW1lbnRDb3VudGZhc3RhLnBhcnNlci5hc3luY19tb2RpZmllckFzeW5jTW9kaWZpZXIuU3luY0FzeW5jTW9kaWZpZXIuU3luY1N0YXJBc3luY01vZGlmaWVyLkFzeW5jQXN5bmNNb2RpZmllci5Bc3luY1N0YXJmYXN0YS5zY2FubmVyLmNoYXJhY3RlcnMkRU9GJFNUWCRCUyRWVEFCJEZGJFNQQUNFJEJBTkckUEVSQ0VOVCRBTVBFUlNBTkQkU1EkT1BFTl9QQVJFTiRDTE9TRV9QQVJFTiRTVEFSJFBMVVMkQ09NTUEkTUlOVVMkUEVSSU9EJFNMQVNIJDEkMiQzJDQkNSQ2JDckOCRDT0xPTiRTRU1JQ09MT04kTFQkRVEkR1QkUVVFU1RJT04kQVQkQiRDJEQkRSRGJEckSCRJJEokSyRMJE0kTiRPJFAkUSRSJFMkVCRVJFYkVyRYJFkkT1BFTl9TUVVBUkVfQlJBQ0tFVCRDTE9TRV9TUVVBUkVfQlJBQ0tFVCRDQVJFVCRCQUNLUElORyRiJGMkZCRlJGYkaCRpJGokayRsJG0kbiRvJHAkcSRyJHQkdSR2JHckeCR5JE9QRU5fQ1VSTFlfQlJBQ0tFVCRCQVIkQ0xPU0VfQ1VSTFlfQlJBQ0tFVCRUSUxERSROQlNQJEZJUlNUX1NVUlJPR0FURSRMQVNUX1NVUlJPR0FURSRMQVNUX0NPREVfUE9JTlRpc0RpZ2l0Y2hhcmFjdGVyQ29kZWlzSGV4RGlnaXRoZXhEaWdpdFZhbHVlaGV4RGlnaXRpc1VuaWNvZGVTY2FsYXJWYWx1ZWlzVXRmMTZMZWFkU3Vycm9nYXRlaXNVdGYxNlRyYWlsU3Vycm9nYXRlZmFzdGEudXRpbC5saW5rTGlua0J1aWxkZXJJbXBsZW1lbnRhdGlvbkxpbmtJdGVyYXRvck1hcHBlZExpbmtJdGVyYWJsZW5vIGVsZW1lbnRzZWxlbWVudHNlcGFyYXRlZEJ5c2xvd0xlbmd0aGxpbmtmbm1hcFRvTGlzdHJldmVyc2VyZXZlcnNlUHJlcGVuZEFsbGZyb21za2lwSW5kZXggIG91dCBvZiByYW5nZUxpbmsuaGFzaENvZGVnZXQ6bGVuZ3RoTm8gZWxlbWVudHNNb3JlIHRoYW4gb25lIGVsZW1lbnRldmVyeV91bnN1cHBvcnRlZGNhc3RlbGVtZW50QXRmaXJzdFdoZXJlb3JFbHNlaW5pdGlhbFZhbHVlZm9sbG93ZWRCeWdldDpsYXN0bGFzdFdoZXJlcmVkdWNlcmV0eXBlc2luZ2xlV2hlcmVza2lwV2hpbGV0YWtldGFrZVdoaWxld2hlcmVUeXBlbWV0aG9kX3JlZGlyZWN0aW5nIyN0eXBlQXJnMGZhc3RhLnV0aWwubGlua19pbXBsZW1lbnRhdGlvbkl0ZXJhYmxlQmFzZVRyYW5zZm9ybWF0aW9uU19saW5rTWFwcGVkTGlua0l0ZXJhdG9yX3RyYW5zZm9ybWF0aW9uWyAgXW15RWxlbWVudHNMaW5rRW50cnkuaGFzaENvZGVsYXN0TGlua2Zhc3RhLnV0aWwucmVsYXRpdml6ZWJhc2VlcXVhbHNOQ1N0b0xvd2VyQ2FzZW5vcm1hbGl6ZXVzZXJJbmZvaG9zdHBvcnRxdWVyeWZyYWdtZW50bGFzdEluZGV4T2Z1cmlQYXJ0c2Jhc2VQYXJ0c2NvbW1vbm5ld19hcGlDb21waWxlcklucHV0UHJvdmlkZXJSZWFkU3RyaW5nRnJvbVVyaUNvbXBpbGVyT3V0cHV0UHJvdmlkZXJEaWFnbm9zdGljSGFuZGxlckhJTlRWRVJCT1NFX0lORk9DUkFTSGxlZ19hcGlpbXBsR2VuZXJpY1Rhc2tNZWFzdXJlckNvbXBpbGVySW1wbG1lYXN1cmVydXNlckhhbmRsZXJUYXNrdXNlclByb3ZpZGVyVGFza21ha2VSZXBvcnRlcnRhc2tzRGlhZ25vc3RpYyBoYW5kbGVySW5wdXQgcHJvdmlkZXJlbmFibGVUYXNrTWVhc3VyZW1lbnRzbG9nY2FsbFVzZXJIYW5kbGVyc2V0dXBTZGtlbnZzdXBwb3J0ZWRMaWJyYXJpZXNzcGVjaWZpY2F0aW9uVXJpc2xvd1RleHRkYXJ0MmpzX3NlcnZlcmRhcnQyanNzZXR1cER1cmF0aW9uZWxhcHNlZFdhbGxDbG9ja3NlbGZUYXNrbWVhc3VyZVN1YnRhc2tpbXBsLnJ1bnRpbWluZ3Njb21wdXRlVGltaW5nc19mb3JtYXRNc21zVGltaW5nczp0b3RhbER1cmF0aW9uYXN5bmNEdXJhdGlvbmVsYXBzZWRBc3luY1dhbGxDbG9ja2N1bXVsYXRlZER1cmF0aW9udGltaW5nRGF0YXRhc2tydW5uaW5naXNSdW5uaW5nbWlsbGlzZWNvbmRzICAgc3VidGFza3N1YnRhc2tzc3VidGltZWdldFN1YnRhc2tUaW1lZ2V0U3VidGFza0lzUnVubmluZyA+IGxvbmdlc3REZXNjcmlwdGlvbmRkZXNjcmlwdGlvbnBhZGRpbmdwZXJjZW50UGFkZGluZ3BlcmNlbnQlKXVuYWNjb3VudGVkRHVyYXRpb24gICAgVG90YWwgY29tcGlsZS10aW1lIDsgc2V0dXAgIGFzeW5jICB1bmFjY291bnRlZCByZXBvcnREaWFnbm9zdGljaW5mb3NfcmVwb3J0RGlhZ25vc3RpY01lc3NhZ2VkaWFnbm9zdGljTWVzc2FnZXNwYW5zb3VyY2VTcGFubWVhc3VyZXJlcG9ydENyYXNoSW5Vc2VyQ29kZVVuY2F1Z2h0IGV4Y2VwdGlvbiBpbiBkaWFnbm9zdGljIGhhbmRsZXJjYWxsVXNlclByb3ZpZGVybWVhc3VyZUlvVW5jYXVnaHQgZXhjZXB0aW9uIGluIGlucHV0IHByb3ZpZGVyX0Vudmlyb25tZW50ZGVmaW5pdGlvbnNfY29tcGxldGVNYXB2YWx1ZU9mZGFydC5saWJyYXJ5LnRydWV0b01hcF9UaW1pbmdEYXRhX2RhcnRMaWJyYXJ5RW52aXJvbm1lbnRQcmVmaXhkYXJ0MmpzLmNvbG9yc1JFU0VUG1swbUJMQUNLX0NPTE9SG1szMG1SRURfQ09MT1IbWzMxbUdSRUVOX0NPTE9SG1szMm1ZRUxMT1dfQ09MT1IbWzMzbUJMVUVfQ09MT1IbWzM0bU1BR0VOVEFfQ09MT1IbWzM1bUNZQU5fQ09MT1IbWzM2bVdISVRFX0NPTE9SG1szN213cmFwYmxhY2tyZWRncmVlbnllbGxvd2JsdWVtYWdlbnRhY3lhbndoaXRlZGFydDJqcy5pby5zb3VyY2VfZmlsZUxvY2F0aW9uUHJvdmlkZXJTb3VyY2VGaWxlY2FjaGVkS2VybmVsU291cmNlbGluZVN0YXJ0c0NhY2hla2VybmVsU291cmNlc2xvd1V0ZjhaZXJvVGVybWluYXRlZEJ5dGVzbGluZVN0YXJ0c0Zyb21TdHJpbmdzdGFydHNzbG93U3Vic3RyaW5naW5jbHVkZVNvdXJjZUxpbmVzdGFydExvY2F0aW9uZW5kTG9jYXRpb25jb2x1bW5TdGFydGxpbmVFbmRjb2x1bW5FbmRidWZ0ZXh0TGluZXRvQ29sdW1ubGluZXNVdGY4Qnl0ZXNTb3VyY2VGaWxlemVyb1Rlcm1pbmF0ZWRDb250ZW50bGVuZ3RoQ2FjaGVjb250ZW50Q2FjaGluZ1V0ZjhCeXRlc1NvdXJjZUZpbGVTdHJpbmdTb3VyY2VGaWxlZnJvbVVyaWZyb21OYW1lQmluYXJ5X3plcm9UZXJtaW5hdGVJZk5lY2Vzc2FyeWRhcnQyanMudXRpbC5lbXB0eXNldEltbXV0YWJsZUVtcHR5U2V0Ul9pbW11dGFibGVFcnJvckVtcHR5U2V0IGlzIGltbXV0YWJsZWxvb2t1cHJlbW92ZUFsbHJlbW92ZVdoZXJldGVzdHJldGFpbkFsbHJldGFpbldoZXJldW5pb25pbnRlcnNlY3Rpb25kaWZmZXJlbmNlX0VtcHR5U2V0SXRlcmF0b3JkYXJ0MmpzLnV0aWwubWFwbGV0TWFwQmFzZU1hcGxldF9NQVJLRVJDQVBBQ0lUWV9rZXlfdmFsdWVfZXh0cmFyZW1haW5pbmdjb3B5VG9jb3B5RnJvbWVhY2hLZXllYWNoVmFsdWV2YWx1ZUluZGV4X01hcGxldE1hcmtlcl9NYXBsZXRLZXlJdGVyYWJsZW1hcGxldF9NYXBsZXRTaW5nbGVJdGVyYXRvcl9lbGVtZW50X01hcGxldExpc3RJdGVyYXRvcl9saXN0X3JlbWFpbmluZ19pbmRleGRhcnQyanMudXRpbC5zZXRsZXRTZXRCYXNlU2V0bGV0X2NvbnRlbnRzX25ld1NldG5ld1NldGVhY2hzZXRfU2V0bGV0TWFya2VyX1NldGxldFNpbmdsZUl0ZXJhdG9yX1NldGxldExpc3RJdGVyYXRvcmtlcm5lbC5hc3RfdG9fYmluYXJ5Qnl0ZXNCdWlsZGVyTGlicmFyeUZpbHRlckJpbmFyeVByaW50ZXJfdmFyaWFibGVJbmRleGVyX2xhYmVsSW5kZXhlcl9zd2l0Y2hDYXNlSW5kZXhlcl90eXBlUGFyYW1ldGVySW5kZXhlcnN0cmluZ0luZGV4ZXJfY29uc3RhbnRJbmRleGVyX3NvdXJjZVVyaUluZGV4ZXJfY3VycmVudGx5SW5Ob25pbXBsZW1lbnRhdGlvbl9zb3VyY2VzRnJvbVJlYWxJbXBsZW1lbnRhdGlvbl9zb3VyY2VzRnJvbVJlYWxJbXBsZW1lbnRhdGlvbkluTGlicmFyeV9saWJyYXJ5RGVwZW5kZW5jeUluZGV4X21ldGFkYXRhU3Vic2VjdGlvbnNfbWFpblNpbmtfbWV0YWRhdGFTaW5rX2NvbnN0YW50c0J5dGVzU2lua19jb25zdGFudHNTaW5rX3NpbmtsaWJyYXJ5T2Zmc2V0c2NsYXNzT2Zmc2V0c3Byb2NlZHVyZU9mZnNldHNfYmluYXJ5T2Zmc2V0Rm9yU291cmNlVGFibGVfYmluYXJ5T2Zmc2V0Rm9yTGlua1RhYmxlX2JpbmFyeU9mZnNldEZvck1ldGFkYXRhUGF5bG9hZHNfYmluYXJ5T2Zmc2V0Rm9yTWV0YWRhdGFNYXBwaW5nc19iaW5hcnlPZmZzZXRGb3JTdHJpbmdUYWJsZV9iaW5hcnlPZmZzZXRGb3JDb25zdGFudFRhYmxlX2Nhbm9uaWNhbE5hbWVMaXN0X2tub3duQ2Fub25pY2FsTmFtZU5vblJvb3RUb3BzX3JlaW5kZXhlZENhbm9uaWNhbE5hbWVzaW5zaWRlRXh0ZXJuYWxMaWJyYXJ5X2VtcHR5TmFtZV9mbHVzaGZsdXNoQW5kRGVzdHJveWFkZEJ5dGVhZGRCeXRlc2FkZEJ5dGUyYWRkQnl0ZTR1dGY4Qnl0ZXN3cml0ZVN0cmluZ1RhYmxlaW5kZXhlcnJlcXVpcmVkTWluTGVuZ3RoYWxsb2NhdGVNaW5MZW5ndGhuZXdJbmRleG5ld0xlbmd0aGNvbnZlcnRlZHB1dHdyaXRlU3RyaW5nUmVmZXJlbmNlTGlzdHN0cmluZ3N3cml0ZUNvbnN0YW50UmVmZXJlbmNld3JpdGVDb25zdGFudFRhYmxldGFrZUJ5dGVzd3JpdGVDb25zdGFudFRhYmxlRW50cnlvbGRTaW5raW5pdGlhbE9mZnNldHdyaXRlSW50ZWdlcndyaXRlRG91Ymxld3JpdGVOdWxsQWxsb3dlZFJlZmVyZW5jZXdyaXRlQ2xhc3NSZWZlcmVuY2V3cml0ZU5vbk51bGxDYW5vbmljYWxOYW1lUmVmZXJlbmNlVW5zdXBwb3J0ZWQgY29uc3RhbnQgd3JpdGVVcmlSZWZlcmVuY2VpdGVtc3dyaXRlSXRlbXdyaXRlTm9kZUxpc3RsZW53cml0ZVByb2NlZHVyZU5vZGVMaXN0d3JpdGVQcm9jZWR1cmVOb2Rld3JpdGVGaWVsZE5vZGVMaXN0d3JpdGVGaWVsZE5vZGV3cml0ZUNsYXNzTm9kZUxpc3R3cml0ZUNsYXNzTm9kZXdyaXRlRXh0ZW5zaW9uTm9kZUxpc3R3cml0ZUV4dGVuc2lvbk5vZGV3cml0ZUNvbnN0cnVjdG9yTm9kZUxpc3R3cml0ZUNvbnN0cnVjdG9yTm9kZXdyaXRlUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JOb2RlTGlzdHdyaXRlUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JOb2Rld3JpdGVTd2l0Y2hDYXNlTm9kZUxpc3R3cml0ZVN3aXRjaENhc2VOb2Rld3JpdGVDYXRjaE5vZGVMaXN0d3JpdGVDYXRjaE5vZGV3cml0ZVR5cGVkZWZOb2RlTGlzdHdyaXRlVHlwZWRlZk5vZGVfd3JpdGVOb2RlTWV0YWRhdGF3cml0ZUZ1bmN0aW9uTm9kZXdyaXRlQXJndW1lbnRzTm9kZXdyaXRlTGlicmFyeU5vZGV3cml0ZU9wdGlvbmFsTm9kZXdyaXRlT3B0aW9uYWxGdW5jdGlvbk5vZGV3cml0ZUxpbmtUYWJsZXdyaXRlQ2Fub25pY2FsTmFtZUVudHJ5aW5kZXhMaW5rVGFibGVzaG91bGRXcml0ZUxpYnJhcnlDYW5vbmljYWxOYW1lc19pbmRleExpbmtUYWJsZUludGVybmFsY2hpbGRyZW5jaGlsZHJlbk9yTnVsbGlzUm9vdGNvbXBvbmVudE9mZnNldDI0MjcxNzg0Nzl3cml0ZUxpc3RPZlN0cmluZ3NfY29sbGVjdE1ldGFkYXRhX3dyaXRlTm9kZU1ldGFkYXRhSW1wbGNoZWNrQ2Fub25pY2FsTmFtZXdyaXRlTGlicmFyaWVzd3JpdGVVcmlUb1NvdXJjZV93cml0ZU1ldGFkYXRhU2VjdGlvbndyaXRlQ29tcG9uZW50SW5kZXhub2RlT2Zmc2V0c3Vic2VjdGlvbk5vZGVzIG9mIHR5cGUgIGNhbid0IGhhdmUgbWV0YWRhdGEuTm9kZSB3cml0dGVuIGludG8gbWV0YWRhdGEgY2FuJ3QgaGF2ZSBtZXRhZGF0YSAobWV0YWRhdGE6ICwgbm9kZTogbWV0YWRhdGFNYXBwaW5nZW50ZXJwdXNoU2NvcGVwb3BTY29wZW1hcHBpbmdMZW5ndGhudW1Db21wb25lbnRJbmRleEVudHJpZXN1bmFsaWduZWRTaXpldXJpQXNTdHJpbmdvdXRwdXRTdHJpbmdWaWFCdWZmZXJwcmV2aW91c0xpbmVTdGFydGppbXBvcnRVcmlBc1N0cmluZ3dyaXRlTGlicmFyeURlcGVuZGVuY3lSZWZlcmVuY2VSZWZlcmVuY2UgdG8gbGlicmFyeSBkZXBlbmRlbmN5ICBvdXQgb2Ygc2NvcGVNaXNzaW5nIGNhbm9uaWNhbCBuYW1lIGZvciB3cml0ZU5vbk51bGxSZWZlcmVuY2VHb3QgbnVsbCByZWZlcmVuY2Vub25Sb290VG9wRXhwZWN0ZWQgYSBjYW5vbmljYWwgbmFtZSB0byBiZSB2YWxpZCBidXQgd2FzIGBudWxsYC53cml0ZUxpYnJhcnlSZWZlcmVuY2VhbGxvd051bGxFeHBlY3RlZCBhIGxpYnJhcnkgcmVmZXJlbmNlIHRvIGJlIHZhbGlkIGJ1dCB3YXMgYG51bGxgLndyaXRlT2Zmc2V0RXhwZWN0ZWQgYSBjbGFzcyByZWZlcmVuY2UgdG8gYmUgdmFsaWQgYnV0IHdhcyBgbnVsbGAud3JpdGVBbm5vdGF0aW9uTGlzdHdyaXRlTGlicmFyeURlcGVuZGVuY2llc3dyaXRlQWRkaXRpb25hbEV4cG9ydHN3cml0ZUxpYnJhcnlQYXJ0c3NvdXJjZVJlZmVyZW5jZXNPZmZzZXRzb3VyY2VSZWZlcmVuY2VzQ291bnRpbXBvcnROb2Rld3JpdGVMaWJyYXJ5RGVwZW5kZW5jeXJlZnBhcnROb2Rld3JpdGVMaWJyYXJ5UGFydHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3R3cml0ZUFubm90YXRpb25fZW5jb2RlQ2xhc3NGbGFnc2xldmVsSW5kZXhyZXN0b3JlU2NvcGVjdXJyZW50bHlJbk5vbmltcGxlbWVudGF0aW9uU2F2ZWR3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb25vbGRMYWJlbHNvbGRDYXNlc2xvZ2ljYWxPcGVyYXRvckluZGV4JiZ8fE5vdCBhIGxvZ2ljYWwgb3BlcmF0b3I6IGJpYXNlZFZhbHVlYWJzYWRkRG91Ymxld3JpdGVTdGF0ZW1lbnRPckVtcHR5X2VuY29kZVRyeUNhdGNoRmxhZ3NuZWVkc1N0YWNrVHJhY2V3cml0ZU9wdGlvbmFsVmFyaWFibGVEZWNsYXJhdGlvbmRlY2xhcmVkZXNjcmlwdG9yZGVmYXVsdE5vZGVzZXJpYWxpemF0aW9uIG9mIGdlbmVyaWMgTm9kZXNkZWZhdWx0Q29uc3RhbnRzZXJpYWxpemF0aW9uIG9mIGdlbmVyaWMgQ29uc3RhbnRzZGVmYXVsdEJhc2ljTGl0ZXJhbHNlcmlhbGl6YXRpb24gb2YgZ2VuZXJpYyBCYXNpY0xpdGVyYWxzZGVmYXVsdENvbnN0YW50UmVmZXJlbmNlc2VyaWFsaXphdGlvbiBvZiBnZW5lcmljIENvbnN0YW50IHJlZmVyZW5jZXNkZWZhdWx0RGFydFR5cGVzZXJpYWxpemF0aW9uIG9mIGdlbmVyaWMgRGFydFR5cGVzZGVmYXVsdEV4cHJlc3Npb25zZXJpYWxpemF0aW9uIG9mIGdlbmVyaWMgRXhwcmVzc2lvbnNkZWZhdWx0SW5pdGlhbGl6ZXJzZXJpYWxpemF0aW9uIG9mIGdlbmVyaWMgSW5pdGlhbGl6ZXJzZGVmYXVsdE1lbWJlcnNlcmlhbGl6YXRpb24gb2YgZ2VuZXJpYyBNZW1iZXJzZGVmYXVsdE1lbWJlclJlZmVyZW5jZXNlcmlhbGl6YXRpb24gb2YgZ2VuZXJpYyBNZW1iZXIgcmVmZXJlbmNlc2RlZmF1bHRTdGF0ZW1lbnRzZXJpYWxpemF0aW9uIG9mIGdlbmVyaWMgU3RhdGVtZW50c3NlcmlhbGl6YXRpb24gb2YgZ2VuZXJpYyBUcmVlTm9kZXNzZXJpYWxpemF0aW9uIG9mIEJvb2xDb25zdGFudHNzZXJpYWxpemF0aW9uIG9mIEJvb2xDb25zdGFudCByZWZlcmVuY2Vzc2VyaWFsaXphdGlvbiBvZiBDbGFzcyByZWZlcmVuY2Vzc2VyaWFsaXphdGlvbiBvZiBDb25zdHJ1Y3RvciByZWZlcmVuY2Vzc2VyaWFsaXphdGlvbiBvZiBEb3VibGVDb25zdGFudHNzZXJpYWxpemF0aW9uIG9mIERvdWJsZUNvbnN0YW50IHJlZmVyZW5jZXNzZXJpYWxpemF0aW9uIG9mIEZpZWxkIHJlZmVyZW5jZXNzZXJpYWxpemF0aW9uIG9mIEluc3RhbmNlQ29uc3RhbnRzc2VyaWFsaXphdGlvbiBvZiBJbnN0YW5jZUNvbnN0YW50IHJlZmVyZW5jZXNzZXJpYWxpemF0aW9uIG9mIEludENvbnN0YW50c3NlcmlhbGl6YXRpb24gb2YgSW50Q29uc3RhbnQgcmVmZXJlbmNlc3NlcmlhbGl6YXRpb24gb2YgTGlicmFyeURlcGVuZGVuY2llc3NlcmlhbGl6YXRpb24gb2YgTGlicmFyeVBhcnRzc2VyaWFsaXphdGlvbiBvZiBMaXN0Q29uc3RhbnRzc2VyaWFsaXphdGlvbiBvZiBMaXN0Q29uc3RhbnQgcmVmZXJlbmNlc3NlcmlhbGl6YXRpb24gb2YgU2V0Q29uc3RhbnRzc2VyaWFsaXphdGlvbiBvZiBTZXRDb25zdGFudCByZWZlcmVuY2Vzc2VyaWFsaXphdGlvbiBvZiBNYXBDb25zdGFudHNzZXJpYWxpemF0aW9uIG9mIE1hcENvbnN0YW50IHJlZmVyZW5jZXNzZXJpYWxpemF0aW9uIG9mIE5hbWVzc2VyaWFsaXphdGlvbiBvZiBOdWxsQ29uc3RhbnRzc2VyaWFsaXphdGlvbiBvZiBOdWxsQ29uc3RhbnQgcmVmZXJlbmNlc3NlcmlhbGl6YXRpb24gb2YgUHJvY2VkdXJlIHJlZmVyZW5jZXNzZXJpYWxpemF0aW9uIG9mIENvbXBvbmVudHNzZXJpYWxpemF0aW9uIG9mIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yIHJlZmVyZW5jZXNzZXJpYWxpemF0aW9uIG9mIFN0cmluZ0NvbnN0YW50c3NlcmlhbGl6YXRpb24gb2YgU3RyaW5nQ29uc3RhbnQgcmVmZXJlbmNlc3NlcmlhbGl6YXRpb24gb2YgU3ltYm9sQ29uc3RhbnRzc2VyaWFsaXphdGlvbiBvZiBTeW1ib2xDb25zdGFudCByZWZlcmVuY2Vzc2VyaWFsaXphdGlvbiBvZiBQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50cyBzZXJpYWxpemF0aW9uIG9mIFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQgcmVmZXJlbmNlc3NlcmlhbGl6YXRpb24gb2YgVGVhck9mZkNvbnN0YW50cyBzZXJpYWxpemF0aW9uIG9mIFRlYXJPZmZDb25zdGFudCByZWZlcmVuY2Vzc2VyaWFsaXphdGlvbiBvZiBUeXBlTGl0ZXJhbENvbnN0YW50c3NlcmlhbGl6YXRpb24gb2YgVHlwZUxpdGVyYWxDb25zdGFudCByZWZlcmVuY2Vzc2VyaWFsaXphdGlvbiBvZiBUeXBlZGVmIHJlZmVyZW5jZXNzZXJpYWxpemF0aW9uIG9mIFVuZXZhbHVhdGVkQ29uc3RhbnRzc2VyaWFsaXphdGlvbiBvZiBVbmV2YWx1YXRlZENvbnN0YW50IHJlZmVyZW5jZXNWYXJpYWJsZUluZGV4ZXJzY29wZXNzdGFja0hlaWdodG51bWJlck9mVmFyaWFibGVzTGFiZWxJbmRleGVyU3dpdGNoQ2FzZUluZGV4ZXJjYXNlTm9kZUNvbnN0YW50SW5kZXhlcm9mZnNldHNuZXh0T2Zmc2V0X3ByaW50ZXJvbGRPZmZzZXRuZXdPZmZzZXRUeXBlUGFyYW1ldGVySW5kZXhlclR5cGUgcGFyYW1ldGVyICBpcyBub3QgaW5kZXhlZFN0cmluZ0luZGV4ZXJVcmlJbmRleGVyQnVmZmVyZWRTaW5rU0laRVNBRkVfU0laRVNNQUxMX2J1ZmZlcmZsdXNoZWRMZW5ndGhfZG91YmxlQnVmZmVyX2RvdWJsZUJ1ZmZlclVpbnQ4YXNVaW50OExpc3RieXRlMWJ5dGUyYnl0ZTNieXRlNGFscmVhZHlFbWl0dGVkcmVtYWluZGVyX01ldGFkYXRhU3Vic2VjdGlvbkJ5dGVzU2lua05vdFF1aXRlU3RyaW5nd3JpdGVVdGY4Y29kZVVuaXRuZXh0Q2hhcmtlcm5lbC5hc3RfZnJvbV9iaW5hcnlQYXJzZUVycm9yYnl0ZUluZGV4IGF0IEludmFsaWRLZXJuZWxWZXJzaW9uRXJyb3JVbmV4cGVjdGVkIEtlcm5lbCB2ZXJzaW9uIChleHBlY3RlZCApLkNhbm9uaWNhbE5hbWVFcnJvckNhbm9uaWNhbE5hbWVTZGtFcnJvcl9Db21wb25lbnRJbmRleG51bWJlck9mRml4ZWRGaWVsZHNiaW5hcnlPZmZzZXRGb3JTb3VyY2VUYWJsZWJpbmFyeU9mZnNldEZvckNhbm9uaWNhbE5hbWVzYmluYXJ5T2Zmc2V0Rm9yTWV0YWRhdGFQYXlsb2Fkc2JpbmFyeU9mZnNldEZvck1ldGFkYXRhTWFwcGluZ3NiaW5hcnlPZmZzZXRGb3JTdHJpbmdUYWJsZWJpbmFyeU9mZnNldEZvckNvbnN0YW50VGFibGVtYWluTWV0aG9kUmVmZXJlbmNlbGlicmFyeUNvdW50Y29tcG9uZW50RmlsZVNpemVJbkJ5dGVzdmFyaWFibGVTdGFja2xhYmVsU3RhY2tsYWJlbFN0YWNrQmFzZXN3aXRjaENhc2VTdGFja3R5cGVQYXJhbWV0ZXJTdGFja19ieXRlc19ieXRlT2Zmc2V0X3N0cmluZ1RhYmxlX3NvdXJjZVVyaVRhYmxlX2NvbnN0YW50VGFibGVfbGlua1RhYmxlX3RyYW5zZm9ybWVyRmxhZ3NfY3VycmVudExpYnJhcnlfY29tcG9uZW50U3RhcnRPZmZzZXRkZWJ1Z1BhdGhfaXNSZWFkaW5nTGlicmFyeUltcGxlbWVudGF0aW9uX2Rpc2FibGVMYXp5UmVhZGluZ2J5dGVPZmZzZXRyZWFkRG91YmxlcmVhZFN0cmluZ0VudHJ5bnVtQnl0ZXNudW1CeXRlT3JkZXJNYXJrc++7v19yZWFkTWV0YWRhdGFNYXBwaW5nc19hc3NvY2lhdGVNZXRhZGF0YXJlYWRTdHJpbmdUYWJsZXRhYmxlZW5kT2Zmc2V0c3N0YXJ0T2Zmc2V0cmVhZENvbnN0YW50VGFibGVyZWFkQ29uc3RhbnRUYWJsZUVudHJ5Y29uc3RhbnRUYWdyZWFkRXhwcmVzc2lvbnJlYWRMaWJyYXJ5UmVmZXJlbmNlcmVhZENvbnN0YW50UmVmZXJlbmNlcmVhZENsYXNzUmVmZXJlbmNlZmllbGRWYWx1ZUNvdW50Z2V0UmVmZXJlbmNldW5leHBlY3RlZCBjb25zdGFudCB0YWc6IHJlYWRVcmlSZWZlcmVuY2VyZWFkU3RyaW5nUmVmZXJlbmNlTGlzdHJlYWRTdHJpbmdPck51bGxJZkVtcHR5cmVhZEFuZENoZWNrT3B0aW9uVGFndW5leHBlY3RlZCBvcHRpb24gdGFnOiByZWFkQW5ub3RhdGlvbkxpc3RfZmlsbFRyZWVOb2RlTGlzdGJ1aWxkT2JqZWN0X2ZpbGxOb25UcmVlTm9kZUxpc3Rfc2tpcE5vZGVMaXN0c2tpcE9iamVjdF9tZXJnZU5hbWVkTm9kZUxpc3RyZWFkT2JqZWN0bnVtYmVyT2ZOb2Rlc3JlYWRMaW5rVGFibGVsaW5rUm9vdGJpYXNlZFBhcmVudEluZGV4X2luZGV4Q29tcG9uZW50c3NhdmVkQnl0ZU9mZnNldHNpemVpbmRpY2F0ZWQgc2l6ZSBkb2VzIG5vdCBtYXRjaCBmaWxlIHNpemVyZXZlcnNlZGNoZWNrQ2Fub25pY2FsTmFtZXNtYWdpY05vdCBhIC5kaWxsIGZpbGUgKHdyb25nIG1hZ2ljIG51bWJlcikuY29tcG9uZW50RmlsZVNpemVzY29tcG9uZW50RmlsZUluZGV4X3JlYWRPbmVDb21wb25lbnRfY2hlY2tDYW5vbmljYWxOYW1lQ2hpbGRyZW5fcmVhZE9uZUNvbXBvbmVudFNvdXJjZXJlYWRTaW5nbGVGaWxlQ29tcG9uZW50aW52YWxpZCBjb21wb25lbnQgZGF0YUNvbmNhdGVuYXRlZCBjb21wb25lbnQgZmlsZSBnaXZlbiB3aGVuIGEgc2luZ2xlIGNvbXBvbmVudCB3YXMgZXhwZWN0ZWQuVW5yZWNvZ25pemVkIGJ5dGVzIGZvbGxvd2luZyBjb21wb25lbnQgZGF0YXBhcmVudENoaWxkcmVuQG1ldGhvZHNAdHlwZWRlZnNAZmllbGRzQGdldHRlcnNAc2V0dGVyc0BmYWN0b3JpZXNAY29uc3RydWN0b3JzY2hlY2tSZWZlcmVuY2VOb2RlYnVpbGRDYW5vbmljYWxOYW1lRXJyb3JOdWxsIHJlZmVyZW5jZSAoKSAoQ2Fub25pY2FsIG5hbWUgYW5kIHJlZmVyZW5jZSBkb2Vzbid0IGFncmVlLlJlZmVyZW5jZSBpcyBudWxsIChwcm9ibGVtTm9kZWxpYnJhcnlVcmlkYXJ0Ol9yZWFkQ29tcG9uZW50SW5kZXhjb21wb25lbnRGaWxlU2l6ZXNhdmVkQnl0ZUluZGV4TWFsZm9ybWVkIGJpbmFyeTogVGhpcyBjb21wb25lbnQgZmlsZSdzIGNvbXBvbmVudCBpbmRleCBpbmRpY2F0ZXMgdGhhdCB0aGUgZmlsZSBzaXplIHNob3VsZCBiZSAgYnV0IG90aGVyIGNvbXBvbmVudCBpbmRleGVzIGhhcyBpbmRpY2F0ZWQgdGhhdCB0aGUgc2l6ZSBzaG91bGQgYmUgZm9ybWF0VmVyc2lvbnJlYWRVcmlUb1NvdXJjZXJlYWRMaXN0T2ZTdHJpbmdzbnVtYmVyT2ZMaWJyYXJpZXNyZWFkTGlicmFyeWdldE1lbWJlclJlZmVyZW5jZUZyb21JbnR1cmlCeXRlc3NvdXJjZUNvZGVsaW5lQ291bnRpbXBvcnRVcmlCeXRlc2dldENhbm9uaWNhbE5hbWVSZWZlcmVuY2VGcm9tSW50cmVhZExpYnJhcnlEZXBlbmRlbmN5UmVmZXJlbmNlcmVhZE1lbWJlclJlZmVyZW5jZUV4cGVjdGVkIGEgbWVtYmVyIHJlZmVyZW5jZSB0byBiZSB2YWxpZCBidXQgd2FzIGBudWxsYC5yZWFkVHlwZWRlZlJlZmVyZW5jZWVuZE9mZnNldHByb2NlZHVyZUNvdW50Y2xhc3NDb3VudHNob3VsZFdyaXRlRGF0YV9yZWFkTGlicmFyeURlcGVuZGVuY2llc19yZWFkQWRkaXRpb25hbEV4cG9ydHNfcmVhZExpYnJhcnlQYXJ0c3JlYWRUeXBlZGVmcmVhZENsYXNzcmVhZEV4dGVuc2lvbnJlYWRGaWVsZHJlYWRQcm9jZWR1cmVyZWFkTGlicmFyeURlcGVuZGVuY3lyZWFkT2Zmc2V0cmVhZEV4cHJlc3Npb25MaXN0cHJlZml4TmFtZXJlYWRDb21iaW5hdG9yTGlzdG51bUV4cG9ydGVkUmVmZXJlbmNlZXhwb3J0ZWROYW1lcmVhZENvbWJpbmF0b3JyZWFkTGlicmFyeVBhcnRyZWFkQW5kUHVzaFR5cGVQYXJhbWV0ZXJMaXN0cmVhZEFuZFB1c2hWYXJpYWJsZURlY2xhcmF0aW9uTGlzdG5vcm1hbC1jbGFzc3JlYWRTdXBlcnR5cGVPcHRpb25yZWFkU3VwZXJ0eXBlcmVhZENvbnN0cnVjdG9ycmVhZFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yZ2V0QW5kUmVzZXRUcmFuc2Zvcm1lckZsYWdzYWRkVHJhbnNmb3JtZXJGbGFncmVhZEV4cHJlc3Npb25PcHRpb25jb25zdHJ1Y3RvcnB1c2hWYXJpYWJsZURlY2xhcmF0aW9uc3JlYWRJbml0aWFsaXplcmtpbmRJbmRleGZ1bmN0aW9uTm9kZVNpemVyZWFkRnVuY3Rpb25Ob2RlTm93cmVhZEZ1bmN0aW9uTm9kZU9wdGlvbnJlZGlyZWN0aW5nLWZhY3RvcnktY29uc3RydWN0b3JyZWFkRGFydFR5cGVMaXN0dHlwZVBhcmFtZXRlclN0YWNrSGVpZ2h0dmFyaWFibGVTdGFja0hlaWdodHJlYWRBcmd1bWVudHNyZWFkQW5kUHVzaFZhcmlhYmxlRGVjbGFyYXRpb25yZWFkU3RhdGVtZW50dW5leHBlY3RlZCBpbml0aWFsaXplciB0YWc6IGxhenlMb2FkQm9keW91dGVyRW5kT2Zmc2V0b2xkTGFiZWxTdGFja0Jhc2VyZWFkU3RhdGVtZW50T3B0aW9uX3NldExhenlMb2FkRnVuY3Rpb25jb21wb25lbnRTdGFydE9mZnNldGN1cnJlbnRMaWJyYXJ5cHVzaFZhcmlhYmxlRGVjbGFyYXRpb25yZWFkVmFyaWFibGVSZWZlcmVuY2V1bmV4cGVjdGVkIHZhcmlhYmxlIGluZGV4OiBsb2dpY2FsT3BlcmF0b3JUb1N0cmluZ3VuZXhwZWN0ZWQgbG9naWNhbCBvcGVyYXRvciBpbmRleDogdGFnQnl0ZXJlYWREYXJ0VHlwZU9wdGlvbmFzc2VydENvdW50cmVhZE1hcEVudHJ5TGlzdHJlYWRWYXJpYWJsZURlY2xhcmF0aW9ucmVhZFN0YXRlbWVudExpc3R1bmV4cGVjdGVkIGV4cHJlc3Npb24gdGFnOiByZWFkTWFwRW50cnlyZWFkU3RhdGVtZW50T3JOdWxsSWZFbXB0eXJlYWRCbG9ja3JlYWRBc3NlcnRCbG9ja2xhYmVscmVhZFN3aXRjaENhc2VJbnRvcmVhZENhdGNoTGlzdHVuZXhwZWN0ZWQgc3RhdGVtZW50IHRhZzogcmVhZENhdGNocmVhZEFuZFB1c2hWYXJpYWJsZURlY2xhcmF0aW9uT3B0aW9ucmVhZFN1cGVydHlwZUxpc3RyZWFkTmFtZWRUeXBlTGlzdHJlYWROYW1lZFR5cGVudWxsYWJpbGl0eUluZGV4dG90YWxQYXJhbWV0ZXJDb3VudGRlY2xhcmVkTnVsbGFiaWxpdHlJbmRleHVuZXhwZWN0ZWQgZGFydCB0eXBlIHRhZzogcmVhZFR5cGVQYXJhbWV0ZXJudW1Bcmd1bWVudHNyZWFkTmFtZWRFeHByZXNzaW9uTGlzdHJlYWROYW1lZEV4cHJlc3Npb25CaW5hcnlCdWlsZGVyV2l0aE1ldGFkYXRhX3N1YnNlY3Rpb25zc3ViU2VjdGlvbkNvdW50bWFwcGluZ1N0YXJ0bWV0YWRhdGFPZmZzZXRfcmVhZE1ldGFkYXRhc2F2ZWRPZmZzZXRwYXJhbWtlcm5lbC5hc3RfdG9fdGV4dE5hbWVyZ2V0TmFtZXB1dElmQWJzZW50Tm9ybWFsTmFtZXJfQ29uc3RhbnROYW1lciZSZWN1cnNpdmVWaXNpdG9yJk5hbWVyQ29uc3RhbnROYW1lckRpc2FtYmlndWF0b3JVbmFtZXNUbmFtZXNVZGlzYW1iaWd1YXRla2V5MWtleTJwcm9wb3NlTmFtZWdldE5ld05hbWVwcm9wb3NlZE5hbWVDYW5ub3QgZGlzYW1iaWd1YXRlTmFtZVN5c3RlbSN0I20jY2xhc3MjZXh0ZW5zaW9uI2xpYiNUbGFiZWxzI0xjb25zdGFudHMjQ3ByZWZpeGVzcGF0aFNlcGFyYXRvcltcL11wdW5jdHVhdGlvblsuOl1uYW1lVmFyaWFibGVuYW1lTWVtYmVybmFtZUNsYXNzbmFtZUV4dGVuc2lvbm5hbWVMaWJyYXJ5bmFtZVR5cGVQYXJhbWV0ZXJuYW1lU3dpdGNoQ2FzZW5hbWVMYWJlbGVkU3RhdGVtZW50bmFtZUNvbnN0YW50bmFtZUxpYnJhcnlQcmVmaXhhYmJyZXZpYXRlTmFtZWhhc0VtcHR5UGF0aExuYW1lQ2Fub25pY2FsTmFtZUFzTGlicmFyeVByZWZpeHNsYXNoZG90QW5ub3RhdG9yYW5ub3RhdGVWYXJpYWJsZXByaW50ZXJhbm5vdGF0ZVJldHVybmFubm90YXRlRmllbGRQcmludGVyc3ludGhldGljTmFtZXNhbm5vdGF0b3JpbXBvcnRUYWJsZVNQQUNFV09SRFNZTUJPTGVtcHR5TmFtZVN0cmluZ+KAomVtcHR5TmFtZWNyZWF0ZUlubmVyc2hvdWxkSGlnaGxpZ2h0c3RhcnRIaWdobGlnaHRlbmRIaWdobGlnaHRnZXRMaWJyYXJ5TmFtZWdldExpYnJhcnlSZWZlcmVuY2U8Tm8gTGlicmFyeT5nZXRJbXBvcnRJbmRleGdldENsYXNzTmFtZWdldEV4dGVuc2lvbk5hbWU8Tm8gQ2xhc3M+Z2V0VHlwZWRlZlJlZmVyZW5jZTxObyBUeXBlZGVmPmdldE1lbWJlck5hbWU8Tm8gTWVtYmVyPmdldFZhcmlhYmxlTmFtZWdldFZhcmlhYmxlUmVmZXJlbmNlPE5vIFZhcmlhYmxlRGVjbGFyYXRpb24+Z2V0VHlwZVBhcmFtZXRlck5hbWVnZXRUeXBlUGFyYW1ldGVyUmVmZXJlbmNlPE5vIFR5cGVQYXJhbWV0ZXI+d3JpdGVDb21wb25lbnRQcm9ibGVtc3dyaXRlUHJvYmxlbXNBc0pzb25Qcm9ibGVtcyBpbiBjb21wb25lbnRoZWFkZXJlbmRMaW5lLy8vLyB0cmltbWVkdHJpbVJpZ2h0d3JpdGVXb3JkaW1wb3J0c2lubmVyd3JpdGVTdGFuZGFyZExpYnJhcnlDb250ZW50b3V0ZXJQcmludGVyaW1wb3J0c1RvUHJpbnRwcmludExpYnJhcnlJbXBvcnRUYWJsZWltcG9ydGVkTGlicmFyaWVzaW1wb3J0UGF0aGdldEltcG9ydFBhdGhzZWxmaW1wb3J0IHNlbGYgYXMgaW1wb3J0ICIiIGFzIFByb2JsZW1zIGluIGxpYnJhcnlhZGRpdGlvbmFsRXhwb3J0cyA9IChpc0ZpcnN0bm9kZUxpYnJhcnl3cml0ZVNwYWNlZHdyaXRlTWVtYmVyUmVmZXJlbmNlRnJvbVJlZmVyZW5jZXdyaXRlTWV0YWRhdGFhc2NvbnN0YW50cyBnZXRQcmVjZWRlbmNld3JpdGVTcGFjZWVuc3VyZVNwYWNld3JpdGVTeW1ib2x3cml0ZUNvbW1hZW5zdXJlV29yZEJvdW5kYXJ5d3JpdGVJbmRlbnRhdGlvbjxOdWxsPmhpZ2hsaWdodFtdbWRub2RlTWV0YWRhdGFbQHdyaXRlQW5ub3RhdGVkVHlwZXdyaXRlVHlwZTxObyBEYXJ0VHlwZT53cml0ZU9wdGlvbmFsVHlwZTxObyBTdXBlcnR5cGU+d3JpdGVDbGFzc1JlZmVyZW5jZUZyb21SZWZlcmVuY2V3cml0ZVR5cGVkZWZSZWZlcmVuY2V3cml0ZU1vZGlmaWVyaXNUaGVyZTxhbm9ueW1vdXM+d3JpdGVGdW5jdGlvbnRlcm1pbmF0ZUxpbmV3cml0ZVR5cGVQYXJhbWV0ZXJMaXN0d3JpdGVQYXJhbWV0ZXJMaXN0d3JpdGVSZXR1cm5UeXBlZ2V0QXN5bmNNYXJrZXJLZXl3b3JkLyogb3JpZ2luYWxseSovd3JpdGVGdW5jdGlvbkJvZHltYXJrZXJzeW5jc3luYyphc3luY2FzeW5jKnlpZWxkaW5nPEludmFsaWQgYXN5bmMgbWFya2VyOiB7fXs9PndyaXRlRXhwcmVzc2lvbndyaXRlQm9keXdyaXRlRnVuY3Rpb25UeXBldHlwZWRlZlBvc2l0aW9uYWx0eXBlZGVmTmFtZWRwYXJhbWV0ZXJzQW5ub3RhdGVkZm9ybWFs4oaSd3JpdGVOdWxsYWJpbGl0eWNhbGxiYWNrZ2V0Q2xhc3NSZWZlcmVuY2VGcm9tUmVmZXJlbmNlZ2V0Q2Fub25pY2FsTmFtZVN0cmluZ05laXRoZXIgbm9kZSBub3IgY2Fub25pY2FsIG5hbWUgZm91bmRnZXRNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNldW5leHBlY3RlZCByb290dW5leHBlY3RlZCBAbGlicmFyeVN0cmluZ2NsYXNzU3RyaW5nY2xzYXROb2Rld3JpdGVWYXJpYWJsZVJlZmVyZW5jZXdyaXRlVHlwZVBhcmFtZXRlclJlZmVyZW5jZW1pbmltdW1QcmVjZWRlbmNlbmVlZHNQYXJlbnRlc2Vzc2VwYXJhdGVMaW5lc2xhdGVnZW5lcmljLWNvdmFyaWFudC1pbXBsW2dldHRlcl1bc2V0dGVyXVtuby1nZXR0ZXJdW25vLXNldHRlcl0vKiBmcm9tICAqL2ZvcndhcmRpbmctc3R1YmZvcndhcmRpbmctc2VtaS1zdHVibm8tc3VjaC1tZXRob2QtZm9yd2FyZGVyc3ludGhldGljcmVkaXJlY3RpbmdfZmFjdG9yeWNsYXNzd2l0aGV4dGVuZHNpbXBsZW1lbnRzZW5kTGluZVN0cmluZyAvLyBmcm9tIG9uZ2V0dGVhcm9mZmludmFsaWQtZXhwcmVzc2lvbmVzY2FwZVN0cmluZ3dyaXRlSW50ZXJmYWNlVGFyZ2V0Lns9c3VwZXJuZXchcHJlY2VkZW5jZT8/IT13cml0ZVN0YXRpY1R5cGVnZXRFc2NhcGVkQ2hhcmFjdGVyXHZcZlwkcGFydCR7YXNzZXJ0X2Fzc2VydCh1bnVzZWRBcmd1bWVudGlzYXN7VHlwZUVycm9yfXRoaXNyZXRocm93dGhyb3dhd2FpdGxldGluYmxvY2t3cml0ZUJsb2NrQm9keSA9PmRlZmVycmVkYXNzZXJ0KTticmVha3doaWxlZG9mb3J1c2VWYXJLZXl3b3Jkc3dpdGNoKSB7Y2FzZWRlZmF1bHRjb250aW51ZWlmZWxzZXJldHVybnRyeWNhdGNobm8tZXhjZXB0aW9uLXZhcmZpbmFsbHl5aWVsZCpbeWllbGRdeWllbGQuLi47cmVxdWlyZWRhbGxBcmdzaW52YWxpZC1pbml0aWFsaXplcmluQ29tbWVudHdyaXRlRGFydFR5cGVOdWxsYWJpbGl0eWludmFsaWQtdHlwZWR5bmFtaWN2b2lkLyogJycgJiAnJyA9ICcnICovPls+e3BhcnRpYWwtaW5zdGFudGlhdGlvbmV2YWxQcmVjZWRlbmNlRVhQUkVTU0lPTkNPTkRJVElPTkFMTE9HSUNBTF9OVUxMX0FXQVJFTE9HSUNBTF9PUkxPR0lDQUxfQU5ERVFVQUxJVFlSRUxBVElPTkFMQklUV0lTRV9PUkJJVFdJU0VfWE9SQklUV0lTRV9BTkRTSElGVEFERElUSVZFTVVMVElQTElDQVRJVkVQUkVGSVhQT1NURklYVFlQRV9MSVRFUkFMUFJJTUFSWUNBTExFRWJpbmFyeVByZWNlZGVuY2VvZmlzQXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRvcmdsb2JhbERlYnVnZ2luZ05hbWVzZGVidWdMaWJyYXJ5TmFtZWRlYnVnQ2xhc3NOYW1lZGVidWdRdWFsaWZpZWRDbGFzc05hbWVkZWJ1Z01lbWJlck5hbWVkZWJ1Z1F1YWxpZmllZE1lbWJlck5hbWVkZWJ1Z1R5cGVQYXJhbWV0ZXJOYW1lZGVidWdRdWFsaWZpZWRUeXBlUGFyYW1ldGVyTmFtZWRlYnVnVmFyaWFibGVEZWNsYXJhdGlvbk5hbWVkZWJ1Z05vZGVUb1N0cmluZ2NvbXBvbmVudFRvU3RyaW5ncHJvY2VkdXJlS2luZFRvU3RyaW5naWxsZWdhbCBQcm9jZWR1cmVLaW5kOiBrZXJuZWwuYXN0LnZpc2l0b3JFeHByZXNzaW9uVmlzaXRvclN0YXRlbWVudFZpc2l0b3JNZW1iZXJWaXNpdG9ySW5pdGlhbGl6ZXJWaXNpdG9yVHJlZVZpc2l0b3JEYXJ0VHlwZVZpc2l0b3JEYXJ0VHlwZVZpc2l0b3IxQ29uc3RhbnRWaXNpdG9yX0NvbnN0YW50Q2FsbGJhY2tfQ29uc3RhbnRDYWxsYmFja1Zpc2l0b3JfY2FsbGJhY2tDb21wdXRlT25jZUNvbnN0YW50VmlzaXRvcl92aXNpdG9yY2FjaGVWaXNpdE9uY2VDb25zdGFudFZpc2l0b3JNZW1iZXJSZWZlcmVuY2VWaXNpdG9yVmlzaXRvclJlY3Vyc2l2ZVZpc2l0b3JUcmFuc2Zvcm1lckV4cHJlc3Npb25WaXNpdG9yMVN0YXRlbWVudFZpc2l0b3IxQm9keVZpc2l0b3Ixa2VybmVsLmNhbm9uaWNhbF9uYW1lX3BhcmVudF9ub25Sb290VG9wX2NoaWxkcmVuaGFzQ2hpbGRnZXRDaGlsZEZyb21RdWFsaWZpZWROYW1lZ2V0Q2hpbGRGcm9tRmllbGRXaXRoTmFtZUNhbm5vdCBhZGQgYSBjaGlsZCB0byAgYmVjYXVzZSB0aGlzIG5hbWUgYWxyZWFkeSBoYXMgYSBjaGlsZCBuYW1lZCByZW1vdmVDaGlsZCBpcyBhbHJlYWR5IGJvdW5kQ2Fubm90IGJpbmQgLCB0YXJnZXQgaXMgYWxyZWFkeSBib3VuZCB0byB1bmJpbmRjaGlsZHJlbl9nZXRNZW1iZXJRdWFsaWZpZXJVbmV4cGVjdGVkIG1lbWJlcjoga2VybmVsLnRyYW5zZm9ybWF0aW9ucy5mbGFnc1RyYW5zZm9ybWVyRmxhZ3N1cGVyQ2FsbHNzZWVuQnlWZXJpZmllcmtlcm5lbC50eXBlX2FsZ2VicmFUeXBlUGFyYW1ldGVyRmlsdGVyUEZyZXNoVHlwZVBhcmFtZXRlcnNmcmVzaFR5cGVQYXJhbWV0ZXJzYXBwbHlUb0Z1bmN0aW9uVHlwZXN1YnN0aXR1dGVzdWJzdGl0dXRlTmFtZWRzdWJzdGl0dXRlU3VwZXJmcm9tTWFwZmlsdGVyZWRmcm9tVXBwZXJBbmRMb3dlckJvdW5kc2Zyb21TdXBlcnR5cGVmcm9tSW50ZXJmYWNlVHlwZWZyb21UeXBlZGVmVHlwZWZyb21QYWlyc3BhcmFtZXRlcnNib3R0b21Gb3JDbGFzc3VwcGVyQm91bmRGb3JDbGFzc3NlY29uZGdldFN1YnN0aXR1dGV1cHBlckJvdW5kY29udHJhdmFyaWFudHZpc2l0X051bGxTdWJzdGl0dXRpb25TdWJzdGl0dXRpb24uZW1wdHlfTWFwU3Vic3RpdHV0aW9uX01hcFN1YnN0aXR1dGlvbihfVG9wU3Vic3RpdHV0b3JpbnZlcnRWYXJpYW5jZWZyZXNoVHlwZVBhcmFtZXRlckNyZWF0ZSBhIGZyZXNoIGVudmlyb25tZW50IGZpcnN0X0NsYXNzQm90dG9tU3Vic3RpdHV0aW9uX0NvbWJpbmVkU3Vic3RpdHV0aW9uX0ZpbHRlcmVkU3Vic3RpdHV0aW9uZmlsdGVyRm5fSW5uZXJUeXBlU3Vic3RpdHV0b3JvdXRlcmZyZXNoX1R5cGVTdWJzdGl0dXRvcmNvdmFyaWFudENvbnRleHR1c2VDb3VudGVybmV3SW5uZXJFbnZpcm9ubWVudGJlZm9yZWJ1bXBDb3VudGVyc1VudGlsX0RlZXBUeXBlU3Vic3RpdHV0b3JkZXB0aGlzSW5maW5pdGVfVHlwZVVuaWZpY2F0aW9ucXVhbnRpZmllZFZhcmlhYmxlc191bml2ZXJzYWxseVF1YW50aWZpZWRWYXJpYWJsZXN0eXBlMV91bmlmeV9zdWJzdGl0dXRlSGVhZG5leHRUeXBlVW5leHBlY3RlZCBjeWNsZSBmb3VuZCBkdXJpbmcgdW5pZmljYXRpb25fZmFpbGxlZnRJbnN0YW5jZXJpZ2h0SW5zdGFuY2VpbnN0YW50aWF0b3JpbnN0YW50aWF0b3JUeXBlbGVmdFJldHVybnJpZ2h0UmV0dXJuX3RyeVN1YnN0aXR1dGlvbmRlZXBTdWJzdGl0dXRlX09jY3VycmVuY2VWaXNpdG9yaGFuZGxlVHlwZVBhcmFtZXRlcmdldFN1YnN0aXR1dGlvbk1hcGdldFVwcGVyQm91bmRTdWJzdGl0dXRpb25NYXBzdWJzdGl0dXRlRGVlcHN1YnN0aXR1dG9yY29udGFpbnNUeXBlVmFyaWFibGV1bmlmeVR5cGVzdW5pZmllcmdldEZyZXNoVHlwZVBhcmFtZXRlcnNmcmVzaFBhcmFtZXRlcnNrZXJuZWwudHlwZV9lbnZpcm9ubWVudEhpZXJhcmNoeUJhc2VkVHlwZUVudmlyb25tZW50RXJyb3JIYW5kbGVyVHlwZUVudmlyb25tZW50eWllbGRUeXBlY3VycmVudEFzeW5jTWFya2VyZXJyb3JIYW5kbGVyZnJvbVN1YmNsYXNzb2JqZWN0Q2xhc3NudWxsQ2xhc3Nib29sQ2xhc3NpbnRDbGFzc251bVR5cGVudW1DbGFzc2RvdWJsZUNsYXNzc3RyaW5nQ2xhc3NzeW1ib2xDbGFzc3R5cGVDbGFzc3Jhd0Z1bmN0aW9uVHlwZWZ1bmN0aW9uQ2xhc3NmdXR1cmVPckNsYXNzZWxlbWVudFR5cGVsaXN0Q2xhc3NzZXRDbGFzc21hcENsYXNzaXRlcmFibGVUeXBlaXRlcmFibGVDbGFzc3N0cmVhbVR5cGVzdHJlYW1DbGFzc2Z1dHVyZUNsYXNzU3VidHlwZVRlc3RlcnR5cGVDaGVja3Npc1RvcF9jb2xsZWN0X2lzU3VidHlwZU9mc3VidHlwZWlzU3VidHlwZU9mc3VidHlwZUFyZ3N1cGVydHlwZUFyZ3N1YnR5cGVGdXR1cmVzdXBlcnR5cGVGdXR1cmVfaXNGdW5jdGlvblN1YnR5cGVPZnN1YlBhcmFtZXRlcnN1cGVyUGFyYW1ldGVyc3ViQm91bmRzdXBlcnR5cGVQYXJhbWV0ZXJzdWJ0eXBlUGFyYW1ldGVyc3VidHlwZU5hbWVJbmRleGtlcm5lbC5jbGFzc19oaWVyYXJjaHlIYW5kbGVBbWJpZ3VvdXNTdXBlcnR5cGVzTWl4aW5JbmZlcnJlcmluZmVyb25BbWJpZ3VvdXNTdXBlcnR5cGVzbWl4aW5JbmZlcnJlciBjYW4ndCBpbXBsZW1lbnQgYm90aCBfaW5pdGlhbGl6ZWdldE9yZGVyZWRDbGFzc2VzdW5vcmRlcmVkZ2VuZXJpY1N1cGVydHlwZXNPZmdldExlZ2FjeUxlYXN0VXBwZXJCb3VuZGdldENsYXNzQXNJbnN0YW5jZU9mYXNJbnN0YW50aWF0aW9uT2ZnZXREaXNwYXRjaFRhcmdldHNldHRlcmdldERpc3BhdGNoVGFyZ2V0c3NldHRlcnNnZXRJbnRlcmZhY2VNZW1iZXJnZXRJbnRlcmZhY2VNZW1iZXJzZ2V0RGVjbGFyZWRNZW1iZXJzaXNTdWJjbGFzc09mc3ViY2xhc3Npc1VzZWRBc01peGluZm9yRWFjaE92ZXJyaWRlUGFpcmFwcGx5VHJlZUNoYW5nZXNyZW1vdmVkTGlicmFyaWVzZW5zdXJlS25vd25MaWJyYXJpZXNyZWlzc3VlQW1iaWd1b3VzU3VwZXJ0eXBlc0ZvcmFwcGx5TWVtYmVyQ2hhbmdlc2ZpbmREZXNjZW5kYW50c21lcmdlU29ydGVkTGlzdHNmaXJzdE1lbWJlcnNlY29uZE1lbWJlcmNvbXBhcmVjb21wYXJlTWVtYmVyc2NvbXBhcmVOYW1lc2ZpcnN0TmFtZXNlY29uZE5hbWVmaXJzdEhhc2hzZWNvbmRIYXNoZmlyc3RTdHJpbmdzZWNvbmRTdHJpbmdmaXJzdExlbmd0aHNlY29uZExlbmd0aGZpcnN0TGlicmFyeXNlY29uZExpYnJhcnlmaXJzdFVuaXRzZWNvbmRVbml0ZGVsdGFmaW5kTWVtYmVyQnlOYW1lQ2xhc3NIaWVyYXJjaHlTdWJ0eXBlc2dldFN1YnR5cGVzT2ZnZXRTaW5nbGVUYXJnZXRGb3JJbnRlcmZhY2VJbnZvY2F0aW9uX0NsYXNzSW5mb1N1YnR5cGVjbGFzc0luZm90b3BEb3duSW5kZXhzdWJ0eXBlSW50ZXJ2YWxMaXN0X0Nsb3NlZFdvcmxkQ2xhc3NIaWVyYXJjaHlTdWJ0eXBlc19jbGFzc2VzQnlUb3BEb3duSW5kZXhfaW5mb01hcGludmFsaWRhdGVkX3RvcERvd25Tb3J0SW5kZXhhbGxCZXRzT2ZmX3RvcERvd25Tb3J0VmlzaXRzdWJJbmZvc3VidHlwZVNldEJ1aWxkZXJhZGRTaW5nbGV0b25kaXJlY3RFeHRlbmRlcnNzdWJ0eXBlSW5mb2FkZEludGVydmFsTGlzdGRpcmVjdE1peGVyc2RpcmVjdEltcGxlbWVudGVyc2J1aWxkSW50ZXJ2YWxMaXN0VGhpcyBkYXRhIHN0cnVjdHVyZSBoYXMgYmVlbiBpbnZhbGlkYXRlZHN1YnR5cGVzdG9DbG9zZWRXb3JsZENsYXNzSGllcmFyY2h5X29uQW1iaWd1b3VzU3VwZXJ0eXBlc19vbkFtYmlndW91c1N1cGVydHlwZXNOb3RXcmFwcGVka25vd25MaWJyYXJpZXNfcmVjb3JkZWRBbWJpZ3VvdXNTdXBlcnR5cGVzX2NhY2hlZENsYXNzSGllcmFyY2h5U3VidHlwZXNfdG9wU29ydEluZGV4cmVjb3JkZWRpbmZvRm9ydXNlZGdldFVzZWRDbGFzc2VzcmVzZXRVc2VkbnVtYmVyT2ZDbGFzc2VzY29tcHV0ZVN1YnR5cGVzSW5mb3JtYXRpb251bm9yZGVyZWRTZXRfZ2V0UmFua2VkU3VwZXJjbGFzc0luZm9zbGVhc3RVcHBlckJvdW5kSW5mb3NoZWFwY2hhaW5sYXN0SW5mb25leHRJbmZvYWRkVG9IZWFwaW5mbzFpbmZvMmNsYXNzZXMxY2xhc3NlczJpMWkyY3VycmVudERlcHRobnVtQ2FuZGlkYXRlc0F0VGhpc0RlcHRobmV4dDJzdXBlclR5cGUxZ2VuZXJpY1N1cGVyVHlwZXNzdXBlclR5cGUyOiBObyBjbGFzcyBpbmZvIGZvciBzdXBlckluZm9jYXN0ZWRUeXBlaW1wbGVtZW50ZWRTZXR0ZXJzaW1wbGVtZW50ZWRHZXR0ZXJzQW5kQ2FsbHNfYnVpbGRJbnRlcmZhY2VNZW1iZXJzZGVjbGFyZWRTZXR0ZXJzZGVjbGFyZWRHZXR0ZXJzQW5kQ2FsbHNjcm9zc0dldHRlcnNTZXR0ZXJzc3VwZXJHZXR0ZXJzc3VwZXJTZXR0ZXJzX3JlcG9ydE92ZXJyaWRlc2RlY2xhcmVkTGlzdGluaGVyaXRlZExpc3RkZWNsYXJlZGluaGVyaXRlZHN1cGVydHlwZXNsaWJzYWRkZWRDbGFzc2VzU29ydGVkZXhwZWN0ZWRTdGFydEluZGV4X3RvcG9sb2dpY2FsU29ydFZpc2l0b3JkZXJlZExpc3RfaW5pdGlhbGl6ZVRvcG9sb2dpY2FsbHlTb3J0ZWRDbGFzc2VzcHJvY2Vzc2VkQ2xhc3Nlc3dvcmtsaXN0dG9wb2xvZ2ljYWxJbmRleF9idWlsZERlY2xhcmVkTWVtYmVyc19idWlsZEltcGxlbWVudGVkTWVtYmVyc2ludGVyZmFjZVNldHRlcnNpbnRlcmZhY2VHZXR0ZXJzQW5kQ2FsbHNzYW5pdHlDaGVja0Fsc29Lbm93c1BhcmVudEFuZExpYnJhcnlEaWRuJ3Qga25vdyBsaWJyYXJ5IG9mICAoZnJvbSBEaWRuJ3Qga25vdyBwYXJlbnQgb2YgZXhwZWN0ZWRTdGFydGluZ1RvcG9sb2dpY2FsSW5kZXhfY29sbGVjdFN1cGVyc0ZvckNsYXNzX3JlY29yZFN1cGVyVHlwZXNObyBpbmZvIGZvciAgZnJvbSBVbmV4cGVjdGVkIHRvcG9sb2dpY2FsSW5kZXggKCAhPSApIGZvciBiZWluZ1Zpc2l0ZWRDeWNsaWMgaW5oZXJpdGFuY2UgaW52b2x2aW5nIHN1cGVyRGVwdGhtaXhlZEluZm9taXhpbk1lbWJlcmluaGVyaXRlZE1lbWJlcnNpbmhlcml0ZWRTZXR0ZXJzc2tpcEFic3RyYWN0TWVtYmVyc2FsbEluaGVyaXRlZE1lbWJlcnNpbmhlcml0RnJvbV9pbmhlcml0TWVtYmVyc2RlY2xhcmVkTWVtYmVyaW5oZXJpdGVkTWVtYmVyX2dldFVuc2hhZG93ZWRJbmhlcml0ZWRNZW1iZXJzcmVjb3JkR2VuZXJpY1N1cGVyVHlwZXN1cGVyY2xhc3NTZXRCdWlsZGVyc3VwZXJ0eXBlU2V0QnVpbGRlcnN1cGVydHlwZUluZm9zdXBlcmNsYXNzSW50ZXJ2YWxMaXN0c3VwZXJ0eXBlSW50ZXJ2YWxMaXN0bWl4ZWRJblR5cGVJbmZvZ2V0RXhwZW5zZUhpc3RvZ3JhbWludGVydmFsc29sZExlbmd0aGZpbGxSYW5nZWdldENvbXByZXNzaW9uUmF0aW9zaXplc2dldFN1cGVyVHlwZUhhc2hUYWJsZVNpemVzdW1fSW50ZXJ2YWxMaXN0QnVpbGRlcmV2ZW50c2FkZEludGVydmFsaW5zaWRlQ291bnRldmVudF9DbGFzc0luZm9DbGFzc1NldF9jbGFzc2VzX0x1YkhlYXBzb3J0c0JlZm9yZXNvcnRzQmVmb3JlU3RhdGljX2ludGVydmFsTGlzdENvbnRhaW5zaW50ZXJ2YWxMaXN0X2ludGVydmFsTGlzdFNpemVrZXJuZWwuY29yZV90eXBlc3JlcXVpcmVkQ2xhc3Nlc2RhcnQ6Y29yZU9iamVjdE51bGxib29saW50bnVtZG91YmxlU3RyaW5nTGlzdE1hcEl0ZXJhYmxlSXRlcmF0b3JTeW1ib2xGdW5jdGlvbkludm9jYXRpb25GYWxsVGhyb3VnaEVycm9yZGFydDpfaW50ZXJuYWxkYXJ0OmFzeW5jU3RyZWFtX2NvcmVMaWJyYXJ5X29iamVjdENsYXNzX251bGxDbGFzc19ib29sQ2xhc3NfaW50Q2xhc3NfbnVtQ2xhc3NfZG91YmxlQ2xhc3Nfc3RyaW5nQ2xhc3NfbGlzdENsYXNzX3NldENsYXNzX21hcENsYXNzX2l0ZXJhYmxlQ2xhc3NfaXRlcmF0b3JDbGFzc19zeW1ib2xDbGFzc190eXBlQ2xhc3NfZnVuY3Rpb25DbGFzc19pbnZvY2F0aW9uQ2xhc3NfaW52b2NhdGlvbk1pcnJvckNsYXNzX2ludm9jYXRpb25NaXJyb3JXaXRoVHlwZUNvbnN0cnVjdG9yX25vU3VjaE1ldGhvZEVycm9yRGVmYXVsdENvbnN0cnVjdG9yX2xpc3RGcm9tQ29uc3RydWN0b3JfbGlzdFVubW9kaWZpYWJsZUNvbnN0cnVjdG9yX2lkZW50aWNhbFByb2NlZHVyZV9mYWxsVGhyb3VnaEVycm9yVXJsQW5kTGluZUNvbnN0cnVjdG9yX29iamVjdEVxdWFsc19tYXBVbm1vZGlmaWFibGVfaW50ZXJuYWxTeW1ib2xDbGFzc19hc3luY0xpYnJhcnlfZnV0dXJlQ2xhc3Nfc3RhY2tUcmFjZUNsYXNzX3N0cmVhbUNsYXNzX2FzeW5jQXdhaXRDb21wbGV0ZXJDbGFzc19mdXR1cmVPckNsYXNzX2FzeW5jQXdhaXRDb21wbGV0ZXJDb25zdHJ1Y3Rvcl9jb21wbGV0ZU9uQXN5bmNSZXR1cm5Qcm9jZWR1cmVfY29tcGxldGVyQ29tcGxldGVFcnJvcl9zeW5jSXRlcmFibGVEZWZhdWx0Q29uc3RydWN0b3Jfc3RyZWFtSXRlcmF0b3JEZWZhdWx0Q29uc3RydWN0b3JfYXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlckRlZmF1bHRDb25zdHJ1Y3Rvcl9hc3luY1N0YXJMaXN0ZW5IZWxwZXJQcm9jZWR1cmVfYXN5bmNTdGFyTW92ZU5leHRIZWxwZXJQcm9jZWR1cmVfYXN5bmNTdGFja1RyYWNlSGVscGVyUHJvY2VkdXJlX2FzeW5jVGhlbldyYXBwZXJIZWxwZXJQcm9jZWR1cmVfYXN5bmNFcnJvcldyYXBwZXJIZWxwZXJQcm9jZWR1cmVfYXdhaXRIZWxwZXJQcm9jZWR1cmVfYm9vbEZyb21FbnZpcm9ubWVudF9taXJyb3JzTGlicmFyeV9wcmFnbWFDbGFzc19wcmFnbWFOYW1lX3ByYWdtYU9wdGlvbnNfcHJhZ21hQ29uc3RydWN0b3Jhc3luY0Vycm9yV3JhcHBlckhlbHBlclByb2NlZHVyZWdldFRvcExldmVsTWVtYmVyX2FzeW5jRXJyb3JXcmFwcGVySGVscGVyYXN5bmNMaWJyYXJ5Z2V0TGlicmFyeWFzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJBZGRnZXRNZW1iZXJfQXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlcmFzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJBZGRFcnJvcmFkZEVycm9yYXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlckFkZFN0cmVhbWFkZFN0cmVhbWFzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJDbGFzc2dldENsYXNzYXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlckNsb3NlYXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlckRlZmF1bHRDb25zdHJ1Y3RvcmFzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJTdHJlYW1nZXQ6c3RyZWFtYXN5bmNTdGFyTGlzdGVuSGVscGVyX2FzeW5jU3Rhckxpc3RlbkhlbHBlcmFzeW5jU3Rhck1vdmVOZXh0SGVscGVyX2FzeW5jU3Rhck1vdmVOZXh0SGVscGVyYXN5bmNTdGFja1RyYWNlSGVscGVyUHJvY2VkdXJlX2FzeW5jU3RhY2tUcmFjZUhlbHBlcmFzeW5jVGhlbldyYXBwZXJIZWxwZXJQcm9jZWR1cmVfYXN5bmNUaGVuV3JhcHBlckhlbHBlcmF3YWl0SGVscGVyUHJvY2VkdXJlX2F3YWl0SGVscGVyYXN5bmNBd2FpdENvbXBsZXRlckNsYXNzX0FzeW5jQXdhaXRDb21wbGV0ZXJhc3luY0F3YWl0Q29tcGxldGVyQ29uc3RydWN0b3Jjb21wbGV0ZU9uQXN5bmNSZXR1cm5fY29tcGxldGVPbkFzeW5jUmV0dXJuY29tcGxldGVyQ29tcGxldGVFcnJvckNvbXBsZXRlcmNvbXBsZXRlckZ1dHVyZWdldDpmdXR1cmVjb3JlTGlicmFyeXRyeUdldENsYXNzRnV0dXJlT3JpZGVudGljYWxQcm9jZWR1cmVpZGVudGljYWxpbnRlcm5hbFN5bWJvbENsYXNzaW52b2NhdGlvbkNsYXNzaW52b2NhdGlvbk1pcnJvckNsYXNzX0ludm9jYXRpb25NaXJyb3JpbnZvY2F0aW9uTWlycm9yV2l0aFR5cGVDb25zdHJ1Y3Rvcl93aXRoVHlwZWl0ZXJhdG9yQ2xhc3NsaXN0RnJvbUNvbnN0cnVjdG9ybGlzdFVubW9kaWZpYWJsZUNvbnN0cnVjdG9ydW5tb2RpZmlhYmxlU2V0bWFwVW5tb2RpZmlhYmxlbWlycm9yc0xpYnJhcnl0cnlHZXRMaWJyYXJ5ZGFydDptaXJyb3Jzbm9TdWNoTWV0aG9kRXJyb3JEZWZhdWx0Q29uc3RydWN0b3JOb1N1Y2hNZXRob2RFcnJvcndpdGhJbnZvY2F0aW9ub2JqZWN0RXF1YWxzcHJhZ21hQ2xhc3NwcmFnbWFwcmFnbWFOYW1lcHJhZ21hT3B0aW9uc3ByYWdtYUNvbnN0cnVjdG9yc3RhY2tUcmFjZUNsYXNzU3RhY2tUcmFjZXN0cmVhbUl0ZXJhdG9yU3Vic2NyaXB0aW9uX1N0cmVhbUl0ZXJhdG9yX3N1YnNjcmlwdGlvbnN0cmVhbUl0ZXJhdG9yQ2FuY2VsY2FuY2Vsc3RyZWFtSXRlcmF0b3JDbGFzc3N0cmVhbUl0ZXJhdG9yRGVmYXVsdENvbnN0cnVjdG9yc3RyZWFtSXRlcmF0b3JNb3ZlTmV4dHN0cmVhbUl0ZXJhdG9yQ3VycmVudGdldDpjdXJyZW50c3luY0l0ZXJhYmxlRGVmYXVsdENvbnN0cnVjdG9yX1N5bmNJdGVyYWJsZXN5bmNJdGVyYXRvckNsYXNzX1N5bmNJdGVyYXRvcnN5bmNJdGVyYXRvckN1cnJlbnRzeW5jSXRlcmF0b3JZaWVsZEVhY2hJdGVyYWJsZV95aWVsZEVhY2hJdGVyYWJsZWZhbGxUaHJvdWdoRXJyb3JVcmxBbmRMaW5lQ29uc3RydWN0b3JfY3JlYXRlYm9vbEZyb21FbnZpcm9ubWVudGZyb21FbnZpcm9ubWVudHBhY2thZ2VfY29uZmlnLnBhY2thZ2Vzbm9QYWNrYWdlc3BhY2thZ2VVcmlub3RGb3VuZHBhY2thZ2VNZXRhZGF0YXBhY2thZ2VOYW1lbGlicmFyeU1ldGFkYXRhYXNNYXBkZWZhdWx0UGFja2FnZU5hbWVwYWNrYWdlX2NvbmZpZy5wYWNrYWdlc19maWxlaXNWYWxpZFBhY2thZ2VOYW1lYmFzZUxvY2F0aW9uaXNDb21tZW50c2VwYXJhdG9ySW5kZXhjaGFyTWlzc2luZyBwYWNrYWdlIG5hbWVObyAnOicgb24gbGluZU5vdCBhIHZhbGlkIHBhY2thZ2UgbmFtZXBhY2thZ2VWYWx1ZXBhY2thZ2VMb2NhdGlvbkRlZmF1bHQgcGFja2FnZSBlbnRyeSB2YWx1ZSBpcyBub3QgYSB2YWxpZCBwYWNrYWdlIG5hbWVNb3JlIHRoYW4gb25lIGRlZmF1bHQgcGFja2FnZSBlbnRyeVNhbWUgcGFja2FnZSBuYW1lIG9jY3VyZWQgdHdpY2VwYWNrYWdlTWFwcGluZ2NvbW1lbnRNdXN0IGJlIGFic29sdXRlY29tbWVudExpbmUjICMgZ2VuZXJhdGVkIGJ5IHBhY2thZ2U6cGFja2FnZV9jb25maWcgYXQgIiBpcyBub3QgYSB2YWxpZCBwYWNrYWdlIG5hbWVQYWNrYWdlIGxvY2F0aW9uIG11c3Qgbm90IGJlIGEgcGFja2FnZTogVVJJX3JlbGF0aXZpemVoYXNRdWVyeWhhc0ZyYWdtZW50aGFzQXV0aG9yaXR5bm9ybWFsaXplUGF0aC4vcGFja2FnZV9jb25maWcucGFja2FnZXNfaW1wbFVubW9kaWZpYWJsZU1hcFZpZXdjaGVja1ZhbGlkUGFja2FnZVVyaU5vUGFja2FnZXNObyBwYWNrYWdlIG5hbWVkICJQYWNrYWdlc0Jhc2VwYWNrYWdlQmFzZWdldEJhc2VwYWNrYWdlUGF0aF9tYXBwaW5nZGVmYXVsdFBhY2thZ2VOYW1lVXJpTm9uRmlsZVBhY2thZ2VzRGlyZWN0b3J5UGFja2FnZXNfcGFja2FnZUJhc2VfZmFpbExpc3RpbmdQYWNrYWdlc0Nhbm5vdCBsaXN0IHBhY2thZ2VzIGZvciBhIGJhc2VkIHBhY2thZ2Ugcm9vdGZyb250X2VuZC50ZXJtaW5hbF9jb2xvcl9zdXBwb3J0UHJvY2Vzc1Byb2Nlc3NSZXN1bHRBTExfQ09ERVNURVJNSU5BTF9DQVBBQklMSVRJRVNlbmFibGVUZXJtaW5hbENvbG9yc3ByaW50bG5fY29tcHV0ZUVuYWJsZUNvbG9yc3N1cHBvcnRzQW5zaUVzY2FwZXNOb3QgZW5hYmxpbmcgY29sb3JzIGFzIEFOU0kgaXMgbm90IHN1cHBvcnRlZC5FbmFibGluZyBjb2xvcnMgYXMgT1MgaXMgV2luZG93cy4vYmluL3NoLWN0dHkgPiAvZGV2L251bGwgMj4gL2Rldi9udWxsTm90IGVuYWJsaW5nIGNvbG9ycywgc3RkaW4gaXNuJ3QgYSB0ZXJtaW5hbC5wcmludGYgJyVzJyAnY29sb3JzCnNldGFmIDAKc2V0YWYgMQpzZXRhZiAyCnNldGFmIDMKc2V0YWYgNApzZXRhZiA1CnNldGFmIDYKc2V0YWYgNwpvcAonIHwgdHB1dCAtU05vdCBlbmFibGluZyBjb2xvcnMsIHJ1bm5pbmcgdHB1dCBmYWlsZWQuTm90IGVuYWJsaW5nIGNvbG9ycywgdW5leHBlY3RlZCBvdXRwdXQgZnJvbSB0cHV0OiBudW1iZXJPZkNvbG9yc05vdCBlbmFibGluZyBjb2xvcnMsIGxlc3MgdGhhbiA4IGNvbG9ycyBzdXBwb3J0ZWQ6IGFsbENvZGVzG1szMG0bWzMxbRtbMzJtG1szM20bWzM0bRtbMzVtG1szNm0bWzM3bRtbMzk7NDltTm90IGVuYWJsaW5nIGNvbG9ycywgY29sb3IgY29kZXMgZG9uJ3QgbWF0Y2g6IEVuYWJsaW5nIGNvbG9ycy5mYXN0YS5jb21tYW5kX2xpbmVfcmVwb3J0aW5nbWluQ3Jhc2hzYWZlVG9TdHJpbmdnZXRTb3VyY2VMaW5ldW5oYW5kbGVkaGlkZVdhcm5pbmdzbWVzc2FnZVRleHRzb3VyY2VMaW5lQ3Jhc2ggd2hlbiBmb3JtYXR0aW5nOiBmb3JtYXRFcnJvck1lc3NhZ2VzcXVpZ2dseUxlbmd0aGluZGVudExlbmd0aGxlbmd0aEluU291cmNlTGluZXBvaW50ZXJwb2ludGVyTGVuZ3RoLi4uaXNIaWRkZW5zaG91bGRUaHJvd09uaXNDb21waWxlVGltZUVycm9yZmFzdGEubWVzc2FnZXNnZXRMb2NhdGlvbkZyb21VcmlnZXRMb2NhdGlvbkZyb21Ob2RlZmFzdGEucHJvYmxlbXNEZWJ1Z0Fib3J0OiB3aGF0dW5leHBlY3RlZGV4cGVjdGVkYWN0dWFsdW5zdXBwb3J0ZWRvcGVyYXRpb25nZXRGaWxlVXJpZmFzdGEudGlja2Vyc3dwcmV2aW91c1RpY2tzaW5jZVN0YXJ0bXMucmVzZXRmYXN0YS51cmlfdHJhbnNsYXRvcmRhcnRMaWJyYXJpZXNnZXREYXJ0UGF0Y2hlc2lzUGxhdGZvcm1JbXBsZW1lbnRhdGlvbnRyYW5zbGF0ZXJlcG9ydE1lc3NhZ2VfdHJhbnNsYXRlRGFydFVyaV90cmFuc2xhdGVQYWNrYWdlVXJpZ2V0UGFja2FnZUZyYWdtZW50Zmlyc3RTbGFzaHBhY2thZ2VCYXNlVXJpZ2V0RGVmYXVsdFBhY2thZ2VGcmFnbWVudGVtcHR5UGFja2FnZVJlZGlyZWN0aXNMaWJyYXJ5U3VwcG9ydGVkX3BhY2thZ2VVcmlOb3RGb3VuZF9wYWNrYWdlVXJpTm90Rm91bmROb1JlcG9ydEM6XHJlc29sdmVJbnB1dFVyaXBhcnNlVXJpZmlsZTp4LXJlc29sdmVBbWJpZ3VvdXNXaW5kb3dzUGF0aGZhc3RhLnNjYW5uZXIudG9rZW5hbmFseXplclRva2VuVHlwZUlERU5USUZJRVJfVE9LRU5MQVpZX1RIUkVTSE9MRHZhbHVlT3JMYXp5U3Vic3RyaW5nY2Fub25pY2FsaXplcmZyb21TdHJpbmdjYW5vbmljYWxpemVwcmVjZWRpbmdDb21tZW50c2Zyb21TdWJzdHJpbmdmcm9tVXRmOEJ5dGVzYXNjaWlPbmx5Ym9vbFZhbHVlaXNJZGVudGlmaWVyY2Fub25pY2FsaXplZFN0cmluZ2RlY29kZVV0Zjhjb3B5Y29weUNvbW1lbnRzbm9TdWNoTWV0aG9kX3ZhbHVlPVN5bnRoZXRpY1N0cmluZ1Rva2VuX2xlbmd0aENvbW1lbnRUb2tlbnByZXZpb3Vzc2V0TmV4dFdpdGhvdXRTZXR0aW5nUHJldmlvdXNtYWpvcm1pbm9yU0lOR0xFX0xJTkVfQ09NTUVOVHRva2VuU3RhcnREYXJ0RG9jVG9rZW5fTGF6eVN1YnN0cmluZ19Db21wYWN0TGF6eVN1YnN0cmluZ19GdWxsTGF6eVN1YnN0cmluZ0RFRkFVTFRfQ09MT1IbWzM5OzQ5bV9zdXBwb3J0c0Fuc2lFc2NhcGVzc3RkZXJyU3VwcG9ydHNDb2xvcnNzdGRvdXRTdXBwb3J0c0NvbG9yc05vdCBlbmFibGluZyBjb2xvcnMsIHN0ZG91dCBkb2VzIG5vdCBzdXBwb3J0IEFOU0kgY29sb3JzLk5vdCBlbmFibGluZyBjb2xvcnMsIHN0ZGVyciBkb2VzIG5vdCBzdXBwb3J0IEFOU0kgY29sb3JzLkJlZ2luVG9rZW5lbmRUb2tlbnByZWNlZGluZ0NvbW1lbnRMVE9QRU5fQ1VSTFlfQlJBQ0tFVE9QRU5fUEFSRU5PUEVOX1NRVUFSRV9CUkFDS0VUPy5bUVVFU1RJT05fUEVSSU9EX09QRU5fU1FVQVJFX0JSQUNLRVRTVFJJTkdfSU5URVJQT0xBVElPTl9FWFBSRVNTSU9OZW5kR3JvdXBEb2N1bWVudGF0aW9uQ29tbWVudFRva2VuQUJTVFJBQ1RBU0FTU0VSVEFTWU5DQVdBSVRCUkVBS0NBU0VDQVRDSENMQVNTQ09OU1RDT05USU5VRUNPVkFSSUFOVERFRkFVTFRERUZFUlJFRERPRFlOQU1JQ0VMU0VFTlVNZW51bUVYUE9SVEVYVEVORFNFWFRFTlNJT05FWFRFUk5BTEZBQ1RPUllGQUxTRWZhbHNlRklOQUxGSU5BTExZRk9SRlVOQ1RJT05HRVRISURFSUZJTVBMRU1FTlRTSU1QT1JUSU5JTlRFUkZBQ0VpbnRlcmZhY2VJU0xBVEVMSUJSQVJZTUlYSU5OQVRJVkVuYXRpdmVORVdOVUxMT0ZPTk9QRVJBVE9SUEFSVFBBVENIcGF0Y2hSRVFVSVJFRFJFVEhST1dSRVRVUk5TRVRTSE9XU09VUkNFU1RBVElDU1VQRVJTV0lUQ0hTWU5DVEhJU1RIUk9XVFJVRVRSWVRZUEVERUZWQVJWT0lEV0hJTEVXSVRIWUlFTERrZXl3b3Jkc2lzQnVpbHRJbmlzUHNldWRvaXNNb2RpZmllcmlzVG9wTGV2ZWxLZXl3b3JkaXNCdWlsdEluT3JQc2V1ZG9pc1BzZXVkb0tleXdvcmRzeW50YXhfY3JlYXRlS2V5d29yZE1hcGtleXdvcmRLZXl3b3JkVG9rZW5pc0tleXdvcmRpc0tleXdvcmRPcklkZW50aWZpZXJTaW1wbGVUb2tlbl9wcmVjZWRpbmdDb21tZW50X3NldENvbW1lbnRQYXJlbnRjaGFyQ291bnRjaGFyRW5kYmVmb3JlU3ludGhldGljaXNFb2ZFT0Zpc09wZXJhdG9yc3RyaW5nVmFsdWVzZXROZXh0bWF0Y2hlc0FueVN5bnRoZXRpY0JlZ2luVG9rZW5TeW50aGV0aWNLZXl3b3JkVG9rZW5wcmVjZWVkaW5nQ29tbWVudGVvZmxleGljYWxseUZpcnN0VG9rZW5DbGFzc05PX0NMQVNTQURESVRJVkVfT1BFUkFUT1JBU1NJR05NRU5UX09QRVJBVE9SQklUV0lTRV9BTkRfT1BFUkFUT1JCSVRXSVNFX09SX09QRVJBVE9SQklUV0lTRV9YT1JfT1BFUkFUT1JDQVNDQURFX09QRVJBVE9SQ09ORElUSU9OQUxfT1BFUkFUT1JFUVVBTElUWV9PUEVSQVRPUklGX05VTExfT1BFUkFUT1JMT0dJQ0FMX0FORF9PUEVSQVRPUkxPR0lDQUxfT1JfT1BFUkFUT1JNVUxUSVBMSUNBVElWRV9PUEVSQVRPUlJFTEFUSU9OQUxfT1BFUkFUT1JTSElGVF9PUEVSQVRPUlVOQVJZX1BPU1RGSVhfT1BFUkFUT1JVTkFSWV9QUkVGSVhfT1BFUkFUT1JET1VCTEVIRVhBREVDSU1BTGhleGFkZWNpbWFsSURFTlRJRklFUmlkZW50aWZpZXJJTlRNVUxUSV9MSU5FX0NPTU1FTlRTQ1JJUFRfVEFHU1RSSU5HQU1QRVJTQU5EQU1QRVJTQU5EX0FNUEVSU0FOREFNUEVSU0FORF9BTVBFUlNBTkRfRVEmJj1BTVBFUlNBTkRfRVEmPUFUQkFOR0JBTkdfRVFCQU5HX0VRX0VRIT09QkFSQkFSX0JBUkJBUl9CQVJfRVF8fD1CQVJfRVF8PUNPTE9OQ09NTUFDQVJFVENBUkVUX0VRXj1DTE9TRV9DVVJMWV9CUkFDS0VUQ0xPU0VfUEFSRU5DTE9TRV9TUVVBUkVfQlJBQ0tFVEVRRVFfRVFFUV9FUV9FUT09PUdUR1RfRVFHVF9HVEdUX0dUX0VRPj49R1RfR1RfR1RHVF9HVF9HVF9FUT4+Pj1IQVNISU5ERVhJTkRFWF9FUUxUX0VRTFRfTFRMVF9MVF9FUTw8PU1JTlVTTUlOVVNfRVEtPU1JTlVTX01JTlVTLS1QRVJDRU5UUEVSQ0VOVF9FUSU9UEVSSU9EUEVSSU9EX1BFUklPRFBMVVNQTFVTX0VRKz1QTFVTX1BMVVMrK1FVRVNUSU9OUVVFU1RJT05fUEVSSU9EPy5RVUVTVElPTl9RVUVTVElPTlFVRVNUSU9OX1FVRVNUSU9OX0VRPz89U0VNSUNPTE9OU0xBU0hTTEFTSF9FUS89U1RBUlNUQVJfRVEqPVNUUklOR19JTlRFUlBPTEFUSU9OX0lERU5USUZJRVIkVElMREVUSUxERV9TTEFTSFRJTERFX1NMQVNIX0VRfi89QkFDS1BJTkdgQkFDS1NMQVNIUEVSSU9EX1BFUklPRF9QRVJJT0RQRVJJT0RfUEVSSU9EX1BFUklPRF9RVUVTVElPTi4uLj9CQURfSU5QVVRtYWxmb3JtZWQgaW5wdXRSRUNPVkVSWXJlY292ZXJ5YWxsdW5zcGVjaWZpZWRpc0FkZGl0aXZlT3BlcmF0b3Jpc0Fzc2lnbm1lbnRPcGVyYXRvcmlzQXNzb2NpYXRpdmVPcGVyYXRvcmlzRXF1YWxpdHlPcGVyYXRvcmlzSW5jcmVtZW50T3BlcmF0b3Jpc011bHRpcGxpY2F0aXZlT3BlcmF0b3Jpc1JlbGF0aW9uYWxPcGVyYXRvcmlzU2hpZnRPcGVyYXRvcmlzVW5hcnlQb3N0Zml4T3BlcmF0b3Jpc1VuYXJ5UHJlZml4T3BlcmF0b3Jpc1NlbGVjdG9yT3BlcmF0b3JOT19QUkVDRURFTkNFQVNTSUdOTUVOVF9QUkVDRURFTkNFQ0FTQ0FERV9QUkVDRURFTkNFQ09ORElUSU9OQUxfUFJFQ0VERU5DRUlGX05VTExfUFJFQ0VERU5DRUxPR0lDQUxfT1JfUFJFQ0VERU5DRUxPR0lDQUxfQU5EX1BSRUNFREVOQ0VFUVVBTElUWV9QUkVDRURFTkNFUkVMQVRJT05BTF9QUkVDRURFTkNFQklUV0lTRV9PUl9QUkVDRURFTkNFQklUV0lTRV9YT1JfUFJFQ0VERU5DRUJJVFdJU0VfQU5EX1BSRUNFREVOQ0VTSElGVF9QUkVDRURFTkNFQURESVRJVkVfUFJFQ0VERU5DRU1VTFRJUExJQ0FUSVZFX1BSRUNFREVOQ0VQUkVGSVhfUFJFQ0VERU5DRVBPU1RGSVhfUFJFQ0VERU5DRVNFTEVDVE9SX1BSRUNFREVOQ0VibGFja2xpc3RlZENvcmVDbGFzc2VzVHlwZUxhYmVsZXJuYW1lTWFwbnVsbC10eXBlbnVsbC1jb25zdGFudG1lc3NhZ2Vzb3JpZ2luTWVzc2FnZWlzT2JqZWN0bmFtZUZvckVudGl0eW5vZGVOYW1lbGFiZWxzRm9yTmFtZWVudGl0eUZvck5hbWVib3R0b20tdHlwZSBGdW5jdGlvbiBleHRlbmRzIHR5cGVBcmdwcmludGluZyB1bmV2YWx1YXRlZCBjb25zdGFudHNMYWJlbGVkTm9kZXR5cGVMYWJlbGVyLyoKIC0gdW5rbm93blVyaXVua25vd25mYXN0YS5rZXJuZWxfYXBpQ2xvbmVWaXNpdG9yaW5zdGFudGlhdGVUb0JvdW5kc3ByaW50Tm9kZU9ucHJpbnRRdWFsaWZpZWROYW1lT25mYXN0YS5jcmFzaENvbnRlbnRUeXBlSHR0cENsaWVudEh0dHBDbGllbnRSZXF1ZXN0U29ja2V0RXhjZXB0aW9uQ3Jhc2ggd2hlbiBjb21waWxpbmcgLAphdCBjaGFyYWN0ZXIgb2Zmc2V0IGRlZmF1bHRTZXJ2ZXJBZGRyZXNzaHR0cDovLzEyNy4wLjAuMTo1OTQxMC9oYXNDcmFzaGVkZmlyc3RTb3VyY2VVcmlyZXNldENyYXNoUmVwb3J0aW5ncmVwb3J0Q3Jhc2g6c2F2ZWRfdHJ5X2NvbnRleHRfdmFyMjpleGNlcHRpb24wOnN0YWNrX3RyYWNlMG5vdGVwYWNrYWdlOmZhc3Rhc2VydmVyVXJpcG9zdFVybGZvcmNlClNlbmRpbmcgY3Jhc2ggcmVwb3J0IGRhdGFwZXJzaXN0ZW50Q29ubmVjdGlvbmJ1ZmZlck91dHB1dGNvbm5lY3Rpb25JbmZvcmVtb3RlQWRkcmVzc3JlbW90ZVBvcnRoZWFkZXJzY29udGVudFR5cGUKCgpGRTo6RVJST1I6OgoKCkVycm9yIHdoZW4gY29udmVydGluZyAgdG8gc3RyaW5nLmN1cnJlbnRVcmlmYXN0YS5kaWxsX3RhcmdldENsYXNzQnVpbGRlclRhcmdldEltcGxlbWVudGF0aW9uRGlsbExpYnJhcnlCdWlsZGVyRGlsbExvYWRlcmxpYnJhcnlCdWlsZGVyc2JhY2tlbmRUYXJnZXRhZGRTb3VyY2VJbmZvcm1hdGlvbmZpbmFsaXplRXhwb3J0c2NyZWF0ZUxpYnJhcnlCdWlsZGVyb3JpZ2lubGlicmFyeUJ1aWxkZXJObyBsaWJyYXJ5IGZvdW5kIGZvciBicmVha0N5Y2xlYWRkTGlicmFyeWZhc3RhLmtlcm5lbF90YXJnZXREaWxsTWVtYmVyQnVpbGRlckFtYmlndW91c0J1aWxkZXJTb3VyY2VDbGFzc0J1aWxkZXJTb3VyY2VMaWJyYXJ5QnVpbGRlclNvdXJjZUxvYWRlcnRyYW5zZm9ybUxpYnJhcmllc0J1aWxkZXJJbnZhbGlkVHlwZUJ1aWxkZXJGaWVsZEJ1aWxkZXJOYW1lZFR5cGVCdWlsZGVyUHJvY2VkdXJlQnVpbGRlckxpYnJhcnlCdWlsZGVyVHlwZUJ1aWxkZXJUeXBlRGVjbGFyYXRpb25CdWlsZGVyS2VybmVsQ29uc3RhbnRFcnJvclJlcG9ydGVyTWV0YWRhdGFDb2xsZWN0b3JtZXRhZGF0YUNvbGxlY3RvcmR5bmFtaWNUeXBlZXhjbHVkZVNvdXJjZWNsb25lZEZvcm1hbHNjcmVhdGVMb2FkZXJlbnRyeVBvaW50c3BhY2thZ2VzTWFwYXNTdHJpbmdyZW1vdmVGcmFnbWVudHBhY2thZ2U6YWRkUHJvYmxlbXJlYWRhY2Nlc3NvcmJ1aWxkZXJzY29sbGVjdE15Q2xhc3Nlc2lzUGF0Y2hiaW5kb2JqZWN0Q2xhc3NCdWlsZGVyaW50ZXJmYWNlc2NyZWF0ZVR5cGVJbmZlcmVuY2VFbmdpbmViZWNvbWVDb3JlTGlicmFyeWxvb2t1cExvY2FsTWVtYmVycmVzb2x2ZVBhcnRzY29tcHV0ZUxpYnJhcnlTY29wZXNyZXNvbHZlVHlwZXNjb21wdXRlRGVmYXVsdFR5cGVzbXlDbGFzc2VzY2hlY2tTZW1hbnRpY3NmaW5pc2hUeXBlVmFyaWFibGVzZmluYWxpemVJbml0aWFsaXppbmdGb3JtYWxzaW5zdGFsbERlZmF1bHRTdXBlcnR5cGVzaW5zdGFsbFN5bnRoZXRpY0NvbnN0cnVjdG9yc3Jlc29sdmVDb25zdHJ1Y3RvcnNjb21wdXRlQ29yZVR5cGVzYnVpbGRDbGFzc0hpZXJhcmNoeWNvbXB1dGVIaWVyYXJjaHlwZXJmb3JtVG9wTGV2ZWxJbmZlcmVuY2VjaGVja1N1cGVydHlwZXNjaGVja0JvdW5kc2NoZWNrT3ZlcnJpZGVzY2hlY2tBYnN0cmFjdE1lbWJlcnNjaGVja1JlZGlyZWN0aW5nRmFjdG9yaWVzYWRkTm9TdWNoTWV0aG9kRm9yd2FyZGVyc2NoZWNrTWl4aW5zYnVpbGRPdXRsaW5lRXhwcmVzc2lvbnNpbnN0YWxsQWxsQ29tcG9uZW50UHJvYmxlbXNhbGxDb21wb25lbnRQcm9ibGVtc0J1aWxkaW5nIGNvbXBvbmVudGJ1aWxkQm9kaWVzZmluaXNoQ2xvbmVkUGFyYW1ldGVyc2ZpbmlzaERlZmVycmVkTG9hZFRlYXJvZmZzZmluaXNoTm9TdWNoTWV0aG9kRm9yd2FyZGVyc2ZpbmlzaE5hdGl2ZU1ldGhvZHNmaW5pc2hQYXRjaE1ldGhvZHNmaW5pc2hBbGxDb25zdHJ1Y3RvcnNydW5CdWlsZFRyYW5zZm9ybWF0aW9uc2Zvcm1hdHRlZE1lc3NhZ2Vjb3B5U291cmNlZGVjbGFyYXRpb25leHBvcnRTY29wZXByb2JsZW1nZXRGaXJzdERlY2xhcmF0aW9uYWN0dWFsUHJvY2VkdXJlTGlua2VkIGNvbXBvbmVudGJ1aWxkTWl4ZWRJblR5cGVJbnN0YWxsZWQgT2JqZWN0IGFzIGltcGxpY2l0IHN1cGVyY2xhc3Npc0V4dGVuc2lvbmluc3RhbGxGb3J3YXJkaW5nQ29uc3RydWN0b3JzaW5zdGFsbERlZmF1bHRDb25zdHJ1Y3Rvckluc3RhbGxlZCBzeW50aGV0aWMgY29uc3RydWN0b3JzcHJvY2FkZFN5bnRoZXRpY0NvbnN0cnVjdG9ybWFrZURlZmF1bHRDb25zdHJ1Y3RvcnN1YnN0aXR1dGlvbk1hcG1ha2VNaXhpbkFwcGxpY2F0aW9uQ29uc3RydWN0b3Jjb3B5Rm9ybWFsY2xvbmVtYWtlQ29uc3RydWN0b3JSZXR1cm5UeXBlb3JpZ2luYWxjbG9uZXJ0eXBlU3Vic3RpdHV0aW9uQ2xvbmVkIGRlZmF1bHQgdmFsdWVzIG9mIGZvcm1hbHN0eXBlUGFyYW1ldGVyVHlwZXNwbGF0Zm9ybUxpYnJhcnlmb3VuZG1pcnJvcnNDYW4ndCBmaW5kIHBsYXRmb3JtTGlicmFyaWVzZmluaXNoQ29uc3RydWN0b3JzRmluaXNoZWQgY29uc3RydWN0b3JzdW5pbml0aWFsaXplZEZpZWxkc25vbkZpbmFsRmllbGRzY29uc3RydWN0b3JJbml0aWFsaXplZEZpZWxkc3N1cGVyVGFyZ2V0aXNSZWRpcmVjdGluZ215SW5pdGlhbGl6ZWRGaWVsZHNmaWVsZEJ1aWxkZXJzY29wZWxvY2FsaW5pdGlhbGl6ZWRGaWVsZHNkYXJ0Omh0bWxkYXJ0OnN2Z2RhcnQ6X25hdGl2ZV90eXBlZF9kYXRhZGFydDpfaW50ZXJjZXB0b3JzanNfc3RyaW5nLmRhcnRpbnNlcnRkZXN1Z2FyU2V0c0V2YWx1YXRlZCBjb25zdGFudHNydW5Qcm9jZWR1cmVUcmFuc2Zvcm1hdGlvbnNWZXJpZmllZCBjb21wb25lbnRyZWFkUGF0Y2hGaWxlc3BhcnRPZmZzZXRzcGFydE9mVXJpS2VybmVsRGlhZ25vc3RpY1JlcG9ydGVyZGVmYXVsdFN1cGVyQ29uc3RydWN0b3JJT1NpbmtMaW1pdGVkQmluYXJ5UHJpbnRlckJ5dGVTaW5ra0RlYnVnQ2xhc3NOYW1lI0RlYnVnQ2xhc3N3cml0ZUNvbXBvbmVudFRvRmlsZWJ5dGVTaW5rY3JlYXRlRXhwcmVzc2lvbkV2YWx1YXRpb25Db21wb25lbnRyZWFsTGlicmFyeWZha2VMaWJyYXJ5ZXZhbHVhdGVyZWFsQ2xhc3NmYWtlQ2xhc3N0eXBlUGFyYW1zdHlwZVBhcmFtbmV3Tm9kZXZpc2l0VHlwZXNlcmlhbGl6ZVByb2NlZHVyZWZhc3RhLnZlcmlmaWVyVmVyaWZ5aW5nVmlzaXRvclR5cGVTY2hlbWFWaXNpdG9yVW5rbm93blR5cGVTeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnRGYXN0YVZlcmlmeWluZ1Zpc2l0b3Jza2lwUGxhdGZvcm1pc091dGxpbmVjaGVja0xvY2F0aW9uJyBoYXMgbm8gZmlsZVVyaScgaGFzIG5vIGZpbGVPZmZzZXRjaGVja1N1cGVySW52b2NhdGlvbmNvbnRhaW5pbmdNZW1iZXJnZXRDb250YWluaW5nTWVtYmVyU3VwZXIgY2FsbCBvdXRzaWRlIG9mIGFueSBtZW1iZXJTdXBlciBjYWxsIGluIGEgbWVtYmVyIGxhY2tpbmcgVHJhbnNmb3JtZXJGbGFnLnN1cGVyQ2FsbHNkZXRhaWxzTm8gb2Zmc2V0IGZvciBMZWFraW5nIHNoYWRvdyBub2RlOiB2aXNpdFVua25vd25UeXBlVW5leHBlY3RlZCBhcHBlYXJhbmNlIG9mIHRoZSB1bmtub3duIHR5cGUuQXR0ZW1wdCB0byBpbnZva2UgcmVkaXJlY3RpbmcgZmFjdG9yeS52ZXJpZmllcmZhc3RhLmxvYWRlclF1ZXVlU2NvcGVEZWNsYXJhdGlvbkJ1aWxkZXJNb2RpZmllckJ1aWxkZXJCb2R5QnVpbGRlcnVucGFyc2VkTGlicmFyaWVzaGFuZGxlZEVycm9yc3VuaGFuZGxlZEVycm9yc3NlZW5NZXNzYWdlc2J5dGVDb3VudG91dGxpbmVTdW1tYXJ5VGVtcGxhdGVpc1NvdXJjZUxvYWRlcmRhcnQtZXh0cGFja2FnZUZyYWdtZW50dHJhbnNsYXRlVXJpb3JnLWRhcnRsYW5nLXVudHJhbnNsYXRhYmxlLXVyaWhhc1BhY2thZ2VTcGVjaWZpZWRMYW5ndWFnZVZlcnNpb25wYWNrYWdlU3BlY2lmaWVkTGFuZ3VhZ2VWZXJzaW9uTWFqb3JwYWNrYWdlU3BlY2lmaWVkTGFuZ3VhZ2VWZXJzaW9uTWlub3Jwcm9wZXJ0aWVzZm91bmRFbnRyaWVzcHJvcGVydHlkYXJ0PWxhbmdhdWdlVmVyc2lvblN0cmluZ2RvdFNlcGFyYXRlZFBhcnRzZXhwbGljaXRsb2FkRXh0cmFSZXF1aXJlZExpYnJhcmllc21heUltcGxlbWVudFJlc3RyaWN0ZWRUeXBlc3JlY29yZEFjY2Vzc2lzUGFydGVuc3VyZUNvcmVMaWJyYXJ5ZGFydDpjb2xsZWN0aW9uYnVpbGRCb2R5bG9nU3VtbWFyeXJlbW92ZUZpcnN0YnVpbGRPdXRsaW5laW5NaWNyb3NlY29uZHN3YXNIYW5kbGVkcHJvYmxlbU9uTGlicmFyeWFkZE1lc3NhZ2VmaXhTZXZlcml0eW1lc3NhZ2U6IApjaGFyT2Zmc2V0OiAKZmlsZVVyaTogCnNldmVyaXR5OiBjb250ZXh0TWVzc2FnZWNyZWF0ZUZvcm1hdHRlZE1lc3NhZ2VnZXRBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkVycm9yZ2V0Q29tcGlsZVRpbWVFcnJvcmdldER1cGxpY2F0ZWRGaWVsZEluaXRpYWxpemVyRXJyb3JnZXROYXRpdmVBbm5vdGF0aW9uY29tcHV0ZUNsYXNzQnVpbGRlckZyb21UYXJnZXRDbGFzc2NvbXB1dGVUeXBlQnVpbGRlcmNyZWF0ZUJvZHlCdWlsZGVyRm9yT3V0bGluZUV4cHJlc3Npb25kZWNsYXJhdGlvbkJ1aWxkZXJ1bnRyYW5zbGF0YWJsZVVyaVNjaGVtZWZyb250X2VuZC5mcm9udF9lbmRmYXN0YS5zY2FubmVyLmFic3RyYWN0X3NjYW5uZXJMaXN0TWl4aW5VaW50MTZMaXN0VWludDMyTGlzdE5vbkFzY2lpSWRlbnRpZmllclRva2VuS2V5d29yZFN0YXRlbGFuZ3VhZ2VWZXJzaW9uQWJzdHJhY3RTY2FubmVyTEFaWV9BU1NJR05NRU5UX0VOQUJMRURfZW5hYmxlRXh0ZW5zaW9uTWV0aG9kc19lbmFibGVOb25OdWxsYWJsZV9lbmFibGVUcmlwbGVTaGlmdGVycm9yVGFpbGNvbW1lbnRzY29tbWVudHNUYWlsZ3JvdXBpbmdTdGFja251bWJlck9mQnl0ZXNIaW50ZW5hYmxlRXh0ZW5zaW9uTWV0aG9kc2VuYWJsZU5vbk51bGxhYmxlZW5hYmxlVHJpcGxlU2hpZnRhZHZhbmNlY3VycmVudEFzVW5pY29kZXBlZWtoYW5kbGVVbmljb2Rlc3RhcnRTY2FuT2Zmc2V0c2Nhbk9mZnNldHN0cmluZ09mZnNldGZpcnN0VG9rZW5iZWdpblRva2VuYXBwZW5kU3Vic3RyaW5nVG9rZW5leHRyYU9mZnNldGFwcGVuZFRva2VuY3JlYXRlU3Vic3RyaW5nVG9rZW5hcHBlbmRTeW50aGV0aWNTdWJzdHJpbmdUb2tlbnN5bnRoZXRpY0NoYXJzY3JlYXRlU3ludGhldGljU3Vic3RyaW5nVG9rZW5hcHBlbmRQcmVjZWRlbmNlVG9rZW5zZWxlY3RjaG9pY2VhcHBlbmRLZXl3b3JkVG9rZW5kaXNjYXJkT3Blbkx0YXBwZW5kRW9mVG9rZW51bm1hdGNoZWRCZWdpbkdyb3VwYXBwZW5kV2hpdGVTcGFjZWxpbmVGZWVkSW5NdWx0aWxpbmVhcHBlbmRCZWdpbkdyb3VwYXBwZW5kRW5kR3JvdXBvcGVuS2luZGRpc2NhcmRCZWdpbkdyb3VwVW50aWxhcHBlbmRHdGFwcGVuZEd0R3RwcmVwZW5kRXJyb3JUb2tlbmNyZWF0ZUNvbW1lbnRUb2tlbmNyZWF0ZURhcnREb2NUb2tlbmNyZWF0ZUxhbmd1YWdlVmVyc2lvblRva2Vub3JpZ2luYWxTdGFja2Rpc2NhcmRJbnRlcnBvbGF0aW9uYXRFbmRPZkZpbGVvbGRUYWlsYmlnSGVhZGVyU3dpdGNoYmlnU3dpdGNodG9rZW5pemVTbGFzaE9yQ29tbWVudHRva2VuaXplTGFuZ3VhZ2VWZXJzaW9uT3JTaW5nbGVMaW5lQ29tbWVudG5leHRMb3dlcnRva2VuaXplUmF3U3RyaW5nS2V5d29yZE9ySWRlbnRpZmllcnRva2VuaXplS2V5d29yZE9ySWRlbnRpZmllcnRva2VuaXplRG90c09yTnVtYmVydG9rZW5pemVFcXVhbHN0b2tlbml6ZVN0cmluZ3Rva2VuaXplTGVzc1RoYW50b2tlbml6ZUdyZWF0ZXJUaGFudG9rZW5pemVFeGNsYW1hdGlvbnRva2VuaXplT3BlblNxdWFyZUJyYWNrZXR0b2tlbml6ZUF0dG9rZW5pemVOdW1iZXJ0b2tlbml6ZUFtcGVyc2FuZHRva2VuaXplSGV4T3JOdW1iZXJ0b2tlbml6ZVF1ZXN0aW9udG9rZW5pemVCYXJ0b2tlbml6ZVBsdXN0b2tlbml6ZU1pbnVzdG9rZW5pemVNdWx0aXBseXRva2VuaXplQ2FyZXR0b2tlbml6ZVRpbGRldG9rZW5pemVQZXJjZW50dG9rZW5pemVUYWd0b2tlbml6ZUZyYWN0aW9uUGFydG5leHRuZXh0dG9rZW5pemVIZXhoYXNEaWdpdHNkb25laGFzRGlnaXRoYXNFeHBvbmVudERpZ2l0c3Rva2VuaXplTXVsdGlMaW5lQ29tbWVudHRva2VuaXplU2luZ2xlTGluZUNvbW1lbnR0b2tlbml6ZVNpbmdsZUxpbmVDb21tZW50UmVzdG1ham9yU3RhcnRtaW5vclN0YXJ0X2FwcGVuZFRvQ29tbWVudFN0cmVhbWRhcnRkb2NhcHBlbmREYXJ0RG9jYXBwZW5kQ29tbWVudGFzY2lpT25seUNvbW1lbnRhc2NpaU9ubHlMaW5lc3VuaWNvZGVTdGFydG5lc3RpbmdhZHZhbmNlQWZ0ZXJFcnJvcm5ld0NvbW1lbnRhbGxvd0RvbGxhcm5leHRDYXBpdGFsdG9rZW5pemVJZGVudGlmaWVycmF3cXVvdGVDaGFydG9rZW5pemVNdWx0aUxpbmVTdHJpbmd0b2tlbml6ZVNpbmdsZUxpbmVSYXdTdHJpbmd0b2tlbml6ZVNpbmdsZUxpbmVTdHJpbmdxdW90ZVN0YXJ0dG9rZW5pemVTdHJpbmdJbnRlcnBvbGF0aW9udW50ZXJtaW5hdGVkU3RyaW5naXNNdWx0aUxpbmVpc1Jhd3Rva2VuaXplSW50ZXJwb2xhdGVkRXhwcmVzc2lvbnRva2VuaXplSW50ZXJwb2xhdGVkSWRlbnRpZmllcnRva2VuaXplTXVsdGlMaW5lUmF3U3RyaW5nYXNjaWlPbmx5U3RyaW5nYXNjaWlPbmx5TGluZWVycm9yVG9rZW5jb2RlVW5pdHNzdWZmaXhlcnJvclN0YXJ0c2hvdWxkQWR2YW5jZV9MaW5lU3RhcnRzJk9iamVjdCZMaXN0TWl4aW52bTpwcmVmZXItaW5saW5lbWF0Y2hGb3VuZHdyaXRlQWxsX2Nsb3NlR2FwX2ZpbHRlcnJldGFpbk1hdGNoaW5ncmV0YWluZWRfY29tcGFyZUFueXNodWZmbGVyYW5kb21wb3NuZXh0SW50dG1wbGlzdExlbmd0aGdldFJhbmdlcmVtb3ZlUmFuZ2VmaWxsc2tpcENvdW50b3RoZXJMaXN0b3RoZXJTdGFydHJlcGxhY2VSYW5nZW5ld0NvbnRlbnRzcmVtb3ZlTGVuZ3RoaW5zZXJ0TGVuZ3RoaW5zZXJ0RW5kaW5kZXhXaGVyZWxhc3RJbmRleFdoZXJlcmVtb3ZlQXRpbnNlcnRBbGxpbnNlcnRpb25MZW5ndGhzZXRBbGxMaW5lU3RhcnRzYXJyYXlhcnJheUxlbmd0aGV4cGVjdGVkTnVtYmVyT2ZMaW5lc2dyb3dzd2l0Y2hUb1VpbnQzMm5ld0xlbmd0aE1pbmltdW1uZXdBcnJheWNsYXNzaWNjbG9zZUJyYWNlSW5mb0Zvcl9pc0lkZW50aWZpZXJDaGFyZGFydDJqcy5zY2FubmVyLnN0cmluZ19zY2FubmVyZW5zdXJlWmVyb1Rlcm1pbmF0aW9uAGlzTGVnYWxJZGVudGlmaWVyc3RhcnRUb2tlbmZhc3RhLnNjYW5uZXIudXRmOF9ieXRlc19zY2FubmVydW5pY29kZUJvbUNoYXJhY3RlclJ1bmVzY2FuU2xhY2tzY2FuU2xhY2tPZmZzZXR1dGY4U2xhY2tsYXN0VW5pY29kZU9mZnNldHN0cmluZ09mZnNldFNsYWNrT2Zmc2V0Y29udGFpbnNCb21BdG5leHRDb2RlUG9pbnRuZXh0Qnl0ZWV4cGVjdGVkSGlnaEJ5dGVzcmVzZmFzdGEuc2Nhbm5lci5yZWNvdmVySW50ZXJuYWwgZXJyb3I6IEFsbCBlcnJvciB0b2tlbnMgc2hvdWxkIGhhdmUgYmVlbiBwcmVwZW5kZWQ6c3ludGhlc2l6ZVRva2Vuc2tpcFRvRW9mY2xvc2VCcmFjZUZvcm9wZW5CcmFjZWNsb3NlUXVvdGVGb3JvcGVuUXVvdGUiIiInJydyInInciIiInInJydkYXJ0X3NjYW5uZXIuZXJyb3JfdG9rZW5lcnJvck1zZ14jWzAtOV0qICpQYXJzZXJ0cmFjZUxpbmVzdW5zdXBwb3J0ZWQgb3BlcmF0aW9uRW5jb2RpbmdFcnJvclRva2VuRW5jb2RpbmdFcnJvclRva2VuKClOb25Bc2NpaUlkZW50aWZpZXJUb2tlbihOb25Bc2NpaVdoaXRlc3BhY2VUb2tlbk5vbkFzY2lpV2hpdGVzcGFjZVRva2VuKEFzY2lpQ29udHJvbENoYXJhY3RlclRva2VuQXNjaWlDb250cm9sQ2hhcmFjdGVyVG9rZW4oVW5zdXBwb3J0ZWRPcGVyYXRvcihVbnRlcm1pbmF0ZWRTdHJpbmcoVW50ZXJtaW5hdGVkVG9rZW4oVW5tYXRjaGVkVG9rZW4oZmFzdGEuc2Nhbm5lci50b2tlbl9jb25zdGFudHNLRVlXT1JEX1RPS0VOU0NSSVBUX1RPS0VOQkFEX0lOUFVUX1RPS0VORE9VQkxFX1RPS0VOSU5UX1RPS0VOUkVDT1ZFUllfVE9LRU5IRVhBREVDSU1BTF9UT0tFTlNUUklOR19UT0tFTkFNUEVSU0FORF9UT0tFTkJBQ0tQSU5HX1RPS0VOQkFDS1NMQVNIX1RPS0VOQkFOR19UT0tFTkJBUl9UT0tFTkNPTE9OX1RPS0VOQ09NTUFfVE9LRU5FUV9UT0tFTkdUX1RPS0VOSEFTSF9UT0tFTk9QRU5fQ1VSTFlfQlJBQ0tFVF9UT0tFTk9QRU5fU1FVQVJFX0JSQUNLRVRfVE9LRU5PUEVOX1BBUkVOX1RPS0VOTFRfVE9LRU5NSU5VU19UT0tFTlBFUklPRF9UT0tFTlBMVVNfVE9LRU5RVUVTVElPTl9UT0tFTkFUX1RPS0VOQ0xPU0VfQ1VSTFlfQlJBQ0tFVF9UT0tFTkNMT1NFX1NRVUFSRV9CUkFDS0VUX1RPS0VOQ0xPU0VfUEFSRU5fVE9LRU5TRU1JQ09MT05fVE9LRU5TTEFTSF9UT0tFTlRJTERFX1RPS0VOU1RBUl9UT0tFTlBFUkNFTlRfVE9LRU5DQVJFVF9UT0tFTlNUUklOR19JTlRFUlBPTEFUSU9OX1RPS0VOTFRfRVFfVE9LRU5GVU5DVElPTl9UT0tFTlNMQVNIX0VRX1RPS0VOUEVSSU9EX1BFUklPRF9QRVJJT0RfVE9LRU5QRVJJT0RfUEVSSU9EX1RPS0VORVFfRVFfRVFfVE9LRU5FUV9FUV9UT0tFTkxUX0xUX0VRX1RPS0VOTFRfTFRfVE9LRU5HVF9FUV9UT0tFTkdUX0dUX0VRX1RPS0VOSU5ERVhfRVFfVE9LRU5JTkRFWF9UT0tFTkJBTkdfRVFfRVFfVE9LRU5CQU5HX0VRX1RPS0VOQU1QRVJTQU5EX0FNUEVSU0FORF9UT0tFTkFNUEVSU0FORF9BTVBFUlNBTkRfRVFfVE9LRU5BTVBFUlNBTkRfRVFfVE9LRU5CQVJfQkFSX1RPS0VOQkFSX0JBUl9FUV9UT0tFTkJBUl9FUV9UT0tFTlNUQVJfRVFfVE9LRU5QTFVTX1BMVVNfVE9LRU5QTFVTX0VRX1RPS0VOTUlOVVNfTUlOVVNfVE9LRU5NSU5VU19FUV9UT0tFTlRJTERFX1NMQVNIX0VRX1RPS0VOVElMREVfU0xBU0hfVE9LRU5QRVJDRU5UX0VRX1RPS0VOR1RfR1RfVE9LRU5DQVJFVF9FUV9UT0tFTkNPTU1FTlRfVE9LRU5TVFJJTkdfSU5URVJQT0xBVElPTl9JREVOVElGSUVSX1RPS0VOUVVFU1RJT05fUEVSSU9EX1RPS0VOUVVFU1RJT05fUVVFU1RJT05fVE9LRU5RVUVTVElPTl9RVUVTVElPTl9FUV9UT0tFTkdFTkVSSUNfTUVUSE9EX1RZUEVfQVNTSUdOX1RPS0VOR0VORVJJQ19NRVRIT0RfVFlQRV9MSVNUX1RPS0VOR1RfR1RfR1RfVE9LRU5QRVJJT0RfUEVSSU9EX1BFUklPRF9RVUVTVElPTl9UT0tFTkdUX0dUX0dUX0VRX1RPS0VOUVVFU1RJT05fUEVSSU9EX09QRU5fU1FVQVJFX0JSQUNLRVRfVE9LRU5mYXN0YS5ib2R5X2J1aWxkZXJDb25zdGFudENvbnRleHRmYXN0YU1vZGlmaWVyY29uc3RNYXNrY292YXJpYW50TWFza2ZpbmFsTWFza2xhdGVNYXNrY2FsbE5hbWVpbmRleEdldE5hbWVpbmRleFNldE5hbWVtaW51c05hbWVwbHVzTmFtZUFzc2VydFBhcnNlckZvcm1hbFBhcmFtZXRlcktpbmRJZGVudGlmaWVyQ29udGV4dE1lbWJlcktpbmRsZW5ndGhGb3JUb2tlbmxlbmd0aE9mU3Bhbm9mZnNldEZvclRva2Vub3B0aW9uYWxRdW90ZWFuYWx5emVRdW90ZXVuZXNjYXBldW5lc2NhcGVGaXJzdFN0cmluZ1BhcnR1bmVzY2FwZUxhc3RTdHJpbmdQYXJ0dW5lc2NhcGVTdHJpbmdQcm9ibGVtQnVpbGRlckZpeGVkTnVsbGFibGVMaXN0R3Jvd2FibGVMaXN0SnVtcFRhcmdldEtpbmROdWxsVmFsdWVQYXJzZXJSZWNvdmVyeVNjb3BlTGlzdGVuZXJUeXBlSW5mZXJyZXJUeXBlUHJvbW90ZXJUeXBlUHJvbW90aW9uRmFjdFR5cGVQcm9tb3Rpb25TY29wZVNwcmVhZE1hcEVudHJ5Y29udmVydFRvTWFwRW50cnlpc0NvbnZlcnRpYmxlVG9NYXBFbnRyeUNvbnN0bmVzc0V4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXJGb3Jlc3RJbXBsaWNpdFR5cGVBcmd1bWVudHNoYWRvd1N5bnRoZXRpY1dyYXBwZXJjYWxjdWxhdGVCb3VuZHNmb3Jlc3RjbGFzc0J1aWxkZXJpc0RlY2xhcmF0aW9uSW5zdGFuY2VNZW1iZXJlbmNsb3NpbmdTY29wZXN0cmluZ0V4cGVjdGVkQWZ0ZXJOYXRpdmVpZ25vcmVNYWluSW5HZXRNYWluQ2xvc3VyZXR5cGVJbmZlcnJlcnR5cGVQcm9tb3Rlcm5lZWRzSW1wbGljaXRTdXBlckluaXRpYWxpemVyZm9ybWFsUGFyYW1ldGVyU2NvcGVpbkluaXRpYWxpemVyaW5GaWVsZEluaXRpYWxpemVyaW5DYXRjaENsYXVzZWluQ2F0Y2hCbG9ja2Z1bmN0aW9uTmVzdGluZ0xldmVsdHJhbnNmb3JtQ29sbGVjdGlvbnN0cmFuc2Zvcm1TZXRMaXRlcmFsc3Byb2JsZW1Jbkxvb3BPclN3aXRjaHN3aXRjaFNjb3BlY29uc3RhbnRDb250ZXh0Q29uc3RhbnRDb250ZXh0Lm5vbmVjdXJyZW50TG9jYWxWYXJpYWJsZVR5cGVjdXJyZW50TG9jYWxWYXJpYWJsZU1vZGlmaWVyc3JlZGlyZWN0aW5nRmFjdG9yeUludm9jYXRpb25zdmFyaWFibGVzV2l0aE1ldGFkYXRhbXVsdGlWYXJpYWJsZXNXaXRoTWV0YWRhdGFleHRlbnNpb25UaGlzZXh0ZW5zaW9uVHlwZVBhcmFtZXRlcnNfYnVpbHRpbnVpd2l0aFBhcmVudHNmb3JGaWVsZGZvck91dGxpbmVFeHByZXNzaW9udHlwZUluZmVyZW5jZUVuZ2luZWNyZWF0ZUxvY2FsVHlwZUluZmVycmVyaW5Db25zdHJ1Y3RvcmlzRGVjbGFyYXRpb25JbnN0YW5jZUNvbnRleHR0eXBlU2NoZW1hRW52aXJvbm1lbnRpbXBsaWNpdFR5cGVBcmd1bWVudHB1c2hwb3BGb3JWYWx1ZXRvVmFsdWVwb3Bwb3BGb3JFZmZlY3R0b0VmZmVjdHBvcEZvclZhbHVlSWZOb3ROdWxsYnVpbGRTaW1wbGVSZWFkYnVpbGRQcm9ibGVtYnVpbGRGb3JFZmZlY3Rwb3BMaXN0Rm9yVmFsdWVwb3BMaXN0Rm9yRWZmZWN0cG9wQmxvY2tjbG9zZUJyYWNlY3JlYXRlQmxvY2tzdGFja3BvcFN0YXRlbWVudElmTm90TnVsbHBvcFN0YXRlbWVudHdyYXBWYXJpYWJsZXNlbnRlclN3aXRjaFNjb3BlTnVsbFZhbHVlLlN3aXRjaFNjb3BlZXhpdFN3aXRjaFNjb3Blb3V0ZXJTd2l0Y2hTY29wZXVuY2xhaW1lZEZvcndhcmREZWNsYXJhdGlvbnN1c2Vyc3dyYXBJblByb2JsZW1TdGF0ZW1lbnRmb3J3YXJkRGVjbGFyZUxhYmVsd3JhcFZhcmlhYmxlSW5pdGlhbGl6ZXJJbkVycm9yd3JhcEluTG9jYXRlZFByb2JsZW1kZWNsYXJlVmFyaWFibGVjcmVhdGVKdW1wVGFyZ2V0aW5mZXJBbm5vdGF0aW9uc2luZmVyTWV0YWRhdGF0cmFuc2Zvcm1MaXN0UG9zdEluZmVyZW5jZWJlZ2luTWV0YWRhdGFkZWJ1Z0V2ZW50Q29uc3RhbnRDb250ZXh0LmluZmVycmVkZW5kTWV0YWRhdGFwZXJpb2RCZWZvcmVOYW1lTWV0YWRhdGFwdXNoUXVhbGlmaWVkUmVmZXJlbmNlX2J1aWxkQ29uc3RydWN0b3JSZWZlcmVuY2VJbnZvY2F0aW9uQ29uc3RuZXNzLmV4cGxpY2l0Q29uc3RuYW1lT3JpZ2lucGVyaW9kZ2VuZXJhdG9yYnVpbGRQcm9wZXJ0eUFjY2Vzc3NhdmVkQ29uc3RhbnRDb250ZXh0d3JhcEluUHJvYmxlbWVuZE1ldGFkYXRhU3Rhck1ldGFkYXRhU3Rhck51bGxWYWx1ZS5NZXRhZGF0YWVuZFRvcExldmVsRmllbGRzc3RhdGljVG9rZW5jb3ZhcmlhbnRUb2tlbmxhdGVUb2tlbnZhckZpbmFsT3JDb25zdFRvcExldmVsRmllbGRzcmVwb3J0Tm9uTnVsbGFibGVNb2RpZmllckVycm9yZW5kQ2xhc3NGaWVsZHNGaWVsZHNmaW5pc2hGaWVsZHNpbmZlckZpZWxkSW5pdGlhbGl6ZXJidWlsdFR5cGV0cmFuc2Zvcm1Qb3N0SW5mZXJlbmNlYnVpbGREYXJ0VHlwZXJlc29sdmVSZWRpcmVjdGluZ0ZhY3RvcnlUYXJnZXRzZmluaXNoVmFyaWFibGVNZXRhZGF0YWVuZE1lbWJlcmVuZEJsb2NrRnVuY3Rpb25Cb2R5QmxvY2tGdW5jdGlvbkJvZHlOdWxsVmFsdWUuQmxvY2tleGl0TG9jYWxTY29wZXByZXBhcmVJbml0aWFsaXplcnNjb21wdXRlRm9ybWFsUGFyYW1ldGVySW5pdGlhbGl6ZXJTY29wZWZvcm1hbHNpc0luaXRpYWxpemluZ0Zvcm1hbGJ1aWxkSW52YWxpZEluaXRpYWxpemVyZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb25idWlsZEZpZWxkSW5pdGlhbGl6ZXJmb3JtYWxUeXBlYWRkSW5pdGlhbGl6ZXJoYW5kbGVOb0luaXRpYWxpemVyc05vSW5pdGlhbGl6ZXJzYmVnaW5Jbml0aWFsaXplcnNlbmRJbml0aWFsaXplcnNJbml0aWFsaXplcnNiZWdpbkluaXRpYWxpemVyZW5kSW5pdGlhbGl6ZXJidWlsZFN1cGVySW5pdGlhbGl6ZXJpc1Rocm93aW5mZXJJbml0aWFsaXplcl9jb21wdXRlUmV0dXJuVHlwZUNvbnRleHRmaW5pc2hGdW5jdGlvbmFzeW5jTW9kaWZpZXJmaW5pc2hlZGlzT3B0aW9uYWxyZWFsUGFyYW1ldGVyY3JlYXRlTnVsbExpdGVyYWxpbmZlclBhcmFtZXRlckluaXRpYWxpemVyaW5mZXJGdW5jdGlvbkJvZHlmdXR1cmVCb3R0b21UeXBlZnV0dXJlT2ZCb3R0b21zdHJlYW1Cb3R0b21UeXBlc3RyZWFtT2ZCb3R0b21pdGVyYWJsZUJvdHRvbVR5cGVpdGVyYWJsZU9mQm90dG9tYXN5bmMsIGFzeW5jKiwgc3luYywgb3Igc3luYypjcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50ZmluaXNoQ29uc3RydWN0b3JlbnN1cmVMaWJyYXJ5TG9hZGVkaXNCdWlsdEFuZE1hcmtlZGludm9jYXRpb25pbmZlcnJlZFR5cGVpbml0aWFsVGFyZ2V0cmVwbGFjZW1lbnROb2RlcmVkaXJlY3Rpb25UYXJnZXRyZXNvbHZlZFRhcmdldGNvbnN0cnVjdG9yTmFtZUZvckRpYWdub3N0aWNzZXZhbHVhdGVBcmd1bWVudHNCZWZvcmVjcmVhdGVBcmd1bWVudHNidWlsZEFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3JyZWRpcmVjdGluZ0ZhY3RvcnlCb2R5ZXJyb3JOYW1ldGhyb3dOb1N1Y2hNZXRob2RFcnJvcmJ1aWxkU3RhdGljSW52b2NhdGlvbmNvbnN0bmVzc0NvbnN0bmVzcy5leHBsaWNpdE5ld2ZpbmlzaE1ldGFkYXRhdGVtcG9yYXJ5UGFyZW50cGFyc2VTaW5nbGVFeHByZXNzaW9ucGFyc2VydHlwZVBhcmFtZXRlckJ1aWxkZXJzZW50ZXJGdW5jdGlvblR5cGVTY29wZWVudGVyTG9jYWxTY29wZWNvbXB1dGVGb3JtYWxQYXJhbWV0ZXJTY29wZXBhcnNlRXhwcmVzc2lvbnN5bnRoZXRpY1ByZXZpb3VzVG9rZW5mYWtlUmV0dXJucGFyc2VJbml0aWFsaXplcnNjaGVja0VtcHR5cGFyc2VGaWVsZEluaXRpYWxpemVycGFyc2VBbm5vdGF0aW9ucGFyc2VNZXRhZGF0YWFjdHVhbENvbnN0cnVjdG9ybG9va3VwQ29uc3RydWN0b3JjcmVhdGVBcmd1bWVudHNFbXB0eWNoZWNrQXJndW1lbnRzRm9yRnVuY3Rpb25mdWxsTmFtZUZvckVycm9yc2hhbmRsZUV4cHJlc3Npb25TdGF0ZW1lbnRlbmRBcmd1bWVudHNmaXJzdE5hbWVkQXJndW1lbnRJbmRleGhhbmRsZVBhcmVudGhlc2l6ZWRDb25kaXRpb25QYXJlbnRoZXNpemVkQ29uZGl0aW9uY3JlYXRlUGFyZW50aGVzaXplZENvbmRpdGlvbmhhbmRsZVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uUGFyZW50aGVzaXplZEV4cHJlc3Npb25pc1BhcmVudGhlc2l6ZWRoYW5kbGVTZW5kY2hlY2tTdGF0ZU51bGxWYWx1ZS5Bcmd1bWVudHNOdWxsVmFsdWUuVHlwZUFyZ3VtZW50c1NlbmRhcmd1bWVudHNUeXBlQXJndW1lbnRzYXJndW1lbnRzU2V0VHlwZUFyZ3VtZW50c2J1aWxkRGFydFR5cGVBcmd1bWVudHNmaW5pc2hTZW5kZG9JbnZvY2F0aW9uYnVpbGRNZXRob2RJbnZvY2F0aW9uaXNJbXBsaWNpdENhbGxiZWdpbkNhc2NhZGVleHRlbmRjcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uRm9yVmFsdWVlbmRDYXNjYWRlY2FzY2FkZVJlY2VpdmVyZmluYWxpemViZWdpbkNhc2VFeHByZXNzaW9uY2FzZUtleXdvcmRlbmRDYXNlRXhwcmVzc2lvbmNvbG9uYmVnaW5CaW5hcnlFeHByZXNzaW9ubGhzZW50ZXJMb2dpY2FsRXhwcmVzc2lvbmVuZEJpbmFyeUV4cHJlc3Npb25CaW5hcnlFeHByZXNzaW9uZG9Eb3RPckNhc2NhZGVFeHByZXNzaW9uZG9Mb2dpY2FsRXhwcmVzc2lvbmRvSWZOdWxsZG9JZk5vdE51bGx0aGlzQWNjZXNzb3JSZWNlaXZlcmNyZWF0ZVRoaXNFeHByZXNzaW9uYnVpbGRCaW5hcnlPcGVyYXRvcm5lZ2F0ZWlzQ29uc3RhbnRFeHByZXNzaW9uY3JlYXRlTm90bG9naWNhbEV4cHJlc3Npb25jcmVhdGVMb2dpY2FsRXhwcmVzc2lvbmV4aXRMb2dpY2FsRXhwcmVzc2lvbmNyZWF0ZUNvbmRpdGlvbmFsRXhwcmVzc2lvbnNlbmR3aXRoUmVjZWl2ZXJpc051bGxBd2FyZWFyZUFyZ3VtZW50c0NvbXBhdGlibGVwZXJpb2RJbmRleGtlcm5lbE5hbWV3YXJuVW5yZXNvbHZlZEdldHJlcG9ydFdhcm5pbmd3YXJuVW5yZXNvbHZlZFNldHdhcm5VbnJlc29sdmVkTWV0aG9kY3JlYXRlVGhyb3dhZGRQcm9ibGVtRXJyb3JJZkNvbnN0cGxhaW5OYW1lZG90SW5kZXh3YXJuVHlwZUFyZ3VtZW50c01pc21hdGNobG9va3VwSW5zdGFuY2VNZW1iZXJoYW5kbGVJZGVudGlmaWVyZGVwcmVjYXRlZGRlcHJlY2F0ZWRfaXNTY29wZVJlZmVyZW5jZXNjb3BlTG9va3VwaW5EZWNsYXJhdGlvbnRvcExldmVsVmFyaWFibGVEZWNsYXJhdGlvbmZpZWxkRGVjbGFyYXRpb25oYXNDb25zdENvbnN0cnVjdG9yQ29uc3RhbnRDb250ZXh0LnJlcXVpcmVkYWxsb3dlZEluQ29uc3RhbnRFeHByZXNzaW9uY3JlYXRlVmFyaWFibGVHZXRmYWN0Z2V0RmFjdEZvckFjY2Vzc2N1cnJlbnRTY29wZV9jcmVhdGVSZWFkT25seVZhcmlhYmxlQWNjZXNzaXNRdWFsaWZpZWRmaW5kU3RhdGljQnVpbGRlcl9nZXRNYWluQ2xvc3VyZWlzVHlwZURlY2xhcmF0aW9uaXNMb2NhbGlzQ2xhc3NJbnN0YW5jZU1lbWJlcmdldHRlcmlzRXh0ZW5zaW9uSW5zdGFuY2VNZW1iZXJfZ2V0Q29ycmVzcG9uZGluZ1NldHRlckJ1aWxkZXJpc1JlZ3VsYXJNZXRob2RoYXNQcm9ibGVtcmVhZFRhcmdldGxvb2t1cFNldHRlcmhhbmRsZVF1YWxpZmllZFF1YWxpZmllZHF1YWxpZmllcndpdGhRdWFsaWZpZXJiZWdpbkxpdGVyYWxTdHJpbmdoYW5kbGVTdHJpbmdQYXJ0U3RyaW5nUGFydGVuZExpdGVyYWxTdHJpbmdpbnRlcnBvbGF0aW9uQ291bnRjcmVhdGVTdHJpbmdMaXRlcmFscXVvdGVjcmVhdGVTdHJpbmdDb25jYXRlbmF0aW9uaGFuZGxlTmF0aXZlQ2xhdXNlbmF0aXZlVG9rZW5oYXNOYW1lTmF0aXZlQ2xhdXNlYXNMaXRlcmFsU3RyaW5naGFuZGxlU2NyaXB0U2NyaXB0aGFuZGxlU3RyaW5nSnV4dGFwb3NpdGlvbmxpdGVyYWxDb3VudFN0cmluZ0p1eHRhcG9zaXRpb25oYW5kbGVMaXRlcmFsSW50TGl0ZXJhbEludGxhcmdlIGludGVnZXJjcmVhdGVJbnRMaXRlcmFsY3JlYXRlSW50TGl0ZXJhbExhcmdlaGFuZGxlRW1wdHlGdW5jdGlvbkJvZHlzZW1pY29sb25FeHByZXNzaW9uRnVuY3Rpb25Cb2R5aGFuZGxlRXhwcmVzc2lvbkZ1bmN0aW9uQm9keWFycm93VG9rZW5lbmRSZXR1cm5TdGF0ZW1lbnRoYXNFeHByZXNzaW9uYnVpbGRQcm9ibGVtU3RhdGVtZW50Y3JlYXRlUmV0dXJuU3RhdGVtZW50aXNBcnJvd2JlZ2luVGhlblN0YXRlbWVudGVudGVyVGhlbkZvclR5cGVQcm9tb3Rpb25lbmRUaGVuU3RhdGVtZW50ZW50ZXJFbHNlZW5kSWZTdGF0ZW1lbnRpZlRva2VuZWxzZVRva2VuZWxzZVBhcnR0aGVuUGFydGV4aXRDb25kaXRpb25hbGNyZWF0ZUlmU3RhdGVtZW50ZW5kVmFyaWFibGVJbml0aWFsaXplcmFzc2lnbm1lbnRPcGVyYXRvclZhcmlhYmxlSW5pdGlhbGl6ZXJwdXNoTmV3TG9jYWxWYXJpYWJsZWVxdWFsc1Rva2VuaGFuZGxlTm9WYXJpYWJsZUluaXRpYWxpemVyTm9WYXJpYWJsZUluaXRpYWxpemVyZm9yU3ludGhldGljVG9rZW5jaGVja0JvdW5kc0luVmFyaWFibGVEZWNsYXJhdGlvbmJlZ2luRmllbGRJbml0aWFsaXplcmVuZEZpZWxkSW5pdGlhbGl6ZXJoYW5kbGVOb0ZpZWxkSW5pdGlhbGl6ZXJOb0ZpZWxkSW5pdGlhbGl6ZXJOdWxsVmFsdWUuRmllbGRJbml0aWFsaXplcmVuZEluaXRpYWxpemVkSWRlbnRpZmllcm5hbWVUb2tlbkluaXRpYWxpemVkSWRlbnRpZmllcmJlZ2luVmFyaWFibGVzRGVjbGFyYXRpb25tb2RpZmllcnNOdWxsVmFsdWUuVHlwZWVuZFZhcmlhYmxlc0RlY2xhcmF0aW9uVmFyaWFibGVzRGVjbGFyYXRpb252YXJpYWJsZXNEZWNsYXJhdGlvbmVuZEJsb2NraGFuZGxlSW52YWxpZFRvcExldmVsQmxvY2toYW5kbGVBc3NpZ25tZW50RXhwcmVzc2lvbkFzc2lnbm1lbnRFeHByZXNzaW9uZW50ZXJMb29wZW50ZXJCcmVha1RhcmdldGJyZWFrVGFyZ2V0ZW50ZXJDb250aW51ZVRhcmdldGNvbnRpbnVlVGFyZ2V0ZXhpdExvb3BPclN3aXRjaGJ1aWxkVmFyaWFibGVEZWNsYXJhdGlvbnN2YXJpYWJsZU9yRXhwcmVzc2lvbmlzVmFyaWFibGVzRGVjbGFyYXRpb252YXJpYWJsZXNEZWNsYXJhdGlvbkV4dHJhY3REZWNsYXJhdGlvbnNoYW5kbGVGb3JJbml0aWFsaXplckVtcHR5U3RhdGVtZW50Rm9ySW5pdGlhbGl6ZXJFbXB0eVN0YXRlbWVudE51bGxWYWx1ZS5FeHByZXNzaW9uaGFuZGxlRm9ySW5pdGlhbGl6ZXJFeHByZXNzaW9uU3RhdGVtZW50Rm9ySW5pdGlhbGl6ZXJFeHByZXNzaW9uU3RhdGVtZW50aGFuZGxlRm9ySW5pdGlhbGl6ZXJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25Gb3JJbml0aWFsaXplckxvY2FsVmFyaWFibGVEZWNsYXJhdGlvbmhhbmRsZUZvckxvb3BQYXJ0c2ZvcktleXdvcmRsZWZ0UGFyZW5sZWZ0U2VwYXJhdG9ydXBkYXRlRXhwcmVzc2lvbkNvdW50ZW5kRm9yQ29udHJvbEZsb3dGb3JDb250cm9sRmxvd2ZvclRva2VuY29uZGl0aW9uU3RhdGVtZW50aGFuZGxlUmVjb3ZlcmFibGVFcnJvcmlzRXhwcmVzc2lvblN0YXRlbWVudGdldEV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvblN0YXRlbWVudGlzRW1wdHlTdGF0ZW1lbnRjcmVhdGVGb3JNYXBFbnRyeWNyZWF0ZUZvckVsZW1lbnRlbmRGb3JTdGF0ZW1lbnRleGl0Q29udGludWVUYXJnZXRleGl0QnJlYWtUYXJnZXRoYXNVc2Vyc2NyZWF0ZUxhYmVsZWRTdGF0ZW1lbnRyZXNvbHZlQ29udGludWVzY3JlYXRlRm9yU3RhdGVtZW50cmVzb2x2ZUJyZWFrc3N1cHByZXNzTWVzc2FnZWVuZEF3YWl0RXhwcmVzc2lvbmNyZWF0ZUF3YWl0RXhwcmVzc2lvbmVuZEludmFsaWRBd2FpdEV4cHJlc3Npb25oYW5kbGVBc3luY01vZGlmaWVyYXN5bmNUb2tlbnN0YXJUb2tlbmhhbmRsZUxpdGVyYWxMaXN0bGVmdEJyYWNrZXRjb25zdEtleXdvcmRyaWdodEJyYWNrZXRMaXRlcmFsTGlzdGVsZW1jcmVhdGVMaXN0TGl0ZXJhbGNoZWNrQm91bmRzSW5MaXN0TGl0ZXJhbGJ1aWxkTGl0ZXJhbFNldGxlZnRCcmFjZXNldE9yTWFwRW50cmllc2NyZWF0ZVNldExpdGVyYWxjaGVja0JvdW5kc0luU2V0TGl0ZXJhbGhhbmRsZUxpdGVyYWxTZXRPck1hcHJpZ2h0QnJhY2VoYXNTZXRFbnRyeUxpdGVyYWxTZXRPck1hcHR5cGVBcmdDb3VudGlzU2V0bWFwRW50cmllc2J1aWxkTGl0ZXJhbE1hcGhhbmRsZUxpdGVyYWxCb29sTGl0ZXJhbEJvb2xjcmVhdGVCb29sTGl0ZXJhbGhhbmRsZUxpdGVyYWxEb3VibGVMaXRlcmFsRG91YmxlY3JlYXRlRG91YmxlTGl0ZXJhbGhhbmRsZUxpdGVyYWxOdWxsTGl0ZXJhbE51bGxjcmVhdGVNYXBMaXRlcmFsY2hlY2tCb3VuZHNJbk1hcExpdGVyYWxoYW5kbGVMaXRlcmFsTWFwRW50cnlMaXRlcmFsTWFwRW50cnljcmVhdGVNYXBFbnRyeXN5bWJvbFBhcnRUb1N0cmluZ2VuZExpdGVyYWxTeW1ib2xoYXNoVG9rZW5pZGVudGlmaWVyQ291bnRMaXRlcmFsU3ltYm9sY3JlYXRlU3ltYm9sTGl0ZXJhbGhhbmRsZU5vbk51bGxBc3NlcnRFeHByZXNzaW9uYmFuZ3JlcG9ydE5vbk51bGxBc3NlcnRFeHByZXNzaW9uTm90RW5hYmxlZGhhbmRsZVR5cGVxdWVzdGlvbk1hcmtyZXBvcnRFcnJvcklmTnVsbGFibGVUeXBlcXVhbGlmaWVkcXVhbGlmaWVkTG9va3VwZGlzcGxheU5hbWVidWlsZFR5cGVXaXRoUmVzb2x2ZWRBcmd1bWVudHNiZWdpbkZ1bmN0aW9uVHlwZXR5cGVWYXJpYWJsZXNjcmVhdGVOZXN0ZWRTY29wZWZ1bmN0aW9uLXR5cGUgc2NvcGVpc01vZGlmaWFibGVzY29wZUJ1aWxkZXJyZXBvcnREdXBsaWNhdGVkRGVjbGFyYXRpb25lbmRGdW5jdGlvblR5cGVmdW5jdGlvblRva2VudG9GdW5jdGlvblR5cGVoYW5kbGVWb2lkS2V5d29yZFZvaWRLZXl3b3JkaGFuZGxlQXNPcGVyYXRvckFzT3BlcmF0b3JjaGVja0JvdW5kc0luVHlwZWNyZWF0ZUFzRXhwcmVzc2lvbmhhbmRsZUlzT3BlcmF0b3Jub3RJc09wZXJhdG9yaXNJbnZlcnRlZGlzRXhwcmVzc2lvbmNyZWF0ZUlzRXhwcmVzc2lvbmhhbmRsZUlzQ2hlY2tiZWdpbkNvbmRpdGlvbmFsRXhwcmVzc2lvbnF1ZXN0aW9uZW50ZXJUaGVuaGFuZGxlQ29uZGl0aW9uYWxFeHByZXNzaW9uQ29sb25lbmRDb25kaXRpb25hbEV4cHJlc3Npb25lbHNlRXhwcmVzc2lvbnRoZW5FeHByZXNzaW9uaGFuZGxlVGhyb3dFeHByZXNzaW9udGhyb3dUb2tlblRocm93RXhwcmVzc2lvbmJlZ2luRm9ybWFsUGFyYW1ldGVycmVxdWlyZWRUb2tlbmVuZEZvcm1hbFBhcmFtZXRlcnRoaXNLZXl3b3JkcGVyaW9kQWZ0ZXJUaGlzaW5pdGlhbGl6ZXJTdGFydGluaXRpYWxpemVyRW5kbWVtYmVyS2luZEZvcm1hbFBhcmFtZXRlcm5hbWVOb2RlTWVtYmVyS2luZC5HZW5lcmFsaXplZEZ1bmN0aW9uVHlwZWdldEZvcm1hbGJ1aWxkRm9ybWFsUGFyYW1ldGVyS2luZC5tYW5kYXRvcnllbmRPcHRpb25hbEZvcm1hbFBhcmFtZXRlcnNPcHRpb25hbEZvcm1hbFBhcmFtZXRlcnNGb3JtYWxQYXJhbWV0ZXJLaW5kLm9wdGlvbmFsTmFtZWRGb3JtYWxQYXJhbWV0ZXJLaW5kLm9wdGlvbmFsUG9zaXRpb25hbGJlZ2luRnVuY3Rpb25UeXBlZEZvcm1hbFBhcmFtZXRlcmVuZEZ1bmN0aW9uVHlwZWRGb3JtYWxQYXJhbWV0ZXJGdW5jdGlvblR5cGVkRm9ybWFsUGFyYW1ldGVyYmVnaW5Gb3JtYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVFeHByZXNzaW9uZW5kRm9ybWFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlRXhwcmVzc2lvbkZvcm1hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZUV4cHJlc3Npb25kZWZhdWx0VmFsdWVFeHByZXNzaW9uaGFuZGxlVmFsdWVkRm9ybWFsUGFyYW1ldGVyVmFsdWVkRm9ybWFsUGFyYW1ldGVyaGFuZGxlRm9ybWFsUGFyYW1ldGVyV2l0aG91dFZhbHVlRm9ybWFsUGFyYW1ldGVyV2l0aG91dFZhbHVlYmVnaW5Gb3JtYWxQYXJhbWV0ZXJzZW5kRm9ybWFsUGFyYW1ldGVyc0Zvcm1hbFBhcmFtZXRlcnNvcHRpb25hbHNvcHRpb25hbHNDb3VudHBvcFBhZGRlZGJlZ2luQ2F0Y2hDbGF1c2VlbmRDYXRjaENsYXVzZUNhdGNoQ2xhdXNlaGFuZGxlQ2F0Y2hCbG9ja29uS2V5d29yZGNhdGNoS2V5d29yZGNvbW1hQ2F0Y2hCbG9ja2NhdGNoUGFyYW1ldGVyc3BvcElmTm90TnVsbGV4Y2VwdGlvblR5cGVjb21waWxlVGltZUVycm9yc3BhcmFtZXRlckNvdW50Y3JlYXRlQ2F0Y2hlbmRUcnlTdGF0ZW1lbnRjYXRjaENvdW50dHJ5S2V5d29yZGZpbmFsbHlLZXl3b3JkZmluYWxseUJsb2NrY2F0Y2hCbG9ja3NjYXRjaEJsb2Nrc0FuZEVycm9yc3RyeUJsb2NrdHJ5U3RhdGVtZW50Y3JlYXRlVHJ5U3RhdGVtZW50aGFuZGxlSW5kZXhlZEV4cHJlc3Npb25vcGVuU3F1YXJlQnJhY2tldGNsb3NlU3F1YXJlQnJhY2tldEluZGV4ZWRFeHByZXNzaW9uaGFuZGxlVW5hcnlQcmVmaXhFeHByZXNzaW9uVW5hcnlQcmVmaXhFeHByZXNzaW9ucmVjZWl2ZXJWYWx1ZWluY3JlbWVudE9wZXJhdG9yaGFuZGxlVW5hcnlQcmVmaXhBc3NpZ25tZW50RXhwcmVzc2lvblVuYXJ5UHJlZml4QXNzaWdubWVudEV4cHJlc3Npb25idWlsZFByZWZpeEluY3JlbWVudGhhbmRsZVVuYXJ5UG9zdGZpeEFzc2lnbm1lbnRFeHByZXNzaW9uVW5hcnlQb3N0Zml4QXNzaWdubWVudEV4cHJlc3Npb25lbmRDb25zdHJ1Y3RvclJlZmVyZW5jZUNvbnN0cnVjdG9yUmVmZXJlbmNlY2hlY2tWYWx1ZU51bGxWYWx1ZS5JZGVudGlmaWVyQ29uc3RuZXNzLmltcGxpY2l0Y2hhckxlbmd0aGFyZ01lc3NhZ2V3cmFwU3ludGhldGljRXhwcmVzc2lvbndyYXBJbnZhbGlkQ29uc3RydWN0b3JJbnZvY2F0aW9uY2hlY2tCb3VuZHNJbkNvbnN0cnVjdG9ySW52b2NhdGlvbmNoZWNrQm91bmRzSW5GYWN0b3J5SW52b2NhdGlvbmNoZWNrQm91bmRzSW5TdGF0aWNJbnZvY2F0aW9uYnVpbGRFeHRlbnNpb25NZXRob2RJbnZvY2F0aW9uYXJndW1lbnRzUG9zaXRpb25hbGFyZ3VtZW50c05hbWVkY2hlY2tBcmd1bWVudHNGb3JUeXBlYmVnaW5OZXdFeHByZXNzaW9uTmV3IGV4cHJlc3Npb25iZWdpbkNvbnN0RXhwcmVzc2lvbmJlZ2luQ29uc3RMaXRlcmFsYmVnaW5JbXBsaWNpdENyZWF0aW9uRXhwcmVzc2lvbmVuZENvbnN0TGl0ZXJhbGxpdGVyYWxlbmROZXdFeHByZXNzaW9uTmV3RXhwcmVzc2lvbm5hbWVMYXN0SWRlbnRpZmllcm5hbWVMYXN0VG9rZW5pbnZva2VDb25zdHJ1Y3RvcnR5cGVOYW1lZW5kSW1wbGljaXRDcmVhdGlvbkV4cHJlc3Npb25JbXBsaWNpdENyZWF0aW9uRXhwcmVzc2lvbmJ1aWxkQ29uc3RydWN0b3JJbnZvY2F0aW9uZmluZENvbnN0cnVjdG9yT3JGYWN0b3J5d3JhcFVucmVzb2x2ZWRUYXJnZXRJbnZvY2F0aW9uZW5kQ29uc3RFeHByZXNzaW9uYmVnaW5JZkNvbnRyb2xGbG93YmVnaW5UaGVuQ29udHJvbEZsb3doYW5kbGVFbHNlQ29udHJvbEZsb3dlbmRJZkNvbnRyb2xGbG93Y3JlYXRlSWZNYXBFbnRyeWNyZWF0ZUlmRWxlbWVudGVuZElmRWxzZUNvbnRyb2xGbG93ZWxzZUVudHJ5dGhlbkVudHJ5aGFuZGxlU3ByZWFkRXhwcmVzc2lvbnNwcmVhZFRva2VuU3ByZWFkRXhwcmVzc2lvbmNyZWF0ZVNwcmVhZEVsZW1lbnRlbmRUeXBlQXJndW1lbnRzVHlwZUFyZ3VtZW50c2hhbmRsZUludmFsaWRUeXBlQXJndW1lbnRzSW52YWxpZFR5cGVBcmd1bWVudHNoYW5kbGVUaGlzRXhwcmVzc2lvbmhhbmRsZVN1cGVyRXhwcmVzc2lvblN1cGVyRXhwcmVzc2lvbmhhbmRsZU5hbWVkQXJndW1lbnROYW1lZEFyZ3VtZW50ZW5kRnVuY3Rpb25OYW1lRnVuY3Rpb25OYW1laXNMb2NhbEZ1bmN0aW9uZW50ZXJGdW5jdGlvbmV4aXRGdW5jdGlvbk51bGxWYWx1ZS5UeXBlVmFyaWFibGVzYmVnaW5Mb2NhbEZ1bmN0aW9uRGVjbGFyYXRpb25iZWdpbk5hbWVkRnVuY3Rpb25FeHByZXNzaW9ubmFtZWQgZnVuY3Rpb25iZWdpbkZ1bmN0aW9uRXhwcmVzc2lvbnB1c2hOYW1lZEZ1bmN0aW9uaXNGdW5jdGlvbkV4cHJlc3Npb25oYXNJbXBsaWNpdFJldHVyblR5cGVidWlsZEZ1bmN0aW9uTm9kZW9sZEluaXRpYWxpemVyaXNFcnJvbmVvdXNOb2RlZW5kTmFtZWRGdW5jdGlvbkV4cHJlc3Npb25lbmRMb2NhbEZ1bmN0aW9uRGVjbGFyYXRpb25Mb2NhbEZ1bmN0aW9uRGVjbGFyYXRpb25lbmRGdW5jdGlvbkV4cHJlc3Npb25lbmREb1doaWxlU3RhdGVtZW50ZG9LZXl3b3Jkd2hpbGVLZXl3b3JkRG9XaGlsZVN0YXRlbWVudGNyZWF0ZURvU3RhdGVtZW50YmVnaW5Gb3JJbkV4cHJlc3Npb25lbmRGb3JJbkV4cHJlc3Npb25Gb3JJbkV4cHJlc3Npb25oYW5kbGVGb3JJbkxvb3BQYXJ0c2F3YWl0VG9rZW5sZWZ0UGFyZW50aGVzaXNpbktleXdvcmROdWxsVmFsdWUuQXdhaXRUb2tlbmVuZEZvckluQ29udHJvbEZsb3dGb3JJbkNvbnRyb2xGbG93aW5Ub2tlbmx2YWx1ZWJ1aWxkRm9ySW5WYXJpYWJsZWNoZWNrRm9ySW5WYXJpYWJsZXByb2xvZ3VlYnVpbGRGb3JJbkJvZHljcmVhdGVGb3JJbk1hcEVudHJ5Y3JlYXRlRm9ySW5FbGVtZW50c3ludGhldGljQXNzaWdubWVudGJ1aWxkQXNzaWdubWVudHZvaWRDb250ZXh0ZW5kRm9ySW5Gb3JJbmhhbmRsZUxhYmVsTGFiZWxiZWdpbkxhYmVsZWRTdGF0ZW1lbnRsYWJlbENvdW50Y3JlYXRlTmVzdGVkTGFiZWxTY29wZWRlY2xhcmVMYWJlbGVuZExhYmVsZWRTdGF0ZW1lbnRlbmRSZXRocm93U3RhdGVtZW50cmV0aHJvd1Rva2VuUmV0aHJvd1N0YXRlbWVudGNyZWF0ZVJldGhyb3dTdGF0ZW1lbnRoYW5kbGVGaW5hbGx5QmxvY2tGaW5hbGx5QmxvY2tlbmRXaGlsZVN0YXRlbWVudGNyZWF0ZVdoaWxlU3RhdGVtZW50aGFuZGxlRW1wdHlTdGF0ZW1lbnRjcmVhdGVFbXB0eVN0YXRlbWVudGJlZ2luQXNzZXJ0YXNzZXJ0S2V5d29yZGVuZEFzc2VydGNvbW1hVG9rZW5zZW1pY29sb25Ub2tlbkFzc2VydC5TdGF0ZW1lbnRjcmVhdGVBc3NlcnRTdGF0ZW1lbnRBc3NlcnQuRXhwcmVzc2lvbkFzc2VydC5Jbml0aWFsaXplcmNyZWF0ZUFzc2VydEluaXRpYWxpemVyZW5kWWllbGRTdGF0ZW1lbnR5aWVsZFRva2VuY3JlYXRlWWllbGRTdGF0ZW1lbnRiZWdpblN3aXRjaEJsb2Nrc3dpdGNoIGJsb2NrYmVnaW5Td2l0Y2hDYXNlZXhwcmVzc2lvbkNvdW50bGFiZWxzQW5kRXhwcmVzc2lvbnNsYWJlbEluZGV4ZXhwcmVzc2lvbkluZGV4bGFiZWxPckV4cHJlc3Npb25sYWJlbE5hbWVoYXNMb2NhbExhYmVsY2xhaW1MYWJlbGNyZWF0ZUdvdG9UYXJnZXROdWxsVmFsdWUuTGFiZWxzc3dpdGNoIGNhc2VlbmRTd2l0Y2hDYXNlZGVmYXVsdEtleXdvcmRjb2xvbkFmdGVyRGVmYXVsdHN0YXRlbWVudENvdW50ZW5kU3dpdGNoU3RhdGVtZW50c3dpdGNoS2V5d29yZGVuZFN3aXRjaEJsb2NrY2FzZUNvdW50U3dpdGNoQmxvY2tsb29rdXBMYWJlbHJlc29sdmVHb3Rvc2xhc3ROb2RlaXNCbG9ja2J1aWxkRmFsbFRocm91Z2hFcnJvcmhhbmRsZUNhc2VNYXRjaENhc2VNYXRjaGhhbmRsZUJyZWFrU3RhdGVtZW50aGFzVGFyZ2V0YnJlYWtLZXl3b3JkaXNCcmVha1RhcmdldGxhYmVsVG9rZW5idWlsZFByb2JsZW1UYXJnZXRPdXRzaWRlTG9jYWxGdW5jdGlvbmNyZWF0ZUJyZWFrU3RhdGVtZW50YWRkQnJlYWtpc0JyZWFraGFuZGxlQ29udGludWVTdGF0ZW1lbnRjb250aW51ZUtleXdvcmRDb250aW51ZVN0YXRlbWVudG5hbWVkVGFyZ2V0aXNHb3RvVGFyZ2V0YWRkR290b2lzQ29udGludWVUYXJnZXRjcmVhdGVDb250aW51ZVN0YXRlbWVudGFkZENvbnRpbnVlYmVnaW5UeXBlVmFyaWFibGVoYW5kbGVUeXBlVmFyaWFibGVzRGVmaW5lZGVuZFR5cGVWYXJpYWJsZWV4dGVuZHNPclN1cGVyVHlwZVZhcmlhYmxlZW5kVHlwZVZhcmlhYmxlc1R5cGVWYXJpYWJsZXNjYWxjdWxhdGVkQm91bmRzcmVzb2x2ZUluaGFuZGxlTm9UeXBlVmFyaWFibGVzTm9UeXBlVmFyaWFibGVzdHlwZVZhcmlhYmxlQnVpbGRlcnNUb0tlcm5lbHR5cGVWYXJpYWJsZUJ1aWxkZXJzaGFuZGxlSW52YWxpZFN0YXRlbWVudGJ1aWxkSW52YWxpZFN1cGVySW5pdGlhbGl6ZXJidWlsZER1cGxpY2F0ZWRJbml0aWFsaXplcnByZXZpb3VzSW5pdGlhbGl6ZXJPZmZzZXRmaWVsZE5hbWVPZmZzZXRhc3NpZ25tZW50T2Zmc2V0aGFzSW5pdGlhbGl6ZXJidWlsZFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXJjaGVja0NvbnN0cnVjdG9yQ3ljbGljaGFuZGxlT3BlcmF0b3JoYW5kbGVTeW1ib2xWb2lkU3ltYm9sVm9pZGhhbmRsZUludmFsaWRGdW5jdGlvbkJvZHlOdWxsVmFsdWUuRnVuY3Rpb25Cb2R5dmFsaWRhdGVUeXBlVXNlbm9uSW5zdGFuY2VBY2Nlc3NJc0Vycm9yaXNUeXBlVmFyaWFibGV0eXBlUGFyYW1ldGVyQnVpbGRlcmlzSWRlbnRpY2FsTWV0aG9kIGludm9jYXRpb25pc1RoaXNFeHByZXNzaW9ubWFrZVN0YXRpY0dldHdyYXBJbkRlZmVycmVkQ2hlY2tjaGVja2NoZWNrTGlicmFyeUlzTG9hZGVkdW5yZXNvbHZlZFR5cGV1bnJlc29sdmVkVHlwZXNkZXN1Z2FyZWRzaGFkb3dOb2Rld3JhcEludmFsaWRXcml0ZXdyYXBVbnJlc29sdmVkVmFyaWFibGVBc3NpZ25tZW50aXNDb21wb3VuZHJoc29wZXJhdG9yKEp1bXBUYXJnZXRKdW1wVGFyZ2V0S2luZC5CcmVha0p1bXBUYXJnZXRLaW5kLkNvbnRpbnVlSnVtcFRhcmdldEtpbmQuR290b3VzZXI8anVtcC10YXJnZXQ+TGFiZWxUYXJnZXQ8bGFiZWwtdGFyZ2V0PkVtcHR5IHBhcmFtZXRlcnMgc2hvdWxkIGJlIG51bGxpc05hbWVkZGVidWdOYW1lRm9ybWFsUGFyYW1ldGVycyhsYWJlbChub0xvY2F0aW9uaW52YWxpZENvbGxlY3Rpb25FbGVtZW50Y29tYmluZVN0YXRlbWVudHMucmVzdWx0Z2V0Tm9kZU5hbWVhc3luY01hcmtlckZyb21Ub2tlbnNmYXN0YS5pbmNyZW1lbnRhbF9jb21waWxlckluY3JlbWVudGFsS2VybmVsR2VuZXJhdG9yTWVtb3J5RmlsZVN5c3RlbUJ1aWxkZXJHcmFwaHNhdmVBc0d6aXBIeWJyaWRGaWxlU3lzdGVtQ2xhc3NIaWVyYXJjaHlCdWlsZGVyVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50TGlicmFyeUdyYXBob3V0bGluZU9ubHl0cmFja05lZWRlZERpbGxMaWJyYXJpZXNuZWVkZWREaWxsTGlicmFyaWVzaW52YWxpZGF0ZWRVcmlzZGlsbExvYWRlZERhdGFwbGF0Zm9ybUJ1aWxkZXJzdXNlckJ1aWxkZXJzaW5pdGlhbGl6ZUZyb21EaWxsVXJpY29tcG9uZW50VG9Jbml0aWFsaXplRnJvbWluaXRpYWxpemVkRnJvbURpbGxwcmV2aW91c1BhY2thZ2VzVXJpcHJldmlvdXNQYWNrYWdlc01hcGN1cnJlbnRQYWNrYWdlc01hcGhhc1RvQ2hlY2tQYWNrYWdlVXJpc3JlbWFpbmluZ0NvbXBvbmVudFByb2JsZW1zbW9kdWxlc1RvTG9hZGRlYnVnRXhwclVyaW9yZy1kYXJ0bGFuZy1kZWJ1Z3N5bnRoZXRpY19kZWJ1Z19leHByZXNzaW9udXNlckNvZGVmcm9tQ29tcG9uZW50Y29tcHV0ZURlbHRhZnVsbENvbXBvbmVudGJ5dGVzTGVuZ3RoaW5pdGlhbGl6ZUZyb21Db21wb25lbnRzdW1tYXJ5Qnl0ZXNwcmVwYXJlU3VtbWFyeWluaXRpYWxpemVGcm9tRGlsbHN0Z3pJbml0aWFsaXplZEZyb21pbml0aWFsaXphdGlvbkJ5dGVzaW5pdGlhbGl6ZV9mcm9tLmRpbGxyZWNvcmRUZW1wb3JhcnlGaWxlRm9yVGVzdGluZ2ludmFsaWRhdGVOb3RLZXB0VXNlckJ1aWxkZXJzbm90UmV1c2VkTGlicmFyaWVzcmV1c2VkTGlicmFyaWVzY29tcHV0ZVJldXNlZExpYnJhcmllc25vdFJldXNlZHJlbW92ZWREaWxsQnVpbGRlcnNkaWxsQnVpbGRlcnJlbW92ZUxpYnJhcnlGcm9tUmVtYWluaW5nQ29tcG9uZW50UHJvYmxlbXNvbGREaWxsTG9hZGVkRGF0YURlY2lkZWQgdG8gcmV1c2UgIG9mICBsaWJyYXJpZXNsb2FkRW5zdXJlTG9hZGVkQ29tcG9uZW50c3VzZXJDb2RlT2xkY29tcG9uZW50V2l0aERpbGxyZWNvcmROb25GdWxsQ29tcG9uZW50Rm9yVGVzdGluZ3VwZGF0ZU5lZWRlZERpbGxMaWJyYXJpZXNXaXRoSGllcmFyY2h5YnVpbGRlckhpZXJhcmNoeXJlbGVhc2VBbmNpbGxhcnlSZXNvdXJjZXNjb21waWxlZExpYnJhcmllc3VzZXJMb2FkZWRVcmlNYWlub3V0cHV0TGlicmFyaWVzY29tcHV0ZVRyYW5zaXRpdmVDbG9zdXJlcmVpc3N1ZUNvbXBvbmVudFByb2JsZW1zcmVpc3N1ZUxpYnJhcnlQcm9ibGVtc2dldENvcmVUeXBlc2dldENsYXNzSGllcmFyY2h5dXNlZENsYXNzZXNsb2FkZWROb3RLZXB0bW9kdWxlbG9hZGVkQW55dGhpbmd1c2VkQ29tcG9uZW50aXNzdWVkUHJvYmxlbXNnZXRQYXJ0RmlsZVVyaXBhcmVudEZpbGVVcmlpbnB1dExpYnJhcmllc2lucHV0TGlicmFyaWVzRmlsdGVyZWRsaWJyYXJ5TWFwcG90ZW50aWFsbHlSZWZlcmVuY2VkTGlicmFyaWVzcG90ZW50aWFsbHlSZWZlcmVuY2VkSW5wdXRMaWJyYXJpZXNncmFwaG5laWdoYm9ybmVpZ2hib3JzT2ZwYXJ0RmlsZVVyaVJlYWQgRGVzZXJpYWxpemVkIGVudGl0eXNhdmVDb21wb25lbnRQcm9ibGVtc0Fib3V0IHRvIGluaXRpYWxpemVGcm9tQ29tcG9uZW50Zm91bmREYXJ0Q29yZURpZCBub3QgZmluZCBkYXJ0OmNvcmUgd2hlbiB0cmllZCB0byBpbml0aWFsaXplIGZyb20gY29tcG9uZW50LlJhbiBpbml0aWFsaXplRnJvbUNvbXBvbmVudEFwcGVuZGVkIGxpYnJhcmllc2NvbXBpbGVFeHByZXNzaW9udHlwZURlZmluaXRpb25zc3ludGhldGljUHJvY2VkdXJlTmFtZWRlYnVnTGlicmFyeWNvbWJpbmF0b3JhZGRJbXBvcnRhZGRJbXBvcnRzVG9TY29wZWhmc21lbW9yeW1vZGlmeVRhcmdldGJ1aWxkRXhwcmVzc2lvbmNvbXBpbGVkRXhwcmVzc2lvbnNvdXJjZUJ5dGVzaW52YWxpZGF0ZWRJbXBvcnRVcmlzaXNJbnZhbGlkYXRlZG5ld0ZpbGVVcmlhZGRCdWlsZGVyQW5kSW52YWxpZGF0ZVVyaXNyZWNvcmRJbnZhbGlkYXRlZEltcG9ydFVyaXNGb3JUZXN0aW5nZGlyZWN0RGVwZW5kZW5jaWVzdmVydGV4dmVydGljZXN3b3JrTGlzdHJlbW92ZWRzZWVuVXJpc2ludmFsaWRhdGVpbnZhbGlkYXRlQWxsU291cmNlc3NldE1vZHVsZXNUb0xvYWRPbk5leHRDb21wdXRlRGVsdGFQYWNrYWdlQ2hhbmdlZEVycm9ySW5pdGlhbGl6ZUZyb21Db21wb25lbnRFcnJvckluY3JlbWVudGFsQ29tcGlsZXJEYXRhY29tcGlsZXIuYXBpLmxlZ2FjeUV2ZW50U2lua051bGxTaW5rTGVnYWN5Q29tcGlsZXJJbnB1dF9pbnB1dFByb3ZpZGVyc291cmNlRmlsZUV4cGVjdGVkIGEgJ1N0cmluZycgb3IgYSAnTGlzdDxpbnQ+JyBmcm9tIHRoZSBpbnB1dCBwcm92aWRlciwgYnV0IGdvdDogTGVnYWN5Q29tcGlsZXJEaWFnbm9zdGljc19oYW5kbGVyTGVnYWN5Q29tcGlsZXJPdXRwdXRfb3V0cHV0UHJvdmlkZXJkZWZlcnJlZF9tYXBMZWdhY3lDb21waWxlck91dHB1dC5jcmVhdGVCaW5hcnlTaW5rTGVnYWN5T3V0cHV0U2lua2RhcnQyanMuY29tbW9uLnRhc2tzWm9uZURlbGVnYXRlWm9uZVNwZWNpZmljYXRpb25Db21waWxlclRhc2tfbWVhc3VyZXJfd2F0Y2hfc3VidGFza3NfYXN5bmNDb3VudF96b25lU3BlY2lmaWNhdGlvbl96b25lVmFsdWVzX2lzRGlzYWJsZWRVbmtub3duIHRhc2sgJ3RpbWluZ3RvdGFsZWxhcHNlZE1pbGxpc2Vjb25kc19tZWFzdXJlWm9uZWRfc3RhcnRfY3VycmVudFRhc2tzdG9wc3RvcEFzeW5jV2FsbENsb2NrX3N0b3BzdGFydEFzeW5jV2FsbENsb2Nrem9uZVNwZWNpZmljYXRpb25fcnVucnVuVW5hcnlfcnVuVW5hcnlydW5CaW5hcnlfcnVuQmluYXJ5em9uZVQxVDJhMWEyX2N1cnJlbnRBc3luY1Rhc2tDYW4ndCB0cmFjayBhc3luYyB0YXNrICcnIGJlY2F1c2UgJycgaXMgYWxyZWFkeSBiZWluZyB0cmFja2VkLm1lYXN1cmVJb1N1YnRhc2tfd2FsbENsb2NrX2FzeW5jV2FsbENsb2NrX2hhc2hDb2RlR2VuZXJhdG9yc3RhcnRXYWxsQ2xvY2tzdG9wV2FsbENsb2NrZGFydDJqcy5jb21tb25hc3NlcnREZWJ1Z01vZGVmYWlsZWRBdE1lc3NhZ2VLaW5kU291cmNlU3BhbkNVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEVOT19MT0NBVElPTl9TUEFOTkFCTEVTcGFubmFibGVTcGFubmFibGVBc3NlcnRpb25GYWlsdXJlZGFydDJqcy5jb21waWxlcl9iYXNlU2VsZWN0b3JzVXJpc1dvcmtJdGVtRWxlbWVudEVudmlyb25tZW50RGVmZXJyZWRMb2FkVGFza091dHB1dFVuaXREYXRhTWVzc2FnZVRlbXBsYXRlRHVtcEluZm9UYXNrRW5xdWV1ZXJFbnF1ZXVlVGFza1Jlc29sdXRpb25FbnF1ZXVlckFic3RyYWN0VmFsdWVTdHJhdGVneVRyaXZpYWxBYnN0cmFjdFZhbHVlU3RyYXRlZ3lUeXBlTWFza1N0cmF0ZWd5R2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHNHbG9iYWxUeXBlSW5mZXJlbmNlVGFza1NvdXJjZUluZm9ybWF0aW9uQ29kZWdlbklucHV0c0phdmFTY3JpcHRJbXBhY3RTdHJhdGVneUtlcm5lbExvYWRlclRhc2tLZXJuZWxSZXN1bHROdWxsQ29tcGlsZXJPdXRwdXRISW5zdHJ1Y3Rpb25TZWxlY3RvckltcGFjdFN0cmF0ZWd5V29ybGRJbXBhY3RXb3JsZEltcGFjdEJ1aWxkZXJJbXBsSkNsb3NlZFdvcmxkS0Nsb3NlZFdvcmxkTWFrZVJlcG9ydGVyRnVuY3Rpb25Db21waWxlcmZyb250ZW5kU3RyYXRlZ3liYWNrZW5kU3RyYXRlZ3lfcmVwb3J0ZXJfaW1wYWN0Q2FjaGVfaW1wYWN0Q2FjaGVEZWxldGVyaW1wYWN0U3RyYXRlZ3lzdG9wQWZ0ZXJDbG9zZWRXb3JsZHN0b3BBZnRlclR5cGVJbmZlcmVuY2VfdXNlckNvZGVMb2NhdGlvbnNiYWNrZW5kQ2xvc2VkV29ybGRGb3JUZXN0aW5nZ2xvYmFsSW5mZXJlbmNlX2NvZGVnZW5Xb3JsZEJ1aWxkZXJhYnN0cmFjdFZhbHVlU3RyYXRlZ3llbnF1ZXVlcmRlZmVycmVkTG9hZFRhc2tkdW1wSW5mb1Rhc2tzZXJpYWxpemF0aW9uVGFza1BIQVNFX1NDQU5OSU5HUEhBU0VfUkVTT0xWSU5HUEhBU0VfRE9ORV9SRVNPTFZJTkdQSEFTRV9DT01QSUxJTkdwaGFzZWNvbXBpbGF0aW9uRmFpbGVkb25SZXNvbHV0aW9uUXVldWVFbXB0eUZvclRlc3RpbmdvbkNvZGVnZW5RdWV1ZUVtcHR5Rm9yVGVzdGluZ2NvZGVnZW5Xb3JsZEZvclRlc3RpbmdCRU5JR05fRVJST1JTTWVzc2FnZUtpbmQuSU5WQUxJRF9NRVRBREFUQU1lc3NhZ2VLaW5kLklOVkFMSURfTUVUQURBVEFfR0VORVJJQ2tlcm5lbEZyb250RW5kVGFza0Zyb250IGVuZHJlcG9ydGVyY3JlYXRlQmFja2VuZFN0cmF0ZWd5Y3JlYXRlRGVmZXJyZWRMb2FkVGFza2ltcGFjdENhY2hlaW1wYWN0Q2FjaGVEZWxldGVyY3VycmVudEVsZW1lbnRyZXNvbHV0aW9uV29ybGRCdWlsZGVycmVzb2x1dGlvbndvcmxkQnVpbGRlcmNvZGVnZW5Xb3JsZEJ1aWxkZXJObyBsb2NhdGlvbkNvZGVnZW5Xb3JsZEJ1aWxkZXIgaGFzIG5vdCBiZWVuIGNyZWF0ZWQgeWV0LnJ1bkludGVybmFsY2xlYXJTdGF0ZUNvbXBpbGluZyBkZXNlcmlhbGl6ZUdsb2JhbFR5cGVJbmZlcmVuY2VnbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0c3BlcmZvcm1HbG9iYWxUeXBlSW5mZXJlbmNlY2xvc2VkV29ybGRnZW5lcmF0ZUphdmFTY3JpcHRDb2RlbG9hZEtlcm5lbCBsb2FkIGNvbXBsZXRlcmVnaXN0ZXJMb2FkZWRMaWJyYXJpZXNyZXBvcnRXYXJuaW5nTWVzc2FnZU1lc3NhZ2VLaW5kLk1JUlJPUlNfTElCUkFSWV9OT1RfU1VQUE9SVF9XSVRIX0NGRWNvbXBpbGVGcm9tS2VybmVscm9vdExpYnJhcnlVcmlyZWdpc3RlckpDbG9zZWRXb3JsZGNvZGVnZW5JbnB1dHNvbkNvZGVnZW5TdGFydGRlc2VyaWFsaXplQ29kZWdlbmNvZGVnZW5SZXN1bHRzQ29tcGlsaW5nIG1ldGhvZHNydW5Db2RlZ2VuRW5xdWV1ZXJmdW5jdGlvbkNvbXBpbGVyc2VyaWFsaXplQ29kZWdlbnNlbGVjdG9yc3RhcnRSZXNvbHV0aW9ucmVzb2x1dGlvbkVucXVldWVyaGFzUmVzb2x1dGlvbmNyZWF0ZVJlc29sdXRpb25FbnF1ZXVlcm9uUmVzb2x1dGlvblN0YXJ0Y29tcHV0ZUNsb3NlZFdvcmxkZWxlbWVudEVudmlyb25tZW50Zm9yRWFjaENsYXNzcmVnaXN0ZXJDbGFzc21haW5JbXBhY3RtYWluRnVuY3Rpb25jb21wdXRlTWFpbmJlZm9yZVJlc29sdXRpb25zdXBwb3J0RGVmZXJyZWRMb2FkaXNQcm9ncmFtU3BsaXRzdXBwb3J0RHVtcEluZm9hcHBseUltcGFjdENvbXB1dGluZyBjbG9zZWQgd29ybGRwcm9jZXNzUXVldWVvblByb2dyZXNzc2hvd1Jlc29sdXRpb25Qcm9ncmVzc29uUmVzb2x1dGlvbkVuZHJlcG9ydFN1cHByZXNzZWRNZXNzYWdlc1N1bW1hcnljaGVja1F1ZXVlY2xvc2VSZXNvbHV0aW9uUGVyZm9ybWluZyBnbG9iYWwgdHlwZSBpbmZlcmVuY2VpbmZlcnJlZERhdGFCdWlsZGVyYW5ub3RhdGlvbnNEYXRhcnVuR2xvYmFsVHlwZUluZmVyZW5jZWdsb2JhbEluZmVyZW5jZVJlc3VsdHNjb2RlZ2VuRW5xdWV1ZXJjcmVhdGVDb2RlZ2VuRW5xdWV1ZXJzaG93Q29kZWdlblByb2dyZXNzY29kZWdlbldvcmxkRW1pdHRpbmcgSmF2YVNjcmlwdHByb2dyYW1TaXplYXNzZW1ibGVQcm9ncmFtaW5mZXJyZWREYXRhcmVwb3J0U2l6ZW9uQ29kZWdlbkVuZHNlcmlhbGl6ZUdsb2JhbFR5cGVJbmZlcmVuY2VzdHJhdGVneWlyRGF0YXdvcmxkRGF0YXNlcmlhbGl6ZURhdGFkZXNlcmlhbGl6ZURhdGFkZXNlcmlhbGl6ZUNvbXBvbmVudGtDbG9zZWRXb3JsZGNsb3NlV29ybGRqQ2xvc2VkV29ybGRjcmVhdGVKQ2xvc2VkV29ybGRlbXB0eVF1ZXVld29ya3dpdGhDdXJyZW50RWxlbWVudHdvcmsucnVuaW1wYWN0U291cmNlb3BlbmNhbm9uaWNhbFVyaXN0YXJ0UGhhc2VxdWV1ZUlzQ2xvc2Vkb25JbXBhY3RVc2VkaW1wYWN0VXNlY2hlY2tOb0VucXVldWVkSW52b2tlZEluc3RhbmNlTWV0aG9kc2NoZWNrUXVldWVJc0VtcHR5VW5leHBlY3RlZCBwaGFzZTogc2hvd1Byb2dyZXNzUmVzb2x2ZWQgcHJvY2Vzc2VkRW50aXRpZXMgZWxlbWVudHMuQ29tcGlsZWQgIG1ldGhvZHMub25DcmFzaEluVXNlckNvZGVtYXJrQ29tcGlsYXRpb25Bc0ZhaWxlZGZhdGFsRGlhZ25vc3RpY1JlcG9ydGVkY3VycmVudGx5SW5Vc2VyQ29kZWluVXNlckNvZGVhc3N1bWVJblVzZXJDb2RlX3VyaUZyb21FbGVtZW50Y29kZUxvY2F0aW9uaW5TYW1lTG9jYXRpb25nZXRDYW5vbmljYWxVcmlzbGFzaFBvc19Db21waWxlck91dHB1dF9jb21waWxlcl91c2VyT3V0cHV0U3VwcHJlc3Npb25JbmZvd2FybmluZ3NDb21waWxlckRpYWdub3N0aWNSZXBvcnRlcl9jdXJyZW50RWxlbWVudGxhc3REaWFnbm9zdGljV2FzRmlsdGVyZWRzdXBwcmVzc2VkV2FybmluZ3NjcmVhdGVNZXNzYWdlc3Bhbm5hYmxlbWVzc2FnZUtpbmRzcGFuRnJvbVNwYW5uYWJsZXJlcG9ydEVycm9ycmVwb3J0RGlhZ25vc3RpY0ludGVybmFscmVwb3J0SGludHJlcG9ydEluZm9lbGVtZW50RnJvbVNwYW5uYWJsZWhhc1JlcG9ydGVkRXJyb3JyZXBvcnRBc3NlcnRpb25GYWlsdXJlcGxlYXNlUmVwb3J0Q3Jhc2h1bmhhbmRsZWRFeGNlcHRpb25PbkVsZW1lbnRkb3VibGVGYXVsdHRyeVRvU3RyaW5nTWVzc2FnZUtpbmQuR0VORVJJQ19zcGFuRnJvbVN0cmF0ZWd5Tm8gZXJyb3IgbG9jYXRpb24uQ3VycmVudCBlbGVtZW50c291cmNlRWxlbWVudHNvdXJjZUluZm9ybWF0aW9uaW50ZXJuYWxFcnJvcnJlYXNvbk1lc3NhZ2VLaW5kLkNPTVBJTEVSX0NSQVNIRURNZXNzYWdlS2luZC5QTEVBU0VfUkVQT1JUX1RIRV9DUkFTSDxleGNlcHRpb24gaW4gdG9TdHJpbmcoKT5NZXNzYWdlS2luZC5ISURERU5fV0FSTklOR1NfSElOVFNNZXNzYWdlS2luZC5ISURERU5fSElOVFNNZXNzYWdlS2luZC5ISURERU5fV0FSTklOR1NfTWFwSW1wYWN0Q2FjaGVEZWxldGVydW5jYWNoZVdvcmxkSW1wYWN0ZW1wdHlDYWNoZV9FbXB0eUVudmlyb25tZW50UHJvZ3Jlc3NQcm9ncmVzc0ltcGxfc3RvcHdhdGNoSW50ZXJhY3RpdmVQcm9ncmVzc19zdG9wd2F0Y2hQaGFzZV9zdG9wd2F0Y2hJbnRlcnZhbHRpbWVyYXRlG1sxQRtbSxtbNDg7NTs0MG0bWzMwbT09PhtbMG0gIEVsYXBzZWQgdGltZTogIHMuIFJhdGU6ICB1bml0cy9tc2RhcnQyanMubWVzc2FnZXNzaGFyZWRfbWVzc2FnZXNNZXNzYWdlS2luZC5BQlNUUkFDVF9HRVRURVJNZXNzYWdlS2luZC5DQU5OT1RfUkVTT0xWRU1lc3NhZ2VLaW5kLkNPTVBMRVhfUkVUVVJOSU5HX05TTU1lc3NhZ2VLaW5kLkNPTVBMRVhfVEhST1dJTkdfTlNNTWVzc2FnZUtpbmQuQ09OU1RfQ09OU1RSVUNUT1JfV0lUSF9CT0RZTWVzc2FnZUtpbmQuQ09OU1RfRkFDVE9SWU1lc3NhZ2VLaW5kLkNPTlNUUlVDVE9SX1dJVEhfUkVUVVJOX1RZUEVNZXNzYWdlS2luZC5DWUNMSUNfQ09NUElMRV9USU1FX0NPTlNUQU5UU01lc3NhZ2VLaW5kLkRJUkVDVExZX1RIUk9XSU5HX05TTU1lc3NhZ2VLaW5kLkVRVUFMX01BUF9FTlRSWV9LRVlNZXNzYWdlS2luZC5FUVVBTF9TRVRfRU5UUllNZXNzYWdlS2luZC5FWFRSQU5FT1VTX01PRElGSUVSTWVzc2FnZUtpbmQuRVhUUkFORU9VU19NT0RJRklFUl9SRVBMQUNFTWVzc2FnZUtpbmQuRk9SSU5fTk9UX0FTU0lHTkFCTEVNZXNzYWdlS2luZC5JTVBMSUNJVF9KU19JTlRFUk9QX0ZJRUxEX05PVF9TVVBQT1JURURNZXNzYWdlS2luZC5JTlZBTElEX0FTU0VSVF9WQUxVRU1lc3NhZ2VLaW5kLklOVkFMSURfQVNTRVJUX1ZBTFVFX01FU1NBR0VNZXNzYWdlS2luZC5JTlZBTElEX0JPT0xfRlJPTV9FTlZJUk9OTUVOVF9ERUZBVUxUX1ZBTFVFX1RZUEVNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0NBU1RNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0FERF9UWVBFU01lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQklOQVJZX0lOVF9UWVBFTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9CSU5BUllfTlVNX1RZUEVNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0JJTkFSWV9QUklNSVRJVkVfVFlQRU1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQ09NUExFTUVOVF9UWVBFTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9DT05ESVRJT05BTF9UWVBFTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9DT05TVFJVQ1RPUk1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfRElWTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9JTkRFWE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfSU5URVJQT0xBVElPTl9UWVBFTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9ORUdBVEVfVFlQRU1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfTk9UX1RZUEVNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX1NUUklOR19BRERfVFlQRU1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfTlVNX0FERF9UWVBFTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9TVFJJTkdfTEVOR1RIX1RZUEVNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX1NISUZUTWVzc2FnZUtpbmQuSU5WQUxJRF9GUk9NX0VOVklST05NRU5UX05BTUVfVFlQRU1lc3NhZ2VLaW5kLklOVkFMSURfSU5UX0ZST01fRU5WSVJPTk1FTlRfREVGQVVMVF9WQUxVRV9UWVBFTWVzc2FnZUtpbmQuSU5WQUxJRF9MT0dJQ0FMX0FORF9PUEVSQU5EX1RZUEVNZXNzYWdlS2luZC5JTlZBTElEX0xPR0lDQUxfT1JfT1BFUkFORF9UWVBFTWVzc2FnZUtpbmQuSU5WQUxJRF9QQUNLQUdFX0NPTkZJR01lc3NhZ2VLaW5kLklOVkFMSURfUEFDS0FHRV9VUklNZXNzYWdlS2luZC5JTlZBTElEX1NUUklOR19GUk9NX0VOVklST05NRU5UX0RFRkFVTFRfVkFMVUVfVFlQRU1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfQ0xBU1NfQ0FOTk9UX0VYVEVORF9EQVJUX0NMQVNTTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9DTEFTU19OT05fRVhURVJOQUxfQ09OU1RSVUNUT1JNZXNzYWdlS2luZC5KU19JTlRFUk9QX0NMQVNTX05PTl9FWFRFUk5BTF9NRU1CRVJNZXNzYWdlS2luZC5KU19JTlRFUk9QX0ZJRUxEX05PVF9TVVBQT1JURURNZXNzYWdlS2luZC5KU19JTlRFUk9QX0lOREVYX05PVF9TVVBQT1JURURNZXNzYWdlS2luZC5KU19JTlRFUk9QX05PTl9FWFRFUk5BTF9NRU1CRVJNZXNzYWdlS2luZC5KU19JTlRFUk9QX01FTUJFUl9JTl9OT05fSlNfSU5URVJPUF9DTEFTU01lc3NhZ2VLaW5kLkpTX0lOVEVST1BfTUVUSE9EX1dJVEhfTkFNRURfQVJHVU1FTlRTTWVzc2FnZUtpbmQuSlNfT0JKRUNUX0xJVEVSQUxfQ09OU1RSVUNUT1JfV0lUSF9QT1NJVElPTkFMX0FSR1VNRU5UU01lc3NhZ2VLaW5kLkpTX1BMQUNFSE9MREVSX0NBUFRVUkVNZXNzYWdlS2luZC5MSUJSQVJZX05PVF9GT1VORE1lc3NhZ2VLaW5kLk1JU1NJTkdfRVhQUkVTU0lPTl9JTl9USFJPV01lc3NhZ2VLaW5kLk5BVElWRV9OT05fSU5TVEFOQ0VfSU5fTk9OX05BVElWRV9DTEFTU01lc3NhZ2VLaW5kLk5PX1NVQ0hfU1VQRVJfTUVNQkVSTWVzc2FnZUtpbmQuTk9OX05BVElWRV9FWFRFUk5BTE1lc3NhZ2VLaW5kLk5PVF9BX0NPTVBJTEVfVElNRV9DT05TVEFOVE1lc3NhZ2VLaW5kLk5PVF9BU1NJR05BQkxFTWVzc2FnZUtpbmQuUFJFQU1CTEVNZXNzYWdlS2luZC5SRVRIUk9XX09VVFNJREVfQ0FUQ0hNZXNzYWdlS2luZC5SRVRVUk5fSU5fR0VORVJBVElWRV9DT05TVFJVQ1RPUk1lc3NhZ2VLaW5kLlJFVFVSTl9JTl9HRU5FUkFUT1JNZXNzYWdlS2luZC5SVU5USU1FX1RZUEVfVE9fU1RSSU5HX09CSkVDVE1lc3NhZ2VLaW5kLlJVTlRJTUVfVFlQRV9UT19TVFJJTkdfU1VCVFlQRU1lc3NhZ2VLaW5kLlNUUklOR19FWFBFQ1RFRE1lc3NhZ2VLaW5kLlVOREVGSU5FRF9HRVRURVJNZXNzYWdlS2luZC5VTkRFRklORURfSU5TVEFOQ0VfR0VUVEVSX0JVVF9TRVRURVJNZXNzYWdlS2luZC5VTkRFRklORURfTUVUSE9ETWVzc2FnZUtpbmQuVU5ERUZJTkVEX09QRVJBVE9STWVzc2FnZUtpbmQuVU5ERUZJTkVEX1NFVFRFUk1lc3NhZ2VLaW5kLlVOREVGSU5FRF9TVEFUSUNfR0VUVEVSX0JVVF9TRVRURVJNZXNzYWdlS2luZC5VTkRFRklORURfU1RBVElDX1NFVFRFUl9CVVRfR0VUVEVSTWVzc2FnZUtpbmQuVU5ERUZJTkVEX1NVUEVSX1NFVFRFUk1lc3NhZ2VLaW5kLldST05HX0FSR1VNRU5UX0ZPUl9KU01lc3NhZ2VLaW5kLldST05HX0FSR1VNRU5UX0ZPUl9KU19GSVJTVE1lc3NhZ2VLaW5kLldST05HX0FSR1VNRU5UX0ZPUl9KU19TRUNPTkRNZXNzYWdlS2luZC5XUk9OR19BUkdVTUVOVF9GT1JfSlNfSU5URVJDRVBUT1JfQ09OU1RBTlRNZXNzYWdlS2luZC5TV0lUQ0hfQ0FTRV9GT1JCSURERU5NZXNzYWdlS2luZC5TV0lUQ0hfQ0FTRV9WQUxVRV9PVkVSUklERVNfRVFVQUxTTWVzc2FnZUtpbmQuU1dJVENIX0NBU0VfVFlQRVNfTk9UX0VRVUFMTWVzc2FnZUtpbmQuU1dJVENIX0NBU0VfVFlQRVNfTk9UX0VRVUFMX0NBU0VBQlNUUkFDVF9HRVRURVJDQU5OT1RfUkVTT0xWRUNPTVBJTEVSX0NSQVNIRURDT01QTEVYX1JFVFVSTklOR19OU01DT01QTEVYX1RIUk9XSU5HX05TTUNPTlNUX0ZBQ1RPUllDT05TVFJVQ1RPUl9XSVRIX1JFVFVSTl9UWVBFQ1lDTElDX0NPTVBJTEVfVElNRV9DT05TVEFOVFNESVJFQ1RMWV9USFJPV0lOR19OU01FUVVBTF9NQVBfRU5UUllfS0VZRVFVQUxfU0VUX0VOVFJZRVhUUkFORU9VU19NT0RJRklFUkVYVFJBTkVPVVNfTU9ESUZJRVJfUkVQTEFDRUZPUklOX05PVF9BU1NJR05BQkxFR0VORVJJQ0hJRERFTl9ISU5UU0hJRERFTl9XQVJOSU5HU0hJRERFTl9XQVJOSU5HU19ISU5UU0lNUExJQ0lUX0pTX0lOVEVST1BfRklFTERfTk9UX1NVUFBPUlRFRElOVkFMSURfQVNTRVJUX1ZBTFVFSU5WQUxJRF9BU1NFUlRfVkFMVUVfTUVTU0FHRUlOVkFMSURfQk9PTF9GUk9NX0VOVklST05NRU5UX0RFRkFVTFRfVkFMVUVfVFlQRUlOVkFMSURfQ09OU1RBTlRfQ0FTVElOVkFMSURfQ09OU1RBTlRfQUREX1RZUEVTSU5WQUxJRF9DT05TVEFOVF9CSU5BUllfSU5UX1RZUEVJTlZBTElEX0NPTlNUQU5UX0JJTkFSWV9OVU1fVFlQRUlOVkFMSURfQ09OU1RBTlRfQklOQVJZX1BSSU1JVElWRV9UWVBFSU5WQUxJRF9DT05TVEFOVF9DT01QTEVNRU5UX1RZUEVJTlZBTElEX0NPTlNUQU5UX0NPTkRJVElPTkFMX1RZUEVJTlZBTElEX0NPTlNUQU5UX0NPTlNUUlVDVE9SSU5WQUxJRF9DT05TVEFOVF9ESVZJTlZBTElEX0NPTlNUQU5UX0lOREVYSU5WQUxJRF9DT05TVEFOVF9JTlRFUlBPTEFUSU9OX1RZUEVJTlZBTElEX0NPTlNUQU5UX05FR0FURV9UWVBFSU5WQUxJRF9DT05TVEFOVF9OT1RfVFlQRUlOVkFMSURfQ09OU1RBTlRfU1RSSU5HX0FERF9UWVBFSU5WQUxJRF9DT05TVEFOVF9OVU1fQUREX1RZUEVJTlZBTElEX0NPTlNUQU5UX1NUUklOR19MRU5HVEhfVFlQRUlOVkFMSURfQ09OU1RBTlRfU0hJRlRJTlZBTElEX0ZST01fRU5WSVJPTk1FTlRfTkFNRV9UWVBFSU5WQUxJRF9JTlRfRlJPTV9FTlZJUk9OTUVOVF9ERUZBVUxUX1ZBTFVFX1RZUEVJTlZBTElEX0xPR0lDQUxfQU5EX09QRVJBTkRfVFlQRUlOVkFMSURfTE9HSUNBTF9PUl9PUEVSQU5EX1RZUEVJTlZBTElEX01FVEFEQVRBSU5WQUxJRF9NRVRBREFUQV9HRU5FUklDSU5WQUxJRF9QQUNLQUdFX0NPTkZJR0lOVkFMSURfUEFDS0FHRV9VUklJTlZBTElEX1NUUklOR19GUk9NX0VOVklST05NRU5UX0RFRkFVTFRfVkFMVUVfVFlQRUpTX0lOVEVST1BfQ0xBU1NfQ0FOTk9UX0VYVEVORF9EQVJUX0NMQVNTSlNfSU5URVJPUF9DTEFTU19OT05fRVhURVJOQUxfQ09OU1RSVUNUT1JKU19JTlRFUk9QX0NMQVNTX05PTl9FWFRFUk5BTF9NRU1CRVJKU19JTlRFUk9QX0ZJRUxEX05PVF9TVVBQT1JURURKU19JTlRFUk9QX0lOREVYX05PVF9TVVBQT1JURURKU19JTlRFUk9QX05PTl9FWFRFUk5BTF9NRU1CRVJKU19JTlRFUk9QX01FTUJFUl9JTl9OT05fSlNfSU5URVJPUF9DTEFTU0pTX0lOVEVST1BfTUVUSE9EX1dJVEhfTkFNRURfQVJHVU1FTlRTSlNfT0JKRUNUX0xJVEVSQUxfQ09OU1RSVUNUT1JfV0lUSF9QT1NJVElPTkFMX0FSR1VNRU5UU0pTX1BMQUNFSE9MREVSX0NBUFRVUkVMSUJSQVJZX05PVF9GT1VORE1JUlJPUlNfTElCUkFSWV9OT1RfU1VQUE9SVF9XSVRIX0NGRU1JU1NJTkdfRVhQUkVTU0lPTl9JTl9USFJPV05BVElWRV9OT05fSU5TVEFOQ0VfSU5fTk9OX05BVElWRV9DTEFTU05PX1NVQ0hfU1VQRVJfTUVNQkVSTk9OX05BVElWRV9FWFRFUk5BTE5PVF9BX0NPTVBJTEVfVElNRV9DT05TVEFOVE5PVF9BU1NJR05BQkxFUExFQVNFX1JFUE9SVF9USEVfQ1JBU0hQUkVBTUJMRVJFVFVSTl9JTl9HRU5FUkFUSVZFX0NPTlNUUlVDVE9SUlVOVElNRV9UWVBFX1RPX1NUUklOR19PQkpFQ1RSVU5USU1FX1RZUEVfVE9fU1RSSU5HX1NVQlRZUEVTVFJJTkdfRVhQRUNURURVTkRFRklORURfSU5TVEFOQ0VfR0VUVEVSX0JVVF9TRVRURVJVTkRFRklORURfU1RBVElDX0dFVFRFUl9CVVRfU0VUVEVSVU5ERUZJTkVEX1NUQVRJQ19TRVRURVJfQlVUX0dFVFRFUldST05HX0FSR1VNRU5UX0ZPUl9KU1dST05HX0FSR1VNRU5UX0ZPUl9KU19GSVJTVFdST05HX0FSR1VNRU5UX0ZPUl9KU19TRUNPTkRXUk9OR19BUkdVTUVOVF9GT1JfSlNfSU5URVJDRVBUT1JfQ09OU1RBTlRTV0lUQ0hfQ0FTRV9GT1JCSURERU5TV0lUQ0hfQ0FTRV9WQUxVRV9PVkVSUklERVNfRVFVQUxTU1dJVENIX0NBU0VfVFlQRVNfTk9UX0VRVUFMU1dJVENIX0NBU0VfVFlQRVNfTk9UX0VRVUFMX0NBU0Vob3dUb0ZpeGV4YW1wbGVzVEVNUExBVEVTQ29uc3QgY29uc3RydWN0b3IgY2FuJ3QgaGF2ZSBhIGJvZHkuVHJ5IHJlbW92aW5nIHRoZSAnY29uc3QnIGtleXdvcmQgb3IgdGhlIGJvZHkuICAgICAgICAgY2xhc3MgQyB7CiAgICAgICAgICAgY29uc3QgQygpIHt9CiAgICAgICAgIH0KCiAgICAgICAgIG1haW4oKSA9PiBuZXcgQygpO1RyeSByZW1vdmluZyB0aGUgJ2NvbnN0JyBrZXl3b3JkIG9yIHJlcGxhY2luZyB0aGUgYm9keSB3aXRoICc9JyBmb2xsb3dlZCBieSBhIHZhbGlkIHRhcmdldC4gICAgICAgICBjbGFzcyBDIHsKICAgICAgICAgICBjb25zdCBmYWN0b3J5IEMoKSB7fQogICAgICAgICB9CgogICAgICAgICBtYWluKCkgPT4gbmV3IEMoKTtDYW4ndCBoYXZlIG1vZGlmaWVyICcje21vZGlmaWVyfScgaGVyZS5UcnkgcmVtb3ZpbmcgJyN7bW9kaWZpZXJ9Jy52YXIgU3RyaW5nIGZvbzsgbWFpbigpe312YXIgZmluYWwgZm9vOyBtYWluKCl7fXZhciB2YXIgZm9vOyBtYWluKCl7fXZhciBjb25zdCBmb287IG1haW4oKXt9dmFyIGFic3RyYWN0IGZvbzsgbWFpbigpe312YXIgc3RhdGljIGZvbzsgbWFpbigpe312YXIgZXh0ZXJuYWwgZm9vOyBtYWluKCl7fWZpbmFsIHZhciBmb287IG1haW4oKXt9Y29uc3QgdmFyIGZvbzsgbWFpbigpe31hYnN0cmFjdCB2YXIgZm9vOyBtYWluKCl7fXN0YXRpYyB2YXIgZm9vOyBtYWluKCl7fWV4dGVybmFsIHZhciBmb287IG1haW4oKXt9VHJ5IHJlcGxhY2luZyBtb2RpZmllciAnI3ttb2RpZmllcn0nIHdpdGggJ3ZhcicsICdmaW5hbCcsIG9yIGEgdHlwZS5zZXQgZm9vOyBtYWluKCl7fWFic3RyYWN0IGZvbzsgbWFpbigpe31zdGF0aWMgZm9vOyBtYWluKCl7fWV4dGVybmFsIGZvbzsgbWFpbigpe31jbGFzcyBBIHsgaW50IEEoKSB7fSB9IG1haW4oKSB7IG5ldyBBKCk7IH1EaWQgeW91IG1lYW4gJ3JldGhyb3cnP1JldGhyb3cgbXVzdCBiZSBpbnNpZGUgb2YgY2F0Y2ggY2xhdXNlLlRyeSBtb3ZpbmcgdGhlIGV4cHJlc3Npb24gaW50byBhIGNhdGNoIGNsYXVzZSwgb3IgdXNpbmcgYSAndGhyb3cnIGV4cHJlc3Npb24ubWFpbigpIHsgcmV0aHJvdzsgfUNvbnN0cnVjdG9ycyBjYW4ndCByZXR1cm4gdmFsdWVzLlRyeSByZW1vdmluZyB0aGUgcmV0dXJuIHN0YXRlbWVudCBvciB1c2luZyBhIGZhY3RvcnkgY29uc3RydWN0b3IuICAgICAgICBjbGFzcyBDIHsKICAgICAgICAgIEMoKSB7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbWFpbigpID0+IG5ldyBDKCk7Q2FuJ3QgcmV0dXJuIGEgdmFsdWUgZnJvbSBhIGdlbmVyYXRvciBmdW5jdGlvbiAodXNpbmcgdGhlICcje21vZGlmaWVyfScgbW9kaWZpZXIpLlRyeSByZW1vdmluZyB0aGUgdmFsdWUsIHJlcGxhY2luZyAncmV0dXJuJyB3aXRoICd5aWVsZCcgb3IgY2hhbmdpbmcgdGhlIG1ldGhvZCBib2R5IG1vZGlmaWVyLiAgICAgICAgZm9vKCkgYXN5bmMqIHsgcmV0dXJuIDA7IH0KICAgICAgICBtYWluKCkgPT4gZm9vKCk7CiAgICAgICAgICAgICAgICBmb28oKSBzeW5jKiB7IHJldHVybiAwOyB9CiAgICAgICAgbWFpbigpID0+IGZvbygpOwogICAgICAgICcje2Zyb21UeXBlfScgaXMgbm90IGFzc2lnbmFibGUgdG8gJyN7dG9UeXBlfScuVGhlIGVsZW1lbnQgdHlwZSAnI3tjdXJyZW50VHlwZX0nIG9mICcje2V4cHJlc3Npb25UeXBlfScgaXMgbm90IGFzc2lnbmFibGUgdG8gJyN7ZWxlbWVudFR5cGV9Jy4gICAgICAgIG1haW4oKSB7CiAgICAgICAgICBMaXN0PGludD4gbGlzdCA9IDxpbnQ+WzEsIDJdOwogICAgICAgICAgZm9yIChTdHJpbmcgeCBpbiBsaXN0KSB4OwogICAgICAgIH0KICAgICAgICBDYW4ndCByZXNvbHZlICcje25hbWV9Jy5UaGUgbWV0aG9kICcje21lbWJlck5hbWV9JyBpcyBub3QgZGVmaW5lZCBmb3IgdGhlIGNsYXNzICcje2NsYXNzTmFtZX0nLiAgICAgICAgY2xhc3MgQSB7CiAgICAgICAgICBmb28oKSB7IGJhcigpOyB9CiAgICAgICAgfQogICAgICAgIG1haW4oKSB7IG5ldyBBKCkuZm9vKCk7IH0KICAgICAgICBUaGUgZ2V0dGVyICcje21lbWJlck5hbWV9JyBpcyBub3QgZGVmaW5lZCBmb3IgdGhlIGNsYXNzICcje2NsYXNzTmFtZX0nLmNsYXNzIEEge30gbWFpbigpIHsgbmV3IEEoKS54OyB9Y2xhc3MgQSB7fSBtYWluKCkgeyBBLng7IH1UaGUgc2V0dGVyICcje21lbWJlck5hbWV9JyBpbiBjbGFzcyAnI3tjbGFzc05hbWV9JyBjYW4gbm90IGJlIHVzZWQgYXMgYSBnZXR0ZXIuY2xhc3MgQSB7IHNldCB4KHkpIHt9IH0gbWFpbigpIHsgbmV3IEEoKS54OyB9VGhlIG9wZXJhdG9yICcje21lbWJlck5hbWV9JyBpcyBub3QgZGVmaW5lZCBmb3IgdGhlIGNsYXNzICcje2NsYXNzTmFtZX0nLmNsYXNzIEEge30gbWFpbigpIHsgbmV3IEEoKSArIDM7IH1UaGUgc2V0dGVyICcje21lbWJlck5hbWV9JyBpcyBub3QgZGVmaW5lZCBmb3IgdGhlIGNsYXNzICcje2NsYXNzTmFtZX0nLmNsYXNzIEEge30gbWFpbigpIHsgbmV3IEEoKS54ID0gNDk5OyB9Q2FuJ3QgcmVzb2x2ZSAnI3ttZW1iZXJOYW1lfScgaW4gYSBzdXBlcmNsYXNzIG9mICcje2NsYXNzTmFtZX0nLlRoZSBzZXR0ZXIgJyN7bWVtYmVyTmFtZX0nIGlzIG5vdCBkZWZpbmVkIGluIGEgc3VwZXJjbGFzcyBvZiAnI3tjbGFzc05hbWV9Jy4gICAgICAgIGNsYXNzIEEge30KICAgICAgICBjbGFzcyBCIGV4dGVuZHMgQSB7CiAgICAgICAgICBmb28oKSB7IHN1cGVyLnggPSA0OTk7IH0KICAgICAgICB9CiAgICAgICAgbWFpbigpIHsgbmV3IEIoKS5mb28oKTsgfQogICAgICAgIENhbm5vdCByZXNvbHZlIGdldHRlciAnI3tuYW1lfScuc2V0IGZvbyh4KSB7fSAgbWFpbigpIHsgZm9vOyB9Q2Fubm90IHJlc29sdmUgc2V0dGVyICcje25hbWV9Jy4gICAgICAgIG1haW4oKSB7CiAgICAgICAgICBmaW5hbCB4ID0gMTsKICAgICAgICAgIHggPSAyOwogICAgICAgIH0gICAgICAgIG1haW4oKSB7CiAgICAgICAgICBjb25zdCB4ID0gMTsKICAgICAgICAgIHggPSAyOwogICAgICAgIH0KICAgICAgICAgICAgICAgIGZpbmFsIHggPSAxOwogICAgICAgIG1haW4oKSB7IHggPSAzOyB9CiAgICAgICAgICAgICAgICBjb25zdCB4ID0gMTsKICAgICAgICBtYWluKCkgeyB4ID0gMzsgfQogICAgICAgIGdldCBmb28gPT4gbnVsbCAgbWFpbigpIHsgZm9vID0gNTsgfWNvbnN0IGZvbyA9IDAgIG1haW4oKSB7IGZvbyA9IDU7IH0je3RleHR9Q2Fubm90IHJlc29sdmUgJyN7bmFtZX0nLk5vdCBhIGNvbXBpbGUtdGltZSBjb25zdGFudC5DeWNsZSBpbiB0aGUgY29tcGlsZS10aW1lIGNvbnN0YW50IGNvbXB1dGF0aW9uLkNhbm5vdCByZXNvbHZlIHNldHRlci5FeHBlY3RlZCBhICdTdHJpbmcnLCBidXQgZ290IGFuIGluc3RhbmNlIG9mICcje3R5cGV9Jy5Kcy1pbnRlcm9wIGNsYXNzICcje2Nsc30nIGNhbm5vdCBleHRlbmQgZnJvbSB0aGUgbm9uIGpzLWludGVyb3AgY2xhc3MgJyN7c3VwZXJjbGFzc30nLkFubm90YXRlIHRoZSBzdXBlcmNsYXNzIHdpdGggQEpTLiAgICAgICAgICAgICAgaW1wb3J0ICdwYWNrYWdlOmpzL2pzLmRhcnQnOwoKICAgICAgICAgICAgICBjbGFzcyBGb28geyB9CgogICAgICAgICAgICAgIEBKUygpCiAgICAgICAgICAgICAgY2xhc3MgQmFyIGV4dGVuZHMgRm9vIHsgfQoKICAgICAgICAgICAgICBtYWluKCkgewogICAgICAgICAgICAgICAgbmV3IEJhcigpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBKcy1pbnRlcm9wIGRvZXMgbm90IHN1cHBvcnQgW10gYW5kIFtdPSBvcGVyYXRvciBtZXRob2RzLlRyeSByZXBsYWNpbmcgW10gYW5kIFtdPSBvcGVyYXRvciBtZXRob2RzIHdpdGggbm9ybWFsIG1ldGhvZHMuICAgICAgICBpbXBvcnQgJ3BhY2thZ2U6anMvanMuZGFydCc7CgogICAgICAgIEBKUygpCiAgICAgICAgY2xhc3MgRm9vIHsKICAgICAgICAgIGV4dGVybmFsIG9wZXJhdG9yIFtdKGFyZyk7CiAgICAgICAgfQoKICAgICAgICBtYWluKCkgewogICAgICAgICAgbmV3IEZvbygpWzBdOwogICAgICAgIH0KICAgICAgICAgICAgICAgIGltcG9ydCAncGFja2FnZTpqcy9qcy5kYXJ0JzsKCiAgICAgICAgQEpTKCkKICAgICAgICBjbGFzcyBGb28gewogICAgICAgICAgZXh0ZXJuYWwgb3BlcmF0b3IgW109KGFyZywgdmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgbWFpbigpIHsKICAgICAgICAgIG5ldyBGb28oKVswXSA9IDE7CiAgICAgICAgfQogICAgICAgIFNvbWUgcGFyYW1ldGVycyBpbiBhbm9ueW1vdXMganMtaW50ZXJvcCBjbGFzcyAnI3tjbHN9JyBvYmplY3QgbGl0ZXJhbCBjb25zdHJ1Y3RvciBhcmUgcG9zaXRpb25hbCBpbnN0ZWFkIG9mIG5hbWVkLi5NYWtlIGFsbCBhcmd1bWVudHMgaW4gZXh0ZXJuYWwgZmFjdG9yeSBvYmplY3QgbGl0ZXJhbCBjb25zdHJ1Y3RvcnMgbmFtZWQuY2xhc3MgU3VwZXIgewogIGZhY3RvcnkgU3VwZXIuZm9vKCkgPT4gbnVsbDsKfQpjbGFzcyBDbGFzcyBleHRlbmRzIFN1cGVyIHsKICBDbGFzcygpIDogc3VwZXIuZm9vKCk7Cn0KbWFpbigpID0+IG5ldyBDbGFzcygpOwpKcy1pbnRlcm9wIG1lbWJlcnMgbXVzdCBiZSAnZXh0ZXJuYWwnLkpzLWludGVyb3AgY2xhc3MgbWVtYmVycyBhcmUgb25seSBzdXBwb3J0ZWQgaW4ganMtaW50ZXJvcCBjbGFzc2VzLlRyeSBtYXJraW5nIHRoZSBlbmNsb3NpbmcgY2xhc3MgYXMganMtaW50ZXJvcCBvciByZW1vdmUgdGhlIGpzLWludGVyb3AgYW5ub3RhdGlvbiBmcm9tIHRoZSBtZW1iZXIuQ29uc3RydWN0b3IgJyN7Y29uc3RydWN0b3J9JyBpbiBqcy1pbnRlcm9wIGNsYXNzICcje2Nsc30nIGlzIG5vdCBleHRlcm5hbC5UcnkgYWRkaW5nIHRoZSAnZXh0ZXJuYWwnIHRvICcje2NvbnN0cnVjdG9yfScuTWVtYmVyICcje21lbWJlcn0nIGluIGpzLWludGVyb3AgY2xhc3MgJyN7Y2xzfScgaXMgbm90IGV4dGVybmFsLlRyeSBhZGRpbmcgdGhlICdleHRlcm5hbCcgdG8gJyN7bWVtYmVyfScuICAgICAgICAgICAgICBpbXBvcnQgJ3BhY2thZ2U6anMvanMuZGFydCc7CgogICAgICAgICAgICAgIEBKUygpCiAgICAgICAgICAgICAgY2xhc3MgRm9vIHsKICAgICAgICAgICAgICAgIGJhcigpIHt9CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBtYWluKCkgewogICAgICAgICAgICAgICAgbmV3IEZvbygpLmJhcigpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBKcy1pbnRlcm9wIG1ldGhvZCAnI3ttZXRob2R9JyBoYXMgbmFtZWQgYXJndW1lbnRzIGJ1dCBpcyBub3QgYSBmYWN0b3J5IGNvbnN0cnVjdG9yIG9mIGFuIEBhbm9ueW1vdXMgQEpTIGNsYXNzLlJlbW92ZSBhbGwgbmFtZWQgYXJndW1lbnRzIGZyb20ganMtaW50ZXJvcCBtZXRob2Qgb3IgaW4gdGhlIGNhc2Ugb2YgYSBmYWN0b3J5IGNvbnN0cnVjdG9yIGFubm90YXRlIHRoZSBjbGFzcyBhcyBAYW5vbnltb3VzLiAgICAgICAgICAgICAgaW1wb3J0ICdwYWNrYWdlOmpzL2pzLmRhcnQnOwoKICAgICAgICAgICAgICBASlMoKQogICAgICAgICAgICAgIGNsYXNzIEZvbyB7CiAgICAgICAgICAgICAgICBleHRlcm5hbCBiYXIoZm9vLCB7YmF6fSk7CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBtYWluKCkgewogICAgICAgICAgICAgICAgbmV3IEZvbygpLmJhcig0LCBiYXo6IDUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBGaWVsZHMgaW4ganMtaW50ZXJvcCBjbGFzc2VzIGFyZSBub3Qgc3VwcG9ydGVkLlRyeSByZXBsYWNpbmcgdGhlIGZpZWxkIHdpdGggYW4gZXh0ZXJuYWwgZ2V0dGVyIGFuZC9vciBzZXR0ZXIuRmllbGQgY2FuJ3QgYmUgbWFya2VkIGFzIGpzLWludGVyb3AuTGlicmFyeSBub3QgZm91bmQgJyN7cmVzb2x2ZWRVcml9Jy5QYWNrYWdlIGNvbmZpZyBmaWxlICcje3VyaX0nIGlzIGludmFsaWQuCiN7ZXhjZXB0aW9ufUNvbXB1dGVyIHNheXMgbm8hJyN7dXJpfScgaXMgbm90IGEgdmFsaWQgcGFja2FnZSBVUkkgKCN7ZXhjZXB0aW9ufSkuLy8gY2FuJ3QgaGF2ZSBhICd0b3AgbGV2ZWwnIHBhY2thZ2UgVVJJCmltcG9ydCAncGFja2FnZTpmb28uZGFydCc7CgptYWluKCkge30KLy8gY2FuJ3QgaGF2ZSAyIHNsYXNoZXMKaW1wb3J0ICdwYWNrYWdlOi8vZm9vL2Zvby5kYXJ0JzsKCm1haW4oKSB7fQovLyBwYWNrYWdlIG5hbWUgbXVzdCBiZSB2YWxpZAppbXBvcnQgJ3BhY2thZ2U6bm90C2FsaWQvZm9vLmRhcnQnOwoKbWFpbigpIHt9CkpTIGNvZGUgbXVzdCBub3QgdXNlICcjJyBwbGFjZWhvbGRlcnMgaW5zaWRlIGZ1bmN0aW9ucy5Vc2UgYW4gaW1tZWRpYXRlbHkgY2FsbGVkIEphdmFTY3JpcHQgZnVuY3Rpb24gdG8gY2FwdHVyZSB0aGUgdGhlIHBsYWNlaG9sZGVyIHZhbHVlcyBhcyBKYXZhU2NyaXB0IGZ1bmN0aW9uIHBhcmFtZXRlcnMuSlMgZXhwcmVzc2lvbiBtdXN0IHRha2UgdHdvIG9yIG1vcmUgYXJndW1lbnRzLkpTIHNlY29uZCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIGxpdGVyYWwuQXJndW1lbnQgZm9yICdKU19JTlRFUkNFUFRPUl9DT05TVEFOVCcgbXVzdCBiZSBhIHR5cGUgY29uc3RhbnQuVGhlIGdldHRlciAnI3tuYW1lfScgaGFzIG5vIGltcGxlbWVudGF0aW9uIGluIGNsYXNzICcje2NsYXNzfScuVHJ5IGFkZGluZyBhIGJvZHkgdG8gJyN7bmFtZX0nIG9yIGRlY2xhcmluZyAnI3tjbGFzc30nIHRvIGJlICdhYnN0cmFjdCcuY2xhc3MgQ2xhc3MgewogIGdldCBnZXR0ZXI7Cn0KbWFpbigpID0+IG5ldyBDbGFzcygpOwpBIG1ldGFkYXRhIGFubm90YXRpb24gbXVzdCBiZSBlaXRoZXIgYSByZWZlcmVuY2UgdG8gYSBjb21waWxlLXRpbWUgY29uc3RhbnQgdmFyaWFibGUgb3IgYSBjYWxsIHRvIGEgY29uc3RhbnQgY29uc3RydWN0b3IuVHJ5IHVzaW5nIGEgZGlmZmVyZW50IGNvbnN0YW50IHZhbHVlIG9yIHJlZmVyZW5jaW5nIGl0IHRocm91Z2ggYSBjb25zdGFudCB2YXJpYWJsZS5AT2JqZWN0IG1haW4oKSB7fUBwcmludCBtYWluKCkge31BIG1ldGFkYXRhIGFubm90YXRpb24gdXNpbmcgYSBjb25zdGFudCBjb25zdHJ1Y3RvciBjYW5ub3QgdXNlIHR5cGUgYXJndW1lbnRzLlRyeSByZW1vdmluZyB0aGUgdHlwZSBhcmd1bWVudHMgb3IgcmVmZXJlbmNpbmcgdGhlIGNvbnN0YW50IHRocm91Z2ggYSBjb25zdGFudCB2YXJpYWJsZS5jbGFzcyBDPFQ+IHsKICBjb25zdCBDKCk7Cn0KQEM8aW50PigpIG1haW4oKSB7fQpBbiBlbnRyeSB3aXRoIHRoZSBzYW1lIGtleSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgbWFwLlRyeSByZW1vdmluZyB0aGUgcHJldmlvdXMgZW50cnkgb3IgY2hhbmdpbmcgdGhlIGtleSBpbiBvbmUgb2YgdGhlIGVudHJpZXMubWFpbigpIHsKICB2YXIgbSA9IGNvbnN0IHsnZm9vJzogMSwgJ2Zvbyc6IDJ9Owp9QW4gZW50cnkgYXBwZWFycyB0d2ljZSBpbiB0aGUgc2V0LlRyeSByZW1vdmluZyBvbmUgb2YgdGhlIGVudHJpZXMubWFpbigpIHsKICB2YXIgbSA9IGNvbnN0IHsnZm9vJywgJ2JhcicsICdmb28nfTsKfVRoZSBjb21waWxlciBjcmFzaGVkIHdoZW4gY29tcGlsaW5nIHRoaXMgZWxlbWVudC5UaGUgY29tcGlsZXIgaXMgYnJva2VuLgoKV2hlbiBjb21waWxpbmcgdGhlIGFib3ZlIGVsZW1lbnQsIHRoZSBjb21waWxlciBjcmFzaGVkLiBJdCBpcyBub3QKcG9zc2libGUgdG8gdGVsbCBpZiB0aGlzIGlzIGNhdXNlZCBieSBhIHByb2JsZW0gaW4geW91ciBwcm9ncmFtIG9yCm5vdC4gUmVnYXJkbGVzcywgdGhlIGNvbXBpbGVyIHNob3VsZCBub3QgY3Jhc2guCgpUaGUgRGFydCB0ZWFtIHdvdWxkIGdyZWF0bHkgYXBwcmVjaWF0ZSBpZiB5b3Ugd291bGQgdGFrZSBhIG1vbWVudCB0bwpyZXBvcnQgdGhpcyBwcm9ibGVtIGF0IGh0dHA6Ly9kYXJ0YnVnLmNvbS9uZXcuCgpQbGVhc2UgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgoKKiB0aGUgbmFtZSBhbmQgdmVyc2lvbiBvZiB5b3VyIG9wZXJhdGluZyBzeXN0ZW0sCgoqIHRoZSBEYXJ0IFNESyBidWlsZCBudW1iZXIgKCN7YnVpbGRJZH0pLCBhbmQKCiogdGhlIGVudGlyZSBtZXNzYWdlIHlvdSBzZWUgaGVyZSAoaW5jbHVkaW5nIHRoZSBmdWxsIHN0YWNrIHRyYWNlCiAgYmVsb3cgYXMgd2VsbCBhcyB0aGUgc291cmNlIGxvY2F0aW9uIGFib3ZlKS4KI3t3YXJuaW5nc30gd2FybmluZyhzKSBhbmQgI3toaW50c30gaGludChzKSBzdXBwcmVzc2VkIGluICN7dXJpfS4je3dhcm5pbmdzfSB3YXJuaW5nKHMpIHN1cHByZXNzZWQgaW4gI3t1cml9LiN7aGludHN9IGhpbnQocykgc3VwcHJlc3NlZCBpbiAje3VyaX0uV2hlbiBydW4gb24gdGhlIGNvbW1hbmQtbGluZSwgdGhlIGNvbXBpbGVkIG91dHB1dCBtaWdodCByZXF1aXJlIGEgcHJlYW1ibGUgZmlsZSBsb2NhdGVkIGluOgogIDxzZGs+L2xpYi9faW50ZXJuYWwvanNfcnVudGltZS9saWIvcHJlYW1ibGVzLmAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgY29uc3RhbnQgY29uZGl0aW9uLiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAnYm9vbCcuYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgdmFsaWQgaW4gY29uc3RhbnQgc3RyaW5nIGludGVycG9sYXRpb24uIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICdib29sJywgJ2ludCcsICdkb3VibGUnLCBvciAnU3RyaW5nJy5gI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIG9wZXJhbmQgb2YgYSBjb25zdGFudCBiaW5hcnkgI3tvcGVyYXRvcn0gZXhwcmVzc2lvbi4gTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgJ2Jvb2wnLCAnaW50JywgJ2RvdWJsZScsICdTdHJpbmcnLCBvciAnTnVsbCcuYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBvcGVyYW5kIG9mIGEgY29uc3RhbnQgYmluYXJ5ICsgZXhwcmVzc2lvbiBvbiAnU3RyaW5nJy4gTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgJ1N0cmluZycuYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBvcGVyYW5kIGZvciBhIC5sZW5ndGggZXhwcmVzc2lvbi4gTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgJ1N0cmluZycuU2hpZnQgYW1vdW50IG11c3QgYmUgbm9uLW5lZ2F0aXZlIGluIGAje2xlZnR9ICN7b3BlcmF0b3J9ICN7cmlnaHR9YC5EaXZpc29yIG11c3QgYmUgbm9uLXplcm8gaW4gYCN7bGVmdH0gI3tvcGVyYXRvcn0gI3tyaWdodH1gLmAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgb3BlcmFuZCBvZiBhIGNvbnN0YW50IGJpbmFyeSArIGV4cHJlc3Npb24gb24gJ251bScuIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICdpbnQnIG9yICdkb3VibGUnLmAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgc3VidHlwZSBvZiAje2Nhc3RUeXBlfS5gI3tsZWZ0Q29uc3RhbnR9YCBvZiB0eXBlICcje2xlZnRUeXBlfScgYW5kIGAje3JpZ2h0Q29uc3RhbnR9YCBvZiB0eXBlICcje3JpZ2h0VHlwZX0nIGFyZSBub3QgdmFsaWQgb3BlcmFuZHMgb2YgYSBjb25zdGFudCBiaW5hcnkgKyBleHByZXNzaW9uLiBNdXN0IGJvdGggYmUgZWl0aGVyIG9mIHR5cGUgJ1N0cmluZycsIG9yIG9mIHR5cGVzICdpbnQnIG9yICdkb3VibGUnLmAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgb3BlcmFuZCBvZiBhIGNvbnN0YW50IGJpbmFyeSAje29wZXJhdG9yfSBleHByZXNzaW9uLiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAnaW50JyBvciAnZG91YmxlJy5gI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIG9wZXJhbmQgb2YgYSBjb25zdGFudCBiaW5hcnkgI3tvcGVyYXRvcn0gZXhwcmVzc2lvbi4gTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgJ2ludCcuYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBvcGVyYW5kIG9mIGEgY29uc3RhbnQgdW5hcnkgI3tvcGVyYXRvcn0gZXhwcmVzc2lvbi4gTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgJ2Jvb2wnLmAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgb3BlcmFuZCBvZiBhIGNvbnN0YW50IHVuYXJ5ICN7b3BlcmF0b3J9IGV4cHJlc3Npb24uIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICdpbnQnIG9yICdkb3VibGUnLmAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgb3BlcmFuZCBvZiBhIGNvbnN0YW50IHVuYXJ5ICN7b3BlcmF0b3J9IGV4cHJlc3Npb24uIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICdpbnQnLkluZGV4IGV4cHJlc3Npb25zIGFyZSBub3QgYWxsb3dlZCBpbiBjb25zdGFudCBleHByZXNzaW9ucy5gI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIGVudmlyb25tZW50IG5hbWUgY29uc3RhbnQuIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICdTdHJpbmcnLmAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgYGJvb2wuZnJvbUVudmlyb25tZW50YCBkZWZhdWx0IHZhbHVlIGNvbnN0YW50LiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAnYm9vbCcgb3IgYG51bGxgLmAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgYGludC5mcm9tRW52aXJvbm1lbnRgIGRlZmF1bHQgdmFsdWUgY29uc3RhbnQuIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICdpbnQnIG9yIGBudWxsYC5gI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIGBTdHJpbmcuZnJvbUVudmlyb25tZW50YCBkZWZhdWx0IHZhbHVlIGNvbnN0YW50LiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAnU3RyaW5nJyBvciBgbnVsbGAuYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBsb2dpY2FsIGFuZCBvcGVyYW5kLiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAnYm9vbCcuYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBsb2dpY2FsIG9yIG9wZXJhbmQuIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICdib29sJy5Db25zdHJ1Y3RvciAnI3tjb25zdHJ1Y3Rvck5hbWV9JyBpcyBub3QgYSB2YWxpZCBjb25zdGFudCBjb25zdHJ1Y3Rvci5Bc3NlcnRpb24gJyN7YXNzZXJ0aW9ufScgZmFpbGVkLkFzc2VydGlvbiBmYWlsZWQ6ICN7bWVzc2FnZX1kYXJ0MmpzIG5vIGxvbmdlciBzdXBwb3J0cyB0aGUgZGFydDptaXJyb3JzIGxpYnJhcnkuCgpBUElzIGZyb20gdGhpcyBsaWJyYXJ5IHdpbGwgdGhyb3cgYSBydW50aW1lIGVycm9yIGF0IHRoaXMgdGltZSwgYnV0IHRoZXkgd2lsbApiZWNvbWUgYSBjb21waWxlLXRpbWUgZXJyb3IgaW4gdGhlIGZ1dHVyZS5UaGlzICdub1N1Y2hNZXRob2QnIGltcGxlbWVudGF0aW9uIGlzIGd1YXJhbnRlZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uLiBUaGUgZ2VuZXJhdGVkIGNvZGUgd2lsbCBiZSBzbWFsbGVyIGlmIGl0IGlzIHJld3JpdHRlbi5SZXdyaXRlIHRvICdub1N1Y2hNZXRob2QoSW52b2NhdGlvbiBpKSA9PiBzdXBlci5ub1N1Y2hNZXRob2QoaSk7Jy5UaGlzICdub1N1Y2hNZXRob2QnIGltcGxlbWVudGF0aW9uIGlzIGd1YXJhbnRlZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uLiBUaGUgZ2VuZXJhdGVkIGNvZGUgd2lsbCBiZSBzbWFsbGVyIGFuZCB0aGUgY29tcGlsZXIgd2lsbCBiZSBhYmxlIHRvIHBlcmZvcm0gbW9yZSBvcHRpbWl6YXRpb25zIGlmIGl0IGlzIHJld3JpdHRlbi5PdmVycmlkaW5nICdub1N1Y2hNZXRob2QnIGNhdXNlcyB0aGUgY29tcGlsZXIgdG8gZ2VuZXJhdGUgbW9yZSBjb2RlIGFuZCBwcmV2ZW50cyB0aGUgY29tcGlsZXIgZnJvbSBkb2luZyBzb21lIG9wdGltaXphdGlvbnMuQ29uc2lkZXIgcmVtb3ZpbmcgdGhpcyAnbm9TdWNoTWV0aG9kJyBpbXBsZW1lbnRhdGlvbi5Vc2luZyAnLnJ1bnRpbWVUeXBlLnRvU3RyaW5nKCknIGNhdXNlcyB0aGUgY29tcGlsZXIgdG8gZ2VuZXJhdGUgbW9yZSBjb2RlIGJlY2F1c2UgaXQgbmVlZHMgdG8gcHJlc2VydmUgdHlwZSBhcmd1bWVudHMgb24gYWxsIGdlbmVyaWMgY2xhc3NlcywgZXZlbiBpZiB0aGV5IGFyZSBub3QgbmVjZXNzYXJ5IGVsc2V3aGVyZS5JZiB1c2VkIG9ubHkgZm9yIGRlYnVnZ2luZywgY29uc2lkZXIgdXNpbmcgb3B0aW9uIC0tbGF4LXJ1bnRpbWUtdHlwZS10by1zdHJpbmcgdG8gcmVkdWNlIHRoZSBjb2RlIHNpemUgaW1wYWN0LlVzaW5nICcucnVudGltZVR5cGUudG9TdHJpbmcoKScgaGVyZSBjYXVzZXMgdGhlIGNvbXBpbGVyIHRvIGdlbmVyYXRlIG1vcmUgY29kZSBiZWNhdXNlIGl0IG5lZWRzIHRvIHByZXNlcnZlIHR5cGUgYXJndW1lbnRzIG9uIGFsbCBnZW5lcmljIHN1YnR5cGVzIG9mICcje3JlY2VpdmVyVHlwZX0nLCBldmVuIGlmIHRoZXkgYXJlIG5vdCBuZWNlc3NhcnkgZWxzZXdoZXJlLk9ubHkgZXh0ZXJuYWwganMtaW50ZXJvcCBmdW5jdGlvbnMgYXJlIHN1cHBvcnRlZC5UcnkgcmVtb3ZpbmcgJ2V4dGVybmFsJyBrZXl3b3JkIG9yIGFubm90YXRpbmcgdGhlIGZ1bmN0aW9uIGFzIGEganMtaW50ZXJvcCBmdW5jdGlvbi5OYXRpdmUgbm9uLWluc3RhbmNlIG1lbWJlcnMgYXJlIG9ubHkgYWxsb3dlZCBpbiBuYXRpdmUgY2xhc3Nlcy4nY2FzZScgZXhwcmVzc2lvbiB0eXBlICcje3R5cGV9JyBvdmVycmlkZXMgJ29wZXJhdG9yID09Jy4nY2FzZScgZXhwcmVzc2lvbiBtYXkgbm90IGJlIG9mIHR5cGUgJyN7dHlwZX0nLidjYXNlJyBleHByZXNzaW9ucyBkbyBub3QgYWxsIGhhdmUgdHlwZSAnI3t0eXBlfScuJ2Nhc2UnIGV4cHJlc3Npb24gb2YgdHlwZSAnI3t0eXBlfScuaGFzSG93VG9GaXhjb21wdXRlTWVzc2FnZSN7I1x7LitcfU1pc3NpbmcgYXJndW1lbnRzIGluIGVycm9yIG1lc3NhZ2U6ICJNZXNzYWdlLmhhc2hDb2RlY29udmVydFRvU3RyaW5ndG9EYXJ0VGV4dERPTlRfS05PV19IT1dfVE9fRklYRW52aXJvbm1lbnRkYXJ0MmpzLmlvLmxvY2F0aW9uX3Byb3ZpZGVyQ29kZU91dHB1dExpc3RlbmVyTG9jYXRpb25Db2xsZWN0b3JfY29sbGVjdG9uVGV4dGxpbmVTdGFydHM9LGxlbmd0aD1rZXJuZWwuYmluYXJ5LnRhZ1RhZ05vdGhpbmdTb21ldGhpbmdDb25zdFN0YXRpY0ludm9jYXRpb25Db25zdENvbnN0cnVjdG9ySW52b2NhdGlvblRydWVMaXRlcmFsRmFsc2VMaXRlcmFsUG9zaXRpdmVJbnRMaXRlcmFsTmVnYXRpdmVJbnRMaXRlcmFsQmlnSW50TGl0ZXJhbENvbnN0TGlzdExpdGVyYWxDb25zdE1hcExpdGVyYWxDb25zdFNldExpdGVyYWxBc3luY0ZvckluU3RhdGVtZW50U2ltcGxlSW50ZXJmYWNlVHlwZVNpbXBsZUZ1bmN0aW9uVHlwZVNwZWNpYWxpemVkVGFnSGlnaEJpdFNwZWNpYWxpemVkVGFnTWFza1NwZWNpYWxpemVkUGF5bG9hZE1hc2tTcGVjaWFsaXplZFZhcmlhYmxlR2V0U3BlY2lhbGl6ZWRWYXJpYWJsZVNldFNwZWNpYWxpemVkSW50TGl0ZXJhbFNwZWNpYWxpemVkSW50TGl0ZXJhbEJpYXNDb21wb25lbnRGaWxlQmluYXJ5Rm9ybWF0VmVyc2lvbkNvbnN0YW50VGFna2VybmVsLmltcG9ydF90YWJsZUltcG9ydFRhYmxlQ29tcG9uZW50SW1wb3J0VGFibGVfbGlicmFyeUluZGV4TGlicmFyeUltcG9ydFRhYmxlX2ltcG9ydFBhdGhzX2ltcG9ydGVkTGlicmFyaWVzaW1wb3J0UGF0aHNfSW1wb3J0VGFibGVCdWlsZGVycmVmZXJlbmNlTGlicmFyeWFkZExpYnJhcnlJbXBvcnRyZWZlcmVuY2VVcml0YXJnZXRVcmkgY2Fubm90IHJlZmVyIHRvIGxpYnJhcnkgd2l0aG91dCBhbiBpbXBvcnQgVVJJaXNGaWxlT3JDdXN0b21TY2hlbWVpc1RhcmdldFNjaGVtZUZpbGVPckN1c3RvbWlzUmVmZXJlbmNlU2NoZW1lRmlsZU9yQ3VzdG9tcmVsYXRpdmVVcmkgY2Fubm90IHJlZmVyIHRvIGFwcGxpY2F0aW9uIGxpYnJhcnkgZXhwb3J0ZWRSZWZlcmVuY2VyZWxhdGl2ZVVyaVBhdGh0YXJnZXRTZWdtZW50c3JlZlNlZ21lbnRzc2FtZW9rZWRrZXJuZWwuaGllcmFyY2h5X2Jhc2VkX3R5cGVfZW52aXJvbm1lbnRIZWFwX2l0ZW1zX3BhcmVudEluZGV4b3JwaGFuX3JlSW5zZXJ0X2ZpcnN0Q2hpbGRJbmRleGNoaWxkSW5kZXhuZXh0Q2hpbGRrZXJuZWwubGlicmFyeV9pbmRleExpYnJhcnlJbmRleGdldHRlclByZWZpeGdldDpzZXR0ZXJQcmVmaXhzZXQ6dG9wTGV2ZWxsaWJyYXJ5VXJpc2xpYnJhcnlVcmlTZXRieVVyaWNvcmVMaWJyYXJpZXNfZ2V0TGlicmFyeUluZGV4bGlicmFyeUluZGV4JyBoYXMgbm90IGJlZW4gaW5kZXhlZGNvbnRhaW5zTGlicmFyeW1lbWJlck5hbWV0cnlHZXRNZW1iZXJ0cnlHZXRUb3BMZXZlbE1lbWJlcl9DbGFzc1RhYmxlY29udGFpbmVyTmFtZWV4dGVybmFsIGxpYnJhcnkgJ2xpYnJhcnkgJ19nZXRDbGFzc0luZGV4JyBub3QgZm91bmQgaW4gX01lbWJlclRhYmxlX21lbWJlcnNnZXREaXNhbWJpZ3VhdGVkTmFtZXRvcC1sZXZlbCBvZiBjbGFzcyAnJyBpbiBBIG1lbWJlciB3aXRoIGRpc2FtYmlndWF0ZWQgbmFtZSAnJyB3YXMgbm90IGZvdW5kIC4gRGlkIHlvdSBtZWFuICcnP2NoYXJjb2RlLmFzY2lpLmRvbGxhcl9sb3dlcmNhc2UkbnVsJHNvaCRzdHgkZXR4JGVvdCRlbnEkYWNrJGJlbCRicyRodCR0YWIkbGYkdnQkZmYkY3Ikc28kc2kkZGxlJGRjMSRkYzIkZGMzJGRjNCRuYWskc3luJGV0YiRjYW4kZW0kc3ViJGVzYyRmcyRncyRycyR1cyRkZWwkc3BhY2UkZXhjbGFtYXRpb24kcXVvdCRxdW90ZSRkb3VibGVfcXVvdGUkcXVvdGF0aW9uJGhhc2gkZG9sbGFyJHBlcmNlbnQkYW1wJGFtcGVyc2FuZCRhcG9zJGFwb3N0cm9waGUkc2luZ2xlX3F1b3RlJGxwYXJlbiRvcGVuX3BhcmVuJG9wZW5fcGFyZW50aGVzaXMkcnBhcmVuJGNsb3NlX3BhcmVuJGNsb3NlX3BhcmVudGhlc2lzJGFzdGVyaXNrJHBsdXMkY29tbWEkbWludXMkZGFzaCRkb3QkZnVsbHN0b3Akc2xhc2gkc29saWR1cyRkaXZpc2lvbiRjb2xvbiRzZW1pY29sb24kbHQkbGVzc190aGFuJGxhbmdsZSRvcGVuX2FuZ2xlJGVxdWFsJGd0JGdyZWF0ZXJfdGhhbiRyYW5nbGUkY2xvc2VfYW5nbGUkcXVlc3Rpb24kYXQkbGJyYWNrZXQkb3Blbl9icmFja2V0JGJhY2tzbGFzaCRyYnJhY2tldCRjbG9zZV9icmFja2V0JGNpcmN1bWZsZXgkY2FyZXQkaGF0JHVuZGVyc2NvcmUkdW5kZXJsaW5lJGJhY2txdW90ZSRncmF2ZSRsYnJhY2Ukb3Blbl9icmFjZSRwaXBlJGJhciRyYnJhY2UkY2xvc2VfYnJhY2UkdGlsZGVwYWNrYWdlX2NvbmZpZy51dGlsX3ZhbGlkUGFja2FnZU5hbWVDaGFyYWN0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISAgJCAmJygpKissLS4gMDEyMzQ1Njc4OSA7ID0gIEBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiAgICBfIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6ICAgfiBfZmluZEludmFsaWRDaGFyYWN0ZXJub25Eb3ROb3QgYSBwYWNrYWdlOiBVUklQYWNrYWdlIFVSSXMgbXVzdCBub3QgaGF2ZSBhIGhvc3QgcGFydFBhY2thZ2UgVVJJcyBtdXN0IG5vdCBoYXZlIGEgcXVlcnkgcGFydFBhY2thZ2UgVVJJcyBtdXN0IG5vdCBoYXZlIGEgZnJhZ21lbnQgcGFydFBhY2thZ2UgVVJJcyBtdXN0IG5vdCBzdGFydCB3aXRoIGEgJy8nUGFja2FnZSBVUklzIG11c3Qgc3RhcnQgd2l0aCB0aGUgcGFja2FnZSBuYW1lIGZvbGxvd2VkIGJ5IGEgJy8nYmFkSW5kZXhQYWNrYWdlIG5hbWVzIG11cyBiZSBub24tZW1wdHlQYWNrYWdlIG5hbWVzIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgbm9uLScuJyBjaGFyYWN0ZXJiYWRDaGFyQ29kZWJhZENoYXJQYWNrYWdlIG5hbWVzIG11c3Qgbm90IGNvbnRhaW4gZmFzdGEuc2Nhbm5lci5zdHJpbmdfY2Fub25pY2FsaXplcnBheWxvYWRTdHJpbmdDYW5vbmljYWxpemVyTUFTS0lOSVRJQUxfU0laRV9zaXplX2NvdW50X25vZGVzaGFzaEJ5dGVzaGFzaFN0cmluZ3JlaGFzaG5ld1NpemVuZXdOb2Rlc1N5bnRhY3RpY0VudGl0eVN0cmluZ1V0aWxpdGllc0lOVEVSTkVSaW50ZXJua2VybmVsLmNsb25lc3dpdGNoQ2FzZXNjbG9uZUFubm90YXRpb25zX2FjdGl2ZUZpbGVVcmllbnN1cmVNdXRhYmxlQ2xvbmluZyBvZiBsaWJyYXJpZXMgaXMgbm90IGltcGxlbWVudGVkQ2xvbmluZyBvZiBjbGFzc2VzIGlzIG5vdCBpbXBsZW1lbnRlZENsb25pbmcgb2YgZXh0ZW5zaW9ucyBpcyBub3QgaW1wbGVtZW50ZWRfY2xvbmVGaWxlT2Zmc2V0YWN0aXZlRmlsZVVyaVNhdmVkY2xvbmVPcHRpb25hbHZpc2l0T3B0aW9uYWxUeXBlbmV3VmFyaWFibGVzd2l0Y2hDYXNlbmV3RXhjZXB0aW9ubmV3U3RhY2tUcmFjZWNsb25lRnVuY3Rpb25Ob2RlQm9keXNhdmVkQ2xvbmVBbm5vdGF0aW9uc1VuaW1wbGVtZW50ZWQgY2xvbmUgZm9yIEtlcm5lbCBleHByZXNzaW9uOiBVbmltcGxlbWVudGVkIGNsb25lIGZvciBLZXJuZWwgaW5pdGlhbGl6ZXI6IFVuaW1wbGVtZW50ZWQgY2xvbmUgZm9yIEtlcm5lbCBtZW1iZXI6IFVuaW1wbGVtZW50ZWQgY2xvbmUgZm9yIEtlcm5lbCBzdGF0ZW1lbnQ6IENsb25pbmcgS2VybmVsIG5vbi1tZW1iZXJzIGlzIG5vdCBzdXBwb3J0ZWQuICBUcmllZCBjbG9uaW5nIENsb25lV2l0aG91dEJvZHlHcmFwaGNvbXB1dGVTdHJvbmdDb21wb25lbnRzVHlwZVZhcmlhYmxlR3JhcGhib3VuZHNlZGdlc3R5cGVQYXJhbWV0ZXJJbmRpY2VzY29sbGVjdG9yb2NjdXJyZWRPY2N1cnJlbmNlQ29sbGVjdG9yVmlzaXRvclR5cGVBcmd1bWVudElzc3VlZW5jbG9zaW5nVHlwZVZhcmlhbmNldW5yZWxhdGVkaW52YXJpYW50bWVldHN0cm9uZ2x5Q29ubmVjdGVkdXBwZXJCb3VuZHNsb3dlckJvdW5kc3R5cGVQYXJhbWV0ZXJJbmRleGZpbmRUeXBlQXJndW1lbnRJc3N1ZXNhbGxvd1N1cGVyQm91bmRlZHR5cGVkZWZSaHNSZXN1bHRjbG9uZWRhcmd1bWVudHNSZXN1bHRpc3N1ZXNhcmd1bWVudHNUb1JlcG9ydGZpbmRUeXBlQXJndW1lbnRJc3N1ZXNGb3JJbnZvY2F0aW9udHlwZWRlZkluc3RhbnRpYXRpb25zZ2V0R2VuZXJpY1R5cGVOYW1lY29udmVydFN1cGVyQm91bmRlZFRvUmVndWxhckJvdW5kZWRyZXBsYWNlZFR5cGVBcmd1bWVudHNyZXBsYWNlZFJldHVyblR5cGVyZXBsYWNlZFBvc2l0aW9uYWxQYXJhbWV0ZXJzcmVwbGFjZWROYW1lZFBhcmFtZXRlcnNpc051bGxmYXN0YS5rZXJuZWxfYnVpbGRlckRlbGF5ZWRNZW1iZXJEZWxheWVkT3ZlcnJpZGVDaGVja0ltcGxpY2l0RmllbGRUeXBlVmFyaWFibGVCdWlsZGVyTG9hZExpYnJhcnlCdWlsZGVyVW5saW5rZWREZWNsYXJhdGlvbmNvbXBhcmVQcm9jZWR1cmVzaXNSZWRpcmVjdGluZ0dlbmVyYXRpdmVDb25zdHJ1Y3RvckltcGxlbWVudGF0aW9udG9LZXJuZWxDb21iaW5hdG9yc2Zhc3RhQ29tYmluYXRvcnNuYW1lTGlzdGZhc3RhLnRhcmdldF9pbXBsZW1lbnRhdGlvbmJhY2tlbmRyZXdyaXRlU2V2ZXJpdHljYWNoZWRBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkVycm9yY2FjaGVkQ29tcGlsZVRpbWVFcnJvcmNhY2hlZER1cGxpY2F0ZWRGaWVsZEluaXRpYWxpemVyRXJyb3JjYWNoZWRGYWxsVGhyb3VnaEVycm9yY2FjaGVkTmF0aXZlQW5ub3RhdGlvbmNhY2hlZE5hdGl2ZUV4dGVuc2lvbkFubm90YXRpb25fY3VycmVudFNka1ZlcnNpb25NYWpvcl9jdXJyZW50U2RrVmVyc2lvbk1pbm9yZ2V0Q29uc3RydWN0b3JBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkVycm9yX0NvbXBpbGVUaW1lRXJyb3JieXBhc3NMaWJyYXJ5UHJpdmFjeV9EdXBsaWNhdGVkRmllbGRJbml0aWFsaXplckVycm9yRXh0ZXJuYWxOYW1lbWVzc2FnZUNvbnRleHRwcm9jZXNzZWRPcHRpb25zY3VycmVudFNka1ZlcnNpb25NYWpvcl9wYXJzZUN1cnJlbnRTZGtWZXJzaW9uY3VycmVudFNka1ZlcnNpb25NaW5vcmdvb2RVbnBhcnNhYmxlIHNkayB2ZXJzaW9uIGdpdmVuOiBmYXN0YS5kaWxsX2xpYnJhcnlfYnVpbGRlckR5bmFtaWNUeXBlQnVpbGRlckRpbGxDbGFzc0J1aWxkZXJEaWxsVHlwZUFsaWFzQnVpbGRlckxhenlMaWJyYXJ5U2NvcGV0b3BObyBsaWJyYXJ5IGJ1aWxkZXIudW5zZXJpYWxpemFibGVFeHBvcnRzZXhwb3J0c0FscmVhZHlGaW5hbGl6ZWRpc1JlYWR5VG9CdWlsZGlzUmVhZHlUb0ZpbmFsaXplRXhwb3J0c2lzQnVpbHRsYXp5U2NvcGVsYXp5RXhwb3J0U2NvcGVOb3QgcmVhZHkgdG8gYnVpbGQuTm90IHJlYWR5IHRvIGZpbmFsaXplIGV4cG9ydHMuYWRkU3ludGhldGljRGVjbGFyYXRpb25PZkR5bmFtaWNhZGRCdWlsZGVyY2xhc3NCdWxkZXJfZXhwb3J0cyNhZGRTZXR0ZXJleHBvcnRTY29wZUJ1aWxkZXJhZGRUb1Njb3BlY29tcHV0ZUFtYmlndW91c0RlY2xhcmF0aW9uPGxpYnJhcnkgJyc+bWFya0FzUmVhZHlUb0J1aWxkbWFya0FzUmVhZHlUb0ZpbmFsaXplRXhwb3J0c05vIGJ1aWxkZXIgZm9yICdFeHBvcnRlZCBlbGVtZW50ICcnIG5vdCBmb3VuZCBpbiAnZmFzdGEuZGlsbF9sb2FkZXJUeXBlQnVpbGRlckNvbXB1dGVyY29tcG9uZW50TGlicmFyaWVzcmVxdWVzdGVkTGlicmFyaWVzYnVpbGRlci5saWJyYXJ5a2VybmVsTGlicmFyeWZhc3RhLmRpbGxfbWVtYmVyX2J1aWxkZXJNZW1iZXJCdWlsZGVyYWJzdHJhY3RNYXNrZXh0ZXJuYWxNYXNrc3RhdGljTWFza2lzUmVkaXJlY3RpbmdHZW5lcmF0aXZlQ29uc3RydWN0b3Jjb21wdXRlTW9kaWZpZXJzbW9kaWZpZXJmYXN0YS5zY29wZU5hbWVJdGVyYXRvclR5cGVWYXJpYWJsZUJ1aWxkZXJNdXRhYmxlU2NvcGVfZXh0ZW5zaW9uc2NsYXNzTmFtZU9yRGVidWdOYW1lU2NvcGUoZm9yd2FyZERlY2xhcmVkTGFiZWxzaW1tdXRhYmxlbmVzdGVkbmFtZUl0ZXJhdG9yY29weVdpdGhQYXJlbnRsb2NhbD1zZXR0ZXJzPXBhcmVudD1iZWNvbWVQYXJ0T2Z3aXRoVHlwZVZhcmlhYmxlc25ld1Njb3BldHlwZSB2YXJpYWJsZXNyZWNvcmRVc2Vsb29rdXBJbmlzSW5zdGFuY2VTY29wZWZvckVhY2hFeHRlbnNpb25tZXJnZW1lcmdlTWVtYmVybmVzdGluZ0xldmVsd3JpdGVPbmluZGVudGNvbXB1dGVNaXhpblNjb3BlbmVlZHNDb3B5U2NvcGVCdWlsZGVyQWNjZXNzRXJyb3JCdWlsZGVyU2NvcGVMb2NhbERlY2xhcmF0aW9uSXRlcmF0b3JTY29wZUxvY2FsRGVjbGFyYXRpb25OYW1lSXRlcmF0b3Jsb2NhbE5hbWVzc2V0dGVyTmFtZXNmYXN0YS5zb3VyY2VfY2xhc3NfYnVpbGRlckNvbnN0cnVjdG9yUmVmZXJlbmNlQnVpbGRlckZ1bmN0aW9uQnVpbGRlck1ldGFkYXRhQnVpbGRlcmNvbXB1dGVWYXJpYW5jZWFjdHVhbENsc2NvbnN0cnVjdG9yUmVmZXJlbmNlc29uVHlwZXNzdGFydENoYXJPZmZzZXRuYW1lT2Zmc2V0Y2hhckVuZE9mZnNldGJ1aWxkQnVpbGRlcnNjaGVja1N1cGVydHlwZWJ1aWxkU3VwZXJ0eXBlY29uc3RydWN0b3JTY29wZUJ1aWxkZXJ2YXJpYW5jZW1lbWJlckJ1aWxkZXJmaW5pc2hQYXRjaGNvbXB1dGVEaXJlY3RTdXBlcnR5cGVzaW5pdGlhbGl6ZUNsYXNzZmFzdGEuc291cmNlX2xpYnJhcnlfYnVpbGRlcnJlc29sdmVSZWxhdGl2ZVVyaUVudW1Db25zdGFudEluZm9Gb3JtYWxQYXJhbWV0ZXJCdWlsZGVyRnVuY3Rpb25UeXBlQnVpbGRlclByZWZpeEJ1aWxkZXJRdWFsaWZpZWROYW1lVW5yZXNvbHZlZFR5cGVmbGF0dGVuTmFtZUNvbmZpZ3VyYXRpb25FeHBvcnRJbXBvcnRCdWlsdGluVHlwZUJ1aWxkZXJDb25zdHJ1Y3RvckJ1aWxkZXJFbnVtQnVpbGRlclR5cGVBbGlhc0J1aWxkZXJNaXhpbkFwcGxpY2F0aW9uQnVpbGRlclJlZGlyZWN0aW5nRmFjdG9yeUJ1aWxkZXJWb2lkVHlwZUJ1aWxkZXJmaW5kR2VuZXJpY0Z1bmN0aW9uVHlwZXNnZXROb25TaW1wbGljaXR5SXNzdWVzRm9yRGVjbGFyYXRpb25nZXROb25TaW1wbGljaXR5SXNzdWVzRm9yVHlwZVZhcmlhYmxlc2hhc0NvbnN0Q29uc3RydWN0b3JNYXNraGFzSW5pdGlhbGl6ZXJNYXNraW5pdGlhbGl6aW5nRm9ybWFsTWFza21peGluRGVjbGFyYXRpb25NYXNrbmFtZWRNaXhpbkFwcGxpY2F0aW9uTWFza1R5cGVJbmZlcnJlckltcGxTb3VyY2VFeHRlbnNpb25CdWlsZGVyTUFMRk9STUVEX1VSSV9TQ0hFTUVvcmctZGFydGxhbmctbWFsZm9ybWVkLXVyaWxpYnJhcnlEZWNsYXJhdGlvbmV4cG9ydHNpbXBvcnRTY29wZWltcGxlbWVudGF0aW9uQnVpbGRlcnNhY2Nlc3NvcnNkb2N1bWVudGF0aW9uQ29tbWVudHBhcnRPZk5hbWVjdXJyZW50VHlwZVBhcmFtZXRlclNjb3BlQnVpbGRlcmNhbkFkZEltcGxlbWVudGF0aW9uQnVpbGRlcnNhY2Nlc3NQcm9ibGVtYWN0dWFsT3JpZ2lubmF0aXZlTWV0aG9kc2JvdW5kbGVzc1R5cGVWYXJpYWJsZXNmb3J3YXJkZXJzT3JpZ2luc2luZmVycmVkVHlwZXNfbmFtZU9yaWdpbnVudHlwZWRJbml0aWFsaXppbmdGb3JtYWxzaW1wbGljaXRseVR5cGVkRmllbGRzbGFuZ3VhZ2VWZXJzaW9uRXhwbGljaXRseVNldHBvc3Rwb25lZFByb2JsZW1zSXNzdWVkcG9zdHBvbmVkUHJvYmxlbXNmcm9tU2NvcGVzdG9TY29wZWFkZFR5cGVhZGRQb3N0cG9uZWRQcm9ibGVtYWRkQ29uc3RydWN0b3JSZWZlcmVuY2ViZWdpbk5lc3RlZERlY2xhcmF0aW9uaGFzTWVtYmVyc2NyZWF0ZU5lc3RlZGVuZE5lc3RlZERlY2xhcmF0aW9uVW5leHBlY3RlZCBkZWNsYXJhdGlvbi4gVHJ5aW5nIHRvIGVuZCBhICBhcyBhIDxzeW50YXgtZXJyb3I+dXJpSXNWYWxpZHVyaU9mZnNldHBhcnNlZFVyaWNvbXB1dGVBbmRWYWxpZGF0ZUNvbnN0cnVjdG9yTmFtZWFkZEV4cG9ydGNvbmZpZ3VyYXRpb25zbG9va3VwSW1wb3J0Q29uZGl0aW9uZG90dGVkTmFtZWV4cG9ydGVkTGlicmFyeWFkZEV4cG9ydGVycHJlZml4Q2hhck9mZnNldGltcG9ydEluZGV4bmF0aXZlUGF0aGRhcnQtZXh0OnN0cmlwcGVkVXJpbmF0aXZlSW1wb3J0UGF0aGFkZFBhcnRPZmFkZEZpZWxkc2ZpZWxkSW5mb3Nwb3RlbnRpYWxseU5lZWRJbml0aWFsaXplckluT3V0bGluZWluaXRpYWxpemVyVG9rZW5iZWZvcmVMYXN0Y29uc3RJbml0aWFsaXplclRva2VuaXNEdXBsaWNhdGVkRGVjbGFyYXRpb25mdWxsTmFtZWJ1aWxkQnVpbGRlcmFkZERlcGVuZGVuY2llc3NldERvY3VtZW50YXRpb25Db21tZW50YWRkSW1wbGVtZW50YXRpb25CdWlsZGVydmFsaWRhdGVQYXJ0dXNlZFBhcnRzZXhwb3J0ZXJzZXhwb3J0ZXJpbmNsdWRlUGFydHNzZWVuUGFydHNwYXJ0T2Zmc2V0cGFydE9mTGlicmFyeWluY2x1ZGVQYXJ0cGFydERlY2xhcmF0aW9uc2R1cGxpY2F0ZWRwYXJ0SW1wbGljaXRseVR5cGVkRmllbGRzdGFrZUltcGxpY2l0bHlUeXBlZEZpZWxkc2J1aWxkSW5pdGlhbFNjb3Blc2FkZFRvRXhwb3J0U2NvcGVleHBsaWNpdENvcmVJbXBvcnRmaW5hbGl6ZUltcG9ydHNtZW1iZXJMYXN0dHlwZUNvdW50Y2hlY2tUeXBlbm9ybWFsaXplVHlwZWFkZFByb2JsZW1BdEFjY2Vzc29yc2FkZE5hbWVkVHlwZWFkZE1peGluQXBwbGljYXRpb25taXhpbnNhZGRWb2lkVHlwZWlzc3VlUG9zdHBvbmVkUHJvYmxlbXNwb3N0cG9uZWRQcm9ibGVtc3VwZXJ0eXBlT2Zmc2V0X2FkZENsYXNzVHlwZVBhcmFtZXRlclNjb3BlS2luZC5jbGFzc0RlY2xhcmF0aW9uYWRkTWl4aW5EZWNsYXJhdGlvblR5cGVQYXJhbWV0ZXJTY29wZUtpbmQubWl4aW5EZWNsYXJhdGlvbmNsYXNzU2NvcGVjbGFzcyBjb25zdHJ1Y3RvclNjb3BlYXBwbHlNaXhpbnN0eXBlVmFyaWFibGVzQnlOYW1lY2hlY2tUeXBlVmFyaWFibGVzc2V0UGFyZW50c2V0UGFyZW50QW5kQ2hlY2tDb25mbGljdHN0dm93bmVyaXNFeHRlbnNpb25UeXBlUGFyYW1ldGVyYWRkRXh0ZW5zaW9uRGVjbGFyYXRpb25leHRlbnNpb25OYW1lVHlwZVBhcmFtZXRlclNjb3BlS2luZC5leHRlbnNpb25EZWNsYXJhdGlvbmV4dGVuc2lvbiBleHRlbnNpb25CdWlsZGVyc3ViY2xhc3NOYW1ldW5uYW1lZCBtaXhpbiBhcHBsaWNhdGlvbnJ1bm5pbmdOYW1laXNOYW1lZE1peGluQXBwbGljYXRpb250eXBlVmFyaWFibGVOYW1lc3R5cGVWYXJpYWJsZXVzZXNUeXBlVmFyaWFibGVzaXNHZW5lcmljZnVsbG5hbWVhcHBsaWNhdGlvblR5cGVWYXJpYWJsZXNhcHBsaWNhdGlvblR5cGVBcmd1bWVudHNUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLnVubmFtZWRNaXhpbkFwcGxpY2F0aW9ubWl4aW4gYXBwbGljYXRpb25jb3B5VHlwZVZhcmlhYmxlc25ld1R5cGVzbmV3VHlwZW1peGluRGVjbGFyYXRpb25jb21wdXRlZFN0YXJ0Q2hhck9mZnNldGFwcGxpY2F0aW9ubWl4aW4gYWRkTmFtZWRNaXhpbkFwcGxpY2F0aW9ubWl4aW5BcHBsaWNhdGlvblR5cGVQYXJhbWV0ZXJTY29wZUtpbmQubmFtZWRNaXhpbkFwcGxpY2F0aW9uYWRkQ29uc3RydWN0b3Jjb25zdHJ1Y3Rvck5hbWVjaGFyT3BlblBhcmVuT2Zmc2V0bmF0aXZlTWV0aG9kTmFtZWNvbnN0cnVjdG9yQnVpbGRlcnNldENvbnN0cnVjdG9yTmFtZU9mZnNldGFkZE5hdGl2ZU1ldGhvZHByb2NlZHVyZUJ1aWxkZXJhZGRGYWN0b3J5TWV0aG9kZmFjdG9yeURlY2xhcmF0aW9uVHlwZVBhcmFtZXRlclNjb3BlS2luZC5mYWN0b3J5TWV0aG9kI2ZhY3RvcnlfbWV0aG9kcHJvY2VkdXJlTmFtZXNhdmVkRGVjbGFyYXRpb25hZGRFbnVtZW51bUNvbnN0YW50SW5mb3NhZGRGdW5jdGlvblR5cGVBbGlhc3R5cGVkZWZCdWlsZGVyVHlwZVBhcmFtZXRlclNjb3BlS2luZC50eXBlZGVmI3R5cGVkZWZhZGRGdW5jdGlvblR5cGVUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLmZ1bmN0aW9uVHlwZSNmdW5jdGlvbl90eXBlYWRkRm9ybWFsUGFyYW1ldGVyaGFzVGhpc2FkZFR5cGVWYXJpYWJsZWFkZE5hdGl2ZURlcGVuZGVuY3lzZWVuZXhwb3J0SW5kZXhwcmVmaXhCdWlsZGVyZXhwb3J0ZWRpc0xvYWRMaWJyYXJ5cHJlZmVycmVkb3RoZXJVcmlwcmVmZXJyZWRVcmloaWRkZW5VcmlidWlsZGVyVGVtcGxhdGVsb2FkTGlicmFyeUJ1aWxkZXJmaW5pc2hGb3J3YXJkZXJzZm9yd2FyZGVycG9zaXRpb25hbENvdW50Zm9yd2FyZGVyUGFyYW1ldGVyb3JpZ2luUGFyYW1ldGVyb3JpZ2luTmFtZWRNYXBvcmlnaW5OYW1lZGZvcndhcmRlck5hbWVkYmVjb21lTmF0aXZlY29tcHV0ZURlZmF1bHRUeXBlc0ZvclZhcmlhYmxlc2hhdmVFcnJvbmVvdXNCb3VuZHNnZW5lcmljRnVuY3Rpb25UeXBlc3JlcG9ydElzc3Vlc3BlcmZvcm1FcnJvclJlY292ZXJ5YXBwbHlQYXRjaGVzb3JpZ2luRGVjbGFyYXRpb25zYXBwbHlQYXRjaHBhdGNoRGVjbGFyYXRpb25zaW5qZWN0TWVtYmVyRnJvbVBhdGNoZXhwb3J0TWVtYmVyRnJvbVBhdGNocmVwb3J0VHlwZUFyZ3VtZW50SXNzdWVzaW5mZXJyZWR0YXJnZXRSZWNlaXZlcmlzc3VlaXNzdWVJbmZlcnJlZGVuY2xvc2luZ05hbWVyZXBvcnRUeXBlQXJndW1lbnRJc3N1ZWNoZWNrQm91bmRzSW5GaWVsZGNoZWNrQm91bmRzSW5GdW5jdGlvbk5vZGVQYXJ0c2NoZWNrQm91bmRzSW5GdW5jdGlvbk5vZGVrbGFzc2NoZWNrQm91bmRzSW5NZXRob2RJbnZvY2F0aW9ucmVjZWl2ZXJUeXBlQXJndW1lbnRzbWV0aG9kUGFyYW1ldGVyc2luc3RhbnRpYXRlZE1ldGhvZFBhcmFtZXRlcnNjaGVja0JvdW5kc0luT3V0bGluZWZpbmFsaXplSW5pdGlhbGl6aW5nRm9ybWFsVHlwZVBhcmFtZXRlclNjb3BlS2luZFR5cGVQYXJhbWV0ZXJTY29wZUtpbmQubGlicmFyeVR5cGVQYXJhbWV0ZXJTY29wZUtpbmQuY2xhc3NPck5hbWVkTWl4aW5BcHBsaWNhdGlvblR5cGVQYXJhbWV0ZXJTY29wZUtpbmQuc3RhdGljT3JJbnN0YW5jZU1ldGhvZE9yQ29uc3RydWN0b3JUeXBlUGFyYW1ldGVyU2NvcGVLaW5kLnRvcExldmVsTWV0aG9kY2xhc3NPck5hbWVkTWl4aW5BcHBsaWNhdGlvbmNsYXNzRGVjbGFyYXRpb251bm5hbWVkTWl4aW5BcHBsaWNhdGlvbm5hbWVkTWl4aW5BcHBsaWNhdGlvbmV4dGVuc2lvbkRlY2xhcmF0aW9uc3RhdGljT3JJbnN0YW5jZU1ldGhvZE9yQ29uc3RydWN0b3J0b3BMZXZlbE1ldGhvZGZhY3RvcnlNZXRob2RUeXBlUGFyYW1ldGVyU2NvcGVCdWlsZGVyX2tpbmRfY2hhck9mZnNldF90eXBlVmFyaWFibGVzX2V4dGVuc2lvblRoaXNUeXBlPGxpYnJhcnk+bWFya0FzQ2xhc3NEZWNsYXJhdGlvblVuZXhwZWN0ZWQgZGVjbGFyYXRpb24ga2luZDogbWFya0FzTmFtZWRNaXhpbkFwcGxpY2F0aW9ubWFya0FzTWl4aW5EZWNsYXJhdGlvbm1hcmtBc0V4dGVuc2lvbkRlY2xhcmF0aW9ucmVnaXN0ZXJFeHRlbnNpb25UaGlzVHlwZURlY2xhcmF0aW9uQnVpbGRlci5yZWdpc3RlckV4dGVuc2lvblRoaXNUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgRXh0ZW5zaW9uIHRoaXMgdHlwZSBoYXMgYWxyZWFkeSBiZWVuIHNldC5leHRlbnNpb25UaGlzVHlwZURlY2xhcmF0aW9uQnVpbGRlci5leHRlbnNpb25UaGlzVHlwZSBub3Qgc3VwcG9ydGVkIG9uIERlY2xhcmF0aW9uQnVpbGRlci5leHRlbnNpb25UaGlzVHlwZSBoYXMgbm90IGJlZW4gc2V0IG9uIG5hbWVPclF1YWxpZmllZGVuZENoYXJPZmZzZXRidWlsZEludmFsaWRUeXBlRGVjbGFyYXRpb25CdWlsZGVyKDpraW5kPSxuYW1lPUZpZWxkSW5mb0ltcGxlbWVudGF0aW9uSW5mb1Bvc3Rwb25lZFByb2JsZW1jb21wdXRlTGlicmFyeVVyaW5vIGxpYnJhcnkgcGFyZW50ZXh0cmFjdE5hbWVmYXN0YS5zb3VyY2VfbG9hZGVySW5zdHJ1bWVudGF0aW9uU2hhZG93VHlwZUluZmVyZW5jZUVuZ2luZUNvbGxlY3Rpb25UcmFuc2Zvcm1lclNldExpdGVyYWxUcmFuc2Zvcm1lckNsYXNzTWVtYmVyUGFyc2VyRGlldExpc3RlbmVyRGlldFBhcnNlck91dGxpbmVCdWlsZGVyaW5zdHJ1bWVudGF0aW9uY29sbGVjdGlvblRyYW5zZm9ybWVyc2V0TGl0ZXJhbFRyYW5zZm9ybWVyc3VwcHJlc3NMZXhpY2FsRXJyb3Jzc3ludGhlc2l6ZVNvdXJjZUZvck1pc3NpbmdGaWxlaGFzU2NoZW1lemVyb1Rlcm1pbmF0ZWRCeXRlc3Jhd0J5dGVzZ2V0U291cmNlbmV3UGF0aFNlZ21lbnRzLXBhdGNoaW1wb3J0ICdkYXJ0Ol9pbnRlcm5hbCc7CmltcG9ydCAnZGFydDphc3luYyc7CgpleHBvcnQgJ2RhcnQ6YXN5bmMnIHNob3cgRnV0dXJlLCBTdHJlYW07CgpwcmludChvYmplY3QpIHt9CgpjbGFzcyBJdGVyYXRvciB7fQoKY2xhc3MgSXRlcmFibGUge30KCmNsYXNzIExpc3QgZXh0ZW5kcyBJdGVyYWJsZSB7CiAgZmFjdG9yeSBMaXN0LnVubW9kaWZpYWJsZShlbGVtZW50cykgPT4gbnVsbDsKfQoKY2xhc3MgTWFwIGV4dGVuZHMgSXRlcmFibGUgewogIGZhY3RvcnkgTWFwLnVubW9kaWZpYWJsZShvdGhlcikgPT4gbnVsbDsKfQoKY2xhc3MgTm9TdWNoTWV0aG9kRXJyb3IgewogIE5vU3VjaE1ldGhvZEVycm9yLndpdGhJbnZvY2F0aW9uKHJlY2VpdmVyLCBpbnZvY2F0aW9uKTsKfQoKY2xhc3MgTnVsbCB7fQoKY2xhc3MgT2JqZWN0IHsKICBub1N1Y2hNZXRob2QoaW52b2NhdGlvbikgPT4gbnVsbDsKfQoKY2xhc3MgU3RyaW5nIHt9CgpjbGFzcyBTeW1ib2wge30KCmNsYXNzIFNldCB7fQoKY2xhc3MgVHlwZSB7fQoKY2xhc3MgX0ludm9jYXRpb25NaXJyb3IgewogIF9JbnZvY2F0aW9uTWlycm9yLl93aXRoVHlwZShfbWVtYmVyTmFtZSwgX3R5cGUsIF90eXBlQXJndW1lbnRzLAogICAgICBfcG9zaXRpb25hbEFyZ3VtZW50cywgX25hbWVkQXJndW1lbnRzKTsKfQoKY2xhc3MgYm9vbCB7fQoKY2xhc3MgZG91YmxlIGV4dGVuZHMgbnVtIHt9CgpjbGFzcyBpbnQgZXh0ZW5kcyBudW0ge30KCmNsYXNzIG51bSB7fQoKY2xhc3MgX1N5bmNJdGVyYWJsZSB7fQoKY2xhc3MgX1N5bmNJdGVyYXRvciB7CiAgdmFyIF9jdXJyZW50OwogIHZhciBfeWllbGRFYWNoSXRlcmFibGU7Cn0KCmNsYXNzIEZ1bmN0aW9uIHt9Cl9hc3luY0Vycm9yV3JhcHBlckhlbHBlcihjb250aW51YXRpb24pIHt9CgpfYXN5bmNTdGFja1RyYWNlSGVscGVyKGFzeW5jX29wKSB7fQoKX2FzeW5jVGhlbldyYXBwZXJIZWxwZXIoY29udGludWF0aW9uKSB7fQoKX2F3YWl0SGVscGVyKG9iamVjdCwgdGhlbkNhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBhd2FpdGVyKSB7fQoKX2NvbXBsZXRlT25Bc3luY1JldHVybihjb21wbGV0ZXIsIHZhbHVlKSB7fQoKY2xhc3MgX0FzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXIgewogIGFkZChldmVudCkge30KCiAgYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpIHt9CgogIGFkZFN0cmVhbShzdHJlYW0pIHt9CgogIGNsb3NlKCkge30KCiAgZ2V0IHN0cmVhbSA9PiBudWxsOwp9CgpjbGFzcyBDb21wbGV0ZXIgewogIGZhY3RvcnkgQ29tcGxldGVyLnN5bmMoKSA9PiBudWxsOwoKICBnZXQgZnV0dXJlOwoKICBjb21wbGV0ZShbdmFsdWVdKTsKCiAgY29tcGxldGVFcnJvcihlcnJvciwgW3N0YWNrVHJhY2VdKTsKfQoKY2xhc3MgRnV0dXJlIHsKICBmYWN0b3J5IEZ1dHVyZS5taWNyb3Rhc2soY29tcHV0YXRpb24pID0+IG51bGw7Cn0KCmNsYXNzIEZ1dHVyZU9yIHsKfQoKY2xhc3MgX0FzeW5jQXdhaXRDb21wbGV0ZXIgaW1wbGVtZW50cyBDb21wbGV0ZXIgewogIGdldCBmdXR1cmUgPT4gbnVsbDsKCiAgY29tcGxldGUoW3ZhbHVlXSkge30KCiAgY29tcGxldGVFcnJvcihlcnJvciwgW3N0YWNrVHJhY2VdKSB7fQp9CgpjbGFzcyBTdHJlYW0ge30KCmNsYXNzIF9TdHJlYW1JdGVyYXRvciB7CiAgZ2V0IGN1cnJlbnQgPT4gbnVsbDsKCiAgbW92ZU5leHQoKSB7fQoKICBjYW5jZWwoKSB7fQp9CmNsYXNzIF9Vbm1vZGlmaWFibGVTZXQgewogIGZpbmFsIE1hcCBfbWFwOwogIGNvbnN0IF9Vbm1vZGlmaWFibGVTZXQodGhpcy5fbWFwKTsKfQpjbGFzcyBTeW1ib2wgewogIGNvbnN0IFN5bWJvbChTdHJpbmcgbmFtZSk7Cn0KZGFydDp0eXBlZF9kYXRhY2xhc3MgRW5kaWFuIHsKICBzdGF0aWMgY29uc3QgRW5kaWFuIGxpdHRsZSA9IG51bGw7CiAgc3RhdGljIGNvbnN0IEVuZGlhbiBiaWcgPSBudWxsOwogIHN0YXRpYyBmaW5hbCBFbmRpYW4gaG9zdCA9IG51bGw7Cn0KLyogb2Zmc2V0SW5CeXRlc2xpc3RlbmVycGFyc2VVbml0Y3JlYXRlRGlldExpc3RlbmVyZGlldExpc3RlbmVyY3VycmVudERlY2xhcmF0aW9uZGVidWdFeHByZXNzaW9uIGluIGRlYnVnRXhwcmNyZWF0ZUxpc3RlbmVyUmVzb2x2ZWQgcGFydHNBcHBsaWVkIHBhdGNoZXNleHBvcnRlZXNzb3VyY2VMaWJyYXJ5Ym90aHdhc0NoYW5nZWRleHBvcnRlZUNvbXB1dGVkIGxpYnJhcnkgc2NvcGVzZGVidWdQcmludEV4cG9ydHMgZXhwb3J0cyAgdHlwZXNmb3JtYWxDb3VudEZpbmFsaXplZCAgaW5pdGlhbGl6aW5nIGZvcm1hbHNGaW5pc2hlZCBkZWZlcnJlZCBsb2FkIHRlYXJvZmZzIEZpbmlzaGVkIGZvcndhcmRlcnMgZm9yICBwcm9jZWR1cmVzIGNvbnN0cnVjdG9ycyB0eXBlLXZhcmlhYmxlIGJvdW5kc0NvbXB1dGVkIGRlZmF1bHQgdHlwZXMgZm9yICB0eXBlIHZhcmlhYmxlc0ZpbmlzaGVkICBuYXRpdmUgbWV0aG9kcyBwYXRjaCBtZXRob2RzY2hlY2tPYmplY3RDbGFzc0hpZXJhcmNoeWhhbmRsZUhpZXJhcmNoeUN5Y2xlc2JsYWNrTGlzdGVkQ2xhc3Nlc3RvcG9sb2dpY2FsbHlTb3J0ZWRDbGFzc2VzcHJldmlvdXNXb3JrTGlzdGRpcmVjdFN1cGVydHlwZXNhbGxTdXBlcnR5cGVzUHJvY2Vzc2VkY2hlY2tDbGFzc1N1cGVydHlwZXNjbGFzc2VzV2l0aEN5Y2xlc0NoZWNrZWQgY2xhc3MgaGllcmFyY2h5aXNDbGFzc0J1aWxkZXJuYW1lVG9FeHBvcnRzZXJyb3JFeHBvcnRzbmFtZVRvSW1wb3J0c2Vycm9ySW1wb3J0c0NoZWNrZWQgaW1wb3J0cyBhbmQgZXhwb3J0cyBmb3IgZHVwbGljYXRlIG5hbWVzQnVpbHQgY29tcG9uZW50Y29tcHV0ZUZ1bGxDb21wb25lbnRhbWJpZ3VvdXNUeXBlc1JlY29yZHNyZWNvcmRoYW5kbGVBbWJpZ3VvdXNTdXBlcnR5cGVzQ29tcHV0ZWQgY2xhc3MgaGllcmFyY2h5aWdub3JlQW1iaWd1b3VzU3VwZXJ0eXBlc0NvbXB1dGVkIGNvcmUgdHlwZXNzb3VyY2VDbGFzc2VzQ2hlY2tlZCBzdXBlcnR5cGVzQ2hlY2tlZCB0eXBlIGFyZ3VtZW50cyBvZiBzdXBlcnMgYWdhaW5zdCB0aGUgYm91bmRzb3ZlcnJpZGVDaGVja3NDaGVja2VkICBvdmVycmlkZXNmaW5pc2hUb3BMZXZlbEluaXRpYWxpemluZ0Zvcm1hbHNGaW5pc2hlZCBpbml0aWFsaXppbmcgZm9ybWFsc2RlbGF5ZWRNZW1iZXJDaGVja3NjaGFuZ2VkQ2xhc3Nlc0NvbXB1dGVkICBjb21iaW5lZCBtZW1iZXIgc2lnbmF0dXJlc1VwZGF0ZWQgIGNsYXNzZXMgaW4ga2VybmVsIGhpZXJhcmNoeUNoZWNrZWQgcmVkaXJlY3RpbmcgZmFjdG9yaWVzQWRkZWQgbm9TdWNoTWV0aG9kIGZvcndhcmRlcnNjaGVja01peGluRGVjbGFyYXRpb25jaGVja01peGluQXBwbGljYXRpb25DaGVja2VkIG1peGluIGRlY2xhcmF0aW9uIGFwcGxpY2F0aW9uc2hpZXJhcmNoeUJ1aWxkZXJCdWlsdCBjbGFzcyBoaWVyYXJjaHlwcmVwYXJlVG9wTGV2ZWxhbGxJbXBsaWNpdGx5VHlwZWRGaWVsZHNpbmZlclR5cGVpc1R5cGVJbmZlcmVuY2VQcmVwYXJlZFBlcmZvcm1lZCB0b3AgbGV2ZWwgaW5mZXJlbmNldHJhbnNmb3JtZXJjcmVhdGVCb2R5QnVpbGRlckZvckZpZWxkQW1iaWd1b3VzVHlwZXNSZWNvcmRkZWZhdWx0RGFydENvcmVTb3VyY2VkZWZhdWx0RGFydEFzeW5jU291cmNlZGVmYXVsdERhcnRDb2xsZWN0aW9uU291cmNlZGVmYXVsdERhcnRJbnRlcm5hbFNvdXJjZWRlZmF1bHREYXJ0VHlwZWREYXRhU291cmNlZmFzdGEuY29uc3RhbnRfZXZhbHVhdG9yY29uc3RhbnRfY29sbGVjdGlvbl9idWlsZGVycy5kYXJ0SmF2YVNjcmlwdEludENvbnN0YW50YmlnSW50VmFsdWVmcm9tRG91YmxlZnJvbUJpZ0ludHRvRG91YmxlZnJvbVVJbnQ2NHRvVW5zaWduZWRDb25zdGFudHNUcmFuc2Zvcm1lcmNvbnN0YW50RXZhbHVhdG9ya2VlcEZpZWxkc2tlZXBWYXJpYWJsZXNldmFsdWF0ZUFubm90YXRpb25zZXJyb3JSZXBvcnRlcmNvbnZlcnRMaWJyYXJ5dHJhbnNmb3JtQW5ub3RhdGlvbnN3aXRoTmV3RW52aXJvbm1lbnR0cmFuc2Zvcm1FeHByZXNzaW9uc2V2YWx1YXRlQW5kVHJhbnNmb3JtV2l0aENvbnRleHRwb3NpdGlvbmFsUGFyYW1ldGVyQ291bnRldmFsdWF0ZVdpdGhDb250ZXh0YWRkVmFyaWFibGVWYWx1ZW1ha2VDb25zdGFudEV4cHJlc3Npb25zaG91bGRJbmxpbmV0cmVlQ29udGV4dHJ1bkluc2lkZUNvbnRleHRDb25zdGFudEV2YWx1YXRvcnVubW9kaWZpYWJsZVNldE1hcGlzSW5zdGFudGlhdGVkY2Fub25pY2FsaXphdGlvbkNhY2hlbm9kZUNhY2hlcHJpbWl0aXZlRXF1YWxDYWNoZW51bGxDb25zdGFudHRydWVDb25zdGFudGZhbHNlQ29uc3RhbnRjb250ZXh0Q2hhaW5pbnN0YW5jZUJ1aWxkZXJyZXBsYWNlbWVudE5vZGVzbG93ZXJlZHNlZW5VbmV2YWx1YXRlZENoaWxkbGF6eURlcHRocHVibGljSWRlbnRpZmllclJlZ0V4cF5bYS16QS1aJF1bYS16QS1aMC05XyRdKiRub25Vc2FibGVLZXl3b3Jkc05vICdlbnZpcm9ubWVudERlZmluZXMnIHBhc3NlZCB0byB0aGUgY29uc3RhbnQgZXZhbHVhdG9yIGJ1dCB0aGUgQ29uc3RhbnRzQmFja2VuZCBkb2VzIG5vdCBzdXBwb3J0IHVuZXZhbHVhdGVkIGNvbnN0YW50cy5fVW5tb2RpZmlhYmxlU2V0X21hcHNob3VsZEJlVW5ldmFsdWF0ZWR0YXJnZXRpbmdKYXZhU2NyaXB0Z2V0RmlsZU9mZnNldF9ldmFsdWF0ZVN1YmV4cHJlc3Npb25sb2NhdGVkTWVzc2FnZUFjdHVhbEVycm9yY29udGV4dE1lc3NhZ2VzaW52YWxpZHJlcG9ydEludmFsaWRFeHByZXNzaW9ucmVwb3J0SW52YWxpZHVuZXZhbHVhdGVkZXh0cmFjdGVudGVyTGF6eWxlYXZlTGF6eXVubG93ZXJ3YXNVbmV2YWx1YXRlZF9ldmFsdWF0ZU51bGxhYmxlU3ViZXhwcmVzc2lvbmZ1bnB1c2hDb250ZXh0cG9wQ29udGV4dHJ1bkluc2lkZUNvbnRleHRJZk5vQ29udGV4dGNvbnRleHROb2RlQ29uc3RhbnQgZXZhbHVhdGlvbiBoYXMgbm8gc3VwcG9ydCBmb3IgbWFrZUJvb2xDb25zdGFudG1ha2VEb3VibGVDb25zdGFudGV2YWx1YXRlRGFydFR5cGVpc0Zpbml0ZXRydW5jYXRlVG9Eb3VibGVhZGRTcHJlYWRzZXRfaXNTeW1ib2xOb24tY29uc3QgY29uc3RydWN0b3IgaW52b2NhdGlvbi5Db25zdHJ1Y3RvciAiIiBoYXMgbm9uLXRyaXZpYWwgYm9keSAiIGJlbG9uZ3MgdG8gYWJzdHJhY3QgY2xhc3MgInBvc2l0aW9uYWxzZXZhbHVhdGVQb3NpdGlvbmFsQXJndW1lbnRzZXZhbHVhdGVOYW1lZEFyZ3VtZW50c3VuZXZhbHVhdGVkQXJndW1lbnRzbmFtZVZhbHVlaXNWYWxpZFN5bWJvbE5hbWVldmFsdWF0ZVR5cGVBcmd1bWVudHN3aXRoTmV3SW5zdGFuY2VCdWlsZGVyaGFuZGxlQ29uc3RydWN0b3JJbnZvY2F0aW9uYnVpbGRVbmV2YWx1YXRlZEluc3RhbmNlYnVpbGRJbnN0YW5jZWNoZWNrQXNzZXJ0c2V0RmllbGRWYWx1ZWlzVmFsaWRQdWJsaWNJZGVudGlmaWVyaGFzTWF0Y2hwb3NpdGlvbmFsQXJndW1lbnRzbmFtZWRBcmd1bWVudHNhZGRUeXBlUGFyYW1ldGVyVmFsdWVpbml0ZXZhbHVhdGVTdXBlclR5cGVBcmd1bWVudHNObyBzdXBwb3J0IGZvciBoYW5kbGluZyBpbml0aWFsaXplciBvZiB0eXBlIHVuZXZhbHVhdGVkVW5yZWFkQ29uc3RhbnRzb3Bpc1plcm9vdGhlclZhbHVldG9JbnRldmFsdWF0ZUJpbmFyeUJpdE9wZXJhdGlvbm5lZ2F0aXZlaXNOZWdhdGl2ZWV2YWx1YXRlQmluYXJ5U2hpZnRPcGVyYXRpb25uZWdhdGl2ZVJlY2VpdmVyZXZhbHVhdGVCaW5hcnlOdW1lcmljT3BlcmF0aW9uSW5zdGFuY2UgZmllbGQgYWNjZXNzIG91dHNpZGUgY29uc3RydWN0b3JDb3VsZCBub3QgZXZhbHVhdGUgZmllbGQgZ2V0ICBvbiBpbmNvbXBsZXRlIGluc3RhbmNlbG9va3VwVmFyaWFibGVWYXJpYWJsZSBnZXQgb2YgYSBub24tY29uc3QgdmFyaWFibGUuTm8gc3VwcG9ydCBmb3IgIGluIGEgc3RhdGljLWdldC5jb25jYXRlbmF0ZWRib29sQ29uc3RhbnRpbnRWYWx1ZWVuc3VyZUlzU3VidHlwZWlzU3VidHlwZWxpYnJhcnlPZmV2YWx1YXRlRGFydFR5cGVzVGhlIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50cyBzdXBwbGllZCBpbiB0aGUgcGFydGlhbCBpbnN0YW50aWF0aW9uIGRvZXMgbm90IG1hdGNoIHRoZSBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHMgb2YgdGhlIE9ubHkgdGVhci1vZmYgY29uc3RhbnRzIGNhbiBiZSBwYXJ0aWFsbHkgaW5zdGFudGlhdGVkLmhhc1ByaW1pdGl2ZUVxdWFsY2xhc3NIYXNQcmltaXRpdmVFcXVhbGNhY2hlZGNvbnN0YW50VHlwZXBhaXJwb3NpdGlvbmFsQXJnc25hbWVkQXJnc29sZEVudjIxNDc0ODM2NDh0b1NpZ25lZFVuZXhwZWN0ZWQgYmluYXJ5IG51bWVyaWMgb3BlcmF0aW9uICdJbnN0YW5jZUJ1aWxkZXJldmFsdWF0b3JFdmFsdWF0aW9uRW52aXJvbm1lbnRfdmFyaWFibGVzX3VucmVhZFVuZXZhbHVhdGVkVmFyaWFibGVzbG9va3VwUGFyYW1ldGVyVmFsdWVfQWJvcnREdWVUb0Vycm9yX0Fib3J0RHVlVG9JbnZhbGlkRXhwcmVzc2lvbkVycm9yUmVwb3J0ZXJTaW1wbGVFcnJvclJlcG9ydGVyX3JlcG9ydCBDb25zdGFudCBldmFsdWF0aW9uIGVycm9yOiBJc0luc3RhbnRpYXRlZFZpc2l0b3JfYXZhaWxhYmxlVmFyaWFibGVzQSB2aXNpdG9yIG1ldGhvZCBzZWVtcyB0byBiZSB1bmltcGxlbWVudGVkIV9MaXN0T3JTZXRDb25zdGFudEJ1aWxkZXJtYWtlTGl0ZXJhbGFkZENvbnN0YW50c3ByZWFkRXhwcmVzc2lvbnNwcmVhZExpc3RDb25zdGFudEJ1aWxkZXJsYXN0UGFydE5vbi1jb25zdGFudCBpbiBjb25zdGFudCBsaXN0U2V0Q29uc3RhbnRCdWlsZGVyTm9uLWNvbnN0YW50IGluIGNvbnN0YW50IHNldE1hcENvbnN0YW50QnVpbGRlcnNlZW5LZXlza2V5Q29udGV4dHZhbHVlQ29udGV4dE5vbi1jb25zdGFudCBpbiBjb25zdGFudCBtYXB0cmFuc2Zvcm1Db21wb25lbnRjb25zdGFudHNUcmFuc2Zvcm1lcl9pc0Zvcm1hbFBhcmFtZXRlcmZhc3RhLmtlcm5lbF9jb25zdGFudHNwcmVkaWNhdGVleGNsdWRlVXJpVG9Tb3VyY2VsaWJyYXJpZXNUb1dyaXRla2VybmVsLmNoZWNrc1ZlcmlmaWNhdGlvbkVycm9yOiBWZXJpZmljYXRpb24gZXJyb3I6VmVyaWZpY2F0aW9uIGVycm9yOiBDb250ZXh0OiAnJy4KTm9kZTogJ1R5cGVkZWZTdGF0ZVR5cGVkZWZTdGF0ZS5Eb25lVHlwZWRlZlN0YXRlLkJlaW5nQ2hlY2tlZERvbmVCZWluZ0NoZWNrZWR0eXBlUGFyYW1ldGVyc0luU2NvcGV0eXBlZGVmU3RhdGVjbGFzc1R5cGVQYXJhbWV0ZXJzQXJlSW5TY29wZWN1cnJlbnRNZW1iZXJjdXJyZW50UGFyZW50ZW50ZXJQYXJlbnRJbmNvcnJlY3QgcGFyZW50IHBvaW50ZXIgb24gIGV4cGVjdGVkICcnLCBidXQgZm91bmQ6ICdvbGRQYXJlbnRleGl0UGFyZW50dW5kZWNsYXJlVmFyaWFibGV2aXNpdFdpdGhMb2NhbFNjb3BlZGVjbGFyZU1lbWJlck1lbWJlciAnJyBoYXMgYmVlbiBkZWNsYXJlZCBtb3JlIHRoYW4gb25jZS51bmRlY2xhcmVNZW1iZXJWYXJpYWJsZSAnJyBkZWNsYXJlZCBtb3JlIHRoYW4gb25jZS5kZWNsYXJlVHlwZVBhcmFtZXRlcnNNaXNzaW5nIGJvdW5kIGZvciB0eXBlIHBhcmFtZXRlciAnVHlwZSBwYXJhbWV0ZXIgJycgcmVkZWNsYXJlZC51bmRlY2xhcmVUeXBlUGFyYW1ldGVyc2NoZWNrVmFyaWFibGVJblNjb3BlJyB1c2VkIG91dCBvZiBzY29wZS5UeXBlZGVmICdjaGVja1R5cGVkZWYnIHJlZmVycyB0byBpdHNlbGZzYXZlZFR5cGVQYXJhbWV0ZXJzc2F2ZWRQYXJlbnRUaGUgdG9wLWxldmVsIGZpZWxkICcnIHNob3VsZCBiZSBzdGF0aWNUaGUgY29uc3QgZmllbGQgJ3NhdmVkSW5DYXRjaEJsb2NrTmFtZWQgcGFyYW1ldGVycyBhcmUgbm90IHNvcnRlZCBvbiBmdW5jdGlvbiB0eXBlIChSZXRocm93IG11c3QgYmUgaW5zaWRlIGEgQ2F0Y2ggYmxvY2suVmFyaWFibGVEZWNsYXJhdGlvbiBtdXN0IGJlIGEgZGlyZWN0IGNoaWxkIG9mIGEgQmxvY2ssIG5vdCBTdGF0aWNHZXQgd2l0aG91dCB0YXJnZXQuU3RhdGljR2V0IG9mICcnIHdpdGhvdXQgZ2V0dGVyLicgdGhhdCdzIGFuIGluc3RhbmNlIG1lbWJlci5TdGF0aWNTZXQgd2l0aG91dCB0YXJnZXQuU3RhdGljU2V0IHRvICcnIHdpdGhvdXQgc2V0dGVyLmNoZWNrVGFyZ2V0ZWRJbnZvY2F0aW9uU3RhdGljSW52b2NhdGlvbiBvZiAnQ29uc3RhbnQgU3RhdGljSW52b2NhdGlvbiBvZiAnJyB0aGF0IGlzbid0IGEgY29uc3QgZXh0ZXJuYWwgZmFjdG9yeS4gd2l0aG91dCB0YXJnZXQuIHdpdGhvdXQgZnVuY3Rpb24uIHdpdGggaW5jb21wYXRpYmxlIGFyZ3VtZW50cyBmb3IgJ2V4cGVjdGVkVHlwZVBhcmFtZXRlcnMgd2l0aCB3cm9uZyBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHMgZm9yICdEaXJlY3RQcm9wZXJ0eUdldCB3aXRob3V0IHRhcmdldC5EaXJlY3RQcm9wZXJ0eUdldCBvZiAnJyB0aGF0IGlzbid0IGFuIGluc3RhbmNlIG1lbWJlci5EaXJlY3RQcm9wZXJ0eVNldCB3aXRob3V0IHRhcmdldC5EaXJlY3RQcm9wZXJ0eVNldCBvZiAnJyB0aGF0IGlzIHN0YXRpYy5EaXJlY3RNZXRob2RJbnZvY2F0aW9uIHdpdGhvdXQgcmVjZWl2ZXIuQ29uc3RydWN0b3JJbnZvY2F0aW9uIG9mIGFic3RyYWN0IGNsYXNzLkNvbnN0YW50IENvbnN0cnVjdG9ySW52b2NhdGlvbiBmbyAnJyB0aGF0IGlzbid0IGNvbnN0Lk5vIHRhcmdldC5UYXJnZXQgaGFzIG5vIHBhcmVudC5Td2l0Y2ggY2FzZSBpc24ndCBjaGlsZCBvZiBwYXJlbnQuRGFuZ2xpbmcgcmVmZXJlbmNlIHRvICcnLCBwYXJlbnQgaXM6ICcnIHJlZmVyZW5jZWQgb3V0IG9mIHNjb3BlLCBwYXJlbnQgaXM6ICcnIHJlZmVyZW5jZWQgZnJvbSBzdGF0aWMgY29udGV4dCwgcGFyZW50IGlzOiAnVHlwZSAgcHJvdmlkZXMgIHR5cGUgYXJndW1lbnRzIGJ1dCB0aGUgY2xhc3MgZGVjbGFyZXMgcGFyYW1ldGVycy5UaGUgdHlwZWRlZiB0eXBlICB0eXBlIGFyZ3VtZW50cyBidXQgdGhlIHR5cGVkZWYgZGVjbGFyZXNDaGVja1BhcmVudFBvaW50ZXJzUGFyZW50IHBvaW50ZXIgb24gJ2lzICdidXQgc2hvdWxkIGJlICdjaGVja0luaXRpYWxpemVyc1R5cGVTY2hlbWFQcmludGVyX0lzS25vd25WaXNpdG9ycGFyYW1ldGVyVHlwZW5hbWVkUGFyYW1ldGVyVHlwZWlzS25vd25zY2hlbWF0eXBlU2NoZW1hVG9TdHJpbmdJbnN0cnVtZW50YXRpb25WYWx1ZUZvck1lbWJlckluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZUluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZUFyZ3NJbmZlcmVuY2VIZWxwZXJJbmNsdWRlc1R5cGVQYXJhbWV0ZXJzTm9uQ292YXJpYW50bHlUeXBlSW5mZXJlbmNlRW5naW5lVHlwZVByb21vdGVySW1wbGdyZWF0ZXN0Q2xvc3VyZVR5cGVTY2hlbWFFbnZpcm9ubWVudGdldFBvc2l0aW9uYWxQYXJhbWV0ZXJUeXBlQ29udHJvbEZsb3dNYXBFbnRyeUZvckVsZW1lbnRGb3JJbkVsZW1lbnRGb3JJbk1hcEVudHJ5Rm9yTWFwRW50cnlJZkVsZW1lbnRJZk1hcEVudHJ5Y29udmVydFRvRWxlbWVudG1ha2VMZXRpbmZlcmVuY2VfdmlzaXRvci5kYXJ0aW5mZXJyZWRfdHlwZV92aXNpdG9yLmRhcnRDbGFzc0luZmVyZW5jZUluZm9uZWVkc0NoZWNrVmlzaXRvcmdldHRlcnNBbmRNZXRob2RzQXJndW1lbnRzSnVkZ21lbnRfZXh0ZW5zaW9uVHlwZVBhcmFtZXRlckNvdW50X2V4dGVuc2lvblR5cGVBcmd1bWVudENvdW50X2V4cGxpY2l0VHlwZUFyZ3VtZW50Q291bnRmb3JFeHRlbnNpb25NZXRob2RleHRlbnNpb25UeXBlUGFyYW1ldGVyQ291bnR0eXBlUGFyYW1ldGVyQ291bnRleHRlbnNpb25UeXBlQXJndW1lbnRzRXh0ZW5zaW9uIHR5cGUgYXJndW1lbnRzIG11c3QgYmUgZW1wdHkgb3IgY29tcGxldGUucG9zaXRpb25hbEp1ZGdtZW50c19ub3JtYWxpemVUeXBlQXJndW1lbnRzc2V0Tm9uSW5mZXJyYWJsZUFyZ3VtZW50VHlwZXNyZW1vdmVOb25JbmZlcnJhYmxlQXJndW1lbnRUeXBlc0Fzc2VydEluaXRpYWxpemVySnVkZ21lbnRqdWRnbWVudGFjY2VwdEluZmVyZW5jZXZpc2l0QXNzZXJ0SW5pdGlhbGl6ZXJKdWRnbWVudEFzc2VydFN0YXRlbWVudEp1ZGdtZW50Y29uZGl0aW9uSnVkZ21lbnRtZXNzYWdlSnVkZ21lbnR2aXNpdEFzc2VydFN0YXRlbWVudEp1ZGdtZW50QmxvY2tKdWRnbWVudGp1ZGdtZW50c3Zpc2l0QmxvY2tKdWRnbWVudENhc2NhZGVKdWRnbWVudG5leHRDYXNjYWRldGFyZ2V0SnVkZ21lbnRjYXNjYWRlSnVkZ21lbnRzc2VjdGlvbm5ld0Nhc2NhZGV0eXBlQ29udGV4dHZpc2l0Q2FzY2FkZUp1ZGdtZW50Q29tcGxleEFzc2lnbm1lbnRKdWRnbWVudGNvbWJpbmVybnVsbEF3YXJlQ29tYmluZXJpc1Bvc3RJbmNEZWNpc1ByZUluY0RlY19nZXRUb1N0cmluZ1BhcnRzZGVzdWdhcmVkPXJlYWQ9cmhzPXdyaXRlPWNvbWJpbmVyPW51bGxBd2FyZUNvbWJpbmVyPWlzUG9zdEluY0RlYz10cnVlaXNQcmVJbmNEZWM9dHJ1ZV9pbmZlclJoc2luZmVycmVycmVhZFR5cGV3cml0ZUNvbnRleHRjb21iaW5lclRhcmdldE9iamVjdEFjY2Vzc1RhcmdldEtpbmQudW5yZXNvbHZlZGNvbWJpbmVkVHlwZWZpbmRNZXRob2RJbnZvY2F0aW9uTWVtYmVyaW5zdHJ1bWVudGVkaXNDYWxsRnVuY3Rpb25pc092ZXJsb2FkZWRBcml0aG1ldGljT3BlcmF0b3JBbmRUeXBlcmhzVHlwZWNvbWJpbmVyVHlwZWdldEZ1bmN0aW9uVHlwZXJoc1Jlc3VsdGluZmVyRXhwcmVzc2lvbmV4cGVjdGVkVHlwZWVuc3VyZUFzc2lnbmFibGVjaGVja0tpbmRwcmVDaGVja0ludm9jYXRpb25Db250cmF2YXJpYW5jZXJlcGxhY2VkQ29tYmluZXJoYW5kbGVJbnZvY2F0aW9uQ29udHJhdmFyaWFuY2VyZXBsYWNlZENvbWJpbmVyMl9zdG9yZUxldFR5cGVpc1ZvaWRBbGxvd2VkcmVwbGFjZWRSaHNlcXVhbHNJbnZvY2F0aW9uZ2V0U3RhbmRhcmRVcHBlckJvdW5kQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudFdpdGhSZWNlaXZlcnJlY2VpdmVyPWlzU3VwZXI9dHJ1ZV9pbmZlclJlY2VpdmVyQ29udGludWVTd2l0Y2hKdWRnbWVudHZpc2l0Q29udGludWVTd2l0Y2hKdWRnbWVudERlZmVycmVkQ2hlY2tKdWRnbWVudHZpc2l0RGVmZXJyZWRDaGVja0p1ZGdtZW50RG9KdWRnbWVudHZpc2l0RG9KdWRnbWVudERvdWJsZUp1ZGdtZW50dmlzaXREb3VibGVKdWRnbWVudEV4cHJlc3Npb25KdWRnbWVudEVtcHR5U3RhdGVtZW50SnVkZ21lbnR2aXNpdEVtcHR5U3RhdGVtZW50SnVkZ21lbnRFeHByZXNzaW9uU3RhdGVtZW50SnVkZ21lbnR2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnRKdWRnbWVudEZhY3RvcnlDb25zdHJ1Y3Rvckludm9jYXRpb25KdWRnbWVudGFyZ3VtZW50SnVkZ21lbnRzdmlzaXRGYWN0b3J5Q29uc3RydWN0b3JJbnZvY2F0aW9uSnVkZ21lbnRTaGFkb3dGaWVsZEluaXRpYWxpemVydmlzaXRTaGFkb3dGaWVsZEluaXRpYWxpemVyRm9ySnVkZ21lbnR1cGRhdGVKdWRnbWVudHN2aXNpdEZvckp1ZGdtZW50RnVuY3Rpb25Ob2RlSnVkZ21lbnRGdW5jdGlvbkRlY2xhcmF0aW9uSnVkZ21lbnRfaGFzSW1wbGljaXRSZXR1cm5UeXBldmFyaWFibGVKdWRnbWVudGZ1bmN0aW9uSnVkZ21lbnR2aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb25KdWRnbWVudHNldEhhc0ltcGxpY2l0UmV0dXJuVHlwZUludmFsaWRTdXBlckluaXRpYWxpemVySnVkZ21lbnRhcmd1bWVudHNKdWRnbWVudHZpc2l0SW52YWxpZFN1cGVySW5pdGlhbGl6ZXJKdWRnbWVudElmTnVsbEp1ZGdtZW50bGVmdEp1ZGdtZW50cmlnaHRKdWRnbWVudHZpc2l0SWZOdWxsSnVkZ21lbnRJZkp1ZGdtZW50dmlzaXRJZkp1ZGdtZW50SWxsZWdhbEFzc2lnbm1lbnRKdWRnbWVudHZpc2l0SWxsZWdhbEFzc2lnbm1lbnRKdWRnbWVudEluZGV4QXNzaWdubWVudEp1ZGdtZW50X2dldEludm9jYXRpb25Bcmd1bWVudHNpbmRleD12aXNpdEluZGV4QXNzaWdubWVudEp1ZGdtZW50SW5pdGlhbGl6ZXJKdWRnbWVudEludEp1ZGdtZW50YXNEb3VibGVuZWdhdGVkZG91YmxlVmFsdWV2aXNpdEludEp1ZGdtZW50U2hhZG93TGFyZ2VJbnRMaXRlcmFsYXNJbnQ2NHZpc2l0U2hhZG93TGFyZ2VJbnRMaXRlcmFsU2hhZG93SW52YWxpZEluaXRpYWxpemVydmlzaXRTaGFkb3dJbnZhbGlkSW5pdGlhbGl6ZXJTaGFkb3dJbnZhbGlkRmllbGRJbml0aWFsaXplcnZpc2l0U2hhZG93SW52YWxpZEZpZWxkSW5pdGlhbGl6ZXJMaXN0TGl0ZXJhbEp1ZGdtZW50dmlzaXRMaXN0TGl0ZXJhbEp1ZGdtZW50U2V0TGl0ZXJhbEp1ZGdtZW50dmlzaXRTZXRMaXRlcmFsSnVkZ21lbnRNYXBMaXRlcmFsSnVkZ21lbnR2aXNpdE1hcExpdGVyYWxKdWRnbWVudE1ldGhvZEludm9jYXRpb25KdWRnbWVudF9pc0ltcGxpY2l0Q2FsbHZpc2l0TWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50TmFtZWRGdW5jdGlvbkV4cHJlc3Npb25KdWRnbWVudHZpc2l0TmFtZWRGdW5jdGlvbkV4cHJlc3Npb25KdWRnbWVudE51bGxBd2FyZU1ldGhvZEludm9jYXRpb25KdWRnbWVudF9kZXN1Z2FyZWRJbnZvY2F0aW9udmlzaXROdWxsQXdhcmVNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnROdWxsQXdhcmVQcm9wZXJ0eUdldEp1ZGdtZW50X2Rlc3VnYXJlZEdldHJlY2VpdmVySnVkZ21lbnR2aXNpdE51bGxBd2FyZVByb3BlcnR5R2V0SnVkZ21lbnRQcm9wZXJ0eUFzc2lnbm1lbnRKdWRnbWVudG51bGxBd2FyZUd1YXJkbnVsbEF3YXJlR3VhcmQ9X2hhbmRsZVdyaXRlQ29udHJhdmFyaWFuY2VmaW5kUHJvcGVydHlTZXRNZW1iZXJ2aXNpdFByb3BlcnR5QXNzaWdubWVudEp1ZGdtZW50UmVkaXJlY3RpbmdJbml0aWFsaXplckp1ZGdtZW50dmlzaXRSZWRpcmVjdGluZ0luaXRpYWxpemVySnVkZ21lbnRSZXR1cm5KdWRnbWVudHZpc2l0UmV0dXJuSnVkZ21lbnRTdGF0ZW1lbnRKdWRnbWVudFN0YXRpY0Fzc2lnbm1lbnRKdWRnbWVudHZpc2l0U3RhdGljQXNzaWdubWVudEp1ZGdtZW50U3VwZXJJbml0aWFsaXplckp1ZGdtZW50dmlzaXRTdXBlckluaXRpYWxpemVySnVkZ21lbnRTdXBlck1ldGhvZEludm9jYXRpb25KdWRnbWVudHZpc2l0U3VwZXJNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnRTdXBlclByb3BlcnR5R2V0SnVkZ21lbnR2aXNpdFN1cGVyUHJvcGVydHlHZXRKdWRnbWVudFN3aXRjaENhc2VKdWRnbWVudGV4cHJlc3Npb25KdWRnbWVudHNTd2l0Y2hTdGF0ZW1lbnRKdWRnbWVudGV4cHJlc3Npb25KdWRnbWVudGNhc2VKdWRnbWVudHN2aXNpdFN3aXRjaFN0YXRlbWVudEp1ZGdtZW50U3ltYm9sTGl0ZXJhbEp1ZGdtZW50dmlzaXRTeW1ib2xMaXRlcmFsSnVkZ21lbnRJbnZhbGlkQ29uc3RydWN0b3JJbnZvY2F0aW9uSnVkZ21lbnR2aXNpdEludmFsaWRDb25zdHJ1Y3Rvckludm9jYXRpb25KdWRnbWVudEludmFsaWRXcml0ZUp1ZGdtZW50dmlzaXRJbnZhbGlkV3JpdGVKdWRnbWVudHZpc2l0U3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50X3JlcGxhY2VXaXRoRGVzdWdhcmVkZGVzdWdhcmVkTGV0ZGVzdWdhcmVkQ29uZGl0aW9uYWxFeHByZXNzaW9uQ2F0Y2hKdWRnbWVudGV4Y2VwdGlvbkp1ZGdtZW50c3RhY2tUcmFjZUp1ZGdtZW50VHJ5Q2F0Y2hKdWRnbWVudGNhdGNoSnVkZ21lbnRzdmlzaXRUcnlDYXRjaEp1ZGdtZW50VHJ5RmluYWxseUp1ZGdtZW50dmlzaXRUcnlGaW5hbGx5SnVkZ21lbnRjcmVhdGVUb3BMZXZlbFR5cGVJbmZlcnJlclNoYWRvd1R5cGVJbmZlcnJlcnByaXZhdGVlbmdpbmVnZXRGaWVsZEluaXRpYWxpemVydHlwZU5lZWRlZE5vIHR5cGUgaW5mZXJyZWQgZm9yIGtlcm5lbEluaXRpYWxpemVyaW5mZXJTdGF0ZW1lbnRUeXBlTGl0ZXJhbEp1ZGdtZW50dmlzaXRUeXBlTGl0ZXJhbEp1ZGdtZW50U2hhZG93VHlwZVByb21vdGVyZ2V0VmFyaWFibGVGdW5jdGlvbk5lc3RpbmdMZXZlbF9mdW5jdGlvbk5lc3RpbmdMZXZlbGlzUHJvbW90aW9uQ2FuZGlkYXRla2VybmVsVmFyaWFibGVEZWNsYXJhdGlvbl9pc0xvY2FsRnVuY3Rpb25zYW1lRXhwcmVzc2lvbnNzZXRWYXJpYWJsZU11dGF0ZWRBbnl3aGVyZV9tdXRhdGVkQW55d2hlcmVzZXRWYXJpYWJsZU11dGF0ZWRJbkNsb3N1cmVfbXV0YXRlZEluQ2xvc3VyZXdhc1ZhcmlhYmxlTXV0YXRlZEFueXdoZXJlVmFyaWFibGVBc3NpZ25tZW50SnVkZ21lbnR2aXNpdFZhcmlhYmxlQXNzaWdubWVudEp1ZGdtZW50X2ltcGxpY2l0bHlUeXBlZGZvckVmZmVjdGluaXRpYWxpemVySnVkZ21lbnR2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudGlzSW1wbGljaXRseVR5cGVkVW5yZXNvbHZlZFRhcmdldEludm9jYXRpb25KdWRnbWVudHZpc2l0VW5yZXNvbHZlZFRhcmdldEludm9jYXRpb25KdWRnbWVudFVucmVzb2x2ZWRWYXJpYWJsZUFzc2lnbm1lbnRKdWRnbWVudHZpc2l0VW5yZXNvbHZlZFZhcmlhYmxlQXNzaWdubWVudEp1ZGdtZW50VmFyaWFibGVHZXRKdWRnbWVudF9mYWN0X3Njb3BldmlzaXRWYXJpYWJsZUdldEp1ZGdtZW50V2hpbGVKdWRnbWVudHZpc2l0V2hpbGVKdWRnbWVudFlpZWxkSnVkZ21lbnR2aXNpdFlpZWxkSnVkZ21lbnRMb2FkTGlicmFyeUp1ZGdtZW50dmlzaXRMb2FkTGlicmFyeUp1ZGdtZW50TG9hZExpYnJhcnlUZWFyT2ZmSnVkZ21lbnR2aXNpdExvYWRMaWJyYXJ5VGVhck9mZkp1ZGdtZW50X0NvbXBsZXhBc3NpZ25tZW50SW5mZXJlbmNlUmVzdWx0X1VuZmluaXNoZWRDYXNjYWRld3JhcElsbGVnYWxBc3NpZ25tZW50d3JhcEluZGV4QXNzaWdubWVudHdyYXBQcm9wZXJ0eUFzc2lnbm1lbnR3cmFwU3RhdGljQXNzaWdubWVudHdyYXBWYXJpYWJsZUFzc2lnbm1lbnRJbmZlcmVuY2VWaXNpdG9ybWFwRW50cnlDbGFzc21hcEVudHJ5T2Zmc2V0bWFwU3ByZWFkT2Zmc2V0aXRlcmFibGVTcHJlYWRPZmZzZXRpdGVyYWJsZVNwcmVhZFR5cGVpc0VtcHR5Q29udGV4dHdyYXBGdXR1cmVPclR5cGVzdG9yZUluZmVycmVkVHlwZWJlaW5nSW5mZXJyZWR0b0JlSW5mZXJyZWRpbmZlckluaXRpYWxpemluZ0Zvcm1hbGhhc0V4cGxpY2l0VHlwZUFyZ3VtZW50c2luZmVySW52b2NhdGlvbmhhZEV4cGxpY2l0VHlwZUFyZ3VtZW50c2luaXRpYWxpemVyUmVzdWx0aW5pdGlhbGl6ZXJUeXBlaGFuZGxlRm9ySW5EZWNsYXJpbmdWYXJpYWJsZXR5cGVDaGVja3NOZWVkZWRpbmZlckZvckluSXRlcmFibGV0ZW1wVmFydmFyaWFibGVHZXRpbXBsaWNpdERvd25jYXN0d3JhcFR5cGVpbmZlcnJlZEV4cHJlc3Npb25UeXBlcmVzb2x2ZVR5cGVQYXJhbWV0ZXJoYW5kbGVGb3JJbldpdGhvdXRWYXJpYWJsZXN5bnRoZXRpY1dyaXRlVHlwZXdyaXRlVGFyZ2V0Z2V0U2V0dGVyVHlwZWhhbmRsZUZvckluU3RhdGVtZW50V2l0aG91dFZhcmlhYmxldXBkYXRldmlzaXRGdW5jdGlvbk5vZGVKdWRnbWVudHJldHVybkNvbnRleHRyZXR1cm5UeXBlSW5zdHJ1bWVudGF0aW9uT2Zmc2V0aW5mZXJMb2NhbEZ1bmN0aW9uaW5mZXJNZXRhZGF0YUtlZXBpbmdIZWxwZXJza2lwVHlwZUFyZ3VtZW50SW5mZXJlbmNlbGhzVHlwZWNhbGxlZVR5cGVleHBlY3RlZEluZGV4VHlwZUZvcldyaXRlaW5kZXhDb250ZXh0aW5kZXhUeXBlcmVhZE1lbWJlcmNhbGxlZUZ1bmN0aW9uVHlwZWRlc3VnYXJlZEludm9jYXRpb25yZXBsYWNlZFJlYWRpc0RvdWJsZUNvbnRleHRnZXRTcHJlYWRFbGVtZW50VHlwZXNwcmVhZFR5cGVpbmZlckVsZW1lbnRpbmZlcnJlZFR5cGVBcmd1bWVudGluZmVycmVkU3ByZWFkVHlwZXNpbmZlcmVuY2VOZWVkZWRzcHJlYWRSZXN1bHRzcHJlYWRFbGVtZW50VHlwZWlzQXNzaWduYWJsZWNvbmRpdGlvblJlc3VsdGNvbmRpdGlvblR5cGV0aGVuVHlwZW90aGVyd2lzZVR5cGVjaGVja0VsZW1lbnRsaXN0VHlwZWZvcm1hbFR5cGVzYWN0dWFsVHlwZXNpbmZlckdlbmVyaWNGdW5jdGlvbk9yVHlwZXR5cGVBcmdzc3RvcmVTcHJlYWRNYXBFbnRyeUVsZW1lbnRUeXBlc3NwcmVhZE1hcEVudHJ5VHlwZWluZmVyTWFwRW50cnlpbmZlcnJlZEtleVR5cGVpbmZlcnJlZFZhbHVlVHlwZXNwcmVhZENvbnRleHRhY3R1YWxUeXBlc0ZvclNldGFjdHVhbEtleVR5cGVhY3R1YWxWYWx1ZVR5cGVhY3R1YWxFbGVtZW50VHlwZWtleUVycm9ydmFsdWVFcnJvcmVudHJ5VHlwZWlzTWFwaXNJdGVyYWJsZWFjdHVhbFR5cGVGb3JTZXRsZW5ndGhGb3JTZXRrZXlSZXN1bHR2YWx1ZVJlc3VsdGNoZWNrTWFwRW50cnljYWNoZWRLZXljYWNoZWRWYWx1ZW1hcFR5cGV0eXBlQ29udGV4dElzTWFwdHlwZUNvbnRleHRJc0l0ZXJhYmxlc2V0TGl0ZXJhbGNhY2hlZEtleXNjYWNoZWRWYWx1ZXNoYXNNYXBFbnRyeWhhc01hcFNwcmVhZGhhc0l0ZXJhYmxlU3ByZWFkc3ByZWFkVHlwZUNvbnRleHRjYW5CZVNldGNhbkJlTWFwc2V0RWxlbWVudHNmb3JtYWxUeXBlc0ZvclNldHNldFR5cGVpbmZlcnJlZFR5cGVzRm9yU2V0aW5mZXJNZXRob2RJbnZvY2F0aW9ucmVjZWl2ZXJWYXJpYWJsZWluZmVyUHJvcGVydHlHZXRkZXN1Z2FyZWRHZXR2YXJpYWJsZVR5cGVmaW5kUHJvcGVydHlHZXRNZW1iZXJnZXRHZXR0ZXJUeXBlaGFuZGxlUHJvcGVydHlHZXRDb250cmF2YXJpYW5jZWNyZWF0ZVN0YXRpY0ludm9jYXRpb25jcmVhdGVBcmd1bWVudHNGb3JFeHRlbnNpb25NZXRob2RpbmZlcnJlZEV4dGVuc2lvblR5cGVBcmd1bWVudHNhbGxvd0V4dGVuc2lvbk1ldGhvZHNjbGFzc1R5cGVQYXJhbWV0ZXJzY2xvc3VyZUNvbnRleHRpc0dlbmVyYXRvcnJldHVybk9yWWllbGRDb250ZXh0aGFuZGxlUmV0dXJud3JpdGVNZW1iZXJpbnN0YW50aWF0ZVRlYXJPZmZtZXRob2ROYW1lcHJvcGVydHlOYW1lZXhwcmVzc2lvblR5cGVjYXNlRXhwcmVzc2lvbmNhc2VFeHByZXNzaW9uUmVzdWx0Y2FzZUV4cHJlc3Npb25UeXBldmlzaXRDYXRjaEp1ZGdtZW50Y2F0Y2hfZGVjbGFyZWRUeXBlaW5mZXJEZWNsYXJhdGlvblR5cGVyZXBsYWNlZEluaXRpYWxpemVybXV0YXRlZEluQ2xvc3VyZWRlY2xhcmVkT3JJbmZlcnJlZFR5cGVjb21wdXRlUHJvbW90ZWRUeXBlaGFuZGxlWWllbGRJbmZlcnJlZFR5cGVWaXNpdG9yZ2V0SW5mZXJyZWRUeXBlcmVhZEluZmVycmVkVHlwZWludmFsaWRUb0JvdHRvbWludmFsaWRUb1RvcGNvbXB1dGVDb25zdHJ1Y3RvclJldHVyblR5cGVnZXRFeHRlbnNpb25UeXBlUGFyYW1ldGVyQ291bnRnZXRFeHRlbnNpb25UeXBlQXJndW1lbnRDb3VudGdldEV4cGxpY2l0RXh0ZW5zaW9uVHlwZUFyZ3VtZW50c2dldEV4cGxpY2l0VHlwZUFyZ3VtZW50c2NoZWNrV2ViSW50TGl0ZXJhbHNFcnJvcklmVW5leGFjdGFzSW50bmVhcmVzdDB4MFhmYXN0YS5idWlsZGVySWRlbnRpZmllcmRlcHJlY2F0ZWRfZXh0cmFjdFRva2VuYWNjZXNzaW5nTGlicmFyeWZhc3RhLm1vZGlmaWVyX2J1aWxkZXJpc01peGluZnJvbnRfZW5kLnN1bW1hcnlfZ2VuZXJhdG9yc3VtbWFyeUZvcnRydW5jYXRlZmFzdGEuc2Nhbm5lci5rZXl3b3Jkc19LRVlXT1JEX1NUQVRFS0VZV09SRF9TVEFURWNvbXB1dGVLZXl3b3JkU3RhdGVUYWJsZWlzTG93ZXJjYXNlY2h1bmtjaHVua1N0YXJ0aXNMZWFmQXJyYXlLZXl3b3JkU3RhdGVmb287IExvd2VyQ2FzZUFycmF5S2V5d29yZFN0YXRlVXBwZXJDYXNlQXJyYXlLZXl3b3JkU3RhdGVMZWFmS2V5d29yZFN0YXRlZmFzdGEuY29uc3RhbnRfY29udGV4dGZhc3RhLm1vZGlmaWVyTW9kaWZpZXJFbnVtTW9kaWZpZXJFbnVtLkFic3RyYWN0TW9kaWZpZXJFbnVtLkNvbnN0TW9kaWZpZXJFbnVtLkNvdmFyaWFudE1vZGlmaWVyRW51bS5FeHRlcm5hbE1vZGlmaWVyRW51bS5GaW5hbE1vZGlmaWVyRW51bS5TdGF0aWNNb2RpZmllckVudW0uVmFyQWJzdHJhY3RDb25zdENvdmFyaWFudEV4dGVybmFsRmluYWxTdGF0aWNWYXJtYXNrTW9kaWZpZXIuZnJvbVN0cmluZ21vZGlmaWVyKE1vZGlmaWVyRW51bS52YWxpZGF0ZVZhckZpbmFsT3JDb25zdE1vZGlmaWVyLnZhbGlkYXRlVmFyRmluYWxPckNvbnN0cmVxdWlyZWRNYXNrdmFyTWFza2Zyb250X2VuZC5zcmMuZmFzdGEubmFtZXNhbXBlcnNhbmROYW1lYmFyTmFtZWNhcmV0TmFtZWRpdmlzaW9uTmFtZWRvdWJsZUFtcGVyc2FuZE5hbWVkb3VibGVCYXJOYW1lZG91YmxlUXVlc3Rpb25OYW1lZXF1YWxzTmFtZWdyZWF0ZXJUaGFuTmFtZWdyZWF0ZXJUaGFuT3JFcXVhbHNOYW1laWRlbnRpY2FsTmFtZWxlZnRTaGlmdE5hbWVsZW5ndGhOYW1lbGVzc1RoYW5OYW1lbGVzc1RoYW5PckVxdWFsc05hbWVtdWx0aXBseU5hbWVtdXN0YWNoZU5hbWVuZWdhdGlvbk5hbWVub1N1Y2hNZXRob2ROYW1lcGVyY2VudE5hbWVyaWdodFNoaWZ0TmFtZXRyaXBsZVNoaWZ0TmFtZXRpbGRlTmFtZXVuYXJ5TWludXNOYW1lZmFzdGEucGFyc2VyTGlzdGVuZXJQYXJzZXJFcnJvckRlY2xhcmF0aW9uS2luZFRvcExldmVsUGFyc2VyRXJyb3JDb2xsZWN0aW5nTGlzdGVuZXJyZWNvdmVyYWJsZUVycm9yc2Zhc3RhLnF1b3RlUXVvdGUuU2luZ2xlUXVvdGUuRG91YmxlUXVvdGUuTXVsdGlMaW5lU2luZ2xlUXVvdGUuTXVsdGlMaW5lRG91YmxlUXVvdGUuUmF3U2luZ2xlUXVvdGUuUmF3RG91YmxlUXVvdGUuUmF3TXVsdGlMaW5lU2luZ2xlUXVvdGUuUmF3TXVsdGlMaW5lRG91YmxlU2luZ2xlRG91YmxlTXVsdGlMaW5lU2luZ2xlTXVsdGlMaW5lRG91YmxlUmF3U2luZ2xlUmF3RG91YmxlUmF3TXVsdGlMaW5lU2luZ2xlUmF3TXVsdGlMaW5lRG91YmxlVW5lc2NhcGVFcnJvckxpc3RlbmVyaGFuZGxlVW5lc2NhcGVFcnJvcmxlbmd0aE9mT3B0aW9uYWxXaGl0ZXNwYWNlUHJlZml4Zmlyc3RRdW90ZUxlbmd0aGxhc3RRdW90ZUxlbmd0aGlzTGFzdFF1b3RlU3ludGhldGljdW5lc2NhcGVDb2RlVW5pdHNyZXN1bHRPZmZzZXRkaWdpdGZhc3RhLnNjb3BlX2xpc3RlbmVyU3RhY2tMaXN0ZW5lckJyZWFrQ29udGludWVHb3RvSmNyZWF0ZUJyZWFrVGFyZ2V0Y3JlYXRlQ29udGludWVUYXJnZXROdWxsVmFsdWUuQnJlYWtUYXJnZXROdWxsVmFsdWUuQ29udGludWVUYXJnZXRiZWdpbkJsb2NrRnVuY3Rpb25Cb2R5YmxvY2sgZnVuY3Rpb24gYm9keWJlZ2luRm9yU3RhdGVtZW50Zm9yIHN0YXRlbWVudGJlZ2luRm9yQ29udHJvbEZsb3dmb3IgaW4gYSBjb2xsZWN0aW9uYmVnaW5CbG9ja2JlZ2luRG9XaGlsZVN0YXRlbWVudGJlZ2luV2hpbGVTdGF0ZW1lbnRiZWdpbkRvV2hpbGVTdGF0ZW1lbnRCb2R5ZG8td2hpbGUgc3RhdGVtZW50IGJvZHllbmREb1doaWxlU3RhdGVtZW50Qm9keWJlZ2luV2hpbGVTdGF0ZW1lbnRCb2R5d2hpbGUgc3RhdGVtZW50IGJvZHllbmRXaGlsZVN0YXRlbWVudEJvZHliZWdpbkZvclN0YXRlbWVudEJvZHlmb3Igc3RhdGVtZW50IGJvZHllbmRGb3JTdGF0ZW1lbnRCb2R5YmVnaW5Gb3JJbkJvZHlmb3ItaW4gYm9keWVuZEZvckluQm9keWJlZ2luRWxzZVN0YXRlbWVudGVuZEVsc2VTdGF0ZW1lbnRWYWx1ZUtpbmRBcmd1bWVudHNPck51bGxJZGVudGlmaWVyT3JOdWxsSW50ZWdlckZvcm1hbHNGb3JtYWxzT3JOdWxsTnVsbFZhbHVlLkZvcm1hbFBhcmFtZXRlcnNHZW5lcmF0b3JNZXRob2RCb2R5TW9kaWZpZXJzTW9kaWZpZXJzT3JOdWxsTnVsbFZhbHVlLk1vZGlmaWVyc05hbWVPck51bGxOdWxsVmFsdWUuTmFtZU5hbWVPck9wZXJhdG9yTmFtZU9yUXVhbGlmaWVkTmFtZU9yT3BlcmF0b3JOYW1lT3JQYXJzZXJSZWNvdmVyeU1ldGFkYXRhTGlzdE9yTnVsbFRva2VuT3JOdWxsTnVsbFZhbHVlLlRva2VuVHlwZUFyZ3VtZW50c09yTnVsbFR5cGVCdWlsZGVyT3JOdWxsVHlwZVZhcmlhYmxlTGlzdE9yTnVsbF9TaW5nbGVWYWx1ZUtpbmRudWxsVmFsdWUgb3IgX1VuaW9uVmFsdWVLaW5ka2luZHNvcnJlcGVhdGVkS2luZHN1bmlvbk9mS2luZHNidWlsZElzTnVsbGhhc0FueVR5cGVWYXJpYWJsZXNUeXBlQ29uc3RyYWludEdhdGhlcmVyZ2V0TmFtZWRQYXJhbWV0ZXJUeXBlVHlwZUNvbnN0cmFpbnRUeXBlVmFyaWFibGVFbGltaW5hdG9yQ2xvc3VyZUNvbnRleHRkZWNsYXJlZFJldHVyblR5cGVfbmVlZFRvSW5mZXJSZXR1cm5UeXBlX2luZmVycmVkVW53cmFwcGVkUmV0dXJuT3JZaWVsZFR5cGVyZXR1cm5TdGF0ZW1lbnRzcmV0dXJuRXhwcmVzc2lvblR5cGVzbmVlZFRvSW5mZXJSZXR1cm5UeXBlZ2V0VHlwZUFyZ3VtZW50T2ZjaGVja1ZhbGlkUmV0dXJuZmxhdHRlbmVkUmV0dXJuVHlwZWZsYXR0ZW5lZEV4cHJlc3Npb25UeXBlaXNSZXR1cm5Gcm9tQXN5bmN1bndyYXBwZWRUeXBlX3dyYXBBc3luY09yR2VuZXJhdG9yZ2V0RGVyaXZlZFR5cGVBcmd1bWVudE9maW5mZXJSZXR1cm5UeXBld3JhcEZ1dHVyZVR5cGVNZXRob2RDb250cmF2YXJpYW5jZUNoZWNrS2luZE1ldGhvZENvbnRyYXZhcmlhbmNlQ2hlY2tLaW5kLm5vbmVNZXRob2RDb250cmF2YXJpYW5jZUNoZWNrS2luZC5jaGVja01ldGhvZFJldHVybk1ldGhvZENvbnRyYXZhcmlhbmNlQ2hlY2tLaW5kLmNoZWNrR2V0dGVyUmV0dXJuY2hlY2tNZXRob2RSZXR1cm5jaGVja0dldHRlclJldHVybnVua25vd25GdW5jdGlvbmluZmVycmVkVHlwZXNNYXBsYXN0SW5mZXJyZWRTdWJzdGl0dXRpb25sYXN0Q2FsbGVlVHlwZWFjdHVhbFR5cGVpbml0aWFsRXhwZWN0ZWRUeXBldW5mdXR1cmVkRXhwZWN0ZWRUeXBlZnV0dXJlZEV4cGVjdGVkVHlwZWNhbGxNZW1iZXJfc2hvdWxkVGVhck9mZkNhbGxudWxsQ2hlY2t0ZWFyT2ZmZ2V0R2V0dGVyVHlwZUZvck1lbWJlclRhcmdldGNvbmRpdGlvbmFsZXJyb3JOb2RlX2dldFByZWNpc2VUeXBlRXJyb3JUZW1wbGF0ZXR5cGVDaGVja19pbmZlckV4dGVuc2lvblR5cGVBcmd1bWVudHNmaW5kSW50ZXJmYWNlTWVtYmVyZXJyb3JUZW1wbGF0ZWluY2x1ZGVFeHRlbnNpb25NZXRob2RzT2JqZWN0QWNjZXNzVGFyZ2V0S2luZC5jYWxsRnVuY3Rpb25pbnRlcmZhY2VNZW1iZXJfZ2V0SW50ZXJmYWNlTWVtYmVyYmVzdFNvRmFybm9uZU1vcmVTcGVjaWZpY29uVHlwZUluc3RhbnRpYXRlVG9Cb3VuZHNpbmZlcnJlZFR5cGVBcmd1bWVudHNpbmZlcnJlZFN1YnN0aXR1dGlvbmluc3RhbnRpYXRlVG9Cb3VuZFR5cGVBcmd1bWVudHNpbnN0YW50aWF0ZVRvQm91bmRzU3Vic3RpdHV0aW9uZXh0ZW5zaW9uVGVhck9mZmlzTW9zdFNwZWNpZmljaXNNb3JlU3BlY2lmaWNpc01vcmVTcGVjaWZpY1RoYW5tZXRob2RJbnZvY2F0aW9uc2lnbmF0dXJlcHJvcGVydHlHZXRwcm9wZXJ0eVNldE9iamVjdEFjY2Vzc1RhcmdldEtpbmQuaW5zdGFuY2VNZW1iZXJPYmplY3RBY2Nlc3NUYXJnZXRLaW5kLmV4dGVuc2lvbk1lbWJlcmV4dGVuc2lvbk1ldGhvZEtpbmRtZW1iZXJDbGFzc1VuZXhwZWN0ZWQgaW50ZXJmYWNlIG1lbWJlciBmb2xsb3dDYWxsX2dldEZ1bmN0aW9uVHlwZWNhbGxUeXBldHlwZUFzSW5zdGFuY2VPZkNsYXNzZ2V0UmVhbFRhcmdldHNldHRlclBhcmFtZXRlcnNleHByZXNzaW9uVG9SZXBsYWNlY2hlY2tSZXR1cm5yZXBsYWNlZEV4cHJlc3Npb25pc0ltcGxpY2l0RXh0ZW5zaW9uTWVtYmVyX2luZmVyR2VuZXJpY0V4dGVuc2lvbk1ldGhvZEludm9jYXRpb25faW5mZXJJbnZvY2F0aW9uZXh0ZW5zaW9uRnVuY3Rpb25UeXBlZXh0ZW5zaW9uQXJndW1lbnRzZXh0ZW5zaW9uU3Vic3RpdHV0aW9udGFyZ2V0VHlwZVBhcmFtZXRlcnN0YXJnZXRGdW5jdGlvblR5cGV0YXJnZXRSZXR1cm5UeXBldGFyZ2V0QXJndW1lbnRzY2FsbGVlVHlwZVBhcmFtZXRlcnNleHBsaWNpdFR5cGVBcmd1bWVudHNfZm9yRWFjaEFyZ3VtZW50aW5mZXJyZWRGb3JtYWxUeXBlTm8gcmVjZWl2ZXIgdHlwZSBwcm92aWRlZCBmb3IgaW1wbGljaXQgZXh0ZW5zaW9uIG1lbWJlciBpbnZvY2F0aW9uLnNlZW5OYW1lc25hbWVkVHlwZUluZGV4dW5pcXVlTmFtZWRwcmV2TmFtZWRFeHByZXNzaW9ubnVtUG9zaXRpb25hbEFyZ3Nmb3JtYWxUeXBlc0Zyb21Db250ZXh0bmVlZFRvU2V0UmV0dXJuVHlwZW9sZENsb3N1cmVDb250ZXh0aW5mZXJyZWRSZXR1cm5UeXBlcGFyZW50c05vIHRhcmdldCBmb3IgIHdpdGggZGVzdWdhcmVkIGludm9jYXRpb24gYWN0dWFsUmVjZWl2ZXJUeXBlYWN0dWFsTWV0aG9kTmFtZXRlYXJvZmZUYXJnZXR0ZWFyb2ZmVHlwZWluc3RhbnRpYXRlZFR5cGVyZXR1cm5lZFR5cGVQYXJhbWV0ZXJzT2NjdXJOb25Db3ZhcmlhbnRseWNoZWNrZXJpbml0aWFsVmFyaWFuY2VWYXJpYW5jZS5jb3ZhcmlhbnRyZXNvbHZlT25lU3RlcHJlc29sdmVkc3RlcDFzdGVwMnR5cGVXaXRob3V0RnV0dXJlT3JuYW1lZEV4cHJlc3Npb25nZXRDb21iaW5lZE1lbWJlclNpZ25hdHVyZUtlcm5lbGdhdGhlcmVycmVwb3J0UHJvYmxlbWdlbmVyYXRlQ29uc3RyYWludHNtaXhpbkNsYXNzYmFzZVR5cGVtaXhpblN1cGVydHlwZW1peGluU3VwZXJjbGFzc0NvbXBpbGVyLWdlbmVyYXRlZCBtaXhpbiBhcHBsaWNhdGlvbnMgaGF2ZSBhIG1peGluIG9yIGVsc2UgaW1wbGVtZW50IGV4YWN0bHkgb25lIHR5cGUgaW1wbGVtZW50cyBzMHMxdTB0cnlTdWJ0eXBlTWF0Y2hjb21wdXRlQ29uc3RyYWludHNjb25zdHJhaW50ZXhhY3RFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0T2JqZWN0QWNjZXNzVGFyZ2V0S2luZGluc3RhbmNlTWVtYmVyY2FsbEZ1bmN0aW9uZXh0ZW5zaW9uTWVtYmVyT2JqZWN0QWNjZXNzVGFyZ2V0T2JqZWN0QWNjZXNzVGFyZ2V0LmV4dGVuc2lvbk1ldGhvZEtpbmRPYmplY3RBY2Nlc3NUYXJnZXQuaW5mZXJyZWRFeHRlbnNpb25UeXBlQXJndW1lbnRzT2JqZWN0QWNjZXNzVGFyZ2V0LnRlYXJvZmZUYXJnZXRPYmplY3RBY2Nlc3NUYXJnZXQoRXh0ZW5zaW9uQWNjZXNzVGFyZ2V0RXh0ZW5zaW9uQWNjZXNzVGFyZ2V0KEV4dGVuc2lvbkFjY2Vzc0NhbmRpZGF0ZWlzUGxhdGZvcm10aGlzSXNTdWJ0eXBldGhpc0lzU3VwZXJ0eXBlZ2V0TmFtZWRGb3JtYWxnZXRQb3NpdGlvbmFsRm9ybWFsaXNPdmVybG9hZGFibGVBcml0aG1ldGljT3BlcmF0b3JkaXNhYmxlZG11dGF0ZVZhcmlhYmxlVHlwZVByb21vdGVyRGlzYWJsZWRfbnVsbEZhY3RzX2ZhY3RDYWNoZV9mYWN0Q2FjaGVTdGF0ZV9jdXJyZW50RmFjdHNfcHJvbW90aW9uRXhwcmVzc2lvbl90cnVlRmFjdHNGb3JQcm9tb3Rpb25FeHByZXNzaW9uX2N1cnJlbnRTY29wZV9sYXN0RmFjdFNlcXVlbmNlTnVtYmVyX2NvbXB1dGVQcm9tb3RlZFR5cGVhZnRlclRydWViZWZvcmVFbHNldHJ1ZUZhY3RzX2ZhY3RzV2hlblRydWVmYWxzZUZhY3RzX2ZhY3RzV2hlbkZhbHNlaXNBbmRfZW5jbG9zaW5nX21lcmdlRmFjdHNfcmVjb3JkUHJvbW90aW9uRXhwcmVzc2lvbnNob3J0Y3V0RmFjdHNfY29tcHV0ZUN1cnJlbnRGYWN0TWFwaXNDaGVja2NvbW1vbkFuY2VzdG9yc2VxdWVuY2VOdW1iZXJwcmV2aW91c0ZvclZhcmlhYmxlbmV3U3RhdGVjdXJyZW50bHlDYWNoZWRfcHJpbnRFdmVudGZhY3RDaGFpbihudWxsKSAtPiAgIF9wcm9tb3Rpb25FeHByZXNzaW9uOiAgICAgaWYgdHJ1ZTogaWZUcnVlaWZGYWxzZV9tdXRhdGVkSW5TY29wZXNfYWNjZXNzZWRJbkNsb3N1cmVJblNjb3Blc3Byb21vdGVyX3JlY29yZEFjY2Vzc2VkSW5TY29wZV9yZWNvcmRNdXRhdGVkSW5TY29wZV9kZXB0aF90b3BMZXZlbGNvbnRhaW5zU2NvcGVfQ29uZGl0aW9uYWxTY29wZWVuY2xvc2luZ19Jc0NoZWNrY2hlY2tlZFR5cGVpc0NoZWNrKHByZXZpb3VzUHJvbW90ZWRUeXBlYXNzaWdubWVudFNjb3BlYWNjZXNzU2NvcGVwcmV2aW91c1R5cGVfTG9naWNhbFNjb3BlX051bGxGYWN0VHJpZWQgdG8gY3JlYXRlIHByb21vdGVkIHR5cGUgZm9yIG5vIHZhcmlhYmxlX1RvcExldmVsU2NvcGVmYXN0YS5jb2xsZWN0aW9uc0NvbnRyb2xGbG93RWxlbWVudF9TcHJlYWRFbGVtZW50JkV4cHJlc3Npb24mQ29udHJvbEZsb3dFbGVtZW50X0lmRWxlbWVudCZFeHByZXNzaW9uJkNvbnRyb2xGbG93RWxlbWVudF9Gb3JFbGVtZW50JkV4cHJlc3Npb24mQ29udHJvbEZsb3dFbGVtZW50X0ZvckluRWxlbWVudCZFeHByZXNzaW9uJkNvbnRyb2xGbG93RWxlbWVudENvbnRyb2xGbG93TWFwRW50cnkua2V5IGdldHRlcmV4cHJDb250cm9sRmxvd01hcEVudHJ5LmtleSBzZXR0ZXJDb250cm9sRmxvd01hcEVudHJ5LnZhbHVlIGdldHRlckNvbnRyb2xGbG93TWFwRW50cnkudmFsdWUgc2V0dGVyX1NwcmVhZE1hcEVudHJ5JlRyZWVOb2RlJkNvbnRyb2xGbG93TWFwRW50cnlfSWZNYXBFbnRyeSZUcmVlTm9kZSZDb250cm9sRmxvd01hcEVudHJ5X0Zvck1hcEVudHJ5JlRyZWVOb2RlJkNvbnRyb2xGbG93TWFwRW50cnlfRm9ySW5NYXBFbnRyeSZUcmVlTm9kZSZDb250cm9sRmxvd01hcEVudHJ5ZmFzdGEuY29uc3RuZXNzZXhwbGljaXRDb25zdGV4cGxpY2l0TmV3aW1wbGljaXRmYXN0YS5leHByZXNzaW9uX2dlbmVyYXRvcl9oZWxwZXJfZm9yZXN0X3BsYWluTmFtZUZvclJlYWRfZGVidWdOYW1lX3VyaV9maW5pc2hfbWFrZVNpbXBsZVJlYWRfbWFrZVJlYWRjb21wbGV4QXNzaWdubWVudHN0YXJ0Q29tcGxleEFzc2lnbm1lbnRfbWFrZVNpbXBsZVdyaXRlX21ha2VXcml0ZWJ1aWxkTnVsbEF3YXJlQXNzaWdubWVudGJ1aWxkQ29tcG91bmRBc3NpZ25tZW50YmluYXJ5T3BlcmF0b3JidWlsZFBvc3RmaXhJbmNyZW1lbnR2YWx1ZUFjY2Vzc2R1bW15X21ha2VJbnZhbGlkUmVhZF9tYWtlSW52YWxpZFdyaXRlb3BlcmF0b3JPZmZzZXQob2Zmc2V0OiBWYXJpYWJsZVVzZUdlbmVyYXRvciwgdmFyaWFibGU6ICwgcHJvbW90ZWRUeXBlOiBQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcl9yZWNlaXZlclZhcmlhYmxlcmVjZWl2ZXJBY2Nlc3MsIF9yZWNlaXZlclZhcmlhYmxlOiAsIHJlY2VpdmVyOiAsIG5hbWU6ICwgZ2V0dGVyOiAsIHNldHRlcjogbWFrZVRoaXNQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvck51bGxBd2FyZVByb3BlcnR5QWNjZXNzR2VuZXJhdG9ycmVjZWl2ZXJFeHByZXNzaW9ua2VybmVsUHJvcGVydHlBc3NpZ24sIHJlY2VpdmVyRXhwcmVzc2lvbjogLCB0eXBlOiBTdXBlclByb3BlcnR5QWNjZXNzR2VuZXJhdG9ySW5kZXhlZEFjY2Vzc0dlbmVyYXRvcmluZGV4VmFyaWFibGVpbmRleEFjY2Vzc19tYWtlV3JpdGVBbmRSZXR1cm52YWx1ZVZhcmlhYmxlLCBpbmRleDogLCByZWNlaXZlclZhcmlhYmxlOiAsIGluZGV4VmFyaWFibGU6IFRoaXNJbmRleGVkQWNjZXNzR2VuZXJhdG9yU3VwZXJJbmRleGVkQWNjZXNzR2VuZXJhdG9yU3RhdGljQWNjZXNzR2VuZXJhdG9yZnJvbUJ1aWxkZXJidWlsZGVyU2V0dGVyU3RhdGljQWNjZXNzR2VuZXJhdG9yLmZyb21CdWlsZGVyLCByZWFkVGFyZ2V0OiAsIHdyaXRlVGFyZ2V0OiBFeHRlbnNpb25JbnN0YW5jZUFjY2Vzc0dlbmVyYXRvcmludm9rZVRhcmdldEluc3RhbmNlRXh0ZW5zaW9uQWNjZXNzR2VuZXJhdG9yLmZyb21CdWlsZGVySW5zdGFuY2VFeHRlbnNpb25BY2Nlc3NHZW5lcmF0b3JfY3JlYXRlRXh0ZW5zaW9uVHlwZUFyZ3VtZW50c2NyZWF0ZVR5cGVQYXJhbWV0ZXJUeXBlRXhwbGljaXRFeHRlbnNpb25JbnN0YW5jZUFjY2Vzc0dlbmVyYXRvcmdldHRlckJ1aWxkZXJzZXR0ZXJCdWlsZGVyRXhwbGljaXRFeHRlbnNpb25BY2Nlc3NHZW5lcmF0b3JFeHBsaWNpdEV4dGVuc2lvbkFjY2Vzc0dlbmVyYXRvci5wbGFpbk5hbWVGb3JSZWFkRXhwbGljaXRFeHRlbnNpb25BY2Nlc3NHZW5lcmF0b3IuZG9JbnZvY2F0aW9uLCBleHRlbnNpb25CdWlsZGVyOiBMb2FkTGlicmFyeUdlbmVyYXRvcmxvYWRMaWJyYXJ5aW1wb3J0RGVwZW5kZW5jeWNyZWF0ZVRlYXJvZmZNZXRob2RjcmVhdGVMb2FkTGlicmFyeSwgYnVpbGRlcjogRGVmZXJyZWRBY2Nlc3NHZW5lcmF0b3JwcmVmaXhHZW5lcmF0b3JzdWZmaXhHZW5lcmF0b3Jwcm9wZXJ0eUFjY2Vzc2RlZmVycmVkQWNjZXNzb3IucGxhaW5OYW1lRm9yUmVhZCwgcHJlZml4R2VuZXJhdG9yOiAsIHN1ZmZpeEdlbmVyYXRvcjogVHlwZVVzZUdlbmVyYXRvcnBsYWluTmFtZUZvclJlYWR0eXBlVmFyaWFibGVzQ291bnRhcmd1bWVudEJ1aWxkZXJzLCBkZWNsYXJhdGlvbjogLCBwbGFpbk5hbWVGb3JSZWFkOiBjcmVhdGVUeXBlTGl0ZXJhbFJlYWRPbmx5QWNjZXNzR2VuZXJhdG9yLCBleHByZXNzaW9uOiAsIHZhbHVlOiBFcnJvbmVvdXNFeHByZXNzaW9uR2VuZXJhdG9yYnVpbGRFcnJvclVucmVzb2x2ZWROYW1lR2VuZXJhdG9yX2J1aWxkVW5yZXNvbHZlZFZhcmlhYmxlQXNzaWdubWVudFVubGlua2VkR2VuZXJhdG9yQ29udGV4dEF3YXJlR2VuZXJhdG9ybWFrZUludmFsaWRSZWFkRGVsYXllZEFzc2lnbm1lbnRoYW5kbGVBc3NpZ25tZW50LCBhc3NpZ25tZW50T3BlcmF0b3I6IERlbGF5ZWRQb3N0Zml4SW5jcmVtZW50LCBiaW5hcnlPcGVyYXRvcjogLCBpbnRlcmZhY2VUYXJnZXQ6IFByZWZpeFVzZUdlbmVyYXRvcicgIT0gLCBwcmVmaXg6ICwgZGVmZXJyZWQ6IFVuZXhwZWN0ZWRRdWFsaWZpZWRVc2VHZW5lcmF0b3JQYXJzZXJFcnJvckdlbmVyYXRvciNwYXJzZXItZXJyb3JUaGlzQWNjZXNzR2VuZXJhdG9yaXNJbml0aWFsaXplci5wbGFpbk5hbWVGb3JSZWFkYnVpbGRGaWVsZEluaXRpYWxpemVyRXJyb3JidWlsZENvbnN0cnVjdG9ySW5pdGlhbGl6ZXJidWlsZEFzc2lnbm1lbnRFcnJvciwgaXNJbml0aWFsaXplcjogLCBpbkZpZWxkSW5pdGlhbGl6ZXI6ICwgaXNTdXBlcjogSW5jb21wbGV0ZVNlbmRHZW5lcmF0b3JfSW5jb21wbGV0ZUVycm9yR2VuZXJhdG9yJkVycm9uZW91c0V4cHJlc3Npb25HZW5lcmF0b3ImSW5jb21wbGV0ZVNlbmRHZW5lcmF0b3JJbmNvbXBsZXRlRXJyb3JHZW5lcmF0b3IsIG1lc3NhZ2U6IF9TZW5kQWNjZXNzR2VuZXJhdG9yJkdlbmVyYXRvciZJbmNvbXBsZXRlU2VuZEdlbmVyYXRvclNlbmRBY2Nlc3NHZW5lcmF0b3IsIGFyZ3VtZW50czogX0luY29tcGxldGVQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvciZHZW5lcmF0b3ImSW5jb21wbGV0ZVNlbmRHZW5lcmF0b3JJbmNvbXBsZXRlUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3JQYXJlbnRoZXNpemVkRXhwcmVzc2lvbkdlbmVyYXRvcm1ha2VCaW5hcnltYWtlT3JSZXVzZVZhcmlhYmxlYWRqdXN0Rm9ySW1wbGljaXRDYWxsaXNGaWVsZE9yR2V0dGVyZmFzdGEuZXhwcmVzc2lvbl9nZW5lcmF0b3JfaGVscGVyZmFzdGEuZmFuZ29ybmNvbmRpdGlvbkJvdW5kYXJ5Y29uZGl0aW9uTGFzdFRva2VubmV4dFRva2VuZGVjbGFyYXRpb25zZXhjZXB0aW9uUGFyYW1ldGVyc3RhY2tUcmFjZVBhcmFtZXRlcnN0YWNrVHJhY2VUeXBldXBkYXRlcnNyaWdodFBhcmVudGhlc2lzaWZLZXl3b3JkdGhlblN0YXRlbWVudGVsc2VLZXl3b3JkZWxzZVN0YXRlbWVudG5vdE9wZXJhdG9ybGVmdE9wZXJhbmRyaWdodE9wZXJhbmRyZXRocm93S2V5d29yZHRocm93S2V5d29yZG9jYXRjaENsYXVzZXN5aWVsZEtleXdvcmRzdGFyc3ludGhjcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uY3JlYXRlTGV0Y3JlYXRlRnVuY3Rpb25Ob2RlY3JlYXRlVHlwZVBhcmFtZXRlcmNyZWF0ZUZ1bmN0aW9uRXhwcmVzc2lvbmNyZWF0ZUZ1bmN0aW9uSW52b2NhdGlvbmNyZWF0ZU5hbWVkRXhwcmVzc2lvbl9WYXJpYWJsZXNEZWNsYXJhdGlvbmZhc3RhLmltcGxpY2l0X3R5cGVfYXJndW1lbnRUeXBlVmFyaWFibGVzR3JhcGh2YXJpYWJsZUluZGljZXNjb2xsZWN0UmVmZXJlbmNlc0Zyb21UeXBlVmFyaWFibGVTZWFyY2hhbnlUeXBlVmFyaWFibGVzc3Vic3RpdHV0ZVJhbmdldXBwZXJTdWJzdGl0dXRpb25sb3dlclN1YnN0aXR1dGlvbnN1YnN0aXR1dGVkQXJndW1lbnRjaGFuZ2VkZHluYW1pY1N1YnN0aXR1dGlvbm51bGxTdWJzdGl0dXRpb252YXJpYWJsZUluZGV4ZmluZFZhcmlhYmxlVXNlc0luVHlwZXVzZXNkZXBlbmRlbnRWYXJpYWJsZWZpbmRJbmJvdW5kUmVmZXJlbmNlc3ZhcmlhYmxlc0FuZERlcGVuZGVuY2llc2RlcGVuZGVudGRlcGVuZGVuY2VmaW5kUmF3VHlwZXNXaXRoSW5ib3VuZFJlZmVyZW5jZXN0eXBlc0FuZERlcGVuZGVuY2llc2hhc0luYm91bmRnZXRJbmJvdW5kUmVmZXJlbmNlSXNzdWVzcmF3VHlwZXNBbmRNdXR1YWxEZXBlbmRlbmNpZXNmaW5kUmF3VHlwZVBhdGhzVG9EZWNsYXJhdGlvbnZpc2l0ZWRkZXBlbmRlbmN5UGF0aGZpbmRSYXdUeXBlQ3ljbGVzY3ljbGVzY29udmVydFJhd1R5cGVDeWNsZXNJbnRvSXNzdWVzY3ljbGVmaXJzdEVuY291bnRlcmVkVHlwZWN5Y2xlc1RvUmVwb3J0ZGVjbGFyYXRpb25QYXRoQW5kTmFtZWxleE1pblBhdGhBbmROYW1lcGF0aEFuZE5hbWVyYXdUeXBlQ3ljbGVzQXNJc3N1ZXNicmVha0N5Y2xlc2Zhc3RhLmtlcm5lbF9hc3RfYXBpZnJvbnRfZW5kLm1lbW9yeV9maWxlX3N5c3RlbV9maWxlc19kaXJlY3Rvcmllcy0gX2FkZFRyYWlsaW5nU2xhc2hNZW1vcnlGaWxlU3lzdGVtRW50aXR5Y3JlYXRlRGlyZWN0b3J5RW50cnkgIGlzIGEgZmlsZS5GaWxlICBkb2VzIG5vdCBleGlzdC53cml0ZUFzQnl0ZXNTeW5jX3VwZGF0ZSBpcyBhIGRpcmVjdG9yeS5mYXN0YS5idWlsZGVyX2dyYXBoTGlicmFyeSBub3QgZm91bmQ6IGZhc3RhLmNvbWJpbmF0b3JEaXJlY3RvcnlHWmlwQ29kZWNnWmlwQ29kZWNnemlwcGVkSW5pdGlhbGl6ZWRGcm9tRGF0YXRlbXBEaXJjcmVhdGVUZW1wU3luYy5nemZyb250X2VuZC5zcmMuaHlicmlkX2ZpbGVfc3lzdGVtcGh5c2ljYWxfcGh5c2ljYWxIeWJyaWRGaWxlU3lzdGVtRW50aXR5X2RlbGVnYXRlX2ZzZGVsZWdhdGVmYXN0YS5saWJyYXJ5X2dyYXBodXJpMWNvbXBpbGVyLm51bGxfYXBpTnVsbEJpbmFyeVNpbmtOdWxsQmluYXJ5U2luayhkYXJ0MmpzLmRpYWdub3N0aWNfbGlzdGVuZXJyZXBvcnRFcnJvck1lc3NhZ2VyZXBvcnRIaW50TWVzc2FnZWRhcnQyanMuZGlhZ25vc3RpY3MuaW52YXJpYW50REVCVUdfTU9ERURlYnVnIG1vZGUgaXMgbm90IGVuYWJsZWQ6IFNwYW5uYWJsZSB3YXMgbnVsbCBmb3IgZmFpbGVkQXQuIFVzZSBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLmRhcnQyanMuZGlhZ25vc3RpY3Muc291cmNlX3NwYW5Tb3VyY2VTcGFuKGRhcnQyanMuZGlhZ25vc3RpY3Muc3Bhbm5hYmxlX1NwYW5uYWJsZVNlbnRpbmVsQXNzZXJ0aW9uIGZhaWx1cmVkYXJ0MmpzLmhlbHBlcnNEZWJ1Z1ByaW50RGVidWdXcmFwUHJpbnRSZXBvcnRIZXJlZGVidWdNZXNzYWdlX0RlYnVnSW5kZW50YXRpb25ERUJVR19QUklOVF9FTkFCTEVEX2luZGVudGF0aW9uX3RyYWNrZWRPYmplY3RzdHJhY2tXaXRoVHJhY2VlbmFibGVEZWJ1Z01vZGVkZWJ1Z1ByaW50X2RlYnVnUHJpbnRkZWJ1Z1dyYXBQcmludF9kZWJ1Z1dyYXBQcmludHN0YXJ0OmVuZDpkZWJ1Z0JyZWFrcmVwb3J0SGVyZV9yZXBvcnRIZXJlSEVSRTogdHJhY2tkb1RyYWNrcHJpbnRUcmFjZXRyYWNrOiBsaW1pdHRocm93T25QcmludGlmVHJhY2tlZHRyYWNrZWQ6IGRhcnQyanMuYmFja2VuZF9zdHJhdGVneUJhY2tlbmRTdHJhdGVneWVtaXR0ZXJUYXNrb3V0cHV0VW5pdERhdGFjb2RlZ2VuY3JlYXRlU3NhQnVpbGRlcnNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3ljcmVhdGVUeXBlc0luZmVycmVyZm9yRWFjaENvZGVnZW5NZW1iZXJwcmVwYXJlQ29kZWdlblJlYWRlcmRhcnQyanMuY29tbW9uLmNvZGVnZW5FbWl0dGVyQ29uc3RhbnRVc2VEeW5hbWljVXNlU3RhdGljVXNlVHlwZVVzZVdvcmxkSW1wYWN0VmlzaXRvckNvZGVnZW5JbXBhY3RyZWFkRnJvbURhdGFTb3VyY2V3cml0ZVRvRGF0YVNpbmtDb2RlZ2VuSW1wYWN0LndyaXRlVG9EYXRhU2lua3R5cGVWYXJpYWJsZUJvdW5kc1N1YnR5cGVDaGVja3Njb25zdFN5bWJvbHNzcGVjaWFsaXplZEdldEludGVyY2VwdG9yc3VzZXNJbnRlcmNlcHRvcmFzeW5jTWFya2Vyc2dlbmVyaWNJbnN0YW50aWF0aW9uc25hdGl2ZUJlaGF2aW9yc29uZVNob3RJbnRlcmNlcHRvcnNfQ29kZWdlbkltcGFjdGNvZGVnZW4taW1wYWN0X3R5cGVWYXJpYWJsZUJvdW5kc1N1YnR5cGVDaGVja3NfY29uc3RTeW1ib2xzX3NwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3JzX3VzZXNJbnRlcmNlcHRvcl9hc3luY01hcmtlcnNfZ2VuZXJpY0luc3RhbnRpYXRpb25zX25hdGl2ZUJlaGF2aW9yc19uYXRpdmVNZXRob2RzX29uZVNob3RJbnRlcmNlcHRvcnNkeW5hbWljVXNlc3N0YXRpY1VzZXN0eXBlVXNlc2NvbnN0YW50VXNlc3JlYWRMaXN0ZW1wdHlBc051bGxyZWFkU3RyaW5nc3JlYWRDbGFzc2VzcmVhZEJvb2xhc3luY01hcmtlcnNWYWx1ZXJlYWRJbnRPck51bGxyZWFkTWVtYmVyc3VzZXdyaXRlU3RyaW5nc3dyaXRlQ2xhc3Nlc3dyaXRlQm9vbHdyaXRlSW50T3JOdWxsaW5zdGFudGlhdGlvbmJlaGF2aW9yd3JpdGVNZW1iZXJzYXBwbHl2aXNpdFN0YXRpY1VzZXZpc2l0RHluYW1pY1VzZXZpc2l0VHlwZVVzZXZpc2l0Q29uc3RhbnRVc2VyZWdpc3RlclR5cGVWYXJpYWJsZUJvdW5kc1N1YnR5cGVDaGVja3JlZ2lzdGVyQ29uc3RTeW1ib2xyZWdpc3RlclNwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3JyZWdpc3RlclVzZUludGVyY2VwdG9ycmVnaXN0ZXJBc3luY01hcmtlcnJlZ2lzdGVyR2VuZXJpY0luc3RhbnRpYXRpb25yZWdpc3Rlck5hdGl2ZUJlaGF2aW9ybmF0aXZlQmVoYXZpb3JyZWdpc3Rlck5hdGl2ZU1ldGhvZHJlZ2lzdGVyT25lU2hvdEludGVyY2VwdG9yQ29kZWdlbkltcGFjdDp0aXRsZQogCiAgCiB1c2VzSW50ZXJjZXB0b3I6IHRydWVDb2RlZ2VuUmVnaXN0cnlfZWxlbWVudEVudmlyb25tZW50X3dvcmxkSW1wYWN0X2V4cHJlc3Npb25zQ29kZWdlblJlZ2lzdHJ5IGZvciByZWdpc3Rlckluc3RhbnRpYXRlZENsYXNzcmVnaXN0ZXJJbnN0YW50aWF0aW9uZ2V0UmF3VHlwZXJlZ2lzdGVyU3RhdGljVXNlc3RhdGljVXNlcmVnaXN0ZXJEeW5hbWljVXNlZHluYW1pY1VzZXJlZ2lzdGVyVHlwZVVzZXR5cGVVc2VyZWdpc3RlckNvbnN0YW50VXNlY29uc3RhbnRVc2VyZWdpc3Rlckluc3RhbnRpYXRlZENsb3N1cmVyZWdpc3Rlck1vZHVsYXJOYW1lcmVnaXN0ZXJNb2R1bGFyRXhwcmVzc2lvbkNvZGVnZW5SZXN1bHRzZ2V0Q29kZWdlblJlc3VsdHNPbkRlbWFuZENvZGVnZW5SZXN1bHRzX2Z1bmN0aW9uQ29tcGlsZXJEZXNlcmlhbGl6ZWRDb2RlZ2VuUmVzdWx0c05vIGNvZGVnZW4gcmVzdWx0cyBmcm9tIENvZGVnZW5SZXN1bHRjb2RlZ2VuLXJlc3VsdGltcGFjdG1vZHVsYXJOYW1lc21vZHVsYXJFeHByZXNzaW9uc3JlYWRKc05vZGVPck51bGx3cml0ZUpzTm9kZU9yTnVsbGFwcGx5TW9kdWxhclN0YXRlbmFtZXJlbWl0dGVyTW9kdWxhck5hbWVLaW5kLnJ0aUZpZWxkcnRpRmllbGRKc05hbWVNb2R1bGFyTmFtZUtpbmQucnVudGltZVR5cGVOYW1lcnVudGltZVR5cGVOYW1lTW9kdWxhck5hbWVLaW5kLmNsYXNzTmFtZU1vZHVsYXJOYW1lS2luZC5hbGlhc2VkU3VwZXJNZW1iZXJhbGlhc2VkU3VwZXJNZW1iZXJQcm9wZXJ0eU5hbWVNb2R1bGFyTmFtZUtpbmQuc3RhdGljQ2xvc3VyZXN0YXRpY0Nsb3N1cmVOYW1lTW9kdWxhck5hbWVLaW5kLm1ldGhvZFByb3BlcnR5bWV0aG9kUHJvcGVydHlOYW1lTW9kdWxhck5hbWVLaW5kLm9wZXJhdG9ySXNvcGVyYXRvcklzTW9kdWxhck5hbWVLaW5kLm9wZXJhdG9ySXNUeXBlb3BlcmF0b3JJc1R5cGVNb2R1bGFyTmFtZUtpbmQuc3Vic3RpdHV0aW9uc3Vic3RpdHV0aW9uTmFtZU1vZHVsYXJOYW1lS2luZC5pbnN0YW5jZU1ldGhvZGluc3RhbmNlTWV0aG9kTmFtZU1vZHVsYXJOYW1lS2luZC5pbnN0YW5jZUZpZWxkaW5zdGFuY2VGaWVsZFByb3BlcnR5TmFtZU1vZHVsYXJOYW1lS2luZC5pbnZvY2F0aW9uaW52b2NhdGlvbk5hbWVNb2R1bGFyTmFtZUtpbmQubGF6eUluaXRpYWxpemVybGF6eUluaXRpYWxpemVyTmFtZU1vZHVsYXJOYW1lS2luZC5nbG9iYWxQcm9wZXJ0eU5hbWVGb3JDbGFzc2dsb2JhbFByb3BlcnR5TmFtZUZvckNsYXNzTW9kdWxhck5hbWVLaW5kLmdsb2JhbFByb3BlcnR5TmFtZUZvclR5cGVnbG9iYWxQcm9wZXJ0eU5hbWVGb3JUeXBlTW9kdWxhck5hbWVLaW5kLmdsb2JhbFByb3BlcnR5TmFtZUZvck1lbWJlcmdsb2JhbFByb3BlcnR5TmFtZUZvck1lbWJlck1vZHVsYXJOYW1lS2luZC5nbG9iYWxOYW1lRm9ySW50ZXJmYWNlVHlwZVZhcmlhYmxlZ2xvYmFsTmFtZUZvckludGVyZmFjZVR5cGVWYXJpYWJsZU1vZHVsYXJOYW1lS2luZC5uYW1lRm9yR2V0SW50ZXJjZXB0b3JuYW1lRm9yR2V0SW50ZXJjZXB0b3JNb2R1bGFyTmFtZUtpbmQubmFtZUZvck9uZVNob3RJbnRlcmNlcHRvcm5hbWVGb3JPbmVTaG90SW50ZXJjZXB0b3JNb2R1bGFyTmFtZUtpbmQuYXNOYW1lYXNOYW1lTW9kdWxhckV4cHJlc3Npb25LaW5kLmdsb2JhbE9iamVjdEZvckxpYnJhcnlyZWFkR2xvYmFsT2JqZWN0Rm9yTGlicmFyeXdpdGhTb3VyY2VJbmZvcm1hdGlvbk1vZHVsYXJFeHByZXNzaW9uS2luZC5nbG9iYWxPYmplY3RGb3JDbGFzc3JlYWRHbG9iYWxPYmplY3RGb3JDbGFzc01vZHVsYXJFeHByZXNzaW9uS2luZC5nbG9iYWxPYmplY3RGb3JUeXBlcmVhZEdsb2JhbE9iamVjdEZvclR5cGVNb2R1bGFyRXhwcmVzc2lvbktpbmQuZ2xvYmFsT2JqZWN0Rm9yTWVtYmVycmVhZEdsb2JhbE9iamVjdEZvck1lbWJlck1vZHVsYXJFeHByZXNzaW9uS2luZC5jb25zdGFudGNvbnN0YW50UmVmZXJlbmNlTW9kdWxhckV4cHJlc3Npb25LaW5kLmVtYmVkZGVkR2xvYmFsQWNjZXNzZ2VuZXJhdGVFbWJlZGRlZEdsb2JhbEFjY2Vzc0NvZGVnZW5SZXN1bHQoY29kZT08bnVsbD4saW1wYWN0PW1vZHVsYXJOYW1lcz1tb2R1bGFyRXhwcmVzc2lvbnM9TW9kdWxhck5hbWVLaW5kcnRpRmllbGRhbGlhc2VkU3VwZXJNZW1iZXJzdGF0aWNDbG9zdXJlbWV0aG9kUHJvcGVydHlpbnN0YW5jZU1ldGhvZGluc3RhbmNlRmllbGRsYXp5SW5pdGlhbGl6ZXJNb2R1bGFyTmFtZW1vZHVsYXItbmFtZXJlYWRFbnVtZGF0YUlzQ2xhc3NFbnRpdHlyZWFkVHlwZVZhcmlhYmxlcmVhZFN0cmluZ3dyaXRlRW51bXdyaXRlQ2xhc3N3cml0ZVR5cGVkZWZ3cml0ZVR5cGVWYXJpYWJsZXZhbHVlIG5vdCBzZXQgZm9yIGFsbG93UmVuYW1lY29udGFpbmVkTm9kZXNNb2R1bGFyTmFtZShraW5kPSwgZGF0YT0sIHZhbHVlPV9jbG9uZU1vZHVsYXJFeHByZXNzaW9uS2luZGdsb2JhbE9iamVjdEZvckxpYnJhcnlnbG9iYWxPYmplY3RGb3JDbGFzc2dsb2JhbE9iamVjdEZvclR5cGVnbG9iYWxPYmplY3RGb3JNZW1iZXJlbWJlZGRlZEdsb2JhbEFjY2Vzc01vZHVsYXJFeHByZXNzaW9ubW9kdWxhci1leHByZXNzaW9ucmVhZENvbnN0YW50d3JpdGVMaWJyYXJ5d3JpdGVDb25zdGFudHByZWNlZGVuY2VMZXZlbE1vZHVsYXJFeHByZXNzaW9uKGtpbmQ9LGRhdGE9dG9TdHJ1Y3R1cmVkVGV4dCx2YWx1ZT1Kc05vZGVLaW5kSnNOb2RlS2luZC5jb21tZW50SnNOb2RlS2luZC5hd2FpdEpzTm9kZUtpbmQucmVnRXhwTGl0ZXJhbEpzTm9kZUtpbmQucHJvcGVydHlKc05vZGVLaW5kLm9iamVjdEluaXRpYWxpemVySnNOb2RlS2luZC5hcnJheUhvbGVKc05vZGVLaW5kLmFycmF5SW5pdGlhbGl6ZXJKc05vZGVLaW5kLnBhcmVudGhlc2VzSnNOb2RlS2luZC5tb2R1bGFyTmFtZUpzTm9kZUtpbmQuYXN5bmNOYW1lSnNOb2RlS2luZC5zdHJpbmdCYWNrZWROYW1lSnNOb2RlS2luZC5zdHJpbmdDb25jYXRlbmF0aW9uSnNOb2RlS2luZC5saXRlcmFsTnVsbEpzTm9kZUtpbmQubGl0ZXJhbE51bWJlckpzTm9kZUtpbmQubGl0ZXJhbFN0cmluZ0pzTm9kZUtpbmQubGl0ZXJhbFN0cmluZ0Zyb21OYW1lSnNOb2RlS2luZC5saXRlcmFsQm9vbEpzTm9kZUtpbmQubW9kdWxhckV4cHJlc3Npb25Kc05vZGVLaW5kLmZ1bmN0aW9uSnNOb2RlS2luZC5uYW1lZEZ1bmN0aW9uSnNOb2RlS2luZC5hY2Nlc3NKc05vZGVLaW5kLnBhcmFtZXRlckpzTm9kZUtpbmQudmFyaWFibGVEZWNsYXJhdGlvbkpzTm9kZUtpbmQudGhpc0V4cHJlc3Npb25Kc05vZGVLaW5kLnZhcmlhYmxlVXNlSnNOb2RlS2luZC5wb3N0Zml4SnNOb2RlS2luZC5wcmVmaXhKc05vZGVLaW5kLmJpbmFyeUpzTm9kZUtpbmQuY2FsbEV4cHJlc3Npb25Kc05vZGVLaW5kLm5ld0V4cHJlc3Npb25Kc05vZGVLaW5kLmNvbmRpdGlvbmFsSnNOb2RlS2luZC52YXJpYWJsZUluaXRpYWxpemF0aW9uSnNOb2RlS2luZC5hc3NpZ25tZW50SnNOb2RlS2luZC52YXJpYWJsZURlY2xhcmF0aW9uTGlzdEpzTm9kZUtpbmQubGl0ZXJhbEV4cHJlc3Npb25Kc05vZGVLaW5kLmRhcnRZaWVsZEpzTm9kZUtpbmQubGl0ZXJhbFN0YXRlbWVudEpzTm9kZUtpbmQubGFiZWxlZFN0YXRlbWVudEpzTm9kZUtpbmQuZnVuY3Rpb25EZWNsYXJhdGlvbkpzTm9kZUtpbmQuc3dpdGNoRGVmYXVsdEpzTm9kZUtpbmQuc3dpdGNoQ2FzZUpzTm9kZUtpbmQuc3dpdGNoU3RhdGVtZW50SnNOb2RlS2luZC5jYXRjaENsYXVzZUpzTm9kZUtpbmQudHJ5U3RhdGVtZW50SnNOb2RlS2luZC50aHJvd1N0YXRlbWVudEpzTm9kZUtpbmQucmV0dXJuU3RhdGVtZW50SnNOb2RlS2luZC5icmVha1N0YXRlbWVudEpzTm9kZUtpbmQuY29udGludWVTdGF0ZW1lbnRKc05vZGVLaW5kLmRvU3RhdGVtZW50SnNOb2RlS2luZC53aGlsZVN0YXRlbWVudEpzTm9kZUtpbmQuZm9ySW5TdGF0ZW1lbnRKc05vZGVLaW5kLmZvclN0YXRlbWVudEpzTm9kZUtpbmQuaWZTdGF0ZW1lbnRKc05vZGVLaW5kLmVtcHR5U3RhdGVtZW50SnNOb2RlS2luZC5leHByZXNzaW9uU3RhdGVtZW50SnNOb2RlS2luZC5ibG9ja0pzTm9kZUtpbmQucHJvZ3JhbXJlZ0V4cExpdGVyYWxvYmplY3RJbml0aWFsaXplcmFycmF5SG9sZWFycmF5SW5pdGlhbGl6ZXJwYXJlbnRoZXNlc21vZHVsYXJOYW1lYXN5bmNOYW1lc3RyaW5nQmFja2VkTmFtZXN0cmluZ0NvbmNhdGVuYXRpb25saXRlcmFsTnVsbGxpdGVyYWxOdW1iZXJsaXRlcmFsU3RyaW5nbGl0ZXJhbFN0cmluZ0Zyb21OYW1lbGl0ZXJhbEJvb2xtb2R1bGFyRXhwcmVzc2lvbm5hbWVkRnVuY3Rpb25hY2Nlc3N2YXJpYWJsZURlY2xhcmF0aW9udGhpc0V4cHJlc3Npb252YXJpYWJsZVVzZXBvc3RmaXhjYWxsRXhwcmVzc2lvbm5ld0V4cHJlc3Npb252YXJpYWJsZUluaXRpYWxpemF0aW9uYXNzaWdubWVudHZhcmlhYmxlRGVjbGFyYXRpb25MaXN0bGl0ZXJhbEV4cHJlc3Npb25kYXJ0WWllbGRsaXRlcmFsU3RhdGVtZW50bGFiZWxlZFN0YXRlbWVudGZ1bmN0aW9uRGVjbGFyYXRpb25zd2l0Y2hEZWZhdWx0c3dpdGNoU3RhdGVtZW50Y2F0Y2hDbGF1c2V0aHJvd1N0YXRlbWVudHJldHVyblN0YXRlbWVudGJyZWFrU3RhdGVtZW50Y29udGludWVTdGF0ZW1lbnRkb1N0YXRlbWVudHdoaWxlU3RhdGVtZW50Zm9ySW5TdGF0ZW1lbnRmb3JTdGF0ZW1lbnRpZlN0YXRlbWVudGVtcHR5U3RhdGVtZW50ZXhwcmVzc2lvblN0YXRlbWVudHByb2dyYW1Kc05vZGVUYWdzanMtbm9kZWpzLWNvbW1lbnRqcy1hd2FpdGpzLXJlZ0V4cExpdGVyYWxqcy1wcm9wZXJ0eWpzLW9iamVjdEluaXRpYWxpemVyanMtYXJyYXlIb2xlanMtYXJyYXlJbml0aWFsaXplcmpzLXBhcmVudGhlc2VzanMtbW9kdWxhck5hbWVqcy1hc3luY05hbWVqcy1zdHJpbmdCYWNrZWROYW1lanMtc3RyaW5nQ29uY2F0ZW5hdGlvbmpzLWxpdGVyYWxOdWxsanMtbGl0ZXJhbE51bWJlcmpzLWxpdGVyYWxTdHJpbmdqcy1saXRlcmFsU3RyaW5nRnJvbU5hbWVqcy1saXRlcmFsQm9vbGpzLW1vZHVsYXJFeHByZXNzaW9uanMtZnVuY3Rpb25qcy1uYW1lZEZ1bmN0aW9uanMtYWNjZXNzanMtcGFyYW1ldGVyanMtdmFyaWFibGVEZWNsYXJhdGlvbmpzLXRoaXNFeHByZXNzaW9uanMtdmFyaWFibGVVc2Vqcy1wb3N0Zml4anMtcHJlZml4anMtYmluYXJ5anMtY2FsbEV4cHJlc3Npb25qcy1uZXdFeHByZXNzaW9uanMtY29uZGl0aW9uYWxqcy12YXJpYWJsZUluaXRpYWxpemF0aW9uanMtYXNzaWdubWVudGpzLXZhcmlhYmxlRGVjbGFyYXRpb25MaXN0anMtbGl0ZXJhbEV4cHJlc3Npb25qcy1kYXJ0WWllbGRqcy1saXRlcmFsU3RhdGVtZW50anMtbGFiZWxlZFN0YXRlbWVudGpzLWZ1bmN0aW9uRGVjbGFyYXRpb25qcy1zd2l0Y2hEZWZhdWx0anMtc3dpdGNoQ2FzZWpzLXN3aXRjaFN0YXRlbWVudGpzLWNhdGNoQ2xhdXNlanMtdHJ5U3RhdGVtZW50anMtdGhyb3dTdGF0ZW1lbnRqcy1yZXR1cm5TdGF0ZW1lbnRqcy1icmVha1N0YXRlbWVudGpzLWNvbnRpbnVlU3RhdGVtZW50anMtZG9TdGF0ZW1lbnRqcy13aGlsZVN0YXRlbWVudGpzLWZvckluU3RhdGVtZW50anMtZm9yU3RhdGVtZW50anMtaWZTdGF0ZW1lbnRqcy1lbXB0eVN0YXRlbWVudGpzLWV4cHJlc3Npb25TdGF0ZW1lbnRqcy1ibG9ja2pzLXByb2dyYW1Kc05vZGVTZXJpYWxpemVyc2VyaWFsaXplcl93cml0ZUluZm93cml0ZUNhY2hlZHZpc2l0SW50ZXJwb2xhdGVkRGVjbGFyYXRpb25Kc05vZGVTZXJpYWxpemVyLnZpc2l0SW50ZXJwb2xhdGVkRGVjbGFyYXRpb252aXNpdEludGVycG9sYXRlZFN0YXRlbWVudEpzTm9kZVNlcmlhbGl6ZXIudmlzaXRJbnRlcnBvbGF0ZWRTdGF0ZW1lbnR2aXNpdEludGVycG9sYXRlZFNlbGVjdG9ydmlzaXRJbnRlcnBvbGF0ZWRQYXJhbWV0ZXJKc05vZGVTZXJpYWxpemVyLnZpc2l0SW50ZXJwb2xhdGVkUGFyYW1ldGVydmlzaXRJbnRlcnBvbGF0ZWRMaXRlcmFsSnNOb2RlU2VyaWFsaXplci52aXNpdEludGVycG9sYXRlZExpdGVyYWx2aXNpdEludGVycG9sYXRlZEV4cHJlc3Npb25Kc05vZGVTZXJpYWxpemVyLnZpc2l0SW50ZXJwb2xhdGVkRXhwcmVzc2lvbnZpc2l0Q29tbWVudHZpc2l0QXdhaXR2aXNpdFJlZ0V4cExpdGVyYWx2aXNpdFByb3BlcnR5dmlzaXRPYmplY3RJbml0aWFsaXplcmlzT25lTGluZXJ2aXNpdEFycmF5SG9sZXZpc2l0QXJyYXlJbml0aWFsaXplcnZpc2l0UGFyZW50aGVzZXNlbmNsb3NlZFVuZXhwZWN0ZWQgZGVmZXJyZWQgZXhwcmVzc2lvbjogdmlzaXRMaXRlcmFsTnVsbHZpc2l0TGl0ZXJhbE51bWJlcnZpc2l0TGl0ZXJhbFN0cmluZ3Zpc2l0TGl0ZXJhbEJvb2x2aXNpdERlZmVycmVkU3RyaW5nSnNOb2RlU2VyaWFsaXplci52aXNpdERlZmVycmVkU3RyaW5ndmlzaXREZWZlcnJlZE51bWJlckpzTm9kZVNlcmlhbGl6ZXIudmlzaXREZWZlcnJlZE51bWJlcnZpc2l0RGVmZXJyZWRFeHByZXNzaW9udmlzaXRGdW52aXNpdE5hbWVkRnVuY3Rpb252aXNpdEFjY2Vzc3Zpc2l0UGFyYW1ldGVydmlzaXRUaGlzdmlzaXRWYXJpYWJsZVVzZXZpc2l0UG9zdGZpeHZpc2l0UHJlZml4dmlzaXRCaW5hcnl2aXNpdENhbGx2aXNpdE5ld3Zpc2l0Q29uZGl0aW9uYWx2aXNpdFZhcmlhYmxlSW5pdGlhbGl6YXRpb252aXNpdEFzc2lnbm1lbnRsZWZ0SGFuZFNpZGV3cml0ZVN0cmluZ09yTnVsbHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbkxpc3RpbmRlbnRTcGxpdHN2aXNpdExpdGVyYWxFeHByZXNzaW9udmlzaXREYXJ0WWllbGRoYXNTdGFydmlzaXRMaXRlcmFsU3RhdGVtZW50dmlzaXREZWZhdWx0dmlzaXRDYXNldmlzaXRTd2l0Y2h2aXNpdFRyeWNhdGNoUGFydGZpbmFsbHlQYXJ0dmlzaXRSZXR1cm52aXNpdEJyZWFrdGFyZ2V0TGFiZWx2aXNpdENvbnRpbnVldmlzaXREb3Zpc2l0V2hpbGV2aXNpdEZvckludmlzaXRGb3J2aXNpdElmdmlzaXRQcm9ncmFtSnNOb2RlRGVzZXJpYWxpemVyZGVzZXJpYWxpemVyaGFzVmFsdWVyZWFkVmFsdWVPck51bGxyZWFkU3RyaW5nT3JOdWxscmVhZENhY2hlZENvZGVnZW5SZWFkZXJJbXBscmVhZEFic3RyYWN0VmFsdWVhYnN0cmFjdFZhbHVlRG9tYWlucmVhZEFic3RyYWN0VmFsdWVGcm9tRGF0YVNvdXJjZXJlYWRKc05vZGVyZWFkT3V0cHV0VW5pdFJlZmVyZW5jZW91dHB1dFVuaXRzcmVhZEludENvZGVnZW5Xcml0ZXJJbXBsd3JpdGVBYnN0cmFjdFZhbHVld3JpdGVBYnN0cmFjdFZhbHVlVG9EYXRhU2lua3dyaXRlSnNOb2Rld3JpdGVPdXRwdXRVbml0UmVmZXJlbmNld3JpdGVJbnRkYXJ0MmpzLmNvbW1vbi5uYW1lc1B1YmxpY05hbWVDYWxsU3RydWN0dXJlSWRlbnRpZmllcnNub1N1Y2hNZXRob2RfcnVudGltZVR5cGVfOnNpZ25hdHVyZUpTSlNfQlVJTFRJTkpTX0VNQkVEREVEX0dMT0JBTEpTX0lOVEVSQ0VQVE9SX0NPTlNUQU5USlNfU1RSSU5HX0NPTkNBVERBUlRfQ0xPU1VSRV9UT19KU05hbWVzZHluYW1pY190b1N0cmluZ19JTkRFWF9OQU1FSU5ERVhfU0VUX05BTUVDQUxMX05BTUVnZW5lcmljSW5zdGFudGlhdGlvbmluc3RhbnRpYXRlbm9TdWNoTWV0aG9kR2V0dGVydG9TdHJpbmdHZXR0ZXJoYXNoQ29kZV9BTExkYXJ0X2FzeW5jZGFydF9jb2xsZWN0aW9uY29sbGVjdGlvbmRhcnRfY29yZWRhcnRfaHRtbGh0bWxkYXJ0X2h0bWxfY29tbW9uaHRtbF9jb21tb25kYXJ0X2luZGV4ZWRfZGJpbmRleGVkX2RiZGFydF9pc29sYXRlaXNvbGF0ZWRhcnRfbWF0aGRhcnRfbWlycm9yc2RhcnRfX2ludGVybmFsZGFydF9fbmF0aXZlX3R5cGVkX2RhdGFfbmF0aXZlX3R5cGVkX2RhdGFkYXJ0X3R5cGVkX2RhdGF0eXBlZF9kYXRhZGFydF9zdmdzdmdkYXJ0X3dlYl9hdWRpb3dlYl9hdWRpb2RhcnRfd2ViX2dsd2ViX2dsZGFydF93ZWJfc3Fsd2ViX3NxbGRhcnRfX2pzX2hlbHBlcl9qc19oZWxwZXJkYXJ0X19ydGlfcnRpZGFydF9faW50ZXJjZXB0b3JzX2ludGVyY2VwdG9yc2RhcnRfX2ZvcmVpZ25faGVscGVyX2ZvcmVpZ25faGVscGVyZGFydF9fanNfbmFtZXNfanNfbmFtZXNkYXJ0X19qc19lbWJlZGRlZF9uYW1lc19qc19lbWJlZGRlZF9uYW1lc2RhcnRfanNwYWNrYWdlX2pzanMvanMuZGFydHBhY2thZ2VfbWV0YV9kYXJ0MmpzbWV0YS9kYXJ0MmpzLmRhcnRkYXJ0MmpzLmNvbW1vbi53b3JrTWVtYmVyRW50aXR5ZGFydDJqcy50eXBlX3N5c3RlbWNvbnN0YW50X3N5c3RlbU5hdGl2ZUJhc2ljRGF0YUNvbW1vbkVsZW1lbnRzcmVzb3VyY2VDbGFzc3VubW9kaWZpYWJsZVNldENsYXNzdHlwZWREYXRhTGlicmFyeWpzSGVscGVyTGlicmFyeWludGVyY2VwdG9yc0xpYnJhcnlmb3JlaWduTGlicmFyeXJ0aUxpYnJhcnlpbnRlcm5hbExpYnJhcnlkYXJ0SnNMaWJyYXJ5cGFja2FnZUpzTGlicmFyeXR5cGVkRGF0YUNsYXNzc3ltYm9sQ29uc3RydWN0b3JUYXJnZXRpc1N5bWJvbENvbnN0cnVjdG9yaWRlbnRpY2FsRnVuY3Rpb25pc0Z1bmN0aW9uQXBwbHlNZXRob2R0eXBlTGl0ZXJhbFR5cGVpc051bWJlck9yU3RyaW5nU3VwZXJ0eXBlaXNTdHJpbmdPbmx5U3VwZXJ0eXBlaXNMaXN0U3VwZXJ0eXBlZ2V0Q29uc3RhbnRNYXBUeXBlRm9yc291cmNlVHlwZWhhc1Byb3RvS2V5b25seVN0cmluZ0tleXNnZXRDb25zdGFudFNldFR5cGVGb3JzeW1ib2xGaWVsZHN5bWJvbEltcGxlbWVudGF0aW9uVHlwZW1hcExpdGVyYWxDbGFzc21hcExpdGVyYWxDb25zdHJ1Y3Rvcm1hcExpdGVyYWxDb25zdHJ1Y3RvckVtcHR5bWFwTGl0ZXJhbFVudHlwZWRNYWtlcm1hcExpdGVyYWxVbnR5cGVkRW1wdHlNYWtlcnNldExpdGVyYWxDbGFzc3NldExpdGVyYWxDb25zdHJ1Y3RvcnNldExpdGVyYWxDb25zdHJ1Y3RvckVtcHR5c2V0TGl0ZXJhbFVudHlwZWRNYWtlcnNldExpdGVyYWxVbnR5cGVkRW1wdHlNYWtlcm9iamVjdE5vU3VjaE1ldGhvZGlzRGVmYXVsdE5vU3VjaE1ldGhvZEltcGxlbWVudGF0aW9uYXN5bmNIZWxwZXJTdGFydFN5bmNhc3luY0hlbHBlckF3YWl0YXN5bmNIZWxwZXJSZXR1cm5hc3luY0hlbHBlclJldGhyb3d3cmFwQm9keXlpZWxkU3RhcnlpZWxkU2luZ2xlc3luY1N0YXJVbmNhdWdodEVycm9yYXN5bmNTdGFySGVscGVyc3RyZWFtT2ZDb250cm9sbGVyZW5kT2ZJdGVyYXRpb25zeW5jU3Rhckl0ZXJhYmxlZnV0dXJlSW1wbGVtZW50YXRpb25jb250cm9sbGVyU3RyZWFtc3RyZWFtSXRlcmF0b3JzdHJlYW1JdGVyYXRvckNvbnN0cnVjdG9yc3luY1N0YXJJdGVyYWJsZUZhY3Rvcnlhc3luY0F3YWl0Q29tcGxldGVyRmFjdG9yeWFzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJGYWN0b3J5anNJbnRlcmNlcHRvckNsYXNzanNTdHJpbmdDbGFzc2pzQXJyYXlDbGFzc2pzTnVtYmVyQ2xhc3Nqc0ludENsYXNzanNEb3VibGVDbGFzc2pzTnVsbENsYXNzanNCb29sQ2xhc3Nqc1BsYWluSmF2YVNjcmlwdE9iamVjdENsYXNzanNVbmtub3duSmF2YVNjcmlwdE9iamVjdENsYXNzanNKYXZhU2NyaXB0RnVuY3Rpb25DbGFzc2pzSmF2YVNjcmlwdE9iamVjdENsYXNzanNJbmRleGFibGVDbGFzc2pzTXV0YWJsZUluZGV4YWJsZUNsYXNzanNNdXRhYmxlQXJyYXlDbGFzc2pzRml4ZWRBcnJheUNsYXNzanNFeHRlbmRhYmxlQXJyYXlDbGFzc2pzVW5tb2RpZmlhYmxlQXJyYXlDbGFzc2pzUG9zaXRpdmVJbnRDbGFzc2pzVUludDMyQ2xhc3Nqc1VJbnQzMUNsYXNzaXNGaW5kSW5kZXhGb3JOYXRpdmVTdWJjbGFzc1R5cGVnZXROYXRpdmVJbnRlcmNlcHRvck1ldGhvZGpzQXJyYXlUeXBlZENvbnN0cnVjdG9yZmluZEhlbHBlckZ1bmN0aW9uY2xvc3VyZUNsYXNzYm91bmRDbG9zdXJlQ2xhc3N0eXBlTGl0ZXJhbENsYXNzY29uc3RNYXBMaXRlcmFsQ2xhc3Njb25zdFNldExpdGVyYWxDbGFzc3R5cGVWYXJpYWJsZUNsYXNzanNJbnZvY2F0aW9uTWlycm9yQ2xhc3NpbnZvY2F0aW9uVHlwZUFyZ3VtZW50R2V0dGVyanNJbmRleGluZ0JlaGF2aW9ySW50ZXJmYWNlc3RhY2tUcmFjZUhlbHBlckNsYXNzY29uc3RhbnRNYXBDbGFzc2NvbnN0YW50U3RyaW5nTWFwQ2xhc3Njb25zdGFudFByb3RvTWFwQ2xhc3NnZW5lcmFsQ29uc3RhbnRNYXBDbGFzc2Fubm90YXRpb25DcmVhdGVzQ2xhc3Nhbm5vdGF0aW9uUmV0dXJuc0NsYXNzYW5ub3RhdGlvbkpTTmFtZUNsYXNzbmF0aXZlQW5ub3RhdGlvbkNsYXNzdHlwZVZhcmlhYmxlQ29uc3RydWN0b3Jhc3NlcnRUZXN0YXNzZXJ0VGhyb3dhc3NlcnRIZWxwZXJhc3NlcnRVbnJlYWNoYWJsZU1ldGhvZGdldElzb2xhdGVBZmZpbml0eVRhZ01hcmtlcnJlcXVpcmVzUHJlYW1ibGVNYXJrZXJsb2FkTGlicmFyeVdyYXBwZXJsb2FkRGVmZXJyZWRMaWJyYXJ5Ym9vbENvbnZlcnNpb25DaGVja3RyYWNlSGVscGVyY2xvc3VyZUZyb21UZWFyT2ZmaXNKc0luZGV4YWJsZXRocm93SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9udGhyb3dJbmRleE91dE9mUmFuZ2VFeGNlcHRpb25leGNlcHRpb25VbndyYXBwZXJ0aHJvd1J1bnRpbWVFcnJvcnRocm93VW5zdXBwb3J0ZWRFcnJvcnRocm93VHlwZUVycm9ydGhyb3dBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkVycm9yY2hlY2tDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3J0aHJvd0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcnN0cmluZ0ludGVycG9sYXRpb25IZWxwZXJ3cmFwRXhjZXB0aW9uSGVscGVydGhyb3dFeHByZXNzaW9uSGVscGVyY2xvc3VyZUNvbnZlcnRlcnRyYWNlRnJvbUV4Y2VwdGlvbnNldFJ1bnRpbWVUeXBlSW5mb2dldFJ1bnRpbWVUeXBlSW5mb2dldFR5cGVBcmd1bWVudEJ5SW5kZXhjb21wdXRlU2lnbmF0dXJlZ2V0UnVudGltZVR5cGVBcmd1bWVudHNnZXRSdW50aW1lVHlwZUFyZ3VtZW50Z2V0UnVudGltZVR5cGVBcmd1bWVudEludGVyY2VwdGVkYXNzZXJ0SXNTdWJ0eXBlY2hlY2tTdWJ0eXBlYXNzZXJ0U3VidHlwZXN1YnR5cGVDYXN0ZnVuY3Rpb25UeXBlVGVzdGZ1dHVyZU9yVGVzdGNoZWNrU3VidHlwZU9mUnVudGltZVR5cGVhc3NlcnRTdWJ0eXBlT2ZSdW50aW1lVHlwZXN1YnR5cGVPZlJ1bnRpbWVUeXBlQ2FzdGNoZWNrRGVmZXJyZWRJc0xvYWRlZHRocm93Tm9TdWNoTWV0aG9kY3JlYXRlUnVudGltZVR5cGVmYWxsVGhyb3VnaEVycm9yY3JlYXRlSW52b2NhdGlvbk1pcnJvcmNyZWF0ZVVubWFuZ2xlZEludm9jYXRpb25NaXJyb3JjeWNsaWNUaHJvd0hlbHBlcmRlZmluZVByb3BlcnR5aXNFeHRyYWN0VHlwZUFyZ3VtZW50c2dldEluc3RhbnRpYXRpb25DbGFzc2dldEluc3RhbnRpYXRlRnVuY3Rpb25pbnN0YW50aWF0ZWRHZW5lcmljRnVuY3Rpb25UeXBlZXh0cmFjdEZ1bmN0aW9uVHlwZU9iamVjdEZyb21JbnRlcm5hbGZpbmRUeXBlaW5zdGFuY2VUeXBlYXJyYXlJbnN0YW5jZVR5cGVzaW1wbGVJbnN0YW5jZVR5cGV0eXBlTGl0ZXJhbE1ha2VyY2hlY2tUeXBlQm91bmRydGlBc0ZpZWxkcnRpQ2hlY2tGaWVsZHJ0aUlzRmllbGRydGlSZXN0RmllbGRydGlFdmFsTWV0aG9kcnRpQmluZE1ldGhvZHJ0aUFkZFJ1bGVzTWV0aG9kZ2VuZXJhbElzVGVzdEltcGxlbWVudGF0aW9uZ2VuZXJhbEFzQ2hlY2tJbXBsZW1lbnRhdGlvbmdlbmVyYWxUeXBlQ2hlY2tJbXBsZW1lbnRhdGlvbnNwZWNpYWxpemVkSXNCb29sc3BlY2lhbGl6ZWRBc0Jvb2xOdWxsYWJsZXNwZWNpYWxpemVkQ2hlY2tCb29sTnVsbGFibGVzcGVjaWFsaXplZEFzRG91YmxlTnVsbGFibGVzcGVjaWFsaXplZENoZWNrRG91YmxlTnVsbGFibGVzcGVjaWFsaXplZElzSW50c3BlY2lhbGl6ZWRBc0ludE51bGxhYmxlc3BlY2lhbGl6ZWRDaGVja0ludE51bGxhYmxlc3BlY2lhbGl6ZWRJc051bXNwZWNpYWxpemVkQXNOdW1OdWxsYWJsZXNwZWNpYWxpemVkQ2hlY2tOdW1OdWxsYWJsZXNwZWNpYWxpemVkSXNTdHJpbmdzcGVjaWFsaXplZEFzU3RyaW5nTnVsbGFibGVzcGVjaWFsaXplZENoZWNrU3RyaW5nTnVsbGFibGVpbnN0YW50aWF0ZWRHZW5lcmljRnVuY3Rpb25UeXBlTmV3UnRpY2xvc3VyZUZ1bmN0aW9uVHlwZXN5bWJvbEltcGxlbWVudGF0aW9uQ2xhc3NleHRlcm5hbE5hbWVDbGFzc2V4dGVybmFsTmFtZVR5cGVzeW1ib2xWYWxpZGF0ZWRDb25zdHJ1Y3RvcmpzR2V0TmFtZUVudW1pc0ZvcmVpZ25IZWxwZXJnZXREZWZhdWx0U3VwZXJjbGFzc25hdGl2ZUJhc2ljRGF0YWpzQWxsb3dJbnRlcm9wS0NvbW1vbkVsZW1lbnRzanNBbm5vdGF0aW9uQ2xhc3Nqc0Fub255bW91c0NsYXNzcHJhZ21hQ2xhc3NOYW1lRmllbGRwcmFnbWFDbGFzc09wdGlvbnNGaWVsZGlzQ3JlYXRlSW52b2NhdGlvbk1pcnJvckhlbHBlcmlzU3ltYm9sVmFsaWRhdGVkQ29uc3RydWN0b3JtZXRhTm9JbmxpbmVDbGFzc21ldGFUcnlJbmxpbmVDbGFzc2lzRXh0ZXJuYWxBbGxvd2VkSkNvbW1vbkVsZW1lbnRzaXNVbm5hbWVkTGlzdENvbnN0cnVjdG9yaXNGaWxsZWRMaXN0Q29uc3RydWN0b3Jpc0RlZmF1bHRFcXVhbGl0eUltcGxlbWVudGF0aW9uYXBwbGllc1RvSnNJbmRleGFibGVMZW5ndGhqc0FycmF5UmVtb3ZlTGFzdGpzQXJyYXlBZGRpc0pzU3RyaW5nU3BsaXRhcHBsaWVzVG9Kc1N0cmluZ1NwbGl0anNTdHJpbmdTcGxpdGpzU3RyaW5nVG9TdHJpbmdqc1N0cmluZ09wZXJhdG9yQWRkanNDb25zdENsYXNzaXNDaGVja0ludGlzQ2hlY2tOdW1pc0NoZWNrU3RyaW5naXNJbnN0YW50aWF0aW9uQ2xhc3N0eXBlZEFycmF5T2ZJbnRDbGFzc3R5cGVkQXJyYXlPZkRvdWJsZUNsYXNzanNCdWlsdGluRW51bWlzRm9yZWlnbm9wZXJhdG9yRXFIYW5kbGVzTnVsbEFyZ3VtZW50Q29tbW9uRWxlbWVudHNJbXBsX2Vudl9vcHRpb25zX3Jlc291cmNlQ2xhc3NfdW5tb2RpZmlhYmxlU2V0Q2xhc3NfdHlwZWREYXRhTGlicmFyeV9qc0hlbHBlckxpYnJhcnlfaW50ZXJjZXB0b3JzTGlicmFyeV9mb3JlaWduTGlicmFyeV9ydGlMaWJyYXJ5X2ludGVybmFsTGlicmFyeV9kYXJ0SnNMaWJyYXJ5X3BhY2thZ2VKc0xpYnJhcnlfdHlwZWREYXRhQ2xhc3Nfc3ltYm9sQ29uc3RydWN0b3JUYXJnZXRfY29tcHV0ZWRTeW1ib2xDb25zdHJ1Y3RvckRlcGVuZGVuY2llc19zeW1ib2xDb25zdHJ1Y3RvckltcGxlbWVudGF0aW9uVGFyZ2V0X2lkZW50aWNhbEZ1bmN0aW9uX21hcExpdGVyYWxDbGFzc19tYXBMaXRlcmFsQ29uc3RydWN0b3JfbWFwTGl0ZXJhbENvbnN0cnVjdG9yRW1wdHlfbWFwTGl0ZXJhbFVudHlwZWRNYWtlcl9tYXBMaXRlcmFsVW50eXBlZEVtcHR5TWFrZXJfc2V0TGl0ZXJhbENsYXNzX3NldExpdGVyYWxDb25zdHJ1Y3Rvcl9zZXRMaXRlcmFsQ29uc3RydWN0b3JFbXB0eV9zZXRMaXRlcmFsVW50eXBlZE1ha2VyX3NldExpdGVyYWxVbnR5cGVkRW1wdHlNYWtlcl9vYmplY3ROb1N1Y2hNZXRob2Rfc3luY1N0YXJJdGVyYWJsZUZhY3RvcnlfYXN5bmNBd2FpdENvbXBsZXRlckZhY3RvcnlfYXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlckZhY3RvcnlfanNJbnRlcmNlcHRvckNsYXNzX2pzU3RyaW5nQ2xhc3NfanNBcnJheUNsYXNzX2pzTnVtYmVyQ2xhc3NfanNJbnRDbGFzc19qc0RvdWJsZUNsYXNzX2pzTnVsbENsYXNzX2pzQm9vbENsYXNzX2pzUGxhaW5KYXZhU2NyaXB0T2JqZWN0Q2xhc3NfanNVbmtub3duSmF2YVNjcmlwdE9iamVjdENsYXNzX2pzSmF2YVNjcmlwdEZ1bmN0aW9uQ2xhc3NfanNKYXZhU2NyaXB0T2JqZWN0Q2xhc3NfanNJbmRleGFibGVDbGFzc19qc011dGFibGVJbmRleGFibGVDbGFzc19qc011dGFibGVBcnJheUNsYXNzX2pzRml4ZWRBcnJheUNsYXNzX2pzRXh0ZW5kYWJsZUFycmF5Q2xhc3NfanNVbm1vZGlmaWFibGVBcnJheUNsYXNzX2pzUG9zaXRpdmVJbnRDbGFzc19qc1VJbnQzMkNsYXNzX2pzVUludDMxQ2xhc3NfZ2V0TmF0aXZlSW50ZXJjZXB0b3JNZXRob2RfanNBcnJheVR5cGVkQ29uc3RydWN0b3JfanNBcnJheVJlbW92ZUxhc3RfanNBcnJheUFkZF9qc1N0cmluZ1NwbGl0X2pzU3RyaW5nVG9TdHJpbmdfanNTdHJpbmdPcGVyYXRvckFkZF9qc0NvbnN0Q2xhc3NfanNBbGxvd0ludGVyb3BfanNBbm5vdGF0aW9uQ2xhc3NfanNBbm9ueW1vdXNDbGFzc19jbG9zdXJlQ2xhc3NfYm91bmRDbG9zdXJlQ2xhc3NfdHlwZUxpdGVyYWxDbGFzc19jb25zdE1hcExpdGVyYWxDbGFzc19jb25zdFNldExpdGVyYWxDbGFzc190eXBlVmFyaWFibGVDbGFzc19wcmFnbWFDbGFzc05hbWVGaWVsZF9wcmFnbWFDbGFzc09wdGlvbnNGaWVsZF9qc0ludm9jYXRpb25NaXJyb3JDbGFzc19pbnZvY2F0aW9uVHlwZUFyZ3VtZW50R2V0dGVyX2pzSW5kZXhpbmdCZWhhdmlvckludGVyZmFjZV9uYXRpdmVBbm5vdGF0aW9uQ2xhc3NfdHlwZVZhcmlhYmxlQ29uc3RydWN0b3JfYXNzZXJ0VGVzdF9hc3NlcnRUaHJvd19hc3NlcnRIZWxwZXJfYXNzZXJ0VW5yZWFjaGFibGVNZXRob2RfZ2V0SXNvbGF0ZUFmZmluaXR5VGFnTWFya2VyX3JlcXVpcmVzUHJlYW1ibGVNYXJrZXJfY2FjaGVkQ2hlY2tDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3JfZmluZFR5cGVfaW5zdGFuY2VUeXBlX2FycmF5SW5zdGFuY2VUeXBlX3NpbXBsZUluc3RhbmNlVHlwZV90eXBlTGl0ZXJhbE1ha2VyX2NoZWNrVHlwZUJvdW5kX3J0aUFzRmllbGRfcnRpSXNGaWVsZF9ydGlDaGVja0ZpZWxkX3J0aVJlc3RGaWVsZF9ydGlFdmFsTWV0aG9kX3J0aUJpbmRNZXRob2RfcnRpQWRkUnVsZXNNZXRob2RfZ2VuZXJhbElzVGVzdEltcGxlbWVudGF0aW9uX2dlbmVyYWxBc0NoZWNrSW1wbGVtZW50YXRpb25fZ2VuZXJhbFR5cGVDaGVja0ltcGxlbWVudGF0aW9uX3N5bWJvbEltcGxlbWVudGF0aW9uQ2xhc3NfZXh0ZXJuYWxOYW1lQ2xhc3Nfc3ltYm9sSW1wbGVtZW50YXRpb25GaWVsZF9zeW1ib2xWYWxpZGF0ZWRDb25zdHJ1Y3Rvcl90eXBlZEFycmF5T2ZJbnRDbGFzc190eXBlZEFycmF5T2ZEb3VibGVDbGFzc19qc0dldE5hbWVFbnVtX2pzQnVpbHRpbkVudW1fbWV0YUFubm90YXRpb25DaGVja2VkX21ldGFOb0lubGluZUNsYXNzX21ldGFUcnlJbmxpbmVDbGFzc19maW5kQ2xhc3NSZXNvdXJjZWxvb2t1cExpYnJhcnlOYXRpdmVUeXBlZERhdGFfZmluZENvbnN0cnVjdG9yX2Vuc3VyZVN5bWJvbENvbnN0cnVjdG9yRGVwZW5kZW5jaWVzX2ZpbmRMaWJyYXJ5TWVtYmVyZmlsbGVkX2dldFJhd1R5cGVfY3JlYXRlSW50ZXJmYWNlVHlwZUNvbXBhcmFibGVQYXR0ZXJubG9va3VwQ2xhc3Nsb29rdXBMaWJyYXJ5TWVtYmVyX2ZpbmRDbGFzc01lbWJlcmxvb2t1cExvY2FsQ2xhc3NNZW1iZXJjcmVhdGVJbnRlcmZhY2VUeXBlY2xhc3NFbGVtZW50dHJlYXRBc1Jhd3N5bWJvbEltcGxlbWVudGF0aW9uRmllbGRMaW5rZWRIYXNoTWFwX2Vuc3VyZU1hcExpdGVyYWxIZWxwZXJzX2xpdGVyYWxfZW1wdHlfbWFrZUxpdGVyYWxfbWFrZUVtcHR5TGlua2VkSGFzaFNldF9lbnN1cmVTZXRMaXRlcmFsSGVscGVyc19maW5kQXN5bmNIZWxwZXJDbGFzc19maW5kQXN5bmNIZWxwZXJGdW5jdGlvbl9hc3luY1N0YXJ0U3luY19hc3luY0F3YWl0X2FzeW5jUmV0dXJuX2FzeW5jUmV0aHJvd193cmFwSnNGdW5jdGlvbkZvckFzeW5jX0l0ZXJhdGlvbk1hcmtlcnVuY2F1Z2h0RXJyb3JfYXN5bmNTdGFySGVscGVyX3N0cmVhbU9mQ29udHJvbGxlcl9TeW5jU3Rhckl0ZXJhYmxlX0Z1dHVyZV9Db250cm9sbGVyU3RyZWFtU3RyZWFtSXRlcmF0b3JfbWFrZVN5bmNTdGFySXRlcmFibGVfbWFrZUFzeW5jQXdhaXRDb21wbGV0ZXJfbWFrZUFzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJfZmluZEludGVyY2VwdG9yc0NsYXNzX2ZpbmRJbnRlcmNlcHRvcnNGdW5jdGlvbkludGVyY2VwdG9ySlNTdHJpbmdKU0FycmF5SlNOdW1iZXJKU0ludEpTRG91YmxlSlNOdWxsSlNCb29sUGxhaW5KYXZhU2NyaXB0T2JqZWN0VW5rbm93bkphdmFTY3JpcHRPYmplY3RKYXZhU2NyaXB0RnVuY3Rpb25KYXZhU2NyaXB0T2JqZWN0SlNJbmRleGFibGVKU011dGFibGVJbmRleGFibGVKU011dGFibGVBcnJheUpTRml4ZWRBcnJheUpTRXh0ZW5kYWJsZUFycmF5SlNVbm1vZGlmaWFibGVBcnJheUpTUG9zaXRpdmVJbnRKU1VJbnQzMkpTVUludDMxZmluZEluZGV4Rm9yTmF0aXZlU3ViY2xhc3NUeXBlZ2V0TmF0aXZlSW50ZXJjZXB0b3Jpc0NhbGx0eXBlZF9pc0pzU3RyaW5nQ2xhc3NhcHBsaWVzaXNUYXJnZXRpbmdNZW1iZXJpc1BvdGVudGlhbGx5VHJ1ZUpTX0NPTlNUYWxsb3dJbnRlcm9wX0Fub255bW91c19maW5kSGVscGVyRnVuY3Rpb25fZmluZEhlbHBlckNsYXNzQ2xvc3VyZUJvdW5kQ2xvc3VyZV9maW5kUnRpQ2xhc3NfVHlwZVR5cGVJbXBsQ29uc3RhbnRNYXBKU0ludm9jYXRpb25NaXJyb3JKYXZhU2NyaXB0SW5kZXhpbmdCZWhhdmlvcl9TdGFja1RyYWNlQ29uc3RhbnRTdHJpbmdNYXBDb25zdGFudFByb3RvTWFwR2VuZXJhbENvbnN0YW50TWFwQ3JlYXRlc1JldHVybnNKU05hbWVOYXRpdmVhc3NlcnRVbnJlYWNoYWJsZWdldElzb2xhdGVBZmZpbml0eVRhZ3JlcXVpcmVzUHJlYW1ibGVfbG9hZExpYnJhcnlXcmFwcGVyaWFlaW9vcmV1bndyYXBFeGNlcHRpb25pc0Z1bmN0aW9uY2hlY2tJbnRjaGVja051bWNoZWNrU3RyaW5nd3JhcEV4Y2VwdGlvbnRocm93RXhwcmVzc2lvbmNvbnZlcnREYXJ0Q2xvc3VyZVRvSlNnZXRUcmFjZUZyb21FeGNlcHRpb25fZmluZFJ0aUZ1bmN0aW9uZ2V0RmFsbFRocm91Z2hFcnJvcl9jcmVhdGVJbnZvY2F0aW9uTWlycm9ydGhyb3dDeWNsaWNJbml0ZXh0cmFjdFR5cGVBcmd1bWVudHNfY2hlY2tUeXBlQXJndW1lbnRDb3VudFVuc3VwcG9ydGVkIGluc3RhbnRpYXRpb24gYXJndW1lbnQgY291bnQ6IHR5cGVMaXRlcmFsX3J0aUltcGxDbGFzc1J0aV9ydGlVbml2ZXJzZUNsYXNzX1VuaXZlcnNlX2ZpbmRSdGlDbGFzc0ZpZWxkX2FzX2lzX2NoZWNrX3Jlc3RfZXZhbF9iaW5kYWRkUnVsZXNfaXNCb29sX2FzQm9vbE51bGxhYmxlX2NoZWNrQm9vbE51bGxhYmxlX2FzRG91YmxlTnVsbGFibGVfY2hlY2tEb3VibGVOdWxsYWJsZV9pc0ludF9hc0ludE51bGxhYmxlX2NoZWNrSW50TnVsbGFibGVfaXNOdW1fYXNOdW1OdWxsYWJsZV9jaGVja051bU51bGxhYmxlX2lzU3RyaW5nX2FzU3RyaW5nTnVsbGFibGVfY2hlY2tTdHJpbmdOdWxsYWJsZXZhbGlkYXRlZE5hdGl2ZVR5cGVkQXJyYXlPZkludE5hdGl2ZVR5cGVkQXJyYXlPZkRvdWJsZUpzR2V0TmFtZUpzQnVpbHRpbl9lbnN1cmVNZXRhQW5ub3RhdGlvbnNfTm9JbmxpbmVfVHJ5SW5saW5laXNGcm9tRW52aXJvbm1lbnRDb25zdHJ1Y3RvclVuZXhwZWN0ZWQgZnVuY3Rpb24gaXNKc0ludGVyb3BDbGFzc2lzTmF0aXZlQ2xhc3NtYWluTGlicmFyeWZvckVhY2hMaWJyYXJ5TWVtYmVybG9va3VwQ2xhc3NNZW1iZXJnZXRTdXBlckNsYXNzZm9yRWFjaExvY2FsQ2xhc3NNZW1iZXJmb3JFYWNoQ2xhc3NNZW1iZXJmb3JFYWNoQ29uc3RydWN0b3Jza2lwVW5uYW1lZE1peGluQXBwbGljYXRpb25zZm9yRWFjaFN1cGVydHlwZWdldFRoaXNUeXBlaXNHZW5lcmljQ2xhc3Npc1VubmFtZWRNaXhpbkFwcGxpY2F0aW9uZ2V0VHlwZVZhcmlhYmxlQm91bmRnZXRGdW5jdGlvblR5cGVWYXJpYWJsZXNnZXRMb2NhbEZ1bmN0aW9uVHlwZWdldEZpZWxkVHlwZWdldFVuYWxpYXNlZFR5cGVpc0VudW1DbGFzc0tFbGVtZW50RW52aXJvbm1lbnRmb3JFYWNoTWl4aW5nZXRGaWVsZENvbnN0YW50Rm9yVGVzdGluZ2lzRGVmZXJyZWRMb2FkTGlicmFyeUdldHRlcmdldEltcG9ydHNnZXRMaWJyYXJ5TWV0YWRhdGFnZXRDbGFzc01ldGFkYXRhZ2V0TWVtYmVyTWV0YWRhdGFpbmNsdWRlUGFyYW1ldGVyTWV0YWRhdGFKRWxlbWVudEVudmlyb25tZW50Zm9yRWFjaEluamVjdGVkQ2xhc3NNZW1iZXJmb3JFYWNoQ29uc3RydWN0b3JCb2R5Zm9yRWFjaE5lc3RlZENsb3N1cmVpc1N1cGVyTWl4aW5BcHBsaWNhdGlvbmdldEVmZmVjdGl2ZU1peGluQ2xhc3NnZXRUeXBlVmFyaWFibGVEZWZhdWx0VHlwZWdldEFzeW5jT3JTeW5jU3RhckVsZW1lbnRUeXBlZ2V0RnVuY3Rpb25Bc3luY09yU3luY1N0YXJFbGVtZW50VHlwZWZvckVhY2hJbnN0YW5jZUZpZWxkZm9yRWFjaERpcmVjdEluc3RhbmNlRmllbGRmb3JFYWNoUGFyYW1ldGVyZm9yRWFjaFBhcmFtZXRlckFzTG9jYWxnbG9iYWxMb2NhbHNNYXBkZWZlcnJlZF9sb2FkQ29uc3RhbnRWYWx1ZUNvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZVR5cGVDb25zdGFudFZhbHVlRGVmZXJyZWRHbG9iYWxDb25zdGFudFZhbHVlSW5zdGFudGlhdGlvbkNvbnN0YW50VmFsdWVLTG9jYWxGdW5jdGlvbkltcGFjdFVzZUNhc2VXb3JsZEltcGFjdFZpc2l0b3JJbXBsT3V0cHV0VW5pdGlzTWFpbk91dHB1dF9pbXBvcnRzb3RoZXJTaXplb3RoZXJJbXBvcnRzY21waW1wb3J0c0ZvclRlc3RpbmdPdXRwdXRVbml0KF9tYWluT3V0cHV0VW5pdF9hbGxPdXRwdXRVbml0c0lNUEFDVF9VU0VEZWZlcnJlZCBsb2FkX2ltcG9ydERlZmVyTmFtZV9jbGFzc1RvU2V0X21lbWJlclRvU2V0X2xvY2FsRnVuY3Rpb25Ub1NldF9jb25zdGFudFRvU2V0X2RlZmVycmVkSW1wb3J0RGVzY3JpcHRpb25zaW1wb3J0U2V0c21haW5TZXR1bml0RGVmZXJyZWQgTG9hZGluZ19hbGxEZWZlcnJlZEltcG9ydHNjb21tb25FbGVtZW50c19pc0V4cGxpY2l0bHlEZWZlcnJlZGNsYXNzSW1wb3J0c1RvbWVtYmVySW1wb3J0c1RvdHlwZWRlZkltcG9ydHNUb19jb2xsZWN0RGlyZWN0TWVtYmVyRGVwZW5kZW5jaWVzaXNNZW1iZXJVc2VkX2NvbGxlY3REZXBlbmRlbmNpZXNGcm9tSW1wYWN0Y29sbGVjdENvbnN0YW50c0luQm9keV9jb2xsZWN0QWxsRWxlbWVudHNBbmRDb25zdGFudHNSZXNvbHZlZEZyb21DbGFzc2FkZExpdmVJbnN0YW5jZU1lbWJlcl9jb2xsZWN0VHlwZURlcGVuZGVuY2llc19jb2xsZWN0QWxsRWxlbWVudHNBbmRDb25zdGFudHNSZXNvbHZlZEZyb21NZW1iZXJpc0dlbmVyYXRpdmVDb25zdHJ1Y3RvcmNvbGxlY3RDb25zdGFudHNGcm9tTWV0YWRhdGFfY29sbGVjdFR5cGVBcmd1bWVudERlcGVuZGVuY2llc3dvcmxkSW1wYWN0dmlzaXRJbXBhY3R1c2VkRW50aXR5VW5leHBlY3RlZCBzdGF0aWMgdXNlIGxvY2FsRnVuY3Rpb25sb2NhbEZ1bmN0aW9uc1N0YXRpY1VzZUtpbmQuQ09OU1RSVUNUT1JfSU5WT0tFU3RhdGljVXNlS2luZC5DT05TVF9DT05TVFJVQ1RPUl9JTlZPS0VTdGF0aWNVc2VLaW5kLlNUQVRJQ19JTlZPS0VTdGF0aWNVc2VLaW5kLkNMT1NVUkVfQ0FMTFN0YXRpY1VzZUtpbmQuRElSRUNUX0lOVk9LRVR5cGVVc2VLaW5kLlRZUEVfTElURVJBTGlzSW50ZXJmYWNlVHlwZVR5cGVVc2VLaW5kLkNPTlNUX0lOU1RBTlRJQVRJT05UeXBlVXNlS2luZC5JTlNUQU5USUFUSU9OVHlwZVVzZUtpbmQuTkFUSVZFX0lOU1RBTlRJQVRJT05UeXBlVXNlS2luZC5JU19DSEVDS1R5cGVVc2VLaW5kLkNBVENIX1RZUEVUeXBlVXNlS2luZC5BU19DQVNUZ2V0RXhwbGljaXRDYXN0Q2hlY2tQb2xpY3lUeXBlVXNlS2luZC5JTVBMSUNJVF9DQVNUZ2V0SW1wbGljaXREb3duY2FzdENoZWNrUG9saWN5VHlwZVVzZUtpbmQuUEFSQU1FVEVSX0NIRUNLZ2V0UGFyYW1ldGVyQ2hlY2tQb2xpY3lUeXBlVXNlS2luZC5SVElfVkFMVUVUeXBlVXNlS2luZC5UWVBFX0FSR1VNRU5UVHlwZVVzZUtpbmQuTkFNRURfVFlQRV9WQVJJQUJMRV9ORVdfUlRJVW5leHBlY3RlZCB0eXBlIHVzZTogX3VwZGF0ZUNvbnN0YW50UmVjdXJzaXZlb2xkU2V0cXVldWVjdXJyZW50U2V0X3VwZGF0ZUNsYXNzUmVjdXJzaXZlZ2V0RGVwZW5kZW5jaWVzVHJpZWQgdG8gYXNzaWduICB0byB0aGUgbWFpbiBvdXRwdXQgdW5pdCwgYnV0IGl0IHdhcyBhc3NpZ25lZCB0byBfcHJvY2Vzc0RlcGVuZGVuY2llc191cGRhdGVNZW1iZXJSZWN1cnNpdmVfdXBkYXRlTG9jYWxGdW5jdGlvbl9zaG91bGRBZGREZWZlcnJlZERlcGVuZGVuY3lfZml4RGVwZW5kZW5jeUluZm8nIGlzIGRlZmVycmVkIGJ1dCBhcHBlYXJzIHRvIGJlIGluZmVycmVkIGFzIGEgcmV0dXJuIHR5cGUgb3IgYSB0eXBlIHBhcmFtZXRlciAoZGFydGJ1Zy5jb20vMzUzMTEpLl9maXhDbGFzc0RlcGVuZGVuY3lJbmZvX2ZpeE1lbWJlckRlcGVuZGVuY3lJbmZvX2ZpeENvbnN0YW50RGVwZW5kZW5jeUluZm9yZXByZXNlbnRlZFR5cGVDbGFzcyAoaW4gY29uc3RhbnQpIFR5cGVkZWYgc2luZ2xldG9uX2NyZWF0ZU91dHB1dFVuaXRzYWRkVW5pdGltcG9ydFNldF9zZXR1cEh1bmtzVG9Mb2FkaHVua3NUb0xvYWR1c2VkSW1wb3J0TmFtZXNjb21wdXRlSW1wb3J0RGVmZXJOYW1lc29ydGVkT3V0cHV0VW5pdHNvdXRwdXRVbml0X2J1aWxkUmVzdWx0YmFja2VuZFVzYWdlZ2xvYmFsRnVuY3Rpb25EZXBlbmRlbmNpZXNnbG9iYWxDbGFzc0RlcGVuZGVuY2llc25leHRJdGVtY2xhc3NNYXBtZW1iZXJNYXBsb2NhbEZ1bmN0aW9uTWFwY29uc3RhbnRNYXBjbGVhbnVwcHJlcGFyZWNoZWNrRm9yRGVmZXJyZWRFcnJvckNhc2VzaWdub3JlRW50aXR5SW5EdW1wZHVtcGVsZW1lbnRNYXBpZCBjbHMgbWVtYmVybWVtYmVyQ29udGV4dCBsb2NhbGlzUHJpbWl0aXZldW5pdFRleHQgPE1BSU4gVU5JVD4gaW1wb3J0czplbmNsb3NpbmdMaWJyYXJ5VXJpCiAgIAogZWxlbWVudHM6CiBjb25zdGFudHM6CgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk91dHB1dCB1bml0OiBJbXBvcnREZXNjcmlwdGlvbmltcG9ydGluZ1VyaV9pbXBvcnRpbmdMaWJyYXJ5aW1wb3J0aW5nTGlicmFyeW1haW5MaWJyYXJ5VXJpX0RlZmVycmVkSW1wb3J0SW1wb3J0U2V0TGF0dGljZV9pbXBvcnRJbmRleF9lbXB0eVNldF9hZGRfd3JhcGFJbXBvcnRzYkltcG9ydHNsYXN0QUluZGV4bGFzdEJJbmRleGltcG9ydEFpbXBvcnRCSW1wb3J0U2V0X3RyYW5zaXRpb25zSW1wb3J0U2V0KHNpemU6IFdvcmtRdWV1ZXBlbmRpbmdDbGFzc2VzcGVuZGluZ01lbWJlcnNwZW5kaW5nQ29uc3RhbnRzX2ltcG9ydFNldHNpbXBvcnRzVG9BZGRDbGFzc1dvcmtJdGVtTWVtYmVyV29ya0l0ZW1Db25zdGFudFdvcmtJdGVtTGF0ZU91dHB1dFVuaXREYXRhQnVpbGRlcl9vdXRwdXRVbml0RGF0YXJlZ2lzdGVyQ29sb2NhdGVkTWVtYmVyc2V4aXN0aW5nRW50aXR5bmV3RW50aXR5X21lbWJlclRvVW5pdG91dHB1dFVuaXRGb3JNZW1iZXJvdXRwdXQtdW5pdC1kYXRhbWFpbk91dHB1dFVuaXRfY2xhc3NUb1VuaXRfbG9jYWxGdW5jdGlvblRvVW5pdF9jb25zdGFudFRvVW5pdGNvbnZlcnRDbGFzc01hcGNvbnZlcnRNZW1iZXJNYXBjb252ZXJ0Q29uc3RhbnRNYXBjbGFzc1RvVW5pdG1lbWJlclRvVW5pdGNvbnN0YW50VG9Vbml0ZGVmZXJyZWRJbXBvcnREZXNjcmlwdGlvbnNyZWFkSW1wb3J0c3JlYWRDbGFzc01hcHJlYWRNZW1iZXJNYXByZWFkQ29uc3RhbnRNYXBpbXBvcnREZWZlck5hbWVyZWFkSW1wb3J0TWFwcmVhZFN0cmluZ01hcG91dHB1dFVuaXRJbmRpY2Vzd3JpdGVJbXBvcnRzd3JpdGVDbGFzc01hcHdyaXRlTWVtYmVyTWFwd3JpdGVDb25zdGFudE1hcHdyaXRlSW1wb3J0TWFwd3JpdGVTdHJpbmdNYXBpbXBvcnREZXNjcmlwdGlvbm91dHB1dFVuaXRGb3JDbGFzc05vIG91dHB1dCB1bml0IGZvciBjbGFzcyBvdXRwdXRVbml0Rm9yQ2xhc3NGb3JUZXN0aW5nTm8gb3V0cHV0IHVuaXQgZm9yIG1lbWJlciBvdXRwdXRVbml0Rm9yTWVtYmVyRm9yVGVzdGluZ2NvbnN0YW50c0ZvclRlc3RpbmdvdXRwdXRVbml0Rm9yQ29uc3RhbnRvdXRwdXRVbml0Rm9yQ29uc3RhbnRGb3JUZXN0aW5naXNEZWZlcnJlZENsYXNzaGFzT25seU5vbkRlZmVycmVkSW1wb3J0UGF0aHNvdXRwdXRVbml0RnJvbW91dHB1dFVuaXRUb2hhc09ubHlOb25EZWZlcnJlZEltcG9ydFBhdGhzVG9Db25zdGFudHJlZ2lzdGVyQ29uc3RhbnREZWZlcnJlZFVzZWdldEltcG9ydERlZmVyTmFtZU5vIGRlZmVycmVkIG5hbWUgZm9yIGdldEltcG9ydE5hbWVzY29tcHV0ZURlZmVycmVkTWFwb21pdHRlZFVuaXRzPHVubmFtZWQ+cGFydEZpbGVOYW1lc0RlcGVuZGVuY2llc3JlZ2lzdGVySW1wb3J0RGVwZW5kZW5jeUluZm9UeXBlRGVwZW5kZW5jeVZpc2l0b3JfZGVwZW5kZW5jaWVzX2ltcG9ydF9jb21tb25FbGVtZW50c3Zpc2l0RnV0dXJlT3JUeXBldmlzaXRBbnlUeXBldW5hbGlhc2VkcGFyYW1ldGVyVHlwZXNvcHRpb25hbFBhcmFtZXRlclR5cGVzbmFtZWRQYXJhbWV0ZXJUeXBlc3Zpc2l0RnVuY3Rpb25UeXBlVmFyaWFibGV2aXNpdFR5cGVWYXJpYWJsZVR5cGVkZWZlcnJlZFBhcnRGaWxlTmFtZW91dFBhdGhvdXROYW1lLnBhcnQuanNkYXJ0MmpzLmRpYWdub3N0aWNzLmNvZGVfbG9jYXRpb25Db2RlTG9jYXRpb25yZWxhdGl2aXplU2NoZW1lTG9jYXRpb25QYWNrYWdlTG9jYXRpb25VcmlMb2NhdGlvbkFueUxvY2F0aW9uZHVtcF9pbmZvQ2h1bmtlZENvbnZlcnNpb25TaW5rU3RyaW5nQ29udmVyc2lvblNpbmtJbnRlcmNlcHRvckNvbnN0YW50VmFsdWVHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0anNBc3RFbGVtZW50SW5mb0NvbGxlY3Rvcl9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzX2VudGl0eVRvSW5mb19jb25zdGFudFRvSW5mb19vdXRwdXRUb0luZm9fY29uc3RhbnRUb05vZGVfbm9kZURhdGFfdW5pdEluZm9Gb3JDb25zdGFudHNob3VsZEtlZXBpbXBhY3RzaW5saW5lQ291bnRsaWJuYW1lc2l6ZU9mZnVuY3Rpb25JbmZvdmlzaXRGdW5jdGlvbnRvcExldmVsRnVuY3Rpb25zZmllbGRJbmZvdG9wTGV2ZWxWYXJpYWJsZXNjbGF6el9yZXN1bHRPZk1lbWJlcnJlc3VsdE9mTWVtYmVyX3Jlc3VsdE9mUGFyYW1ldGVycmVzdWx0T2ZQYXJhbWV0ZXJjb250YWluaW5nQ2xhc3Npc0RlZmluaXRlbHlUcnVlY29kZU9mX3VuaXRJbmZvRm9yTWVtYmVyZmllbGREYXRhZmllbGRBbmFseXNpc2dldEZpZWxkRGF0YWNvdmVyYWdlSWRjbG9zdXJlU2l6ZV9hZGRDbG9zdXJlSW5mb191bml0SW5mb0ZvckNsYXNzZnVuY3Rpb25zY2xvc3VyZUluZm9jbG9zdXJlc0NsYXNzIG1lbWJlciBub3QgYSBmdW5jdGlvbiBvciBmaWVsZG5lZWRlZENsYXNzZXN2aXNpdENsb3N1cmVDbGFzc2NhbGxNZXRob2Rpc0ZhY3RvcnlDb25zdHJ1Y3RvcmluZmVycmVkUGFyYW1ldGVyVHlwZXNwYXJhbWV0ZXJJbmRleHNpZGVFZmZlY3RzZ2V0U2lkZUVmZmVjdHNPZkVsZW1lbnRpbmxpbmVkQ291bnRmdW5jdGlvbktpbmRuZXN0ZWRDbG9zdXJlc2Nsb3N1cmVfaW5mb0Zyb21PdXRwdXRVbml0Z2VuZXJhdGVkU2l6ZVNlbGVjdGlvbnNlbGVjdGVkRW50aXR5cmVjZWl2ZXJDb25zdHJhaW50SW5mb1JlcG9ydGVycmVwb3J0SW5saW5lZGlubGluZWRGcm9tRHVtcCBpbmZvdXNlQmluYXJ5Rm9ybWF0aW5mb0NvbGxlY3Rvcl9wcm9ncmFtU2l6ZV9lbnRpdHlUb05vZGVzaW5saW5lTWFwX3N0YWNrRHVtcCBJbmZvcmVnaXN0ZXJJbXBhY3R1bnJlZ2lzdGVySW1wYWN0Z2V0UmV0YWluaW5nc2VsZWN0aW9uc2xvY2F0ZU1lbWJlcnNyZWdpc3RlckVudGl0eUFzdHJlZ2lzdGVyQ29uc3RhbnRBc3RzaG91bGRFbWl0VGV4dGVudGVyTm9kZWVtaXRfdGV4dGV4aXROb2RlY2xvc2luZ3NpemVPZk5vZGVhc3RhbGxJbmZvYnVpbGREdW1wSW5mb0RhdGFkdW1wSW5mb0JpbmFyeWR1bXBJbmZvSnNvbmpzb25CdWZmZXJzdGFydENodW5rZWRDb252ZXJzaW9uaXNCYWNrd2FyZENvbXBhdGlibGVpbmZvLmpzb25WaWV3IHRoZSBkdW1wZWQgLmluZm8uanNvbiBmaWxlIGF0IGh0dHBzOi8vZGFydC1sYW5nLmdpdGh1Yi5pby9kdW1wLWluZm8tdmlzdWFsaXplci5pbmZvLmRhdGFVc2UgYHBhY2thZ2U6ZGFydDJqc19pbmZvYCB0byBwYXJzZSBhbmQgcHJvY2VzcyB0aGUgZHVtcGVkIC5pbmZvLmRhdGEgZmlsZS5zdG9wd2F0Y2hmdW5jdGlvbkVudGl0aWVzc2VsZWN0aW9udXNlSW5mb2ZpZWxkRW50aXR5b3V0ZXJJbmZvaW5saW5lZGlubGluZWRJbmZvZGVmZXJyZWRGaWxlc2VudHJ5cG9pbnRkYXJ0MmpzVmVyc2lvbmNvbXBpbGF0aW9uTW9tZW50Y29tcGlsYXRpb25EdXJhdGlvbnRvSnNvbkR1cmF0aW9uZHVtcEluZm9EdXJhdGlvbm5vU3VjaE1ldGhvZEVuYWJsZWRpc05vU3VjaE1ldGhvZFVzZWRpc1J1bnRpbWVUeXBlVXNlZGlzSXNvbGF0ZUluVXNlaXNGdW5jdGlvbkFwcGx5VXNlZGlzTWlycm9yc1VzZWRtaW5pZmllZF9Db2RlRGF0YWVudGl0aWVzRW50aXR5TGlicmFyeUVudGl0eUltcG9ydEVudGl0eWltcG9ydCggZGVmZXJyZWRDbGFzc0VudGl0eWlzQ2xvc3VyZVR5cGVkZWZFbnRpdHlUeXBlVmFyaWFibGVFbnRpdHl0eXBlRGVjbGFyYXRpb25GaWVsZEVudGl0eUZ1bmN0aW9uRW50aXR5cGFyYW1ldGVyU3RydWN0dXJlU1lOQ19TVEFSQVNZTkNfU1RBUmlzWWllbGRpbmdhc3luY1BhcnNlclN0YXRlQ29uc3RydWN0b3JFbnRpdHlDb25zdHJ1Y3RvckJvZHlFbnRpdHlMb2NhbFBhcmFtZXRlclN0cnVjdHVyZXBhcmFtZXRlci1zdHJ1Y3R1cmVyZXF1aXJlZFBhcmFtZXRlcnNmcm9tVHlwZW9wdGlvbmFsUGFyYW1ldGVyc3RvdGFsUGFyYW1ldGVyc2NhbGxTdHJ1Y3R1cmVzaG9ydFRleHRQYXJhbWV0ZXJTdHJ1Y3R1cmUocmVxdWlyZWRQYXJhbWV0ZXJzPXBvc2l0aW9uYWxQYXJhbWV0ZXJzPW5hbWVkUGFyYW1ldGVycz17fSx0eXBlUGFyYW1ldGVycz1kYXJ0MmpzLmVucXVldWVTdGF0aWNVc2VLaW5kVHlwZVVzZUtpbmRfcmVzb2x1dGlvbmNvZGVnZW5FbnF1ZXVlckZvclRlc3RpbmdFbnF1ZXVlUmVzb2x1dGlvbkVucXVldWVyIGhhcyBub3QgYmVlbiBjcmVhdGVkIHlldC5vbkVtcHR5Rm9yVGVzdGluZ3NraXBFbnF1ZXVlckNoZWNrRm9yVGVzdGluZ2lzUmVzb2x1dGlvblF1ZXVlcXVldWVJc0VtcHR5RW5xdWV1ZXJMaXN0ZW5lcnJlZ2lzdGVySW5zdGFudGlhdGVkVHlwZWlzR2xvYmFsbmF0aXZlVXNhZ2VyZWdpc3RlckltcGxlbWVudGVkQ2xhc3NyZWdpc3RlckdldE9mU3RhdGljRnVuY3Rpb25yZWdpc3RlckNsb3N1cml6ZWRNZW1iZXJyZWdpc3RlclVzZWRFbGVtZW50cmVnaXN0ZXJVc2VkQ29uc3RhbnRvblF1ZXVlT3Blbm9uUXVldWVFbXB0eXJlY2VudENsYXNzZXNvblF1ZXVlQ2xvc2VkRW5xdWV1ZXJJbXBsX2ltcGFjdFN0cmF0ZWd5Y2hlY2tDbGFzc3Byb2Nlc3NTdGF0aWNVc2Vwcm9jZXNzVHlwZVVzZXByb2Nlc3NEeW5hbWljVXNlcHJvY2Vzc0NvbnN0YW50VXNlY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5cmVzb2x1dGlvbi5jaGVja2RpcmVjdGx5SW5zdGFudGlhdGVkQ2xhc3Nlc19yZWNlbnRDbGFzc2VzX3JlY2VudENvbnN0YW50c193b3JsZEJ1aWxkZXJfd29ya0l0ZW1CdWlsZGVyX2Fubm90YXRpb25zRGF0YV9pbXBhY3RWaXNpdG9yX3F1ZXVlcmVzb2x1dGlvbiBlbnF1ZXVlciBxdWV1ZSBpcyBub3QgZW1wdHkuX3JlZ2lzdGVySW5zdGFudGlhdGVkVHlwZWdsb2JhbERlcGVuZGVuY3lyZXNvbHV0aW9uLnR5cGVVc2VyZWdpc3RlclR5cGVJbnN0YW50aWF0aW9uX2FwcGx5Q2xhc3NVc2Vwcm9jZXNzQ2xhc3NNZW1iZXJzdXNlU2V0VW5lbnF1ZXVlZCB1c2Ugb2YgTWVtYmVyVXNlLk5PUk1BTE1lbWJlclVzZS5DTE9TVVJJWkVfSU5TVEFOQ0VNZW1iZXJVc2UuQ0xPU1VSSVpFX1NUQVRJQ19hcHBseU1lbWJlclVzZV9hZGRUb1dvcmtMaXN0X3JlZ2lzdGVyQ2xvc3VyaXplZE1lbWJlcmdldCBvZiBzdGF0aWMgZnVuY3Rpb25DbGFzc1VzZS5JTlNUQU5USUFURURpbnN0YW50aWF0ZWQgY2xhc3NDbGFzc1VzZS5JTVBMRU1FTlRFRGltcGxlbWVudGVkIGNsYXNzcmVzb2x1dGlvbi5keW5hbWljVXNlcmVzb2x1dGlvbi5jb25zdGFudFVzZWNvbnN0YW50IHVzZXJlc29sdXRpb24uc3RhdGljVXNlX3JlZ2lzdGVySXNDaGVja3JlZ2lzdGVyVHlwZVZhcmlhYmxlVHlwZUxpdGVyYWxfcmVnaXN0ZXJOYW1lZFR5cGVWYXJpYWJsZU5ld1J0aXJlZ2lzdGVySXNDaGVja3JlZ2lzdGVyTmFtZWRUeXBlVmFyaWFibGVOZXdSdGljbG9zdXJpemVkIG1lbWJlcl9mb3JFYWNoaXNNZW1iZXJQcm9jZXNzZWRyZWdpc3RlclByb2Nlc3NlZE1lbWJlcnJlY2VudHNfb25RdWV1ZUVtcHR5RW5xdWV1ZXIocHJvY2Vzc2VkTWVtYmVyc3JlZ2lzdGVyUHJvY2Vzc2VkRWxlbWVudEludGVybmFsd29ya0l0ZW1jcmVhdGVXb3JrSXRlbVJlc29sdXRpb24gd29yayBsaXN0IGlzIGNsb3NlZC4gVHJ5aW5nIHRvIGFkZCB1c2VkIGVsZW1lbnRFbnF1ZXVlckltcGxJbXBhY3RWaXNpdG9yV29ya0l0ZW1CdWlsZGVyZGFydDJqcy5mcm9udGVuZF9zdHJhdGVneUZyb250ZW5kU3RyYXRlZ3lub1N1Y2hNZXRob2RSZWdpc3RyeWltcGFjdEJ1aWxkZXJBbm5vdGF0aW9uUHJvY2Vzc29yZXh0cmFjdE5hdGl2ZUFubm90YXRpb25zZXh0cmFjdEpzSW50ZXJvcEFubm90YXRpb25zcHJvY2Vzc0pzSW50ZXJvcEFubm90YXRpb25zbmF0aXZlRGF0YUJ1aWxkZXJJbXBhY3RDYWNoZURlbGV0ZXJkYXJ0MmpzLmFic3RyYWN0X3ZhbHVlX2RvbWFpblByaW1pdGl2ZUNvbnN0YW50VmFsdWVBYnN0cmFjdEJvb2xUcnVlRmFsc2VNYXliZWlzRGVmaW5pdGVseUZhbHNlaXNQb3RlbnRpYWxseUZhbHNldHJ1ZU9yTWF5YmV0cnVlT3JGYWxzZW1heWJlT3JGYWxzZUFic3RyYWN0Qm9vbC5jcmVhdGVEb21haW5jcmVhdGVTZWxlY3RvclN0cmF0ZWd5QWJzdHJhY3RWYWx1ZUFic3RyYWN0VmFsdWVXaXRoUHJlY2lzaW9uYWJzdHJhY3RWYWx1ZWlzUHJlY2lzZUFic3RyYWN0VmFsdWVXaXRoUHJlY2lzaW9uKCwgaXNQcmVjaXNlOiBBYnN0cmFjdFZhbHVlRG9tYWlubm9uTnVsbFR5cGVncm93YWJsZUxpc3RUeXBlZml4ZWRMaXN0VHlwZXVpbnQzMVR5cGV1aW50MzJUeXBlcG9zaXRpdmVJbnRUeXBlY29uc3RMaXN0VHlwZWNvbnN0U2V0VHlwZWNvbnN0TWFwVHlwZWVtcHR5VHlwZXN5bmNTdGFySXRlcmFibGVUeXBlYXN5bmNGdXR1cmVUeXBlYXN5bmNTdGFyU3RyZWFtVHlwZWNyZWF0ZUZyb21TdGF0aWNUeXBlY2xhc3NSZWxhdGlvbkNsYXNzUmVsYXRpb24uc3VidHlwZWNyZWF0ZU5vbk51bGxFeGFjdGNyZWF0ZU51bGxhYmxlRXhhY3RjcmVhdGVOb25OdWxsU3ViY2xhc3NjcmVhdGVOb25OdWxsU3VidHlwZWNyZWF0ZU51bGxhYmxlU3VidHlwZWlzVHlwZWRBcnJheWNvdWxkQmVUeXBlZEFycmF5ZXhjbHVkZU51bGxpbmNsdWRlTnVsbGNvbnRhaW5zVHlwZWNvbnRhaW5zT25seVR5cGVpc0luc3RhbmNlT2ZPck51bGxpc0luc3RhbmNlT2Zpc0V4YWN0aXNFeGFjdE9yTnVsbGdldEV4YWN0Q2xhc3Npc1ByaW1pdGl2ZU51bWJlcmlzUHJpbWl0aXZlQm9vbGVhbmlzUHJpbWl0aXZlQXJyYXlpc0luZGV4YWJsZVByaW1pdGl2ZWlzRml4ZWRBcnJheWlzRXh0ZW5kYWJsZUFycmF5aXNNdXRhYmxlQXJyYXlpc011dGFibGVJbmRleGFibGVpc0FycmF5aXNQcmltaXRpdmVTdHJpbmdpc0ludGVyY2VwdG9yaXNJbnRlZ2VyaXNVSW50MzJpc1VJbnQzMWlzUG9zaXRpdmVJbnRlZ2VyaXNQb3NpdGl2ZUludGVnZXJPck51bGxpc0ludGVnZXJPck51bGxpc051bWJlcmlzTnVtYmVyT3JOdWxsaXNEb3VibGVpc0RvdWJsZU9yTnVsbGlzQm9vbGVhbmlzQm9vbGVhbk9yTnVsbGlzU3RyaW5naXNTdHJpbmdPck51bGxpc1ByaW1pdGl2ZU9yTnVsbHVuaW9uT2ZNYW55YXJlRGlzam9pbnRjb21wdXRlQWJzdHJhY3RWYWx1ZUZvckNvbnN0YW50aXNDb250YWluZXJjcmVhdGVDb250YWluZXJWYWx1ZW9yaWdpbmFsVmFsdWVhbGxvY2F0aW9uTm9kZWFsbG9jYXRpb25FbGVtZW50Z2V0Q29udGFpbmVyRWxlbWVudFR5cGVnZXRDb250YWluZXJMZW5ndGhjcmVhdGVTZXRWYWx1ZWdldFNldEVsZW1lbnRUeXBlY3JlYXRlTWFwVmFsdWVnZXRNYXBLZXlUeXBlZ2V0TWFwVmFsdWVUeXBlaXNEaWN0aW9uYXJ5Y3JlYXRlRGljdGlvbmFyeVZhbHVlbWFwcGluZ3Njb250YWluc0RpY3Rpb25hcnlLZXlnZXREaWN0aW9uYXJ5VmFsdWVGb3JLZXlpc1NwZWNpYWxpemF0aW9uT2ZzcGVjaWFsaXphdGlvbmdlbmVyYWxpemF0aW9uZ2V0R2VuZXJhbGl6YXRpb25nZXRBbGxvY2F0aW9uTm9kZWdldEFsbG9jYXRpb25FbGVtZW50aXNQcmltaXRpdmVWYWx1ZWNyZWF0ZVByaW1pdGl2ZVZhbHVlZ2V0UHJpbWl0aXZlVmFsdWVjb21wdXRlUmVjZWl2ZXJuZWVkc05vU3VjaE1ldGhvZEhhbmRsaW5nZ2V0QWJzdHJhY3RWYWx1ZUZvck5hdGl2ZU1ldGhvZFBhcmFtZXRlclR5cGVzdXBlcnNldHN1YnNldGlzSW5sb2NhdGVTaW5nbGVNZW1iZXJpc0pzSW5kZXhhYmxlQW5kSXRlcmFibGVpc0ZpeGVkTGVuZ3RoSnNJbmRleGFibGVnZXRDb21wYWN0VGV4dFRyaXZpYWxBYnN0cmFjdFZhbHVlVHJpdmlhbEFic3RyYWN0VmFsdWVEb21haW5Ucml2aWFsQWJzdHJhY3RWYWx1ZURvbWFpbi5nZXREaWN0aW9uYXJ5VmFsdWVGb3JLZXlUcml2aWFsQWJzdHJhY3RWYWx1ZURvbWFpbi5jb250YWluc0RpY3Rpb25hcnlLZXlUcml2aWFsQWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRNYXBWYWx1ZVR5cGVUcml2aWFsQWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRNYXBLZXlUeXBlVHJpdmlhbEFic3RyYWN0VmFsdWVEb21haW4uZ2V0U2V0RWxlbWVudFR5cGVUcml2aWFsQWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRDb250YWluZXJFbGVtZW50VHlwZVRyaXZpYWxTZWxlY3RvclN0cmF0ZWd5Y3JlYXRlU2VsZWN0b3JDb25zdHJhaW50c2luaXRpYWxDb25zdHJhaW50YXBwbGllZFVubmFtZWR3b3JsZGFwcGxpZXNVbm5hbWVkVHJpdmlhbFVuaXZlcnNlU2VsZWN0b3JDb25zdHJhaW50c2FkZFJlY2VpdmVyQ29uc3RyYWludGNhbkhpdFRyaXZpYWxVbml2ZXJzZVNlbGVjdG9yQ29uc3RyYWludHM6bWFza3NVbml2ZXJzZVNlbGVjdG9yQ29uc3RyYWludHNTZWxlY3RvckNvbnN0cmFpbnRzU3RyYXRlZ3lUeXBlR3JhcGhJbmZlcnJlcmNvbnRhaW5lcl90eXBlX21hc2suZGFydGRpY3Rpb25hcnlfdHlwZV9tYXNrLmRhcnRmbGF0X3R5cGVfbWFzay5kYXJ0Zm9yd2FyZGluZ190eXBlX21hc2suZGFydG1hcF90eXBlX21hc2suZGFydHNldF90eXBlX21hc2suZGFydHR5cGVfbWFzay5kYXJ0dW5pb25fdHlwZV9tYXNrLmRhcnR2YWx1ZV90eXBlX21hc2suZGFydENvbW1vbk1hc2tzX2Nsb3NlZFdvcmxkX2R5bmFtaWNUeXBlX25vbk51bGxUeXBlX251bGxUeXBlX2ludFR5cGVfdWludDMyVHlwZV91aW50MzFUeXBlX3Bvc2l0aXZlSW50VHlwZV9kb3VibGVUeXBlX251bVR5cGVfYm9vbFR5cGVfZnVuY3Rpb25UeXBlX2xpc3RUeXBlX2NvbnN0TGlzdFR5cGVfZml4ZWRMaXN0VHlwZV9ncm93YWJsZUxpc3RUeXBlX3NldFR5cGVfY29uc3RTZXRUeXBlX21hcFR5cGVfY29uc3RNYXBUeXBlX3N0cmluZ1R5cGVfdHlwZVR5cGVfc3luY1N0YXJJdGVyYWJsZVR5cGVfYXN5bmNGdXR1cmVUeXBlX2FzeW5jU3RhclN0cmVhbVR5cGVfaW5kZXhhYmxlUHJpbWl0aXZlVHlwZV9yZWFkYWJsZUFycmF5VHlwZV9tdXRhYmxlQXJyYXlUeXBlX3VubW9kaWZpYWJsZUFycmF5VHlwZV9pbnRlcmNlcHRvclR5cGVfY2Fub25pY2FsaXplZFR5cGVNYXNrc2dldENhY2hlZE1hc2tjcmVhdGVNYXNrY2FjaGVkTWFza3NpbmRleGFibGVQcmltaXRpdmVUeXBlcmVhZGFibGVBcnJheVR5cGVtdXRhYmxlQXJyYXlUeXBldW5tb2RpZmlhYmxlQXJyYXlUeXBlaW50ZXJjZXB0b3JUeXBlc2F0aXNmaWVzaW50ZXJzZWN0c0NsYXNzUmVsYXRpb24uZXhhY3RDbGFzc1JlbGF0aW9uLnRoaXNFeHByZXNzaW9udHlwZU1hc2tfY29udGFpbnNUeXBlX2NvbnRhaW5zT25seVR5cGVjb250YWluc09ubHlfaXNJbnN0YW5jZU9mT3JOdWxsaXNJbXBsZW1lbnRlZGV4cHJlc3Npb25NYXNraXNEaXNqb2ludGlzTnVsbGFibGVfaXNOdWxsc2luZ2xlQ2xhc3Npc1ZhbHVldmFsdWVNYXNrX2NhbkJlUHJpbWl0aXZlTnVtYmVyX2NhbkJlUHJpbWl0aXZlQXJyYXlfY2FuQmVQcmltaXRpdmVCb29sZWFuX2NhbkJlUHJpbWl0aXZlU3RyaW5nX2lzSW5kZXhhYmxlUHJpbWl0aXZlY29udGFpbnNPbmx5U3RyaW5nY29udGFpbnNPbmx5SW50Y29udGFpbnNPbmx5TnVtX2lzTnVtYmVyT3JOdWxsY29udGFpbnNPbmx5RG91YmxlY29udGFpbnNPbmx5Qm9vbF9pc0Jvb2xlYW5Pck51bGxfaXNQcmltaXRpdmVPck51bGxmb3J3YXJkVG9oYXNBbnlTdHJpY3RTdWJjbGFzc21peGluVXNlc09mY29udGFpbnNNYXNraXNJbk1hc2tnZXRWYWx1ZUZvcktleUNvbnRhaW5lclR5cGVNYXNrY29udGFpbmVyLXR5cGUtbWFza3JlYWRUcmVlTm9kZU9yTnVsbHJlYWRNZW1iZXJPck51bGxUeXBlTWFza0tpbmQuY29udGFpbmVyd3JpdGVUcmVlTm9kZU9yTnVsbHdyaXRlTWVtYmVyT3JOdWxsZXF1YWxzRGlzcmVnYXJkTnVsbGZvcndhcmRJbnRlcnNlY3Rpb25pc0VtcHR5T3JOdWxsbmV3RWxlbWVudFR5cGVuZXdGb3J3YXJkVG9Db250YWluZXIoLCBlbGVtZW50OiAsIGxlbmd0aDogRGljdGlvbmFyeVR5cGVNYXNrZGljdGlvbmFyeS10eXBlLW1hc2tfdHlwZU1hcHR5cGVNYXBUeXBlTWFza0tpbmQuZGljdGlvbmFyeW5ld0tleVR5cGVuZXdWYWx1ZVR5cGVEaWN0aW9uYXJ5KCwga2V5OiB2YWx1ZTogLCBtYXA6IEZsYXRUeXBlTWFza2ZsYXQtdHlwZS1tYXNrRU1QVFlFWEFDVFNVQkNMQVNTU1VCVFlQRW5vbk51bGxFbXB0eW5vbk51bGxFeGFjdG5vbk51bGxTdWJjbGFzc25vbk51bGxTdWJ0eXBlbm9ybWFsaXplZGhhc0FueVN0cmljdFN1YnR5cGVoYXNPbmx5U3ViY2xhc3Nlc2NvbW1vbk1hc2tzcmVhZENsYXNzT3JOdWxsVHlwZU1hc2tLaW5kLmZsYXR3cml0ZUNsYXNzT3JOdWxsX2NsYXNzUXVlcnlDbGFzc1F1ZXJ5LkVYQUNUaXNTdWJjbGFzc0NsYXNzUXVlcnkuU1VCQ0xBU1NDbGFzc1F1ZXJ5LlNVQlRZUEVpc1VuaW9uaXNGb3J3YXJkaW5naXNTaW5nbGVJbXBsZW1lbnRhdGlvbk9mZmxhdE90aGVyb3RoZXJCYXNldW5pb25TYW1ldW5pb25TdHJpY3RTdWJjbGFzc3VuaW9uU3RyaWN0U3VidHlwZWNvbWJpbmVkY29tbW9uU3ViY2xhc3Nlc1N1YmNsYXNzUmVzdWx0S2luZC5FTVBUWVN1YmNsYXNzUmVzdWx0S2luZC5FWEFDVDFTdWJjbGFzc1Jlc3VsdEtpbmQuRVhBQ1QyU3ViY2xhc3NSZXN1bHRLaW5kLlNVQkNMQVNTMVN1YmNsYXNzUmVzdWx0S2luZC5TVUJDTEFTUzJTdWJjbGFzc1Jlc3VsdEtpbmQuU1VCVFlQRTFTdWJjbGFzc1Jlc3VsdEtpbmQuU1VCVFlQRTJTdWJjbGFzc1Jlc3VsdEtpbmQuU0VUX2lzRGlzam9pbnRIZWxwZXJzdHJpY3RTdWJjbGFzc2VzT2ZzdHJpY3RTdWJ0eXBlc09maW50ZXJzZWN0aW9uU2FtZWludGVyc2VjdGlvblN0cmljdFN1YmNsYXNzaW50ZXJzZWN0aW9uRW1wdHloYXNFbGVtZW50SW5oYXNBbnlTdWJjbGFzc1RoYXRNaXhlc2hhc0FueVN1YmNsYXNzVGhhdEltcGxlbWVudHNoYXNBbnlTdWJjbGFzc09mTWl4aW5Vc2VUaGF0SW1wbGVtZW50c21peGluVXNlc25lZWRzTm9TdWNoTWV0aG9kaW5jbHVkZXNDbG9zdXJlQ2FsbGV2ZXJ5U3VidHlwZUlzU3ViY2xhc3NPZk9yTWl4aW5Vc2VPZmlzU3ViY2xhc3NPZk1peGluVXNlT2ZvdGhlck1hc2tbZW1wdHldbnVsbHxleGFjdD1zdWJjbGFzcz1zdWJ0eXBlPUZvcndhcmRpbmdUeXBlTWFza1N1YmNsYXNzIHNob3VsZCBpbXBsZW1lbnQgaGFzaENvZGUgZ2V0dGVyQWxsb2NhdGlvblR5cGVNYXNrTWFwVHlwZU1hc2ttYXAtdHlwZS1tYXNrVHlwZU1hc2tLaW5kLm1hcG5ld01hcFR5cGVNYXNrTWFwKFNldFR5cGVNYXNrc2V0LXR5cGUtbWFza1R5cGVNYXNrS2luZC5zZXRTZXQoSW5jcmVhc2luZ1R5cGVNYXNrU2V0aXNBbGxfbWFza3M8YWxsPjxub25lPlR5cGVNYXNrU2VsZWN0b3JTdHJhdGVneVR5cGVNYXNrS2luZFR5cGVNYXNrS2luZC51bmlvblR5cGVNYXNrS2luZC52YWx1ZWZsYXRjb250YWluZXJkaWN0aW9uYXJ5VHlwZU1hc2tDYW5ub3QgY3JlYXRlIGV4YWN0IHR5cGUgbWFzayBmb3IgdW5pbnN0YW50aWF0ZWQgLgpleGFjdE9yRW1wdHlDYW5ub3QgY3JlYXRlIHN1YmNsYXNzIHR5cGUgbWFzayBmb3IgdW5pbnN0YW50aWF0ZWQgdG9wbW9zdGdldEx1Yk9mSW5zdGFudGlhdGVkU3ViY2xhc3Nlc2dldEx1Yk9mSW5zdGFudGlhdGVkU3VidHlwZXNub25OdWxsRXhhY3RPckVtcHR5dW5pb25PZlVuZXhwZWN0ZWQgVHlwZU1hc2tLaW5kIG5vbkZvcndhcmRpbmdNYXNrYXNzZXJ0SXNOb3JtYWxpemVkIGlzIG5vdCBub3JtYWxpemVkOiBnZXROb3ROb3JtYWxpemVkUmVhc29uRXhhY3QgIGlzIG5vdCBpbnN0YW50aWF0ZWQuU3ViY2xhc3MgIGRvZXMgbm90IGhhdmUgYW55IHN1YmNsYXNzZXMuU3VidHlwZSAgb25seSBoYXMgc3ViY2xhc3Nlcy5zdWJtYXNrZGlzam9pbnRNYXNrc3N1Ym1hc2tSZWFzb25TdWJtYXNrIFVua25vd24gdHlwZSBtYXNrIFVuaW9uVHlwZU1hc2t1bmlvbi10eXBlLW1hc2tNQVhfVU5JT05fTEVOR1RIUEVSRk9STV9FWFRSQV9DT05UQUlOU19DSEVDS2Rpc2pvaW50dW5pb25PZkhlbHBlcmZsYXRNYXNraW5MaXN0SW5kZXhjb3ZlcmVkbmV3TWFza2ZsYXR0ZW51c2VTdWJjbGFzc21hc2tzQmFzZXNjYW5kaWRhdGVzY29tbW9uU3VwZXJ0eXBlc09mYmVzdEVsZW1lbnRiZXN0S2luZGJlc3RTaXplaXNJbnN0YW50aWF0ZWRTdHJpY3RTdWJjbGFzc2lzRXhwbGljaXRseUluc3RhbnRpYXRlZHN0cmljdFN1YmNsYXNzQ291bnRzdHJpY3RTdWJ0eXBlQ291bnRuZXdMaXN0aW50ZXJzZWN0aW9uc25ld0l0ZXJhYmxlc2xvd0NvbnRhaW5zQ2hlY2tjb250YWluZWRJbkFueU9mbWFza0Rpc3JlZ2FyZE51bGxkaXNqb2ludE1hc2tjb250YWluZWRUeXBlTWFzayBiYXNlZCBjb250YWlubWVudCBjaGVjayBmYWlsZWQgZm9yIG1hc2tzU3RyaW5nVW5pb24oVmFsdWVUeXBlTWFza3ZhbHVlLXR5cGUtbWFza1ZhbHVlKGZvcm1hdFR5cGVFbXB0eW51bGxGbGFnc3ViRmxhZyB8IGlzQ2FsbGVkT25jZXRocm93c0Fsd2F5c3R5cGVPZlNlbmR0eXBlT2ZHZXR0ZXJ0eXBlT2ZJdGVyYXRvcnR5cGVPZkl0ZXJhdG9yTW92ZU5leHR0eXBlT2ZJdGVyYXRvckN1cnJlbnRHbG9iYWxUeXBlSW5mZXJlbmNlRWxlbWVudERhdGFjb21wcmVzc1R5cGVzSW5mZXJyZXJhbmFseXplTWFpbmlzVHJpdmlhbHJlc3VsdFR5cGVPZlNlbGVjdG9yaXNGaXhlZEFycmF5Q2hlY2tlZEZvckdyb3dhYmxldHlwZU9mTmV3TGlzdHR5cGVPZkxpc3RMaXRlcmFsVHlwZSBpbmZlcmVuY2V0eXBlc0luZmVycmVySW50ZXJuYWxyZXN1bHRzRm9yVGVzdGluZ21haW5FbGVtZW50cmVzdWx0c25vU3VjaE1ldGhvZERhdGFjYXRlZ29yaXplQ29tcGxleEltcGxlbWVudGF0aW9uc0dsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzSW1wbGdsb2JhbC10eXBlLWluZmVyZW5jZS1yZXN1bHRzX2RlYWRGaWVsZFJlc3VsdF9kZWFkTWV0aG9kUmVzdWx0X3RyaXZpYWxQYXJhbWV0ZXJSZXN1bHRtZW1iZXJSZXN1bHRzcGFyYW1ldGVyUmVzdWx0c2NoZWNrZWRGb3JHcm93YWJsZUxpc3RzcmV0dXJuc0xpc3RFbGVtZW50VHlwZVNldF9hbGxvY2F0ZWRMaXN0c2dldE1lbWJlckNvbnRleHROb2RlcmVhZExvY2FsTWFwcmVhZFRyZWVOb2Rlc2FsbG9jYXRlZExpc3RzcmVhZFRyZWVOb2RlTWFwd3JpdGVMb2NhbE1hcHdyaXRlVHJlZU5vZGVzd3JpdGVUcmVlTm9kZU1hcHVuZXhwZWN0ZWQgaW5wdXQ6IENvbnN0cnVjdG9yQm9keUVsZW1lbnRzIGFyZSBjcmVhdGVkIGFmdGVyIGdsb2JhbCB0eXBlIGluZmVyZW5jZSwgbm8gZGF0YSBpcyBhdmFpYWJsZSBmb3IgdGhlbS5pc0Nsb3N1cmVDYWxsaXNJbmRleFNldHJldHVybnNMaXN0RWxlbWVudFR5cGVyZXR1cm5zTWFwVmFsdWVUeXBldHlwZU9mTWVtYmVyV2l0aFNlbGVjdG9yaXNJbmRleFVuZXhwZWN0ZWQgbWVtYmVyIGN0b3JDYWxsR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdEltcGxnbG9iYWwtdHlwZS1pbmZlcmVuY2UtbWVtYmVyLXJlc3VsdF9kYXRhd3JpdGVWYWx1ZU9yTnVsbFRyaXZpYWxHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0c190cml2aWFsTWVtYmVyUmVzdWx0VHJpdmlhbEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHRUcml2aWFsR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdC53cml0ZVRvRGF0YVNpbmtEZWFkRmllbGRHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0ZG9tYWluRGVhZEZpZWxkR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdC53cml0ZVRvRGF0YVNpbmtEZWFkTWV0aG9kR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdGRhcnQyanMuc291cmNlX2luZm9ybWF0aW9uSmF2YVNjcmlwdE5vZGVTb3VyY2VJbmZvcm1hdGlvbmhhc1NvdXJjZUluZm9ybWF0aW9ucG9zaXRpb25Tb3VyY2VJbmZvcm1hdGlvbndyaXRlVG9EYXRhU2lua0ludGVybmFsc3RhcnRQb3NpdGlvbmlubmVyUG9zaXRpb25lbmRQb3NpdGlvbnNvdXJjZUxvY2F0aW9uc2lubGluaW5nQ29udGV4dEZyYW1lQ29udGV4dGZyYW1lLWNvbnRleHRjYWxsSW5mb3JtYXRpb25pbmxpbmVkTWV0aG9kTmFtZShGcmFtZUNvbnRleHQ6IFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3ljcmVhdGVCdWlsZGVyRm9yQ29udGV4dGJ1aWxkU291cmNlTWFwcGVkTWFya2Vyb25Db21wbGV0ZVNvdXJjZUluZm9ybWF0aW9uQnVpbGRlcmZvckNvbnRleHRidWlsZERlY2xhcmF0aW9uYnVpbGRTdHViYnVpbGRHZW5lcmljYnVpbGRDcmVhdGVidWlsZFJldHVybmJ1aWxkSW1wbGljaXRSZXR1cm5idWlsZExvb3BidWlsZEdldGJ1aWxkU2V0YnVpbGRDYWxsYnVpbGRJZmJ1aWxkTmV3YnVpbGRUaHJvd2J1aWxkQXNzZXJ0YnVpbGRWYXJpYWJsZURlY2xhcmF0aW9uYnVpbGRBd2FpdGJ1aWxkWWllbGRidWlsZEFzeW5jQm9keWJ1aWxkQXN5bmNFeGl0YnVpbGRGb3JlaWduQ29kZWJ1aWxkU3RyaW5nSW50ZXJwb2xhdGlvbmJ1aWxkRm9ySW5JdGVyYXRvcmJ1aWxkRm9ySW5Nb3ZlTmV4dGJ1aWxkRm9ySW5DdXJyZW50YnVpbGRGb3JJblNldGJ1aWxkSW5kZXhidWlsZEluZGV4U2V0YnVpbGRCaW5hcnlidWlsZFVuYXJ5YnVpbGRUcnlidWlsZENhdGNoYnVpbGRJc2J1aWxkQXNidWlsZFN3aXRjaGJ1aWxkU3dpdGNoQ2FzZWJ1aWxkTGlzdExpdGVyYWxidWlsZEdvdG9Tb3VyY2VMb2NhdGlvbnNvdXJjZS1sb2NhdGlvbnNvdXJjZVVyaXNvdXJjZU5hbWVoYXNTb3VyY2VMb2NhdGlvbnJlYWRVcmlzb3VyY2VMb2NhdGlvbndyaXRlVXJpOltEaXJlY3RTb3VyY2VMb2NhdGlvbkFic3RyYWN0U291cmNlTG9jYXRpb25fc291cmNlRmlsZV9sb2NhdGlvbkludmFsaWQgc291cmNlIGxvY2F0aW9uIGluIG9mZnNldD0sIGxlbmd0aD1mcm9tTG9jYXRpb25mcm9tT3RoZXJPZmZzZXRTb3VyY2VMb2NhdGlvbk5vU291cmNlTG9jYXRpb25NYXJrZXJzaG9ydE5hbWU8bm8tbG9jYXRpb24+RnJhbWVFbnRyeXB1c2hMb2NhdGlvbmlzRW1wdHlQb3Bpc1B1c2hpc1BvcGNvbXB1dGVFbGVtZW50TmFtZUZvclNvdXJjZU1hcHNjb21wdXRlU3R1YlN1ZmZpeFtmdW5jdGlvbi1lbnRyeSRwb3NpdGlvbmFsQXJndW1lbnRDb3VudGdldE9yZGVyZWROYW1lZEFyZ3VtZW50c2pzX2JhY2tlbmQuYmFja2VuZEZ1bmN0aW9uQ29tcGlsZXJpbml0aWFsaXplRnVuY3Rpb25JbmxpbmVDYWNoZV91bmtub3duX211c3ROb3RJbmxpbmVfbWF5SW5saW5lSW5Mb29wTXVzdE5vdE91dHNpZGVfY2FuSW5saW5lSW5Mb29wTXVzdE5vdE91dHNpZGVfY2FuSW5saW5lSW5Mb29wTWF5SW5saW5lT3V0c2lkZV9jYW5JbmxpbmVfY2FjaGVkRGVjaXNpb25zX25vSW5saW5lRnVuY3Rpb25zX3RyeUlubGluZUZ1bmN0aW9uc2ZvckVhY2hOb0lubGluZW1hcmtBc05vSW5saW5lZm9yRWFjaFRyeUlubGluZW1hcmtBc1RyeUlubGluZWNoZWNrRnVuY3Rpb25qOmdldEN1cnJlbnRDYWNoZURlY2lzaW9uRm9yVGVzdGluZ2NhbklubGluZWluc2lkZUxvb3BkZWNpc2lvbm1hcmtBc0lubGluYWJsZW9sZERlY2lzaW9uQ2FuJ3QgbWFyayAgYXMgbm9uLWlubGluYWJsZSBhbmQgaW5saW5hYmxlIGF0IHRoZSBzYW1lIHRpbWUubWFya0FzTm9uSW5saW5hYmxlbWFya2VkQXNOb0lubGluZW1hcmtlZEFzVHJ5SW5saW5lY2hlY2tlZE1vZGVIZWxwZXJzcnRpU3Vic3RpdHV0aW9uc3J0aUVuY29kZXJydGlSZWNpcGVFbmNvZGVydHJhY2VycnRpVGFnc2ZpeGVkTmFtZXNDb2RlZ2VuSW5wdXRzSW1wbEluZmVycmVkRGF0YWdldFNpZGVFZmZlY3RzT2ZTZWxlY3RvcmdldENhbm5vdFRocm93aXNDYWxsZWRJbkxvb3BnZXRNaWdodEJlUGFzc2VkVG9BcHBseUluZmVycmVkRGF0YUJ1aWxkZXJyZWdpc3RlclNpZGVFZmZlY3RzRnJlZWdldFNpZGVFZmZlY3RzQnVpbGRlcnJlZ2lzdGVyTWlnaHRCZVBhc3NlZFRvQXBwbHlnZXRDdXJyZW50bHlLbm93bk1pZ2h0QmVQYXNzZWRUb0FwcGx5YWRkRnVuY3Rpb25DYWxsZWRJbkxvb3ByZWdpc3RlckNhbm5vdFRocm93SW5mZXJyZWREYXRhSW1wbGluZmVycmVkLWRhdGFfZnVuY3Rpb25zQ2FsbGVkSW5Mb29wX3NpZGVFZmZlY3RzX3NpZGVFZmZlY3RzRnJlZUVsZW1lbnRzX2VsZW1lbnRzVGhhdENhbm5vdFRocm93X2Z1bmN0aW9uc1RoYXRNaWdodEJlUGFzc2VkVG9BcHBseWZ1bmN0aW9uc0NhbGxlZEluTG9vcHNpZGVFZmZlY3RzRnJlZUVsZW1lbnRzZWxlbWVudHNUaGF0Q2Fubm90VGhyb3dmdW5jdGlvbnNUaGF0TWlnaHRCZVBhc3NlZFRvQXBwbHlmaWVsZE5ldmVyQ2hhbmdlc3NldERlcGVuZHNPbkluc3RhbmNlUHJvcGVydHlTdG9yZXNldENoYW5nZXNJbnN0YW5jZVByb3BlcnR5c2V0QWxsU2lkZUVmZmVjdHNzZXREZXBlbmRzT25Tb21ldGhpbmdTaWRlIGVmZmVjdHMgaGF2ZSBub3QgYmVlbiBjb21wdXRlZCB5ZXQuX21ha2VTaWRlRWZmZWN0c0luZmVycmVkRGF0YUJ1aWxkZXJJbXBsX3NpZGVFZmZlY3RzQnVpbGRlcnNwcmVtYXR1cmVTaWRlRWZmZWN0QWNjZXNzZXNmb3JFYWNoTm9UaHJvd3Nmb3JFYWNoTm9TaWRlRWZmZWN0c0luZmVycmVkIGRhdGEgaGFzIGFscmVhZHkgYmVlbiBjb21wdXRlZC5zaWRlRWZmZWN0c0J1aWxkZXJzc2lkZUVmZmVjdHNCdWlsZGVyZW1wdHlXb3JrTGlzdGluUXVldWVkZXBlbmRpbmdUcml2aWFsSW5mZXJyZWREYXRhX2FsbFNpZGVFZmZlY3RzZGFydDJqcy5qc19tb2RlbC5zdHJhdGVneUtlcm5lbFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3lSZWNpcGVFbmNvZGVyUmVjaXBlRW5jb2RlckltcGxNb2R1bGFyRW1pdHRlckNvZGVFbWl0dGVyVGFza0pzQmFja2VuZFN0cmF0ZWd5X2VsZW1lbnRNYXBfY3VzdG9tRWxlbWVudHNDb2RlZ2VuQW5hbHlzaXNfbmF0aXZlQ29kZWdlbkVucXVldWVyX25hbWVyX2NvZGVnZW5JbXBhY3RUcmFuc2Zvcm1lcl9lbWl0dGVyVGFza19ydGlDaGVja3NCdWlsZGVyZ2VuZXJhdGVkQ29kZWNvZGVnZW5JbXBhY3RzRm9yVGVzdGluZ25hbWVyRm9yVGVzdGluZ25hdGl2ZUNvZGVnZW5FbnF1ZXVlcnJ0aUNoZWNrc0J1aWxkZXJGb3JUZXN0aW5nZ2V0R2VuZXJhdGVkQ29kZUZvclRlc3RpbmdKc0JhY2tlbmRTdHJhdGVneS5lbGVtZW50TWFwIGhhcyBub3QgYmVlbiBjcmVhdGVkIHlldC5jdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpc0N1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzIGhhcyBub3QgYmVlbiBjcmVhdGVkIHlldC5ydGlDaGVja3NCdWlsZGVyUnVudGltZVR5cGVzQ2hlY2tzQnVpbGRlciBoYXMgbm90IGJlZW4gY3JlYXRlZCB5ZXQucnRpQ2hlY2tzQnVpbGRlckNsb3NlZFJ1bnRpbWVUeXBlc0NoZWNrcyBoYXMgYWxyZWFkeSBiZWVuIGNvbXB1dGVkLmxpdmVNZW1iZXJVc2FnZV9nbG9iYWxMb2NhbHNNYXBjbG9zdXJlRGF0YUJ1aWxkZXJjbG9zZWRXb3JsZEJ1aWxkZXJjb252ZXJ0Q2xvc2VkV29ybGRjbG9zdXJlTW9kZWxzbGF0ZU91dHB1dFVuaXREYXRhQnVpbGRlcm5hdGl2ZURhdGFydGlOZWVkcnVudGltZVR5cGVzSW1wbG9uZVNob3RJbnRlcmNlcHRvckRhdGFpbnRlcmNlcHRvckRhdGFfb25Db2RlZ2VuRW5xdWV1ZXJTdGFydHByb2dyYW1FbnZtYWluQ29tcG9uZW50ZGFydFR5cGVzbGl2ZU5hdGl2ZUNsYXNzZXNjcmVhdGVFbWl0dGVybmF0aXZlRW1pdHRlcmdlbmVyYXRlQ29kZWVudGl0eUxvb2t1cGNvbXBvbmVudExvb2t1cHVzZURhdGFLaW5kc3JlZ2lzdGVyQ29kZWdlbldyaXRlcnJlZ2lzdGVyQ29kZWdlblJlYWRlcnJlZ2lzdGVyRW50aXR5TG9va3VwcmVnaXN0ZXJDb21wb25lbnRMb29rdXB0cmFuc2Zvcm1Db2RlZ2VuSW1wYWN0ZW1pdERpYWdub3N0aWNnZXRTb3VyY2VTcGFucmVnaXN0ZXJFbnRpdHlSZWFkZXJlYXJseU1lbWJlckluZGV4TGltaXRwcmVwYXJlRm9yQ29kZWdlblNlcmlhbGl6YXRpb25lbnRpdHlXcml0ZXJtZW1iZXJJbmRleGdldEVudGl0eUtlcm5lbENvZGVnZW5Xb3JrSXRlbUJ1aWxkZXJfYmFja2VuZFN0cmF0ZWd5X2NvZGVnZW5SZXN1bHRzX2VudGl0eUxvb2t1cF9jb21wb25lbnRMb29rdXBLZXJuZWxDb2RlZ2VuV29ya0l0ZW1LZXJuZWxTc2FCdWlsZGVyX3Rhc2tfZHVtcEluZm9UYXNrX3NvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3lfaW5saW5lQ2FjaGVfaW5saW5lRGF0YUNhY2hlcmVnaXN0cnlvbWl0SW1wbGljaXRDYXN0c2dldE1lbWJlclRoaXNUeXBlS2VybmVsVG9UeXBlSW5mZXJlbmNlTWFwSW1wbF90YXJnZXRSZXN1bHRzX3Jlc3VsdE9mZ2V0UmV0dXJuVHlwZU9mcmVjZWl2ZXJUeXBlT2ZJbnZvY2F0aW9ucmVjZWl2ZXJUeXBlT2ZHZXRyZWNlaXZlclR5cGVPZkRpcmVjdEdldHJlY2VpdmVyVHlwZU9mU2V0bGlzdExpdGVyYWxpc0pzSW5kZXhhYmxlSXRlcmF0b3JpbmZlcnJlZEluZGV4VHlwZWdldEluZmVycmVkVHlwZU9mZ2V0SW5mZXJyZWRUeXBlT2ZQYXJhbWV0ZXJ0eXBlRnJvbU5hdGl2ZUJlaGF2aW9yZGFydDJqcy5rZXJuZWwuZnJvbnRlbmRfc3RyYXRlZ3lDbG9zdXJlU2NvcGVNb2RlbFNjb3BlTW9kZWxLRmllbGRBbmFseXNpc05hdGl2ZVJlc29sdXRpb25FbnF1ZXVlcktlcm5lbEZyb250ZW5kU3RyYXRlZ3luYXRpdmVCYXNpY0RhdGFCdWlsZGVyX25hdGl2ZUJhc2ljRGF0YV9jb21waWxlclRhc2tfcnVudGltZVR5cGVzTmVlZEJ1aWxkZXJfYW5ub3RhdGlvblByb2Nlc3Nvcl9tb2R1bGFyU3RyYXRlZ3lfaXJBbm5vdGF0aW9uRGF0YV9uYXRpdmVEYXRhQnVpbGRlcl9iYWNrZW5kVXNhZ2VCdWlsZGVyX25hdGl2ZVJlc29sdXRpb25FbnF1ZXVlcl9jdXN0b21FbGVtZW50c1Jlc29sdXRpb25BbmFseXNpc19maWVsZEFuYWx5c2lzaW1wYWN0VHJhbnNmb3JtZXJuYXRpdmVSZXNvbHV0aW9uRW5xdWV1ZXJGb3JUZXN0aW5nZmllbGRBbmFseXNpc0ZvclRlc3RpbmdfdmFsaWRhdGVJbnRlcmNlcHRvckltcGxlbWVudHNBbGxPYmplY3RNZXRob2RzaW50ZXJjZXB0b3JDbGFzc2ludGVyY2VwdG9yTWVtYmVyTWVtYmVyICBub3Qgb3ZlcnJpZGRlbiBpbiAuIEZvdW5kIHJ0aU5lZWRCdWlsZGVyX2NyZWF0ZVJ1bnRpbWVUeXBlc05lZWRCdWlsZGVyY2xhc3NRdWVyaWVzY2xhc3NIaWVyYXJjaHlCdWlsZGVyYW5ub3RhdGlvbnNEYXRhQnVpbGRlcnByYWdtYUFubm90YXRpb25zaW50ZXJjZXB0b3JEYXRhQnVpbGRlckFubm90YXRpb25Qcm9jZXNzb3IgaGFzIG5vdCBiZWVuIGNyZWF0ZWQuTmF0aXZlQmFzaWNEYXRhIGhhcyBub3QgYmVlbiBjb21wdXRlZCB5ZXQua2VybmVsUmVzdWx0YWRkQ29tcG9uZW50cmVnaXN0ZXJIdG1sSXNMb2FkZWRpckFubm90YXRpb25EYXRhRm9yVGVzdGluZ21vZHVsYXJTdHJhdGVneUZvclRlc3RpbmdydW50aW1lVHlwZXNOZWVkQnVpbGRlckZvclRlc3RpbmdLZXJuZWxXb3JrSXRlbUJ1aWxkZXJfaW1wYWN0VHJhbnNmb3JtZXJfbmF0aXZlTWVtYmVyUmVzb2x2ZXJfYW5ub3RhdGlvbnNEYXRhQnVpbGRlcl9jbG9zdXJlTW9kZWxzS2VybmVsV29ya0l0ZW1nZXRNZW1iZXJOb2RlcmVzb2x2ZU5hdGl2ZU1lbWJlcnByYWdtYUFubm90YXRpb25EYXRhZ2V0UHJhZ21hQW5ub3RhdGlvbkRhdGFyZWdpc3RlclByYWdtYUFubm90YXRpb25zbW9kdWxhck1lbWJlckRhdGFnZXRNb2R1bGFyTWVtYmVyRGF0YXNjb3BlTW9kZWxjbG9zdXJlU2NvcGVNb2RlbHJlZ2lzdGVyU3RhdGljRmllbGRpbml0aWFsaXplckNvbXBsZXhpdHlpbXBhY3RCdWlsZGVyRGF0YWNvbXB1dGVXb3JsZEltcGFjdHZhcmlhYmxlU2NvcGVNb2RlbG5vSW5saW5ldHJ5SW5saW5lZGlzYWJsZUZpbmFsbm9FbGlzaW9ubm9UaHJvd3Nub1NpZGVFZmZlY3RzYXNzdW1lRHluYW1pY2FzOnRydXN0YXM6Y2hlY2t0eXBlczp0cnVzdHR5cGVzOmNoZWNrcGFyYW1ldGVyOnRydXN0cGFyYW1ldGVyOmNoZWNrZG93bmNhc3Q6dHJ1c3Rkb3duY2FzdDpjaGVja3RyYW5zZm9ybVJlc29sdXRpb25JbXBhY3RLZXJuZWxXb3JrSXRlbShLZXJuZWxNb2R1bGFyU3RyYXRlZ3l1c2VBc3NlcnRzaW5mZXJFZmZlY3RpdmVseUZpbmFsVmFyaWFibGVUeXBlc2NvbXB1dGVJbXBhY3R1c2VJbXBhY3REYXRhRm9yVGVzdGluZ2RhcnQyanMubGlicmFyeV9sb2FkZXJEYXJ0MmpzVGFyZ2V0X2NvbXBpbGVySW5wdXRfY29tcGlsZXJPdXRwdXRmb3JjZVNlcmlhbGl6YXRpb25rZXJuZWwgbG9hZGVyX3BsYXRmb3JtLmRpbGxpc0RpbGwuZGlsbHNlcmlhbGl6ZSBkaWxsV3JpdGluZyBkaWxsIHRvIGRpbGxPdXRwdXRpclNpbmtfdG9SZXN1bHRzZWFyY2hkZXBkYXJ0Q29yZXJvb3Q9LGxpYnJhcmllcz1TZXJpYWxpemF0aW9uVGFza19wcm92aWRlclNlcmlhbGl6YXRpb25zZXJpYWxpemUgZGF0YVdyaXRpbmcgZGF0YSB0byBkZXNlcmlhbGl6ZSBkaWxsUmVhZGluZyBkaWxsIGZyb20gZGlsbElucHV0ZGVzZXJpYWxpemUgZGF0YVJlYWRpbmcgZGF0YSBmcm9tIHNoYXJkc2hhcmRzY29kZWdlblJlc3VsdHNlcmlhbGl6ZSBjb2RlZ2VucmVnaXN0ZXJFbnRpdHlXcml0ZXJkZXNlcmlhbGl6ZSBjb2RlZ2VucmVhZGVyZGVyZWdpc3RlckNvZGVnZW5SZWFkZXIgbWVtYmVycyBmcm9tIHNlcmlhbGl6ZUdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzZGVzZXJpYWxpemVHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0c25ld0Nsb3NlZFdvcmxkbmV3SW5mZXJyZWREYXRhU2VyaWFsaXphdGlvblN0cmF0ZWd5Qnl0ZXNJbk1lbW9yeVNlcmlhbGl6YXRpb25TdHJhdGVneUJ5dGVzT25EaXNrU2VyaWFsaXphdGlvblN0cmF0ZWd5d29ybGQuZGF0YU9iamVjdHNJbk1lbW9yeVNlcmlhbGl6YXRpb25TdHJhdGVneVR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZVR5cGVSZWNpcGVTaWRlRWZmZWN0c0hWaXNpdG9ydmlzaXRBYnN2aXNpdEFkZHZpc2l0Qml0QW5kdmlzaXRCaXROb3R2aXNpdEJpdE9ydmlzaXRCaXRYb3J2aXNpdEJvdW5kc0NoZWNrdmlzaXRDcmVhdGV2aXNpdENyZWF0ZUJveHZpc2l0RGl2aWRldmlzaXRFeGl0dmlzaXRFeGl0VHJ5dmlzaXRGaWVsZEdldHZpc2l0RmllbGRTZXR2aXNpdEZvcmVpZ25Db2RldmlzaXRHZXRMZW5ndGh2aXNpdEdvdG92aXNpdEdyZWF0ZXJ2aXNpdEdyZWF0ZXJFcXVhbHZpc2l0SWRlbnRpdHl2aXNpdEluZGV4dmlzaXRJbmRleEFzc2lnbnZpc2l0SW50ZXJjZXB0b3J2aXNpdEludm9rZUNsb3N1cmV2aXNpdEludm9rZUR5bmFtaWNHZXR0ZXJ2aXNpdEludm9rZUR5bmFtaWNNZXRob2R2aXNpdEludm9rZUR5bmFtaWNTZXR0ZXJ2aXNpdEludm9rZVN0YXRpY3Zpc2l0SW52b2tlU3VwZXJ2aXNpdEludm9rZUNvbnN0cnVjdG9yQm9keXZpc2l0SW52b2tlR2VuZXJhdG9yQm9keXZpc2l0SXN2aXNpdElzVmlhSW50ZXJjZXB0b3J2aXNpdExhdGVWYWx1ZXZpc2l0TGF6eVN0YXRpY3Zpc2l0TGVzc3Zpc2l0TGVzc0VxdWFsdmlzaXRMaXRlcmFsTGlzdHZpc2l0TG9jYWxHZXR2aXNpdExvY2FsU2V0dmlzaXRMb2NhbFZhbHVldmlzaXRMb29wQnJhbmNodmlzaXRNdWx0aXBseXZpc2l0TmVnYXRldmlzaXRPbmVTaG90SW50ZXJjZXB0b3J2aXNpdFBhcmFtZXRlclZhbHVldmlzaXRQaGl2aXNpdFJhbmdlQ29udmVyc2lvbnZpc2l0UmVhZE1vZGlmeVdyaXRldmlzaXRSZWZ2aXNpdFJlbWFpbmRlcnZpc2l0U2hpZnRMZWZ0dmlzaXRTaGlmdFJpZ2h0dmlzaXRTdGF0aWN2aXNpdFN0YXRpY1N0b3JldmlzaXRTdHJpbmdDb25jYXR2aXNpdFN0cmluZ2lmeXZpc2l0U3VidHJhY3R2aXNpdFRocm93RXhwcmVzc2lvbnZpc2l0VHJ1bmNhdGluZ0RpdmlkZXZpc2l0VHlwZUNvbnZlcnNpb252aXNpdFByaW1pdGl2ZUNoZWNrdmlzaXRCb29sQ29udmVyc2lvbnZpc2l0VHlwZUtub3dudmlzaXRZaWVsZHZpc2l0VHlwZUluZm9SZWFkUmF3dmlzaXRUeXBlSW5mb1JlYWRWYXJpYWJsZXZpc2l0VHlwZUluZm9FeHByZXNzaW9udmlzaXRJc1Rlc3R2aXNpdEFzQ2hlY2t2aXNpdEFzQ2hlY2tTaW1wbGV2aXNpdFN1YnR5cGVDaGVja3Zpc2l0TG9hZFR5cGV2aXNpdEluc3RhbmNlRW52aXJvbm1lbnR2aXNpdFR5cGVFdmFsdmlzaXRUeXBlQmluZEhHcmFwaFZpc2l0b3J2aXNpdERvbWluYXRvclRyZWVmcmFtZXZpc2l0QmFzaWNCbG9ja2RvbWluYXRlZEJsb2Nrc3Zpc2l0UG9zdERvbWluYXRvclRyZWVfRnJhbWVISW5zdHJ1Y3Rpb25WaXNpdG9yY3VycmVudEJsb2NrdmlzaXRJbnN0cnVjdGlvbnZpc2l0SW5zdHJ1Y3Rpb25MaXN0aW5zdHJ1Y3Rpb25IR3JhcGh0aGlzSW5zdHJ1Y3Rpb25uZWVkc0FzeW5jUmV3cml0ZWFzeW5jRWxlbWVudFR5cGVleHBsaWNpdFJlY2VpdmVyUGFyYW1ldGVyaXNSZWN1cnNpdmVNZXRob2RjYWxsZWRJbkxvb3BibG9ja3NhbGxvY2F0ZWRGaXhlZExpc3RzYWRkTmV3QmxvY2thZGRCbG9ja2FkZE5ld0xvb3BIZWFkZXJCbG9ja2xvb3BJbmZvcm1hdGlvbmlzQ29uc3RhbnRhZGRBdEV4aXRhZGREZWZlcnJlZENvbnN0YW50YWRkQ29uc3RhbnRJbnRhZGRDb25zdGFudEludEFzVW5zaWduZWRhZGRDb25zdGFudERvdWJsZWFkZENvbnN0YW50U3RyaW5nYWRkQ29uc3RhbnRTdHJpbmdGcm9tTmFtZWFkZENvbnN0YW50Qm9vbGFkZENvbnN0YW50TnVsbGFkZENvbnN0YW50VW5yZWFjaGFibGVhc3NpZ25Eb21pbmF0b3JzcHJlZGVjZXNzb3JzaXNMb29wSGVhZGVyYXNzaWduQ29tbW9uRG9taW5hdG9yYXNzaWduRG9taW5hdG9yUmFuZ2VzZGZzTnVtYmVyZG9taW5hdG9yRGZzSW5kb21pbmF0b3JEZnNPdXRpc1ZhbGlkdmFsaWRhdG9ydmlzaXRHcmFwaEhHcmFwaChIQmFzZVZpc2l0b3J2aXNpdEJpbmFyeUFyaXRobWV0aWN2aXNpdEludm9rZUJpbmFyeXZpc2l0QmluYXJ5Qml0T3B2aXNpdEludm9rZXZpc2l0SW52b2tlRHluYW1pY3Zpc2l0SW52b2tlRHluYW1pY0ZpZWxkdmlzaXRJbnZva2VVbmFyeXZpc2l0Q29uZGl0aW9uYWxCcmFuY2h2aXNpdENvbnRyb2xGbG93dmlzaXRGaWVsZEFjY2Vzc3Zpc2l0UmVsYXRpb25hbHZpc2l0Q2hlY2t2aXNpdEp1bXB2aXNpdExvY2FsQWNjZXNzU3ViR3JhcGhTdWJFeHByZXNzaW9uY29uZGl0aW9uRXhwcmVzc2lvbkhJbnN0cnVjdGlvbkxpc3RpbnRlcm5hbEFkZEFmdGVyY3Vyc29yaW50ZXJuYWxBZGRCZWZvcmVkZXRhY2hfdHJ1bmNhdGVkQ29udGFpbnNGb3JBc3NlcnRpc0luQmFzaWNCbG9ja3VzZWRCeUhCYXNpY0Jsb2NrU1RBVFVTX05FV1NUQVRVU19PUEVOU1RBVFVTX0NMT1NFRHN0YXR1c3BoaXNibG9ja0Zsb3dwYXJlbnRMb29wSGVhZGVyaXNMaXZlc3VjY2Vzc29yc2RvbWluYXRvcndpdGhJZGlzTmV3aXNPcGVuaXNDbG9zZWRzZXRCbG9ja0Zsb3dibG9ja0luZm9jb250aW51YXRpb25pc0xhYmVsZWRCbG9ja2VuY2xvc2luZ0xvb3BIZWFkZXJhZGRBZnRlcmFkZEF0RW50cnlub3RpZnlBZGRlZFRvQmxvY2ttb3ZlQXRFeGl0YWRkUGhpcGhpcmVtb3ZlUGhpbm90aWZ5UmVtb3ZlZEZyb21CbG9ja2FkZEJlZm9yZWFkZFN1Y2Nlc3NvcnBvc3RQcm9jZXNzTG9vcEhlYWRlcmFkZEJhY2tFZGdlcmV3cml0ZXJld3JpdGVJbnB1dHJld3JpdGVXaXRoQmV0dGVyVXNlcmJldHRlcmNoZWNrZWRJbnB1dGRvbWluYXRlc2lzRXhpdEJsb2NrYWRkRG9taW5hdGVkQmxvY2tyZW1vdmVEb21pbmF0ZWRCbG9ja3ByZWRlY2Vzc29yYmxvY2swYmxvY2sxZm9yRWFjaFBoaXNhdmVkZm9yRWFjaEluc3RydWN0aW9uSEJhc2ljQmxvY2soaWRDb3VudGVyX3VzZUd2blVOREVGSU5FRF9UWVBFQ09ERVRZUEVfR1VBUkRfVFlQRUNPREVCT1VORFNfQ0hFQ0tfVFlQRUNPREVJTlRFR0VSX0NIRUNLX1RZUEVDT0RFSU5URVJDRVBUT1JfVFlQRUNPREVBRERfVFlQRUNPREVESVZJREVfVFlQRUNPREVNVUxUSVBMWV9UWVBFQ09ERVNVQlRSQUNUX1RZUEVDT0RFU0hJRlRfTEVGVF9UWVBFQ09ERUJJVF9PUl9UWVBFQ09ERUJJVF9BTkRfVFlQRUNPREVCSVRfWE9SX1RZUEVDT0RFTkVHQVRFX1RZUEVDT0RFQklUX05PVF9UWVBFQ09ERU5PVF9UWVBFQ09ERUlERU5USVRZX1RZUEVDT0RFR1JFQVRFUl9UWVBFQ09ERUdSRUFURVJfRVFVQUxfVFlQRUNPREVMRVNTX1RZUEVDT0RFTEVTU19FUVVBTF9UWVBFQ09ERVNUQVRJQ19UWVBFQ09ERVNUQVRJQ19TVE9SRV9UWVBFQ09ERUZJRUxEX0dFVF9UWVBFQ09ERVRZUEVfQ09OVkVSU0lPTl9UWVBFQ09ERVRZUEVfS05PV05fVFlQRUNPREVJTlZPS0VfU1RBVElDX1RZUEVDT0RFSU5ERVhfVFlQRUNPREVJU19UWVBFQ09ERUlOVk9LRV9EWU5BTUlDX1RZUEVDT0RFU0hJRlRfUklHSFRfVFlQRUNPREVUUlVOQ0FUSU5HX0RJVklERV9UWVBFQ09ERUlTX1ZJQV9JTlRFUkNFUFRPUl9UWVBFQ09ERVRZUEVfSU5GT19SRUFEX1JBV19UWVBFQ09ERVRZUEVfSU5GT19SRUFEX1ZBUklBQkxFX1RZUEVDT0RFVFlQRV9JTkZPX0VYUFJFU1NJT05fVFlQRUNPREVGT1JFSUdOX0NPREVfVFlQRUNPREVSRU1BSU5ERVJfVFlQRUNPREVHRVRfTEVOR1RIX1RZUEVDT0RFQUJTX1RZUEVDT0RFQk9PTF9DT05WRVJTSU9OX1RZUEVDT0RFUFJJTUlUSVZFX0NIRUNLX1RZUEVDT0RFSVNfVEVTVF9UWVBFQ09ERUFTX0NIRUNLX1RZUEVDT0RFQVNfQ0hFQ0tfU0lNUExFX1RZUEVDT0RFU1VCVFlQRV9DSEVDS19UWVBFQ09ERUxPQURfVFlQRV9UWVBFQ09ERUlOU1RBTkNFX0VOVklST05NRU5UX1RZUEVDT0RFVFlQRV9FVkFMX1RZUEVDT0RFVFlQRV9CSU5EX1RZUEVDT0RFaW5zdHJ1Y3Rpb25UeXBlaW5wdXRzOiB1c2VHdm5zZXRVc2VHdm5pc01vdmFibGVpc1B1cmVoYXNTaWRlRWZmZWN0c2RlcGVuZHNPblNvbWV0aGluZ2NhblRocm93aXNBbGxvY2F0aW9ubm9uQ2hlY2tpc0NvbnRyb2xGbG93aXNDb25mbGljdGluZ2dldERhcnRSZWNlaXZlcm9ubHlUaHJvd3NOU01ndm5FcXVhbHNoYXNTYW1lVHlwZXR5cGVFcXVhbHN0eXBlQ29kZWlucHV0c0xlbmd0aG90aGVySW5wdXRzZGF0YUVxdWFsc2d2bkhhc2hDb2RldGFyZ2V0QmxvY2tyZW1vdmVVc2VycmVtb3ZlRnJvbUxpc3RjaGFuZ2VVc2VvbGRJbnB1dG5ld0lucHV0cmVwbGFjZUFsbFVzZXJzRG9taW5hdGVkQnluZXdJbnN0cnVjdGlvbm1vdmVCZWZvcmVpc0NvbnN0YW50Qm9vbGVhbmlzQ29uc3RhbnROdWxsaXNDb25zdGFudE51bWJlcmlzQ29uc3RhbnRJbnRlZ2VyaXNDb25zdGFudFN0cmluZ2lzQ29uc3RhbnRMaXN0aXNDb25zdGFudE1hcGlzQ29uc3RhbnRGYWxzZWlzQ29uc3RhbnRUcnVlaXNDb2RlTW90aW9uSW52YXJpYW50aXNKc1N0YXRlbWVudGNvbnZlcnRUeXBlaXNGdW5jdGlvblR5cGVpc1ZvaWRpc0Z1dHVyZU9yY3JlYXRpbmcgY29tcG91bmQgY2hlY2sgdG8gICh0aGlzID0gaW50ZXJmYWNlVHlwZWhhc1NhbWVMb29wSGVhZGVyQXMoKURvbWluYXRlZFVzZXNfc291cmNlX2luc3RydWN0aW9uc19pbmRleGVzZXhjbHVkZURvbWluYXRvcmV4Y2x1ZGVQaGlPdXRFZGdlc19jb21wdXRlb2xkSW5zdHJ1Y3Rpb25JbnB1dCAgY2hhbmdlZC4KICBGb3VuZDogCiAgRXhwZWN0ZWQ6IGlzU2luZ2xldG9uaW5zdHJ1Y3Rpb25zX2FkZFVzZWlucHV0SW5kZXh1c2Vyc0luQ3VycmVudEJsb2NrZG9taW5hdG9yQmxvY2tIUmVmY29udmVyc2lvbkhSZWYoSExhdGVJbnN0cnVjdGlvbkhDaGVja0hCb3VuZHNDaGVja0FMV0FZU19GQUxTRUZVTExfQ0hFQ0tBTFdBWVNfQUJPVkVfWkVST0FMV0FZU19CRUxPV19MRU5HVEhBTFdBWVNfVFJVRXN0YXRpY0NoZWNrc3JlcG9ydGVkSW5kZXhIQ29uZGl0aW9uYWxCcmFuY2h0cnVlQnJhbmNoZmFsc2VCcmFuY2hIQ29udHJvbEZsb3dIQ3JlYXRlaGFzUnRpSW5wdXRpbnN0YW50aWF0ZWRUeXBlc3J0aUlucHV0SENyZWF0ZShIQ3JlYXRlQm94SENyZWF0ZUJveCgpSEludm9rZV9pc0FsbG9jYXRpb25pc0ludGVyY2VwdGVkQ2FsbEFSR1VNRU5UU19PRkZTRVRyZXN1bHRUeXBlc2V0QWxsb2NhdGlvbkhJbnZva2VEeW5hbWljc3BlY2lhbGl6ZXJfcmVjZWl2ZXJUeXBlX29yaWdpbmFsUmVjZWl2ZXJUeXBlaXNJbnRlcmNlcHRlZHVwZGF0ZVJlY2VpdmVyVHlwZWludm9rZSBkeW5hbWljOiBzZWxlY3Rvcj0sIG1hc2s9aXNDYWxsT25JbnRlcmNlcHRvckhJbnZva2VDbG9zdXJlSEludm9rZUR5bmFtaWNNZXRob2RpbnZva2UgZHluYW1pYyBtZXRob2Q6IHNlbGVjdG9yPUhJbnZva2VEeW5hbWljRmllbGRpbnZva2UgZHluYW1pYyBmaWVsZDogc2VsZWN0b3I9SEludm9rZUR5bmFtaWNHZXR0ZXJpc1RlYXJPZmZpbnZva2UgZHluYW1pYyBnZXR0ZXI6IHNlbGVjdG9yPUhJbnZva2VEeW5hbWljU2V0dGVybmVlZHNDaGVja2ludm9rZSBkeW5hbWljIHNldHRlcjogc2VsZWN0b3I9LCBlbGVtZW50PUhJbnZva2VTdGF0aWN0YXJnZXRDYW5UaHJvd2ludm9rZSBzdGF0aWM6IEhJbnZva2VTdXBlcmNhbGxlcmludm9rZSBzdXBlcjogSEludm9rZUNvbnN0cnVjdG9yQm9keWludm9rZSBjb25zdHJ1Y3RvciBib2R5OiBISW52b2tlR2VuZXJhdG9yQm9keUhJbnZva2VHZW5lcmF0b3JCb2R5KEhGaWVsZEFjY2Vzc0hGaWVsZEdldGNsZWFyQWxsU2lkZUVmZmVjdHNjbGVhckFsbERlcGVuZGVuY2llc3RoaXNMb2NhbGlzSW50ZXJjZXB0ZWRDbGFzc2lzTnVsbENoZWNrRmllbGRHZXQoZWxlbWVudD0sdHlwZT1IRmllbGRTZXRGaWVsZFNldChlbGVtZW50PUhHZXRMZW5ndGhHZXRMZW5ndGgoKUhSZWFkTW9kaWZ5V3JpdGVBU1NJR05fT1BQUkVfT1BQT1NUX09QanNPcG9wS2luZGFzc2lnbk9wcHJlT3Bwb3N0T3Bpc1ByZU9waXNQb3N0T3Bpc0Fzc2lnbk9wUmVhZE1vZGlmeVdyaXRlIEhMb2NhbEFjY2Vzc0hMb2NhbEdldEhMb2NhbFNldEhGb3JlaWduaXNTdGF0ZW1lbnRIRm9yZWlnbkNvZGVjb2RlVGVtcGxhdGV0aHJvd0JlaGF2aW9yZm9yZWlnbkZ1bmN0aW9uZWZmZWN0c29uTm9uTnVsbGlzT25seU51bGxOU01HdWFyZEhGb3JlaWduQ29kZSgiIilISW52b2tlQmluYXJ5SEJpbmFyeUFyaXRobWV0aWNIQWRkSERpdmlkZUhNdWx0aXBseUhTdWJ0cmFjdEhUcnVuY2F0aW5nRGl2aWRlSFJlbWFpbmRlckhTd2l0Y2hkZWZhdWx0VGFyZ2V0SFN3aXRjaCBjYXNlcyA9IEhCaW5hcnlCaXRPcEhTaGlmdExlZnRIU2hpZnRSaWdodEhCaXRPckhCaXRBbmRIQml0WG9ySEludm9rZVVuYXJ5SE5lZ2F0ZUhBYnNIQml0Tm90SEV4aXRIR290b2dvdG9ISnVtcHRvTGFiZWxIQnJlYWticmVha1N3aXRjaENvbnRpbnVlTG9vcGJyZWFrIEhDb250aW51ZWNvbnRpbnVlIEhUcnljYXRjaEJsb2Nram9pbkJsb2NrSEV4aXRUcnlleGl0IHRyeWJvZHlUcnlTdWNjZXNzb3JISWZibG9ja0luZm9ybWF0aW9udGhlbkJsb2NrZWxzZUJsb2NrSExvb3BCcmFuY2hDT05ESVRJT05fRklSU1RfTE9PUERPX1dISUxFX0xPT1Bsb29wLWJyYW5jaEhDb25zdGFudGxpdGVyYWw6IGlzQm9vbGlzTnVtaXNJbnRpc0xpc3Rpc0ZhbHNlaXNUcnVlSE5vdEhMb2NhbFZhbHVlbG9jYWwgSFBhcmFtZXRlclZhbHVldXNlZEFzVmFyaWFibGVwYXJhbWV0ZXIgSFRoaXNIUGhpSVNfTk9UX0xPR0lDQUxfT1BFUkFUT1JJU19BTkRJU19PUmxvZ2ljYWxPcGVyYXRvclR5cGVub0lucHV0c3NpbmdsZUlucHV0bWFueUlucHV0c2FkZElucHV0cGhpIEhSZWxhdGlvbmFsdXNlc0Jvb2xpZmllZEludGVyY2VwdG9ySElkZW50aXR5c2luZ2xlQ29tcGFyaXNvbk9wSEdyZWF0ZXJIR3JlYXRlckVxdWFsSExlc3NITGVzc0VxdWFsSFJldHVybkhUaHJvd0V4cHJlc3Npb250aHJvdyBleHByZXNzaW9uSEF3YWl0SFlpZWxkSFRocm93aXNSZXRocm93SFN0YXRpY3NldERlcGVuZHNPblN0YXRpY1Byb3BlcnR5U3RvcmVzdGF0aWMgSEludGVyY2VwdG9yaW50ZXJjZXB0ZWRDbGFzc2VzaW50ZXJjZXB0b3Igb24gaXNDb25kaXRpb25hbENvbnN0YW50SW50ZXJjZXB0b3Jjb25kaXRpb25hbENvbnN0YW50SW50ZXJjZXB0b3JIT25lU2hvdEludGVyY2VwdG9yb25lIHNob3QgaW50ZXJjZXB0b3I6IHNlbGVjdG9yPUhMYXp5U3RhdGljbGF6eSBzdGF0aWMgSFN0YXRpY1N0b3Jlc2V0Q2hhbmdlc1N0YXRpY1Byb3BlcnR5c3RhdGljIHN0b3JlIEhMaXRlcmFsTGlzdGxpdGVyYWwgbGlzdEhJbmRleHNldERlcGVuZHNPbkluZGV4U3RvcmVpbmRleCBvcGVyYXRvckhJbmRleEFzc2lnbnNldENoYW5nZXNJbmRleGluZGV4IGFzc2lnbiBvcGVyYXRvckhJc1JBV19DSEVDS0NPTVBPVU5EX0NIRUNLVkFSSUFCTEVfQ0hFQ0t0eXBlRXhwcmVzc2lvbnVzZUluc3RhbmNlT2ZkaXJlY3RpbnN0YW5jZU9mY29tcG91bmRpbnRlcmNlcHRvclVuZXhwZWN0ZWQgcmF3IGlzLXRlc3QgdHlwZTogY2hlY2tDYWxsaXNSYXdDaGVja2lzVmFyaWFibGVDaGVja2lzQ29tcG91bmRDaGVjayBpcyBISXNWaWFJbnRlcmNlcHRvckhMYXRlVmFsdWVITGF0ZVZhbHVlKEhUeXBlQ29udmVyc2lvblRZUEVfQ0hFQ0tDQVNUX0NIRUNLaW5wdXRUeXBlaXNUeXBlZGVmd2l0aFR5cGVSZXByZXNlbnRhdGlvbnR5cGVSZXByZXNlbnRhdGlvbmhhc1R5cGVSZXByZXNlbnRhdGlvbmlzVHlwZUNoZWNraXNDYXN0Q2hlY2tpc1JlZHVuZGFudEhUeXBlQ29udmVyc2lvbih0eXBlPSwga2luZD1yZXByZXNlbnRhdGlvbj1jaGVja2VkSW5wdXQ9SFByaW1pdGl2ZUNoZWNrQVJHVU1FTlRfVFlQRV9DSEVDS1JFQ0VJVkVSX1RZUEVfQ0hFQ0tyZWNlaXZlclR5cGVDaGVja1NlbGVjdG9yaXNSZWNlaXZlclR5cGVDaGVja2lzQXJndW1lbnRUeXBlQ2hlY2tIUHJpbWl0aXZlQ2hlY2soY2hlY2tlZFR5cGU9SEJvb2xDb252ZXJzaW9uSEJvb2xDb252ZXJzaW9uKEhUeXBlS25vd25rbm93blR5cGVfaXNNb3ZhYmxlcGlubmVkd2l0bmVzc2Vkd2l0bmVzc1R5cGVLbm93biBpc1Bpbm5lZEhSYW5nZUNvbnZlcnNpb25IU3RyaW5nQ29uY2F0c3RyaW5nIGNvbmNhdEhTdHJpbmdpZnlzdHJpbmdpZnlITG9vcEluZm9ybWF0aW9uYmFja0VkZ2VzbG9vcEJsb2NrSW5mb3JtYXRpb253b3JrUXVldWVwYXJlbnRIZWFkZXJIQmxvY2tGbG93SEJsb2NrSW5mb3JtYXRpb25IU3RhdGVtZW50SW5mb3JtYXRpb25IRXhwcmVzc2lvbkluZm9ybWF0aW9uSFN0YXRlbWVudEluZm9ybWF0aW9uVmlzaXRvcnZpc2l0TGFiZWxlZEJsb2NrSW5mb3Zpc2l0TG9vcEluZm92aXNpdElmSW5mb3Zpc2l0VHJ5SW5mb3Zpc2l0U3dpdGNoSW5mb3Zpc2l0U2VxdWVuY2VJbmZvdmlzaXRTdWJHcmFwaEluZm9IRXhwcmVzc2lvbkluZm9ybWF0aW9uVmlzaXRvcnZpc2l0QW5kT3JJbmZvdmlzaXRTdWJFeHByZXNzaW9uSW5mb0hCbG9ja0luZm9ybWF0aW9uVmlzaXRvckhTdWJHcmFwaEJsb2NrSW5mb3JtYXRpb25zdWJHcmFwaEhTdWJFeHByZXNzaW9uQmxvY2tJbmZvcm1hdGlvbnN1YkV4cHJlc3Npb25IU3RhdGVtZW50U2VxdWVuY2VJbmZvcm1hdGlvbkhMYWJlbGVkQmxvY2tJbmZvcm1hdGlvbmlzQ29udGludWVITG9vcEJsb2NrSW5mb3JtYXRpb25XSElMRV9MT09QRk9SX0xPT1BGT1JfSU5fTE9PUFNXSVRDSF9DT05USU5VRV9MT09QTk9UX0FfTE9PUGxvb3BIZWFkZXJISWZCbG9ja0luZm9ybWF0aW9udGhlbkdyYXBoZWxzZUdyYXBoSEFuZE9yQmxvY2tJbmZvcm1hdGlvbkhUcnlCbG9ja0luZm9ybWF0aW9uY2F0Y2hWYXJpYWJsZUhTd2l0Y2hCbG9ja0luZm9ybWF0aW9uSFR5cGVJbmZvUmVhZFJhd0hUeXBlSW5mb1JlYWRWYXJpYWJsZWludGVyY2VwdGVkbm9JbnRlcmNlcHRvckhUeXBlSW5mb1JlYWRWYXJpYWJsZShUeXBlSW5mb0V4cHJlc3Npb25LaW5kVHlwZUluZm9FeHByZXNzaW9uS2luZC5DT01QTEVURVR5cGVJbmZvRXhwcmVzc2lvbktpbmQuSU5TVEFOQ0VDT01QTEVURUlOU1RBTkNFSFR5cGVJbmZvRXhwcmVzc2lvbmRhcnRUeXBlaXNUeXBlVmFyaWFibGVSZXBsYWNlbWVudEhUeXBlSW5mb0V4cHJlc3Npb24oa2luZEFzU3RyaW5nSElzVGVzdGNoZWNrZWRBYnN0cmFjdFZhbHVlcnRpdHlwZUlucHV0SElzVGVzdCgpSEFzQ2hlY2tjaGVja2VkVHlwZUV4cHJlc3Npb25UeXBlRXJyb3JDYXN0RXJyb3JIQXNDaGVjayhIQXNDaGVja1NpbXBsZUhTdWJ0eXBlQ2hlY2tIU3VidHlwZUNoZWNrKClIUnRpSW5zdHJ1Y3Rpb25ITG9hZFR5cGVITG9hZFR5cGUoSEluc3RhbmNlRW52aXJvbm1lbnRISW5zdGFuY2VFbnZpcm9ubWVudCgpSFR5cGVFdmFsZW52U3RydWN0dXJlSFR5cGVFdmFsKEhUeXBlQmluZEhUeXBlQmluZCgpZGFydDJqcy5zZWxlY3RvcnV0aWxzU2VsZWN0b3JLaW5kR0VUVEVSU0VUVEVSQ0FMTFNQRUNJQUxzcGVjaWFsY2Fub25pY2FsaXplZFZhbHVlc2tpbmQ9LG1lbWJlck5hbWU9LGNhbGxTdHJ1Y3R1cmU6YXJndW1lbnRDb3VudG5hbWVkQXJndW1lbnRDb3VudGlzT3BlcmF0b3JOYW1lVW5hcnlPcGVyYXRvcktpbmQuTkVHQVRFc2VsZWN0b3JOYW1lVW5hcnlPcGVyYXRvcktpbmQuQ09NUExFTUVOVGZyb21FbGVtZW50Q2FuJ3QgZ2V0IHNlbGVjdG9yIGZyb20gdW5hcnlPcGVyYXRvcmNhbGxDbG9zdXJlYXJpdHljYWxsQ2xvc3VyZUZyb21jYWxsQ29uc3RydWN0b3JjYWxsRGVmYXVsdENvbnN0cnVjdG9ycmVhZExpYnJhcnlPck51bGx3cml0ZUxpYnJhcnlPck51bGxpbnZvY2F0aW9uTWlycm9yTWVtYmVyTmFtZWludm9jYXRpb25NaXJyb3JLaW5kc2lnbmF0dXJlQXBwbGllc2FwcGxpZXNUb051bGxXaXRob3V0VGhyb3dTZWxlY3RvcihzdHJ1Y3R1cmVUb1N0cmluZ3RvTm9ybWFsaXplZGlzTm9ybWFsaXplZHRvQ2FsbFNlbGVjdG9ydG9Ob25HZW5lcmljbm9uR2VuZXJpY09uZVNob3RJbnRlcmNlcHRvckRhdGFEeW5hbWljVXNlS2luZENvZGVnZW5Xb3JsZEJ1aWxkZXJhZGRDb21waWxlVGltZUNvbnN0YW50Rm9yRW1pc3Npb25Db2RlZ2VuV29ybGRmb3JFYWNoR2VuZXJpY0Nsb3N1cmVDYWxsTWV0aG9kaGFzSW52b2tlZEdldHRlcmhhc0ludm9rZWRTZXR0ZXJpbnZvY2F0aW9uc0J5TmFtZWdldHRlckludm9jYXRpb25zQnlOYW1lc2V0dGVySW52b2NhdGlvbnNCeU5hbWVmb3JFYWNoSW52b2tlZE5hbWVmb3JFYWNoSW52b2tlZEdldHRlcmZvckVhY2hJbnZva2VkU2V0dGVyaW5zdGFudGlhdGVkQ2xhc3Nlc21ldGhvZHNOZWVkc1N1cGVyR2V0dGVyZm9yRWFjaFN0YXRpY0ZpZWxkY29uc3RUeXBlTGl0ZXJhbHNsaXZlVHlwZUFyZ3VtZW50c2dldENvbnN0YW50c0ZvckVtaXNzaW9ucHJlU29ydENvbXBhcmVpc0FsaWFzZWRTdXBlck1lbWJlckNvZGVnZW5Xb3JsZEJ1aWxkZXJJbXBsX29uZVNob3RJbnRlcmNlcHRvckRhdGFfZGlyZWN0bHlJbnN0YW50aWF0ZWRDbGFzc2VzX2luc3RhbnRpYXRlZFR5cGVzX2ltcGxlbWVudGVkQ2xhc3Nlc19pbnZva2VkTmFtZXNfaW52b2tlZEdldHRlcnNfaW52b2tlZFNldHRlcnNfcHJvY2Vzc2VkQ2xhc3Nlc19tZW1iZXJVc2FnZV9pbnZva2FibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWVfcmVhZGFibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWVfd3JpdGFibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWVfaXNDaGVja3Nfc2VsZWN0b3JDb25zdHJhaW50c1N0cmF0ZWd5X2NvbnN0YW50VmFsdWVzX2NvbnN0VHlwZUxpdGVyYWxzX2xpdmVUeXBlQXJndW1lbnRzX25hbWVkVHlwZVZhcmlhYmxlc05ld1J0aV9jb21waWxlZENvbnN0YW50c2NsYXNzVXNhZ2VGb3JUZXN0aW5nY2xhc3NVc2VkX3Byb2Nlc3NJbnN0YW50aWF0ZWRDbGFzc19nZXRDbGFzc1VzYWdlaW1wbGVtZW50X2hhc01hdGNoaW5nU2VsZWN0b3JzZWxlY3RvcnNfZ2V0TWF0Y2hpbmdDYWxsU3RydWN0dXJlc2NhbGxTdHJ1Y3R1cmVzX2dldEludm9jYXRpb25DYWxsU3RydWN0dXJlc19oYXNJbnZva2VkR2V0dGVyX2hhc0ludm9rZWRTZXR0ZXJtZW1iZXJVc2VkX3Byb2Nlc3NzaG91bGRCZVJlbW92ZWRfcHJvY2Vzc1NldHVzYWdlRHluYW1pY1VzZUtpbmQuSU5WT0tFcmVnaXN0ZXJEeW5hbWljSW52b2NhdGlvbl9yZWdpc3Rlck5ld1NlbGVjdG9yaW52b2tldWhhc1BlbmRpbmdEeW5hbWljSW52b2tlRHluYW1pY1VzZUtpbmQuR0VUaGFzUGVuZGluZ0R5bmFtaWNSZWFkRHluYW1pY1VzZUtpbmQuU0VUaGFzUGVuZGluZ0R5bmFtaWNXcml0ZXNlbGVjdG9yTWFwX2dldE1lbWJlclVzYWdlU3RhdGljVXNlS2luZC5TVEFUSUNfVEVBUl9PRkZTdGF0aWNVc2VLaW5kLklOU1RBTkNFX0ZJRUxEX0dFVFN0YXRpY1VzZUtpbmQuSU5TVEFOQ0VfRklFTERfU0VUU3RhdGljVXNlS2luZC5DQUxMX01FVEhPRFN0YXRpY1VzZUtpbmQuU1VQRVJfSU5WT0tFcmVnaXN0ZXJTdGF0aWNJbnZvY2F0aW9uU3RhdGljVXNlS2luZC5TVVBFUl9GSUVMRF9TRVRTdGF0aWNVc2VLaW5kLlNVUEVSX1NFVFRFUl9TRVRTdGF0aWNVc2VLaW5kLlNUQVRJQ19TRVRTdGF0aWNVc2VLaW5kLlNVUEVSX1RFQVJfT0ZGU3RhdGljVXNlS2luZC5TVVBFUl9HRVRTdGF0aWNVc2VLaW5kLlNUQVRJQ19HRVRTdGF0aWNVc2VLaW5kLkZJRUxEX0lOSVRTdGF0aWNVc2VLaW5kLkZJRUxEX0NPTlNUQU5UX0lOSVRjb25zdGFudEluaXRTdGF0aWNVc2VLaW5kLklOTElOSU5HU3RhdGljVXNlS2luZC5DTE9TVVJFU3RhdGljIHVzZSAgaXMgbm90IHN1cHBvcnRlZCBkdXJpbmcgY29kZWdlbi5fcHJvY2Vzc0luc3RhbnRpYXRlZENsYXNzTWVtYmVyVW5lbnF1ZXVlZCB1c2FnZSBvZiA6IApiZWZvcmU6IDxub25lPgphZnRlciA6IHBvdGVudGlhbEFjY2Vzc2dldE1lbWJlckFjY2Vzc3Byb2Nlc3NDbGFzc2NvbXBpbGVkQ29uc3RhbnRzRm9yVGVzdGluZ3JlZ2lzdGVyQ29uc3RUeXBlTGl0ZXJhbHJlZ2lzdGVyVHlwZUFyZ3VtZW50aGFzVXNldHlwZVZhcmlhYmxlVHlwZUxpdGVyYWxzaXNDaGVja3NuYW1lZFR5cGVWYXJpYWJsZXNOZXdSdGljb21waWxlZENvbnN0YW50c2ludm9rZWROYW1lc2ludm9rZWRHZXR0ZXJzaW52b2tlZFNldHRlcnNzdGF0aWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXNkeW5hbWljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzQ29kZWdlbldvcmxkSW1wbF9saXZlTWVtYmVyVXNhZ2Vfc3RhdGljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzX2R5bmFtaWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXNfdXNlck5vU3VjaE1ldGhvZHNDYWNoZV9jbG9zdXJpemVkTWVtYmVyc0NhY2hlX2Nsb3N1cml6ZWRTdGF0aWNzQ2FjaGVmYWlsdXJlZm9yRWFjaEdlbmVyaWNNZXRob2Rmb3JFYWNoR2VuZXJpY0luc3RhbmNlTWV0aG9kdXNlck5vU3VjaE1ldGhvZHNtZW1iZXJVc2FnZWdlbmVyaWNMb2NhbEZ1bmN0aW9uc2Nsb3N1cml6ZWRNZW1iZXJzaGFzUmVhZGNsb3N1cml6ZWRTdGF0aWNzZm9yRWFjaFN0YXRpY1R5cGVBcmd1bWVudGZvckVhY2hEeW5hbWljVHlwZUFyZ3VtZW50cmVhZHNBY2Nlc3MuZHluYW1pY0FjY2Vzc0FjY2Vzcy5zdXBlckFjY2Vzc3dyaXRlc19hc1VubW9kaWZpYWJsZXNlZW5Db25zdGFudHNzb3J0ZWRpbnZva2VzQmFja2VuZFVzYWdlQmFja2VuZFVzYWdlQnVpbGRlckludGVyY2VwdG9yRGF0YUJ1aWxkZXJOYXRpdmVEYXRhQnVpbGRlck9wZW5Xb3JsZENsYXNzUXVlcmllc1Jlc29sdXRpb25Xb3JsZEJ1aWxkZXJjbG9zZWRXb3JsZEZvclRlc3RpbmdSZXNvbHV0aW9uRW5xdWV1ZXJXb3JsZEJ1aWxkZXJJbnN0YW5jZUluc3RhbnRpYXRpb24uRElSRUNUTFlfSU5TVEFOVElBVEVEIGRpcmVjdGx5SW5zdGFudGlhdGlvbi5BQlNUUkFDVExZX0lOU1RBTlRJQVRFRCBhYnN0cmFjdGx5SW5zdGFudGlhdGlvbi5VTklOU1RBTlRJQVRFRCBub25lSW5zdGFudGlhdGlvbkluZm9pbnN0YW50aWF0aW9uTWFwaXNEaXJlY3RseUluc3RhbnRpYXRlZGlzQWJzdHJhY3RseUluc3RhbnRpYXRlZGFkZEluc3RhbnRpYXRpb25JbnN0YW50aWF0aW9uICBpcyBub3QgYWxsb3dlZC5oYXNJbnN0YW50aWF0aW9uSW5zdGFudGlhdGlvbkluZm9bbmVlZHNDb21tYTx1bmtub3duPlJlc29sdXRpb25Xb3JsZEJ1aWxkZXJJbXBsX2luc3RhbnRpYXRpb25JbmZvX2FsbFJlZmVyZW5jZWRTdGF0aWNGaWVsZHNfbWV0aG9kc05lZWRpbmdTdXBlckdldHRlcl9maWVsZFNldHRlcnNfbG9jYWxGdW5jdGlvbnNfY2xvc3VyaXplZE1lbWJlcnNXaXRoRnJlZVR5cGVWYXJpYWJsZXNfZGFydFR5cGVzX2ludGVyY2VwdG9yRGF0YUJ1aWxkZXJfcnRpTmVlZEJ1aWxkZXJfYWxsb2NhdG9yQW5hbHlzaXNfbm9TdWNoTWV0aG9kUmVnaXN0cnlfY2xhc3NIaWVyYXJjaHlCdWlsZGVyX2NsYXNzUXVlcmllc19jbG9zZWRfY2xvc2VkV29ybGRDYWNoZV9saXZlSW5zdGFuY2VNZW1iZXJzX2dlbmVyaWNMb2NhbEZ1bmN0aW9uc19wcm9jZXNzZWRNZW1iZXJzbWVtYmVyVXNhZ2VGb3JUZXN0aW5nVGhlIHdvcmxkIGJ1aWxkZXIgaGFzIG5vdCB5ZXQgYmVlbiBjbG9zZWQuZ2V0SW5zdGFudGlhdGlvbk1hcGNvbnRhaW5zVHlwZVZhcmlhYmxlc3VwZGF0ZUNsYXNzSGllcmFyY2h5Tm9kZUZvckNsYXNzZGlyZWN0bHlJbnN0YW50aWF0ZWRhYnN0cmFjdGx5SW5zdGFudGlhdGVkRGlyZWN0IHN0YXRpYyB1c2UgaXMgbm90IHN1cHBvcnRlZCBmb3IgcmVzb2x1dGlvbi4gaXMgbm90IHN1cHBvcnRlZCBkdXJpbmcgcmVzb2x1dGlvbi5fY3JlYXRlQ2xhc3NVc2FnZXVwZGF0ZVVzYWdlaGFzUGVuZGluZ0R5bmFtaWNVc2U6IApiZWZvcmU6IAphZnRlciA6IGFsbE1peGluVXNlc09mcG9wdWxhdGVIaWVyYXJjaHlOb2Rlc3R5cGVzSW1wbGVtZW50ZWRCeVN1YmNsYXNzZXNhZGRTdWJ0eXBlc3R5cGVzSW1wbGVtZW50ZWRCeVN1YmNsYXNzZXNPZkNsc2dldFN1cGVydHlwZXNjb21wdXRlQXNzaWduZWRJbnN0YW5jZU1lbWJlcnNhc3NpZ25lZEluc3RhbmNlTWVtYmVyc2lzSW5oZXJpdGVkSW5yZWxhdGlvbmlzSW5oZXJpdGVkSW5DbGFzc21lbWJlckhvbGRpbmdDbGFzc2lzSW5oZXJpdGVkSW5FeGFjdENsYXNzaXNJbmhlcml0ZWRJblRoaXNDbGFzc2lzSW5oZXJpdGVkSW5TdWJ0eXBlT2ZVbmV4cGVjdGVkIENsYXNzUmVsYXRpb24gIGlzIHVzZWQgYnV0IG5vdCBwcm9jZXNzZWQ6ICBpcyBwcm9jZXNzZWQgYnV0IG5vdCB1c2VkOiAgaXMgcHJvY2Vzc2VkIGJ1dCBoYXMgbm90IHVzYWdlLmluc3RhbmNlc2ltcGxlbWVudGVkQ2xhc3Nlc2xpdmVJbnN0YW5jZU1lbWJlcnNjbG9zdXJpemVkTWVtYmVyc1dpdGhGcmVlVHlwZVZhcmlhYmxlc2RhcnQyanMudW5pdmVyc2Uud29ybGRfaW1wYWN0VmlzaXRVc2VtZW1iZXI6IGR5bmFtaWMgdXNlc3N0YXRpYyB1c2VzdHlwZSB1c2VzY29uc3RhbnQgdXNlc1dvcmxkSW1wYWN0QnVpbGRlcl9keW5hbWljVXNlc19zdGF0aWNVc2VzX3R5cGVVc2VzX2NvbnN0YW50VXNlc2FkZEltcGFjdFN0YWdlZFdvcmxkSW1wYWN0QnVpbGRlcmNvbGxlY3RJbXBhY3RzX2N1cnJlbnRCdWlsZGVyX2J1aWxkZXJzX2Vuc3VyZUJ1aWxkZXJ3b3JsZEltcGFjdHNUcmFuc2Zvcm1lZFdvcmxkSW1wYWN0VHJhbnNmb3JtZWRXb3JsZEltcGFjdChJbXBhY3RVc2VDYXNlKGltcGFjdFVzZUNhc2VfdmlzaXRTdGF0aWNVc2VfdmlzaXREeW5hbWljVXNlX3Zpc2l0VHlwZVVzZV92aXNpdENvbnN0YW50VXNlZGFydDJqcy53b3JsZEpGaWVsZEFuYWx5c2lzSW50ZXJjZXB0b3JEYXRhTmF0aXZlRGF0YU5vU3VjaE1ldGhvZERhdGFSdW50aW1lVHlwZXNOZWVkV29ybGRjbG9zdXJlRGF0YUxvb2t1cHNvcnRlcnljb21wdXRlUmVjZWl2ZXJUeXBlQnVpbHRXb3JsZGRhcnQyanMuY29uc3RhbnRzLmV4cHJlc3Npb25zQ29uc3RhbnRFeHByZXNzaW9uS2luZENvbnN0YW50RXhwcmVzc2lvbktpbmQuQVNDb25zdGFudEV4cHJlc3Npb25LaW5kLkJJTkFSWUNvbnN0YW50RXhwcmVzc2lvbktpbmQuQk9PTENvbnN0YW50RXhwcmVzc2lvbktpbmQuQk9PTF9GUk9NX0VOVklST05NRU5UQ29uc3RhbnRFeHByZXNzaW9uS2luZC5DT05DQVRFTkFURUNvbnN0YW50RXhwcmVzc2lvbktpbmQuQ09ORElUSU9OQUxDb25zdGFudEV4cHJlc3Npb25LaW5kLkNPTlNUUlVDVEVEQ29uc3RhbnRFeHByZXNzaW9uS2luZC5ET1VCTEVDb25zdGFudEV4cHJlc3Npb25LaW5kLkVSUk9ORU9VU0NvbnN0YW50RXhwcmVzc2lvbktpbmQuRlVOQ1RJT05Db25zdGFudEV4cHJlc3Npb25LaW5kLkZJRUxEQ29uc3RhbnRFeHByZXNzaW9uS2luZC5JREVOVElDQUxDb25zdGFudEV4cHJlc3Npb25LaW5kLklOVENvbnN0YW50RXhwcmVzc2lvbktpbmQuSU5UX0ZST01fRU5WSVJPTk1FTlRDb25zdGFudEV4cHJlc3Npb25LaW5kLkxJU1RDb25zdGFudEV4cHJlc3Npb25LaW5kLlNFVENvbnN0YW50RXhwcmVzc2lvbktpbmQuTUFQQ29uc3RhbnRFeHByZXNzaW9uS2luZC5OVUxMQ29uc3RhbnRFeHByZXNzaW9uS2luZC5TVFJJTkdDb25zdGFudEV4cHJlc3Npb25LaW5kLlNUUklOR19GUk9NX0VOVklST05NRU5UQ29uc3RhbnRFeHByZXNzaW9uS2luZC5TVFJJTkdfTEVOR1RIQ29uc3RhbnRFeHByZXNzaW9uS2luZC5TWU1CT0xDb25zdGFudEV4cHJlc3Npb25LaW5kLlRZUEVDb25zdGFudEV4cHJlc3Npb25LaW5kLlVOQVJZQ29uc3RhbnRFeHByZXNzaW9uS2luZC5MT0NBTF9WQVJJQUJMRUNvbnN0YW50RXhwcmVzc2lvbktpbmQuUE9TSVRJT05BTF9SRUZFUkVOQ0VDb25zdGFudEV4cHJlc3Npb25LaW5kLk5BTUVEX1JFRkVSRU5DRUNvbnN0YW50RXhwcmVzc2lvbktpbmQuQVNTRVJUQ29uc3RhbnRFeHByZXNzaW9uS2luZC5JTlNUQU5USUFUSU9OQklOQVJZQk9PTEJPT0xfRlJPTV9FTlZJUk9OTUVOVENPTkNBVEVOQVRFQ09OU1RSVUNURURFUlJPTkVPVVNGSUVMRElERU5USUNBTElOVF9GUk9NX0VOVklST05NRU5UTElTVE1BUFNUUklOR19GUk9NX0VOVklST05NRU5UU1RSSU5HX0xFTkdUSFRZUEVVTkFSWUxPQ0FMX1ZBUklBQkxFUE9TSVRJT05BTF9SRUZFUkVOQ0VOQU1FRF9SRUZFUkVOQ0VJTlNUQU5USUFUSU9OZ2V0S25vd25UeXBlX2NyZWF0ZVN0cnVjdHVyZWRUZXh0X2VxdWFsc1VzZSBDb25zdGFudEV4cHJlc3Npb24udG9EYXJ0VGV4dCgpIG9yIENvbnN0YW50RXhwcmVzc2lvbi50b1N0cnVjdHVyZWRUZXh0KCkgaW5zdGVhZCBvZiBDb25zdGFudEV4cHJlc3Npb24udG9TdHJpbmcoKWlzSW1wbGljaXRpc1BvdGVudGlhbEVycm9uZW91c0NvbnN0YW50RXhwcmVzc2lvbkVycm9uZW91cygpQm9vbENvbnN0YW50RXhwcmVzc2lvbnZpc2l0Qm9vbEJvb2wodmFsdWU9SW50Q29uc3RhbnRFeHByZXNzaW9udmlzaXRJbnRJbnQodmFsdWU9RG91YmxlQ29uc3RhbnRFeHByZXNzaW9udmlzaXREb3VibGVEb3VibGUodmFsdWU9U3RyaW5nQ29uc3RhbnRFeHByZXNzaW9udmlzaXRTdHJpbmdTdHJpbmcodmFsdWU9TnVsbENvbnN0YW50RXhwcmVzc2lvbnZpc2l0TnVsbE51bGwoKUxpc3RDb25zdGFudEV4cHJlc3Npb25MaXN0KHR5cGU9LHZhbHVlcz1bZGVsaW1pdGVyXSlTZXRDb25zdGFudEV4cHJlc3Npb252aXNpdFNldFNldCh0eXBlPU1hcENvbnN0YW50RXhwcmVzc2lvbnZpc2l0TWFwTWFwKHR5cGU9LGVudHJpZXM9Wy0+ZXZhbHVhdGVNYXBCb2R5Q29uc3RydWN0ZWRDb25zdGFudEV4cHJlc3Npb252aXNpdENvbnN0cnVjdGVkQ29uc3RydWN0ZWQodHlwZT0sY29uc3RydWN0b3I9Y2FsbFN0cnVjdHVyZT0sYXJndW1lbnRzPVtjb21wdXRlSW5zdGFuY2VEYXRhY29uc3RhbnRDb25zdHJ1Y3RvcmdldENvbnN0cnVjdG9yQ29uc3RhbnRObyBjb25zdGFudCBjb25zdHJ1Y3RvciBjb21wdXRlZCBmb3IgY29tcHV0ZUluc3RhbmNlVHlwZWV2YWx1YXRlQ29uc3RydWN0b3JpbnN0YW5jZURhdGFpc1ZhbGlkQXNDb25zdGFudGZpZWxkTWFwTm8gdmFsdWUgY29tcHV0ZWQgZm9yIGFzc2VydGlvbmFzc2VydGlvbnNDb25jYXRlbmF0ZUNvbnN0YW50RXhwcmVzc2lvbnZpc2l0Q29uY2F0ZW5hdGVDb25jYXRlbmF0ZShleHByZXNzaW9ucz1bU3ltYm9sQ29uc3RhbnRFeHByZXNzaW9udmlzaXRTeW1ib2xTeW1ib2wobmFtZT1UeXBlQ29uc3RhbnRFeHByZXNzaW9uVW5leHBlY3RlZCB0eXBlIGNvbnN0YW50IHR5cGU6IFR5cGUodHlwZT1Bc0NvbnN0YW50RXhwcmVzc2lvbnZpc2l0QXNBcyh2YWx1ZT1leHByZXNzaW9uVmFsdWVjaGVja0Nhc3RzdHlwZUluQ29udGV4dGdldFR5cGVJbkNvbnRleHRjYXN0VHlwZUZpZWxkQ29uc3RhbnRFeHByZXNzaW9uRmllbGQoZWxlbWVudD1ldmFsdWF0ZUZpZWxkZ2V0RmllbGRDb25zdGFudExvY2FsVmFyaWFibGVDb25zdGFudEV4cHJlc3Npb252aXNpdExvY2FsVmFyaWFibGVMb2NhbFZhcmlhYmxlKGVsZW1lbnQ9Z2V0TG9jYWxDb25zdGFudEZ1bmN0aW9uQ29uc3RhbnRFeHByZXNzaW9uRnVuY3Rpb24oZWxlbWVudD1CaW5hcnlDb25zdGFudEV4cHJlc3Npb25QUkVDRURFTkNFX01BUEJpbmFyeU9wZXJhdG9yS2luZC5FUUJpbmFyeU9wZXJhdG9yS2luZC5OT1RfRVFCaW5hcnlPcGVyYXRvcktpbmQuTE9HSUNBTF9BTkRCaW5hcnlPcGVyYXRvcktpbmQuTE9HSUNBTF9PUkJpbmFyeU9wZXJhdG9yS2luZC5YT1JCaW5hcnlPcGVyYXRvcktpbmQuQU5EQmluYXJ5T3BlcmF0b3JLaW5kLk9SQmluYXJ5T3BlcmF0b3JLaW5kLlNITEJpbmFyeU9wZXJhdG9yS2luZC5TSFJCaW5hcnlPcGVyYXRvcktpbmQuU0hSVUJpbmFyeU9wZXJhdG9yS2luZC5BRERCaW5hcnlPcGVyYXRvcktpbmQuU1VCQmluYXJ5T3BlcmF0b3JLaW5kLk1VTEJpbmFyeU9wZXJhdG9yS2luZC5ESVZCaW5hcnlPcGVyYXRvcktpbmQuSURJVkJpbmFyeU9wZXJhdG9yS2luZC5HVEJpbmFyeU9wZXJhdG9yS2luZC5MVEJpbmFyeU9wZXJhdG9yS2luZC5HVEVRQmluYXJ5T3BlcmF0b3JLaW5kLkxURVFCaW5hcnlPcGVyYXRvcktpbmQuTU9EQmluYXJ5T3BlcmF0b3JLaW5kLklGX05VTExCaW5hcnlPcGVyYXRvcktpbmQuSU5ERVhNaXNzaW5nIHByZWNlbmRlbmNlIGZvciBiaW5hcnkgb3BlcmF0b3I6ICdwb3RlbnRpYWxPcGVyYXRvckJpbmFyeShsZWZ0PSxvcD0scmlnaHQ9bGVmdFZhbHVlcmlnaHRWYWx1ZWxlZnRDb25zdGFudGxlZnRUeXBlcmlnaHRDb25zdGFudHJpZ2h0VHlwZXNoaWZ0a25vd25MZWZ0VHlwZWtub3duUmlnaHRUeXBlVW5leHBlY3RlZCBjb25zdGFudCBiaW5hcnkgb3BlcmF0b3I6IElkZW50aWNhbENvbnN0YW50RXhwcmVzc2lvbnZpc2l0SWRlbnRpY2FsSWRlbnRpY2FsKGxlZnQ9VW5hcnlDb25zdGFudEV4cHJlc3Npb25VbmFyeU9wZXJhdG9yS2luZC5OT1R2aXNpdFVuYXJ5VW5hcnkob3A9LGV4cHJlc3Npb249U3RyaW5nTGVuZ3RoQ29uc3RhbnRFeHByZXNzaW9udmlzaXRTdHJpbmdMZW5ndGhTdHJpbmdMZW5ndGgoZXhwcmVzc2lvbj1Db25kaXRpb25hbENvbnN0YW50RXhwcmVzc2lvbnRydWVFeHBmYWxzZUV4cENvbmRpdGlvbmFsKGNvbmRpdGlvbj0sdHJ1ZT0sZmFsc2U9Y29uZGl0aW9uVmFsdWV0cnVlVmFsdWVmYWxzZVZhbHVldHJ1ZVR5cGVmYWxzZVR5cGVQb3NpdGlvbmFsQXJndW1lbnRSZWZlcmVuY2V2aXNpdFBvc2l0aW9uYWxQb3NpdGlvbmFsKGluZGV4PWdldFBvc2l0aW9uYWxBcmd1bWVudE5hbWVkQXJndW1lbnRSZWZlcmVuY2V2aXNpdE5hbWVkTmFtZWQobmFtZT1nZXROYW1lZEFyZ3VtZW50RnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9uX2NoZWNrTmFtZUZyb21FbnZpcm9ubWVudEJvb2xGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb252aXNpdEJvb2xGcm9tRW52aXJvbm1lbnRib29sLmZyb21FbnZpcm9ubWVudChuYW1lPSxkZWZhdWx0VmFsdWU9bmFtZUNvbnN0YW50VmFsdWVkZWZhdWx0Q29uc3RhbnRWYWx1ZW5hbWVTdHJpbmdDb25zdGFudFZhbHVlcmVhZEZyb21FbnZpcm9ubWVudEludEZyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbnZpc2l0SW50RnJvbUVudmlyb25tZW50aW50LmZyb21FbnZpcm9ubWVudChuYW1lPVN0cmluZ0Zyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbnZpc2l0U3RyaW5nRnJvbUVudmlyb25tZW50U3RyaW5nLmZyb21FbnZpcm9ubWVudChuYW1lPUFzc2VydENvbnN0YW50RXhwcmVzc2lvbixtZXNzYWdlPXZhbGlkQXNzZXJ0ZW5hYmxlQXNzZXJ0aW9uc3Zpc2l0QXNzZXJ0SW5zdGFudGlhdGlvbkNvbnN0YW50RXhwcmVzc2lvbkluc3RhbnRpYXRpb24odHlwZUFyZ3VtZW50cz10eXBlQXJndW1lbnRzSW5Db250ZXh0Q29uc3RhbnRFeHByZXNzaW9uVmlzaXRvcmV4cENvbnN0RXhwUHJpbnRlcmxlZnRBc3NvY2lhdGl2ZXdyaXRlVHlwZUFyZ3VtZW50cyBhcyBjb25zdCBuYW1lZE9mZnNldGlkZW50aWNhbCgubGVuZ3RoID8gIDogYXJnc1tjb25zdCBib29sLmZyb21FbnZpcm9ubWVudCgsIGRlZmF1bHRWYWx1ZTogY29uc3QgaW50LmZyb21FbnZpcm9ubWVudChjb25zdCBTdHJpbmcuZnJvbUVudmlyb25tZW50KGRhcnQyanMuY29kZV9vdXRwdXRTb3VyY2VMb2NhdGlvbnNhZGRTb3VyY2VMb2NhdGlvbnRhcmdldE9mZnNldHNvdXJjZVBvc2l0aW9uYWRkUHVzaHB1c2hQb3NpdGlvbmFkZFBvcGZvckVhY2hTb3VyY2VMb2NhdGlvbmZyYW1lTWFya2Vyc19Tb3VyY2VMb2NhdGlvbnNJbXBsbWFya2Vyc2ZyYW1lc19tZXJnZVNvdXJjZUxvY2F0aW9uc1Byb3ZpZGVyY3JlYXRlU291cmNlTG9jYXRpb25zQ29kZU91dHB1dGFkZEJ1ZmZlckFic3RyYWN0Q29kZU91dHB1dHNvdXJjZUxvY2F0aW9uc01hcF9hZGRJbnRlcm5hbENvZGUgb3V0cHV0IGlzIGNsb3NlZC4gVHJ5aW5nIHRvIHdyaXRlICdnZXRUZXh0Q29kZSBvdXRwdXQgaXMgYWxyZWFkeSBjbG9zZWQuQnVmZmVyZWRDb2RlT3V0cHV0Q29kZUJ1ZmZlckRvbid0IHVzZSBDb2RlQnVmZmVyLnRvU3RyaW5nKCkgc2luY2UgaXQgZHJvcHMgc291cmNlbWFwIGRhdGEuU3RyZWFtQ29kZU91dHB1dF9saXN0ZW5lcnNJbnRlcm5lck51bGxJbnRlcm5lcmZhc3RhLmdyYXBocHJlb3JkZXJOdW1iZXJzdW5hc3NpZ25lZGFzc2lnbmVkcmVjdXJzaXZlbHlTZWFyY2huZWlnaGJvclByZW9yZGVyTnVtYmVyZmFzdGEuY2xhc3NfaGllcmFyY2h5X2J1aWxkZXJTdGFuZGFyZEJvdW5kc0ZvcndhcmRpbmdOb2RlVHlwZXNEZWJ1Z0xvZ2dlcmdldE5vZGVGcm9tQ2xhc3NnZXROb2RlRnJvbVR5cGVnZXROb2RlRnJvbUtlcm5lbENsYXNzYXNTdXBlcnR5cGVPZmNsc05vZGVzdXBlcnR5cGVOb2Rlc3VwZXJjbGFzc2Vzc3VwZXJ0eXBlRGVjbGFyYXRpb25nZXRLZXJuZWxUeXBlQXNJbnN0YW5jZU9ma2VybmVsQ2xhc3NnZXRLZXJuZWxMZWdhY3lMZWFzdFVwcGVyQm91bmRub2RlMW5vZGUybm9kZXMxY29tcHV0ZUFsbFN1cGVyTm9kZXNub2RlczJjYW5kaWRhdGUxY2FuZGlkYXRlMm1heEluaGVyaXRhbmNlUGF0aGdldEludGVyZmFjZU1lbWJlcktlcm5lbGdldERpc3BhdGNoVGFyZ2V0S2VybmVsQ2xhc3NIaWVyYXJjaHlOb2RlQnVpbGRlcmhhc05vU3VjaE1ldGhvZGFic3RyYWN0TWVtYmVyc3N1YnN0aXR1dGlvbnNoYW5kbGVNZXJnZUNvbmZsaWN0bWVyZ2VLaW5kaGFuZGxlTWVyZ2VDb25mbGljdDogY2hlY2tJbmhlcml0YW5jZUNvbmZsaWN0TWVyZ2VLaW5kLnN1cGVyY2xhc3NNZW1iZXJzTWVyZ2VLaW5kLnN1cGVyY2xhc3NTZXR0ZXJzc3VwZXJjbGFzczogY2hlY2tWYWxpZE92ZXJyaWRlKGNoZWNrVmFsaWRPdmVycmlkZXJlY29yZEFic3RyYWN0TWVtYmVyaXNJbmhlcml0YWJsZUNvbmZsaWN0TWVyZ2VLaW5kLm1lbWJlcnNXaXRoU2V0dGVyc01lcmdlS2luZC5zZXR0ZXJzV2l0aE1lbWJlcnNpbmZlckZpZWxkVHlwZXNpbmZlck1ldGhvZFR5cGVzTWVyZ2VLaW5kLmludGVyZmFjZXNNZW1iZXJzTWVyZ2VLaW5kLmludGVyZmFjZXNTZXR0ZXJzTWVyZ2VLaW5kLnN1cGVydHlwZXNNZW1iZXJzTWVyZ2VLaW5kLnN1cGVydHlwZXNTZXR0ZXJzc3VwZXJ0eXBlczogY2hlY2tWYWxpZE92ZXJyaWRlKGFkZEFsbERlY2xhcmF0aW9uc1Rvc3VwZXJ0eXBlczogcmVwb3J0SW5oZXJpdGFuY2VDb25mbGljdFRyeWluZyB0byBpbmZlciB0eXBlcyBmb3IgIGJhc2VkIG9uIGhhc1NhbWVTaWduYXR1cmVpbmZlckdldHRlclR5cGVpbmZlclNldHRlclR5cGVoYWRUeXBlc0luZmVycmVkYUNsYXNzQnVpbGRlcmFTdWJzdGl0dXRpb25iQ2xhc3NCdWlsZGVyYlN1YnN0aXR1dGlvbmFQcm9jZWR1cmVHaXZpbmcgdXAgMWJQcm9jZWR1cmVhRnVuY3Rpb25iRnVuY3Rpb25hVHlwZVBhcmFtZXRlcnNiVHlwZVBhcmFtZXRlcnNHaXZpbmcgdXAgMmNvcHlUeXBlUGFyYW1ldGVyQ292YXJpYW5jZWFCb3VuZGJCb3VuZEdpdmluZyB1cCAzYVJldHVyblR5cGViUmV0dXJuVHlwZUdpdmluZyB1cCA0YVBvc2l0aW9uYWxiUG9zaXRpb25hbEdpdmluZyB1cCA1R2l2aW5nIHVwIDZhUGFyYW1ldGVyYlBhcmFtZXRlcmNvcHlQYXJhbWV0ZXJDb3ZhcmlhbmNlYVR5cGViVHlwZUdpdmluZyB1cCA4YU5hbWVkYk5hbWVkR2l2aW5nIHVwIDlHaXZpbmcgdXAgMTBhQ291bnRiQ291bnRHaXZpbmcgdXAgMTFHaXZpbmcgdXAgMTJJbmZlcnJpbmcgdHlwZXMgZm9yIHN1Y2NlZWRlZC5mYWlsZWQuSW5mZXJyaW5nIGdldHRlciB0eXBlcyBmb3IgYlRhcmdldEdpdmluZyB1cCAodHlwZSBtYXkgYmUgaW5mZXJyZWQpR2l2aW5nIHVwIChyZXR1cm4gdHlwZSBtYXkgYmUgaW5mZXJyZWQpR2l2aW5nIHVwIChub3QgYWNjZXNzb3I6IEdpdmluZyB1cCAobm90IGZpZWxkL3Byb2NlZHVyZTogSW5mZXJyaW5nIHNldHRlciB0eXBlcyBmb3IgY29weVBhcmFtZXRlckNvdmFyaWFuY2VGcm9tRmllbGRjaGVja1ZhbGlkT3ZlcnJpZGUoYVRhcmdldFRyeWluZyB0byBpbmZlciBmaWVsZCB0eXBlcyBmb3IgYmFzZWQgb24gaW5oZXJpdGVkVHlwZWNvcHlGaWVsZENvdmFyaWFuY2VGcm9tUGFyYW1ldGVyY29weUZpZWxkQ292YXJpYW5jZUdpdmluZyB1cCAoaW5oZXJpdGVkVHlwZSA9PSBudWxsKQphRmllbGRiRmllbGRzdGF0aWNNZW1iZXJkdXBsaWNhdGVoYW5kbGVPbmx5QWhhbmRsZU9ubHlCd2l0aFBhcmVudHN1cGVybm9kZWluZmVyTWl4aW5BcHBsaWNhdGlvbmxvY2FsTWVtYmVyc2xvY2FsU2V0dGVyc21lcmdlQWNjZXNzb3JzY2xhc3NNZW1iZXJzY2xhc3NTZXR0ZXJzaW50ZXJmYWNlTWVtYmVyc3N1YnN0U3VwZXJ0eXBlc3JlY29yZFN1cGVydHlwZWRpcmVjdEludGVyZmFjZXNpZ25vcmVGdW5jdGlvbnN1cGVyY2xhc3NJbnRlcmZhY2VzbWVyZ2VJbnRlcmZhY2VzbWVyZ2VkTWVtYmVyc21lcmdlZFNldHRlcnNhZGRJbnRlcmZhY2VkaXJlY3RJbnRlcmZhY2VpbnRlcmZhY2VOb2RlcmVwb3J0TWlzc2luZ01lbWJlcnNpbnN0YWxsTnNtSGFuZGxlcnNJbiByZWNvcmRTdXBlcnR5cGUoY29tcHV0ZURlZmF1bHRUeXBlQXJndW1lbnRzIGFyZW4ndCBzdWJzdGVkc3Vic3RlZHN1YnN0IGlzbid0IHN1YnN0ZWRteURlcHRobWVyZ2VJbnRlcmZhY2VzKG1lbWJlckxpc3Rzc2V0dGVyTGlzdHNtZXJnZUxpc3RzaXNPZGRjb250ZXh0TWFwcGFyZW50TmFtZWFMaXN0Ykxpc3RpbmZlcnJlZEFyZ3VtZW50c21peGVkSW5UeXBlQnVpbGRlckNsYXNzSGllcmFyY2h5Tm9kZSAgTG9uZ2VzdCBwYXRoIHRvIE9iamVjdDogICBzdXBlcmNsYXNzZXM6LT4gICBpbnRlcmZhY2VzOnByaW50TWVtYmVyc2hlYWRpbmcgICAgZmluZE1lbWJlcmNvbXBhcmVNYXhJbmhlcml0YW5jZVBhdGhNZXJnZVJlc3VsdE1lcmdlS2luZHN1cGVyY2xhc3NNZW1iZXJzc3VwZXJjbGFzc1NldHRlcnNpbnRlcmZhY2VzTWVtYmVyc2ludGVyZmFjZXNTZXR0ZXJzc3VwZXJ0eXBlc01lbWJlcnNzdXBlcnR5cGVzU2V0dGVyc21lbWJlcnNXaXRoU2V0dGVyc3NldHRlcnNXaXRoTWVtYmVyc0J1aWxkZXJNaXhpbkluZmVycmVyX1R5cGVCdWlsZGVyQ29uc3RyYWludEdhdGhlcmVyJlR5cGVDb25zdHJhaW50R2F0aGVyZXImU3RhbmRhcmRCb3VuZHNzdWJjbGFzc2luZ2dldFN0YW5kYXJkTG93ZXJCb3VuZF9mdW5jdGlvblN0YW5kYXJkTG93ZXJCb3VuZF90eXBlUGFyYW1ldGVyU3RhbmRhcmRVcHBlckJvdW5kX2ludGVyZmFjZVN0YW5kYXJkVXBwZXJCb3VuZF9mdW5jdGlvblN0YW5kYXJkVXBwZXJCb3VuZHR5cGUxID0gOyB0eXBlMiA9IGd0b3RhbFBvc2l0aW9uYWxmVHlwZWdUeXBlaGFzUG9zaXRpb25hbGZOYW1lZ05hbWVvcmRlcmhhc05hbWVkdEFyZ3MxdEFyZ3MydEFyZ3NUeXBlQnVpbGRlckNvbnN0cmFpbnRHYXRoZXJlcmFkZExvd2VyQm91bmRhZGRVcHBlckJvdW5kaXNTdWJ0eXBlT2ZLZXJuZWxjaGVja092ZXJyaWRlaXNJbnRlcmZhY2VDaGVja0RlbGF5ZWQgb3ZlcnJpZGUgY2hlY2sgb2YgIHdydC4gSW5mZXJyZWQgdHlwZSAgZm9yIG1vZGlmeUtlcm5lbEluaGVyaXRlZEltcGxlbWVudGF0aW9uSW50ZXJmYWNlQ29uZmxpY3Rjb21iaW5lZE1lbWJlclNpZ25hdHVyZVJlc3VsdEluaGVyaXRlZEltcGxlbWVudGF0aW9uSW50ZXJmYWNlQ29uZmxpY3QoY29uY3JldGVJbXBsZW1lbnRhdGlvbmNyZWF0ZUZvcndhcmRlcnNJbnRlcmZhY2VDb25mbGljdEludGVyZmFjZUNvbmZsaWN0KGNvbXB1dGVNZW1iZXJUeXBlYmVzdFR5cGVTb0ZhcmNhbmRpZGF0ZVR5cGVDb21iaW5lZCBNZW1iZXIgU2lnbmF0dXJlOiAgPDogICE8OiBDb21iaW5lZCBNZW1iZXIgU2lnbmF0dXJlIGJlc3RTb0ZhcjogZGFydDpqc2pzX2RhcnQyanMuZGFydGpzX251bWJlci5kYXJ0aXNBbm9ueW1vdXNNaXhpbkFwcGxpY2F0aW9uQ29tYmluZWQgTWVtYmVyIFNpZ25hdHVyZSBvZiBuZXcgRm9yd2FyZGluZ05vZGUoc3R1YmFkZGVkIHN0dWIgOiBwaWNrZWQgYmVzdFNvRmFyQWJzdHJhY3RNZW1iZXJPdmVycmlkaW5nSW1wbGVtZW50YXRpb25hYnN0cmFjdE1lbWJlcnNlbGVjdEFic3RyYWN0c2VsZWN0Q29uY3JldGVjb21wYXJlRGVjbGFyYXRpb25zaXNOYW1lVmlzaWJsZUluaXNJbmhlcml0YW5jZUNvbmZsaWN0aW1wbGllc1NldHRlcmFQb3NpdGlvbmFsUGFyYW1ldGVyc2JQb3NpdGlvbmFsUGFyYW1ldGVyc2FOYW1lZFBhcmFtZXRlcnNiTmFtZWRQYXJhbWV0ZXJzaW5oZXJpdGVkQ29uZmxpY3RDb250ZXh0aW5oZXJpdGVkQ29uZmxpY3RDb250ZXh0S2VybmVsYWRkRGVjbGFyYXRpb25JZkRpZmZlcmVudGNvbXBhcmVOYW1lZFBhcmFtZXRlcnNpbmZlclBhcmFtZXRlclR5cGVyZXBvcnRDYW50SW5mZXJQYXJhbWV0ZXJUeXBlcmVwb3J0Q2FudEluZmVyUmV0dXJuVHlwZXJlcG9ydENhbnRJbmZlckZpZWxkVHlwZWhhc0V4cGxpY2l0UmV0dXJuVHlwZWhhc0V4cGxpY2l0bHlUeXBlZEZvcm1hbFBhcmFtZXRlcmZhc3RhLmltcGxpY2l0X3R5cGVpc1N0YXJ0ZWRmYXN0YS5rZXJuZWxfdmFyaWFibGVfYnVpbGRlcl9fbG9hZExpYnJhcnlfVW5saW5rZWRTY29wZWZhc3RhUGF0aC9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvL3BrZy9mcm9udF9lbmQvdG9vbC9fZmFzdGEvY29tbWFuZF9saW5lLmRhcnRrZXJuZWwvYm9keV9idWlsZGVyLmRhcnRmYXN0YS50YXJnZXRmYXN0YS5jbGFzc19idWlsZGVydHlwZV9hbGdlYnJhcmVkaXJlY3RpbmdDb25zdHJ1Y3RvcnNpZ25vcmVyZWRpcmVjdGN5Y2xlUmVwb3J0ZWR0YXJnZXRCdWlsZGVyYWRkUmVkaXJlY3RpbmdDb25zdHJ1Y3RvcnNldFJlZGlyZWN0aW5nRmFjdG9yeUJvZHlmaXJzdE1lbWJlck5hbWVkQ2xhc3NCdWlsZGVyLnRhcmdldCBpcyBkZXByZWNhdGVkLiBVc2UgQ2xhc3NCdWlsZGVyLmNscyBpbnN0ZWFkLmJ1aWxkVHlwZXNXaXRoQnVpbHRBcmd1bWVudHNidWlsZFR5cGVBcmd1bWVudHNidWlsZFR5cGVzdXBlckNsYXNzc3VwZXJDbGFzc1R5cGVkZWNscHJvYmxlbXNwcm9ibGVtc09mZnNldHNpbXBsZW1lbnRlZHJlcGV0aXRpb25zY2hlY2tCb3VuZHNJblN1cGVydHlwZWNvbnN0cnVjdG9yc0ZpZWxkaGFuZGxlU2VlbkNvdmFyaWFudENvbnN0cnVjdG9yIGluIG92ZXJyaWRlIGNoZWNrLnNlZW5Db3ZhcmlhbnRjaGVja01ldGhvZE92ZXJyaWRlY2hlY2tHZXR0ZXJPdmVycmlkZWNoZWNrU2V0dGVyT3ZlcnJpZGVkZWNsYXJlZE1lbWJlckhhc0dldHRlcmludGVyZmFjZU1lbWJlckhhc0dldHRlcmRlY2xhcmVkTWVtYmVySGFzU2V0dGVyaW50ZXJmYWNlTWVtYmVySGFzU2V0dGVyaGFzVXNlckRlZmluZWROb1N1Y2hNZXRob2R0cmFuc2Zvcm1Qcm9jZWR1cmVUb05vU3VjaE1ldGhvZEZvcndhcmRlcm5vU3VjaE1ldGhvZEludGVyZmFjZWFkZE5vU3VjaE1ldGhvZEZvcndhcmRlckZvclByb2NlZHVyZWFkZE5vU3VjaE1ldGhvZEZvcndhcmRlckdldHRlckZvckZpZWxkYWRkTm9TdWNoTWV0aG9kRm9yd2FyZGVyU2V0dGVyRm9yRmllbGRleGlzdGluZ0ZvcndhcmRlcnNOYW1lc2V4aXN0aW5nU2V0dGVyRm9yd2FyZGVyc05hbWVzbGVhc3RDb25jcmV0ZVN1cGVyY2xhc3NzdXBlckhhc1VzZXJEZWZpbmVkTm9TdWNoTWV0aG9kY29uY3JldGVjb25jcmV0ZVNldHRlcnNjbHNIYXNVc2VyRGVmaW5lZE5vU3VjaE1ldGhvZF9nZXRNZW1iZXJVcmlfY29tcHV0ZUludGVyZmFjZVN1YnN0aXR1dGlvbmRlY2xhcmVkRnVuY3Rpb25pbnRlcmZhY2VGdW5jdGlvbmludGVyZmFjZVN1YnN0aXR1dGlvbmluaGVyaXRlZENvbnRleHRkZWNsYXJlZFBhcmFtZXRlcmludGVyZmFjZVBhcmFtZXRlcmRlY2xhcmVkQm91bmRpbnRlcmZhY2VCb3VuZF9jb21wdXRlRGVjbGFyZWRTdWJzdGl0dXRpb25kZWNsYXJlZFN1YnN0aXR1dGlvbl9jaGVja1R5cGVzYXNJZkRlY2xhcmVkUGFyYW1ldGVyaW5QYXJhbWV0ZXJkZWNsYXJlZE1lbWJlck5hbWVpbnRlcmZhY2VNZW1iZXJOYW1lcDBwMXNvcnRlZEZyb21EZWNsYXJlZHNvcnRlZEZyb21JbnRlcmZhY2VkZWNsYXJlZE5hbWVkUGFyYW1ldGVyc2ludGVyZmFjZU5hbWVkUGFyYW1ldGVyc2Jhc2VOYW1lbWl4aW5OYW1lY2xhc3NOYW1lTGVuZ3RobWVtYmVyUGF0Y2hvcmlnaW5MZW5ndGhwYXRjaExlbmd0aGNvbXB1dGVSZWRpcmVjdGVlVHlwZXR5cGVQYXJhbWV0ZXJCb3VuZGNvbXB1dGVSZWRpcmVjdGVlTmFtZWNoZWNrUmVkaXJlY3RpbmdGYWN0b3J5ZmFjdG9yeVR5cGVyZWRpcmVjdGVlVHlwZWRpcmVjdFN1YnN0aXR1dGlvbk1hcGluc3RhbmNlQ2xhc3MgZXhwZWN0ZWQgbG9va3VwQ29uc3RydWN0b3JXaXRoUGF0Y2hlc2dldFN1cGVyY2xhc3NDb25zdHJ1Y3RvclJlZGlyZWN0aW9uZmFzdGEubWVtYmVyX2J1aWxkZXJpc0RlY2xhcmF0aW9uTWVtYmVyaXNDbGFzc01lbWJlcmluZmVyQ29waWVkVHlwZWZhc3RhLmZ1bmN0aW9uX3R5cGVfYWxpYXNfYnVpbGRlclR5cGVBbGlhc0J1aWxkZXIudGFyZ2V0IGlzIGRlcHJlY2F0ZWQuIFVzZSBUeXBlQWxpYXNCdWlsZGVyLnR5cGVkZWYgaW5zdGVhZC5idWlsZFRoaXNUeXBlY3ljbGljVHlwZUFsaWFzTWFya2VyZmFzdGEuZGlsbF9jbGFzc19idWlsZGVydGFyZ2V0U3VwZXJ0eXBlbWl4ZWRJblR5cGU9Y29tcHV0ZVR5cGVWYXJpYWJsZUJ1aWxkZXJzZmFzdGEuZGlsbF90eXBlZGVmX2J1aWxkZXJmYXN0YS50eXBlX2J1aWxkZXJfY29tcHV0ZXJVbnN1cHBvcnRlZE5vdCBpbXBsZW1lbnRlZGtlcm5lbEFyZ3VtZW50c0V4dGVuc2lvbkJ1aWxkZXJFeHRlbnNpb25CdWlsZGVyLnRhcmdldCBpcyBkZXByZWNhdGVkLiBVc2UgRXh0ZW5zaW9uQnVpbGRlci5leHRlbnNpb24gaW5zdGVhZC5FeHRlbnNpb25CdWlsZGVyLmJ1aWxkVHlwZSBpcyBub3Qgc3VwcG9ydGVkLkV4dGVuc2lvbkJ1aWxkZXIuYnVpbGRUeXBlc1dpdGhCdWlsdEFyZ3VtZW50cyBpcyBub3Qgc3VwcG9ydGVkLmNvbnRhaW5lZFVyaWZhc3RhLmNvbmZpZ3VyYXRpb25mYXN0YS5leHBvcnRmYXN0YS5pbXBvcnRjcmVhdGVQcmVmaXhCdWlsZGVyX2V4dGVuc2lvbkV4dGVuc2lvbiBtZXRob2Qga2luZDogSW5zdHJ1bWVudGF0aW9uVmFsdWVtYXRjaGVzSW5zdHJ1bWVudGF0aW9uVmFsdWVMaXRlcmFsX3Nob3J0ZW5JbnN0cnVtZW50YXRpb25TdHJpbmdkYXJ0LmNvcmU6OmRhcnQuYXN5bmM6OnRlc3Q6OlxzKi9cKi4qP1wqL1xzKmZhc3RhLnRyYW5zZm9ybV9jb2xsZWN0aW9uc2xpc3RBZGRzZXRGYWN0b3J5c2V0QWRkbWFwUHV0bWFwRW50cnlLZXltYXBFbnRyeVZhbHVlZ2V0OmVudHJpZXNfZmluZFNldEZhY3RvcnlfdHJhbnNsYXRlTGlzdE9yU2V0X2FkZEV4cHJlc3Npb25FbGVtZW50X3RyYW5zbGF0ZUVsZW1lbnRfdHJhbnNsYXRlU3ByZWFkRWxlbWVudF90cmFuc2xhdGVJZkVsZW1lbnRfdHJhbnNsYXRlRm9yRWxlbWVudF90cmFuc2xhdGVGb3JJbkVsZW1lbnR0aGVuU3RhdGVtZW50c2Vsc2VTdGF0ZW1lbnRzdGhlbkJvZHllbHNlQm9keWxvb3BCb2R5bG9vcHRlbXBlbHRjYXN0ZWRWYXJfdHJhbnNsYXRlQ29uc3RMaXN0T3JTZXRfdHJhbnNsYXRlQ29uc3RNYXBfYWRkTm9ybWFsRW50cnlfdHJhbnNsYXRlRW50cnlfdHJhbnNsYXRlU3ByZWFkRW50cnlfdHJhbnNsYXRlSWZFbnRyeV90cmFuc2xhdGVGb3JFbnRyeV90cmFuc2xhdGVGb3JJbkVudHJ5a2V5VmFydmFsdWVWYXJjdXJyZW50UGFydGZhc3RhLnRyYW5zZm9ybV9zZXRfbGl0ZXJhbHNhZGRNZXRob2RfZmluZEFkZE1ldGhvZHNldFZhcnNldEV4cGZhc3RhLnBhcnNlci5jbGFzc19tZW1iZXJfcGFyc2VyRXJyb3JEZWxlZ2F0aW9uTGlzdGVuZXJza2lwUGFyc2Vyc2tpcEV4cHJlc3Npb25wYXJzZUlkZW50aWZpZXJFeHByZXNzaW9ubWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zYXN5bmNTdGF0ZWxvb3BTdGF0ZXBhcnNlQXJndW1lbnRzT3B0c2tpcEFyZ3VtZW50c09wdHBhcnNlRnVuY3Rpb25Cb2R5YWxsb3dBYnN0cmFjdHNraXBGdW5jdGlvbkJvZHlwYXJzZUludmFsaWRCbG9ja3NraXBCbG9ja2Zhc3RhLmRpZXRfbGlzdGVuZXJpc0lnbm9yZWRQYXJzZXJFcnJvcmltcG9ydEV4cG9ydERpcmVjdGl2ZUluZGV4cGFydERpcmVjdGl2ZUluZGV4X2N1cnJlbnREZWNsYXJhdGlvbl9jdXJyZW50Q2xhc3NjdXJyZW50Q2xhc3NJc1BhcnNlclJlY292ZXJ5dW5uYW1lZEV4dGVuc2lvbkNvdW50ZXJkaXNjYXJkZW5kUGFydE9mcGFydEtleXdvcmRvZktleXdvcmRQYXJ0T2ZoYW5kbGVJbnZhbGlkVG9wTGV2ZWxEZWNsYXJhdGlvbkludmFsaWRUb3BMZXZlbERlY2xhcmF0aW9uaGFuZGxlTm9Bcmd1bWVudHNOb0FyZ3VtZW50c2hhbmRsZU5vVHlwZUFyZ3VtZW50c05vVHlwZUFyZ3VtZW50c2hhbmRsZU5vQ29uc3RydWN0b3JSZWZlcmVuY2VDb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHNOb0NvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzaGFuZGxlTm9UeXBlbGFzdENvbnN1bWVkTm9UeXBlZW5kVHlwZUxpc3RUeXBlTGlzdGhhbmRsZU5hbWVkTWl4aW5BcHBsaWNhdGlvbldpdGhDbGF1c2V3aXRoS2V5d29yZE5hbWVkTWl4aW5BcHBsaWNhdGlvbldpdGhDbGF1c2VoYW5kbGVDbGFzc1dpdGhDbGF1c2VDbGFzc1dpdGhDbGF1c2VoYW5kbGVDbGFzc05vV2l0aENsYXVzZUNsYXNzTm9XaXRoQ2xhdXNlaGFuZGxlTm9Gb3JtYWxQYXJhbWV0ZXJzTm9Gb3JtYWxQYXJhbWV0ZXJzZW5kRnVuY3Rpb25UeXBlQWxpYXN0eXBlZGVmS2V5d29yZEZ1bmN0aW9uVHlwZUFsaWFzbG9va3VwQnVpbGRlcm1ldGFkYXRhVG9rZW50b2tlbkZvck9mZnNldGlzUG9zaXRpb25hbGJ1aWxkRmllbGRzZW5kVG9wTGV2ZWxNZXRob2RnZXRPclNldFRvcExldmVsTWV0aG9kYm9keVRva2VuY3JlYXRlRnVuY3Rpb25MaXN0ZW5lcmJ1aWxkRnVuY3Rpb25Cb2R5TWVtYmVyS2luZC5Ub3BMZXZlbE1ldGhvZGhhbmRsZU5vRnVuY3Rpb25Cb2R5Tm9GdW5jdGlvbkJvZHllbmRMaWJyYXJ5TmFtZWxpYnJhcnlLZXl3b3JkaGFuZGxlRG90dGVkTmFtZWZpcnN0SWRlbnRpZmllckRvdHRlZE5hbWVlbmRDb25kaXRpb25hbFVyaWVxdWFsU2lnbkNvbmRpdGlvbmFsVXJpZW5kQ29uZGl0aW9uYWxVcmlzQ29uZGl0aW9uYWxVcmlzaGFuZGxlT3BlcmF0b3JOYW1lb3BlcmF0b3JLZXl3b3JkT3BlcmF0b3JOYW1laGFuZGxlSW52YWxpZE9wZXJhdG9yTmFtZUludmFsaWRPcGVyYXRvck5hbWVoYW5kbGVJZGVudGlmaWVyTGlzdElkZW50aWZpZXJMaXN0ZW5kU2hvd3Nob3dLZXl3b3JkU2hvd2VuZEhpZGVoaWRlS2V5d29yZEhpZGVlbmRDb21iaW5hdG9yc0NvbWJpbmF0b3JzaGFuZGxlSW1wb3J0UHJlZml4ZGVmZXJyZWRLZXl3b3JkYXNLZXl3b3JkSW1wb3J0UHJlZml4cHVzaElmTnVsbE51bGxWYWx1ZS5QcmVmaXhlbmRJbXBvcnRpbXBvcnRLZXl3b3JkaW1wb3J0VXJpVG9rZW5saWJyYXJ5Tm9kZWhhbmRsZVJlY292ZXJJbXBvcnRlbmRFeHBvcnRleHBvcnRLZXl3b3JkZW5kUGFydFBhcnRlbmRDbGFzc0ZhY3RvcnlNZXRob2RmYWN0b3J5S2V5d29yZENsYXNzRmFjdG9yeU1ldGhvZGJ1aWxkUmVkaXJlY3RpbmdGYWN0b3J5TWV0aG9kTWVtYmVyS2luZC5GYWN0b3J5ZW5kUmVkaXJlY3RpbmdGYWN0b3J5Qm9keWhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keU5hdGl2ZUZ1bmN0aW9uQm9keWhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keUlnbm9yZWROYXRpdmVGdW5jdGlvbkJvZHlJZ25vcmVkaGFuZGxlTmF0aXZlRnVuY3Rpb25Cb2R5U2tpcHBlZE5hdGl2ZUZ1bmN0aW9uQm9keVNraXBwZWRlbmRDbGFzc01ldGhvZGJlZ2luUGFyYW1NZW1iZXJLaW5kLlN0YXRpY01ldGhvZE1lbWJlcktpbmQuTm9uU3RhdGljTWV0aG9kY3JlYXRlTGlzdGVuZXJJbnRlcm5hbHR5cGVQYXJhbWV0ZXJTY29wZWNvbXB1dGVUeXBlUGFyYW1ldGVyU2NvcGVwYXJzZU1ldGFkYXRhU3RhcnBhcnNlRm9ybWFsUGFyYW1ldGVyc09wdHBhcnNlRmllbGRzaGFuZGxlSW52YWxpZE1lbWJlckludmFsaWRNZW1iZXJiZWdpbkNsYXNzT3JNaXhpbkJvZHllbmRDbGFzc09yTWl4aW5Cb2R5bWVtYmVyQ291bnRDbGFzc09yTWl4aW5Cb2R5YmVnaW5DbGFzc0RlY2xhcmF0aW9uYWJzdHJhY3RUb2tlbmVuZENsYXNzRGVjbGFyYXRpb25iZWdpbk1peGluRGVjbGFyYXRpb25taXhpbktleXdvcmRlbmRNaXhpbkRlY2xhcmF0aW9uYmVnaW5FeHRlbnNpb25EZWNsYXJhdGlvbmV4dGVuc2lvbktleXdvcmRfZXh0ZW5zaW9uI2VuZEV4dGVuc2lvbkRlY2xhcmF0aW9uZW5kRW51bWVudW1LZXl3b3JkRW51bWVuZE5hbWVkTWl4aW5BcHBsaWNhdGlvbmNsYXNzS2V5d29yZGltcGxlbWVudHNLZXl3b3JkTmFtZWRNaXhpbkFwcGxpY2F0aW9uZ2V0QXN5bmNNYXJrZXJsaXN0ZW5lckZpbmlzaEZ1bmN0aW9ubGlzdGVuZXJGaW5pc2hGaWVsZHNwYXJzZUluaXRpYWxpemVyc09wdHBhcnNlQXN5bmNNb2RpZmllck9wdHBhcnNlVG9wTGV2ZWxNZW1iZXJwYXJzZUNsYXNzTWVtYmVyaGFuZGxlRHVwbGljYXRlZE5hbWVjaGVja0J1aWxkZXJuZWFyZXN0RGVjbGFyYXRpb25taW5EaXN0YW5jZWRpc3RhbmNldG9rZW5zRm9yT2Zmc2V0c2lzSWdub3JlZEVycm9yZmFzdGEuZGlldF9wYXJzZXJwYXJzZUZvcm1hbFBhcmFtZXRlcnNSZXN0c2tpcEZvcm1hbFBhcmFtZXRlcnNSZXN0ZmFzdGEub3V0bGluZV9idWlsZGVyTWV0aG9kQm9keS5BYnN0cmFjdE1ldGhvZEJvZHkuUmVndWxhck1ldGhvZEJvZHkuUmVkaXJlY3RpbmdGYWN0b3J5Qm9keVJlZ3VsYXJpbkNvbnN0cnVjdG9yTmFtZXBvcENoYXJPZmZzZXRwb3BJZGVudGlmaWVyTGlzdGlzUGFyc2VyUmVjb3ZlcnlzZW50aW5lbE51bGxWYWx1ZS5Db21iaW5hdG9yc0VuZEltcG9ydHByZWZpeE9mZnNldEVuZENvbmRpdGlvbmFsVXJpc051bGxWYWx1ZS5Db25kaXRpb25hbFVyaXNFbmRDb25kaXRpb25hbFVyaVJlY292ZXJJbXBvcnROdWxsVmFsdWUuRGVmZXJyZWRlbnVtVmFsdWVEZWNsYXJhdGlvbm1ldGhvZERlY2xhcmF0aW9uaGFuZGxlTm9OYW1lOmJhZGludGVycG9sYXRpb25PZmZzZXRlbmRJZGVudGlmaWVyTGlzdE51bGxWYWx1ZS5JZGVudGlmaWVyTGlzdHN1ZmZpeE9mZnNldGJlZ2luQ2xhc3NPck5hbWVkTWl4aW5BcHBsaWNhdGlvblByZWx1ZGViZWdpbkNsYXNzT3JOYW1lZE1peGluQXBwbGljYXRpb25jbGFzcyBvciBtaXhpbiBhcHBsaWNhdGlvbkRlY2xhcmF0aW9uS2luZC5FeHRlbnNpb25iZWdpbk5hbWVkTWl4aW5BcHBsaWNhdGlvbmhhbmRsZUNsYXNzT3JNaXhpbkltcGxlbWVudHNpbnRlcmZhY2VzQ291bnRDbGFzc09yTWl4aW5JbXBsZW1lbnRzTnVsbFZhbHVlLlR5cGVCdWlsZGVyTGlzdGhhbmRsZVJlY292ZXJDbGFzc0hlYWRlcmhhbmRsZVJlY292ZXJNaXhpbkhlYWRlcmhhbmRsZUNsYXNzRXh0ZW5kc2V4dGVuZHNLZXl3b3JkaGFuZGxlTWl4aW5Pbm51bGxJZlBhcnNlclJlY292ZXJ5bWl4aW5Ub2tlbnN1cGVydHlwZUNvbnN0cmFpbnRzYmVnaW5FeHRlbnNpb25EZWNsYXJhdGlvblByZWx1ZGVjb21wdXRlUHJvY2VkdXJlS2luZGJlZ2luVG9wTGV2ZWxNZXRob2RleHRlcm5hbFRva2VuI21ldGhvZGZvcm1hbHNPZmZzZXRoYW5kbGVGdW5jdGlvbkJvZHlTa2lwcGVkaXNFeHByZXNzaW9uQm9keWJlZ2luTWV0aG9kYm9keUtpbmRuYW1lT3JPcGVyYXRvcnJlcXVpcmVkQXJndW1lbnRDb3VudHZhckZpbmFsT3JDb25zdE9mZnNldHN5bnRoZXNpemVkVHlwZVZhcmlhYmxlc3N5bnRoZXNpemVkRm9ybWFscyN0aGlzYmVnaW5GdW5jdGlvblR5cGVBbGlhc3BvcEZpZWxkSW5mb3Npbml0aWFsaXplclRva2VuRm9ySW5mZXJlbmNlVHlwZVZhcmlhYmxlc0RlZmluZWRzdGVwc3ZpYWNvbnRhaW5pbmdMaWJyYXJ5YmVnaW5GYWN0b3J5TWV0aG9kY29uc3RUb2tlbmV4dGVuZHNPZmZzZXRoYW5kbGVDbGFzc0hlYWRlckNsYXNzSGVhZGVyaGFuZGxlTWl4aW5IZWFkZXJnZXREb2N1bWVudGF0aW9uQ29tbWVudGRvY1Rva2VuaW5TbGFzaC8qKi8vL2Zhc3RhLmxpYnJhcnlfYnVpbGRlckxpYnJhcnlCdWlsZGVyLnRhcmdldCBpcyBkZXByZWNhdGVkLiBVc2UgTGlicmFyeUJ1aWxkZXIubGlicmFyeSBpbnN0ZWFkLi5hcHBseVBhdGNoZXNMaWJyYXJ5TG9jYWxEZWNsYXJhdGlvbkl0ZXJhdG9yTGlicmFyeUxvY2FsRGVjbGFyYXRpb25OYW1lSXRlcmF0b3JWYXJpYW5jZS5jb250cmF2YXJpYW50VmFyaWFuY2UuaW52YXJpYW50X3ZhcmlhbmNlX3R5cGVQYXJhbWV0ZXJzVG9TZWFyY2hGb3JvbGRWYXJpYW5jZXJlc29sdmVJbmZlcmVuY2VOb2RlX1R5cGVTY2hlbWFFbGltaW5hdGlvblZpc2l0b3Jpc0xlYXN0Q2xvc3VyZW5ld1JldHVyblR5cGVuZXdQb3NpdGlvbmFsUGFyYW1ldGVyc25ld05hbWVkUGFyYW1ldGVyc25ld1R5cGVBcmd1bWVudHNsZWFzdENsb3N1cmUgPDogPHR5cGU+IDw6IF9UeXBlU2NoZW1hRW52aXJvbm1lbnQmSGllcmFyY2h5QmFzZWRUeXBlRW52aXJvbm1lbnQmU3RhbmRhcmRCb3VuZHN0eXBlUGFyYW1ldGVyc1RvSW5mZXJyZXR1cm5Db250ZXh0VHlwZWluZmVyVHlwZUZyb21Db25zdHJhaW50c2Rvd253YXJkc0luZmVyUGhhc2VoYXNPbWl0dGVkQm91bmR0eXBlc0Zyb21Eb3dud2FyZHNJbmZlcmVuY2V0eXBlUGFyYW1Cb3VuZGV4dGVuZHNDb25zdHJhaW50X2luZmVyVHlwZVBhcmFtZXRlckZyb21Db250ZXh0X2luZmVyVHlwZVBhcmFtZXRlckZyb21BbGxrbm93blR5cGVzdHlwZVNhdGlzZmllc0NvbnN0cmFpbnRzb2x2ZVR5cGVDb25zdHJhaW50Z3JvdW5kZWR0eXBlRnJvbUNvbnRleHRJbmZlcmVuY2VfY29yZVR5cGVzc3Vic3RpdHV0ZVR5cGVQYXJhbXNuZXdUeXBlUGFyYW1ldGVyc2Zhc3RhLnF1YWxpZmllZF9uYW1lcHJlc2VydmVUb2tlbmlkZW50aWZpZXIoX1Rva2VuSWRlbnRpZmllcnRva2VuLWlkZW50aWZpZXIoaW5pdGlhbGl6ZWQtaWRlbnRpZmllcihxdWFsaWZpZWQtbmFtZShfVG9rZW5RdWFsaWZpZWROYW1ldG9rZW4tcXVhbGlmaWVkLW5hbWUoZmxhdHRlblF1YWxpZmllZE5hbWVPbnRva2VuSWRlbnRpZmllcmZhc3RhLmJ1aWx0aW5fdHlwZV9idWlsZGVyY29tcGlsYXRpb25Vbml0ZmFzdGEuY29uc3RydWN0b3JfcmVmZXJlbmNlX2J1aWxkZXJtaWRkbGVmYXN0YS5kZWNsYXJhdGlvblVucmVsYXRlZFRhcmdldC50YXJnZXQuYXBwbHlQYXRjaC5maW5pc2hQYXRjaGZhc3RhLmR5bmFtaWNfdHlwZV9idWlsZGVyZmFzdGEuZW51bV9idWlsZGVyc2VsZlR5cGV2YWx1ZXNCdWlsZGVydG9TdHJpbmdCdWlsZGVyZW51bUNvbnN0YW50SW5mb3N0YXJ0Q2hhck9mZnNldENvbXB1dGVkZW51bUJ1aWxkZXJlbnVtIGluZGV4RmllbGRCdWlsZGVyaW5kZXhGaWVsZG5hbWVGaWVsZEJ1aWxkZXJuYW1lRmllbGRzdXBlckNvbnN0cnVjdG9yZmFzdGEuZmllbGRfYnVpbGRlcmlzRWxpZ2libGVGb3JJbmZlcmVuY2VlbmNsb3NpbmdDbGFzc0J1aWxkZXJib2R5QnVpbGRlcmZhc3RhLmZvcm1hbF9wYXJhbWV0ZXJfYnVpbGRlcmlzTWFuZGF0b3J5Rm9ybWFsUGFyYW1ldGVyS2luZGlzT3B0aW9uYWxOYW1lZEZvcm1hbFBhcmFtZXRlcktpbmRpc09wdGlvbmFsUG9zaXRpb25hbEZvcm1hbFBhcmFtZXRlcktpbmRpc05hbWVkUmVxdWlyZWRmb3JGb3JtYWxQYXJhbWV0ZXJJbml0aWFsaXplclNjb3BlaXNDb25zdENvbnN0cnVjdG9yUGFyYW1ldGVyZmFzdGEucHJvY2VkdXJlX2J1aWxkZXJfZXh0ZW5zaW9uVGhpc19leHRlbnNpb25UeXBlUGFyYW1ldGVyc2Zvcm1hbCBwYXJhbWV0ZXJmb3JtYWwgcGFyYW1ldGVyIGluaXRpYWxpemVydHlwZSBwYXJhbWV0ZXJuZXdCb2R5YnVpbGRGdW5jdGlvbiNzeW50aGV0aWNyZW1vdmVUeXBlVmFyaWFibGVzUHJvY2VkdXJlQnVpbGRlci5leHRlbnNpb25UaGlzIGhhcyBub3QgYmVlbiBzZXQuUHJvY2VkdXJlQnVpbGRlci5leHRlbnNpb25UeXBlUGFyYW1ldGVycyBoYXMgbm90IGJlZW4gc2V0LmNoZWNrUGF0Y2hyZXBvcnRQYXRjaE1pc21hdGNoX3Byb2NlZHVyZWFjdHVhbEFzeW5jTW9kaWZpZXJfZXh0ZW5zaW9uVGVhck9mZl91cGRhdGVFeHRlbnNpb25TZXR0ZXJCb2R5bmV3TW9kaWZpZXJpc0VsaWdpYmxlRm9yVG9wTGV2ZWxJbmZlcmVuY2Vpc0V4dGVuc2lvbk1ldGhvZGtpbmRJbmZpeGdldCNzZXQjVW5leHBlY3RlZCBleHRlbnNpb24gbWV0aG9kIGtpbmQgX2J1aWxkRXh0ZW5zaW9uVGVhck9mZk5vIGV4dGVuc2lvbiB0ZWFyIG9mZiBjcmVhdGVkIGZvciBuZXdUeXBlUGFyYW1ldGVydGVhck9mZlR5cGVQYXJhbWV0ZXJzY2xvc3VyZVR5cGVQYXJhbWV0ZXJzY29weVBhcmFtZXRlcmNsb3N1cmVSZXR1cm5UeXBlY2xvc3VyZVBvc2l0aW9uYWxQYXJhbWV0ZXJzY2xvc3VyZVBvc2l0aW9uYWxBcmd1bWVudHNuZXdQYXJhbWV0ZXJjbG9zdXJlTmFtZWRQYXJhbWV0ZXJzY2xvc3VyZU5hbWVkQXJndW1lbnRzY2xvc3VyZUJvZHl8Z2V0I19jb25zdHJ1Y3Rvcmhhc01vdmVkU3VwZXJJbml0aWFsaXplcnN1cGVySW5pdGlhbGl6ZXJyZWRpcmVjdGluZ0luaXRpYWxpemVyZnVuY3Rpb25Ob2RlaW5qZWN0SW52YWxpZEluaXRpYWxpemVybGFzdEluaXRpYWxpemVycmVkaXJlY3RpbmdPcmlnaW5mYXN0YS5mdW5jdGlvbl90eXBlX2J1aWxkZXIpIC0+IGJ1aWx0UmV0dXJuVHlwZWNsb25lZFR5cGVWYXJpYWJsZXNmYXN0YS5pbnZhbGlkX3R5cGVfYnVpbGRlcmZhc3RhLm1ldGFkYXRhX2J1aWxkZXJidWlsZEFubm90YXRpb25zYW5ub3RhdGlvbkJ1aWxkZXJmYXN0YS5taXhpbl9hcHBsaWNhdGlvbl9idWlsZGVyZmFzdGEubmFtZV9pdGVyYXRvcmZhc3RhLm5hbWVkX3R5cGVfYnVpbGRlcmZyb21UeXBlRGVjbGFyYXRpb25CdWlsZGVydHlwZU5hbWVPZmZzZXRmbGF0TmFtZWhhbmRsZUludmFsaWRTdXBlcnR5cGVEZWNsYXJhdGlvbiBoYXMgbm90IGJlZW4gcmVzb2x2ZWQgb24gY2xvbmVkQXJndW1lbnRzZmFzdGEucHJlZml4X2J1aWxkZXJmYXN0YS50eXBlX2J1aWxkZXJmYXN0YS50eXBlX2RlY2xhcmF0aW9uX2J1aWxkZXJmYXN0YS50eXBlX3ZhcmlhYmxlX2J1aWxkZXJhY3R1YWxQYXJhbWV0ZXJmcm9tS2VybmVsVHlwZVZhcmlhYmxlQnVpbGRlci50YXJnZXQgaXMgZGVwcmVjYXRlZC4gVXNlIFR5cGVWYXJpYWJsZUJ1aWxkZXIucGFyYW1ldGVyIGluc3RlYWQuYXNUeXBlQnVpbGRlcnR5cGVQYXJhbWV0ZXJzRnJvbUJ1aWxkZXJzZmFzdGEudW5yZXNvbHZlZF90eXBlVW5yZXNvbHZlZFR5cGUoQGZhc3RhLnZvaWRfdHlwZV9idWlsZGVyZmFzdGEucGFyc2VyLmxpc3RlbmVybG9nRXZlbnRzdXBwcmVzc1BhcnNlRXJyb3JzYmVnaW5Bcmd1bWVudHNiZWdpbkF3YWl0RXhwcmVzc2lvbkludmFsaWRBd2FpdEV4cHJlc3Npb25DYXNjYWRlQ2FzZUV4cHJlc3Npb25DbGFzc0V4dGVuZHNDbGFzc0ltcGxlbWVudHNSZWNvdmVyQ2xhc3NIZWFkZXJDbGFzc0RlY2xhcmF0aW9uTWl4aW5Pbk1peGluSGVhZGVyUmVjb3Zlck1peGluSGVhZGVyTWl4aW5EZWNsYXJhdGlvbkV4dGVuc2lvbkRlY2xhcmF0aW9uYmVnaW5Db21iaW5hdG9yc2JlZ2luQ29tcGlsYXRpb25Vbml0aGFuZGxlRGlyZWN0aXZlc09ubHllbmRDb21waWxhdGlvblVuaXRDb21waWxhdGlvblVuaXRDb25zdExpdGVyYWxiZWdpbkNvbnN0cnVjdG9yUmVmZXJlbmNlRG9XaGlsZVN0YXRlbWVudEJvZHlXaGlsZVN0YXRlbWVudEJvZHliZWdpbkVudW1iZWdpbkV4cG9ydGhhbmRsZUV4dHJhbmVvdXNFeHByZXNzaW9uRXh0cmFuZW91c0V4cHJlc3Npb25lbmRNaXhpbkZhY3RvcnlNZXRob2RlbmRFeHRlbnNpb25GYWN0b3J5TWV0aG9kZW5kTWl4aW5GaWVsZHNlbmRFeHRlbnNpb25GaWVsZHNGb3JTdGF0ZW1lbnRCb2R5Rm9ySW5Cb2R5YmVnaW5GdW5jdGlvbk5hbWViZWdpbkhpZGViZWdpblR5cGVMaXN0YmVnaW5JZlN0YXRlbWVudFRoZW5TdGF0ZW1lbnRFbHNlU3RhdGVtZW50YmVnaW5JbXBvcnRJbXBvcnRSZWNvdmVyeWJlZ2luQ29uZGl0aW9uYWxVcmlzYmVnaW5Db25kaXRpb25hbFVyaWJlZ2luSW5pdGlhbGl6ZWRJZGVudGlmaWVyYmVnaW5WYXJpYWJsZUluaXRpYWxpemVyQ29uc3RydWN0b3JJbml0aWFsaXplcmhhbmRsZUludmFsaWRFeHByZXNzaW9uSW52YWxpZEZ1bmN0aW9uQm9keWhhbmRsZUludmFsaWRUeXBlUmVmZXJlbmNlSW52YWxpZFR5cGVSZWZlcmVuY2ViZWdpbkxpYnJhcnlOYW1lTGlicmFyeU5hbWVoYW5kbGVJbnRlcnBvbGF0aW9uRXhwcmVzc2lvbkxpdGVyYWxTdHJpbmdiZWdpbk1lbWJlckNsYXNzTWV0aG9kZW5kTWl4aW5NZXRob2RlbmRFeHRlbnNpb25NZXRob2RlbmRDbGFzc0NvbnN0cnVjdG9yZW5kTWl4aW5Db25zdHJ1Y3RvcmVuZEV4dGVuc2lvbkNvbnN0cnVjdG9yYmVnaW5NZXRhZGF0YVN0YXJiZWdpbk9wdGlvbmFsRm9ybWFsUGFyYW1ldGVyc2JlZ2luUGFydGJlZ2luUGFydE9mYmVnaW5SZWRpcmVjdGluZ0ZhY3RvcnlCb2R5YmVnaW5SZXR1cm5TdGF0ZW1lbnRFbXB0eUZ1bmN0aW9uQm9keWJlZ2luU2hvd2JlZ2luU3dpdGNoU3RhdGVtZW50YmVnaW5MaXRlcmFsU3ltYm9sYmVnaW5SZXRocm93U3RhdGVtZW50ZW5kVG9wTGV2ZWxEZWNsYXJhdGlvblRvcExldmVsRGVjbGFyYXRpb25iZWdpblRvcExldmVsTWVtYmVyYmVnaW5UcnlTdGF0ZW1lbnRUcnlTdGF0ZW1lbnROb25OdWxsQXNzZXJ0RXhwcmVzc2lvbm1vZGlmaWVyVG9rZW5Ob05hbWViZWdpblR5cGVBcmd1bWVudHNiZWdpblR5cGVWYXJpYWJsZXNDb25zdEV4cHJlc3Npb25FbHNlQ29udHJvbEZsb3diZWdpbllpZWxkU3RhdGVtZW50aGFuZGxlRXJyb3JUb2tlbmRpc2NhcmRUeXBlUmVwbGFjZWRXaXRoQ29tbWVudFR5cGVBc3NpZ25oYW5kbGVDb21tZW50UmVmZXJlbmNlVGV4dHJlZmVyZW5jZVNvdXJjZXJlZmVyZW5jZU9mZnNldENvbW1lbnRSZWZlcmVuY2VUZXh0aGFuZGxlQ29tbWVudFJlZmVyZW5jZW5ld0tleXdvcmRoYW5kbGVOb0NvbW1lbnRSZWZlcmVuY2VmYXN0YS5wYXJzZXIucGFyc2VyRm9yd2FyZGluZ0xpc3RlbmVybG9va3NMaWtlRXhwcmVzc2lvblN0YXJ0TGl0ZXJhbEVudHJ5SW5mb2NvbXB1dGVMaXRlcmFsRW50cnlsb29rc0xpa2VMaXRlcmFsRW50cnlzaW1wbGVFbnRyeUxvb3BTdGF0ZU1vZGlmaWVyUmVjb3ZlcnlDb250ZXh0Q2xhc3NIZWFkZXJSZWNvdmVyeUxpc3RlbmVySW1wb3J0UmVjb3ZlcnlMaXN0ZW5lck1peGluSGVhZGVyUmVjb3ZlcnlMaXN0ZW5lclRva2VuU3RyZWFtUmV3cml0ZXJUeXBlSW5mb1R5cGVQYXJhbU9yQXJnSW5mb2NvbXB1dGVNZXRob2RUeXBlQXJndW1lbnRzY29tcHV0ZVR5cGVjb21wdXRlVHlwZVBhcmFtT3JBcmdpc1ZhbGlkVHlwZVJlZmVyZW5jZW5vVHlwZW5vVHlwZVBhcmFtT3JBcmdmaW5kTm9uWmVyb0xlbmd0aFRva2VuZmluZFByZXZpb3VzTm9uWmVyb0xlbmd0aFRva2VuaXNMZXR0ZXJpc0xldHRlck9yRGlnaXRpc09uZU9maXNPbmVPZk9yRW9maXNXaGl0ZXNwYWNlX01lc3NhZ2VXaXRoQXJndW1lbnRMb29wU3RhdGUuT3V0c2lkZUxvb3BjYWNoZWRSZXdyaXRlcnN0YXRlbWVudERlcHRoZXhwcmVzc2lvbkRlcHRocmV3cml0ZXJpbkdlbmVyYXRvcmluQXN5bmNpblBsYWluU3luY2lzQnJlYWtBbGxvd2VkaXNDb250aW51ZUFsbG93ZWRMb29wU3RhdGUuSW5zaWRlTG9vcGlzQ29udGludWVXaXRoTGFiZWxBbGxvd2Vkc2tpcEVycm9yVG9rZW5zZGlyZWN0aXZlU3RhdGVjaGVja1NjcmlwdFRhZ3BhcnNlU2NyaXB0cGFyc2VUb3BMZXZlbERlY2xhcmF0aW9uSW1wbHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW5yZXBvcnRBbGxFcnJvclRva2Vuc3BhcnNlRGlyZWN0aXZlc25leHRWYWx1ZWNoZWNrSW1wb3J0cGFyc2VJbXBvcnRjaGVja0V4cG9ydHBhcnNlRXhwb3J0Y2hlY2tMaWJyYXJ5cGFyc2VMaWJyYXJ5TmFtZXBhcnNlUGFydE9yUGFydE9mcGFyc2VUb3BMZXZlbERlY2xhcmF0aW9ucGFyc2VUb3BMZXZlbEtleXdvcmREZWNsYXJhdGlvbmNoZWNrRGVjbGFyYXRpb25wYXJzZVRvcExldmVsTWVtYmVySW1wbHJlcG9ydFJlY292ZXJhYmxlRXJyb3JpbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyI3N5bnRoZXRpY19mdW5jdGlvbl9wYXJzZUludmFsaWRUb3BMZXZlbERlY2xhcmF0aW9ucGFyc2VDbGFzc0RlY2xhcmF0aW9uTW9kaWZpZXJzcGFyc2VUb3BMZXZlbEtleXdvcmRNb2RpZmllcnNyZXBvcnRUb3BMZXZlbE1vZGlmaWVyRXJyb3JhZnRlck1vZGlmaWVyc3BhcnNlQ2xhc3NPck5hbWVkTWl4aW5BcHBsaWNhdGlvbnBhcnNlRW51bXBhcnNlRXh0ZW5zaW9ucGFyc2VUeXBlZGVmcGFyc2VNaXhpbkludGVybmFsIGVycm9yOiBVbmhhbmRsZWQgdG9wIGxldmVsIGtleXdvcmQgJ3BhcnNlUXVhbGlmaWVkbGlicmFyeU5hbWVDb250aW51YXRpb25lbnN1cmVTZW1pY29sb25wYXJzZUltcG9ydFByZWZpeE9wdGRlZmVycmVkVG9rZW5lbnN1cmVJZGVudGlmaWVyaW1wb3J0UHJlZml4RGVjbGFyYXRpb25lbnN1cmVMaXRlcmFsU3RyaW5ncGFyc2VDb25kaXRpb25hbFVyaVN0YXJwYXJzZUNvbWJpbmF0b3JTdGFycGFyc2VJbXBvcnRSZWNvdmVyeXByaW1hcnlMaXN0ZW5lcnJlY292ZXJ5TGlzdGVuZXJmaXJzdERlZmVycmVkS2V5d29yZGhhc1ByZWZpeGhhc0NvbWJpbmF0b3Jza2lwVW5leHBlY3RlZFRva2VuT3B0cGFyc2VDb25kaXRpb25hbFVyaWluc2VydFBhcmVuc3BhcnNlRG90dGVkTmFtZWVxdWFsaXR5U2lnbm1vdmVTeW50aGV0aWNkb3R0ZWROYW1lQ29udGludWF0aW9ucGFyc2VIaWRlcGFyc2VTaG93cGFyc2VJZGVudGlmaWVyTGlzdHBhcnNlVHlwZUxpc3RlbnN1cmVUeXBlT3JWb2lkY2hlY2tQYXJ0T2ZwYXJzZVBhcnRPZmNoZWNrUGFydHBhcnNlUGFydHBhcnROYW1lcGFydE5hbWVDb250aW51YXRpb25hdFRva2VubWV0YWRhdGFSZWZlcmVuY2VwYXJzZVF1YWxpZmllZFJlc3RPcHRtZXRhZGF0YUNvbnRpbnVhdGlvbnBhcnNlQXJndW1lbnRzbWV0YWRhdGFDb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHN0eXBlSW5mb3NraXBUeXBldHlwZWRlZkRlY2xhcmF0aW9ucGFyc2VWYXJpYWJsZXNwYXJzZVR5cGVwYXJzZUZvcm1hbFBhcmFtZXRlcnNSZXF1aXJlZE9wdE1lbWJlcktpbmQuRnVuY3Rpb25UeXBlQWxpYXNwYXJzZU1peGluQXBwbGljYXRpb25SZXN0aW5zZXJ0U3ludGhldGljS2V5d29yZHBhcnNlV2l0aENsYXVzZU9wdHBhcnNlR2V0dGVyT3JGb3JtYWxQYXJhbWV0ZXJzcGFyc2VGb3JtYWxQYXJhbWV0ZXJzaXNVbmFyeU1pbnVzbWlzc2luZ1BhcmFtZXRlck1lc3NhZ2Vza2lwRm9ybWFsUGFyYW1ldGVyc3BhcnNlT3B0aW9uYWxQb3NpdGlvbmFsUGFyYW1ldGVyc2Vuc3VyZUNsb3NlUGFyZW5wYXJzZU9wdGlvbmFsTmFtZWRQYXJhbWV0ZXJzcmV3cml0ZVNxdWFyZUJyYWNrZXRzcGFyc2VGb3JtYWxQYXJhbWV0ZXJyZXdyaXRlQW5kUmVjb3ZlcnBhcmFtZXRlcktpbmRpbkZ1bmN0aW9uVHlwZXBhcnNlRm9ybWFsUGFyYW1ldGVyTW9kaWZpZXJzYmVmb3JlVHlwZWlzTmFtZWRQYXJhbWV0ZXJuYW1lQ29udGV4dGZvcm1hbFBhcmFtZXRlckRlY2xhcmF0aW9uZmllbGRJbml0aWFsaXplcmJlZm9yZUlubGluZUZ1bmN0aW9uVHlwZWNsb3NlcmVuZElubGluZUZ1bmN0aW9uVHlwZU1lbWJlcktpbmQuRnVuY3Rpb25UeXBlZFBhcmFtZXRlcmVxdWFsY29udGludWF0aW9uQ29udGV4dHBhcnNlUXVhbGlmaWVkUmVzdGVuc3VyZUJsb2NrZW51bURlY2xhcmF0aW9uY2xhc3NPck1peGluRGVjbGFyYXRpb25wYXJzZU5hbWVkTWl4aW5BcHBsaWNhdGlvbnBhcnNlQ2xhc3NlbnN1cmVUeXBlTm90Vm9pZHBhcnNlQ2xhc3NIZWFkZXJPcHRwYXJzZUNsYXNzSGVhZGVyUmVjb3ZlcnljbGFzcyBkZWNsYXJhdGlvbnBhcnNlQ2xhc3NPck1peGluT3JFeHRlbnNpb25Cb2R5RGVjbGFyYXRpb25LaW5kLkNsYXNzcGFyc2VDbGFzc0V4dGVuZHNPcHRwYXJzZUNsYXNzT3JNaXhpbkltcGxlbWVudHNPcHRwYXJzZU5hdGl2ZUNsYXVzZWhhc0V4dGVuZHNoYXNJbXBsZW1lbnRzaGFzV2l0aGluY29ycmVjdEV4dGVuZHNLZXl3b3JkaGVhZGVyU3RhcnRwYXJzZU1peGluSGVhZGVyT3B0cGFyc2VNaXhpbkhlYWRlclJlY292ZXJ5bWl4aW4gZGVjbGFyYXRpb25EZWNsYXJhdGlvbktpbmQuTWl4aW5wYXJzZU1peGluT25PcHRoYXNPbnBhcnNlTWl4aW5PbmV4dGVuc2lvbiBkZWNsYXJhdGlvbnBhcnNlU3RyaW5nUGFydGluc2VydFRva2VubWVzc2FnZU9uVG9rZW5yZWNvdmVyeVRlbXBsYXRlbm90RW9mT3JWYWx1ZXBhcnNlVHlwZVZhcmlhYmxlc09wdGJlZm9yZVN0YXJ0cGFyc2VUb3BMZXZlbE1vZGlmaWVycyNzeW50aGV0aWNfaWRlbnRpZmllcl9wYXJzZVRvcExldmVsTWV0aG9kRGVjbGFyYXRpb25LaW5kLlRvcExldmVsZmllbGRDb3VudHBhcnNlRmllbGRJbml0aWFsaXplck9wdGluc2VydFN5bnRoZXRpY1Rva2VudG9wTGV2ZWxGdW5jdGlvbkRlY2xhcmF0aW9ucGFyc2VNZXRob2RUeXBlVmFyc2F2ZWRBc3luY01vZGlmaWVydHlwZVZhcnBhcnNlVmFyaWFibGVJbml0aWFsaXplck9wdHBhcnNlSW5pdGlhbGl6ZXJiZWZvcmVFeHByZXNzaW9ucGFyc2VBc3NlcnRwYXJzZVN1cGVySW5pdGlhbGl6ZXJFeHByZXNzaW9ucGFyc2VJbml0aWFsaXplckV4cHJlc3Npb25SZXN0ZXhwcmVzc2lvbkNvbnRpbnVhdGlvbmJsb2NrS2luZGluc2VydEJsb2NrYmVnaW5Hcm91cG9wZW5QYXJlbmVuc3VyZUNvbG9ubmV3VG9rZW4iInBhcnNlTGl0ZXJhbFN0cmluZ3JlcGxhY2VUb2tlbkZvbGxvd2luZ2V4cGVjdGVkTmV4dGV4cGVjdGVkVmFsdWVza2lwQ2xhc3NPck1peGluT3JFeHRlbnNpb25Cb2R5ZW5jbG9zaW5nRGVjbGFyYXRpb25OYW1lcGFyc2VDbGFzc09yTWl4aW5PckV4dGVuc2lvbk1lbWJlckltcGx1bmFyeXBhcnNlTWl4aW5NZW1iZXJwYXJzZUV4dGVuc2lvbk1lbWJlcnBhcnNlQ2xhc3NNZW1iZXJNb2RpZmllcnNwYXJzZUZhY3RvcnlNZXRob2RwYXJzZU1ldGhvZHBhcnNlSW52YWxpZE9wZXJhdG9yRGVjbGFyYXRpb25yZWNvdmVyRnJvbUludmFsaWRNZW1iZXJwYXJzZU9wZXJhdG9yTmFtZW1ldGhvZERlY2xhcmF0aW9uQ29udGludWF0aW9uYmVmb3JlUGFyYW1iZWZvcmVJbml0aWFsaXplcnNwYXJzZVJlZGlyZWN0aW5nRmFjdG9yeUJvZHlJbnRlcm5hbCBlcnJvcjogVG9wTGV2ZWwgbWV0aG9kL2NvbnN0cnVjdG9yLnN0YXRpY09yQ292YXJpYW50cGFyc2VNb2RpZmllcnNBZnRlckZhY3RvcnlJbnRlcm5hbCBlcnJvcjogVG9wTGV2ZWwgZmFjdG9yeS5iZWZvcmVUb2tlbnBhcnNlRnVuY3Rpb25FeHByZXNzaW9uTWVtYmVyS2luZC5Mb2NhbHBhcnNlQXN5bmNPcHRCb2R5cGFyc2VGdW5jdGlvbkxpdGVyYWxiZWZvcmVOYW1lcGFyc2VOYW1lZEZ1bmN0aW9uUmVzdGxvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbm9mRnVuY3Rpb25FeHByZXNzaW9ucGFyc2VDb25zdHJ1Y3RvclJlZmVyZW5jZWNvbnN0cnVjdG9yUmVmZXJlbmNlY29uc3RydWN0b3JSZWZlcmVuY2VDb250aW51YXRpb25jb25zdHJ1Y3RvclJlZmVyZW5jZUNvbnRpbnVhdGlvbkFmdGVyVHlwZUFyZ3VtZW50c3NraXBBc3luY01vZGlmaWVycGFyc2VFeHByZXNzaW9uRnVuY3Rpb25Cb2R5c2F2ZWRMb29wU3RhdGVwYXJzZVN0YXRlbWVudHJlY292ZXJGcm9tU3RhY2tPdmVyZmxvd3BhcnNlU3RhdGVtZW50WHBhcnNlTGFiZWxlZFN0YXRlbWVudHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudE9yRGVjbGFyYXRpb25BZnRlck1vZGlmaWVyc3BhcnNlQmxvY2twYXJzZVJldHVyblN0YXRlbWVudHZhck9yRmluYWxwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnRPckRlY2xhcmF0aW9ucGFyc2VJZlN0YXRlbWVudHBhcnNlRm9yU3RhdGVtZW50cGFyc2VSZXRocm93U3RhdGVtZW50cGFyc2VXaGlsZVN0YXRlbWVudHBhcnNlRG9XaGlsZVN0YXRlbWVudHBhcnNlVHJ5U3RhdGVtZW50cGFyc2VTd2l0Y2hTdGF0ZW1lbnRwYXJzZUJyZWFrU3RhdGVtZW50cGFyc2VDb250aW51ZVN0YXRlbWVudHBhcnNlQXNzZXJ0U3RhdGVtZW50cGFyc2VFbXB0eVN0YXRlbWVudHBhcnNlWWllbGRTdGF0ZW1lbnRJbnRlcm5hbCBlcnJvcjogVW5rbm93biBhc3luY1N0YXRlOiAncGFyc2VFeHByZXNzaW9uU3RhdGVtZW50T3JDb25zdERlY2xhcmF0aW9ubG9va3NMaWtlQXdhaXRFeHByZXNzaW9ucGFyc2VFeHByZXNzaW9uU3RhdGVtZW50cGFyc2VMYWJlbGxhYmVsRGVjbGFyYXRpb25wYXJzZVRocm93RXhwcmVzc2lvbnBhcnNlUHJlY2VkZW5jZUV4cHJlc3Npb25wYXJzZUV4cHJlc3Npb25XaXRob3V0Q2FzY2FkZXBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uUmVzdGFsbG93Q2FzY2FkZXNwYXJzZVVuYXJ5RXhwcmVzc2lvbnRva2VuTGV2ZWxfY29tcHV0ZVByZWNlZGVuY2VsYXN0QmluYXJ5RXhwcmVzc2lvbkxldmVscGFyc2VDYXNjYWRlRXhwcmVzc2lvbnBhcnNlUHJpbWFyeXBhcnNlQXJndW1lbnRPckluZGV4U3RhcnBhcnNlSXNPcGVyYXRvclJlc3RwYXJzZUFzT3BlcmF0b3JSZXN0Y2FzY2FkZU9wZXJhdG9ycGFyc2VTZW5kbWFya3BhcnNlQXdhaXRFeHByZXNzaW9ucGFyc2VJbXBsaWNpdENyZWF0aW9uRXhwcmVzc2lvbnBhcnNlU2VuZE9yRnVuY3Rpb25MaXRlcmFscGFyc2VMaXRlcmFsSW50cGFyc2VMaXRlcmFsRG91YmxlcGFyc2VMaXRlcmFsU3ltYm9scGFyc2VMaXRlcmFsQm9vbHBhcnNlTGl0ZXJhbE51bGxwYXJzZVRoaXNFeHByZXNzaW9ucGFyc2VTdXBlckV4cHJlc3Npb25wYXJzZU5ld0V4cHJlc3Npb25wYXJzZUNvbnN0RXhwcmVzc2lvbnBhcnNlUGFyZW50aGVzaXplZEV4cHJlc3Npb25PckZ1bmN0aW9uTGl0ZXJhbHBhcnNlTGl0ZXJhbExpc3RTdWZmaXhwYXJzZUxpdGVyYWxTZXRPck1hcFN1ZmZpeHBhcnNlTGl0ZXJhbExpc3RTZXRNYXBPckZ1bmN0aW9ucGFyc2VQYXJlbnRoZXNpemVkRXhwcmVzc2lvbmVuc3VyZVBhcmVudGhlc2l6ZWRDb25kaXRpb25wYXJzZUV4cHJlc3Npb25JblBhcmVudGhlc2lzUmVzdHBhcnNlRXhwcmVzc2lvbkluUGFyZW50aGVzaXN0aGlzVG9rZW5zdXBlclRva2VuaWZDb3VudGhhc0VudHJ5aWZDb25kaXRpb25EZWx0YWNvbXB1dGVOZXh0aXNNYXBFbnRyeXBhcnNlTGl0ZXJhbEZ1bmN0aW9uU3VmZml4dHlwZVBhcmFtT3JBcmdwYXJzZU1hcExpdGVyYWxFbnRyeWxvb2tzTGlrZUZ1bmN0aW9uQm9keWVuc3VyZUFyZ3VtZW50c3BhcnNlQXJndW1lbnRzUmVzdHBhcnNlQ29uc3RydWN0b3JJbnZvY2F0aW9uQXJndW1lbnRzcGFyc2VTaW5nbGVMaXRlcmFsU3RyaW5nbGl0ZXJhbFN5bWJvbGxpdGVyYWxTeW1ib2xDb250aW51YXRpb25oYXNTZWVuTmFtZWRBcmd1bWVudG5hbWVkQXJndW1lbnRSZWZlcmVuY2Vjb21wdXRlVHlwZUFmdGVySXNPckFzc2tpcENoYWluZWRBc0lzT3BlcmF0b3JzYXNOb25OdWxsYWJsZWxvb2tzTGlrZUxvY2FsRnVuY3Rpb25vbmx5UGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uU3RhcnRwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25Nb2RpZmllcnNiZWZvcmVGb3JtYWxzY291bGRCZUV4cHJlc3Npb25hZnRlcklkZW50aWZpZXJvcmlnaW5hbExpc3RlbmVyYWZ0ZXJFeHByZXNzaW9ucGFyc2VWYXJpYWJsZXNEZWNsYXJhdGlvblJlc3RlbmRXaXRoU2VtaWNvbG9ucGFyc2VPcHRpb25hbGx5SW5pdGlhbGl6ZWRJZGVudGlmaWVybG9jYWxWYXJpYWJsZURlY2xhcmF0aW9ucGFyc2VGb3JMb29wUGFydHNTdGFydHBhcnNlRm9yTG9vcFBhcnRzTWlkcGFyc2VGb3JJblJlc3RwYXJzZUZvclJlc3RwYXJzZUZvckxvb3BQYXJ0c1Jlc3RwYXJzZUZvckluTG9vcFBhcnRzUmVzdHdoaWxlVG9rZW5kb1Rva2VuZm9yd2FyZEVycm9yc3RyeSBzdGF0ZW1lbnRvcGVuUGFyZW5zZXhjZXB0aW9uTmFtZWNhdGNoUGFyYW1ldGVydHJhY2VOYW1lTWVtYmVyS2luZC5DYXRjaGNhdGNoIGNsYXVzZWZpbmFsbHkgY2xhdXNlTG9vcFN0YXRlLkluc2lkZVN3aXRjaHBhcnNlU3dpdGNoQmxvY2tiZWdpblN3aXRjaHN3aXRjaCBzdGF0ZW1lbnRiZWdpbkNhc2VwZWVrUGFzdExhYmVsc3BhcnNlU3RhdGVtZW50c0luU3dpdGNoQ2FzZWxhYmVsUmVmZXJlbmNlcHJldmlvdXNUb2tlbnJlcG9ydEFuZFNraXBDbGFzc0luQ2xhc3NyZXBvcnRBbmRTa2lwRW51bUluQ2xhc3NyZXBvcnRBbmRTa2lwVHlwZWRlZkluQ2xhc3NmaW5kRGFydERvY2lzTXVsdGlsaW5lcGFyc2VDb21tZW50UmVmZXJlbmNlc3BhcnNlUmVmZXJlbmNlc0luU2luZ2xlTGluZUNvbW1lbnRzcGFyc2VSZWZlcmVuY2VzSW5NdWx0aUxpbmVDb21tZW50bXVsdGlMaW5lRG9jaW5Db2RlQmxvY2tjb2RlQmxvY2tgYGAqICAgICBwYXJzZUNvbW1lbnRSZWZlcmVuY2VzSW5UZXh0Ly8vICAgIGNvbW1lbnRUb2tlbmNoOl1yZWZlcmVuY2VTdGFydGZpbmRSZWZlcmVuY2VFbmRpc0xpbmtUZXh0ZW5kQ29kZUJsb2NrcGFyc2VPbmVDb21tZW50UmVmZXJlbmNlcGFyc2VPbmVDb21tZW50UmVmZXJlbmNlUmVzdGlkZW50aWZpZXJPck9wZXJhdG9ycmlnaHRJbmRleGZhc3RhLnBhcnNlci5wYXJzZXJfZXJyb3JiZWdpbk9mZnNldGZyb21Ub2tlbnNmYXN0YS5wYXJzZXIuQXNzZXJ0ZmFzdGEucGFyc2VyLmZvcm1hbF9wYXJhbWV0ZXJfa2luZG1hbmRhdG9yeW9wdGlvbmFsTmFtZWRvcHRpb25hbFBvc2l0aW9uYWxjbGFzc09yTWl4aW5PckV4dGVuc2lvbkRlY2xhcmF0aW9udHlwZVZhcmlhYmxlRGVjbGFyYXRpb25wcmVmaXhlZFR5cGVSZWZlcmVuY2V0eXBlUmVmZXJlbmNldHlwZVJlZmVyZW5jZUNvbnRpbnVhdGlvbm9wZXJhdG9yTmFtZWxvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbkNvbnRpbnVhdGlvbmluTGlicmFyeU9yUGFydE9mRGVjbGFyYXRpb25pblN5bWJvbGlzQ29udGludWF0aW9uaXNCdWlsdEluSWRlbnRpZmllckFsbG93ZWRsb29rc0xpa2VTdGF0ZW1lbnRTdGFydFRvcExldmVsZmFzdGEucGFyc2VyLm1lbWJlcl9raW5kTWVtYmVyS2luZC5Ob25TdGF0aWNGaWVsZE1lbWJlcktpbmQuU3RhdGljRmllbGRNZW1iZXJLaW5kLlRvcExldmVsRmllbGRGdW5jdGlvblR5cGVkUGFyYW1ldGVyR2VuZXJhbGl6ZWRGdW5jdGlvblR5cGVOb25TdGF0aWNNZXRob2RTdGF0aWNNZXRob2ROb25TdGF0aWNGaWVsZFN0YXRpY0ZpZWxkVG9wTGV2ZWxGaWVsZGZhc3RhLnBhcnNlci50b3BfbGV2ZWxfcGFyc2VyZmFzdGEucGFyc2VyLnV0aWxiZWZvcmVDbG9zZUJyYWNlVG9rZW5Gb3J0b2tlblZhbHVlc2tpcE1ldGFkYXRhc3BsaXRHdEVxc3BsaXRHdEd0c3BsaXRHdEd0RXFzcGxpdEd0RnJvbUd0R3RFcXNwbGl0R3RGcm9tR3RHdEd0c3BsaXRHdEZyb21HdEd0R3RFcXN5bnRoZXRpY0d0ZmFzdGEuc3RhY2tfbGlzdGVuZXJOdWxsVmFsdWUuQXNOdWxsVmFsdWUuQ2FzY2FkZVJlY2VpdmVyTnVsbFZhbHVlLkNvbW1lbnRzTnVsbFZhbHVlLkNvbmRpdGlvbmFsbHlTZWxlY3RlZEltcG9ydE51bGxWYWx1ZS5Db25zdHJ1Y3RvckluaXRpYWxpemVyU2VwYXJhdG9yTnVsbFZhbHVlLkNvbnN0cnVjdG9ySW5pdGlhbGl6ZXJzTnVsbFZhbHVlLkNvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzTnVsbFZhbHVlLkRvY3VtZW50YXRpb25Db21tZW50TnVsbFZhbHVlLkV4dGVuZHNDbGF1c2VOdWxsVmFsdWUuRnVuY3Rpb25Cb2R5QXN5bmNUb2tlbk51bGxWYWx1ZS5GdW5jdGlvbkJvZHlTdGFyVG9rZW5OdWxsVmFsdWUuSW5pdGlhbGl6ZXJzTnVsbFZhbHVlLlBhcmFtZXRlckRlZmF1bHRWYWx1ZU51bGxWYWx1ZS5TdHJpbmdMaXRlcmFsTnVsbFZhbHVlLlR5cGVMaXN0TnVsbFZhbHVlLlR5cGVWYXJpYWJsZU51bGxWYWx1ZS5WYXJGaW5hbE9yQ29uc3RUb2tlbk51bGxWYWx1ZS5XaXRoQ2xhdXNlQXNBd2FpdFRva2VuQnJlYWtUYXJnZXRDYXNjYWRlUmVjZWl2ZXJDb21tZW50c0NvbmRpdGlvbmFsbHlTZWxlY3RlZEltcG9ydENvbnN0cnVjdG9ySW5pdGlhbGl6ZXJTZXBhcmF0b3JDb25zdHJ1Y3RvckluaXRpYWxpemVyc0NvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzQ29udGludWVUYXJnZXREZWZlcnJlZERvY3VtZW50YXRpb25Db21tZW50RXh0ZW5kc0NsYXVzZUZ1bmN0aW9uQm9keUZ1bmN0aW9uQm9keUFzeW5jVG9rZW5GdW5jdGlvbkJvZHlTdGFyVG9rZW5MYWJlbHNQYXJhbWV0ZXJEZWZhdWx0VmFsdWVQcmVmaXhTd2l0Y2hTY29wZVR5cGVCdWlsZGVyTGlzdFZhckZpbmFsT3JDb25zdFRva2VuV2l0aENsYXVzZVVuZXhwZWN0ZWQgdmFsdWUgYGAgKCkuIHN0YWNrSW5kZXhwYWRSaWdodC0tLSBmYWlsdXJlCmZpbmlzaFNpbmdsZUV4cHJlc3Npb250b2tlbk9yTnVsbHByaW50RXZlbnQKLS0tLS0tLS0tLS0tLS0tLS0tICA+PiBzdHJpbmcgaW50ZXJwb2xhdGlvblN0YWNrX2dyb3dwb3BMaXN0c3RhcnRJbmRleGFycmF5SW5kZXhQYXJzZXJSZWNvdmVyeShAX3Byb3RvQ29uc3RyYWludHNfcGFyYW1ldGVyc1RvQ29uc3RyYWlucHJvdG9Db25zdHJhaW50aXNVcHBlcm9sZFByb3RvQ29uc3RyYWludHNMZW5ndGhpc01hdGNoX2lzU3VidHlwZU1hdGNoX2NvbnN0cmFpbkxvd2VyX2NvbnN0cmFpblVwcGVyX2lzRnVuY3Rpb25TdWJ0eXBlTWF0Y2hzdWJ0eXBlU3Vic3RpdHV0aW9uc3VwZXJ0eXBlU3Vic3RpdHV0aW9uZnJlc2hUeXBlVmFyaWFibGVzX21hdGNoVHlwZUZvcm1hbHNfaXNJbnRlcmZhY2VTdWJ0eXBlTWF0Y2htYXRjaGluZ1N1cGVydHlwZU9mU3VidHlwZV9pc1RvcHBhcmFtczFwYXJhbXMyc3Vic3RpdHV0aW9uMXN1YnN0aXR1dGlvbjJwRnJlc2h2YXJpYWJsZUZyZXNoYm91bmQxYm91bmQyVHlwZVNjaGVtYUNvbnN0cmFpbnRHYXRoZXJlcl9Qcm90b0NvbnN0cmFpbnRUcmFjZVRyYWNlQW5kUmVwb3J0U3RhY2tUcmFjZUxpbmVzbWF4RmlsZUxlbmd0aG1heExpbmVOb0xlbmd0aG1heENvbHVtbk5vTGVuZ3RoZnJvbUxpbmVzZnJvbVRyYWNlcmFuZ2VTdGFydHJhbmdlRW5kZmlsZVByZWZpeGxhbWJkYWluZGV4UGF0dGVybiNcZCtccypyZXBsYWNlRmlyc3Q8YXN5bmNocm9ub3VzIHN1c3BlbnNpb24+bGVmdFBhcmVuUG9zcmlnaHRQYXJlblBvc2xhc3RDb2xvbm5leHRUb0xhc3RDb2xvbmxpbmVOb2NvbHVtbk5vPGFub255bW91cyBjbG9zdXJlPkVycm9yIHByZXR0aWZ5aW5nICIiOiBzdWJ0cmFjZXByZXR0aWZ5c2hvd0NvbHVtbk5vc2hvd0RvdHNkb3RzZmlsZUxlbmd0aCAubGluZU5vTGVuZ3RoY29sdW1uTm9MZW5ndGhTdGFja1RyYWNlTGluZWZpbGVUZXh0bGluZU5vVGV4dGNvbHVtbk5vVGV4dCBAICBbX3RyYWNldHJhY2VFeGNlcHRpb25zZXhjZXB0aW9uc3RyYWNlQW5kUmVwb3J0cmVwb3J0QW5kVHJhY2VfdHJhY2VBbmRSZXBvcnRwcmV0dGlmeVN0YWNrVHJhY2VwYWRpbnRlbmRlZExlbmd0aGRvdHNMZW5ndGhkb3RzSW5kZXhEZWJ1Z0NhbGxiYWNrYXJnMWFyZzJEZWJ1Z01hcGluZGV4U2V0Q2FsbGJhY2twdXRJZkFic2VudENhbGxiYWNrcmVtb3ZlQ2FsbGJhY2thZGRDYWxsYmFja1JLUlZjb250YWluc1ZhbHVlaWZBYnNlbnRhZGRFbnRyaWVzSzJWMnVwZGF0ZUFsbERlYnVnSXRlcmFibGVEZWJ1Z0xpc3RhZGRBbGxDYWxsYmFja2ZpbGxWYWx1ZURlYnVnU2V0TWFwVHlwZUFzc2VydGVycnVudGltZVR5cGVzc2hvd09iamVjdHN2YWx1ZXNUeXBlcyA9PiBDb2xsZWN0aW9uVHlwZUFzc2VydGVyYXNzZXJ0VHlwZUV4cGVuc2l2ZU1hcF9tYXBzY29waWVzS1JWUmV4cGVuc2l2ZShFeHBlbnNpdmVTZXRfc2V0c29iamVjdHNvYmplY3RzVG9SZW1vdmVvYmplY3RzVG9SZXRhaW5yZXRhaW5TZXRTdGF0c3JlY29yZE1hcGZyb21FeGlzdGluZ2dldE1hcHJlY29yZEVsZW1lbnRnZXRMaXN0cmVjb3JkRnJlcXVlbmN5ZXhhbXBsZXJlY29yZEZyZXF1ZW5jaWVzcmVjb3JkZWRGcmVxdWVuY2llc3JlY29yZENvdW50ZXJyZWNvcmRUcmFjZXNhbXBsZUZyZXF1ZW5jeXN0YWNrVHJhY2VTYW1wbGVGcmVxdWVuY3lkdW1wU3RhdHNiZWZvcmVDbG9zZWR1bXBDb3JyZWxhdGlvbmlkQWlkQmRhdGFBZGF0YUJTdGF0c091dHB1dERlYnVnT3V0cHV0U2lua091dHB1dFN0YXRzUHJpbnRlcmdyb3VwY3JlYXRlR3JvdXBDb250ZW50Y3JlYXRlQ2hpbGRDb250ZW50YmVnaW5FeHRyYWVuZEV4dHJhX0Jhc2VQcmludGVyJlN0YXRzUHJpbnRlciZJbmRlbnRhdGlvbkJhc2VQcmludGVyQ29uc29sZVByaW50ZXJleHRyYUxldmVsc3BhY2Vub25OdWxsVmFsdWVzWE1MUHJpbnRlcmVzY2FwZW9wZW5lZDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+X1N0YWNrVHJhY2VOb2RlY29tbW9uUHJlZml4c3VidHJhY2VzbGVhZmFkZFN1YnRyYWNlY29tbW9uUHJlZml4TGVuZ3RoZHVtcFRyYWNlc2R1bXBTdWJ0cmFjZXNzdGVwY291bnRUZXh0Li4uCl9TdGFja1RyYWNlVHJlZXRvdGFsQ291bnRzYW1wbGVBY3RpdmVTdGF0c2ZyZXF1ZW5jeU1hcHNzZXRzTWFwY291bnRlcnNNYXB0cmFjZU1hcGZyZXF1ZW5jeU1hcHN0YXRzZHVtcEZyZXF1ZW5jaWVzZHVtcFNldHNkdW1wQ291bnRlcnNkdW1wSXRlcmFibGVkYXRhTWFwZnJlcXVlbmNpZXNmcmVxdWVuY3lkdW1wRnJlcXVlbmN5c29ydGVkTWFwY291bnRlcnNkdW1wQ291bnRlcmhhc0RhdGFjYXRlZ29yeWV4YW1wbGVzTGltaXRoYXNNb3JlaW5jbHVkZUNvdW50dHJhY2VzZHVtcFRyYWNldHJlZWtleUFrZXlCY29ycmVsYXRpb25zIHZzIGFBbmRCYUFuZE5vdEJub3RBYW5kQmNvcnJlbGF0aW9uICYmICAmJiAhY2hpbGREYXRhbm9uTnVsbEl0ZXJhYmxlX3N0YXRzZW5hYmxlU3RhdHNPdXRwdXR4bWxTdGF0cyBoYXZlIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5pbnZlcnNlTWFwaXNWYWxpZEtleXRyeVNvcnRNYXBzb3J0TWFwVHJhY2tNYXBfY291bnRzX2NvdW50c01hcGNvdW50c3ByaW50SGlzdG9ncmFtIC0tICBtYXBzaW5jcmVtZW50YWNjdW11bGF0ZWQgIC0tICU6IGxlbmd0aCA8PSBfbm90aWZ5TGVuZ3RoQ2hhbmdlZGRhcnQyanMuanMuZW5xdWV1ZUNvZGVnZW5FbnF1ZXVlcl9wcm9jZXNzZWRFbnRpdGllc2NvZGVnZW4gZW5xdWV1ZXJDb2RlZ2VuIHdvcmsgbGlzdCBpcyBjbG9zZWQuIFRyeWluZyB0byBhZGQgY29kZWdlbi50eXBlVXNlY29kZWdlbi5keW5hbWljVXNlY29kZWdlbi5zdGF0aWNVc2Vjb2RlZ2VuLmNvbnN0YW50VXNlZGFydDJqcy5qc19lbWl0dGVyLmNvZGVfZW1pdHRlcl90YXNrc3RhcnR1cF9qc19lbWl0dGVyTmF0aXZlRW1pdHRlclR5cGVUZXN0UmVnaXN0cnl0eXBlVGVzdFJlZ2lzdHJ5X25hdGl2ZUVtaXR0ZXJfZW1pdHRlcl9nZW5lcmF0ZVNvdXJjZU1hcE5hdGl2ZUVtaXR0ZXIgaGFzIG5vdCBiZWVuIGNyZWF0ZWQgeWV0LkVtaXR0ZXIgaGFzIG5vdCBiZWVuIGNyZWF0ZWQgeWV0LkNvZGUgZW1pdHRlcl9maW5hbGl6ZVJ0aWNvbXB1dGVSZXF1aXJlZFR5cGVDaGVja3Njb21wdXRlUnRpTmVlZGVkQ2xhc3Nlc2ZpbmFsaXplIHJ0aXByb2dyYW1CdWlsZGVycnRpQ2hlY2tzcnRpTmVlZGVkQ2xhc3Nlc2VtaXRQcm9ncmFtcHJvdG90eXBlQWNjZXNzaGFzQmVlbkluc3RhbnRpYXRlZHN0YXRpY0Z1bmN0aW9uQWNjZXNzc3RhdGljRmllbGRBY2Nlc3Npc29sYXRlTGF6eUluaXRpYWxpemVyQWNjZXNzc3RhdGljQ2xvc3VyZUFjY2Vzc2NvbnN0cnVjdG9yQWNjZXNzdHlwZUFjY2Vzc3R5cGVBY2Nlc3NOZXdSdGl0eXBlVmFyaWFibGVBY2Nlc3NOZXdSdGlnbG9iYWxnZW5lcmF0ZUVtYmVkZGVkR2xvYmFsQWNjZXNzU3RyaW5ncHJvZ3JhbUZvclRlc3RpbmdpbnRlcmNlcHRvclByb3RvdHlwZUFjY2Vzc2ludGVyY2VwdG9yQ2xhc3NBY2Nlc3NnZW5lcmF0ZUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsY29tcGFyZUNvbnN0YW50c2lzQ29uc3RhbnRJbmxpbmVkT3JBbHJlYWR5RW1pdHRlZGFic3RyYWN0X3NpbmsuZGFydGFic3RyYWN0X3NvdXJjZS5kYXJ0YmluYXJ5X3NpbmsuZGFydGJpbmFyeV9zb3VyY2UuZGFydGhlbHBlcnMuZGFydG1lbWJlcl9kYXRhLmRhcnRtaXhpbnMuZGFydG5vZGVfaW5kZXhlci5kYXJ0b2JqZWN0X3NpbmsuZGFydG9iamVjdF9zb3VyY2UuZGFydERhdGFTaW5rd3JpdGVNZW1iZXJOb2Rld3JpdGVNZW1iZXJOb2Rlc3dyaXRlTWVtYmVyTm9kZU1hcHdyaXRlTGlicmFyeURlcGVuZGVuY3lOb2Rld3JpdGVMaWJyYXJ5RGVwZW5kZW5jeU5vZGVPck51bGx3cml0ZVRyZWVOb2Rld3JpdGVUcmVlTm9kZUluQ29udGV4dHdyaXRlVHJlZU5vZGVPck51bGxJbkNvbnRleHR3cml0ZVRyZWVOb2Rlc0luQ29udGV4dHdyaXRlVHJlZU5vZGVNYXBJbkNvbnRleHR3cml0ZVR5cGVQYXJhbWV0ZXJOb2Rld3JpdGVUeXBlUGFyYW1ldGVyTm9kZXN3cml0ZURhcnRUeXBlc3dyaXRlRGFydFR5cGVOb2Rld3JpdGVEYXJ0VHlwZU5vZGVzd3JpdGVTb3VyY2VTcGFud3JpdGVMaWJyYXJ5TWFwd3JpdGVMb2NhbHdyaXRlTG9jYWxPck51bGx3cml0ZUxvY2Fsc3dyaXRlQ29uc3RhbnRPck51bGx3cml0ZUNvbnN0YW50c3dyaXRlRG91YmxlVmFsdWV3cml0ZUludGVnZXJWYWx1ZXdyaXRlSW1wb3J0d3JpdGVJbXBvcnRPck51bGx3cml0ZXJpbk1lbWJlckNvbnRleHREYXRhU291cmNlcmVnaXN0ZXJMb2NhbExvb2t1cGxvY2FsTG9va3VwcmVhZExpYnJhcnlOb2RlcmVhZENsYXNzTm9kZXJlYWRUeXBlZGVmTm9kZXJlYWRNZW1iZXJOb2RlcmVhZE1lbWJlck5vZGVzcmVhZE1lbWJlck5vZGVNYXByZWFkTGlicmFyeURlcGVuZGVuY3lOb2RlcmVhZExpYnJhcnlEZXBlbmRlbmN5Tm9kZU9yTnVsbHJlYWRUcmVlTm9kZXJlYWRUcmVlTm9kZUluQ29udGV4dHJlYWRUcmVlTm9kZU9yTnVsbEluQ29udGV4dHJlYWRUcmVlTm9kZXNJbkNvbnRleHRyZWFkVHJlZU5vZGVNYXBJbkNvbnRleHRyZWFkVHlwZVBhcmFtZXRlck5vZGVyZWFkVHlwZVBhcmFtZXRlck5vZGVzcmVhZERhcnRUeXBlc3JlYWREYXJ0VHlwZU5vZGVyZWFkRGFydFR5cGVOb2Rlc3JlYWRTb3VyY2VTcGFucmVhZExpYnJhcnlNYXByZWFkTG9jYWxyZWFkTG9jYWxPck51bGxyZWFkTG9jYWxzcmVhZENvbnN0YW50T3JOdWxscmVhZERvdWJsZVZhbHVlcmVhZEludGVnZXJWYWx1ZXJlYWRDb25zdGFudHNyZWFkSW1wb3J0cmVhZEltcG9ydE9yTnVsbEVudGl0eUxvb2t1cGdldExpYnJhcnlCeUluZGV4Z2V0Q2xhc3NCeUluZGV4Z2V0VHlwZWRlZkJ5SW5kZXhnZXRNZW1iZXJCeUluZGV4Z2V0VHlwZVZhcmlhYmxlQnlJbmRleEVudGl0eVJlYWRlcnJlYWRMaWJyYXJ5RnJvbURhdGFTb3VyY2VyZWFkQ2xhc3NGcm9tRGF0YVNvdXJjZXJlYWRUeXBlZGVmRnJvbURhdGFTb3VyY2VyZWFkTWVtYmVyRnJvbURhdGFTb3VyY2VyZWFkVHlwZVZhcmlhYmxlRnJvbURhdGFTb3VyY2VFbnRpdHlXcml0ZXJ3cml0ZUxpYnJhcnlUb0RhdGFTaW5rd3JpdGVDbGFzc1RvRGF0YVNpbmtjbGFzc0luZGV4d3JpdGVUeXBlZGVmVG9EYXRhU2lua3R5cGVkZWZJbmRleHdyaXRlTWVtYmVyVG9EYXRhU2lua3dyaXRlVHlwZVZhcmlhYmxlVG9EYXRhU2lua3R5cGVWYXJpYWJsZUluZGV4TG9jYWxMb29rdXBnZXRMb2NhbEJ5SW5kZXhDb2RlZ2VuUmVhZGVyQ29kZWdlbldyaXRlckFic3RyYWN0RGF0YVNpbmtfZGFydFR5cGVXcml0ZXJfZGFydFR5cGVOb2RlV3JpdGVyX3RhZ3NfbWVtYmVyRGF0YV9zdHJpbmdJbmRleF91cmlJbmRleF9tZW1iZXJOb2RlSW5kZXhfY29uc3RhbnRJbmRleF9nZW5lcmFsQ2FjaGVzX2VudGl0eVdyaXRlcl9jb2RlZ2VuV3JpdGVydGFnRnJlcXVlbmN5TWFwX2N1cnJlbnRNZW1iZXJDb250ZXh0X2N1cnJlbnRNZW1iZXJEYXRhX2JlZ2luX2VuZGV4aXN0aW5nVGFnVW5leHBlY3RlZCB0YWcgZW5kLiBFeHBlY3RlZCAsIGZvdW5kIG9sZE1lbWJlckNvbnRleHRvbGRNZW1iZXJEYXRhY3VycmVudE1lbWJlckRhdGFEYXRhU2luayBoYXMgbm8gY3VycmVudCBtZW1iZXIgY29udGV4dC5fd3JpdGVEYXRhS2luZERhdGFLaW5kLnNvdXJjZVNwYW5fd3JpdGVVcmlfd3JpdGVJbnRJbnRlcm5hbERhdGFLaW5kLmRhcnRUeXBlX3dyaXRlRGFydFR5cGVmdW5jdGlvblR5cGVWYXJpYWJsZXNNaXNzaW5nIERhcnRUeXBlIGlzIG5vdCBhbGxvd2VkLkRhcnRUeXBlS2luZC5ub25lRGF0YUtpbmQuZGFydFR5cGVOb2RlX3dyaXRlRGFydFR5cGVOb2RlTWlzc2luZyBpci5EYXJ0VHlwZSBub2RlIGlzIG5vdCBhbGxvd2VkLkRhcnRUeXBlTm9kZUtpbmQubm9uZURhdGFLaW5kLm1lbWJlck5vZGVfd3JpdGVNZW1iZXJOb2RlX3dyaXRlTWVtYmVyTm9kZUludGVybmFsX3dyaXRlRW51bUludGVybmFsTWVtYmVyQ29udGV4dEtpbmQuY2xzX3dyaXRlQ2xhc3NOb2RlX3dyaXRlU3RyaW5nTWVtYmVyQ29udGV4dEtpbmQubGlicmFyeV93cml0ZUxpYnJhcnlOb2RlRGF0YUtpbmQuY2xhc3NOb2RlRGF0YUtpbmQudHlwZWRlZk5vZGVfd3JpdGVUeXBlZGVmTm9kZURhdGFLaW5kLmxpYnJhcnlOb2RlRGF0YUtpbmQuZW51bVZhbHVlRGF0YUtpbmQuYm9vbF93cml0ZUJvb2xEYXRhS2luZC51cmlEYXRhS2luZC5zdHJpbmdEYXRhS2luZC51aW50MzBEYXRhS2luZC50cmVlTm9kZV93cml0ZVRyZWVOb2Rld3JpdGVUcmVlTm9kZUluQ29udGV4dEludGVybmFsbWVtYmVyRGF0YV9nZXRNZW1iZXJEYXRhTm8gZW5jbG9zaW5nIG1lbWJlciBvZiBUcmVlTm9kZSBfVHJlZU5vZGVLaW5kLmNsc19UcmVlTm9kZUtpbmQubWVtYmVyX1RyZWVOb2RlS2luZC5mdW5jdGlvbkRlY2xhcmF0aW9uVmFyaWFibGVfVHJlZU5vZGVLaW5kLmZ1bmN0aW9uTm9kZV93cml0ZUZ1bmN0aW9uTm9kZV9UcmVlTm9kZUtpbmQudHlwZVBhcmFtZXRlcl93cml0ZVR5cGVQYXJhbWV0ZXJfVHJlZU5vZGVLaW5kLmNvbnN0YW50Z2V0SW5kZXhCeUNvbnN0YW50X1RyZWVOb2RlS2luZC5ub2RlZ2V0SW5kZXhCeVRyZWVOb2RlTm8gVHJlZU5vZGUgaW5kZXggZm91bmQgZm9yIGZvdW5kIGluIF9GdW5jdGlvbk5vZGVLaW5kLnByb2NlZHVyZV9GdW5jdGlvbk5vZGVLaW5kLmNvbnN0cnVjdG9yX0Z1bmN0aW9uTm9kZUtpbmQuZnVuY3Rpb25FeHByZXNzaW9uX0Z1bmN0aW9uTm9kZUtpbmQuZnVuY3Rpb25EZWNsYXJhdGlvblVuc3VwcG9ydGVkIEZ1bmN0aW9uTm9kZSBwYXJlbnQgRGF0YUtpbmQudHlwZVBhcmFtZXRlck5vZGVfVHlwZVBhcmFtZXRlcktpbmQuY2xzX1R5cGVQYXJhbWV0ZXJLaW5kLmZ1bmN0aW9uTm9kZVVuc3VwcG9ydGVkIFR5cGVQYXJhbWV0ZXIgcGFyZW50IExvY2FsS2luZC5qTG9jYWxsb2NhbEluZGV4TG9jYWxLaW5kLnRoaXNMb2NhbExvY2FsS2luZC5ib3hMb2NhbExvY2FsS2luZC5hbm9ueW1vdXNDbG9zdXJlTG9jYWxMb2NhbEtpbmQudHlwZVZhcmlhYmxlTG9jYWxVbnN1cHBvcnRlZCBsb2NhbCBEYXRhS2luZC5jb25zdGFudF93cml0ZUNvbnN0YW50RGF0YUtpbmQuZG91YmxlX3dyaXRlRG91YmxlVmFsdWVzZXRGbG9hdDY0Z2V0VWludDE2RGF0YUtpbmQuaW50X3dyaXRlQmlnSW50X3dyaXRlQ29uc3RhbnRJbnRlcm5hbENvbnN0YW50VmFsdWVLaW5kLkJPT0xDb25zdGFudFZhbHVlS2luZC5JTlRDb25zdGFudFZhbHVlS2luZC5ET1VCTEVDb25zdGFudFZhbHVlS2luZC5TVFJJTkdDb25zdGFudFZhbHVlS2luZC5OVUxMQ29uc3RhbnRWYWx1ZUtpbmQuRlVOQ1RJT05Db25zdGFudFZhbHVlS2luZC5MSVNUQ29uc3RhbnRWYWx1ZUtpbmQuU0VUQ29uc3RhbnRWYWx1ZUtpbmQuTUFQa2V5TGlzdHByb3RvVmFsdWVDb25zdGFudFZhbHVlS2luZC5DT05TVFJVQ1RFRENvbnN0YW50VmFsdWVLaW5kLlRZUEVDb25zdGFudFZhbHVlS2luZC5JTlNUQU5USUFUSU9OQ29uc3RhbnRWYWx1ZUtpbmQuTk9OX0NPTlNUQU5UQ29uc3RhbnRWYWx1ZUtpbmQuSU5URVJDRVBUT1JDb25zdGFudFZhbHVlS2luZC5ERUZFUlJFRF9HTE9CQUxyZWZlcmVuY2VkQ29uc3RhbnRWYWx1ZUtpbmQuRFVNTVlfSU5URVJDRVBUT1JDb25zdGFudFZhbHVlS2luZC5VTlJFQUNIQUJMRUNvbnN0YW50VmFsdWVLaW5kLkpTX05BTUVfd3JpdGVTdHJpbmdJbnRlcm5hbF93cml0ZVVyaUludGVybmFsRGF0YUtpbmQuaW1wb3J0X3dyaXRlSW1wb3J0X3dyaXRlSW1wb3J0SW50ZXJuYWxDYW4gbm90IHNlcmlhbGl6ZSBhbiBPdXRwdXRVbml0IHJlZmVyZW5jZSB3aXRob3V0IGEgcmVnaXN0ZXJlZCBjb2RlZ2VuIHdyaXRlci5DYW4gbm90IHNlcmlhbGl6ZSBhbiBBYnN0cmFjdFZhbHVlIHdpdGhvdXQgYSByZWdpc3RlcmVkIGNvZGVnZW4gd3JpdGVyLkNhbiBub3Qgc2VyaWFsaXplIGEgSlMgbmRvZSB3aXRob3V0IGEgcmVnaXN0ZXJlZCBjb2RlZ2VuIHdyaXRlci5BYnN0cmFjdERhdGFTb3VyY2VfZW50aXR5UmVhZGVyX2xvY2FsTG9va3VwX2NvZGVnZW5SZWFkZXJfcmVhZERhcnRUeXBlc19yZWFkRGFydFR5cGVfcmVhZERhcnRUeXBlTm9kZXNfcmVhZERhcnRUeXBlTm9kZV9jaGVja0RhdGFLaW5kX3JlYWRVcmlfcmVhZEludEludGVybmFsRGFydFR5cGVLaW5kLnZvaWRUeXBlRGFydFR5cGVLaW5kLnR5cGVWYXJpYWJsZURhcnRUeXBlS2luZC5mdW5jdGlvblR5cGVWYXJpYWJsZURhcnRUeXBlS2luZC5mdW5jdGlvblR5cGVEYXJ0VHlwZUtpbmQuaW50ZXJmYWNlVHlwZURhcnRUeXBlS2luZC50eXBlZGVmRGFydFR5cGVLaW5kLmR5bmFtaWNUeXBlRGFydFR5cGVLaW5kLmFueVR5cGVEYXJ0VHlwZUtpbmQuZnV0dXJlT3J0eXBlVmFyaWFibGVDb3VudFVuZXhwZWN0ZWQgRGFydFR5cGVLaW5kIERhcnRUeXBlTm9kZUtpbmQudm9pZFR5cGVEYXJ0VHlwZU5vZGVLaW5kLnR5cGVQYXJhbWV0ZXJUeXBlRGFydFR5cGVOb2RlS2luZC5mdW5jdGlvblR5cGVEYXJ0VHlwZU5vZGVLaW5kLmZ1bmN0aW9uVHlwZVZhcmlhYmxlRGFydFR5cGVOb2RlS2luZC5pbnRlcmZhY2VUeXBlRGFydFR5cGVOb2RlS2luZC50eXBlZGVmRGFydFR5cGVOb2RlS2luZC5keW5hbWljVHlwZURhcnRUeXBlTm9kZUtpbmQuYm90dG9tVHlwZURhcnRUeXBlTm9kZUtpbmQuaW52YWxpZFR5cGVEYXJ0VHlwZU5vZGVLaW5kLnRoaXNJbnRlcmZhY2VUeXBlRGFydFR5cGVOb2RlS2luZC5leGFjdEludGVyZmFjZVR5cGVEYXJ0VHlwZU5vZGVLaW5kLmRvZXNOb3RDb21wbGV0ZWZ1bmN0aW9uLXR5cGUtbm9kZW5hbWVkUGFyYW1ldGVyQ291bnRfcmVhZE1lbWJlckRhdGFfcmVhZE1lbWJlckRhdGFJbnRlcm5hbF9yZWFkRW51bUludGVybmFsX3JlYWRDbGFzc0RhdGFfcmVhZFN0cmluZ2xvb2t1cE1lbWJlckRhdGFCeU5hbWVfcmVhZExpYnJhcnlEYXRhVW5zdXBwb3J0ZWQgX01lbWJlcktpbmQgbG9va3VwQ2xhc3NCeU5hbWVfcmVhZFR5cGVkZWZOb2RlbG9va3VwVHlwZWRlZmdldExpYnJhcnlEYXRhQnlVcmlfcmVhZFVyaUludGVybmFsX3JlYWRCb29sX3JlYWRTdHJpbmdJbnRlcm5hbF9yZWFkVHJlZU5vZGVsaWJyYXJ5RGF0YWNsYXNzRGF0YWxvb2t1cENsYXNzQnlOb2RlbG9va3VwTWVtYmVyRGF0YUJ5Tm9kZXJlYWRUcmVlTm9kZUluQ29udGV4dEludGVybmFsX3JlYWRDb25zdGFudF9yZWFkRG91YmxlVmFsdWVzZXRVaW50MTZnZXRGbG9hdDY0X3JlYWRCaWdJbnRfcmVhZENvbnN0YW50SW50ZXJuYWxVbmV4cGV4dGVkIGNvbnN0YW50IHZhbHVlIGtpbmQgX3JlYWRGdW5jdGlvbk5vZGVfcmVhZFR5cGVQYXJhbWV0ZXJnZXRDb25zdGFudEJ5SW5kZXh0cmVlTm9kZWdldFRyZWVOb2RlQnlJbmRleE5vIFRyZWVOb2RlIGZvdW5kIGZvciBpbmRleCBfZXJyb3JDb250ZXh0VW5leHBlY3RlZCBfVHJlZU5vZGVLaW5kIGZ1bmN0aW9uRXhwcmVzc2lvblVuZXhwZWN0ZWQgX0Z1bmN0aW9uTm9kZUtpbmQgVW5leHBlY3RlZCBfVHlwZVBhcmFtZXRlcktpbmQga2luZCBleHBlY3RlZEtpbmRhY3R1YWxLaW5kSW52YWxpZCBkYXRhIGtpbmQuIFVuZXhwZWN0ZWQgbG9jYWwga2luZCBfcmVhZEltcG9ydF9yZWFkSW1wb3J0SW50ZXJuYWxDYW4gbm90IGRlc2VyaWFsaXplIGFuIE91dHB1dFVuaXQgcmVmZXJlbmNlIHdpdGhvdXQgYSByZWdpc3RlcmVkIGNvZGVnZW4gcmVhZGVyLkNhbiBub3QgZGVzZXJpYWxpemUgYW4gQWJzdHJhY3RWYWx1ZSBDYW4gbm90IGRlc2VyaWFsaXplIGEgSlMgbm9kZSB3aXRob3V0IGEgcmVnaXN0ZXJlZCBjb2RlZ2VuIHJlYWRlci5fYnVmZmVyZWRTaW5rQmluYXJ5U291cmNlSW1wbF9yZWFkQnl0ZUludmFsaWQgZGF0YSBraW5kIGluZGV4LiBFeHBlY3RlZCBvbmUgb2YgLCBmb3VuZCBpbmRleCAgT2Zmc2V0IERhdGFLaW5kdWludDMwZW51bVZhbHVlbWVtYmVyTm9kZXR5cGVQYXJhbWV0ZXJOb2RlZGFydFR5cGVOb2RlTWVtYmVyQ29udGV4dEtpbmRMb2NhbEtpbmRqTG9jYWxib3hMb2NhbGFub255bW91c0Nsb3N1cmVMb2NhbHR5cGVWYXJpYWJsZUxvY2FsX1RyZWVOb2RlS2luZGZ1bmN0aW9uRGVjbGFyYXRpb25WYXJpYWJsZV9GdW5jdGlvbk5vZGVLaW5kX1R5cGVQYXJhbWV0ZXJLaW5kVGFnKERhcnRUeXBlS2luZHZvaWRUeXBlZnVuY3Rpb25UeXBlVmFyaWFibGVhbnlUeXBlZnV0dXJlT3JEYXJ0VHlwZVdyaXRlcnZpc2l0VHlwZXNEYXJ0VHlwZU5vZGVLaW5kdHlwZVBhcmFtZXRlclR5cGVpbnZhbGlkVHlwZXRoaXNJbnRlcmZhY2VUeXBlZXhhY3RJbnRlcmZhY2VUeXBlZG9lc05vdENvbXBsZXRlRGFydFR5cGVOb2RlV3JpdGVyVW5leHBlY3RlZCBpci5EYXJ0VHlwZSBJbmRleGVkU2lua19jYWNoZXdyaXRlVmFsdWVDeWNsaWMgZGVwZW5kZW5jeSBvbiBjYWNoZWQgdmFsdWU6IEluZGV4ZWRTb3VyY2VyZWFkVmFsdWVVbmZpbGxlZCBpbmRleCBDb21wb25lbnRMb29rdXBfY29tcG9uZW50X2xpYnJhcnlNYXBfTGlicmFyeURhdGFfY2xhc3Nlc0J5TmFtZV9jbGFzc2VzQnlOb2RlX3R5cGVkZWZzX21lbWJlcnNCeU5hbWVfbWVtYmVyc0J5Tm9kZV9lbnN1cmVDbGFzc2VzRHVwbGljYXRlIGNsYXNzICd0cnlpbmcgdG8gYWRkIER1cGxpY2F0ZSB0eXBlZGVmICdfZW5zdXJlTWVtYmVyc0R1cGxpY2F0ZSBtZW1iZXIgJ19MaWJyYXJ5RGF0YSgpKV9DbGFzc0RhdGFfQ2xhc3NEYXRhKF9NZW1iZXJEYXRhX2luZGV4VG9Ob2RlTWFwX25vZGVUb0luZGV4TWFwX2NvbnN0YW50SW5kZXhNYXBfZW5zdXJlTWFwc19jcmVhdGVDb25zdGFudEluZGV4ZXJnZXRDb25zdGFudGdldEluZGV4Tm8gaW5kZXggZm91bmQgZm9yIF9NZW1iZXJEYXRhKERhdGFTb3VyY2VNaXhpbmhhc0NsYXNzRGF0YVNpbmtNaXhpbl9UcmVlTm9kZUluZGV4ZXJWaXNpdG9yX2N1cnJlbnRJbmRleHJlZ2lzdGVyTm9kZV9Db25zdGFudE5vZGVJbmRleGVyVmlzaXRvcl92aXNpdGVkTm9uaW5kZXhlZE5vZGVzX3JlZ2lzdGVyQ29uc3RhbnQgd2l0aG91dCBpbmRleDogSW5kZXggd2l0aG91dCBjb25zdGFudDogVW5leHBlY3RlZCBjb25zdGFudDogT2JqZWN0U2lua2JlZ2luOk9iamVjdFNvdXJjZV9yZWFkIHZhbHVlLCBmb3VuZCBleHBlY3RlZFRhZ2FjdHVhbFRhZ1VuZXhwZWN0ZWQgYmVnaW4gdGFnLiBVbmV4cGVjdGVkIGVuZCB0YWcuIAo+IGZ1bmN0aW9uVHlwZU5vZGVUYWdfY29tcHV0ZU1lbWJlck5hbWVzc2FNb2R1bGFyTmFtZXJNb2R1bGFyTmFtZXJJbXBsTW9kdWxhckVtaXR0ZXJJbXBsVHlwZUV4cHJlc3Npb25SZWNpcGVTc2FGdW5jdGlvbkNvbXBpbGVyX2J1aWxkZXJvcHRpbWl6ZXJfY29kZWdlbm9wdGltaXplc291cmNlSW5mb3JtYXRpb25CdWlsZGVyX3Jld3JpdGVBc3luY2FzeW5jVHlwZVBhcmFtZXRlcmJvZHlTb3VyY2VJbmZvcm1hdGlvbmV4aXRTb3VyY2VJbmZvcm1hdGlvbl9tYWtlQXN5bmNSZXdyaXRlcl9tYWtlU3luY1N0YXJSZXdyaXRlcl9tYWtlQXN5bmNTdGFyUmV3cml0ZXJfZmV0Y2hJdGVtVHlwZWdldFR5cGVSZXByZXNlbnRhdGlvbl9mZXRjaEl0ZW1UeXBlTmV3UnRpaGVscGVyRWxlbWVudHJlY2lwZWVuY29kZUdyb3VuZFJlY2lwZSMoIylzdGFydEZ1bmN0aW9uY29tcGxldGVyRmFjdG9yeWl0ZW1UeXBlRXhwcmVzc2lvbmFzeW5jU3RhcnRhc3luY0F3YWl0YXN5bmNSZXR1cm5hc3luY1JldGhyb3djb21wbGV0ZXJGYWN0b3J5VHlwZUFyZ3VtZW50c3NhZmVWYXJpYWJsZU5hbWVzYWZlVmFyaWFibGVQcmVmaXhGb3JBc3luY1Jld3JpdGVib2R5TmFtZWRlcml2ZUFzeW5jQm9keU5hbWVpdGVyYWJsZUZhY3RvcnlpdGVyYWJsZUZhY3RvcnlUeXBlQXJndW1lbnRzeWllbGRTdGFyRXhwcmVzc2lvbnVuY2F1Z2h0RXJyb3JFeHByZXNzaW9ubmV3Q29udHJvbGxlcm5ld0NvbnRyb2xsZXJUeXBlQXJndW1lbnRzeWllbGRFeHByZXNzaW9uU3NhQnVpbGRlclNzYUJ1aWxkZXJUYXNrX3NvdXJjZUluZm9ybWF0aW9uRmFjdG9yeVNTQSBidWlsZGVyQVNTSUdOTUVOVEJJVF9PUkJJVF9YT1JCSVRfQU5ETEVGVF9IQU5EX1NJREVkYXJ0MmpzLmNvbnN0YW50cy52YWx1ZXNDb25zdGFudFZhbHVlS2luZElOVEVSQ0VQVE9SSlNfTkFNRURVTU1ZX0lOVEVSQ0VQVE9SVU5SRUFDSEFCTEVERUZFUlJFRF9HTE9CQUxOT05fQ09OU1RBTlRDb25zdGFudFZhbHVlVmlzaXRvcnZpc2l0RHVtbXlJbnRlcmNlcHRvcnZpc2l0VW5yZWFjaGFibGV2aXNpdEpzTmFtZXZpc2l0RGVmZXJyZWRHbG9iYWx2aXNpdE5vbkNvbnN0YW50aXNDb25zdHJ1Y3RlZE9iamVjdGlzVHlwZWlzRHVtbXlpc01pbnVzWmVyb2lzT25laXNQb3NpdGl2ZUluZmluaXR5aXNOZWdhdGl2ZUluZmluaXR5VXNlIENvbnN0YW50VmFsdWUudG9EYXJ0VGV4dCgpIG9yIENvbnN0YW50VmFsdWUudG9TdHJ1Y3R1cmVkVGV4dCgpIGluc3RlYWQgb2YgQ29uc3RhbnRWYWx1ZS50b1N0cmluZygpLkZ1bmN0aW9uQ29uc3RhbnRWYWx1ZTIxNDc0ODM2NDdGdW5jdGlvbkNvbnN0YW50KFByaW1pdGl2ZUNvbnN0YW50Lj09UHJpbWl0aXZlQ29uc3RhbnQuaGFzaENvZGVOdWxsQ29uc3RhbnRWYWx1ZUpzTnVsbE51bUNvbnN0YW50VmFsdWVJbnRDb25zdGFudFZhbHVlX2NhY2hlZFZhbHVlc2ludENvbnN0YW50VmFsaXNQb3NpdGl2ZW90aGVySW50SW50Q29uc3RhbnQoRG91YmxlQ29uc3RhbnRWYWx1ZU5hTkluZmluaXR5LUluZmluaXR5MC4wMS4wb3RoZXJEb3VibGVEb3VibGVDb25zdGFudChCb29sQ29uc3RhbnRWYWx1ZUJvb2xDb25zdGFudChUcnVlQ29uc3RhbnRWYWx1ZUZhbHNlQ29uc3RhbnRWYWx1ZVN0cmluZ0NvbnN0YW50VmFsdWVvdGhlclN0cmluZ3RvRGFydFN0cmluZ1N0cmluZ0NvbnN0YW50KE9iamVjdENvbnN0YW50VmFsdWVfdW5wYXJzZVR5cGVBcmd1bWVudHNUeXBlQ29uc3RhbnQoTGlzdENvbnN0YW50VmFsdWVMaXN0Q29uc3RhbnQoU2V0Q29uc3RhbnRWYWx1ZW90aGVyU2V0U2V0Q29uc3RhbnQofSlNYXBDb25zdGFudFZhbHVlX2xvb2t1cE1hcG90aGVyTWFwbG9va3VwTWFwTWFwQ29uc3RhbnQoaW50ZXJjZXB0b3IoSW50ZXJjZXB0b3JDb25zdGFudChKc05hbWVDb25zdGFudFZhbHVlanNfbmFtZShKc05hbWVDb25zdGFudChEdW1teUludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZWR1bW15X2ludGVyY2VwdG9yKER1bW15SW50ZXJjZXB0b3JDb25zdGFudChVbnJlYWNoYWJsZUNvbnN0YW50VmFsdWV1bnJlYWNoYWJsZSgpVW5yZWFjaGFibGVDb25zdGFudCgpb3RoZXJWYXJfZmllbGRzU29ydGVkQnlOYW1lQ29uc3RydWN0ZWRDb25zdGFudChJbnN0YW50aWF0aW9uQ29uc3RhbnQoaXNSZWZlcmVuY2VkZWZlcnJlZF9nbG9iYWwoRGVmZXJyZWRHbG9iYWxDb25zdGFudChOb25Db25zdGFudFZhbHVlTm9uQ29uc3RhbnQ+Pm5vbi1jb25zdGFudDw8dHJlYXRBc0R5bmFtaWNpc0FueWlzRnVuY3Rpb25UeXBlVmFyaWFibGVjb250YWluc0ZyZWVUeXBlVmFyaWFibGVzZm9yRWFjaFR5cGVWYXJpYWJsZWFzc3VtcHRpb25zX0Fzc3VtcHRpb25zX2Fzc3VtcHRpb25NYXBfYWRkQXNzdW1wdGlvbmFzc3VtZV9yZW1vdmVBc3N1bXB0aW9uZm9yZ2V0aXNBc3N1bWVkX0Fzc3VtcHRpb25zKCktPmFyZ3VtZW50SGFzaF9lcXVhbHNJbnRlcm5hbFR5cGVWYXJpYWJsZVR5cGVGdW5jdGlvblR5cGVWYXJpYWJsZV9ib3VuZEJvdW5kIGhhcyBub3QgYmVlbiBzZXQuQm91bmQgaGFzIGFscmVhZHkgYmVlbiBzZXQuQW55VHlwZUludmFsaWQgcmV0dXJuIHR5cGUgaW4gSW52YWxpZCBwYXJhbWV0ZXIgdHlwZXMgaW4gSW52YWxpZCBvcHRpb25hbCBwYXJhbWV0ZXIgdHlwZXMgaW4gSW52YWxpZCBuYW1lZCBwYXJhbWV0ZXJzIGluIEludmFsaWQgbmFtZWQgcGFyYW1ldGVyIHR5cGVzIGluIEludmFsaWQgdHlwZSB2YXJpYWJsZXMgaW4gRnV0dXJlT3JUeXBlQmFzZURhcnRUeXBlVmlzaXRvckRhcnRUeXBlU3Vic3RpdHV0aW9uVmlzaXRvcl9tYXBwZWRvbGRUeXBlc3Vic3RpdHV0ZVR5cGVWYXJpYWJsZVR5cGVmcmVzaFJlZmVyZW5jZXN1YnN0aXR1dGVGdW5jdGlvblR5cGVWYXJpYWJsZW5ld1R5cGVWYXJpYWJsZXNfaGFuZGxlRnVuY3Rpb25UeXBlVmFyaWFibGVzbmV3UGFyYW1ldGVyVHlwZXNfc3Vic3RUeXBlc25ld09wdGlvbmFsUGFyYW1ldGVyVHlwZXNuZXdOYW1lZFBhcmFtZXRlclR5cGVzR2VuZXJpYyBmdW5jdGlvbiB0eXBlIGluc3RhbnRpYXRpb24gaXMgYWxsLW9yLW5vbmV1bmRlY2lkZWRuZXdWYXJpYWJsZXNkZXBlbmRlbmN5Q2hlY2tvbGRWYXJpYWJsZW5ld1VuYWxpYXNlZG5ld1R5cGVBcmd1bWVudF9EZXBlbmRlbmN5Q2hlY2tfc3Vic3RpdHV0aW9uVmlzaXRvcmhhbmRsZVR5cGVWYXJpYWJsZVR5cGVoYW5kbGVGcmVlRnVuY3Rpb25UeXBlVmFyaWFibGVEYXJ0VHlwZVN0cnVjdHVyYWxQcmVkaWNhdGVWaXNpdG9yaGFuZGxlVm9pZFR5cGVoYW5kbGVCb3VuZEZ1bmN0aW9uVHlwZVZhcmlhYmxlaGFuZGxlRnVuY3Rpb25UeXBlaGFuZGxlSW50ZXJmYWNlVHlwZWhhbmRsZVR5cGVkZWZUeXBlaGFuZGxlRHluYW1pY1R5cGVoYW5kbGVBbnlUeXBlaGFuZGxlRnV0dXJlT3JUeXBlYmluZGluZ3NfdmlzaXRBbGxfQ29udGFpbnNGcmVlVHlwZVZhcmlhYmxlc1Zpc2l0b3JTaW1wbGVEYXJ0VHlwZVN1YnN0aXR1dGlvblZpc2l0b3JfRGVmZXJyZWROYW1lX0RhcnRUeXBlVG9TdHJpbmdWaXNpdG9yX2ZyYWdtZW50c19sYXN0SXNJZGVudGlmaWVyX2JvdW5kVmFyaWFibGVzX3ZhcmlhYmxlVG9OYW1lX2dlbmVyaWNGdW5jdGlvbnNfdmlzaXRzdGFydEdyb3VwX2Z1bmN0aW9uVHlwZVZhcmlhYmxlTmFtZV9pZGVudGlmaWVyX2RlZmVycmVkTmFtZUlkZW50aWZpZXJfdG9rZW5fY29tbWFfbmFtZUZvci8qZnJlZSovZGVmZXJyZWROYW1lbmVlZHNPcHRpb25hbENvbW1hbmVlZHNOYW1lZENvbW1hX29wdGlvbmFsVHlwZUFyZ3VtZW50c0Fic3RyYWN0VHlwZVJlbGF0aW9uZW5zdXJlUmVzb2x2ZWRnZXRVbmFsaWFzZWRhc0luc3RhbmNlT2ZnZXRDYWxsVHlwZWludGVybmFsIGVycm9yOiB1bmtub3duIHR5cGUgaW52YWxpZFR5cGVBcmd1bWVudHNpbnZhbGlkRnVuY3Rpb25SZXR1cm5UeXBlc2ludmFsaWRGdW5jdGlvblBhcmFtZXRlclR5cGVzaW52YWxpZFR5cGVWYXJpYWJsZUJvdW5kc2ludmFsaWRDYWxsYWJsZVR5cGVjaGVja1R5cGVBcmd1bWVudHN0VHlwZUFyZ3NzVHlwZUFyZ3N0ZnNmZ2V0Q29tbW9uVHlwZVZhcmlhYmxlc0NvdW50dmlzaXRGdW5jdGlvblR5cGVJbnRlcm5hbHRwc3Nwc3NOb3RFbXB0eXROb3RFbXB0eXROZXh0c05leHRpbmNvbXBhdGlibGVQYXJhbWV0ZXJzdE5hbWVzdFR5cGVzc05hbWVzc1R5cGVzdEluZGV4c0luZGV4c2VlblR5cGVWYXJpYWJsZXNNb3JlU3BlY2lmaWNWaXNpdG9yU3VidHlwZVZpc2l0b3JzRnV0dXJlT3J0SW50ZXJmYWNlUG90ZW50aWFsU3VidHlwZVZpc2l0b3JfYXNzdW1lSW5zdGFudGlhdGlvbnNpc1BvdGVudGlhbFN1YnR5cGVhc3N1bWVJbnN0YW50aWF0aW9uc0RhcnRUeXBlc0lTX1NVQlRZUEVNQVlCRV9TVUJUWVBFTk9UX1NVQlRZUEVjb21wdXRlU3VidHlwZVJlbGF0aW9uc3Vic3RCeUNvbnRleHRnZXRTdXBlcnR5cGVnZXRJbnRlcmZhY2VzY2hlY2tUeXBlVmFyaWFibGVCb3VuZHNjaGVja1R5cGVWYXJpYWJsZUJvdW5kZ2V0Q2xhc3NDb250ZXh0Y29udGV4dENsYXNzX2VxdWFsVHlwZXNEYXJ0MkpTSmF2YVNjcmlwdFByaW50aW5nQ29udGV4dG1vbml0b3JvdXRCdWZmZXJjb2RlUG9zaXRpb25MaXN0ZW5lcm9uU3RhcnRQb3NpdGlvbmNsb3NpbmdQb3NpdGlvbm9uUG9zaXRpb25zQXN0Q29udGFpbmVyVG9rZW5GaW5hbGl6ZXJmaW5hbGl6ZVRva2Vuc1Rva2VuQ291bnRlcnZpc2l0Tm9kZW1hcmtTZWVuY291bnRUb2tlbnNSZWZlcmVuY2VDb3VudGVkQXN0Tm9kZVVucGFyc2VkTm9kZV9lbmFibGVNaW5pZmljYXRpb25fcHJvdGVjdEZvckV2YWxfY2FjaGVkTGl0ZXJhbGZ1bmN0aW9uIGVzY2FwZWRTdHJpbmdwcmV0dHlQcmludGFsbG93VmFyaWFibGVNaW5pZmljYXRpb25yZW5hbWVyRm9yTmFtZXNzaG91bGRDb21wcmVzc091dHB1dG1pbmlmeUxvY2FsVmFyaWFibGVzY3JlYXRlQ29kZUJ1ZmZlcnNvdXJjZUluZm9ybWF0aW9uUHJvY2Vzc29yY3JlYXRlUHJvY2Vzc29ycHJvY2Vzc2lzSWRlbnRpdHlUZW1wbGF0ZWlzTnVsbEd1YXJkT25GaXJzdEFyZ3VtZW50aG9sZW5hbWVPclBvc2l0aW9uanNfYmFja2VuZC5uYW1lckhhc2hNYXBSdW50aW1lVHlwZVRhZ3NKR2VuZXJhdG9yQm9keWZpZWxkX25hbWluZ19taXhpbi5kYXJ0ZnJlcXVlbmN5X25hbWVyLmRhcnRtaW5pZnlfbmFtZXIuZGFydG5hbWVyX25hbWVzLmRhcnRqYXZhU2NyaXB0S2V5d29yZHNpbnN0YW5jZW9mdHlwZW9mZGVidWdnZXJkZWxldGVwdWJsaWNwcm90ZWN0ZWRyZXNlcnZlZFByb3BlcnR5U3ltYm9sc19fcHJvdG9fX3Byb3RvdHlwZXJlc2VydmVkR2xvYmFsU3ltYm9sc3VuZGVmaW5lZHBhcnNlSW50cGFyc2VGbG9hdGRlY29kZVVSSWRlY29kZVVSSUNvbXBvbmVudGVuY29kZVVSSWVuY29kZVVSSUNvbXBvbmVudEFycmF5Qm9vbGVhbk51bWJlckRhdGVSZWdFeHBFdmFsRXJyb3JSYW5nZUVycm9yUmVmZXJlbmNlRXJyb3JTeW50YXhFcnJvclVSSUVycm9yTWF0aGFwcGxpY2F0aW9uQ2FjaGVjbG9zZWRDb21wb25lbnRzY29udHJvbGxlcnNjcnlwdG9kZWZhdWx0U3RhdHVzZGlhbG9nQXJndW1lbnRzZGlyZWN0b3JpZXNkb2N1bWVudGZyYW1lRWxlbWVudGZ1bGxTY3JlZW5nbG9iYWxTdG9yYWdlaGlzdG9yeWlubmVySGVpZ2h0aW5uZXJXaWR0aGxvY2F0aW9uYmFybG9jYWxTdG9yYWdlbWVudWJhcm1veklubmVyU2NyZWVuWG1veklubmVyU2NyZWVuWW1velNjcmVlblBpeGVsc1BlckNzc1BpeGVsbmF2aWdhdG9yb3BlbmVyb3V0ZXJIZWlnaHRvdXRlcldpZHRocGFnZVhPZmZzZXRwYWdlWU9mZnNldHBlcnNvbmFsYmFycGtjczExcmV0dXJuVmFsdWVzY3JlZW5zY3JvbGxiYXJzc2Nyb2xsTWF4WHNjcm9sbE1heFlzZXNzaW9uU3RvcmFnZXNpZGViYXJzdGF0dXNiYXJ0b29sYmFyd2luZG93YWxlcnRhZGRFdmVudExpc3RlbmVyYXRvYmJhY2tibHVyYnRvYWNhcHR1cmVFdmVudHNjbGVhckludGVydmFsY2xlYXJUaW1lb3V0Y29uZmlybWRpc2FibGVFeHRlcm5hbENhcHR1cmVkaXNwYXRjaEV2ZW50ZW5hYmxlRXh0ZXJuYWxDYXB0dXJlZmluZGZvY3VzZm9yd2FyZEdlY2tvQWN0aXZlWE9iamVjdGdldEF0dGVudGlvbmdldEF0dGVudGlvbldpdGhDeWNsZUNvdW50Z2V0Q29tcHV0ZWRTdHlsZWdldFNlbGVjdGlvbmhvbWVtYXhpbWl6ZW1pbmltaXplbW92ZUJ5bW92ZVRvb3BlbkRpYWxvZ3Bvc3RNZXNzYWdlcHJpbnRwcm9tcHRRdWVyeUludGVyZmFjZXJlbGVhc2VFdmVudHNyZW1vdmVFdmVudExpc3RlbmVycmVzaXplQnlyZXNpemVUb3Jlc3RvcmVyb3V0ZUV2ZW50c2Nyb2xsc2Nyb2xsQnlzY3JvbGxCeUxpbmVzc2Nyb2xsQnlQYWdlc3Njcm9sbFRvc2V0SW50ZXJ2YWxzZXRSZXNpemVhYmxlc2V0VGltZW91dHNob3dNb2RhbERpYWxvZ3NpemVUb0NvbnRlbnR1dWVzY2FwZXVwZGF0ZUNvbW1hbmRzWFBDTmF0aXZlV3JhcHBlclhQQ1NhZmVKU09qYmVjdFdyYXBwZXJvbmFib3J0b25iZWZvcmV1bmxvYWRvbmNoYW5nZW9uY2xpY2tvbmNsb3Nlb25jb250ZXh0bWVudW9uZHJhZ2Ryb3BvbmVycm9yb25mb2N1c29uaGFzaGNoYW5nZW9ua2V5ZG93bm9ua2V5cHJlc3NvbmtleXVwb25sb2Fkb25tb3VzZWRvd25vbm1vdXNlbW92ZW9ubW91c2VvdXRvbm1vdXNlb3Zlcm9ubW91c2V1cG9ubW96b3JpZW50YXRpb25vbnBhaW50b25yZXNldG9ucmVzaXplb25zY3JvbGxvbnNlbGVjdG9uc3VibWl0b251bmxvYWRvbnRvdWNoY2FuY2Vsb250b3VjaGVuZG9udG91Y2htb3Zlb250b3VjaHN0YXJ0b25nZXN0dXJlc3RhcnRvbmdlc3R1cmVjaGFuZ2Vvbmdlc3R1cmVlbmR1bmV2YWxnZXRQcm90b3R5cGVPZmF0dGFjaEV2ZW50Y2xpZW50SW5mb3JtYXRpb25jbGlwYm9hcmREYXRhY3JlYXRlUG9wdXBkaWFsb2dIZWlnaHRkaWFsb2dMZWZ0ZGlhbG9nVG9wZGlhbG9nV2lkdGhvbmFmdGVycHJpbnRvbmJlZm9yZWRlYWN0aXZhdGVvbmJlZm9yZXByaW50b25jb250cm9sc2VsZWN0b25kZWFjdGl2YXRlb25oZWxwb25yZXNpemVlbmREZWJ1Z0VudW1lcmF0b3JHbG9iYWxJbWFnZUFjdGl2ZVhPYmplY3RWQkFycmF5QW5jaG9yQXBwbGV0QXR0ckNhbnZhc0NhbnZhc0dyYWRpZW50Q2FudmFzUGF0dGVybkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRENEQVRBU2VjdGlvbkNoYXJhY3RlckRhdGFDb21tZW50Q1NTMlByb3BlcnRpZXNDU1NSdWxlQ1NTU3R5bGVTaGVldERvY3VtZW50RG9jdW1lbnRGcmFnbWVudERvY3VtZW50VHlwZURPTUV4Y2VwdGlvbkRPTUltcGxlbWVudGF0aW9uRE9NUGFyc2VyRWxlbWVudEV2ZW50RXh0ZXJuYWxJbnRlcmZhY2VGbGFzaFBsYXllckZvcm1GcmFtZUhpc3RvcnlIVE1MQ29sbGVjdGlvbkhUTUxEb2N1bWVudEhUTUxFbGVtZW50SUZyYW1lSlNPYmplY3RLZXlFdmVudE1pbWVUeXBlTW91c2VFdmVudE5hdmlnYXRvck5vZGVMaXN0UGx1Z2luUHJvY2Vzc2luZ0luc3RydWN0aW9uUmFuZ2VSYW5nZUV4Y2VwdGlvblNjcmVlblNlbGVjdFRhYmxlVGFibGVDZWxsVGFibGVSb3dUYWJsZVNlbGVjdGlvblRleHRUZXh0QXJlYVVJRXZlbnRXaW5kb3dYTUxIdHRwUmVxdWVzdFhNTFNlcmlhbGl6ZXJYUGF0aEV4Y2VwdGlvblhQYXRoUmVzdWx0WFNMVFByb2Nlc3NvcmphdmFuZXRzY2FwZXN1bkphdmFPYmplY3RKYXZhQ2xhc3NKYXZhQXJyYXlKYXZhTWVtYmVycmVzZXJ2ZWRHbG9iYWxPYmplY3ROYW1lc0RGR0hPUVdYWVpyZXNlcnZlZEdsb2JhbEhlbHBlckZ1bmN0aW9uc3VzZXJHbG9iYWxPYmplY3RzX2pzUmVzZXJ2ZWRsYXp5R2V0dGVyUHJlZml4JGdldCRzdXBlclByZWZpeHN1cGVyJG1ldGFkYXRhRmllbGRzdHViTmFtZUZpZWxkJHN0dWJOYW1lcmVmbGVjdGlvbkluZm9GaWVsZCRyZWZsZWN0aW9uSW5mb3JlZmxlY3Rpb25OYW1lRmllbGQkcmVmbGVjdGlvbk5hbWVtZXRhZGF0YUluZGV4RmllbGQkbWV0YWRhdGFJbmRleG1ldGhvZHNXaXRoT3B0aW9uYWxBcmd1bWVudHNGaWVsZCRtZXRob2RzV2l0aE9wdGlvbmFsQXJndW1lbnRzX2NhbGxQcmVmaXhEb2xsYXJjYWxsJF9saXRlcmFsRG9sbGFyX2xpdGVyYWxVbmRlcnNjb3JlbGl0ZXJhbFBsdXNfbGl0ZXJhbER5bmFtaWNfbGl0ZXJhbEdldHRlclByZWZpeF9saXRlcmFsU2V0dGVyUHJlZml4X3N0YXRpY3NQcm9wZXJ0eU5hbWVfcnRpRmllbGRKc05hbWVuYXRpdmVTcGVjUHJvcGVydHleW0EtWmEtel8kXVtBLVphLXowLTlfJF0qJE5PTl9JREVOVElGSUVSX0NIQVJbXkEtWmEtel8wLTkkXWdsb2JhbFNjb3BldXNlckdsb2JhbHN1c2VyR2xvYmFsc1NlY29uZE5hbWVpbnRlcm5hbEdsb2JhbHNpbnN0YW5jZVNjb3BldXNlckluc3RhbmNlTWVtYmVyc3VzZXJJbnN0YW5jZU1lbWJlcnNPcmlnaW5hbE5hbWVpbnRlcm5hbEluc3RhbmNlTWVtYmVyc3VzZXJJbnN0YW5jZU9wZXJhdG9yc3VzZXJHZXR0ZXJzdXNlclNldHRlcnNfdHlwZVZhcmlhYmxlTmFtZXNfY29uc3RhbnRTY29wZV9wcml2YXRlTmFtaW5nU2NvcGVzcG9wdWxhck5hbWVDb3VudGVyc2xpYnJhcnlMb25nTmFtZXNfY29uc3RhbnROYW1lc19jb25zdGFudExvbmdOYW1lc19jb25zdGFudEhhc2hlcnNob3J0UHJpdmF0ZU5hbWVPd25lcnNfbGlicmFyeUtleXNfbm9uSWRlbnRpZmllclJFW15BLVphLXowLTlfJF1mdW5jdGlvblR5cGVOYW1lTWFwX2Z1bmN0aW9uVHlwZU5hbWVyanNSZXNlcnZlZHN0YXRpY3NQcm9wZXJ0eU5hbWVydGlOYW1lX3JlZ2lzdGVyTmFtZWpzTmFtZW9yaWdpbmFsTmFtZWlzRmluYWxpemVkZ2V0dGVyTmFtZXNldHRlck5hbWVjcmVhdGVNaW5pZmllZEdsb2JhbE5hbWVNYXBjcmVhdGVNaW5pZmllZEluc3RhbmNlTmFtZU1hcF9uYXRpdmVEYXRhZGVmZXJyZWRNZXRhZGF0YU5hbWVkZWZlcnJlZE1ldGFkYXRhZGVmZXJyZWRUeXBlc05hbWVkZWZlcnJlZFR5cGVzaXNvbGF0ZU5hbWVpc29sYXRlUHJvcGVydGllc05hbWUkaXNvbGF0ZVByb3BlcnRpZXNTVEFUSUNfQ0xPU1VSRV9OQU1FX05BTUUkbmFtZWNsb3N1cmVJbnZvY2F0aW9uU2VsZWN0b3JOYW1lc2hvdWxkTWluaWZ5X2dldFByaXZhdGVTY29wZUZvcnJvb3RPZlNjb3BlX25ld1JlZmVyZW5jZWNvbnN0YW50TmFtZWxvbmdOYW1lY29uc3RhbnRMb25nTmFtZWdldEZyZXNoTmFtZXByaXZhdGVOYW1lX3Byb3Bvc2VOYW1lRm9yTGlicmFyeV9wcm9wb3NlTmFtZUZvckNvbnN0cnVjdG9yQm9keWNhbGxTdWZmaXhGb3JTaWduYXR1cmVjb25zdHJ1Y3RvckJvZHlOYW1lY3Rvcl9kaXNhbWJpZ3VhdGVJbnRlcm5hbE1lbWJlcmdlbmVyYXRvckJvZHlJbnN0YW5jZU1ldGhvZE5hbWVvcGVyYXRvck5hbWVUb0lkZW50aWZpZXIkYm9keSRkZXJpdmVDYWxsTWV0aG9kTmFtZWNhbGxQcmVmaXhjYWxsU3VmZml4Rm9yU3RydWN0dXJlc3VmZml4ZXNkaXNhbWJpZ3VhdGVkTmFtZV9kaXNhbWJpZ3VhdGVNZW1iZXJkZXJpdmVHZXR0ZXJOYW1lZGVyaXZlU2V0dGVyTmFtZW9wZXJhdG9ySWRlbnRpZmllcl9kaXNhbWJpZ3VhdGVPcGVyYXRvcnNwZWNpYWxTZWxlY3Rvck5hbWVVbmV4cGVjdGVkIHNlbGVjdG9yIGtpbmQ6IGdlbmVyaWNJbnN0YW50aWF0aW9uUHJlZml4VW5leHBlY3RlZCBzcGVjaWFsIHNlbGVjdG9yOiBpbnZvY2F0aW9uTWlycm9ySW50ZXJuYWxOYW1lZmllbGRBY2Nlc3Nvck5hbWVfZGlzYW1iaWd1YXRlR2xvYmFsTWVtYmVyZmllbGRQcm9wZXJ0eU5hbWVfZGlzYW1iaWd1YXRlR2xvYmFsVHlwZV9nbG9iYWxOYW1lRm9ySW50ZXJmYWNlVHlwZVZhcmlhYmxlaGFzRml4ZWRCYWNrZW5kTmFtZWdldEZpeGVkQmFja2VuZE5hbWVkZWNsYXJlZE5hbWVfaXNTaGFkb3dpbmdTdXBlckZpZWxkX2lzVXNlckNsYXNzRXh0ZW5kaW5nTmF0aXZlZmllbGROYW1lbWVtYmVyTGlicmFyeWZvdW5kTWVtYmVyaXNOYXRpdmVPckV4dGVuZHNOYXRpdmVzZXR0ZXJGb3JNZW1iZXJnZXR0ZXJGb3JFbGVtZW50Z2V0dGVyRm9yTWVtYmVyX2Rpc2FtYmlndWF0ZUludGVybmFsR2xvYmFsbmV3TmFtZWludGVybmFsR2xvYmFsX2dlbmVyYXRlTGlicmFyeUtleWtleUJhc2VfZGlzYW1iaWd1YXRlR2xvYmFsX3Byb3Bvc2VOYW1lRm9yTWVtYmVyX3Byb3Bvc2VOYW1lRm9yVHlwZWdsb2JhbHNsaWJyYXJ5S2V5c2FuaXRpemVGb3JBbm5vdGF0aW9uc19kaXNhbWJpZ3VhdGVNZW1iZXJCeUtleXJlc2VydmVQdWJsaWNNZW1iZXJOYW1lbGlicmFyeVByZWZpeGlzVXNlZHJlZ2lzdGVyVXNlc2FuaXRpemVGb3JOYXRpdmVzbWF5Q2xhc2hOYXRpdmVfZ2VuZXJhdGVGcmVzaFN0cmluZ0Zvck5hbWVfc2FuaXRpemVGb3JBbm5vdGF0aW9uc19zYW5pdGl6ZUZvck5hdGl2ZXNfc2FuaXRpemVGb3JLZXl3b3Jkc2lzVW51c2VkX3Byb3Bvc2VOYW1lRm9yQ29uc3RydWN0b3IkYm9keV9wcm9wb3NlTmFtZUZvckxhenlTdGF0aWNHZXR0ZXJyZXBsYWNlcnJlcGxhY2VBbGxNYXBwZWRsaWJfZGlzYW1iaWd1YXRlZF9nZXRTdWZmaXhGb3JJbnRlcmNlcHRlZENsYXNzZXN6Z2V0SW50ZXJjZXB0b3IkX2lzUHJvcGVydHlPZlN0YXRpY1N0YXRlSG9sZGVyc3RhdGljU3RhdGVIb2xkZXIkY2xvc3VyZXVuaXF1ZU5hbWVGb3JUeXBlQ29uc3RhbnRFbGVtZW50Z2xvYmFsT2JqZWN0Rm9yQ29uc3RhbnQkaW5zdGFudGlhdGV0eXBlc09mZnNldE5hbWV0eXBlc09mZnNldGdldEZ1bmN0aW9uVHlwZU5hbWVjb21wdXRlTmFtZW9wZXJhdG9ySXNQcmVmaXhvcGVyYXRvckFzUHJlZml4JGVxJG5vdCRpbmRleCRpbmRleFNldCRtdWwkZGl2JG1vZCR0ZGl2JGFkZCRzaGwkc2hyJHNocnUkZ2UkbGUkYW5kJHhvciRvciRuZWdhdGVnZXRUeXBlUmVwcmVzZW50YXRpb25Gb3JUeXBlQ29uc3RhbnQoKS0+Q29uc3RhbnROYW1pbmdWaXNpdG9yTUFYX0ZSQUdNRU5UU01BWF9FWFRSQV9MRU5HVEhERUZBVUxUX1RBR19MRU5HVEhfaGFzaGVyZmFpbGVkZnJhZ21lbnRzQ09OU1RBTlRnZXRIYXNoVGFnQ19oYXNoV29yZGdldEhhc2gwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFkZFJvb3RhZGRJZGVudGlmaWVyaXNFbGlkZWRtZXRob2RzZHVtbXlfaW50ZXJjZXB0b3J1bnJlYWNoYWJsZUNvbnN0YW50Q2Fub25pY2FsSGFzaGVyX01BU0tfVUlOVDMyX0xJTUlUNDI5NDk2NzI5Nl9oYXNoZXNfaGFzaFN0cmluZ19oYXNoTGlzdER1bW15SW50ZXJjZXB0b3JDb25zdGFudFZhbHVlIHNob3VsZCBuZXZlciBiZSBuYW1lZCBhbmQgbmV2ZXIgYmUgc3ViY29uc3RhbnRVbnJlYWNoYWJsZUNvbnN0YW50VmFsdWUgc2hvdWxkIG5ldmVyIGJlIG5hbWVkIGFuZCBKc05hbWVDb25zdGFudFZhbHVlIHNob3VsZCBuZXZlciBiZSBuYW1lZCBhbmQgX2hhc2hJbnRfaGFzaERvdWJsZW1hZ25pdHVkZXNpZ25mcmFjdGlvbl9jb21iaW5lRnVuY3Rpb25UeXBlTmFtZXJfaXNTaW1wbGVGdW5jdGlvblR5cGVOYW1pbmdTY29wZV9zdWdnZXN0ZWROYW1lc191c2VkTmFtZXNzdWdnZXN0TmFtZWFkZFN1Z2dlc3Rpb25zdWdnZXN0aW9uaGFzU3VnZ2VzdGlvbmlzU3VnZ2VzdGlvbkZpeGVkTmFtZXNnZXQkc2V0JGNhbGxDYXRjaEFsbE5hbWVjYWxsKmNhbGxOYW1lRmllbGQkY2FsbE5hbWVyZWZsZWN0YWJsZUZpZWxkJHJlZmxlY3RhYmxlY2xhc3NEZXNjcmlwdG9yUHJvcGVydHlkZWZhdWx0VmFsdWVzRmllbGQkZGVmYXVsdFZhbHVlc2RlZmVycmVkQWN0aW9uJGRlZmVycmVkQWN0aW9uJGlzJGFzb3BlcmF0b3JTaWduYXR1cmUkc2lnbmF0dXJlcmVxdWlyZWRQYXJhbWV0ZXJGaWVsZCRyZXF1aXJlZEFyZ0NvdW50JHRpTWluaWZpZWRGaXhlZE5hbWVzYXN5bmNQcmVmaXgkYXN5bmMkX2xpdGVyYWxBc3luY1ByZWZpeF9qc1ZhcmlhYmxlUmVzZXJ2ZWRDYWNoZWJyZWFrTGFiZWxOYW1laW1wbGljaXRCcmVha0xhYmVsTmFtZWNvbnRpbnVlTGFiZWxOYW1lYyRpbXBsaWNpdENvbnRpbnVlTGFiZWxOYW1lX2pzVmFyaWFibGVSZXNlcnZlZGdldE5hbWVGb3JKc0dldE5hbWVKc0dldE5hbWUuR0VUVEVSX1BSRUZJWEpzR2V0TmFtZS5TRVRURVJfUFJFRklYSnNHZXROYW1lLkNBTExfUFJFRklYSnNHZXROYW1lLkNBTExfUFJFRklYMEpzR2V0TmFtZS5DQUxMX1BSRUZJWDFKc0dldE5hbWUuQ0FMTF9QUkVGSVgySnNHZXROYW1lLkNBTExfUFJFRklYM0pzR2V0TmFtZS5DQUxMX1BSRUZJWDRKc0dldE5hbWUuQ0FMTF9QUkVGSVg1SnNHZXROYW1lLkNBTExfQ0FUQ0hfQUxMSnNHZXROYW1lLlJFRkxFQ1RBQkxFSnNHZXROYW1lLkNMQVNTX0RFU0NSSVBUT1JfUFJPUEVSVFlKc0dldE5hbWUuUkVRVUlSRURfUEFSQU1FVEVSX1BST1BFUlRZSnNHZXROYW1lLkRFRkFVTFRfVkFMVUVTX1BST1BFUlRZSnNHZXROYW1lLkNBTExfTkFNRV9QUk9QRVJUWUpzR2V0TmFtZS5ERUZFUlJFRF9BQ1RJT05fUFJPUEVSVFlKc0dldE5hbWUuT1BFUkFUT1JfQVNfUFJFRklYSnNHZXROYW1lLlNJR05BVFVSRV9OQU1FSnNHZXROYW1lLlJUSV9OQU1FSnNHZXROYW1lLlRZUEVERUZfVEFHdHlwZWRlZlRhZ0pzR2V0TmFtZS5GVU5DVElPTl9UWVBFX1RBR2Z1bmN0aW9uVHlwZVRhZ0pzR2V0TmFtZS5GVU5DVElPTl9UWVBFX0dFTkVSSUNfQk9VTkRTX1RBR2Z1bmN0aW9uVHlwZUdlbmVyaWNCb3VuZHNUYWdKc0dldE5hbWUuRlVOQ1RJT05fVFlQRV9WT0lEX1JFVFVSTl9UQUdmdW5jdGlvblR5cGVWb2lkUmV0dXJuVGFnSnNHZXROYW1lLkZVTkNUSU9OX1RZUEVfUkVUVVJOX1RZUEVfVEFHZnVuY3Rpb25UeXBlUmV0dXJuVHlwZVRhZ0pzR2V0TmFtZS5GVU5DVElPTl9UWVBFX1JFUVVJUkVEX1BBUkFNRVRFUlNfVEFHZnVuY3Rpb25UeXBlUmVxdWlyZWRQYXJhbWV0ZXJzVGFnSnNHZXROYW1lLkZVTkNUSU9OX1RZUEVfT1BUSU9OQUxfUEFSQU1FVEVSU19UQUdmdW5jdGlvblR5cGVPcHRpb25hbFBhcmFtZXRlcnNUYWdKc0dldE5hbWUuRlVOQ1RJT05fVFlQRV9OQU1FRF9QQVJBTUVURVJTX1RBR2Z1bmN0aW9uVHlwZU5hbWVkUGFyYW1ldGVyc1RhZ0pzR2V0TmFtZS5GVVRVUkVfT1JfVEFHZnV0dXJlT3JUYWdKc0dldE5hbWUuRlVUVVJFX09SX1RZUEVfQVJHVU1FTlRfVEFHZnV0dXJlT3JUeXBlVGFnSnNHZXROYW1lLklTX0lOREVYQUJMRV9GSUVMRF9OQU1FSnNHZXROYW1lLk5VTExfQ0xBU1NfVFlQRV9OQU1FSnNHZXROYW1lLk9CSkVDVF9DTEFTU19UWVBFX05BTUVKc0dldE5hbWUuRlVOQ1RJT05fQ0xBU1NfVFlQRV9OQU1FSnNHZXROYW1lLkZVVFVSRV9DTEFTU19UWVBFX05BTUVKc0dldE5hbWUuQk9PTF9SRUNJUEVKc0dldE5hbWUuRE9VQkxFX1JFQ0lQRUpzR2V0TmFtZS5JTlRfUkVDSVBFSnNHZXROYW1lLk5VTV9SRUNJUEVKc0dldE5hbWUuU1RSSU5HX1JFQ0lQRUpzR2V0TmFtZS5SVElfRklFTERfSVNFcnJvcjogTmFtZXIgaGFzIG5vIG5hbWUgZm9yICJfcmVnaXN0cnlfTWluaWZpZWRGaWVsZE5hbWVyZmllbGRSZWdpc3RyeV9taW5pZmllZEluc3RhbmNlRmllbGRQcm9wZXJ0eU5hbWVib3hjb250YWluc0ZpZWxkX0ZpZWxkTmFtaW5nUmVnaXN0cnlnbG9iYWxOYW1lc2dsb2JhbENvdW50bmFtZVN0b3JlY3hjeWRiZHhkeWZyZnhmeWdvazFrMmszazRyMXIycnhyeXgxeDJ5MXkyYWx0YXJjQ0NXaW4xaW4ybTExbTEybTEzbTE0bTIxbTIybTIzbTI0bTMxbTMybTMzbTM0bTQxbTQybTQzbTQ0bWF4bm93T05FcmVscmV2UkdCc2Rwc3JjdWlkdXJsVVJMYWJicmF4ZXNheGlzQkFDS2JldGFiaWFzQmxvYkJMVVJCT1RIQllURWNpdGVjbGlwY29sc2N1ZXNERUNSRE9ORWZhY2Vmb250Zm9ybWdhaW5ocmVmSFJURklETEVJTkNSSU5JVGlzSWRLRUVQa25lZWxhbmdMRVNTTm9uZU5PTkVvbmx5T1BFTnBpbmdwbGF5cmVjdFJlY3RyZWZYcmVmWVJHQkFyb3dzc2F2ZXNlZWRzZWVrU0lORXN0YXR2aWV3d2FyblpFUk9fRmllbGROYW1pbmdTY29wZXN1cGVyU2NvcGVfZmllbGROYW1lQ291bnRlcnJvb3RTY29wZWluaGVyaXRpbmhlcml0YW5jZUJhc2VkRmllbGROYW1lQ291bnRlcl9sb2NhbEZpZWxkTmFtZUNvdW50ZXJ2YWxmb3JDbGFzc2RlY2xhcmVyZm9yQm94X2lzTmFtZVVudXNlZF9uZXh0TmFtZV9NaXhpbkZpZWxkTmFtaW5nU2NvcGVtaXhlZElucHJvcG9zZWRfQm94RmllbGROYW1pbmdTY29wZV9GcmVxdWVuY3lCYXNlZE5hbWVyJk5hbWVyJl9NaW5pZmllZEZpZWxkTmFtZXJfRnJlcXVlbmN5QmFzZWROYW1lciZOYW1lciZfTWluaWZpZWRGaWVsZE5hbWVyJl9NaW5pZmllZE9uZVNob3RJbnRlcmNlcHRvck5hbWVyJGdldCRzZXRjYWxsU3VmZml4JGludGVyY2VwdGVkRnJlcXVlbmN5QmFzZWROYW1lcl90b2tlblNjb3Blc0luZXdTY29wZUZvcmlsbGVnYWxOYW1lc2lsbGVnYWx0b2tlblNjb3BlY29tcGFyZVJlZmVyZW5jZUNvdW50X3JjVG9rZW5TY29wZV9pbmNyZW1lbnRQb3NpdGlvbm92ZXJmbG93X2luY3JlbWVudE5hbWVnZXROZXh0TmFtZXByb3Bvc2FsX01pbmlmeU5hbWVyJk5hbWVyJl9NaW5pZmllZEZpZWxkTmFtZXJfTWluaWZ5TmFtZXImTmFtZXImX01pbmlmaWVkRmllbGROYW1lciZfTWluaWZ5Q29uc3RydWN0b3JCb2R5TmFtZXJfY29uc3RydWN0b3JCb2R5U2NvcGVzY29uc3RydWN0b3JCb2R5S2V5Rm9yX01pbmlmeU5hbWVyJk5hbWVyJl9NaW5pZmllZEZpZWxkTmFtZXImX01pbmlmeUNvbnN0cnVjdG9yQm9keU5hbWVyJl9NaW5pZmllZE9uZVNob3RJbnRlcmNlcHRvck5hbWVyTWluaWZ5TmFtZXJBTFBIQUJFVF9DSEFSQUNURVJTQUxQSEFOVU1FUklDX0NIQVJBQ1RFUlNfcmVzZXJ2ZWROYXRpdmVQcm9wZXJ0aWVzX2JhZE5hbWVzcmVzZXJ2ZUJhY2tlbmROYW1lc2ZyZXNoTmFtZV9nZXRVbnVzZWROYW1lX3BvcHVsYXRlU3VnZ2VzdGVkTmFtZXNhZGQkMSRuZWNsb25lJDBtb3ZlTmV4dCQwc3R5bGVub1N1Y2hNZXRob2QkMXRvU3RyaW5nJDBVbnN1cHBvcnRlZEVycm9yJEFyZ3VtZW50RXJyb3IkU3RhdGVFcnJvciRLZXlfS2V5TGlzdF9MaXN0JGZyb21MaW5rZWRIYXNoTWFwX0xpbmtlZEhhc2hNYXAkX2VtcHR5TGlua2VkSGFzaE1hcF9MaW5rZWRIYXNoTWFwJF9saXRlcmFsUmFuZ2VFcnJvciR2YWx1ZXN1Z2dlc3Rpb25zbGV0dGVyX2NhbGN1bGF0ZUhhc2hjb2Rlc19sZXR0ZXJOdW1iZXJoMl9hbHBoYU51bWVyaWNOdW1iZXJfYmFkTmFtZV9oYXNCYW5uZWRQcmVmaXg0Mjk0OTY3Mjk1c3RhcnRMZXR0ZXJfQ29uc3RydWN0b3JCb2R5TmFtaW5nU2NvcGVfc3RhcnRJbmRleF9jb25zdHJ1Y3RvcnNudW1iZXJPZkNvbnN0cnVjdG9yc2Zvck1peGluQXBwbGljYXRpb25jb25zdHJ1Y3RvciBib2R5IG1pc3NpbmdAY29uc3RydWN0b3JCb2R5QF9nZXRDb25zdHJ1Y3Rvckxpc3RfTWluaWZ5Q29uc3RydWN0b3JCb2R5TmFtZXJfTWluaWZpZWRPbmVTaG90SW50ZXJjZXB0b3JOYW1lcl9OYW1lck5hbWVOYW1lKENhbm5vdCBjb252ZXJ0IGEgbmFtZSB0byBhIHN0cmluZ19OYW1lck5hbWVLaW5kc19OYW1lck5hbWVLaW5kcy5TdHJpbmdCYWNrZWRfTmFtZXJOYW1lS2luZHMuR2V0dGVyX05hbWVyTmFtZUtpbmRzLlNldHRlcl9OYW1lck5hbWVLaW5kcy5Bc3luY19OYW1lck5hbWVLaW5kcy5Db21wb3VuZF9OYW1lck5hbWVLaW5kcy5Ub2tlblN0cmluZ0JhY2tlZENvbXBvdW5kU3RyaW5nQmFja2VkTmFtZW90aGVyTmFtZXJOYW1lX1ByZWZpeGVkTmFtZW90aGVyU2FtZUtpbmRHZXR0ZXJOYW1lU2V0dGVyTmFtZUFzeW5jTmFtZUNvbXBvdW5kTmFtZV9wYXJ0c19jYWNoZWROYW1lVG9rZW5OYW1lVG9rZW5OYW1lKCkgaGFzIG5vdCBiZWVuIGZpbmFsaXplZC5vdGhlclRva2VuKT0gaGFzIGFscmVhZHkgYmVlbiBmaW5hbGl6ZWQuX05hbWVSZWZlcmVuY2VzdWZmaXhGb3JHZXRJbnRlcmNlcHRvcmFiYnJldmlhdGVUeXBlTG9va3VwdHlwZVN0cmluZ1NwZWNpYWxUeXBlSnNPYmplY3Q9T2JqZWN0VW5rbm93biBTcGVjaWFsVHlwZSAnTmF0aXZlVGhyb3dCZWhhdmlvck5FVkVSTUFZTlVMTF9OU01OVUxMX05TTV9USEVOX01BWV9iaXRzaXNOdWxsTlNNR3VhcmRuZXZlcm1heW51bGwoMSludWxsKDEpK21heU5hdGl2ZVRocm93QmVoYXZpb3IoX2JpdHNUb1ZhbHVlYml0c05hdGl2ZUJlaGF2aW9ybmF0aXZlLWJlaGF2aW9ydHlwZXNSZXR1cm5lZHR5cGVzSW5zdGFudGlhdGVkY29kZVRlbXBsYXRlVGV4dFBVUkVQVVJFX0FMTE9DQVRJT05DSEFOR0VTX09USEVSREVQRU5EU19PVEhFUnJlYWRUeXBlc3NwZWNpYWxDb3VudHBhcnNlRm9yZWlnbkpTd3JpdGVUeXBlc3NwZWNpYWxUeXBlc05hdGl2ZUJlaGF2aW9yKHJldHVybnM6ICwgY3JlYXRlczogLCBzaWRlRWZmZWN0czogLCB0aHJvd3M6ICwgaXNBbGxvY2F0aW9uLCB1c2VHdm5fbWFrZVB1cmVfbWFrZUNoYW5nZXNPdGhlcl9tYWtlRGVwZW5kc090aGVycHJvY2Vzc1NwZWNTdHJpbmdzcGVjU3RyaW5ndmFsaWRUYWdzc2V0U2lkZUVmZmVjdHNzZXRUaHJvd3NzZXRJc0FsbG9jYXRpb25sb29rdXBUeXBlc2VlbkVycm9ycmVzb2x2ZVR5cGVzU3RyaW5nb25WYXJvblZvaWR0eXBlc1N0cmluZ3NwZWNzY3JlYXRlc3JldHVybnNkZXBlbmRzdGhyb3dzZ3ZudGFnQW5kVmFsdWVJbnZhbGlkIDx0YWc+Ojx2YWx1ZT4gcGFpciAnRHVwbGljYXRlIHRhZyAnVGFnICcnIGlzIG5vdCB2YWxpZCBoZXJlLlVua25vd24gdGFnICd0YWdWYWx1ZUxvb2t1cHRhZ1N0cmluZ1Vua25vd24gJycgc3BlY2lmaWNhdGlvbjogJ0ludmFsaWQgdHlwZSBzdHJpbmcgJ2NyZWF0ZXM6dGhyb3dzS2luZCduZXcnIGFuZCAnZ3ZuJyBhcmUgaW5jb21wYXRpYmxlcHJvY2Vzc0VmZmVjdHMnZWZmZWN0cycgYW5kICdkZXBlbmRzJyBtdXN0IG9jY3VyIHRvZ2V0aGVyLnNwbGl0RWZmZWN0c01pc3Npbmcgc2lkZS1lZmZlY3QgZmxhZy5lZmZlY3Ruby1pbmRleGNsZWFyQ2hhbmdlc0luZGV4bm8taW5zdGFuY2VjbGVhckNoYW5nZXNJbnN0YW5jZVByb3BlcnR5bm8tc3RhdGljY2xlYXJDaGFuZ2VzU3RhdGljUHJvcGVydHlVbnJlY29nbml6ZWQgc2lkZS1lZmZlY3QgZmxhZzogJ3NwbGl0RGVwZW5kZW5jaWVzTWlzc2luZyBzaWRlLWVmZmVjdCBkZXBlbmRlbmN5IGZsYWcuY2xlYXJEZXBlbmRzT25JbmRleFN0b3JlY2xlYXJEZXBlbmRzT25JbnN0YW5jZVByb3BlcnR5U3RvcmVjbGVhckRlcGVuZHNPblN0YXRpY1Byb3BlcnR5U3RvcmVvZkpzQ2FsbGNvZGVTdHJpbmdzaWRlRWZmZWN0c0FyZUVuY29kZWRJblNwZWNTdHJpbmduZXdFZmZlY3Rzc2V0VG90aHJvd0JlaGF2aW9yRnJvbVNwZWNTdHJpbmdhbmFseXplX2ZpbGxOYXRpdmVCZWhhdmlvck9mQnVpbHRpbk9yRW1iZWRkZWRHbG9iYWxvZkpzQnVpbHRpbkNhbGxvZkpzRW1iZWRkZWRHbG9iYWxDYWxsX3BhcnNlVHlwZUJlaGF2aW9yQnVpbGRlcl9iZWhhdmlvcl9vdmVycmlkZVdpdGhBbm5vdGF0aW9uc2NyZWF0ZXNBbm5vdGF0aW9uc3JldHVybnNBbm5vdGF0aW9uc19lc2NhcGVpc0pzSW50ZXJvcF9jYXB0dXJlYnVpbGRGaWVsZExvYWRCZWhhdmlvcmJ1aWxkRmllbGRTdG9yZUJlaGF2aW9yYnVpbGRNZXRob2RCZWhhdmlvcmNyZWF0ZUFubm90YXRpb25zX2dldEFubm90YXRpb25zY29uc3RydWN0ZWRPYmplY3RBbm5vdGF0aW9ucyBuZWVkcyBvbmUgc3RyaW5nOiBzcGVjU3RyaW5nQ29uc3RhbnRnZXRDcmVhdGVzQW5ub3RhdGlvbnNnZXRSZXR1cm5zQW5ub3RhdGlvbnNjb21waWxlci51bml2ZXJzZS5mZWF0dXJlRmVhdHVyZUZlYXR1cmUuQUJTVFJBQ1RfQ0xBU1NfSU5TVEFOVElBVElPTkZlYXR1cmUuQVNTRVJURmVhdHVyZS5BU1NFUlRfV0lUSF9NRVNTQUdFRmVhdHVyZS5BU1lOQ0ZlYXR1cmUuQVNZTkNfRk9SX0lORmVhdHVyZS5BU1lOQ19TVEFSRmVhdHVyZS5DQVRDSF9TVEFURU1FTlRGZWF0dXJlLkZBTExfVEhST1VHSF9FUlJPUkZlYXR1cmUuRklFTERfV0lUSE9VVF9JTklUSUFMSVpFUkZlYXR1cmUuTEFaWV9GSUVMREZlYXR1cmUuTE9DQUxfV0lUSE9VVF9JTklUSUFMSVpFUkZlYXR1cmUuTE9BRF9MSUJSQVJZRmVhdHVyZS5TVEFDS19UUkFDRV9JTl9DQVRDSEZlYXR1cmUuU1RSSU5HX0lOVEVSUE9MQVRJT05GZWF0dXJlLlNUUklOR19KVVhUQVBPU0lUSU9ORmVhdHVyZS5TVVBFUl9OT19TVUNIX01FVEhPREZlYXR1cmUuU1lNQk9MX0NPTlNUUlVDVE9SRmVhdHVyZS5TWU5DX0ZPUl9JTkZlYXR1cmUuU1lOQ19TVEFSRmVhdHVyZS5USFJPV19FWFBSRVNTSU9ORmVhdHVyZS5USFJPV19OT19TVUNIX01FVEhPREZlYXR1cmUuVEhST1dfUlVOVElNRV9FUlJPUkZlYXR1cmUuVEhST1dfVU5TVVBQT1JURURfRVJST1JGZWF0dXJlLlRZUEVfVkFSSUFCTEVfQk9VTkRTX0NIRUNLQUJTVFJBQ1RfQ0xBU1NfSU5TVEFOVElBVElPTkFTU0VSVF9XSVRIX01FU1NBR0VBU1lOQ19GT1JfSU5DQVRDSF9TVEFURU1FTlRGQUxMX1RIUk9VR0hfRVJST1JGSUVMRF9XSVRIT1VUX0lOSVRJQUxJWkVSTEFaWV9GSUVMRExPQ0FMX1dJVEhPVVRfSU5JVElBTElaRVJMT0FEX0xJQlJBUllTVEFDS19UUkFDRV9JTl9DQVRDSFNUUklOR19JTlRFUlBPTEFUSU9OU1RSSU5HX0pVWFRBUE9TSVRJT05TVVBFUl9OT19TVUNIX01FVEhPRFNZTUJPTF9DT05TVFJVQ1RPUlNZTkNfRk9SX0lOVEhST1dfRVhQUkVTU0lPTlRIUk9XX05PX1NVQ0hfTUVUSE9EVEhST1dfUlVOVElNRV9FUlJPUlRIUk9XX1VOU1VQUE9SVEVEX0VSUk9SVFlQRV9WQVJJQUJMRV9CT1VORFNfQ0hFQ0tNYXBMaXRlcmFsVXNlTWFwTGl0ZXJhbFVzZSgsaXNDb25zdGFudDosaXNFbXB0eTpTZXRMaXRlcmFsVXNlU2V0TGl0ZXJhbFVzZShMaXN0TGl0ZXJhbFVzZUxpc3RMaXRlcmFsVXNlKFJ1bnRpbWVUeXBlVXNlYXJndW1lbnRUeXBlUnVudGltZVR5cGVVc2VLaW5kLnN0cmluZ3N0cmluZzpSdW50aW1lVHlwZVVzZUtpbmQuZXF1YWxzZXF1YWxzOlJ1bnRpbWVUeXBlVXNlS2luZC51bmtub3dudW5rbm93bjpSdW50aW1lVHlwZVVzZShraW5kPSxyZWNlaXZlcj0sYXJndW1lbnQ9R2VuZXJpY0luc3RhbnRpYXRpb25nZW5lcmljLWluc3RhbnRpYXRpb25HZW5lcmljSW5zdGFudGlhdGlvbihmdW5jdGlvblR5cGU6dHlwZUFyZ3VtZW50czpkYXJ0MmpzLnVuaXZlcnNlLnVzZVN0cm9uZ01vZGVDb25zdHJhaW50SU5WT0tFZHluYW1pYy11c2VfdHlwZUFyZ3VtZW50c1R5cGUgYXJndW1lbnQgY291bnQgbWlzbWF0Y2guIFNlbGVjdG9yIGhhcyAgYnV0ICB3ZXJlIHBhc3NlZC5oYXNDb25zdHJhaW50VW5zdXBwb3J0ZWQgcmVjZWl2ZXIgY29uc3RyYWludDogaXNUaGlzdGhpczpleGFjdDpTVEFUSUNfVEVBUl9PRkZTVVBFUl9URUFSX09GRlNVUEVSX0ZJRUxEX1NFVFNVUEVSX0dFVFNVUEVSX1NFVFRFUl9TRVRTVVBFUl9JTlZPS0VJTlNUQU5DRV9GSUVMRF9HRVRJTlNUQU5DRV9GSUVMRF9TRVRDTE9TVVJFQ0xPU1VSRV9DQUxMQ0FMTF9NRVRIT0RDT05TVFJVQ1RPUl9JTlZPS0VDT05TVF9DT05TVFJVQ1RPUl9JTlZPS0VESVJFQ1RfSU5WT0tFSU5MSU5JTkdTVEFUSUNfSU5WT0tFU1RBVElDX0dFVFNUQVRJQ19TRVRGSUVMRF9JTklURklFTERfQ09OU1RBTlRfSU5JVHN0YXRpYy11c2VfY2hlY2tHZW5lcmljSW52YXJpYW50c1R5cGUgYXJndW1lbnQgY291bnQgbWlzbWF0Y2guIENhbGwgc3RydWN0dXJlIGhhcyAgd2VyZSBwYXNzZWQgaW4gVW5zdXBwb3J0ZWQgZW50aXR5OiBpbml0OmRlZjpzdGF0aWNJbnZva2VTdGF0aWMgaW52b2tlIGVsZW1lbnQgIG11c3QgYmUgYSB0b3AtbGV2ZWwgb3Igc3RhdGljIG1ldGhvZC5TdGF0aWMgZ2V0IGVsZW1lbnQgIG11c3QgYmUgYSBmdW5jdGlvbi5Ob3QgQ2FsbFN0cnVjdHVyZSBmb3Igc3RhdGljIGludm9jYXRpb24gb2YgZWxlbWVudCBzdGF0aWNUZWFyT2ZmU3RhdGljIHRlYXItb2ZmIGVsZW1lbnQgc3RhdGljR2V0b3Igc3RhdGljIGZpZWxkIG9yIGdldHRlci4gbXVzdCBiZSBhIGZpZWxkIG9yIGEgZ2V0dGVyLnN0YXRpY1NldFN0YXRpYyBzZXQgZWxlbWVudCBtdXN0IGJlIGEgdG9wLWxldmVsIG9yIHN0YXRpYyBtZXRob2QuIG11c3QgYmUgYSBmaWVsZCBvciBhIHNldHRlci5zdGF0aWNJbml0U3RhdGljIGluaXQgZWxlbWVudCAgbXVzdCBiZSBhIGZpZWxkLnN1cGVySW52b2tlU3VwZXIgaW52b2tlIGVsZW1lbnQgIG11c3QgYmUgYW4gaW5zdGFuY2UgbWV0aG9kLk5vdCBDYWxsU3RydWN0dXJlIGZvciBzdXBlciBpbnZvY2F0aW9uIG9mIGVsZW1lbnQgc3VwZXJHZXRTdXBlciBnZXQgZWxlbWVudCBzdXBlckZpZWxkU2V0U3VwZXIgc2V0IGVsZW1lbnQgc3VwZXJTZXR0ZXJTZXQgbXVzdCBiZSBhIHNldHRlci5zdXBlclRlYXJPZmZzdXBlckNvbnN0cnVjdG9ySW52b2tlQ29uc3RydWN0b3IgaW52b2tlIGVsZW1lbnQgIG11c3QgYmUgYSBnZW5lcmF0aXZlIGNvbnN0cnVjdG9yLk5vdCBDYWxsU3RydWN0dXJlIGZvciBzdXBlciBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uIG9mIGVsZW1lbnQgY29uc3RydWN0b3JCb2R5SW52b2tlTm90IENhbGxTdHJ1Y3R1cmUgZm9yIGNvbnN0cnVjdG9yIGJvZHkgaW52b2NhdGlvbiBvZiBlbGVtZW50IGdlbmVyYXRvckJvZHlJbnZva2VkaXJlY3RJbnZva2VEaXJlY3QgaW52b2tlIGVsZW1lbnQgIG11c3QgYmUgYW4gaW5zdGFuY2UgbWVtYmVyLiBtdXN0IGJlIGEgbWV0aG9kLmRpcmVjdEdldERpcmVjdCBnZXQgZWxlbWVudCBkaXJlY3RTZXREaXJlY3Qgc2V0IGVsZW1lbnQgY29uc3RydWN0b3JJbnZva2VDb25zdHJ1Y3RvciBpbnZvY2F0aW9uIGVsZW1lbnQgIG11c3QgYmUgYSBjb25zdHJ1Y3Rvci5Ob3QgQ2FsbFN0cnVjdHVyZSBmb3IgY29uc3RydWN0b3IgaW52b2NhdGlvbiBvZiBlbGVtZW50IHR5cGVkQ29uc3RydWN0b3JJbnZva2VObyB0eXBlIHByb3ZpZGVkIGZvciBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uLlR5cGVkIGNvbnN0cnVjdG9yIGludm9jYXRpb24gZWxlbWVudCBtdXN0IGJlIGEgY29uc3RydWN0b3IuY29uc3RDb25zdHJ1Y3Rvckludm9rZUNvbnN0IGNvbnN0cnVjdG9yIGludm9jYXRpb24gZWxlbWVudCBmaWVsZEluaXRGaWVsZCBpbml0IGVsZW1lbnQgIG11c3QgYmUgYW4gaW5zdGFuY2UgZmllbGQuZmllbGRDb25zdGFudEluaXRmaWVsZEdldCBtdXN0IGJlIGFuIGluc3RhbmNlIG9yIGJveGVkIGZpZWxkLmZpZWxkU2V0Y2xvc3VyZUNhbGxpbXBsaWNpdEludm9rZWNvbnN0cnVjdG9ySW5saW5pbmdtZXRob2RJbmxpbmluZ1N0YXRpY1VzZShJU19DSEVDS0FTX0NBU1RDQVRDSF9UWVBFTkFUSVZFX0lOU1RBTlRJQVRJT05DT05TVF9JTlNUQU5USUFUSU9OSU1QTElDSVRfQ0FTVFBBUkFNRVRFUl9DSEVDS1JUSV9WQUxVRVRZUEVfQVJHVU1FTlROQU1FRF9UWVBFX1ZBUklBQkxFX05FV19SVEl0eXBlLXVzZWlzOmFzOmNhdGNoOmxpdDppbnN0OmNvbnN0Om5hdGl2ZTppbXBsOnBhcmFtOnJ0aTp0eXBlQXJnOm5hbWVkOmFzQ2FzdHBhcmFtZXRlckNoZWNraW1wbGljaXRDYXN0Y2F0Y2hUeXBlY29uc3RJbnN0YW50aWF0aW9ubmF0aXZlSW5zdGFudGlhdGlvbmNvbnN0VHlwZUxpdGVyYWxpbnN0YW5jZUNvbnN0cnVjdG9ybmFtZWRUeXBlVmFyaWFibGVOZXdSdGlUeXBlVXNlKGNvbnN0YW50LXVzZWN1c3RvbUVsZW1lbnRzQ29uc3RhbnRVc2UoZGFydDJqcy51dGlsLmVudW1zZXRFbnVtU2V0ZnJvbVZhbHVlZml4ZWRmcm9tVmFsdWVzbWludXNiaXRMZW5ndGgxX0VudW1TZXRfQ29uc3RFbnVtU2V0RW51bVNldC52YWx1ZT1FbnVtU2V0LmFkZEVudW1TZXQuYWRkQWxsRW51bVNldC5jbGVhckVudW1TZXQucmVtb3ZlRW51bVNldC5yZW1vdmVBbGxfRW51bVNldEl0ZXJhYmxlX2VudW1TZXRfdmFsdWVzX0VudW1TZXRJdGVyYXRvcl9tYXNrZGFydDJqcy5lbGVtZW50cy5uYW1lc2lzQWNjZXNzaWJsZUZyb21pc1NpbWlsYXJUb3NpbWlsYXJIYXNoQ29kZWlzUHJpdmF0ZU5hbWVpc1B1YmxpY05hbWVQcml2YXRlTmFtZWRhcnQyanMuY2FsbF9zdHJ1Y3R1cmVjYWxsLXN0cnVjdHVyZU5PX0FSR1NPTkVfQVJHVFdPX0FSR1NUSFJFRV9BUkdTRk9VUl9BUkdTdW5uYW1lZHdpdGhUeXBlQXJndW1lbnRDb3VudGlzVW5uYW1lZGFyaXR5PSwgdHlwZXM9Q2FsbFN0cnVjdHVyZShjYWxsU2VsZWN0b3JvcHRpb25hbFBhcmFtZXRlckNvdW50bmFtZUluZGV4c2FtZU5hbWVzTmFtZWRDYWxsU3RydWN0dXJlX29yZGVyZWROYW1lZEFyZ3VtZW50cywgbmFtZWQ9W2RhcnQyanMuY29uc3RhbnRfc3lzdGVtT3BlcmF0aW9uVW5hcnlPcGVyYXRpb25CaW5hcnlPcGVyYXRpb25CaXROb3RPcGVyYXRpb25pbnRDb25zdGFudE5lZ2F0ZU9wZXJhdGlvbl9mb2xkZG91YmxlQ29uc3RhbnROb3RPcGVyYXRpb25CaW5hcnlCaXRPcGVyYXRpb25sZWZ0SW50cmlnaHRJbnRyZXN1bHRWYWx1ZWZvbGRJbnRzQml0QW5kT3BlcmF0aW9uQml0T3JPcGVyYXRpb25CaXRYb3JPcGVyYXRpb25TaGlmdExlZnRPcGVyYXRpb25TaGlmdFJpZ2h0T3BlcmF0aW9udHJ1bmNhdGVkVmFsdWVTSUdOX0JJVEJpbmFyeUJvb2xPcGVyYXRpb25sZWZ0Qm9vbHJpZ2h0Qm9vbGZvbGRCb29sc0Jvb2xlYW5BbmRPcGVyYXRpb25Cb29sZWFuT3JPcGVyYXRpb25Bcml0aG1ldGljTnVtT3BlcmF0aW9ubGVmdE51bXJpZ2h0TnVtZm9sZGVkVmFsdWVmb2xkTnVtc2lzRGl2aWRlaXNUcnVuY2F0aW5nRGl2aWRlU3VidHJhY3RPcGVyYXRpb25NdWx0aXBseU9wZXJhdGlvbk1vZHVsb09wZXJhdGlvblJlbWFpbmRlck9wZXJhdGlvblRydW5jYXRpbmdEaXZpZGVPcGVyYXRpb25yYXRpb0RpdmlkZU9wZXJhdGlvbkFkZE9wZXJhdGlvbmxlZnRTdHJpbmdyaWdodFN0cmluZ1JlbGF0aW9uYWxOdW1PcGVyYXRpb25MZXNzT3BlcmF0aW9uTGVzc0VxdWFsT3BlcmF0aW9uR3JlYXRlck9wZXJhdGlvbkdyZWF0ZXJFcXVhbE9wZXJhdGlvbkVxdWFsc09wZXJhdGlvbklkZW50aXR5T3BlcmF0aW9ubGVmdERvdWJsZXJpZ2h0RG91YmxlSWZOdWxsT3BlcmF0aW9uQ29kZVVuaXRBdE9wZXJhdGlvbmNoYXJDb2RlQXRzdHJpbmdDb25zdGFudGluZGV4Q29uc3RhbnRSb3VuZE9wZXJhdGlvbnJvdW5kdHJ5VG9Sb3VuZHJvdW5kZWRyb3VuZFRvRG91Ymxlcm91bmRlZDExZS0xM3JvdW5kZWQyMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhVbmZvbGRlZFVuYXJ5T3BlcmF0aW9uSmF2YVNjcmlwdFNldENvbnN0YW50SmF2YVNjcmlwdE1hcENvbnN0YW50UFJPVE9fUFJPUEVSVFlEQVJUX0NMQVNTREFSVF9TVFJJTkdfQ0xBU1NEQVJUX1BST1RPX0NMQVNTREFSVF9HRU5FUkFMX0NMQVNTTEVOR1RIX05BTUVKU19PQkpFQ1RfTkFNRV9qc09iamVjdEtFWVNfTkFNRV9rZXlzUFJPVE9fVkFMVUVfcHJvdG9WYWx1ZUpTX0RBVEFfTkFNRV9qc0RhdGFfQklUUzMyYml0QW5kYml0Tm90Yml0T3JiaXRYb3Jib29sZWFuQW5kYm9vbGVhbk9yZ3JlYXRlckVxdWFsZ3JlYXRlcmlkZW50aXR5aWZOdWxsbGVzc0VxdWFsbGVzc3NoaWZ0TGVmdHNoaWZ0UmlnaHRfaW50ZWdlckJlY29tZXNOYW5PckluZmluaXR5X2NvbnZlcnRUb0phdmFTY3JpcHRDb25zdGFudGZsb29yVmFsdWVkb3VibGVSZXN1bHR0cnVuY2F0ZWRjcmVhdGVJbnRjcmVhdGVJbnRGcm9tSW50X2NyZWF0ZUludDMyY3JlYXRlRG91YmxlY3JlYXRlU3RyaW5nY3JlYXRlQm9vbGNyZWF0ZU51bGxjcmVhdGVMaXN0Y3JlYXRlVHlwZWNyZWF0ZVNldG51bGxzY3JlYXRlTWFwa2V5c1R5cGVrZXlzTGlzdGNyZWF0ZVN5bWJvbGxvb2t1cFVuYXJ5bG9va3VwQmluYXJ5anNfYmFja2VuZC5uYXRpdmVfZGF0YWdldE5hdGl2ZVRhZ3NPZkNsYXNzaGFzTmF0aXZlVGFnc0ZvcmNlZE5vbkxlYWZpc0pzSW50ZXJvcFVzZWRpc0FsbG93SW50ZXJvcFVzZWRyZWdpc3RlckFsbG93SW50ZXJvcGlzSnNJbnRlcm9wTGlicmFyeWlzSnNJbnRlcm9wTWVtYmVyaXNOYXRpdmVNZW1iZXJnZXROYXRpdmVNZXRob2RCZWhhdmlvcmdldE5hdGl2ZUZpZWxkTG9hZEJlaGF2aW9yZ2V0TmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yZ2V0Rml4ZWRCYWNrZW5kTWV0aG9kUGF0aGdldEpzSW50ZXJvcExpYnJhcnlOYW1laXNBbm9ueW1vdXNKc0ludGVyb3BDbGFzc2dldEpzSW50ZXJvcENsYXNzTmFtZWdldEpzSW50ZXJvcE1lbWJlck5hbWVjb21wdXRlVW5lc2NhcGVkSlNJbnRlcm9wTmFtZU5hdGl2ZUJhc2ljRGF0YUJ1aWxkZXJzZXROYXRpdmVDbGFzc1RhZ0luZm90YWdJbmZvbWFya0FzSnNJbnRlcm9wTGlicmFyeW1hcmtBc0pzSW50ZXJvcENsYXNzaXNBbm9ueW1vdXNtYXJrQXNKc0ludGVyb3BNZW1iZXJzZXROYXRpdmVNZXRob2RCZWhhdmlvcnNldE5hdGl2ZUZpZWxkTG9hZEJlaGF2aW9yc2V0TmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yc2V0TmF0aXZlTWVtYmVyTmFtZU5hdGl2ZUJhc2ljRGF0YUJ1aWxkZXJJbXBsbmF0aXZlQ2xhc3NUYWdJbmZvanNJbnRlcm9wTGlicmFyaWVzanNJbnRlcm9wQ2xhc3Nlc2Fub255bW91c0pzSW50ZXJvcENsYXNzZXNqc0ludGVyb3BNZW1iZXJzdGFnVGV4dE5hdGl2ZUJhc2ljRGF0YUJ1aWxkZXIgaXMgY2xvc2VkLiBUcnlpbmcgdG8gbWFyayAgYXMgYSBuYXRpdmUgY2xhc3MuTmF0aXZlIHRhZyBpbmZvIHNldCBpbmNvbnNpc3RlbnRseSBvbiBFeGlzdGluZyB0YWcgaW5mbyAnbmV3IHRhZyBpbmZvICcgYXMgYSBqcy1pbnRlcm9wIGxpYnJhcnkuIGFzIGEganMtaW50ZXJvcCBjbGFzcy4gYXMgYSBqcy1pbnRlcm9wIG1lbWJlci5yZW9wZW5Gb3JUZXN0aW5nTmF0aXZlQmFzaWNEYXRhSW1wbG5hdGl2ZS1iYXNpYy1kYXRhX2lzQWxsb3dJbnRlcm9wVXNlZGZyb21JcmZvckVhY2hOYXRpdmVDbGFzc2ZvckVhY2hKc0ludGVyb3BMaWJyYXJ5Zm9yRWFjaEpzSW50ZXJvcENsYXNzZm9yRWFjaEpzSW50ZXJvcE1lbWJlcmlzTm9uTGVhZl9pc0pzSW50ZXJvcE1lbWJlck5hdGl2ZURhdGFCdWlsZGVySW1wbG5hdGl2ZU1lbWJlck5hbWVuYXRpdmVNZXRob2RCZWhhdmlvcm5hdGl2ZUZpZWxkTG9hZEJlaGF2aW9ybmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yTmF0aXZlIG1lbWJlciBuYW1lIHNldCBpbmNvbnNpc3RlbnRseSBvbiBFeGlzdGluZyBuYW1lICduZXcgbmFtZSAnTmF0aXZlRGF0YUltcGxuYXRpdmUtZGF0YV9qc0ludGVyb3BFc2NhcGVQcmVmaXhKUyRmb3JFYWNoTmF0aXZlTWV0aG9kRGF0YWdldE5hdGl2ZUJlaGF2aW9yRm9yTWV0aG9kZm9yRWFjaE5hdGl2ZUZpZWxkRGF0YWdldE5hdGl2ZUJlaGF2aW9yRm9yRmllbGRMb2FkZ2V0TmF0aXZlQmVoYXZpb3JGb3JGaWVsZFN0b3JlX2pzQ2xhc3NOYW1lSGVscGVyX2pzTWVtYmVyTmFtZUhlbHBlcl9qc0xpYnJhcnlOYW1lSGVscGVyanNJbnRlcm9wTmFtZSBpcyBqcyBpbnRlcm9wIGJ1dCBqcyBpbnRlcm9wIG5hbWUgaGFzIG5vdCB5ZXQgYmVlbiBjb21wdXRlZC5fZml4ZWRCYWNrZW5kQ2xhc3NQYXRoTm8gbmF0aXZlIG1ldGhvZCBiZWhhdmlvciBoYXMgYmVlbiBjb21wdXRlZCBmb3IgTm8gbmF0aXZlIGZpZWxkIGxvYWQgYmVoYXZpb3IgaGFzIGJlZW4gY29tcHV0ZWQgZm9yIE5vIG5hdGl2ZSBmaWVsZCBzdG9yZSBiZWhhdmlvciBoYXMgYmVlbiBjb21wdXRlZCBmb3IgTmF0aXZlQ2xhc3NUYWchbm9ubGVhZmRhcnQyanMuanNfbW9kZWwubG9jYWxzR2xvYmFsTG9jYWxzTWFwZ2xvYmFsLWxvY2Fscy1tYXBfbG9jYWxzTWFwc21hcENvdW50bG9jYWxzTWFwcmV2ZXJzZU1hcGdldExvY2Fsc01hcHNldExvY2Fsc01hcE5vIG1lbWJlciBwcm92aWRlZC5Mb2NhbHMgbWFwIGFscmVhZHkgY3JlYXRlZCBmb3IgS2VybmVsVG9Mb2NhbHNNYXBJbXBsbG9jYWxzLW1hcF9jdXJyZW50TWVtYmVyX2xvY2Fsc192YXJpYWJsZU1hcF9qdW1wVGFyZ2V0TWFwX2JyZWFrc0FzQ29udGludWVsb2NhbHNDb3VudGlzUmVndWxhclBhcmFtZXRlcnJlZ2lzdGVyQnlJbmRleGp1bXBDb3VudHJldmVyc2VkTWFwX2Vuc3VyZUp1bXBNYXBqdW1wVGFyZ2V0TWFwYnJlYWtzQXNDb250aW51ZWdldEp1bXBUYXJnZXRGb3JCcmVha2dlbmVyYXRlQ29udGludWVGb3JCcmVha2dldEp1bXBUYXJnZXRGb3JDb250aW51ZVN3aXRjaGdldEp1bXBUYXJnZXRGb3JTd2l0Y2hDYXNlZ2V0SnVtcFRhcmdldEZvckRvZ2V0SnVtcFRhcmdldEZvckxhYmVsZ2V0SnVtcFRhcmdldEZvclN3aXRjaGdldEp1bXBUYXJnZXRGb3JGb3JnZXRKdW1wVGFyZ2V0Rm9yRm9ySW5nZXRKdW1wVGFyZ2V0Rm9yV2hpbGVnZXRMb2NhbFZhcmlhYmxlcmVnaXN0ZXJnZXRMb2NhbFR5cGVWYXJpYWJsZWdldFR5cGVWYXJpYWJsZVR5cGVnZXRGdW5jdGlvbk5vZGVGb3JQYXJhbWV0ZXJnZXREYXRhZ2V0TG9jYWxUeXBlZ2V0RGFydFR5cGVKdW1wVmlzaXRvcmp1bXBJbmRleF9nZXRKdW1wVGFyZ2V0aXNTd2l0Y2hpc1N3aXRjaENhc2VfZ2V0T3JDcmVhdGVMYWJlbGFkZExhYmVsY2FuQmVCcmVha1RhcmdldGNhbkJlQ29udGludWVUYXJnZXRuZWVkc0xhYmVsSkp1bXBUYXJnZXRqdW1wLXRhcmdldF9sYWJlbHNkZWZpbml0aW9ubGFiZWxEZWZpbml0aW9uSkp1bXBUYXJnZXQobWVtYmVyQ29udGV4dD0sbmVzdGluZ0xldmVsPSxpc0JyZWFrVGFyZ2V0PSxpc0NvbnRpbnVlVGFyZ2V0PSxsYWJlbHM9SkxhYmVsRGVmaW5pdGlvbkpMYWJlbERlZmluaXRpb24oLGxhYmVsTmFtZT1KTG9jYWxMb2NhbERhdGFmb3JFYWNoT3JkZXJlZFBhcmFtZXRlckFzTG9jYWxjb21waWxlci5zcmMua2VybmVsLmRhcnQyanNfdGFyZ2V0ZGFydDpfY2hyb21lZGFydDpfZm9yZWlnbl9oZWxwZXJkYXJ0Ol9qc19lbWJlZGRlZF9uYW1lc2RhcnQ6X2pzX2hlbHBlcmRhcnQ6X2pzX25hbWVzZGFydDpodG1sX2NvbW1vbmRhcnQ6aW5kZXhlZF9kYmRhcnQ6aW9kYXJ0OmpzX3V0aWxkYXJ0OndlYl9hdWRpb2RhcnQ6d2ViX2dsZGFydDp3ZWJfc3FsRGFydDJqc0NvbnN0YW50c0JhY2tlbmRfYWxsb3dlZERhcnRTY2hlbWVQYXRoc2pzX3V0aWxfcmVxdWlyZWRMaWJyYXJpZXNtYXliZUVuYWJsZU5hdGl2ZWFsbG93ZWRUZXN0TGlicmFyeXRlc3RzL2NvbXBpbGVyL2RhcnQyanNfbmF0aXZldGVzdHMvY29tcGlsZXIvZGFydDJqc19leHRyYWdlbmVyYXRlZF90ZXN0cy9kYXJ0MmpzX25hdGl2ZS9uYXRpdmVfdGVzdGFsbG93ZWREYXJ0TGlicmFyeUtMaWJyYXJ5azpsaWJyYXJ5KEtDbGFzc2NsYXNzKEtUeXBlZGVmdHlwZWRlZihLTWVtYmVyX2lzU3RhdGljS0Z1bmN0aW9uS0NvbnN0cnVjdG9yS0dlbmVyYXRpdmVDb25zdHJ1Y3RvcktGYWN0b3J5Q29uc3RydWN0b3JLTWV0aG9kS0dldHRlcktTZXR0ZXJLRmllbGRLVHlwZVZhcmlhYmxldHlwZV92YXJpYWJsZShleGVjdXRhYmxlQ29udGV4dGxvY2FsX2Z1bmN0aW9uS0xvY2FsVHlwZVZhcmlhYmxlbG9jYWxfdHlwZV92YXJpYWJsZShrRWxlbWVudFByZWZpeGRhcnQyanNfaW5mby5pbmZvSW5mb0Jhc2ljSW5mb0NvZGVJbmZvQWxsSW5mb21pbm9yVmVyc2lvbnZpc2l0QWxsUHJvZ3JhbUluZm9JbmZvS2luZC5saWJyYXJ5T3V0cHV0VW5pdEluZm9JbmZvS2luZC5vdXRwdXRVbml0dmlzaXRPdXRwdXRDbGFzc0luZm9JbmZvS2luZC5jbGF6ekNvZGVTcGFuQ29uc3RhbnRJbmZvSW5mb0tpbmQuY29uc3RhbnRfRmllbGRJbmZvJkJhc2ljSW5mbyZDb2RlSW5mb0luZm9LaW5kLmZpZWxkVHlwZWRlZkluZm9JbmZvS2luZC50eXBlZGVmX0Z1bmN0aW9uSW5mbyZCYXNpY0luZm8mQ29kZUluZm9GdW5jdGlvbkluZm9UT1BfTEVWRUxfRlVOQ1RJT05fS0lORENMT1NVUkVfRlVOQ1RJT05fS0lORE1FVEhPRF9GVU5DVElPTl9LSU5EQ09OU1RSVUNUT1JfRlVOQ1RJT05fS0lOREluZm9LaW5kLmZ1bmN0aW9uQ2xvc3VyZUluZm9JbmZvS2luZC5jbG9zdXJldmlzaXRDbG9zdXJlUGFyYW1ldGVySW5mb0Z1bmN0aW9uTW9kaWZpZXJzSW5mb0tpbmRJbmZvVmlzaXRvclJlY3Vyc2l2ZUluZm9WaXNpdG9ya2luZFRvU3RyaW5na2luZEZyb21TdHJpbmdKc29uVG9BbGxJbmZvQ29udmVydGVycGFyc2VMaWJyYXJ5cGFyc2VGdW5jdGlvbnBhcnNlQ2xvc3VyZXBhcnNlRmllbGRwYXJzZUNvbnN0YW50aG9sZGluZ3BhcnNlT3V0cHV0VW5pdHBhcnNlUHJvZ3JhbWRlZmVycmVkRmlsZXNNYXBpbXBvcnRNYXBwYXJzZUlkcGFyc2VDb2RlcHJvZ3JhbUluZm9fcGFyc2VEdXJhdGlvbm1pY3Jvc2Vjb25kc2hvdXJzbWludXRlc3RvdGFsTWlsbGlzcGFyc2VQYXJhbWV0ZXJwYXJzZU1vZGlmaWVyc3NlcmlhbGl6ZWRJZGZ1bmN0aW9uL2Nsb3N1cmUvbGlicmFyeS9jbGFzcy9maWVsZC9jb25zdGFudC90eXBlZGVmL291dHB1dFVuaXQvanNvbkNvZGVBbGxJbmZvVG9Kc29uQ29udmVydGVyaWRzdXNlZElkc2lkRm9ydXNlTGlicmFyeVVyaWZvcklkX3Zpc2l0TGlzdF92aXNpdEFsbEluZm9FbGVtZW50c2pzb25MaWJyYXJpZXNqc29uQ2xhc3Nlc2pzb25GdW5jdGlvbnNqc29uVHlwZWRlZnNqc29uRmllbGRzanNvbkNvbnN0YW50c2pzb25DbG9zdXJlc192aXNpdERlcGVuZGVuY3lJbmZvX3Zpc2l0QWxsSW5mb0hvbGRpbmdfdmlzaXRBbGxJbmZvRGVwZW5kZW5jaWVzanNvbkhvbGRpbmdqc29uRGVwZW5kZW5jaWVzZHVtcF92ZXJzaW9uZHVtcF9taW5vcl92ZXJzaW9uX3Zpc2l0QmFzaWNJbmZvX3NlcmlhbGl6ZUNvZGVfdmlzaXRGdW5jdGlvbk1vZGlmaWVyc21vZHNfdmlzaXRQYXJhbWV0ZXJJbmZvQWxsSW5mb0pzb25Db2RlY0lkX3RvU29ydGVkU2VyaWFsaXplZElkc2dldElkd3JpdGVEYXRlZGF0ZXRvSXNvODYwMVN0cmluZ3dyaXRlRHVyYXRpb253cml0ZUluZm9XaXRoS2luZHdyaXRlRGVwZW5kZW5jaWVzX3dyaXRlRGVwZW5kZW5jeUluZm9fd3JpdGVPdXRwdXRPck51bGxfdmlzaXRDb2RlU3Bhbl93cml0ZUNvbnN0YW50T3JOdWxsQmluYXJ5UmVhZGVycmVhZERhdGVyZWFkRHVyYXRpb25yZWFkSW5mb1dpdGhLaW5kcmVhZEZ1bmN0aW9ucmVhZE91dHB1dHJlYWRDbG9zdXJld2FybmluZzogZGF0YSB3YXMgZW5jb2RlZCB3aXRoIGZvcm1hdCB2ZXJzaW9uICwgYnV0IGRlY29kZWQgd2l0aCByZWFkRGVwZW5kZW5jaWVzX3JlYWREZXBlbmRlbmN5SW5mb2RlcGVuZGVuY2llc1RvdGFscmVhZFByb2dyYW1fcmVhZEJhc2ljSW5mb19yZWFkT3V0cHV0T3JOdWxsX3JlYWRDb2RlU3Bhbl9yZWFkQ29uc3RhbnRPck51bGxoYXNPdXRwdXRfcmVhZEZ1bmN0aW9uTW9kaWZpZXJzX3JlYWRQYXJhbWV0ZXJJbmZvX3N0YXRpY01hc2tfY29uc3RNYXNrX2ZhY3RvcnlNYXNrX2V4dGVybmFsTWFza0pGaWVsZF9jbGFzc0RhdGFfc3RhdGljRmllbGREYXRha2VybmVsU3RyYXRlZ3lnZXRDbGFzc05vZGVmaWVsZEVsZW1lbnRnZXRGaWVsZGdldENvbnN0YW50VmFsdWVyZXF1aXJlQ29uc3RhbnRpbXBsaWNpdE51bGxjb25zdHJ1Y3RvckVsZW1lbnRpbml0aWFsaXplclZhbHVlSW5pdGlhbGl6ZXJLaW5kLmNvbXBsZXhjb25zdGFudFZhbHVlY29tcGxleGl0eWdldEFsbG9jYXRvckRhdGFGb3JUZXN0aW5nZ2V0U3RhdGljRmllbGREYXRhRm9yVGVzdGluZ0NsYXNzRGF0YVN0YXRpY0ZpZWxkRGF0YWhhc0RlcGVuZGVuY2llc0FsbG9jYXRvckRhdGFBbGxvY2F0b3JEYXRhKGluaXRpYWxWYWx1ZT1pbml0aWFsaXplcnM9SW5pdGlhbGl6ZXJLaW5kSW5pdGlhbGl6ZXJLaW5kLmRpcmVjdEluaXRpYWxpemVyS2luZC5wb3NpdGlvbmFsSW5pdGlhbGl6ZXJLaW5kLm5hbWVkY29tcGxleFVuZXhwZWN0ZWQga2luZCBmaWVsZC1hbmFseXNpc19maWVsZERhdGFjYW5CZUVsaWRlZGhhc05vRWxpc2lvbmtGaWVsZGpGaWVsZHRvQmFja2VuZE1lbWJlcmlzVG9vQ29tcGxleGluY2x1ZGVJbml0aWFsVmFsdWVpbml0aWFsQ29uc3RhbnRzaW5BbGxDb25zdHJ1Y3RvcnNjb25zdHJ1Y3RvclVzYWdlaW52b2tlZFBhcmFtZXRlcnN0b0JhY2tlbmRDb25zdGFudGlzRWZmZWN0aXZlbHlDb25zdGFudGlzSW5pdGlhbGl6ZWRJbkFsbG9jYXRvcmhhc1dyaXRlaXNFZmZlY3RpdmVseUZpbmFsaW5kZXBlbmRlbnRGaWVsZHNkZXBlbmRlbnRGaWVsZHNzdGF0aWNGaWVsZERhdGFwcm9jZXNzZWRGaWVsZHNjdXJyZW50RmllbGRzZWFnZXJDcmVhdGlvbkluZGV4cHJvY2Vzc0ZpZWxkaXNFYWdlcmVhZ2VyRmllbGREZXBlbmRlbmNpZXNjcmVhdGlvbkluZGV4b3RoZXJGaWVsZG90aGVyRGF0YWlzTGF6eWVhZ2VyRmllbGREZXBlbmRlbmNpZXNGb3JUZXN0aW5nYUxvY2F0aW9uYkxvY2F0aW9uRmllbGRBbmFseXNpc0RhdGFmaWVsZC1hbmFseXNpcy1kYXRhZnJvbURhdGFTb3VyY2VGaWVsZEFuYWx5c2lzRGF0YShpbml0aWFsVmFsdWU9aXNJbml0aWFsaXplZEluQWxsb2NhdG9yPWlzRWZmZWN0aXZlbHlGaW5hbD0saXNFbGlkZWQ9aXNFYWdlcj0sZWFnZXJDcmVhdGlvbkluZGV4PWVhZ2VyRmllbGREZXBlbmRlbmNpZXM9QmluYXJ5T3V0cHV0U2lua0FkYXB0ZXJqc19iYWNrZW5kLmJhY2tlbmQuYW5ub3RhdGlvbnNQcmFnbWFBbm5vdGF0aW9uZm9yRnVuY3Rpb25zT25seWZvckZpZWxkc09ubHlpbnRlcm5hbE9ubHlhc1RydXN0YXNDaGVja3R5cGVzVHJ1c3R0eXBlc0NoZWNrcGFyYW1ldGVyVHJ1c3Rkb3duY2FzdFRydXN0ZG93bmNhc3RDaGVja2ltcGxpZXNleGNsdWRlc3JlcXVpcmVzQW5ub3RhdGlvbnNEYXRhaGFzQXNzdW1lRHluYW1pY2hhc05vSW5saW5laGFzVHJ5SW5saW5laGFzRGlzYWJsZUZpbmFsaGFzTm9UaHJvd3NoYXNOb1NpZGVFZmZlY3RzZ2V0Q29uZGl0aW9uQ2hlY2tQb2xpY3lBbm5vdGF0aW9uc0RhdGFJbXBsYW5ub3RhdGlvbnMtZGF0YV9kZWZhdWx0UGFyYW1ldGVyQ2hlY2tQb2xpY3lfZGVmYXVsdEltcGxpY2l0RG93bmNhc3RDaGVja1BvbGljeV9kZWZhdWx0Q29uZGl0aW9uQ2hlY2tQb2xpY3lfZGVmYXVsdEV4cGxpY2l0Q2FzdENoZWNrUG9saWN5X2hhc1ByYWdtYUFubm90YXRpb25zRGF0YUJ1aWxkZXJjb21wdXRlUHJhZ21hQW5ub3RhdGlvbkRhdGFkYXJ0MmpzOm9wdGlvbnNWYWx1ZWhhc09wdGlvbnNwcm9jZXNzTWVtYmVyQW5ub3RhdGlvbnNwbGF0Zm9ybUFubm90YXRpb25zQWxsb3dlZEBwcmFnbWEoJycpIGFubm90YXRpb24gZG9lcyBub3QgdGFrZSBvcHRpb25zJykgYW5ub3RhdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgbWV0aG9kcyBhbmQgY29uc3RydWN0b3JzLmZvciBmaWVsZHMuVW5yZWNvZ25pemVkIGRhcnQyanMgcHJhZ21hIEBwcmFnbWEoJ1Vua25vd24gZGFydDJqcyBwcmFnbWEgQHByYWdtYSgncmVwb3J0ZWRFeGNsdXNpb25zQHByYWdtYSgnZGFydDJqczonKSBpbXBsaWVzICcpIG11c3Qgbm90IGJlIHVzZWQgd2l0aCBAcHJhZ21hKCdkYXJ0MmpzOicpIHNob3VsZCBhbHdheXMgYmUgY29tYmluZWQgd2l0aCBAcHJhZ21hKCdkYXJ0MmpzOk1lbWJlclVzZWRDYWxsYmFja0NsYXNzVXNlZENhbGxiYWNrQWJzdHJhY3RVc2FnZV9wZW5kaW5nVXNlX29yaWdpbmFsVXNlX2FwcGxpZWRVc2VoYXNTYW1lVXNhZ2VNZW1iZXJVc2FnZWVtcHR5U2V0cGVuZGluZ1VzZWNyZWF0ZVBvdGVudGlhbEFjY2Vzc1NldEFjY2Vzcy5zdGF0aWNBY2Nlc3NjcmVhdGVQb3RlbnRpYWxSZWFkc2NyZWF0ZVBvdGVudGlhbFdyaXRlc2NyZWF0ZVBvdGVudGlhbEludm9rZXNwb3RlbnRpYWxSZWFkc3BvdGVudGlhbFdyaXRlc3BvdGVudGlhbEludm9rZXNoYXNJbml0aGFzSW52b2tlYWNjZXNzZXNQcm9wZXJ0eVVzYWdlYWxyZWFkeUhhc1JlYWRhbHJlYWR5SGFzV3JpdGVQcm9wZXJ0eVVzYWdlKHJlYWRzPXdyaXRlcz1pbnZva2VzPXBvdGVudGlhbFJlYWRzPXBvdGVudGlhbFdyaXRlcz1wb3RlbnRpYWxJbnZva2VzPXBlbmRpbmdVc2U9aW5pdGlhbENvbnN0YW50cz1GaWVsZFVzYWdlX2luaXRpYWxDb25zdGFudHNGaWVsZFVzYWdlKCxoYXNJbml0PU1ldGhvZFVzYWdlcGFyYW1ldGVyVXNhZ2VhbHJlYWR5SGFzSW52b2tlZnVsbHlVc2Vpc0Z1bGx5VXNlZE1ldGhvZFVzYWdlKHBhcmFtZXRlclVzYWdlPU1lbWJlclVzZU5PUk1BTENMT1NVUklaRV9JTlNUQU5DRUNMT1NVUklaRV9TVEFUSUNNZW1iZXJVc2VzTk9STUFMX09OTFlDTE9TVVJJWkVfSU5TVEFOQ0VfT05MWUNMT1NVUklaRV9TVEFUSUNfT05MWUFMTF9JTlNUQU5DRUFMTF9TVEFUSUNDbGFzc1VzYWdlQ2xhc3NVc2VJTlNUQU5USUFURURJTVBMRU1FTlRFRENsYXNzVXNlc0lOU1RBTlRJQVRFRF9PTkxZSU1QTEVNRU5URURfT05MWVBhcmFtZXRlclVzYWdlX3BhcmFtZXRlclN0cnVjdHVyZV9oYXNJbnZva2VfcHJvdmlkZWRQb3NpdGlvbmFsUGFyYW1ldGVyc19hcmVBbGxUeXBlUGFyYW1ldGVyc1Byb3ZpZGVkX3VucHJvdmlkZWROYW1lZFBhcmFtZXRlcnNwcm92aWRlZFBvc2l0aW9uYWxQYXJhbWV0ZXJzYXJlQWxsVHlwZVBhcmFtZXRlcnNQcm92aWRlZHVucHJvdmlkZWROYW1lZFBhcmFtZXRlcnNuZXdQcm92aWRlZFBvc2l0aW9uYWxQYXJhbWV0ZXJzX3Byb3ZpZGVkTmFtZWRQYXJhbWV0ZXJzQ291bnRQYXJhbWV0ZXJVc2FnZShfaGFzSW52b2tlPV9wcm92aWRlZFBvc2l0aW9uYWxQYXJhbWV0ZXJzPV9hcmVBbGxUeXBlUGFyYW1ldGVyc1Byb3ZpZGVkPV91bnByb3ZpZGVkTmFtZWRQYXJhbWV0ZXJzPUFjY2Vzc3N0YXRpY0FjY2Vzc2R5bmFtaWNBY2Nlc3NzdXBlckFjY2Vzc0FjY2Vzc2VzTWVtYmVyQWNjZXNzd29ybGRfYnVpbGRlclNlbGVjdG9yQ29uc3RyYWludHNTdHJvbmdNb2RlV29ybGRTdHJhdGVneVN0cm9uZ01vZGVXb3JsZENvbnN0cmFpbnRzX2NvbnN0cmFpbnRzU3Ryb25nTW9kZUNvbnN0cmFpbnQoV29ybGRCdWlsZGVyV29ybGRCdWlsZGVyQmFzZV9yZWdpc3RlclN0YXRpY1R5cGVBcmd1bWVudERlcGVuZGVuY3lfcmVnaXN0ZXJEeW5hbWljVHlwZUFyZ3VtZW50RGVwZW5kZW5jeU5vU3VjaE1ldGhvZFJlZ2lzdHJ5cmVnaXN0ZXJOb1N1Y2hNZXRob2Rub1N1Y2hNZXRob2RFbGVtZW50aGFzVGhyb3dpbmdOb1N1Y2hNZXRob2RoYXNDb21wbGV4Tm9TdWNoTWV0aG9kTm9TdWNoTWV0aG9kUmVnaXN0cnlJbXBsZGVmYXVsdEltcGxzdGhyb3dpbmdJbXBsc25vdEFwcGxpY2FibGVJbXBsc290aGVySW1wbHNfdW5jYXRlZ29yaXplZEltcGxzZm9yd2FyZGluZ1N5bnRheEltcGxzX3Jlc29sdmVyaW50ZXJuYWxSZXNvbHZlckZvclRlc3RpbmdfY2F0ZWdvcml6ZUltcGxOc21DYXRlZ29yeS5ERUZBVUxUTnNtQ2F0ZWdvcnkuVEhST1dJTkdOc21DYXRlZ29yeS5PVEhFUk5zbUNhdGVnb3J5Lk5PVF9BUFBMSUNBQkxFaGFzRm9yd2FyZGluZ1N5bnRheHN1cGVyQ2FsbGdldFN1cGVyTm9TdWNoTWV0aG9kaGFzVGhyb3dpbmdTeW50YXhpc0NvbXBsZXhOb1N1Y2hNZXRob2REYXRhSW1wbG5vLXN1Y2gtbWV0aG9kLWRhdGFjb21wbGV4Tm9SZXR1cm5JbXBsc2NvbXBsZXhSZXR1cm5pbmdJbXBsc05zbUNhdGVnb3J5VEhST1dJTkdOT1RfQVBQTElDQUJMRU9USEVSTm9TdWNoTWV0aG9kUmVzb2x2ZXJDbGFzc1JlbGF0aW9uU3RhdGljVHlwZVZpc2l0b3JfZXhwcmVzc2lvblR5cGVDYWNoZV9mb3JJbkl0ZXJhdG9yVHlwZUNhY2hldHlwZU1hcHNGb3JUZXN0aW5nX3BlbmRpbmdSdW50aW1lVHlwZVVzZURhdGFfY3VycmVudFZhcmlhYmxlc19pbnZhbGlkYXRlZFZhcmlhYmxlc190eXBlTWFwQmFzZV90eXBlTWFwV2hlblRydWVfdHlwZU1hcFdoZW5GYWxzZWdldFN0YXRpY1R5cGVDYWNoZWNvbXBsZXRlc3R5cGVNYXBXaGVuVHJ1ZXR5cGVNYXBXaGVuRmFsc2VVbmhhbmRsZWQgbm9kZSB2aXNpdE5vZGVzZ2V0SW50ZXJmYWNlVHlwZU9mX2NvbXB1dGVQcm9wZXJ0eUdldFR5cGVoYW5kbGVQcm9wZXJ0eUdldGhhbmRsZVJ1bnRpbWVUeXBlVXNlX25hcnJvd0luc3RhbmNlUmVjZWl2ZXJsZWZ0UnVudGltZVR5cGVFeHByZXNzaW9ucmlnaHRSdW50aW1lVHlwZUV4cHJlc3Npb25VbmV4cGVjdGVkIFJ1bnRpbWVUeXBlVXNlRGF0YSBmb3IgaXNDb21wbGV0ZWhhbmRsZVByb3BlcnR5U2V0cmVjZWl2ZXJTdWJzdGl0dXRpb25oYW5kbGVBc0V4cHJlc3Npb25oYW5kbGVEaXJlY3RQcm9wZXJ0eUdldGhhbmRsZURpcmVjdE1ldGhvZEludm9jYXRpb25hcmd1bWVudFR5cGVzX3Zpc2l0QXJndW1lbnRzaGFuZGxlRGlyZWN0UHJvcGVydHlTZXRpc1NwZWNpYWxDYXNlZEJpbmFyeU9wZXJhdG9yX2dldE1lbWJlcl9pc0FwcGxpY2FibGVpc0Z1bmN0aW9uVHlwZUFwcGxpY2FibGVnZXROYW1lZFBhcmFtZXRlcnNpc1R5cGVBcHBsaWNhYmxlX3VwZGF0ZU1ldGhvZEludm9jYXRpb25UYXJnZXRuZWVkZWRQb3NpdGlvbmFsQ2hlY2tzbmVlZGVkTmFtZWRDaGVja3Nhcmd1bWVudEluZGV4bmFtZWRBcmd1bWVudG5hbWVkVHlwZWxldFZhcmlhYmxlc3VwZGF0ZUFyZ3VtZW50Y2hlY2tlZFBhcmFtZXRlclR5cGVoYW5kbGVWYXJpYWJsZURlY2xhcmF0aW9uaGFuZGxlVmFyaWFibGVHZXRfY29tcHV0ZU1ldGhvZEludm9jYXRpb25UeXBlaGFuZGxlTWV0aG9kSW52b2NhdGlvbmFmdGVySW52b2NhdGlvbnByb21vdGV0eXBlT2ZVbmV4cGVjdGVkIHByb21vdGlvbiBvZiBoYW5kbGVWYXJpYWJsZVNldGhhbmRsZVN0YXRpY0dldGhhbmRsZVN0YXRpY1NldGhhbmRsZVN0YXRpY0ludm9jYXRpb25oYW5kbGVTdXBlclByb3BlcnR5R2V0aGFuZGxlU3VwZXJQcm9wZXJ0eVNldGhhbmRsZVN1cGVyTWV0aG9kSW52b2NhdGlvbmFmdGVyTGVmdFdoZW5UcnVlYWZ0ZXJMZWZ0V2hlbkZhbHNlYWZ0ZXJSaWdodFdoZW5UcnVlYWZ0ZXJSaWdodFdoZW5GYWxzZWFmdGVyT3BlcmFuZFdoZW5UcnVlYWZ0ZXJPcGVyYW5kV2hlbkZhbHNlX2hhbmRsZUNvbmRpdGlvbmFsYWZ0ZXJDb25kaXRpb25XaGVuVHJ1ZWFmdGVyQ29uZGl0aW9uV2hlbkZhbHNlYWZ0ZXJUaGVuYWZ0ZXJPdGhlcndpc2VoYW5kbGVJc0V4cHJlc3Npb25hZnRlck9wZXJhbmRfcHJvY2Vzc0xvY2FsVmFyaWFibGVfY29tcHV0ZUluc3RhbnRpYXRpb25UeXBlaGFuZGxlSW5zdGFudGlhdGlvbkluY29tcGxldGUgUnVudGltZVR5cGVVc2VEYXRhOiBvcGVyYW5kVHlwZWhhbmRsZVN0cmluZ0NvbmNhdGVuYXRpb25oYW5kbGVJbnRMaXRlcmFsaGFuZGxlRG91YmxlTGl0ZXJhbGhhbmRsZUJvb2xMaXRlcmFsaGFuZGxlU3RyaW5nTGl0ZXJhbGhhbmRsZVN5bWJvbExpdGVyYWxoYW5kbGVOdWxsTGl0ZXJhbGhhbmRsZUxpc3RMaXRlcmFsaGFuZGxlU2V0TGl0ZXJhbGhhbmRsZU1hcExpdGVyYWxoYW5kbGVGdW5jdGlvbkV4cHJlc3Npb25iZWZvcmVDbG9zdXJlZ2V0U2NvcGVGb3Jhc3NpZ25lZFZhcmlhYmxlc19vbGRWYXJpYWJsZXN2aXNpdFNpZ25hdHVyZWhhbmRsZVRocm93aGFuZGxlRmllbGRJbml0aWFsaXplcmhhbmRsZVJlZGlyZWN0aW5nSW5pdGlhbGl6ZXJoYW5kbGVTdXBlckluaXRpYWxpemVyYmVmb3JlTG9vcGhhbmRsZUZvckluU3RhdGVtZW50aXRlcmF0b3JUeXBlc3RyZWFtSW50ZXJmYWNlVHlwZWl0ZXJhYmxlSW50ZXJmYWNlVHlwZWhhbmRsZVN3aXRjaFN0YXRlbWVudGFmdGVyU3RhdGVtZW50YmVmb3JlQ2FzZWhhc0NvbnRpbnVlU3dpdGNoaGFuZGxlQ2F0Y2hoYW5kbGVUeXBlTGl0ZXJhbGhhbmRsZUxvYWRMaWJyYXJ5aGFuZGxlQXNzZXJ0U3RhdGVtZW50YmVmb3JlQ29uZGl0aW9uaGFuZGxlRnVuY3Rpb25EZWNsYXJhdGlvbmhhbmRsZVBhcmFtZXRlcmhhbmRsZVNpZ25hdHVyZWhhbmRsZVByb2NlZHVyZWhhbmRsZUNvbnN0cnVjdG9yaGFuZGxlRmllbGRoYW5kbGVDb25zdGFudEV4cHJlc3Npb25Bcmd1bWVudFR5cGVzVHlwZUhvbGRlcnRydWVUeXBlc2ZhbHNlVHlwZXNfZ2V0VGV4dHR5cGVzVG9UZXh0dHJ1ZTpmYWxzZTpUeXBlSG9sZGVyKGRlY2xhcmVkPVRhcmdldEluZm90eXBlSG9sZGVyc3R5cGVzT2ZJbnRlcmVzdG5ld1R5cGVIb2xkZXJzYWRkVHlwZUhvbGRlcnR5cGVIb2xkZXJhZGRBc0NvcHluZXdUeXBlc09mSW50ZXJlc3RhZGRUeXBlSG9sZGVyc290aGVyVHJ1ZVR5cGVzb3RoZXJGYWxzZVR5cGVzb3RoZXJUeXBlc09mSW50ZXJlc3RuZXdUcnVlVHlwZXNuZXdGYWxzZVR5cGVzdGhpc1RydWVUeXBlc3RoaXNGYWxzZVR5cGVzVGFyZ2V0SW5mbyhkZWNsYXJlZFR5cGU9dHlwZUhvbGRlcnM9ZGVjbGFyYXRpb25zT2ZJbnRlcmVzdD1UeXBlTWFwX3RhcmdldEluZm9NYXBuZXdJbmZvTWFwdGFyZ2V0SW5mb3R5cGVPZkludGVyZXN0dHlwZUhvbGRlcklmTm9uTnVsbHR5cGVIb2xkZXJJZk51bGxUeXBlTWFwKGNvbXB1dGVDbGFzc1JlbGF0aW9uRnJvbVR5cGVpc0luZGlyZWN0bHlJbnN0YW50aWF0ZWRzdWJjbGFzc2VzT2Zmb3JFYWNoU3RyaWN0U3ViY2xhc3NPZmFueVN0cmljdFN1YmNsYXNzT2ZzdWJ0eXBlc09mZm9yRWFjaFN0cmljdFN1YnR5cGVPZmFueVN0cmljdFN1YnR5cGVPZmhhdmVBbnlDb21tb25TdWJ0eXBlc2NsczFxdWVyeTFjbHMycXVlcnkyZ2V0Q2xhc3NIaWVyYXJjaHlOb2RlZ2V0Q2xhc3NTZXRDbGFzc0hpZXJhcmNoeUltcGxjbGFzcy1oaWVyYXJjaHlfY2xhc3NIaWVyYXJjaHlOb2Rlc19jbGFzc1NldHNjbGFzc0hpZXJhcmNoeU5vZGVzY2xhc3NTZXRzY2xhc3NTZXRmb3JFYWNoU3ViY2xhc3NObyBDbGFzc1NldCBmb3IgKTogY2xhc3NIaWVyYXJjaHlOb2RlTm8gQ2xhc3NIaWVyYXJjaHlOb2RlIGZvciBoYXNTdWJ0eXBlaGFzU3ViY2xhc3NzdWJjbGFzc2VzQnlNYXNrc3ViY2xhc3Nlc3N0cmljdGluc3RhbnRpYXRlZFN1YmNsYXNzQ291bnRhbnlTdWJjbGFzc3N1YnR5cGVzQnlNYXNraW5zdGFudGlhdGVkU3VidHlwZUNvdW50Zm9yRWFjaFN1YnR5cGVhbnlTdWJ0eXBlY2xhc3NTZXRBY2xhc3NTZXRCc3VidHlwZXNPZkJzdWJ0eXBlT2ZBaGFzT25seUluc3RhbnRpYXRlZFN1YmNsYXNzZXNJdGVyYXRpb25TdGVwLlNLSVBfU1VCQ0xBU1NFU0l0ZXJhdGlvblN0ZXAuQ09OVElOVUVDbGFzc2VzIGluIHRoZSBjbG9zZWQgd29ybGQgcmVsYXRlZCB0byBJbnN0YW50aWF0ZWQgY2xhc3NlcyBpbiB0aGUgY2xvc2VkIHdvcmxkOgppbnN0YW50aWF0ZWRPbmx5d2l0aFJlc3BlY3RUb19pbmhlcml0ZWRJblRoaXNDbGFzc0NhY2hlTWFwX2luaGVyaXRlZEluU3VidHlwZUNhY2hlTWFwQ2xhc3NIaWVyYXJjaHlOb2RlL0NsYXNzU2V0IG1pc21hdGNoOiBfZW5zdXJlQ2xhc3NTZXRnZXREZWNsYXJhdGlvbl9lbnN1cmVDbGFzc0hpZXJhcmNoeU5vZGVwYXJlbnROb2RlZ2V0SGllcmFyY2h5RGVwdGhzdWJ0eXBlU2V0YWRkU3VidHlwZWFwcGxpZWRNaXhpbmdldEFwcGxpZWRNaXhpbnJlZ2lzdGVyTWl4aW5Vc2VtaXhpblNldF91cGRhdGVTdXBlckNsYXNzSGllcmFyY2h5Tm9kZUZvckNsYXNzaW1wbGVtZW50c0Z1bmN0aW9uX2lzU3VidHlwZU9mQ2xhc3NTZXQgZm9yICBoYXMgbm90IGJlZW4gY29tcHV0ZWQgeWV0LmV4YWN0Q2xhc3NleGFjdENsYXNzTm9kZW1lbWJlckhvbGRpbmdDbGFzc1NldG1peGluQXBwbGljYXRpb25Ob2Rlc3RoaXNDbGFzc2lzSW5oZXJpdGVkSW5UaGlzQ2xhc3NPZl9Jbmhlcml0ZWRJblRoaXNDbGFzc0NhY2hlX2luaGVyaXRpbmdDbGFzc2VzX2NvbXB1dGVJbmhlcml0aW5nSW5UaGlzQ2xhc3NTZXRoYXNMaXZlQ2xhc3NtZW1iZXJIb2xkaW5nQ2xhc3NOb2RldmFsaWRhdGluZ1NldHByb2Nlc3NIaWVyYXJjaHltaXhlck5vZGVpbmhlcml0aW5nQ2xhc3Npbmhlcml0aW5nQ2xhc3NOb2RldGhpc0NsYXNzU2V0X0luaGVyaXRlZEluU3VidHlwZUNhY2hlX2NvbXB1dGVJbmhlcml0aW5nSW5TdWJ0eXBlU2V0c3ViY2xhc3NJbXBsZW1lbnRzX0xpdmVTZXRfcmVzdWx0Q2xhc3NRdWVyeVN1YmNsYXNzUmVzdWx0S2luZEVYQUNUMUVYQUNUMlNVQkNMQVNTMVNVQkNMQVNTMlNVQlRZUEUxU1VCVFlQRTJTdWJjbGFzc1Jlc3VsdFN1YmNsYXNzUmVzdWx0KCxjbGFzc2VzPXR5cGVfZ3JhcGhfaW5mZXJyZXJKQ2xvc3VyZUNhbGxNZXRob2Rkb05vdEVucXVldWVfaW5mZXJyZWREYXRhQnVpbGRlckdyYXBoIGluZmVycmVyY3JlYXRlSW5mZXJyZXJFbmdpbmVGb3JydW5PdmVyQWxsRWxlbWVudHNidWlsZFJlc3VsdHNnZXRDYWxsZXJzT2ZGb3JUZXN0aW5nY3JlYXRlTWVtYmVyUmVzdWx0c3R5cGVJbmZvcm1hdGlvbmRhdGFPZk1lbWJlcmZyZWVWYXJpYWJsZXNmb3JFYWNoTWVtYmVyVHlwZWdldFNjb3BlSW5mb2ZvckVhY2hGcmVlVmFyaWFibGVnZXRJbmZlcnJlZFR5cGVPZk1lbWJlcmNvbXB1dGVJc0NhbGxlZE9uY2Vmb3JFYWNoUGFyYW1ldGVyVHlwZWNoZWNrc0dyb3dhYmxldHlwZXMuY29uc3RhbnRzQ29uc3RhbnRWYWx1ZVR5cGVNYXNrc2NvbXB1dGVUeXBlTWFza0pSZWNvcmRGaWVsZEpzVG9FbGVtZW50TWFwZ2V0SW50ZXJmYWNlVHlwZWdldENhbGxTdHJ1Y3R1cmVnZXRTZWxlY3RvcmdldE1ldGhvZGdldFR5cGVkZWZUeXBlZ2V0U3VwZXJNZW1iZXJnZXROYXRpdmVCZWhhdmlvckZvckpzQ2FsbGdldE5hdGl2ZUJlaGF2aW9yRm9ySnNCdWlsdGluQ2FsbGdldE5hdGl2ZUJlaGF2aW9yRm9ySnNFbWJlZGRlZEdsb2JhbENhbGxnZXRJbXBvcnRnZXRDbGFzc0RlZmluaXRpb25nZXREYXJ0VHlwZXNnZXRNZW1iZXJEZWZpbml0aW9uZ2V0Q2xhc3NUeXBlVmFyaWFibGVBY2Nlc3NGb3JNZW1iZXJnZXRTcGFubmFibGVnZXRDb25zdHJ1Y3RvckJvZHlnZXRHZW5lcmF0b3JCb2R5bWFrZVJlY29yZENvbnRhaW5lcmdldFN0YXRpY1R5cGVQcm92aWRlcktlcm5lbFRvVHlwZUluZmVyZW5jZU1hcEtlcm5lbFRvTG9jYWxzTWFwTWVtYmVyS2luZC5yZWd1bGFyTWVtYmVyS2luZC5jb25zdHJ1Y3Rvck1lbWJlcktpbmQuY29uc3RydWN0b3JCb2R5TWVtYmVyS2luZC5jbG9zdXJlQ2FsbE1lbWJlcktpbmQuY2xvc3VyZUZpZWxkTWVtYmVyS2luZC5zaWduYXR1cmVNZW1iZXJLaW5kLmdlbmVyYXRvckJvZHlyZWd1bGFyY29uc3RydWN0b3JCb2R5Y2xvc3VyZUZpZWxkZ2VuZXJhdG9yQm9keU1lbWJlckRlZmluaXRpb25VbmV4cGVjdGVkIE1lbWJlcktpbmQgQ2xhc3NLaW5kQ2xhc3NLaW5kLnJlZ3VsYXJDbGFzc0tpbmQuY2xvc3VyZUNsYXNzS2luZC5yZWNvcmRSZWd1bGFyTWVtYmVyRGVmaW5pdGlvbnJlZ3VsYXItbWVtYmVyLWRlZmluaXRpb25SZWd1bGFyTWVtYmVyRGVmaW5pdGlvbihraW5kOm5vZGU6LGxvY2F0aW9uOlNwZWNpYWxNZW1iZXJEZWZpbml0aW9uc3BlY2lhbC1tZW1iZXItZGVmaW5pdGlvblNwZWNpYWxNZW1iZXJEZWZpbml0aW9uKGtpbmQ6Q2xhc3NEZWZpbml0aW9uVW5leHBlY3RlZCBDbGFzc0tpbmQgUmVndWxhckNsYXNzRGVmaW5pdGlvbnJlZ3VsYXItY2xhc3MtZGVmaW5pdGlvblJlZ3VsYXJDbGFzc0RlZmluaXRpb24oa2luZDpnZXRGdW5jdGlvbk5vZGVmb3JFYWNoT3JkZXJlZFBhcmFtZXRlckJ5RnVuY3Rpb25Ob2RldXNlTmF0aXZlT3JkZXJpbmdmb3JFYWNoT3JkZXJlZFBhcmFtZXRlclVuZXhwZWN0ZWQgZnVuY3Rpb24gZGVmaW5pdGlvbiBJbmZlcnJlckVuZ2luZWNvbmNyZXRlVHlwZXNhbmFseXplTGlzdEFuZEVucXVldWVhbmFseXplU2V0QW5kRW5xdWV1ZWFuYWx5emVNYXBBbmRFbnF1ZXVlYWRkUmV0dXJuVHlwZUZvck1ldGhvZHVudXNlZGZvckVhY2hFbGVtZW50TWF0Y2hpbmdnZXREZWZhdWx0VHlwZU9mUGFyYW1ldGVyaGFzQWxyZWFkeUNvbXB1dGVkVHlwZU9mUGFyYW1ldGVyRGVmYXVsdHNldERlZmF1bHRUeXBlT2ZQYXJhbWV0ZXJjaGVja0lmRXhwb3Nlc1RoaXNyZWNvcmRFeHBvc2VzVGhpc2V4cG9zZXNUaGlzcmVjb3JkUmV0dXJuVHlwZXJlY29yZFR5cGVPZkZpZWxkcmVnaXN0ZXJBd2FpdHJlZ2lzdGVyWWllbGRyZWdpc3RlckNhbGxlZENsb3N1cmVpbkxvb3ByZWdpc3RlckNhbGxlZE1lbWJlcmNhbGxlZXJlZ2lzdGVyQ2FsbGVkU2VsZWN0b3Jpc0NvbmRpdGlvbmFsdXBkYXRlUGFyYW1ldGVyQXNzaWdubWVudHNhZGRUb1F1ZXVldXBkYXRlU2VsZWN0b3JJbk1lbWJlcnJldHVyblR5cGVPZk1lbWJlcnR5cGVPZk1lbWJlcnR5cGVPZlBhcmFtZXRlcnR5cGVPZk5hdGl2ZUJlaGF2aW9yY2FuRmllbGRCZVVzZWRGb3JHbG9iYWxPcHRpbWl6YXRpb25zY2FuRnVuY3Rpb25QYXJhbWV0ZXJzQmVVc2VkRm9yR2xvYmFsT3B0aW1pemF0aW9uc0luZmVycmVyRW5naW5lSW1wbGRlZmF1bHRUeXBlT2ZQYXJhbWV0ZXJhbmFseXplZEVsZW1lbnRzTUFYX0NIQU5HRV9DT1VOVG92ZXJhbGxSZWZpbmVDb3VudGFkZGVkSW5HcmFwaGdlbmVyYXRpdmVDb25zdHJ1Y3RvcnNFeHBvc2luZ1RoaXN1cGRhdGVTaWRlRWZmZWN0c3NldEFsbFNpZGVFZmZlY3RzQW5kRGVwZW5kc09uU29tZXRoaW5nbWFwcGVkVHlwZWNvbXB1dGVMVUJDYWxsVHlwZS5hY2Nlc3NzZXRUeXBlTWFza0NhbGxUeXBlLmZvckluc2V0SXRlcmF0b3JUeXBlTWFza3NldEN1cnJlbnRUeXBlTWFza3NldE1vdmVOZXh0VHlwZU1hc2thbmFseXplZHN1Y2NlZWRlZGJhaWxlZE91dG9yaWdpbmFsVHlwZWNhbGxzR3Jvd2FibGVNZXRob2Rhc3NpZ25tZW50c2FkZEFzc2lnbm1lbnRrZXlBc3NpZ25tZW50c2FkZEVudHJ5QXNzaWdubWVudHZhbHVlQXNzaWdubWVudHNtYXBBc3NpZ25tZW50c2FkZE1hcEFzc2lnbm1lbnRtYXJrQXNJbmZlcnJlZHR5cGVJbmZvTWFwYW5hbHl6ZUFsbEVsZW1lbnRzYmVmb3JlQW5hbHlzaXNidWlsZFdvcmtRdWV1ZXJlZmluZWFsbG9jYXRlZFNldHNhbGxvY2F0ZWRNYXBzYmFpbGVkT3V0T25hbGxvY2F0ZWRDbG9zdXJlc2NvbnRpbnVlQW5hbHl6aW5ndHJhY2VkIGNsb3N1cmUgIChiYWlsKWdpdmVVcGNsZWFyQXNzaWdubWVudHNtYXliZVJlc3VtZXRyYWNlZFR5cGVtaWdodEJlUGFzc2VkVG9GdW5jdGlvbkFwcGx5Y2FsbGVkRWxlbWVudGxvb2t1cENhbGxNZXRob2RjYWxsZWVzVW5leHBlY3RlZCBjbG9zdXJlIGFsbG9jYXRpb24gaW5mbyBiZWZvcmVUcmFjaW5nc2VlblR5cGVzX2luZm9hdCBhZnRlciByZWZpbmVDb3VudGdldEluZmVycmVkU2lnbmF0dXJlaGFzQ2xvc3VyZUNhbGxUYXJnZXRzPENsb3N1cmUuY2FsbD5jb25jcmV0ZVRhcmdldHNnZXRJbmZlcnJlZFNpZ25hdHVyZU9mTWV0aG9kIGZvciBzb21lIHVua25vd24ga2luZCBvZiBjbG9zdXJlIDo6IGFmdGVyQW5hbHlzaXNJbmZlcnJlZCAgdHlwZXMucHJvY2Vzc0xvb3BJbmZvcm1hdGlvbkFkZGVkICBlbGVtZW50cyBpbiBpbmZlcmVuY2luZyBncmFwaC53aXRoTWVtYmVyY29tcHV0ZU1lbWJlckJvZHlVbmV4cGVjdGVkIG1lbWJlciBkZWZpbml0aW9uOiBjb21wdXRlTWVtYmVyVHlwZUluZm9ybWF0aW9uZnVuY3Rpb25Db25zdGFudGFsbG9jYXRlQ2xvc3VyZXJlZmluZWRUeXBlYWxsb2NhdGVkVHlwZXNpc0ZpZWxkSW5pdGlhbGl6ZXJQb3RlbnRpYWxseU51bGxoYXNDYWxsVHlwZWFsbG9jYXRlZENhbGxzYWJhbmRvbkluZmVyZW5jaW5nQU5PTUFMWSBXQVJOSU5HOiBtYXggcmVmaW5lbWVudCByZWFjaGVkIGZvciBoYXNTdGFibGVUeXBlc3RhYmlsaXplb3JkZXJlZFR5cGVJbmZvcm1hdGlvbnNyZW1vdmVBc3NpZ25tZW50Y2xvc3VyaXplZENvdW50dGFnQXNUZWFyT2ZmQ2xvc3VyZVBhcmFtZXRlck5vIGRlZmF1bHQgdHlwZSBmb3IgYWRkVXNlcnNPZmFkZFRvR3JhcGhtZW1iZXJUeXBlSW5mb3JtYXRpb25zcGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uc2NhbGxlcnNGb3JUZXN0aW5naXNGaWVsZFVzZWRCeUJhY2tlbmRpc0Z1bmN0aW9uVXNlZEJ5QmFja2VuZEtlcm5lbFR5cGVTeXN0ZW1TdHJhdGVneWNoZWNrQ2xhc3NFbnRpdHljaGVja01hcE5vZGVjaGVja1NldE5vZGVjaGVja0xpc3ROb2RlY2hlY2tMb29wUGhpTm9kZWNoZWNrUGhpTm9kZWNyZWF0ZVBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbmdldENsb3N1cmVJbmZvbWVtYmVyVHlwZUluZm9ybWF0aW9uY3JlYXRlTWVtYmVyVHlwZUluZm9ybWF0aW9uS2VybmVsR2xvYmFsVHlwZUluZmVyZW5jZUVsZW1lbnREYXRhZ2xvYmFsLXR5cGUtaW5mZXJlbmNlLWVsZW1lbnQtZGF0YV9zZW5kTWFwX2l0ZXJhdG9yTWFwX2N1cnJlbnRNYXBfbW92ZU5leHRNYXBzZW5kTWFwaXRlcmF0b3JNYXBjdXJyZW50TWFwbW92ZU5leHRNYXBfbWFwc1RvTnVsbGRhcnQyanMuc291cmNlX2luZm9ybWF0aW9uLnBvc2l0aW9uUG9zaXRpb25Tb3VyY2VJbmZvcm1hdGlvbnNvdXJjZS1pbmZvcm1hdGlvbl9jb21wdXRlVGV4dHVyaVRleHQtW0Fic3RyYWN0UG9zaXRpb25Tb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5U291cmNlTWFwcGVkTWFya2VyQ29kZVBvc2l0aW9uZ2V0UG9zaXRpb25Db2RlUG9zaXRpb25LaW5kLlNUQVJUQ29kZVBvc2l0aW9uS2luZC5FTkRDb2RlUG9zaXRpb25LaW5kLkNMT1NJTkdDb2RlUG9zaXRpb24oc3RhcnQ9ZW5kPSxjbG9zaW5nPUNvZGVQb3NpdGlvbk1hcENvZGVQb3NpdGlvblJlY29yZGVyX2NvZGVQb3NpdGlvbk1hcHJlZ2lzdGVyUG9zaXRpb25zcmVnaXN0ZXJDb2RlUG9zaXRpb25jb2RlUG9zaXRpb25Tb3VyY2VQb3NpdGlvbktpbmRTb3VyY2VQb3NpdGlvbktpbmQuU1RBUlRTb3VyY2VQb3NpdGlvbktpbmQuSU5ORVJTVEFSVElOTkVSQ29kZVBvc2l0aW9uS2luZENMT1NJTkdFTkRQb3NpdGlvblNvdXJjZUluZm9ybWF0aW9uUHJvY2Vzc29ydjJjb2RlUG9zaXRpb25SZWNvcmRlcmNvZGVQb3NpdGlvbk1hcHRyYWNlTGlzdGVuZXJzaW5saW5pbmdMaXN0ZW5lcmNvdmVyYWdlc291cmNlTWFwcGVyY3JlYXRlU291cmNlTWFwcGVyTm9kZVNvdXJjZUluZm9ybWF0aW9uZ2V0U291cmNlSW5mb3JtYXRpb25Ob2RlVG9Tb3VyY2VJbmZvcm1hdGlvbk1peGluY29tcHV0ZVNvdXJjZUluZm9ybWF0aW9uX0lubGluaW5nVHJhY2VMaXN0ZW5lciZUcmFjZUxpc3RlbmVyJk5vZGVUb1NvdXJjZUluZm9ybWF0aW9uTWl4aW5JbmxpbmluZ1RyYWNlTGlzdGVuZXJfZnJhbWVzb25TdGVwU3RlcEtpbmQuRlVOX0VYSVRsYXN0SW5saW5pbmdDb250ZXh0bmV3SW5saW5pbmdDb250ZXh0cG9wQ291bnRwdXNoZXNyZWdpc3RlclBvcHJlZ2lzdGVyUHVzaF9Qb3NpdGlvblRyYWNlTGlzdGVuZXImVHJhY2VMaXN0ZW5lciZOb2RlVG9Tb3VyY2VJbmZvcm1hdGlvbk1peGluUG9zaXRpb25UcmFjZUxpc3RlbmVyU3RlcEtpbmQuTk9fSU5GT3JlZ2lzdGVyUG9zaXRpb25zb3VyY2VQb3NpdGlvbktpbmRTdGVwS2luZC5GVU5fRU5UUllTdGVwS2luZC5DQUxMY2FsbFBvc2l0aW9uU3RlcEtpbmQuQUNDRVNTU3RlcEtpbmQuTkVXU3RlcEtpbmQuUkVUVVJOU3RlcEtpbmQuQlJFQUtTdGVwS2luZC5DT05USU5VRVN0ZXBLaW5kLlRIUk9XU3RlcEtpbmQuRVhQUkVTU0lPTl9TVEFURU1FTlRTdGVwS2luZC5JRl9DT05ESVRJT05TdGVwS2luZC5GT1JfSU5JVElBTElaRVJTdGVwS2luZC5GT1JfQ09ORElUSU9OU3RlcEtpbmQuRk9SX1VQREFURVN0ZXBLaW5kLldISUxFX0NPTkRJVElPTlN0ZXBLaW5kLkRPX0NPTkRJVElPTlN0ZXBLaW5kLlNXSVRDSF9FWFBSRVNTSU9OQ2FsbFBvc2l0aW9uY29kZVBvc2l0aW9uS2luZGdldFNlbWFudGljUG9zaXRpb25Gb3JDYWxscHVyZUFjY2Vzc3RhcmdldEFjY2Vzc1VuZXhwZWN0ZWQgcHJvcGVydHkgYWNjZXNzIE9mZnNldHN0YXRlbWVudE9mZnNldHN1YmV4cHJlc3Npb25PZmZzZXRsZWZ0VG9SaWdodE9mZnNldE9mZnNldFtzdGF0ZW1lbnRPZmZzZXQ9bGVmdFRvUmlnaHRPZmZzZXQ9c3ViZXhwcmVzc2lvbk9mZnNldD1CcmFuY2hLaW5kQnJhbmNoS2luZC5DT05ESVRJT05CcmFuY2hLaW5kLkxPT1BCcmFuY2hLaW5kLkNBVENIQnJhbmNoS2luZC5GSU5BTExZQnJhbmNoS2luZC5DQVNFQ09ORElUSU9OTE9PUFN0ZXBLaW5kRlVOX0VOVFJZRlVOX0VYSVRBQ0NFU1NFWFBSRVNTSU9OX1NUQVRFTUVOVElGX0NPTkRJVElPTkZPUl9JTklUSUFMSVpFUkZPUl9DT05ESVRJT05GT1JfVVBEQVRFV0hJTEVfQ09ORElUSU9ORE9fQ09ORElUSU9OU1dJVENIX0VYUFJFU1NJT05OT19JTkZPVHJhY2VMaXN0ZW5lcm9uU3RhcnRvbkVuZHB1c2hCcmFuY2hwb3BCcmFuY2hKYXZhU2NyaXB0VHJhY2VyY29kZVBvc2l0aW9uc2xpc3RlbmVyc29mZnNldFBvc2l0aW9uYWN0aXZlbm90aWZ5U3RhcnRub3RpZnlFbmRub3RpZnlQdXNoQnJhbmNobm90aWZ5UG9wQnJhbmNobm90aWZ5U3RlcGdldFN5bnRheE9mZnNldGdldE9mZnNldEZvck5vZGVicmFuY2hub2RlTGlzdF9oYW5kbGVGdW5jdGlvbmFjdGl2ZUJlZm9yZWVudHJ5T2Zmc2V0ZXhpdE9mZnNldHZpc2l0U3ViZXhwcmVzc2lvbmNvZGVPZmZzZXRvbGRTdGVwc29sZFBvc2l0aW9ucG9zaXRpb25Ob2RlY2FsbE9mZnNldENvdmVyYWdlX25vZGVzV2l0aEluZm9fbm9kZXNXaXRoSW5mb0NvdW50X25vZGVzV2l0aG91dEluZm9fbm9kZXNXaXRob3V0SW5mb0NvdW50X25vZGVzV2l0aG91dEluZm9Db3VudEJ5VHlwZV9ub2Rlc1dpdGhvdXRPZmZzZXRfbm9kZXNXaXRob3V0T2Zmc2V0Q291bnRyZWdpc3Rlck5vZGVXaXRoSW5mb3JlZ2lzdGVyTm9kZVdpdGhvdXRJbmZvcmVnaXN0ZXJOb2Rlc1dpdGhvdXRPZmZzZXRjb2xsYXBzZWdldENvdmVyYWdlUmVwb3J0JSkgbm9kZXMgd2l0aCBpbmZvLk5vIG5vZGVzLiBub2RlIHdpdGhvdXQgb2Zmc2V0LgpOb2RlcyB3aXRob3V0IGluZm8gKCkgYnkgcnVudGltZSB0eXBlOl9Db3ZlcmFnZUxpc3RlbmVyJlRyYWNlTGlzdGVuZXImTm9kZVRvU291cmNlSW5mb3JtYXRpb25NaXhpbkNvdmVyYWdlTGlzdGVuZXJDb2RlUG9zaXRpb25Db3ZlcmFnZWdldFNvdXJjZUxvY2F0aW9uZGFydDJqcy5qc19tb2RlbC5lbGVtZW50c0NsYXNzSGllcmFyY2h5Tm9kZXNNYXBLZXlKTGlicmFyeUpDbGFzc0tpbmRKQ2xhc3NLaW5kLm5vZGVKQ2xhc3NLaW5kLmNsb3N1cmVKQ2xhc3NLaW5kLnJlY29yZF9KQ2xhc3MmSW5kZXhlZENsYXNzJkNsYXNzSGllcmFyY2h5Tm9kZXNNYXBLZXlfY2xhc3NIaWVyYXJjaHlOb2RlSkNsYXNzSlR5cGVkZWZKTWVtYmVyS2luZEpNZW1iZXJLaW5kLmdlbmVyYXRpdmVDb25zdHJ1Y3RvckpNZW1iZXJLaW5kLmZhY3RvcnlDb25zdHJ1Y3RvckpNZW1iZXJLaW5kLmNvbnN0cnVjdG9yQm9keUpNZW1iZXJLaW5kLmZpZWxkSk1lbWJlcktpbmQuZ2V0dGVySk1lbWJlcktpbmQuc2V0dGVySk1lbWJlcktpbmQubWV0aG9kSk1lbWJlcktpbmQuY2xvc3VyZUZpZWxkSk1lbWJlcktpbmQuY2xvc3VyZUNhbGxNZXRob2RKTWVtYmVyS2luZC5nZW5lcmF0b3JCb2R5Sk1lbWJlcktpbmQuc2lnbmF0dXJlTWV0aG9kSk1lbWJlcktpbmQucmVjb3JkRmllbGRnZW5lcmF0aXZlQ29uc3RydWN0b3JmYWN0b3J5Q29uc3RydWN0b3JjbG9zdXJlQ2FsbE1ldGhvZHNpZ25hdHVyZU1ldGhvZHJlY29yZEZpZWxkSk1lbWJlclVuZXhwZWN0ZWQgSk1lbWJlcktpbmQgSkZ1bmN0aW9uSkNvbnN0cnVjdG9ySkdlbmVyYXRpdmVDb25zdHJ1Y3RvcmdlbmVyYXRpdmUtY29uc3RydWN0b3JKRmFjdG9yeUNvbnN0cnVjdG9yZmFjdG9yeS1jb25zdHJ1Y3RvckpDb25zdHJ1Y3RvckJvZHljb25zdHJ1Y3Rvci1ib2R5Y29uc3RydWN0b3JfYm9keUpNZXRob2RnZW5lcmF0b3ItYm9keWdlbmVyYXRvcl9ib2R5SkdldHRlckpTZXR0ZXJjbG9zdXJlLWNhbGwtbWV0aG9kY2xvc3VyZV9jYWxsSlNpZ25hdHVyZU1ldGhvZHNpZ25hdHVyZS1tZXRob2RKVHlwZVZhcmlhYmxlS2luZEpUeXBlVmFyaWFibGVLaW5kLmNsc0pUeXBlVmFyaWFibGVLaW5kLm1lbWJlckpUeXBlVmFyaWFibGVLaW5kLnR5cGVkZWZKVHlwZVZhcmlhYmxlS2luZC5sb2NhbEpUeXBlVmFyaWFibGV0eXBlLXZhcmlhYmxlVW5leHBlY3RlZCB0eXBlIHZhcmlhYmxlIGRlY2xhcmVyIGpzRWxlbWVudFByZWZpeEhUcmFjZXJUcmFjZXJ0cmFjZUFjdGl2ZXRyYWNlRmlsdGVyY2ZnaXNFbmFibGVkdHJhY2VDb21waWxhdGlvbmNvbXBpbGF0aW9ucHJpbnRQcm9wZXJ0eW1pbGxpc2Vjb25kc1NpbmNlRXBvY2h0cmFjZUdyYXBoaXJPYmplY3RUcmFjZXJVdGlsX2luZHRhZ05hbWViZWdpbl9lbmRfYWRkSW5kZW50cHJpbnRFbXB0eVByb3BlcnR5Zm9ybWF0UHJ0eWludmFsaWQgcHJvcGVydHkgdHlwZTogVFJBQ0VfRklMVEVSX1BBVFRFUk5fRlJPTV9FTlZJUk9OTUVOVFRSQUNFX0ZJTFRFUl9QQVRURVJOX0ZPUl9URVNUVFJBQ0VfRklMVEVSX1BBVFRFUk5Tc2FDb2RlR2VuZXJhdG9yQ2hlY2tlZE1vZGVIZWxwZXJnZXRTdGF0aWNVc2VnZW5lcmF0ZUFkZGl0aW9uYWxBcmd1bWVudHNQcm9wZXJ0eUNoZWNrZWRNb2RlSGVscGVyYWRkaXRpb25hbEFyZ3VtZW50cXVvdGVOYW1lVHlwZVZhcmlhYmxlQ2hlY2tlZE1vZGVIZWxwZXJGdW5jdGlvblR5cGVSZXByZXNlbnRhdGlvbkNoZWNrZWRNb2RlSGVscGVyRnV0dXJlT3JSZXByZXNlbnRhdGlvbkNoZWNrZWRNb2RlSGVscGVyU3VidHlwZUNoZWNrZWRNb2RlSGVscGVyQ2hlY2tlZE1vZGVIZWxwZXJzaGVscGVyc3N0cmluZ1R5cGVDYXN0c3RyaW5nVHlwZUNoZWNrZG91YmxlVHlwZUNhc3Rkb3VibGVUeXBlQ2hlY2tudW1UeXBlQ2FzdG51bVR5cGVDaGVja2Jvb2xUeXBlQ2FzdGJvb2xUeXBlQ2hlY2tpbnRUeXBlQ2FzdGludFR5cGVDaGVja251bWJlck9yU3RyaW5nU3VwZXJOYXRpdmVUeXBlQ2FzdG51bWJlck9yU3RyaW5nU3VwZXJOYXRpdmVUeXBlQ2hlY2tudW1iZXJPclN0cmluZ1N1cGVyVHlwZUNhc3RudW1iZXJPclN0cmluZ1N1cGVyVHlwZUNoZWNrc3RyaW5nU3VwZXJOYXRpdmVUeXBlQ2FzdHN0cmluZ1N1cGVyTmF0aXZlVHlwZUNoZWNrc3RyaW5nU3VwZXJUeXBlQ2FzdHN0cmluZ1N1cGVyVHlwZUNoZWNrbGlzdFR5cGVDYXN0bGlzdFR5cGVDaGVja2xpc3RTdXBlck5hdGl2ZVR5cGVDYXN0bGlzdFN1cGVyTmF0aXZlVHlwZUNoZWNrbGlzdFN1cGVyVHlwZUNhc3RsaXN0U3VwZXJUeXBlQ2hlY2tpbnRlcmNlcHRlZFR5cGVDYXN0aW50ZXJjZXB0ZWRUeXBlQ2hlY2twcm9wZXJ0eVR5cGVDYXN0cHJvcGVydHlUeXBlQ2hlY2tmdW5jdGlvblR5cGVDYXN0ZnVuY3Rpb25UeXBlQ2hlY2tmdXR1cmVPckNhc3RmdXR1cmVPckNoZWNrY2hlY2tlZE1vZGVIZWxwZXJCeU5hbWVnZXRDaGVja2VkTW9kZUhlbHBlcnR5cGVDYXN0Z2V0Q2hlY2tlZE1vZGVIZWxwZXJJbnRlcm5hbG5hdGl2ZUNoZWNrT25seWdldE5hdGl2ZUNoZWNrZWRNb2RlSGVscGVyZ2V0Q2hlY2tlZE1vZGVIZWxwZXJOYW1lSW50ZXJuYWxVbmV4cGVjdGVkIHR5cGU6IG5hdGl2ZUNoZWNrVHlwZUNhc3RUeXBlQ2hlY2tudW1iZXJPclN0cmluZ1N1cGVyTmF0aXZlbnVtYmVyT3JTdHJpbmdTdXBlcnN0cmluZ1N1cGVyTmF0aXZlc3RyaW5nU3VwZXJsaXN0U3VwZXJOYXRpdmVsaXN0U3VwZXJqc19iYWNrZW5kLnJ1bnRpbWVfdHlwZXNPblZhcmlhYmxlQ2FsbGJhY2tTaG91bGRFbmNvZGVUeXBlZGVmQ2FsbGJhY2tSdW50aW1lVHlwZXNDaGVja3NyZXF1aXJlZENoZWNrc1RyaXZpYWxUeXBlc0NoZWNrc190eXBlQ2hlY2tzX2FsbENsYXNzZXNSdW50aW1lVHlwZXNDaGVja3NCdWlsZGVyY29tcHV0ZVJlcXVpcmVkQ2hlY2tzVHJpdmlhbFJ1bnRpbWVUeXBlc0NoZWNrc0J1aWxkZXJfc3Vic3RpdHV0aW9uc2NsYXNzVXNlTWFwY2xhc3NVc2VkaXJlY3RJbnN0YW5jZWNoZWNrZWRJbnN0YW5jZWNoZWNrZWRUeXBlQXJndW1lbnRfcmVxdWlyZWRDaGVja3NfY29tcHV0ZUNoZWNrc2NvbXB1dGVDaGVja2VkQ2xhc3Nlc2ltcGxpY2l0SXNDaGVja3Njb21wdXRlQ2hlY2tlZEZ1bmN0aW9uc1J1bnRpbWVUeXBlc1N1YnN0aXR1dGlvbnNNaXhpbl90eXBlc19ydGlOZWVkaGFuZGxlZGVtcHR5VXNlY29tcHV0ZUNoZWNrc2NoZWNrc3N1cGVyQ2hlY2tzZXh0ZW5kc1N1cGVyQ2xhc3NUcml2aWFsbHlpc1RyaXZpYWxTdWJzdGl0dXRpb25jb21wdXRlU3Vic3RpdHV0aW9ubmVlZHNJc2luaGVyaXRlZENsYXNzZXNwcm9jZXNzU3VwZXJ0eXBlY2hlY2tlZENsYXNzY2hlY2tlZENsYXNzVXNlaW5oZXJpdHNGcm9tQ2hlY2tlZENsYXNzbmVlZHNUeXBlQXJndW1lbnRzRm9yQ2hlY2tlZENsYXNzY2xhc3NOZWVkc1R5cGVBcmd1bWVudHNpc0NoZWNrZWRpbXBsZW1lbnRzQ2hlY2tlZFRyaXZpYWxseWlzQ2hlY2tlZEdlbmVyaWNjaGVja0Zyb21TdXBlckNsYXNzZ2V0Q2xhc3Nlc1VzZWRJblN1YnN0aXR1dGlvbnNpbnN0YW50aWF0ZWRjbGFzc0NoZWNrc2NvbGxlY3RBbGxnZXRTdWJzdGl0dXRpb25hbHdheXNHZW5lcmF0ZUZ1bmN0aW9uVHJpdmlhbFJ1bnRpbWVUeXBlc1N1YnN0aXR1dGlvbnNSdW50aW1lVHlwZXNFbmNvZGVyZ2V0U2lnbmF0dXJlRW5jb2Rpbmd0aGlzX3RlbXBsYXRlRm9ySXNGdW5jdGlvblR5cGV0ZW1wbGF0ZUZvcklzRnV0dXJlT3JUeXBldGVtcGxhdGVGb3JJc1ZvaWRUeXBldGVtcGxhdGVGb3JJc0R5bmFtaWNUeXBldGVtcGxhdGVGb3JJc0pzSW50ZXJvcFR5cGVBcmd1bWVudG9uVmFyaWFibGVzaG91bGRFbmNvZGVUeXBlZGVmZ2V0SnNJbnRlcm9wVHlwZUFyZ3VtZW50c19SdW50aW1lVHlwZXNDaGVja3NfdHlwZUxpdGVyYWxzX1J1bnRpbWVUeXBlc0ltcGwmT2JqZWN0JlJ1bnRpbWVUeXBlc1N1YnN0aXR1dGlvbnNNaXhpblJ1bnRpbWVUeXBlc0ltcGxjaGVja2VkVHlwZUFyZ3VtZW50c2NoZWNrZWRCb3VuZHNjYWNoZWRSZXF1aXJlZENoZWNrc2NsYXNzVXNlTWFwRm9yVGVzdGluZ3R5cGVWYXJpYWJsZVRlc3RzZm9yUnRpTmVlZHNleHBsaWNpdElzQ2hlY2tzY2hlY2tlZEZ1bmN0aW9uVHlwZXN0eXBlTGl0ZXJhbHNsaXZlVHlwZVZpc2l0b3JvbkNsYXNzVHlwZVZpc2l0b3JTdGF0ZS5jb3ZhcmlhbnRUeXBlQXJndW1lbnRUeXBlVmlzaXRvclN0YXRlLmNvbnRyYXZhcmlhbnRUeXBlQXJndW1lbnRUeXBlVmlzaXRvclN0YXRlLnR5cGVMaXRlcmFsVHlwZVZpc2l0b3JTdGF0ZS5kaXJlY3R0ZXN0ZWRUeXBlVmlzaXRvcnZpc2l0ZWRTdXBlckNsYXNzZXNwcm9jZXNzTWV0aG9kVHlwZUFyZ3VtZW50c2lzRnVuY3Rpb25DaGVja2VkcHJvY2Vzc0NoZWNrZWRUeXBlbGl2ZUNsYXNzZXNtZXRob2ROZWVkc1R5cGVBcmd1bWVudHNSdW50aW1lVHlwZXNFbmNvZGVySW1wbF9yZXByZXNlbnRhdGlvbkdlbmVyYXRvcmdldFR5cGVWYXJpYWJsZU5hbWVnZXRUeXBlRW5jb2RpbmdlbmNvZGluZ2Z1bmN0aW9uKCMpIHsgcmV0dXJuICMgfWNvbnRleHROYW1lZnVuY3Rpb24gKCkgeyByZXR1cm4gIygjLCAjLCAjKTsgfWZ1bmNyZXRvcHRUeXBlUmVwcmVzZW50YXRpb25HZW5lcmF0b3JfcnRpVGFnc3R5cGVkZWZCaW5kaW5nc2VuY29kZVR5cGVkZWZyZXByZXNlbnRhdGlvbmdldEphdmFTY3JpcHRDbGFzc05hbWVnZXREeW5hbWljVmFsdWVnZXRWb2lkVmFsdWUtMWdldEpzSW50ZXJvcFR5cGVBcmd1bWVudFZhbHVlLTJudW1iZXJleHByZXNzaW9uVGVtcGxhdGVGb3InIGluICMjID09PSAtMSMgPT0gbnVsbCMgPT09IC0yYWRkUHJvcGVydHlzaG91bGRFbmNvZGV1bmFsaWFzZWRUeXBlb2xkQmluZGluZ3NlbmNvZGVkVHlwZWRlZlR5cGVDaGVja01hcHBpbmdob2xkZXJBcmd1bWVudENvbGxlY3RvcmNvbGxlY3Rpc1R5cGVBcmd1bWVudEZ1bmN0aW9uQXJndW1lbnRDb2xsZWN0b3JUeXBlVmlzaXRvclN0YXRlY292YXJpYW50VHlwZUFyZ3VtZW50Y29udHJhdmFyaWFudFR5cGVBcmd1bWVudFR5cGVWaXNpdG9yX3Zpc2l0ZWRGdW5jdGlvblR5cGVWYXJpYWJsZXNvblR5cGVWYXJpYWJsZW9uRnVuY3Rpb25UeXBlY292YXJpYW50QXJndW1lbnRVbmV4cGVjdGVkIFR5cGVWaXNpdG9yU3RhdGUgY29udHJhdmFyaWFudEFyZ3VtZW50cnRpVmFsdWVDbGFzc1VzZShfY29tcHV0ZUZ1bmN0aW9uVHlwZXNpZ25hdHVyZUZ1bmN0aW9uanNfYmFja2VuZC5ydW50aW1lX3R5cGVzX2NvZGVnZW5DbGFzc0Z1bmN0aW9uVHlwZV9uZXh0SGFzaFR5cGVDaGVjayhjbHM9LG5lZWRzSXM9LHN1YnN0aXR1dGlvbj1DbGFzc0NoZWNrc0NsYXNzQ2hlY2tzKFR5cGVDaGVja3N0cml2aWFsanNJbnRlcm9wU3Vic3RpdHV0aW9uKGlzVHJpdmlhbD1pc0Z1bmN0aW9uPSxpc0pzSW50ZXJvcD0sYXJndW1lbnRzPXBhcmFtZXRlcnM9UnVudGltZVR5cGVzU3Vic3RpdHV0aW9uc2hhc1R5cGVBcmd1bWVudHNqc19iYWNrZW5kLnJ1bnRpbWVfdHlwZXNfbmV3UmVjaXBlRW5jb2RpbmdlbmNvZGVSZWNpcGVlbnZpcm9ubWVudFN0cnVjdHVyZWVuY29kZVJlY2lwZVdpdGhWYXJpYWJsZXNSZXBsYWNlQnlBbnllbmNvZGVEaXJlY3RTdXBlcnR5cGVSZWNpcGVkZWNsYXJpbmdUeXBlc3VwZXJ0eXBlQXJndW1lbnRldmFsdWF0ZVJlY2lwZWVuY29kZVNpZ25hdHVyZV9ydGlTdWJzdGl0dXRpb25zaGFja1R5cGVWYXJpYWJsZXNUb0FueWNsYXNzVHlwZWluZGV4VHlwZVZhcmlhYmxlc09uRGVjbGFyaW5nQ2xhc3NSZWNpcGVFbmNvZGVySW1wbC5nZXRTaWduYXR1cmVFbmNvZGluZ19SZWNpcGVHZW5lcmF0b3JfZW5jb2Rlcl9lbnZpcm9ubWVudF9yZWNpcGVfY29kZXNfZmluaXNoRW5jb2RpbmdfZmx1c2hDb2Rlc19zdGFydEZ1bGxUeXBlRW52aXJvbm1lbnRSZWNpcGVfZW1pdENvZGVfZW1pdEludGVnZXJfZW1pdFN0cmluZ1VuZXNjYXBlZF9lbWl0TmFtZV9lbWl0RXh0ZW5zaW9uT3BfaW5kZXhJbnRvQ2xhc3NUeXBlVmFyaWFibGVzZW1pdE5hbWVkR3JvdXBfUnVsZXNldEVudHJ5X3RhcmdldFR5cGVfc3VwZXJ0eXBlc1J1bGVzZXRfZW50cmllc3RhcmdldFR5cGVSdWxlc2V0RW5jb2Rlcl9yZWNpcGVFbmNvZGVyX2xlZnRCcmFjZXN0cmluZ1BhcnRfcmlnaHRCcmFjZV9sZWZ0QnJhY2tldF9yaWdodEJyYWNrZXRfY29sb25fcXVvdGVfaXNPYmplY3RfcHJlcHJvY2Vzc0VudHJ5X3ByZXByb2Nlc3NSdWxlc2V0cnVsZXNldGVuY29kZVJ1bGVzZXRfZW5jb2RlUnVsZXNldGNvbmNhdGVuYXRlU3RyaW5nc2pvaW5MaXRlcmFsc19lbmNvZGVFbnRyeV9lbmNvZGVTdXBlcnR5cGVtYXBFbnRyeV9lbmNvZGVUeXBlVmFyaWFibGVfZW5jb2RlU3VwZXJ0eXBlQXJndW1lbnR1bml2ZXJzZS5zaWRlX2VmZmVjdHNzaWRlLWVmZmVjdHNGTEFHX0NIQU5HRVNfSU5ERVhGTEFHX0NIQU5HRVNfSU5TVEFOQ0VfUFJPUEVSVFlGTEFHX0NIQU5HRVNfU1RBVElDX1BST1BFUlRZRkxBR19DSEFOR0VTX0NPVU5URkxBR19ERVBFTkRTX09OX0lOREVYX1NUT1JFRkxBR19ERVBFTkRTX09OX0lOU1RBTkNFX1BST1BFUlRZX1NUT1JFRkxBR19ERVBFTkRTX09OX1NUQVRJQ19QUk9QRVJUWV9TVE9SRUZMQUdfREVQRU5EU19PTl9DT1VOVF9mbGFnc2Zyb21GbGFnc1NpZGVFZmZlY3RzLmhhc2hDb2RlX2dldEZsYWdfc2V0RmxhZ19jbGVhckZsYWdnZXRDaGFuZ2VzRmxhZ3NnZXREZXBlbmRzT25GbGFnc2RlcGVuZHNPblN0YXRpY1Byb3BlcnR5U3RvcmVjaGFuZ2VzU3RhdGljUHJvcGVydHlkZXBlbmRzT25JbmRleFN0b3JlY2hhbmdlc0luZGV4ZGVwZW5kc09uSW5zdGFuY2VQcm9wZXJ0eVN0b3JlY2hhbmdlc0luc3RhbmNlUHJvcGVydHljb21wdXRlRGVwZW5kc09uRmxhZ3NkZXBlbmRzT25kZXBlbmRzRmxhZ3NTaWRlRWZmZWN0cyhyZWFkcyBub3RoaW5nIGFueXRoaW5nIGluZGV4IGZpZWxkIHN0YXRpYzsgd3JpdGVzU2lkZUVmZmVjdHNCdWlsZGVyX21lbWJlcl9mcmVlX2RlcGVuZGluZ2ZyZWVTaWRlRWZmZWN0c0J1aWxkZXIobWVtYmVyPWZyZWU9c2lkZUVmZmVjdHM9ZGVwZW5kaW5nPWRhcnQyanMuc291cmNlX2luZm9ybWF0aW9uLmtlcm5lbEtlcm5lbFNvdXJjZUluZm9ybWF0aW9uQnVpbGRlcndpdGhDb250ZXh0X2dldFNvdXJjZUxvY2F0aW9uTm8gbG9jYXRpb24gZm91bmQgZm9yIF9idWlsZEZ1bmN0aW9uX2J1aWxkVHJlZU5vZGVfYnVpbGRGdW5jdGlvbkVuZF9idWlsZEZ1bmN0aW9uRXhpdF9idWlsZEJvZHlfYnVpbGRNZW1iZXJCb2R5X2J1aWxkTWVtYmVyRXhpdG5ld0NvbnRleHRLZXJuZWxTb3VyY2VMb2NhdGlvbmNvbXB1dGVLZXJuZWxFbGVtZW50TmFtZUZvclNvdXJjZU1hcHM8YW5vbnltb3VzIGZ1bmN0aW9uPi48YW5vbnltb3VzIGZ1bmN0aW9uPmVuY2xvc2luZ01lbWJlcmVuY2xvc2luZ01lbWJlck5hbWVqcy5zb3VyY2VfbWFwcGluZ0phdmFTY3JpcHRTb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5c291cmNlTWFwcGVyUHJvdmlkZXJTb3VyY2VJbmZvcm1hdGlvblJlYWRlckNvZGVQb3NpdGlvbkxpc3RlbmVyU291cmNlTWFwcGVyUHJvdmlkZXJTb3VyY2VNYXBwZXJQcm92aWRlckltcGxTb3VyY2VNYXBwZXJTb3VyY2VMb2NhdGlvbnNNYXBwZXJTb3VyY2VJbmZvcm1hdGlvblByb2Nlc3NvcmRhcnQyanMuanNfaGVscGVycy5pbXBhY3RCYWNrZW5kRmVhdHVyZUJhY2tlbmRGZWF0dXJlLm5lZWRUb0luaXRpYWxpemVJc29sYXRlQWZmaW5pdHlUYWdCYWNrZW5kRmVhdHVyZS5uZWVkVG9Jbml0aWFsaXplRGlzcGF0Y2hQcm9wZXJ0eW5lZWRUb0luaXRpYWxpemVJc29sYXRlQWZmaW5pdHlUYWduZWVkVG9Jbml0aWFsaXplRGlzcGF0Y2hQcm9wZXJ0eUJhY2tlbmRJbXBhY3RnbG9iYWxVc2VzZ2xvYmFsQ2xhc3Nlc290aGVySW1wYWN0c19mZWF0dXJlc2ZlYXR1cmVzY3JlYXRlSW1wYWN0d29ybGRJbXBhY3RCdWlsZGVyb3RoZXJJbXBhY3RCYWNrZW5kSW1wYWN0c19uZXdSdGlfZ2V0UnVudGltZVR5cGVBcmd1bWVudF9jb21wdXRlU2lnbmF0dXJlX21haW5XaXRoQXJndW1lbnRzX2FzeW5jQm9keV9zeW5jU3RhckJvZHlfYXN5bmNTdGFyQm9keV90eXBlVmFyaWFibGVCb3VuZENoZWNrX2Fic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uX2ZhbGxUaHJvdWdoRXJyb3JfYXNDaGVja190aHJvd05vU3VjaE1ldGhvZF9zdHJpbmdWYWx1ZXNfbnVtVmFsdWVzX2Jvb2xWYWx1ZXNfbnVsbFZhbHVlX2xpc3RWYWx1ZXNfdGhyb3dSdW50aW1lRXJyb3JfdGhyb3dVbnN1cHBvcnRlZEVycm9yX3N1cGVyTm9TdWNoTWV0aG9kX2NvbnN0YW50TWFwTGl0ZXJhbF9jb25zdGFudFNldExpdGVyYWxfc3ltYm9sQ29uc3RydWN0b3JfY29uc3RTeW1ib2xfYXNzZXJ0V2l0aG91dE1lc3NhZ2VfYXNzZXJ0V2l0aE1lc3NhZ2VfYXN5bmNGb3JJbl9zdHJpbmdJbnRlcnBvbGF0aW9uX3N0cmluZ0p1eHRhcG9zaXRpb25fY2F0Y2hTdGF0ZW1lbnRfdGhyb3dFeHByZXNzaW9uX2xhenlGaWVsZF90eXBlTGl0ZXJhbF9zdGFja1RyYWNlSW5DYXRjaF9zeW5jRm9ySW5fdHlwZVZhcmlhYmxlRXhwcmVzc2lvbl90eXBlQ2hlY2tfZ2VuZXJpY1R5cGVDaGVja19nZW5lcmljSXNDaGVja190eXBlVmFyaWFibGVUeXBlQ2hlY2tfZnVuY3Rpb25UeXBlQ2hlY2tfZnV0dXJlT3JUeXBlQ2hlY2tfbmF0aXZlVHlwZUNoZWNrX2Nsb3N1cmVfaW50ZXJjZXB0b3JVc2VfYWxsb3dJbnRlcm9wX251bUNsYXNzZXNfbGlzdE9yU3RyaW5nQ2xhc3Nlc19uYXRpdmVPckV4dGVuZHNDbGFzc19saXN0Q2xhc3Nlc19qc0luZGV4aW5nQmVoYXZpb3JfdHJhY2VIZWxwZXJfYXNzZXJ0VW5yZWFjaGFibGVfcnVudGltZVR5cGVTdXBwb3J0X2RlZmVycmVkTG9hZGluZ19ub1N1Y2hNZXRob2RTdXBwb3J0X2xvYWRMaWJyYXJ5X21lbWJlckNsb3N1cmVfc3RhdGljQ2xvc3VyZV90eXBlVmFyaWFibGVNaXJyb3JfZ2VuZXJpY0luc3RhbnRpYXRpb25fcnRpQWRkUnVsZXNuZXdSdGlJbXBhY3RzbGlzdFZhbHVlc21haW5XaXRoQXJndW1lbnRzYXN5bmNCb2R5c3luY1N0YXJCb2R5YXN5bmNTdGFyQm9keXR5cGVWYXJpYWJsZUJvdW5kQ2hlY2thYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbl9uZWVkc1N0cmluZ05lZWRlZCB0byBlbmNvZGUgdGhlIG1lc3NhZ2UuX25lZWRzTGlzdE5lZWRlZCB0byBlbmNvZGUgdGhlIGFyZ3VtZW50cyBmb3IgdGhyb3cgTm9TdWNoTWV0aG9kRXJyb3IuTmVlZGVkIHRvIGVuY29kZSB0aGUgbmFtZSBmb3IgdGhyb3cgTm9TdWNoTWV0aG9kRXJyb3Iuc3RyaW5nVmFsdWVzbnVtVmFsdWVzaW50VmFsdWVzZG91YmxlVmFsdWVzYm9vbFZhbHVlc3N1cGVyTm9TdWNoTWV0aG9kX25lZWRzSW50TmVlZGVkIHRvIGVuY29kZSB0aGUgaW52b2NhdGlvbiBraW5kIG9mIHN1cGVyLm5vU3VjaE1ldGhvZC5OZWVkZWQgdG8gZW5jb2RlIHRoZSBhcmd1bWVudHMgb2Ygc3VwZXIubm9TdWNoTWV0aG9kLk5lZWRlZCB0byBlbmNvZGUgdGhlIG5hbWUgb2Ygc3VwZXIubm9TdWNoTWV0aG9kLmNvbnN0YW50TWFwTGl0ZXJhbGNvbnN0YW50U2V0TGl0ZXJhbHN5bWJvbENvbnN0cnVjdG9yY29uc3RTeW1ib2xhc3NlcnRXaXRob3V0TWVzc2FnZWFzc2VydFdpdGhNZXNzYWdlYXN5bmNGb3JJbnN0cmluZ0ludGVycG9sYXRpb25TdHJpbmdzIGFyZSBjcmVhdGVkLnN0cmluZ0p1eHRhcG9zaXRpb25TdHJpbmcuY29uY2F0IGlzIHVzZWQubnVsbExpdGVyYWxib29sTGl0ZXJhbGludExpdGVyYWxkb3VibGVMaXRlcmFsc3RyaW5nTGl0ZXJhbGNhdGNoU3RhdGVtZW50bGF6eUZpZWxkc3RhY2tUcmFjZUluQ2F0Y2hzeW5jRm9ySW50eXBlVmFyaWFibGVFeHByZXNzaW9uTmVlZGVkIGZvciBhY2Nlc3NpbmcgYSB0eXBlIHZhcmlhYmxlIGxpdGVyYWwgb24gdGhpcy5nZW5lcmljVHlwZUNoZWNrZ2VuZXJpY0lzQ2hlY2t0eXBlVmFyaWFibGVUeXBlQ2hlY2tmdXR1cmVPclR5cGVDaGVja25hdGl2ZVR5cGVDaGVja2ludGVyY2VwdG9yVXNlbnVtQ2xhc3Nlc2xpc3RPclN0cmluZ0NsYXNzZXNuYXRpdmVPckV4dGVuZHNDbGFzc2xpc3RDbGFzc2VzanNJbmRleGluZ0JlaGF2aW9ycnVudGltZVR5cGVTdXBwb3J0ZGVmZXJyZWRMb2FkaW5nbm9TdWNoTWV0aG9kU3VwcG9ydG1lbWJlckNsb3N1cmV0eXBlVmFyaWFibGVNaXJyb3JnZXRHZW5lcmljSW5zdGFudGlhdGlvbnJ0aUFkZFJ1bGVzTmVlZGVkIHRvIGVuY29kZSB0aGUgbmV3IFJUSSBydWxlc2V0LmpzX2JhY2tlbmQuYmFja2VuZC5jb2RlZ2VuX2xpc3RlbmVyQ29kZWdlbkVucXVldWVyTGlzdGVuZXJfaW1wYWN0c19iYWNrZW5kVXNhZ2VfY3VzdG9tRWxlbWVudHNBbmFseXNpc19uYXRpdmVFbnF1ZXVlcl9pc05vU3VjaE1ldGhvZFVzZWRfaXNOZXdSdGlVc2VkbWV0aG9kTmVlZHNTaWduYXR1cmVfcmVnaXN0ZXJDb21wdXRlU2lnbmF0dXJlb25JbnN0YW50aWF0ZWRUeXBlX2NvbXB1dGVNYWluSW1wYWN0cHJvY2Vzc05hdGl2ZUNsYXNzZXNuZXdSdGlJbXBhY3RfY29tcHV0ZUltcGFjdEZvckNvbXBpbGVUaW1lQ29uc3RhbnRfY29tcHV0ZUltcGFjdEZvckNvbXBpbGVUaW1lQ29uc3RhbnRJbnRlcm5hbF9jb21wdXRlSW1wYWN0Rm9ySW5zdGFudGlhdGVkQ29uc3RhbnRUeXBlcmVnaXN0ZXJUeXBlQ29uc3RhbnRfcHJvY2Vzc0NsYXNzQ3VzdG9tRWxlbWVudHNBbmFseXNpc0Jhc2VkZW1hbmRlZEN1c3RvbUVsZW1lbnRzUmVzb2x1dGlvbkFuYWx5c2lzYmFja2VuZFVzYWdlQnVpbGRlcmFsbENsYXNzZXNTZWxlY3RlZHJlZ2lzdGVyVHlwZUxpdGVyYWxzZWxlY3RlZENsYXNzZXNDdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpc25lZWRzVGFibGVuZWVkc0NsYXNzYWN0aXZlQ2xhc3Nlc2NvbXB1dGVFc2NhcGluZ0NvbnN0cnVjdG9yc0N1c3RvbUVsZW1lbnRzQW5hbHlzaXNKb2luZm9yUmVzb2x1dGlvbm5ld0FjdGl2ZUNsYXNzZXNlc2NhcGluZ0NvbnN0cnVjdG9yc3JlZ2lzdGVyR2xvYmFsRnVuY3Rpb25EZXBlbmRlbmN5X21ha2VUeXBlQ29uc3RhbnRqc19iYWNrZW5kLmJhY2tlbmQuaW1wYWN0X3RyYW5zZm9ybWVySW1wYWN0VHJhbnNmb3JtZXJSZXNvbHV0aW9uSW1wYWN0SmF2YVNjcmlwdEltcGFjdFRyYW5zZm9ybWVycHJvY2Vzc0JhY2tlbmRJbXBhY3RoYXNBc0Nhc3RoYXNUeXBlTGl0ZXJhbG9uSXNDaGVja3JlZ2lzdGVyQ2xhc3NVc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWxyZWdpc3Rlck1ldGhvZFVzaW5nVHlwZVZhcmlhYmxlTGl0ZXJhbHJlZ2lzdGVyTG9jYWxGdW5jdGlvblVzaW5nVHlwZVZhcmlhYmxlTGl0ZXJhbG1hcExpdGVyYWxVc2VtYXBMaXRlcmFsc3NldExpdGVyYWxVc2VsaXN0TGl0ZXJhbFVzZWxpc3RMaXRlcmFsc3J1bnRpbWVUeXBlVXNlcnVudGltZVR5cGVVc2VzcmVnaXN0ZXJSdW50aW1lVHlwZVVzZWNvbnN0U3ltYm9sTmFtZXNjb25zdGFudExpdGVyYWxzVW5leHBlY3RlZCBjb25zdGFudCBsaXRlcmFsOiBjbGFzc0VudGl0eXNlZW5DbGFzc2VzQ29kZWdlbkltcGFjdFRyYW5zZm9ybWVyb25Jc0NoZWNrRm9yQ29kZWdlbmhhc0luc3RhbnRpYXRlZE5hdGl2ZUNsYXNzZXNqc19iYWNrZW5kLmludGVyY2VwdG9yX2RhdGFpc0ludGVyY2VwdGVkTWV0aG9kZmllbGRIYXNJbnRlcmNlcHRlZEdldHRlcmZpZWxkSGFzSW50ZXJjZXB0ZWRTZXR0ZXJpc0ludGVyY2VwdGVkTmFtZWlzSW50ZXJjZXB0ZWRTZWxlY3RvcmlzSW50ZXJjZXB0ZWRNaXhpblNlbGVjdG9yaXNNaXhlZEludG9JbnRlcmNlcHRlZENsYXNzZ2V0SW50ZXJjZXB0ZWRDbGFzc2VzT25tYXlHZW5lcmF0ZUluc3RhbmNlb2ZDaGVja2FkZEludGVyY2VwdG9yc2FkZEludGVyY2VwdG9yc0Zvck5hdGl2ZUNsYXNzTWVtYmVyc0ludGVyY2VwdG9yRGF0YUltcGxpbnRlcmNlcHRvci1kYXRhaW50ZXJjZXB0ZWRNZW1iZXJzY2xhc3Nlc01peGVkSW50b0ludGVyY2VwdGVkQ2xhc3Nlc19pbnRlcmNlcHRlZE1peGluRWxlbWVudHNfaW50ZXJjZXB0ZWRDbGFzc2VzQ2FjaGVfbm9DbGFzc2VzaW50ZXJjZXB0ZWRNZW1iZXJzQ291bnRfaXNDb21waWxlVGltZU9ubHlDbGFzc25hdGl2ZVN1YmNsYXNzZXNuYXRpdmVTdWJjbGFzc2VzT2ZNaXhpbkludGVyY2VwdG9yRGF0YUJ1aWxkZXJJbXBsX2ludGVyY2VwdGVkRWxlbWVudHNfaW50ZXJjZXB0ZWRDbGFzc2VzX2NsYXNzZXNNaXhlZEludG9JbnRlcmNlcHRlZENsYXNzZXNfaW50ZXJjZXB0b3JEYXRhaW50ZXJjZXB0b3JzT25lU2hvdEludGVyY2VwdG9yT25lU2hvdEludGVyY2VwdG9yKHNlbGVjdG9yPSxrZXk9U3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvclNwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3Ioa2V5PWRhcnQyanMuanNfZW1pdHRlck5hdGl2ZUNsYXNzRmluZGVyTmF0aXZlRW5xdWV1ZXJjYXVzZU5hdGl2ZUVucXVldWVyQmFzZV9yZWdpc3RlcmVkQ2xhc3Nlc191bnVzZWRDbGFzc2VzX2FsbFVzZWRNZXNzYWdlZW5hYmxlTGl2ZVR5cGVBbmFseXNpc19yZWdpc3RlclR5cGVVc2VzX3Byb2Nlc3NOYXRpdmVCZWhhdmlvcnVudXNlZEJlZm9yZW1hdGNoaW5nQ2xhc3Nlc19maW5kVW51c2VkQ2xhc3Nlc01hdGNoaW5nbmF0aXZlQ2xhc3NuYXRpdmVUeXBlc3BlY1R5cGUgd2FzIF9vbkZpcnN0TmF0aXZlQ2xhc3NBbGwgbmF0aXZlIHR5cGVzIG1hcmtlZCBhcyB1c2VkIGR1ZSB0byBfZmluZE5hdGl2ZUV4Y2VwdGlvbnNFeGNlcHRpb25fbmF0aXZlQ2xhc3NGaW5kZXJfbmF0aXZlQ2xhc3Nlc25hdGl2ZUNsYXNzZXNGb3JUZXN0aW5ncmVnaXN0ZXJlZENsYXNzZXNGb3JUZXN0aW5nbmF0aXZlQ2xhc3Nlc2NvbXB1dGVOYXRpdmVDbGFzc2VzZm9yY2VkIG5hdGl2ZSBlbGVtZW50cyB1c2VkLCAgbmF0aXZlIGVsZW1lbnRzIGRlYWQuTmF0aXZlQ29kZWdlbkVucXVldWVyX2RvbmVBZGRTdWJ0eXBlc3dhcyByZXNvbHZlZF9hZGRTdWJ0eXBlc2RpcmVjdFN1YnR5cGVzIG5hdGl2ZSBjbGFzc2VzLCAgbmF0aXZlIGNsYXNzZXMgb21pdHRlZC5UYXJnZXRDaGVja3NTdGFja0ZyYW1lbGV0QmluZGluZ3N0eXBlSW5mZXJlbmNlTWFwc3RhdGljVHlwZVByb3ZpZGVyS2VybmVsU3NhR3JhcGhCdWlsZGVyX2luVHJ5U3RhdGVtZW50bG9jYWxzSGFuZGxlcmxvb3BEZXB0aGp1bXBUYXJnZXRzdGFyZ2V0RWxlbWVudF9pbml0aWFsVGFyZ2V0RWxlbWVudF9jbG9zdXJlRGF0YUxvb2t1cF90cmFjZXJfcnRpRW5jb2Rlcl9jdXJyZW50SW1wbGljaXRJbnN0YW50aWF0aW9uc19pbmZvUmVwb3J0ZXJfcmV0aHJvd2FibGVFeGNlcHRpb25fbG9vcEhhbmRsZXJfdHlwZUJ1aWxkZXJfaW5FeHByZXNzaW9uT2ZUaHJvd19pbmxpbmluZ1N0YWNrX3JldHVybkxvY2FsX3JldHVyblR5cGVfaW5MYXp5SW5pdGlhbGl6ZXJFeHByZXNzaW9uX2N1cnJlbnRGcmFtZWxhc3RPcGVuZWRCbG9ja19pc1JlYWNoYWJsZWxhc3RBZGRlZFBhcmFtZXRlcmVsaWRlZFBhcmFtZXRlcnNfZnVuY3Rpb25UeXBlUGFyYW1ldGVyTG9jYWxzX2VudGVyRnJhbWVfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyX2xvY2Fsc01hcF9sZXRCaW5kaW5nc190eXBlSW5mZXJlbmNlTWFwX2Fic3RyYWN0VmFsdWVEb21haW5faW5mZXJyZWREYXRhcHVzaENoZWNrTnVsbF9jbG9zZUFuZEdvdG9FeGl0aXNBYm9ydGVkb3Blbk5ld0Jsb2NrbmV3QmxvY2thZGRQYXJhbWV0ZXJ3cmFwU3RhdGVtZW50R3JhcGh3cmFwRXhwcmVzc2lvbkdyYXBoX2J1aWxkTGl0ZXJhbExpc3RfY2FsbFNldFJ1bnRpbWVUeXBlSW5mb1dpdGhUeXBlQXJndW1lbnRzcnRpSW5wdXRzbmV3T2JqZWN0X2NhbGxTZXRSdW50aW1lVHlwZUluZm9faGFuZGxlSW5UcnlTdGF0ZW1lbnRfZ2V0RmxhZ1ZhbHVlZmxhZ05hbWVNSU5JRklFRE1VU1RfUkVUQUlOX01FVEFEQVRBVVNFX0NPTlRFTlRfU0VDVVJJVFlfUE9MSUNZVVNFX05FV19SVElfZ2V0U3RhdGljVHlwZV9nZXRTdGF0aWNGb3JJbkl0ZXJhdG9yVHlwZWdldEZvckluSXRlcmF0b3JUeXBlX2VmZmVjdGl2ZVRhcmdldEVsZW1lbnRGb3JjYWxsU291cmNlSW5mb3JtYXRpb25fbGVhdmVGcmFtZV9idWlsZEV4dGVybmFsRnVuY3Rpb25Ob2RlX2Vuc3VyZURlZmF1bHRBcmd1bWVudFZhbHVlc19idWlsZEZ1bmN0aW9uTm9kZV9idWlsZEZpZWxkTm8gY2FzZSBpbXBsZW1lbnRlZCB0byBoYW5kbGUgdGFyZ2V0OiBfYnVpbGRDb25zdHJ1Y3Rvcl9idWlsZENvbnN0cnVjdG9yQm9keW9yaWdpbmFsQ2xvc3VyZU5vZGVVbmV4cGVjdGVkIGZ1bmN0aW9uIHNpZ25hdHVyZTogIGluc2lkZSBhIG5vbi1jbG9zdXJlOiBfYnVpbGRNZXRob2RTaWduYXR1cmVOZXdSdGlfYnVpbGRNZXRob2RTaWduYXR1cmVfYnVpbGRHZW5lcmF0b3JCb2R5X2Z1bmN0aW9uTm9kZU9mSW52YWxpZCBncmFwaCBmb3IgIChib2R5KV9yZWdpc3RlckRlZmF1bHRWYWx1ZU5vIGNvbnN0YW50IGNvbXB1dGVkIGZvciBfb3BlbkZ1bmN0aW9ucmVhZFRoaXNwb3RlbnRpYWxseUNoZWNrT3JUcnVzdFR5cGVPZlBhcmFtZXRlcl9nZXREYXJ0VHlwZUlmVmFsaWRmaWVsZFZhbHVlY2hlY2tJbnN0cnVjdGlvbnBvdGVudGlhbGx5Q2hlY2tPclRydXN0VHlwZU9mQXNzaWdubWVudF9jbG9zZUZ1bmN0aW9ucG9wQm9vbGlmaWVkcG90ZW50aWFsbHlDaGVja09yVHJ1c3RUeXBlT2ZDb25kaXRpb25fYWRkQ2xhc3NUeXBlVmFyaWFibGVzSWZOZWVkZWRuZWVkc1R5cGVBcmd1bWVudHNfdHlwZVZhcmlhYmxldHlwZVZhcmlhYmxlVHlwZWdldFR5cGVWYXJpYWJsZUFzTG9jYWxkaXJlY3RMb2NhbHNfYWRkRnVuY3Rpb25UeXBlVmFyaWFibGVzSWZOZWVkZWRlbGlkZVR5cGVQYXJhbWV0ZXJzX2NvbXB1dGVUeXBlQXJndW1lbnREZWZhdWx0VmFsdWVjb25zdHJ1Y3RvckRhdGFfYnVpbGRJbml0aWFsaXplcnNjb25zdHJ1Y3RvckFyZ3VtZW50c2lzQ3VzdG9tRWxlbWVudE5vIGluaXRpYWxpemVyIHZhbHVlIGZvciBmaWVsZCBzdWJzdEluQ29udGV4dF9hZGRJbXBsaWNpdEluc3RhbnRpYXRpb25hbmFseXplVHlwZUFyZ3VtZW50TmV3UnRpX3JlbW92ZUltcGxpY2l0SW5zdGFudGlhdGlvbmNvbnN0cnVjdG9yQ2hhaW5ib2R5Q2FsbElucHV0c2lubGluZWRDb25zdHJ1Y3Rvcl9pbmxpbmVkRnJvbWlzQm94ZWRzY29wZURhdGFnZXRDYXB0dXJlZFNjb3BlcmVxdWlyZXNDb250ZXh0Qm94aW5saW5lZENvbnN0cnVjdG9yQ2xhc3NhbmFseXplVHlwZUFyZ3VtZW50X3RyeUlubGluZU1ldGhvZF9pbnZva2VDb25zdHJ1Y3RvckJvZHl1cGRhdGVMb2NhbF9pc0VtcHR5U3RhdGVtZW50aW5saW5lZFRhcmdldF9lbnN1cmVUeXBlVmFyaWFibGVzRm9ySW5pdGlhbGl6ZXJzaW5jbHVkZWRDbGFzc2VzX2NvbGxlY3RGaWVsZFZhbHVlc1VuZXhwZWN0ZWQgbWVtYmVyIGRlZmluaXRpb24gaWdub3JlQWxsb2NhdG9yQW5hbHlzaXNfaXNSZWRpcmVjdGluZ0NvbnN0cnVjdG9yYnV0IGZvdW5kIGZvdW5kU3VwZXJPclJlZGlyZWN0Q2FsbF9pbmxpbmVTdXBlckluaXRpYWxpemVyX2lubGluZVJlZGlyZWN0aW5nSW5pdGlhbGl6ZXJpci5JbnZhbGlkSW5pdGlhbGl6ZXIgbm90IGhhbmRsZWRVbmhhbmRsZWQgaW5pdGlhbGl6ZXIgaXIuQWxsIGNvbnN0cnVjdG9ycyBzaG91bGQgaGF2ZSBzdXBlci0gb3IgcmVkaXJlY3RpbmctIGluaXRpYWxpemVycywgZXhjZXB0IE9iamVjdCgpX25vcm1hbGl6ZUFuZEJ1aWxkQXJndW1lbnRzYnVpbHRBcmd1bWVudHNwb3NpdGlvbmFsSW5kZXhjb3JyZXNwb25kaW5nTmFtZWRzdXBlck9yUmVkaXJlY3RDb25zdHJ1Y3Rvcl9pbmxpbmVTdXBlck9yUmVkaXJlY3RDb21tb25jYWxsZXJDbGFzc29sZFNjb3BlSW5mb3Njb3BlSW5mb25ld1Njb3BlSW5mb19idWlsZEdlbmVyYXRvcl9jaGVja3NGb3JGdW5jdGlvbl9oYW5kbGVJZnZpc2l0Q29uZGl0aW9udmlzaXRUaGVudmlzaXRFbHNlZW1wdHlQYXJhbWV0ZXJzX2FkZENvbW1lbnQgaW5mZXJyZWQgYXMgW2VtcHR5XXN0YXRlbWVudFRlbXBsYXRlWWllbGRpbmdfZ2VuZXJhdGVkRW50cnlJc0VtcHR5X3BvdGVudGlhbGx5QWRkRnVuY3Rpb25QYXJhbWV0ZXJUeXBlQ2hlY2tzdGFyZ2V0Q2hlY2tzY2hlY2tUeXBlUGFyYW1ldGVyc19jaGVja1R5cGVWYXJpYWJsZUJvdW5kc25vZGVJc0NvbnN0cnVjdG9yQm9keV9oYW5kbGVQYXJhbWV0ZXJpc0JveGVkVmFyaWFibGVObyBpbml0aWFsIGluc3RydWN0aW9uIGZvciBjaGVja0FsbFBhcmFtZXRlcnNjaGVja0NvdmFyaWFudFBhcmFtZXRlcnN0cnVzdFR5cGVPZlBhcmFtZXRlcl9hc3NlcnRJc1R5cGVUaGUgdHlwZSBhcmd1bWVudCAnJyBpcyBub3QgYSBzdWJ0eXBlIG9mIHRoZSB0eXBlIHZhcmlhYmxlIGJvdW5kICcnIG9mIHR5cGUgdmFyaWFibGUgJ25hdGl2ZU5hbWV0ZW1wbGF0ZVJlY2VpdmVydGVtcGxhdGVBcmd1bWVudHMjLl9wdXNoU3RhdGljSW52b2NhdGlvbiA9IHVuY2FjaGVkRXhwcmVzc2lvblRlbXBsYXRlcGFyYW1ldGVyTWFwZWxpZGVkUGFyYW1ldGVyU2V0aXNHZW5lcmF0aXZlQ29uc3RydWN0b3JCb2R5X2RlZmF1bHRWYWx1ZUZvclBhcmFtZXRlcl9pbnNlcnRDb3ZlcmFnZUNhbGxjaGVja0xvYWRsb2FkSWRwcmVmaXhDb25zdGFudHVyaUNvbnN0YW50Tm9uLWVtcHR5IGluc3RydWN0aW9uIHN0YWNrLk5vbi1lbXB0eSBpbnN0cnVjdGlvbiBzdGFja192aXNpdFRocm93RXhwcmVzc2lvbmRlZmVycmVkQ29uc3RhbnRfZW1pdFJldHVybmJ1aWxkSW5pdGlhbGl6ZXJidWlsZENvbmRpdGlvbmJ1aWxkVXBkYXRlanVtcFRhcmdldGhhbmRsZUxvb3BnZXRDYXB0dXJlZExvb3BTY29wZV9idWlsZEFzeW5jRm9ySW5fYnVpbGRGb3JJbkluZGV4YWJsZV9idWlsZEZvckluSXRlcmF0b3JjcmVhdGVMb2NhbF9paXNGaXhlZG9yaWdpbmFsTGVuZ3RoYnVpbGRHZXRMZW5ndGhidWlsZENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvckNoZWNrbG9vcFZhcmlhYmxlTG9jYWxvbmVhZGRJbnN0cnVjdGlvbl9wdXNoRHluYW1pY0ludm9jYXRpb25zdGF0aWNJbnN0YW5jZVR5cGVfYWRkVHlwZUFyZ3VtZW50c3RyeUJ1aWxkZXJmaW5hbGl6ZXJGdW5jdGlvbmNsb3NlVHJ5Qm9keWJ1aWxkRmluYWxseUJsb2NrY2xlYW5VcHR5cGVJbmZvU2V0dGVyRm5VbmV4cGVjdGVkIGBzdGFjay5sYXN0YDogRm91bmQgZXhwZWN0ZWQgIG9yIGFuIEhJbnZva2VTdGF0aWMuIFN0YXRlOiB0eXBlSW5mbz0sIHN0YWNrPXNhdmVkTG9jYWxzbG9vcENsb3N1cmVJbmZvc3RhcnRMb29wanVtcEhhbmRsZXJiZWdpbkxvb3BIZWFkZXJsb29wSW5mb2xvb3BFbnRyeUJsb2NrYm9keUVudHJ5QmxvY2toYXNDb250aW51ZXNlbnRlckxvb3BCb2R5Ym9keUV4aXRCbG9ja2lzQWJvcnRpbmdCb2R5bG9vcElzRGVnZW5lcmF0ZWNvbmRpdGlvbkJsb2NrY29udGludWVIYW5kbGVyc2ZvckVhY2hDb250aW51ZWxvY2Fsc21lcmdlTXVsdGlwbGVib2R5R3JhcGhib2R5SW5mb2NvbmRpdGlvbkluc3RydWN0aW9uY29uZGl0aW9uRW5kQmxvY2thdm9pZENyaXRpY2FsRWRnZWNvbmRpdGlvbkV4aXRCbG9ja2VuZExvb3Bsb29wQmxvY2tJbmZvaGFzQW55QnJlYWtmb3JFYWNoQnJlYWticmVha0luc3RydWN0aW9uYnJhbmNoQnVpbGRlcmhhbmRsZUlmZXhwcmVzc2lvbkluc3RydWN0aW9uX2dlbmVyYXRlVHlwZUVycm9yaW52YWxpZCB0eXBlcG9saWN5YnVpbGRUeXBlQ29udmVyc2lvbl9nZW5lcmF0ZUVycm9yZXJyb3JNZXNzYWdlX2dlbmVyYXRlVW5zdXBwb3J0ZWRFcnJvcmNyZWF0ZUp1bXBIYW5kbGVyaXNMb29wSnVtcGdlbmVyYXRlQ29udGludWVnZW5lcmF0ZUJyZWFrYmVmb3JlTG9jYWxzYnJlYWtIYW5kbGVyc19idWlsZFN3aXRjaENhc2VDb25zdGFudHNoYXNDb250aW51ZWNhc2VJbmRleHN3aXRjaEluZGV4aGFzRGVmYXVsdF9idWlsZFNpbXBsZVN3aXRjaFN0YXRlbWVudF9idWlsZENvbXBsZXhTd2l0Y2hTdGF0ZW1lbnRfaXNEZWZhdWx0Q2FzZV9idWlsZEV4cHJlc3Npb25fZ2V0U3dpdGNoQ29uc3RhbnRzcGFyZW50U3dpdGNoY29uc3RhbnRzTG9va3VwY29uc3RhbnRMaXN0X2hhbmRsZVN3aXRjaHN3aXRjaFRhcmdldGNhc2VTb3VyY2VJbmZvcm1hdGlvbm5vdFVzZWRnZXRDb25zdGFudHNpc0RlZmF1bHRDYXNlZXhwcmVzc2lvblN0YXJ0c3dpdGNoSW5zdHJ1Y3Rpb25leHByZXNzaW9uRW5kaENvbnN0YW50Y2FzZUhhbmRsZXJzQ29udGludWUgY2Fubm90IHRhcmdldCBhIHN3aXRjaC5leHByZXNzaW9uSW5mb2JyYW5jaGVyaGFuZGxlQ29uZGl0aW9uYWxfaGFuZGxlTG9naWNhbEV4cHJlc3Npb252aXNpdFJpZ2h0aW5uZXJMZWZ0aGFuZGxlTG9naWNhbEJpbmFyeV9zZXRMaXN0UnVudGltZVR5cGVJbmZvSWZOZWVkZWRhcnJheVR5cGVsaXN0SW5zdHJ1Y3Rpb25hcmdMaXN0dHlwZUlucHV0c3JldHVyblR5cGVNYXNrY29uc3RydWN0b3JBcmdzaXIuTWFwRW50cnkgc2hvdWxkIGJlIGhhbmRsZWQgaW4gdmlzaXRNYXBMaXRlcmFsVW5leHBlY3RlZCB0eXBlIGxpdGVyYWwgc3RhdGljVGFyZ2V0VW5leHBlY3RlZCBmaWVsZCBkYXRhIGZvciBsZXRCaW5kaW5naXIuRGlyZWN0UHJvcGVydHlTZXRpci5EaXJlY3RNZXRob2RJbnZvY2F0aW9uX2dlbmVyYXRlU3VwZXJOb1N1Y2hNZXRob2RfYnVpbGRJbnZva2VTdXBlcl92aXNpdExvY2FsU2V0dGVyaW5pdGlhbGl6ZWRWYWx1ZV92aXNpdFBvc2l0aW9uYWxBcmd1bWVudHNfdmlzaXRBcmd1bWVudHNGb3JEeW5hbWljVGFyZ2V0bmFtZWRWYWx1ZXNfdmlzaXRBcmd1bWVudHNGb3JOYXRpdmVTdGF0aWNUYXJnZXRfZmlsbER5bmFtaWNUeXBlQXJndW1lbnRzc2VsZWN0b3JOZWVkc1R5cGVBcmd1bWVudHNfZ2V0Q29uc3RydWN0b3JUeXBlQXJndW1lbnRzX2dldENsYXNzVHlwZUFyZ3VtZW50c19nZXRTdGF0aWNUeXBlQXJndW1lbnRzX3Zpc2l0QXJndW1lbnRzRm9yU3RhdGljVGFyZ2V0X2hhbmRsZUludm9rZVN0YXRpY0ZvcmVpZ25faGFuZGxlRXh0cmFjdFR5cGVBcmd1bWVudHNfaGFuZGxlSW52b2tlRmFjdG9yeUNvbnN0cnVjdG9yY2FuIG9ubHkgYmUgdXNlZCBhcyBhIGNvbnN0IGNvbnN0cnVjdG9yaXNGaXhlZExpc3Rpc0ZpeGVkTGlzdENvbnN0cnVjdG9yQ2FsbGlzR3Jvd2FibGVMaXN0Q29uc3RydWN0b3JDYWxsaXNKU0FycmF5VHlwZWRDb25zdHJ1Y3Rvcl9pbmZlcnJlZFR5cGVPZk5ld0xpc3RVbmV4cGVjdGVkIGFyZ3VtZW50cy4gRXhwZWN0ZWQgMS0yIGFyZ3VtZW50LCBhY3R1YWw6IGxlbmd0aElucHV0bmV3IEFycmF5KCMpZm9yZWlnbiMuZml4ZWQkbGVuZ3RoID0gQXJyYXluZXdJbnN0YW5jZXR5cGVWYWx1ZV9pbnRlcmNlcHRvckZvcnR5cGVFdmFscmVjZWl2ZXJTdGF0aWNUeXBlX2hhbmRsZUZvcmVpZ25Kc19oYW5kbGVGb3JlaWduRGFydENsb3N1cmVUb0pzUkFXX0RBUlRfRlVOQ1RJT05fUkVGX2hhbmRsZUZvcmVpZ25SYXdGdW5jdGlvblJlZkpTX1NFVF9TVEFUSUNfU1RBVEVfaGFuZGxlRm9yZWlnbkpzU2V0U3RhdGljU3RhdGVKU19HRVRfU1RBVElDX1NUQVRFX2hhbmRsZUZvcmVpZ25Kc0dldFN0YXRpY1N0YXRlSlNfR0VUX05BTUVfaGFuZGxlRm9yZWlnbkpzR2V0TmFtZV9oYW5kbGVGb3JlaWduSnNFbWJlZGRlZEdsb2JhbF9oYW5kbGVGb3JlaWduSnNCdWlsdGluSlNfR0VUX0ZMQUdfaGFuZGxlRm9yZWlnbkpzR2V0RmxhZ0pTX0VGRkVDVF9oYW5kbGVKc0ludGVyY2VwdG9yQ29uc3RhbnRnZXRJbnRlcmNlcHRvcl9oYW5kbGVGb3JlaWduR2V0SW50ZXJjZXB0b3JnZXRKU0FycmF5SW50ZXJvcFJ0aV9oYW5kbGVGb3JlaWduR2V0SlNBcnJheUludGVyb3BSdGlfaGFuZGxlSnNTdHJpbmdDb25jYXRfaGFuZGxlQ3JlYXRlSW52b2NhdGlvbk1pcnJvclVua25vd24gZm9yZWlnbjogbmFtZUxpdGVyYWx0eXBlQXJndW1lbnRzTGl0ZXJhbHBvc2l0aW9uYWxBcmd1bWVudHNMaXRlcmFsbmFtZWRBcmd1bWVudHNMaXRlcmFsa2luZExpdGVyYWxVbmV4cGVjdGVkIG5hbWVkIGFyZ3VtZW50cyB2YWx1ZSBpbiBjcmVhdGVJbnZvY2F0aW9uTWlycnJvcjogYXJndW1lbnRzSW5zdHJ1Y3Rpb25hcmd1bWVudE5hbWVzYXJndW1lbnROYW1lYXJndW1lbnROYW1lQ29uc3RhbnRhcmd1bWVudE5hbWVzSW5zdHJ1Y3Rpb25pbnRlcm5hbE5hbWVraW5kQ29uc3RhbnRfdW5leHBlY3RlZEZvcmVpZ25Bcmd1bWVudHNtaW5Qb3NpdGlvbmFsbWF4UG9zaXRpb25hbHBsdXJhbGl6ZUFyZ3VtZW50c2FkamVjdGl2ZW5vIG9uZSB0d28gYmFkdHlwZSBFcnJvcjogJycgdGFrZXMgLCBub3QgcGhyYXNlYXQgbGVhc3QgRXJyb3I6IFRvbyBmZXcgYXJndW1lbnRzLiAnYXQgbW9zdCBFcnJvcjogVG9vIG1hbnkgYXJndW1lbnRzLiAnJyBkb2VzIG5vdCB0YWtlIG5hbWVkIGFyZ3VtZW50cy5fZm9yZWlnbkNvbnN0YW50U3RyaW5nQXJndW1lbnRFcnJvcjogRXhwZWN0ZWQgU3RyaW5nIGNvbnN0YW50IGFzIGFyZ3VtZW50IHRvICdyZXF1aXJlcyBhIHN0YXRpYyBtZXRob2Qgb3IgdG9wLWxldmVsIG1ldGhvZGhhbmRsZVRhcmdldGV4cHJlc3Npb25UZW1wbGF0ZVlpZWxkaW5nZG9lcyBub3QgaGFuZGxlIGEgY2xvc3VyZSB3aXRoIG9wdGlvbmFsIHBhcmFtZXRlcnMgPSAjX2dldE5hbWVGb3JKc0dldE5hbWVFcnJvcjogRXhwZWN0ZWQgYSBKc0dldE5hbWUgZW51bSB2YWx1ZS5fZXh0cmFjdEVudW1JbmRleEZyb21Db25zdGFudFZhbHVlZ2xvYmFsTmFtZXNlY29uZCBObyBOYXRpdmVCZWhhdmlvciBmb3Igc3NhVHlwZW5hbWVBcmd1bWVudF9nZXRKc0J1aWx0aW5UZW1wbGF0ZUVycm9yOiBFeHBlY3RlZCBhIEpzQnVpbHRpbiBlbnVtIHZhbHVlLl90ZW1wbGF0ZUZvckJ1aWx0aW5Kc0J1aWx0aW4uZGFydE9iamVjdENvbnN0cnVjdG9ySnNCdWlsdGluLmRhcnRDbG9zdXJlQ29uc3RydWN0b3JKc0J1aWx0aW4uaXNDaGVja1Byb3BlcnR5VG9Kc0NvbnN0cnVjdG9yTmFtZUpzQnVpbHRpbi5pc0Z1bmN0aW9uVHlwZUpzQnVpbHRpbi5pc0Z1dHVyZU9yVHlwZUpzQnVpbHRpbi5pc1ZvaWRUeXBlSnNCdWlsdGluLmlzRHluYW1pY1R5cGVKc0J1aWx0aW4uaXNKc0ludGVyb3BUeXBlQXJndW1lbnRKc0J1aWx0aW4ucmF3UnRpVG9Kc0NvbnN0cnVjdG9yTmFtZUpzQnVpbHRpbi5yYXdSdW50aW1lVHlwZUpzQnVpbHRpbi5pc1N1YnR5cGVKc0J1aWx0aW4uaXNHaXZlblR5cGVSdGlKc0J1aWx0aW4uZ2V0TWV0YWRhdGFKc0J1aWx0aW4uZ2V0VHlwZWJ1aWx0aW5pc1ByZWZpeExlbmd0aCMuc3Vic3RyaW5nKCMubmFtZSMuY29uc3RydWN0b3Jpc1ByZWZpeCgnJyArICMpIGluICMucHJvdG90eXBlIy5uYW1lID09PSAjbWV0YWRhdGFBY2Nlc3NbI110eXBlc0FjY2Vzc1VuaGFuZGxlZCBCdWlsdGluOiBFcnJvcjogVW5rbm93biBpbnRlcm5hbCBmbGFnICJhcmd1bWVudEluc3RydWN0aW9uYXJndW1lbnRDb25zdGFudGludGVyb3BUeXBlTWlzbWF0Y2ggYmV0d2VlbiBudW1iZXIgb2YgcGxhY2Vob2xkZXJzIGFuZCBudW1iZXIgb2YgYXJndW1lbnRzLnRydXN0ZWRNYXNrdHJ1c3RUeXBlTWFza1R5cGUgYXJndW1lbnQgdG9vIG5hcnJvdyBmb3Igc3BlY2lmaWVkIGJlaGF2aW9yIHR5cGUgIGRvZXMgbm90IGFsbG93IGFsbCB2YWx1ZXMgaW4gX2ludm9rZUpzSW50ZXJvcEZ1bmN0aW9uc3RhdGljUmVjZWl2ZXJUeXBldHlwZUJvdW5kaXNPcHRpbWl6YWJsZU9wZXJhdGlvbk9uSW5kZXhhYmxlaXNMZW5ndGhpc09wdGltaXphYmxlT3BlcmF0aW9ucG9zaXRpb25zZmlsdGVyZWRBcmd1bWVudHNwYXJhbWV0ZXJOYW1lTWFwcGFyYW1ldGVyTmFtZSMgPSAjbmV3ICMoIyhjbG9zdXJlQ2xhc3NFbnRpdHljYXB0dXJlZFZhcmlhYmxlc2dldExvY2FsRm9yRmllbGRmdW5jRXhwcmVzc2lvbnR5cGVBcmd1bWVudHNOZWVkZWRpbnN0YW50aWF0aW9uTmVlZHNUeXBlQXJndW1lbnRzR2VuZXJpYyBmdW5jdGlvbiBpbnN0YW50aWF0aW9uIG5vdCBpbXBsZW1lbnRlZCBmb3IgIHR5cGUgYXJndW1lbnRzX2NvbnRhaW5pbmdDbGFzc3B1YmxpY05hbWV0YXJnZXREZWZpbml0aW9uc3VidHlwZUluc3RydWN0aW9uaW5maXhzdXBlcnR5cGVJbnN0cnVjdGlvbnByZWZpeEluc3RydWN0aW9uaW5maXhJbnN0cnVjdGlvbnN1ZmZpeEluc3RydWN0aW9udHlwZUluc3RydWN0aW9udmFyaWFibGVOYW1lYm91bmRJbnN0cnVjdGlvbnZhcmlhYmxlTmFtZUluc3RydWN0aW9uY2hlY2tCb3VuZF9wdXNoSXNUZXN0YWRkVHlwZVZhcmlhYmxlUmVmZXJlbmNlX2Nhbklnbm9yZVR5cGVBcmd1bWVudHNyZXByZXNlbnRhdGlvbnNidWlsZFR5cGVBcmd1bWVudFJlcHJlc2VudGF0aW9uc2lzRmllbGROYW1lYXNGaWVsZE5hbWVfaGFzRGlyZWN0Q2hlY2tGb3Jhd2FpdGVkcmV0aHJvd2FibGVFeGNlcHRpb24gc2hvdWxkIG5vdCBiZSBudWxsLnN0cmluZ0NvbmNhdHN0cmluZ0J1aWxkZXJ0cnlDYXRjaHByb3ZpZGVkQXJndW1lbnRzY3VycmVudE5vZGVjYWNoZWRDYW5CZUlubGluZWRtZWV0c0hhcmRDb25zdHJhaW50c01pc3Npbmcgc2VsZWN0b3IgZm9yIGlubGluaW5nIG9mIGRvZXNOb3RDb250YWluQ29kZWlubGluZURhdGFjYW5CZUlubGluZWRtYXhJbmxpbmluZ05vZGVzcmVkdWN0aXZlSGV1cmlzdGljX2lzQ2FsbGVkT25jZWNhbkJlSW5saW5lZFJlZHVjdGl2ZWhldXJpc3RpY1NheUdvb2RUb0dvZ2V0SW5saW5lRGF0YWNhbm5vdEJlSW5saW5lZFJlYXNvbmFsbG93TG9vcHNDYW5ub3QgaW5saW5lIG51bVBhcmFtZXRlcnNtYXJrZWRUcnlJbmxpbmVjYWxsZWRPbmNlX2lzRnVuY3Rpb25DYWxsZWRPbmNlZG9JbmxpbmluZ1VuZXhwZWN0ZWQgaW5zdGFuY2UgdHlwZSBmb3IgY29tcGlsZWRBcmd1bWVudHNfY29tcGxldGVDYWxsQXJndW1lbnRzTGlzdF9lbnRlcklubGluZWRNZXRob2RfZG9JbmxpbmVfbGVhdmVJbmxpbmVkTWV0aG9kX3Byb3ZpZGVkQXJndW1lbnRzS25vd25Ub0JlQ29tcGxldGVfY29tcGxldGVEeW5hbWljQ2FsbEFyZ3VtZW50c0xpc3RzZWxlY3RvckFyZ3VtZW50TmFtZXNjb21waWxlZEFyZ3VtZW50SW5kZXhwb3NpdGlvbmFsQXJndW1lbnRPZmZzZXRuYW1lZEFyZ3VtZW50T2Zmc2V0cG9zaXRpb25hbEFyZ3VtZW50SW5kZXhuYW1lZEFyZ3VtZW50SW5kZXhObyBjb25zdGFudCBjb21wdXRlZCBmb3IgcGFyYW1ldGVyIHR5cGVBcmd1bWVudE9mZnNldHR5cGVBcmd1bWVudEluZGV4X3NldHVwU3RhdGVGb3JJbmxpbmluZ2ZvckdlbmVyYXRpdmVDb25zdHJ1Y3RvckJvZHloYXNCb3hpbmxpbmVkQm94aW5saW5lVHlwZVBhcmFtZXRlcnNPbmx5IGFyZ3VtZW50cyBoYXZlIGJlZW4gcmVhZCBmcm9tOiAgcGFzc2VkIHRvIF9yZXN0b3JlU3RhdGVvbGRMb2NhbHNIYW5kbGVyb2xkUmV0dXJuTG9jYWxpblRyeVN0YXRlbWVudG9sZFJldHVyblR5cGVvbGRTdGFja192aXNpdElubGluZWRGdW5jdGlvbl9wb3RlbnRpYWxseUNoZWNrSW5saW5lZFBhcmFtZXRlclR5cGVzVW5leHBlY3RlZCBpbmxpbmVkIGZ1bmN0aW9uOiBjaGVja2VkT3JUcnVzdGVkX2FsbElubGluZWRGdW5jdGlvbnNDYWxsZWRPbmNlYWxsRnVuY3Rpb25zQ2FsbGVkT25jZWlkQ29uc3RhbnRDb25zdHJ1Y3RvckRhdGFLZXJuZWxJbmxpbmluZ1N0YXRlS2VybmVsSW5saW5pbmdTdGF0ZShhbGxGdW5jdGlvbnNDYWxsZWRPbmNlPVRyeUNhdGNoRmluYWxseUJ1aWxkZXJrZXJuZWxCdWlsZGVydHJ5U291cmNlSW5mb3JtYXRpb25lbnRlckJsb2Nrc3RhcnRUcnlCbG9ja2VuZFRyeUJsb2Nrc3RhcnRDYXRjaEJsb2NrZW5kQ2F0Y2hCbG9ja3N0YXJ0RmluYWxseUJsb2NrZW5kRmluYWxseUJsb2NrZXhpdEJsb2NrdHJ5SW5zdHJ1Y3Rpb25wcmV2aW91c2x5SW5UcnlTdGF0ZW1lbnRjYXRjaEdyYXBoZmluYWxseUdyYXBob3JpZ2luYWxTYXZlZExvY2Fsc19hZGRFeGl0VHJ5U3VjY2Vzc29yc3VjY2Vzc29yX2FkZE9wdGlvbmFsU3VjY2Vzc29yYmxvY2syX3NldEJsb2NrU3VjY2Vzc29yc2J1aWxkRmluYWxpemVyb2xkUmV0aHJvd2FibGVFeGNlcHRpb251bndyYXBwZWRFeGNlcHRpb25jYXRjaGVzSW5kZXhwdXNoQ29uZGl0aW9uZXhjZXB0aW9uVmFyaWFibGV0cmFjZUluc3RydWN0aW9udHJhY2VWYXJpYWJsZW5leHRDYXRjaGZpcnN0QmxvY2tLZXJuZWxUeXBlQnVpbGRlcmNvbXB1dGVUeXBlVmFyaWFibGVBY2Nlc3NfRXJyb25lb3VzSW5pdGlhbGl6ZXJWaXNpdG9yS2VybmVsU3dpdGNoQ2FzZUp1bXBIYW5kbGVydGFyZ2V0SW5kZXhNYXBTdGF0aWNUeXBlU3RhdGljVHlwZShJbmxpbmVEYXRhY29kZUFmdGVyUmV0dXJuaGFzTG9vcGhhc0Nsb3N1cmVoYXNUcnloYXNBc3luY0F3YWl0aGFzVGhyb3doYXNMb25nU3RyaW5naGFzRXh0ZXJuYWxDb25zdGFudENvbnN0cnVjdG9yQ2FsbGhhc0FyZ3VtZW50RGVmYXVsdGluZ2hhc0Nhc3RoYXNJZmFyZ3VtZW50Q291bnRzcmVndWxhck5vZGVDb3VudGNhbGxDb3VudHJlZHVjdGl2ZU5vZGVDb3VudGNvZGUgYWZ0ZXIgcmV0dXJuYXN5bmMvYXdhaXR0b28gbWFueSBub2RlcyAoY2Fubm90QmVJbmxpbmVkUmVkdWN0aXZlUmVhc29udG9vIG1hbnkgY2FsbHNsb25nIHN0cmluZ2V4dGVybmFsIGNvbnN0IGNvbnN0cnVjdG9ydHlwZSBhcmd1bWVudHNhcmd1bWVudCBkZWZhdWx0aW5naW5jcmVhc2luZyBhcmd1bWVudHNJbmxpbmVEYXRhKGFyZ3VtZW50Q291bnRzPXtyZWd1bGFyTm9kZUNvdW50PWNhbGxDb3VudD1yZWR1Y3RpdmVOb2RlQ291bnQ9SW5saW5lRGF0YUNhY2hlSW5saW5lV2VlZGVySU5MSU5JTkdfTk9ERVNfT1VUU0lERV9MT09QSU5MSU5JTkdfTk9ERVNfT1VUU0lERV9MT09QX0FSR19GQUNUT1JJTkxJTklOR19OT0RFU19JTlNJREVfTE9PUElOTElOSU5HX05PREVTX0lOU0lERV9MT09QX0FSR19GQUNUT1JzZWVuUmV0dXJuY291bnRSZWd1bGFyTm9kZWNvdW50UmVkdWN0aXZlTm9kZWNvbXB1dGVJbmxpbmVEYXRhc2tpcFJlZHVjdGl2ZU5vZGVzc2tpcFJlZ3VsYXJOb2Rlc29sZENvdW50UmVndWxhck5vZGVvbGRDb3VudFJlZHVjdGl2ZU5vZGVyZWdpc3RlclJlZ3VsYXJOb2RlcmVnaXN0ZXJSZWR1Y3RpdmVOb2RldW5yZWdpc3RlclJlZHVjdGl2ZU5vZGVfaGFuZGxlTG9vcGNvbW1vblByZWZpeENvdW50dGhlbkNvdW50ZWxzZUNvdW50cmVnaXN0ZXJDYWxsX3Byb2Nlc3NBcmd1bWVudHNBYnN0cmFjdFZhbHVlRmFjdG9yeWluZmVycmVkUmV0dXJuVHlwZUZvckVsZW1lbnRpbmZlcnJlZFR5cGVGb3JNZW1iZXJpbmZlcnJlZFR5cGVGb3JQYXJhbWV0ZXJpbmZlcnJlZFJlc3VsdFR5cGVGb3JTZWxlY3RvcmZyb21OYXRpdmVCZWhhdmlvcmZyb21OYXRpdmVUeXBlVW5leHBlY3RlZCBlbXB0eSByZXR1cm4gdmFsdWUgZm9yIEpzQ2xvc2VkV29ybGRCdWlsZGVyQ2xvc3VyZURhdGFJbXBsY2xvc3VyZS1kYXRhX3Njb3BlTWFwX2NhcHR1cmVkU2NvcGVzTWFwX2NhcHR1cmVkU2NvcGVGb3JTaWduYXR1cmVNYXBfbG9jYWxDbG9zdXJlUmVwcmVzZW50YXRpb25NYXBzY29wZU1hcGNhcHR1cmVkU2NvcGVzTWFwY2FwdHVyZWRTY29wZUZvclNpZ25hdHVyZU1hcGxvY2FsQ2xvc3VyZVJlcHJlc2VudGF0aW9uTWFwTWlzc2luZyBzY29wZSBpbmZvIGZvciBsb29wTm9kZUNvcnJlc3BvbmRpbmcgY2xvc3VyZSBjbGFzcyBub3QgZm91bmQgZm9yIENsb3N1cmVzIGZvdW5kIGZvciBDbG9zdXJlRGF0YUJ1aWxkZXJfdXBkYXRlU2NvcGVCYXNlZE9uUnRpTmVlZG91dGVybW9zdEVudGl0eWluY2x1ZGVGb3JSdGlWYXJpYWJsZVVzZUtpbmQuZXhwbGljaXRWYXJpYWJsZVVzZUtpbmQuaW1wbGljaXRDYXN0VmFyaWFibGVVc2VLaW5kLmxvY2FsVHlwZVZhcmlhYmxlVXNlS2luZC5jb25zdHJ1Y3RvclR5cGVBcmd1bWVudFZhcmlhYmxlVXNlS2luZC5zdGF0aWNUeXBlQXJndW1lbnRWYXJpYWJsZVVzZUtpbmQuaW5zdGFuY2VUeXBlQXJndW1lbnRWYXJpYWJsZVVzZUtpbmQubG9jYWxUeXBlQXJndW1lbnRsb2NhbEZ1bmN0aW9uTmVlZHNUeXBlQXJndW1lbnRzVmFyaWFibGVVc2VLaW5kLm1lbWJlclBhcmFtZXRlclZhcmlhYmxlVXNlS2luZC5sb2NhbFBhcmFtZXRlcmxvY2FsRnVuY3Rpb25OZWVkc1NpZ25hdHVyZVZhcmlhYmxlVXNlS2luZC5tZW1iZXJSZXR1cm5UeXBlVmFyaWFibGVVc2VLaW5kLmxvY2FsUmV0dXJuVHlwZVZhcmlhYmxlVXNlS2luZC5maWVsZFR5cGVWYXJpYWJsZVVzZUtpbmQubGlzdExpdGVyYWxWYXJpYWJsZVVzZUtpbmQuc2V0TGl0ZXJhbFZhcmlhYmxlVXNlS2luZC5tYXBMaXRlcmFsVmFyaWFibGVVc2VLaW5kLmluc3RhbnRpYXRpb25UeXBlQXJndW1lbnR0aGlzVXNlZEFzRnJlZVZhcmlhYmxlSWZOZWVkc1J0aXRoaXNVc2VkQXNGcmVlVmFyaWFibGVmcmVlVmFyaWFibGVzRm9yUnRpY3JlYXRlQ2xvc3VyZUVudGl0aWVzY2FsbE1ldGhvZHNtb2RlbGFsbEJveGVkVmFyaWFibGVzYm94ZWRWYXJpYWJsZXNjbG9zdXJlc1RvR2VuZXJhdGVjbG9zdXJlQ2xhc3NJbmZvX3Byb2R1Y2VTeW50aGV0aWNFbGVtZW50c2NyZWF0ZVNpZ25hdHVyZU1ldGhvZGNhcHR1cmVkU2NvcGVzaWduYXR1cmVDYXB0dXJlZFNjb3BlYnVpbGRDbG9zdXJlQ2xhc3NKc1Njb3BlSW5mb3Njb3BlLWluZm9sb2NhbHNVc2VkSW5UcnlPclN5bmNoYXNUaGlzTG9jYWxmb3JFYWNoQm94ZWRWYXJpYWJsZWxvY2FsSXNVc2VkSW5UcnlPclN5bmN0aGlzPWxvY2Fsc1VzZWRJblRyeU9yU3luYz17U2NvcGVJbmZvS2luZC5zY29wZUluZm9Kc0NhcHR1cmVkU2NvcGVjYXB0dXJlZC1zY29wZVNjb3BlSW5mb0tpbmQuY2FwdHVyZWRTY29wZUpzQ2FwdHVyZWRMb29wU2NvcGVjYXB0dXJlZC1sb29wLXNjb3BlYm94ZWRMb29wVmFyaWFibGVzaGFzQm94ZWRMb29wVmFyaWFibGVzU2NvcGVJbmZvS2luZC5jYXB0dXJlZExvb3BTY29wZUtlcm5lbENsb3N1cmVDbGFzc0luZm9jbG9zdXJlLXJlcHJlc2VudGF0aW9uLWluZm9jbG9zdXJlRW50aXR5bG9jYWxUb0ZpZWxkTWFwZnJvbVNjb3BlSW5mb2Nsb3N1cmVTb3VyY2VOb2RlU2NvcGVJbmZvS2luZC5jbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvY3JlYXRlZEZpZWxkRW50aXRpZXNObyBsb2NhbCBmb3IgLiBPcHRpb25zOiB0aGlzRmllbGRFbnRpdHlKQ2xvc3VyZUNsYXNzY2xvc3VyZS1jbGFzc2Nsb3N1cmVfY2xhc3MoQW5vbnltb3VzQ2xvc3VyZUxvY2FsYW5vbnltb3VzX2Nsb3N1cmVfbG9jYWwoSkNsb3N1cmVGaWVsZGNsb3N1cmUtZmllbGRSZWNvcmRDbGFzc0RhdGFyZWNvcmQtY2xhc3MtZGF0YW9yZGVyZWRUeXBlU2V0SkNsYXNzRGF0YUtpbmQucmVjb3JkSlJlY29yZHJlY29yZF9jb250YWluZXIocmVjb3JkLWZpZWxkQ2xvc3VyZUNsYXNzRGF0YWNsb3N1cmUtY2xhc3MtZGF0YUpDbGFzc0RhdGFLaW5kLmNsb3N1cmVDbG9zdXJlQ2xhc3NEZWZpbml0aW9uY2xvc3VyZS1jbGFzcy1kZWZpbml0aW9uQ2xvc3VyZUNsYXNzRGVmaW5pdGlvbi5ub2RlIGZvciBDbG9zdXJlQ2xhc3NEZWZpbml0aW9uKGtpbmQ6Q2xvc3VyZU1lbWJlckRhdGFtZW1iZXJUaGlzVHlwZXN0YXRpY1R5cGVzQ2xvc3VyZU1lbWJlckRhdGEuc3RhdGljVHlwZXNfQ2xvc3VyZUZ1bmN0aW9uRGF0YSZDbG9zdXJlTWVtYmVyRGF0YSZGdW5jdGlvbkRhdGFUeXBlVmFyaWFibGVzTWl4aW5fQ2xvc3VyZUZ1bmN0aW9uRGF0YSZDbG9zdXJlTWVtYmVyRGF0YSZGdW5jdGlvbkRhdGFUeXBlVmFyaWFibGVzTWl4aW4mRnVuY3Rpb25EYXRhRm9yRWFjaFBhcmFtZXRlck1peGluQ2xvc3VyZUZ1bmN0aW9uRGF0YWNsb3N1cmUtZnVuY3Rpb24tZGF0YWNsYXNzVHlwZVZhcmlhYmxlQWNjZXNzQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3Mubm9uZUNsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLnByb3BlcnR5Q2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MucGFyYW1ldGVyQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MuaW5zdGFuY2VGaWVsZEpNZW1iZXJEYXRhS2luZC5jbG9zdXJlRnVuY3Rpb25DbG9zdXJlRmllbGREYXRhY2xvc3VyZS1maWVsZC1kYXRhSk1lbWJlckRhdGFLaW5kLmNsb3N1cmVGaWVsZHNvdXJjZU5vZGVVbmV4cGVjdGVkIG5vZGUgdHlwZSBDbG9zdXJlRmllbGREYXRhLmdldEZpZWxkVHlwZWdldEZpZWxkQ29uc3RhbnRFeHByZXNzaW9uVW5leHBlY3RlZCBmaWVsZCBDbG9zdXJlRmllbGREYXRhLmdldEZpZWxkQ29uc3RhbnRFeHByZXNzaW9uQ2xvc3VyZU1lbWJlckRlZmluaXRpb25jbG9zdXJlLW1lbWJlci1kZWZpbml0aW9uQ2xvc3VyZU1lbWJlckRlZmluaXRpb24oa2luZDpSZWNvcmRDb250YWluZXJEZWZpbml0aW9ucmVjb3JkLWRlZmluaXRpb25SZWNvcmRDb250YWluZXJEZWZpbml0aW9uLm5vZGUgZm9yIFJlY29yZENvbnRhaW5lckRlZmluaXRpb24oa2luZDpDbG9zdXJlUnRpTmVlZF9nZXRMb2NhbE9ubHkga25vdyBob3cgdG8gZ2V0L2NyZWF0ZSBsb2NhbHMgZm9yIFZhcmlhYmxlRGVjbGFyYXRpb25zIG9yIFR5cGVQYXJhbWV0ZXJUeXBlV2l0aENvbnRleHQuIFJlY2lldmVkIEJveExvY2FsVGhpc0xvY2FsSnNLZXJuZWxUb0VsZW1lbnRNYXBqcy1rZXJuZWwtdG8tZWxlbWVudC1tYXBsaWJyYXJ5VGFnY2xhc3NUYWdtZW1iZXJUYWd0eXBlVmFyaWFibGVUYWd0eXBlLXZhcmlhYmxlc2xpYnJhcnlEYXRhVGFnbGlicmFyeS1kYXRhY2xhc3NEYXRhVGFnY2xhc3MtZGF0YXR5cGVkZWZEYXRhVGFndHlwZWRlZi1kYXRhbWVtYmVyRGF0YVRhZ21lbWJlci1kYXRhdHlwZVZhcmlhYmxlRGF0YVRhZ3R5cGUtdmFyaWFibGUtZGF0YW5lc3RlZENsb3N1cmVzVGFnbmVzdGVkLWNsb3N1cmVzX3R5cGVDb252ZXJ0ZXJfY29uc3RhbnRFbnZpcm9ubWVudF90eXBlRW52aXJvbm1lbnRfY2xhc3NIaWVyYXJjaHlfY29uc3RhbnRWYWx1ZWZpZXJ0eXBlZGVmTWFwdHlwZVZhcmlhYmxlTWFwY29uc3RydWN0b3JNYXBtZXRob2RNYXBfbmVzdGVkQ2xvc3VyZU1hcF9nZW5lcmF0b3JCb2RpZXNfaW5qZWN0ZWRDbGFzc01lbWJlcnNfY2FjaGVkVHlwZUxvb2t1cFJhd19jYWNoZWRUeXBlTG9va3VwRnVsbG9sZExpYnJhcnlnZXRFbnZuZXdMaWJyYXJ5bmV3RW52cmVnaXN0ZXJMaWJyYXJ5b2xkQ2xhc3NuZXdDbGFzc29sZFR5cGVkZWZuZXdUeXBlZGVmb2xkTWVtYmVyc2tpcEluZGV4bmV3TWVtYmVyTWVtYmVyIGluZGV4IG1pc21hdGNoOiBPbGQgbWVtYmVyICBoYXMgaW5kZXggd2hlcmVhcyBuZXcgbWVtYmVyIG9sZFR5cGVWYXJpYWJsZW9sZFR5cGVWYXJpYWJsZURhdGFuZXdUeXBlRGVjbGFyYXRpb25uZXdUeXBlVmFyaWFibGVjcmVhdGVUeXBlVmFyaWFibGVlbnZJc0Nsb3NlZHR5cGVkZWZDb3VudHJlZ2lzdGVyVHlwZWRlZnJlZ2lzdGVyTWVtYmVycmVnaXN0ZXJUeXBlVmFyaWFibGVmb3JFYWNoTGlicmFyeWZvckVhY2hUeXBlZGVmZm9yRWFjaE1lbWJlcl9fX21haW5GdW5jdGlvbmdldE1ldGhvZEludGVybmFsX21haW5MaWJyYXJ5Z2V0TGlicmFyeUludGVybmFsZnJvbVNwYW5uYWJsZU5vIGRhdGEgZm9yIGxpYnJhcnlFbnZfZ2V0TGlicmFyeU5hbWVjaGVja0ZhbWlseWxvb2t1cE1lbWJlcl9mb3JFYWNoTGlicmFyeU1lbWJlcmNsYXNzRW52Z2V0Q2xhc3NJbnRlcm5hbF9mb3JFYWNoQ2xhc3NnZXRTdXBlclR5cGVfZW5zdXJlU3VwZXJ0eXBlc19lbnN1cmVUaGlzQW5kUmF3VHlwZWdldFR5cGVWYXJpYWJsZUludGVybmFsZ2V0VHlwZVZhcmlhYmxlc3VwZXJkYXRhbGlua0J1aWxkZXJkZWZhdWx0U3VwZXJjbGFzc3NldEJ1aWxkZXJjcmVhdGVPcmRlcmVkVHlwZVNldGdldFR5cGVkZWZJbnRlcm5hbGdldEZpZWxkSW50ZXJuYWxnZXRDb25zdHJ1Y3RvckludGVybmFsTm8gZW5jbG9zaW5nIGNsYXNzIGZvciBzdXBlciBtZW1iZXIgYWNjZXNzIGluIHN1cGVyTWVtYmVyZ2V0U3VwZXJDb25zdHJ1Y3RvcnRhcmdldE5vZGVzb3VyY2VDbGFzc3RhcmdldENsYXNzU3VwZXIgY29uc3RydWN0b3IgZm9yICBub3QgZm91bmQuZ2V0UGFyYW1ldGVyVHlwZXNvcnRlZE5hbWVkUGFyYW1ldGVyc2NvbXB1dGVDb25zdGFudFZhbHVlX2dldENvbnN0YW50VmFsdWVjb25zdGFudFJlcXVpcmVkX2dldEZ1bmN0aW9uVHlwZVZhcmlhYmxlc19nZXRGaWVsZFR5cGVnZXRCb3VuZF9nZXRUeXBlVmFyaWFibGVEZWZhdWx0VHlwZWdldERlZmF1bHRUeXBlX2lzTWl4aW5BcHBsaWNhdGlvbl9pc1VubmFtZWRNaXhpbkFwcGxpY2F0aW9uX2lzU3VwZXJNaXhpbkFwcGxpY2F0aW9uX2ZvckVhY2hTdXBlcnR5cGVfZm9yRWFjaENvbnN0cnVjdG9yX2ZvckVhY2hMb2NhbENsYXNzTWVtYmVyX2ZvckVhY2hDbGFzc01lbWJlcl9nZXRDb25zdHJ1Y3RvckNvbnN0YW50X2dldEZpZWxkQ29uc3RhbnRFeHByZXNzaW9uZ2V0T3JkZXJlZFR5cGVTZXRtYXhEZXB0aGdldE1lbWJlckRlZmluaXRpb25JbnRlcm5hbGdldENsYXNzRGVmaW5pdGlvbkludGVybmFsbWVtYmVyRGVmaW5pdGlvbmNhY2hlZFN0YXRpY1R5cGVzTm8gc3RhdGljIHR5cGVzIGNhY2hlZCBmb3IgZ2V0R2V0dGVyU2VsZWN0b3JnZXRTZXR0ZXJTZWxlY3RvcmdldEludm9jYXRpb25TZWxlY3RvckNhbiBvbmx5IGdldCB0aGUgc2VsZWN0b3IgZm9yIGEgcHJvcGVydHkgZ2V0IG9yIGFuIGludm9jYXRpb246IGlyTmFtZXR5cGVMb29rdXByZXNvbHZlQXNSYXdfdHlwZUxvb2t1cGNhY2hlZE1heUxvb2t1cEluTWFpbm1heUxvb2t1cEluTWFpbm1haW5VcmlmaW5kSW5MaWJyYXJ5ZmluZEluX2dldFN0cmluZ0FyZ3VtZW50SlMgYnVpbHRpbiBleHByZXNzaW9uIGhhcyBubyB0eXBlLkpTIGJ1aWx0aW4gaXMgbWlzc2luZyBuYW1lLlVuZXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQuSlMgZW1iZWRkZWQgZ2xvYmFsIGV4cHJlc3Npb24gaGFzIG5vIHR5cGUuSlMgZW1iZWRkZWQgZ2xvYmFsIGlzIG1pc3NpbmcgbmFtZS5KUyBlbWJlZGRlZCBnbG9iYWwgaGFzIG1vcmUgdGhhbiAyIGFyZ3VtZW50cy5ObyBleHByZXNzaW9uIGZvciBjb25zdGFudC5ObyBjb25zdGFudCBmb3IgZ2V0TWV0YWRhdGFObyBzdXBlciBub1N1Y2hNZXRob2QgZm91bmQgZm9yIGNsYXNzIGNyZWF0ZUNvbnN0cnVjdG9yQm9keWNyZWF0ZUdlbmVyYXRvckJvZHlVbmV4cGVjdGVkIGVudGl0eSAsIGV4cGVjdGVkIGZhbWlseSBsaWJyYXJ5TGlzdEludGVybmFsTm8gbGlicmFyeSBlbnRpdHkgZm9yIE5vIGNsYXNzIGVudGl0eSBmb3IgTm8gZmllbGQgZW50aXR5IGZvciBObyBmdW5jdGlvbiBlbnRpdHkgZm9yIE5vIGNvbnN0cnVjdG9yIGVudGl0eSBmb3IgTm8gdHlwZSB2YXJpYWJsZSBlbnRpdHkgZm9yICBvbiBObyB0eXBlZGVmIGVudGl0eSBmb3IgX2dldENvbnN0cnVjdG9yQm9keV9nZXRQYXJhbWV0ZXJTdHJ1Y3R1cmVGcm9tRnVuY3Rpb25Ob2RlYWRkQ29uc3RydWN0b3JCb2R5Z2V0UGFyZW50TWVtYmVyVW5leHBlY3RlZCBtZW1iZXIga2luZCBfY29uc3RydWN0UmVjb3JkRmllbGRFbnRyeWJveGVkRmllbGRib3hlZEZpZWxkc2NhcHR1cmVkVmFyaWFibGVzQWNjZXNzb3Jjb250YWluZXJEYXRhZXh0ZW5kQ2xhc3NfaXNJblJlY29yZHJlY29yZEZpZWxkc1Zpc2libGVJblNjb3BlY29uc3RydWN0Q2xvc3VyZUNsYXNzdHlwZVZhcmlhYmxlQWNjZXNzX2NvbXB1dGVDbG9zdXJlTmFtZWNsb3N1cmVEYXRhX2J1aWxkQ2xvc3VyZUNsYXNzRmllbGRzX2NvbnN0cnVjdFNpZ25hdHVyZU1ldGhvZGZpZWxkTnVtYmVyY2FwdHVyZWRMb2NhbGNvbnN0cnVjdGVkRmllbGRfY29uc3RydWN0Q2xvc3VyZUZpZWxkRm9yUmVjb3JkX2NvbnN0cnVjdENsb3N1cmVGaWVsZFVuZXhwZWN0ZWQgZmllbGQgbm9kZSB0eXBlOiBfYm94X19nZXRDbG9zdXJlVmFyaWFibGVOYW1lYW5vbnltb3VzX2NhcHR1cmVkX2Z1bmN0aW9uRGF0YUpzRWxlbWVudEVudmlyb25tZW50VW5leHBlY3RlZCBtYXJrZXIgVGhlIGNvbnN0cnVjdG9yICcnIHdhcyBub3QgZm91bmQgaW4gY2xhc3MgJ2luIGxpYnJhcnkgVGhlIG1lbWJlciAnJyB3YXMgbm90IGZvdW5kIGluICcgd2FzIG5vdCBmb3VuZCBpbiBsaWJyYXJ5ICcnICB3YXMgbm90IGZvdW5kIGluIGxpYnJhcnkgJycgd2FzIG5vdCBmb3VuZC5Kc0JlaGF2aW9yQnVpbGRlckpzQ29uc3RhbnRFbnZpcm9ubWVudF92YWx1ZU1hcEpzRXZhbHVhdGlvbkVudmlyb25tZW50X0V2YWx1YXRpb25FbnZpcm9ubWVudC5nZXRMb2NhbENvbnN0YW50X0VudGl0eUxvb2t1cExpYnJhcnkgZm9yIGluZGV4ICBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQuQ2xhc3MgZm9yIGluZGV4IFR5cGVkZWYgZm9yIGluZGV4IE1lbWJlciBmb3IgaW5kZXggVHlwZSB2YXJpYWJsZSBmb3IgaW5kZXggTm8gbGlicmFyeSBmb3VuZCBmb3IgaW5kZXggTm8gY2xhc3MgZm91bmQgZm9yIGluZGV4IE5vIHR5cGVkZWYgZm91bmQgZm9yIGluZGV4IE5vIG1lbWJlciBmb3VuZCBmb3IgaW5kZXggTm8gdHlwZSB2YXJpYWJsZSBmb3VuZCBmb3IgaW5kZXggQ2xvc2VkRW50aXR5TG9va3VwTGF0ZU1lbWJlcktpbmRMYXRlTWVtYmVyS2luZC5jb25zdHJ1Y3RvckJvZHlMYXRlTWVtYmVyS2luZC5nZW5lcmF0b3JCb2R5Q2xvc2VkRW50aXR5UmVhZGVyX3JlYWRMYXRlTWVtYmVyRnJvbURhdGFTb3VyY2VVbmV4cGVjdGVkIGxhdGUgbWVtYmVyIGtpbmQ6IENsb3NlZEVudGl0eVdyaXRlcl9lYXJseU1lbWJlckluZGV4TGltaXRfd3JpdGVMYXRlTWVtYmVyVG9EYXRhU2lua1VuZXhwZWN0ZWQgbGF0ZSBtZW1iZXIgRnVuY3Rpb25TZXRKc0Nsb3NlZFdvcmxkY2xvc2VkLXdvcmxkX2FsbEZ1bmN0aW9uc19saXZlTWl4aW5Vc2VzX3N1YnR5cGVDb3ZlcmVkQnlDYWNoZV9zb3J0ZXJtZW1iZXJBY2Nlc3NhbGxvY2F0b3JBbmFseXNpc3NlY29uZE1hcHN1YmNsYXNzZXNOZWVkTm9TdWNoTWV0aG9kcm9vdE5vZGVyb290Q2xhc3NfaGFzQ29uY3JldGVNYXRjaHN0b3BBdFN1cGVyY2xhc3NJdGVyYXRpb25TdGVwLlNUT1BObyBjbGFzcyBzZXQgZm9yIHN1YnR5cGVOb2Rlc3VidHlwZU5vZGVzdHlwZVNldG90aGVyVHlwZVNldHNvdGhlckNsYXNzb3RoZXJUeXBlU2V0Y29tbW9uU3VwZXJ0eXBlc2FkZExpdmVVc2VfaXNOYW1lZE1peGluQXBwbGljYXRpb25jdXJyZW50TWl4aW5fZW5zdXJlRnVuY3Rpb25TZXRoYXNBbnlVc2VyRGVmaW5lZEdldHRlciBoYXMgbm90IGJlZW4gaW5zdGFudGlhdGVkLktlcm5lbFNvcnRlcl9jb21wYXJlTGlicmFyaWVzX2NvbXBhcmVTb3VyY2VTcGFuc2VudGl0eTFzb3VyY2VTcGFuMWVudGl0eTJzb3VyY2VTcGFuMnNvcnRMaWJyYXJpZXNzb3J0TWVtYmVyc2NvbXBhcmVNZW1iZXJzQnlMb2NhdGlvbnNvcnRDbGFzc2VzcmVndWxhckNsYXNzZXN1bm5hbWVkTWl4aW5zY29tcGFyZUNsYXNzZXNCeUxvY2F0aW9uTXVsdGlwbGUgbWl4aW5zIG5hbWVkIHNvcnRUeXBlZGVmc2NvbXBhcmVMaWJyYXJpZXNCeUxvY2F0aW9uZGVmaW5pdGlvbjFkZWZpbml0aW9uMmNvbXBhcmVUeXBlZGVmc0J5TG9jYXRpb25LZXJuZWxTb3J0ZXIuY29tcGFyZVR5cGVkZWZzQnlMb2NhdGlvbiB1bmltcGxlbWVudGVkTG9jYWxMb29rdXBJbXBsX0VudGl0eUNvbnZlcnRlcl9jbG9zdXJlRGF0YUJ1aWxkZXJfYWJzdHJhY3RWYWx1ZVN0cmF0ZWd5a091dHB1dFVuaXREYXRhX2NvbnZlcnRCYWNrZW5kVXNhZ2VfY29udmVydE5hdGl2ZURhdGFfY29udmVydEludGVyY2VwdG9yRGF0YWNvbnZlcnRDbGFzc0hpZXJhcmNoeU5vZGV0b0JhY2tlbmRDbGFzc2hpZXJhcmNoeURlcHRoY29udmVydENsYXNzU2V0bmV3Q2xhc3NTZXRuZXdTdWJ0eXBldG9CYWNrZW5kTWVtYmVyU2V0dG9CYWNrZW5kQ2xhc3NNYXB0b0JhY2tlbmRDbGFzc1NldHRvQmFja2VuZE1lbWJlck1hcGtlcm5lbFJ0aU5lZWRsb2NhbEZ1bmN0aW9uc05vZGVzTmVlZGluZ1NpZ25hdHVyZWxvY2FsRnVuY3Rpb25zTmVlZGluZ1NpZ25hdHVyZWxvY2FsRnVuY3Rpb25zTm9kZXNOZWVkaW5nVHlwZUFyZ3VtZW50c2xvY2FsRnVuY3Rpb25zTmVlZGluZ1R5cGVBcmd1bWVudHNqUnRpTmVlZF9jb252ZXJ0UnVudGltZVR5cGVzTmVlZGNhbGxNZXRob2RzTmVlZGluZ1NpZ25hdHVyZWNhbGxNZXRob2RzTmVlZGluZ1R5cGVBcmd1bWVudHNtZXRob2RzTmVlZGluZ1NpZ25hdHVyZW1ldGhvZHNOZWVkaW5nVHlwZUFyZ3VtZW50c29sZE5vU3VjaE1ldGhvZERhdGF0b0JhY2tlbmRGdW5jdGlvblNldG9sZEFubm90YXRpb25zRGF0YV9jb252ZXJ0T3V0cHV0VW5pdERhdGFoZWxwZXJGdW5jdGlvbnNVc2VkaGVscGVyQ2xhc3Nlc1VzZWR0b0JhY2tlbmRUeXBlaXNIdG1sTG9hZGVkX2NvbnZlcnROYXRpdmVCYXNpY0RhdGF0b0JhY2tlbmRMaWJyYXJ5TWFwY29udmVydE5hdGl2ZUJlaGF2aW9yVHlwZWFsbG93RnJlZVZhcmlhYmxlc2NvbnZlcnROYXRpdmVCZWhhdmlvcm5ld0JlaGF2aW9yYmFja2VuZE1ldGhvZGNsYXNzZXNOZWVkaW5nVHlwZUFyZ3VtZW50c3NlbGVjdG9yc05lZWRpbmdUeXBlQXJndW1lbnRzdG9CYWNrZW5kTGlicmFyeWluc3RhbnRpYXRpb25zTmVlZGluZ1R5cGVBcmd1bWVudHNvcmlnaW5hbENsb3N1cmVGdW5jdGlvbk5vZGViYWNrZW5kRW50aXR5VHJpdmlhbENsb3N1cmVSdGlOZWVkSnNDbG9zdXJlUnRpTmVlZEpzVG9Gcm9udGVuZE1hcHRvQmFja2VuZExpYnJhcnlTZXR0b0JhY2tlbmRGaWVsZFNldGJhY2tlbmRGaWVsZGJhY2tlbmRGdW5jdGlvblYxSnNUb0Zyb250ZW5kTWFwSW1wbF9iYWNrZW5kdG9CYWNrZW5kRW50aXR5dG9CYWNrZW5kVHlwZWRlZnRvQmFja2VuZFR5cGVWYXJpYWJsZXVuZXhwZWN0ZWQgZW50aXR5IExvY2FsIGZ1bmN0aW9uIHR5cGUgdmFyaWFibGVzIGFyZSBub3Qgc3VwcG9ydGVkLmluZGV4ZWRUeXBlVmFyaWFibGVOdWxsIG5vdCBhbGxvd2VkIGFzIGNvbnN0YW50IHZhbHVlLl9UeXBlQ29udmVydGVyX2Z1bmN0aW9uVHlwZVZhcmlhYmxlc2NvbnZlcnRUeXBlc2NvbnZlcnRlckZ1bmN0aW9uIHR5cGUgdmFyaWFibGUgIG5vdCBmb3VuZCBpbiBfQ29uc3RhbnRDb252ZXJ0ZXJ0eXBlQ29udmVydGVyX2hhbmRsZVZhbHVlc05vIGJhY2tlbmQgZmllbGQgZm9yIFVuZXhwZWN0ZWQgdmlzaXRJbnRlcmNlcHRvciBVbmV4cGVjdGVkIERlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZSBjb252ZXJ0TWFwY29udmVydEtleWNvbnZlcnRWYWx1ZW5ld01hcG5ld0tleWRhcnQyanMuYmFja2VuZF9hcGlkYXJ0MmpzLmNvbW1vbi5yZXNvbHV0aW9uSXJBbm5vdGF0aW9uRGF0YV9uYXRpdmVDbGFzc05hbWVzX25hdGl2ZU1lbWJlcnNfbmF0aXZlTWVtYmVyTmFtZXNfY3JlYXRlc0Fubm90YXRpb25zX3JldHVybnNBbm5vdGF0aW9uc19qc0ludGVyb3BMaWJyYXJ5TmFtZXNfanNJbnRlcm9wQ2xhc3NOYW1lc19hbm9ueW1vdXNKc0ludGVyb3BDbGFzc2VzX2pzSW50ZXJvcE1lbWJlck5hbWVzX21lbWJlclByYWdtYUFubm90YXRpb25zZ2V0TmF0aXZlQ2xhc3NOYW1laGFzTmF0aXZlQm9keWdldE5hdGl2ZU1lbWJlck5hbWVnZXRNZW1iZXJQcmFnbWFBbm5vdGF0aW9uRGF0YVByYWdtYUFubm90YXRpb25EYXRhUHJhZ21hQW5ub3RhdGlvbkRhdGEocHJvY2Vzc0Fubm90YXRpb25zbW9kdWxhckNvcmVwcm9jZXNzTWVtYmVycHJhZ21hQW5ub3RhdGlvbm5hdGl2ZUNsYXNzTmFtZV9nZXROYXRpdmVDbGFzc05hbWVfaXNOYXRpdmVNZW1iZXJfZ2V0TmF0aXZlTWVtYmVyTmFtZV9nZXRDcmVhdGVzQW5ub3RhdGlvbl9nZXRSZXR1cm5zQW5ub3RhdGlvbl9nZXRKc0ludGVyb3BOYW1lX2lzQW5vbnltb3VzSnNJbnRlcm9wX2dldFByYWdtYUFubm90YXRpb25jb21wdXRlUHJhZ21hQW5ub3RhdGlvbkRhdGFGcm9tSXJjb25zdGFudEV4cHJlc3Npb25VbmV4cGVjdGVkIHVuZXZhbHVhdGVkIGNvbnN0YW50IG9uIEtlcm5lbFNjb3BlSW5mb3dpdGhCb3hlZFZhcmlhYmxlc0tlcm5lbFNjb3BlSW5mbyh0aGlzPWZyZWVWcmlhYmxlcz1mcmVlVmFyaWFibGVzRm9yUnRpPXtLZXJuZWxDYXB0dXJlZFNjb3BlZm9yU2lnbmF0dXJlS2VybmVsQ2FwdHVyZWRMb29wU2NvcGVOb2RlQm94VmFyaWFibGVVc2VLaW5kbG9jYWxUeXBlbWFwTGl0ZXJhbGNvbnN0cnVjdG9yVHlwZUFyZ3VtZW50c3RhdGljVHlwZUFyZ3VtZW50aW5zdGFuY2VUeXBlQXJndW1lbnRsb2NhbFR5cGVBcmd1bWVudG1lbWJlclBhcmFtZXRlcmxvY2FsUGFyYW1ldGVybWVtYmVyUmV0dXJuVHlwZWxvY2FsUmV0dXJuVHlwZWZpZWxkVHlwZWluc3RhbnRpYXRpb25UeXBlQXJndW1lbnRWYXJpYWJsZVVzZV9zaW1wbGVWYXJpYWJsZVVzZShraW5kPSxtZW1iZXI9bG9jYWxGdW5jdGlvbj0saW52b2NhdGlvbj1pbnN0YW50aWF0aW9uPVR5cGVWYXJpYWJsZUtpbmRUeXBlVmFyaWFibGVLaW5kLmNsc1R5cGVWYXJpYWJsZUtpbmQubWV0aG9kVHlwZVZhcmlhYmxlS2luZC5sb2NhbFR5cGVWYXJpYWJsZUtpbmQuZnVuY3Rpb25UeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHRVbmV4cGVjdGVkIHR5cGUgZGVjbGFyYXRpb246IFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dC5hY2NlcHRUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQudmlzaXRDaGlsZHJlblR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCh0eXBlPSxjb250ZXh0PSx0eXBlRGVjbGFyYXRpb249SW1wYWN0UmVnaXN0cnlyZWdpc3RlckludExpdGVyYWxyZWdpc3RlckRvdWJsZUxpdGVyYWxyZWdpc3RlckJvb2xMaXRlcmFscmVnaXN0ZXJTdHJpbmdMaXRlcmFscmVnaXN0ZXJTeW1ib2xMaXRlcmFscmVnaXN0ZXJOdWxsTGl0ZXJhbHJlZ2lzdGVyTGlzdExpdGVyYWxyZWdpc3RlclNldExpdGVyYWxyZWdpc3Rlck1hcExpdGVyYWxyZWdpc3RlclN0YXRpY1RlYXJPZmZyZWdpc3RlclN0YXRpY0dldHJlZ2lzdGVyU3RhdGljU2V0cmVnaXN0ZXJBc3NlcnR3aXRoTWVzc2FnZXJlZ2lzdGVyU3luY1N0YXJyZWdpc3RlckFzeW5jcmVnaXN0ZXJBc3luY1N0YXJyZWdpc3RlclN0cmluZ0NvbmNhdGVuYXRpb25yZWdpc3RlckxvY2FsRnVuY3Rpb25yZWdpc3RlckxvY2FsV2l0aG91dEluaXRpYWxpemVycmVnaXN0ZXJJbXBsaWNpdENhc3RyZWdpc3RlckFzQ2FzdHJlZ2lzdGVyVGhyb3dyZWdpc3RlclN5bmNGb3JJbml0ZXJhdG9yQ2xhc3NSZWxhdGlvbnJlZ2lzdGVyQXN5bmNGb3JJbnJlZ2lzdGVyQ2F0Y2hyZWdpc3RlclN0YWNrVHJhY2VyZWdpc3RlckNhdGNoVHlwZXJlZ2lzdGVyRmllbGRJbml0aWFsaXphdGlvbnJlZ2lzdGVyRmllbGRDb25zdGFudEluaXRpYWxpemF0aW9ucmVnaXN0ZXJMb2FkTGlicmFyeXJlZ2lzdGVyUmVkaXJlY3RpbmdJbml0aWFsaXplcnJlZ2lzdGVyUGFyYW1ldGVyQ2hlY2tyZWdpc3RlckxhenlGaWVsZHJlZ2lzdGVyTmV3cmVnaXN0ZXJDb25zdEluc3RhbnRpYXRpb25yZWdpc3RlckxvY2FsRnVuY3Rpb25JbnZvY2F0aW9ucmVnaXN0ZXJJbnN0YW5jZUludm9jYXRpb25yZWdpc3RlckZ1bmN0aW9uSW52b2NhdGlvbnJlZ2lzdGVyRHluYW1pY0dldHJlZ2lzdGVySW5zdGFuY2VHZXRyZWdpc3RlckR5bmFtaWNTZXRyZWdpc3Rlckluc3RhbmNlU2V0cmVnaXN0ZXJTdXBlckludm9jYXRpb25yZWdpc3RlclN1cGVyR2V0cmVnaXN0ZXJTdXBlclNldHJlZ2lzdGVyU3VwZXJJbml0aWFsaXplcnJlZ2lzdGVyQ29uc3RydWN0b3JOb2RlcmVnaXN0ZXJGaWVsZE5vZGVyZWdpc3RlclByb2NlZHVyZU5vZGVyZWdpc3RlclN0YXRpY0ludm9jYXRpb25Ob2RlcmVnaXN0ZXJTd2l0Y2hTdGF0ZW1lbnROb2RlcmVnaXN0ZXJDb25zdENvbnN0cnVjdG9ySW52b2NhdGlvbk5vZGVJbXBhY3RCdWlsZGVyQmFzZWhhbmRsZUFzeW5jTWFya2VyVW5leHBlY3RlZCBhc3luYyBtYXJrZXI6IHBvc2l0aW9uQXJndW1lbnRzX0ltcGFjdEJ1aWxkZXImSW1wYWN0QnVpbGRlckJhc2UmSW1wYWN0UmVnaXN0cnlNaXhpbmltcGFjdERhdGFfcmVnaXN0ZXJGZWF0dXJlX3JlZ2lzdGVyVHlwZVVzZV9zdXBlckluaXRpYWxpemVyc19zdXBlclNldHNfc3VwZXJHZXRzX3N1cGVySW52b2NhdGlvbnNfaW5zdGFuY2VTZXRzX2R5bmFtaWNTZXRzX2luc3RhbmNlR2V0c19keW5hbWljR2V0c19mdW5jdGlvbkludm9jYXRpb25zX2luc3RhbmNlSW52b2NhdGlvbnNfZHluYW1pY0ludm9jYXRpb25zX2xvY2FsRnVuY3Rpb25JbnZvY2F0aW9uc19zdGF0aWNJbnZvY2F0aW9uc19jb25zdHJ1Y3Rvckludm9jYXRpb25zX2NvbnN0SW5zdGFudGlhdGlvbnNfRmVhdHVyZS5sYXp5RmllbGRfVHlwZVVzZUtpbmQucGFyYW1ldGVyQ2hlY2tfcmVkaXJlY3RpbmdJbml0aWFsaXplcnNfRmVhdHVyZS5sb2FkTGlicmFyeV9maWVsZEluaXRpYWxpemVyc19maWVsZENvbnN0YW50SW5pdGlhbGl6ZXJzX1R5cGVVc2VLaW5kLmNhdGNoVHlwZV9GZWF0dXJlLnN0YWNrVHJhY2VfRmVhdHVyZS5jYXRjaENsYXVzZV9mb3JJbkRhdGFfRmVhdHVyZS50aHJvd0V4cHJlc3Npb25fVHlwZVVzZUtpbmQuYXNDYXN0X1R5cGVVc2VLaW5kLmltcGxpY2l0Q2FzdF9UeXBlVXNlS2luZC5pc0NoZWNrX0ZlYXR1cmUubG9jYWxXaXRob3V0SW5pdGlhbGl6ZXJfRmVhdHVyZS5zdHJpbmdDb25jYXRlbmF0aW9uX1R5cGVVc2VLaW5kLmFzeW5jU3Rhck1hcmtlcl9UeXBlVXNlS2luZC5hc3luY01hcmtlcl9UeXBlVXNlS2luZC5zeW5jU3Rhck1hcmtlcl9GZWF0dXJlLmFzc2VydFdpdGhNZXNzYWdlX0ZlYXR1cmUuYXNzZXJ0V2l0aG91dE1lc3NhZ2Vfc3RhdGljU2V0c19zdGF0aWNHZXRzX3N0YXRpY1RlYXJPZmZzX21hcExpdGVyYWxzX2xpc3RMaXRlcmFsc19zZXRMaXRlcmFsc19GZWF0dXJlLm51bGxMaXRlcmFsX3N5bWJvbExpdGVyYWxzX3N0cmluZ0xpdGVyYWxzX2Jvb2xMaXRlcmFsc19kb3VibGVMaXRlcmFsc19pbnRMaXRlcmFsc19ydW50aW1lVHlwZVVzZXNfY29uc3RydWN0b3JOb2Rlc19maWVsZE5vZGVzX3Byb2NlZHVyZU5vZGVzX3N0YXRpY0ludm9jYXRpb25Ob2Rlc19zd2l0Y2hTdGF0ZW1lbnROb2Rlc19jb25zdENvbnN0cnVjdG9ySW52b2NhdGlvbk5vZGVzSW1wYWN0QnVpbGRlckltcGFjdEJ1aWxkZXJEYXRhQ29uc3RhbnRJbXBhY3RWaXNpdG9yVW5leHBlY3RlZCBjb25zdGFudCBfZ2V0TmFtZWRBcmd1bWVudHNNb2R1bGFyQ29yZU1vZHVsYXJNZW1iZXJEYXRhTW9kdWxhclN0cmF0ZWd5Y29tcHV0ZU1vZGVsVmFyaWFibGVTY29wZU1vZGVsVmFyaWFibGVTY29wZU1vZGVsSW1wbF9hc3NpZ25lZFZhcmlhYmxlc2NyZWF0ZVNjb3BlRm9ycmVnaXN0ZXJBc3NpZ25lZFZhcmlhYmxlVmFyaWFibGVTY29wZVZhcmlhYmxlU2NvcGVJbXBsX3N1YlNjb3Blc2FkZFN1YlNjb3Blc3ViU2NvcGVWYXJpYWJsZUNvbGxlY3Rvck1peGluY3VycmVudFZhcmlhYmxlU2NvcGV2aXNpdEluVmFyaWFibGVTY29wZW9sZFNjb3BlcmVnaXN0ZXJDb250aW51ZVN3aXRjaHJlZ2lzdGVyQmFja2VuZEZ1bmN0aW9uVXNlcmVnaXN0ZXJCYWNrZW5kQ2xhc3NVc2VyZWdpc3Rlckdsb2JhbENsYXNzRGVwZW5kZW5jeWJhY2tlbmRJbXBhY3RyZWdpc3RlclVzZWRNZW1iZXJCYWNrZW5kVXNhZ2VCdWlsZGVySW1wbF9mcm9udGVuZFN0cmF0ZWd5X2dsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jaWVzX2dsb2JhbENsYXNzRGVwZW5kZW5jaWVzX2hlbHBlckZ1bmN0aW9uc1VzZWRfaGVscGVyQ2xhc3Nlc1VzZWRfbmVlZFRvSW5pdGlhbGl6ZUlzb2xhdGVBZmZpbml0eVRhZ19uZWVkVG9Jbml0aWFsaXplRGlzcGF0Y2hQcm9wZXJ0eV9pc1ZhbGlkQmFja2VuZFVzZUJhY2tlbmQgdXNlIG9mIF9pc1ZhbGlkRW50aXR5X2ludGVybmFsL2pzX3J1bnRpbWUvbGliL19wcm9jZXNzQmFja2VuZFN0YXRpY1VzZV9wcm9jZXNzQmFja2VuZEluc3RhbnRpYXRpb25CYWNrZW5kVXNhZ2VJbXBsYmFja2VuZC11c2FnZWpzX2JhY2tlbmQuYmFja2VuZC5yZXNvbHV0aW9uX2xpc3RlbmVyUmVzb2x1dGlvbkVucXVldWVyTGlzdGVuZXJfZGVmZXJyZWRMb2FkVGFza19pc0xvYWRMaWJyYXJ5RnVuY3Rpb25SZXNvbHZlZF9yZWdpc3RlckJhY2tlbmRJbXBhY3RfYWRkSW50ZXJjZXB0b3JzX2NvbXB1dGVEZWZlcnJlZExvYWRpbmdJbXBhY3RkZWZlcnJlZCBsb2FkbmF0aXZlIGNsYXNzZXNtYWluIGltcGFjdGNvbXB1dGVIZWxwZXJzSW1wYWN0YWxsUGFyYW1ldGVyVHlwZXNfcmVnaXN0ZXJSdW50aW1lVHlwZV9yZWdpc3RlckNoZWNrZWRNb2RlSGVscGVyc2pzX2JhY2tlbmQucnVudGltZV90eXBlc19yZXNvbHV0aW9uUnRpTm9kZV90ZXN0U3RhdGVfbGl0ZXJhbFN0YXRlaGFzRGlyZWN0VGVzdGhhc0luZGlyZWN0VGVzdGhhc1Rlc3RoYXNEaXJlY3RMaXRlcmFsaGFzSW5kaXJlY3RMaXRlcmFsaGFzTGl0ZXJhbG1hcmtUZXN0c2V0VGVzdFN0YXRlbWFya0RpcmVjdFRlc3RtYXJrSW5kaXJlY3RUZXN0bWFya0RpcmVjdExpdGVyYWxzZXRMaXRlcmFsU3RhdGVtYXJrSW5kaXJlY3RMaXRlcmFsQ2xhc3NOb2RlTWV0aG9kTm9kZWlzQ2FsbFRhcmdldGluc3RhbmNlTmFtZWlzTm9TdWNoTWV0aG9kc2VsZWN0b3JBcHBsaWVzTWV0aG9kTm9kZShmdW5jdGlvbj0scGFyYW1ldGVyU3RydWN0dXJlPSxpc0NhbGxUYXJnZXQ9LGluc3RhbmNlTmFtZT1UeXBlVmFyaWFibGVUZXN0c19tZXRob2RzX2FwcGxpZWRTZWxlY3Rvck1hcF9pbnN0YW50aWF0aW9uTWFwX3NldHVwRGVwZW5kZW5jaWVzX3Byb3BhZ2F0ZVRlc3RzX3Byb3BhZ2F0ZUxpdGVyYWxzX2NvbGxlY3RSZXN1bHRzY2xhc3NUZXN0c0ZvclRlc3RpbmdkaXJlY3RDbGFzc1Rlc3RzRm9yVGVzdGluZ21ldGhvZFRlc3RzRm9yVGVzdGluZ2RpcmVjdE1ldGhvZFRlc3RzRm9yVGVzdGluZ2dldFR5cGVBcmd1bWVudERlcGVuZGVuY2llc2ZvckVhY2hBcHBsaWVkU2VsZWN0b3Jmb3JFYWNoR2VuZXJpY0luc3RhbnRpYXRpb25fZ2V0Q2xhc3NOb2RlX2dldE1ldGhvZE5vZGVyZWdpc3RlckRlcGVuZGVuY2llc3Byb2Nlc3NFbnRpdHlwcm9jZXNzVHlwZVZhcmlhYmxlVHlwZXByb2Nlc3NUeXBlYWRkTm9kZSBkaXJlY3QgdGVzdCBpbmRpcmVjdCB0ZXN0IGRpcmVjdCBsaXRlcmFsIGluZGlyZWN0IGxpdGVyYWxjbGFzc2VzOm1ldGhvZHM6ZXhwbGljaXQgaXMtdGVzdHM6aW1wbGljaXQgaXMtdGVzdHM6YWRkSW1wbGljaXRDaGVja2FkZEltcGxpY2l0Q2hlY2tzVHJpdmlhbFJ1bnRpbWVUeXBlc05lZWRSdW50aW1lVHlwZXNOZWVkSW1wbHJ1bnRpbWUtdHlwZXMtbmVlZFJ1bnRpbWVUeXBlc05lZWRCdWlsZGVyY29tcHV0ZVJ1bnRpbWVUeXBlc05lZWRUcml2aWFsUnVudGltZVR5cGVzTmVlZEJ1aWxkZXJSdW50aW1lVHlwZXNOZWVkQnVpbGRlckltcGxjbGFzc2VzVXNpbmdUeXBlVmFyaWFibGVMaXRlcmFsc21ldGhvZHNVc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWxzbG9jYWxGdW5jdGlvbnNVc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWxzc2VsZWN0b3JzTmVlZGluZ1R5cGVBcmd1bWVudHNGb3JUZXN0aW5naW5zdGFudGlhdGlvbnNOZWVkaW5nVHlwZUFyZ3VtZW50c0ZvclRlc3Rpbmd0eXBlVmFyaWFibGVUZXN0c0ZvclRlc3Rpbmdwb3RlbnRpYWxseU5lZWRUeXBlQXJndW1lbnRzY2hlY2tDbG9zdXJlc3BvdGVudGlhbFN1YnR5cGVPZmNoZWNrRnVuY3Rpb25UeXBlbG9jYWxGdW5jdGlvbnNUb1JlbW92ZWNsb3N1cml6ZWRNZW1iZXJzVG9SZW1vdmVwcm9jZXNzQ2hlY2tzaXRmbmVlZGVkT25BbGxuZWVkZWRPbkZ1bmN0aW9uc2NsYXNzZXNEaXJlY3RseU5lZWRpbmdSdW50aW1lVHlwZWltcGxpZWRDbGFzc2VzVW5leHBlY3RlZCB0eXBlIHJlY2VpdmVyQ2xhc3Nlc2FyZ3VtZW50Q2xhc3Nlc3JlY2VpdmVyQ2xhc3Nhcmd1bWVudENsYXNzYWxsQ2xhc3Nlc05lZWRpbmdSdW50aW1lVHlwZU5hdGl2ZU1lbWJlclJlc29sdmVyYW5ub3RhdGlvbkRhdGFCYXNlTmF0aXZlQ2xhc3NGaW5kZXJfdGFnT3duZXJfcHJvY2Vzc05hdGl2ZUNsYXNzZXNJbkxpYnJhcnlfcHJvY2Vzc1N1YmNsYXNzZXNPZk5hdGl2ZUNsYXNzZXNfcHJvY2Vzc05hdGl2ZUNsYXNzJyBhbHJlYWR5IGluIHVzZSBieSAnX2ZpbmRFeHRlbmRzTmFtZU9mQ2xhc3NuYXRpdmVDbGFzc2VzQW5kU3ViY2xhc3Nlc3BvdGVudGlhbEV4dGVuZHNleHRlbmRzTmFtZXBvdGVudGlhbFN1YmNsYXNzZXNuYXRpdmVTdXBlcmNsYXNzT2Z3YWxrUG90ZW50aWFsU3ViY2xhc3Nlc25hdGl2ZVN1cGVyY2xhc3Npc0Fubm90YXRpb25hbm5vdGF0aW9uQ2xhc3NyZWFkQW5ub3RhdGlvbk5hbWVrZXJuZWwuZGVmZXJyZWRfbG9hZF9kYXRhS2VybmVsRGVmZXJyZWRMb2FkVGFza19hZGRpdGlvbmFsRXhwb3J0c1NldHNfZmluZEltcG9ydHNUb2ZpbmQtaW1wb3J0c2dldExpYnJhcnlOb2RlZ2V0VHlwZWRlZk5vZGVDb25zdGFudENvbGxlY3Rvcl9pc1Zpc2libGVLZXJuZWxUb0VsZW1lbnRNYXBnZXRGb3JlaWduS2luZGdldEludGVyZmFjZVR5cGVGb3JKc0ludGVyY2VwdG9yQ2FsbGdldExvY2FsRnVuY3Rpb25Gb3JlaWduS2luZEZvcmVpZ25LaW5kLkpTRm9yZWlnbktpbmQuSlNfQlVJTFRJTkZvcmVpZ25LaW5kLkpTX0VNQkVEREVEX0dMT0JBTEZvcmVpZ25LaW5kLkpTX0lOVEVSQ0VQVE9SX0NPTlNUQU5URm9yZWlnbktpbmQuTk9ORWRhcnQyanMua2VybmVsLmVsZW1lbnRfbWFwbmF0aXZlX2Jhc2ljX2RhdGEuZGFydG5vX3N1Y2hfbWV0aG9kX3Jlc29sdmVyLmRhcnRLZXJuZWxUb0VsZW1lbnRNYXBJbXBsX2NvbnN0YW50RXZhbHVhdG9yX25hdGl2ZUJlaGF2aW9yQnVpbGRlcmVuc3VyZUNsYXNzTWVtYmVyc2Vuc3VyZU1lbWJlcnNfZm9yRWFjaE1peGluS2VybmVsVG9FbGVtZW50TWFwQmFzZS5fZm9yRWFjaEluamVjdGVkQ2xhc3NNZW1iZXJfZ2V0VHlwZWRlZk5vZGVnZXRQYXJhbWV0ZXJTdHJ1Y3R1cmVpbmNsdWRlVHlwZVBhcmFtZXRlcnNleHRyYWN0RW51bUluZGV4RnJvbUNvbnN0YW50VmFsdWVfZ2V0TGlicmFyeUNyZWF0ZUVudmlyb25tZW50IG9mICBpcyBjbG9zZWQuIFRyeWluZyB0byBjcmVhdGUgbGlicmFyeSBmb3IgY3JlYXRlTGlicmFyeV9nZXRDbGFzc0NyZWF0ZWNsYXNzIGZvciBjcmVhdGVDbGFzc19nZXRUeXBlZGVmQ3JlYXRldHlwZWRlZiBmb3IgY3JlYXRlVHlwZWRlZl9nZXRUeXBlVmFyaWFibGVDcmVhdGV0eXBlIHZhcmlhYmxlIGZvciBVbnN1cHBvcnRlZCBmdW5jdGlvbiB0eXBlIHBhcmFtZXRlciBwYXJlbnQgbm9kZSBVbnN1cHBvcnRlZCB0eXBlIHBhcmFtZXRlciB0eXBlIG5vZGUgX2dldENvbnN0cnVjdG9yQ3JlYXRlY29uc3RydWN0b3IgZm9yIGNyZWF0ZUdlbmVyYXRpdmVDb25zdHJ1Y3RvcmlzRnJvbUVudmlyb25tZW50Y3JlYXRlRmFjdG9yeUNvbnN0cnVjdG9yVW5leHBlY3RlZCBjb25zdHJ1Y3RvciBub2RlOiBfZ2V0TWV0aG9kQ3JlYXRlZnVuY3Rpb24gZm9yIENhbm5vdCBjcmVhdGUgbWV0aG9kIGZyb20gZmFjdG9yeS5jcmVhdGVHZXR0ZXJjcmVhdGVNZXRob2RjcmVhdGVTZXR0ZXJfZ2V0RmllbGRDcmVhdGVmaWVsZCBmb3IgY3JlYXRlRmllbGRuYXRpdmVCZWhhdmlvckJ1aWxkZXJnZXRDYWNoZWRTdGF0aWNUeXBlc2dldFR5cGVNYXBzRm9yVGVzdGluZ19sb29rdXBQcm9jZWR1cmVfaW1wbGVtZW50c0Z1bmN0aW9uVW5leHBlY3RlZCBtZXRob2Qgbm9kZSBLZXJuZWxFbGVtZW50RW52aXJvbm1lbnRLZXJuZWxCZWhhdmlvckJ1aWxkZXJLZXJuZWxDb25zdGFudEVudmlyb25tZW50S2VybmVsRXZhbHVhdGlvbkVudmlyb25tZW50S2VybmVsTmF0aXZlTWVtYmVyUmVzb2x2ZXJeW2EtekEtWl8kXVthLXpBLVowLTlfJF0qJF9wcm9jZXNzTWV0aG9kQW5ub3RhdGlvbnNfY29tcHV0ZU5hdGl2ZU1ldGhvZEJlaGF2aW9yX3Byb2Nlc3NGaWVsZEFubm90YXRpb25zZmllbGRMb2FkQmVoYXZpb3JfY29tcHV0ZU5hdGl2ZUZpZWxkTG9hZEJlaGF2aW9yZmllbGRTdG9yZUJlaGF2aW9yX2NvbXB1dGVOYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3Jfc2V0TmF0aXZlTmFtZV9maW5kSnNOYW1lRnJvbUFubm90YXRpb25ASlNOYW1lKC4uLikgYW5ub3RhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciBzdGF0aWMgZmllbGRzOiBfaXNOYXRpdmVNZXRob2Rfc2V0TmF0aXZlTmFtZUZvclN0YXRpY01ldGhvZF9pc0lkZW50aWZpZXJuYXRpdmVOYW1lc1VuYWJsZSB0byBkZXRlcm1pbmUgYSBuYXRpdmUgbmFtZSBmb3IgdGhlIGVuY2xvc2luZyBjbGFzcywgb3B0aW9uczogVG9vIG1hbnkgSlNOYW1lIGFubm90YXRpb25zOiBLZXJuZWxDbGFzc1F1ZXJpZXNLZXJuZWxBbm5vdGF0aW9uUHJvY2Vzc29yX25hdGl2ZUJhc2ljRGF0YUJ1aWxkZXJhbm5vdGF0aW9uTmFtZVRvbyBtYW55IG5hbWUgYW5ub3RhdGlvbnMuZ2V0SnNJbnRlcm9wTmFtZWNoZWNrRnVuY3Rpb25QYXJhbWV0ZXJzaXNFeHBsaWNpdGx5bHlKc0xpYnJhcnlpc0pzTGlicmFyeWltcGxlbWVudHNKc0phdmFTY3JpcHRPYmplY3RDbGFzc0tlcm5lbE5vU3VjaE1ldGhvZFJlc29sdmVyZmlyc3RQYXJhbWV0ZXJfY3JlYXRlRGlhZ25vc3RpY01lc3NhZ2VyZXBvcnRMb2NhdGVkTWVzc2FnZWNvbXBpbGVyLmtlcm5lbC5mcm9udF9lbmRfYWRhcHRlckNvbXBpbGVyRmlsZVN5c3RlbV9Db21waWxlckZpbGVTeXN0ZW1FbnRpdHlGaWxlIG5vdCBmb3VuZHJlcG9ydEZyb250RW5kTWVzc2FnZV9nZXRTcGFubmFibGVfY29udmVydE1lc3NhZ2VtYWluTWVzc2FnZXVuaGFuZGxlZCBzZXZlcml0eSBDbG9zdXJlRGF0YVNjb3BlSW5mb0tpbmRjYXB0dXJlZExvb3BTY29wZWNsb3N1cmVSZXByZXNlbnRhdGlvbkluZm9TY29wZUluZm9VbmV4cGVjdGVkIFNjb3BlSW5mb0tpbmQgLndyaXRlVG9EYXRhU2lua0NhcHR1cmVkU2NvcGVVbmV4cGVjdGVkIENhcHR1cmVkU2NvcGUga2luZCBDYXB0dXJlZExvb3BTY29wZVVuZXhwZWN0ZWQgQ2FwdHVyZWRMb29wU2NvcGUga2luZCBDbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvVW5leHBlY3RlZCBDbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvIGtpbmQgQm94TG9jYWwoVHlwZVZhcmlhYmxlTG9jYWx0eXBlX3ZhcmlhYmxlX2xvY2FsKEpTRW50aXR5UHJpdmF0ZWx5TmFtZWRKU0VudGl0eWVsZW1lbnRzLmp1bXBzTGFiZWxEZWZpbml0aW9uaXNUYXJnZXRkYXJ0MmpzLmpzX21vZGVsLnR5cGVfcmVjaXBlX3NhbWVGdWxsU3RydWN0dXJlYUJpbmRpbmdzYkJpbmRpbmdzU2luZ2xldG9uVHlwZUVudmlyb25tZW50U3RydWN0dXJlU2luZ2xldG9uVHlwZUVudmlyb25tZW50U3RydWN0dXJlKEZ1bGxUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmVGdWxsVHlwZUVudmlyb25tZW50U3RydWN0dXJlKHlpZWxkc1NhbWVUeXBlcmVjaXBlQXN0cnVjdHVyZUFyZWNpcGVCc3RydWN0dXJlQmlzSWRlbnRpdHlzdHJ1Y3R1cmVUeXBlRXhwcmVzc2lvblJlY2lwZShUeXBlRW52aXJvbm1lbnRSZWNpcGVTaW5nbGV0b25UeXBlRW52aXJvbm1lbnRSZWNpcGVTaW5nbGV0b25UeXBlRW52aXJvbm1lbnRSZWNpcGUoRnVsbFR5cGVFbnZpcm9ubWVudFJlY2lwZV9lcXVhbGFUeXBlc2JUeXBlc0Z1bGxUeXBlRW52aXJvbm1lbnRSZWNpcGUoSW52b2tlRHluYW1pY1NwZWNpYWxpemVyY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlc3RyeUNvbnZlcnRUb0J1aWx0aW5yZW5hbWVUb09wdGltaXplZFNlbGVjdG9ybG9va3VwU3BlY2lhbGl6ZXJJbmRleEFzc2lnblNwZWNpYWxpemVyX3ZhbHVlUGFyYW1ldGVyQ2hlY2tBbHdheXNTdWNjZWVkc3JlZ2lzdGVySW5kZXhBc3NpZ25JbmRleFNwZWNpYWxpemVycmVnaXN0ZXJJbmRleEJpdE5vdFNwZWNpYWxpemVycmVnaXN0ZXJCaXROb3RVbmFyeU5lZ2F0ZVNwZWNpYWxpemVycmVnaXN0ZXJVbmFyeU5lZ2F0ZUFic1NwZWNpYWxpemVycmVnaXN0ZXJBYnNyZWdpc3Rlck9wdGltaXphdGlvbkJpbmFyeUFyaXRobWV0aWNTcGVjaWFsaXplcmlzQnVpbHRpbm5ld0J1aWx0aW5WYXJpYW50aW5wdXRzQXJlTnVtaW5wdXRzQXJlUG9zaXRpdmVJbnRlZ2Vyc2lucHV0c0FyZVVJbnQzMUFkZFNwZWNpYWxpemVycmVnaXN0ZXJBZGREaXZpZGVTcGVjaWFsaXplcnJlZ2lzdGVyRGl2aWRlTW9kdWxvU3BlY2lhbGl6ZXJjYW5CZVBvc2l0aXZlWmVyb2luUGhpY2FuQmVOZWdhdGl2ZVplcm9yZWdpc3Rlck1vZHVsb1JlbWFpbmRlclNwZWNpYWxpemVycmVnaXN0ZXJSZW1haW5kZXJNdWx0aXBseVNwZWNpYWxpemVycmVnaXN0ZXJNdWx0aXBseVN1YnRyYWN0U3BlY2lhbGl6ZXJyZWdpc3RlclN1YnRyYWN0VHJ1bmNhdGluZ0RpdmlkZVNwZWNpYWxpemVyaGFzVWludDMxUmVzdWx0aXNOb3RaZXJvaXNUd29PckdyZWF0ZXJfdGRpdkZhc3RyZWdpc3RlclRydW5jYXRpbmdEaXZpZGVCaW5hcnlCaXRPcFNwZWNpYWxpemVyYXJndW1lbnRMZXNzVGhhbjMyYXJndW1lbnRJblJhbmdlU2hpZnRMZWZ0U3BlY2lhbGl6ZXJfc2hsUG9zaXRpdmVyZWdpc3RlclNoaWZ0TGVmdFNoaWZ0UmlnaHRTcGVjaWFsaXplcl9zaHJCb3RoUG9zaXRpdmVfc2hyUmVjZWl2ZXJQb3NpdGl2ZV9zaHJPdGhlclBvc2l0aXZlcmVnaXN0ZXJTaGlmdFJpZ2h0Qml0T3JTcGVjaWFsaXplcnJlZ2lzdGVyQml0T3JCaXRBbmRTcGVjaWFsaXplcnJlZ2lzdGVyQml0QW5kQml0WG9yU3BlY2lhbGl6ZXJyZWdpc3RlckJpdFhvclJlbGF0aW9uYWxTcGVjaWFsaXplckVxdWFsc1NwZWNpYWxpemVycmVnaXN0ZXJFcXVhbHNMZXNzU3BlY2lhbGl6ZXJyZWdpc3Rlckxlc3NHcmVhdGVyU3BlY2lhbGl6ZXJyZWdpc3RlckdyZWF0ZXJHcmVhdGVyRXF1YWxTcGVjaWFsaXplcnJlZ2lzdGVyR3JlYXRlckVxdWFsTGVzc0VxdWFsU3BlY2lhbGl6ZXJyZWdpc3Rlckxlc3NFcXVhbENvZGVVbml0QXRTcGVjaWFsaXplcl9jb2RlVW5pdEF0cmVnaXN0ZXJDb2RlVW5pdEF0Q29tcGFyZVRvU3BlY2lhbGl6ZXJyZWdpc3RlckNvbXBhcmVUb0lkZW1wb3RlbnRTdHJpbmdPcGVyYXRpb25TcGVjaWFsaXplclN1YnN0cmluZ1NwZWNpYWxpemVycmVnaXN0ZXJTdWJzdHJpbmdUcmltU3BlY2lhbGl6ZXJyZWdpc3RlclRyaW1QYXR0ZXJuTWF0Y2hTcGVjaWFsaXplcnJlZ2lzdGVyUGF0dGVybk1hdGNoUm91bmRTcGVjaWFsaXplcnJlZ2lzdGVyUm91bmRIVmFsaWRhdG9ya01heFZhbGlkYXRlZEluc3RydWN0aW9uTGlzdExlbmd0aHZpc2l0ZWVtYXJrSW52YWxpZGVtcHR5IGJsb2NrYmxvY2sgZW5kcyB3aXRoIG5vbi10YWlsIG5vZGUuSWYgbm9kZSB3aXRob3V0IHR3byBzdWNjZXNzb3JzQ29uZGl0aW9uYWwgbm9kZSB3aXRob3V0IHR3byBzdWNjZXNzb3JzYXZvaWRDcml0aWNhbEVkZ2VCbG9ja0NyaXRpY2FsIGVkZ2UgYmxvY2sgY29udGFpbnMgaW5zdHJ1Y3Rpb25zR290byBub2RlIHdpdGggbm90IGV4YWN0bHkgb25lIHN1Y2Nlc3NvckJyZWFrIG9yIGNvbnRpbnVlIG5vZGUgd2l0aG91dCBvbmUgc3VjY2Vzc29yUmV0dXJuIG9yIHRocm93IG5vZGUgd2l0aCA+IDEgc3VjY2Vzc29yIG9yIG5vdCBnb2luZyB0byBleGl0LWJsb2NrRXhpdCBibG9jayB3aXRoIHN1Y2Nlc3Nvck5vbi1leGl0IGJsb2NrIHdpdGhvdXQgc3VjY2Vzc29yYmxvY2sgd2l0aG91dCBpZHN1Y2Nlc3NvciB3aXRob3V0IGlkc3VjY2Vzc29yIHdpdGggbG93ZXIgaWQsIGJ1dCBub3QgYSBsb29wLWhlYWRlclNTQSBncmFwaCBjb250YWlucyBjcml0aWNhbCBlZGdlLmxhc3RJZGRvbWluYXRlZGRvbWluYXRlZCBibG9jayBub3QgcG9pbnRpbmcgYmFja2RvbWluYXRlZC5pZCA9PSBudWxsIG9yIGRvbWluYXRlZCBoYXMgPD0gaWREZWZpbml0aW9uIGRvZXMgbm90IGRvbWluYXRlIHVzZWNoZWNrSW5zdHJ1Y3Rpb25Db3VudGV2ZXJ5SW5zdHJ1Y3Rpb25oYXNDb3JyZWN0SW5wdXRzaW5CYXNpY0Jsb2NraGFzQ29ycmVjdFVzZXNJbnN0cnVjdGlvbiBpbiB3cm9uZyBibG9ja0luY29ycmVjdCBpbnB1dHNJbmNvcnJlY3QgdXNlc2VudGl0eV91dGlsc2NvbXBhcmVMaWJyYXJpZXNVcmlzYnlDYW5vbmljYWxVcmlQYXRoX2NvbXBhcmVDYW5vbmljYWxVcmlhU2VnbWVudHNiU2VnbWVudHNhSWJJYVNlZ21lbnRiU2VnbWVudGNvbXBhcmVTb3VyY2VVcmlzY29tcGFyZUVudGl0aWVzZWxlbWVudDFsaW5lMWNvbHVtbjFlbGVtZW50MmxpbmUyY29sdW1uMnJlY29uc3RydWN0Q29uc3RydWN0b3JOYW1lcmVjb25zdHJ1Y3RDb25zdHJ1Y3Rvck5hbWVTb3VyY2VTdHJpbmdvcGVyYXRvciRlcW9wZXJhdG9yJG5vdG9wZXJhdG9yJGluZGV4b3BlcmF0b3IkaW5kZXhTZXRvcGVyYXRvciRtdWxvcGVyYXRvciRkaXZvcGVyYXRvciRtb2RvcGVyYXRvciR0ZGl2b3BlcmF0b3IkYWRkb3BlcmF0b3Ikc2hsb3BlcmF0b3Ikc2hyb3BlcmF0b3Ikc2hydW9wZXJhdG9yJGdlb3BlcmF0b3IkZ3RvcGVyYXRvciRsZW9wZXJhdG9yJGx0b3BlcmF0b3IkYW5kb3BlcmF0b3IkeG9yb3BlcmF0b3Ikb3JvcGVyYXRvciRzdWJvcGVyYXRvciRuZWdhdGVjb25zdHJ1Y3RPcGVyYXRvck5hbWVPck51bGxpc1VuYXJ5Y29uc3RydWN0T3BlcmF0b3JOYW1lVW5oYW5kbGVkIG9wZXJhdG9yOiBkYXJ0MmpzLm9wZXJhdG9yc1VuYXJ5T3BlcmF0b3JLaW5kTk9UTkVHQVRFQ09NUExFTUVOVFVuYXJ5T3BlcmF0b3Jpc1VzZXJEZWZpbmFibGVmcm9tS2luZEJpbmFyeU9wZXJhdG9yS2luZE5PVF9FUUFERFNVQk1VTERJVklESVZNT0RTSExTSFJTSFJVR1RFUUxURVFBTkRPUlhPUklGX05VTExCaW5hcnlPcGVyYXRvcnBhcnNlVXNlckRlZmluYWJsZV9Ob3RFcXVhbHNPcGVyYXRvcl9Mb2dpY2FsT3BlcmF0b3JfSWZOdWxsT3BlcmF0b3JpbnZvY2F0aW9uTWlycm9yTWV0aG9kS2luZGludm9jYXRpb25NaXJyb3JHZXR0ZXJLaW5kaW52b2NhdGlvbk1pcnJvclNldHRlcktpbmRLQ2xvc2VkV29ybGRJbXBsZGFydDJqcy53b3JsZC5jbGFzc19zZXRJbmRleGVkQ2xhc3NGb3JFYWNoRnVuY3Rpb25JbnN0YW50aWF0aW9uLklORElSRUNUTFlfSU5TVEFOVElBVEVEVU5JTlNUQU5USUFURURESVJFQ1RMWV9JTlNUQU5USUFURURJTkRJUkVDVExZX0lOU1RBTlRJQVRFREFCU1RSQUNUTFlfSU5TVEFOVElBVEVEY2xhc3MtaGllcmFyY2h5LW5vZGVFWFBMSUNJVExZX0lOU1RBTlRJQVRFRF9sZWFzdFVwcGVySW5zdGFudGlhdGVkU3ViY2xhc3NfaW5zdGFudGlhdGVkU3ViY2xhc3NDb3VudF9kaXJlY3RTdWJjbGFzc2VzYWRkRGlyZWN0U3ViY2xhc3NpbmNsdWRlRGlyZWN0bHlJbnN0YW50aWF0ZWRpbmNsdWRlSW5kaXJlY3RseUluc3RhbnRpYXRlZGluY2x1ZGVVbmluc3RhbnRpYXRlZGluY2x1ZGVBYnN0cmFjdGx5SW5zdGFudGlhdGVkX3VwZGF0ZVBhcmVudEluc3RhbnRpYXRlZFN1YmNsYXNzQ291bnRfdXBkYXRlSW5zdGFudGlhdGVkU3ViY2xhc3NDb3VudGNoYW5nZWFmdGVybm9kZU1hcE5vIENsYXNzSGllcmFyY2h5Tm9kZSBmb3Igc3VwZXJjbGFzcyBtYXNrVmFsdWVkaXJlY3RTdWJjbGFzc2VzaW5jbHVkZVJvb3R3cmFwcGVybmV4dFN0ZXBzdWJGb3JFYWNoX2NvbXB1dGVMZWFzdFVwcGVySW5zdGFudGlhdGVkU3ViY2xhc3Npc1JlbGF0ZWRUb19zdWJjbGFzc2Fic3RyYWN0ICBpbmRpcmVjdGx5LApjbGFzcy1zZXRfbGVhc3RVcHBlckluc3RhbnRpYXRlZFN1YnR5cGVfc3VidHlwZXNfbWl4aW5BcHBsaWNhdGlvbnNtaXhpbkFwcGxpY2F0aW9uc25ld1N1YnR5cGVzYWRkZWRvdGhlclN1YnR5cGVvdGhlckhpZXJhcmNoeURlcHRoX2NvbXB1dGVMZWFzdFVwcGVySW5zdGFudGlhdGVkU3VidHlwZXN1Ym5vZGVbCiAgc3VidHlwZXM6CiAgbWl4aW4tYXBwbGljYXRpb25zOgpDbGFzc0hpZXJhcmNoeU5vZGVJdGVyYWJsZU5vIHJvb3QgZm9yIGl0ZXJhYmxlLkNsYXNzSGllcmFyY2h5Tm9kZUl0ZXJhdG9yX2ZpbmROZXh0X2lzVmFsaWRTdWJ0eXBlc0l0ZXJhYmxlU3VidHlwZXNJdGVyYXRvcmhpZXJhcmNoeU5vZGVzSXRlcmF0aW9uU3RlcFNUT1BTS0lQX1NVQkNMQVNTRVNDbGFzc0hpZXJhcmNoeU5vZGVzTWFwQ2xhc3NIaWVyYXJjaHlOb2Rlc01hcCBmb3IgQ2xhc3NIaWVyYXJjaHlOb2Rlc01hcC5rZXlzQ2xhc3NIaWVyYXJjaHlOb2Rlc01hcC5yZW1vdmVDbGFzc0hpZXJhcmNoeU5vZGVzTWFwLmNsZWFyZGFydDJqcy5qc19lbWl0dGVyLnNvcnRlclNvcnRlcmRhcnQyanMuY29uc3RhbnRzLmNvbnN0cnVjdG9yc0NvbnN0YW50Q29uc3RydWN0b3JLaW5kQ29uc3RhbnRDb25zdHJ1Y3RvcktpbmQuR0VORVJBVElWRUNvbnN0YW50Q29uc3RydWN0b3JLaW5kLlJFRElSRUNUSU5HX0dFTkVSQVRJVkVDb25zdGFudENvbnN0cnVjdG9yS2luZC5SRURJUkVDVElOR19GQUNUT1JZQ29uc3RhbnRDb25zdHJ1Y3RvcktpbmQuRVJST05FT1VTR0VORVJBVElWRVJFRElSRUNUSU5HX0dFTkVSQVRJVkVSRURJUkVDVElOR19GQUNUT1JZSW5zdGFuY2VEYXRhQ29uc3RhbnRDb25zdHJ1Y3RvckNvbnN0YW50Q29uc3RydWN0b3JWaXNpdG9ydmlzaXRHZW5lcmF0aXZldmlzaXRSZWRpcmVjdGluZ0dlbmVyYXRpdmV2aXNpdFJlZGlyZWN0aW5nRmFjdG9yeXZpc2l0RXJyb25lb3VzR2VuZXJhdGl2ZUNvbnN0YW50Q29uc3RydWN0b3JkZWZhdWx0VmFsdWVzc3VwZXJDb25zdHJ1Y3Rvckludm9jYXRpb25hcHBsaWVkSW5zdGFuY2VEYXRheyd0eXBlJzogLAogJ2RlZmF1bHQ6LAogJ2ZpZWxkOiwKICdjb25zdHJ1Y3RvcjogbWFwMW1hcDJhcHBseUluc3RhbmNlRGF0YWNvbnN0cnVjdG9ySW52b2NhdGlvbmFwcGxpZWRGaWVsZE1hcGFwcGxpZWRBc3NlcnRpb25zUmVkaXJlY3RpbmdHZW5lcmF0aXZlQ29uc3RhbnRDb25zdHJ1Y3RvcnRoaXNDb25zdHJ1Y3Rvckludm9jYXRpb24sCiAnY29uc3RydWN0b3InOiBSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdGFudENvbnN0cnVjdG9ydGFyZ2V0Q29uc3RydWN0b3JJbnZvY2F0aW9uJ2NvbnN0cnVjdG9yJzogRXJyb25lb3VzQ29uc3RhbnRDb25zdHJ1Y3RvckVycm9uZW91c0NvbnN0YW50Q29uc3RydWN0b3IuY29tcHV0ZUluc3RhbmNlVHlwZWRhcnQyanMuY29uc3RhbnRzLmV2YWx1YXRpb25lbmNsb3NpbmdDb25zdHJ1Y3RlZFR5cGVFdmFsdWF0aW9uRW52aXJvbm1lbnRCYXNlX3NwYW5uYWJsZVN0YWNrX2N1cnJlbnRseUV2YWx1YXRlZEZpZWxkc19zcGFubmFibGVOb3JtYWxpemVkQXJndW1lbnRzTm8gZGVmYXVsdCB2YWx1ZSBmb3IgbmFtZWQgYXJndW1lbnQgJ05vIHZhbHVlIGZvciBuYW1lZCBhcmd1bWVudCAnTm8gZGVmYXVsdCB2YWx1ZSBmb3IgcG9zaXRpb25hbCBhcmd1bWVudCBObyB2YWx1ZSBmb3IgcG9zaXRpb25hbCBhcmd1bWVudCBOb3JtYWxpemVkQXJndW1lbnRzW2RlZmF1bHRWYWx1ZXM9e30sY2FsbFN0cnVjdHVyZT1dXV9jYW5kaWRhdGVzX2NvbXB1dGVDb3ZhcmlhbmNlRml4ZXNfc3Vic3RpdHV0aW9uRm9yZ2V0Q2FuZGlkYXRlQXRfY3JlYXRlRm9yd2FyZGluZ1N0dWJpbnRlcmZhY2VQb3NpdGlvbmFsUGFyYW1ldGVyc2dldFBvc2l0aW9uYWxQYXJhbWV0ZXJzaW50ZXJmYWNlVHlwZVBhcmFtZXRlcnNjcmVhdGVTdHViSWZOZWVkZWRpc0ltcGxDcmVhdGVkY3JlYXRlSW1wbElmTmVlZGVkX2NyZWF0ZUZvcndhcmRpbmdJbXBsSWZOZWVkZWRvdGhlck1lbWJlcm90aGVyUG9zaXRpb25hbFBhcmFtZXRlcnNvdGhlclBhcmFtZXRlcnN1cGVyVHlwZVBhcmFtZXRlcm90aGVyVHlwZVBhcmFtZXRlcnNvdGhlclR5cGVQYXJhbWV0ZXJhZGRpdGlvbmFsU3Vic3RpdHV0aW9udGFyZ2V0VHlwZVBhcmFtZXRlcmdldFJlcXVpcmVkUGFyYW1ldGVyQ291bnRnZXRSZXR1cm5UeXBlZmluYWxUYXJnZXRfZ2V0Rm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldGZvcndhcmRpbmdTdHViZmFzdGEudHlwZXNpc1N1YnR5cGVPZktlcm5lbE51bGxhYmlsaXR5c051bGxhYmlsaXR5dE51bGxhYmlsaXR5aXNEeW5hbWljUmVsYXRlZGlzVm9pZFJlbGF0ZWRpc0Z1dHVyZU9yUmVsYXRlZGlzSW50ZXJmYWNlUmVsYXRlZGlzRnVuY3Rpb25SZWxhdGVkaXNUeXBlUGFyYW1ldGVyUmVsYXRlZGlzSW50ZXJzZWN0aW9uUmVsYXRlZGlzVHlwZWRlZlJlbGF0ZWRVbmhhbmRsZWQgdHlwZTogVW5oYW5kbGVkIHR5cGUgY29tYmluYXRpb246IGFyZVN1YnR5cGVzT2ZLZXJuZWxOdW1iZXJzIG9mIHR5cGUgYXJndW1lbnRzIGRvbid0IG1hdGNoIGlzU2FtZVR5cGVLZXJuZWxUeXBlUmVsYXRpb25pbnRlcnNlY3Rpb25OdWxsYWJpbGl0eWZ1dHVyZU9yTnVsbGFiaWxpdHlJc0ludGVyZmFjZVN1YnR5cGVPZmFzU3VwZXJ0eXBlSXNGdW5jdGlvblN1YnR5cGVPZnNUeXBlVmFyaWFibGVzdFR5cGVWYXJpYWJsZXN0eXBlVmFyaWFibGVTdWJzdGl0dXRpb25zZWNvbmRCb3VuZHNDaGVja05lZWRlZHNUeXBlVmFyaWFibGV0VHlwZVZhcmlhYmxlc1Bvc2l0aW9uYWx0UG9zaXRpb25hbHNOYW1lZHROYW1lZHNDb3VudHRDb3VudElzVHlwZVBhcmFtZXRlclN1YnR5cGVPZklzVHlwZWRlZlN1YnR5cGVPZklzRnV0dXJlT3JTdWJ0eXBlT2ZzRnV0dXJlT3JOdWxsYWJpbGl0eXRGdXR1cmVPcnRGdXR1cmVPck51bGxhYmlsaXR5SXNJbnRlcnNlY3Rpb25TdWJ0eXBlT2ZzSW50ZXJzZWN0aW9uc0ludGVyc2VjdGlvbk51bGxhYmlsaXR5dEludGVyc2VjdGlvbnRJbnRlcnNlY3Rpb25OdWxsYWJpbGl0eWZhc3RhLmlnbm9yZWRfcGFyc2VyX2Vycm9yc0RpcmVjdGl2ZUNvbnRleHREaXJlY3RpdmVTdGF0ZS5Vbmtub3duRGlyZWN0aXZlU3RhdGUuU2NyaXB0SW50ZXJuYWwgZXJyb3I6IFVuZXhwZWN0ZWQgc2NyaXB0IHRhZy5EaXJlY3RpdmVTdGF0ZS5QYXJ0T2ZEaXJlY3RpdmVTdGF0ZS5EZWNsYXJhdGlvbnNEaXJlY3RpdmVTdGF0ZS5JbXBvcnRBbmRFeHBvcnREaXJlY3RpdmVTdGF0ZS5QYXJ0RGlyZWN0aXZlU3RhdGUuTGlicmFyeURpcmVjdGl2ZVN0YXRlVW5rbm93bkltcG9ydEFuZEV4cG9ydERlY2xhcmF0aW9uc0ludGVybmFsIEVycm9yOiBzaG91bGQgbm90IGNhbGwgcGFyc2Ugc2hvdWxkIGltcGxlbWVudCBwYXJzZWZhc3RhLnBhcnNlci5sb29wX3N0YXRlT3V0c2lkZUxvb3BJbnNpZGVTd2l0Y2hJbnNpZGVMb29wZmluYWxUb2tlbnZhclRva2VuYWZ0ZXJGYWN0b3J5SW50ZXJuYWwgZXJyb3I6IFVuZXhwZWN0ZWQgc3RhdGljT3JDb3ZhcmlhbnQgJ0ludGVybmFsIGVycm9yOiBVbmV4cGVjdGVkIHZhckZpbmFsT3JDb25zdCAncmVwb3J0RXh0cmFuZW91c01vZGlmaWVycGFyc2VBYnN0cmFjdHBhcnNlQ29uc3RwYXJzZUNvdmFyaWFudHBhcnNlRXh0ZXJuYWxwYXJzZUZpbmFscGFyc2VMYXRlcGFyc2VSZXF1aXJlZHBhcnNlU3RhdGljcGFyc2VWYXJJbnRlcm5hbCBFcnJvcjogVW5oYW5kbGVkIG1vZGlmaWVyOiByZXBvcnRNb2RpZmllck91dE9mT3JkZXJyZXBvcnRDb25mbGljdGluZ01vZGlmaWVyc0ludGVybmFsIEVycm9yOiBVbmV4cGVjdGVkIHZhckZpbmFsT3JDb25zdDogSW50ZXJuYWwgRXJyb3I6IFVuaGFuZGxlZCByZWNvdmVyeTogZWFybGllck1vZGlmaWVyYmVmb3JlTW9kaWZpZXJfVG9rZW5TdHJlYW1SZXdyaXRlciZPYmplY3QmX1Rva2VuU3RyZWFtTWl4aW5uZXdUb2tlblR5cGV1c2UgaW5zZXJ0U3ludGhldGljS2V5d29yZCBpbnN0ZWFkaW5jbHVkZUlkZW50aWZpZXJyZXBsYWNlbWVudFRva2VucmVwbGFjZWRUb2tlbl9sYXN0VG9rZW5JbkNoYWluX1Rva2VuU3RyZWFtR2hvc3RXcml0ZXImT2JqZWN0Jl9Ub2tlblN0cmVhbU1peGluVG9rZW5TdHJlYW1HaG9zdFdyaXRlcnJpZ2h0UGFyZW5uZXdFbmRHcm91cF9Ub2tlblN0cmVhbU1peGluZmFzdGEucGFyc2VyLnR5cGVfaW5mb3BhcnNlVHlwZU5vdFZvaWRpc1NpbXBsZVR5cGVBcmd1bWVudCBpcyBub3QgYSBTaW1wbGVUeXBlQXJndW1lbnQuaXNHZW5lcmFsaXplZEZ1bmN0aW9uVHlwZWNvbXB1dGVCdWlsdGluT3JWYXJBc1R5cGVjb21wdXRlUHJlZml4ZWRUeXBlY29tcHV0ZVZvaWRHRlRjb21wdXRlTm9UeXBlR0ZUY29tcHV0ZVNpbXBsZVdpdGhUeXBlQXJndW1lbnRzY29tcHV0ZUlkZW50aWZpZXJHRlRjb21wdXRlSWRlbnRpZmllclF1ZXN0aW9uR0ZUY29tcHV0ZUNhdGNoUGFyYW1ldGVySWRlbnRpZmllckNvbnRleHRDbGFzc09yTWl4aW5PckV4dGVuc2lvbklkZW50aWZpZXJDb250ZXh0Q29tYmluYXRvcklkZW50aWZpZXJDb250ZXh0Q29uc3RydWN0b3JSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dGNvbnRpbnVhdGlvbkFmdGVyVHlwZUFyZ3VtZW50c0RvdHRlZE5hbWVJZGVudGlmaWVyQ29udGV4dEVudW1EZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0RW51bVZhbHVlRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dEV4cHJlc3Npb25JZGVudGlmaWVyQ29udGV4dEZpZWxkRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dEZpZWxkSW5pdGlhbGl6ZXJJZGVudGlmaWVyQ29udGV4dEZvcm1hbFBhcmFtZXRlckRlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHRJbXBvcnRQcmVmaXhJZGVudGlmaWVyQ29udGV4dExpdGVyYWxTeW1ib2xJZGVudGlmaWVyQ29udGV4dExvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0TGFiZWxEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0TGFiZWxSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dExpYnJhcnlJZGVudGlmaWVyQ29udGV4dExvY2FsVmFyaWFibGVEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0TWV0YWRhdGFSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dE1ldGhvZERlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHROYW1lZEFyZ3VtZW50UmVmZXJlbmNlSWRlbnRpZmllckNvbnRleHRUb3BMZXZlbERlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHRmb2xsb3dpbmdWYWx1ZXNUeXBlZGVmRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dFR5cGVSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dHByZWZpeGVkVHlwZVZhcmlhYmxlRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dGNoZWNrQXN5bmNBd2FpdFlpZWxkQXNJZGVudGlmaWVybG9va3NMaWtlU3RhcnRPZk5leHRDbGFzc01lbWJlcmxvb2tzTGlrZVN0YXJ0T2ZOZXh0VG9wTGV2ZWxEZWNsYXJhdGlvbmRhcnQyanMuanNfZW1pdHRlci5wcm9ncmFtX2J1aWxkZXJDbGFzc1N0dWJHZW5lcmF0b3JJbnN0YW50aWF0aW9uU3R1YkdlbmVyYXRvckludGVyY2VwdG9yU3R1YkdlbmVyYXRvck1haW5DYWxsU3R1YkdlbmVyYXRvclBhcmFtZXRlclN0dWJHZW5lcmF0b3JSdW50aW1lVHlwZUdlbmVyYXRvclR5cGVUZXN0UHJvcGVydGllc2NvbGxlY3Rvci5kYXJ0ZmllbGRfdmlzaXRvci5kYXJ0cmVnaXN0cnkuZGFydEFjY2VwdEZpZWxkYWNjZXNzb3JOYW1lbmVlZHNHZXR0ZXJuZWVkc1NldHRlcm5lZWRzQ2hlY2tlZFNldHRlclByb2dyYW1CdWlsZGVyX2NvZGVnZW5Xb3JsZF9ydGlDaGVja3NfcnRpUmVjaXBlRW5jb2Rlcl9nZW5lcmF0ZWRDb2RlX3J0aU5lZWRlZENsYXNzZXNfc3RvcmVGdW5jdGlvblR5cGVzSW5NZXRhZGF0YV9sYXRlTmFtZWRUeXBlVmFyaWFibGVzTmV3UnRpX291dHB1dHNfY29uc3RhbnRzX3VubmVlZGVkTmF0aXZlQ2xhc3Nlc19ub3RTb2Z0RGVmZXJyZWRidWlsZFByb2dyYW1zdG9yZUZ1bmN0aW9uVHlwZXNJbk1ldGFkYXRhX2luaXRpYWxpemVTb2Z0RGVmZXJyZWRNYXByZWdpc3Rlck91dHB1dFVuaXRvdXRwdXRDbGFzc0xpc3RzcmVnaXN0ZXJDbGFzc2Vzb3V0cHV0U3RhdGljTGlzdHNyZWdpc3Rlck1lbWJlcnNvdXRwdXRDb25zdGFudExpc3RzX3JlZ2lzdGVyQ29uc3RhbnRzb3V0cHV0U3RhdGljTm9uRmluYWxGaWVsZExpc3RzX3JlZ2lzdGVyU3RhdGljU3RhdGVIb2xkZXJfYnVpbGRDbGFzc3NldFN1cGVyY2xhc3NObyBDbGFzcyBmb3IgaGFzIGJlZW4gY3JlYXRlZCBmb3Igc3VwZXJjbGFzcyBpc1NpbXBsZU1peGluQXBwbGljYXRpb25lZmZlY3RpdmVNaXhpbkNsYXNzc2V0TWl4aW5DbGFzc05vIGNsYXNzIGZvciBlZmZlY3RpdmUgbWl4aW4gaW50ZXJjZXB0b3JDbGFzc2VzTmVlZGVkQnlDb25zdGFudHNjb21wdXRlSW50ZXJjZXB0b3JzUmVmZXJlbmNlZEZyb21Db25zdGFudHNwcmVwYXJlTmF0aXZlQ2xhc3Nlc19hZGRKc0ludGVyb3BTdHVic21haW5MaWJyYXJpZXNNYXBtYWluRnJhZ21lbnRfYnVpbGRNYWluRnJhZ21lbnRkZWZlcnJlZEZyYWdtZW50c2RlZmVycmVkTGlicmFyaWVzTWFwX2J1aWxkRGVmZXJyZWRGcmFnbWVudGxpYnJhcmllc01hcENvdW50X21hcmtFYWdlckNsYXNzZXNhc3NvY2lhdGVOYW1lZFR5cGVWYXJpYWJsZXNOZXdSdGlob2xkZXJzbmVlZHNOYXRpdmVTdXBwb3J0ZmluYWxpemVyc25hbWluZ0ZpbmFsaXplcl9idWlsZExvYWRNYXBfYnVpbGRUeXBlVG9JbnRlcmNlcHRvck1hcG91dHB1dENvbnRhaW5zQ29uc3RhbnRMaXN0aGFzU29mdERlZmVycmVkQ2xhc3Nlc19tYXJrRWFnZXJJbnRlcmNlcHRvckNsYXNzZXNhbGxvY2F0ZWRDbGFzc2VzUGF0aGJsYWNrTGlzdGRhcnQ6dHlwZWRfZGF0YV9pbXBsZW1lbnRhdGlvblByb2ZpbGUgZmlsZSBkb2VzIG5vdCBleGlzdDogUHJvZmlsZSBpbmZvcm1hdGlvbiAoYWxsb2NhdGVkIGNsYXNzZXMpIGlzIGVtcHR5LnJlYWRBc1N0cmluZ1N5bmNhbGxvY2F0ZWRDbGFzc2VzS2V5c2FsbG9jYXRlZENsYXNzZXNsb2FkTWFwc3R1YkdlbmVyYXRvcmdlbmVyYXRlVHlwZVRvSW50ZXJjZXB0b3JNYXBsaWJyYXJpZXNNYXBfYnVpbGRJbnZva2VNYWluX2J1aWxkTGlicmFyaWVzX2J1aWxkU3RhdGljTm9uRmluYWxGaWVsZHNfYnVpbGRTdGF0aWNMYXppbHlJbml0aWFsaXplZEZpZWxkc19idWlsZENvbnN0YW50c2NvbnN0YW50VmFsdWVzc3RhdGljTm9uRmluYWxGaWVsZHNfYnVpbGRTdGF0aWNGaWVsZHJlZ2lzdGVySG9sZGVyaXNDb25zdGFudHNIb2xkZXJpc0luaXRpYWxpemVkQnlDb25zdGFudGxhenlGaWVsZHNfYnVpbGRMYXp5RmllbGRfYnVpbGRMaWJyYXJ5dG9TdHJpbmdJbnZvY2F0aW9uY2FsbFN0dWJzX2J1aWxkU3R1Yk1ldGhvZGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy4jKHRoaXMpIH1zdHViTmFtZXNjbGFzc0VsZW1lbnRzc3R1Yk5hbWVmdW5jdGlvbihvYmopIHsgcmV0dXJuIG9iai4jIH1mdW5jdGlvbihvYmosIHYpIHsgcmV0dXJuIG9iai4jID0gdiB9aXNGdW5jdGlvbkxpa2VtaW5BcmdzbWF4QXJnc2Z1bmN0aW9uKHJlY2VpdmVyLCAjKSB7IHJldHVybiByZWNlaXZlci4jKCMpIH1tZW1iZXJFbGVtZW50c3N0YXRpY3NfYnVpbGRTdGF0aWNNZXRob2RfZ2VuZXJhdGVHZXRJbnRlcmNlcHRvck1ldGhvZHNfZ2VuZXJhdGVPbmVTaG90SW50ZXJjZXB0b3JzdmlzaXRTdGF0aWNzc3RhdGljRmllbGRzRm9yUmVmbGVjdGlvbl9idWlsZEZpZWxkc19pc1NvZnREZWZlcnJlZG9ubHlGb3JSdGljbGFzc2VzT25seU5lZWRlZEZvclJ0aWhhc1J0aUZpZWxkaXNDbG9zdXJlQmFzZUNsYXNzY2xhc3NTdHViR2VuZXJhdG9ycnVudGltZVR5cGVHZW5lcmF0b3J2aXNpdEluc3RhbmNlTWVtYmVyX2J1aWxkTWV0aG9kY2FsbFN0dWJzRm9yTWVtYmVyZ2VuZXJhdGVDYWxsU3R1YnNGb3JHZXR0ZXJ2aXNpdE1lbWJlcm5vU3VjaE1ldGhvZFN0dWJzY29tcHV0ZVNlbGVjdG9yc0Zvck5zbUhhbmRsZXJzZ2VuZXJhdGVTdHViRm9yTm9TdWNoTWV0aG9kZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9X2dlbmVyYXRlSW5zdGFudGlhdGlvblN0dWJzaW5zdGFuY2VGaWVsZHNpc0hvbGRlckludGVyY2VwdGVkQ2xhc3N0eXBlVGVzdHNnZW5lcmF0ZUlzVGVzdHNzdG9yZUZ1bmN0aW9uVHlwZUluTWV0YWRhdGFjaGVja2VkU2V0dGVyc2ZvckVhY2hQcm9wZXJ0eW5lZWRzVW5jaGVja2VkU2V0dGVyTm8gc2V0dGVyIGNvZGUgZm9yIGZpZWxkOiBmdW5jdGlvbigpIHt9aG9sZGVyTmFtZWZ1bmN0aW9uVHlwZUluZGV4aXNTb2Z0RGVmZXJyZWRfbWV0aG9kTmVlZHNTdHVic19tZXRob2RDYW5CZUFwcGxpZWRfY29tcHV0ZVBhcmFtZXRlckRlZmF1bHRWYWx1ZXNvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXNjYW5UZWFyT2ZmdGVhck9mZk5hbWVpc0Nsb3N1cmVDYWxsTWV0aG9kaXNOb3RBcHBseVRhcmdldGNhbkJlQXBwbGllZGFsaWFzTmFtZW1lbWJlclR5cGVfZ2VuZXJhdGVGdW5jdGlvblR5cGVhcHBseUluZGV4X2dlbmVyYXRlUGFyYW1ldGVyU3R1YnNuZWVkc1RlYXJPZmZ0aGlzQWNjZXNzdGhpcy4kcmVjZWl2ZXJyZWlmeVR5cGVnZW5lcmF0ZVBhcmFtZXRlclN0dWJzaW5zdGFudGlhdGlvbkNsYXNzZ2VuZXJhdGVTdHVic2ludGVyY2VwdG9yTWFwRHVwbGljYXRlIHNwZWNpYWxpemVkIGdldCBpbnRlcmNlcHRvciBmb3IgOiBFeGlzdGluZzogLCBuZXcgZ2VuZXJhdGVHZXRJbnRlcmNlcHRvck1ldGhvZGdldHRlckZsYWdzc2V0dGVyRmxhZ3Npbml0aWFsaXplckluQWxsb2NhdG9ydmlzaXRGaWVsZHNnZW5lcmF0ZU9uZVNob3RJbnRlcmNlcHRvcmlzQXBwbHlUYXJnZXRyZWdpc3RlckNvbnN0YW50Y29uc3RhbnRPYmplY3Rpc1N0YXRpY1N0YXRlSG9sZGVyQ29sbGVjdG9yb3V0cHV0TGlicmFyeUxpc3RzaW50ZXJjZXB0b3JDb25zdGFudGNvbXB1dGVDbGFzc0ZpbHRlcmJhY2tlbmRUeXBlSGVscGVyc3VubmVlZGVkQ2xhc3Nlc25lZWRlZGdldEJhY2tlbmRUeXBlSGVscGVyc2NvbXB1dGVOZWVkZWRDb25zdGFudHNjb25zdGFudFVuaXRjb21wdXRlTmVlZGVkRGVjbGFyYXRpb25zYWRkQ2xhc3NXaXRoU3VwZXJjbGFzc2VzYWRkQ2xhc3Nlc1dpdGhTdXBlcmNsYXNzZXNtaXhpbkNsYXNzZXNzb3J0ZWRDbGFzc2VzY29tcHV0ZU5lZWRlZFN0YXRpY3Npc1N0YXRpY0Z1bmN0aW9uY29tcHV0ZU5lZWRlZFN0YXRpY05vbkZpbmFsRmllbGRzYWRkVG9PdXRwdXRVbml0ZWFnZXJGaWVsZHNhRmllbGREYXRhYkZpZWxkRGF0YWFJbmRleGJJbmRleGNvbXB1dGVOZWVkZWRMaWJyYXJpZXNGaWVsZFZpc2l0b3Jpc0xpYnJhcnlFeHBlY3RlZCBhIENsYXNzRW50aXR5IG9yIGEgTGlicmFyeUVudGl0eS5pc01peGluTmF0aXZlRmllbGRmaWVsZE5lZWRzR2V0dGVyZmllbGROZWVkc1NldHRlcmNhbkF2b2lkR2VuZXJhdGVkQ2hlY2tlZFNldHRlcmZpZWxkQWNjZXNzTmV2ZXJUaHJvd3NMaWJyYXJ5Q29udGVudHNMaWJyYXJpZXNNYXBfbGFzdExpYnJhcnlfbGFzdE1hcHBpbmdfZ2V0TWFwcGluZ1JlZ2lzdHJ5X2hvbGRlcnNNYXBfZGVmZXJyZWRMaWJyYXJpZXNNYXBfbGFzdE91dHB1dFVuaXRfbGFzdExpYnJhcmllc01hcF9tYXBVbml0VG9MaWJyYXJpZXNNYXB0YXJnZXRVbml0dGFyZ2V0TGlicmFyaWVzTWFwZGFydDJqcy5qc19lbWl0dGVyLnN0YXJ0dXBfZW1pdHRlck1vZHVsYXJFbWl0dGVyQmFzZWdsb2JhbFByb3BlcnR5QWNjZXNzRm9yQ2xhc3NwYWdsb2JhbFByb3BlcnR5QWNjZXNzRm9yVHlwZWdsb2JhbFByb3BlcnR5QWNjZXNzRm9yTWVtYmVyIy5wcm90b3R5cGVpbml0Ll9jb25zdGFudEVtaXR0ZXJnZW5lcmF0ZUVtaXR0ZXJJbXBsc2hvdWxkR2VuZXJhdGVTb3VyY2VNYXBidWlsZCBwcm9ncmFtZW1pdCBwcm9ncmFtZ2VuZXJhdGVDb25zdGFudFJlZmVyZW5jZW9taXR0ZWRGcmFnbWVudHNvdXRwdXRCdWZmZXJzZGFydDJqcy5qc19lbWl0dGVyLm1ldGFkYXRhX2NvbGxlY3RvcmpzX3ByZWNlZGVuY2VfTWV0YWRhdGFFbnRyeV9Cb3VuZE1ldGFkYXRhRW50cnlfQm91bmRNZXRhZGF0YUVudHJ5KCxyYz0sX3ZhbHVlPV9NZXRhZGF0YUxpc3RzZXRFeHByZXNzaW9uX21ldGFkYXRhVG9rZW5zX21ldGFkYXRhTWFwX3R5cGVzVG9rZW5zX3R5cGVzTWFwZ2V0TWV0YWRhdGFGb3JPdXRwdXRVbml0Z2V0VHlwZXNGb3JPdXRwdXRVbml0cmVpZnlEZWZhdWx0QXJndW1lbnRzX2FkZEdsb2JhbE1ldGFkYXRhYWRkVHlwZUluT3V0cHV0VW5pdHJlaWZ5TmFtZXJlaWZ5RXhwcmVzc2lvbm5hbWVUb0tleXByaW50ZWRfY29tcHV0ZVR5cGVSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24gZm9yIHR5cGUgdmFyaWFibGUgIGlzIG5vdCBzdXBwb3J0ZWQucmVpZmllZCB0eXBlcyBzaG91bGQgbm90IGJlIHN0cmluZ3MuX2NvbXB1dGVUeXBlUmVwcmVzZW50YXRpb25OZXdSdGljb3VudFRva2Vuc0luVHlwZXNmaW5hbGl6ZU1hcG1ldGFkYXRhTWFwdHlwZXNNYXBkYXJ0MmpzLm5ld19qc19lbWl0dGVyLm1vZGVsbm9kZVRvU3RyaW5nUHJvZ3JhbXR5cGVUb0ludGVyY2VwdG9yTWFwX21ldGFkYXRhQ29sbGVjdG9ybWV0YWRhdGFGb3JPdXRwdXRVbml0bWV0YWRhdGFUeXBlc0Zvck91dHB1dFVuaXRpc1NwbGl0SG9sZGVySG9sZGVyKG5hbWU9RnJhZ21lbnRzdGF0aWNMYXppbHlJbml0aWFsaXplZEZpZWxkc291dHB1dEZpbGVOYW1laXNNYWluRnJhZ21lbnRNYWluRnJhZ21lbnRpbnZva2VNYWluTWFpbkZyYWdtZW50KClEZWZlcnJlZEZyYWdtZW50RGVmZXJyZWRGcmFnbWVudChuYW1lPUNvbnN0YW50KG5hbWU9RmllbGRDb250YWluZXJMaWJyYXJ5KHVyaT0sZWxlbWVudD1TdGF0aWNGaWVsZChuYW1lPV9zdXBlcmNsYXNzX21peGluQ2xhc3NjbGFzc0NoZWNrc05ld1J0aW5hdGl2ZUxlYWZUYWdzbmF0aXZlTm9uTGVhZlRhZ3NuYXRpdmVFeHRlbnNpb25zc3VwZXJjbGFzc05hbWVzdXBlcmNsYXNzSG9sZGVySW5kZXhDbGFzcyhuYW1lPU1peGluQXBwbGljYXRpb25NaXhpbihuYW1lPW5lZWRzSW50ZXJjZXB0ZWRHZXR0ZXJuZWVkc0ludGVyY2VwdGVkU2V0dGVybmVlZHNJbnRlcmNlcHRlZEdldHRlck9uUmVjZWl2ZXJuZWVkc0ludGVyY2VwdGVkU2V0dGVyT25SZWNlaXZlcm5lZWRzSW50ZXJjZXB0ZWRHZXR0ZXJPblRoaXNuZWVkc0ludGVyY2VwdGVkU2V0dGVyT25UaGlzRmllbGQobmFtZT1EYXJ0TWV0aG9kcGFyYW1ldGVyU3R1YnNJbnN0YW5jZU1ldGhvZEluc3RhbmNlTWV0aG9kKG5hbWU9LGNvZGU9U3R1Yk1ldGhvZFN0dWJNZXRob2QobmFtZT1QYXJhbWV0ZXJTdHViTWV0aG9kUGFyYW1ldGVyU3R1Yk1ldGhvZChuYW1lPSwgY2FsbE5hbWU9LCBjb2RlPVN0YXRpY0RhcnRNZXRob2RTdGF0aWNEYXJ0TWV0aG9kKG5hbWU9U3RhdGljU3R1Yk1ldGhvZFN0YXRpY1N0dWJNZXRob2QobmFtZT1kYXJ0MmpzLmpzX2VtaXR0ZXIubmF0aXZlX2VtaXR0ZXJoYXNOYXRpdmVDbGFzc2VzY2xhc3Nlc05lZWRlZEZvclJ0aXByZU9yZGVyd2Fsa25vbkxlYWZDbGFzc2VzZXh0ZW5zaW9uUG9pbnRzY29tcHV0ZUV4dGVuc2lvblBvaW50c2lzVHJpdmlhbENsYXNzbGVhZlRhZ3Nub25sZWFmVGFnc25hdGl2ZVRhZ3NzdWZmaWNpbmdJbnRlcmNlcHRvcmZpbGxOYXRpdmVJbmZvbmF0aXZlQW5jZXN0b3JPZm5hdGl2ZUFuY2VzdG9ybmVlZHNBY2Nlc3NvcnBvdGVudGlhbGx5Q29udmVydERhcnRDbG9zdXJlc1RvSnNzdHViUGFyYW1ldGVyc3N0dWJQYXJhbWV0ZXIjID0gIygjLCBnZW5lcmF0ZVBhcmFtZXRlclN0dWJTdGF0ZW1lbnRzYXJndW1lbnRzQnVmZmVyaW5kZXhPZkxhc3RPcHRpb25hbEFyZ3VtZW50SW5QYXJhbWV0ZXJzcmV0dXJuICMuIygjKWlzU3VwZXJ0eXBlT2ZOYXRpdmVDbGFzc3JlcXVpcmVzTmF0aXZlSXNDaGVja2RhcnQyanMuanNfZW1pdHRlci50eXBlX3Rlc3RfcmVnaXN0cnlSdW50aW1lVHlwZXNDaGVja3MgaGFzIG5vdCBiZWVuIGNvbXB1dGVkIHlldC5ydGlOZWVkZWRDbGFzc2VzIGhhcyBub3QgYmVlbiBjb21wdXRlZCB5ZXQubGl2ZU1lbWJlcnNfSW5kZXhlZEluZGV4ZWRMaWJyYXJ5SW5kZXhlZE1lbWJlckluZGV4ZWRGdW5jdGlvbkluZGV4ZWRDb25zdHJ1Y3RvckluZGV4ZWRGaWVsZEluZGV4ZWRUeXBlVmFyaWFibGVJbmRleGVkVHlwZWRlZkluZGV4ZWRMb2NhbEVudGl0eU1hcEJhc2VFbnRpdHlNYXBFMFRyeWluZyB0byByZWdpc3RlciAgd2hlbiBjbG9zZWQuRW50aXR5RGF0YU1hcEJhc2VEYXRhIGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGNyZWF0ZWQgZm9yIEVudGl0eURhdGFNYXBEMERhdGEgbGlzdCBsZW5ndGggIGluY29uc2lzdGVudCB3aXRoIGVudGl0eSBsaXN0IGxlbmd0aCBEYXRhIGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGNyZWF0ZWQuRW50aXR5RGF0YUVudk1hcEJhc2VFbnYgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgY3JlYXRlZCBmb3IgRW50aXR5RGF0YUVudk1hcFYwRW52IGxpc3QgbGVuZ3RoIEVudiBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBjcmVhdGVkLlJlcG9ydEVycm9yRnVuY3Rpb25EYXJ0MmpzQ29uc3RhbnRFdmFsdWF0b3Jfc3VwcG9ydFJlZXZhbHVhdGlvbkZvclRlc3RpbmdyZXF1aXJlc0NvbnN0YW50c3VwcG9ydFJlZXZhbHVhdGlvbkZvclRlc3RpbmdJbnZhbGlkIGNvbnN0YW50IHJlc3VsdCBVbmV2YWx1YXRlZENvbnN0YW50RmluZGVyQ29uc3RhbnRSZWZlcmVuY2VDb25zdGFudFJlZmVyZW5jZS52aXNpdENoaWxkcmVuQ29uc3RhbnRSZWZlcmVuY2UuYWNjZXB0Q29uc3RhbnRSZWZlcmVuY2UudHJhbnNmb3JtQ2hpbGRyZW5Db25zdGFudFJlZmVyZW5jZShjb25zdGFudD1Eb2VzTm90Q29tcGxldGVUeXBlRG9lc05vdENvbXBsZXRlVHlwZSgpVGhpc0ludGVyZmFjZVR5cGVFeGFjdEludGVyZmFjZVR5cGVTdGF0aWNUeXBlQmFzZXJld3JpdGVfYXN5bmNlcnJvcl9jb2Rlc0FzeW5jUmV3cml0ZXJCYXNlbG9jYWxWYXJpYWJsZXNjb250aW51ZUxhYmVsc2JyZWFrTGFiZWxzZmluYWxseUxhYmVsc2hhbmRsZXJMYWJlbHNleGl0TGFiZWxyZXRocm93TGFiZWxjb250aW51ZVN0YWNrYnJlYWtTdGFja3JldHVyblN0YWNrdmFyaWFibGVSZW5hbWluZ3NhbmFseXNpc3Jlc3VsdE5hbWVlcnJvckNvZGVOYW1lZ290b05hbWVoYW5kbGVyTmFtZWhhc0hhbmRsZXJMYWJlbHNuZXh0TmFtZXJldHVyblZhbHVlTmFtZWN1cnJlbnRFcnJvck5hbWVvdXRlckxhYmVsTmFtZXNlbGZOYW1ldHlwZUFyZ3VtZW50TmFtZXNfY3VycmVudExhYmVsY3VycmVudFRlbXBWYXJJbmRleHRlbXBWYXJIaWdoV2F0ZXJNYXJrdGVtcFZhck5hbWVzbGFiZWxsZWRQYXJ0c2xhYmVsQ29tbWVudHNoYXNUcnlCbG9ja3NpbnNpZGVVbnRyYW5zbGF0ZWRCcmVha2FibGVoYXNKdW1wVGhvdWdoT3V0ZXJMYWJlbG5lZWRzUmV0aHJvd2N1cnJlbnRTdGF0ZW1lbnRCdWZmZXJjdXJyZW50RXJyb3Jpc1N5bmNTdGFyaXNBc3luY1N0YXJpbml0aWFsaXplTmFtZXNyZXdyaXRlRnVuY3Rpb25jdXJyZW50RXJyb3JIYW5kbGVyYWxsb2NhdGVUZW1wVmFydXNlVGVtcFZhcnNhZmVOYW1lcHJvY2Vzc1R5cGVBcmd1bWVudHNuZXdMYWJlbGJlZ2luTGFiZWxzZXRHb3RvVmFyaWFibGVnb3RvQW5kQnJlYWtnb3RvIGFkZEV4cHJlc3Npb25TdGF0ZW1lbnRzaG91bGRUcmFuc2Zvcm1oYXNBd2FpdE9yWWllbGROb2RlICBjYW5ub3QgYmUgdHJhbnNmb3JtZWQgYnkgdGhlIGF3YWl0LXN5bmMgdHJhbnNmb3JtZXJJbnRlcm5hbCBlcnJvciwgdHJ5aW5nIHRvIHZpc2l0IHZpc2l0U3RhdGVtZW50dmlzaXRFeHByZXNzaW9uSWdub3JlUmVzdWx0dmlzaXRFeHByZXNzaW9uX3N0b3JlSWZOZWNlc3NhcnkjID0gIzt3aXRoRXhwcmVzc2lvbnN0b3Jlb2xkVGVtcFZhckluZGV4d2l0aENhbGxUYXJnZXRFeHByZXNzaW9uc3RvcmVkSWZOZWVkZWR3aXRoRXhwcmVzc2lvbjJ3aXRoRXhwcmVzc2lvbnNsYXN0VHJhbnNmb3JtSW5kZXhhZGRTdWNjZXNzRXhpdGFkZEVycm9yRXhpdGFkZEZ1bmN0aW9uRXhpdHNyZXdyaXR0ZW5Cb2R5dmFyaWFibGVEZWNsYXJhdGlvbnNmdW5jdGlvblNvdXJjZUluZm9ybWF0aW9udmFyaWFibGVJbml0aWFsaXphdGlvbnNGdW5jdGlvbiBzdGFydGhhc0V4cGxpY2l0UmV0dXJuc2NsYXVzZXN3aGlsZSAodHJ1ZSkgeyN9aGFzRmluYWxseWhhc1lpZWxkTmVzdGVkIGZ1bmN0aW9uIGlzIGEgZ2VuZXJhdG9yIG9yIGFzeW5jaHJvbm91cy4jWyNdZXZhbHVhdGVkVW5leHBlY3RlZCBhc3NpZ25tZW50IGxlZnQgaGFuZCBzaWRlIGF3YWl0U3RhdGVtZW50YWZ0ZXJBd2FpdHJldHVybmluZyBmcm9tIGF3YWl0LmlzUmVzdWx0dGhlbkxhYmVsam9pbkxhYmVsYXNzaWduTGVmdGlmICgjKSB7I30gZWxzZSAjdHJhbnNsYXRlSnVtcHN0b3JlVGFyZ2V0IyA/ICMgOiAjZWxzZUxhYmVsIyA9ICMgPyAjIDogIztqdW1wU3RhY2tmaXJzdFRhcmdldGpzSnVtcFN0YWNrb2xkSW5zaWRlVW50cmFuc2xhdGVkQnJlYWthYmxlZG8geyN9IHdoaWxlICgjKXRyYW5zbGF0ZVRvU3RhdGVtZW50c3RhcnRMYWJlbGRvIGJvZHljb250aW51ZUxhYmVsZG8gY29uZGl0aW9uYWZ0ZXJMYWJlbGFmdGVyIGRvaWYgKCMpICNvbGRJbnNpZGVVbnRyYW5zbGF0ZWRmb3IgY29uZGl0aW9uZm9yIHVwZGF0ZWFmdGVyIGZvcnRyaXZpYWwgY29uZGl0aW9uSmF2YXNjcmlwdCBmb3ItaW4gbm90IGltcGxlbWVudGVkIHlldCBpbiB0aGUgYXdhaXQgdHJhbnNmb3JtYXRpb250cmFuc2xhdGVUb1N0YXRlbWVudFNlcXVlbmNlb2xkQnVmZmVycmVzdWx0QnVmZmVydHJhbnNsYXRlVG9CbG9ja3RyYW5zbGF0ZWRUaGVudHJhbnNsYXRlZEVsc2VicmVha0xhYmVsVW5leHBlY3RlZCBwb3N0Zml4IG9wZXJhdG9yIGFyZ3VtZW50IFVuZXhwZWN0ZWQgcHJlZml4ICBvcGVyYXRvciBjbGF1c2VhZnRlciBzd2l0Y2hhbnlDYXNlRXhwcmVzc2lvblRyYW5zZm9ybWVkZGVmYXVsdEluZGV4VW5rbm93biBjbGF1c2UgdHlwZSBzZXRFcnJvckhhbmRsZXJfZmluYWxsaWVzVXBUb0FuZEVuY2xvc2luZ0hhbmRsZXJoYW5kbGVyTGFiZWxmaW5hbGx5TGFiZWx1bmNhdWdodExhYmVsdW5jYXVnaHRhZnRlckZpbmFsbHlMYWJlbGFmdGVyIGZpbmFsbHkjLnB1c2goIyk7ZXJyb3JSZW5hbWVlbmNsb3NpbmdGaW5hbGxpZXNuZXh0TGFiZWwvLyBnb3RvIHRoZSBuZXh0IGZpbmFsbHkgaGFuZGxlciMgPSAjLnBvcCgpO2luaXRpYWxpemF0aW9ucmVuYW1pbmd3aGlsZSBjb25kaXRpb25hZnRlciB3aGlsZWFkZFlpZWxkYWZ0ZXIgeWllbGRBc3luY1Jld3JpdGVyY29tcGxldGVyTmFtZWNvbXBsZXRlcllpZWxkIGluIG5vbi1nZW5lcmF0aW5nIGFzeW5jIGZ1bmN0aW9udGhlbkhlbHBlckNhbGwjdGhlbkhlbHBlcigjY3VycmVudEVycm9yLCAjY29tcGxldGVyKXRoZW5IZWxwZXJpbXBsaWNpdCByZXR1cm5ydW50aW1lSGVscGVyQ2FsbCNydW50aW1lSGVscGVyKCNyZXR1cm5WYWx1ZSwgI2NvbXBsZXRlcilydW50aW1lSGVscGVyYXN5bmNIZWxwZXJDYWxsI2FzeW5jSGVscGVyKCN2YWx1ZSwgI2JvZHlOYW1lKWFzeW5jSGVscGVyYXN5bmNSZXRocm93Q2FsbCNhc3luY1JldGhyb3coI3Jlc3VsdCwgI2NvbXBsZXRlcilyZXR1cm5Bc3luY1JldGhyb3dlcnJvckNoZWNrICAgICAgaWYgKCNlcnJvckNvZGUgPT09ICNFUlJPUikgewogICAgICAgIGlmICgjaGFzSGFuZGxlckxhYmVscykgewogICAgICAgICAgICAjY3VycmVudEVycm9yID0gI3Jlc3VsdDsKICAgICAgICAgICAgI2dvdG8gPSAjaGFuZGxlcjsKICAgICAgICB9IGVsc2UKICAgICAgICAgICAgI3JldHVybkFzeW5jUmV0aHJvdzsKICAgICAgfWlubmVyRnVuY3Rpb24gICAgICBmdW5jdGlvbiAoI2Vycm9yQ29kZSwgI3Jlc3VsdCkgewogICAgICAgICNlcnJvckNoZWNrOwogICAgICAgICNyZXdyaXR0ZW5Cb2R5OwogICAgICB9YXN5bmNTdGFydENhbGwjYXN5bmNTdGFydCgjYm9keU5hbWUsICNjb21wbGV0ZXIpcmV0dXJuQXN5bmNTdGFydHdyYXBCb2R5Q2FsbCN3cmFwQm9keSgjaW5uZXJGdW5jdGlvbikgICAgICAgIGZ1bmN0aW9uICgjcGFyYW1ldGVycywgI3R5cGVQYXJhbWV0ZXJzKSB7CiAgICAgICAgICAjdmFyaWFibGVEZWNsYXJhdGlvbnM7CiAgICAgICAgICB2YXIgI2JvZHlOYW1lID0gI3dyYXBCb2R5Q2FsbDsKICAgICAgICAgICNyZXR1cm5Bc3luY1N0YXJ0OwogICAgICAgIH1TeW5jU3RhclJld3JpdGVyZGlhZ25vc3RpY0xpc3RlbmVycmVuYW1lZFBhcmFtZXRlcnNyZW5hbWVkTmFtZWNvcHlQYXJhbWV0ZXJzc2V0Q3VycmVudEVycm9yI2N1cnJlbnRFcnJvciA9ICNyZXN1bHRzZXRHb3RvI2dvdG8gPSAjaGFuZGxlcmNoZWNrRXJyb3JDb2RlICAgICAgICAgIGlmICgjZXJyb3JDb2RlID09PSAjRVJST1IpIHsKICAgICAgICAgICAgICAjc2V0Q3VycmVudEVycm9yOwogICAgICAgICAgICAgICNzZXRHb3RvOwogICAgICAgICAgfWlubmVySW5uZXJGdW5jdGlvbiAgICAgICAgICBmdW5jdGlvbiAjYm9keSgjZXJyb3JDb2RlLCAjcmVzdWx0KSB7CiAgICAgICAgICAgICNjaGVja0Vycm9yQ29kZTsKICAgICAgICAgICAgI2hlbHBlckJvZHk7CiAgICAgICAgICB9aGVscGVyQm9keXJldHVybklubmVySW5uZXJGdW5jdGlvbiAgICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGlmICgjaGFzUGFyYW1ldGVycykgewogICAgICAgICAgICAgICNjb3B5UGFyYW1ldGVyczsKICAgICAgICAgICAgfQogICAgICAgICAgICAjdmFyRGVjbDsKICAgICAgICAgICAgI3JldHVybklubmVySW5uZXJGdW5jdGlvbjsKICAgICAgICAgIH1oYXNQYXJhbWV0ZXJzdmFyRGVjbGNhbGxJdGVyYWJsZUZhY3RvcnkjaXRlcmFibGVGYWN0b3J5KCNpbm5lckZ1bmN0aW9uLCAjdHlwZSlyZXR1cm5DYWxsSXRlcmFibGVGYWN0b3J5ICAgICAgICAgIGZ1bmN0aW9uICgjcmVuYW1lZFBhcmFtZXRlcnMsICN0eXBlUGFyYW1ldGVycykgewogICAgICAgICAgICBpZiAoI25lZWRzVGhpcykKICAgICAgICAgICAgICB2YXIgI3NlbGYgPSB0aGlzOwogICAgICAgICAgICAjcmV0dXJuQ2FsbEl0ZXJhYmxlRmFjdG9yeTsKICAgICAgICAgIH0KICAgICAgICAgIG5lZWRzVGhpc3VuY2F1Z2h0RXJyb3JFeHByZXNzaW9uQ2FsbGVuZE9mSXRlcmF0aW9uQ2FsbCMoKVN5bmMqIGZ1bmN0aW9ucyBjYW5ub3QgY29udGFpbiBhd2FpdCBzdGF0ZW1lbnRzLkFzeW5jU3RhclJld3JpdGVybmV4dFdoZW5DYW5jZWxlZE5hbWVjb250cm9sbGVyTmFtZW5leHRXaGVuQ2FuY2VsZWRjb250cm9sbGVyZW5jbG9zaW5nRmluYWxseUxhYmVsc3lpZWxkRXhwcmVzc2lvbkNhbGwjeWllbGRFeHByZXNzaW9uKCNleHByZXNzaW9uKWFzeW5jU3RhckhlbHBlckNhbGwjYXN5bmNTdGFySGVscGVyKCN5aWVsZEV4cHJlc3Npb25DYWxsLCAjYm9keU5hbWUsICNjb250cm9sbGVyKXVwZGF0ZU5leHQjbmV4dCA9ICNuZXh0V2hlbkNhbmNlbGVkY2FsbFBvcCNuZXh0LnBvcCgpZ290b0NhbmNlbGxlZCNnb3RvID0gI2NhbGxQb3B1cGRhdGVFcnJvcmdvdG9FcnJvciAgICAgICAgc3dpdGNoICgjZXJyb3JDb2RlKSB7CiAgICAgICAgICBjYXNlICNTVFJFQU1fV0FTX0NBTkNFTEVEOgogICAgICAgICAgICAjdXBkYXRlTmV4dDsKICAgICAgICAgICAgI2dvdG9DYW5jZWxsZWQ7CiAgICAgICAgICAgICNicmVhazsKICAgICAgICAgIGNhc2UgI0VSUk9SOgogICAgICAgICAgICAjdXBkYXRlRXJyb3I7CiAgICAgICAgICAgICNnb3RvRXJyb3I7CiAgICAgICAgfVNUUkVBTV9XQVNfQ0FOQ0VMRURpZkVycm9yICAgICAgICBpZiAoI2Vycm9yQ29kZSA9PT0gI0VSUk9SKSB7CiAgICAgICAgICAjdXBkYXRlRXJyb3I7CiAgICAgICAgICAjZ290b0Vycm9yOwogICAgICAgIH1pZkhhc1lpZWxkICAgICAgICBpZiAoI2hhc1lpZWxkKSB7CiAgICAgICAgICAjc3dpdGNoQ2FzZQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAjaWZFcnJvcjsKICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uICgjZXJyb3JDb2RlLCAjcmVzdWx0KSB7CiAgICAgICAgICAjaWZIYXNZaWVsZDsKICAgICAgICAgICNyZXdyaXR0ZW5Cb2R5OwogICAgICAgIH1kZWNsYXJlQm9keU5hbWV2YXIgI2JvZHlOYW1lID0gI3dyYXBCb2R5Q2FsbDtzdHJlYW1PZkNvbnRyb2xsZXJDYWxsI3N0cmVhbU9mQ29udHJvbGxlcigjY29udHJvbGxlcilyZXR1cm5TdHJlYW1PZkNvbnRyb2xsZXJDYWxsICAgICAgICBmdW5jdGlvbiAoI3BhcmFtZXRlcnMsICN0eXBlUGFyYW1ldGVycykgewogICAgICAgICAgI2RlY2xhcmVCb2R5TmFtZTsKICAgICAgICAgICN2YXJpYWJsZURlY2xhcmF0aW9uczsKICAgICAgICAgICNyZXR1cm5TdHJlYW1PZkNvbnRyb2xsZXJDYWxsOwogICAgICAgIH0jYXN5bmNIZWxwZXIoI2N1cnJlbnRFcnJvciwgI2Vycm9yQ29kZSwgI2NvbnRyb2xsZXIpc3RyZWFtSGVscGVyQ2FsbCNzdHJlYW1IZWxwZXIobnVsbCwgI3N1Y2Nlc3NDb2RlLCAjY29udHJvbGxlcilzdHJlYW1IZWxwZXJzdWNjZXNzQ29kZSMoIywgIykjYXN5bmNIZWxwZXIoI3ZhbHVlLCAjYm9keU5hbWUsICNjb250cm9sbGVyKVByZVRyYW5zbGF0aW9uQW5hbHlzaXNsb29wc0FuZFN3aXRjaGVzbGFiZWxsZWRTdGF0ZW1lbnRzY3VycmVudEZ1bmN0aW9uY29udGFpbnNBd2FpdHN0bXRhcmdldFN0YXRlbWVudFVuZXhwZWN0ZWRfbWFrZVZhcmlhYmxlSW5pdGlhbGl6ZXJpbml0VmFsdWVDb2RlZ2VuUGhhc2VTc2FDb2RlR2VuZXJhdG9yVGFza1NTQSBjb2RlIGdlbmVyYXRvcmJ1aWxkSmF2YVNjcmlwdEZ1bmN0aW9uZ2VuZXJhdGVMYXp5SW5pdGlhbGl6ZXJnZW5lcmF0ZU1ldGhvZGNvZGVHZW5lcmF0b3JUWVBFX1NUQVRFTUVOVFRZUEVfRVhQUkVTU0lPTlRZUEVfREVDTEFSQVRJT05pc0dlbmVyYXRpbmdFeHByZXNzaW9uX2NvZGVnZW5UYXNrX2NoZWNrZWRNb2RlSGVscGVyc2dlbmVyYXRlQXRVc2VTaXRlY29udHJvbEZsb3dPcGVyYXRvcnNicmVha0FjdGlvbmNvbnRpbnVlQWN0aW9uaW1wbGljaXRDb250aW51ZUFjdGlvbmN1cnJlbnRDb250YWluZXJleHByZXNzaW9uU3RhY2tvbGRDb250YWluZXJTdGFja3ZhcmlhYmxlTmFtZXNzaG91bGRHcm91cFZhckRlY2xhcmF0aW9uc2NvbGxlY3RlZFZhcmlhYmxlRGVjbGFyYXRpb25zZGVjbGFyZWRMb2NhbHNjdXJyZW50R3JhcGhjdXJyZW50QmxvY2tJbmZvcm1hdGlvbmJsb2NrUXVldWVpc0dlbmVyYXRlQXRVc2VTaXRlaGFzTm9uQml0T3BVc2VycGhpU2V0Yml0V2lkdGhiaXRPcGxlZnRXaWR0aHNoaWZ0Q291bnRyZXF1aXJlc1VpbnRDb252ZXJzaW9ucHVzaFN0YXRlbWVudGluc2VydFN0YXRlbWVudEF0U3RhcnRwdXNoRXhwcmVzc2lvbkFzU3RhdGVtZW50cHJlR2VuZXJhdGVNZXRob2RydW5QaGFzZUdyYXBoIG5vdCB2YWxpZCBhZnRlciBpbnRlcnZhbEJ1aWxkZXJhbGxvY2F0b3JsaXZlSW5zdHJ1Y3Rpb25zbGl2ZUludGVydmFsc2hhbmRsZURlbGF5ZWRWYXJpYWJsZURlY2xhcmF0aW9uc25leHRTdGF0ZW1lbnRfc2FmZUluSW5pdGlhbGl6ZXJ1bmluaXRpYWxpemVkZGVjbGFyYXRpb25MaXN0dmlzaXRTdWJHcmFwaG5ld1N1YkdyYXBob2xkU3ViR3JhcGhvbGRCbG9ja1F1ZXVlZW50ZXJTdWJHcmFwaGxpbWl0c2Jhc2ljQmxvY2tpc0pTRXhwcmVzc2lvbmlzSlNDb25kaXRpb25nZW5lcmF0ZVN0YXRlbWVudHNnZW5lcmF0ZVN0YXRlbWVudHNJbk5ld0Jsb2Nrb2xkQ29udGFpbmVydW53cmFwU3RhdGVtZW50Z2VuZXJhdGVFeHByZXNzaW9ub2xkSXNHZW5lcmF0aW5nRXhwcmVzc2lvbm9sZEV4cHJlc3Npb25TdGFja3NlcXVlbmNlRWxlbWVudHNleHByZXNzaW9uU3ViR3JhcGhpc1ZhcmlhYmxlRGVjbGFyZWRnZW5lcmF0ZUV4cHJlc3Npb25Bc3NpZ25tZW50YXNzaWduVmFyaWFibGVkZWZpbmVuZWVkc0Fzc2lnbm1lbnRjb250aW51ZUFzQnJlYWtpbXBsaWNpdENvbnRpbnVlQXNCcmVha2ltcGxpY2l0QnJlYWtXaXRoTGFiZWx3cmFwSW50b0xhYmVsc2JyZWFrTGFiZWxTdHJpbmdoYW5kbGVkRGVmYXVsdHN0YXRlbWVudEluZGV4dmlzaXRCb2R5SWdub3JlTGFiZWxzb2xkSW5mb2lzQ29uZGl0aW9uRXhwcmVzc2lvbmluaXRpYWxpemF0aW9uVHlwZWF2b2lkQ29udGFpbmVyYXNzaWduUGhpc09mU3VjY2Vzc29yc2hhc1BoaVVwZGF0ZXNqc0luaXRpYWxpemF0aW9uZGVsYXllZFZhcmlhYmxlc0NvdW50YWxsU2ltcGxlQXNzaWdubWVudHNpc0NvbW1hT3BlcmF0b3Jpbml0c2pzQ29uZGl0aW9uanNVcGRhdGVzbmV3TGl0ZXJhbEJvb2xpZlRlc3Rqc0JyZWFrZXhpdExvb3B3cmFwTG9vcEJvZHlGb3JDb250aW51ZWV4aXRBdm9pZENvbnRhaW5lcmhhc0V4aXRQaGlVcGRhdGVzYXZvaWRFZGdldXBkYXRlQm9keVVuZXhwZWN0ZWQgbG9vcCBraW5kOiBjb250aW51ZUxhYmVsU3RyaW5nbGFiZWxlZEJsb2NrSW5mb2NvbnRpbnVlT3ZlcnJpZGVzaGFuZGxlQmxvY2tGbG93b2xkQmxvY2tJbmZvcm1hdGlvbmNvbnRpbnVlU3ViR3JhcGhpdGVyYXRlQmFzaWNCbG9ja2VtaXRBc3NpZ25tZW50ZGVzdGluYXRpb25zZXF1ZW50aWFsaXplQ29waWVzaW5zdHJ1Y3Rpb25Db3BpZXN0ZW1wTmFtZWRvQXNzaWdubWVudHNvdXJjZUluZm9ybWF0aW9uTWFwZGVzdGluYXRpb25OYW1lY3VycmVudExvY2F0aW9ucmVhZHlwcnVuZWRDb3BpZXNnZXRDb3B5SGFuZGxlcmdldFN3YXBUZW1waGFuZGxlSW52b2tlQmluYXJ5anNMZWZ0dmlzaXRCaXRJbnZva2VCaW5hcnl2aXNpdEJpdEludm9rZVVuYXJ5ZW1pdElkZW50aXR5Q29tcGFyaXNvbmludmVyc2VsZWZ0RXF1YWxzTnVsbHJpZ2h0RXF1YWxzTnVsbHRyaXBsZUVxTWF0aC5hYnMoIylkb21pbmF0ZWQubGVuZ3RoID0gbm9kZS5ibG9jayAhPSBjdXJyZW50R3JhcGguZW50cnl2aXNpdFRyeSBzaG91bGQgbm90IGJlIGNhbGxlZC50cnlDb250cm9sRmxvd09wZXJhdGlvbmF0VXNlU2l0ZWdlbmVyYXRlSWZnZW5lcmF0ZU5vdF9hc3NlbWJsZUlmVGhlbkVsc2UjICYmICNtZXRob2RMaXRlcmFscmVnaXN0ZXJNZXRob2RJbnZva2VyZWdpc3RlckdldHRlcnJlZ2lzdGVyU2V0dGVyZ2V0T3B0aW1pemVkU2VsZWN0b3JGb3JFbGVtZW50IHRvIGJlIG1peGVkIGluLiBkb2VzIG5vdCBhcHBseSB0byBVbmV4cGVjdGVkIGRpcmVjdCBpbnZvY2F0aW9uIHNlbGVjdG9yOiB0aHJvd0Z1bmN0aW9uKDAsICMpKCMpIyB8fCAjc3VwZXJFbGVtZW50dXNlQWxpYXNlZFN1cGVyIy4jLmNhbGwoIykjLiMoIylyZWdpc3RlckZvcmVpZ25UeXBlc2ludGVycG9sYXRlZEV4cHJlc3Npb25zanNDbGFzc1JlZmVyZW5jZWdlbmVyYXRlQ29uc3RhbnR0eXBlQ29uc3RhbnRtYXBSZWxhdGlvbmFsT3BlcmF0b3JpbnZlcnNlT3BlcmF0b3JjYW5HZW5lcmF0ZU9wdGltaXplZENvbXBhcmlzb25yZWxhdGlvbmFsaGFuZGxlZEJ5U3BlY2lhbENhc2VlbWl0SXNlbWl0SXNWaWFJbnRlcmNlcHRvcmlmQmxvY2tnZW5lcmF0ZVRocm93V2l0aEhlbHBlcnVuZGVyb3ZlciMgPCAwanNJbmRleCMgPj4+IDAgIT09ICN1bmRlck92ZXJqc0hlbHBlcmxhenlHZXR0ZXJnZW5lcmF0ZUFycmF5TGl0ZXJhbG9yMGNoZWNrQmlnSW50bWF0aEZsb29yQ2FsbE1hdGguZmxvb3IoIykgI2NoZWNrVHlwZU9mY2hlY2tEb3VibGVjaGVja0Jvb2xib29sZWFuY2hlY2tPYmplY3Rub3ROdWxsZXFOdWxsY2hlY2tBcnJheWNoZWNrRmllbGRFeGlzdHNjaGVja0ZpZWxkRG9lc05vdEV4aXN0Y2hlY2tJbW11dGFibGVBcnJheWltbXV0YWJsZSRsaXN0Y2hlY2tNdXRhYmxlQXJyYXljaGVja0V4dGVuZGFibGVBcnJheWZpeGVkJGxlbmd0aGNoZWNrRml4ZWRBcnJheWNoZWNrTnVsbGNoZWNrTm9uTnVsbGNoZWNrVHlwZVZpYVByb3BlcnR5Y2hlY2tUeXBlVmlhSW5zdGFuY2VvZiMgaW5zdGFuY2VvZiAjaGFuZGxlTnVtYmVyT3JTdHJpbmdTdXBlcnR5cGVDaGVja251bWJlclRlc3RzdHJpbmdUZXN0b2JqZWN0VGVzdGNvbWJpbmVyMmhhbmRsZVN0cmluZ1N1cGVydHlwZUNoZWNraGFuZGxlTGlzdE9yU3VwZXJ0eXBlQ2hlY2thcnJheVRlc3RudW1UZXN0X2dlbmVyYXRlUmVjZWl2ZXJPckFyZ3VtZW50VHlwZVRlc3RVbmV4cGVjdGVkIGNoZWNrOiAjLiN0eXBlVmFyaWFibGVBY2Nlc3NOZWVkc1N1YnN0aXR1dGlvbiMoIywgIywgIywgIykjKCMsICMsICMpTm90IGFsbCBpbnB1dCBpcyByZWFkIGZvciB0eXBlIHJlY2VpdmVyTWFza21ldGhvZEFjY2Vzc1NzYUNvZGVHZW5lcmF0b3IudmlzaXRTdWJ0eXBlQ2hlY2sgIHVzZVJ0aUZpZWxkdXNlSGVscGVyaGVscGVyQWNjZXNzT3B0aW1pemF0aW9uUGhhc2VTc2FPcHRpbWl6ZXJUYXNrcmFuZ2VzbG9nZ2Vyc0ZvclRlc3RpbmdTU0Egb3B0aW1pemVyYm91bmRzQ2hlY2tlZGNvZGVNb3Rpb25sb2FkRWxpbWluYXRpb25waGFzZXNkY2Vtb3ZlZENvZGVlbGltaW5hdGVkU2lkZUVmZmVjdHNuZXdHdm5DYW5kaWRhdGVzU3NhSW5zdHJ1Y3Rpb25TaW1wbGlmaWVyTUFYX1NIQVJFRF9DT05TVEFOVF9GT0xERURfU1RSSU5HX0xFTkdUSF9sb2dfZ3JhcGhzaW1wbGlmeVBoaXNiMWIyY29udHJvbEZsb3d0ZXN0ZWR3aGVuTnVsbFZhbHVld2hlbk5vdE51bGxWYWx1ZXdoZW5OdWxsQmxvY2t3aGVuTm90TnVsbEJsb2NrX3NhbWVPclJlZmluZW1lbnRPZl9pc0Jvb2xDb25zdGFudF9tb3N0bHlFbXB0eWluc25nZXRDb25zdGFudEZyb21UeXBlcHJvcGFnYXRlQ29uc3RhbnRWYWx1ZVRvVXNlc2ZvbGRlZGZvbGRVbmFyeXRyeU9wdGltaXplTGVuZ3RoSW50ZXJjZXB0ZWRHZXR0ZXJhY3R1YWxSZWNlaXZlcmNvbnN0YW50SW5wdXRoYW5kbGVJbnRlcmNlcHRlZENhbGxmb2xkQmluYXJ5aGFuZGxlU3RyaW5nU3BsaXRvcHRpbWl6ZWRyZXN1bHRNYXNrc3BsaXRJbnN0cnVjdGlvbnN0cmluZ1R5cGVJbmZvdGFnSW5zdHJ1Y3Rpb250cnlJbmxpbmVOYXRpdmVNZXRob2RpbnNlcnRpb25Qb2ludGR1bW15R2V0cmVnaXN0ZXJGaWVsZENhbGxyZWdpc3RlckNvbnN0YW50RmllbGRDYWxsaW5wdXRQb3NpdGlvbmNoZWNrUGFyYW1ldGVyVHlwZXBhcmFtZXRlckFic3RyYWN0VmFsdWVjb25zdGFudEluc3RydWN0aW9ub3Axb3AyaGFuZGxlSWRlbnRpdHlDaGVja21ha2VUcnVlbWFrZUZhbHNlY29tcGFyZUNvbnN0YW50c2ltcGxpZnlDb25kaXRpb25pc05lZ2F0ZWRkb21pbmF0aW5naG9pc3RlZHJlcGZpbmRDb25jcmV0ZUZpZWxkRm9yRHluYW1pY0FjY2Vzc2NvbnN0cnVjdGVkQ29uc3RhbnRjb25zdGFudFJlY2VpdmVyaW5kZXhJbnN0cnVjdGlvbnJlZ2lzdGVyRmllbGRHZXRyZWdpc3RlckNvbnN0YW50RmllbGRHZXRfZGlyZWN0RmllbGRHZXRhc3NpZ25GaWVsZHJlZ2lzdGVyRmllbGRTZXRoYW5kbGVBcnJheVR5cGVJbmZvZmlyc3RBcmd1bWVudGdldFN0cmluZ2xlZnRDb25jYXR0cnlDb25zdGFudHRvU3RyaW5nVHlwZW5lZWRzU3Vic3RpdHV0aW9uRm9yVHlwZVZhcmlhYmxlQWNjZXNzdHJ5Q29weUluZm9leHBlY3RlZEluZGV4bmV4dFNvdXJjZWZpbmlzaEdyb3VuZFR5cGVncm91bmRUeXBldHlwZUF0VmFyaWFibGVmaW5pc2hTdWJzdGl0dXRlZGNyZWF0ZWRDbGFzc3NlbGVjdFR5cGVBcmd1bWVudEZyb21PYmplY3RDcmVhdGlvbmluc3RydWN0aW9uRm9yVHlwZVZhcmlhYmxlcmVnaXN0ZXJJbnN0YW50aWF0aW9uc3NwZWNpYWxpemVkQ2hlY2tTc2FDaGVja0luc2VydGVyaW5zZXJ0Qm91bmRzQ2hlY2tpbmRleE5vZGVpbmRleEFyZ3VtZW50bWludXNPbmVTc2FEZWFkQ29kZUVsaW1pbmF0b3J0cml2aWFsRGVhZFN0b3JlUmVjZWl2ZXJzemFwSW5zdHJ1Y3Rpb25DYWNoZXphcEluc3RydWN0aW9udGVtcGxhdGVUaHJvd3NOU01vbk51bGxoYXNGb2xsb3dpbmdUaHJvd2luZ05TTWlzRGVhZEJsb2NraXNUcml2aWFsRGVhZFN0b3JlUmVjZWl2ZXJpc0RlYWRVc2Vpc0RlYWRDb2RlaXNUcml2aWFsRGVhZFN0b3JlY2xlYW5QaGlzc2ltcGxpZnlDb250cm9sRmxvd3JlbW92ZVVzZXJzc2ltcGxpZnlQaGlldmFjdWF0ZVRha2VuQnJhbmNoc2VlblVucmVmaW5lZEJhc2VyZWZpbmVtZW50dGhlblNpemVtZWFzdXJlRW1wdHlJbnRlcnZhbGVsc2VTaXplbmV3Q29uZGl0aW9ucmVwbGFjZUlucHV0aW5kZXhPZkxpdmVieXJlbW92ZUlucHV0U3NhTGl2ZUJsb2NrQW5hbHl6ZXJsaXZlbWFya0Jsb2NrTGl2ZXN3aXRjaFJhbmdlbG93ZXJWYWx1ZXVwcGVyVmFsdWVsaXZlTGFiZWxzU3NhRGVhZFBoaUVsaW1pbmF0b3JsaXZlUGhpc1NzYVJlZHVuZGFudFBoaUVsaW1pbmF0b3JHdm5Xb3JrSXRlbXZhbHVlU2V0U3NhR2xvYmFsVmFsdWVOdW1iZXJlcmJsb2NrQ2hhbmdlc0ZsYWdzbG9vcENoYW5nZXNGbGFnc2NvbXB1dGVDaGFuZ2VzRmxhZ3Ntb3ZlTG9vcEludmFyaWFudENvZGVjaGFuZ2VzRmxhZ3Ntb3ZlTG9vcEludmFyaWFudENvZGVGcm9tQmxvY2twcmVoZWFkZXJpc0xvb3BBbHdheXNUYWtlbmZpcnN0SW5zdHJ1Y3Rpb25Jbkxvb3Bsb29wSW52YXJpYW50SW5wdXRzaXNJbnB1dERlZmluZWRBZnRlckRvbWluYXRvcm9sZENoYW5nZXNGbGFnc2tpbGxzdWNjZXNzb3JWYWx1ZXNnZXRDaGFuZ2VzRmxhZ3NGb3JEb21pbmF0ZWRCbG9ja1NzYUNvZGVNb3Rpb25pbnNuMWluc24ydG9SZXdyaXRlY2FuQmVNb3ZlZFNzYVR5cGVDb252ZXJzaW9uSW5zZXJ0ZXJTc2FUeXBlY29udmVyc2lvbkluc2VydGVyaW5zZXJ0VHlwZVByb3BhZ2F0aW9uRm9yRG9taW5hdGVkVXNlcnNjb252ZXJ0ZWRUeXBlZG9taW5hdGVkVXNlc3RydWVUYXJnZXRzZmFsc2VUYXJnZXRzY29sbGVjdFRhcmdldHNTc2FMb2FkRWxpbWluYXRpb25tZW1vcnlTZXRtZW1vcmllc2ludGVyc2VjdGlvbkZvcmNoZWNrTmV3R3ZuQ2FuZGlkYXRlc2hhc1VzZUd2bl92aXNpdEZpZWxkR2V0bG9va3VwRmllbGRWYWx1ZU1lbW9yeUZlYXR1cmUubGVuZ3RocmVnaXN0ZXJGaWVsZFZhbHVlcmVnaXN0ZXJGaWVsZFZhbHVlVXBkYXRlcmVnaXN0ZXJBbGxvY2F0aW9uc2hvdWxkVHJhY2tJbml0aWFsVmFsdWVza2lsbEFmZmVjdGVkQnlpbnRlcmVzdGluZ1VzZWhlYXBEZXB0aGhhbmRsZVN0YXRpY0xvYWRsb29rdXBLZXllZFZhbHVlcmVnaXN0ZXJLZXllZFZhbHVlcmVnaXN0ZXJLZXllZFZhbHVlVXBkYXRlTWVtb3J5RmVhdHVyZU1lbW9yeVNldGtleWVkVmFsdWVzbm9uRXNjYXBpbmdSZWNlaXZlcnNtdXN0QWxpYXNtYXlBbGlhc2lzQ29uY3JldGVlc2NhcGVzVW5leHBlY3RlZCBtZW1iZXIvZmVhdHVyZTogcmVjZWl2ZXJzVG9SZW1vdmVmaWVsZHNUb1JlbW92ZXdlYWtJbmRleG90aGVySW5kZXhmaW5kQ29tbW9uSW5zdHJ1Y3Rpb25wcmVkZWNlc3NvckluZGV4dXNlcjJwaGlUeXBlaXNOb25Fc2NhcGluZ1VzZW90aGVyVmFsdWVzaXNGaXhlZExlbmd0aGpzX2FzdGNoYXJDb2Rlc3NyYy9ub2Rlcy5kYXJ0c3JjL2J1aWxkZXIuZGFydHNyYy9wcmludGVyLmRhcnRzcmMvdGVtcGxhdGUuZGFydHNyYy9lcXVpdmFsZW5jZV92aXNpdG9yLmRhcnRSZW5hbWVySW5zdGFudGlhdG9yTm9kZVZpc2l0b3Jjb25kQmFzZVZpc2l0b3J2aXNpdExvb3B2aXNpdFZhcmlhYmxlUmVmZXJlbmNldmlzaXRUb2tlbnZpc2l0TGl0ZXJhbHZpc2l0SW50ZXJwb2xhdGVkTm9kZU5vZGVWaXNpdG9yMUJhc2VWaXNpdG9yMXZpc2l0Q2hpbGRyZW4xX3NvdXJjZUluZm9ybWF0aW9uYXNWYXJpYWJsZVVzZXRvU3RhdGVtZW50SWZub0Vsc2VoYXNFbHNlTG9vcEZvcldoaWxlRG9SZXR1cm5UcnlTd2l0Y2hTd2l0Y2hDbGF1c2VDYXNlRGVmYXVsdExpdGVyYWxTdGF0ZW1lbnREYXJ0WWllbGREZWNsYXJhdGlvbkxpdGVyYWxTdHJpbmdGcm9tTmFtZUxpdGVyYWxFeHByZXNzaW9ud2l0aERhdGFWYXJpYWJsZURlY2xhcmF0aW9uTGlzdFBhcmVudGhlc2VzQXNzaWdubWVudFZhcmlhYmxlSW5pdGlhbGl6YXRpb25Db25kaXRpb25hbENhbGxOZXdJbnRlcm5hbCBFcnJvcjogVW5oYW5kbGVkIGJpbmFyeSBvcGVyYXRvcjogUG9zdGZpeFZhcmlhYmxlUmVmZXJlbmNlX2lkZW50aWZpZXJSRV5bQS1aYS16XyRdW0EtWmEtel8kMC05XSokTm9uLWlkZW50aWZpZXIgbmFtZSAnVmFyaWFibGVVc2UoUGFyYW1ldGVyVGhpc05hbWVkRnVuY3Rpb25GdW5hc3luY1N0YXJzeW5jU3RhclByb3BlcnR5QWNjZXNzaW5kZXhlZERlZmVycmVkVG9rZW5EZWZlcnJlZE51bWJlckRlZmVycmVkU3RyaW5nRGVmZXJyZWRFeHByZXNzaW9uTGl0ZXJhbExpdGVyYWxOdW1iZXJBcnJheUluaXRpYWxpemVyQXJyYXlIb2xlT2JqZWN0SW5pdGlhbGl6ZXJQcm9wZXJ0eUludGVycG9sYXRlZE5vZGVfSW50ZXJwb2xhdGVkRXhwcmVzc2lvbiZFeHByZXNzaW9uJkludGVycG9sYXRlZE5vZGVJbnRlcnBvbGF0ZWRFeHByZXNzaW9uX0ludGVycG9sYXRlZExpdGVyYWwmTGl0ZXJhbCZJbnRlcnBvbGF0ZWROb2RlSW50ZXJwb2xhdGVkTGl0ZXJhbF9JbnRlcnBvbGF0ZWRQYXJhbWV0ZXImRXhwcmVzc2lvbiZJbnRlcnBvbGF0ZWROb2RlSW50ZXJwb2xhdGVkUGFyYW1ldGVySW50ZXJwb2xhdGVkUGFyYW1ldGVyLm5hbWUgbXVzdCBub3QgYmUgaW52b2tlZF9JbnRlcnBvbGF0ZWRTZWxlY3RvciZFeHByZXNzaW9uJkludGVycG9sYXRlZE5vZGVJbnRlcnBvbGF0ZWRTZWxlY3Rvcl9JbnRlcnBvbGF0ZWRTdGF0ZW1lbnQmU3RhdGVtZW50JkludGVycG9sYXRlZE5vZGVJbnRlcnBvbGF0ZWRTdGF0ZW1lbnRfSW50ZXJwb2xhdGVkRGVjbGFyYXRpb24mRXhwcmVzc2lvbiZJbnRlcnBvbGF0ZWROb2RlSW50ZXJwb2xhdGVkRGVjbGFyYXRpb25ObyBuYW1lIGZvciB0aGUgaW50ZXJwb2xhdGVkIG5vZGVSZWdFeHBMaXRlcmFsQXdhaXRKc0J1aWxkZXJfZmluZEV4cHJlc3Npb25UZW1wbGF0ZV9maW5kU3RhdGVtZW50VGVtcGxhdGV0aHJvdyBsb29rdXBFeHByZXNzaW9uVGVtcGxhdGVkZWZpbmVFeHByZXNzaW9uVGVtcGxhdGVsb29rdXBTdGF0ZW1lbnRUZW1wbGF0ZWRlZmluZVN0YXRlbWVudFRlbXBsYXRlZm9yY2VDb3B5dW5jYWNoZWRTdGF0ZW1lbnRUZW1wbGF0ZV9sZWdhY3lFc2NhcGVkU3RyaW5nZXNjYXBlZAp8InwIfAl8C3wNXGJVbmV4cGVjdGVkIG1hdGNoOiBhc2NpaUNhbm5vdCBiZSBib3RoIFVURjggYW5kIEFTQ0lJc2luZ2xlUXVvdGVzZG91YmxlUXVvdGVzb3RoZXJFc2NhcGVzdW5wYWlyZWRTdXJyb2dhdGVzcnVuZXVzZVNpbmdsZVF1b3Rlc1x4bGVhZGluZ3RyYWlsaW5nX2lzVW5wYWlyZWRTdXJyb2dhdGU0Mjk0OTY1MjQ4X2lycmVndWxhckVzY2FwZVwnYWRkUXVvdGVzbnVtQXJyYXlzdHJpbmdBcnJheXByb3BlcnR5Q2FsbG9iamVjdExpdGVyYWxNaW5pSnNQYXJzZXJFcnJvcmxhc3RQb3NpdGlvbm5ld2xpbmVQb3NsYXN0TGluZVN0YXJ0c3BhY2VzW15cdF1FcnJvciBpbiBNaW5pSnNQYXJzZXI6Cl4KTWluaUpzUGFyc2VybGFzdENhdGVnb3J5bGFzdFRva2Vuc2tpcHBlZE5ld2xpbmVpbnRlcnBvbGF0ZWRWYWx1ZXNBTFBIQU5VTUVSSUNET1RMUEFSRU5SUEFSRU5MQlJBQ0VSQlJBQ0VMU1FVQVJFUlNRVUFSRVFVRVJZV0hJVEVTUEFDRUNBVEVHT1JJRVNISUdIRVNUX1BBUlNFX0JJTkFSWV9QUkVDRURFTkNFQklOQVJZX1BSRUNFREVOQ0VVTkFSWV9PUEVSQVRPUlNPUEVSQVRPUlNfVEhBVF9MT09LX0xJS0VfSURFTlRJRklFUlNnZXRUb2tlbmhhc05hbWVkSG9sZXNoYXNQb3NpdGlvbmFsSG9sZXNzaW5nbGVDaGFyQ2F0ZWdvcnljYXRlZ29yeVRvU3RyaW5nY2F0VW5rbm93bjogaXNBc3NpZ25tZW50c3ltYm9sZ2V0RGVsaW1pdGVkY3VycmVudENvZGVVbnRlcm1pbmF0ZWQgbGl0ZXJhbE51bWVyaWMgYW5kIGhleCBlc2NhcGVzIGFyZSBub3QgYWxsb3dlZCBpbiBsaXRlcmFsc25leHRQb3NpdGlvblVudGVybWluYXRlZCBjb21tZW50VW5wYXJzZWFibGUgbnVtYmVybmV3Q2F0YmluYXJ5UHJlY2VuZGVuY2VVbmtub3duIG9wZXJhdG9yZXhwZWN0Q2F0ZWdvcnlhY2NlcHRDYXRlZ29yeWV4cGVjdFNlbWljb2xvbmFjY2VwdFNlbWljb2xvbkV4cGVjdGVkIFNFTUlDT0xPTk5vIGF1dG9tYXRpYyBzZW1pY29sb24gaW5zZXJ0aW9uIGF0IHByZWNlZGluZyBuZXdsaW5lYWNjZXB0U3RyaW5ncGFyc2VIYXNoaG9sZU5hbWVIb2xlcyBtdXN0IGFsbCBiZSBwb3NpdGlvbmFsIG9yIG5hbWVkLiBwYXJzZU9iamVjdEluaXRpYWxpemVycGFyc2VBc3NpZ25tZW50cmVnZXhwRXhwZWN0ZWQgcHJpbWFyeSBleHByZXNzaW9ucGFyc2VWYXJpYWJsZURlY2xhcmF0aW9ucGFyc2VGdW5Pbmx5IHN5bmMqIGlzIHZhbGlkIC0gc3luYyBpcyBpbXBsaWVkaW50ZXJwb2xhdGVkTGl0ZXJhbEV4cGVjdGVkIHByb3BlcnR5IG5hbWVwYXJzZU1lbWJlcmdldERvdFJoc2luQnJhY2VzcGFyc2VDYWxsUGFyZW50aGVzZXMgYXJlIHJlcXVpcmVkIGZvciBuZXdFeHBlY3RlZCBhbHBoYW51bWVyaWMgaWRlbnRpZmllcnBhcnNlUG9zdGZpeHBhcnNlVW5hcnlIaWdocGFyc2VVbmFyeUxvd3BhcnNlQmluYXJ5bWF4UHJlY2VkZW5jZW1pblByZWNlZGVuY2VsYXN0U3ltYm9saGlnaGVycGFyc2VDb25kaXRpb25hbHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3RmaXJzdFZhcmlhYmxlZmluaXNoVmFyaWFibGVEZWNsYXJhdGlvbkxpc3RwYXJzZVZhckRlY2xhcmF0aW9uT3JFeHByZXNzaW9uVW5wYXJzZWQganVuazogcGFyc2VSZXR1cm5wYXJzZVRocm93cGFyc2VCcmVha09yQ29udGludWVwYXJzZUlmVGhlbkVsc2VwYXJzZUZvcnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbnBhcnNlVHJ5cGFyc2VXaGlsZXBhcnNlRG9wYXJzZVN3aXRjaENhc2Ugb3V0c2lkZSBzd2l0Y2guRGVmYXVsdCBvdXRzaWRlIHN3aXRjaC5wYXJzZVlpZWxkTm90IGltcGxlbWVudGVkIGluIG1pbmkgcGFyc2VyY2hlY2tGb3JJbnRlcnBvbGF0ZWRTdGF0ZW1lbnR0aHJvdyBleHByZXNzaW9uIG11c3QgYmUgb24gc2FtZSBsaW5lZmluaXNoRm9yb2JqZWN0RXhwcmVzc2lvbnBhcnNlQ2F0Y2hleHBlY3RlZCAnZmluYWxseSdwYXJzZVN3aXRjaENsYXVzZWV4cGVjdGVkIGNhc2Ugb3IgZGVmYXVsdE1pc3Npbmcgd2hpbGUgYWZ0ZXIgZG8gYm9keS5fSW50ZXJsZWF2ZUl0ZXJhdG9yaXNOZXh0U2VwYXJhdG9yaXNJbml0aWFsaXplZF9JbnRlcmxlYXZlSXRlcmFibGVKYXZhU2NyaXB0UHJpbnRpbmdPcHRpb25zcHJlZmVyU2VtaWNvbG9uVG9OZXdsaW5lSW5NaW5pZmllZE91dHB1dGlkZW50aXR5UmVuYW1lckphdmFTY3JpcHRQcmludGluZ0NvbnRleHRTaW1wbGVKYXZhU2NyaXB0UHJpbnRpbmdDb250ZXh0ZGFuZ2xpbmdFbHNlVmlzaXRvcmxvY2FsTmFtZXJfY2hhckNvdW50aW5Gb3JJbml0YXRTdGF0ZW1lbnRCZWdpbnBlbmRpbmdTZW1pY29sb25wZW5kaW5nU3BhY2VpZGVudGlmaWVyQ2hhcmFjdGVyUmVnRXhwXlthLXpBLVpfMC05JF1leHByZXNzaW9uQ29udGludWF0aW9uUmVnRXhwXlstKyhbXWxhc3RBZGRlZFN0cmluZ2RldGVybWluZVJlbmFtZXJmb3JjZUxpbmVsaW5lT3V0c3BhY2VPdXRsYXN0Q2hhckNvZGVfZW1pdG91dExub3V0U2VtaWNvbG9uTG5vdXRJbmRlbnRvdXRJbmRlbnRMbnN0YXJ0Tm9kZWFkZFRvTm9kZWVuZE5vZGV2aXNpdENvbW1hU2VwYXJhdGVkaGFzUmVxdWlyZWRUeXBlbmV3SW5Gb3JJbml0bmV3QXRTdGF0ZW1lbnRCZWdpbnZpc2l0TmVzdGVkRXhwcmVzc2lvbnVud3JhcEJsb2NrSWZTaW5nbGVTdGF0ZW1lbnRibG9ja0JvZHluZWVkc1NlcGFyYXRpb25uZWVkc05ld2xpbmVibG9ja091dHNob3VsZEluZGVudGJsb2NrT3V0V2l0aG91dEJyYWNlc2lmT3V0bmVlZHNCcmFjZXN0aGVuV2FzQmxvY2sgaW5kZWZhdWx0OmZ1bmN0aW9uT3V0dmFyc3JlcXVpcmVkUHJlY2VkZW5jZW5lZWRzUGFyZW50aGVzZXN2YXIgdXNlSW5kZW50bGFzdFdhc0JpZ3RoaXNJc0JpZ19pc1NtYWxsSW5pdGlhbGl6YXRpb25fb3V0cHV0SW5jRGVjYWxpYXNyaWdodEhhbmRTaWRlckxlZnRyUmlnaHRuZXcgbGVmdFByZWNlZGVuY2VSZXF1aXJlbWVudHJpZ2h0UHJlY2VkZW5jZVJlcXVpcmVtZW50bGVmdFNwYWNlRm9yZ290IG9wZXJhdG9yOiBjaGFyQ29kZWlzVmFsaWRKYXZhU2NyaXB0SWQic3VwZXIiImNhdGNoImZpZWxkV2l0aFF1b3Rlc291dHB1dE51bWJlcldpdGhSZXF1aXJlZFdoaXRlc3BhY2VVbnJlYWNoYWJsZWV4aXRPbmVMaW5lck1vZGVuYW1lTnVtYmVyV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgSlM6IGF3YWl0IE9yZGVyZWRTZXRWYXJDb2xsZWN0b3JlbmFibGVSZW5hbWluZ2Rpc2FibGVWYXJpYWJsZU1pbmlmaWNhdGlvblBhdHRlcm46Om5vcmVuYW1pbmc6OmVuYWJsZVZhcmlhYmxlTWluaWZpY2F0aW9uUGF0dGVybjo6ZG9yZW5hbWluZzo6Zm9yRWFjaFZhcmZvckVhY2hQYXJhbWNvbGxlY3RWYXJzSW5GdW5jdGlvbkRhbmdsaW5nRWxzZVZpc2l0b3JGb3Jnb3Qgbm9kZTogTG9jYWxOYW1lcm9sZE5hbWVkZWNsYXJlUGFyYW1ldGVySWRlbnRpdHlOYW1lck1pbmlmeVJlbmFtZXJwYXJhbWV0ZXJOdW1iZXJTdGFja3ZhcmlhYmxlTnVtYmVyU3RhY2twYXJhbWV0ZXJOdW1iZXJ2YXJpYWJsZU51bWJlckxPV0VSX0NBU0VfTEVUVEVSU0xFVFRFUlNESUdJVFNudGhMZXR0ZXJhdm9pZFJlbmFtaW5nZ2V0TmFtZU51bWJlcmFscGhhQ2hhcnNuYW1lU3BhY2VTaXplW2EtekEtWl1bYS16QS1aMC05XSpFbnRlckV4aXROb2RlVGVtcGxhdGVNYW5hZ2VyZXhwcmVzc2lvblRlbXBsYXRlc3N0YXRlbWVudFRlbXBsYXRlc2hvbGVOYW1lc19jb21waWxld2l0aEV4cHJlc3Npb25SZXN1bHRfY2hlY2tOb1BsYWNlaG9sZGVyc3dpdGhTdGF0ZW1lbnRSZXN1bHRXcm9uZyBudW1iZXIgb2YgdGVtcGxhdGUgYXJndW1lbnRzLCBnaXZlbiAsIHNvdXJjZTogInVudXNlZE5hbWVzVGVtcGxhdGUgYXJndW1lbnRzIGhhcyB1bnVzZWQgbWFwcGluZ3M6IFRlbXBsYXRlIGFyZ3VtZW50cyBpcyBtaXNzaW5nIG1hcHBpbmdzIGZvcjogSW5zdGFudGlhdG9yR2VuZXJhdG9yVmlzaXRvcmlkZW50aWZpZXJSRW1ha2VOdWxsY29udGFpbnNJbnRlcnBvbGF0ZWROb2Rlc3Zpc2l0TnVsbGFibGV2aXNpdFNwbGF5YWJsZVVuaW1wbGVtZW50ZWQgSW5zdGFudGlhdG9yR2VuZXJhdG9yVmlzaXRvciBmb3IgY29udmVydFN0cmluZ1RvVmFyaWFibGVVc2Vjb252ZXJ0U3RyaW5nVG9WYXJpYWJsZURlY2xhcmF0aW9uSW50ZXJwb2xhdGVkIHZhbHVlICMgaXMgbm90IGFuIEV4cHJlc3Npb246ICBpcyBub3QgYSBkZWNsYXJhdGlvbjogdmlzaXRTcGxheWFibGVFeHByZXNzaW9udG9FeHByZXNzaW9uIGlzIG5vdCBhbiBFeHByZXNzaW9uIG9yIExpc3Qgb2YgRXhwcmVzc2lvbnM6ICBpcyBub3QgYSBMaXRlcmFsOiB0b1BhcmFtZXRlciBpcyBub3QgYSBQYXJhbWV0ZXIgb3IgTGlzdCBvZiBQYXJhbWV0ZXJzOiAgaXMgbm90IGEgc2VsZWN0b3I6ICBpcyBub3QgYSBTdGF0ZW1lbnQ6IHZpc2l0U3BsYXlhYmxlU3RhdGVtZW50YSBTdGF0ZW1lbnQgb3IgTGlzdCBvZiBTdGF0ZW1lbnRzOiBpbnN0YW50aWF0b3JzdmlzaXRJZkNvbmRpdGlvbmFsQ29tcGlsYXRpb252aXNpdElmTm9ybWFsY29tcGlsZUNvbmRpdGlvbmlzIG5vdCBhbiBFeHByZXNzaW9uOiBtYWtlQ29uZGl0aW9ubWFrZVRoZW5tYWtlT3RoZXJ3aXNlbWFrZUluaXRtYWtlVXBkYXRlbWFrZUJvZHltYWtlTGVmdEhhbmRTaWRlbWFrZU9iamVjdFRPRE9tYWtlRXhwcmVzc2lvbm1ha2VDYXRjaG1ha2VGaW5hbGx5bWFrZURlY2xhcmF0aW9ubWFrZUtleW1ha2VDYXNlc21ha2VDYXNlbWFrZU5hbWVtYWtlRnVuY3Rpb25kZWNsYXJhdGlvbk1ha2Vyc21ha2VWYWx1ZWhhbmRsZUNhbGxPck5ld21ha2VUYXJnZXRhcmd1bWVudE1ha2Vyc2NhbGxBcmd1bWVudHNtYWtlTGVmdG1ha2VSaWdodG1ha2VPcGVyYW5kbWFrZVJlY2VpdmVybWFrZVNlbGVjdG9ycGFyYW1NYWtlcnNwYXJ0TWFrZXJzbWFrZUVuY2xvc2VkZWxlbWVudE1ha2Vyc3Byb3BlcnR5TWFrZXJzSW50ZXJwb2xhdGVkTm9kZUFuYWx5c2lzY29udGFpbnNJbnRlcnBvbGF0ZWROb2RlRXF1aXZhbGVuY2VWaXNpdG9yZmFpbEF0dGVzdFZhbHVlc3Rlc3RMYWJlbHNsYWJlbDFsYWJlbDJ0ZXN0Tm9kZXN0ZXN0Tm9kZUxpc3RzbGlzdDFsaXN0MnRlbXBsYXRlTWFuYWdlcnVuZGVmZXJqcy5kZWJ1Z19EZWJ1Z1ByaW50ZXImQmFzZVZpc2l0b3ImSW5kZW50YXRpb25fRGVidWdQcmludGVyJkJhc2VWaXNpdG9yJkluZGVudGF0aW9uJlRhZ2dpbmdEZWJ1Z1ByaW50ZXJ2aXNpdE5vZGVXaXRoQ2hpbGRyZW5MZW5pZW50UHJpbnRpbmdDb250ZXh0cHJldHR5cHJpbnRpbmdDb250ZXh0ZGFydDJqcy5fZW1iZWRkZWRfbmFtZXNHRVRURVJfUFJFRklYU0VUVEVSX1BSRUZJWENBTExfUFJFRklYQ0FMTF9QUkVGSVgwQ0FMTF9QUkVGSVgxQ0FMTF9QUkVGSVgyQ0FMTF9QUkVGSVgzQ0FMTF9QUkVGSVg0Q0FMTF9QUkVGSVg1Q0FMTF9DQVRDSF9BTExSRUZMRUNUQUJMRUNMQVNTX0RFU0NSSVBUT1JfUFJPUEVSVFlSRVFVSVJFRF9QQVJBTUVURVJfUFJPUEVSVFlERUZBVUxUX1ZBTFVFU19QUk9QRVJUWUNBTExfTkFNRV9QUk9QRVJUWURFRkVSUkVEX0FDVElPTl9QUk9QRVJUWU9QRVJBVE9SX0FTX1BSRUZJWFNJR05BVFVSRV9OQU1FUlRJX05BTUVUWVBFREVGX1RBR0ZVTkNUSU9OX1RZUEVfVEFHRlVOQ1RJT05fVFlQRV9HRU5FUklDX0JPVU5EU19UQUdGVU5DVElPTl9UWVBFX1ZPSURfUkVUVVJOX1RBR0ZVTkNUSU9OX1RZUEVfUkVUVVJOX1RZUEVfVEFHRlVOQ1RJT05fVFlQRV9SRVFVSVJFRF9QQVJBTUVURVJTX1RBR0ZVTkNUSU9OX1RZUEVfT1BUSU9OQUxfUEFSQU1FVEVSU19UQUdGVU5DVElPTl9UWVBFX05BTUVEX1BBUkFNRVRFUlNfVEFHRlVUVVJFX09SX1RBR0ZVVFVSRV9PUl9UWVBFX0FSR1VNRU5UX1RBR0ZVVFVSRV9DTEFTU19UWVBFX05BTUVJU19JTkRFWEFCTEVfRklFTERfTkFNRU5VTExfQ0xBU1NfVFlQRV9OQU1FT0JKRUNUX0NMQVNTX1RZUEVfTkFNRUZVTkNUSU9OX0NMQVNTX1RZUEVfTkFNRUJPT0xfUkVDSVBFRE9VQkxFX1JFQ0lQRUlOVF9SRUNJUEVOVU1fUkVDSVBFU1RSSU5HX1JFQ0lQRVJUSV9GSUVMRF9JU2RhcnRPYmplY3RDb25zdHJ1Y3RvcmRhcnRDbG9zdXJlQ29uc3RydWN0b3Jpc0NoZWNrUHJvcGVydHlUb0pzQ29uc3RydWN0b3JOYW1laXNGdXR1cmVPclR5cGVpc1ZvaWRUeXBlaXNEeW5hbWljVHlwZWlzSnNJbnRlcm9wVHlwZUFyZ3VtZW50cmF3UnRpVG9Kc0NvbnN0cnVjdG9yTmFtZXJhd1J1bnRpbWVUeXBlaXNHaXZlblR5cGVSdGlSdGlVbml2ZXJzZUZpZWxkTmFtZXNldmFsQ2FjaGVlQ3R5cGVSdWxlc3RSc2hhcmVkRW1wdHlBcnJheXNFQVRZUEVERUZfUFJFRElDQVRFX1BST1BFUlRZX05BTUUkJGlzVHlwZWRlZlRZUEVERUZfVFlQRV9QUk9QRVJUWV9OQU1FJHR5cGVkZWZUeXBlTkFUSVZFX1NVUEVSQ0xBU1NfVEFHX05BTUUkbmF0aXZlU3VwZXJjbGFzc1RhZ1NUQVRJQ19GVU5DVElPTl9OQU1FX1BST1BFUlRZX05BTUUkc3RhdGljX25hbWVNRVRBREFUQVRZUEVTR0VUX1RZUEVfRlJPTV9OQU1FZ2V0VHlwZUZyb21OYW1lTUFOR0xFRF9HTE9CQUxfTkFNRVNtYW5nbGVkR2xvYmFsTmFtZXNNQU5HTEVEX05BTUVTbWFuZ2xlZE5hbWVzSU5URVJDRVBUT1JTX0JZX1RBR2ludGVyY2VwdG9yc0J5VGFnTEVBRl9UQUdTR0VUX0lTT0xBVEVfVEFHZ2V0SXNvbGF0ZVRhZ0lTT0xBVEVfVEFHaXNvbGF0ZVRhZ0RJU1BBVENIX1BST1BFUlRZX05BTUVkaXNwYXRjaFByb3BlcnR5TmFtZVRZUEVfVE9fSU5URVJDRVBUT1JfTUFQQ1VSUkVOVF9TQ1JJUFRjdXJyZW50U2NyaXB0REVGRVJSRURfTElCUkFSWV9QQVJUU2RlZmVycmVkTGlicmFyeVBhcnRzREVGRVJSRURfUEFSVF9VUklTZGVmZXJyZWRQYXJ0VXJpc0RFRkVSUkVEX1BBUlRfSEFTSEVTZGVmZXJyZWRQYXJ0SGFzaGVzSU5JVElBTElaRV9MT0FERURfSFVOS2luaXRpYWxpemVMb2FkZWRIdW5rSVNfSFVOS19MT0FERURpc0h1bmtMb2FkZWRJU19IVU5LX0lOSVRJQUxJWkVEaXNIdW5rSW5pdGlhbGl6ZWRERUZFUlJFRF9JTklUSUFMSVpFRGRlZmVycmVkSW5pdGlhbGl6ZWRSVElfVU5JVkVSU0V0eXBlVW5pdmVyc2VQUkVDT01QSUxFRHByZWNvbXBpbGVkRklOSVNIRURfQ0xBU1NFU2ZpbmlzaGVkQ2xhc3Nlc0FMTF9DTEFTU0VTYWxsQ2xhc3Nlc1RZUEVfSU5GT1JNQVRJT05TVEFUSUNTTElCUkFSSUVTTEFaSUVTbGF6aWVzSGFzQ2FwdHVyZWRQbGFjZWhvbGRlcnNlbmNsb3NpbmdGdW5jdGlvbnNTaWRlRWZmZWN0c1Zpc2l0b3JUaHJvd0JlaGF2aW9yVmlzaXRvcnNlcXVlbmNlX2lzRmlyc3RJbnRlcnBvbGF0ZWRQcm9wZXJ0eVJ1bnRpbWVUeXBlVXNlS2luZFJ1bnRpbWVUeXBlVXNlRGF0YVVuZXhwZWN0ZWQgUnVudGltZVR5cGVVc2VLaW5kIFJ1bnRpbWVUeXBlVXNlRGF0YShraW5kPXJlY2VpdmVyR2V0PXJlY2VpdmVyVHlwZT0sYXJndW1lbnRHZXQ9YXJndW1lbnQ9LGFyZ3VtZW50VHlwZT1jb21wdXRlUnVudGltZVR5cGVVc2VyZWNlaXZlckRhdGFpc0dldFJ1bnRpbWVUeXBlYXNHZXRSdW50aW1lVHlwZWlzSW52b2tlVG9TdHJpbmdyZWNlaXZlckdldGFyZ3VtZW50R2V0bnVsbEF3YXJlb3RoZXJHZXRSdW50aW1lVHlwZW90aGVyTnVsbEF3YXJlTWlzc2luZyByZWNlaXZlckdldCBpbiBNaXNzaW5nIGFyZ3VtZW50R2V0IGluIER1cGxpY2F0ZSBwcm9wZXJ0eSBnZXQgaW4gZGFydDJqc19pbmZvLnNyYy51dGlsZ3JhcGhGcm9tSW5mbyAgaW5mbzogZGVwZW5kZW5jeSBncmFwaCBpbmZvcm1hdGlvbiBpcyB3b3JrIGluIHByb2dyZXNzIGFuZCBtaWdodCBiZSBpbmNvbXBsZXRlYWRkRWRnZWluZm9QYXRoc2VnbWVudGN1cnJlbnRCYXNlc2VnbWVudFN0cmluZ193cml0ZUludF9yZWFkSW50X3BlbmRpbmdzZXJpYWxpemF0aW9uIGN5Y2xlcyBub3Qgc3VwcG9ydGVkX1Njb3BlTW9kZWxCdWlsZGVyJlZpc2l0b3ImVmFyaWFibGVDb2xsZWN0b3JNaXhpblNjb3BlTW9kZWxCdWlsZGVyX21vZGVsX3Njb3BlVmFyaWFibGVzX2V4ZWN1dGFibGVDb250ZXh0X2lzSW5zaWRlQ2xvc3VyZV9vdXRlcm1vc3ROb2RlX211dGF0ZWRWYXJpYWJsZXNfY2FwdHVyZWRWYXJpYWJsZXNfaW5UcnlfY3VycmVudFNjb3BlSW5mb19oYXNUaGlzTG9jYWxfYm94Q291bnRlcl9jdXJyZW50VHlwZVVzYWdlX3Njb3Blc0NhcHR1cmVkSW5DbG9zdXJlTWFwX2Nsb3N1cmVzVG9HZW5lcmF0ZUNvbXBsZXhpdHlMZXZlbC5kZWZpbml0ZWx5TGF6eUNvbXBsZXhpdHlMZXZlbC5jb25zdGFudGF0dGFjaENhcHR1cmVkU2NvcGVWYXJpYWJsZXNjYXB0dXJlZFZhcmlhYmxlc0ZvclNjb3Blbm9kZUJveGdldEJveE5hbWVlbnRlck5ld1Njb3BldmlzaXROZXdTY29wZW9sZFNjb3BlVmFyaWFibGVzb2xkSW5UcnlfbWFya1ZhcmlhYmxlQXNVc2VkdmlzaXRJbkNvbnRleHRfaGFuZGxlVmFyaWFibGVEZWNsYXJhdGlvbl9pbkN1cnJlbnRDb250ZXh0X3JlZ2lzdGVyTmVlZHNUaGlzX3VzZVR5cGVWYXJpYWJsZUFzTG9jYWx2aXNpdE5vZGVzSW5Db250ZXh0dmlzaXRJbnZva2FibGVvbGRJc0luc2lkZUNsb3N1cmVvbGRFeGVjdXRhYmxlQ29udGV4dHNhdmVkU2NvcGVJbmZvc2F2ZWRJc0luc2lkZUNsb3N1cmVmcmVlVmFyaWFibGVmcmVlVmFyaWFibGVGb3JSdGlfYW5hbHl6ZVR5cGVWYXJpYWJsZW9sZEN1cnJlbnRUeXBlVXNhZ2VtYWtlRWFnZXJfaXNGaWVsZE9yQ29uc3RydWN0b3JDb21wbGV4aXR5TGV2ZWxDb21wbGV4aXR5TGV2ZWwucG90ZW50aWFsbHlFYWdlcnBvdGVudGlhbGx5RWFnZXJkZWZpbml0ZWx5TGF6eUluaXRpYWxpemVyQ29tcGxleGl0eWVhZ2VybGF6eSZmaWVsZHM9W1VuZXhwZWN0ZWQgY29tcGxleGl0eSBsZXZlbCBJbml0aWFsaXplckNvbXBsZXhpdHkoTnVsbEF3YXJlRXhwcmVzc2lvbnN5bnRoZXRpY1ZhcmlhYmxlX0ZyZWVWYXJpYWJsZVZpc2l0b3JGcmVlVmFyaWFibGVWaXNpdG9yLmRlZmF1bHRUeXBlTm9kZW5vZGVUb0RlYnVnU3RyaW5ndGV4dExlbmd0aGJsb2NrVGV4dG5hbWVkT3JkZXJpbmduYXRpdmVPcmRlcmluZ2NvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlQXN5bmMgbWFya2VyIGdldE51bGxBd2FyZUV4cHJlc3Npb25nZXREZWZlcnJlZEltcG9ydGNvbnRhaW5zRnJlZVZhcmlhYmxlc1N0YXRpY1R5cGVDYWNoZXN0YXRpYy10eXBlLWNhY2hlX2V4cHJlc3Npb25UeXBlc19mb3JJbkl0ZXJhdG9yVHlwZXNleHByZXNzaW9uVHlwZXNmb3JJbkl0ZXJhdG9yVHlwZXNjb21waWxlci5zcmMuaW5mZXJyZXIudHlwZV9ncmFwaF9ub2Rlc0FyZ3VtZW50c1R5cGVzVHlwZUluZm9ybWF0aW9uX2Fzc2lnbm1lbnRzaXNTdGFibGVfc3RhdGljSGFzaENvZGVTVE9QX1RSQUNLSU5HX0FTU0lHTk1FTlRTX01BUktFUm5vQXNzaWdubWVudHN1bnRyYWNrZWR3aXRoQXNzaWdubWVudHNjb250ZXh0TWVtYmVybWlnaHRSZXN1bWVhZGRVc2VyYXJlQXNzaWdubWVudHNUcmFja2Vkc2FmZVR5cGVyZW1vdmVBbmRDbGVhclJlZmVyZW5jZXNfdG9TdHJ1Y3R1cmVkVGV4dEFwcGx5YWJsZVR5cGVJbmZvcm1hdGlvblBsYWNlaG9sZGVyVHlwZUluZm9ybWF0aW9uQ2Fubm90IHZpc2l0IHBsYWNlaG9sZGVyQ2Fubm90IHJlZmluZSBwbGFjZWhvbGRlclBsYWNlaG9sZGVyIFtQYXJhbWV0ZXJBc3NpZ25tZW50c0VsZW1lbnRUeXBlSW5mb3JtYXRpb25kaXNhYmxlSW5mZXJlbmNlRm9yQ2xvc3VyZXNfd2l0aEFzc2lnbm1lbnRzX01lbWJlclR5cGVJbmZvcm1hdGlvbiZFbGVtZW50VHlwZUluZm9ybWF0aW9uJkFwcGx5YWJsZVR5cGVJbmZvcm1hdGlvbk1lbWJlclR5cGVJbmZvcm1hdGlvbl9jYWxsZXJzYWRkQ2FsbHJlbW92ZUNhbGxjYWxsc19jb21wdXRlSXNDYWxsZWRPbmNlaXNDYWxsZWRPbmNlIGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0ZWQuaXNDbG9zdXJpemVkaGFuZGxlU3BlY2lhbENhc2VzX2hhbmRsZUZ1bmN0aW9uQ2FzZXBvdGVudGlhbGx5TmFycm93VHlwZV9wb3RlbnRpYWxseU5hcnJvd1R5cGV2aXNpdE1lbWJlclR5cGVJbmZvcm1hdGlvbkZpZWxkVHlwZUluZm9ybWF0aW9uX2ZpZWxkR2V0dGVyVHlwZUluZm9ybWF0aW9uX2dldHRlclNldHRlclR5cGVJbmZvcm1hdGlvbl9zZXR0ZXJNZXRob2RUeXBlSW5mb3JtYXRpb25fbWV0aG9kRmFjdG9yeUNvbnN0cnVjdG9yVHlwZUluZm9ybWF0aW9uR2VuZXJhdGl2ZUNvbnN0cnVjdG9yVHlwZUluZm9ybWF0aW9uUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uX3BhcmFtZXRlcl9pc0luc3RhbmNlTWVtYmVyUGFyYW1ldGVyX2lzQ2xvc3VyZVBhcmFtZXRlcl9pc0luaXRpYWxpemluZ0Zvcm1hbF9pc1RlYXJPZmZDbG9zdXJlUGFyYW1ldGVydmlzaXRQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb25QYXJhbWV0ZXIgUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uLmdldEluZmVycmVkU2lnbmF0dXJlQ2FsbFR5cGVmb3JJbl9DYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiZUeXBlSW5mb3JtYXRpb24mQXBwbHlhYmxlVHlwZUluZm9ybWF0aW9uQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb25fY2FsbENhbGwgc2l0ZSBTdGF0aWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbl9nZXRDYWxsZWRUeXBlSW5mb2lzU3ludGhlc2l6ZWRfZ2V0Q2FsbGVkVHlwZUluZm9XaXRoU2VsZWN0b3J2aXNpdFN0YXRpY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uRHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uX2NhbGxUeXBlX2hhc0Nsb3N1cmVDYWxsVGFyZ2V0c19jb25jcmV0ZVRhcmdldHNjb21wdXRlVHlwZWRTZWxlY3RvcnRhcmdldHNJbmNsdWRlQ29tcGxleE5vU3VjaE1ldGhvZGhhbmRsZUludHJpc2lmaWVkU2VsZWN0b3J1aW50MzFJbXBsZW1lbnRhdGlvbmlzUG9zaXRpdmVJbnR0cnlMYXRlcm5vbk51bGxFbXB0eVR5cGVoYXNOb0FyZ3VtZW50c29sZFRhcmdldHNqb2luVHlwZU1hc2tzRGljdGlvbmFyeSBsb29rdXAgZm9yICB5aWVsZHMgIHlpZWxkcyBbbnVsbF0uTWFwIGxvb2t1cCBmb3IgdmlzaXREeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb25DbG9zdXJlQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb25DYW5ub3QgY29tcHV0ZSBjYWxsZWVzIG9mIGEgY2xvc3VyZSBjYWxsLkNsb3N1cmUgY2FsbCB2aXNpdENsb3N1cmVDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbkNvbmNyZXRlVHlwZUluZm9ybWF0aW9uTm90IHN1cHBvcnRlZHZpc2l0Q29uY3JldGVUeXBlSW5mb3JtYXRpb25TdHJpbmdMaXRlcmFsVHlwZUluZm9ybWF0aW9uIHZhbHVlIHZpc2l0U3RyaW5nTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbkJvb2xMaXRlcmFsVHlwZUluZm9ybWF0aW9udmlzaXRCb29sTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbk5hcnJvd1R5cGVJbmZvcm1hdGlvbnR5cGVBbm5vdGF0aW9ubmFycm93ZWRUeXBlQU5PTUFMWSBXQVJOSU5HOiBuYXJyb3dlZCAgdmlhIE5hcnJvdyB0byB2aXNpdE5hcnJvd1R5cGVJbmZvcm1hdGlvbkluZmVycmVkVHlwZUluZm9ybWF0aW9ucGFyZW50VHlwZV9MaXN0VHlwZUluZm9ybWF0aW9uJlR5cGVJbmZvcm1hdGlvbiZUcmFjZWRUeXBlSW5mb3JtYXRpb25fZmxvd3NJbnRvZmxvd3NJbnRvYWRkRmxvd3NJbnRvVGFyZ2V0c0xpc3RUeXBlSW5mb3JtYXRpb25pbmZlcnJlZExlbmd0aExpc3QgdHlwZSB2aXNpdExpc3RUeXBlSW5mb3JtYXRpb25FbGVtZW50SW5Db250YWluZXJUeXBlSW5mb3JtYXRpb25FbGVtZW50IGluIGNvbnRhaW5lciB2aXNpdEVsZW1lbnRJbkNvbnRhaW5lclR5cGVJbmZvcm1hdGlvbl9TZXRUeXBlSW5mb3JtYXRpb24mVHlwZUluZm9ybWF0aW9uJlRyYWNlZFR5cGVJbmZvcm1hdGlvblNldFR5cGVJbmZvcm1hdGlvblNldCB0eXBlIHZpc2l0U2V0VHlwZUluZm9ybWF0aW9uRWxlbWVudEluU2V0VHlwZUluZm9ybWF0aW9uRWxlbWVudCBpbiBzZXQgdmlzaXRFbGVtZW50SW5TZXRUeXBlSW5mb3JtYXRpb25fTWFwVHlwZUluZm9ybWF0aW9uJlR5cGVJbmZvcm1hdGlvbiZUcmFjZWRUeXBlSW5mb3JtYXRpb25NYXBUeXBlSW5mb3JtYXRpb25fYWxsS2V5c0FyZVN0cmluZ3NpbkRpY3Rpb25hcnlNb2Rlbm9uTnVsbG5ld0luZm9rZXlTdHJpbmduZXdJbmZvc25vdCBzdXBwb3J0ZWR2aXNpdE1hcFR5cGVJbmZvcm1hdGlvbnRvVHlwZU1hc2tNYXAgIChLOiwgVjopIGNvbnRlbnRzIEtleUluTWFwVHlwZUluZm9ybWF0aW9udmlzaXRLZXlJbk1hcFR5cGVJbmZvcm1hdGlvbktleSBpbiBNYXAgVmFsdWVJbk1hcFR5cGVJbmZvcm1hdGlvbnZpc2l0VmFsdWVJbk1hcFR5cGVJbmZvcm1hdGlvblZhbHVlIGluIE1hcCBQaGlFbGVtZW50VHlwZUluZm9ybWF0aW9uYnJhbmNoTm9kZWlzVHJ5UGhpKCBbIC4uLiBddmlzaXRQaGlFbGVtZW50VHlwZUluZm9ybWF0aW9uX0Nsb3N1cmVUeXBlSW5mb3JtYXRpb24mVHlwZUluZm9ybWF0aW9uJkFwcGx5YWJsZVR5cGVJbmZvcm1hdGlvbkNsb3N1cmVUeXBlSW5mb3JtYXRpb25DbG9zdXJlIHZpc2l0Q2xvc3VyZVR5cGVJbmZvcm1hdGlvblRyYWNlZFR5cGVJbmZvcm1hdGlvbkF3YWl0VHlwZUluZm9ybWF0aW9uX25vZGV2aXNpdEF3YWl0VHlwZUluZm9ybWF0aW9uWWllbGRUeXBlSW5mb3JtYXRpb25ZaWVsZHZpc2l0WWllbGRUeXBlSW5mb3JtYXRpb25UeXBlSW5mb3JtYXRpb25WaXNpdG9ydmFsaWRDYWxsVHlwZVVuZXhwZWN0ZWQgY2FsbCB0eXBlIF9uYXJyb3dUeXBlb3RoZXJUeXBlU3RhdGljVHlwZVByb3ZpZGVyQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3NfdHJ1c3RUeXBlX2NoZWNrVHlwZV9jaGVja0Jvb2xDb252ZXJpb25wYXJhbWV0ZXJDaGVja1BvbGljeWNvbmRpdGlvbkNoZWNrUG9saWN5cmVhZEFzUHJvcGVydHlyZWFkQXNQYXJhbWV0ZXJVbmV4cGVjdGVkIHR5cGUgdmFyaWFibGUgaW4gc3RhdGljIGNvbnRleHQuVW5leHBlY3RlZCB0eXBlIHZhcmlhYmxlIGFjY2VzczogZW52aXJvbm1lbnRBY2Nlc3NfYnVpbGRFbnZpcm9ubWVudEZvclR5cGV1c2VzSW5zdGFuY2VQYXJhbWV0ZXJzcHJvY2Vzc1R5cGVWYXJpYWJsZXNpbmdsZXRvblN0cnVjdHVyZXNpbmdsZXRvblR1cGxlZnVsbFN0cnVjdHVyZWJ1aWxkQXNDaGVja3JlaWZpZWRUeXBlcmVmaW5lZE1hc2tfRW52aXJvbm1lbnRFeHByZXNzaW9uQW5kU3RydWN0dXJlS2VybmVsVHlwZUdyYXBoQnVpbGRlcl9pbmZlcnJlcl9hbmFseXplZE1lbWJlcl9hbmFseXplZE5vZGVfaW5HZW5lcmF0aXZlQ29uc3RydWN0b3Jfc3RhdGVJbnRlcm5hbF9zdGF0ZUFmdGVyV2hlblRydWVJbnRlcm5hbF9zdGF0ZUFmdGVyV2hlbkZhbHNlSW50ZXJuYWxfc2lkZUVmZmVjdHNCdWlsZGVyX2JyZWFrc0Zvcl9jb250aW51ZXNGb3JfY2FwdHVyZWRBbmRCb3hlZF9zdGF0aWNUeXBlUHJvdmlkZXJfYWNjdW11bGF0ZUlzQ2hlY2tzX2xvb3BMZXZlbGNhcHR1cmVkQW5kQm94ZWRfc3RhdGVpbkdlbmVyYXRpdmVDb25zdHJ1Y3Rvcl9zdGF0ZUFmdGVyV2hlblRydWVfc3RhdGVBZnRlcldoZW5GYWxzZV9zZXRTdGF0ZUFmdGVyd2hlblRydWV3aGVuRmFsc2VfaXNJbkNsYXNzT3JTdWJjbGFzc19jaGVja0lmRXhwb3Nlc1RoaXNpc1RoaXNFeHBvc2VkbWFya1RoaXNBc0V4cG9zZWRpc0luY29tcGF0aWJsZUludm9rZWFuYWx5emVkTWV0aG9kY29uZGl0aW9uQ29udGV4dG9sZEFjY3VtdWxhdGVJc0NoZWNrc2hhbmRsZVBhcmFtZXRlcnN1cGRhdGVGaWVsZGFuYWx5emVBcmd1bWVudHNoYW5kbGVDb25zdHJ1Y3Rvckludm9rZXNlZW5SZXR1cm5PclRocm93Y3JlYXRlSW5zdGFudGlhdGlvblR5cGVJbmZvcm1hdGlvblVuaGFuZGxlZCBleHByZXNzaW9uOiBVbmhhbmRsZWQgc3RhdGVtZW50OiBjcmVhdGVOdWxsVHlwZUluZm9ybWF0aW9uYWJvcnRzc3RhdGVCZWZvcmVoYW5kbGVDb25kaXRpb25zdGF0ZUFmdGVyTWVzc2FnZW1lcmdlRGlhbW9uZEZsb3dzZWVuQnJlYWtPckNvbnRpbnVlX3NldHVwQnJlYWtzQW5kQ29udGludWVzbWVyZ2VBZnRlckJyZWFrc19nZXRCcmVha3NfY2xlYXJCcmVha3NBbmRDb250aW51ZXNjb250aW51ZVRhcmdldHNzdGF0ZUJlZm9yZUNhc2VzdGF0ZUFmdGVyQ2FzZW1lcmdlQWxsc3RhdGVzVG9NZXJnZWhhc0RlZmF1bHRDYXNla2VlcE93bkxvY2Fsc2NyZWF0ZUxpc3RUeXBlSW5mb3JtYXRpb25lbGVtZW50VHlwZXNhbGxvY2F0ZVBoaWFkZFBoaUlucHV0Y29udGFpbmVyVHlwZWFsbG9jYXRlTGlzdGNyZWF0ZVNldFR5cGVJbmZvcm1hdGlvbmFsbG9jYXRlU2V0Y3JlYXRlTWFwVHlwZUluZm9ybWF0aW9uZW50cnlUeXBlc2tleVR5cGVzdmFsdWVUeXBlc2FsbG9jYXRlTWFwbWFya0luaXRpYWxpemF0aW9uQXNJbmRlZmluaXRlY3JlYXRlQm9vbFR5cGVJbmZvcm1hdGlvbmJvb2xMaXRlcmFsVHlwZWNyZWF0ZUludFR5cGVJbmZvcm1hdGlvbmdldENvbmNyZXRlVHlwZUZvcmNyZWF0ZURvdWJsZVR5cGVJbmZvcm1hdGlvbmNyZWF0ZVN0cmluZ1R5cGVJbmZvcm1hdGlvbnN0cmluZ0xpdGVyYWxUeXBlY3JlYXRlU3ltYm9sTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbmNyZWF0ZVR5cGVMaXRlcmFsSW5mb3JtYXRpb25VbmV4cGVjdGVkIHBhcmFtZXRlciBkZWNsYXJhdGlvbi5NaXNzaW5nIHR5cGUgaW5mb3JtYXRpb24gZm9yIGhhbmRsZVN0YXRpY0ludm9rZW5hcnJvd1R5cGVfcG90ZW50aWFsbHlBZGROdWxsQ2hlY2tuZXdUeXBlZFNlbGVjdG9yaGFuZGxlRHluYW1pY0ludm9rZV9oYW5kbGVEeW5hbWljc2VsZWN0b3JOZWVkc1VwZGF0ZWhhbmRsZUR5bmFtaWNHZXRoYW5kbGVEeW5hbWljU2V0Y3VycmVudE1hc2ttb3ZlTmV4dE1hc2tpdGVyYXRvclNlbGVjdG9yaXRlcmF0b3JNYXNrY3VycmVudFR5cGVfZ2V0TG9vcEJhY2tFZGdlc2xvZ2ljX2ZpbmRMZW5ndGhpc1ZhbGlkSW50X2lzQ29uc3RydWN0b3JPZlR5cGVkQXJyYXlTdWJjbGFzc2FyZ3VtZW50c1R5cGVzaGFuZGxlQ2xvc3VyZUNhbGxoYW5kbGVGb3JlaWduSW52b2tlVW5leHBlY3RlZCBzdGF0aWMgaW52b2NhdGlvbiB0YXJnZXQ6IGNyZWF0ZVN0YXRpY0dldFR5cGVJbmZvcm1hdGlvbnR5cGVkTWFza19wb3RlbnRpYWxseUFkZElzQ2hlY2tzdGF0ZUFmdGVyQ2hlY2tXaGVuVHJ1ZXN0YXRlQWZ0ZXJDaGVja1doZW5GYWxzZW5hcnJvd0xvY2Fsc3RhdGVBZnRlckNvbmRpdGlvbldoZW5UcnVlc3RhdGVBZnRlckNvbmRpdGlvbldoZW5GYWxzZXN0YXRlQWZ0ZXJUaGVuc3RhdGVBZnRlckVsc2VzdGF0ZUFmdGVyT3BlcmFuZFdoZW5UcnVlc3RhdGVBZnRlck9wZXJhbmRXaGVuRmFsc2VzdGF0ZUFmdGVyTGVmdFdoZW5UcnVlc3RhdGVBZnRlckxlZnRXaGVuRmFsc2VzdGF0ZUFmdGVyUmlnaHRXaGVuVHJ1ZXN0YXRlQWZ0ZXJSaWdodFdoZW5GYWxzZXN0YXRlQWZ0ZXJXaGVuVHJ1ZXN0YXRlQWZ0ZXJXaGVuRmFsc2VzdGF0ZUFmdGVyVW5leHBlY3RlZCBsb2dpY2FsIG9wZXJhdG9yICdmaXJzdFR5cGVzZWNvbmRUeXBlYWxsb2NhdGVEaWFtb25kUGhpaGFuZGxlTG9jYWxGdW5jdGlvbmxvY2FsRnVuY3Rpb25UeXBlY2xvc3VyZVN0YXRlc3RhdGVBZnRlckJvZHltZXJnZUZsb3dzdGF0ZUJlZm9yZUNhdGNoc3RhdGVBZnRlckNhdGNoaGFuZGxlU3VwZXJOb1N1Y2hNZXRob2RObyBtZW1iZXIgZm91bmQgZm9yIHN1cGVyIHByb3BlcnR5IGdldDogTm8gbWVtYmVyIGZvdW5kIGZvciBzdXBlciBwcm9wZXJ0eSBzZXQ6IFVuZXhwZWN0ZWQgc3VwZXIgaW52b2NhdGlvbiB0YXJnZXQ6IFR5cGVJbmZvcm1hdGlvbkNvbnN0YW50VmlzaXRvclVuZXhwZWN0ZWQgdW5ldmFsdWF0ZWQgY29uc3RhbnQ6IFJlZmluZW1lbnRMb2NhbFN0YXRlX2ZpZWxkc190cnlCbG9ja2luaXRpYWxjaGlsZFBhdGhkZWVwQ29weU9mZmllbGRTY29wZWlzSW5kZWZpbml0ZXRoZW5CcmFuY2hlbHNlQnJhbmNoaW5QbGFjZXN0YXRlc2FsbEJyYW5jaGVzQWJvcnRMb2NhbFN0YXRlKCkgWyAgbG9jYWxzOgpdbG9jYWxzPSxmaWVsZHM9LHNlZW5SZXR1cm5PclRocm93LHNlZW5CcmVha09yQ29udGludWVjb21waWxlci5zcmMuaW5mZXJyZXIuY2xvc3VyZV90cmFjZXJDbG9zdXJlVHJhY2VyVmlzaXRvcnRyYWNlZEVsZW1lbnRzX2NhbGxzVG9BbmFseXplVHJhY2luZyBhYnN0cmFjdCBtZXRob2RzOiBfYW5hbHl6ZUNhbGxfdGFnQXNGdW5jdGlvbkFwcGx5VGFyZ2V0IG1pZ2h0IGJlIHBhc3NlZCB0byBhcHBseTogX3JlZ2lzdGVyQ2FsbEZvckxhdGVyQW5hbHlzaXNmdW5jdGlvbkVsZW1lbnRjdXJyZW50VXNlcmJhaWxvdXRQYXNzZWQgdG8gYSBjbG9zdXJlY2FsbGVkVXNlZCBpbiBKUyBfY2hlY2tJZkZ1bmN0aW9uQXBwbHlzdGF0aWMgY2FsbF9jaGVja0lmQ3VycmVudFVzZXJkeW5hbWljIGNhbGxhZGROZXdFc2NhcGVJbmZvcm1hdGlvblN0YXRpY1RlYXJPZmZDbG9zdXJlVHJhY2VyVmlzaXRvcnRyYWNlZEVsZW1lbnRjb21waWxlci5zcmMuaW5mZXJyZXIuZGVidWdWRVJCT1NFUFJJTlRfU1VNTUFSWUFOT01BTFlfV0FSTlBSSU5UX0dSQVBIUFJJTlRfR1JBUEhfQUxMX05PREVTbG9jYWxzX2hhbmRsZXJJdGVyYWJsZU1peGluX2xldmVsY29weU9mVW5leHBlY3RlZCBibG9jayAgZm9yIFZhcmlhYmxlU2NvcGUudHJ5QmxvY2tjb21tb25QYXJlbnRmb3JFYWNoTG9jYWxVbnRpbFNjb3BlX2ZvckVhY2hMb2NhbFVudGlsU2NvcGVzZWVuTG9jYWxzU2NvcGUgbm90IGZvdW5kOiAKb3JpZ2luPXNjb3BlPWZvckVhY2hMb2NhbFZhcmlhYmxlU2NvcGUoICBsZXZlbDogIGNvcHlPZjpWYXJpYWJsZVNjb3BlKCAgdHJ5QmxvY2s6ICAgdmFyaWFibGVzOiAgICAgICAgcGFyZW50OiAgICAgcmVzdH0gRmllbGRJbml0aWFsaXphdGlvblNjb3BlaW50ZXJuYWxGcm9tdGhlblNjb3BlZWxzZVNjb3Blb3RoZXJTY29wZXsgcG9zaXRpb25hbCA9ICwgbmFtZWQgPSAgfUFyZ3VtZW50c1R5cGVzLmhhc2hDb2RlQXJndW1lbnRzVHlwZXNJdGVyYXRvcl9pdGVyYXRlUG9zaXRpb25hbGl0ZXJhdGVlX2N1cnJlbnRJdGVyYXRvckxvY2Fsc0hhbmRsZXJObyBjb21tb24gcGFyZW50IGZvcgoxOjI6Tm9uLWVtcHR5IGNvbW1vbiBwYXJlbnQgZm9yCm15VHlwZW1lcmdlTG9jYWxlbHNlVHlwZURpZmYgY29tbW9uIHBhcmVudCBmb3IKCjI6Y29tbW9uOm1lcmdlZGFsbG9jYXRlTG9vcFBoaUxvY2Fsc0hhbmRsZXIoY29tcGlsZXIuc3JjLmluZmVycmVyLmxpc3RfdHJhY2VyTGlzdFRyYWNlclZpc2l0b3Jwb3NpdGlvbmFsTGVuZ3RoVXNlZCBpbiBhIG5vdC1vayBzZWxlY3Rvcm9rTGlzdFNlbGVjdG9yc1NldGNoZWNrTXV0YWJsZWNoZWNrR3Jvd2FibGVkb05vdENoYW5nZUxlbmd0aFNlbGVjdG9yc1NldGNvbXBpbGVyLnNyYy5pbmZlcnJlci5tYXBfdHJhY2VyTWFwVHJhY2VyVmlzaXRvckFkZGluZyBtYXAgd2l0aCB1bmtub3duIHR5cGVpbmZvIHRvIGN1cnJlbnQgbWFwTWFwIHVzZWQgaW4gYSBub3Qtb2sgc2VsZWN0b3IgW29rTWFwU2VsZWN0b3JzU2V0Y29tcGlsZXIuc3JjLmluZmVycmVyLnNldF90cmFjZXJTZXRUcmFjZXJWaXNpdG9yQWRkaW5nIGl0ZXJhYmxlIHdpdGggdW5rbm93biB0eXBlaW5mbyB0byBjdXJyZW50IHNldFNldCB1c2VkIGluIGEgbm90LW9rIHNlbGVjdG9yIFtva1NldFNlbGVjdG9yU2V0ZGFydDJqcy5pbmZlcnJlci50eXBlX2dyYXBoX2R1bXBUeXBlR3JhcGhEdW1wb3V0cHV0RGlydHlwZWdyYXBoYXNzaWdubWVudHNCZWZvcmVBbmFseXNpc2Fzc2lnbm1lbnRzQmVmb3JlVHJhY2luZ3VzZWRGaWxlbmFtZXNhbGxUeXBlc2ZpbGVuYW1lRnJvbUVsZW1lbnRhZGRNaXNzaW5nTm9kZXNnZXQtc2V0LS1jb25zdHJ1Y3RvcnNlcmlhbE51bWJlcl9HcmFwaEdlbmVyYXRvcm5vZGVJZGVzY2FwZVJlZ2V4cFsie308PnxdZGVmYXVsdE5vZGVDb2xvciNlZWZmZWVwaGlDb2xvciNlZWZmZmZuYXJyb3dDb2xvcmNhbGxDb2xvciNmZmZmZWV1bmNoYW5nZWRFZGdlYWRkZWRFZGdlZ3JlZW40cmVtb3ZlZEVkZ2VyZWQzdGVtcG9yYXJ5RWRnZW9yYW5nZWdldE5vZGVhcHBlbmRkaWdyYXBoIHtzaG9ydGVuZ2V0RnJlc2hJZGVzY2FwZUxhYmVsZHN0ZHN0VGV4dENvbmNyZXRlfDxyZXR1cm5UeXBlPiAgW3NoYXBlPXJlY29yZCxzdHlsZT1kb3R0ZWQsbGFiZWw9IiJdIFtjb2xvcj0iOnJldHVyblR5cGUgLT4gZ2V0U3R5bGVGb3JOb2Rlc3R5bGU9ZG90dGVkc3R5bGU9ZmlsbGVkLGZpbGxjb2xvcj0iYXBwZW5kRGV0YWlscwoocmV0dXJuIHZhbHVlKQooZnJvbSA8YT4ge3t9fCBbc2hhcGU9cmVjb3JkLGxhYmVsPSIiLG9yaWdpbmFsU2V0dHJhY2VyU2V0TmFycm93ClBoaSBFbGVtZW50SW5Db250YWluZXJFbGVtZW50SW5TZXRLZXlJbk1hcFZhbHVlSW5NYXBTdHJpbmdMaXRlcmFsCiJCb29sTGl0ZXJhbApoYW5kbGVDYWxsYXJnTmFtZUNsb3N1cmVDYWxsU2l0ZVN0YXRpY0NhbGxTaXRlRHluYW1pY0NhbGxTaXRlb2JqTWVtYmVyCkNsb3N1cmUKQXdhaXQKWWllbGQKVHlwZVN5c3RlbVN0cmF0ZWd5VHlwZVN5c3RlbV9vcmRlcmVkVHlwZUluZm9ybWF0aW9uc251bGxUeXBlQ2FjaGVpbnRUeXBlQ2FjaGV1aW50MzJUeXBlQ2FjaGV1aW50MzFUeXBlQ2FjaGVwb3NpdGl2ZUludFR5cGVDYWNoZWRvdWJsZVR5cGVDYWNoZW51bVR5cGVDYWNoZWJvb2xUeXBlQ2FjaGVmdW5jdGlvblR5cGVDYWNoZWxpc3RUeXBlQ2FjaGVjb25zdExpc3RUeXBlQ2FjaGVmaXhlZExpc3RUeXBlQ2FjaGVncm93YWJsZUxpc3RUeXBlQ2FjaGVzZXRUeXBlQ2FjaGVjb25zdFNldFR5cGVDYWNoZW1hcFR5cGVDYWNoZWNvbnN0TWFwVHlwZUNhY2hlc3RyaW5nVHlwZUNhY2hldHlwZVR5cGVDYWNoZWR5bmFtaWNUeXBlQ2FjaGVhc3luY0Z1dHVyZVR5cGVDYWNoZXN5bmNTdGFySXRlcmFibGVUeXBlQ2FjaGVhc3luY1N0YXJTdHJlYW1UeXBlQ2FjaGVBbHJlYWR5IGNvbnN0cnVjdGluZyBncmFwaCBmb3IgX2lzTm9uTnVsbE5hcnJvd1VuZXhwZWN0ZWQgYWJzdHJhY3QgbWVtYmVyIF9nZXRJbmZlcnJlZFR5cGVPZk1lbWJlcmlzRWxlbWVudEluZmVycmVkZWxlbWVudFR5cGVNYXNra2V5VHlwZU1hc2t2YWx1ZVR5cGVNYXNra2V5VHlwZUluZm92YWx1ZVR5cGVJbmZvZmlyc3RJbnB1dHNlY29uZElucHV0X2FkZFBoaWlzRHluYW1pY0luZ29yaW5nTnVsbG1heUJlTnVsbHNzYS50cmFjZXJfSFRyYWNlciZIR3JhcGhWaXNpdG9yJlRyYWNlclV0aWxhZGRQcmVkZWNlc3NvcnMgIkJhZGRTdWNjZXNzb3JzYWRkSW5zdHJ1Y3Rpb25zc3RyaW5naWZpZXJiY2ljaGFuZ2VzdGVtcG9yYXJ5SWRpbnN0cnVjdGlvblN0cmluZyA8fEAKZnJvbV9iY2l0b19iY2l4aGFuZGxlcnNwaGlJZGlucHV0SWRzIFsgSElSSEluc3RydWN0aW9uU3RyaW5naWZpZXJMYXRlVmFsdWU6IG9wY29kZUFiczogQWRkQml0QW5kQml0Tm90OiBCaXRPckJpdFhvcmxlbmd0aElkaW5kZXhJZEJvdW5kc0NoZWNrOiBsZW5ndGggPSAsIGluZGV4ID0gQnJlYWsgOiAoQkJyZWFrOiAoQkNvbnN0YW50OiBDb250aW51ZSBDb250aW51ZTogKEJoYW5kbGVHZW5lcmljSW52b2tlQ3JlYXRlQ3JlYXRlQm94RGl2aWRlRXhpdEZpZWxkR2V0OiBOdWxsQ2hlY2sgRmllbGRHZXQ6IHZhbHVlSWRGaWVsZFNldDogcmVjZWl2ZXJJZFJlYWRNb2RpZnlXcml0ZTogPSBHZXRMZW5ndGg6IGxvY2FsTmFtZUxvY2FsR2V0OiBMb2NhbFNldDogR290bzogKEJHcmVhdGVyR3JlYXRlckVxdWFsSWRlbnRpdHljb25kaXRpb25JZElmICgpOiAoQikgZWxzZSAoQmludm9rZVR5cGVmdW5jdGlvbk5hbWVhcmd1bWVudHNTdHJpbmdJbmRleDogSW5kZXhBc3NpZ246IF0gPSBJbnRlcmNlcHRvciAoSW50ZXJjZXB0b3I6IGhhbmRsZUludm9rZUR5bmFtaWNJbnZva2VDbG9zdXJlSW52b2tlRHluYW1pY01ldGhvZEludm9rZUR5bmFtaWNHZXR0ZXJJbnZva2VEeW5hbWljU2V0dGVySW52b2tlU3RhdGljSW52b2tlU3VwZXJJbnZva2VDb25zdHJ1Y3RvckJvZHlJbnZva2VHZW5lcmF0b3JCb2R5Rm9yZWlnbkNvZGU6IExlc3NMZXNzRXF1YWxlbGVtZW50c1N0cmluZ0xpdGVyYWxMaXN0OiBbYm9keUJsb2NrTG9vcEJyYW5jaCAoKSB0aGVuIChCTXVsdGlwbHlOZWdhdGU6IE5vdDogUGFyYW1ldGVyVmFsdWU6IExvY2FsVmFsdWU6IFBoaTogUmVmOiBSZXR1cm46IFNoaWZ0TGVmdFNoaWZ0UmlnaHRTdGF0aWM6IExhenlTdGF0aWM6IFN0YXRpY1N0b3JlOiBsZWZ0SWRyaWdodElkU3RyaW5nQ29uY2F0OiAgKyBTdHJpbmdpZnk6IFN1YnRyYWN0U3dpdGNoOiAoOiBCZGVmYXVsdDogQlRocm93OiBUaHJvd0V4cHJlc3Npb246IFRydW5jYXRpbmdEaXZpZGVSZW1haW5kZXJFeGl0VHJ5VHJ5OiAsIENhdGNoOiAsIEZpbmFsbHk6IEpvaW46IEJJczogSXNWaWFJbnRlcmNlcHRvcjogX3R5cGVDb252ZXJzaW9uS2luZFR5cGVDb252ZXJzaW9uOiBfcHJpbWl0aXZlQ2hlY2tLaW5kUHJpbWl0aXZlQ2hlY2s6IFJFQ0VJVkVSQVJHVU1FTlRCb29sQ29udmVyc2lvbjogVHlwZUtub3duOiAgd2l0bmVzc2VkIGJ5IFJhbmdlQ29udmVyc2lvbjogVHlwZUluZm9SZWFkUmF3OiBUeXBlSW5mb1JlYWRWYXJpYWJsZTogVHlwZUluZm9FeHByZXNzaW9uOiBBd2FpdDogSXNUZXN0OiBBc0NoZWNrOiBBc0NoZWNrU2ltcGxlOiBTdWJ0eXBlQ2hlY2s6IExvYWRUeXBlOiBJbnN0YW5jZUVudmlyb25tZW50OiBUeXBlRXZhbDogVHlwZUJpbmQ6IGRhcnQyanMuX3JlY2lwZV9zeW50YXhSZWNpcGVzZXBhcmF0b3JTdHJpbmd0b1R5cGV0b1R5cGVTdHJpbmdwdXNoRHluYW1pY3B1c2hEeW5hbWljU3RyaW5ncHVzaFZvaWRwdXNoVm9pZFN0cmluZ3dyYXBTdGFyd3JhcFN0YXJTdHJpbmd3cmFwUXVlc3Rpb253cmFwUXVlc3Rpb25TdHJpbmd3cmFwRnV0dXJlT3J3cmFwRnV0dXJlT3JTdHJpbmdzdGFydFR5cGVBcmd1bWVudHNzdGFydFR5cGVBcmd1bWVudHNTdHJpbmdlbmRUeXBlQXJndW1lbnRzU3RyaW5nc3RhcnRGdW5jdGlvbkFyZ3VtZW50c3N0YXJ0RnVuY3Rpb25Bcmd1bWVudHNTdHJpbmdlbmRGdW5jdGlvbkFyZ3VtZW50c2VuZEZ1bmN0aW9uQXJndW1lbnRzU3RyaW5nc3RhcnRPcHRpb25hbEdyb3Vwc3RhcnRPcHRpb25hbEdyb3VwU3RyaW5nZW5kT3B0aW9uYWxHcm91cGVuZE9wdGlvbmFsR3JvdXBTdHJpbmdzdGFydE5hbWVkR3JvdXBzdGFydE5hbWVkR3JvdXBTdHJpbmdlbmROYW1lZEdyb3VwZW5kTmFtZWRHcm91cFN0cmluZ25hbWVTZXBhcmF0b3JuYW1lU2VwYXJhdG9yU3RyaW5nZ2VuZXJpY0Z1bmN0aW9uVHlwZVBhcmFtZXRlckluZGV4Z2VuZXJpY0Z1bmN0aW9uVHlwZVBhcmFtZXRlckluZGV4U3RyaW5nZXh0ZW5zaW9uT3BleHRlbnNpb25PcFN0cmluZ3B1c2hOZXZlckV4dGVuc2lvbnB1c2hOZXZlckV4dGVuc2lvblN0cmluZ3B1c2hBbnlFeHRlbnNpb25wdXNoQW55RXh0ZW5zaW9uU3RyaW5nX2Zvcm1mZWVkX2Zvcm1mZWVkU3RyaW5nX3NwYWNlX3NwYWNlU3RyaW5nX2V4Y2xhbWF0aW9uX2V4Y2xhbWF0aW9uU3RyaW5nX2hhc2hfZG9sbGFyX2RvbGxhclN0cmluZ19wZXJjZW50X3BlcmNlbnRTdHJpbmdfYW1wZXJzYW5kX2FtcGVyc2FuZFN0cmluZ19hcG9zdHJvcGhlX2Fwb3N0cm9waGVTdHJpbmdfbGVmdFBhcmVuX2xlZnRQYXJlblN0cmluZ19yaWdodFBhcmVuX3JpZ2h0UGFyZW5TdHJpbmdfYXN0ZXJpc2tfYXN0ZXJpc2tTdHJpbmdfcGx1c19wbHVzU3RyaW5nX2NvbW1hU3RyaW5nX21pbnVzX21pbnVzU3RyaW5nX3BlcmlvZF9wZXJpb2RTdHJpbmdfc2xhc2hfc2xhc2hTdHJpbmdfZGlnaXQwX2RpZ2l0OV9jb2xvblN0cmluZ19zZW1pY29sb25fc2VtaWNvbG9uU3RyaW5nX2xlc3NUaGFuX2xlc3NUaGFuU3RyaW5nX2VxdWFsc1N0cmluZ19ncmVhdGVyVGhhbl9ncmVhdGVyVGhhblN0cmluZ19xdWVzdGlvbl9xdWVzdGlvblN0cmluZ19hdF9hdFN0cmluZ191cHBlcmNhc2VBX3VwcGVyY2FzZVpfbGVmdEJyYWNrZXRTdHJpbmdfYmFja3NsYXNoX2JhY2tzbGFzaFN0cmluZ19yaWdodEJyYWNrZXRTdHJpbmdfY2lyY3VtZmxleF9jaXJjdW1mbGV4U3RyaW5nX3VuZGVyc2NvcmVfdW5kZXJzY29yZVN0cmluZ19iYWNrdGlja19iYWNrdGlja1N0cmluZ19sb3dlcmNhc2VBX2xvd2VyY2FzZVpfbGVmdEJyYWNlU3RyaW5nX3ZlcnRpY2FsX3ZlcnRpY2FsU3RyaW5nX3JpZ2h0QnJhY2VTdHJpbmdfdGlsZGVfdGlsZGVTdHJpbmdkaWdpdFZhbHVlaXNJZGVudGlmaWVyU3RhcnR0ZXN0RXF1aXZhbGVuY2U6IFN0cmluZy5mcm9tQ2hhckNvZGUoKSAhPSB0ZXN0RXh0ZW5zaW9uLnRvU3RyaW5nKCkgIT0gZGFydDJqcy5qc19lbWl0dGVyLmNsYXNzX3N0dWJfZ2VuZXJhdG9yZ2VuZXJhdGVDbGFzc0NvbnN0cnVjdG9ydHlwZUluaXRzdGhpcy4jID0gI2ZpZWxkSW5pdGlhbGl6ZXJzZnVuY3Rpb24oIywgIykgeyAjOyAjOyB0aGlzLiMoKTt9Z2VuZXJhdGVHZXR0ZXJmdW5jdGlvbigjKSB7IHJldHVybiAjLiMgfWdlbmVyYXRlU2V0dGVyZnVuY3Rpb24oIywgdikgeyByZXR1cm4gIy4jID0gdjsgfWJ1aWxkR2V0dGVyJHJlY2VpdmVydGhpcy4jKCMpIy4jKClnZW5lcmF0ZWRTdHVic2dlbmVyYXRlZFNlbGVjdG9yc2Nsb3N1cmVDYWxsTmFtZWZ1bmN0aW9uKCMpIHsgcmV0dXJuICMuIygjKTsgfWpzTmFtZXNhZGROb1N1Y2hNZXRob2RIYW5kbGVyc21hc2tTZXRwYXJhbWV0ZXJOYW1lc2FyZ05hbWVzdGhpcy4jbm9TdWNoTWV0aG9kTmFtZSgjcmVjZWl2ZXIsCiAgICAgICAgICAgICAgICAgICAgI2NyZWF0ZUludm9jYXRpb25NaXJyb3IoI21ldGhvZE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2ludGVybmFsTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYXJndW1lbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNuYW1lZEFyZ3VtZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdHlwZUFyZ3VtZW50Q291bnQpKWZ1bmN0aW9uKCRyZWNlaXZlciwgIykgeyByZXR1cm4gIyB9YnVpbGRUZWFyT2ZmQ29kZXRlYXJPZmZBY2Nlc3NFeHByZXNzaW9udGVhck9mZkdsb2JhbE9iamVjdFN0cmluZ3RlYXJPZmZHbG9iYWxPYmplY3RmdW5jdGlvbigpIHsgdGhyb3cgIkhlbHBlciAnY2xvc3VyZUZyb21UZWFyT2ZmJyBtaXNzaW5nLiIgfU1pc3NpbmdIZWxwZXJGdW5jdGlvbihmdW5jdGlvbigpIHsgdGhyb3cgIkhlbHBlciAnY2xvc3VyZUZyb21UZWFyT2ZmJyBtaXNzaW5nLiIgfSkoKXRlYXJPZmZHZXR0ZXJ0ZWFyT2ZmQWNjZXNzVGV4dGZ1bmN0aW9uIHRlYXJPZmZHZXR0ZXIoZnVuY3MsIGFwcGx5VHJhbXBvbGluZUluZGV4LCByZWZsZWN0aW9uSW5mbywgbmFtZSwgaXNJbnRlcmNlcHRlZCkgewogIHJldHVybiBpc0ludGVyY2VwdGVkCiAgICAgID8gbmV3IEZ1bmN0aW9uKCJmdW5jcyIsICJhcHBseVRyYW1wb2xpbmVJbmRleCIsICJyZWZsZWN0aW9uSW5mbyIsICJuYW1lIiwKICAgICAgICAgICAgICAgICAgICAgI3RlYXJPZmZHbG9iYWxPYmplY3RTdHJpbmcsICJjIiwKICAgICAgICAgICJyZXR1cm4gZnVuY3Rpb24gdGVhck9mZl8iICsgbmFtZSArIChmdW5jdGlvbkNvdW50ZXIrKykgKyAiKHJlY2VpdmVyKSB7IiArCiAgICAgICAgICAgICJpZiAoYyA9PT0gbnVsbCkgYyA9ICIgKyAjdGVhck9mZkFjY2Vzc1RleHQgKyAiKCIgKwogICAgICAgICAgICAgICAgInRoaXMsIGZ1bmNzLCBhcHBseVRyYW1wb2xpbmVJbmRleCwgcmVmbGVjdGlvbkluZm8sIGZhbHNlLCB0cnVlLCBuYW1lKTsiICsKICAgICAgICAgICAgICAgICJyZXR1cm4gbmV3IGModGhpcywgZnVuY3NbMF0sIHJlY2VpdmVyLCBuYW1lKTsiICsKICAgICAgICAgICAifSIpKGZ1bmNzLCBhcHBseVRyYW1wb2xpbmVJbmRleCwgcmVmbGVjdGlvbkluZm8sIG5hbWUsICN0ZWFyT2ZmR2xvYmFsT2JqZWN0LCBudWxsKQogICAgICA6IG5ldyBGdW5jdGlvbigiZnVuY3MiLCAiYXBwbHlUcmFtcG9saW5lSW5kZXgiLCAicmVmbGVjdGlvbkluZm8iLCAibmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICN0ZWFyT2ZmR2xvYmFsT2JqZWN0U3RyaW5nLCAiYyIsCiAgICAgICAgICAicmV0dXJuIGZ1bmN0aW9uIHRlYXJPZmZfIiArIG5hbWUgKyAoZnVuY3Rpb25Db3VudGVyKyspKyAiKCkgeyIgKwogICAgICAgICAgICAiaWYgKGMgPT09IG51bGwpIGMgPSAiICsgI3RlYXJPZmZBY2Nlc3NUZXh0ICsgIigiICsKICAgICAgICAgICAgICAgICJ0aGlzLCBmdW5jcywgYXBwbHlUcmFtcG9saW5lSW5kZXgsIHJlZmxlY3Rpb25JbmZvLCBmYWxzZSwgZmFsc2UsIG5hbWUpOyIgKwogICAgICAgICAgICAgICAgInJldHVybiBuZXcgYyh0aGlzLCBmdW5jc1swXSwgbnVsbCwgbmFtZSk7IiArCiAgICAgICAgICAgICAifSIpKGZ1bmNzLCBhcHBseVRyYW1wb2xpbmVJbmRleCwgcmVmbGVjdGlvbkluZm8sIG5hbWUsICN0ZWFyT2ZmR2xvYmFsT2JqZWN0LCBudWxsKTsKfSAgICAgIGZ1bmN0aW9uIHRlYXJPZmZHZXR0ZXIoZnVuY3MsIGFwcGx5VHJhbXBvbGluZUluZGV4LCByZWZsZWN0aW9uSW5mbywgbmFtZSwgaXNJbnRlcmNlcHRlZCkgewogICAgICAgIHZhciBjYWNoZSA9IG51bGw7CiAgICAgICAgcmV0dXJuIGlzSW50ZXJjZXB0ZWQKICAgICAgICAgICAgPyBmdW5jdGlvbihyZWNlaXZlcikgewogICAgICAgICAgICAgICAgaWYgKGNhY2hlID09PSBudWxsKSBjYWNoZSA9ICMoCiAgICAgICAgICAgICAgICAgICAgdGhpcywgZnVuY3MsIGFwcGx5VHJhbXBvbGluZUluZGV4LCByZWZsZWN0aW9uSW5mbywgZmFsc2UsIHRydWUsIG5hbWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBjYWNoZSh0aGlzLCBmdW5jc1swXSwgcmVjZWl2ZXIsIG5hbWUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGlmIChjYWNoZSA9PT0gbnVsbCkgY2FjaGUgPSAjKAogICAgICAgICAgICAgICAgICAgIHRoaXMsIGZ1bmNzLCBhcHBseVRyYW1wb2xpbmVJbmRleCwgcmVmbGVjdGlvbkluZm8sIGZhbHNlLCBmYWxzZSwgbmFtZSk7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGNhY2hlKHRoaXMsIGZ1bmNzWzBdLCBudWxsLCBuYW1lKTsKICAgICAgICAgICAgICB9OwogICAgICB9ICAgICAgZnVuY3Rpb24gdGVhck9mZihmdW5jcywgYXBwbHlUcmFtcG9saW5lSW5kZXgsCiAgICAgICAgICByZWZsZWN0aW9uSW5mbywgaXNTdGF0aWMsIG5hbWUsIGlzSW50ZXJjZXB0ZWQpIHsKICAgICAgdmFyIGNhY2hlID0gbnVsbDsKICAgICAgcmV0dXJuIGlzU3RhdGljCiAgICAgICAgICA/IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIGlmIChjYWNoZSA9PT0gbnVsbCkgY2FjaGUgPSAjdGVhck9mZigKICAgICAgICAgICAgICAgICAgdGhpcywgZnVuY3MsIGFwcGx5VHJhbXBvbGluZUluZGV4LAogICAgICAgICAgICAgICAgICByZWZsZWN0aW9uSW5mbywgdHJ1ZSwgZmFsc2UsIG5hbWUpLnByb3RvdHlwZTsKICAgICAgICAgICAgICByZXR1cm4gY2FjaGU7CiAgICAgICAgICAgIH0KICAgICAgICAgIDogdGVhck9mZkdldHRlcihmdW5jcywgYXBwbHlUcmFtcG9saW5lSW5kZXgsCiAgICAgICAgICAgICAgcmVmbGVjdGlvbkluZm8sIG5hbWUsIGlzSW50ZXJjZXB0ZWQpOwogICAgfWRhcnQyanMuanNfZW1pdHRlci5pbnN0YW50aWF0aW9uX3N0dWJfZ2VuZXJhdG9yX2dlbmVyYXRlU3R1YmZ1bmN0aW9uRmllbGR0YXJnZXRTZWxlY3RvcnRoaXMuIy4jWyNddGhpcy4jWyNdZnVuY3Rpb24oIykgeyByZXR1cm4gdGhpcy4jLiMoIyk7IH1fZ2VuZXJhdGVTaWduYXR1cmVTdHViX2dlbmVyYXRlU2lnbmF0dXJlTmV3UnRpX2dlbmVyYXRlU2lnbmF0dXJlTGVnYWN5ZnVuY3Rpb24oKSB7IHJldHVybiAjKCModGhpcy4jKSwgdGhpcy4jKTsgfV9nZW5lcmljQ2xvc3VyZUNhbid0IGZpbmQgQ2xvc3VyZSBmaWVsZCBvZiBjYWxsU2VsZWN0b3JzY29tcHV0ZUxpdmVQYXJhbWV0ZXJTdHJ1Y3R1cmVzcGFyYW1ldGVyU3RydWN0dXJlc3N0dWJzZ2VuZXJpY0NhbGxTdHJ1Y3R1cmVnZW5lcmljU2VsZWN0b3JkYXJ0MmpzLmpzX2VtaXR0ZXIuaW50ZXJjZXB0b3Jfc3R1Yl9nZW5lcmF0b3JlbWJlZGRlZE5hbWVzaW50ZXJjZXB0b3JGb3JidWlsZEludGVyY2VwdG9yQ2hlY2sodHlwZW9mIHJlY2VpdmVyKSA9PSAiYm9vbGVhbiJpbnRlcm5hbCBlcnJvcnJlY2VpdmVyLmNvbnN0cnVjdG9yID09IEFycmF5KHR5cGVvZiByZWNlaXZlcikgPT0gInN0cmluZyJyZWNlaXZlciA9PSBudWxsaWYgKCMpIHJldHVybiAjaGFzQXJyYXloYXNCb29saGFzRG91YmxlaGFzSW50aGFzTnVsbGhhc051bWJlcmhhc1N0cmluZ2hhc05hdGl2ZWFueU5hdGl2ZUNsYXNzZXN3aGVuTnVtYmVyaW50ZXJjZXB0b3JGb3JOdW1iZXJ7CiAgICAgICAgICAgIGlmIChNYXRoLmZsb29yKHJlY2VpdmVyKSA9PSByZWNlaXZlcikgcmV0dXJuICM7CiAgICAgICAgICAgIHJldHVybiAjOwogICAgICAgIH1yZXR1cm4gI2lmICh0eXBlb2YgcmVjZWl2ZXIgPT0gIm51bWJlciIpICM7aWYgKHJlY2VpdmVyID09IG51bGwpIHJldHVybiByZWNlaXZlcnsKICAgICAgICAgIGlmICh0eXBlb2YgcmVjZWl2ZXIgIT0gIm9iamVjdCIpIHsKICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlY2VpdmVyID09ICJmdW5jdGlvbiIgKSByZXR1cm4gIzsKICAgICAgICAgICAgICByZXR1cm4gcmVjZWl2ZXI7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAocmVjZWl2ZXIgaW5zdGFuY2VvZiAjKSByZXR1cm4gcmVjZWl2ZXI7CiAgICAgICAgICByZXR1cm4gIyhyZWNlaXZlcik7CiAgICAgIH1qc1Vua25vd25pZiAoIShyZWNlaXZlciBpbnN0YW5jZW9mICMpKSByZXR1cm4gIztyZXR1cm4gcmVjZWl2ZXJmdW5jdGlvbihyZWNlaXZlcikgeyAjOyB9X2dlbmVyYXRlSXNKc0luZGV4YWJsZUNhbGx1c2UxdXNlMmRpc3BhdGNoUHJvcGVydHloZWxwZXJFeHByZXNzaW9uX2Zhc3RQYXRoRm9yT25lU2hvdEludGVyY2VwdG9yewogICAgICAgICAgaWYgKHJlY2VpdmVyID09IG51bGwpIHJldHVybiBhMCA9PSBudWxsOwogICAgICAgICAgaWYgKHR5cGVvZiByZWNlaXZlciAhPSAib2JqZWN0IikKICAgICAgICAgICAgcmV0dXJuIGEwICE9IG51bGwgJiYgcmVjZWl2ZXIgPT09IGEwOwogICAgICAgIH1yZWNlaXZlciAgYTAjID4+PiAwaWYgKHR5cGVvZiByZWNlaXZlciA9PSAibnVtYmVyIiAmJiB0eXBlb2YgYTAgPT0gIm51bWJlciIpICByZXR1cm4gIztpZiAodHlwZW9mIHJlY2VpdmVyID09ICJudW1iZXIiKSByZXR1cm4gLXJlY2VpdmVyICAgICAgICAgIGlmICh0eXBlb2YgcmVjZWl2ZXIgPT0gIm51bWJlciIgJiYgTWF0aC5mbG9vcihyZWNlaXZlcikgPT0gcmVjZWl2ZXIpCiAgICAgICAgICAgIHJldHVybiAofnJlY2VpdmVyKSA+Pj4gMDsKICAgICAgICAgIGNvbnRhaW5zQXJyYXljb250YWluc1N0cmluZ2NvbnRhaW5zSnNJbmRleGFibGVhcnJheUNoZWNrZ2VuZXJpY0luZGV4YWJsZUNoZWNrb3JFeHB0eXBlb2YgcmVjZWl2ZXIgPT0gInN0cmluZyIgICAgICAgICAgaWYgKHR5cGVvZiBhMCA9PT0gIm51bWJlciIpCiAgICAgICAgICAgIGlmICgjKQogICAgICAgICAgICAgIGlmICgoYTAgPj4+IDApID09PSBhMCAmJiBhMCA8IHJlY2VpdmVyLmxlbmd0aCkKICAgICAgICAgICAgICAgIHJldHVybiByZWNlaXZlclthMF07CiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhMCA9PT0gIm51bWJlciIpCiAgICAgICAgICAgIGlmICgjICYmICFyZWNlaXZlci5pbW11dGFibGUkbGlzdCAmJgogICAgICAgICAgICAgICAgKGEwID4+PiAwKSA9PT0gYTAgJiYgYTAgPCByZWNlaXZlci5sZW5ndGgpCiAgICAgICAgICAgICAgcmV0dXJuIHJlY2VpdmVyW2EwXSA9IGExOwogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVjZWl2ZXIgPT09ICJudW1iZXIiKSByZXR1cm4gTWF0aC5hYnMocmVjZWl2ZXIpOwogICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlY2VpdmVyID09PSAibnVtYmVyIikKICAgICAgICAgICAgIHJldHVybiByZWNlaXZlciA+IDAgPyAxIDogcmVjZWl2ZXIgPCAwID8gLTEgOiByZWNlaXZlcjsKICAgICAgICBnZXRJbnRlcmNlcHRvck5hbWVnbG9iYWxPYmplY3RvcHRpbWl6ZWRQYXRoZnVuY3Rpb24oIykgeyAjOyByZXR1cm4gIy4jKHJlY2VpdmVyKS4jKCMpIH1kYXJ0MmpzLmpzX2VtaXR0ZXIubWFpbl9jYWxsX3N0dWJfZ2VuZXJhdG9yZ2VuZXJhdGVJbnZva2VNYWlubWFpbkNhbGxDbG9zdXJlY3VycmVudFNjcmlwdEFjY2VzcyAgICAgIChmdW5jdGlvbiAoY2FsbGJhY2spIHsKICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAidW5kZWZpbmVkIikgewogICAgICAgICAgY2FsbGJhY2sobnVsbCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIC8vIFdoZW4gcnVubmluZyBhcyBhIGNvbnRlbnQtc2NyaXB0IG9mIGEgY2hyb21lLWV4dGVuc2lvbiB0aGUKICAgICAgICAvLyAnY3VycmVudFNjcmlwdCcgaXMgYG51bGxgIChidXQgbm90IHVuZGVmaW5lZCkuCiAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudC5jdXJyZW50U2NyaXB0ICE9ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICBjYWxsYmFjayhkb2N1bWVudC5jdXJyZW50U2NyaXB0KTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHZhciBzY3JpcHRzID0gZG9jdW1lbnQuc2NyaXB0czsKICAgICAgICBmdW5jdGlvbiBvbkxvYWQoZXZlbnQpIHsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NyaXB0cy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICBzY3JpcHRzW2ldLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLCBvbkxvYWQsIGZhbHNlKTsKICAgICAgICAgIH0KICAgICAgICAgIGNhbGxiYWNrKGV2ZW50LnRhcmdldCk7CiAgICAgICAgfQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NyaXB0cy5sZW5ndGg7ICsraSkgewogICAgICAgICAgc2NyaXB0c1tpXS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgb25Mb2FkLCBmYWxzZSk7CiAgICAgICAgfQogICAgICB9KShmdW5jdGlvbihjdXJyZW50U2NyaXB0KSB7CiAgICAgICAgI2N1cnJlbnRTY3JpcHQgPSBjdXJyZW50U2NyaXB0OwoKICAgICAgICBpZiAodHlwZW9mIGRhcnRNYWluUnVubmVyID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICBkYXJ0TWFpblJ1bm5lcigjbWFpbkNhbGxDbG9zdXJlLCBbXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICNtYWluQ2FsbENsb3N1cmUoW10pOwogICAgICAgIH0KICAgICAgfSlkYXJ0MmpzLmpzX2VtaXR0ZXIubmF0aXZlX2dlbmVyYXRvck5hdGl2ZUdlbmVyYXRvcm5lZWRzSXNvbGF0ZUFmZmluaXR5VGFnSW5pdGlhbGl6YXRpb25nZW5lcmF0ZUlzb2xhdGVBZmZpbml0eVRhZ0luaXRpYWxpemF0aW9uaW50ZXJuU3RyaW5nRnVuY3Rpb25nZXRJc29sYXRlVGFnQWNjZXNzaXNvbGF0ZVRhZ0FjY2Vzc2Rpc3BhdGNoUHJvcGVydHlOYW1lQWNjZXNzICAgICAgIWZ1bmN0aW9uKCkgewogICAgICAgIHZhciBpbnRlcm4gPSAjaW50ZXJuU3RyaW5nRnVuY3Rpb247CgogICAgICAgICNnZXRJc29sYXRlVGFnID0gZnVuY3Rpb24obmFtZSkgewogICAgICAgICAgcmV0dXJuIGludGVybigiX19fZGFydF8iICsgbmFtZSArICNpc29sYXRlVGFnKTsKICAgICAgICB9OwoKICAgICAgICAvLyBUbyBlbnN1cmUgdGhhdCBkaWZmZXJlbnQgcHJvZ3JhbXMgbG9hZGVkIGludG8gdGhlIHNhbWUgY29udGV4dCAocGFnZSkKICAgICAgICAvLyB1c2UgZGlzdGluY3QgZGlzcGF0Y2ggcHJvcGVyaWVzLCB3ZSBwbGFjZSBhbiBvYmplY3Qgb24gYE9iamVjdGAgdG8KICAgICAgICAvLyBjb250YWluIHRoZSBuYW1lcyBhbHJlYWR5IGluIHVzZS4KICAgICAgICB2YXIgdGFibGVQcm9wZXJ0eSA9ICJfX19kYXJ0X2lzb2xhdGVfdGFnc18iOwogICAgICAgIHZhciB1c2VkUHJvcGVydGllcyA9IE9iamVjdFt0YWJsZVByb3BlcnR5XSB8fAogICAgICAgICAgICAoT2JqZWN0W3RhYmxlUHJvcGVydHldID0gT2JqZWN0LmNyZWF0ZShudWxsKSk7CgogICAgICAgIHZhciByb290UHJvcGVydHkgPSAiXyI7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IDsgaSsrKSB7CiAgICAgICAgICB2YXIgcHJvcGVydHkgPSBpbnRlcm4ocm9vdFByb3BlcnR5ICsgIl8iICsgaSArICJfIik7CiAgICAgICAgICBpZiAoIShwcm9wZXJ0eSBpbiB1c2VkUHJvcGVydGllcykpIHsKICAgICAgICAgICAgdXNlZFByb3BlcnRpZXNbcHJvcGVydHldID0gMTsKICAgICAgICAgICAgI2lzb2xhdGVUYWcgPSBwcm9wZXJ0eTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICgjaW5pdGlhbGl6ZURpc3BhdGNoUHJvcGVydHkpIHsKICAgICAgICAgICNkaXNwYXRjaFByb3BlcnR5TmFtZSA9ICNnZXRJc29sYXRlVGFnKCJkaXNwYXRjaF9yZWNvcmQiKTsKICAgICAgICB9CiAgICAgIH0oKTsKICAgIGluaXRpYWxpemVEaXNwYXRjaFByb3BlcnR5Z2VuZXJhdGVJc29sYXRlVGFnUm9vdFp4WXhYZW5jb2RlTmF0aXZlSW5mb25vbkxlYWZUYWdzZm9ybWF0VGFnc2xlYWZTdHJub25MZWFmU3RyYnVpbGROYXRpdmVJbmZvSGFuZGxlcmluZm9BY2Nlc3NzdWJjbGFzc1JlYWRHZW5lcmF0b3JpbnRlcmNlcHRvcnNCeVRhZ0FjY2Vzc2xlYWZUYWdzQWNjZXNzc3ViY2xhc3NSZWFkc3ViY2xhc3Nlc1tpXSAgICAgICAgICAvLyBUaGUgbmF0aXZlIGluZm8gbG9va3MgbGlrZSB0aGlzOgogICAgICAgICAgLy8KICAgICAgICAgIC8vIEh0bWxFbGVtZW50OiB7CiAgICAgICAgICAvLyAgICAgIiUiOiAiSFRNTERpdkVsZW1lbnR8SFRNTEFuY2hvckVsZW1lbnQ7SFRNTEVsZW1lbnQ7RmFuY3lCdXR0b24iCiAgICAgICAgICAvLwogICAgICAgICAgLy8gVGhlIGZpcnN0IHR3byBzZW1pY29sb24tc2VwYXJhdGVkIHBhcnRzIGNvbnRhaW4gZGlzcGF0Y2ggdGFncywgdGhlCiAgICAgICAgICAvLyB0aGlyZCBjb250YWlucyB0aGUgSmF2YVNjcmlwdCBuYW1lcyBmb3IgY2xhc3Nlcy4KICAgICAgICAgIC8vCiAgICAgICAgICAvLyBUaGUgdGFncyBpbmRpY2F0ZSB0aGF0IEphdmFTY3JpcHQgb2JqZWN0cyB3aXRoIHRoZSBkaXNwYXRjaCB0YWdzCiAgICAgICAgICAvLyAodXN1YWxseSBjb25zdHJ1Y3RvciBuYW1lcykgSFRNTERpdkVsZW1lbnQsIEhUTUxBbmNob3JFbGVtZW50IGFuZAogICAgICAgICAgLy8gSFRNTEVsZW1lbnQgYWxsIG1hcCB0byB0aGUgRGFydCBuYXRpdmUgY2xhc3MgbmFtZWQgSHRtbEVsZW1lbnQuCiAgICAgICAgICAvLyBUaGUgZmlyc3Qgc2V0IGlzIGZvciBlZmZlY3RpdmUgbGVhZiBub2RlcyBpbiB0aGUgaGllcmFyY2h5LCB0aGUKICAgICAgICAgIC8vIHNlY29uZCBzZXQgaXMgbm9uLWxlYWYgbm9kZXMuCiAgICAgICAgICAvLwogICAgICAgICAgLy8gVGhlIHRoaXJkIHBhcnQgY29udGFpbnMgdGhlIEphdmFTY3JpcHQgbmFtZXMgb2YgRGFydCBjbGFzc2VzIHRoYXQKICAgICAgICAgIC8vIGV4dGVuZCB0aGUgbmF0aXZlIGNsYXNzLiBIZXJlLCBGYW5jeUJ1dHRvbiBleHRlbmRzIEh0bWxFbGVtZW50LCBzbwogICAgICAgICAgLy8gdGhlIHJ1bnRpbWUgbmVlZHMgdG8ga25vdyB0aGF0IHdpbmRvdy5IVE1MRWxlbWVudC5wcm90b3R5cGUgaXMgdGhlCiAgICAgICAgICAvLyBwcm90b3R5cGUgdGhhdCBuZWVkcyB0byBiZSBleHRlbmRlZCBpbiBjcmVhdGluZyB0aGUgY3VzdG9tIGVsZW1lbnQuCiAgICAgICAgICAvLwogICAgICAgICAgLy8gVGhlIGluZm9ybWF0aW9uIGlzIHVzZWQgdG8gYnVpbGQgdGFibGVzIHJlZmVyZW5jZWQgYnkKICAgICAgICAgIC8vIGdldE5hdGl2ZUludGVyY2VwdG9yIGFuZCBjdXN0b20gZWxlbWVudCBzdXBwb3J0LgogICAgICAgICAgewogICAgICAgICAgICB2YXIgbmF0aXZlU3BlYyA9ICNpbmZvLnNwbGl0KCI7Iik7CiAgICAgICAgICAgIGlmIChuYXRpdmVTcGVjWzBdKSB7CiAgICAgICAgICAgICAgdmFyIHRhZ3MgPSBuYXRpdmVTcGVjWzBdLnNwbGl0KCJ8Iik7CiAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWdzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAjaW50ZXJjZXB0b3JzQnlUYWdBY2Nlc3NbdGFnc1tpXV0gPSAjY29uc3RydWN0b3I7CiAgICAgICAgICAgICAgICAjbGVhZlRhZ3NBY2Nlc3NbdGFnc1tpXV0gPSB0cnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAobmF0aXZlU3BlY1sxXSkgewogICAgICAgICAgICAgIHRhZ3MgPSBuYXRpdmVTcGVjWzFdLnNwbGl0KCJ8Iik7CiAgICAgICAgICAgICAgaWYgKCNhbGxvd05hdGl2ZXNTdWJjbGFzc2luZykgewogICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVNwZWNbMl0pIHsKICAgICAgICAgICAgICAgICAgdmFyIHN1YmNsYXNzZXMgPSBuYXRpdmVTcGVjWzJdLnNwbGl0KCJ8Iik7CiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ViY2xhc3Nlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHZhciBzdWJjbGFzcyA9ICNzdWJjbGFzc1JlYWQ7CiAgICAgICAgICAgICAgICAgICAgc3ViY2xhc3MuI25hdGl2ZVN1cGVyY2xhc3NUYWdOYW1lID0gdGFnc1swXTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRhZ3MubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgI2ludGVyY2VwdG9yc0J5VGFnQWNjZXNzW3RhZ3NbaV1dID0gI2NvbnN0cnVjdG9yOwogICAgICAgICAgICAgICAgICAjbGVhZlRhZ3NBY2Nlc3NbdGFnc1tpXV0gPSBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgIG5hdGl2ZVN1cGVyY2xhc3NUYWdOYW1lYWxsb3dOYXRpdmVzU3ViY2xhc3NpbmdkYXJ0MmpzLmpzX2VtaXR0ZXIucGFyYW1ldGVyX3N0dWJfZ2VuZXJhdG9yZW1wdHlTZWxlY3RvclNldG5lZWRzU3VwZXJHZXR0ZXJnZW5lcmF0ZVBhcmFtZXRlclN0dWJleHRyYUFyZ3VtZW50Q291bnRyZWNlaXZlckFyZ3VtZW50TmFtZW9wdGlvbmFsUGFyYW1ldGVyU3RhcnR0eXBlUnRpcmV0dXJuICMuIy5jYWxsKHRoaXMsICMpO3JldHVybiB0aGlzLiMoIyk7cmV0dXJuICMoIylmdW5jdGlvbigjKSB7ICM7IH1saXZlU2VsZWN0b3JzbWVtYmVyVHlwZVBhcmFtZXRlcnNyZW5hbWVkQ2FsbFNlbGVjdG9yc3N0dWJTZWxlY3RvcnNuYW1lZFNlbGVjdG9yY2xvc3VyZVNlbGVjdG9ycmVuYW1lZFNlbGVjdG9ycmVuYW1lZFNlbGVjdG9yV2l0aFR5cGVBcmd1bWVudHNkYXJ0MmpzLmpzX2VtaXR0ZXIucnVudGltZV90eXBlX2dlbmVyYXRvcmpzSW50ZXJvcEFuYWx5c2lzRnVuY3Rpb25UeXBlU2lnbmF0dXJlRW1pdHRlcmNsYXNzRnVuY3Rpb25UeXBlVHlwZVRlc3RUeXBlVGVzdHNpc1Rlc3RfcHJvcGVydGllc2FkZElzVGVzdGFkZFN1YnN0aXR1dGlvbmFkZFNpZ25hdHVyZWhhbmRsZVR5cGVUZXN0dHlwZVRlc3Rfb3V0cHV0VW5pdFZpc2l0b3JnZW5lcmF0ZUZ1bmN0aW9uVHlwZVNpZ25hdHVyZWlzVHlwZUNvbnRhaW5lZEluZ2VuZXJhdGVUeXBlQ2hlY2tfZ2V0U3Vic3RpdHV0aW9uQ29kZV9nZW5lcmF0ZUlzVGVzdHNPbmZ1bmN0aW9uKCkgeyByZXR1cm4gIyB9X2dldFZhcmlhYmxlTmFtZV9nZXRTdWJzdGl0dXRpb25SZXByZXNlbnRhdGlvbmVtaXRUeXBlQ2hlY2tnZW5lcmF0ZWRfVHlwZUNvbnRhaW5lZEluT3V0cHV0VW5pdFZpc2l0b3JkYXJ0MmpzLnRhcmdldF9jaGVja3NkeW5hbWljQ2hlY2tzY292YXJpYW50Q2hlY2tzX2NoZWNrT3RoZXJQYXJhbWV0ZXJzX2NoZWNrQ292YXJpYW50UGFyYW1ldGVyc19jaGVja1R5cGVQYXJhbWV0ZXJzX0p1bXBIYW5kbGVyRW50cnlqdW1wSW5zdHJ1Y3Rpb25KdW1wSGFuZGxlcmhhc0FueUNvbnRpbnVlTnVsbEp1bXBIYW5kbGVyTnVsbEp1bXBIYW5kbGVyLmdlbmVyYXRlQnJlYWsgc2hvdWxkIG5vdCBiZSBjYWxsZWQuTnVsbEp1bXBIYW5kbGVyLmdlbmVyYXRlQ29udGludWUgc2hvdWxkIG5vdCBiZSBjYWxsZWQuVGFyZ2V0SnVtcEhhbmRsZXJqdW1wc2NvbnRpbnVlSW5zdHJ1Y3Rpb25Td2l0Y2hDYXNlSnVtcEhhbmRsZXJpc0NvbnRpbnVlVG9Td2l0Y2hDYXNlS2VybmVsU3RyaW5nQnVpbGRlclVuZXhwZWN0ZWQgbm9kZTogY29uY2F0cmVkaXJlY3Rpb25NYXBwaW5ndHlwZVZhcmlhYmxlTG9jYWxzY2FjaGVkVHlwZU9mVGhpc2NhY2hlZFR5cGVzT2ZDYXB0dXJlZFZhcmlhYmxlc2FjdGl2YXRpb25WYXJpYWJsZXNyZWRpcmVjdEVsZW1lbnRpc1N0b3JlZEluQ2xvc3VyZUZpZWxkY3JlYXRlQm94akZyb21pc1BhcmFtZXRlcnVwZGF0ZUNhcHR1cmVCb3hjdXJyZW50Qm94dG9CZUNvcGllZEVsZW1lbnRzb2xkQm94bmV3Qm94Ym94ZWRWYXJpYWJsZW9sZFZhbHVlZ2V0VHlwZU9mVGhpc2lzTmF0aXZlVXBncmFkZUZhY3Rvcnlpc0FjY2Vzc2VkRGlyZWN0bHlyZWRpcmVjdFRhcmdldF9pc1VzZWRJblRyeU9yR2VuZXJhdG9yUnVudGltZSB0eXBlIGluZm9ybWF0aW9uIG5vdCBhdmFpbGFibGUgZm9yIENhbm5vdCBmaW5kIHZhbHVlIGdldFR5cGVPZkNhcHR1cmVkVmFyaWFibGVsb2NhbEJveGxvY2FsVmFsdWVnZXRMb2NhbExvY2FsICBpcyBzdG9yZWQgaW4gYSBjbG9zdXJlIGZpZWxkLmxvb3BFbnRyeXNhdmVkRGlyZWN0TG9jYWxzZW50ZXJMb29wVXBkYXRlc3Bvc3RMb29wRGVmaW5pdGlvbm1lcmdlV2l0aG90aGVyTG9jYWxzam9pbmVkTG9jYWxzbWluZWxvY2Fsc0hhbmRsZXJzdGhpc1ZhbHVlU3ludGhldGljTG9jYWxfbmV4dEhhc2hDb2RlU3ludGhldGljTG9jYWwoTG9vcEhhbmRsZXJpbml0aWFsaXplckdyYXBoc3RhcnRCbG9ja2luaXRpYWxpemVyQmxvY2tiZWdpbkJvZHlCbG9ja3VwZGF0ZUdyYXBodXBkYXRlQmxvY2t1cGRhdGVFbmRCbG9ja2xvb3BLaW5kbGFiZWxHcmFwaGxhYmVsSW5mb3ByZXZpb3VzQmxvY2ticmFuY2hFeGl0QmxvY2tsb29wRXhpdEJsb2NrS2VybmVsTG9vcEhhbmRsZXJfS2VybmVsTG9vcFR5cGVWaXNpdG9yU3NhQnJhbmNoc3RhcnRMb2NhbHNleGl0TG9jYWxzU3NhQnJhbmNoQnVpbGRlcmRpYWdub3N0aWNOb2RlY2hlY2tOb3RBYm9ydGVkYWJvcnRlZCBjb250cm9sIGZsb3djb25kaXRpb25CcmFuY2hzdGFydEJyYW5jaGNvbmRpdGlvbkJyYW5jaExvY2Fsc0NhbkJlUmV1c2VkbWVyZ2VMb2NhbHNtYXlSZXVzZUZyb21Mb2NhbHNmcm9tQnJhbmNodG9CcmFuY2hmcm9tTG9jYWxzYnVpbGRCcmFuY2h2aXNpdEJyYW5jaGpvaW5CcmFuY2hfaGFuZGxlRGlhbW9uZEJyYW5jaGhhbmRsZUlmTnVsbGxlZnRFeHByZXNzaW9uYm9vbGlmaWVkTGVmdGJvb2xpZmllZFJpZ2h0bm90SXNBbmR0aGVuVmFsdWVlbHNlVmFsdWVjb25kaXRpb25TdGFydEJsb2NrY29uZGl0aW9uR3JhcGhTd2l0Y2hDb250aW51ZUFuYWx5c2lzY29udGFpbnNDb250aW51ZXN3aXRjaENhc2VCb2R5Y29udGludWVTdG10dHJ5RmluYWxseVN0YXRlbWVudCB0eXBlICBub3QgaGFuZGxlZCBpbiBJclRvRWxlbWVudE1hcGRhcnQyanMuanNfbW9kZWwuZW52SlByb2dyYW1FbnZfY29tcG9uZW50c0pMaWJyYXJ5RW52bGlicmFyeS1lbnZfY2xhc3NNYXBfbWVtYmVyTWFwX3NldHRlck1hcHNldHRlck1hcEpMaWJyYXJ5RGF0YWltcG9ydENvdW50SkNsYXNzRW52S2luZEpDbGFzc0VudktpbmQubm9kZUpDbGFzc0VudktpbmQuY2xvc3VyZUpDbGFzc0VudktpbmQucmVjb3JkSkNsYXNzRW52VW5zdXBwb3J0ZWQgSkNsYXNzRW52S2luZCBKQ2xhc3NFbnZJbXBsY2xhc3MtZW52X2NvbnN0cnVjdG9yTWFwX2NvbnN0cnVjdG9yQm9keUxpc3RSZWNvcmRFbnZyZWNvcmQtZW52Q2xvc3VyZUNsYXNzRW52Y2xvc3VyZS1jbGFzcy1lbnZKQ2xhc3NEYXRhS2luZEpDbGFzc0RhdGFLaW5kLm5vZGVKQ2xhc3NEYXRhVW5leHBlY3RlZCBKQ2xhc3NEYXRhS2luZCBKQ2xhc3NEYXRhSW1wbGlzQ2FsbFR5cGVDb21wdXRlZEpNZW1iZXJEYXRhS2luZEpNZW1iZXJEYXRhS2luZC5mdW5jdGlvbkpNZW1iZXJEYXRhS2luZC5maWVsZEpNZW1iZXJEYXRhS2luZC5jb25zdHJ1Y3RvckpNZW1iZXJEYXRhS2luZC5jb25zdHJ1Y3RvckJvZHlKTWVtYmVyRGF0YUtpbmQuc2lnbmF0dXJlSk1lbWJlckRhdGFLaW5kLmdlbmVyYXRvckJvZHljbG9zdXJlRnVuY3Rpb25KTWVtYmVyRGF0YVVuZXhwZWN0ZWQgSk1lbWJlckRhdGFLaW5kIEpNZW1iZXJEYXRhSW1wbEZ1bmN0aW9uRGF0YUZ1bmN0aW9uRGF0YVR5cGVWYXJpYWJsZXNNaXhpbkZ1bmN0aW9uRGF0YUZvckVhY2hQYXJhbWV0ZXJNaXhpbl9GdW5jdGlvbkRhdGFJbXBsJkpNZW1iZXJEYXRhSW1wbCZGdW5jdGlvbkRhdGFUeXBlVmFyaWFibGVzTWl4aW5fRnVuY3Rpb25EYXRhSW1wbCZKTWVtYmVyRGF0YUltcGwmRnVuY3Rpb25EYXRhVHlwZVZhcmlhYmxlc01peGluJkZ1bmN0aW9uRGF0YUZvckVhY2hQYXJhbWV0ZXJNaXhpbkZ1bmN0aW9uRGF0YUltcGxmdW5jdGlvbi1kYXRhVW5leHBlY3RlZCBtZW1iZXIgbm9kZSBTaWduYXR1cmVGdW5jdGlvbkRhdGFzaWduYXR1cmUtZnVuY3Rpb24tZGF0YVNpZ25hdHVyZUZ1bmN0aW9uRGF0YS5nZXRGdW5jdGlvblR5cGVTaWduYXR1cmVEYXRhLmZvckVhY2hQYXJhbWV0ZXJEZWxlZ2F0ZWRGdW5jdGlvbkRhdGFiYXNlRGF0YUdlbmVyYXRvckJvZHlGdW5jdGlvbkRhdGFnZW5lcmF0b3ItYm9keS1kYXRhSkNvbnN0cnVjdG9yRGF0YUpDb25zdHJ1Y3RvckRhdGFJbXBsY29uc3RydWN0b3ItZGF0YV9jb25zdGFudENvbnN0cnVjdG9yY29tcHV0ZUNvbnN0YW50Q29uc3RydWN0b3JVbmV4cGVjdGVkIGNvbnN0cnVjdG9yIENvbnN0cnVjdG9yRGF0YUltcGwuX2dldENvbnN0cnVjdG9yQ29uc3RhbnRDb25zdHJ1Y3RvckJvZHlEYXRhSW1wbGNvbnN0cnVjdG9yLWJvZHktZGF0YUpGaWVsZERhdGFKRmllbGREYXRhSW1wbGZpZWxkLWRhdGFfY29uc3RhbnRFeHByZXNzaW9uRmllbGREYXRhSW1wbC5nZXRGaWVsZENvbnN0YW50SlR5cGVkZWZEYXRhSlR5cGVWYXJpYWJsZURhdGFfZGVmYXVsdFR5cGVvcmRlcmVkX3R5cGVzZXRPcmRlcmVkVHlwZVNldG9yZGVyZWQtdHlwZS1zZXRfbGV2ZWxzdHlwZXNDb3VudHR5cGVMaW5rQnVpbGRlcmxpbmtzbGV2ZWxDb3VudGxldmVsc3R5cGVMaXN0bGV2ZWxMaXN0Q2Fubm90IGV4dGVuZCBnZW5lcmljIGNsYXNzICB1c2luZyBPcmRlcmVkVHlwZVNldC5leHRlbmRDbGFzc2V4dGVuZGVkVHlwZXNsZXZlbE9mZnNldHNPcmRlcmVkVHlwZVNldEJ1aWxkZXJPcmRlcmVkVHlwZVNldEJ1aWxkZXJCYXNlX2FkZEFsbFN1cGVydHlwZXN0b1R5cGVTZXRTdXBlcnR5cGVzIG5vdCBjb21wdXRlZCBvbiBkdXJpbmcgcmVzb2x1dGlvbiBvZiBfYWRkQXREZXB0aHByZXZleGlzdGluZ1R5cGVJbnZhbGlkIG9yZGVyZWQgdHlwZXNldCBmb3IgZGFydDJqcy5jb21waWxlX3RpbWVfY29uc3RhbnRfZXZhbHVhdG9yQ29uc3RhbnRFbnZpcm9ubWVudEJhY2tlbmRDb25zdGFudEVudmlyb25tZW50cmVnaXN0ZXJMYXp5U3RhdGljQ29uc3RhbnRDb21waWxlclRhc2tDYWNoZWRTdGF0aWNUeXBlTm8gc3RhdGljIHR5cGUgZm91bmQgZm9yIE5vIGZvci1pbiBpdGVyYXRvciB0eXBlIGZvdW5kIGZvciBObyBzdGF0aWMgdHlwZSBjYWNoZWQgZm9yIGtlcm5lbC5kZWJ1Z19EZWJ1Z1ByaW50ZXImVmlzaXRvciZJbmRlbnRhdGlvbl9EZWJ1Z1ByaW50ZXImVmlzaXRvciZJbmRlbnRhdGlvbiZUYWdnaW5nLS11bm5hbWVkLS1LZXJuZWxEYXJ0VHlwZXNzdWJ0eXBlVmlzaXRvcnBvdGVudGlhbFN1YnR5cGVWaXNpdG9yS2VybmVsT3JkZXJlZFR5cGVTZXRCdWlsZGVyQWJzdHJhY3RUeXBlUmVsYXRpb25NaXhpbl9LZXJuZWxTdWJ0eXBlVmlzaXRvciZTdWJ0eXBlVmlzaXRvciZBYnN0cmFjdFR5cGVSZWxhdGlvbk1peGluS2VybmVsU3VidHlwZVZpc2l0b3JfX0tlcm5lbFBvdGVudGlhbFN1YnR5cGVWaXNpdG9yJlBvdGVudGlhbFN1YnR5cGVWaXNpdG9yJkFic3RyYWN0VHlwZVJlbGF0aW9uTWl4aW5fS2VybmVsUG90ZW50aWFsU3VidHlwZVZpc2l0b3JTdHJpbmdpZmllckNvbnN0YW50aWZpZXJmYWlsTm9kZV9pbml0aWFsaXplckxvY2Fsc19jb21wdXRlTGlzdF9jb21wdXRlQXJndW1lbnRzX2NvbXB1dGVDb25zdHJ1Y3Rvckludm9jYXRpb25yZWdpc3RlckZpZWxkVW5leHBlY3RlZCBpbml0aWFsaXplciBEYXJ0VHlwZUNvbnZlcnRlcmN1cnJlbnRGdW5jdGlvblR5cGVQYXJhbWV0ZXJzQ29uc3RhbnRWYWx1ZWZpZXJVbmV4cGVjdGVkIHVuZXZhbHVhdGVkIGNvbnN0YW50IGRhcnQyanMua2VybmVsLmVudm1lcmdlU29ydEtQcm9ncmFtRW52X2FkZExpYnJhcmllc19lbnN1cmVMaWJyYXJ5TWFwS0xpYnJhcnlFbnZfZW5zdXJlQ2xhc3NNYXBfZW5zdXJlTWVtYmVyTWFwc1VuZXhwZWN0ZWQgbGlicmFyeSBtZW1iZXIgbm9kZTogS0xpYnJhcnlEYXRhX21ldGFkYXRhS0NsYXNzRW52S0NsYXNzRW52SW1wbF9idWlsZEZvcndhcmRpbmdDb25zdHJ1Y3RvcnN1cGVyY2xhc3NDb25zdHJ1Y3RvcnN1cGVyRnVuY3Rpb25jbG9uZVZhcmlhYmxlaW5jbHVkZVN0YXRpY2luY2x1ZGVOb1N1Y2hNZXRob2RGb3J3YXJkZXJzYWRkQ29uc3RydWN0b3JzbWl4aW5NZW1iZXJDb3VudGNsb25lVmlzaXRvcnN1cGVyY2xhc3NTdWJzdGl0dXRpb25zdXBlcmNsYXNzQ2xvbmVyZm9yd2FyZGluZ0NvbnN0cnVjdG9yS0NsYXNzRGF0YUtDbGFzc0RhdGFJbXBsS01lbWJlckRhdGFLTWVtYmVyRGF0YUltcGxLRnVuY3Rpb25EYXRhS0Z1bmN0aW9uRGF0YU1peGluX0tGdW5jdGlvbkRhdGFJbXBsJktNZW1iZXJEYXRhSW1wbCZLRnVuY3Rpb25EYXRhTWl4aW5LRnVuY3Rpb25EYXRhSW1wbEtDb25zdHJ1Y3RvckRhdGFLQ29uc3RydWN0b3JEYXRhSW1wbEtGaWVsZERhdGFLRmllbGREYXRhSW1wbEtUeXBlZGVmRGF0YUtUeXBlVmFyaWFibGVEYXRhb3JkZXJCeUZpbGVPZmZzZXRhTG9jYkxvY2FVcmliVXJpdXJpQ29tcGFyZXVuaXZlcnNlLmZ1bmN0aW9uX3NldGNvbXB1dGVNYXNrX2NyZWF0ZVNlbGVjdG9yTWFza3NlbGVjdG9yTWFza25vU3VjaE1ldGhvZE1hc2tub1N1Y2hNZXRob2RzU2VsZWN0b3JNYXNrRnVuY3Rpb25TZXROb2RlTUFYX0VMRU1FTlRTX0lOX0xJU1Rub1N1Y2hNZXRob2RRdWVyeUZ1bmN0aW9uU2V0Tm9kZShGdW5jdGlvblNldFF1ZXJ5RW1wdHlGdW5jdGlvblNldFF1ZXJ5PGVtcHR5PkZ1bGxGdW5jdGlvblNldFF1ZXJ5X3JlY2VpdmVySW1wYWN0UmVnaXN0cnlNaXhpbkltcGFjdERhdGF0b0RhdGFTaW5rSW1wYWN0RGF0YUltcGxfQ2FsbFN0cnVjdHVyZV9TdXBlckluaXRpYWxpemVyc291cmNlQ29uc3RydWN0b3J0YXJnZXRDb25zdHJ1Y3Rvcl9TdXBlckludm9jYXRpb25fSW5zdGFuY2VBY2Nlc3NfRHluYW1pY0FjY2Vzc19GdW5jdGlvbkludm9jYXRpb25fSW5zdGFuY2VJbnZvY2F0aW9uX0R5bmFtaWNJbnZvY2F0aW9uX0xvY2FsRnVuY3Rpb25JbnZvY2F0aW9uX1N0YXRpY0ludm9jYXRpb25fQ29uc3RydWN0b3JJbnZvY2F0aW9uX0NvbnN0SW5zdGFudGlhdGlvbl9GZWF0dXJlbG9jYWxXaXRob3V0SW5pdGlhbGl6ZXJfVHlwZVVzZV9UeXBlVXNlS2luZGFzeW5jU3Rhck1hcmtlcnN5bmNTdGFyTWFya2VyX1JlZGlyZWN0aW5nSW5pdGlhbGl6ZXJfVHlwZUxpdGVyYWxfR2VuZXJpY0luc3RhbnRpYXRpb25fU3RhdGljQWNjZXNzX01hcExpdGVyYWxfQ29udGFpbmVyTGl0ZXJhbF9SdW50aW1lVHlwZVVzZV9Gb3JJbkRhdGFmcm9udF9lbmQuY29uc3RhbnRfZXZhbHVhdG9yUmVzb2x1dGlvbldvcmxkSW1wYWN0QnVpbGRlcl9LZXJuZWxJbXBhY3RCdWlsZGVyJkltcGFjdEJ1aWxkZXJCYXNlJktlcm5lbEltcGFjdFJlZ2lzdHJ5TWl4aW5fY29tcHV0ZVJlY2VpdmVyQ29uc3RyYWludGlyVHlwZV9nZXRUeXBlQXJndW1lbnRzcmVnaXN0ZXJGZWF0dXJlcmVnaXN0ZXJOYXRpdmVEYXRhcmVnaXN0ZXJDb25zdGFudExpdGVyYWxyZWdpc3RlckNvbnN0U3ltYm9sTmFtZWRhcnRUeXBlQXJndW1lbnRzbWF0Y2hlZFR5cGVyZWNlaXZlckRhcnRUeXBlYXJndW1lbnREYXJ0VHlwZWZpcnN0Q2FzZWZpcnN0Q2FzZVR5cGVvdmVycmlkZXNFcXVhbHNLZXJuZWxJbXBhY3RCdWlsZGVyX2Fubm90YXRpb25zS2VybmVsSW1wYWN0Q29udmVydGVyS2VybmVsSW1wYWN0UmVnaXN0cnlNaXhpbk9wdGltaXphdGlvblRlc3RMb2dfdW5jb252ZXJ0ZWQ8bnVsbC1ndWFyZD5GaWVsZEdldEZpZWxkU2V0RmllbGRDYWxsQ29uc3RhbnRGaWVsZEdldENvbnN0YW50RmllbGRDYWxsX3JlZ2lzdGVyU3BlY2lhbGl6ZXJ1bmNvbnZlcnRlZE5hbWVTcGVjaWFsaXplckluZGV4QXNzaWduSW5kZXhCaXROb3ROZWdhdGVBYnNNb2R1bG9EeW5hbWljTW9kdWxvVHJ1bmNhdGluZ0RpdmlkZS5TaGlmdExlZnQuU2hpZnRSaWdodC5FcXVhbHNMZXNzRXF1YWxzR3JlYXRlckVxdWFsc0NvZGVVbml0QXRDb21wYXJlVG9TdWJzdHJpbmdUcmltUGF0dGVybk1hdGNoUm91bmRyZWdpc3RlclByaW1pdGl2ZUNoZWNrUHJpbWl0aXZlQ2hlY2tPcHRpbWl6YXRpb25Mb2coT3B0aW1pemF0aW9uTG9nRW50cnlGb3JDb25kaXRpb25pblN0eWxlRm9yU3ByZWFkRm9ySW5TcHJlYWRGb3JFbnRyeUZvckluRW50cnlGb3JDb21wbGV0ZUZvckluQ29tcGxldGVJZkNvbmRpdGlvbklmU3ByZWFkSWZFbnRyeUlmQ29tcGxldGVJZkVsc2VFbHNlU3ByZWFkRWxzZUVudHJ5SWZFbHNlQ29tcGxldGVTcHJlYWRPcGVyYXRvck5lc3RlZG5lc3RlZFN0ZXBsYXN0U3RlcGlmQ29uZGl0aW9uc3ByZWFkT3BlcmF0b3JmYXN0YS5wYXJzZXIudHlwZV9pbmZvX2ltcGxQcmVmaXhlZFR5cGVTaW1wbGVOdWxsYWJsZVR5cGVXaXRoMUFyZ3VtZW50cGFyc2VUeXBlUmVzdFNpbXBsZVR5cGVXaXRoMUFyZ3VtZW50U2ltcGxlTnVsbGFibGVUeXBlU2ltcGxlVHlwZUNvbXBsZXhUeXBlSW5mb2JlZm9yZVF1ZXN0aW9uTWFya3R5cGVWYXJpYWJsZVN0YXJ0ZXJzZ2Z0SGFzUmV0dXJuVHlwZV9ub25OdWxsYWJsZXR5cGVWYXJpYWJsZUVuZEdyb3Vwc3R5cGVSZWZPclByZWZpeGVuZEdyb3VwSW5kZXhjb21wdXRlUmVzdHR5cGVWYXJpYWJsZVN0YXJ0Tm9UeXBlUGFyYW1PckFyZ1NpbXBsZVR5cGVBcmd1bWVudDFwYXJzZUVuZEdyb3Vwc2tpcEVuZEdyb3VwU2ltcGxlVHlwZUFyZ3VtZW50MUd0RXFiZWZvcmVFbmRHcm91cFNpbXBsZVR5cGVBcmd1bWVudDFHdEd0Q29tcGxleFR5cGVQYXJhbU9yQXJnSW5mb3NraXBFbmRwYXJzZVVuZXhwZWN0ZWRFbmRwYXJzZU1pc3NpbmdDb21tYXR5cGVTdGFydHNzdXBlclR5cGVJbmZvc3Rva2VuMmlzQXJndW1lbnRzZXJyb3JSZXBvcnRlZHR5cGVGb2xsb3dzRXh0ZW5kc2ludmFsaWRUeXBlVmFyc2ltcGxlVHlwZXNpbXBsZU51bGxhYmxlVHlwZXByZWZpeGVkVHlwZXNpbXBsZVR5cGVXaXRoMUFyZ3VtZW50c2ltcGxlVHlwZVdpdGgxQXJndW1lbnRHdEVxc2ltcGxlVHlwZVdpdGgxQXJndW1lbnRHdEd0c2ltcGxlTnVsbGFibGVUeXBlV2l0aDFBcmd1bWVudHNpbXBsZVR5cGVBcmd1bWVudDFzaW1wbGVUeXBlQXJndW1lbnQxR3RFcXNpbXBsZVR5cGVBcmd1bWVudDFHdEd0bG9va3NMaWtlTmFtZWxvb2tzTGlrZVR5cGVQYXJhbU9yQXJnaXNDbG9zZXJwYXJzZUNsb3NlcmJlZm9yZUNsb3NlcnVuc3BsaXRzcGxpdENsb3Nlcl9Db25zdGFudFJlZmVyZW5jZUdlbmVyYXRvcl9Db25zdGFudExpc3RHZW5lcmF0b3JNb2R1bGFyQ29uc3RhbnRFbWl0dGVyX2V4cG9uZW50aWFsUkUoWy0rXT8pKFswLTldKykoLihbMC05XSopKT9lKFstK10/WzAtOV0rKVRoZSBmdW5jdGlvbiBjb25zdGFudCBkb2VzIG5vdCBuZWVkIHNwZWNpZmljIEpTIGNvZGUuX3Nob3J0ZW5FeHBvbmVudGlhbFJlcHJlc2VudGF0aW9ubnVtYmVyU3RyaW5nbGVhZGluZ0RpZ2l0c2ZyYWN0aW9uRGlnaXRzZXhwb25lbnRhbHRlcm5hdGl2ZWN1dG9mZnRvU3RyaW5nQXNFeHBvbmVudGlhbDAvMDEvMC0xLzBzaG9ydGVuZWQhMCExQ29uc3RhbnRFbWl0dGVyQ09NTUVOVF9SRV4gKigvLy4qKT9cbnwgICovL1teJyciXG5dKiRtdWx0aUxpbmVfY29uc3RhbnRSZWZlcmVuY2VHZW5lcmF0b3JfbWFrZUNvbnN0YW50TGlzdG1heWJlQWRkTGlzdFR5cGVBcmd1bWVudHNOZXdSdGltYXliZUFkZFR5cGVBcmd1bWVudHNDb21waWxlciBlbmNvdXRlcmVkIHVuZXhwZWN0ZWQgc2V0IGNsYXNzIF9yZWlmaWVkVHlwZU5ld1J0aV9yZWlmaWVkVHlwZUFyZ3VtZW50c2pzTWFwa2V5RXhwcmVzc2lvbnZhbHVlRXhwcmVzc2lvbmpzR2VuZXJhbE1hcGVtaXR0ZWRBcmd1bWVudENvdW50Q29tcGlsZXIgaGFzIHVuZXhwZWN0ZWQgZmllbGQgQ29tcGlsZXIgYW5kICBkaXNhZ3JlZSBvbiBudW1iZXIgb2YgZmllbGRzLmdldEhlbHBlclByb3BlcnR5X3ZhcmlhYmxlVW5leHBlY3RlZCB0eXBlIHZhcmlhYmxlICcgaW4gY29uc3RhbnQgJ3N0cmlwQ29tbWVudHNyYXdKYXZhU2NyaXB0ZGFydDJqcy5qc19lbWl0dGVyLnN0YXJ0dXBfZW1pdHRlci5tb2RlbF9lbWl0dGVyUmFuZG9tSGFzaGVyU291cmNlTWFwQnVpbGRlckNvbnN0YW50T3JkZXJpbmdmcmFnbWVudF9lbWl0dGVyLmRhcnRNb2RlbEVtaXR0ZXJfc2hvdWxkR2VuZXJhdGVTb3VyY2VNYXBfY29uc3RhbnRPcmRlcmluZ2RlZmVycmVkSW5pdGlhbGl6ZXJzR2xvYmFsJF9fZGFydF9kZWZlcnJlZF9pbml0aWFsaXplcnNfX3BhcnRFeHRlbnNpb25kZWZlcnJlZEV4dGVuc2lvbnBhcnQuanN0eXBlTmFtZVByb3BlcnR5YnVpbHRpbiRjbHNjb25zdGFudExpc3RHZW5lcmF0b3JtYWtlQ29uc3RMaXN0KCMpY21wMWNtcDJmcmFnbWVudEVtaXR0ZXJkZWZlcnJlZExvYWRpbmdTdGF0ZW1haW5Db2RlZW1pdE1haW5GcmFnbWVudGRlZmVycmVkRnJhZ21lbnRzQ29kZWZyYWdtZW50Q29kZWVtaXREZWZlcnJlZEZyYWdtZW50aHVua0hhc2hlc3dyaXRlIGZyYWdtZW50c3dyaXRlRGVmZXJyZWRGcmFnbWVudHNmaW5hbGl6ZURlZmVycmVkTG9hZGluZ0RhdGF3cml0ZU1haW5GcmFnbWVudHdyaXRlRGVmZXJyZWRNYXBidWlsZEdlbmVyYXRlZEJ5Zmxhdm9yZmFzdCBzdGFydHVwIGVtaXR0ZXIsIHN0cm9uZywgdHJ1c3QgcHJpbWl0aXZlcywgb21pdCBjaGVja3MsIGxheCBydW50aW1lIHR5cGUsIENTUGZyYWdtZW50c0NvZGV3cml0ZURlZmVycmVkRnJhZ21lbnRidWlsZERlZmVycmVkSW5pdGlhbGl6ZXJHbG9iYWxzZWxmLiNkZWZlcnJlZEluaXRpYWxpemVycyA9IHNlbGYuI2RlZmVycmVkSW5pdGlhbGl6ZXJzIHx8IE9iamVjdC5jcmVhdGUobnVsbCk7ZGVmZXJyZWRJbml0aWFsaXplcnNsb2NhdGlvbkNvbGxlY3RvcmNvZGVPdXRwdXRMaXN0ZW5lcnNzb3VyY2UtbWFwc21haW5PdXRwdXQvLyBUaGUgY29kZSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGhvb2tzOgovLyBkYXJ0UHJpbnQobWVzc2FnZSk6Ci8vICAgIGlmIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBpdCBpcyBjYWxsZWQgaW5zdGVhZCBvZiB0aGUgRGFydCBbcHJpbnRdCi8vICAgIG1ldGhvZC4KLy8KLy8gZGFydE1haW5SdW5uZXIobWFpbiwgYXJncyk6Ci8vICAgIGlmIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCwgdGhlIERhcnQgW21haW5dIG1ldGhvZCB3aWxsIG5vdCBiZSBpbnZva2VkCi8vICAgIGRpcmVjdGx5LiBJbnN0ZWFkLCBhIGNsb3N1cmUgdGhhdCB3aWxsIGludm9rZSBbbWFpbl0sIGFuZCBpdHMgYXJndW1lbnRzCi8vICAgIFthcmdzXSBpcyBwYXNzZWQgdG8gW2RhcnRNYWluUnVubmVyXS4KLy8KLy8gZGFydERlZmVycmVkTGlicmFyeUxvYWRlcih1cmksIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk6Ci8vICAgIGlmIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCwgaXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBhIGRlZmVycmVkIGxpYnJhcnkKLy8gICAgaXMgbG9hZGVkLiBJdCBzaG91bGQgbG9hZCBhbmQgZXZhbCB0aGUgamF2YXNjcmlwdCBvZiBgdXJpYCwgYW5kIGNhbGwKLy8gICAgc3VjY2Vzc0NhbGxiYWNrLiBJZiBpdCBmYWlscyB0byBkbyBzbywgaXQgc2hvdWxkIGNhbGwgZXJyb3JDYWxsYmFjayB3aXRoCi8vICAgIGFuIGVycm9yLgovLwovLyBkYXJ0Q2FsbEluc3RydW1lbnRhdGlvbihpZCwgcXVhbGlmaWVkTmFtZSk6Ci8vICAgIGlmIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCwgaXQgd2lsbCBiZSBjYWxsZWQgYXQgZWFjaCBlbnRyeSBvZiBhCi8vICAgIG1ldGhvZCBvciBjb25zdHJ1Y3Rvci4gVXNlZCBvbmx5IHdoZW4gY29tcGlsaW5nIHByb2dyYW1zIHdpdGgKLy8gICAgLS1leHBlcmltZW50LWNhbGwtaW5zdHJ1bWVudGF0aW9uLgplbWl0IGJ1ZmZlcnNvdXRwdXRMaXN0ZW5lcnNoYXNoZXJodW5rUHJlZml4LmN1cnJlbnQgPSAjWyIiXSA9IC5jdXJyZW50bWFwVXJpaHVua0ZpbGVOYW1lbWFwRmlsZU5hbWVtYXBTZWdtZW50c3BhcnRTZWdtZW50c19jb21tZW50VGhpcyBtYXBwaW5nIHNob3dzIHdoaWNoIGNvbXBpbGVkIGAuanNgIGZpbGVzIGFyZSBuZWVkZWQgZm9yIGEgZ2l2ZW4gZGVmZXJyZWQgbGlicmFyeSBpbXBvcnQuRnJhZ21lbnRFbWl0dGVyX21vZGVsRW1pdHRlcl9ydWxlc2V0RW5jb2Rlcl9jYWxsME5hbWVfY2FsbDFOYW1lX2NhbGwyTmFtZWNhbGwwTmFtZWNhbGwxTmFtZWNhbGwyTmFtZW5vblN0YXRpY1N0YXRlSG9sZGVyc3NvZnREZWZlcnJlZElkc29mdERlZmVycmVkaG9sZGVyQ29kZWVtaXRIb2xkZXJzaW5pdGlhbGl6ZUVtcHR5SG9sZGVycyhmdW5jdGlvbiBkYXJ0UHJvZ3JhbSgpIHsKLy8gQ29waWVzIHRoZSBvd24gcHJvcGVydGllcyBmcm9tIFtmcm9tXSB0byBbdG9dLgpmdW5jdGlvbiBjb3B5UHJvcGVydGllcyhmcm9tLCB0bykgewogIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZnJvbSk7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIga2V5ID0ga2V5c1tpXTsKICAgIHRvW2tleV0gPSBmcm9tW2tleV07CiAgfQp9CgovLyBPbmx5IHVzZSBkaXJlY3QgcHJvdG8gYWNjZXNzIHRvIGNvbnN0cnVjdCB0aGUgcHJvdG90eXBlIGNoYWluIChpbnN0ZWFkIG9mCi8vIGNvcHlpbmcgcHJvcGVydGllcykgb24gcGxhdGZvcm1zIHdoZXJlIHdlIGtub3cgaXQgd29ya3Mgd2VsbCAoQ2hyb21lIC8gZDgpLgp2YXIgc3VwcG9ydHNEaXJlY3RQcm90b0FjY2VzcyA9ICNkaXJlY3RBY2Nlc3NUZXN0RXhwcmVzc2lvbjsKCi8vIFNldHMgdGhlIG5hbWUgcHJvcGVydHkgb2YgZnVuY3Rpb25zLCBpZiB0aGUgSlMgZW5naW5lIGRvZXNuJ3Qgc2V0IHRoZSBuYW1lCi8vIGl0c2VsZi4KLy8gQXMgb2YgMjAxOCBvbmx5IElFMTEgZG9lc24ndCBzZXQgdGhlIG5hbWUuCmZ1bmN0aW9uIHNldEZ1bmN0aW9uTmFtZXNJZk5lY2Vzc2FyeShob2xkZXJzKSB7CiAgZnVuY3Rpb24gdCgpe307CiAgaWYgKHR5cGVvZiB0Lm5hbWUgPT0gInN0cmluZyIpIHJldHVybjsKCiAgZm9yICh2YXIgaSA9IDA7IGkgPCBob2xkZXJzLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIgaG9sZGVyID0gaG9sZGVyc1tpXTsKICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoaG9sZGVyKTsKICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5cy5sZW5ndGg7IGorKykgewogICAgICB2YXIga2V5ID0ga2V5c1tqXTsKICAgICAgdmFyIGYgPSBob2xkZXJba2V5XTsKICAgICAgaWYgKHR5cGVvZiBmID09ICdmdW5jdGlvbicpIGYubmFtZSA9IGtleTsKICAgIH0KICB9Cn0KCi8vIE1ha2VzIFtjbHNdIGluaGVyaXQgZnJvbSBbc3VwXS4KLy8gT24gQ2hyb21lLCBGaXJlZm94IGFuZCByZWNlbnQgSUVzIHRoaXMgaGFwcGVucyBieSB1cGRhdGluZyB0aGUgaW50ZXJuYWwKLy8gcHJvdG8tcHJvcGVydHkgb2YgdGhlIGNsYXNzZXMgJ3Byb3RvdHlwZScgZmllbGQuCi8vIE9sZGVyIElFcyB1c2UgYE9iamVjdC5jcmVhdGVgIGFuZCBjb3B5IG92ZXIgdGhlIHByb3BlcnRpZXMuCmZ1bmN0aW9uIGluaGVyaXQoY2xzLCBzdXApIHsKICAvLyBOb3RlIHRoYXQgUlRJIG5lZWRzIGNscy5uYW1lLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBzZXQgaXQgYW55bW9yZS4KICBjbHMucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY2xzOwogIGNscy5wcm90b3R5cGVbI29wZXJhdG9ySXNQcmVmaXggKyBjbHMubmFtZV0gPSBjbHM7CgogIC8vIFRoZSBzdXBlcmNsYXNzIGlzIG9ubHkgbnVsbCBmb3IgdGhlIERhcnQgT2JqZWN0LgogIGlmIChzdXAgIT0gbnVsbCkgewogICAgaWYgKHN1cHBvcnRzRGlyZWN0UHJvdG9BY2Nlc3MpIHsKICAgICAgLy8gRmlyZWZveCBkb2Vzbid0IGxpa2UgdG8gdXBkYXRlIHRoZSBwcm90b3R5cGVzLCBidXQgd2hlbiBzZXR0aW5nIHVwCiAgICAgIC8vIHRoZSBoaWVyYXJjaHkgY2hhaW4gaXQncyBvay4KICAgICAgY2xzLnByb3RvdHlwZS5fX3Byb3RvX18gPSBzdXAucHJvdG90eXBlOwogICAgICByZXR1cm47CiAgICB9CiAgICB2YXIgY2xzUHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXAucHJvdG90eXBlKTsKICAgIGNvcHlQcm9wZXJ0aWVzKGNscy5wcm90b3R5cGUsIGNsc1Byb3RvdHlwZSk7CiAgICBjbHMucHJvdG90eXBlID0gY2xzUHJvdG90eXBlOwogIH0KfQoKLy8gQmF0Y2hlZCB2ZXJzaW9uIG9mIFtpbmhlcml0XSBmb3IgbXVsdGlwbGUgY2xhc3NlcyBmcm9tIG9uZSBzdXBlcmNsYXNzLgpmdW5jdGlvbiBpbmhlcml0TWFueShzdXAsIGNsYXNzZXMpIHsKICBmb3IgKHZhciBpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyBpKyspIHsKICAgIGluaGVyaXQoY2xhc3Nlc1tpXSwgc3VwKTsKICB9Cn0KCi8vIE1peGVzIGluIHRoZSBwcm9wZXJ0aWVzIG9mIFttaXhpbl0gaW50byBbY2xzXS4KZnVuY3Rpb24gbWl4aW4oY2xzLCBtaXhpbikgewogIGNvcHlQcm9wZXJ0aWVzKG1peGluLnByb3RvdHlwZSwgY2xzLnByb3RvdHlwZSk7CiAgY2xzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNsczsKfQoKLy8gQ3JlYXRlcyBhIGxhenkgZmllbGQuCi8vCi8vIEEgbGF6eSBmaWVsZCBoYXMgYSBzdG9yYWdlIGVudHJ5LCBbbmFtZV0sIHdoaWNoIGhvbGRzIHRoZSB2YWx1ZSwgYW5kIGEKLy8gZ2V0dGVyIChbZ2V0dGVyTmFtZV0pIHRvIGFjY2VzcyB0aGUgZmllbGQuIElmIHRoZSBmaWVsZCB3YXNuJ3Qgc2V0IGJlZm9yZQovLyB0aGUgZmlyc3QgYWNjZXNzLCBpdCBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSBbaW5pdGlhbGl6ZXJdLgpmdW5jdGlvbiBsYXp5KGhvbGRlciwgbmFtZSwgZ2V0dGVyTmFtZSwgaW5pdGlhbGl6ZXIpIHsKICB2YXIgdW5pbml0aWFsaXplZFNlbnRpbmVsID0gaG9sZGVyOwogIGhvbGRlcltuYW1lXSA9IHVuaW5pdGlhbGl6ZWRTZW50aW5lbDsKICBob2xkZXJbZ2V0dGVyTmFtZV0gPSBmdW5jdGlvbigpIHsKICAgIGhvbGRlcltnZXR0ZXJOYW1lXSA9IGZ1bmN0aW9uKCkgeyAjY3ljbGljVGhyb3cobmFtZSkgfTsKICAgIHZhciByZXN1bHQ7CiAgICB2YXIgc2VudGluZWxJblByb2dyZXNzID0gaW5pdGlhbGl6ZXI7CiAgICB0cnkgewogICAgICBpZiAoaG9sZGVyW25hbWVdID09PSB1bmluaXRpYWxpemVkU2VudGluZWwpIHsKICAgICAgICByZXN1bHQgPSBob2xkZXJbbmFtZV0gPSBzZW50aW5lbEluUHJvZ3Jlc3M7CiAgICAgICAgcmVzdWx0ID0gaG9sZGVyW25hbWVdID0gaW5pdGlhbGl6ZXIoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXN1bHQgPSBob2xkZXJbbmFtZV07CiAgICAgIH0KICAgIH0gZmluYWxseSB7CiAgICAgIC8vIFVzZSB0cnktZmluYWxseSwgbm90IHRyeS1jYXRjaC90aHJvdyBhcyBpdCBkZXN0cm95cyB0aGUgc3RhY2sKICAgICAgLy8gdHJhY2UuCiAgICAgIGlmIChyZXN1bHQgPT09IHNlbnRpbmVsSW5Qcm9ncmVzcykgewogICAgICAgIC8vIFRoZSBsYXp5IHN0YXRpYyAoaG9sZGVyW25hbWVdKSBtaWdodCBoYXZlIGJlZW4gc2V0IHRvIGEgZGlmZmVyZW50CiAgICAgICAgLy8gdmFsdWUuIEFjY29yZGluZyB0byBzcGVjIHdlIHN0aWxsIGhhdmUgdG8gcmVzZXQgaXQgdG8gbnVsbCwgaWYKICAgICAgICAvLyB0aGUgaW5pdGlhbGl6YXRpb24gZmFpbGVkLgogICAgICAgIGhvbGRlcltuYW1lXSA9IG51bGw7CiAgICAgIH0KICAgICAgLy8gVE9ETyhmbG9pdHNjaCk6IGZvciBwZXJmb3JtYW5jZSByZWFzb25zIHRoZSBmdW5jdGlvbiBzaG91bGQgcHJvYmFibHkKICAgICAgLy8gYmUgdW5pcXVlIGZvciBlYWNoIHN0YXRpYy4KICAgICAgaG9sZGVyW2dldHRlck5hbWVdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzW25hbWVdOyB9OwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9Owp9CgovLyBHaXZlbiBhIGxpc3QsIG1hcmtzIGl0IGFzIGNvbnN0YW50LgovLwovLyBUaGUgcnVudGltZSBlbnN1cmVzIHRoYXQgY29uc3QtbGlzdHMgY2Fubm90IGJlIG1vZGlmaWVkLgpmdW5jdGlvbiBtYWtlQ29uc3RMaXN0KGxpc3QpIHsKICAvLyBCeSBhc3NpZ25pbmcgYSBmdW5jdGlvbiB0byB0aGUgcHJvcGVydGllcyB0aGV5IGJlY29tZSBwYXJ0IG9mIHRoZQogIC8vIGhpZGRlbiBjbGFzcy4gVGhlIGFjdHVhbCB2YWx1ZXMgb2YgdGhlIGZpZWxkcyBkb24ndCBtYXR0ZXIsIHNpbmNlIHdlCiAgLy8gb25seSBjaGVjayBpZiB0aGV5IGV4aXN0LgogIGxpc3QuaW1tdXRhYmxlJGxpc3QgPSBBcnJheTsKICBsaXN0LmZpeGVkJGxlbmd0aCA9IEFycmF5OwogIHJldHVybiBsaXN0Owp9CgpmdW5jdGlvbiBjb252ZXJ0VG9GYXN0T2JqZWN0KHByb3BlcnRpZXMpIHsKICAvLyBDcmVhdGUgYW4gaW5zdGFuY2UgdGhhdCB1c2VzICdwcm9wZXJ0aWVzJyBhcyBwcm90b3R5cGUuIFRoaXMgc2hvdWxkCiAgLy8gbWFrZSAncHJvcGVydGllcycgYSBmYXN0IG9iamVjdC4KICBmdW5jdGlvbiB0KCkge30KICB0LnByb3RvdHlwZSA9IHByb3BlcnRpZXM7CiAgbmV3IHQoKTsKICByZXR1cm4gcHJvcGVydGllczsKfQoKZnVuY3Rpb24gY29udmVydEFsbFRvRmFzdE9iamVjdChhcnJheU9mT2JqZWN0cykgewogIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZk9iamVjdHMubGVuZ3RoOyArK2kpIHsKICAgIGNvbnZlcnRUb0Zhc3RPYmplY3QoYXJyYXlPZk9iamVjdHNbaV0pOwogIH0KfQoKLy8gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGJ5IHRoZSB0ZWFyT2ZmQ29kZSB0byBndWFyYW50ZWUgdW5pcXVlIGZ1bmN0aW9ucyBwZXIKLy8gdGVhci1vZmZzLgp2YXIgZnVuY3Rpb25Db3VudGVyID0gMDsKI3RlYXJPZmZDb2RlOwoKLy8gRWFjaCBkZWZlcnJlZCBodW5rIGNvbWVzIHdpdGggaXRzIG93biB0eXBlcyB3aGljaCBhcmUgYWRkZWQgdG8gdGhlIGVuZAovLyBvZiB0aGUgdHlwZXMtYXJyYXkuCi8vIFRoZSBgZnVuVHlwZXNgIHBhc3NlZCB0byB0aGUgYGluc3RhbGxUZWFyT2ZmYCBmdW5jdGlvbiBiZWxvdyBpcyByZWxhdGl2ZSB0bwovLyB0aGUgaHVuayB0aGUgZnVuY3Rpb24gY29tZXMgZnJvbS4gVGhlIGB0eXBlc09mZnNldGAgdmFyaWFibGUgZW5jb2RlcyB0aGUKLy8gb2Zmc2V0IGF0IHdoaWNoIHRoZSBuZXcgdHlwZXMgd2lsbCBiZSBhZGRlZC4KdmFyIHR5cGVzT2Zmc2V0ID0gMDsKCi8vIEFkYXB0cyB0aGUgc3RvcmVkIGRhdGEsIHNvIGl0J3Mgc3VpdGFibGUgZm9yIGEgdGVhck9mZiBjYWxsLgovLwovLyBTdG9yZXMgdGhlIHRlYXItb2ZmIGdldHRlci1mdW5jdGlvbiBpbiB0aGUgW2NvbnRhaW5lcl0ncyBbZ2V0dGVyTmFtZV0KLy8gcHJvcGVydHkuCi8vCi8vIFRoZSBbY29udGFpbmVyXSBpcyBlaXRoZXIgYSBjbGFzcyAodGhhdCBpcywgaXRzIHByb3RvdHlwZSksIG9yIHRoZSBob2xkZXIgZm9yCi8vIHN0YXRpYyBmdW5jdGlvbnMuCi8vCi8vIFRoZSBhcmd1bWVudCBbZnVuc09yTmFtZXNdIGlzIGFuIGFycmF5IG9mIHN0cmluZ3Mgb3IgZnVuY3Rpb25zLiBJZiBpdCBpcyBhCi8vIG5hbWUsIHRoZW4gdGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBmZXRjaGVkIGZyb20gdGhlIGNvbnRhaW5lci4gVGhlIGZpcnN0Ci8vIGVudHJ5IGluIHRoYXQgYXJyYXkgKm11c3QqIGJlIGEgc3RyaW5nLgovLwovLyBUT0RPKGZsb2l0c2NoKTogQ2hhbmdlIHRlYXJPZmZDb2RlIHRvIGFjY2VwdCB0aGUgZGF0YSBkaXJlY3RseSwgb3IgY3JlYXRlIGEKLy8gZGlmZmVyZW50IHRlYXJPZmZDb2RlPwpmdW5jdGlvbiBpbnN0YWxsVGVhck9mZigKICAgIGNvbnRhaW5lciwgZ2V0dGVyTmFtZSwgaXNTdGF0aWMsIGlzSW50ZXJjZXB0ZWQsIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsIGNhbGxOYW1lcywgZnVuc09yTmFtZXMsIGZ1blR5cGUsIGFwcGx5SW5kZXgpIHsKICAvLyBBIGZ1bmN0aW9uIGNhbiBoYXZlIHNldmVyYWwgc3R1YnMgKGZvciBleGFtcGxlIHRvIGZpbGwgaW4gb3B0aW9uYWwKICAvLyBhcmd1bWVudHMpLiBXZSBjb2xsZWN0IHRoZXNlIGZ1bmN0aW9ucyBpbiB0aGUgYGZ1bnNgIGFycmF5LgogIHZhciBmdW5zID0gW107CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmdW5zT3JOYW1lcy5sZW5ndGg7IGkrKykgewogICAgdmFyIGZ1biA9IGZ1bnNPck5hbWVzW2ldOwogICAgaWYgKCh0eXBlb2YgZnVuKSA9PSAnc3RyaW5nJykgZnVuID0gY29udGFpbmVyW2Z1bl07CiAgICBmdW4uI2NhbGxOYW1lID0gY2FsbE5hbWVzW2ldOwogICAgZnVucy5wdXNoKGZ1bik7CiAgfQoKICAvLyBUaGUgbWFpbiBmdW5jdGlvbiB0byB3aGljaCBhbGwgc3R1YnMgcmVkaXJlY3QuCiAgdmFyIGZ1biA9IGZ1bnNbMF07CgogIGZ1blsjYXJndW1lbnRDb3VudF0gPSByZXF1aXJlZFBhcmFtZXRlckNvdW50OwogIGZ1blsjZGVmYXVsdEFyZ3VtZW50VmFsdWVzXSA9IG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlczsKICB2YXIgcmVmbGVjdGlvbkluZm8gPSBmdW5UeXBlOwogIGlmICh0eXBlb2YgcmVmbGVjdGlvbkluZm8gPT0gIm51bWJlciIpIHsKICAgIC8vIFRoZSByZWZsZWN0aW9uSW5mbyBjYW4gZWl0aGVyIGJlIGEgZnVuY3Rpb24sIG9yIGEgcG9pbnRlciBpbnRvIHRoZSB0eXBlcwogICAgLy8gdGFibGUuIElmIGl0IHBvaW50cyBpbnRvIHRoZSB0eXBlcy10YWJsZSB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgaW5kZXgsCiAgICAvLyBpbiBjYXNlIHRoZSB0ZWFyLW9mZiBpcyBwYXJ0IG9mIGEgZGVmZXJyZWQgaHVuay4KICAgIHJlZmxlY3Rpb25JbmZvID0gcmVmbGVjdGlvbkluZm8gKyB0eXBlc09mZnNldDsKICB9CiAgdmFyIG5hbWUgPSBmdW5zT3JOYW1lc1swXTsKICBmdW4uI3N0dWJOYW1lID0gbmFtZTsKICB2YXIgZ2V0dGVyRnVuY3Rpb24gPQogICAgICB0ZWFyT2ZmKGZ1bnMsIGFwcGx5SW5kZXggfHwgMCwgcmVmbGVjdGlvbkluZm8sIGlzU3RhdGljLCBuYW1lLCBpc0ludGVyY2VwdGVkKTsKICBjb250YWluZXJbZ2V0dGVyTmFtZV0gPSBnZXR0ZXJGdW5jdGlvbjsKICBpZiAoaXNTdGF0aWMpIHsKICAgIGZ1bi4kdGVhck9mZiA9IGdldHRlckZ1bmN0aW9uOwogIH0KfQoKZnVuY3Rpb24gaW5zdGFsbFN0YXRpY1RlYXJPZmYoCiAgICBjb250YWluZXIsIGdldHRlck5hbWUsCiAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50LCBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICBjYWxsTmFtZXMsIGZ1bnNPck5hbWVzLCBmdW5UeXBlLCBhcHBseUluZGV4KSB7CiAgLy8gVE9ETyhzcmEpOiBTcGVjaWFsaXplIGluc3RhbGxUZWFyT2ZmIGZvciBzdGF0aWMgbWV0aG9kcy4gSXQgbWlnaHQgYmUKICAvLyBwb3NzaWJsZSB0byBoYW5kbGUgc29tZSB2ZXJ5IGNvbW1vbiBzaW1wbGUgY2FzZXMgZGlyZWN0bHkuCiAgcmV0dXJuIGluc3RhbGxUZWFyT2ZmKAogICAgICBjb250YWluZXIsIGdldHRlck5hbWUsIHRydWUsIGZhbHNlLAogICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50LCBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICAgIGNhbGxOYW1lcywgZnVuc09yTmFtZXMsIGZ1blR5cGUsIGFwcGx5SW5kZXgpOwp9CgpmdW5jdGlvbiBpbnN0YWxsSW5zdGFuY2VUZWFyT2ZmKAogICAgY29udGFpbmVyLCBnZXR0ZXJOYW1lLCBpc0ludGVyY2VwdGVkLAogICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzLAogICAgY2FsbE5hbWVzLCBmdW5zT3JOYW1lcywgZnVuVHlwZSwgYXBwbHlJbmRleCkgewogIC8vIFRPRE8oc3JhKTogU3BlY2lhbGl6ZSBpbnN0YWxsVGVhck9mZiBmb3IgaW5zdGFuY2UgbWV0aG9kcy4KICByZXR1cm4gaW5zdGFsbFRlYXJPZmYoCiAgICAgIGNvbnRhaW5lciwgZ2V0dGVyTmFtZSwgZmFsc2UsIGlzSW50ZXJjZXB0ZWQsCiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgY2FsbE5hbWVzLCBmdW5zT3JOYW1lcywgZnVuVHlwZSwgYXBwbHlJbmRleCk7Cn0KCi8vIEluc3RlYWQgb2Ygc2V0dGluZyB0aGUgaW50ZXJjZXB0b3IgdGFncyBkaXJlY3RseSB3ZSB1c2UgdGhpcyB1cGRhdGUKLy8gZnVuY3Rpb24uIFRoaXMgbWFrZXMgaXQgZWFzaWVyIGZvciBkZWZlcnJlZCBmcmFnbWVudHMgdG8gY29udHJpYnV0ZSB0byB0aGUKLy8gZW1iZWRkZWQgZ2xvYmFsLgpmdW5jdGlvbiBzZXRPclVwZGF0ZUludGVyY2VwdG9yc0J5VGFnKG5ld1RhZ3MpIHsKICB2YXIgdGFncyA9ICNlbWJlZGRlZEludGVyY2VwdG9yVGFnczsKICBpZiAoIXRhZ3MpIHsKICAgICNlbWJlZGRlZEludGVyY2VwdG9yVGFncyA9IG5ld1RhZ3M7CiAgICByZXR1cm47CiAgfQogIGNvcHlQcm9wZXJ0aWVzKG5ld1RhZ3MsIHRhZ3MpOwp9CgovLyBJbnN0ZWFkIG9mIHNldHRpbmcgdGhlIGxlYWYgdGFncyBkaXJlY3RseSB3ZSB1c2UgdGhpcyB1cGRhdGUKLy8gZnVuY3Rpb24uIFRoaXMgbWFrZXMgaXQgZWFzaWVyIGZvciBkZWZlcnJlZCBmcmFnbWVudHMgdG8gY29udHJpYnV0ZSB0byB0aGUKLy8gZW1iZWRkZWQgZ2xvYmFsLgpmdW5jdGlvbiBzZXRPclVwZGF0ZUxlYWZUYWdzKG5ld1RhZ3MpIHsKICB2YXIgdGFncyA9ICNlbWJlZGRlZExlYWZUYWdzOwogIGlmICghdGFncykgewogICAgI2VtYmVkZGVkTGVhZlRhZ3MgPSBuZXdUYWdzOwogICAgcmV0dXJuOwogIH0KICBjb3B5UHJvcGVydGllcyhuZXdUYWdzLCB0YWdzKTsKfQoKLy8gVXBkYXRlcyB0aGUgdHlwZXMgZW1iZWRkZWQgZ2xvYmFsLgpmdW5jdGlvbiB1cGRhdGVUeXBlcyhuZXdUeXBlcykgewogIHZhciB0eXBlcyA9ICNlbWJlZGRlZFR5cGVzOwogIHZhciBsZW5ndGggPSB0eXBlcy5sZW5ndGg7CiAgLy8gVGhlIHRlYXItb2ZmIGZ1bmN0aW9uIHVzZXMgYW5vdGhlciAndHlwZXNPZmZzZXQnIHZhbHVlIGNhY2hlZCBpbgogIC8vIFtpbml0aWFsaXplRGVmZXJyZWRIdW5rXSBzbyBbdXBkYXRlVHlwZXNdIGNhbiBiZSBjYWxsZWQgZWl0aGVyIGJlZm9yZSBvcgogIC8vIGFmdGVyIHRoZSB0ZWFyb2ZmcyBoYXZlIGJlZW4gaW5zdGFsbGVkLgogIHR5cGVzLnB1c2guYXBwbHkodHlwZXMsIG5ld1R5cGVzKTsKICByZXR1cm4gbGVuZ3RoOwp9CgovLyBVcGRhdGVzIHRoZSBnaXZlbiBob2xkZXIgd2l0aCB0aGUgcHJvcGVydGllcyBvZiB0aGUgW25ld0hvbGRlcl0uCi8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB3aGVuIGEgZGVmZXJyZWQgZnJhZ21lbnQgaXMgaW5pdGlhbGl6ZWQuCmZ1bmN0aW9uIHVwZGF0ZUhvbGRlcihob2xkZXIsIG5ld0hvbGRlcikgewogIGNvcHlQcm9wZXJ0aWVzKG5ld0hvbGRlciwgaG9sZGVyKTsKICByZXR1cm4gaG9sZGVyOwp9Cgp2YXIgI2h1bmtIZWxwZXJzID0gKGZ1bmN0aW9uKCl7CiAgdmFyIG1rSW5zdGFuY2UgPSBmdW5jdGlvbigKICAgICAgaXNJbnRlcmNlcHRlZCwgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzLAogICAgICBjYWxsTmFtZXMsIGFwcGx5SW5kZXgpIHsKICAgIHJldHVybiBmdW5jdGlvbihjb250YWluZXIsIGdldHRlck5hbWUsIG5hbWUsIGZ1blR5cGUpIHsKICAgICAgcmV0dXJuIGluc3RhbGxJbnN0YW5jZVRlYXJPZmYoCiAgICAgICAgICBjb250YWluZXIsIGdldHRlck5hbWUsIGlzSW50ZXJjZXB0ZWQsCiAgICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50LCBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICAgICAgICBjYWxsTmFtZXMsIFtuYW1lXSwgZnVuVHlwZSwgYXBwbHlJbmRleCk7CiAgICB9CiAgfSwKCiAgbWtTdGF0aWMgPSBmdW5jdGlvbigKICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzLAogICAgICBjYWxsTmFtZXMsIGFwcGx5SW5kZXgpIHsKICAgIHJldHVybiBmdW5jdGlvbihjb250YWluZXIsIGdldHRlck5hbWUsIG5hbWUsIGZ1blR5cGUpIHsKICAgICAgcmV0dXJuIGluc3RhbGxTdGF0aWNUZWFyT2ZmKAogICAgICAgICAgY29udGFpbmVyLCBnZXR0ZXJOYW1lLAogICAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzLAogICAgICAgICAgY2FsbE5hbWVzLCBbbmFtZV0sIGZ1blR5cGUsIGFwcGx5SW5kZXgpOwogICAgfQogIH07CgogIC8vIFRPRE8oc3JhKTogTWluaWZ5IHByb3BlcnRpZXMgb2YgJ2h1bmtIZWxwZXJzJy4KICByZXR1cm4gewogICAgaW5oZXJpdDogaW5oZXJpdCwKICAgIGluaGVyaXRNYW55OiBpbmhlcml0TWFueSwKICAgIG1peGluOiBtaXhpbiwKICAgIGluc3RhbGxTdGF0aWNUZWFyT2ZmOiBpbnN0YWxsU3RhdGljVGVhck9mZiwKICAgIGluc3RhbGxJbnN0YW5jZVRlYXJPZmY6IGluc3RhbGxJbnN0YW5jZVRlYXJPZmYsCgogICAgICAgIC8vIFVuaW50ZXJjZXB0ZWQgbWV0aG9kcy4KICAgIF9pbnN0YW5jZV8wdTogbWtJbnN0YW5jZSgwLCAwLCBudWxsLCBbI2NhbGwwc2VsZWN0b3JdLCAwKSwKICAgIF9pbnN0YW5jZV8xdTogbWtJbnN0YW5jZSgwLCAxLCBudWxsLCBbI2NhbGwxc2VsZWN0b3JdLCAwKSwKICAgIF9pbnN0YW5jZV8ydTogbWtJbnN0YW5jZSgwLCAyLCBudWxsLCBbI2NhbGwyc2VsZWN0b3JdLCAwKSwKCiAgICAgICAgLy8gSW50ZXJjZXB0ZWQgbWV0aG9kcy4KICAgIF9pbnN0YW5jZV8waTogbWtJbnN0YW5jZSgxLCAwLCBudWxsLCBbI2NhbGwwc2VsZWN0b3JdLCAwKSwKICAgIF9pbnN0YW5jZV8xaTogbWtJbnN0YW5jZSgxLCAxLCBudWxsLCBbI2NhbGwxc2VsZWN0b3JdLCAwKSwKICAgIF9pbnN0YW5jZV8yaTogbWtJbnN0YW5jZSgxLCAyLCBudWxsLCBbI2NhbGwyc2VsZWN0b3JdLCAwKSwKCiAgICAgICAgLy8gU3RhdGljIG1ldGhvZHMuCiAgICBfc3RhdGljXzA6IG1rU3RhdGljKDAsIG51bGwsIFsjY2FsbDBzZWxlY3Rvcl0sIDApLAogICAgX3N0YXRpY18xOiBta1N0YXRpYygxLCBudWxsLCBbI2NhbGwxc2VsZWN0b3JdLCAwKSwKICAgIF9zdGF0aWNfMjogbWtTdGF0aWMoMiwgbnVsbCwgWyNjYWxsMnNlbGVjdG9yXSwgMCksCgogICAgbWFrZUNvbnN0TGlzdDogbWFrZUNvbnN0TGlzdCwKICAgIGxhenk6IGxhenksCiAgICB1cGRhdGVIb2xkZXI6IHVwZGF0ZUhvbGRlciwKICAgIGNvbnZlcnRUb0Zhc3RPYmplY3Q6IGNvbnZlcnRUb0Zhc3RPYmplY3QsCiAgICBzZXRGdW5jdGlvbk5hbWVzSWZOZWNlc3Nhcnk6IHNldEZ1bmN0aW9uTmFtZXNJZk5lY2Vzc2FyeSwKICAgIHVwZGF0ZVR5cGVzOiB1cGRhdGVUeXBlcywKICAgIHNldE9yVXBkYXRlSW50ZXJjZXB0b3JzQnlUYWc6IHNldE9yVXBkYXRlSW50ZXJjZXB0b3JzQnlUYWcsCiAgICBzZXRPclVwZGF0ZUxlYWZUYWdzOiBzZXRPclVwZGF0ZUxlYWZUYWdzLAogIH07Cn0pKCk7CgovLyBFdmVyeSBkZWZlcnJlZCBodW5rIChpLmUuIGZyYWdtZW50KSBpcyBhIGZ1bmN0aW9uIHRoYXQgd2UgY2FuIGludm9rZSB0bwovLyBpbml0aWFsaXplIGl0LiBBdCB0aGlzIG1vbWVudCBpdCBjb250cmlidXRlcyBpdHMgZGF0YSB0byB0aGUgbWFpbiBodW5rLgpmdW5jdGlvbiBpbml0aWFsaXplRGVmZXJyZWRIdW5rKGh1bmspIHsKICAvLyBVcGRhdGUgdGhlIHR5cGVzT2Zmc2V0IGZvciB0aGUgbmV4dCBkZWZlcnJlZCBsaWJyYXJ5LgogIHR5cGVzT2Zmc2V0ID0gI2VtYmVkZGVkVHlwZXMubGVuZ3RoOwoKICAvLyBUT0RPKGZsb2l0c2NoKTogZXh0ZW5kIG5hdGl2ZXMuCiAgaHVuayhodW5rSGVscGVycywgI2VtYmVkZGVkR2xvYmFsc09iamVjdCwgaG9sZGVycywgI3N0YXRpY1N0YXRlKTsKfQoKLy8gUmV0dXJucyB0aGUgZ2xvYmFsIHdpdGggdGhlIGdpdmVuIFtuYW1lXS4KZnVuY3Rpb24gZ2V0R2xvYmFsRnJvbU5hbWUobmFtZSkgewogIC8vIFRPRE8oZmxvaXRzY2gpOiB3ZSBhcmUgcnVubmluZyB0aHJvdWdoIGFsbCBob2xkZXJzLiBTaW5jZSBuZWdhdGl2ZQogIC8vIGxvb2t1cHMgYXJlIGV4cGVuc2l2ZSB3ZSBtaWdodCBuZWVkIHRvIGltcHJvdmUgdGhpcy4KICAvLyBSZWxpZXMgb24gdGhlIGZhY3QgdGhhdCBhbGwgbmFtZXMgYXJlIHVuaXF1ZSBhY3Jvc3MgYWxsIGhvbGRlcnMuCiAgZm9yICh2YXIgaSA9IDA7IGkgPCBob2xkZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAvLyBUaGUgY29uc3RhbnQgaG9sZGVyIHJldXNlcyB0aGUgc2FtZSBuYW1lcy4gVGhlcmVmb3JlIHdlIG11c3Qgc2tpcCBpdC4KICAgIGlmIChob2xkZXJzW2ldID09ICNjb25zdGFudEhvbGRlclJlZmVyZW5jZSkgY29udGludWU7CiAgICAvLyBSZWxpZXMgb24gdGhlIGZhY3QgdGhhdCBhbGwgdmFyaWFibGVzIGFyZSB1bmlxdWUuCiAgICBpZiAoaG9sZGVyc1tpXVtuYW1lXSkgcmV0dXJuIGhvbGRlcnNbaV1bbmFtZV07CiAgfQp9CgppZiAoI2hhc1NvZnREZWZlcnJlZENsYXNzZXMpIHsKICAvLyBMb2FkcyB0aGUgc29mdC1kZWZlcnJlZCBjbGFzc2VzIGFuZCBpbml0aWFsaXplcyB0aGVtLgogIC8vIFVwZGF0ZXMgdGhlIHByb3RvdHlwZSBvZiB0aGUgZ2l2ZW4gb2JqZWN0LgogIGZ1bmN0aW9uIHNvZnREZWYobykgewogICAgc29mdERlZiA9IGZ1bmN0aW9uKG8pIHt9OyAgLy8gUmVwbGFjZSBvdXJzZWx2ZXMuCiAgICAjZGVmZXJyZWRHbG9iYWxbI3NvZnRJZF0oCiAgICAgICAgaG9sZGVycywgI2VtYmVkZGVkR2xvYmFsc09iamVjdCwgI3N0YXRpY1N0YXRlLAogICAgICAgIGh1bmtIZWxwZXJzKTsKICAgIGlmIChvICE9IG51bGwpIHsKICAgICAgLy8gVE9ETygyOTU3NCk6IHNob3VsZCB3ZSBkbyBzb21ldGhpbmcgZGlmZmVyZW50IGZvciBGaXJlZm94PwogICAgICAvLyBJZiB3ZSByZWNvbW1lbmQgdGhhdCB0aGUgcHJvZ3JhbSB0cmlnZ2VycyB0aGUgbG9hZCBieSBpdHNlbGYgYmVmb3JlCiAgICAgIC8vIGNsYXNzZXMgYXJlIG5lZWRlZCwgdGhlbiB0aGlzIGxpbmUgc2hvdWxkIHJhcmVseSBiZSBoaXQuCiAgICAgIC8vIEFsc28sIGl0IGlzIG9ubHkgaGl0IGF0IG1vc3Qgb25jZSAocGVyIHNvZnQtZGVmZXJyZWQgY2h1bmspLgogICAgICBvLl9fcHJvdG9fXyA9IG8uY29uc3RydWN0b3IucHJvdG90eXBlOwogICAgfQogIH0KfQoKaWYgKCNpc1RyYWNraW5nQWxsb2NhdGlvbnMpIHsKICB2YXIgYWxsb2NhdGlvbnMgPSAjZGVmZXJyZWRHbG9iYWxbJ2FsbG9jYXRpb25zJ10gPSB7fTsKfQoKLy8gQ3JlYXRlcyB0aGUgaG9sZGVycy4KI2hvbGRlcnM7CgovLyBJZiB0aGUgbmFtZSBpcyBub3Qgc2V0IG9uIHRoZSBmdW5jdGlvbnMsIGRvIGl0IG5vdy4KaHVua0hlbHBlcnMuc2V0RnVuY3Rpb25OYW1lc0lmTmVjZXNzYXJ5KGhvbGRlcnMpOwoKLy8gVE9ETyhmbG9pdHNjaCk6IHdlIHNob3VsZCBidWlsZCB0aGlzIG9iamVjdCBhcyBhIGxpdGVyYWwuCnZhciAjc3RhdGljU3RhdGVEZWNsYXJhdGlvbiA9IHt9OwoKLy8gU2V0cyB0aGUgcHJvdG90eXBlcyBvZiBjbGFzc2VzLgojcHJvdG90eXBlczsKLy8gU2V0cyBhbGlhc2VzIG9mIG1ldGhvZHMgKG9uIHRoZSBwcm90b3R5cGVzIG9mIGNsYXNzZXMpLgojYWxpYXNlczsKLy8gSW5zdGFsbHMgdGhlIHRlYXItb2ZmcyBvZiBmdW5jdGlvbnMuCiN0ZWFyT2ZmczsKLy8gQnVpbGRzIHRoZSBpbmhlcml0YW5jZSBzdHJ1Y3R1cmUuCiNpbmhlcml0YW5jZTsKCi8vIEVtaXRzIHRoZSBlbWJlZGRlZCBnbG9iYWxzLiBUaGlzIG5lZWRzIHRvIGJlIGJlZm9yZSBjb25zdGFudHMgc28gdGhlIGVtYmVkZGVkCi8vIGdsb2JhbCB0eXBlIHJlc291cmNlcyBhcmUgYXZhaWxhYmxlIGZvciBnZW5lcmF0aW5nIGNvbnN0YW50cy4KI2VtYmVkZGVkR2xvYmFsc1BhcnQxOwoKLy8gQWRkcyB0aGUgc3VidHlwZSBydWxlcyBmb3IgdGhlIG5ldyBSVEkuCiN0eXBlUnVsZXM7CgovLyBJbnN0YW50aWF0ZXMgYWxsIGNvbnN0YW50cy4KI2NvbnN0YW50czsKCi8vIEFkZHMgdG8gdGhlIGVtYmVkZGVkIGdsb2JhbHMuIEEgZmV3IGdsb2JhbHMgcmVmZXIgdG8gY29uc3RhbnRzLgojZW1iZWRkZWRHbG9iYWxzUGFydDI7IAoKLy8gSW5pdGlhbGl6ZXMgdGhlIHN0YXRpYyBub24tZmluYWwgZmllbGRzICh3aXRoIHRoZWlyIGNvbnN0YW50IHZhbHVlcykuCiNzdGF0aWNOb25GaW5hbEZpZWxkczsKLy8gQ3JlYXRlcyBsYXp5IGdldHRlcnMgZm9yIHN0YXRpY3MgdGhhdCBtdXN0IHJ1biBpbml0aWFsaXplcnMgb24gZmlyc3QgYWNjZXNzLgojbGF6eVN0YXRpY3M7CgovLyBTZXRzIHVwIHRoZSBuYXRpdmUgc3VwcG9ydC4KLy8gTmF0aXZlLXN1cHBvcnQgdXNlcyBzZXRPclVwZGF0ZUludGVyY2VwdG9yc0J5VGFnIGFuZCBzZXRPclVwZGF0ZUxlYWZUYWdzLgojbmF0aXZlU3VwcG9ydDsKCi8vIFNldHMgdXAgdGhlIGpzLWludGVyb3Agc3VwcG9ydC4KI2pzSW50ZXJvcFN1cHBvcnQ7CgovLyBFbnN1cmUgaG9sZGVycyBhcmUgaW4gZmFzdCBtb2RlLCBub3cgd2UgaGF2ZSBmaW5pc2hlZCBhZGRpbmcgdGhpbmdzLgpjb252ZXJ0QWxsVG9GYXN0T2JqZWN0KGhvbGRlcnMpOwpjb252ZXJ0VG9GYXN0T2JqZWN0KCNzdGF0aWNTdGF0ZSk7CgovLyBJbnZva2VzIG1haW4gKG1ha2luZyBzdXJlIHRoYXQgaXQgcmVjb3JkcyB0aGUgJ2N1cnJlbnQtc2NyaXB0JyB2YWx1ZSkuCiNpbnZva2VNYWluOwp9KSgpCmh1bmtIZWxwZXJzZGlyZWN0QWNjZXNzVGVzdEV4cHJlc3Npb24gIChmdW5jdGlvbiAoKSB7CiAgICB2YXIgY2xzID0gZnVuY3Rpb24gKCkge307CiAgICBjbHMucHJvdG90eXBlID0geydwJzoge319OwogICAgdmFyIG9iamVjdCA9IG5ldyBjbHMoKTsKICAgIGlmICghKG9iamVjdC5fX3Byb3RvX18gJiYgb2JqZWN0Ll9fcHJvdG9fXy5wID09PSBjbHMucHJvdG90eXBlLnApKQogICAgICByZXR1cm4gZmFsc2U7CgogICAgdHJ5IHsKICAgICAgLy8gQXJlIHdlIHJ1bm5pbmcgb24gYSBwbGF0Zm9ybSB3aGVyZSB0aGUgcGVyZm9ybWFuY2UgaXMgZ29vZD8KICAgICAgLy8gKGkuZS4gQ2hyb21lIG9yIGQ4KS4KCiAgICAgIC8vIENocm9tZSB1c2VyQWdlbnQ/CiAgICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9ICJ1bmRlZmluZWQiICYmCiAgICAgICAgICB0eXBlb2YgbmF2aWdhdG9yLnVzZXJBZ2VudCA9PSAic3RyaW5nIiAmJgogICAgICAgICAgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJDaHJvbWUvIikgPj0gMCkgcmV0dXJuIHRydWU7CiAgICAgIC8vIGQ4IHZlcnNpb24oKSBsb29rcyBsaWtlICJOLk4uTi5OIiwganNzaGVsbCB2ZXJzaW9uKCkgbGlrZSAiTiIuCiAgICAgIGlmICh0eXBlb2YgdmVyc2lvbiA9PSAiZnVuY3Rpb24iICYmCiAgICAgICAgICB2ZXJzaW9uLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgdmFyIHYgPSB2ZXJzaW9uKCk7CiAgICAgICAgaWYgKC9eXGQrXC5cZCtcLlxkK1wuXGQrJC8udGVzdCh2KSkgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0gY2F0Y2goXykge30KCiAgICByZXR1cm4gZmFsc2U7CiAgfSkoKQpjeWNsaWNUaHJvd3RlYXJPZmZDb2RlZW1iZWRkZWRUeXBlc2VtYmVkZGVkSW50ZXJjZXB0b3JUYWdzZW1iZWRkZWRMZWFmVGFnc2VtYmVkZGVkR2xvYmFsc09iamVjdHN0YXRpY1N0YXRlRGVjbGFyYXRpb25zdGF0aWNTdGF0ZWNvbnN0YW50SG9sZGVyUmVmZXJlbmNlYnVpbGRDb25zdGFudEhvbGRlclJlZmVyZW5jZWRlZmF1bHRBcmd1bWVudFZhbHVlc2RlZmVycmVkR2xvYmFsc29mdElkaXNUcmFja2luZ0FsbG9jYXRpb25zcHJvdG90eXBlc2VtaXRQcm90b3R5cGVzaW5oZXJpdGFuY2VlbWl0SW5oZXJpdGFuY2VhbGlhc2VzZW1pdEluc3RhbmNlTWV0aG9kQWxpYXNlc3RlYXJPZmZzZW1pdEluc3RhbGxUZWFyT2Zmc2VtaXRDb25zdGFudHNlbWl0U3RhdGljTm9uRmluYWxGaWVsZHNsYXp5U3RhdGljc2VtaXRMYXppbHlJbml0aWFsaXplZFN0YXRpY3NlbWJlZGRlZEdsb2JhbHNQYXJ0MWVtaXRFbWJlZGRlZEdsb2JhbHNQYXJ0MWVtYmVkZGVkR2xvYmFsc1BhcnQyZW1pdEVtYmVkZGVkR2xvYmFsc1BhcnQyZW1pdFR5cGVSdWxlc25hdGl2ZVN1cHBvcnRlbWl0TmF0aXZlU3VwcG9ydGpzSW50ZXJvcFN1cHBvcnRjYWxsMHNlbGVjdG9yY2FsbDFzZWxlY3RvcmNhbGwyc2VsZWN0b3IjZGVmZXJyZWRHbG9iYWxbI3NvZnRJZF0gPQogIGZ1bmN0aW9uKGhvbGRlcnNMaXN0LCAjZW1iZWRkZWRHbG9iYWxzT2JqZWN0LCAjc3RhdGljU3RhdGUsCiAgICAgICAgICAgaHVua0hlbHBlcnMpIHsKCi8vIEluc3RhbGxzIHRoZSBob2xkZXJzIGFzIGxvY2FsIHZhcmlhYmxlcy4KI2luc3RhbGxIb2xkZXJzQXNMb2NhbHM7Ci8vIFNldHMgdGhlIHByb3RvdHlwZXMgb2YgdGhlIG5ldyBjbGFzc2VzLgojcHJvdG90eXBlczsKLy8gU2V0cyBhbGlhc2VzIG9mIG1ldGhvZHMgKG9uIHRoZSBwcm90b3R5cGVzIG9mIGNsYXNzZXMpLgojYWxpYXNlczsKLy8gSW5zdGFsbHMgdGhlIHRlYXItb2ZmcyBvZiBmdW5jdGlvbnMuCiN0ZWFyT2ZmczsKLy8gQnVpbGRzIHRoZSBpbmhlcml0YW5jZSBzdHJ1Y3R1cmUuCiNpbmhlcml0YW5jZTsKfWluc3RhbGxIb2xkZXJzQXNMb2NhbHNlbWl0SW5zdGFsbEhvbGRlcnNBc0xvY2Fsc2hvbGRlckluaXRzaG9sZGVyc0xpc3RbI111cGRhdGVIb2xkZXJBc3NpZ25tZW50c2FjdGl2ZUhvbGRlcnMjaG9sZGVyID0gaHVua0hlbHBlcnMudXBkYXRlSG9sZGVyKGhvbGRlcnNMaXN0WyNpbmRleF0sICNob2xkZXIpI2hvbGRlciA9IGhvbGRlcnNMaXN0WyNpbmRleF1jbGFzc1Byb3RvdHlwZXNpbmNsdWRlQ2xvc3VyZXNjbG9zdXJlUHJvdG90eXBlc21ldGhvZEFsaWFzZXNsYXp5SW5pdGlhbGl6ZXJzZnVuY3Rpb24oaHVua0hlbHBlcnMsICNlbWJlZGRlZEdsb2JhbHNPYmplY3QsIGhvbGRlcnNMaXN0LCAjc3RhdGljU3RhdGUpIHsKCi8vIEJ1aWxkcyB0aGUgaG9sZGVycy4gVGhleSBvbmx5IGNvbnRhaW4gdGhlIGRhdGEgZm9yIG5ldyBob2xkZXJzLgojaG9sZGVyczsKCi8vIElmIHRoZSBuYW1lIGlzIG5vdCBzZXQgb24gdGhlIGZ1bmN0aW9ucywgZG8gaXQgbm93LgpodW5rSGVscGVycy5zZXRGdW5jdGlvbk5hbWVzSWZOZWNlc3NhcnkoI2RlZmVycmVkSG9sZGVyc0xpc3QpOwoKLy8gVXBkYXRlcyB0aGUgaG9sZGVycyBvZiB0aGUgbWFpbi1mcmFnbWVudC4gVXNlcyB0aGUgcHJvdmlkZWQgaG9sZGVyc0xpc3QgdG8KLy8gYWNjZXNzIHRoZSBtYWluIGhvbGRlcnMuCi8vIFRoZSBsb2NhbCBob2xkZXJzIGFyZSByZXBsYWNlZCBieSB0aGUgY29tYmluZWQgaG9sZGVycy4gVGhpcyBpcyBuZWNlc3NhcnkKLy8gZm9yIHRoZSBpbmhlcml0YW5jZSBzZXR1cCBiZWxvdy4KI3VwZGF0ZUhvbGRlcnM7Ci8vIFNldHMgdGhlIHByb3RvdHlwZXMgb2YgdGhlIG5ldyBjbGFzc2VzLgojcHJvdG90eXBlczsKLy8gQWRkIHNpZ25hdHVyZSBmdW5jdGlvbiB0eXBlcyBhbmQgY29tcHV0ZSB0aGUgdHlwZXMgb2Zmc2V0IGluIGBpbml0LnR5cGVzYC4KLy8gVGhlc2UgY2FuIG9ubHkgcmVmZXIgdG8gcmVndWxhciBjbGFzc2VzIGFuZCBpbiBEYXJ0IDIgb25seSBjbG9zdXJlcyBoYXZlCi8vIGZ1bmN0aW9uIHR5cGVzIHNvIHRoZSBgdHlwZXNPZmZzZXRgIGhhcyBiZWVuIHNhZmVseSBjb21wdXRlZCBiZWZvcmUgaXQncwovLyByZWZlcnJlZCBpbiB0aGUgc2lnbmF0dXJlcyBvZiB0aGUgYGNsb3N1cmVzYCBiZWxvdy4KdmFyICN0eXBlc09mZnNldCA9IGh1bmtIZWxwZXJzLnVwZGF0ZVR5cGVzKCN0eXBlcyk7CiNjbG9zdXJlczsKLy8gU2V0cyBhbGlhc2VzIG9mIG1ldGhvZHMgKG9uIHRoZSBwcm90b3R5cGVzIG9mIGNsYXNzZXMpLgojYWxpYXNlczsKLy8gSW5zdGFsbHMgdGhlIHRlYXItb2ZmcyBvZiBmdW5jdGlvbnMuCiN0ZWFyT2ZmczsKLy8gQnVpbGRzIHRoZSBpbmhlcml0YW5jZSBzdHJ1Y3R1cmUuCiNpbmhlcml0YW5jZTsKCi8vIEFkZHMgdGhlIHN1YnR5cGUgcnVsZXMgZm9yIHRoZSBuZXcgUlRJLgojdHlwZVJ1bGVzOwoKLy8gSW5zdGFudGlhdGVzIGFsbCBjb25zdGFudHMgb2YgdGhpcyBkZWZlcnJlZCBmcmFnbWVudC4KLy8gTm90ZSB0aGF0IHRoZSBjb25zdGFudC1ob2xkZXIgaGFzIGJlZW4gdXBkYXRlZCBlYXJsaWVyIGFuZCBzdG9yaW5nIHRoZQovLyBjb25zdGFudCB2YWx1ZXMgaW4gdGhlIGNvbnN0YW50LWhvbGRlciBtYWtlcyB0aGVtIGF2YWlsYWJsZSBnbG9iYWxseS4KI2NvbnN0YW50czsKLy8gSW5pdGlhbGl6ZXMgdGhlIHN0YXRpYyBub24tZmluYWwgZmllbGRzICh3aXRoIHRoZWlyIGNvbnN0YW50IHZhbHVlcykuCiNzdGF0aWNOb25GaW5hbEZpZWxkczsKLy8gQ3JlYXRlcyBsYXp5IGdldHRlcnMgZm9yIHN0YXRpY3MgdGhhdCBtdXN0IHJ1biBpbml0aWFsaXplcnMgb24gZmlyc3QgYWNjZXNzLgojbGF6eVN0YXRpY3M7CgovLyBOYXRpdmUtc3VwcG9ydCB1c2VzIHNldE9yVXBkYXRlSW50ZXJjZXB0b3JzQnlUYWcgYW5kIHNldE9yVXBkYXRlTGVhZlRhZ3MuCiNuYXRpdmVTdXBwb3J0Owp9ZGVmZXJyZWRIb2xkZXJzTGlzdHVwZGF0ZUhvbGRlcnNwcm9wZXJ0eU1hcGVtaXRTdGF0aWNNZXRob2RlbWl0Q29uc3RydWN0b3Job2xkZXJJbml0aWFsaXphdGlvbnN2YXIgaG9sZGVycyA9ICNjb25zdGFudEhvbGRlcmpzTWV0aG9kc2Z1bmN0aW9uICMoKSB7IH10aGlzUmVmc29mdERlZih0aGlzKXF1YWxpZmllZE5hbWVhbGxvY2F0aW9uc1siIl0gPSB0cnVlZW1pdHRlZEZpZWxkc3VuZGVyc2NvcmV2YXIgIyA9IHRoaXM7Y2hhaW5MZW5ndGhwcmV2aW91c0NvbnN0YW50Zmx1c2hBc3NpZ25tZW50IzsjLiMgPSAjZnVuY3Rpb24gIygjKSB7ICMgfXByb3RvIy5wcm90b3R5cGUgPSAjO2VtaXRQcm90b3R5cGVnZXR0ZXJzU2V0dGVyc2dlbmVyYXRlR2V0dGVyc1NldHRlcnNhbGxNZXRob2RzZW1pdEluc3RhbmNlTWV0aG9kcHJvcE5vIGNvbnN0YW50IHZhbHVlIGZvciBlbGlkZWQgZmllbGQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gIzsgfWZ1bmN0aW9uKHJlY2VpdmVyKSB7IHJldHVybiByZWNlaXZlclsjXTsgfWZ1bmN0aW9uKHJlY2VpdmVyKSB7IHJldHVybiB0aGlzWyNdOyB9ZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzWyNdOyB9ZnVuY3Rpb24oKSB7IH1mdW5jdGlvbihyZWNlaXZlciwgdmFsKSB7IHJldHVybiByZWNlaXZlclsjXSA9IHZhbDsgfWZ1bmN0aW9uKHJlY2VpdmVyLCB2YWwpIHsgcmV0dXJuIHRoaXNbI10gPSB2YWw7IH1mdW5jdGlvbih2YWwpIHsgcmV0dXJuIHRoaXNbI10gPSB2YWw7IH1nZXR0ZXJzc3R1Yk1ldGhvZGZvcmNlQWRkYXBwbHlOYW1lX2VuY29kZU9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlc2luaGVyaXRDYWxsc21peGluQ2FsbHNjbGFzc2VzSW5GcmFnbWVudF9taXhpbmh1bmtIZWxwZXJzLm1peGluc3VwZXJjbGFzc1JlZmVyZW5jZV9pbmhlcml0aHVua0hlbHBlcnMuaW5oZXJpdGxpc3RFbGVtZW50c2ZpcnN0Q2xhc3NfaW5oZXJpdE1hbnlodW5rSGVscGVycy5pbmhlcml0TWFueXdyYXBQaGFzZWZpcnN0QWxpYXN2YXIgXyA9ICMucHJvdG90eXBlO18gPSAjLnByb3RvdHlwZV8uIyA9IF8uIyhmdW5jdGlvbiAjKCl7I30pKCk7ZW1pdEluc3RhbGxUZWFyT2ZmY2FsbE5hbWVzZnVuc09yTmFtZXNhZGRGdW5Pck5hbWVjYWxsTmFtZUFycmF5ZnVuc09yTmFtZXNBcnJheWluc3RhbGxfc3RhdGljX2h1bmtIZWxwZXJzLl9zdGF0aWNfICAgICAgICAgICAgICAgICNpbnN0YWxsKCNjb250YWluZXIsICNnZXR0ZXJOYW1lLCAjbmFtZSwgI2Z1blR5cGUpZnVuVHlwZWluc3RhbGxlZE5hbWVfc3RhdGljaHVua0hlbHBlcnMuaW5zdGFsbFN0YXRpY1RlYXJPZmYgICAgICAgICAgICAjaW5zdGFsbCgjY29udGFpbmVyLCAjZ2V0dGVyTmFtZSwKICAgICAgICAgICAgICAgICAgICAgI3JlcXVpcmVkUGFyYW1ldGVyQ291bnQsICNvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICAgICAgICAgICAgICAgICAgICAjY2FsbE5hbWVzLCAjZnVuc09yTmFtZXMsICNmdW5UeXBlLCAjYXBwbHlJbmRleClpc0ludGVyY2VwdGVkVGFnX2luc3RhbmNlX2h1bmtIZWxwZXJzLl9pbnN0YW5jZV9faW5zdGFuY2VodW5rSGVscGVycy5pbnN0YWxsSW5zdGFuY2VUZWFyT2ZmICAgICAgICAgICAgI2luc3RhbGwoI2NvbnRhaW5lciwgI2dldHRlck5hbWUsICNpc0ludGVyY2VwdGVkLAogICAgICAgICAgICAgICAgICAgICAjcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwgI29wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgICAgICAgICAgICAgICAgI2NhbGxOYW1lcywgI2Z1bnNPck5hbWVzLCAjZnVuVHlwZSwgI2FwcGx5SW5kZXgpdmFyIF87aW5zdGFsbFRlYXJPZmZzaGFzTGlzdHZhciBtYWtlQ29uc3RMaXN0ID0gaHVua0hlbHBlcnMubWFrZUNvbnN0TGlzdDsjLiMgPSAjO05vIGNvZGUgZm9yICMuIyA9ICMoKTtzdGF0aWNGaWVsZHMjKCMsICMsICMsICMpO19sYXp5aHVua0hlbHBlcnMubGF6eWVtaXRFbWJlZGRlZEdsb2JhbHNGb3JEZWZlcnJlZExvYWRpbmdPYmplY3QuY3JlYXRlKG51bGwpaXNIdW5rTG9hZGVkRnVuY3Rpb25mdW5jdGlvbihoYXNoKSB7IHJldHVybiAhIVtoYXNoXTsgfWlzSHVua0luaXRpYWxpemVkRnVuY3Rpb25mdW5jdGlvbihoYXNoKSB7IHJldHVybiAhISNkZWZlcnJlZEluaXRpYWxpemVkW2hhc2hdOyB9aW5pdGlhbGl6ZUxvYWRlZEh1bmtGdW5jdGlvbiAgICAgICAgICAgIGZ1bmN0aW9uKGhhc2gpIHsKICAgICAgICAgICAgICB2YXIgaHVuayA9IFtoYXNoXTsKICAgICAgICAgICAgICBpZiAoaHVuayA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICB0aHJvdyAiRGVmZXJyZWRMb2FkaW5nIHN0YXRlIGVycm9yOiBjb2RlIHdpdGggaGFzaCAnIiArCiAgICAgICAgICAgICAgICAgICAgaGFzaCArICInIHdhcyBub3QgbG9hZGVkIjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaW5pdGlhbGl6ZURlZmVycmVkSHVuayhodW5rKTsKICAgICAgICAgICAgICAjZGVmZXJyZWRJbml0aWFsaXplZFtoYXNoXSA9IHRydWU7CiAgICAgICAgICAgIH1kZWZlcnJlZExvYWRIYXNoZXNmcmFnbWVudEluZGV4ZXNmcmFnbWVudFVyaXNmcmFnbWVudEhhc2hlc2xpYnJhcnlQYXJ0c01hcEVudHJpZXNmcmFnbWVudExpc3RpbmRleGVzZnJhZ21lbnRIYXNoc2V0VmFsdWVlbWl0TWFuZ2xlZEdsb2JhbE5hbWVzbmF0aXZlQ2xhc3Nlc05lZWRpbmdVbm1hbmdsZWROYW1lZW1pdEdldFR5cGVGcm9tTmFtZWdldEdsb2JhbEZyb21OYW1lZW1pdE1ldGFkYXRhbWV0YWRhdGFHbG9iYWxzY3JlYXRlR2xvYmFsbWFpblVuaXRjcmVhdGVSdGlVbml2ZXJzZWdsb2JhbHNPYmplY3R2YXIgaW5pdCA9ICM7aW5pdC4jID0gIztzdXBlcnR5cGVBcmd1bWVudHMjKGluaXQuIyxKU09OLnBhcnNlKCMpKTt1bml2ZXJzZUZpZWxkc2luaXRGaWVsZG5ldyBNYXAoKSAgICAgICAgLy8gT24gVjgsIHRoZSAnaW50ZXJuJyBmdW5jdGlvbiBjb252ZXJ0cyBhIHN0cmluZyB0byBhIHN5bWJvbCwgd2hpY2gKICAgICAgICAvLyBtYWtlcyBwcm9wZXJ0eSBhY2Nlc3MgbXVjaCBmYXN0ZXIuCiAgICAgICAgLy8gVE9ETyhzcmEpOiBVc2UgU3ltYm9sIG9uIG5vbi1JRTExIGJyb3dzZXJzLgogICAgICAgIGZ1bmN0aW9uIChzKSB7CiAgICAgICAgICB2YXIgbyA9IHt9OwogICAgICAgICAgb1tzXSA9IDE7CiAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoaHVua0hlbHBlcnMuY29udmVydFRvRmFzdE9iamVjdChvKSlbMF07CiAgICAgICAgfXN1YmNsYXNzQXNzaWdubWVudHNodW5rSGVscGVycy5zZXRPclVwZGF0ZUludGVyY2VwdG9yc0J5VGFnKCMpO2h1bmtIZWxwZXJzLnNldE9yVXBkYXRlTGVhZlRhZ3MoIyk7TG9jYWxBbGlhc2VzaW5pdGlhbGl6YXRpb25zSG9sZGVyQ29kZURlZmVycmVkTG9hZGluZ1N0YXRlRGVmZXJyZWRQcmltYXJ5RXhwcmVzc2lvbnRlYXJPZmZQcm9wZXJ0eU5hbWUkdGVhck9mZmNhY2hlZENsYXNzRmllbGROYW1lcyRjYWNoZWRGaWVsZE5hbWVzbWFpbkJvaWxlcnBsYXRlZGVmZXJyZWRCb2lsZXJwbGF0ZURhcnQyc29mdERlZmVycmVkQm9pbGVycGxhdGVTVUNDRVNTX1NzYUluc3RydWN0aW9uU2VsZWN0aW9uJkhCYXNlVmlzaXRvciZDb2RlZ2VuUGhhc2VTc2FJbnN0cnVjdGlvblNlbGVjdGlvbnNpbXBsZU9wX2ludGVyY2VwdGVkdHJ5UmVwbGFjZUV4cGxpY2l0UmVjZWl2ZXJXaXRoRHVtbXlyZWNlaXZlckFyZ3VtZW50aXNNYXRjaGluZ1JlYWRub01hdGNoaW5nUmVhZHJlcGxhY2VPcHBsdXNPck1pbnVzaW5jcmVtZW50T3BybXdzaW1wbGVzaW1wbGVCaW5hcnliaXRvcG9wZXJhbmQxb3BlcmFuZDJfU3NhVHlwZUtub3duUmVtb3ZlciZIQmFzZVZpc2l0b3ImQ29kZWdlblBoYXNlU3NhVHlwZUtub3duUmVtb3Zlcl9Tc2FUcnVzdGVkQ2hlY2tSZW1vdmVyJkhCYXNlVmlzaXRvciZDb2RlZ2VuUGhhc2VTc2FUcnVzdGVkQ2hlY2tSZW1vdmVyX1NzYUFzc2lnbm1lbnRDaGFpbmluZyZIQmFzZVZpc2l0b3ImQ29kZWdlblBoYXNlU3NhQXNzaWdubWVudENoYWluaW5ndHJ5Q2hhaW5Bc3NpZ25tZW50bmV4dFNldHRlcm5leHRTdG9yZXNpbXBsZVNvdXJjZV9Tc2FJbnN0cnVjdGlvbk1lcmdlciZIQmFzZVZpc2l0b3ImQ29kZWdlblBoYXNlU3NhSW5zdHJ1Y3Rpb25NZXJnZXJleHBlY3RlZElucHV0c3B1cmVJbnB1dHNtYXJrQXNHZW5lcmF0ZUF0VXNlU2l0ZWFuYWx5emVJbnB1dHNpc0VmZmVjdGl2ZWx5UHVyZWlzQXNzaWduZWRMb2NhbGluaXRpYWxpemluZ0Fzc2lnbm1lbnRDb3VudHN1cGVyTWV0aG9kdHJ5R2VuZXJhdGVBdFVzZVNpdGVpc0Jsb2NrU2luZ2xlUHJlZGVjZXNzb3J0cnlNZXJnaW5nRXhwcmVzc2lvbnNmaW5kSW5JbnB1dHNBbmRQb3BOb25NYXRjaGluZ25leHRJbnB1dG5ld0lucHV0c25ld0NvdW50X1NzYUNvbmRpdGlvbk1lcmdlciZIR3JhcGhWaXNpdG9yJkNvZGVnZW5QaGFzZVNzYUNvbmRpdGlvbk1lcmdlcmhhc0FueVN0YXRlbWVudGlzU2FmZVRvR2VuZXJhdGVBdFVzZVNpdGVzdGFydElmdGhlbklucHV0ZWxzZUlucHV0b3RoZXJJZm90aGVySm9pbm90aGVyUGhpbmV4dEluc3RydWN0aW9uX1NzYVNoYXJlUmVnaW9uQ29uc3RhbnRzJkhCYXNlVmlzaXRvciZDb2RlZ2VuUGhhc2VTc2FTaGFyZVJlZ2lvbkNvbnN0YW50c19jb3VudENhY2hlYWJsZVVzZXNjYWNoZWFibGV1c2VDb3VudF90aGlzX2hhbmRsZU51bGxfaGFuZGxlSW50X2hhbmRsZVN0cmluZ19pc0NhY2hlYWJsZVVzZV9udWxsX3NfRXhwcmVzc2lvbk5hbWVjYW5Vc2VBbGlhc2VkU3VwZXJNZW1iZXJMaXZlUmFuZ2VMaXZlSW50ZXJ2YWxmb3JDaGVja2NoZWNrZWRJbnRlcnZhbGxvb3BVcGRhdGVyYW5nZWludGVydmFsZGllc0F0YXRMaXZlRW52aXJvbm1lbnRzdGFydElkZW5kSWRsb29wTWFya2Vyc3VzZXJJZGV4aXN0aW5nSWRhZGRMb29wTWFya2VycmVtb3ZlTG9vcE1hcmtlcl9Tc2FMaXZlSW50ZXJ2YWxCdWlsZGVyJkhCYXNlVmlzaXRvciZDb2RlZ2VuUGhhc2VTc2FMaXZlSW50ZXJ2YWxCdWlsZGVyaW5zdHJ1Y3Rpb25JZExpdmVJbnRlcnZhbEJ1aWxkZXIubWFya0lucHV0c0FzTGl2ZUluRW52aXJvbm1lbnRtYXJrQXNMaXZlSW5FbnZpcm9ubWVudGNoZWNrZWRJbnN0cnVjdGlvbk9yTm9uR2VuZXJhdGVBdFVzZVNpdGVyZW1vdmVGcm9tRW52aXJvbm1lbnRpZkluc3RydWN0aW9uc3VjY2Vzc29yRW52dXBkYXRlTG9vcE1hcmtlckNvcHkgPC0gQ29weUhhbmRsZXJhZGRDb3B5Q29waWVzOiAsIGFzc2lnbm1lbnRzOiBWYXJpYWJsZU5hbWVzb3duTmFtZWNvcHlIYW5kbGVyc2FsbFVzZWROYW1lc3N3YXBUZW1wdDBhZGROYW1lVXNlZFZhcmlhYmxlTmFtZXJmcmVlVGVtcG9yYXJ5TmFtZXN0ZW1wb3JhcnlJbmRleHRbMC05XSthbGxvY2F0ZVdpdGhIaW50YWxsb2NhdGVUZW1wb3JhcnlmaXJzdFBoaVVzZXJXaXRoRWxlbWVudGFsbG9jYXRlTmFtZWFkZEFsbG9jYXRlZE5hbWVmcmVlTmFtZV9Tc2FWYXJpYWJsZUFsbG9jYXRvciZIQmFzZVZpc2l0b3ImQ29kZWdlblBoYXNlU3NhVmFyaWFibGVBbGxvY2F0b3J2YXJpYWJsZU5hbWVyaGFuZGxlUGhpaGFuZGxlSW5zdHJ1Y3Rpb25uZWVkc05hbWVhdEludGVydmFsaW5zdHJ1Y3Rpb25JbnRlcnZhbGZyZWVVc2VkTmFtZXNBdFNwZWNpYWxpemVkQ2hlY2tzZmluZEFzQ2hlY2tfZmluZEFzQ2hlY2tTc2FTaW1wbGlmeUludGVyY2VwdG9yc19lbmNsb3NpbmdDbGFzc3Nob3VsZFJlbW92ZXRyeUNvbXB1dGVDb25zdGFudEludGVyY2VwdG9yY2FuVXNlU2VsZkZvckludGVyY2VwdG9yY29uc3RhbnRJbnRlcmNlcHRvcnRyeUNvbXB1dGVDb25zdGFudEludGVyY2VwdG9yRnJvbVR5cGVmaW5kRG9taW5hdG9ycmV3cml0ZVNlbGZJbnRlcmNlcHRvclVzZXNyZXBsYWNlVXNlcldpdGhpbnN0YW5jZW9mQ2hlY2tvbmVTaG90SW50ZXJjZXB0b3JmaW5pc2hJbnZva2VjYWxsUmVjZWl2ZXJTc2FUeXBlUHJvcGFnYXRvcndvcmttYXBwZW5kaW5nT3B0aW1pemF0aW9uc3VwZGF0ZVR5cGVwcm9jZXNzV29ya2xpc3RhZGRUb1dvcmtMaXN0YWRkRGVwZW5kZW50SW5zdHJ1Y3Rpb25zVG9Xb3JrTGlzdHByb2Nlc3NQZW5kaW5nT3B0aW1pemF0aW9uc2NoZWNrUG9zaXRpdmVJbnRlZ2Vyb3V0cHV0VHlwZV9udW1lcmljRml4dXBjb252ZXJ0SW5wdXRpc0NoZWNrRW5vdWdoRm9yTnNtT3JBZWNoZWNrUmVjZWl2ZXJjaGVja0FyZ3VtZW50YWRkQWxsVXNlcnNCdXRjaGVja0lucHV0c1ZhbHVlUmFuZ2VJbmZvaW50WmVyb2ludE9uZW5ld0ludFZhbHVlbmV3SW5zdHJ1Y3Rpb25WYWx1ZW5ld1Bvc2l0aXZlVmFsdWVuZXdBZGRWYWx1ZW5ld1N1YnRyYWN0VmFsdWVuZXdOZWdhdGVWYWx1ZW5ld1VuYm91bmRSYW5nZW5ld05vcm1hbGl6ZWRSYW5nZXVwbmV3TWFya2VyUmFuZ2VWYWx1ZU1hcmtlclZhbHVlcG9zaXRpdmVJbnRWYWx1ZUludFZhbHVlLmhhc2hDb2RlSW50VmFsdWUgTWF4SW50VmFsdWVNYXhNaW5JbnRWYWx1ZU1pblVua25vd25WYWx1ZUluc3RydWN0aW9uVmFsdWVJbnN0cnVjdGlvblZhbHVlLmhhc2hDb2RlSW5zdHJ1Y3Rpb246IFBvc2l0aXZlVmFsdWVCaW5hcnlPcGVyYXRpb25WYWx1ZUFkZFZhbHVlQWRkVmFsdWUuaGFzaENvZGVTdWJ0cmFjdFZhbHVlU3VidHJhY3RWYWx1ZS5oYXNoQ29kZU5lZ2F0ZVZhbHVlTmVnYXRlLmhhc2hDb2RldW5ib3VuZGlzU2luZ2xlVmFsdWVSYW5nZS5oYXNoQ29kZVNzYVZhbHVlUmFuZ2VBbmFseXplcmNvbnZlcnNpb25zU1NBIHZhbHVlIHJhbmdlIGJ1aWxkZXJyZW1vdmVSYW5nZUNvbnZlcnNpb25jb25zdGFudE51bWluZGV4UmFuZ2VsZW5ndGhSYW5nZW1heEluZGV4YmVsb3dMZW5ndGhjcmVhdGVSYW5nZUNvbnZlcnNpb25uZXdJbmRleFJhbmdlcmlnaHRSYW5nZWxlZnRSYW5nZWhhbmRsZUVxdWFsaXR5Q2hlY2toYW5kbGVJbnZva2VNb2R1bG9kaXZpc29yZGl2aWRlbmRoYW5kbGVCaW5hcnlPcGVyYXRpb250cnlDb21wdXRlUmFuZ2VuZWdhdGVPcGVyYXRpb25mbGlwT3BlcmF0aW9uY29tcHV0ZUNvbnN0cmFpbmVkUmFuZ2VtaXJyb3JPcHJldmVyc2VkTWlycm9yTG9vcFVwZGF0ZVJlY29nbml6ZXJsb29wUGhpdXBkYXRlUmFuZ2VzdGFydFJhbmdlcGhpUmFuZ2VpbnB1dFJhbmdlVmFsdWVTZXRjb2xsaXNpb25zY2FwYWNpdHlyZXNpemVwcm9iZW9sZFNpemVvbGRUYWJsZW9sZENvbGxpc2lvbnNWYWx1ZVNldE5vZGVqc19jaGFyYWN0ZXJfY29kZXNfTUVSR0VfU09SVF9MSU1JVGJpbmFyeVNlYXJjaHNvcnRlZExpc3Rjb21wbG93ZXJCb3VuZHRtcDFfcmV2ZXJzZWluc2VydGlvblNvcnRzY3JhdGNoU3BhY2VfbW92aW5nSW5zZXJ0aW9uU29ydF9tZXJnZVNvcnR0YXJnZXRNaWRkbGVmaXJzdExpc3RmaXJzdFN0YXJ0Zmlyc3RFbmRzZWNvbmRMaXN0c2Vjb25kU3RhcnRzZWNvbmRFbmRjdXJzb3IxY3Vyc29yMmZpcnN0RWxlbWVudHNlY29uZEVsZW1lbnRfQ2Fub25pY2FsaXplX0lzVmFsaWRLZXlDYW5vbmljYWxpemVkTWFwX2Nhbm9uaWNhbGl6ZV9pc1ZhbGlkS2V5Rm5fYmFzZV9pc1ZhbGlkS2V5ey4uLn1fdG9TdHJpbmdWaXNpdGluZ19pc1RvU3RyaW5nVmlzaXRpbmdDb21iaW5lZEl0ZXJhYmxlVmlld19pdGVyYWJsZXNfQ29tYmluZWRJdGVyYXRvcl9pdGVyYXRvcnNDb21iaW5lZExpc3RWaWV3X2xpc3RzX3Rocm93Q2Fubm90IG1vZGlmeSBhbiB1bm1vZGlmaWFibGUgTGlzdGluaXRpYWxJbmRleENvbWJpbmVkTWFwVmlld196ZXJvX3VwcGVyQ2FzZUFfdXBwZXJDYXNlWl9sb3dlckNhc2VBX2xvd2VyQ2FzZVpfYXNjaWlDYXNlQml0ZXF1YWxzSWdub3JlQXNjaWlDYXNlYUNoYXJiQ2hhcmFDaGFyTG93ZXJDYXNlaGFzaElnbm9yZUFzY2lpQ2FzZWNvbXBhcmVBc2NpaVVwcGVyQ2FzZWRlZmF1bHRSZXN1bHRhVXBwZXJDYXNlYlVwcGVyQ2FzZWNvbXBhcmVBc2NpaUxvd2VyQ2FzZWFMb3dlckNhc2ViTG93ZXJDYXNlY29tcGFyZU5hdHVyYWxjb21wYXJlQXNjaWlMb3dlckNhc2VOYXR1cmFsY29tcGFyZUFzY2lpVXBwZXJDYXNlTmF0dXJhbF9jb21wYXJlTmF0dXJhbGx5YUlzRGlnaXRiSXNEaWdpdF9jb21wYXJlTnVtZXJpY2FsbHlfY29tcGFyZURpZ2l0Q291bnRfaXNEaWdpdF9pc05vblplcm9OdW1iZXJTdWZmaXhfR2V0S2V5RXF1YWxpdHllMWUyRXF1YWxpdHlCeV9nZXRLZXlfaW5uZXJnZXRLZXlEZWZhdWx0RXF1YWxpdHlJZGVudGl0eUVxdWFsaXR5SXRlcmFibGVFcXVhbGl0eV9lbGVtZW50RXF1YWxpdHllbGVtZW50RXF1YWxpdHllbGVtZW50czFlbGVtZW50czJpdDFpdDJoYXNOZXh0TGlzdEVxdWFsaXR5X1Vub3JkZXJlZEVxdWFsaXR5VW5vcmRlcmVkSXRlcmFibGVFcXVhbGl0eVNldEVxdWFsaXR5X01hcEVudHJ5ZXF1YWxpdHlfa2V5RXF1YWxpdHlfdmFsdWVFcXVhbGl0eU1hcEVxdWFsaXR5ZXF1YWxFbGVtZW50Q291bnRza2V5SGFzaHZhbHVlSGFzaE11bHRpRXF1YWxpdHlfZXF1YWxpdGllc2VxdWFsaXRpZXNlcURlZXBDb2xsZWN0aW9uRXF1YWxpdHlfdW5vcmRlcmVkQ2FzZUluc2Vuc2l0aXZlRXF1YWxpdHlzdHJpbmcxX0hBU0hfTUFTS0VxdWFsaXR5TWFwRXF1YWxpdHlTZXRtYXBNYXBLMW1hcEtleW1hcFZhbHVlbWVyZ2VNYXBzZ3JvdXBCeW1pbkJ5b3JkZXJCeW1pblZhbHVlbWluT3JkZXJCeWVsZW1lbnRPcmRlckJ5bWF4QnltYXhWYWx1ZW1heE9yZGVyQnl0cmFuc2l0aXZlQ2xvc3VyZXZlcnRleDF2ZXJ0ZXgydmVydGV4M3N0cm9uZ2x5Q29ubmVjdGVkQ29tcG9uZW50c2luZGljZXNsb3dMaW5rc29uU3RhY2tzdHJvbmdDb25uZWN0SXRlcmFibGVaaXBpdGVyYWJsZXNpdGVyYXRvcnNfSXRlcmF0b3JaaXBQcmlvcml0eVF1ZXVlSGVhcFByaW9yaXR5UXVldWVfSU5JVElBTF9DQVBBQ0lUWV9sb2NhdGVObyBzdWNoIGVsZW1lbnRfcmVtb3ZlTGFzdF9idWJibGVVcF9idWJibGVEb3dubGVmdENoaWxkUG9zaXRpb25wYXJlbnRJbmRleHJpZ2h0Q2hpbGRJbmRleGxlZnRDaGlsZEluZGV4bGVmdENoaWxkcmlnaHRDaGlsZG1pbkNoaWxkSW5kZXhtaW5DaGlsZG5ld0NhcGFjaXR5bmV3UXVldWVfUXVldWVMaXN0Jk9iamVjdCZMaXN0TWl4aW5RdWV1ZUxpc3RfdGFibGVfaGVhZF90YWlsaW5pdGlhbENhcGFjaXR5X2Nhc3RGcm9tc291cmNlTGlzdGFkZENvdW50X3ByZUdyb3dlbmRTcGFjZXByZVNwYWNlYWRkRmlyc3RObyBlbGVtZW50TGVuZ3RoICBtYXkgbm90IGJlIG5lZ2F0aXZlLm5ld1RhaWwgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAuLl9pc1Bvd2VyT2YyX25leHRQb3dlck9mMm5leHROdW1iZXJuZXdUYWJsZV93cml0ZVRvTGlzdGZpcnN0UGFydFNpemVuZXdFbGVtZW50Q291bnRfQ2FzdFF1ZXVlTGlzdF9VbmlvblNldCZTZXRCYXNlJlVubW9kaWZpYWJsZVNldE1peGluQ2Fubm90IG1vZGlmeSBhbiB1bm1vZGlmaWFibGUgU2V0VW5pb25TZXRfZGlzam9pbnRfaXRlcmFibGVfZGVkdXBJdGVyYWJsZVVuaW9uU2V0Q29udHJvbGxlcl9zZXRVbm1vZGlmaWFibGVMaXN0Vmlld19Ob25Hcm93YWJsZUxpc3RWaWV3JkRlbGVnYXRpbmdMaXN0Jk5vbkdyb3dhYmxlTGlzdE1peGluQ2Fubm90IGNoYW5nZSB0aGUgbGVuZ3RoIG9mIGEgZml4ZWQtbGVuZ3RoIGxpc3ROb25Hcm93YWJsZUxpc3RWaWV3bGlzdEJhc2VOb25Hcm93YWJsZUxpc3RNaXhpbl9Vbm1vZGlmaWFibGVTZXRWaWV3JkRlbGVnYXRpbmdTZXQmVW5tb2RpZmlhYmxlU2V0TWl4aW5Vbm1vZGlmaWFibGVTZXRWaWV3c2V0QmFzZVVubW9kaWZpYWJsZVNldE1peGluVW5tb2RpZmlhYmxlTWFwTWl4aW5DYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBNYXBfS2V5Rm9yVmFsdWVfRGVsZWdhdGluZ0l0ZXJhYmxlQmFzZURlbGVnYXRpbmdJdGVyYWJsZVVzZSBpdGVyYWJsZS5jYXN0PEU+IGluc3RlYWQuRGVsZWdhdGluZ0xpc3RVc2UgbGlzdC5jYXN0PEU+IGluc3RlYWQuX2xpc3RCYXNlRGVsZWdhdGluZ1NldFVzZSBzZXQuY2FzdDxFPiBpbnN0ZWFkLl9zZXRCYXNlRGVsZWdhdGluZ1F1ZXVlVXNlIHF1ZXVlLmNhc3Q8RT4gaW5zdGVhZC5fYmFzZVF1ZXVlRGVsZWdhdGluZ01hcFVzZSBtYXAuY2FzdDxLLCBWPiBpbnN0ZWFkLl9NYXBLZXlTZXQmX0RlbGVnYXRpbmdJdGVyYWJsZUJhc2UmVW5tb2RpZmlhYmxlU2V0TWl4aW5NYXBLZXlTZXRfYmFzZU1hcE1hcEtleVNldCBkb2Vzbid0IHN1cHBvcnQgbG9va3VwKCkuTWFwVmFsdWVTZXRfa2V5Rm9yVmFsdWVrZXlGb3JWYWx1ZXRvUmVtb3ZldmFsdWVzVG9SZXRhaW5rZXlzVG9SZW1vdmVkYXJ0MmpzX2luZm8uc3JjLmdyYXBobm9kZUNvdW50dGFyZ2V0c09mc291cmNlc09mY29tcHV0ZVRvcG9sb2dpY2FsU29ydGZpbmRlcmNvbnRhaW5zUGF0aHBvc3RPcmRlcmZpbmRDeWNsZUNvbnRhaW5pbmdfY29tcG9uZW50Q29udGFpbmluZ2RvbWluYXRvclRyZWVpRG9taW1tZWRpYXRlRG9taW5hdG9yc0VkZ2VMaXN0R3JhcGhfZWRnZXNfcmV2RWRnZXNyZW1vdmVFZGdlcmVtb3ZlTm9kZXJlbW92ZUFsbE5vZGVzX05vZGVJbmZvbG93bGlua19TY2NGaW5kZXJfYWxsQ29tcG9uZW50c19zdHJvbmdDb25uZWN0bm9kZUluZm9fcG9wX3B1c2h2SW5mb3d3SW5mb19Eb21pbmF0b3JGaW5kZXJwb3N0T3JkZXJJZG5vZGVzSW5Qb3N0T3JkZXJub2Rlc0luUmV2ZXJzZWRQb3N0T3JkZXJpZG9tX2ludGVyc2VjdGZpbmdlcjFmaW5nZXIyY29tcGlsZXIuc3JjLmluZmVycmVyLm5vZGVfdHJhY2VyVHJhY2VyVmlzaXRvck1BWF9BTkFMWVNJU19DT1VOVGxpc3RzVG9BbmFseXplc2V0c1RvQW5hbHl6ZW1hcHNUb0FuYWx5emVfd291bGRCZVRvb01hbnlVc2Vyc3NlZW5Tb0ZhcmFjdHVhbFdvcmtUb28gbWFueSB1c2Vyc2FuYWx5emVTdG9yZWRJbnRvTGlzdGFuYWx5emVTdG9yZWRJbnRvU2V0YW5hbHl6ZVN0b3JlZEludG9NYXBCYWlsaW5nIG91dCBvbiAgYmVjYXVzZTogUGFzc2VkIHRocm91Z2ggYXdhaXRQYXNzZWQgdGhyb3VnaCB5aWVsZFVzZWQgYXMga2V5IGluIE1hcFN0b3JlZCBpbiBhIGxpc3QgdGhhdCBiYWlsZWQgb3V0Zmxvd0VzY2FwZSBmcm9tIGEgbGlzdCB2aWEgW1N0b3JlZCBpbiBhIHNldCB0aGF0IGJhaWxlZCBvdXRFc2NhcGUgZnJvbSBhIHNldCB2aWEgW1N0b3JlZCBpbiBhIG1hcCB0aGF0IGJhaWxlZCBvdXRFc2NhcGUgZnJvbSBhIG1hcCB2aWEgW21pZ2h0QWRkVG9Db250YWluZXJpc0luZGV4U2V0QXJndW1lbnRpc0luZGV4U2V0S2V5aXNJbmRleFNldFZhbHVlYmFpbG91dElmUmVhY2hlc1JlYWNoZWQgc3VwcHJlc3NlZCBwYXJhbWV0ZXIgd2l0aG91dCBwcmVjaXNlIHJlY2VpdmVyYWRkc1RvQ29udGFpbmVyU3RvcmVkIGluIHRvbyBtYW55IGNvbnRhaW5lcnNhZGRzVG9NYXBWYWx1ZVN0b3JlZCBpbiB0b28gbWFueSBtYXBzYWRkc1RvTWFwS2V5aXNQYXJhbWV0ZXJPZkxpc3RBZGRpbmdNZXRob2Rpc1BhcmFtZXRlck9mTWFwQWRkaW5nTWV0aG9kUGFzc2VkIHRvIG5vU3VjaE1ldGhvZGluZmVycmVkVGFyZ2V0VHlwZXNwYXJhbWV0ZXJJbmZvUmV0dXJuZWQgZnJvbSBhIGNsb3N1cml6ZWQgbWV0aG9kUmV0dXJuZWQgZnJvbSBhIGNsb3N1cmVFc2NhcGUgdG8gY29kZSB0aGF0IGhhcyBzcGVjaWFsIGJhY2tlbmQgdHJlYXRtZW50UGFzc2VkIHRvIGEgbmF0aXZlIG1ldGhvZGRvZXNOb3RFc2NhcGVMaXN0U2V0ZG9lc05vdEVzY2FwZVNldFNldGRvZXNOb3RFc2NhcGVNYXBTZXRjb21waWxlci5zcmMuanNfYmFja2VuZC5qc19pbnRlcm9wX2FuYWx5c2lzYnVpbGRKc0ludGVyb3BCb290c3RyYXBjYW5kaWRhdGVQYXJhbWV0ZXJOYW1lc2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpGdW5jdGlvbi5wcm90b3R5cGUuIyA9IGZ1bmN0aW9uKCMpIHsgcmV0dXJuIHRoaXMoIykgfWJ1aWxkSnNGdW5jdGlvblR5cGVkYXJ0MmpzLnJlc29sdXRpb24ucmVnaXN0cnlfY29uc3RTeW1ib2xOYW1lc19jb25zdGFudExpdGVyYWxzX3NlZW5DbGFzc2VzcmVnaXN0ZXJTZWVuQ2xhc3NzZWVuQ2xhc3NSZXNvbHV0aW9uV29ybGRJbXBhY3RCdWlsZGVyKAogZmVhdHVyZXM6CiBtYXAtbGl0ZXJhbHM6CiBzZXQtbGl0ZXJhbHM6CiBsaXN0LWxpdGVyYWxzOgogY29uc3QtbGl0ZXJhbHM6CiBjb25zdC1zeW1ib2wtbmFtZXM6IAogbmF0aXZlLWRhdGE6CiBpbnN0YW50aWF0aW9uczpGZWF0dXJlc191bnNvcnRlZGFkZEVsZW1lbnRtYXJrQXNVbnNvcnRlZEZlYXR1cmVzKGZyb21UZXh0ZXFQb3Njb21tYVBvc2VuZERlbGltaXRlcnN2YWx1ZVN0YXJ0ZW5kRGVsaW1pdGVyRmVhdHVyZXNEYXRhSW50ZXJwcmV0ZXJpc0FzRXhwZWN0ZWRhY3R1YWxGZWF0dXJlc2V4cGVjdGVkRGF0YUV4cGVjdGVkIGVtcHR5IGRhdGEuZXJyb3JzRm91bmRleHBlY3RlZEZlYXR1cmVzdmFsaWRhdGVkRmVhdHVyZXNleHBlY3RNYXRjaGFjdHVhbFZhbHVlVW5leHBlY3RlZCBkYXRhIGZvdW5kIGZvciBObyBkYXRhIGZvdW5kIGZvciBOb24tZW1wdHkgZGF0YSBmb3VuZCBmb3IgYWN0dWFsTGlzdGV4cGVjdGVkT2JqZWN0ZXhwZWN0ZWRUZXh0YWN0dWFsT2JqZWN0Tm8gbWF0Y2ggZm91bmQgZm9yID1bRXh0cmEgZGF0YSBmb3VuZCBMaXN0IGRhdGEgZXhwZWN0ZWQgZm9yIGV4cGVjdGVkICcnLCBmb3VuZCAnTWlzbWF0Y2ggZm9yIDogZXhwZWN0ZWQgJ2ZvdW5kICdFeHRyYSBkYXRhIGZvdW5kICdhY3R1YWxEYXRhX2RpZ2VzdFNpbmtfYnl0ZVNpbmtfRGlnZXN0U2lua2RhcnQyanMuc291cmNlX21hcF9idWlsZGVydGFyZ2V0RmlsZVVyaWxvY2F0aW9uUHJvdmlkZXJtaW5pZmllZEdsb2JhbE5hbWVzbWluaWZpZWRJbnN0YW5jZU5hbWVzYWRkTWFwcGluZ3ByaW50U3RyaW5nTGlzdE9ubGluZUNvbHVtbk1hcHNvdXJjZUxvY2F0aW9uTWFwc291cmNlTWFwRW50cnlrZXJuZWxMb2NhdGlvbnNvdXJjZUxpbmVDb2x1bW5NYXBfYnVpbGR1cmlNYXByZWdpc3RlckxvY2F0aW9uZm9yRWFjaEVsZW1lbnRtYXBwaW5nc0J1ZmZlcndyaXRlRW50cmllc3sKICAidmVyc2lvbiI6IDMsCiAgImVuZ2luZSI6ICIiLAogICJmaWxlIjogICAic291cmNlUm9vdCI6ICIiLAogICJzb3VyY2VzIjogcmVsYXRpdmVTb3VyY2VVcmlMaXN0ICAibmFtZXMiOiAgICJtYXBwaW5ncyI6ICIgICJ4X29yZ19kYXJ0bGFuZ19kYXJ0MmpzIjogewogICAgIm1pbmlmaWVkX25hbWVzIjogewogICAgICAiZ2xvYmFsIjogd3JpdGVNaW5pZmllZE5hbWVzICAgICAgImluc3RhbmNlIjogCiAgICB9LAogICAgImZyYW1lcyI6IHdyaXRlRnJhbWVzCiAgfQp9CnByZXZpb3VzU291cmNlTG9jYXRpb25wcmV2aW91c1RhcmdldExpbmV0YXJnZXRDb2x1bW5FbmNvZGVyZmlyc3RFbnRyeUluTGluZXNvdXJjZVVyaUluZGV4RW5jb2RlcnNvdXJjZUxpbmVFbmNvZGVyc291cmNlQ29sdW1uRW5jb2RlcnNvdXJjZU5hbWVJbmRleEVuY29kZXJ0YXJnZXRMaW5ldGFyZ2V0Q29sdW1ubWluaWZpZWROYW1lc21pbmlmaWVkTmFtZW9mZnNldEVuY29kZXJ1cmlFbmNvZGVybGluZUVuY29kZXJjb2x1bW5FbmNvZGVybmFtZUVuY29kZXJnZW5lcmF0ZVNvdXJjZU1hcFRhZ3NvdXJjZU1hcEZpbGVOYW1lCi8vIyBzb3VyY2VNYXBwaW5nVVJMPW91dHB1dFNvdXJjZU1hcHNvdXJjZUxvY2F0aW9uc1Byb3ZpZGVyc291cmNlTWFwQnVpbGRlcmpzLm1hcG1hcC5qcy5tYXAuRGVsdGFFbmNvZGVyVkxRX0JBU0VfU0hJRlRWTFFfQkFTRV9NQVNLVkxRX0NPTlRJTlVBVElPTl9CSVRWTFFfQ09OVElOVUFUSU9OX01BU0tCQVNFNjRfRElHSVRTQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL2VuY29kZVZMUXNpZ25CaXRTb3VyY2VNYXBFbnRyeUxpbmVDb2x1bW5NYXBfZ2V0TGlzdGxpbmVNYXBmb3JFYWNoTGluZWdldEZpcnN0RWxlbWVudHNJbkxpbmVjb2x1bW5zZm9yRWFjaENvbHVtbkluZGV4TWFwanNfYmFja2VuZGRhcnQyanMuanNfZW1pdHRlci5jb25zdGFudF9vcmRlcmluZ19Db25zdGFudE9yZGVyaW5nX2RhcnRUeXBlT3JkZXJpbmdjb21wYXJlVmFsdWVzY29tcGFyZU51bGxhYmxlY29tcGFyZUxpc3RzY29tcGFyZUNsYXNzZXNjb21wYXJlVHlwZWRlZnNjb21wYXJlRGFydFR5cGVzYUludGJJbnRhU3RyaW5nYlN0cmluZ2FGaWVsZHNiRmllbGRzX0RhcnRUeXBlS2luZFZpc2l0b3JfRGFydFR5cGVPcmRlcmluZ19yb290VHlwZSB2YXJpYWJsZXMgYXJlIG5vdCBleHBlY3RlZCBpbiBjb25zdGFudHM6ICdfY29tcGFyZVR5cGVBcmd1bWVudHNhQXJndW1lbnRzYkFyZ3VtZW50c2RhcnQyanMuanNfZW1pdHRlci5oZWFkZXJzSE9PS1NfQVBJX1VTQUdFZ2VuZXJhdGVkQnkgdmVyc2lvbjogLy8gR2VuZXJhdGVkIGJ5IGRhcnQyanN0aGUgRGFydCB0byBKYXZhU2NyaXB0IGNvbXBpbGVyZGVmYXVsdENvbXBhcmVFbXB0eVVubW9kaWZpYWJsZVNldFJ1blRlc3RGdW5jdGlvbnByaW50Q29kZXN1Y2NpbmN0dGVzdEFmdGVyRmFpbHVyZXN0ZXN0RGF0YU1lbWJlckFubm90YXRpb25zRGF0YVR5cGVfY29tcHV0ZWREYXRhRm9yRWFjaEZpbGVnbG9iYWxEYXRhY29tcHV0ZWREYXRhTWVtYmVyQW5ub3RhdGlvbnMoZGF0YTp7Z2xvYmFsOlRlc3REYXRhdGVzdEZpbGVVcmltZW1vcnlTb3VyY2VGaWxlc2V4cGVjdGVkTWFwc0NvbXBpbGVkRGF0YWFjdHVhbE1hcHNjb21wdXRlQW5ub3RhdGlvbnNhY3R1YWxNYXBjb21wdXRlRGlmZkFubm90YXRpb25zQWdhaW5zdHRoaXNNYXBpbmNsdWRlTWF0Y2hlc3RoaXNEYXRhZ2V0T2Zmc2V0RnJvbUlkRGF0YUludGVycHJldGVyU3RyaW5nRGF0YUludGVycHJldGVySWREYXRhX2NvbXBpbGVkRGF0YV9hY3R1YWxNYXBzYWN0dWFsQ29kZWRpZmZDb2RlZGF0YVZhbGlkYXRvcnVuZXhwZWN0ZWRNZXNzYWdlY2ZlTWFya2VyY2ZlZGFydDJqc01hcmtlcmFuYWx5emVyTWFya2Vyc2hhcmVkTWFya2Vyc3VzZUNvbG9yc2NvbG9yaXplTWVzc2FnZWNvbG9yaXplTWF0Y2hjb2xvcml6ZVNpbmdsZWNvbG9yaXplQWN0dWFsY29sb3JpemVFeHBlY3RlZGNvbG9yaXplRGVsaW1pdGVyY29sb3JpemVEaWZmY29sb3JpemVBbm5vdGF0aW9uY29tcHV0ZUV4cGVjdGVkTWFwbWFwS2V5c2ZpbGVBbm5vdGF0aW9uc05vIGFubm90YXRpb25zIGZvciBleHBlY3RlZFZhbHVlc2lkVmFsdWVFcnJvciBpbiB0ZXN0ICdEdXBsaWNhdGUgYW5ub3RhdGlvbnMgZm9yIGNvbXB1dGVUZXN0RGF0YXRlc3RGaWxlc3VwcG9ydGVkTWFya2Vyc2NyZWF0ZVVyaUZvckZpbGVOYW1lbWFpbi5kYXJ0dGVzdE5hbWVtYWluVGVzdEZpbGVhZGRpdGlvbmFsRmlsZXNsaXN0U3luY3JlY3Vyc2l2ZWFubm90YXRlZENvZGV0ZXN0TWFya2VyYWRkaXRpb25hbEZpbGVEYXRhbGliRmlsZU5hbWVsaWJFbnRpdHlsaWJGaWxlVXJpbGliQ29kZWFubm90YXRlZExpYkNvZGV3aXRoQW5ub3RhdGlvbnNjaGVja0NvZGVtb2RlTmFtZW1haW5GaWxlVXJpY29tcGlsZWREYXRhZmlsdGVyQWN0dWFsRGF0YWZhdGFsRXJyb3JzaGFzRmFpbHVyZW5lZWRlZERpZmZzY2hlY2tBY3R1YWxNYXBleHBlY3RlZE1hcGhhc0xvY2FsRmFpbHVyZWFjdHVhbFRleHRhY3R1YWxWYWx1ZVRleHRFWFRSQSAgREFUQSBmb3IgOgogb2JqZWN0ICAgOiBvYmplY3RUZXh0YWN0dWFsICAgOiBEYXRhIHdhcyBleHBlY3RlZCBmb3IgdGhlc2UgaWRzOiBVTkVYUEVDVEVEIGRldGFpbCAgOiBvYmplY3QgIDogZXhwZWN0ZWQ6IGFjdHVhbCAgOiBtaXNzaW5nSWRzY2hlY2tNaXNzaW5nTUlTU0lORyAtLWFubm90YXRpb25zIGRpZmYgW10tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLU1JU1NJTkcgaWRzOiBFcnJvcnMgZm91bmQucnVuVGVzdHNkYXRhRGlyc2hhcmRJbmRleG9uVGVzdHJ1blRlc3Qtdi1zc2hvdWxkQ29udGludWUtYS1wY29udGludWVkaGFzRmFpbHVyZXNyZWxhdGl2ZURpckRhdGEgZGlyOiB0ZXN0Q291bnQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tVGVzdDogTm8gZmlsZXMgd2VyZSB0ZXN0ZWQuQW5ub3RhdGlvbkFubm90YXRpb24obGluZU5vPSxjb2x1bW5Obz0sb2Zmc2V0PSx0ZXh0PUFubm90YXRlZENvZGVfbGluZVN0YXJ0c0B7Y29kZUJ1ZmZlcnN0YXJ0TWF0Y2htYXRjaEFzUHJlZml4ZW5kTWF0Y2hlc2FsbE1hdGNoZXNlbmRNYXRjaF9lbnN1cmVMaW5lU3RhcnRzdG9UZXh0X0xGX0NSYXRCcmFjZVN0YXJ0YnJhY2VFbmRjb21tZW50U3RhcnQvXCpjb21tZW50RW5kXCovXHMqc3BsaXRCeVByZWZpeGVzcHJlZml4U2V0ZG90UG9zYW5ub3RhdGlvblByZWZpeGFubm90YXRpb25UZXh0SWRLaW5kSWRLaW5kLm1lbWJlcklkS2luZC5jbHNJZEtpbmQubGlicmFyeUlkS2luZC5ub2RlSWRLaW5kLmludm9rZUlkS2luZC51cGRhdGVJZEtpbmQuaXRlcmF0b3JJZEtpbmQuY3VycmVudElkS2luZC5tb3ZlTmV4dElkS2luZC5pbXBsaWNpdEFzSWRLaW5kLnN0bXRJZEtpbmQuZXJyb3JpbXBsaWNpdEFzc3RtdElkVmFsdWVnbG9iYWxQcmVmaXhnbG9iYWwjbWVtYmVyUHJlZml4Y2xhc3NQcmVmaXhjbGFzczogbGlicmFyeTogaW52b2tlUHJlZml4aW52b2tlOiB1cGRhdGVQcmVmaXh1cGRhdGU6IGl0ZXJhdG9yUHJlZml4aXRlcmF0b3I6IGN1cnJlbnRQcmVmaXhjdXJyZW50OiBtb3ZlTmV4dFByZWZpeG1vdmVOZXh0OiBpbXBsaWNpdEFzUHJlZml4YXM6IHN0bXRQcmVmaXhzdG10OiBlcnJvclByZWZpeGVycm9yOiBpZFRvU3RyaW5nZWxlbWVudElkY2xhc3NJZFVuZXhwZWN0ZWQgaWQga2luZDogY29sb25Qb3NJbnZhbGlkIG1lbWJlciBpZDogJ0ludmFsaWQgY2xhc3MgaWQ6ICdccyooXG5ccyopK1xzKk1lbWJlcklkbWVtYmVyIG1lbWJlcjpDbGFzc0lkY2xhc3M6TGlicmFyeUlkbGlicmFyeSBsaWJyYXJ5Ok5vZGVJZG9mZnNldCBBY3R1YWxEYXRhX29mZnNldG9iamVjdCBgQWN0dWFsRGF0YShpZD0sdXJpPSxvYmplY3Q9RGF0YVJlZ2lzdHJ5cmVnaXN0ZXJWYWx1ZWV4aXN0aW5nRGF0YUR1cGxpY2F0ZSBpZCAsIG9iamVjdD1vYmplY3Q9RGlnZXN0SGFzaGJsb2NrU2l6ZWlubmVyU2lua291dGVyU2lua0htYWNfSG1hY1Npbmtfb3V0ZXJTaW5rX2lubmVyUmVzdWx0U2lua19pbm5lclNpbmtfaXNDbG9zZWRITUFDIGlzIGNsb3NlZGFkZFNsaWNlaXNMYXN0TUQ1X01ENVNpbmsxNzMyNTg0MTkzNDAyMzIzMzQxNzI1NjIzODMxMDJlbmRpYW51cGRhdGVIYXNoMzYxNDA5MDM2MDM5MDU0MDI3MTAzMjUwNDQxOTY2NDExODU0ODM5OTEyMDAwODA0MjYyODIxNzM1OTU1NDI0OTI2MTMxMzE3NzAwMzU0MTYyMzM2NTUyODc5NDI5NDkyNTIzMzIzMDQ1NjMxMzQxODA0NjAzNjgyNDI1NDYyNjE5NTI3OTI5NjUwMDYxMjM2NTM1MzI5NDEyOTE3MDc4NjMyMjU0NjU2NjQzOTIxMDY5OTk0MzU5MzQwODYwNTM2MzQ0ODg5NjEzODg5NDI5NDQ4MzI3NTE2MzYwNjQxMDc2MDMzMzUxMTYzNTMxNTAxMjg1MDI4NTgyOTQyNDM1NjM1MTIxNzM1MzI4NDczMjM2ODM1OTU2MjQyOTQ1ODg3MzgyMjcyMzkyODMzMTgzOTAzMDU2MjQyNTk2NTc3NDAyNzYzOTc1MjM2MTI3Mjg5MzM1MzQxMzk0Njk2NjQzMjAwMjM2NjU2MzkzNjQzMDA3NDM1NzI0NDUzMTczNjU0NjAyODA5Mzg3MzE1MTQ2MTMyOTk2Mjg2NDU0MDk2MzM2NDUyMTEyNjg5MTQxNTI4Nzg2MTIzOTE0MjM3NTMzMjQxMTcwMDQ4NTU3MTIzOTk5ODA2OTA0MjkzOTE1NzczMjI0MDA0NDQ5NzE4NzMzMTMzNTk0MjY0MzU1NTUyMjczNDc2ODkxNjEzMDkxNTE2NDk0MTQ5NDQ0MjI2MzE3NDc1NjkxNzM5NTE0ODE3NDVtZDVfbm9pc2Vfc2hpZnRBbW91bnRzU2hhMV9TaGExU2lua19leHRlbmRlZDMyODUzNzc1MjBuZXdBMTUxODUwMDI0OTE4NTk3NzUzOTMyNDAwOTU5NzA4MzM5NTQ2OTc4MnNoYTFTaGEyNTZfU2hhMjU2U2luazE3NzkwMzM3MDMzMTQ0MTM0Mjc3Mjc3MzQ4MDc2MjEzNTk4OTMxMTkyNjAwODIyOTI0MTU0MTQ1OTIyNV9yb3RyMzJfY2hfbWFqX2JzaWcwX2JzaWcxX3NzaWcwX3NzaWcxdGVtcDExMTE2MzUyNDA4MTg5OTQ0NzQ0MTMwNDkzMjM0NzEzOTIxMDA5NTczMTUwODk3MDk5MzI0NTM2MzU3NDgyODcwNzYzMjIxMzYyNDM4MTA4MDE0MjY4ODE5ODcxOTI1MDc4Mzg4MjE2MjA3ODIwNjI2MTQ4ODgxMDMzMjQ4MjIyNTgwMzgzNTM5MDQwMTQwMjIyMjQ3NzQxMjQ5MTUwMTIyMTU1NTA4MTY5MjE5OTYwNjQ5ODYyNTU0MjIwODgyMjgyMTgzNDM0OTI5NTI5OTY4MDgzMjEwMzEzNjcxMzMzNjU3MTg5MTM1ODQ1Mjg3MTExMjk0NzU3MzcyMTM5NjE4MjI5MTE2OTUxODM3MDAxOTg2NjYxMDUxMjE3NzAyNjM1MDI0NTY5NTYwMzcyNzMwNDg1OTIxMjgyMDMwMjQxMTMyNTk3MzA4MDAzMzQ1NzY0NzcxMzUxNjA2NTgxNzM2MDAzNTI4MDQ0MDk0NTcxOTA5MTMyMjgyMjIxODE1MzcwMDIwNjMxNzQ3ODczNzc5MTk1NTU2MjIyMjIwMjQxMDQ4MTUyMjI3NzMwNDUyMjM2MTg1MjQyNDI0Mjg0MzY0NzQyNzU2NzM0MTg3MzIwNDAzMTQ3OTMzMjkzMjUyOTh0ZW1wMnNoYTI1NkRpZ2VzdFNpbmtIYXNoU2lua19lbmRpYW5fY3VycmVudENodW5rX21heE1lc3NhZ2VMZW5ndGhJbkJ5dGVzMTEyNTg5OTkwNjg0MjYyM19sZW5ndGhJbkJ5dGVzX3BlbmRpbmdEYXRhY2h1bmtTaXplSW5Xb3Jkc0hhc2guYWRkKCkgY2FsbGVkIGFmdGVyIGNsb3NlKCkuX2l0ZXJhdGVfZmluYWxpemVEYXRhX2J5dGVEaWdlc3RieXRlRGlnZXN0bGVuZ3RoSW5CeXRlc2J5dGVEYXRhYXNCeXRlRGF0YXNldFVpbnQzMnBlbmRpbmdEYXRhQnl0ZXNwZW5kaW5nRGF0YUNodW5rc2dldFVpbnQzMmNvbnRlbnRzTGVuZ3RoZmluYWxpemVkTGVuZ3RoX3JvdW5kVXBIYXNoaW5nIGlzIHVuc3VwcG9ydGVkIGZvciBtZXNzYWdlcyB3aXRoIG1vcmUgdGhhbiAyXjUzIGJpdHMubGVuZ3RoSW5CaXRzaGlnaEJpdHNsb3dCaXRzbWFzazMyYml0c1BlckJ5dGVieXRlc1BlcldvcmRhZGQzMnJvdGwzMm1vZFNoaWZ0QWNjdW11bGF0b3JTaW5rX2V2ZW50c0Nhbid0IGFkZCB0byBhIGNsb3NlZCBzaW5rLkJ5dGVBY2N1bXVsYXRvclNpbmtjb252ZXJ0LmhleGhleEVuY29kZXJoZXhEZWNvZGVySGV4Q29kZWNoZXhjb252ZXJ0LnBlcmNlbnRwZXJjZW50RW5jb2RlcnBlcmNlbnREZWNvZGVyUGVyY2VudENvZGVjU3RyaW5nQWNjdW11bGF0b3JTaW5rY29udmVydC5oZXguZW5jb2RlckhleEVuY29kZXJfSGV4RW5jb2RlclNpbmtfY29udmVydGJ1ZmZlckluZGV4Ynl0ZU9ySW52YWxpZCBieXRlIF9jb2RlVW5pdEZvckRpZ2l0Y29udmVydC5oZXguZGVjb2RlckhleERlY29kZXJpc0V2ZW5JbnZhbGlkIGlucHV0IGxlbmd0aCwgbXVzdCBiZSBldmVuLl9IZXhEZWNvZGVyU2lua19sYXN0RGlnaXRfY2xvc2VieXRlc1N0YXJ0aGV4UGFpcnNhc1V0ZjhTaW5rSW5wdXQgZW5kZWQgd2l0aCBpbmNvbXBsZXRlIGVuY29kZWQgYnl0ZS5fSGV4RGVjb2RlckJ5dGVTaW5rX2RlY29kZXNvdXJjZVN0YXJ0c291cmNlRW5kZGVzdGluYXRpb25TdGFydGRlc3RpbmF0aW9uSW5kZXhmaXJzdERpZ2l0c2Vjb25kRGlnaXRjb252ZXJ0LnBlcmNlbnQuZW5jb2RlclBlcmNlbnRFbmNvZGVyX1BlcmNlbnRFbmNvZGVyU2lua2NvbnZlcnQucGVyY2VudC5kZWNvZGVyUGVyY2VudERlY29kZXJsYXN0RGlnaXRfUGVyY2VudERlY29kZXJTaW5rX1BlcmNlbnREZWNvZGVyQnl0ZVNpbmtfbGFzdFBlcmNlbnRjb2RlVW5pdE9yc2xpY2VTdGFydF9jaGVja0ZvckludmFsaWRDb2RlVW5pdE5vbi1BU0NJSSBjb2RlIHVuaXQgdHlwZWRfZGF0YS50eXBlZF9idWZmZXJzTGlzdEJhc2VfVHlwZWREYXRhQnVmZmVySU5JVElBTF9MRU5HVEhfdHlwZWRCdWZmZXJfZGVmYXVsdFZhbHVlbmV3QnVmZmVyX2NyZWF0ZUJ1ZmZlcl9jcmVhdGVCaWdnZXJCdWZmZXJfYWRkQWxsX2luc2VydEtub3duTGVuZ3Rod3JpdGVJbmRleFRvbyBmZXcgZWxlbWVudHN2YWx1ZXNMZW5ndGhfZW5zdXJlQ2FwYWNpdHlyZXF1aXJlZENhcGFjaXR5X3NldFJhbmdlZWxlbWVudFNpemVJbkJ5dGVzX0ludEJ1ZmZlcl9GbG9hdEJ1ZmZlclVpbnQ4QnVmZmVyaW5pdGlhbExlbmd0aEludDhCdWZmZXJVaW50OENsYW1wZWRCdWZmZXJVaW50MTZCdWZmZXJJbnQxNkJ1ZmZlclVpbnQzMkJ1ZmZlckludDMyQnVmZmVyVWludDY0QnVmZmVySW50NjRCdWZmZXJGbG9hdDMyQnVmZmVyRmxvYXQ2NEJ1ZmZlckludDMyeDRCdWZmZXJGbG9hdDMyeDRCdWZmZXJjb252ZXJ0LnV0aWxzZGlnaXRGb3JDb2RlVW5pdEludmFsaWQgaGV4YWRlY2ltYWwgY29kZSB1bml0IGRhcnQuYXN5bmNWTUxpYnJhcnlIb29rc0Nhc3RTdHJlYW1DYXN0U3RyZWFtVHJhbnNmb3JtZXJFbXB0eUl0ZXJhdG9ySXRlcmFibGVFbGVtZW50RXJyb3JwcmludFRvWm9uZXByaW50VG9Db25zb2xlU2luY2Vhc3luY19lcnJvci5kYXJ0YnJvYWRjYXN0X3N0cmVhbV9jb250cm9sbGVyLmRhcnRkZWZlcnJlZF9sb2FkLmRhcnRmdXR1cmUuZGFydGZ1dHVyZV9pbXBsLmRhcnRzY2hlZHVsZV9taWNyb3Rhc2suZGFydHN0cmVhbS5kYXJ0c3RyZWFtX2NvbnRyb2xsZXIuZGFydHN0cmVhbV9pbXBsLmRhcnRzdHJlYW1fcGlwZS5kYXJ0c3RyZWFtX3RyYW5zZm9ybWVycy5kYXJ0dGltZXIuZGFydHpvbmUuZGFydF9TY2hlZHVsZUltbWVkaWF0ZUNsb3N1cmVfVGltZXJGYWN0b3J5Q2xvc3VyZXJlcGVhdGluZ19GdXR1cmVPblZhbHVlX0Z1dHVyZUVycm9yVGVzdF9GdXR1cmVBY3Rpb25fQXN5bmNDYWxsYmFja19UaW1lckNhbGxiYWNrQ29udHJvbGxlckNhbGxiYWNrQ29udHJvbGxlckNhbmNlbENhbGxiYWNrX05vdGlmaWNhdGlvbkhhbmRsZXJfRXZlbnRHZW5lcmF0b3JfRGF0YUhhbmRsZXJfRG9uZUhhbmRsZXJfQnJvYWRjYXN0Q2FsbGJhY2tfRXJyb3JDYWxsYmFja19QcmVkaWNhdGVfVHJhbnNmb3JtYXRpb25fRXJyb3JUZXN0X0VxdWFsaXR5X1NpbmtNYXBwZXJfVHJhbnNmb3JtRGF0YUhhbmRsZXJfVHJhbnNmb3JtRXJyb3JIYW5kbGVyX1RyYW5zZm9ybURvbmVIYW5kbGVyX1N1YnNjcmlwdGlvblRyYW5zZm9ybWVyY2FuY2VsT25FcnJvclpvbmVDYWxsYmFja1pvbmVVbmFyeUNhbGxiYWNrWm9uZUJpbmFyeUNhbGxiYWNrSGFuZGxlVW5jYXVnaHRFcnJvckhhbmRsZXJSdW5IYW5kbGVyUnVuVW5hcnlIYW5kbGVyUnVuQmluYXJ5SGFuZGxlclJlZ2lzdGVyQ2FsbGJhY2tIYW5kbGVyUmVnaXN0ZXJVbmFyeUNhbGxiYWNrSGFuZGxlclJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2tIYW5kbGVyRXJyb3JDYWxsYmFja0hhbmRsZXJTY2hlZHVsZU1pY3JvdGFza0hhbmRsZXJDcmVhdGVUaW1lckhhbmRsZXJDcmVhdGVQZXJpb2RpY1RpbWVySGFuZGxlclByaW50SGFuZGxlckZvcmtIYW5kbGVyc3BlY2lmaWNhdGlvbl9mdXR1cmVpc1N5bmNjb21wbGV0ZV9hc3luY0NvbXBsZXRlX2NvbXBsZXRlV2l0aFZhbHVlX2NvbXBsZXRlRXJyb3JfYXN5bmNDb21wbGV0ZUVycm9yaXNDb21wbGV0ZWRfbWF5Q29tcGxldGV2bTplbnRyeS1wb2ludGlzQWRkaW5nb25MaXN0ZW5SZWNlaXZlZGlzU2NoZWR1bGVkaXNTdXNwZW5kZWRBdFlpZWxkY2FuY2VsbGF0aW9uRnV0dXJlb25MaXN0ZW5vblJlc3VtZW9uQ2FuY2VsX2dlbmVyYXRvcnJ1bkJvZHlzY2hlZHVsZUdlbmVyYXRvcmlzUGF1c2VkeWllbGQgYmVmb3JlIHN0cmVhbSBpcyBsaXN0ZW5lZCB0b3VuZXhwZWN0ZWQgeWllbGRoYXNMaXN0ZW5lcndoZW5Eb25lQWRkaW5nX1NjaGVkdWxlSW1tZWRpYXRlX1RpbWVyRmFjdG9yeV9mYWN0b3J5X0Jyb2FkY2FzdFN0cmVhbWlzQnJvYWRjYXN0X0Jyb2FkY2FzdFN1YnNjcmlwdGlvbl9TVEFURV9FVkVOVF9JRF9TVEFURV9GSVJJTkdfU1RBVEVfUkVNT1ZFX0FGVEVSX0ZJUklOR19ldmVudFN0YXRlX25leHRfcHJldmlvdXNvbkRhdGFfZXhwZWN0c0V2ZW50ZXZlbnRJZF90b2dnbGVFdmVudElkX2lzRmlyaW5nX3NldFJlbW92ZUFmdGVyRmlyaW5nX3JlbW92ZUFmdGVyRmlyaW5nX29uUGF1c2Vfb25SZXN1bWVfQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcl9TVEFURV9JTklUSUFMX1NUQVRFX0NMT1NFRF9TVEFURV9BRERTVFJFQU1fZmlyc3RTdWJzY3JpcHRpb25fbGFzdFN1YnNjcmlwdGlvbl9hZGRTdHJlYW1TdGF0ZV9kb25lRnV0dXJlb25QYXVzZUJyb2FkY2FzdCBzdHJlYW0gY29udHJvbGxlcnMgZG8gbm90IHN1cHBvcnQgcGF1c2UgY2FsbGJhY2tzb25QYXVzZUhhbmRsZXJvblJlc3VtZUhhbmRsZXJfaXNFbXB0eV9oYXNPbmVMaXN0ZW5lcl9pc0FkZGluZ1N0cmVhbV9tYXlBZGRFdmVudF9lbnN1cmVEb25lRnV0dXJlX2FkZExpc3RlbmVyb2xkTGFzdF9yZW1vdmVMaXN0ZW5lcl9jb250cm9sbGVyX3N1YnNjcmliZV9yZWNvcmRDYW5jZWxfY2FsbE9uQ2FuY2VsX3JlY29yZFBhdXNlX3JlY29yZFJlc3VtZV9hZGRFdmVudEVycm9yQ2Fubm90IGFkZCBuZXcgZXZlbnRzIGFmdGVyIGNhbGxpbmcgY2xvc2VDYW5ub3QgYWRkIG5ldyBldmVudHMgd2hpbGUgZG9pbmcgYW4gYWRkU3RyZWFtX3NlbmREYXRhZXJyb3JDYWxsYmFja19zZW5kRXJyb3Jkb25lRnV0dXJlX3NlbmREb25lYWRkU3RyZWFtRnV0dXJlX2FkZEVycm9yYWRkU3RhdGVfZm9yRWFjaExpc3RlbmVyQ2Fubm90IGZpcmUgbmV3IGV2ZW50LiBDb250cm9sbGVyIGlzIGFscmVhZHkgZmlyaW5nIGFuIGV2ZW50X1N5bmNCcm9hZGNhc3RTdHJlYW1Db250cm9sbGVyX0FzeW5jQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcl9hZGRQZW5kaW5nX0FzQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcl9oYXNQZW5kaW5nX2FkZFBlbmRpbmdFdmVudGhhbmRsZU5leHREZWZlcnJlZExpYnJhcnlEYXJ0IHNkayB2LiAxLjhEZWZlcnJlZExvYWRFeGNlcHRpb25EZWZlcnJlZExvYWRFeGNlcHRpb246ICdGdXR1cmVPciBjYW4ndCBiZSBpbnN0YW50aWF0ZWRfbnVsbEZ1dHVyZV9mYWxzZUZ1dHVyZWNvbXB1dGF0aW9uX2NvbXBsZXRlbWljcm90YXNrZGVsYXllZHdhaXRmdXR1cmVzZWFnZXJFcnJvcmhhbmRsZUVycm9ydGhlRXJyb3J0aGVTdGFja1RyYWNlb25WYWx1ZV9rVHJ1ZWRvV2hpbGVkb25lU2lnbmFsbmV4dEl0ZXJhdGlvbmJpbmRVbmFyeUNhbGxiYWNrR3VhcmRlZGtlZXBHb2luZ2FzU3RyZWFtdGltZW91dHRpbWVMaW1pdG9uVGltZW91dFRpbWVvdXRFeGNlcHRpb25UaW1lb3V0RXhjZXB0aW9uIGFmdGVyIF9Db21wbGV0ZXJGdXR1cmUgYWxyZWFkeSBjb21wbGV0ZWRfQXN5bmNDb21wbGV0ZXJfU3luY0NvbXBsZXRlcl9GdXR1cmVMaXN0ZW5lcm1hc2tFcnJvcm1hc2tUZXN0RXJyb3JtYXNrV2hlbmNvbXBsZXRlc3RhdGVDaGFpbnN0YXRlVGhlbnN0YXRlVGhlbk9uZXJyb3JzdGF0ZUNhdGNoZXJyb3JzdGF0ZUNhdGNoZXJyb3JUZXN0c3RhdGVXaGVuY29tcGxldGVtYXNrVHlwZXN0YXRlSXNBd2FpdF9uZXh0TGlzdGVuZXJ0aGVuQXdhaXRfem9uZWhhbmRsZXNWYWx1ZWhhbmRsZXNFcnJvcmhhc0Vycm9yVGVzdGhhbmRsZXNDb21wbGV0ZWlzQXdhaXRfb25WYWx1ZV9vbkVycm9yX2Vycm9yVGVzdF93aGVuQ29tcGxldGVBY3Rpb25oYXNFcnJvckNhbGxiYWNraGFuZGxlVmFsdWVzb3VyY2VSZXN1bHRtYXRjaGVzRXJyb3JUZXN0YXN5bmNFcnJvcmhhbmRsZVdoZW5Db21wbGV0ZV9hd2FpdGVyX3N0YXRlSW5jb21wbGV0ZV9zdGF0ZVBlbmRpbmdDb21wbGV0ZV9zdGF0ZUNoYWluZWRfc3RhdGVWYWx1ZV9zdGF0ZUVycm9yX3Jlc3VsdE9yTGlzdGVuZXJzaW1tZWRpYXRlem9uZVZhbHVlX3NldFZhbHVlaW1tZWRpYXRlRXJyb3JfaXNQZW5kaW5nQ29tcGxldGVfbWF5QWRkTGlzdGVuZXJfaXNDaGFpbmVkX2lzQ29tcGxldGVfaGFzRXJyb3JfY29udGludWF0aW9uRnVuY3Rpb25zX3NldENoYWluZWRjdXJyZW50Wm9uZXJlZ2lzdGVyVW5hcnlDYWxsYmFja190aGVuQXdhaXRyZWdpc3RlckNhbGxiYWNrX3NldFBlbmRpbmdDb21wbGV0ZV9jbGVhclBlbmRpbmdDb21wbGV0ZV9lcnJvcl9jaGFpblNvdXJjZV9zZXRFcnJvck9iamVjdF9zZXRFcnJvcl9jbG9uZVJlc3VsdHNjaGVkdWxlTWljcm90YXNrX3ByZXBlbmRMaXN0ZW5lcnNleGlzdGluZ0xpc3RlbmVyc19yZXZlcnNlTGlzdGVuZXJzX3JlbW92ZUxpc3RlbmVyc19jaGFpbkZvcmVpZ25GdXR1cmVfY2hhaW5Db3JlRnV0dXJlX2NoYWluRnV0dXJlX3Byb3BhZ2F0ZVRvTGlzdGVuZXJzaGFzRXJyb3JoYW5kbGVVbmNhdWdodEVycm9ybGlzdGVuZXJIYXNFcnJvcmxpc3RlbmVyVmFsdWVPckVycm9yaW5TYW1lRXJyb3Jab25lb2xkWm9uZWhhbmRsZVdoZW5Db21wbGV0ZUNhbGxiYWNrY29tcGxldGVSZXN1bHRvcmlnaW5hbFNvdXJjZWhhbmRsZVZhbHVlQ2FsbGJhY2tjaGFpblNvdXJjZXRpbWVyRnV0dXJlIG5vdCBjb21wbGV0ZWRfQXN5bmNDYWxsYmFja0VudHJ5X0FzeW5jUnVuX3NjaGVkdWxlSW1tZWRpYXRlTWljcm90YXNrcyBhcmUgbm90IHN1cHBvcnRlZDIuNV9jbG9zZVVuY2hlY2tlZGZyb21GdXR1cmVmcm9tRnV0dXJlc2Zyb21JdGVyYWJsZXBlcmlvZGljY29tcHV0YXRpb25Db3VudHdhdGNoc2VuZEV2ZW50c3RhcnRQZXJpb2RpY1RpbWVyZXZlbnRUcmFuc2Zvcm1lZG1hcFNpbmtjYXN0RnJvbWFzQnJvYWRjYXN0U3RyZWFtYXN5bmNNYXBhc3luY0V4cGFuZG5ld1N0cmVhbXBpcGVzdHJlYW1Db25zdW1lcnN0cmVhbVRyYW5zZm9ybWVyc2VlbkZpcnN0bmVlZGxlZHJhaW5mdXR1cmVWYWx1ZWFzRnV0dXJlZGlzdGluY3Rmb3VuZFJlc3VsdGVsZW1lbnRJbmRleGNyZWF0ZVRpbWVyTm8gc3RyZWFtIGV2ZW50cmVnaXN0ZXJlZE9uVGltZW91dHJ1blVuYXJ5R3VhcmRlZFN0cmVhbVN1YnNjcmlwdGlvbmhhbmRsZURhdGFoYW5kbGVEb25lcmVzdW1lU2lnbmFsU3RyZWFtVmlld19zdHJlYW1TdHJlYW1Db25zdW1lclN0cmVhbVNpbmtTdHJlYW1UcmFuc2Zvcm1lciN0eXBlQXJnMWZyb21IYW5kbGVyc2Zyb21CaW5kMi4xU1NTVFRTVFRSU1JUU3RyZWFtVHJhbnNmb3JtZXJCYXNlX0NvbnRyb2xsZXJFdmVudFNpbmtXcmFwcGVyU3RyZWFtQ29udHJvbGxlcmJyb2FkY2FzdG9uTGlzdGVuSGFuZGxlcm9uQ2FuY2VsSGFuZGxlclN5bmNocm9ub3VzU3RyZWFtQ29udHJvbGxlcl9TdHJlYW1Db250cm9sbGVyTGlmZWN5Y2xlX1N0cmVhbUNvbnRyb2xsZXJCYXNlX1N0cmVhbUNvbnRyb2xsZXJfU1RBVEVfU1VCU0NSSUJFRF9TVEFURV9DQU5DRUxFRF9TVEFURV9TVUJTQ1JJUFRJT05fTUFTS192YXJEYXRhX2lzQ2FuY2VsZWRfaXNJbml0aWFsU3RhdGVfaXNJbnB1dFBhdXNlZF9wZW5kaW5nRXZlbnRzdmFyRGF0YV9lbnN1cmVQZW5kaW5nRXZlbnRzX2JhZEV2ZW50U3RhdGVDYW5ub3QgYWRkIGV2ZW50IGFmdGVyIGNsb3NpbmdDYW5ub3QgYWRkIGV2ZW50IHdoaWxlIGFkZGluZyBhIHN0cmVhbVN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIGxpc3RlbmVkIHRvLnBlbmRpbmdFdmVudHNfc2V0UGVuZGluZ0V2ZW50c19ndWFyZENhbGxiYWNrX1N5bmNTdHJlYW1Db250cm9sbGVyRGlzcGF0Y2hfQXN5bmNTdHJlYW1Db250cm9sbGVyRGlzcGF0Y2hfQXN5bmNTdHJlYW1Db250cm9sbGVyX1N5bmNTdHJlYW1Db250cm9sbGVyX2NyZWF0ZVN1YnNjcmlwdGlvbl9Db250cm9sbGVyU3Vic2NyaXB0aW9uX29uQ2FuY2VsX1N0cmVhbVNpbmtXcmFwcGVyX0FkZFN0cmVhbVN0YXRlYWRkU3Vic2NyaXB0aW9ubWFrZUVycm9ySGFuZGxlcl9TdHJlYW1Db250cm9sbGVyQWRkU3RyZWFtU3RhdGVfRXZlbnRTaW5rX0V2ZW50RGlzcGF0Y2hfQnVmZmVyaW5nU3RyZWFtU3Vic2NyaXB0aW9uX1NUQVRFX0NBTkNFTF9PTl9FUlJPUl9TVEFURV9JTlBVVF9QQVVTRURfU1RBVEVfV0FJVF9GT1JfQ0FOQ0VMX1NUQVRFX0lOX0NBTExCQUNLX1NUQVRFX0hBU19QRU5ESU5HX1NUQVRFX1BBVVNFX0NPVU5UX29uRGF0YV9vbkRvbmVfY2FuY2VsRnV0dXJlc2NoZWR1bGVyZWdpc3RlckJpbmFyeUNhbGxiYWNraGFuZGxlRXJyb3IgY2FsbGJhY2sgbXVzdCB0YWtlIGVpdGhlciBhbiBPYmplY3QgKHRoZSBlcnJvciksIG9yIGJvdGggYW4gT2JqZWN0ICh0aGUgZXJyb3IpIGFuZCBhIFN0YWNrVHJhY2Uud2FzUGF1c2VkX2lzUGF1c2Vkd2FzSW5wdXRQYXVzZWRjYW5jZWxTY2hlZHVsZV9pbkNhbGxiYWNrX2RlY3JlbWVudFBhdXNlQ291bnRfbWF5UmVzdW1lSW5wdXRfY2FuY2VsY2FuY2VsRnV0dXJlX3dhaXRzRm9yQ2FuY2VsX2NhbkZpcmVfY2FuY2VsT25FcnJvcnBlbmRpbmdfY2hlY2tTdGF0ZXNlbmRFcnJvcnJ1bkJpbmFyeUd1YXJkZWRzZW5kRG9uZXJ1bkd1YXJkZWRpc0lucHV0UGF1c2VkX1N0cmVhbUltcGxfb25MaXN0ZW5fR2VuZXJhdGVkU3RyZWFtSW1wbF9pc1VzZWRfSXRlcmFibGVQZW5kaW5nRXZlbnRzX2l0ZXJhdG9yZGlzcGF0Y2hObyBldmVudHMgcGVuZGluZy5fRGVsYXllZEV2ZW50cGVyZm9ybV9EZWxheWVkRGF0YV9EZWxheWVkRXJyb3JfRGVsYXllZERvbmVObyBldmVudHMgYWZ0ZXIgYSBkb25lLl9QZW5kaW5nRXZlbnRzX1NUQVRFX1VOU0NIRURVTEVEX1NUQVRFX1NDSEVEVUxFRF9ldmVudFNjaGVkdWxlZF9TdHJlYW1JbXBsRXZlbnRzZmlyc3RQZW5kaW5nRXZlbnRsYXN0UGVuZGluZ0V2ZW50X0RvbmVTdHJlYW1TdWJzY3JpcHRpb25fRE9ORV9TRU5UX1NDSEVEVUxFRF9QQVVTRURfc2NoZWR1bGVfaXNTZW50X2lzU2NoZWR1bGVkX0FzQnJvYWRjYXN0U3RyZWFtX29uTGlzdGVuSGFuZGxlcl9vbkNhbmNlbEhhbmRsZXJzaHV0ZG93bl9jYW5jZWxTdWJzY3JpcHRpb25fcGF1c2VTdWJzY3JpcHRpb25fcmVzdW1lU3Vic2NyaXB0aW9uX2lzU3Vic2NyaXB0aW9uUGF1c2VkX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbldyYXBwZXJDYW5ub3QgY2hhbmdlIGhhbmRsZXJzIG9mIGFzQnJvYWRjYXN0U3RyZWFtIHNvdXJjZSBzdWJzY3JpcHRpb24uX3N0YXRlRGF0YUFscmVhZHkgd2FpdGluZyBmb3IgbmV4dC5faW5pdGlhbGl6ZU9yRG9uZXN0YXRlRGF0YW1vdmVOZXh0RnV0dXJlX0VtcHR5U3RyZWFtX0ZvcndhcmRpbmdTdHJlYW1faGFuZGxlRGF0YV9oYW5kbGVFcnJvcl9oYW5kbGVEb25lX0ZvcndhcmRpbmdTdHJlYW1TdWJzY3JpcHRpb25fV2hlcmVTdHJlYW1fdGVzdGlucHV0RXZlbnRfTWFwU3RyZWFtX3RyYW5zZm9ybW91dHB1dEV2ZW50X0V4cGFuZFN0cmVhbV9leHBhbmRfSGFuZGxlRXJyb3JTdHJlYW1fVGFrZVN0cmVhbV9TdGF0ZVN0cmVhbVN1YnNjcmlwdGlvbl9zaGFyZWRTdGF0ZV9mbGFnX1Rha2VXaGlsZVN0cmVhbV9Ta2lwU3RyZWFtX1NraXBXaGlsZVN0cmVhbWhhc0ZhaWxlZF9EaXN0aW5jdFN0cmVhbV9TRU5USU5FTHByZXZpb3VzRXZlbnRpc0VxdWFsX0V2ZW50U2lua1dyYXBwZXJfU2lua1RyYW5zZm9ybWVyU3RyZWFtU3Vic2NyaXB0aW9uX3RyYW5zZm9ybWVyU2lua21hcHBlcmV2ZW50U2lua19pc1N1YnNjcmliZWRTdHJlYW0gaXMgYWxyZWFkeSBjbG9zZWRfU3RyZWFtU2lua1RyYW5zZm9ybWVyX3NpbmtNYXBwZXJfQm91bmRTaW5rU3RyZWFtX0hhbmRsZXJFdmVudFNpbmtUaGUgcHJvdmlkZWQgc2luayBtdXN0IG5vdCBiZSBudWxsLlNpbmsgaXMgY2xvc2VkX1N0cmVhbUhhbmRsZXJUcmFuc2Zvcm1lcm91dHB1dFNpbmtfU3RyZWFtQmluZFRyYW5zZm9ybWVyX1N0cmVhbVN1YnNjcmlwdGlvblRyYW5zZm9ybWVyX0JvdW5kU3Vic2NyaXB0aW9uU3RyZWFtVGltZXJiaW5kQ2FsbGJhY2tHdWFyZGVkY3JlYXRlUGVyaW9kaWNUaW1lcmJvdW5kQ2FsbGJhY2t0aWNrX2NyZWF0ZVRpbWVyVGltZXIgaW50ZXJmYWNlIG5vdCBzdXBwb3J0ZWQuX2NyZWF0ZVBlcmlvZGljVGltZXJBc3luY0Vycm9yX3N0YWNrVHJhY2Vfc3RhY2tUcmFjZT1fWm9uZUZ1bmN0aW9uZm9ya19ab25lU3BlY2lmaWNhdGlvbmVycm9yWm9uZW90aGVyWm9uZWFyZ3VtZW50MWFyZ3VtZW50MmJpbmRDYWxsYmFja2JpbmRVbmFyeUNhbGxiYWNrYmluZEJpbmFyeUNhbGxiYWNrYmluZEJpbmFyeUNhbGxiYWNrR3VhcmRlZF9lbnRlcl9sZWF2ZV9ab25lRGVsZWdhdGVfZGVsZWdhdGlvblRhcmdldGltcGxlbWVudGF0aW9uX2hhbmRsZVVuY2F1Z2h0RXJyb3JpbXBsWm9uZV9yZWdpc3RlckNhbGxiYWNrX3JlZ2lzdGVyVW5hcnlDYWxsYmFja19yZWdpc3RlckJpbmFyeUNhbGxiYWNrX2Vycm9yQ2FsbGJhY2tfc2NoZWR1bGVNaWNyb3Rhc2tfcHJpbnRfZm9ya19ab25lX0N1c3RvbVpvbmVfZGVsZWdhdGVDYWNoZXJlZ2lzdGVyZWRwYXJlbnREZWxlZ2F0ZWltcGxlbWVudGF0aW9uWm9uZV9Sb290Wm9uZV9yb290TWFwX3Jvb3REZWxlZ2F0ZV9sb2FkZWRMaWJyYXJpZXNfbmV4dENhbGxiYWNrX2xhc3RDYWxsYmFja19sYXN0UHJpb3JpdHlDYWxsYmFja19pc0luQ2FsbGJhY2tMb29wX3Jvb3Rab25lX2ZhdGFsRGFydEFzeW5jX2ZhdGFsdGhlbkNhbGxiYWNrYXdhaXRlclN0YWNrVHJhY2VfYXN5bmNTdGFja1RyYWNlSGVscGVyYXN5bmNfb3BfY2xlYXJBc3luY1RocmVhZFN0YWNrVHJhY2VTdGFja1RyYWNlX2NsZWFyQXN5bmNUaHJlYWRTdGFja1RyYWNlX3NldEFzeW5jVGhyZWFkU3RhY2tUcmFjZVN0YWNrVHJhY2Vfc2V0QXN5bmNUaHJlYWRTdGFja1RyYWNlX21vdmVOZXh0RGVidWdnZXJTdGVwQ2hlY2tBc3luY1N0YXJNb3ZlTmV4dF9kZWJ1Z2dlclN0ZXBDaGVja19zZXRTY2hlZHVsZUltbWVkaWF0ZUNsb3N1cmVfZW5zdXJlU2NoZWR1bGVJbW1lZGlhdGVfaW52b2tlRXJyb3JIYW5kbGVydW5hcnlFcnJvckhhbmRsZXJfY29tcGxldGVXaXRoRXJyb3JDYWxsYmFja19hc3luY0NvbXBsZXRlV2l0aEVycm9yQ2FsbGJhY2tfbm9uTnVsbEVycm9yX3JlZ2lzdGVyRXJyb3JIYW5kbGVyRXJyb3IgaGFuZGxlciBtdXN0IGFjY2VwdCBvbmUgT2JqZWN0IG9yIG9uZSBPYmplY3QgYW5kIGEgU3RhY2tUcmFjZSBhcyBhcmd1bWVudHMsIGFuZCByZXR1cm4gYSBhIHZhbGlkIHJlc3VsdF9taWNyb3Rhc2tMb29wX3N0YXJ0TWljcm90YXNrTG9vcF9zY2hlZHVsZUFzeW5jQ2FsbGJhY2tuZXdFbnRyeV9zY2hlZHVsZVByaW9yaXR5QXN5bmNDYWxsYmFja19ydW5HdWFyZGVkbm90aWZpY2F0aW9uSGFuZGxlcl9udWxsRGF0YUhhbmRsZXJfbnVsbEVycm9ySGFuZGxlcl9udWxsRG9uZUhhbmRsZXJfcnVuVXNlckNvZGVvblN1Y2Nlc3NfY2FuY2VsQW5kRXJyb3JfY2FuY2VsQW5kRXJyb3JXaXRoUmVwbGFjZW1lbnRfY2FuY2VsQW5kRXJyb3JDbG9zdXJlX2NhbmNlbEFuZFZhbHVlX2FkZEVycm9yV2l0aFJlcGxhY2VtZW50X3BhcmVudERlbGVnYXRlX3Jvb3RIYW5kbGVVbmNhdWdodEVycm9yX3JldGhyb3dBc3luY19yZXRocm93X3Jvb3RSdW5fcm9vdFJ1blVuYXJ5X3Jvb3RSdW5CaW5hcnlfcm9vdFJlZ2lzdGVyQ2FsbGJhY2tfcm9vdFJlZ2lzdGVyVW5hcnlDYWxsYmFja19yb290UmVnaXN0ZXJCaW5hcnlDYWxsYmFja19yb290RXJyb3JDYWxsYmFja19yb290U2NoZWR1bGVNaWNyb3Rhc2toYXNFcnJvckhhbmRsZXJfcm9vdENyZWF0ZVRpbWVyX3Jvb3RDcmVhdGVQZXJpb2RpY1RpbWVyX3Jvb3RQcmludF9wcmludFRvWm9uZV9yb290Rm9ya1pvbmVTcGVjaWZpY2F0aW9ucyBtdXN0IGJlIGluc3RhbnRpYXRlZCB3aXRoIHRoZSBwcm92aWRlZCBjb25zdHJ1Y3Rvci52YWx1ZU1hcHVuYXJ5T25FcnJvcmJpbmFyeU9uRXJyb3JvbkVycm9yIGNhbGxiYWNrIG11c3QgdGFrZSBlaXRoZXIgYW4gT2JqZWN0IF9ydW5ab25lZGRhcnQuY29sbGVjdGlvbmNvbGxlY3Rpb25zLmRhcnRoYXNoX21hcC5kYXJ0aGFzaF9zZXQuZGFydGl0ZXJhYmxlLmRhcnRpdGVyYXRvci5kYXJ0bGlua2VkX2hhc2hfbWFwLmRhcnRsaW5rZWRfaGFzaF9zZXQuZGFydGxpbmtlZF9saXN0LmRhcnRsaXN0LmRhcnRtYXBzLmRhcnRxdWV1ZS5kYXJ0c2V0LmRhcnRzcGxheV90cmVlLmRhcnRfSGFzaGVyX0hhc2hNYXBfZWxlbWVudENvdW50X2J1Y2tldHNfbW9kaWZpY2F0aW9uQ291bnRidWNrZXRzX2FkZEVudHJ5c3RhbXBfcmVtb3ZlRW50cnlwcmV2aW91c0luQnVja2V0YnVja2V0SW5kZXhuZXdFbGVtZW50c19yZXNpemVvbGRCdWNrZXRzbmV3QnVja2V0c19uZXdLZXlTZXRfQ3VzdG9tSGFzaE1hcF92YWxpZEtleXZhbGlkS2V5X0lkZW50aXR5SGFzaE1hcF9IYXNoTWFwRW50cnlfSGFzaE1hcEl0ZXJhYmxlX0hhc2hNYXBLZXlJdGVyYWJsZV9IYXNoTWFwVmFsdWVJdGVyYWJsZV9IYXNoTWFwSXRlcmF0b3Jfc3RhbXBfZW50cnlfSGFzaE1hcEtleUl0ZXJhdG9yX0hhc2hNYXBWYWx1ZUl0ZXJhdG9yX0hhc2hTZXRfbmV3RW1wdHlfcmVtb3ZlX2ZpbHRlcldoZXJlcmVtb3ZlTWF0Y2hpbmdtb2RpZmljYXRpb25Db3VudHRlc3RSZXN1bHRfbmV3U2ltaWxhclNldF9JZGVudGl0eUhhc2hTZXRfQ3VzdG9tSGFzaFNldF9lcXVhbGl0eV9IYXNoU2V0RW50cnlfSGFzaFNldEl0ZXJhdG9yX0hhc2hGaWVsZEJhc2VfaGFzaE1hc2tfdXNlZERhdGFfZGVsZXRlZEtleXNkYXRhU2l6ZV9IYXNoVk1CYXNldm06ZXhhY3QtcmVzdWx0LXR5cGVkYXJ0OnR5cGVkX2RhdGEjX1VpbnQzMkxpc3RMaW5rZWRIYXNoTWFwX2dldEluZGV4TGlua2VkSGFzaE1hcF9zZXRJbmRleGRhcnQ6Y29yZSNfU21pTGlua2VkSGFzaE1hcF9nZXRIYXNoTWFza0xpbmtlZEhhc2hNYXBfc2V0SGFzaE1hc2tkYXJ0OmNvcmUjX0xpc3RMaW5rZWRIYXNoTWFwX2dldERhdGFMaW5rZWRIYXNoTWFwX3NldERhdGFMaW5rZWRIYXNoTWFwX2dldFVzZWREYXRhTGlua2VkSGFzaE1hcF9zZXRVc2VkRGF0YUxpbmtlZEhhc2hNYXBfZ2V0RGVsZXRlZEtleXNMaW5rZWRIYXNoTWFwX3NldERlbGV0ZWRLZXlzX0hhc2hCYXNlX0lOSVRJQUxfSU5ERVhfQklUU19JTklUSUFMX0lOREVYX1NJWkVfVU5VU0VEX1BBSVJfREVMRVRFRF9QQUlSX2luZGV4U2l6ZVRvSGFzaE1hc2tpbmRleFNpemVpbmRleEJpdHNfaGFzaFBhdHRlcm5mdWxsSGFzaGhhc2hNYXNrbWFza2VkSGFzaF9maXJzdFByb2Jlc2l6ZU1hc2tfbmV4dFByb2JlX2lzRGVsZXRlZGtleU9yVmFsdWVfc2V0RGVsZXRlZEF0X2NoZWNrU3VtX2lzTW9kaWZpZWRTaW5jZW9sZERhdGFvbGRDaGVja1N1bV9PcGVyYXRvckVxdWFsc0FuZEhhc2hDb2RlX0lkZW50aWNhbEFuZElkZW50aXR5SGFzaENvZGVfX0ludGVybmFsTGlua2VkSGFzaE1hcCZfSGFzaFZNQmFzZSZNYXBNaXhpbktleSBub3QgaW4gbWFwLm5ld0VudHJpZXNfX0ludGVybmFsTGlua2VkSGFzaE1hcCZfSGFzaFZNQmFzZSZNYXBNaXhpbiZfTGlua2VkSGFzaE1hcE1peGluX3JlaGFzaF9pbml0b2xkVXNlZF9yZWdlbmVyYXRlSW5kZXh0bXBVc2VkX2luc2VydGhhc2hQYXR0ZXJuX2ZpbmRWYWx1ZU9ySW5zZXJ0UG9pbnRtYXhFbnRyaWVzZmlyc3REZWxldGVkX2dldFZhbHVlT3JEYXRha2l2aV9fSW50ZXJuYWxMaW5rZWRIYXNoTWFwJl9IYXNoVk1CYXNlJk1hcE1peGluJl9MaW5rZWRIYXNoTWFwTWl4aW4mX0hhc2hCYXNlX19JbnRlcm5hbExpbmtlZEhhc2hNYXAmX0hhc2hWTUJhc2UmTWFwTWl4aW4mX0xpbmtlZEhhc2hNYXBNaXhpbiZfSGFzaEJhc2UmX09wZXJhdG9yRXF1YWxzQW5kSGFzaENvZGVfSW50ZXJuYWxMaW5rZWRIYXNoTWFwX0xpbmtlZEhhc2hNYXBNaXhpbl9fQ29tcGFjdExpbmtlZElkZW50aXR5SGFzaE1hcCZfSGFzaEZpZWxkQmFzZSZNYXBNaXhpbl9fQ29tcGFjdExpbmtlZElkZW50aXR5SGFzaE1hcCZfSGFzaEZpZWxkQmFzZSZNYXBNaXhpbiZfTGlua2VkSGFzaE1hcE1peGluX19Db21wYWN0TGlua2VkSWRlbnRpdHlIYXNoTWFwJl9IYXNoRmllbGRCYXNlJk1hcE1peGluJl9MaW5rZWRIYXNoTWFwTWl4aW4mX0hhc2hCYXNlX19Db21wYWN0TGlua2VkSWRlbnRpdHlIYXNoTWFwJl9IYXNoRmllbGRCYXNlJk1hcE1peGluJl9MaW5rZWRIYXNoTWFwTWl4aW4mX0hhc2hCYXNlJl9JZGVudGljYWxBbmRJZGVudGl0eUhhc2hDb2RlX0NvbXBhY3RMaW5rZWRJZGVudGl0eUhhc2hNYXBfX0NvbXBhY3RMaW5rZWRDdXN0b21IYXNoTWFwJl9IYXNoRmllbGRCYXNlJk1hcE1peGluX19Db21wYWN0TGlua2VkQ3VzdG9tSGFzaE1hcCZfSGFzaEZpZWxkQmFzZSZNYXBNaXhpbiZfTGlua2VkSGFzaE1hcE1peGluX19Db21wYWN0TGlua2VkQ3VzdG9tSGFzaE1hcCZfSGFzaEZpZWxkQmFzZSZNYXBNaXhpbiZfTGlua2VkSGFzaE1hcE1peGluJl9IYXNoQmFzZV9Db21wYWN0TGlua2VkQ3VzdG9tSGFzaE1hcF9Db21wYWN0SXRlcmFibGVfbGVuX3N0ZXBfQ29tcGFjdEl0ZXJhdG9yX19Db21wYWN0TGlua2VkSGFzaFNldCZfSGFzaEZpZWxkQmFzZSZfSGFzaEJhc2VfX0NvbXBhY3RMaW5rZWRIYXNoU2V0Jl9IYXNoRmllbGRCYXNlJl9IYXNoQmFzZSZfT3BlcmF0b3JFcXVhbHNBbmRIYXNoQ29kZV9fQ29tcGFjdExpbmtlZEhhc2hTZXQmX0hhc2hGaWVsZEJhc2UmX0hhc2hCYXNlJl9PcGVyYXRvckVxdWFsc0FuZEhhc2hDb2RlJlNldE1peGluaXRmb3VuZE1hdGNoaW5nX0NvbXBhY3RMaW5rZWRIYXNoU2V0X2dldEtleU9yRGF0YV9fQ29tcGFjdExpbmtlZElkZW50aXR5SGFzaFNldCZfQ29tcGFjdExpbmtlZEhhc2hTZXQmX0lkZW50aWNhbEFuZElkZW50aXR5SGFzaENvZGVfQ29tcGFjdExpbmtlZElkZW50aXR5SGFzaFNldF9Db21wYWN0TGlua2VkQ3VzdG9tSGFzaFNldGZyb21JdGVyYWJsZXNmcm9tRW50cmllc0hhc2hTZXRpdGVyYWJsZVRvU2hvcnRTdHJpbmdsZWZ0RGVsaW1pdGVycmlnaHREZWxpbWl0ZXIoLi4uKWl0ZXJhYmxlVG9GdWxsU3RyaW5nSGFzTmV4dEl0ZXJhdG9yX0hBU19ORVhUX0FORF9ORVhUX0lOX0NVUlJFTlRfTk9fTkVYVF9OT1RfTU9WRURfWUVUX21vdmVObyBtb3JlIGVsZW1lbnRzTGlua2VkTGlzdF9maXJzdF9pbnNlcnRCZWZvcmV1cGRhdGVGaXJzdF91bmxpbmtUb28gbWFueSBlbGVtZW50c0xpbmtlZExpc3RFbnRyeSBpcyBhbHJlYWR5IGluIGEgTGlua2VkTGlzdF9MaW5rZWRMaXN0SXRlcmF0b3JfdmlzaXRlZEZpcnN0TGlua2VkTGlzdEVudHJ5dW5saW5raW5zZXJ0QWZ0ZXJpbnNlcnRCZWZvcmVfTGlzdEJhc2UmT2JqZWN0Jkxpc3RNaXhpbmxpc3RUb1N0cmluZ21hcFRvU3RyaW5nX2lkX2ZpbGxNYXBXaXRoTWFwcGVkSXRlcmFibGVfZmlsbE1hcFdpdGhJdGVyYWJsZXNrZXlJdGVyYXRvcnZhbHVlSXRlcmF0b3JoYXNOZXh0S2V5aGFzTmV4dFZhbHVlSXRlcmFibGVzIGRvIG5vdCBoYXZlIHNhbWUgbGVuZ3RoLk1hcE1peGluVW5tb2RpZmlhYmxlTWFwQmFzZUNhbm5vdCBtb2RpZnkgdW5tb2RpZmlhYmxlIG1hcF9NYXBCYXNlVmFsdWVJdGVyYWJsZV9NYXBCYXNlVmFsdWVJdGVyYXRvcl9Vbm1vZGlmaWFibGVNYXBNaXhpbk1hcFZpZXdfVW5tb2RpZmlhYmxlTWFwVmlldyZNYXBWaWV3Jl9Vbm1vZGlmaWFibGVNYXBNaXhpbl9Eb3VibGVMaW5rX3ByZXZpb3VzTGlua19uZXh0TGlua0RvdWJsZUxpbmtlZFF1ZXVlRW50cnlwcmV2aW91c0VudHJ5bmV4dEVudHJ5X0RvdWJsZUxpbmtlZFF1ZXVlRW50cnlfYXNOb25TZW50aW5lbEVudHJ5X2FwcGVuZF9wcmVwZW5kX0RvdWJsZUxpbmtlZFF1ZXVlRWxlbWVudF9Eb3VibGVMaW5rZWRRdWV1ZVNlbnRpbmVsRG91YmxlTGlua2VkUXVldWVfc2VudGluZWxsYXN0RW50cnlmaXJzdEVudHJ5Zm9yRWFjaEVudHJ5X0RvdWJsZUxpbmtlZFF1ZXVlSXRlcmF0b3JfbmV4dEVudHJ5ZWxlbWVudEVudHJ5TGlzdFF1ZXVlX2NoZWNrTW9kaWZpY2F0aW9uZXhwZWN0ZWRNb2RpZmljYXRpb25Db3VudHN0YXJ0RGlzdGFuY2VlbmREaXN0YW5jZXByZXZPZmZzZXRfTGlzdFF1ZXVlSXRlcmF0b3JfcG9zaXRpb25TZXRNaXhpbl9TZXRCYXNlJk9iamVjdCZTZXRNaXhpbnNldFRvU3RyaW5nX1NldEJhc2VDYW5ub3QgY2hhbmdlIHVubW9kaWZpYWJsZSBzZXRfU3BsYXlUcmVlTm9kZV9TcGxheVRyZWVNYXBOb2RlX1NwbGF5VHJlZV9zcGxheUNvdW50X2R1bW15X2NvbXBhcmF0b3JfY29tcGFyZV9zcGxheV9zcGxheU1pbl9zcGxheU1heF9hZGROZXdSb290X2xhc3RfY2xlYXJfVHlwZVRlc3RfU3BsYXlUcmVlTWFwJl9TcGxheVRyZWUmTWFwTWl4aW5TcGxheVRyZWVNYXBtYXBSb290c3BsYXlDb3VudGluaXRpYWxTcGxheUNvdW50Zmlyc3RLZXlsYXN0S2V5bGFzdEtleUJlZm9yZWZpcnN0S2V5QWZ0ZXJfU3BsYXlUcmVlSXRlcmF0b3JfdHJlZV93b3JrTGlzdF9jdXJyZW50Tm9kZV9maW5kTGVmdE1vc3REZXNjZW5kZW50c3RhcnRBdHN0YXJ0S2V5X2dldFZhbHVlX3JlYnVpbGRXb3JrTGlzdF9TcGxheVRyZWVLZXlJdGVyYWJsZV9jb3B5Tm9kZV9TcGxheVRyZWVWYWx1ZUl0ZXJhYmxlX1NwbGF5VHJlZUtleUl0ZXJhdG9yX1NwbGF5VHJlZVZhbHVlSXRlcmF0b3JtYXBOb2RlX1NwbGF5VHJlZU5vZGVJdGVyYXRvcl9TcGxheVRyZWVTZXQmX1NwbGF5VHJlZSZJdGVyYWJsZU1peGluX1NwbGF5VHJlZVNldCZfU3BsYXlUcmVlJkl0ZXJhYmxlTWl4aW4mU2V0TWl4aW5TcGxheVRyZWVTZXRfTU9ESUZJQ0FUSU9OX0NPVU5UX01BU0tfcmVoYXNoT2JqZWN0c19kZWZhdWx0RXF1YWxzX2RlZmF1bHRIYXNoQ29kZV9pdGVyYWJsZVBhcnRzVG9TdHJpbmdzcGVudWx0aW1hdGVTdHJpbmd1bHRpbWF0ZVN0cmluZ3BlbnVsdGltYXRldWx0aW1hdGVlbGlzaW9uX2R5bmFtaWNDb21wYXJlX2RlZmF1bHRDb21wYXJlZGFydC5jb252ZXJ0UE9XRVJTX09GX1RFTkNsYXNzSURDYXN0Q29udmVydGVycGFyc2VIZXhCeXRlYXNjaWkuZGFydGJhc2U2NC5kYXJ0Ynl0ZV9jb252ZXJzaW9uLmRhcnRjaHVua2VkX2NvbnZlcnNpb24uZGFydGNvZGVjLmRhcnRjb252ZXJ0ZXIuZGFydGVuY29kaW5nLmRhcnRodG1sX2VzY2FwZS5kYXJ0anNvbi5kYXJ0bGF0aW4xLmRhcnRsaW5lX3NwbGl0dGVyLmRhcnRzdHJpbmdfY29udmVyc2lvbi5kYXJ0dXRmLmRhcnRfSnNvblV0ZjhEZWNvZGVyX3Jldml2ZXJfYWxsb3dNYWxmb3JtZWRjaHVua0VuZF9Kc29uTGlzdGVuZXJoYW5kbGVTdHJpbmdoYW5kbGVOdW1iZXJoYW5kbGVCb29saGFuZGxlTnVsbGJlZ2luT2JqZWN0cHJvcGVydHlWYWx1ZWVuZE9iamVjdGJlZ2luQXJyYXlhcnJheUVsZW1lbnRlbmRBcnJheV9CdWlsZEpzb25MaXN0ZW5lcnB1c2hDb250YWluZXJwb3BDb250YWluZXJfUmV2aXZlckpzb25MaXN0ZW5lcnJldml2ZXJfTnVtYmVyQnVmZmVybWluQ2FwYWNpdHlrRGVmYXVsdE92ZXJoZWFkX2luaXRpYWxDYXBhY2l0eWVuc3VyZUNhcGFjaXR5cGFyc2VOdW1wYXJzZURvdWJsZV9DaHVua2VkSnNvblBhcnNlclRPUF9MRVZFTElOU0lERV9BUlJBWUlOU0lERV9PQkpFQ1RBRlRFUl9DT0xPTkFMTE9XX1NUUklOR19NQVNLQUxMT1dfVkFMVUVfTUFTS0FMTE9XX1ZBTFVFU1RSSU5HX09OTFlOT19WQUxVRVNOT05fRU1QVFlFTVBUWV9NQVNLU1RBVEVfSU5JVElBTFNUQVRFX0VORFNUQVRFX0FSUkFZX0VNUFRZU1RBVEVfQVJSQVlfVkFMVUVTVEFURV9BUlJBWV9DT01NQVNUQVRFX09CSkVDVF9FTVBUWVNUQVRFX09CSkVDVF9LRVlTVEFURV9PQkpFQ1RfQ09MT05TVEFURV9PQkpFQ1RfVkFMVUVTVEFURV9PQkpFQ1RfQ09NTUFWQUxVRV9SRUFEX0JJVFNCQUNLU1BBQ0VUQUJORVdMSU5FQ0FSUklBR0VfUkVUVVJORk9STV9GRUVEUVVPVEVERUNJTUFMUE9JTlRDSEFSXzBDSEFSXzlDSEFSX0VMQlJBQ0tFVFJCUkFDS0VUQ0hBUl9hQ0hBUl9iQ0hBUl9lQ0hBUl9mQ0hBUl9sQ0hBUl9uQ0hBUl9yQ0hBUl9zQ0hBUl90Q0hBUl91Tk9fUEFSVElBTFBBUlRJQUxfU1RSSU5HUEFSVElBTF9OVU1FUkFMUEFSVElBTF9LRVlXT1JETUFTS19QQVJUSUFMTlVNX1NJR05OVU1fWkVST05VTV9ESUdJVE5VTV9ET1ROVU1fRE9UX0RJR0lUTlVNX0VOVU1fRV9TSUdOTlVNX0VfRElHSVROVU1fU1VDQ0VTU1NUUl9QTEFJTlNUUl9FU0NBUEVTVFJfVVNUUl9VX0NPVU5UX1NISUZUU1RSX1VfVkFMVUVfU0hJRlRLV0RfVFlQRV9NQVNLS1dEX1RZUEVfU0hJRlRLV0RfTlVMTEtXRF9UUlVFS1dEX0ZBTFNFS1dEX0JPTUtXRF9DT1VOVF9TSElGVFRXT19CSVRfTUFTS3BhcnRpYWxTdGF0ZXNhdmVTdGF0ZXJlc3RvcmVTdGF0ZXBhcnRpYWxUeXBlbnVtU3RhdGVmaW5pc2hDaHVua051bWJlclVudGVybWluYXRlZCBzdHJpbmdnZXRDaGFyY29weUNoYXJzVG9MaXN0YmVnaW5TdHJpbmdhZGRDaGFyVG9TdHJpbmdhZGRTbGljZVRvU3RyaW5nZW5kU3RyaW5ncGFyc2VQYXJ0aWFscGFyc2VQYXJ0aWFsU3RyaW5ncGFyc2VQYXJ0aWFsTnVtYmVycGFyc2VQYXJ0aWFsS2V5d29yZGNvbnRpbnVlQ2h1bmtOdW1iZXJwYXJzZVN0cmluZ1RvQnVmZmVycGFyc2VTdHJpbmdFc2NhcGVjaHVua1N0cmluZ0VzY2FwZVVwYXJzZUhleERpZ2l0SW52YWxpZCBoZXggZGlnaXRrZXl3b3JkVHlwZWtleXdvcmRUeXBlSW5kZXjDr8K7wr9leHBlY3RlZENoYXJwYXJzZVN0cmluZ3BhcnNlTnVsbHBhcnNlRmFsc2VwYXJzZVRydWVwYXJzZU51bWJlcnBhcnNlS2V5d29yZFByZWZpeGNoYXJzc2xpY2VFbmRDb250cm9sIGNoYXJhY3RlciBpbiBzdHJpbmdjaHVua1N0cmluZ3N0cmluZ1N0YXRlcXVvdGVQb3NpdGlvbmhleFN0YXJ0SW52YWxpZCB1bmljb2RlIGVzY2FwZVVucmVjb2duaXplZCBzdHJpbmcgZXNjYXBlYmVnaW5DaHVua051bWJlcmFkZE51bWJlckNodW5rb3ZlcmhlYWRVbnRlcm1pbmF0ZWQgbnVtYmVyIGxpdGVyYWxNaXNzaW5nIGV4cGVjdGVkIGRpZ2l0ZGlnaXRDb3VudGhpZ2hEaWdpdDkyMjMzNzIwMzY4NTQ3NzU4MGV4cFNpZ25leHBvbmVudE92ZXJmbG93Yml0RmxhZzkwMDcxOTkyNTQ3NDA5OTIuMHNpZ25lZE1hbnRpc3NhMTAuMDEwMC4wMTAwMC4wMTAwMDAuMDEwMDAwMC4wMTAwMDAwMC4wMTAwMDAwMDAuMDEwMDAwMDAwMC4wMTAwMDAwMDAwMC4wMTAwMDAwMDAwMDAuMDEwMDAwMDAwMDAwMC4wMTAwMDAwMDAwMDAwMC4wMTAwMDAwMDAwMDAwMDAuMDEwMDAwMDAwMDAwMDAwMC4wMTAwMDAwMDAwMDAwMDAwMC4wMTAwMDAwMDAwMDAwMDAwMDAuMDEwMDAwMDAwMDAwMDAwMDAwMC4wMTAwMDAwMDAwMDAwMDAwMDAwMC4wMTAwMDAwMDAwMDAwMDAwMDAwMDAuMDEwMDAwMDAwMDAwMDAwMDAwMDAwMC4wMWUrMjExZSsyMlVuZXhwZWN0ZWQgY2hhcmFjdGVyVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRfSnNvblN0cmluZ1BhcnNlcl9Kc29uU3RyaW5nRGVjb2RlclNpbmtfcGFyc2VyX2NyZWF0ZVBhcnNlcl9VdGY4U3RyaW5nQnVmZmVySU5JVElBTF9DQVBBQ0lUWU1BU0tfVFdPX0JJVE1BU0tfU0laRVNISUZUX01JU1NJTkdTSElGVF9WQUxVRU1BWF9BU0NJSU1BWF9UV09fQllURU1BWF9USFJFRV9CWVRFTUFYX1VOSUNPREVNQVNLX1RXT19CWVRFTUFTS19USFJFRV9CWVRFTUFTS19GT1VSX0JZVEVNQVNLX0NPTlRJTlVFX1RBR01BU0tfQ09OVElOVUVfVkFMVUVDT05USU5VRV9UQUdMRUFEX1NVUlJPR0FURVRBSUxfU1VSUk9HQVRFU0hJRlRfSElHSF9TVVJST0dBVEVNQVNLX0xPV19TVVJST0dBVEVpc0xhdGluMWFkZENvbnRpbnVhdGlvbm1pc3Npbmdjb2RlRW5kYWRkQ2hhckNvZGVFeHBlY3RlZCBVVEYtOCBjb250aW51YXRpb24gYnl0ZSwgZm91bmQgSW52YWxpZCBlbmNvZGluZzogVSsgZW5jb2RlZCBpbiAgYnl0ZXMuSW5jb21wbGV0ZSBVVEYtOCBzZXF1ZW5jZV90bzE2Qml0Y29udGludWVCeXRlQ291bnRVbmV4cGVjdGVkIFVURi04IGNvbnRpbnVhdGlvbiBieXRlSW52YWxpZCBVVEYtOCBieXRlOiBzZWVuQnl0ZUNvdW50X0pzb25VdGY4UGFyc2VyX0pzb25VdGY4RGVjb2RlclNpbmtfYWRkQ2h1bmtBc2NpaUNvZGVjX2FsbG93SW52YWxpZGFsbG93SW52YWxpZHVzLWFzY2lpX1VuaWNvZGVTdWJzZXRFbmNvZGVyX3N1YnNldE1hc2tzdHJpbmdMZW5ndGhDb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMuQXNjaWlFbmNvZGVyX1VuaWNvZGVTdWJzZXRFbmNvZGVyU2lua1NvdXJjZSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlciB3aXRoIGNvZGUgcG9pbnQ6IF9Vbmljb2RlU3Vic2V0RGVjb2RlckludmFsaWQgdmFsdWUgaW4gaW5wdXQ6IF9jb252ZXJ0SW52YWxpZEFzY2lpRGVjb2RlcnN0cmluZ1NpbmtfRXJyb3JIYW5kbGluZ0FzY2lpRGVjb2RlclNpbmtfdXRmOFNpbmtfU2ltcGxlQXNjaWlEZWNvZGVyU2lua1NvdXJjZSBjb250YWlucyBub24tQVNDSUkgYnl0ZXMuQmFzZTY0Q29kZWN1cmxTYWZlYWxwaGFiZXRpbnZlcnNlQWxwaGFiZXRmaXJzdFBhZGRpbmdmaXJzdFBhZGRpbmdTb3VyY2VJbmRleHBhZGRpbmdDb3VudG9yaWdpbmFsQ2hhckludmFsaWQgYmFzZTY0IGRhdGFlbmRMZW5ndGhJbnZhbGlkIGJhc2U2NCBlbmNvZGluZyBsZW5ndGggX2NoZWNrUGFkZGluZ3NvdXJjZUluZGV4SW52YWxpZCBiYXNlNjQgcGFkZGluZywgcGFkZGVkIGxlbmd0aCBtdXN0IGJlIG11bHRpcGxlIG9mIGZvdXIsIGlzIEludmFsaWQgYmFzZTY0IHBhZGRpbmcsICc9JyBub3QgYXQgdGhlIGVuZEludmFsaWQgYmFzZTY0IHBhZGRpbmcsIG1vcmUgdGhhbiB0d28gJz0nIGNoYXJhY3RlcnNCYXNlNjRFbmNvZGVyX3VybFNhZmVfQmFzZTY0RW5jb2Rlcl9iYXNlNjRBbHBoYWJldF9iYXNlNjRVcmxBbHBoYWJldEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV9fdmFsdWVTaGlmdF9jb3VudE1hc2tfc2l4Qml0TWFza19hbHBoYWJldF9lbmNvZGVTdGF0ZV9zdGF0ZUJpdHNfc3RhdGVDb3VudGNyZWF0ZUJ1ZmZlcmZ1bGxDaHVua3NwYXJ0aWFsQ2h1bmtMZW5ndGhlbmNvZGVDaHVua291dHB1dEluZGV4ZXhwZWN0ZWRDaGFyc05vdCBhIGJ5dGUgdmFsdWUgYXQgaW5kZXggOiAweHdyaXRlRmluYWxDaHVua19CdWZmZXJDYWNoaW5nQmFzZTY0RW5jb2RlcmJ1ZmZlckNhY2hlX0Jhc2U2NEVuY29kZXJTaW5rX0FzY2lpQmFzZTY0RW5jb2RlclNpbmtfVXRmOEJhc2U2NEVuY29kZXJTaW5rQmFzZTY0RGVjb2Rlcl9CYXNlNjREZWNvZGVyX2ludmFsaWRfcGFkZGluZ19wX2ludmVyc2VBbHBoYWJldF9jaGFyX3BlcmNlbnRfY2hhcl8zX2NoYXJfZF9lbmNvZGVDaGFyYWN0ZXJTdGF0ZV9lbmNvZGVQYWRkaW5nU3RhdGVleHBlY3RlZFBhZGRpbmdfc3RhdGVQYWRkaW5nX2hhc1NlZW5QYWRkaW5nTWlzc2luZyBwYWRkaW5nIGNoYXJhY3RlckludmFsaWQgbGVuZ3RoLCBtdXN0IGJlIG11bHRpcGxlIG9mIGZvdXJkZWNvZGVDaHVua291dEluZGV4Y2hhck9ySW52YWxpZCBlbmNvZGluZyBiZWZvcmUgcGFkZGluZ0ludmFsaWQgY2hhcmFjdGVyX2FsbG9jYXRlQnVmZmVycGFkZGluZ1N0YXJ0cmVtYWluZGVyTGVuZ3RoX3RyaW1QYWRkaW5nQ2hhcnNuZXdFbmRleHBlY3RlZFBhcnRpYWxQYWRkaW5nSW52YWxpZCBwYWRkaW5nIGNoYXJhY3Rlcl9CYXNlNjREZWNvZGVyU2lua19kZWNvZGVyQnl0ZUNvbnZlcnNpb25TaW5rd2l0aENhbGxiYWNrQnl0ZUNvbnZlcnNpb25TaW5rQmFzZV9CeXRlQWRhcHRlclNpbmtfQnl0ZUNhbGxiYWNrU2lua19JTklUSUFMX0JVRkZFUl9TSVpFX2J1ZmZlckluZGV4ZnJlZUNvdW50Z3Jvd25fcm91bmRUb1Bvd2VyT2YyX1NpbXBsZUNhbGxiYWNrU2lua19hY2N1bXVsYXRlZF9Db252ZXJ0ZXJTdHJlYW1FdmVudFNpbmtfZXZlbnRTaW5rX2NodW5rZWRTaW5rQ29kZWNmdXNlaW52ZXJ0ZWRfRnVzZWRDb2RlY19zZWNvbmRfSW52ZXJ0ZWRDb2RlY19jb2RlY2NvZGVjQ29udmVydGVyVGhpcyBjb252ZXJ0ZXIgZG9lcyBub3Qgc3VwcG9ydCBjaHVua2VkIGNvbnZlcnNpb25zOiBfRnVzZWRDb252ZXJ0ZXJfbmFtZVRvRW5jb2Rpbmdpc29fODg1OS0xOjE5ODdpc28taXItMTAwaXNvXzg4NTktMWlzby04ODU5LTFsYXRpbjFsMWlibTgxOWNwODE5Y3Npc29sYXRpbjFpc28taXItNmFuc2lfeDMuNC0xOTY4YW5zaV94My40LTE5ODZpc29fNjQ2LmlydjoxOTkxaXNvNjQ2LXVzdXNpYm0zNjdjcDM2N2NzYXNjaWljc3V0Zjh1dGYtOGRlY29kZVN0cmVhbWJ5dGVTdHJlYW1nZXRCeU5hbWVIdG1sRXNjYXBlTW9kZWVzY2FwZUx0R3Rlc2NhcGVRdW90ZXNjYXBlQXBvc2VzY2FwZVNsYXNoYXR0cmlidXRlc3FBdHRyaWJ1dGVjdXN0b21IdG1sRXNjYXBlJmFtcDsmcXVvdDsmIzM5OyYjNDc7X0h0bWxFc2NhcGVTaW5rSnNvblVuc3VwcG9ydGVkT2JqZWN0RXJyb3J1bnN1cHBvcnRlZE9iamVjdHBhcnRpYWxSZXN1bHRzYWZlU3RyaW5nQ29udmVydGluZyBvYmplY3QgdG8gYW4gZW5jb2RhYmxlIG9iamVjdCBmYWlsZWQ6Q29udmVydGluZyBvYmplY3QgZGlkIG5vdCByZXR1cm4gYW4gZW5jb2RhYmxlIG9iamVjdDpKc29uQ3ljbGljRXJyb3JDeWNsaWMgZXJyb3IgaW4gSlNPTiBzdHJpbmdpZnlKc29uQ29kZWNfdG9FbmNvZGFibGV0b0VuY29kYWJsZXdpdGhSZXZpdmVyd2l0aEluZGVudEpzb25VdGY4RW5jb2Rlcl9kZWZhdWx0QnVmZmVyU2l6ZURFRkFVTFRfQlVGRkVSX1NJWkVfaW5kZW50X2J1ZmZlclNpemVidWZmZXJTaXplX3V0ZjhFbmNvZGVhZGRDaHVua2J5dGVMaXN0X0pzb25FbmNvZGVyU2lua19pc0RvbmVPbmx5IG9uZSBjYWxsIHRvIGFkZCBhbGxvd2VkYXNTdHJpbmdTaW5rX0pzb25VdGY4RW5jb2RlclNpbmtKc29uRGVjb2Rlcl9Kc29uU3RyaW5naWZpZXJiYWNrc3BhY2V0YWJuZXdsaW5lY2FycmlhZ2VSZXR1cm5mb3JtRmVlZGNoYXJfMGJhY2tzbGFzaGNoYXJfYmNoYXJfZmNoYXJfbmNoYXJfcmNoYXJfdGNoYXJfdV9zZWVuX3BhcnRpYWxSZXN1bHRjaGFyYWN0ZXJzd3JpdGVTdHJpbmdTbGljZXdyaXRlTnVtYmVyd3JpdGVTdHJpbmdDb250ZW50X2NoZWNrQ3ljbGVfcmVtb3ZlU2VlbndyaXRlT2JqZWN0d3JpdGVKc29uVmFsdWVjdXN0b21Kc29ud3JpdGVNYXBrZXlWYWx1ZUxpc3RhbGxTdHJpbmdLZXlzLCIiOl9Kc29uUHJldHR5UHJpbnRNaXhpbmluZGVudExldmVsX0pzb25TdHJpbmdTdHJpbmdpZmllcl9fSnNvblN0cmluZ1N0cmluZ2lmaWVyUHJldHR5Jl9Kc29uU3RyaW5nU3RyaW5naWZpZXImX0pzb25QcmV0dHlQcmludE1peGluX0pzb25TdHJpbmdTdHJpbmdpZmllclByZXR0eV9Kc29uVXRmOFN0cmluZ2lmaWVyd3JpdGVBc2NpaVN0cmluZ3dyaXRlRm91ckJ5dGVDaGFyQ29kZXdyaXRlTXVsdGlCeXRlQ2hhckNvZGVfX0pzb25VdGY4U3RyaW5naWZpZXJQcmV0dHkmX0pzb25VdGY4U3RyaW5naWZpZXImX0pzb25QcmV0dHlQcmludE1peGluX0pzb25VdGY4U3RyaW5naWZpZXJQcmV0dHlMYXRpbjFDb2RlY0xhdGluMUVuY29kZXJMYXRpbjFEZWNvZGVyX0xhdGluMURlY29kZXJTaW5rX2FkZFNsaWNlVG9TaW5rX2NoZWNrVmFsaWRMYXRpbjFfcmVwb3J0SW52YWxpZExhdGluMVNvdXJjZSBjb250YWlucyBub24tTGF0aW4tMSBjaGFyYWN0ZXJzLl9MYXRpbjFBbGxvd0ludmFsaWREZWNvZGVyU2lua3ByZXZpb3VzQ2hhcl9MaW5lU3BsaXR0ZXJTaW5rX2NhcnJ5X3NraXBMZWFkaW5nTEZfYWRkTGluZXNfTGluZVNwbGl0dGVyRXZlbnRTaW5rZnJvbVN0cmluZ1NpbmtDbG9zYWJsZVN0cmluZ1NpbmtfQ2xvc2FibGVTdHJpbmdTaW5rX1N0cmluZ0NvbnZlcnNpb25TaW5rQXNTdHJpbmdTaW5rQWRhcHRlcl9NSU5fU1RSSU5HX1NJWkVTdHJpbmdDb252ZXJzaW9uU2lua0Jhc2VTdHJpbmdDb252ZXJzaW9uU2lua01peGluX1N0cmluZ1NpbmtDb252ZXJzaW9uU2lua1RTdHJpbmdTaW5rX3N0cmluZ1NpbmtfU3RyaW5nQ2FsbGJhY2tTaW5rX1N0cmluZ0FkYXB0ZXJTaW5rX1V0ZjhTdHJpbmdTaW5rQWRhcHRlcmVuZEluZGV4X1V0ZjhDb252ZXJzaW9uU2lua3N0cmluZ0J1ZmZlclV0ZjhDb2RlY1V0ZjhFbmNvZGVyX2ZpbGxCdWZmZXJsYXN0Q29kZVVuaXR3YXNDb21iaW5lZF93cml0ZVN1cnJvZ2F0ZV9VdGY4RW5jb2Rlcl9ERUZBVUxUX0JZVEVfQlVGRkVSX1NJWkV3aXRoQnVmZmVyU2l6ZWxlYWRpbmdTdXJyb2dhdGVuZXh0Q29kZVVuaXRzdHJpbmdJbmRleF9fVXRmOEVuY29kZXJTaW5rJl9VdGY4RW5jb2RlciZTdHJpbmdDb252ZXJzaW9uU2lua01peGluX1V0ZjhFbmNvZGVyU2lua2lzTGFzdFNsaWNlaGFzQmVlbkNvbWJpbmVkVXRmOERlY29kZXJvbmVCeXRlc2lzRmlyc3RDaGFyYWN0ZXJmaXJzdFBhcnRfaXNGaXJzdENoYXJhY3Rlcl9jb252ZXJ0SW50ZXJjZXB0ZWRfVXRmOERlY29kZXJfZXhwZWN0ZWRVbml0c19leHRyYVVuaXRzX0xJTUlUU2hhc1BhcnRpYWxJbnB1dFVuZmluaXNoZWQgVVRGLTggb2N0ZXQgc2VxdWVuY2VleHBlY3RlZFVuaXRzZXh0cmFVbml0c0JhZCBVVEYtOCBlbmNvZGluZyAweE92ZXJsb25nIGVuY29kaW5nIG9mIDB4Q2hhcmFjdGVyIG91dHNpZGUgdmFsaWQgVW5pY29kZSByYW5nZTogTmVnYXRpdmUgVVRGLTggY29kZSB1bml0OiAtMHhfYXNjaWlNYXNrYmFzZTY0YmFzZTY0VXJsX3BhZGRpbmdDaGFyaHRtbEVzY2FwZV9sYXRpbjFNYXNrX09ORV9CWVRFX0xJTUlUX1RXT19CWVRFX0xJTUlUX1RIUkVFX0JZVEVfTElNSVRfRk9VUl9CWVRFX0xJTUlUX1NVUlJPR0FURV9UQUdfTUFTS19TVVJST0dBVEVfVkFMVUVfTUFTS19MRUFEX1NVUlJPR0FURV9NSU5fVEFJTF9TVVJST0dBVEVfTUlOX3BhcnNlRG91YmxlRG91YmxlX3BhcnNlYmFzZTY0RW5jb2RlYmFzZTY0VXJsRW5jb2RlYmFzZTY0RGVjb2RlX3BhcnNlSnNvbl9kZWZhdWx0VG9FbmNvZGFibGVfaXNMZWFkU3Vycm9nYXRlX2lzVGFpbFN1cnJvZ2F0ZV9jb21iaW5lU3Vycm9nYXRlUGFpcmxlYWRfc2Nhbk9uZUJ5dGVDaGFyYWN0ZXJzdW5pdHNkYXJ0LmRldmVsb3BlclNlbmRQb3J0UmF3UmVjZWl2ZVBvcnRleHRlbnNpb24uZGFydHByb2ZpbGVyLmRhcnRzZXJ2aWNlLmRhcnR0aW1lbGluZS5kYXJ0U2VydmljZUV4dGVuc2lvbkhhbmRsZXJUaW1lbGluZVN5bmNGdW5jdGlvblRpbWVsaW5lQXN5bmNGdW5jdGlvbl9Vc2VyVGFnVXNlclRhZ19uZXdVc2VyVGFnX2xhYmVsbWFrZUN1cnJlbnRVc2VyVGFnX21ha2VDdXJyZW50U2VydmljZUV4dGVuc2lvblJlc3BvbnNlZXJyb3JEZXRhaWxrSW52YWxpZFBhcmFtc2tFeHRlbnNpb25FcnJvcmtFeHRlbnNpb25FcnJvck1heGtFeHRlbnNpb25FcnJvck1pbmludmFsaWRQYXJhbXNleHRlbnNpb25FcnJvcmV4dGVuc2lvbkVycm9yTWF4ZXh0ZW5zaW9uRXJyb3JNaW5fZXJyb3JDb2RlTWVzc2FnZUludmFsaWQgcGFyYW1zU2VydmVyIGVycm9yX3ZhbGlkYXRlRXJyb3JDb2RlT3V0IG9mIHJhbmdlaXNFcnJvcl90b1N0cmluZ1VzZXJUYWdNQVhfVVNFUl9UQUdTZGVmYXVsdFRhZ01ldHJpY0ludmFsaWQgTWV0cmljIG5hbWUuX3RvSlNPTkdhdWdlbWluIG11c3QgYmUgbGVzcyB0aGFuIG1heG1ldHJpY3MvQ291bnRlck1ldHJpY3NfbWV0cmljc21ldHJpY1JlZ2lzdGVyZWQgbWV0cmljcyBoYXZlIHVuaXF1ZSBuYW1lc2RlcmVnaXN0ZXJfcHJpbnRNZXRyaWNfcHJpbnRNZXRyaWNzbWV0cmljc01ldHJpY0xpc3RTZXJ2aWNlUHJvdG9jb2xJbmZvbWFqb3JWZXJzaW9uRGFydCBWTSBTZXJ2aWNlIFByb3RvY29sIHZsaXN0ZW5pbmcgb24gU2VydmljZWdldEluZm9yZWNlaXZlUG9ydHVyaUNvbXBsZXRlcnNlbmRQb3J0Y29udHJvbFdlYlNlcnZlcmVuYWJsZWdldElzb2xhdGVJRGNvbnRyb2xQb3J0Rmxvd1RpbWVsaW5lc3RhcnRTeW5jX2FyZ3VtZW50c2ZpbmlzaFN5bmNVbmV2ZW4gY2FsbHMgdG8gc3RhcnRTeW5jIGFuZCBmaW5pc2hTeW5jaW5zdGFudFN5bmNpbnN0YW50QXJndW1lbnRzdGltZVN5bmNUaW1lbGluZVRhc2tfdGFza0lkd2l0aFRhc2tJZHRhc2tJZGluc3RhbnRVbmV2ZW4gY2FsbHMgdG8gc3RhcnQgYW5kIGZpbmlzaHBhc3NZb3UgY2Fubm90IHBhc3MgYSBUaW1lbGluZVRhc2sgd2l0aG91dCBmaW5pc2hpbmcgYWxsIHN0YXJ0ZWQgb3BlcmF0aW9uc19Bc3luY0Jsb2NrX1N5bmNCbG9ja19zdGFydENwdV9mbG93X25leHRTZXF1ZW5jZU51bWJlcl9oYXNUaW1lbGluZURldmVsb3Blcl9sb2d0aW1lc3RhbXBfcnVuRXh0ZW5zaW9ucGFyYW1ldGVyS2V5c3BhcmFtZXRlclZhbHVlc3JlcGx5UG9ydHRyYWNlX3NlcnZpY2VlcnJvckRldGFpbHNFeHRlbnNpb24gaGFuZGxlciBtdXN0IHJldHVybiBhIEZ1dHVyZUV4dGVuc2lvbiBoYW5kbGVyIG11c3QgY29tcGxldGUgdG8gYSBTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2VfcG9zdFJlc3BvbnNldm0tc2VydmljZTogcG9zdGluZyBubyByZXNwb25zZSBmb3IgcmVxdWVzdHsianNvbnJwYyI6IjIuMCIsdm0tc2VydmljZTogcG9zdGluZyBlcnJvciByZXNwb25zZSBmb3IgcmVxdWVzdCAiZXJyb3IiOnZtLXNlcnZpY2U6IHBvc3RpbmcgcmVzcG9uc2UgZm9yIHJlcXVlc3QgInJlc3VsdCI6ImlkIjoiIn0iaWQiOl9nZXRDdXJyZW50VGFnUHJvZmlsZXJfZ2V0Q3VycmVudFRhZ19nZXREZWZhdWx0VGFnVXNlclRhZ19kZWZhdWx0VGFnRGV2ZWxvcGVyX2RlYnVnZ2Vyd2hlbmluc3BlY3REZXZlbG9wZXJfaW5zcGVjdE11c3QgYmUgYSBTdHJpbmdNdXN0IGJlIGEgRGF0ZVRpbWVyZWdpc3RlckV4dGVuc2lvbmV4dC5NdXN0IGJlZ2luIHdpdGggZXh0LkV4dGVuc2lvbiBhbHJlYWR5IHJlZ2lzdGVyZWQ6IHBvc3RFdmVudGV2ZW50S2luZGV2ZW50RGF0YWV2ZW50RGF0YUFzU3RyaW5nX3Bvc3RFdmVudERldmVsb3Blcl9wb3N0RXZlbnRfbG9va3VwRXh0ZW5zaW9uRGV2ZWxvcGVyX2xvb2t1cEV4dGVuc2lvbl9yZWdpc3RlckV4dGVuc2lvbkRldmVsb3Blcl9yZWdpc3RlckV4dGVuc2lvbmdldEN1cnJlbnRUYWdfZ2V0U2VydmVySW5mb0RldmVsb3Blcl9nZXRTZXJ2ZXJJbmZvX3dlYlNlcnZlckNvbnRyb2xEZXZlbG9wZXJfd2ViU2VydmVyQ29udHJvbF9nZXRTZXJ2aWNlTWFqb3JWZXJzaW9uRGV2ZWxvcGVyX2dldFNlcnZpY2VNYWpvclZlcnNpb25fZ2V0U2VydmljZU1pbm9yVmVyc2lvbkRldmVsb3Blcl9nZXRTZXJ2aWNlTWlub3JWZXJzaW9uX2dldElzb2xhdGVJREZyb21TZW5kUG9ydERldmVsb3Blcl9nZXRJc29sYXRlSURGcm9tU2VuZFBvcnRfYXJndW1lbnRzQXNKc29uX2lzRGFydFN0cmVhbUVuYWJsZWRUaW1lbGluZV9pc0RhcnRTdHJlYW1FbmFibGVkX2dldE5leHRBc3luY0lkVGltZWxpbmVfZ2V0TmV4dEFzeW5jSWRfZ2V0VHJhY2VDbG9ja1RpbWVsaW5lX2dldFRyYWNlQ2xvY2tfZ2V0VGhyZWFkQ3B1Q2xvY2tUaW1lbGluZV9nZXRUaHJlYWRDcHVDbG9ja19yZXBvcnRUYXNrRXZlbnRUaW1lbGluZV9yZXBvcnRUYXNrRXZlbnRhcmd1bWVudHNBc0pzb25fcmVwb3J0Q29tcGxldGVFdmVudFRpbWVsaW5lX3JlcG9ydENvbXBsZXRlRXZlbnRzdGFydENwdV9yZXBvcnRGbG93RXZlbnRUaW1lbGluZV9yZXBvcnRGbG93RXZlbnRfcmVwb3J0SW5zdGFudEV2ZW50VGltZWxpbmVfcmVwb3J0SW5zdGFudEV2ZW50ZGFydC5mZmlUeXBlZERhdGFuYXRpdmVfdHlwZS5kYXJ0YW5ub3RhdGlvbnMuZGFydGR5bmFtaWNfbGlicmFyeS5kYXJ0c3RydWN0LmRhcnRQb2ludGVyYWxsb2NhdGVmcm9tQWRkcmVzc3B0cmZyb21GdW5jdGlvbkZmaV9mcm9tRnVuY3Rpb25leGNlcHRpb25hbFJldHVybkZmaV9zdG9yZUZmaV9sb2FkYWRkcmVzc0ZmaV9hZGRyZXNzRmZpX2VsZW1lbnRBdG9mZnNldEJ5RmZpX29mZnNldEJ5RmZpX2Nhc3Rhc0Z1bmN0aW9uUG9pbnRlci5hc0Z1bmN0aW9uIGNhbm5vdCBiZSBjYWxsZWQgZHluYW1pY2FsbHkuRmZpX2ZyZWVhc0V4dGVybmFsVHlwZWREYXRhTmF0aXZlVHlwZV9OYXRpdmVJbnRlZ2VyX05hdGl2ZURvdWJsZUludDhJbnQxNkludDMySW50NjRVaW50OFVpbnQxNlVpbnQzMlVpbnQ2NEludFB0ckZsb2F0Vm9pZE5hdGl2ZUZ1bmN0aW9uRGFydFJlcHJlc2VudGF0aW9uT2ZVbnNpemVkRHluYW1pY0xpYnJhcnlnZXRIYW5kbGVGZmlfZGxfZ2V0SGFuZGxlZXhlY3V0YWJsZUZmaV9kbF9sb29rdXBzeW1ib2xOYW1lbG9va3VwRnVuY3Rpb25EeW5hbWljIGludm9jYXRpb24gb2YgbG9va3VwRnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZC5TdHJ1Y3RhZGRyZXNzT2Zmcm9tUG9pbnRlcm51bGxwdHJ1bnNpemVkX29wZW5GZmlfZGxfb3Blbl9wcm9jZXNzTGlicmFyeUZmaV9kbF9wcm9jZXNzTGlicmFyeV9leGVjdXRhYmxlTGlicmFyeUZmaV9kbF9leGVjdXRhYmxlTGlicmFyeV9hbGxvY2F0ZUZmaV9hbGxvY2F0ZV9mcm9tQWRkcmVzc0ZmaV9mcm9tQWRkcmVzc19hc0Z1bmN0aW9uSW50ZXJuYWxGZmlfYXNGdW5jdGlvbkludGVybmFsRFNOU19hc0V4dGVybmFsVHlwZWREYXRhRmZpX2FzRXh0ZXJuYWxUeXBlZERhdGFfYWJpUmVjb2duaXplZCBtZXRob2Q6IG1ldGhvZCBpcyBkaXJlY3RseSBpbnRlcnByZXRlZCBieSB0aGUgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgb3IgSVIgZ3JhcGggaXMgYnVpbHQgaW4gdGhlIGZsb3cgZ3JhcGggYnVpbGRlci5GZmlfc2l6ZU9mZGFydC5faW50ZXJuYWxJbnQzMkxpc3Rhc3luY19jYXN0LmRhcnRjYXN0LmRhcnRwcmludC5kYXJ0c29ydC5kYXJ0c3ltYm9sLmRhcnRfUHJpbnRDbG9zdXJlX0VsZW1lbnRQcmVkaWNhdGVfRXhwYW5kRnVuY3Rpb250aW1lckZhY3RvcnlldmVudEhhbmRsZXJTZW5kRGF0YXRpbWVyTWlsbGlzZWNvbmRDbG9ja3Jlc291cmNlUmVhZEFzQnl0ZXNwYWNrYWdlUm9vdFN0cmluZ3BhY2thZ2VDb25maWdTdHJpbmdwYWNrYWdlUm9vdFVyaUZ1dHVyZXBhY2thZ2VDb25maWdVcmlGdXR1cmVyZXNvbHZlUGFja2FnZVVyaUZ1dHVyZV9jb21wdXRlU2NyaXB0VXJpX2NhY2hlZFNjcmlwdHBsYXRmb3JtU2NyaXB0TGlzdHNzcmNTdGFydGRzdFN0YXJ0Y2lkQXJyYXljaWRFeHRlcm5hbE9uZUJ5dGVTdHJpbmdjaWRHcm93YWJsZU9iamVjdEFycmF5Y2lkSW1tdXRhYmxlQXJyYXljaWRPbmVCeXRlU3RyaW5nY2lkVHdvQnl0ZVN0cmluZ2NpZFVpbnQ4QXJyYXlWaWV3Z2V0SURDbGFzc0lEX2dldElEX1BhdGNoQ29kZVVuaXRzX3N0cmluZ3N0cmluZ09mMi4ySHR0cFN0YXR1c2NvbnRpbnVlX3N3aXRjaGluZ1Byb3RvY29sc3Byb2Nlc3Npbmdva2NyZWF0ZWRhY2NlcHRlZG5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbm5vQ29udGVudHJlc2V0Q29udGVudHBhcnRpYWxDb250ZW50bXVsdGlTdGF0dXNhbHJlYWR5UmVwb3J0ZWRpbVVzZWRtdWx0aXBsZUNob2ljZXNtb3ZlZFBlcm1hbmVudGx5bW92ZWRUZW1wb3JhcmlseXNlZU90aGVybm90TW9kaWZpZWR1c2VQcm94eXRlbXBvcmFyeVJlZGlyZWN0cGVybWFuZW50UmVkaXJlY3RiYWRSZXF1ZXN0dW5hdXRob3JpemVkcGF5bWVudFJlcXVpcmVkZm9yYmlkZGVubWV0aG9kTm90QWxsb3dlZG5vdEFjY2VwdGFibGVwcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWRyZXF1ZXN0VGltZW91dGNvbmZsaWN0Z29uZWxlbmd0aFJlcXVpcmVkcHJlY29uZGl0aW9uRmFpbGVkcmVxdWVzdEVudGl0eVRvb0xhcmdlcmVxdWVzdFVyaVRvb0xvbmd1bnN1cHBvcnRlZE1lZGlhVHlwZXJlcXVlc3RlZFJhbmdlTm90U2F0aXNmaWFibGVleHBlY3RhdGlvbkZhaWxlZG1pc2RpcmVjdGVkUmVxdWVzdHVucHJvY2Vzc2FibGVFbnRpdHlsb2NrZWRmYWlsZWREZXBlbmRlbmN5dXBncmFkZVJlcXVpcmVkcHJlY29uZGl0aW9uUmVxdWlyZWR0b29NYW55UmVxdWVzdHNyZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2Vjb25uZWN0aW9uQ2xvc2VkV2l0aG91dFJlc3BvbnNldW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnNjbGllbnRDbG9zZWRSZXF1ZXN0aW50ZXJuYWxTZXJ2ZXJFcnJvcm5vdEltcGxlbWVudGVkYmFkR2F0ZXdheXNlcnZpY2VVbmF2YWlsYWJsZWdhdGV3YXlUaW1lb3V0aHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWR2YXJpYW50QWxzb05lZ290aWF0ZXNpbnN1ZmZpY2llbnRTdG9yYWdlbG9vcERldGVjdGVkbm90RXh0ZW5kZWRuZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZG5ldHdvcmtDb25uZWN0VGltZW91dEVycm9yVXNlIGNvbnRpbnVlXyBpbnN0ZWFkU1dJVENISU5HX1BST1RPQ09MU1VzZSBzd2l0Y2hpbmdQcm90b2NvbHMgaW5zdGVhZE9LVXNlIG9rIGluc3RlYWRDUkVBVEVEVXNlIGNyZWF0ZWQgaW5zdGVhZEFDQ0VQVEVEVXNlIGFjY2VwdGVkIGluc3RlYWROT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTlVzZSBub25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb24gaW5zdGVhZE5PX0NPTlRFTlRVc2Ugbm9Db250ZW50IGluc3RlYWRSRVNFVF9DT05URU5UVXNlIHJlc2V0Q29udGVudCBpbnN0ZWFkUEFSVElBTF9DT05URU5UVXNlIHBhcnRpYWxDb250ZW50IGluc3RlYWRNVUxUSVBMRV9DSE9JQ0VTVXNlIG11bHRpcGxlQ2hvaWNlcyBpbnN0ZWFkTU9WRURfUEVSTUFORU5UTFlVc2UgbW92ZWRQZXJtYW5lbnRseSBpbnN0ZWFkRk9VTkRVc2UgZm91bmQgaW5zdGVhZE1PVkVEX1RFTVBPUkFSSUxZVXNlIG1vdmVkVGVtcG9yYXJpbHkgaW5zdGVhZFNFRV9PVEhFUlVzZSBzZWVPdGhlciBpbnN0ZWFkTk9UX01PRElGSUVEVXNlIG5vdE1vZGlmaWVkIGluc3RlYWRVU0VfUFJPWFlVc2UgdXNlUHJveHkgaW5zdGVhZFRFTVBPUkFSWV9SRURJUkVDVFVzZSB0ZW1wb3JhcnlSZWRpcmVjdCBpbnN0ZWFkQkFEX1JFUVVFU1RVc2UgYmFkUmVxdWVzdCBpbnN0ZWFkVU5BVVRIT1JJWkVEVXNlIHVuYXV0aG9yaXplZCBpbnN0ZWFkUEFZTUVOVF9SRVFVSVJFRFVzZSBwYXltZW50UmVxdWlyZWQgaW5zdGVhZEZPUkJJRERFTlVzZSBmb3JiaWRkZW4gaW5zdGVhZE5PVF9GT1VORFVzZSBub3RGb3VuZCBpbnN0ZWFkTUVUSE9EX05PVF9BTExPV0VEVXNlIG1ldGhvZE5vdEFsbG93ZWQgaW5zdGVhZE5PVF9BQ0NFUFRBQkxFVXNlIG5vdEFjY2VwdGFibGUgaW5zdGVhZFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEVXNlIHByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZCBpbnN0ZWFkUkVRVUVTVF9USU1FT1VUVXNlIHJlcXVlc3RUaW1lb3V0IGluc3RlYWRDT05GTElDVFVzZSBjb25mbGljdCBpbnN0ZWFkR09ORVVzZSBnb25lIGluc3RlYWRMRU5HVEhfUkVRVUlSRURVc2UgbGVuZ3RoUmVxdWlyZWQgaW5zdGVhZFBSRUNPTkRJVElPTl9GQUlMRURVc2UgcHJlY29uZGl0aW9uRmFpbGVkIGluc3RlYWRSRVFVRVNUX0VOVElUWV9UT09fTEFSR0VVc2UgcmVxdWVzdEVudGl0eVRvb0xhcmdlIGluc3RlYWRSRVFVRVNUX1VSSV9UT09fTE9OR1VzZSByZXF1ZXN0VXJpVG9vTG9uZyBpbnN0ZWFkVU5TVVBQT1JURURfTUVESUFfVFlQRVVzZSB1bnN1cHBvcnRlZE1lZGlhVHlwZSBpbnN0ZWFkUkVRVUVTVEVEX1JBTkdFX05PVF9TQVRJU0ZJQUJMRVVzZSByZXF1ZXN0ZWRSYW5nZU5vdFNhdGlzZmlhYmxlIGluc3RlYWRFWFBFQ1RBVElPTl9GQUlMRURVc2UgZXhwZWN0YXRpb25GYWlsZWQgaW5zdGVhZFVQR1JBREVfUkVRVUlSRURVc2UgdXBncmFkZVJlcXVpcmVkIGluc3RlYWRJTlRFUk5BTF9TRVJWRVJfRVJST1JVc2UgaW50ZXJuYWxTZXJ2ZXJFcnJvciBpbnN0ZWFkTk9UX0lNUExFTUVOVEVEVXNlIG5vdEltcGxlbWVudGVkIGluc3RlYWRCQURfR0FURVdBWVVzZSBiYWRHYXRld2F5IGluc3RlYWRTRVJWSUNFX1VOQVZBSUxBQkxFVXNlIHNlcnZpY2VVbmF2YWlsYWJsZSBpbnN0ZWFkR0FURVdBWV9USU1FT1VUVXNlIGdhdGV3YXlUaW1lb3V0IGluc3RlYWRIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRFVzZSBodHRwVmVyc2lvbk5vdFN1cHBvcnRlZCBpbnN0ZWFkTkVUV09SS19DT05ORUNUX1RJTUVPVVRfRVJST1JVc2UgbmV0d29ya0Nvbm5lY3RUaW1lb3V0RXJyb3IgaW5zdGVhZENhc3RTdHJlYW1TdWJzY3JpcHRpb25fQ2FzdEl0ZXJhYmxlQmFzZUNhc3RJdGVyYXRvckNhc3RJdGVyYWJsZV9FZmZpY2llbnRMZW5ndGhDYXN0SXRlcmFibGVfX0Nhc3RMaXN0QmFzZSZfQ2FzdEl0ZXJhYmxlQmFzZSZMaXN0TWl4aW5fQ2FzdExpc3RCYXNldjFDYXN0TGlzdENhc3RTZXRfZGVmYXVsdEVtcHR5U2V0X2NvbmRpdGlvbmFsQWRkb3RoZXJDb250YWluc2Nhc3RFbGVtZW50Q2FzdE1hcFNLU1ZDYXN0UXVldWVFZmZpY2llbnRMZW5ndGhJdGVyYWJsZUxpc3RJdGVyYWJsZVN1Ykxpc3RJdGVyYWJsZV9lbmRPckxlbmd0aF9lbmRJbmRleHJlYWxJbmRleG5ld1N0YXJ0TGlzdEl0ZXJhdG9yTWFwcGVkSXRlcmFibGVfZkVmZmljaWVudExlbmd0aE1hcHBlZEl0ZXJhYmxlTWFwcGVkSXRlcmF0b3JNYXBwZWRMaXN0SXRlcmFibGVXaGVyZUl0ZXJhYmxlV2hlcmVJdGVyYXRvckV4cGFuZEl0ZXJhYmxlRXhwYW5kSXRlcmF0b3JfY3VycmVudEV4cGFuc2lvblRha2VJdGVyYWJsZV90YWtlQ291bnR0YWtlQ291bnRFZmZpY2llbnRMZW5ndGhUYWtlSXRlcmFibGVpdGVyYWJsZUxlbmd0aFRha2VJdGVyYXRvclRha2VXaGlsZUl0ZXJhYmxlVGFrZVdoaWxlSXRlcmF0b3JfaXNGaW5pc2hlZFNraXBJdGVyYWJsZV9za2lwQ291bnRFZmZpY2llbnRMZW5ndGhTa2lwSXRlcmFibGVTa2lwSXRlcmF0b3JTa2lwV2hpbGVJdGVyYWJsZVNraXBXaGlsZUl0ZXJhdG9yX2hhc1NraXBwZWRFbXB0eUl0ZXJhYmxlRm9sbG93ZWRCeUl0ZXJhYmxlZmlyc3RFZmZpY2llbnRFZmZpY2llbnRMZW5ndGhGb2xsb3dlZEJ5SXRlcmFibGVGb2xsb3dlZEJ5SXRlcmF0b3JfbmV4dEl0ZXJhYmxlV2hlcmVUeXBlSXRlcmFibGVXaGVyZVR5cGVJdGVyYXRvcm5vRWxlbWVudHRvb01hbnl0b29GZXdGaXhlZExlbmd0aExpc3RNaXhpbkNhbm5vdCBhZGQgdG8gYSBmaXhlZC1sZW5ndGggbGlzdENhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Q2Fubm90IGNsZWFyIGEgZml4ZWQtbGVuZ3RoIGxpc3RVbm1vZGlmaWFibGVMaXN0TWl4aW5DYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBsaXN0Q2Fubm90IGNoYW5nZSB0aGUgbGVuZ3RoIG9mIGFuIHVubW9kaWZpYWJsZSBsaXN0Q2Fubm90IGFkZCB0byBhbiB1bm1vZGlmaWFibGUgbGlzdENhbm5vdCByZW1vdmUgZnJvbSBhbiB1bm1vZGlmaWFibGUgbGlzdENhbm5vdCBjbGVhciBhbiB1bm1vZGlmaWFibGUgbGlzdEZpeGVkTGVuZ3RoTGlzdEJhc2VVbm1vZGlmaWFibGVMaXN0QmFzZV9MaXN0SW5kaWNlc0l0ZXJhYmxlX2JhY2tlZExpc3RMaXN0TWFwVmlld1JldmVyc2VkTGlzdEl0ZXJhYmxlVW5tb2RpZmlhYmxlTGlzdEVycm9yQ2Fubm90IGFkZCB0byB1bm1vZGlmaWFibGUgTGlzdENhbm5vdCBjaGFuZ2UgdGhlIGNvbnRlbnQgb2YgYW4gdW5tb2RpZmlhYmxlIExpc3RDYW5ub3QgY2hhbmdlIGxlbmd0aCBvZiB1bm1vZGlmaWFibGUgTGlzdENhbm5vdCByZW1vdmUgZnJvbSB1bm1vZGlmaWFibGUgTGlzdE5vbkdyb3dhYmxlTGlzdEVycm9yQ2Fubm90IGFkZCB0byBub24tZ3Jvd2FibGUgTGlzdENhbm5vdCBjaGFuZ2UgbGVuZ3RoIG9mIG5vbi1ncm93YWJsZSBMaXN0Q2Fubm90IHJlbW92ZSBmcm9tIG5vbi1ncm93YWJsZSBMaXN0U29ydF9JTlNFUlRJT05fU09SVF9USFJFU0hPTERzb3J0UmFuZ2VPdXRPZlJhbmdlX2RvU29ydF9pbnNlcnRpb25Tb3J0ZWxfZHVhbFBpdm90UXVpY2tzb3J0c2l4dGhpbmRleDFpbmRleDVpbmRleDNpbmRleDJpbmRleDRlbDFlbDJlbDNlbDRlbDVwaXZvdDFwaXZvdDJncmVhdHBpdm90c19hcmVfZXF1YWxha2NvbXBfcGl2b3QxY29tcF9waXZvdDJyZXNlcnZlZFdvcmRSRSg/OmFzc2VydHxicmVha3xjKD86YSg/OnNlfHRjaCl8bGFzc3xvbig/OnN0fHRpbnVlKSl8ZCg/OmVmYXVsdHxvKXxlKD86bHNlfG51bXx4dGVuZHMpfGYoPzphbHNlfGluYWwoPzpseSk/fG9yKXxpW2Zuc118big/OmV3fHVsbCl8cmV0KD86aHJvd3x1cm4pfHMoPzp1cGVyfHdpdGNoKXx0KD86aCg/OmlzfHJvdyl8cig/OnVlfHkpKXx2KD86YXJ8b2lkKXx3KD86aGlsZXxpdGgpKXB1YmxpY0lkZW50aWZpZXJSRSg/ISg/OmFzc2VydHxicmVha3xjKD86YSg/OnNlfHRjaCl8bGFzc3xvbig/OnN0fHRpbnVlKSl8ZCg/OmVmYXVsdHxvKXxlKD86bHNlfG51bXx4dGVuZHMpfGYoPzphbHNlfGluYWwoPzpseSk/fG9yKXxpW2Zuc118big/OmV3fHVsbCl8cmV0KD86aHJvd3x1cm4pfHMoPzp1cGVyfHdpdGNoKXx0KD86aCg/OmlzfHJvdyl8cig/OnVlfHkpKXx2KD86YXJ8b2lkKXx3KD86aGlsZXxpdGgpKVxiKD8hXCQpKVthLXpBLVokXVtcdyRdKig/ISg/OmFzc2VydHxicmVha3xjKD86YSg/OnNlfHRjaCl8bGFzc3xvbig/OnN0fHRpbnVlKSl8ZCg/OmVmYXVsdHxvKXxlKD86bHNlfG51bXx4dGVuZHMpfGYoPzphbHNlfGluYWwoPzpseSk/fG9yKXxpW2Zuc118big/OmV3fHVsbCl8cmV0KD86aHJvd3x1cm4pfHMoPzp1cGVyfHdpdGNoKXx0KD86aCg/OmlzfHJvdyl8cig/OnVlfHkpKXx2KD86YXJ8b2lkKXx3KD86aGlsZXxpdGgpKVxiKD8hXCQpKVthLXpBLVokX11bXHckXSpvcGVyYXRvclJFKD86W1wtKyovJSZ8Xl18XFtcXT0/fD09fH4vP3w8Wzw9XT98Pls+PV0/fHVuYXJ5LSlwdWJsaWNTeW1ib2xQYXR0ZXJuXig/OiR8KD86PT8kfFsuXSg/ISQpKSkrPyRzeW1ib2xQYXR0ZXJudW52YWxpZGF0ZWRTeW1ib2woInZhbGlkYXRlUHVibGljU3ltYm9sIiBpcyBhIHByaXZhdGUgaWRlbnRpZmllciIgaXMgbm90IGEgdmFsaWQgKHF1YWxpZmllZCkgc3ltYm9sIG5hbWVpc1ZhbGlkU3ltYm9sY29tcHV0ZVVubWFuZ2xlZE5hbWVhZGRfc2V0dGVyX3N1ZmZpeG5ld0xhc3RuZXdGaXJzdGlzNjRCaXRfcHJpbnRDbG9zdXJlX2lucXVpcmVJczY0Qml0SW50ZXJuYWxfaW5xdWlyZUlzNjRCaXRfY2xhc3NSYW5nZUNoZWNrY2lkbG93ZXJMaW1pdHVwcGVyTGltaXRfcHJlcGVuZFR5cGVBcmd1bWVudHNJbnRlcm5hbF9wcmVwZW5kVHlwZUFyZ3VtZW50c2Z1bmN0aW9uVHlwZUFyZ3VtZW50c3BhcmVudFR5cGVBcmd1bWVudHNwYXJlbnRMZW50b3RhbExlbl9ib3VuZHNDaGVja0ZvclBhcnRpYWxJbnN0YW50aWF0aW9uSW50ZXJuYWxfYm91bmRzQ2hlY2tGb3JQYXJ0aWFsSW5zdGFudGlhdGlvbl9ncm93UmVnRXhwU3RhY2tuZXdTdGFja3Vuc2FmZUNhc3RJbnRlcm5hbF91bnNhZmVDYXN0X3Vuc3VwcG9ydGVkUHJpbnQncHJpbnQnIGlzIG5vdCBzdXBwb3J0ZWRkaWdpdDFkaWdpdDJJbnRlcm5hbF9leHRyYWN0VHlwZUFyZ3VtZW50c19jaGVja0NvdW50bWFrZUxpc3RGaXhlZExlbmd0aEludGVybmFsX21ha2VMaXN0Rml4ZWRMZW5ndGhncm93YWJsZUxpc3RtYWtlRml4ZWRMaXN0VW5tb2RpZmlhYmxlSW50ZXJuYWxfbWFrZUZpeGVkTGlzdFVubW9kaWZpYWJsZWZpeGVkTGVuZ3RoTGlzdGRhcnQuaXNvbGF0ZUJ5dGVCdWZmZXJjYXBhYmlsaXR5LmRhcnRfSW1tZWRpYXRlQ2FsbGJhY2tfTnVsbGFyeUZ1bmN0aW9uX1VuYXJ5RnVuY3Rpb25fQmluYXJ5RnVuY3Rpb25fQ2FwYWJpbGl0eUltcGxDYXBhYmlsaXR5SW1wbF9mYWN0b3J5X2dldF9oYXNoY29kZUNhcGFiaWxpdHlJbXBsX2VxdWFsc0NhcGFiaWxpdHlJbXBsX2dldF9oYXNoY29kZV9SZWNlaXZlUG9ydEltcGxfcmF3UG9ydGZyb21SYXdSZWNlaXZlUG9ydF9SYXdSZWNlaXZlUG9ydEltcGxfaGFuZGxlck1hcFJhd1JlY2VpdmVQb3J0SW1wbF9mYWN0b3J5X2Nsb3NlSW50ZXJuYWxfZ2V0X3NlbmRwb3J0X2dldF9pZFJhd1JlY2VpdmVQb3J0SW1wbF9nZXRfaWRSYXdSZWNlaXZlUG9ydEltcGxfZ2V0X3NlbmRwb3J0X2xvb2t1cEhhbmRsZXJfaGFuZGxlTWVzc2FnZVJhd1JlY2VpdmVQb3J0SW1wbF9jbG9zZUludGVybmFsX2luaXRIYW5kbGVyTWFwdGVtcE1hcF9TZW5kUG9ydEltcGxfdW5pbnN0YW50aWFibGVfc2VuZEludGVybmFsU2VuZFBvcnRJbXBsX2dldF9pZFNlbmRQb3J0SW1wbF9nZXRfaGFzaGNvZGVTZW5kUG9ydEltcGxfc2VuZEludGVybmFsX19UcmFuc2ZlcmFibGVUeXBlZERhdGFJbXBsVHJhbnNmZXJhYmxlVHlwZWREYXRhX2ZhY3RvcnltYXRlcmlhbGl6ZV9tYXRlcmlhbGl6ZUludG9VaW50OExpc3RUcmFuc2ZlcmFibGVUeXBlZERhdGFfbWF0ZXJpYWxpemVfVGltZXJIZWFwX3VzZWRpbml0U2l6ZV9pbmRleE9yTmV4dF9jb21wYXJlVG9fc3dhcGxlZnRJbmRleG5ld2VzdF9sZWZ0Q2hpbGRfcmlnaHRDaGlsZF9sZWZ0Q2hpbGRJbmRleF9yaWdodENoaWxkSW5kZXhfVGltZXJfTk9fVElNRVJfWkVST19FVkVOVF9USU1FT1VUX0VWRU5UX2hlYXBfZmlyc3RaZXJvVGltZXJfbGFzdFplcm9UaW1lcl9JRF9NQVNLX2lkQ291bnRfcmVjZWl2ZVBvcnRfc2VuZFBvcnRfc2NoZWR1bGVkV2FrZXVwVGltZV9oYW5kbGluZ0NhbGxiYWNrc193YWtldXBUaW1lX21pbGxpU2Vjb25kc19yZXBlYXRpbmdfdGlja19uZXh0SWRtaWxsaVNlY29uZHN3YWtldXBUaW1lX2VucXVldWVfaXNJbkhlYXBfYWR2YW5jZVdha2V1cFRpbWVfbm90aWZ5WmVyb0hhbmRsZXJfcXVldWVGcm9tWmVyb0V2ZW50cGVuZGluZ1RpbWVyc19ub3RpZnlFdmVudEhhbmRsZXJfcXVldWVGcm9tVGltZW91dEV2ZW50Y3VycmVudFRpbWVfcnVuVGltZXJzb3ZlcmR1ZW1pc3NlZFRpY2tzaW1tZWRpYXRlQ2FsbGJhY2tfc2NoZWR1bGVXYWtldXBfY2FuY2VsV2FrZXVwX2NyZWF0ZVRpbWVySGFuZGxlcl9zaHV0ZG93blRpbWVySGFuZGxlcklzb2xhdGVTcGF3bkV4Y2VwdGlvbklzb2xhdGVTcGF3bkV4Y2VwdGlvbjogX2N1cnJlbnRJc29sYXRlX3Jvb3RVcmlfUEFVU0VfUkVTVU1FX1BJTkdfS0lMTF9BRERfRVhJVF9ERUxfRVhJVF9BRERfRVJST1JfREVMX0VSUk9SX0VSUk9SX0ZBVEFMYmVmb3JlTmV4dEV2ZW50cGF1c2VDYXBhYmlsaXR5dGVybWluYXRlQ2FwYWJpbGl0eV9wYWNrYWdlU3VwcG9ydGVkX3NwYXduQ29tbW9ucmVhZHlQb3J0cmVhZHlNZXNzYWdlY2FwYWJpbGl0aWVzVW5hYmxlIHRvIHNwYXduIGlzb2xhdGU6IEludGVybmFsIGVycm9yOiB1bmV4cGVjdGVkIGZvcm1hdCBmb3IgcmVhZHkgbWVzc2FnZTogX3NwYXduRnVuY3Rpb25Jc29sYXRlX3NwYXduRnVuY3Rpb250b3BMZXZlbEZ1bmN0aW9ucGF1c2VkZXJyb3JzQXJlRmF0YWxvbkV4aXRfc3Bhd25VcmlJc29sYXRlX3NwYXduVXJpX3NlbmRPT0JJc29sYXRlX3NlbmRPT0JfZ2V0RGVidWdOYW1lSXNvbGF0ZV9nZXREZWJ1Z05hbWVfZ2V0Q3VycmVudElzb2xhdGVwb3J0QW5kQ2FwYWJpbGl0aWVzX2dldFBvcnRBbmRDYXBhYmlsaXRpZXNPZkN1cnJlbnRJc29sYXRlSXNvbGF0ZV9nZXRQb3J0QW5kQ2FwYWJpbGl0aWVzT2ZDdXJyZW50SXNvbGF0ZV9nZXRDdXJyZW50Um9vdFVyaV9nZXRDdXJyZW50Um9vdFVyaVN0cklzb2xhdGVfZ2V0Q3VycmVudFJvb3RVcmlTdHIyLjNwYWNrYWdlcy8gZGlyZWN0b3J5IHJlc29sdXRpb24gaXMgbm90IHN1cHBvcnRlZCBpbiBEYXJ0IDIuaG9va0lzb2xhdGUucGFja2FnZVJvb3RJc29sYXRlLnBhY2thZ2VDb25maWdyZXNvbHZlUGFja2FnZVVyaUlzb2xhdGUucmVzb2x2ZVBhY2thZ2VVcmlzcGF3bklzb2xhdGUuc3Bhd25zcGF3blVyaWF1dG9tYXRpY1BhY2thZ2VSZXNvbHV0aW9uQ2Fubm90IHNpbXVsdGFuZW91c2x5IHJlcXVlc3QgYXV0b21hdGljUGFja2FnZVJlc29sdXRpb24gYW5kIHNwZWNpZnkgYXBhY2thZ2VSb290LnBhY2thZ2VDb25maWcuQ2Fubm90IHNpbXVsdGFuZW91c2x5IHNwZWNpZnkgYSBwYWNrYWdlUm9vdCBhbmQgYSBwYWNrYWdlQ29uZmlnLnNwYXduZWRVcmlyZXN1bWVDYXBhYmlsaXR5X3BhdXNlYWRkT25FeGl0TGlzdGVuZXJyZXNwb25zZVBvcnRyZW1vdmVPbkV4aXRMaXN0ZW5lcnNldEVycm9yc0ZhdGFscHJpb3JpdHlhZGRFcnJvckxpc3RlbmVycmVtb3ZlRXJyb3JMaXN0ZW5lcmxpc3RNZXNzYWdlZXJyb3JEZXNjcmlwdGlvbnN0YWNrRGVzY3JpcHRpb25SZWNlaXZlUG9ydHJhd1BvcnRuZXdIYW5kbGVyUmVtb3RlRXJyb3JfZGVzY3JpcHRpb25UcmFuc2ZlcmFibGVUeXBlZERhdGEyLjMuMmZyb21MaXN0Y2h1bmtzQ2FwYWJpbGl0eV9wZW5kaW5nSW1tZWRpYXRlQ2FsbGJhY2tfaXNvbGF0ZVNjaGVkdWxlSW1tZWRpYXRlX3J1blBlbmRpbmdJbW1lZGlhdGVDYWxsYmFja19yZW1vdmVQZW5kaW5nSW1tZWRpYXRlQ2FsbGJhY2tfZ2V0SXNvbGF0ZVNjaGVkdWxlSW1tZWRpYXRlQ2xvc3VyZV9zdGFydE1haW5Jc29sYXRlX2dldFN0YXJ0TWFpbklzb2xhdGVGdW5jdGlvbl9zdGFydElzb2xhdGVwYXJlbnRQb3J0aXNTcGF3blVyaV9zZXR1cEhvb2tzZGFydC5tYXRoamVua2luc19zbWlfaGFzaC5kYXJ0cG9pbnQuZGFydHJhbmRvbS5kYXJ0cmVjdGFuZ2xlLmRhcnRfUmFuZG9tX2tTVEFURV9MT19rU1RBVEVfSElfUE9XMl8zMl9QT1cyXzUzX0RfUE9XMl8yN19EMTM0MjE3NzI4LjBfcHJuZ193aXRoU3RhdGVfbmV4dFN0YXRlUmFuZG9tX25leHRTdGF0ZU11c3QgYmUgcG9zaXRpdmUgYW5kIDw9IDJeMzJybmQzMm5leHREb3VibGVuZXh0Qm9vbF9zZXR1cFNlZWRSYW5kb21fc2V0dXBTZWVkX2luaXRpYWxTZWVkUmFuZG9tX2luaXRpYWxTZWVkX25leHRTZWVkX1NlY3VyZVJhbmRvbV9nZXRCeXRlc1NlY3VyZVJhbmRvbV9nZXRCeXRlc3JuZF9KZW5raW5zU21pSGFzaGhhc2g0UG9pbnRQb2ludChmYWN0b3JkaXN0YW5jZVRvc3F1YXJlZERpc3RhbmNlVG9zZWN1cmVfUmVjdGFuZ2xlQmFzZWhlaWdodGJvdHRvbVJlY3RhbmdsZSAoIHggeDB5MGJvdW5kaW5nQm94Y29udGFpbnNSZWN0YW5nbGVhbm90aGVyY29udGFpbnNQb2ludHRvcExlZnR0b3BSaWdodGJvdHRvbVJpZ2h0Ym90dG9tTGVmdFJlY3RhbmdsZWZyb21Qb2ludHNNdXRhYmxlUmVjdGFuZ2xlX3dpZHRoX2hlaWdodDIuNzE4MjgxODI4NDU5MDQ1bG4xMDIuMzAyNTg1MDkyOTk0MDQ2bG4yMC42OTMxNDcxODA1NTk5NDUzbG9nMmUxLjQ0MjY5NTA0MDg4ODk2MzRsb2cxMGUwLjQzNDI5NDQ4MTkwMzI1MThwaTMuMTQxNTkyNjUzNTg5Nzkzc3FydDFfMjAuNzA3MTA2NzgxMTg2NTQ3NnNxcnQyMS40MTQyMTM1NjIzNzMwOTUxX2RvdWJsZVBvd2RhcnQ6Y29yZSNfRG91YmxlX3Bvd01hdGhfZG91YmxlUG93X2ludFBvd19hdGFuMk1hdGhfYXRhbjJfc2luTWF0aF9zaW5fY29zTWF0aF9jb3NfdGFuTWF0aF90YW5fYWNvc01hdGhfYWNvc19hc2luTWF0aF9hc2luX2F0YW5NYXRoX2F0YW5fc3FydE1hdGhfc3FydF9leHBNYXRoX2V4cE1hdGhfbG9nYXRhbjJ2bTpuZXZlci1pbmxpbmVwb3dzaW5yYWRpYW5zY29zdGFuYWNvc2FzaW5hdGFuc3FydF9jbGFtcFRvWmVyb2RhcnQubWlycm9yc19JbnRlcm5hbE1pcnJvckVycm9yX21zZ19Mb2NhbE1pcnJvclN5c3RlbV9pc29sYXRlX2NvbXB1dGVMaWJyYXJpZXNNaXJyb3JTeXN0ZW1fbGlicmFyaWVzX2NvbXB1dGVJc29sYXRlTWlycm9yU3lzdGVtX2lzb2xhdGVNaXJyb3JTeXN0ZW0gZm9yIGlzb2xhdGUgJ19Tb3VyY2VMb2NhdGlvbl9Mb2NhbE1pcnJvcl9Mb2NhbElzb2xhdGVNaXJyb3Jyb290TGlicmFyeWlzQ3VycmVudElzb2xhdGVNaXJyb3Igb24gJ2xvYWRVcmlDYW5ub3QgbG9hZCBfbG9hZFVyaUlzb2xhdGVNaXJyb3JfbG9hZFVyaV9TeW50aGV0aWNBY2Nlc3NvcnNpbXBsZU5hbWVpc0NvbnN0Q29uc3RydWN0b3Jpc1JlZGlyZWN0aW5nQ29uc3RydWN0b3JfU3ludGhldGljU2V0dGVyUGFyYW1ldGVyaGFzRGVmYXVsdFZhbHVlX0xvY2FsT2JqZWN0TWlycm9yX3JlZmxlY3RlZV9pbnZva2VyZWZsZWN0ZWVfaW52b2tlR2V0dGVyX2ludm9rZVNldHRlcm51bVBvc2l0aW9uYWxBcmd1bWVudHNudW1OYW1lZEFyZ3VtZW50c3NldEZpZWxkdW53cmFwcGVkd2l0aG91dEVxdWFsX0xvY2FsSW5zdGFuY2VNaXJyb3JoYXNSZWZsZWN0ZWVJbnN0YW5jZU1pcnJvciBvbiBJbnN0YW5jZU1pcnJvcl9pbnZva2VJbnN0YW5jZU1pcnJvcl9pbnZva2VHZXR0ZXJJbnN0YW5jZU1pcnJvcl9pbnZva2VTZXR0ZXJfY29tcHV0ZVR5cGVJbnN0YW5jZU1pcnJvcl9jb21wdXRlVHlwZV9Mb2NhbENsb3N1cmVNaXJyb3JfZnVuY3Rpb25DbG9zdXJlTWlycm9yIG9uICdfY29tcHV0ZUZ1bmN0aW9uQ2xvc3VyZU1pcnJvcl9mdW5jdGlvbl9Mb2NhbFR5cGVNaXJyb3JfcmVmbGVjdGVkVHlwZV9Mb2NhbENsYXNzTWlycm9yX3NpbXBsZU5hbWVfb3duZXJfaXNHZW5lcmljX2lzVHJhbnNmb3JtZWRNaXhpbkFwcGxpY2F0aW9uX2lzR2VuZXJpY0RlY2xhcmF0aW9uX2luc3RhbnRpYXRvcl9xdWFsaWZpZWROYW1lX3RydWVTdXBlcmNsYXNzRmllbGRfc3VwZXJpbnRlcmZhY2VzX2NhY2hlZFN0YXRpY01lbWJlcnNfY2FjaGVkSW5zdGFuY2VNZW1iZXJzX2RlY2xhcmF0aW9uc3JlZmxlY3RlZFR5cGVoYXNSZWZsZWN0ZWRUeXBlRGVjbGFyYXRpb25zIG9mIGdlbmVyaWNzIGhhdmUgbm8gcmVmbGVjdGVkIHR5cGVfbWl4aW5BcHBsaWNhdGlvbk5hbWVfdHJ1ZVN1cGVyY2xhc3Npc09yaWdpbmFsRGVjbGFyYXRpb25zdXBlcmludGVyZmFjZXNpbnRlcmZhY2VUeXBlc2ludGVyZmFjZU1pcnJvcnNtaXhpblR5cGVzdGF0aWNNZW1iZXJzaW5zdGFuY2VNZW1iZXJzZGVjbHNfY29tcHV0ZUNvbnN0cnVjdG9yc3N0cmluZ05hbWVfcGF0Y2hDb25zdHJ1Y3Rvck5hbWVfaXNBbm9ueW1vdXNNaXhpbkFwcGxpY2F0aW9ub3JpZ2luYWxEZWNsYXJhdGlvbm1pcnJvckNsYXNzTWlycm9yIG9uICdpc0Fzc2lnbmFibGVUb290aGVyUmVmbGVjdGVkVHlwZW90aGVyRGVjbGFyYXRpb25fbGlicmFyeVVyaUNsYXNzTWlycm9yX2xpYnJhcnlVcmlfc3VwZXJ0eXBlQ2xhc3NNaXJyb3Jfc3VwZXJ0eXBlX3N1cGVydHlwZUluc3RhbnRpYXRlZENsYXNzTWlycm9yX3N1cGVydHlwZV9pbnN0YW50aWF0ZWRfbmF0aXZlSW50ZXJmYWNlc0NsYXNzTWlycm9yX2ludGVyZmFjZXNfbmF0aXZlSW50ZXJmYWNlc0luc3RhbnRpYXRlZENsYXNzTWlycm9yX2ludGVyZmFjZXNfaW5zdGFudGlhdGVkX25hdGl2ZU1peGluQ2xhc3NNaXJyb3JfbWl4aW5fbmF0aXZlTWl4aW5JbnN0YW50aWF0ZWRDbGFzc01pcnJvcl9taXhpbl9pbnN0YW50aWF0ZWRfY29tcHV0ZU1lbWJlcnNDbGFzc01pcnJvcl9tZW1iZXJzQ2xhc3NNaXJyb3JfY29uc3RydWN0b3JzQ2xhc3NNaXJyb3JfaW52b2tlQ2xhc3NNaXJyb3JfaW52b2tlR2V0dGVyQ2xhc3NNaXJyb3JfaW52b2tlU2V0dGVyX2ludm9rZUNvbnN0cnVjdG9yQ2xhc3NNaXJyb3JfaW52b2tlQ29uc3RydWN0b3JfQ2xhc3NNaXJyb3JfdHlwZV92YXJpYWJsZXNDbGFzc01pcnJvcl90eXBlX3ZhcmlhYmxlc19jb21wdXRlVHlwZUFyZ3VtZW50c0NsYXNzTWlycm9yX3R5cGVfYXJndW1lbnRzX0xvY2FsRnVuY3Rpb25UeXBlTWlycm9yX2Z1bmN0aW9uUmVmbGVjdGVlX2NhbGxNZXRob2RfcGFyYW1ldGVyc19GdW5jdGlvblR5cGVNaXJyb3JfY2FsbF9tZXRob2RfRnVuY3Rpb25UeXBlTWlycm9yX3BhcmFtZXRlcnNGdW5jdGlvblR5cGVNaXJyb3Igb24gJ0Z1bmN0aW9uVHlwZU1pcnJvcl9jYWxsX21ldGhvZGZ1bmN0aW9uUmVmbGVjdGVlX0Z1bmN0aW9uVHlwZU1pcnJvcl9yZXR1cm5fdHlwZUZ1bmN0aW9uVHlwZU1pcnJvcl9yZXR1cm5fdHlwZUZ1bmN0aW9uVHlwZU1pcnJvcl9wYXJhbWV0ZXJzX0xvY2FsRGVjbGFyYXRpb25NaXJyb3JfTG9jYWxUeXBlVmFyaWFibGVNaXJyb3JfdXBwZXJCb3VuZFR5cGUgdmFyaWFibGVzIGhhdmUgbm8gcmVmbGVjdGVkIHR5cGVUeXBlVmFyaWFibGVNaXJyb3Igb24gJ19UeXBlVmFyaWFibGVNaXJyb3Jfb3duZXJUeXBlVmFyaWFibGVNaXJyb3Jfb3duZXJfVHlwZVZhcmlhYmxlTWlycm9yX3VwcGVyX2JvdW5kVHlwZVZhcmlhYmxlTWlycm9yX3VwcGVyX2JvdW5kX0xvY2FsVHlwZWRlZk1pcnJvcl9yZWZlcmVudHJlZmVyZW50VHlwZWRlZk1pcnJvciBvbiAnX25hdGl2ZVJlZmVyZW50VHlwZWRlZk1pcnJvcl9yZWZlcmVudF9uYXRpdmVEZWNsYXJhdGlvblR5cGVkZWZNaXJyb3JfZGVjbGFyYXRpb25fTG9jYWxMaWJyYXJ5TWlycm9yX2NhY2hlZExpYnJhcnlEZXBlbmRlbmNpZXNMaWJyYXJ5TWlycm9yIG9uICdsaWJyYXJ5RGVwZW5kZW5jaWVzX2xpYnJhcnlEZXBlbmRlbmNpZXNMaWJyYXJ5TWlycm9yX2xpYnJhcnlEZXBlbmRlbmNpZXNMaWJyYXJ5TWlycm9yX2ludm9rZUxpYnJhcnlNaXJyb3JfaW52b2tlR2V0dGVyTGlicmFyeU1pcnJvcl9pbnZva2VTZXR0ZXJMaWJyYXJ5TWlycm9yX21lbWJlcnNfTG9jYWxMaWJyYXJ5RGVwZW5kZW5jeU1pcnJvcl90YXJnZXRNaXJyb3JPclByZWZpeG11dGFibGVDb21iaW5hdG9yc3ByZWZpeFN0cmluZ3Vud3JhcHBlZE1ldGFkYXRhbWlycm9yT3JOdWxsc2F2ZWRQcmVmaXhfdHJ5VXBncmFkZVByZWZpeExpYnJhcnlNaXJyb3JfZnJvbVByZWZpeF9Mb2NhbENvbWJpbmF0b3JNaXJyb3JpZGVudGlmaWVyc2lkZW50aWZpZXJTdHJpbmdfTG9jYWxNZXRob2RNaXJyb3Jfa2luZEZsYWdza0Fic3RyYWN0a0dldHRlcmtTZXR0ZXJrQ29uc3RydWN0b3JrQ29uc3RDdG9ya0dlbmVyYXRpdmVDdG9ya1JlZGlyZWN0aW5nQ3RvcmtGYWN0b3J5Q3RvcmtFeHRlcm5hbGtTeW50aGV0aWNfb3BlcmF0b3JzX2NvbnN0cnVjdG9yTmFtZV9NZXRob2RNaXJyb3JfcGFyYW1ldGVyc0ludGVybmFsIGVycm9yIGluIE1ldGhvZE1pcnJvci5jb25zdHJ1Y3Rvck5hbWU6IG1hbGZvcm1lZCBuYW1lIDxkZWZpbmluZ0xpYnJhcnlvd25lck5hbWVjbk1ldGhvZE1pcnJvciBvbiAnX01ldGhvZE1pcnJvcl9vd25lck1ldGhvZE1pcnJvcl9vd25lcl9NZXRob2RNaXJyb3JfcmV0dXJuX3R5cGVNZXRob2RNaXJyb3JfcmV0dXJuX3R5cGVNZXRob2RNaXJyb3JfcGFyYW1ldGVyc19NZXRob2RNaXJyb3Jfc291cmNlTWV0aG9kTWlycm9yX3NvdXJjZV9Mb2NhbFZhcmlhYmxlTWlycm9ydW5leHBlY3RlZCBvd25lciBWYXJpYWJsZU1pcnJvciBvbiAnX1ZhcmlhYmxlTWlycm9yX3R5cGVWYXJpYWJsZU1pcnJvcl90eXBlX0xvY2FsUGFyYW1ldGVyTWlycm9yX3VubWlycm9yZWRNZXRhZGF0YV9kZWZhdWx0VmFsdWVSZWZsZWN0ZWVQYXJhbWV0ZXJNaXJyb3IubG9jYXRpb24gdW5pbXBsZW1lbnRlZFBhcmFtZXRlck1pcnJvciBvbiAnX1BhcmFtZXRlck1pcnJvcl90eXBlUGFyYW1ldGVyTWlycm9yX3R5cGVfU3BlY2lhbFR5cGVNaXJyb3J2b2lkIGhhcyBubyByZWZsZWN0ZWQgdHlwZVR5cGVNaXJyb3Igb24gJ19NaXJyb3JzX2N1cnJlbnRNaXJyb3JTeXN0ZW1fZGVjbGFyYXRpb25DYWNoZUNsYXNzTWlycm9yX2luc3RhbnRpYXRpb25DYWNoZVR5cGVNaXJyb3JjdXJyZW50TWlycm9yU3lzdGVtcmVmbGVjdF9tYWtlTG9jYWxDbGFzc01pcnJvck1pcnJvcnNfbWFrZUxvY2FsQ2xhc3NNaXJyb3JfbWFrZUxvY2FsVHlwZU1pcnJvck1pcnJvcnNfbWFrZUxvY2FsVHlwZU1pcnJvcl9pbnN0YW50aWF0ZUdlbmVyaWNUeXBlTWlycm9yc19pbnN0YW50aWF0ZUdlbmVyaWNUeXBlcmVmbGVjdENsYXNzY2xhc3NNaXJyb3JyZWZsZWN0VHlwZXR5cGVNaXJyb3JfaW5zdGFudGlhdGVUeXBlVHlwZSBhcmd1bWVudHMgbGlzdCBjYW5ub3QgYmUgZW1wdHkuX01pcnJvclJlZmVyZW5jZU1pcnJvclJlZmVyZW5jZV9lcXVhbHNNaXJyb3JTeXN0ZW1fbWFuZ2xlTmFtZU1pcnJvcnNfbWFuZ2xlTmFtZWZpbmRMaWJyYXJ5VGhlcmUgYXJlIG11bHRpcGxlIGxpYnJhcmllcyBuYW1lZCBUaGVyZSBpcyBubyBsaWJyYXJ5IG5hbWVkICdnZXRTeW1ib2xNaXJyb3JJc29sYXRlTWlycm9yRGVjbGFyYXRpb25NaXJyb3JPYmplY3RNaXJyb3JJbnN0YW5jZU1pcnJvckNsb3N1cmVNaXJyb3JMaWJyYXJ5TWlycm9yTGlicmFyeURlcGVuZGVuY3lNaXJyb3JDb21iaW5hdG9yTWlycm9yRnVuY3Rpb25UeXBlTWlycm9yVHlwZVZhcmlhYmxlTWlycm9yVHlwZWRlZk1pcnJvck1ldGhvZE1pcnJvclZhcmlhYmxlTWlycm9yUGFyYW1ldGVyTWlycm9ydHJpbW1lZFRleHRpc0RvY0NvbW1lbnRNaXJyb3JzVXNlZE5vIGxvbmdlciBoYXMgYW55IGVmZmVjdC4gV2lsbCBiZSByZW1vdmVkIGluIGEgbGF0ZXIgcmVsZWFzZS5zeW1ib2xzbWV0YVRhcmdldHNvdmVycmlkZV9kaXJ0eV9uX2NvbXB1dGVRdWFsaWZpZWROYW1lX21ha2VTaWduYXR1cmVTdHJpbmdmb3VuZF9vcHRpb25hbF9wb3NpdGlvbmFsZm91bmRfb3B0aW9uYWxfbmFtZWREZWNsYXJhdGlvbk1pcnJvcl9sb2NhdGlvbkRlY2xhcmF0aW9uTWlycm9yX21ldGFkYXRhX3N1YnR5cGVUZXN0VHlwZU1pcnJvcl9zdWJ0eXBlVGVzdF9hc1NldHRlcmRhcnQucHJvZmlsZXJEYXJ0IFNESyAxLjEyZGFydC50eXBlZF9kYXRhdW5tb2RpZmlhYmxlX3R5cGVkX2RhdGEuZGFydF9UeXBlZExpc3RCYXNlQ2Fubm90IHJlc2l6ZSBhIGZpeGVkLWxlbmd0aCBsaXN0VHlwZWREYXRhX3NldFJhbmdlc3RhcnRJbkJ5dGVzc3RhcnRGcm9tSW5CeXRlc3RvQ2lkZnJvbUNpZF9JbnRMaXN0TWl4aW5DYW5ub3QgaW5zZXJ0IGludG8gYSBmaXhlZC1sZW5ndGggbGlzdF9UeXBlZEludExpc3RNaXhpblNwYXduZWRUeXBlX2NyZWF0ZUxpc3Rmcm9tQXNUeXBlZExpc3Rmcm9tQXNMaXN0dGVtcEJ1ZmZlcl9Eb3VibGVMaXN0TWl4aW5fVHlwZWREb3VibGVMaXN0TWl4aW5fRmxvYXQzMng0TGlzdE1peGluU0lNRCBkb24ndCBoYXZlIGRlZmF1bHQgY29tcGFyZS5fSW50MzJ4NExpc3RNaXhpbl9GbG9hdDY0eDJMaXN0TWl4aW5fQnl0ZUJ1ZmZlcl9OZXdhc0ludDhMaXN0YXNVaW50OENsYW1wZWRMaXN0YXNJbnQxNkxpc3Rhc1VpbnQxNkxpc3Rhc0ludDMyTGlzdGFzVWludDMyTGlzdGFzSW50NjRMaXN0YXNVaW50NjRMaXN0YXNGbG9hdDMyTGlzdGFzRmxvYXQ2NExpc3Rhc0Zsb2F0MzJ4NExpc3Rhc0ludDMyeDRMaXN0YXNGbG9hdDY0eDJMaXN0X1R5cGVkTGlzdFR5cGVkRGF0YV9sZW5ndGhfZ2V0SW50OFR5cGVkRGF0YV9HZXRJbnQ4X3NldEludDhUeXBlZERhdGFfU2V0SW50OF9nZXRVaW50OFR5cGVkRGF0YV9HZXRVaW50OF9zZXRVaW50OFR5cGVkRGF0YV9TZXRVaW50OF9nZXRJbnQxNlR5cGVkRGF0YV9HZXRJbnQxNl9zZXRJbnQxNlR5cGVkRGF0YV9TZXRJbnQxNl9nZXRVaW50MTZUeXBlZERhdGFfR2V0VWludDE2X3NldFVpbnQxNlR5cGVkRGF0YV9TZXRVaW50MTZfZ2V0SW50MzJUeXBlZERhdGFfR2V0SW50MzJfc2V0SW50MzJUeXBlZERhdGFfU2V0SW50MzJfZ2V0VWludDMyVHlwZWREYXRhX0dldFVpbnQzMl9zZXRVaW50MzJUeXBlZERhdGFfU2V0VWludDMyX2dldEludDY0VHlwZWREYXRhX0dldEludDY0X3NldEludDY0VHlwZWREYXRhX1NldEludDY0X2dldFVpbnQ2NFR5cGVkRGF0YV9HZXRVaW50NjRfc2V0VWludDY0VHlwZWREYXRhX1NldFVpbnQ2NF9nZXRGbG9hdDMyVHlwZWREYXRhX0dldEZsb2F0MzJfc2V0RmxvYXQzMlR5cGVkRGF0YV9TZXRGbG9hdDMyX2dldEZsb2F0NjRUeXBlZERhdGFfR2V0RmxvYXQ2NF9zZXRGbG9hdDY0VHlwZWREYXRhX1NldEZsb2F0NjRfZ2V0RmxvYXQzMng0VHlwZWREYXRhX0dldEZsb2F0MzJ4NF9zZXRGbG9hdDMyeDRUeXBlZERhdGFfU2V0RmxvYXQzMng0X2dldEludDMyeDRUeXBlZERhdGFfR2V0SW50MzJ4NF9zZXRJbnQzMng0VHlwZWREYXRhX1NldEludDMyeDRfZ2V0RmxvYXQ2NHgyVHlwZWREYXRhX0dldEZsb2F0NjR4Ml9zZXRGbG9hdDY0eDJUeXBlZERhdGFfU2V0RmxvYXQ2NHgyX3NldENvZGVVbml0c2J5dGVTdGFydHNraXBDb3VudCArIGxlbmd0aF9fSW50OExpc3QmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluX19JbnQ4TGlzdCZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX0ludDhMaXN0X19VaW50OExpc3QmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluX19VaW50OExpc3QmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9VaW50OExpc3RfX1VpbnQ4Q2xhbXBlZExpc3QmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluX19VaW50OENsYW1wZWRMaXN0Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fVWludDhDbGFtcGVkTGlzdF9fSW50MTZMaXN0Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fSW50MTZMaXN0Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fSW50MTZMaXN0X2dldEluZGV4ZWRJbnQxNl9zZXRJbmRleGVkSW50MTZfX1VpbnQxNkxpc3QmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluX19VaW50MTZMaXN0Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fVWludDE2TGlzdF9nZXRJbmRleGVkVWludDE2X3NldEluZGV4ZWRVaW50MTZfX0ludDMyTGlzdCZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW5fX0ludDMyTGlzdCZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX0ludDMyTGlzdF9nZXRJbmRleGVkSW50MzJfc2V0SW5kZXhlZEludDMyX19VaW50MzJMaXN0Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fVWludDMyTGlzdCZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX1VpbnQzMkxpc3RfZ2V0SW5kZXhlZFVpbnQzMl9zZXRJbmRleGVkVWludDMyX19JbnQ2NExpc3QmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluX19JbnQ2NExpc3QmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9JbnQ2NExpc3RfZ2V0SW5kZXhlZEludDY0X3NldEluZGV4ZWRJbnQ2NF9fVWludDY0TGlzdCZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW5fX1VpbnQ2NExpc3QmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9VaW50NjRMaXN0X2dldEluZGV4ZWRVaW50NjRfc2V0SW5kZXhlZFVpbnQ2NF9fRmxvYXQzMkxpc3QmX1R5cGVkTGlzdCZfRG91YmxlTGlzdE1peGluX19GbG9hdDMyTGlzdCZfVHlwZWRMaXN0Jl9Eb3VibGVMaXN0TWl4aW4mX1R5cGVkRG91YmxlTGlzdE1peGluX0Zsb2F0MzJMaXN0X2dldEluZGV4ZWRGbG9hdDMyX3NldEluZGV4ZWRGbG9hdDMyX19GbG9hdDY0TGlzdCZfVHlwZWRMaXN0Jl9Eb3VibGVMaXN0TWl4aW5fX0Zsb2F0NjRMaXN0Jl9UeXBlZExpc3QmX0RvdWJsZUxpc3RNaXhpbiZfVHlwZWREb3VibGVMaXN0TWl4aW5fRmxvYXQ2NExpc3RfZ2V0SW5kZXhlZEZsb2F0NjRfc2V0SW5kZXhlZEZsb2F0NjRfX0Zsb2F0MzJ4NExpc3QmX1R5cGVkTGlzdCZfRmxvYXQzMng0TGlzdE1peGluX0Zsb2F0MzJ4NExpc3RfZ2V0SW5kZXhlZEZsb2F0MzJ4NF9zZXRJbmRleGVkRmxvYXQzMng0X19JbnQzMng0TGlzdCZfVHlwZWRMaXN0Jl9JbnQzMng0TGlzdE1peGluX0ludDMyeDRMaXN0X2dldEluZGV4ZWRJbnQzMng0X3NldEluZGV4ZWRJbnQzMng0X19GbG9hdDY0eDJMaXN0Jl9UeXBlZExpc3QmX0Zsb2F0NjR4Mkxpc3RNaXhpbl9GbG9hdDY0eDJMaXN0X2dldEluZGV4ZWRGbG9hdDY0eDJfc2V0SW5kZXhlZEZsb2F0NjR4Ml9fRXh0ZXJuYWxJbnQ4QXJyYXkmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluX19FeHRlcm5hbEludDhBcnJheSZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX0V4dGVybmFsSW50OEFycmF5X19FeHRlcm5hbFVpbnQ4QXJyYXkmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluX19FeHRlcm5hbFVpbnQ4QXJyYXkmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9FeHRlcm5hbFVpbnQ4QXJyYXlfX0V4dGVybmFsVWludDhDbGFtcGVkQXJyYXkmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluX19FeHRlcm5hbFVpbnQ4Q2xhbXBlZEFycmF5Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fRXh0ZXJuYWxVaW50OENsYW1wZWRBcnJheV9fRXh0ZXJuYWxJbnQxNkFycmF5Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fRXh0ZXJuYWxJbnQxNkFycmF5Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fRXh0ZXJuYWxJbnQxNkFycmF5X19FeHRlcm5hbFVpbnQxNkFycmF5Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fRXh0ZXJuYWxVaW50MTZBcnJheSZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX0V4dGVybmFsVWludDE2QXJyYXlfX0V4dGVybmFsSW50MzJBcnJheSZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW5fX0V4dGVybmFsSW50MzJBcnJheSZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX0V4dGVybmFsSW50MzJBcnJheV9fRXh0ZXJuYWxVaW50MzJBcnJheSZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW5fX0V4dGVybmFsVWludDMyQXJyYXkmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9FeHRlcm5hbFVpbnQzMkFycmF5X19FeHRlcm5hbEludDY0QXJyYXkmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluX19FeHRlcm5hbEludDY0QXJyYXkmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9FeHRlcm5hbEludDY0QXJyYXlfX0V4dGVybmFsVWludDY0QXJyYXkmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluX19FeHRlcm5hbFVpbnQ2NEFycmF5Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fRXh0ZXJuYWxVaW50NjRBcnJheV9fRXh0ZXJuYWxGbG9hdDMyQXJyYXkmX1R5cGVkTGlzdCZfRG91YmxlTGlzdE1peGluX19FeHRlcm5hbEZsb2F0MzJBcnJheSZfVHlwZWRMaXN0Jl9Eb3VibGVMaXN0TWl4aW4mX1R5cGVkRG91YmxlTGlzdE1peGluX0V4dGVybmFsRmxvYXQzMkFycmF5X19FeHRlcm5hbEZsb2F0NjRBcnJheSZfVHlwZWRMaXN0Jl9Eb3VibGVMaXN0TWl4aW5fX0V4dGVybmFsRmxvYXQ2NEFycmF5Jl9UeXBlZExpc3QmX0RvdWJsZUxpc3RNaXhpbiZfVHlwZWREb3VibGVMaXN0TWl4aW5fRXh0ZXJuYWxGbG9hdDY0QXJyYXlfX0V4dGVybmFsRmxvYXQzMng0QXJyYXkmX1R5cGVkTGlzdCZfRmxvYXQzMng0TGlzdE1peGluX0V4dGVybmFsRmxvYXQzMng0QXJyYXlfX0V4dGVybmFsSW50MzJ4NEFycmF5Jl9UeXBlZExpc3QmX0ludDMyeDRMaXN0TWl4aW5fRXh0ZXJuYWxJbnQzMng0QXJyYXlfX0V4dGVybmFsRmxvYXQ2NHgyQXJyYXkmX1R5cGVkTGlzdCZfRmxvYXQ2NHgyTGlzdE1peGluX0V4dGVybmFsRmxvYXQ2NHgyQXJyYXlfRmxvYXQzMng0RmxvYXQzMng0X2FkZEZsb2F0MzJ4NF9uZWdhdGVGbG9hdDMyeDRfc3ViRmxvYXQzMng0X211bEZsb2F0MzJ4NF9kaXZGbG9hdDMyeDRfY21wbHRsZXNzVGhhbk9yRXF1YWxGbG9hdDMyeDRfY21wbHRlRmxvYXQzMng0X2NtcGd0Z3JlYXRlclRoYW5PckVxdWFsRmxvYXQzMng0X2NtcGd0ZUZsb2F0MzJ4NF9jbXBlcXVhbG5vdEVxdWFsRmxvYXQzMng0X2NtcG5lcXVhbHNjYWxlRmxvYXQzMng0X3NjYWxlRmxvYXQzMng0X2Fic2NsYW1wRmxvYXQzMng0X2NsYW1wRmxvYXQzMng0X2dldFhGbG9hdDMyeDRfZ2V0WUZsb2F0MzJ4NF9nZXRaRmxvYXQzMng0X2dldFdzaWduTWFza0Zsb2F0MzJ4NF9nZXRTaWduTWFza0Zsb2F0MzJ4NF9zaHVmZmxlc2h1ZmZsZU1peEZsb2F0MzJ4NF9zaHVmZmxlTWl4end3aXRoWEZsb2F0MzJ4NF9zZXRYd2l0aFlGbG9hdDMyeDRfc2V0WXdpdGhaRmxvYXQzMng0X3NldFp3aXRoV0Zsb2F0MzJ4NF9zZXRXRmxvYXQzMng0X21pbkZsb2F0MzJ4NF9tYXhGbG9hdDMyeDRfc3FydHJlY2lwcm9jYWxGbG9hdDMyeDRfcmVjaXByb2NhbHJlY2lwcm9jYWxTcXJ0RmxvYXQzMng0X3JlY2lwcm9jYWxTcXJ0X0ludDMyeDRJbnQzMng0X29ySW50MzJ4NF9hbmRJbnQzMng0X3hvckludDMyeDRfYWRkSW50MzJ4NF9zdWJJbnQzMng0X2dldFhJbnQzMng0X2dldFlJbnQzMng0X2dldFpJbnQzMng0X2dldFdJbnQzMng0X2dldFNpZ25NYXNrSW50MzJ4NF9zaHVmZmxlSW50MzJ4NF9zaHVmZmxlTWl4SW50MzJ4NF9zZXRYSW50MzJ4NF9zZXRZSW50MzJ4NF9zZXRaSW50MzJ4NF9zZXRXZmxhZ1hJbnQzMng0X2dldEZsYWdYZmxhZ1lJbnQzMng0X2dldEZsYWdZZmxhZ1pJbnQzMng0X2dldEZsYWdaZmxhZ1dJbnQzMng0X2dldEZsYWdXd2l0aEZsYWdYSW50MzJ4NF9zZXRGbGFnWHdpdGhGbGFnWUludDMyeDRfc2V0RmxhZ1l3aXRoRmxhZ1pJbnQzMng0X3NldEZsYWdad2l0aEZsYWdXSW50MzJ4NF9zZXRGbGFnV0ludDMyeDRfc2VsZWN0X0Zsb2F0NjR4MkZsb2F0NjR4Ml9hZGRGbG9hdDY0eDJfbmVnYXRlRmxvYXQ2NHgyX3N1YkZsb2F0NjR4Ml9tdWxGbG9hdDY0eDJfZGl2RmxvYXQ2NHgyX3NjYWxlRmxvYXQ2NHgyX2Fic0Zsb2F0NjR4Ml9jbGFtcEZsb2F0NjR4Ml9nZXRYRmxvYXQ2NHgyX2dldFlGbG9hdDY0eDJfZ2V0U2lnbk1hc2tGbG9hdDY0eDJfc2V0WEZsb2F0NjR4Ml9zZXRZRmxvYXQ2NHgyX21pbkZsb2F0NjR4Ml9tYXhGbG9hdDY0eDJfc3FydF9UeXBlZExpc3RJdGVyYXRvcl9hcnJheV9UeXBlZExpc3RWaWV3X3R5cGVkRGF0YXZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZVR5cGVkRGF0YVZpZXdfdHlwZWREYXRhVHlwZWREYXRhVmlld19vZmZzZXRJbkJ5dGVzVHlwZWREYXRhVmlld19sZW5ndGhfX0ludDhBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0ludExpc3RNaXhpbl9fSW50OEFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9JbnQ4QXJyYXlWaWV3VHlwZWREYXRhVmlld19JbnQ4QXJyYXlWaWV3X25ld19fVWludDhBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0ludExpc3RNaXhpbl9fVWludDhBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fVWludDhBcnJheVZpZXdUeXBlZERhdGFWaWV3X1VpbnQ4QXJyYXlWaWV3X25ld19fVWludDhDbGFtcGVkQXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9JbnRMaXN0TWl4aW5fX1VpbnQ4Q2xhbXBlZEFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9VaW50OENsYW1wZWRBcnJheVZpZXdUeXBlZERhdGFWaWV3X1VpbnQ4Q2xhbXBlZEFycmF5Vmlld19uZXdfX0ludDE2QXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9JbnRMaXN0TWl4aW5fX0ludDE2QXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX0ludDE2QXJyYXlWaWV3VHlwZWREYXRhVmlld19JbnQxNkFycmF5Vmlld19uZXdfX1VpbnQxNkFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfSW50TGlzdE1peGluX19VaW50MTZBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fVWludDE2QXJyYXlWaWV3VHlwZWREYXRhVmlld19VaW50MTZBcnJheVZpZXdfbmV3X19JbnQzMkFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfSW50TGlzdE1peGluX19JbnQzMkFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9JbnQzMkFycmF5Vmlld1R5cGVkRGF0YVZpZXdfSW50MzJBcnJheVZpZXdfbmV3X19VaW50MzJBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0ludExpc3RNaXhpbl9fVWludDMyQXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX1VpbnQzMkFycmF5Vmlld1R5cGVkRGF0YVZpZXdfVWludDMyQXJyYXlWaWV3X25ld19fSW50NjRBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0ludExpc3RNaXhpbl9fSW50NjRBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fSW50NjRBcnJheVZpZXdUeXBlZERhdGFWaWV3X0ludDY0QXJyYXlWaWV3X25ld19fVWludDY0QXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9JbnRMaXN0TWl4aW5fX1VpbnQ2NEFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9VaW50NjRBcnJheVZpZXdUeXBlZERhdGFWaWV3X1VpbnQ2NEFycmF5Vmlld19uZXdfX0Zsb2F0MzJBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0RvdWJsZUxpc3RNaXhpbl9fRmxvYXQzMkFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfRG91YmxlTGlzdE1peGluJl9UeXBlZERvdWJsZUxpc3RNaXhpbl9GbG9hdDMyQXJyYXlWaWV3VHlwZWREYXRhVmlld19GbG9hdDMyQXJyYXlWaWV3X25ld19fRmxvYXQ2NEFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfRG91YmxlTGlzdE1peGluX19GbG9hdDY0QXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9Eb3VibGVMaXN0TWl4aW4mX1R5cGVkRG91YmxlTGlzdE1peGluX0Zsb2F0NjRBcnJheVZpZXdUeXBlZERhdGFWaWV3X0Zsb2F0NjRBcnJheVZpZXdfbmV3X19GbG9hdDMyeDRBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0Zsb2F0MzJ4NExpc3RNaXhpbl9GbG9hdDMyeDRBcnJheVZpZXdUeXBlZERhdGFWaWV3X0Zsb2F0MzJ4NEFycmF5Vmlld19uZXdfX0ludDMyeDRBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0ludDMyeDRMaXN0TWl4aW5fSW50MzJ4NEFycmF5Vmlld1R5cGVkRGF0YVZpZXdfSW50MzJ4NEFycmF5Vmlld19uZXdfX0Zsb2F0NjR4MkFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfRmxvYXQ2NHgyTGlzdE1peGluX0Zsb2F0NjR4MkFycmF5Vmlld1R5cGVkRGF0YVZpZXdfRmxvYXQ2NHgyQXJyYXlWaWV3X25ld19CeXRlRGF0YVZpZXdUeXBlZERhdGFWaWV3X0J5dGVEYXRhVmlld19uZXdnZXRJbnQ4c2V0SW50OGdldFVpbnQ4c2V0VWludDhnZXRJbnQxNnNldEludDE2Z2V0SW50MzJzZXRJbnQzMmdldEludDY0c2V0SW50NjRnZXRVaW50NjRzZXRVaW50NjRnZXRGbG9hdDMyc2V0RmxvYXQzMmdldEZsb2F0MzJ4NHNldEZsb2F0MzJ4NF9UeXBlZEludExpc3RfVHlwZWRGbG9hdExpc3RFbmRpYW5fbGl0dGxlRW5kaWFuYmlnbGl0dGxlQnl0ZURhdGFfdmlld3R5cGVkRGF0YUludDhMaXN0Ynl0ZXNQZXJFbGVtZW50VHlwZWREYXRhX0ludDhBcnJheV9uZXdUeXBlZERhdGFfVWludDhBcnJheV9uZXdVaW50OENsYW1wZWRMaXN0VHlwZWREYXRhX1VpbnQ4Q2xhbXBlZEFycmF5X25ld0ludDE2TGlzdFR5cGVkRGF0YV9JbnQxNkFycmF5X25ld1R5cGVkRGF0YV9VaW50MTZBcnJheV9uZXdUeXBlZERhdGFfSW50MzJBcnJheV9uZXdUeXBlZERhdGFfVWludDMyQXJyYXlfbmV3SW50NjRMaXN0VHlwZWREYXRhX0ludDY0QXJyYXlfbmV3VWludDY0TGlzdFR5cGVkRGF0YV9VaW50NjRBcnJheV9uZXdGbG9hdDMyTGlzdFR5cGVkRGF0YV9GbG9hdDMyQXJyYXlfbmV3RmxvYXQ2NExpc3RUeXBlZERhdGFfRmxvYXQ2NEFycmF5X25ld0Zsb2F0MzJ4NExpc3RUeXBlZERhdGFfRmxvYXQzMng0QXJyYXlfbmV3SW50MzJ4NExpc3RUeXBlZERhdGFfSW50MzJ4NEFycmF5X25ld0Zsb2F0NjR4Mkxpc3RUeXBlZERhdGFfRmxvYXQ2NHgyQXJyYXlfbmV3RmxvYXQzMng0eHh4eHh4eHl4eHh6eHh4d3h4eXh4eHl5eHh5enh4eXd4eHp4eHh6eXh4enp4eHp3eHh3eHh4d3l4eHd6eHh3d3h5eHh4eXh5eHl4enh5eHd4eXl4eHl5eXh5eXp4eXl3eHl6eHh5enl4eXp6eHl6d3h5d3h4eXd5eHl3enh5d3d4enh4eHp4eXh6eHp4enh3eHp5eHh6eXl4enl6eHp5d3h6enh4enp5eHp6enh6end4end4eHp3eXh6d3p4end3eHd4eHh3eHl4d3h6eHd4d3h3eXh4d3l5eHd5enh3eXd4d3p4eHd6eXh3enp4d3p3eHd3eHh3d3l4d3d6eHd3d3l4eHh5eHh5eXh4enl4eHd5eHl4eXh5eXl4eXp5eHl3eXh6eHl4enl5eHp6eXh6d3l4d3h5eHd5eXh3enl4d3d5eXh4eXl4eXl5eHp5eXh3eXl5eHl5eXl5eXl6eXl5d3l5enh5eXp5eXl6enl5end5eXd4eXl3eXl5d3p5eXd3eXp4eHl6eHl5enh6eXp4d3l6eXh5enl5eXp5enl6eXd5enp4eXp6eXl6enp5enp3eXp3eHl6d3l5end6eXp3d3l3eHh5d3h5eXd4enl3eHd5d3l4eXd5eXl3eXp5d3l3eXd6eHl3enl5d3p6eXd6d3l3d3h5d3d5eXd3enl3d3d6eHh4enh4eXp4eHp6eHh3enh5eHp4eXl6eHl6enh5d3p4enh6eHp5enh6enp4end6eHd4enh3eXp4d3p6eHd3enl4eHp5eHl6eXh6enl4d3p5eXh6eXl5enl5enp5eXd6eXp4enl6eXp5enp6eXp3enl3eHp5d3l6eXd6enl3d3p6eHh6enh5enp4enp6eHd6enl4enp5eXp6eXp6enl3enp6eHp6enl6enp6enp6d3p6d3h6end5enp3enp6d3d6d3h4end4eXp3eHp6d3h3end5eHp3eXl6d3l6end5d3p3enh6d3p5end6enp3end6d3d4end3eXp3d3p6d3d3d3h4eHd4eHl3eHh6d3h4d3d4eXh3eHl5d3h5end4eXd3eHp4d3h6eXd4enp3eHp3d3h3eHd4d3l3eHd6d3h3d3d5eHh3eXh5d3l4end5eHd3eXl4d3l5eXd5eXp3eXl3d3l6eHd5enl3eXp6d3l6d3d5d3h3eXd5d3l3end5d3d3enh4d3p4eXd6eHp3enh3d3p5eHd6eXl3enl6d3p5d3d6enh3enp5d3p6end6end3end4d3p3eXd6d3p3end3d3d4eHd3eHl3d3h6d3d4d3d3eXh3d3l5d3d5end3eXd3d3p4d3d6eXd3enp3d3p3d3d3eHd3d3l3d3d6d3d3d0Zsb2F0MzJ4NF9mcm9tRG91Ymxlc3NwbGF0RmxvYXQzMng0X3NwbGF0emVyb0Zsb2F0MzJ4NF96ZXJvZnJvbUludDMyeDRCaXRzRmxvYXQzMng0X2Zyb21JbnQzMng0Qml0c2Zyb21GbG9hdDY0eDJGbG9hdDMyeDRfZnJvbUZsb2F0NjR4MkludDMyeDRJbnQzMng0X2Zyb21JbnRzSW50MzJ4NF9mcm9tQm9vbHNmcm9tRmxvYXQzMng0Qml0c0ludDMyeDRfZnJvbUZsb2F0MzJ4NEJpdHNGbG9hdDY0eDJGbG9hdDY0eDJfZnJvbURvdWJsZXNGbG9hdDY0eDJfc3BsYXRGbG9hdDY0eDJfemVyb2Zyb21GbG9hdDMyeDRGbG9hdDY0eDJfZnJvbUZsb2F0MzJ4NFVubW9kaWZpYWJsZUJ5dGVCdWZmZXJWaWV3VW5tb2RpZmlhYmxlQnl0ZURhdGFWaWV3QW4gVW5tb2RpZmlhYmxlQnl0ZURhdGFWaWV3IG1heSBub3QgYmUgbW9kaWZpZWRfVW5tb2RpZmlhYmxlTGlzdE1peGluVERzdWJsaXN0TGVuZ3RoX1VubW9kaWZpYWJsZVVpbnQ4TGlzdFZpZXcmVW5tb2RpZmlhYmxlTGlzdEJhc2UmX1VubW9kaWZpYWJsZUxpc3RNaXhpblVubW9kaWZpYWJsZVVpbnQ4TGlzdFZpZXdfVW5tb2RpZmlhYmxlSW50OExpc3RWaWV3JlVubW9kaWZpYWJsZUxpc3RCYXNlJl9Vbm1vZGlmaWFibGVMaXN0TWl4aW5Vbm1vZGlmaWFibGVJbnQ4TGlzdFZpZXdfVW5tb2RpZmlhYmxlVWludDhDbGFtcGVkTGlzdFZpZXcmVW5tb2RpZmlhYmxlTGlzdEJhc2UmX1VubW9kaWZpYWJsZUxpc3RNaXhpblVubW9kaWZpYWJsZVVpbnQ4Q2xhbXBlZExpc3RWaWV3X1VubW9kaWZpYWJsZVVpbnQxNkxpc3RWaWV3JlVubW9kaWZpYWJsZUxpc3RCYXNlJl9Vbm1vZGlmaWFibGVMaXN0TWl4aW5Vbm1vZGlmaWFibGVVaW50MTZMaXN0Vmlld19Vbm1vZGlmaWFibGVJbnQxNkxpc3RWaWV3JlVubW9kaWZpYWJsZUxpc3RCYXNlJl9Vbm1vZGlmaWFibGVMaXN0TWl4aW5Vbm1vZGlmaWFibGVJbnQxNkxpc3RWaWV3X1VubW9kaWZpYWJsZVVpbnQzMkxpc3RWaWV3JlVubW9kaWZpYWJsZUxpc3RCYXNlJl9Vbm1vZGlmaWFibGVMaXN0TWl4aW5Vbm1vZGlmaWFibGVVaW50MzJMaXN0Vmlld19Vbm1vZGlmaWFibGVJbnQzMkxpc3RWaWV3JlVubW9kaWZpYWJsZUxpc3RCYXNlJl9Vbm1vZGlmaWFibGVMaXN0TWl4aW5Vbm1vZGlmaWFibGVJbnQzMkxpc3RWaWV3X1VubW9kaWZpYWJsZVVpbnQ2NExpc3RWaWV3JlVubW9kaWZpYWJsZUxpc3RCYXNlJl9Vbm1vZGlmaWFibGVMaXN0TWl4aW5Vbm1vZGlmaWFibGVVaW50NjRMaXN0Vmlld19Vbm1vZGlmaWFibGVJbnQ2NExpc3RWaWV3JlVubW9kaWZpYWJsZUxpc3RCYXNlJl9Vbm1vZGlmaWFibGVMaXN0TWl4aW5Vbm1vZGlmaWFibGVJbnQ2NExpc3RWaWV3X1VubW9kaWZpYWJsZUludDMyeDRMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlSW50MzJ4NExpc3RWaWV3X1VubW9kaWZpYWJsZUZsb2F0MzJ4NExpc3RWaWV3JlVubW9kaWZpYWJsZUxpc3RCYXNlJl9Vbm1vZGlmaWFibGVMaXN0TWl4aW5Vbm1vZGlmaWFibGVGbG9hdDMyeDRMaXN0Vmlld19Vbm1vZGlmaWFibGVGbG9hdDY0eDJMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlRmxvYXQ2NHgyTGlzdFZpZXdfVW5tb2RpZmlhYmxlRmxvYXQzMkxpc3RWaWV3JlVubW9kaWZpYWJsZUxpc3RCYXNlJl9Vbm1vZGlmaWFibGVMaXN0TWl4aW5Vbm1vZGlmaWFibGVGbG9hdDMyTGlzdFZpZXdfVW5tb2RpZmlhYmxlRmxvYXQ2NExpc3RWaWV3JlVubW9kaWZpYWJsZUxpc3RCYXNlJl9Vbm1vZGlmaWFibGVMaXN0TWl4aW5Vbm1vZGlmaWFibGVGbG9hdDY0TGlzdFZpZXdfY29udlUzMl9jb252VTY0X2NvbnZGMzJfY29udkY2NF9ieXRlU3dhcDE2X2J5dGVTd2FwMzI0Mjc4MjU1MzYwNDI5NDkwMTc2MF9ieXRlU3dhcDY0X3RvSW50X3RvSW50OF90b1VpbnQ4X3RvQ2xhbXBlZFVpbnQ4X3RvSW50MTZfdG9VaW50MTZfdG9JbnQzMl90b1VpbnQzMl9yYW5nZUNoZWNrX29mZnNldEFsaWdubWVudENoZWNrYWxpZ25tZW50T2Zmc2V0ICgpIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBCWVRFU19QRVJfRUxFTUVOVCAodm1zZXJ2aWNlX2lvbG9hZGVyLmRhcnRzZXJ2ZXIuZGFydFBlbmRpbmdXcml0ZXBhcmVudF9kaXJlY3RvcnljcmVhdGV3cml0ZUFzQnl0ZXNXcml0ZUxpbWl0ZXJwZW5kaW5nV3JpdGVza01heE9wZW5Xcml0ZXNvcGVuV3JpdGVzc2NoZWR1bGVXcml0ZXB3X21heWJlV3JpdGVGaWxlc193cml0ZUNvbXBsZXRlZEZpbGVSZXF1ZXN0c3BsaWJyYXJ5VXJsSXNvbGF0ZUxvYWRlclN0YXRlaXNvbGF0ZUlkX2RlYWRfd29ya2luZ0RpcmVjdG9yeV9yb290U2NyaXB0X3BhY2thZ2VFcnJvcl9wYWNrYWdlUm9vdF9wYWNrYWdlQ29uZmlnX3BhY2thZ2VNYXBfbWF4RmlsZVJlcXVlc3RzY3VycmVudEZpbGVSZXF1ZXN0c19maWxlUmVxdWVzdFF1ZXVlX3BlbmRpbmdQYWNrYWdlTG9hZHNfcGFja2FnZXNQb3J0cGFja2FnZVJvb3RGbGFncGFja2FnZXNDb25maWdGbGFnd29ya2luZ0RpcmVjdG9yeXJvb3RTY3JpcHRfc2V0UGFja2FnZVJvb3Rfc2V0UGFja2FnZXNDb25maWd1cGRhdGVQYWNrYWdlTWFwX3BhY2thZ2VzUmVhZHlzaG91bGRJc3N1ZUZpbGVSZXF1ZXN0ZW5xdWV1ZUZpbGVSZXF1ZXN0ZGVxdWV1ZUZpbGVSZXF1ZXN0aHR0cDpodHRwczpwYWNrYWdlc1BhcmFtcGFja2FnZXNOYW1lX3JlcXVlc3RQYWNrYWdlc01hcF90cmlnZ2VyUGFja2FnZVJlc29sdXRpb25fcmVzb2x2ZVBhY2thZ2VVcml3cm9uZ3BhY2thZ2U6Ly9VUklzIHVzaW5nIHRoZSAncGFja2FnZTonIHNjaGVtZSBzaG91bGQgbG9vayBsaWtlICcsIG5vdCAncGFja2FnZU5hbWVFbmRVUklTIHVzaW5nIHRoZSAncGFja2FnZTonIHNjaGVtZSBzaG91bGQgbG9vayBsaWtlICdwYWNrYWdlOnBhY2thZ2VOYW1lJywgbm90ICdwYWNrYWdlOlJlc29sdmluZyBwYWNrYWdlIHdpdGggdXJpIHBhdGg6IFJlc29sdmluZyBwYWNrYWdlIHdpdGggcGVuZGluZyByZXNvbHV0aW9uIGVycm9yOiAncGFja2FnZTovJywgbm90ICdwYWNrYWdlOk1hcHBlZCAnJyBwYWNrYWdlIHRvICdObyBtYXBwaW5nIGZvciAnJyBwYWNrYWdlIHdoZW4gcmVzb2x2aW5nICdQYXRoIHRvIGJlIHJlc29sdmVkIGluIHBhY2thZ2U6IFJlc29sdmVkICdfaGFuZGxlUGFja2FnZXNSZXBseVJlcXVlc3RlZCBwYWNrYWdlcyBtYXAgZm9yICdHb3QgcGFja2FnZXMgcmVwbHk6IEdvdCBmYWlsdXJlIHJlc3BvbnNlIG9uIHBhY2thZ2UgcG9ydDogJ1JlY2VpdmVkIHBhY2thZ2Ugcm9vdDogJ1NldHVwIHBhY2thZ2UgbWFwOiBCYWQgdHlwZSBvZiBwYWNrYWdlcyByZXBseTogcmVxV2ViU29ja2V0Q2xpZW50UEFSU0VfRVJST1JfQ09ERUJJTkFSWV9NRVNTQUdFX0VSUk9SX0NPREVOT1RfTUFQX0VSUk9SX0NPREVJRF9FUlJPUl9DT0RFc29ja2V0c2VydmljZW9uV2ViU29ja2V0TWVzc2FnZWRpc2Nvbm5lY3RNZXNzYWdlIHBhcnNlIGVycm9yOiBNZXNzYWdlIG11c3QgYmUgYSBKU09OIG1hcC5ycGNNZXNzYWdlVHlwZS5SZXF1ZXN0b25SZXF1ZXN0TWVzc2FnZVR5cGUuTm90aWZpY2F0aW9ub25Ob3RpZmljYXRpb25NZXNzYWdlVHlwZS5SZXNwb25zZW9uUmVzcG9uc2VNZXNzYWdlIG11c3QgYmUgYSBzdHJpbmcucG9zdFJlc3BvbnNlUGF5bG9hZEtpbmQuU3RyaW5nUmVzcG9uc2VQYXlsb2FkS2luZC5CaW5hcnlSZXNwb25zZVBheWxvYWRLaW5kLlV0ZjhTdHJpbmdhZGRVdGY4VGV4dEh0dHBSZXF1ZXN0Q2xpZW50anNvbkNvbnRlbnRUeXBlY2hhcnNldHNlbmRFdmVudHNBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW5DYW4gbm90IGhhbmRsZSBiaW5hcnkgcmVzcG9uc2VzV0VCU09DS0VUX1BBVEgvd3NST09UX1JFRElSRUNUX1BBVEgvaW5kZXguaHRtbF9zZXJ2aWNlX2lwX3BvcnRfb3JpZ2luQ2hlY2tEaXNhYmxlZF9hdXRoQ29kZXNEaXNhYmxlZF9zZXJ2ZXJhdXRoQ29kZXNEaXNhYmxlZHNlcnZlckFkZHJlc3NpcF9pc0FsbG93ZWRPcmlnaW5sb2NhbGhvc3Q6OjExMjcuMC4wLjFfb3JpZ2luQ2hlY2tvcmlnaW5zU2VjLVdlYlNvY2tldC1PcmlnaW5PcmlnaW5fY2hlY2tBdXRoVG9rZW5BbmRHZXRQYXRocmVxdWVzdFVyaXJlcXVlc3RQYXRoU2VnbWVudHNhdXRoVG9rZW5fcmVxdWVzdEhhbmRsZXJmb3JiaWRkZW4gb3JpZ2luUFVUZnNOYW1lTGlzdGZzUGF0aExpc3Rmc1BhdGhCYXNlNjRMaXN0ZnNVcmlCYXNlNjRMaXN0ZnNOYW1lZnNQYXRoZnNVcmlkZXZfZnNfbmFtZWRldl9mc191cmlfYjY0ZGVjb2RlZEZzVXJpZGV2X2ZzX3BhdGhkZXZfZnNfcGF0aF9iNjRkZXZmc2hhbmRsZVB1dFN0cmVhbW1ldGhvZCBub3QgYWxsb3dlZG1pc3Npbmcgb3IgaW52YWxpZCBhdXRoZW50aWNhdGlvbiBjb2Rld2ViU29ja2V0VGhpcyBWTSB3YXMgYnVpbHQgd2l0aG91dCB0aGUgT2JzZXJ2YXRvcnkgVUkuYXNzZXRtaW1lVHlwZXF1ZXJ5UGFyYW1ldGVyc3N0YXJ0dXBwb2xsRXJyb3Jwb2xsU3RhY2twb2xsYWRkcmVzc2VzYXR0ZW1wdHNtYXhBdHRlbXB0c09ic2VydmF0b3J5IHNlcnZlciBmYWlsZWQgdG8gc3RhcnQgYWZ0ZXIgIHRyaWVzQ291bGQgbm90IHN0YXJ0IE9ic2VydmF0b3J5IEhUVFAgc2VydmVyOgppc0V4aXRpbmdPYnNlcnZhdG9yeSBIVFRQIHNlcnZlciBleGl0aW5nIGJlZm9yZSBsaXN0ZW5pbmcgYXMgdm0gc2VydmljZSBoYXMgcmVjZWl2ZWQgZXhpdCByZXF1ZXN0Ck9ic2VydmF0b3J5IGxpc3RlbmluZyBvbiAvZGFydC5zZXJ2aWNlcy9DcmVhdGluZyBjcmVhdGVTeW5jRGVsZXRpbmcgZGVsZXRlU3luY29sZFNlcnZlckFkZHJlc3NPYnNlcnZhdG9yeSBubyBsb25nZXIgbGlzdGVuaW5nIG9uIENvdWxkIG5vdCBzaHV0ZG93biBPYnNlcnZhdG9yeSBIVFRQIHNlcnZlcjoKX2F1dG9TdGFydF9pc1dpbmRvd3NfaXNGdWNoc2lhX3NpZ25hbFdhdGNoX3NpZ25hbFN1YnNjcmlwdGlvbnNlcnZlcnNlcnZlckZ1dHVyZV9yZWdpc3RlclNpZ25hbEhhbmRsZXJUaW1lcl90cmFjZUxvYWRpbmdfZGV0ZXJtaW5pc3RpY19odHRwQ2xpZW50X1NQQUNFX0hBU0hfRE9UX0NPTE9OX0RFTF9pbnZhbGlkUGFja2FnZU5hbWVDaGFyc19EYXJ0X2tDYW5vbmljYWxpemVVcmxfRGFydF9rU2NyaXB0VGFnX0RhcnRfa1NvdXJjZVRhZ19EYXJ0X2tJbXBvcnRUYWdfRGFydF9rSW5pdExvYWRlcl9EYXJ0X2tSZXNvdXJjZUxvYWRfRGFydF9rR2V0UGFja2FnZVJvb3RVcmlfRGFydF9rR2V0UGFja2FnZUNvbmZpZ1VyaV9EYXJ0X2tSZXNvbHZlUGFja2FnZVVyaV9EYXJ0X2tJbXBvcnRFeHRlbnNpb25fRGFydF9rUmVzb2x2ZUFzRmlsZVBhdGhzaWxlbnRPYnNlcnZhdG9yeVNJTEVOVF9PQlNFUlZBVE9SWV9zYW5pdGl6ZVdpbmRvd3NQYXRoZml4ZWRQYXRoX3RyaW1XaW5kb3dzUGF0aF9lbmZvcmNlVHJhaWxpbmdTbGFzaCUgX3NlbmRSZXNvdXJjZVJlc3BvbnNlQ291bGQgbm90IGxvYWQgIkNvdWxkIG5vdCBpbXBvcnQgIiIgZnJvbSAiX3NlbmRFeHRlbnNpb25JbXBvcnRSZXNwb25zZUNvdWxkIG5vdCByZXNvbHZlICJfbG9hZEh0dHBtYXhDb25uZWN0aW9uc1Blckhvc3RfbG9hZEZpbGVsb2FkZXJTdGF0ZV9sb2FkRGF0YVVyaW1pbWVhcHBsaWNhdGlvbi9kYXJ0dGV4dC9wbGFpbk1JTUUtdHlwZSBtdXN0IGJlIGFwcGxpY2F0aW9uL2RhcnQgb3IgdGV4dC9wbGFpbjogVVMtQVNDSUlPbmx5IHV0Zi04IG9yIFVTLUFTQ0lJIGVuY29kaW5ncyBhcmUgc3VwcG9ydGVkOiBJbnZhbGlkIGRhdGEgdXJpICgpOgogIF9sb2FkUGFja2FnZXRyYWNlTG9hZGluZ0V4Y2VwdGlvbiAoKSB3aGVuIHJlc29sdmluZyBwYWNrYWdlIFVSSTogUGVuZGluZyBwYWNrYWdlIGxvYWQgb2YgJyBwZW5kaW5nX2hhbmRsZVJlc291cmNlUmVxdWVzdFVua25vd24gc2NoZW1lICgpIGZvciBfcGFyc2VQYWNrYWdlc0ZpbGVwYWNrYWdlc0ZpbGVpbnZhbGlkUGFja2FnZU5hbWVTa2lwcGluZyBjb21tZW50IGluIExpbmUgc3RhcnRzIHdpdGggJzonIGluIE1pc3NpbmcgcGFja2FnZSBuYW1lIGluIExpbmUgaGFzIG5vICc6JyBpbiBNaXNzaW5nICc6JyBzZXBhcmF0b3IgaW4gSW52YWxpZCBwYWNrYWdlIG5hbWUgSW52YWxpZCBwYWNrYWdlIG5hbWUgJ3BhY2thZ2VOYW1lOiBvcmlnaW5hbCBwYWNrYWdlVXJpOiBtYXBwaW5nOiBQYXJzZWQgcGFja2FnZXMgZmlsZSBhdCAuIFNlbmRpbmc6Cl9sb2FkUGFja2FnZXNGaWxlTG9hZGVkIHBhY2thZ2VzIGZpbGUgZnJvbSBFcnJvciBsb2FkaW5nIHBhY2thZ2VzOiBVbmNhdWdodCBlcnJvciAoKSBsb2FkaW5nIHBhY2thZ2VzIGZpbGUuX2ZpbmRQYWNrYWdlc0ZpbGVkaXJVcmlDaGVja2luZyBmb3IgIGZpbGUuIGV4aXN0czogQ291bGQgbm90IHJlc29sdmUgYSBwYWNrYWdlIGxvY2F0aW9uIGZyb20gQ291bGQgbm90IHJlc29sdmUgYSBwYWNrYWdlIGxvY2F0aW9uIGZvciBiYXNlIGF0IF9sb2FkSHR0cFBhY2thZ2VzRmlsZXJlc291cmNlRmV0Y2hpbmcgcGFja2FnZXMgZmlsZSBmcm9tICdyc3A6c3RyZWFtOmZvci1pdGVyYXRvckdvdCBzdGF0dXMgIGZldGNoaW5nICdMb2FkZWQgcGFja2FnZXMgZmlsZSBmcm9tICcnOgpFcnJvciBsb2FkaW5nIHBhY2thZ2VzIGZpbGUgZnJvbSAnKSBsb2FkaW5nIHBhY2thZ2VzIGZpbGUgZnJvbSAnX2xvYWRQYWNrYWdlc0RhdGFNSU1FLXR5cGUgbXVzdCBiZSB0ZXh0L3BsYWluOiApIGxvYWRpbmcgcGFja2FnZXMgZGF0YS5faGFuZGxlUGFja2FnZXNSZXF1ZXN0VW5zdXBwb3J0ZWQgc2NoZW1lIHVzZWQgdG8gbG9jYXRlIC5wYWNrYWdlcyBmaWxlOiBIYW5kbGluZyBsb2FkIG9mIHBhY2thZ2VzIG1hcDogJ1BhY2thZ2VzIGZpbGUgJykgZm9yIHBhY2thZ2UgZmlsZSBhdCBVbmtub3duIHBhY2thZ2VzIHJlcXVlc3QgdGFnOiBFcnJvciBoYW5kbGluZyBwYWNrYWdlcyByZXF1ZXN0OiApIGhhbmRsaW5nIHBhY2thZ2VzIHJlcXVlc3Quc2h1dGRvd25Mb2FkZXJzU2VydmljZSBzaHV0ZG93bmllZGlsc19wcm9jZXNzTG9hZFJlcXVlc3Rpc1JlbG9hZGluZ3BhdGhVcmkpIGluIENhbm5vdCByZXNvbHZlIHNjaGVtZSAoKSB0byBmaWxlIHBhdGhVbmtub3duIGxvYWRlciByZXF1ZXN0IHRhZz1zZXJ2ZXJQcmludF9ub3RpZnlTZXJ2ZXJTdGF0ZVZNU2VydmljZUlPX05vdGlmeVNlcnZlclN0YXRlX2xhenlTZXJ2ZXJCb290Y2xlYW51cENhbGxiYWNrRXJyb3IgaW4gdm0tc2VydmljZSBzaHV0ZG93bjogY3JlYXRlVGVtcERpckNhbGxiYWNrY3JlYXRlVGVtcGRlbGV0ZURpckNhbGxiYWNrd3JpdGVGaWxlQ2FsbGJhY2t3cml0ZVN0cmVhbUZpbGVDYWxsYmFja3JlYWRGaWxlQ2FsbGJhY2tsaXN0RmlsZXNDYWxsYmFja2RpclBhdGhkaXJQYXRoU3RyZmlsZUVudGl0eWZpbGVQYXRobW9kaWZpZWRzZXJ2ZXJJbmZvcm1hdGlvbkNhbGxiYWNrd2ViU2VydmVyQ29udHJvbENhbGxiYWNrX2NsZWFyRnV0dXJlX29uU2lnbmFsc2lnbmFsX3JlZ2lzdGVyU2lnbmFsSGFuZGxlclNJR1FVSVRfc2h1dGRvd25WTVNlcnZpY2VJT19TaHV0ZG93bmRhcnQuX3Ztc2VydmljZWFzc2V0LmRhcnRjbGllbnQuZGFydGRldmZzLmRhcnRjb25zdGFudHMuZGFydHJ1bm5pbmdfaXNvbGF0ZS5kYXJ0cnVubmluZ19pc29sYXRlcy5kYXJ0bWVzc2FnZS5kYXJ0bWVzc2FnZV9yb3V0ZXIuZGFydG5hbWVkX2xvb2t1cC5kYXJ0U2VydmVyU3RhcnRDYWxsYmFja1NlcnZlclN0b3BDYWxsYmFja0NsZWFudXBDYWxsYmFja0NyZWF0ZVRlbXBEaXJDYWxsYmFja0RlbGV0ZURpckNhbGxiYWNrV3JpdGVGaWxlQ2FsbGJhY2tXcml0ZVN0cmVhbUZpbGVDYWxsYmFja1JlYWRGaWxlQ2FsbGJhY2tMaXN0RmlsZXNDYWxsYmFja1NlcnZlckluZm9ybWFtZXNzYWdlX3JvdXRlcnRpb25DYWxsYmFja1NlcnZlckluZm9ybWF0aW9uQ2FsbGJhY2tXZWJTZXJ2ZXJDb250cm9sQ2FsbGJhY2tDbGllbnRTZXJ2aWNlSGFuZGxlSXNvbGF0ZUVtYmVkZGVyRGF0YVZNU2VydmljZUVtYmVkZGVySG9va3NzZXJ2ZXJTdGFydHNlcnZlclN0b3BjcmVhdGVUZW1wRGlyZGVsZXRlRGlyd3JpdGVGaWxld3JpdGVTdHJlYW1GaWxlcmVhZEZpbGVsaXN0RmlsZXNzZXJ2ZXJJbmZvcm1hdGlvbndlYlNlcnZlckNvbnRyb2xWTVNlcnZpY2VzZXJ2aWNlTmFtZXNwYWNlY2xpZW50c19zZXJ2aWNlUmVxdWVzdHNzcnJ1bm5pbmdJc29sYXRlc2V2ZW50UG9ydGtTZXJ2aWNlU3RyZWFtc2VydmljZVN0cmVhbXNtZXNzYWdlSGFuZGxlcl9hZGRDbGllbnRzdHJlYW1zc2VydmljZXNfcmVtb3ZlQ2xpZW50bmFtZXNwYWNla2V5T2ZzdHJlYW1JZF9pc0FueUNsaWVudFN1YnNjcmliZWRfZXZlbnRNZXNzYWdlSGFuZGxlcmpzb25ycGMyLjBzdHJlYW1Ob3RpZnlTZXJ2aWNlVW5yZWdpc3RlcmVkc2VydmljZUhhbmRsZXNfY29udHJvbE1lc3NhZ2VIYW5kbGVycG9ydElkaXNvbGF0ZVN0YXJ0dXBpc29sYXRlU2h1dGRvd25fc2VydmVyTWVzc2FnZUhhbmRsZXJfaGFuZGxlTmF0aXZlUnBjQ2FsbFRoZSBjbGllbnQgc2VudCBhIG5vbi1yZXF1ZXN0IGpzb24tcnBjIG1lc3NhZ2Uucm91dGVSZXF1ZXN0VGhlIHJwYyBjYWxsIHJlc3VsdGVkIGluIGV4Y2VwdGlvbjogX2V4aXRjbGllbnRzTGlzdEludGVybmFsIHZtLXNlcnZpY2UgZXJyb3I6IGlnbm9yaW5nIGlsbGVnYWwgbWVzc2FnZTogX2ZpbmRGaXJzdENsaWVudFRoYXRIYW5kbGVzU2VydmljZV9zdHJlYW1MaXN0ZW5zdHJlYW1MaXN0ZW46IGludmFsaWQgJ3N0cmVhbUlkJyBwYXJhbWV0ZXI6IF9zZW5kU2VydmljZVJlZ2lzdGVyZWRFdmVudF9zdHJlYW1DYW5jZWxfaGFzTmFtZXNwYWNlX2dldE5hbWVzcGFjZV9nZXRNZXRob2RfcmVnaXN0ZXJTZXJ2aWNlcmVnaXN0ZXJTZXJ2aWNlOiBpbnZhbGlkICdzZXJ2aWNlJyBwYXJhbWV0ZXI6IHJlZ2lzdGVyU2VydmljZTogaW52YWxpZCAnYWxpYXMnIHBhcmFtZXRlcjogU2VydmljZVJlZ2lzdGVyZWRfaGFuZGxlU2VydmljZW5ld0lkb2xkSWRzZXJpYWxmb3J3YXJkVG9Kc29uVW5rbm93biBzZXJ2aWNlOiBhcmdzT2ZTdHJpbmdfcm91dGVSZXF1ZXN0SW1wbGNvbXBsZXRlZHN0cmVhbUxpc3RlbnN0cmVhbUNhbmNlbHJlZ2lzdGVyU2VydmljZXNob3VsZEhhbmRsZU1lc3NhZ2VoYW5kbGVNZXNzYWdlc2VuZFRvVk1zZXRFcnJvclJlc3BvbnNlVW5leHBlY3RlZCBleGNlcHRpb246cm91dGVSZXNwb25zZXJlbGVhc2VBc3NldGV4dGVuc2lvblN0YXJ0dGV4dC9odG1sOyBjaGFyc2V0PVVURi04YXBwbGljYXRpb24vZGFydDsgY2hhcnNldD1VVEYtOGFwcGxpY2F0aW9uL2phdmFzY3JpcHQ7IGNoYXJzZXQ9VVRGLThjc3N0ZXh0L2NzczsgY2hhcnNldD1VVEYtOGdpZmltYWdlL2dpZnBuZ2ltYWdlL3BuZ2pwZ2ltYWdlL2pwZWdqcGVnaW1hZ2Uvc3ZnK3htbHRhckJ5dGVzYXNzZXRMaXN0YXNzZXRzQ2xpZW50X0ZpbGVTeXN0ZW1yZXNvbHZlUGF0aERldkZTX2ZzTWFwX3JwY05hbWVzX2xpc3REZXZGU19jcmVhdGVEZXZGU19kZWxldGVEZXZGU19yZWFkRGV2RlNGaWxlX3dyaXRlRGV2RlNGaWxlX3dyaXRlRGV2RlNGaWxlc19saXN0RGV2RlNGaWxlc2RlbGV0aW9uc1VuZXhwZWN0ZWQgcnBjIEZpbGVTeXN0ZW1MaXN0ZnNOYW1lc3VyaVBhcmFtRlNGaWxlZmlsZUNvbnRlbnRzX3JlYWREZXZGU0ZpbGU6IGRlY29kZWRGaWxlQ29udGVudHNmaWxlSW5mbzogaW52YWxpZCAnZmlsZXMnIHBhcmFtZXRlciBhdCBpbmRleCBmaWxlTGlzdEZTRmlsZUxpc3RDb25zdGFudHNTRVJWSUNFX0VYSVRfTUVTU0FHRV9JRElTT0xBVEVfU1RBUlRVUF9NRVNTQUdFX0lESVNPTEFURV9TSFVURE9XTl9NRVNTQUdFX0lEV0VCX1NFUlZFUl9DT05UUk9MX01FU1NBR0VfSURTRVJWRVJfSU5GT19NRVNTQUdFX0lETUVUSE9EX0NBTExfRlJPTV9OQVRJVkVSdW5uaW5nSXNvbGF0ZXNlcnZpY2VJZGlzb2xhdGVzL3NlbmRUb0lzb2xhdGVSdW5uaW5nSXNvbGF0ZXNpc29sYXRlc19yb290UG9ydElkcmlpc29sYXRlUGFyYW1pbnZhbGlkICdpc29sYXRlSWQnIHBhcmFtZXRlcjogU2VudGluZWxDb2xsZWN0ZWR2YWx1ZUFzU3RyaW5nPGNvbGxlY3RlZD5zZXRSZXNwb25zZWV2YWx1YXRlSW5GcmFtZV9FdmFsdWF0b3JfbWVzc2FnZV9idWlsZFNjb3BlYnVpbGRTY29wZVJlc3BvbnNlcmVzcG9uc2VKc29uZGVjb2RlSnNvbmtlcm5lbEJhc2U2NF9jb21waWxlRXhwcmVzc2lvbl9ldmFsdWF0ZUNvbXBpbGVkRXhwcmVzc2lvbl9zZXR1cFBhcmFtc2J1aWxkU2NvcGVQYXJhbXNfYnVpbGRFeHByZXNzaW9uRXZhbHVhdGlvblNjb3BlYnVpbGRTY29wZWJ1aWxkU2NvcGVSZXNwb25zZVJlc3VsdGV4dGVybmFsQ2xpZW50Y29tcGlsZVBhcmFtc3BhcmFtX25hbWVzdHlwZV9wYXJhbXNfbmFtZXNqc29uTWFwa2VybmVsQnl0ZXNjb21waWxlRXhwcmVzc2lvblBhcmFtc2Rpc2FibGVCcmVha3BvaW50c3J1blBhcmFtc3J1bkV4cHJlc3Npb25mcmFtZUluZGV4dGFyZ2V0SWRNZXNzYWdlVHlwZVJlcXVlc3ROb3RpZmljYXRpb25SZXNwb25zZV9jb21wbGV0ZXJfZnJvbUpzb25ScGNSZXF1ZXN0X2Zyb21Kc29uUnBjTm90aWZpY2F0aW9uX2Zyb21Kc29uUnBjUmVzdWx0X2Zyb21Kc29uUnBjRXJyb3Jmb3JNZXRob2Rmb3JJc29sYXRlZnJvbUpzb25ScGMiaWQiIG11c3QgYmUgYSBudW1iZXIsIHN0cmluZywgb3IgbnVsbC5JbnZhbGlkIG1lc3NhZ2UgZm9ybWF0X21ldGhvZE5hbWVGcm9tVXJpdG9VcmlvdmVybG9hZHNfbWFrZUFsbFN0cmluZ25ld19saXN0X3NldFJlc3BvbnNlRnJvbVBvcnRjb3VsZCBub3Qgc2VuZCBtZXNzYWdlIFtdIHRvIGlzb2xhdGVfbWV0aG9kTmVlZHNPYmplY3RQYXJhbWV0ZXJzTWVzc2FnZVJvdXRlclJlc3BvbnNlUGF5bG9hZEtpbmRVdGY4U3RyaW5nU2VydmljZUVycm9ySW50ZXJuYWxFcnJvclVucmVjb2duaXplZCByZXNwb25zZTogQmluYXJ5IHJlc3BvbnNlcyBjYW4gbm90IGJlIGRlY29kZWRfTmFtZWRMb29rdXAmT2JqZWN0Jkl0ZXJhYmxlTWl4aW5OYW1lZExvb2t1cF9lbGVtZW50c19pZHNJZEdlbmVyYXRvcmlzb2xhdGVDb250cm9sUG9ydHNjcmlwdExvYWRQb3J0c2VydmljZUF1dGhUb2tlbmlzb2xhdGVFbWJlZGRlckRhdGFrUGFyc2VFcnJvcmtJbnZhbGlkUmVxdWVzdGtNZXRob2ROb3RGb3VuZGtJbnRlcm5hbEVycm9ya0ZlYXR1cmVEaXNhYmxlZGtDYW5ub3RBZGRCcmVha3BvaW50a1N0cmVhbUFscmVhZHlTdWJzY3JpYmVka1N0cmVhbU5vdFN1YnNjcmliZWRrSXNvbGF0ZU11c3RCZVJ1bm5hYmxla0lzb2xhdGVNdXN0QmVQYXVzZWRrQ2Fubm90UmVzdW1la0lzb2xhdGVJc1JlbG9hZGluZ2tJc29sYXRlUmVsb2FkQmFycmVka0lzb2xhdGVNdXN0SGF2ZVJlbG9hZGVka1NlcnZpY2VBbHJlYWR5UmVnaXN0ZXJlZGtTZXJ2aWNlRGlzYXBwZWFyZWRrRXhwcmVzc2lvbkNvbXBpbGF0aW9uRXJyb3JrSW52YWxpZFRpbWVsaW5lUmVxdWVzdGtGaWxlU3lzdGVtQWxyZWFkeUV4aXN0c2tGaWxlU3lzdGVtRG9lc05vdEV4aXN0a0ZpbGVEb2VzTm90RXhpc3RfZXJyb3JNZXNzYWdlc0ZlYXR1cmUgaXMgZGlzYWJsZWRTdHJlYW0gYWxyZWFkeSBzdWJzY3JpYmVkU3RyZWFtIG5vdCBzdWJzY3JpYmVkRmlsZSBzeXN0ZW0gYWxyZWFkeSBleGlzdHNGaWxlIHN5c3RlbSBkb2VzIG5vdCBleGlzdEZpbGUgZG9lcyBub3QgZXhpc3RTZXJ2aWNlIGFscmVhZHkgcmVnaXN0ZXJlZFNlcnZpY2UgaGFzIGRpc2FwcGVhcmVkRXhwcmVzc2lvbiBjb21waWxhdGlvbiBlcnJvclRoZSB0aW1lbGluZSByZWxhdGVkIHJlcXVlc3QgY291bGQgbm90IGJlIGNvbXBsZXRlZGR1ZSB0byB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uc2hvcnREZWxheV9hc3NldHNfZGVjb2RlQXNzZXRzVk1TZXJ2aWNlX0RlY29kZUFzc2V0c0NvdWxkIG5vdCBsb2FkIE9ic2VydmF0b3J5IGFzc2V0czogX2VuY29kZURldkZTRGlzYWJsZWRFcnJvckRldkZTIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBEYXJ0IGltcGxlbWVudGF0aW9uX2VuY29kZUZpbGVTeXN0ZW1BbHJlYWR5RXhpc3RzRXJyb3I6IGZpbGUgc3lzdGVtICcnIGFscmVhZHkgZXhpc3RzX2VuY29kZUZpbGVTeXN0ZW1Eb2VzTm90RXhpc3RFcnJvcicgZG9lcyBub3QgZXhpc3RzZW5kSXNvbGF0ZVNlcnZpY2VNZXNzYWdlVk1TZXJ2aWNlX1NlbmRJc29sYXRlU2VydmljZU1lc3NhZ2VzZW5kUm9vdFNlcnZpY2VNZXNzYWdlVk1TZXJ2aWNlX1NlbmRSb290U2VydmljZU1lc3NhZ2VzZW5kT2JqZWN0Um9vdFNlcnZpY2VNZXNzYWdlVk1TZXJ2aWNlX1NlbmRPYmplY3RSb290U2VydmljZU1lc3NhZ2VfbWFrZUF1dGhUb2tlbmtUb2tlbkJ5dGVTaXplZW5jb2RlUnBjRXJyb3JlbmNvZGVNaXNzaW5nUGFyYW1FcnJvciBleHBlY3RzIHRoZSAnJyBwYXJhbWV0ZXJlbmNvZGVJbnZhbGlkUGFyYW1FcnJvcjogaW52YWxpZCAnJyBwYXJhbWV0ZXI6IGVuY29kZUNvbXBpbGF0aW9uRXJyb3JkaWFnbm9zdGljZW5jb2RlUmVzdWx0ZW5jb2RlU3VjY2Vzc1N1Y2Nlc3Nib290X3JlZ2lzdGVySXNvbGF0ZXBvcnRfaWRfb25TdGFydFZNU2VydmljZV9PblN0YXJ0X29uRXhpdFZNU2VydmljZV9PbkV4aXRvblNlcnZlckFkZHJlc3NDaGFuZ2VWTVNlcnZpY2VfT25TZXJ2ZXJBZGRyZXNzQ2hhbmdlX3ZtTGlzdGVuU3RyZWFtVk1TZXJ2aWNlX0xpc3RlblN0cmVhbV92bUNhbmNlbFN0cmVhbVZNU2VydmljZV9DYW5jZWxTdHJlYW1fcmVxdWVzdEFzc2V0c1ZNU2VydmljZV9SZXF1ZXN0QXNzZXRzX3NwYXduVXJpTm90aWZ5Vk1TZXJ2aWNlX3NwYXduVXJpTm90aWZ5X3NldHVwQ29tcGxldGVkX2xvYWRQb3J0X2lzb2xhdGVJZF9sb2dJZF9wcmludFN0cmluZ0J1aWx0aW5fUHJpbnRTdHJpbmdfZ2V0UHJpbnRDbG9zdXJlX21ha2VMb2FkZXJSZXF1ZXN0U2VydmljZSBpc29sYXRlIGlzIG5vdCBhdmFpbGFibGUuKiBfc2V0V29ya2luZ0RpcmVjdG9yeVNldHRpbmcgd29ya2luZyBkaXJlY3Rvcnk6IFdvcmtpbmcgZGlyZWN0b3J5IFVSSTogU2V0dGluZyBwYWNrYWdlIHJvb3Q6IHBhY2thZ2VSb290U3RyUGFja2FnZSByb290IFVSSTogX3NldFBhY2thZ2VzTWFwUmVzb2x2aW5nIHBhY2thZ2VzIG1hcDogTm8gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBzZXQucGFja2FnZXNVcmlTdHJSZXNvbHZlZCBwYWNrYWdlcyBtYXAgdG86IF9yZXNvbHZlU2NyaXB0VXJpUmVzb2x2aW5nIHNjcmlwdDogUmVzb2x2ZWQgZW50cnkgcG9pbnQgdG86IF9maWxlUGF0aEZyb21Vcml1c2VyVXJpR2V0dGluZyBmaWxlIHBhdGggZnJvbTogTm90IGEga25vd24gc2NoZW1lOiBfcmVzb3VyY2VSZWFkQXNCeXRlc19nZXRQYWNrYWdlUm9vdEZ1dHVyZVJlcXVlc3QgZm9yIHBhY2thZ2Ugcm9vdCBmcm9tIHVzZXIgY29kZS5fZ2V0UGFja2FnZUNvbmZpZ0Z1dHVyZVJlcXVlc3QgZm9yIHBhY2thZ2UgY29uZmlnIGZyb20gdXNlciBjb2RlLl9yZXNvbHZlUGFja2FnZVVyaUZ1dHVyZVJlcXVlc3QgZm9yIHBhY2thZ2UgVXJpIHJlc29sdXRpb24gZnJvbSB1c2VyIGNvZGU6IE5vbi1wYWNrYWdlIFVyaSwgcmV0dXJuaW5nIHVubW9kaWZpZWQ6IEV4Y2VwdGlvbiB3aGVuIHJlc29sdmluZyBwYWNrYWdlIFVSSTogbmF0aXZld3JhcHBlcnNOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczFOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczJOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczNOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczRkYXJ0LmlvYnl0ZXNfYnVpbGRlci5kYXJ0Y29tbW9uLmRhcnRkYXRhX3RyYW5zZm9ybWVyLmRhcnRkaXJlY3RvcnkuZGFydGRpcmVjdG9yeV9pbXBsLmRhcnRlbWJlZGRlcl9jb25maWcuZGFydGV2ZW50aGFuZGxlci5kYXJ0ZmlsZS5kYXJ0ZmlsZV9pbXBsLmRhcnRmaWxlX3N5c3RlbV9lbnRpdHkuZGFydGlvX3Jlc291cmNlX2luZm8uZGFydGlvX3NpbmsuZGFydGlvX3NlcnZpY2UuZGFydGxpbmsuZGFydG5hbWVzcGFjZV9pbXBsLmRhcnRvdmVycmlkZXMuZGFydHBsYXRmb3JtLmRhcnRwbGF0Zm9ybV9pbXBsLmRhcnRwcm9jZXNzLmRhcnRzZWN1cmVfc2VydmVyX3NvY2tldC5kYXJ0c2VjdXJlX3NvY2tldC5kYXJ0c2VjdXJpdHlfY29udGV4dC5kYXJ0c2VydmljZV9vYmplY3QuZGFydHNvY2tldC5kYXJ0c3RkaW8uZGFydHN0cmluZ190cmFuc2Zvcm1lci5kYXJ0c3luY19zb2NrZXQuZGFydF9Bc3luY0RpcmVjdG9yeUxpc3Rlck9wc0ltcGxfc2V0UG9pbnRlckRpcmVjdG9yeV9TZXRBc3luY0RpcmVjdG9yeUxpc3RlclBvaW50ZXJnZXRQb2ludGVyRGlyZWN0b3J5X0dldEFzeW5jRGlyZWN0b3J5TGlzdGVyUG9pbnRlcl9SYW5kb21BY2Nlc3NGaWxlT3BzSW1wbEZpbGVfU2V0UG9pbnRlckZpbGVfR2V0UG9pbnRlckZpbGVfQ2xvc2VGaWxlX1JlYWRCeXRlRmlsZV9SZWFkcmVhZEludG9GaWxlX1JlYWRJbnRvRmlsZV9Xcml0ZUJ5dGV3cml0ZUZyb21GaWxlX1dyaXRlRnJvbUZpbGVfUG9zaXRpb25zZXRQb3NpdGlvbkZpbGVfU2V0UG9zaXRpb25GaWxlX1RydW5jYXRlRmlsZV9MZW5ndGhGaWxlX0ZsdXNobG9ja0ZpbGVfTG9ja19XYXRjaGVyUGF0aHBhdGhJZF9Jbm90aWZ5RmlsZVN5c3RlbVdhdGNoZXJfaWRNYXBfbmV3V2F0Y2hlcl9kb25lV2F0Y2hlcl9wYXRoV2F0Y2hlZF93YXRjaGVyUGF0aF9wYXRoV2F0Y2hlZEVuZF9XaW4zMkZpbGVTeXN0ZW1XYXRjaGVyX0ZTRXZlbnRTdHJlYW1GaWxlU3lzdGVtV2F0Y2hlcnNvY2tldElkX0ZpbHRlckltcGxGaWx0ZXJfUHJvY2Vzc3Byb2Nlc3NlZEZpbHRlcl9Qcm9jZXNzZWRfWkxpYkluZmxhdGVGaWx0ZXJ3aW5kb3dCaXRzRmlsdGVyX0NyZWF0ZVpMaWJJbmZsYXRlX1pMaWJEZWZsYXRlRmlsdGVyZ3ppcG1lbUxldmVsRmlsdGVyX0NyZWF0ZVpMaWJEZWZsYXRlX0lPU2VydmljZVBvcnRzbWF4UG9ydHNfcG9ydHNfZnJlZVBvcnRzX3VzZWRQb3J0c19nZXRQb3J0Zm9yUmVxdWVzdElkX3JldHVyblBvcnRfbmV3U2VydmljZVBvcnRJT1NlcnZpY2VfTmV3U2VydmljZVBvcnRfTmFtZXNwYWNlSW1wbF9jYWNoZWROYW1lc3BhY2VOYW1lc3BhY2VfQ3JlYXRlX2dldFBvaW50ZXJOYW1lc3BhY2VfR2V0UG9pbnRlcl9nZXREZWZhdWx0TmFtZXNwYWNlX0dldERlZmF1bHRfc2V0dXBOYW1lc3BhY2VfbmFtZXNwYWNlX25hbWVzcGFjZVBvaW50ZXJfU2lnbmFsQ29udHJvbGxlcl9saXN0ZW5fc2lnbmFsTnVtYmVyRmFpbGVkIHRvIGxpc3RlbiBmb3IgX3NldFNpZ25hbEhhbmRsZXJQcm9jZXNzX1NldFNpZ25hbEhhbmRsZXJfY2xlYXJTaWduYWxIYW5kbGVyUHJvY2Vzc19DbGVhclNpZ25hbEhhbmRsZXJfUHJvY2Vzc1N0YXJ0U3RhdHVzX2Vycm9yQ29kZV9lcnJvck1lc3NhZ2VfUHJvY2Vzc0ltcGxOYXRpdmVXcmFwcGVyX1Byb2Nlc3NJbXBsX3Jlc291cmNlSW5mb2Nvbm5lY3RlZFJlc291cmNlSGFuZGxlcl9wYXRoX21vZGVfc3RkaW5fc3Rkb3V0X3N0ZGVycl9leGl0SGFuZGxlcl9lbmRlZF9zdGFydGVkX2V4aXRDb2RlaW5jbHVkZVBhcmVudEVudmlyb25tZW50cnVuSW5TaGVsbGV4dC5kYXJ0LmlvLmdldFByb2Nlc3Nlc2V4dC5kYXJ0LmlvLmdldFByb2Nlc3NCeUlkUGF0aCBpcyBub3QgYSBTdHJpbmc6IEFyZ3VtZW50cyBpcyBub3QgYSBMaXN0OiBOb24tc3RyaW5nIGFyZ3VtZW50OiBfd2luZG93c0FyZ3VtZW50RXNjYXBlV29ya2luZ0RpcmVjdG9yeSBpcyBub3QgYSBTdHJpbmc6IEVudmlyb25tZW50IGlzIG5vdCBhIG1hcDogRW52aXJvbm1lbnQga2V5IG9yIHZhbHVlIGlzIG5vdCBhIHN0cmluZzogKE1vZGUgaXMgbm90IGEgUHJvY2Vzc1N0YXJ0TW9kZTogX3N0ZGluTmF0aXZlU29ja2V0X25hdGl2ZVNvY2tldF9zdGRvdXROYXRpdmVTb2NrZXRfc3RkZXJyTmF0aXZlU29ja2V0X21vZGVJc0F0dGFjaGVkX21vZGVIYXNTdGRpb19nZXRTaGVsbENvbW1hbmRjbWQuZXhlX2dldFNoZWxsQXJndW1lbnRzc2hlbGxBcmd1bWVudHMvY2NvbW1hbmRMaW5lJyInIiduZXh0UG9zcXVvdGVQb3NudW1CYWNrc2xhc2hfaW50RnJvbUJ5dGVzX3N0YXJ0TmF0aXZlZXhpdERhdGFSZWFkRVhJVF9EQVRBX1NJWkVleGl0RGF0YUJ1ZmZlcmludHNoYW5kbGVFeGl0ZGVzdHJveXN0b3BwZWRfcnVuQW5kV2FpdHN0ZG91dEVuY29kaW5nc3RkZXJyRW5jb2Rpbmdfd2FpdGdldE91dHB1dFByb2Nlc3NfU3RhcnRleGl0SGFuZGxlclByb2Nlc3NfV2FpdFNJR1RFUk1Bcmd1bWVudCAnc2lnbmFsJyBtdXN0IGJlIGEgUHJvY2Vzc1NpZ25hbHBpZF9JbnRlcm5ldEFkZHJlc3NfYWRkcmVzc0xvb3BiYWNrSVB2NF9hZGRyZXNzTG9vcGJhY2tJUHY2X2FkZHJlc3NBbnlJUHY0X2FkZHJlc3NBbnlJUHY2X0lQdjRBZGRyTGVuZ3RoX0lQdjZBZGRyTGVuZ3RobG9vcGJhY2tJUHY0bG9vcGJhY2tJUHY2YW55SVB2NGFueUlQdjZfaG9zdF9pbl9hZGRycmF3QWRkcmVzc2lzTG9vcGJhY2tpc0xpbmtMb2NhbGlzTXVsdGljYXN0SW52YWxpZCBpbnRlcm5ldCBhZGRyZXNzIGluX2FkZHIwLjAuMC4wX2Nsb25lV2l0aE5ld0hvc3RJbnRlcm5ldEFkZHJlc3MoJ19wYXJzZUludGVybmV0QWRkcmVzc19QYXJzZV9OZXR3b3JrSW50ZXJmYWNlTmV0d29ya0ludGVyZmFjZSgnX05hdGl2ZVNvY2tldE5hdGl2ZVdyYXBwZXJfX05hdGl2ZVNvY2tldCZfTmF0aXZlU29ja2V0TmF0aXZlV3JhcHBlciZfU2VydmljZU9iamVjdF9fc2VydmljZUlkX3NlcnZpY2VJZF9zZXJ2aWNlUGF0aF9zZXJ2aWNlVHlwZVBhdGhfc2VydmljZVR5cGVOYW1lX3NlcnZpY2VUeXBlX05hdGl2ZVNvY2tldHJlYWRFdmVudHdyaXRlRXZlbnRlcnJvckV2ZW50Y2xvc2VkRXZlbnRkZXN0cm95ZWRFdmVudGZpcnN0RXZlbnRsYXN0RXZlbnRldmVudENvdW50Y2xvc2VDb21tYW5kc2h1dGRvd25SZWFkQ29tbWFuZHNodXRkb3duV3JpdGVDb21tYW5kcmV0dXJuVG9rZW5Db21tYW5kc2V0RXZlbnRNYXNrQ29tbWFuZGZpcnN0Q29tbWFuZGxhc3RDb21tYW5kbGlzdGVuaW5nU29ja2V0cGlwZVNvY2tldHR5cGVOb3JtYWxTb2NrZXR0eXBlTGlzdGVuaW5nU29ja2V0dHlwZVBpcGV0eXBlVHlwZU1hc2t0Y3BTb2NrZXR1ZHBTb2NrZXRpbnRlcm5hbFNvY2tldGludGVybmFsU2lnbmFsU29ja2V0dHlwZVRjcFNvY2tldHR5cGVVZHBTb2NrZXR0eXBlSW50ZXJuYWxTb2NrZXR0eXBlSW50ZXJuYWxTaWduYWxTb2NrZXR0eXBlUHJvdG9jb2xNYXNraG9zdE5hbWVMb29rdXBNZXNzYWdlbGlzdEludGVyZmFjZXNNZXNzYWdlcmV2ZXJzZUxvb2t1cE1lc3NhZ2Vwcm90b2NvbElQdjRwcm90b2NvbElQdjZub3JtYWxUb2tlbkJhdGNoU2l6ZWxpc3RlbmluZ1Rva2VuQmF0Y2hTaXplX3JldHJ5RHVyYXRpb25fcmV0cnlEdXJhdGlvbkxvb3BiYWNraXNDbG9zaW5naXNDbG9zZWRSZWFkY2xvc2VkUmVhZEV2ZW50U2VudGlzQ2xvc2VkV3JpdGVjbG9zZUNvbXBsZXRlcmV2ZW50SGFuZGxlcnNmbGFnc1NlbnR0eXBlRmxhZ3Nsb2NhbFBvcnRsb2NhbEFkZHJlc3NhdmFpbGFibGVzZW5kUmVhZEV2ZW50c3JlYWRFdmVudElzc3VlZHNlbmRXcml0ZUV2ZW50c3dyaXRlRXZlbnRJc3N1ZWR3cml0ZUF2YWlsYWJsZXJlc291cmNlSW5mb2RhdGFncmFtbm9ybWFsX3dhdGNoQ29tbW9ubmF0aXZlU2V0U29ja2V0SWR3YXRjaFNpZ25hbEZhaWxlZCBob3N0IGxvb2t1cDogJ3JldmVyc2VMb29rdXBhZGRyRmFpbGVkIHJldmVyc2UgaG9zdCBsb29rdXBsaXN0SW50ZXJmYWNlc2luY2x1ZGVMb29wYmFja2luY2x1ZGVMaW5rTG9jYWxGYWlsZWQgbGlzdGluZyBpbnRlcmZhY2Vzc3RhcnRDb25uZWN0c291cmNlQWRkcmVzc2Nvbm5lY3Rpbmdjb25uZWN0TmV4dG5hdGl2ZUNyZWF0ZUNvbm5lY3RuYXRpdmVDcmVhdGVCaW5kQ29ubmVjdGlzQmluZEVycm9yQmluZCBmYWlsZWRDb25uZWN0aW9uIGZhaWxlZHNldEhhbmRsZXJzbmF0aXZlR2V0RXJyb3JzZXRMaXN0ZW5pbmdDb25uZWN0aW9uIGF0dGVtcHQgY2FuY2VsbGVkLCBob3N0OiAsIHBvcnQ6IGNvbm5lY3Rzb2NrZXRGdXR1cmVDb25uZWN0aW9uIHRpbWVkIG91dCwgaG9zdDogX3Jlc29sdmVIb3N0YmFja2xvZ3Y2T25seXNoYXJlZG5hdGl2ZUNyZWF0ZUJpbmRMaXN0ZW5GYWlsZWQgdG8gY3JlYXRlIHNlcnZlciBzb2NrZXRjb25uZWN0VG9FdmVudEhhbmRsZXJzZXR1cFJlc291cmNlSW5mb2JpbmREYXRhZ3JhbXJldXNlQWRkcmVzc3JldXNlUG9ydHR0bG5hdGl2ZUNyZWF0ZUJpbmREYXRhZ3JhbUZhaWxlZCB0byBjcmVhdGUgZGF0YWdyYW0gc29ja2V0aXNMaXN0ZW5pbmdpc1BpcGVpc0ludGVybmFsaXNJbnRlcm5hbFNpZ25hbGlzVGNwaXNVZHBJbGxlZ2FsIGxlbmd0aCBuYXRpdmVSZWFkUmVhZCBmYWlsZWR0b3RhbFJlYWRkaWRSZWFkcmVjZWl2ZW5hdGl2ZVJlY3ZGcm9tUmVjZWl2ZSBmYWlsZWRuYXRpdmVBdmFpbGFibGVJbnZhbGlkIGFyZ3VtZW50cyB0byB3cml0ZSBvbiBTb2NrZXRidWZmZXJBbmRTdGFydG5hdGl2ZVdyaXRlV3JpdGUgZmFpbGVkYWRkV3JpdGVuYXRpdmVTZW5kVG9TZW5kIGZhaWxlZHJldHVyblRva2Vuc25hdGl2ZUFjY2VwdGFkZFJlYWRTb2NrZXQgaGFzIGJlZW4gY2xvc2VkbmF0aXZlR2V0UG9ydG5hdGl2ZUdldFJlbW90ZVBlZXJpc3N1ZVJlYWRFdmVudGlzc3VlV3JpdGVFdmVudG11bHRpcGxleGV2ZW50c09iamRpc2Nvbm5lY3RGcm9tRXZlbnRIYW5kbGVydG9rZW5CYXRjaFNpemVzZW5kVG9FdmVudEhhbmRsZXJkZXN0cm95ZWRkaXJlY3Rpb25zaHV0ZG93blJlYWRzaHV0ZG93bldyaXRlZnVsbERhdGFleHQuZGFydC5pby5nZXRPcGVuU29ja2V0c2V4dC5kYXJ0LmlvLmdldFNvY2tldEJ5SURpc0Vycm9yUmVzcG9uc2VjcmVhdGVFcnJvclVua25vd24gZXJyb3JnZXRPcHRpb25uYXRpdmVHZXRPcHRpb25zZXRPcHRpb25uYXRpdmVTZXRPcHRpb25nZXRSYXdPcHRpb25vcHRpb24udmFsdWVuYXRpdmVHZXRSYXdPcHRpb25zZXRSYXdPcHRpb25uYXRpdmVTZXRSYXdPcHRpb25tdWx0aWNhc3RBZGRyZXNzVGhlIG5ldHdvcmsgaW50ZXJmYWNlIGRvZXMgbm90IGhhdmUgYW4gYWRkcmVzcyBvZiB0aGUgc2FtZSBmYW1pbHkgYXMgdGhlIG11bHRpY2FzdCBhZGRyZXNzam9pbk11bHRpY2FzdGludGVyZmFjZUFkZHJpbnRlcmZhY2VJbmRleG5hdGl2ZUpvaW5NdWx0aWNhc3RsZWF2ZU11bHRpY2FzdG5hdGl2ZUxlYXZlTXVsdGljYXN0U29ja2V0X1NldFNvY2tldElkU29ja2V0X0F2YWlsYWJsZVNvY2tldF9SZWFkU29ja2V0X1JlY3ZGcm9tU29ja2V0X1dyaXRlTGlzdFNvY2tldF9TZW5kVG9Tb2NrZXRfQ3JlYXRlQ29ubmVjdFNvY2tldF9DcmVhdGVCaW5kQ29ubmVjdHNvdXJjZUFkZHJTb2NrZXRCYXNlX0lzQmluZEVycm9yZXJyb3JOdW1iZXJTZXJ2ZXJTb2NrZXRfQ3JlYXRlQmluZExpc3RlblNvY2tldF9DcmVhdGVCaW5kRGF0YWdyYW1TZXJ2ZXJTb2NrZXRfQWNjZXB0U29ja2V0X0dldFBvcnRTb2NrZXRfR2V0UmVtb3RlUGVlcm5hdGl2ZUdldFNvY2tldElkU29ja2V0X0dldFNvY2tldElkU29ja2V0X0dldEVycm9yU29ja2V0X0dldE9wdGlvbnByb3RvY29sU29ja2V0X0dldFJhd09wdGlvblNvY2tldF9TZXRPcHRpb25Tb2NrZXRfU2V0UmF3T3B0aW9uU29ja2V0X0pvaW5NdWx0aWNhc3RTb2NrZXRfTGVhdmVNdWx0aWNhc3RfUmF3U2VydmVyU29ja2V0X3NvY2tldF9yZWZlcmVuY2VQb3J0X3Y2T25seUludmFsaWQgYmFja2xvZyBTdHJlYW0gd2FzIGFscmVhZHkgbGlzdGVuZWQgdG9fb25TdWJzY3JpcHRpb25TdGF0ZUNoYW5nZV9vblBhdXNlU3RhdGVDaGFuZ2VfcmVzdW1lX1Jhd1NvY2tldF9yZWFkRXZlbnRzRW5hYmxlZF93cml0ZUV2ZW50c0VuYWJsZWRfaXNNYWNPU1Rlcm1pbmFsSW5wdXR3cml0ZUV2ZW50c0VuYWJsZWRuYXRpdmVUYXNrbmF0aXZlU29ja2V0X3dyaXRlUGlwZV9yZWFkUGlwZWZkc29ja2V0VHlwZXJlYWRFdmVudHNFbmFibGVkZW5hYmxlZF9TZXJ2ZXJTb2NrZXRyYXdTb2NrZXRfU29ja2V0U3RyZWFtQ29uc3VtZXJzdHJlYW1Db21wbGV0ZXJfZW5zdXJlUmF3U29ja2V0U3Vic2NyaXB0aW9uX2NvbnN1bWVyRG9uZV93cml0ZV9lbmFibGVXcml0ZUV2ZW50X2Rpc2FibGVXcml0ZUV2ZW50X1NvY2tldF9jb250cm9sbGVyQ2xvc2VkX2NvbnN1bWVyX2RldGFjaFJlYWR5c2VwQ2Fubm90IHNlbmQgZXJyb3JzIG9uIHNvY2tldHNfY2xvc2VSYXdTb2NrZXRfZGV0YWNoUmF3X1Jhd0RhdGFncmFtU29ja2V0bXVsdGljYXN0TG9vcGJhY2ttdWx0aWNhc3RIb3BzbXVsdGljYXN0SW50ZXJmYWNlYnJvYWRjYXN0RW5hYmxlZF9TZWN1cmVTb2NrZXRyZW5lZ290aWF0ZXVzZVNlc3Npb25DYWNoZXJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZXJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZXBlZXJDZXJ0aWZpY2F0ZXBlZXJDZXJ0aWZpY2F0ZSBjYWxsZWQgb24gZGVzdHJveWVkIFNlY3VyZVNvY2tldHNlbGVjdGVkUHJvdG9jb2xzZWxlY3RlZFByb3RvY29sIGNhbGxlZCBvbiBkZXN0cm95ZWQgU2VjdXJlU29ja2V0X1NlY3VyZUZpbHRlckltcGxFTkNSWVBURURfU0laRWJ1ZmZlcnNTZWN1cmVTb2NrZXRfQ29ubmVjdGhvc3ROYW1laXNfc2VydmVycHJvdG9jb2xzX2Rlc3Ryb3lTZWN1cmVTb2NrZXRfRGVzdHJveWhhbmRzaGFrZVNlY3VyZVNvY2tldF9IYW5kc2hha2VyZWhhbmRzaGFrZXByb2Nlc3NCdWZmZXJTZWN1cmVTb2NrZXRfR2V0U2VsZWN0ZWRQcm90b2NvbFNlY3VyZVNvY2tldF9SZW5lZ290aWF0ZVNlY3VyZVNvY2tldF9Jbml0U2VjdXJlU29ja2V0X1BlZXJDZXJ0aWZpY2F0ZXJlZ2lzdGVyQmFkQ2VydGlmaWNhdGVDYWxsYmFja1NlY3VyZVNvY2tldF9SZWdpc3RlckJhZENlcnRpZmljYXRlQ2FsbGJhY2tyZWdpc3RlckhhbmRzaGFrZUNvbXBsZXRlQ2FsbGJhY2tTZWN1cmVTb2NrZXRfUmVnaXN0ZXJIYW5kc2hha2VDb21wbGV0ZUNhbGxiYWNraGFuZHNoYWtlQ29tcGxldGVIYW5kbGVyX3BvaW50ZXJTZWN1cmVTb2NrZXRfRmlsdGVyUG9pbnRlcl9TZWN1cml0eUNvbnRleHRkZWZhdWx0Q29udGV4dHdpdGhUcnVzdGVkUm9vdHNfY3JlYXRlTmF0aXZlQ29udGV4dF90cnVzdEJ1aWx0aW5Sb290c1NlY3VyaXR5Q29udGV4dF9BbGxvY2F0ZXVzZVByaXZhdGVLZXlwYXNzd29yZHVzZVByaXZhdGVLZXlCeXRlc1NlY3VyaXR5Q29udGV4dF9Vc2VQcml2YXRlS2V5Qnl0ZXNrZXlCeXRlc3NldFRydXN0ZWRDZXJ0aWZpY2F0ZXNzZXRUcnVzdGVkQ2VydGlmaWNhdGVzQnl0ZXNTZWN1cml0eUNvbnRleHRfU2V0VHJ1c3RlZENlcnRpZmljYXRlc0J5dGVzY2VydEJ5dGVzdXNlQ2VydGlmaWNhdGVDaGFpbnVzZUNlcnRpZmljYXRlQ2hhaW5CeXRlc1NlY3VyaXR5Q29udGV4dF9Vc2VDZXJ0aWZpY2F0ZUNoYWluQnl0ZXNjaGFpbkJ5dGVzc2V0Q2xpZW50QXV0aG9yaXRpZXNzZXRDbGllbnRBdXRob3JpdGllc0J5dGVzU2VjdXJpdHlDb250ZXh0X1NldENsaWVudEF1dGhvcml0aWVzQnl0ZXNhdXRoQ2VydEJ5dGVzc2V0QWxwblByb3RvY29sc2lzU2VydmVyZW5jb2RlZFByb3RvY29sc19zZXRBbHBuUHJvdG9jb2xzU2VjdXJpdHlDb250ZXh0X1NldEFscG5Qcm90b2NvbHNTZWN1cml0eUNvbnRleHRfVHJ1c3RCdWlsdGluUm9vdHNfWDUwOUNlcnRpZmljYXRlSW1wbF9jYWNoZWREZXJfY2FjaGVkUGVtX2NhY2hlZFNoYTFfZGVyWDUwOV9EZXJkZXJfcGVtWDUwOV9QZW1wZW1fc2hhMVg1MDlfU2hhMXN1YmplY3RYNTA5X1N1YmplY3Rpc3N1ZXJYNTA5X0lzc3VlcnN0YXJ0VmFsaWRpdHlfc3RhcnRWYWxpZGl0eWlzVXRjZW5kVmFsaWRpdHlfZW5kVmFsaWRpdHlYNTA5X1N0YXJ0VmFsaWRpdHlYNTA5X0VuZFZhbGlkaXR5X1Jhd1N5bmNocm9ub3VzU29ja2V0Y29ubmVjdFN5bmNyZWFkU3luY19OYXRpdmVTeW5jaHJvbm91c1NvY2tldE5hdGl2ZVdyYXBwZXJfTmF0aXZlU3luY2hyb25vdXNTb2NrZXRQYXJhbWV0ZXIgaG9zdCBjYW5ub3QgYmUgbnVsbF9uYXRpdmVDcmVhdGVDb25uZWN0U3luY19uYXRpdmVBdmFpbGFibGVfbmF0aXZlR2V0UG9ydF9uYXRpdmVHZXRSZW1vdGVQZWVyX25hdGl2ZUNsb3NlU3luY19jaGVja0F2YWlsYWJsZVNvY2tldCBpcyBjbG9zZWQgZm9yIHJlYWRpbmdJbnZhbGlkIGFyZ3VtZW50cyB0byByZWFkSW50b1N5bmNzdGFydCBjYW5ub3QgYmUgbnVsbF9uYXRpdmVSZWFkSW50b3JlYWRJbnRvU3luYyBmYWlsZWRfbmF0aXZlUmVhZF9uYXRpdmVTaHV0ZG93blJlYWRfbmF0aXZlU2h1dGRvd25Xcml0ZVNvY2tldCBpcyBjbG9zZWQgZm9yIHdyaXRpbmdJbnZhbGlkIGFyZ3VtZW50cyB0byB3cml0ZUZyb21TeW5jc3RhcnQgY2Fubm90IGJlIGVxdWFsIHRvIG51bGxfbmF0aXZlV3JpdGV3cml0ZUZyb21TeW5jIGZhaWxlZF9uYXRpdmVMb29rdXBSZXF1ZXN0U3luY2hyb25vdXNTb2NrZXRfTG9va3VwUmVxdWVzdFN5bmNocm9ub3VzU29ja2V0X0NyZWF0ZUNvbm5lY3RTeW5jU3luY2hyb25vdXNTb2NrZXRfQXZhaWxhYmxlU3luY2hyb25vdXNTb2NrZXRfQ2xvc2VTeW5jU3luY2hyb25vdXNTb2NrZXRfR2V0UG9ydFN5bmNocm9ub3VzU29ja2V0X0dldFJlbW90ZVBlZXJTeW5jaHJvbm91c1NvY2tldF9SZWFkU3luY2hyb25vdXNTb2NrZXRfUmVhZExpc3RTeW5jaHJvbm91c1NvY2tldF9TaHV0ZG93blJlYWRTeW5jaHJvbm91c1NvY2tldF9TaHV0ZG93bldyaXRlU3luY2hyb25vdXNTb2NrZXRfV3JpdGVMaXN0dG9CeXRlc19Db3B5aW5nQnl0ZXNCdWlsZGVyX2luaXRTaXplX2VtcHR5TGlzdF9wb3cycm91bmR1cF9CeXRlc0J1aWxkZXJfY2h1bmtzdHlwZWRCeXRlc0lPRXhjZXB0aW9uT1NFcnJvcm5vRXJyb3JDb2RlT1MgRXJyb3IsIGVycm5vID0gOiBlcnJubyA9IF9CdWZmZXJBbmRTdGFydF9JT0NyeXB0b2dldFJhbmRvbUJ5dGVzQ3J5cHRvX0dldFJhbmRvbUJ5dGVzWkxpYk9wdGlvbm1pbldpbmRvd0JpdHNNSU5fV0lORE9XX0JJVFNVc2UgbWluV2luZG93Qml0cyBpbnN0ZWFkbWF4V2luZG93Qml0c01BWF9XSU5ET1dfQklUU1VzZSBtYXhXaW5kb3dCaXRzIGluc3RlYWRkZWZhdWx0V2luZG93Qml0c0RFRkFVTFRfV0lORE9XX0JJVFNVc2UgZGVmYXVsdFdpbmRvd0JpdHMgaW5zdGVhZG1pbkxldmVsTUlOX0xFVkVMVXNlIG1pbkxldmVsIGluc3RlYWRtYXhMZXZlbE1BWF9MRVZFTFVzZSBtYXhMZXZlbCBpbnN0ZWFkZGVmYXVsdExldmVsREVGQVVMVF9MRVZFTFVzZSBkZWZhdWx0TGV2ZWwgaW5zdGVhZG1pbk1lbUxldmVsTUlOX01FTV9MRVZFTFVzZSBtaW5NZW1MZXZlbCBpbnN0ZWFkbWF4TWVtTGV2ZWxNQVhfTUVNX0xFVkVMVXNlIG1heE1lbUxldmVsIGluc3RlYWRkZWZhdWx0TWVtTGV2ZWxERUZBVUxUX01FTV9MRVZFTFVzZSBkZWZhdWx0TWVtTGV2ZWwgaW5zdGVhZHN0cmF0ZWd5RmlsdGVyZWRTVFJBVEVHWV9GSUxURVJFRFVzZSBzdHJhdGVneUZpbHRlcmVkIGluc3RlYWRzdHJhdGVneUh1ZmZtYW5Pbmx5U1RSQVRFR1lfSFVGRk1BTl9PTkxZVXNlIHN0cmF0ZWd5SHVmZm1hbk9ubHkgaW5zdGVhZHN0cmF0ZWd5UmxlU1RSQVRFR1lfUkxFVXNlIHN0cmF0ZWd5UmxlIGluc3RlYWRzdHJhdGVneUZpeGVkU1RSQVRFR1lfRklYRURVc2Ugc3RyYXRlZ3lGaXhlZCBpbnN0ZWFkc3RyYXRlZ3lEZWZhdWx0U1RSQVRFR1lfREVGQVVMVFVzZSBzdHJhdGVneURlZmF1bHQgaW5zdGVhZFpMaWJDb2RlY19kZWZhdWx0WkxpYkVuY29kZXJaTGliRGVjb2RlclJhd1pMaWJGaWx0ZXJkZWZsYXRlRmlsdGVyaW5mbGF0ZUZpbHRlcl9tYWtlWkxpYkRlZmxhdGVGaWx0ZXJfbWFrZVpMaWJJbmZsYXRlRmlsdGVyX0J1ZmZlclNpbmtfWkxpYkVuY29kZXJTaW5rX1pMaWJEZWNvZGVyU2lua19GaWx0ZXJTaW5rb3ZlcnJpZGVzZnJvbVJhd1BhdGhnZXRDdXJyZW50RGlyZWN0b3J5c2V0Q3VycmVudERpcmVjdG9yeXN5c3RlbVRlbXBnZXRTeXN0ZW1UZW1wRGlyZWN0b3J5cmVzb2x2ZVN5bWJvbGljTGlua3NyZXNvbHZlU3ltYm9saWNMaW5rc1N5bmNyZW5hbWVuZXdQYXRocmVuYW1lU3luY2Fic29sdXRlZm9sbG93TGlua3NfRGlyZWN0b3J5X3Jhd1BhdGhyYXdQYXRocmF3UGF0aCBjYW5ub3QgYmUgbnVsbERpcmVjdG9yeV9DdXJyZW50X3NldEN1cnJlbnREaXJlY3RvcnlfU2V0Q3VycmVudF9jcmVhdGVUZW1wRGlyZWN0b3J5X0NyZWF0ZVRlbXBfc3lzdGVtVGVtcERpcmVjdG9yeV9TeXN0ZW1UZW1wX2V4aXN0c0RpcmVjdG9yeV9FeGlzdHNEaXJlY3RvcnlfQ3JlYXRlX2RlbGV0ZU5hdGl2ZURpcmVjdG9yeV9EZWxldGVfcmVuYW1lRGlyZWN0b3J5X1JlbmFtZV9maWxsV2l0aERpcmVjdG9yeUxpc3RpbmdEaXJlY3RvcnlfRmlsbFdpdGhEaXJlY3RvcnlMaXN0aW5nR2V0dGluZyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGZhaWxlZCBpcyBub3QgYSBTdHJpbmcgb3IgRGlyZWN0b3J5VGhpcyBlbWJlZGRlciBkaXNhbGxvd3Mgc2V0dGluZyBEaXJlY3RvcnkuY3VycmVudFNldHRpbmcgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBmYWlsZWRfaXNFcnJvclJlc3BvbnNlX2V4Y2VwdGlvbk9yRXJyb3JGcm9tUmVzcG9uc2VFeGlzdHMgZmFpbGVkX2Fic29sdXRlUGF0aENyZWF0aW9uIGZhaWxlZERpcmVjdG9yeS5jcmVhdGVUZW1wIGNhbGxlZCB3aXRoIGFuIGVtcHR5IHBhdGguIFRvIHVzZSB0aGUgc3lzdGVtIHRlbXAgZGlyZWN0b3J5LCB1c2UgRGlyZWN0b3J5LnN5c3RlbVRlbXBmdWxsUHJlZml4Q3JlYXRpb24gb2YgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmYWlsZWRfZGVsZXRlRGVsZXRpb24gZmFpbGVkX2RlbGV0ZVN5bmNSZW5hbWUgZmFpbGVkRGlyZWN0b3J5OiAnZXJyX0FzeW5jRGlyZWN0b3J5TGlzdGVyT3BzX0FzeW5jRGlyZWN0b3J5TGlzdGVybGlzdEZpbGVsaXN0RGlyZWN0b3J5bGlzdExpbmtsaXN0RXJyb3JsaXN0RG9uZXJlc3BvbnNlVHlwZXJlc3BvbnNlUGF0aHJlc3BvbnNlQ29tcGxldGVyZXNwb25zZUVycm9yY2FuY2VsZWRuZXh0UnVubmluZ19vcHNfY2xlYW51cGVycm9yVHlwZXJlc3BvbnNlRXJyb3JJbmZvZXJyb3JQYXRoRGlyZWN0b3J5IGxpc3RpbmcgZmFpbGVkX0VtYmVkZGVyQ29uZmlnX21heUNoZGlyX21heUV4aXRfbWF5U2V0RWNob01vZGVfbWF5U2V0TGluZU1vZGVfbWF5U2xlZXBfRXZlbnRIYW5kbGVyX3RpbWVyTWlsbGlzZWNvbmRDbG9ja0V2ZW50SGFuZGxlcl9UaW1lck1pbGxpc2Vjb25kQ2xvY2tFdmVudEhhbmRsZXJfU2VuZERhdGFzZW5kZXJSRUFEVXNlIHJlYWQgaW5zdGVhZFdSSVRFVXNlIHdyaXRlIGluc3RlYWRBUFBFTkRVc2UgYXBwZW5kIGluc3RlYWR3cml0ZU9ubHlXUklURV9PTkxZVXNlIHdyaXRlT25seSBpbnN0ZWFkd3JpdGVPbmx5QXBwZW5kV1JJVEVfT05MWV9BUFBFTkRVc2Ugd3JpdGVPbmx5QXBwZW5kIGluc3RlYWRGaWxlTG9ja1NIQVJFRFVzZSBzaGFyZWQgaW5zdGVhZGV4Y2x1c2l2ZUVYQ0xVU0lWRVVzZSBleGNsdXNpdmUgaW5zdGVhZGJsb2NraW5nU2hhcmVkQkxPQ0tJTkdfU0hBUkVEVXNlIGJsb2NraW5nU2hhcmVkIGluc3RlYWRibG9ja2luZ0V4Y2x1c2l2ZUJMT0NLSU5HX0VYQ0xVU0lWRVVzZSBibG9ja2luZ0V4Y2x1c2l2ZSBpbnN0ZWFkY3JlYXRlRmlsZWNvcHlTeW5jbGFzdEFjY2Vzc2VkbGFzdEFjY2Vzc2VkU3luY3NldExhc3RBY2Nlc3NlZHNldExhc3RBY2Nlc3NlZFN5bmNsYXN0TW9kaWZpZWRsYXN0TW9kaWZpZWRTeW5jc2V0TGFzdE1vZGlmaWVkc2V0TGFzdE1vZGlmaWVkU3luY29wZW5SZWFkcmVhZEFzTGluZXNyZWFkQXNMaW5lc1N5bmN3cml0ZUFzU3RyaW5nUmFuZG9tQWNjZXNzRmlsZXJlYWRCeXRlU3luY3dyaXRlQnl0ZVN5bmNwb3NpdGlvblN5bmNzZXRQb3NpdGlvblN5bmN0cnVuY2F0ZVN5bmNmbHVzaFN5bmNsb2NrU3luY3VubG9ja3VubG9ja1N5bmMsIHBhdGggPSAnX0ZpbGVTdHJlYW1fb3BlbmVkRmlsZV9jbG9zZUNvbXBsZXRlcl91bnN1YnNjcmliZWRfcmVhZEluUHJvZ3Jlc3NfYXRFbmRmb3JTdGRpbl9zZXR1cENvbnRyb2xsZXJfcmVhZEJsb2NrX2Nsb3NlRmlsZUJhZCBlbmQgcG9zaXRpb246IEJhZCBzdGFydCBwb3NpdGlvbjogb25SZWFkeW9uT3BlbkZpbGVvcGVuRmFpbGVkX0ZpbGVTdHJlYW1Db25zdW1lcl9maWxlX29wZW5GdXR1cmVmcm9tU3RkaW9vcGVuZWRGaWxlX0ZpbGVfZGlzcGF0Y2hXaXRoTmFtZXNwYWNlQ2Fubm90IGNoZWNrIGV4aXN0ZW5jZUZpbGVfRXhpc3RzQ2Fubm90IGNoZWNrIGV4aXN0ZW5jZSBvZiBmaWxlQ2Fubm90IGNyZWF0ZSBmaWxlRmlsZV9DcmVhdGVfY3JlYXRlTGlua0ZpbGVfQ3JlYXRlTGlua19saW5rVGFyZ2V0RmlsZV9MaW5rVGFyZ2V0Q2Fubm90IGRlbGV0ZSBmaWxlRmlsZV9EZWxldGVfZGVsZXRlTGlua05hdGl2ZUZpbGVfRGVsZXRlTGlua0Nhbm5vdCByZW5hbWUgZmlsZSB0byAnRmlsZV9SZW5hbWVvbGRQYXRoX3JlbmFtZUxpbmtGaWxlX1JlbmFtZUxpbmtDYW5ub3QgY29weSBmaWxlIHRvICdfY29weUZpbGVfQ29weUludmFsaWQgZmlsZSBtb2RlIGZvciB0aGlzIG9wZXJhdGlvbkNhbm5vdCBvcGVuIGZpbGVDYW5ub3QgcmV0cmlldmUgbGVuZ3RoIG9mIGZpbGVfbGVuZ3RoRnJvbVBhdGhGaWxlX0xlbmd0aEZyb21QYXRoQ2Fubm90IHJldHJpZXZlIGFjY2VzcyB0aW1lX2xhc3RBY2Nlc3NlZEZpbGVfTGFzdEFjY2Vzc2VkbWlsbGlzQ2Fubm90IHNldCBhY2Nlc3MgdGltZV9zZXRMYXN0QWNjZXNzZWRGaWxlX1NldExhc3RBY2Nlc3NlZEZhaWxlZCB0byBzZXQgZmlsZSBhY2Nlc3MgdGltZUNhbm5vdCByZXRyaWV2ZSBtb2RpZmljYXRpb24gdGltZV9sYXN0TW9kaWZpZWRGaWxlX0xhc3RNb2RpZmllZENhbm5vdCBzZXQgbW9kaWZpY2F0aW9uIHRpbWVfc2V0TGFzdE1vZGlmaWVkRmlsZV9TZXRMYXN0TW9kaWZpZWRGYWlsZWQgdG8gc2V0IGZpbGUgbW9kaWZpY2F0aW9uIHRpbWVGaWxlX09wZW5fb3BlblN0ZGlvRmlsZV9PcGVuU3RkaW9fb3BlblN0ZGlvU3luY0Nhbm5vdCBvcGVuIHN0ZGlvIGZpbGUgZm9yOiBjb25zdW1lcnJlYWREYXRhQ2h1bmtlZF90cnlEZWNvZGVGYWlsZWQgdG8gZGVjb2RlIGRhdGEgdXNpbmcgZW5jb2RpbmcgJ0ZpbGU6ICd0aHJvd0lmRXJyb3JfUmFuZG9tQWNjZXNzRmlsZU9wc19SYW5kb21BY2Nlc3NGaWxlX2Nvbm5lY3RlZFJlc291cmNlSGFuZGxlcl9hc3luY0Rpc3BhdGNoZWRfZmlsZVNlcnZpY2Vsb2NrVW5sb2NrX21heWJlQ29ubmVjdEhhbmRsZXJfbWF5YmVQZXJmb3JtQ2xlYW51cGV4dC5kYXJ0LmlvLmdldE9wZW5GaWxlc2V4dC5kYXJ0LmlvLmdldEZpbGVCeUlEX2Rpc3BhdGNobWFya0Nsb3NlZENhbm5vdCBjbG9zZSBmaWxlcmVhZEJ5dGUgZmFpbGVkcmVhZCBmYWlsZWRyZWFkU3luYyBmYWlsZWRyZWFkSW50byBmYWlsZWR3cml0ZUJ5dGUgZmFpbGVkSW52YWxpZCBhcmd1bWVudHMgdG8gd3JpdGVGcm9td3JpdGVGcm9tIGZhaWxlZHBvc2l0aW9uIGZhaWxlZHNldFBvc2l0aW9uIGZhaWxlZHRydW5jYXRlIGZhaWxlZGxlbmd0aCBmYWlsZWRmbHVzaCBmYWlsZWRfZmlsZUxvY2tWYWx1ZWZsbG9jayBmYWlsZWR1bmxvY2sgZmFpbGVkRmlsZSBjbG9zZWRBbiBhc3luYyBvcGVyYXRpb24gaXMgY3VycmVudGx5IHBlbmRpbmdGaWxlU3lzdGVtRW50aXR5VHlwZUZJTEVVc2UgZmlsZSBpbnN0ZWFkZGlyZWN0b3J5RElSRUNUT1JZVXNlIGRpcmVjdG9yeSBpbnN0ZWFkTElOS1VzZSBsaW5rIGluc3RlYWRfdHlwZUxpc3RfbG9va3VwRmlsZVN0YXRfY2hhbmdlZFRpbWVfbW9kaWZpZWRUaW1lX2FjY2Vzc2VkVGltZV9ub3RGb3VuZGFjY2Vzc2VkX2ludGVybmFsTm90Rm91bmRfc3RhdFN5bmNGaWxlX1N0YXRzdGF0U3luY19zdGF0U3luY0ludGVybmFsX3N0YXRGaWxlU3RhdDogdHlwZSAKICAgICAgICAgIGNoYW5nZWQgCiAgICAgICAgICBtb2RpZmllZCAKICAgICAgICAgIGFjY2Vzc2VkIAogICAgICAgICAgbW9kZSBtb2RlU3RyaW5nCiAgICAgICAgICBzaXplIHBlcm1pc3Npb25zLS14LXctLXd4ci0tci14cnctcnd4KHN1aWQpIChndWlkKSAoc3RpY2t5KSBfYWJzb2x1dGVXaW5kb3dzUGF0aFBhdHRlcm5eKFxcXFx8W2EtekEtWl06Wy9cXF0pX3BhcmVudFJlZ0V4cFteL1xcXVsvXFxdK1teL1xcXVteL10vK1teL11DYW5ub3QgcmVzb2x2ZSBzeW1ib2xpYyBsaW5rc3RyaW1tZWRQYXRoZnNXYXRjaF9pZGVudGljYWxwYXRoMXBhdGgyRXJyb3IgaW4gRmlsZVN5c3RlbUVudGl0eS5pZGVudGljYWwoZnNlSWRlbnRpY2FsX3Jhd0Fic29sdXRlUGF0aF9pZGVudGljYWxTeW5jRXJyb3IgaW4gRmlsZVN5c3RlbUVudGl0eS5pZGVudGljYWxTeW5jaWRlbnRpY2FsU3luY2ZzZUlkZW50aWNhbFN5bmNpc1dhdGNoU3VwcG9ydGVkZnNXYXRjaElzU3VwcG9ydGVkX3RvVXRmOEFycmF5X3RvTnVsbFRlcm1pbmF0ZWRVdGY4QXJyYXlfdG9TdHJpbmdGcm9tVXRmOEFycmF5bm9uTnVsbFRlcm1pbmF0ZWR0eXBlU3luY2lzTGlua19pc0xpbmtSYXdpc0ZpbGVpc0xpbmtTeW5jX2lzTGlua1Jhd1N5bmNpc0ZpbGVTeW5jaXNEaXJlY3RvcnlTeW5jX2dldFR5cGVOYXRpdmVGaWxlX0dldFR5cGVfaWRlbnRpY2FsTmF0aXZlRmlsZV9BcmVJZGVudGljYWxfcmVzb2x2ZVN5bWJvbGljTGlua3NGaWxlX1Jlc29sdmVTeW1ib2xpY0xpbmtzcGFyZW50T2Zyb290RW5kWy9cXF1fZ2V0VHlwZVN5bmNIZWxwZXJFcnJvciBnZXR0aW5nIHR5cGUgb2YgRmlsZVN5c3RlbUVudGl0eV9nZXRUeXBlU3luY2ZzZUdldFR5cGVTeW5jX2dldFR5cGVSZXF1ZXN0RXJyb3IgZ2V0dGluZyB0eXBlX2dldFR5cGVmc2VHZXRUeXBlX3Rocm93SWZFcnJvcl90cmltVHJhaWxpbmdQYXRoU2VwYXJhdG9yc19lbnN1cmVUcmFpbGluZ1BhdGhTZXBhcmF0b3JzRmlsZVN5c3RlbUV2ZW50Q1JFQVRFVXNlIGNyZWF0ZSBpbnN0ZWFkbW9kaWZ5TU9ESUZZVXNlIG1vZGlmeSBpbnN0ZWFkREVMRVRFVXNlIGRlbGV0ZSBpbnN0ZWFkbW92ZU1PVkVVc2UgbW92ZSBpbnN0ZWFkVXNlIGFsbCBpbnN0ZWFkX21vZGlmeUF0dHJpYnV0ZXNfZGVsZXRlU2VsZl9pc0RpckZpbGVTeXN0ZW1DcmVhdGVFdmVudEZpbGVTeXN0ZW1DcmVhdGVFdmVudCgnRmlsZVN5c3RlbU1vZGlmeUV2ZW50Y29udGVudENoYW5nZWRGaWxlU3lzdGVtTW9kaWZ5RXZlbnQoJycsIGNvbnRlbnRDaGFuZ2VkPUZpbGVTeXN0ZW1EZWxldGVFdmVudEZpbGVTeXN0ZW1EZWxldGVFdmVudCgnRmlsZVN5c3RlbU1vdmVFdmVudEZpbGVTeXN0ZW1Nb3ZlRXZlbnQoJywgJ19GaWxlU3lzdGVtV2F0Y2hlcl9yZWN1cnNpdmVfYnJvYWRjYXN0Q29udHJvbGxlckZpbGUgc3lzdGVtIHdhdGNoaW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybUZhaWxlZCB0byBpbml0aWFsaXplIGZpbGUgc3lzdGVtIGVudGl0eSB3YXRjaGVyRmFpbGVkIHRvIHdhdGNoIHBhdGhfZG9uZVBhdGhXYXRjaGVkX3BhdGhGcm9tUGF0aElkX2xpc3Rlbk9uU29ja2V0c3RvcHNnZXRQYXRoZ2V0SXNEaXJyZXdyaXRlTW92ZWlzRGlyX2luaXRXYXRjaGVyRmlsZVN5c3RlbVdhdGNoZXJfSW5pdFdhdGNoZXJfY2xvc2VXYXRjaGVyRmlsZVN5c3RlbVdhdGNoZXJfQ2xvc2VXYXRjaGVyX3dhdGNoUGF0aEZpbGVTeXN0ZW1XYXRjaGVyX1dhdGNoUGF0aF91bndhdGNoUGF0aEZpbGVTeXN0ZW1XYXRjaGVyX1Vud2F0Y2hQYXRocGF0aF9pZF9yZWFkRXZlbnRzRmlsZVN5c3RlbVdhdGNoZXJfUmVhZEV2ZW50c19nZXRTb2NrZXRJZEZpbGVTeXN0ZW1XYXRjaGVyX0dldFNvY2tldElkRmlsZVN5c3RlbVdhdGNoZXJfSXNTdXBwb3J0ZWRfSU9SZXNvdXJjZUluZm9fc3dfc3RhcnRUaW1lZWxhcHNlZE1pY3Jvc2Vjb25kc2Z1bGxWYWx1ZU1hcHJlZmVyZW5jZVZhbHVlTWFwZ2V0TmV4dElEX1JlYWRXcml0ZVJlc291cmNlSW5mb3RvdGFsV3JpdHRlbnJlYWRDb3VudHdyaXRlQ291bnRsYXN0UmVhZGxhc3RXcml0ZV9GaWxlUmVzb3VyY2VJbmZvb3BlbkZpbGVzRmlsZU9wZW5lZEZpbGVDbG9zZWRnZXRPcGVuRmlsZXNMaXN0Z2V0T3BlbkZpbGVzX29wZW5maWxlc2pzb25WYWx1ZWdldEZpbGVJbmZvTWFwZ2V0RmlsZUluZm9NYXBCeUlEX1Byb2Nlc3NSZXNvdXJjZUluZm9zdGFydGVkQXRzdGFydGVkUHJvY2Vzc2VzUHJvY2Vzc1N0YXJ0ZWRQcm9jZXNzU3RvcHBlZGdldFN0YXJ0ZWRQcm9jZXNzZXNMaXN0Z2V0U3RhcnRlZFByb2Nlc3Nlc19zdGFydGVkcHJvY2Vzc2VzZ2V0UHJvY2Vzc0luZm9NYXBCeUlkX1NvY2tldFJlc291cmNlSW5mb190Y3BTdHJpbmdUQ1BfdWRwU3RyaW5nVURQb3BlblNvY2tldHNsaXN0ZW5pbmc6cmVtb3RlcmVtb3RlSG9zdGdldE9wZW5Tb2NrZXRzTGlzdGdldFNvY2tldEluZm9NYXBsaXN0ZW5pbmdOQWFkZHJlc3NUeXBlZ2V0U29ja2V0SW5mb01hcEJ5SURnZXRPcGVuU29ja2V0c19vcGVuc29ja2V0c1NvY2tldE9wZW5lZFNvY2tldENsb3NlZF9TdHJlYW1TaW5rSW1wbF9kb25lQ29tcGxldGVyX2NvbnRyb2xsZXJJbnN0YW5jZV9jb250cm9sbGVyQ29tcGxldGVyX2lzQm91bmRTdHJlYW1TaW5rIGlzIGNsb3NlZFN0cmVhbVNpbmsgaXMgYWxyZWFkeSBib3VuZCB0byBhIHN0cmVhbVN0cmVhbVNpbmsgaXMgYm91bmQgdG8gYSBzdHJlYW1fY2xvc2VUYXJnZXRfY29tcGxldGVEb25lVmFsdWVfY29tcGxldGVEb25lRXJyb3JfSU9TaW5rSW1wbF9lbmNvZGluZ19lbmNvZGluZ011dGFibGVJT1NpbmsgZW5jb2RpbmcgaXMgbm90IG11dGFibGVfSU9TZXJ2aWNlX3NlcnZpY2VQb3J0c19yZXBseVRvUG9ydF9tZXNzYWdlTWFwZmlsZUV4aXN0c2ZpbGVDcmVhdGVmaWxlRGVsZXRlZmlsZVJlbmFtZWZpbGVDb3B5ZmlsZU9wZW5maWxlUmVzb2x2ZVN5bWJvbGljTGlua3NmaWxlQ2xvc2VmaWxlUG9zaXRpb25maWxlU2V0UG9zaXRpb25maWxlVHJ1bmNhdGVmaWxlTGVuZ3RoRnJvbVBhdGhmaWxlTGFzdEFjY2Vzc2VkZmlsZVNldExhc3RBY2Nlc3NlZGZpbGVMYXN0TW9kaWZpZWRmaWxlU2V0TGFzdE1vZGlmaWVkZmlsZUZsdXNoZmlsZVJlYWRCeXRlZmlsZVdyaXRlQnl0ZWZpbGVSZWFkZmlsZVJlYWRJbnRvZmlsZVdyaXRlRnJvbWZpbGVDcmVhdGVMaW5rZmlsZURlbGV0ZUxpbmtmaWxlUmVuYW1lTGlua2ZpbGVMaW5rVGFyZ2V0ZmlsZVR5cGVmaWxlSWRlbnRpY2FsZmlsZVN0YXRmaWxlTG9ja3NvY2tldExvb2t1cHNvY2tldExpc3RJbnRlcmZhY2Vzc29ja2V0UmV2ZXJzZUxvb2t1cGRpcmVjdG9yeUNyZWF0ZWRpcmVjdG9yeURlbGV0ZWRpcmVjdG9yeUV4aXN0c2RpcmVjdG9yeUNyZWF0ZVRlbXBkaXJlY3RvcnlMaXN0U3RhcnRkaXJlY3RvcnlMaXN0TmV4dGRpcmVjdG9yeUxpc3RTdG9wZGlyZWN0b3J5UmVuYW1lc3NsUHJvY2Vzc0ZpbHRlcl9lbnN1cmVJbml0aWFsaXplX2ZpbmFsaXplX2dldE5leHRJZHNlcnZpY2VQb3J0Y3JlYXRlTGlua3VwZGF0ZVN5bmN0YXJnZXRTeW5jX0xpbmtMaW5rOiAnX2V4Y2VwdGlvbkZyb21SZXNwb25zZUNhbm5vdCBjcmVhdGUgbGluayB0byB0YXJnZXQgJ0Nhbm5vdCBjcmVhdGUgbGlua0Nhbm5vdCBkZWxldGUgbGlua0Nhbm5vdCByZW5hbWUgbGluayB0byAnQ2Fubm90IHJlbmFtZSBsaW5rICdDYW5ub3QgZ2V0IHRhcmdldCBvZiBsaW5rQ2Fubm90IHJlYWQgbGlua19OYW1lc3BhY2VJT092ZXJyaWRlc19nbG9iYWxzb2NrZXRDb25uZWN0c29ja2V0U3RhcnRDb25uZWN0cnVuV2l0aElPT3ZlcnJpZGVzX0lPT3ZlcnJpZGVzU2NvcGVfY3JlYXRlRGlyZWN0b3J5X2dldEN1cnJlbnREaXJlY3Rvcnlfc2V0Q3VycmVudERpcmVjdG9yeV9nZXRTeXN0ZW1UZW1wRGlyZWN0b3J5X2NyZWF0ZUZpbGVfZnNlSWRlbnRpY2FsX2ZzZUlkZW50aWNhbFN5bmNfZnNlR2V0VHlwZV9mc2VHZXRUeXBlU3luY19mc1dhdGNoX2ZzV2F0Y2hJc1N1cHBvcnRlZF9zb2NrZXRDb25uZWN0X3NvY2tldFN0YXJ0Q29ubmVjdF9udW1iZXJPZlByb2Nlc3NvcnNfcGF0aFNlcGFyYXRvcl9vcGVyYXRpbmdTeXN0ZW1fb3BlcmF0aW5nU3lzdGVtVmVyc2lvbl9sb2NhbEhvc3RuYW1lX3ZlcnNpb25pc0xpbnV4bGludXhpc01hY09TbWFjb3Npc0FuZHJvaWRhbmRyb2lkaXNJT1Npb3Npc0Z1Y2hzaWFmdWNoc2lhbnVtYmVyT2ZQcm9jZXNzb3JzbG9jYWxlTmFtZW9wZXJhdGluZ1N5c3RlbW9wZXJhdGluZ1N5c3RlbVZlcnNpb25sb2NhbEhvc3RuYW1lcmVzb2x2ZWRFeGVjdXRhYmxlZXhlY3V0YWJsZUFyZ3VtZW50c3BhY2thZ2VzLyBkaXJlY3RvcnkgcmVzb2x1dGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluIERhcnQgMl9QbGF0Zm9ybV9sb2NhbGVDbG9zdXJlX2Vudmlyb25tZW50Q2FjaGVfY2FjaGVkT1NWZXJzaW9uX25hdGl2ZVNjcmlwdGRhdGE6UGxhdGZvcm1fTnVtYmVyT2ZQcm9jZXNzb3JzUGxhdGZvcm1fUGF0aFNlcGFyYXRvclBsYXRmb3JtX09wZXJhdGluZ1N5c3RlbVBsYXRmb3JtX09wZXJhdGluZ1N5c3RlbVZlcnNpb25QbGF0Zm9ybV9Mb2NhbEhvc3RuYW1lX2V4ZWN1dGFibGVQbGF0Zm9ybV9FeGVjdXRhYmxlTmFtZV9yZXNvbHZlZEV4ZWN1dGFibGVQbGF0Zm9ybV9SZXNvbHZlZEV4ZWN1dGFibGVOYW1lUGxhdGZvcm1fRW52aXJvbm1lbnRfZXhlY3V0YWJsZUFyZ3VtZW50c1BsYXRmb3JtX0V4ZWN1dGFibGVBcmd1bWVudHNQbGF0Zm9ybV9HZXRWZXJzaW9uX2xvY2FsZU5hbWVQbGF0Zm9ybV9Mb2NhbGVOYW1lX3NjcmlwdGVxdWFsc0luZGV4X0Nhc2VJbnNlbnNpdGl2ZVN0cmluZ01hcF9Qcm9jZXNzVXRpbHNfa2lsbFBpZFByb2Nlc3NfS2lsbFBpZF93YXRjaFNpZ25hbEludGVybmFsUHJvY2Vzc19FeGl0X3NldEV4aXRDb2RlUHJvY2Vzc19TZXRFeGl0Q29kZV9nZXRFeGl0Q29kZVByb2Nlc3NfR2V0RXhpdENvZGVfc2xlZXBQcm9jZXNzX1NsZWVwX3BpZFByb2Nlc3NfUGlkX3dhdGNoU2lnbmFsU0lHSFVQU0lHSU5UU0lHVVNSMVNJR1VTUjJTSUdXSU5DSExpc3RlbmluZyBmb3Igc2lnbmFsICBpcyBub3Qgc3VwcG9ydGVkUHJvY2Vzc0luZm9fbWF4UnNzUHJvY2Vzc0luZm9fTWF4UlNTX2N1cnJlbnRSc3NQcm9jZXNzSW5mb19DdXJyZW50UlNTY3VycmVudFJzc21heFJzc1Byb2Nlc3NTdGFydE1vZGVVc2Ugbm9ybWFsIGluc3RlYWRpbmhlcml0U3RkaW9JTkhFUklUX1NURElPVXNlIGluaGVyaXRTdGRpbyBpbnN0ZWFkZGV0YWNoZWRERVRBQ0hFRFVzZSBkZXRhY2hlZCBpbnN0ZWFkZGV0YWNoZWRXaXRoU3RkaW9ERVRBQ0hFRF9XSVRIX1NURElPVXNlIGRldGFjaGVkV2l0aFN0ZGlvIGluc3RlYWRydW5TeW5ja2lsbFBpZFByb2Nlc3NTaWduYWxzaWdodXBzaWdpbnRzaWdxdWl0c2lnaWxsU0lHSUxMc2lndHJhcFNJR1RSQVBzaWdhYnJ0U0lHQUJSVHNpZ2J1c1NJR0JVU3NpZ2ZwZVNJR0ZQRXNpZ2tpbGxTSUdLSUxMc2lndXNyMXNpZ3NlZ3ZTSUdTRUdWc2lndXNyMnNpZ3BpcGVTSUdQSVBFc2lnYWxybVNJR0FMUk1zaWd0ZXJtc2lnY2hsZFNJR0NITERzaWdjb250U0lHQ09OVHNpZ3N0b3BTSUdTVE9Qc2lndHN0cFNJR1RTVFBzaWd0dGluU0lHVFRJTnNpZ3R0b3VTSUdUVE9Vc2lndXJnU0lHVVJHc2lneGNwdVNJR1hDUFVzaWd4ZnN6U0lHWEZTWnNpZ3Z0YWxybVNJR1ZUQUxSTXNpZ3Byb2ZTSUdQUk9Gc2lnd2luY2hzaWdwb2xsU0lHUE9MTHNpZ3N5c1NJR1NZU1VzZSBzaWdodXAgaW5zdGVhZFVzZSBzaWdpbnQgaW5zdGVhZFVzZSBzaWdxdWl0IGluc3RlYWRVc2Ugc2lnaWxsIGluc3RlYWRVc2Ugc2lndHJhcCBpbnN0ZWFkVXNlIHNpZ2FicnQgaW5zdGVhZFVzZSBzaWdidXMgaW5zdGVhZFVzZSBzaWdmcGUgaW5zdGVhZFVzZSBzaWdraWxsIGluc3RlYWRVc2Ugc2lndXNyMSBpbnN0ZWFkVXNlIHNpZ3NlZ3YgaW5zdGVhZFVzZSBzaWd1c3IyIGluc3RlYWRVc2Ugc2lncGlwZSBpbnN0ZWFkVXNlIHNpZ2Fscm0gaW5zdGVhZFVzZSBzaWd0ZXJtIGluc3RlYWRVc2Ugc2lnY2hsZCBpbnN0ZWFkVXNlIHNpZ2NvbnQgaW5zdGVhZFVzZSBzaWdzdG9wIGluc3RlYWRVc2Ugc2lndHN0cCBpbnN0ZWFkVXNlIHNpZ3R0aW4gaW5zdGVhZFVzZSBzaWd0dG91IGluc3RlYWRVc2Ugc2lndXJnIGluc3RlYWRVc2Ugc2lneGNwdSBpbnN0ZWFkVXNlIHNpZ3hmc3ogaW5zdGVhZFVzZSBzaWd2dGFscm0gaW5zdGVhZFVzZSBzaWdwcm9mIGluc3RlYWRVc2Ugc2lnd2luY2ggaW5zdGVhZFVzZSBzaWdwb2xsIGluc3RlYWRVc2Ugc2lnc3lzIGluc3RlYWRTaWduYWxFeGNlcHRpb24sIG9zRXJyb3I6IFNpZ25hbEV4Y2VwdGlvbjogUHJvY2Vzc0V4Y2VwdGlvbk9TIGVycm9yIGNvZGU6IFByb2Nlc3NFeGNlcHRpb246IAogIENvbW1hbmQ6IFNlY3VyZVNlcnZlclNvY2tldHN1cHBvcnRlZFByb3RvY29sc3NlcnZlclNvY2tldFJhd1NlY3VyZVNlcnZlclNvY2tldF9jb250ZXh0Y29ubmVjdGlvbnNlY3VyZUNvbm5lY3Rpb25TZWN1cmVTb2NrZXRvbkJhZENlcnRpZmljYXRlcmF3U3RhdGUyLjZkZXRhY2hlZFJhd3NlY3VyZVNlcnZlcmJ1ZmZlcmVkRGF0YVJhd1NlY3VyZVNvY2tldFg1MDlDZXJ0aWZpY2F0ZV9GaWx0ZXJTdGF0dXNyZWFkRW1wdHl3cml0ZUVtcHR5cmVhZFBsYWludGV4dE5vTG9uZ2VyRW1wdHl3cml0ZVBsYWludGV4dE5vTG9uZ2VyRnVsbHJlYWRFbmNyeXB0ZWROb0xvbmdlckZ1bGx3cml0ZUVuY3J5cHRlZE5vTG9uZ2VyRW1wdHlfUmF3U2VjdXJlU29ja2V0aGFuZHNoYWtlU3RhdHVzY29ubmVjdGVkU3RhdHVzY2xvc2VkU3RhdHVzcmVhZFBsYWludGV4dElkd3JpdGVQbGFpbnRleHRJZHJlYWRFbmNyeXB0ZWRJZHdyaXRlRW5jcnlwdGVkSWRidWZmZXJDb3VudF9oYW5kc2hha2VDb21wbGV0ZV9zb2NrZXRTdWJzY3JpcHRpb25fYnVmZmVyZWREYXRhX2J1ZmZlcmVkRGF0YUluZGV4X3N0YXR1c19wYXVzZUNvdW50X3BlbmRpbmdSZWFkRXZlbnRfc29ja2V0Q2xvc2VkUmVhZF9zb2NrZXRDbG9zZWRXcml0ZV9jbG9zZWRSZWFkX2Nsb3NlZFdyaXRlX2ZpbHRlclN0YXR1c19jb25uZWN0UGVuZGluZ19maWx0ZXJQZW5kaW5nX2ZpbHRlckFjdGl2ZV9zZWN1cmVGaWx0ZXJfc2VsZWN0ZWRQcm90b2NvbHJlcXVlc3RlZFBvcnRfc2VjdXJlSGFuZHNoYWtlQ29tcGxldGVIYW5kbGVyX29uQmFkQ2VydGlmaWNhdGVXcmFwcGVyX2V2ZW50RGlzcGF0Y2hlcl9kb25lSGFuZGxlclN1YnNjcmlwdGlvbiBwYXNzZWQgdG8gVExTIHVwZ3JhZGUgaXMgcGF1c2VkX3NlY3VyZUhhbmRzaGFrZV9pc0J1ZmZlckVuY3J5cHRlZF9zZW5kV3JpdGVFdmVudF92ZXJpZnlGaWVsZHNob3N0IGlzIG5vdCBhIFN0cmluZyBvciBhbiBJbnRlcm5ldEFkZHJlc3NyZXF1ZXN0ZWRQb3J0IGlzIG5vdCBpbiB0aGUgcmFuZ2UgMC4uNjU1MzVfY29tcGxldGVDbG9zZUNvbXBsZXRlcl9zY2hlZHVsZVJlYWRFdmVudEludmFsaWQgbGVuZ3RoIHBhcmFtZXRlciBpbiBTZWN1cmVTb2NrZXQucmVhZCAobGVuZ3RoOiBSZWFkaW5nIGZyb20gYSBjbG9zZWQgc29ja2V0X3NjaGVkdWxlRmlsdGVySW52YWxpZCBieXRlcyBwYXJhbWV0ZXIgaW4gU2VjdXJlU29ja2V0LnJlYWQgKGJ5dGVzOiBJbnZhbGlkIG9mZnNldCBwYXJhbWV0ZXIgaW4gU2VjdXJlU29ja2V0LnJlYWQgKG9mZnNldDogV3JpdGluZyB0byBhIGNsb3NlZCBzb2NrZXR3cml0dGVuY2VydGlmaWNhdGVvbkJhZENlcnRpZmljYXRlIGNhbGxiYWNrIHJldHVybmVkIG5vbi1ib29sZWFuIF9yZWFkSGFuZGxlcl93cml0ZUhhbmRsZXJfY2xvc2VIYW5kbGVyX3JlYWRTb2NrZXRfd3JpdGVTb2NrZXRDb25uZWN0aW9uIHRlcm1pbmF0ZWQgZHVyaW5nIGhhbmRzaGFrZUNhbGxlZCByZW5lZ290aWF0ZSBvbiBhIG5vbi1jb25uZWN0ZWQgc29ja2V0X3RyeUZpbHRlcl9wdXNoQWxsRmlsdGVyU3RhZ2VzX3JlYWRTb2NrZXRPckJ1ZmZlcmVkRGF0YXdyaXRlRnJvbVNvdXJjZXJlYWRUb1NvY2tldF9zZW5kUmVhZEV2ZW50d2FzSW5IYW5kc2hha2VidWZzIGVycm9yIG5ld19zdGFydG5ld19lbmRfRXh0ZXJuYWxCdWZmZXJhZHZhbmNlU3RhcnRhZHZhbmNlRW5kbGluZWFyTGVuZ3RobGluZWFyRnJlZWJ5dGVzUmVhZHRvUmVhZGlucHV0RGF0YXRvV3JpdGVfU2VjdXJlRmlsdGVyVGxzRXhjZXB0aW9uSGFuZHNoYWtlRXhjZXB0aW9uQ2VydGlmaWNhdGVFeGNlcHRpb25TZWN1cml0eUNvbnRleHRhbHBuU3VwcG9ydGVkX3Byb3RvY29sc1RvTGVuZ3RoRW5jb2Rpbmdwcm90b2NvbHNMZW5ndGhleHBlY3RlZExlbmd0aExlbmd0aCBvZiBwcm90b2NvbCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMjU1ICh3YXM6IFRoZSBtYXhpbXVtIG1lc3NhZ2UgbGVuZ3RoIHN1cHBvcnRlZCBpcyAyXjEzLTEuYnl0ZXNPZmZzZXRfcHJvdG9jb2xzVG9MZW5ndGhFbmNvZGluZ05vbkFzY2lpQmFpbG91dGFkZFByb3RvY29sb3V0Qnl0ZXNwcm90b2NvbEJ5dGVzX1NlcnZpY2VPYmplY3RJbnRlcm5ldEFkZHJlc3NUeXBlSVB2NElQdjZJUF9WNFVzZSBJUHY0IGluc3RlYWRJUF9WNlVzZSBJUHY2IGluc3RlYWRBTllVc2UgYW55IGluc3RlYWRfZnJvbUludmFsaWQgdHlwZTogSW52YWxpZCBJbnRlcm5ldEFkZHJlc3NJbnRlcm5ldEFkZHJlc3NUeXBlOiBJbnRlcm5ldEFkZHJlc3NMT09QQkFDS19JUF9WNFVzZSBsb29wYmFja0lQdjQgaW5zdGVhZExPT1BCQUNLX0lQX1Y2VXNlIGxvb3BiYWNrSVB2NiBpbnN0ZWFkQU5ZX0lQX1Y0VXNlIGFueUlQdjQgaW5zdGVhZEFOWV9JUF9WNlVzZSBhbnlJUHY2IGluc3RlYWROZXR3b3JrSW50ZXJmYWNlX2xpc3RTdXBwb3J0ZWROZXR3b3JrSW50ZXJmYWNlX0xpc3RTdXBwb3J0ZWRsaXN0U3VwcG9ydGVkUmF3U2VydmVyU29ja2V0U2VydmVyU29ja2V0U29ja2V0RGlyZWN0aW9uUkVDRUlWRVVzZSByZWNlaXZlIGluc3RlYWRTRU5EVXNlIHNlbmQgaW5zdGVhZFVzZSBib3RoIGluc3RlYWRTb2NrZXRPcHRpb250Y3BOb0RlbGF5VENQX05PREVMQVlVc2UgdGNwTm9EZWxheSBpbnN0ZWFkX2lwTXVsdGljYXN0TG9vcF9pcE11bHRpY2FzdEhvcHNfaXBNdWx0aWNhc3RJZl9pcEJyb2FkY2FzdF9SYXdTb2NrZXRPcHRpb25zX1Jhd1NvY2tldE9wdGlvbnMuU09MX1NPQ0tFVF9SYXdTb2NrZXRPcHRpb25zLklQUFJPVE9fSVBfUmF3U29ja2V0T3B0aW9ucy5JUF9NVUxUSUNBU1RfSUZfUmF3U29ja2V0T3B0aW9ucy5JUFBST1RPX0lQVjZfUmF3U29ja2V0T3B0aW9ucy5JUFY2X01VTFRJQ0FTVF9JRl9SYXdTb2NrZXRPcHRpb25zLklQUFJPVE9fVENQX1Jhd1NvY2tldE9wdGlvbnMuSVBQUk9UT19VRFBTT0xfU09DS0VUSVBQUk9UT19JUElQX01VTFRJQ0FTVF9JRklQUFJPVE9fSVBWNklQVjZfTVVMVElDQVNUX0lGSVBQUk9UT19UQ1BJUFBST1RPX1VEUFJhd1NvY2tldE9wdGlvbl9vcHRpb25zQ2FjaGVfZ2V0TmF0aXZlT3B0aW9uVmFsdWVSYXdTb2NrZXRPcHRpb25fR2V0T3B0aW9uVmFsdWVmcm9tSW50ZnJvbUJvb2xsZXZlbFNvY2tldGxldmVsSVB2NElQdjRNdWx0aWNhc3RJbnRlcmZhY2VsZXZlbElQdjZJUHY2TXVsdGljYXN0SW50ZXJmYWNlbGV2ZWxUY3BsZXZlbFVkcF9nZXRPcHRpb25WYWx1ZVJhd1NvY2tldEV2ZW50cmVhZENsb3NlZFJFQURfQ0xPU0VEVXNlIHJlYWRDbG9zZWQgaW5zdGVhZENMT1NFRFVzZSBjbG9zZWQgaW5zdGVhZFJhd1NvY2tldEV2ZW50LnJlYWRSYXdTb2NrZXRFdmVudC53cml0ZVJhd1NvY2tldEV2ZW50LnJlYWRDbG9zZWRSYXdTb2NrZXRFdmVudC5jbG9zZWRDb25uZWN0aW9uVGFza1Jhd1NvY2tldFNvY2tldF9jb25uZWN0X3N0YXJ0Q29ubmVjdHJhd1Rhc2tEYXRhZ3JhbVJhd0RhdGFncmFtU29ja2V0VGhpcyBwcm9wZXJ0eSBpcyBub3QgaW1wbGVtZW50ZWQuIFVzZSBnZXRSYXdPcHRpb24gYW5kIHNldFJhd09wdGlvbiBpbnN0ZWFkLiwgYWRkcmVzcyA9ICwgcG9ydCA9IF9TdGRTdHJlYW1TdGRpbl9mZF9lY2hvTW9kZVN0ZGluX0dldEVjaG9Nb2RlX3NldEVjaG9Nb2RlU3RkaW5fU2V0RWNob01vZGVfbGluZU1vZGVTdGRpbl9HZXRMaW5lTW9kZV9zZXRMaW5lTW9kZVN0ZGluX1NldExpbmVNb2RlU3RkaW5fUmVhZEJ5dGVTdGRpbl9BbnNpU3VwcG9ydGVkcmVhZExpbmVTeW5jcmV0YWluTmV3bGluZXNjcklzTmV3bGluZXRlcm1pbmFsbGluZU1vZGVlY2hvTW9kZUVycm9yIGdldHRpbmcgdGVybWluYWwgZWNobyBtb2RlVGhpcyBlbWJlZGRlciBkaXNhbGxvd3Mgc2V0dGluZyBTdGRpbi5lY2hvTW9kZUVycm9yIHNldHRpbmcgdGVybWluYWwgZWNobyBtb2RlRXJyb3IgZ2V0dGluZyB0ZXJtaW5hbCBsaW5lIG1vZGVUaGlzIGVtYmVkZGVyIGRpc2FsbG93cyBzZXR0aW5nIFN0ZGluLmxpbmVNb2RlRXJyb3Igc2V0dGluZyB0ZXJtaW5hbCBsaW5lIG1vZGVFcnJvciBkZXRlcm1pbmluZyBBTlNJIHN1cHBvcnRFcnJvciByZWFkaW5nIGJ5dGUgZnJvbSBzdGRpbmhhc1Rlcm1pbmFsU3Rkb3V0X25vbkJsb2NraW5nX3Rlcm1pbmFsU2l6ZUNvdWxkIG5vdCBnZXQgdGVybWluYWwgc2l6ZV9nZXRUZXJtaW5hbFNpemVTdGRvdXRfR2V0VGVybWluYWxTaXplX2dldEFuc2lTdXBwb3J0ZWRTdGRvdXRfQW5zaVN1cHBvcnRlZF9oYXNUZXJtaW5hbHRlcm1pbmFsQ29sdW1uc190ZXJtaW5hbENvbHVtbnN0ZXJtaW5hbExpbmVzX3Rlcm1pbmFsTGluZXNTdGRvdXRFeGNlcHRpb25TdGRvdXRFeGNlcHRpb246IFN0ZGluRXhjZXB0aW9uU3RkaW5FeGNlcHRpb246IF9TdGRDb25zdW1lcl9TdGRTaW5rU3RkaW9UeXBlVEVSTUlOQUxVc2UgdGVybWluYWwgaW5zdGVhZFBJUEVVc2UgcGlwZSBpbnN0ZWFkVXNlIG90aGVyIGluc3RlYWRTdGRpb1R5cGU6IF9TdGRJT1V0aWxzX25hdGl2ZVNvY2tldFR5cGVFcnJvciByZXRyaWV2aW5nIHNvY2tldCB0eXBlX2dldFN0ZGlvT3V0cHV0U3RyZWFtQ291bGRuJ3QgZGV0ZXJtaW5lIGZpbGUgdHlwZSBvZiBzdGRpbyBoYW5kbGUgKGZkIF9nZXRTdGRpb0lucHV0U3RyZWFtQ291bGRuJ3QgZGV0ZXJtaW5lIGZpbGUgdHlwZSBvZiBzdGRpbiAoZmQgX3NvY2tldFR5cGVfZ2V0U3RkaW9IYW5kbGVUeXBlRmlsZV9HZXRTdGRpb0hhbmRsZVR5cGVTeXN0ZW1FbmNvZGluZ3N5c3RlbV9XaW5kb3dzQ29kZVBhZ2VFbmNvZGVySW52YWxpZCBjaGFyYWN0ZXIgZm9yIGVuY29kaW5nX2VuY29kZVN0cmluZ1N0cmluZ1RvU3lzdGVtRW5jb2RpbmdfV2luZG93c0NvZGVQYWdlRW5jb2RlclNpbmtfV2luZG93c0NvZGVQYWdlRGVjb2Rlcl9kZWNvZGVCeXRlc1N5c3RlbUVuY29kaW5nVG9TdHJpbmdfV2luZG93c0NvZGVQYWdlRGVjb2RlclNpbmtSYXdTeW5jaHJvbm91c1NvY2tldF9zaWduYWxDb250cm9sbGVyc19zdWNjZXNzUmVzcG9uc2VfaWxsZWdhbEFyZ3VtZW50UmVzcG9uc2Vfb3NFcnJvclJlc3BvbnNlX2ZpbGVDbG9zZWRSZXNwb25zZV9lcnJvclJlc3BvbnNlRXJyb3JUeXBlX29zRXJyb3JSZXNwb25zZUVycm9yQ29kZV9vc0Vycm9yUmVzcG9uc2VNZXNzYWdlemxpYlpMSUJVc2UgemxpYiBpbnN0ZWFkR1pJUFVzZSBnemlwIGluc3RlYWRVc2UgRmlsZU1vZGUucmVhZCBpbnN0ZWFkVXNlIEZpbGVNb2RlLndyaXRlIGluc3RlYWRVc2UgRmlsZU1vZGUuYXBwZW5kIGluc3RlYWRVc2UgRmlsZU1vZGUud3JpdGVPbmx5IGluc3RlYWRVc2UgRmlsZU1vZGUud3JpdGVPbmx5QXBwZW5kIGluc3RlYWRfYmxvY2tTaXplX2lvT3ZlcnJpZGVzVG9rZW5fYXN5bmNSdW5ab25lZF9uZXh0U2VydmljZUlkX3N0ZGlvSGFuZGxlVHlwZVRlcm1pbmFsX3N0ZGlvSGFuZGxlVHlwZVBpcGVfc3RkaW9IYW5kbGVUeXBlRmlsZV9zdGRpb0hhbmRsZVR5cGVTb2NrZXRfc3RkaW9IYW5kbGVUeXBlT3RoZXJfc3RkaW5GRF9zdGRvdXRGRF9zdGRlcnJGRHN5c3RlbUVuY29kaW5nU1lTVEVNX0VOQ09ESU5HVXNlIHN5c3RlbUVuY29kaW5nIGluc3RlYWRfdXJpQmFzZUNsb3N1cmVfZ2V0VXJpQmFzZUNsb3N1cmVfbWFrZVVpbnQ4TGlzdFZpZXdfZ2V0V2F0Y2hTaWduYWxJbnRlcm5hbF9ydW5Ob25JbnRlcmFjdGl2ZVByb2Nlc3Nmb2xkU3RyZWFtX3J1bk5vbkludGVyYWN0aXZlUHJvY2Vzc1N5bmNfdGhyb3dPbkJhZFBvcnRJbnZhbGlkIHBvcnQgX3Rocm93T25CYWRUdGxJbnZhbGlkIHR0bCBfbWFrZURhdGFncmFtX2dldFN0ZGlvSGFuZGxlU29ja2V0X0dldFN0ZGlvSGFuZGxlX2dldFNvY2tldFR5cGVTb2NrZXRfR2V0VHlwZV9lbnN1cmVGYXN0QW5kU2VyaWFsaXphYmxlQnl0ZURhdGFMaXN0IGVsZW1lbnQgaXMgbnVsbCBhdCBpbmRleCBfdmFsaWRhdGVaTGliV2luZG93Qml0c192YWxpZGF0ZVpMaWJlTGV2ZWxfdmFsaWRhdGVaTGliTWVtTGV2ZWxfdmFsaWRhdGVaTGliU3RyYXRlZ3lVbnN1cHBvcnRlZCAnc3RyYXRlZ3knVGhpcyBlbWJlZGRlciBkaXNhbGxvd3MgY2FsbGluZyBkYXJ0OmlvJ3MgZXhpdCgpc2xlZXBzbGVlcDogZHVyYXRpb24gY2Fubm90IGJlIG5lZ2F0aXZlVGhpcyBlbWJlZGRlciBkaXNhbGxvd3MgY2FsbGluZyBkYXJ0OmlvJ3Mgc2xlZXAoKV9zZXRTdGRpb0ZEc3N0ZGlvVHlwZXN0ZGlvZmRkYXJ0LmNsaXdhaXRfZm9yLmRhcnRfV2FpdEZvclV0aWxzd2FpdEZvckV2ZW50d2FpdEZvciBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZW1iZWRkZXJfd2FpdEZvckV2ZW50Q2xvc3VyZV93YWl0Rm9yRXZlbnRDTElfV2FpdEZvckV2ZW50dGltZW91dE1pbGxpc19nZXRXYWl0Rm9yRXZlbnR3YWl0Rm9yZnV0dXJlQ29tcGxldGVkc3RhY2t0cmFjZXdhaXRGb3IoKSB0aW1lZCBvdXRkYXJ0Lndhc21jYWxsV2FzbV9jYWxsV2FzbVdhc21fY2FsbEZ1bmN0aW9uZGFydC5jb3JlTWFwc2JpZ2ludC5kYXJ0Ym9vbC5kYXJ0Y29tcGFyYWJsZS5kYXJ0ZGF0ZV90aW1lLmRhcnRkb3VibGUuZGFydGR1cmF0aW9uLmRhcnRlcnJvcnMuZGFydGV4Y2VwdGlvbnMuZGFydGV4cGFuZG8uZGFydGZ1bmN0aW9uLmRhcnRpZGVudGljYWwuZGFydGludC5kYXJ0aW52b2NhdGlvbi5kYXJ0bWFwLmRhcnRudWxsLmRhcnRudW0uZGFydG9iamVjdC5kYXJ0cGF0dGVybi5kYXJ0cmVnZXhwLmRhcnRzaW5rLmRhcnRzdGFja3RyYWNlLmRhcnRzdG9wd2F0Y2guZGFydHN0cmluZy5kYXJ0c3RyaW5nX2J1ZmZlci5kYXJ0c3RyaW5nX3NpbmsuZGFydHR5cGUuZGFydHVyaS5kYXJ0X1N5bmNHZW5lcmF0b3JDYWxsYmFja19VcmlCYXNlQ2xvc3VyZUNvbXBhcmF0b3JfR2VuZXJhdG9yX21vdmVOZXh0Rm5feWllbGRFYWNoSXRlcmF0b3JfTGlzdExpc3RfYWxsb2NhdGVMaXN0X2dldEluZGV4ZWRfc2V0SW5kZXhlZExpc3Rfc2V0SW5kZXhlZExpc3RfZ2V0TGVuZ3RoX3NsaWNlbmVlZHNUeXBlQXJndW1lbnRfc2xpY2VJbnRlcm5hbExpc3Rfc2xpY2VpdGVyYWJsZUFzTGlzdF9zZXRMZW5ndGhfSW1tdXRhYmxlTGlzdEltbXV0YWJsZUFycmF5IGNhbiBvbmx5IGJlIGFsbG9jYXRlZCBieSB0aGUgVk1JbW11dGFibGVMaXN0X2Zyb21fRml4ZWRTaXplQXJyYXlJdGVyYXRvcl9CaWdJbnRJbXBsX2RpZ2l0Qml0c19kaWdpdEJhc2VfZGlnaXRNYXNrX2hhbGZEaWdpdEJpdHNfaGFsZkRpZ2l0TWFza3R3b19taW51c09uZV9vbmVEaWdpdE1hc2tfdHdvRGlnaXRNYXNrX29uZUJpbGxpb25fbWluSW50LTkyMjMzNzIwMzY4NTQ3NzU4MDhfbWF4SW50OTIyMzM3MjAzNjg1NDc3NTgwN19sYXN0RGl2aWRlbmREaWdpdHNfbGFzdERpdmlkZW5kVXNlZF9sYXN0RGl2aXNvckRpZ2l0c19sYXN0RGl2aXNvclVzZWRfbGFzdFF1b1JlbURpZ2l0c19sYXN0UXVvUmVtVXNlZF9sYXN0UmVtVXNlZF9sYXN0UmVtX25zaF9pc05lZ2F0aXZlX2RpZ2l0c19iaXRzRm9yRnJvbURvdWJsZV9kaXZpc29yTG93VG9wRGlnaXRfZGl2aXNvclRvcERpZ2l0X3F1b3RpZW50RGlnaXRfcXVvdGllbnRIaWdoRGlnaXRfbm9ybWFsaXplZHJhZGl4Q291bGQgbm90IHBhcnNlIEJpZ0ludF9wYXJzZURlY2ltYWxkaWdpdEluUGFydENvdW50X2NvZGVVbml0VG9SYWRpeFZhbHVlX3BhcnNlSGV4c3RhcnRQb3NoZXhDaGFyc1BlckRpZ2l0c291cmNlTGVuZ3RobGFzdERpZ2l0TGVuZ3RoZGlnaXRJbmRleF9wYXJzZVJhZGl4X3RyeVBhcnNlcmVeXHMqKFsrLV0/KSgoMHhbYS1mMC05XSspfChcZCspfChbYS16MC05XSspKVxzKiRjYXNlU2Vuc2l0aXZlc2lnbkluZGV4aGV4SW5kZXhkZWNpbWFsSW5kZXhub25EZWNpbWFsSGV4SW5kZXhkZWNpbWFsTWF0Y2hoZXhNYXRjaG5vbkRlY2ltYWxNYXRjaGlzIG5vdCBhbiBpbnRlZ2VyX25vcm1hbGl6ZV9pc1plcm9fY2xvbmVEaWdpdHNyZXN1bHREaWdpdHNfZnJvbUludF9mcm9tRG91YmxlVmFsdWUgbXVzdCBiZSBmaW5pdGU6IGZsb29yVG9Eb3VibGViaWFzZWRFeHBvbmVudHVuc2hpZnRlZERpZ2l0c3Vuc2hpZnRlZEJpZ2Fic1Jlc3VsdF9kbFNoaWZ0cmVzdWx0VXNlZF9kbFNoaWZ0RGlnaXRzeERpZ2l0c3hVc2VkX2RyU2hpZnRfZHJTaGlmdERpZ2l0c19sc2hkaWdpdFNoaWZ0Yml0U2hpZnRjYXJyeUJpdFNoaWZ0Yml0TWFza2NhcnJ5c2hpZnRBbW91bnRzaGlmdC1hbW91bnQgbXVzdCBiZSBwb3NpdGl2ZSBfbFNoaWZ0RGlnaXRzZGlnaXRzU2hpZnRfcnNoX3JTaGlmdERpZ2l0c19hYnNDb21wYXJlYmlnSW50X2NvbXBhcmVEaWdpdHNvdGhlckRpZ2l0c290aGVyVXNlZF9hYnNBZGRfYWJzU3ViX2Fic0FkZFNldFNpZ25fYWJzU3ViU2V0U2lnbl9hYnNBbmRTZXRTaWduX2Fic0FuZE5vdFNldFNpZ25fYWJzT3JTZXRTaWdubERpZ2l0c19hYnNYb3JTZXRTaWdudGhpczFvdGhlcjFuMV9tdWxBZGR4SW5kZXhtdWx0aXBsaWNhbmREaWdpdHNhY2N1bXVsYXRvckRpZ2l0c3hseGhtbG1ocGhwbF9zcXJBZGRhY2N1bHVtYXRvckRpZ2l0c19tdWxEaWdpdHNfc3FyRGlnaXRzX2VzdGltYXRlUXVvdGllbnREaWdpdHF1b3RpZW50RGlnaXRfZGl2X2RpdlJlbWxhc3RRdW9fdXNlZHF1b19kaWdpdHNxdW9fcmVtcmVtRGlnaXRzcmVtbnNoeURpZ2l0c3lVc2VkbnVtRXh0cmFEaWdpdHN0bXBEaWdpdHNueURpZ2l0c2QwZDFfcmVtRGlnaXRzRXhwb25lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmU6IG1vZFBvd2JpZ0V4cG9uZW50YmlnTW9kdWx1c21vZHVsdXNleHBvbmVudCBtdXN0IGJlIHBvc2l0aXZlOiBtb2R1bHVzIG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmU6IGV4cG9uZW50Qml0bGVuY2Fubm90VXNlTW9udGdvbWVyeV9ub3JtTW9kdWx1c1VzZWRyZXN1bHQyRGlnaXRzZ0RpZ2l0c2dVc2VkcmVzdWx0MlVzZWRfc3FyX211bF9yZXZlcnRrbWcyRGlnaXRzZzJVc2VkZXhwb25lbnREaWdpdHNnd0RpZ2l0c3N3YXBEaWdpdHNzd2FwVXNlZF9iaW5hcnlHY2RpbnZtYXhVc2VkbWF4TGVuTm90IGNvcHJpbWVtdXN0IG5vdCBiZSB6ZXJvZGlnaXRTaGlmdEFtb3VudHVEaWdpdHN2RGlnaXRzYWNhYmNkVXNlZGFiY2RMZW5hRGlnaXRzYkRpZ2l0c2NEaWdpdHNkRGlnaXRzYUlzTmVnYXRpdmViSXNOZWdhdGl2ZWNJc05lZ2F0aXZlZElzTmVnYXRpdmVhX2NtcF9jYl9jbXBfZGNfY21wX2FkX2NtcF9ibW9kSW52ZXJzZU1vZHVsdXMgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZTogZ2NkcmVzdWx0Qml0c2NhY2hlZEJpdHNjYWNoZWRCaXRzTGVuZ3RocmVhZEJpdHNuZXh0RGlnaXRuZXh0RGlnaXRMZW5ndGhsZWFkaW5nQml0c3JvdW5kVXBkZWNpbWFsRGlnaXRDaHVua3NkaWdpdHM5emVyb3MwMDAwMDAwMDAwMDAwMF90b1JhZGl4Q29kZVVuaXRkaWdpdFN0cmluZ190b0hleFN0cmluZ3JldmVyc2VkRGlnaXRDb2RlVW5pdHNtc2JDaHVua19CaWdJbnRSZWR1Y3Rpb25fQmlnSW50TW9udGdvbWVyeVJlZHVjdGlvbl9tb2R1bHVzX21vZHVsdXNEaWdpdHNfYXJnc19kaWdpdHNQZXJTdGVwX3hEaWdpdF94SGlnaERpZ2l0X3Job0RpZ2l0X3Job0hpZ2hEaWdpdF9tdURpZ2l0X211SGlnaERpZ2l0X2ludkRpZ2l0X2ludkRpZ2l0UGFpcl9tdWxNb2RyaG9scmhvaGRoZGxfcmVkdWNlX0JpZ0ludENsYXNzaWNSZWR1Y3Rpb25fbm9ybU1vZHVsdXNfbm9ybU1vZHVsdXNEaWdpdHNfbmVnTm9ybU1vZHVsdXNEaWdpdHNfbW9kdWx1c05zaF90bXBEaWdpdHNuZWdOb3JtTW9kdWx1c19Eb3VibGVDQUNIRV9TSVpFX0xPRzJDQUNIRV9MRU5HVEhDQUNIRV9NQVNLX2NhY2hlRXZpY3RJbmRleGZyb21JbnRlZ2VyRG91YmxlX2RvdWJsZUZyb21JbnRlZ2VyRG91YmxlX2hhc2hDb2RlX2lkZW50aXR5SGFzaENvZGVEb3VibGVfYWRkX3N1YkRvdWJsZV9zdWJEb3VibGVfbXVsX3RydW5jX2RpdkRvdWJsZV90cnVuY19kaXZEb3VibGVfZGl2X21vZHVsb0RvdWJsZV9tb2R1bG9fcmVtYWluZGVyRG91YmxlX3JlbWFpbmRlckRvdWJsZV9mbGlwU2lnbkJpdERvdWJsZV9lcXVhbF9lcXVhbFRvSW50ZWdlckRvdWJsZV9lcXVhbFRvSW50ZWdlckRvdWJsZV9ncmVhdGVyVGhhbl9hZGRGcm9tSW50ZWdlcl9zdWJGcm9tSW50ZWdlcl9tdWxGcm9tSW50ZWdlcl90cnVuY0RpdkZyb21JbnRlZ2VyX21vZHVsb0Zyb21JbnRlZ2VyX3JlbWFpbmRlckZyb21JbnRlZ2VyX2dyZWF0ZXJUaGFuRnJvbUludGVnZXJEb3VibGVfZ3JlYXRlclRoYW5Gcm9tSW50ZWdlckRvdWJsZV9nZXRJc05lZ2F0aXZlRG91YmxlX2dldElzSW5maW5pdGVEb3VibGVfZ2V0SXNOYU5mbG9vcmNlaWxjZWlsVG9Eb3VibGVEb3VibGVfcm91bmREb3VibGVfZmxvb3JEb3VibGVfY2VpbERvdWJsZV90cnVuY2F0ZW5vdCBhIG51bWJlckRvdWJsZV90b0ludERvdWJsZV90b1N0cmluZ25vdCBhbiBpbnRlZ2VyX3RvU3RyaW5nQXNGaXhlZERvdWJsZV90b1N0cmluZ0FzRml4ZWRfdG9TdHJpbmdBc0V4cG9uZW50aWFsRG91YmxlX3RvU3RyaW5nQXNFeHBvbmVudGlhbHRvU3RyaW5nQXNQcmVjaXNpb25wcmVjaXNpb25fdG9TdHJpbmdBc1ByZWNpc2lvbkRvdWJsZV90b1N0cmluZ0FzUHJlY2lzaW9udGhpc0lzTmVnYXRpdmVvdGhlcklzTmVnYXRpdmUtOTAwNzE5OTI1NDc0MDk5MjkwMDcxOTkyNTQ3NDA5OTI5MjIzMzcyMDM2ODU0Nzc2MDAwLjBfQXNzZXJ0aW9uRXJyb3JfZmFpbGVkQXNzZXJ0aW9uX3VybF9saW5lX2NvbHVtbl90aHJvd05ld2Fzc2VydGlvblN0YXJ0YXNzZXJ0aW9uRW5kX2RvVGhyb3dOZXdBc3NlcnRpb25FcnJvcl90aHJvd05ld19ldmFsdWF0ZUFzc2VydGlvbl9tZXNzYWdlU3RyaW5naXMgbm90IHRydWUuY29sdW1uSW5mbyBwb3MgJzogRmFpbGVkIGFzc2VydGlvbjogbGluZSBfVHlwZUVycm9yaXMgYXNzaWduYWJsZVR5cGVFcnJvcl90aHJvd05ld3NyY192YWx1ZWRzdF90eXBlZHN0X25hbWVfQ2FzdEVycm9yX2Vycm9yTXNnX0ludGVybmFsRXJyb3JJbnRlcm5hbEVycm9yOiAnRXJyb3I6IGZpZWxkICcnIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQuX0Nsb3N1cmVfaW5zdGFudGlhdG9yX3R5cGVfYXJndW1lbnRzX2Z1bmN0aW9uX3R5cGVfYXJndW1lbnRzX2RlbGF5ZWRfdHlwZV9hcmd1bWVudHNDbG9zdXJlX2VxdWFsc19jb21wdXRlSGFzaENsb3N1cmVfY2xvbmVDbG9zdXJlX2NvbXB1dGVIYXNoX0dyb3dhYmxlTGlzdHdpdGhDYXBhY2l0eV93aXRoRGF0YUdyb3dhYmxlTGlzdF9hbGxvY2F0ZV9jYXBhY2l0eUdyb3dhYmxlTGlzdF9nZXRDYXBhY2l0eUdyb3dhYmxlTGlzdF9nZXRMZW5ndGhuZXdfbGVuZ3Rob2xkX2NhcGFjaXR5bmV3X2NhcGFjaXR5c2hvdWxkU2hyaW5rVG9GaXRfc2hyaW5rR3Jvd2FibGVMaXN0X3NldExlbmd0aF9zZXREYXRhR3Jvd2FibGVMaXN0X3NldERhdGFHcm93YWJsZUxpc3RfZ2V0SW5kZXhlZEdyb3dhYmxlTGlzdF9zZXRJbmRleGVkX25leHRDYXBhY2l0eWlzVk1MaXN0Y2FwaXRlckxlbm5ld0xlbl9hbGxvY2F0ZURhdGFuZXdEYXRhX2pvaW5XaXRoU2VwYXJhdG9yY29kZVVuaXRDb3VudGZpcnN0Tm9uT25lQnl0ZVN0cmluZ0xpbWl0bmV4dEVsZW1lbnRjb3B5SW5kZXhvbmVieXRlQ2FuYXJ5ZWxlbWVudFN0cmluZ19JbW11dGFibGVNYXBfa3ZQYWlyc2tleVZhbHVlUGFpcnNDYW5ub3Qgc2V0IHZhbHVlIGluIHVubW9kaWZpYWJsZSBNYXBDYW5ub3QgY2xlYXIgdW5tb2RpZmlhYmxlIE1hcENhbm5vdCByZW1vdmUgZnJvbSB1bm1vZGlmaWFibGUgTWFwX0ltbXV0YWJsZU1hcEtleUl0ZXJhYmxlX0ltbXV0YWJsZU1hcFZhbHVlSXRlcmFibGVfSW1tdXRhYmxlTWFwRW50cnlJdGVyYWJsZV9JbW11dGFibGVNYXBLZXlJdGVyYXRvcl9uZXh0SW5kZXhfSW1tdXRhYmxlTWFwVmFsdWVJdGVyYXRvcl9JbW11dGFibGVNYXBFbnRyeUl0ZXJhdG9yX0ludGVnZXJJbXBsZW1lbnRhdGlvbjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5el9iaXRBbmRGcm9tSW50ZWdlcl9iaXRPckZyb21JbnRlZ2VyX2JpdFhvckZyb21JbnRlZ2VyX2JpdEFuZEZyb21TbWlJbnRlZ2VyX2JpdEFuZEZyb21JbnRlZ2VySW50ZWdlcl9iaXRPckZyb21JbnRlZ2VySW50ZWdlcl9iaXRYb3JGcm9tSW50ZWdlcl9zaHJGcm9tSW50ZWdlckludGVnZXJfc2hyRnJvbUludGVnZXJfc2hsRnJvbUludGVnZXJJbnRlZ2VyX3NobEZyb21JbnRlZ2VySW50ZWdlcl9hZGRGcm9tSW50ZWdlckludGVnZXJfc3ViRnJvbUludGVnZXJJbnRlZ2VyX211bEZyb21JbnRlZ2VySW50ZWdlcl90cnVuY0RpdkZyb21JbnRlZ2VySW50ZWdlcl9tb2R1bG9Gcm9tSW50ZWdlckludGVnZXJfZ3JlYXRlclRoYW5Gcm9tSW50ZWdlckludGVnZXJfZXF1YWxUb0ludGVnZXItOTIyMzM3MjAzNjg1NDc3NjAwMC4wX3RvUG93MlN0cmluZ19taW5JbnQ2NFRvUmFkaXhTdHJpbmdfc2V0QXRiaXRzUGVyRGlnaXQzMDM3MDAwNDk5X1NtaV9kaWdpdFRhYmxlX3NtYWxsTG9va3VwVGFibGUtOTktOTgtOTctOTYtOTUtOTQtOTMtOTItOTEtOTAtODktODgtODctODYtODUtODQtODMtODItODEtODAtNzktNzgtNzctNzYtNzUtNzQtNzMtNzItNzEtNzAtNjktNjgtNjctNjYtNjUtNjQtNjMtNjItNjEtNjAtNTktNTgtNTctNTYtNTUtNTQtNTMtNTItNTEtNTAtNDktNDgtNDctNDYtNDUtNDQtNDMtNDItNDEtNDAtMzktMzgtMzctMzYtMzUtMzQtMzMtMzItMzEtMzAtMjktMjgtMjctMjYtMjUtMjQtMjMtMjItMjEtMjAtMTktMTgtMTctMTYtMTUtMTQtMTMtMTItMTEtMTAtOS04LTctNi01LTQtMzIzNDU2Nzg5MTAxMTEyMTMxNDE1MTYxNzE4MTkyMDIxMjIyMzI0MjUyNjI3MjgyOTMwMzEzMjMzMzQzNTM2MzczODM5NDA0MTQyNDM0NDQ1NDY0NzQ4NDk1MDUxNTI1MzU0NTU1NjU3NTg1OTYwNjE2MjYzNjQ2NTY2Njc2ODY5NzA3MTcyNzM3NDc1NzY3Nzc4Nzk4MDgxODI4Mzg0ODU4Njg3ODg4OTkwOTE5MjkzOTQ5NTk2OTc5ODk5X1BPV18xMF83X1BPV18xMF84X1BPV18xMF85U21pX2JpdE5lZ2F0ZVNtaV9iaXRMZW5ndGhTbWlfYml0QW5kRnJvbVNtaV9wb3NpdGl2ZUJhc2UxMExlbmd0aHNtaXR3b0RpZ2l0c19uZWdhdGl2ZUJhc2UxMExlbmd0aG5lZ1NtaV9uZWdhdGl2ZVRvU3RyaW5nX01pbnRNaW50X2JpdE5lZ2F0ZU1pbnRfYml0TGVuZ3RoX01FVEhPRF9HRVRURVJfU0VUVEVSX0ZJRUxEX0xPQ0FMX1ZBUl9LSU5EX1NISUZUX0tJTkRfQklUU19LSU5EX01BU0tfRFlOQU1JQ19TVVBFUl9TVEFUSUNfQ09OU1RSVUNUT1JfVE9QX0xFVkVMX0xFVkVMX1NISUZUX0xFVkVMX0JJVFNfTEVWRUxfTUFTS19UWVBFX0FSR1NfTEVOX0NPVU5UX1BPU0lUSU9OQUxfQ09VTlRfRklSU1RfTkFNRURfRU5UUllfZnVuY3Rpb25OYW1lX2FyZ3VtZW50c0Rlc2NyaXB0b3JfaXNTdXBlckludm9jYXRpb25fZGVsYXllZFR5cGVBcmd1bWVudHNMZW5fbWVtYmVyTmFtZV9wb3NpdGlvbmFsQXJndW1lbnRzX25hbWVkQXJndW1lbnRzX3dpdGhvdXRUeXBlX3NldE1lbWJlck5hbWVBbmRUeXBlX3R5cGVBcmdzTGVudHlwZUFyZ3NMZW5fdW5wYWNrVHlwZUFyZ3VtZW50c0ludm9jYXRpb25NaXJyb3JfdW5wYWNrVHlwZUFyZ3VtZW50c251bVR5cGVBcmd1bWVudHNyZWNlaXZlckluZGV4bmFtZWRFbnRyeUluZGV4YXJnX25hbWVhcmdfdmFsdWVfYWxsb2NhdGVJbnZvY2F0aW9uTWlycm9yYXJndW1lbnRzRGVzY3JpcHRvcmlzU3VwZXJJbnZvY2F0aW9uX2FsbG9jYXRlSW52b2NhdGlvbk1pcnJvckZvckNsb3N1cmVkZWxheWVkVHlwZUFyZ3VtZW50c0xlbl9MaWJyYXJ5UHJlZml4X2xvYWRMaWJyYXJ5UHJlZml4X2xvYWRfbG9hZEVycm9yTGlicmFyeVByZWZpeF9sb2FkRXJyb3JMaWJyYXJ5UHJlZml4X2lzTG9hZGVkX2ludmFsaWRhdGVEZXBlbmRlbnRDb2RlTGlicmFyeVByZWZpeF9pbnZhbGlkYXRlRGVwZW5kZW50Q29kZWhhc0NvbXBsZXRlZF9SZWdFeHBIYXNoS2V5ZG90QWxsdGhhdF9SZWdFeHBIYXNoVmFsdWVfUmVnRXhwTWF0Y2hfcmVnZXhwX21hdGNoX01BVENIX1BBSVJncm91cElkeF9ncm91cENvdW50X3N1YnN0cmluZ1VuY2hlY2tlZGdyb3Vwc2dyb3Vwc1NwZWNncm91cHNMaXN0bmFtZWRHcm91cGlkeF9ncm91cE5hbWVJbmRleE5vdCBhIGNhcHR1cmUgZ3JvdXAgbmFtZTogZ3JvdXBOYW1lc19ncm91cE5hbWVzX1JlZ0V4cF93b3JkQ2hhcmFjdGVyTWFwUmVnRXhwX2ZhY3RvcnlfRXhlY3V0ZU1hdGNoX0V4ZWN1dGVNYXRjaFN0aWNreXN0cmluZ01hdGNoUmVnRXhwX2dldFBhdHRlcm5SZWdFeHBfZ2V0SXNNdWx0aUxpbmVpc0Nhc2VTZW5zaXRpdmVSZWdFeHBfZ2V0SXNDYXNlU2Vuc2l0aXZlaXNVbmljb2RlUmVnRXhwX2dldElzVW5pY29kZWlzRG90QWxsUmVnRXhwX2dldElzRG90QWxsUmVnRXhwX2dldEdyb3VwQ291bnRfZ3JvdXBOYW1lTGlzdFJlZ0V4cF9nZXRHcm91cE5hbWVNYXBSZWdFeHBfRXhlY3V0ZU1hdGNoc3RhcnRfaW5kZXhSZWdFeHBfRXhlY3V0ZU1hdGNoU3RpY2t5X0FsbE1hdGNoZXNJdGVyYWJsZV9yZV9zdHJfQWxsTWF0Y2hlc0l0ZXJhdG9yX2lzVHJhaWxTdXJyb2dhdGVfU3RyaW5nQmFzZV9sZW5ndGhCaXRzX21heExlbmd0aFZhbHVlX2xlbmd0aE1hc2tfc3RhcnRCaXRzX21heFN0YXJ0VmFsdWVfbWF4VW5zaWduZWRTbWlCaXRzX21heEpvaW5SZXBsYWNlT25lQnl0ZVN0cmluZ0xlbmd0aF9pc1doaXRlc3BhY2VfU3RyaW5nQmFzZSBjYW4ndCBiZSBpbnN0YW5pYXRlZFN0cmluZ19nZXRIYXNoQ29kZV9pc09uZUJ5dGVjcmVhdGVGcm9tQ2hhckNvZGVzY2NpZGNvZGVDb3VudF9zY2FuQ29kZVVuaXRzX2NyZWF0ZVN0cmluZ0Zyb21JdGVyYWJsZWNoYXJDb2RlTGlzdGlzT25lQnl0ZVN0cmluZ19jcmVhdGVPbmVCeXRlU3RyaW5nX2NyZWF0ZUZyb21Db2RlUG9pbnRzU3RyaW5nQmFzZV9jcmVhdGVGcm9tQ29kZVBvaW50c2NvZGVQb2ludHNTdHJpbmdfY2hhckF0U3RyaW5nX2dldExlbmd0aFN0cmluZ19jb25jYXR0aGlzTGVuZ3Rob3RoZXJMZW5ndGh0aGlzQ29kZVVuaXRvdGhlckNvZGVVbml0X3N1YnN0cmluZ01hdGNoZXNfc3Vic3RyaW5nVW5jaGVja2VkTmF0aXZlU3RyaW5nQmFzZV9zdWJzdHJpbmdVbmNoZWNrZWRfaXNPbmVCeXRlV2hpdGVzcGFjZV9pc1R3b0J5dGVXaGl0ZXNwYWNlX2ZpcnN0Tm9uV2hpdGVzcGFjZV9sYXN0Tm9uV2hpdGVzcGFjZXRyaW1MZWZ0dGltZXMgaXMgbm90IGEgUGF0dGVybiBpcyBub3QgYSBTdHJpbmcgaXMgbm90IGFuIGludHJlcGxhY2VtZW50SXNPbmVCeXRlcmVwbGFjZW1lbnRMZW5ndGhzbGljZXNfYWRkUmVwbGFjZVNsaWNlX2pvaW5SZXBsYWNlQWxsT25lQnl0ZVJlc3VsdHNsaWNlTGVuZ3RoX2pvaW5SZXBsYWNlQWxsUmVzdWx0U3RyaW5nQmFzZV9qb2luUmVwbGFjZUFsbFJlc3VsdHJlcGxhY2VtZW50U3RyaW5nc0FyZU9uZUJ5dGVyZXBsYWNlRmlyc3RNYXBwZWRfbWF0Y2hTdHJpbmdfc3RyaW5nSWRlbnRpdHlfc3BsaXRNYXBKb2luRW1wdHlTdHJpbmdzdHJpbmdQYXR0ZXJuX2ludGVycG9sYXRlU2luZ2xlX2ludGVycG9sYXRlcHJldmlvdXNJbmRleFN0cmluZ190b1VwcGVyQ2FzZVN0cmluZ190b0xvd2VyQ2FzZV9jb25jYXRSYW5nZV9jb25jYXRSYW5nZU5hdGl2ZVN0cmluZ19jb25jYXRSYW5nZV9PbmVCeXRlU3RyaW5nX0xDX1RBQkxFAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn/CgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDCocKiwqPCpMKlwqbCp8KowqnCqsKrwqzCrcKuwq/CsMKxwrLCs8K0wrXCtsK3wrjCucK6wrvCvMK9wr7Cv8Ogw6HDosOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvw7DDscOyw7PDtMO1w7bDl8O4w7nDusO7w7zDvcO+w5/DoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8Oww7HDssOzw7TDtcO2w7fDuMO5w7rDu8O8w73DvsO/X1VDX1RBQkxFAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlae3x9fn/CgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDCocKiwqPCpMKlwqbCp8KowqnCqsKrwqzCrcKuwq/CsMKxwrLCs8K0AMK2wrfCuMK5wrrCu8K8wr3CvsK/w4DDgcOCw4PDhMOFw4bDh8OIw4nDisOLw4zDjcOOw4/DkMORw5LDk8OUw5XDlsOXw5jDmcOaw5vDnMOdw54Aw4DDgcOCw4PDhMOFw4bDh8OIw4nDisOLw4zDjcOOw4/DkMORw5LDk8OUw5XDlsO3w5jDmcOaw5vDnMOdw54AU3RyaW5nX2NvZGVVbml0QXRPbmVCeXRlU3RyaW5nX3N1YnN0cmluZ1VuY2hlY2tlZF9zcGxpdFdpdGhDaGFyQ29kZU9uZUJ5dGVTdHJpbmdfc3BsaXRXaXRoQ2hhckNvZGVwYXR0ZXJuQXNTdHJpbmdfY29uY2F0QWxsc3RyaW5nc0xlbmd0aHJJeGVMZW5ndGhwQ2lkcGF0dGVybkN1MHBhZENpZHBhZExlbmd0aHJlc3VsdExlbmd0aHBhZENoYXJPbmVCeXRlU3RyaW5nX2FsbG9jYXRlX2FsbG9jYXRlRnJvbU9uZUJ5dGVMaXN0T25lQnl0ZVN0cmluZ19hbGxvY2F0ZUZyb21PbmVCeXRlTGlzdE9uZUJ5dGVTdHJpbmdfc2V0QXRvbmVCeXRlU3RyaW5nX1R3b0J5dGVTdHJpbmdfYWxsb2NhdGVGcm9tVHdvQnl0ZUxpc3RUd29CeXRlU3RyaW5nX2FsbG9jYXRlRnJvbVR3b0J5dGVMaXN0X0V4dGVybmFsT25lQnl0ZVN0cmluZ19FeHRlcm5hbFR3b0J5dGVTdHJpbmdfU3RyaW5nTWF0Y2hfU3RyaW5nQWxsTWF0Y2hlc0l0ZXJhYmxlX2lucHV0X3BhdHRlcm5fU3RyaW5nQWxsTWF0Y2hlc0l0ZXJhdG9yX0Fic3RyYWN0VHlwZUFic3RyYWN0VHlwZV90b1N0cmluZ1R5cGVfZ2V0SGFzaENvZGVfVHlwZVJlZl9UeXBlUGFyYW1ldGVyX1dlYWtQcm9wZXJ0eV9uZXdXZWFrUHJvcGVydHlfbmV3V2Vha1Byb3BlcnR5X2dldEtleVdlYWtQcm9wZXJ0eV9nZXRWYWx1ZVdlYWtQcm9wZXJ0eV9zZXRWYWx1ZURlcHJlY2F0ZWRleHBpcmVzVXNlIGBtZXNzYWdlYCBpbnN0ZWFkLiBXaWxsIGJlIHJlbW92ZWQgaW4gRGFydCAzLjAuMERlcHJlY2F0ZWQgZmVhdHVyZTogX092ZXJyaWRlUHJvdmlzaW9uYWxfUHJveHlCaWdJbnR0cnlQYXJzZUJvb2xfZnJvbUVudmlyb25tZW50RGF0ZVRpbWVfTUlDUk9TRUNPTkRfSU5ERVhfTUlMTElTRUNPTkRfSU5ERVhfU0VDT05EX0lOREVYX01JTlVURV9JTkRFWF9IT1VSX0lOREVYX0RBWV9JTkRFWF9XRUVLREFZX0lOREVYX01PTlRIX0lOREVYX1lFQVJfSU5ERVhfX3BhcnRzX0RBWVNfVU5USUxfTU9OVEhtb25kYXl0dWVzZGF5d2VkbmVzZGF5dGh1cnNkYXlmcmlkYXlzYXR1cmRheXN1bmRheWRheXNQZXJXZWVramFudWFyeWZlYnJ1YXJ5bWFyY2hhcHJpbGp1bmVqdWx5YXVndXN0c2VwdGVtYmVyb2N0b2Jlcm5vdmVtYmVyZGVjZW1iZXJtb250aHNQZXJZZWFyX21heE1pbGxpc2Vjb25kc1NpbmNlRXBvY2g4NjQwMDAwMDAwMDAwMDAwX3BhcnNlRm9ybWF0XihbKy1dP1xkezQsNn0pLT8oXGRcZCktPyhcZFxkKSg/OlsgVF0oXGRcZCkoPzo6PyhcZFxkKSg/Ojo/KFxkXGQpKD86Wy4sXShcZHsxLDZ9KSk/KT8pPyggP1t6Wl18ID8oWy0rXSkoXGRcZCkoPzo6PyhcZFxkKSk/KT8pPyR5ZWFybW9udGhkYXlob3VybWludXRlbWlsbGlzZWNvbmRtaWNyb3NlY29uZHV0Y2Zyb21NaWxsaXNlY29uZHNTaW5jZUVwb2NoZnJvbU1pY3Jvc2Vjb25kc1NpbmNlRXBvY2htaWNyb3NlY29uZHNTaW5jZUVwb2NoX3dpdGhWYWx1ZURhdGVUaW1lIGlzIG91dHNpZGUgdmFsaWQgcmFuZ2U6ICdpc1V0YycgZmxhZyBtYXkgbm90IGJlICdudWxsJ19ub3dfZ2V0Q3VycmVudE1pY3Jvc0RhdGVUaW1lX2N1cnJlbnRUaW1lTWljcm9zX3RpbWVab25lTmFtZUZvckNsYW1wZWRTZWNvbmRzRGF0ZVRpbWVfdGltZVpvbmVOYW1lc2Vjb25kc1NpbmNlRXBvY2hfdGltZVpvbmVPZmZzZXRJblNlY29uZHNGb3JDbGFtcGVkU2Vjb25kc0RhdGVUaW1lX3RpbWVab25lT2Zmc2V0SW5TZWNvbmRzX2xvY2FsVGltZVpvbmVBZGp1c3RtZW50SW5TZWNvbmRzRGF0ZVRpbWVfbG9jYWxUaW1lWm9uZUFkanVzdG1lbnRJblNlY29uZHNfY29tcHV0ZVVwcGVyUGFydGxvY2FsTWljcm9zcmVzdWx0WWVhcnJlc3VsdE1vbnRocmVzdWx0RGF5ZGF5c1NpbmNlMTk3MDg2NDAwMDAwMDAwZGF5c3lkMXlkMnlkM2lzTGVhcGRheXNVbnRpbE1vbnRocmVzdWx0TWljcm9zZWNvbmRyZXN1bHRNaWxsaXNlY29uZHJlc3VsdFNlY29uZHJlc3VsdE1pbnV0ZXJlc3VsdEhvdXIzNjAwMDAwMDAwcmVzdWx0V2Vla2RheV9sb2NhbERhdGVJblV0Y01pY3Jvc21pY3Jvc19mbG9vcmVkRGl2aXNpb25fZGF5RnJvbVllYXJfaXNMZWFwWWVhcl93ZWVrRGF5X2VxdWl2YWxlbnRZZWFycmVjZW50WWVhcl95ZWFyc0Zyb21TZWNvbmRzU2luY2VFcG9jaF9lcXVpdmFsZW50U2Vjb25kc2VxdWl2YWxlbnRZZWFyZXF1aXZhbGVudERheXNkaWZmRGF5c190aW1lWm9uZU9mZnNldEluU2Vjb25kc2VxdWl2YWxlbnRTZWNvbmRzX3RpbWVab25lTmFtZWZvcm1hdHRlZFN0cmluZ3BhcnNlSW50T3JaZXJvbWF0Y2hlZHBhcnNlTWlsbGlBbmRNaWNyb3NlY29uZHN5ZWFyc2FkZE9uZU1pbGxpc2Vjb25kbWlsbGlBbmRNaWNyb3NlY29uZHNob3VyRGlmZmVyZW5jZW1pbnV0ZURpZmZlcmVuY2VUaW1lIG91dCBvZiByYW5nZUludmFsaWQgZGF0ZSBmb3JtYXRpc0JlZm9yZWlzQWZ0ZXJpc0F0U2FtZU1vbWVudEFzdG9Mb2NhbHRvVXRjX2ZvdXJEaWdpdHNhYnNOMDAwX3NpeERpZ2l0c190aHJlZURpZ2l0c190d29EaWdpdHNzZWNfYnJva2VuRG93bkRhdGVUb1ZhbHVlcmVhbE1vbnRoYWRqdXN0bWVudHpvbmVPZmZzZXR0aW1lWm9uZU5hbWVVVEN0aW1lWm9uZU9mZnNldG9mZnNldEluU2Vjb25kc3dlZWtkYXluYW5pbmZpbml0eW5lZ2F0aXZlSW5maW5pdHltaW5Qb3NpdGl2ZTVlLTMyNG1heEZpbml0ZV9uYXRpdmVQYXJzZV90cnlQYXJzZURvdWJsZWRpZ2l0c1NlZW5leHBvbmVudERlbHRhZmlyc3RDaGFybmZpbml0eWV4cFBhcnRuZWdFeHBvbmVudEludmFsaWQgZG91YmxlRHVyYXRpb25taWNyb3NlY29uZHNQZXJNaWxsaXNlY29uZG1pbGxpc2Vjb25kc1BlclNlY29uZHNlY29uZHNQZXJNaW51dGVtaW51dGVzUGVySG91cmhvdXJzUGVyRGF5bWljcm9zZWNvbmRzUGVyU2Vjb25kbWljcm9zZWNvbmRzUGVyTWludXRlbWljcm9zZWNvbmRzUGVySG91cm1pY3Jvc2Vjb25kc1BlckRheW1pbGxpc2Vjb25kc1Blck1pbnV0ZW1pbGxpc2Vjb25kc1BlckhvdXJtaWxsaXNlY29uZHNQZXJEYXlzZWNvbmRzUGVySG91cnNlY29uZHNQZXJEYXltaW51dGVzUGVyRGF5X2R1cmF0aW9uX21pY3Jvc2Vjb25kc3F1b3RpZW50aW5EYXlzaW5Ib3Vyc2luTWludXRlc2luU2Vjb25kc3NpeERpZ2l0czAwMDAwdHdvRGlnaXRNaW51dGVzdHdvRGlnaXRTZWNvbmRzc2l4RGlnaXRVc19zdHJpbmdUb1NhZmVTdHJpbmdfb2JqZWN0VG9TdHJpbmdBc3NlcnRpb25FcnJvckFzc2VydGlvbiBmYWlsZWROdWxsVGhyb3duRXJyb3JUaHJvdyBvZiBudWxsLkFyZ3VtZW50RXJyb3JfaGFzVmFsdWVpbnZhbGlkVmFsdWVNdXN0IG5vdCBiZSBudWxsY2hlY2tOb3ROdWxsX2Vycm9yTmFtZUludmFsaWQgYXJndW1lbnQocylfZXJyb3JFeHBsYW5hdGlvbmV4cGxhbmF0aW9uZXJyb3JWYWx1ZVZhbHVlIG5vdCBpbiByYW5nZUludmFsaWQgdmFsdWVpbmRleGFibGVjaGVja1ZhbHVlSW5JbnRlcnZhbGNoZWNrVmFsaWRJbmRleGNoZWNrVmFsaWRSYW5nZXN0YXJ0TmFtZWVuZE5hbWVjaGVja05vdE5lZ2F0aXZlOiBOb3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDogTm90IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byA6IE5vdCBpbiByYW5nZSAsIGluY2x1c2l2ZTogVmFsaWQgdmFsdWUgcmFuZ2UgaXMgZW1wdHk6IE9ubHkgdmFsaWQgdmFsdWUgaXMgSW5kZXhFcnJvckluZGV4IG91dCBvZiByYW5nZTogaW5kZXggbXVzdCBub3QgYmUgbmVnYXRpdmU6IG5vIGluZGljZXMgYXJlIHZhbGlkOiBpbmRleCBzaG91bGQgYmUgbGVzcyB0aGFuIEZhbGxUaHJvdWdoRXJyb3JfdGhyb3dOZXdjYXNlX2NsYXVzZV9wb3MnOiBTd2l0Y2ggY2FzZSBmYWxsLXRocm91Z2ggYXQgbGluZSBfY2xhc3NOYW1lQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvcl90aHJvd05ld0Nhbm5vdCBpbnN0YW50aWF0ZSBhYnN0cmFjdCBjbGFzcyBfdXJsICcnIGxpbmUgX2V4aXN0aW5nQXJndW1lbnROYW1lc19pbnZvY2F0aW9uX2ludm9jYXRpb25fdHlwZWludm9jYXRpb25fdHlwZVVzZSBOb1N1Y2hNZXRob2Qud2l0aEludm9jYXRpb24gaW5zdGVhZGV4aXN0aW5nQXJndW1lbnROYW1lc190aHJvd05ld0ludm9jYXRpb25fdGhyb3dOZXdJZk5vdExvYWRlZF9OYW1lZEFyZ3VtZW50c01hcF9leGlzdGluZ01ldGhvZFNpZ25hdHVyZU5vU3VjaE1ldGhvZEVycm9yX2V4aXN0aW5nTWV0aG9kU2lnbmF0dXJlaW52b2NhdGlvblR5cGVfdG9TdHJpbmdEZXByZWNhdGVkTm9TdWNoTWV0aG9kRXJyb3I6IENhbm5vdCBhc3NpZ24gdG8gZmluYWwgdmFyaWFibGUgJ2FyZ3NfbWlzbWF0Y2hhcmdzX21lc3NhZ2Ugd2l0aCBtYXRjaGluZyBhcmd1bWVudHN0eXBlX3N0cmdldHRlciBvciBzZXR0ZXJtc2dfYnVmTm9TdWNoTWV0aG9kRXJyb3I6IGlzX3R5cGVfY2FsbFRoZSBudWxsIG9iamVjdCBkb2VzIG5vdCBoYXZlIGEgVGhlICcgd2FzIGNhbGxlZCBvbiBudWxsLkNsb3N1cmUgY2FsbCB3aXRoIG1pc21hdGNoZWQgYXJndW1lbnRzOiBmdW5jdGlvbiAnQXR0ZW1wdGVkIHRvIHVzZSB0eXBlICcnIGFzIGEgZnVuY3Rpb24uIFNpbmNlIHR5cGVzIGRvIG5vdCBkZWZpbmUgYSBtZXRob2QgJ2NhbGwnLCB0aGlzIGlzIG5vdCBwb3NzaWJsZS4gRGlkIHlvdSBpbnRlbmQgdG8gY2FsbCB0aGUgIGNvbnN0cnVjdG9yIGFuZCBmb3JnZXQgdGhlICduZXcnIG9wZXJhdG9yPycgaGFzIG5vIGluc3RhbmNlIFN1cGVyIGNsYXNzIG9mIGNsYXNzICcnIGhhcyBubyBpbnN0YW5jZSBzdXBlci5ObyBzdGF0aWMgZGVjbGFyZWQgaW4gY2xhc3MgJ05vIGNvbnN0cnVjdG9yICcgZGVjbGFyZWQgaW4gY2xhc3MgJ05vIHRvcC1sZXZlbCBkZWNsYXJlZC5SZWNlaXZlcjogdG9wLWxldmVsUmVjZWl2ZXI6IFRyaWVkIGNhbGxpbmc6IGZvcm1hbFBhcmFtZXRlcnMKRm91bmQ6IHR5cGVBcmd1bWVudHNCdWZhcmd1bWVudHNCdWZleGlzdGluZ1NpZ2FyZ3NNc2draW5kQnVmbXNnQnVmVW5zdXBwb3J0ZWRFcnJvclVuc3VwcG9ydGVkIG9wZXJhdGlvbjogVW5pbXBsZW1lbnRlZEVycm9yVW5pbXBsZW1lbnRlZEVycm9yOiBTdGF0ZUVycm9yQmFkIHN0YXRlOiBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3Jtb2RpZmllZE9iamVjdENvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGR1cmluZyBpdGVyYXRpb24uQ29uY3VycmVudCBtb2RpZmljYXRpb24gZHVyaW5nIGl0ZXJhdGlvbjogT3V0T2ZNZW1vcnlFcnJvck91dCBvZiBNZW1vcnlTdGFja092ZXJmbG93RXJyb3JTdGFjayBPdmVyZmxvd0N5Y2xpY0luaXRpYWxpemF0aW9uRXJyb3JSZWFkaW5nIHN0YXRpYyB2YXJpYWJsZSBkdXJpbmcgaXRzIGluaXRpYWxpemF0aW9uUmVhZGluZyBzdGF0aWMgdmFyaWFibGUgJycgZHVyaW5nIGl0cyBpbml0aWFsaXphdGlvbl9FeGNlcHRpb25FeGNlcHRpb246IEZvcm1hdEV4Y2VwdGlvbm9iamVjdFNvdXJjZWxpbmVOdW1wcmV2aW91c0NoYXJXYXNDUiAoYXQgbGluZSAsIGNoYXJhY3RlciApCiAoYXQgY2hhcmFjdGVyIHNsaWNlbWFya09mZnNldCAoYXQgb2Zmc2V0IEludGVnZXJEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbkV4cGFuZG9fbWluU2l6ZV9kZWxldGVkRW50cnlvbGRfZGF0YW5ld19zaXplRXhwYW5kb3MgYXJlIG5vdCBhbGxvd2VkIG9uIHN0cmluZ3MsIG51bWJlcnMsIGJvb2xlYW5zIG9yIG51bGxfbGltaXRFeHBhbmRvOndwZW1wdHlfaWR4X2FwcGx5RnVuY3Rpb25fYXBwbHlfUEFSU0VfTElNSVRTMTA3Mzc0MTgyNDQ2MTE2ODYwMTg0MjczODc5MDQ0MDUyNTU1MTUzMDE4OTc2MjY3MTE1MjkyMTUwNDYwNjg0Njk3NjE0OTAxMTYxMTkzODQ3NjU2MjU3ODk3MzAyMjMwNTM2MDI4MTYzOTA5ODIxMDQ4NTgyOTg4MDQ5MTM1MDg1MTcxNzY3Mjk5MjA4OTEwMDAwMDAwMDAwMDAwMDAwMDA1MDU0NDcwMjg0OTkyOTM3NzEyMjE4NjExMTA2NzQwNDM2OTkyNjY1NDE2NjA5MTgzMTc5ODQxMjE3Nzk1MzMzNzgwOTM3MTEzNjQzNzg5Mzg5MDM4MDg1OTM3NTI4NjI0MjMwNTE1MDk4MTU3OTMzNzQ4MTMzNjc1ODIwODEwMjQ3OTkwMDY2ODU3ODI4ODQxMjExNjM4NDAwMDAwMDAwMDAwMDAwMzI0MzkxOTkzMjUyMTUwODY4MTI4MjgxMDA1Nzg4MzA4Mjc1MjUwNDAzNjM2MTkzNjQ2NzM4Mzg3NjQ4ODMzODQ2NTM1NzgyNDI0ODExNTI4NzMyMDM3MzY1NzYyMzIyMTgyNjUwODkyMTI0MTYzNTM4MTQ3ODMyMDU0NjkwNDE1MzE0NDEwMDAwMDAwMDAwMDA3ODc2NjI3ODM3ODg1NDk3NjExNjY3ODg5NTE0OTUyOTg0OTYxMjM4NjQyMDY4MzY5MzEwMTA1NjMzNzkyMjA1MDgwNTY2NDA2MjUxMzE2MjE3MDM4NDIyNjcxMzZfbWF4SW50NjRfbWluSW50NjRfaW50NjRVbnNpZ25lZE92ZXJmbG93TGltaXRzNjg3MTk0NzY3MzVfaW50NjRVbnNpZ25lZFNtaU92ZXJmbG93TGltaXRzMTE1MjkyMTUwNDYwNjg0Njk3NV9pbnQ2NE92ZXJmbG93TGltaXRzX3RyeVBhcnNlU21paXhzbWlMaW1pdF9rTnVsbF90aHJvd0Zvcm1hdEV4Y2VwdGlvbkludmFsaWQgbnVtYmVySW52YWxpZCByYWRpeC0gbnVtYmVyYWxsb3dVNjR0YWJsZUluZGV4c21hbGxCbG9ja1NpemVibG9ja0VuZG11bHRpcGxpZXJwb3NpdGl2ZU92ZXJmbG93TGltaXRuZWdhdGl2ZU92ZXJmbG93TGltaXRQb3NpdGl2ZSBpbnB1dCBleGNlZWRzIHRoZSBsaW1pdCBvZiBpbnRlZ2VyTmVnYXRpdmUgaW5wdXQgZXhjZWVkcyB0aGUgbGltaXQgb2YgaW50ZWdlcl9wYXJzZUJsb2NrX2luaXRJbnQ2NE92ZXJmbG93TGltaXRzSW50ZWdlcl9mcm9tRW52aXJvbm1lbnRUaGUgc291cmNlIG11c3Qgbm90IGJlIG51bGxSYWRpeCAgbm90IGluIHJhbmdlIDIuLjM2Z2VuZXJpY01ldGhvZF9JbnZvY2F0aW9uX3Bvc2l0aW9uYWxfbmFtZWRfZW5zdXJlTm9uTnVsbFR5cGVzVHlwZSBhcmd1bWVudHMgbXVzdCBiZSBub24tbnVsbCwgd2FzIG51bGwgYXQgaW5kZXggX21ha2VVbm1vZGlmaWFibGVfR2VuZXJhdG9ySXRlcmFibGVCaWRpcmVjdGlvbmFsSXRlcmF0b3Jtb3ZlUHJldmlvdXNfZnJvbUxpdGVyYWxMaXN0X25ld2NvcHlSYW5nZU5vdCBiaWcgZW5vdWdoIHRvIGhvbGQgIGVsZW1lbnRzIGF0IHBvc2l0aW9uIHdyaXRlSXRlcmFibGV0YXJnZXRMZW5ndGhNYXBFbnRyeShfSEFTSF9DT0RFY2xhc3MgTnVsbCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkX3JldHVybkludE51bGxfcmV0dXJuRG91YmxlTnVsbF9oYXNoQ29kZVJuZF9vYmplY3RIYXNoQ29kZU9iamVjdF90b1N0cmluZ19oYXZlU2FtZVJ1bnRpbWVUeXBlT2JqZWN0X2hhdmVTYW1lUnVudGltZVR5cGVfaW5zdGFuY2VPZk9iamVjdF9pbnN0YW5jZU9maW5zdGFudGlhdG9yVHlwZUFyZ3VtZW50c19zaW1wbGVJbnN0YW5jZU9mT2JqZWN0X3NpbXBsZUluc3RhbmNlT2Zfc2ltcGxlSW5zdGFuY2VPZlRydWVfc2ltcGxlSW5zdGFuY2VPZkZhbHNlT2JqZWN0X2VxdWFsc2RhcnQ6Y29yZSNfVHlwZU9iamVjdF9ydW50aW1lVHlwZU1hdGNoZ3JvdXBJbmRpY2VzX01BWF9DQUNIRV9TSVpFX3JlY2VudGx5VXNlZF9maW5kRXNjYXBlQ2hhcgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEAAAAAAQEAAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBZXNjYXBlQ2hhckluZGV4cHJldmlvdXNTbGljZUVuZEluZGV4Mi40UmVnRXhwTWF0Y2hTaW5rc3RhY2tUcmFjZVN0cmluZ1N0YWNrVHJhY2VfY3VycmVudF9TdHJpbmdTdGFja1RyYWNlU3RvcHdhdGNoX2ZyZXF1ZW5jeV9jb21wdXRlRnJlcXVlbmN5U3RvcHdhdGNoX2ZyZXF1ZW5jeWVsYXBzZWRUaWNrc3RpY2tzdGlja3NQZXJTZWNvbmRyZW1haW5pbmdUaWNrc19pbml0VGlja2VyU3RvcHdhdGNoX25vd2Zyb21DaGFyQ29kZXNmcm9tQ2hhckNvZGVTdHJpbmdfZnJvbUVudmlyb25tZW50UnVuZXNObyBlbGVtZW50cy5wcmV2aW91c0NvZGVSdW5lSXRlcmF0b3JfbmV4dFBvc2l0aW9uX2N1cnJlbnRDb2RlUG9pbnRfY2hlY2tTcGxpdFN1cnJvZ2F0ZUluZGV4IGluc2lkZSBzdXJyb2dhdGUgcGFpcjogcmF3SW5kZXhjdXJyZW50U2l6ZWN1cnJlbnRBc1N0cmluZ3ByZXZDb2RlVW5pdFN0cmluZ0J1ZmZlcl9CVUZGRVJfU0laRV9QQVJUU19UT19DT01QQUNUX1BBUlRTX1RPX0NPTVBBQ1RfU0laRV9MSU1JVF9wYXJ0c0NvZGVVbml0c19wYXJ0c0NvbXBhY3Rpb25JbmRleF9wYXJ0c0NvZGVVbml0c1NpbmNlQ29tcGFjdGlvbl9idWZmZXJQb3NpdGlvbl9idWZmZXJDb2RlVW5pdE1hZ25pdHVkZV9jb25zdW1lQnVmZmVyX2FkZFBhcnRwYXJ0c1NpbmNlQ29tcGFjdGlvbl9jb21wYWN0Y29tcGFjdGVkU3RyaW5nQnVmZmVyX2NyZWF0ZVN0cmluZ0Zyb21VaW50MTZBcnJheVN0cmluZ1NpbmtVcmlhdXRob3JpdHl1bmVuY29kZWRQYXRoZGF0YUZyb21TdHJpbmdkYXRhRnJvbUJ5dGVzYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtcGVyY2VudEVuY29kZWRxdWVyeVBhcmFtZXRlcnNBbGxoYXNQb3J0aGFzQWJzb2x1dGVQYXRoZGF0YURlbHRhc2NoZW1lRW5kaG9zdFN0YXJ0cG9ydFN0YXJ0cGF0aFN0YXJ0cXVlcnlTdGFydGZyYWdtZW50U3RhcnRpc1NpbXBsZS8uLnNjaGVtZUF1dGhmaWxlOi8vZmlsZTovLy80NDNlbmNvZGVDb21wb25lbnRlbmNvZGVRdWVyeUNvbXBvbmVudGRlY29kZUNvbXBvbmVudGVuY29kZWRDb21wb25lbnRkZWNvZGVRdWVyeUNvbXBvbmVudGVuY29kZUZ1bGxkZWNvZGVGdWxsc3BsaXRRdWVyeVN0cmluZ3BhcnNlSVB2NEFkZHJlc3NfcGFyc2VJUHY0QWRkcmVzc0lsbGVnYWwgSVB2NCBhZGRyZXNzLCBwYXJ0SW5kZXhwYXJ0U3RhcnRpbnZhbGlkIGNoYXJhY3RlcklQdjQgYWRkcmVzcyBzaG91bGQgY29udGFpbiBleGFjdGx5IDQgcGFydHNlYWNoIHBhcnQgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgMC4uMjU1cGFyc2VJUHY2QWRkcmVzc0lsbGVnYWwgSVB2NiBhZGRyZXNzLCBwYXJzZUhleGFuIElQdjYgcGFydCBjYW4gb25seSBjb250YWluIGEgbWF4aW11bSBvZiA0IGhleCBkaWdpdHNlYWNoIHBhcnQgbXVzdCBiZSBpbiB0aGUgcmFuZ2Ugb2YgYDB4MC4uMHhGRkZGYGFkZHJlc3MgaXMgdG9vIHNob3J0d2lsZGNhcmRTZWVuc2VlbkRvdGludmFsaWQgc3RhcnQgY29sb24ub25seSBvbmUgd2lsZGNhcmQgYDo6YCBpcyBhbGxvd2VkdG9vIGZldyBwYXJ0c2F0RW5kaXNMYXN0V2lsZGNhcmRleHBlY3RlZCBhIHBhcnQgYWZ0ZXIgbGFzdCBgOmBhbiBhZGRyZXNzIHdpdGggYSB3aWxkY2FyZCBtdXN0IGhhdmUgbGVzcyB0aGFuIDcgcGFydHNhbiBhZGRyZXNzIHdpdGhvdXQgYSB3aWxkY2FyZCBtdXN0IGNvbnRhaW4gZXhhY3RseSA4IHBhcnRzd2lsZENhcmRMZW5ndGhfVXJpX2lzV2luZG93c0NhY2hlZF91c2VySW5mb19xdWVyeV9mcmFnbWVudF9wYXRoU2VnbWVudHNfaGFzaENvZGVDYWNoZV9xdWVyeVBhcmFtZXRlcnNfcXVlcnlQYXJhbWV0ZXJMaXN0c191bnJlc2VydmVkVGFibGVfdW5yZXNlcnZlZDIzOTZUYWJsZV9lbmNvZGVGdWxsVGFibGVfc2NoZW1lVGFibGVfc2NoZW1lTG93ZXJUYWJsZV9zdWJEZWxpbWl0ZXJzVGFibGVfZ2VuRGVsaW1pdGVyc1RhYmxlX3VzZXJpbmZvVGFibGVfcmVnTmFtZVRhYmxlX3BhdGhDaGFyVGFibGVfcGF0aENoYXJPclNsYXNoVGFibGVfcXVlcnlDaGFyVGFibGVfem9uZUlEVGFibGVfaXNXaW5kb3dzUGxhdGZvcm1VcmlfaXNXaW5kb3dzUGxhdGZvcm1ub3RTaW1wbGVJbnZhbGlkIGVtcHR5IHNjaGVtZXVzZXJJbmZvU3RhcnRJbnZhbGlkIHBvcnRhbGxvd1NjaGVtZV93cml0ZUF1dGhvcml0eV9kZWZhdWx0UG9ydHRoaXNTY2hlbWVfY29tcGFyZVNjaGVtZXNjaGVtZUNoYXJ1cmlDaGFybG93ZXJDaGFyX21ha2VIdHRwVXJpaGFzVXNlckluZm9ob3N0RW5kZXNjYXBlRm9yWm9uZUlESW52YWxpZCBJUHY2IGhvc3QgZW50cnkuSW52YWxpZCBlbmQgb2YgYXV0aG9yaXR5cG9ydFN0cmluZ19jaGVja05vbldpbmRvd3NQYXRoUmVzZXJ2ZWRDaGFyYWN0ZXJzc2VnbWVudHNhcmd1bWVudEVycm9ySWxsZWdhbCBwYXRoIGNoYXJhY3RlciBfY2hlY2tXaW5kb3dzUGF0aFJlc2VydmVkQ2hhcmFjdGVyc2ZpcnN0U2VnbWVudFsiKi86PD4/XFx8XUlsbGVnYWwgY2hhcmFjdGVyIGluIHBhdGhJbGxlZ2FsIGNoYXJhY3RlciBpbiBwYXRoOiBfY2hlY2tXaW5kb3dzRHJpdmVMZXR0ZXJJbGxlZ2FsIGRyaXZlIGxldHRlciBfbWFrZUZpbGVVcmlzbGFzaFRlcm1pbmF0ZWRfbWFrZVdpbmRvd3NGaWxlVXJsXFw/XFVOQ1xXaW5kb3dzIHBhdGhzIHdpdGggXFw/XCBwcmVmaXggbXVzdCBiZSBhYnNvbHV0ZVdpbmRvd3MgcGF0aHMgd2l0aCBkcml2ZSBsZXR0ZXIgbXVzdCBiZSBhYnNvbHV0ZWhvc3RQYXJ0cGF0aFBhcnRzY2hlbWVDaGFuZ2VkcGF0aFRvU3BsaXRxdWVyeVBhcmFtZXRlckxpc3RzX21ha2VQb3J0X21ha2VIb3N0c3RyaWN0SVB2Nk1pc3NpbmcgZW5kIGBdYCB0byBtYXRjaCBgW2AgaW4gaG9zdHpvbmVJRHpvbmVJRHN0YXJ0JTI1X2NoZWNrWm9uZUlEX2lzWm9uZUlEQ2hhcl9ub3JtYWxpemVab25lSURzZWN0aW9uU3RhcnRab25lSUQgc2hvdWxkIG5vdCBjb250YWluICUgYW55bW9yZV9pc1JlZ05hbWVDaGFyX25vcm1hbGl6ZVJlZ05hbWVfbWFrZVNjaGVtZWZpcnN0Q29kZVVuaXRTY2hlbWUgbm90IHN0YXJ0aW5nIHdpdGggYWxwaGFiZXRpYyBjaGFyYWN0ZXJjb250YWluc1VwcGVyQ2FzZUlsbGVnYWwgc2NoZW1lIGNoYXJhY3Rlcl9jYW5vbmljYWxpemVTY2hlbWVfbWFrZVVzZXJJbmZvX21ha2VQYXRoZW5zdXJlTGVhZGluZ1NsYXNoQm90aCBwYXRoIGFuZCBwYXRoU2VnbWVudHMgc3BlY2lmaWVkZXNjYXBlRGVsaW1pdGVyc19ub3JtYWxpemVQYXRoX21ha2VRdWVyeUJvdGggcXVlcnkgYW5kIHF1ZXJ5UGFyYW1ldGVycyBzcGVjaWZpZWR3cml0ZVBhcmFtZXRlcl9tYWtlRnJhZ21lbnRfbm9ybWFsaXplRXNjYXBlbG93ZXJDYXNlZmlyc3REaWdpdFZhbHVlc2Vjb25kRGlnaXRWYWx1ZV9lc2NhcGVDaGFyMDEyMzQ1Njc4OUFCQ0RFRmVuY29kZWRCeXRlc19ub3JtYWxpemVPclN1YnN0cmluZ2NoYXJUYWJsZV9pc1NjaGVtZUNoYXJhY3Rlcl9pc0dlbmVyYWxEZWxpbWl0ZXJfbWVyZ2VQYXRoc2JhY2tDb3VudHJlZlN0YXJ0YmFzZUVuZF9tYXlDb250YWluRG90U2VnbWVudHMvLl9yZW1vdmVEb3RTZWdtZW50c19ub3JtYWxpemVSZWxhdGl2ZVBhdGhfZXNjYXBlU2NoZW1lJTNBdGFyZ2V0U2NoZW1ldGFyZ2V0VXNlckluZm90YXJnZXRIb3N0dGFyZ2V0UG9ydHRhcmdldFBhdGh0YXJnZXRRdWVyeW1lcmdlZFBhdGhDYW5ub3QgdXNlIG9yaWdpbiB3aXRob3V0IGEgc2NoZW1lOiBPcmlnaW4gaXMgb25seSBhcHBsaWNhYmxlIHNjaGVtZXMgaHR0cCBhbmQgaHR0cHM6IDogVVJJIHNob3VsZCBoYXZlIGEgbm9uLWVtcHR5IGhvc3QgbmFtZTogOi8vQ2Fubm90IGV4dHJhY3QgYSBmaWxlIHBhdGggZnJvbSBhICBVUklDYW5ub3QgZXh0cmFjdCBhIGZpbGUgcGF0aCBmcm9tIGEgVVJJIHdpdGggYSBxdWVyeSBjb21wb25lbnRDYW5ub3QgZXh0cmFjdCBhIGZpbGUgcGF0aCBmcm9tIGEgVVJJIHdpdGggYSBmcmFnbWVudCBjb21wb25lbnRfdG9GaWxlUGF0aENhbm5vdCBleHRyYWN0IGEgbm9uLVdpbmRvd3MgZmlsZSBwYXRoIGZyb20gYSBmaWxlIFVSSSB3aXRoIGFuIGF1dGhvcml0eV90b1dpbmRvd3NGaWxlUGF0aGhhc0RyaXZlTGV0dGVyX2lzUGF0aEFic29sdXRlc3NfaW5pdGlhbGl6ZVRleHRfc3BsaXRRdWVyeVN0cmluZ0FsbHBhcnNlUGFpcl91cmlFbmNvZGVjYW5vbmljYWxUYWJsZXNwYWNlVG9QbHVzX2hleENoYXJQYWlyVG9CeXRlSW52YWxpZCBVUkwgZW5jb2RpbmdfdXJpRGVjb2RlcGx1c1RvU3BhY2VJbGxlZ2FsIHBlcmNlbnQgZW5jb2RpbmcgaW4gVVJJVHJ1bmNhdGVkIFVSSV9pc0FscGhhYmV0aWNDaGFyYWN0ZXJfaXNVbnJlc2VydmVkQ2hhclVyaURhdGFfbm9TY2hlbWVfc2VwYXJhdG9ySW5kaWNlc191cmlDYWNoZV9iYXNlNjRfdG9rZW5DaGFyVGFibGVfdXJpY1RhYmxlX2Jhc2U2NFRhYmxlY2hhcnNldE5hbWVlbmNvZGluZ05hbWU7YmFzZTY0LGZyb21CeXRlc1NjaGVtZSBtdXN0IGJlICdkYXRhJ0RhdGEgdXJpIG11c3Qgbm90IGhhdmUgYXV0aG9yaXR5RGF0YSB1cmkgbXVzdCBub3QgaGF2ZSBhIGZyYWdtZW50IHBhcnRzbGFzaEluZGV4SW52YWxpZCBNSU1FIHR5cGU7Y2hhcnNldD1QYXJhbWV0ZXIgbmFtZXMgbXVzdCBub3QgYmUgZW1wdHlQYXJhbWV0ZXIgdmFsdWVzIG11c3Qgbm90IGJlIGVtcHR5cGFyYW1ldGVyc1siX3ZhbGlkYXRlTWltZVR5cGVEb2VzIG5vdCBzdGFydCB3aXRoICdkYXRhOidjb2xvbkluZGV4cXVlcnlJbmRleHBhcmFtZXRlclN0YXJ0cGFyYW1ldGVyRW5kaXNCYXNlNjRrZXlTdGFydGtleUVuZGNvbnRlbnRUZXh0SW52YWxpZCBwZXJjZW50IGVzY2FwZVVua25vd24gY2hhcnNldDogbGFzdFNlcGFyYXRvckV4cGVjdGluZyAnPSdfdXJpRW5jb2RlQnl0ZXNub24tYnl0ZSB2YWx1ZV9TaW1wbGVVcmlfc2NoZW1lRW5kX2hvc3RTdGFydF9wb3J0U3RhcnRfcGF0aFN0YXJ0X3F1ZXJ5U3RhcnRfZnJhZ21lbnRTdGFydF9zY2hlbWVDYWNoZV9pc0ZpbGVfaXNIdHRwX2lzSHR0cHNfaXNQYWNrYWdlX2lzU2NoZW1laXNIdHRwT3JpZ2luIGlzIG9ubHkgYXBwbGljYWJsZSB0byBzY2hlbWVzIGh0dHAgYW5kIGh0dHBzOiBfaXNQb3J0cG9ydERpZ2l0U3RhcnRfc2ltcGxlTWVyZ2VfdG9Ob25TaW1wbGVuZXdVcmlyZWZVcmliYXNlU3RhcnRyZWZFbmRfRGF0YVVyaV9vdXRzdGFuZGluZ0xvYWRSZXF1ZXN0c19tYXhBc2NpaV9tYXhMYXRpbjFfbWF4VXRmMTZfbWF4VW5pY29kZXByb3Zpc2lvbmFscHJveHlfUEVSQ0VOVF9BTVBFUlNBTkRfUExVU19TTEFTSF9FUVVBTFNfVVBQRVJfQ0FTRV9BX1VQUEVSX0NBU0VfWl9MRUZUX0JSQUNLRVRfQkFDS1NMQVNIX1JJR0hUX0JSQUNLRVRfTE9XRVJfQ0FTRV9BX0xPV0VSX0NBU0VfRl9MT1dFUl9DQVNFX1pfaGV4RGlnaXRzX3NjaGVtZUVuZEluZGV4X2hvc3RTdGFydEluZGV4X3BvcnRTdGFydEluZGV4X3BhdGhTdGFydEluZGV4X3F1ZXJ5U3RhcnRJbmRleF9mcmFnbWVudFN0YXJ0SW5kZXhfbm90U2ltcGxlSW5kZXhfdXJpU3RhcnRfbm9uU2ltcGxlRW5kU3RhdGVzX3NjaGVtZVN0YXJ0X3NjYW5uZXJUYWJsZXNfbWF4X21pbl9uZXdEaWdpdHNfY29tcGxldGVEZWZlcnJlZExvYWRzc3RpbGxPdXRzdGFuZGluZ0xvYWRSZXF1ZXN0c291dHN0YW5kaW5nUmVxdWVzdHNfZ2V0SGFzaE9iamVjdF9nZXRIYXNoX3NldEhhc2hPYmplY3Rfc2V0SGFzaF91bnN1cHBvcnRlZFVyaUJhc2UnVXJpLmJhc2UnIGlzIG5vdCBzdXBwb3J0ZWRJZGVudGljYWxfY29tcGFyaXNvbmlkZW50aXR5SGFzaENvZGVfY3JlYXRlVGFibGVzdGFibGVzZGVmYXVsdFRyYW5zaXRpb25zZXRDaGFyc3RyYW5zaXRpb24wMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei0uX34hJCYnKCkqKyw7PUFaMDlheistLl9zY2FuX3N0YXJ0c1dpdGhEYXRhX3N0cmluZ09yTnVsbExlbmd0aGRhcnQuX2h0dHBjcnlwdG8uZGFydGh0dHBfZGF0ZS5kYXJ0aHR0cF9oZWFkZXJzLmRhcnRodHRwX2ltcGwuZGFydGh0dHBfcGFyc2VyLmRhcnRodHRwX3Nlc3Npb24uZGFydHdlYnNvY2tldC5kYXJ0d2Vic29ja2V0X2ltcGwuZGFydF9CeXRlc0NvbnN1bWVyQmFkQ2VydGlmaWNhdGVDYWxsYmFja2NyX1Byb3RvY29sU2VsZWN0b3JIdHRwU2VydmVyc2VydmVySGVhZGVyYXV0b0NvbXByZXNzaWRsZVRpbWVvdXRkZWZhdWx0UmVzcG9uc2VIZWFkZXJzYmluZFNlY3VyZWxpc3Rlbk9uc2Vzc2lvblRpbWVvdXRjb25uZWN0aW9uc0luZm9IdHRwQ29ubmVjdGlvbnNJbmZvaWRsZUh0dHBIZWFkZXJzYWNjZXB0SGVhZGVyYWNjZXB0Q2hhcnNldEhlYWRlcmFjY2VwdC1jaGFyc2V0YWNjZXB0RW5jb2RpbmdIZWFkZXJhY2NlcHQtZW5jb2RpbmdhY2NlcHRMYW5ndWFnZUhlYWRlcmFjY2VwdC1sYW5ndWFnZWFjY2VwdFJhbmdlc0hlYWRlcmFjY2VwdC1yYW5nZXNhZ2VIZWFkZXJhZ2VhbGxvd0hlYWRlcmFsbG93YXV0aG9yaXphdGlvbkhlYWRlcmF1dGhvcml6YXRpb25jYWNoZUNvbnRyb2xIZWFkZXJjYWNoZS1jb250cm9sY29ubmVjdGlvbkhlYWRlcmNvbnRlbnRFbmNvZGluZ0hlYWRlcmNvbnRlbnQtZW5jb2Rpbmdjb250ZW50TGFuZ3VhZ2VIZWFkZXJjb250ZW50LWxhbmd1YWdlY29udGVudExlbmd0aEhlYWRlcmNvbnRlbnQtbGVuZ3RoY29udGVudExvY2F0aW9uSGVhZGVyY29udGVudC1sb2NhdGlvbmNvbnRlbnRNRDVIZWFkZXJjb250ZW50LW1kNWNvbnRlbnRSYW5nZUhlYWRlcmNvbnRlbnQtcmFuZ2Vjb250ZW50VHlwZUhlYWRlcmNvbnRlbnQtdHlwZWRhdGVIZWFkZXJldGFnSGVhZGVyZXRhZ2V4cGVjdEhlYWRlcmV4cGVjdGV4cGlyZXNIZWFkZXJmcm9tSGVhZGVyaG9zdEhlYWRlcmlmTWF0Y2hIZWFkZXJpZi1tYXRjaGlmTW9kaWZpZWRTaW5jZUhlYWRlcmlmLW1vZGlmaWVkLXNpbmNlaWZOb25lTWF0Y2hIZWFkZXJpZi1ub25lLW1hdGNoaWZSYW5nZUhlYWRlcmlmLXJhbmdlaWZVbm1vZGlmaWVkU2luY2VIZWFkZXJpZi11bm1vZGlmaWVkLXNpbmNlbGFzdE1vZGlmaWVkSGVhZGVybGFzdC1tb2RpZmllZGxvY2F0aW9uSGVhZGVybWF4Rm9yd2FyZHNIZWFkZXJtYXgtZm9yd2FyZHNwcmFnbWFIZWFkZXJwcm94eUF1dGhlbnRpY2F0ZUhlYWRlcnByb3h5LWF1dGhlbnRpY2F0ZXByb3h5QXV0aG9yaXphdGlvbkhlYWRlcnByb3h5LWF1dGhvcml6YXRpb25yYW5nZUhlYWRlcnJlZmVyZXJIZWFkZXJyZWZlcmVycmV0cnlBZnRlckhlYWRlcnJldHJ5LWFmdGVydGVIZWFkZXJ0ZXRyYWlsZXJIZWFkZXJ0cmFpbGVydHJhbnNmZXJFbmNvZGluZ0hlYWRlcnRyYW5zZmVyLWVuY29kaW5ndXBncmFkZUhlYWRlcnVwZ3JhZGV1c2VyQWdlbnRIZWFkZXJ1c2VyLWFnZW50dmFyeUhlYWRlcnZhcnl2aWFIZWFkZXJ3YXJuaW5nSGVhZGVyd3d3QXV0aGVudGljYXRlSGVhZGVyd3d3LWF1dGhlbnRpY2F0ZUFDQ0VQVFVzZSBhY2NlcHRIZWFkZXIgaW5zdGVhZEFDQ0VQVF9DSEFSU0VUVXNlIGFjY2VwdENoYXJzZXRIZWFkZXIgaW5zdGVhZEFDQ0VQVF9FTkNPRElOR1VzZSBhY2NlcHRFbmNvZGluZ0hlYWRlciBpbnN0ZWFkQUNDRVBUX0xBTkdVQUdFVXNlIGFjY2VwdExhbmd1YWdlSGVhZGVyIGluc3RlYWRBQ0NFUFRfUkFOR0VTVXNlIGFjY2VwdFJhbmdlc0hlYWRlciBpbnN0ZWFkQUdFVXNlIGFnZUhlYWRlciBpbnN0ZWFkQUxMT1dVc2UgYWxsb3dIZWFkZXIgaW5zdGVhZEFVVEhPUklaQVRJT05Vc2UgYXV0aG9yaXphdGlvbkhlYWRlciBpbnN0ZWFkQ0FDSEVfQ09OVFJPTFVzZSBjYWNoZUNvbnRyb2xIZWFkZXIgaW5zdGVhZENPTk5FQ1RJT05Vc2UgY29ubmVjdGlvbkhlYWRlciBpbnN0ZWFkQ09OVEVOVF9FTkNPRElOR1VzZSBjb250ZW50RW5jb2RpbmdIZWFkZXIgaW5zdGVhZENPTlRFTlRfTEFOR1VBR0VVc2UgY29udGVudExhbmd1YWdlSGVhZGVyIGluc3RlYWRDT05URU5UX0xFTkdUSFVzZSBjb250ZW50TGVuZ3RoSGVhZGVyIGluc3RlYWRDT05URU5UX0xPQ0FUSU9OVXNlIGNvbnRlbnRMb2NhdGlvbkhlYWRlciBpbnN0ZWFkQ09OVEVOVF9NRDVVc2UgY29udGVudE1ENUhlYWRlciBpbnN0ZWFkQ09OVEVOVF9SQU5HRVVzZSBjb250ZW50UmFuZ2VIZWFkZXIgaW5zdGVhZENPTlRFTlRfVFlQRVVzZSBjb250ZW50VHlwZUhlYWRlciBpbnN0ZWFkREFURVVzZSBkYXRlSGVhZGVyIGluc3RlYWRFVEFHVXNlIGV0YWdIZWFkZXIgaW5zdGVhZEVYUEVDVFVzZSBleHBlY3RIZWFkZXIgaW5zdGVhZEVYUElSRVNVc2UgZXhwaXJlc0hlYWRlciBpbnN0ZWFkRlJPTVVzZSBmcm9tSGVhZGVyIGluc3RlYWRIT1NUVXNlIGhvc3RIZWFkZXIgaW5zdGVhZElGX01BVENIVXNlIGlmTWF0Y2hIZWFkZXIgaW5zdGVhZElGX01PRElGSUVEX1NJTkNFVXNlIGlmTW9kaWZpZWRTaW5jZUhlYWRlciBpbnN0ZWFkSUZfTk9ORV9NQVRDSFVzZSBpZk5vbmVNYXRjaEhlYWRlciBpbnN0ZWFkSUZfUkFOR0VVc2UgaWZSYW5nZUhlYWRlciBpbnN0ZWFkSUZfVU5NT0RJRklFRF9TSU5DRVVzZSBpZlVubW9kaWZpZWRTaW5jZUhlYWRlciBpbnN0ZWFkTEFTVF9NT0RJRklFRFVzZSBsYXN0TW9kaWZpZWRIZWFkZXIgaW5zdGVhZExPQ0FUSU9OVXNlIGxvY2F0aW9uSGVhZGVyIGluc3RlYWRNQVhfRk9SV0FSRFNVc2UgbWF4Rm9yd2FyZHNIZWFkZXIgaW5zdGVhZFBSQUdNQVVzZSBwcmFnbWFIZWFkZXIgaW5zdGVhZFBST1hZX0FVVEhFTlRJQ0FURVVzZSBwcm94eUF1dGhlbnRpY2F0ZUhlYWRlciBpbnN0ZWFkUFJPWFlfQVVUSE9SSVpBVElPTlVzZSBwcm94eUF1dGhvcml6YXRpb25IZWFkZXIgaW5zdGVhZFJBTkdFVXNlIHJhbmdlSGVhZGVyIGluc3RlYWRSRUZFUkVSVXNlIHJlZmVyZXJIZWFkZXIgaW5zdGVhZFJFVFJZX0FGVEVSVXNlIHJldHJ5QWZ0ZXJIZWFkZXIgaW5zdGVhZFNFUlZFUlVzZSBzZXJ2ZXJIZWFkZXIgaW5zdGVhZFRFVXNlIHRlSGVhZGVyIGluc3RlYWRUUkFJTEVSVXNlIHRyYWlsZXJIZWFkZXIgaW5zdGVhZFRSQU5TRkVSX0VOQ09ESU5HVXNlIHRyYW5zZmVyRW5jb2RpbmdIZWFkZXIgaW5zdGVhZFVQR1JBREVVc2UgdXBncmFkZUhlYWRlciBpbnN0ZWFkVVNFUl9BR0VOVFVzZSB1c2VyQWdlbnRIZWFkZXIgaW5zdGVhZFZBUllVc2UgdmFyeUhlYWRlciBpbnN0ZWFkVklBVXNlIHZpYUhlYWRlciBpbnN0ZWFkVXNlIHdhcm5pbmdIZWFkZXIgaW5zdGVhZFdXV19BVVRIRU5USUNBVEVVc2Ugd3d3QXV0aGVudGljYXRlSGVhZGVyIGluc3RlYWRjb29raWVIZWFkZXJjb29raWVzZXRDb29raWVIZWFkZXJzZXQtY29va2llQ09PS0lFVXNlIGNvb2tpZUhlYWRlciBpbnN0ZWFkU0VUX0NPT0tJRVVzZSBzZXRDb29raWVIZWFkZXIgaW5zdGVhZGdlbmVyYWxIZWFkZXJzR0VORVJBTF9IRUFERVJTVXNlIGdlbmVyYWxIZWFkZXJzIGluc3RlYWRlbnRpdHlIZWFkZXJzRU5USVRZX0hFQURFUlNVc2UgZW50aXR5SGVhZGVycyBpbnN0ZWFkcmVzcG9uc2VIZWFkZXJzUkVTUE9OU0VfSEVBREVSU1VzZSByZXNwb25zZUhlYWRlcnMgaW5zdGVhZHJlcXVlc3RIZWFkZXJzUkVRVUVTVF9IRUFERVJTVXNlIHJlcXVlc3RIZWFkZXJzIGluc3RlYWRpZk1vZGlmaWVkU2luY2Vjb250ZW50TGVuZ3RoY2h1bmtlZFRyYW5zZmVyRW5jb2Rpbmdub0ZvbGRpbmdIZWFkZXJWYWx1ZXBhcmFtZXRlclNlcGFyYXRvcnZhbHVlU2VwYXJhdG9ycHJlc2VydmVCYWNrc2xhc2hIdHRwU2Vzc2lvbnBsYWluVEVYVFVzZSB0ZXh0IGluc3RlYWRIVE1MVXNlIGh0bWwgaW5zdGVhZEpTT05Vc2UganNvbiBpbnN0ZWFkb2N0ZXQtc3RyZWFtVXNlIGJpbmFyeSBpbnN0ZWFkcHJpbWFyeVR5cGVzdWJUeXBlQ29va2llbWF4QWdlaHR0cE9ubHlmcm9tU2V0Q29va2llVmFsdWVIdHRwUmVxdWVzdHJlcXVlc3RlZFVyaWNvb2tpZXNzZXNzaW9ucHJvdG9jb2xWZXJzaW9uSHR0cFJlc3BvbnNlZGVhZGxpbmVkZXRhY2hTb2NrZXR3cml0ZUhlYWRlcnNkZWZhdWx0SHR0cFBvcnRERUZBVUxUX0hUVFBfUE9SVFVzZSBkZWZhdWx0SHR0cFBvcnQgaW5zdGVhZGRlZmF1bHRIdHRwc1BvcnRERUZBVUxUX0hUVFBTX1BPUlRVc2UgZGVmYXVsdEh0dHBzUG9ydCBpbnN0ZWFkY29ubmVjdGlvblRpbWVvdXRhdXRvVW5jb21wcmVzc3VzZXJBZ2VudGNyZWF0ZUh0dHBDbGllbnRvcGVuVXJscHV0VXJsZGVsZXRlVXJscGF0Y2hVcmxoZWFkVXJsYXV0aGVudGljYXRlYWRkQ3JlZGVudGlhbHNyZWFsbWNyZWRlbnRpYWxzZmluZFByb3h5ZmluZFByb3h5RnJvbUVudmlyb25tZW50YXV0aGVudGljYXRlUHJveHlhZGRQcm94eUNyZWRlbnRpYWxzYmFkQ2VydGlmaWNhdGVDYWxsYmFja2ZvbGxvd1JlZGlyZWN0c21heFJlZGlyZWN0c0h0dHBDbGllbnRSZXNwb25zZWNvbXByZXNzaW9uU3RhdGVpc1JlZGlyZWN0cmVkaXJlY3RzZm9sbG93TG9vcHNIdHRwQ2xpZW50UmVzcG9uc2VDb21wcmVzc2lvblN0YXRlSHR0cENsaWVudFJlc3BvbnNlQ29tcHJlc3Npb25TdGF0ZS5ub3RDb21wcmVzc2VkSHR0cENsaWVudFJlc3BvbnNlQ29tcHJlc3Npb25TdGF0ZS5kZWNvbXByZXNzZWRIdHRwQ2xpZW50UmVzcG9uc2VDb21wcmVzc2lvblN0YXRlLmNvbXByZXNzZWRub3RDb21wcmVzc2VkZGVjb21wcmVzc2VkY29tcHJlc3NlZEh0dHBDbGllbnRDcmVkZW50aWFsc0h0dHBDbGllbnRCYXNpY0NyZWRlbnRpYWxzdXNlcm5hbWVIdHRwQ2xpZW50RGlnZXN0Q3JlZGVudGlhbHNIdHRwQ29ubmVjdGlvbkluZm9SZWRpcmVjdEluZm9EZXRhY2hlZFNvY2tldHVucGFyc2VkRGF0YUh0dHBFeGNlcHRpb25IdHRwRXhjZXB0aW9uOiAsIHVyaSA9IFJlZGlyZWN0RXhjZXB0aW9uUmVkaXJlY3RFeGNlcHRpb246IF9DcnlwdG9VdGlsc1BBRENSTEZMSU5FX0xFTkdUSF9lbmNvZGVUYWJsZV9lbmNvZGVUYWJsZVVybFNhZmVfZGVjb2RlVGFibGVfcm5nYnl0ZXNUb0hleGJ5dGVzVG9CYXNlNjRhZGRMaW5lU2VwYXJhdG9yY2h1bmtMZW5ndGhvdXRwdXRMZW5iYXNlNjRTdHJpbmdUb0J5dGVzaWdub3JlSW52YWxpZENoYXJhY3RlcnNleHRyYXNMZW5JbnZhbGlkIGNoYXJhY3RlcjogU2l6ZSBvZiBCYXNlIDY0IGNoYXJhY3RlcnMgaW4gSW5wdXQKICAgICAgICAgIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0LiBJbnB1dDogY3VycmVudENvZGVVbml0X2NodW5rU2l6ZUluV29yZHNfZGlnZXN0U2l6ZUluV29yZHNfYmlnRW5kaWFuV29yZHNfaF9kaWdlc3RDYWxsZWRIYXNoIHVwZGF0ZSBtZXRob2QgY2FsbGVkIGFmdGVyIGRpZ2VzdCB3YXMgcmV0cmlldmVkX3Jlc3VsdEFzQnl0ZXNfdXBkYXRlSGFzaF9hZGQzMl9yb3RsMzJtb2Rfc2hpZnRfd29yZFRvQnl0ZXNfYnl0ZXNUb0NodW5rZGF0YUluZGV4d29yZEluZGV4dzN3MncxdzB3b3JkY2h1bmtTaXplSW5CeXRlc3plcm9QYWRkaW5nX01ENV9rX3J0MV9TSEExX3dIdHRwRGF0ZU1vblR1ZVdlZFRodUZyaVNhdFN1bkphbkZlYk1hckFwck1heUp1bkp1bEF1Z1NlcE9jdE5vdkRlYyAwOjAgR01UU1Bmb3JtYXRSZmMxMTIzZm9ybWF0UmZjODUwZm9ybWF0QXNjdGltZUludmFsaWQgSFRUUCBkYXRlIGV4cGVjdFdlZWtkYXlNb25kYXlUdWVzZGF5V2VkbmVzZGF5VGh1cnNkYXlGcmlkYXlTYXR1cmRheVN1bmRheWV4cGVjdE1vbnRoZXhwZWN0TnVtZXhwZWN0RW5kR01UX3BhcnNlQ29va2llRGF0ZUludmFsaWQgY29va2llIGRhdGUgaXNFbmRpc0RlbGltaXRlcmlzTm9uRGVsaW1pdGVyZ2V0TW9udGhqYW5mZWJtYXJhcHJqdW5qdWxhdWdvY3Rub3ZkZWN0aW1lU3RyZGF5T2ZNb250aFN0cm1vbnRoU3RyeWVhclN0cmRheU9mTW9udGh0aW1lTGlzdF9IdHRwSGVhZGVyc19oZWFkZXJzX211dGFibGVfbm9Gb2xkaW5nSGVhZGVyc19jb250ZW50TGVuZ3RoX3BlcnNpc3RlbnRDb25uZWN0aW9uX2NodW5rZWRUcmFuc2ZlckVuY29kaW5nX2RlZmF1bHRQb3J0Rm9yU2NoZW1lZGVmYXVsdFBvcnRGb3JTY2hlbWVpbml0aWFsSGVhZGVyc01vcmUgdGhhbiBvbmUgdmFsdWUgZm9yIGhlYWRlciBfY2hlY2tNdXRhYmxlY2h1bmtlZDEuMVRyeWluZyB0byBzZXQgJ0Nvbm5lY3Rpb246IEtlZXAtQWxpdmUnIG9uIEhUVFAgMS4wIGhlYWRlcnMgd2l0aCBubyBDb250ZW50TGVuZ3Roa2VlcC1hbGl2ZVRyeWluZyB0byBjbGVhciBDb250ZW50TGVuZ3RoIG9uIEhUVFAgMS4wIGhlYWRlcnMgd2l0aCAnQ29ubmVjdGlvbjogS2VlcC1BbGl2ZScgc2V0VHJ5aW5nIHRvIHNldCAnVHJhbnNmZXItRW5jb2Rpbmc6IENodW5rZWQnIG9uIEhUVFAgMS4wIGhlYWRlcnNfYWRkVmFsdWVfdXBkYXRlSG9zdEhlYWRlcl9hZGREYXRlX2FkZEhvc3RfYWRkRXhwaXJlc19hZGRDb25uZWN0aW9uX2FkZENvbnRlbnRUeXBlX2FkZENvbnRlbnRMZW5ndGhfYWRkVHJhbnNmZXJFbmNvZGluZ19hZGRJZk1vZGlmaWVkU2luY2VVbmV4cGVjdGVkIHR5cGUgZm9yIGhlYWRlciBuYW1lZCBsb3dlckNhc2VWYWx1ZUhUVFAgaGVhZGVycyBhcmUgbm90IG11dGFibGVkZWZhdWx0UG9ydF9mb2xkSGVhZGVybmFtZURhdGFfcGFyc2VDb29raWVzcGFyc2VDb29raWVTdHJpbmdza2lwV1NwYXJzZU5hbWVwYXJzZVZhbHVlaGVhZGVyVmFsdWVfdmFsaWRhdGVGaWVsZEludmFsaWQgSFRUUCBoZWFkZXIgZmllbGQgbmFtZTogX3ZhbGlkYXRlVmFsdWVJbnZhbGlkIEhUVFAgaGVhZGVyIGZpZWxkIHZhbHVlOiBfSGVhZGVyVmFsdWVfdW5tb2RpZmlhYmxlUGFyYW1ldGVyc19lbnN1cmVQYXJhbWV0ZXJzRmFpbGVkIHRvIHBhcnNlIGhlYWRlciB2YWx1ZW1heWJlRXhwZWN0cGFyc2VQYXJhbWV0ZXJzcGFyc2VQYXJhbWV0ZXJOYW1lcGFyc2VQYXJhbWV0ZXJWYWx1ZV9Db250ZW50VHlwZV9wcmltYXJ5VHlwZV9zdWJUeXBlbG93ZXJDYXNlS2V5X0Nvb2tpZV9wYXJzZVNldENvb2tpZVZhbHVlRmFpbGVkIHRvIHBhcnNlIGhlYWRlciB2YWx1ZSBbcGFyc2VBdHRyaWJ1dGVzcGFyc2VBdHRyaWJ1dGVOYW1lcGFyc2VBdHRyaWJ1dGVWYWx1ZW1heC1hZ2VodHRwb25seTsgRXhwaXJlcz07IE1heC1BZ2U9OyBEb21haW49OyBQYXRoPTsgU2VjdXJlOyBIdHRwT25seV92YWxpZGF0ZU5hbWVJbnZhbGlkIGNoYXJhY3RlciBpbiBjb29raWUgbmFtZSwgY29kZSB1bml0OiAnSW52YWxpZCBjaGFyYWN0ZXIgaW4gY29va2llIHZhbHVlLCBjb2RlIHVuaXQ6ICdfSU5JVF9TSVpFX0h0dHBJbmNvbWluZ190cmFuc2Zlckxlbmd0aF9kYXRhQ29tcGxldGVyZnVsbEJvZHlSZWFkdXBncmFkZWRoYXNTdWJzY3JpYmVydHJhbnNmZXJMZW5ndGhkYXRhRG9uZV9IdHRwSW5ib3VuZE1lc3NhZ2VMaXN0SW50X2luY29taW5nX2Nvb2tpZXNfSHR0cEluYm91bmRNZXNzYWdlX0h0dHBSZXF1ZXN0X2h0dHBTZXJ2ZXJfaHR0cENvbm5lY3Rpb25fc2Vzc2lvbl9yZXF1ZXN0ZWRVcmlfc2Vzc2lvbk1hbmFnZXJJbnN0YW5jZXNlc3Npb25JZHNEQVJUU0VTU0lEc2Vzc2lvbklkX3Nlc3Npb25NYW5hZ2VyZ2V0U2Vzc2lvbl9tYXJrU2VlbngtZm9yd2FyZGVkLXByb3RvaG9zdExpc3R4LWZvcndhcmRlZC1ob3N0X2Rlc3Ryb3llZGNyZWF0ZVNlc3Npb25fSHR0cENsaWVudFJlc3BvbnNlX2h0dHBSZXF1ZXN0X3Jlc3BvbnNlUmVkaXJlY3RzX2dldENvbXByZXNzaW9uU3RhdGVodHRwQ2xpZW50X2h0dHBDbGllbnRDb25uZWN0aW9uSEVBRFBPU1RSZXNwb25zZSBoYXMgbm8gTG9jYXRpb24gaGVhZGVyIGZvciByZWRpcmVjdFJlZGlyZWN0IGxvb3AgZGV0ZWN0ZWRfb3BlblVybEZyb21SZXF1ZXN0X2Nvbm5lY3Rpb25DbG9zZWRfc2hvdWxkQXV0aGVudGljYXRlUHJveHljaGFsbGVuZ2Vfc2hvdWxkQXV0aGVudGljYXRlX2F1dGhlbnRpY2F0ZXByb3h5QXV0aHJldHJ5YXV0aENoYWxsZW5nZWZpbmRDcmVkZW50aWFsc19maW5kUHJveHlDcmVkZW50aWFsc19wcm94eV9maW5kQ3JlZGVudGlhbHNyZW1vdmVDcmVkZW50aWFsc19yZW1vdmVQcm94eUNyZWRlbnRpYWxzX3JlbW92ZUNyZWRlbnRpYWxzcmVxdWVzdEF1dGhlbnRpY2F0aW9uX2F1dGhlbnRpY2F0ZVByb3h5YWxnb3JpdGhtbm9uY2Vxb3Bub25jZUNvdW50c3RhbGVjcmVkc0F2YWlsYWJsZV9Ub1VpbnQ4TGlzdF9VaW50OExpc3RDb252ZXJzaW9uU2lua3RhcmdldEFkZFN0cmVhbV9IdHRwT3V0Ym91bmRNZXNzYWdlX2VuY29kaW5nU2V0X2J1ZmZlck91dHB1dF9vdXRnb2luZ291dGdvaW5nb3V0Ym91bmRoZWFkZXJzV3JpdHRlbkhlYWRlciBhbHJlYWR5IHNlbnRfd3JpdGVIZWFkZXJfaXNDb25uZWN0aW9uQ2xvc2VkX0h0dHBSZXNwb25zZV9zdGF0dXNDb2RlX3JlYXNvblBocmFzZV9kZWFkbGluZV9kZWFkbGluZVRpbWVyZGVmYXVsdEhlYWRlcnNfaXNDbG9zaW5nX2ZpbmRSZWFzb25QaHJhc2VIZWFkZXJzIGFscmVhZHkgc2VudGhlYWRlcnNGdXR1cmVkcmFpblJlcXVlc3RzZXRPdXRnb2luZ19pc05ld2hlYWRlckJ5dGVzc2V0SGVhZGVyU3dpdGNoaW5nIFByb3RvY29sc0NyZWF0ZWRBY2NlcHRlZE5vbi1BdXRob3JpdGF0aXZlIEluZm9ybWF0aW9uTm8gQ29udGVudFJlc2V0IENvbnRlbnRQYXJ0aWFsIENvbnRlbnRNdWx0aXBsZSBDaG9pY2VzTW92ZWQgUGVybWFuZW50bHlGb3VuZFNlZSBPdGhlck5vdCBNb2RpZmllZFVzZSBQcm94eVRlbXBvcmFyeSBSZWRpcmVjdEJhZCBSZXF1ZXN0VW5hdXRob3JpemVkUGF5bWVudCBSZXF1aXJlZEZvcmJpZGRlbk5vdCBGb3VuZE1ldGhvZCBOb3QgQWxsb3dlZE5vdCBBY2NlcHRhYmxlUHJveHkgQXV0aGVudGljYXRpb24gUmVxdWlyZWRSZXF1ZXN0IFRpbWUtb3V0Q29uZmxpY3RHb25lTGVuZ3RoIFJlcXVpcmVkUHJlY29uZGl0aW9uIEZhaWxlZFJlcXVlc3QgRW50aXR5IFRvbyBMYXJnZVJlcXVlc3QtVVJJIFRvbyBMb25nVW5zdXBwb3J0ZWQgTWVkaWEgVHlwZVJlcXVlc3RlZCByYW5nZSBub3Qgc2F0aXNmaWFibGVFeHBlY3RhdGlvbiBGYWlsZWRJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JOb3QgSW1wbGVtZW50ZWRCYWQgR2F0ZXdheVNlcnZpY2UgVW5hdmFpbGFibGVHYXRld2F5IFRpbWUtb3V0SHR0cCBWZXJzaW9uIG5vdCBzdXBwb3J0ZWRTdGF0dXMgX0h0dHBDbGllbnRSZXF1ZXN0X3Jlc3BvbnNlQ29tcGxldGVyX3Jlc3BvbnNlX2ZvbGxvd1JlZGlyZWN0c19tYXhSZWRpcmVjdHNSZXF1ZXN0IGFscmVhZHkgc2VudF9vbkluY29taW5naW5jb21pbmdSZWRpcmVjdCBsaW1pdCBleGNlZWRlZF9yZXF1ZXN0VXJpdXJpU3RhcnRpbmdGcm9tUGF0aGlzRGlyZWN0Q09OTkVDVF9wcm94eVR1bm5lbF9IdHRwR1ppcFNpbmtfY29uc3VtZV9IdHRwT3V0Z29pbmdfZm9vdGVyQW5kQ2h1bmswTGVuZ3RoX2NodW5rMExlbmd0aGlnbm9yZUJvZHlfY2xvc2VGdXR1cmVfcGVuZGluZ0NodW5rZWRGb290ZXJfYnl0ZXNXcml0dGVuX2d6aXBfZ3ppcFNpbmtfZ3ppcEFkZF9nemlwQnVmZmVyX2d6aXBCdWZmZXJMZW5ndGhfc29ja2V0RXJyb3JkcmFpbkZ1dHVyZWFjY2VwdEVuY29kaW5nc2NvbnRlbnRFbmNvZGluZ19hZGRHWmlwQ2h1bmtfY2h1bmtIZWFkZXJDb250ZW50IHNpemUgZXhjZWVkcyBzcGVjaWZpZWQgY29udGVudExlbmd0aC4gIGJ5dGVzIHdyaXR0ZW4gd2hpbGUgZXhwZWN0ZWQgX2lnbm9yZUVycm9yTm8gY29udGVudCBldmVuIHRob3VnaCBjb250ZW50TGVuZ3RoIHdhcyBzcGVjaWZpZWQgdG8gYmUgZ3JlYXRlciB0aGFuIDA6IENvbnRlbnQgc2l6ZSBiZWxvdyBzcGVjaWZpZWQgY29udGVudExlbmd0aC4gIGJ5dGVzIHdyaXR0ZW4gYnV0IGV4cGVjdGVkIGZvb3RlckFuZEhlYWRlcl9IdHRwQ2xpZW50Q29ubmVjdGlvbl9odHRwUGFyc2VyX2Rpc3Bvc2VfaWRsZVRpbWVyX2N1cnJlbnRVcmlfbmV4dFJlc3BvbnNlQ29tcGxldGVyX3N0cmVhbUZ1dHVyZWxpc3RlblRvU3RyZWFtVW5leHBlY3RlZCByZXNwb25zZSAodW5zb2xpY2l0ZWQgcmVzcG9uc2Ugd2l0aG91dCByZXF1ZXN0KS5Db25uZWN0aW9uIGNsb3NlZCBiZWZvcmUgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkU29ja2V0IGNsb3NlZCBiZWZvcmUgcmVxdWVzdCB3YXMgc2VudHByb3h5Q3JlZHNjcmVkc2lzQXV0aGVudGljYXRlZGF1dGhCYXNpYyBfcHJveHlDcmVkZW50aWFsc2F1dGhvcml6ZWlzSGVhZHN0YXJ0VGltZXJfcmV0dXJuQ29ubmVjdGlvbmF1dGhJbmZvcHJveHktYXV0aGVudGljYXRpb24taW5mb25leHRub25jZWF1dGhlbnRpY2F0aW9uLWluZm9Db25uZWN0aW9uIGNsb3NlZCBiZWZvcmUgZGF0YSB3YXMgcmVjZWl2ZWRkZXRhY2hJbmNvbWluZ2NyZWF0ZVByb3h5VHVubmVsUHJveHkgZmFpbGVkIHRvIGVzdGFibGlzaCB0dW5uZWwgc2VjdXJlU29ja2V0aXNTZWN1cmVzc2g6c3RvcFRpbWVyX0Nvbm5lY3Rpb25JbmZvX0Nvbm5lY3Rpb25UYXJnZXRfaWRsZV9hY3RpdmVfc29ja2V0VGFza3NfY29ubmVjdGluZ2hhc0lkbGVoYXNBY3RpdmV0YWtlSWRsZV9jaGVja1BlbmRpbmdhZGROZXdBY3RpdmVyZXR1cm5Db25uZWN0aW9uY29ubmVjdGlvbkNsb3NlZHVyaUhvc3R1cmlQb3J0X2Nvbm5lY3Rpb25zQ2hhbmdlZGN1cnJlbnRCYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrX2JhZENlcnRpZmljYXRlQ2FsbGJhY2tjb25uZWN0aW9uVGFza0hUVFAgY29ubmVjdGlvbiB0aW1lZCBvdXQgYWZ0ZXIgaG9zdDogdHVubmVsX2dldENvbm5lY3Rpb25UYXJnZXRfSHR0cENsaWVudF9jbG9zaW5nX2Nsb3NpbmdGb3JjZWZ1bGx5X2Nvbm5lY3Rpb25UYXJnZXRzX2NyZWRlbnRpYWxzX2ZpbmRQcm94eV9pZGxlVGltZW91dF9wbGF0Zm9ybUVudmlyb25tZW50Q2FjaGVfb3BlblVybF9jbG9zZUNvbm5lY3Rpb25zQ2xpZW50IGlzIGNsb3NlZE5vIGhvc3Qgc3BlY2lmaWVkIGluIFVSSSBVbnN1cHBvcnRlZCBzY2hlbWUgJycgaW4gVVJJIHByb3h5Q29uZl9nZXRDb25uZWN0aW9uY29ubmVjdGlvblRhcmdldHByb3hpZXNObyBwcm94aWVzIGdpdmVuc2l0ZUNyZWRlbnRpYWxzX2ZpbmRQcm94eUZyb21FbnZpcm9ubWVudGNoZWNrTm9Qcm94eURJUkVDVGNoZWNrUHJveHk6MTA4MFBST1hZIHByb3h5Q2Znbm9Qcm94eW5vX3Byb3h5Tk9fUFJPWFlodHRwX3Byb3h5SFRUUF9QUk9YWWh0dHBzX3Byb3h5SFRUUFNfUFJPWFlfX0h0dHBDb25uZWN0aW9uJkxpbmtlZExpc3RFbnRyeSZfU2VydmljZU9iamVjdF9IdHRwQ29ubmVjdGlvbl9BQ1RJVkVfSURMRV9DTE9TSU5HX0RFVEFDSEVEX2Nvbm5lY3Rpb25zX2lkbGVNYXJrX21hcmtBY3RpdmVfbWFya0lkbGVfaGFuZGxlUmVxdWVzdG1hcmtJZGxlaXNNYXJrZWRJZGxlZGV0YWNoZWRJbmNvbWluZ19pc0FjdGl2ZV9pc0lkbGVfaXNEZXRhY2hlZGlvL2h0dHAvc2VydmVyY29ubmVjdGlvbnNIdHRwU2VydmVyQ29ubmVjdGlvbiA8LT4gdXNlcl9uYW1lQFNvY2tldFVzZXJTb2NrZXRBY3RpdmVJZGxlQ2xvc2luZ0RldGFjaGVkX19IdHRwU2VydmVyJlN0cmVhbSZfU2VydmljZU9iamVjdF9IdHRwU2VydmVyX3NlcnZlcnNfc2VydmVyU29ja2V0X2Nsb3NlU2VydmVyX2FjdGl2ZUNvbm5lY3Rpb25zX2lkbGVDb25uZWN0aW9uc19pbml0RGVmYXVsdFJlc3BvbnNlSGVhZGVyc1gtRnJhbWUtT3B0aW9uc1NBTUVPUklHSU5YLUNvbnRlbnQtVHlwZS1PcHRpb25zbm9zbmlmZlgtWFNTLVByb3RlY3Rpb24xOyBtb2RlPWJsb2NrSHR0cFNlcnZlciBpcyBub3QgYm91bmQgdG8gYSBzb2NrZXRjb25uaW8vaHR0cC9zZXJ2ZXJzX1Byb3h5Q29uZmlndXJhdGlvblBST1hZX1BSRUZJWERJUkVDVF9QUkVGSVhJbnZhbGlkIHByb3h5IGNvbmZpZ3VyYXRpb24gdXNlcmluZm9pbnZhbGlkIHBvcnQgJ19IdHRwQ29ubmVjdGlvbkluZm9fRGV0YWNoZWRTb2NrZXRfQXV0aGVudGljYXRpb25TY2hlbWVfc2NoZW1lVU5LTk9XTkJBU0lDRElHRVNUYmFzaWNCYXNpY19DcmVkZW50aWFsc2hhMV9TaXRlQ3JlZGVudGlhbHN0aGlzUG9ydG90aGVyUG9ydF9Qcm94eUNyZWRlbnRpYWxzYXV0aG9yaXplUHJveHlfSHR0cENsaWVudENyZWRlbnRpYWxzX0h0dHBDbGllbnRCYXNpY0NyZWRlbnRpYWxzX0h0dHBDbGllbnREaWdlc3RDcmVkZW50aWFsc2hhMmNub25jZW5jRGlnZXN0IHVzZXJuYW1lPSIsIHJlYWxtPSIsIG5vbmNlPSIsIHVyaT0iLCBhbGdvcml0aG09IiwgcW9wPSIsIGNub25jZT0iLCBuYz0iLCByZXNwb25zZT0iX1JlZGlyZWN0SW5mb19Db25zdEhUVFBIVFRQMURPVEhUVFAxMEhUVFAxMVNFUEFSQVRPUl9NQVBfQ2hhckNvZGVIVERBU0hTRU1JX0NPTE9ORVFVQUxfU3RhdGVNRVRIT0RfT1JfUkVTUE9OU0VfSFRUUF9WRVJTSU9OUkVTUE9OU0VfSFRUUF9WRVJTSU9OUkVRVUVTVF9MSU5FX01FVEhPRFJFUVVFU1RfTElORV9VUklSRVFVRVNUX0xJTkVfSFRUUF9WRVJTSU9OUkVRVUVTVF9MSU5FX0VORElOR1JFU1BPTlNFX0xJTkVfU1RBVFVTX0NPREVSRVNQT05TRV9MSU5FX1JFQVNPTl9QSFJBU0VSRVNQT05TRV9MSU5FX0VORElOR0hFQURFUl9TVEFSVEhFQURFUl9GSUVMREhFQURFUl9WQUxVRV9TVEFSVEhFQURFUl9WQUxVRUhFQURFUl9WQUxVRV9GT0xESU5HX09SX0VORElOR0hFQURFUl9WQUxVRV9GT0xEX09SX0VOREhFQURFUl9FTkRJTkdDSFVOS19TSVpFX1NUQVJUSU5HX0NSQ0hVTktfU0laRV9TVEFSVElOR19MRkNIVU5LX1NJWkVDSFVOS19TSVpFX0VYVEVOU0lPTkNIVU5LX1NJWkVfRU5ESU5HQ0hVTktFRF9CT0RZX0RPTkVfQ1JDSFVOS0VEX0JPRFlfRE9ORV9MRkJPRFlVUEdSQURFREZBSUxVUkVGSVJTVF9CT0RZX1NUQVRFX0h0dHBWZXJzaW9uVU5ERVRFUk1JTkVEX01lc3NhZ2VUeXBlUkVRVUVTVFJFU1BPTlNFX0h0dHBEZXRhY2hlZFN0cmVhbVN1YnNjcmlwdGlvbl9pbmplY3REYXRhX3VzZXJPbkRhdGFfc2NoZWR1bGVkX21heWJlU2NoZWR1bGVEYXRhX0h0dHBEZXRhY2hlZEluY29taW5nX0h0dHBQYXJzZXJfcGFyc2VyQ2FsbGVkX3JlcXVlc3RQYXJzZXJfaHR0cFZlcnNpb25JbmRleF9tZXNzYWdlVHlwZV9zdGF0dXNDb2RlTGVuZ3RoX3VyaV9vcl9yZWFzb25fcGhyYXNlX2hlYWRlckZpZWxkX2hlYWRlclZhbHVlX2h0dHBWZXJzaW9uX2Nvbm5lY3Rpb25VcGdyYWRlX2NodW5rZWRfbm9NZXNzYWdlQm9keV9yZW1haW5pbmdDb250ZW50X3BhdXNlZF9ib2R5UGF1c2VkX2JvZHlDb250cm9sbGVyX3BhdXNlU3RhdGVDaGFuZ2VkX3Jlc2V0cmVxdWVzdFBhcnNlcnJlc3BvbnNlUGFyc2VyX2RvUGFyc2VfaGVhZGVyc0VuZF9jcmVhdGVJbmNvbWluZ19jbG9zZUluY29taW5nRGF0YSBvbiBjbG9zZWQgY29ubmVjdGlvbkRhdGEgb24gZmFpbGVkIGNvbm5lY3Rpb25JbnZhbGlkIHJlcXVlc3QgbWV0aG9kSW52YWxpZCByZXNwb25zZSBsaW5lSW52YWxpZCByZXF1ZXN0IGxpbmVfZXhwZWN0SW52YWxpZCByZXF1ZXN0IFVSSUludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIGNvZGVJbnZhbGlkIHJlc3BvbnNlIHJlYXNvbiBwaHJhc2VJbnZhbGlkIGhlYWRlciBmaWVsZCBuYW1laGVhZGVyRmllbGRfY2FzZUluc2Vuc2l0aXZlQ29tcGFyZWlzUmVzcG9uc2Vpc1VwZ3JhZGVDb2RlaXNVcGdyYWRlX2V4cGVjdEhleERpZ2l0ZGF0YUF2YWlsYWJsZV9yZWxlYXNlQnVmZmVyQ29ubmVjdGlvbiBjbG9zZWQgd2hpbGUgcmVjZWl2aW5nIGRhdGFDb25uZWN0aW9uIGNsb3NlZCBiZWZvcmUgZnVsbCBoZWFkZXIgd2FzIHJlY2VpdmVkQ29ubmVjdGlvbiBjbG9zZWQgYmVmb3JlIGZ1bGwgYm9keSB3YXMgcmVjZWl2ZWRtZXNzYWdlVHlwZXJlYWRVbnBhcnNlZERhdGFfaXNUb2tlbkNoYXJfaXNWYWx1ZUNoYXJfdG9rZW5pemVGaWVsZFZhbHVlX3RvTG93ZXJDYXNlQnl0ZXZhbDF2YWwyRmFpbGVkIHRvIHBhcnNlIEhUVFBfSHR0cFNlc3Npb25fbGFzdFNlZW5fdGltZW91dENhbGxiYWNrX3ByZXZfcmVtb3ZlRnJvbVRpbWVvdXRRdWV1ZV9zZXNzaW9uc19idW1wVG9FbmRsYXN0U2Vlbkh0dHBTZXNzaW9uIGlkOl9IdHRwU2Vzc2lvbk1hbmFnZXJfc2Vzc2lvblRpbWVvdXRfdGltZXJjcmVhdGVTZXNzaW9uSWRfYWRkVG9UaW1lb3V0UXVldWVfc3RvcFRpbWVyX3N0YXJ0VGltZXJfdGltZXJUaW1lb3V0SHR0cE92ZXJyaWRlc3J1bldpdGhIdHRwT3ZlcnJpZGVzX0h0dHBPdmVycmlkZXNTY29wZV9jcmVhdGVIdHRwQ2xpZW50V2ViU29ja2V0U3RhdHVzbm9ybWFsQ2xvc3VyZWdvaW5nQXdheXByb3RvY29sRXJyb3J1bnN1cHBvcnRlZERhdGFyZXNlcnZlZDEwMDRub1N0YXR1c1JlY2VpdmVkYWJub3JtYWxDbG9zdXJlaW52YWxpZEZyYW1lUGF5bG9hZERhdGFwb2xpY3lWaW9sYXRpb25tZXNzYWdlVG9vQmlnbWlzc2luZ01hbmRhdG9yeUV4dGVuc2lvbnJlc2VydmVkMTAxNU5PUk1BTF9DTE9TVVJFVXNlIG5vcm1hbENsb3N1cmUgaW5zdGVhZEdPSU5HX0FXQVlVc2UgZ29pbmdBd2F5IGluc3RlYWRQUk9UT0NPTF9FUlJPUlVzZSBwcm90b2NvbEVycm9yIGluc3RlYWRVTlNVUFBPUlRFRF9EQVRBVXNlIHVuc3VwcG9ydGVkRGF0YSBpbnN0ZWFkUkVTRVJWRURfMTAwNFVzZSByZXNlcnZlZDEwMDQgaW5zdGVhZE5PX1NUQVRVU19SRUNFSVZFRFVzZSBub1N0YXR1c1JlY2VpdmVkIGluc3RlYWRBQk5PUk1BTF9DTE9TVVJFVXNlIGFibm9ybWFsQ2xvc3VyZSBpbnN0ZWFkSU5WQUxJRF9GUkFNRV9QQVlMT0FEX0RBVEFVc2UgaW52YWxpZEZyYW1lUGF5bG9hZERhdGEgaW5zdGVhZFBPTElDWV9WSU9MQVRJT05Vc2UgcG9saWN5VmlvbGF0aW9uIGluc3RlYWRNRVNTQUdFX1RPT19CSUdVc2UgbWVzc2FnZVRvb0JpZyBpbnN0ZWFkTUlTU0lOR19NQU5EQVRPUllfRVhURU5TSU9OVXNlIG1pc3NpbmdNYW5kYXRvcnlFeHRlbnNpb24gaW5zdGVhZFJFU0VSVkVEXzEwMTVVc2UgcmVzZXJ2ZWQxMDE1IGluc3RlYWRDb21wcmVzc2lvbk9wdGlvbnNjb21wcmVzc2lvbkRlZmF1bHRVc2UgY29tcHJlc3Npb25EZWZhdWx0IGluc3RlYWRjb21wcmVzc2lvbk9mZk9GRlVzZSBjb21wcmVzc2lvbk9mZiBpbnN0ZWFkY2xpZW50Tm9Db250ZXh0VGFrZW92ZXJzZXJ2ZXJOb0NvbnRleHRUYWtlb3ZlcmNsaWVudE1heFdpbmRvd0JpdHNzZXJ2ZXJNYXhXaW5kb3dCaXRzX2NyZWF0ZVNlcnZlclJlc3BvbnNlSGVhZGVycmVxdWVzdGVkbXdic2VydmVyX21heF93aW5kb3dfYml0c0lsbGVnYWwgMCBwYWRkaW5nIG9uIHZhbHVlLjsgc2VydmVyX21heF93aW5kb3dfYml0cz1fY3JlYXRlQ2xpZW50UmVxdWVzdEhlYWRlcjsgY2xpZW50X21heF93aW5kb3dfYml0cz07IGNsaWVudF9tYXhfd2luZG93X2JpdHNfY3JlYXRlSGVhZGVycGVybWVzc2FnZS1kZWZsYXRlY2xpZW50X25vX2NvbnRleHRfdGFrZW92ZXI7IGNsaWVudF9ub19jb250ZXh0X3Rha2VvdmVyc2VydmVyX25vX2NvbnRleHRfdGFrZW92ZXI7IHNlcnZlcl9ub19jb250ZXh0X3Rha2VvdmVyaGVhZGVyTGlzdFdlYlNvY2tldFRyYW5zZm9ybWVycHJvdG9jb2xTZWxlY3RvcmNvbXByZXNzaW9uaXNVcGdyYWRlUmVxdWVzdFdlYlNvY2tldENPTk5FQ1RJTkdVc2UgY29ubmVjdGluZyBpbnN0ZWFkVXNlIG9wZW4gaW5zdGVhZFVzZSBjbG9zaW5nIGluc3RlYWRwaW5nSW50ZXJ2YWxUaGlzIGNvbnN0cnVjdG9yIHdpbGwgYmUgcmVtb3ZlZCBpbiBEYXJ0IDIuMC4gVXNlIGBpbXBsZW1lbnRzYCBpbnN0ZWFkIG9mIGBleHRlbmRzYCBpZiBpbXBsZW1lbnRpbmcgdGhpcyBhYnN0cmFjdCBjbGFzcy5mcm9tVXBncmFkZWRTb2NrZXRzZXJ2ZXJTaWRlVGhlIHNlcnZlclNpZGUgYXJndW1lbnQgbXVzdCBiZSBwYXNzZWQgZXhwbGljaXRseSB0byBXZWJTb2NrZXQuZnJvbVVwZ3JhZGVkU29ja2V0LnJlYWR5U3RhdGVjbG9zZUNvZGVjbG9zZVJlYXNvbldlYlNvY2tldEV4Y2VwdGlvbldlYlNvY2tldEV4Y2VwdGlvbjogX1dlYlNvY2tldE1lc3NhZ2VUeXBlX1dlYlNvY2tldE9wY29kZUNPTlRJTlVBVElPTlJFU0VSVkVEXzNSRVNFUlZFRF80UkVTRVJWRURfNVJFU0VSVkVEXzZSRVNFUlZFRF83Q0xPU0VQSU5HUE9OR1JFU0VSVkVEX0JSRVNFUlZFRF9DUkVTRVJWRURfRFJFU0VSVkVEX0VSRVNFUlZFRF9GX0VuY29kZWRTdHJpbmdfQ29tcHJlc3Npb25NYXhXaW5kb3dCaXRzX1dlYlNvY2tldFByb3RvY29sVHJhbnNmb3JtZXJMRU5fRklSU1RMRU5fUkVTVFBBWUxPQURGSU5SU1YxUlNWMlJTVjNPUENPREVfZmluX2NvbXByZXNzZWRfb3Bjb2RlX21hc2tlZF9yZW1haW5pbmdMZW5CeXRlc19yZW1haW5pbmdNYXNraW5nS2V5Qnl0ZXNfcmVtYWluaW5nUGF5bG9hZEJ5dGVzX3VubWFza2luZ0luZGV4X2N1cnJlbnRNZXNzYWdlVHlwZV9zZXJ2ZXJTaWRlX21hc2tpbmdCeXRlc19wYXlsb2FkX2RlZmxhdGVXZWJTb2NrZXQgdHJhbnNmb3JtZXIgYWxyZWFkeSB1c2VkLmxhc3RJbmRleFByb3RvY29sIGVycm9yX2lzQ29udHJvbEZyYW1lX2xlbmd0aERvbmVfbWFza0RvbmVwYXlsb2FkTGVuZ3RoX3VubWFza19jb250cm9sRnJhbWVFbmRfbWVzc2FnZUZyYW1lRW5kYmxvY2tDb3VudGJsb2NrTWFza2Jsb2NrQnVmZmVyUmVjZWl2ZWQgbWFza2VkIGZyYW1lIGZyb20gc2VydmVyUmVjZWl2ZWQgdW5tYXNrZWQgZnJhbWUgZnJvbSBjbGllbnRfc3RhcnRQYXlsb2FkX3ByZXBhcmVGb3JOZXh0RnJhbWVwcm9jZXNzSW5jb21pbmdNZXNzYWdlX1dlYlNvY2tldFBpbmdfV2ViU29ja2V0UG9uZ19XZWJTb2NrZXRUcmFuc2Zvcm1lckltcGxfcHJvdG9jb2xTZWxlY3Rvcl9jb21wcmVzc2lvbl91cGdyYWRlSW52YWxpZCBXZWJTb2NrZXQgdXBncmFkZSByZXF1ZXN0VXBncmFkZXdlYnNvY2tldFNlYy1XZWJTb2NrZXQtS2V5MjU4RUFGQTUtRTkxNC00N0RBLTk1Q0EtQzVBQjBEQzg1QjExU2VjLVdlYlNvY2tldC1BY2NlcHRTZWMtV2ViU29ja2V0LVByb3RvY29sZGVmbGF0ZVNlbGVjdGVkIHByb3RvY29sIGlzIG5vdCBpbiB0aGUgbGlzdCBvZiBhdmFpbGFibGUgcHJvdG9jb2xzX25lZ290aWF0ZUNvbXByZXNzaW9uZXh0ZW5zaW9uSGVhZGVyU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zaHZfaXNVcGdyYWRlUmVxdWVzdFNlYy1XZWJTb2NrZXQtVmVyc2lvbl9XZWJTb2NrZXRQZXJNZXNzYWdlRGVmbGF0ZV9lbnN1cmVEZWNvZGVyX2Vuc3VyZUVuY29kZXJwcm9jZXNzT3V0Z29pbmdNZXNzYWdlTGlzdCBlbGVtZW50IGlzIG5vdCBhIGJ5dGUgdmFsdWUgKHZhbHVlICBhdCBpbmRleCBfV2ViU29ja2V0T3V0Z29pbmdUcmFuc2Zvcm1lcl9kZWZsYXRlSGVscGVyV2ViU29ja2V0IHRyYW5zZm9ybWVyIGFscmVhZHkgdXNlZGFkZEZyYW1lX291dENsb3NlQ29kZV9vdXRDbG9zZVJlYXNvbmNyZWF0ZUZyYW1lZGF0YUxlbmd0aGhlYWRlclNpemVob2NsZW5ndGhCeXRlc21hc2tCeXRlc19XZWJTb2NrZXRDb25zdW1lcl9pc3N1ZWRQYXVzZV9lbnN1cmVDb250cm9sbGVyX2RvbmVjbG9zZVNvY2tldF9fV2ViU29ja2V0SW1wbCZTdHJlYW0mX1NlcnZpY2VPYmplY3RfV2ViU29ja2V0SW1wbF93ZWJTb2NrZXRzUEVSX01FU1NBR0VfREVGTEFURV9yZWFkeVN0YXRlX3dyaXRlQ2xvc2VkX2Nsb3NlQ29kZV9jbG9zZVJlYXNvbl9waW5nSW50ZXJ2YWxfcGluZ1RpbWVyX2Nsb3NlVGltZXJfZnJvbVNvY2tldHdzd3NzVW5zdXBwb3J0ZWQgVVJMIHNjaGVtZSAnbm9uY2VEYXRhQ2FjaGUtQ29udHJvbG5vLWNhY2hlQ29ubmVjdGlvbiB0byAnJyB3YXMgbm90IHVwZ3JhZGVkIHRvIHdlYnNvY2tldFJlc3BvbnNlIGRpZCBub3QgY29udGFpbiBhICdTZWMtV2ViU29ja2V0LUFjY2VwdCcgaGVhZGVyZXhwZWN0ZWRBY2NlcHRyZWNlaXZlZEFjY2VwdFJlc3BvbnNlIGhlYWRlciAnU2VjLVdlYlNvY2tldC1BY2NlcHQnIGlzIHRoZSB3cm9uZyBsZW5ndGhCYWQgcmVzcG9uc2UgJ1NlYy1XZWJTb2NrZXQtQWNjZXB0JyBoZWFkZXJuZWdvdGlhdGVDbGllbnRDb21wcmVzc2lvbmdldFdpbmRvd0JpdHNjbGllbnRfbWF4X3dpbmRvd19iaXRzUmVzZXJ2ZWQgc3RhdHVzIGNvZGUgaW8vd2Vic29ja2V0c19pc1Jlc2VydmVkU3RhdHVzQ29kZV9NQVNLXzhfTUFTS18zMl9CSVRTX1BFUl9CWVRFX0JZVEVTX1BFUl9XT1JEX09VVEdPSU5HX0JVRkZFUl9TSVpFX0RBUlRfU0VTU0lPTl9JRF9odHRwT3ZlcnJpZGVzVG9rZW5fd2ViU29ja2V0R1VJRF9jbGllbnROb0NvbnRleHRUYWtlb3Zlcl9zZXJ2ZXJOb0NvbnRleHRUYWtlb3Zlcl9jbGllbnRNYXhXaW5kb3dCaXRzX3NlcnZlck1heFdpbmRvd0JpdHNfZ2V0SHR0cFZlcnNpb25EYXJ0LyAoZGFydDppbylzZGtyb290Oi9wa2cvY29tcGlsZXIvYmluL2RhcnQyanMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2RhcnQyanMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0cGFja2FnZTpjb21waWxlci9jb21waWxlcl9uZXcuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2NvbW1hbmRsaW5lX29wdGlvbnMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2ZpbGVuYW1lcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvb3B0aW9ucy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvc291cmNlX2ZpbGVfcHJvdmlkZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3V0aWwvY29tbWFuZF9saW5lLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy91dGlsL3V0aWwuZGFydHBhY2thZ2U6a2VybmVsL2tlcm5lbC5kYXJ0cGFja2FnZTprZXJuZWwvYXN0LmRhcnRwYWNrYWdlOmtlcm5lbC90YXJnZXQvdGFyZ2V0cy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV9wcm90b3R5cGUvY29tcGlsZXJfb3B0aW9ucy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV9wcm90b3R5cGUvZGlhZ25vc3RpY19tZXNzYWdlLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9leHBlcmltZW50YWxfZmxhZ3MuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfcHJvdG90eXBlL2ZpbGVfc3lzdGVtLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9rZXJuZWxfZ2VuZXJhdG9yLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvYmFzZS9wcm9jZXNzZWRfb3B0aW9ucy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Jhc2UvbGlicmFyaWVzX3NwZWNpZmljYXRpb24uZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9jb21waWxlcl9jb250ZXh0LmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvZmFzdGFfY29kZXMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zZXZlcml0eS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2tlcm5lbF9nZW5lcmF0b3JfaW1wbC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NjYW5uZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvcmVkaXJlY3RpbmdfZmFjdG9yeV9ib2R5LmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Vuc3RhYmxlL2NvbXBpbGVyX3N0YXRlLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Vuc3RhYmxlL3V0aWwuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfcHJvdG90eXBlL3N0YW5kYXJkX2ZpbGVfc3lzdGVtLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvY29tcHV0ZV9wbGF0Zm9ybV9iaW5hcmllc19sb2NhdGlvbi5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL29wZXJhdG9yLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL2FzeW5jX21vZGlmaWVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2Nhbm5lci9jaGFyYWN0ZXJzLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdXRpbC9saW5rLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdXRpbC9saW5rX2ltcGxlbWVudGF0aW9uLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdXRpbC9yZWxhdGl2aXplLmRhcnRwYWNrYWdlOmNvbXBpbGVyL2NvbXBpbGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9hcGlpbXBsLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb2xvcnMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lvL3NvdXJjZV9maWxlLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy91dGlsL2VtcHR5c2V0LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy91dGlsL21hcGxldC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvdXRpbC9zZXRsZXQuZGFydHBhY2thZ2U6a2VybmVsL2JpbmFyeS9hc3RfdG9fYmluYXJ5LmRhcnRwYWNrYWdlOmtlcm5lbC9iaW5hcnkvYXN0X2Zyb21fYmluYXJ5LmRhcnRwYWNrYWdlOmtlcm5lbC90ZXh0L2FzdF90b190ZXh0LmRhcnRwYWNrYWdlOmtlcm5lbC92aXNpdG9yLmRhcnRwYWNrYWdlOmtlcm5lbC9jYW5vbmljYWxfbmFtZS5kYXJ0cGFja2FnZTprZXJuZWwvdHJhbnNmb3JtYXRpb25zL2ZsYWdzLmRhcnRwYWNrYWdlOmtlcm5lbC90eXBlX2FsZ2VicmEuZGFydHBhY2thZ2U6a2VybmVsL3R5cGVfZW52aXJvbm1lbnQuZGFydHBhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0cGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0cGFja2FnZTpwYWNrYWdlX2NvbmZpZy9wYWNrYWdlcy5kYXJ0cGFja2FnZTpwYWNrYWdlX2NvbmZpZy9wYWNrYWdlc19maWxlLmRhcnRwYWNrYWdlOnBhY2thZ2VfY29uZmlnL3NyYy9wYWNrYWdlc19pbXBsLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS90ZXJtaW5hbF9jb2xvcl9zdXBwb3J0LmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvY29tbWFuZF9saW5lX3JlcG9ydGluZy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL21lc3NhZ2VzLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcHJvYmxlbXMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS90aWNrZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS91cmlfdHJhbnNsYXRvci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3Jlc29sdmVfaW5wdXRfdXJpLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2Nhbm5lci90b2tlbi5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL3NjYW5uZXIvdG9rZW4uZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9jb2xvcnMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvdHlwZV9sYWJlbGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF9hcGkuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9jcmFzaC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2RpbGwvZGlsbF90YXJnZXQuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwva2VybmVsX3RhcmdldC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC91dGlscy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC92ZXJpZmllci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2xvYWRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV9wcm90b3R5cGUvZnJvbnRfZW5kLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2Nhbm5lci9hYnN0cmFjdF9zY2FubmVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2Nhbm5lci9zdHJpbmdfc2Nhbm5lci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NjYW5uZXIvdXRmOF9ieXRlc19zY2FubmVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2Nhbm5lci9yZWNvdmVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2Nhbm5lci9lcnJvcl90b2tlbi5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NjYW5uZXIvdG9rZW5fY29uc3RhbnRzLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2JvZHlfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2luY3JlbWVudGFsX2NvbXBpbGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9vbGRfdG9fbmV3X2FwaS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvY29tbW9uL3Rhc2tzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb21tb24uZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2NvbXBpbGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9kaWFnbm9zdGljcy9tZXNzYWdlcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvZW52aXJvbm1lbnQuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lvL2xvY2F0aW9uX3Byb3ZpZGVyLmRhcnRwYWNrYWdlOmtlcm5lbC9iaW5hcnkvdGFnLmRhcnRwYWNrYWdlOmtlcm5lbC9pbXBvcnRfdGFibGUuZGFydHBhY2thZ2U6a2VybmVsL3NyYy9oaWVyYXJjaHlfYmFzZWRfdHlwZV9lbnZpcm9ubWVudC5kYXJ0cGFja2FnZTprZXJuZWwvc3JjL2hlYXAuZGFydHBhY2thZ2U6a2VybmVsL2xpYnJhcnlfaW5kZXguZGFydHBhY2thZ2U6Y2hhcmNvZGUvYXNjaWkuZGFydHBhY2thZ2U6cGFja2FnZV9jb25maWcvc3JjL3V0aWwuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zY2FubmVyL3N0cmluZ19jYW5vbmljYWxpemVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvYmFzZS9zeW50YWN0aWNfZW50aXR5LmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvc2Nhbm5lci9zdHJpbmdfdXRpbGl0aWVzLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYmxhY2tsaXN0ZWRfY2xhc3Nlcy5kYXJ0cGFja2FnZTprZXJuZWwvY2xvbmUuZGFydHBhY2thZ2U6a2VybmVsL3NyYy9ib3VuZHNfY2hlY2tzLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdGFyZ2V0X2ltcGxlbWVudGF0aW9uLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvZGlsbC9kaWxsX2xpYnJhcnlfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2RpbGwvZGlsbF9sb2FkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9kaWxsL2RpbGxfbWVtYmVyX2J1aWxkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zY29wZS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NvdXJjZS9zb3VyY2VfY2xhc3NfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NvdXJjZS9zb3VyY2VfbGlicmFyeV9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc291cmNlL3NvdXJjZV9sb2FkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvY29uc3RhbnRfZXZhbHVhdG9yLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF9jb25zdGFudHMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvbWV0YWRhdGFfY29sbGVjdG9yLmRhcnRwYWNrYWdlOmtlcm5lbC9iaW5hcnkvbGltaXRlZF9hc3RfdG9fYmluYXJ5LmRhcnRwYWNrYWdlOmtlcm5lbC92ZXJpZmllci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3R5cGVfaW5mZXJlbmNlL3R5cGVfc2NoZW1hLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF9zaGFkb3dfYXN0LmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9kZWNsYXJhdGlvbl9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9tb2RpZmllcl9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9zdW1tYXJ5X2dlbmVyYXRvci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NjYW5uZXIva2V5d29yZF9zdGF0ZS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2NvbnN0YW50X2NvbnRleHQuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9tb2RpZmllci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL25hbWVzLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcXVvdGUuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zb3VyY2Uvc2NvcGVfbGlzdGVuZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zb3VyY2UvdmFsdWVfa2luZHMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS90eXBlX2luZmVyZW5jZS90eXBlX2luZmVycmVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdHlwZV9pbmZlcmVuY2UvdHlwZV9wcm9tb3Rpb24uZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvY29sbGVjdGlvbnMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvY29uc3RuZXNzLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2V4cHJlc3Npb25fZ2VuZXJhdG9yLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2V4cHJlc3Npb25fZ2VuZXJhdG9yX2hlbHBlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9mb3Jlc3QuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvaW1wbGljaXRfdHlwZV9hcmd1bWVudC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC90eXBlX2FsZ29yaXRobXMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwva2VybmVsX2FzdF9hcGkuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfcHJvdG90eXBlL2luY3JlbWVudGFsX2tlcm5lbF9nZW5lcmF0b3IuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfcHJvdG90eXBlL21lbW9yeV9maWxlX3N5c3RlbS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXJfZ3JhcGguZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9jb21iaW5hdG9yLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdXRpbC9lcnJvcl9yZXBvcnRlcl9maWxlX2NvcGllci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2h5YnJpZF9maWxlX3N5c3RlbS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2xpYnJhcnlfZ3JhcGguZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL251bGxfY29tcGlsZXJfb3V0cHV0LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9kaWFnbm9zdGljcy9kaWFnbm9zdGljX2xpc3RlbmVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9kaWFnbm9zdGljcy9pbnZhcmlhbnQuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2RpYWdub3N0aWNzL3NvdXJjZV9zcGFuLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9kaWFnbm9zdGljcy9zcGFubmFibGUuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2hlbHBlcnMvaGVscGVycy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvYmFja2VuZF9zdHJhdGVneS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvY29tbW9uL2NvZGVnZW4uZGFydHBhY2thZ2U6anNfYXN0L2pzX2FzdC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvY29tbW9uL25hbWVzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb21tb24vd29yay5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvY29tbW9uX2VsZW1lbnRzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9kZWZlcnJlZF9sb2FkLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9kaWFnbm9zdGljcy9jb2RlX2xvY2F0aW9uLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9kdW1wX2luZm8uZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2VsZW1lbnRzL2VudGl0aWVzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9lbnF1ZXVlLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9mcm9udGVuZF9zdHJhdGVneS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci90cml2aWFsLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci90eXBlbWFza3MvbWFza3MuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL3R5cGVzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvYmFja2VuZC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9pbmZlcnJlZF9kYXRhLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19tb2RlbC9qc19zdHJhdGVneS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMva2VybmVsL2tlcm5lbF9zdHJhdGVneS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMva2VybmVsL2xvYWRlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvc2VyaWFsaXphdGlvbi90YXNrLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zZXJpYWxpemF0aW9uL3N0cmF0ZWdpZXMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9ub2Rlcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2Uvc2VsZWN0b3IuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3VuaXZlcnNlL2NvZGVnZW5fd29ybGRfYnVpbGRlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2UvcmVzb2x1dGlvbl93b3JsZF9idWlsZGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy91bml2ZXJzZS93b3JsZF9pbXBhY3QuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3dvcmxkLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9kaWFnbm9zdGljcy9nZW5lcmF0ZWQvc2hhcmVkX21lc3NhZ2VzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb25zdGFudHMvZXhwcmVzc2lvbnMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lvL2NvZGVfb3V0cHV0LmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvc2Nhbm5lci9pbnRlcm5lci5kYXJ0cGFja2FnZTprZXJuZWwvdXRpbC9ncmFwaC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9jbGFzc19oaWVyYXJjaHlfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3R5cGVfaW5mZXJlbmNlL3N0YW5kYXJkX2JvdW5kcy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9pbXBsaWNpdF9maWVsZF90eXBlLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF92YXJpYWJsZV9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2xvYWRfbGlicmFyeV9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL3VubGlua2VkX3Njb3BlLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcmV3cml0ZV9zZXZlcml0eS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3RhcmdldC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvY2xhc3NfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvbWVtYmVyX2J1aWxkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL3R5cGVfYWxpYXNfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2RpbGwvZGlsbF9jbGFzc19idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvZGlsbC9kaWxsX3R5cGVfYWxpYXNfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC90eXBlX2J1aWxkZXJfY29tcHV0ZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2V4dGVuc2lvbl9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvYmFzZS9yZXNvbHZlX3JlbGF0aXZlX3VyaS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2NvbmZpZ3VyYXRpb24uZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9leHBvcnQuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9pbXBvcnQuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zb3VyY2Uvc291cmNlX2V4dGVuc2lvbl9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvYmFzZS9pbnN0cnVtZW50YXRpb24uZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvdHJhbnNmb3JtX2NvbGxlY3Rpb25zLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL3RyYW5zZm9ybV9zZXRfbGl0ZXJhbHMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvY2xhc3NfbWVtYmVyX3BhcnNlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NvdXJjZS9kaWV0X2xpc3RlbmVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc291cmNlL2RpZXRfcGFyc2VyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc291cmNlL291dGxpbmVfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvbGlicmFyeV9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdHlwZV9pbmZlcmVuY2UvaW5mZXJlbmNlX2hlbHBlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3R5cGVfaW5mZXJlbmNlL3R5cGVfaW5mZXJlbmNlX2VuZ2luZS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3R5cGVfaW5mZXJlbmNlL3R5cGVfc2NoZW1hX2VsaW1pbmF0aW9uLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdHlwZV9pbmZlcmVuY2UvdHlwZV9zY2hlbWFfZW52aXJvbm1lbnQuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9pZGVudGlmaWVycy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvYnVpbHRpbl90eXBlX2J1aWxkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2NvbnN0cnVjdG9yX3JlZmVyZW5jZV9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9kZWNsYXJhdGlvbi5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvZHluYW1pY190eXBlX2J1aWxkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2VudW1fYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvZmllbGRfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvZm9ybWFsX3BhcmFtZXRlcl9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9wcm9jZWR1cmVfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvZnVuY3Rpb25fdHlwZV9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9pbnZhbGlkX3R5cGVfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvbWV0YWRhdGFfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvbWl4aW5fYXBwbGljYXRpb25fYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvbmFtZV9pdGVyYXRvci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvbmFtZWRfdHlwZV9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9wcmVmaXhfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvdHlwZV9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci90eXBlX2RlY2xhcmF0aW9uX2J1aWxkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL3R5cGVfdmFyaWFibGVfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvdW5yZXNvbHZlZF90eXBlLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci92b2lkX3R5cGVfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9saXN0ZW5lci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9wYXJzZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvcGFyc2VyX2Vycm9yLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL2Fzc2VydC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9mb3JtYWxfcGFyYW1ldGVyX2tpbmQuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvaWRlbnRpZmllcl9jb250ZXh0LmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL2RlY2xhcmF0aW9uX2tpbmQuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvbWVtYmVyX2tpbmQuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvdG9wX2xldmVsX3BhcnNlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci91dGlsLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc291cmNlL3N0YWNrX2xpc3RlbmVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdHlwZV9pbmZlcmVuY2UvdHlwZV9jb25zdHJhaW50X2dhdGhlcmVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9oZWxwZXJzL3RyYWNlLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9oZWxwZXJzL2RlYnVnX2NvbGxlY3Rpb24uZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2hlbHBlcnMvZXhwZW5zaXZlX21hcC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaGVscGVycy9leHBlbnNpdmVfc2V0LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9oZWxwZXJzL3N0YXRzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9oZWxwZXJzL3RyYWNrX21hcC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9lbnF1ZXVlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9jb2RlX2VtaXR0ZXJfdGFzay5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2Evc3NhLmRhcnRwYWNrYWdlOmpzX2FzdC9zcmMvcHJlY2VkZW5jZS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvY29uc3RhbnRzL3ZhbHVlcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvZWxlbWVudHMvdHlwZXMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzL2pzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL25hbWVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9uYXRpdmUvYmVoYXZpb3IuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3VuaXZlcnNlL2ZlYXR1cmUuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3VuaXZlcnNlL3VzZS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvdXRpbC9lbnVtc2V0LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9lbGVtZW50cy9uYW1lcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2NvbnN0YW50cy9jb25zdGFudF9zeXN0ZW0uZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvbmF0aXZlX2RhdGEuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX21vZGVsL2xvY2Fscy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMva2VybmVsL2RhcnQyanNfdGFyZ2V0LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9rZXJuZWwva2VsZW1lbnRzLmRhcnRwYWNrYWdlOmRhcnQyanNfaW5mby9pbmZvLmRhcnRwYWNrYWdlOmRhcnQyanNfaW5mby9qc29uX2luZm9fY29kZWMuZGFydHBhY2thZ2U6ZGFydDJqc19pbmZvL2JpbmFyeV9zZXJpYWxpemF0aW9uLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2ZpZWxkX2FuYWx5c2lzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy91dGlsL3NpbmtfYWRhcHRlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9hbm5vdGF0aW9ucy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2UvbWVtYmVyX3VzYWdlLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy91bml2ZXJzZS93b3JsZF9idWlsZGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL25vX3N1Y2hfbWV0aG9kX3JlZ2lzdHJ5LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9zdGF0aWNfdHlwZS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2UvY2xhc3NfaGllcmFyY2h5LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci90eXBlX2dyYXBoX2luZmVycmVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci90eXBlbWFza3MvY29uc3RhbnRzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19tb2RlbC9lbGVtZW50X21hcC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvaW5mZXJyZXJfZW5naW5lLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pby9wb3NpdGlvbl9pbmZvcm1hdGlvbi5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfbW9kZWwvZWxlbWVudHMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3VuaXZlcnNlL2NsYXNzX3NldC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvdHJhY2VyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2NoZWNrZWRfbW9kZV9oZWxwZXJzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19jb2RlZ2VuLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfbmV3LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy91bml2ZXJzZS9zaWRlX2VmZmVjdHMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lvL2tlcm5lbF9zb3VyY2VfaW5mb3JtYXRpb24uZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzL2pzX3NvdXJjZV9tYXBwaW5nLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2JhY2tlbmRfaW1wYWN0LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2NvZGVnZW5fbGlzdGVuZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvY3VzdG9tX2VsZW1lbnRzX2FuYWx5c2lzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2ltcGFjdF90cmFuc2Zvcm1lci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9pbnRlcmNlcHRvcl9kYXRhLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL2pzX2VtaXR0ZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL25hdGl2ZS9lbnF1ZXVlLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvYnVpbGRlcl9rZXJuZWwuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS90eXBlcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfbW9kZWwvY2xvc3VyZS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfbW9kZWwvZW52LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19tb2RlbC9lbGVtZW50X21hcF9pbXBsLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19tb2RlbC9qc193b3JsZC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfbW9kZWwvanNfd29ybGRfYnVpbGRlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvY29tbW9uL2JhY2tlbmRfYXBpLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb21tb24vcmVzb2x1dGlvbi5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaXIvYW5ub3RhdGlvbnMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL2Nsb3N1cmUuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL2ltcGFjdC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaXIvaW1wYWN0X2RhdGEuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL21vZHVsYXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL3Njb3BlLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2JhY2tlbmRfdXNhZ2UuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvcmVzb2x1dGlvbl9saXN0ZW5lci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9ydW50aW1lX3R5cGVzX3Jlc29sdXRpb24uZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL25hdGl2ZS9yZXNvbHZlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMva2VybmVsL2RlZmVycmVkX2xvYWQuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2tlcm5lbC9lbGVtZW50X21hcC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMva2VybmVsL2VsZW1lbnRfbWFwX2ltcGwuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2tlcm5lbC9mcm9udF9lbmRfYWRhcHRlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvY2xvc3VyZS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvZWxlbWVudHMvanVtcHMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX21vZGVsL3R5cGVfcmVjaXBlLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvaW52b2tlX2R5bmFtaWNfc3BlY2lhbGl6ZXJzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvdmFsaWRhdGUuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2VsZW1lbnRzL2VudGl0eV91dGlscy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvZWxlbWVudHMvb3BlcmF0b3JzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9rZXJuZWwvaW52b2NhdGlvbl9taXJyb3JfY29uc3RhbnRzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9rZXJuZWwva2VybmVsX3dvcmxkLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL3NvcnRlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvY29uc3RhbnRzL2NvbnN0cnVjdG9ycy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvY29uc3RhbnRzL2V2YWx1YXRpb24uZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvZm9yd2FyZGluZ19ub2RlLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL3R5cGVzLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL2Vycm9yX2RlbGVnYXRpb25fbGlzdGVuZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9pZ25vcmVkX3BhcnNlcl9lcnJvcnMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvZGlyZWN0aXZlX2NvbnRleHQuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvZm9yd2FyZGluZ19saXN0ZW5lci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9saXRlcmFsX2VudHJ5X2luZm8uZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvbG9vcF9zdGF0ZS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9tb2RpZmllcl9jb250ZXh0LmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL3JlY292ZXJ5X2xpc3RlbmVycy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci90b2tlbl9zdHJlYW1fcmV3cml0ZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvdHlwZV9pbmZvLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL2lkZW50aWZpZXJfY29udGV4dF9pbXBsLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL3Byb2dyYW1fYnVpbGRlci9wcm9ncmFtX2J1aWxkZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvc3RhcnR1cF9lbWl0dGVyL2VtaXR0ZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvbWV0YWRhdGFfY29sbGVjdG9yLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL21vZGVsLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL25hdGl2ZV9lbWl0dGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL3R5cGVfdGVzdF9yZWdpc3RyeS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvZWxlbWVudHMvaW5kZXhlZC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaXIvY29uc3RhbnRzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9zdGF0aWNfdHlwZV9iYXNlLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qcy9yZXdyaXRlX2FzeW5jLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvY29kZWdlbi5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvc3NhL29wdGltaXplLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qcy9qc19kZWJ1Zy5kYXJ0cGFja2FnZTpqc19ydW50aW1lL3NoYXJlZC9lbWJlZGRlZF9uYW1lcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvbmF0aXZlL2pzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9ydW50aW1lX3R5cGVfYW5hbHlzaXMuZGFydHBhY2thZ2U6Y29sbGVjdGlvbi9jb2xsZWN0aW9uLmRhcnRwYWNrYWdlOmRhcnQyanNfaW5mby9zcmMvdXRpbC5kYXJ0cGFja2FnZTpkYXJ0MmpzX2luZm8vc3JjL2JpbmFyeS9zaW5rLmRhcnRwYWNrYWdlOmRhcnQyanNfaW5mby9zcmMvYmluYXJ5L3NvdXJjZS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaXIvc2NvcGVfdmlzaXRvci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaXIvdXRpbC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaXIvc3RhdGljX3R5cGVfY2FjaGUuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL3R5cGVfZ3JhcGhfbm9kZXMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL3N0YXRpY190eXBlX3Byb3ZpZGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvdHlwZV9idWlsZGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci9idWlsZGVyX2tlcm5lbC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvY2xvc3VyZV90cmFjZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL2RlYnVnLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci9sb2NhbHNfaGFuZGxlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvbGlzdF90cmFjZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL21hcF90cmFjZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL3NldF90cmFjZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL3R5cGVfZ3JhcGhfZHVtcC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvdHlwZV9zeXN0ZW0uZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9zc2FfdHJhY2VyLmRhcnRwYWNrYWdlOmpzX3J1bnRpbWUvc2hhcmVkL3JlY2lwZV9zeW50YXguZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvY2xhc3Nfc3R1Yl9nZW5lcmF0b3IuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvaW5zdGFudGlhdGlvbl9zdHViX2dlbmVyYXRvci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9pbnRlcmNlcHRvcl9zdHViX2dlbmVyYXRvci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9tYWluX2NhbGxfc3R1Yl9nZW5lcmF0b3IuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvbmF0aXZlX2dlbmVyYXRvci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9wYXJhbWV0ZXJfc3R1Yl9nZW5lcmF0b3IuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvcnVudGltZV90eXBlX2dlbmVyYXRvci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2UvdGFyZ2V0X2NoZWNrcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvc3NhL2p1bXBfaGFuZGxlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvc3NhL2tlcm5lbF9zdHJpbmdfYnVpbGRlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvc3NhL2xvY2Fsc19oYW5kbGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvbG9vcF9oYW5kbGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2Evc3NhX2JyYW5jaF9idWlsZGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2Evc3dpdGNoX2NvbnRpbnVlX2FuYWx5c2lzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9lbGVtZW50X21hcC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvb3JkZXJlZF90eXBlc2V0LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb21waWxlX3RpbWVfY29uc3RhbnRzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9jYWNoZWRfc3RhdGljX3R5cGUuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL2RlYnVnLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci90eXBlcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaXIvdmlzaXRvcnMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2tlcm5lbC9lbnYuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3VuaXZlcnNlL2Z1bmN0aW9uX3NldC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV9wcm90b3R5cGUvY29uc3RhbnRfZXZhbHVhdG9yLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9rZXJuZWwva2VybmVsX2ltcGFjdC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvc3NhL2xvZ2dpbmcuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvbGl0ZXJhbF9lbnRyeV9pbmZvX2ltcGwuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvdHlwZV9pbmZvX2ltcGwuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvY29uc3RhbnRfZW1pdHRlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9zdGFydHVwX2VtaXR0ZXIvbW9kZWxfZW1pdHRlci5kYXJ0cGFja2FnZTpqc19ydW50aW1lL3NoYXJlZC9hc3luY19hd2FpdF9lcnJvcl9jb2Rlcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvc3NhL2NvZGVnZW5faGVscGVycy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvc3NhL3ZhcmlhYmxlX2FsbG9jYXRvci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9zcGVjaWFsaXplZF9jaGVja3MuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9pbnRlcmNlcHRvcl9zaW1wbGlmaWVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvdHlwZXNfcHJvcGFnYXRpb24uZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS92YWx1ZV9yYW5nZV9hbmFseXplci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvc3NhL3ZhbHVlX3NldC5kYXJ0cGFja2FnZTpqc19hc3Qvc3JjL2NoYXJhY3RlcnMuZGFydHBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvYWxnb3JpdGhtcy5kYXJ0cGFja2FnZTpjb2xsZWN0aW9uL3NyYy9jYW5vbmljYWxpemVkX21hcC5kYXJ0cGFja2FnZTpjb2xsZWN0aW9uL3NyYy9jb21iaW5lZF93cmFwcGVycy9jb21iaW5lZF9pdGVyYWJsZS5kYXJ0cGFja2FnZTpjb2xsZWN0aW9uL3NyYy9jb21iaW5lZF93cmFwcGVycy9jb21iaW5lZF9saXN0LmRhcnRwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL2NvbWJpbmVkX3dyYXBwZXJzL2NvbWJpbmVkX21hcC5kYXJ0cGFja2FnZTpjb2xsZWN0aW9uL3NyYy9jb21wYXJhdG9ycy5kYXJ0cGFja2FnZTpjb2xsZWN0aW9uL3NyYy9lcXVhbGl0eS5kYXJ0cGFja2FnZTpjb2xsZWN0aW9uL3NyYy9lcXVhbGl0eV9tYXAuZGFydHBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvZXF1YWxpdHlfc2V0LmRhcnRwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL2Z1bmN0aW9ucy5kYXJ0cGFja2FnZTpjb2xsZWN0aW9uL3NyYy9pdGVyYWJsZV96aXAuZGFydHBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvcHJpb3JpdHlfcXVldWUuZGFydHBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvcXVldWVfbGlzdC5kYXJ0cGFja2FnZTpjb2xsZWN0aW9uL3NyYy91bmlvbl9zZXQuZGFydHBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvdW5tb2RpZmlhYmxlX3dyYXBwZXJzLmRhcnRwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL3VuaW9uX3NldF9jb250cm9sbGVyLmRhcnRwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL3dyYXBwZXJzLmRhcnRwYWNrYWdlOmRhcnQyanNfaW5mby9zcmMvZ3JhcGguZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL25vZGVfdHJhY2VyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2pzX2ludGVyb3BfYW5hbHlzaXMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3Jlc29sdXRpb24vcmVnaXN0cnkuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy90ZXN0aW5nL2ZlYXR1cmVzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9oYXNoL3NoYTEuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lvL3NvdXJjZV9tYXBfYnVpbGRlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9qc19iYWNrZW5kLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL2NvbnN0YW50X29yZGVyaW5nLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL2hlYWRlcnMuZGFydHBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvdXRpbHMuZGFydHBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvZW1wdHlfdW5tb2RpZmlhYmxlX3NldC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL3Rlc3RpbmcvaWRfdGVzdGluZy5kYXJ0cGFja2FnZTpjcnlwdG8vY3J5cHRvLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvdGVzdGluZy9hbm5vdGF0ZWRfY29kZV9oZWxwZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy90ZXN0aW5nL2lkLmRhcnRwYWNrYWdlOmNyeXB0by9zcmMvZGlnZXN0LmRhcnRwYWNrYWdlOmNyeXB0by9zcmMvaGFzaC5kYXJ0cGFja2FnZTpjcnlwdG8vc3JjL2htYWMuZGFydHBhY2thZ2U6Y3J5cHRvL3NyYy9tZDUuZGFydHBhY2thZ2U6Y3J5cHRvL3NyYy9zaGExLmRhcnRwYWNrYWdlOmNyeXB0by9zcmMvc2hhMjU2LmRhcnRwYWNrYWdlOmNvbnZlcnQvY29udmVydC5kYXJ0cGFja2FnZTpjcnlwdG8vc3JjL2RpZ2VzdF9zaW5rLmRhcnRwYWNrYWdlOmNyeXB0by9zcmMvaGFzaF9zaW5rLmRhcnRwYWNrYWdlOmNyeXB0by9zcmMvdXRpbHMuZGFydHBhY2thZ2U6Y29udmVydC9zcmMvYWNjdW11bGF0b3Jfc2luay5kYXJ0cGFja2FnZTpjb252ZXJ0L3NyYy9ieXRlX2FjY3VtdWxhdG9yX3NpbmsuZGFydHBhY2thZ2U6Y29udmVydC9zcmMvaGV4LmRhcnRwYWNrYWdlOmNvbnZlcnQvc3JjL3BlcmNlbnQuZGFydHBhY2thZ2U6Y29udmVydC9zcmMvc3RyaW5nX2FjY3VtdWxhdG9yX3NpbmsuZGFydHBhY2thZ2U6dHlwZWRfZGF0YS90eXBlZF9kYXRhLmRhcnRwYWNrYWdlOmNvbnZlcnQvc3JjL2hleC9lbmNvZGVyLmRhcnRwYWNrYWdlOmNvbnZlcnQvc3JjL2hleC9kZWNvZGVyLmRhcnRwYWNrYWdlOmNvbnZlcnQvc3JjL3BlcmNlbnQvZW5jb2Rlci5kYXJ0cGFja2FnZTpjb252ZXJ0L3NyYy9wZXJjZW50L2RlY29kZXIuZGFydHBhY2thZ2U6dHlwZWRfZGF0YS90eXBlZF9idWZmZXJzLmRhcnRwYWNrYWdlOmNvbnZlcnQvc3JjL3V0aWxzLmRhcnRkYXJ0OmNvbnZlcnRkYXJ0OmRldmVsb3BlcmRhcnQ6ZmZpZGFydDppc29sYXRlZGFydDptYXRoZGFydDpwcm9maWxlcmRhcnQ6dm1zZXJ2aWNlX2lvZGFydDpfdm1zZXJ2aWNlZGFydDpfYnVpbHRpbmRhcnQ6bmF0aXZld3JhcHBlcnNkYXJ0OmNsaWRhcnQ6d2FzbWRhcnQ6X2h0dHB2bS5jYWxsLXNpdGUtYXR0cmlidXRlcy5tZXRhZGF0YahhAQAIwAD8EQAAApMEKgg3AAI5CTsLApQEKwg3AAI5FTsXApUELAg3AAI5ITsjB2ADNwMNGSUEMQhEAAJGCUg1BDIIRAACRhVIPwQzCEQAAkYhSEkClgQ0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VgSJVwSJWAI3NAiRxQAHkceOZZHIjmiRsY5rkbKObpGzeZG0eZG1gaMEiVsKkKwIkdEBYQMBYAPAAQACYAORugOR046QkdR5kdWOkwSJXQiRrwFhAwFgA8ABAAJgA5G6BZGxjrORsoGekbOOlpG0ix6RtYGjBIlfBIlgCpCtCJHRAWEDAWADnyJgA5G6A5HTjtyR1I7fkdWO4gSJYgSJYwdgA8ABAAIBjwQIka8BYQMBYAOfImADkboFkbGPAZGygZ6Rs47lkbSPB5G1gaMEiWUKkK4IkdEBYQMBYAOfImADkboDkdOPNZHUeZHVjzgEiWcEiWgHYAPAAQACAY9ZCJGvAWEDAWADnyJgA5G6BZGxj1aRsoGekbOPO5G0j1yRtYGjBIlqBIlrCJHFAAeRx4+Kkch5kbGPjZGygZ6Rs3mRtHmRtYGjBIluBIlvCJHFAAeRx4+ukch5kbGPsZGygZ6Rs3mRtHmRtYajBIlyCpCvCJHRAWEDAWADwAEAAmADkboDkdOP0pHUeZHVj9UEiXQIka8BYQMBYAPAAQACYAORugWRsY/1kbKBnpGzj9iRtHmRtYajBIl2BIl3BIl4B2ADwAEAAgGQIwiRxQAHkceQHZHIeZGxkCCRsoGekbN5kbSQJpG1gaMEiXsEiXwEiX0HYAPAAQACAZBVCJHFAAeRx5BPkch5kbGQUpGygZ6Rs3mRtJBYkbWBowSJgAiRrwFhAwFgA8ABAAJgA5G6BZGxkIGRsoGekbOHqJG0eZG1gaMEiYIEiYMIkcUAB5HHkKmRyHmRsZCskbKBnpGzeZG0eZG1gaMEiYYEiYcEiYgIkcUAB5HHkM2RyJDQkbGQ05GygZ6Rs3mRtHmRtYGjBImNBImOCpCxCJHRAWEDAWADwAEAAmADkboDkdOQ9ZHUkPiR1ZD7BImQBImRB2ADwAEAAgGRHwiRrwFhAwFgA8ABAAJgA5G6BZGxkRyRsoGekbOQ/pG0kSKRtYGjBImTBImUCpCyCJHRAWEDAWADwAEAAmADkboDkdORUpHUkVWR1ZFYBImWBImXB2ADwAEAAgGRfAiRrwFhAwFgA8ABAAJgA5G6BZGxkXmRsoGekbORW5G0kX+RtYGjBImZCpCzCJHRAWEDAWADwAEAAmADkboDkdORr5HUkPiR1ZGyBImbCJGvAWEDAWADwAEAAmADkboFkbGR05GygZ6Rs5G1kbSRIpG1gaMEiZ0EiZ4HYAPAAQACAZH/CJGvAWEDAmADwAEAg2ADwAEAAmADkboFkbGR/JGygZ6Rs4gdkbSSApG1gaMEiaAKkLUIkdEBYQMBYAOfImADkboDkdOSOJHUeZHVkjsEiaIEiaMHYAPAAQACAZJcCJGvAWEDAWADnyJgA5G6BZGxklmRsoGekbOSPpG0kl+RtYGjBImlBImmCpC2CJHRAWEDAWADnyJgA5G6A5HTko2R1JKQkdWSkwSJqASJqQdgA8ABAAIBkrUIka8BYQMBYAOfImADkboFkbGSspGygZ6Rs5KWkbSSuJG1gaMEiasEiawEia0HYAPAAQACAZLsCJHFAAeRx5Lmkch5kbGS6ZGygZ6Rs3mRtJLvkbWBowSJsASJsQSJsgiRxQAHkceTGJHIkxuRsZMekbKBnpGzeZG0ku+RtYGjBIm1BIm2BIm3AjdUCJHFAAeRx5NBkciTRJGxk0eRspNKkbN5kbR5kbWBowSJugI3UwiRxQAHkceTQZHIk0SRsZNskbKTb5GzeZG0eZG1gaMEib0Eib4Eib8CNzUIkcUAB5HHk5GRyJOUkbGTl5Gyk5qRs3mRtHmRtYGjBInCBInDBInEAjc2CJHFAAeRx5O8kciTv5Gxk8KRspPFkbN5kbR5kbWBowSJxwSJyAqQtwiR0QFhAwJgA8ABAAJgA8ABAAJgA5G6A5HTk+eR1JPqkdWT7QSJygSJywdgA8ABAAIBlBcIka8BYQMCYAPAAQACYAPAAQACYAORugWRsZQUkbKBnpGzk/CRtJQakbWBowSJzQSJzgqQuAiR0QFhAwJgA8ABAAJgA8ABAAJgA5G6A5HTlFCR1JRTkdWUVgSJ0AI3OwiRrwFhAwJgA8ABAAJgA8ABAAJgA5G6BZGxlH2RspSAkbOUWZG0eZG1gaMEidIKkLkIkdEBYQMBYAPAAQACYAORugOR05SukdR5kdWUsQSJ1ASJ1QdgA8ABAAIBlNQIka8BYQMBYAPAAQACYAORugWRsZTRkbKBnpGzlLSRtJTXkbWBowSJ1wqQugiR0QFhAwFgA8ABAAJgA5G6A5HTlQeR1HmR1ZUKBInZCJGvAWEDAWADwAEAAmADkboFkbGVKpGygZ6Rs5UNkbR5kbWBowSJ2wqQuwiR0QFhAwFgA8ABAAJgA5G6A5HTlVKR1HmR1ZVVBIndBIneB2ADwAEAAgGVeAiRrwFhAwFgA8ABAAJgA5G6BZGxlXWRsoGekbOVWJG0lXuRtYGjCpC8CJHRAWEDAWADwAEAAmADkboDkdOVUpHUeZHVlasEieEIka8BYQMBYAPAAQACYAORugWRsZXLkbKBnpGzla6RtJV7kbWJFQSJ4wqQvQiR0QFhAwFgA8ABAAJgA5G6A5HTlfSR1HmR1ZX3BInlCJGvAWEDAWADwAEAAmADkboFkbGWF5GygZ6Rs5X6kbSVe5G1gaMKkL4IkdEBYQMBYAPAAQACYAORugOR05X0kdR5kdWWQASJ6AiRrwFhAwFgA8ABAAJgA5G6BZGxlmCRsoGekbOWQ5G0lXuRtYkVBInqCpC/CJHRAWEDAWADwAEAAmADkboDkdOWiZHUeZHVlowEiewEie0HYAPAAQACAZavCJGvAWEDAWADwAEAAmADkboFkbGWrJGygZ6Rs5aPkbSWspG1gaMEie8EifAIkcUAB5HHluKRyHmRsZblkbKBnpGzeZG0eZG1hqMEifMEifQEifUCNzoIkcUAB5HHlwaRyJcJkbGXDJGylw+Rs3mRtHmRtYGjBIn4BIn5BIn6Ajc8CJHFAAeRx5cxkciXNJGxlzeRspc6kbN5kbR5kbWBowSJ/QSJ/gSJ/wdgA8ABAAIBl2IIkcUAB5HHl1yRyHmRsZdfkbKBnpGzeZG0l2WRtYGjBIoCBIoDCJHFAAeRx5eOkch5kbGXkZGygZ6Rs3mRtHmRtYajBIoGBIoHCJHFAAeRx5eykch5kbGXtZGygZ6Rs3mRtHmRtYGjBIoKBIoLBIoMBIoNB2ADwAEAAgGX3wiRxQAHkceX1pHIl9mRsZfckbKBnpGzeZG0l+KRtYGjBIoQBIoRBIoSB2ADwAEAAgGYEgiRxQAHkceYDJHIeZGxmA+RsoGekbN5kbSYFZG1gaMEihUEihYIkcUAB5HHmD6RyHmRsZhBkbKBnpGzeZG0kX+RtYGjBIoZBIoaCJHFAAeRx5hjkch5kbGYZpGygZ6Rs3mRtHmRtYGjBIodCpDACJHRAWEDAWADwAEAAmADkboDkdOYh5HUkpCR1ZiKBIofBIogB2ADwAEAAgGYrgiRrwFhAwFgA8ABAAJgA5G6BZGxmKuRsoGekbOYjZG0mLGRtYGjBIoiCpDBCJHRAWEDAWADibpgA5G6A5HTmOGR1HmR1ZjkBIokBIolB2ADwAEAAgGZBQiRrwFhAwFgA4m6YAORugWRsZkCkbKBnpGzmOeRtJkIkbWBowSKJwqQwgiR0QFhAwFgA4m6YAORugOR05k2kdR5kdWZOQSKKQSKKgdgA8ABAAIBmVoIka8BYQMBYAOJumADkboFkbGZV5GygZ6Rs5k8kbSZXZG1gaMEiiwKkMMIkdEBYQMBYAOJumADkboDkdOZi5HUeZHVmY4Eii4Eii8HYAPAAQACAZmvCJGvAWEDAWADibpgA5G6BZGxmayRsoGekbOZkZG0mbKRtYGjBIoxBIoyBIozB2ADwAEAAgGZ5giRxQAHkceZ4JHIeZGxmeORsoGekbN5kbSZ6ZG1gaMEijYKkMQIkdEBYQMBYAPAAQACYAORugOR05oSkdR5kdWaFQSKOAiRrwFhAwFgA8ABAAJgA5G6BZGxmjWRsoGekbOaGJG0memRtYGjBIo6CpDFCJHRAWEDAWADiPxgA5G6A5HTml6R1HmR1ZphBIo8CJGvAWEDAWADiPxgA5G6BZGxmn+RsoGekbOaZJG0eZG1gaMEij4KkMYIkdEBYQMEYAPAAQACYAOJumADiPxgA4j8YAORugOR05qlkdR5kdWaqASKQAiRrwFhAwRgA8ABAAJgA4m6YAOI/GADiPxgA5G6BZGxmtSRsoGekbOaq5G0eZG1gaMEikIKkMcIkdEBYQMCYAOJumADiPxgA5G6A5HTmwiR1HmR1ZsLBIpECJGvAWEDAmADibpgA4j8YAORugWRsZstkbKBnpGzmw6RtHmRtYGjBIpGCpDICJHRAWEDAmADwAEAAmADibpgA5G6A5HTm1eR1HmR1ZtaBIpIBIpJB2ADwAEAAgGbgQiRrwFhAwJgA8ABAAJgA4m6YAORugWRsZt+kbKBnpGzm12RtJuEkbWBowSKSwqQyQiR0QFhAwJgA8ABAAJgA4m6YAORugOR05u4kdR5kdWbuwSKTQiRrwFhAwJgA8ABAAJgA4m6YAORugWRsZvfkbKBnpGzm76RtJnpkbWBowSKTwqQygiR0QFhAwFgA8ABAAJgA5G6A5HTnAyR1HmR1ZwPBIpRBIpSB2ADwAEAAgGcMgiRrwFhAwFgA8ABAAJgA5G6BZGxnC+RsoGekbOcEpG0nDWRtYGjBIpUCpDLCJHRAWEDAWADibpgA5G6A5HTnGWR1HmR1ZxoBIpWBIpXB2ADwAEAAgGciQiRrwFhAwFgA4m6YAORugWRsZyGkbKBnpGznGuRtJyMkbWBowSKWQqQzAiR0QFhAwFgA4m6YAORugOR05y6kdR5kdWcvQSKWwiRrwFhAwFgA4m6YAORugWRsZzbkbKBnpGznMCRtJnpkbWBowSKXQqQzQiR0QFhAwNgA4m6YAOI/GADiPxgA5G6A5HTnQKR1HmR1Z0FBIpfCJGvAWEDA2ADibpgA4j8YAOI/GADkboFkbGdK5GygZ6Rs50IkbR5kbWBowSKYQqQzgiR0QFhAwFgA4m6YAORugOR051ZkdR5kdWdXASKYwSKZAdgA8ABAAIBnX0Ika8BYQMBYAOJumADkboFkbGdepGygZ6Rs51fkbSdgJG1gaMEimYKkM8IkdEBYQMDYAPAAQACYAPAAQACYAPAAQACYAORugOR052ukdR5kdWdsQSKaAiRrwFhAwNgA8ABAAJgA8ABAAJgA8ABAAJgA5G6BZGxnd2RsoGekbOdtJG0eZG1gaMEimoKkNAIkdEBYQMBYAPAAQACYAORugOR054RkdR5kdWeFASKbASKbQdgA8ABAAIBnjcIka8BYQMBYAPAAQACYAORugWRsZ40kbKBnpGznheRtJ46kbWBowSKbwqQ0QiR0QFhAwFgA8ABAAJgA5G6A5HTnmqR1HmR1Z5tBIpxBIpyB2ADwAEAAgGekAiRrwFhAwFgA8ABAAJgA5G6BZGxno2RsoGekbOecJG0npORtYGjBIp0BIp1BIp2B2ADwAEAAgGeyQiRxQAHkceew5HIeZGxnsaRsoGekbN5kbSezJG1gaMEinkEinoEinsHYAPAAQACAZ77CJHFAAeRx571kch5kbGe+JGygZ6Rs3mRtJ7+kbWBowSKfgSKfwiRxQAHkcefJ5HIeZGxnyqRsoGekbN5kbSZ6ZG1gaMEioIEioMIkcUAB5HHn0yRyHmRsZ9PkbKBnpGzeZG0eZG1gaMEioYEiocIkcUAB5HHn3CRyHmRsZ9zkbKBnpGzeZG0eZG1gaMEiooKkNIIkdEBYQMCYAPAAQACYAPAAQACYAORugOR05+UkdR5kdWflwSKjASKjQdgA8ABAAIBn8AIka8BYQMCYAPAAQACYAPAAQACYAORugWRsZ+9kbKBnpGzn5qRtJ/DkbWBowSK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YAORugWRsa3ukbKBnpGzrdGRtK30kbWBowSLhgqQ8QiR0QFhAwFgA8ABAAJgA5G6A5HTriSR1HmR1a4nBIuICJGvAWEDAWADwAEAAmADkboFkbGuR5GygZ6Rs64qkbR5kbWGowSLigqQ8giR0QFhAwFgA8ABAAJgA5G6A5HTrm+R1HmR1a5yBIuMBIuNB2ADwAEAAgGulQiRrwFhAwFgA8ABAAJgA5G6BZGxrpKRsoGekbOudZG0rpiRtYGjBIuPCpDzCJHRAWEDAWADwAEAAmADkboDkdOuyJHUeZHVrssEi5EIka8BYQMBYAPAAQACYAORugWRsa7rkbKBnpGzrs6RtKmCkbWBowSLkwqQ9AiR0QFhAwFgA8ABAAJgA5G6A5HTrxSR1HmR1a8XBIuVCJGvAWEDAWADwAEAAmADkboFkbGvN5GygZ6Rs68akbR5kbWGowSLlwSLmASLmQSLmgdgA8ABAAIBr2gIkcUAB5HHr1+RyK9ikbGvZZGygZ6Rs3mRtK9rkbWBowSLnQSLngSLnwiRxQAHkcevlZHIr5iRsa+bkbKBnpGzeZG0r2uRtYGjBIuiBIujCJHFAAeRx6++kch5kbGvwZGygZ6Rs3mRtHmRtYGjBIumCpD1CJHRAWEDAWADwAEAAmADkboDkdOv4pHUeZHVr+UEi6gEi6kHYAPAAQACAbAICJGvAWEDAWADwAEAAmADkboFkbGwBZGygZ6Rs6/okbSwC5G1gaMEi6sEi6wEi60HYAPAAQACAbBBCJHFAAeRx7A7kch5kbGwPpGygZ6Rs3mRtLBEkbWBowSLsASLsQSLsgI3SgiRxQAHkcewbZHIsHCRsbBzkbKwdpGzeZG0eZG1gaMEi7UEi7YEi7cHYAPAAQACAbCeCJHFAAeRx7CYkch5kbGwm5GygZ6Rs3mRtLChkbWBowSLugSLuwSLvAiRxQAHkcewypHIsM2RsbDQkbIVkbN5kbR5kbWBowSLvwqQ9giR0QFhAwFgA8ABAAJgA5G6A5HTsPGR1HmR1bD0BIvBBIvCB2ADwAEAAgGxFwiRrwFhAwFgA8ABAAJgA5G6BZGxsRSRsoGekbOw95G0sRqRtYGjBIvEBIvFAjckCJHFAAeRx7FKkch5kbGxTZGysVCRs3mRtHmRtYGjBIvIBIvJBIvKCJHFAAeRx7FxkcixdJGxsXeRsoGekbN5kbSxGpG1gaMEi80Ei84Ei88HYAPAAQACAbGgCJHFAAeRx7GakcixdJGxsZ2RsoGekbN5kbSxo5G1gaMEi9IIkcUAB5HHsZqRyLF0kbGxzZGygZ6Rs3mRtLGjkbWBowSL1QqQ9wiR0QFhAwFgA8ABAAJgA5G6A5HTsfCR1HmR1bHzBIvXCJGvAWEDAWADwAEAAmADkboFkbGyE5GygZ6Rs7H2kbSxGpG1gaMEi9kKkPgIkdEBYQMBYAOfImADkboDkdOyPJHUeZHVsj8Ei9sEi9wHYAPAAQACAbJgCJGvAWEDAWADnyJgA5G6BZGxsl2RsoGekbOyQpG0smORtYGjBIveBIvfCpD5CJHRAWEDAWADwAEAAmADkboDkdOykZHUspSR1bKXBIvhCJGvAWEDAWADwAEAAmADkboFkbGyuJGyg12Rs7KakbR5kbWBowSL4wqQ+giR0QFhAwFgA58iYAORugOR07LgkdR5kdWy4wSL5QSL5gdgA8ABAAIBswQIka8BYQMBYAOfImADkboFkbGzAZGygZ6Rs7LmkbSzB5G1gaMEi+gEi+kCNy4IkcUAB5HHszWRyHmRsbM4kbKzO5GzeZG0eZG1gaMEi+wEi+0KkPsIkdEBYQMBYAOfImADkboDkdOzXJHUs1+R1bNiBIvvBIvwB2ADwAEAAgGzhAiRrwFhAwFgA58iYAORugWRsbOBkbKBnpGzs2WRtLOHkbWBowSL8gqQ/AiR0QFhAwFgA58iYAORugOR07O1kdR5kdWzuASL9AiRrwFhAwFgA58iYAORugWRsbPWkbKBnpGzs7uRtLGjkbWBowSL9gSL9wSL+AdgA8ABAAIBtAMIkcUAB5HHs/2RyHmRsbQAkbKBnpGzeZG0tAaRtYGjBIv7CpD9CJHRAWEDAWADnyJgA5G6A5HTtC+R1HmR1bQyBIv9CJGvAWEDAWADnyJgA5G6BZGxtFCRsoGekbO0NZG0r2uRtYGjBIv/CpD+CJHRAWEDAWADwAEAAmADkboDkdO0d5HUeZHVtHoEjAECNykIka8BYQMBYAPAAQACYAORugWRsbSakbK0nZGztH2RtHmRtYGjBIwDBIwEBIwFB2ADwAEAAgG0ywiRxQAHkce0xZHIeZGxtMiRsoGekbN5kbS0zpG1gaMEjAgEjAkIkcUAB5HHtPeRyHmRsbT6kbKBnpGzeZG0eZG1gaMEjAwEjA0IkcUAB5HHtRuRyHmRsbUekbKBnpGzeZG0eZG1gaMEjBAEjBECNx0IkcUAB5HHtT+RyHmRsbVCkbK1RZGzeZG0eZG1gaMEjBQKkP8IkdEBYQMBYAOfImADkboDkdO1ZpHUeZHVtWkEjBYEjBcHYAPAAQACAbWKCJGvAWEDAWADnyJgA5G6BZGxtYeRsoGekbO1bJG0tY2RtYGjBIwZCpEACJHRAWEDAWADwAEAAmADkboDkdO1u5HUeZHVtb4EjBsIka8BYQMBYAPAAQACYAORugWRsbXekbKBnpGztcGRtLEakbWBowSMHQqRAQiR0QFhAwFgA58iYAORugOR07YHkdR5kdW2CgSMHwSMIAdgA8ABAAIBtisIka8BYQMBYAOfImADkboFkbG2KJGygZ6Rs7YNkbS2LpG1gaMEjCIEjCMIkcUAB5HHtlyRyHmRsbZfkbKBnpGzeZG0eZG1gaMEjCYEjCcKkQIIkdEBYQMBYAPAAQACYAORugOR07aAkdS2g5HVtoYEjCkCNzAIka8BYQMBYAPAAQACYAORugWRsbankbK2qpGztomRtHmRtYGjBIwrBIwsCJHFAAeRx7bSkch5kbG21ZGygZ6Rs3mRtHmRtYGjBIwvCpEDCJHRAWEDAmADwAEAAmADwAD+G2ADkboDkdO29pHUeZHVtvkEjDEIka8BYQMCYAPAAQACYAPAAP4bYAORugWRsbcfkbKBnpGztvyRtHmRtYGjBIwzBIw0BIw1AjdLCJHFAAeRx7dNkci3UJGxt1ORsrdWkbN5kbR5kbWBowSMOAqRBAiR0QFhAwNgA8ABAAJgA8ABAINgA8ABAINgA5G6A5HTt3iR1HmR1bd7BIw6CJGvAWEDA2ADwAEAAmADwAEAg2ADwAEAg2ADkboFkbG3p5GygZ6Rs7d+kbR5kbWJJASMPASMPQiRxQAHkce325HIeZGxt96RsoGekbN5kbR5kbWBowSMQAqRBQiR0QFhAwFgA8ABAAJgA5G6A5HTt/+R1HmR1bgCBIxCBIxDB2ADwAEAAgG4JQiRrwFhAwFgA8ABAAJgA5G6BZGxuCKRsoGekbO4BZG0uCiRtYGjBIxFCpEGCJHRAWEDAWADwAEAAmADkboDkdO4WJHUeZHVuFsEjEcEjEgHYAPAAQACAbh+CJGvAWEDAWADwAEAAmADkboFkbG4e5GygZ6Rs7hekbS4gZG1gaMEjEoEjEsEjEwIkcUAB5HHuLGRyLi0kbG4t5GyhCWRs3mRtHmRtYGjBIxPBIxQBIxRAjddCJHFAAeRx7jZkci43JGxuN+RsrjikbN5kbR5kbWBowSMVASMVQSMVgiRxQAHkce5BJHIuQeRsbkKkbJTkbN5kbR5kbWBowSMWQSMWgSMWwI3VwiRxQAHkce5K5HIuS6RsbkxkbK5NJGzeZG0eZG1gaMEjF4EjF8EjGAEjGEHYAPAAQACAblfCJHFAAeRx7lWkci5WZGxuVyRsoGekbN5kbS5YpG1gaMEjGQEjGUIkcUAB5HHuYyRyLkHkbG5j5Gygj+Rs3mRtHmRtYGjBIxoBIxpBIxqAjdVCJHFAAeRx7mxkci5tJGxubeRsrm6kbN5kbR5kbWBowSMbQSMbgSMbwI3VgiRxQAHkce53JHIud+RsbnikbK55ZGzeZG0eZG1gaMEjHIEjHMCNzIIkcUAB5HHugeRyLkHkbG6CpGyug2Rs3mRtHmRtYGjBIx2BIx3AjcxCJHFAAeRx7ovkch5kbG6MpGyujWRs3mRtHmRtYGjBIx6BIx7AjdMCJHFAAeRx7pWkci5B5GxulmRsrpckbN5kbR5kbWBowSMfgSMfwqRBwiR0QFhAwFgA58iYAORugOR07p+kdS6gZHVuoQEjIECN00Ika8BYQMBYAOfImADkboFkbG6o5GyuqaRs7qHkbR5kbWBowSMgwSMhASMhQdgA8ABAAIButIIkcUAB5HHusyRyHmRsbrPkbKBnpGzeZG0utWRtYGjBIyIBIyJBIyKAjdOCJHFAAeRx7r+kci7AZGxuwSRsrsHkbN5kbR5kbWBowSMjQqRCAiR0QFhAwFgA8ABAAJgA5G6A5HTuymR1HmR1bssBIyPCJGvAWEDAWADwAEAAmADkboFkbG7TJGygZ6Rs7svkbR5kbWBowSMkQSMkgiRxQAHkce7dJHIeZGxu3eRsoGekbN5kbR5kbWBowSMlQSMlgiRxQAHkce7mJHIeZGxu5uRsoGekbN5kbR5kbWBowSMmQqRCQiR0QFhAwJgA4j8YAOI/GADkboDkdO7vJHUeZHVu78EjJsIka8BYQMCYAOI/GADiPxgA5G6BZGxu+GRsoGekbO7wpG0eZG1gaMEjJ0KkQoIkdEBYQMBYAPAAQACYAORugOR07wLkdR5kdW8DgSMnwiRrwFhAwFgA8ABAAJgA5G6BZGxvC6RsoGekbO8EZG0eZG1gaMEjKEKkQsIkdEBYQMBYAPAAQACYAORugOR07xWkdR5kdW8WQSMowiRrwFhAwFgA8ABAAJgA5G6BZGxvHmRsoGekbO8XJG0eZG1gaMEjKUKkQwIkdEBYQMBYAPAAQACYAORugOR07yhkdR5kdW8pASMpwiRrwFhAwFgA8ABAAJgA5G6BZGxvMSRsoGekbO8p5G0eZG1gaMEjKkKkQ0IkdEBYQMBYAPAAQACYAORugOR07zskdR5kdW87wSMqwiRrwFhAwFgA8ABAAJgA5G6BZGxvQ+RsoGekbO88pG0eZG1gaMEjK0KkQ4IkdEBYQMBYAPAAQACYAORugOR0703kdR5kdW9OgSMrwiRrwFhAwFgA8ABAAJgA5G6BZGxvVqRsoGekbO9PZG0eZG1gaMEjLEKkQ8IkdEBYQMBYAPAAQACYAORugOR072CkdR5kdW9hQSMswiRrwFhAwFgA8ABAAJgA5G6BZGxvaWRsoGekbO9iJG0eZG1gaMEjLUKkRAIkdEBYQMBYAOI/GADkboDkdO9zZHUeZHVvdAEjLcIka8BYQMBYAOI/GADkboFkbG97pGygZ6Rs73TkbR5kbWBowSMuQqREQiR0QFhAwNgA4j8YAOI/GADiPxgA5G6A5HTvhSR1HmR1b4XBIy7CJGvAWEDA2ADiPxgA4j8YAOI/GADkboFkbG+PZGygZ6Rs74akbR5kbWBowSMvQqREgiR0QFhAwJgA8ABAAJgA4j8YAORugOR075rkdR5kdW+bgSMvwiRrwFhAwJgA8ABAAJgA4j8YAORugWRsb6SkbKBnpGzvnGRtHmRtYGjBIzBCpETCJHRAWEDAWADwAEAAmADkboDkdO+vpHUeZHVvsEEjMMIka8BYQMBYAPAAQACYAORugWRsb7hkbKBnpGzvsSRtHmRtYGjBIzFBIzGBIzHAjdYCJHFAAeRx78Jkci/DJGxvw+Rsr8SkbN5kbR5kbWBowSMygSMywSMzAI3TwiRxQAHkce/NJHIvzeRsb86kbK/PZGzeZG0eZG1gaMEjM8EjNAEjNECN1AIkcUAB5HHv1+RyL9ikbG/ZZGyv2iRs3mRtHmRtYGjBIzUBIzVBIzWAjdRCJHFAAeRx7+K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kcfAAEodkcjAAEogkbHAAEojkbKEFJGzeZG0eZG1gaMEjZEKkSUIkdEBYQMDYAPAAQACYAPAAQCDYAPAAQCDYAORugOR08AASkuR1HmR1cAASk4EjZMIka8BYQMDYAPAAQACYAPAAQCDYAPAAQCDYAORugWRscAASn6RsoGekbPAAEpRkbR5kbWJJASNlQqRJgiR0QFhAwJgA4j8YAOI/GADkboDkdPAAEq2kdR5kdXAAEq5BI2XBI2YB2ADwAEAAgHAAEriCJGvAWEDAmADiPxgA4j8YAORugWRscAASt+RsoGekbPAAEq8kbTAAErlkbWBowSNmgSNmwqRJwiR0QFhAwRgA4j8YAOI/GADwAEAAmADwAEAAmADkboDkdPAAEsfkdTAAEsikdXAAEslBI2dBI2eB2ADwAEAAgHAAEtdCJGvAWEDBGADiPxgA4j8YAPAAQACYAPAAQACYAORugWRscAAS1qRsoGekbPAAEsokbTAAEtgkbWBowSNoAqRKAiR0QFhAwRgA4j8YAOI/GADwAEAAmADwAEAAmADkboDkdPAAEumkdTAAEsikdXAAEupBI2iCJGvAWEDBGADiPxgA4j8YAPAAQACYAPAAQACYAORugWRscAAS96RsoGekbPAAEuskbTAAEtgkbWBowSNpAqRKQiR0QFhAwZgA4j8YAOI/GADwAEAAmADwAEAAmADwAEAAmADwAEAAmADkboDkdPAAEwbkdTAAEsikdXAAEweBI2mCJGvAWEDBmADiPxgA4j8YAPAAQACYAPAAQACYAPAAQACYAPAAQACYAORugWRscAATF+RsoGekbPAAEwhkbTAAEtgkbWBowSNqASNqQqRKgiR0QFhAwZgA4j8YAOI/GADwAEAAmADwAEAAmADwAEAAmADwAEAAmADkboDkdPAAEyokdTAAEyrkdXAAEyuBI2rCJGvAWEDBmADiPxgA4j8YAPAAQACYAPAAQACYAPAAQACYAPAAQACYAORugWRscAATO+RsoGekbPAAEyxkbTAAEtgkbWBowSNrQqRKwiR0QFhAwRgA4j8YAOI/GADwAEAAmADwAEAAmADkboDkdPAAE04kdTAAEyrkdXAAE07BI2vCJGvAWEDBGADiPxgA4j8YAPAAQACYAPAAQACYAORugWRscAATXCRsoGekbPAAE0+kbTAAEtgkbWBowSNsQqRLAiR0QFhAwVgA4j8YAOI/GADwAEAAmADiPxgA8ABAAJgA5G6A5HTwABNrZHUwABLIpHVwABNsASNswiRrwFhAwVgA4j8YAOI/GADwAEAAmADiPxgA8ABAAJgA5G6BZGxwABN6ZGygZ6Rs8AATbORtMAAS2CRtYGjBI21CpEtCJHRAWEDBWADiPxgA4j8YAPAAQACYAOI/GADwAEAAmADkboDkdPAAE4qkdTAAEyrkdXAAE4tBI23CJGvAWEDBWADiPxgA4j8YAPAAQACYAOI/GADwAEAAmADkboFkbHAAE5mkbKBnpGzwABOMJG0wABLYJG1gaMEjbkEjboIkcUAB5HHwABOp5HIeZGxwABOqpGygZ6Rs3mRtHmRtYajBI29CpEuCJHRAWEDAWADwAEAg2ADkboDkdPAAE7PkdR5kdXAAE7SBI2/CJGvAWEDAWADwAEAg2ADkboFkbHAAE72kbKBnpGzwABO1ZG0eZG1iTMEjcEEjcIEjcMHYAPAAQACAcAATygIkcUAB5HHwABPIpHIeZGxwABPJZGygZ6Rs3mRtMAATyuRtYGjBI3GBI3HCJHFAAeRx8AAT1yRyHmRscAAT1+RsoGekbN5kbR5kbWGowSNygSNywiRxQAHkcfAAE+Ekch5kbHAAE+HkbKBnpGzeZG0eZG1hqMEjc4KkS8IkdEBYQMCYAPAAQACYAPAAQCDYAORugOR08AAT6yR1HmR1cAAT68EjdAIka8BYQMCYAPAAQACYAPAAQCDYAORugWRscAAT9mRsoGekbPAAE+ykbR5kbWJMwSN0gqRMAiR0QFhAwFgA8ABAAJgA5G6A5HTwABQC5HUeZHVwABQDgSN1AiRrwFhAwFgA8ABAAJgA5G6BZGxwABQMpGygZ6Rs8AAUBGRtHmRtYkzBI3WCpExCJHRAWEDBGADwAEAAmADwAEAAmADwAEAAmADwAEAg2ADkboDkdPAAFBekdR5kdXAAFBhBI3YCJGvAWEDBGADwAEAAmADwAEAAmADwAEAAmADwAEAg2ADkboFkbHAAFCXkbKBnpGzwABQZJG0eZG1iTMEjdoKkTIIkdEBYQMDYAPAAQACYAPAAQACYAPAAQACYAORugOR08AAUNWR1HmR1cAAUNgEjdwIka8BYQMDYAPAAQACYAPAAQACYAPAAQACYAORugWRscAAUQiRsoGekbPAAFDbkbR5kbWJMwSN3gSN3wSN4AI3UgiRxQAHkcfAAFFAkcjAAFFDkbHAAFFGkbLAAFFJkbN5kbR5kbWBowSN4wqRMwiR0QFhAwFgA8ABAAJgA5G6A5HTwABRc5HUeZHVwABRdgSN5QSN5gdgA8ABAAIBwABRnQiRrwFhAwFgA8ABAAJgA5G6BZGxwABRmpGygZ6Rs8AAUXmRtMAAUaCRtYGjBI3oCpE0CJHRAWEDAWADwAEAAmADkboDkdPAAFHYkdR5kdXAAFHbBI3qBI3rB2ADwAEAAgHAAFICCJGvAWEDAWADwAEAAmADkboFkbHAAFH/kbKBnpGzwABR3pG0wABSBZG1gaMEje0Eje4KkTUIkdEBYQMDYAPAAQACYAOI/GADiPxgA5G6A5HTwABSPZHUwABSQJHVwABSQwSN8ASN8QdgA8ABAAIBwABSdQiRrwFhAwNgA8ABAAJgA4j8YAOI/GADkboFkbHAAFJykbKBnpGzwABSRpG0wABSeJG1iRUEjfMEjfQIkcUAB5HHwABSuJHIeZGxwABSu5GygZ6Rs3mRtHmRtYajBI33CJGvAWEDAWADwAEAg2ADkboFkbHAAFLgkbKBnpGzh1iRtHmRtYGjBI35BI36CpE3CJHRAWEDAWADwAEAAmADkboDkdPAAFMKkdTAAFMNkdXAAFMQBI38BI39B2ADwAEAAgHAAFM6CJGvAWEDAWADwAEAAmADkboFkbHAAFM3kbKBnpGzwABTE5G0wABTPZG1gaMEjf8KkTgIkdEBYQMBYAPAAQACYAORugOR08AAU3WR1HmR1cAAU3gEjgEIka8BYQMBYAPAAQACYAORugWRscAAU5yRsoGekbPAAFN7kbR5kbWGowSOAwSOBAiRxQAHkcfAAFPIkch5kbHAAFPLkbKBnpGzeZG0eZG1hycEjgcEjggIkcUAB5HHwABT8JHIeZGxwABT85GygZ6Rs3mRtHmRtYcnBI4LCpE5CJHRAWEDAmADwAEAAmADwAEAg2ADkboDkdPAAFQYkdR5kdXAAFQbBI4NCJGvAWEDAmADwAEAAmADwAEAg2ADkboFkbHAAFRFkbKBnpGzwABUHpG0eZG1hycEjg8KkToIkdEBYQMBYAPAAQACYAORugOR08AAVHeR1HmR1cAAVHoEjhEIka8BYQMBYAPAAQACYAORugWRscAAVJ6RsoGekbPAAFR9kbR5kbWHJwSOEwqROwiR0QFhAwJgA8ABAAJgA8ABAAJgA5G6A5HTwABUypHUeZHVwABUzQSOFQiRrwFhAwJgA8ABAAJgA8ABAAJgA5G6BZGxwABU95GygZ6Rs8AAVNCRtHmRtYcnBI4XBI4YCJHFAAeRx8AAVSmRyHmRscAAVSyRsoGekbN5kbR5kbWHJwSOGwSOHAiRxQAHkcfAAFVRkch5kbHAAFVUkbKBnpGzeZG0eZG1hycEjiAKkTwIkdEBYQMBYAPAAQACYAORugOR08AAVXmR1HmR1cAAVXwEjiIIka8BYQMBYAPAAQACYAORugWRscAAVaCRsoGekbPAAFV/kbR5kbWHJwSOJAqRPQiR0QFhAwFgA8ABAAJgA5G6A5HTwABVzJHUeZHVwABVzwSOJgiRrwFhAwFgA8ABAAJgA5G6BZGxwABV85GygZ6Rs8AAVdKRtHmRtYcnBI4oCpE+CJHRAWEDAmADwAEAAmADwAEAAmADkboDkdPAAFYfkdR5kdXAAFYiBI4qCJGvAWEDAmADwAEAAmADwAEAAmADkboFkbHAAFZMkbKBnpGzwABWJZG0eZG1hycEjiwEji0IkcUAB5HHwABWfpHIeZGxwABWgZGygZ6Rs3mRtHmRtYcnBI4wCpE/CJHRAWEDAWADwAEAAmADkboDkdPAAFamkdR5kdXAAFapBI4yCJGvAWEDAWADwAEAAmADkboFkbHAAFbNkbKBnpGzwABWrJG0eZG1hycEjjUKkUAIkdEBYQMCYAPAAQACYAPAAQACYAORugOR08AAVvmR1HmR1cAAVvwEjjcIka8BYQMCYAPAAQACYAPAAQACYAORugWRscAAVyaRsoGekbPAAFb/kbR5kbWHJwSOOQqRQQiR0QFhAwJgA4j8YAPAAQACYAORugOR08AAV1iR1HmR1cAAV1sEjjsIka8BYQMCYAOI/GADwAEAAmADkboFkbHAAFeDkbKBnpGzwABXXpG0eZG1hycEjj0KkUIIkdEBYQMCYAPAAQACYAPAAQACYAORugOR08AAV7OR1HmR1cAAV7YEjj8Ika8BYQMCYAPAAQACYAPAAQACYAORugWRscAAV+CRsoGekbPAAFe5kbR5kbWHJwSOQQqRQwiR0QFhAwJgA8ABAAJgA8ABAAJgA5G6A5HTwABYEpHUeZHVwABYFQSOQwiRrwFhAwJgA8ABAAJgA8ABAAJgA5G6BZGxwABYP5GygZ6Rs8AAWBiRtHmRtYcnBI5FCpFECJHRAWEDAWADwAEAAmADkboDkdPAAFhxkdR5kdXAAFh0BI5HCJGvAWEDAWADwAEAAmADkboFkbHAAFiYkbKBnpGzwABYd5G0eZG1hycEjkkIka8BYQMBYAPAAQACYAORugWRscAAWMSRsoGekbOIaZG0eZG1hycEjksKkUYIkdEBYQMBYAPAAQCDYAORugOR08AAWO6R1HmR1cAAWPEEjk0Ika8BYQMBYAPAAQCDYAORugWRscAAWRWRsoGekbPAAFj0kbR5kbWHJwSOTwqRRwiR0QFhAwFgA8ABAAJgA5G6A5HTwABZQZHUeZHVwABZRASOUQiRrwFhAwFgA8ABAAJgA5G6BZGxwABZaJGygZ6Rs8AAWUeRtHmRtYcnBI5TBI5UBI5VB2ADwAEAAgHAAFmaCJHFAAeRx8AAWZSRyHmRscAAWZeRsoGekbN5kbTAAFmdkbWBowSOWASOWQqRSAiR0QFhAwNgA8ABAAJgA4j8YAOI/GADkboDkdPAAFnOkdTAAFnRkdXAAFnUBI5bCJGvAWEDA2ADwAEAAmADiPxgA4j8YAORugWRscAAWgORsoGekbPAAFnXkbR5kbWBowSOXQqRSQiR0QFhAwJgA4j8YAOI/GADkboDkdPAAEGKkdTAAFo3kdXAAFo6BI5fBI5gB2ADwAEAAgHAAFpmCJGvAWEDAmADiPxgA4j8YAORugWRscAAWmORsoGekbPAAFo9kbTAAFppkbWBowSOYgSOYwSOZAiRxQAHkcfAAFqjkcjAAFqmkbHAAFqpkbKEEZGzeZG0eZG1gaMEjmcKkUoIkdEBYQMBYAPAAQACYAORugOR08AAWtGR1HmR1cAAWtQEjmkIka8BYQMBYAPAAQACYAORugWRscAAWviRsoGekbPAAFrXkbR5kbWBowSOawSObAqRSwiR0QFhAwJgA4j8YAOI/GADkboDkdPAAFskkdTAAFsnkdXAAFsqBI5uBI5vB2ADwAEAAgHAAFtWCJGvAWEDAmADiPxgA4j8YAORugWRscAAW1ORsoGekbPAAFstkbTAAFtZkbWBowSOcQSOcgqRTAiR0QFhAwJgA4j8YAOI/GADkboDkdPAAFuTkdTAAFuWkdXAAFuZBI50BI51B2ADwAEAAgHAAFvFCJGvAWEDAmADiPxgA4j8YAORugWRscAAW8KRsoGekbPAAFuckbTAAFvIkbWBowSOdwSOeAqRTQiR0QFhAwJgA4j8YAOI/GADkboDkdPAAFwCkdTAAFwFkdXAAFwIBI56BI57B2ADwAEAAgHAAFw0CJGvAWEDAmADiPxgA4j8YAORugWRscAAXDGRsoGekbPAAFwLkbTAAFw3kbWBowSOfQSOfgqRTgiR0QFhAwJgA4j8YAOI/GADkboDkdPAAFxxkdTAAFx0kdXAAFx3BI6ABI6BB2ADwAEAAgHAAFyjCJGvAWEDAmADiPxgA4j8YAORugWRscAAXKCRsoGekbPAAFx6kbTAAFymkbWBowSOgwSOhAqRTwiR0QFhAwJgA4j8YAOI/GADkboDkdPAAFzgkdTAAFzjkdXAAFzmBI6GBI6HB2ADwAEAAgHAAF0SCJGvAWEDAmADiPxgA4j8YAORugWRscAAXQ+RsoGekbPAAFzpkbTAAF0VkbWBowSOiQSOigqRUAiR0QFhAwJgA4j8YAOI/GADkboDkdPAAF1PkdTAAF1SkdXAAF1VBI6MBI6NB2ADwAEAAgHAAF2BCJGvAWEDAmADiPxgA4j8YAORugWRscAAXX6RsoGekbPAAF1YkbTAAF2EkbWBowSOjwSOkAqRUQiR0QFhAwJgA4j8YAOI/GADkboDkdPAAF2+kdTAAF3BkdXAAF3EBI6SBI6TB2ADwAEAAgHAAF3wCJGvAWEDAmADiPxgA4j8YAORugWRscAAXe2RsoGekbPAAF3HkbTAAF3zkbWBowSOlQqRUgiR0QFhAwJgA4j8YAOI/GADkboDkdPAAF4tkdTAAFzjkdXAAF4wBI6XCJGvAWEDAmADiPxgA4j8YAORugWRscAAXlmRsoGekbPAAF4zkbTAAF0VkbWBowSOmQSOmgSOmwdgA8ABAAIBwABekAiRxQAHkcfAAF6Kkch5kbHAAF6NkbKBnpGzeZG0wABek5G1gaMEjp4Ejp8EjqAHYAPAAQACAcAAXsoIkcUAB5HHwABexJHIeZGxwABex5GygZ6Rs3mRtMAAXs2RtYGjBI6jCpFTCJHRAWEDAWADwAEAAmADkboDkdPAAF7+kdR5kdXAAF8BBI6lCJGvAWEDAWADwAEAAmADkboFkbHAAF8lkbKBnpGzwABfBJG0eZG1gaMEjqcEjqgCNygIkcUAB5HHwABfUZHIeZGxwABfVJGywABfV5GzeZG0eZG1gaMEjqsEjqwEhVwCN1oIkcUAB5HHwABffpHIwABfgZGxwABfhJGywABfh5GzeZG0eZG1gaMEjq8EjrAEjrEEjrIHYAPAAQACAcAAX7oIkcUAB5HHwABfsZHIwABftJGxwABft5GygZ6Rs3mRtMAAX72RtYGjBI61CpFUCJHRAWEDAWADnyJgA5G6A5HTwABf8ZHUeZHVwABf9ASOtwI3JwiRrwFhAwFgA58iYAORugWRscAAYBaRssAAYBmRs8AAX/eRtHmRtYGjBI65CpFVCJHRAWEDAmADwAEAg2ADwAEAAmADkboDkdPAAGBFkdR5kdXAAGBIBI67CJGvAWEDAmADwAEAg2ADwAEAAmADkboFkbHAAGBykbKBnpGzwABgS5G0eZG1gaMEjr0Ejr4CNy8IkcUAB5HHwABgpJHIeZGxwABgp5GywABgqpGzeZG0eZG1gaMEjsEEjsIEjsMEjsQHYAPAAQACAcAAYNoIkcUAB5HHwABg0ZHIwABg1JGxwABg15GygZ6Rs3mRtMAAYN2RtYGjBI7HBI7IAjdBCJHFAAeRx8AAYRGRyHmRscAAYRSRssAAYReRs3mRtHmRtYGjBI7LBI7MAjcmCJHFAAeRx8AAYT6RyHmRscAAYUGRssAAYUSRs3mRtHmRtYGjBI7PBI7QBI7RBI7SB2ADwAEAAgHAAGF0CJHFAAeRx8AAYWuRyMAAYW6RscAAYXGRsoGekbN5kbTAAGF3kbWBowSO1QSO1gSO1wiRxQAHkcfAAGGrkcjAAGGukbHAAGGxkbKBnpGzeZG0ti6RtYGjBI7aCpFWCJHRAWEDAWADwAEAAmADkboDkdPAAGHakdR5kdXAAGHdBI7cBI7dB2ADwAEAAgHAAGIECJGvAWEDAWADwAEAAmADkboFkbHAAGIBkbKBnpGzwABh4JG0wABiB5G1gaMEjt8EjuAKkVcIkdEBYQMBYAPAAQACYAORugOR08AAYj+R1MAAYkKR1cAAYkUEjuIIka8BYQMBYAPAAQACYAORugWRscAAYmyRsoGekbPAAGJIkbSi8pG1gaMEjuQEjuUIkcUAB5HHwABimZHIeZGxwABinJGygZ6Rs3mRtHmRtYGjBI7oBI7pCJHFAAeRx8AAYsGRyHmRscAAYsSRsoGekbN5kbR5kbWBowSO7AqRWAiR0QFhAwJgA8AA/htgA8AA/htgA5G6A5HTwABi6ZHUeZHVwABi7ASO7giRrwFhAwJgA8AA/htgA8AA/htgA5G6BZGxwABjFpGygZ6Rs8AAYu+RtHmRtYGjBI7wBI7xBI7yAjclCJHFAAeRx8AAY0iRyMAAY0uRscAAY06RssAAY1GRs3mRtHmRtYGjBI71BI72BI73B2ADwAEAAgHAAGOBCJHFAAeRx8AAY3uRyHmRscAAY36RsoGekbN5kbTAAGOEkbWJFQSO+gSO+wqRWQiR0QFhAwFgA8ABAINgA5G6A5HTwABjtZHUwABjuJHVwABjuwSO/QiRrwFhAwFgA8ABAINgA5G6BZGxwABj4pGygZ6Rs8AAY76RtHmRtYkkBI7/BI8ABI8BB2ADwAEAAgHAAGQUCJHFAAeRx8AAZA6RyHmRscAAZBGRsoGekbN5kbTAAGQXkbWJFQSPBAqRWgiR0QFhAwJgA8ABAAJgA8ABAINgA5G6A5HTwABkSJHUeZHVwABkSwSPBgiRrwFhAwJgA8ABAAJgA8ABAINgA5G6BZGxwABkdZGygZ6Rs8AAZE6RtHmRtYkkBI8ICpFbCJHRAWEDAmADwAEAAmADwAEAg2ADkboDkdPAAGSnkdR5kdXAAGSqBI8KCJGvAWEDAmADwAEAAmADwAEAg2ADkboFkbHAAGTUkbKBnpGzwABkrZG0eZG1iSQEjwwEjw0Ejw4HYAPAAQACAcAAZQwIkcUAB5HHwABlBpHIeZGxwABlCZGygZ6Rs3mRtMAAZQ+RtYkVBI8RBI8SCJHFAAeRx8AAZUCRyHmRscAAZUORsoGekbN5kbR5kbWBowSPFQSPFgI3WwiRxQAHkcfAAGVokch5kbHAAGVrkbLAAGVukbN5kbR5kbWBowSPGQqRXAiR0QFhAwFgA8ABAAJgA5G6A5HTwABllZHUeZHVwABlmASPGwSPHAdgA8ABAAIBwABlvwiRrwFhAwFgA8ABAAJgA5G6BZGxwABlvJGygZ6Rs8AAZZuRtMAAZcKRtYkVBI8eBI8fCJHFAAeRx8AAZfqRyHmRscAAZf2RsoGekbN5kbR5kbWBowSPIgSPIwSPJAI3IwiRxQAHkcfAAGYikcjAAGYlkbHAAGYokbLAAGYrkbN5kbR5kbWBowSPJwSPKAiRxQAHkcfAAGZVkcjAAF+BkbHAAGZYkbKEDpGzeZG0eZG1gaMEjysEjywEjy0CNyEIkcUAB5HHwABmgJHIwABmg5GxwABmhpGywABmiZGzeZG0eZG1gaMEjzAKkV0IkdEBYQMBYAPAAP4bYAORugOR08AAZrOR1HmR1cAAZrYEjzIIka8BYQMBYAPAAP4bYAORugWRscAAZtqRsoGekbPAAGa5kbR5kbWJJASPNASPNQSPNgSPNwdgA8ABAAIBwABnDwiRxQAHkcfAAGcGkcjAAGcJkbHAAGcMkbKBnpGzeZG0wABnEpG1gaMEjzoEjzsEjzwIkcUAB5HHwABnRpHIwABnSZGxwABnTJGyg0qRs3mRtHmRtYGjBI8/BI9ABI9BBI9CB2ADwAEAAgHAAGd9CJHFAAeRx8AAZ3SRyMAAZ3eRscAAZ3qRsoGekbN5kbTAAGeAkbWBowSPRQqRXgiR0QFhAwFgA8ABAAJgA5G6A5HTwABntJHUeZHVwABntwSPRwiRrwFhAwFgA8ABAAJgA5G6BZGxwABn25GygZ6Rs8AAZ7qRtHmRtYajBI9JBI9KCpFfCJHRAWEDAmADwAEAAl0DwAD+vwFgA8ABAAJgA5G6A5HTwABoB5HUwABoCpHVwABoDQSPTASPTQdgA8ABAAIBwABoRAiRrwFhAwJgA8ABAAJdA8AA/r8BYAPAAQACYAORugWRscAAaEGRsoGekbPAAGgQkbTAAGhHkbWBowSPUQSPUgSPUwSPVAdgA8ABAAIBwABolQiRxQAHkcfAAGiMkcjAAGiPkbHAAGiSkbKBnpGzeZG0wABomJG1gaMEj1cEj1gEj1kCNx8IkcUAB5HHwABozJHIwABoz5GxwABo0pGywABo1ZGzeZG0eZG1gaMEj1wKkWAIkdEBYQMBYAPAAQCDYAORugOR08AAaP+R1HmR1cAAaQIEj14Ej18HYAPAAQACAcAAaSkIka8BYQMBYAPAAQCDYAORugWRscAAaSaRsoGekbPAAGkFkbTAAGkskbWBowSPYQSPYgSPYwI3HgiRxQAHkcfAAGlkkcjAAGlnkbHAAGlqkbLAAGltkbN5kbR5kbWBowSPZgSPZwSPaASPaQdgA8ABAAIBwABpoAiRxQAHkcfAAGmXkcjAAGmakbHAAGmdkbKBnpGzeZG0wABpo5G1gaMEj2wKkWEIkdEBYQMDYAOI/GADiPxgA4j8YAORugOR08AAadeR1HmR1cAAadoEj24Ej28HYAPAAQACAcAAagcIka8BYQMDYAOI/GADiPxgA4j8YAORugWRscAAagSRsoGekbPAAGndkbTAAGoKkbWBowSPcQqRYgiR0QFhAwNgA8ABAAJgA8ABAAJgA4j8YAORugOR08AAakiR1HmR1cAAaksEj3MEj3QHYAPAAQACAcAAanwIka8BYQMDYAPAAQACYAPAAQACYAOI/GADkboFkbHAAGp5kbKBnpGzwABqTpG0wABqf5G1gaMEj3YEj3cKkWMIkdEBYQMCYAPAAQACYAPAAQACYAORugOR08AAasGR1MAAasSR1cAAascEj3kCNzgIka8BYQMCYAPAAQACYAPAAQACYAORugWRscAAavSRssAAaveRs8AAasqRtHmRtYGjBI97BI98BI99B2ADwAEAAgHAAGsxCJHFAAeRx8AAayuRyHmRscAAay6RsoGekbN5kbTAAGs0kbWBowSPgASPgQSPggI3HAiRxQAHkcfAAGtlkcjAAGtokbHAAGtrkbLAAGtukbN5kbR5kbWBowSPhQSPhgSPhwSPiAdgA8ABAAIBwABroQiRxQAHkcfAAGuYkcjAAGubkbHAAGuekbKBnpGzeZG0wABrpJG1gaMEj4sEj4wEj40CNxsIkcUAB5HHwABr2JHIwABr25GxwABr3pGywABr4ZGzeZG0eZG1gaMEj5AEj5EEj5ICNxoIkcUAB5HHwABsC5HIwABsDpGxwABsEZGywABsFJGzeZG0eZG1gaMEj5UEj5YEj5cCNxgIkcUAB5HHwABsPpHIwABsQZGxwABsRJGywABsR5GzeZG0eZG1gaMEj5oEj5sEj5wHYAPAAQACAcAAbHcIkcUAB5HHwABscZHIeZGxwABsdJGygZ6Rs3mRtMAAbHqRtYGjBI+fCpFkCJHRAWEDAWADwAEAAmADkboDkdPAAGyrkdR5kdXAAGyuBI+hCJGvAWEDAWADwAEAAmADkboFkbHAAGzSkbKBnpGzwABssZG0eZG1hqMEj6MEj6QEj6UCNxcIkcUAB5HHwABs/pHIwABtAZGxwABtBJGywABtB5GzeZG0eZG1gaMEj6gEj6kKkWUIkdEBYQMBYAOfImADkboDkdPAAG0xkdTAAG00kdXAAG03BI+rCJGvAWEDAWADnyJgA5G6BZGxwABtXJGygZ6Rs8AAbTqRtMAAZ4CRtYGjBI+tCpFmCJHRAWEDAWADwAEAAmADkboDkdPAAG2JkdR5kdXAAG2MBI+vBI+wB2ADwAEAAgHAAG2zCJGvAWEDAWADwAEAAmADkboFkbHAAG2wkbKBnpGzwABtj5G0wABttpG1iRUEj7IEj7MIkcUAB5HHwABt7pHIeZGxwABt8ZGygZ6Rs3mRtHmRtYGjBI+2BI+3CpFnCJHRAWEDAmADwAEAAmADwAD+G2ADkboDkdPAAG4WkdTAAG4ZkdXAAG4cBI+5CJGvAWEDAmADwAEAAmADwAD+G2ADkboFkbHAAG5JkbKBnpGzwABuH5G0i/aRtYGjBI+7CpFoCJHRAWEDAWADwAD+G2ADkboDkdPAAG58kdR5kdXAAG5/BI+9CJGvAWEDAWADwAD+G2ADkboFkbHAAG6jkbKBnpGzwABugpG0i/aRtYGjBI+/BI/ABI/BCJHFAAeRx8AAbtCRyMAAbtORscAAbtaRsoGekbN5kbSSX5G1gaMEj8QEj8UIkcUAB5HHwABu/5HIwABu05GxwABvApGygZ6Rs3mRtJJfkbWBowSPyASPyQSPygdgA8ABAAIBwABvMQiRxQAHkcfAAG8rkch5kbHAAG8ukbKBnpGzeZG0wABvNJG1iRUEj80Ej84IkcUAB5HHwABvZZHIeZGxwABvaJGygZ6Rs3mRtHmRtYGjBI/RBI/SBI/TBI/UB2ADwAEAAgHAAG+WCJHFAAeRx8AAb42RyMAAb5CRscAAb5ORsoGekbN5kbTAAG+ZkbWBowSP1wqRaQiR0QFhAwFgA8ABAAJgA5G6A5HTwABvzZHUeZHVwABv0ASP2QiRrwFhAwFgA8ABAAJgA5G6BZGxwABv9JGygZ6Rs8AAb9ORtHmRtYajBI/bCpFqCJHRAWEDAWADwAEAAmADkboDkdPAAHAgkdR5kdXAAHAjBI/dCJGvAWEDAWADwAEAAmADkboFkbHAAHBHkbKBnpGzwABwJpG0eZG1hqMEj98Ej+AIkcUAB5HHwABwc5HIeZGxwABwdpGygZ6Rs3mRtJJfkbWBowSP4wqRawiR0QFhAwJgA8ABAAJgA8ABAAJgA5G6A5HTwABwnJHUeZHVwABwnwSP5QSP5gdgA8ABAAIBwABwzAiRrwFhAwJgA8ABAAJgA8ABAAJgA5G6BZGxwABwyZGygZ6Rs8AAcKKRtMAAcM+RtYkVBI/oCpFsCJHRAWEDAWADwAEAAmADkboDkdPAAHENkdR5kdXAAHEQBI/qCJGvAWEDAWADwAEAAmADkboFkbHAAHE0kbKBnpGzwABxE5G0wABwz5G1iRUEj+wEj+0IkcUAB5HHwABxY5HIeZGxwABxZpGygZ6Rs3mRtHmRtYajBI/wBI/xCJHFAAeRx8AAcYuRyHmRscAAcY6RsoGekbN5kbSQWJG1gaMEj/QKkW0IkdEBYQMBYAOfImADkboDkdPAAHG0kdR5kdXAAHG3BI/2CJGvAWEDAWADnyJgA5G6BZGxwABx2ZGygZ6Rs8AAcbqRtHmRtYGjBI/4CpFuCJHRAWEDAWADwAEAAmADkboDkdPAAHIDkdR5kdXAAHIGBI/6CJGvAWEDAWADwAEAAmADkboFkbHAAHIqkbKBnpGzwAByCZG0kl+RtYGjBI/8BI/9CJHFAAeRx8AAcleRyHmRscAAclqRsoGekbN5kbR5kbWBowSQAASQAQiRxQAHkcfAAHJ/kch5kbHAAHKCkbKBnpGzeZG0eZG1gaMEkAQEkAUIkcUAB5HHwAByp5HIeZGxwAByqpGygZ6Rs3mRtHmRtYGjBJAIBJAJBJAKAjcUCJHFAAeRx8AAcs+RyMAActKRscAActWRssAActiRs3mRtHmRtYGjBJANBJAOCpFvCJHRAWEDAWADwAEAAmADkboDkdPAAHMCkdTAAHMFkdXAAHMIBJAQBJARB2ADwAEAAgHAAHMyCJGvAWEDAWADwAEAAmADkboFkbHAAHMvkbKBnpGzwABzC5G0wABzNZG1gaMEkBMKkXAIkdEBYQMBYAPAAQACYAORugOR08AAc22R1HmR1cAAc3AEkBUIka8BYQMBYAPAAQACYAORugWRscAAc5SRsoGekbPAAHNzkbR5kbWBowSQFwqRcQiR0QFhAwFgA8ABAAJgA5G6A5HTwABzwJHUeZHVwABzwwSQGQSQGgdgA8ABAAIBwABz6giRrwFhAwFgA8ABAAJgA5G6BZGxwABz55GygZ6Rs8AAc8aRtMAAc+2RtYGjBJAcCpFyCJHRAWEDAWADwAEAAmADkboDkdPAAHQlkdR5kdXAAHQoBJAeCJGvAWEDAWADwAEAAmADkboFkbHAAHRMkbKBnpGzwAB0K5G0wABz7ZG1gaMEkCAEkCEIkcUAB5HHwAB0e5HIeZGxwAB0fpGygZ6Rs3mRtHmRtYGjBJAkCpFzCJHRAWEDAWADwAEAAmADkboDkdPAAHSjkdR5kdXAAHSmBJAmCJGvAWEDAWADwAEAAmADkboFkbHAAHTKkbKBnpGzwAB0qZG0eZG1hqMEkCgKkXQIkdEBYQMCYAPAAQACYAPAAQACYAORugOR08AAdPaR1HmR1cAAdPkEkCoEkCsHYAPAAQACAcAAdSYIka8BYQMCYAPAAQACYAPAAQACYAORugWRscAAdSORsoGekbPAAHT8kbTAAHUpkbWJFQSQLQqRdQiR0QFhAwJgA8ABAAJgA8ABAAJgA5G6A5HTwAB1Z5HUeZHVwAB1agSQLwSQMAdgA8ABAAIBwAB1lwiRrwFhAwJgA8ABAAJgA8ABAAJgA5G6BZGxwAB1lJGygZ6Rs8AAdW2RtMAAdZqRtYkVBJAyCpF2CJHRAWEDA2ADwAEAAmADwAEAAmADwAEAAmADkboDkdPAAHXYkdR5kdXAAHXbBJA0CJGvAWEDA2ADwAEAAmADwAEAAmADwAEAAmADkboFkbHAAHYLkbKBnpGzwAB13pG0wAB1KZG1iRUEkDYKkXcIkdEBYQMCYAPAAQACYAPAAQACYAORugOR08AAdkaR1HmR1cAAdkkEkDgEkDkHYAPAAQACAcAAdnYIka8BYQMCYAPAAQACYAPAAQACYAORugWRscAAdnORsoGekbPAAHZMkbTAAHZ5kbWJFQSQOwSQPAqReAiR0QFhAwVgA8ABAAJgA8ABAAJgA4j8YAOI/GADwAEAAmADkboDkdPAAHa3kdTAAHa6kdXAAHa9BJA+CJGvAWEDBWADwAEAAmADwAEAAmADiPxgA4j8YAPAAQACYAORugWRscAAdviRsoGekbPAAHbAkbSRIpG1gaMEkEAEkEEKkXkIkdEBYQMEYAPAAQACYAOI/GADiPxgA8ABAAJgA5G6A5HTwAB3OZHUwAB3PJHVwAB3PwSQQwiRrwFhAwRgA8ABAAJgA4j8YAOI/GADwAEAAmADkboFkbHAAHd0kbKBnpGzwAB3QpG0kSKRtYGjBJBFCpF6CJHRAWEDAmADwAEAAmADwAEAAmADkboDkdPAAHevkdR5kdXAAHeyBJBHBJBIB2ADwAEAAgHAAHffCJGvAWEDAmADwAEAAmADwAEAAmADkboFkbHAAHfckbKBnpGzwAB3tZG0wAB34pG1iRUEkEoKkXsIkdEBYQMCYAPAAQACYAPAAQCDYAORugOR08AAeCCR1HmR1cAAeCMEkEwIka8BYQMCYAPAAQACYAPAAQCDYAORugWRscAAeE2RsoGekbPAAHgmkbR5kbWBowSQTgiRrwFhAwFgA8ABAAJgA5G6BZGxwAB4f5GygZ6Rs4hGkbR5kbWBowSQUASQUQSQUgdgA8ABAAIBwAB4rwiRxQAHkcfAAHipkch5kbHAAHiskbKBnpGzeZG0wAB4spG1gaMEkFUEkFYIkcUAB5HHwAB445HIeZGxwAB45pGygZ6Rs3mRtHmRtYajBJBZBJBaBJBbCJHFAAeRx8AAeQuRyMAAeQ6RscAAeRGRsoGekbN5kbTAAG+ZkbWBowSQXgSQXwiRxQAHkcfAAHk8kch5kbHAAHk/kbKBnpGzeZG0eZG1hqMEkGIEkGMKkX0IkdEBYQMBYAPAAQCDYAORugOR08AAeWSR1MAAeWeR1cAAeWoEkGUEkGYHYAPAAQACAcAAeZQIka8BYQMBYAPAAQCDYAORugWRscAAeZGRsoGekbPAAHltkbTAAHmXkbWBowSQaAqRfgiR0QFhAwNgA8ABAINgA8ABAAJgA8ABAAJgA5G6A5HTwAB5z5HUeZHVwAB50gSQagSQawdgA8ABAAIBwAB6BQiRrwFhAwNgA8ABAINgA8ABAAJgA8ABAAJgA5G6BZGxwAB6ApGygZ6Rs8AAedWRtMAAegiRtYkVBJBtBJBuCJHFAAeRx8AAekyRyHmRscAAek+RsoGekbN5kbTAAGkskbWBowSQcQSQcgSQcwI3GQiRxQAHkcfAAHp3kcjAAHp6kbHAAHp9kbLAAHqAkbN5kbR5kbWBowSQdgSQdwSQeAiRxQAHkcfAAHqqkcjAAHqtkbHAAHqwkbKBnpGzeZG0wAB6CJG1gaMEkHsEkHwIkcUAB5HHwAB625HIeZGxwAB63pGygZ6Rs3mRtHmRtYajBJB/CpF/CJHRAWEDA2ADwAEAg2ADwAEAg2ADwAEAg2ADkboDkdPAAHsDkdR5kdXAAHsGBJCBCJGvAWEDA2ADwAEAg2ADwAEAg2ADwAEAg2ADkboFkbHAAHs2kbKBnpGzwAB7CZG0wAB6CJG1iRUEkIMEkIQKkYAIkdEBYQMDYAPAAQCDYAPAAQCDYAPAAQACYAORugOR08AAe3GR1MAAe3SR1cAAe3cEkIYEkIcHYAPAAQACAcAAe60Ika8BYQMDYAPAAQCDYAPAAQCDYAPAAQACYAORugWRscAAe6qRsoGekbPAAHt6kbTAAHuwkbWJFQSQiQSQigSQiwiRxQAHkcfAAHv0kcjAAHv3kbHAAHv6kbKBnpGzeZG0eZG1gaMEkI4KkYEIkdEBYQMBYAPAAQCDYAORugOR08AAfCKR1HmR1cAAfCUEkJAEkJEHYAPAAQACAcAAfEwIka8BYQMBYAPAAQCDYAORugWRscAAfEmRsoGekbPAAHwokbTAAHxPkbWBowSQkwSQlAiRxQAHkcfAAHyHkch5kbHAAHyKkbKBnpGzeZG0eZG1hqMEkJcEkJgIkcUAB5HHwAB8r5HIeZGxwAB8spGygZ6Rs3mRtHmRtYGjBJCbBJCcCJHFAAeRx8AAfNeRyHmRscAAfNqRsoGekbN5kbR5kbWBowSQnwSQoAiRxQAHkcfAAHz/kch5kbHAAH0CkbKBnpGzeZG0eZG1hqMEkKMEkKQKkYIIkdEBYQMCYAPAAQACYAPAAQCDYAORugOR08AAfSeR1MAAfSqR1cAAfS0EkKYIka8BYQMCYAPAAQACYAPAAQCDYAORugWRscAAfVqRsoGekbPAAH0wkbR5kbWBowSQqASQqQSQqgiRxQAHkcfAAH2MkcjAAH2PkbHAAH2SkbKBnpGzeZG0eZG1gaMEkK0EkK4EkK8HYAPAAQACAcAAfcAIkcUAB5HHwAB9upHIeZGxwAB9vZGygZ6Rs3mRtMAAfcORtYGjBJCyBJCzBJC0BJC1B2ADwAEAAgHAAH39CJHFAAeRx8AAffSRyMAAffeRscAAffqRsoGekbN5kbTAAH4AkbWBowSQuASQuQSQugSQuwdgA8ABAAIBwAB+PQiRxQAHkcfAAH40kcjAAH43kbHAAH46kbKBnpGzeZG0wAB+QJG1gaMEkL4EkL8EkMAIkcUAB5HHwAB+dJHIwAB+d5GxwAB+epGyguGRs3mRtHmRtYGjBJDDBJDEBJDFB2ADwAEAAgHAAH6oCJHFAAeRx8AAfqKRyHmRscAAfqWRsoGekbN5kbTAAH6rkbWBowSQyASQyQSQygI3FgiRxQAHkcfAAH7ckcjAAH7fkbHAAH7ikbLAAH7lkbN5kbR5kbWBowSQzQSQzgqRgwiR0QFhAwJgA4j8YAOI/GADkboDkdPAAH8PkdTAAH8SkdXAAH8VBJDQCJGvAWEDAmADiPxgA4j8YAORugWRscAAfz6RsoGekbPAAH8YkbTAAEtgkbWBowSQ0gSQ0wSQ1AI3FQiRxQAHkcfAAH9vkcjAAH9ykbHAAH91kbLAAH94kbN5kbR5kbWBowSQ1wqRhAiR0QFhAwFgA8ABAAJgA5G6A5HTwAB/opHUeZHVwAB/pQSQ2QSQ2gdgA8ABAAIBwAB/zAiRrwFhAwFgA8ABAAJgA5G6BZGxwAB/yZGygZ6Rs8AAf6iRtMAAf8+RtYkVBJDcBJDdBJDeBJDfB2ADwAEAAgHAAIAQCJHFAAeRx8AAgAeRyMAAgAqRscAAgA2RsoGekbN5kbTAAIATkbWBowSQ4gSQ4wSQ5AdgA8ABAAIBwACATQiRxQAHkcfAAIBHkch5kbHAAIBKkbKBnpGzeZG0wACAUJG1gaMEkOcEkOgEkOkHYAPAAQACAcAAgIcIkcUAB5HHwACAgZHIeZGxwACAhJGygZ6Rs3mRtMAAgIqRtYGjBJDsBJDtCJHFAAeRx8AAgLuRyHmRscAAgL6RsoGekbN5kbR5kbWJFQSQ8ASQ8QSQ8gdgA8ABAAIBwACA6QiRxQAHkcfAAIDjkch5kbHAAIDmkbKBnpGzeZG0wACA7JG1iTMEkPUIka8BYQMBYAPAAQCDYAORugWRscAAgR2RsoGekbOG3pG0eZG1gaMEkPcIka8BYQMBYAPAAQCDYAORugWRscAAgUeRsoGekbOHhJG0eZG1gaMEkPkIka8BYQMBYAPAAQCDYAORugWRscAAgXGRsoGekbOHAZG0eZG1gaMEkPsEkPwIkcUAB5HHwACBm5HIeZGxwACBnpGygZ6Rs3mRtHmRtYkVBJD/BJEACJHFAAeRx8AAgcORyHmRscAAgcaRsoGekbN5kbR5kbWJFQSRAwqRiAiR0QFhAwFgA8ABAAJgA5G6A5HTwACB65HUeZHVwACB7gSRBQSRBgdgA8ABAAIBwACCFQiRrwFhAwFgA8ABAAJgA5G6BZGxwACCEpGygZ6Rs8AAgfGRtMAAghiRtYkVBJEIBJEJBJEKB2ADwAEAAgHAAIJWCJHFAAeRx8AAglCRyHmRscAAglORsoGekbN5kbTAAIJZkbWBowSRDQSRDgSRDwdgA8ABAAIBwACCkAiRxQAHkcfAAIKKkch5kbHAAIKNkbKBnpGzeZG0wACCk5G1gaMEkRIKkYkIkdEBYQMFYAPAAP4bYAPAAP4bYAPAAP8yYAPAAP8yYAPAAP8yYAORugOR08AAgsSR1HmR1cAAgscEkRQIka8BYQMFYAPAAP4bYAPAAP4bYAPAAP8yYAPAAP8yYAPAAP8yYAORugWRscAAgwORsoGekbPAAILKkbR5kbWBowSRFgqRigiR0QFhAwVgA8AA/htgA8AA/htgA8AA/zJgA8AA/zJgA8AA/zJgA5G6A5HTwACDR5HUeZHVwACDSgSRGAiRrwFhAwVgA8AA/htgA8AA/htgA8AA/zJgA8AA/zJgA8AA/zJgA5G6BZGxwACDhpGygZ6Rs8AAg02RtHmRtYGjBJEaBJEbCJHFAAeRx8AAg8qRyHmRscAAg82RsoGekbN5kbR5kbWGowSRHgqRiwiR0QFhAwJgA4j8YAOI/GADkboDkdPAAIPykdR5kdXAAIP1BJEgBJEhB2ADwAEAAgHAAIQeCJGvAWEDAmADiPxgA4j8YAORugWRscAAhBuRsoGekbPAAIP4kbTAAIQhkbWBowSRIwSRJAiRxQAHkcfAAIRbkch5kbHAAIRekbKBnpGzeZG0eZG1hqMEkScKkYwIkdEBYQMCYAOI/GADiPxgA5G6A5HTwACEg5HUeZHVwACEhgSRKQSRKgdgA8ABAAIBwACErwiRrwFhAwJgA4j8YAOI/GADkboFkbHAAISskbKBnpGzwACEiZG0wACEspG1gaMEkSwKkY0IkdEBYQMCYAOI/GADiPxgA5G6A5HTwACE7JHUeZHVwACE7wSRLgSRLwdgA8ABAAIBwACFGAiRrwFhAwJgA4j8YAOI/GADkboFkbHAAIUVkbKBnpGzwACE8pG0wACFG5G1gaMEkTEKkY4IkdEBYQMBYAOI/GADkboDkdPAAIVVkdR5kdXAAIVYBJEzCJGvAWEDAWADiPxgA5G6BZGxwACFepGygZ6Rs8AAhVuRtHmRtYGjBJE1CpGPCJHRAWEDAWADiPxgA5G6A5HTwACFpJHUeZHVwACFpwSRNwiRrwFhAwFgA4j8YAORugWRscAAhcmRsoGekbPAAIWqkbR5kbWBowSROQSROgSROwI3EwiRxQAHkcfAAIXzkcjAAIX2kbHAAIX5kbLAAIX8kbN5kbR5kbWBowSRPgSRPwSRQAdgA8ABAAIBwACGLAiRxQAHkcfAAIYmkch5kbHAAIYpkbKBnpGzeZG0wACGL5G1gaMEkUMEkUQIkcUAB5HHwACGYJHIeZGxwACGY5GygZ6Rs3mRtHmRtYajBJFHBJFIBJFJCJHFAAeRx8AAhoiRyMAAhouRscAAho6RsoFXkbN5kbR5kbWBowSRTASRTQI3EQiRxQAHkcfAAIa2kcjAAIaLkbHAAIa5kbLAAIa8kbN5kbR5kbWBowSRUASRUQSRUgSRUwdgA8ABAAIBwACG7wiRxQAHkcfAAIbmkcjAAIbpkbHAAIbskbKBnpGzeZG0wACG8pG1gaMEkVYEkVcIkcUAB5HHwACHJpHIeZGxwACHKZGygZ6Rs3mRtMAAhvKRtYGjBJFaBJFbBJFcB2ADwAEAAgHAAIdXCJHFAAeRx8AAh1GRyHmRscAAh1SRsoGekbN5kbTAAIdakbWBowSRXwSRYASRYQI3EgiRxQAHkcfAAIeLkcjAAIeOkbHAAIeRkbLAAIeUkbN5kbR5kbWBowSRZAqRkAiR0QFhAwFgA8ABAAJgA5G6A5HTwACHvpHUeZHVwACHwQSRZgSRZwSRaAdgA8ABAAICwACH6MAAh+sIka8BYQMBYAPAAQACYAORugWRscAAh+WRsoGekbPAAIfEkbTAAIfukbWJFQSRagqRkQiR0QFhAwFgA8ABAAJgA5G6A5HTwACIKpHUeZHVwACILQSRbASRbQdgA8ABAAIBwACIVAiRrwFhAwFgA8ABAAJgA5G6BZGxwACIUZGygZ6Rs8AAiDCRtMAAiFeRtYGjBJFvCpGSCJHRAWEDAWADwAEAAmADkboDkdPAAIiPkdR5kdXAAIiSBJFxBJFyB2ADwAEAAgHAAIi5CJGvAWEDAWADwAEAAmADkboFkbHAAIi2kbKBnpGzwACIlZG0wACIvJG1iRUEkXQKkZMIkdEBYQMBYAPAAQACYAORugOR08AAiPSR1HmR1cAAiPcEkXYEkXcHYAPAAQACAcAAiR4Ika8BYQMBYAPAAQACYAORugWRscAAiRuRsoGekbPAAIj6kbTAAIkhkbWJFQSReQqRlAiR0QFhAwFgA8ABAAJgA5G6A5HTwACJWZHUeZHVwACJXASRewSRfAdgA8ABAAIBwACJgwiRrwFhAwFgA8ABAAJgA5G6BZGxwACJgJGygZ6Rs8AAiV+RtMAAiYaRtYkVBJF+CpGVCJHRAWEDAWADwAEAAmADkboDkdPAAIm+kdR5kdXAAInBBJGACJGvAWEDAWADwAEAAmADkboFkbHAAInlkbKBnpGzwACJxJG0eZG1iRUEkYIEkYMIkcUAB5HHwACKEZHIeZGxwACKFJGygZ6Rs3mRtHmRtYGjBJGGCpGWCJHRAWEDAWADwAEAAmADkboDkdPAAIo5kdR5kdXAAIo8BJGIBJGJB2ADwAEAAgHAAIpjCJGvAWEDAWADwAEAAmADkboFkbHAAIpgkbKBnpGzwACKP5G0wACKZpG1gaMEkYsKkZcIkdEBYQMBYAPAAQACYAORugOR08AAip6R1HmR1cAAiqEEkY0Ika8BYQMBYAPAAQACYAORugWRscAAisWRsoGekbPAAIqkkbTAAIpmkbWBowSRjwSRkASRkQdgA8ABAAIBwACK+giRxQAHkcfAAIr0kch5kbHAAIr3kbKBnpGzeZG0wACK/ZG1iRUEkZQKkZgIkdEBYQMCYAOI/GADiPxgA5G6A5HTwACLLpHUeZHVwACLMQSRlgSRlwdgA8ABAAIBwACLWgiRrwFhAwJgA4j8YAOI/GADkboFkbHAAItXkbKBnpGzwACLNJG0wACLXZG1gaMEkZkEkZoIkcUAB5HHwACLl5HIeZGxwACLmpGygZ6Rs3mRtHmRtYajBJGdBJGeBJGfCJHFAAeRx8AAi7+RyMAAi8KRscAAi8WRsoNwkbN5kbR5kbWBowSRogSRowSRpAI3DwiRxQAHkcfAAIvtkcjAAIvwkbHAAIvzkbLAAIv2kbN5kbR5kbWBowSRpwSRqAiRxQAHkcfAAIwgkch5kbHAAIwjkbKBnpGzeZG0eZG1gaMEkasKkZkIkdEBYQMBYAPAAQACYAORugOR08AAjEiR1HmR1cAAjEsEka0Eka4HYAPAAQACAcAAjHIIka8BYQMBYAPAAQACYAORugWRscAAjG+RsoGekbPAAIxOkbTAAIx1kbWBowSRsASRsQSRsgdgA8ABAAIBwACMswiRxQAHkcfAAIytkch5kbHAAIywkbKBnpGzeZG0wACMtpG1gaMEkbUEkbYEkbcHYAPAAQACAcAAjO0IkcUAB5HHwACM55HIeZGxwACM6pGygZ6Rs3mRtMAAjPCRtYGjBJG6CpGaCJHRAWEDAWADwAEAAmADkboDkdPAAI0hkdR5kdXAAI0kBJG8BJG9B2ADwAEAAgHAAI1LCJGvAWEDAWADwAEAAmADkboFkbHAAI1IkbKBnpGzwACNJ5G0wACNTpG1gaMEkb8KkZsIkdEBYQMCYAPAAP4bYAPAAP4bYAORugOR08AAjYaR1HmR1cAAjYkEkcEEkcIHYAPAAQACAcAAjbYIka8BYQMCYAPAAP4bYAPAAP4bYAORugWRscAAjbORsoGekbPAAI2MkbTAAI25kbWJFQSRxASRxQqRnAiR0QFhAwJgA8AA/htgA8AA/htgA5G6A5HTwACN95HUwACN+pHVwACN/QSRxwiRrwFhAwJgA8AA/htgA8AA/htgA5G6BZGxwACOKpGygZ6Rs8AAjgCRtLTOkbWJFQSRyQSRygSRywI3DgiRxQAHkcfAAI5dkcjAAI5gkbHAAI5jkbLAAI5mkbN5kbR5kbWBowSRzgSRzwSR0AI3WQiRxQAHkcfAAI6QkcjAAI6TkbHAAI6WkbLAAI6ZkbN5kbR5kbWBowSR0wqRnQiR0QFhAwFgA8AA/htgA5G6A5HTwACOw5HUeZHVwACOxgSR1QSR1gdgA8ABAAIBwACO7QiRrwFhAwFgA8AA/htgA5G6BZGxwACO6pGygZ6Rs8AAjsmRtMAAjvCRtYkVBJHYBJHZCpGeCJHRAWEDAWADwAEAAmADkboDkdPAAI8okdTAAI8rkdXAAI8uBJHbCJGvAWEDAWADwAEAAmADkboFkbHAAI9VkbKEF5GzwACPMZG0eZG1iRUEkd0Ekd4Ekd8CNzkIkcUAB5HHwACPgZHIwACPhJGxwACPh5GywACPipGzeZG0eZG1gaMEkeIKkZ8IkdEBYQMBYAPAAQACYAORugOR08AAj7SR1HmR1cAAj7cEkeQEkeUHYAPAAQACAcAAj94Ika8BYQMBYAPAAQACYAORugWRscAAj9uRsoGekbPAAI+6kbTAAI/hkbWJFQSR5wqRoAiR0QFhAwJgA8ABAAJgA8ABAINgA5G6A5HTwACQGZHUeZHVwACQHASR6QiRrwFhAwJgA8ABAAJgA8ABAINgA5G6BZGxwACQRpGygZ6Rs8AAkB+RtHmRtYGjBJHrCpGhCJHRAWEDA2ADwAEAAmADwAEAg2ADwAEAg2ADkboDkdPAAJB4kdR5kdXAAJB7BJHtCJGvAWEDA2ADwAEAAmADwAEAg2ADwAEAg2ADkboFkbHAAJCrkbKBnpGzwACQfpG0eZG1gaMEke8EkfAIkcUAB5HHwACQ45HIeZGxwACQ5pGygZ6Rs3mRtKmCkbWBowSR8wqRogiR0QFhAwFgA8ABAAJgA5G6A5HTwACRDJHUeZHVwACRDwSR9QiRrwFhAwFgA8ABAAJgA5G6BZGxwACRM5GygZ6Rs8AAkRKRtHmRtYajBJH3BJH4BJH5B2ADwAEAAgHAAJFlCJHFAAeRx8AAkV+RyHmRscAAkWKRsoGekbN5kbTAAJFokbWBowSR/ASR/QiRxQAHkcfAAJGZkch5kbHAAJGckbKBnpGzeZG0wABvNJG1iRUEkgAEkgEEkgIHYAPAAQACAcAAkcoIkcUAB5HHwACRxJHIeZGxwACRx5GygZ6Rs3mRtMAAkc2RtYGjBJIFBJIGBJIHAjcHCJHFAAeRx8AAkf6RyMAAkgGRscAAkgSRssAAkgeRs3mRtHmRtYGjBJIKBJILBJIMB2ADwAEAAgHAAJI3CJHFAAeRx8AAkjGRyHmRscAAkjSRsoGekbN5kbTAAJI6kbWBowSSDwSSEAqRowiR0QFhAwJgA8ABAAJgA4j8YAORugOR08AAkmuR1MAAkm6R1cAAknEEkhIIka8BYQMCYAPAAQACYAOI/GADkboFkbHAAJKckbKBnpGzwACSdJG0wABEpZG1gaMEkhQEkhUKkaQIkdEBYQMCYAPAAQACYAOI/GADkboDkdPAAJLPkdTAAJLSkdXAAJLVBJIXCJGvAWEDAmADwAEAAmADiPxgA5G6BZGxwACTAJGygZ6Rs8AAktiRtMAAZcKRtYGjBJIZBJIaCpGlCJHRAWEDAmADwAEAAmADiPxgA5G6A5HTwACTM5HUwACTNpHVwACTOQSSHAiRrwFhAwJgA8ABAAJgA4j8YAORugWRscAAk2SRsoGekbPAAJM8kbTAAIIYkbWBowSSHgSSHwSSIASSIQdgA8ABAAIBwACToAiRxQAHkcfAAJOXkcjAAJOakbHAAJOdkbKBnpGzeZG0wACTo5G1gaMEkiQKkaYIkdEBYQMBYAOfImADkboDkdPAAJPXkdR5kdXAAJPaBJImBJInB2ADwAEAAgHAAJP/CJGvAWEDAWADnyJgA5G6BZGxwACT/JGygZ6Rs8AAk92RtMAAlAKRtYGjBJIpCpGnCJHRAWEDAmADwAEAAmADnyJgA5G6A5HTwACUOJHUeZHVwACUOwSSKwiRrwFhAwJgA8ABAAJgA58iYAORugWRscAAlGORsoGekbPAAJQ+kbSxGpG1gaMEki0KkagIkdEBYQMCYAPAAQACYAPAAQACYAORugOR08AAlJSR1HmR1cAAlJcEki8Ika8BYQMCYAPAAQACYAPAAQACYAORugWRscAAlMGRsoGekbPAAJSakbTAAHDPkbWJFQSSMQqRqQiR0QFhAwFgA8ABAAJgA5G6A5HTwACU9pHUeZHVwACU+QSSMwiRrwFhAwFgA8ABAAJgA5G6BZGxwACVHZGygZ6Rs8AAlPyRtHmRtYGjBJI1CpGqCJHRAWEDAWADnyJgA5G6A5HTwACVSZHUeZHVwACVTASSNwSSOAdgA8ABAAIBwACVcQiRrwFhAwFgA58iYAORugWRscAAlW6RsoGekbPAAJVPkbTAAJV0kbWBowSSOgSSOwSSPAiRxQAHkcfAAJWqkcjAAJWtkbHAAJWwkbKBnpGzeZG0r2uRtYGjBJI/BJJABJJBB2ADwAEAAgHAAJXfCJHFAAeRx8AAldmRyHmRscAAldyRsoGekbN5kbTAAJXikbWBowSSRAqRqwiR0QFhAwJgA8ABAAJgA8ABAAJgA5G6A5HTwACWE5HUeZHVwACWFgSSRgSSRwdgA8ABAAIBwACWQwiRrwFhAwJgA8ABAAJgA8ABAAJgA5G6BZGxwACWQJGygZ6Rs8AAlhmRtMAAlkaRtYGjBJJJBJJKCJHFAAeRx8AAloSRyHmRscAAloeRsoGekbN5kbR5kbWBowSSTQqRrAiR0QFhAwFgA8ABAINgA5G6A5HTwACWrJHUeZHVwACWrwSSTwiRrwFhAwFgA8ABAINgA5G6BZGxwACW05GygZ6Rs8AAlrKRtJICkbWBowSSUQqRrQiR0QFhAwFgA8ABAAJgA5G6A5HTwACXAJHUeZHVwACXAwSSUwiRrwFhAwFgA8ABAAJgA5G6BZGxwACXJ5GygZ6Rs8AAlwaRtHmRtYkkBJJVBJJWAjc9CJHFAAeRx8AAl1ORyHmRscAAl1aRssAAl1mRs3mRtHmRtYGjBJJZ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AAJgA8ABAIMBwAD5zIJmBJ0ABJ0HCp2xCp2yBZ28l2EHYAPAAQCAAAjAAPnJAmADwAEAdFsBwAD5zIJmBZ28nVoFnbydXASc0wSdYgifagAJn77AAJyon78An8AAn8EAn8IAn8PAAJ7Rn8TAAJ7Un8UJn8Z5BJ1pBJ1yCJ9qAAmfvpc6n78An8B3n8EAn8J3n8PAAJ2Nn8TAAJ8Dn8WDXZ/GwACdjQSaEgSdcwifagAJn77AAJycn78An8AAn8EAn8IAn8PAAJ8xn8TAAJ80n8UJn8bAAJ8xBIPcBJ10CJ9qAAmfvsAAX1efvwCfwACfwQCfwgCfw8AAn2OfxMAAn2afxcAAhryfxsAAn2MEmfIEnXUIn2oACZ++wABlbp+/AJ/AAJ/BAJ/CAJ/DwACfmJ/EwACfm5/FwACGvJ/GwACfmAI3gKoEnXYEnXcIn2oACZ++wACfzZ+/AJ/AAJ/BAJ/CAJ/DwACf0Z/EwACf1J/FwACGvJ/GwACf0QSaUwSdeAifagAJn76FIZ+/AJ/AAJ/BAJ/CAJ/DwACgBp/EwACgCZ/FCZ/GwACgBgSEKQSdewieZQALnqx3nq0An77AAJxsn793n8AAn8EAn8IAn8PAAKA2n8TAAKA5n8UJn8bAAKA2BJnnBJ18CJ5lAAuerHeerQCfvsAAnGyfvwCfwACfwQCfwgCfw8AAoG6fxMAAoHGfxYNdn8bAAKBuBJpjBJ19CJ5lAAuerACerQCfvsAAnGyfvwCfwACfwQCfwgCfw8AAoKefxMAAoKqfxQmfxsAAoKcEmg0EnX4InmUAC56sAJ6td5++wACcbJ+/AJ/AAJ/BAJ/CAJ/DwACg35/EwACg4p/FCZ/GwACg3wSaXASdfwieZQALnqwAnq13n77AAJxsn78An8AAn8EAn8IAn8PAAKEXn8TAAKEan8UJn8bAAKEXBJplBJ2ACJ5lAAuerACerQCfvsAAnGyfvwCfwACfwQCfwgCfw8AAoU+fxMAAoVKfxQmfxsAAoU8EmmwEnYEInmUAC56sAJ6tAJ++wACcbJ+/AJ/AAJ/BAJ/CAJ/DwAChh5/EwAChip/FCZ/GwAChhwSacwSdggieZQALnqwAnq0An77AAJxsn78An8AAn8EAn8IAn8PAAKG/n8TAAKHCn8UJn8bAAKG/BJo6BJ2DCJ5lAAuerACerQCfvsAAnGyfvwCfwACfwXefwgCfw8AAofefxMAAofqfxQmfxsAAofcEhCwEnYQInmUAC56sAJ6tAJ++wACcbJ+/d5/AAJ/BAJ/CAJ/DwACiL5/EwACiMp/FCZ/GwACiLwSabgSdhQieZQALnqwAnq0An77AAJxsn78An8AAn8EAn8IAn8PAAKJnn8TAAKJqn8UJn8bAAKJnBIQvBJ2GCJ5lAAuerHeerQCfvsAAnGyfv3efwACfwQCfwgCfw8AAop+fxMAAoqKfxQmfxsAAop8Emm0EnYcInmUAC56sAJ6tAJ++wACcbJ+/AJ/AAJ/BAJ/CAJ/DwACi15/EwACi2p/FCZ/GwACi1wSaYgSdiAieZQALnqx3nq0An77AAJxsn78An8AAn8EAn8IAn8PAAKMPn8TAAKMSn8UJn8bAAKMPBJpnBJ2JCJ5lAAuerACerQCfvsAAnGyfvwCfwACfwQCfwgCfw8AAo0efxMAAo0qfxQmfxsAAo0cEmoAEnYoInmUAC56sd56tAJ++wACcbJ+/AJ/AAJ/BAJ/CAJ/DwACjf5/EwACjgp/FCZ/GwACjfwSacASdiwieZQALnqwAnq0An77AAJxsn78An8AAn8EAn8IAn8PAAKO3n8TAAKO6n8UJn8bAAKO3BJ2NBJ2MCJ5lAAuerACerQCfvsAAnGyfvwCfwACfwXefwgCfw8AAo++fxMAAo/KfxQmfxsAAo+8EhLAEnY4InmUAC56sd56tAJ++wACcbJ+/AJ/AAJ/Bd5/CAJ/DwACkJ5/EwACkKp/FCZ/GwACkJwSaPASdjwieZQALnqwAnq0An77AAJxsn78An8AAn8EAn8IAn8PAAKRfn8TAAKRin8UJn8bAAKRfBIKTBJ2QCJ5lAAuerHeerQCfvsAAnGyfvwCfwACfwXefwgCfw8AApJefxMAApJqfxQmfxsAApJcEhC4EnZEInmUAC56sd56tAJ++wACcbJ+/d5/AAJ/BAJ/CAJ/DwACkz5/EwACk0p/FCZ/GwACkzwSELQSdkgieZQALnqx3nq0An77AAJxsn78An8AAn8EAn8IAn8PAAKUHn8TAAKUKn8UJn8bAAKUHBJ2UBJ2TCJ5lAAuerACerQCfvsAAnGyfvwCfwACfwQCfwgCfw8AApT+fxMAApUKfxQmfxsAApT8EhCoEnZUInmUAC56sAJ6tAJ++wACcbJ+/d5/AAJ/BAJ/CAJ/DwACld5/EwAClep/FCZ/GwACldwSadQSdlgieZQALnqwAnq0An77AAJxsn78An8AAn8EAn8IAn8PAAKWvn8TAAKWyn8UJn8bAAKWvBJpoBJ2XCJ5lAAuerACerQCfvsAAnGyfvwCfwACfwQCfwgCfw8AApeefxMAApeqfxQmfxsAApecEnCkEnZgInmUAC56sAJ6td5++wACcbJ+/AJ/AAJ/BAJ/CAJ/DwACmH5/EwACmIp/FCZ/GwACmHwSaQQSdmQieZQALnqx3nq0An77AAJxsn78An8AAn8EAn8IAn8PAAKZXn8TAAKZan8UJn8bAAKZXBITABJ2aCJ5lAAuerACerXefvsAAnGyfvwCfwACfwQCfwgCfw8AApo+fxMAAppKfxQmfxsAApo8Emm8EnZsInmUAC56sAJ6tAJ++wACcbJ+/AJ/AAJ/BAJ/CAJ/DwACmx5/EwACmyp/FCZ/GwACmxwSaPQSdnAieZQALnqx3nq0An77AAJxsn78An8AAn8EAn8IAn8PAAKb/n8TAAKcCn8UJn8bAAKb/BISvBJ2dCJ5lAAuerHeerQCfvsAAnGyfvwCfwACfwXefwgCfw8AApzefxMAApzqfxQmfxsAApzcEml4EnZ4InmUAC56sAJ6tAJ++wACcbJ+/AJ/AAJ/BAJ/CAJ/DwACnb5/EwACncp/FCZ/GwACnbwSdoASdnwieZQALnqx3nq0An77AAJxsn78An8AAn8EAn8IAn8PAAKenn8TAAKeqn8UJn8bAAKenBJpXBJ2hCJ5lAAuerACerQCfvsAAnGyfvwCfwACfwQCfwgCfw8AAp9+fxMAAp+KfxYNdn8bAAKffBJotBJ2iCJ5lAAuerACerQCfvsAAnGyfv3efwACfwQCfwgCfw8AAqBifxMAAqBufxQmfxsAAqBgEhEgEnaMInmUAC56sd56tAJ++wACcbJ+/AJ/AAJ/Bd5/CAJ/DwACoUJ/EwACoU5/FCZ/GwACoUASE9QSdpAieZQALnqx3nq0An77AAJxsn78An8AAn8F3n8IAn8PAAKiIn8TAAKiLn8UJn8bAAKiIBJ2mBJ2lCJ5lAAuerACerXefvsAAnGyfvwCfwACfwQCfwgCfw8AAqMCfxMAAqMOfxQmfxsAAqMAEmkgEnacInmUAC56sAJ6tAJ++wACcbJ+/AJ/AAJ/BAJ/CAJ/DwACo+J/EwACo+5/FCZ/GwACo+ASEQQSdqAieZQALnqwAnq0An77AAJxsn78An8AAn8EAn8IAn8PAAKkwn8TAAKkzn8UJn8bAAKkwBJqeBJ2pCJ5lAAuerACerXefvsAAnGyfvwCfwACfwQCfwgCfw8AAqWifxMAAqWufxQmfxsAAqWgEmkAEnaoInmUAC56sAJ6td5++wACcbJ+/AJ/AAJ/BAJ/CAJ/DwACpoJ/EwACpo5/FCZ/GwACpoASFzgSdqwieZQALnqx3nq0An77AAJxsn78An8AAn8EAn8IAn8PAAKnYn8TAAKnbn8UJn8bAAKnYBJpSBJ2sCJ5lAAuerHeerQCfvsAAnGyfvwCfwACfwXefwgCfw8AAqhCfxMAAqhOfxQmfxsAAqhAEna4Ena0InmUAC56sAJ6td5++wACcbJ+/AJ/AAJ/BAJ/CAJ/DwACqSJ/EwACqS5/FCZ/GwACqSASaegSdrwieZQALnqx3nq0An77AAJxsn793n8AAn8EAn8IAn8PAAKqAn8TAAKqDn8UJn8bAAKqABJpaBJ2wCJ5lAAuerACerQCfvsAAnGyfvwCfwACfwQCfwgCfw8AAqrifxMAAqrufxQmfxsAAqrgEmnEEnbEInmUAC56sAJ6tAJ++wACcbJ+/AJ/AAJ/BAJ/CAJ/DwACq8J/EwACq85/FCZ/GwACq8ASXeQSdsgieZQALnqx3nq0An77AAJxsn78An8AAn8EAn8IAn8PAAKson8TAAKsrn8UJn8bAAKsoBIS/BJ2zCJ5lAAuerACerXefvsAAnGyfvwCfwACfwQCfwgCfw8AAq2CfxMAAq2OfxQmfxsAAq2AEg0oEnbQInmUAC56sAJ6td5++wACcbJ+/AJ/AAJ/BAJ/CAJ/DwACrmJ/EwACrm5/FCZ/GwACrmASEKASdtQieZQALnqx3nq0An77AAJxsn793n8AAn8EAn8IAn8PAAKvQn8TAAKvTn8UJn8bAAKvQBJpHBJ22CJ5lAAuerACerQCfvsAAnGyfvwCfwACfwQCfwgCfw8AArAifxMAArAufxQmfxsAArAgEmmoEnbcInmUAC56sAJ6tAJ++wACcbJ+/AJ/AAJ/BAJ/CAJ/DwACsQJ/EwACsQ5/FCZ/GwACsQASaCwSduAieZQALnqwAnq13n77AAJxsn78An8AAn8EAn8IAn8PAAKx4n8TAAKx7n8UJn8bAAKx4BJpZBJ25CJ5lAAuerACerQCfvsAAnGyfvwCfwACfwQCfwgCfw8AArLCfxMAArLOfxQmfxsAArLAEmlsEnboInmUAC56sAJ6tAJ++wACcbJ+/AJ/AAJ/BAJ/CAJ/DwACs6J/EwACs65/FCZ/GwACs6ASXDgSduwieZQALnqwAnq0An77AAJxsn78An8AAn8EAn8IAn8PAAK0gn8TAAK0jn8UJn8bAAK0gBJpyBJ28CJ5lAAuerACerQCfvsAAnGyfvwCfwACfwQCfwgCfw8AArVifxMAArVufxQmfxsAArVgEhpkEnb0InmUAC56sd56tAJ++wACcbJ+/AJ/AAJ/Bd5/CAJ/DwACtkJ/EwACtk5/FCZ/GwACtkASEKwSdvgieZQALnqwAnq0An77AAJxsn793n8AAn8EAn8IAn8PAAK3In8TAAK3Ln8UJn8bAAK3IBJqBBJ2/CJ5lAAuerACerQCfvsAAnGyfvwCfwACfwQCfwgCfw8AArgCfxMAArgOfxQmfxsAArgAEmmYEncAInmUAC56sAJ6tAJ++wACcbJ+/AJ/AAJ/BAJ/CAJ/DwACuOJ/EwACuO5/FCZ/GwACuOASaOwSdwQieZQALnqwAnq0An77AAJxsn78An8AAn8EAn8IAn8PAAK5wn8TAAK5zn8UJn8bAAK5wBJp4BJ3CCJ5lAAuerACerXefvsAAnGyfvwCfwACfwQCfwgCfw8AArqifxMAArqufxQmfxsAArqgHYAOeZUPAAKA8wACgdMAAoK3AAKDlwAChHcAAoVXAAKGNwAChxcAAof3AAKI1wACibcAAoqXAAKLdwACjFcAAo03AAKOFwACjvcAAo/XAAKQtwACkZcAApJ3AAKTVwAClDcAApUXAAKV9wACltcAApe3AAKYlwACmXcAAppXAAKbNwACnBcAApz3AAKd1wACnrcAAp+XAAKgewACoVsAAqI7AAKjGwACo/sAAqTbAAKluwACppsAAqd7AAKoWwACqTsAAqobAAKq+wACq9sAAqy7AAKtmwACrnsAAq9bAAKwOwACsRsAArH7AAKy2wACs7sAArSbAAK1ewACtlsAArc7AAK4GwACuPsAArnbAAK6uBJ3XCJ9qAAmfvgmfvwCfwACfwQCfwgCfw4Qon8TAAK/yn8UJn8aEKASd4gifUQACn2TAALAan2UJBJ3jCJ9RAAKfZMAAsCufZYQXBJ3kCJ9RAAKfZMAAsD2fZRUEneUIn1EAAp9kwACwTp9lwACYWwSd5gifUQACn2TAALBin2WEEQSd5wifUQACn2TAALB0n2WEFASd6AifUQACn2TAALCGn2UhBJ3pCJ9RAAKfZMAAsJefZVMEneoIn1EAAp9kwACwqJ9lwACSBwSd6wifUQACn2TAALC8n2WBVwSd7AifUQACn2TAALDOn2WC4QSd7QifUQACn2TAALDgn2WCPwSd7gifUQACn2TAALDyn2XAAI5mBJ3vCJ9RAAKfZMAAsQafZYNdBJ3wCJ9RAAKfZMAAsRifZcAAl4kEnfEIn1EAAp9kwACxLJ9lg3AEnfIIn1EAAp9kwACxPp9lwACL9gScIgSd8wifagAJn77AAJxXn78An8AAn8EAn8IAn8PAALFSn8TAALFVn8UJn8Z5BJ31BJ30CJ9qAAmfvsAAnJOfvwCfwACfwQCfwgCfw8AAsYGfxMAAsYSfxQmfxnkEnfcEnfYIn2oACZ++wACcTp+/AJ/AAJ/BAJ/CAJ/DwACxsJ/EwACxs5/FCZ/GeQScIASd+AifagAJn77AAJxmn78An8AAn8EAn8IAn8PAALHfn8TAALHin8UJn8Z5BJ35CJ9qAAmfvsAAnKifvwCfwACfwQCfwgCfw8AAntGfxMAAsg6fxQmfxnkEgaoEnfoIn2oACZ++wACcUZ+/AJ/AAJ/BAJ/CAJ/DwACyOp/EwACyPZ/FCZ/GwACyOgSD8QSd+wifagAJn77AAGAZn78An8AAn8EAn8IAn8PAALJsn8TAALJvn8UJn8Z5BJ38CJ9qAAmfvsAAYUSfvwCfwHefwQCfwnefw8AAnZifxMAAspufxcAAmFufxsAAnZgEnf0In2oACZ++wACdOJ+/AJ/Ad5/BAJ/CAJ/DwACdMp/EwACyzZ/FguGfxsAAnTICN4CRBJ3/BJ3+CJ9qAAmfvsAAsv2fvwCfwHefwQCfwgCfw8AAswGfxMAAswSfxRWfxsAAswECN4CSBJ4BBJ4ACJ9qAAmfvsAAszOfvwCfwHefwQCfwgCfw8AAszefxMAAszqfxRWfxsAAszcEg4QEngIIn2oACZ++hIyfvwCfwACfwQCfwgCfw8AAs2mfxMAAs2yfxQmfxsAAs2kEmkkEngMIn2oACZ++wABmiZ+/AJ/Ad5/BAJ/CAJ/DwACzmZ/EwACznJ/FwACL9p/GwACzmQI3gI8EngQIn2oACZ++wACzzp+/AJ/Ad5/BAJ/CAJ/DwACdhJ/EwACz0p/FwACSB5/GwACdhAI3gI4EngYEngUIn2oACZ++wAC0BJ+/AJ/AAJ/BAJ/CAJ/DwAC0CJ/EwAC0C5/FwACSB5/GwAC0CASeBwifagAJn77AAJyfn78An8B3n8EAn8J3n8PAAJ2Sn8TAALQ9n8WEEZ/GwACdkgI3gJMEnggIn2oACZ++wAC0bZ+/AJ/Ad5/BAJ/CAJ/DwACdNZ/EwAC0cZ/Fgj+fxsAAnTUCN4CUBJ4KBJ4JCJ9qAAmfvsAAtKGfvwCfwHefwQCfwgCfw8AAtKWfxMAAtKifxRWfxsAAtKUCN4CVBJ4MBJ4LCJ9qAAmfvsAAtNefvwCfwHefwQCfwgCfw8AAtNufxMAAtN6fxRWfxsAAtNsEguoEng0In2oACZ++lw+fvwCfwACfwQCfwgCfw8AAtQ2fxMAAtRCfxQmfxsAAtQ0Eng4In2oACZ++wABHvZ+/AJ/AAJ/BAJ/CAJ/DgWufxMAAtT2fxQmfxoFrBJ4PCJ9qAAmfvsAAnEWfvwCfwHefwQCfwnefw8AAnZWfxMAAtWifxYQUn8bAAJ2VAjeAnwSeEQSeEAifagAJn77AALWYn78An8B3n8EAn8IAn8PAALWcn8TAALWfn8UVn8bAALWcBIbiBJ4SCJ9qAAmfvsAAnKKfvwCfwACfwQCfwgCfw8AAtc6fxMAAtdGfxQmfxsAAtc4EgyYEnhMIn2oACZ++tJ2fvwCfwACfwQCfwgCfw8AAtgCfxMAAtgOfxQmfxsAAtgAEmfMEnhQIn2oACZ++uOKfvwCfwACfwQCfwgCfw8AAtjCfxMAAtjOfxQmfxsAAtjAEgLwEnhUIn2oACZ++wACXWZ+/AJ/Ad5/BAJ/CAJ/DwAC2YJ/EwAC2Y5/FFZ/GwAC2YAI3gIcEnhYIn2oACZ++wAC2kp+/AJ/Ad5/BAJ/Cd5/DwACdgp/EwAC2lp/FwACSB5/GwACdggI3gIYEnhgEnhcIn2oACZ++wAC2yJ+/AJ/AAJ/BAJ/CAJ/DwAC2zJ/EwAC2z5/FwACSB5/GwAC2zAI3gIIEmhMIn2oACZ++wAC3AZ+/AJ/AAJ/BAJ/CAJ/DwAC3BZ/EwACmIp/FCZ/GwAC3BQSeGQifagAJn76gAp+/AJ/Ad5/BAJ/Cd5/DwACdh5/EwAC3NJ/Fg12fxsAAnYcCN4CKBJ4aCJ9qAAmfvsAAt2KfvwCfwHefwQCfwnefw8AAnYqfxMAAt2afxYNdn8bAAJ2KAjeAngSeGwifagAJn77AALeWn78An8B3n8EAn8J3n8PAAJ2bn8TAALean8XAAJeJn8bAAJ2bAjeAiwSeHQSeHAifagAJn77AALfMn78An8B3n8EAn8IAn8PAALfQn8TAALfTn8UVn8bAALfQAjeApwSWCgSeHgifagAJn77AALgCn78An8B3n8EAn8J3n8PAALgGn8TAALgJn8XAAJeJn8bAALgGAjeAqQSeIASeHwifagAJn77AALg7n78An8B3n8EAn8IAn8PAALg/n8TAALhCn8UVn8bAALg/BIbRBJ4hCJ9qAAmfvsAAZiufvwCfwACfwQCfwgCfw8AAuHGfxMAAuHSfxQmfxsAAuHECN4CNBEsEniIIn2oACZ++wAC4o5+/AJ/Ad5/BAJ/Cd5/DwAC4p5/EwAC4qZ/FwACGvJ/GwAC4pwI3gIwEgL8EniMIn2oACZ++wAC425+/AJ/Ad5/BAJ/Cd5/DwAC435/EwAC44p/FCZ/GwAC43wI3gIEEniQIn2oACZ++wAC5EZ+/AJ/Ad5/BAJ/Cd5/DwACdj5/EwAC5FZ/Fg12fxsAAnY8CN4CJBJ4lCJ9qAAmfvsAAuUWfvwCfwHefwQCfwnefw8AAnZ6fxMAAuUmfxcAAl4mfxsAAnZ4EnicEniYIn2oACZ++wACdLp+/AJ/Ad5/BAJ/CAJ/DwAC5e5/EwAC5fp/FFZ/GwAC5ewSeKAifagAJn77AAEUjn78An8B3n8EAn8J3n8PAAJ2jn8TAALmtn8WEF5/GwACdowI3gJoEnioEnikIn2oACZ++wAC53Z+/AJ/Ad5/BAJ/CAJ/DwAC54Z/EwAC55J/FFZ/GwAC54QI3gJkEniwEnisIn2oACZ++wAC6E5+/AJ/Ad5/BAJ/CAJ/DwAC6F5/EwAC6Gp/Fg3CfxsAAuhcEni0In2oACZ++wABjUZ+/AJ/Ad5/BAJ/Cd5/DwACdqZ/EwAC6Sp/FwACOZp/GwACdqQI3gJ0Eni8Eni4In2oACZ++wAC6fJ+/AJ/Ad5/BAJ/CAJ/DwAC6gJ/EwAC6g5/FFZ/GwAC6gASBagSeMAifagAJn76zO5+/AJ/AAJ/BAJ/CAJ/DwAC6sp/EwAC6tZ/FwACGvJ/GwAC6sgI3gIUEiHQEnjEIn2oACZ++wAC65Z+/AJ/Ad5/BAJ/CAJ/DwAC66Z/EwAC67J/FIZ/GwAC66QSeMgifagAJn77AAEfwn78An8B3n8EAn8J3n8PAAJ2hn8TAALsbn8WEF5/GwACdoQI3gJgEnjQEnjMIn2oACZ++wAC7S5+/AJ/Ad5/BAJ/CAJ/DwAC7T5/EwAC7Up/FFZ/GwAC7TwI3gJcEnjYEnjUIn2oACZ++wAC7gZ+/AJ/Ad5/BAJ/CAJ/DwAC7hZ/EwAC7iJ/Fg3CfxsAAu4UEnjcIn2oACZ++oPafvwCfwHefwQCfwgCfw4Cbn8TAALu4n8VTn8aAmwI3gKIEnjkEnjgIn2oACZ++wAC74Z+/AJ/Ad5/BAJ/CAJ/DwAC75Z/EwAC76J/FwACGvJ/GwAC75QI3gKMEnjoIn2oACZ++wAC8Gp+/AJ/Ad5/BAJ/CAJ/DwACdf5/EwAC8Hp/FgVefxsAAnX8CN4CkBJ48BJ47CJ9qAAmfvsAAvE6fvwCfwHefwQCfwgCfw8AAvFKfxMAAvFWfxRWfxsAAvFIElvkEnj0In2oACZ++lICfvwCfwACfwQCfwgCfw8AAvISfxMAAvIefxQmfxsAAvIQEnj4In2oACZ++wABgqp+/AJ/Ad5/BAJ/Cd5/DwACdrJ/EwAC8tJ/FwACOZp/GwACdrAI3gIMEnkAEnj8In2oACZ++wAC85p+/AJ/Ad5/BAJ/CAJ/DwAC86p/EwAC87Z/FFZ/GwAC86gSeQQifagAJn77AAEgjn78An8B3n8EAn8J3n8PAAJ2mn8TAAL0cn8XAAI5mn8bAAJ2mAjeAlgSeQwSeQgifagAJn77AAL1On78An8B3n8EAn8IAn8PAAL1Sn8TAAL1Vn8UVn8bAAL1SAjeAoQSeRQSeRAifagAJn77AAL2En78An8AAn8EAn8IAn8PAAL2In8TAAL2Ln8UJn8bAAL2IBISSBJ5GCJ9qAAmfvsAAnKWfvwCfwHefwQCfwnefw8AAvbqfxMAAvb2fxcAAi/afxsAAvboCN4CcBJ5HCJ9qAAmfvsAAve+fvwCfwHefwQCfwnefw8AAna6fxMAAvfOfxcAAjmafxsAAna4CN4CbBJ5JBJ5ICJ9qAAmfvsAAviWfvwCfwHefwQCfwgCfw8AAvimfxMAAviyfxRWfxsAAvikEnksEnkoIn2oACZ++wACcS5+/AJ/AAJ/BAJ/CAJ/DwAC+W5/EwAC+Xp/FCZ/GwAC+WwSeTAifagAJn76EJZ+/AJ/AAJ/BAJ/CAJ/Dg8KfxMAAvo2fxQmfxoPCAjeAhASdGgSeTQifagAJn77AAL62n78An8AAn8EAn8IAn8PAAL66n8TAAL69n8UJn8bAAL66AjeAqASeTwSeTgifagAJn77AAL7sn78An8AAn8EAn8IAn8PAAL7wn8TAAL7zn8UJn8bAAL7wBJ5RBJ5QCJ9qAAmfvr8Sn78An8AAn8EAn8IAn8PAAL8in8TAAL8ln8UJn8Z5BJ5TBJ5SCJ9qAAmfvsAAnIGfvwCfwACfwQCfwgCfw8AAv0+fxMAAv1KfxQmfxnkHYAOfakbAAK/1wACxWMAAsYfAALG2wACx5cAAshHAALJAwACe18AAsnLAALKewACy0MAAsz3AALNvwACzn8AAs9XAALRAwAC0dMAAtOHAALUTwAC1QMAAtWvAALWiwAC11MAAtgbAALY2wAC2ZsAAtpnAALcIwAC3N8AAt2nAALedwAC31sAAuHfAALiswAC45cAAnwbAALkYwAC5TMAAuYHAALmwwAC558AAuh3AAJ83wACfacAAn57AALpNwAC6hsAAurjAALrvwAC7HsAAu1XAALuLwAC7u8AAu+vAALwhwAC8WMAAvIrAALy3wAC88MAAvR/AAL1YwACgDMAAvY7AAL3AwAC99sAAvi/AAL5hwAC+kMAAvsDAAL72BJ5VBJwfBJwhBJwjBJweB2ADwAEAAgbAAMCfwACx38AAwKLAALFSwADApcAAwKgEnpcEgdsEh40EEgSfSASffQI3g+gIk1MBYAOeTQAIoYkAA6GNAKGOAKGPAASgKwjAAPwcAALAAPwewADA98AA/B95CsAAw88IoYkAA6GNAKGOd6GPAAdbDMAAn2PAALYGwACfmMAAtjbAAJ8xwAC11MAAnY3AALc3wACgBsAAtdTAAJ/RwAC2NgjAAPnJAmADwAEAAmADn2oBwAD5zMAAwSECN4DvAjeAuwI3gL8HYAPAAP4bA8AAwW3AAMFxwADBdQI3wAD+/wdbDMAAn2PAALYAwACfmMAAtjDAAJ8xwAC1zsAAnY3A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+aXOwADPqKXPwADPrqXQgzkEposEpowEpo0Epo4Epo8EppAEppEEppIEppMEppQEppUEppYEppcEppgHWw3AAM/awADP3cAAz+DAAM/jwADP5sAAz+nAAM/swADP78AAz+DAAM/ywADP9cAAz/jAAM/7CKXKAAWlzMAAyM6lzcAAz9SlzsAAz9elz8AAz/6l0IM5BKaZBKaaBKabBKacBKadB1sEwADQWcAA0FzAANBfwADQYgilygAFpczAAMjipc3AAM/Upc7AANBWpc/AANBlpdCDOQSmngdbAcAA0JkIpcoABaXMwADIcKXNodmlzqHcpc/AANCcpdCDOQSmnwilygAFpczAAMv0pc3AAGdGpc7AANDApc95pdCDOQSmoASmoQSmogdbAcAA0OcIpcoABaXMwADMdqXNwADQ4aXOwADQ5KXPwADQ6qXQgzkEpqMEpqQEpqUHWwHAANEYCKXKAAWlzMAAzIilzcAA0RKlzsAA0RWlz8AA0Rul0IM5BKamBKanBKaoBKapB1sCwADRScAA0UwIpcoABaXMwADMmqXNwADRQ6XOwADRRqXPwADRT6XQgzkEpqoIpcoABaXMwADMUqXNwADRe6XOeaXPeaXQgzkEpqsEpqwHWwHAANGcCKXKAAWlzMAAyPSlzcAA0Zmlznmlz8AA0Z+l0IM5BKatCKXKAAWlzMAAyBilzcAA0cSlznmlz3ml0IM5BKauBKavB1sBwADR5QilygAFpczAAM0Gpc3AANHipc55pc/AANHopdCDOQSmsASmsQSmsgdbAsAA0hDAANITCKXKAAWlzMAAzOKlzcAA0g2lznmlz8AA0hal0IM5BKazBKa0B1sBwADSQgilygAFpczAAMz0pc3AANI/pc55pc/AANJFpdCDOQSmtQSmtgdbAcAA0m0IpcoABaXMwADNGKXNwADSaqXOeaXPwADScKXQgzkEprcEprgHWwHAANKYCKXKAAWlzMAAzSqlzcAA0pWlznmlz8AA0pul0IM5BKa5CKXKAAWlzMAAzBqlzcAA0sClznmlz3ml0IM5BKa6BKa7B1sBwADS4QilygAFpczAAM1gpc3AANLepc55pc/AANLkpdCDOQSmvASmvQdbAcAA0wwIpcoABaXMwADNPKXNwADTCaXOeaXPwADTD6XQgzkEpr4Epr8EpsAEpsEEpsIEpsMEpsQHWwbAANM3wADTOsAA0z3AANNAwADTQ8AA00YIpcoABaXMwADNTqXNwADTNKXOeaXPwADTSaXQgzkHWyrAAMhMwADPh8AAyF7AAM+1wADIzsAA0DXAAMjiwADQeMAAyHDAANCjwADL9MAA0MPAAMx2wADQ8cAAzIjAANEiwADMmsAA0VrAAMxSwADRfsAAyPTAANGmwADIGMAA0cfAAM0GwADR78AAzOLAANIhwADM9MAA0kzAAM0YwADSd8AAzSrAANKiwADMGsAA0sPAAM1gwADS68AAzTzAANMWwADNTsAA02QIwAD5yQJgA6VlYAOlygHAAPnMwADTggSmxQilygAFpczAAMeIpc3AANREpc55pc95pdCDOQSmxgilygAFpczAAMgYpc3AANRipc55pc95pdCDOQSmxwilygAFpczAAMw+pc3AANSApc55pc95pdCDOQSmyAilygAFpczAAMiEpc3AANSepc55pc95pdCDOQSmyQilygAFpczAAM1Opc3AANS8pc55pc95pdCDOQSmygilygAFpczAAMzQpc3AANTapc55pc95pdCDOQSmywSmzASmzQdbAcAA1P4IpcoABaXMwADLKqXNwADU+KXOwADU+6XPwADVAaXQgzkEps4Eps8EptAEptEHWwLAANUvwADVMgilygAFpczAAMtypc3AANUppc7AANUspc/AANU1pdCDOQSm0gSm0wSm1AdbAcAA1WcIpcoABaXMwADLvKXNwADVYaXOwADVZKXPwADVaqXQgzkEptUIpcoABaXMwADLhKXNwADVkqXOeaXPeaXQgzkEptYEptcIpcoABaXMwADLlqXNwADVsKXOwADVs6XPeaXQgzkEptgEptkIpcoABaXMwADLPKXNwADV1KXOwADV16XPeaXQgzkEptoEptsEptwHWwHAANX+CKXKAAWlzMAAy06lzcAA1filzsAA1fulz8AA1gGl0IM5BKbdBKbeBKbfB1sBwADWLwilygAFpczAAMuopc3AANYppc7AANYspc/AANYypdCDOQSm4ASm4QilygAFpczAAMkIpc3AANZapc7AANZdpc95pdCDOQSm4gilygAFpczAAMtgpc3AANZ+pc7AANZdpc95pdCDOQSm4wilygAFpczAAMvipc3AANafpc55pc95pdCDOQSm5ASm5QilygAFpczAAMrypc3AANa9pc7AANbApc95pdCDOQSm5gSm5wSm6ASm6QdbA8AA1uTAANbnwADW6gilygAFpczAAMsEpc3AANbhpc7AANbApc/AANbtpdCDOQSm6gSm6wilygAFpczAAMvQpc3AANcdpc7AANcgpc95pdCDOQSm7AilygAFpczAAM10pc3AANdBpc55pc95pdCDOQilygAFpczAAM2Gpc3AANdBpc55pc95pdCDOQSm7QilygAFpczAAM2Ypc3AANd6pc55pc95pdCDOQSm7gilygAFpczAAM2qpc3AANeYpc55pc95pdCDOQSm7wSm8ASm8QdbAcAA17wIpcoABaXMwADIB6XNwADXtqXOwADXuaXPwADXv6XQgzkEpvIEpvMEpvQEpvUHWwLAANftwADX8AilygAFpczAAMb5pc3AANfnpc7AANfqpc/AANfzpdCDOQSm9gSm9wSm+AdbAcAA2CUIpcoABaXMwADHDaXNwADYH6XOwADYIqXPwADYKKXQgzkEpvkEpvoEpvsHWwHAANhWCKXKAAWlzMAAyKilzcAA2FClzsAA2FOlz8AA2Fml0IM5BKb8BKb9BKb+B1sBwADYhwilygAFpczAAMi6pc3AANiBpc7AANiEpc/AANiKpdCDOQSm/wilygAFpczAAMeqpc3AANiypc55pc95pdCDOQSnAAilygAFpczAAMe7pc3AANjQpc55pc95pdCDOQSnAQilygAFpczAAMfNpc3AANjupc55pc95pdCDOQSnAgilygAFpczAAMfzpc3AANkMpc55pc95pdCDOQSnAwilygAFpczAAMfhpc3AANkqpc55pc95pdCDOQSnBAilygAFpczAAMxkpc3AANlIpc55pc95pdCDOQSnBQilygAFpczAAMnQpc3AANlmpc55pc95pdCDOQSnBgilygAFpczAAMocpc3AANmEpc55pc95pdCDOQSnBwilygAFpczAAMmopc3AANmipc55pc95pdCDOQSnCAilygAFpczAAMpWpc3AANnApc55pc95pdCDOQSnCQilygAFpczAAMp8pc3AANnepc55pc95pdCDOQSnCgilygAFpczAAMqQpc3AANn8pc55pc95pdCDOQSnCwilygAFpczAAMn2pc3AANoapc55pc95pdCDOQSnDAilygAFpczAAMpopc3AANo4pc55pc95pdCDOQSnDQilygAFpczAAMlYpc3AANpWpc55pc95pdCDOQSnDgilygAFpczAAMlspc3AANp0pc55pc95pdCDOQSnDwilygAFpczAAMmUpc3AANqSpc55pc95pdCDOQSnEAilygAFpczAAMmApc3AANqwpc55pc95pdCDOQSnEQilygAFpczAAMpCpc3AANrOpc55pc95pdCDOQSnEgilygAFpczAAMowpc3AANrspc55pc95pdCDOQSnEwilygAFpczAAMm8pc3AANsKpc55pc95pdCDOQSnFAilygAFpczAAMoKpc3AANsopc55pc95pdCDOQSnFQilygAFpczAAMqkpc3AANtGpc55pc95pdCDOQSnFgilygAFpczAAMlEpc3AANtkpc55pc95pdCDOQSnFwilygAFpczAAMq4pc3AANuCpc55pc95pdCDOQSnGAilygAFpczAAMsYpc3AANugpc55pc95pdCDOQSnGQilygAFpczAAMrKpc3AANu+pc55pc95pdCDOQSnGgilygAFpczAAMrepc3AANvcpc55pc95pdCDOQSnGwilygAFpczAAMnipc3AANv6pc55pc95pdCDOQSnHAilygAFpczAAMkcpc3AANwYpc55pc95pdCDOQSnHQilygAFpczAAMkwpc3AANw2pc55pc95pdCDOQSnHgilygAFpczAAMdQpc3AANxUpc55pc95pdCDOQSnHwSnIAilygAFpczAAMiWpc3AANxypc7AANx1pc95pdCDOQSnIQilygAFpczAAMg6pc3AANyWpc7AANx1pc95pdCDOQSnIgSnIwilygAFpczAAMgppc3AANy3pc7AANy6pc95pdCDOQSnJASnJQilygAFpczAAMyspc3AANzbpc7AANzepc95pdCDOQSnJgilygAFpczAAMy+pc3AANz/pc7AANzepc95pdCDOQSnJwSnKAilygAFpczAAMwspc3AAN0gpc7AAN0jpc95pdCDOQSnKQilygAFpczAAMwIpc3AAN1Epc55pc95pdCDOQSnKgilygAFpczAAM3Opc3AAN1ipc55pc95pdCDOQSnKwilygAFpczAAM28pc3AAN2Apc55pc95pdCDOQSnLAilygAFpczAAM3gpc3AAN2epc55pc95pdCDOQSnLQilygAFpczAAM30pc3AAN28pc55pc95pdCDOQdbgJDAAMeIwADUR8AAyBjAANRlwADMPsAA1IPAAMiEwADUocAAzU7AANS/wADM0MAA1N3AAMsqwADVCMAAy3LAANVAwADLvMAA1XHAAMuEwADVlcAAy5bAANW2wADLPMAA1drAAMtOwADWCMAAy6jAANY5wADJCMAA1mDAAMtgwADWgcAAy+LAANaiwADK8sAA1sPAAMsEwADW/MAAy9DAANcjwADNdMAA10TAAM2GwADXX8AAzZjAANd9wADNqsAA15vAAMgHwADXxsAAxvnAANf+wADHDcAA2C/AAMiowADYYMAAyLrAANiRwADHqsAA2LXAAMe7wADY08AAx83AANjxwADH88AA2Q/AAMfhwADZLcAAzGTAANlLwADJ0MAA2WnAAMocwADZh8AAyajAANmlwADKVsAA2cPAAMp8wADZ4cAAypDAANn/wADJ9sAA2h3AAMpowADaO8AAyVjAANpZwADJbMAA2nfAAMmUwADalcAAyYDAANqzwADKQsAA2tHAAMowwADa78AAybzAANsNwADKCsAA2yvAAMqkwADbScAAyUTAANtnwADKuMAA24XAAMsYwADbo8AAysrAANvBwADK3sAA29/AAMniwADb/cAAyRzAANwbwADJMMAA3DnAAMdQwADcV8AAyJbAANx4wADIOsAA3JnAAMgpwADcvcAAzKzAANzhwADMvsAA3QLAAMwswADdJsAAzAjAAN1HwADNzsAA3WXAAM28wADdg8AAzeDAAN2hwADN9MAA3b8IwAD5yQJgA6VlYAOlygHAAPnMwADd2gSnfwSngQSGeASoAQI3wP///wdgA6iHAAjAAPnJAmADwAEAAmADwABWsgHAAPnMgmYKqJsEqQQEqTQEqWIIqiwAAqouIaowwADgbwSpZAiqLAACqi5TqjDAAOCAAjeCAAI3kAAEqXIIqiwAAqouguGqMMAA4JkEqYAIqiwAAqougVeqMMAA4KsEqYsIqiwAAqougj+qMMAA4L0CN4QABKmWCKosAAKqLoQUqjDAAODTB2ADwABYQwAEqZ4IqiwAAqouwACSB6owwADg7QSpoQiqLAACqi7AAJhbqjDAAOEBAjeIAAdgA8AA/2gABKnYCKosAAKqLgmqMMAA4SEEqdkIqiwAAqouFaowwADhMgSp2giqLAACqi6DXaowwADhQwSp2wiqLAACqi6EEaowwADhVQdgA6osDMAA4STAAOE1wADgcsAA4IPAAOCuwADgwMAA4JzAAODwwADhRsAA4VjAAODWwADhBAScHASqFQScLQSqFgSfjQSqFwScLASqGASqGQSqGgdgA8ABAAIgwACgp8AAoU/AAKGHwAChv8AAoffAAKIvwACiZ8AAotfAAKNHwACjt8AAo+/AAKRfwAClP8AApXfAAKWvwACl58AApsfAAKdvwACn38AAqPjAAKkwwACquMAAqvDAAKwIwACsQMAArLDAAKzowACtIMAArVjAAK3IwACuOMAArnAEgcYHYAPAAQACFMAAnaHAAJ2jwACdpsAAnazAAJ2pwACdrsAAnZjAAJ2SwACdlcAAvbrAAJ2ewACdm8AAnY3AAJ2PwACdh8AAnYrAAJ2CwAC4p8AAuN/AAOJDCMAA+ckCYAPAAQACYAOJugHAAPnMgmYCOasDB2ADiokABKszCKwlAAKsJwmsKcAA4r8EqzQIrCUAAqwnFawpwADi0AdgA6wlAsAA4sLAAOLTB2ADhcQACKyOAAAEq+MIsXgAArF6IbF8wADi+gixhgACsYjAAOL9sYl5CLFyAAKxdHmxdXkIsXIAArF0wACdYLF1eQixcgACsXSEqrF1eQixcgACsXSEm7F1eQivcwAAB2ADr+sDwADCpsAAwubAAMSIBK1cCLAPAAKwEQmwE8AA42EErV0IsA8AArARFbATwADjcgStXgiwDwACsBEhsBPAAOODBK1fCLAPAAKwEVOwE8AA45QErWAIsA8AArARgVewE8AA46UErWEIsA8AArARgj+wE8AA47cErWIIsA8AArARguGwE8AA48kHYAOwDwfAAONkwADjdcAA44bAAOOXwADjqMAA47rAAOPMCLAgAAKwIsAA42SwIxUIsCAAArAiwADjdbAjIQiwIAACsCLAAOOGsCOBVwiwIAACsCLAAOOXsCODXQiwIAACsCLAAOOosCODcAiwIAACsCLAAOO6sCODSgiwIAACsCLAAOPMsCMJBK2TCLBhAAKwYwmwZcAA5GMErZQIsGEAArBjFbBlwADkdAStlQiwYQACsGMhsGXAAOSFBK2WCLBhAAKwY1OwZcAA5JYErZcIsGEAArBjgVewZcAA5KcErZgIsGEAArBjgj+wZcAA5LkErZkIsGEAArBjguGwZcAA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AOuxwADrw8AA69fAAOvrwADr/cAA7BHAAOwlwADsN8AA7EvAAOxfwADsc8AA7IfAAOybwADsr8AA7MPAAOzXwADs68AA7P/AAO0TwADtJ8AA7TnAAO1NwADtYcAA7XPAAO2HwADtmcAA7a3AAO2/wADt08AA7efAAO37wADuD8AA7iHAAO41wADuScAA7l3AAO5xwADug8AA7pfAAO6pwADuu8AA7s3AAO7fwADu8cAA7wPAAO8VwADvJwSxOwSxPASxPQSxPgSxPwSxQASxQQSxQgSxQwSxRASxRQSxRgSxRwSxSASxSQSxSgSxSwSxTASxTQSxTgSxTwSxUASxUQSxUgSxUwSxVASxVQSxVgSxVwSxWASxWQSxWgSxWwSxXASxXQSxXgSxXwSxYASxYQSxYgSxYwSxZASxZQSxZgSxZwSxaASxaQSxagSxawSxbASxbQSxbgSxbwSxcASxcQSxcgSxcwSxdAjAAJgeAATAAJggCcAAmCEAwACYIgDAAJgjwACseAjAAJgeAATAAJggFcAAmCF3wACYIgDAAJgjwACg3wSaDgjAAJgeAATAAJggIcAAmCF3wACYInfAAJgjwADxDASaDAjAAJgeAATAAJggU8AAmCEAwACYInfAAJgjwADxLQdgA8AAmB4EwADw0MAA8O7AAPEPwADxMAQgBF4EnLoEXASvJQSB6QSdWQSFngRhBLHYBLHZBLHaBLHbBLHcBLHdBLHeCMAAaloAAsAAalzAAPFmwABqXQAIwABqWgACwABqXMAA8WjAAGpdAAjAAGpaAALAAGpcwACjf8AAal0ACMAAaloAAsAAalzAAPFtwABqXQAEXQjAAGpaAALAAGpcwADx4sAAal0ACMAAaloAAsAAalzAAPF1wABqXQAEIwjAAGpaAALAAGpcwADyDMAAal0ACMAAaloAAsAAalzAALinwABqXQAIwABqWgACwABqXMAAuN/AAGpdAAjAAGpaAALAAGpcwADxe8AAal0ACMAAaloAAsAAalzAAPF4wABqXQAEseYIwABqWgACwABqXMAA8nLAAGpdAAjAAGpaAALAAGpcwADxfcAAal0ABJyqCMAAaloAAsAAalzAAPKdwABqXQAIwABqewACwABqgwnAAGqECQjAAGp7AALAAGqDCcAAaoQVBIPGCMAAaloAAsAAalzAAPLWwABq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WAjAAE7mAALAAE7oU8AATurAAQD5BL1ZCMAATuYAAsAATuiBV8AATurAAQEQBL1aCMAATuYAAsAATuiCP8AATurAAQEoBL1bCMAATuYAAsAATuiC4cAATurAAQFABL1cCMAATuYAAsAATujAAJIHwABO6sABAVgEvV0IwABO5gACwABO6INdwABO6sABAXIEvV4IwABO5gACwABO6IQRwABO6sABAYoEvV8IwABO5gACwABO6IQUwABO6sABAaIEvWAIwABO5gACwABO6MAAmFvAAE7qwAEBugS9YQjAAE7mAALAAE7owACXicAATurAAQHUBL1iCMAATuYAAsAATuiEF8AATurAAQHuBL1jCMAATuYAAsAATujAAI5mwABO6sABAgYEvWQIwABO5gACwABO6MAAi/bAAE7qwAECIAS9ZQjAAE7mAALAAE7og3DAAE7qwAECOgS9ZgjAAE7mAALAAE7owACGvMAATurAAQJSBL1nCMAATuYAAsAATujAAIeUwABO6sABAmwEvWgIwABO5gACwABO6MAAhfzAAE7qwAEChgS9aQjAAE7mAALAAE7owABy2MAATurAAQKgBL1qCMAATuYAAsAATujAAH94wABO6sABAroEvWsIwABO5gACwABO6MAAfuXAAE7qwAEC1AS9bAjAAE7mAALAAE7owABtB8AATurAAQLuBL1tCMAATuYAAsAATujAAGxHwABO6sABAwgEvW4IwABO5gACwABO6MAAeoDAAE7qwAEDIgS9bwjAAE7mAALAAE7owABsFMAATurAAQM8BL1wCMAATuYAAsAATujAAGvhwABO6sABA1YEvXEIwABO5gACwABO6MAAa27AAE7qwAEDcAdgA8AATuYdwAEAt8ABAM7AAQDlwAEA/MABARPAAQErwAEBQ8ABAVvAAQF1wAEBjcABAaXAAQG9wAEB18ABAfHAAQIJwAECI8ABAj3AAQJVwAECb8ABAonAAQKjwAECvcABAtfAAQLxwAEDC8ABAyXAAQM/wAEDWcABA3MEvdsIwACI6gACwACI7AnAAIjuwAEEBgS93AjAAIjqAALAAIjsFcAAiO7AAQQdBL3dCMAAiOoAAsAAiOzAAIX8wACI7sABBDQEvd4IwACI6gACwACI7MAActjAAIjuwAEETgS93wjAAIjqAALAAIjswACHlMAAiO7A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mFvAAGAKwAEZhQTAAEWnCMAAYHIAAsAAYHQJwABgdsABGaEEwABFqAjAAGAGAALAAGAIwACXicAAYArAARm6BMAARasIwABgmAACwABgmgnAAGCcwAEZ1gTAAEWsCMAAYAYAAsAAYAiDXcAAYArAARnvBMAARbAIwABgIgACwABgJBXAAGAmwAEaCQTAAEWzCMAAYCIAAsAAYCQJwABgJsABGiIEwABFtQjAAGAGAALAAGAIguHAAGAKwAEaOwTAAEW2CMAAYAYAAsAAYAjAAJIHwABgCsABGlUEwABFuAjAAGAGAALAAGAIgj/AAGAKwAEacQTAAEW5CMAAYAYAAsAAYAhTwABgCsABGosEwABFugjAAGAGAALAAGAICcAAYArAARqkBMAARbwIwABgBgACwABgCIFXwABgCsABGr0EwABFvQjAAGAGAALAAGAIIcAAYArAARrXBMAARb4IwABgBgACwABgCBXAAGAKwAEa8ATAAEW/CMAAYAYAAsAAYAiEEcAAYArAARsJBMAARcUIwABgPQACwABgPwnAAGBBwAEbIwTAAEXGCMAAYD0AAsAAYD8VwABgQcABGzwEwABFxwjAAGA9AALAAGA/gj/AAGBBwAEbVQTAAEXICMAAYD0AAsAAYD9TwABgQcABG28EwABFygjAAGA9AALAAGA/gVfAAGBBwAEbiATAAEXMCMAAYD0AAsAAYD+C4cAAYEHAARuiBMAARc4IwABgPQACwABgPyHAAGBBwAEbvATAAEXSCMAAYE4AAsAAYFAJwABgUsABG9UEwABF0wjAAGBOAALAAGBQFcAAYFLAARvuBMAARdQIwABgTgACwABgUCHAAGBSwAEcBwTAAEXVCMAAYE4AAsAAYFBTwABgUsABHCAEwABF1wjAAGAGAALAAGAIhBTAAGAKwAEcOQTAAEXYCMAAYFwAAsAAYF4JwABgYMABHFMEwABF2QjAAGBcAALAAGBeFcAAYGDAARxsBMAARdsIwABgLgACwABgMAnAAGAywAEchQTAAEXdCMAAYC4AAsAAYDAVwABgMsABHJ4EwABF3gjAAGAuAALAAGAwIcAAYDLAARy3BMAARd8IwABgLgACwABgMFPAAGAywAEc0ATAAEXgCMAAYC4AAsAAYDCBV8AAYDLAARzpBMAAReIIwABgBgACwABgCMAAjmbAAGAKwAEdAwTAAEXkCMAAYAYAAsAAYAiDcMAAYArAAR0fBMAARegIwABgBgACwABgCMAAhrzAAGAKwAEdOQTAAEXrCMAAYgYAAsAAYgiBV8AAYgrAAR1VBMAARewIwABiBgACwABiCCHAAGIKwAEdbwTAAEXtCMAAYgYAAsAAYghTwABiCsABHYgEwABF7gjAAGIGAALAAGIIgj/AAGIKwAEdoQTAAEXvCMAAYgYAAsAAYggVwABiCsABHbsEwABF8AjAAGIGAALAAGIICcAAYgrAAR3UBMAARfEIwABiBgACwABiCILhwABiCsABHe0EwABF8gjAAGIGAALAAGIIwACSB8AAYgrAAR4HBMAARfMIwABiBgACwABiCINdwABiCsABHiMEwABF9gjAAGIGAALAAGIIhBHAAGIKwAEePQTAAEX3CMAAYgYAAsAAYgiEFMAAYgrAAR5XBMAARfgIwABiBgACwABiCMAAi/bAAGIKwAEecQTAAEX5CMAAYgYAAsAAYgjAAIa8wABiCsABHo0EwABF+gjAAGIGAALAAGIIwACYW8AAYgrAAR6pBMAARfsIwABiBgACwABiCINwwABiCsABHsUEwABF/QjAAGIGAALAAGIIhBfAAGIKwAEe3wTAAEX+CMAAYgYAAsAAYgjAAI5mwABiCsABHvkEwABF/wjAAGIGAALAAGIIwACXicAAYgrAAR8VBMAARgIIwABgBgACwABgCMAAi/bAAGAKwAEfMQjAAF7+AAAEwABGFAjAAGByAALAAGB0FcAAYHbAAR9UBMAARhUIwABgcgACwABgdCHAAGB2wAEfbQTAAEYWCMAAYHIAAsAAYHRTwABgdsABH4YEwABGFwjAAGByAALAAGB0gVfAAGB2wAEfnwTAAEYYCMAAYHIAAsAAYHSCP8AAYHbAAR+5BMAARhkIwABgcgACwABgdILhwABgdsABH9MEwABGGgjAAGByAALAAGB0wACSB8AAYHbAAR/tBMAARhsIwABgcgACwABgdINdwABgdsABIAkEwABGHAjAAGByAALAAGB0hBHAAGB2wAEgIwdgA8AAYHIKwAEZpsABH1nAAR9ywAEfi8ABH6TAAR++wAEf2MABH/LAASAOwAEgKAjAAGQ6AAAIwABkRAAACMAAZE8AAATAAEYfCMAAYJgAAsAAYJoVwABgnMABIIIEwABGIAjAAGCYAALAAGCaIcAAYJzAASCbBMAARiEIwABgmAACwABgmlPAAGCcwAEgtATAAEYiCMAAYJgAAsAAYJqBV8AAYJzAASDNBMAARiMIwABgmAACwABgmoI/wABgnMABIOcEwABGJAjAAGCYAALAAGCaguHAAGCcwAEhAQTAAEYlCMAAYJgAAsAAYJrAAJIHwABgnMABIRsEwABGJgjAAGCYAALAAGCag13AAGCcwAEhNwTAAEYnCMAAYJgAAsAAYJqEEcAAYJzAASFRBMAARigIwABgmAACwABgmoQUwABgnMABIWsEwABGKQjAAGCYAALAAGCawACYW8AAYJzAASGFBMAARioIwABgmAACwABgmsAAl4nAAGCcwAEhoQdgA8AAYJgNwAEZ28ABIIfAASCgwAEgucABINLAASDswAEhBsABISDAASE8wAEhVsABIXDAASGKwAEhpgjAAJDqAAGJLYSkBMAARisHYAPAAGAiAsABGifAARoOB2ADwABiBhLAAR3ZwAEdwMABHXTAAR2NwAEdWsABHabAAR3ywAEeDMABHijAAR5CwAEeXMABHq7AAR8awAEe5MABHv7AAR52wAEeysABHpIHYAPAAGA9B8ABGyjAARtBwAEbwcABG3TAARuNwAEbWsABG6cHYAPAAGBOBMABG9rAARvzwAEcDMABHCUHYAPAAGBcAsABHFjAARxxB2ADwABgBhLAARqpwAEa9cABGtzAARqQwAEawsABGnbAARpAwAEaWsABGfTAARsOwAEcPsABGYrAARm/wAEZcMABHQjAAR82wAEdJMABHT4HYAPAAGAuBcABHIrAARyjwAEcvMABHNXAARzuCMAAmX4AAAjAAGp7AALAAGqDFcAAaoQJCMAAansAAsAAaoMVwABqhBUHYAPAAGI4AAMAAAAAAAD4/wjAAGKrAAHAAGKtwAEjUgMAAAAAAADwfwjAAGKrAAHAAGKtwAEjagMAAAAAAADw/wjAAGKrAAHAAGKtwAEjggMAAAAAAAAAAAjAAGKrAAHAAGKtwAEjmgMAAAAAAADwPwjAAGKrAAHAAGKtwAEjsgjAAGLSAAAIwABi4AAAB2ADwABkKAAKwACaGAjAAHp+AAAEwABIBgTAAEgHBMAASAgEgm4EwABICQSaXQSsdQTAAEgKBMAASAsHYAPAAQACVsAAoU/AAKNHwAEj7MABI/HAAKGHwACjt8AAqPjAAK3IwAChv8AApa/AAKrwwACuAMAAomfAAKXnwACsQMAArjjAASP2wAEj+8AArLDAAK5wwACi18AApsfAAKzowAEj/sAAp2/AAK1YwACh98AAo+/AAKRfwACsCMAAoi/AAKQnwACnN8AApv/AASQDwAEkBsABJAnAAK6owACnp8AAwM7AASQOwACr0MAAoU/AAKNHwACnb8ABI/HAAKGHwACjt8ABI+zAAK3IwAChv8AApCfAAKj4wACuAMAAoffAAKRfwACq8MAArjjAAKIvwAClr8AArAjAAK5wwACiZ8AApefAAKxAwACuqMABI/bAASP7wACssMAAotfAAKbHwACs6MABI/7AAKc3wACtWMAArqjAASQDwACr0MAAo+/AAKEXwACm/8AAwM7AASQOwACnp8ABJAbAASQJBMAASA0EwABIDgSZNASaiQRbB2ADwAEAAgbAASVzwAEleMABJX3AAPFmwAElgMABJYMEwABHHQTAAEceBMAASBAEwABIEQTAAEgSBIbJBKrBBMAASBMEwABIFATAAEgVBMAASBYEnB0EwABIFwTAAEgYBMAASBkEwABIGgTAAEgbBMAASBwEwABIHQTAAEgeBMAASB8EvBoEwABIIATAAEghBMAARK4EoOwEwABIIgTAAEgjBMAASCQEl0UEwABIJQTAAEgmBMAASCcEwABIKATAAEgpBMAASCoEwABIKwS+UwTAAEgsBMAASC0EwABILgTAAEgvBMAASDAEhGAEwABIMQTAAEgyBMAASDMEwABINATAAEg1BMAASDYEgL0EwABINwTAAEg4BMAASDkEwABIOgTAAEg7BMAASDwEhFcEwABIPQTAAEg+BMAASD8EwABIQATAAEhBBMAASEIEwABIQwSZ3ATAAEhEBMAASEUEuisEwABIRgTAAEhHBKiGBMAASEgEwABISQTAAEhKBMAASEsEwABITATAAEhNBMAASE4EwABITwTAAEhQBMAASFEEgowEwABIUgTAAEhTBMAASFQEtLIEwABIVQTAAEhWBMAASFcEwABIWATAAEhZBMAASFoEwABIWwTAAEhcBMAASF0EwABIXgTAAEhfBMAASGAEwABIYQTAAEhiBKWLBMAASGMEwABIZATAAEhlBMAASGYEwABIZwTAAEhoBMAASGkEwABIagTAAEhrBMAASGwEwABIbQTAAEhuBMAASG8EwABIcATAAEhxBMAASHIEwABIcwTAAEh0BMAASHUEwABIdgTAAEh3BKTMBMAASHgEwABIeQTAAEh6BMAASHsEwABIfATAAEh9BMAASH4EwABIfwTAAEiABMAASIEEwABIggTAAEiDBMAASIQEwABIhQTAAEiGBMAASIcEwABIiATAAEiJBMAASIoEwABIiwTAAEiMBMAASI0EwABIjgTAAEiPBMAASJAEwABIkQTAAEiSBMAASJMEwABIlATAAEiVBMAASJYEwABIlwTAAEiYBMAASJkEwABImgTAAEibBMAASJwEwABInQTAAEieBMAASJ8EwABIoATAAEihBMAASKIEwABIowTAAEikBMAASKUEwABIpgTAAEinBMAASKgEwABIqQTAAEiqBMAASKsEwABIrATAAEitBMAASK4EnBAEwABIrwTAAEiwBMAASLEEwABIsgTAAEizBMAASLQEnG8ElwwEwABItQTAAEi2BMAASLcEwABIuATAAEi5BMAASLoEwABIuwTAAEi8BMAASL0EwABIvgTAAEi/BMAASMAEwABIwQTAAEjCBMAASMMEwABIxATAAEjFBMAASMYEwABIxwTAAEjIBMAASMkEwABIygTAAEjLBMAASMwEwABIzQTAAEjOBMAASM8EwABI0ATAAEjRBMAASNIEgnkEwABI0wTAAEjUBIJBBIcEBMAASNUEwABI1gTAAEjXBIRRBMAASNgEguMEwABI2QTAAEjaBMAASNsEwABI3ATAAEjdBMAASN4EwABI3wTAAEjgBMAASOEEwABI4gTAAEjjBMAASOQEwABI5QTAAEjmBMAASOcEwABI6ATAAEjpBMAASOoEwABI6wTAAEjsBIf/BMAASO0EwABI7gTAAEjvBMAASPAEwABI8QTAAEjyBJwlBJyWB2ADwAEAAoERwAElpcABJarAASWvwAElgMABJbTAASW5wAElvsABJcHAASXEwAElycABJc7AASXTwAEl2MAAph/AASXbwADApcABJeDAASXlwAEl6sABJe/AAJmQwAEl9MABJfnAASX+wAEmA8ABJgjAASYLwAEmEMABJYPAASYVwAEmGsABJh3AASYiwAEmJ8ABJizAASYvwAEmNMABJjnAASY+wAEmQ8ABJkjAASZNwAEmUsABJlXAASZawAEmX8ABJmTAASZpwADxe8ABJm7AASZxwAEmdsABJnvAASaAwAEmhcABJorAASaPwAEmksABJpfAASacwAEmocABJqbAASarwAEmsMABJrPAASa4wAEmvcABJsLAASbHwAEmzMABJtHAASbWwAEm2cABJt7AASbjwAEm5sABJuvAASbwwAEm88ABJvjAASb9wAEnAsABJwfAAScMwAEnEcABJxbAAScbwAEnIMABJyXAAScowAEnLcABJzLAASc3wAEnOsABJhXAASc/wAEnRMABJ0nAASdOwAEnU8ABJ1jAASddwAEnYsABJ2fAASdswAEnccABJ3bAASd7wAEngMABJ4PAASeIwAEnjcABJ5LAASeXwAEnnMABJ6HAASemwAEnq8ABJ7DAASe1wAEnusABJ7/AASfEwAEnycABJ87AASfTwAEn2MABJ93AASfiwAEn58ABJ+zAASfvwAEn9MABJ/nAASf+wAEoA8ABKAjAASgNwAEoEsABKBfAASgcwAEoIcABKCbAASgrwAEoMMABKDXAASg6wAEoP8ABKETAAShJwAEoTsABKFPAAShYwAEoXcABKGLAAShnwAEobMABKHHAASh2wAEoe8ABKIDAASiFwAEoisABKI/AASiUwAEomcABKJ7AASijwAEoqMABKK3AASiywAEkA8AArqjAASi3wAEovMABKMHAASjGwAEoy8ABKNDAASjVwAEo2sABKN/AASjkwAEo6cABKO7AASjzwAEo+MABKP3AASkCwACkz8ABKQXAASkKwAEpD8ABKRTAASkZwAEpHsABJifAAPIMwAEpI8ABJX3AASV4wAEpJsABKSnAASkuwAEpM8ABKTjAASk9wAEpQsABKUfAASlMwAEpUcABKVbAASlbwAEpYMABKWXAASlqwAEpb8ABKXTAASl5wAEpfsABKYPAASmIwAEpjcABKZLAASmXwAEpnMABKaHAASmmwAEpq8ABKbDAASm1wAEpusABKRTAASm/wAEpwsABKcfAASnMwAEpz8ABKdLAASnXwAEp3MABKeHAASnkwAEp6cABKezAASnxwAEp9sABKfvAASoAwAEqBcABKgrAASoPwAEqFMABKhnAASoewAEqI8ABKijAASotwAEqMsABKjfAASo8wAEqQcABKkbAASpLwAEqUMABKlPAASpYwAEqXcABKmLAASpnwAEqbMABKnHAASp0BIPZBIPaBIdwBMAASPQEg9AEwABI9QTAAEj2BMAASPcErbEEhAgEmaEEhzYEg+gEwABI+ASa3ATAAEj5BJdOBJaiBIJ6BJl7BIQJBMAASPoEwABI+wTAAEj8BMAASP0HYAPAAQACGcABLsTAAS7HwAEuysABLs3AAS7SwAEu1cABLtrAAS7fwAEu5MABLufAAS7qwAEu7cABLvDAAS7zwAEu+MABLvvAAS8AwAEvA8ABLwbAAS8JwAEvDMABLw/AAS8UwAEvGcABLx4EqtwEDAdgA8ABAAICwAEvj8ABL5IEwABJEQI33////wI5wABJ1gTAAEoPCMAAnC4AAsAAnDAJwACcMsABL7UEwABKEAjAAJwuAALAAJwwFcAAnDLAAS/OBMAAShEIwACcLgACwACcMCHAAJwywAEv5wTAAEoSCMAAnC4AAsAAnDBTwACcMsABMAAEwABKEwjAAJwuAALAAJwwgVfAAJwywAEwGQTAAEoUCMAAnC4AAsAAnDCCP8AAnDLAATAzBMAAShUIwACcLgACwACcMILhwACcMsABME0EwABKFgjAAJwuAALAAJwwwACSB8AAnDLAATBnBMAAShcIwACcLgACwACcMINdwACcMsABMIMEwABKGAjAAJwuAALAAJwwhBHAAJwywAEwnQTAAEoZCMAAnC4AAsAAnDCEFMAAnDLAATC3BMAAShoIwACcLgACwACcMMAAmFvAAJwywAEw0QTAAEobCMAAnC4AAsAAnDDAAJeJwACcMsABMO0EwABKHAjAAJwuAALAAJwwhBfAAJwywAExCQTAAEodCMAAnC4AAsAAnDDAAI5mwACcMsABMSMEwABKHgjAAJwuAALAAJwwwACL9sAAnDLAATE/BMAASh8IwACcLgACwACcMINwwACcMsABMVsEwABKIAjAAJwuAALAAJwwwACGvMAAnDLAATF1BMAASiEIwACcLgACwACcMMAAh5TAAJwywAExkQTAAEoiCMAAnC4AAsAAnDDAAIX8wACcMsABMa0EwABKJAjAAJwuAALAAJwwwABy2MAAnDLAATHJBMAASiYIwACcLgACwACcMMAAf3jAAJwywAEx5QTAAEooCMAAnC4AAsAAnDDAAH7lwACcMsABMgEEwABKKgjAAJwuAALAAJwwwABtB8AAnDLAATIdBMAASiwIwACcLgACwACcMMAAbEfAAJwywAEyOQTAAEouCMAAnC4AAsAAnDDAAHqAwACcMsABMlUEwABKMAjAAJwuAALAAJwwwABsFMAAnDLAATJxBMAASjIIwACcLgACwACcMMAAa+HAAJwywAEyjQTAAEo0CMAAnC4AAsAAnDDAAGtuwACcMsABMqkEwABKNgjAAJwuAALAAJwwwABpbcAAnDLAATLFBMAASjcIwACcLgACwACcMMAAaNXAAJwywAEy4QTAAEo4CMAAnC4AAsAAnDCDSsAAnDLAATL9BMAASjkIwACcLgACwACcMMAAZonAAJwywAEzFwTAAEo6CMAAnC4AAsAAnDC1RcAAnDLAATMzBMAASjsIwACcLgACwACcMIQOwACcMsABM00EwABKPAjAAJwuAALAAJwwwABmK8AAnDLAATNnBMAASj0IwACcLgACwACcMLFQwACcMsABM4MEwABKPgjAAJwuAALAAJwwwABjUcAAnDLAATOdBMAASj8IwACcLgACwACcMMAAYUTAAJwywAEzuQTAAEpACMAAnC4AAsAAnDDAAGAZwACcMsABM9UEgdcElvEEg1MEg4AEvVAEwABJngTAAEOgBMAASkwEwABKTQTAAEpOBMAASk8EwABKUATAAEpRBMAASlIEwABKUwTAAEpUBLS0BMAASlUEwABKVgTAAEpXBMAASlgEwABKWQTAAEpaBMAASlsEwABKXATAAEpdBMAASl4EwABKXwTAAEpgBFYEnlQEwABKYQTAAEpiBMAASmMEtEcEg58EgpAEwABKZATAAEplBIPWBJbNBIPDBMAASmYEwABKZwTAAEpoBMAASmkEwABKagTAAEprBMAASmwEwABKbQTAAEpuBMAASm8EwABKcATAAEpxBMAASnIEwABKcwTAAEp0BMAASnUEwABKdgSdCwTAAEp3BMAASngEl64ElycEwABKeQTAAEp6BMAASnsEwABKfATAAEp9BIPsBMAASn4EgKwEwABKfwTAAEqABMAASoEEwABKggTAAEqDBMAASoQEwABKhQTAAEqGBMAASocElyoEwABKiASCbQS9cwTAAEqJBMAASooEwABKiwTAAEqMBIKXBMAASo0EwABKjgTAAEqPBMAASpAEwABKkQSBvQQHBKA7BMAASpIEwABKkwTAAEqUBIPNBIPvBIPCBJaxBMAASpUEwABKlgTAAEqXBMAASpgEwABKmQTAAEqaBIdEBMAASpsEgmsEwABKnATAAEqdBIXNBMAASp4EgfsEln4Eg2EEpUIEwABADgSBwQTAAEqfBMAASqAEwABKoQTAAEqiBMAASqMEwABKpASWsgTAAEqlBMAASqYEwABKpwTAAEqoBMAASqkEhvQEwABKqgTAAEqrBMAASqwEwABKrQSh8wTAAEquBJjeBJcBBMAASq8EwABEuQSVxQSBsgSl1QSClATAAEqwBMAASrEElyUEwABKsgdgA8ABAAKAtMABM/GDs4CewAEz9MABM/eDuYOnwAEz+sABM/3AATQAwAEu+8ABNAXAATQKwAE0D8ABNBTAATQZwAE0HsABNCPAATQowAE0LcABNDLAATQ3wAE0OsABND/AATREwAE0ScABNE7AATRTwAE0WMABNF3AATRiwAE0Z8ABNGzAATRxwAE0dsABNHjAATR7wAE0gMABNIXAATSKwAE0jcABNJDAAKZXwAE0k8ABNJjAALHiwAE0ncABNKDAATSjwAE0psABNKvAATSwwAE0tcABNLrAATS/wAE0xMABNMnAATTOwAE008ABNNjAATTdwAE04sABNOfAATTswAE08cABNPbAATT7wAE0/sABNQPAATUIwAE1C8ABNQ7AATUTwAE1GMABNR3AAKsowAE1IsABNSfAASbwwAE1KsABNS/AATUywAE1N8ABNTzAAScCwAEpM8ABNUHAATVGwAEnB8ABNUvAATVQwAE1VcABNVrAATVfwAEnDMABNWLAATVnwAE1asABNW3AAScRwAE1csABNXfAATV8wAE1gcABNYTAATWJwADA1MABNY7AATWTwAE1mMABNZ3AATWgwAE1osABJz/AATWlwAE1qsABNa/AATW0wAE1t8ABNbqBWcABNb3AATXAwAE1xcABNcrAATXPg2DAATXUwAE12cABNd7AATXhwAE15sABNenAATXuwAE188ABNfbAATX7wAE1/sABNgHAATYEwAE2B8ABNgzAASaPwAEp4cABNg/AATYUwAE2GcABJ4DAATYewAE2I8ABNijAATYtwAE2MMABNjXAATY6wAE2P8ABNkTAATZJwAE2TMABNlHAATZWwAE2W8ABJtbAATZgwACrYMABNmPAATZowAE2a8ABNm7AATZzwAEn7MABNnjAATZ7wAEqHsABNn7AATaBwAE2hMABNonAATaOwAE2kQiUhgFgA8ABAAIABMAASbQEwABK5wTAAEm6BMAASbwEwABJtgTAAEmsBMAASugEwABJrgTAAEmvBMAASbsEwABK6QSn4QSn5gTAAEm5BMAASbgEwABK6gSD8wTAAEm9BKEsBGoEgkkEwABJtQSAlgSBtgTAAErrBMAASuwEwABJsATAAEmxBKe6BMAASa0EwABJsgTAAEmzBMAASu0HYAPAAQACJsABOW7AATlzwAE5eMABOX3AAPFowAE5gsABOYfAATmMwAE5kcABOZbAATmbwAE5oMAA8W3AAPF7wAE5pcABOajAATmrwAE5sMABObXAATm6wACpoMABOb3AATnCwAEm1sABOcXAATnHwAE5ysABOc/AATnSwAE51cABOdrAATnfwAE55MABOenAATnswAE58cABOfbAATn7BLPeBLPYBMAASu4Es9cEwABK7wSzxASzwwTAAErwBMAASZ8EwABK8QTAAEryBMAASvMEwABK9ATAAEr1BLOiBLOkBLOjBLKwBLKcBLKuB2ADwAEAAiXAASXYwAE6oMABOYfAAS8DwAE6o8ABOqbAAPF7wAE56cABOW7AATmowAE5sMABOaXAATmrwAE0dsABOqvAATquwAE6s8ABOrbAATq5wAE6vsABNPbAATnfwAEqccABOsPAATnkwAE6yMABOs3AATrSwAE0+8ABOtfAATrcwAE638ABOuLAATrlwADApcABOujAATrrB2ADvlIABMAASw8IwABn4gACwABn5AnAAGfmwAE7kATAAEsQCMAAZ+IAAsAAZ+QVwABn5sABO6kEwABLEQjAAGfiAALAAGfkIcAAZ+bAATvCBMAASxIIwABn4gACwABn5FPAAGfmwAE72wTAAEsTCMAAZ+IAAsAAZ+SBV8AAZ+bAATv0BMAASxQIwABn4gACwABn5II/wABn5sABPA4HYAPAAGfiBsABO5XAATuuwAE7x8ABO+DAATv5wAE8EwXAAGWQsMEEwABLLgjAAGhyAAHAAGh0wAE8TwjAAGh+AAHAAGiFCQjAAGh+AAHAAGiFIQjAAGh+AAHAAGiFUwdgA8AAaH4EwAE8Y8AA+2XAATxvwAE8ewTAAEs/BMAAS2MEwABLZATAAEtlBLsxBMAAS2YEwABL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UVTAAVFtwAFRhsABUZ/AAVG4B2ADwAB12BLAAU+twAFPcMABT8bAAU/5wAFP38ABUBLAAVAswAFQRsABUGLAAVB8wAFQlsABULDAAVDMwAFQ6MABUQLAAVEewAFROsABT5EEwABSBAjAAHZ9AALAAHZ/CcAAdoHAAVI5BMAAUgUIwAB2fQACwAB2fxXAAHaBwAFSUgTAAFIGCMAAdn0AAsAAdn8hwAB2gcABUmsHYAPAAHZ9A8ABUj7AAVJXwAFScATAAFIMCMAAdqsAAsAAdq0JwAB2r8ABUpgEwABSDQjAAHarAALAAHatFcAAdq/AAVKxBMAAUg4IwAB2qwACwAB2rSHAAHavwAFSygTAAFIPCMAAdqsAAsAAdq1TwAB2r8ABUuMEwABSEAjAAHarAALAAHatgVfAAHavwAFS/ATAAFIRCMAAdqsAAsAAdq2CP8AAdq/AAVMWBMAAUhIIwAB2qwACwAB2rYLhwAB2r8ABUzAEwABSEwjAAHarAALAAHatwACSB8AAdq/AAVNKBMAAUhQIwAB2qwACwAB2rYNdwAB2r8ABU2YEwABSFQjAAHarAALAAHathBHAAHavwAFTgATAAFIWCMAAdqsAAsAAdq2EFMAAdq/AAVOaBMAAUhcIwAB2qwACwAB2rcAAmFvAAHavwAFTtAdgA8AAdqsMwAFSncABUrbAAVLPwAFS6MABUwHAAVMbwAFTNcABU0/AAVNrwAFThcABU5/AAVO5BMAAUiIEwABSJATAAFImBJacBMAAUikEwABSLQTAAFIwBMAAUjIIwAB3egACwAB3fAnAAHd+wAFUKQTAAFIzCMAAd3oAAsAAd3wVwAB3fsABVEIEwABSNAjAAHd6AALAAHd8IcAAd37AAVRbBMAAUjUIwAB3egACwAB3fFPAAHd+wAFUdAdgA8AAd3oEwAFULsABVEfAAVRgwAFUeQTAAFI3BMAAUl8IwAB3ugABwAB3vMABVKoEwABSYAjAAHe6AAHAAHe8wAFUvgTAAFJhCMAAd7oAAcAAd7zAAVTSBMAAUmIIwAB3ugABwAB3vMABVOYEwABSYwjAAHe6AAHAAHe8wAFU+gTAAFJkCMAAd7oAAcAAd7zAAVUOBLKKCMAAd7oAAcAAd7zAAVUiBMAAUmUIwAB3ugABwAB3vMABVTQEwABSZgjAAHe6AAHAAHe8wAFVSATAAFJnCMAAd7oAAcAAd7zAAVVcBMAAUmgIwAB3ugABwAB3vMABVXAEwABSaQjAAHfEAAHAAHe8wAFVhATAAFJqCMAAd8QAAcAAd7zAAVWYBMAAUmsIwAB3xAABwAB3vMABVawEwABSbAjAAHfEAAHAAHe8wAFVwATAAFJtCMAAd8QAAcAAd7zAAVXUBMAAUm4IwAB3xAABwAB3vMABVegEwABSbwjAAHfEAAHAAHe8wAFV/ATAAFJwCMAAd8QAAcAAd7zAAVYQBMAAUnEIwAB3ugABwAB3vMABViQEwABScgjAAHe6AAHAAHe8wAFWOATAAFJzCMAAd8QAAcAAd7zAAVZMBMAAUnQIwAB3xAABwAB3vMABVmAEwABSdQjAAHfEAAHAAHe8wAFWdATAAFJ2CMAAd8QAAcAAd7zAAVaIBMAAUncIwAB3xAABwAB3vMABVpwEwABSeAjAAHfEAAHAAHe8wAFWsASypgjAAHfgAAHAAHe8wAFWxASypQjAAHfgAAHAAHe8wAFW1gSyqwjAAHfLAAHAAHe8wAFW6ASyqgjAAHfLAAHAAHe8wAFW+gTAAFJ5CMAAd8QAAcAAd7zAAVcMBMAAUnoIwAB3xAABwAB3vMABVyAEwABSewjAAHfSAAHAAHe8wAFXNATAAFJ8CMAAd9IAAcAAd7zAAVdIBMAAUn0IwAB32QABwAB3vMABV1wEwABSfgjAAHfZAAHAAHe8wAFXcAdgA8AAd7olwAFUr8ABVMPAAVTXwAFU68ABVP/AAVUTwAFVJcABVTnAAVVNwAFVYcABVXXAAVWJwAFVncABVbHAAVXFwAFV2cABVe3AAVYBwAFWFcABVinAAVY9wAFWUcABVmXAAVZ5wAFWjcABVqHAAVa1wAFWx8ABVtnAAVbrwAFW/cABVxHAAVclwAFXOcABV03AAVdhwAFXdQjAAHk9AAXAAHk/d8AAeUAAwAB5QcAA+13AAHlCwAD7XcAAeUN5BMAAUt4IwAB45AACwAB45hXAAHjowAFYRgTAAFLfCMAAeOQAAsAAeOYhwAB46MABWF8EwABS4AjAAHjkAALAAHjmU8AAeOjAAVh4BMAAUuEIwAB45AACwAB45gnAAHjowAFYkQjAAPnJAmADvhNgA8AAeRwBwAD5zIJmCMAAeSgAAsAAeSvAAViqwAB5LHkHYAPAAHjkBMABWJbAAVhLwAFYZMABWH0EwABTawdgA8AAehIACMAAeqUAAATAAFO0CMAAeqsAAsAAeq0JwAB6r8ABWQEEwABTtQjAAHqrAALAAHqtFcAAeq/AAVkaB2ADwAB6qwLAAVkGwAFZHwdgA8AAY/MAB2ADwAB6twAIwABqIwFgA8AAeqsBwABqJQkEwABUjQTAAFT+BMAAVP8EwABVAATAAFUBCsAAfPYKwAB97QrAAH0aB2ADwACcLijAAS+6wAEv08ABL+zAATAFwAEwHsABMDjAATBSwAEwbMABMIjAATCiwAEwvMABMNbAATDywAExDsABMSjAATFEwAExYMABMXrAATGWwAExssABMc7AATHqwAEyBsABMiLAATI+wAEyWsABMnbAATKSwAEyrsABMzjAATLKwAEy5sABMwLAATMcwAEzUsABM2zAATOIwAEzosABM77AATPaBMAAVnQIwACcYAACwACcYgnAAJxkwAFaNQTAAFZ1CMAAnGAAAsAAnGIVwACcZMABWk4EwABWdgjAAJxgAALAAJxiIcAAnGTAAVpnBMAAVncIwACcYAACwACcYlPAAJxkwAFagATAAFZ4CMAAnGAAAsAAnGKBV8AAnGTAAVqZBMAAVnkIwACcYAACwACcYoI/wACcZMABWrMEwABWegjAAJxgAALAAJxiguHAAJxkwAFazQTAAFZ7CMAAnGAAAsAAnGLAAJIHwACcZMABWucEwABWfAjAAJxgAALAAJxig13AAJxkwAFbAwTAAFZ9CMAAnGAAAsAAnGKEEcAAnGTAAVsdBMAAVn4IwACcYAACwACcYoQUwACcZMABWzcEwABWfwjAAJxgAALAAJxiwACYW8AAnGTAAVtRBMAAVoAIwACcYAACwACcYsAAl4nAAJxkwAFbbQTAAFaBCMAAnGAAAsAAnGKEF8AAnGTAAVuJB2ADwACcYA7AAVo6wAFaU8ABWmzAAVqFwAFansABWrjAAVrSwAFa7MABWwjAAVsiwAFbPMABW1bAAVtywAFbjgSG9wSFhQTAAFdwCMAAhxsAAAjAAIcjAAAEwABXgQjAAIJNAALAAIJPCcAAglHAAVv8BMAAV4IIwACCTQACwACCTyHAAIJRwAFcFQTAAFeDCMAAgk0AAsAAgk8VwACCUcABXC4EwABXhAjAAIJNAALAAIJPguHAAIJRwAFcRwTAAFeFCMAAgk0AAsAAgk/AAJIHwACCUcABXGEEwABXhgjAAIJNAALAAIJPg13AAIJRwAFcfQTAAFeHCMAAgk0AAsAAgk+EEcAAglHAAVyXBMAAV4kIwACCTQACwACCT4QUwACCUcABXLEEwABXigjAAIJNAALAAIJPwACYW8AAglHAAVzLBMAAV4wIwACCTQACwACCT8AAl4nAAIJRwAFc5wTAAFeNCMAAgk0AAsAAgk+EF8AAglHAAV0DBMAAV44IwACCTQACwACCT8AAjmbAAIJRwAFdHQTAAFePCMAAgk0AAsAAgk9TwACCUcABXTkEwABXkAjAAIJNAALAAIJPgVfAAIJRwAFdUgTAAFeRCMAAgk0AAsAAgk+CP8AAglHAAV1sBMAAV5IIwACCTQACwACCT8AAi/bAAIJRwAFdhgTAAFejBMAAV6oIwACHAQACwACHAwnAAIcFwAFdpwTAAFesBMAAV60IwACHAQACwACHAxXAAIcFwAFdxQTAAFevBMAAV7IIwACHAQACwACHAyHAAIcFwAFd4wTAAFe0BMAAV7kIwACHAQACwACHA1PAAIcFwAFeAQTAAFe/BMAAV8QEwABXxgTAAFfICMAAppEAAsAAppMhwACmlcABXikEqlAEwABXywTAAFfNBMAAV84IwACmkQACwACmkxXAAKaVwAFeTwTAAFfQB2ADwABkGQAEwABX2gTAAFfcCMAAoMQAAsAAoMYJwACgyMABXnoEwABX3QjAAKDEAALAAKDGFcAAoMjAAV6TBMAAV94IwACgxAACwACgxiHAAKDIwAFerATAAFffCMAAoMQAAsAAoMZTwACgyMABXsUHYAPAAKDEBMABXn/AAV6YwAFescABXsoEwABX4AjAAKbEAALAAKbGguHAAKbIwAFe9gTAAFfiBMAAV+MIwACmxAACwACmxsAAkgfAAKbIwAFfFQTAAFfrBMAAV+4EwABX+ASG9QSEiASEhwSElATAAFf9BMAAV/8EwABYAQTAAFgDBMAAWAUEwABYBwTAAFgJCJNTAWADwABj8wAIwAD5yQJgA4TsYAOI/AHAAPnMgmYIwACeVgACwACeWsABX3rAAJ5beQTAAFjTCMAAgMwAAsAAgM4JwACA0MABX6MEwABY1AjAAIDMAALAAIDOFcAAgNDAAV+8B2ADwACAzALAAV+owAFfwQTAAFjeBMAAWOsIwACKCwACwACKDRXAAIoPwAFf6giTUwFgA8AAp6QACsAAgUwIwACBaAAAB2ADwABozwAHYAPAAGjxAAdgA8AAaP0AB2ADwABpCQAHYAPAAE8NAAdgA8AAaRUAB2ADwACCEwAHYAPAAIJNEMABXAHAAVwzwAFcGsABXT7AAV1XwAFdccABXEzAAVxmwAFcgsABXJzAAVy2wAFc0MABXOzAAV0IwAFdIsABXYsIwACCZwAFwACCacABXAHAAIJqecAAgmt5wACCbHnAAIJteQjAAIJnAAXAAIJpwAFcM8AAgmp5wACCa3nAAIJsecAAgm15CMAAgmcABcAAgmnAAVwawACCannAAIJrecAAgmx5wACCbXkIwACCZwAFwACCacABXT7AAIJqecAAgmt5wACCbHnAAIJteQjAAIJnAAXAAIJpwAFdV8AAgmp5wACCa3nAAIJsecAAgm15CMAAgmcABcAAgmnAAV1xwACCannAAIJrecAAgmx5wACCbXkIwACCZwAFwACCacABXSLAAIJqecAAgmt5wACCbHnAAIJteQTAAFmkCMAAgoYAAsAAgogJwACCisABYY8EwABZpQjAAIKGAALAAIKIFcAAgorAAWGoBMAAWaYIwACChgACwACCiCHAAIKKwAFhwQTAAFmnCMAAgoYAAsAAgohTwACCisABYdoHYAPAAIKGBMABYZTAAWGtwAFhxsABYd8EwABZ/QjAAKstAALAAKsvCcAAqzHAAWILBMAAWf4IwACrTAACwACrTgnAAKtQwAFiJATAAFoACMAAqy0AAsAAqy8VwACrMcABYj0EwABaAwjAAKtMAALAAKtOFcAAq1DAAWJWBMAAWgQIwACrLQACwACrLyHAAKsxwAFibwTAAFoFCMAAqy0AAsAAqy9TwACrMcABYogEwABaBwjAAKstAALAAKsvgVfAAKsxwAFioQTAAFoICMAAq0wAAsAAq04hwACrUMABYrsEwABaCQjAAKtMAALAAKtOU8AAq1DAAWLUBMAAWgoIwACrTAACwACrToFXwACrUMABYu0EwABaCwjAAKstAALAAKsvgj/AAKsxwAFjBwTAAFoMCMAAqy0AAsAAqy+C4cAAqzHAAWMhBMAAWg0IwACrTAACwACrToI/wACrUMABYzsEwABaDgjAAKtMAALAAKtOguHAAKtQ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AJ2NgWvAAJ2HCMAAraoAAAjAAK1GAAHAAK1RwAFqfAjAAK05AAAIwACtXwAACMAArWgAAAjAAK2/AAAIwACttwAAB2ADwAEAAgKBa8AAtgAHYAPAAQACBsAAnY3AAJ8xwACkX8AArnDAAKb/wACpoAdgA8ABAAIGwAC8hIFrwACmx8AAoG7AAKtgwACmjwdgA8ABAAIDwAC6ssAAnYLAALYAB2ADwAEAAgHAAJ8xB2ADwAEAAgKBa8AAtc4HYAPAAQACAsAAoG7AAKffB2ADwAEAAgvAALqygWvAAJ9jwAC2AMAAn5jAALYwwACfMcAAtc6Am8AAtQ3AALyEB2ADwAEAAgTAALyEwAC2YIFrwAC1zgdgA8ABAAIJwAC1DcAAtmCBa8AAn2PAALYAwACfmMAAtjDAAJ8xwAC1zgdgA8ABAAIGwAC8hMAApsfAAKtgwACmj8AAow/AAKBuB2ADwAEAAgTAALqywACfY8AAnzHAALcFB2ADwAEAAgHAALUNB2ADwAEAAgHAALyEB2ADwAEAAgLAALqywAC8hAdgA8ABAAIFwAC8hMAAtmCBa8AAnzHAALXOB2ADwAEAAgXAAJ8xwAC1zsAAn2PAALYAwAC2MAdgA8ABAAIFwAC6ssAAn2PAAJ8xwAC3BcAAtc4HYAPAAQACBMAAn2PAAJ2NwAC2YMAAvIQHYAPAAQACCsAAnY3AAJ2HwAC2AMAAn5jAALYwwAC4p8AAnzHAALXOgWvAALyEB2ADwAEAAgbAAJ2NwACdh8AAvITAALXOwACkX8AArAgHYAPAAQACBMAAs2nAAKZXwACrKMAArgAHYAPAAQACBsAAoi/AAKZXwACld8AAqyjAAK3IwACuAAdgA8AAj3cAB2ADwACPkAAHYAPAAI/OAAdgA8AAkAwAB2ADwACXEAAHYAPAAI/mAAdgA8AAkAcACMAAbWwAAcAAbW4ACMAAkNAAAArAAJS1CJNTAWADvf8AB1sQwACdgsAAnYTAAJ2EwACdgsAAtszAALQIwAC0CMAAtszAAJ2NwACdisAAnY/AAJ2HwACdh8AAnY/AAJ2KwACdjQjAAPnJAmADwAEAAmADwAEAAgHAAPnMwAFtWATAAGGGCMAAlIAAAsAAlIIJwACUhMABbbYHYAPAAJSAAcABbbsHYAPAAP4bf8AAh5TAAIeUwACHlMAAh5TAAIeUwACHlMAAh5TAAIeUwACHlMAAhrzAAIa8wACHlMAAh5TAAIa8wACHlMAAh5TAAIeUwACHlMAAh5TAAIeUwACHlMAAh5TAAIeUwACHlMAAh5TAAIeUwACHlMAAh5TAAIeUwACHlMAAh5TAAIeUwACGvFPAAIeUg3AJU1PAAIeUguHAAJIHU1PAAJeJU4I/UxUVFRUVFRUVFRXAAI5mwACL9lNTU4QXwACHlAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJhBTAAIeUwACYW1MJwACHlAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJg11ThBFTCsAAmzcEwABjnwTAAGOhBMAAY6MEwABjpQTAAGOpBMAAY6sEwABjrQTAAGOvBMAAXq0EwABjsgTAAGO0BMAAY7YEwABebgTAAGO5BMAAY7sEwABjvQTAAGO/BMAAY8EEwABjwwTAAGPFBMAAY8cEwABjyQTAAGPLBMAAY80EwABjzwTAAFB/BMAAXcUEwABj1ArAAJyhBMAAZA4IwACeEgACwACeFCHAAJ4WwAFvgAjAAJ4fAALAAJ4hwAFvhcAAniJ5CMAAg5wAA8AAg555wACDn3nAAIOgwAFvmQTAAGQPCMAAnhIAAsAAnhQJwACeFsABb8YIwACeHwACwACeIcABb8vAAJ4ieQTAAGQrCMAAnhIAAsAAnhQVwACeFsABb/MHYAPAAJ4SA8ABb8vAAW/4wAFvhQjAAJ5GAAAEwABkQwdgA8AAnmkACJSGAWADwACeaQAHYAPAAJ9PAsABToHAAU6aCMAA+ckCYAPAAQACYAPAAJ5pAcAA+cyCZgSAqwSBpQSElQSDHASD/QSWlQSDXwSWiwRYBIHWBICtBJVxBIFVBIO3BJaZBJaaBJaEBJaYBJaPBJaUBJjgBICuBIC7BJa1BIJGBIReBJdTBJdWBIFYBKA5BKA6BJzCBMAAZgAEwABmAQdgA8ABAAIywACdgsAA8tbAAPIMwADxdcAA8XjAAPFtwAFwaMABcGvAAXBuwAFwccABcHTAAXB3wAFwesABcH3AAXCAwAFwgsABcIXAAXCIwADxe8ABcIvAAXCOwAFwkcABcJTAAXCXwAFwmsABTdvAAU3ywAFOCcABcJ3AAXCgwAFOIMABTjfAALinwADxe8ABcKPAAXCmwAFwqcABcKzAAXCvwAFwssAB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ALiTAAAIwADlCwABwADlDncCOcAASv8COcAAbzoCOcAAbzsCN+QgcNsCOcAAbzwCOcAAbz0COcAAbz4COcAAbz8COcAAb0ACOcAAb0ECOcAAb0ICOcAAb0MCOcAAb0QCOcAAb0UCOcAAb0YCOcAAb0cCOcAAb0gCOcAAb0kCOcAAb0oCN+ZeWlECOcAAb0sCOcAAb0wCN8JEFFMCOcAAb00COcAAb04CN+HhzeYCOcAAb08COcAAb1ACOcAAb1ECOcAAb1ICOcAAb1MCOcAAb1QCOcAAb1UCOcAAb1YCOcAAb1cCOcAAb1gCOcAAb1kCOcAAb1oCOcAAb1sCOcAAb1wCOcAAb10CN+ibfsYCOcAAb14COcAAb18CN8SIHQUCOcAAb2ACOcAAb2ECN9+ifPgCOcAAb2ICOcAAb2MCOcAAb2QCOcAAb2UCOcAAb2YCOcAAb2cCOcAAb2gCOcAAb2kCOcAAb2oCOcAAb2sCOcAAb2wCOcAAb20COcAAb24COcAAb28COcAAb3ACN+rX0rsCOcAAb3EHYAPAAP4bQMABfB7AAXwkwAF8KsABfDDAAXw2wAF8PMABfELAAXxIwAF8TsABfFTAAXxawAF8YMABfGbAAXxswAF8csABfHjAAXx+wAF8hMABfIrAAXyQwAF8lsABfJzAAXyiwAF8qMABfK7AAXy0wAF8usABfMDAAXzGwAF8zMABfNLAAXzYwAF83sABfOTAAXzqwAF88MABfPbAAXz8wAF9AsABfQjAAX0OwAF9FMABfRrAAX0gwAF9JsABfSzAAX0ywAF9OMABfT7AAX1EwAF9SsABfVDAAX1WwAF9XMABfWLAAX1owAF9bsABfXTAAX16wAF9gMABfYbAAX2MwAF9ksABfZgHYAPAAP4bQMAAkgfAAJeJwACGvMAAfuXAAJIHwACXicAAhrzAAH7lwACSB8AAl4nAAIa8wAB+5cAAkgfAAJeJwACGvMAAfuWCP4QRwACOZsAActiCP4QRwACOZsAActiCP4QRwACOZsAActiCP4QRwACOZsAActiBV8AAmFuDcMAAbQeBV8AAmFuDcMAAbQeBV8AAmFuDcMAAbQeBV8AAmFuDcMAAbQeC4YQUwACL9sAAf3iC4YQUwACL9sAAf3iC4YQUwACL9sAAf3iC4YQUwACL9sAAf3gCOcAAb48COcAAb5ACOcAAb5ECOcAAb5ICN/lWwlsCOcAAb5MCOcAAb5QCOcAAb5UCOcAAb5YCN9KDWwECN+Qxhb4COcAAb5cCOcAAb5gCOcAAb5kCOcAAb5oCOcAAb5sCOcAAb5wCOcAAb50CN8/BncYCN+QMocwCN+3pLG8COcAAb54COcAAb58COcAAb6ACOcAAb6ECOcAAb6ICOcAAb6MCOcAAb6QCOcAAb6UCOcAAb6YCN8bKY1ECN9QpKWcCN+e3CoUCN+4bITgCOcAAb6cCOcAAb6gCOcAAb6kCOcAAb6oCOcAAb6sCOcAAb6wCOcAAb60COcAAb64COcAAb68COcAAb7ACOcAAb7ECOcAAb7ICOcAAb7MCN9BqoHACN9mkwRYCN943bAgCN+dId0wCN/SwvLUCN/kcDLMCOcAAb7QCOcAAb7UCOcAAb7YCOcAAb7cCOcAAb7gCOcAAb7kCOcAAb7oCOcAAb7sCOcAAb7wCOcAAb70COcAAb74HYAPAAP4bQMABf37AAX+EwAF/isABf5DAAX+WwAF/nMABf6LAAX+owAF/rsABf7TAAX+6wAF/wMABf8bAAX/MwAF/0sABf9jAAX/ewAF/5MABf+rAAX/wwAF/9sABf/zAAYACwAGACMABgA7AAYAUwAGAGsABgCDAAYAmwAGALMABgDLAAYA4wAGAPsABgETAAYBKwAGAUMABgFbAAYBcwAGAYsABgGjAAYBuwAGAdMABgHrAAYCAwAGAhsABgIzAAYCSwAGAmMABgJ7AAYCkwAGAqsABgLDAAYC2wAGAvMABgMLAAYDIwAGAzsABgNTAAYDawAGA4MABgObAAYDswAGA8sABgPgCOcAAb8YIwADlCwABwADlDgAIwAC4vAAACMAAuNMAAAjAALj7AAAIwAC5FQAACMAAuJ0AAATAAHCICMAA/BwAAsAA/B7AAYI7wAD8H3kKwAC6DwjAAL1cAAAIwADNPgAABMAAcN0IwAD8CAABwAD8CsABgmcIwAC/pAAACsAAuvQEwABxUwjAAM1RAAHAAM1TwAGChwTAAHF/CMAAzVEAAcAAzVPAAYKbCsAAug0KwAC6DgjAAM/2AWADwAD/JQAFwAC5wsAAcjEFwAC5wsAAcjIKwAC6GQjAAL7jAWADwAD+EQLAAL7lwAGCe8AAvubAAYLYCsAAuhoIwAC+4wFgA8AA/hECwAC+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VQjAAPwIAAHAAPwKwAGRGwTAAHdXCMAA/AgAAcAA/ArAAZEvBMAAd1kIwAD8CAABwAD8CsABkUMEwAB3WwjAAPwIAAHAAPwKwAGRVwTAAHddCMAA/AgAAcAA/ArAAZFrBMAAd18IwAD8CAABwAD8CsABkX8EwAB3YQjAAPwIAAHAAPwKwAGRkwTAAHdjCMAA/AgAAcAA/ArAAZGnBMAAd2UIwAD8CAABwAD8CsABkbsEwAB3ZwjAAPwIAAHAAPwKwAGRzwTAAHdpCMAA/AgAAcAA/ArAAZHjBMAAd2sIwAD8CAABwAD8CsABkfcEwAB3bQjAAPwIAAHAAPwKwAGSCwTAAHdvCMAA/AgAAcAA/ArAAZIfBMAAd3EIwAD8CAABwAD8CsABkjMEwAB3cwjAAPwIAAHAAPwKwAGSRwTAAHd1CMAA/AgAAcAA/ArAAZJbBMAAd3cIwAD8CAABwAD8CsABkm8EwAB3eQjAAPwIAAHAAPwKwAGSgwTAAHd7CMAA/AgAAcAA/ArAAZKXBMAAd30IwAD8CAABwAD8CsABkqsEwAB3fwjAAPwIAAHAAPwKwAGSvwTAAHeBCMAA/AgAAcAA/ArAAZLTBMAAd4MIwAD8CAABwAD8CsABkucEwAB39wTAAHf5BMAAd/oEwAB3/AI3wAokFQrAAM0PBMAAeA8IwADNTAABwADNTsABkxoLYAPAAPxVCMAA/BwAAsAA/B7AAYaWwAD8H8ABky4EwAB4FQjAAM1MAAHAAM1OwAGTTATAAHgbCMAAzUwAAcAAzU7AAZNgBMAAeB8IwADNTAABwADNTsABk3QEwAB4JAjAAM1MAAHAAM1OwAGTiATAAHgnCMAAzUwAAcAAzU7AAZOcBMAAeCoIwADNTAABwADNTsABk7AEwAB4NAjAAM1MAAHAAM1OwAGTxATAAHg2CMAAzUwAAcAAzU7AAZPYBMAAeDcIwADNTAABwADNTsABk+wEwAB4PQjAAM1MAAHAAM1OwAGUAATAAHhBCMAAzUwAAcAAzU7AAZQUBMAAeEIIwADNTAABwADNTsABlCgEwAB4RQjAAM1MAAHAAM1OwAGUPATAAHhLCMAAzUwAAcAAzU7AAZRQBMAAeEwIwADNTAABwADNTsABlGQEwAB4TQjAAM1MAAHAAM1OwAGUeATAAHhPCMAAzUwAAcAAzU7AAZSMBMAA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AcAAzU7AAbQ8BMAAgW4IwADNTAABwADNTsABtFAEwACBcAjAAM1MAAHAAM1OwAG0ZATAAIFxCMAAzUwAAcAAzU7AAbR4BMAAgXIIwADNTAABwADNTsABtIwEwACBcwjAAM1MAAHAAM1OwAG0oATAAIF0CMAAzUwAAcAAzU7AAbS0CMAA9oEAAcAA9owVCMAA9oEAAcAA9owhCMAA9oEAAcAA9oxTCMAA9ksAAcAA9lQVCMAA9ksAAcAA9lQhCMAA9ksAAcAA9lSBVwjAAPwcAALAAPwewAGCO8AA/B/AAKZXBMAAga0IwADNTAABwADNTsABtSgEwACBsgjAAM1MAAHAAM1OwAG1PATAAIG0CMAAzUwAAcAAzU7AAbVQBMAAgbcIwADNTAABwADNTsABtWQEwACBuAjAAM1MAAHAAM1OwAG1eATAAIG5CMAAzUwAAcAAzU7AAbWMBMAAgboIwADNTAABwADNTsABtaAEwACBvAjAAM1MAAHAAM1OwAG1tATAAIG+CMAAzUwAAcAAzU7AAbXIBMAAgcEIwADNTAABwADNTsABtdwEwACBxwjAAM1MAAHAAM1OwAG18ATAAIHLCMAAzUwAAcAAzU7AAbYEBMAAgc8IwADNTAABwADNTsABthgEwACB0wjAAM1MAAHAAM1OwAG2LATAAIHXCMAAzUwAAcAAzU7AAbZABMAAgd0IwADNTAABwADNTsABtlQEwACB3gjAAM1MAAHAAM1OwAG2aATAAIHkCMAAzUwAAcAAzU7AAbZ8BMAAgecIwADNTAABwADNTsABtpAEwACB6gjAAM1MAAHAAM1OwAG2pATAAIHsCMAAzUwAAcAAzU7AAba4BMAAge4IwADNTAABwADNTsABtswEwACB9AjAAM1MAAHAAM1OwAG24ATAAIH1CMAAzUwAAcAAzU7AAbb0BMAAghAIwADNTAABwADNTsABtwgEwACCEQjAAM1MAAHAAM1OwAG3HATAAIISCMAAzUwAAcAAzU7AAbcwBMAAghMIwADNTAABwADNTsABt0QEwACCFAjAAM1MAAHAAM1OwAG3WATAAIIVCMAAzUwAAcAAzU7AAbdsBMAAghYIwADNTAABwADNTsABt4AEwACCFwjAAM1MAAHAAM1OwAG3lATAAIIYCMAAzUwAAcAAzU7AAbeoBMAAghkIwADNTAABwADN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wATAAISXCMAAzUwAAcAAzU7AAb7UBMAAhJgIwADNTAABwADNTsABvugEwACEmQjAAM1MAAHAAM1OwAG+/ATAAISaCMAAzUwAAcAAzU7AAb8QBMAAhJsIwADNTAABwADNTsABvyQEwACEnQjAAM1MAAHAAM1OwAG/OATAAISfCMAAzUwAAcAAzU7AAb9MBMAAhKAIwADNTAABwADNTsABv2AEwACEogjAAM1MAAHAAM1OwAG/dATAAISjCMAAzUwAAcAAzU7AAb+IBMAAhKUIwADNTAABwADNTsABv5wEwACEqwjAAM1MAAHAAM1OwAG/sATAAIStCMAAzUwAAcAAzU7AAb/EBMAAhK8IwADNTAABwADNTsABv9gEwACEsQjAAM1MAAHAAM1OwAG/7ATAAISzCMAAzUwAAcAAzU7AAcAABMAAhLUIwADNTAABwADNTsABwBQEwACEtwjAAPSHAALAAPTEFcAA9MXAAcAoBMAAhLgIwAD0hwACwAD0xCHAAPTFwAHAQQTAAIS5CMAA9IcAAsAA9MSEFMAA9MXAAcBaBMAAhLoIwAD0hwACwAD0xMAAl4nAAPTFwAHAdATAAIS7CMAA9IcAAsAA9MTAAGtuwAD0xcABwJAEwACEwAjAAM1MAAHAAM1OwAHArATAAITCCMAAzUwAAcAAzU7AAcDABMAAhMYIwAD8CAABwAD8CsABwNQEwACEyQjAAPwIAAHAAPwKwAHA6AjAAPRdAAHAAPRoIQTAAITMCMAA/AgAAcAA/ArAAcEIBMAAhM8IwAD8CAABwAD8CsABwRwHYAPAAPRdBMABsdbAAbHiwAHA/MABse4EwACA8QTAAITHBMAAhMoEwACEzQdgA8ABAAIEwAHBSMABwU3AAcFSwAHBVwjAAPduAAAEwACE1wjAAPSHAALAAPTEgVfAAPTFwAHBewTAAITZCMAA9IcAAsAA9MSCP8AA9MXAAcGVBMAAhNsIwAD0hwACwAD0xILhwAD0xcABwa8EwACE3QjAAPSHAALAAPTEwACSB8AA9MXAAcHJBMAAhN8IwAD0hwACwAD0xINdwAD0xcABweUEwACE4QjAAPSHAALAAPTEhBHAAPTFwAHB/wTAAITkCMAA9IcAAsAA9MTAAJhbwAD0xcABwhkEwACE5wjAAPSHAALAAPTEhBfAAPTFwAHCNQTAAITpCMAA9IcAAsAA9MTAAI5mwAD0xcABwk8EwACE7AjAAPSHAALAAPTEwACGvMAA9MXAAcJrBMAAhO4IwAD0hwACwAD0xMAAh5TAAPTFwAHChwTAAITwCMAA9IcAAsAA9MTAAIX8wAD0xcABwqMEwACE8gjAAPSHAALAAPTEwABy2MAA9MXAAcK/BMAAhPQIwAD0hwACwAD0xMAAf3jAAPTFwAHC2wTAAIT2CMAA9IcAAsAA9MTAAH7lwAD0xcABwvcEwACE+AjAAPSHAALAAPTEwABtB8AA9MXAAcMTBMAAhPoIwAD0hwACwAD0xMAAbEfAAPTFwAHDLwTAAIT8CMAA9IcAAsAA9MTAAHqAwAD0xcABw0sEwACE/gjAAPSHAALAAPTEwABsFMAA9MXAAcNnBMAAhQAIwAD0hwACwAD0xMAAa+HAAPTFwAHDgwTAAIUDCMAA9IcAAsAA9MS1RcAA9MXAAcOfBMAAhQUIwAD0hwACwAD0xMAAaNXAAPTFwAHDuQTAAIUGCMAA/AgAAcAA/ArAAcPVBMAAhQcIwAD8CAABwAD8CsABw+kEwACFCAjAAPwIAAHAAPwKwAHD/QTAAIUJCMAA/AgAAcAA/ArAAcQRBMAAhQoIwAD8CAABwAD8CsABxCUEwACFCwjAAPwIAAHAAPwKwAHEOQTAAIUMCMAA/AgAAcAA/ArAAcRNBMAAhQ0IwAD8CAABwAD8CsABxGEEwACFDgjAAPwIAAHAAPwKwAHEdQTAAIUPCMAA/AgAAcAA/ArAAcSJBMAAhRAIwAD8CAABwAD8CsABxJ0EwACFEQjAAPwIAAHAAPwKwAHEsQTAAIUSCMAA/AgAAcAA/ArAAcTFBMAAhRMIwAD8CAABwAD8CsABxNkEwACFFAjAAPwIAAHAAPwKwAHE7QTAAIUVCMAA/AgAAcAA/ArAAcUBBMAAhRYIwAD8CAABwAD8CsABxRUEwACFFwjAAPwIAAHAAPwKwAHFKQTAAIUYCMAA/AgAAcAA/ArAAcU9BMAAhRkIwAD8CAABwAD8CsABxVEEwACFGgjAAPwIAAHAAPwKwAHFZQTAAIUbCMAA/AgAAcAA/ArAAcV5BMAAhRwIwAD8CAABwAD8CsABxY0EwACFHQjAAPwIAAHAAPwKwAHFoQTAAIUeCMAA/AgAAcAA/ArAAcW1BMAAhR8IwAD8CAABwAD8CsAB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tqrAAGr3tqrAAI+KujW2qro1ujW6NboNujWJtLo1jm66NZOaujWTxbo1oeK6NcAAave6NcAAj4q6Dbaqug26NboNug26DYm0ug2ObroNk5q6DZPFug2h4roNwABq97oNwACPiom0tqqJtLo1ibS6DYm0ibSJtI5uibSTmom0k8WJtKHiibTAAGr3ibTAAI+Kjm62qo5uujWObroNjm6JtI5ujm6ObpOajm6TxY5uoeKObsAAaveObsAAj4qTmraqk5q6NZOaug2Tmom0k5qObpOak5qTmpPFk5qh4pOawABq95OawACPipPFtqqTxbo1k8W6DZPFibSTxY5uk8WTmpPFk8WTxaHik8XAAGr3k8XAAI+KoeK2qqHiujWh4roNoeKJtKHijm6h4pOaoeKTxaHioeKh4sAAaveh4sAAj4rAAGr3tqrAAGr3ujXAAGr3ug3AAGr3ibTAAGr3jm7AAGr3k5rAAGr3k8XAAGr3oeLAAGr3wABq98AAavfAAI+KwACPiraqwACPiro1wACPiroNwACPiom0wACPio5uwACPipOawACPipPFwACPiqHiwACPisAAavfAAI+KwACPigTAAIhcBMAAiF0EwACIXgTAAIhfBMAAiGAEwACIYQTAAIhiBMAAiGMEwACIZATAAIhlBMAAiGYEwACIZwTAAIhoBMAAiGkEwACIagTAAIhrBMAAiGwEwACIbQTAAIhuBMAAiG8EwACIcATAAIhxBMAAiHIEwACIcwTAAIh0BMAAiHUEwACIdgTAAIh3BMAAiHgEwACIeQTAAIh6BMAAiHsEwACIfATAAIh9BMAAiH4EwACIfwTAAIiABMAAiIEEwACIggTAAIiDBMAAiIQEwACIhQTAAIiGBMAAiIcEwACIiATAAIiJBMAAiIoEwACIiwTAAIiMBMAAiI0EwACIjgTAAIiPBMAAiJAEwACIkQTAAIiSBMAAiJMEwACIlATAAIiVBMAAiJYEwACIlwTAAIiYBMAAiJkEwACImgTAAIibBMAAiJwEwACInQTAAIieBMAAiJ8EwACIoATAAIihBMAAiKIEwACIowTAAIikBMAAiKUEwACIpgTAAIinBMAAiKgEwACIqQTAAIiqBMAAiKsEwACIrATAAIitBMAAiK4EwACIrwTAAIiwBMAAiLEEwACIsgTAAIizBMAAiLQEwACItQTAAIi2BMAAiLcEwACIuATAAIi5BMAAiLoEwACIuwTAAIi8BMAAUv4EwABS/ATAAIi9BMAAiL4EwACIvwTAAIjABMAAiMEEwACIwgTAAIjDBMAAiMQEwACIxQTAAIjGBMAAiMcEwACIyATAAIjJBMAAiMoEwACIywTAAIjMBMAAiM0EwACIzgTAAIjPBMAAiNAEwACI0QTAAIjSBMAAiNMEwACI1ATAAIjVBMAAiNYEwACI1wTAAIjYBMAAiNkEwACI2gTAAIjbBMAAiNwEwACI3QTAAIjeBMAAiN8EwACI4ATAAIjhBMAAiOIEwACI4wTAAIjkBMAAiOUEwACI5gTAAIjnBMAAiOgEwACI6QTAAIjqBMAAiOsEwACI7ATAAIjtBMAAiO4EwACI7wTAAIjwBMAAiPEEwACI8gTAAIjzBMAAiPQEwACI9QTAAIj2BMAAiPcEwACI+ATAAIj5BMAAiPoEwACI+wTAAIj8BMAAiP0EwACI/gTAAIj/BMAAiQAEwACJAQTAAIkCBMAAiQMEwACJBATAAIkFBMAAiQYEwACJBwTAAIkIBMAAiQkEwACJCgTAAIkLBMAAiQwEwACJDQTAAIkOBMAAiQ8EwACJEATAAIkRBMAAiRIEwACJEwTAAIkUBMAAiRUEwACJFgTAAIkXBMAAiRgEwACJGQTAAIkaBMAAiRsEwACJHATAAIkdBMAAiR4HYAPAAQACgMfAAdInwAHSLMAB0jHAAdI2wAHSO8AB0kDAAdJFwAHSSsAB0k/AAdJUwAHSWcAB0l7AAdJjwAHSaMAB0m3AAdJywAHSd8AB0nzAAdKBwAHShsAB0ovAAdKQwAHSlcAB0prAAdKfwAHSpMAB0qnAAdKuwAHSs8AB0rjAAdK9wAHSwsAB0sfAAdLMwAHS0cAB0tbAAdLbwAHS4MAB0uXAAdLqwAHS78AB0vTAAdL5wAHS/sAB0wPAAdMIwAHTDcAB0xLAAdMXwAHTHMAB0yHAAdMmwAHTK8AB0zDAAdM1wAHTOsAB0z/AAdNEwAHTScAB007AAdNTwAHTWMAB013AAdNiwAHTZ8AB02zAAdNxwAHTdsAB03vAAdOAwAHThcAB04rAAdOPwAHTlMAB05nAAdOewAHTo8AB06jAAdOtwAHTssAB07fAAdO8wAHTwcAB08bAAdPLwAHT0MAB09XAAdPawAHT38AB0+TAAdPpwAHT7sAB0/PAAdP4wAHT/cAB1ALAAdQHwAHUDMAB1BHAAXOgwAFzo8AB1BbAAdQbwAHUIMAB1CXAAdQqwAHUL8AB1DTAAdQ5wAHUPsAB1EPAAdRIwAHUTcAB1FLAAdRXwAHUXMAB1GHAAdRmwAHUa8AB1HDAAdR1wAHUesAB1H/AAdSEwAHUicAB1I7AAdSTwAHUmMAB1J3AAdSiwAHUp8AB1KzAAdSxwAHUtsAB1LvAAdTAwAHUxcAB1MrAAdTPwAHU1MAB1NnAAdTewAHU48AB1OjAAdTtwAHU8sAB1PfAAdT8wAHVAcAB1QbAAdULwAHVEMAB1RXAAdUawAHVH8AB1STAAdUpwAHVLsAB1TPAAdU4wAHVPcAB1ULAAdVHwAHVTMAB1VHAAdVWwAHVW8AB1WDAAdVlwAHVasAB1W/AAdV0wAHVecAB1X7AAdWDwAHViMAB1Y3AAdWSwAHVl8AB1ZzAAdWhwAHVpsAB1avAAdWwwAHVtcAB1brAAdW/wAHVxMAB1cnAAdXOwAHV08AB1djAAdXdwAHV4sAB1efAAdXswAHV8cAB1fbAAdX7AjfAmJaAAjfF9eEAAjf7msoABMAAiSIIwADNTAABwADNTsAB2TcEwACJIwjAAM1MAAHAAM1OwAHZSwTAAIkkCMAAzUwAAcAAzU7AAdlfBMAAiSwIwADNTAABwADNTsAB2XMEwACJLQjAAM1MAAHAAM1OwAHZhwTAAIlOCMAAzUwAAcAAzU7AAdmbBMAAiVsIwADNTAABwADNTsAB2a8EwACJXQjAAM1MAAHAAM1OwAHZwwTAAIleCMAAzUwAAcAAzU7AAdnXBMAAiWAIwADNTAABwADNTsAB2esHYAPAAP4bgQAJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQnAAYnCwAGJwsABicLAAYnCwAGJwsABicLAAYnCwAGJwsABicLAAYnCCQkJCQkJCcABicLAAYnCwAGJwsABicLAAYnCwAGJwsABicLAAYnCwAGJwsABicLAAYnCwAGJwsABicLAAYnCwAGJwsABicLAAYnCwAGJwsABicLAAYnCwAGJwsABicLAAYnCwAGJwsABicLAAYnCCQkJCcABicIJwAGJwsABicLAAYnCwAGJwsABicLAAYnCwAGJ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AI2JBMAAjYsEwACNjQTAAEELBMAAjZEEwACNkwjAAPwIAAHAAPwKwAHpGgTAAI2VCMAA/AgAAcAA/ArAAekuBMAAjZcIwAD8CAABwAD8CsAB6UIEwACNmQjAAPwIAAHAAPwKwAHpVgTAAI2bCMAA/AgAAcAA/ArAAelqBMAAjZ0IwAD8CAABwAD8CsAB6X4EwACNnwjAAPwIAAHAAPwKwAHpkgTAAI2hCMAA/AgAAcAA/ArAAemmBMAAjaMIwAD8CAABwAD8CsAB6boEwACNpQjAAPwIAAHAAPwKwAHpzgTAAI2nCMAA/AgAAcAA/ArAAeniBMAAjakIwAD8CAABwAD8CsAB6fYEwACNqwjAAPwIAAHAAPwKwAHqCgTAAI2tCMAA/AgAAcAA/ArAAeoeBMAAja8IwAD8CAABwAD8CsAB6jIEwACNsQjAAPwIAAHAAPwKwAHqRgTAAI2zCMAA/AgAAcAA/ArAAepaBMAAjbUIwAD8CAABwAD8CsAB6m4EwACNtwjAAPwIAAHAAPwKwAHqggTAAI25CMAA/AgAAcAA/ArAAeqWBMAAjbsIwAD8CAABwAD8CsAB6qoEwACNvQjAAPwIAAHAAPwKwAHqvgTAAI2/CMAA/AgAAcAA/ArAAerSBMAAjcEIwAD8CAABwAD8CsAB6uYEwACNwwjAAPwIAAHAAPwKwAHq+gTAAI3FCMAA/AgAAcAA/ArAAesOBMAAjccIwAD8CAABwAD8CsAB6yIEwACNyQjAAPwIAAHAAPwKwAHrNgTAAI3LCMAA/AgAAcAA/ArAAetKBMAAjc0IwAD8CAABwAD8CsAB614EwACNzwjAAPwIAAHAAPwKwAHrcgTAAI3RCMAA/AgAAcAA/ArAAeuGBMAAjdMIwAD8CAABwAD8CsAB65oEwACN1QjAAPwIAAHAAPwKwAHrrgTAAI3XCMAA/AgAAcAA/ArAAevCBMAAjdkIwAD8CAABwAD8CsAB69YEwACN2wjAAPwIAAHAAPwKwAHr6gTAAI3dCMAA/AgAAcAA/ArAAev+BMAAjd8IwAD8CAABwAD8CsAB7BIEwACN4QjAAPwIAAHAAPwKwAHsJgTAAI3jCMAA/AgAAcAA/ArAAew6BMAAjeUIwAD8CAABwAD8CsAB7E4EwACN5wjAAPwIAAHAAPwKwAHsYgTAAI3pCMAA/AgAAcAA/ArAAex2BMAAjesIwAD8CAABwAD8CsAB7IoEwACN7AjAAPwIAAHAAPwKwAHsngTAAI3uCMAA/AgAAcAA/ArAAeyyBMAAjfAEwACN8gTAAI30CMAA/AgAAcAA/ArAAezQBMAAjfYIwAD8CAABwAD8CsAB7OQHYAPAAQACCcAB6GrAAehvwAHol8AB6NHAAej3wAHo/MAB6QHAAekQg4MEwACN+QjAAPwIAAHAAPwKwAHtIgdgA8ABAAIKwAHoYMAB6HTAAeh5wAHofsAB6IPAAeiIwAHojcAB6JLAAeimwAHoxwTAAI38CMAA/AgAAcAA/ArAAe1mB2ADwAEAAgnAAehWwAHoW8AB6JzAASZuwAHo1MAB6OjAAejtwAHpC8AB6RUEwACN/wjAAPwIAAHAAPwKwAHtpgdgA8ABAAITwAHoRMAB6EfAAehMwAHoUcAB6GXAAeihwAHoq8ABNb3AAeiuwAHos8AB6LjAAei9wAHowsAB6MzAAejZwAHo3sAB6OPAAejywAHpBgTAAI4CCMAA/AgAAcAA/ArAAe4OBMAAjg4IwAD8CAABwAD8CsAB7iIEwACOEAjAAPwIAAHAAPwKwAHuNgTAAI4SCMAA/AgAAcAA/ArAAe5KBMAAjhQIwAD8CAABwAD8CsAB7l4EwACOJgjAAPwIAAHAAPwKwAHucgI3gbsEwACOKQjAAPwIAAHAAPwKwAHuigTAAI5ECMABAu4AAsABAvAJwAEC8sAB7p4EwACORQjAAQLuAALAAQLwFcABAvLAAe63BMAAjkYIwAEC7gACwAEC8CHAAQLywAHu0AdgA8ABAu4DwAHuo8AB7rzAAe7VB2ADwAD+G4EAwAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu4GewAGJu8ABibuBnsABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7oALAAYm7oALAAYm7oPaObpOak8Wh4sAAavfAAI+Klw+UgJc6wACXWcABibvAAYm7wAGJuwnAAYm7wAGJu8ABibsJFSFTgVeCP4LhwACSB4NdhBGEFMAAmFvAAJeJhBfAAI5mwACL9oNwwACGvMAAh5TAAIX8wABy2MAAf3jAAH7lwABtB8AAbEfAAHqAwAGJu8ABibvAAYm7wAGJu6D2wAGJu8AAbBTAAGvhwABrbrVFwABpbcAAaNWDSsAAZomEDsAAZiuxUMAAY1HAAGFEwABgGcAAX1e0ncAASCPAAEfwwABHvcAARSOzO8AAYKq2qro1ug2JtMABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibvAAYm7wAGJu8ABibsEwACOiATAAI6JBMAAjooEwACOiwTAAI6MBMAAjo0EwACOjgdbB8AB8rnAAfK+wAHyw8AB8sjAAfLNwAHy0sAB8tcEwACOjwTAAI6QBMAAjpEEwACOkgTAAI6TBMAAjpQEwACOlQTAAI6WBMAAjpcEwACOmATAAI6ZBMAAjpoHWwzAAfL7wAHzAMAB8wXAAfMKwAHzD8AB8xTAAfMZwAHzHsAB8yPAAfMowAHzLcAB8zIEwACOpATAAI6lBMAAjqYEwACOpwTAAI6oBMAAjqkEwACOqgdbB8AB82rAAfNvwAHzdMAB83nAAfN+wAHzg8AB84gEwACOtQTAAI62BMAAjrcEwACOuATAAI65BMAAjroEwACOuwTAAIGYBMAAjrwEwACOvQTAAI6+B1sMwAHzrMAB87HAAfO2wAHzu8ABPOnAAfPAwAHzxcAB88rAAfPPwAHz1MAB89nAAfPeB2ADwAEAAhHAAJ9jwAC2AMAAnY3AAJ2HwACzaYFrwAC8hMAAtQ2DwsAAweHAAJ2swACfmMAAtjCAm8AAtmDAAJ8xwAC1zgTAAI8kCMABBHcAAAjAAQZhAAHAAQZkCQjAAQZhAAHAAQZkFQdgA8AA/hsIqQaTSpNKv2jAAGCqujWzO7o1B2ADwAD+GwipBpNKk0q/aMAAYKq6NbM7tqoHYAPAAP4bB4QXhBS2qoQXhBSEF4QUB2ADwAD+GwW2qoQXhBSEF4QUB2ADwAD+GxC2qro1ug2JtI5uk5qTxaHiwABq98AAj4rAAGEXpBakQaaTqI+tpQrAAQLCAjfA5OHACMAA/PEAAcAA/QTAAfUPCMABBisABcABBi15wAEGLnnAAQYvecABBjB5wAEGMXcHYAPAAQYrAcAB9SQIwAEGIwABwAEGJ8AB9UQCN8cnDgAIwAD88QABwAD9BMAB9V8EwACQDgTAAJALCMABBmEAAcABBmSBngdgA8AA/hsEqQaTSpNKv2gHYAPAAP4bB6kGk0qTSr9owABgqro1szsHYAPAAPxVgQAAAAAAAAAAAAB3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHcAdwAAAAAAd3cAAHcAAHcAAAAAAAAAAAAAd3d3d3d3dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd3d3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3AHcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjeD7AI3g+0CN4PuAjeD7wI3g/ACN4PxAjeD8gI3g/MCN4P3BMAAkPYIwAD8CAABwAD8CsAB9uAEwACQ+AjAAPwIAAHAAPwKwAH29ATAAJD6CMAA/AgAAcAA/ArAAfcIBMAAkPwIwAD8CAABwAD8CsAB9xwEwACQ/gjAAPwIAAHAAPwKwAH3MATAAJEACMAA/AgAAcAA/ArAAfdEBMAAkQIIwAD8CAABwAD8CsAB91gEwACRBAjAAPwIAAHAAPwKwAH3bATAAJEGCMAA/AgAAcAA/ArAAfeABMAAkQgIwAD8CAABwAD8CsAB95QEwACRCgjAAPwIAAHAAPwKwAH3qATAAJEMCMAA/AgAAcAA/ArAAfe8CMABB+EABcABB+cAwAEH6ADAAQfpecABB+p5wAEH63cEwACRDwjAAPwIAAHAAPwKwAH38AjAAQfhAAXAAQfnAMABB+gAwAEH6XnAAQfqecABB+sABMAAkRIIwAD8CAABwAD8CsAB+CQEwACRGgTAAJEhBMAAkSIEwACRJATAAJEtCMAA/AgAAcAA/ArAAfhMBMAAkS4IwAD8CAABwAD8CsAB+GAEwACRLwjAAPwIAAHAAPwKwAH4dATAAJExCMAA/AgAAcAA/ArAAfiIBMAAkX8HYAPAAP4bBAkJwAGJwsABicIEwACRvQI3wExLQAjAAPzxAAHAAP0EwAH4uAAAAAAAAACGZBIBRhMOAUxGIAFNlJ8BTl+7AVvI2wAAACAAAAAJAAAAUQAAWMAAAGhbAAByagAAe3kAAH5sAACjqAAA2fUAAN8CAAEGzAABDjsAA+X7AAP6zAAEBP4ABAnFAAQNGQAED9wABBszAARpeQAEeRUABISJAAawjQAGsyQABsmNAAbQWwAG4O4ABuXCAAbqJgAG+8kABwHnAAcMfQAHDhAABx+dAAcztQAHRgoAB02ZAAdUOAAHap0AB28NAAeHpwAHjw8AB6sSAAfL/gAI5U8ACfguAAroegALhX4AC5NoAAuUHwAL3FkAC/ZGAAyHAgAMrHQADK57AAy+1QAMymgADM9eAAzbrAAM6DgADO2yAAzwngAM+gQADPy8AA0ZygANI8EADW+2AA2OMAANkgQADaSvAA2rJgAN+s8ADgdAAA4VmAAOMdUADjI1AA702gAO/SYADw2LAA8R3AAPIgEADyw2ABFfxwAR0MoAEdjNABHuWgAR76AAEkT6ABJZ+AASWtoAEl7mABJuoQASfU8AEn6jABKFCAASmfUAEq2KABKztQASwLAAEsGfABLCkAASwuUAEwhUABM3EgATO1oAE0cRABNfPgATaBIAE2/8ABOfRAATutEAFNvQABVN1AAWQ1cAFkUEABZGLgAWSqwAFoOyABaMKwAYFuIAGBkgABgdBAAYJLQAGCenABg4YgAYOeUAGELwABhGogAYSakAGGWcABh2OwAYf7kAGVhXABmCWwAZvikAGb+sABsPPQAbHeUAG1xNABtezgAbsUoAG7M0ABu3pAAbxi4AG8vkABvOJQAbz5MAG9tLABvfxQAb5EgAG+qdABvr4wAb7uUAG/FvABv5pAAb/h8AHPUTAB0BlwAdAnwAHe9hAB6K7wAekeEAHtZTAB7tbwAfFgUAHxqIAB86gAAfYqsAIKICACDZBgAhAj8AIRc1ACEwmQAhYnYAIYYkACGYEgAhsi4AIbxgACPxlAAkEu8AJGreACTKnQAk8TUAJQOEACUD8gAmECEAJihpACYpzQAmLzkAJ3ICACd04wAnd9IAJ3xEACd/MwAngYAAJ4K7ACgiZQAoKOwAKDsVAChIJQAoTRoAKFfIACheagAoX9cAKGEfAChj+wAobBUAKHfNACh98QAovusAKMQ2ACjIIwApJBgAKSU9ACneegAp858AKfdmACoEgQAqDuIAKkP7ACpSHwAqVBsAKloLACpikwAqY6wAKn4EACqQiAAqnMsAKwIyACsPeQArErwAKxcdACscngArHWYAKzWaACs6pAArP68AK0K2ACtP7gArUqsAK1PEACu8ewAuBx0ALglIAC4K+wAuDdoALhrZAC4crQAuH6QALiD0AC4yoAAuaLwALojDAC6m4AAu368ALvADAC8AjwAvUswAL2XNAC99zgAvjbIAMRUBADEwIAAxMmwAMbDvADJv+wAyghgAM+FvADQrOQA0QlYANJX0ADSvWAA0u1EANNECADU8qQA1j5sANcqwADXYkAA19ckANiSgADZ1DAA2rHQANuLeADbkVgA3D/YAN2tAADd+fAA3lN8AOFjWADiszQA4uqoAOMZSADj0XQA5jW8AOhFIADpqhwA6c88AOoj2ADskCAA7L5sAO2pHADuJ+QA7shMAO7qtADwNtgA8K1wAPDpTADxgdwA8irwAPIugADyoNgA/bBkAP3KGAD/9tQBBNUcAQXWKAEHhDQBB4fcAQeWbAEIKsQBCKigAQqO3AEKmpgBCtGoAQtfGAEMGsgBDeMMAQ4b3AEOZvABDpl8ARMMCAETRUwBE5vEAROrHAET4eQBFiAMARZneAEWnpgBFwCkARcC6AEXTUwBGIugARiWyAEZD9QBGWCEARnUzAEaYnwBG5yIARuh9AEbpagBG844AR7FrAEe1fwBHtzoAR9tsAEfisABH9bMASAk2AEhUCwBJAbkASRZLAEkwjgBJZEwASX5VAEmDRwBJn8cASax4AEm+8wBKx4UATD0zAE26NQBQ1kYAUOapAFD10ABRDd8AUSUCAFEmvwBRLkQAUVRdAFFs5QBR240AUeqnAFHv2gBSxwoAUsgnAFLzmwBT5HsAU/JcAFPzIgBUMgUAVDo7AFRCBABUR8gAVHIEAFS1eABVDCYAVSrhAFVFiABVVrAAVXeEAFV5PABVge4AVZ8EAFW9sgBVwB4AVdYLAFXbKwBWEmUAVixcAFZAOgBWSagAVk+VAFbJGgBW5bgAVudSAFbucABW/3YAVxLOAFdjWgBXwwEAV9xdAFiqHABYqnAAWUwjAFlnNABZf4MAWefqAFoYVABa3A8AWtyeAFtJbgBbiQ0AW44VAFuzSABb3JIAXGhVAFx3vABchooAXKH3AFy4fwBcvgcAXMPMAFzGcwBc5tkAXRWIAF0XhgBdGWAAXSoCAF0u/gBdRq0AXZiNAF2i8gBdpVMAXbmlAF4JHQBeKB8AXk2dAF5RnABeZg0AXn+BAF6EPQBesQQAXrIaAF7WDgBe11wAXtkQAF7iPABfLcsAXy5WAF9CPQBfaa8AX2veAF9t5gBfdoUAX3+mAF+JxwBfmpwAX5smAF+dAgBfqfAAX6wIAF+ujgBfsgYAX7OQAF+1GABfuFwAX7jGAF/BUwBf0CsAX9loAF/sIQBgFFIAYBZpAGLVSwBmV5QAaHRMAGi3RgBozi0Aaib7AGqWsABq1/0Aa7lqAGu54QB2Dh8Adsy0AHe1KgB3zXAAd876AHxYwgB8XlgAfF9nAIKfwwCGZBIAAAIAAV3J2A==